[SCM] image display tool for astronomy branch, master, updated. 90dfc076cfa19207c65068ff453c13396e5304e2
Ole Streicher
debian at liska.ath.cx
Thu Feb 9 10:36:31 UTC 2012
The following commit has been merged in the master branch:
commit 7deb554bb7e51c424c2ec2c3a55f8f92e448606c
Author: Ole Streicher <debian at liska.ath.cx>
Date: Mon Jan 30 10:55:24 2012 +0100
Remove ast-5.3.1; it will be build separately.
diff --git a/ast-5.3-1/AST_ERR b/ast-5.3-1/AST_ERR
deleted file mode 100644
index b8dcae5..0000000
--- a/ast-5.3-1/AST_ERR
+++ /dev/null
@@ -1,555 +0,0 @@
-* FORTRAN error include file for facility AST (Code 1521)
-* Generated by the MESSGEN utility
-
-* attribute getting error
- INTEGER AST__ATGER
- PARAMETER ( AST__ATGER = 233933154 )
-
-* attribute setting error
- INTEGER AST__ATSER
- PARAMETER ( AST__ATSER = 233933162 )
-
-* attribute value invalid
- INTEGER AST__ATTIN
- PARAMETER ( AST__ATTIN = 233933170 )
-
-* axis index invalid
- INTEGER AST__AXIIN
- PARAMETER ( AST__AXIIN = 233933178 )
-
-* bad attribute name
- INTEGER AST__BADAT
- PARAMETER ( AST__BADAT = 233933186 )
-
-* zero-sized box given
- INTEGER AST__BADBX
- PARAMETER ( AST__BADBX = 233933194 )
-
-* bad input data
- INTEGER AST__BADIN
- PARAMETER ( AST__BADIN = 233933202 )
-
-* bad number of input coordinates
- INTEGER AST__BADNI
- PARAMETER ( AST__BADNI = 233933210 )
-
-* bad number of output coordinates
- INTEGER AST__BADNO
- PARAMETER ( AST__BADNO = 233933218 )
-
-* PolyMap contains illegal power value
- INTEGER AST__BADPW
- PARAMETER ( AST__BADPW = 233933226 )
-
-* ShiftMap contains no shift information
- INTEGER AST__BADSM
- PARAMETER ( AST__BADSM = 233933234 )
-
-* WinMap contains no bounds information
- INTEGER AST__BADWM
- PARAMETER ( AST__BADWM = 233933242 )
-
-* bad break index
- INTEGER AST__BDBRK
- PARAMETER ( AST__BDBRK = 233933250 )
-
-* bad field specifier
- INTEGER AST__BDFMT
- PARAMETER ( AST__BDFMT = 233933258 )
-
-* invalid FITS keyword value found
- INTEGER AST__BDFTS
- PARAMETER ( AST__BDFTS = 233933266 )
-
-* inappropriate Object supplied
- INTEGER AST__BDOBJ
- PARAMETER ( AST__BDOBJ = 233933274 )
-
-* wrong number of clipping axes
- INTEGER AST__CLPAX
- PARAMETER ( AST__CLPAX = 233933282 )
-
-* range of coordinates invalid
- INTEGER AST__CORNG
- PARAMETER ( AST__CORNG = 233933290 )
-
-* too many breaks in a curve
- INTEGER AST__CVBRK
- PARAMETER ( AST__CVBRK = 233933298 )
-
-* array dimensions invalid
- INTEGER AST__DIMIN
- PARAMETER ( AST__DIMIN = 233933306 )
-
-* date/time error
- INTEGER AST__DTERR
- PARAMETER ( AST__DTERR = 233933314 )
-
-* invalid use of astEnd
- INTEGER AST__ENDIN
- PARAMETER ( AST__ENDIN = 233933322 )
-
-* end of input Channel encountered
- INTEGER AST__EOCHN
- PARAMETER ( AST__EOCHN = 233933330 )
-
-* attempt to export Object pointer from level zero
- INTEGER AST__EXPIN
- PARAMETER ( AST__EXPIN = 233933338 )
-
-* corrupted FitsChan supplied
- INTEGER AST__FCRPT
- PARAMETER ( AST__FCRPT = 233933346 )
-
-* error while formatting coordinate value
- INTEGER AST__FMTER
- PARAMETER ( AST__FMTER = 233933354 )
-
-* Frame index invalid
- INTEGER AST__FRMIN
- PARAMETER ( AST__FRMIN = 233933362 )
-
-* FrameSet invalid
- INTEGER AST__FRSIN
- PARAMETER ( AST__FRSIN = 233933370 )
-
-* cannot convert FITS data value type
- INTEGER AST__FTCNV
- PARAMETER ( AST__FTCNV = 233933378 )
-
-* low level graphics error
- INTEGER AST__GRFER
- PARAMETER ( AST__GRFER = 233933386 )
-
-* invalid Handle
- INTEGER AST__INHAN
- PARAMETER ( AST__INHAN = 233933394 )
-
-* incompatible numbers of coordinates
- INTEGER AST__INNCO
- PARAMETER ( AST__INNCO = 233933402 )
-
-* internal programming error
- INTEGER AST__INTER
- PARAMETER ( AST__INTER = 233933410 )
-
-* incompatible transformation directions
- INTEGER AST__INTRD
- PARAMETER ( AST__INTRD = 233933418 )
-
-* circular dependency between KeyMaps
- INTEGER AST__KYCIR
- PARAMETER ( AST__KYCIR = 233933426 )
-
-* class loader error
- INTEGER AST__LDERR
- PARAMETER ( AST__LDERR = 233933434 )
-
-* invalid lookup table increment
- INTEGER AST__LUTII
- PARAMETER ( AST__LUTII = 233933442 )
-
-* invalid number of lookup table elements
- INTEGER AST__LUTIN
- PARAMETER ( AST__LUTIN = 233933450 )
-
-* requested memory size invalid
- INTEGER AST__MEMIN
- PARAMETER ( AST__MEMIN = 233933458 )
-
-* not a 2d or 3d MatrixMap
- INTEGER AST__MTR23
- PARAMETER ( AST__MTR23 = 233933466 )
-
-* null rotation axis supplied
- INTEGER AST__MTRAX
- PARAMETER ( AST__MTRAX = 233933474 )
-
-* bad matrix shapes for multiplication
- INTEGER AST__MTRML
- PARAMETER ( AST__MTRML = 233933482 )
-
-* null matrix supplied
- INTEGER AST__MTRMT
- PARAMETER ( AST__MTRMT = 233933490 )
-
-* number of axes invalid
- INTEGER AST__NAXIN
- PARAMETER ( AST__NAXIN = 233933498 )
-
-* number of characters invalid
- INTEGER AST__NCHIN
- PARAMETER ( AST__NCHIN = 233933506 )
-
-* number of coordinates invalid
- INTEGER AST__NCOIN
- PARAMETER ( AST__NCOIN = 233933514 )
-
-* number of coordinates per point invalid
- INTEGER AST__NCPIN
- PARAMETER ( AST__NCPIN = 233933522 )
-
-* number of array elements invalid
- INTEGER AST__NELIN
- PARAMETER ( AST__NELIN = 233933530 )
-
-* number of output coordinates too small
- INTEGER AST__NOCTS
- PARAMETER ( AST__NOCTS = 233933538 )
-
-* transformation not defined
- INTEGER AST__NODEF
- PARAMETER ( AST__NODEF = 233933546 )
-
-* required FITS keywords missing
- INTEGER AST__NOFTS
- PARAMETER ( AST__NOFTS = 233933554 )
-
-* unable to allocate memory
- INTEGER AST__NOMEM
- PARAMETER ( AST__NOMEM = 233933562 )
-
-* number of output points too small
- INTEGER AST__NOPTS
- PARAMETER ( AST__NOPTS = 233933570 )
-
-* attribute is read-only
- INTEGER AST__NOWRT
- PARAMETER ( AST__NOWRT = 233933578 )
-
-* number of points invalid
- INTEGER AST__NPTIN
- PARAMETER ( AST__NPTIN = 233933586 )
-
-* Object invalid
- INTEGER AST__OBJIN
- PARAMETER ( AST__OBJIN = 233933594 )
-
-* invalid Plot option
- INTEGER AST__OPT
- PARAMETER ( AST__OPT = 233933602 )
-
-* points data structure invalid
- INTEGER AST__PDSIN
- PARAMETER ( AST__PDSIN = 233933610 )
-
-* no numerical labels can be produced
- INTEGER AST__PLFMT
- PARAMETER ( AST__PLFMT = 233933618 )
-
-* permutation invalid
- INTEGER AST__PRMIN
- PARAMETER ( AST__PRMIN = 233933626 )
-
-* pointer invalid
- INTEGER AST__PTRIN
- PARAMETER ( AST__PTRIN = 233933634 )
-
-* range of points invalid
- INTEGER AST__PTRNG
- PARAMETER ( AST__PTRNG = 233933642 )
-
-* read error
- INTEGER AST__RDERR
- PARAMETER ( AST__RDERR = 233933650 )
-
-* invalid or corrupted Region structure supplied
- INTEGER AST__REGIN
- PARAMETER ( AST__REGIN = 233933658 )
-
-* invalid attempt to remove last Frame
- INTEGER AST__REMIN
- PARAMETER ( AST__REMIN = 233933666 )
-
-* sky coordinate system invalid
- INTEGER AST__SCSIN
- PARAMETER ( AST__SCSIN = 233933674 )
-
-* axis selection invalid
- INTEGER AST__SELIN
- PARAMETER ( AST__SELIN = 233933682 )
-
-* bad SLALIB transformation type
- INTEGER AST__SLAIN
- PARAMETER ( AST__SLAIN = 233933690 )
-
-* coordinate transformation not defined
- INTEGER AST__TRNND
- PARAMETER ( AST__TRNND = 233933698 )
-
-* unmatched quotes
- INTEGER AST__UNMQT
- PARAMETER ( AST__UNMQT = 233933706 )
-
-* valid area too small
- INTEGER AST__VSMAL
- PARAMETER ( AST__VSMAL = 233933714 )
-
-* non-existent longitude or latitude axis
- INTEGER AST__WCSAX
- PARAMETER ( AST__WCSAX = 233933722 )
-
-* too few mapping coordinates
- INTEGER AST__WCSNC
- PARAMETER ( AST__WCSNC = 233933730 )
-
-* invalid projection parameters
- INTEGER AST__WCSPA
- PARAMETER ( AST__WCSPA = 233933738 )
-
-* unknown projection type
- INTEGER AST__WCSTY
- PARAMETER ( AST__WCSTY = 233933746 )
-
-* too many Objects in use at once
- INTEGER AST__XSOBJ
- PARAMETER ( AST__XSOBJ = 233933754 )
-
-* zoom factor invalid
- INTEGER AST__ZOOMI
- PARAMETER ( AST__ZOOMI = 233933762 )
-
-* bad coordinate index
- INTEGER AST__BADCI
- PARAMETER ( AST__BADCI = 233933770 )
-
-* FrameSet integrity lost
- INTEGER AST__ILOST
- PARAMETER ( AST__ILOST = 233933778 )
-
-* error in IntraMap transformation function
- INTEGER AST__ITFER
- PARAMETER ( AST__ITFER = 233933786 )
-
-* IntraMap transformation function name invalid
- INTEGER AST__ITFNI
- PARAMETER ( AST__ITFNI = 233933794 )
-
-* Mapping bounding box not found
- INTEGER AST__MBBNF
- PARAMETER ( AST__MBBNF = 233933802 )
-
-* multiple registration of IntraMap transformation function
- INTEGER AST__MRITF
- PARAMETER ( AST__MRITF = 233933810 )
-
-* Object class unknown
- INTEGER AST__OCLUK
- PARAMETER ( AST__OCLUK = 233933818 )
-
-* error while unformatting a coordinate value
- INTEGER AST__UNFER
- PARAMETER ( AST__UNFER = 233933826 )
-
-* unregistered IntraMap transformation function
- INTEGER AST__URITF
- PARAMETER ( AST__URITF = 233933834 )
-
-* grid bounds invalid
- INTEGER AST__GBDIN
- PARAMETER ( AST__GBDIN = 233933842 )
-
-* number of grid dimensions invalid
- INTEGER AST__NGDIN
- PARAMETER ( AST__NGDIN = 233933850 )
-
-* positional accuracy tolerance invalid
- INTEGER AST__PATIN
- PARAMETER ( AST__PATIN = 233933858 )
-
-* sub-pixel interpolation scheme invalid
- INTEGER AST__SISIN
- PARAMETER ( AST__SISIN = 233933866 )
-
-* scale size in pixels invalid
- INTEGER AST__SSPIN
- PARAMETER ( AST__SSPIN = 233933874 )
-
-* error in user-supplied sub-pixel interpolation function
- INTEGER AST__UINER
- PARAMETER ( AST__UINER = 233933882 )
-
-* error in user-supplied 1-d sub-pixel interpolation kernel
- INTEGER AST__UK1ER
- PARAMETER ( AST__UK1ER = 233933890 )
-
-* invalid comma in expression
- INTEGER AST__COMIN
- PARAMETER ( AST__COMIN = 233933898 )
-
-* invalid constant in expression
- INTEGER AST__CONIN
- PARAMETER ( AST__CONIN = 233933906 )
-
-* duplicate variable name
- INTEGER AST__DUVAR
- PARAMETER ( AST__DUVAR = 233933914 )
-
-* invalid number of transformation functions
- INTEGER AST__INNTF
- PARAMETER ( AST__INNTF = 233933922 )
-
-* missing or invalid operand in expression
- INTEGER AST__MIOPA
- PARAMETER ( AST__MIOPA = 233933930 )
-
-* missing or invalid operator in expression
- INTEGER AST__MIOPR
- PARAMETER ( AST__MIOPR = 233933938 )
-
-* missing variable name
- INTEGER AST__MISVN
- PARAMETER ( AST__MISVN = 233933946 )
-
-* missing left parenthesis in expression
- INTEGER AST__MLPAR
- PARAMETER ( AST__MLPAR = 233933954 )
-
-* missing right parenthesis in expression
- INTEGER AST__MRPAR
- PARAMETER ( AST__MRPAR = 233933962 )
-
-* missing right hand side in function
- INTEGER AST__NORHS
- PARAMETER ( AST__NORHS = 233933970 )
-
-* undefined variable or function in expression
- INTEGER AST__UDVOF
- PARAMETER ( AST__UDVOF = 233933978 )
-
-* variable name invalid
- INTEGER AST__VARIN
- PARAMETER ( AST__VARIN = 233933986 )
-
-* wrong number of function arguments in expression
- INTEGER AST__WRNFA
- PARAMETER ( AST__WRNFA = 233933994 )
-
-* invalid units specification
- INTEGER AST__BADUN
- PARAMETER ( AST__BADUN = 233934002 )
-
-* no rest frequency is defined
- INTEGER AST__NORSF
- PARAMETER ( AST__NORSF = 233934010 )
-
-* no standard of rest is defined
- INTEGER AST__NOSOR
- PARAMETER ( AST__NOSOR = 233934018 )
-
-* invalid SpecMap
- INTEGER AST__SPCIN
- PARAMETER ( AST__SPCIN = 233934026 )
-
-* invalid XML name or prefix
- INTEGER AST__XMLNM
- PARAMETER ( AST__XMLNM = 233934034 )
-
-* invalid XML comment text
- INTEGER AST__XMLCM
- PARAMETER ( AST__XMLCM = 233934042 )
-
-* invalid XML processing instruction target text
- INTEGER AST__XMLPT
- PARAMETER ( AST__XMLPT = 233934050 )
-
-* invalid XML content item index
- INTEGER AST__XMLIT
- PARAMETER ( AST__XMLIT = 233934058 )
-
-* supplied XML document is not well formed
- INTEGER AST__XMLWF
- PARAMETER ( AST__XMLWF = 233934066 )
-
-* Range of log axis scale includes zero
- INTEGER AST__ZERAX
- PARAMETER ( AST__ZERAX = 233934074 )
-
-* Invalid parameters for offset sky coordinate system
- INTEGER AST__BADOC
- PARAMETER ( AST__BADOC = 233934082 )
-
-* error getting a named value from a KeyMap
- INTEGER AST__MPGER
- PARAMETER ( AST__MPGER = 233934090 )
-
-* invalid integer index supplied for a KeyMap entry
- INTEGER AST__MPIND
- PARAMETER ( AST__MPIND = 233934098 )
-
-* region cannot be re-centred
- INTEGER AST__REGCN
- PARAMETER ( AST__REGCN = 233934106 )
-
-* attribute has no usable value
- INTEGER AST__NOVAL
- PARAMETER ( AST__NOVAL = 233934114 )
-
-* incompatible time scales
- INTEGER AST__INCTS
- PARAMETER ( AST__INCTS = 233934122 )
-
-* invalid TimeMap
- INTEGER AST__TIMIN
- PARAMETER ( AST__TIMIN = 233934130 )
-
-* cannot use supplied AstroCoords info
- INTEGER AST__STCKEY
- PARAMETER ( AST__STCKEY = 233934138 )
-
-* invalid AstroCoords index
- INTEGER AST__STCIND
- PARAMETER ( AST__STCIND = 233934146 )
-
-* cannot conserve flux whilst resampling an array of data
- INTEGER AST__CNFLX
- PARAMETER ( AST__CNFLX = 233934154 )
-
-* Unknown AST tuning parameter name supplied
- INTEGER AST__TUNAM
- PARAMETER ( AST__TUNAM = 233934162 )
-
-* Bad value supplied for a public function parameter
- INTEGER AST__BDPAR
- PARAMETER ( AST__BDPAR = 233934170 )
-
-* Supplied FrameSet does not contain any independent axes
- INTEGER AST__3DFSET
- PARAMETER ( AST__3DFSET = 233934178 )
-
-* Attempt to delete original Plot3D base Frame
- INTEGER AST__PXFRRM
- PARAMETER ( AST__PXFRRM = 233934186 )
-
-* Illegal syntax for string substitution template
- INTEGER AST__BADSUB
- PARAMETER ( AST__BADSUB = 233934194 )
-
-* Incompatible flags for re-sampling or re-binning
- INTEGER AST__BADFLG
- PARAMETER ( AST__BADFLG = 233934202 )
-
-* Error locking or unlocking an AST Object
- INTEGER AST__LCKERR
- PARAMETER ( AST__LCKERR = 233934210 )
-
-* FITS keyword had undefined value
- INTEGER AST__FUNDEF
- PARAMETER ( AST__FUNDEF = 233934218 )
-
-* invalid integer index supplied for a KeyMap vector element
- INTEGER AST__MPVIN
- PARAMETER ( AST__MPVIN = 233934226 )
-
-* operation specifier invalid
- INTEGER AST__OPRIN
- PARAMETER ( AST__OPRIN = 233934234 )
-
-* no inside point found
- INTEGER AST__NONIN
- PARAMETER ( AST__NONIN = 233934242 )
-
-* requested key not found in KeyMap
- INTEGER AST__MPKER
- PARAMETER ( AST__MPKER = 233934250 )
-
diff --git a/ast-5.3-1/COPYING.LIB b/ast-5.3-1/COPYING.LIB
deleted file mode 100644
index eb685a5..0000000
--- a/ast-5.3-1/COPYING.LIB
+++ /dev/null
@@ -1,481 +0,0 @@
- GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 675 Mass Ave, Cambridge, MA 02139, USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- Appendix: How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
- To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
- <one line to give the library's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this library; if not, write to the Free
- Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
- <signature of Ty Coon>, 1 April 1990
- Ty Coon, President of Vice
-
-That's all there is to it!
diff --git a/ast-5.3-1/Ers.h b/ast-5.3-1/Ers.h
deleted file mode 100644
index 7ce821b..0000000
--- a/ast-5.3-1/Ers.h
+++ /dev/null
@@ -1,245 +0,0 @@
-#ifndef ERSINC
-#define ERSINC
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* E r s . h
-
- * Module name:
- Ers.h
-
- * Function:
- Function header for the Ers routines
-
- * Description:
- Should be included by all files using the Ers routines.
-
- * Language:
- C
-
- * Support: Tony Farrell, AAO
-
- * Copyright (c) Anglo-Australian Telescope Board, 1995.
- Not to be used for commercial purposes without AATB permission.
-
- * @(#) $Id: Ers.h,v 1.1.1.1 2009/11/02 16:01:15 joye Exp $
-
-
- * History:
- 04-Aug-1992 - TJF - Original version
- 25-Sep-1992 - TJF - Update comments
- 06-Oct-1992 - TJF - Rewrite for complete Ers package.
- 04-Aug-1993 - TJF - maxsize argument to ErsSPrintf needs a type
- 28-Sep-1993 - TJF - Use GNUC attribute to flag the ers calls
- as printf style. Use drama.h for configuration
- stuff.
-
- 29-Sep-1993 - TJF - Add Sccs id
- 06-Mar-1994 - TJF - Add Task Id stuff.
- 05-Feb-1995 - TJF - Add BROADCAST flag
- 06-Aug-1996 - TJF - Add const to strings arguments of ErsVSPrintf
- 30-May-2001 - TJF - Add ErsSetLogRoutine.
- 15-Jun-2001 - TJF - Add ErsGetTaskId.
- {@change entry@}
-
-
- */
-
-#ifdef ERS_STANDALONE
-/*
- * DRAMA macros and types used by Ers. They are defined here when we
- * are building ers standalone.
- */
-#define DVOID void
-#define DVOIDP void *
-#define DPUBLIC extern
-#define DPRIVATE static
-#define DCONSTV const
-#define DCONSTR const
-#define STATUS__OK 0
-#define DPROTOTYPES_OK
-#define DFLOAT_OK
-#define DCONST_I
-typedef long int StatusType;
-#define StatusOkP(_value_) (*(_value_) == STATUS__OK)
-#else
-/*
- * Include the drama.h file for configuration macros.
- */
-
-#include "drama.h"
-
-#include "status.h" /* For StatusType etc */
-#endif
-
-/*
- * Get around problems in Sparc include files, they are not ANSI compatible
- */
-#if defined(__sparc__) && !defined(sparc)
-#define sparc 1
-#endif
-
-/*
- * Floating point stuff. Only used in ErsVSPrintf.
- */
-#ifdef DFLOAT_OK
-/*
- * These values taken from bsd floatio.h
- */
-# define ERS_MAXEXP 308
-# define ERS_MAXFRACT 39
-#endif
-
-/*
- * Constants
- */
-
-#define ERS_C_LEN 200 /* Maximum length of reported messages */
-#define ERS_C_MAXMSG 30 /* Maximum number of reported messages */
-
-#define ERS_M_NOFMT (1<<0) /* Message flag masks */
-#define ERS_M_HIGHLIGHT (1<<1)
-#define ERS_M_BELL (1<<2)
-#define ERS_M_ALARM (1<<3)
-#define ERS_M_BROADCAST (1<<4)
-
-
-/*
- * This structure is used to store details of a message
- */
-typedef struct {
- StatusType mesStatus; /* Status of message */
- unsigned int context; /* Context message was written at */
- int flags; /* Message flags */
- char message[ERS_C_LEN]; /* The formated message */
- } ErsMessageType;
-
-typedef DVOIDP ErsTaskIdType;
-
-#ifdef DPROTOTYPES_OK
-/*
- * This type is that required for log routines - called on each call to
- * ErsRep with details of a single message.
- *
- * The argument "logArg" is a user value supplied when ErsStart is called.
- * It enables the user to pass any appropriate value to the log routine.
- */
-typedef DVOID (*ErsLogRoutineType)(
- DVOIDP logArg, /* Supplied to ErsStart */
- DCONSTV ErsMessageType * message,/* The message */
- StatusType * status);
-/*
- * The type is that requried for the output routine - called to output
- * the messages to the user. An array of message may be output by one
- * call, with count being the number of message to output.
- *
- * The argument "outArg" is a user value supplied when ErsStart is called.
- * It enables the user to pass any appropriate value to the log routine.
- */
-typedef DVOID (*ErsOutRoutineType)(
- DVOIDP outArg, /* Supplied to ErsStart */
- unsigned int count, /* Number of messages */
- DCONSTV ErsMessageType messages[],/* Array of messages */
- StatusType * status);
-
-
-/*
- * Function prototypes.
- *
- *
- * We can't define these prorotype in the Ers main module unless we have
- * stdarg.h.
- */
-#if !defined(ERS_MAIN) || defined(DSTDARG__OK)
- DPUBLIC DVOID ErsRep(DCONSTV int flags, StatusType * status,
- DCONSTV char * string , ...)
-#ifdef __GNUC__
- __attribute__ ((format (printf, 3, 4)))
-#endif
- ;
- DPUBLIC DVOID ErsOut(DCONSTV int flags, StatusType * status,
- DCONSTV char * string, ...)
-#ifdef __GNUC__
- __attribute__ ((format (printf, 3, 4)))
-#endif
- ;
- DPUBLIC int ErsSPrintf(DCONSTV int maxLength,
- char *string,
- DCONSTV char * fmt,...)
-#ifdef __GNUC__
- __attribute__ ((format (printf, 3, 4)))
-#endif
- ;
-
-#endif /* DSTDARG_OK */
-
-DPUBLIC ErsTaskIdType ErsStart(
- ErsOutRoutineType outRoutine,
- DVOIDP outArg,
- ErsLogRoutineType logRoutine,
- DVOIDP logArg,
- StatusType * status);
-DPUBLIC DVOID ErsStop(StatusType * status);
-DPUBLIC DVOID ErsPush(void);
-DPUBLIC DVOID ErsAnnul(StatusType * status);
-DPUBLIC DVOID ErsFlush(StatusType * status);
-DPUBLIC DVOID ErsClear(StatusType * status);
-DPUBLIC DVOID ErsPop(void);
-DPUBLIC DVOID ErsSetLogRoutine(
- ErsLogRoutineType logRoutine,
- DVOIDP logArg,
- ErsLogRoutineType *oldLogRoutine,
- DVOIDP *oldLogArg,
- StatusType * status);
-
-DPUBLIC ErsTaskIdType ErsGetTaskId(StatusType *status);
-DPUBLIC DVOID ErsEnableTask(ErsTaskIdType TaskId,
- ErsTaskIdType * SavedTaskId);
-DPUBLIC DVOID ErsRestoreTask(ErsTaskIdType TaskId);
-
-
-#ifdef DSTDARG_OK
-# include <stdarg.h>
-#else
-# include <varargs.h>
-#endif
-DPUBLIC int ErsVSPrintf(
- int maxLength,
- char *string ,
- DCONSTV char * fmt0,
- va_list ap);
-#else
-/* Don't use prorotypes */
-typedef DVOID (*ErsLogRoutineType)();
-typedef DVOID (*ErsOutRoutineType)();
-
-DPUBLIC DVOID ErsRep();
-DPUBLIC DVOID ErsOut();
-
-DPUBLIC DVOID ErsStart();
-DPUBLIC DVOID ErsStop();
-DPUBLIC DVOID ErsPush();
-DPUBLIC DVOID ErsPop();
-DPUBLIC DVOID ErsAnnul();
-DPUBLIC DVOID ErsFlush();
-DPUBLIC DVOID ErsClear();
-DPUBLIC DVOID ErsSetLogRoutine();
-DPUBLIC ErsTaskIdType ErsGetTaskId();
-
-DPUBLIC int ErsVSPrintf();
-DPUBLIC int ErsSPrintf();
-
-DPUBLIC DVOID ErsEnableTask();
-DPUBLIC DVOID ErsRestoreTask();
-
-
-#endif
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/ast-5.3-1/GRF_PAR b/ast-5.3-1/GRF_PAR
deleted file mode 100644
index 23db670..0000000
--- a/ast-5.3-1/GRF_PAR
+++ /dev/null
@@ -1,124 +0,0 @@
-*+
-* Name:
-* GRF_PAR
-
-* Purpose:
-* Define the constants needed to implement Fortran GRF routines.
-
-* Language:
-* Fortran 77
-
-* Type of Module:
-* Include file.
-
-* Description:
-* This file contains definitions which are required by Fortran 77
-* programs which implement their own grf routines (routines for
-* drawing graphics primitive used by the AST Plot class).
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 13-JUN-2001 (DSB):
-* Original version.
-*-
-
-* Values identifying different graphics attributes.
- INTEGER GRF__STYLE
- PARAMETER ( GRF__STYLE = 0 )
-
- INTEGER GRF__WIDTH
- PARAMETER ( GRF__WIDTH = 1 )
-
- INTEGER GRF__SIZE
- PARAMETER ( GRF__SIZE = 2 )
-
- INTEGER GRF__FONT
- PARAMETER ( GRF__FONT = 3 )
-
- INTEGER GRF__COLOUR
- PARAMETER ( GRF__COLOUR = 4 )
-
-* Values identifying different graphics primatives.
- INTEGER GRF__TEXT
- PARAMETER ( GRF__TEXT = 0 )
-
- INTEGER GRF__LINE
- PARAMETER ( GRF__LINE = 1 )
-
- INTEGER GRF__MARK
- PARAMETER ( GRF__MARK = 2 )
-
-* The number of different graphics attributes.
- INTEGER GRF__NATTR
- PARAMETER ( GRF__NATTR = 5 )
-
-* Values identifying capabilities.
- INTEGER GRF__ESC
- PARAMETER ( GRF__ESC = 0 )
-
- INTEGER GRF__MJUST
- PARAMETER ( GRF__MJUST = 1 )
-
- INTEGER GRF__SCALES
- PARAMETER ( GRF__SCALES = 2 )
-
-* Values identifying types of graphics escape sequence
- INTEGER GRF__ESPER
- PARAMETER ( GRF__ESPER = 1 )
-
- INTEGER GRF__ESSUP
- PARAMETER ( GRF__ESSUP = 2 )
-
- INTEGER GRF__ESSUB
- PARAMETER ( GRF__ESSUB = 3 )
-
- INTEGER GRF__ESGAP
- PARAMETER ( GRF__ESGAP = 4 )
-
- INTEGER GRF__ESBAC
- PARAMETER ( GRF__ESBAC = 5 )
-
- INTEGER GRF__ESSIZ
- PARAMETER ( GRF__ESSIZ = 6 )
-
- INTEGER GRF__ESWID
- PARAMETER ( GRF__ESWID = 7 )
-
- INTEGER GRF__ESFON
- PARAMETER ( GRF__ESFON = 8 )
-
- INTEGER GRF__ESCOL
- PARAMETER ( GRF__ESCOL = 9 )
-
- INTEGER GRF__ESSTY
- PARAMETER ( GRF__ESSTY = 10 )
-
- INTEGER GRF__ESPOP
- PARAMETER ( GRF__ESPOP = 11 )
-
- INTEGER GRF__ESPSH
- PARAMETER ( GRF__ESPSH = 12 )
-
-
diff --git a/ast-5.3-1/LICENCE b/ast-5.3-1/LICENCE
deleted file mode 100644
index 5b6e7c6..0000000
--- a/ast-5.3-1/LICENCE
+++ /dev/null
@@ -1,340 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/ast-5.3-1/Makefile.am b/ast-5.3-1/Makefile.am
deleted file mode 100644
index 21ec2e1..0000000
--- a/ast-5.3-1/Makefile.am
+++ /dev/null
@@ -1,500 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-# First declare various groups of files. These were initially extracted
-# from the grp.make file, as constructed by the SDT newdev command
-GRP_C_ROUTINES = \
- axis.c \
- box.c \
- c2f77.c \
- channel.c \
- circle.c \
- cmpframe.c \
- cmpmap.c \
- cmpregion.c \
- dsbspecframe.c \
- dssmap.c \
- ellipse.c \
- error.c \
- fbox.c \
- fchannel.c \
- fcircle.c \
- fcmpframe.c \
- fcmpmap.c \
- fcmpregion.c \
- fdsbspecframe.c \
- fdssmap.c \
- fellipse.c \
- ferror.c \
- ffitschan.c \
- ffluxframe.c \
- fframe.c \
- fframeset.c \
- fgrismmap.c \
- finterval.c \
- fintramap.c \
- fitschan.c \
- fkeymap.c \
- flutmap.c \
- fluxframe.c \
- fmapping.c \
- fmathmap.c \
- fmatrixmap.c \
- fnullregion.c \
- fobject.c \
- fpcdmap.c \
- fpermmap.c \
- fplot.c \
- fplot3d.c \
- fpointlist.c \
- fpolygon.c \
- fpolymap.c \
- fprism.c \
- frame.c \
- frameset.c \
- fratemap.c \
- fnormmap.c \
- fregion.c \
- fshiftmap.c \
- fskyframe.c \
- fslamap.c \
- fspecfluxframe.c \
- fspecframe.c \
- fspecmap.c \
- ftimeframe.c \
- ftimemap.c \
- fsphmap.c \
- ftranmap.c \
- fselectormap.c \
- fswitchmap.c \
- funitmap.c \
- fwcsmap.c \
- fwinmap.c \
- fxmlchan.c \
- fzoommap.c \
- globals.c \
- grismmap.c \
- interval.c \
- intramap.c \
- keymap.c \
- loader.c \
- lutmap.c \
- mapping.c \
- mathmap.c \
- matrixmap.c \
- memory.c \
- nullregion.c \
- object.c \
- pcdmap.c \
- permmap.c \
- plot.c \
- plot3d.c \
- pointlist.c \
- pointset.c \
- polygon.c \
- polymap.c \
- prism.c \
- normmap.c \
- ratemap.c \
- region.c \
- shiftmap.c \
- skyaxis.c \
- skyframe.c \
- slamap.c \
- specfluxframe.c \
- specframe.c \
- specmap.c \
- sphmap.c \
- stc.c \
- stcresourceprofile.c \
- stcsearchlocation.c \
- stccatalogentrylocation.c \
- stcobsdatalocation.c \
- stcschan.c \
- fstc.c \
- fstcresourceprofile.c \
- fstcsearchlocation.c \
- fstccatalogentrylocation.c \
- fstcobsdatalocation.c \
- fstcschan.c \
- timeframe.c \
- timemap.c \
- tranmap.c \
- selectormap.c \
- switchmap.c \
- unit.c \
- unitmap.c \
- wcsmap.c \
- winmap.c \
- xml.c \
- xmlchan.c \
- zoommap.c
-
-# Header files which contribute to the "ast.h" file, organised to correspond
-# with the class hierarchy.
-AST_H_FILES = \
- xml.h \
- wcstrig.h \
- proj.h \
- memory.h \
- error.h \
- globals.h \
- unit.h \
- ast_err.h \
- version.h \
- object.h \
- keymap.h \
- pointset.h \
- axis.h \
- skyaxis.h \
- mapping.h \
- cmpmap.h \
- dssmap.h \
- grismmap.h \
- intramap.h \
- lutmap.h \
- mathmap.h \
- matrixmap.h \
- pcdmap.h \
- permmap.h \
- polymap.h \
- ratemap.h \
- normmap.h \
- shiftmap.h \
- slamap.h \
- specmap.h \
- sphmap.h \
- timemap.h \
- selectormap.h \
- switchmap.h \
- tranmap.h \
- unitmap.h \
- wcsmap.h \
- winmap.h \
- zoommap.h \
- frame.h \
- cmpframe.h \
- specfluxframe.h \
- fluxframe.h \
- frameset.h \
- plot.h \
- plot3d.h \
- skyframe.h \
- specframe.h \
- dsbspecframe.h \
- region.h \
- box.h \
- circle.h \
- cmpregion.h \
- ellipse.h \
- interval.h \
- nullregion.h \
- pointlist.h \
- polygon.h \
- prism.h \
- stc.h \
- stcresourceprofile.h \
- stcsearchlocation.h \
- stccatalogentrylocation.h \
- stcobsdatalocation.h \
- timeframe.h \
- channel.h \
- fitschan.h \
- stcschan.h \
- xmlchan.h
-
-# All the (C) include files required to build the library.
-GRP_C_INCLUDE_FILES = \
- $(AST_H_FILES) \
- c2f77.h \
- ems.h \
- err.h \
- Ers.h \
- f77.h \
- grf.h \
- grf3d.h \
- pg3d.h \
- loader.h \
- skyaxis.h \
- pal.h \
- slamac.h \
- stc.h \
- stcresourceprofile.h \
- stcsearchlocation.h \
- stccatalogentrylocation.h \
- stcobsdatalocation.h \
- wcsmath.h \
- wcstrig.h \
- xmlchan.h
-
-# The following list should include AST_PAR, but that must not be
-# distributed, and so it is listed separately in
-# nodist_libast_la_SOURCES below.
-GRP_F_INCLUDE_FILES = \
- GRF_PAR \
- AST_ERR
-
-## Following declaration isn't used
-## LATEX_DOCUMENTATION_FILES = \
-## sun210.tex \
-## sun211.tex
-
-DOCUMENTATION_PRODUCTS = $(PAPER_DOCUMENTATION) $(HYPER_DOCUMENTATION)
-PAPER_DOCUMENTATION = sun210.tex sun211.tex sun210.ps sun211.ps
-HYPER_DOCUMENTATION = sun210.htx_tar sun211.htx_tar
-
-POSTSCRIPT_FIGURES = \
- cmpframe.eps \
- complex.eps \
- frames.eps \
- frameset.eps \
- fronta.eps \
- fronta_bw.eps \
- frontb.eps \
- frontb_bw.eps \
- frontc.eps \
- frontc_bw.eps \
- fsalign.eps \
- fsconvert.eps \
- fsexample.eps \
- fsmerge.eps \
- fsremap.eps \
- gridplot.eps \
- gridplot_bw.eps \
- mapping.eps \
- overgrid.eps \
- overgrid_bw.eps \
- parallel.eps \
- series.eps \
- simpexamp.eps
-
-WCSLIB_FILES = \
- COPYING.LIB \
- proj.c \
- tpn.c \
- proj.h \
- wcstrig.c \
- wcsmath.h \
- wcstrig.h
-
-PAL_FILES = \
- COPYING.LIB \
- pal.c \
- pal.h \
- slamac.h
-
-
-bin_SCRIPTS = ast_link
-dist_bin_SCRIPTS = ast_link_adam
-noinst_SCRIPTS = ast_cpp
-dist_noinst_SCRIPTS = makeh
-# Scripts are not distributed by default (since they might be derived objects)
-# Add these to the distribution below. In fact, it would be useful
-# and straightforward to make ast_link{,_adam} derived, since they
-# could then have installation directories painlessly edited in to
-# them. This might be a requirement for scripts which supported
-# linking against shared libraries.
-
-# Headers required by library users. Both of the following lines
-# indicate headers which are installed.
-include_HEADERS = GRF_PAR grf.h
-# Following are generated, so should not be distributed.
-nodist_include_HEADERS = ast.h AST_PAR
-include_MESSAGES = AST_ERR ast_err.h
-
-lib_LTLIBRARIES = \
- libast.la \
- libast_err.la \
- libast_ems.la \
- libast_drama.la \
- libast_grf3d.la \
- libast_grf_2.0.la \
- libast_grf_3.2.la \
- libast_pgplot.la \
- libast_pgplot3d.la \
- libast_pal.la \
- libast_wcslib.la
-
-
-stardocs_DATA = @STAR_LATEX_DOCUMENTATION@
-dist_starnews_DATA = ast.news
-dist_pkgdata_DATA = LICENCE
-
-# Make all library code position independent by default. This is handy for
-# creating shareable libraries from the static ones (Java JNI libraries).
-# Note we do not simply set the AM_CFLAGS variable, as this would also
-# apply to programs compiled without using libtool, possibly causing the
-# compilation to fail.
-
-if !NOTHREADS
-
-if !NOPIC
-libast_la_CFLAGS = $(AM_CFLAGS) -prefer-pic -DTHREAD_SAFE
-else
-libast_la_CFLAGS = $(AM_CFLAGS) -DTHREAD_SAFE
-endif
-
-else
-libast_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
-
-endif
-
-if !NOPIC
-libast_err_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
-libast_ems_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
-libast_drama_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
-libast_grf3d_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
-libast_grf_2.0_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
-libast_grf_3.2_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
-libast_pgplot_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
-libast_pgplot3d_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
-libast_pal_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
-libast_wcslib_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
-endif
-
-# The module containing the main AST classes
-libast_la_SOURCES = \
- $(GRP_C_ROUTINES) \
- $(GRP_C_INCLUDE_FILES) \
- $(GRP_F_INCLUDE_FILES) \
- ast_err.h
-
-# AST_PAR is really part of GRP_F_INCLUDE_FILES, but it must not be
-# distributed, so list it separately.
-nodist_libast_la_SOURCES = \
- ast.h \
- AST_PAR
-
-# The default error reporting module.
-libast_err_la_SOURCES = err_null.c
-
-# The error reporting module that uses EMS to deliver errors.
-libast_ems_la_SOURCES = err_ems.c
-
-# The error reporting module that uses DRAMA Ers to deliver errors.
-libast_drama_la_SOURCES = err_drama.c
-
-# The module containing null implementations of the 3D graphics routines
-# required by AST
-libast_grf3d_la_SOURCES = grf3d.c
-
-# The module containing null implementations of the graphics routines
-# required by AST V2.0
-libast_grf_2_0_la_SOURCES = grf_2.0.c
-
-# The module containing null implementations of the graphics routines
-# added by AST V3.2 and not present in V2.0
-libast_grf_3_2_la_SOURCES = grf_3.2.c
-
-# The graphics module that uses PGPLOT for 2D graphical output.
-libast_pgplot_la_SOURCES = grf_pgplot.c
-
-# The graphics module that uses PGPLOT for 3D graphical output.
-libast_pgplot3d_la_SOURCES = grf3d_pgplot.c
-
-# Modules adapted from the wcslib library.
-libast_wcslib_la_SOURCES = proj.c wcstrig.c tpn.c
-
-# Modules supplied by tpoint.
-libast_pal_la_SOURCES = pal.c
-
-# The following files are built by the targets in this makefile.
-MAINTAINERCLEANFILES = version.h builddocs addversion \
- ast.h $(DOCUMENTATION_PRODUCTS)
-CLEANFILES = AST_PAR ast.h
-
-# Special cases start here
-
-# The AST_PAR include file is produced by compiling the astbad.c
-# program and editing its output into the ast_par.source file (while
-# also changing the "E" exponent character to a "D"). The astbad.c
-# and ast_par.source must be distributed (the generation of the
-# AST__BAD value must be done on the build host) but not installed.
-noinst_PROGRAMS = astbad
-astbad_SOURCES = astbad.c pointset.h
-AST_PAR: ast_par.source astbad
- sed -e 's/<AST__BAD>/'`./astbad | tr 'E' 'D'`'/' ast_par.source >$@
-
-# ast_link is generated from ast_link.in; ast_link_adam does not
-# need configuration, and so is not mentioned in AC_CONFIG_FILES within
-# configure.ac, and so is not distributed automatically.
-#
-# makeh is required in order to build ast.h after distribution (see below).
-EXTRA_DIST = ast_par.source sun210_figures sun211_figures
-
-# ast.h depends on the error-facility files. ast.h _could_ be made
-# before distribution, but since it's generated from other distributed
-# files, it's more robust to distribute makeh and make ast.h on the
-# build host.
-ast.h: $(AST_H_FILES) ast_err.h makeh config.h
- @PERL@ ./makeh -s $(srcdir) $(AST_H_FILES) >$@
-
-# AST_ERR and ast_err.h are `generated source files', and so must be
-# generated before any other compilations are done. Note that these
-# files are generated on the distribution host, and so this
-# declaration has no effect post-distribution.
-#
-# AST_PAR is also a generated source file, but it should _not_ be
-# included in the list of BUILT_SOURCES, otherwise `make' tries to make
-# it before it makes the `astbad' program it depends on. Instead,
-# just rely on the dependencies expressed in the main body above to
-# have AST_PAR built before it is needed.
-#
-# version.h is included by object.h, and thus indirectly by most modules.
-# It's most straightforward to build it at the beginning.
-BUILT_SOURCES = AST_ERR ast_err.h version.h
-
-# Form second links to the main object library (static and shared). This is
-# used when a second pass through the library is needed during linking.
-# Do not forget to change the contents of the libast_pass2.la file to refer
-# to the pass2 libraries rather than the original libraries. Use target
-# install-exec-hook rather than install-exec-local so that the soft links
-# and files are created *after* the main library has been installed.
-install-exec-hook: libast.la
- $(mkdir_p) $(DESTDIR)$(libdir)
- cd $(DESTDIR)$(libdir); \
- for f in `ls libast.*`; do \
- ff=`echo $$f | sed -e 's/libast/libast_pass2/'`; \
- if test -f "$$ff"; then rm "$$ff"; fi; \
- $(LN_S) $$f $$ff; \
- $(MANIFEST) && echo "MANIFEST:$(DESTDIR)$(libdir)/$$ff" || :; \
- done; \
- if test -f "libast.la"; then \
- if test -f "libast_pass2.la"; then rm "libast_pass2.la"; fi; \
- sed -e 's/libast/libast_pass2/g' libast.la > libast_pass2.la; \
- fi
-
-# Make pre-distribution files. These are files which are required for
-# building the distribution, but are not themselves distributed.
-# The source files here should be mentioned in STAR_PREDIST_SOURCES in
-# configure.ac
- at PREDIST@predist_subs = sed \
- at PREDIST@ -e 's, at PACKAGE_VERSION\@,$(PACKAGE_VERSION),' \
- at PREDIST@ -e 's, at PACKAGE_VERSION_MAJOR\@,$(PACKAGE_VERSION_MAJOR),' \
- at PREDIST@ -e 's, at PACKAGE_VERSION_MINOR\@,$(PACKAGE_VERSION_MINOR),' \
- at PREDIST@ -e 's, at PACKAGE_VERSION_RELEASE\@,$(PACKAGE_VERSION_RELEASE),' \
- at PREDIST@ -e 's, at PERL\@,$(PERL),'
- at PREDIST@version.h: version.h.in configure.ac
- at PREDIST@ rm -f $@; $(predist_subs) version.h.in >$@
- at PREDIST@builddocs: builddocs.in configure.ac
- at PREDIST@ rm -f $@; $(predist_subs) builddocs.in >$@; chmod +x $@
- at PREDIST@addversion: addversion.in configure.ac
- at PREDIST@ rm -f $@; $(predist_subs) addversion.in >$@; chmod +x $@
-
-# Documentation
- at PREDIST@$(PAPER_DOCUMENTATION): sun211_figures builddocs addversion
- at PREDIST@ ./builddocs
-
-# The contents of the sun211_figures directory is identical to that
-# sun210_figures
-sun211_figures: sun210_figures
- $(LN_S) sun210_figures sun211_figures
-
-# Installation check
-
-TESTS = ast_test
-check_PROGRAMS = ast_test
-ast_test_SOURCES = ast_test.c
-
-#ast_test_LDADD = `ast_link`
-# Expand ast_link to avoid libast_pass2, which causes problems for Solaris
-ast_test_LDADD = libast.la libast_pal.la libast_grf_3.2.la libast_wcslib.la libast_grf_2.0.la libast_grf3d.la libast_err.la -lm
diff --git a/ast-5.3-1/Makefile.in b/ast-5.3-1/Makefile.in
deleted file mode 100644
index 6945d04..0000000
--- a/ast-5.3-1/Makefile.in
+++ /dev/null
@@ -1,2800 +0,0 @@
-# Makefile.in generated by automake 1.9.6-starlink from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-
-
-
-
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = .
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-noinst_PROGRAMS = astbad$(EXEEXT)
-check_PROGRAMS = ast_test$(EXEEXT)
-DIST_COMMON = $(am__configure_deps) $(dist_bin_SCRIPTS) \
- $(dist_noinst_SCRIPTS) $(dist_pkgdata_DATA) \
- $(dist_starnews_DATA) $(include_HEADERS) $(include_MESSAGES) \
- $(srcdir)/AST_ERR $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(srcdir)/ast_cpp.in $(srcdir)/ast_err.h $(srcdir)/ast_link.in \
- $(srcdir)/component.xml.in $(srcdir)/config.h.in \
- $(srcdir)/f77.h.in $(srcdir)/fac_1521_err \
- $(srcdir)/object.h.in $(stardocs_DATA) $(top_srcdir)/configure \
- COPYING.LIB compile config.guess config.sub depcomp install-sh \
- ltmain.sh missing
-subdir = .
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
- $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
- configure.lineno configure.status.lineno
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES = component.xml ast_link object.h f77.h ast_cpp
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
- "$(DESTDIR)$(bindir)" "$(DESTDIR)$(includedir)" \
- "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(starnewsdir)" \
- $(DESTDIR)$(stardocsdir) "$(DESTDIR)$(starfacsdir)" \
- "$(DESTDIR)$(includedir)" "$(DESTDIR)$(includedir)"
-libLTLIBRARIES_INSTALL = $(INSTALL)
-LTLIBRARIES = $(lib_LTLIBRARIES)
-libast_la_LIBADD =
-am__objects_1 = libast_la-axis.lo libast_la-box.lo libast_la-c2f77.lo \
- libast_la-channel.lo libast_la-circle.lo libast_la-cmpframe.lo \
- libast_la-cmpmap.lo libast_la-cmpregion.lo \
- libast_la-dsbspecframe.lo libast_la-dssmap.lo \
- libast_la-ellipse.lo libast_la-error.lo libast_la-fbox.lo \
- libast_la-fchannel.lo libast_la-fcircle.lo \
- libast_la-fcmpframe.lo libast_la-fcmpmap.lo \
- libast_la-fcmpregion.lo libast_la-fdsbspecframe.lo \
- libast_la-fdssmap.lo libast_la-fellipse.lo libast_la-ferror.lo \
- libast_la-ffitschan.lo libast_la-ffluxframe.lo \
- libast_la-fframe.lo libast_la-fframeset.lo \
- libast_la-fgrismmap.lo libast_la-finterval.lo \
- libast_la-fintramap.lo libast_la-fitschan.lo \
- libast_la-fkeymap.lo libast_la-flutmap.lo \
- libast_la-fluxframe.lo libast_la-fmapping.lo \
- libast_la-fmathmap.lo libast_la-fmatrixmap.lo \
- libast_la-fnullregion.lo libast_la-fobject.lo \
- libast_la-fpcdmap.lo libast_la-fpermmap.lo libast_la-fplot.lo \
- libast_la-fplot3d.lo libast_la-fpointlist.lo \
- libast_la-fpolygon.lo libast_la-fpolymap.lo \
- libast_la-fprism.lo libast_la-frame.lo libast_la-frameset.lo \
- libast_la-fratemap.lo libast_la-fnormmap.lo \
- libast_la-fregion.lo libast_la-fshiftmap.lo \
- libast_la-fskyframe.lo libast_la-fslamap.lo \
- libast_la-fspecfluxframe.lo libast_la-fspecframe.lo \
- libast_la-fspecmap.lo libast_la-ftimeframe.lo \
- libast_la-ftimemap.lo libast_la-fsphmap.lo \
- libast_la-ftranmap.lo libast_la-fselectormap.lo \
- libast_la-fswitchmap.lo libast_la-funitmap.lo \
- libast_la-fwcsmap.lo libast_la-fwinmap.lo \
- libast_la-fxmlchan.lo libast_la-fzoommap.lo \
- libast_la-globals.lo libast_la-grismmap.lo \
- libast_la-interval.lo libast_la-intramap.lo \
- libast_la-keymap.lo libast_la-loader.lo libast_la-lutmap.lo \
- libast_la-mapping.lo libast_la-mathmap.lo \
- libast_la-matrixmap.lo libast_la-memory.lo \
- libast_la-nullregion.lo libast_la-object.lo \
- libast_la-pcdmap.lo libast_la-permmap.lo libast_la-plot.lo \
- libast_la-plot3d.lo libast_la-pointlist.lo \
- libast_la-pointset.lo libast_la-polygon.lo \
- libast_la-polymap.lo libast_la-prism.lo libast_la-normmap.lo \
- libast_la-ratemap.lo libast_la-region.lo libast_la-shiftmap.lo \
- libast_la-skyaxis.lo libast_la-skyframe.lo libast_la-slamap.lo \
- libast_la-specfluxframe.lo libast_la-specframe.lo \
- libast_la-specmap.lo libast_la-sphmap.lo libast_la-stc.lo \
- libast_la-stcresourceprofile.lo libast_la-stcsearchlocation.lo \
- libast_la-stccatalogentrylocation.lo \
- libast_la-stcobsdatalocation.lo libast_la-stcschan.lo \
- libast_la-fstc.lo libast_la-fstcresourceprofile.lo \
- libast_la-fstcsearchlocation.lo \
- libast_la-fstccatalogentrylocation.lo \
- libast_la-fstcobsdatalocation.lo libast_la-fstcschan.lo \
- libast_la-timeframe.lo libast_la-timemap.lo \
- libast_la-tranmap.lo libast_la-selectormap.lo \
- libast_la-switchmap.lo libast_la-unit.lo libast_la-unitmap.lo \
- libast_la-wcsmap.lo libast_la-winmap.lo libast_la-xml.lo \
- libast_la-xmlchan.lo libast_la-zoommap.lo
-am__objects_2 =
-am__objects_3 = $(am__objects_2)
-am_libast_la_OBJECTS = $(am__objects_1) $(am__objects_3) \
- $(am__objects_2)
-nodist_libast_la_OBJECTS =
-libast_la_OBJECTS = $(am_libast_la_OBJECTS) \
- $(nodist_libast_la_OBJECTS)
-libast_drama_la_LIBADD =
-am_libast_drama_la_OBJECTS = libast_drama_la-err_drama.lo
-libast_drama_la_OBJECTS = $(am_libast_drama_la_OBJECTS)
-libast_ems_la_LIBADD =
-am_libast_ems_la_OBJECTS = libast_ems_la-err_ems.lo
-libast_ems_la_OBJECTS = $(am_libast_ems_la_OBJECTS)
-libast_err_la_LIBADD =
-am_libast_err_la_OBJECTS = libast_err_la-err_null.lo
-libast_err_la_OBJECTS = $(am_libast_err_la_OBJECTS)
-libast_grf3d_la_LIBADD =
-am_libast_grf3d_la_OBJECTS = libast_grf3d_la-grf3d.lo
-libast_grf3d_la_OBJECTS = $(am_libast_grf3d_la_OBJECTS)
-libast_grf_2_0_la_LIBADD =
-am_libast_grf_2_0_la_OBJECTS = grf_2.0.lo
-libast_grf_2_0_la_OBJECTS = $(am_libast_grf_2_0_la_OBJECTS)
-libast_grf_3_2_la_LIBADD =
-am_libast_grf_3_2_la_OBJECTS = grf_3.2.lo
-libast_grf_3_2_la_OBJECTS = $(am_libast_grf_3_2_la_OBJECTS)
-libast_pal_la_LIBADD =
-am_libast_pal_la_OBJECTS = libast_pal_la-pal.lo
-libast_pal_la_OBJECTS = $(am_libast_pal_la_OBJECTS)
-libast_pgplot_la_LIBADD =
-am_libast_pgplot_la_OBJECTS = libast_pgplot_la-grf_pgplot.lo
-libast_pgplot_la_OBJECTS = $(am_libast_pgplot_la_OBJECTS)
-libast_pgplot3d_la_LIBADD =
-am_libast_pgplot3d_la_OBJECTS = libast_pgplot3d_la-grf3d_pgplot.lo
-libast_pgplot3d_la_OBJECTS = $(am_libast_pgplot3d_la_OBJECTS)
-libast_wcslib_la_LIBADD =
-am_libast_wcslib_la_OBJECTS = libast_wcslib_la-proj.lo \
- libast_wcslib_la-wcstrig.lo libast_wcslib_la-tpn.lo
-libast_wcslib_la_OBJECTS = $(am_libast_wcslib_la_OBJECTS)
-PROGRAMS = $(noinst_PROGRAMS)
-am_ast_test_OBJECTS = ast_test.$(OBJEXT)
-ast_test_OBJECTS = $(am_ast_test_OBJECTS)
-ast_test_DEPENDENCIES = libast.la libast_pal.la libast_grf_3.2.la \
- libast_wcslib.la libast_grf_2.0.la libast_grf3d.la \
- libast_err.la
-am_astbad_OBJECTS = astbad.$(OBJEXT)
-astbad_OBJECTS = $(am_astbad_OBJECTS)
-astbad_LDADD = $(LDADD)
-binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
-dist_binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
-SCRIPTS = $(bin_SCRIPTS) $(dist_bin_SCRIPTS) $(dist_noinst_SCRIPTS) \
- $(noinst_SCRIPTS)
-DEFAULT_INCLUDES = -I. -I$(srcdir) -I.
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
- $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) \
- $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) \
- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
- $(STAR_LDFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(libast_la_SOURCES) $(nodist_libast_la_SOURCES) \
- $(libast_drama_la_SOURCES) $(libast_ems_la_SOURCES) \
- $(libast_err_la_SOURCES) $(libast_grf3d_la_SOURCES) \
- $(libast_grf_2_0_la_SOURCES) $(libast_grf_3_2_la_SOURCES) \
- $(libast_pal_la_SOURCES) $(libast_pgplot_la_SOURCES) \
- $(libast_pgplot3d_la_SOURCES) $(libast_wcslib_la_SOURCES) \
- $(ast_test_SOURCES) $(astbad_SOURCES)
-DIST_SOURCES = $(libast_la_SOURCES) $(libast_drama_la_SOURCES) \
- $(libast_ems_la_SOURCES) $(libast_err_la_SOURCES) \
- $(libast_grf3d_la_SOURCES) $(libast_grf_2_0_la_SOURCES) \
- $(libast_grf_3_2_la_SOURCES) $(libast_pal_la_SOURCES) \
- $(libast_pgplot_la_SOURCES) $(libast_pgplot3d_la_SOURCES) \
- $(libast_wcslib_la_SOURCES) $(ast_test_SOURCES) \
- $(astbad_SOURCES)
-includeMESSAGES_INSTALL = $(INSTALL_MESSAGE)
-MESSAGES = $(include_MESSAGES)
-INSTALL_MESSAGE = $(INSTALL_DATA)
-dist_pkgdataDATA_INSTALL = $(INSTALL_DATA)
-dist_starnewsDATA_INSTALL = $(INSTALL_DATA)
-stardocsDATA_INSTALL = $(INSTALL_DATA)
-starfacsDATA_INSTALL = $(INSTALL_DATA)
-DATA = $(dist_pkgdata_DATA) $(dist_starnews_DATA) $(stardocs_DATA) \
- $(starfacs_DATA)
-includeHEADERS_INSTALL = $(INSTALL_HEADER)
-nodist_includeHEADERS_INSTALL = $(INSTALL_HEADER)
-HEADERS = $(include_HEADERS) $(nodist_include_HEADERS)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-distdir = $(PACKAGE)-$(VERSION)
-top_distdir = $(distdir)
-am__remove_distdir = \
- { test ! -d $(distdir) \
- || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
- && rm -fr $(distdir); }; }
-DIST_ARCHIVES = $(distdir).tar.gz
-GZIP_ENV = --best
-distuninstallcheck_listfiles = find . -type f -print
-distcleancheck_listfiles = find . -type f -print
-# Use AM_MAKEFLAGS to pass the value of the MANIFEST variable into
-# submakes (not all makes do this automatically). This can still be
-# overridden with a setting of this variable on the $(MAKE) command
-# line. I think we really shouldn't be setting this variable -- if
-# it causes a problem for anyone, we should edit a new variable in to
-# the .am templates.
-AM_MAKEFLAGS = MANIFEST=$(MANIFEST)
-REAL_INSTALL = install-am
-# Set to : to emit manifest lines, too
-# (don't actually do this here -- it's done within install-manifest below).
-MANIFEST = false
-ACLOCAL = @ACLOCAL@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
-AMTAR = @AMTAR@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-C_FC_FCLINK_MAGIC = @C_FC_FCLINK_MAGIC@
-C_FC_PPFC_FCLINK_MAGIC = @C_FC_PPFC_FCLINK_MAGIC@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO = @ECHO@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FCFLAGS = @FCFLAGS@
-FCLIBS = @FCLIBS@
-FFLAGS = @FFLAGS@
-GIT = @GIT@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LATEX2DVI = @LATEX2DVI@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-MESSGEN = @MESSGEN@
-NOPIC_FALSE = @NOPIC_FALSE@
-NOPIC_TRUE = @NOPIC_TRUE@
-NOTHREADS_FALSE = @NOTHREADS_FALSE@
-NOTHREADS_TRUE = @NOTHREADS_TRUE@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKAGE_VERSION_INTEGER = @PACKAGE_VERSION_INTEGER@
-PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
-PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
-PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PAX = @PAX@
-PERL = @PERL@
-PREDIST = @PREDIST@
-PROLAT = @PROLAT@
-RANLIB = @RANLIB@
-REAL_FUNCTION_TYPE = @REAL_FUNCTION_TYPE@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STAR2HTML = @STAR2HTML@
-STARLINK = @STARLINK@
-STAR_CPPFLAGS = @STAR_CPPFLAGS@
-STAR_DEPENDENCIES_ATTRIBUTES = @STAR_DEPENDENCIES_ATTRIBUTES@
-STAR_DEPENDENCIES_CHILDREN = @STAR_DEPENDENCIES_CHILDREN@
-STAR_DOCUMENTATION = @STAR_DOCUMENTATION@
-STAR_FCFLAGS = @STAR_FCFLAGS@
-STAR_FFLAGS = @STAR_FFLAGS@
-STAR_LATEX_DOCUMENTATION = @STAR_LATEX_DOCUMENTATION@
-STAR_LDFLAGS = @STAR_LDFLAGS@
-STAR_MANIFEST_DIR = @STAR_MANIFEST_DIR@
-STAR_SOURCE_ROOT_DIR = @STAR_SOURCE_ROOT_DIR@
-STRIP = @STRIP@
-TAR = @TAR@
-THREADS = @THREADS@
-TRAIL_TYPE = @TRAIL_TYPE@
-VERSION = @VERSION@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_F77 = @ac_ct_F77@
-ac_ct_FC = @ac_ct_FC@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-datadir = @datadir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-stardocsdir = @stardocsdir@
-staretcdir = @staretcdir@
-starexamplesdir = @starexamplesdir@
-starfacsdir = @starfacsdir@
-starhelpdir = @starhelpdir@
-starnewsdir = @starnewsdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-
-# First declare various groups of files. These were initially extracted
-# from the grp.make file, as constructed by the SDT newdev command
-GRP_C_ROUTINES = \
- axis.c \
- box.c \
- c2f77.c \
- channel.c \
- circle.c \
- cmpframe.c \
- cmpmap.c \
- cmpregion.c \
- dsbspecframe.c \
- dssmap.c \
- ellipse.c \
- error.c \
- fbox.c \
- fchannel.c \
- fcircle.c \
- fcmpframe.c \
- fcmpmap.c \
- fcmpregion.c \
- fdsbspecframe.c \
- fdssmap.c \
- fellipse.c \
- ferror.c \
- ffitschan.c \
- ffluxframe.c \
- fframe.c \
- fframeset.c \
- fgrismmap.c \
- finterval.c \
- fintramap.c \
- fitschan.c \
- fkeymap.c \
- flutmap.c \
- fluxframe.c \
- fmapping.c \
- fmathmap.c \
- fmatrixmap.c \
- fnullregion.c \
- fobject.c \
- fpcdmap.c \
- fpermmap.c \
- fplot.c \
- fplot3d.c \
- fpointlist.c \
- fpolygon.c \
- fpolymap.c \
- fprism.c \
- frame.c \
- frameset.c \
- fratemap.c \
- fnormmap.c \
- fregion.c \
- fshiftmap.c \
- fskyframe.c \
- fslamap.c \
- fspecfluxframe.c \
- fspecframe.c \
- fspecmap.c \
- ftimeframe.c \
- ftimemap.c \
- fsphmap.c \
- ftranmap.c \
- fselectormap.c \
- fswitchmap.c \
- funitmap.c \
- fwcsmap.c \
- fwinmap.c \
- fxmlchan.c \
- fzoommap.c \
- globals.c \
- grismmap.c \
- interval.c \
- intramap.c \
- keymap.c \
- loader.c \
- lutmap.c \
- mapping.c \
- mathmap.c \
- matrixmap.c \
- memory.c \
- nullregion.c \
- object.c \
- pcdmap.c \
- permmap.c \
- plot.c \
- plot3d.c \
- pointlist.c \
- pointset.c \
- polygon.c \
- polymap.c \
- prism.c \
- normmap.c \
- ratemap.c \
- region.c \
- shiftmap.c \
- skyaxis.c \
- skyframe.c \
- slamap.c \
- specfluxframe.c \
- specframe.c \
- specmap.c \
- sphmap.c \
- stc.c \
- stcresourceprofile.c \
- stcsearchlocation.c \
- stccatalogentrylocation.c \
- stcobsdatalocation.c \
- stcschan.c \
- fstc.c \
- fstcresourceprofile.c \
- fstcsearchlocation.c \
- fstccatalogentrylocation.c \
- fstcobsdatalocation.c \
- fstcschan.c \
- timeframe.c \
- timemap.c \
- tranmap.c \
- selectormap.c \
- switchmap.c \
- unit.c \
- unitmap.c \
- wcsmap.c \
- winmap.c \
- xml.c \
- xmlchan.c \
- zoommap.c
-
-
-# Header files which contribute to the "ast.h" file, organised to correspond
-# with the class hierarchy.
-AST_H_FILES = \
- xml.h \
- wcstrig.h \
- proj.h \
- memory.h \
- error.h \
- globals.h \
- unit.h \
- ast_err.h \
- version.h \
- object.h \
- keymap.h \
- pointset.h \
- axis.h \
- skyaxis.h \
- mapping.h \
- cmpmap.h \
- dssmap.h \
- grismmap.h \
- intramap.h \
- lutmap.h \
- mathmap.h \
- matrixmap.h \
- pcdmap.h \
- permmap.h \
- polymap.h \
- ratemap.h \
- normmap.h \
- shiftmap.h \
- slamap.h \
- specmap.h \
- sphmap.h \
- timemap.h \
- selectormap.h \
- switchmap.h \
- tranmap.h \
- unitmap.h \
- wcsmap.h \
- winmap.h \
- zoommap.h \
- frame.h \
- cmpframe.h \
- specfluxframe.h \
- fluxframe.h \
- frameset.h \
- plot.h \
- plot3d.h \
- skyframe.h \
- specframe.h \
- dsbspecframe.h \
- region.h \
- box.h \
- circle.h \
- cmpregion.h \
- ellipse.h \
- interval.h \
- nullregion.h \
- pointlist.h \
- polygon.h \
- prism.h \
- stc.h \
- stcresourceprofile.h \
- stcsearchlocation.h \
- stccatalogentrylocation.h \
- stcobsdatalocation.h \
- timeframe.h \
- channel.h \
- fitschan.h \
- stcschan.h \
- xmlchan.h
-
-
-# All the (C) include files required to build the library.
-GRP_C_INCLUDE_FILES = \
- $(AST_H_FILES) \
- c2f77.h \
- ems.h \
- err.h \
- Ers.h \
- f77.h \
- grf.h \
- grf3d.h \
- pg3d.h \
- loader.h \
- skyaxis.h \
- pal.h \
- slamac.h \
- stc.h \
- stcresourceprofile.h \
- stcsearchlocation.h \
- stccatalogentrylocation.h \
- stcobsdatalocation.h \
- wcsmath.h \
- wcstrig.h \
- xmlchan.h
-
-
-# The following list should include AST_PAR, but that must not be
-# distributed, and so it is listed separately in
-# nodist_libast_la_SOURCES below.
-GRP_F_INCLUDE_FILES = \
- GRF_PAR \
- AST_ERR
-
-DOCUMENTATION_PRODUCTS = $(PAPER_DOCUMENTATION) $(HYPER_DOCUMENTATION)
-PAPER_DOCUMENTATION = sun210.tex sun211.tex sun210.ps sun211.ps
-HYPER_DOCUMENTATION = sun210.htx_tar sun211.htx_tar
-POSTSCRIPT_FIGURES = \
- cmpframe.eps \
- complex.eps \
- frames.eps \
- frameset.eps \
- fronta.eps \
- fronta_bw.eps \
- frontb.eps \
- frontb_bw.eps \
- frontc.eps \
- frontc_bw.eps \
- fsalign.eps \
- fsconvert.eps \
- fsexample.eps \
- fsmerge.eps \
- fsremap.eps \
- gridplot.eps \
- gridplot_bw.eps \
- mapping.eps \
- overgrid.eps \
- overgrid_bw.eps \
- parallel.eps \
- series.eps \
- simpexamp.eps
-
-WCSLIB_FILES = \
- COPYING.LIB \
- proj.c \
- tpn.c \
- proj.h \
- wcstrig.c \
- wcsmath.h \
- wcstrig.h
-
-PAL_FILES = \
- COPYING.LIB \
- pal.c \
- pal.h \
- slamac.h
-
-bin_SCRIPTS = ast_link
-dist_bin_SCRIPTS = ast_link_adam
-noinst_SCRIPTS = ast_cpp
-dist_noinst_SCRIPTS = makeh
-# Scripts are not distributed by default (since they might be derived objects)
-# Add these to the distribution below. In fact, it would be useful
-# and straightforward to make ast_link{,_adam} derived, since they
-# could then have installation directories painlessly edited in to
-# them. This might be a requirement for scripts which supported
-# linking against shared libraries.
-
-# Headers required by library users. Both of the following lines
-# indicate headers which are installed.
-include_HEADERS = GRF_PAR grf.h
-# Following are generated, so should not be distributed.
-nodist_include_HEADERS = ast.h AST_PAR
-include_MESSAGES = AST_ERR ast_err.h
-lib_LTLIBRARIES = \
- libast.la \
- libast_err.la \
- libast_ems.la \
- libast_drama.la \
- libast_grf3d.la \
- libast_grf_2.0.la \
- libast_grf_3.2.la \
- libast_pgplot.la \
- libast_pgplot3d.la \
- libast_pal.la \
- libast_wcslib.la
-
-stardocs_DATA = @STAR_LATEX_DOCUMENTATION@
-dist_starnews_DATA = ast.news
-dist_pkgdata_DATA = LICENCE
-
-# Make all library code position independent by default. This is handy for
-# creating shareable libraries from the static ones (Java JNI libraries).
-# Note we do not simply set the AM_CFLAGS variable, as this would also
-# apply to programs compiled without using libtool, possibly causing the
-# compilation to fail.
- at NOPIC_FALSE@@NOTHREADS_FALSE at libast_la_CFLAGS = $(AM_CFLAGS) -prefer-pic -DTHREAD_SAFE
- at NOPIC_TRUE@@NOTHREADS_FALSE at libast_la_CFLAGS = $(AM_CFLAGS) -DTHREAD_SAFE
- at NOTHREADS_TRUE@libast_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
- at NOPIC_FALSE@libast_err_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
- at NOPIC_FALSE@libast_ems_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
- at NOPIC_FALSE@libast_drama_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
- at NOPIC_FALSE@libast_grf3d_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
- at NOPIC_FALSE@libast_grf_2.0_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
- at NOPIC_FALSE@libast_grf_3.2_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
- at NOPIC_FALSE@libast_pgplot_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
- at NOPIC_FALSE@libast_pgplot3d_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
- at NOPIC_FALSE@libast_pal_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
- at NOPIC_FALSE@libast_wcslib_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
-
-# The module containing the main AST classes
-libast_la_SOURCES = \
- $(GRP_C_ROUTINES) \
- $(GRP_C_INCLUDE_FILES) \
- $(GRP_F_INCLUDE_FILES) \
- ast_err.h
-
-
-# AST_PAR is really part of GRP_F_INCLUDE_FILES, but it must not be
-# distributed, so list it separately.
-nodist_libast_la_SOURCES = \
- ast.h \
- AST_PAR
-
-
-# The default error reporting module.
-libast_err_la_SOURCES = err_null.c
-
-# The error reporting module that uses EMS to deliver errors.
-libast_ems_la_SOURCES = err_ems.c
-
-# The error reporting module that uses DRAMA Ers to deliver errors.
-libast_drama_la_SOURCES = err_drama.c
-
-# The module containing null implementations of the 3D graphics routines
-# required by AST
-libast_grf3d_la_SOURCES = grf3d.c
-
-# The module containing null implementations of the graphics routines
-# required by AST V2.0
-libast_grf_2_0_la_SOURCES = grf_2.0.c
-
-# The module containing null implementations of the graphics routines
-# added by AST V3.2 and not present in V2.0
-libast_grf_3_2_la_SOURCES = grf_3.2.c
-
-# The graphics module that uses PGPLOT for 2D graphical output.
-libast_pgplot_la_SOURCES = grf_pgplot.c
-
-# The graphics module that uses PGPLOT for 3D graphical output.
-libast_pgplot3d_la_SOURCES = grf3d_pgplot.c
-
-# Modules adapted from the wcslib library.
-libast_wcslib_la_SOURCES = proj.c wcstrig.c tpn.c
-
-# Modules supplied by tpoint.
-libast_pal_la_SOURCES = pal.c
-
-# The following files are built by the targets in this makefile.
-MAINTAINERCLEANFILES = version.h builddocs addversion \
- ast.h $(DOCUMENTATION_PRODUCTS)
-
-CLEANFILES = AST_PAR ast.h
-astbad_SOURCES = astbad.c pointset.h
-
-# ast_link is generated from ast_link.in; ast_link_adam does not
-# need configuration, and so is not mentioned in AC_CONFIG_FILES within
-# configure.ac, and so is not distributed automatically.
-#
-# makeh is required in order to build ast.h after distribution (see below).
-EXTRA_DIST = ast_par.source sun210_figures sun211_figures
-
-# AST_ERR and ast_err.h are `generated source files', and so must be
-# generated before any other compilations are done. Note that these
-# files are generated on the distribution host, and so this
-# declaration has no effect post-distribution.
-#
-# AST_PAR is also a generated source file, but it should _not_ be
-# included in the list of BUILT_SOURCES, otherwise `make' tries to make
-# it before it makes the `astbad' program it depends on. Instead,
-# just rely on the dependencies expressed in the main body above to
-# have AST_PAR built before it is needed.
-#
-# version.h is included by object.h, and thus indirectly by most modules.
-# It's most straightforward to build it at the beginning.
-BUILT_SOURCES = AST_ERR ast_err.h version.h
-
-# Make pre-distribution files. These are files which are required for
-# building the distribution, but are not themselves distributed.
-# The source files here should be mentioned in STAR_PREDIST_SOURCES in
-# configure.ac
- at PREDIST@predist_subs = sed \
- at PREDIST@ -e 's, at PACKAGE_VERSION\@,$(PACKAGE_VERSION),' \
- at PREDIST@ -e 's, at PACKAGE_VERSION_MAJOR\@,$(PACKAGE_VERSION_MAJOR),' \
- at PREDIST@ -e 's, at PACKAGE_VERSION_MINOR\@,$(PACKAGE_VERSION_MINOR),' \
- at PREDIST@ -e 's, at PACKAGE_VERSION_RELEASE\@,$(PACKAGE_VERSION_RELEASE),' \
- at PREDIST@ -e 's, at PERL\@,$(PERL),'
-
-
-# Installation check
-TESTS = ast_test
-ast_test_SOURCES = ast_test.c
-
-#ast_test_LDADD = `ast_link`
-# Expand ast_link to avoid libast_pass2, which causes problems for Solaris
-ast_test_LDADD = libast.la libast_pal.la libast_grf_3.2.la libast_wcslib.la libast_grf_2.0.la libast_grf3d.la libast_err.la -lm
-starfacs_DATA = fac_1521_err
-all: $(BUILT_SOURCES) config.h
- $(MAKE) $(AM_MAKEFLAGS) all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .dvi .htx_tar .lo .o .obj .pdf .ps .tex
-am--refresh:
- @:
-$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- echo ' cd $(srcdir) && $(AUTOMAKE) --startree '; \
- cd $(srcdir) && $(AUTOMAKE) --startree \
- && exit 0; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --startree Makefile'; \
- cd $(top_srcdir) && \
- $(AUTOMAKE) --startree Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- echo ' $(SHELL) ./config.status'; \
- $(SHELL) ./config.status;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- $(SHELL) ./config.status --recheck
-
-$(top_srcdir)/configure: $(am__configure_deps)
- cd $(srcdir) && $(AUTOCONF)
-$(ACLOCAL_M4): $(am__aclocal_m4_deps)
- cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
-
-config.h: stamp-h1
- @if test ! -f $@; then \
- rm -f stamp-h1; \
- $(MAKE) stamp-h1; \
- else :; fi
-
-stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
- @rm -f stamp-h1
- cd $(top_builddir) && $(SHELL) ./config.status config.h
-$(srcdir)/config.h.in: $(am__configure_deps)
- cd $(top_srcdir) && $(AUTOHEADER)
- rm -f stamp-h1
- touch $@
-
-distclean-hdr:
- -rm -f config.h stamp-h1
-component.xml: $(top_builddir)/config.status $(srcdir)/component.xml.in
- cd $(top_builddir) && $(SHELL) ./config.status $@
-ast_link: $(top_builddir)/config.status $(srcdir)/ast_link.in
- cd $(top_builddir) && $(SHELL) ./config.status $@
-object.h: $(top_builddir)/config.status $(srcdir)/object.h.in
- cd $(top_builddir) && $(SHELL) ./config.status $@
-f77.h: $(top_builddir)/config.status $(srcdir)/f77.h.in
- cd $(top_builddir) && $(SHELL) ./config.status $@
-ast_cpp: $(top_builddir)/config.status $(srcdir)/ast_cpp.in
- cd $(top_builddir) && $(SHELL) ./config.status $@
-install-libLTLIBRARIES: $(lib_LTLIBRARIES)
- @$(NORMAL_INSTALL)
- test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
- @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
- if test -f $$p; then \
- f=$(am__strip_dir) \
- echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
- $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
- if $(MANIFEST); then \
- echo "MANIFEST:$(DESTDIR)$(libdir)/$$f"; \
- expr $$p : '.*\.la$$' >/dev/null || \
- { echo "Installing non-la file $$p!"; exit 1; }; \
- (. ./$$p; \
- if test -n "$$library_names"; then \
- for l in $$library_names; do \
- echo "MANIFEST:$(DESTDIR)$$libdir/$$l"; \
- done; \
- fi; \
- if test -n "$$old_library"; then \
- echo "MANIFEST:$(DESTDIR)$$libdir/$$old_library"; \
- else :; fi; \
- ); \
- else :; fi; \
- else :; fi; \
- done
-
-uninstall-libLTLIBRARIES:
- @$(NORMAL_UNINSTALL)
- @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
- p=$(am__strip_dir) \
- echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
- $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
- done
-
-clean-libLTLIBRARIES:
- -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
- @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
- dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
- test "$$dir" != "$$p" || dir=.; \
- echo "rm -f \"$${dir}/so_locations\""; \
- rm -f "$${dir}/so_locations"; \
- done
-libast.la: $(libast_la_OBJECTS) $(libast_la_DEPENDENCIES)
- $(LINK) -rpath $(libdir) $(libast_la_LDFLAGS) $(libast_la_OBJECTS) $(libast_la_LIBADD) $(LIBS)
-libast_drama.la: $(libast_drama_la_OBJECTS) $(libast_drama_la_DEPENDENCIES)
- $(LINK) -rpath $(libdir) $(libast_drama_la_LDFLAGS) $(libast_drama_la_OBJECTS) $(libast_drama_la_LIBADD) $(LIBS)
-libast_ems.la: $(libast_ems_la_OBJECTS) $(libast_ems_la_DEPENDENCIES)
- $(LINK) -rpath $(libdir) $(libast_ems_la_LDFLAGS) $(libast_ems_la_OBJECTS) $(libast_ems_la_LIBADD) $(LIBS)
-libast_err.la: $(libast_err_la_OBJECTS) $(libast_err_la_DEPENDENCIES)
- $(LINK) -rpath $(libdir) $(libast_err_la_LDFLAGS) $(libast_err_la_OBJECTS) $(libast_err_la_LIBADD) $(LIBS)
-libast_grf3d.la: $(libast_grf3d_la_OBJECTS) $(libast_grf3d_la_DEPENDENCIES)
- $(LINK) -rpath $(libdir) $(libast_grf3d_la_LDFLAGS) $(libast_grf3d_la_OBJECTS) $(libast_grf3d_la_LIBADD) $(LIBS)
-libast_grf_2.0.la: $(libast_grf_2_0_la_OBJECTS) $(libast_grf_2_0_la_DEPENDENCIES)
- $(LINK) -rpath $(libdir) $(libast_grf_2_0_la_LDFLAGS) $(libast_grf_2_0_la_OBJECTS) $(libast_grf_2_0_la_LIBADD) $(LIBS)
-libast_grf_3.2.la: $(libast_grf_3_2_la_OBJECTS) $(libast_grf_3_2_la_DEPENDENCIES)
- $(LINK) -rpath $(libdir) $(libast_grf_3_2_la_LDFLAGS) $(libast_grf_3_2_la_OBJECTS) $(libast_grf_3_2_la_LIBADD) $(LIBS)
-libast_pal.la: $(libast_pal_la_OBJECTS) $(libast_pal_la_DEPENDENCIES)
- $(LINK) -rpath $(libdir) $(libast_pal_la_LDFLAGS) $(libast_pal_la_OBJECTS) $(libast_pal_la_LIBADD) $(LIBS)
-libast_pgplot.la: $(libast_pgplot_la_OBJECTS) $(libast_pgplot_la_DEPENDENCIES)
- $(LINK) -rpath $(libdir) $(libast_pgplot_la_LDFLAGS) $(libast_pgplot_la_OBJECTS) $(libast_pgplot_la_LIBADD) $(LIBS)
-libast_pgplot3d.la: $(libast_pgplot3d_la_OBJECTS) $(libast_pgplot3d_la_DEPENDENCIES)
- $(LINK) -rpath $(libdir) $(libast_pgplot3d_la_LDFLAGS) $(libast_pgplot3d_la_OBJECTS) $(libast_pgplot3d_la_LIBADD) $(LIBS)
-libast_wcslib.la: $(libast_wcslib_la_OBJECTS) $(libast_wcslib_la_DEPENDENCIES)
- $(LINK) -rpath $(libdir) $(libast_wcslib_la_LDFLAGS) $(libast_wcslib_la_OBJECTS) $(libast_wcslib_la_LIBADD) $(LIBS)
-
-clean-checkPROGRAMS:
- @list='$(check_PROGRAMS)'; for p in $$list; do \
- f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
- echo " rm -f $$p $$f"; \
- rm -f $$p $$f ; \
- done
-
-clean-noinstPROGRAMS:
- @list='$(noinst_PROGRAMS)'; for p in $$list; do \
- f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
- echo " rm -f $$p $$f"; \
- rm -f $$p $$f ; \
- done
-ast_test$(EXEEXT): $(ast_test_OBJECTS) $(ast_test_DEPENDENCIES)
- @rm -f ast_test$(EXEEXT)
- $(LINK) $(ast_test_LDFLAGS) $(ast_test_OBJECTS) $(ast_test_LDADD) $(LIBS)
-astbad$(EXEEXT): $(astbad_OBJECTS) $(astbad_DEPENDENCIES)
- @rm -f astbad$(EXEEXT)
- $(LINK) $(astbad_LDFLAGS) $(astbad_OBJECTS) $(astbad_LDADD) $(LIBS)
-install-binSCRIPTS: $(bin_SCRIPTS)
- @$(NORMAL_INSTALL)
- test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
- @list='$(bin_SCRIPTS)'; for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- if test -f $$d$$p; then \
- f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
- echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \
- $(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \
- $(MANIFEST) && echo "MANIFEST:$(DESTDIR)$(bindir)/$$f" || :; \
- else :; fi; \
- done
-
-uninstall-binSCRIPTS:
- @$(NORMAL_UNINSTALL)
- @list='$(bin_SCRIPTS)'; for p in $$list; do \
- f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
- echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
- rm -f "$(DESTDIR)$(bindir)/$$f"; \
- done
-install-dist_binSCRIPTS: $(dist_bin_SCRIPTS)
- @$(NORMAL_INSTALL)
- test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
- @list='$(dist_bin_SCRIPTS)'; for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- if test -f $$d$$p; then \
- f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
- echo " $(dist_binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \
- $(dist_binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \
- $(MANIFEST) && echo "MANIFEST:$(DESTDIR)$(bindir)/$$f" || :; \
- else :; fi; \
- done
-
-uninstall-dist_binSCRIPTS:
- @$(NORMAL_UNINSTALL)
- @list='$(dist_bin_SCRIPTS)'; for p in $$list; do \
- f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
- echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
- rm -f "$(DESTDIR)$(bindir)/$$f"; \
- done
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ast_test.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/astbad.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/grf_2.0.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/grf_3.2.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_drama_la-err_drama.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_ems_la-err_ems.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_err_la-err_null.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_grf3d_la-grf3d.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-axis.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-box.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-c2f77.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-channel.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-circle.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-cmpframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-cmpmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-cmpregion.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-dsbspecframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-dssmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-ellipse.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-error.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fbox.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fchannel.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fcircle.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fcmpframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fcmpmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fcmpregion.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fdsbspecframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fdssmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fellipse.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-ferror.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-ffitschan.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-ffluxframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fframeset.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fgrismmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-finterval.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fintramap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fitschan.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fkeymap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-flutmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fluxframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fmapping.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fmathmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fmatrixmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fnormmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fnullregion.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fobject.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fpcdmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fpermmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fplot.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fplot3d.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fpointlist.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fpolygon.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fpolymap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fprism.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-frame.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-frameset.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fratemap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fregion.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fselectormap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fshiftmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fskyframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fslamap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fspecfluxframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fspecframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fspecmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fsphmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fstc.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fstccatalogentrylocation.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fstcobsdatalocation.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fstcresourceprofile.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fstcschan.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fstcsearchlocation.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fswitchmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-ftimeframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-ftimemap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-ftranmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-funitmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fwcsmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fwinmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fxmlchan.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fzoommap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-globals.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-grismmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-interval.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-intramap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-keymap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-loader.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-lutmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-mapping.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-mathmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-matrixmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-memory.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-normmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-nullregion.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-object.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-pcdmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-permmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-plot.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-plot3d.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-pointlist.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-pointset.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-polygon.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-polymap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-prism.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-ratemap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-region.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-selectormap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-shiftmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-skyaxis.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-skyframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-slamap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-specfluxframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-specframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-specmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-sphmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-stc.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-stccatalogentrylocation.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-stcobsdatalocation.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-stcresourceprofile.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-stcschan.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-stcsearchlocation.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-switchmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-timeframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-timemap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-tranmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-unit.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-unitmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-wcsmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-winmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-xml.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-xmlchan.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-zoommap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_pal_la-pal.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_pgplot3d_la-grf3d_pgplot.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_pgplot_la-grf_pgplot.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_wcslib_la-proj.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_wcslib_la-tpn.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_wcslib_la-wcstrig.Plo at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
-
-libast_la-axis.lo: axis.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-axis.lo -MD -MP -MF "$(DEPDIR)/libast_la-axis.Tpo" -c -o libast_la-axis.lo `test -f 'axis.c' || echo '$(srcdir)/'`axis.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-axis.Tpo" "$(DEPDIR)/libast_la-axis.Plo"; else rm -f "$(DEPDIR)/libast_la-axis.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='axis.c' object='libast_la-axis.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-axis.lo `test -f 'axis.c' || echo '$(srcdir)/'`axis.c
-
-libast_la-box.lo: box.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-box.lo -MD -MP -MF "$(DEPDIR)/libast_la-box.Tpo" -c -o libast_la-box.lo `test -f 'box.c' || echo '$(srcdir)/'`box.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-box.Tpo" "$(DEPDIR)/libast_la-box.Plo"; else rm -f "$(DEPDIR)/libast_la-box.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='box.c' object='libast_la-box.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-box.lo `test -f 'box.c' || echo '$(srcdir)/'`box.c
-
-libast_la-c2f77.lo: c2f77.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-c2f77.lo -MD -MP -MF "$(DEPDIR)/libast_la-c2f77.Tpo" -c -o libast_la-c2f77.lo `test -f 'c2f77.c' || echo '$(srcdir)/'`c2f77.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-c2f77.Tpo" "$(DEPDIR)/libast_la-c2f77.Plo"; else rm -f "$(DEPDIR)/libast_la-c2f77.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='c2f77.c' object='libast_la-c2f77.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-c2f77.lo `test -f 'c2f77.c' || echo '$(srcdir)/'`c2f77.c
-
-libast_la-channel.lo: channel.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-channel.lo -MD -MP -MF "$(DEPDIR)/libast_la-channel.Tpo" -c -o libast_la-channel.lo `test -f 'channel.c' || echo '$(srcdir)/'`channel.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-channel.Tpo" "$(DEPDIR)/libast_la-channel.Plo"; else rm -f "$(DEPDIR)/libast_la-channel.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='channel.c' object='libast_la-channel.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-channel.lo `test -f 'channel.c' || echo '$(srcdir)/'`channel.c
-
-libast_la-circle.lo: circle.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-circle.lo -MD -MP -MF "$(DEPDIR)/libast_la-circle.Tpo" -c -o libast_la-circle.lo `test -f 'circle.c' || echo '$(srcdir)/'`circle.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-circle.Tpo" "$(DEPDIR)/libast_la-circle.Plo"; else rm -f "$(DEPDIR)/libast_la-circle.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='circle.c' object='libast_la-circle.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-circle.lo `test -f 'circle.c' || echo '$(srcdir)/'`circle.c
-
-libast_la-cmpframe.lo: cmpframe.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-cmpframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-cmpframe.Tpo" -c -o libast_la-cmpframe.lo `test -f 'cmpframe.c' || echo '$(srcdir)/'`cmpframe.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-cmpframe.Tpo" "$(DEPDIR)/libast_la-cmpframe.Plo"; else rm -f "$(DEPDIR)/libast_la-cmpframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmpframe.c' object='libast_la-cmpframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-cmpframe.lo `test -f 'cmpframe.c' || echo '$(srcdir)/'`cmpframe.c
-
-libast_la-cmpmap.lo: cmpmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-cmpmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-cmpmap.Tpo" -c -o libast_la-cmpmap.lo `test -f 'cmpmap.c' || echo '$(srcdir)/'`cmpmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-cmpmap.Tpo" "$(DEPDIR)/libast_la-cmpmap.Plo"; else rm -f "$(DEPDIR)/libast_la-cmpmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmpmap.c' object='libast_la-cmpmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-cmpmap.lo `test -f 'cmpmap.c' || echo '$(srcdir)/'`cmpmap.c
-
-libast_la-cmpregion.lo: cmpregion.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-cmpregion.lo -MD -MP -MF "$(DEPDIR)/libast_la-cmpregion.Tpo" -c -o libast_la-cmpregion.lo `test -f 'cmpregion.c' || echo '$(srcdir)/'`cmpregion.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-cmpregion.Tpo" "$(DEPDIR)/libast_la-cmpregion.Plo"; else rm -f "$(DEPDIR)/libast_la-cmpregion.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmpregion.c' object='libast_la-cmpregion.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-cmpregion.lo `test -f 'cmpregion.c' || echo '$(srcdir)/'`cmpregion.c
-
-libast_la-dsbspecframe.lo: dsbspecframe.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-dsbspecframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-dsbspecframe.Tpo" -c -o libast_la-dsbspecframe.lo `test -f 'dsbspecframe.c' || echo '$(srcdir)/'`dsbspecframe.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-dsbspecframe.Tpo" "$(DEPDIR)/libast_la-dsbspecframe.Plo"; else rm -f "$(DEPDIR)/libast_la-dsbspecframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dsbspecframe.c' object='libast_la-dsbspecframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-dsbspecframe.lo `test -f 'dsbspecframe.c' || echo '$(srcdir)/'`dsbspecframe.c
-
-libast_la-dssmap.lo: dssmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-dssmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-dssmap.Tpo" -c -o libast_la-dssmap.lo `test -f 'dssmap.c' || echo '$(srcdir)/'`dssmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-dssmap.Tpo" "$(DEPDIR)/libast_la-dssmap.Plo"; else rm -f "$(DEPDIR)/libast_la-dssmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dssmap.c' object='libast_la-dssmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-dssmap.lo `test -f 'dssmap.c' || echo '$(srcdir)/'`dssmap.c
-
-libast_la-ellipse.lo: ellipse.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-ellipse.lo -MD -MP -MF "$(DEPDIR)/libast_la-ellipse.Tpo" -c -o libast_la-ellipse.lo `test -f 'ellipse.c' || echo '$(srcdir)/'`ellipse.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-ellipse.Tpo" "$(DEPDIR)/libast_la-ellipse.Plo"; else rm -f "$(DEPDIR)/libast_la-ellipse.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ellipse.c' object='libast_la-ellipse.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-ellipse.lo `test -f 'ellipse.c' || echo '$(srcdir)/'`ellipse.c
-
-libast_la-error.lo: error.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-error.lo -MD -MP -MF "$(DEPDIR)/libast_la-error.Tpo" -c -o libast_la-error.lo `test -f 'error.c' || echo '$(srcdir)/'`error.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-error.Tpo" "$(DEPDIR)/libast_la-error.Plo"; else rm -f "$(DEPDIR)/libast_la-error.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='error.c' object='libast_la-error.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-error.lo `test -f 'error.c' || echo '$(srcdir)/'`error.c
-
-libast_la-fbox.lo: fbox.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fbox.lo -MD -MP -MF "$(DEPDIR)/libast_la-fbox.Tpo" -c -o libast_la-fbox.lo `test -f 'fbox.c' || echo '$(srcdir)/'`fbox.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fbox.Tpo" "$(DEPDIR)/libast_la-fbox.Plo"; else rm -f "$(DEPDIR)/libast_la-fbox.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fbox.c' object='libast_la-fbox.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fbox.lo `test -f 'fbox.c' || echo '$(srcdir)/'`fbox.c
-
-libast_la-fchannel.lo: fchannel.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fchannel.lo -MD -MP -MF "$(DEPDIR)/libast_la-fchannel.Tpo" -c -o libast_la-fchannel.lo `test -f 'fchannel.c' || echo '$(srcdir)/'`fchannel.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fchannel.Tpo" "$(DEPDIR)/libast_la-fchannel.Plo"; else rm -f "$(DEPDIR)/libast_la-fchannel.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fchannel.c' object='libast_la-fchannel.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fchannel.lo `test -f 'fchannel.c' || echo '$(srcdir)/'`fchannel.c
-
-libast_la-fcircle.lo: fcircle.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fcircle.lo -MD -MP -MF "$(DEPDIR)/libast_la-fcircle.Tpo" -c -o libast_la-fcircle.lo `test -f 'fcircle.c' || echo '$(srcdir)/'`fcircle.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fcircle.Tpo" "$(DEPDIR)/libast_la-fcircle.Plo"; else rm -f "$(DEPDIR)/libast_la-fcircle.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fcircle.c' object='libast_la-fcircle.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fcircle.lo `test -f 'fcircle.c' || echo '$(srcdir)/'`fcircle.c
-
-libast_la-fcmpframe.lo: fcmpframe.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fcmpframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-fcmpframe.Tpo" -c -o libast_la-fcmpframe.lo `test -f 'fcmpframe.c' || echo '$(srcdir)/'`fcmpframe.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fcmpframe.Tpo" "$(DEPDIR)/libast_la-fcmpframe.Plo"; else rm -f "$(DEPDIR)/libast_la-fcmpframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fcmpframe.c' object='libast_la-fcmpframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fcmpframe.lo `test -f 'fcmpframe.c' || echo '$(srcdir)/'`fcmpframe.c
-
-libast_la-fcmpmap.lo: fcmpmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fcmpmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fcmpmap.Tpo" -c -o libast_la-fcmpmap.lo `test -f 'fcmpmap.c' || echo '$(srcdir)/'`fcmpmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fcmpmap.Tpo" "$(DEPDIR)/libast_la-fcmpmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fcmpmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fcmpmap.c' object='libast_la-fcmpmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fcmpmap.lo `test -f 'fcmpmap.c' || echo '$(srcdir)/'`fcmpmap.c
-
-libast_la-fcmpregion.lo: fcmpregion.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fcmpregion.lo -MD -MP -MF "$(DEPDIR)/libast_la-fcmpregion.Tpo" -c -o libast_la-fcmpregion.lo `test -f 'fcmpregion.c' || echo '$(srcdir)/'`fcmpregion.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fcmpregion.Tpo" "$(DEPDIR)/libast_la-fcmpregion.Plo"; else rm -f "$(DEPDIR)/libast_la-fcmpregion.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fcmpregion.c' object='libast_la-fcmpregion.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fcmpregion.lo `test -f 'fcmpregion.c' || echo '$(srcdir)/'`fcmpregion.c
-
-libast_la-fdsbspecframe.lo: fdsbspecframe.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fdsbspecframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-fdsbspecframe.Tpo" -c -o libast_la-fdsbspecframe.lo `test -f 'fdsbspecframe.c' || echo '$(srcdir)/'`fdsbspecframe.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fdsbspecframe.Tpo" "$(DEPDIR)/libast_la-fdsbspecframe.Plo"; else rm -f "$(DEPDIR)/libast_la-fdsbspecframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fdsbspecframe.c' object='libast_la-fdsbspecframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fdsbspecframe.lo `test -f 'fdsbspecframe.c' || echo '$(srcdir)/'`fdsbspecframe.c
-
-libast_la-fdssmap.lo: fdssmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fdssmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fdssmap.Tpo" -c -o libast_la-fdssmap.lo `test -f 'fdssmap.c' || echo '$(srcdir)/'`fdssmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fdssmap.Tpo" "$(DEPDIR)/libast_la-fdssmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fdssmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fdssmap.c' object='libast_la-fdssmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fdssmap.lo `test -f 'fdssmap.c' || echo '$(srcdir)/'`fdssmap.c
-
-libast_la-fellipse.lo: fellipse.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fellipse.lo -MD -MP -MF "$(DEPDIR)/libast_la-fellipse.Tpo" -c -o libast_la-fellipse.lo `test -f 'fellipse.c' || echo '$(srcdir)/'`fellipse.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fellipse.Tpo" "$(DEPDIR)/libast_la-fellipse.Plo"; else rm -f "$(DEPDIR)/libast_la-fellipse.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fellipse.c' object='libast_la-fellipse.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fellipse.lo `test -f 'fellipse.c' || echo '$(srcdir)/'`fellipse.c
-
-libast_la-ferror.lo: ferror.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-ferror.lo -MD -MP -MF "$(DEPDIR)/libast_la-ferror.Tpo" -c -o libast_la-ferror.lo `test -f 'ferror.c' || echo '$(srcdir)/'`ferror.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-ferror.Tpo" "$(DEPDIR)/libast_la-ferror.Plo"; else rm -f "$(DEPDIR)/libast_la-ferror.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ferror.c' object='libast_la-ferror.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-ferror.lo `test -f 'ferror.c' || echo '$(srcdir)/'`ferror.c
-
-libast_la-ffitschan.lo: ffitschan.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-ffitschan.lo -MD -MP -MF "$(DEPDIR)/libast_la-ffitschan.Tpo" -c -o libast_la-ffitschan.lo `test -f 'ffitschan.c' || echo '$(srcdir)/'`ffitschan.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-ffitschan.Tpo" "$(DEPDIR)/libast_la-ffitschan.Plo"; else rm -f "$(DEPDIR)/libast_la-ffitschan.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ffitschan.c' object='libast_la-ffitschan.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-ffitschan.lo `test -f 'ffitschan.c' || echo '$(srcdir)/'`ffitschan.c
-
-libast_la-ffluxframe.lo: ffluxframe.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-ffluxframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-ffluxframe.Tpo" -c -o libast_la-ffluxframe.lo `test -f 'ffluxframe.c' || echo '$(srcdir)/'`ffluxframe.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-ffluxframe.Tpo" "$(DEPDIR)/libast_la-ffluxframe.Plo"; else rm -f "$(DEPDIR)/libast_la-ffluxframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ffluxframe.c' object='libast_la-ffluxframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-ffluxframe.lo `test -f 'ffluxframe.c' || echo '$(srcdir)/'`ffluxframe.c
-
-libast_la-fframe.lo: fframe.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-fframe.Tpo" -c -o libast_la-fframe.lo `test -f 'fframe.c' || echo '$(srcdir)/'`fframe.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fframe.Tpo" "$(DEPDIR)/libast_la-fframe.Plo"; else rm -f "$(DEPDIR)/libast_la-fframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fframe.c' object='libast_la-fframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fframe.lo `test -f 'fframe.c' || echo '$(srcdir)/'`fframe.c
-
-libast_la-fframeset.lo: fframeset.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fframeset.lo -MD -MP -MF "$(DEPDIR)/libast_la-fframeset.Tpo" -c -o libast_la-fframeset.lo `test -f 'fframeset.c' || echo '$(srcdir)/'`fframeset.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fframeset.Tpo" "$(DEPDIR)/libast_la-fframeset.Plo"; else rm -f "$(DEPDIR)/libast_la-fframeset.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fframeset.c' object='libast_la-fframeset.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fframeset.lo `test -f 'fframeset.c' || echo '$(srcdir)/'`fframeset.c
-
-libast_la-fgrismmap.lo: fgrismmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fgrismmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fgrismmap.Tpo" -c -o libast_la-fgrismmap.lo `test -f 'fgrismmap.c' || echo '$(srcdir)/'`fgrismmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fgrismmap.Tpo" "$(DEPDIR)/libast_la-fgrismmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fgrismmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fgrismmap.c' object='libast_la-fgrismmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fgrismmap.lo `test -f 'fgrismmap.c' || echo '$(srcdir)/'`fgrismmap.c
-
-libast_la-finterval.lo: finterval.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-finterval.lo -MD -MP -MF "$(DEPDIR)/libast_la-finterval.Tpo" -c -o libast_la-finterval.lo `test -f 'finterval.c' || echo '$(srcdir)/'`finterval.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-finterval.Tpo" "$(DEPDIR)/libast_la-finterval.Plo"; else rm -f "$(DEPDIR)/libast_la-finterval.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='finterval.c' object='libast_la-finterval.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-finterval.lo `test -f 'finterval.c' || echo '$(srcdir)/'`finterval.c
-
-libast_la-fintramap.lo: fintramap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fintramap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fintramap.Tpo" -c -o libast_la-fintramap.lo `test -f 'fintramap.c' || echo '$(srcdir)/'`fintramap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fintramap.Tpo" "$(DEPDIR)/libast_la-fintramap.Plo"; else rm -f "$(DEPDIR)/libast_la-fintramap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fintramap.c' object='libast_la-fintramap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fintramap.lo `test -f 'fintramap.c' || echo '$(srcdir)/'`fintramap.c
-
-libast_la-fitschan.lo: fitschan.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fitschan.lo -MD -MP -MF "$(DEPDIR)/libast_la-fitschan.Tpo" -c -o libast_la-fitschan.lo `test -f 'fitschan.c' || echo '$(srcdir)/'`fitschan.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fitschan.Tpo" "$(DEPDIR)/libast_la-fitschan.Plo"; else rm -f "$(DEPDIR)/libast_la-fitschan.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fitschan.c' object='libast_la-fitschan.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fitschan.lo `test -f 'fitschan.c' || echo '$(srcdir)/'`fitschan.c
-
-libast_la-fkeymap.lo: fkeymap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fkeymap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fkeymap.Tpo" -c -o libast_la-fkeymap.lo `test -f 'fkeymap.c' || echo '$(srcdir)/'`fkeymap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fkeymap.Tpo" "$(DEPDIR)/libast_la-fkeymap.Plo"; else rm -f "$(DEPDIR)/libast_la-fkeymap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fkeymap.c' object='libast_la-fkeymap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fkeymap.lo `test -f 'fkeymap.c' || echo '$(srcdir)/'`fkeymap.c
-
-libast_la-flutmap.lo: flutmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-flutmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-flutmap.Tpo" -c -o libast_la-flutmap.lo `test -f 'flutmap.c' || echo '$(srcdir)/'`flutmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-flutmap.Tpo" "$(DEPDIR)/libast_la-flutmap.Plo"; else rm -f "$(DEPDIR)/libast_la-flutmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='flutmap.c' object='libast_la-flutmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-flutmap.lo `test -f 'flutmap.c' || echo '$(srcdir)/'`flutmap.c
-
-libast_la-fluxframe.lo: fluxframe.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fluxframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-fluxframe.Tpo" -c -o libast_la-fluxframe.lo `test -f 'fluxframe.c' || echo '$(srcdir)/'`fluxframe.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fluxframe.Tpo" "$(DEPDIR)/libast_la-fluxframe.Plo"; else rm -f "$(DEPDIR)/libast_la-fluxframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fluxframe.c' object='libast_la-fluxframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fluxframe.lo `test -f 'fluxframe.c' || echo '$(srcdir)/'`fluxframe.c
-
-libast_la-fmapping.lo: fmapping.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fmapping.lo -MD -MP -MF "$(DEPDIR)/libast_la-fmapping.Tpo" -c -o libast_la-fmapping.lo `test -f 'fmapping.c' || echo '$(srcdir)/'`fmapping.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fmapping.Tpo" "$(DEPDIR)/libast_la-fmapping.Plo"; else rm -f "$(DEPDIR)/libast_la-fmapping.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fmapping.c' object='libast_la-fmapping.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fmapping.lo `test -f 'fmapping.c' || echo '$(srcdir)/'`fmapping.c
-
-libast_la-fmathmap.lo: fmathmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fmathmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fmathmap.Tpo" -c -o libast_la-fmathmap.lo `test -f 'fmathmap.c' || echo '$(srcdir)/'`fmathmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fmathmap.Tpo" "$(DEPDIR)/libast_la-fmathmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fmathmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fmathmap.c' object='libast_la-fmathmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fmathmap.lo `test -f 'fmathmap.c' || echo '$(srcdir)/'`fmathmap.c
-
-libast_la-fmatrixmap.lo: fmatrixmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fmatrixmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fmatrixmap.Tpo" -c -o libast_la-fmatrixmap.lo `test -f 'fmatrixmap.c' || echo '$(srcdir)/'`fmatrixmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fmatrixmap.Tpo" "$(DEPDIR)/libast_la-fmatrixmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fmatrixmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fmatrixmap.c' object='libast_la-fmatrixmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fmatrixmap.lo `test -f 'fmatrixmap.c' || echo '$(srcdir)/'`fmatrixmap.c
-
-libast_la-fnullregion.lo: fnullregion.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fnullregion.lo -MD -MP -MF "$(DEPDIR)/libast_la-fnullregion.Tpo" -c -o libast_la-fnullregion.lo `test -f 'fnullregion.c' || echo '$(srcdir)/'`fnullregion.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fnullregion.Tpo" "$(DEPDIR)/libast_la-fnullregion.Plo"; else rm -f "$(DEPDIR)/libast_la-fnullregion.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fnullregion.c' object='libast_la-fnullregion.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fnullregion.lo `test -f 'fnullregion.c' || echo '$(srcdir)/'`fnullregion.c
-
-libast_la-fobject.lo: fobject.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fobject.lo -MD -MP -MF "$(DEPDIR)/libast_la-fobject.Tpo" -c -o libast_la-fobject.lo `test -f 'fobject.c' || echo '$(srcdir)/'`fobject.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fobject.Tpo" "$(DEPDIR)/libast_la-fobject.Plo"; else rm -f "$(DEPDIR)/libast_la-fobject.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fobject.c' object='libast_la-fobject.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fobject.lo `test -f 'fobject.c' || echo '$(srcdir)/'`fobject.c
-
-libast_la-fpcdmap.lo: fpcdmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fpcdmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fpcdmap.Tpo" -c -o libast_la-fpcdmap.lo `test -f 'fpcdmap.c' || echo '$(srcdir)/'`fpcdmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fpcdmap.Tpo" "$(DEPDIR)/libast_la-fpcdmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fpcdmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fpcdmap.c' object='libast_la-fpcdmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fpcdmap.lo `test -f 'fpcdmap.c' || echo '$(srcdir)/'`fpcdmap.c
-
-libast_la-fpermmap.lo: fpermmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fpermmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fpermmap.Tpo" -c -o libast_la-fpermmap.lo `test -f 'fpermmap.c' || echo '$(srcdir)/'`fpermmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fpermmap.Tpo" "$(DEPDIR)/libast_la-fpermmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fpermmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fpermmap.c' object='libast_la-fpermmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fpermmap.lo `test -f 'fpermmap.c' || echo '$(srcdir)/'`fpermmap.c
-
-libast_la-fplot.lo: fplot.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fplot.lo -MD -MP -MF "$(DEPDIR)/libast_la-fplot.Tpo" -c -o libast_la-fplot.lo `test -f 'fplot.c' || echo '$(srcdir)/'`fplot.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fplot.Tpo" "$(DEPDIR)/libast_la-fplot.Plo"; else rm -f "$(DEPDIR)/libast_la-fplot.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fplot.c' object='libast_la-fplot.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fplot.lo `test -f 'fplot.c' || echo '$(srcdir)/'`fplot.c
-
-libast_la-fplot3d.lo: fplot3d.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fplot3d.lo -MD -MP -MF "$(DEPDIR)/libast_la-fplot3d.Tpo" -c -o libast_la-fplot3d.lo `test -f 'fplot3d.c' || echo '$(srcdir)/'`fplot3d.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fplot3d.Tpo" "$(DEPDIR)/libast_la-fplot3d.Plo"; else rm -f "$(DEPDIR)/libast_la-fplot3d.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fplot3d.c' object='libast_la-fplot3d.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fplot3d.lo `test -f 'fplot3d.c' || echo '$(srcdir)/'`fplot3d.c
-
-libast_la-fpointlist.lo: fpointlist.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fpointlist.lo -MD -MP -MF "$(DEPDIR)/libast_la-fpointlist.Tpo" -c -o libast_la-fpointlist.lo `test -f 'fpointlist.c' || echo '$(srcdir)/'`fpointlist.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fpointlist.Tpo" "$(DEPDIR)/libast_la-fpointlist.Plo"; else rm -f "$(DEPDIR)/libast_la-fpointlist.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fpointlist.c' object='libast_la-fpointlist.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fpointlist.lo `test -f 'fpointlist.c' || echo '$(srcdir)/'`fpointlist.c
-
-libast_la-fpolygon.lo: fpolygon.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fpolygon.lo -MD -MP -MF "$(DEPDIR)/libast_la-fpolygon.Tpo" -c -o libast_la-fpolygon.lo `test -f 'fpolygon.c' || echo '$(srcdir)/'`fpolygon.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fpolygon.Tpo" "$(DEPDIR)/libast_la-fpolygon.Plo"; else rm -f "$(DEPDIR)/libast_la-fpolygon.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fpolygon.c' object='libast_la-fpolygon.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fpolygon.lo `test -f 'fpolygon.c' || echo '$(srcdir)/'`fpolygon.c
-
-libast_la-fpolymap.lo: fpolymap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fpolymap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fpolymap.Tpo" -c -o libast_la-fpolymap.lo `test -f 'fpolymap.c' || echo '$(srcdir)/'`fpolymap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fpolymap.Tpo" "$(DEPDIR)/libast_la-fpolymap.Plo"; else rm -f "$(DEPDIR)/libast_la-fpolymap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fpolymap.c' object='libast_la-fpolymap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fpolymap.lo `test -f 'fpolymap.c' || echo '$(srcdir)/'`fpolymap.c
-
-libast_la-fprism.lo: fprism.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fprism.lo -MD -MP -MF "$(DEPDIR)/libast_la-fprism.Tpo" -c -o libast_la-fprism.lo `test -f 'fprism.c' || echo '$(srcdir)/'`fprism.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fprism.Tpo" "$(DEPDIR)/libast_la-fprism.Plo"; else rm -f "$(DEPDIR)/libast_la-fprism.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fprism.c' object='libast_la-fprism.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fprism.lo `test -f 'fprism.c' || echo '$(srcdir)/'`fprism.c
-
-libast_la-frame.lo: frame.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-frame.lo -MD -MP -MF "$(DEPDIR)/libast_la-frame.Tpo" -c -o libast_la-frame.lo `test -f 'frame.c' || echo '$(srcdir)/'`frame.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-frame.Tpo" "$(DEPDIR)/libast_la-frame.Plo"; else rm -f "$(DEPDIR)/libast_la-frame.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='frame.c' object='libast_la-frame.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-frame.lo `test -f 'frame.c' || echo '$(srcdir)/'`frame.c
-
-libast_la-frameset.lo: frameset.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-frameset.lo -MD -MP -MF "$(DEPDIR)/libast_la-frameset.Tpo" -c -o libast_la-frameset.lo `test -f 'frameset.c' || echo '$(srcdir)/'`frameset.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-frameset.Tpo" "$(DEPDIR)/libast_la-frameset.Plo"; else rm -f "$(DEPDIR)/libast_la-frameset.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='frameset.c' object='libast_la-frameset.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-frameset.lo `test -f 'frameset.c' || echo '$(srcdir)/'`frameset.c
-
-libast_la-fratemap.lo: fratemap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fratemap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fratemap.Tpo" -c -o libast_la-fratemap.lo `test -f 'fratemap.c' || echo '$(srcdir)/'`fratemap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fratemap.Tpo" "$(DEPDIR)/libast_la-fratemap.Plo"; else rm -f "$(DEPDIR)/libast_la-fratemap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fratemap.c' object='libast_la-fratemap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fratemap.lo `test -f 'fratemap.c' || echo '$(srcdir)/'`fratemap.c
-
-libast_la-fnormmap.lo: fnormmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fnormmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fnormmap.Tpo" -c -o libast_la-fnormmap.lo `test -f 'fnormmap.c' || echo '$(srcdir)/'`fnormmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fnormmap.Tpo" "$(DEPDIR)/libast_la-fnormmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fnormmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fnormmap.c' object='libast_la-fnormmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fnormmap.lo `test -f 'fnormmap.c' || echo '$(srcdir)/'`fnormmap.c
-
-libast_la-fregion.lo: fregion.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fregion.lo -MD -MP -MF "$(DEPDIR)/libast_la-fregion.Tpo" -c -o libast_la-fregion.lo `test -f 'fregion.c' || echo '$(srcdir)/'`fregion.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fregion.Tpo" "$(DEPDIR)/libast_la-fregion.Plo"; else rm -f "$(DEPDIR)/libast_la-fregion.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fregion.c' object='libast_la-fregion.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fregion.lo `test -f 'fregion.c' || echo '$(srcdir)/'`fregion.c
-
-libast_la-fshiftmap.lo: fshiftmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fshiftmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fshiftmap.Tpo" -c -o libast_la-fshiftmap.lo `test -f 'fshiftmap.c' || echo '$(srcdir)/'`fshiftmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fshiftmap.Tpo" "$(DEPDIR)/libast_la-fshiftmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fshiftmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fshiftmap.c' object='libast_la-fshiftmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fshiftmap.lo `test -f 'fshiftmap.c' || echo '$(srcdir)/'`fshiftmap.c
-
-libast_la-fskyframe.lo: fskyframe.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fskyframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-fskyframe.Tpo" -c -o libast_la-fskyframe.lo `test -f 'fskyframe.c' || echo '$(srcdir)/'`fskyframe.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fskyframe.Tpo" "$(DEPDIR)/libast_la-fskyframe.Plo"; else rm -f "$(DEPDIR)/libast_la-fskyframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fskyframe.c' object='libast_la-fskyframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fskyframe.lo `test -f 'fskyframe.c' || echo '$(srcdir)/'`fskyframe.c
-
-libast_la-fslamap.lo: fslamap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fslamap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fslamap.Tpo" -c -o libast_la-fslamap.lo `test -f 'fslamap.c' || echo '$(srcdir)/'`fslamap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fslamap.Tpo" "$(DEPDIR)/libast_la-fslamap.Plo"; else rm -f "$(DEPDIR)/libast_la-fslamap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fslamap.c' object='libast_la-fslamap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fslamap.lo `test -f 'fslamap.c' || echo '$(srcdir)/'`fslamap.c
-
-libast_la-fspecfluxframe.lo: fspecfluxframe.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fspecfluxframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-fspecfluxframe.Tpo" -c -o libast_la-fspecfluxframe.lo `test -f 'fspecfluxframe.c' || echo '$(srcdir)/'`fspecfluxframe.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fspecfluxframe.Tpo" "$(DEPDIR)/libast_la-fspecfluxframe.Plo"; else rm -f "$(DEPDIR)/libast_la-fspecfluxframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fspecfluxframe.c' object='libast_la-fspecfluxframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fspecfluxframe.lo `test -f 'fspecfluxframe.c' || echo '$(srcdir)/'`fspecfluxframe.c
-
-libast_la-fspecframe.lo: fspecframe.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fspecframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-fspecframe.Tpo" -c -o libast_la-fspecframe.lo `test -f 'fspecframe.c' || echo '$(srcdir)/'`fspecframe.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fspecframe.Tpo" "$(DEPDIR)/libast_la-fspecframe.Plo"; else rm -f "$(DEPDIR)/libast_la-fspecframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fspecframe.c' object='libast_la-fspecframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fspecframe.lo `test -f 'fspecframe.c' || echo '$(srcdir)/'`fspecframe.c
-
-libast_la-fspecmap.lo: fspecmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fspecmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fspecmap.Tpo" -c -o libast_la-fspecmap.lo `test -f 'fspecmap.c' || echo '$(srcdir)/'`fspecmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fspecmap.Tpo" "$(DEPDIR)/libast_la-fspecmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fspecmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fspecmap.c' object='libast_la-fspecmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fspecmap.lo `test -f 'fspecmap.c' || echo '$(srcdir)/'`fspecmap.c
-
-libast_la-ftimeframe.lo: ftimeframe.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-ftimeframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-ftimeframe.Tpo" -c -o libast_la-ftimeframe.lo `test -f 'ftimeframe.c' || echo '$(srcdir)/'`ftimeframe.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-ftimeframe.Tpo" "$(DEPDIR)/libast_la-ftimeframe.Plo"; else rm -f "$(DEPDIR)/libast_la-ftimeframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ftimeframe.c' object='libast_la-ftimeframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-ftimeframe.lo `test -f 'ftimeframe.c' || echo '$(srcdir)/'`ftimeframe.c
-
-libast_la-ftimemap.lo: ftimemap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-ftimemap.lo -MD -MP -MF "$(DEPDIR)/libast_la-ftimemap.Tpo" -c -o libast_la-ftimemap.lo `test -f 'ftimemap.c' || echo '$(srcdir)/'`ftimemap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-ftimemap.Tpo" "$(DEPDIR)/libast_la-ftimemap.Plo"; else rm -f "$(DEPDIR)/libast_la-ftimemap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ftimemap.c' object='libast_la-ftimemap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-ftimemap.lo `test -f 'ftimemap.c' || echo '$(srcdir)/'`ftimemap.c
-
-libast_la-fsphmap.lo: fsphmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fsphmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fsphmap.Tpo" -c -o libast_la-fsphmap.lo `test -f 'fsphmap.c' || echo '$(srcdir)/'`fsphmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fsphmap.Tpo" "$(DEPDIR)/libast_la-fsphmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fsphmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsphmap.c' object='libast_la-fsphmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fsphmap.lo `test -f 'fsphmap.c' || echo '$(srcdir)/'`fsphmap.c
-
-libast_la-ftranmap.lo: ftranmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-ftranmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-ftranmap.Tpo" -c -o libast_la-ftranmap.lo `test -f 'ftranmap.c' || echo '$(srcdir)/'`ftranmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-ftranmap.Tpo" "$(DEPDIR)/libast_la-ftranmap.Plo"; else rm -f "$(DEPDIR)/libast_la-ftranmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ftranmap.c' object='libast_la-ftranmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-ftranmap.lo `test -f 'ftranmap.c' || echo '$(srcdir)/'`ftranmap.c
-
-libast_la-fselectormap.lo: fselectormap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fselectormap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fselectormap.Tpo" -c -o libast_la-fselectormap.lo `test -f 'fselectormap.c' || echo '$(srcdir)/'`fselectormap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fselectormap.Tpo" "$(DEPDIR)/libast_la-fselectormap.Plo"; else rm -f "$(DEPDIR)/libast_la-fselectormap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fselectormap.c' object='libast_la-fselectormap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fselectormap.lo `test -f 'fselectormap.c' || echo '$(srcdir)/'`fselectormap.c
-
-libast_la-fswitchmap.lo: fswitchmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fswitchmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fswitchmap.Tpo" -c -o libast_la-fswitchmap.lo `test -f 'fswitchmap.c' || echo '$(srcdir)/'`fswitchmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fswitchmap.Tpo" "$(DEPDIR)/libast_la-fswitchmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fswitchmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fswitchmap.c' object='libast_la-fswitchmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fswitchmap.lo `test -f 'fswitchmap.c' || echo '$(srcdir)/'`fswitchmap.c
-
-libast_la-funitmap.lo: funitmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-funitmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-funitmap.Tpo" -c -o libast_la-funitmap.lo `test -f 'funitmap.c' || echo '$(srcdir)/'`funitmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-funitmap.Tpo" "$(DEPDIR)/libast_la-funitmap.Plo"; else rm -f "$(DEPDIR)/libast_la-funitmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='funitmap.c' object='libast_la-funitmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-funitmap.lo `test -f 'funitmap.c' || echo '$(srcdir)/'`funitmap.c
-
-libast_la-fwcsmap.lo: fwcsmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fwcsmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fwcsmap.Tpo" -c -o libast_la-fwcsmap.lo `test -f 'fwcsmap.c' || echo '$(srcdir)/'`fwcsmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fwcsmap.Tpo" "$(DEPDIR)/libast_la-fwcsmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fwcsmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fwcsmap.c' object='libast_la-fwcsmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fwcsmap.lo `test -f 'fwcsmap.c' || echo '$(srcdir)/'`fwcsmap.c
-
-libast_la-fwinmap.lo: fwinmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fwinmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fwinmap.Tpo" -c -o libast_la-fwinmap.lo `test -f 'fwinmap.c' || echo '$(srcdir)/'`fwinmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fwinmap.Tpo" "$(DEPDIR)/libast_la-fwinmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fwinmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fwinmap.c' object='libast_la-fwinmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fwinmap.lo `test -f 'fwinmap.c' || echo '$(srcdir)/'`fwinmap.c
-
-libast_la-fxmlchan.lo: fxmlchan.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fxmlchan.lo -MD -MP -MF "$(DEPDIR)/libast_la-fxmlchan.Tpo" -c -o libast_la-fxmlchan.lo `test -f 'fxmlchan.c' || echo '$(srcdir)/'`fxmlchan.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fxmlchan.Tpo" "$(DEPDIR)/libast_la-fxmlchan.Plo"; else rm -f "$(DEPDIR)/libast_la-fxmlchan.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fxmlchan.c' object='libast_la-fxmlchan.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fxmlchan.lo `test -f 'fxmlchan.c' || echo '$(srcdir)/'`fxmlchan.c
-
-libast_la-fzoommap.lo: fzoommap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fzoommap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fzoommap.Tpo" -c -o libast_la-fzoommap.lo `test -f 'fzoommap.c' || echo '$(srcdir)/'`fzoommap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fzoommap.Tpo" "$(DEPDIR)/libast_la-fzoommap.Plo"; else rm -f "$(DEPDIR)/libast_la-fzoommap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fzoommap.c' object='libast_la-fzoommap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fzoommap.lo `test -f 'fzoommap.c' || echo '$(srcdir)/'`fzoommap.c
-
-libast_la-globals.lo: globals.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-globals.lo -MD -MP -MF "$(DEPDIR)/libast_la-globals.Tpo" -c -o libast_la-globals.lo `test -f 'globals.c' || echo '$(srcdir)/'`globals.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-globals.Tpo" "$(DEPDIR)/libast_la-globals.Plo"; else rm -f "$(DEPDIR)/libast_la-globals.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='globals.c' object='libast_la-globals.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-globals.lo `test -f 'globals.c' || echo '$(srcdir)/'`globals.c
-
-libast_la-grismmap.lo: grismmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-grismmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-grismmap.Tpo" -c -o libast_la-grismmap.lo `test -f 'grismmap.c' || echo '$(srcdir)/'`grismmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-grismmap.Tpo" "$(DEPDIR)/libast_la-grismmap.Plo"; else rm -f "$(DEPDIR)/libast_la-grismmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='grismmap.c' object='libast_la-grismmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-grismmap.lo `test -f 'grismmap.c' || echo '$(srcdir)/'`grismmap.c
-
-libast_la-interval.lo: interval.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-interval.lo -MD -MP -MF "$(DEPDIR)/libast_la-interval.Tpo" -c -o libast_la-interval.lo `test -f 'interval.c' || echo '$(srcdir)/'`interval.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-interval.Tpo" "$(DEPDIR)/libast_la-interval.Plo"; else rm -f "$(DEPDIR)/libast_la-interval.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='interval.c' object='libast_la-interval.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-interval.lo `test -f 'interval.c' || echo '$(srcdir)/'`interval.c
-
-libast_la-intramap.lo: intramap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-intramap.lo -MD -MP -MF "$(DEPDIR)/libast_la-intramap.Tpo" -c -o libast_la-intramap.lo `test -f 'intramap.c' || echo '$(srcdir)/'`intramap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-intramap.Tpo" "$(DEPDIR)/libast_la-intramap.Plo"; else rm -f "$(DEPDIR)/libast_la-intramap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intramap.c' object='libast_la-intramap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-intramap.lo `test -f 'intramap.c' || echo '$(srcdir)/'`intramap.c
-
-libast_la-keymap.lo: keymap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-keymap.lo -MD -MP -MF "$(DEPDIR)/libast_la-keymap.Tpo" -c -o libast_la-keymap.lo `test -f 'keymap.c' || echo '$(srcdir)/'`keymap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-keymap.Tpo" "$(DEPDIR)/libast_la-keymap.Plo"; else rm -f "$(DEPDIR)/libast_la-keymap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='keymap.c' object='libast_la-keymap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-keymap.lo `test -f 'keymap.c' || echo '$(srcdir)/'`keymap.c
-
-libast_la-loader.lo: loader.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-loader.lo -MD -MP -MF "$(DEPDIR)/libast_la-loader.Tpo" -c -o libast_la-loader.lo `test -f 'loader.c' || echo '$(srcdir)/'`loader.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-loader.Tpo" "$(DEPDIR)/libast_la-loader.Plo"; else rm -f "$(DEPDIR)/libast_la-loader.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='loader.c' object='libast_la-loader.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-loader.lo `test -f 'loader.c' || echo '$(srcdir)/'`loader.c
-
-libast_la-lutmap.lo: lutmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-lutmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-lutmap.Tpo" -c -o libast_la-lutmap.lo `test -f 'lutmap.c' || echo '$(srcdir)/'`lutmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-lutmap.Tpo" "$(DEPDIR)/libast_la-lutmap.Plo"; else rm -f "$(DEPDIR)/libast_la-lutmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lutmap.c' object='libast_la-lutmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-lutmap.lo `test -f 'lutmap.c' || echo '$(srcdir)/'`lutmap.c
-
-libast_la-mapping.lo: mapping.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-mapping.lo -MD -MP -MF "$(DEPDIR)/libast_la-mapping.Tpo" -c -o libast_la-mapping.lo `test -f 'mapping.c' || echo '$(srcdir)/'`mapping.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-mapping.Tpo" "$(DEPDIR)/libast_la-mapping.Plo"; else rm -f "$(DEPDIR)/libast_la-mapping.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mapping.c' object='libast_la-mapping.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-mapping.lo `test -f 'mapping.c' || echo '$(srcdir)/'`mapping.c
-
-libast_la-mathmap.lo: mathmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-mathmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-mathmap.Tpo" -c -o libast_la-mathmap.lo `test -f 'mathmap.c' || echo '$(srcdir)/'`mathmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-mathmap.Tpo" "$(DEPDIR)/libast_la-mathmap.Plo"; else rm -f "$(DEPDIR)/libast_la-mathmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mathmap.c' object='libast_la-mathmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-mathmap.lo `test -f 'mathmap.c' || echo '$(srcdir)/'`mathmap.c
-
-libast_la-matrixmap.lo: matrixmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-matrixmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-matrixmap.Tpo" -c -o libast_la-matrixmap.lo `test -f 'matrixmap.c' || echo '$(srcdir)/'`matrixmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-matrixmap.Tpo" "$(DEPDIR)/libast_la-matrixmap.Plo"; else rm -f "$(DEPDIR)/libast_la-matrixmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='matrixmap.c' object='libast_la-matrixmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-matrixmap.lo `test -f 'matrixmap.c' || echo '$(srcdir)/'`matrixmap.c
-
-libast_la-memory.lo: memory.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-memory.lo -MD -MP -MF "$(DEPDIR)/libast_la-memory.Tpo" -c -o libast_la-memory.lo `test -f 'memory.c' || echo '$(srcdir)/'`memory.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-memory.Tpo" "$(DEPDIR)/libast_la-memory.Plo"; else rm -f "$(DEPDIR)/libast_la-memory.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='memory.c' object='libast_la-memory.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-memory.lo `test -f 'memory.c' || echo '$(srcdir)/'`memory.c
-
-libast_la-nullregion.lo: nullregion.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-nullregion.lo -MD -MP -MF "$(DEPDIR)/libast_la-nullregion.Tpo" -c -o libast_la-nullregion.lo `test -f 'nullregion.c' || echo '$(srcdir)/'`nullregion.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-nullregion.Tpo" "$(DEPDIR)/libast_la-nullregion.Plo"; else rm -f "$(DEPDIR)/libast_la-nullregion.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nullregion.c' object='libast_la-nullregion.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-nullregion.lo `test -f 'nullregion.c' || echo '$(srcdir)/'`nullregion.c
-
-libast_la-object.lo: object.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-object.lo -MD -MP -MF "$(DEPDIR)/libast_la-object.Tpo" -c -o libast_la-object.lo `test -f 'object.c' || echo '$(srcdir)/'`object.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-object.Tpo" "$(DEPDIR)/libast_la-object.Plo"; else rm -f "$(DEPDIR)/libast_la-object.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='object.c' object='libast_la-object.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-object.lo `test -f 'object.c' || echo '$(srcdir)/'`object.c
-
-libast_la-pcdmap.lo: pcdmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-pcdmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-pcdmap.Tpo" -c -o libast_la-pcdmap.lo `test -f 'pcdmap.c' || echo '$(srcdir)/'`pcdmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-pcdmap.Tpo" "$(DEPDIR)/libast_la-pcdmap.Plo"; else rm -f "$(DEPDIR)/libast_la-pcdmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pcdmap.c' object='libast_la-pcdmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-pcdmap.lo `test -f 'pcdmap.c' || echo '$(srcdir)/'`pcdmap.c
-
-libast_la-permmap.lo: permmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-permmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-permmap.Tpo" -c -o libast_la-permmap.lo `test -f 'permmap.c' || echo '$(srcdir)/'`permmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-permmap.Tpo" "$(DEPDIR)/libast_la-permmap.Plo"; else rm -f "$(DEPDIR)/libast_la-permmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='permmap.c' object='libast_la-permmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-permmap.lo `test -f 'permmap.c' || echo '$(srcdir)/'`permmap.c
-
-libast_la-plot.lo: plot.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-plot.lo -MD -MP -MF "$(DEPDIR)/libast_la-plot.Tpo" -c -o libast_la-plot.lo `test -f 'plot.c' || echo '$(srcdir)/'`plot.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-plot.Tpo" "$(DEPDIR)/libast_la-plot.Plo"; else rm -f "$(DEPDIR)/libast_la-plot.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='plot.c' object='libast_la-plot.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-plot.lo `test -f 'plot.c' || echo '$(srcdir)/'`plot.c
-
-libast_la-plot3d.lo: plot3d.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-plot3d.lo -MD -MP -MF "$(DEPDIR)/libast_la-plot3d.Tpo" -c -o libast_la-plot3d.lo `test -f 'plot3d.c' || echo '$(srcdir)/'`plot3d.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-plot3d.Tpo" "$(DEPDIR)/libast_la-plot3d.Plo"; else rm -f "$(DEPDIR)/libast_la-plot3d.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='plot3d.c' object='libast_la-plot3d.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-plot3d.lo `test -f 'plot3d.c' || echo '$(srcdir)/'`plot3d.c
-
-libast_la-pointlist.lo: pointlist.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-pointlist.lo -MD -MP -MF "$(DEPDIR)/libast_la-pointlist.Tpo" -c -o libast_la-pointlist.lo `test -f 'pointlist.c' || echo '$(srcdir)/'`pointlist.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-pointlist.Tpo" "$(DEPDIR)/libast_la-pointlist.Plo"; else rm -f "$(DEPDIR)/libast_la-pointlist.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pointlist.c' object='libast_la-pointlist.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-pointlist.lo `test -f 'pointlist.c' || echo '$(srcdir)/'`pointlist.c
-
-libast_la-pointset.lo: pointset.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-pointset.lo -MD -MP -MF "$(DEPDIR)/libast_la-pointset.Tpo" -c -o libast_la-pointset.lo `test -f 'pointset.c' || echo '$(srcdir)/'`pointset.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-pointset.Tpo" "$(DEPDIR)/libast_la-pointset.Plo"; else rm -f "$(DEPDIR)/libast_la-pointset.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pointset.c' object='libast_la-pointset.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-pointset.lo `test -f 'pointset.c' || echo '$(srcdir)/'`pointset.c
-
-libast_la-polygon.lo: polygon.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-polygon.lo -MD -MP -MF "$(DEPDIR)/libast_la-polygon.Tpo" -c -o libast_la-polygon.lo `test -f 'polygon.c' || echo '$(srcdir)/'`polygon.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-polygon.Tpo" "$(DEPDIR)/libast_la-polygon.Plo"; else rm -f "$(DEPDIR)/libast_la-polygon.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polygon.c' object='libast_la-polygon.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-polygon.lo `test -f 'polygon.c' || echo '$(srcdir)/'`polygon.c
-
-libast_la-polymap.lo: polymap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-polymap.lo -MD -MP -MF "$(DEPDIR)/libast_la-polymap.Tpo" -c -o libast_la-polymap.lo `test -f 'polymap.c' || echo '$(srcdir)/'`polymap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-polymap.Tpo" "$(DEPDIR)/libast_la-polymap.Plo"; else rm -f "$(DEPDIR)/libast_la-polymap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polymap.c' object='libast_la-polymap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-polymap.lo `test -f 'polymap.c' || echo '$(srcdir)/'`polymap.c
-
-libast_la-prism.lo: prism.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-prism.lo -MD -MP -MF "$(DEPDIR)/libast_la-prism.Tpo" -c -o libast_la-prism.lo `test -f 'prism.c' || echo '$(srcdir)/'`prism.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-prism.Tpo" "$(DEPDIR)/libast_la-prism.Plo"; else rm -f "$(DEPDIR)/libast_la-prism.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='prism.c' object='libast_la-prism.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-prism.lo `test -f 'prism.c' || echo '$(srcdir)/'`prism.c
-
-libast_la-normmap.lo: normmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-normmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-normmap.Tpo" -c -o libast_la-normmap.lo `test -f 'normmap.c' || echo '$(srcdir)/'`normmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-normmap.Tpo" "$(DEPDIR)/libast_la-normmap.Plo"; else rm -f "$(DEPDIR)/libast_la-normmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='normmap.c' object='libast_la-normmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-normmap.lo `test -f 'normmap.c' || echo '$(srcdir)/'`normmap.c
-
-libast_la-ratemap.lo: ratemap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-ratemap.lo -MD -MP -MF "$(DEPDIR)/libast_la-ratemap.Tpo" -c -o libast_la-ratemap.lo `test -f 'ratemap.c' || echo '$(srcdir)/'`ratemap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-ratemap.Tpo" "$(DEPDIR)/libast_la-ratemap.Plo"; else rm -f "$(DEPDIR)/libast_la-ratemap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ratemap.c' object='libast_la-ratemap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-ratemap.lo `test -f 'ratemap.c' || echo '$(srcdir)/'`ratemap.c
-
-libast_la-region.lo: region.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-region.lo -MD -MP -MF "$(DEPDIR)/libast_la-region.Tpo" -c -o libast_la-region.lo `test -f 'region.c' || echo '$(srcdir)/'`region.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-region.Tpo" "$(DEPDIR)/libast_la-region.Plo"; else rm -f "$(DEPDIR)/libast_la-region.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='region.c' object='libast_la-region.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-region.lo `test -f 'region.c' || echo '$(srcdir)/'`region.c
-
-libast_la-shiftmap.lo: shiftmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-shiftmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-shiftmap.Tpo" -c -o libast_la-shiftmap.lo `test -f 'shiftmap.c' || echo '$(srcdir)/'`shiftmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-shiftmap.Tpo" "$(DEPDIR)/libast_la-shiftmap.Plo"; else rm -f "$(DEPDIR)/libast_la-shiftmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='shiftmap.c' object='libast_la-shiftmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-shiftmap.lo `test -f 'shiftmap.c' || echo '$(srcdir)/'`shiftmap.c
-
-libast_la-skyaxis.lo: skyaxis.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-skyaxis.lo -MD -MP -MF "$(DEPDIR)/libast_la-skyaxis.Tpo" -c -o libast_la-skyaxis.lo `test -f 'skyaxis.c' || echo '$(srcdir)/'`skyaxis.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-skyaxis.Tpo" "$(DEPDIR)/libast_la-skyaxis.Plo"; else rm -f "$(DEPDIR)/libast_la-skyaxis.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='skyaxis.c' object='libast_la-skyaxis.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-skyaxis.lo `test -f 'skyaxis.c' || echo '$(srcdir)/'`skyaxis.c
-
-libast_la-skyframe.lo: skyframe.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-skyframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-skyframe.Tpo" -c -o libast_la-skyframe.lo `test -f 'skyframe.c' || echo '$(srcdir)/'`skyframe.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-skyframe.Tpo" "$(DEPDIR)/libast_la-skyframe.Plo"; else rm -f "$(DEPDIR)/libast_la-skyframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='skyframe.c' object='libast_la-skyframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-skyframe.lo `test -f 'skyframe.c' || echo '$(srcdir)/'`skyframe.c
-
-libast_la-slamap.lo: slamap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-slamap.lo -MD -MP -MF "$(DEPDIR)/libast_la-slamap.Tpo" -c -o libast_la-slamap.lo `test -f 'slamap.c' || echo '$(srcdir)/'`slamap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-slamap.Tpo" "$(DEPDIR)/libast_la-slamap.Plo"; else rm -f "$(DEPDIR)/libast_la-slamap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='slamap.c' object='libast_la-slamap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-slamap.lo `test -f 'slamap.c' || echo '$(srcdir)/'`slamap.c
-
-libast_la-specfluxframe.lo: specfluxframe.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-specfluxframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-specfluxframe.Tpo" -c -o libast_la-specfluxframe.lo `test -f 'specfluxframe.c' || echo '$(srcdir)/'`specfluxframe.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-specfluxframe.Tpo" "$(DEPDIR)/libast_la-specfluxframe.Plo"; else rm -f "$(DEPDIR)/libast_la-specfluxframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='specfluxframe.c' object='libast_la-specfluxframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-specfluxframe.lo `test -f 'specfluxframe.c' || echo '$(srcdir)/'`specfluxframe.c
-
-libast_la-specframe.lo: specframe.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-specframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-specframe.Tpo" -c -o libast_la-specframe.lo `test -f 'specframe.c' || echo '$(srcdir)/'`specframe.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-specframe.Tpo" "$(DEPDIR)/libast_la-specframe.Plo"; else rm -f "$(DEPDIR)/libast_la-specframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='specframe.c' object='libast_la-specframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-specframe.lo `test -f 'specframe.c' || echo '$(srcdir)/'`specframe.c
-
-libast_la-specmap.lo: specmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-specmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-specmap.Tpo" -c -o libast_la-specmap.lo `test -f 'specmap.c' || echo '$(srcdir)/'`specmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-specmap.Tpo" "$(DEPDIR)/libast_la-specmap.Plo"; else rm -f "$(DEPDIR)/libast_la-specmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='specmap.c' object='libast_la-specmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-specmap.lo `test -f 'specmap.c' || echo '$(srcdir)/'`specmap.c
-
-libast_la-sphmap.lo: sphmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-sphmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-sphmap.Tpo" -c -o libast_la-sphmap.lo `test -f 'sphmap.c' || echo '$(srcdir)/'`sphmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-sphmap.Tpo" "$(DEPDIR)/libast_la-sphmap.Plo"; else rm -f "$(DEPDIR)/libast_la-sphmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sphmap.c' object='libast_la-sphmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-sphmap.lo `test -f 'sphmap.c' || echo '$(srcdir)/'`sphmap.c
-
-libast_la-stc.lo: stc.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-stc.lo -MD -MP -MF "$(DEPDIR)/libast_la-stc.Tpo" -c -o libast_la-stc.lo `test -f 'stc.c' || echo '$(srcdir)/'`stc.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-stc.Tpo" "$(DEPDIR)/libast_la-stc.Plo"; else rm -f "$(DEPDIR)/libast_la-stc.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stc.c' object='libast_la-stc.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-stc.lo `test -f 'stc.c' || echo '$(srcdir)/'`stc.c
-
-libast_la-stcresourceprofile.lo: stcresourceprofile.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-stcresourceprofile.lo -MD -MP -MF "$(DEPDIR)/libast_la-stcresourceprofile.Tpo" -c -o libast_la-stcresourceprofile.lo `test -f 'stcresourceprofile.c' || echo '$(srcdir)/'`stcresourceprofile.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-stcresourceprofile.Tpo" "$(DEPDIR)/libast_la-stcresourceprofile.Plo"; else rm -f "$(DEPDIR)/libast_la-stcresourceprofile.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stcresourceprofile.c' object='libast_la-stcresourceprofile.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-stcresourceprofile.lo `test -f 'stcresourceprofile.c' || echo '$(srcdir)/'`stcresourceprofile.c
-
-libast_la-stcsearchlocation.lo: stcsearchlocation.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-stcsearchlocation.lo -MD -MP -MF "$(DEPDIR)/libast_la-stcsearchlocation.Tpo" -c -o libast_la-stcsearchlocation.lo `test -f 'stcsearchlocation.c' || echo '$(srcdir)/'`stcsearchlocation.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-stcsearchlocation.Tpo" "$(DEPDIR)/libast_la-stcsearchlocation.Plo"; else rm -f "$(DEPDIR)/libast_la-stcsearchlocation.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stcsearchlocation.c' object='libast_la-stcsearchlocation.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-stcsearchlocation.lo `test -f 'stcsearchlocation.c' || echo '$(srcdir)/'`stcsearchlocation.c
-
-libast_la-stccatalogentrylocation.lo: stccatalogentrylocation.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-stccatalogentrylocation.lo -MD -MP -MF "$(DEPDIR)/libast_la-stccatalogentrylocation.Tpo" -c -o libast_la-stccatalogentrylocation.lo `test -f 'stccatalogentrylocation.c' || echo '$(srcdir)/'`stccatalogentrylocation.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-stccatalogentrylocation.Tpo" "$(DEPDIR)/libast_la-stccatalogentrylocation.Plo"; else rm -f "$(DEPDIR)/libast_la-stccatalogentrylocation.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stccatalogentrylocation.c' object='libast_la-stccatalogentrylocation.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-stccatalogentrylocation.lo `test -f 'stccatalogentrylocation.c' || echo '$(srcdir)/'`stccatalogentrylocation.c
-
-libast_la-stcobsdatalocation.lo: stcobsdatalocation.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-stcobsdatalocation.lo -MD -MP -MF "$(DEPDIR)/libast_la-stcobsdatalocation.Tpo" -c -o libast_la-stcobsdatalocation.lo `test -f 'stcobsdatalocation.c' || echo '$(srcdir)/'`stcobsdatalocation.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-stcobsdatalocation.Tpo" "$(DEPDIR)/libast_la-stcobsdatalocation.Plo"; else rm -f "$(DEPDIR)/libast_la-stcobsdatalocation.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stcobsdatalocation.c' object='libast_la-stcobsdatalocation.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-stcobsdatalocation.lo `test -f 'stcobsdatalocation.c' || echo '$(srcdir)/'`stcobsdatalocation.c
-
-libast_la-stcschan.lo: stcschan.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-stcschan.lo -MD -MP -MF "$(DEPDIR)/libast_la-stcschan.Tpo" -c -o libast_la-stcschan.lo `test -f 'stcschan.c' || echo '$(srcdir)/'`stcschan.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-stcschan.Tpo" "$(DEPDIR)/libast_la-stcschan.Plo"; else rm -f "$(DEPDIR)/libast_la-stcschan.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stcschan.c' object='libast_la-stcschan.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-stcschan.lo `test -f 'stcschan.c' || echo '$(srcdir)/'`stcschan.c
-
-libast_la-fstc.lo: fstc.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fstc.lo -MD -MP -MF "$(DEPDIR)/libast_la-fstc.Tpo" -c -o libast_la-fstc.lo `test -f 'fstc.c' || echo '$(srcdir)/'`fstc.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fstc.Tpo" "$(DEPDIR)/libast_la-fstc.Plo"; else rm -f "$(DEPDIR)/libast_la-fstc.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fstc.c' object='libast_la-fstc.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fstc.lo `test -f 'fstc.c' || echo '$(srcdir)/'`fstc.c
-
-libast_la-fstcresourceprofile.lo: fstcresourceprofile.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fstcresourceprofile.lo -MD -MP -MF "$(DEPDIR)/libast_la-fstcresourceprofile.Tpo" -c -o libast_la-fstcresourceprofile.lo `test -f 'fstcresourceprofile.c' || echo '$(srcdir)/'`fstcresourceprofile.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fstcresourceprofile.Tpo" "$(DEPDIR)/libast_la-fstcresourceprofile.Plo"; else rm -f "$(DEPDIR)/libast_la-fstcresourceprofile.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fstcresourceprofile.c' object='libast_la-fstcresourceprofile.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fstcresourceprofile.lo `test -f 'fstcresourceprofile.c' || echo '$(srcdir)/'`fstcresourceprofile.c
-
-libast_la-fstcsearchlocation.lo: fstcsearchlocation.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fstcsearchlocation.lo -MD -MP -MF "$(DEPDIR)/libast_la-fstcsearchlocation.Tpo" -c -o libast_la-fstcsearchlocation.lo `test -f 'fstcsearchlocation.c' || echo '$(srcdir)/'`fstcsearchlocation.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fstcsearchlocation.Tpo" "$(DEPDIR)/libast_la-fstcsearchlocation.Plo"; else rm -f "$(DEPDIR)/libast_la-fstcsearchlocation.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fstcsearchlocation.c' object='libast_la-fstcsearchlocation.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fstcsearchlocation.lo `test -f 'fstcsearchlocation.c' || echo '$(srcdir)/'`fstcsearchlocation.c
-
-libast_la-fstccatalogentrylocation.lo: fstccatalogentrylocation.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fstccatalogentrylocation.lo -MD -MP -MF "$(DEPDIR)/libast_la-fstccatalogentrylocation.Tpo" -c -o libast_la-fstccatalogentrylocation.lo `test -f 'fstccatalogentrylocation.c' || echo '$(srcdir)/'`fstccatalogentrylocation.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fstccatalogentrylocation.Tpo" "$(DEPDIR)/libast_la-fstccatalogentrylocation.Plo"; else rm -f "$(DEPDIR)/libast_la-fstccatalogentrylocation.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fstccatalogentrylocation.c' object='libast_la-fstccatalogentrylocation.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fstccatalogentrylocation.lo `test -f 'fstccatalogentrylocation.c' || echo '$(srcdir)/'`fstccatalogentrylocation.c
-
-libast_la-fstcobsdatalocation.lo: fstcobsdatalocation.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fstcobsdatalocation.lo -MD -MP -MF "$(DEPDIR)/libast_la-fstcobsdatalocation.Tpo" -c -o libast_la-fstcobsdatalocation.lo `test -f 'fstcobsdatalocation.c' || echo '$(srcdir)/'`fstcobsdatalocation.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fstcobsdatalocation.Tpo" "$(DEPDIR)/libast_la-fstcobsdatalocation.Plo"; else rm -f "$(DEPDIR)/libast_la-fstcobsdatalocation.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fstcobsdatalocation.c' object='libast_la-fstcobsdatalocation.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fstcobsdatalocation.lo `test -f 'fstcobsdatalocation.c' || echo '$(srcdir)/'`fstcobsdatalocation.c
-
-libast_la-fstcschan.lo: fstcschan.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fstcschan.lo -MD -MP -MF "$(DEPDIR)/libast_la-fstcschan.Tpo" -c -o libast_la-fstcschan.lo `test -f 'fstcschan.c' || echo '$(srcdir)/'`fstcschan.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-fstcschan.Tpo" "$(DEPDIR)/libast_la-fstcschan.Plo"; else rm -f "$(DEPDIR)/libast_la-fstcschan.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fstcschan.c' object='libast_la-fstcschan.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fstcschan.lo `test -f 'fstcschan.c' || echo '$(srcdir)/'`fstcschan.c
-
-libast_la-timeframe.lo: timeframe.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-timeframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-timeframe.Tpo" -c -o libast_la-timeframe.lo `test -f 'timeframe.c' || echo '$(srcdir)/'`timeframe.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-timeframe.Tpo" "$(DEPDIR)/libast_la-timeframe.Plo"; else rm -f "$(DEPDIR)/libast_la-timeframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='timeframe.c' object='libast_la-timeframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-timeframe.lo `test -f 'timeframe.c' || echo '$(srcdir)/'`timeframe.c
-
-libast_la-timemap.lo: timemap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-timemap.lo -MD -MP -MF "$(DEPDIR)/libast_la-timemap.Tpo" -c -o libast_la-timemap.lo `test -f 'timemap.c' || echo '$(srcdir)/'`timemap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-timemap.Tpo" "$(DEPDIR)/libast_la-timemap.Plo"; else rm -f "$(DEPDIR)/libast_la-timemap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='timemap.c' object='libast_la-timemap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-timemap.lo `test -f 'timemap.c' || echo '$(srcdir)/'`timemap.c
-
-libast_la-tranmap.lo: tranmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-tranmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-tranmap.Tpo" -c -o libast_la-tranmap.lo `test -f 'tranmap.c' || echo '$(srcdir)/'`tranmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-tranmap.Tpo" "$(DEPDIR)/libast_la-tranmap.Plo"; else rm -f "$(DEPDIR)/libast_la-tranmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tranmap.c' object='libast_la-tranmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-tranmap.lo `test -f 'tranmap.c' || echo '$(srcdir)/'`tranmap.c
-
-libast_la-selectormap.lo: selectormap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-selectormap.lo -MD -MP -MF "$(DEPDIR)/libast_la-selectormap.Tpo" -c -o libast_la-selectormap.lo `test -f 'selectormap.c' || echo '$(srcdir)/'`selectormap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-selectormap.Tpo" "$(DEPDIR)/libast_la-selectormap.Plo"; else rm -f "$(DEPDIR)/libast_la-selectormap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='selectormap.c' object='libast_la-selectormap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-selectormap.lo `test -f 'selectormap.c' || echo '$(srcdir)/'`selectormap.c
-
-libast_la-switchmap.lo: switchmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-switchmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-switchmap.Tpo" -c -o libast_la-switchmap.lo `test -f 'switchmap.c' || echo '$(srcdir)/'`switchmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-switchmap.Tpo" "$(DEPDIR)/libast_la-switchmap.Plo"; else rm -f "$(DEPDIR)/libast_la-switchmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='switchmap.c' object='libast_la-switchmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-switchmap.lo `test -f 'switchmap.c' || echo '$(srcdir)/'`switchmap.c
-
-libast_la-unit.lo: unit.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-unit.lo -MD -MP -MF "$(DEPDIR)/libast_la-unit.Tpo" -c -o libast_la-unit.lo `test -f 'unit.c' || echo '$(srcdir)/'`unit.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-unit.Tpo" "$(DEPDIR)/libast_la-unit.Plo"; else rm -f "$(DEPDIR)/libast_la-unit.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='unit.c' object='libast_la-unit.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-unit.lo `test -f 'unit.c' || echo '$(srcdir)/'`unit.c
-
-libast_la-unitmap.lo: unitmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-unitmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-unitmap.Tpo" -c -o libast_la-unitmap.lo `test -f 'unitmap.c' || echo '$(srcdir)/'`unitmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-unitmap.Tpo" "$(DEPDIR)/libast_la-unitmap.Plo"; else rm -f "$(DEPDIR)/libast_la-unitmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='unitmap.c' object='libast_la-unitmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-unitmap.lo `test -f 'unitmap.c' || echo '$(srcdir)/'`unitmap.c
-
-libast_la-wcsmap.lo: wcsmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-wcsmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-wcsmap.Tpo" -c -o libast_la-wcsmap.lo `test -f 'wcsmap.c' || echo '$(srcdir)/'`wcsmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-wcsmap.Tpo" "$(DEPDIR)/libast_la-wcsmap.Plo"; else rm -f "$(DEPDIR)/libast_la-wcsmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='wcsmap.c' object='libast_la-wcsmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-wcsmap.lo `test -f 'wcsmap.c' || echo '$(srcdir)/'`wcsmap.c
-
-libast_la-winmap.lo: winmap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-winmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-winmap.Tpo" -c -o libast_la-winmap.lo `test -f 'winmap.c' || echo '$(srcdir)/'`winmap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-winmap.Tpo" "$(DEPDIR)/libast_la-winmap.Plo"; else rm -f "$(DEPDIR)/libast_la-winmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='winmap.c' object='libast_la-winmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-winmap.lo `test -f 'winmap.c' || echo '$(srcdir)/'`winmap.c
-
-libast_la-xml.lo: xml.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-xml.lo -MD -MP -MF "$(DEPDIR)/libast_la-xml.Tpo" -c -o libast_la-xml.lo `test -f 'xml.c' || echo '$(srcdir)/'`xml.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-xml.Tpo" "$(DEPDIR)/libast_la-xml.Plo"; else rm -f "$(DEPDIR)/libast_la-xml.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xml.c' object='libast_la-xml.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-xml.lo `test -f 'xml.c' || echo '$(srcdir)/'`xml.c
-
-libast_la-xmlchan.lo: xmlchan.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-xmlchan.lo -MD -MP -MF "$(DEPDIR)/libast_la-xmlchan.Tpo" -c -o libast_la-xmlchan.lo `test -f 'xmlchan.c' || echo '$(srcdir)/'`xmlchan.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-xmlchan.Tpo" "$(DEPDIR)/libast_la-xmlchan.Plo"; else rm -f "$(DEPDIR)/libast_la-xmlchan.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xmlchan.c' object='libast_la-xmlchan.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-xmlchan.lo `test -f 'xmlchan.c' || echo '$(srcdir)/'`xmlchan.c
-
-libast_la-zoommap.lo: zoommap.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-zoommap.lo -MD -MP -MF "$(DEPDIR)/libast_la-zoommap.Tpo" -c -o libast_la-zoommap.lo `test -f 'zoommap.c' || echo '$(srcdir)/'`zoommap.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_la-zoommap.Tpo" "$(DEPDIR)/libast_la-zoommap.Plo"; else rm -f "$(DEPDIR)/libast_la-zoommap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='zoommap.c' object='libast_la-zoommap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-zoommap.lo `test -f 'zoommap.c' || echo '$(srcdir)/'`zoommap.c
-
-libast_drama_la-err_drama.lo: err_drama.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_drama_la_CFLAGS) $(CFLAGS) -MT libast_drama_la-err_drama.lo -MD -MP -MF "$(DEPDIR)/libast_drama_la-err_drama.Tpo" -c -o libast_drama_la-err_drama.lo `test -f 'err_drama.c' || echo '$(srcdir)/'`err_drama.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_drama_la-err_drama.Tpo" "$(DEPDIR)/libast_drama_la-err_drama.Plo"; else rm -f "$(DEPDIR)/libast_drama_la-err_drama.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='err_drama.c' object='libast_drama_la-err_drama.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_drama_la_CFLAGS) $(CFLAGS) -c -o libast_drama_la-err_drama.lo `test -f 'err_drama.c' || echo '$(srcdir)/'`err_drama.c
-
-libast_ems_la-err_ems.lo: err_ems.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_ems_la_CFLAGS) $(CFLAGS) -MT libast_ems_la-err_ems.lo -MD -MP -MF "$(DEPDIR)/libast_ems_la-err_ems.Tpo" -c -o libast_ems_la-err_ems.lo `test -f 'err_ems.c' || echo '$(srcdir)/'`err_ems.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_ems_la-err_ems.Tpo" "$(DEPDIR)/libast_ems_la-err_ems.Plo"; else rm -f "$(DEPDIR)/libast_ems_la-err_ems.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='err_ems.c' object='libast_ems_la-err_ems.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_ems_la_CFLAGS) $(CFLAGS) -c -o libast_ems_la-err_ems.lo `test -f 'err_ems.c' || echo '$(srcdir)/'`err_ems.c
-
-libast_err_la-err_null.lo: err_null.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_err_la_CFLAGS) $(CFLAGS) -MT libast_err_la-err_null.lo -MD -MP -MF "$(DEPDIR)/libast_err_la-err_null.Tpo" -c -o libast_err_la-err_null.lo `test -f 'err_null.c' || echo '$(srcdir)/'`err_null.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_err_la-err_null.Tpo" "$(DEPDIR)/libast_err_la-err_null.Plo"; else rm -f "$(DEPDIR)/libast_err_la-err_null.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='err_null.c' object='libast_err_la-err_null.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_err_la_CFLAGS) $(CFLAGS) -c -o libast_err_la-err_null.lo `test -f 'err_null.c' || echo '$(srcdir)/'`err_null.c
-
-libast_grf3d_la-grf3d.lo: grf3d.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_grf3d_la_CFLAGS) $(CFLAGS) -MT libast_grf3d_la-grf3d.lo -MD -MP -MF "$(DEPDIR)/libast_grf3d_la-grf3d.Tpo" -c -o libast_grf3d_la-grf3d.lo `test -f 'grf3d.c' || echo '$(srcdir)/'`grf3d.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_grf3d_la-grf3d.Tpo" "$(DEPDIR)/libast_grf3d_la-grf3d.Plo"; else rm -f "$(DEPDIR)/libast_grf3d_la-grf3d.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='grf3d.c' object='libast_grf3d_la-grf3d.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_grf3d_la_CFLAGS) $(CFLAGS) -c -o libast_grf3d_la-grf3d.lo `test -f 'grf3d.c' || echo '$(srcdir)/'`grf3d.c
-
-libast_pal_la-pal.lo: pal.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_pal_la_CFLAGS) $(CFLAGS) -MT libast_pal_la-pal.lo -MD -MP -MF "$(DEPDIR)/libast_pal_la-pal.Tpo" -c -o libast_pal_la-pal.lo `test -f 'pal.c' || echo '$(srcdir)/'`pal.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_pal_la-pal.Tpo" "$(DEPDIR)/libast_pal_la-pal.Plo"; else rm -f "$(DEPDIR)/libast_pal_la-pal.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pal.c' object='libast_pal_la-pal.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_pal_la_CFLAGS) $(CFLAGS) -c -o libast_pal_la-pal.lo `test -f 'pal.c' || echo '$(srcdir)/'`pal.c
-
-libast_pgplot_la-grf_pgplot.lo: grf_pgplot.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_pgplot_la_CFLAGS) $(CFLAGS) -MT libast_pgplot_la-grf_pgplot.lo -MD -MP -MF "$(DEPDIR)/libast_pgplot_la-grf_pgplot.Tpo" -c -o libast_pgplot_la-grf_pgplot.lo `test -f 'grf_pgplot.c' || echo '$(srcdir)/'`grf_pgplot.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_pgplot_la-grf_pgplot.Tpo" "$(DEPDIR)/libast_pgplot_la-grf_pgplot.Plo"; else rm -f "$(DEPDIR)/libast_pgplot_la-grf_pgplot.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='grf_pgplot.c' object='libast_pgplot_la-grf_pgplot.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_pgplot_la_CFLAGS) $(CFLAGS) -c -o libast_pgplot_la-grf_pgplot.lo `test -f 'grf_pgplot.c' || echo '$(srcdir)/'`grf_pgplot.c
-
-libast_pgplot3d_la-grf3d_pgplot.lo: grf3d_pgplot.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_pgplot3d_la_CFLAGS) $(CFLAGS) -MT libast_pgplot3d_la-grf3d_pgplot.lo -MD -MP -MF "$(DEPDIR)/libast_pgplot3d_la-grf3d_pgplot.Tpo" -c -o libast_pgplot3d_la-grf3d_pgplot.lo `test -f 'grf3d_pgplot.c' || echo '$(srcdir)/'`grf3d_pgplot.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_pgplot3d_la-grf3d_pgplot.Tpo" "$(DEPDIR)/libast_pgplot3d_la-grf3d_pgplot.Plo"; else rm -f "$(DEPDIR)/libast_pgplot3d_la-grf3d_pgplot.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='grf3d_pgplot.c' object='libast_pgplot3d_la-grf3d_pgplot.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_pgplot3d_la_CFLAGS) $(CFLAGS) -c -o libast_pgplot3d_la-grf3d_pgplot.lo `test -f 'grf3d_pgplot.c' || echo '$(srcdir)/'`grf3d_pgplot.c
-
-libast_wcslib_la-proj.lo: proj.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_wcslib_la_CFLAGS) $(CFLAGS) -MT libast_wcslib_la-proj.lo -MD -MP -MF "$(DEPDIR)/libast_wcslib_la-proj.Tpo" -c -o libast_wcslib_la-proj.lo `test -f 'proj.c' || echo '$(srcdir)/'`proj.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_wcslib_la-proj.Tpo" "$(DEPDIR)/libast_wcslib_la-proj.Plo"; else rm -f "$(DEPDIR)/libast_wcslib_la-proj.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='proj.c' object='libast_wcslib_la-proj.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_wcslib_la_CFLAGS) $(CFLAGS) -c -o libast_wcslib_la-proj.lo `test -f 'proj.c' || echo '$(srcdir)/'`proj.c
-
-libast_wcslib_la-wcstrig.lo: wcstrig.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_wcslib_la_CFLAGS) $(CFLAGS) -MT libast_wcslib_la-wcstrig.lo -MD -MP -MF "$(DEPDIR)/libast_wcslib_la-wcstrig.Tpo" -c -o libast_wcslib_la-wcstrig.lo `test -f 'wcstrig.c' || echo '$(srcdir)/'`wcstrig.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_wcslib_la-wcstrig.Tpo" "$(DEPDIR)/libast_wcslib_la-wcstrig.Plo"; else rm -f "$(DEPDIR)/libast_wcslib_la-wcstrig.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='wcstrig.c' object='libast_wcslib_la-wcstrig.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_wcslib_la_CFLAGS) $(CFLAGS) -c -o libast_wcslib_la-wcstrig.lo `test -f 'wcstrig.c' || echo '$(srcdir)/'`wcstrig.c
-
-libast_wcslib_la-tpn.lo: tpn.c
- at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_wcslib_la_CFLAGS) $(CFLAGS) -MT libast_wcslib_la-tpn.lo -MD -MP -MF "$(DEPDIR)/libast_wcslib_la-tpn.Tpo" -c -o libast_wcslib_la-tpn.lo `test -f 'tpn.c' || echo '$(srcdir)/'`tpn.c; \
- at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libast_wcslib_la-tpn.Tpo" "$(DEPDIR)/libast_wcslib_la-tpn.Plo"; else rm -f "$(DEPDIR)/libast_wcslib_la-tpn.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tpn.c' object='libast_wcslib_la-tpn.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_wcslib_la_CFLAGS) $(CFLAGS) -c -o libast_wcslib_la-tpn.lo `test -f 'tpn.c' || echo '$(srcdir)/'`tpn.c
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-
-distclean-libtool:
- -rm -f libtool
-uninstall-info-am:
-install-includeMESSAGES: $(include_MESSAGES)
- @$(NORMAL_INSTALL)
- test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)"
- @list='$(include_MESSAGES)'; for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- f=$(am__strip_dir) \
- echo " $(includeMESSAGES_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \
- $(includeMESSAGES_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \
- $(MANIFEST) && echo "MANIFEST:$(DESTDIR)$(includedir)/$$f" || :; \
- done
-
-uninstall-includeMESSAGES:
- @$(NORMAL_UNINSTALL)
- @list='$(include_MESSAGES)'; for p in $$list; do \
- f=$(am__strip_dir) \
- echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \
- rm -f "$(DESTDIR)$(includedir)/$$f"; \
- done
-
-# Compile messages for message file ast_err.msg. This requires that the
-# @MESSGEN@ substitution was requested in configure.ac, probably implicitly
-# by the STAR_MESSGEN macro.
-#
-# These rules are usable only in the predist state (since the .msg files
-# are typically not distributed), so should be activated only when in that
-# state.
- at PREDIST@AST_ERR: ast_err.msg
- at PREDIST@ $(MESSGEN) -F ast_err.msg
- at PREDIST@ast_err.h: ast_err.msg
- at PREDIST@ $(MESSGEN) -c ast_err.msg
- at PREDIST@fac_1521_err: ast_err.msg
- at PREDIST@ $(MESSGEN) -e ast_err.msg
-install-dist_pkgdataDATA: $(dist_pkgdata_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(pkgdatadir)" || $(mkdir_p) "$(DESTDIR)$(pkgdatadir)"
- @list='$(dist_pkgdata_DATA)'; for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- f=$(am__strip_dir) \
- echo " $(dist_pkgdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgdatadir)/$$f'"; \
- $(dist_pkgdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgdatadir)/$$f"; \
- $(MANIFEST) && echo "MANIFEST:$(DESTDIR)$(pkgdatadir)/$$f" || :; \
- done
-
-uninstall-dist_pkgdataDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(dist_pkgdata_DATA)'; for p in $$list; do \
- f=$(am__strip_dir) \
- echo " rm -f '$(DESTDIR)$(pkgdatadir)/$$f'"; \
- rm -f "$(DESTDIR)$(pkgdatadir)/$$f"; \
- done
-install-dist_starnewsDATA: $(dist_starnews_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(starnewsdir)" || $(mkdir_p) "$(DESTDIR)$(starnewsdir)"
- @list='$(dist_starnews_DATA)'; for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- f=$(am__strip_dir) \
- echo " $(dist_starnewsDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(starnewsdir)/$$f'"; \
- $(dist_starnewsDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(starnewsdir)/$$f"; \
- $(MANIFEST) && echo "MANIFEST:$(DESTDIR)$(starnewsdir)/$$f" || :; \
- done
-
-uninstall-dist_starnewsDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(dist_starnews_DATA)'; for p in $$list; do \
- f=$(am__strip_dir) \
- echo " rm -f '$(DESTDIR)$(starnewsdir)/$$f'"; \
- rm -f "$(DESTDIR)$(starnewsdir)/$$f"; \
- done
-install-stardocsDATA: $(stardocs_DATA)
- @$(NORMAL_INSTALL)
- $(mkdir_p) $(DESTDIR)$(stardocsdir)
- @list='$(stardocs_DATA)'; for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- f="`echo $$p | sed -e 's|^.*/||'`"; \
- if expr "x$$p" : 'x.*\.htx_tar$$' >/dev/null; then \
- if test -n "$(PAX)"; then \
- if $(MANIFEST); then \
- $(PAX) -f $$d$$p | \
- sed 's+^+MANIFEST:$(DESTDIR)$(stardocsdir)/+'; \
- fi; \
- cat $$d$$p | (cd $(DESTDIR)$(stardocsdir); $(PAX) -r); \
- elif test -n "$(TAR)"; then \
- if $(MANIFEST); then \
- cat $$d$$p | (cd $(DESTDIR)$(stardocsdir); $(TAR) xBpvf -) | sed 's+^+MANIFEST:$(DESTDIR)$(stardocsdir)/+'; \
- else \
- cat $$d$$p | (cd $(DESTDIR)$(stardocsdir); $(TAR) xBpf -); \
- fi; \
- else \
- echo "Neither tar nor pax!!!" >&2; \
- exit 1; \
- fi; \
- else \
- echo " $(stardocsDATA_INSTALL) $$d$$p $(DESTDIR)$(stardocsdir)/$$f"; \
- $(stardocsDATA_INSTALL) $$d$$p $(DESTDIR)$(stardocsdir)/$$f; \
- $(MANIFEST) && echo "MANIFEST:$(DESTDIR)$(stardocsdir)/$$f" || :; \
- fi; \
- done
-
-uninstall-stardocsDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(stardocs_DATA)'; for p in $$list; do \
- f="`echo $$p | sed -e 's|^.*/||'`"; \
- echo " rm -f $(DESTDIR)$(stardocsdir)/$$f"; \
- rm -f $(DESTDIR)$(stardocsdir)/$$f; \
- done
-install-starfacsDATA: $(starfacs_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(starfacsdir)" || $(mkdir_p) "$(DESTDIR)$(starfacsdir)"
- @list='$(starfacs_DATA)'; for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- f=$(am__strip_dir) \
- echo " $(starfacsDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(starfacsdir)/$$f'"; \
- $(starfacsDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(starfacsdir)/$$f"; \
- $(MANIFEST) && echo "MANIFEST:$(DESTDIR)$(starfacsdir)/$$f" || :; \
- done
-
-uninstall-starfacsDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(starfacs_DATA)'; for p in $$list; do \
- f=$(am__strip_dir) \
- echo " rm -f '$(DESTDIR)$(starfacsdir)/$$f'"; \
- rm -f "$(DESTDIR)$(starfacsdir)/$$f"; \
- done
-install-includeHEADERS: $(include_HEADERS)
- @$(NORMAL_INSTALL)
- test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)"
- @list='$(include_HEADERS)'; for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- f=$(am__strip_dir) \
- echo " $(includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \
- $(includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \
- $(MANIFEST) && echo "MANIFEST:$(DESTDIR)$(includedir)/$$f" || :; \
- done
-
-uninstall-includeHEADERS:
- @$(NORMAL_UNINSTALL)
- @list='$(include_HEADERS)'; for p in $$list; do \
- f=$(am__strip_dir) \
- echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \
- rm -f "$(DESTDIR)$(includedir)/$$f"; \
- done
-install-nodist_includeHEADERS: $(nodist_include_HEADERS)
- @$(NORMAL_INSTALL)
- test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)"
- @list='$(nodist_include_HEADERS)'; for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- f=$(am__strip_dir) \
- echo " $(nodist_includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \
- $(nodist_includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \
- $(MANIFEST) && echo "MANIFEST:$(DESTDIR)$(includedir)/$$f" || :; \
- done
-
-uninstall-nodist_includeHEADERS:
- @$(NORMAL_UNINSTALL)
- @list='$(nodist_include_HEADERS)'; for p in $$list; do \
- f=$(am__strip_dir) \
- echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \
- rm -f "$(DESTDIR)$(includedir)/$$f"; \
- done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$tags $$unique; \
- fi
-ctags: CTAGS
-CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- test -z "$(CTAGS_ARGS)$$tags$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$tags $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && cd $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-check-TESTS: $(TESTS)
- @failed=0; all=0; xfail=0; xpass=0; skip=0; \
- srcdir=$(srcdir); export srcdir; \
- list='$(TESTS)'; \
- if test -n "$$list"; then \
- for tst in $$list; do \
- if test -f ./$$tst; then dir=./; \
- elif test -f $$tst; then dir=; \
- else dir="$(srcdir)/"; fi; \
- if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
- all=`expr $$all + 1`; \
- case " $(XFAIL_TESTS) " in \
- *" $$tst "*) \
- xpass=`expr $$xpass + 1`; \
- failed=`expr $$failed + 1`; \
- echo "XPASS: $$tst"; \
- ;; \
- *) \
- echo "PASS: $$tst"; \
- ;; \
- esac; \
- elif test $$? -ne 77; then \
- all=`expr $$all + 1`; \
- case " $(XFAIL_TESTS) " in \
- *" $$tst "*) \
- xfail=`expr $$xfail + 1`; \
- echo "XFAIL: $$tst"; \
- ;; \
- *) \
- failed=`expr $$failed + 1`; \
- echo "FAIL: $$tst"; \
- ;; \
- esac; \
- else \
- skip=`expr $$skip + 1`; \
- echo "SKIP: $$tst"; \
- fi; \
- done; \
- if test "$$failed" -eq 0; then \
- if test "$$xfail" -eq 0; then \
- banner="All $$all tests passed"; \
- else \
- banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
- fi; \
- else \
- if test "$$xpass" -eq 0; then \
- banner="$$failed of $$all tests failed"; \
- else \
- banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
- fi; \
- fi; \
- dashes="$$banner"; \
- skipped=""; \
- if test "$$skip" -ne 0; then \
- skipped="($$skip tests were not run)"; \
- test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
- dashes="$$skipped"; \
- fi; \
- report=""; \
- if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
- report="Please report to $(PACKAGE_BUGREPORT)"; \
- test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
- dashes="$$report"; \
- fi; \
- dashes=`echo "$$dashes" | sed s/./=/g`; \
- echo "$$dashes"; \
- echo "$$banner"; \
- test -z "$$skipped" || echo "$$skipped"; \
- test -z "$$report" || echo "$$report"; \
- echo "$$dashes"; \
- test "$$failed" -eq 0; \
- else :; fi
-
-# Don't express a dependency via the directory .htx, or else make
-# tries to delete it as an intermediate (we can't specify
-# .PRECIOUS targets within this file).
-#
-# Requires that the STAR2HTML substitution was made in
-# configure.ac, probably implicitly by the STAR_LATEX_DOCUMENTATION macro.
-#
-# We do not require that star2html be available on the build system,
-# and so we distribute built HTX documentation. Thus the following rules
-# should be invoked only in the predist state. However there isn't a
-# file we can use to test whether we're in that state, so write the
-# test so that it will fail if star2html isn't available.
-#
-# If file $(<:.tex=.htx_tar.extras) is present, then it contains a list
-# of files, each one of which should be added to the .htx directory before
-# it is rolled up into a tarball.
-#
-# Ignore the exit status of star2html, as it can sometimes fail harmlessly.
-.tex.dvi:
- LATEX=latex; latex2dvi () { $(LATEX2DVI); }; \
- latex2dvi ${<:.tex=}
-.dvi.ps:
- dvips -o $@ $<
-.tex.ps:
- LATEX=latex; latex2dvi () { $(LATEX2DVI); }; \
- latex2dvi ${<:.tex=}
- dvips -o $@ $(<:.tex=.dvi)
-.tex.pdf:
- LATEX=pdflatex; latex2dvi () { $(LATEX2DVI); }; \
- latex2dvi ${<:.tex=}
-.tex.htx_tar:
- - @STAR2HTML@ $(STAR2HTML_FLAGS) $<
- test -d ${<:.tex=.htx}
- if test -f ${<:.tex=.htx_tar.extras}; then \
- for f in `cat ${<:.tex=.htx_tar.extras}`; do \
- test -f "$$f" && cp "$$f" ${<:.tex=.htx} || true; \
- done; else :; fi
- tar cf $@ ${<:.tex=.htx}
-
-distdir: $(DISTFILES)
- $(am__remove_distdir)
- mkdir $(distdir)
- $(mkdir_p) $(distdir)/.
- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
- list='$(DISTFILES)'; for file in $$list; do \
- case $$file in \
- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
- esac; \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test "$$dir" != "$$file" && test "$$dir" != "."; then \
- dir="/$$dir"; \
- $(mkdir_p) "$(distdir)$$dir"; \
- else \
- dir=''; \
- fi; \
- if test -d $$d/$$file; then \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
- fi; \
- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
- else \
- test -f $(distdir)/$$file \
- || cp -p $$d/$$file $(distdir)/$$file \
- || exit 1; \
- fi; \
- done
- -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
- ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
- ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
- ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
- || chmod -R a+r $(distdir)
-dist-gzip: distdir
- tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
- $(am__remove_distdir)
-
-dist-bzip2: distdir
- tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
- $(am__remove_distdir)
-
-dist-tarZ: distdir
- tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
- $(am__remove_distdir)
-
-dist-shar: distdir
- shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
- $(am__remove_distdir)
-
-dist-zip: distdir
- -rm -f $(distdir).zip
- zip -rq $(distdir).zip $(distdir)
- $(am__remove_distdir)
-
-dist dist-all: distdir
- tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
- $(am__remove_distdir)
-
-# This target untars the dist file and tries a VPATH configuration. Then
-# it guarantees that the distribution is self-contained by making another
-# tarfile.
-distcheck: dist
- case '$(DIST_ARCHIVES)' in \
- *.tar.gz*) \
- GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
- *.tar.bz2*) \
- bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
- *.tar.Z*) \
- uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
- *.shar.gz*) \
- GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
- *.zip*) \
- unzip $(distdir).zip ;;\
- esac
- chmod -R a-w $(distdir); chmod a+w $(distdir)
- mkdir $(distdir)/_build
- mkdir $(distdir)/_inst
- chmod a-w $(distdir)
- dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
- && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
- && cd $(distdir)/_build \
- && ../configure --srcdir=.. --prefix="$$dc_install_base" \
- $(DISTCHECK_CONFIGURE_FLAGS) \
- && $(MAKE) $(AM_MAKEFLAGS) \
- && $(MAKE) $(AM_MAKEFLAGS) dvi \
- && $(MAKE) $(AM_MAKEFLAGS) check \
- && $(MAKE) $(AM_MAKEFLAGS) install \
- && $(MAKE) $(AM_MAKEFLAGS) installcheck \
- && $(MAKE) $(AM_MAKEFLAGS) uninstall \
- && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
- distuninstallcheck \
- && chmod -R a-w "$$dc_install_base" \
- && ({ \
- (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
- && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
- && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
- && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
- distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
- } || { rm -rf "$$dc_destdir"; exit 1; }) \
- && rm -rf "$$dc_destdir" \
- && $(MAKE) $(AM_MAKEFLAGS) dist \
- && rm -rf $(DIST_ARCHIVES) \
- && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
- $(am__remove_distdir)
- @(echo "$(distdir) archives ready for distribution: "; \
- list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
- sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
-distuninstallcheck:
- @cd $(distuninstallcheck_dir) \
- && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
- || { echo "ERROR: files left after uninstall:" ; \
- if test -n "$(DESTDIR)"; then \
- echo " (check DESTDIR support)"; \
- fi ; \
- $(distuninstallcheck_listfiles) ; \
- exit 1; } >&2
-distcleancheck: distclean
- @if test '$(srcdir)' = . ; then \
- echo "ERROR: distcleancheck can only run from a VPATH build" ; \
- exit 1 ; \
- fi
- @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
- || { echo "ERROR: files left in build directory after distclean:" ; \
- $(distcleancheck_listfiles) ; \
- exit 1; } >&2
-check-am: all-am
- $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
- $(MAKE) $(AM_MAKEFLAGS) check-TESTS
-check: $(BUILT_SOURCES)
- $(MAKE) $(AM_MAKEFLAGS) check-am
-all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) $(MESSAGES) \
- $(DATA) $(HEADERS) config.h
-installdirs:
- for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(starnewsdir)" $(DESTDIR)$(stardocsdir) "$(DESTDIR)$(starfacsdir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(includedir)"; do \
- test -z "$$dir" || $(mkdir_p) "$$dir"; \
- done
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-# If STAR_MANIFEST_DIR is defined and the MANIFEST variable has the
-# (default) string value 'false', then invoke the install-manifest
-# target, otherwise, do the real install rule. This means that if
-# this is being invoked from within an install-manifest rule further
-# up the process tree, we don't create another manifest, which would
-# stomp on the original.
-#
-# Any Makefile which does special installations should check the
-# $(MANIFEST) variable, which will be ':' or 'false', and if it is
-# true, emit a line to stdout, consisting of the string 'MANIFEST:'
-# followed by the full path of the file being installed.
-install: $(BUILT_SOURCES)
- $(MAKE) $(AM_MAKEFLAGS) all-am
- if test -n "$(STAR_MANIFEST_DIR)" -a $(MANIFEST) = false; then \
- $(MAKE) $(AM_MAKEFLAGS) install-manifest; \
- else \
- $(MAKE) $(AM_MAKEFLAGS) $(REAL_INSTALL); \
- fi
-
-install-manifest:
- $(mkdir_p) $(DESTDIR)$(STAR_MANIFEST_DIR)
- MFX=$${TMPDIR-/tmp}/manifest-$$$$-1; rm -f $$MFX; MF_INST_OK=:; \
- { $(MAKE) MANIFEST=: $(REAL_INSTALL) \
- || MF_INST_OK=false; } \
- | tee $$MFX | grep -v '^MANIFEST:' || :; \
- if $$MF_INST_OK; then \
- MF=$${TMPDIR-/tmp}/manifest-$$$$-2; rm -f $$MF; \
- ( echo "<?xml version='1.0'?>"; \
- echo "<!DOCTYPE manifest SYSTEM 'componentinfo.dtd'>"; \
- echo "<manifest component='$(PACKAGE)'>"; \
- echo "<version>$(PACKAGE_VERSION)</version>"; \
- echo "<files>"; \
- sed -n 's/^MANIFEST://p;' $$MFX; \
- echo "</files>"; \
- echo "</manifest>"; \
- ) >$$MF; \
- $(INSTALL_DATA) $$MF $(DESTDIR)$(STAR_MANIFEST_DIR)/$(PACKAGE); \
- else \
- echo "Installation of component $(DESTDIR)$(STAR_MANIFEST_DIR)/$(PACKAGE) failed" >&2; \
- fi; \
- rm -f $$MFX $$MF; \
- $$MF_INST_OK
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
- -rm -f AST_ERR
- -rm -f ast_err.h
- -rm -f configure.log
- -rm -f fac_1521_err
- -rm -f make.log
- -rm -f starconf.status
- -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
- -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \
- clean-libtool clean-noinstPROGRAMS mostlyclean-am
-
-distclean: distclean-am
- -rm -f $(am__CONFIG_DISTCLEAN_FILES)
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-hdr distclean-libtool distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am: install-dist_pkgdataDATA install-dist_starnewsDATA \
- install-includeHEADERS install-includeMESSAGES \
- install-nodist_includeHEADERS install-stardocsDATA \
- install-starfacsDATA
-
-install-exec-am: install-binSCRIPTS install-dist_binSCRIPTS \
- install-libLTLIBRARIES
- @$(NORMAL_INSTALL)
- $(MAKE) $(AM_MAKEFLAGS) install-exec-hook
-
-install-info: install-info-am
-
-install-man:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -f $(am__CONFIG_DISTCLEAN_FILES)
- -rm -rf $(top_srcdir)/autom4te.cache
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
- mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-binSCRIPTS uninstall-dist_binSCRIPTS \
- uninstall-dist_pkgdataDATA uninstall-dist_starnewsDATA \
- uninstall-includeHEADERS uninstall-includeMESSAGES \
- uninstall-info-am uninstall-libLTLIBRARIES \
- uninstall-nodist_includeHEADERS uninstall-stardocsDATA \
- uninstall-starfacsDATA
-
-.PHONY: CTAGS GTAGS all all-am am--refresh check check-TESTS check-am \
- clean clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \
- clean-libtool clean-noinstPROGRAMS ctags dist dist-all \
- dist-bzip2 dist-gzip dist-shar dist-tarZ dist-zip distcheck \
- distclean distclean-compile distclean-generic distclean-hdr \
- distclean-libtool distclean-tags distcleancheck distdir \
- distuninstallcheck dvi dvi-am html html-am info info-am \
- install install-am install-binSCRIPTS install-data \
- install-data-am install-dist_binSCRIPTS \
- install-dist_pkgdataDATA install-dist_starnewsDATA \
- install-exec install-exec-am install-exec-hook \
- install-includeHEADERS install-includeMESSAGES install-info \
- install-info-am install-libLTLIBRARIES install-man \
- install-manifest install-nodist_includeHEADERS \
- install-stardocsDATA install-starfacsDATA install-strip \
- installcheck installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- tags uninstall uninstall-am uninstall-binSCRIPTS \
- uninstall-dist_binSCRIPTS uninstall-dist_pkgdataDATA \
- uninstall-dist_starnewsDATA uninstall-includeHEADERS \
- uninstall-includeMESSAGES uninstall-info-am \
- uninstall-libLTLIBRARIES uninstall-nodist_includeHEADERS \
- uninstall-stardocsDATA uninstall-starfacsDATA
-
-AST_PAR: ast_par.source astbad
- sed -e 's/<AST__BAD>/'`./astbad | tr 'E' 'D'`'/' ast_par.source >$@
-
-# ast.h depends on the error-facility files. ast.h _could_ be made
-# before distribution, but since it's generated from other distributed
-# files, it's more robust to distribute makeh and make ast.h on the
-# build host.
-ast.h: $(AST_H_FILES) ast_err.h makeh config.h
- @PERL@ ./makeh -s $(srcdir) $(AST_H_FILES) >$@
-
-# Form second links to the main object library (static and shared). This is
-# used when a second pass through the library is needed during linking.
-# Do not forget to change the contents of the libast_pass2.la file to refer
-# to the pass2 libraries rather than the original libraries. Use target
-# install-exec-hook rather than install-exec-local so that the soft links
-# and files are created *after* the main library has been installed.
-install-exec-hook: libast.la
- $(mkdir_p) $(DESTDIR)$(libdir)
- cd $(DESTDIR)$(libdir); \
- for f in `ls libast.*`; do \
- ff=`echo $$f | sed -e 's/libast/libast_pass2/'`; \
- if test -f "$$ff"; then rm "$$ff"; fi; \
- $(LN_S) $$f $$ff; \
- $(MANIFEST) && echo "MANIFEST:$(DESTDIR)$(libdir)/$$ff" || :; \
- done; \
- if test -f "libast.la"; then \
- if test -f "libast_pass2.la"; then rm "libast_pass2.la"; fi; \
- sed -e 's/libast/libast_pass2/g' libast.la > libast_pass2.la; \
- fi
- at PREDIST@version.h: version.h.in configure.ac
- at PREDIST@ rm -f $@; $(predist_subs) version.h.in >$@
- at PREDIST@builddocs: builddocs.in configure.ac
- at PREDIST@ rm -f $@; $(predist_subs) builddocs.in >$@; chmod +x $@
- at PREDIST@addversion: addversion.in configure.ac
- at PREDIST@ rm -f $@; $(predist_subs) addversion.in >$@; chmod +x $@
-
-# Documentation
- at PREDIST@$(PAPER_DOCUMENTATION): sun211_figures builddocs addversion
- at PREDIST@ ./builddocs
-
-# The contents of the sun211_figures directory is identical to that
-# sun210_figures
-sun211_figures: sun210_figures
- $(LN_S) sun210_figures sun211_figures
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/ast-5.3-1/acinclude.m4 b/ast-5.3-1/acinclude.m4
deleted file mode 100644
index 96fb878..0000000
--- a/ast-5.3-1/acinclude.m4
+++ /dev/null
@@ -1 +0,0 @@
-m4_define([OVERRIDE_PREFIX],[/usr/local])
diff --git a/ast-5.3-1/aclocal.m4 b/ast-5.3-1/aclocal.m4
deleted file mode 100644
index f28a927..0000000
--- a/ast-5.3-1/aclocal.m4
+++ /dev/null
@@ -1,8890 +0,0 @@
-# generated automatically by aclocal 1.9.6-starlink -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005 Free Software Foundation, Inc.
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
-
-# serial 47 AC_PROG_LIBTOOL
-
-
-# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
-# -----------------------------------------------------------
-# If this macro is not defined by Autoconf, define it here.
-m4_ifdef([AC_PROVIDE_IFELSE],
- [],
- [m4_define([AC_PROVIDE_IFELSE],
- [m4_ifdef([AC_PROVIDE_$1],
- [$2], [$3])])])
-
-
-# AC_PROG_LIBTOOL
-# ---------------
-AC_DEFUN([AC_PROG_LIBTOOL],
-[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl
-dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
-dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
- AC_PROVIDE_IFELSE([AC_PROG_CXX],
- [AC_LIBTOOL_CXX],
- [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
- ])])
-dnl And a similar setup for Fortran 77 support
- AC_PROVIDE_IFELSE([AC_PROG_F77],
- [AC_LIBTOOL_F77],
- [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77
-])])
-
-dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
-dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
-dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
- AC_PROVIDE_IFELSE([AC_PROG_GCJ],
- [AC_LIBTOOL_GCJ],
- [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
- [AC_LIBTOOL_GCJ],
- [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
- [AC_LIBTOOL_GCJ],
- [ifdef([AC_PROG_GCJ],
- [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])
- ifdef([A][M_PROG_GCJ],
- [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])
- ifdef([LT_AC_PROG_GCJ],
- [define([LT_AC_PROG_GCJ],
- defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])
-])])# AC_PROG_LIBTOOL
-
-
-# _AC_PROG_LIBTOOL
-# ----------------
-AC_DEFUN([_AC_PROG_LIBTOOL],
-[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
-AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
-AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl
-AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-AC_SUBST(LIBTOOL)dnl
-
-# Prevent multiple expansion
-define([AC_PROG_LIBTOOL], [])
-])# _AC_PROG_LIBTOOL
-
-
-# AC_LIBTOOL_SETUP
-# ----------------
-AC_DEFUN([AC_LIBTOOL_SETUP],
-[AC_PREREQ(2.50)dnl
-AC_REQUIRE([AC_ENABLE_SHARED])dnl
-AC_REQUIRE([AC_ENABLE_STATIC])dnl
-AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_PROG_LD])dnl
-AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
-AC_REQUIRE([AC_PROG_NM])dnl
-
-AC_REQUIRE([AC_PROG_LN_S])dnl
-AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
-# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
-AC_REQUIRE([AC_OBJEXT])dnl
-AC_REQUIRE([AC_EXEEXT])dnl
-dnl
-
-AC_LIBTOOL_SYS_MAX_CMD_LEN
-AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-AC_LIBTOOL_OBJDIR
-
-AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
-_LT_AC_PROG_ECHO_BACKSLASH
-
-case $host_os in
-aix3*)
- # AIX sometimes has problems with the GCC collect2 program. For some
- # reason, if we set the COLLECT_NAMES environment variable, the problems
- # vanish in a puff of smoke.
- if test "X${COLLECT_NAMES+set}" != Xset; then
- COLLECT_NAMES=
- export COLLECT_NAMES
- fi
- ;;
-esac
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e 1s/^X//'
-[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g']
-
-# Same as above, but do not quote variable references.
-[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g']
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
-# Constants:
-rm="rm -f"
-
-# Global variables:
-default_ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except M$VC,
-# which needs '.lib').
-libext=a
-ltmain="$ac_aux_dir/ltmain.sh"
-ofile="$default_ofile"
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-
-AC_CHECK_TOOL(AR, ar, false)
-AC_CHECK_TOOL(RANLIB, ranlib, :)
-AC_CHECK_TOOL(STRIP, strip, :)
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-test -z "$AS" && AS=as
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-test -z "$LD" && LD=ld
-test -z "$LN_S" && LN_S="ln -s"
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-test -z "$NM" && NM=nm
-test -z "$SED" && SED=sed
-test -z "$OBJDUMP" && OBJDUMP=objdump
-test -z "$RANLIB" && RANLIB=:
-test -z "$STRIP" && STRIP=:
-test -z "$ac_objext" && ac_objext=o
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
- case $host_os in
- openbsd*)
- old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
- ;;
- *)
- old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
- ;;
- esac
- old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-fi
-
-_LT_CC_BASENAME([$compiler])
-
-# Only perform the check for file, if the check method requires it
-case $deplibs_check_method in
-file_magic*)
- if test "$file_magic_cmd" = '$MAGIC_CMD'; then
- AC_PATH_MAGIC
- fi
- ;;
-esac
-
-AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
-AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
-enable_win32_dll=yes, enable_win32_dll=no)
-
-AC_ARG_ENABLE([libtool-lock],
- [AC_HELP_STRING([--disable-libtool-lock],
- [avoid locking (might break parallel builds)])])
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-AC_ARG_WITH([pic],
- [AC_HELP_STRING([--with-pic],
- [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
- [pic_mode="$withval"],
- [pic_mode=default])
-test -z "$pic_mode" && pic_mode=default
-
-# Use C for the default configuration in the libtool script
-tagname=
-AC_LIBTOOL_LANG_C_CONFIG
-_LT_AC_TAGCONFIG
-])# AC_LIBTOOL_SETUP
-
-
-# _LT_AC_SYS_COMPILER
-# -------------------
-AC_DEFUN([_LT_AC_SYS_COMPILER],
-[AC_REQUIRE([AC_PROG_CC])dnl
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-])# _LT_AC_SYS_COMPILER
-
-
-# _LT_CC_BASENAME(CC)
-# -------------------
-# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
-AC_DEFUN([_LT_CC_BASENAME],
-[for cc_temp in $1""; do
- case $cc_temp in
- compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
- distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-])
-
-
-# _LT_COMPILER_BOILERPLATE
-# ------------------------
-# Check for compiler boilerplate output or warnings with
-# the simple compiler test code.
-AC_DEFUN([_LT_COMPILER_BOILERPLATE],
-[ac_outfile=conftest.$ac_objext
-printf "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$rm conftest*
-])# _LT_COMPILER_BOILERPLATE
-
-
-# _LT_LINKER_BOILERPLATE
-# ----------------------
-# Check for linker boilerplate output or warnings with
-# the simple link test code.
-AC_DEFUN([_LT_LINKER_BOILERPLATE],
-[ac_outfile=conftest.$ac_objext
-printf "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$rm conftest*
-])# _LT_LINKER_BOILERPLATE
-
-
-# _LT_AC_SYS_LIBPATH_AIX
-# ----------------------
-# Links a minimal program and checks the executable
-# for the system default hardcoded library path. In most cases,
-# this is /usr/lib:/lib, but when the MPI compilers are used
-# the location of the communication and MPI libs are included too.
-# If we don't find anything, use the default library path according
-# to the aix ld manual.
-AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
-[AC_LINK_IFELSE(AC_LANG_PROGRAM,[
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-}'`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-}'`; fi],[])
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-])# _LT_AC_SYS_LIBPATH_AIX
-
-
-# _LT_AC_SHELL_INIT(ARG)
-# ----------------------
-AC_DEFUN([_LT_AC_SHELL_INIT],
-[ifdef([AC_DIVERSION_NOTICE],
- [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
- [AC_DIVERT_PUSH(NOTICE)])
-$1
-AC_DIVERT_POP
-])# _LT_AC_SHELL_INIT
-
-
-# _LT_AC_PROG_ECHO_BACKSLASH
-# --------------------------
-# Add some code to the start of the generated configure script which
-# will find an echo command which doesn't interpret backslashes.
-AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
-[_LT_AC_SHELL_INIT([
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$ECHO in
-X*--fallback-echo)
- # Remove one level of quotation (which was required for Make).
- ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
- ;;
-esac
-
-echo=${ECHO-echo}
-if test "X[$]1" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
-elif test "X[$]1" = X--fallback-echo; then
- # Avoid inline document here, it may be left over
- :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
- # Yippee, $echo works!
- :
-else
- # Restart under the correct shell.
- exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
-fi
-
-if test "X[$]1" = X--fallback-echo; then
- # used as fallback echo
- shift
- cat <<EOF
-[$]*
-EOF
- exit 0
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$ECHO"; then
-if test "X${echo_test_string+set}" != Xset; then
-# find a string as large as possible, as long as the shell can cope with it
- for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
- # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
- if (echo_test_string="`eval $cmd`") 2>/dev/null &&
- echo_test_string="`eval $cmd`" &&
- (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
- then
- break
- fi
- done
-fi
-
-if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- :
-else
- # The Solaris, AIX, and Digital Unix default echo programs unquote
- # backslashes. This makes it impossible to quote backslashes using
- # echo "$something" | sed 's/\\/\\\\/g'
- #
- # So, first we look for a working echo in the user's PATH.
-
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for dir in $PATH /usr/ucb; do
- IFS="$lt_save_ifs"
- if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
- test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- echo="$dir/echo"
- break
- fi
- done
- IFS="$lt_save_ifs"
-
- if test "X$echo" = Xecho; then
- # We didn't find a better echo, so look for alternatives.
- if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- # This shell has a builtin print -r that does the trick.
- echo='print -r'
- elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
- test "X$CONFIG_SHELL" != X/bin/ksh; then
- # If we have ksh, try running configure again with it.
- ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
- export ORIGINAL_CONFIG_SHELL
- CONFIG_SHELL=/bin/ksh
- export CONFIG_SHELL
- exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
- else
- # Try using printf.
- echo='printf %s\n'
- if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- # Cool, printf works
- :
- elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
- test "X$echo_testing_string" = 'X\t' &&
- echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
- export CONFIG_SHELL
- SHELL="$CONFIG_SHELL"
- export SHELL
- echo="$CONFIG_SHELL [$]0 --fallback-echo"
- elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
- test "X$echo_testing_string" = 'X\t' &&
- echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- echo="$CONFIG_SHELL [$]0 --fallback-echo"
- else
- # maybe with a smaller string...
- prev=:
-
- for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
- if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
- then
- break
- fi
- prev="$cmd"
- done
-
- if test "$prev" != 'sed 50q "[$]0"'; then
- echo_test_string=`eval $prev`
- export echo_test_string
- exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
- else
- # Oops. We lost completely, so just stick with echo.
- echo=echo
- fi
- fi
- fi
- fi
-fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-ECHO=$echo
-if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
- ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
-fi
-
-AC_SUBST(ECHO)
-])])# _LT_AC_PROG_ECHO_BACKSLASH
-
-
-# _LT_AC_LOCK
-# -----------
-AC_DEFUN([_LT_AC_LOCK],
-[AC_ARG_ENABLE([libtool-lock],
- [AC_HELP_STRING([--disable-libtool-lock],
- [avoid locking (might break parallel builds)])])
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case $host in
-ia64-*-hpux*)
- # Find out which ABI we are using.
- echo 'int i;' > conftest.$ac_ext
- if AC_TRY_EVAL(ac_compile); then
- case `/usr/bin/file conftest.$ac_objext` in
- *ELF-32*)
- HPUX_IA64_MODE="32"
- ;;
- *ELF-64*)
- HPUX_IA64_MODE="64"
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-*-*-irix6*)
- # Find out which ABI we are using.
- echo '[#]line __oline__ "configure"' > conftest.$ac_ext
- if AC_TRY_EVAL(ac_compile); then
- if test "$lt_cv_prog_gnu_ld" = yes; then
- case `/usr/bin/file conftest.$ac_objext` in
- *32-bit*)
- LD="${LD-ld} -melf32bsmip"
- ;;
- *N32*)
- LD="${LD-ld} -melf32bmipn32"
- ;;
- *64-bit*)
- LD="${LD-ld} -melf64bmip"
- ;;
- esac
- else
- case `/usr/bin/file conftest.$ac_objext` in
- *32-bit*)
- LD="${LD-ld} -32"
- ;;
- *N32*)
- LD="${LD-ld} -n32"
- ;;
- *64-bit*)
- LD="${LD-ld} -64"
- ;;
- esac
- fi
- fi
- rm -rf conftest*
- ;;
-
-x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
- # Find out which ABI we are using.
- echo 'int i;' > conftest.$ac_ext
- if AC_TRY_EVAL(ac_compile); then
- case "`/usr/bin/file conftest.o`" in
- *32-bit*)
- case $host in
- x86_64-*linux*)
- LD="${LD-ld} -m elf_i386"
- ;;
- ppc64-*linux*|powerpc64-*linux*)
- LD="${LD-ld} -m elf32ppclinux"
- ;;
- s390x-*linux*)
- LD="${LD-ld} -m elf_s390"
- ;;
- sparc64-*linux*)
- LD="${LD-ld} -m elf32_sparc"
- ;;
- esac
- ;;
- *64-bit*)
- case $host in
- x86_64-*linux*)
- LD="${LD-ld} -m elf_x86_64"
- ;;
- ppc*-*linux*|powerpc*-*linux*)
- LD="${LD-ld} -m elf64ppc"
- ;;
- s390*-*linux*)
- LD="${LD-ld} -m elf64_s390"
- ;;
- sparc*-*linux*)
- LD="${LD-ld} -m elf64_sparc"
- ;;
- esac
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-
-*-*-sco3.2v5*)
- # On SCO OpenServer 5, we need -belf to get full-featured binaries.
- SAVE_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -belf"
- AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
- [AC_LANG_PUSH(C)
- AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
- AC_LANG_POP])
- if test x"$lt_cv_cc_needs_belf" != x"yes"; then
- # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
- CFLAGS="$SAVE_CFLAGS"
- fi
- ;;
-AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
-[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
- AC_CHECK_TOOL(DLLTOOL, dlltool, false)
- AC_CHECK_TOOL(AS, as, false)
- AC_CHECK_TOOL(OBJDUMP, objdump, false)
- ;;
- ])
-esac
-
-need_locks="$enable_libtool_lock"
-
-])# _LT_AC_LOCK
-
-
-# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
-# ----------------------------------------------------------------
-# Check whether the given compiler option works
-AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],
-[AC_REQUIRE([LT_AC_PROG_SED])
-AC_CACHE_CHECK([$1], [$2],
- [$2=no
- ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
- printf "$lt_simple_compile_test_code" > conftest.$ac_ext
- lt_compiler_flag="$3"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- # The option is referenced via a variable to avoid confusing sed.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
- -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&AS_MESSAGE_LOG_FD
- echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
- if (exit $ac_status) && test -s "$ac_outfile"; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $echo "X$_lt_compiler_boilerplate" | $Xsed >conftest.exp
- $SED '/^$/d' conftest.err >conftest.er2
- if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then
- $2=yes
- fi
- fi
- $rm conftest*
-])
-
-if test x"[$]$2" = xyes; then
- ifelse([$5], , :, [$5])
-else
- ifelse([$6], , :, [$6])
-fi
-])# AC_LIBTOOL_COMPILER_OPTION
-
-
-# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-# [ACTION-SUCCESS], [ACTION-FAILURE])
-# ------------------------------------------------------------
-# Check whether the given compiler option works
-AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
-[AC_CACHE_CHECK([$1], [$2],
- [$2=no
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS $3"
- printf "$lt_simple_link_test_code" > conftest.$ac_ext
- if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- # Append any errors to the config.log.
- cat conftest.err 1>&AS_MESSAGE_LOG_FD
- $echo "X$_lt_linker_boilerplate" | $Xsed > conftest.exp
- $SED '/^$/d' conftest.err >conftest.er2
- if diff conftest.exp conftest.er2 >/dev/null; then
- $2=yes
- fi
- else
- $2=yes
- fi
- fi
- $rm conftest*
- LDFLAGS="$save_LDFLAGS"
-])
-
-if test x"[$]$2" = xyes; then
- ifelse([$4], , :, [$4])
-else
- ifelse([$5], , :, [$5])
-fi
-])# AC_LIBTOOL_LINKER_OPTION
-
-
-# AC_LIBTOOL_SYS_MAX_CMD_LEN
-# --------------------------
-AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],
-[# find the maximum length of command line arguments
-AC_MSG_CHECKING([the maximum length of command line arguments])
-AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
- i=0
- teststring="ABCD"
-
- case $build_os in
- msdosdjgpp*)
- # On DJGPP, this test can blow up pretty badly due to problems in libc
- # (any single argument exceeding 2000 bytes causes a buffer overrun
- # during glob expansion). Even if it were fixed, the result of this
- # check would be larger than it should be.
- lt_cv_sys_max_cmd_len=12288; # 12K is about right
- ;;
-
- gnu*)
- # Under GNU Hurd, this test is not required because there is
- # no limit to the length of command line arguments.
- # Libtool will interpret -1 as no limit whatsoever
- lt_cv_sys_max_cmd_len=-1;
- ;;
-
- cygwin* | mingw*)
- # On Win9x/ME, this test blows up -- it succeeds, but takes
- # about 5 minutes as the teststring grows exponentially.
- # Worse, since 9x/ME are not pre-emptively multitasking,
- # you end up with a "frozen" computer, even though with patience
- # the test eventually succeeds (with a max line length of 256k).
- # Instead, let's just punt: use the minimum linelength reported by
- # all of the supported platforms: 8192 (on NT/2K/XP).
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
- amigaos*)
- # On AmigaOS with pdksh, this test takes hours, literally.
- # So we just punt and use a minimum line length of 8192.
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
- netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
- # This has been around since 386BSD, at least. Likely further.
- if test -x /sbin/sysctl; then
- lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
- elif test -x /usr/sbin/sysctl; then
- lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
- else
- lt_cv_sys_max_cmd_len=65536 # usable default for *BSD
- fi
- # And add a safety zone
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
- ;;
- osf*)
- # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
- # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
- # nice to cause kernel panics so lets avoid the loop below.
- # First set a reasonable default.
- lt_cv_sys_max_cmd_len=16384
- #
- if test -x /sbin/sysconfig; then
- case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
- *1*) lt_cv_sys_max_cmd_len=-1 ;;
- esac
- fi
- ;;
- *)
- # If test is not a shell built-in, we'll probably end up computing a
- # maximum length that is only half of the actual maximum length, but
- # we can't tell.
- SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
- while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \
- = "XX$teststring") >/dev/null 2>&1 &&
- new_result=`expr "X$teststring" : ".*" 2>&1` &&
- lt_cv_sys_max_cmd_len=$new_result &&
- test $i != 17 # 1/2 MB should be enough
- do
- i=`expr $i + 1`
- teststring=$teststring$teststring
- done
- teststring=
- # Add a significant safety factor because C++ compilers can tack on massive
- # amounts of additional arguments before passing them to the linker.
- # It appears as though 1/2 is a usable value.
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
- ;;
- esac
-])
-if test -n $lt_cv_sys_max_cmd_len ; then
- AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
-else
- AC_MSG_RESULT(none)
-fi
-])# AC_LIBTOOL_SYS_MAX_CMD_LEN
-
-
-# _LT_AC_CHECK_DLFCN
-# --------------------
-AC_DEFUN([_LT_AC_CHECK_DLFCN],
-[AC_CHECK_HEADERS(dlfcn.h)dnl
-])# _LT_AC_CHECK_DLFCN
-
-
-# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
-# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
-# ------------------------------------------------------------------
-AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
-[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
-if test "$cross_compiling" = yes; then :
- [$4]
-else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<EOF
-[#line __oline__ "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LT_DLGLOBAL RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-# define LT_DLGLOBAL DL_GLOBAL
-# else
-# define LT_DLGLOBAL 0
-# endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
- find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-# ifdef RTLD_LAZY
-# define LT_DLLAZY_OR_NOW RTLD_LAZY
-# else
-# ifdef DL_LAZY
-# define LT_DLLAZY_OR_NOW DL_LAZY
-# else
-# ifdef RTLD_NOW
-# define LT_DLLAZY_OR_NOW RTLD_NOW
-# else
-# ifdef DL_NOW
-# define LT_DLLAZY_OR_NOW DL_NOW
-# else
-# define LT_DLLAZY_OR_NOW 0
-# endif
-# endif
-# endif
-# endif
-#endif
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
- int status = $lt_dlunknown;
-
- if (self)
- {
- if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
- else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
- /* dlclose (self); */
- }
-
- exit (status);
-}]
-EOF
- if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
- (./conftest; exit; ) 2>/dev/null
- lt_status=$?
- case x$lt_status in
- x$lt_dlno_uscore) $1 ;;
- x$lt_dlneed_uscore) $2 ;;
- x$lt_unknown|x*) $3 ;;
- esac
- else :
- # compilation failed
- $3
- fi
-fi
-rm -fr conftest*
-])# _LT_AC_TRY_DLOPEN_SELF
-
-
-# AC_LIBTOOL_DLOPEN_SELF
-# -------------------
-AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
-[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
-if test "x$enable_dlopen" != xyes; then
- enable_dlopen=unknown
- enable_dlopen_self=unknown
- enable_dlopen_self_static=unknown
-else
- lt_cv_dlopen=no
- lt_cv_dlopen_libs=
-
- case $host_os in
- beos*)
- lt_cv_dlopen="load_add_on"
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
- ;;
-
- mingw* | pw32*)
- lt_cv_dlopen="LoadLibrary"
- lt_cv_dlopen_libs=
- ;;
-
- cygwin*)
- lt_cv_dlopen="dlopen"
- lt_cv_dlopen_libs=
- ;;
-
- darwin*)
- # if libdl is installed we need to link against it
- AC_CHECK_LIB([dl], [dlopen],
- [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
- lt_cv_dlopen="dyld"
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
- ])
- ;;
-
- *)
- AC_CHECK_FUNC([shl_load],
- [lt_cv_dlopen="shl_load"],
- [AC_CHECK_LIB([dld], [shl_load],
- [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"],
- [AC_CHECK_FUNC([dlopen],
- [lt_cv_dlopen="dlopen"],
- [AC_CHECK_LIB([dl], [dlopen],
- [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
- [AC_CHECK_LIB([svld], [dlopen],
- [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
- [AC_CHECK_LIB([dld], [dld_link],
- [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
- ])
- ])
- ])
- ])
- ])
- ;;
- esac
-
- if test "x$lt_cv_dlopen" != xno; then
- enable_dlopen=yes
- else
- enable_dlopen=no
- fi
-
- case $lt_cv_dlopen in
- dlopen)
- save_CPPFLAGS="$CPPFLAGS"
- test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-
- save_LDFLAGS="$LDFLAGS"
- eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
- save_LIBS="$LIBS"
- LIBS="$lt_cv_dlopen_libs $LIBS"
-
- AC_CACHE_CHECK([whether a program can dlopen itself],
- lt_cv_dlopen_self, [dnl
- _LT_AC_TRY_DLOPEN_SELF(
- lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
- lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
- ])
-
- if test "x$lt_cv_dlopen_self" = xyes; then
- LDFLAGS="$LDFLAGS $link_static_flag"
- AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
- lt_cv_dlopen_self_static, [dnl
- _LT_AC_TRY_DLOPEN_SELF(
- lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
- lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
- ])
- fi
-
- CPPFLAGS="$save_CPPFLAGS"
- LDFLAGS="$save_LDFLAGS"
- LIBS="$save_LIBS"
- ;;
- esac
-
- case $lt_cv_dlopen_self in
- yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
- *) enable_dlopen_self=unknown ;;
- esac
-
- case $lt_cv_dlopen_self_static in
- yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
- *) enable_dlopen_self_static=unknown ;;
- esac
-fi
-])# AC_LIBTOOL_DLOPEN_SELF
-
-
-# AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
-# ---------------------------------
-# Check to see if options -c and -o are simultaneously supported by compiler
-AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
-[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
-AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
- [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
- [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
- $rm -r conftest 2>/dev/null
- mkdir conftest
- cd conftest
- mkdir out
- printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- lt_compiler_flag="-o out/conftest2.$ac_objext"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
- -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
- (eval "$lt_compile" 2>out/conftest.err)
- ac_status=$?
- cat out/conftest.err >&AS_MESSAGE_LOG_FD
- echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
- if (exit $ac_status) && test -s out/conftest2.$ac_objext
- then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- $echo "X$_lt_compiler_boilerplate" | $Xsed > out/conftest.exp
- $SED '/^$/d' out/conftest.err >out/conftest.er2
- if test ! -s out/conftest.err || diff out/conftest.exp out/conftest.er2 >/dev/null; then
- _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
- fi
- fi
- chmod u+w .
- $rm conftest*
- # SGI C++ compiler will create directory out/ii_files/ for
- # template instantiation
- test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
- $rm out/* && rmdir out
- cd ..
- rmdir conftest
- $rm conftest*
-])
-])# AC_LIBTOOL_PROG_CC_C_O
-
-
-# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])
-# -----------------------------------------
-# Check to see if we can do hard links to lock some files if needed
-AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS],
-[AC_REQUIRE([_LT_AC_LOCK])dnl
-
-hard_links="nottested"
-if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
- # do not overwrite the value of need_locks provided by the user
- AC_MSG_CHECKING([if we can lock with hard links])
- hard_links=yes
- $rm conftest*
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- touch conftest.a
- ln conftest.a conftest.b 2>&5 || hard_links=no
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- AC_MSG_RESULT([$hard_links])
- if test "$hard_links" = no; then
- AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
- need_locks=warn
- fi
-else
- need_locks=no
-fi
-])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS
-
-
-# AC_LIBTOOL_OBJDIR
-# -----------------
-AC_DEFUN([AC_LIBTOOL_OBJDIR],
-[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
-[rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
- lt_cv_objdir=.libs
-else
- # MS-DOS does not allow filenames that begin with a dot.
- lt_cv_objdir=_libs
-fi
-rmdir .libs 2>/dev/null])
-objdir=$lt_cv_objdir
-])# AC_LIBTOOL_OBJDIR
-
-
-# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])
-# ----------------------------------------------
-# Check hardcoding attributes.
-AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH],
-[AC_MSG_CHECKING([how to hardcode library paths into programs])
-_LT_AC_TAGVAR(hardcode_action, $1)=
-if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \
- test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \
- test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
-
- # We can hardcode non-existant directories.
- if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no &&
- # If the only mechanism to avoid hardcoding is shlibpath_var, we
- # have to relink, otherwise we might link with an installed library
- # when we should be linking with a yet-to-be-installed one
- ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
- test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then
- # Linking always hardcodes the temporary library directory.
- _LT_AC_TAGVAR(hardcode_action, $1)=relink
- else
- # We can link without hardcoding, and we can hardcode nonexisting dirs.
- _LT_AC_TAGVAR(hardcode_action, $1)=immediate
- fi
-else
- # We cannot hardcode anything, or else we can only hardcode existing
- # directories.
- _LT_AC_TAGVAR(hardcode_action, $1)=unsupported
-fi
-AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)])
-
-if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then
- # Fast installation is not supported
- enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
- test "$enable_shared" = no; then
- # Fast installation is not necessary
- enable_fast_install=needless
-fi
-])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH
-
-
-# AC_LIBTOOL_SYS_LIB_STRIP
-# ------------------------
-AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP],
-[striplib=
-old_striplib=
-AC_MSG_CHECKING([whether stripping libraries is possible])
-if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
- test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
- test -z "$striplib" && striplib="$STRIP --strip-unneeded"
- AC_MSG_RESULT([yes])
-else
-# FIXME - insert some real tests, host_os isn't really good enough
- case $host_os in
- darwin*)
- if test -n "$STRIP" ; then
- striplib="$STRIP -x"
- AC_MSG_RESULT([yes])
- else
- AC_MSG_RESULT([no])
-fi
- ;;
- *)
- AC_MSG_RESULT([no])
- ;;
- esac
-fi
-])# AC_LIBTOOL_SYS_LIB_STRIP
-
-
-# AC_LIBTOOL_SYS_DYNAMIC_LINKER
-# -----------------------------
-# PORTME Fill in your ld.so characteristics
-AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
-[AC_MSG_CHECKING([dynamic linker characteristics])
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-if test "$GCC" = yes; then
- sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
- # if the path contains ";" then we assume it to be the separator
- # otherwise default to the standard path separator (i.e. ":") - it is
- # assumed that no part of a normal pathname contains ";" but that should
- # okay in the real world where ";" in dirpaths is itself problematic.
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
- else
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
-else
- sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
- shlibpath_var=LIBPATH
-
- # AIX 3 has no versioning support, so we append a major version to the name.
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
-
-aix4* | aix5*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- hardcode_into_libs=yes
- if test "$host_cpu" = ia64; then
- # AIX 5 supports IA64
- library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- else
- # With GCC up to 2.95.x, collect2 would create an import file
- # for dependence libraries. The import file would start with
- # the line `#! .'. This would cause the generated library to
- # depend on `.', always an invalid library. This was fixed in
- # development snapshots of GCC prior to 3.0.
- case $host_os in
- aix4 | aix4.[[01]] | aix4.[[01]].*)
- if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
- echo ' yes '
- echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
- :
- else
- can_build_shared=no
- fi
- ;;
- esac
- # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
- # soname into executable. Probably we can add versioning support to
- # collect2, so additional links can be useful in future.
- if test "$aix_use_runtimelinking" = yes; then
- # If using run time linking (on AIX 4.2 or later) use lib<name>.so
- # instead of lib<name>.a to let people know that these are not
- # typical AIX shared libraries.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- else
- # We preserve .a as extension for shared libraries through AIX4.2
- # and later when we are not doing run time linking.
- library_names_spec='${libname}${release}.a $libname.a'
- soname_spec='${libname}${release}${shared_ext}$major'
- fi
- shlibpath_var=LIBPATH
- fi
- ;;
-
-amigaos*)
- library_names_spec='$libname.ixlibrary $libname.a'
- # Create ${libname}_ixlibrary.a entries in /sys/libs.
- finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
- ;;
-
-beos*)
- library_names_spec='${libname}${shared_ext}'
- dynamic_linker="$host_os ld.so"
- shlibpath_var=LIBRARY_PATH
- ;;
-
-bsdi[[45]]*)
- version_type=linux
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
- sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
- # the default ld.so.conf also contains /usr/contrib/lib and
- # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
- # libtool to hard-code these into programs
- ;;
-
-cygwin* | mingw* | pw32*)
- version_type=windows
- shrext_cmds=".dll"
- need_version=no
- need_lib_prefix=no
-
- case $GCC,$host_os in
- yes,cygwin* | yes,mingw* | yes,pw32*)
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \${file}`~
- dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
- dldir=$destdir/`dirname \$dlpath`~
- test -d \$dldir || mkdir -p \$dldir~
- $install_prog $dir/$dlname \$dldir/$dlname'
- postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
- dlpath=$dir/\$dldll~
- $rm \$dlpath'
- shlibpath_overrides_runpath=yes
-
- case $host_os in
- cygwin*)
- # Cygwin DLLs use 'cyg' prefix rather than 'lib'
- soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
- ;;
- mingw*)
- # MinGW DLLs use traditional 'lib' prefix
- soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then
- # It is most probably a Windows format PATH printed by
- # mingw gcc, but we are running on Cygwin. Gcc prints its search
- # path with ; separators, and with drive letters. We can handle the
- # drive letters (cygwin fileutils understands them), so leave them,
- # especially as we might pass files found there to a mingw objdump,
- # which wouldn't understand a cygwinified path. Ahh.
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
- else
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
- ;;
- pw32*)
- # pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
- ;;
- esac
- ;;
-
- *)
- library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
- ;;
- esac
- dynamic_linker='Win32 ld.exe'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-
-darwin* | rhapsody*)
- dynamic_linker="$host_os dyld"
- version_type=darwin
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
- soname_spec='${libname}${release}${major}$shared_ext'
- shlibpath_overrides_runpath=yes
- shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
- # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
- if test "$GCC" = yes; then
- sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
- else
- sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
- fi
- sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
- ;;
-
-dgux*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-freebsd1*)
- dynamic_linker=no
- ;;
-
-kfreebsd*-gnu)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- dynamic_linker='GNU ld.so'
- ;;
-
-freebsd* | dragonfly*)
- # DragonFly does not have aout. When/if they implement a new
- # versioning mechanism, adjust this.
- objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
- version_type=freebsd-$objformat
- case $version_type in
- freebsd-elf*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- need_version=no
- need_lib_prefix=no
- ;;
- freebsd-*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
- need_version=yes
- ;;
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
- freebsd2*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[[01]]* | freebsdelf3.[[01]]*)
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- *) # from 3.2 on
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
- esac
- ;;
-
-gnu*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- ;;
-
-hpux9* | hpux10* | hpux11*)
- # Give a soname corresponding to the major version so that dld.sl refuses to
- # link against other versions.
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- case "$host_cpu" in
- ia64*)
- shrext_cmds='.so'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.so"
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- if test "X$HPUX_IA64_MODE" = X32; then
- sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
- else
- sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
- fi
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- hppa*64*)
- shrext_cmds='.sl'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- *)
- shrext_cmds='.sl'
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=SHLIB_PATH
- shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
- esac
- # HP-UX runs *really* slowly unless shared libraries are mode 555.
- postinstall_cmds='chmod 555 $lib'
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $host_os in
- nonstopux*) version_type=nonstopux ;;
- *)
- if test "$lt_cv_prog_gnu_ld" = yes; then
- version_type=linux
- else
- version_type=irix
- fi ;;
- esac
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
- case $host_os in
- irix5* | nonstopux*)
- libsuff= shlibsuff=
- ;;
- *)
- case $LD in # libtool.m4 will add one of these switches to LD
- *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
- libsuff= shlibsuff= libmagic=32-bit;;
- *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
- libsuff=32 shlibsuff=N32 libmagic=N32;;
- *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
- libsuff=64 shlibsuff=64 libmagic=64-bit;;
- *) libsuff= shlibsuff= libmagic=never-match;;
- esac
- ;;
- esac
- shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
- sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
- hardcode_into_libs=yes
- ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
- dynamic_linker=no
- ;;
-
-# This must be Linux ELF.
-linux*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- # This implies no fast_install, which is unacceptable.
- # Some rework will be needed to allow for fast_install
- # before this can be enabled.
- hardcode_into_libs=yes
-
- # Append ld.so.conf contents to the search path
- if test -f /etc/ld.so.conf; then
- lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
- fi
-
- # We used to test for /lib/ld.so.1 and disable shared libraries on
- # powerpc, because MkLinux only supported shared libraries with the
- # GNU dynamic linker. Since this was broken with cross compilers,
- # most powerpc-linux boxes support dynamic linking these days and
- # people can always --disable-shared, the test was removed, and we
- # assume the GNU/Linux dynamic linker is in use.
- dynamic_linker='GNU/Linux ld.so'
- ;;
-
-knetbsd*-gnu)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- dynamic_linker='GNU ld.so'
- ;;
-
-netbsd*)
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- dynamic_linker='NetBSD (a.out) ld.so'
- else
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='NetBSD ld.elf_so'
- fi
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
-
-newsos6)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-nto-qnx*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-openbsd*)
- version_type=sunos
- need_lib_prefix=no
- # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
- case $host_os in
- openbsd3.3 | openbsd3.3.*) need_version=yes ;;
- *) need_version=no ;;
- esac
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- case $host_os in
- openbsd2.[[89]] | openbsd2.[[89]].*)
- shlibpath_overrides_runpath=no
- ;;
- *)
- shlibpath_overrides_runpath=yes
- ;;
- esac
- else
- shlibpath_overrides_runpath=yes
- fi
- ;;
-
-os2*)
- libname_spec='$name'
- shrext_cmds=".dll"
- need_lib_prefix=no
- library_names_spec='$libname${shared_ext} $libname.a'
- dynamic_linker='OS/2 ld.exe'
- shlibpath_var=LIBPATH
- ;;
-
-osf3* | osf4* | osf5*)
- version_type=osf
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
- sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
- ;;
-
-sco3.2v5*)
- version_type=osf
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-solaris*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- # ldd complains unless libraries are executable
- postinstall_cmds='chmod +x $lib'
- ;;
-
-sunos4*)
- version_type=sunos
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- if test "$with_gnu_ld" = yes; then
- need_lib_prefix=no
- fi
- need_version=yes
- ;;
-
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- case $host_vendor in
- sni)
- shlibpath_overrides_runpath=no
- need_lib_prefix=no
- export_dynamic_flag_spec='${wl}-Blargedynsym'
- runpath_var=LD_RUN_PATH
- ;;
- siemens)
- need_lib_prefix=no
- ;;
- motorola)
- need_lib_prefix=no
- need_version=no
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
- ;;
- esac
- ;;
-
-sysv4*MP*)
- if test -d /usr/nec ;then
- version_type=linux
- library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
- soname_spec='$libname${shared_ext}.$major'
- shlibpath_var=LD_LIBRARY_PATH
- fi
- ;;
-
-uts4*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-*)
- dynamic_linker=no
- ;;
-esac
-AC_MSG_RESULT([$dynamic_linker])
-test "$dynamic_linker" = no && can_build_shared=no
-])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
-
-
-# _LT_AC_TAGCONFIG
-# ----------------
-AC_DEFUN([_LT_AC_TAGCONFIG],
-[AC_ARG_WITH([tags],
- [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
- [include additional configurations @<:@automatic@:>@])],
- [tagnames="$withval"])
-
-if test -f "$ltmain" && test -n "$tagnames"; then
- if test ! -f "${ofile}"; then
- AC_MSG_WARN([output file `$ofile' does not exist])
- fi
-
- if test -z "$LTCC"; then
- eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
- if test -z "$LTCC"; then
- AC_MSG_WARN([output file `$ofile' does not look like a libtool script])
- else
- AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
- fi
- fi
-
- # Extract list of available tagged configurations in $ofile.
- # Note that this assumes the entire list is on one line.
- available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
-
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for tagname in $tagnames; do
- IFS="$lt_save_ifs"
- # Check whether tagname contains only valid characters
- case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in
- "") ;;
- *) AC_MSG_ERROR([invalid tag name: $tagname])
- ;;
- esac
-
- if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
- then
- AC_MSG_ERROR([tag name \"$tagname\" already exists])
- fi
-
- # Update the list of available tags.
- if test -n "$tagname"; then
- echo appending configuration tag \"$tagname\" to $ofile
-
- case $tagname in
- CXX)
- if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
- ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
- (test "X$CXX" != "Xg++"))) ; then
- AC_LIBTOOL_LANG_CXX_CONFIG
- else
- tagname=""
- fi
- ;;
-
- F77)
- if test -n "$F77" && test "X$F77" != "Xno"; then
- AC_LIBTOOL_LANG_F77_CONFIG
- else
- tagname=""
- fi
- ;;
-
- GCJ)
- if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
- AC_LIBTOOL_LANG_GCJ_CONFIG
- else
- tagname=""
- fi
- ;;
-
- RC)
- AC_LIBTOOL_LANG_RC_CONFIG
- ;;
-
- *)
- AC_MSG_ERROR([Unsupported tag name: $tagname])
- ;;
- esac
-
- # Append the new tag name to the list of available tags.
- if test -n "$tagname" ; then
- available_tags="$available_tags $tagname"
- fi
- fi
- done
- IFS="$lt_save_ifs"
-
- # Now substitute the updated list of available tags.
- if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
- mv "${ofile}T" "$ofile"
- chmod +x "$ofile"
- else
- rm -f "${ofile}T"
- AC_MSG_ERROR([unable to update list of available tagged configurations.])
- fi
-fi
-])# _LT_AC_TAGCONFIG
-
-
-# AC_LIBTOOL_DLOPEN
-# -----------------
-# enable checks for dlopen support
-AC_DEFUN([AC_LIBTOOL_DLOPEN],
- [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])
-])# AC_LIBTOOL_DLOPEN
-
-
-# AC_LIBTOOL_WIN32_DLL
-# --------------------
-# declare package support for building win32 dll's
-AC_DEFUN([AC_LIBTOOL_WIN32_DLL],
-[AC_BEFORE([$0], [AC_LIBTOOL_SETUP])
-])# AC_LIBTOOL_WIN32_DLL
-
-
-# AC_ENABLE_SHARED([DEFAULT])
-# ---------------------------
-# implement the --enable-shared flag
-# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
-AC_DEFUN([AC_ENABLE_SHARED],
-[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE([shared],
- [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
- [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])],
- [p=${PACKAGE-default}
- case $enableval in
- yes) enable_shared=yes ;;
- no) enable_shared=no ;;
- *)
- enable_shared=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for pkg in $enableval; do
- IFS="$lt_save_ifs"
- if test "X$pkg" = "X$p"; then
- enable_shared=yes
- fi
- done
- IFS="$lt_save_ifs"
- ;;
- esac],
- [enable_shared=]AC_ENABLE_SHARED_DEFAULT)
-])# AC_ENABLE_SHARED
-
-
-# AC_DISABLE_SHARED
-# -----------------
-#- set the default shared flag to --disable-shared
-AC_DEFUN([AC_DISABLE_SHARED],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_SHARED(no)
-])# AC_DISABLE_SHARED
-
-
-# AC_ENABLE_STATIC([DEFAULT])
-# ---------------------------
-# implement the --enable-static flag
-# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
-AC_DEFUN([AC_ENABLE_STATIC],
-[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE([static],
- [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@],
- [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])],
- [p=${PACKAGE-default}
- case $enableval in
- yes) enable_static=yes ;;
- no) enable_static=no ;;
- *)
- enable_static=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for pkg in $enableval; do
- IFS="$lt_save_ifs"
- if test "X$pkg" = "X$p"; then
- enable_static=yes
- fi
- done
- IFS="$lt_save_ifs"
- ;;
- esac],
- [enable_static=]AC_ENABLE_STATIC_DEFAULT)
-])# AC_ENABLE_STATIC
-
-
-# AC_DISABLE_STATIC
-# -----------------
-# set the default static flag to --disable-static
-AC_DEFUN([AC_DISABLE_STATIC],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_STATIC(no)
-])# AC_DISABLE_STATIC
-
-
-# AC_ENABLE_FAST_INSTALL([DEFAULT])
-# ---------------------------------
-# implement the --enable-fast-install flag
-# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
-AC_DEFUN([AC_ENABLE_FAST_INSTALL],
-[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE([fast-install],
- [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
- [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
- [p=${PACKAGE-default}
- case $enableval in
- yes) enable_fast_install=yes ;;
- no) enable_fast_install=no ;;
- *)
- enable_fast_install=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for pkg in $enableval; do
- IFS="$lt_save_ifs"
- if test "X$pkg" = "X$p"; then
- enable_fast_install=yes
- fi
- done
- IFS="$lt_save_ifs"
- ;;
- esac],
- [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT)
-])# AC_ENABLE_FAST_INSTALL
-
-
-# AC_DISABLE_FAST_INSTALL
-# -----------------------
-# set the default to --disable-fast-install
-AC_DEFUN([AC_DISABLE_FAST_INSTALL],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_FAST_INSTALL(no)
-])# AC_DISABLE_FAST_INSTALL
-
-
-# AC_LIBTOOL_PICMODE([MODE])
-# --------------------------
-# implement the --with-pic flag
-# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
-AC_DEFUN([AC_LIBTOOL_PICMODE],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-pic_mode=ifelse($#,1,$1,default)
-])# AC_LIBTOOL_PICMODE
-
-
-# AC_PROG_EGREP
-# -------------
-# This is predefined starting with Autoconf 2.54, so this conditional
-# definition can be removed once we require Autoconf 2.54 or later.
-m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP],
-[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
- [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
- then ac_cv_prog_egrep='grep -E'
- else ac_cv_prog_egrep='egrep'
- fi])
- EGREP=$ac_cv_prog_egrep
- AC_SUBST([EGREP])
-])])
-
-
-# AC_PATH_TOOL_PREFIX
-# -------------------
-# find a file program which can recognise shared library
-AC_DEFUN([AC_PATH_TOOL_PREFIX],
-[AC_REQUIRE([AC_PROG_EGREP])dnl
-AC_MSG_CHECKING([for $1])
-AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
-[case $MAGIC_CMD in
-[[\\/*] | ?:[\\/]*])
- lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
- ;;
-*)
- lt_save_MAGIC_CMD="$MAGIC_CMD"
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-dnl $ac_dummy forces splitting on constant user-supplied paths.
-dnl POSIX.2 word splitting is done only on the output of word expansions,
-dnl not every word. This closes a longstanding sh security hole.
- ac_dummy="ifelse([$2], , $PATH, [$2])"
- for ac_dir in $ac_dummy; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$1; then
- lt_cv_path_MAGIC_CMD="$ac_dir/$1"
- if test -n "$file_magic_test_file"; then
- case $deplibs_check_method in
- "file_magic "*)
- file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
- MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
- if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
- $EGREP "$file_magic_regex" > /dev/null; then
- :
- else
- cat <<EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such. This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem. Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool at gnu.org
-
-EOF
- fi ;;
- esac
- fi
- break
- fi
- done
- IFS="$lt_save_ifs"
- MAGIC_CMD="$lt_save_MAGIC_CMD"
- ;;
-esac])
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
- AC_MSG_RESULT($MAGIC_CMD)
-else
- AC_MSG_RESULT(no)
-fi
-])# AC_PATH_TOOL_PREFIX
-
-
-# AC_PATH_MAGIC
-# -------------
-# find a file program which can recognise a shared library
-AC_DEFUN([AC_PATH_MAGIC],
-[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
-if test -z "$lt_cv_path_MAGIC_CMD"; then
- if test -n "$ac_tool_prefix"; then
- AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
- else
- MAGIC_CMD=:
- fi
-fi
-])# AC_PATH_MAGIC
-
-
-# AC_PROG_LD
-# ----------
-# find the pathname to the GNU or non-GNU linker
-AC_DEFUN([AC_PROG_LD],
-[AC_ARG_WITH([gnu-ld],
- [AC_HELP_STRING([--with-gnu-ld],
- [assume the C compiler uses GNU ld @<:@default=no@:>@])],
- [test "$withval" = no || with_gnu_ld=yes],
- [with_gnu_ld=no])
-AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-ac_prog=ld
-if test "$GCC" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- AC_MSG_CHECKING([for ld used by $CC])
- case $host in
- *-*-mingw*)
- # gcc leaves a trailing carriage return which upsets mingw
- ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
- *)
- ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
- esac
- case $ac_prog in
- # Accept absolute paths.
- [[\\/]]* | ?:[[\\/]]*)
- re_direlt='/[[^/]][[^/]]*/\.\./'
- # Canonicalize the pathname of ld
- ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
- while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
- done
- test -z "$LD" && LD="$ac_prog"
- ;;
- "")
- # If it fails, then pretend we aren't using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
-elif test "$with_gnu_ld" = yes; then
- AC_MSG_CHECKING([for GNU ld])
-else
- AC_MSG_CHECKING([for non-GNU ld])
-fi
-AC_CACHE_VAL(lt_cv_path_LD,
-[if test -z "$LD"; then
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- lt_cv_path_LD="$ac_dir/$ac_prog"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some GNU ld's only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
- *GNU* | *'with BFD'*)
- test "$with_gnu_ld" != no && break
- ;;
- *)
- test "$with_gnu_ld" != yes && break
- ;;
- esac
- fi
- done
- IFS="$lt_save_ifs"
-else
- lt_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$lt_cv_path_LD"
-if test -n "$LD"; then
- AC_MSG_RESULT($LD)
-else
- AC_MSG_RESULT(no)
-fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-AC_PROG_LD_GNU
-])# AC_PROG_LD
-
-
-# AC_PROG_LD_GNU
-# --------------
-AC_DEFUN([AC_PROG_LD_GNU],
-[AC_REQUIRE([AC_PROG_EGREP])dnl
-AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
- lt_cv_prog_gnu_ld=yes
- ;;
-*)
- lt_cv_prog_gnu_ld=no
- ;;
-esac])
-with_gnu_ld=$lt_cv_prog_gnu_ld
-])# AC_PROG_LD_GNU
-
-
-# AC_PROG_LD_RELOAD_FLAG
-# ----------------------
-# find reload flag for linker
-# -- PORTME Some linkers may need a different reload flag.
-AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
-[AC_CACHE_CHECK([for $LD option to reload object files],
- lt_cv_ld_reload_flag,
- [lt_cv_ld_reload_flag='-r'])
-reload_flag=$lt_cv_ld_reload_flag
-case $reload_flag in
-"" | " "*) ;;
-*) reload_flag=" $reload_flag" ;;
-esac
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-case $host_os in
- darwin*)
- if test "$GCC" = yes; then
- reload_cmds='$CC -nostdlib ${wl}-r -o $output$reload_objs'
- else
- reload_cmds='$LD$reload_flag -o $output$reload_objs'
- fi
- ;;
-esac
-])# AC_PROG_LD_RELOAD_FLAG
-
-
-# AC_DEPLIBS_CHECK_METHOD
-# -----------------------
-# how to check for library dependencies
-# -- PORTME fill in with the dynamic library characteristics
-AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
-[AC_CACHE_CHECK([how to recognise dependent libraries],
-lt_cv_deplibs_check_method,
-[lt_cv_file_magic_cmd='$MAGIC_CMD'
-lt_cv_file_magic_test_file=
-lt_cv_deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given extended regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-
-case $host_os in
-aix4* | aix5*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-beos*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-bsdi[[45]]*)
- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
- lt_cv_file_magic_cmd='/usr/bin/file -L'
- lt_cv_file_magic_test_file=/shlib/libc.so
- ;;
-
-cygwin*)
- # func_win32_libid is a shell function defined in ltmain.sh
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- ;;
-
-mingw* | pw32*)
- # Base MSYS/MinGW do not provide the 'file' command needed by
- # func_win32_libid shell function, so use a weaker test based on 'objdump'.
- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- ;;
-
-darwin* | rhapsody*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-freebsd* | kfreebsd*-gnu | dragonfly*)
- if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
- case $host_cpu in
- i*86 )
- # Not sure whether the presence of OpenBSD here was a mistake.
- # Let's accept both of them until this is cleared up.
- lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
- lt_cv_file_magic_cmd=/usr/bin/file
- lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
- ;;
- esac
- else
- lt_cv_deplibs_check_method=pass_all
- fi
- ;;
-
-gnu*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-hpux10.20* | hpux11*)
- lt_cv_file_magic_cmd=/usr/bin/file
- case "$host_cpu" in
- ia64*)
- lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
- lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
- ;;
- hppa*64*)
- [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
- lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
- ;;
- *)
- lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
- lt_cv_file_magic_test_file=/usr/lib/libc.sl
- ;;
- esac
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $LD in
- *-32|*"-32 ") libmagic=32-bit;;
- *-n32|*"-n32 ") libmagic=N32;;
- *-64|*"-64 ") libmagic=64-bit;;
- *) libmagic=never-match;;
- esac
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-# This must be Linux ELF.
-linux*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
- lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
- else
- lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
- fi
- ;;
-
-newos6*)
- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
- lt_cv_file_magic_cmd=/usr/bin/file
- lt_cv_file_magic_test_file=/usr/lib/libnls.so
- ;;
-
-nto-qnx*)
- lt_cv_deplibs_check_method=unknown
- ;;
-
-openbsd*)
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
- else
- lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
- fi
- ;;
-
-osf3* | osf4* | osf5*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-sco3.2v5*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-solaris*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
- case $host_vendor in
- motorola)
- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
- lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
- ;;
- ncr)
- lt_cv_deplibs_check_method=pass_all
- ;;
- sequent)
- lt_cv_file_magic_cmd='/bin/file'
- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
- ;;
- sni)
- lt_cv_file_magic_cmd='/bin/file'
- lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
- lt_cv_file_magic_test_file=/lib/libc.so
- ;;
- siemens)
- lt_cv_deplibs_check_method=pass_all
- ;;
- esac
- ;;
-
-sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-esac
-])
-file_magic_cmd=$lt_cv_file_magic_cmd
-deplibs_check_method=$lt_cv_deplibs_check_method
-test -z "$deplibs_check_method" && deplibs_check_method=unknown
-])# AC_DEPLIBS_CHECK_METHOD
-
-
-# AC_PROG_NM
-# ----------
-# find the pathname to a BSD-compatible name lister
-AC_DEFUN([AC_PROG_NM],
-[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM,
-[if test -n "$NM"; then
- # Let the user override the test.
- lt_cv_path_NM="$NM"
-else
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- tmp_nm="$ac_dir/${ac_tool_prefix}nm"
- if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
- # Check to see if the nm accepts a BSD-compat flag.
- # Adding the `sed 1q' prevents false positives on HP-UX, which says:
- # nm: unknown option "B" ignored
- # Tru64's nm complains that /dev/null is an invalid object file
- case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
- */dev/null* | *'Invalid file or object type'*)
- lt_cv_path_NM="$tmp_nm -B"
- break
- ;;
- *)
- case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
- */dev/null*)
- lt_cv_path_NM="$tmp_nm -p"
- break
- ;;
- *)
- lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
- continue # so that we can try to find one that supports BSD flags
- ;;
- esac
- esac
- fi
- done
- IFS="$lt_save_ifs"
- test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
-fi])
-NM="$lt_cv_path_NM"
-])# AC_PROG_NM
-
-
-# AC_CHECK_LIBM
-# -------------
-# check for math library
-AC_DEFUN([AC_CHECK_LIBM],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-LIBM=
-case $host in
-*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
- # These system don't have libm, or don't need it
- ;;
-*-ncr-sysv4.3*)
- AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
- AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
- ;;
-*)
- AC_CHECK_LIB(m, cos, LIBM="-lm")
- ;;
-esac
-])# AC_CHECK_LIBM
-
-
-# AC_LIBLTDL_CONVENIENCE([DIRECTORY])
-# -----------------------------------
-# sets LIBLTDL to the link flags for the libltdl convenience library and
-# LTDLINCL to the include flags for the libltdl header and adds
-# --enable-ltdl-convenience to the configure arguments. Note that LIBLTDL
-# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If
-# DIRECTORY is not provided, it is assumed to be `libltdl'. LIBLTDL will
-# be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with
-# '${top_srcdir}/' (note the single quotes!). If your package is not
-# flat and you're not using automake, define top_builddir and
-# top_srcdir appropriately in the Makefiles.
-AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
- case $enable_ltdl_convenience in
- no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
- "") enable_ltdl_convenience=yes
- ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
- esac
- LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
- LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
- # For backwards non-gettext consistent compatibility...
- INCLTDL="$LTDLINCL"
-])# AC_LIBLTDL_CONVENIENCE
-
-
-# AC_LIBLTDL_INSTALLABLE([DIRECTORY])
-# -----------------------------------
-# sets LIBLTDL to the link flags for the libltdl installable library and
-# LTDLINCL to the include flags for the libltdl header and adds
-# --enable-ltdl-install to the configure arguments. Note that LIBLTDL
-# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If
-# DIRECTORY is not provided and an installed libltdl is not found, it is
-# assumed to be `libltdl'. LIBLTDL will be prefixed with '${top_builddir}/'
-# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single
-# quotes!). If your package is not flat and you're not using automake,
-# define top_builddir and top_srcdir appropriately in the Makefiles.
-# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
-AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
- AC_CHECK_LIB(ltdl, lt_dlinit,
- [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
- [if test x"$enable_ltdl_install" = xno; then
- AC_MSG_WARN([libltdl not installed, but installation disabled])
- else
- enable_ltdl_install=yes
- fi
- ])
- if test x"$enable_ltdl_install" = x"yes"; then
- ac_configure_args="$ac_configure_args --enable-ltdl-install"
- LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
- LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
- else
- ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
- LIBLTDL="-lltdl"
- LTDLINCL=
- fi
- # For backwards non-gettext consistent compatibility...
- INCLTDL="$LTDLINCL"
-])# AC_LIBLTDL_INSTALLABLE
-
-
-# AC_LIBTOOL_CXX
-# --------------
-# enable support for C++ libraries
-AC_DEFUN([AC_LIBTOOL_CXX],
-[AC_REQUIRE([_LT_AC_LANG_CXX])
-])# AC_LIBTOOL_CXX
-
-
-# _LT_AC_LANG_CXX
-# ---------------
-AC_DEFUN([_LT_AC_LANG_CXX],
-[AC_REQUIRE([AC_PROG_CXX])
-AC_REQUIRE([_LT_AC_PROG_CXXCPP])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX])
-])# _LT_AC_LANG_CXX
-
-# _LT_AC_PROG_CXXCPP
-# ---------------
-AC_DEFUN([_LT_AC_PROG_CXXCPP],
-[
-AC_REQUIRE([AC_PROG_CXX])
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
- ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
- (test "X$CXX" != "Xg++"))) ; then
- AC_PROG_CXXCPP
-fi
-])# _LT_AC_PROG_CXXCPP
-
-# AC_LIBTOOL_F77
-# --------------
-# enable support for Fortran 77 libraries
-AC_DEFUN([AC_LIBTOOL_F77],
-[AC_REQUIRE([_LT_AC_LANG_F77])
-])# AC_LIBTOOL_F77
-
-
-# _LT_AC_LANG_F77
-# ---------------
-AC_DEFUN([_LT_AC_LANG_F77],
-[AC_REQUIRE([AC_PROG_F77])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77])
-])# _LT_AC_LANG_F77
-
-
-# AC_LIBTOOL_GCJ
-# --------------
-# enable support for GCJ libraries
-AC_DEFUN([AC_LIBTOOL_GCJ],
-[AC_REQUIRE([_LT_AC_LANG_GCJ])
-])# AC_LIBTOOL_GCJ
-
-
-# _LT_AC_LANG_GCJ
-# ---------------
-AC_DEFUN([_LT_AC_LANG_GCJ],
-[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
- [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
- [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
- [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
- [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
- [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ])
-])# _LT_AC_LANG_GCJ
-
-
-# AC_LIBTOOL_RC
-# --------------
-# enable support for Windows resource files
-AC_DEFUN([AC_LIBTOOL_RC],
-[AC_REQUIRE([LT_AC_PROG_RC])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC])
-])# AC_LIBTOOL_RC
-
-
-# AC_LIBTOOL_LANG_C_CONFIG
-# ------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined. Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG])
-AC_DEFUN([_LT_AC_LANG_C_CONFIG],
-[lt_save_CC="$CC"
-AC_LANG_PUSH(C)
-
-# Source file extension for C test sources.
-ac_ext=c
-
-# Object file extension for compiled C test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;\n"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}\n'
-
-_LT_AC_SYS_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-#
-# Check for any special shared library compilation flags.
-#
-_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)=
-if test "$GCC" = no; then
- case $host_os in
- sco3.2v5*)
- _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf'
- ;;
- esac
-fi
-if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then
- AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries])
- if echo "$old_CC $old_CFLAGS " | grep "[[ ]]$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[ ]]" >/dev/null; then :
- else
- AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure])
- _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no
- fi
-fi
-
-
-#
-# Check to make sure the static flag actually works.
-#
-AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works],
- _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1),
- $_LT_AC_TAGVAR(lt_prog_compiler_static, $1),
- [],
- [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
-
-
-AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-AC_LIBTOOL_SYS_LIB_STRIP
-AC_LIBTOOL_DLOPEN_SELF($1)
-
-# Report which librarie types wil actually be built
-AC_MSG_CHECKING([if libtool supports shared libraries])
-AC_MSG_RESULT([$can_build_shared])
-
-AC_MSG_CHECKING([whether to build shared libraries])
-test "$can_build_shared" = "no" && enable_shared=no
-
-# On AIX, shared libraries and static libraries use the same namespace, and
-# are all built from PIC.
-case "$host_os" in
-aix3*)
- test "$enable_shared" = yes && enable_static=no
- if test -n "$RANLIB"; then
- archive_cmds="$archive_cmds~\$RANLIB \$lib"
- postinstall_cmds='$RANLIB $lib'
- fi
- ;;
-
-aix4* | aix5*)
- if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
- test "$enable_shared" = yes && enable_static=no
- fi
- ;;
-esac
-AC_MSG_RESULT([$enable_shared])
-
-AC_MSG_CHECKING([whether to build static libraries])
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-AC_MSG_RESULT([$enable_static])
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_POP
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_C_CONFIG
-
-
-# AC_LIBTOOL_LANG_CXX_CONFIG
-# --------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined. Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])
-AC_DEFUN([_LT_AC_LANG_CXX_CONFIG],
-[AC_LANG_PUSH(C++)
-AC_REQUIRE([AC_PROG_CXX])
-AC_REQUIRE([_LT_AC_PROG_CXXCPP])
-
-_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_AC_TAGVAR(allow_undefined_flag, $1)=
-_LT_AC_TAGVAR(always_export_symbols, $1)=no
-_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
-_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_direct, $1)=no
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
-_LT_AC_TAGVAR(hardcode_automatic, $1)=no
-_LT_AC_TAGVAR(module_cmds, $1)=
-_LT_AC_TAGVAR(module_expsym_cmds, $1)=
-_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_AC_TAGVAR(no_undefined_flag, $1)=
-_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Dependencies to place before and after the object being linked:
-_LT_AC_TAGVAR(predep_objects, $1)=
-_LT_AC_TAGVAR(postdep_objects, $1)=
-_LT_AC_TAGVAR(predeps, $1)=
-_LT_AC_TAGVAR(postdeps, $1)=
-_LT_AC_TAGVAR(compiler_lib_search_path, $1)=
-
-# Source file extension for C++ test sources.
-ac_ext=cc
-
-# Object file extension for compiled C++ test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;\n"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_AC_SYS_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC=$CC
-lt_save_LD=$LD
-lt_save_GCC=$GCC
-GCC=$GXX
-lt_save_with_gnu_ld=$with_gnu_ld
-lt_save_path_LD=$lt_cv_path_LD
-if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
- lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
-else
- unset lt_cv_prog_gnu_ld
-fi
-if test -n "${lt_cv_path_LDCXX+set}"; then
- lt_cv_path_LD=$lt_cv_path_LDCXX
-else
- unset lt_cv_path_LD
-fi
-test -z "${LDCXX+set}" || LD=$LDCXX
-CC=${CXX-"c++"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-
-# We don't want -fno-exception wen compiling C++ code, so set the
-# no_builtin_flag separately
-if test "$GXX" = yes; then
- _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-else
- _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-fi
-
-if test "$GXX" = yes; then
- # Set up default GNU C++ configuration
-
- AC_PROG_LD
-
- # Check if GNU C++ uses GNU ld as the underlying linker, since the
- # archiving commands below assume that GNU ld is being used.
- if test "$with_gnu_ld" = yes; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
- # If archive_cmds runs LD, not CC, wlarc should be empty
- # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
- # investigate it a little bit more. (MM)
- wlarc='${wl}'
-
- # ancient GNU ld didn't support --whole-archive et. al.
- if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
- grep 'no-whole-archive' > /dev/null; then
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
- fi
- else
- with_gnu_ld=no
- wlarc=
-
- # A generic and very simple default shared library creation
- # command for GNU C++ for the case where it uses the native
- # linker, instead of GNU ld. If possible, this setting should
- # overridden to take advantage of the native linker features on
- # the platform it is being used on.
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
- fi
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-
-else
- GXX=no
- with_gnu_ld=no
- wlarc=
-fi
-
-# PORTME: fill in a description of your system's C++ link characteristics
-AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-_LT_AC_TAGVAR(ld_shlibs, $1)=yes
-case $host_os in
- aix3*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- aix4* | aix5*)
- if test "$host_cpu" = ia64; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- exp_sym_flag='-Bexport'
- no_entry_flag=""
- else
- aix_use_runtimelinking=no
-
- # Test if we are trying to use run time linking or normal
- # AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
- case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
- for ld_flag in $LDFLAGS; do
- case $ld_flag in
- *-brtl*)
- aix_use_runtimelinking=yes
- break
- ;;
- esac
- done
- esac
-
- exp_sym_flag='-bexport'
- no_entry_flag='-bnoentry'
- fi
-
- # When large executables or shared objects are built, AIX ld can
- # have problems creating the table of contents. If linking a library
- # or program results in "error TOC overflow" add -mminimal-toc to
- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
- _LT_AC_TAGVAR(archive_cmds, $1)=''
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-
- if test "$GXX" = yes; then
- case $host_os in aix4.[[012]]|aix4.[[012]].*)
- # We only want to do this on AIX 4.2 and lower, the check
- # below for broken collect2 doesn't work under 4.3+
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" && \
- strings "$collect2name" | grep resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- else
- # We have old collect2
- _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
- fi
- esac
- shared_flag='-shared'
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag="$shared_flag "'${wl}-G'
- fi
- else
- # not using gcc
- if test "$host_cpu" = ia64; then
- # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
- # chokes on -Wl,-G. The following line is correct:
- shared_flag='-G'
- else
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag='${wl}-G'
- else
- shared_flag='${wl}-bM:SRE'
- fi
- fi
- fi
-
- # It seems that -bexpall does not export symbols beginning with
- # underscore (_), so it is better to generate a list of symbols to export.
- _LT_AC_TAGVAR(always_export_symbols, $1)=yes
- if test "$aix_use_runtimelinking" = yes; then
- # Warning - without using the other runtime loading flags (-brtl),
- # -berok will link without error, but may produce a broken library.
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
- # Determine the default libpath from the value encoded in an empty executable.
- _LT_AC_SYS_LIBPATH_AIX
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
- else
- if test "$host_cpu" = ia64; then
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
- else
- # Determine the default libpath from the value encoded in an empty executable.
- _LT_AC_SYS_LIBPATH_AIX
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
- # -berok will link without error, but may produce a broken library.
- _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
- # -bexpall does not export symbols beginning with underscore (_)
- _LT_AC_TAGVAR(always_export_symbols, $1)=yes
- # Exported symbols can be pulled into shared objects from archives
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
- # This is similar to how AIX traditionally builds it's shared libraries.
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
- fi
- fi
- ;;
- chorus*)
- case $cc_basename in
- *)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
-
-
- cygwin* | mingw* | pw32*)
- # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
- # as there is no search path for DLLs.
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- _LT_AC_TAGVAR(always_export_symbols, $1)=no
- _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
- cp $export_symbols $output_objdir/$soname.def;
- else
- echo EXPORTS > $output_objdir/$soname.def;
- cat $export_symbols >> $output_objdir/$soname.def;
- fi~
- $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- darwin* | rhapsody*)
- case "$host_os" in
- rhapsody* | darwin1.[[012]])
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
- ;;
- *) # Darwin 1.3 on
- if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
- else
- case ${MACOSX_DEPLOYMENT_TARGET} in
- 10.[[012]])
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
- ;;
- 10.*)
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
- ;;
- esac
- fi
- ;;
- esac
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-
- if test "$GXX" = yes ; then
- lt_int_apple_cc_single_mod=no
- output_verbose_link_cmd='echo'
- if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then
- lt_int_apple_cc_single_mod=yes
- fi
- if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
- fi
- _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
- if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- else
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- fi
- _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- else
- case $cc_basename in
- xlc*)
- output_verbose_link_cmd='echo'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
- _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- ;;
- *)
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- fi
- ;;
-
- dgux*)
- case $cc_basename in
- ec++*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- ghcx*)
- # Green Hills C++ Compiler
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
- freebsd[[12]]*)
- # C++ shared libraries reported to be fairly broken before switch to ELF
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- freebsd-elf*)
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- ;;
- freebsd* | kfreebsd*-gnu | dragonfly*)
- # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
- # conventions
- _LT_AC_TAGVAR(ld_shlibs, $1)=yes
- ;;
- gnu*)
- ;;
- hpux9*)
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
- # but as the default
- # location of the library.
-
- case $cc_basename in
- CC*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- aCC*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[[-]]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$GXX" = yes; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
- ;;
- hpux10*|hpux11*)
- if test $with_gnu_ld = no; then
- case "$host_cpu" in
- hppa*64*)
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- ;;
- ia64*)
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- ;;
- *)
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- ;;
- esac
- fi
- case "$host_cpu" in
- hppa*64*)
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
- ia64*)
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
- # but as the default
- # location of the library.
- ;;
- *)
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
- # but as the default
- # location of the library.
- ;;
- esac
-
- case $cc_basename in
- CC*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- aCC*)
- case "$host_cpu" in
- hppa*64*|ia64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- esac
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$GXX" = yes; then
- if test $with_gnu_ld = no; then
- case "$host_cpu" in
- ia64*|hppa*64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- esac
- fi
- else
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
- ;;
- irix5* | irix6*)
- case $cc_basename in
- CC*)
- # SGI C++
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-
- # Archives containing C++ object files must be created using
- # "CC -ar", where "CC" is the IRIX C++ compiler. This is
- # necessary to make sure instantiated templates are included
- # in the archive.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
- ;;
- *)
- if test "$GXX" = yes; then
- if test "$with_gnu_ld" = no; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
- fi
- fi
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
- ;;
- esac
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- ;;
- linux*)
- case $cc_basename in
- KCC*)
- # Kuck and Associates, Inc. (KAI) C++ Compiler
-
- # KCC will only create a shared library if the output file
- # ends with ".so" (or ".sl" for HP-UX), so rename the library
- # to its proper name (with version) after linking.
- _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
- # Archives containing C++ object files must be created using
- # "CC -Bstatic", where "CC" is the KAI C++ compiler.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
- ;;
- icpc*)
- # Intel C++
- with_gnu_ld=yes
- # version 8.0 and above of icpc choke on multiply defined symbols
- # if we add $predep_objects and $postdep_objects, however 7.1 and
- # earlier do not add the objects themselves.
- case `$CC -V 2>&1` in
- *"Version 7."*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- ;;
- *) # Version 8.0 or newer
- tmp_idyn=
- case $host_cpu in
- ia64*) tmp_idyn=' -i_dynamic';;
- esac
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- ;;
- esac
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
- ;;
- pgCC*)
- # Portland Group C++ compiler
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive,`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- ;;
- cxx*)
- # Compaq C++
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
-
- runpath_var=LD_RUN_PATH
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- esac
- ;;
- lynxos*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- m88k*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- mvs*)
- case $cc_basename in
- cxx*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
- wlarc=
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- fi
- # Workaround some broken pre-1.5 toolchains
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
- ;;
- openbsd2*)
- # C++ shared libraries are fairly broken
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- openbsd*)
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- fi
- output_verbose_link_cmd='echo'
- ;;
- osf3*)
- case $cc_basename in
- KCC*)
- # Kuck and Associates, Inc. (KAI) C++ Compiler
-
- # KCC will only create a shared library if the output file
- # ends with ".so" (or ".sl" for HP-UX), so rename the library
- # to its proper name (with version) after linking.
- _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Archives containing C++ object files must be created using
- # "CC -Bstatic", where "CC" is the KAI C++ compiler.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
-
- ;;
- RCC*)
- # Rational C++ 2.4.1
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- cxx*)
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$GXX" = yes && test "$with_gnu_ld" = no; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-
- else
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
- ;;
- osf4* | osf5*)
- case $cc_basename in
- KCC*)
- # Kuck and Associates, Inc. (KAI) C++ Compiler
-
- # KCC will only create a shared library if the output file
- # ends with ".so" (or ".sl" for HP-UX), so rename the library
- # to its proper name (with version) after linking.
- _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Archives containing C++ object files must be created using
- # the KAI C++ compiler.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
- ;;
- RCC*)
- # Rational C++ 2.4.1
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- cxx*)
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
- echo "-hidden">> $lib.exp~
- $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~
- $rm $lib.exp'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$GXX" = yes && test "$with_gnu_ld" = no; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-
- else
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
- ;;
- psos*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- sco*)
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- case $cc_basename in
- CC*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
- sunos4*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.x
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- lcc*)
- # Lucid
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
- solaris*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.2, 5.x and Centerline C++
- _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- case $host_os in
- solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
- *)
- # The C++ compiler is used as linker so we must use $wl
- # flag to pass the commands to the underlying system
- # linker. We must also pass each convience library through
- # to the system linker between allextract/defaultextract.
- # The C++ compiler will combine linker options so we
- # cannot just pass the convience library names through
- # without $wl.
- # Supported since Solaris 2.6 (maybe 2.5.1?)
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract'
- ;;
- esac
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-
- # Archives containing C++ object files must be created using
- # "CC -xar", where "CC" is the Sun C++ compiler. This is
- # necessary to make sure instantiated templates are included
- # in the archive.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
- ;;
- gcx*)
- # Green Hills C++ Compiler
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-
- # The C++ compiler must be used to create the archive.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
- ;;
- *)
- # GNU C++ compiler with Solaris linker
- if test "$GXX" = yes && test "$with_gnu_ld" = no; then
- _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
- if $CC --version | grep -v '^2\.7' > /dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
- else
- # g++ 2.7 appears to require `-G' NOT `-shared' on this
- # platform.
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
- fi
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
- fi
- ;;
- esac
- ;;
- sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*)
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- ;;
- tandem*)
- case $cc_basename in
- NCC*)
- # NonStop-UX NCC 3.20
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
- vxworks*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
-esac
-AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
-test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-_LT_AC_TAGVAR(GCC, $1)="$GXX"
-_LT_AC_TAGVAR(LD, $1)="$LD"
-
-AC_LIBTOOL_POSTDEP_PREDEP($1)
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-AC_LIBTOOL_SYS_LIB_STRIP
-AC_LIBTOOL_DLOPEN_SELF($1)
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_POP
-CC=$lt_save_CC
-LDCXX=$LD
-LD=$lt_save_LD
-GCC=$lt_save_GCC
-with_gnu_ldcxx=$with_gnu_ld
-with_gnu_ld=$lt_save_with_gnu_ld
-lt_cv_path_LDCXX=$lt_cv_path_LD
-lt_cv_path_LD=$lt_save_path_LD
-lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
-lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
-])# AC_LIBTOOL_LANG_CXX_CONFIG
-
-# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME])
-# ------------------------
-# Figure out "hidden" library dependencies from verbose
-# compiler output when linking a shared library.
-# Parse the compiler output and extract the necessary
-# objects, libraries and library flags.
-AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[
-dnl we can't use the lt_simple_compile_test_code here,
-dnl because it contains code intended for an executable,
-dnl not a library. It's possible we should let each
-dnl tag define a new lt_????_link_test_code variable,
-dnl but it's only used here...
-ifelse([$1],[],[cat > conftest.$ac_ext <<EOF
-int a;
-void foo (void) { a = 0; }
-EOF
-],[$1],[CXX],[cat > conftest.$ac_ext <<EOF
-class Foo
-{
-public:
- Foo (void) { a = 0; }
-private:
- int a;
-};
-EOF
-],[$1],[F77],[cat > conftest.$ac_ext <<EOF
- subroutine foo
- implicit none
- integer*4 a
- a=0
- return
- end
-EOF
-],[$1],[GCJ],[cat > conftest.$ac_ext <<EOF
-public class foo {
- private int a;
- public void bar (void) {
- a = 0;
- }
-};
-EOF
-])
-dnl Parse the compiler output and extract the necessary
-dnl objects, libraries and library flags.
-if AC_TRY_EVAL(ac_compile); then
- # Parse the compiler output and extract the necessary
- # objects, libraries and library flags.
-
- # Sentinel used to keep track of whether or not we are before
- # the conftest object file.
- pre_test_object_deps_done=no
-
- # The `*' in the case matches for architectures that use `case' in
- # $output_verbose_cmd can trigger glob expansion during the loop
- # eval without this substitution.
- output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`"
-
- for p in `eval $output_verbose_link_cmd`; do
- case $p in
-
- -L* | -R* | -l*)
- # Some compilers place space between "-{L,R}" and the path.
- # Remove the space.
- if test $p = "-L" \
- || test $p = "-R"; then
- prev=$p
- continue
- else
- prev=
- fi
-
- if test "$pre_test_object_deps_done" = no; then
- case $p in
- -L* | -R*)
- # Internal compiler library paths should come after those
- # provided the user. The postdeps already come after the
- # user supplied libs so there is no need to process them.
- if test -z "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then
- _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
- else
- _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${_LT_AC_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
- fi
- ;;
- # The "-l" case would never come before the object being
- # linked, so don't bother handling this case.
- esac
- else
- if test -z "$_LT_AC_TAGVAR(postdeps, $1)"; then
- _LT_AC_TAGVAR(postdeps, $1)="${prev}${p}"
- else
- _LT_AC_TAGVAR(postdeps, $1)="${_LT_AC_TAGVAR(postdeps, $1)} ${prev}${p}"
- fi
- fi
- ;;
-
- *.$objext)
- # This assumes that the test object file only shows up
- # once in the compiler output.
- if test "$p" = "conftest.$objext"; then
- pre_test_object_deps_done=yes
- continue
- fi
-
- if test "$pre_test_object_deps_done" = no; then
- if test -z "$_LT_AC_TAGVAR(predep_objects, $1)"; then
- _LT_AC_TAGVAR(predep_objects, $1)="$p"
- else
- _LT_AC_TAGVAR(predep_objects, $1)="$_LT_AC_TAGVAR(predep_objects, $1) $p"
- fi
- else
- if test -z "$_LT_AC_TAGVAR(postdep_objects, $1)"; then
- _LT_AC_TAGVAR(postdep_objects, $1)="$p"
- else
- _LT_AC_TAGVAR(postdep_objects, $1)="$_LT_AC_TAGVAR(postdep_objects, $1) $p"
- fi
- fi
- ;;
-
- *) ;; # Ignore the rest.
-
- esac
- done
-
- # Clean up.
- rm -f a.out a.exe
-else
- echo "libtool.m4: error: problem compiling $1 test program"
-fi
-
-$rm -f confest.$objext
-
-case " $_LT_AC_TAGVAR(postdeps, $1) " in
-*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;;
-esac
-])# AC_LIBTOOL_POSTDEP_PREDEP
-
-# AC_LIBTOOL_LANG_F77_CONFIG
-# ------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined. Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)])
-AC_DEFUN([_LT_AC_LANG_F77_CONFIG],
-[AC_REQUIRE([AC_PROG_F77])
-AC_LANG_PUSH(Fortran 77)
-
-_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_AC_TAGVAR(allow_undefined_flag, $1)=
-_LT_AC_TAGVAR(always_export_symbols, $1)=no
-_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
-_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_direct, $1)=no
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
-_LT_AC_TAGVAR(hardcode_automatic, $1)=no
-_LT_AC_TAGVAR(module_cmds, $1)=
-_LT_AC_TAGVAR(module_expsym_cmds, $1)=
-_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_AC_TAGVAR(no_undefined_flag, $1)=
-_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for f77 test sources.
-ac_ext=f
-
-# Object file extension for compiled f77 test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code=" subroutine t\n return\n end\n"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code=" program t\n end\n"
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_AC_SYS_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-CC=${F77-"f77"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-
-AC_MSG_CHECKING([if libtool supports shared libraries])
-AC_MSG_RESULT([$can_build_shared])
-
-AC_MSG_CHECKING([whether to build shared libraries])
-test "$can_build_shared" = "no" && enable_shared=no
-
-# On AIX, shared libraries and static libraries use the same namespace, and
-# are all built from PIC.
-case "$host_os" in
-aix3*)
- test "$enable_shared" = yes && enable_static=no
- if test -n "$RANLIB"; then
- archive_cmds="$archive_cmds~\$RANLIB \$lib"
- postinstall_cmds='$RANLIB $lib'
- fi
- ;;
-aix4* | aix5*)
- if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
- test "$enable_shared" = yes && enable_static=no
- fi
- ;;
-esac
-AC_MSG_RESULT([$enable_shared])
-
-AC_MSG_CHECKING([whether to build static libraries])
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-AC_MSG_RESULT([$enable_static])
-
-test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-_LT_AC_TAGVAR(GCC, $1)="$G77"
-_LT_AC_TAGVAR(LD, $1)="$LD"
-
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-AC_LIBTOOL_SYS_LIB_STRIP
-
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_POP
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_F77_CONFIG
-
-
-# AC_LIBTOOL_LANG_GCJ_CONFIG
-# --------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined. Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)])
-AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],
-[AC_LANG_SAVE
-
-# Source file extension for Java test sources.
-ac_ext=java
-
-# Object file extension for compiled Java test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="class foo {}\n"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }\n'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_AC_SYS_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-CC=${GCJ-"gcj"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-
-# GCJ did not exist at the time GCC didn't implicitly link libc in.
-_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-
-_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-
-AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-AC_LIBTOOL_SYS_LIB_STRIP
-AC_LIBTOOL_DLOPEN_SELF($1)
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_RESTORE
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_GCJ_CONFIG
-
-
-# AC_LIBTOOL_LANG_RC_CONFIG
-# --------------------------
-# Ensure that the configuration vars for the Windows resource compiler are
-# suitably defined. Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)])
-AC_DEFUN([_LT_AC_LANG_RC_CONFIG],
-[AC_LANG_SAVE
-
-# Source file extension for RC test sources.
-ac_ext=rc
-
-# Object file extension for compiled RC test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
-
-# Code to be used in simple link tests
-lt_simple_link_test_code="$lt_simple_compile_test_code"
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_AC_SYS_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-CC=${RC-"windres"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_RESTORE
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_RC_CONFIG
-
-
-# AC_LIBTOOL_CONFIG([TAGNAME])
-# ----------------------------
-# If TAGNAME is not passed, then create an initial libtool script
-# with a default configuration from the untagged config vars. Otherwise
-# add code to config.status for appending the configuration named by
-# TAGNAME from the matching tagged config vars.
-AC_DEFUN([AC_LIBTOOL_CONFIG],
-[# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
- # See if we are running on zsh, and set the options which allow our commands through
- # without removal of \ escapes.
- if test -n "${ZSH_VERSION+set}" ; then
- setopt NO_GLOB_SUBST
- fi
- # Now quote all the things that may contain metacharacters while being
- # careful not to overquote the AC_SUBSTed values. We take copies of the
- # variables and quote the copies for generation of the libtool script.
- for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
- SED SHELL STRIP \
- libname_spec library_names_spec soname_spec extract_expsyms_cmds \
- old_striplib striplib file_magic_cmd finish_cmds finish_eval \
- deplibs_check_method reload_flag reload_cmds need_locks \
- lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
- lt_cv_sys_global_symbol_to_c_name_address \
- sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
- old_postinstall_cmds old_postuninstall_cmds \
- _LT_AC_TAGVAR(compiler, $1) \
- _LT_AC_TAGVAR(CC, $1) \
- _LT_AC_TAGVAR(LD, $1) \
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \
- _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \
- _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \
- _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \
- _LT_AC_TAGVAR(old_archive_cmds, $1) \
- _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \
- _LT_AC_TAGVAR(predep_objects, $1) \
- _LT_AC_TAGVAR(postdep_objects, $1) \
- _LT_AC_TAGVAR(predeps, $1) \
- _LT_AC_TAGVAR(postdeps, $1) \
- _LT_AC_TAGVAR(compiler_lib_search_path, $1) \
- _LT_AC_TAGVAR(archive_cmds, $1) \
- _LT_AC_TAGVAR(archive_expsym_cmds, $1) \
- _LT_AC_TAGVAR(postinstall_cmds, $1) \
- _LT_AC_TAGVAR(postuninstall_cmds, $1) \
- _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \
- _LT_AC_TAGVAR(allow_undefined_flag, $1) \
- _LT_AC_TAGVAR(no_undefined_flag, $1) \
- _LT_AC_TAGVAR(export_symbols_cmds, $1) \
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \
- _LT_AC_TAGVAR(hardcode_automatic, $1) \
- _LT_AC_TAGVAR(module_cmds, $1) \
- _LT_AC_TAGVAR(module_expsym_cmds, $1) \
- _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \
- _LT_AC_TAGVAR(exclude_expsyms, $1) \
- _LT_AC_TAGVAR(include_expsyms, $1); do
-
- case $var in
- _LT_AC_TAGVAR(old_archive_cmds, $1) | \
- _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \
- _LT_AC_TAGVAR(archive_cmds, $1) | \
- _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \
- _LT_AC_TAGVAR(module_cmds, $1) | \
- _LT_AC_TAGVAR(module_expsym_cmds, $1) | \
- _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \
- _LT_AC_TAGVAR(export_symbols_cmds, $1) | \
- extract_expsyms_cmds | reload_cmds | finish_cmds | \
- postinstall_cmds | postuninstall_cmds | \
- old_postinstall_cmds | old_postuninstall_cmds | \
- sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
- # Double-quote double-evaled strings.
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
- ;;
- *)
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
- ;;
- esac
- done
-
- case $lt_echo in
- *'\[$]0 --fallback-echo"')
- lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'`
- ;;
- esac
-
-ifelse([$1], [],
- [cfgfile="${ofile}T"
- trap "$rm \"$cfgfile\"; exit 1" 1 2 15
- $rm -f "$cfgfile"
- AC_MSG_NOTICE([creating $ofile])],
- [cfgfile="$ofile"])
-
- cat <<__EOF__ >> "$cfgfile"
-ifelse([$1], [],
-[#! $SHELL
-
-# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
-# Free Software Foundation, Inc.
-#
-# This file is part of GNU Libtool:
-# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# A sed program that does not truncate output.
-SED=$lt_SED
-
-# Sed that helps us avoid accidentally triggering echo(1) options like -n.
-Xsed="$SED -e 1s/^X//"
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# The names of the tagged configurations supported by this script.
-available_tags=
-
-# ### BEGIN LIBTOOL CONFIG],
-[# ### BEGIN LIBTOOL TAG CONFIG: $tagname])
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)
-
-# Whether or not to disallow shared libs when runtime libs are static
-allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-host_os=$host_os
-
-# The build system.
-build_alias=$build_alias
-build=$build
-build_os=$build_os
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# A language-specific compiler.
-CC=$lt_[]_LT_AC_TAGVAR(compiler, $1)
-
-# Is the compiler the GNU C compiler?
-with_gcc=$_LT_AC_TAGVAR(GCC, $1)
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_[]_LT_AC_TAGVAR(LD, $1)
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# Do we need the lib prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Whether dlopen is supported.
-dlopen_support=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1)
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1)
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1)
-
-# Library versioning type.
-version_type=$version_type
-
-# Format of library name prefix.
-libname_spec=$lt_libname_spec
-
-# List of archive names. First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME.
-library_names_spec=$lt_library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$lt_soname_spec
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1)
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1)
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)
-
-# Commands used to build and install a shared archive.
-archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1)
-archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1)
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1)
-module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1)
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1)
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1)
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$lt_deplibs_check_method
-
-# Command to use when deplibs_check_method == file_magic.
-file_magic_cmd=$lt_file_magic_cmd
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1)
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1)
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration
-global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-
-# Transform the output of nm in a C name address pair
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
-
-# If ld is used when linking, flag to hardcode \$libdir into
-# a binary during linking. This must work even if \$libdir does
-# not exist.
-hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
-
-# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1)
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)
-
-# Set to yes if building a shared library automatically hardcodes DIR into the library
-# and all subsequent libraries and executables linked against it.
-hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1)
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1)
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)"
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1)
-
-# Symbols that must always be exported.
-include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1)
-
-ifelse([$1],[],
-[# ### END LIBTOOL CONFIG],
-[# ### END LIBTOOL TAG CONFIG: $tagname])
-
-__EOF__
-
-ifelse([$1],[], [
- case $host_os in
- aix3*)
- cat <<\EOF >> "$cfgfile"
-
-# AIX sometimes has problems with the GCC collect2 program. For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
- COLLECT_NAMES=
- export COLLECT_NAMES
-fi
-EOF
- ;;
- esac
-
- # We use sed instead of cat because bash on DJGPP gets confused if
- # if finds mixed CR/LF and LF-only lines. Since sed operates in
- # text mode, it properly converts lines to CR/LF. This bash problem
- # is reportedly fixed, but why not run on old versions too?
- sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
-
- mv -f "$cfgfile" "$ofile" || \
- (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
- chmod +x "$ofile"
-])
-else
- # If there is no Makefile yet, we rely on a make rule to execute
- # `config.status --recheck' to rerun these tests and create the
- # libtool script then.
- ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
- if test -f "$ltmain_in"; then
- test -f Makefile && make "$ltmain"
- fi
-fi
-])# AC_LIBTOOL_CONFIG
-
-
-# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])
-# -------------------------------------------
-AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI],
-[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
-
-_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-
-if test "$GCC" = yes; then
- _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-
- AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
- lt_cv_prog_compiler_rtti_exceptions,
- [-fno-rtti -fno-exceptions], [],
- [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
-fi
-])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
-
-
-# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-# ---------------------------------
-AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
-[AC_REQUIRE([AC_CANONICAL_HOST])
-AC_REQUIRE([AC_PROG_NM])
-AC_REQUIRE([AC_OBJEXT])
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-AC_MSG_CHECKING([command to parse $NM output from $compiler object])
-AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
-[
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix. What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[[BCDEGRST]]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
-
-# Transform an extracted symbol line into a proper C declaration
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
-
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
-
-# Define system-specific variables.
-case $host_os in
-aix*)
- symcode='[[BCDT]]'
- ;;
-cygwin* | mingw* | pw32*)
- symcode='[[ABCDGISTW]]'
- ;;
-hpux*) # Its linker distinguishes data from code symbols
- if test "$host_cpu" = ia64; then
- symcode='[[ABCDEGRST]]'
- fi
- lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
- lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
- ;;
-linux*)
- if test "$host_cpu" = ia64; then
- symcode='[[ABCDGIRSTW]]'
- lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
- lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
- fi
- ;;
-irix* | nonstopux*)
- symcode='[[BCDEGRST]]'
- ;;
-osf*)
- symcode='[[BCDEGQRST]]'
- ;;
-solaris* | sysv5*)
- symcode='[[BDRT]]'
- ;;
-sysv4)
- symcode='[[DFNSTU]]'
- ;;
-esac
-
-# Handle CRLF in mingw tool chain
-opt_cr=
-case $build_os in
-mingw*)
- opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
- ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
- symcode='[[ABCDGIRSTW]]' ;;
-esac
-
-# Try without a prefix undercore, then with it.
-for ac_symprfx in "" "_"; do
-
- # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
- symxfrm="\\1 $ac_symprfx\\2 \\2"
-
- # Write the raw and C identifiers.
- lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
-
- # Check to see that the pipe works correctly.
- pipe_works=no
-
- rm -f conftest*
- cat > conftest.$ac_ext <<EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-EOF
-
- if AC_TRY_EVAL(ac_compile); then
- # Now try to grab the symbols.
- nlist=conftest.nm
- if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
- # Try sorting and uniquifying the output.
- if sort "$nlist" | uniq > "$nlist"T; then
- mv -f "$nlist"T "$nlist"
- else
- rm -f "$nlist"T
- fi
-
- # Make sure that we snagged all the symbols we need.
- if grep ' nm_test_var$' "$nlist" >/dev/null; then
- if grep ' nm_test_func$' "$nlist" >/dev/null; then
- cat <<EOF > conftest.$ac_ext
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-EOF
- # Now generate the symbol file.
- eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
-
- cat <<EOF >> conftest.$ac_ext
-#if defined (__STDC__) && __STDC__
-# define lt_ptr_t void *
-#else
-# define lt_ptr_t char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-const struct {
- const char *name;
- lt_ptr_t address;
-}
-lt_preloaded_symbols[[]] =
-{
-EOF
- $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
- cat <<\EOF >> conftest.$ac_ext
- {0, (lt_ptr_t) 0}
-};
-
-#ifdef __cplusplus
-}
-#endif
-EOF
- # Now try linking the two files.
- mv conftest.$ac_objext conftstm.$ac_objext
- lt_save_LIBS="$LIBS"
- lt_save_CFLAGS="$CFLAGS"
- LIBS="conftstm.$ac_objext"
- CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
- if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
- pipe_works=yes
- fi
- LIBS="$lt_save_LIBS"
- CFLAGS="$lt_save_CFLAGS"
- else
- echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
- fi
- else
- echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
- fi
- else
- echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
- fi
- else
- echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
- cat conftest.$ac_ext >&5
- fi
- rm -f conftest* conftst*
-
- # Do not use the global_symbol_pipe unless it works.
- if test "$pipe_works" = yes; then
- break
- else
- lt_cv_sys_global_symbol_pipe=
- fi
-done
-])
-if test -z "$lt_cv_sys_global_symbol_pipe"; then
- lt_cv_sys_global_symbol_to_cdecl=
-fi
-if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
- AC_MSG_RESULT(failed)
-else
- AC_MSG_RESULT(ok)
-fi
-]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-
-
-# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])
-# ---------------------------------------
-AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC],
-[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=
-_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=
-
-AC_MSG_CHECKING([for $compiler option to produce PIC])
- ifelse([$1],[CXX],[
- # C++ specific cases for pic, static, wl, etc.
- if test "$GXX" = yes; then
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
- case $host_os in
- aix*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- fi
- ;;
- amigaos*)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the `-m68020' flag to GCC prevents building anything better,
- # like `-m68040'.
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
- ;;
- beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
- mingw* | os2* | pw32*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
- ;;
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
- ;;
- *djgpp*)
- # DJGPP does not support shared libraries at all
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
- ;;
- sysv4*MP*)
- if test -d /usr/nec; then
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
- fi
- ;;
- hpux*)
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case "$host_cpu" in
- hppa*64*|ia64*)
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- esac
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- esac
- else
- case $host_os in
- aix4* | aix5*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- else
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
- chorus*)
- case $cc_basename in
- cxch68*)
- # Green Hills C++ Compiler
- # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
- ;;
- esac
- ;;
- darwin*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- case $cc_basename in
- xlc*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- ;;
- esac
- ;;
- dgux*)
- case $cc_basename in
- ec++*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- ;;
- ghcx*)
- # Green Hills C++ Compiler
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
- ;;
- *)
- ;;
- esac
- ;;
- freebsd* | kfreebsd*-gnu | dragonfly*)
- # FreeBSD uses GNU C++
- ;;
- hpux9* | hpux10* | hpux11*)
- case $cc_basename in
- CC*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
- if test "$host_cpu" != ia64; then
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
- fi
- ;;
- aCC*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
- case "$host_cpu" in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
- ;;
- esac
- ;;
- *)
- ;;
- esac
- ;;
- irix5* | irix6* | nonstopux*)
- case $cc_basename in
- CC*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- # CC pic flag -KPIC is the default.
- ;;
- *)
- ;;
- esac
- ;;
- linux*)
- case $cc_basename in
- KCC*)
- # KAI C++ Compiler
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- icpc* | ecpc*)
- # Intel C++
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
- ;;
- pgCC*)
- # Portland Group C++ compiler.
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
- ;;
- cxx*)
- # Compaq C++
- # Make sure the PIC flag is empty. It appears that all Alpha
- # Linux and Compaq Tru64 Unix objects are PIC.
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
- *)
- ;;
- esac
- ;;
- lynxos*)
- ;;
- m88k*)
- ;;
- mvs*)
- case $cc_basename in
- cxx*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
- ;;
- *)
- ;;
- esac
- ;;
- netbsd*)
- ;;
- osf3* | osf4* | osf5*)
- case $cc_basename in
- KCC*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
- ;;
- RCC*)
- # Rational C++ 2.4.1
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
- ;;
- cxx*)
- # Digital/Compaq C++
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- # Make sure the PIC flag is empty. It appears that all Alpha
- # Linux and Compaq Tru64 Unix objects are PIC.
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
- *)
- ;;
- esac
- ;;
- psos*)
- ;;
- sco*)
- case $cc_basename in
- CC*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- *)
- ;;
- esac
- ;;
- solaris*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.2, 5.x and Centerline C++
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
- ;;
- gcx*)
- # Green Hills C++ Compiler
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
- ;;
- *)
- ;;
- esac
- ;;
- sunos4*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.x
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
- lcc*)
- # Lucid
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
- ;;
- *)
- ;;
- esac
- ;;
- tandem*)
- case $cc_basename in
- NCC*)
- # NonStop-UX NCC 3.20
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- ;;
- *)
- ;;
- esac
- ;;
- unixware*)
- ;;
- vxworks*)
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
- ;;
- esac
- fi
-],
-[
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
- case $host_os in
- aix*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- fi
- ;;
-
- amigaos*)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the `-m68020' flag to GCC prevents building anything better,
- # like `-m68040'.
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
- ;;
-
- beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
-
- mingw* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
- ;;
-
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
- ;;
-
- msdosdjgpp*)
- # Just because we use GCC doesn't mean we suddenly get shared libraries
- # on systems that don't support them.
- _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
- enable_shared=no
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
- fi
- ;;
-
- hpux*)
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case "$host_cpu" in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- esac
- ;;
-
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- esac
- else
- # PORTME Check for flag to pass linker flags through the system compiler.
- case $host_os in
- aix*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- else
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
- darwin*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- case $cc_basename in
- xlc*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- ;;
- esac
- ;;
-
- mingw* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
- ;;
-
- hpux9* | hpux10* | hpux11*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case "$host_cpu" in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
- ;;
- esac
- # Is there a better lt_prog_compiler_static that works with the bundled CC?
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
- ;;
-
- irix5* | irix6* | nonstopux*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- # PIC (with -KPIC) is the default.
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
-
- newsos6)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
-
- linux*)
- case $cc_basename in
- icc* | ecc*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
- ;;
- pgcc* | pgf77* | pgf90*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
- ;;
- ccc*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- # All Alpha code is PIC.
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
- esac
- ;;
-
- osf3* | osf4* | osf5*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- # All OSF/1 code is PIC.
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
-
- sco3.2v5*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn'
- ;;
-
- solaris*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- case $cc_basename in
- f77* | f90* | f95*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
- esac
- ;;
-
- sunos4*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
-
- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec ;then
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- fi
- ;;
-
- unicos*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
- ;;
-
- uts4*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
-
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
- ;;
- esac
- fi
-])
-AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
- AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
- _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1),
- [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],
- [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
- "" | " "*) ;;
- *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;;
- esac],
- [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
- _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
-fi
-case "$host_os" in
- # For platforms which do not support PIC, -DPIC is meaningless:
- *djgpp*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])"
- ;;
-esac
-])
-
-
-# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
-# ------------------------------------
-# See if the linker supports building shared libraries.
-AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],
-[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-ifelse([$1],[CXX],[
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- case $host_os in
- aix4* | aix5*)
- # If we're using GNU nm, then we don't want the "-C" option.
- # -C means demangle to AIX nm, but means don't demangle with GNU nm
- if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
- else
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
- fi
- ;;
- pw32*)
- _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
- ;;
- cygwin* | mingw*)
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([[^ ]]*\) [[^ ]]*/\1 DATA/;/^I /d;/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
- ;;
- *)
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- ;;
- esac
-],[
- runpath_var=
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=
- _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
- _LT_AC_TAGVAR(archive_cmds, $1)=
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
- _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=
- _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
- _LT_AC_TAGVAR(thread_safe_flag_spec, $1)=
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
- _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
- _LT_AC_TAGVAR(hardcode_automatic, $1)=no
- _LT_AC_TAGVAR(module_cmds, $1)=
- _LT_AC_TAGVAR(module_expsym_cmds, $1)=
- _LT_AC_TAGVAR(always_export_symbols, $1)=no
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- # include_expsyms should be a list of space-separated symbols to be *always*
- # included in the symbol list
- _LT_AC_TAGVAR(include_expsyms, $1)=
- # exclude_expsyms can be an extended regexp of symbols to exclude
- # it will be wrapped by ` (' and `)$', so one must not match beginning or
- # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
- # as well as any symbol that contains `d'.
- _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_"
- # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
- # platforms (ab)use it in PIC code, but their linkers get confused if
- # the symbol is explicitly referenced. Since portable code cannot
- # rely on this symbol name, it's probably fine to never include it in
- # preloaded symbol tables.
- extract_expsyms_cmds=
- # Just being paranoid about ensuring that cc_basename is set.
- _LT_CC_BASENAME([$compiler])
- case $host_os in
- cygwin* | mingw* | pw32*)
- # FIXME: the MSVC++ port hasn't been tested in a loooong time
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- if test "$GCC" != yes; then
- with_gnu_ld=no
- fi
- ;;
- openbsd*)
- with_gnu_ld=no
- ;;
- esac
-
- _LT_AC_TAGVAR(ld_shlibs, $1)=yes
- if test "$with_gnu_ld" = yes; then
- # If archive_cmds runs LD, not CC, wlarc should be empty
- wlarc='${wl}'
-
- # Set some defaults for GNU ld with shared library support. These
- # are reset later if shared libraries are not supported. Putting them
- # here allows them to be overridden if necessary.
- runpath_var=LD_RUN_PATH
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
- # ancient GNU ld didn't support --whole-archive et. al.
- if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
- fi
- supports_anon_versioning=no
- case `$LD -v 2>/dev/null` in
- *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
- *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
- *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
- *\ 2.11.*) ;; # other 2.11 versions
- *) supports_anon_versioning=yes ;;
- esac
-
- # See if GNU ld supports shared libraries.
- case $host_os in
- aix3* | aix4* | aix5*)
- # On AIX/PPC, the GNU linker is very broken
- if test "$host_cpu" != ia64; then
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support. If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-EOF
- fi
- ;;
-
- amigaos*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-
- # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
- # that the semantics of dynamic libraries on AmigaOS, at least up
- # to version 4, is to share data among multiple programs linked
- # with the same dynamic library. Since this doesn't match the
- # behavior of shared libraries on other platforms, we can't use
- # them.
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
-
- beos*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
- # support --undefined. This deserves some investigation. FIXME
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- cygwin* | mingw* | pw32*)
- # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
- # as there is no search path for DLLs.
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- _LT_AC_TAGVAR(always_export_symbols, $1)=no
- _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
-
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
- cp $export_symbols $output_objdir/$soname.def;
- else
- echo EXPORTS > $output_objdir/$soname.def;
- cat $export_symbols >> $output_objdir/$soname.def;
- fi~
- $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- linux*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- tmp_addflag=
- case $cc_basename,$host_cpu in
- pgcc*) # Portland Group C compiler
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive,`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag'
- ;;
- pgf77* | pgf90* ) # Portland Group f77 and f90 compilers
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive,`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag -Mnomain' ;;
- ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
- tmp_addflag=' -i_dynamic' ;;
- efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
- tmp_addflag=' -i_dynamic -nofor_main' ;;
- ifc* | ifort*) # Intel Fortran compiler
- tmp_addflag=' -nofor_main' ;;
- esac
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
- if test $supports_anon_versioning = yes; then
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- $echo "local: *; };" >> $output_objdir/$libname.ver~
- $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
- fi
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
- solaris* | sysv5*)
- if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- cat <<EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-EOF
- elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- sunos4*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- wlarc=
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- *)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
-
- if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then
- runpath_var=
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
- fi
- else
- # PORTME fill in a description of your system's linker (not GNU ld)
- case $host_os in
- aix3*)
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- _LT_AC_TAGVAR(always_export_symbols, $1)=yes
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
- # Note: this linker hardcodes the directories in LIBPATH if there
- # are no directories specified by -L.
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- if test "$GCC" = yes && test -z "$link_static_flag"; then
- # Neither direct hardcoding nor static linking is supported with a
- # broken collect2.
- _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
- fi
- ;;
-
- aix4* | aix5*)
- if test "$host_cpu" = ia64; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- exp_sym_flag='-Bexport'
- no_entry_flag=""
- else
- # If we're using GNU nm, then we don't want the "-C" option.
- # -C means demangle to AIX nm, but means don't demangle with GNU nm
- if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
- else
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
- fi
- aix_use_runtimelinking=no
-
- # Test if we are trying to use run time linking or normal
- # AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
- case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
- for ld_flag in $LDFLAGS; do
- if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
- aix_use_runtimelinking=yes
- break
- fi
- done
- esac
-
- exp_sym_flag='-bexport'
- no_entry_flag='-bnoentry'
- fi
-
- # When large executables or shared objects are built, AIX ld can
- # have problems creating the table of contents. If linking a library
- # or program results in "error TOC overflow" add -mminimal-toc to
- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
- _LT_AC_TAGVAR(archive_cmds, $1)=''
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-
- if test "$GCC" = yes; then
- case $host_os in aix4.[[012]]|aix4.[[012]].*)
- # We only want to do this on AIX 4.2 and lower, the check
- # below for broken collect2 doesn't work under 4.3+
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" && \
- strings "$collect2name" | grep resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- else
- # We have old collect2
- _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
- fi
- esac
- shared_flag='-shared'
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag="$shared_flag "'${wl}-G'
- fi
- else
- # not using gcc
- if test "$host_cpu" = ia64; then
- # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
- # chokes on -Wl,-G. The following line is correct:
- shared_flag='-G'
- else
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag='${wl}-G'
- else
- shared_flag='${wl}-bM:SRE'
- fi
- fi
- fi
-
- # It seems that -bexpall does not export symbols beginning with
- # underscore (_), so it is better to generate a list of symbols to export.
- _LT_AC_TAGVAR(always_export_symbols, $1)=yes
- if test "$aix_use_runtimelinking" = yes; then
- # Warning - without using the other runtime loading flags (-brtl),
- # -berok will link without error, but may produce a broken library.
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
- # Determine the default libpath from the value encoded in an empty executable.
- _LT_AC_SYS_LIBPATH_AIX
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
- else
- if test "$host_cpu" = ia64; then
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
- else
- # Determine the default libpath from the value encoded in an empty executable.
- _LT_AC_SYS_LIBPATH_AIX
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
- # -berok will link without error, but may produce a broken library.
- _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
- # -bexpall does not export symbols beginning with underscore (_)
- _LT_AC_TAGVAR(always_export_symbols, $1)=yes
- # Exported symbols can be pulled into shared objects from archives
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
- # This is similar to how AIX traditionally builds it's shared libraries.
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
- fi
- fi
- ;;
-
- amigaos*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- # see comment about different semantics on the GNU ld section
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
-
- bsdi[[45]]*)
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
- ;;
-
- cygwin* | mingw* | pw32*)
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- # Tell ltmain to make .lib files, not .a files.
- libext=lib
- # Tell ltmain to make .dll files, not .so files.
- shrext_cmds=".dll"
- # FIXME: Setting linknames here is a bad hack.
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
- # The linker will automatically build a .lib file if we build a DLL.
- _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'
- # FIXME: Should let the user specify the lib program.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs'
- _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
- _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
- ;;
-
- darwin* | rhapsody*)
- case "$host_os" in
- rhapsody* | darwin1.[[012]])
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
- ;;
- *) # Darwin 1.3 on
- if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
- else
- case ${MACOSX_DEPLOYMENT_TARGET} in
- 10.[[012]])
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
- ;;
- 10.*)
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
- ;;
- esac
- fi
- ;;
- esac
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
- if test "$GCC" = yes ; then
-# echo "G77=$G77,compiler=$compiler,tagname=$tagname"
- if test "$tagname" = "F77"; then
-_LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module -nostdlib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
- else
-_LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
- fi
- output_verbose_link_cmd='echo'
- _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- else
- case $cc_basename in
- xlc*)
- output_verbose_link_cmd='echo'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
- _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- ;;
- *)
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- fi
- ;;
-
- dgux*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- freebsd1*)
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
-
- # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
- # support. Future versions do this automatically, but an explicit c++rt0.o
- # does not break anything, and helps significantly (at the cost of a little
- # extra space).
- freebsd2.2*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
- freebsd2*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | kfreebsd*-gnu | dragonfly*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- hpux9*)
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- fi
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- ;;
-
- hpux10* | hpux11*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- case "$host_cpu" in
- hppa*64*|ia64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- else
- case "$host_cpu" in
- hppa*64*|ia64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- ;;
- esac
- fi
- if test "$with_gnu_ld" = no; then
- case "$host_cpu" in
- hppa*64*)
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
- ia64*)
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- ;;
- *)
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- ;;
- esac
- fi
- ;;
-
- irix5* | irix6* | nonstopux*)
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
- fi
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
- fi
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- newsos6)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- openbsd*)
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- else
- case $host_os in
- openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- ;;
- esac
- fi
- ;;
-
- os2*)
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
- _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
- ;;
-
- osf3*)
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- fi
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- ;;
-
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- else
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
- $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
-
- # Both c and cxx compiler support -rpath directly
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
- fi
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- ;;
-
- sco3.2v5*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- ;;
-
- solaris*)
- _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
- if test "$GCC" = yes; then
- wlarc='${wl}'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
- else
- wlarc=''
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
- fi
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- case $host_os in
- solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
- *)
- # The compiler driver will combine linker options so we
- # cannot just pass the convience library names through
- # without $wl, iff we do not link with $LD.
- # Luckily, gcc supports the same syntax we need for Sun Studio.
- # Supported since Solaris 2.6 (maybe 2.5.1?)
- case $wlarc in
- '')
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;;
- *)
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
- esac ;;
- esac
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
- ;;
-
- sunos4*)
- if test "x$host_vendor" = xsequent; then
- # Use $CC to link under sequent, because it throws in some extra .o
- # files that make .init and .fini sections work.
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
- fi
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- sysv4)
- case $host_vendor in
- sni)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true???
- ;;
- siemens)
- ## LD is ld it makes a PLAMLIB
- ## CC just makes a GrossModule.
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- ;;
- motorola)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
- ;;
- esac
- runpath_var='LD_RUN_PATH'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- sysv4.3*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- _LT_AC_TAGVAR(ld_shlibs, $1)=yes
- fi
- ;;
-
- sysv4.2uw2*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- hardcode_runpath_var=yes
- runpath_var=LD_RUN_PATH
- ;;
-
- sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*)
- _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text'
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- runpath_var='LD_RUN_PATH'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- sysv5*)
- _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
- # $CC -shared without GNU ld will not create a library from C++
- # object files and a static libstdc++, better avoid it by now
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- runpath_var='LD_RUN_PATH'
- ;;
-
- uts4*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- *)
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- fi
-])
-AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
-test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
- variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in
-x|xyes)
- # Assume -lc should be added
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
-
- if test "$enable_shared" = yes && test "$GCC" = yes; then
- case $_LT_AC_TAGVAR(archive_cmds, $1) in
- *'~'*)
- # FIXME: we may have to deal with multi-command sequences.
- ;;
- '$CC '*)
- # Test whether the compiler implicitly links with -lc since on some
- # systems, -lgcc has to come before -lc. If gcc already passes -lc
- # to ld, don't add -lc before -lgcc.
- AC_MSG_CHECKING([whether -lc should be explicitly linked in])
- $rm conftest*
- printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
- soname=conftest
- lib=conftest
- libobjs=conftest.$ac_objext
- deplibs=
- wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
- compiler_flags=-v
- linker_flags=-v
- verstring=
- output_objdir=.
- libname=conftest
- lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1)
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=
- if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
- then
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- else
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
- fi
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
- else
- cat conftest.err 1>&5
- fi
- $rm conftest*
- AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)])
- ;;
- esac
- fi
- ;;
-esac
-])# AC_LIBTOOL_PROG_LD_SHLIBS
-
-
-# _LT_AC_FILE_LTDLL_C
-# -------------------
-# Be careful that the start marker always follows a newline.
-AC_DEFUN([_LT_AC_FILE_LTDLL_C], [
-# /* ltdll.c starts here */
-# #define WIN32_LEAN_AND_MEAN
-# #include <windows.h>
-# #undef WIN32_LEAN_AND_MEAN
-# #include <stdio.h>
-#
-# #ifndef __CYGWIN__
-# # ifdef __CYGWIN32__
-# # define __CYGWIN__ __CYGWIN32__
-# # endif
-# #endif
-#
-# #ifdef __cplusplus
-# extern "C" {
-# #endif
-# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
-# #ifdef __cplusplus
-# }
-# #endif
-#
-# #ifdef __CYGWIN__
-# #include <cygwin/cygwin_dll.h>
-# DECLARE_CYGWIN_DLL( DllMain );
-# #endif
-# HINSTANCE __hDllInstance_base;
-#
-# BOOL APIENTRY
-# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
-# {
-# __hDllInstance_base = hInst;
-# return TRUE;
-# }
-# /* ltdll.c ends here */
-])# _LT_AC_FILE_LTDLL_C
-
-
-# _LT_AC_TAGVAR(VARNAME, [TAGNAME])
-# ---------------------------------
-AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])])
-
-
-# old names
-AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL])
-AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
-AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
-AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
-AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
-AC_DEFUN([AM_PROG_LD], [AC_PROG_LD])
-AC_DEFUN([AM_PROG_NM], [AC_PROG_NM])
-
-# This is just to silence aclocal about the macro not being used
-ifelse([AC_DISABLE_FAST_INSTALL])
-
-AC_DEFUN([LT_AC_PROG_GCJ],
-[AC_CHECK_TOOL(GCJ, gcj, no)
- test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
- AC_SUBST(GCJFLAGS)
-])
-
-AC_DEFUN([LT_AC_PROG_RC],
-[AC_CHECK_TOOL(RC, windres, no)
-])
-
-# NOTE: This macro has been submitted for inclusion into #
-# GNU Autoconf as AC_PROG_SED. When it is available in #
-# a released version of Autoconf we should remove this #
-# macro and use it instead. #
-# LT_AC_PROG_SED
-# --------------
-# Check for a fully-functional sed program, that truncates
-# as few characters as possible. Prefer GNU sed if found.
-AC_DEFUN([LT_AC_PROG_SED],
-[AC_MSG_CHECKING([for a sed that does not truncate output])
-AC_CACHE_VAL(lt_cv_path_SED,
-[# Loop through the user's path and test for sed and gsed.
-# Then use that list of sed's as ones to test for truncation.
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for lt_ac_prog in sed gsed; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
- lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
- fi
- done
- done
-done
-lt_ac_max=0
-lt_ac_count=0
-# Add /usr/xpg4/bin/sed as it is typically found on Solaris
-# along with /bin/sed that truncates output.
-for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
- test ! -f $lt_ac_sed && continue
- cat /dev/null > conftest.in
- lt_ac_count=0
- echo $ECHO_N "0123456789$ECHO_C" >conftest.in
- # Check for GNU sed and select it if it is found.
- if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
- lt_cv_path_SED=$lt_ac_sed
- break
- fi
- while true; do
- cat conftest.in conftest.in >conftest.tmp
- mv conftest.tmp conftest.in
- cp conftest.in conftest.nl
- echo >>conftest.nl
- $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
- cmp -s conftest.out conftest.nl || break
- # 10000 chars as input seems more than enough
- test $lt_ac_count -gt 10 && break
- lt_ac_count=`expr $lt_ac_count + 1`
- if test $lt_ac_count -gt $lt_ac_max; then
- lt_ac_max=$lt_ac_count
- lt_cv_path_SED=$lt_ac_sed
- fi
- done
-done
-])
-SED=$lt_cv_path_SED
-AC_MSG_RESULT([$SED])
-])
-
-# -*- mode: m4 -*-
-# Starlink M4 macros for autoconf
-# original starconf.m4, installed by starconf 1.3, rnum=1003000
-# DO NOT EDIT: it may be overwritten when starconf is next run
-
-
-# STAR_DEFAULTS(options='')
-# -------------------------
-# Defaults for Starlink configure.ac files. The optional OPTIONS
-# argument holds a space-separated list of option keywords, of which
-# the only ones at present are `per-package-dirs', which causes
-# applications and help to be installed in a package-specific
-# directory, and 'docs-only', which indicates that the component contains
-# only documentation.
-#
-# Certain features of this macro are documented in SSN/78, in particular
-# - Sets STARLINK
-# - Sets AM_FCFLAGS, AM_FFLAGS, AM_CFLAGS, AM_LDFLAGS to appropriate values
-# - Sets PACKAGE_VERSION_{MAJOR,MINOR,RELEASE,INTEGER}
-# The behaviour of these should not be changed without changing the
-# documentation, or without due consideration of the packages which use
-# the earlier behaviour. Everything else is, in principle, private
-# (not that that's going to stop folk).
-AC_DEFUN([STAR_DEFAULTS],
-[##
-m4_ifval([$1],
- [AC_FOREACH([Option], [$1],
- [m4_case(Option,
- [per-package-dirs], [_star_per_package_dirs=:],
- [docs-only], [m4_define([_poss_STAR_RESTFP_FIX],
- [])dnl
- _star_docs_only=:],
- [AC_FATAL([$0: unrecognised option $1])])
- ])],
- [])
-m4_ifdef([_poss_STAR_RESTFP_FIX],
- [],
- [m4_define([_poss_STAR_RESTFP_FIX], [_STAR_RESTFP_FIX])])
-
-m4_define([per_dir_PREFIX], [m4_ifdef([OVERRIDE_PREFIX],
- [OVERRIDE_PREFIX],
- [/stardev/git/starlink/star])])
-m4_define([per_dir_STARLINK], [m4_ifdef([OVERRIDE_STARLINK],
- [OVERRIDE_STARLINK],
- [/stardev/git/starlink/star])])
-
-test -n "$_star_per_package_dirs" || _star_per_package_dirs=false
-test -n "$_star_docs_only" || _star_docs_only=false
-
-
-# Ensure that STARLINK has a value, defaulting to
-# /stardev/git/starlink/star. Note that this directory may be
-# different from /star, and reflects the value of
-# STARCONF_DEFAULT_STARLINK that the `starconf' package was configured
-# with before its installation.
-#
-# We use $STARLINK as the location of any other Starlink tools we need
-# to use during the building of our packages, and for the location of
-# any manifests we need to check. It is permissable for it to be
-# different from $(prefix): this is partly because we have no way of
-# enforcing that the two be the same, since the user can set
-# prefix=xxx on the `make install' command line, and partly so that it
-# is possible to make a test version of a new package, using tools
-# from an old installation, but installing in a new place.
-#
-# However, we install software in /stardev/git/starlink/star by
-# default. This is so even if $STARLINK and STARCONF_DEFAULT_STARLINK
-# are different, because in this case we are planning to use a
-# previous installation in $STARLINK or $STARCONF_DEFAULT_STARLINK,
-# but install the newly built tool elsewhere.
-#
-# In most cases, including the most important case where we are
-# building the tree from scratch, in a checked out directory,
-# STARLINK, STARCONF_DEFAULT_STARLINK and STARCONF_DEFAULT_PREFIX will
-# all be the same. That's OK because a separate aspect of the build
-# process, respecting the various dependencies expresses in source
-# directories, ensures that we don't use (and install) any Starlink
-# tools in one component before that component has been build and
-# installed.
-
-AC_PREFIX_DEFAULT(per_dir_PREFIX)dnl
-
-test -n "$STARLINK" || STARLINK=per_dir_STARLINK
-
-# Handle the --with-starlink option. If --with-starlink is present
-# with no argument (the default), we do nothing as this simply
-# indicates that this is part of a Starlink tree. If it has an
-# argument, then this overrides the location of the Starlink tree.
-# Option --without-starlink or --with-starlink=no indicates that this
-# is being built _not_ as part of a Starlink build (that is, it's
-# being distributed as something other than a Starlink package). In
-# this case, the variable STARLINK is unset.
-AC_ARG_WITH(starlink,
- AS_HELP_STRING([--with-starlink],
- [Starlink tree to use (default ${STARLINK:=per_dir_STARLINK})]),
- [if test -z "$withval" -o "$withval" = yes; then
- : nothing needs to be done
- elif test "X$withval" = Xno; then
- unset STARLINK
- elif test -d "$withval"; then
- STARLINK="$withval"
- else
- AC_MSG_WARN([--with-starlink given nonexistent directory; ignored: using default $STARLINK instead])
- fi])
-if test -n "$STARLINK"; then
- AC_MSG_NOTICE([Starlink tree located at $STARLINK])
-else
- AC_MSG_NOTICE([Not being built as part of the Starlink tree])
-fi
-
-# Handle --without-stardocs. Don't build and install documentation.
-# Default is --with-stardocs.
-_star_build_docs=:
-AC_ARG_WITH(stardocs,
- AS_HELP_STRING([--without-stardocs],
- [Do not install built documentation (default --with)]),
- [if test -z "$withval"; then
- _star_build_docs=: # default
- elif test "X$withval" = Xno; then
- _star_build_docs=false
- elif test "X$withval" = Xyes; then
- _star_build_docs=:
- else
- AC_MSG_WARN([bad arg to --with-stardocs: using yes])
- _star_build_docs=:
- fi])
-
-if $_star_docs_only; then
- if $_star_build_docs; then
- : OK
- else
- AC_MSG_WARN([Building without documentation in a docs-only directory])
- fi
-fi
-
-# Everything depends on where /star is. Declare STARLINK as a
-# `precious variable'. Amongst other things, this will make
-# ./configure squeal if the package is re-configured with an
-# inconsistent value of this variable.
-AC_ARG_VAR(STARLINK, [Location of a current Starlink tree (used if necessary)])dnl
-
-# AC_SUBST the STARLINK variable. Macro AC_ARG_VAR does this anyway,
-# but automake doesn't know that (in 1.6 at least): however any
-# variable that automake finds has been AC_SUBSTed, it includes in
-# Makefile.in, and we need that.
-AC_SUBST(STARLINK)
-
-# Use the above information: $STARLINK indicates a preexisting
-# Starlink tree.
-#
-# Avoid doing anything if $STARLINK was unset above.
-#
-# Add library search paths using STAR_LDFLAGS. Do it this way, rather than
-# by defining LIBS (which is also a non-user variable): (a) these are
-# really options to the linker, rather than adjustments to the set of
-# libraries, so this makes sense; also (b) adding them to LIBS is too
-# late, since that adds -L _after_ any -l options found in *_LDADD.
-if test -n "$STARLINK"; then
- STAR_CPPFLAGS="-I$STARLINK/include"
- STAR_FCFLAGS="-I$STARLINK/include"
- STAR_FFLAGS="-I$STARLINK/include"
- STAR_LDFLAGS="-L$STARLINK/lib"
-else
- STAR_CPPFLAGS=
- STAR_FCFLAGS=
- STAR_FFLAGS=
- STAR_LDFLAGS=
-fi
-AC_SUBST(STAR_CPPFLAGS)
-AC_SUBST(STAR_FCFLAGS)
-AC_SUBST(STAR_FFLAGS)
-AC_SUBST(STAR_LDFLAGS)
-
-
-_poss_STAR_RESTFP_FIX
-
-# Installation directory options (these are no longer handled
-# by _STAR_EXTRADIR_COMMON). There should be an entry here for each of
-# Starlink's special installation locations.
-AC_SUBST([stardocsdir], ['${prefix}/docs'])dnl documentation
-AC_SUBST([staretcdir], ['${prefix}/etc'])dnl
-AC_SUBST([starexamplesdir], ['${prefix}/examples'])dnl
-AC_SUBST([starfacsdir], ['${prefix}/help'])dnl facilities files
-AC_SUBST([starhelpdir], ['${prefix}/help'])dnl other help files
-AC_SUBST([starnewsdir], ['${prefix}/news'])dnl
-
-# Certain directories are affected by the $_star_per_package_dir variable;
-# if it's true, then add the $PACKAGE_NAME to the directory.
-# The directories currently adjusted by this are bin and help;
-# there are others: see PWD's message of 2004-02-16
-# <http://www.jiscmail.ac.uk/cgi-bin/wa.exe?A2=ind0402&L=stardev&T=0&F=&S=&P=5153>
-if $_star_per_package_dirs; then
- bindir="$bindir/$PACKAGE_NAME"
- starhelpdir="$starhelpdir/$PACKAGE_NAME"
- staretcdir="$staretcdir/$PACKAGE_NAME"
- AC_MSG_NOTICE([[STAR_DEFAULTS] has option per-package-dirs:])
- AC_MSG_NOTICE([ bindir=$bindir starhelpdir=$starhelpdir staretcdir=$staretcdir])
- # Note that starfacsdir is unaffected by per-package-dirs -- facility
- # files must always be installed in .../help (this also facilitates
- # changing this installation location in future, to somewhere with a
- # more logical name than .../help).
-fi
-
-
-# Dependency declarations and checks.
-# Everything is dependent on starconf, so we don't have to declare that
-# for each package separately.
-# STAR_DEPENDENCIES_ATTRIBUTES is currently not used.
-STAR_DEPENDENCIES_ATTRIBUTES=''
-STAR_DEPENDENCIES_CHILDREN=''
-AC_SUBST(STAR_DEPENDENCIES_ATTRIBUTES)
-AC_SUBST(STAR_DEPENDENCIES_CHILDREN)
-
-# List of documentation. See [STAR_LATEX_DOCUMENTATION].
-# STAR_DOCUMENTATION is a list of document codes,
-STAR_DOCUMENTATION=
-AC_SUBST([STAR_DOCUMENTATION])
-
-# Create a PACKAGE_VERSION_INTEGER variable, which contains the
-# package's version number as an integer major*1e6+minor*1e3+release.
-eval [`echo $VERSION | sed -e 's/\([0-9]*\)[^0-9]*\([0-9]*\)[^0-9]*\([0-9]*\).*/PACKAGE_VERSION_MAJOR=\1; PACKAGE_VERSION_MINOR=\2; PACKAGE_VERSION_RELEASE=\3;/'`]
-test -n "$PACKAGE_VERSION_MAJOR" || PACKAGE_VERSION_MAJOR=0
-test -n "$PACKAGE_VERSION_MINOR" || PACKAGE_VERSION_MINOR=0
-test -n "$PACKAGE_VERSION_RELEASE" || PACKAGE_VERSION_RELEASE=0
-PACKAGE_VERSION_INTEGER=`expr $PACKAGE_VERSION_MAJOR \* 1000000 + $PACKAGE_VERSION_MINOR \* 1000 + $PACKAGE_VERSION_RELEASE`
-AC_SUBST(PACKAGE_VERSION_MAJOR)
-AC_SUBST(PACKAGE_VERSION_MINOR)
-AC_SUBST(PACKAGE_VERSION_RELEASE)
-AC_SUBST(PACKAGE_VERSION_INTEGER)
-dnl Don't put this into config.h -- subst a .h file if required.
-dnl May change this in future
-dnl AC_DEFINE_UNQUOTED([PACKAGE_VERSION_INTEGER], $PACKAGE_VERSION_INTEGER,
-dnl [Integer version number, in the form major*1e6+minor*1e3+release])
-
-# When we do dependency checking, using the dependencies declared in
-# the package's configure.ac, we do so by looking at what tools have
-# already been installed in the Starlink tree. The tree in question
-# is to be found under $STARLINK (see above), so we check that a
-# package is installed by checking that its manifest can be found in
-# $STARLINK/manifests. We don't AC_SUBST this.
-current_MANIFESTS=$STARLINK/manifests
-
-# When we install manifests, however, they should go in the
-# installation directory. Allow this to be defaulted from the environment.
-# In particular, if it is set to null in the environment, this will
-# suppress the installation of manifests.
-: ${STAR_MANIFEST_DIR='$(prefix)/manifests'}
-AC_SUBST(STAR_MANIFEST_DIR)
-
-# Each package updates the "starlink.version" file installed into the
-# manifests directory. This tracks the last git sha1 checkin for
-# the current code state by running the git show on the HEAD.
-# Define GIT as the program to run, but allow it to be overridden
-# (most likely by ":" to avoid the overhead).
-# Also requires that STAR_SOURCE_ROOT_DIR is defined to locate the
-# head of the source tree.
-: ${GIT='git'}
-if test "${GIT}" = "git"; then
- AC_PATH_PROG(GIT, git)
-fi
-AC_SUBST(GIT)
-
-: ${STAR_SOURCE_ROOT_DIR=''}
-AC_SUBST(STAR_SOURCE_ROOT_DIR)
-
-# Although PACKAGE_VERSION is a default output variable, it isn't
-# added as a Makefile variable by default. We need it below, however,
-# so add it now.
-AC_SUBST(PACKAGE_VERSION)
-
-# Initialise state of predist/postdist flags (see STAR_PREDIST_SOURCES).
-# The value of _star_predist_status must be inherited by any
-# ./configure run in a subdirectory, so that we there avoid the predist
-# test of starconf.status: in a pre-distribution state, this file must
-# be present in the component directory (where we are running
-# ./configure), but must not be present in any subdirectory.
-_star_predist_status=unknown
-PREDIST='#' # safe default
-AC_SUBST(PREDIST)
-
-# pax and/or tar are used in some install targets.
-# Note: value-if-not-found should be blank, so this can be tested for.
-AC_PATH_PROG(PAX, pax)
-AC_PATH_PROGS(TAR, [gnutar tar])
-
-ALL_TARGET=all-am-normal
-
-# Default $prefix. This is done by the standard autoconf configure, but at
-# a slightly later stage than this. Doing it here, as part of STAR_[]DEFAULTS
-# means that the defaulted value of $prefix can be used within the body of
-# the configure.ac, for example to pass it to a ./configure in a subdirectory.
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-])# STAR_DEFAULTS
-
-
-
-# STAR_MESSGEN([msgfile-list])
-# ----------------------------
-#
-# Handle generating message, error, and facility files.
-#
-# Declare that we will need to use the messgen utility. This macro
-# does not by itself cause the messgen rules to be included in the
-# makefile -- that is done by automake, when it sees a
-# 'include_MESSAGES' or 'noinst_MESSAGES' variable.
-#
-# The optional argument is a space-separated list of files, each of
-# which has a set of message declarations in it, in the format
-# prescribed by the messgen utility. If this is present, then the
-# named files are declared as pre-distribution files (the macro calls
-# STAR_PREDIST_SOURCES on them), and so the resulting configure script
-# should expect not to find them in an unpacked distribution. This is
-# useful as documentation or as a shortcut for calling the latter
-# macro, but recall that it is the presence of the automake
-# 'include_MESSAGES' variable which does the work.
-#
-# The macro may be called more than once if you have more than one
-# .msg file in the directory.
-#
-# The files listed in the '_MESSAGES' variable will often have to be
-# declared as `BUILT_SOURCES'.
-#
-# The macro also implicitly declares a `sourceset' dependency on the
-# messgen package.
-AC_DEFUN([STAR_MESSGEN],
- [#
- $_star_docs_only &&
- AC_MSG_ERROR([STAR[]_MESSGEN in docs-only directory])
- STAR_DECLARE_DEPENDENCIES([sourceset], [messgen])
- m4_ifval([$1], [STAR_PREDIST_SOURCES($1)])
- STAR_CHECK_PROGS(messgen)
-])# STAR_MESSGEN
-
-
-# STAR_PREDIST_SOURCES(source-files)
-# ----------------------------------
-#
-# Give a (space-separated) list of files which should exist only in
-# the pre-distribution (ie, repository checkout) state. If one of
-# these is found, then the substitution variable PREDIST is set to a
-# blank. We should find either all of the marker files or none of
-# them; if only some of the marker files are found, this is probably
-# an error of some type, so warn about it. This means, by the way,
-# that it is the presence or absence of the first marker file which
-# determines whether we are in the predist or postdist state, with the
-# rest providing consistency checks.
-#
-# The macro may be called more than once. Multiple calls are
-# equivalent to a single call with all the marker files in the list.
-# Automake checks that the files listed here are not in the list of
-# distributed files, and issues a warning if they are.
-AC_DEFUN([STAR_PREDIST_SOURCES],
-[m4_ifval([$1], [], [AC_FATAL([$0: called with no stamp file])])dnl
-_star_tmp='$1'
-for marker in $_star_tmp
-do
- if test -f $marker; then
- _star_predist_marker_present=:
- AC_MSG_NOTICE([found predist marker file $marker])
- else
- _star_predist_marker_present=false
- fi
- case $_star_predist_status in
- unknown)
- if $_star_predist_marker_present; then
- # we do want to build sourceset files
- _star_predist_status=predist
- PREDIST=
- AC_MSG_NOTICE([in pre-distribution state])
- else
- _star_predist_status=postdist
- PREDIST='#'
- AC_MSG_NOTICE([in post-distribution state])
- fi
- ;;
- predist)
- if $_star_predist_marker_present; then
- : OK
- else
- AC_MSG_WARN([Building predist, but marker file $marker is not present])
- fi
- ;;
- postdist)
- if $_star_predist_marker_present; then
- AC_MSG_WARN([In postdistribution state, but predist marker file $marker is present])
- fi
- ;;
- *)
- AC_MSG_ERROR([impossible predist status $_star_predist_status])
- ;;
- esac
-done
-])# STAR_PREDIST_SOURCES
-
-
-# STAR_CNF_COMPATIBLE_SYMBOLS
-# ---------------------------
-#
-# Work out what is required to have the Fortran compiler produce
-# library symbols which are compatible with those expected by the CNF
-# package. If you are building a library in which C code refers to
-# Fortran libraries, then you should call this macro, which possibly
-# adjusts the AM_FCFLAGS variable. That is, if you include cnf.h, you
-# should have this macro in the configure.ac.
-#
-# This macro deals with the following issue. The cnf.h header
-# includes a macro F77_EXTERNAL_NAME which mangles a C name into the
-# corresponding name the Fortran compiler would generate; this
-# generally means no more than appending a single underscore. As the
-# autoconf documentation for AC_FC_WRAPPERS points out, this is less
-# general than it could be, as some Fortrans fold symbols to
-# uppercase, and some (in particular g77) add two underscores to
-# symbols which already contain one (thus mangling 'ab' to 'ab_', but
-# 'a_b' to 'a_b__'). This behaviour would break the F77_EXTERNAL_NAME
-# macro, which is used throughout the Starlink code in both cases,
-# unless we compiled all the Starlink Fortran libraries in a mode which
-# suppressed this second underscore. Working out how to do that --
-# if it's necessary at all -- is what this macro does.
-#
-# The more restricted interface of F77_EXTERNAL_NAME is, by the way,
-# the reason why we cannot simply copy the FC_FUNC definition to the
-# cnf.h file as F77_EXTERNAL_NAME: the latter macro is used for
-# symbols both with and without an underscore.
-#
-# If we ever have to migrate the Starlink software to a Fortran which
-# does more complicated name mangling, we'll almost certainly have to
-# perform more serious surgery on cnf.h, using the results of
-# AC_FC_WRAPPERS, along with similar surgery on the code which invokes
-# it.
-#
-# This macro is designed to work with CNF, however it does _not_
-# require the cnf.h headers to be installed, because it should remain
-# callable at configuration time before _anything_ has been installed.
-# In the test code below, we therefore emulate the definition of
-# F77_EXTERNAL_NAME in cnf.h, which appends a single underscore.
-# to the end of C symbols.
-#
-AC_DEFUN([STAR_CNF_COMPATIBLE_SYMBOLS],
- [$_star_docs_only &&
- AC_MSG_ERROR([STAR[]_CNF_COMPATIBLE_SYMBOLS in docs-only dir])
- AC_CACHE_CHECK([how to make Fortran and C play nicely],
- [star_cv_cnf_compatible_symbols],
- [AC_REQUIRE([AC_PROG_FC])dnl
- AC_REQUIRE([AC_PROG_CC])dnl
- AC_LANG_PUSH([C])
- AC_LANG_CONFTEST([AC_LANG_SOURCE([
-void funcone_() { return; }
-void func_two_() { return; }
-])])
- if (eval $ac_compile) 2>&5
- then
- mv conftest.$ac_objext c-conftest.$ac_objext
- else
- AC_MSG_ERROR([cannot compile a C program!])
- fi
- AC_LANG_POP(C)
- AC_LANG_PUSH([Fortran])
- AC_LANG_CONFTEST([AC_LANG_SOURCE([
- PROGRAM conftest
- CALL funcone
- CALL func_two
- END
-])])
- star_cv_cnf_compatible_symbols=cantlink
- # The only Fortran we (need to) handle at present is
- # g77, which has a -fno-second-underscore option for
- # simplifying the mangling here. Other Fortrans we've
- # used do only the single-underscore mangling.
- for opt in "" "-fno-second-underscore"
- do
- if $FC $FCFLAGS $opt -o conftest conftest.f c-conftest.$ac_objext 2>&5
- then
- star_cv_cnf_compatible_symbols=$opt
- break
- fi
- done
- AC_LANG_POP([Fortran])
- rm -f conftest* c-conftest*
-])
- if test "$star_cv_cnf_compatible_symbols" = cantlink
- then
- AC_MSG_ERROR([cannot work out how])
- else
- STAR_FCFLAGS="$STAR_FCFLAGS $star_cv_cnf_compatible_symbols"
- STAR_FFLAGS="$STAR_FFLAGS $star_cv_cnf_compatible_symbols"
- fi
-])# STAR_CNF_COMPATIBLE_SYMBOLS
-
-
-# STAR_CNF_F2C_COMPATIBLE
-# -----------------------
-#
-# Work out if the compiler is using 'f2c' compatible calling conventions.
-#
-# The `f2c' calling conventions, used by GNU Fortran compilers, require
-# functions that return type REAL to actually return the C type 'double'
-# (there is also special handling of COMPLEX returns, but that's not supported
-# by CNF). When operating in 'non-f2c' mode such functions return the expected
-# C type 'float'.
-#
-# The effect of this macro is subsitute the variable REAL_FUNCTION_TYPE
-# to either float or double as required.
-#
-# This function is not infallable and will usually return float for GNU
-# compilers, as the calling convention seems to not matter on 32-bit platforms
-# for the test in use. A stronger test would be to attempt calling a intrinsic
-# function, which is supposed to fail. Non-GNU compilers should always
-# return float. However, this test is used as it is all that is required.
-#
-AC_DEFUN([STAR_CNF_F2C_COMPATIBLE],
- [$_star_docs_only &&
- AC_MSG_ERROR([STAR[]_CNF_F2C_SYMBOLS in docs-only dir])
- AC_CACHE_CHECK([if $FC is in strict f2c compatible mode],
- [star_cv_cnf_f2c_compatible],
- [AC_REQUIRE([AC_PROG_FC])dnl
- if test "$ac_cv_fc_compiler_gnu" = yes; then
- AC_REQUIRE([AC_PROG_CC])dnl
- AC_LANG_PUSH([C])
- AC_LANG_CONFTEST([AC_LANG_SOURCE([
-float fred_() {
- return 1.0f;
-}
-])])
- if (eval $ac_compile) 2>&5
- then
- mv conftest.$ac_objext c-conftest.$ac_objext
- else
- AC_MSG_ERROR([cannot compile a C function!])
- fi
- AC_LANG_POP(C)
- AC_LANG_PUSH([Fortran])
- AC_LANG_CONFTEST([AC_LANG_SOURCE([
- PROGRAM F2CTEST
- REAL FRED
- REAL R
- R = FRED()
- IF ( R .NE. 0.0 ) THEN
- WRITE(*,*) 'no'
- ELSE
- WRITE(*,*) 'yes'
- ENDIF
- END
-])])
- star_cv_cnf_f2c_compatible=yes
- $FC $FCFLAGS $opt -o conftest conftest.f c-conftest.$ac_objext 2>&5
- if test -r conftest
- then
- star_cv_cnf_f2c_compatible=`eval conftest | sed 's/\ //g'` > /dev/null
- else
- AC_MSG_ERROR([failed to link program])
- fi
- AC_LANG_POP([Fortran])
- rm -f conftest* c-conftest*
- else
- # Not a GNU compiler.
- star_cv_cnf_f2c_compatible=no
- fi
-])
- if test "$star_cv_cnf_f2c_compatible" = "yes"
- then
- AC_SUBST(REAL_FUNCTION_TYPE, double)
- else
- AC_SUBST(REAL_FUNCTION_TYPE, float)
- fi
-])# STAR_CNF_F2C_COMPATIBLE
-
-# STAR_CNF_BLANK_COMMON
-# ---------------------
-# Define the global symbol used to access the Fortran blank common block.
-# Usually under UNIX this is _BLNK__, but gfortran uses __BLNK__, so we
-# need to check for that. Gfortran is just detected by being a GNU compiler
-# and having "Fortran (GCC) 4.x[x].x[x]" as part of its --version output.
-#
-# The effect of this macro is to substitute BLANK_COMMON_SYMBOL with
-# the expected value.
-#
-AC_DEFUN([STAR_CNF_BLANK_COMMON],
- [AC_CACHE_CHECK([symbol used for blank common in Fortran],
- [star_cv_blank_common_symbol],
- [AC_REQUIRE([AC_PROG_FC])
- star_cv_blank_common_symbol=_BLNK__
- if test "$ac_cv_fc_compiler_gnu" = yes; then
- if "$FC" --version 2>&1 < /dev/null | grep 'GNU Fortran.*[[4-9]]\.[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*' > /dev/null; then
- star_cv_blank_common_symbol=__BLNK__
- fi
- fi])
- AC_SUBST([BLANK_COMMON_SYMBOL], $star_cv_blank_common_symbol )
-])# STAR_CNF_BLANK_COMMON
-
-# STAR_PRM_COMPATIBLE_SYMBOLS
-# ---------------------------
-#
-# See if any special flags are required to support PRM and the use of the
-# PRM_PAR constants. If a typeless BOZ descriptor is available (usually 'X)
-# then this macro will have no effect, however, if there's no typeless BOZ
-# support any special Fortran compiler flags that are required when using
-# PRM_PAR will be defined as part of the STAR_FCFLAGS and STAR_FFLAGS
-# variables.
-#
-# In fact this macro is only currently used for the gfortran and Solaris f95
-# compilers. Gfortran has no typeless BOZ support, so requires that the
-# -fno-range-check flag is set so that assigments to integers can silently
-# overflow (BOZ constants are replaced with their plain integer and floating
-# point equivalents). The Solaris f95 compiler doesn't allow assignments to
-# LOGICAL parameters, so we need to use the -f77 flag.
-#
-# In general this macro should be used by all packages that include PRM_PAR,
-# all monoliths are assumed to use this by default.
-#
-AC_DEFUN([STAR_PRM_COMPATIBLE_SYMBOLS],
- [$_star_docs_only &&
- AC_MSG_ERROR([STAR[]_PRM_COMPATIBLE_SYMBOLS in docs-only dir])
- AC_CACHE_CHECK([how to make compiler accept PRM constants],
- [star_cv_prm_compatible_symbols],
- [star_cv_prm_compatible_symbols="nocheck"
- AC_MSG_NOTICE([ ])
- AC_FC_HAVE_TYPELESS_BOZ 2>&5
- if test $ac_cv_fc_have_typeless_boz = no; then
- AC_FC_HAVE_OLD_TYPELESS_BOZ 2>&5
- if test $ac_cv_fc_have_old_typeless_boz = no; then
- # Test if -f77 works. Note need to clear the cached variables
- # for these tests.
- unset ac_cv_fc_have_typeless_boz
- unset ac_cv_fc_have_old_typeless_boz
- old_FCFLAGS="$FCFLAGS"
- FCFLAGS="-f77 $FCFLAGS"
- AC_FC_HAVE_TYPELESS_BOZ 2>&5
- if test $ac_cv_fc_have_typeless_boz = no; then
- AC_FC_HAVE_OLD_TYPELESS_BOZ 2>&5
- if test $ac_cv_fc_have_old_typeless_boz = no; then
- star_cv_prm_compatible_symbols="nocheck"
- else
- star_cv_prm_compatible_symbols="-f77"
- fi
- else
- star_cv_prm_compatible_symbols="-f77"
- fi
- FCFLAGS="$old_FCFLAGS"
- if test "$star_cv_prm_compatible_symbols" = "nocheck"; then
- # Test if "-fno-range-check" works.
- AC_REQUIRE([AC_PROG_FC])dnl
- AC_LANG_PUSH([Fortran])
- AC_LANG_CONFTEST([AC_LANG_SOURCE([
- PROGRAM conftest
- INTEGER*2 VAL__BADUW
- PARAMETER ( VAL__BADUW = 65535 )
- BYTE VAL__BADUB
- PARAMETER ( VAL__BADUB = 255 )
- END
-])])
- if $FC -c $FCFLAGS -fno-range-check -o conftest conftest.f 2>&5
- then
- star_cv_prm_compatible_symbols="-fno-range-check"
- fi
- AC_LANG_POP([Fortran])
- rm -f conftest.f
- fi
- else
- star_cv_prm_compatible_symbols=""
- fi
- else
- star_cv_prm_compatible_symbols=""
- fi])
- if test "$star_cv_prm_compatible_symbols" = "nocheck"; then
- AC_MSG_ERROR([cannot work out how])
- else
- STAR_FCFLAGS="$STAR_FCFLAGS $star_cv_prm_compatible_symbols"
- STAR_FFLAGS="$STAR_FFLAGS $star_cv_prm_compatible_symbols"
- fi
-])# STAR_PRM_COMPATIBLE_SYMBOLS
-
-# STAR_CNF_TRAIL_TYPE
-# -------------------
-#
-# Work out what type to use for the trailing lengths of character strings
-# passed from Fortran to C. See the "TRAIL" descriptions in SUN/209.
-#
-# For most compilers the maximum length of a string is limited to a 32bit
-# unsigned int, but for others, this can be a 64bit unsigned long. Currently
-# the only compilers with 64bit strings are 64bit Intel fortran and
-# Solaris studio12 with -m64.
-#
-# The test is only performed for 64bit compilers, all others are assumed
-# to use 32bit lengths. Various attempts to trap this issue permanently
-# using a test program have failed (especially for the Intel compiler), so the
-# actual test is to check for a known 64 bit compiler first and then try a
-# program that has had some success. Note no GNU compilers seem to have this
-# problem so they are never tested.
-#
-# The side-effect of this macro is to substitute TRAIL_TYPE with
-# the derived value and define TRAIL_TYPE. See "f77.h" in CNF.
-#
-AC_DEFUN([STAR_CNF_TRAIL_TYPE],
- [AC_CHECK_SIZEOF(void*)dnl
- AC_FC_HAVE_PERCENTLOC dnl
- AC_CACHE_CHECK([type used for Fortran string lengths],
- [star_cv_cnf_trail_type],
- [if test "$ac_cv_sizeof_voidp" = 8 -a "$ac_cv_fc_compiler_gnu" = no; then
- if "$FC" -V 2>&1 < /dev/null | grep 'Intel.*64' > /dev/null; then
- star_cv_cnf_trail_type=long
- elif "$FC" -V 2>&1 < /dev/null | grep 'Sun.*Fortran' > /dev/null; then
- star_cv_cnf_trail_type=long
- else
- AC_REQUIRE([AC_PROG_FC])dnl
- AC_LANG_PUSH([Fortran])
- if test "$ac_cv_fc_have_percentloc" = yes; then
- FORTRAN_GETLOC='%loc'
- else
- FORTRAN_GETLOC='loc'
- fi
- AC_LANG_CONFTEST([AC_LANG_SOURCE([
- program conftest
-
-C checks passing 4 byte character string lengths on 64bit compiler.
-
- integer*8 ip1, ip2
- integer*4 l1, l2
- integer dummy1, dummy2
- real dummy3, dummy4
- double precision dummy5, dummy6
-
- character str1*(1024)
- character str2*(2048)
-
- ip1 = $FORTRAN_GETLOC (str1)
- ip2 = $FORTRAN_GETLOC (str2)
-
- l1 = 1024
- l2 = 2048
-
- call report( dummy1, dummy2, %val(ip1), dummy3, dummy4,
- : %val(ip2), dummy5, dummy6,
- : %val(l1), %val(l2) )
-
- end
-
- subroutine report( dummy1, dummy2, str1, dummy3, dummy4,
- : str2, dummy5, dummy6 )
- integer dummy1, dummy2
- real dummy3, dummy4
- double precision dummy5, dummy6
-
- character*(*) str1
- character*(*) str2
-
- if ( [len(str1)] .eq. 1024 .and. [len(str2)] .eq. 2048 ) then
- print *, 'int'
- else
- print *, 'long'
- endif
- end
-])])
- star_cv_cnf_trail_type=int
- $FC $FCFLAGS $opt -o conftest conftest.f 2>&5
- if test -r conftest
- then
- star_cv_cnf_trail_type=`eval conftest | sed 's/\ //g'` > /dev/null
- else
- AC_MSG_ERROR([failed to link program])
- fi
- rm -f conftest*
- AC_LANG_POP([Fortran])
- fi
- else
-dnl sizeof(void *) != 8 or GNU so no problems.
- star_cv_cnf_trail_type=int
- fi
-])
- AC_SUBST([TRAIL_TYPE], $star_cv_cnf_trail_type )
- AC_DEFINE_UNQUOTED([TRAIL_TYPE], $star_cv_cnf_trail_type,
- [Type of Fortran CNF TRAIL argument] )
-])# STAR_CNF_TRAIL_TYPE
-
-# STAR_PATH_TCLTK([minversion=0], [options=''])
-# ---------------------------------------------
-#
-# Finds a tclsh and wish, and the associated libraries. Sets output variable
-# TCL_CFLAGS to the C compiler flags necessary to compile with Tcl, TCL_LIBS
-# to the required library flags, and TCLSH to the full path of the tclsh
-# executable, TCL_PREFIX to the installation root and TCL_LD_SEARCH_FLAGS
-# to the default search path for loading the shareable library; if Tk is
-# requested, it similarly sets TK_CFLAGS, TK_LIBS and WISH. Define the
-# cpp variable TCL_MISSING to 1 if Tcl is not available. Similar to
-# macro AC_PATH_XTRA.
-#
-# If argument MINVERSION is present, it specifies the minimum Tcl/Tk
-# version number required.
-#
-# The macro searches first in the path, and
-# then in a selection of platform-specific standard locations. The
-# configure option --with-tcl allows you to provide a path to a tclsh
-# binary, which is put at the head of the list of locations to search.
-# Option --without-tcl suppresses the search, and results in no
-# variables being substituted.
-#
-# If the argument OPTIONS is present, it is a space-separated list of
-# the words 'tk' or 'itcl'. If one or both of these is present, then
-# the macro will find a Tcl location which also has Tk or itcl
-# installed (note that the itcl test doesn't do anything at present).
-AC_DEFUN([STAR_PATH_TCLTK],
- [_star_use_tcl=:
- AC_ARG_WITH([tcl],
- AS_HELP_STRING([--with-tcl],
- [give path to tclsh (dir which contains binary)]),
- [if test "X$withval" = Xno; then
- _star_use_tcl=false
- elif test "X$withval" = Xyes; then
- _star_use_tcl=:
- else
- _star_use_tcl=:
- _star_try_tcldir=$withval
- fi])
- if $_star_use_tcl; then
- _star_searchfor=Tcl
- if expr "x m4_ifval([$2], [$2], []) " : 'x.* tk ' >/dev/null; then
- search_tk=:
- _star_searchfor="$_star_searchfor/Tk"
- else
- search_tk=false
- fi
- if expr "x m4_ifval([$2], [$2], []) " : 'x.* itcl ' >/dev/null; then
- search_itcl=:
- _star_searchfor="$_star_searchfor/itcl"
- echo "Searching for itcl does nothing so far!"
- else
- search_itcl=false
- fi
- AC_MSG_CHECKING([where to find $_star_searchfor m4_ifval([$1], [$1+], [(any version)])])
- AC_CACHE_VAL([star_cv_settcldir],
- [star_cv_settcldir=unknown
- reqversint=`echo m4_ifval([$1], [$1], 0.0)-0-0 | [sed 's/\([0-9]*\)[^0-9]*\([0-9]*\)[^0-9]*\([0-9]*\).*/10000 \1* 100 \2*+ \3+p/']|dc`
- tclsources=`echo $PATH | sed "s/$PATH_SEPARATOR/ /g"`
- stdsources='
-dnl Search in /usr and /usr/local at least
-/usr/bin
-/usr/local/bin
-dnl /opt/local and /sw are the default installation locations for OpenDarwin
-dnl and Fink on OSX
-/opt/local/bin
-/sw/bin'
- for d in $_star_try_tcldir $STARCONF_DEFAULT_STARLINK/bin $tclsources $stdsources
- do
- locok=:
- if test -d $d; then
- tcldir=`cd $d/..; pwd`
- test -f $d/tclsh -a -f $tcldir/include/tcl.h || locok=false
- else
- locok=false
- fi
- if $locok && $search_tk; then
- test -f $d/wish -a -f $tcldir/include/tk.h || locok=false
- fi
- if $locok && $search_itcl; then
- test -f $tcldir/lib/libitcl.aXXX || locok=false
- fi
- if $locok; then
- if test ! -f $tcldir/lib/tclConfig.sh; then
- echo "$tcldir/lib/tclConfig.sh unexpectedly missing"
- break
- fi
- if $search_tk && test ! -f $tcldir/lib/tkConfig.sh; then
- echo "$tcldir/lib/tkConfig.sh unexpectedly missing"
- break
- fi
- rm -f conftest.results
- # Run in a subshell, to isolate settings in tclConfig.sh
- # Send output to conftest.results, and return
- # 0 if all is ok
- (
- . $tcldir/lib/tclConfig.sh
- if $search_tk; then
- . $tcldir/lib/tkConfig.sh
- fi
- tclversint=`[echo $TCL_VERSION$TCL_PATCH_LEVEL-0-0 | sed 's/\([0-9]*\)[^0-9]*\([0-9]*\)[^0-9]*\([0-9]*\).*/10000 \1* 100 \2*+ \3+p/'|dc]`
- if test $tclversint -gt $reqversint; then
- # New enough version.
-
- # Dereference the tclsh and wish links -- the "->" _is_ standard,
- # mandated by POSIX.
- lslink=`ls -l $tcldir/bin/tclsh`
- tclsh_loc=`expr "x$lslink" : "x.*-> *\(.*\)"`
- if test -n "$tclsh_loc" -a -x "$tclsh_loc"; then
- : OK
- elif test -x "$tcldir/bin/tclsh"; then
- # Odd: either .../bin/tclsh isn't a link, or it doesn't point to an
- # executable. But .../bin/tclsh is OK, so use that.
- tclsh_loc="$tcldir/bin/tclsh"
- else
- # This really shouldn't happen, since we checked above that
- # $d/tclsh was executable. Still, it clearly has happened,
- # so don't go mad.
- echo "Warning: found Tcl libraries, but not tclsh!" >&2
- tclsh_loc=
- fi
-
- res="_star_tcldir=$tcldir;"
-
- # Make the TCL version number available.
- res="$res TCL_VERSION=\"$TCL_VERSION\";"
-
- # Export the TCL_PREFIX value.
- res="$res TCL_PREFIX=\"$TCL_PREFIX\";"
-
- # Export the TCL_LD_SEARCH_FLAGS value (need LIB_RUNTIME_DIR
- # which is part of the symbol).
- res="$res LIB_RUNTIME_DIR=\"$TCL_PREFIX/lib\";"
- res="$res TCL_LD_SEARCH_FLAGS=\"$TCL_LD_SEARCH_FLAGS\";"
-
- # These envs include $TCL_DBGX -- expand this out.
- eval "I=\"$TCL_INCLUDE_SPEC\"; L=\"$TCL_LIB_SPEC\""
- res="$res TCL_CFLAGS=\"$I\"; TCL_LIBS=\"$L\"; TCLSH=\"$tclsh_loc\";"
-
- if $search_tk; then
- # Same for wish
- lslink=`ls -l $tcldir/bin/wish`
- wish_loc=`expr "x$lslink" : "x.*-> *\(.*\)"`
- if test -n "$wish_loc" -a -x "$wish_loc"; then
- : OK
- elif test -x "$tcldir/bin/wish"; then
- wish_loc="$tcldir/bin/wish"
- else
- echo "Warning: found Tk libraries, but not wish!" >&2
- wish_loc=
- fi
- # These envs potentially include $TK_DBGX -- expand this out.
- eval "I=\"$TK_XINCLUDES\"; L=\"$TK_LIB_SPEC\""
- res="$res TK_CFLAGS=\"$I\"; TK_LIBS=\"$L\"; WISH=\"$wish_loc\";"
- fi
-
- # similarly for $search_itcl
-
- echo $res >conftest.results
- status=0
- else
- msg="$tcldir: found Tcl-$TCL_VERSION$TCL_PATCH_LEVEL"
- if $search_tk; then
- msg="$msg, Tk-$TK_VERSION$TK_PATCH_LEVEL"
- fi
- echo "$msg: older than required" >&2
- status=1
- fi
- exit $status
- )
- teststat=$?
- if test $teststat = 0; then
- star_cv_settcldir=`cat conftest.results`
- fi
- if test "$star_cv_settcldir" != unknown; then
- break
- fi
- fi # $locok
- done])
-
- if test "$star_cv_settcldir" = unknown; then
- AC_MSG_RESULT(unknown)
- else
- eval $star_cv_settcldir
- AC_MSG_RESULT($_star_tcldir)
- fi
- else # $_star_use_tcl
- AC_MSG_WARN(Compiling without Tcl/Tk)
- fi # $_star_use_tcl
-
- if $_star_use_tcl && test "$star_cv_settcldir" != unknown; then
- :
- else
- AC_DEFINE(TCL_MISSING, 1,
- [Define to 1 if no Tcl/Tk libraries can be found])
- fi
-
- AC_SUBST(TCL_VERSION)
-
- AC_SUBST(TCL_PREFIX)
-
- AC_SUBST(TCL_LD_SEARCH_FLAGS)
- AC_SUBST(TCL_CFLAGS)
- AC_SUBST(TCL_LIBS)
- AC_SUBST(TCLSH)
-
- AC_SUBST(TK_CFLAGS)
- AC_SUBST(TK_LIBS)
- AC_SUBST(WISH)
-
- # add itcl variables here
-
-])# STAR_PATH_TCLTK
-
-
-# STAR_LATEX_DOCUMENTATION(documentcode, [targets])
-# -------------------------------------------------
-# Generate the standard makefile targets to handle LaTeX documentation
-# source. The parameter documentcode should be something like
-# `sun123' -- it should not include any .tex extension.
-#
-# The second, optional, argument gives an explicit list of the targets
-# which are build. If this is _not_ specified, then a standard list
-# is used (.tex, .ps and .tar_htx) and corresponding rules added to
-# the generated makefile. If it is specified, it must be non-null,
-# and its value is a list of files which are to be added to the
-# distribution, and no extra Makefile rules are added. Thus if users need
-# anything complicated done, they should use this second argument and
-# provide rules for satisfying the given targets.
-#
-# In the latter case, the .tex -> htx_tar rule is still emitted, so
-# you can use it, but it requires the substitution variable
-# @STAR[]2HTML@, and so if you _do_ use it, you will have to make that
-# available, either through [STAR_CHECK_PROGS(star2html)] or otherwise.
-AC_DEFUN([STAR_LATEX_DOCUMENTATION],
- [m4_ifval([$1], [], [AC_FATAL([$0: called with no documentcode])])dnl
- m4_if(m4_bregexp([$1], [^ *\([a-z][a-z]*[0-9]*/? *\)*$]),
- [0],
- [],
- [AC_FATAL([$0: bad doccode in $1 -- must be eg sun123 or sun123/])])
- STAR_DOCUMENTATION="$STAR_DOCUMENTATION m4_bpatsubst([$1],[/])"
- m4_ifval([$2],
- [dnl non-empty second argument -- just add to variable
- m4_if(m4_bregexp([$1], [/]), -1,
- [],
- [AC_FATAL([$0: do not mix non-null second argument and .../ syntax])])
- if $_star_build_docs; then
- STAR@&t at _LATEX_DOCUMENTATION="$2"
- fi
- ],
- [dnl second arg empty -- use defaults
- if $_star_build_docs; then
- AC_FOREACH([DocCode], [$1],
- [m4_if(m4_bregexp(DocCode,[/]), -1,
- [STAR@&t at _LATEX_DOCUMENTATION="$STAR@&t at _LATEX_DOCUMENTATION DocCode.tex DocCode.ps DocCode.htx_tar"
-],
- [m4_define([_T], m4_bpatsubst(DocCode,[/]))dnl
- STAR_LATEX_DOCUMENTATION_[]_STAR_UPCASE(_T)="_T.tex _T.ps _T.htx_tar"
- AC_SUBST(STAR_LATEX_DOCUMENTATION_[]_STAR_UPCASE(_T))])])
- fi
- STAR_DECLARE_DEPENDENCIES([sourceset], [star2html])
- STAR_CHECK_PROGS([star2html])
- ])
- if $_star_build_docs; then
- : ${LATEX2DVI='$$LATEX "\\batchmode\\input $$[]1" && $$LATEX "\\batchmode\\input $$[]1"'}
- AC_SUBST(LATEX2DVI)
- else
- AC_MSG_WARN([not installing docs $1])
- fi
- AC_SUBST([STAR@&t at _LATEX_DOCUMENTATION])dnl
-])# STAR_LATEX_DOCUMENTATION
-
-# STAR_XML_DOCUMENTATION(documentcode, [targets])
-# -----------------------------------------------
-# Generate the standard makefile targets to handle XML documentation
-# source. The parameter documentcode should be something like
-# `sun123' -- it should not include any .xml extension. For each of the
-# documentcodes which does not end with a slash, append
-# <documentcode>.{texml_tar,htx_tar,ps} to STAR_XML_DOCUMENTATION;
-# for each which does end with a slash, define instead the
-# variable STAR_XML_DOCUMENTATION_<documentcode>. In either case,
-# append the documentcode to STAR_DOCUMENTATION
-#
-# The second, optional, argument gives an explicit list of the targets
-# which are build. If this is _not_ specified, then a standard list
-# is used (.texml_tar, .ps and .htx_tar) and corresponding rules added to
-# the generated makefile. If it is specified, it must be non-null,
-# and its value is a list of files which are to be added to the
-# distribution, and no extra Makefile rules are added. Thus if users need
-# anything complicated done, they should use this second argument and
-# provide rules for satisfying the given targets.
-#
-# In the latter case, the .tex -> htx_tar rule is still emitted, so
-# you can use it, but it requires the substitution variables JADE, SGMLNORM,
-# and SGMLKIT_HOME. This is rather inconvenient, and it is fortunate that
-# you almost certainly won't need to use this.
-AC_DEFUN([STAR_XML_DOCUMENTATION],
- [m4_ifval([$1], [], [AC_FATAL([$0: called with no documentcode])])dnl
- m4_if(m4_bregexp([$1], [^ *\([a-z][a-z]*[0-9]*/? *\)*$]),
- [0],
- [],
- [AC_FATAL([$0: bad doccode in $1 -- must be eg sun123 or sun123/])])
- STAR_DOCUMENTATION="$STAR_DOCUMENTATION m4_bpatsubst([$1],[/])"
- m4_ifval([$2],
- [dnl non-empty second argument -- just add to variable
- m4_if(m4_bregexp([$1], [/]), -1,
- [],
- [AC_FATAL([$0: do not mix non-null second argument and .../ syntax])])
- if $_star_build_docs; then
- STAR@&t at _XML_DOCUMENTATION="$2"
- fi
- ],
- [dnl second arg empty -- use defaults
- if $_star_build_docs; then
- do_the_build= # blank if we're to go ahead, string expl. otherwise
- AC_PATH_PROGS(JADE, [openjade jade], NOJADE)
- AC_PATH_PROGS(SGMLNORM, [osgmlnorm sgmlnorm], NOSGMLNORM)
- STAR_CHECK_PROGS([sgml2docs])
- if test "$JADE" = NOJADE -o "$SGMLNORM" = NOSGMLNORM -o "$SGML2DOCS" = "sgml2docs"; then
- if $_star_docs_only; then
- # Building documentation is all we're supposed to do,
- # and we can't, so suppress further building.
- do_the_build=\
-"This docs-only component requires Jade, sgmlnorm and sgml2docs.
- All I could find were:
- $JADE for Jade,
- $SGMLNORM for sgmlnorm and
- $SGML2DOCS for sgml2docs (requires full path).
- Your system may have a way to install Jade and sgmlnorm as a package,
- sgml2docs is part of the SGMLKIT package."
- else
- AC_MSG_WARN([can't find (open)jade + (o)sgmlnorm + sgml2docs -- skipping XML documentation $1])
- fi
- else
- # Test Jade version
- AC_MSG_CHECKING([version of $JADE (need 1.3.2 or better)])
- $JADE -v </dev/null >conftest.version 2>&1
- JADEVERS=[`sed -n '/:I:.*[Jj]ade.*version/{
- s/.*:I://
- s/[^0-9][^0-9]*/ /gp
-}' conftest.version`]
- # The following converts space-separated integers to a single
- # one. It's perhaps a leeettle funkier than necessary...
- VERSINT=[`echo "[Ss[z0<a]x]sa $JADEVERS 0 0 0 lax Ls100* Ls+100* Ls+p" | dc`]
- if test $VERSINT -ge 10302; then
- AC_MSG_RESULT([ok])
- AC_FOREACH([DocCode], [$1],
- [m4_if(m4_bregexp(DocCode,[/]), -1,
- [STAR@&t at _XML_DOCUMENTATION="$STAR@&t at _XML_DOCUMENTATION DocCode.texml_tar DocCode.htx_tar DocCode.ps DocCode.pdf"
-],
- [m4_define([_T], m4_bpatsubst(DocCode,[/]))dnl
- STAR_XML_DOCUMENTATION_[]_STAR_UPCASE(_T)="_T.texml_tar _T.htx_tar _T.ps _T.pdf"
- AC_SUBST(STAR_XML_DOCUMENTATION_[]_STAR_UPCASE(_T))])])
- else
- AC_MSG_RESULT([too old])
- do_the_build="Your openjade is version $JADEVERS; need 1.3.2 or better"
- fi
- SGMLKIT_HOME=$prefix/lib/sgmlkit
- AC_SUBST(SGMLKIT_HOME)
- fi
- STAR_SUPPRESS_BUILD_IF(test -n "$do_the_build", [$do_the_build])
- fi
- STAR_DECLARE_DEPENDENCIES([sourceset], [sgmlkit])
- ])
- if $_star_build_docs; then
- : ${LATEX2DVI='$$LATEX "\\batchmode\\input $$[]1" && $$LATEX "\\batchmode\\input $$[]1"'}
- AC_SUBST(LATEX2DVI)
- else
- AC_MSG_WARN([not installing docs $1])
- fi
- AC_SUBST([STAR@&t at _XML_DOCUMENTATION])dnl
-])# STAR_XML_DOCUMENTATION
-
-
-
-# STAR_CHECK_PROGS(progs-to-check-for, [component=''])
-# --------------------------------------------------
-#
-# For each of the programs in PROGS-TO-CHECK-FOR, define a variable
-# whose name is the upcased version of the program name, and whose
-# value is the full path to that program, or the expected installation
-# location of that program if no absolute path can be found. Because
-# of this default behaviour, this macro should _only_ be used for
-# locating Starlink programs such as messgen or alink, and not as a
-# general replacement for AC_CHECK_PROG. Any characters in the
-# program outside of the set of alphanumerics and underscores are
-# normalised to underscores.
-#
-# The optional second argument gives the name of the component containing
-# the program in question. Some packages install their binaries in
-# package-specific directories, and this argument allows this macro to
-# look there as well.
-#
-# For example:
-# STAR_CHECK_PROGS(messgen)
-# would define the variable MESSGEN to have the full path to the
-# messgen application, and
-# STAR_CHECK_PROGS(prolat, sst)
-# would define the variable PROLAT to have the path to the prolat
-# application within the sst component.
-#
-# Calls AC_SUBST and AC_ARG_VAR on the generated variable name. This
-# macro does _not_ automatically declare a configure dependency on any
-# component specified in the second argument. These dependencies should
-# be kept to an absolute minimum, and therefore any such dependencies
-# must be declared obviously and explicitly, with rationale.
-#
-# The behaviour described below, for the result when the required program
-# is not found, is not final, and may change. The documentation below is
-# contradictory, and should be regarded merely as a rather confused
-# discussion of the issues. The current behaviour is that when the progam
-# is not found, the variable is defined to be the program's name without
-# any path at all.
-#
-# This is the analogue of AC_CHECK_PROG, except that: (1) the variable
-# name defaults to the program name, (2) the variable value if the
-# program is not found is the path to the anticipated installation
-# location of the program, so that the macro does not fail in this
-# case. This is useful for locating Starlink programs, as it means we
-# can use this macro to produce absolute paths to programs, even
-# before they have been installed (in this case we are presumably
-# doing a top-level configure of the Starlink tree, and the Makefile
-# will ensure that the required files are installed before the current
-# package actually uses it. NB: (2) is not true at present.
-#
-# The current value of the PATH variable is augmented by the location
-# of the binary installation directory, using the current default
-# value of the prefix (not ideal, since this may in principle change
-# when the component being configured is installed, but it's the best
-# we can do at configure time); and by the $STARLINK/bin directory.
-#
-# The default, if the program isn't in the augmented path, is the path
-# to the starconf-finder program if that's available, and the bare
-# program-name otherwise. Is this the best default? Would just
-# program-name be better? The program may not be in the augmented
-# path for two reasons: (1) we are doing the global configuration done
-# during bootstrapping, and noting has been installed yet; or (2) the
-# program is one of those installed in a subdirectory of the
-# `bindir'. In case (2), there's not a lot we can do, short of
-# grubbing round manifest files at some point, but the
-# starconf-finder, which is the eventual default, knows about this
-# case, and could take care of it.
-#
-# No, I've changed my mind again. If the program isn't found, then
-# simply have the AC_PATH_PROG default to bare ProgramName. This is
-# probably adequate, and if so probably more robust than relying on
-# more and more layers of indirection. We probably will need to
-# revisit this. Again.
-AC_DEFUN([STAR_CHECK_PROGS],
- [eval default_bindir=`echo $bindir | sed 's,\${exec_prefix},$ac_default_prefix,'`
- AC_FOREACH([ProgramName], [$1],
- [m4_define([star_prog],
- _STAR_UPCASE(m4_bpatsubst(ProgramName,
- [[^0-9a-zA-Z_]],
- [_])))
- AC_PATH_PROG(star_prog,
- ProgramName,
- ProgramName,
-[$STARLINK/Perl/bin:]dnl
-[$STARLINK/starjava/bin:]dnl
-[$STARLINK/bin:]m4_ifval([$2],[$STARLINK/bin/$2:],)dnl
-[$default_bindir:]m4_ifval([$2],[$default_bindir/$2:],)dnl
-[$PATH])
- AC_ARG_VAR(star_prog,
- [Location of the ]ProgramName[ application])])
-])# STAR_CHECK_PROGS
-
-
-# STAR_SPECIAL_INSTALL_COMMAND(cmd)
-# ---------------------------------
-# Declare a special install command. Note that we do not examine the
-# actual command here -- that is done by automake. All we do is find
-# a way of copying a directory tree, preserving symlinks, as used by
-# the install targets in automake/lib/am/install.am. Try 'cp -R' and
-# variants, then pax, and if both fail, collapse.
-dnl Link test is `test -h': more portable than -L, according to autoconf notes.
-dnl `cp --no-dereference' is GNU cp: -P gives a compatibility warning.
-dnl Include broken link in test: some cp fail to copy these (OSX 10.2, Sol9).
-dnl Option -f is probably a good plan, but no failures spotted so far.
-dnl In pax, `-p e' fails with broken links; `-p p' is OK.
-AC_DEFUN([STAR_SPECIAL_INSTALL_COMMAND],
- [AC_REQUIRE([AC_PROG_LN_S])dnl
- AC_PATH_PROG(CP, cp)dnl
- AC_PATH_PROG(PAX, pax)
- AC_CACHE_CHECK([how to do a recursive directory copy],
- [star_cv_cp_r],
- [rm -Rf conftest*
- mkdir conftest-d1 conftest-d2
- mkdir conftest-d1/d
- date >conftest-d1/d/f
- (cd conftest-d1/d; $LN_S f l; $LN_S x broken)
- if test ! -h conftest-d1/d/l; then
- # We don't have links! So plain cp -R will do
- star_cv_cp_r="$CP -R"
- else
- star_cv_cp_r=
- for try in "$CP -R --no-dereference -p -f" "$CP -R -P -p -f" "$CP -R -P -p" "$CP -R -p" "${PAX-false} -r -w -p p"
- do
- rm -Rf conftest-d2/*
- if (cd conftest-d1; $try . ../conftest-d2 2>/dev/null); then
- if test -h conftest-d2/d/l -a -h conftest-d2/d/broken; then
- star_cv_cp_r="$try"
- break
- fi
- fi
- done
- fi
- rm -Rf conftest*])
- if test -z "$star_cv_cp_r"; then
- AC_MSG_ERROR([unable to find working cp or pax])
- fi
- AC_SUBST(CP_RECURSIVE, $star_cv_cp_r)dnl
-])# STAR_SPECIAL_INSTALL_COMMAND
-
-
-# STAR_MONOLITHS
-# --------------
-# Declare that we will be creating monoliths. This does whatever
-# configuration is necessary to handle these.
-#
-# Note that the declarations done in the Makefile.am, declaring the
-# name of the monolith and the names and source files of the tasks,
-# are slightly redundant inasmuch as some of that information could be
-# implied. However, this is required to be explicit for clarity and
-# consistency, and so accomodate the (currently unexploited)
-# possibility that the tasks and .ifl files longer have the
-# one-task-per-file relationship they have now.
-AC_DEFUN([STAR_MONOLITHS],
- [$_star_docs_only &&
- AC_MSG_ERROR([STAR[]_MONOLITHS in docs-only directory])
- dnl Installation in monoliths.am uses $(LN_S)
- AC_REQUIRE([AC_PROG_LN_S])dnl
-
- # To build monoliths, we need both compifl to build the .ifc
- # files (in the parsecon component), and alink
- # to link the monoliths (in dtask). Both are now part of
- # the pcs component.
- STAR_DECLARE_DEPENDENCIES(build, [pcs])
-
- # So try to find alink and compifl.
- STAR_CHECK_PROGS([compifl alink])
-
- # When we're building monoliths, we will almost certainly be
- # using Fortran, and so we might as well include this,
- # partly in case the user forgets, but also because this is
- # reasonably part of the default setup required for monoliths.
- STAR_CNF_COMPATIBLE_SYMBOLS
- STAR_PRM_COMPATIBLE_SYMBOLS
-])# STAR_MONOLITHS
-
-
-# STAR_HELP_FILES(helpfiles)
-# --------------------------
-# Declare a list of files to be installed into the Starlink help
-# directory. This can be used both internally and in user
-# configure.ac files.
-AC_DEFUN([STAR_HELP_FILES],
- [_STAR_EXTRADIR_COMMON([help], [$1])])
-
-
-# STAR_ETC_FILES(etcfiles)
-# ------------------------
-# Declare a list of files to be installed into the Starlink etc
-# directory. This can be used both internally and in user
-# configure.ac files.
-AC_DEFUN([STAR_ETC_FILES],
- [_STAR_EXTRADIR_COMMON([etc], [$1])])
-
-
-# STAR_DOCS_FILES(docfiles)
-# -------------------------
-# Declare a list of files to be installed into the Starlink
-# documentation directory. This can be used both internally and in
-# user configure.ac files.
-AC_DEFUN([STAR_DOCS_FILES],
- [_STAR_EXTRADIR_COMMON([docs], [$1])])
-
-
-# STAR_EXAMPLES_FILES(examplesfiles)
-# ----------------------------------
-# Declare a list of files to be installed into the Starlink
-# examples directory. This can be used both internally and in
-# user configure.ac files.
-AC_DEFUN([STAR_EXAMPLES_FILES],
- [_STAR_EXTRADIR_COMMON([examples], [$1])])
-
-
-# STAR_DECLARE_DEPENDENCIES(type, deplist, option='')
-# ---------------------------------------------------
-#
-# Declare dependencies of this component. The TYPE is one of
-# `sourceset', `build', `link', `use', `test' or `configure', and the
-# DEPLIST is a space separated list of component names, which this
-# component depends on in the given way.
-#
-# -- Sourceset dependencies are those components which must be
-# installed in order to build the complete set of sources, either for
-# building or for distribution. This includes documentation, so it
-# would include star2html as well as messgen.
-#
-# -- Build dependencies are those which are required in order to build
-# this component. This typically means include files, but if part of
-# the component is an executable file (such as compifl within the
-# parsecon component), then that's a build dependence also (but see
-# the discussion of `option', below). You may not have two components
-# which have a build dependency on each other, since that would mean
-# that each would have to be built before the other, which is
-# impossible.
-#
-# -- Link dependencies are those required to link against the
-# libraries in a component. That means all the libraries that this
-# component's libraries use. These are not necessarily build
-# dependencies, since if you are building a library, any called
-# libraries don't have to be present in order to build this library;
-# you can have two components which have mutual link dependencies. If
-# you are building an application, however, then all its link
-# dependencies will actually be build dependencies and should be
-# declared as such. In other words, the distinction between build and
-# link dependencies is important only for library components.
-#
-# -- Use dependencies are those which are required in order for the
-# component to be used by something else, after it has been built and
-# installed. For example a library which called another application
-# as part of its functionality would have only a use dependency on the
-# component which contained that application. If no use dependencies
-# are declared, we take the use dependencies to be the same as the
-# link dependencies.
-#
-# -- Test dependencies are those which are required in order to run
-# any regression tests which come with the component. It's generally
-# a good idea to avoid making this a larger set than the use
-# dependencies, but sometimes this is unavoidable. If no test
-# dependencies are declared, we take the test dependencies to be the
-# same as the use dependencies.
-#
-# -- Configure dependencies are those which must be satisfied before
-# this component can be successfully configured. In this case, we
-# also check that the corresponding manifest files have been installed
-# in current_MANIFESTS, and if not exit with a message, and the suggestion
-# that the user runs 'make configure-deps'.
-#
-# The point of this is that different dependencies are required at
-# different times. The set of dependencies in the master makefile is
-# composed of all the `sourceset' and `build' dependencies, but not
-# `link' or `use' dependencies, and since the core Starlink libraries
-# are closely interdependent, the set of `build' dependencies needs to
-# be kept as small as possible in order to avoid circularities (that
-# is, A depending on B, which depends, possibly indirectly, on A).
-#
-# All these relationships are transitive: if A has a build dependency
-# on B, and B has one on C, then A has a build dependency on C. You
-# can augment this by using the final `option' argument: if, in
-# component A's declaration element you say
-# STAR_DECLARE_DEPENDENCIES(build, B, link), then you declare that A
-# has a build-time dependency on B, but that (presumably because you
-# are building an application within a component which is mostly
-# libraries) you need to link against B, so component A has a
-# dependency on all of B's _link_ dependencies, not just its build
-# dependencies. This is (I believe) the only case where this `option'
-# attribute is useful, though it is legal for each of the dependency types.
-#
-# You need only declare direct dependencies. If package A depends on
-# package B, which depends in turn on package C, then package A need
-# not declare a dependency on C.
-#
-# The macro may be called more than once. The results of this macro
-# are expressed in the file component.xml in the component directory.
-AC_DEFUN([STAR_DECLARE_DEPENDENCIES],
- [m4_ifval([$1], [], [AC_FATAL([$0: no type given])])dnl
- m4_if(m4_bregexp([$1],
- [^\(sourceset\|build\|link\|use\|test\|configure\)$]),
- [0],
- [],
- [AC_FATAL([$0: unrecognised dependency type: $1])])dnl
- m4_ifval([$2], [], [AC_FATAL([$0: no deplist given])])dnl
- for _star_tmp in $2
- do
- STAR_DEPENDENCIES_CHILDREN="$STAR_DEPENDENCIES_CHILDREN<[$1]m4_ifval([$3], [ option='$3'], [])>$_star_tmp</$1>"
- done
- m4_if([$1], [configure], [# check that configure-deps ran...
- for _star_tmp in $2
- do
- echo "$as_me:$LINENO: checking for configure-deps/$_star_tmp" >&5
- echo $ECHO_N "checking for configure-deps/$_star_tmp... $ECHO_C" >&6
- if test -f $current_MANIFESTS/$_star_tmp; then
- echo "$as_me:$LINENO: result: ok" >&5
- echo "${ECHO_T}ok" >&6
- else
- echo "$as_me:$LINENO: result: not found!" >&5
- echo "${ECHO_T}not found" >&6
- echo "*** This package has a configure dependency on $_star_tmp" >&6
- echo " but that component doesn't appear to be installed." >&6
- echo " (I can't find $current_MANIFESTS/$_star_tmp:" >&6
- echo " have you forgotten to run 'make configure-deps'?)" >&6
- echo " Giving up!" >&6
- exit 1
- fi
- done
-])dnl
-])# STAR_DECLARE_DEPENDENCIES
-
-
-# STAR_PLATFORM_SOURCES(target-file-list, platform-list)
-# ------------------------------------------------------
-#
-# Generate the given target-file for each of the files in the list
-# TARGET-FILE-LIST, by selecting the appropriate element of the
-# PLATFORM-LIST based on the value of [AC_CANONICAL_BUILD]. Both
-# lists are space-separated lists.
-#
-# For each of the platforms, <p>, in platform-list, there should be a
-# file `<target-file><p>'. There should always be a file
-# `<target-file>default', and if none of the platform-list strings
-# matches, this is the file which is used. If the `default' file is
-# listed in the `platform-list', then it is matched in the normal run
-# of things; if it is not listed, it still matches, but a warning is
-# issued.
-#
-# If you wish no match _not_ to be an error -- perhaps because there
-# is a platform-dependent file which is redundant on unlisted platforms
-# -- then end the platform-list with `NONE'. In this case, if no file
-# matches, then no link is made, with no error or warning.
-#
-# This macro uses the results of ./config.guess to determine the
-# current platform. That returns a triple consisting of
-# cpu-vendor-os, such as `i686-pc-linux-gnu' (OS=linux-gnu),
-# `sparc-sun-solaris2.9', or `alphaev6-dec-osf5.1'
-#
-# The extensions <p> in platform-list should all have the form
-# `cpu_vendor[_os]', where each of the components `cpu', `vendor' and
-# `os' may be blank. If not blank, they are matched as a prefix of
-# the corresponding part of the config.guess value. Thus
-# `_sun_solaris' would match `sparc-sun-solaris2.9' but not
-# `sparc-sun-sunos', and `_sun' would match both. For a <target-file>
-# file foo.c, this would result in `ln -s foo.c_sun foo.c'
-#
-# Calls AC_LIBSOURCE for each of the implied platform-specific files.
-#
-AC_DEFUN([STAR_PLATFORM_SOURCES],
- [
-$_star_docs_only && AC_MSG_ERROR([STAR_[]PLATFORM_SOURCES in docs-only dir])
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-m4_ifval([$1], [], [AC_FATAL([$0: no target-file-list given])])dnl
-m4_ifval([$2], [], [AC_FATAL([$0: no platform-list given])])dnl
-AC_FOREACH([TargetFile], [$1],
- [AC_FOREACH([Ext], [$2],
- [m4_if(Ext, [NONE], , [AC_LIBSOURCE(TargetFile[]Ext)])])])dnl
-AC_MSG_CHECKING([platform-specific source for file(s) $1])
-_star_tmp=
-for platform in $2
-do
- if test $platform = NONE; then
- # Special case -- no file required
- _star_tmp=NONE
- break;
- fi
- if test $platform = default; then
- _star_tmp=default
- break;
- fi
- if expr $build : `echo $platform | sed 's/_/.*-/g'` >/dev/null; then
- _star_tmp=$platform
- break;
- fi
-done
-if test -z "$_star_tmp"; then
- # Use default, but it wasn't listed in the platform-list
- # (though it should have been)
- AC_MSG_WARN([build platform $build does not match any of ($2): using `default'])
- _star_tmp=default
-fi
-if test $_star_tmp = NONE; then
- AC_MSG_RESULT([none required])
-else
- AC_MSG_RESULT([using $_star_tmp])
- for _t in $1
- do
- if test -f $srcdir/$_t$_star_tmp; then
- (cd $srcdir; rm -f $_t; cp -p $_t$_star_tmp $_t)
- else
- AC_MSG_WARN([platform $_star_tmp matched, but no file $_t$_star_tmp found])
- fi
- done
-fi
-])# STAR_PLATFORM_SOURCES
-
-
-# STAR_INITIALISE_FORTRAN
-# -----------------------
-#
-# Define a macro which can be used in a C main program to initialise the
-# Fortran RTL, including, for example, doing whatever work is required so that
-# the Fortran getarg() function works. This defines the macro
-# STAR_INITIALISE_FORTRAN(argc,argv). The implementation necessarily uses
-# functions which are specific to the Fortran implementation, and the body of
-# this macro is basically a switch to determine the compiler and thus the
-# appropriate compiler-specific magic. If no implementation is available,
-# then the macro should expand to nothing.
-#
-# Note that the Starlink functions wrapping getarg() are robust against
-# getarg() failing because this information is not available. This function
-# is nonetheless necessary because some platforms have link problems otherwise
-# (specifically OSX, on which the most readily available compiler is g77,
-# cannot link properly if the getarg() function is referenced by a library,
-# but there is a C main function, so that the Fortran main function's call of
-# f_setarg is omitted). Thus it is generally harmless to leave this function
-# unimplemented on those platforms which do not have these link problems, and
-# it is harmless that the test below is extremely compiler specific (though we
-# would probably have to add implementations for any other compilers used on
-# OSX). It's also generally harmless not to call the defined function, or
-# invoke this macro, if your application doesn't have the link problems which
-# makeit necessary, though of course calling it will make getarg() work where
-# it otherwise wouldn't, which may be an advantage.
-#
-# All was well until g95 and gfortran, these are "gnu" compilers, but use
-# different semantics. In the case of g95 the calling the startup code is not
-# optional (docs say that heap initialisation relies on the startup call).
-#
-# The test for g95 relies on the output from `g95 --version' containing the
-# string "G95". Gfortran requires "GNU Fortran (GCC) 4+.x[x].x[x]". Note that
-# this whole area probably needs rethinking as g95 also has a g95_runtime_stop()
-# function, that should be called.
-#
-# Intel Fortran needs the for_rtl_init_ function, there is also a
-# for_rtl_finish_ to run during closedown. The intel compiler signature
-# is to have "IFORT" in the --version string.
-#
-# Under Solaris and the studio compilers the argc and argv values are no
-# longer automatically shared, so we test for "Sun Fortran" and have a
-# code section that copies the given argc and argv directly to the global
-# variable __xargc and __xargv, this may need fixing from time to time.
-# Doesn't seem to be a function for doing this job.
-#
-AC_DEFUN([STAR_INITIALISE_FORTRAN],
- [AC_CACHE_CHECK([how to initialise the Fortran RTL],
- [star_cv_initialise_fortran],
- [AC_REQUIRE([AC_PROG_FC])
- if test "$ac_cv_fc_compiler_gnu" = yes; then
- if "$FC" --version 2>&1 < /dev/null | grep 'G95' > /dev/null; then
- star_cv_initialise_fortran=g95-start
- elif "$FC" --version 2>&1 < /dev/null | grep 'GNU Fortran.*[[4-9]]\.[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*' > /dev/null; then
- star_cv_initialise_fortran=gfortran-setarg
- else
- star_cv_initialise_fortran=g77-setarg
- fi
- else
- if "$FC" --version 2>&1 < /dev/null | grep 'IFORT' > /dev/null; then
- star_cv_initialise_fortran=ifort-setarg
- elif "$FC" -V 2>&1 < /dev/null | grep 'Sun Fortran' > /dev/null; then
- star_cv_initialise_fortran=sunstudio-setarg
- else
- star_cv_initialise_fortran=
- fi
- fi])
- AH_TEMPLATE([STAR_INITIALISE@&t at _FORTRAN],
- [Define to a function call which will initialise the Fortran RTL])
- case "$star_cv_initialise_fortran" in
- g77-setarg)
- AC_DEFINE([STAR_INITIALISE@&t at _FORTRAN(argc,argv)],
- [{extern void f_setarg(int,char**); f_setarg(argc, argv);}])
- ;;
- g95-start)
- AC_DEFINE([STAR_INITIALISE@&t at _FORTRAN(argc,argv)],
- [{extern void g95_runtime_start(int,char**); g95_runtime_start(argc, argv);}])
- ;;
- gfortran-setarg)
- AC_DEFINE([STAR_INITIALISE@&t at _FORTRAN(argc,argv)],
- [{extern void _gfortran_set_args(int,char**); _gfortran_set_args(argc, argv);}])
- ;;
- ifort-setarg)
- AC_DEFINE([STAR_INITIALISE@&t at _FORTRAN(argc,argv)],
- [{extern void for_rtl_init_(int*,char**); for_rtl_init_(&argc, argv);}])
- ;;
- sunstudio-setarg)
- AC_DEFINE([STAR_INITIALISE@&t at _FORTRAN(argc,argv)],
- [{extern int __xargc; extern char **__xargv;__xargc = argc;__xargv = argv;}])
- ;;
- *)
- AC_DEFINE([STAR_INITIALISE@&t at _FORTRAN(argc,argv)],[])
- ;;
- esac
-dnl AC_DEFINE_UNQUOTED([STAR_INITIALISE@&t at _FORTRAN(argc,argv)],
-dnl $star_cv_initialise_fortran)
-])# STAR_INITIALISE_FORTRAN
-
-
-# STAR_SUPPRESS_BUILD_IF(test, message)
-# -------------------------------------
-# Call once at the end of the configure script.
-#
-# If the given shell test evaluates to true, then suppress the build,
-# without having ./configure fail. The test is any command which
-# returns true if the build should be suppressed, and may be shell
-# commands `true' or `false', or might be a more complicated test,
-# such as `test -n "$SOMEENV"'.
-#
-# The macro communicates with the generated Makefile.in by creating a file
-# STAR_SUPPRESS_BUILD if the test evaluates to true. The file contains
-# the text of the explanation.
-AC_DEFUN([STAR_SUPPRESS_BUILD_IF],
- [m4_ifval([$1], [], [AC_FATAL([$0: needs two arguments])])dnl
- m4_ifval([$2], [], [AC_FATAL([$0: needs two arguments])])dnl
- rm -f STAR_SUPPRESS_BUILD
- if [$1]; then
- AC_MSG_WARN([Build inhibited:
- $2])
- echo "$2" >STAR_SUPPRESS_BUILD
- ALL_TARGET=all-am-suppress
- else
- ALL_TARGET=all-am-normal
- fi
- AC_SUBST(ALL_TARGET)
-])# STAR_SUPPRESS_BUILD_IF
-
-
-# starconf internal macros
-
-
-# _STAR_UPCASE(string)
-# --------------------
-# Expands to STRING with all letters translated to uppercase.
-AC_DEFUN([_STAR_UPCASE],
- [m4_translit([$1], [a-z], [A-Z])])
-
-
-# _STAR_EXTRADIR_COMMON(dir-type, file-list)
-# ------------------------------------------
-#
-# Common handler for STAR_HELP_FILES, etc. DIR-TYPE is one of
-#
-# help, etc, docs, examples
-#
-# and `FILE-LIST' is a list of files to be installed in
-# the directory STAR_[DIR-TYPE]_DIR. This works by defining and
-# AC_SUBSTing the variables `starX_DATA for X=dir-type (eg, `stardocs_DATA').
-#
-# This is now obsolete -- components should use star<dir-type>_DATA in
-# the Makefile.am file instead. Don't use AC_[]DIAGNOSE([obsolete],...),
-# since those warnings aren't turned on by default.
-AC_DEFUN([_STAR_EXTRADIR_COMMON],
- [AC_FATAL([Macro STAR_]_STAR_UPCASE($1)[_FILES($2) is obsolete -- use star$1_DATA in Makefile.am instead])
- AC_FATAL([For STAR@&t at _LATEX_DOCUMENTATION, use stardocs_DATA=@STAR@&t at _LATEX_DOCUMENTATION@ instead])]
-)# _STAR_EXTRADIR_COMMON
-
-
-# _STAR_RESTFP_FIX
-# ----------------
-# Determines if we need to make any library fixes to get things to link
-# properly. In fact, there's only a problem on OSX/Darwin, since the
-# GCC installation which provides g77 and the (system) GCC which provides
-# gcc can generate slightly incompatible object code. The following test
-# is therefore pretty specific to OSX/Darwin.
-#
-# If there are any libraries that need to be added to the path, this adds
-# them to variables <x>_FCLINK_MAGIC. Compare AC_FC_LIBRARY_LDFLAGS.
-#
-# See the thread: http://lists.apple.com/mhonarc/fortran-dev/msg00768.html
-AC_DEFUN([_STAR_RESTFP_FIX],
- [AC_CACHE_CHECK([whether we need any library fixups],
- [star_cv_restfp_fixup],
- [AC_REQUIRE([AC_CANONICAL_BUILD])
- AC_REQUIRE([AC_PROG_CC])
- AC_REQUIRE([AC_PROG_FC])
- if expr $build_os : 'darwin7' >/dev/null; then
-dnl Only affects OSX/Darwin
- # Following uses undocumented (but probably fairly stable)
- # autoconf internal variable.
- if test "$ac_cv_fc_compiler_gnu" = yes; then
-dnl The problem only affects g77/gcc, so we know we're dealing with these below
- AC_LANG_PUSH(C)
- rm -f conftest*
- star_cv_restfp_fixup=unknown
- AC_LANG_CONFTEST(AC_LANG_PROGRAM([], restFP()))
- { AC_TRY_COMMAND($CC -o conftest.x -S conftest.c)
- test $ac_status = 0
- } &&
- sed 's/_restFP/restFP/g' conftest.x>conftest.s &&
- { AC_TRY_COMMAND($CC -c -o conftest.$ac_objext conftest.s)
- test $ac_status = 0
- } || star_cv_restfp_fixup=broken
- AC_LANG_POP(C)
- if test $star_cv_restfp_fixup = broken; then
- AC_MSG_WARN([unable to assemble restFP test])
- else
- # Link this with the C compiler
- AC_TRY_COMMAND($CC -o conftest conftest.$ac_objext)
- _s_cstatus=$ac_status
- # Link this with the Fortran compiler
- AC_TRY_COMMAND($FC -o conftest conftest.$ac_objext)
- if test $_s_cstatus = 0 -a $ac_status = 0; then
- # both compilers can compile it
- star_cv_restfp_fixup=no
- elif test $_s_cstatus != 0 -a $ac_status != 0; then
- # neither compiler can compile it
- star_cv_restfp_fixup=no
- elif test $_s_cstatus = 0; then
- # The C compiler can, but the Fortran cannot
- star_cv_restfp_fixup=yes
- else
- # The C compiler can't compile, but the Fortran can.
- # Haven't heard of this case! Don't know what to do.
- star_cv_restfp_fixup=broken
- fi
- fi
- # Link with -lcc_dynamic.
- # See http://www.astro.gla.ac.uk/users/norman/note/2004/restFP/
- if test $star_cv_restfp_fixup = yes; then
- AC_TRY_COMMAND($FC -o conftest conftest.$ac_objext -lcc_dynamic)
- if test $ac_status = 0; then
- star_cv_restfp_fixup=cc_dynamic
- fi
- fi
- if test $star_cv_restfp_fixup = yes; then
- # ooops
- AC_MSG_WARN([unable to solve restFP problem])
- star_cv_restfp_fixup=broken
- fi
- rm -f conftest*
- elif test -z "$FC"; then
- # not g77, and indeed no Fortran at all
- star_cv_restfp_fixup=nofortran
- else
- # There is a Fortran, but it's not g77, so either there's no
- # problem, or it's a mixed-compiler problem that's harder
- # than we know how to deal with. But presumably the user
- # has worked this out.
- star_cv_restfp_fixup=no
- fi
- else # !Darwin
- star_cv_restfp_fixup=no
- fi
- ])
- C_FC_FCLINK_MAGIC=
- C_FC_PPFC_FCLINK_MAGIC=
- case $star_cv_restfp_fixup in
- cc_dynamic)
- # Add the required libraries to C_FC_... variables, which are
- # generated in the required places by (our) automake.
- C_FC_FCLINK_MAGIC="-lcc_dynamic"
- C_FC_PPFC_FCLINK_MAGIC="-lcc_dynamic"
- ;;
- nofortran)
- AC_MSG_NOTICE([No Fortran in path, so presumably no g77/gcc library problems])
- ;;
- *) ;;
- esac
- AC_SUBST(C_FC_FCLINK_MAGIC)
- AC_SUBST(C_FC_PPFC_FCLINK_MAGIC)
-])# _STAR_RESTFP_FIX
-
-
-# STAR_LARGEFILE_SUPPORT
-# ----------------------
-#
-# Set C macros for compiling C routines that want to make use of large file
-# support. This is a joining of AC_SYS_LARGEFILE and AC_FUNC_FSEEKO
-# so defines the macros _FILE_OFFSET_BITS, _LARGEFILE_SOURCE and _LARGE_FILES,
-# along with HAVE_FSEEKO. To use large file support you need to use fseeko and
-# ftello when HAVE_FSEEKO is defined (and use off_t for offsets) and compile
-# all C code with the other defines.
-#
-# This function also gathers the values of _FILE_OFFSET_BITS, _LARGEFILE_SOURCE
-# and _LARGE_FILES and sets the STAR_LARGEFILE_CFLAGS variable (this in useful
-# for passing to packages which are not directly part of the starconf system).
-#
-AC_DEFUN([STAR_LARGEFILE_SUPPORT],
-[dnl Enable autoconf largefile support.
-AC_SYS_LARGEFILE
-AC_FUNC_FSEEKO
-
-# Gather state into a single variable for passing to other packages.
-STAR_LARGEFILE_CFLAGS=
-if test "$ac_cv_sys_file_offset_bits" != "no"; then
- STAR_LARGEFILE_CFLAGS="-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
-fi
-
-if test "$ac_cv_sys_large_files" != "no"; then
- STAR_LARGEFILE_CFLAGS="-D_LARGE_FILES_=$ac_cv_sys_large_files $STAR_LARGEFILE_CFLAGS"
-fi
-
-if test "$ac_cv_sys_largefile_source" != "no"; then
- STAR_LARGEFILE_CFLAGS="-D_LARGEFILE_SOURCE=$ac_cv_sys_largefile_source $STAR_LARGEFILE_CFLAGS"
-fi
-])# STAR_LARGEFILE_SUPPORT
-
-
-# Obsolete macros
-# ===============
-
-# STAR_HAVE_FC_OPEN_READONLY
-# ---------------------------
-#
-# Tests if the Fortran compiler supports the READONLY option on the
-# OPEN command. If it does, it defines HAVE_FC_OPEN_READONLY to 1.
-AC_DEFUN([STAR_HAVE_FC_OPEN_READONLY],
- [AC_FATAL([Macro STAR_HAVE_FC_OPEN_READONLY is obsolete; use AC_FC_OPEN_SPECIFIERS(readonly) instead])])
-
-
-# STAR_FC_LIBRARY_LDFLAGS
-# -----------------------
-#
-# This was once a wrapper for AC_[]FC_LIBRARY_LDFLAGS which added
-# functionality. That functionality is now incorporated into STAR_[]DEFAULTS,
-# using the helper macro _STAR_[]RESTFP_FIXUP. Configure.ac files should use
-# use AC_[]FC_LIBRARY_LDFLAGS instead.
-AC_DEFUN([STAR_FC_LIBRARY_LDFLAGS],
- [AC_FATAL([Macro STAR_FC_LIBRARY_LDFLAGS is obsolete: if necessary, use standard AC_FC_LIBRARY_LDFLAGS instead])])
-
-
-# end of starconf macros
-
-# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_AUTOMAKE_VERSION(VERSION)
-# ----------------------------
-# Automake X.Y traces this macro to ensure aclocal.m4 has been
-# generated from the m4 files accompanying Automake X.Y.
-AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
-
-# AM_SET_CURRENT_AUTOMAKE_VERSION
-# -------------------------------
-# Call AM_AUTOMAKE_VERSION so it can be traced.
-# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
-AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
- [AM_AUTOMAKE_VERSION([1.9.6-starlink])])
-
-# AM_AUX_DIR_EXPAND -*- Autoconf -*-
-
-# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
-# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
-# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
-#
-# Of course, Automake must honor this variable whenever it calls a
-# tool from the auxiliary directory. The problem is that $srcdir (and
-# therefore $ac_aux_dir as well) can be either absolute or relative,
-# depending on how configure is run. This is pretty annoying, since
-# it makes $ac_aux_dir quite unusable in subdirectories: in the top
-# source directory, any form will work fine, but in subdirectories a
-# relative path needs to be adjusted first.
-#
-# $ac_aux_dir/missing
-# fails when called from a subdirectory if $ac_aux_dir is relative
-# $top_srcdir/$ac_aux_dir/missing
-# fails if $ac_aux_dir is absolute,
-# fails when called from a subdirectory in a VPATH build with
-# a relative $ac_aux_dir
-#
-# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
-# are both prefixed by $srcdir. In an in-source build this is usually
-# harmless because $srcdir is `.', but things will broke when you
-# start a VPATH build or use an absolute $srcdir.
-#
-# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
-# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
-# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
-# and then we would define $MISSING as
-# MISSING="\${SHELL} $am_aux_dir/missing"
-# This will work as long as MISSING is not called from configure, because
-# unfortunately $(top_srcdir) has no meaning in configure.
-# However there are other variables, like CC, which are often used in
-# configure, and could therefore not use this "fixed" $ac_aux_dir.
-#
-# Another solution, used here, is to always expand $ac_aux_dir to an
-# absolute PATH. The drawback is that using absolute paths prevent a
-# configured tree to be moved without reconfiguration.
-
-AC_DEFUN([AM_AUX_DIR_EXPAND],
-[dnl Rely on autoconf to set up CDPATH properly.
-AC_PREREQ([2.50])dnl
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
-])
-
-# AM_CONDITIONAL -*- Autoconf -*-
-
-# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 7
-
-# AM_CONDITIONAL(NAME, SHELL-CONDITION)
-# -------------------------------------
-# Define a conditional.
-AC_DEFUN([AM_CONDITIONAL],
-[AC_PREREQ(2.52)dnl
- ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
- [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
-AC_SUBST([$1_TRUE])
-AC_SUBST([$1_FALSE])
-if $2; then
- $1_TRUE=
- $1_FALSE='#'
-else
- $1_TRUE='#'
- $1_FALSE=
-fi
-AC_CONFIG_COMMANDS_PRE(
-[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
- AC_MSG_ERROR([[conditional "$1" was never defined.
-Usually this means the macro was only invoked conditionally.]])
-fi])])
-
-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 8
-
-# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
-# written in clear, in which case automake, when reading aclocal.m4,
-# will think it sees a *use*, and therefore will trigger all it's
-# C support machinery. Also note that it means that autoscan, seeing
-# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
-
-
-# _AM_DEPENDENCIES(NAME)
-# ----------------------
-# See how the compiler implements dependency checking.
-# NAME is "CC", "CXX", "GCJ", or "OBJC".
-# We try a few techniques and use that to set a single cache variable.
-#
-# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
-# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
-# dependency, and given that the user is not expected to run this macro,
-# just rely on AC_PROG_CC.
-AC_DEFUN([_AM_DEPENDENCIES],
-[AC_REQUIRE([AM_SET_DEPDIR])dnl
-AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
-AC_REQUIRE([AM_MAKE_INCLUDE])dnl
-AC_REQUIRE([AM_DEP_TRACK])dnl
-
-ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
- [$1], CXX, [depcc="$CXX" am_compiler_list=],
- [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
- [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
- [depcc="$$1" am_compiler_list=])
-
-AC_CACHE_CHECK([dependency style of $depcc],
- [am_cv_$1_dependencies_compiler_type],
-[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
- # We make a subdir and do the tests there. Otherwise we can end up
- # making bogus files that we don't know about and never remove. For
- # instance it was reported that on HP-UX the gcc test will end up
- # making a dummy file named `D' -- because `-MD' means `put the output
- # in D'.
- mkdir conftest.dir
- # Copy depcomp to subdir because otherwise we won't find it if we're
- # using a relative directory.
- cp "$am_depcomp" conftest.dir
- cd conftest.dir
- # We will build objects and dependencies in a subdirectory because
- # it helps to detect inapplicable dependency modes. For instance
- # both Tru64's cc and ICC support -MD to output dependencies as a
- # side effect of compilation, but ICC will put the dependencies in
- # the current directory while Tru64 will put them in the object
- # directory.
- mkdir sub
-
- am_cv_$1_dependencies_compiler_type=none
- if test "$am_compiler_list" = ""; then
- am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
- fi
- for depmode in $am_compiler_list; do
- # Setup a source with many dependencies, because some compilers
- # like to wrap large dependency lists on column 80 (with \), and
- # we should not choose a depcomp mode which is confused by this.
- #
- # We need to recreate these files for each test, as the compiler may
- # overwrite some of them when testing with obscure command lines.
- # This happens at least with the AIX C compiler.
- : > sub/conftest.c
- for i in 1 2 3 4 5 6; do
- echo '#include "conftst'$i'.h"' >> sub/conftest.c
- # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
- # Solaris 8's {/usr,}/bin/sh.
- touch sub/conftst$i.h
- done
- echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
- case $depmode in
- nosideeffect)
- # after this tag, mechanisms are not by side-effect, so they'll
- # only be used when explicitly requested
- if test "x$enable_dependency_tracking" = xyes; then
- continue
- else
- break
- fi
- ;;
- none) break ;;
- esac
- # We check with `-c' and `-o' for the sake of the "dashmstdout"
- # mode. It turns out that the SunPro C++ compiler does not properly
- # handle `-M -o', and we need to detect this.
- if depmode=$depmode \
- source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
- depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
- $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
- >/dev/null 2>conftest.err &&
- grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
- grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
- ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
- # icc doesn't choke on unknown options, it will just issue warnings
- # or remarks (even with -Werror). So we grep stderr for any message
- # that says an option was ignored or not supported.
- # When given -MP, icc 7.0 and 7.1 complain thusly:
- # icc: Command line warning: ignoring option '-M'; no argument required
- # The diagnosis changed in icc 8.0:
- # icc: Command line remark: option '-MP' not supported
- if (grep 'ignoring option' conftest.err ||
- grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
- am_cv_$1_dependencies_compiler_type=$depmode
- break
- fi
- fi
- done
-
- cd ..
- rm -rf conftest.dir
-else
- am_cv_$1_dependencies_compiler_type=none
-fi
-])
-AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
-AM_CONDITIONAL([am__fastdep$1], [
- test "x$enable_dependency_tracking" != xno \
- && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
-])
-
-
-# AM_SET_DEPDIR
-# -------------
-# Choose a directory name for dependency files.
-# This macro is AC_REQUIREd in _AM_DEPENDENCIES
-AC_DEFUN([AM_SET_DEPDIR],
-[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
-])
-
-
-# AM_DEP_TRACK
-# ------------
-AC_DEFUN([AM_DEP_TRACK],
-[AC_ARG_ENABLE(dependency-tracking,
-[ --disable-dependency-tracking speeds up one-time build
- --enable-dependency-tracking do not reject slow dependency extractors])
-if test "x$enable_dependency_tracking" != xno; then
- am_depcomp="$ac_aux_dir/depcomp"
- AMDEPBACKSLASH='\'
-fi
-AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
-AC_SUBST([AMDEPBACKSLASH])
-])
-
-# Generate code to set up dependency tracking. -*- Autoconf -*-
-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-#serial 3
-
-# _AM_OUTPUT_DEPENDENCY_COMMANDS
-# ------------------------------
-AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
-[for mf in $CONFIG_FILES; do
- # Strip MF so we end up with the name of the file.
- mf=`echo "$mf" | sed -e 's/:.*$//'`
- # Check whether this is an Automake generated Makefile or not.
- # We used to match only the files named `Makefile.in', but
- # some people rename them; so instead we look at the file content.
- # Grep'ing the first line is not enough: some people post-process
- # each Makefile.in and add a new line on top of each file to say so.
- # So let's grep whole file.
- if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
- dirpart=`AS_DIRNAME("$mf")`
- else
- continue
- fi
- # Extract the definition of DEPDIR, am__include, and am__quote
- # from the Makefile without running `make'.
- DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
- test -z "$DEPDIR" && continue
- am__include=`sed -n 's/^am__include = //p' < "$mf"`
- test -z "am__include" && continue
- am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
- # When using ansi2knr, U may be empty or an underscore; expand it
- U=`sed -n 's/^U = //p' < "$mf"`
- # Find all dependency output files, they are included files with
- # $(DEPDIR) in their names. We invoke sed twice because it is the
- # simplest approach to changing $(DEPDIR) to its actual value in the
- # expansion.
- for file in `sed -n "
- s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
- sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
- # Make sure the directory exists.
- test -f "$dirpart/$file" && continue
- fdir=`AS_DIRNAME(["$file"])`
- AS_MKDIR_P([$dirpart/$fdir])
- # echo "creating $dirpart/$file"
- echo '# dummy' > "$dirpart/$file"
- done
-done
-])# _AM_OUTPUT_DEPENDENCY_COMMANDS
-
-
-# AM_OUTPUT_DEPENDENCY_COMMANDS
-# -----------------------------
-# This macro should only be invoked once -- use via AC_REQUIRE.
-#
-# This code is only required when automatic dependency tracking
-# is enabled. FIXME. This creates each `.P' file that we will
-# need in order to bootstrap the dependency handling code.
-AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
-[AC_CONFIG_COMMANDS([depfiles],
- [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
- [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
-])
-
-# Do all the work for Automake. -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 12
-
-# This macro actually does too much. Some checks are only needed if
-# your package does certain things. But this isn't really a big deal.
-
-# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
-# AM_INIT_AUTOMAKE([OPTIONS])
-# -----------------------------------------------
-# The call with PACKAGE and VERSION arguments is the old style
-# call (pre autoconf-2.50), which is being phased out. PACKAGE
-# and VERSION should now be passed to AC_INIT and removed from
-# the call to AM_INIT_AUTOMAKE.
-# We support both call styles for the transition. After
-# the next Automake release, Autoconf can make the AC_INIT
-# arguments mandatory, and then we can depend on a new Autoconf
-# release and drop the old call support.
-AC_DEFUN([AM_INIT_AUTOMAKE],
-[AC_PREREQ([2.58])dnl
-dnl Autoconf wants to disallow AM_ names. We explicitly allow
-dnl the ones we care about.
-m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
-AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
-AC_REQUIRE([AC_PROG_INSTALL])dnl
-# test to see if srcdir already configured
-if test "`cd $srcdir && pwd`" != "`pwd`" &&
- test -f $srcdir/config.status; then
- AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
-fi
-
-# test whether we have cygpath
-if test -z "$CYGPATH_W"; then
- if (cygpath --version) >/dev/null 2>/dev/null; then
- CYGPATH_W='cygpath -w'
- else
- CYGPATH_W=echo
- fi
-fi
-AC_SUBST([CYGPATH_W])
-
-# Define the identity of the package.
-dnl Distinguish between old-style and new-style calls.
-m4_ifval([$2],
-[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
- AC_SUBST([PACKAGE], [$1])dnl
- AC_SUBST([VERSION], [$2])],
-[_AM_SET_OPTIONS([$1])dnl
- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
-
-_AM_IF_OPTION([no-define],,
-[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
- AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
-
-# Some tools Automake needs.
-AC_REQUIRE([AM_SANITY_CHECK])dnl
-AC_REQUIRE([AC_ARG_PROGRAM])dnl
-AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
-AM_MISSING_PROG(AUTOCONF, autoconf)
-AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
-AM_MISSING_PROG(AUTOHEADER, autoheader)
-AM_MISSING_PROG(MAKEINFO, makeinfo)
-AM_PROG_INSTALL_SH
-AM_PROG_INSTALL_STRIP
-AC_REQUIRE([AM_PROG_MKDIR_P])dnl
-# We need awk for the "check" target. The system "awk" is bad on
-# some platforms.
-AC_REQUIRE([AC_PROG_AWK])dnl
-AC_REQUIRE([AC_PROG_MAKE_SET])dnl
-AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
- [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
- [_AM_PROG_TAR([v7])])])
-_AM_IF_OPTION([no-dependencies],,
-[AC_PROVIDE_IFELSE([AC_PROG_CC],
- [_AM_DEPENDENCIES(CC)],
- [define([AC_PROG_CC],
- defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_CXX],
- [_AM_DEPENDENCIES(CXX)],
- [define([AC_PROG_CXX],
- defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
-])
-])
-
-
-# When config.status generates a header, we must update the stamp-h file.
-# This file resides in the same directory as the config header
-# that is generated. The stamp files are numbered to have different names.
-
-# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
-# loop where config.status creates the headers, so we can generate
-# our stamp files there.
-AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
-[# Compute $1's index in $config_headers.
-_am_stamp_count=1
-for _am_header in $config_headers :; do
- case $_am_header in
- $1 | $1:* )
- break ;;
- * )
- _am_stamp_count=`expr $_am_stamp_count + 1` ;;
- esac
-done
-echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
-
-# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_INSTALL_SH
-# ------------------
-# Define $install_sh.
-AC_DEFUN([AM_PROG_INSTALL_SH],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-install_sh=${install_sh-"$am_aux_dir/install-sh"}
-AC_SUBST(install_sh)])
-
-# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 2
-
-# Check whether the underlying file-system supports filenames
-# with a leading dot. For instance MS-DOS doesn't.
-AC_DEFUN([AM_SET_LEADING_DOT],
-[rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
- am__leading_dot=.
-else
- am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-AC_SUBST([am__leading_dot])])
-
-# Check to see how 'make' treats includes. -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 3
-
-# AM_MAKE_INCLUDE()
-# -----------------
-# Check to see how make treats includes.
-AC_DEFUN([AM_MAKE_INCLUDE],
-[am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
- @echo done
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-AC_MSG_CHECKING([for style of include used by $am_make])
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# We grep out `Entering directory' and `Leaving directory'
-# messages which can occur if `w' ends up in MAKEFLAGS.
-# In particular we don't look at `^make:' because GNU make might
-# be invoked under some other name (usually "gmake"), in which
-# case it prints its new name instead of `make'.
-if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
- am__include=include
- am__quote=
- _am_result=GNU
-fi
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
- echo '.include "confinc"' > confmf
- if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
- am__include=.include
- am__quote="\""
- _am_result=BSD
- fi
-fi
-AC_SUBST([am__include])
-AC_SUBST([am__quote])
-AC_MSG_RESULT([$_am_result])
-rm -f confinc confmf
-])
-
-# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
-
-# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 4
-
-# AM_MISSING_PROG(NAME, PROGRAM)
-# ------------------------------
-AC_DEFUN([AM_MISSING_PROG],
-[AC_REQUIRE([AM_MISSING_HAS_RUN])
-$1=${$1-"${am_missing_run}$2"}
-AC_SUBST($1)])
-
-
-# AM_MISSING_HAS_RUN
-# ------------------
-# Define MISSING if not defined so far and test if it supports --run.
-# If it does, set am_missing_run to use it, otherwise, to nothing.
-AC_DEFUN([AM_MISSING_HAS_RUN],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
-# Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
- am_missing_run="$MISSING --run "
-else
- am_missing_run=
- AC_MSG_WARN([`missing' script is too old or missing])
-fi
-])
-
-# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_MKDIR_P
-# ---------------
-# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
-#
-# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
-# created by `make install' are always world readable, even if the
-# installer happens to have an overly restrictive umask (e.g. 077).
-# This was a mistake. There are at least two reasons why we must not
-# use `-m 0755':
-# - it causes special bits like SGID to be ignored,
-# - it may be too restrictive (some setups expect 775 directories).
-#
-# Do not use -m 0755 and let people choose whatever they expect by
-# setting umask.
-#
-# We cannot accept any implementation of `mkdir' that recognizes `-p'.
-# Some implementations (such as Solaris 8's) are not thread-safe: if a
-# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
-# concurrently, both version can detect that a/ is missing, but only
-# one can create it and the other will error out. Consequently we
-# restrict ourselves to GNU make (using the --version option ensures
-# this.)
-AC_DEFUN([AM_PROG_MKDIR_P],
-[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
- # We used to keeping the `.' as first argument, in order to
- # allow $(mkdir_p) to be used without argument. As in
- # $(mkdir_p) $(somedir)
- # where $(somedir) is conditionally defined. However this is wrong
- # for two reasons:
- # 1. if the package is installed by a user who cannot write `.'
- # make install will fail,
- # 2. the above comment should most certainly read
- # $(mkdir_p) $(DESTDIR)$(somedir)
- # so it does not work when $(somedir) is undefined and
- # $(DESTDIR) is not.
- # To support the latter case, we have to write
- # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
- # so the `.' trick is pointless.
- mkdir_p='mkdir -p --'
-else
- # On NextStep and OpenStep, the `mkdir' command does not
- # recognize any option. It will interpret all options as
- # directories to create, and then abort because `.' already
- # exists.
- for d in ./-p ./--version;
- do
- test -d $d && rmdir $d
- done
- # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
- if test -f "$ac_aux_dir/mkinstalldirs"; then
- mkdir_p='$(mkinstalldirs)'
- else
- mkdir_p='$(install_sh) -d'
- fi
-fi
-AC_SUBST([mkdir_p])])
-
-# Helper functions for option handling. -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 3
-
-# _AM_MANGLE_OPTION(NAME)
-# -----------------------
-AC_DEFUN([_AM_MANGLE_OPTION],
-[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
-
-# _AM_SET_OPTION(NAME)
-# ------------------------------
-# Set option NAME. Presently that only means defining a flag for this option.
-AC_DEFUN([_AM_SET_OPTION],
-[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
-
-# _AM_SET_OPTIONS(OPTIONS)
-# ----------------------------------
-# OPTIONS is a space-separated list of Automake options.
-AC_DEFUN([_AM_SET_OPTIONS],
-[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
-
-# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
-# -------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-AC_DEFUN([_AM_IF_OPTION],
-[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-
-# Check to make sure that the build environment is sane. -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 4
-
-# AM_SANITY_CHECK
-# ---------------
-AC_DEFUN([AM_SANITY_CHECK],
-[AC_MSG_CHECKING([whether build environment is sane])
-# Just in case
-sleep 1
-echo timestamp > conftest.file
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments. Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
- set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
- if test "$[*]" = "X"; then
- # -L didn't work.
- set X `ls -t $srcdir/configure conftest.file`
- fi
- rm -f conftest.file
- if test "$[*]" != "X $srcdir/configure conftest.file" \
- && test "$[*]" != "X conftest.file $srcdir/configure"; then
-
- # If neither matched, then we have a broken ls. This can happen
- # if, for instance, CONFIG_SHELL is bash and it inherits a
- # broken ls alias from the environment. This has actually
- # happened. Such a system could not be considered "sane".
- AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
-alias in your environment])
- fi
-
- test "$[2]" = conftest.file
- )
-then
- # Ok.
- :
-else
- AC_MSG_ERROR([newly created file is older than distributed files!
-Check your system clock])
-fi
-AC_MSG_RESULT(yes)])
-
-# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_INSTALL_STRIP
-# ---------------------
-# One issue with vendor `install' (even GNU) is that you can't
-# specify the program used to strip binaries. This is especially
-# annoying in cross-compiling environments, where the build's strip
-# is unlikely to handle the host's binaries.
-# Fortunately install-sh will honor a STRIPPROG variable, so we
-# always use install-sh in `make install-strip', and initialize
-# STRIPPROG with the value of the STRIP variable (set by the user).
-AC_DEFUN([AM_PROG_INSTALL_STRIP],
-[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'. However `strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
-if test "$cross_compiling" != no; then
- AC_CHECK_TOOL([STRIP], [strip], :)
-fi
-INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
-AC_SUBST([INSTALL_STRIP_PROGRAM])])
-
-# Check how to create a tarball. -*- Autoconf -*-
-
-# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 2
-
-# _AM_PROG_TAR(FORMAT)
-# --------------------
-# Check how to create a tarball in format FORMAT.
-# FORMAT should be one of `v7', `ustar', or `pax'.
-#
-# Substitute a variable $(am__tar) that is a command
-# writing to stdout a FORMAT-tarball containing the directory
-# $tardir.
-# tardir=directory && $(am__tar) > result.tar
-#
-# Substitute a variable $(am__untar) that extract such
-# a tarball read from stdin.
-# $(am__untar) < result.tar
-AC_DEFUN([_AM_PROG_TAR],
-[# Always define AMTAR for backward compatibility.
-AM_MISSING_PROG([AMTAR], [tar])
-m4_if([$1], [v7],
- [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
- [m4_case([$1], [ustar],, [pax],,
- [m4_fatal([Unknown tar format])])
-AC_MSG_CHECKING([how to create a $1 tar archive])
-# Loop over all known methods to create a tar archive until one works.
-_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
-_am_tools=${am_cv_prog_tar_$1-$_am_tools}
-# Do not fold the above two line into one, because Tru64 sh and
-# Solaris sh will not grok spaces in the rhs of `-'.
-for _am_tool in $_am_tools
-do
- case $_am_tool in
- gnutar)
- for _am_tar in tar gnutar gtar;
- do
- AM_RUN_LOG([$_am_tar --version]) && break
- done
- am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
- am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
- am__untar="$_am_tar -xf -"
- ;;
- plaintar)
- # Must skip GNU tar: if it does not support --format= it doesn't create
- # ustar tarball either.
- (tar --version) >/dev/null 2>&1 && continue
- am__tar='tar chf - "$$tardir"'
- am__tar_='tar chf - "$tardir"'
- am__untar='tar xf -'
- ;;
- pax)
- am__tar='pax -L -x $1 -w "$$tardir"'
- am__tar_='pax -L -x $1 -w "$tardir"'
- am__untar='pax -r'
- ;;
- cpio)
- am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
- am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
- am__untar='cpio -i -H $1 -d'
- ;;
- none)
- am__tar=false
- am__tar_=false
- am__untar=false
- ;;
- esac
-
- # If the value was cached, stop now. We just wanted to have am__tar
- # and am__untar set.
- test -n "${am_cv_prog_tar_$1}" && break
-
- # tar/untar a dummy directory, and stop if the command works
- rm -rf conftest.dir
- mkdir conftest.dir
- echo GrepMe > conftest.dir/file
- AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
- rm -rf conftest.dir
- if test -s conftest.tar; then
- AM_RUN_LOG([$am__untar <conftest.tar])
- grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
- fi
-done
-rm -rf conftest.dir
-
-AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
-AC_MSG_RESULT([$am_cv_prog_tar_$1])])
-AC_SUBST([am__tar])
-AC_SUBST([am__untar])
-]) # _AM_PROG_TAR
-
-m4_include([acinclude.m4])
diff --git a/ast-5.3-1/ast.news b/ast-5.3-1/ast.news
deleted file mode 100644
index 0691e79..0000000
--- a/ast-5.3-1/ast.news
+++ /dev/null
@@ -1,451 +0,0 @@
-AST Library
------------
- A new release (V5.3-1) of the Starlink AST (astrometry) library is
-now available.
-
- AST provides a comprehensive range of facilities for attaching
-world coordinate systems (such as RA/Dec, frequency, etc) to astronomical
-data, for retrieving and interpreting that information and for generating
-graphical output based on it.
-
- The library should be of interest to anyone writing astronomical
-software which needs to manipulate coordinate system data, especially
-celestial coordinate systems. AST is portable and
-environment-independent.
-
-Main Changes in this Version
-----------------------------
-
-- The StcsChan class now ignores case when reading STC-S phrases (except
-that units strings are still case sensitive).
-
-
-Main Changes in Version 5.3
----------------------------
-
-- The details of how a Frame is aligned with another Frame by the
-astFindFrame and astConvert (AST_FINDFRAME and AST_CONVERT) functions
-have been changed. The changes mean that a Frame can now be aligned with
-an instance of a sub-class of Frame, so long as the number of axes and
-the Domain values are consistent. For instance, a basic 2-dimensional
-Frame with Domain "SKY" will now align succesfully with a SkyFrame,
-conversion between the two Frames being achieved using a UnitMap.
-
-- The arrays that supply input values to astMapPut1<X> are now declared
-"const".
-
-- Added method astMatchAxes (AST_MATCHAXES) to the Frame class. This
-allows corresponding axes in two Frames to be identified.
-
-- The astAddFrame (AST_ADDFRAME) method can now be used to append one or
-more axes to all Frames in a FrameSet.
-
-
-Main Changes in Version 5.1
----------------------------
-
-- A new method called astSetFitsCM (AST_SETFITSCM) has been added to
-the FitsChan class. It stores a pure comment card in a FitsChan (that
-is, a card with no keyword name or equals sign).
-
-- A new attribute called ObsAlt has been added to the Frame class. It
-records the geodetic altitude of the observer, in metres. It defaults to
-zero. It is used when converting times to or from the TDB timescale, or
-converting spectral positions to or from the topocentric rest frame, or
-converting sky positions to or from horizon coordinates. The FitsChan
-class will include its effect when creating a set of values for the
-OBSGEO-X/Y/Z keywords, and will also assign a value to it when reading a
-set of OBSGEO-X/Y/Z keyword values from a FITS header.
-
-- The TimeMap conversions "TTTOTDB" and "TDBTOTT", and the SpecMap
-conversions "TPF2HL" and "HLF2TP", now have an additional argument -
-the observer's geodetic altitude.
-
-- The Polygon class has been modified to make it consistent with the
-IVOA STC definition of a Polygon. Specifically, the inside of a polygon
-is now the area to the left of each edge as the vertices are traversed in
-an anti-clockwise manner, as seen from the inside of the celestial sphere.
-Previously, AST used the anti-clockwise convention, but viewed from the
-outside of the celestial sphere instead of the inside. Any Polygon saved
-using previous versions of AST will be identified and negated automatically
-when read by AST V5.2.
-
-- A new class of Channel, called StcsChan, has been added that allows
-conversion of suitable AST Objects to and from IVOA STC-S format.
-
-- A new method called astDownsize (AST_DOWNSIZE) has been added to the
-Polygon class. It produces a new Polygon that contains a subset of the
-vertices in the supplied Polygon. The subset is chosen to retain the main
-features of the supplied Polygion, in so far as that is possible, within
-specified constraints.
-
-- A new constructor called astOutline (AST_OUTLINE) has been added to the
-Polygon class. Given a 2D data array, it identifies the boundary of a
-region within the array that holds pixels with specified values. It then
-creates a new Polygon to describe this boundary to a specified accuracy.
-
-- A new method called astRemoveRegions (AST_REMOVEREGIONS) has been added
-to the Mapping class. It removes the masking effects of any Regions found
-within a (possibly compound) Mapping or Frame. In effect, it replaces
-each Region found within the Mapping or Frame with a UnitMap or
-equivalent Frame.
-
-- A new set of methods, called astMapGetElem<X> (AST_MAPGETELEM<X>) has
-been added to the KeyMap class. They allow a single element of a vector
-valued entry to be returned.
-
-- A new attribute called KeyError has been added to the KeyMap Class. It
-controls whether the astMapGet... (AST_MAPGET...) family of functions report
-an error if an entry with the requested key does not exist in the KeyMap.
-
-Main Changes in Version 5.1
----------------------------
-
-- The astUnlock function now has an extra parameter that controls whether
-or not an error is reported if the Object is currently locked by another
-thread.
-
-- The values of the AST__THREADSAFE macro (defined in ast.h) have
-been changed from "yes" and "no" to "1" and "0".
-
-- The PointList class has a new method, astPoints, that copies the axis
-values from the PointList into a supplied array.
-
-- The PointList class has a new (read-only) attribute, ListSize, that
-gives the number of points stored in the PointList.
-
-- A new method (astIntersect) has been added to the Frame class. It
-determines the position at which two geodesic curves intersect.
-
-- The XmlStrict attribute and astXmlWarnings function have been removed.
-The same functionality is now available via the existing Strict attribute,
-a new attribute called ReportLevel, and a new function called astWarnings.
-
-- A bug in the type-checking of Objects passed as arguments to constructor
-functions has been fixed. This bug could lead to applications crashing or
-showing strange behaviour if an inappropriate class of Object was
-supplied as an argument to a constructor.
-
-- The astPickAxes function will now return a Region, if possible, when
-applied to a Region. If this is not possible, a Frame will be returned as
-before.
-
-- The default gap size between the ISO date/time labels used by the Plot
-class when displaying an annotated axis described by a TimeFrame has been
-changed. The changes are meant to improve the labelling of calendar time
-axes that span intervals from a day to a few years.
-
-Main Changes in Version 5.0
----------------------------
-
-- AST is now thread-safe. Many of the macro definitions in the "ast.h"
-header file have changed, and so all source code that include "ast.h"
-should be re-compiled.
-
-- The TimeFrame class now support Local Time as a time scale. The offset
-from UTC to Local Time is specified by a new TimeFrame attribute called
-LTOffset.
-
-- Addition of a new class called Plot3D that provides facilities for
-producing 3-dimensional annotated coordinate grids.
-
-- A correction for diurnal aberration is now included when
-converting between AZEL and other celestial coordinate systems. The
-correction is based on the value of the ObsLat Frame attribute (the
-geodetic latitude of the observer).
-
-- A bug has been fixed which caused the DUT1 attribute to be ignored
-by the SkyFrame class when finding conversions between AZEL and other
-celestial coordinate systems.
-
-- The Channel class has a new attribute called Strict which controls
-whether or not to report an error if unexpected data items are found
-within an AST Object description read from an external data source. Note,
-the default behaviour is now not to report such errors. This differs from
-previous versions of AST which always reported an error is unexpected
-input items were encountered.
-
-
-
-Main Changes in Version 4.5
----------------------------
-
-- All FITS-CLASS headers are now created with a frequency axis. If the
-FrameSet supplied to astWrite contains a velocity axis (or any other form
-of spectral axis) it will be converted to an equivalent frequency axis
-before being used to create the FITS-CLASS header.
-
-- The value stored in the FITS-CLASS keyword "VELO-LSR" has been changed
-from the velocity of the source to the velocity of the reference channel.
-
-- Addition of a new method call astPurgeWCS (AST_PURGEWCS) to the FitsChan
-class. This method removes all WCS-related header cards from a FitsChan.
-
-- The astRebinSeq functions now have an extra parameter that is used to
-record the total number of input data val;ues added into the output
-array. This is necessary to correct a flaw in the calculation of output
-variances based on the spread of input values. NOTE, THIS CHANGE WILL
-REQUIRE EXISTING CODE THAT USES ASTREBINSEQ TO BE MODIFIED TO INCLUDE THE
-NEW PARAMETER (CALLED "NUSED").
-- The Plot class now honours the value of the LabelUp attribute even if
-numerical labels are placed around the edge of the Plot. Previously
-LabelUp was only used if the labels were drawn within the interior of
-the plot. The LabelUp attribute controls whether numerical labels are
-drawn horizontally or parallel to the axis they describe.
-- The Plot class has a new attribute called GrfContext that can be used
-to comminicate context information between an application and any
-graphics functions registered with the Plot class via the astGrfSet
-(AST_GRFSET) function.
-- Functions registered with the Plot class using astGrfSet (AST_GRFSET)
-now take a new additional integer parameter, "grfcon". The Plot class
-sets this parameter to value of the Plot's GrfContext attribute before
-calling the graphics function. NOTE, THIS CHANGE WILL REQUIRE EXISTING
-CODE THAT USES astGrfSet (AST_GRFSET) TO BE MODIFIED TO INCLUDE THE
-NEW PARAMETER.
-- Support has been added for the FITS-WCS "HPX" projection (HEALPix).
-- A new flag "AST__VARWGT" can be supplied to astRebinSeq. This causes
-the input data values to be weighted using the reciprocals of the input
-variances (if supplied).
-- The Frame class has a new read-only attribute called NormUnit that
-returns the normalised value of the Unit attribute for an axis. Here,
-"normalisation" means cancelling redundant units, etc. So for instance, a
-Unit value of "s*(m/s)" would result in a NormUnit value of "m".
-- A new method astShowMesh has been added to the Region class. It
-displays a mesh of points covering the surface of a Region by writing out
-a table of axis values to standard output.
-- A bug has been fixed that could segmentation violations when setting
-attribute values.
-
-Main Changes in Version 4.4
----------------------------
-
-- The astFindFrame (AST_FINDFRAME) method can now be used to search a
-CmpFrame for an instance of a more specialised class of Frame (SkyFrame,
-TimeFrame, SpecFrame, DSBSpecFrame or FluxFrame). That is, if an instance
-of one of these classes is used as the "template" when calling
-astFindFrame, and the "target" being searched is a CmpFrame (or a
-FrameSet in which the current Frame is a CmpFrame), then the component
-Frames within the CmpFrame will be searched for an instance of the
-supplied template Frame, and, if found, a suitable Mapping (which will
-include a PermMap to select the required axes from the CmpFrame) will be
-returned by astFindFrame. Note, for this to work, the MaxAxes and MinAxes
-attributes of the template Frame must be set so that they cover a range
-that includes the number of axes in the target CmpFrame.
-
-- The DSBSpecFrame class has a new attribute called AlignSB that
-specifies whether or not to take account of the SideBand attributes when
-aligning two DSBSpecFrames using astConvert (AST_CONVERT).
-
-- The Frame class has a new attribute called Dut1 that can be used to
-store a value for the difference between the UT1 and UTC timescales at
-the epoch referred to by the Frame.
-
-- The number of digits used to format the Frame attributes ObsLat and
-ObsLon has been increased.
-
-- The use of the SkyFrame attribute AlignOffset has been changed. This
-attribute is used to control how two SkyFrames are aligned by astConvert.
-If the template and target SkyFrames both have a non-zero value for
-AlignOffset, then alignment occurs within the offset coordinate systems
-(that is, a UnitMap will always be used to align the two SkyFrames).
-
-- The Plot class has a new attribute called ForceExterior that can be
-used to force exterior (rather than interior) tick marks to be produced,
-even if this would result in less than 3 tick marks being produced.
-
-- The TimeFrame class now supports conversion between angle based
-timescales such as UT1 and atomic based timescales such as UTC.
-
-
-Main Changes in Version 4.3
----------------------------
-
-- The SpecFrame class has a new attribute called SourceSys that specified
-whether the SourceVel attribute (which specifies the rest frame of the
-source) should be accessed as an apparent radial velocity or a redshift.
-Note, any existing software that assumes that SourceVel always represents
-a velocity in km/s should be changed to allow for the possibility of
-SourceVel representing a redshift value.
-
-- The astGetFitsS (AST_GETFITSS) function now strips trailing white space
-from the returned string, if the original string contains 8 or fewer
-characters.
-
-
-Main Changes in Version 4.2
----------------------------
-
-- The SideBand attribute of the DSBSpecFrame class can now take the
-option "LO" in addition to "USB" and "LSB". The new option causes the
-DSBSpecFrame to represent the offset from the local oscillator frequency,
-rather than either of the two sidebands.
-
-- The FitsChan class has been changed so that it writes out a VELOSYS
-keyword when creating a FITS-WCS encoding (VELOSYS indicates the
-topocentric apparent velocity of the standard of rest). FitsChan also
-strips out VELOSYS keywords when reading a FrameSet from a FITS-WCS
-encoding.
-
-- The FitsChan class has a new method called astRetainFits (AST_RETAINFITS)
-that indicates that the current card in the FitsChan should not be
-stripped out of the FitsChan when an AST Object is read from the FitsChan.
-Unless this method is used, all cards that were involved in the creation
-of the AST Object will be stripped from the FitsChan afte a read operation.
-
-- The ast_link_adam and ast_link scripts now ignore the -fsla and -csla
-options, and always link against the minimal cut-down version of SLALIB
-distributed as part of AST.
-
-- A problem with unaligned memory access that could cause bus errors on
-Solaris has been fixed.
-
-- A new function called astTune (or AST_TUNE) has been added which can be
-used to get and set global AST tuning parameters. At the moment there are
-only two such parameter, both of which are concerned with memory management
-within AST.
-
-- A new method called astTranGrid (AST_TRANGRID in Fortran) has been
-added to the Mapping class. This method creates a regular grid of points
-covering a rectangular region within the input space of a Mapping, and
-then transforms this set of points into the output space of the Mapping,
-using a piecewise-continuous linear approximation to the Mapping if
-appropriate in order to achive higher speed.
-
-- A new subclass of Mapping has been added called SwitchMap. A
-SwitchMap represents several alternate Mappings, each of which is used to
-transforms input positions within a different region of the input
-coordinate space.
-
-- A new subclass of Mapping has been added called SelectorMap. A
-SelectorMap tests each input position to see if it falls within one of
-several Regions. If it does, the index of the Region containing the
-input position is returned as the Mapping output.
-
-- The behaviour of the astConvert (AST_CONVERT) method when trying to
-align a CmpFrame with another Frame has been modified. If no conversion
-between positions in the Frame and CmpFrame can be found, an attempt is
-now made to find a conversion between the Frame and one of two component
-Frames contained within the CmpFrame. Thus is should now be possible to
-align a SkyFrame with a CmpFrame containing a SkyFrame and a SpecFrame
-(for instance). The returned Mapping produces bad values for the extra
-axes (i.e. for the SpecFrame axis in the above example).
-
-Main Changes in Version 4.1
----------------------------
-
-- A new control flag has been added to the AST_RESAMPLE<X>/astResample<X>
-functions which produces approximate flux conservation.
-
-- The SkyFrame class now supports a System value of "AZEL" corresponding
-to horizon (azimuth/elevation) coordinates.
-
-- The FitsChan class allows the non-standard strings "AZ--" and "EL--" to
-be used as axis types in FITS-WCS CTYPE keyword values.
-
-- The Frame class now has attributes ObsLon and ObsLat to specify
-the geodetic longitude and latitude of the observer.
-
-- The ClockLon and ClockLat attributes have been removed from the
-TimeFrame class. Likewise, the GeoLon and GeoLat attributes have been
-removed from the SpecFrame class. Both classes now use the ObsLon and
-ObsLat attributes of the parent Frame class instead. However, the old
-attribute names can be used as synonyms for ObsLat and ObsLon. Also,
-dumps created using the old scheme can be read succesfully by AST V4.1
-and converted to the new form.
-
-- A new function astMapSplit has been added to the Mapping class. This
-splits a Mapping into two component Mappings which, when combined in
-parallel, are equivalent to the original Mapping.
-
-- The default value for the SkyRefIs attribute has been changed from
-"Origin" to "Ignored". This means that if you want to use a SkyFrame
-to represent offsets from some origin position, you must now set the
-SkyRefIs attribute explicitly to either "Pole" or "Origin", in addition
-to assigning the required origin position to the SkyRef attribute.
-
-
-Main Changes in Version 4.0
----------------------------
-
-- Experimental support for reading IVOA Space-Time-Coordinates (STC)
-descriptions using the XmlChan class has been added. Support is included
-for a subset of V1.20 of the draft STC specification.
-
-- A new set of methods (AST_REBIN<X>/astRebin<X>) has been added to
-the Mapping class. These are accurately flux-conserving alternatives to the
-existing AST_RESAMPLE<X>/astResample<X> methods.
-
-
-Main Changes in Version 3.7
----------------------------
-
-- Support for time coordinate systems has been introduced throught the
-addition of two new classes, TimeFrame and TimeMap. The TimeFrame is a
-1-dimensional Frame which can be used to describe moments in time (either
-absolute or relative) in various systems (MJD, Julian Epoch, etc.) and
-referred to various time scales (TAI, UTC, UT1, GMST, etc). The TimeMap
-is a Mapping which can transform time values between these various
-systems and time scales.
-
-
-Main Changes in Version 3.6
----------------------------
-
-- If the Format attribute associated with an axis of a SkyFrame starts
-with a percent character (%), then axis values are now formatted and
-unformatted as a decimal radians value, using the Format syntax of a
-simple Frame.
-
-- The Plot class has a new attribute called Clip which controls the
-clipping performed by AST at the plot boundary.
-
-- The PolyMap class has been modified to allow a PolyMap to be written
-succesfully to a FitsChan using Native encoding.
-
-- A mimimal cut down subset of the C version of SLALIB is now included
-with the AST distribution and built as part of building AST. This means
-that it is no longer necessary to have SLALIB installed separately at
-your site. The SLALIB code included with AST is distrubuted under the
-GPL. The default behaviour of the ast_link script is now to link with
-this internal slalib subset. However, the ``-csla'' option can still be
-used to force linking with an external full C SLALIB library. A new
-option ``-fsla'' has been introduced which forces linking with the
-external full Fortran SLALIB library.
-
-
-Main Changes in Version 3.5
----------------------------
-
-- AST now provides facilities for representing regions of various
-shapes within a coordinate system. The Region class provides general
-facilities which are independent of the specific shape of region being
-used. Various sub-classes of Region are also now available which provide
-means of creating Regions of specific shape. Facilities provided by the
-Region class include testing points to see if they are inside the
-Region, testing two Regions for overlap, transforming Regions from one
-coordinate system to another, etc.
-
-- A new class of 1-dimensional Frame called FluxFrame has been added which
-can be used to describe various systems for describing ovserved value at a
-single fixed spectral position.
-
-- A new class of 2-dimensional Frame called SpecFluxFrame has been added which
-can be used to describe a 2-d frame spanned by a spectral position axis
-and and an observed value axis.
-
-- A new class of Mapping called RateMap has been added. A RateMap encapsulates
-a previously created Mapping. The inputs of the RateMap correspond to the
-inputs of the encapsulated Mapping. All RateMaps have just a single
-output which correspond to the rate of change of a specified output of
-the encapsulated Mapping with respect to a specified input.
-
-- The SkyFrame class now supports a value of "J2000" for System. This
-system is an equatorial system based on the mean dynamical equator and
-equinox at J2000, and differs slightly from an FK5(J2000) system.
-
-- Methods have been added to the FitsChan class to allow values for named
-keywords to be changed or added.
-
-- The parameter list for the astRate method of the Mapping class has been
-modified. It no longer returns a second derivative estimate. Existing
-code which uses the astRate (AST_RATE) method will need to be changed.
diff --git a/ast-5.3-1/ast_cpp.in b/ast-5.3-1/ast_cpp.in
deleted file mode 100644
index c4fb206..0000000
--- a/ast-5.3-1/ast_cpp.in
+++ /dev/null
@@ -1,11 +0,0 @@
-
-# Replacement for the C pre-processor command "cpp" which is not
-# always available. This uses the compiler command "cc" to do the same
-# thing. Also, this reads from standard input (which "cc" won't do).
-#
-# The name of the CPP processor is substituted in by the ./configure script,
-# based on the result of the AC_PROG_CPP test.
-
-cat >/tmp/ast_cpp_$$.c
- at CPP@ /tmp/ast_cpp_$$.c
-rm -f /tmp/ast_cpp_$$.c
diff --git a/ast-5.3-1/ast_err.h b/ast-5.3-1/ast_err.h
deleted file mode 100644
index f31bbfc..0000000
--- a/ast-5.3-1/ast_err.h
+++ /dev/null
@@ -1,423 +0,0 @@
-/*
- * C error define file for facility AST (1521)
- * Generated by the MESSGEN utility
- */
-
-#ifndef AST_ERROR_DEFINED
-#define AST_ERROR_DEFINED
-
-/* attribute getting error */
-enum { AST__ATGER = 233933154 }; /* messid=300 */
-
-/* attribute setting error */
-enum { AST__ATSER = 233933162 }; /* messid=301 */
-
-/* attribute value invalid */
-enum { AST__ATTIN = 233933170 }; /* messid=302 */
-
-/* axis index invalid */
-enum { AST__AXIIN = 233933178 }; /* messid=303 */
-
-/* bad attribute name */
-enum { AST__BADAT = 233933186 }; /* messid=304 */
-
-/* zero-sized box given */
-enum { AST__BADBX = 233933194 }; /* messid=305 */
-
-/* bad input data */
-enum { AST__BADIN = 233933202 }; /* messid=306 */
-
-/* bad number of input coordinates */
-enum { AST__BADNI = 233933210 }; /* messid=307 */
-
-/* bad number of output coordinates */
-enum { AST__BADNO = 233933218 }; /* messid=308 */
-
-/* PolyMap contains illegal power value */
-enum { AST__BADPW = 233933226 }; /* messid=309 */
-
-/* ShiftMap contains no shift information */
-enum { AST__BADSM = 233933234 }; /* messid=310 */
-
-/* WinMap contains no bounds information */
-enum { AST__BADWM = 233933242 }; /* messid=311 */
-
-/* bad break index */
-enum { AST__BDBRK = 233933250 }; /* messid=312 */
-
-/* bad field specifier */
-enum { AST__BDFMT = 233933258 }; /* messid=313 */
-
-/* invalid FITS keyword value found */
-enum { AST__BDFTS = 233933266 }; /* messid=314 */
-
-/* inappropriate Object supplied */
-enum { AST__BDOBJ = 233933274 }; /* messid=315 */
-
-/* wrong number of clipping axes */
-enum { AST__CLPAX = 233933282 }; /* messid=316 */
-
-/* range of coordinates invalid */
-enum { AST__CORNG = 233933290 }; /* messid=317 */
-
-/* too many breaks in a curve */
-enum { AST__CVBRK = 233933298 }; /* messid=318 */
-
-/* array dimensions invalid */
-enum { AST__DIMIN = 233933306 }; /* messid=319 */
-
-/* date/time error */
-enum { AST__DTERR = 233933314 }; /* messid=320 */
-
-/* invalid use of astEnd */
-enum { AST__ENDIN = 233933322 }; /* messid=321 */
-
-/* end of input Channel encountered */
-enum { AST__EOCHN = 233933330 }; /* messid=322 */
-
-/* attempt to export Object pointer from level zero */
-enum { AST__EXPIN = 233933338 }; /* messid=323 */
-
-/* corrupted FitsChan supplied */
-enum { AST__FCRPT = 233933346 }; /* messid=324 */
-
-/* error while formatting coordinate value */
-enum { AST__FMTER = 233933354 }; /* messid=325 */
-
-/* Frame index invalid */
-enum { AST__FRMIN = 233933362 }; /* messid=326 */
-
-/* FrameSet invalid */
-enum { AST__FRSIN = 233933370 }; /* messid=327 */
-
-/* cannot convert FITS data value type */
-enum { AST__FTCNV = 233933378 }; /* messid=328 */
-
-/* low level graphics error */
-enum { AST__GRFER = 233933386 }; /* messid=329 */
-
-/* invalid Handle */
-enum { AST__INHAN = 233933394 }; /* messid=330 */
-
-/* incompatible numbers of coordinates */
-enum { AST__INNCO = 233933402 }; /* messid=331 */
-
-/* internal programming error */
-enum { AST__INTER = 233933410 }; /* messid=332 */
-
-/* incompatible transformation directions */
-enum { AST__INTRD = 233933418 }; /* messid=333 */
-
-/* circular dependency between KeyMaps */
-enum { AST__KYCIR = 233933426 }; /* messid=334 */
-
-/* class loader error */
-enum { AST__LDERR = 233933434 }; /* messid=335 */
-
-/* invalid lookup table increment */
-enum { AST__LUTII = 233933442 }; /* messid=336 */
-
-/* invalid number of lookup table elements */
-enum { AST__LUTIN = 233933450 }; /* messid=337 */
-
-/* requested memory size invalid */
-enum { AST__MEMIN = 233933458 }; /* messid=338 */
-
-/* not a 2d or 3d MatrixMap */
-enum { AST__MTR23 = 233933466 }; /* messid=339 */
-
-/* null rotation axis supplied */
-enum { AST__MTRAX = 233933474 }; /* messid=340 */
-
-/* bad matrix shapes for multiplication */
-enum { AST__MTRML = 233933482 }; /* messid=341 */
-
-/* null matrix supplied */
-enum { AST__MTRMT = 233933490 }; /* messid=342 */
-
-/* number of axes invalid */
-enum { AST__NAXIN = 233933498 }; /* messid=343 */
-
-/* number of characters invalid */
-enum { AST__NCHIN = 233933506 }; /* messid=344 */
-
-/* number of coordinates invalid */
-enum { AST__NCOIN = 233933514 }; /* messid=345 */
-
-/* number of coordinates per point invalid */
-enum { AST__NCPIN = 233933522 }; /* messid=346 */
-
-/* number of array elements invalid */
-enum { AST__NELIN = 233933530 }; /* messid=347 */
-
-/* number of output coordinates too small */
-enum { AST__NOCTS = 233933538 }; /* messid=348 */
-
-/* transformation not defined */
-enum { AST__NODEF = 233933546 }; /* messid=349 */
-
-/* required FITS keywords missing */
-enum { AST__NOFTS = 233933554 }; /* messid=350 */
-
-/* unable to allocate memory */
-enum { AST__NOMEM = 233933562 }; /* messid=351 */
-
-/* number of output points too small */
-enum { AST__NOPTS = 233933570 }; /* messid=352 */
-
-/* attribute is read-only */
-enum { AST__NOWRT = 233933578 }; /* messid=353 */
-
-/* number of points invalid */
-enum { AST__NPTIN = 233933586 }; /* messid=354 */
-
-/* Object invalid */
-enum { AST__OBJIN = 233933594 }; /* messid=355 */
-
-/* invalid Plot option */
-enum { AST__OPT = 233933602 }; /* messid=356 */
-
-/* points data structure invalid */
-enum { AST__PDSIN = 233933610 }; /* messid=357 */
-
-/* no numerical labels can be produced */
-enum { AST__PLFMT = 233933618 }; /* messid=358 */
-
-/* permutation invalid */
-enum { AST__PRMIN = 233933626 }; /* messid=359 */
-
-/* pointer invalid */
-enum { AST__PTRIN = 233933634 }; /* messid=360 */
-
-/* range of points invalid */
-enum { AST__PTRNG = 233933642 }; /* messid=361 */
-
-/* read error */
-enum { AST__RDERR = 233933650 }; /* messid=362 */
-
-/* invalid or corrupted Region structure supplied */
-enum { AST__REGIN = 233933658 }; /* messid=363 */
-
-/* invalid attempt to remove last Frame */
-enum { AST__REMIN = 233933666 }; /* messid=364 */
-
-/* sky coordinate system invalid */
-enum { AST__SCSIN = 233933674 }; /* messid=365 */
-
-/* axis selection invalid */
-enum { AST__SELIN = 233933682 }; /* messid=366 */
-
-/* bad SLALIB transformation type */
-enum { AST__SLAIN = 233933690 }; /* messid=367 */
-
-/* coordinate transformation not defined */
-enum { AST__TRNND = 233933698 }; /* messid=368 */
-
-/* unmatched quotes */
-enum { AST__UNMQT = 233933706 }; /* messid=369 */
-
-/* valid area too small */
-enum { AST__VSMAL = 233933714 }; /* messid=370 */
-
-/* non-existent longitude or latitude axis */
-enum { AST__WCSAX = 233933722 }; /* messid=371 */
-
-/* too few mapping coordinates */
-enum { AST__WCSNC = 233933730 }; /* messid=372 */
-
-/* invalid projection parameters */
-enum { AST__WCSPA = 233933738 }; /* messid=373 */
-
-/* unknown projection type */
-enum { AST__WCSTY = 233933746 }; /* messid=374 */
-
-/* too many Objects in use at once */
-enum { AST__XSOBJ = 233933754 }; /* messid=375 */
-
-/* zoom factor invalid */
-enum { AST__ZOOMI = 233933762 }; /* messid=376 */
-
-/* bad coordinate index */
-enum { AST__BADCI = 233933770 }; /* messid=377 */
-
-/* FrameSet integrity lost */
-enum { AST__ILOST = 233933778 }; /* messid=378 */
-
-/* error in IntraMap transformation function */
-enum { AST__ITFER = 233933786 }; /* messid=379 */
-
-/* IntraMap transformation function name invalid */
-enum { AST__ITFNI = 233933794 }; /* messid=380 */
-
-/* Mapping bounding box not found */
-enum { AST__MBBNF = 233933802 }; /* messid=381 */
-
-/* multiple registration of IntraMap transformation function */
-enum { AST__MRITF = 233933810 }; /* messid=382 */
-
-/* Object class unknown */
-enum { AST__OCLUK = 233933818 }; /* messid=383 */
-
-/* error while unformatting a coordinate value */
-enum { AST__UNFER = 233933826 }; /* messid=384 */
-
-/* unregistered IntraMap transformation function */
-enum { AST__URITF = 233933834 }; /* messid=385 */
-
-/* grid bounds invalid */
-enum { AST__GBDIN = 233933842 }; /* messid=386 */
-
-/* number of grid dimensions invalid */
-enum { AST__NGDIN = 233933850 }; /* messid=387 */
-
-/* positional accuracy tolerance invalid */
-enum { AST__PATIN = 233933858 }; /* messid=388 */
-
-/* sub-pixel interpolation scheme invalid */
-enum { AST__SISIN = 233933866 }; /* messid=389 */
-
-/* scale size in pixels invalid */
-enum { AST__SSPIN = 233933874 }; /* messid=390 */
-
-/* error in user-supplied sub-pixel interpolation function */
-enum { AST__UINER = 233933882 }; /* messid=391 */
-
-/* error in user-supplied 1-d sub-pixel interpolation kernel */
-enum { AST__UK1ER = 233933890 }; /* messid=392 */
-
-/* invalid comma in expression */
-enum { AST__COMIN = 233933898 }; /* messid=393 */
-
-/* invalid constant in expression */
-enum { AST__CONIN = 233933906 }; /* messid=394 */
-
-/* duplicate variable name */
-enum { AST__DUVAR = 233933914 }; /* messid=395 */
-
-/* invalid number of transformation functions */
-enum { AST__INNTF = 233933922 }; /* messid=396 */
-
-/* missing or invalid operand in expression */
-enum { AST__MIOPA = 233933930 }; /* messid=397 */
-
-/* missing or invalid operator in expression */
-enum { AST__MIOPR = 233933938 }; /* messid=398 */
-
-/* missing variable name */
-enum { AST__MISVN = 233933946 }; /* messid=399 */
-
-/* missing left parenthesis in expression */
-enum { AST__MLPAR = 233933954 }; /* messid=400 */
-
-/* missing right parenthesis in expression */
-enum { AST__MRPAR = 233933962 }; /* messid=401 */
-
-/* missing right hand side in function */
-enum { AST__NORHS = 233933970 }; /* messid=402 */
-
-/* undefined variable or function in expression */
-enum { AST__UDVOF = 233933978 }; /* messid=403 */
-
-/* variable name invalid */
-enum { AST__VARIN = 233933986 }; /* messid=404 */
-
-/* wrong number of function arguments in expression */
-enum { AST__WRNFA = 233933994 }; /* messid=405 */
-
-/* invalid units specification */
-enum { AST__BADUN = 233934002 }; /* messid=406 */
-
-/* no rest frequency is defined */
-enum { AST__NORSF = 233934010 }; /* messid=407 */
-
-/* no standard of rest is defined */
-enum { AST__NOSOR = 233934018 }; /* messid=408 */
-
-/* invalid SpecMap */
-enum { AST__SPCIN = 233934026 }; /* messid=409 */
-
-/* invalid XML name or prefix */
-enum { AST__XMLNM = 233934034 }; /* messid=410 */
-
-/* invalid XML comment text */
-enum { AST__XMLCM = 233934042 }; /* messid=411 */
-
-/* invalid XML processing instruction target text */
-enum { AST__XMLPT = 233934050 }; /* messid=412 */
-
-/* invalid XML content item index */
-enum { AST__XMLIT = 233934058 }; /* messid=413 */
-
-/* supplied XML document is not well formed */
-enum { AST__XMLWF = 233934066 }; /* messid=414 */
-
-/* Range of log axis scale includes zero */
-enum { AST__ZERAX = 233934074 }; /* messid=415 */
-
-/* Invalid parameters for offset sky coordinate system */
-enum { AST__BADOC = 233934082 }; /* messid=416 */
-
-/* error getting a named value from a KeyMap */
-enum { AST__MPGER = 233934090 }; /* messid=417 */
-
-/* invalid integer index supplied for a KeyMap entry */
-enum { AST__MPIND = 233934098 }; /* messid=418 */
-
-/* region cannot be re-centred */
-enum { AST__REGCN = 233934106 }; /* messid=419 */
-
-/* attribute has no usable value */
-enum { AST__NOVAL = 233934114 }; /* messid=420 */
-
-/* incompatible time scales */
-enum { AST__INCTS = 233934122 }; /* messid=421 */
-
-/* invalid TimeMap */
-enum { AST__TIMIN = 233934130 }; /* messid=422 */
-
-/* cannot use supplied AstroCoords info */
-enum { AST__STCKEY = 233934138 }; /* messid=423 */
-
-/* invalid AstroCoords index */
-enum { AST__STCIND = 233934146 }; /* messid=424 */
-
-/* cannot conserve flux whilst resampling an array of data */
-enum { AST__CNFLX = 233934154 }; /* messid=425 */
-
-/* Unknown AST tuning parameter name supplied */
-enum { AST__TUNAM = 233934162 }; /* messid=426 */
-
-/* Bad value supplied for a public function parameter */
-enum { AST__BDPAR = 233934170 }; /* messid=427 */
-
-/* Supplied FrameSet does not contain any independent axes */
-enum { AST__3DFSET = 233934178 }; /* messid=428 */
-
-/* Attempt to delete original Plot3D base Frame */
-enum { AST__PXFRRM = 233934186 }; /* messid=429 */
-
-/* Illegal syntax for string substitution template */
-enum { AST__BADSUB = 233934194 }; /* messid=430 */
-
-/* Incompatible flags for re-sampling or re-binning */
-enum { AST__BADFLG = 233934202 }; /* messid=431 */
-
-/* Error locking or unlocking an AST Object */
-enum { AST__LCKERR = 233934210 }; /* messid=432 */
-
-/* FITS keyword had undefined value */
-enum { AST__FUNDEF = 233934218 }; /* messid=433 */
-
-/* invalid integer index supplied for a KeyMap vector element */
-enum { AST__MPVIN = 233934226 }; /* messid=434 */
-
-/* operation specifier invalid */
-enum { AST__OPRIN = 233934234 }; /* messid=435 */
-
-/* no inside point found */
-enum { AST__NONIN = 233934242 }; /* messid=436 */
-
-/* requested key not found in KeyMap */
-enum { AST__MPKER = 233934250 }; /* messid=437 */
-
-#endif /* AST_ERROR_DEFINED */
diff --git a/ast-5.3-1/ast_link.in b/ast-5.3-1/ast_link.in
deleted file mode 100644
index 4b472cd..0000000
--- a/ast-5.3-1/ast_link.in
+++ /dev/null
@@ -1,454 +0,0 @@
-
-# N.B. the previous line should be blank.
-#++
-# Name:
-# ast_link
-
-# Purpose:
-# Link a program with the AST library.
-
-# Type of Module:
-# Shell script.
-
-# Description:
-# This command should be used when building programs which use the AST
-# library, in order to generate the correct arguments to allow the compiler
-# to link your program. The arguments generated are written to standard
-# output but may be substituted into the compiler command line in the
-# standard UNIX way using backward quotes (see below).
-#
-# By default, it is assumed that you are building a stand-alone program
-# which does not produce graphical output. However, switches are provided
-# for linking other types of program.
-
-# Invocation:
-#c cc program.c -L/star/lib `ast_link [switches]` -o program
-#f f77 program.f -L/star/lib `ast_link [switches]` -o program
-
-# Switches:
-# The following switches may optionally be given to this command to
-# modify its behaviour:
-#
-#
-# - ``-csla'': Ignored. Provided for backward compatibility only.
-#
-# - ``-fsla'': Ignored. Provided for backward compatibility only.
-#
-# - ``-ems'': Requests that the program be linked so that error messages
-# produced by the AST library are delivered via the Starlink EMS (Error
-# Message Service) library (Starlink System Note SSN/4). By default,
-# error messages are simply written to standard error.
-#
-# - ``-drama'': Requests that the program be linked so that error messages
-# produced by the AST library are delivered via the DRAMA Ers (Error
-# Reporting Service) library. By default, error messages are simply
-# written to standard error.
-#
-# - ``-grf'': Requests that no arguments be generated to specify which
-# 2D graphics system is used to display output from the AST library. You
-# should use this option only if you have implemented an interface to a
-# new graphics system yourself and wish to provide your own arguments for
-# linking with it. This switch differs from the other ``grf'' switches in
-# that it assumes that your graphics module implements the complete
-# interface required by the current version of AST. If future versions of
-# AST introduce new functions to the graphics interface, this switch will
-# cause ``unresolved symbol'' errors to occur during linking, warning you
-# that you need to implement new functions in your graphics module. To
-# avoid such errors, you can use one of the other, version-specific,
-# switches in place of the ``-grf'' switch, but these will cause run-time
-# errors to be reported if any AST function is invoked which requires
-# facilities not in the implemented interface.
-#
-# - ``-grf_v2.0'': This switch is equivalent to the ``-mygrf'' switch.
-# It indicates that you want to link with your own graphics module
-# which implements the 2D graphics interface required by V2.0 of AST.
-#
-# - ``-grf_v3.2'': Indicates that you want to link with your own
-# graphics module which implements the 2D graphics interface required by
-# V3.2 of AST.
-#
-# - ``-myerr'': Requests that no arguments be generated to specify how
-# error messages produced by the AST library should be delivered. You
-# should use this option only if you have implemented an interface to a
-# new error delivery system yourself and wish to provide your own
-# arguments for linking with it.
-#
-# - ``-mygrf'': This switch has been superceeded by the ``-grf'' switch,
-# but is retained in order to allow applications to be linked with a
-# graphics module which implements the 2D interface used by AST V2.0. It
-# is equivalent to the ``-grf_v2.0'' switch.
-#
-# - ``-pgp'': Requests that the program be linked so that 2D
-# graphical output from the AST library is displayed via the
-# Starlink version of the PGPLOT graphics package (which uses GKS
-# for its output). By default, no 2D graphics package is linked and
-# this will result in an error at run time if AST routines are
-# invoked that attempt to generate graphical output.
-#
-# - ``-pgplot'': Requests that the program be linked so that 2D
-# graphical output from the AST library is displayed via
-# the standard (or ``native'') version of the PGPLOT graphics
-# package. By default, no 2D graphics package is linked and this will
-# result in an error at run time if AST routines are invoked that
-# attempt to generate graphical output.
-#
-# - ``-grf3d'': Requests that no arguments be generated to specify which
-# 3D graphics system is used to display output from the AST library. You
-# should use this option only if you have implemented an interface to a
-# new 3D graphics system yourself and wish to provide your own arguments
-# for linking with it.
-#
-# - ``-pgp3d'': Requests that the program be linked so that 3D
-# graphical output from the AST library is displayed via the
-# Starlink version of the PGPLOT graphics package (which uses GKS
-# for its output). By default, no 3D graphics package is linked and
-# this will result in an error at run time if AST routines are
-# invoked that attempt to generate graphical output.
-#
-# - ``-pgplot3d'': Requests that the program be linked so that 3D
-# graphical output from the AST library is displayed via
-# the standard (or ``native'') version of the PGPLOT graphics
-# package. By default, no 3D graphics package is linked and this will
-# result in an error at run time if AST routines are invoked that
-# attempt to generate graphical output.
-
-# SLALIB:
-# The AST distribution includes a cut down subset of the C version of
-# the SLALIB library written by Pat Wallace. This subset contains only
-# the functions needed by the AST library. It is built as part of the
-# process of building AST and is distributed under GPL (and is thus
-# compatible with the AST license). Previous version of this script
-# allowed AST applications to be linked against external SLALIB
-# libraries (either Fortran or C) rather than the internal version.
-# The current version of this script does not provide this option,
-# and always uses the internal SLALIB library. However, for backward
-# compatibility, this script still allows the "-fsla" and "-csla" flags
-# (previously used for selecting which version of SLALIB to use) to be
-# specified, but they will be ignored.
-
-# Examples:
-#c cc display.c -L/star/lib `ast_link -pgplot` -o display
-#c Compiles and links a C program called ``display'' which uses
-#c the standard version of PGPLOT for graphical output.
-#c cc plotit.c -L. -L/star/lib `ast_link -grf` -lgrf -o plotit
-#c Compiles and links a C program ``plotit''. The ``-grf''
-#c switch indicates that graphical output will be delivered through
-#c a graphical interface which you have implemented yourself, which
-#c corresponds to the interface required by the current version of AST.
-#c Here, this interface is supplied by means of the ``-lgrf'' library
-#c reference.
-#c cc plotit.c -L. -L/star/lib `ast_link -grf_v2.0` -lgrf -o plotit
-#c Compiles and links a C program ``plotit''. The ``-grf_v2.0''
-#c switch indicates that graphical output will be delivered through
-#c a graphical interface which you have implemented yourself, which
-#c corresponds to the interface required by version 2.0 of AST.
-#c Here, this interface is supplied by means of the ``-lgrf'' library
-#c reference.
-#f f77 display.f -L/star/lib `ast_link -pgplot` -o display
-#f Compiles and links a Fortran program called ``display'' which uses
-#f the standard version of PGPLOT for graphical output.
-#f f77 plotit.f -L. -L/star/lib `ast_link -grf` -lgrf -o plotit
-#f Compiles and links a Fortran program ``plotit''. The ``-grf''
-#f switch indicates that graphical output will be delivered through
-#f a graphical interface which you have implemented yourself, which
-#f corresponds to the interface required by the current version of AST.
-#f Here, this interface is supplied by means of the ``-lgrf'' library
-#f reference.
-#f f77 plotit.f -L. -L/star/lib `ast_link -grf_v2.0` -lgrf -o plotit
-#f Compiles and links a Fortran program ``plotit''. The ``-grf_v2.0''
-#f switch indicates that graphical output will be delivered through
-#f a graphical interface which you have implemented yourself, which
-#f corresponds to the interface required by version 2.0 of AST.
-#f Here, this interface is supplied by means of the ``-lgrf'' library
-#f reference.
-
-# Copyright:
-# Copyright (C) 1997-2006 Council for the Central Laboratory of the Research Councils
-# Copyright (C) 2007-2008 Science & Technology Facilities Council.
-# All Rights Reserved.
-
-# Authors:
-# RFWS: R.F. Warren-Smith (STARLINK)
-# DSB: David S. Berry (STARLINK)
-# TIMJ: Tim Jenness (JAC, Hawaii)
-# {enter_new_authors_here}
-
-# History:
-# 11-JUN-1996 (RFWS):
-# Original version.
-# 11-NOV-1996 (RFWS):
-# Added switches.
-# 18-NOV-1997 (RFWS):
-# Adapted prologue for document extraction.
-# 28-SEP-1998 (RFWS):
-# Distinguish between -pgp and -pgplot options.
-# 12-JAN-2001 (DSB):
-# Move terminating "}" in function "find" onto a new line to
-# avoid error when run under bash 2.04.11(1) (redhat 7).
-# 3-MAY-2001 (DSB):
-# Added a terminating ";" to the "done" statement at the end of
-# the "find" function, so that ast_link can be used on Debian Linux.
-# 23-JAN-2004 (DSB):
-# Added switches to support older grf implementations.
-# 24-AUG-2004 (DSB):
-# Removed f77='y' from -ems case.
-# 21-APR-2005 (DSB):
-# Added "-fsla" option.
-# 16-JUN-2006 (DSB):
-# Ignore "-fsla" and "-clsa" options, and always use PAL.
-# 26-JUN-2007 (DSB):
-# Added "-grf3d", "-pgplot3d" and "-pgp3d" flags.
-# 13-NOV-2008 (TIMJ):
-# Add -drama option for DRAMA Ers support.
-# {enter_further_changes_here}
-
-# Bugs:
-# {note_any_bugs_here}
-
-#--
-
-# This line is edited during configuration of this script to define a list
-# of the libraries that must be linked in order to resolve Fortran 77
-# references made from within a C main program. Typically, these will arise
-# from libraries written in Fortran which the AST library (or the C
-# program) calls. The value here is worked out by the autoconf macro
-# AC_FC_LIBRARY_LDFLAGS.
- flibs='@FCLIBS@'
-
-# This function searches the directory path specified in PATH, looking for
-# an executable file which is not a directory. If found, it echos the full
-# file name to standard output. Otherwise, it outputs nothing.
- find() { IFS=':'; for d in $PATH; do f="${d:=.}/${1}"
- test -x "${f}" -a ! -d "${f}" && echo "${f}" && break
- done;
- }
-
-# Initialise linking options.
- err=''
- grf=''
- grf3d=''
- sla=''
- f77=''
-
-# Interpret command line switches.
-# --------------------------------
- while :; do
- case "${1}" in
-
-# -csla - Previously used to request C version of SLALIB. Now ignored.
- -csla)
-# sla='c'
- shift;;
-
-# -fsla - Previously used to request Fortran version of SLALIB. Now ignored.
- -fsla)
-# sla='f'
- shift;;
-
-# -ems - Requests error reporting through EMS.
- -ems)
- err='ems'
- shift;;
-
-# -drama - Requests error reporting through DRAMA Ers.
- -drama)
- err='drama'
- shift;;
-
-# -myerr - Requests no error reporting.
- -myerr)
- err='my'
- shift;;
-
-# -grf - Requests no 2D graphics.
- -grf)
- grf='current'
- shift;;
-
-# -mygrf - Requests no 2D graphics, except for null implementations of
-# functions aded to the grf interface after AST V2.0.
- -mygrf)
- grf='v2.0'
- shift;;
-
-# -grf_v2.0 - Requests no 2D graphics, except for null implementations of
-# functions aded to the grf interface after AST V2.0.
- -grf_v2.0)
- grf='v2.0'
- shift;;
-
-# -grf_v3.2 - Requests no 2D graphics, except for null implementations of
-# functions aded to the grf interface after AST V3.2.
- -grf_v3.2)
- grf='v3.2'
- shift;;
-
-# -pgp - Requests 2D graphical output through Starlink PGPLOT.
- -pgp)
- grf='pgp'
- shift;;
-
-# -pgplot - Requests 2D graphical output through native PGPLOT.
- -pgplot)
- grf='pgplot'
- shift;;
-
-# -grf3d - Requests no 3D graphics.
- -grf3d)
- grf3d='current'
- shift;;
-
-# -pgp3d - Requests 3D graphical output through Starlink PGPLOT.
- -pgp3d)
- grf3d='pgp'
- shift;;
-
-# -pgplot3d - Requests 3D graphical output through native PGPLOT.
- -pgplot3d)
- grf3d='pgplot'
- shift;;
-
-# Once all switches have been read, continue with the rest of the script.
- '') break;;
-
-# Catch unrecognised arguments and report an error.
- *)
- echo >&2 "ast_link: unknown argument \""${1}"\" given"
- exit 1;;
- esac
- done
-
-# Link with the main AST library.
-# -------------------------------
-# Start forming the list of arguments with the main AST library itself and
-# the "wcslib" module.
- args='-last -last_wcslib'
-
-# Generate arguments for linking SLALIB.
-# --------------------------------------
- case "${sla}" in
-
-# The full proprietary C version of SLALIB has no link script, so simply
-# specify the library itself.
- c) args="${args} -lsla";;
-
-# For Fortran, link with the AST SLALIB interface and the Fortran library via
-# the SLALIB link script (if found).
- f) args="${args} `\`find sla_link\``"
- f77='y';;
-
-# Otherwise, link with the internal GPLed cut down C version of SLALIB.
- *) args="${args} -last_pal";;
- esac
-
-# Generate arguments for linking the 2D graphics system.
-# ------------------------------------------------------
- case "${grf}" in
-
-# If using Starlink PGPLOT, link with the AST PGPLOT interface and
-# the Fortran library via the PGP link script (if found).
- pgp) args="${args} -last_pgplot `\`find pgp_link\``"
- f77='y';;
-
-# If using native PGPLOT, link with the AST PGPLOT interface and the
-# Fortran library via the PGPLOT link script (if found).
- pgplot) args="${args} -last_pgplot `\`find pgplot_link\``"
- f77='y';;
-
-# If using own graphics which conform to the requirements of the current
-# version of AST, do not produce any arguments.
- current) :;;
-
-# If using own graphics which conform to the requirements of version 3.2
-# of AST, produce arguments which link in dummy implementations of any
-# functions which are required by the current version of AST but which were
-# not required by version 3.2.
- v3.2) :;;
-
-# If using own graphics which conform to the requirements of version 2.0
-# of AST, produce arguments which link in dummy implementations of any
-# functions which are required by the current version of AST but which were
-# not required by version 2.0.
- v2.0) args="${args} -last_grf_3.2";;
-
-# Default graphics (none) requires linking with all the default (null) AST
-# "grf" modules.
- *) args="${args} -last_grf_2.0 -last_grf_3.2";;
- esac
-
-
-# Generate arguments for linking the 3D graphics system.
-# ------------------------------------------------------
- case "${grf3d}" in
-
-# If using Starlink PGPLOT, link with the AST 3D PGPLOT interface and
-# the Fortran library via the PGP link script (if found).
- pgp) args="${args} -last_pgplot3d `\`find pgp_link\``"
- f77='y';;
-
-# If using native PGPLOT, link with the AST 3D PGPLOT interface and the
-# Fortran library via the PGPLOT link script (if found).
- pgplot) args="${args} -last_pgplot3d `\`find pgplot_link\``"
- f77='y';;
-
-# If using own 3D graphics which conform to the requirements of the current
-# version of AST, do not produce any arguments.
- current) :;;
-
-# Default graphics (none) requires linking with all the default (null) AST
-# "grf3d" modules.
- *) args="${args} -last_grf3d";;
- esac
-
-
-
-# Make a second pass through the AST library.
-# -------------------------------------------
-# This library is a link to the main AST library and results in a second
-# pass to resolve any backward references generated by the other modules
-# used above. A different library name must be used to avoid the two passes
-# being merged into one (either below, or by other link scripts).
- args="${args} -last_pass2"
-
-# Generate arguments for linking the error reporting system.
-# ----------------------------------------------------------
- case "${err}" in
-
-# If using EMS, link with the AST EMS interface and the EMS library via the
-# link script (if found).
- ems) args="${args} -last_ems `\`find ems_link\``";;
-
-# If using DRAMA, link with the AST DRAMA interface and the DRAMA Ers library
-# via the link script (if found).
- drama) args="${args} -last_drama -lers";;
-
-# If using own error reporting, do not produce any arguments.
- my) :;;
-
-# Default error reporting requires linking with the default AST "err" module.
- *) args="${args} -last_err";;
- esac
-
-# Link with the maths library.
-# ----------------------------
- args="${args} -lm"
-
-# Link with the starmem library, if available.
-# --------------------------------------------
- args="${args} `\`find starmem_link\``"
-
-# Resolve Fortran 77 references.
-# ------------------------------
-# If libraries written in Fortran are being linked against, then include
-# additional libaries needed to resolve the references these will produce
-# (in the event that the main program is not Fortran).
- if test "${f77}" = 'y'; then args="${args} ${flibs}"; fi
-
-# Pass the resulting argument list through an awk script which eliminates
-# all except the last reference to each library.
- echo "${args}" \
- | awk 'BEGIN{RS=" ";FS="\n"}
- {if($1)f[i++]=$1}
- END{for(;i--;)if(!w[f[i]]++)l=f[i]" "l;print l}'
-
-# End of script.
diff --git a/ast-5.3-1/ast_link_adam b/ast-5.3-1/ast_link_adam
deleted file mode 100644
index 6468a2e..0000000
--- a/ast-5.3-1/ast_link_adam
+++ /dev/null
@@ -1,392 +0,0 @@
-
-# N.B. the previous line should be blank.
-#++
-# Name:
-# ast_link_adam
-
-# Purpose:
-# Link an ADAM program with the AST library.
-
-# Type of Module:
-# Shell script.
-
-# Description:
-# This command should only be used when building Starlink ADAM programs
-# which use the AST library, in order to generate the correct arguments
-# to allow the ADAM ``alink'' command to link the program. The arguments
-# generated are written to standard output but may be substituted into
-# the ``alink'' command line in the standard UNIX way using backward
-# quotes (see below).
-#
-# By default, it is assumed that you are building an ADAM program which
-# does not produce graphical output. However, switches are provided for
-# linking other types of program. This command should not be used when
-# building stand-alone (non-ADAM) programs. Use the ``ast_link'' command
-# instead.
-
-# Invocation:
-#c alink program.o -L/star/lib `ast_link_adam [switches]`
-#f alink program.f -L/star/lib `ast_link_adam [switches]`
-
-# Switches:
-# The following switches may optionally be given to this command to
-# modify its behaviour:
-#
-# - ``-csla'': Ignored. Provided for backward compatibility only.
-#
-# - ``-fsla'': Ignored. Provided for backward compatibility only.
-#
-# - ``-grf'': Requests that no arguments be generated to specify which
-# 2D graphics system is used to display output from the AST library. You
-# should use this option only if you have implemented an interface to a
-# new graphics system yourself and wish to provide your own arguments for
-# linking with it. This switch differs from the other ``grf'' switches in
-# that it assumes that your graphics module implements the complete
-# interface required by the current version of AST. If future versions of
-# AST introduce new functions to the graphics interface, this switch will
-# cause ``unresolved symbol'' errors to occur during linking, warning you
-# that you need to implement new functions in your graphics module. To
-# avoid such errors, you can use one of the other, version-specific,
-# switches in place of the ``-grf'' switch, but these will cause run-time
-# errors to be reported if any AST function is invoked which requires
-# facilities not in the implemented interface.
-#
-# - ``-grf_v2.0'': This switch is equivalent to the ``-mygrf'' switch.
-# It indicates that you want to link with your own graphics module which
-# implements the 2D graphics interface required by V2.0 of AST.
-#
-# - ``-grf_v3.2'': Indicates that you want to link with your own graphics
-# module which implements the 2D graphics interface required by V3.2 of AST.
-#
-# - ``-myerr'': Requests that no arguments be generated to specify how
-# error messages produced by the AST library should be delivered. You
-# should use this option only if you have implemented an interface to a
-# new error delivery system yourself and wish to provide your own
-# arguments for linking with it. By default, error messages are delivered
-# in the standard ADAM way via the EMS Error Message Service (Starlink
-# System Note SSN/4).
-#
-# - ``-mygrf'': This switch has been superceeded by the ``-grf'' switch,
-# but is retained in order to allow applications to be linked with a
-# graphics module which implements the interface used by AST V2.0. It is
-# equivalent to the ``-grf_v2.0'' switch.
-#
-# - ``-pgp'': Requests that the program be linked so that 2D
-# graphical output from the AST library is displayed via the
-# Starlink version of the PGPLOT graphics package (which uses GKS
-# for its output). By default, no graphics package is linked and
-# this will result in an error at run time if AST routines are
-# invoked that attempt to generate graphical output.
-#
-# - ``-pgplot'': Requests that the program be linked so that 2D
-# graphical output from the AST library is displayed via the
-# standard (or ``native'') version of the PGPLOT graphics
-# package. By default, no graphics package is linked and this will
-# result in an error at run time if AST routines are invoked that
-# attempt to generate graphical output.
-#
-# - ``-grf3d'': Requests that no arguments be generated to specify which
-# 3D graphics system is used to display output from the AST library. You
-# should use this option only if you have implemented an interface to a
-# new 3D graphics system yourself and wish to provide your own arguments
-# for linking with it.
-#
-# - ``-pgp3d'': Requests that the program be linked so that 3D
-# graphical output from the AST library is displayed via the
-# Starlink version of the PGPLOT graphics package (which uses GKS
-# for its output). By default, no 3D graphics package is linked and
-# this will result in an error at run time if AST routines are
-# invoked that attempt to generate graphical output.
-#
-# - ``-pgplot3d'': Requests that the program be linked so that 3D
-# graphical output from the AST library is displayed via
-# the standard (or ``native'') version of the PGPLOT graphics
-# package. By default, no 3D graphics package is linked and this will
-# result in an error at run time if AST routines are invoked that
-# attempt to generate graphical output.
-
-# SLALIB:
-# The AST distribution includes a cut down subset of the C version of
-# the SLALIB library written by Pat Wallace. This subset contains only
-# the functions needed by the AST library. It is built as part of the
-# process of building AST and is distributed under GPL (and is thus
-# compatible with the AST license). Previous version of this script
-# allowed AST applications to be linked against external SLALIB
-# libraries (either Fortran or C) rather than the internal version.
-# The current version of this script does not provide this option,
-# and always uses the internal SLALIB library. However, for backward
-# compatibility, this script still allows the "-fsla" and "-csla" flags
-# (previously used for selecting which version of SLALIB to use) to be
-# specified, but they will be ignored.
-
-# Examples:
-#c alink display.o -L/star/lib `ast_link_adam -pgplot`
-#c Links an ADAM program ``display'' which uses the standard
-#c version of PGPLOT for graphical output.
-#c alink plotit.o -L. -L/star/lib `ast_link_adam -grf` -lgrf
-#c Links an ADAM program ``plotit'', written in C. The ``-grf''
-#c switch indicates that graphical output will be delivered through
-#c a graphical interface which you have implemented yourself, which
-#c corresponds to the interface required by the current version of AST.
-#c Here, this interface is supplied by means of the ``-lgrf'' library
-#c reference.
-#c alink plotit.o -L. -L/star/lib `ast_link_adam -grf_v2.0` -lgrf
-#c Links an ADAM program ``plotit'', written in C. The ``-grf_v2.0''
-#c switch indicates that graphical output will be delivered through
-#c a graphical interface which you have implemented yourself, which
-#c corresponds to the interface required by version 2.0 of AST. Here,
-#c this interface is supplied by means of the ``-lgrf'' library
-#c reference.
-#f alink display.f -L/star/lib `ast_link_adam -pgplot`
-#f Compiles and links an ADAM Fortran program called ``display'' which
-#f uses the standard version of PGPLOT for graphical output.
-#f alink plotit.f -L. -L/star/lib `ast_link_adam -grf` -lgrf
-#f Compiles and links an ADAM Fortran program ``plotit''. The ``-grf''
-#f switch indicates that graphical output will be delivered through
-#f a graphical interface which you have implemented yourself, which
-#f corresponds to the interface required by the current version of AST.
-#f Here, this interface is supplied by means of the ``-lgrf'' library
-#f reference.
-#f alink plotit.f -L. -L/star/lib `ast_link_adam -grf_v2.0` -lgrf
-#f Compiles and links an ADAM Fortran program ``plotit''. The ``-grf_v2.0''
-#f switch indicates that graphical output will be delivered through
-#f a graphical interface which you have implemented yourself, which
-#f corresponds to the interface required by version 2.0 of AST.
-#f Here, this interface is supplied by means of the ``-lgrf'' library
-#f reference.
-
-# Copyright:
-# Copyright (C) 1997-2006 Council for the Central Laboratory of the Research Councils
-
-# Authors:
-# RFWS: R.F. Warren-Smith (STARLINK)
-# {enter_new_authors_here}
-
-# History:
-# 11-NOV-1996 (RFWS):
-# Original version.
-# 18-NOV-1997 (RFWS):
-# Adapted prologue for document extraction.
-# 28-SEP-1998 (RFWS):
-# Distinguish between -pgp and -pgplot options.
-# 23-JAN-2004 (DSB):
-# Added switches to support older grf implementations.
-# 21-APR-2005 (DSB):
-# Added "-fsla" option.
-# 16-JUN-2006 (DSB):
-# Ignore "-fsla" and "-clsa" options, and always use PAL.
-# 22-AUG-2007 (DSB):
-# Added "-grf3d", "-pgplot3d" and "-pgp3d" flags.
-# {enter_changes_here}
-
-# Bugs:
-# {note_any_bugs_here}
-
-#--
-
-# This function searches the directory path specified in PATH, looking for
-# an executable file which is not a directory. If found, it echos the full
-# file name to standard output. Otherwise, it outputs nothing.
- find() { IFS=':'; for d in $PATH; do f="${d:=.}/${1}"
- test -x "${f}" -a ! -d "${f}" && echo "${f}" && break
- done;
- }
-
-# Initialise linking options.
- err=''
- grf=''
- grf3d=''
- sla=''
-
-# Interpret command line switches.
-# --------------------------------
- while :; do
- case "${1}" in
-
-# -csla - Previously used to request C version of SLALIB. Now ignored.
- -csla)
-# sla='c'
- shift;;
-
-# -fsla - Previously used to request Fortran version of SLALIB. Now ignored.
- -fsla)
-# sla='f'
- shift;;
-
-# -myerr - Requests no error reporting.
- -myerr)
- err='my'
- shift;;
-
-# -grf - Requests no 2D graphics.
- -grf)
- grf='current'
- shift;;
-
-# -mygrf - Requests no 2D graphics, except for null implementations of
-# functions aded to the grf interface after AST V2.0.
- -mygrf)
- grf='v2.0'
- shift;;
-
-# -grf_v2.0 - Requests no 2D graphics, except for null implementations of
-# functions aded to the grf interface after AST V2.0.
- -grf_v2.0)
- grf='v2.0'
- shift;;
-
-# -grf_v3.2 - Requests no 2D graphics, except for null implementations of
-# functions aded to the grf interface after AST V3.2.
- -grf_v3.2)
- grf='v3.2'
- shift;;
-
-# -pgp - Requests 2D graphical output through Starlink PGPLOT.
- -pgp)
- grf='pgp'
- shift;;
-
-# -pgplot - Requests 2D graphical output through native PGPLOT.
- -pgplot)
- grf='pgplot'
- shift;;
-
-# -grf3d - Requests no 3D graphics.
- -grf3d)
- grf3d='current'
- shift;;
-
-# -pgp3d - Requests 3D graphical output through Starlink PGPLOT.
- -pgp3d)
- grf3d='pgp'
- shift;;
-
-# -pgplot3d - Requests 3D graphical output through native PGPLOT.
- -pgplot3d)
- grf3d='pgplot'
- shift;;
-
-# Once all switches have been read, continue with the rest of the script.
- '') break;;
-
-# Catch unrecognised switches and report an error.
- *)
- echo >&2 "ast_link_adam: unknown argument \""${1}"\" given"
- exit 1;;
- esac
- done
-
-# Link with the main AST library.
-# -------------------------------
-# Start forming the list of arguments with the main AST library itself and
-# the "wcslib" module.
- args='-last -last_wcslib'
-
-# Generate arguments for linking SLALIB.
-# --------------------------------------
- case "${sla}" in
-
-# The full proprietary C version of SLALIB has no link script, so simply
-# specify the library itself.
- c) args="${args} -lsla";;
-
-# For Fortran, link with the AST SLALIB interface and the Fortran library via
-# the SLALIB link script (if found).
- f) args="${args} -last_slalib `sla_link_adam`";;
-
-# Otherwise, link with the internal GPLed cut down C version of SLALIB.
- *) args="${args} -last_pal";;
- esac
-
-# Generate arguments for linking the 2D graphics system.
-# ------------------------------------------------------
- case "${grf}" in
-
-# If using Starlink PGPLOT, link with the AST PGPLOT interface and
-# the Fortran library via the PGP link script.
- pgp) args="${args} -last_pgplot `pgp_link_adam`";;
-
-# If using native PGPLOT, link with the AST PGPLOT interface and
-# the Fortran library via the PGPLOT link script.
- pgplot) args="${args} -last_pgplot `pgplot_link_adam`";;
-
-# If using own graphics which conform to the requirements of the current
-# version of AST, do not produce any arguments.
- current) :;;
-
-# If using own graphics which conform to the requirements of version 3.2
-# of AST, produce arguments which link in dummy implementations of any
-# functions which are required by the current version of AST but which were
-# not required by version 3.2.
- v3.2) :;;
-
-# If using own graphics which conform to the requirements of version 2.0
-# of AST, produce arguments which link in dummy implementations of any
-# functions which are required by the current version of AST but which were
-# not required by version 2.0.
- v2.0) args="${args} -last_grf_3.2";;
-
-# Default graphics (none) requires linking with all the default (null) AST
-# "grf" modules.
- *) args="${args} -last_grf_2.0 -last_grf_3.2";;
- esac
-
-# Generate arguments for linking the 3D graphics system.
-# ------------------------------------------------------
- case "${grf3d}" in
-
-# If using Starlink PGPLOT, link with the AST 3D PGPLOT interface and
-# the Fortran library via the PGP link script (if found).
- pgp) args="${args} -last_pgplot3d `\`find pgp_link\``"
- f77='y';;
-
-# If using native PGPLOT, link with the AST 3D PGPLOT interface and the
-# Fortran library via the PGPLOT link script (if found).
- pgplot) args="${args} -last_pgplot3d `\`find pgplot_link\``"
- f77='y';;
-
-# If using own 3D graphics which conform to the requirements of the current
-# version of AST, do not produce any arguments.
- current) :;;
-
-# Default graphics (none) requires linking with all the default (null) AST
-# "grf3d" modules.
- *) args="${args} -last_grf3d";;
- esac
-
-# Make a second pass through the AST library.
-# -------------------------------------------
-# This library is a link to the main AST library and results in a second
-# pass to resolve any backward references generated by the other modules
-# used above. A different library name must be used to avoid the two passes
-# being merged into one (either below, or by other link scripts).
- args="${args} -last_pass2"
-
-# Generate arguments for linking the error reporting system.
-# ----------------------------------------------------------
- case "${err}" in
-
-# If using own error reporting, do not produce any arguments.
- my) :;;
-
-# Default error reporting requires linking with the AST EMS interface and
-# the EMS library via the link script.
- *) args="${args} -last_ems `ems_link_adam`";;
- esac
-
-# Link with the maths library.
-# ----------------------------
- args="${args} -lm"
-
-# Link with the starmem library, if available.
-# --------------------------------------------
- args="${args} `\`find starmem_link\``"
-
-# Pass the resulting argument list through an awk script which eliminates
-# all except the last reference to each library.
- echo "${args}" \
- | awk 'BEGIN{RS=" ";FS="\n"}
- {if($1)f[i++]=$1}
- END{for(;i--;)if(!w[f[i]]++)l=f[i]" "l;print l}'
-
-# End of script.
diff --git a/ast-5.3-1/ast_par.source b/ast-5.3-1/ast_par.source
deleted file mode 100644
index 43ec25c..0000000
--- a/ast-5.3-1/ast_par.source
+++ /dev/null
@@ -1,627 +0,0 @@
-*+
-* Name:
-* AST_PAR
-
-* Purpose:
-* Define the Fortran 77 interface to the AST library.
-
-* Language:
-* Fortran 77
-
-* Type of Module:
-* Include file.
-
-* Description:
-* This file contains definitions which are required by Fortran 77
-* programs which use the AST library.
-
-* Authors:
-* RFWS: R.F. Warren-Smith (STARLINK)
-* MBT: Mark Taylor (STARLINK)
-* DSB: David S. Berry
-
-* History:
-* 12-NOV-1996 (RFWS):
-* Original version.
-* 18-MAR-1998 (RFWS):
-* Added definitions for the IntraMap class.
-* 21-DEC-1998 (RFWS):
-* Added resampling definitions for the Mapping class.
-* 15-NOV-1999 (RFWS):
-* Added definitions for PcdMap.
-* 24-NOV-2000 (MBT):
-* Added AST__BLOCKAVE interpolation scheme.
-* 22-JUN-2001 (DSB):
-* Added AST_OFFSET2 and AST_ANGLE to Frame class.
-* 6-SEP-2001 (DSB):
-* Added AST_AXDISTANCE and AST_AXOFFSET to Frame class.
-* 12-SEP-2001 (DSB):
-* Added AST_BEAR to Frame class.
-* 21-SEP-2001 (DSB):
-* Replaced AST_BEAR by AST_AXANGLE.
-* 28-JAN-2003 (DSB):
-* Added AST_GETACTIVEUNIT.
-* 14-FEB-2003 (DSB):
-* Added new values for WcsMap projections.
-* 30-APR-2003 (DSB):
-* Added AST_VERSION.
-* 15-JUL-2003 (DSB):
-* Added AST_RATE, POLYMAP, SHIFTMAP and GRISMMAP functions.
-* 13-NOV-2003 (DSB):
-* Added XmlChan class.
-* 9-NOV-2004 (DSB):
-* Added all initial Region classes.
-* 19-NOV-2004 (DSB):
-* Added KeyMap.
-* 16-JUN-2005 (DSB):
-* Added TimeMap and TimeFrame.
-* 1-SEP-2005 (DSB):
-* Added AST__REBININIT and AST__REBINNORM.
-* 17-FEB-2006 (DSB):
-* Added AST_ESCAPES.
-* 9-FEB-2007 (DSB):
-* Use a double precision constant to initialise AST__UNDEFF.
-* 4-DEC-2008 (TIMJ):
-* Add AST_TESTFITS. Remove AST__UNDEF<X>
-* 6-FEB-2009 (DSB):
-* Added StcsChan class.
-*-
-
-* Length of character string returned by a character function.
- INTEGER AST__SZCHR
- PARAMETER ( AST__SZCHR = 200 )
-
-* Bad coordinate value.
- DOUBLE PRECISION AST__BAD
- PARAMETER ( AST__BAD = <AST__BAD> )
-
-* Error module.
- LOGICAL AST_OK
- INTEGER AST_STATUS
-
-* Object class.
- EXTERNAL AST_NULL
- INTEGER AST__NULL
- PARAMETER ( AST__NULL = 0 )
-
- INTEGER AST__TUNULL
- PARAMETER ( AST__TUNULL = -99999 )
-
- CHARACTER * ( AST__SZCHR ) AST_GETC
- DOUBLE PRECISION AST_GETD
- INTEGER AST_CLONE
- INTEGER AST_COPY
- LOGICAL AST_EQUAL
- INTEGER AST_GETI
- INTEGER AST_VERSION
- LOGICAL AST_GETL
- LOGICAL AST_ISAOBJECT
- LOGICAL AST_TEST
- LOGICAL AST_SAME
- INTEGER AST_TUNE
- REAL AST_GETR
- LOGICAL AST_CHRSUB
-
-* Channel class.
- INTEGER AST_CHANNEL
- INTEGER AST_READ
- INTEGER AST_WRITE
- LOGICAL AST_ISACHANNEL
- INTEGER AST_WARNINGS
-
-* FitsChan class.
- INTEGER AST_FITSCHAN
- LOGICAL AST_FINDFITS
- LOGICAL AST_ISAFITSCHAN
- LOGICAL AST_GETFITSCF
- LOGICAL AST_GETFITSCI
- LOGICAL AST_GETFITSF
- LOGICAL AST_GETFITSI
- LOGICAL AST_GETFITSL
- LOGICAL AST_GETFITSS
- LOGICAL AST_GETFITSCN
- LOGICAL AST_TESTFITS
-
-* Mapping Class.
- INTEGER AST__URESAMP1
- PARAMETER ( AST__URESAMP1 = 1 )
- INTEGER AST__URESAMP2
- PARAMETER ( AST__URESAMP2 = 2 )
- INTEGER AST__URESAMP3
- PARAMETER ( AST__URESAMP3 = 4 )
- INTEGER AST__URESAMP4
- PARAMETER ( AST__URESAMP4 = 8 )
- INTEGER AST__USEVAR
- PARAMETER ( AST__USEVAR = 16 )
- INTEGER AST__USEBAD
- PARAMETER ( AST__USEBAD = 32 )
- INTEGER AST__CONSERVEFLUX
- PARAMETER ( AST__CONSERVEFLUX = 64 )
- INTEGER AST__REBININIT
- PARAMETER ( AST__REBININIT = 128 )
- INTEGER AST__REBINEND
- PARAMETER ( AST__REBINEND = 256 )
- INTEGER AST__GENVAR
- PARAMETER ( AST__GENVAR = 512 )
- INTEGER AST__VARWGT
- PARAMETER ( AST__VARWGT = 1024 )
-
- INTEGER AST__UKERN1
- PARAMETER ( AST__UKERN1 = 1 )
-c Not yet implemented
-c INTEGER AST__UKERNN
-c PARAMETER ( AST__UKERNN = 2 )
- INTEGER AST__UINTERP
- PARAMETER ( AST__UINTERP = 3 )
- INTEGER AST__NEAREST
- PARAMETER ( AST__NEAREST = 4 )
- INTEGER AST__LINEAR
- PARAMETER ( AST__LINEAR = 5 )
- INTEGER AST__SINC
- PARAMETER ( AST__SINC = 6 )
- INTEGER AST__SINCSINC
- PARAMETER ( AST__SINCSINC = 7 )
- INTEGER AST__SINCCOS
- PARAMETER ( AST__SINCCOS = 8 )
- INTEGER AST__SINCGAUSS
- PARAMETER ( AST__SINCGAUSS = 9 )
- INTEGER AST__BLOCKAVE
- PARAMETER ( AST__BLOCKAVE = 10 )
- INTEGER AST__GAUSS
- PARAMETER ( AST__GAUSS = 11 )
- INTEGER AST__SOMB
- PARAMETER ( AST__SOMB = 12 )
- INTEGER AST__SOMBCOS
- PARAMETER ( AST__SOMBCOS = 13 )
-
- INTEGER AST_RESAMPLEB
- INTEGER AST_RESAMPLED
- INTEGER AST_RESAMPLEI
- INTEGER AST_RESAMPLER
- INTEGER AST_RESAMPLES
- INTEGER AST_RESAMPLEUB
- INTEGER AST_RESAMPLEUI
- INTEGER AST_RESAMPLEUS
- INTEGER AST_RESAMPLEUW
- INTEGER AST_RESAMPLEW
- INTEGER AST_REMOVEREGIONS
- INTEGER AST_SIMPLIFY
- LOGICAL AST_ISAMAPPING
- LOGICAL AST_LINEARAPPROX
- DOUBLE PRECISION AST_RATE
-
-* CmpMap class.
- INTEGER AST_CMPMAP
- LOGICAL AST_ISACMPMAP
-
-* Frame class.
- CHARACTER * ( AST__SZCHR ) AST_FORMAT
- DOUBLE PRECISION AST_DISTANCE
- INTEGER AST_CONVERT
- INTEGER AST_FINDFRAME
- INTEGER AST_FRAME
- INTEGER AST_PICKAXES
- INTEGER AST_UNFORMAT
- LOGICAL AST_ISAFRAME
- LOGICAL AST_GETACTIVEUNIT
- DOUBLE PRECISION AST_ANGLE
- DOUBLE PRECISION AST_OFFSET2
- DOUBLE PRECISION AST_AXDISTANCE
- DOUBLE PRECISION AST_AXOFFSET
- DOUBLE PRECISION AST_AXANGLE
-
-* CmpFrame class.
- INTEGER AST_CMPFRAME
- LOGICAL AST_ISACMPFRAME
-
-* FrameSet class.
- INTEGER AST__BASE
- PARAMETER ( AST__BASE = 0 )
- INTEGER AST__CURRENT
- PARAMETER ( AST__CURRENT = -1 )
- INTEGER AST__NOFRAME
- PARAMETER ( AST__NOFRAME = -99 )
-
- INTEGER AST_FRAMESET
- INTEGER AST_GETFRAME
- INTEGER AST_GETMAPPING
- LOGICAL AST_ISAFRAMESET
-
-* IntraMap class.
- INTEGER AST__NOFWD
- PARAMETER ( AST__NOFWD = 1 )
- INTEGER AST__NOINV
- PARAMETER ( AST__NOINV = 2 )
- INTEGER AST__SIMPFI
- PARAMETER ( AST__SIMPFI = 4 )
- INTEGER AST__SIMPIF
- PARAMETER ( AST__SIMPIF = 8 )
- INTEGER AST__ANY
- PARAMETER ( AST__ANY = -66 )
-
- INTEGER AST_INTRAMAP
- LOGICAL AST_ISAINTRAMAP
-
-* LutMap class.
- INTEGER AST_LUTMAP
- LOGICAL AST_ISALUTMAP
-
-* PcdMap class.
- INTEGER AST_PCDMAP
- LOGICAL AST_ISAPCDMAP
-
-* Plot class.
- INTEGER AST_PLOT
- LOGICAL AST_BORDER
- INTEGER AST_GETGRFCONTEXT
- LOGICAL AST_ISAPLOT
- INTEGER AST_ESCAPES
- CHARACTER * ( AST__SZCHR ) AST_STRIPESCAPES
-
-* SkyFrame class.
- INTEGER AST_SKYFRAME
- LOGICAL AST_ISASKYFRAME
-
-* SpecFrame class.
- INTEGER AST_SPECFRAME
- LOGICAL AST_ISASPECFRAME
-
-* DSBSpecFrame class.
- INTEGER AST_DSBSPECFRAME
- LOGICAL AST_ISADSBSPECFRAME
-
-* MathMap class.
- INTEGER AST_MATHMAP
- LOGICAL AST_ISAMATHMAP
-
-* MatrixMap class.
- INTEGER AST_MATRIXMAP
- LOGICAL AST_ISAMATRIXMAP
-
-* PermMap class.
- INTEGER AST_PERMMAP
- LOGICAL AST_ISAPERMMAP
-
-* PolyMap class.
- INTEGER AST_POLYMAP
- LOGICAL AST_ISAPOLYMAP
-
-* SlaMap class.
- INTEGER AST_SLAMAP
- LOGICAL AST_ISASLAMAP
-
-* SpecMap class.
- INTEGER AST_SPECMAP
- LOGICAL AST_ISASPECMAP
-
-* SphMap class.
- INTEGER AST_SPHMAP
- LOGICAL AST_ISASPHMAP
-
-* UnitMap class.
- INTEGER AST_UNITMAP
- LOGICAL AST_ISAUNITMAP
-
-* WcsMap class.
-
- INTEGER AST__WCSMX
- PARAMETER ( AST__WCSMX = 10 )
-
- DOUBLE PRECISION AST__DPI
- PARAMETER ( AST__DPI = 3.1415926535897932384626433832795028842 )
-
- DOUBLE PRECISION AST__DPIBY2
- PARAMETER ( AST__DPIBY2 = 1.570796326794896619231321691639751442 )
-
- DOUBLE PRECISION AST__DD2R
- PARAMETER ( AST__DD2R = 0.01745329251994329576923690768488612713 )
-
- DOUBLE PRECISION AST__DR2D
- PARAMETER ( AST__DR2D = 57.2957795130823208767981548141051703324 )
-
- INTEGER AST__AIR
- PARAMETER ( AST__AIR = 9 )
- INTEGER AST__AIT
- PARAMETER ( AST__AIT = 17 )
- INTEGER AST__ARC
- PARAMETER ( AST__ARC = 6 )
- INTEGER AST__AZP
- PARAMETER ( AST__AZP = 1 )
- INTEGER AST__BON
- PARAMETER ( AST__BON = 22 )
- INTEGER AST__CAR
- PARAMETER ( AST__CAR = 12 )
- INTEGER AST__CEA
- PARAMETER ( AST__CEA = 11 )
- INTEGER AST__COD
- PARAMETER ( AST__COD = 20 )
- INTEGER AST__COE
- PARAMETER ( AST__COE = 19 )
- INTEGER AST__COO
- PARAMETER ( AST__COO = 21 )
- INTEGER AST__COP
- PARAMETER ( AST__COP = 18 )
- INTEGER AST__CSC
- PARAMETER ( AST__CSC = 25 )
- INTEGER AST__CYP
- PARAMETER ( AST__CYP = 10 )
- INTEGER AST__GLS
- PARAMETER ( AST__GLS = 28 )
- INTEGER AST__MER
- PARAMETER ( AST__MER = 13 )
- INTEGER AST__MOL
- PARAMETER ( AST__MOL = 16 )
- INTEGER AST__NCP
- PARAMETER ( AST__NCP = 27 )
- INTEGER AST__PAR
- PARAMETER ( AST__PAR = 15 )
- INTEGER AST__PCO
- PARAMETER ( AST__PCO = 23 )
- INTEGER AST__QSC
- PARAMETER ( AST__QSC = 26 )
- INTEGER AST__SFL
- PARAMETER ( AST__SFL = 14 )
- INTEGER AST__SIN
- PARAMETER ( AST__SIN = 5 )
- INTEGER AST__STG
- PARAMETER ( AST__STG = 4 )
- INTEGER AST__SZP
- PARAMETER ( AST__SZP = 2 )
- INTEGER AST__TAN
- PARAMETER ( AST__TAN = 3 )
- INTEGER AST__TPN
- PARAMETER ( AST__TPN = 29 )
- INTEGER AST__TSC
- PARAMETER ( AST__TSC = 24 )
- INTEGER AST__ZEA
- PARAMETER ( AST__ZEA = 8 )
- INTEGER AST__ZPN
- PARAMETER ( AST__ZPN = 7 )
- INTEGER AST__WCSBAD
- PARAMETER ( AST__WCSBAD = 30 )
-
- INTEGER AST_WCSMAP
- LOGICAL AST_ISAWCSMAP
-
-* ShiftMap class.
- INTEGER AST_SHIFTMAP
- LOGICAL AST_ISASHIFTMAP
-
-* WinMap class.
- INTEGER AST_WINMAP
- LOGICAL AST_ISAWINMAP
-
-* ZoomMap class.
- INTEGER AST_ZOOMMAP
- LOGICAL AST_ISAZOOMMAP
-
-* GrismMap class.
- INTEGER AST_GRISMMAP
- LOGICAL AST_ISAGRISMMAP
-
-* XmlChan class.
- INTEGER AST_XMLCHAN
- LOGICAL AST_ISAXMLCHAN
-
-* TranMap class.
- INTEGER AST_TRANMAP
- LOGICAL AST_ISATRANMAP
-
-* Region class.
- INTEGER AST_REGION
- INTEGER AST_GETUNC
- INTEGER AST_GETREGIONFRAME
- LOGICAL AST_ISAREGION
- INTEGER AST_MAPREGION
- INTEGER AST_OVERLAP
- INTEGER AST_MASKB
- INTEGER AST_MASKD
- INTEGER AST_MASKI
- INTEGER AST_MASKR
- INTEGER AST_MASKS
- INTEGER AST_MASKUB
- INTEGER AST_MASKUI
- INTEGER AST_MASKUS
- INTEGER AST_MASKUW
- INTEGER AST_MASKW
-
-* Box class.
- INTEGER AST_BOX
- LOGICAL AST_ISABOX
-
-* PointList class.
- INTEGER AST_POINTLIST
- LOGICAL AST_ISAPOINTLIST
-
-* Polygon class.
- INTEGER AST_POLYGON
- LOGICAL AST_ISAPOLYGON
- INTEGER AST_DOWNSIZE
- INTEGER AST_OUTLINED
- INTEGER AST_OUTLINER
- INTEGER AST_OUTLINEI
- INTEGER AST_OUTLINEUI
- INTEGER AST_OUTLINES
- INTEGER AST_OUTLINEUS
- INTEGER AST_OUTLINEW
- INTEGER AST_OUTLINEUW
- INTEGER AST_OUTLINEB
- INTEGER AST_OUTLINEUB
-
- INTEGER AST__LE
- PARAMETER( AST__LE = 2 )
-
- INTEGER AST__EQ
- PARAMETER( AST__EQ = 3 )
-
- INTEGER AST__GE
- PARAMETER( AST__GE = 4 )
-
- INTEGER AST__GT
- PARAMETER( AST__GT = 5 )
-
- INTEGER AST__NE
- PARAMETER( AST__NE = 6 )
-
-* Circle class.
- INTEGER AST_CIRCLE
- LOGICAL AST_ISACIRCLE
-
-* Ellipse class.
- INTEGER AST_ELLIPSE
- LOGICAL AST_ISAELLIPSE
-
-* NullRegion class.
- INTEGER AST_NULLREGION
- LOGICAL AST_ISANULLREGION
-
-* Interval class.
- INTEGER AST_INTERVAL
- LOGICAL AST_ISAINTERVAL
-
-* Prism class.
- INTEGER AST_PRISM
- LOGICAL AST_ISAPRISM
-
-* CmpRegion class.
- INTEGER AST_CMPREGION
- LOGICAL AST_ISACMPREGION
-
- INTEGER AST__AND
- PARAMETER( AST__AND = 1 )
-
- INTEGER AST__OR
- PARAMETER( AST__OR = 2 )
-
- INTEGER AST__XOR
- PARAMETER( AST__XOR = 3 )
-
-* KeyMap class.
- INTEGER AST_KEYMAP
- LOGICAL AST_ISAKEYMAP
- LOGICAL AST_MAPGET0I
- LOGICAL AST_MAPGET0D
- LOGICAL AST_MAPGET0R
- LOGICAL AST_MAPGET0C
- LOGICAL AST_MAPGET0A
- LOGICAL AST_MAPGET1I
- LOGICAL AST_MAPGET1D
- LOGICAL AST_MAPGET1R
- LOGICAL AST_MAPGET1C
- LOGICAL AST_MAPGET1A
- LOGICAL AST_MAPGETELEMI
- LOGICAL AST_MAPGETELEMD
- LOGICAL AST_MAPGETELEMR
- LOGICAL AST_MAPGETELEMC
- LOGICAL AST_MAPGETELEMA
- INTEGER AST_MAPSIZE
- INTEGER AST_MAPLENGTH
- INTEGER AST_MAPLENC
- INTEGER AST_MAPTYPE
- LOGICAL AST_MAPHASKEY
- CHARACTER * ( AST__SZCHR ) AST_MAPKEY
-
- INTEGER AST__BADTYPE
- PARAMETER ( AST__BADTYPE = 0)
-
- INTEGER AST__INTTYPE
- PARAMETER ( AST__INTTYPE = 1)
-
- INTEGER AST__DOUBLETYPE
- PARAMETER ( AST__DOUBLETYPE = 2)
-
- INTEGER AST__STRINGTYPE
- PARAMETER ( AST__STRINGTYPE = 3)
-
- INTEGER AST__OBJECTTYPE
- PARAMETER ( AST__OBJECTTYPE = 4)
-
- INTEGER AST__FLOATTYPE
- PARAMETER ( AST__FLOATTYPE = 5)
-
-* FluxFrame class.
- INTEGER AST_FLUXFRAME
- LOGICAL AST_ISAFLUXFRAME
-
-* SpecFluxFrame class.
- INTEGER AST_SPECFLUXFRAME
- LOGICAL AST_ISASPECFLUXFRAME
-
-* NormMap class.
- INTEGER AST_NORMMAP
- LOGICAL AST_ISANORMMAP
-
-* RateMap class.
- INTEGER AST_RATEMAP
- LOGICAL AST_ISARATEMAP
-
-* TimeFrame class.
- INTEGER AST_TIMEFRAME
- LOGICAL AST_ISATIMEFRAME
- DOUBLE PRECISION AST_CURRENTTIME
-
- INTEGER AST__LT
- PARAMETER( AST__LT = 11 )
-
-* TimeMap class.
- INTEGER AST_TIMEMAP
- LOGICAL AST_ISATIMEMAP
-
-* Stc class.
- LOGICAL AST_ISASTC
- INTEGER AST_GETSTCREGION
- INTEGER AST_GETSTCCOORD
- INTEGER AST_GETSTCNCOORD
-
- CHARACTER AST__STCNAME*4
- PARAMETER ( AST__STCNAME = 'Name' )
-
- CHARACTER AST__STCVALUE*5
- PARAMETER ( AST__STCVALUE = 'Value' )
-
- CHARACTER AST__STCERROR*5
- PARAMETER ( AST__STCERROR = 'Error' )
-
- CHARACTER AST__STCRES*10
- PARAMETER ( AST__STCRES = 'Resolution' )
-
- CHARACTER AST__STCSIZE*4
- PARAMETER ( AST__STCSIZE = 'Size' )
-
- CHARACTER AST__STCPIXSZ*7
- PARAMETER ( AST__STCPIXSZ = 'PixSize' )
-
-* StcSearchLocation class.
- LOGICAL AST_ISASTCSEARCHLOCATION
- INTEGER AST_STCSEARCHLOCATION
-
-* StcCatalogEntryLocation class.
- LOGICAL AST_ISASTCCATALOGENTRYLOCATION
- INTEGER AST_STCCATALOGENTRYLOCATION
-
-* StcResourceProfile class.
- LOGICAL AST_ISASTCRESOURCEPROFILE
- INTEGER AST_STCRESOURCEPROFILE
-
-* StcObsDataLocation class.
- LOGICAL AST_ISASTCOBSDATALOCATION
- INTEGER AST_STCOBSDATALOCATION
-
-* SwitchMap class.
- INTEGER AST_SWITCHMAP
- LOGICAL AST_ISASWITCHMAP
-
-* SelectorMap class.
- INTEGER AST_SELECTORMAP
- LOGICAL AST_ISASELECTORMAP
-
-* Plot3D class.
- INTEGER AST_PLOT3D
- LOGICAL AST_ISAPLOT3D
-
-* StcsChan class.
- INTEGER AST_STCSCHAN
- LOGICAL AST_ISASTCSCHAN
-
-
-
diff --git a/ast-5.3-1/ast_test.c b/ast-5.3-1/ast_test.c
deleted file mode 100644
index 1a39f65..0000000
--- a/ast-5.3-1/ast_test.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-#include "ast.h" /* AST C interface definition */
-
-/* C header files. */
-/* --------------- */
-#include <stdio.h>
-
-/* Main function. */
-/* ============== */
-int main( int argc, char *argv[] ) {
-/*
-*+
-* Name:
-* ast_test
-
-* Purpose:
-* Test installation of the AST library.
-
-* Type:
-* C program.
-
-* Description:
-* This program performs a simple test (without using graphics) of
-* the AST library, to check that it is correctly installed. It is
-* not an exhaustive test of the system.
-
-* Arguments:
-* None.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 19-NOV-1997 (RFWS);
-* Original version.
-*-
-*/
-
-/* Local Constants: */
-#define NCOORD 10 /* Number of coordinates to transform */
-
-/* Local Variables: */
- AstFrameSet *cvt; /* Pointer to conversion FrameSet */
- AstSkyFrame *sky1; /* Pointer to first SkyFrame */
- AstSkyFrame *sky2; /* Pointer to second SkyFrame */
- double xin[ NCOORD ]; /* Input coordinate array */
- double xout[ NCOORD ]; /* Output coordinate array */
- double yin[ NCOORD ]; /* Input coordinate array */
- double yout[ NCOORD ]; /* Output coordinate array */
- int i; /* Loop counter for coordinates */
-
-/* Begin an AST context. */
- astBegin;
-
-/* Create two SkyFrames. */
- sky1 = astSkyFrame( "system = FK4_NO_E, equinox = B1920, epoch = B1958" );
- sky2 = astSkyFrame( "system = ecliptic, equinox = J2001" );
-
-/* Create a FrameSet describing the conversion between them. */
- cvt = astConvert( sky1, sky2, "" );
-
-/* If successful, set up some input coordinates. */
- if ( cvt != AST__NULL ) {
- for ( i = 0; i < NCOORD; i++ ) {
- xin[ i ] = 0.1 * (double) i;
- yin[ i ] = 0.2 * (double) i;
- }
-
-/* Display the FrameSet. */
- astShow( cvt );
- printf( "\n");
-
-/* Activate reporting of coordinate transformations. */
- astSet( cvt, "Report = 1" );
-
-/* Perform the forward transformation. */
- astTran2( cvt, 10, xin, yin, 1, xout, yout );
- printf( "\n");
-
-/* Perform the inverse transformation. */
- astTran2( cvt, 10, xout, yout, 0, xin, yin );
- }
-
-/* End the AST context. */
- astEnd;
-
-/* Return an error status. */
- return astOK ? 0 : 1;
-
-/* Undefine local macros. */
-#undef NCOORD
-}
diff --git a/ast-5.3-1/astbad.c b/ast-5.3-1/astbad.c
deleted file mode 100644
index 7e66d19..0000000
--- a/ast-5.3-1/astbad.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-#include "pointset.h" /* declaration of AST__BAD */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <stdio.h>
-
-/* Main function. */
-/* ============== */
-int main( void ) {
-/*
-*+
-* Name:
-* astbad
-
-* Purpose:
-* Generate a string representing the AST__BAD value.
-
-* Type:
-* C program.
-
-* Description:
-* This program writes a string to standard output containing a
-* formatted decimal representation of the C double value
-* AST__BAD. This is intended for use in defining the AST__BAD
-* constant for use from languages other than C.
-*
-* The value written should contain sufficient decimal digits so
-* that a routine that uses it to generate a value in another
-* language will produce exactly the same value as a C program
-* using the AST__BAD macro.
-
-* Arguments:
-* None.
-
-* Copyright:
-* Copyright (C) 2009 Science & Technology Facilities Council.
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: David S. Berry (Starlink)
-* TIMJ: Tim Jenness (JAC, Hawaii)
-
-* History:
-* 18-NOV-1997 (RFWS);
-* Original version.
-* 24-OCT-2000 (DSB):
-* Ensure that the number of digits used is at least the minimum
-* required by IEEE for a conversion from binary to string and back
-* to binary to be an identity.
-* 31-MAR-2009 (TIMJ):
-* Does not take any arguments so don't try to read arguments.
-*-
-*/
-
-/* Local Constants: */
-#define BUFF_LEN ( 2 * DBL_DIG + 20 ) /* Buffer length */
-#define IEEE_DIG 17 /* Minimum number of digits required by
- IEEE for conversion from binary to
- string and back again to be an
- identity. */
-
-/* Local Variables: */
- char buff[ BUFF_LEN + 1 ]; /* Buffer for formatted string */
- double ast__bad; /* Value read back from string */
- int digits; /* Number of digits of precision */
-
-/* Vary the precision over a reasonable range to see how many decimal
- digits are required. The initial number of digits is the larger of
- DBL_DIG and IEEE_DIG. */
- for ( digits = ( DBL_DIG > IEEE_DIG )?DBL_DIG:IEEE_DIG;
- digits <= ( 2 * DBL_DIG ); digits++ ) {
-
-/* Format the AST__BAD value using this precision and then read it
- back. */
- (void) sprintf( buff, "%.*G", digits, AST__BAD );
- (void) sscanf( buff, "%lg", &ast__bad );
-
-/* Quit looping when the original value is read back. */
- if ( ast__bad == AST__BAD ) break;
- }
-
-/* Write the AST__BAD value to standard output, with one extra digit
- for good measure. */
- (void) printf( "%.*G\n", digits + 1, AST__BAD );
-
-/* Exit. */
- return 0;
-}
diff --git a/ast-5.3-1/axis.c b/ast-5.3-1/axis.c
deleted file mode 100644
index e844dad..0000000
--- a/ast-5.3-1/axis.c
+++ /dev/null
@@ -1,3256 +0,0 @@
-/*
-*class++
-* Name:
-* Axis
-
-* Purpose:
-* Store axis information.
-
-* Constructor Function:
-* None.
-
-* Description:
-* The Axis class is used to store information associated with a
-* particular axis of a Frame. It is used internally by the AST
-* library and has no constructor function. You should encounter it
-c only within textual output (e.g. from astWrite).
-f only within textual output (e.g. from AST_WRITE).
-
-* Inheritance:
-* The Axis class inherits from the Object class.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: B.S. Berry (Starlink)
-
-* History:
-* 1-MAR-1996 (RFWS):
-* Original version.
-* 10-SEP-1996 (RFWS):
-* Added I/O facilities.
-* 11-SEP-1996 (RFWS):
-* Added astAxisGap (written by DSB).
-* 25-FEB-1998 (RFWS):
-* Added astAxisUnformat.
-* 29-AUG-2001 (DSB):
-* Added AxisDistance and AxisOffset.
-* 20-OCT-2002 (DSB):
-* Added Top and Bottom attributes.
-* 8-JAN-2003 (DSB):
-* - Changed private InitVtab method to protected astInitAxisVtab
-* method.
-* - Include descriptive label for units string within a Dump.
-* 24-JAN-2004 (DSB):
-* - Added astAxisFields.
-* - Added argument "fmt" to definition of AxisAbbrev.
-* 3-FEB-2004 (DSB):
-* - Added "log" formatting using the "&" flag character in the
-* Format string.
-* 15-SEP-2004 (DSB):
-* - If a format string is set which includes a wildcard precision
-* value (".*"), then use the Digits value to determine the precision
-* to be used.
-* - If the conversion code is of integer type (e.g. "%d") cast value
-* to integer before printing.
-* 2-FEB-2005 (DSB):
-* - Avoid using astStore to allocate more storage than is supplied
-* in the "data" pointer. This can cause access violations since
-* astStore will then read beyond the end of the "data" area.
-* 15-MAR-2005 (DSB):
-* - Avoid exponents in log format labels which are close to zero but
-* not quite zero.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 30-JUN-2006 (DSB):
-* Guard against a null "str1" value in AxisAbbrev.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS Axis
-
-
-/* Header files. */
-/* ============= */
-#include "ast_err.h" /* Error code definitions */
-
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Object interface (parent class) */
-#include "pointset.h" /* Sets of coordinates (for AST__BAD) */
-#include "channel.h" /* I/O channels */
-#include "axis.h" /* Interface definition for this class */
-#include "unit.h" /* Definitions of physical units */
-#include "globals.h" /* Thread-safe global data access */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <errno.h>
-#include <float.h>
-#include <limits.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-/* Strings used as field delimiters when producing graphical labels.
- These strings include escape sequences which the Plot class interprets
- to produce super-scripts, sub-scripts, etc.*/
-static const char *log_esc = "10%-%^50+%s70+";
-
-/* Plain text equivalents. */
-static const char *log_txt = "10^";
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->GetDefaultFormat_Buff[ 0 ] = 0; \
- globals->AxisFormat_Buff[ 0 ] = 0; \
- globals->GetAxisNormUnit_Buff[ 0 ] = 0; \
- globals->GetAttrib_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Axis)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Axis,Class_Init)
-#define class_vtab astGLOBAL(Axis,Class_Vtab)
-#define getdefaultformat_buff astGLOBAL(Axis,GetDefaultFormat_Buff)
-#define axisformat_buff astGLOBAL(Axis,AxisFormat_Buff)
-#define getaxisnormunit_buff astGLOBAL(Axis,GetAxisNormUnit_Buff)
-#define getattrib_buff astGLOBAL(Axis,GetAttrib_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-static char getdefaultformat_buff[ AST__AXIS_GETDEFAULTFORMAT_BUFF_LEN + 1 ];
-static char axisformat_buff[ AST__AXIS_GETDEFAULTFORMAT_BUFF_LEN + 1 ];
-static char getaxisnormunit_buff[ AST__AXIS_GETAXISNORMUNIT_BUFF_LEN + 1 ];
-static char getattrib_buff[ AST__AXIS_GETATTRIB_BUFF_LEN + 1 ];
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstAxisVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstAxis *astAxisId_( const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static const char *AxisAbbrev( AstAxis *, const char *, const char *, const char *, int * );
-static const char *AxisFormat( AstAxis *, double, int * );
-static int GetObjSize( AstObject *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static const char *GetAxisFormat( AstAxis *, int * );
-static const char *GetAxisLabel( AstAxis *, int * );
-static const char *GetAxisSymbol( AstAxis *, int * );
-static const char *GetAxisUnit( AstAxis *, int * );
-static const char *GetAxisNormUnit( AstAxis *, int * );
-static const char *GetDefaultFormat( AstAxis *, int * );
-static char *ParseAxisFormat( const char *, int, int *, int *, int *, int *, int * );
-static double AxisDistance( AstAxis *, double, double, int * );
-static double AxisGap( AstAxis *, double, int *, int * );
-static double AxisOffset( AstAxis *, double, double, int * );
-static int AxisFields( AstAxis *, const char *, const char *, int, char **, int *, double *, int * );
-static int AxisIn( AstAxis *, double, double, double, int, int * );
-static int AxisUnformat( AstAxis *, const char *, double *, int * );
-static int GetAxisDigits( AstAxis *, int * );
-static int GetAxisDirection( AstAxis *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestAxisDigits( AstAxis *, int * );
-static int TestAxisDirection( AstAxis *, int * );
-static int TestAxisFormat( AstAxis *, int * );
-static int TestAxisLabel( AstAxis *, int * );
-static int TestAxisSymbol( AstAxis *, int * );
-static int TestAxisUnit( AstAxis *, int * );
-static int TestAxisNormUnit( AstAxis *, int * );
-static void AxisNorm( AstAxis *, double *, int * );
-static void AxisOverlay( AstAxis *, AstAxis *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void ClearAxisDigits( AstAxis *, int * );
-static void ClearAxisDirection( AstAxis *, int * );
-static void ClearAxisFormat( AstAxis *, int * );
-static void ClearAxisLabel( AstAxis *, int * );
-static void ClearAxisSymbol( AstAxis *, int * );
-static void ClearAxisUnit( AstAxis *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetAxisDigits( AstAxis *, int, int * );
-static void SetAxisDirection( AstAxis *, int, int * );
-static void SetAxisFormat( AstAxis *, const char *, int * );
-static void SetAxisLabel( AstAxis *, const char *, int * );
-static void SetAxisSymbol( AstAxis *, const char *, int * );
-static void SetAxisUnit( AstAxis *, const char *, int * );
-
-static double GetAxisTop( AstAxis *, int * );
-static int TestAxisTop( AstAxis *, int * );
-static void ClearAxisTop( AstAxis *, int * );
-static void SetAxisTop( AstAxis *, double, int * );
-
-static double GetAxisBottom( AstAxis *, int * );
-static int TestAxisBottom( AstAxis *, int * );
-static void ClearAxisBottom( AstAxis *, int * );
-static void SetAxisBottom( AstAxis *, double, int * );
-
-
-/* Member functions. */
-/* ================= */
-static const char *AxisAbbrev( AstAxis *this, const char *fmt,
- const char *str1, const char *str2, int *status ) {
-/*
-*+
-* Name:
-* astAxisAbbrev
-
-* Purpose:
-* Abbreviate a formatted Axis value by skipping leading fields.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "axis.h"
-* const char *astAxisAbbrev( AstAxis *this, const char *fmt,
-* const char *str1, const char *str2 )
-
-* Class Membership:
-* Axis method.
-
-* Description:
-* This function compares two Axis values that have been formatted
-* (using astAxisFormat) and determines if they have any redundant
-* leading fields (i.e. leading fields in common which can be
-* suppressed when tabulating the values or plotting them on the
-* axis of a graph).
-
-* Parameters:
-* this
-* Pointer to the Axis.
-* fmt
-* Pointer to a constant null-terminated string containing the
-* format specifier used to format the two values.
-* str1
-* Pointer to a constant null-terminated string containing the
-* first formatted value. If this is null, the returned pointer
-* points to the start of the final field in str2.
-* str2
-* Pointer to a constant null-terminated string containing the
-* second formatted value.
-
-* Returned Value:
-* A pointer into the "str2" string which locates the first
-* character in the first field that differs between the two
-* formatted values.
-*
-* If the two values have no leading fields in common, the returned
-* value will point at the start of string "str2". If the two
-* values are equal, it will point at the terminating null at the
-* end of this string.
-
-* Notes:
-* - This function assumes that the format specification used was
-* the same when both values were formatted.
-* - A pointer to the start of "str2" will be returned if this
-* function is invoked with the global error status set, or if it
-* should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- const char *result; /* Result pointer to return */
-
-/* Initialise. */
- result = str2;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* In the Axis class, there is only one field in a formatted value.
- We return the value of "str2", unless the two strings are
- identical, in which case we return a pointer to the final null in
- "str2". */
- if( str1 && !strcmp( str1, str2 ) ) result += strlen( str2 );
-
-/* Return the result. */
- return result;
-}
-
-static double AxisDistance( AstAxis *this, double v1, double v2, int *status ) {
-/*
-*+
-* Name:
-* astAxisDistance
-
-* Purpose:
-* Find the distance between two axis values.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "axis.h"
-* AxisDistance( AstAxis *this, double v1, double v2 )
-
-* Class Membership:
-* Axis method.
-
-* Description:
-* This function returns a signed value representing the axis increment
-* from axis value v1 to axis value v2.
-*
-* For a simple Axis, this is a trivial operation. But for other
-* derived classes of Axis (such as a SkyAxis) this is not the case.
-
-* Parameters:
-* this
-* Pointer to the Axis.
-* v1
-* The first axis value
-* v2
-* The second axis value
-
-* Returned Value:
-* The axis increment from v1 to v2.
-
-* Notes:
-* - A value of AST__BAD is returned if either axis value is AST__BAD.
-* - A value of AST__BAD will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- double result; /* Returned gap size */
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Check both axis values are OK, and form the returned increment. */
- if( v1 != AST__BAD && v2 != AST__BAD ) result = v2 - v1;
-
-/* Return the result. */
- return result;
-}
-
-static int AxisFields( AstAxis *this, const char *fmt0, const char *str,
- int maxfld, char **fields, int *nc, double *val, int *status ) {
-/*
-*+
-* Name:
-* astAxisFields
-
-* Purpose:
-* Identify numerical fields within a formatted Axis value.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "axis.h"
-* int astAxisFields( AstAxis *this, const char *fmt0, const char *str,
-* int maxfld, char **fields, int *nc, double *val )
-
-* Class Membership:
-* Axis member function.
-
-* Description:
-* This function identifies the numerical fields within an Axis value
-* that have been formatted using astAxisFormat. It assumes that the
-* value was formatted using the supplied format string. It also
-* returns the equivalent floating point value.
-
-* Parameters:
-* this
-* Pointer to the Axis.
-* fmt0
-* Pointer to a constant null-terminated string containing the
-* format used when creating "str".
-* str
-* Pointer to a constant null-terminated string containing the
-* formatted value.
-* maxfld
-* The maximum number of fields to identify within "str".
-* fields
-* A pointer to an array of at least "maxfld" character pointers.
-* Each element is returned holding a pointer to the start of the
-* corresponding field in "str" (in the order in which they occur
-* within "str"), or NULL if no corresponding field can be found.
-* nc
-* A pointer to an array of at least "maxfld" integers. Each
-* element is returned holding the number of characters in the
-* corresponding field, or zero if no corresponding field can be
-* found.
-* val
-* Pointer to a location at which to store the value
-* equivalent to the returned field values. If this is NULL,
-* it is ignored.
-
-* Returned Value:
-* The number of fields succesfully identified and returned.
-
-* Notes:
-* - Leading and trailing spaces are ignored.
-* - If the formatted value is not consistent with the supplied format
-* string, then a value of zero will be returned, "fields" will be
-* returned holding NULLs, "nc" will be returned holding zeros, and
-* "val" is returned holding VAL__BAD.
-* - Fields are counted from the start of the formatted string. If the
-* string contains more than "maxfld" fields, then trailing fields are
-* ignored.
-* - If this function is invoked with the global error status set, or
-* if it should fail for any reason, then a value of zero will be returned
-* as the function value, and "fields", "nc" and "val" will be returned
-* holding their supplied values
-*-
-*/
-
-/* Local Variables: */
- const char *fmt; /* Pointer to parsed Format string */
- const char *log_del; /* Pointer to delimiter string */
- const char *p; /* Pointer to next character */
- double value; /* Equivalent radians value */
- int ifld; /* Field index */
- int integ; /* Cast axis value to integer before printing? */
- int len; /* Length of formatted string */
- int log; /* Format as "10**x"? */
- int n; /* Number of characters read */
- int neg; /* Negate final value? */
- int result; /* Result fields count to return */
- int sign; /* Include leading sign in front of "10**x"? */
- int space; /* Include leading space in front of "10**x"? */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Initialise. */
- result = 0;
- for( ifld = 0; ifld < maxfld; ifld++ ) {
- fields[ ifld ] = NULL;
- nc[ ifld ] = 0;
- }
- if( val ) *val = AST__BAD;
-
-/* Parse the Format string. This returns a collection of flags indicating
- if any AST specific formatting features are specified in the Format
- string. It also returns a pointer to a new Format string which is a
- standard C printf format specifier. Currently the only flags are "log"
- which indicates if the value should be formatted as "10**x" using
- the graphical escape sequences defined within the Plot class to produce
- "x" as a superscript of "10", "sign" which is used with log to indicate
- if a sign should always be included infront of the "10", and "space"
- which indicates if a leading space should be included infronyt of "10" if
- no sign is included. */
- fmt = ParseAxisFormat( fmt0, astGetAxisDigits( this ), &log, &sign,
- &space, &integ, status );
- fmt = astFree( (void *) fmt );
-
- if( astOK ) {
-
-/* Obtain the length of the formatted string. */
- len = (int) strlen( str );
-
-/* First deal with "log" format. */
- if( log ) {
-
-/* We need room for at least 2 fields. */
- if( maxfld > 1 ) {
-
-/* Return a pointer to the first non-blank character. */
- p = str;
- while( *p == ' ' ) p++;
- fields[ 0 ] = (char *) p;
-
-/* If the first non-blank character is a minus sign, note it and skip it. */
- neg = 0;
- if( *p == '-' ) {
- neg = 1;
- p++;
-
-/* If the first non-blank character is a plus sign, and skip it. */
- } else if( *p == '+' ) {
- p++;
- }
-
-/* Select the delimter.*/
- log_del = astEscapes( -1 ) ? log_esc : log_txt;
-
-/* Check the remaining string starts with the correct delimiter. If
- so, store the number of characters in the first field and skip over the
- delimiter. */
- n = 0;
- if( strstr( p, log_del ) == p ) {
- nc[ 0 ] = p + 2 - fields[ 0 ];
- p += strlen( log_del );
-
-/* Attempt to read a floating point value from the start of the remaining
- string. */
- if( 1 == sscanf( p, "%lg%n", &value, &n ) ) {
-
-/* If succesfull, store the returned values. */
- result = 2;
- fields[ 1 ] = (char *) p;
- nc[ 1 ] = n;
- if( val ) {
- *val = pow( 10.0, value );
- if( neg ) *val = -(*val);
- }
-
-/* Otherwise, see if the string starts with <bad> */
- } else if( strstr( p, "<bad>" ) == p ) {
-
-/* If succesfull, store the returned values. */
- result = 2;
- fields[ 1 ] = (char *) p;
- nc[ 1 ] = 5;
- if( val ) *val = 0.0;
- }
-
-/* Zero is never formatted as an exponent. If the string starts with zero,
- return a single zero field. */
- } else if( 1 == sscanf( p, "%lg%n", &value, &n ) ) {
- if( value == 0.0 ) {
- result = 1;
- nc[ 0 ] = p + n - fields[ 0 ];
- if( val ) *val = 0.0;
- }
- }
- }
-
-/* Now deal with normal decimal format */
- } else {
-
-/* Attempt to read a floating point value from the formatted string. */
- if ( n = 0,
- ( 1 == sscanf( str, "%lg %n", &value, &n ) )
- && ( n >= len ) && maxfld > 0 ) {
-
-/* If succesful, return a pointer to the first non-blank character. */
- p = str;
- while( *p == ' ' ) p++;
- fields[ 0 ] = (char *) p;
-
-/* Find the last non-blank character. */
- p += len;
- while( p[ -1 ] == ' ' ) p--;
-
-/* Return the number of characters in the field. */
- nc[ 0 ] = p - fields[ 0 ];
-
-/* Return the field value. */
- if( val ) *val = value;
-
-/* Indicate that we are returning one field. */
- result = 1;
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *AxisFormat( AstAxis *this, double value, int *status ) {
-/*
-*+
-* Name:
-* astAxisFormat
-
-* Purpose:
-* Format a coordinate value for an Axis.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-* #include "axis.h"
-* const char *astAxisFormat( AstAxis *this, double value )
-
-* Class Membership:
-* Axis method.
-
-* Description:
-* This function returns a pointer to a string containing the formatted
-* (character) version of a coordinate value for an Axis. The formatting
-* applied is that specified by a previous invocation of the
-* astSetAxisFormat method. A suitable default format is applied if
-* necessary.
-
-* Parameters:
-* this
-* Pointer to the Axis.
-* value
-* The coordinate value to be formatted.
-
-* Returned Value:
-* A pointer to a null-terminated string containing the formatted value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated within
-* the Axis object, or at static memory. The contents of the string may be
-* over-written or the pointer may become invalid following a further
-* invocation of the same function or deletion of the Axis. A copy of the
-* string should therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Constants: */
-#define ERRBUF_LEN 80
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- char errbuf[ ERRBUF_LEN ]; /* Buffer for system error message */
- char *errstat; /* Pointer for system error message */
- const char *fmt0; /* Pointer to original Format string */
- const char *fmt; /* Pointer to parsed Format string */
- const char *result; /* Pointer to formatted value */
- double x; /* The value to be formatted by sprintf */
- int integ; /* Cast axis value to integer before printing? */
- int log; /* Format as "10**x"? */
- int nc; /* Total number of characters written */
- int ncc; /* Number of characters written */
- int sign; /* Include leading sign in front of "10**x"? */
- int space; /* Include leading space in front of "10**x"? */
- int stat; /* Value of errno after error */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* Initialise. */
- result = NULL;
- nc = 0;
- x = value;
-
-/* Check if a bad coordinate value was supplied and return a pointer to an
- appropriate string if necessary. */
- if ( value == AST__BAD ) {
- result = "<bad>";
-
-/* Otherwise, obtain a pointer to the Format string. Note a private member
- function is used here in preference to an object method. This is because the
- syntax of the Format string may be extended by derived classes and we do not
- want to obtain a string that we cannot interpret here (where we are
- restricted to C format specifiers capable of formatting double values).
- Classes that extend the syntax should provide their own astAxisFormat method
- and may need to store the string in a separate location. The original
- location should not be re-used as the string it contains may be needed by
- the Axis astOverlay method when overlaying attributes on to another Axis
- object. */
- } else {
- fmt0 = GetAxisFormat( this, status );
-
-/* Parse the Format string. This returns a collection of flags indicating
- if any AST specific formatting features are specified in the Format
- string. It also returns a pointer to a new Format string which is a
- standard C printf format specifier. Currently the only flags are "log"
- which indicates if the value should be formatted as "10**x" using
- the graphical escape sequences defined within the Plot class to produce
- "x" as a superscript of "10", "sign" which is used with log to indicate
- if a sign should always be included infront of the "10", and "space"
- which indicates if a leading space should be included infronyt of "10"
- if no sign is included. It also modifies ".*" precision fields by
- replacing the "*" by the current vale of the Digits attribute. */
- fmt = ParseAxisFormat( fmt0, astGetAxisDigits( this ), &log, &sign,
- &space, &integ, status );
- if( astOK ) {
-
-/* Format zero normally. */
- if( value == 0.0 ) log = 0;
-
-/* If log format is required, find the value of the exponent "x", and
- initialise the returned string to hold the exponent and the graphical
- escape sequence which produces a superscript. Otherwise just format the
- supplied value. */
- if( log ) {
-
- if( sign ) {
- axisformat_buff[ 0 ] ='+';
- nc = 1;
-
- } else if( space ) {
- axisformat_buff[ 0 ] =' ';
- nc = 1;
- }
-
- if( value > 0 ) {
- x = log10( integ ? (int) value : value );
-
- } else {
- x = log10( integ ? (int) -value : -value );
- axisformat_buff[ 0 ] ='-';
- nc = 1;
- }
-
- nc += sprintf( axisformat_buff + nc, "%s",
- astEscapes( -1 ) ? log_esc : log_txt );
-
-/* Round small exponents to zero. */
- if( fabs( x ) < 1.0E-10 ) x = 0.0;
- }
- }
-
-/* Clear errno and attempt to format the value as if the Format string were
- a standard "sprintf" format. */
- if ( astOK ) {
- errno = 0;
- if( integ ) {
- ncc = sprintf( axisformat_buff + nc, fmt, (int) x );
- } else {
- ncc = sprintf( axisformat_buff + nc, fmt, x );
- }
- nc += ncc;
-
-/* If log format is being used, terminate the string with an escape
- sequence which resets the graphical attributes to what they were at the
- start of the string. */
- if( log ) nc += sprintf( axisformat_buff + nc, "%%+" );
-
-/* The possibilities for error detection are limited here, but check if an
- error value was returned and report an error. Include information from
- errno if it was set. */
- if ( ncc < 0 ) {
- stat = errno;
- if( stat ) {
-#if HAVE_STRERROR_R
- strerror_r( stat, errbuf, ERRBUF_LEN );
- errstat = errbuf;
-#else
- errstat = strerror( stat );
-#endif
- } else {
- *errbuf = 0;
- errstat = errbuf;
- }
- astError( AST__FMTER, "astAxisFormat(%s): Error formatting a "
- "coordinate value of %1.*G%s%s.", status, astGetClass( this ),
- DBL_DIG, value, stat? " - " : "", errstat );
- astError( AST__FMTER, "The format string was \"%s\".", status, fmt );
-
-/* Also check that the result buffer did not overflow. If it did, memory will
- probably have been corrupted but this cannot be prevented with "sprintf".
- Report the error and abort. */
- } else if ( nc > AST__AXIS_AXISFORMAT_BUFF_LEN ) {
- astError( AST__FMTER, "astAxisFormat(%s): Internal buffer "
- "overflow while formatting a coordinate value of %1.*G "
- "- result exceeds %d characters.", status, astGetClass( this ),
- DBL_DIG, value, AST__AXIS_AXISFORMAT_BUFF_LEN );
- astError( AST__FMTER, "The format string was \"%s\".", status, fmt );
-
-/* If succesfull, return a pointer to the buffer. */
- } else {
- result = axisformat_buff;
- }
- }
-
-/* Free resources. */
- fmt = astFree( (void *) fmt );
-
- }
-
-/* Return the result. */
- return result;
-
-}
-#undef ERRBUF_LEN
-
-static double AxisGap( AstAxis *this, double gap, int *ntick, int *status ) {
-/*
-*+
-* Name:
-* astAxisGap
-
-* Purpose:
-* Find a "nice" gap for tabulating Axis values.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "axis.h"
-* double astAxisGap( AstAxis *this, double gap, int *ntick )
-
-* Class Membership:
-* Axis method.
-
-* Description:
-* This function returns a gap size which produces a nicely spaced
-* series of formatted Axis values, the returned gap size being as
-* close as possible to the supplied target gap size. It also
-* returns a convenient number of divisions into which the gap can
-* be divided.
-
-* Parameters:
-* this
-* Pointer to the Axis.
-* gap
-* The target gap size.
-* ntick
-* Address of an int in which to return a convenient number of
-* divisions into which the gap can be divided.
-
-* Returned Value:
-* The nice gap size.
-
-* Notes:
-* - A value of zero is returned if the supplied gap size is zero.
-* - A negative gap size is returned if the supplied gap size is negative.
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- double absgap; /* Absolute supplied gap size */
- double b; /* Decimal step size */
- double result; /* Returned gap size */
- int index; /* Index into tables */
- int positive; /* Value is positive (or zero)? */
-
-/* Local Data: */
- static double table1[ 10 ] = /* Table of nice decimal gaps */
- { 1.0, 2.0, 2.0, 5.0, 5.0, 5.0, 5.0, 10.0, 10.0, 10.0 };
- static int table2[ 10 ] = /* Table giving number of divisions */
- { 5, 4, 4, 5, 5, 5, 5, 5, 5, 5 };
-
-/* Initialise. */
- result = 0.0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Check that the supplied gap size is not zero. */
- if ( gap != 0.0 ) {
-
-/* Determine if the supplied gap size is positive and obtain its
- absolute value. */
- positive = ( gap >= 0.0 );
- absgap = positive ? gap : -gap;
-
-/* Obtain a value which has a 1 at the position of the most
- significant decimal digit in the target gap size and zeros at all
- other positions. */
- b = pow( 10.0, floor( log10( absgap ) ) );
-
-/* This value is the basic "step size". Find the nearest whole number
- of steps in the supplied gap, and then use the look-up-table in
- "table1" to find the closest acceptable gap size. Convert this gap
- size back to an absolute value by multiplying by the step size. */
- index = (int) ( absgap / b + 0.5 ) - 1;
- result = b * table1[ index ];
-
-/* If the target gap was negative, negate the result. */
- if( !positive ) result = -result;
-
-/* Store the number of divisions in the gap. */
- if ( ntick ) *ntick = table2[ index ];
- }
-
-/* Return the result. */
- return result;
-}
-
-static int AxisIn( AstAxis *this, double lo, double hi, double val, int closed, int *status ){
-/*
-*+
-* Name:
-* astAxisIn
-
-* Purpose:
-* Test if an axis value lies within a given interval.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "axis.h"
-* int AxisIn( AstAxis *this, double lo, double hi, double val, int closed )
-
-* Class Membership:
-* Axis member function.
-
-* Description:
-* This function returns non-zero if a given axis values lies within a
-* given axis interval.
-
-* Parameters:
-* this
-* Pointer to the Axis.
-* lo
-* The lower axis limit of the interval.
-* hi
-* The upper axis limit of the interval.
-* val
-* The axis value to be tested.
-* closed
-* If non-zero, then the lo and hi axis values are themselves
-* considered to be within the interval. Otherwise they are outside.
-
-* Returned Value:
-* Non-zero if the test value is inside the interval.
-
-* Class Applicability:
-* Axis
-* Uses simple Euclidean test
-* SkyAxis
-* All angles which are numerically between "lo" and "hi" are within
-* the interval. Angle outside this range are also within the interval
-* if they can be brought into the range by addition or subtraction
-* of a multiple of 2.PI.
-*-
-*/
-
-/* For speed, omit the astOK check since no pointers are being used. */
- if( closed ) {
- return ( lo <= val && val <= hi );
- } else {
- return ( lo < val && val < hi );
- }
-}
-
-static void AxisNorm( AstAxis *this, double *value, int *status ) {
-/*
-*+
-* Name:
-* astAxisNorm
-
-* Purpose:
-* Normalise an Axis coordinate value.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-* #include "axis.h"
-* void astAxisNorm( AstAxis *this, double *value )
-
-* Class Membership:
-* Axis method.
-
-* Description:
-* This function converts an Axis coordinate value which might
-* potentially be unsuitable for display to a user (for instance,
-* may lie outside the expected range of values) into an acceptable
-* alternative value suitable for display.
-*
-* Typically, for axes that represent cyclic values such as angles,
-* this function wraps an arbitrary coordinate value so that it
-* lies within the first cycle (say zero to 2*pi). For an ordinary
-* linear Axis, without constraints, this function will typically
-* return the original value unchanged.
-
-* Parameters:
-* this
-* Pointer to the Axis.
-* value
-* Pointer to the coordinate value to be normalised, which will
-* be modified in place.
-*-
-*/
-
-/* In the Axis class there are no constraints, so simply return
- without action. */
- return;
-}
-
-static double AxisOffset( AstAxis *this, double v1, double dist, int *status ) {
-/*
-*+
-* Name:
-* astAxisOffset
-
-* Purpose:
-* Add an increment onto a supplied axis value.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "axis.h"
-* AxisOffset( AstAxis *this, double v1, double dist )
-
-* Class Membership:
-* Axis method.
-
-* Description:
-* This function returns an axis value formed by adding a signed axis
-* increment onto a supplied axis value.
-*
-* For a simple Axis, this is a trivial operation. But for other
-* derived classes of Axis (such as a SkyAxis) this is not the case.
-
-* Parameters:
-* this
-* Pointer to the Axis.
-* v1
-* The supplied axis value
-* dist
-* The axis increment
-
-* Returned Value:
-* The axis value which is the specified increment away from v1.
-
-* Notes:
-* - A value of AST__BAD is returned if either axis value is AST__BAD.
-* - A value of AST__BAD will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- double result; /* Returned gap size */
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Check both axis values are OK, and form the returned axis value. */
- if( v1 != AST__BAD && dist != AST__BAD ) result = v1 + dist;
-
-/* Return the result. */
- return result;
-}
-
-static void AxisOverlay( AstAxis *template, AstAxis *result, int *status ) {
-/*
-*+
-* Name:
-* astAxisOverlay
-
-* Purpose:
-* Overlay the attributes of a template Axis on to another Axis.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "axis.h"
-* void astAxisOverlay( AstAxis *template, AstAxis *result )
-
-* Class Membership:
-* Axis method.
-
-* Description:
-* This function overlays attributes of one Axis (the "template") on to
-* another Axis, so as to over-ride selected attributes of that second
-* Axis. Normally only those attributes which have been specifically set
-* in the template will be transferred. This implements a form of
-* defaulting, in which an Axis acquires attributes from the template, but
-* retains its original attributes (as the default) if new values have not
-* previously been explicitly set in the template.
-
-* Parameters:
-* template
-* Pointer to the template Axis, for which values should have been
-* explicitly set for any attribute which is to be transferred.
-* result
-* Pointer to the Axis which is to receive the new attribute values.
-
-* Returned Value:
-* void
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Define a macro to overlay a single attribute. This tests if the attribute
- is set in the template Axis. If it is, its value is obtained and set in the
- result Axis also. */
-#define OVERLAY(par) \
- if ( astTestAxis##par( template ) ) { \
- astSetAxis##par( result, astGetAxis##par( template ) ); \
- }
-/* Overlay each Axis attribute in turn. */
- OVERLAY(Digits);
- OVERLAY(Direction);
- OVERLAY(Label);
- OVERLAY(Symbol);
- OVERLAY(Unit);
-
-/* Handle the Format string slightly differently by using a private member
- function to obtain it. This is necessary in case derived classes have
- extended the string syntax (see the AxisFormat function for more
- details). */
- if ( TestAxisFormat( template, status ) ) {
- SetAxisFormat( result, GetAxisFormat( template, status ), status );
- }
-
-/* Undefine macros local to this function. */
-#undef OVERLAY
-}
-
-static int AxisUnformat( AstAxis *this, const char *string, double *value, int *status ) {
-/*
-*+
-* Name:
-* astAxisUnformat
-
-* Purpose:
-* Read a formatted coordinate value for an Axis.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-* #include "axis.h"
-* int astAxisUnformat( AstAxis *this, const char *string, double *value )
-
-* Class Membership:
-* Axis method.
-
-* Description:
-* This function reads a formatted coordinate value for an Axis
-* (supplied as a string) and returns the equivalent numerical
-* value as a double. It also returns the number of characters read
-* from the string.
-
-* Parameters:
-* this
-* Pointer to the Axis.
-* string
-* Pointer to a constant null-terminated string containing the
-* formatted coordinate value.
-* value
-* Pointer to a double in which the coordinate value read will be
-* returned.
-
-* Returned Value:
-* The number of characters read from the string to obtain the
-* coordinate value.
-
-* Notes:
-* - Any white space at the beginning of the string will be
-* skipped, as also will any trailing white space following the
-* coordinate value read. The function's return value will reflect
-* this.
-* - A function value of zero (and no coordinate value) will be
-* returned, without error, if the string supplied does not contain
-* a suitably formatted value.
-* - The string "<bad>" is recognised as a special case and will
-* generate the value AST__BAD, without error. The test for this
-* string is case-insensitive and permits embedded white space.
-* - A function result of zero will be returned and no coordinate
-* value will be returned via the "value" pointer if this function
-* is invoked with the global error status set, or if it should
-* fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- double coord; /* Coordinate value read */
- int nc; /* Number of characters read */
-
-/* Initialise. */
- nc = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return nc;
-
-/* See if the string can be read as a floating point number. If so,
- return its value. Also obtain the number of characters read,
- including any leading and trailing white space. */
- if ( 1 == astSscanf( string, "%lf %n", &coord, &nc ) ) {
- *value = coord;
-
-/* Otherwise, see if the string starts with "<bad>", allowing mixed
- case and leading, embedded and trailing white space. If so, return
- the value AST__BAD. */
- } else if ( nc = 0,
- ( 0 == astSscanf( string, " < %*1[Bb] %*1[Aa] %*1[Dd] > %n", &nc )
- && ( nc > 0 ) ) ) {
- *value = AST__BAD;
-
-/* If the string cannot be read, return a function result of zero. */
- } else {
- nc = 0;
- }
-
-/* Return the number of characters read. */
- return nc;
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for an Axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "axis.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Axis member function (over-rides the astClearAttrib protected
-* method inherited from the Object class).
-
-* Description:
-* This function clears the value of a specified attribute for an
-* Axis, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the Axis.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstAxis *this; /* Pointer to the Axis structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Axis structure. */
- this = (AstAxis *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* Digits. */
-/* ------- */
- if ( !strcmp( attrib, "digits" ) ) {
- astClearAxisDigits( this );
-
-/* Direction. */
-/* ---------- */
- } else if ( !strcmp( attrib, "direction" ) ) {
- astClearAxisDirection( this );
-
-/* Format. */
-/* ------- */
- } else if ( !strcmp( attrib, "format" ) ) {
- astClearAxisFormat( this );
-
-/* Label. */
-/* ------ */
- } else if ( !strcmp( attrib, "label" ) ) {
- astClearAxisLabel( this );
-
-/* Top. */
-/* ---- */
- } else if ( !strcmp( attrib, "top" ) ) {
- astClearAxisTop( this );
-
-/* Bottom. */
-/* ------- */
- } else if ( !strcmp( attrib, "bottom" ) ) {
- astClearAxisBottom( this );
-
-/* Symbol. */
-/* ------- */
- } else if ( !strcmp( attrib, "symbol" ) ) {
- astClearAxisSymbol( this );
-
-/* Unit. */
-/* ----- */
- } else if ( !strcmp( attrib, "unit" ) ) {
- astClearAxisUnit( this );
-
-/* Read-only attributes. */
-/* --------------------- */
-/* Test if the attribute name matches any of the read-only attributes
- of this class. If it does, then report an error. */
- } else if ( !strcmp( attrib, "normunit" ) ) {
- astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
- "value for a %s.", status, attrib, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static const char *GetAxisNormUnit( AstAxis *this, int *status ){
-/*
-*+
-* Name:
-* astGetAxisNormUnit
-
-* Purpose:
-* Return the normalised Unit attribute for an Axis.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "axis.h"
-* const char *astGetAxisNormUnit( AstAxis *this ){
-
-* Class Membership:
-* Axis method.
-
-* Description:
-* This function normalised and returns the axis Unit attribute.
-* Normalisation refers to transformations such as "s*(m/s)" -> "m".
-
-* Parameters:
-* this
-* Pointer to the Axis.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the normalised
-* unit string.
-
-* Notes:
-* - The returned pointer points to a static memory buffer. The
-* contents of this buffer will be over-written on each invocation of
-* this function. A copy of the returned string should therefore be
-* taken if it will be needed later.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- const char *result; /* Pointer to dynamic memory holding returned text */
- int nc; /* Length of normalised Unit string */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* Get the Axis Unit attrribute and normalise it. */
- result = astUnitNormaliser( astGetAxisUnit( this ) );
-
-/* If successful, check that the resulting string will fit in the buffer.
- If not, report an error. */
- if( result ) {
- nc = strlen( result );
- if( nc > AST__AXIS_GETAXISNORMUNIT_BUFF_LEN ) {
- astError( AST__FMTER, "astGetAxisNormUnit(%s): Internal buffer "
- "overflow while normalising the units string '%s' "
- "- result exceeds %d characters.", status, astGetClass( this ),
- result, AST__AXIS_GETAXISNORMUNIT_BUFF_LEN );
- result = astFree( (void *) result );
-
-/* If so, copy it into the static buffer and free the dynamic memory returned
- by astUnitNormaliser. */
- } else {
- strcpy( getaxisnormunit_buff, result );
- }
- astFree( (void *) result );
-
- result = getaxisnormunit_buff;
- }
-
-/* Return the answer. */
- return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "axis.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* Axis member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied Axis,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the Axis.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstAxis *this; /* Pointer to Axis structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the Axis structure. */
- this = (AstAxis *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
-
- result += astTSizeOf( this->label );
- result += astTSizeOf( this->format );
- result += astTSizeOf( this->symbol );
- result += astTSizeOf( this->unit );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for an Axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "axis.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Axis member function (over-rides the protected astGetAttrib
-* method inherited from the Object class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for an Axis, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the Axis.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the Axis, or at static memory. The contents of the string
-* may be over-written or the pointer may become invalid following
-* a further invocation of the same function or any modification of
-* the Axis. A copy of the string should therefore be made if
-* necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstAxis*this; /* Pointer to the Axis structure */
- const char *result; /* Pointer value to return */
- double dval; /* Double attribute value */
- int digits; /* Digits attribute value */
- int direction; /* Direction attribute value */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the Axis structure. */
- this = (AstAxis *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null-terminated string in an
- appropriate format. Set "result" to point at the result string. */
-
-/* Digits. */
-/* ------- */
- if ( !strcmp( attrib, "digits" ) ) {
- digits = astGetAxisDigits( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", digits );
- result = getattrib_buff;
- }
-
-/* Direction. */
-/* ---------- */
- } else if ( !strcmp( attrib, "direction" ) ) {
- direction = astGetAxisDirection( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", direction );
- result = getattrib_buff;
- }
-
-/* Top. */
-/* ---- */
- } else if ( !strcmp( attrib, "top" ) ) {
- dval = astGetAxisTop( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* Bottom. */
-/* ------- */
- } else if ( !strcmp( attrib, "bottom" ) ) {
- dval = astGetAxisBottom( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* Format. */
-/* ------- */
- } else if ( !strcmp( attrib, "format" ) ) {
- result = astGetAxisFormat( this );
-
-/* Label. */
-/* ------ */
- } else if ( !strcmp( attrib, "label" ) ) {
- result = astGetAxisLabel( this );
-
-/* Symbol. */
-/* ------- */
- } else if ( !strcmp( attrib, "symbol" ) ) {
- result = astGetAxisSymbol( this );
-
-/* Unit. */
-/* ----- */
- } else if ( !strcmp( attrib, "unit" ) ) {
- result = astGetAxisUnit( this );
-
-/* NormUnit. */
-/* --------- */
- } else if ( !strcmp( attrib, "normunit" ) ) {
- result = astGetAxisNormUnit( this );
-
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-
-}
-
-static const char *GetDefaultFormat( AstAxis *this, int *status ){
-/*
-* Name:
-* GetDefaultFormat
-
-* Purpose:
-* Return a pointer to a string holding the default Format value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "axis.h"
-* const char *GetDefaultFormat( AstAxis *this, int *status )
-
-* Class Membership:
-* Axis member function
-
-* Description:
-* This function returns a pointer to a string holding the default
-* Format value, which is based on the current Digits value.
-
-* Parameters:
-* this
-* A pointer to the Axis structure.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a static null-terminated character string containing
-* the default Format string.
-
-* Notes:
-* - A null string will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-
-/* Check the global error status. */
- if ( !astOK ) return "";
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* Create the default format value and store it in the "format_buff"
- static variable. */
- (void) sprintf( getdefaultformat_buff, "%%1.%dG", astGetAxisDigits( this ) );
-
-/* Return a pointer to the "format_buff" static variable. */
- return getdefaultformat_buff;
-}
-
-void astInitAxisVtab_( AstAxisVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitAxisVtab
-
-* Purpose:
-* Initialise a virtual function table for an Axis.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "axis.h"
-* void astInitAxisVtab( AstAxisVtab *vtab, const char *name )
-
-* Class Membership:
-* Axis vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the Axis class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitObjectVtab( (AstObjectVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAAxis) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstObjectVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
- vtab->AxisAbbrev = AxisAbbrev;
- vtab->AxisFields = AxisFields;
- vtab->AxisFormat = AxisFormat;
- vtab->AxisDistance = AxisDistance;
- vtab->AxisOffset = AxisOffset;
- vtab->AxisGap = AxisGap;
- vtab->AxisIn = AxisIn;
- vtab->AxisNorm = AxisNorm;
- vtab->AxisOverlay = AxisOverlay;
- vtab->AxisUnformat = AxisUnformat;
- vtab->ClearAxisDigits = ClearAxisDigits;
- vtab->ClearAxisDirection = ClearAxisDirection;
- vtab->ClearAxisFormat = ClearAxisFormat;
- vtab->ClearAxisLabel = ClearAxisLabel;
- vtab->ClearAxisSymbol = ClearAxisSymbol;
- vtab->ClearAxisUnit = ClearAxisUnit;
- vtab->GetAxisDigits = GetAxisDigits;
- vtab->GetAxisDirection = GetAxisDirection;
- vtab->GetAxisFormat = GetAxisFormat;
- vtab->GetAxisLabel = GetAxisLabel;
- vtab->GetAxisSymbol = GetAxisSymbol;
- vtab->GetAxisUnit = GetAxisUnit;
- vtab->GetAxisNormUnit = GetAxisNormUnit;
- vtab->SetAxisDigits = SetAxisDigits;
- vtab->SetAxisDirection = SetAxisDirection;
- vtab->SetAxisFormat = SetAxisFormat;
- vtab->SetAxisLabel = SetAxisLabel;
- vtab->SetAxisSymbol = SetAxisSymbol;
- vtab->SetAxisUnit = SetAxisUnit;
- vtab->TestAxisDigits = TestAxisDigits;
- vtab->TestAxisDirection = TestAxisDirection;
- vtab->TestAxisFormat = TestAxisFormat;
- vtab->TestAxisLabel = TestAxisLabel;
- vtab->TestAxisSymbol = TestAxisSymbol;
- vtab->TestAxisUnit = TestAxisUnit;
- vtab->TestAxisNormUnit = TestAxisNormUnit;
-
- vtab->ClearAxisTop = ClearAxisTop;
- vtab->GetAxisTop = GetAxisTop;
- vtab->SetAxisTop = SetAxisTop;
- vtab->TestAxisTop = TestAxisTop;
-
- vtab->ClearAxisBottom = ClearAxisBottom;
- vtab->GetAxisBottom = GetAxisBottom;
- vtab->SetAxisBottom = SetAxisBottom;
- vtab->TestAxisBottom = TestAxisBottom;
-
-/* Save the inherited pointers to methods that will be extended, and replace
- them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
-
- parent_clearattrib = object->ClearAttrib;
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
- object->ClearAttrib = ClearAttrib;
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
-/* Declare the destructor, copy constructor and dump function. */
- astSetDelete( vtab, Delete );
- astSetCopy( vtab, Copy );
- astSetDump( vtab, Dump, "Axis", "Coordinate axis" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static char *ParseAxisFormat( const char *fmt0, int digs, int *log, int *sign,
- int *lspace, int *integ, int *status ){
-/*
-* Name:
-* ParseAxisFormat
-
-* Purpose:
-* Parse the Format string for an Axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "axis.h"
-* char *ParseAxisFormat( const char *fmt0, int digs, int *log, int *sign,
-* int *lspace, int *integ, int *status )
-
-* Class Membership:
-* Axis member function
-
-* Description:
-* This function returns a collection of flags indicating if any AST
-* specific formatting features are specified in the supplied Format
-* string. It also returns a pointer to a new Format string which is a
-* standard C printf format specifier.
-
-* Parameters:
-* fmt0
-* The value of the Format attribute.
-* digs
-* The default number of digits of precision to use. This is used
-* if the given format specifier includes a wildcard precision (".*").
-* In this case, the returned format specifier will be modified to
-* include an explicit precision value equal to the supplied value
-* of "digs".
-* log
-* Pointer to an integer in which to store a flag indicating if the
-* if the axis value should be formatted as "10**x" using the graphical
-* escape sequences defined within the Plot class to produce "x" as a
-* superscript of "10". A non-zero value will be returned if the
-* supplied Format string has a '&' character in its printf <flags>
-* field (that is, between the leading '%' sign and the optional
-* printf field width).
-* sign
-* Pointer to an integer in which to store a flag indicating if a
-* sign character ('+' or '-') should always be included in front
-* of the "10" if "log" is returned non-zero. If "log" is returned
-* zero, then "sign" will also be zero. If "log" is non-zero, then
-* a non-zero value for "sign" will be returned if the supplied Format
-* string has a '+' character in its printf <flags> field (that is,
-* between the leading '%' sign and the optional printf field width).
-* lspace
-* Pointer to an integer in which to store a flag indicating if a
-* leading space should be included in front of the "10" if "log" is
-* returned non-zero and "sign" is returned zero. Otherwise, "lspace"
-* will also be zero. If "log" is non-zero, then a non-zero value for
-* "lspace" will be returned if the supplied Format string has a ' '
-* character in its printf <flags> field (that is, between the leading
-* '%' sign and the optional printf field width).
-* integ
-* Pointer to an integer in which to store a flag indicating if the
-* returned format specifier includes an integer conversion code
-* (e.g. %d) or floating point conversion code (e.g. "%.7G").
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a dynamically allocated null-terminated string containing
-* the modified Format string. This will be a copy of the supplied
-* Format string, but with any '&' flag removed. Any '+' or ' ' flag will
-* also be removed if "log" is returned as non-zero. An explicit
-* precision field will be included if the supplied format includes a
-* ".*" precision field.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- char *a; /* Pointer to next char read from original format */
- char *b; /* Pointer to next char to write to new format */
- char *c; /* Pointer to next char read from original format */
- char *new; /* Pointer to new returned string */
- char *perc; /* Pointer to percent sign */
- char *result; /* Pointer to the returned string */
- int hash; /* Was a '#' flag found? */
- int len; /* Used length of format string */
- int minus; /* Was a '-' flag found? */
- int plus; /* Was a '+' flag found? */
- int rlen; /* Length of result */
- int space; /* Was a ' ' flag found? */
-
-/* Initialise. */
- result = NULL;
- *log = 0;
- *sign = 0;
- *lspace = 0;
- *integ = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Take a copy of the supplied string. Check the pointer can be used
- safely. */
- len = astChrLen( fmt0 );
- result = astStore( NULL, fmt0, len + 1 );
- if( astOK ) {
- result[ len ] = 0;
-
-/* Find the first percent sign. Do nothing if none is found. */
- perc = strchr( result, '%' );
- if( perc ) {
-
-/* Check each character following the percent sign until one is found
- which is not a legal printf flag, or a legal AST extension flag. Note
- which ones are present. */
- minus = 0;
- plus = 0;
- space = 0;
- hash = 0;
-
- a = perc;
- while( ++a ){
- if( *a == '-' ){
- minus = 1;
- } else if( *a == '+' ){
- plus = 1;
- } else if( *a == ' ' ){
- space = 1;
- } else if( *a == '#' ){
- hash = 1;
- } else if( *a == '&' ){
- *log = 1;
- } else {
- break;
- }
- }
-
-/* If no '&' flag was found just return the unaltered copy of the
- supplied Format string. Otherwise, remove any '+' or ' ' flag. */
- if( *log ) {
- if( plus ) *sign = 1;
- if( space ) *lspace = 1;
-
-/* Append any remaining flag characters to the output string. */
- perc++;
- if( minus ) *(perc++) = '-';
- if( hash ) *(perc++) = '#';
-
-/* Copy the remaining characters down to fill up the gap left by the
- removed flags. */
- while( *a ) *(perc++) = *(a++);
-
-/* Terminate the returned string. */
- *perc = 0;
-
- }
- }
- }
-
-/* If the format specifier being returned does include a ".*" precision,
- replace the "*" with the value of the Digits attribute. */
- if( result ) {
-
-/* Find the first percent sign. Do nothing if none is found. */
- a = strchr( result, '%' );
- if( a ) {
-
-/* Check each character following the percent sign until one is found
- which is not a legal printf flag. */
- while( ++a ){
- if( *a != '-' && *a != '+' && *a != ' ' && *a != '#' ) break;
- }
-
-/* Skip any field width (a decimal integer) following the flags. */
- a--;
- while( ++a ) {
- if( !isdigit( *a ) ) break;
- }
-
-/* Get a pointer to the next alphabetic character. This will be the
- conversion code. If it an integer code, return *integ non-zero. */
- c = a - 1;
- while( ++c ) {
- if( isalpha( *c ) ) {
- if( *c == 'd' || *c == 'i' || *c == 'u' || *c == 'o' ||
- *c == 'x' || *c == 'X' || *c == 'c' ) *integ = 1;
- break;
- }
- }
-
-/* Go back to the end of the field width. If the next two characters are
- "." and "*", change the asterisk to the supplied "digs" value. */
- if( a[ 0 ] == '.' && a[ 1 ] == '*' ) {
-
-/* Allocate memory to hold the extended format string (allowing 20
- characters for formatting the digs value - just in case something like
- INT_MAX is supplied by mistake), and store the existing string in it. */
- rlen = strlen( result );
- new = astMalloc( rlen + 22 );
- if( new ) memcpy( new, result, rlen + 1 );
-
-/* Put the precision into the new string, following the field width. */
- b = new + ( a - result );
- b += sprintf( b, ".%d", digs );
-
-/* Copy the remainder of the original format string to the new format
- string. */
- if( a[ 2 ] != 0 ) strcpy( b, a + 2 );
-
-/* Use the new format string in place of the old.*/
- astFree( result );
- result = new;
- }
- }
- }
-
-/* Return the result. */
- return result;
-
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for an Axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "axis.h"
-* void SetAttrib( AstObject *this, const char *setting, int *status )
-
-* Class Membership:
-* Axis member function (over-rides the protected astSetAttrib
-* method inherited from the Object class).
-
-* Description:
-* This function assigns an attribute value for an Axis, the
-* attribute and its value being specified by means of a string of
-* the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in
-* lower case with no white space present. The value to the right
-* of the "=" should be a suitable textual representation of the
-* value to be assigned and this will be interpreted according to
-* the attribute's data type. White space surrounding the value is
-* only significant for string attributes.
-
-* Parameters:
-* this
-* Pointer to the Axis.
-* setting
-* Pointer to a null terminated string specifying the new
-* attribute value.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstAxis *this; /* Pointer to Axis structure */
- double dval; /* Double attribute value */
- int digits; /* Number of digits of precision */
- int direction; /* Plot axis in normal direction? */
- int format; /* Offset of Format string */
- int label; /* Offset of Label string */
- int len; /* Length of setting string */
- int nc; /* Number of characters read from setting */
- int symbol; /* Offset of Symbol string */
- int unit; /* Offset of Unit string */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Axis structure. */
- this = (AstAxis *) this_object;
-
-/* Obtain the length of the setting string. */
- len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
- the setting string and extract the attribute value (or an offset to
- it in the case of string values). In each case, use the value set
- in "nc" to check that the entire string was matched. Once a value
- has been obtained, use the appropriate method to set it. */
-
-/* Digits. */
-/* ------- */
- if ( nc = 0,
- ( 1 == astSscanf( setting, "digits= %d %n", &digits, &nc ) )
- && ( nc >= len ) ) {
- astSetAxisDigits( this, digits );
-
-/* Direction. */
-/* ---------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "direction= %d %n", &direction, &nc ) )
- && ( nc >= len ) ) {
- astSetAxisDirection( this, direction );
-
-/* Top. */
-/* ---- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "top= %lg %n", &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetAxisTop( this, dval );
-
-/* Bottom. */
-/* ------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "bottom= %lg %n", &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetAxisBottom( this, dval );
-
-/* Format. */
-/* ------- */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "format=%n%*[^\n]%n", &format, &nc ) )
- && ( nc >= len ) ) {
- astSetAxisFormat( this, setting + format );
-
-/* Label. */
-/* ------ */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "label=%n%*[^\n]%n", &label, &nc ) )
- && ( nc >= len ) ) {
- astSetAxisLabel( this, setting + label );
-
-/* Symbol. */
-/* ------- */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "symbol=%n%*[^\n]%n", &symbol, &nc ) )
- && ( nc >= len ) ) {
- astSetAxisSymbol( this, setting + symbol );
-
-/* Unit. */
-/* ----- */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "unit=%n%*[^\n]%n", &unit, &nc ) )
- && ( nc >= len ) ) {
- astSetAxisUnit( this, setting + unit );
-
-/* Read-only attributes. */
-/* --------------------- */
-/* Define a macro to see if the setting string matches any of the
- read-only attributes of this class. */
-#define MATCH(attrib) \
- ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
- ( nc >= len ) )
-
-/* Use this macro to report an error if a read-only attribute has been
- specified. */
- } else if ( MATCH( "normunit" ) ) {
- astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.", status,
- setting, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Pass any unrecognised attribute setting to the parent method for further
- interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-
-/* Undefine macros local to this function. */
-#undef MATCH
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for an Axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "axis.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Axis member function (over-rides the astTestAttrib protected
-* method inherited from the Object class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate
-* whether a value has been set for one of an Axis' attributes.
-
-* Parameters:
-* this
-* Pointer to the Axis.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstAxis *this; /* Pointer to the Axis structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the Axis structure. */
- this = (AstAxis *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* Digits. */
-/* ------- */
- if ( !strcmp( attrib, "digits" ) ) {
- result = astTestAxisDigits( this );
-
-/* Direction. */
-/* ---------- */
- } else if ( !strcmp( attrib, "direction" ) ) {
- result = astTestAxisDirection( this );
-
-/* Top. */
-/* ---- */
- } else if ( !strcmp( attrib, "top" ) ) {
- result = astTestAxisTop( this );
-
-/* Bottom. */
-/* ------- */
- } else if ( !strcmp( attrib, "bottom" ) ) {
- result = astTestAxisBottom( this );
-
-/* Format. */
-/* ------- */
- } else if ( !strcmp( attrib, "format" ) ) {
- result = astTestAxisFormat( this );
-
-/* Label. */
-/* ------ */
- } else if ( !strcmp( attrib, "label" ) ) {
- result = astTestAxisLabel( this );
-
-/* Symbol. */
-/* ------- */
- } else if ( !strcmp( attrib, "symbol" ) ) {
- result = astTestAxisSymbol( this );
-
-/* Unit. */
-/* ----- */
- } else if ( !strcmp( attrib, "unit" ) ) {
- result = astTestAxisUnit( this );
-
-/* NormUnit. */
-/* --------- */
- } else if ( !strcmp( attrib, "normunit" ) ) {
- result = astTestAxisNormUnit( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static int TestAxisNormUnit( AstAxis *this, int *status ){
-/*
-* Name:
-* TestAxisNormUnit
-
-* Purpose:
-* Test if a NormUnit attribute value is set for an Axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "axis.h"
-* int TestAxisNormUnit( AstAxis *this, int *status )
-
-* Class Membership:
-* Axis member function
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate
-* whether a value has been set for the NormUnit string.
-
-* Parameters:
-* this
-* Pointer to the Axis.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
- return astTestAxisUnit( this );
-}
-
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with this
- class using the macros defined for this purpose in the "object.h" file. For
- a description of each attribute, see the class interface (in the associated
- .h file). */
-
-/* Digits. */
-/* ------- */
-/* Clear the Digits value by setting it to -INT_MAX. */
-astMAKE_CLEAR(Axis,AxisDigits,digits,-INT_MAX)
-
-/* Supply a default of 7 digits if no value has been set. */
-astMAKE_GET(Axis,AxisDigits,int,0,( this->digits != -INT_MAX ?
- this->digits : 7 ))
-
-/* Constrain the Digits value being set to be at least 1. */
-astMAKE_SET(Axis,AxisDigits,int,digits,( value > 1 ? value : 1 ))
-
-/* The Digits value is set if it is not -INT_MAX. */
-astMAKE_TEST(Axis,AxisDigits,( this->digits != -INT_MAX ))
-
-/* Direction. */
-/* ---------- */
-/* Clear the Direction value by setting it to -INT_MAX. */
-astMAKE_CLEAR(Axis,AxisDirection,direction,-INT_MAX)
-
-/* Supply a default value of 1 if the Direction value is not set. */
-astMAKE_GET(Axis,AxisDirection,int,0,( this->direction != -INT_MAX ?
- this->direction : 1 ))
-
-/* Set a Direction value of 1 if any non-zero value is supplied. */
-astMAKE_SET(Axis,AxisDirection,int,direction,( value != 0 ))
-
-/* The Direction value is set if it is not -INT_MAX. */
-astMAKE_TEST(Axis,AxisDirection,( this->direction != -INT_MAX ))
-
-/* Top. */
-/* -----*/
-/* Clear the Top Direction value by setting it to AST__BAD. */
-astMAKE_CLEAR(Axis,AxisTop,top,AST__BAD)
-
-/* Supply a default value of DBL_MAX if the Top value is not set.*/
-astMAKE_GET(Axis,AxisTop,double,0,( this->top != AST__BAD ? this->top : DBL_MAX))
-
-/* Set the Top value. */
-astMAKE_SET(Axis,AxisTop,double,top,(value))
-
-/* The Top value is set if it is not AST__BAD. */
-astMAKE_TEST(Axis,AxisTop,( this->top != AST__BAD ))
-
-/* Bottom. */
-/* --------*/
-/* Clear the Bottom Direction value by setting it to AST__BAD. */
-astMAKE_CLEAR(Axis,AxisBottom,bottom,AST__BAD)
-
-/* Supply a default value of -DBL_MAX if the Bottom value is not set.*/
-astMAKE_GET(Axis,AxisBottom,double,0.0,( this->bottom != AST__BAD ? this->bottom : -DBL_MAX))
-
-/* Set the Bottom value. */
-astMAKE_SET(Axis,AxisBottom,double,bottom,(value))
-
-/* The Bottom value is set if it is not AST__BAD. */
-astMAKE_TEST(Axis,AxisBottom,( this->bottom != AST__BAD ))
-
-/* Format. */
-/* ------- */
-/* Clear the Format value by freeing the allocated memory and assigning a NULL
- pointer. */
-astMAKE_CLEAR(Axis,AxisFormat,format,astFree( this->format ))
-
-/* If the Format value is not set, return a pointer to a default Format
- string. */
-astMAKE_GET(Axis,AxisFormat,const char *,NULL,( this->format ? this->format :
- GetDefaultFormat( this, status ) ) )
-
-/* Set a Format value by freeing any previously allocated memory, allocating
- new memory, storing the string and saving the pointer to the copy. */
-astMAKE_SET(Axis,AxisFormat,const char *,format,astStore( this->format, value,
- strlen( value ) + (size_t) 1 ))
-
-/* The Format value is set if the pointer to it is not NULL. */
-astMAKE_TEST(Axis,AxisFormat,( this->format != NULL ))
-
-/* Label. */
-/* ------ */
-/* Clear the Label value by freeing the allocated memory and assigning a NULL
- pointer. */
-astMAKE_CLEAR(Axis,AxisLabel,label,astFree( this->label ))
-
-/* If the Label value is not set, supply a default value by way of a pointer
- to the constant string "Coordinate Axis". */
-astMAKE_GET(Axis,AxisLabel,const char *,NULL,( this->label ? this->label :
- "Coordinate axis" ))
-
-/* Set a Label value by freeing any previously allocated memory, allocating
- new memory, storing the string and saving the pointer to the copy. */
-astMAKE_SET(Axis,AxisLabel,const char *,label,astStore( this->label, value,
- strlen( value ) + (size_t) 1 ))
-
-/* The Label value is set if the pointer to it is not NULL. */
-astMAKE_TEST(Axis,AxisLabel,( this->label != NULL ))
-
-/* Symbol. */
-/* ------- */
-/* Clear the Symbol value by freeing the allocated memory and assigning a NULL
- pointer. */
-astMAKE_CLEAR(Axis,AxisSymbol,symbol,astFree( this->symbol ))
-
-/* If the Symbol value is not set, supply a default value by way of a pointer
- to the constant string "x". */
-astMAKE_GET(Axis,AxisSymbol,const char *,NULL,( this->symbol ? this->symbol :
- "x" ))
-
-/* Set a Symbol value by freeing any previously allocated memory, allocating
- new memory, storing the string and saving the pointer to the copy. */
-astMAKE_SET(Axis,AxisSymbol,const char *,symbol,astStore( this->symbol, value,
- strlen( value ) + (size_t) 1 ))
-
-/* The Symbol value is set if the pointer to it is not NULL. */
-astMAKE_TEST(Axis,AxisSymbol,( this->symbol != NULL ))
-
-/* Unit. */
-/* ----- */
-/* Clear the Unit value by freeing the allocated memory and assigning a NULL
- pointer. */
-astMAKE_CLEAR(Axis,AxisUnit,unit,astFree( this->unit ))
-
-/* If the Unit value is not set, supply a default value by way of a pointer
- to the constant string "". */
-astMAKE_GET(Axis,AxisUnit,const char *,NULL,( this->unit ? this->unit : "" ))
-
-/* Set a Unit value by freeing any previously allocated memory, allocating
- new memory, storing the string and saving the pointer to the copy. */
-astMAKE_SET(Axis,AxisUnit,const char *,unit,astStore( this->unit, value,
- strlen( value ) + (size_t) 1 ))
-
-/* The Unit value is set if the pointer to it is not NULL. */
-astMAKE_TEST(Axis,AxisUnit,( this->unit != NULL ))
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for Axis objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for Axis objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstAxis *in; /* Pointer to input Axis */
- AstAxis *out; /* Pointer to output Axis */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Axis structures. */
- in = (AstAxis *) objin;
- out = (AstAxis *) objout;
-
-/* For safety, first clear any references to the input memory from
- the output Axis. */
- out->format = NULL;
- out->label = NULL;
- out->symbol = NULL;
- out->unit = NULL;
-
-/* Make copies of the allocated strings and Objects. */
- if ( in->label ) out->label = astStore( NULL, in->label,
- strlen( in->label ) + (size_t) 1 );
- if ( in->format ) out->format = astStore( NULL, in->format,
- strlen( in->format ) + (size_t) 1 );
- if ( in->symbol ) out->symbol = astStore( NULL, in->symbol,
- strlen( in->symbol ) + (size_t) 1 );
- if ( in->unit ) out->unit = astStore( NULL, in->unit,
- strlen( in->unit ) + (size_t) 1 );
-
-/* If an error occurred, clean up by freeing all memory allocated above. */
- if ( !astOK ) {
- out->format = astFree( out->format );
- out->label = astFree( out->label );
- out->symbol = astFree( out->symbol );
- out->unit = astFree( out->unit );
- }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for Axis objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for Axis objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstAxis *this; /* Pointer to Axis */
-
-/* Obtain a pointer to the Axis structure. */
- this = (AstAxis *) obj;
-
-/* Free all allocated memory. */
- this->format = astFree( this->format );
- this->label = astFree( this->label );
- this->symbol = astFree( this->symbol );
- this->unit = astFree( this->unit );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for Axis objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the Axis class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the Axis whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstAxis *this; /* Pointer to the Axis structure */
- char comment[ 80 ]; /* Buffer for comment string */
- const char *sval; /* Pointer to string value */
- const char *lab; /* Pointer to unit label */
- double dval; /* Double value */
- int ival; /* Integer value */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Axis structure. */
- this = (AstAxis *) this_object;
-
-/* Write out values representing the instance variables for the
- Axis class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* Label. */
-/* ------ */
- set = TestAxisLabel( this, status );
- sval = set ? GetAxisLabel( this, status ) : astGetAxisLabel( this );
- astWriteString( channel, "Label", set, 1, sval, "Axis Label" );
-
-/* Symbol. */
-/* ------- */
- set = TestAxisSymbol( this, status );
- sval = set ? GetAxisSymbol( this, status ) : astGetAxisSymbol( this );
- astWriteString( channel, "Symbol", set, 1, sval, "Axis symbol" );
-
-/* Unit. */
-/* ----- */
- set = TestAxisUnit( this, status );
- sval = set ? GetAxisUnit( this, status ) : astGetAxisUnit( this );
-
-/* Get any label associated with the unit string. */
- lab = astUnitLabel( sval );
-
-/* Construct a comment including the above label (but only if it is not
- the same as the unit string) . */
- if( lab && strcmp( lab, sval ) ) {
- (void) sprintf( comment, "Axis units (%s)", lab );
- } else {
- (void) sprintf( comment, "Axis units" );
- }
-
-/* Write out the Unit value. */
- astWriteString( channel, "Unit", set, 0, sval, comment );
-
-/* Digits. */
-/* ------- */
- set = TestAxisDigits( this, status );
- ival = set ? GetAxisDigits( this, status ) : astGetAxisDigits( this );
- astWriteInt( channel, "Digits", set, 0, ival,
- "Default formatting precision" );
-
-/* Format. */
-/* ------- */
- set = TestAxisFormat( this, status );
- sval = set ? GetAxisFormat( this, status ) : astGetAxisFormat( this );
- astWriteString( channel, "Format", set, 0, sval, "Format specifier" );
-
-/* Direction. */
-/* ---------- */
- set = TestAxisDirection( this, status );
- ival = set ? GetAxisDirection( this, status ) : astGetAxisDirection( this );
- astWriteInt( channel, "Dirn", set, 0, ival,
- ival ? "Plot in conventional direction (hint)" :
- "Plot in reverse direction (hint)" );
-/* Top. */
-/* ---- */
- set = TestAxisTop( this, status );
- dval = set ? GetAxisTop( this, status ) : astGetAxisTop( this );
- astWriteDouble( channel, "Top", set, 0, dval, "Maximum legal axis value" );
-
-/* Bottom. */
-/* ------- */
- set = TestAxisBottom( this, status );
- dval = set ? GetAxisBottom( this, status ) : astGetAxisBottom( this );
- astWriteDouble( channel, "Bottom", set, 0, dval, "Minimum legal axis value" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAAxis and astCheckAxis functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(Axis,Object)
-astMAKE_CHECK(Axis)
-
-AstAxis *astAxis_( const char *options, int *status, ...) {
-/*
-*+
-* Name:
-* astAxis
-
-* Purpose:
-* Create an Axis.
-
-* Type:
-* Public function.
-
-* Synopsis:
-* #include "axis.h"
-* AstAxis *astAxis( const char *options, int *status, ... )
-
-* Class Membership:
-* Axis constructor.
-
-* Description:
-* This function creates a new Axis and optionally initialises its
-* attributes.
-
-* Parameters:
-* options
-* Pointer to a null terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new Axis. The syntax used is the same as for the
-* astSet method and may include "printf" format specifiers identified
-* by "%" symbols in the normal way.
-* status
-* Pointer to the inherited status variable.
-* ...
-* If the "options" string contains "%" format specifiers, then an
-* optional list of arguments may follow it in order to supply values to
-* be substituted for these specifiers. The rules for supplying these
-* are identical to those for the astSet method (and for the C "printf"
-* function).
-
-* Returned Value:
-* A pointer to the new Axis.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstAxis *new; /* Pointer to new Axis */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the Axis, allocating memory and initialising the virtual
- function table as well if necessary. */
- new = astInitAxis( NULL, sizeof( AstAxis ), !class_init, &class_vtab,
- "Axis" );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new Axis'
- attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new Axis. */
- return new;
-}
-
-AstAxis *astAxisId_( const char *options, ... ) {
-/*
-* Name:
-* astAxisId_
-
-* Purpose:
-* Create an Axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "axis.h"
-* AstAxis *astAxisId_( const char *options, ... );
-
-* Class Membership:
-* Axis constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astAxis constructor function. It returns an ID value (instead of
-* a true C pointer) to external users, and must be provided
-* because astAxis_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astAxis_ directly, so it must be a re-implementation of
-* it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astAxis_.
-
-* Returned Value:
-* The ID value associated with the new Axis.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstAxis *new; /* Pointer to new Axis */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the Axis, allocating memory and initialising the virtual
- function table as well if necessary. */
- new = astInitAxis( NULL, sizeof( AstAxis ), !class_init, &class_vtab,
- "Axis" );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new Axis'
- attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new Axis. */
- return astMakeId( new );
-}
-
-AstAxis *astInitAxis_( void *mem, size_t size, int init,
- AstAxisVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitAxis
-
-* Purpose:
-* Initialise an Axis.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "axis.h"
-* AstAxis *astInitAxis( void *mem, size_t size, int init,
-* AstAxisVtab *vtab, const char *name )
-
-* Class Membership:
-* Axis initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new Axis object. It allocates memory (if necessary) to accommodate
-* the Axis plus any additional data associated with the derived class.
-* It then initialises an Axis structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for an Axis at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the Axis is to be created. This
-* must be of sufficient size to accommodate the Axis data
-* (sizeof(Axis)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the Axis (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the Axis
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the Axis's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new Axis.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astClass
-* method).
-
-* Returned Value:
-* A pointer to the new Axis.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstAxis *new; /* Pointer to new Axis */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitAxisVtab( vtab, name );
-
-/* Initialise an Object structure (the parent class) as the first component
- within the Axis structure, allocating memory if necessary. */
- new = (AstAxis *) astInitObject( mem, size, 0, (AstObjectVtab *) vtab,
- name );
-
- if ( astOK ) {
-
-/* Initialise the Axis data. */
-/* ------------------------- */
-/* Initialise all attributes to their "undefined" values. */
- new->digits = -INT_MAX;
- new->direction = -INT_MAX;
- new->format = NULL;
- new->label = NULL;
- new->symbol = NULL;
- new->unit = NULL;
- new->top = AST__BAD;
- new->bottom = AST__BAD;
-
-/* If an error occurred, clean up by deleting the new Axis. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new Axis. */
- return new;
-}
-
-AstAxis *astLoadAxis_( void *mem, size_t size,
- AstAxisVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadAxis
-
-* Purpose:
-* Load an Axis.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "axis.h"
-* AstAxis *astLoadAxis( void *mem, size_t size,
-* AstAxisVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* Axis loader.
-
-* Description:
-* This function is provided to load a new Axis using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* Axis structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a Axis at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the Axis is to be
-* loaded. This must be of sufficient size to accommodate the
-* Axis data (sizeof(Axis)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the Axis (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the Axis structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstAxis) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new Axis. If this is NULL, a pointer
-* to the (static) virtual function table for the Axis class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "Axis" is used instead.
-
-* Returned Value:
-* A pointer to the new Axis.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstAxis *new; /* Pointer to the new Axis */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this Axis. In this case the
- Axis belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstAxis );
- vtab = &class_vtab;
- name = "Axis";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitAxisVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built Axis. */
- new = astLoadObject( mem, size, (AstObjectVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "Axis" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* Label. */
-/* ------ */
-/* Note that string values do not require any additional processing. */
- new->label = astReadString( channel, "label", NULL );
-
-/* Symbol. */
-/* ------- */
- new->symbol = astReadString( channel, "symbol", NULL );
-
-/* Unit. */
-/* ----- */
- new->unit = astReadString( channel, "unit", NULL );
-
-/* Digits. */
-/* ------- */
- new->digits = astReadInt( channel, "digits", -INT_MAX );
- if ( TestAxisDigits( new, status ) ) SetAxisDigits( new, new->digits, status );
-
-/* Format. */
-/* ------- */
- new->format = astReadString( channel, "format", NULL );
-
-/* Direction. */
-/* ---------- */
- new->direction = astReadInt( channel, "dirn", -INT_MAX );
- if ( TestAxisDirection( new, status ) ) SetAxisDirection( new, new->direction, status );
-
-/* Top. */
-/* ---- */
- new->top = astReadDouble( channel, "top", AST__BAD );
- if ( TestAxisTop( new, status ) ) SetAxisTop( new, new->top, status );
-
-/* Bottom. */
-/* ---- */
- new->bottom = astReadDouble( channel, "bottom", AST__BAD );
- if ( TestAxisBottom( new, status ) ) SetAxisBottom( new, new->bottom, status );
-
-/* If an error occurred, clean up by deleting the new Axis. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new Axis pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-/* External interfaces for the attribute access functions are generated
- automatically by the macros that implement the access functions themselves.
- Hence, we need only provide external interfaces for a few additional
- functions here. */
-const char *astAxisAbbrev_( AstAxis *this, const char *fmt,
- const char *str1, const char *str2, int *status ) {
- if ( !astOK ) return str2;
- return (**astMEMBER(this,Axis,AxisAbbrev))( this, fmt, str1, str2, status );
-}
-const char *astAxisFormat_( AstAxis *this, double value, int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Axis,AxisFormat))( this, value, status );
-}
-double astAxisDistance_( AstAxis *this, double v1, double v2, int *status ) {
- if ( !astOK ) return AST__BAD;
- return (**astMEMBER(this,Axis,AxisDistance))( this, v1, v2, status );
-}
-double astAxisOffset_( AstAxis *this, double v1, double dist, int *status ) {
- if ( !astOK ) return AST__BAD;
- return (**astMEMBER(this,Axis,AxisOffset))( this, v1, dist, status );
-}
-double astAxisGap_( AstAxis *this, double gap, int *ntick, int *status ) {
- if ( !astOK ) return 0.0;
- return (**astMEMBER(this,Axis,AxisGap))( this, gap, ntick, status );
-}
-void astAxisNorm_( AstAxis *this, double *value, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Axis,AxisNorm))( this, value, status );
-}
-void astAxisOverlay_( AstAxis *template, AstAxis *result, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(template,Axis,AxisOverlay))( template, result, status );
-}
-int astAxisUnformat_( AstAxis *this, const char *string, double *value, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Axis,AxisUnformat))( this, string, value, status );
-}
-int astAxisFields_( AstAxis *this, const char *fmt, const char *str,
- int maxfld, char **fields, int *nc, double *val, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Axis,AxisFields))( this, fmt, str, maxfld, fields, nc, val, status );
-}
-int astAxisIn_( AstAxis *this, double lo, double hi, double val, int closed, int *status ){
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Axis,AxisIn))( this, lo, hi, val, closed, status );
-}
-const char *astGetAxisNormUnit_( AstAxis *this, int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Axis,GetAxisNormUnit))( this, status );
-}
-int astTestAxisNormUnit_( AstAxis *this, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Axis,TestAxisNormUnit))( this, status );
-}
-
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/axis.h b/ast-5.3-1/axis.h
deleted file mode 100644
index 2697e9b..0000000
--- a/ast-5.3-1/axis.h
+++ /dev/null
@@ -1,605 +0,0 @@
-#if !defined( AXIS_INCLUDED ) /* Include this file only once */
-#define AXIS_INCLUDED
-/*
-*+
-* Name:
-* axis.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the Axis class.
-
-* Invocation:
-* #include "axis.h"
-
-* Description:
-* This include file defines the interface to the Axis class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The Axis class implements the basic behaviour of a coordinate
-* axis, several of which may be assembled to represent a
-* coordinate system.
-
-* Inheritance:
-* The Axis class inherits from the Object class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* Bottom (double)
-* Lowest legal value for axis.
-* Digits (integer)
-* Specifies how many digits of precision are required by
-* default when a coordinate value for an Axis is formatted
-* (e.g. using the astAxisFormat method). The Digits value acts
-* as a default only and is over-ridden if a Format string is
-* specified explicitly (using the astSetAxisFormat method). The
-* default supplied by the Axis class for the Digits attribute
-* itself is 7.
-* Direction (integer)
-* Specifies how coordinate values for an Axis should be
-* displayed. By default, it has the value one, indicating that
-* they should be shown in the conventional sense
-* (i.e. increasing left to right for an abscissa and bottom to
-* top for an ordinate). If set to zero, this attribute
-* indicates that the direction should be reversed (as would
-* often be done for an astronomical magnitude or a right
-* ascension axis, for example).
-* Format (string)
-* Specifies the format to be used to display coordinate values
-* for an Axis (i.e. to convert them from binary to character
-* form). The interpretation of this string (e.g. by derived
-* classes) is left to the astAxisFormat method, but the Axis
-* class interprets this parameter as a C "printf" format string
-* which should be capable of formatting a single coordinate
-* value stored as a double (e.g. "%1.7G"). If no Format string
-* is set, the default supplied by the Axis class is based on
-* the value of the Digits attribute.
-* Label (string)
-* Specifies the label to be attached to an Axis when it is
-* represented in (e.g.) a graph. It is intended purely for
-* interpretation by human readers and not by software. The
-* default supplied by the Axis class is the string "Coordinate
-* Axis".
-* Symbol (string)
-* Specifies the symbol to be used to represent coordinate
-* values for an Axis in "short form", such as in algebraic
-* expressions where a full description of the Axis would be
-* inappropriate. Examples include "RA" and "Dec" (for Right
-* Ascension and Declination). The default supplied by the Axis
-* class is the string "x".
-* Top (double)
-* Highest legal value for axis.
-* Unit (string)
-* Describes the units used to represent coordinate values on an
-* Axis. The default supplied by the Axis class is an empty
-* string "".
-
-* Methods Over-Ridden:
-* Public:
-* None.
-
-* Protected:
-* astSetAttrib
-* Set an attribute value for an Axis.
-
-* New Methods Defined:
-* Public:
-* astAxisFormat
-* Format a coordinate value for an Axis.
-* astAxisNorm
-* Normalise an Axis coordinate value.
-* astAxisUnformat
-* Read a formatted coordinate value for an Axis.
-
-* Protected:
-* astAxisAbbrev
-* Abbreviate a formatted Axis value by skipping leading fields.
-* astAxisDistance
-* Find the distance between two axis values.
-* astAxisFields
-* Identify the fields within a formatted SkyAxis value.
-* astAxisGap
-* Find a "nice" gap for tabulating Axis values.
-* astAxisOffset
-* Add an increment onto a supplied axis value.
-* astAxisOverlay
-* Overlay the attributes of a template Axis on to another Axis.
-* astClearAxisDigits
-* Clear the Digits attribute for an Axis.
-* astClearAxisDirection
-* Clear the Direction attribute for an Axis.
-* astClearAxisFormat
-* Clear the Format attribute for an Axis.
-* astClearAxisLabel
-* Clear the Label attribute for an Axis.
-* astClearAxisSymbol
-* Clear the Symbol attribute for an Axis.
-* astClearAxisUnit
-* Clear the Unit attribute for an Axis.
-* astGetAxisDigits
-* Get the value of the Digits attribute for an Axis.
-* astGetAxisDirection
-* Get the value of the Direction attribute for an Axis.
-* astGetAxisFormat
-* Get a pointer to the Format attribute for an Axis.
-* astGetAxisLabel
-* Get a pointer to the Label attribute for an Axis.
-* astGetAxisSymbol
-* Get a pointer to the Symbol attribute for an Axis.
-* astGetAxisUnit
-* Get a pointer to the Unit attribute for an Axis.
-* astSetAxisDigits
-* Set the value of the Digits attribute for an Axis.
-* astSetAxisDirection
-* Set the value of the Direction attribute for an Axis.
-* astSetAxisFormat
-* Set the value of the Format attribute for an Axis.
-* astSetAxisLabel
-* Set the value of the Label attribute for an Axis.
-* astSetAxisSymbol
-* Set the value of the Symbol attribute for an Axis.
-* astSetAxisUnit
-* Set the value of the Unit attribute for an Axis.
-* astTestAxisDigits
-* Test whether a value has been set for the Digits attribute of an
-* Axis.
-* astTestAxisDirection
-* Test whether a value has been set for the Direction attribute of an
-* Axis.
-* astTestAxisFormat
-* Test whether a value has been set for the Format attribute of an
-* Axis.
-* astTestAxisLabel
-* Test whether a value has been set for the Label attribute of an
-* Axis.
-* astTestAxisSymbol
-* Test whether a value has been set for the Symbol attribute of an
-* Axis.
-* astTestAxisUnit
-* Test whether a value has been set for the Unit attribute of an
-* Axis.
-
-* Other Class Functions:
-* Public:
-* astAxis
-* Create an Axis.
-* astIsAAxis
-* Test class membership.
-
-* Protected:
-* astCheckAxis
-* Validate class membership.
-* astInitAxis
-* Initialise an Axis.
-* astLoadAxis
-* Load an Axis.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstAxis
-* Axis object type.
-
-* Protected:
-* AstAxisVtab
-* Axis virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: B.S. Berry (Starlink)
-
-* History:
-* 1-MAR-1996 (RFWS):
-* Original version.
-* 25-APR-1996 (RFWS):
-* Made all attribute access functions protected.
-* 10-SEP-1996 (RFWS):
-* Added I/O facilities.
-* 11-SEP-1996 (RFWS):
-* Added astAxisGap (written by DSB).
-* 25-FEB-1998 (RFWS):
-* Added astAxisUnformat.
-* 29-AUG-2001 (DSB):
-* Added AxisDistance and AxisOffset.
-* 10-OCT-2002 (DSB):
-* Added Top and Bottom.
-* 8-JAN-2003 (DSB):
-* Added protected astInitAxisVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h" /* Base Object class */
-#if defined(astCLASS) /* Protected */
-#include "channel.h"
-#endif
-
-
-/* Macros */
-/* ====== */
-#if defined(astCLASS)
-#define AST__AXIS_GETDEFAULTFORMAT_BUFF_LEN 50
-#define AST__AXIS_AXISFORMAT_BUFF_LEN 127
-#define AST__AXIS_GETAXISNORMUNIT_BUFF_LEN 127
-#define AST__AXIS_GETATTRIB_BUFF_LEN 50
-#endif
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* Axis structure. */
-/* --------------- */
-/* This structure contains all information that is unique to each
- object in the class (e.g. its instance variables). */
-typedef struct AstAxis {
-
-/* Attributes inherited from the parent class. */
- AstObject object; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- char *label; /* Pointer to label string */
- char *format; /* Pointer to format string */
- char *symbol; /* Pointer to symbol string */
- char *unit; /* Pointer to unit string */
- int digits; /* Default digits of precision */
- int direction; /* Plot in conventional direction? */
- double top; /* Highest legal axis value */
- double bottom; /* Lowest legal axis value */
-} AstAxis;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-
-typedef struct AstAxisVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstObjectVtab object_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- const char *(* AxisAbbrev)( AstAxis *, const char *, const char *, const char *, int * );
- const char *(* AxisFormat)( AstAxis *, double, int * );
- const char *(* GetAxisFormat)( AstAxis *, int * );
- const char *(* GetAxisLabel)( AstAxis *, int * );
- const char *(* GetAxisSymbol)( AstAxis *, int * );
- const char *(* GetAxisUnit)( AstAxis *, int * );
- const char *(* GetAxisNormUnit)( AstAxis *, int * );
- double (* AxisGap)( AstAxis *, double, int *, int * );
- double (* AxisDistance)( AstAxis *, double, double, int * );
- double (* AxisOffset)( AstAxis *, double, double, int * );
- int (* AxisIn)( AstAxis *, double, double, double, int, int * );
- int (* AxisFields)( AstAxis *, const char *, const char *, int, char **, int *, double *, int * );
- int (* AxisUnformat)( AstAxis *, const char *, double *, int * );
- int (* GetAxisDigits)( AstAxis *, int * );
- int (* GetAxisDirection)( AstAxis *, int * );
- int (* TestAxisDigits)( AstAxis *, int * );
- int (* TestAxisDirection)( AstAxis *, int * );
- int (* TestAxisFormat)( AstAxis *, int * );
- int (* TestAxisLabel)( AstAxis *, int * );
- int (* TestAxisSymbol)( AstAxis *, int * );
- int (* TestAxisUnit)( AstAxis *, int * );
- int (* TestAxisNormUnit)( AstAxis *, int * );
- void (* AxisNorm)( AstAxis *, double *, int * );
- void (* AxisOverlay)( AstAxis *, AstAxis *, int * );
- void (* ClearAxisDigits)( AstAxis *, int * );
- void (* ClearAxisDirection)( AstAxis *, int * );
- void (* ClearAxisFormat)( AstAxis *, int * );
- void (* ClearAxisLabel)( AstAxis *, int * );
- void (* ClearAxisSymbol)( AstAxis *, int * );
- void (* ClearAxisUnit)( AstAxis *, int * );
- void (* SetAxisDigits)( AstAxis *, int, int * );
- void (* SetAxisDirection)( AstAxis *, int, int * );
- void (* SetAxisFormat)( AstAxis *, const char *, int * );
- void (* SetAxisLabel)( AstAxis *, const char *, int * );
- void (* SetAxisSymbol)( AstAxis *, const char *, int * );
- void (* SetAxisUnit)( AstAxis *, const char *, int * );
-
- double (* GetAxisTop)( AstAxis *, int * );
- int (* TestAxisTop)( AstAxis *, int * );
- void (* ClearAxisTop)( AstAxis *, int * );
- void (* SetAxisTop)( AstAxis *, double, int * );
-
- double (* GetAxisBottom)( AstAxis *, int * );
- int (* TestAxisBottom)( AstAxis *, int * );
- void (* ClearAxisBottom)( AstAxis *, int * );
- void (* SetAxisBottom)( AstAxis *, double, int * );
-
-} AstAxisVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstAxisGlobals {
- AstAxisVtab Class_Vtab;
- int Class_Init;
- char GetDefaultFormat_Buff[ AST__AXIS_GETDEFAULTFORMAT_BUFF_LEN + 1 ];
- char AxisFormat_Buff[ AST__AXIS_AXISFORMAT_BUFF_LEN + 1 ];
- char GetAxisNormUnit_Buff[ AST__AXIS_GETAXISNORMUNIT_BUFF_LEN + 1 ];
- char GetAttrib_Buff[ AST__AXIS_GETATTRIB_BUFF_LEN + 1 ];
-} AstAxisGlobals;
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Axis) /* Check class membership */
-astPROTO_ISA(Axis) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstAxis *astAxis_( const char *, int *, ...);
-#else
-AstAxis *astAxisId_( const char *, ... )__attribute__((format(printf,1,2)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstAxis *astInitAxis_( void *, size_t, int, AstAxisVtab *, const char *, int * );
-
-/* Vtab initialiser. */
-void astInitAxisVtab_( AstAxisVtab *, const char *, int * );
-
-/* Loader. */
-AstAxis *astLoadAxis_( void *, size_t, AstAxisVtab *, const char *,
- AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitAxisGlobals_( AstAxisGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-const char *astAxisFormat_( AstAxis *, double, int * );
-int astAxisUnformat_( AstAxis *, const char *, double *, int * );
-void astAxisNorm_( AstAxis *, double *, int * );
-
-#if defined(astCLASS) /* Protected */
-const char *astAxisAbbrev_( AstAxis *, const char *, const char *, const char *, int * );
-const char *astGetAxisFormat_( AstAxis *, int * );
-const char *astGetAxisLabel_( AstAxis *, int * );
-const char *astGetAxisSymbol_( AstAxis *, int * );
-const char *astGetAxisUnit_( AstAxis *, int * );
-const char *astGetAxisNormUnit_( AstAxis *, int * );
-double astAxisGap_( AstAxis *, double, int *, int * );
-double astAxisDistance_( AstAxis *, double, double, int * );
-double astAxisOffset_( AstAxis *, double, double, int * );
-int astGetAxisDigits_( AstAxis *, int * );
-int astGetAxisDirection_( AstAxis *, int * );
-int astTestAxisDigits_( AstAxis *, int * );
-int astTestAxisDirection_( AstAxis *, int * );
-int astAxisFields_( AstAxis *, const char *, const char *, int, char **, int *, double *, int * );
-int astAxisIn_( AstAxis *, double, double, double, int, int * );
-int astTestAxisFormat_( AstAxis *, int * );
-int astTestAxisLabel_( AstAxis *, int * );
-int astTestAxisSymbol_( AstAxis *, int * );
-int astTestAxisUnit_( AstAxis *, int * );
-int astTestAxisNormUnit_( AstAxis *, int * );
-void astAxisOverlay_( AstAxis *, AstAxis *, int * );
-void astClearAxisDigits_( AstAxis *, int * );
-void astClearAxisDirection_( AstAxis *, int * );
-void astClearAxisFormat_( AstAxis *, int * );
-void astClearAxisLabel_( AstAxis *, int * );
-void astClearAxisSymbol_( AstAxis *, int * );
-void astClearAxisUnit_( AstAxis *, int * );
-void astSetAxisDigits_( AstAxis *, int, int * );
-void astSetAxisDirection_( AstAxis *, int, int * );
-void astSetAxisFormat_( AstAxis *, const char *, int * );
-void astSetAxisLabel_( AstAxis *, const char *, int * );
-void astSetAxisSymbol_( AstAxis *, const char *, int * );
-void astSetAxisUnit_( AstAxis *, const char *, int * );
-
-double astGetAxisTop_( AstAxis *, int * );
-int astTestAxisTop_( AstAxis *, int * );
-void astClearAxisTop_( AstAxis *, int * );
-void astSetAxisTop_( AstAxis *, double, int * );
-
-double astGetAxisBottom_( AstAxis *, int * );
-int astTestAxisBottom_( AstAxis *, int * );
-void astClearAxisBottom_( AstAxis *, int * );
-void astSetAxisBottom_( AstAxis *, double, int * );
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckAxis(this) astINVOKE_CHECK(Axis,this,0)
-#define astVerifyAxis(this) astINVOKE_CHECK(Axis,this,1)
-
-/* Test class membership. */
-#define astIsAAxis(this) astINVOKE_ISA(Axis,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astAxis astINVOKE(F,astAxis_)
-#else
-#define astAxis astINVOKE(F,astAxisId_)
-#endif
-
-#if defined(astCLASS) /* Protected. */
-
-/* Initialiser. */
-#define astInitAxis(mem,size,init,vtab,name) \
-astINVOKE(O,astInitAxis_(mem,size,init,vtab,name,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitAxisVtab(vtab,name) astINVOKE(V,astInitAxisVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadAxis(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadAxis_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckAxis to validate Axis pointers before
- use. This provides a contextual error report if a pointer to the
- wrong sort of object is supplied. */
-#define astAxisFormat(this,value) \
-astINVOKE(V,astAxisFormat_(astCheckAxis(this),value,STATUS_PTR))
-#define astAxisNorm(this,value) \
-astINVOKE(V,astAxisNorm_(astCheckAxis(this),value,STATUS_PTR))
-#define astAxisUnformat(this,string,value) \
-astINVOKE(V,astAxisUnformat_(astCheckAxis(this),string,value,STATUS_PTR))
-
-#if defined(astCLASS) /* Protected */
-#define astAxisAbbrev(this,fmt,str1,str2) \
-astINVOKE(V,astAxisAbbrev_(astCheckAxis(this),fmt,str1,str2,STATUS_PTR))
-#define astAxisGap(this,gap,ntick) \
-astINVOKE(V,astAxisGap_(astCheckAxis(this),gap,ntick,STATUS_PTR))
-#define astAxisFields(this,fmt,str,maxfld,fields,nc,val) \
-astINVOKE(V,astAxisFields_(astCheckAxis(this),fmt,str,maxfld,fields,nc,val,STATUS_PTR))
-#define astAxisIn(this,lo,hi,val,closed) \
-astINVOKE(V,astAxisIn_(astCheckAxis(this),lo,hi,val,closed,STATUS_PTR))
-#define astAxisDistance(this,v1,v2) \
-astINVOKE(V,astAxisDistance_(astCheckAxis(this),v1,v2,STATUS_PTR))
-#define astAxisOffset(this,v1,dist) \
-astINVOKE(V,astAxisOffset_(astCheckAxis(this),v1,dist,STATUS_PTR))
-#define astAxisOverlay(template,result) \
-astINVOKE(V,astAxisOverlay_(astCheckAxis(template),astCheckAxis(result),STATUS_PTR))
-#define astClearAxisDigits(this) \
-astINVOKE(V,astClearAxisDigits_(astCheckAxis(this),STATUS_PTR))
-#define astClearAxisDirection(this) \
-astINVOKE(V,astClearAxisDirection_(astCheckAxis(this),STATUS_PTR))
-#define astClearAxisFormat(this) \
-astINVOKE(V,astClearAxisFormat_(astCheckAxis(this),STATUS_PTR))
-#define astClearAxisLabel(this) \
-astINVOKE(V,astClearAxisLabel_(astCheckAxis(this),STATUS_PTR))
-#define astClearAxisSymbol(this) \
-astINVOKE(V,astClearAxisSymbol_(astCheckAxis(this),STATUS_PTR))
-#define astClearAxisUnit(this) \
-astINVOKE(V,astClearAxisUnit_(astCheckAxis(this),STATUS_PTR))
-#define astGetAxisDigits(this) \
-astINVOKE(V,astGetAxisDigits_(astCheckAxis(this),STATUS_PTR))
-#define astGetAxisDirection(this) \
-astINVOKE(V,astGetAxisDirection_(astCheckAxis(this),STATUS_PTR))
-#define astGetAxisFormat(this) \
-astINVOKE(V,astGetAxisFormat_(astCheckAxis(this),STATUS_PTR))
-#define astGetAxisLabel(this) \
-astINVOKE(V,astGetAxisLabel_(astCheckAxis(this),STATUS_PTR))
-#define astGetAxisSymbol(this) \
-astINVOKE(V,astGetAxisSymbol_(astCheckAxis(this),STATUS_PTR))
-#define astGetAxisUnit(this) \
-astINVOKE(V,astGetAxisUnit_(astCheckAxis(this),STATUS_PTR))
-#define astGetAxisNormUnit(this) \
-astINVOKE(V,astGetAxisNormUnit_(astCheckAxis(this),STATUS_PTR))
-#define astSetAxisDigits(this,digits) \
-astINVOKE(V,astSetAxisDigits_(astCheckAxis(this),digits,STATUS_PTR))
-#define astSetAxisDirection(this,direction) \
-astINVOKE(V,astSetAxisDirection_(astCheckAxis(this),direction,STATUS_PTR))
-#define astSetAxisFormat(this,format) \
-astINVOKE(V,astSetAxisFormat_(astCheckAxis(this),format,STATUS_PTR))
-#define astSetAxisLabel(this,label) \
-astINVOKE(V,astSetAxisLabel_(astCheckAxis(this),label,STATUS_PTR))
-#define astSetAxisSymbol(this,symbol) \
-astINVOKE(V,astSetAxisSymbol_(astCheckAxis(this),symbol,STATUS_PTR))
-#define astSetAxisUnit(this,unit) \
-astINVOKE(V,astSetAxisUnit_(astCheckAxis(this),unit,STATUS_PTR))
-#define astTestAxisDigits(this) \
-astINVOKE(V,astTestAxisDigits_(astCheckAxis(this),STATUS_PTR))
-#define astTestAxisDirection(this) \
-astINVOKE(V,astTestAxisDirection_(astCheckAxis(this),STATUS_PTR))
-#define astTestAxisFormat(this) \
-astINVOKE(V,astTestAxisFormat_(astCheckAxis(this),STATUS_PTR))
-#define astTestAxisLabel(this) \
-astINVOKE(V,astTestAxisLabel_(astCheckAxis(this),STATUS_PTR))
-#define astTestAxisSymbol(this) \
-astINVOKE(V,astTestAxisSymbol_(astCheckAxis(this),STATUS_PTR))
-#define astTestAxisUnit(this) \
-astINVOKE(V,astTestAxisUnit_(astCheckAxis(this),STATUS_PTR))
-#define astTestAxisNormUnit(this) \
-astINVOKE(V,astTestAxisNormUnit_(astCheckAxis(this),STATUS_PTR))
-
-#define astClearAxisTop(this) \
-astINVOKE(V,astClearAxisTop_(astCheckAxis(this),STATUS_PTR))
-#define astGetAxisTop(this) \
-astINVOKE(V,astGetAxisTop_(astCheckAxis(this),STATUS_PTR))
-#define astSetAxisTop(this,top) \
-astINVOKE(V,astSetAxisTop_(astCheckAxis(this),top,STATUS_PTR))
-#define astTestAxisTop(this) \
-astINVOKE(V,astTestAxisTop_(astCheckAxis(this),STATUS_PTR))
-
-#define astClearAxisBottom(this) \
-astINVOKE(V,astClearAxisBottom_(astCheckAxis(this),STATUS_PTR))
-#define astGetAxisBottom(this) \
-astINVOKE(V,astGetAxisBottom_(astCheckAxis(this),STATUS_PTR))
-#define astSetAxisBottom(this,bottom) \
-astINVOKE(V,astSetAxisBottom_(astCheckAxis(this),bottom,STATUS_PTR))
-#define astTestAxisBottom(this) \
-astINVOKE(V,astTestAxisBottom_(astCheckAxis(this),STATUS_PTR))
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/box.c b/ast-5.3-1/box.c
deleted file mode 100644
index 0bfc0fb..0000000
--- a/ast-5.3-1/box.c
+++ /dev/null
@@ -1,5202 +0,0 @@
-/*
-*class++
-* Name:
-* Box
-
-* Purpose:
-* A box region with sides parallel to the axes of a Frame.
-
-* Constructor Function:
-c astBox
-f AST_BOX
-
-* Description:
-* The Box class implements a Region which represents a box with sides
-* parallel to the axes of a Frame (i.e. an area which encloses a given
-* range of values on each axis). A Box is similar to an Interval, the
-* only real difference being that the Interval class allows some axis
-* limits to be unspecified. Note, a Box will only look like a box if
-* the Frame geometry is approximately flat. For instance, a Box centred
-* close to a pole in a SkyFrame will look more like a fan than a box
-* (the Polygon class can be used to create a box-like region close to a
-* pole).
-
-* Inheritance:
-* The Box class inherits from the Region class.
-
-* Attributes:
-* The Box class does not define any new attributes beyond
-* those which are applicable to all Regions.
-
-* Functions:
-c The Box class does not define any new functions beyond those
-f The Box class does not define any new routines beyond those
-* which are applicable to all Regions.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2008-2009 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 22-MAR-2004 (DSB):
-* Original version.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 5-JUN-2007 (DSB):
-* Improve astSimplify algorithm.
-* 6-JUN-2007 (DSB):
-* Change the iterating algorithm in MakeGrid so that it uses
-* pixel index rather than axis value. This is more robust against
-* rounding errors.
-* 9-OCT-2007 (DSB):
-* - Fix bug in RegBaseMesh that could cause incorrect meshes for 2D
-* Boxes.
-* - In RegBaseMesh, use flat geometry if all axes come from simple
-* frames or from 1-dimensional specialist frames.
-* 26-MAY-2008 (DSB):
-* Fix bug in RegBaseMesh that caused an error to be reported if
-* the Box occupies a single point.
-* 20-JAN-2009 (DSB):
-* Over-ride astRegBasePick.
-* 26-JAN-2009 (DSB):
-* Over-ride astMapMerge.
-* 12-JUL-2009 (DSB):
-* Modify Simplify so that if a Box can be split into two
-* simpler components and then joined together into a Prism, it
-* does so. This is because being able to express a Region in
-* its current Frame is more important than having the simplest
-* possible structure.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS Box
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "cmpmap.h" /* Compound Mappings */
-#include "cmpframe.h" /* Compound Frames */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "region.h" /* Coordinate regions (parent class) */
-#include "channel.h" /* I/O channels */
-#include "box.h" /* Interface definition for this class */
-#include "polygon.h" /* Interface definition for this class */
-#include "mapping.h" /* Position mappings */
-#include "unitmap.h" /* Unit Mappings */
-#include "permmap.h" /* Axis permutation Mappings */
-#include "interval.h" /* Axis interval regions */
-#include "nullregion.h" /* Empty regions */
-#include "pointlist.h" /* List of points in a Frame */
-#include "prism.h" /* Extruded regions */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstMapping *(* parent_simplify)( AstMapping *, int * );
-static void (* parent_setnegated)( AstRegion *, int, int * );
-static void (* parent_setclosed)( AstRegion *, int, int * );
-static void (* parent_clearnegated)( AstRegion *, int * );
-static void (* parent_clearclosed)( AstRegion *, int * );
-static void (* parent_setunc)( AstRegion *, AstRegion *, int * );
-static void (* parent_setregfs)( AstRegion *, AstFrame *, int * );
-static void (* parent_resetcache)( AstRegion *, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Box)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Box,Class_Init)
-#define class_vtab astGLOBAL(Box,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstBoxVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstBox *astBoxId_( void *, int, const double[], const double[], void *, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstBox *BestBox( AstFrame *, AstPointSet *, AstRegion *, int * );
-static AstMapping *Simplify( AstMapping *, int * );
-static AstPointSet *RegBaseGrid( AstRegion *, int * );
-static AstPointSet *RegBaseMesh( AstRegion *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstRegion *MergeBox( AstBox *, AstRegion *, int, int * );
-static AstRegion *RegBasePick( AstRegion *this, int, const int *, int * );
-static double *GeoCorner( AstFrame *, int, double *, double *, double *, int * );
-static double *GeoLengths( AstFrame *, int, double *, double *, double *, int * );
-static double *RegCentre( AstRegion *this, double *, double **, int, int, int * );
-static double SetShrink( AstBox *, double, int * );
-static int GetObjSize( AstObject *, int * );
-static int MakeGrid( int, double **, int, double *, double *, int, int, double, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int RegPins( AstRegion *, AstPointSet *, AstRegion *, int **, int * );
-static int RegTrace( AstRegion *, int, double *, double **, int * );
-static void BoxPoints( AstBox *, double *, double *, int *);
-static void Cache( AstBox *, int, int * );
-static void ClearClosed( AstRegion *, int * );
-static void ClearNegated( AstRegion *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void RegBaseBox( AstRegion *this, double *, double *, int * );
-static void ResetCache( AstRegion *this, int * );
-static void SetClosed( AstRegion *, int, int * );
-static void SetNegated( AstRegion *, int, int * );
-static void SetRegFS( AstRegion *, AstFrame *, int * );
-static void SetUnc( AstRegion *, AstRegion *, int * );
-
-/* Member functions. */
-/* ================= */
-
-void BoxPoints( AstBox *this, double *centre, double *corner, int *status) {
-/*
-*+
-* Name:
-* astBoxPoints
-
-* Purpose:
-* Return the defining points of a Box.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "box.h"
-* astBoxPoints( AstBox *this, double *centre, double *corner )
-
-* Class Membership:
-* Region virtual function.
-
-* Description:
-* This function returns the axis values at the points defining the
-* supplied Box.
-
-* Parameters:
-* this
-* Pointer to the Box.
-* centre
-* A pointer to an array in which to return the centre position of
-* the Box, in the base Frame of the encapsulated FrameSet.
-* corner
-* A pointer to an array in which to return the position of a corner
-* of the Box, in the base Frame of the encapsulated FrameSet.
-
-* Notes:
-* - It is assumed that the length of the supplied arrays is at least
-* equal to the number of axes in the base frame of the encapsulated
-* FrameSet.
-*-
-*/
-
-/* Local Variables: */
- AstPointSet *pset;
- double **ptr;
- int nc;
- int i;
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* Get a pointer to the PointSet holding the points defining the Box. */
- pset = ((AstRegion *) this)->points;
-
-/* Get a pointer to the PointSet's data arrays. */
- ptr = astGetPoints( pset );
-
-/* See how many axes each point in the PointSet has. */
- nc = astGetNcoord( pset );
-
-/* Copy the centre and corner positions form the PointSet into the
- supplied arrays. */
- for( i = 0; i < nc; i++ ) {
- centre[ i ] = ptr[ i ] [ 0 ];
- corner[ i ] = ptr[ i ] [ 1 ];
- }
-
-}
-
-static void ClearClosed( AstRegion *this, int *status ){
-/*
-* Name:
-* ClearClosed
-
-* Purpose:
-* Clear the Closed attribute of a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* void ClearClosed( AstRegion *this, int *status )
-
-* Class Membership:
-* Box member function (over-rides the protected astClearClosed
-* method inherited from the Region class).
-
-* Description:
-* This function clears the Closed attribute of the supplied Region.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- int old;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get the original attribute value */
- old = astGetClosed( this );
-
-/* Invoke the clear method inherited from the parent Region class */
- (*parent_clearclosed)( this, status );
-
-/* If the new value is not the same as the old value, inidcatethat we
- need to re-calculate the cached information in the Box. */
- if( astGetClosed( this ) != old ) astResetCache( this );
-}
-
-static void ClearNegated( AstRegion *this, int *status ){
-/*
-* Name:
-* ClearNegated
-
-* Purpose:
-* Clear the Negated attribute of a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* void ClearNegated( AstRegion *this, int *status )
-
-* Class Membership:
-* Box member function (over-rides the protected astClearNegated
-* method inherited from the Region class).
-
-* Description:
-* This function clears the Negated attribute of the supplied Region.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- int old;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get the original attribute value */
- old = astGetNegated( this );
-
-/* Invoke the clear method inherited from the parent Region class */
- (*parent_clearnegated)( this, status );
-
-/* If the new value is not the same as the old value, inidcatethat we
- need to re-calculate the cached information in the Box. */
- if( astGetNegated( this ) != old ) astResetCache( this );
-}
-
-static AstBox *BestBox( AstFrame *frm, AstPointSet *mesh, AstRegion *unc, int *status ){
-/*
-* Name:
-* BestBox
-
-* Purpose:
-* Find the best fitting Box through a given mesh of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* AstBox *BestBox( AstFrame *frm, AstPointSet *mesh, AstRegion *unc, int *status )
-
-* Class Membership:
-* Box member function
-
-* Description:
-* This function finds the best fitting Box through a given mesh of points.
-
-* Parameters:
-* frm
-* Defines the geometry of the axes.
-* mesh
-* Pointer to a PointSet holding the mesh of points. They are
-* assumed to be in the Frame represented by "unc".
-* unc
-* A Region representing the uncertainty associated with each point
-* on the mesh.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the best fitting Region. It will inherit the positional
-* uncertainty and Frame represented by "unc".
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-
-*/
-
-/* Local Variables: */
- AstBox *result;
- double **ptr;
- double *axval;
- double *blbnd;
- double *bubnd;
- double *lbnd;
- double *p;
- double *ubnd;
- double eps;
- double lb;
- double lim2;
- double lim;
- double liml;
- double limu;
- double mxl;
- double mxu;
- double org;
- double sxl2;
- double sxl;
- double sxu2;
- double sxu;
- double ub;
- double p0;
- double d;
- double dinc;
- int ic;
- int ip;
- int nc;
- int np;
- int nxl;
- int nxu;
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get no. of points in the mesh, and the number of axis values per point. */
- np = astGetNpoint( mesh );
- nc = astGetNcoord( mesh );
-
-/* Get pointers to the axis values. */
- ptr = astGetPoints( mesh );
-
-/* Allocate work space. */
- lbnd = astMalloc( sizeof( double )*(size_t) nc );
- ubnd = astMalloc( sizeof( double )*(size_t) nc );
-
- blbnd = astMalloc( sizeof( double )*(size_t) nc );
- bubnd = astMalloc( sizeof( double )*(size_t) nc );
-
- axval = astMalloc( sizeof( double )*(size_t) np );
-
-/* Check pointers can be used safely */
- if( axval ) {
-
-/* Get the bounding box of the uncertainty region. */
- astGetRegionBounds( unc, lbnd, ubnd );
-
-/* We fit the box one axis at a time. */
- for( ic = 0; ic < nc; ic++ ) {
-
-/* Find the upper and lower limits of the supplied mesh on this axis. */
- org = ptr[ ic ][ 0 ];
- lb = 0.0;
- ub = 0.0;
- p = ptr[ ic ] + 1;
- p0 = org;
- d = 0.0;
- axval[ 0 ] = org;
- for( ip = 1; ip < np; ip++, p++ ) {
- dinc = astAxDistance( frm, ic + 1, p0, *p );
- if( dinc != AST__BAD ) {
- d += dinc;
- if( d < lb ) lb = d;
- if( d > ub ) ub = d;
- }
- axval[ ip ] = org + d;
- p0 = *p;
- }
-
-/* Now convert these relative offsets to actual axis values. */
- lb += org;
- ub += org;
-
-/* Now scan the list of axis values again, looking for values which are
- "close to" either lower or upper bound. These will be the points which
- are on the faces of the box which are orthogonal to the current axis. Here
- "close to" means within 20 times the uncertainty associated with this
- axis, or one tenth of the box size (which ever is smaller). We find the
- mean and standard deviation of such "close" values, and then do a
- single sigma-clipping iteration (at 3-sigma) to get rid of any values
- which are on one of the other faces of the box. */
-
- lim = 20*( ubnd[ ic ] - lbnd[ ic ] );
- lim2 = 0.1*( ub - lb );
- if( lim2 < lim ) lim = lim2;
-
- sxl = 0.0;
- sxl2 = 0.0;
- nxl = 0;
- sxu = 0.0;
- sxu2 = 0.0;
- nxu = 0;
-
- p = axval;
- for( ip = 0; ip < np; ip++, p++ ) {
- if( *p != AST__BAD ) {
- if( fabs( *p - lb ) <= lim ) {
- sxl += *p;
- sxl2 += (*p)*(*p);
- nxl++;
- } else if( fabs( *p - ub ) <= lim ) {
- sxu += *p;
- sxu2 += (*p)*(*p);
- nxu++;
- }
- }
- }
-
- if( nxl > 0 ) {
- mxl = sxl/nxl;
- liml = sxl2/nxl - mxl*mxl;
- eps = 100*mxl*DBL_EPSILON;
- if( liml < eps*eps ) {
- liml = eps;
- } else {
- liml = 3.0*sqrt( liml );
- }
- } else {
- mxl = lb;
- liml = 0.0;
- }
-
- if( nxu > 0 ) {
- mxu = sxu/nxu;
- limu = sxu2/nxu - mxu*mxu;
- eps = 100*mxu*DBL_EPSILON;
- if( limu < eps*eps ) {
- limu = eps;
- } else {
- limu = 3.0*sqrt( limu );
- }
-
- } else {
- mxu = ub;
- limu = 0.0;
- }
-
- sxl = 0.0;
- nxl = 0;
- sxu = 0.0;
- nxu = 0;
-
- p = axval;
- for( ip = 0; ip < np; ip++, p++ ) {
- if( *p != AST__BAD ) {
- if( fabs( *p - mxl ) <= liml ) {
- sxl += *p;
- nxl++;
- } else if( fabs( *p - mxu ) <= limu ) {
- sxu += *p;
- nxu++;
- }
- }
- }
-
- if( nxl > 0 ) {
- mxl = sxl/nxl;
- } else {
- mxl = lb;
- }
-
- if( nxu > 0 ) {
- mxu = sxu/nxu;
- } else {
- mxu = ub;
- }
-
-/* The resulting mean axis values are the bounds of the required box on
- the current axis.*/
- blbnd[ ic ] = mxl;
- bubnd[ ic ] = mxu;
- }
-
-/* Create the returned Box. */
- result = astBox( unc, 1, blbnd, bubnd, unc, "", status );
- }
-
-/* Free resources */
- lbnd = astFree( lbnd );
- ubnd = astFree( ubnd );
- blbnd = astFree( blbnd );
- bubnd = astFree( bubnd );
- axval = astFree( axval );
-
-/* Return NULL if anything went wrong. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result.*/
- return result;
-}
-
-static void Cache( AstBox *this, int lohi, int *status ){
-/*
-* Name:
-* Cache
-
-* Purpose:
-* Calculate intermediate values and cache them in the Box structure.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* void Cache( AstRegion *this, int lohi, int *status )
-
-* Class Membership:
-* Box member function
-
-* Description:
-* This function uses the PointSet stored in the parent Region to calculate
-* some intermediate values which are useful in other methods. These
-* values are stored within the Box structure.
-
-* Parameters:
-* this
-* Pointer to the Box.
-* lohi
-* Are the lo and hi arrays to be used?
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstFrame *frm;
- AstPointSet *pset;
- AstRegion *unc;
- double **ptr;
- double *centre;
- double *extent;
- double *hi;
- double *lbnd_unc;
- double *geolen;
- double *lo;
- double *shextent;
- double *ubnd_unc;
- double wid;
- int i;
- int nc;
-
-/* Check the global error status. Also return if the currently cached
- information is usable. */
- if ( !astOK || !this->stale ) return;
-
-/* Get the number of base Frame axes. */
- nc = astGetNin( ((AstRegion *)this)->frameset );
-
-/* Allocate memory to store the half-width of the box on each axis. */
- extent = (double *) astMalloc( sizeof( double )*(size_t) nc );
-
-/* Allocate memory to store the half-width of the box on each axis,
- taking account of the current shrink factor stored in this->shrink. */
- shextent = (double *) astMalloc( sizeof( double )*(size_t) nc );
-
-/* Allocate memory to store the centre of the box on each axis. */
- centre = (double *) astMalloc( sizeof( double )*(size_t) nc );
-
-/* Allocate memory to store the high and low bounds taking account of the
- shrink factor. */
- hi = (double *) astMalloc( sizeof( double )*(size_t) nc );
- lo = (double *) astMalloc( sizeof( double )*(size_t) nc );
-
-/* Memory to store the uncertainty bounding box */
- lbnd_unc = astMalloc( sizeof( double)*(size_t) nc );
- ubnd_unc = astMalloc( sizeof( double)*(size_t) nc );
-
-/* Memory to store the geodesic half-dimensions of the box. */
- geolen = astMalloc( sizeof( double)*(size_t) nc );
-
-/* Get pointers to the coordinate data in the parent Region structure. */
- pset = ((AstRegion *) this)->points;
- ptr = astGetPoints( pset );
-
-/* Check pointers can be used safely. */
- if( ptr ) {
-
-/* Store the centre and corner axis values. */
- for( i = 0; i < nc; i++ ) {
- centre[ i ] = ptr[ i ][ 0 ];
- hi[ i ] = ptr[ i ][ 1 ];
- }
-
-/* Calculate the geodesic half-dimensions of the box. */
- frm = astGetFrame( ((AstRegion *) this)->frameset, AST__BASE );
- GeoLengths( frm, nc, centre, hi, geolen, status );
- frm = astAnnul( frm );
-
-/* Calculate the half-width and store in the above array. Also store the
- shrunk half-widths, and the shrunk lower and upper bounds. */
- for( i = 0; i < nc; i++ ) {
- extent[ i ] = fabs( ptr[ i ][ 1 ] - centre[ i ] );
- shextent[ i ] = extent[ i ]*this->shrink;
- lo[ i ] = centre[ i ] - shextent[ i ];
- hi[ i ] = centre[ i ] + shextent[ i ];
- }
-
-/* Store the pointers to these arrays in the Box structure, and indicate
- the information is usable. */
- if( astOK ) {
- astFree( this->extent );
- astFree( this->centre );
- astFree( this->shextent );
- astFree( this->lo );
- astFree( this->hi );
- astFree( this->geolen );
- this->extent = extent;
- this->centre = centre;
- this->shextent = shextent;
- this->lo = lo;
- this->hi = hi;
- this->geolen = geolen;
- this->stale = 0;
- extent = NULL;
- centre = NULL;
- shextent = NULL;
- lo = NULL;
- hi = NULL;
- geolen = NULL;
- }
-
-/* If lo and hi values are to be used, ensure they are expanded to at
- least the width of an uncertainty box. */
- if( lohi ) {
-
-/* If we are dealing with an unnegated closed Box or a negated open
- Box, ensure that the box does not have zero width on any axis. We do
- this by ensuring that the shrunk extent on all axes is at least half the
- width of the bounding box of the uncertainty Region. */
- if( astGetNegated( this ) != astGetClosed( this ) ) {
-
-/* Get the bounding box of the uncertainty Region in the base Frame of
- the supplied Box. */
- unc = astGetUncFrm( this, AST__BASE );
- astGetRegionBounds( unc, lbnd_unc, ubnd_unc );
-
-/* Ensure the shrunk extents are at least half the width of the uncertainty
- bounding box. */
- for ( i = 0; i < nc; i++ ) {
- wid = 0.5*( ubnd_unc[ i ] - lbnd_unc[ i ] );
- if( this->shextent[ i ] < wid ) {
- this->shextent[ i ] = wid;
- this->lo[ i ] = this->centre[ i ] - wid;
- this->hi[ i ] = this->centre[ i ] + wid;
- }
- }
-
-/* Free resources. */
- unc = astAnnul( unc );
- }
- }
- }
-
-/* Annul the memory allocated above if an error occurred. */
- if( !astOK ) {
- extent = astFree( extent );
- centre = astFree( centre );
- shextent = astFree( shextent );
- lo = astFree( lo );
- hi = astFree( hi );
- }
-
-/* Free other resources */
- lbnd_unc = astFree( lbnd_unc );
- ubnd_unc = astFree( ubnd_unc );
-
-}
-
-static double *GeoCorner( AstFrame *frm, int nc, double *centre,
- double *geolen, double *corner, int *status ){
-/*
-* Name:
-* GeoCorner
-
-* Purpose:
-* Find the corner position implied by the supplied centre position
-* and geodesic box dimensions.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* double *GeoCorner( AstFrame *frm, int nc, double *centre,
-* double *geolen, double *corner, int *status )
-
-* Class Membership:
-* Box member function
-
-* Description:
-* This function returns the corner position that is implied by the
-* supplied centre position and geodesic box dimensions. The returned
-* corner position is found by offsetting away from the supplied
-* centre position along each axis in turn, by the geodesic distance
-* specified in "geolen".
-
-* Parameters:
-* frm
-* Defines the geometry of the axes.
-* nc
-* The number of Frame axes.
-* centre
-* Pointer to an array holding the box centre axis values.
-* geolen
-* Pointer to an array holding the geodesic distance corresponding
-* to each half axis of the box.
-* corner
-* Pointer to an array in which to store the axis values at the
-* returned corner position. If this is NULL a new array is
-* allocated and a pointer to it returned as the function value.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the array holding the corner axis values. If a non-NULL
-* value is supplied for parameter "corner", then the same value will
-* be returned as the function value. Otherwise, the returned value
-* will be a pointer to a newly allocated array that should be freed
-* using astFree when no longer needed.
-
-*/
-
-/* Local Variables: */
- double *p1;
- double *p2;
- double *p3;
- double *pt;
- double *result;
- double *work1;
- double *work2;
- double off;
- double off0;
- int i;
-
-/* Initialise */
- result = corner;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Ensure we have a results array. */
- if( ! result ) result = astMalloc( sizeof( double )*nc );
-
-/* Also allocate two work arrays to hold a single position. */
- work1 = astMalloc( sizeof( double )*nc );
- work2 = astMalloc( sizeof( double )*nc );
-
-/* Check the pointers can be used safely. */
- if( astOK ) {
-
-/* Select which array to use as the initial results array so that the
- final results end up in the returned array. */
- if( ( nc % 2 ) == 0 ) {
- p1 = result;
- p2 = work1;
- p3 = work2;
- } else {
- p1 = work2;
- p2 = work1;
- p3 = result;
- }
-
-/* Initialise the current corner position to be at the centre of the box. */
- for( i = 0; i < nc; i++ ) p1[ i ] = centre[ i ];
-
-/* Loop round offsetting along each side of the box. */
- for( i = 0; i < nc; i++ ) {
-
-/* In the p2 array put the axis values at a point which is offset
- slightly along the current axis away from the current "corner"
- position (p1). */
- memcpy( p2, p1, sizeof( double )*nc );
-
- if( geolen[ i ] != 0.0 ) {
- off = 0.0001*fabs( geolen[ i ] );
- } else {
- off = 1.0E-6;
- }
-
- off0 = fabs( 1.0E-10*centre[ i ] );
- if( off < off0 ) off = off0;
- p2[ i ] += off;
-
-/* Offset away from the current corner position (p1) towards the position
- found above (p2), moving by the geodesic distance supplied for this axis.
- Put the resulting axis values in p3. */
- astOffset( frm, p1, p2, geolen[ i ], p3 );
-
-/* Swap the p3 and p1 arrays so that the offset position found above (p3)
- becomes the starting position (p1) for the next offset. */
- pt = p1;
- p1 = p3;
- p3 = pt;
- }
- }
-
-/* Free resources */
- work1 = astFree( work1 );
- work2 = astFree( work2 );
-
-/* Return the result */
- return result;
-}
-
-static double *GeoLengths( AstFrame *frm, int nc, double *centre,
- double *corner, double *geolen, int *status ){
-/*
-* Name:
-* GeoLengths
-
-* Purpose:
-* Find the geodesic dimensions of a box.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* double *GeoLengths( AstFrame *frm, int nc, double *centre,
-* double *corner, double *geolen, int *status )
-
-* Class Membership:
-* Box member function
-
-* Description:
-* This function returns half the geodesic distance along each edge of
-* the supplied box.
-
-* Parameters:
-* frm
-* Defines the geometry of the axes.
-* nc
-* The number of Frame axes.
-* centre
-* Pointer to an array holding rhe box centre axis values.
-* corner
-* Pointer to an array holding the axis values at the corner
-* position.
-* geolen
-* Pointer to an array in which to return the geodesic distances
-* corresponding to each half axis of the box. If this is NULL a
-* new array is allocated and a pointer to it returned as the
-* function value.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the array holding the geodesic half-dimensions of the box.
-* If a non-NULL value is supplied for parameter "corner", then the same
-* value will be returned as the function value. Otherwise, the
-* returned value will be a pointer to a newly allocated array that
-* should be freed using astFree when no longer needed.
-
-*/
-
-/* Local Variables: */
- double *result;
- double *p1;
- double *p2;
- int i;
-
-/* Initialise */
- result = geolen;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Ensure we have a results array. */
- if( ! result ) result = astMalloc( sizeof( double )*nc );
-
-/* Also allocate two work arrays to hold a single position. */
- p1 = astMalloc( sizeof( double )*nc );
- p2 = astMalloc( sizeof( double )*nc );
-
-/* Check the pointers can be used safely. */
- if( astOK ) {
-
-/* Initialise the coords as the start and end of the line. */
- memcpy( p1, centre, sizeof( double )*nc );
- memcpy( p2, centre, sizeof( double )*nc );
-
-/* Loop round finding the geodesic half-length of each side of the box. */
- for( i = 0; i < nc; i++ ) {
-
-/* The end of the line is the same as the start of the line, except that
- it has the corner value for the current axis. */
- p2[ i ] = corner[ i ];
-
-/* Find and return the geodesic distance along the line (i.e. from p1 to
- p2). */
- result[ i ] = astDistance( frm, p1, p2 );
-
-/* The start of the next line wil lbe at the end of the current line. */
- p1[ i ] = corner[ i ];
- }
- }
-
-/* Free resources */
- p1 = astFree( p1 );
- p2 = astFree( p2 );
-
-/* Return the result */
- return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* Box member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied Box,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the Box.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstBox *this; /* Pointer to Box structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the Box structure. */
- this = (AstBox *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
-
- result += astTSizeOf( this->extent );
- result += astTSizeOf( this->shextent );
- result += astTSizeOf( this->centre );
- result += astTSizeOf( this->lo );
- result += astTSizeOf( this->hi );
- result += astTSizeOf( this->geolen );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-void astInitBoxVtab_( AstBoxVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitBoxVtab
-
-* Purpose:
-* Initialise a virtual function table for a Box.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "box.h"
-* void astInitBoxVtab( AstBoxVtab *vtab, const char *name )
-
-* Class Membership:
-* Box vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the Box class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
- AstRegionVtab *region; /* Pointer to Region component of Vtab */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitRegionVtab( (AstRegionVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsABox) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstRegionVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
- vtab->BoxPoints = BoxPoints;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
- region = (AstRegionVtab *) vtab;
-
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
- parent_simplify = mapping->Simplify;
- mapping->Simplify = Simplify;
-
- parent_setnegated = region->SetNegated;
- region->SetNegated = SetNegated;
-
- parent_setunc = region->SetUnc;
- region->SetUnc = SetUnc;
-
- parent_setclosed = region->SetClosed;
- region->SetClosed = SetClosed;
-
- parent_clearnegated = region->ClearNegated;
- region->ClearNegated = ClearNegated;
-
- parent_clearclosed = region->ClearClosed;
- region->ClearClosed = ClearClosed;
-
- parent_setregfs = region->SetRegFS;
- region->SetRegFS = SetRegFS;
-
- parent_resetcache = region->ResetCache;
- region->ResetCache = ResetCache;
-
- mapping->MapMerge = MapMerge;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- region->RegBaseGrid = RegBaseGrid;
- region->RegBaseMesh = RegBaseMesh;
- region->RegBasePick = RegBasePick;
- region->RegBaseBox = RegBaseBox;
- region->RegPins = RegPins;
- region->RegTrace = RegTrace;
- region->RegCentre = RegCentre;
-
-/* Declare the copy constructor, destructor and class dump
- functions. */
- astSetDelete( vtab, Delete );
- astSetCopy( vtab, Copy );
- astSetDump( vtab, Dump, "Box", "Axis intervals" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static int MakeGrid( int naxes, double **ptr, int ip, double *lbnd,
- double *ubnd, int np_axis, int iaxis, double axval, int *status ){
-/*
-* Name:
-* MakeGrid
-
-* Purpose:
-* Create a grid covering the entire volume of a specified box.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* int MakeGrid( int naxes, double **ptr, int ip, double *lbnd,
-* double *ubnd, int np_axis, int iaxis, double axval, int *status )
-
-* Class Membership:
-* Box member function
-
-* Description:
-* This function creates an evenly sampled grid covering a given
-* volume of n-D space, putting the coordinates at the sample points
-* into a supplied array and returning the number of samples added.
-* The volume is assumed to have a constant value on a specified axis.
-
-* Parameters:
-* naxes
-* The number of axes.
-* ptr
-* Pointer to an array with "naxes" elements. Each element is a
-* pointer to an array in which to store the values for the axis.
-* ip
-* The index of the first point to be added to the "ptr" arrays.
-* lbnd
-* Pointer to an array containing the lower axis bounds of the
-* volume to be sampled.
-* ubnd
-* Pointer to an array containing the upper axis bounds of the
-* volume to be sampled.
-* np_axis
-* The number of samples along each axis (except the axis specified
-* by "iaxis"). The first sample (sample 0) for each axis will be at
-* the lower bound given in "lbnd" and the last sample (sample
-* "np_axis-1") will be at the upper bound given in "ubnd".
-* iaxis
-* The index of an axis which has constant value in the volume.
-* The values in "lbnd" and "ubnd" are ignored for this axis and all
-* sample positions will have the axis value given by "axval".
-* axval
-* The constant value for the axis with index "iaxis".
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The number of points added to the "ptr" arrays.
-
-*/
-
-/* Local Variables: */
- double *step; /* Pointer to array holding axis step sizes */
- int *maxi; /* Pointer to array of maximum index values */
- int *pi; /* Pointer to array holding current sample indices */
- int i; /* Axis index */
- int ipp; /* Index of next point */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Allocate memory to hold the max indices on each axis. */
- maxi = astMalloc( sizeof( int )*(size_t) naxes );
-
-/* Allocate memory to hold the indices of the current position.*/
- pi = astMalloc( sizeof( int )*(size_t) naxes );
-
-/* Allocate memory to hold the step size for each axis. */
- step = astMalloc( sizeof( double )*(size_t) naxes );
- if( astOK ) {
-
-/* For every axis, set up the step size, initialise the current position to
- the lower bound, and store a modified upper limit which includes some
- safety marging to allow for rounding errors. */
- for( i = 0; i < naxes; i++ ) {
- step[ i ] = ( ubnd[ i ] - lbnd[ i ] )/(np_axis-1);
- pi[ i ] = 0;
- maxi[ i ] = np_axis - 1;
- }
- maxi[ iaxis ] = 0;
- step[ iaxis ] = 0.0;
- pi[ iaxis ] = 0;
-
-/* Initialise the index of the next position to store. */
- ipp = ip;
-
-/* Loop round adding points to the array until the whole volume has been
- done. */
- i = 0;
- while( i < naxes ) {
-
-/* Add the current point to the supplied array,and increment the index of
- the next point to add. */
- for( i = 0; i < naxes; i++ ) {
- if( i == iaxis ) {
- ptr[ i ][ ipp ] = axval;
- } else {
- ptr[ i ][ ipp ] = lbnd[ i ] + pi[ i ]*step[ i ];
- }
- }
- ipp++;
-
-/* We now move the current position on to the next sample */
- i = 0;
- while( i < naxes ) {
- pi[ i ]++;
- if( pi[ i ] > maxi[ i ] ) {
- pi[ i ] = 0;
- i++;
- } else {
- break;
- }
- }
- }
- } else {
- ipp = ip;
- }
-
-/* Free resources. */
- maxi = astFree( maxi );
- pi = astFree( pi );
- step = astFree( step );
-
-/* Return the result. */
- return astOK ? ( ipp - ip ): 0 ;
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a Box.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* Box method (over-rides the protected astMapMerge method
-* inherited from the Region class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated Box in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated Box with a Mapping which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated Box which is to be merged with
-* its neighbours. This should be a cloned copy of the Box
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* Box it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated Box resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstBox *oldbox; /* Pointer to supplied Box */
- AstMapping *map; /* Pointer to adjacent Mapping */
- AstMapping *new; /* Simplified or merged Region */
- int i1; /* Index of first Mapping merged */
- int i; /* Loop counter */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = -1;
- i1 = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the Box. */
- oldbox = (AstBox *) this;
-
-/* First of all, see if the Box can be replaced by a simpler Region,
- without reference to the neighbouring Regions in the list. */
-/* =====================================================================*/
-
-/* Try to simplify the box. If the pointer value has changed, we assume
- some simplification took place. */
- new = astSimplify( oldbox );
- if( new != (AstMapping *) oldbox ) {
-
-/* Annul the Box pointer in the list and replace it with the new Region
- pointer, and indicate that the forward transformation of the returned
- Region should be used (not really needed but keeps things clean). */
- (void) astAnnul( ( *map_list )[ where ] );
- ( *map_list )[ where ] = new;
- ( *invert_list )[ where ] = 0;
-
-/* Return the index of the first modified element. */
- result = where;
-
-/* If the Box itself could not be simplified, see if it can be merged
- with the Regions on either side of it in the list. We can only merge
- in parallel. */
-/* =====================================================================*/
- } else if( ! series ){
- new = astAnnul( new );
-
-/* Attempt to merge the Box with its lower neighbour (if any). */
- if( where > 0 ) {
- i1 = where - 1;
- map = ( *map_list )[ where - 1 ];
- if( astIsARegion( map ) ) {
- new = (AstMapping *) MergeBox( oldbox, (AstRegion *) map, 0,
- status );
- }
- }
-
-/* If this did not produced a merged Region, attempt to merge the Box with its
- upper neighbour (if any). */
- if( !new && where < *nmap - 1 ) {
- i1 = where;
- map = ( *map_list )[ where + 1 ];
- if( astIsARegion( map ) ) {
- new = (AstMapping *) MergeBox( oldbox, (AstRegion *) map, 1,
- status );
- }
- }
-
-/* If succesfull... */
- if( new ){
-
-/* Annul the first of the two Mappings, and replace it with the merged
- Region. Also clear the invert flag. */
- (void) astAnnul( ( *map_list )[ i1 ] );
- ( *map_list )[ i1 ] = new;
- ( *invert_list )[ i1 ] = 0;
-
-/* Annul the second of the two Mappings, and shuffle down the rest of the
- list to fill the gap. */
- (void) astAnnul( ( *map_list )[ i1 + 1 ] );
- for ( i = i1 + 2; i < *nmap; i++ ) {
- ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
- ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
- }
-
-/* Clear the vacated element at the end. */
- ( *map_list )[ *nmap - 1 ] = NULL;
- ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
- modified element. */
- ( *nmap )--;
- result = i1;
- }
-
- } else {
- new = astAnnul( new );
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstRegion *MergeBox( AstBox *this, AstRegion *reg, int boxfirst,
- int *status ) {
-/*
-* Name:
-* MergeBox
-
-* Purpose:
-* Attempt to merge a Box with another Region to form a Region of higher
-* dimensionality.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* AstRegion *MergeBox( AstBox *this, AstRegion *reg, int boxfirst, int *status )
-
-* Class Membership:
-* Box member function.
-
-* Description:
-* This function attempts to combine the supplied Regions together
-* into a Region of higher dimensionality.
-
-* Parameters:
-* this
-* Pointer to a Box.
-* reg
-* Pointer to another Region.
-* boxfirst
-* If non-zero, then the Box axes are put first in the new Region.
-* Otherwise, the other Region's axes are put first.
-* status
-* Pointer to the inherited status value.
-
-* Returned Value:
-* A pointer to a new region, or NULL if the supplied Regions could
-* not be merged.
-*/
-
-/* Local Variables: */
- AstFrame *bfrm; /* Pointer to base Frame for "result" */
- AstFrame *cfrm; /* Pointer to current Frame for "result" */
- AstFrame *frm_reg; /* Pointer to Frame from "reg" */
- AstFrame *frm_this; /* Pointer to Frame from "this" */
- AstMapping *bcmap; /* Base->current Mapping for "result" */
- AstMapping *map_reg; /* Base->current Mapping from "reg" */
- AstMapping *map_this; /* Base->current Mapping from "this" */
- AstMapping *sbunc; /* Simplified uncertainty */
- AstPointSet *pset_new; /* PointSet holding PointList axis values for new */
- AstPointSet *pset_reg; /* PointSet holding PointList axis values for reg */
- AstRegion *bunc; /* Base Frame uncertainty Region */
- AstRegion *new; /* Pointer to new Interval in base Frame */
- AstRegion *result; /* Pointer to returned Interval in current Frame */
- AstRegion *unc_reg; /* Current Frame uncertainty Region from "reg" */
- AstRegion *unc_this; /* Current Frame uncertainty Region from "this" */
- double **ptr_new; /* Pointers to arrays holding new axis values */
- double **ptr_reg; /* Pointers to arrays holding reg axis values */
- double *centre; /* Array to hold box centre axis values */
- double *corner; /* Array to hold box corner axis values */
- double *lbnd; /* Array to hold lower axis bounds */
- double *p; /* Pointer to next input value */
- double *q; /* Pointer to next output value */
- double *ubnd; /* Array to hold upper axis bounds */
- double fac_reg; /* Ratio of used to default MeshSize for "reg" */
- double fac_this; /* Ratio of used to default MeshSize for "this" */
- double temp; /* Temporary storage */
- int i; /* Loop count */
- int j; /* Loop count */
- int msz_reg; /* Original MeshSize for "reg" */
- int msz_reg_set; /* Was MeshSize originally set for "reg"? */
- int msz_this; /* Original MeshSize for "this" */
- int msz_this_set; /* Was MeshSize originally set for "this"? */
- int nax; /* Number of axes in "result" */
- int nax_reg; /* Number of axes in "reg" */
- int nax_this; /* Number of axes in "this" */
- int neg_reg; /* Negated attribute value for other supplied Region */
- int neg_this; /* Negated attribute value for supplied Box */
- int npnt; /* Number of points in PointList */
- int ok; /* Can supplied Regions be merged? */
-
-/* Initialise */
- result = NULL;
-
-/* Check the local error status. */
- if ( !astOK ) return result;
-
-/* Get the Closed attributes of the two Regions. They must be the same in
- each Region if we are to merge the Regions. In addition, in order to
- merge, either both Regions must have a defined uncertainty, or neither
- Region must have a defined Uncertainty. */
- if( astGetClosed( this ) == astGetClosed( reg ) &&
- astTestUnc( this ) == astTestUnc( reg ) ) {
-
-/* Get the Nagated attributes of the two Regions. */
- neg_this = astGetNegated( this );
- neg_reg = astGetNegated( reg );
-
-/* Get the number of axes in the two supplied Regions. */
- nax_reg = astGetNaxes( reg );
- nax_this = astGetNaxes( this );
-
-/* If the Regions can be combined, get the number of axes the
- combination will have. */
- nax = nax_reg + nax_this;
-
-/* Get the base Frames from the two Region FrameSets, and combine them
- into a single CmpFrame that will be used to create any new Region. */
- frm_this = astGetFrame( ((AstRegion *) this)->frameset, AST__BASE );
- frm_reg = astGetFrame( reg->frameset, AST__BASE );
-
- if( boxfirst ) {
- bfrm = (AstFrame *) astCmpFrame( frm_this, frm_reg, "", status );
- } else {
- bfrm = (AstFrame *) astCmpFrame( frm_reg, frm_this, "", status );
- }
-
- frm_this = astAnnul( frm_this );
- frm_reg = astAnnul( frm_reg );
-
-/* Indicate we do not yet have a merged Region. */
- new = NULL;
-
-/* First attempt to merge with another Box. The result will be a Box. Both
- Boxes must be un-negated. */
- if( astIsABox( reg ) && !neg_this && !neg_reg ) {
-
-/* Allocate memory to store the centre and corner of the returned Box. */
- centre = astMalloc( sizeof( double )*(size_t) nax );
- corner = astMalloc( sizeof( double )*(size_t) nax );
-
-/* Copy the centres and corners from the supplied Boxes into the above
- arrays, in the requested order. */
- if( boxfirst ) {
- astBoxPoints( this, centre, corner );
- astBoxPoints( reg, centre + nax_this, corner + nax_this );
- } else {
- astBoxPoints( reg, centre, corner );
- astBoxPoints( this, centre + nax_reg, corner + nax_reg );
- }
-
-/* Create the new Box, initially with no uncertainty. */
- new = (AstRegion *) astBox( bfrm, 0, centre, corner, NULL, "",
- status );
-
-/* Free resources .*/
- centre = astFree( centre );
- corner = astFree( corner );
-
-/* Now attempt to merge with an Interval. The result will be an Interval.
- Both Intervals must be un-negated. */
- } else if( astIsAInterval( reg ) && !neg_this && !neg_reg ) {
-
-/* Allocate memory to store the bounds of the returned Interval. */
- lbnd = astMalloc( sizeof( double )*(size_t) nax );
- ubnd = astMalloc( sizeof( double )*(size_t) nax );
-
-/* Copy the centre and corner from the supplied Box into the required part
- of the above arrays. */
- if( boxfirst ) {
- centre = lbnd;
- corner = ubnd;
- } else {
- centre = lbnd + nax_reg;
- corner = ubnd + nax_reg;
- }
- astBoxPoints( this, centre, corner );
-
-/* Convert these centre and corner positions into upper and lower bounds. */
- if( astOK ) {
- for( i = 0; i < nax_this; i++ ) {
- centre[ i ] = 2*centre[ i ] - corner[ i ];
- if( centre[ i ] > corner[ i ] ) {
- temp = centre[ i ];
- centre[ i ] = corner[ i ];
- corner[ i ] = temp;
- }
- }
- }
-
-/* Get the bounds from the interval and add them into the above arrays. */
- if( boxfirst ) {
- astIntervalPoints( reg, lbnd + nax_this, ubnd + nax_this );
- } else {
- astIntervalPoints( reg, lbnd, ubnd );
- }
-
-/* Create the new Interval, initially with no uncertainty. */
- new = (AstRegion *) astInterval( bfrm, lbnd, ubnd, NULL, "",
- status );
-
-/* Free resources .*/
- lbnd = astFree( lbnd );
- ubnd = astFree( ubnd );
-
-/* Now attempt to merge with a NullRegion. The result will be an
- Interval. The NullRegion must be negated and the Box must not. */
- } else if( astIsANullRegion( reg ) && !neg_this && neg_reg ) {
-
-/* Allocate memory to store the bounds of the returned Interval. */
- lbnd = astMalloc( sizeof( double )*(size_t) nax );
- ubnd = astMalloc( sizeof( double )*(size_t) nax );
-
-/* Copy the centre and corner from the supplied Box into the required part
- of the above arrays. */
- if( boxfirst ) {
- centre = lbnd;
- corner = ubnd;
- } else {
- centre = lbnd + nax_reg;
- corner = ubnd + nax_reg;
- }
- astBoxPoints( this, centre, corner );
-
-/* Convert these centre and corner positions into upper and lower bounds. */
- if( astOK ) {
- for( i = 0; i < nax_this; i++ ) {
- centre[ i ] = 2*centre[ i ] - corner[ i ];
- if( centre[ i ] > corner[ i ] ) {
- temp = centre[ i ];
- centre[ i ] = corner[ i ];
- corner[ i ] = temp;
- }
- }
-
-/* Fill the other axes with bad values to indicate they are unbounded. */
- if( boxfirst ) {
- for( i = nax_this; i < nax; i++ ) {
- lbnd[ i ] = AST__BAD;
- ubnd[ i ] = AST__BAD;
- }
- } else {
- for( i = 0; i < nax_reg; i++ ) {
- lbnd[ i ] = AST__BAD;
- ubnd[ i ] = AST__BAD;
- }
- }
-
-/* Create the new Interval, initially with no uncertainty. */
- new = (AstRegion *) astInterval( bfrm, lbnd, ubnd, NULL, "",
- status );
- }
-
-/* Free resources .*/
- lbnd = astFree( lbnd );
- ubnd = astFree( ubnd );
-
-/* Now attempt to merge with a PointList. The result will be a PointList.
- Both Regions must be un-negated. */
- } else if( astIsAPointList( reg ) && !neg_this && !neg_reg ) {
-
-/* We can only do this if the Box has zero width on each axis (i.e.
- represents a point). Get the Box centre and corner. */
- centre = astMalloc( sizeof( double )*(size_t) nax_this );
- corner = astMalloc( sizeof( double )*(size_t) nax_this );
- astBoxPoints( this, centre, corner );
-
-/* Get the size of the Box's uncertainty region. */
- lbnd = astMalloc( sizeof( double )*(size_t) nax_this );
- ubnd = astMalloc( sizeof( double )*(size_t) nax_this );
- bunc = astGetUncFrm( this, AST__BASE );
- astGetRegionBounds( bunc, lbnd, ubnd );
-
-/* Set "ok" to zero if the Box does not have zero width on any axis. Here
- "zero width" means a width less than half the uncertainty on the axis. */
- if( astOK ) {
-
- ok = 1;
- for( i = 0; i < nax_this; i++ ) {
- if( fabs( centre[ i ] - corner[ i ] ) >
- 0.25*fabs( ubnd[ i ] - lbnd[ i ] ) ) {
- ok = 0;
- break;
- }
- }
-
-/* If the Box is a point, we go on to create a new PointList. */
- if( ok ) {
-
-/* Get a PointSet holding the axis values in the supplied PointList data.
- Also get the number of points in the PointSet and pointers to the arrays
- holding the axis values. */
- astPointListPoints( reg, &pset_reg );
- npnt = astGetNpoint( pset_reg );
- ptr_reg = astGetPoints( pset_reg );
-
-/* Create a new PointSet with room for the same number of points, but
- with the extra required axes. Get pointers to its axis arrays. */
- pset_new = astPointSet( npnt, nax, "", status );
- ptr_new = astGetPoints( pset_new );
-
-/* Copy the PointList axis values into the new PointSet, and then include
- the extra axis values defined by the Box to each point. */
- if( astOK ) {
-
- for( j = 0; j < nax_reg; j++ ) {
- p = ptr_reg[ j ];
- q = ptr_new[ boxfirst ? nax_this + j : j ];
- for( i = 0; i < npnt; i++ ) *(q++) = *(p++);
- }
-
- for( j = 0; j < nax_this; j++ ) {
- p = centre + j;
- q = ptr_new[ boxfirst ? j : nax_reg + j ];
- for( i = 0; i < npnt; i++ ) *(q++) = *p;
- }
-
-/* Create the new PointList, initially with no uncertainty. */
- new = (AstRegion *) astPointList( bfrm, pset_new, NULL,
- "", status );
- }
-
-/* Free resources .*/
- pset_new = astAnnul( pset_new );
- pset_reg = astAnnul( pset_reg );
- }
- }
- centre = astFree( centre );
- corner = astFree( corner );
- lbnd = astFree( lbnd );
- ubnd = astFree( ubnd );
- bunc = astAnnul( bunc );
-
- }
-
-/* If a new Region was created above, propagate remaining attributes of
- the supplied Region to it. */
- if( new ) {
- astRegOverlay( new, this, 1 );
-
-/* The above Prism constructors create the Prism with the correct value
- for the Nagated attribute (i.e. zero). Ensure the above call to
- astRegOverlay has not changed this. */
- astClearNegated( new );
-
-/* If both the supplied Regions have uncertainty, assign the new Region an
- uncertainty. */
- if( astTestUnc( this ) && astTestUnc( reg ) ) {
-
-/* Get the uncertainties from the two supplied Regions. */
- unc_this = astGetUncFrm( this, AST__BASE );
- unc_reg = astGetUncFrm( reg, AST__BASE );
-
-/* Combine them into a single Region (a Prism), in the correct order. */
- if( boxfirst ) {
- bunc = (AstRegion *) astPrism( unc_this, unc_reg, "", status );
- } else {
- bunc = (AstRegion *) astPrism( unc_reg, unc_this, "", status );
- }
-
-/* Attempt to simplify the Prism. */
- sbunc = astSimplify( bunc );
-
-/* Use the simplified Prism as the uncertainty for the returned Region. */
- astSetUnc( new, sbunc );
-
-/* Free resources. */
- sbunc = astAnnul( sbunc );
- bunc = astAnnul( bunc );
- unc_reg = astAnnul( unc_reg );
- unc_this = astAnnul( unc_this );
- }
-
-/* Get the current Frames from the two Region FrameSets, and combine them
- into a single CmpFrame. */
- frm_this = astGetFrame( ((AstRegion *) this)->frameset, AST__CURRENT );
- frm_reg = astGetFrame( reg->frameset, AST__CURRENT );
-
- if( boxfirst ) {
- cfrm = (AstFrame *) astCmpFrame( frm_this, frm_reg, "", status );
- } else {
- cfrm = (AstFrame *) astCmpFrame( frm_reg, frm_this, "", status );
- }
-
-/* Get the base -> current Mappings from the two Region FrameSets, and
- combine them into a single parallel CmpMap that connects bfrm and cfrm. */
- map_this = astGetMapping( ((AstRegion *) this)->frameset, AST__BASE,
- AST__CURRENT );
- map_reg = astGetMapping( reg->frameset, AST__BASE, AST__CURRENT );
-
- if( boxfirst ) {
- bcmap = (AstMapping *) astCmpMap( map_this, map_reg, 0, "",
- status );
- } else {
- bcmap = (AstMapping *) astCmpMap( map_reg, map_this, 0, "",
- status );
- }
-
-/* Map the new Region into the new current Frame. */
- result = astMapRegion( new, bcmap, cfrm );
-
-/* The filling factor in the returned is the product of the filling
- factors for the two supplied Regions. */
- if( astTestFillFactor( reg ) || astTestFillFactor( this ) ) {
- astSetFillFactor( result, astGetFillFactor( reg )*
- astGetFillFactor( this ) );
- }
-
-/* If the MeshSize value is set in either supplied Region, set a value
- for the returned Region which scales the default value by the
- product of the scaling factors for the two supplied Regions. First see
- if either MeshSize value is set. */
- msz_this_set = astTestMeshSize( this );
- msz_reg_set = astTestMeshSize( reg );
- if( msz_this_set || msz_reg_set ) {
-
-/* If so, get the two MeshSize values (one of which may be a default
- value), and then clear them so that the default value will be returned
- in future. */
- msz_this = astGetMeshSize( this );
- msz_reg = astGetMeshSize( reg );
- astClearMeshSize( this );
- astClearMeshSize( reg );
-
-/* Get the ratio of the used MeshSize to the default MeshSize for both
- Regions. */
- fac_this = (double)msz_this/(double)astGetMeshSize( this );
- fac_reg = (double)msz_reg/(double)astGetMeshSize( reg );
-
-/* The MeshSize of the returned Returned is the default value scaled by
- the product of the two ratios found above. */
- astSetMeshSize( result, fac_this*fac_reg*astGetMeshSize( result ) );
-
-/* Re-instate the original MeshSize values for the supplied Regions (if
- set) */
- if( msz_this_set ) astSetMeshSize( this, msz_this );
- if( msz_reg_set ) astSetMeshSize( reg, msz_reg );
- }
-
-/* Free remaining resources */
- frm_this = astAnnul( frm_this );
- frm_reg = astAnnul( frm_reg );
- map_this = astAnnul( map_this );
- map_reg = astAnnul( map_reg );
- bcmap = astAnnul( bcmap );
- new = astAnnul( new );
- cfrm = astAnnul( cfrm );
- }
- bfrm = astAnnul( bfrm );
- }
-
-/* If an error has occurred, annul the returned pointer. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static void RegBaseBox( AstRegion *this_region, double *lbnd, double *ubnd, int *status ){
-/*
-* Name:
-* RegBaseBox
-
-* Purpose:
-* Returns the bounding box of an un-negated Region in the base Frame of
-* the encapsulated FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* void RegBaseBox( AstRegion *this, double *lbnd, double *ubnd, int *status )
-
-* Class Membership:
-* Box member function (over-rides the astRegBaseBox protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns the upper and lower axis bounds of a Region in
-* the base Frame of the encapsulated FrameSet, assuming the Region
-* has not been negated. That is, the value of the Negated attribute
-* is ignored.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* lbnd
-* Pointer to an array in which to return the lower axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-* ubnd
-* Pointer to an array in which to return the upper axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstBox *this; /* Pointer to Box structure */
- double axcen; /* Central axis value */
- double axlen; /* Half width of box on axis */
- int i; /* Axis index */
- int nc; /* No. of axes in base Frame */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the Box structure */
- this = (AstBox *) this_region;
-
-/* Ensure cached information is up to date. */
- Cache( this, 0, status );
-
-/* Get the number of base Frame axes in the Region. */
- nc = astGetNin( this_region->frameset );
-
-/* The first point is the centre of the box, the second point is the half
- size of the box on each axis.*/
- for( i = 0; i < nc; i++ ) {
- axcen = this->centre[ i ];
- axlen = this->extent[ i ]*this->shrink;
- lbnd[ i ] = axcen - axlen;
- ubnd[ i ] = axcen + axlen;
- }
-}
-
-static AstPointSet *RegBaseGrid( AstRegion *this, int *status ){
-/*
-* Name:
-* RegBaseGrid
-
-* Purpose:
-* Return a PointSet containing points spread through the volume of a
-* Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* AstPointSet *RegBaseGrid( AstRegion *this, int *status )
-
-* Class Membership:
-* Box member function (over-rides the astRegBaseGrid protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a PointSet containing a set of points spread
-* through the volume of the supplied Box. The points refer to the base
-* Frame of the encapsulated FrameSet.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the PointSet. If the Region is unbounded, a NULL pointer
-* will be returned.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFrame *frm; /* Base Frame in encapsulated FrameSet */
- AstPointSet *newps; /* New results PointSet */
- AstPointSet *ps; /* New boundary mesh */
- AstPointSet *result; /* Returned pointer */
- double **ptr; /* Pointers to data */
- double *ax; /* Pointer to next first axis value */
- double *lbnd; /* Pointer to array of lower bounds of box */
- double *ubnd; /* Pointer to array of lower bounds of box */
- double dx; /* Increment along first axis of 2D box */
- double shrink0; /* Original shrink factor */
- int i; /* Loop count */
- int ii; /* Loop count */
- int ik; /* Next value to add to "is" */
- int ip; /* Index of next point */
- int is; /* Sum of first "m-1" integers raised to power of (naxes-1) */
- int k1; /* Intermediate constant */
- int m; /* No. of times to invoke astRegBaseMesh */
- int naxes; /* No. of axes in base Frame */
- int np; /* Original MeshSize value */
- int npp; /* Current MeshSize value */
-
-/* Initialise */
- result = NULL;
-
-/* Check the local error status. */
- if ( !astOK ) return NULL;
-
-/* If the Region structure contains a pointer to a PointSet holding
- a previously created grid, return it. */
- if( this->basegrid ) {
- result = astClone( this->basegrid );
-
-/* Otherwise, create a new one, but only if the Box is bounded. */
- } else if( astGetBounded( this ) ) {
-
-/* Get the base Frame in the Region's FrameSet. */
- frm = astGetFrame( this->frameset, AST__BASE );
-
-/* Get the number of axes in the base Frame */
- naxes = astGetNaxes( frm );
-
-/* Get the bounds of the Region in the base Frame. */
- lbnd = astMalloc( sizeof( double )*(size_t) naxes );
- ubnd = astMalloc( sizeof( double )*(size_t) naxes );
- astRegBaseBox( this, lbnd, ubnd );
-
-/* Get the number of points which would be used to create a boundary
- mesh. We use the same number to determine the number of points in the
- grid. */
- np = astGetMeshSize( this );
-
-/* First deal with the simple case of 1-D boxes. Store "np" axis values
- evenly spaced between lbnd and ubnd. */
- if( naxes == 1 ) {
- result = astPointSet( np, 1, "", status );
- ptr = astGetPoints( result );
- if( astOK ) {
- ax = ptr[ 0 ];
- dx = ( ubnd[ 0 ] - lbnd[ 0 ] )/( np - 1 );
- for( ip = 0; ip < np; ip++ ) *(ax++) = lbnd[ 0 ] + ip*dx;
- }
-
-/* Now deal with boxes with more than 1 axis. The algorithm uses the
- astRegBaseMesh method to create a boundary mesh covering the box.
- The box is then shrunk slightly and a new boundary mesh created, which
- is appended to the first mesh. This process of shrinking the box and
- appending the new boundary mesh is continued until the box has zero
- size. The final mesh represents the required volume grid like a series
- of "onion skins". We reduce the MeshSize attribute each time prior to
- calling the astRegBaseMesh method in order to retain a roughly constant
- density of points throughout the final grid, and so that the final number
- of points in the grid is close to "np". */
- } else {
-
-/* First find the number of times ("m") the astRegBaseMesh method should be
- called. This is calculated on the basis of the MeshSize value ("np")
- and the number of axes in the Region. */
- k1 = naxes;
- for( ii = 0; ii < naxes; ii++ ) k1 *= 2;
-
- is = 1;
- for( m = 2; m < 100; m++ ) {
- if( is*k1 >= np ) {
- m--;
- break;
- }
- ik = m;
- for( ii = 2; ii < naxes; ii++ ) ik *= m;
- is += ik;
- }
-
-/* Save the original shrink factor. */
- shrink0 = ((AstBox *) this)->shrink;
-
-/* Loop round invoking the astRegBaseMesh method. */
- for( i = 1; i <= m; i++ ) {
-
-/* Shrink the Box temporarily. */
- SetShrink( (AstBox *) this, (shrink0*i)/m, status );
-
-/* Set the new MeshSize. */
- npp = k1;
- for( ii = 1; ii < naxes; ii++ ) npp *= i;
- astSetMeshSize( this, npp );
-
-/* Invoke the astRegBaseMesh method to create a new boundary mesh. */
- ps = astRegBaseMesh( this );
-
-/* If this is the first PointSet created, use it as the returned
- PointSet. Otherwise, append this PointSet to the results PointSet. */
- if( !result ) {
- result = astClone( ps );
- } else {
- newps = astAppendPoints( result, ps );
- (void) astAnnul( result );
- result = newps;
- }
-
-/* Free resources. */
- ps = astAnnul( ps );
- }
-
-/* Unshrink the Box. */
- SetShrink( (AstBox *) this, shrink0, status );
-
-/* Reinstate the original MeshSize. */
- astSetMeshSize( this, np );
-
- }
-
-/* Same the returned pointer in the Region structure so that it does not
- need to be created again next time this function is called. */
- if( astOK && result ) this->basegrid = astClone( result );
-
-/* Free resources. */
- frm = astAnnul( frm );
- lbnd = astFree( lbnd );
- ubnd = astFree( ubnd );
- }
-
-/* Annul the result if an error occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result */
- return result;
-}
-
-static AstPointSet *RegBaseMesh( AstRegion *this, int *status ){
-/*
-* Name:
-* RegBaseMesh
-
-* Purpose:
-* Return a PointSet containing a mesh of points on the boundary of a
-* Region in its base Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* AstPointSet *RegBaseMesh( AstRegion *this, int *status )
-
-* Class Membership:
-* Box member function (over-rides the astRegBaseMesh protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a PointSet containing a mesh of points on the
-* boundary of the Region. The points refer to the base Frame of
-* the encapsulated FrameSet.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the PointSet. The axis values in this PointSet will have
-* associated accuracies derived from the accuracies which were
-* supplied when the Region was created.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-
-*/
-
-/* Local Constants: */
-#define NP_EDGE 50 /* No. of points for determining geodesic
- length of each axis. */
-
-/* Local Variables: */
- AstFrame *frm; /* Base Frame in encapsulated FrameSet */
- AstFrame *pfrm0; /* Primary Frame defining axis 0 */
- AstFrame *pfrm1; /* Primary Frame defining axis 1 */
- AstPointSet *result; /* Returned pointer */
- const char *class0; /* Pointer to class string from pfrm0 */
- const char *class1; /* Pointer to class string from pfrm1 */
- double **ptr; /* Pointers to data */
- double *ax; /* Pointer to next first axis value */
- double *ay; /* Pointer to next second axis value */
- double *lbnd; /* Pointer to array of lower bounds of box */
- double *ubnd; /* Pointer to array of lower bounds of box */
- double c[ 5 ][ 2 ]; /* Positions of corners for 2D boxes */
- double dx; /* Increment along first axis of 2D box */
- double dy; /* Increment along second axis of 2D box */
- double edge_len[ 4 ]; /* Length of each edge of 2D boundary */
- double lax; /* Previous value on first axis */
- double lay; /* Previous value on second axis */
- double len; /* Length of edge of 2D boundary */
- double p0[ 2 ]; /* Position in 2D Frame */
- double p1[ 2 ]; /* Position in 2D Frame */
- double ppd; /* Points per unit distance */
- double total_len; /* Total length of 2D boundary */
- int flat; /* Assume Frame geometry is flat? */
- int i; /* Point index */
- int iaxis; /* Axis index */
- int iedge; /* Edge index */
- int ip; /* Index of next point */
- int metric; /* Does Frame have a usable metric? */
- int nax0; /* No. of axes in first primary Frame */
- int nax1; /* No. of axes in second primary Frame */
- int naxes; /* No. of axes in base Frame */
- int np; /* No. of points in returned PointSet */
- int np0; /* No. of points per edge */
- int np_axis; /* No. of points per axis in ND box */
- int np_edge[ 4 ]; /* No. of points per edge in 2D box */
- int paxis; /* Axis index in primary Frame */
- int single; /* Does the Box occupy a single point? */
-
-/* Initialise */
- result= NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If the Region structure contains a pointer to a PointSet holding
- a previously created mesh, return it. */
- if( this->basemesh ) {
- result = astClone( this->basemesh );
-
-/* Otherwise, create a new mesh. */
- } else {
-
-/* Get the base Frame in the Region's FrameSet. */
- frm = astGetFrame( this->frameset, AST__BASE );
-
-/* Get the number of axes in the base Frame */
- naxes = astGetNaxes( frm );
-
-/* Get the bounds of the Region in the base Frame. */
- lbnd = astMalloc( sizeof( double )*(size_t) naxes );
- ubnd = astMalloc( sizeof( double )*(size_t) naxes );
- astRegBaseBox( this, lbnd, ubnd );
-
-/* Get the requested number of points to put on the mesh. */
- np = astGetMeshSize( this );
-
-/* See if the box occupies a single point. */
- single = 1;
- for( i = 0; i < naxes; i++ ) {
- if( ubnd[ i ] > lbnd[ i ] ) {
- single = 0;
- break;
- }
- }
-
-/* If so, we return a PointSet holding a single point. */
- if( single ) {
- result = astPointSet( 1, naxes, "", status );
- ptr = astGetPoints( result );
- if( astOK ) {
- for( i = 0; i < naxes; i++ ) {
- ptr[ i ][ 0 ] = 0.5*( lbnd[ 0 ] + ubnd[ 0 ] );
- }
- }
-
-/* Otherwise, first deal with 1-D boxes. */
- } else if( naxes == 1 ) {
-
-/* The boundary of a 1-D box consists of 2 points - the two extreme values.
- Create a PointSet to hold 2 1-D values, and store the extreme values. */
- result = astPointSet( 2, 1, "", status );
- ptr = astGetPoints( result );
- if( astOK ) {
- ptr[ 0 ][ 0 ] = lbnd[ 0 ];
- ptr[ 0 ][ 1 ] = ubnd[ 0 ];
- }
-
-/* Now deal with 2-D boxes. */
- } else if( naxes == 2 ){
-
-/* Store the coords of each corner for easy access. */
- c[ 0 ][ 0 ] = lbnd[ 0 ];
- c[ 0 ][ 1 ] = lbnd[ 1 ];
- c[ 1 ][ 0 ] = lbnd[ 0 ];
- c[ 1 ][ 1 ] = ubnd[ 1 ];
- c[ 2 ][ 0 ] = ubnd[ 0 ];
- c[ 2 ][ 1 ] = ubnd[ 1 ];
- c[ 3 ][ 0 ] = ubnd[ 0 ];
- c[ 3 ][ 1 ] = lbnd[ 1 ];
- c[ 4 ][ 0 ] = lbnd[ 0 ];
- c[ 4 ][ 1 ] = lbnd[ 1 ];
-
-/* See if we can assume that the frame has flat geometry. This is the case
- if both axes belong to simple Frames, or are 1D, but may not be the case
- if either axis does not belong to a simple Frame that has more than 1
- axis. */
- astPrimaryFrame( frm, 0, &pfrm0, &paxis );
- astPrimaryFrame( frm, 1, &pfrm1, &paxis );
- class0 = astGetClass( pfrm0 );
- class1 = astGetClass( pfrm1 );
- nax0 = astGetNaxes( pfrm0 );
- nax1 = astGetNaxes( pfrm1 );
- if( astOK ) {
- flat = ( !strcmp( class0, "Frame" ) || nax0 == 1 ) &&
- ( !strcmp( class1, "Frame" ) || nax1 == 1 );
- } else {
- flat = 0;
- }
-
-/* Our choice of distribution of points depends on whether the axes have the
- same units or not. If the axes have the same units, or if they share the
- same primary Frame, then we assume that the axes span some space in which
- a single "distance" is defined. If not, (e.g. for a Frame representing
- frequency in Hz on one axis - typical value 1.0E10, and slit position in
- metres on the other axis - typical value 1.0E-2) we assume that "distance"
- is defined differently for each axis. The primary frame requirement is
- because some classes of Frame (e.g. SkyFrame) have a defined distance,
- even though the Units attributes for its axes may differ (since Units
- refers to the external representation - e.g. hours and degrees for a
- SkyFrame - rather than the internal representation). */
- if( astOK && !strcmp( astGetUnit( frm, 0 ), astGetUnit( frm, 1 ) ) ) {
- metric = 1;
- } else {
- metric = ( pfrm0 == pfrm1 );
- }
-
-/* If we have a usable metric, distribute the points according to the aspect
- ratio of the box (i.e. the shorter box sides gets fewer points). */
- if( metric ){
-
-/* Find the approximate geodesic length of each edge of the box. Since
- the edges of the box may not correspond to single geodesic (e.g. a
- line of constant latitude is not a geodesic), we do this by testing
- a set of points along each edge of the box and finding the total of the
- geodesic distances between each pair of adjacent points. Initialise the
- total length round all edges. */
- total_len = 0.0;
-
-/* Do each edge in turn.*/
- for( iedge = 0; iedge < 4; iedge++ ) {
-
-/* Find the increment in x and y between adjacent points along this edge.
- We put a point at each end of the edge. Note, one of dx or dy will be
- zero since the edges are parallel to the axes. */
- dx = ( c[ iedge + 1 ][ 0 ] - c[ iedge ][ 0 ] )/( NP_EDGE - 1 );
- dy = ( c[ iedge + 1 ][ 1 ] - c[ iedge ][ 1 ] )/( NP_EDGE - 1 );
-
-/* Store the coords of the first point. */
- p0[ 0 ] = c[ iedge ][ 0 ];
- p0[ 1 ] = c[ iedge ][ 1 ];
-
-/* Initialise the length of this edge and loop round the remaining points. */
- len = 0.0;
- for( i = 1; i < NP_EDGE; i++ ) {
-
-/* Save the position of the previous point. */
- p1[ 0 ] = p0[ 0 ];
- p1[ 1 ] = p0[ 1 ];
-
-/* Find the position of the new point. */
- p0[ 0 ] = p1[ 0 ] + dx;
- p0[ 1 ] = p1[ 1 ] + dy;
-
-/* Increment the length of the edge by the geodesic distance from this point
- to the previous point. If the Frame is flat, this is simple (given that we
- know that one of dx and dy must be zero). */
- if( flat ) {
- len += fabs( dx + dy );
- } else {
- len += astDistance( frm, p0, p1 );
- }
- }
-
-/* Save the length of this edge, and also form the total length round all
- edges. */
- edge_len[ iedge ] = len;
- total_len += len;
- }
-
-/* Find the average number of points per unit geodesic distance around the
- boundary. */
- if( total_len > 0.0 ) {
- ppd = np / total_len;
-
-/* Use this, with the geodesic length of each edge found above, to find the
- number of points to put along each edge of the boundary, and update the
- total number of points to use. In the returned boundary we put a point at
- the start of each edge but not at the end (since the end of one edge will
- be the start of the next edge). */
- np = 0;
- for( iedge = 0; iedge < 4; iedge++ ) {
- np_edge[ iedge ] = (int) ( edge_len[ iedge ]*ppd );
- if( np_edge[ iedge ] == 0 ) np_edge[ iedge ] = 1;
- np += np_edge[ iedge ];
- }
-
-/* Report error if total length round box is zero. */
- } else if( astOK ) {
- astError( AST__INTER, "astRegBaseMesh(%s): Distance around "
- "box perimeter is zero (internal AST programming "
- "error).", status, astGetClass( this ) );
- }
-
-/* If the Frame has no usable metric, give an equal number of points
- (equal to a quarter of the total) to all 4 sides of the box. */
- } else {
- np0 = (int) ( 0.25*np );
- np = 0;
- for( iedge = 0; iedge < 4; iedge++ ) {
- np_edge[ iedge ] = np0;
- np += np_edge[ iedge ];
- }
- }
-
-/* Create a PointSet with enough room and get a pointer to its data arrays. */
- result = astPointSet( np, 2, "", status );
- ptr = astGetPoints( result );
- if( astOK ) {
-
-/* Initialise pointers to the first element for each axis in the returned
- PointSet. */
- ax = ptr[ 0 ];
- ay = ptr[ 1 ];
-
-/* Loop round each edge. */
- for( iedge = 0; iedge < 4; iedge++ ) {
-
-/* Find the increment in x and y between adjacent points along this edge. */
- dx = ( c[ iedge + 1 ][ 0 ] - c[ iedge ][ 0 ] )/ np_edge[ iedge ];
- dy = ( c[ iedge + 1 ][ 1 ] - c[ iedge ][ 1 ] )/ np_edge[ iedge ];
-
-/* Store the first point. */
- lax = c[ iedge ][ 0 ];
- lay = c[ iedge ][ 1 ];
- *(ax++) = lax;
- *(ay++) = lay;
-
-/* Loop round the remaining points, incrementing the pointers at the same
- time. */
- for( i = 1; i < np_edge[ iedge ]; i++, ax++, ay++ ) {
-
-/* Find the position of the new point and store it. */
- lax += dx;
- lay += dy;
- *ax = lax;
- *ay = lay;
- }
- }
- }
-
-/* Free resources. */
- pfrm0 = astAnnul( pfrm0 );
- pfrm1 = astAnnul( pfrm1 );
-
-/* Now deal with boxes with more than 2 dimensions. */
- } else {
-
-/* Number of samples along each edge of the hyper-cube. */
- np_axis = 1 + (int) pow( np/(2*naxes), 1.0/(naxes-1) );
- if( np_axis < 2 ) np_axis = 2;
-
-/* Each face of the hyper-cube will have np_axis**(naxes-1) points, and there
- are 2*naxes faces. Create a PointSet with the correct number of
- points. */
- np = 2*naxes;
- for( iaxis = 1; iaxis < naxes; iaxis++ ) np *= np_axis;
- result = astPointSet( np, naxes, "", status );
- ptr = astGetPoints( result );
- if( astOK ) {
-
-/* Initialise the index of the next point to add into the PointSet. */
- ip = 0;
-
-/* Create the upper and lower faces for each axis in turn. */
- for( iaxis = 0; iaxis < naxes; iaxis++ ) {
-
-/* First do the upper face for this axis. */
- ip += MakeGrid( naxes, ptr, ip, lbnd, ubnd, np_axis, iaxis,
- ubnd[ iaxis ], status );
-
-/* Now do the lower face for this axis. */
- ip += MakeGrid( naxes, ptr, ip, lbnd, ubnd, np_axis, iaxis,
- lbnd[ iaxis ], status );
- }
-
-/* Remove any unused space at the end of the PointSet. */
- if( ip < np ) astSetNpoint( result, ip );
- }
- }
-
-/* Same the returned pointer in the Region structure so that it does not
- need to be created again next time this function is called. */
- if( astOK && result ) this->basemesh = astClone( result );
-
-/* Free resources. */
- frm = astAnnul( frm );
- lbnd = astFree( lbnd );
- ubnd = astFree( ubnd );
- }
-
-/* Annul the result if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
- return result;
-
-/* Undefine macros local to this function. */
-#undef NP_EDGE
-
-}
-
-static AstRegion *RegBasePick( AstRegion *this_region, int naxes, const int *axes,
- int *status ){
-/*
-* Name:
-* RegBasePick
-
-* Purpose:
-* Return a Region formed by picking selected base Frame axes from the
-* supplied Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* AstRegion *RegBasePick( AstRegion *this, int naxes, const int *axes,
-* int *status )
-
-* Class Membership:
-* Box member function (over-rides the astRegBasePick protected
-* method inherited from the Region class).
-
-* Description:
-* This function attempts to return a Region that is spanned by selected
-* axes from the base Frame of the encapsulated FrameSet of the supplied
-* Region. This may or may not be possible, depending on the class of
-* Region. If it is not possible a NULL pointer is returned.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* naxes
-* The number of base Frame axes to select.
-* axes
-* An array holding the zero-based indices of the base Frame axes
-* that are to be selected.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the Region, or NULL if no region can be formed.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFrame *bfrm; /* The base Frame in the supplied Region */
- AstFrame *frm; /* The base Frame in the returned Region */
- AstPointSet *pset; /* Holds axis values defining the supplied Region */
- AstRegion *bunc; /* The uncertainty in the supplied Region */
- AstRegion *result; /* Returned Region */
- AstRegion *unc; /* The uncertainty in the returned Region */
- double **ptr; /* Holds axis values defining the supplied Region */
- double *cen; /* Base Frm axis values at centre of returned Box */
- double *cor; /* Base Frm axis values at a corner of returned Box */
- int i; /* Index of axis within returned Region */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the base Frame of the encapsulated FrameSet. */
- bfrm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Create a Frame by picking the selected axes from the base Frame of the
- encapsulated FrameSet. */
- frm = astPickAxes( bfrm, naxes, axes, NULL );
-
-/* Get the uncertainty Region (if any) within the base Frame of the supplied
- Region, and select the required axes from it. If the resulting Object
- is not a Region, annul it so that the returned Region will have no
- uncertainty. */
- if( astTestUnc( this_region ) ) {
- bunc = astGetUncFrm( this_region, AST__BASE );
- unc = astPickAxes( bunc, naxes, axes, NULL );
- bunc = astAnnul( bunc );
-
- if( ! astIsARegion( unc ) ) unc = astAnnul( unc );
-
- } else {
- unc = NULL;
- }
-
-/* Get pointers to the coordinate data in the parent Region structure. */
- pset = this_region->points;
- ptr = astGetPoints( pset );
-
-/* Get space to hold the centre and corner of the Box in the new Frame. */
- cen = astMalloc( sizeof( *cen )*naxes );
- cor = astMalloc( sizeof( *cor )*naxes );
-
-/* Check pointers can be used safely. */
- if( astOK ) {
-
-/* Copy the centre and corner axis values for the selected axes into the
- arrays allocated above. */
- for( i = 0; i < naxes; i++ ) {
- cen[ i ] = ptr[ axes[ i ] ][ 0 ];
- cor[ i ] = ptr[ axes[ i ] ][ 1 ];
- }
-
-/* Create the new Box. */
- result = (AstRegion *) astBox( frm, 0, cen, cor, unc, "", status );
- }
-
-/* Free resources */
- frm = astAnnul( frm );
- bfrm = astAnnul( bfrm );
- if( unc ) unc = astAnnul( unc );
- cen = astFree( cen );
- cor = astFree( cor );
-
-/* Return a NULL pointer if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static double *RegCentre( AstRegion *this_region, double *cen, double **ptr,
- int index, int ifrm, int *status ){
-/*
-* Name:
-* RegCentre
-
-* Purpose:
-* Re-centre a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* double *RegCentre( AstRegion *this, double *cen, double **ptr,
-* int index, int ifrm, int *status )
-
-* Class Membership:
-* Box member function (over-rides the astRegCentre protected
-* method inherited from the Region class).
-
-* Description:
-* This function shifts the centre of the supplied Region to a
-* specified position, or returns the current centre of the Region.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* cen
-* Pointer to an array of axis values, giving the new centre.
-* Supply a NULL value for this in order to use "ptr" and "index" to
-* specify the new centre.
-* ptr
-* Pointer to an array of points, one for each axis in the Region.
-* Each pointer locates an array of axis values. This is the format
-* returned by the PointSet method astGetPoints. Only used if "cen"
-* is NULL.
-* index
-* The index of the point within the arrays identified by "ptr" at
-* which is stored the coords for the new centre position. Only used
-* if "cen" is NULL.
-* ifrm
-* Should be AST__BASE or AST__CURRENT. Indicates whether the centre
-* position is supplied and returned in the base or current Frame of
-* the FrameSet encapsulated within "this".
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If both "cen" and "ptr" are NULL then a pointer to a newly
-* allocated dynamic array is returned which contains the centre
-* coords of the Region. This array should be freed using astFree when
-* no longer needed. If either of "ptr" or "cen" is not NULL, then a
-* NULL pointer is returned.
-
-* Notes:
-* - Some Region sub-classes do not have a centre. Such classes will report
-* an AST__INTER error code if this method is called with either "ptr" or
-* "cen" not NULL. If "ptr" and "cen" are both NULL, then no error is
-* reported if this method is invoked on a Region of an unsuitable class,
-* but NULL is always returned.
-
-*/
-
-/* Local Variables: */
- AstBox *this; /* Pointer to Box structure */
- AstFrame *frm; /* Pointer to Box's base Frame */
- double **rptr; /* Data pointers for Region PointSet */
- double *bc; /* Base Frame centre position */
- double *corner; /* Array holding corner axis values */
- double *result; /* Returned pointer */
- double *tmp; /* Temporary array pointer */
- double axval; /* Axis value */
- int ic; /* Coordinate index */
- int ncb; /* Number of base frame coordinate values per point */
- int ncc; /* Number of current frame coordinate values per point */
-
-/* Initialise */
- result = NULL;
-
-/* Check the local error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the Box structure. */
- this = (AstBox *) this_region;
-
-/* First ensure cached information (which includes the centre coords)
- is up to date. */
- Cache( this, 0, status );
-
-/* Get the number of axis values per point in the base and current Frames. */
- ncb = astGetNin( this_region->frameset );
- ncc = astGetNout( this_region->frameset );
-
-/* If the centre coords are to be returned, return either a copy of the
- base Frame centre coords, or transform the base Frame centre coords
- into the current Frame. First ensure cached information (which
- includes the centre coords) is up to date. */
- if( !ptr && !cen ) {
- if( ifrm == AST__CURRENT ) {
- result = astRegTranPoint( this_region, this->centre, 1, 1 );
- } else {
- result = astStore( NULL, this->centre, sizeof( double )*ncb );
- }
-
-/* Otherwise, we store the supplied new centre coords and return a NULL
- pointer. */
- } else {
-
-/* Get a pointer to the axis values stored in the Region structure. */
- rptr = astGetPoints( this_region->points );
-
-/* Check pointers can be used safely */
- if( astOK ) {
-
-/* If the centre position was supplied in the current Frame, find the
- corresponding base Frame position... */
- if( ifrm == AST__CURRENT ) {
- if( cen ) {
- bc = astRegTranPoint( this_region, cen, 1, 0 );
- } else {
- tmp = astMalloc( sizeof( double)*(size_t)ncc );
- if( astOK ) {
- for( ic = 0; ic < ncc; ic++ ) tmp[ ic ] = ptr[ ic ][ index ];
- }
- bc = astRegTranPoint( this_region, tmp, 1, 0 );
- tmp = astFree( tmp );
- }
-
-/* Replace any bad centre values with their current values. */
- for( ic = 0; ic < ncb; ic++ ) {
- if( bc[ ic ] == AST__BAD ) bc[ ic ] = this->centre[ ic ];
- }
-
-/* If the centre position was supplied in the base Frame, store the
- centre coords in this->centre, skipping bad values. */
- } else {
- bc = this->centre;
- for( ic = 0; ic < ncb; ic++ ) {
- axval = cen ? cen[ ic ] : ptr[ ic ][ index ];
- if( axval != AST__BAD ) bc[ ic ] = axval;
- }
- }
-
-/* Find the coordinates at the new box corner. */
- frm = astGetFrame( this_region->frameset, AST__BASE );
- corner = GeoCorner( frm, ncb, bc, this->geolen, NULL, status );
- frm = astAnnul( frm );
-
-/* ... and change the coords in the parent Region structure. */
- for( ic = 0; ic < ncb; ic++ ) {
- rptr[ ic ][ 0 ] = bc[ ic ];
- rptr[ ic ][ 1 ] = corner[ ic ];
- }
-
-/* Free resources */
- if( ifrm == AST__CURRENT ) bc = astFree( bc );
- corner = astFree( corner );
-
-/* Indicate the cached info in the Box structure is out of date. */
- astResetCache( this );
-
-/* Any base Frame mesh or grid is now no good, so annul it. */
- if( this_region->basemesh ) this_region->basemesh = astAnnul( this_region->basemesh );
- if( this_region->basegrid ) this_region->basegrid = astAnnul( this_region->basegrid );
-
- }
- }
-
-
-/* Return the result. */
- return result;
-}
-
-static int RegPins( AstRegion *this_region, AstPointSet *pset, AstRegion *unc,
- int **mask, int *status ){
-/*
-* Name:
-* RegPins
-
-* Purpose:
-* Check if a set of points fall on the boundary of a given Box.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* int RegPins( AstRegion *this, AstPointSet *pset, AstRegion *unc,
-* int **mask, int *status )
-
-* Class Membership:
-* Box member function (over-rides the astRegPins protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a flag indicating if the supplied set of
-* points all fall on the boundary of the given Box.
-*
-* Some tolerance is allowed, as specified by the uncertainty Region
-* stored in the supplied Box "this", and the supplied uncertainty
-* Region "unc" which describes the uncertainty of the supplied points.
-
-* Parameters:
-* this
-* Pointer to the Box.
-* pset
-* Pointer to the PointSet. The points are assumed to refer to the
-* base Frame of the FrameSet encapsulated by "this".
-* unc
-* Pointer to a Region representing the uncertainties in the points
-* given by "pset". The Region is assumed to represent the base Frame
-* of the FrameSet encapsulated by "this". Zero uncertainity is assumed
-* if NULL is supplied.
-* mask
-* Pointer to location at which to return a pointer to a newly
-* allocated dynamic array of ints. The number of elements in this
-* array is equal to the value of the Npoint attribute of "pset".
-* Each element in the returned array is set to 1 if the
-* corresponding position in "pset" is on the boundary of the Region
-* and is set to zero otherwise. A NULL value may be supplied
-* in which case no array is created. If created, the array should
-* be freed using astFree when no longer needed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the points all fall on the boundary of the given
-* Region, to within the tolerance specified. Zero otherwise.
-
-*/
-
-/* Local variables: */
- AstBox *large_box; /* Box slightly larger than "this" */
- AstBox *small_box; /* Box slightly smaller than "this" */
- AstBox *this; /* Pointer to the Box structure. */
- AstFrame *frm; /* Base Frame in supplied Box */
- AstPointSet *ps1; /* Points masked by larger Box */
- AstPointSet *ps2; /* Points masked by larger and smaller Boxes */
- AstRegion *tunc; /* Uncertainity Region from "this" */
- double **ptr; /* Pointer to axis values in "ps2" */
- double *large; /* A corner position in the larger Box */
- double *lbnd_tunc; /* Lower bounds of "this" uncertainty Region */
- double *lbnd_unc; /* Lower bounds of supplied uncertainty Region */
- double *p; /* Pointer to next axis value */
- double *small; /* A corner position in the smaller Box */
- double *ubnd_tunc; /* Upper bounds of "this" uncertainty Region */
- double *ubnd_unc; /* Upper bounds of supplied uncertainty Region */
- double *wid; /* Widths of "this" border */
- int i; /* Axis index */
- int j; /* Point index */
- int nc; /* No. of axes in Box base frame */
- int np; /* No. of supplied points */
- int result; /* Returned flag */
-
-/* Initialise */
- result = 0;
- if( mask ) *mask = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return result;
-
-/* Get a pointer to the Box structure. */
- this = (AstBox *) this_region;
-
-/* Ensure cached information is up to date. */
- Cache( this, 0, status );
-
-/* Get the number of base Frame axes in the Box, and check the supplied
- PointSet has the same number of axis values per point. */
- frm = astGetFrame( this_region->frameset, AST__BASE );
- nc = astGetNaxes( frm );
- if( astGetNcoord( pset ) != nc && astOK ) {
- astError( AST__INTER, "astRegPins(%s): Illegal number of axis "
- "values per point (%d) in the supplied PointSet - should be "
- "%d (internal AST programming error).", status, astGetClass( this ),
- astGetNcoord( pset ), nc );
- }
-
-/* Get the number of axes in the uncertainty Region and check it is the
- same as above. */
- if( unc && astGetNaxes( unc ) != nc && astOK ) {
- astError( AST__INTER, "astRegPins(%s): Illegal number of axes (%d) "
- "in the supplied uncertainty Region - should be "
- "%d (internal AST programming error).", status, astGetClass( this ),
- astGetNaxes( unc ), nc );
- }
-
-/* We now find the maximum distance on each axis that a point can be from the
- boundary of the Box for it still to be considered to be on the boundary.
- First get the Region which defines the uncertainty within the Box being
- checked (in its base Frame), and get its bounding box. */
- tunc = astGetUncFrm( this, AST__BASE );
- lbnd_tunc = astMalloc( sizeof( double )*(size_t) nc );
- ubnd_tunc = astMalloc( sizeof( double )*(size_t) nc );
- astGetRegionBounds( tunc, lbnd_tunc, ubnd_tunc );
-
-/* Also get the Region which defines the uncertainty of the supplied points
- and get its bounding box. */
- if( unc ) {
- lbnd_unc = astMalloc( sizeof( double )*(size_t) nc );
- ubnd_unc = astMalloc( sizeof( double )*(size_t) nc );
- astGetRegionBounds( unc, lbnd_unc, ubnd_unc );
- } else {
- lbnd_unc = NULL;
- ubnd_unc = NULL;
- }
-
-/* The required border width for each axis is half of the total width of
- the two bounding boxes. Use a zero sized box "unc" if no box was supplied. */
- wid = astMalloc( sizeof( double )*(size_t) nc );
- large = astMalloc( sizeof( double )*(size_t) nc );
- small = astMalloc( sizeof( double )*(size_t) nc );
- if( astOK ) {
- if( unc ) {
- for( i = 0; i < nc; i++ ) {
- wid[ i ] = 0.5*( fabs( astAxDistance( frm, i + 1, lbnd_tunc[ i ], ubnd_tunc[ i ] ) )
- + fabs( astAxDistance( frm, i + 1, lbnd_unc[ i ], ubnd_unc[ i ] ) ) );
- }
- } else {
- for( i = 0; i < nc; i++ ) {
- wid[ i ] = fabs( 0.5*astAxDistance( frm, i + 1, lbnd_tunc[ i ], ubnd_tunc[ i ] ) );
- }
- }
-
-/* Create two new Boxes, one of which is larger than "this" by the widths
- found above, and the other of which is smaller than "this" by the widths
- found above. */
- for( i = 0; i < nc; i++ ) {
- large[ i ] = this->centre[ i ] + this->extent[ i ]*this->shrink + wid[ i ];
- small[ i ] = this->extent[ i ]*this->shrink - wid[ i ];
- if( small[ i ] < 0.0 ) small[ i ] = 0.0;
- small[ i ] += this->centre[ i ];
- }
-
- large_box = astBox( frm, 0, this->centre, large, NULL, "", status );
- small_box = astBox( frm, 0, this->centre, small, NULL, "", status );
-
-/* Negate the smaller region.*/
- astNegate( small_box );
-
-/* Points are on the boundary of "this" if they are inside both the large
- box and the negated smallbox. First transform the supplied PointSet
- using the large box, then transform them using the negated smaller Box. */
- ps1 = astTransform( large_box, pset, 1, NULL );
- ps2 = astTransform( small_box, ps1, 1, NULL );
-
-/* Get a point to the resulting axis values, and the number of axis
- values per axis. */
- ptr = astGetPoints( ps2 );
- np = astGetNpoint( ps2 );
-
-/* If a mask array is to be returned, create one. */
- if( mask ) {
- *mask = astMalloc( sizeof(int)*(size_t) np );
-
-/* Check all the resulting points, setting mask values for all of them. */
- if( astOK ) {
-
-/* Initialise the mask elements on the basis of the first axis values */
- result = 1;
- p = ptr[ 0 ];
- for( j = 0; j < np; j++ ) {
- if( *(p++) == AST__BAD ) {
- result = 0;
- (*mask)[ j ] = 0;
- } else {
- (*mask)[ j ] = 1;
- }
- }
-
-/* Now check for bad values on other axes. */
- for( i = 1; i < nc; i++ ) {
- p = ptr[ i ];
- for( j = 0; j < np; j++ ) {
- if( *(p++) == AST__BAD ) {
- result = 0;
- (*mask)[ j ] = 0;
- }
- }
- }
- }
-
-/* If no output mask is to be made, we can break out of the check as soon
- as the first bad value is found. */
- } else if( astOK ) {
- result = 1;
- for( i = 0; i < nc && result; i++ ) {
- p = ptr[ i ];
- for( j = 0; j < np; j++ ) {
- if( *(p++) == AST__BAD ) {
- result = 0;
- break;
- }
- }
- }
- }
-
-/* Free resources. */
- large_box = astAnnul( large_box );
- small_box = astAnnul( small_box );
- ps1 = astAnnul( ps1 );
- ps2 = astAnnul( ps2 );
- }
-
- tunc = astAnnul( tunc );
- frm = astAnnul( frm );
- lbnd_tunc = astFree( lbnd_tunc );
- ubnd_tunc = astFree( ubnd_tunc );
- if( unc ) lbnd_unc = astFree( lbnd_unc );
- if( unc ) ubnd_unc = astFree( ubnd_unc );
- wid = astFree( wid );
- large = astFree( large );
- small = astFree( small );
-
-/* If an error has occurred, return zero. */
- if( !astOK ) {
- result = 0;
- if( mask ) *mask = astAnnul( *mask );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int RegTrace( AstRegion *this_region, int n, double *dist, double **ptr,
- int *status ){
-/*
-*+
-* Name:
-* RegTrace
-
-* Purpose:
-* Return requested positions on the boundary of a 2D Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* int astTraceRegion( AstRegion *this, int n, double *dist, double **ptr );
-
-* Class Membership:
-* Box member function (overrides the astTraceRegion method
-* inherited from the parent Region class).
-
-* Description:
-* This function returns positions on the boundary of the supplied
-* Region, if possible. The required positions are indicated by a
-* supplied list of scalar parameter values in the range zero to one.
-* Zero corresponds to some arbitrary starting point on the boundary,
-* and one corresponds to the end (which for a closed region will be
-* the same place as the start).
-
-* Parameters:
-* this
-* Pointer to the Region.
-* n
-* The number of positions to return. If this is zero, the function
-* returns without action (but the returned function value still
-* indicates if the method is supported or not).
-* dist
-* Pointer to an array of "n" scalar parameter values in the range
-* 0 to 1.0.
-* ptr
-* A pointer to an array of pointers. The number of elements in
-* this array should equal tthe number of axes in the Frame spanned
-* by the Region. Each element of the array should be a pointer to
-* an array of "n" doubles, in which to return the "n" values for
-* the corresponding axis. The contents of the arrays are unchanged
-* if the supplied Region belongs to a class that does not
-* implement this method.
-
-* Returned Value:
-* Non-zero if the astTraceRegion method is implemented by the class
-* of Region supplied, and zero if not.
-
-*-
-*/
-
-/* Local Variables; */
- AstMapping *map;
- AstPointSet *bpset;
- AstPointSet *cpset;
- double **bptr;
- double d;
- double lbnd[ 2 ];
- double ubnd[ 2 ];
- int i;
- int ncur;
- int result;
-
-/* Initialise */
- result = 0;
-
-/* Check inherited status. */
- if( ! astOK ) return result;
-
-/* Check it is 2-dimensional. */
- if( astGetNin( this_region->frameset ) == 2 ) result = 1;
-
-/* Check we have some points to find. */
- if( result && n > 0 ) {
-
-/* We first determine the required positions in the base Frame of the
- Region, and then transform them into the current Frame. Get the
- base->current Mapping, and the number of current Frame axes. */
- map = astGetMapping( this_region->frameset, AST__BASE, AST__CURRENT );
-
-/* If it's a UnitMap we do not need to do the transformation, so put the
- base Frame positions directly into the supplied arrays. */
- if( astIsAUnitMap( map ) ) {
- bpset = NULL;
- bptr = ptr;
- ncur = 2;
-
-/* Otherwise, create a PointSet to hold the base Frame positions. */
- } else {
- bpset = astPointSet( n, 2, " ", status );
- bptr = astGetPoints( bpset );
- ncur = astGetNout( map );
- }
-
-/* Check the pointers can be used safely. */
- if( astOK ) {
-
-/* Get the bounds of the Region in the base Frame. */
- astRegBaseBox( this_region, lbnd, ubnd );
-
-/* Loop round each point. Each edge of the box covers a parameteric
- distance of 0.25, regardless of the aspect ratio of the box. */
- for( i = 0; i < n; i++ ) {
-
-/* The right hand edge starts at 0.75 (parameter increases top to bottom). */
- d = 4*dist[ i ] - 3;
- if( d > 0 ) {
- bptr[ 0 ][ i ] = ubnd[ 0 ];
- bptr[ 1 ][ i ] = ( 1.0 - d )*ubnd[ 1 ] + d*lbnd[ 1 ];
-
-/* The top edge starts at 0.5 (parameter increases left to right). */
- } else {
- d += 1.0;
- if( d > 0 ) {
- bptr[ 0 ][ i ] = ( 1.0 - d )*lbnd[ 0 ] + d*ubnd[ 0 ];
- bptr[ 1 ][ i ] = ubnd[ 1 ];
-
-/* The left hand edge starts at 0.25 (parameter increases bottom to top). */
- } else {
- d += 1.0;
- if( d > 0 ) {
- bptr[ 0 ][ i ] = lbnd[ 0 ];
- bptr[ 1 ][ i ] = ( 1.0 - d )*lbnd[ 1 ] + d*ubnd[ 1 ];
-
-/* The bottom edge starts at 0.0 (parameter increases right to left). */
- } else {
- d += 1.0;
- bptr[ 0 ][ i ] = ( 1.0 - d )*ubnd[ 0 ] + d*lbnd[ 0 ];
- bptr[ 1 ][ i ] = lbnd[ 1 ];
- }
- }
- }
- }
- }
-
-/* If required, transform the base frame positions into the current
- Frame, storing them in the supplied array. Then free resources. */
- if( bpset ) {
- cpset = astPointSet( n, ncur, " ", status );
- astSetPoints( cpset, ptr );
-
- (void) astTransform( map, bpset, 1, cpset );
-
- cpset = astAnnul( cpset );
- bpset = astAnnul( bpset );
- }
-
-/* Free remaining resources. */
- map = astAnnul( map );
- }
-
-/* Return the result. */
- return result;
-}
-
-static void ResetCache( AstRegion *this, int *status ){
-/*
-* Name:
-* ResetCache
-
-* Purpose:
-* Clear cached information within the supplied Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* void ResetCache( AstRegion *this, int *status )
-
-* Class Membership:
-* Region member function (overrides the astResetCache method
-* inherited from the parent Region class).
-
-* Description:
-* This function clears cached information from the supplied Region
-* structure.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-*/
- if( this ) {
- ((AstBox *) this )->stale = 1;
- (*parent_resetcache)( this, status );
- }
-}
-
-static void SetClosed( AstRegion *this, int value, int *status ){
-/*
-* Name:
-* SetClosed
-
-* Purpose:
-* Set a value for the Closed attribute of a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* void SetClosed( AstRegion *this, int value, int *status )
-
-* Class Membership:
-* Box member function (over-rides the protected astSetClosed
-* method inherited from the Region class).
-
-* Description:
-* This function sets a new value for the Closed attribute of a Region.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* value
-* The new attribute value.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- int old;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get the original attribute value */
- old = astGetClosed( this );
-
-/* Invoke the set method inherited from the parent Region class */
- (*parent_setclosed)( this, value, status );
-
-/* If the new value is not the same as the old value, indicate that we
- need to re-calculate the cached information in the Box. */
- if( value != old ) astResetCache( this );
-}
-
-static void SetNegated( AstRegion *this, int value, int *status ){
-/*
-* Name:
-* SetNegated
-
-* Purpose:
-* Set a value for the Negated attribute of a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* void SetNegated( AstRegion *this, int value, int *status )
-
-* Class Membership:
-* Box member function (over-rides the protected astSetNegated
-* method inherited from the Region class).
-
-* Description:
-* This function sets a new value for the Negated attribute of a Region.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* value
-* The new attribute value.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- int old;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get the original attribute value */
- old = astGetNegated( this );
-
-/* Invoke the set method inherited from the parent Region class */
- (*parent_setnegated)( this, value, status );
-
-/* If the new value is not the same as the old value, indicate that we
- need to re-calculate the cached information in the Box. */
- if( value != old ) astResetCache( this );
-}
-
-static void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status ) {
-/*
-* Name:
-* SetRegFS
-
-* Purpose:
-* Stores a new FrameSet in a Region
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status )
-
-* Class Membership:
-* Box method (over-rides the astSetRegFS method inherited from
-* the Region class).
-
-* Description:
-* This function creates a new FrameSet and stores it in the supplied
-* Region. The new FrameSet contains two copies of the supplied
-* Frame, connected by a UnitMap.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* frm
-* The Frame to use.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Invoke the parent method to store the FrameSet in the parent Region
- structure. */
- (* parent_setregfs)( this_region, frm, status );
-
-/* Indicate that we need to re-calculate the cached information in the Box. */
- astResetCache( this_region );
-}
-
-static double SetShrink( AstBox *this, double shrink, int *status ){
-/*
-* Name:
-* SetShrink
-
-* Purpose:
-* Store a new temporary shrink factor for a Box.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* double SetShrink( AstBox *this, double shrink, int *status );
-
-* Class Membership:
-* Box method
-
-* Description:
-* Boxes can be shrunk from their original size by calling this function.
-* The original shrink factor is 1.0. This function should be used for
-* assigning new values to since it also re-calculates Cahced information
-* which depends on the current shrink factor.
-
-* Parameters:
-* this
-* Pointer to the Box.
-* shrink
-* The new Shrink factor.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The original shrink factor.
-
-*/
-
-/* Local Variables: */
- double result;
-
-/* Check the inherited status. */
- if( !astOK ) return 1.0;
-
-/* Store the orignal shrink factor. */
- result = this->shrink;
-
-/* Set the new value. */
- this->shrink = shrink;
-
-/* If the new value is not the same as the old value, indicate that we
- need to re-calculate the cached information in the Box. */
- if( result != shrink ) astResetCache( this );
-
-/* Return the original value */
- return result;
-}
-
-static void SetUnc( AstRegion *this, AstRegion *unc, int *status ){
-/*
-* Name:
-* SetUnc
-
-* Purpose:
-* Store uncertainty information in a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* void SetUnc( AstRegion *this, AstRegion *unc, int *status )
-
-* Class Membership:
-* Box method (over-rides the astSetUnc method inherited from the
-* Region class).
-
-* Description:
-* Each Region (of any class) can have an "uncertainty" which specifies
-* the uncertainties associated with the boundary of the Region. This
-* information is supplied in the form of a second Region. The uncertainty
-* in any point on the boundary of a Region is found by shifting the
-* associated "uncertainty" Region so that it is centred at the boundary
-* point being considered. The area covered by the shifted uncertainty
-* Region then represents the uncertainty in the boundary position.
-* The uncertainty is assumed to be the same for all points.
-*
-* The uncertainty is usually specified when the Region is created, but
-* this function allows it to be changed at any time.
-
-* Parameters:
-* this
-* Pointer to the Region which is to be assigned a new uncertainty.
-* unc
-* Pointer to the new uncertainty Region. This must be either a Box,
-* a Circle or an Ellipse. A deep copy of the supplied Region will be
-* taken, so subsequent changes to the uncertainty Region using the
-* supplied pointer will have no effect on the Region "this".
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* Invoke the astSetUnc method inherited from the parent Region class. */
- (*parent_setunc)( this, unc, status );
-
-/* Indicate that we need to re-calculate the cached information in the Box. */
- astResetCache( this );
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* Simplify
-
-* Purpose:
-* Simplify the Mapping represented by a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* AstMapping *Simplify( AstMapping *this, int *status )
-
-* Class Membership:
-* Box method (over-rides the astSimplify method inherited
-* from the Region class).
-
-* Description:
-* This function invokes the parent Region Simplify method, and then
-* performs any further region-specific simplification.
-*
-* If the Mapping from base to current Frame is not a UnitMap, this
-* will include attempting to fit a new Region to the boundary defined
-* in the current Frame.
-
-* Parameters:
-* this
-* Pointer to the original Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the simplified Region. A cloned pointer to the
-* supplied Region will be returned if no simplication could be
-* performed.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstBox *box; /* Pointer to Box structure */
- AstBox *newbox; /* Pointer to simpler Box */
- AstFrame *frm; /* Pointer to current Frame */
- AstMapping *map; /* Base -> current Mapping */
- AstMapping *result; /* Result pointer to return */
- AstPointSet *basemesh; /* Mesh of base Frame positions */
- AstPointSet *mesh; /* Mesh of current Frame positions */
- AstPointSet *ps1; /* Box corners in base Frame */
- AstPointSet *ps2; /* Box corners in current Frame */
- AstPolygon *newpoly; /* New Polygon to replace Box */
- AstRegion *prism; /* Prism combining all axes */
- AstRegion *new; /* Pointer to simplified Region */
- AstRegion *this; /* Pointer to supplied Region structure */
- AstRegion *unc; /* Pointer to uncertainty Region */
- double **ptr1; /* Pointers to axis values in ps1 */
- double **ptr2; /* Pointers to axis values in ps2 */
- double *constants; /* Axis constants array */
- double *lbnd; /* Lower bounds for new Box */
- double *ubnd; /* Upper bounds for new Box */
- double corners[8]; /* Box corners in current Frame */
- double k; /* Axis constant value */
- double lb; /* Lower axis bound */
- double rxx; /* Element of the Jacobian matrix */
- double rxy; /* Element of the Jacobian matrix */
- double ryx; /* Element of the Jacobian matrix */
- double ryy; /* Element of the Jacobian matrix */
- double ub; /* Upper axis bound */
- int *inperm; /* Input axis permutation array */
- int *outperm; /* Output axis permutation array */
- int closed; /* Was original Region closed? */
- int feed; /* Source of value for current axis */
- int right_handed; /* Is the new Frame right handed? */
- int ic; /* Axis index */
- int isInterval; /* Is the simplified Box an Interval */
- int isNull; /* Is the simplified Box a NullRegion? */
- int neg; /* Was original Region negated? */
- int nin; /* No. of base Frame axes (Mapping inputs) */
- int nout; /* No. of current Frame axes (Mapping outputs) */
- int olddir0; /* Original value of Direction(1) attribute */
- int olddir1; /* Original value of Direction(2) attribute */
- int simpler; /* Has some simplication taken place? */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_mapping;
-
-/* Invoke the parent Simplify method inherited from the Region class. This
- will simplify the encapsulated FrameSet and uncertainty Region. */
- new = (AstRegion *) (*parent_simplify)( this_mapping, status );
-
-/* Note if any simplification took place. This is assumed to be the case
- if the pointer returned by the above call is different to the supplied
- pointer. */
- simpler = ( new != this );
-
-/* Get the Mapping from base to current Frame. */
- map = astGetMapping( new->frameset, AST__BASE, AST__CURRENT );
-
-/* Get the number of inputs and outputs for the PermMap */
- nin = astGetNin( map );
- nout = astGetNout( map );
-
-/* If the Mapping from base to current Frame is a PermMap, we now explicitly
- how to swap the axes of the Box to produce either a new Box or an
- Interval. */
- if( astIsAPermMap( map ) ){
-
-/* See if the new Box is Negated and/or Closed.*/
- neg = astGetNegated( new );
- closed = astGetClosed( new );
-
-/* Get a pointer to the Box structure. */
- newbox = (AstBox *) new;
-
-/* Ensure cached information is up to date. */
- Cache( newbox, 0, status );
-
-/* Get the input and output permutation arrays and the array of constants
- from the PermMap. */
- inperm = astGetInPerm( map );
- outperm = astGetOutPerm( map );
- constants = astGetConstants( map );
-
-/* Allocate memory to hold the axis bounds for the box in the current
- Frame. */
- lbnd = astMalloc( sizeof( double )*(size_t) nout );
- ubnd = astMalloc( sizeof( double )*(size_t) nout );
-
-/* Check pointers can be used safely. */
- if( astOK ) {
-
-/* Set flags indicating that the Box can be simplified, and does not result
- in a NullRegion or an Interval. */
- simpler = 1;
- isNull = 0;
- isInterval = 0;
-
-/* Check each output (which corresponds to an axis in the current Frame
- of the Box). */
- for( ic = 0; ic < nout; ic++ ) {
-
-/* Find the input (a base Frame axis) which feeds this output when the
- forward transformation of the PermMap is used. */
- feed = outperm[ ic ];
-
-/* If this output is fed a constant (i.e. does not depend on any of the
- inputs), then the output axis limits are equal to this constant. */
- if( feed < 0 ) {
- lbnd[ ic ] = constants[ (-feed) - 1 ];
- ubnd[ ic ] = constants[ (-feed) - 1 ];
-
-/* If this output is fed the constant AST__BAD (i.e. does not depend on any of
- the inputs), then the output axis is unbounded and we will consequently
- create an Interval rather than a Box. */
- } else if( feed >= nin ) {
- lbnd[ ic ] = AST__BAD;
- ubnd[ ic ] = AST__BAD;
-
-/* If this output is fed the value of an input, then the output limits
- are equal to the corresponding input limits. */
- } else {
- lbnd[ ic ] = newbox->centre[ feed ] - newbox->extent[ feed ]*newbox->shrink;
- ubnd[ ic ] = newbox->centre[ feed ] + newbox->extent[ feed ]*newbox->shrink;
- }
-
-/* If either bound is missing we will produce an Interval rather than a
- Box. */
- if( lbnd[ ic ] == AST__BAD || ubnd[ ic ] == AST__BAD ) {
- isInterval = 1;
- }
- }
-
-/* If any base Frame axes are not present in the current Frame, we need
- to check that the PermMap selects a slice which intersects the base
- Frame box. If the slice does not intersect the base Frame box, then
- the resulting Region willbe NullRegion. To do this, we check each
- element in the input axis permutation array, "inperm". */
- for( ic = 0; ic < nin; ic++ ) {
-
-/* Find the output (a current Frame axis) which feeds this input when the
- inverse transformation of the PermMap is used. */
- feed = inperm[ ic ];
-
-/* If this input is fed a constant (i.e. does not depend on any of the
- outputs), then we must check that this constant is within the range of
- axis values covered by the Box. If not then the simplified Box represents
- a slice through the coordinate system which does not pass through the
- original Box. In this case the simplified Region is a NullRegion
- instead of a Box. */
- if( feed < 0 ) {
- k = constants[ (-feed) - 1 ];
- lb = newbox->centre[ ic ] - newbox->extent[ ic ]*newbox->shrink;
- ub = newbox->centre[ ic ] + newbox->extent[ ic ]*newbox->shrink;
-
- if( closed == neg ) {
- isNull = ( k <= lb || k >= ub );
- } else {
- isNull = ( k < lb || k > ub );
- }
-
-/* If this input is fed the constant AST__BAD (i.e. does not depend on any of
- the outputs), then the input axis is unbounded and will consequently
- extend beyond the Box. In this case the simplified Region will be a
- NullRegion. */
- } else if( feed >= nout ) {
- isNull = 1;
-
-/* If this input is fed the value of an output, then check that the
- relationship is bi-directional. If it is not, we cannot simplify the
- Box. */
- } else if( outperm[ feed ] != ic ) {
- simpler = 0;
- break;
- }
- }
-
-/* If the Box can be simplified, create a new Region of an appropriate
- class. */
- if( simpler ) {
-
-/* Get any uncertainty from the supplied Box (it will already have been
- simplified by the parent Simplify method). */
- unc = astTestUnc( new ) ? astGetUncFrm( new, AST__CURRENT ) : NULL;
-
-/* Get the Frame represented by the Region. */
- frm = astGetFrame( new->frameset, AST__CURRENT );
-
-/* We can now replace the original Region with the simplified Region so annul
- the original pointer. */
- new = astAnnul( new );
-
-/* Create a new Region of the required class. */
- if( isNull ) {
- new = (AstRegion *) astNullRegion( frm, unc, "", status );
-
- } else if( isInterval ){
- new = (AstRegion *) astInterval( frm, lbnd, ubnd, unc, "", status );
-
- } else {
- new = (AstRegion *) astBox( frm, 1, lbnd, ubnd, unc, "", status );
- }
-
-/* If the original box was Negated. Negate the new one. */
- if( neg ) astNegate( new );
-
-/* Free resources */
- if( unc ) unc = astAnnul( unc );
- frm = astAnnul( frm );
-
- }
- }
-
-/* Free resources */
- inperm = astFree( inperm );
- outperm = astFree( outperm );
- constants = astFree( constants );
- lbnd = astFree( lbnd );
- ubnd = astFree( ubnd );
-
-/* If the Mapping from base to current Frame is not a PermMap or a UnitMap, we
- attempt to simplify the Box by re-defining it within its current Frame.
- Transforming the box from its base to its current FRame may result in
- the region no longer being a box. We test this by transforming a set of
- bounds on the box boundary. */
- } else if( !astIsAUnitMap( map ) ){
-
-/* Get pointer to current Frame. */
- frm = astGetFrame( new->frameset, AST__CURRENT );
-
-/* Get a mesh of points covering the Box in its current Frame. */
- mesh = astRegMesh( new );
-
-/* Get the Region describing the positional uncertainty within the Box in
- its current Frame. */
- unc = astGetUncFrm( new, AST__CURRENT );
-
-/* Find the best fitting box (defined in the current Frame) through these
- points */
- newbox = BestBox( frm, mesh, unc, status );
-
-/* See if all points within this mesh fall on the boundary of the best
- fitting Box, to within the uncertainty of the Region. */
- if( astRegPins( newbox, mesh, NULL, NULL ) ) {
-
-/* If so, check that the inverse is true (we need to transform the
- simplified boxes mesh into the base Frame of he original box for use by
- astRegPins). */
- (void) astAnnul( mesh );
- mesh = astRegMesh( newbox );
- basemesh = astTransform( map, mesh, 0, NULL );
- if( astRegPins( new, basemesh, NULL, NULL ) ) {
-
-/* If so, use the new Box in place of the original Box. */
- (void) astAnnul( new );
- new = astClone( newbox );
- simpler = 1;
- }
-
-/* Free resources. */
- basemesh = astAnnul( basemesh );
-
-/* If the transformed Box is not itself a Box, see if it can be
- represented accurately by a Polygon. This is only possible for
- 2-dimensional Boxes. */
- } else if( nin == 2 && nout == 2 ) {
-
-/* Create a PointSet holding the base Frame axis values at the four
- corners of the Box. */
- ps1 = astPointSet( 4, 2, "", status );
- ptr1 = astGetPoints( ps1 );
- if( astOK ) {
- box = (AstBox *) new;
- Cache( box, 0, status );
-
-/* For a "normal" right handed coordinate system, rotation from the positive
- first axis to the positive second axis is anti-clockwise. But for left
- handed coordinate systems, it's the opposite. Determine if the required
- system is left or right handed by looking at the default values for
- the Direction attribute. If the default values are equal, then the
- system is right handed - otherwise it is left handed. We need to clear
- any set Direction value first in order to get the default value, but
- take care to re-instate any set Direction values afterwards. */
- if( astTestDirection( frm, 0 ) ) {
- olddir0 = astGetDirection( frm, 0 ) ? 1 : 0;
- astClearDirection( frm, 0 );
- } else {
- olddir0 = -1;
- }
-
- if( astTestDirection( frm, 1 ) ) {
- olddir1 = astGetDirection( frm, 1 ) ? 1 : 0;
- astClearDirection( frm, 1 );
- } else {
- olddir1 = -1;
- }
-
- right_handed = ( astGetDirection( frm, 0 ) == astGetDirection( frm, 1 ) );
-
- if( olddir0 != - 1 ) astSetDirection( frm, 0, olddir0 );
- if( olddir1 != - 1 ) astSetDirection( frm, 1, olddir1 );
-
-/* The Mapping may change the handedness of the axes. That is, the
- Mapping may reverse one axis without reversing the other. This will be
- the case if the determinant of the Jacobian matrix of the Mapping is
- negative. Get the determinant. If it is negative, reverse the
- handedness of the axes. */
- rxx = astRate( map, box->centre, 0, 0 );
- rxy = astRate( map, box->centre, 0, 1 );
- ryx = astRate( map, box->centre, 1, 0 );
- ryy = astRate( map, box->centre, 1, 1 );
- if( rxx*ryy - rxy*ryx < 0 ) right_handed = ! right_handed;
-
-/* The order in which the polygon vertices are stored determines whether
- the interior or exterior of the polygon forms the inside of the
- Region. We want the inside to be the interior so we must store the
- vertices in anti-clockwise order within the new coordinate Frame. Do
- right handed systems first. */
- if( right_handed ) {
- ptr1[ 0 ][ 0 ] = box->centre[ 0 ] - box->extent[ 0 ];
- ptr1[ 1 ][ 0 ] = box->centre[ 1 ] + box->extent[ 1 ];
-
- ptr1[ 0 ][ 1 ] = box->centre[ 0 ] - box->extent[ 0 ];
- ptr1[ 1 ][ 1 ] = box->centre[ 1 ] - box->extent[ 1 ];
-
- ptr1[ 0 ][ 2 ] = box->centre[ 0 ] + box->extent[ 0 ];
- ptr1[ 1 ][ 2 ] = box->centre[ 1 ] - box->extent[ 1 ];
-
- ptr1[ 0 ][ 3 ] = box->centre[ 0 ] + box->extent[ 0 ];
- ptr1[ 1 ][ 3 ] = box->centre[ 1 ] + box->extent[ 1 ];
-
-/* For left handed systems, "anti-clockwise" implies the opposite order */
- } else {
- ptr1[ 0 ][ 3 ] = box->centre[ 0 ] - box->extent[ 0 ];
- ptr1[ 1 ][ 3 ] = box->centre[ 1 ] + box->extent[ 1 ];
-
- ptr1[ 0 ][ 2 ] = box->centre[ 0 ] - box->extent[ 0 ];
- ptr1[ 1 ][ 2 ] = box->centre[ 1 ] - box->extent[ 1 ];
-
- ptr1[ 0 ][ 1 ] = box->centre[ 0 ] + box->extent[ 0 ];
- ptr1[ 1 ][ 1 ] = box->centre[ 1 ] - box->extent[ 1 ];
-
- ptr1[ 0 ][ 0 ] = box->centre[ 0 ] + box->extent[ 0 ];
- ptr1[ 1 ][ 0 ] = box->centre[ 1 ] + box->extent[ 1 ];
- }
- }
-
-/* Transform the Box corners into the current Frame. */
- ps2 = astTransform( map, ps1, 1, NULL );
- ptr2 = astGetPoints( ps2 );
- if( astOK ) {
-
-/* Create a Polygon from these points. */
- for( ic = 0; ic < 4; ic++ ) {
- corners[ ic ] = ptr2[ 0 ][ ic ];
- corners[ 4 + ic ] = ptr2[ 1 ][ ic ];
- }
- newpoly = astPolygon( frm, 4, 4, corners, unc, "", status );
-
-/* See if all points within the Box mesh fall on the boundary of this
- Polygon, to within the uncertainty of the Region. */
- if( astRegPins( newpoly, mesh, NULL, NULL ) ) {
-
-/* If so, use the new Polygon in place of the original Box. */
- (void) astAnnul( new );
- new = astClone( newpoly );
- simpler = 1;
- }
-
-/* Free resources. */
- newpoly = astAnnul( newpoly );
- }
-
- ps1 = astAnnul( ps1 );
- ps2 = astAnnul( ps2 );
- }
-
-/* If we have yet been able to produce a simpler region, we now try
- splitting the Box into two separate Boxes defined in separate
- coordinate Frames. If either of these two Boxes can be simplified,
- create a Prism containing the two simplified Boxes, and attempt to
- simplify the Prism. Otherwise a clone of "new" is returned by
- astConvertToPrism. */
- if( !simpler ) {
- prism = astConvertToPrism( new );
-
- if( prism != new ) {
- simpler = 1;
- (void) astAnnul( new );
- new = prism;
-
- } else {
- prism = astAnnul( prism );
- }
- }
-
- frm = astAnnul( frm );
- mesh = astAnnul( mesh );
- unc = astAnnul( unc );
- newbox = astAnnul( newbox );
- }
-
- map = astAnnul( map );
-
-/* If any simplification could be performed, copy Region attributes from
- the supplied Region to the returned Region, and return a pointer to it.
- If the supplied Region had no uncertainty, ensure the returned Region
- has no uncertainty. Otherwise, return a clone of the supplied pointer. */
- if( simpler ){
- astRegOverlay( new, this, 1 );
- result = (AstMapping *) new;
-
- } else {
- new = astAnnul( new );
- result = astClone( this );
- }
-
-/* If an error occurred, annul the returned pointer. */
- if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a Box to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* Box member function (over-rides the astTransform protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function takes a Box and a set of points encapsulated in a
-* PointSet and transforms the points by setting axis values to
-* AST__BAD for all points which are outside the region. Points inside
-* the region are copied unchanged from input to output.
-
-* Parameters:
-* this
-* Pointer to the Box.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - The forward and inverse transformations are identical for a
-* Region.
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of axes in the Frame represented by the Box.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstBox *box; /* Pointer to Box */
- AstFrame *frm; /* Pointer to base Frame in FrameSet */
- AstPointSet *pset_tmp; /* Pointer to PointSet holding base Frame positions*/
- AstPointSet *result; /* Pointer to output PointSet */
- AstRegion *reg; /* Pointer to Region */
- double **ptr_out; /* Pointer to output coordinate data */
- double **ptr_tmp; /* Pointer to base Frame coordinate data */
- double axval; /* Input axis value */
- int closed; /* Is the boundary part of the Region? */
- int coord; /* Zero-based index for coordinates */
- int ncoord_out; /* No. of coordinates per output point */
- int ncoord_tmp; /* No. of coordinates per base Frame point */
- int neg; /* Is the Box negated?*/
- int npoint; /* No. of points */
- int ok; /* Is the point inside the Region? */
- int point; /* Loop counter for points */
-
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain pointers to the Regionand to the Box. */
- reg = (AstRegion *) this;
- box = (AstBox *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Region class. This function validates
- all arguments and generates an output PointSet if necessary,
- containing a copy of the input PointSet. */
- result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- calculations needed to generate the output coordinate values. */
-
-/* First use the encapsulated FrameSet to transform the supplied positions
- from the current Frame in the encapsulated FrameSet (the Frame
- represented by the Region), to the base Frame (the Frame in which the
- Region is defined). This call also returns a pointer to the base Frame
- of the encapsulated FrameSet. Note, the returned pointer may be a
- clone of the "in" pointer, and so we must be carefull not to modify the
- contents of the returned PointSet. */
- pset_tmp = astRegTransform( reg, in, 0, NULL, &frm );
-
-/* Determine the numbers of points and coordinates per point from the base
- Frame PointSet and obtain pointers for accessing the base Frame and output
- coordinate values. */
- npoint = astGetNpoint( pset_tmp );
- ncoord_tmp = astGetNcoord( pset_tmp );
- ptr_tmp = astGetPoints( pset_tmp );
- ncoord_out = astGetNcoord( result );
- ptr_out = astGetPoints( result );
-
-/* See if the boundary is part of the Region. */
- closed = astGetClosed( reg );
-
-/* See if the Box is negated */
- neg = astGetNegated( reg );
-
-/* Ensire the cached information is up to date. */
- Cache( box, 1, status );
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
- if ( astOK ) {
-
-/* The logic used to combine axis values for negated and un-negated boxes
- is different. For negated boxes, a position is in the region if *any
- one* axis is not "close" to the box centre. */
- if( neg ) {
-
-/* Loop round each point */
- for ( point = 0; point < npoint; point++ ) {
-
-/* Assume the point is outside the Region (since the Region is
- negated, this means assuming it is within the box). */
- ok = 0;
-
-/* Loop round each axis value at this point. We break as soon as we find
- a bad axis value or an axis value which is outside the box. */
- for ( coord = 0; coord < ncoord_tmp; coord++ ) {
-
-/* The point is definiately not in the Region if any input axis value is bad. */
- axval = ptr_tmp[ coord ][ point ];
- if( axval == AST__BAD ) {
- break;
-
-/* Otherwise check the current axis value, depending on whether the
- boundary is included in the Region or not. Break as soon as an axis
- value is found which is outside the box limits (i.e. in the Region). */
- } else if( !astAxIn( frm, coord, box->lo[ coord ], box->hi[ coord ],
- axval, !closed ) ) {
- ok = 1;
- break;
- }
- }
-
-/* If this point is not inside the Region store bad output axis values. */
- if( !ok ) {
- for ( coord = 0; coord < ncoord_out; coord++ ) {
- ptr_out[ coord ][ point ] = AST__BAD;
- }
- }
- }
-
-/* For un-negated boxes, a position is in the region if *all* axes are "close"
- to the box centre. */
- } else {
-
-/* Loop round each point */
- for ( point = 0; point < npoint; point++ ) {
-
-/* Assume the point is within the Region (i.e.inside the box). */
- ok = 1;
-
-/* Loop round each axis value at this point. We break when we find a bad
- input point or if any axis value is outside the box. */
- for ( coord = 0; coord < ncoord_tmp; coord++ ) {
-
-/* The point is not in the Region if any input axis value is bad. */
- axval = ptr_tmp[ coord ][ point ];
- if( axval == AST__BAD ) {
- ok = 0;
- break;
-
-/* Otherwise check the current axis value, depending on whether the
- boundary is included in the Region or not. Break as soon as an axis
- value is found which is outside the box limits (i.e. outside the Region). */
- } else if( !astAxIn( frm, coord, box->lo[ coord ], box->hi[ coord ],
- axval, closed ) ) {
- ok = 0;
- break;
- }
- }
-
-/* If this point is outside the Region store bad output axis values. */
- if( !ok ) {
- for ( coord = 0; coord < ncoord_out; coord++ ) {
- ptr_out[ coord ][ point ] = AST__BAD;
- }
- }
- }
- }
- }
-
-/* Free resources */
- pset_tmp = astAnnul( pset_tmp );
- frm = astAnnul( frm );
-
-/* Annul the result if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for Region objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for Region objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstBox *in; /* Pointer to input Box */
- AstBox *out; /* Pointer to output Box */
- int nax; /* Number of base Frame axes */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Boxs. */
- in = (AstBox *) objin;
- out = (AstBox *) objout;
-
-/* For safety, first clear any references to the input memory from
- the output Box. */
- out->extent = NULL;
- out->shextent = NULL;
- out->centre = NULL;
- out->lo = NULL;
- out->hi = NULL;
- out->geolen = NULL;
-
-/* Copy dynamic memory contents */
- nax = astGetNin( ((AstRegion *) in)->frameset );
- out->extent = astStore( NULL, in->extent,
- sizeof( double )*(size_t)nax );
- out->centre = astStore( NULL, in->centre,
- sizeof( double )*(size_t)nax );
- out->shextent = astStore( NULL, in->shextent,
- sizeof( double )*(size_t)nax );
- out->lo = astStore( NULL, in->lo,
- sizeof( double )*(size_t)nax );
- out->hi = astStore( NULL, in->hi,
- sizeof( double )*(size_t)nax );
- out->geolen = astStore( NULL, in->geolen,
- sizeof( double )*(size_t)nax );
-}
-
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for Box objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for Box objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstBox *this; /* Pointer to Box */
-
-/* Obtain a pointer to the Box structure. */
- this = (AstBox *) obj;
-
-/* Annul all resources. */
- this->extent = astFree( this->extent );
- this->centre = astFree( this->centre );
- this->shextent = astFree( this->shextent );
- this->lo = astFree( this->lo );
- this->hi = astFree( this->hi );
- this->geolen = astFree( this->geolen );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for Box objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the Box class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the Box whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstBox *this; /* Pointer to the Box structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Box structure. */
- this = (AstBox *) this_object;
-
-/* Write out values representing the instance variables for the
- Box class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* There are no values to write, so return without further action. */
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsABox and astCheckBox functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(Box,Region)
-astMAKE_CHECK(Box)
-
-AstBox *astBox_( void *frame_void, int form, const double point1[],
- const double point2[], AstRegion *unc, const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astBox
-f AST_BOX
-
-* Purpose:
-* Create a Box.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "box.h"
-c AstBox *astBox( AstFrame *frame, int form, const double point1[],
-c const double point2[], AstRegion *unc,
-c const char *options, ... )
-f RESULT = AST_BOX( FRAME, FORM, POINT1, POINT2, UNC, OPTIONS, STATUS )
-
-* Class Membership:
-* Box constructor.
-
-* Description:
-* This function creates a new Box and optionally initialises its
-* attributes.
-*
-* The Box class implements a Region which represents a box with sides
-* parallel to the axes of a Frame (i.e. an area which encloses a given
-* range of values on each axis). A Box is similar to an Interval, the
-* only real difference being that the Interval class allows some axis
-* limits to be unspecified. Note, a Box will only look like a box if
-* the Frame geometry is approximately flat. For instance, a Box centred
-* close to a pole in a SkyFrame will look more like a fan than a box
-* (the Polygon class can be used to create a box-like region close to a
-* pole).
-
-* Parameters:
-c frame
-f FRAME = INTEGER (Given)
-* A pointer to the Frame in which the region is defined. A deep
-* copy is taken of the supplied Frame. This means that any
-* subsequent changes made to the Frame using the supplied pointer
-* will have no effect the Region.
-c form
-f FORM = INTEGER (Given)
-* Indicates how the box is described by the remaining parameters.
-* A value of zero indicates that the box is specified by a centre
-* position and a corner position. A value of one indicates that the
-* box is specified by a two opposite corner positions.
-c point1
-f POINT1( * ) = DOUBLE PRECISION (Given)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* (Naxes attribute). If
-c "form"
-f FORM
-* is zero, this array should contain the coordinates at the centre of
-* the box.
-c If "form"
-f If FORM
-* is one, it should contain the coordinates at the corner of the box
-* which is diagonally opposite the corner specified by
-c "point2".
-f POINT2.
-c point2
-f POINT2( * ) = DOUBLE PRECISION (Given)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* (Naxes attribute) containing the coordinates at any corner of the
-* box.
-c unc
-f UNC = INTEGER (Given)
-* An optional pointer to an existing Region which specifies the
-* uncertainties associated with the boundary of the Box being created.
-* The uncertainty in any point on the boundary of the Box is found by
-* shifting the supplied "uncertainty" Region so that it is centred at
-* the boundary point being considered. The area covered by the
-* shifted uncertainty Region then represents the uncertainty in the
-* boundary position. The uncertainty is assumed to be the same for
-* all points.
-*
-* If supplied, the uncertainty Region must be of a class for which
-* all instances are centro-symetric (e.g. Box, Circle, Ellipse, etc.)
-* or be a Prism containing centro-symetric component Regions. A deep
-* copy of the supplied Region will be taken, so subsequent changes to
-* the uncertainty Region using the supplied pointer will have no
-* effect on the created Box. Alternatively,
-f a null Object pointer (AST__NULL)
-c a NULL Object pointer
-* may be supplied, in which case a default uncertainty is used
-* equivalent to a box 1.0E-6 of the size of the Box being created.
-*
-* The uncertainty Region has two uses: 1) when the
-c astOverlap
-f AST_OVERLAP
-* function compares two Regions for equality the uncertainty
-* Region is used to determine the tolerance on the comparison, and 2)
-* when a Region is mapped into a different coordinate system and
-* subsequently simplified (using
-c astSimplify),
-f AST_SIMPLIFY),
-* the uncertainties are used to determine if the transformed boundary
-* can be accurately represented by a specific shape of Region.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new Box. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new Box. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astBox()
-f AST_BOX = INTEGER
-* A pointer to the new Box.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-
-* Status Handling:
-* The protected interface to this function includes an extra
-* parameter at the end of the parameter list descirbed above. This
-* parameter is a pointer to the integer inherited status
-* variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *frame; /* Pointer to Frame structure */
- AstBox *new; /* Pointer to new Box */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the supplied Frame structure. */
- frame = astCheckFrame( frame_void );
-
-/* Initialise the Box, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitBox( NULL, sizeof( AstBox ), !class_init, &class_vtab,
- "Box", frame, form, point1, point2, unc );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new Box's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new Box. */
- return new;
-}
-
-AstBox *astBoxId_( void *frame_void, int form, const double point1[],
- const double point2[], void *unc_void, const char *options,
- ... ) {
-/*
-* Name:
-* astBoxId_
-
-* Purpose:
-* Create a Box.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* AstBox *astBoxId_( AstFrame *frame, int form, const double point1[],
-* const double point2[], AstRegion *unc,
-* const char *options, ... )
-
-* Class Membership:
-* Box constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astBox constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astBox_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astBox_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astBox_.
-
-* Returned Value:
-* The ID value associated with the new Box.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *frame; /* Pointer to Frame structure */
- AstBox *new; /* Pointer to new Box */
- AstRegion *unc; /* Pointer to Region structure */
- va_list args; /* Variable argument list */
-
- int *status; /* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a Frame pointer from the supplied ID and validate the
- pointer to ensure it identifies a valid Frame. */
- frame = astVerifyFrame( astMakePointer( frame_void ) );
-
-/* Obtain a Region pointer from the supplied "unc" ID and validate the
- pointer to ensure it identifies a valid Region . */
- unc = unc_void ? astCheckRegion( astMakePointer( unc_void ) ) : NULL;
-
-/* Initialise the Box, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitBox( NULL, sizeof( AstBox ), !class_init, &class_vtab,
- "Box", frame, form, point1, point2, unc );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new Box's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new Box. */
- return astMakeId( new );
-}
-
-AstBox *astInitBox_( void *mem, size_t size, int init, AstBoxVtab *vtab,
- const char *name, AstFrame *frame, int form,
- const double point1[], const double point2[],
- AstRegion *unc, int *status ) {
-/*
-*+
-* Name:
-* astInitBox
-
-* Purpose:
-* Initialise a Box.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "box.h"
-* AstBox *astInitBox_( void *mem, size_t size, int init, AstBoxVtab *vtab,
-* const char *name, AstFrame *frame, int form,
-* const double point1[], const double point2[],
-* AstRegion *unc )
-
-* Class Membership:
-* Box initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new Box object. It allocates memory (if necessary) to accommodate
-* the Box plus any additional data associated with the derived class.
-* It then initialises a Box structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a Box at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the Box is to be initialised.
-* This must be of sufficient size to accommodate the Box data
-* (sizeof(Box)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the Box (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the Box
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the Box's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new Box.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-* frame
-* A pointer to the Frame in which the region is defined.
-* form
-* Indicates how the box is described by the remaining parameters.
-* A value of zero indicates that the box is specified by a centre
-* position and a corner position. A value of one indicates that the
-* box is specified by a two opposite corner positions.
-* point1
-* An array of double, with one element for each Frame axis (Naxes
-* attribute). If "form" is zero, this array should contain the
-* coordinates at the centre of the box. If "form" is one, it should
-* contain the coordinates at the corner of the box which is diagonally
-* opposite the corner specified by "point2".
-* point2
-* An array of double, with one element for each Frame axis (Naxes
-* attribute) containing the coordinates at any of the corners of
-* the box.
-* unc
-* A pointer to a Region which specifies the uncertainty in the
-* supplied positions (all points on the boundary of the new Box
-* being initialised are assumed to have the same uncertainty). A NULL
-* pointer can be supplied, in which case default uncertainties equal to
-* 1.0E-6 of the dimensions of the new Box's bounding box are used.
-* If an uncertainty Region is supplied, it must be either a Box, a
-* Circle or an Ellipse, and its encapsulated Frame must be related
-* to the Frame supplied for parameter "frame" (i.e. astConvert
-* should be able to find a Mapping between them). Two positions
-* the "frame" Frame are considered to be co-incident if their
-* uncertainty Regions overlap. The centre of the supplied
-* uncertainty Region is immaterial since it will be re-centred on the
-* point being tested before use. A deep copy is taken of the supplied
-* Region.
-
-* Returned Value:
-* A pointer to the new Box.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstBox *new; /* Pointer to new Box */
- AstPointSet *pset; /* PointSet to pass to Region initialiser */
- double **ptr; /* Pointer to coords data in pset */
- int i; /* axis index */
- int nc; /* No. of axes */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitBoxVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Get the number of axis values required for each position. */
- nc = astGetNaxes( frame );
-
-/* Create a PointSet to hold the supplied values, and get points to the
- data arrays. */
- pset = astPointSet( 2, nc, "", status );
- ptr = astGetPoints( pset );
-
-/* Copy the supplied coordinates into the PointSet, checking that no bad
- values have been supplied. */
- for( i = 0; astOK && i < nc; i++ ) {
- if( point1[ i ] == AST__BAD ) {
- astError( AST__BADIN, "astInitBox(%s): The value of axis %d is "
- "undefined at point 1 of the box.", status, name, i + 1 );
- break;
- }
- if( point2[ i ] == AST__BAD ) {
- astError( AST__BADIN, "astInitBox(%s): The value of axis %d is "
- "undefined at point 2 of the box.", status, name, i + 1 );
- break;
- }
- ptr[ i ][ 0 ] = point1[ i ];
- ptr[ i ][ 1 ] = point2[ i ];
- }
-
-/* If two corners were supplied, find and store the centre. */
- if( form == 1 ) {
- for( i = 0; i < nc; i++ ) {
- ptr[ i ][ 0 ] = 0.5*( point1[ i ] + point2[ i ] );
- }
- }
-
-/* Check pointers can be used safely. */
- if( astOK ) {
-
-/* Initialise a Region structure (the parent class) as the first component
- within the Box structure, allocating memory if necessary. */
- new = (AstBox *) astInitRegion( mem, size, 0, (AstRegionVtab *) vtab,
- name, frame, pset, unc );
-
- if ( astOK ) {
-
-/* Initialise the Box data. */
-/* ------------------------ */
- new->shrink = 1.0;
- new->extent = NULL;
- new->shextent = NULL;
- new->centre = NULL;
- new->lo = NULL;
- new->hi = NULL;
- new->geolen = NULL;
- new->stale = 1;
-
-/* If an error occurred, clean up by deleting the new Box. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Free resources. */
- pset = astAnnul( pset );
-
-/* Return a pointer to the new Box. */
- return new;
-}
-
-AstBox *astLoadBox_( void *mem, size_t size, AstBoxVtab *vtab,
- const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadBox
-
-* Purpose:
-* Load a Box.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "box.h"
-* AstBox *astLoadBox( void *mem, size_t size, AstBoxVtab *vtab,
-* const char *name, AstChannel *channel )
-
-* Class Membership:
-* Box loader.
-
-* Description:
-* This function is provided to load a new Box using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* Box structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a Box at the start of the memory
-* passed via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory into which the Box is to be
-* loaded. This must be of sufficient size to accommodate the
-* Box data (sizeof(Box)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the Box (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the Box structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstBox) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new Box. If this is NULL, a pointer
-* to the (static) virtual function table for the Box class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "Box" is used instead.
-
-* Returned Value:
-* A pointer to the new Box.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstBox *new; /* Pointer to the new Box */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this Box. In this case the
- Box belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstBox );
- vtab = &class_vtab;
- name = "Box";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitBoxVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built Box. */
- new = astLoadRegion( mem, size, (AstRegionVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "Box" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* There are no values to read. */
-/* ---------------------------- */
-
-/* Initialise Box data */
- new->shrink = 1.0;
- new->extent = NULL;
- new->shextent = NULL;
- new->centre = NULL;
- new->lo = NULL;
- new->hi = NULL;
- new->geolen = NULL;
- new->stale = 1;
-
-/* If an error occurred, clean up by deleting the new Box. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new Box pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-
-void astBoxPoints_( AstBox *this, double *centre, double *corner,
- int *status) {
- if ( !astOK ) return;
- (**astMEMBER(this,Box,BoxPoints))( this, centre, corner, status );
- return;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/box.h b/ast-5.3-1/box.h
deleted file mode 100644
index f7d313e..0000000
--- a/ast-5.3-1/box.h
+++ /dev/null
@@ -1,236 +0,0 @@
-#if !defined( BOX_INCLUDED ) /* Include this file only once */
-#define BOX_INCLUDED
-/*
-*+
-* Name:
-* box.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the Box class.
-
-* Invocation:
-* #include "box.h"
-
-* Description:
-* This include file defines the interface to the Box class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The Box class implement a Region which represents a simple interval
-* on each axis of the encapsulated Frame
-
-* Inheritance:
-* The Box class inherits from the Region class.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 22-MAR-2003 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "region.h" /* Coordinate regions (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* Box structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstBox {
-
-/* Attributes inherited from the parent class. */
- AstRegion region; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- double *extent; /* Original axis half-widths */
- double *shextent; /* Shrunk axis half-widths */
- double *centre; /* Box centre coords */
- double shrink; /* Temporary shrink factor */
- double *lo; /* Shrunk low limits */
- double *hi; /* Shrunk high limits */
- double *geolen; /* Geodesic half-dimensions of box */
- int stale; /* Is other info out of date? */
-} AstBox;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstBoxVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstRegionVtab region_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- void (* BoxPoints)( AstBox *, double *, double *, int *);
-} AstBoxVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstBoxGlobals {
- AstBoxVtab Class_Vtab;
- int Class_Init;
-} AstBoxGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitBoxGlobals_( AstBoxGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Box) /* Check class membership */
-astPROTO_ISA(Box) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstBox *astBox_( void *, int, const double[], const double[], AstRegion *, const char *, int *, ...);
-#else
-AstBox *astBoxId_( void *, int, const double[], const double[], AstRegion *, const char *, ... )__attribute__((format(printf,6,7)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstBox *astInitBox_( void *, size_t, int, AstBoxVtab *,
- const char *, AstFrame *, int, const double[],
- const double[], AstRegion *, int * );
-
-/* Vtab initialiser. */
-void astInitBoxVtab_( AstBoxVtab *, const char *, int * );
-
-/* Loader. */
-AstBox *astLoadBox_( void *, size_t, AstBoxVtab *,
- const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS) /* Protected */
-void astBoxPoints_( AstBox *, double *, double *, int *);
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckBox(this) astINVOKE_CHECK(Box,this,0)
-#define astVerifyBox(this) astINVOKE_CHECK(Box,this,1)
-
-/* Test class membership. */
-#define astIsABox(this) astINVOKE_ISA(Box,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astBox astINVOKE(F,astBox_)
-#else
-#define astBox astINVOKE(F,astBoxId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitBox(mem,size,init,vtab,name,frame,form,p1,p2,unc) \
-astINVOKE(O,astInitBox_(mem,size,init,vtab,name,frame,form,p1,p2,unc,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitBoxVtab(vtab,name) astINVOKE(V,astInitBoxVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadBox(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadBox_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckBox to validate Box pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-#define astBoxPoints(this,centre,corner) astINVOKE(V,astBoxPoints_(astCheckBox(this),centre,corner,STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/c2f77.c b/ast-5.3-1/c2f77.c
deleted file mode 100644
index 28696c9..0000000
--- a/ast-5.3-1/c2f77.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
-* Name:
-* c2f77.c
-
-* Purpose:
-* Implement the interface between the C and FORTRAN 77 languages.
-
-* Description:
-* This file implements language-specific functions which support
-* the FORTRAN 77 interface to the AST library.
-*
-* Note that this module is not a class implementation, although it
-* resembles one.
-
-* Notes:
-* - Some of the functions in this module are potentially platform
-* dependent and may need to be re-implemented when porting the AST
-* library to new platforms.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 15-NOV-1996 (RFWS):
-* Original version (based on work by DSB and on code from the
-* Starlink CNF library).
-*/
-
-/* Define the astCLASS macro (even although this is not a class
- implementation) to obtain access to protected interfaces. */
-#define astCLASS
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "error.h" /* Error reporting facilities */
-#include "c2f77.h" /* Interface to this module */
-
-/* Function implementations. */
-/* ========================= */
-void astStringExport_( const char *source_c, char *dest_f, int dest_len ) {
-/*
-*+
-* Name:
-* astStringExport
-
-* Purpose:
-* Export a C string to a FORTRAN string.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "c2f77.h"
-* void astStringExport( const char *source_c, char *dest_f, int dest_len )
-
-* Description:
-* This function creates a FORTRAN string from a C string, storing
-* it in the supplied memory. If the C string is shorter than the
-* space allocated for the FORTRAN string, then it is padded with
-* blanks. If the C string is longer than the space allocated for
-* the FORTRAN string, then the string is truncated.
-
-* Parameters:
-* source_c
-* A pointer to the input C string.
-* dest_f
-* A pointer to the output FORTRAN string.
-* dest_len
-* The length of the output FORTRAN string.
-
-* Notes:
-* - This function is potentially platform-specific. For example,
-* if FORTRAN strings were passed by descriptor, then the
-* descriptor address would be passed as "dest_f" and this must
-* then be used to locate the actual FORTRAN character data.
-* - This function is described as protected but is in fact
-* available through the public interface so that it may be used in
-* constructing the FORTRAN 77 public interface.
-* - This is the UNIX version of this function.
-*-
-*/
-
-/* Local Variables:*/
- int i; /* Loop counter for characters */
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Copy the characters of the input C string to the output FORTRAN
- string, taking care not to go beyond the end of the FORTRAN
- string.*/
- for ( i = 0; source_c[ i ] && ( i < dest_len ); i++ ) {
- dest_f[ i ] = source_c[ i ];
- }
-
-/* Fill the rest of the output FORTRAN string with blanks. */
- for ( ; i < dest_len; i++ ) dest_f[ i ] = ' ';
-}
diff --git a/ast-5.3-1/c2f77.h b/ast-5.3-1/c2f77.h
deleted file mode 100644
index a06494e..0000000
--- a/ast-5.3-1/c2f77.h
+++ /dev/null
@@ -1,166 +0,0 @@
-#if !defined( C2F77_INCLUDED ) /* Include this file only once */
-#define C2F77_INCLUDED
-/*
-*+
-* Name:
-* c2f77.h
-
-* Purpose:
-* Define the interface to the c2f77 module.
-
-* Description:
-* This file defines language-specific functions which support the
-* FORTRAN 77 interface to the AST library.
-*
-* Note that this module is not a class implementation, although it
-* resembles one.
-
-* Functions Defined:
-* Public:
-* None.
-*
-* Protected:
-* astStringExport
-* Export a C string to a FORTRAN string.
-
-* Macros Defined:
-* Public:
-* None.
-*
-* Protected:
-* astWatchSTATUS
-* Execute C code while watching a FORTRAN STATUS variable.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 15-NOV-1996 (RFWS):
-* Original version.
-* 16-JUL-1997 (RFWS):
-* Added astWatchSTATUS.
-* 13-JUN-2001 (DSB):
-* Make astStringExport available to F77 interface modules as well
-* as AST classes.
-*-
-*/
-
-/* Macros. */
-/* ======= */
-/*
-*+
-* Name:
-* astWatchSTATUS
-
-* Type:
-* Protected macro.
-
-* Purpose:
-* Execute C code while watching a FORTRAN STATUS variable.
-
-* Synopsis:
-* #include "c2f77.h"
-* astWatchSTATUS(code)
-
-* Description:
-* This macro expands to code which executes the C code supplied
-* via the "code" argument in a new C scope (delimited by
-* {...}). The code supplied executes while the AST error status is
-* equated to a variable called STATUS, which is an error status
-* argument passed from a FORTRAN routine using the macros defined
-* in the "f77.h" include file.
-*
-* The effect of this is roughly as if the astWatch function had
-* been used to locally declare the FORTRAN STATUS argument as a
-* new AST error status variable, except that this macro also works
-* if STATUS is not an int.
-
-* Parameters:
-* code
-* The C code to be executed.
-
-* Examples:
-* F77_SUBROUTINE(ast_doit)( INTEGER(STATUS) ) {
-* astWatchSTATUS(
-* astDoit();
-* )
-* }
-* Causes the astDoit function to be invoked as if the AST error
-* status were equated to the STATUS argument passed from
-* FORTRAN. Typically, if STATUS is set to an error value,
-* astDoit would detect this by means of the astOK macro and
-* would not then execute. If an error occurs in astDoit,
-* causing the AST error status to be set, then that value is
-* transferred to STATUS after the C code has executed (i.e. at
-* the end of the astWatchSTATUS macro).
-
-* Notes:
-* - The FORTRAN argument must be called STATUS and must appear in
-* the C function's parameter list as an argument of the INTEGER()
-* macro defined in the "f77.h" include file.
-* - The C code supplied executes in a new scope, in which
-* automatic variables may be declared. However, such variables
-* will not exist after the macro's expansion has been executed.
-* - The AST error status variable and its value remain unchanged
-* after the expansion of this macro has executed.
-*-
-*/
-
-/* Define the macro. */
-#define astWatchSTATUS(code) \
-\
-/* Begin a new C scope. */ \
-{ \
-\
-/* Ensure that a pointer to the STATUS argument exists. */ \
- GENPTR_INTEGER(STATUS) \
-\
-/* Store the STATUS value in a local int. */ \
- int ast_local_status = *STATUS; \
- int *status = &ast_local_status; \
-\
-/* Make this int the AST error status variable, saving the address of \
- the previous variable. */ \
- int *ast_previous_status = astWatch( &ast_local_status ); \
-\
-/* Execute the code supplied using the new error status variable. */ \
- code \
-\
-/* Restore the original error status variable. */ \
- (void) astWatch( ast_previous_status ); \
-\
-/* Return the final error status to STATUS. */ \
- *STATUS = ast_local_status; \
-}
-
-/* Function prototypes. */
-/* ==================== */
-void astStringExport_( const char *, char *, int );
-
-/* Function interfaces. */
-/* ==================== */
-/* These wrap up the functions defined by this module to make them
- easier to use. */
-#define astStringExport astStringExport_
-#endif
diff --git a/ast-5.3-1/channel.c b/ast-5.3-1/channel.c
deleted file mode 100644
index 708ed28..0000000
--- a/ast-5.3-1/channel.c
+++ /dev/null
@@ -1,5898 +0,0 @@
-/*
-*class++
-* Name:
-* Channel
-
-* Purpose:
-* Basic (textual) I/O channel.
-
-* Constructor Function:
-c astChannel
-f AST_CHANNEL
-
-* Description:
-* The Channel class implements low-level input/output for the AST
-* library. Writing an Object to a Channel will generate a textual
-* representation of that Object, and reading from a Channel will
-* create a new Object from its textual representation.
-*
-* Normally, when you use a Channel, you should provide "source"
-c and "sink" functions which connect it to an external data store
-f and "sink" routines which connect it to an external data store
-* by reading and writing the resulting text. By default, however,
-* a Channel will read from standard input and write to standard
-* output.
-
-* Inheritance:
-* The Channel class inherits from the Object class.
-
-* Attributes:
-* In addition to those attributes common to all Objects, every
-* Channel also has the following attributes:
-*
-* - Comment: Include textual comments in output?
-* - Full: Set level of output detail
-* - ReportLevel: Selects the level of error reporting
-* - Skip: Skip irrelevant data?
-* - Strict: Generate errors instead of warnings?
-
-* Functions:
-c In addition to those functions applicable to all Objects, the
-c following functions may also be applied to all Channels:
-f In addition to those routines applicable to all Objects, the
-f following routines may also be applied to all Channels:
-*
-c - astWarnings: Return warnings from the previous read or write
-c - astPutChannelData: Store data to pass to source or sink functions
-c - astRead: Read an Object from a Channel
-c - astWrite: Write an Object to a Channel
-f - AST_WARNINGS: Return warnings from the previous read or write
-f - AST_READ: Read an Object from a Channel
-f - AST_WRITE: Write an Object to a Channel
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Copyright (C) 2009 Science & Technology Facilities Council.
-* All Rights Reserved.
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 12-AUG-1996 (RFWS):
-* Original version.
-* 6-SEP-1996:
-* Finished initial implementation.
-* 11-DEC-1996 (RFWS):
-* Added support for foreign language source and sink functions.
-* 28-APR-1997 (RFWS):
-* Prevent "-0" being written (use "0" instead).
-* 27-NOV-2002 (DSB):
-* Added astWriteInvocations.
-* 8-JAN-2003 (DSB):
-* - Changed private InitVtab method to protected astInitChannelVtab
-* method.
-* - Modified to use protected Vtab initialisation methods when
-* loading an Object.
-* 1-NOV-2003 (DSB):
-* Change the initialiser so that it accepts source and sink
-* wrapper functions as arguments (for use by derived classes).
-* 16-AUG-2006 (DSB):
-* - Document non-destructive nature of unsuccessful astRead calls
-* on a FitsChan.
-* 3-OCT-2008 (DSB):
-* Added "Strict" attribute.
-* 11-DEC-2008 (DSB):
-* Added astPutChannelData and astChannelData functions.
-* 16-JAN-2009 (DSB):
-* Added astAddWarning and astWarnings.
-* 11-JUN-2009 (DSB):
-* Enable astChannelData to be used from within astRead.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS Channel
-
-/* Define a string containing the maximum length of keywords used to
- identify values in the external representation of data. This is
- deliberately kept small so as to simplify integration with
- standards such as FITS. */
-#define MAX_NAME "8"
-
-/* Define the increment used for indenting output text. */
-#define INDENT_INC 3
-
-/* Max length of string returned by GetAttrib */
-#define GETATTRIB_BUFF_LEN 50
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "channel.h" /* Interface definition for this class */
-#include "loader.h" /* Interface to the global loader */
-#include "keymap.h" /* Storing arbitrary data in an AST Object */
-#include "globals.h" /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <errno.h>
-#include <float.h>
-#include <limits.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->AstReadClassData_Msg = 0; \
- globals->GetAttrib_Buff[ 0 ] = 0; \
- globals->Items_Written = 0; \
- globals->Current_Indent = 0; \
- globals->Nest = -1; \
- globals->Nwrite_Invoc = 0; \
- globals->Object_Class = NULL; \
- globals->Values_List = NULL; \
- globals->Values_Class = NULL; \
- globals->Values_OK = NULL; \
- globals->End_Of_Object = NULL; \
- globals->Channel_Data = NULL;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Channel)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Channel,Class_Init)
-#define class_vtab astGLOBAL(Channel,Class_Vtab)
-#define astreadclassdata_msg astGLOBAL(Channel,AstReadClassData_Msg)
-#define getattrib_buff astGLOBAL(Channel,GetAttrib_Buff)
-#define items_written astGLOBAL(Channel,Items_Written)
-#define current_indent astGLOBAL(Channel,Current_Indent)
-#define nest astGLOBAL(Channel,Nest)
-#define nwrite_invoc astGLOBAL(Channel,Nwrite_Invoc)
-#define object_class astGLOBAL(Channel,Object_Class)
-#define values_list astGLOBAL(Channel,Values_List)
-#define values_class astGLOBAL(Channel,Values_Class)
-#define values_ok astGLOBAL(Channel,Values_OK)
-#define end_of_object astGLOBAL(Channel,End_Of_Object)
-#define channel_data astGLOBAL(Channel,Channel_Data)
-
-
-
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX2 pthread_mutex_lock( &mutex2 );
-#define UNLOCK_MUTEX2 pthread_mutex_unlock( &mutex2 );
-
-static pthread_mutex_t mutex3 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX3 pthread_mutex_lock( &mutex3 );
-#define UNLOCK_MUTEX3 pthread_mutex_unlock( &mutex3 );
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-/* Contextual error message reported in astReadClassData? */
-static int astreadclassdata_msg = 0;
-
-/* Buffer returned by GetAttrib. */
-static char getattrib_buff[ GETATTRIB_BUFF_LEN + 1 ];
-
-/* Count of the number of output items written since the last "Begin"
- or "IsA" item. */
-static int items_written = 0;
-
-/* Amount of indentation to be applied to the next output item. */
-static int current_indent = 0;
-
-/* Nesting level, used to keep track of data associated with building
- Objects when they contain other Objects. */
-static int nest = -1;
-
-/* The number of times astWrite has been invoked. */
-static int nwrite_invoc = 0;
-
-/* Pointer to a user-supplied block of memory to be made available to
- source or sink functions via the astChannelData function. */
-static void *channel_data = NULL;
-
-/***
- The following items are all pointers to dynamically allocated
- arrays (stacks) that grow as necessary to accommodate one element
- for each level of nesting (one more than the value of "nest").
-***/
-
-/* Stack of pointers to null-terminated character strings giving the
- names of the classes of the Objects being built at each nesting
- level. */
-static char **object_class = NULL;
-
-/* Stack of pointers to the elements designated as the "heads" of
- circular, doubly linked lists of name-value associations. */
-static AstChannelValue **values_list = NULL;
-
-/* Stack of pointers to null-terminated character strings giving the
- names of the classes for which the values held in the values lists
- are intended. */
-static char **values_class = NULL;
-
-/* Stack of flags indicating whether the values held in the values
- lists are intended for the class loaders currently executing to
- build Objects at each nesting level. */
-static int *values_ok = NULL;
-
-/* Stack of flags indicating whether "End" items have been read for
- the Objects being built at each nesting level. */
-static int *end_of_object = NULL;
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstChannelVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-#define LOCK_MUTEX3
-#define UNLOCK_MUTEX3
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstChannel *astChannelForId_( const char *(*)( void ),
- char *(*)( const char *(*)( void ), int * ),
- void (*)( const char * ),
- void (*)( void (*)( const char * ),
- const char *, int * ),
- const char *, ... );
-AstChannel *astChannelId_( const char *(*)( void ), void (*)( const char * ), const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstObject *Read( AstChannel *, int * );
-static AstObject *ReadObject( AstChannel *, const char *, AstObject *, int * );
-static AstChannelValue *FreeValue( AstChannelValue *, int * );
-static AstChannelValue *LookupValue( const char *, int * );
-static AstKeyMap *Warnings( AstChannel *, int * );
-static char *GetNextText( AstChannel *, int * );
-static char *InputTextItem( AstChannel *, int * );
-static char *ReadString( AstChannel *, const char *, const char *, int * );
-static char *SourceWrap( const char *(*)( void ), int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static double ReadDouble( AstChannel *, const char *, double, int * );
-static int GetComment( AstChannel *, int * );
-static int GetFull( AstChannel *, int * );
-static int GetReportLevel( AstChannel *, int * );
-static int GetSkip( AstChannel *, int * );
-static int GetStrict( AstChannel *, int * );
-static int ReadInt( AstChannel *, const char *, int, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestComment( AstChannel *, int * );
-static int TestFull( AstChannel *, int * );
-static int TestReportLevel( AstChannel *, int * );
-static int TestSkip( AstChannel *, int * );
-static int TestStrict( AstChannel *, int * );
-static int Use( AstChannel *, int, int, int * );
-static int Write( AstChannel *, AstObject *, int * );
-static void AddWarning( AstChannel *, int, const char *, const char *, int * );
-static void AppendValue( AstChannelValue *, AstChannelValue **, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void ClearComment( AstChannel *, int * );
-static void ClearFull( AstChannel *, int * );
-static void ClearReportLevel( AstChannel *, int * );
-static void ClearSkip( AstChannel *, int * );
-static void ClearStrict( AstChannel *, int * );
-static void ClearValues( AstChannel *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void GetNextData( AstChannel *, int, char **, char **, int * );
-static void OutputTextItem( AstChannel *, const char *, int * );
-static void PutChannelData( AstChannel *, void *, int * );
-static void PutNextText( AstChannel *, const char *, int * );
-static void ReadClassData( AstChannel *, const char *, int * );
-static void RemoveValue( AstChannelValue *, AstChannelValue **, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetComment( AstChannel *, int, int * );
-static void SetFull( AstChannel *, int, int * );
-static void SetReportLevel( AstChannel *, int, int * );
-static void SetSkip( AstChannel *, int, int * );
-static void SetStrict( AstChannel *, int, int * );
-static void SinkWrap( void (*)( const char * ), const char *, int * );
-static void Unquote( AstChannel *, char *, int * );
-static void WriteBegin( AstChannel *, const char *, const char *, int * );
-static void WriteDouble( AstChannel *, const char *, int, int, double, const char *, int * );
-static void WriteEnd( AstChannel *, const char *, int * );
-static void WriteInt( AstChannel *, const char *, int, int, int, const char *, int * );
-static void WriteIsA( AstChannel *, const char *, const char *, int * );
-static void WriteObject( AstChannel *, const char *, int, int, AstObject *, const char *, int * );
-static void WriteString( AstChannel *, const char *, int, int, const char *, const char *, int * );
-
-/* Member functions. */
-/* ================= */
-static void AddWarning( AstChannel *this, int level, const char *msg,
- const char *method, int *status ) {
-/*
-*+
-* Name:
-* astAddWarning
-
-* Purpose:
-* Add a warning to a Channel.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "channel.h"
-* void astAddWarning( AstChannel *this, int level, const char *msg,
-* const char *method, int status, ... )
-
-* Class Membership:
-* Channel method.
-
-* Description:
-* This function stores a warning message inside a Channel. These
-* messages can be retirieved using astWarnings.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* level
-* Ignore the warning if the ReportLevel attribute value is less
-* than "level".
-* msg
-* The wanting message to store. It may contain printf format
-* specifiers. If a NULL pointer is supplied, all warnings
-* currently stored in the Channel are removed.
-* method
-* The method name.
-* status
-* Inherited status value.
-* ...
-* Extra values to substitute into the message string as
-* replacements for the printf format specifiers.
-*-
-
-* Note: The expansion of the printf format specifiers is done in the
-* astAddWarning_ wrapper function. The AddWarning functions defined by
-* each class receives the fully expanded message and does not have a
-* variable argument list. The variable argument list is included in the
-* above prologue in order to document the wrapper function.
-
-*/
-
-/* Local Variables: */
- int i; /* Message index */
- char *a; /* Pointer to copy of message */
-
-/* If a NULL pointer was supplied, free all warnings currently in the
- Channel. Do this before checking the inherited status so that it works
- even if an error has occurred. */
- if( !msg ) {
- for( i = 0; i < this->nwarn; i++ ) {
- (this->warnings)[ i ] = astFree( (this->warnings)[ i ] );
- }
- this->warnings = astFree( this->warnings );
- this->nwarn = 0;
- return;
- }
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Only proceed if the message level is sufficiently important. */
- if( astGetReportLevel( this ) >= level ) {
-
-/* If we are being strict, issue an error rather than a warning. */
- if( astGetStrict( this ) ) {
- if( astOK ) {
- astError( AST__BADIN, "%s(%s): %s", status, method,
- astGetClass( this ), msg );
- }
-
-/* Otherwise, we store a copy of the message in the Channel. */
- } else {
-
-/* Allocate memory and store a copy of th supplied string in it. */
- a = astStore( NULL, msg, strlen( msg ) + 1 );
-
-/* Expand the array of warning pointers in ther Channel structure. */
- this->warnings = astGrow( this->warnings, this->nwarn + 1,
- sizeof( char * ) );
-
-/* If all is OK so far, store the new warning pointer, and increment the
- number of warnings in the Channel. */
- if( astOK ) {
- (this->warnings)[ (this->nwarn)++ ] = a;
-
-/* Otherwise, attempt to free the memory holding the copy of the warning. */
- } else {
- a = astFree( a );
- }
- }
- }
-}
-
-static void AppendValue( AstChannelValue *value, AstChannelValue **head, int *status ) {
-/*
-* Name:
-* AppendValue
-
-* Purpose:
-* Append a Value structure to a list.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "channel.h"
-* void AppendValue( AstChannelValue *value, AstChannelValue **head, int *status )
-
-* Class Membership:
-* Channel member function.
-
-* Description:
-* This function appends a Value structure to a doubly linked
-* circular list of such structures. The new list element is
-* inserted just in front of the element occupying the "head of
-* list" position (i.e. it becomes the new last element in the
-* list).
-
-* Parameters:
-* value
-* Pointer to the new element. This must not already be in the
-* list.
-* head
-* Address of a pointer to the element at the head of the list
-* (this pointer should be NULL if the list is initially
-* empty). This pointer will only be updated if a new element is
-* being added to an empty list.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function does not perform error chacking and does not
-* generate errors.
-*/
-
-/* If the list is initially empty, the sole new element points at
- itself. */
- if ( !*head ) {
- value->flink = value;
- value->blink = value;
-
-/* Update the list head to identify the new element. */
- *head = value;
-
-/* Otherwise, insert the new element in front of the element at the
- head of the list. */
- } else {
- value->flink = *head;
- value->blink = ( *head )->blink;
- ( *head )->blink = value;
- value->blink->flink = value;
- }
-}
-
-void *astChannelData_( void ) {
-/*
-c++
-* Name:
-* astChannelData
-
-* Purpose:
-* Return a pointer to user-supplied data stored with a Channel.
-
-* Type:
-* Public macro.
-
-* Synopsis:
-* #include "channel.h"
-* void *astChannelData
-
-* Class Membership:
-* Channel macro.
-
-* Description:
-* This macro is intended to be used within the source or sink
-* functions associated with a Channel. It returns any pointer
-* previously stored in the Channel (that is, the Channel that has
-* invoked the source or sink function) using astPutChannelData.
-*
-* This mechanism is a thread-safe alternative to passing file
-* descriptors, etc, via static global variables.
-
-* Returned Value:
-* astChannelData
-* The pointer previously stored with the Channel using
-* astPutChannelData. A NULL pointer will be returned if no such
-* pointer has been stored with the Channel.
-
-* Applicability:
-* Channel
-* This macro applies to all Channels.
-
-* Notes:
-* - This routine is not available in the Fortran 77 interface to
-* the AST library.
-c--
-*/
- astDECLARE_GLOBALS;
- astGET_GLOBALS(NULL);
- return channel_data;
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a Channel.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "channel.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Channel member function (over-rides the astClearAttrib protected
-* method inherited from the Object class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* Channel, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstChannel *this; /* Pointer to the Channel structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Channel structure. */
- this = (AstChannel *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* Comment. */
-/* -------- */
- if ( !strcmp( attrib, "comment" ) ) {
- astClearComment( this );
-
-/* Full. */
-/* ----- */
- } else if ( !strcmp( attrib, "full" ) ) {
- astClearFull( this );
-
-/* ReportLevel. */
-/* ------------ */
- } else if ( !strcmp( attrib, "reportlevel" ) ) {
- astClearReportLevel( this );
-
-/* Skip. */
-/* ----- */
- } else if ( !strcmp( attrib, "skip" ) ) {
- astClearSkip( this );
-
-/* Strict. */
-/* ------- */
- } else if ( !strcmp( attrib, "strict" ) ) {
- astClearStrict( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static void ClearValues( AstChannel *this, int *status ) {
-/*
-* Name:
-* ClearValues
-
-* Purpose:
-* Clear the current values list.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "channel.h"
-* void ClearValues( AstChannel *this, int *status )
-
-* Class Membership:
-* Channel member function.
-
-* Description:
-* This function clears any (un-read) Value structures remaining in
-* the current values list (i.e. at the current nesting level). It
-* should be invoked after all required values have been read.
-*
-* If the values list has not been read, or if any remaining values
-* are found (i.e. the list is not empty) then this indicates an
-* unrecognised input class or an input value that has not been
-* read by a class loader. This implies an error in the loader, or
-* bad input data, so an error is reported.
-*
-* All resources used by any remaining Value structures are freed
-* and the values list is left in an empty state.
-
-* Parameters:
-* this
-* Pointer to the Channel being read. This is only used for
-* constructing error messages. It must not be NULL.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function attempts to execute even if the global error
-* status is set on entry, although no further error report will be
-* made if it subsequently fails under these circumstances.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstChannelValue **head; /* Address of pointer to values list */
- AstChannelValue *value; /* Pointer to value list element */
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* If "values_class" is non-NULL, then the values list has previously
- been filled with Values for a class. */
- if ( values_class[ nest ] ) {
-
-/* If "values_ok" is zero, however, then these Values have not yet
- been read by a class loader. This must be due to a bad class name
- associated with them or because the class data are not available in
- the correct order. If we are using strict error reporting, then report
- an error (unless the error status is already set). */
- if ( astGetStrict( this ) && !values_ok[ nest ] && astOK ) {
- astError( AST__BADIN,
- "astRead(%s): Invalid class structure in input data.", status,
- astGetClass( this ) );
- astError( AST__BADIN,
- "Class \"%s\" is invalid or out of order within a %s.", status,
- values_class[ nest ], object_class[ nest ] );
- }
-
-/* Free the memory holding the class string. */
- values_class[ nest ] = astFree( values_class[ nest ] );
- }
-
-/* Reset the "values_ok" flag. */
- values_ok[ nest ] = 0;
-
-/* Now clear any Values remaining in the values list. Obtain the
- address of the pointer to the head of this list (at the current
- nesting level) and loop to remove Values from the list while it is
- not empty. */
- head = values_list + nest;
- while ( *head ) {
-
-/* Obtain a pointer to the first element. */
- value = *head;
-
-/* Issue a warning. */
- if ( value->is_object ) {
- astAddWarning( this, 1, "The Object \"%s = <%s>\" was "
- "not recognised as valid input.", "astRead", status,
- value->name, astGetClass( value->ptr.object ) );
- } else {
- astAddWarning( this, 1, "The value \"%s = %s\" was not "
- "recognised as valid input.", "astRead", status,
- value->name, value->ptr.string );
- }
-
-/* Remove the Value structure from the list (which updates the head of
- list pointer) and free its resources. */
- RemoveValue( value, head, status );
- value = FreeValue( value, status );
- }
-}
-
-static AstChannelValue *FreeValue( AstChannelValue *value, int *status ) {
-/*
-* Name:
-* FreeValue
-
-* Purpose:
-* Free a dynamically allocated Value structure.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "channel.h"
-* AstChannelValue *FreeValue( AstChannelValue *value, int *status )
-
-* Class Membership:
-* Channel member function.
-
-* Description:
-* This function frees a dynamically allocated Value structure,
-* releasing all resources used by it. The structure contents must
-* have been correctly initialised.
-
-* Parameters:
-* value
-* Pointer to the Value structure to be freed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A NULL pointer is always returned.
-
-* Notes:
-* - This function attempts to execute even if the global error
-* status is set on entry, although no further error report will be
-* made if it subsequently fails under these circumstances.
-*/
-
-/* Check that a non-NULL pointer has been supplied. */
- if ( value ) {
-
-/* If the "name" component has been allocated, then free it. */
- if ( value->name ) value->name = astFree( value->name );
-
-/* If the "ptr" component identifies an Object, then annul the Object
- pointer. */
- if ( value->is_object ) {
- if ( value->ptr.object ) {
- value->ptr.object = astAnnul( value->ptr.object );
- }
-
-/* Otherwise, if it identifies a string, then free the string. */
- } else {
- if ( value->ptr.string ) {
- value->ptr.string = astFree( value->ptr.string );
- }
- }
-
-/* Free the Value structure itself. */
- value = astFree( value );
- }
-
-/* Return a NULL pointer. */
- return NULL;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a Channel.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "channel.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Channel member function (over-rides the protected astGetAttrib
-* method inherited from the Object class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a Channel, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* attrib
-* Pointer to a null terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the Channel, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the Channel. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstChannel *this; /* Pointer to the Channel structure */
- const char *result; /* Pointer value to return */
- int comment; /* Comment attribute value */
- int full; /* Full attribute value */
- int report_level; /* ReportLevel attribute value */
- int skip; /* Skip attribute value */
- int strict; /* Report errors insead of warnings? */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the Channel structure. */
- this = (AstChannel *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null terminated string in an appropriate
- format. Set "result" to point at the result string. */
-
-/* Comment. */
-/* -------- */
- if ( !strcmp( attrib, "comment" ) ) {
- comment = astGetComment( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", comment );
- result = getattrib_buff;
- }
-
-/* Full. */
-/* ----- */
- } else if ( !strcmp( attrib, "full" ) ) {
- full = astGetFull( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", full );
- result = getattrib_buff;
- }
-
-/* ReportLevel. */
-/* ------------ */
- } else if ( !strcmp( attrib, "reportlevel" ) ) {
- report_level = astGetReportLevel( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", report_level );
- result = getattrib_buff;
- }
-
-/* Skip. */
-/* ----- */
- } else if ( !strcmp( attrib, "skip" ) ) {
- skip = astGetSkip( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", skip );
- result = getattrib_buff;
- }
-
-/* Strict. */
-/* ------- */
- } else if ( !strcmp( attrib, "strict" ) ) {
- strict = astGetStrict( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", strict );
- result = getattrib_buff;
- }
-
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-
-}
-
-static void GetNextData( AstChannel *this, int skip, char **name,
- char **val, int *status ) {
-/*
-*+
-* Name:
-* astGetNextData
-
-* Purpose:
-* Read the next item of data from a data source.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "channel.h"
-* void astGetNextData( AstChannel *this, int skip, char **name,
-* char **val )
-
-* Class Membership:
-* Channel method.
-
-* Description:
-* This function reads the next item of input data from a data
-* source associated with a Channel and returns the result.
-*
-* It is layered conceptually on the astGetNextText method, but
-* instead of returning the raw input text, it decodes it and
-* returns name/value pairs ready for use. Note that in some
-* derived classes, where the data are not stored as text, this
-* function may not actually use astGetNextText, but will access
-* the data directly.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* skip
-* A non-zero value indicates that a new Object is to be read,
-* and that all input data up to the next "Begin" item are to be
-* skipped in order to locate it. This is useful if the data
-* source contains AST objects interspersed with other data (but
-* note that these other data cannot appear inside AST Objects,
-* only between them).
-*
-* A zero value indicates that all input data are significant
-* and the next item will therefore be read and an attempt made
-* to interpret it whatever it contains. Any other data
-* inter-mixed with AST Objects will then result in an error.
-* name
-* An address at which to store a pointer to a null-terminated
-* dynamically allocated string containing the name of the next
-* item in the input data stream. This name will be in lower
-* case with no surrounding white space. It is the callers
-* responsibilty to free the memory holding this string (using
-* astFree) when it is no longer required.
-*
-* A NULL pointer value will be returned (without error) to
-* indicate when there are no further input data items to be
-* read.
-* val
-* An address at which to store a pointer to a null-terminated
-* dynamically allocated string containing the value associated
-* with the next item in the input data stream. No case
-* conversion is performed on this string and all white space is
-* potentially significant. It is the callers responsibilty to
-* free the memory holding this string (using astFree) when it
-* is no longer required.
-*
-* The returned pointer will be NULL if an Object data item is
-* read (see the "Data Representation" section).
-
-* Data Representation:
-* The returned data items fall into the following categories:
-*
-* - Begin: Identified by the name string "begin", this indicates
-* the start of an Object definition. The associated value string
-* gives the class name of the Object being defined.
-*
-* - IsA: Identified by the name string "isa", this indicates the
-* end of the data associated with a particular class structure
-* within the definiton of a larger Object. The associated value
-* string gives the name of the class whose data have just been
-* read.
-*
-* - End: Identified by the name string "end", this indicates the
-* end of the data associated with a complete Object
-* definition. The associated value string gives the class name of
-* the Object whose definition is being ended.
-*
-* - Non-Object: Identified by any other name string plus a
-* non-NULL "val" pointer, this gives the value of a non-Object
-* structure component (instance variable). The name identifies
-* which instance variable it is (within the context of the class
-* whose data are being read) and the value is encoded as a string.
-*
-* - Object: Identified by any other name string plus a NULL "val"
-* pointer, this identifies the value of an Object structure
-* component (instance variable). The name identifies which
-* instance variable it is (within the context of the class whose
-* data are being read) and the value is given by subsequent data
-* items (so the next item should be a "Begin" item).
-
-* Notes:
-* - NULL pointer values will be returned if this function is
-* invoked with the global error status set, or if it should fail
-* for any reason.
-* - This method is provided primarily so that derived classes may
-* over-ride it in order to read from alternative data sources. It
-* provides a higher-level interface than astGetNextText, so is
-* suitable for classes that either need to read textual data in a
-* different format, or to read from non-textual data sources.
-*-
-*/
-
-/* Local Variables: */
- char *line; /* Pointer to input text line */
- int done; /* Data item read? */
- int i; /* Loop counter for string characters */
- int len; /* Length of input text line */
- int nc1; /* Offset to start of first field */
- int nc2; /* Offset to end of first field */
- int nc3; /* Offset to start of second field */
- int nc; /* Number of charaters read by "astSscanf" */
-
-/* Initialise the returned values. */
- *name = NULL;
- *val = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Read the next input line as text (the loop is needed to allow
- initial lines to be skipped if the "skip" flag is set). */
- done = 0;
- while ( !done && ( line = InputTextItem( this, status ) ) && astOK ) {
-
-/* If OK, determine the line length. */
- len = strlen( line );
-
-/* Non-Object value. */
-/* ----------------- */
-/* Test for lines of the form " name = value" (or similar), where the
- name is no more than MAX_NAME characters long (the presence of a
- value on the right hand side indicates that this is a non-Object
- value, encoded as a string). Ignore these lines if the "skip" flag
- is set. */
- if ( nc = 0,
- ( !skip
- && ( 0 == astSscanf( line,
- " %n%*" MAX_NAME "[^ \t=]%n = %n%*[^\n]%n",
- &nc1, &nc2, &nc3, &nc ) )
- && ( nc >= len ) ) ) {
-
-/* Note we have found a data item. */
- done = 1;
-
-/* Extract the name and value fields. */
- *name = astString( line + nc1, nc2 - nc1 );
- *val = astString( line + nc3, len - nc3 );
-
-/* If OK, truncate the value to remove any trailing white space. */
- if ( astOK ) {
- i = len - nc3 - 1;
- while ( ( i >= 0 ) && isspace( ( *val )[ i ] ) ) i--;
- ( *val )[ i + 1 ] = '\0';
-
-/* Also remove any quotes from the string. */
- Unquote( this, *val, status );
- }
-
-/* Object value. */
-/* ------------- */
-/* Test for lines of the form " name = " (or similar), where the name
- is no more than MAX_NAME characters long (the absence of a value on
- the right hand side indicates that this is an Object, whose
- definition follows on subsequent input lines). Ignore these lines
- if the "skip" flag is set. */
- } else if ( nc = 0,
- ( !skip
- && ( 0 == astSscanf( line,
- " %n%*" MAX_NAME "[^ \t=]%n = %n",
- &nc1, &nc2, &nc ) )
- && ( nc >= len ) ) ) {
-
-/* Note we have found a data item. */
- done = 1;
-
-/* Extract the name field but leave the value pointer as NULL. */
- *name = astString( line + nc1, nc2 - nc1 );
-
-/* Begin. */
-/* ------ */
-/* Test for lines of the form " Begin Class " (or similar). */
- } else if ( nc = 0,
- ( ( 0 == astSscanf( line,
- " %*1[Bb]%*1[Ee]%*1[Gg]%*1[Ii]%*1[Nn] %n%*s%n %n",
- &nc1, &nc2, &nc ) )
- && ( nc >= len ) ) ) {
-
-/* Note we have found a data item. */
- done = 1;
-
-/* Set the returned name to "begin" and extract the associated class
- name for the value. Store both of these in dynamically allocated
- strings. */
- *name = astString( "begin", 5 );
- *val = astString( line + nc1, nc2 - nc1 );
-
-/* IsA. */
-/* ---- */
-/* Test for lines of the form " IsA Class " (or similar). Ignore these
- lies if the "skip" flag is set. */
- } else if ( nc = 0,
- ( !skip
- && ( 0 == astSscanf( line,
- " %*1[Ii]%*1[Ss]%*1[Aa] %n%*s%n %n",
- &nc1, &nc2, &nc ) )
- && ( nc >= len ) ) ) {
-
-/* Note we have found a data item. */
- done = 1;
-
-/* Set the returned name to "isa" and extract the associated class
- name for the value. */
- *name = astString( "isa", 3 );
- *val = astString( line + nc1, nc2 - nc1 );
-
-/* End. */
-/* ---- */
-/* Test for lines of the form " End Class " (or similar). Ignore these
- lines if the "skip" flag is set. */
- } else if ( nc = 0,
- ( !skip
- && ( 0 == astSscanf( line,
- " %*1[Ee]%*1[Nn]%*1[Dd] %n%*s%n %n",
- &nc1, &nc2, &nc ) )
- && ( nc >= len ) ) ) {
-
-/* Note we have found a data item. */
- done = 1;
-
-/* If found, set the returned name to "end" and extract the associated
- class name for the value. */
- *name = astString( "end", 3 );
- *val = astString( line + nc1, nc2 - nc1 );
-
-/* If the input line didn't match any of the above and the "skip" flag
- is not set, then report an error. */
- } else if ( !skip ) {
- astError( AST__BADIN,
- "astRead(%s): Cannot interpret the input data: \"%s\".", status,
- astGetClass( this ), line );
- }
-
-/* Free the memory holding the input data as text. */
- line = astFree( line );
- }
-
-/* If successful, convert the name to lower case. */
- if ( astOK && *name ) {
- for ( i = 0; ( *name )[ i ]; i++ ) {
- ( *name )[ i ] = tolower( ( *name )[ i ] );
- }
- }
-
-/* If an error occurred, ensure that any memory allocated is freed and
- that NULL pointer values are returned. */
- if ( !astOK ) {
- *name = astFree( *name );
- *val = astFree( *val );
- }
-}
-
-static char *GetNextText( AstChannel *this, int *status ) {
-/*
-*+
-* Name:
-* GetNextText
-
-* Purpose:
-* Read the next line of input text from a data source.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "channel.h"
-* char *astGetNextText( AstChannel *this )
-
-* Class Membership:
-* Channel method.
-
-* Description:
-* This function reads the next "raw" input line of text from the
-* data source associated with a Channel.
-*
-* Each line is returned as a pointer to a null-terminated string
-* held in dynamic memory, and it is the caller's responsibility to
-* free this memory (using astFree) when it is no longer
-* required. A NULL pointer is returned if there are no more input
-* lines to be read.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-
-* Returned Value:
-* Pointer to a null-terminated string containing the input line
-* (held in dynamically allocated memory, which must be freed by
-* the caller when no longer required). A NULL pointer is returned
-* if there are no more input lines to be read.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-* - This method is provided primarily so that derived classes may
-* over-ride it in order to read from alternative (textual) data
-* sources.
-*-
-*/
-
-/* Local Constants: */
-#define MIN_CHARS 81 /* Initial size for allocating memory */
-#define ERRBUF_LEN 80
-
-/* Local Variables: */
- char errbuf[ ERRBUF_LEN ]; /* Buffer for system error message */
- char *errstat; /* Pointer for system error message */
- char *line; /* Pointer to line data to be returned */
- int c; /* Input character */
- int len; /* Length of input line */
- int readstat; /* "errno" value set by "getchar" */
- int size; /* Size of allocated memory */
-
-/* Initialise. */
- line = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return line;
-
-/* About to call an externally supplied function which may not be
- thread-safe, so lock a mutex first. */
- LOCK_MUTEX3;
-
-/* Source function defined. */
-/* ------------------------ */
-/* If a source function (and its wrapper function) is defined for the
- Channel, use the wrapper function to invoke the source function to
- read a line of input text. This is returned in a dynamically
- allocated string. */
- if ( this->source && this->source_wrap ) {
- line = ( *this->source_wrap )( this->source, status );
-
-/* No source function. */
-/* ------------------- */
-/* Read the line from standard input. */
- } else {
- c = '\0';
- len = 0;
- size = 0;
-
-/* Loop to read input characters, saving any "errno" value that may be
- set by "getchar" if an error occurs. Quit if an end of file (or
- error) occurs or if a newline character is read. */
- while ( errno = 0, c = getchar(), readstat = errno,
- ( c != EOF ) && ( c != '\n' ) ) {
-
-/* If no memory has yet been allocated to hold the line, allocate some
- now, using MIN_CHARS as the initial line length. */
- if ( !line ) {
- line = astMalloc( sizeof( char ) * (size_t) MIN_CHARS );
- size = MIN_CHARS;
-
-/* If memory has previously been allocated, extend it when necessary
- to hold the new input character (plus a terminating null) and note
- the new size. */
- } else if ( ( len + 2 ) > size ) {
- line = astGrow( line, len + 2, sizeof( char ) );
- if ( !astOK ) break;
- size = (int) astSizeOf( line );
- }
-
-/* Store the character just read. */
- line[ len++ ] = c;
- }
-
-/* If the above loop completed without setting the global error
- status, check the last character read and use "ferror" to see if a
- read error occurred. If so, report the error, using the saved
- "errno" value (but only if one was set). */
- if ( astOK && ( c == EOF ) && ferror( stdin ) ) {
- if ( readstat ) {
-#if HAVE_STRERROR_R
- strerror_r( readstat, errbuf, ERRBUF_LEN );
- errstat = errbuf;
-#else
- errstat = strerror( readstat );
-#endif
- astError( AST__RDERR,
- "astRead(%s): Read error on standard input - %s.", status,
- astGetClass( this ), errbuf );
- } else {
- astError( AST__RDERR,
- "astRead(%s): Read error on standard input.", status,
- astGetClass( this ) );
- }
- }
-
-/* If an empty line has been read, allocate memory to hold an empty
- string. */
- if ( !line && ( c == '\n' ) ) {
- line = astMalloc( sizeof( char ) );
- }
-
-/* If memory has been allocated and there has been no error,
- null-terminate the string of input characters. */
- if ( line ) {
- if ( astOK ) {
- line[ len ] = '\0';
-
-/* If there has been an error, free the allocated memory. */
- } else {
- line = astFree( line );
- }
- }
- }
-
- UNLOCK_MUTEX3;
-
-/* Return the result pointer. */
- return line;
-
-/* Undefine macros local to this function. */
-#undef MIN_CHARS
-#undef ERRBUF_LEN
-}
-
-static AstKeyMap *Warnings( AstChannel *this, int *status ){
-/*
-*++
-* Name:
-c astWarnings
-f AST_WARNINGS
-
-* Purpose:
-* Returns any warnings issued by the previous read or write operation.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "channel.h"
-c AstKeyMap *astWarnings( AstChannel *this )
-f RESULT = AST_WARNINGS( THIS, STATUS )
-
-* Class Membership:
-* Channel member function.
-
-* Description:
-* This function returns an AST KeyMap object holding the text of any
-* warnings issued as a result of the previous invocation of the
-c astRead or astWrite
-f AST_READ or AST_WRITE
-* function on the Channel. If no warnings were issued, a
-c a NULL value
-f AST__NULL
-* will be returned.
-*
-* Such warnings are non-fatal and will not prevent the
-* read or write operation succeeding. However, the converted object
-* may not be identical to the original object in all respects.
-* Differences which would usually be deemed as insignificant in most
-* usual cases will generate a warning, whereas more significant
-* differences will generate an error.
-*
-* The "Strict" attribute allows this warning facility to be switched
-* off, so that a fatal error is always reported for any conversion
-* error.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Channel.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astWarnings()
-f AST_WARNINGS = INTEGER
-* A pointer to the KeyMap holding the warning messages, or
-c NULL
-f AST__NULL
-* if no warnings were issued during the previous read operation.
-
-* Applicability:
-* Channel
-* The basic Channel class generates a warning when ever an
-* un-recognised item is encountered whilst reading an Object from
-* an external data source. If Strict is zero (the default), then
-* unexpected items in the Object description are simply ignored,
-* and any remaining items are used to construct the returned
-* Object. If Strict is non-zero, an error will be reported and a
-* NULL Object pointer returned if any unexpected items are
-* encountered.
-*
-* As AST continues to be developed, new attributes are added
-* occasionally to selected classes. If an older version of AST is
-* used to read external Object descriptions created by a more
-* recent version of AST, then the Channel class will, by default,
-* ignore the new attributes, using the remaining attributes to
-* construct the Object. This is usually a good thing. However,
-* since external Object descriptions are often stored in plain
-* text, it is possible to edit them using a text editor. This
-* gives rise to the possibility of genuine errors in the
-* description due to finger-slips, typos, or simple
-* mis-understanding. Such inappropriate attributes will be ignored
-* if Strict is left at its default zero value. This will cause the
-* mis-spelled attribute to revert to its default value,
-* potentially causing subtle changes in the behaviour of
-* application software. If such an effect is suspected, the Strict
-* attribute can be set non-zero, resulting in the erroneous
-* attribute being identified in an error message.
-* FitsChan
-* The returned KeyMap will contain warnings for all conditions
-* listed in the Warnings attribute.
-* XmlChan
-* Reports conversion errors that result in what are usally
-* insignificant changes.
-
-* Notes:
-* - The returned KeyMap uses keys of the form "Warning_1",
-* "Warning_2", etc.
-* - A value of
-c NULL will be returned if this function is invoked with the AST
-c error status set,
-f AST__NULL will be returned if this function is invoked with STATUS
-f set to an error value,
-* or if it should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
- AstKeyMap *result;
- char key[ 20 ];
- int i;
-
-/* Check the global status, and supplied keyword name. */
- result = NULL;
- if( !astOK ) return result;
-
-/* Check there are some warnings to return. */
- if( this->nwarn && this->warnings ) {
-
-/* Create the KeyMap. */
- result = astKeyMap( "", status );
-
-/* Loop round all warnings, adding them into the KeyMap. */
- for( i = 0; i < this->nwarn; i++ ){
- sprintf( key, "Warning_%d", i + 1 );
- astMapPut0C( result, key, (this->warnings)[ i ], " " );
- }
- }
-
-/* Return the KeyMap. */
- return result;
-}
-
-AstChannel *astInitChannel_( void *mem, size_t size, int init,
- AstChannelVtab *vtab, const char *name,
- const char *(* source)( void ),
- char *(* source_wrap)( const char *(*)( void ), int * ),
- void (* sink)( const char * ),
- void (* sink_wrap)( void (*)( const char * ),
- const char *, int * ), int *status ) {
-/*
-*+
-* Name:
-* astInitChannel
-
-* Purpose:
-* Initialise a Channel.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "channel.h"
-* AstChannel *astInitChannel( void *mem, size_t size, int init,
-* AstChannelVtab *vtab, const char *name,
-* const char *(* source)( void ),
-* char *(* source_wrap)( const char *(*)( void ), int * ),
-* void (* sink)( const char * ),
-* void (* sink_wrap)( void (*)( const char * ),
-* const char *, int * ) )
-
-* Class Membership:
-* Channel initialiser.
-
-* Description:
-* This function is provided for use by class implementations to
-* initialise a new Channel object. It allocates memory (if
-* necessary) to accommodate the Channel plus any additional data
-* associated with the derived class. It then initialises a
-* Channel structure at the start of this memory. If the "init"
-* flag is set, it also initialises the contents of a virtual
-* function table for a Channel at the start of the memory passed
-* via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the Channel is to be
-* initialised. This must be of sufficient size to accommodate
-* the Channel data (sizeof(Channel)) plus any data used by the
-* derived class. If a value of NULL is given, this function
-* will allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the Channel (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the Channel structure, so a valid value must be
-* supplied even if not required for allocating memory.
-* init
-* A boolean flag indicating if the Channel's virtual function
-* table is to be initialised. If this value is non-zero, the
-* virtual function table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new Channel.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-* source
-* Pointer to a "source" function which will be used to obtain
-* lines of input text. Generally, this will be obtained by
-* casting a pointer to a source function which is compatible
-* with the "source_wrap" wrapper function (below). The pointer
-* should later be cast back to its original type by the
-* "source_wrap" function before the function is invoked.
-*
-* If "source" is NULL, the Channel will read from standard
-* input instead.
-* source_wrap
-* Pointer to a function which can be used to invoke the
-* "source" function supplied (above). This wrapper function is
-* necessary in order to hide variations in the nature of the
-* source function, such as may arise when it is supplied by a
-* foreign (non-C) language interface.
-*
-* The single parameter of the "source_wrap" function is a
-* pointer to the "source" function, and it should cast this
-* function pointer (as necessary) and invoke the function with
-* appropriate arguments to obtain the next line of input
-* text. The "source_wrap" function should then return a pointer
-* to a dynamically allocated, null terminated string containing
-* the text that was read. The string will be freed (using
-* astFree) when no longer required and the "source_wrap"
-* function need not concern itself with this. A NULL pointer
-* should be returned if there is no more input to read.
-*
-* If "source_wrap" is NULL, the Channel will read from standard
-* input instead.
-* sink
-* Pointer to a "sink" function which will be used to deliver
-* lines of output text. Generally, this will be obtained by
-* casting a pointer to a sink function which is compatible with
-* the "sink_wrap" wrapper function (below). The pointer should
-* later be cast back to its original type by the "sink_wrap"
-* function before the function is invoked.
-*
-* If "sink" is NULL, the Channel will write to standard output
-* instead.
-* sink_wrap
-* Pointer to a function which can be used to invoke the "sink"
-* function supplied (above). This wrapper function is necessary
-* in order to hide variations in the nature of the sink
-* function, such as may arise when it is supplied by a foreign
-* (non-C) language interface.
-*
-* The first parameter of the "sink_wrap" function is a pointer
-* to the "sink" function, and the second parameter is a pointer
-* to a const, null-terminated character string containing the
-* text to be written. The "sink_wrap" function should cast the
-* "sink" function pointer (as necessary) and invoke the
-* function with appropriate arguments to deliver the line of
-* output text. The "sink_wrap" function then returns void.
-*
-* If "sink_wrap" is NULL, the Channel will write to standard
-* output instead.
-
-* Returned Value:
-* A pointer to the new Channel.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstChannel *new; /* Pointer to new Channel */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitChannelVtab( vtab, name );
-
-/* Initialise an Object structure (the parent class) as the first
- component within the Channel structure, allocating memory if
- necessary. */
- new = (AstChannel *) astInitObject( mem, size, 0,
- (AstObjectVtab *) vtab, name );
-
- if ( astOK ) {
-
-/* Initialise the Channel data. */
-/* ---------------------------- */
-/* Save the pointers to the source and sink functions and the wrapper
- functions that invoke them. */
- new->source = source;
- new->source_wrap = source_wrap;
- new->sink = sink;
- new->sink_wrap = sink_wrap;
-
-/* Set all attributes to their undefined values. */
- new->comment = -INT_MAX;
- new->full = -INT_MAX;
- new->report_level = -INT_MAX;
- new->skip = -INT_MAX;
- new->strict = -INT_MAX;
- new->data = NULL;
- new->warnings = NULL;
- new->nwarn = 0;
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-void astInitChannelVtab_( AstChannelVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitChannelVtab
-
-* Purpose:
-* Initialise a virtual function table for a Channel.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "channel.h"
-* void astInitChannelVtab( AstChannelVtab *vtab, const char *name )
-
-* Class Membership:
-* Channel vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the Channel class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitObjectVtab( (AstObjectVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAChannel) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstObjectVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
- vtab->AddWarning = AddWarning;
- vtab->ClearComment = ClearComment;
- vtab->ClearFull = ClearFull;
- vtab->ClearSkip = ClearSkip;
- vtab->ClearStrict = ClearStrict;
- vtab->GetComment = GetComment;
- vtab->GetFull = GetFull;
- vtab->GetNextData = GetNextData;
- vtab->GetNextText = GetNextText;
- vtab->GetSkip = GetSkip;
- vtab->GetStrict = GetStrict;
- vtab->Warnings = Warnings;
- vtab->PutNextText = PutNextText;
- vtab->Read = Read;
- vtab->ReadClassData = ReadClassData;
- vtab->ReadDouble = ReadDouble;
- vtab->ReadInt = ReadInt;
- vtab->ReadObject = ReadObject;
- vtab->ReadString = ReadString;
- vtab->SetComment = SetComment;
- vtab->SetFull = SetFull;
- vtab->SetSkip = SetSkip;
- vtab->SetStrict = SetStrict;
- vtab->TestComment = TestComment;
- vtab->TestFull = TestFull;
- vtab->TestSkip = TestSkip;
- vtab->TestStrict = TestStrict;
- vtab->Write = Write;
- vtab->WriteBegin = WriteBegin;
- vtab->WriteDouble = WriteDouble;
- vtab->WriteEnd = WriteEnd;
- vtab->WriteInt = WriteInt;
- vtab->WriteIsA = WriteIsA;
- vtab->WriteObject = WriteObject;
- vtab->WriteString = WriteString;
- vtab->PutChannelData = PutChannelData;
-
- vtab->ClearReportLevel = ClearReportLevel;
- vtab->GetReportLevel = GetReportLevel;
- vtab->SetReportLevel = SetReportLevel;
- vtab->TestReportLevel = TestReportLevel;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
-/* Declare the destructor and copy constructor. */
- astSetDelete( (AstObjectVtab *) vtab, Delete );
- astSetCopy( (AstObjectVtab *) vtab, Copy );
-
-/* Declare the Dump function for this class. There is no destructor or
- copy constructor. */
- astSetDump( vtab, Dump, "Channel", "Basic I/O Channel" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static char *InputTextItem( AstChannel *this, int *status ) {
-/*
-* Name:
-* InputTextItem
-
-* Purpose:
-* Read the next item from a data source as text.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "channel.h"
-* char *InputTextItem( AstChannel *this )
-
-* Class Membership:
-* Channel member function.
-
-* Description:
-* This function reads the next input data item as text from the
-* data source associated with a Channel. It is similar to the
-* astGetNextText method (which it invokes), except that it strips
-* off any comments along with leading and trailing white
-* space. Input lines which are empty or do not contain significant
-* characters (e.g. all comment) are skipped, so that only
-* significant lines are returned.
-*
-* Each line is returned as a pointer to a null-terminated string
-* held in dynamic memory, and it is the caller's responsibility to
-* free this memory (using astFree) when it is no longer
-* required. A NULL pointer is returned if there are no more input
-* lines to be read.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-
-* Returned Value:
-* Pointer to a null-terminated string containing the input line
-* (held in dynamically allocated memory, which must be freed by
-* the caller when no longer required). A NULL pointer is returned
-* if there are no more input lines to be read.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- char *line; /* Pointer to line data to be returned */
- int i; /* Loop counter for line characters */
- int j; /* Counter for characters */
- int len; /* Length of result line */
- int nonspace; /* Non-space character encountered? */
- int quoted; /* Character is inside quotes? */
-
-/* Initialise. */
- line = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return line;
-
-/* Loop to read input lines until one is found which contains useful
- characters or end of file is reached (or a read error occurs). */
- while ( !line && ( line = astGetNextText( this ) ) && astOK ) {
-
-/* Loop to remove comments and leading and trailing white space. */
- len = 0;
- nonspace = 0;
- quoted = 0;
- for ( i = j = 0; line[ i ]; i++ ) {
-
-/* Note quote characters and ignore all text after the first unquoted
- comment character. */
- if ( line[ i ] == '"' ) quoted = !quoted;
- if ( ( line[ i ] == '#' ) && !quoted ) break;
-
-/* Note the first non-space character and ignore everything before
- it. */
- if ( ( nonspace = nonspace || !isspace( line[ i ] ) ) ) {
-
-/* Move each character to its new position in the string. */
- line[ j++ ] = line[ i ];
-
-/* Note the final length of the string (ignoring trailing spaces). */
- if ( !isspace( line[ i ] ) ) len = j;
- }
- }
-
-/* If the string is not empty, terminate it. */
- if ( len ) {
- line[ len ] = '\0';
-
-/* Otherwise, free the memory used for the string so that another
- input line will be read. */
- } else {
- line = astFree( line );
- }
- }
-
-/* Return the result pointer. */
- return line;
-
-/* Undefine macros local to this function. */
-#undef MIN_CHARS
-}
-
-static AstChannelValue *LookupValue( const char *name, int *status ) {
-/*
-* Name:
-* LookupValue
-
-* Purpose:
-* Look up a Value structure by name.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "channel.h"
-* AstChannelValue *LookupValue( const char *name )
-
-* Class Membership:
-* Channel member function.
-
-* Description:
-* This function searches the current values list (i.e. at the
-* current nesting level) to identify a Value structure with a
-* specified name. If one is found, it is removed from the list and
-* a pointer to it is returned. If no suitable Value can be found,
-* a NULL pointer is returned instead.
-
-* Parameters:
-* name
-* Pointer to a constant null-terminated character string
-* containing the name of the required Value. This must be in
-* lower case with no surrounding white space. Note that names
-* longer than NAME_MAX characters will not match any Value.
-
-* Returned value:
-* Pointer to the required Value structure, or NULL if no suitable
-* Value exists.
-
-* Notes:
-* - The returned pointer refers to a dynamically allocated
-* structure and it is the callers responsibility to free this when
-* no longer required. The FreeValue function must be used for this
-* purpose.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstChannelValue **head; /* Address of head of list pointer */
- AstChannelValue *result; /* Pointer value to return */
- AstChannelValue *value; /* Pointer to list element */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(NULL);
-
-/* Check that the "values_ok" flag is set. If not, the Values in the
- values list belong to a different class to that of the current
- class loader, so we cannot return any Value. */
- if ( values_ok[ nest ] ) {
-
-/* Obtain the address of the current "head of list" pointer for the
- values list (at the current nesting level). */
- head = values_list + nest;
-
-/* Obtain the head of list pointer itself and check the list is not
- empty. */
- if ( ( value = *head ) ) {
-
-/* Loop to inspect each list element. */
- while ( 1 ) {
-
-/* If a name match is found, remove the element from the list, return
- a pointer to it and quit searching. */
- if ( !strcmp( name, value->name ) ) {
- RemoveValue( value, head, status );
- result = value;
- break;
- }
-
-/* Follow the list until we return to the head. */
- value = value->flink;
- if ( value == *head ) break;
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static void OutputTextItem( AstChannel *this, const char *line, int *status ) {
-/*
-* Name:
-* OutputTextItem
-
-* Purpose:
-* Output a data item formatted as text.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "channel.h"
-* void OutputTextItem( AstChannel *this, const char *line, int *status )
-
-* Class Membership:
-* Channel member function.
-
-* Description:
-* This function outputs a data item formatted as a text string to
-* a data sink associated with a Channel. It keeps track of the
-* number of items written.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* line
-* Pointer to a constant null-terminated string containing the
-* data item to be output (no newline character should be
-* appended).
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Write out the line of text using the astPutNextText method (which
- may be over-ridden). */
- astPutNextText( this, line );
-
-/* If successful, increment the count of items written. */
- if ( astOK ) items_written++;
-}
-
-static void PutChannelData( AstChannel *this, void *data, int *status ) {
-/*
-c++
-* Name:
-* astPutChannelData
-
-* Purpose:
-* Store arbitrary data to be passed to a source or sink function.
-
-* Type:
-* Public function.
-
-* Synopsis:
-* #include "channel.h"
-* void astPutChannelData( AstChannel *this, void *data )
-
-* Class Membership:
-* Channel method.
-
-* Description:
-* This function stores a supplied arbitrary pointer in the Channel.
-* When a source or sink function is invoked by the Channel, the
-* invoked function can use the astChannelData macro to retrieve the
-* pointer. This provides a thread-safe alternative to passing file
-* descriptors, etc, via global static variables.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* data
-* A pointer to be made available to the source and sink functions
-* via the astChannelData macro. May be NULL.
-
-* Applicability:
-* Channel
-* All Channels have this function.
-
-* Notes:
-* - This routine is not available in the Fortran 77 interface to
-* the AST library.
-c--
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Store the pointer. */
- this->data = data;
-}
-
-static void PutNextText( AstChannel *this, const char *line, int *status ) {
-/*
-*+
-* Name:
-* astPutNextText
-
-* Purpose:
-* Write a line of output text to a data sink.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "channel.h"
-* void astPutNextText( AstChannel *this, const char *line )
-
-* Class Membership:
-* Channel method.
-
-* Description:
-* This function writes an output line of text to a data sink
-* associated with a Channel.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* line
-* Pointer to a constant null-terminated string containing the
-* line of output text to be written (no newline character
-* should be appended).
-
-* Notes:
-* - This method is provided primarily so that derived classes may
-* over-ride it in order to write to alternative (textual) data
-* sinks.
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* About to call an externally supplied function which may not be
- thread-safe, so lock a mutex first. */
- LOCK_MUTEX2;
-
-/* If a sink function (and its wrapper function) is defined for the
- Channel, use the wrapper function to invoke the sink function to
- output the text line. */
- if ( this->sink && this->sink_wrap ) {
- ( *this->sink_wrap )( *this->sink, line, status );
-
-/* Otherwise, simply write the text to standard output with a newline
- appended. */
- } else {
- (void) printf( "%s\n", line );
- }
-
- UNLOCK_MUTEX2;
-
-}
-
-static AstObject *Read( AstChannel *this, int *status ) {
-/*
-*++
-* Name:
-c astRead
-f AST_READ
-
-* Purpose:
-* Read an Object from a Channel.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "channel.h"
-c AstObject *astRead( AstChannel *this )
-f RESULT = AST_READ( THIS, STATUS )
-
-* Class Membership:
-* Channel method.
-
-* Description:
-* This function reads the next Object from a Channel and returns a
-* pointer to the new Object.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Channel.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astRead()
-f AST_READ = INTEGER
-* A pointer to the new Object. The class to which this will
-* belong is determined by the input data, so is not known in
-* advance.
-
-* Applicability:
-* FitsChan
-c All successful use of astRead on a FitsChan is destructive, so that
-f All successful use of AST_READ on a FitsChan is destructive, so that
-* FITS header cards are consumed in the process of reading an Object,
-* and are removed from the FitsChan (this deletion can be prevented
-* for specific cards by calling the FitsChan
-c astRetainFits function).
-f AST_RETAINFITS routine).
-* An unsuccessful call of
-c astRead
-f AST_READ
-* (for instance, caused by the FitsChan not containing the necessary
-* FITS headers cards needed to create an Object) results in the
-* contents of the FitsChan being left unchanged.
-* StcsChan
-* The AST Object returned by a successful use of
-c astRead
-f AST_READ
-* on an StcsChan, will be either a Region or a KeyMap, depending
-* on the values of the StcsArea, StcsCoords and StcsProps
-* attributes. See the documentation for these attributes for further
-* information.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned, without
-* error, if the Channel contains no further Objects to be read.
-* - A null Object pointer will also be returned if this function
-c is invoked with the AST error status set, or if it should fail
-f is invoked with STATUS set to an error value, or if it should fail
-* for any reason.
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstLoaderType *loader; /* Pointer to loader for Object */
- AstObject *new; /* Pointer to new Object */
- char *class; /* Pointer to Object class name string */
- char *name; /* Pointer to data item name */
- int skip; /* Skip non-AST data? */
- int top; /* Reading top-level Object definition? */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Determine if we are reading a top-level (i.e. user-level) Object
- definition, as opposed to the definition of an Object contained
- within another Object. This is indicated by the current nesting
- level. */
- top = ( nest == -1 );
-
-/* If reading a top-level object, determine if data lying in between
- Object definitions in the input data stream are to be skipped. */
- skip = ( top && astGetSkip( this ) );
-
-/* Read the next input data item. If we are reading a top-level Object
- definition, skip any unrelated data beforehand. Otherwise read the
- data strictly as it comes (there should be no unrelated data
- embedded within Object definitions themselves). */
- astGetNextData( this, skip, &name, &class );
-
-/* If no suitable data item was found (and no error occurred), we have
- reached the end of data. For a top-level Object a NULL Object
- pointer is simply returned, but for a nested Object this indicates
- that part of the Object definition is missing, so report an
- error. */
- if ( astOK ) {
- if ( !name ) {
- if ( !top ) {
- astError( AST__EOCHN,
- "astRead(%s): End of input encountered while trying to "
- "read an AST Object.", status, astGetClass( this ) );
- }
-
-/* If a data item was found, check it is a "Begin" item. If not, there
- is a data item missing, so report an error and free all memory. */
- } else if ( strcmp( name, "begin" ) ) {
- astError( AST__BADIN,
- "astRead(%s): Missing \"Begin\" when expecting an Object.", status,
- astGetClass( this ) );
- name = astFree( name );
- if ( class ) class = astFree( class );
-
-/* If the required "Begin" item was found, free the memory used for the
- name string. */
- } else {
- name = astFree( name );
-
-/* Use the associated class name to locate the loader for that
- class. This function will then be used to build the Object. */
- loader = astGetLoader( class, status );
-
-/* Extend all necessary stack arrays to accommodate entries for the
- next nesting level (this allocates space if none has yet been
- allocated). */
- end_of_object = astGrow( end_of_object, nest + 2, sizeof( int ) );
- object_class = astGrow( object_class, nest + 2, sizeof( char * ) );
- values_class = astGrow( values_class, nest + 2, sizeof( char * ) );
- values_list = astGrow( values_list, nest + 2, sizeof( AstChannelValue * ) );
- values_ok = astGrow( values_ok, nest + 2, sizeof( int ) );
-
-/* If an error occurred, free the memory used by the class string,
- which will not now be used. */
- if ( !astOK ) {
- class = astFree( class );
-
-/* Otherwise, increment the nesting level and initialise the new stack
- elements for this new level. This includes clearing the
- "end_of_object" flag so that ReadClassData can read more data, and
- storing the class name of the object we are about to read. */
- } else {
- nest++;
- end_of_object[ nest ] = 0;
- object_class[ nest ] = class;
- values_class[ nest ] = NULL;
- values_list[ nest ] = NULL;
- values_ok[ nest ] = 0;
-
-/* Invoke the loader, which reads the Object definition from the input
- data stream and builds the Object. Supply NULL/zero values to the
- loader so that it will substitute values appropriate to its own
- class. */
- new = (*loader)( NULL, (size_t) 0, NULL, NULL, this, status );
-
-/* Clear the values list for the current nesting level. If the list
- has not been read or any Values remain in it, an error will
- result. */
- ClearValues( this, status );
-
-/* If no error has yet occurred, check that the "end_of_object" flag
- has been set. If not, the input data were not correctly terminated,
- so report an error. */
- if ( astOK && !end_of_object[ nest ] ) {
- astError( AST__BADIN,
- "astRead(%s): Unexpected end of input (missing end "
- "of %s).", status,
- astGetClass( this ), object_class[ nest ] );
- }
-
-/* If an error occurred, report contextual information. Only do this
- for top-level Objects to avoid multple messages. */
- if ( !astOK && top ) {
- astError( astStatus, "Error while reading a %s from a %s.", status,
- class, astGetClass( this ) );
- }
-
-/* Clear the Object's class string, freeing the associated memory
- (note this is the memory allocated for the "class" string
- earlier). */
- object_class[ nest ] = astFree( object_class[ nest ] );
-
-/* Restore the previous nesting level. */
- nest--;
- }
-
-/* Once the top-level Object has been built, free the memory used by
- the stack arrays. */
- if ( top ) {
- end_of_object = astFree( end_of_object );
- object_class = astFree( object_class );
- values_class = astFree( values_class );
- values_list = astFree( values_list );
- values_ok = astFree( values_ok );
- }
- }
- }
-
-/* If an error occurred, clean up by deleting the new Object and
- return a NULL pointer. */
- if ( !astOK ) new = astDelete( new );
-
-/* Return the pointer to the new Object. */
- return new;
-}
-
-static void ReadClassData( AstChannel *this, const char *class, int *status ) {
-/*
-*+
-* Name:
-* astReadClassData
-
-* Purpose:
-* Read values from a data source for a class loader.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "channel.h"
-* void astReadClassData( AstChannel *this, const char *class )
-
-* Class Membership:
-* Channel method.
-
-* Description:
-* This function reads the data for a class from the data source
-* associated with a Channel, so as to provide values for
-* initialising the instance variables of that class as part of
-* building a complete Object. This function should be invoked by
-* the loader for each class immediately before it attempts to read
-* these values.
-*
-* The values read are placed into the current values list by this
-* function. They may then be read from this list by the class
-* loader making calls to astReadDouble, astReadInt, astReadObject
-* and astReadString. The order in which values are read by the
-* loader is unimportant (although using the same order for reading
-* as for writing will usually be more efficient) and values are
-* removed from the list as they are read.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* class
-* A pointer to a constant null-terminated string containing the
-* name of the class whose loader is requesting the data (note
-* this is not usually the same as the class name of the Object
-* being built). This value allows the class structure of the
-* input data to be validated.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstObject *object; /* Pointer to new Object */
- AstChannelValue *value; /* Pointer to Value structure */
- char *name; /* Pointer to data item name string */
- char *val; /* Pointer to data item value string */
- int done; /* All class data read? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* If the "values_ok" flag is set, this indicates that the values list
- (at the current nesting level) has been filled by a previous
- invocation of this function and has then been read by the
- appropriate class loader. In this case, clear any entries which may
- remain in the current values list. If any such entries are found,
- they represent input data that were not read, so an error will
- result. */
- if ( values_ok[ nest ] ) ClearValues( this, status );
-
-/* If "values_class" is non-NULL, this indicates that the values list
- (at the current nesting level) has been filled by a previous
- invocation of this function, but that the values belong to a class
- whose loader has not yet tried to read them. In this case, we must
- continue to keep the values until they are needed, so we do not
- read any more input data this time. */
- if ( values_class[ nest ] ) {
-
-/* If the class to which the previously saved values belong matches
- the class we now want values for, set the "values_ok" flag. This
- then allows the values to be accessed (by LookupValue). */
- values_ok[ nest ] = !strcmp( values_class[ nest ], class );
-
-/* If the current values list is empty, we must read in values for the
- next class that appears in the input data. However, first check
- that the "end_of_object" flag has not been set. If it has, we have
- already reached the end of this Object's data, so there is some
- kind of problem with the order in which class loaders have been
- invoked. This will probably never happen, but report an error if
- necessary. */
- } else if ( end_of_object[ nest ] ) {
- astError( AST__LDERR,
- "astRead(%s): Invalid attempt to read further %s data "
- "following an end of %s.", status,
- astGetClass( this ), class, object_class[ nest ] );
- astError( AST__LDERR,
- "Perhaps the wrong class loader has been invoked?" , status);
-
-/* If we need new values, loop to read input data items until the end
- of the data for a class is reached. */
- } else {
- done = 0;
- while ( astOK && !done ) {
-
-/* Read the next input data item. */
- astGetNextData( this, 0, &name, &val );
- if ( astOK ) {
-
-/* Unexpected end of input. */
-/* ------------------------ */
-/* If no "name" value is returned, we have reached the end of the
- input data stream without finding the required end of class
- terminator, so report an error. */
- if ( !name ) {
- astError( AST__EOCHN,
- "astRead(%s): Unexpected end of input (missing end "
- "of %s).", status,
- astGetClass( this ), object_class[ nest ] );
-
-/* "IsA" item. */
-/* ----------- */
-/* Otherwise, if an "IsA" item was read, it indicates the end of the
- data for a class. Store the pointer to the name of this class in
- "values_class" and note whether this is the class whose data we
- wanted in "values_ok". If the data we have read do not belong to
- the class we wanted, they will simply be kept until the right class
- comes looking for them. */
- } else if ( !strcmp( name, "isa" ) ) {
- values_class[ nest ] = val;
- values_ok[ nest ] = !strcmp( val, class );
-
-/* Free the memory holding the name string. */
- name = astFree( name );
-
-/* Note we have finished reading class data. */
- done = 1;
-
-/* "End" item. */
-/* ----------- */
-/* If an "End" item was read, it indicates the end of the data both
- for a class and for the current Object definition as a whole. Set
- the "end_of_object" flag (for the current nesting level) which
- prevents any further data being read for this Object. This flag is
- also used (by Read) to check that an "End" item was actually
- read. */
- } else if ( !strcmp( name, "end" ) ) {
- end_of_object[ nest ] = 1;
-
-/* Check that the class name in the "End" item matches that of the
- Object being built. If so, store the pointer to the name of this
- class in "values_class" and note whether this is the class whose
- data we wanted in "values_ok". If the data we have read do not
- belong to the class we wanted, they will simply be kept until the
- right class comes looking for them. */
- if ( !strcmp( val, object_class[ nest ] ) ) {
- values_class[ nest ] = val;
- values_ok[ nest ] = !strcmp( class, val );
-
-/* If the "End" item contains the wrong class name (i.e. not matching
- the corresponding "Begin" item), then report an error. */
- } else {
- astError( AST__BADIN,
- "astRead(%s): Bad class structure in input data.", status,
- astGetClass( this ) );
- astError( AST__BADIN,
- "End of %s read when expecting end of %s.", status,
- val, object_class[ nest ] );
-
-/* Free the memory used by the class string, which will not now be
- used. */
- val = astFree( val );
- }
-
-/* Free the memory holding the name string. */
- name = astFree( name );
-
-/* Note we have finished reading class data. */
- done = 1;
-
-/* String value. */
-/* ------------- */
-/* If any other name is obtained and "val" is not NULL, we have read a
- non-Object value, encoded as a string. Allocate memory for a Value
- structure to describe it. */
- } else if ( val ) {
- value = astMalloc( sizeof( AstChannelValue ) );
- if ( astOK ) {
-
-/* Store pointers to the name and value string in the Value structure
- and note this is not an Object value. */
- value->name = name;
- value->ptr.string = val;
- value->is_object = 0;
-
-/* Append the Value structure to the values list for the current
- nesting level. */
- AppendValue( value, values_list + nest, status );
-
-/* If an error occurred, free the memory holding the "name" and "val"
- strings. */
- } else {
- name = astFree( name );
- val = astFree( val );
- }
-
-/* Object value. */
-/* ------------- */
-/* If "val" is NULL, we have read an Object item, and the Object
- definition should follow. Allocate memory for a Value structure to
- describe it. */
- } else {
- value = astMalloc( sizeof( AstChannelValue ) );
-
-/* Invoke astRead to read the Object definition from subsequent data
- items and to build the Object, returning a pointer to it. This will
- result in recursive calls to the current function, but as these
- will use higher nesting levels they will not interfere with the
- current invocation. */
- astreadclassdata_msg = 0;
- object = astRead( this );
- if ( astOK ) {
-
-/* Store pointers to the name and Object in the Value structure and
- note this is an Object value. */
- value->name = name;
- value->ptr.object = object;
- value->is_object = 1;
-
-/* Append the Value structure to the values list for the current
- nesting level. */
- AppendValue( value, values_list + nest, status );
-
-/* If an error occurred, report a contextual error maessage and set
- the "astreadclassdata_msg" flag (this prevents multiple messages if this function is
- invoked recursively to deal with nested Objects). */
- } else {
- if ( !astreadclassdata_msg ) {
- astError( astStatus,
- "Failed to read the \"%s\" Object value.", status,
- name );
- astreadclassdata_msg = 1;
- }
-
-/* Free the memory holding the "name" string and any Value structure
- that was allocated. */
- name = astFree( name );
- value = astFree( value );
- }
- }
- }
- }
- }
-}
-
-static double ReadDouble( AstChannel *this, const char *name, double def, int *status ) {
-/*
-*+
-* Name:
-* astReadDouble
-
-* Purpose:
-* Read a double value as part of loading a class.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "channel.h"
-* double astReadDouble( AstChannel *this, const char *name, double def )
-
-* Class Membership:
-* Channel method.
-
-* Description:
-* This function searches the current values list of a Channel to
-* identify a double value with a specified name. If such a value
-* is found, it is returned, otherwise a default value is returned
-* instead.
-*
-* This function should only be invoked from within the loader
-* function associated with a class, in order to return a double
-* value to be assigned to an instance variable. It must be
-* preceded by a call to the astReadClassData function, which loads
-* the values associated with the class into the current values
-* list from the input data source.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* name
-* Pointer to a constant null-terminated character string
-* containing the name of the required value. This must be in
-* lower case with no surrounding white space. Note that names
-* longer than 6 characters will not match any value.
-* def
-* If no suitable value can be found (e.g. it is absent from the
-* data stream being read), then this value will be returned
-* instead.
-
-* Returned Value:
-* The required value, or the default if the value was not found.
-
-* Notes:
-* - A value of 0.0 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstChannelValue *value; /* Pointer to required Value structure */
- double result; /* Value to be returned */
- int nc; /* Number of characters read by astSscanf */
-
-/* Initialise. */
- result = 0.0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Search for a Value structure with the required name in the current
- values list.*/
- value = LookupValue( name, status );
- if ( astOK ) {
-
-/* If a Value was found, check that it describes a string (as opposed
- to an Object). */
- if ( value ) {
- if ( !value->is_object ) {
-
-/* If so, then attempt to decode the string to give a double value,
- checking that the entire string is read. If this fails, then the
- wrong name has probably been given, or the input data are corrupt,
- so report an error. */
- nc = 0;
- if ( !( ( 1 == astSscanf( value->ptr.string, " %lf %n",
- &result, &nc ) )
- && ( nc >= (int) strlen( value->ptr.string ) ) ) ) {
- astError( AST__BADIN,
- "astRead(%s): The value \"%s = %s\" cannot "
- "be read as a double precision floating point "
- "number.", status, astGetClass( this ),
- value->name, value->ptr.string );
- }
-
-/* Report a similar error if the Value does not describe a string. */
- } else {
- astError( AST__BADIN,
- "astRead(%s): The Object \"%s = <%s>\" cannot "
- "be read as a double precision floating point number.", status,
- astGetClass( this ),
- value->name, astGetClass( value->ptr.object ) );
- }
-
-/* Free the Value structure and the resources it points at. */
- value = FreeValue( value, status );
-
-/* If no suitable Value structure was found, then use the default
- value instead. */
- } else {
- result = def;
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static int ReadInt( AstChannel *this, const char *name, int def, int *status ) {
-/*
-*+
-* Name:
-* astReadInt
-
-* Purpose:
-* Read an int value as part of loading a class.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "channel.h"
-* int astReadInt( AstChannel *this, const char *name, int def )
-
-* Class Membership:
-* Channel method.
-
-* Description:
-* This function searches the current values list of a Channel to
-* identify an int value with a specified name. If such a value is
-* found, it is returned, otherwise a default value is returned
-* instead.
-*
-* This function should only be invoked from within the loader
-* function associated with a class, in order to return an int
-* value to be assigned to an instance variable. It must be
-* preceded by a call to the astReadClassData function, which loads
-* the values associated with the class into the current values
-* list from the input data source.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* name
-* Pointer to a constant null-terminated character string
-* containing the name of the required value. This must be in
-* lower case with no surrounding white space. Note that names
-* longer than 6 characters will not match any value.
-* def
-* If no suitable value can be found (e.g. it is absent from the
-* data stream being read), then this value will be returned
-* instead.
-
-* Returned Value:
-* The required value, or the default if the value was not found.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstChannelValue *value; /* Pointer to required Value structure */
- int nc; /* Number of characters read by astSscanf */
- int result; /* Value to be returned */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Search for a Value structure with the required name in the current
- values list.*/
- value = LookupValue( name, status );
- if ( astOK ) {
-
-/* If a Value was found, check that it describes a string (as opposed
- to an Object). */
- if ( value ) {
- if ( !value->is_object ) {
-
-/* If so, then attempt to decode the string to give an int value,
- checking that the entire string is read. If this fails, then the
- wrong name has probably been given, or the input data are corrupt,
- so report an error. */
- nc = 0;
- if ( !( ( 1 == astSscanf( value->ptr.string, " %d %n",
- &result, &nc ) )
- && ( nc >= (int) strlen( value->ptr.string ) ) ) ) {
- astError( AST__BADIN,
- "astRead(%s): The value \"%s = %s\" cannot "
- "be read as an integer.", status, astGetClass( this ),
- value->name, value->ptr.string );
- }
-
-/* Report a similar error if the Value does not describe a string. */
- } else {
- astError( AST__BADIN,
- "astRead(%s): The Object \"%s = <%s>\" cannot "
- "be read as an integer.", status, astGetClass( this ),
- value->name, astGetClass( value->ptr.object ) );
- }
-
-/* Free the Value structure and the resources it points at. */
- value = FreeValue( value, status );
-
-/* If no suitable Value structure was found, then use the default
- value instead. */
- } else {
- result = def;
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstObject *ReadObject( AstChannel *this, const char *name,
- AstObject *def, int *status ) {
-/*
-*+
-* Name:
-* astReadObject
-
-* Purpose:
-* Read a (sub)Object as part of loading a class.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "channel.h"
-* AstObject *astReadObject( AstChannel *this, const char *name,
-* AstObject *def )
-
-* Class Membership:
-* Channel method.
-
-* Description:
-* This function searches the current values list of a Channel to
-* identify an Object with a specified name. If such an Object is
-* found, a pointer to it is returned, otherwise a default pointer
-* is returned instead.
-*
-* This function should only be invoked from within the loader
-* function associated with a class, in order to return an Object
-* pointer value to be assigned to an instance variable. It must be
-* preceded by a call to the astReadClassData function, which loads
-* the values associated with the class into the current values
-* list from the input data source.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* name
-* Pointer to a constant null-terminated character string
-* containing the name of the required Object. This must be in
-* lower case with no surrounding white space. Note that names
-* longer than 6 characters will not match any Object.
-* def
-* If no suitable Object can be found (e.g. the Object is absent
-* from the data stream being read), then a clone of this
-* default Object pointer will be returned instead (or NULL if
-* this default pointer is NULL).
-
-* Returned Value:
-* A pointer to the Object, or a clone of the default pointer if
-* the Object was not found.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstObject *result; /* Pointer value to return */
- AstChannelValue *value; /* Pointer to required Value structure */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Search for a Value structure with the required name in the current
- values list.*/
- value = LookupValue( name, status );
- if ( astOK ) {
-
-/* If a Value was found, check that it describes an Object (as opposed to
- a string). */
- if ( value ) {
- if ( value->is_object ) {
-
-/* If so, then extract the Object pointer, replacing it with NULL. */
- result = value->ptr.object;
- value->ptr.object = NULL;
-
-/* If the Value does not describe an Object, then the wrong name has
- probably been given, or the input data are corrupt, so report an
- error. */
- } else {
- astError( AST__BADIN,
- "astRead(%s): The value \"%s = %s\" cannot be "
- "read as an Object.", status, astGetClass( this ),
- value->name, value->ptr.string );
- }
-
-/* Free the Value structure and the resources it points at. */
- value = FreeValue( value, status );
-
-/* If no suitable Value structure was found, clone the default
- pointer, if given. */
- } else if ( def ) {
- result = astClone( def );
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static char *ReadString( AstChannel *this, const char *name,
- const char *def, int *status ) {
-/*
-*+
-* Name:
-* astReadString
-
-* Purpose:
-* Read a string value as part of loading a class.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "channel.h"
-* char *astReadString( AstChannel *this, const char *name,
-* const char *def )
-
-* Class Membership:
-* Channel method.
-
-* Description:
-* This function searches the current values list of a Channel to
-* identify a string value with a specified name. If such a value
-* is found, a pointer to the string is returned, otherwise a
-* pointer to a copy of a default string is returned instead.
-*
-* This function should only be invoked from within the loader
-* function associated with a class, in order to return a string
-* pointer value to be assigned to an instance variable. It must be
-* preceded by a call to the astReadClassData function, which loads
-* the values associated with the class into the current values
-* list from the input data source.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* name
-* Pointer to a constant null-terminated character string
-* containing the name of the required value. This must be in
-* lower case with no surrounding white space. Note that names
-* longer than 6 characters will not match any value.
-* def
-* If no suitable string can be found (e.g. the value is absent
-* from the data stream being read), then a dynamically
-* allocated copy of the null-terminated string pointed at by
-* "def" will be made, and a pointer to this copy will be
-* returned instead (or NULL if this default pointer is NULL).
-
-* Returned Value:
-* A pointer to a dynamically allocated null-terminated string
-* containing the value required, or to a copy of the default
-* string if the value was not found (or NULL if the "def" pointer
-* was NULL).
-
-* Notes:
-* - It is the caller's responsibility to arrange for the memory
-* holding the returned string to be freed (using astFree) when it
-* is no longer required.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstChannelValue *value; /* Pointer to required Value structure */
- char *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Search for a Value structure with the required name in the current
- values list.*/
- value = LookupValue( name, status );
- if ( astOK ) {
-
-/* If a Value was found, check that it describes a string (as opposed
- to an Object). */
- if ( value ) {
- if ( !value->is_object ) {
-
-/* If so, then extract the string pointer, replacing it with NULL. */
- result = value->ptr.string;
- value->ptr.string = NULL;
-
-/* If the Value does not describe a string, then the wrong name has
- probably been given, or the input data are corrupt, so report an
- error. */
- } else {
- astError( AST__BADIN,
- "astRead(%s): The Object \"%s = <%s>\" cannot "
- "be read as a string.", status, astGetClass( this ),
- value->name, astGetClass( value->ptr.object ) );
- }
-
-/* Free the Value structure and the resources it points at. */
- value = FreeValue( value, status );
-
-/* If no suitable Value structure was found, then make a dynamic copy
- of the default string (if given) and return a pointer to this. */
- } else if ( def ) {
- result = astStore( NULL, def, strlen( def ) + (size_t) 1 );
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static void RemoveValue( AstChannelValue *value, AstChannelValue **head, int *status ) {
-/*
-* Name:
-* RemoveValue
-
-* Purpose:
-* Remove a Value structure from a circular linked list.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "channel.h"
-* void RemoveValue( AstChannelValue *value, AstChannelValue **head, int *status );
-
-* Class Membership:
-* Channel member function.
-
-* Description:
-* This function removes a Value structure from a doubly linked
-* circular list of such structures. The "head of list" pointer is
-* updated to point at the element following the one removed.
-
-* Parameters:
-* value
-* Pointer to the structure to be removed (note that this must
-* actually be in the list, although this function does not
-* check).
-* head
-* Address of a pointer to the element at the head of the
-* list. This pointer will be updated to point at the list
-* element that follows the one removed. If the list becomes
-* empty, the pointer will be set to NULL.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function does not perform error chacking and does not
-* generate errors.
-*/
-
-/* Remove the Value structure from the list by re-establishing links
- between the elements on either side of it. */
- value->blink->flink = value->flink;
- value->flink->blink = value->blink;
-
-/* Update the head of list pointer to identify the following
- element. */
- *head = value->flink;
-
-/* If the head of list identifies the removed element, then note that
- the list is now empty. */
- if ( *head == value ) *head = NULL;
-
-/* Make the removed element point at itself. */
- value->flink = value;
- value->blink = value;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a Channel.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "channel.h"
-* void SetAttrib( AstObject *this, const char *setting )
-
-* Class Membership:
-* Channel member function (over-rides the astSetAttrib protected
-* method inherited from the Object class).
-
-* Description:
-* This function assigns an attribute value for a Channel, the
-* attribute and its value being specified by means of a string of
-* the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in
-* lower case with no white space present. The value to the right
-* of the "=" should be a suitable textual representation of the
-* value to be assigned and this will be interpreted according to
-* the attribute's data type. White space surrounding the value is
-* only significant for string attributes.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* setting
-* Pointer to a null terminated string specifying the new attribute
-* value.
-*/
-
-/* Local Variables: */
- AstChannel *this; /* Pointer to the Channel structure */
- int comment; /* Comment attribute value */
- int full; /* Full attribute value */
- int len; /* Length of setting string */
- int nc; /* Number of characters read by "astSscanf" */
- int report_level; /* Skip attribute value */
- int skip; /* Skip attribute value */
- int strict; /* Report errors instead of warnings? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Channel structure. */
- this = (AstChannel *) this_object;
-
-/* Obtain the length of the setting string. */
- len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
- the setting string and extract the attribute value (or an offset to
- it in the case of string values). In each case, use the value set
- in "nc" to check that the entire string was matched. Once a value
- has been obtained, use the appropriate method to set it. */
-
-/* Comment. */
-/* ---------*/
- if ( nc = 0,
- ( 1 == astSscanf( setting, "comment= %d %n", &comment, &nc ) )
- && ( nc >= len ) ) {
- astSetComment( this, comment );
-
-/* Full. */
-/* ----- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "full= %d %n", &full, &nc ) )
- && ( nc >= len ) ) {
- astSetFull( this, full );
-
-/* ReportLavel. */
-/* ------------ */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "reportlevel= %d %n", &report_level, &nc ) )
- && ( nc >= len ) ) {
- astSetReportLevel( this, report_level );
-
-/* Skip. */
-/* ----- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "skip= %d %n", &skip, &nc ) )
- && ( nc >= len ) ) {
- astSetSkip( this, skip );
-
-/* Strict. */
-/* ------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "strict= %d %n", &strict, &nc ) )
- && ( nc >= len ) ) {
- astSetStrict( this, strict );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-}
-
-static void SinkWrap( void (* sink)( const char * ), const char *line, int *status ) {
-/*
-* Name:
-* SinkWrap
-
-* Purpose:
-* Wrapper function to invoke a C Channel sink function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "channel.h"
-* void SinkWrap( void (* sink)( const char * ), const char *line, int *status )
-
-* Class Membership:
-* Channel member function.
-
-* Description:
-* This function invokes the sink function whose pointer is
-* supplied in order to write an output line to an external data
-* store.
-
-* Parameters:
-* sink
-* Pointer to a sink function, whose single parameter is a
-* pointer to a const, null-terminated string containing the
-* text to be written, and which returns void. This is the form
-* of Channel sink function employed by the C language interface
-* to the AST library.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Invoke the sink function. */
- ( *sink )( line );
-}
-
-static char *SourceWrap( const char *(* source)( void ), int *status ) {
-/*
-* Name:
-* SourceWrap
-
-* Purpose:
-* Wrapper function to invoke a C Channel source function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "channel.h"
-* char *SourceWrap( const char *, int *status(* source)( void ) )
-
-* Class Membership:
-* Channel member function.
-
-* Description:
-* This function invokes the source function whose pointer is
-* supplied in order to read the next input line from an external
-* data store. It then returns a pointer to a dynamic string
-* containing a copy of the text that was read.
-
-* Parameters:
-* source
-* Pointer to a source function, with no parameters, that
-* returns a pointer to a const, null-terminated string
-* containing the text that it read. This is the form of Channel
-* source function employed by the C language interface to the
-* AST library.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated, null terminated string
-* containing a copy of the text that was read. This string must be
-* freed by the caller (using astFree) when no longer required.
-*
-* A NULL pointer will be returned if there is no more input text
-* to read.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- char *result; /* Pointer value to return */
- const char *line; /* Pointer to input line */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Invoke the source function to read the next input line and return a
- pointer to the resulting string. */
- line = ( *source )();
-
-/* If a string was obtained, make a dynamic copy of it and save the
- resulting pointer. */
- if ( line ) result = astString( line, (int) strlen( line ) );
-
-/* Return the result. */
- return result;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a Channel.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "channel.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Channel member function (over-rides the astTestAttrib protected
-* method inherited from the Object class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a Channel's attributes.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstChannel *this; /* Pointer to the Channel structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the Channel structure. */
- this = (AstChannel *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* Comment. */
-/* -------- */
- if ( !strcmp( attrib, "comment" ) ) {
- result = astTestComment( this );
-
-/* Full. */
-/* ----- */
- } else if ( !strcmp( attrib, "full" ) ) {
- result = astTestFull( this );
-
-/* ReportLevel. */
-/* ------------ */
- } else if ( !strcmp( attrib, "reportlevel" ) ) {
- result = astTestReportLevel( this );
-
-/* Skip. */
-/* ----- */
- } else if ( !strcmp( attrib, "skip" ) ) {
- result = astTestSkip( this );
-
-/* Strict. */
-/* ------- */
- } else if ( !strcmp( attrib, "strict" ) ) {
- result = astTestStrict( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static void Unquote( AstChannel *this, char *str, int *status ) {
-/*
-* Name:
-* Unquote
-
-* Purpose:
-* Remove quotes from a (possibly) quoted string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "channel.h"
-* void Unquote( AstChannel *this, char *str, int *status )
-
-* Class Membership:
-* Channel member function.
-
-* Description:
-* This function removes one layer of quote characters (") from a
-* string which is possibly quoted. Any quotes within quotes (which
-* should have been doubled when the string was originally quoted)
-* are also converted back to single quotes again.
-*
-* The quotes need not start or end at the ends of the string, and
-* there may be any number of quoted sections within the string. No
-* error results if the string does not contain any quotes at all
-* (it is simply returned unchanged), but an error results if any
-* unmatched quotes are found.
-
-* Parameters:
-* this
-* Pointer to a Channel. This is only used for constructing error
-* messages and has no influence on the string processing.
-* str
-* Pointer to the null-terminated string to be processed. This
-* is modified in place. The new string starts at the same
-* location as the original but has a new null character
-* appended if necessary (it will usually be shorter than the
-* original).
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- int i; /* Loop counter for "input" characters */
- int j; /* Counter for "output" characters */
- int quoted; /* Inside a quoted string? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Loop to inspect each character in the string. */
- quoted = 0;
- for ( i = j = 0; str[ i ]; i++ ) {
-
-/* Non-quote characters are simply copied to their new location in the
- string. */
- if ( str[ i ] != '"' ) {
- str[ j++ ] = str[ i ];
-
-/* If a quote character '"' is encountered and we are not already in a
- quoted string, then note the start of a quoted string (and discard
- the quote). */
- } else if ( !quoted ) {
- quoted = 1;
-
-/* If a quote character is encountered inside a quoted string, then
- check if the next character is also a quote. If so, convert this
- double quote to a single one. */
- } else if ( str[ i + 1 ] == '"' ) {
- str[ j++ ] = '"';
- i++;
-
-/* If a single quote character is encountered inside a quoted string,
- then note the end of the quoted string (and discard the quote). */
- } else {
- quoted = 0;
- }
- }
-
-/* Append a null to terminate the processed string. */
- str[ j ] = '\0';
-
-/* If the "quoted" flag is still set, then there were unmatched
- quotes, so report an error. */
- if ( quoted ) {
- astError( AST__UNMQT,
- "astRead(%s): Unmatched quotes in input data: %s.", status,
- astGetClass( this ), str );
- }
-}
-
-static int Use( AstChannel *this, int set, int helpful, int *status ) {
-/*
-* Name:
-* Use
-
-* Purpose:
-* Decide whether to write a value to a data sink.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "channel.h"
-* int Use( AstChannel *this, int set, int helpful, int *status )
-
-* Class Membership:
-* Channel member function.
-
-* Description:
-* This function decides whether a value supplied by a class "Dump"
-* function, via a call to one of the astWrite... protected
-* methods, should actually be written to the data sink associated
-* with a Channel.
-*
-* This decision is based on the settings of the "set" and
-* "helpful" flags supplied to the astWrite... method, plus the
-* attribute settings of the Channel.
-
-* Parameters:
-* this
-* A pointer to the Channel.
-* set
-* The "set" flag supplied.
-* helpful
-* The "helpful" value supplied.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the value should be written out, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- int full; /* Full attribute value */
- int result; /* Result value to be returned */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* If "set" is non-zero, then so is the result ("set" values must
- always be written out). */
- result = ( set != 0 );
-
-/* Otherwise, obtain the value of the Channel's Full attribute. */
- if ( !set ) {
- full = astGetFull( this );
-
-/* If Full is positive, display all values, if zero, display only
- "helpful" values, if negative, display no (un-"set") values. */
- if ( astOK ) result = ( ( helpful && ( full > -1 ) ) || ( full > 0 ) );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int Write( AstChannel *this, AstObject *object, int *status ) {
-/*
-*++
-* Name:
-c astWrite
-f AST_WRITE
-
-* Purpose:
-* Write an Object to a Channel.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "channel.h"
-c int astWrite( AstChannel *this, AstObject *object )
-f RESULT = AST_WRITE( THIS, OBJECT, STATUS )
-
-* Class Membership:
-* Channel method.
-
-* Description:
-* This function writes an Object to a Channel, appending it to any
-* previous Objects written to that Channel.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Channel.
-c object
-f OBJECT = INTEGER (Given)
-* Pointer to the Object which is to be written.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astWrite()
-f AST_WRITE = INTEGER
-* The number of Objects written to the Channel by this
-c invocation of astWrite (normally, this will be one).
-f invocation of AST_WRITE (normally, this will be one).
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-c with the AST error status set, or if it should fail for any
-f with STATUS set to an error value, or if it should fail for any
-* reason.
-* - Invoking this function will usually cause the sink function
-* associated with the channel to be called in order to transfer a
-* textual description of the supplied object to some external data
-* store. However, the FitsChan class behaves differently. Invoking
-* this function on a FitsChan causes new FITS header cards to be
-* added to an internal buffer (the sink function is not invoked).
-* This buffer is written out through the sink function only when the
-* FitsChan is deleted.
-*--
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* The work of this function is actually performed by the protected
- astDump method of the Object. The fact that this is further
- encapsulated within the astWrite method (which belongs to the
- Channel) is simply a trick to allow it to be over-ridden either by
- a derived Channel, or a derived Object (or both), and hence to
- adapt to the nature of either argument. */
- astDump( object, this );
-
-/* Return the number of Objects written. */
- return astOK ? 1 : 0;
-}
-
-static void WriteBegin( AstChannel *this, const char *class,
- const char *comment, int *status ) {
-/*
-*+
-* Name:
-* astWriteBegin
-
-* Purpose:
-* Write a "Begin" data item to a data sink.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "channel.h"
-* void astWriteBegin( AstChannel *this, const char *class,
-* const char *comment )
-
-* Class Membership:
-* Channel method.
-
-* Description:
-* This function writes a "Begin" data item to the data sink
-* associated with a Channel, so as to begin the output of a new
-* Object definition.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* class
-* Pointer to a constant null-terminated string containing the
-* name of the class to which the Object belongs.
-* comment
-* Pointer to a constant null-terminated string containing a
-* textual comment to be associated with the "Begin"
-* item. Normally, this will describe the purpose of the Object.
-
-* Notes:
-* - The comment supplied may not actually be used, depending on
-* the nature of the Channel supplied.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- char *line; /* Pointer to dynamic output string */
- int i; /* Loop counter for indentation characters */
- int nc; /* Number of output characters */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Start building a dynamic string with an initial space. Then add
- further spaces to suit the current indentation level. */
- line = astAppendString( NULL, &nc, " " );
- for ( i = 0; i < current_indent; i++ ) {
- line = astAppendString( line, &nc, " " );
- }
-
-/* Append the "Begin" keyword followed by the class name. */
- line = astAppendString( line, &nc, "Begin " );
- line = astAppendString( line, &nc, class );
-
-/* If required, also append the comment. */
- if ( astGetComment( this ) && *comment ) {
- line = astAppendString( line, &nc, " \t# " );
- line = astAppendString( line, &nc, comment );
- }
-
-/* Write out the resulting line of text. */
- OutputTextItem( this, line, status );
-
-/* Free the dynamic string. */
- line = astFree( line );
-
-/* Increment the indentation level and clear the count of items written
- for this Object. */
- current_indent += INDENT_INC;
- items_written = 0;
-}
-
-static void WriteDouble( AstChannel *this, const char *name,
- int set, int helpful,
- double value, const char *comment, int *status ) {
-/*
-*+
-* Name:
-* astWriteDouble
-
-* Purpose:
-* Write a double value to a data sink.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "channel.h"
-* void astWriteDouble( AstChannel *this, const char *name,
-* int set, int helpful,
-* double value, const char *comment )
-
-* Class Membership:
-* Channel method.
-
-* Description:
-* This function writes a named double value, representing the
-* value of a class instance variable, to the data sink associated
-* with a Channel. It is intended for use by class "Dump" functions
-* when writing out class information which will subsequently be
-* re-read.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* name
-* Pointer to a constant null-terminated string containing the
-* name to be used to identify the value in the external
-* representation. This will form the key for identifying it
-* again when it is re-read. The name supplied should be unique
-* within its class.
-*
-* Mixed case may be used and will be preserved in the external
-* representation (where possible) for cosmetic effect. However,
-* case is not significant when re-reading values.
-*
-* It is recommended that a maximum of 6 alphanumeric characters
-* (starting with an alphabetic character) be used. This permits
-* maximum flexibility in adapting to standard external data
-* representations (e.g. FITS).
-* set
-* If this is zero, it indicates that the value being written is
-* a default value (or can be re-generated from other values) so
-* need not necessarily be written out. Such values will
-* typically be included in the external representation with
-* (e.g.) a comment character so that they are available to
-* human readers but will be ignored when re-read. They may also
-* be completely omitted in some circumstances.
-*
-* If "set" is non-zero, the value will always be explicitly
-* included in the external representation so that it can be
-* re-read.
-* helpful
-* This flag provides a hint about whether a value whose "set"
-* flag is zero (above) should actually appear at all in the
-* external representaton.
-*
-* If the external representation allows values to be "commented
-* out" then, by default, values will be included in this form
-* only if their "helpful" flag is non-zero. Otherwise, they
-* will be omitted entirely. When possible, omitting the more
-* obscure values associated with a class is recommended in
-* order to improve readability.
-*
-* This default behaviour may be further modified if the
-* Channel's Full attribute is set - either to permit all values
-* to be shown, or to suppress non-essential information
-* entirely.
-* value
-* The value to be written.
-* comment
-* Pointer to a constant null-terminated string containing a
-* textual comment to be associated with the value.
-*
-* Note that this comment may not actually be used, depending on
-* the nature of the Channel supplied and the setting of its
-* Comment attribute.
-*-
-*/
-
-/* Local Constants: */
-#define BUFF_LEN 100 /* Size of local formatting buffer */
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- char *line; /* Pointer to dynamic output string */
- char buff[ BUFF_LEN + 1 ]; /* Local formatting buffer */
- int i; /* Loop counter for indentation characters */
- int nc; /* Number of output characters */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Use the "set" and "helpful" flags, along with the Channel's
- attributes to decide whether this value should actually be
- written. */
- if ( Use( this, set, helpful, status ) ) {
-
-/* Start building a dynamic string with an initial space, or a comment
- character if "set" is zero. Then add further spaces to suit the
- current indentation level. */
- line = astAppendString( NULL, &nc, set ? " " : "#" );
- for ( i = 0; i < current_indent; i++ ) {
- line = astAppendString( line, &nc, " " );
- }
-
-/* Append the name string followed by " = ". */
- line = astAppendString( line, &nc, name );
- line = astAppendString( line, &nc, " = " );
-
-/* Format the value as a string and append this. Make sure "-0" isn't
- produced. */
- (void) sprintf( buff, "%.*g", DBL_DIG, value );
- if ( !strcmp( buff, "-0" ) ) {
- buff[ 0 ] = '0';
- buff[ 1 ] = '\0';
- }
- line = astAppendString( line, &nc, buff );
-
-/* If required, also append the comment. */
- if ( astGetComment( this ) && *comment ) {
- line = astAppendString( line, &nc, " \t# " );
- line = astAppendString( line, &nc, comment );
- }
-
-/* Write out the resulting line of text. */
- OutputTextItem( this, line, status );
-
-/* Free the dynamic string. */
- line = astFree( line );
- }
-
-/* Undefine macros local to this function. */
-#undef BUFF_LEN
-}
-
-static void WriteEnd( AstChannel *this, const char *class, int *status ) {
-/*
-*+
-* Name:
-* astWriteEnd
-
-* Purpose:
-* Write an "End" data item to a data sink.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "channel.h"
-* void astWriteEnd( AstChannel *this, const char *class )
-
-* Class Membership:
-* Channel method.
-
-* Description:
-* This function writes an "End" data item to the data sink
-* associated with a Channel. This item delimits the end of an
-* Object definition.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* class
-* Pointer to a constant null-terminated string containing the
-* class name of the Object whose definition is being terminated
-* by the "End" item.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- char *line; /* Pointer to dynamic output string */
- int i; /* Loop counter for indentation characters */
- int nc; /* Number of output characters */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Decrement the indentation level so that the "End" item matches the
- corresponding "Begin" item. */
- current_indent -= INDENT_INC;
-
-/* Start building a dynamic string with an initial space. Then add
- further spaces to suit the current indentation level. */
- line = astAppendString( NULL, &nc, " " );
- for ( i = 0; i < current_indent; i++ ) {
- line = astAppendString( line, &nc, " " );
- }
-
-/* Append the "End" keyword followed by the class name. */
- line = astAppendString( line, &nc, "End " );
- line = astAppendString( line, &nc, class );
-
-/* Write out the resulting line of text. */
- OutputTextItem( this, line, status );
-
-/* Free the dynamic string. */
- line = astFree( line );
-}
-
-static void WriteInt( AstChannel *this, const char *name, int set, int helpful,
- int value, const char *comment, int *status ) {
-/*
-*+
-* Name:
-* astWriteInt
-
-* Purpose:
-* Write an integer value to a data sink.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "channel.h"
-* void astWriteInt( AstChannel *this, const char *name,
-* int set, int helpful,
-* int value, const char *comment )
-
-* Class Membership:
-* Channel method.
-
-* Description:
-* This function writes a named integer value, representing the
-* value of a class instance variable, to the data sink associated
-* with a Channel. It is intended for use by class "Dump" functions
-* when writing out class information which will subsequently be
-* re-read.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* name
-* Pointer to a constant null-terminated string containing the
-* name to be used to identify the value in the external
-* representation. This will form the key for identifying it
-* again when it is re-read. The name supplied should be unique
-* within its class.
-*
-* Mixed case may be used and will be preserved in the external
-* representation (where possible) for cosmetic effect. However,
-* case is not significant when re-reading values.
-*
-* It is recommended that a maximum of 6 alphanumeric characters
-* (starting with an alphabetic character) be used. This permits
-* maximum flexibility in adapting to standard external data
-* representations (e.g. FITS).
-* set
-* If this is zero, it indicates that the value being written is
-* a default value (or can be re-generated from other values) so
-* need not necessarily be written out. Such values will
-* typically be included in the external representation with
-* (e.g.) a comment character so that they are available to
-* human readers but will be ignored when re-read. They may also
-* be completely omitted in some circumstances.
-*
-* If "set" is non-zero, the value will always be explicitly
-* included in the external representation so that it can be
-* re-read.
-* helpful
-* This flag provides a hint about whether a value whose "set"
-* flag is zero (above) should actually appear at all in the
-* external representaton.
-*
-* If the external representation allows values to be "commented
-* out" then, by default, values will be included in this form
-* only if their "helpful" flag is non-zero. Otherwise, they
-* will be omitted entirely. When possible, omitting the more
-* obscure values associated with a class is recommended in
-* order to improve readability.
-*
-* This default behaviour may be further modified if the
-* Channel's Full attribute is set - either to permit all values
-* to be shown, or to suppress non-essential information
-* entirely.
-* value
-* The value to be written.
-* comment
-* Pointer to a constant null-terminated string containing a
-* textual comment to be associated with the value.
-*
-* Note that this comment may not actually be used, depending on
-* the nature of the Channel supplied and the setting of its
-* Comment attribute.
-*-
-*/
-
-/* Local Constants: */
-#define BUFF_LEN 50 /* Size of local formatting buffer */
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- char *line; /* Pointer to dynamic output string */
- char buff[ BUFF_LEN + 1 ]; /* Local formatting buffer */
- int i; /* Loop counter for indentation characters */
- int nc; /* Number of output characters */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Use the "set" and "helpful" flags, along with the Channel's
- attributes to decide whether this value should actually be
- written. */
- if ( Use( this, set, helpful, status ) ) {
-
-/* Start building a dynamic string with an initial space, or a comment
- character if "set" is zero. Then add further spaces to suit the
- current indentation level. */
- line = astAppendString( NULL, &nc, set ? " " : "#" );
- for ( i = 0; i < current_indent; i++ ) {
- line = astAppendString( line, &nc, " " );
- }
-
-/* Append the name string followed by " = ". */
- line = astAppendString( line, &nc, name );
- line = astAppendString( line, &nc, " = " );
-
-/* Format the value as a decimal string and append this. */
- (void) sprintf( buff, "%d", value );
- line = astAppendString( line, &nc, buff );
-
-/* If required, also append the comment. */
- if ( astGetComment( this ) && *comment ) {
- line = astAppendString( line, &nc, " \t# " );
- line = astAppendString( line, &nc, comment );
- }
-
-/* Write out the resulting line of text. */
- OutputTextItem( this, line, status );
-
-/* Free the dynamic string. */
- line = astFree( line );
- }
-
-/* Undefine macros local to this function. */
-#undef BUFF_LEN
-}
-
-int astWriteInvocations_( int *status ){
-/*
-*+
-* Name:
-* astWriteInvocations
-
-* Purpose:
-* Returns the number of invocations of the astWrite method.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "channel.h"
-* int astWriteInvocations
-
-* Class Membership:
-* Channel method.
-
-* Description:
-* This function returns the number of invocations of astWrite which
-* have been made so far, excluding those made from within the
-* astWriteObject method. An example of its use is to allow a Dump
-* function to determine if a sub-object has already been dumped
-* during the current invocation of astWrite. See the Dump method for
-* the AstUnit class as an example.
-*-
-*/
- astDECLARE_GLOBALS;
- astGET_GLOBALS(NULL);
- return nwrite_invoc;
-}
-
-static void WriteIsA( AstChannel *this, const char *class,
- const char *comment, int *status ) {
-/*
-*+
-* Name:
-* astWriteIsA
-
-* Purpose:
-* Write an "IsA" data item to a data sink.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "channel.h"
-* void astWriteIsA( AstChannel *this, const char *class,
-* const char *comment )
-
-* Class Membership:
-* Channel method.
-
-* Description:
-* This function writes an "IsA" data item to the data sink
-* associated with a Channel. This item delimits the end of the
-* data associated with the instance variables of a class, as part
-* of an overall Object definition.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* class
-* Pointer to a constant null-terminated string containing the
-* name of the class whose data are terminated by the "IsA"
-* item.
-* comment
-* Pointer to a constant null-terminated string containing a
-* textual comment to be associated with the "IsA"
-* item. Normally, this will describe the purpose of the class
-* whose data are being terminated.
-
-* Notes:
-* - The comment supplied may not actually be used, depending on
-* the nature of the Channel supplied.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- char *line; /* Pointer to dynamic output string */
- int i; /* Loop counter for indentation characters */
- int nc; /* Number of output characters */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Output an "IsA" item only if there has been at least one item
- written since the last "Begin" or "IsA" item, or if the Full
- attribute for the Channel is greater than zero (requesting maximum
- information). */
- if ( items_written || astGetFull( this ) > 0 ) {
-
-/* Start building a dynamic string with an initial space. Then add
- further spaces to suit the current indentation level, but reduced
- by one to allow the "IsA" item to match the "Begin" and "End" items
- which enclose it. */
- line = astAppendString( NULL, &nc, " " );
- for ( i = 0; i < ( current_indent - INDENT_INC ); i++ ) {
- line = astAppendString( line, &nc, " " );
- }
-
-/* Append the "IsA" keyword followed by the class name. */
- line = astAppendString( line, &nc, "IsA " );
- line = astAppendString( line, &nc, class );
-
-/* If required, also append the comment. */
- if ( astGetComment( this ) && *comment ) {
- line = astAppendString( line, &nc, " \t# " );
- line = astAppendString( line, &nc, comment );
- }
-
-/* Write out the resulting line of text. */
- OutputTextItem( this, line, status );
-
-/* Free the dynamic string. */
- line = astFree( line );
-
-/* Clear the count of items written for this class. */
- items_written = 0;
- }
-}
-
-static void WriteObject( AstChannel *this, const char *name,
- int set, int helpful,
- AstObject *value, const char *comment, int *status ) {
-/*
-*+
-* Name:
-* astWriteObject
-
-* Purpose:
-* Write an Object as a value to a data sink.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "channel.h"
-* void astWriteObject( AstChannel *this, const char *name,
-* int set, int helpful,
-* AstObject *value, const char *comment )
-
-* Class Membership:
-* Channel method.
-
-* Description:
-* This function writes an Object as a named value, representing
-* the value of a class instance variable, to the data sink
-* associated with a Channel. It is intended for use by class
-* "Dump" functions when writing out class information which will
-* subsequently be re-read.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* name
-* Pointer to a constant null-terminated string containing the
-* name to be used to identify the value in the external
-* representation. This will form the key for identifying it
-* again when it is re-read. The name supplied should be unique
-* within its class.
-*
-* Mixed case may be used and will be preserved in the external
-* representation (where possible) for cosmetic effect. However,
-* case is not significant when re-reading values.
-*
-* It is recommended that a maximum of 6 alphanumeric characters
-* (starting with an alphabetic character) be used. This permits
-* maximum flexibility in adapting to standard external data
-* representations (e.g. FITS).
-* set
-* If this is zero, it indicates that the value being written is
-* a default value (or can be re-generated from other values) so
-* need not necessarily be written out. Such values will
-* typically be included in the external representation with
-* (e.g.) a comment character so that they are available to
-* human readers but will be ignored when re-read. They may also
-* be completely omitted in some circumstances.
-*
-* If "set" is non-zero, the value will always be explicitly
-* included in the external representation so that it can be
-* re-read.
-* helpful
-* This flag provides a hint about whether a value whose "set"
-* flag is zero (above) should actually appear at all in the
-* external representaton.
-*
-* If the external representation allows values to be "commented
-* out" then, by default, values will be included in this form
-* only if their "helpful" flag is non-zero. Otherwise, they
-* will be omitted entirely. When possible, omitting the more
-* obscure values associated with a class is recommended in
-* order to improve readability.
-*
-* This default behaviour may be further modified if the
-* Channel's Full attribute is set - either to permit all values
-* to be shown, or to suppress non-essential information
-* entirely.
-* value
-* A Pointer to the Object to be written.
-* comment
-* Pointer to a constant null-terminated string containing a
-* textual comment to be associated with the value.
-*
-* Note that this comment may not actually be used, depending on
-* the nature of the Channel supplied and the setting of its
-* Comment attribute.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- char *line; /* Pointer to dynamic output string */
- int i; /* Loop counter for indentation characters */
- int nc; /* Number of output characters */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Use the "set" and "helpful" flags, along with the Channel's
- attributes to decide whether this value should actually be
- written. */
- if ( Use( this, set, helpful, status ) ) {
-
-/* Start building a dynamic string with an initial space, or a comment
- character if "set" is zero. Then add further spaces to suit the
- current indentation level. */
- line = astAppendString( NULL, &nc, set ? " " : "#" );
- for ( i = 0; i < current_indent; i++ ) {
- line = astAppendString( line, &nc, " " );
- }
-
-/* Append the name string followed by " =". The absence of a value on
- the right hand side indicates an Object value, whose definition
- follows. */
- line = astAppendString( line, &nc, name );
- line = astAppendString( line, &nc, " =" );
-
-/* If required, also append the comment. */
- if ( astGetComment( this ) && *comment ) {
- line = astAppendString( line, &nc, " \t# " );
- line = astAppendString( line, &nc, comment );
- }
-
-/* Write out the resulting line of text. */
- OutputTextItem( this, line, status );
-
-/* Free the dynamic string. */
- line = astFree( line );
-
-/* If the value is not a default, write the Object to the Channel as
- well, suitably indented (this is omitted if the value is commented
- out). */
- if ( set ) {
- current_indent += INDENT_INC;
- (void) astWrite( this, value );
- current_indent -= INDENT_INC;
- }
- }
-}
-
-static void WriteString( AstChannel *this, const char *name,
- int set, int helpful,
- const char *value, const char *comment, int *status ) {
-/*
-*+
-* Name:
-* astWriteString
-
-* Purpose:
-* Write a string value to a data sink.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "channel.h"
-* void astWriteString( AstChannel *this, const char *name,
-* int set, int helpful,
-* const char *value, const char *comment )
-
-* Class Membership:
-* Channel method.
-
-* Description:
-* This function writes a named string value, representing the
-* value of a class instance variable, to the data sink associated
-* with a Channel. It is intended for use by class "Dump" functions
-* when writing out class information which will subsequently be
-* re-read.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* name
-* Pointer to a constant null-terminated string containing the
-* name to be used to identify the value in the external
-* representation. This will form the key for identifying it
-* again when it is re-read. The name supplied should be unique
-* within its class.
-*
-* Mixed case may be used and will be preserved in the external
-* representation (where possible) for cosmetic effect. However,
-* case is not significant when re-reading values.
-*
-* It is recommended that a maximum of 6 alphanumeric characters
-* (starting with an alphabetic character) be used. This permits
-* maximum flexibility in adapting to standard external data
-* representations (e.g. FITS).
-* set
-* If this is zero, it indicates that the value being written is
-* a default value (or can be re-generated from other values) so
-* need not necessarily be written out. Such values will
-* typically be included in the external representation with
-* (e.g.) a comment character so that they are available to
-* human readers but will be ignored when re-read. They may also
-* be completely omitted in some circumstances.
-*
-* If "set" is non-zero, the value will always be explicitly
-* included in the external representation so that it can be
-* re-read.
-* helpful
-* This flag provides a hint about whether a value whose "set"
-* flag is zero (above) should actually appear at all in the
-* external representaton.
-*
-* If the external representation allows values to be "commented
-* out" then, by default, values will be included in this form
-* only if their "helpful" flag is non-zero. Otherwise, they
-* will be omitted entirely. When possible, omitting the more
-* obscure values associated with a class is recommended in
-* order to improve readability.
-*
-* This default behaviour may be further modified if the
-* Channel's Full attribute is set - either to permit all values
-* to be shown, or to suppress non-essential information
-* entirely.
-* value
-* Pointer to a constant null-terminated string containing the
-* value to be written.
-* comment
-* Pointer to a constant null-terminated string containing a
-* textual comment to be associated with the value.
-*
-* Note that this comment may not actually be used, depending on
-* the nature of the Channel supplied and the setting of its
-* Comment attribute.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- char *line; /* Pointer to dynamic output string */
- int i; /* Loop counter for characters */
- int nc; /* Number of output characters */
- int quote; /* Quote character found? */
- int size; /* Size of allocated memory */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Use the "set" and "helpful" flags, along with the Channel's
- attributes to decide whether this value should actually be
- written. */
- if ( Use( this, set, helpful, status ) ) {
-
-/* Start building a dynamic string with an initial space, or a comment
- character if "set" is zero. Then add further spaces to suit the
- current indentation level. */
- line = astAppendString( NULL, &nc, set ? " " : "#" );
- for ( i = 0; i < current_indent; i++ ) {
- line = astAppendString( line, &nc, " " );
- }
-
-/* Append the name string followed by " = " and an opening quote
- character (the string will be quoted to protect leading and
- trailing spaces). */
- line = astAppendString( line, &nc, name );
- line = astAppendString( line, &nc, " = \"" );
-
-/* We now append the value string, but must inspect each character so
- that quotes (appearing inside quotes) can be doubled. Determine the
- current size of memory allocated for the dynamic string. */
- size = (int) astSizeOf( line );
-
-/* Loop to inspect each character and see if it is a quote. */
- for ( i = 0; value[ i ]; i++ ) {
- quote = ( value[ i ] == '"' );
-
-/* If more memory is required, extend the dynamic string (allowing for
- doubling of quotes and the final null) and save its new size. */
- if ( nc + 2 + quote > size ) {
- line = astGrow( line, nc + 2 + quote, sizeof( char ) );
- if ( astOK ) {
- size = (int) astSizeOf( line );
-
-/* Quit if an error occurs. */
- } else {
- break;
- }
- }
-
-/* Append the value character to the dynamic string, duplicating each
- quote character. */
- line[ nc++ ] = value[ i ];
- if ( quote ) line[ nc++ ] = '"';
- }
-
-/* Append the closing quote. */
- line = astAppendString( line, &nc, "\"" );
-
-/* If required, also append the comment. */
- if ( astGetComment( this ) && *comment ) {
- line = astAppendString( line, &nc, " \t# " );
- line = astAppendString( line, &nc, comment );
- }
-
-/* Write out the resulting line of text. */
- OutputTextItem( this, line, status );
-
-/* Free the dynamic string. */
- line = astFree( line );
- }
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. */
-
-/*
-*att++
-* Name:
-* Comment
-
-* Purpose:
-* Include textual comments in output?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This is a boolean attribute which controls whether textual
-* comments are to be included in the output generated by a
-* Channel. If included, they will describe what each item of
-* output represents.
-*
-* If Comment is non-zero, then comments will be included. If
-* it is zero, comments will be omitted.
-
-* Applicability:
-* Channel
-* The default value is non-zero for a normal Channel.
-* FitsChan
-* The default value is non-zero for a FitsChan.
-* XmlChan
-* The default value is zero for an XmlChan.
-
-*att--
-*/
-
-/* This is a boolean value (0 or 1) with a value of -INT_MAX when
- undefined but yielding a default of one. */
-astMAKE_CLEAR(Channel,Comment,comment,-INT_MAX)
-astMAKE_GET(Channel,Comment,int,0,( this->comment != -INT_MAX ? this->comment : 1 ))
-astMAKE_SET(Channel,Comment,int,comment,( value != 0 ))
-astMAKE_TEST(Channel,Comment,( this->comment != -INT_MAX ))
-
-/*
-*att++
-* Name:
-* Full
-
-* Purpose:
-* Set level of output detail.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer.
-
-* Description:
-* This attribute is a three-state flag and takes values of -1, 0
-* or +1. It controls the amount of information included in the
-* output generated by a Channel.
-*
-* If Full is zero, then a modest amount of
-* non-essential but useful information will be included in the
-* output. If Full is negative, all non-essential information will
-* be suppressed to minimise the amount of output, while if it is
-* positive, the output will include the maximum amount of detailed
-* information about the Object being written.
-
-* Applicability:
-* Channel
-* The default value is zero for a normal Channel.
-* FitsChan
-* The default value is zero for a FitsChan.
-* XmlChan
-* The default value is -1 for an XmlChan.
-* StcsChan
-* The default value is zero for an StcsChan. Set a positive value
-* to cause default values to be included in STC-S descriptions.
-
-* Notes:
-* - All positive values supplied for this attribute are converted
-* to +1 and all negative values are converted to -1.
-*att--
-*/
-
-/* This ia a 3-state value (-1, 0 or +1) with a value of -INT_MAX when
- undefined but yielding a default of zero. */
-astMAKE_CLEAR(Channel,Full,full,-INT_MAX)
-astMAKE_GET(Channel,Full,int,0,( this->full != -INT_MAX ? this->full : 0 ))
-astMAKE_SET(Channel,Full,int,full,( value > 0 ? 1 : ( value < 0 ? -1 : 0 ) ))
-astMAKE_TEST(Channel,Full,( this->full != -INT_MAX ))
-
-/*
-*att++
-* Name:
-* ReportLevel
-
-* Purpose:
-* Determines which read/write conditions are reported.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute determines which, if any, of the conditions that occur
-* whilst reading or writing an Object should be reported. These
-* conditions will generate either a fatal error or a warning, as
-* determined by attribute Strict. ReportLevel can take any of the
-* following values:
-*
-* 0 - Do not report any conditions.
-*
-* 1 - Report only conditions where significant information content has been
-* changed. For instance, an unsupported time-scale has been replaced by a
-* supported near-equivalent time-scale. Another example is if a basic
-* Channel unexpected encounters data items that may have been introduced
-* by later versions of AST.
-*
-* 2 - Report the above, and in addition report significant default
-* values. For instance, if no time-scale was specified when reading an
-* Object from an external data source, report the default time-scale
-* that is being used.
-*
-* 3 - Report the above, and in addition report any other potentially
-* interesting conditions that have no significant effect on the
-* conversion. For instance, report if a time-scale of "TT"
-* (terrestrial time) is used in place of "ET" (ephemeris time). This
-* change has no signficiant effect because ET is the predecessor of,
-* and is continuous with, TT. Synonyms such as "IAT" and "TAI" are
-* another example.
-*
-* The default value is 1. Note, there are many other conditions that
-* can occur whilst reading or writing an Object that completely
-* prevent the conversion taking place. Such conditions will always
-* generate errors, irrespective of the ReportLevel and Strict attributes.
-
-* Applicability:
-* Channel
-* All Channels have this attribute.
-* FitsChan
-* All the conditions selected by the FitsChan Warnings attribute are
-* reported at level 1.
-*att--
-*/
-
-/* This is an integer value with a value of -INT_MAX when undefined,
- yielding a default of one. */
-astMAKE_CLEAR(Channel,ReportLevel,report_level,-INT_MAX)
-astMAKE_GET(Channel,ReportLevel,int,1,( this->report_level != -INT_MAX ? this->report_level : 1 ))
-astMAKE_SET(Channel,ReportLevel,int,report_level,value)
-astMAKE_TEST(Channel,ReportLevel,( this->report_level != -INT_MAX ))
-
-/*
-*att++
-* Name:
-* Skip
-
-* Purpose:
-* Skip irrelevant data?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This is a boolean attribute which indicates whether the Object
-* data being read through a Channel are inter-mixed with other,
-* irrelevant, external data.
-*
-* If Skip is zero (the default), then the source of input data is
-* expected to contain descriptions of AST Objects and comments and
-* nothing else (if anything else is read, an error will
-* result). If Skip is non-zero, then any non-Object data
-* encountered between Objects will be ignored and simply skipped
-* over in order to reach the next Object.
-
-* Applicability:
-* Channel
-* All Channels have this attribute.
-* FitsChan
-* The FitsChan class sets the default value of this attribute
-* to 1, so that all irrelevant FITS headers will normally be
-* ignored.
-*att--
-*/
-
-/* This ia a boolean value (0 or 1) with a value of -INT_MAX when
- undefined but yielding a default of zero. */
-astMAKE_CLEAR(Channel,Skip,skip,-INT_MAX)
-astMAKE_GET(Channel,Skip,int,0,( this->skip != -INT_MAX ? this->skip : 0 ))
-astMAKE_SET(Channel,Skip,int,skip,( value != 0 ))
-astMAKE_TEST(Channel,Skip,( this->skip != -INT_MAX ))
-
-/*
-*att++
-* Name:
-* Strict
-
-* Purpose:
-* Report an error if any unexpeted data items are found?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This is a boolean attribute which indicates whether a warning
-* rather than an error should be issed for insignificant conversion
-* problems. If it is set non-zero, then fatal errors are issued
-* instead of warnings, resulting in the
-c AST error status being set.
-f inherited STATUS variable being set to an error value.
-* If Strict is zero (the default), then execution continues after minor
-* conversion problems, and a warning message is added to the Channel
-* structure. Such messages can be retrieved using the
-c astWarnings
-f AST_WARNINGS
-* function.
-
-* Notes:
-* - This attribute was introduced in AST version 5.0. Prior to this
-* version of AST unexpected data items read by a basic Channel always
-* caused an error to be reported. So applications linked against
-* versions of AST prior to version 5.0 may not be able to read Object
-* descriptions created by later versions of AST, if the Object's class
-* description has changed.
-
-* Applicability:
-* Channel
-* All Channels have this attribute.
-*att--
-*/
-
-/* This ia a boolean value (0 or 1) with a value of -INT_MAX when
- undefined but yielding a default of zero. */
-astMAKE_CLEAR(Channel,Strict,strict,-INT_MAX)
-astMAKE_GET(Channel,Strict,int,0,( this->strict != -INT_MAX ? this->strict : 0 ))
-astMAKE_SET(Channel,Strict,int,strict,( value != 0 ))
-astMAKE_TEST(Channel,Strict,( this->strict != -INT_MAX ))
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for Channel objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for Channel objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstChannel *this; /* Pointer to Channel */
-
-/* Obtain a pointer to the Channel structure. */
- this = (AstChannel *) obj;
-
-/* Free memory used to store warnings. */
- astAddWarning( this, 0, NULL, NULL, status );
-
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for Channel objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for Channel objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstChannel *in; /* Pointer to input Channel */
- AstChannel *out; /* Pointer to output Channel */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Channels. */
- in = (AstChannel *) objin;
- out = (AstChannel *) objout;
-
-/* For safety, first clear any references to the input memory from
- the output Channel. */
- out->warnings = NULL;
- out->nwarn = 0;
-
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for Channel objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the Channel class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the Object whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstChannel *this; /* Pointer to the Channel structure */
- const char *comment; /* Pointer to comment string */
- int ival; /* Integer value */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Channel structure. */
- this = (AstChannel *) this_object;
-
-/* Write out values representing the instance variables for the
- Channel class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* ReportLevel. */
-/* ------------ */
- set = TestReportLevel( this, status );
- ival = set ? GetReportLevel( this, status ) : astGetReportLevel( this );
- astWriteInt( channel, "RpLev", set, 0, ival, "Error reporting level" );
-
-/* Skip. */
-/* ----- */
- set = TestSkip( this, status );
- ival = set ? GetSkip( this, status ) : astGetSkip( this );
- astWriteInt( channel, "Skip", set, 0, ival,
- ival ? "Ignore data between Objects" :
- "No data allowed between Objects" );
-
-/* Strict. */
-/* ------- */
- set = TestStrict( this, status );
- ival = set ? GetStrict( this, status ) : astGetStrict( this );
- astWriteInt( channel, "Strict", set, 0, ival,
- ival ? "Report errors insead of warnings" :
- "Report warnings instead of errors" );
-
-/* Full. */
-/* ----- */
- set = TestFull( this, status );
- ival = set ? GetFull( this, status ) : astGetFull( this );
- if ( ival < 0 ) {
- comment = "Suppress non-essential output";
- }else if ( ival == 0 ) {
- comment = "Output standard information";
- } else {
- comment = "Output maximum information";
- }
- astWriteInt( channel, "Full", set, 0, ival, comment );
-
-/* Comment. */
-/* -------- */
- set = TestComment( this, status );
- ival = set ? GetComment( this, status ) : astGetComment( this );
- astWriteInt( channel, "Comm", set, 0, ival,
- ival ? "Display comments" :
- "Omit comments" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAChannel and astCheckChannel functions using the
- macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(Channel,Object)
-astMAKE_CHECK(Channel)
-
-AstChannel *astChannel_( const char *(* source)( void ),
- void (* sink)( const char * ),
- const char *options, int *status, ...) {
-/*
-*+
-* Name:
-* astChannel
-
-* Purpose:
-* Create a Channel.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "channel.h"
-* AstChannel *astChannel( const char *(* source)( void ),
-* void (* sink)( const char * ),
-* const char *options, ..., int *status )
-
-* Class Membership:
-* Channel constructor.
-
-* Description:
-* This function creates a new Channel and optionally initialises
-* its attributes.
-*
-* A Channel implements low-level input/output for the AST library.
-* Writing an Object to a Channel (using astWrite) will generate a
-* textual representation of that Object, and reading from a
-* Channel (using astRead) will create a new Object from its
-* textual representation.
-*
-* Normally, when you use a Channel, you should provide "source"
-* and "sink" functions which connect it to an external data store
-* by reading and writing the resulting text. By default, however,
-* a Channel will read from standard input and write to standard
-* output.
-
-* Parameters:
-* source
-* Pointer to a "source" function that takes no arguments and
-* returns a pointer to a null-terminated string.
-*
-* This function will be used by the Channel to obtain lines of
-* input text. On each invocation, it should return a pointer to
-* the next input line read from some external data store, and a
-* NULL pointer when there are no more lines to read.
-*
-* If "source" is NULL, the Channel will read from standard
-* input instead.
-* sink
-* Pointer to a "sink" function that takes a pointer to a
-* null-terminated string as an argument and returns void.
-*
-* This function will be used by the Channel to deliver lines of
-* output text. On each invocation, it should deliver the
-* contents of the string supplied to some external data store.
-*
-* If "sink" is NULL, the Channel will write to standard output
-* instead.
-* options
-* Pointer to a null-terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new Channel. The syntax used is identical to
-* that for the astSet function and may include "printf" format
-* specifiers identified by "%" symbols in the normal way.
-* status
-* Pointer to the inherited status variable.
-* ...
-* If the "options" string contains "%" format specifiers, then
-* an optional list of additional arguments may follow it in
-* order to supply values to be substituted for these
-* specifiers. The rules for supplying these are identical to
-* those for the astSet function (and for the C "printf"
-* function).
-
-* Returned Value:
-* astChannel()
-* A pointer to the new Channel.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the global error status set, or if it should fail
-* for any reason.
-*-
-
-* Implementation Notes:
-* - This function implements the basic Channel constructor which
-* is available via the protected interface to the Channel class.
-* A public interface is provided by the astChannelId_ function.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstChannel *new; /* Pointer to new Channel */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the Channel, allocating memory and initialising the
- virtual function table as well if necessary. Supply pointers to
- (local) wrapper functions that can invoke the source and sink
- functions with appropriate arguments for the C language. */
- new = astInitChannel( NULL, sizeof( AstChannel ), !class_init, &class_vtab,
- "Channel", source, SourceWrap, sink, SinkWrap );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- Channel's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new Channel. */
- return new;
-}
-
-AstChannel *astChannelId_( const char *(* source)( void ),
- void (* sink)( const char * ),
- const char *options, ... ) {
-/*
-*++
-* Name:
-c astChannel
-f AST_CHANNEL
-
-* Purpose:
-* Create a Channel.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "channel.h"
-c AstChannel *astChannel( const char *(* source)( void ),
-c void (* sink)( const char * ),
-c const char *options, ... )
-f RESULT = AST_CHANNEL( SOURCE, SINK, OPTIONS, STATUS )
-
-* Class Membership:
-* Channel constructor.
-
-* Description:
-* This function creates a new Channel and optionally initialises
-* its attributes.
-*
-* A Channel implements low-level input/output for the AST library.
-c Writing an Object to a Channel (using astWrite) will generate a
-f Writing an Object to a Channel (using AST_WRITE) will generate a
-* textual representation of that Object, and reading from a
-c Channel (using astRead) will create a new Object from its
-f Channel (using AST_READ) will create a new Object from its
-* textual representation.
-*
-* Normally, when you use a Channel, you should provide "source"
-c and "sink" functions which connect it to an external data store
-f and "sink" routines which connect it to an external data store
-* by reading and writing the resulting text. By default, however,
-* a Channel will read from standard input and write to standard
-* output.
-
-* Parameters:
-c source
-f SOURCE = SUBROUTINE (Given)
-c Pointer to a source function that takes no arguments and
-c returns a pointer to a null-terminated string. This function
-c will be used by the Channel to obtain lines of input text. On
-c each invocation, it should return a pointer to the next input
-c line read from some external data store, and a NULL pointer
-c when there are no more lines to read.
-c
-c If "source" is NULL, the Channel will read from standard
-c input instead.
-f A source routine, which is a subroutine which takes a single
-f integer error status argument. This routine will be used by
-f the Channel to obtain lines of input text. On each
-f invocation, it should read the next input line from some
-f external data store, and then return the resulting text to
-f the AST library by calling AST_PUTLINE. It should supply a
-f negative line length when there are no more lines to read.
-f If an error occurs, it should set its own error status
-f argument to an error value before returning.
-f
-f If the null routine AST_NULL is suppied as the SOURCE value,
-f the Channel will read from standard input instead.
-c sink
-f SINK = SUBROUTINE (Given)
-c Pointer to a sink function that takes a pointer to a
-c null-terminated string as an argument and returns void. This
-c function will be used by the Channel to deliver lines of
-c output text. On each invocation, it should deliver the
-c contents of the string supplied to some external data store.
-c
-c If "sink" is NULL, the Channel will write to standard output
-c instead.
-f A sink routine, which is a subroutine which takes a single
-f integer error status argument. This routine will be used by
-f the Channel to deliver lines of output text. On each
-f invocation, it should obtain the next output line from the
-f AST library by calling AST_GETLINE, and then deliver the
-f resulting text to some external data store. If an error
-f occurs, it should set its own error status argument to an
-f error value before returning.
-f
-f If the null routine AST_NULL is suppied as the SINK value,
-f the Channel will write to standard output instead.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new Channel. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new Channel. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astChannel()
-f AST_CHANNEL = INTEGER
-* A pointer to the new Channel.
-
-* Notes:
-c - Application code can pass arbitrary data (such as file
-c descriptors, etc) to source and sink functions using the
-c astPutChannelData function. The source or sink function should use
-c the astChannelData macro to retrieve this data.
-f - The names of the routines supplied for the SOURCE and SINK
-f arguments should appear in EXTERNAL statements in the Fortran
-f routine which invokes AST_CHANNEL. However, this is not generally
-f necessary for the null routine AST_NULL (so long as the AST_PAR
-f include file has been used).
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-f - Note that the null routine AST_NULL (one underscore) is
-f different to AST__NULL (two underscores), which is the null Object
-f pointer.
-*--
-
-* Implementation Notes:
-* - This function implements the external (public) interface to
-* the astChannel constructor function. It returns an ID value
-* (instead of a true C pointer) to external users, and must be
-* provided because astChannel_ has a variable argument list which
-* cannot be encapsulated in a macro (where this conversion would
-* otherwise occur).
-* - The variable argument list also prevents this function from
-* invoking astChanel_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstChannel *new; /* Pointer to new Channel */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the Channel, allocating memory and initialising the
- virtual function table as well if necessary. Supply pointers to
- (local) wrapper functions that can invoke the source and sink
- functions with appropriate arguments for the C language. */
- new = astInitChannel( NULL, sizeof( AstChannel ), !class_init, &class_vtab,
- "Channel", source, SourceWrap, sink, SinkWrap );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- Channel's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new Channel. */
- return astMakeId( new );
-}
-
-AstChannel *astChannelForId_( const char *(* source)( void ),
- char *(* source_wrap)( const char *(*)( void ), int * ),
- void (* sink)( const char * ),
- void (* sink_wrap)( void (*)( const char * ),
- const char *, int * ),
- const char *options, ... ) {
-/*
-*+
-* Name:
-* astChannelFor
-
-* Purpose:
-* Initialise a Channel from a foreign language interface.
-
-* Type:
-* Public function.
-
-* Synopsis:
-* #include "channel.h"
-* AstChannel *astChannelFor( const char *(* source)( void ),
-* char *(* source_wrap)( const char *(*)
-* ( void ), int * ),
-* void (* sink)( const char * ),
-* void (* sink_wrap)( void (*)( const char * ),
-* const char *, int * ),
-* const char *options, ... )
-
-* Class Membership:
-* Channel constructor.
-
-* Description:
-* This function creates a new Channel from a foreign language
-* interface and optionally initialises its attributes.
-*
-* A Channel implements low-level input/output for the AST library.
-* Writing an Object to a Channel (using astWrite) will generate a
-* textual representation of that Object, and reading from a
-* Channel (using astRead) will create a new Object from its
-* textual representation.
-*
-* Normally, when you use a Channel, you should provide "source"
-* and "sink" functions which connect it to an external data store
-* by reading and writing the resulting text. This function also
-* requires you to provide "wrapper" functions which will invoke
-* the source and sink functions. By default, however, a Channel
-* will read from standard input and write to standard output.
-
-* Parameters:
-* source
-* Pointer to a "source" function which will be used to obtain
-* lines of input text. Generally, this will be obtained by
-* casting a pointer to a source function which is compatible
-* with the "source_wrap" wrapper function (below). The pointer
-* should later be cast back to its original type by the
-* "source_wrap" function before the function is invoked.
-*
-* If "source" is NULL, the Channel will read from standard
-* input instead.
-* source_wrap
-* Pointer to a function which can be used to invoke the
-* "source" function supplied (above). This wrapper function is
-* necessary in order to hide variations in the nature of the
-* source function, such as may arise when it is supplied by a
-* foreign (non-C) language interface.
-*
-* The single parameter of the "source_wrap" function is a
-* pointer to the "source" function, and it should cast this
-* function pointer (as necessary) and invoke the function with
-* appropriate arguments to obtain the next line of input
-* text. The "source_wrap" function should then return a pointer
-* to a dynamically allocated, null terminated string containing
-* the text that was read. The string will be freed (using
-* astFree) when no longer required and the "source_wrap"
-* function need not concern itself with this. A NULL pointer
-* should be returned if there is no more input to read.
-*
-* If "source_wrap" is NULL, the Channel will read from standard
-* input instead.
-* sink
-* Pointer to a "sink" function which will be used to deliver
-* lines of output text. Generally, this will be obtained by
-* casting a pointer to a sink function which is compatible with
-* the "sink_wrap" wrapper function (below). The pointer should
-* later be cast back to its original type by the "sink_wrap"
-* function before the function is invoked.
-*
-* If "sink" is NULL, the Channel will write to standard output
-* instead.
-* sink_wrap
-* Pointer to a function which can be used to invoke the "sink"
-* function supplied (above). This wrapper function is necessary
-* in order to hide variations in the nature of the sink
-* function, such as may arise when it is supplied by a foreign
-* (non-C) language interface.
-*
-* The first parameter of the "sink_wrap" function is a pointer
-* to the "sink" function, and the second parameter is a pointer
-* to a const, null-terminated character string containing the
-* text to be written. The "sink_wrap" function should cast the
-* "sink" function pointer (as necessary) and invoke the
-* function with appropriate arguments to deliver the line of
-* output text. The "sink_wrap" function then returns void.
-*
-* If "sink_wrap" is NULL, the Channel will write to standard
-* output instead.
-* options
-* Pointer to a null-terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new Channel. The syntax used is identical to
-* that for the astSet function and may include "printf" format
-* specifiers identified by "%" symbols in the normal way.
-* ...
-* If the "options" string contains "%" format specifiers, then
-* an optional list of additional arguments may follow it in
-* order to supply values to be substituted for these
-* specifiers. The rules for supplying these are identical to
-* those for the astSet function (and for the C "printf"
-* function).
-
-* Returned Value:
-* astChannelFor()
-* A pointer to the new Channel.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-* function is invoked with the global error status set, or if it
-* should fail for any reason.
-* - This function is only available through the public interface
-* to the Channel class (not the protected interface) and is
-* intended solely for use in implementing foreign language
-* interfaces to this class.
-*-
-
-* Implememtation Notes:
-* - This function behaves exactly like astChannelId_, in that it
-* returns ID values and not true C pointers, but it has two
-* additional arguments. These are pointers to the "wrapper
-* functions" which are needed to accommodate foreign language
-* interfaces.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstChannel *new; /* Pointer to new Channel */
- va_list args; /* Variable argument list */
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialise the Channel, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitChannel( NULL, sizeof( AstChannel ), !class_init, &class_vtab,
- "Channel", source, source_wrap, sink, sink_wrap );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- Channel's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new Channel. */
- return astMakeId( new );
-}
-
-AstChannel *astLoadChannel_( void *mem, size_t size,
- AstChannelVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadChannel
-
-* Purpose:
-* Load a Channel.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "channel.h"
-* AstChannel *astLoadChannel( void *mem, size_t size,
-* AstChannelVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* Channel loader.
-
-* Description:
-* This function is provided to load a new Channel using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* Channel structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a Channel at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the Channel is to be
-* loaded. This must be of sufficient size to accommodate the
-* Channel data (sizeof(Channel)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the Channel (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the Channel structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstChannel) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new Channel. If this is NULL, a pointer
-* to the (static) virtual function table for the Channel class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "Channel" is used instead.
-
-* Returned Value:
-* A pointer to the new Channel.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstChannel *new; /* Pointer to the new Channel */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this Channel. In this case the
- Channel belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstChannel );
- vtab = &class_vtab;
- name = "Channel";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitChannelVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built Channel. */
- new = astLoadObject( mem, size, (AstObjectVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "Channel" );
-
-/* Set the pointers to the source and sink functions, and their
- wrapper functions, to NULL (we cannot restore these since they
- refer to process-specific addresses). */
- new->source = NULL;
- new->source_wrap = NULL;
- new->sink = NULL;
- new->sink_wrap = NULL;
-
-/* We do not have any data to pass to the source and sink functions. */
- new->data = NULL;
-
-/* No warnings yet. */
- new->warnings = NULL;
- new->nwarn = 0;
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* ReportLevel. */
-/* ------------ */
- new->report_level = astReadInt( channel, "rplev", -INT_MAX );
- if ( TestReportLevel( new, status ) ) SetReportLevel( new,
- new->report_level,
- status );
-
-/* Skip. */
-/* ----- */
- new->skip = astReadInt( channel, "skip", -INT_MAX );
- if ( TestSkip( new, status ) ) SetSkip( new, new->skip, status );
-
-/* Strict. */
-/* ------- */
- new->strict = astReadInt( channel, "strict", -INT_MAX );
- if ( TestStrict( new, status ) ) SetStrict( new, new->strict, status );
-
-/* Full. */
-/* ----- */
- new->full = astReadInt( channel, "full", -INT_MAX );
- if ( TestFull( new, status ) ) SetFull( new, new->full, status );
-
-/* Comment. */
-/* -------- */
- new->comment = astReadInt( channel, "comm", -INT_MAX );
- if ( TestComment( new, status ) ) SetComment( new, new->comment, status );
-
-/* If an error occurred, clean up by deleting the new Channel. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new Channel pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions
- defined by this class. Each simply checks the global error status
- and then locates and executes the appropriate member function,
- using the function pointer stored in the object's virtual function
- table (this pointer is located using the astMEMBER macro defined in
- "object.h").
-
- Note that the member function may not be the one defined here, as
- it may have been over-ridden by a derived class. However, it should
- still have the same interface. */
-void astGetNextData_( AstChannel *this, int begin, char **name, char **val, int *status ) {
- *name = NULL;
- *val = NULL;
- if ( !astOK ) return;
- (**astMEMBER(this,Channel,GetNextData))( this, begin, name, val, status );
-}
-char *astGetNextText_( AstChannel *this, int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Channel,GetNextText))( this, status );
-}
-void astPutNextText_( AstChannel *this, const char *line, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Channel,PutNextText))( this, line, status );
-}
-AstObject *astRead_( AstChannel *this, int *status ) {
- astDECLARE_GLOBALS
- if ( !astOK ) return NULL;
- astGET_GLOBALS(this);
- astAddWarning( this, 0, NULL, NULL, status );
- channel_data = this->data;
- return (**astMEMBER(this,Channel,Read))( this, status );
-}
-void astReadClassData_( AstChannel *this, const char *class, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Channel,ReadClassData))( this, class, status );
-}
-double astReadDouble_( AstChannel *this, const char *name, double def, int *status ) {
- if ( !astOK ) return 0.0;
- return (**astMEMBER(this,Channel,ReadDouble))( this, name, def, status );
-}
-int astReadInt_( AstChannel *this, const char *name, int def, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Channel,ReadInt))( this, name, def, status );
-}
-AstObject *astReadObject_( AstChannel *this, const char *name,
- AstObject *def, int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Channel,ReadObject))( this, name, def, status );
-}
-char *astReadString_( AstChannel *this, const char *name, const char *def, int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Channel,ReadString))( this, name, def, status );
-}
-void astWriteBegin_( AstChannel *this, const char *class,
- const char *comment, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Channel,WriteBegin))( this, class, comment, status );
-}
-void astWriteDouble_( AstChannel *this, const char *name, int set, int helpful,
- double value, const char *comment, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Channel,WriteDouble))( this, name, set, helpful, value,
- comment, status );
-}
-void astWriteEnd_( AstChannel *this, const char *class, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Channel,WriteEnd))( this, class, status );
-}
-void astWriteInt_( AstChannel *this, const char *name, int set, int helpful,
- int value, const char *comment, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Channel,WriteInt))( this, name, set, helpful, value,
- comment, status );
-}
-void astWriteIsA_( AstChannel *this, const char *class, const char *comment, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Channel,WriteIsA))( this, class, comment, status );
-}
-void astWriteString_( AstChannel *this, const char *name, int set, int helpful,
- const char *value, const char *comment, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Channel,WriteString))( this, name, set, helpful, value,
- comment, status );
-}
-void astPutChannelData_( AstChannel *this, void *data, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Channel,PutChannelData))( this, data, status );
-}
-
-AstKeyMap *astWarnings_( AstChannel *this, int *status ){
- if( !astOK ) return NULL;
- return (**astMEMBER(this,Channel,Warnings))( this, status );
-}
-
-/* Because of the variable argument list, we need to work a bit harder on
- astAddWarning. Functions that provide implementations of the
- astAddWarning method recieve the fully expanded message and so do not
- need a variable argument list. */
-
-void astAddWarning_( void *this_void, int level, const char *fmt,
- const char *method, int *status, ... ) {
- AstChannel *this;
- char buff[ 201 ];
- va_list args;
- int nc;
-
- this = astCheckChannel( this_void );
-
- if( fmt ) {
- if( astOK ) {
- va_start( args, status );
- nc = vsprintf( buff, fmt, args );
- va_end( args );
- if( nc > 200 ) {
- astError( AST__INTER, "astAddWarning(%s): Message buffer size "
- "exceeded (internal AST programming error).",
- status, astGetClass( this ) );
- } else {
- (**astMEMBER(this,Channel,AddWarning))( this, level, buff, method, status );
- }
- }
- } else {
- (**astMEMBER(this,Channel,AddWarning))( this, level, NULL, method, status );
- }
-}
-
-/* Count the number of times astWrite is invoked (excluding invocations
- made from within the astWriteObject method - see below). The count is
- done here so that invocations of astWrite within a sub-class will be
- included. Also store pointer to channel data in a thread-specific global
- variable. */
-int astWrite_( AstChannel *this, AstObject *object, int *status ) {
- astDECLARE_GLOBALS
- if ( !astOK ) return 0;
- astGET_GLOBALS(this);
- nwrite_invoc++;
- channel_data = this->data;
- astAddWarning( this, 0, NULL, NULL, status );
- return (**astMEMBER(this,Channel,Write))( this, object, status );
-}
-
-/* We do not want to count invocations of astWrite made from within the
- astWriteObject method. So decrement the number of invocations first
- (this assumes that each invocation of astWriteObject will only invoke
- astWrite once). Also store pointer to channel data in a thread-specific
- global variable. */
-void astWriteObject_( AstChannel *this, const char *name, int set,
- int helpful, AstObject *value, const char *comment, int *status ) {
- astDECLARE_GLOBALS
- if ( !astOK ) return;
- astGET_GLOBALS(this);
- nwrite_invoc--;
- channel_data = this->data;
- (**astMEMBER(this,Channel,WriteObject))( this, name, set, helpful, value,
- comment, status );
-}
-
-
-
-
-
diff --git a/ast-5.3-1/channel.h b/ast-5.3-1/channel.h
deleted file mode 100644
index 0e58de5..0000000
--- a/ast-5.3-1/channel.h
+++ /dev/null
@@ -1,624 +0,0 @@
-/*
-*+
-* Name:
-* channel.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the Channel class.
-
-* Invocation:
-* #include "channel.h"
-
-* Description:
-* This include file defines the interface to the Channel class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* A Channel is the basic form of AST I/O channel, through which
-* Objects may be written and later read back. It causes I/O to
-* take place using a textual format via standard input and
-* standard output.
-*
-* Writing to a Channel will result in a textual representation of
-* an Object being produced on standard output. Reading from a
-* Channel will causes a textual description of an Object to be
-* read from standard input, and that Object to be
-* re-created. Channel I/O is stream based, and multiple objects
-* may be written or read in succession through the same Channel. A
-* null Object pointer is returned if there is no more input to
-* read.
-
-* Inheritance:
-* The Channel class inherits from the Object class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* Comment (integer)
-* A boolean value (0 or 1) which controls whether comments are
-* to be included in textual output generated by a Channel. If
-* this value is non-zero (the default), then comments will be
-* included. If it is zero, comments will be omitted.
-* Full (integer)
-* A three-state flag (taking values -1, 0 or +1) which controls
-* the amount of information included in textual output
-* generated by a Channel. If this value is zero (the default),
-* then a modest amount of non-essential but useful information
-* will be included along with the output. If Full is negative,
-* all non-essential information will be suppressed, while if it
-* is positive, the output will include the maximum amount of
-* information about the Object being written.
-* Skip (integer)
-* A boolean value which indicates whether the Objects being
-* read through a Channel are inter-mixed with other external
-* data. If this value is zero (the default), then the source of
-* input data is expected to contain descriptions of AST Objects
-* and comments and nothing else (if anything else is read, an
-* error will result). If Skip is non-zero, then any non-Object
-* data encountered between Objects will simply be skipped over
-* in order to reach the next Object.
-
-* Methods Over-Ridden:
-* Public:
-* None.
-*
-* Protected:
-* astClearAttrib
-* Clear an attribute value for a Mapping.
-* astGetAttrib
-* Get an attribute value for a Mapping.
-* astSetAttrib
-* Set an attribute value for a Mapping.
-* astTestAttrib
-* Test if an attribute value has been set for a Mapping.
-
-* New Methods Defined:
-* Public:
-* astRead
-* Read an Object from a Channel.
-* astWrite
-* Write an Object to a Channel.
-*
-* Protected:
-* astClearComment
-* Clear the Comment attribute for a Channel.
-* astClearFull
-* Clear the Full attribute for a Channel.
-* astClearSkip
-* Clear the Skip attribute for a Channel.
-* astGetComment
-* Get the value of the Comment attribute for a Channel.
-* astGetFull
-* Get the value of the Full attribute for a Channel.
-* astGetNextData
-* Read the next item of data from a data source.
-* astGetNextText
-* Read the next line of input text from a data source.
-* astGetSkip
-* Get the value of the Skip attribute for a Channel.
-* astPutNextText
-* Write a line of output text to a data sink.
-* astReadClassData
-* Read values from a data source for a class loader.
-* astReadDouble
-* Read a double value as part of loading a class.
-* astReadInt
-* Read an int value as part of loading a class.
-* astReadObject
-* Read a (sub)Object as part of loading a class.
-* astReadString
-* Read a string value as part of loading a class.
-* astSetComment
-* Set the value of the Comment attribute for a Channel.
-* astSetFull
-* Set the value of the Full attribute for a Channel.
-* astSetSkip
-* Set the value of the Skip attribute for a Channel.
-* astTestComment
-* Test whether a value has been set for the Comment attribute of a
-* Channel.
-* astTestFull
-* Test whether a value has been set for the Full attribute of a
-* Channel.
-* astTestSkip
-* Test whether a value has been set for the Skip attribute of a
-* Channel.
-* astWriteBegin
-* Write a "Begin" data item to a data sink.
-* astWriteDouble
-* Write a double value to a data sink.
-* astWriteEnd
-* Write an "End" data item to a data sink.
-* astWriteInt
-* Write an integer value to a data sink.
-* astWriteIsA
-* Write an "IsA" data item to a data sink.
-* astWriteObject
-* Write an Object as a value to a data sink.
-* astWriteString
-* Write a string value to a data sink.
-
-* Other Class Functions:
-* Public:
-* astChannel
-* Create a Channel.
-* astChannelFor
-* Create a Channel from a foreign language interface.
-* astIsAChannel
-* Test class membership.
-*
-* Protected:
-* astCheckChannel
-* Validate class membership.
-* astInitChannel
-* Initialise a Channel.
-* astInitChannelVtab
-* Initialise the virtual function table for the Channel class.
-* astLoadChannel
-* Load a Channel.
-
-* Type Definitions:
-* Public:
-* AstChannel
-* Channel object type.
-*
-* Protected:
-* AstChannelVtab
-* Channel virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 12-AUG-1996 (RFWS):
-* Original version.
-* 12-DEC-1996 (RFWS):
-* Added the astChannelFor function.
-* 11-NOV-2002 (DSB):
-* Added astWriteInvocations.
-* 8-JAN-2003 (DSB):
-* Added protected astInitAxisVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h" /* Base Object class */
-
-/* Note that the usual setting of the CHANNEL_INCLUDED flag, which
- prevents this file being included more than once, must be deferred
- until after including the "object.h" file. This is because
- "object.h" needs to include the present interface definition (as a
- form of "forward reference") in order to have access to I/O
- Channels itself. */
-#if !defined( CHANNEL_INCLUDED )
-#define CHANNEL_INCLUDED
-
-/* C header files. */
-/* --------------- */
-#include <stddef.h>
-
-/* Macros */
-/* ====== */
-/* Define constants used to size global arrays in this module. */
-#define AST__CHANNEL_GETATTRIB_BUFF_LEN 50
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-
-/* The astWarnings function returns a KeyMap pointer, but we cannot
- include keymap.h here to define the AstKeyMap type since keymap.h
- itself include sthis file. So we make a temporary declaration which
- will be replaced by the full one when the keymap.h file is included. */
-struct AstKeyMap;
-
-/* Channel structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each
- object in the class (e.g. its instance variables). */
-typedef struct AstChannel {
-
-/* Attributes inherited from the parent class. */
- AstObject object; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- const char *(* source)( void ); /* Pointer to source function */
- char *(* source_wrap)( const char *(*)(void), int * );
- /* Source wrapper function pointer */
- void (* sink)( const char * ); /* Pointer to sink function */
- void (* sink_wrap)( void (*)( const char *), const char *, int * );
- /* Sink wrapper function pointer */
- int comment; /* Output comments? */
- int full; /* Set max/normal/min information level */
- int skip; /* Skip data between Objects? */
- int report_level; /* Skip data between Objects? */
- int strict; /* Report unexpected data items? */
- void *data; /* Data to pass to source/sink functions */
- char **warnings; /* Array of warning strings */
- int nwarn; /* Size of warnings array */
-} AstChannel;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstChannelVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstObjectVtab object_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- struct AstKeyMap *(* Warnings)( AstChannel *, int * );
- AstObject *(* Read)( AstChannel *, int * );
- AstObject *(* ReadObject)( AstChannel *, const char *, AstObject *, int * );
- char *(* GetNextText)( AstChannel *, int * );
- char *(* ReadString)( AstChannel *, const char *, const char *, int * );
- double (* ReadDouble)( AstChannel *, const char *, double, int * );
- int (* GetComment)( AstChannel *, int * );
- int (* GetFull)( AstChannel *, int * );
- int (* GetStrict)( AstChannel *, int * );
- int (* ReadInt)( AstChannel *, const char *, int, int * );
- int (* TestComment)( AstChannel *, int * );
- int (* TestFull)( AstChannel *, int * );
- int (* TestStrict)( AstChannel *, int * );
- int (* Write)( AstChannel *, AstObject *, int * );
- void (* AddWarning)( AstChannel *, int, const char *, const char *, int * );
- void (* ClearComment)( AstChannel *, int * );
- void (* ClearFull)( AstChannel *, int * );
- void (* ClearStrict)( AstChannel *, int * );
- void (* GetNextData)( AstChannel *, int, char **, char **, int * );
- void (* PutChannelData)( AstChannel *, void *, int * );
- void (* PutNextText)( AstChannel *, const char *, int * );
- void (* ReadClassData)( AstChannel *, const char *, int * );
- void (* SetComment)( AstChannel *, int, int * );
- void (* SetFull)( AstChannel *, int, int * );
- void (* SetStrict)( AstChannel *, int, int * );
- void (* WriteBegin)( AstChannel *, const char *, const char *, int * );
- void (* WriteDouble)( AstChannel *, const char *, int, int, double, const char *, int * );
- void (* WriteEnd)( AstChannel *, const char *, int * );
- void (* WriteInt)( AstChannel *, const char *, int, int, int, const char *, int * );
- void (* WriteIsA)( AstChannel *, const char *, const char *, int * );
- void (* WriteObject)( AstChannel *, const char *, int, int, AstObject *, const char *, int * );
- void (* WriteString)( AstChannel *, const char *, int, int, const char *, const char *, int * );
-
- int (* GetSkip)( AstChannel *, int * );
- int (* TestSkip)( AstChannel *, int * );
- void (* ClearSkip)( AstChannel *, int * );
- void (* SetSkip)( AstChannel *, int, int * );
-
- int (* GetReportLevel)( AstChannel *, int * );
- int (* TestReportLevel)( AstChannel *, int * );
- void (* ClearReportLevel)( AstChannel *, int * );
- void (* SetReportLevel)( AstChannel *, int, int * );
-
-} AstChannelVtab;
-
-/* Define a private structure type used to store linked lists of
- name-value associations. */
-typedef struct AstChannelValue {
- struct AstChannelValue *flink; /* Link to next element */
- struct AstChannelValue *blink; /* Link to previous element */
- char *name; /* Pointer to name string */
- union { /* Holds pointer to value */
- char *string; /* Pointer to string value */
- AstObject *object; /* Pointer to Object value */
- } ptr;
- int is_object; /* Whether value is an Object (else string) */
-} AstChannelValue;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstChannelGlobals {
- AstChannelVtab Class_Vtab;
- int Class_Init;
- int AstReadClassData_Msg;
- char GetAttrib_Buff[ AST__CHANNEL_GETATTRIB_BUFF_LEN + 1 ];
- int Items_Written;
- int Current_Indent;
- int Nest;
- int Nwrite_Invoc;
- char **Object_Class;
- AstChannelValue **Values_List;
- char **Values_Class;
- int *Values_OK;
- int *End_Of_Object;
- void *Channel_Data;
-} AstChannelGlobals;
-
-#endif
-
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Channel) /* Check class membership */
-astPROTO_ISA(Channel) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstChannel *astChannel_( const char *(*)( void ), void (*)( const char * ),
- const char *, int *, ...);
-#else
-AstChannel *astChannelId_( const char *(*)( void ), void (*)( const char * ),
- const char *, ... )__attribute__((format(printf,3,4)));
-AstChannel *astChannelForId_( const char *(*)( void ),
- char *(*)( const char *(*)( void ), int * ),
- void (*)( const char * ),
- void (*)( void (*)( const char * ),
- const char *, int * ),
- const char *, ... );
-#endif
-
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstChannel *astInitChannel_( void *, size_t, int, AstChannelVtab *,
- const char *, const char *(*)( void ),
- char *(*)( const char *(*)( void ), int * ),
- void (*)( const char * ),
- void (*)( void (*)( const char * ),
- const char *, int * ), int * );
-
-
-/* Vtab initialiser. */
-void astInitChannelVtab_( AstChannelVtab *, const char *, int * );
-
-/* Loader. */
-AstChannel *astLoadChannel_( void *, size_t, AstChannelVtab *,
- const char *, AstChannel *channel, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitChannelGlobals_( AstChannelGlobals * );
-#endif
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-AstObject *astRead_( AstChannel *, int * );
-int astWrite_( AstChannel *, AstObject *, int * );
-void astPutChannelData_( AstChannel *, void *, int * );
-void *astChannelData_( void );
-struct AstKeyMap *astWarnings_( AstChannel *, int * );
-
-char *astSourceWrap_( const char *(*)( void ), int * );
-void astSinkWrap_( void (*)( const char * ), const char *, int * );
-
-# if defined(astCLASS) /* Protected */
-AstObject *astReadObject_( AstChannel *, const char *, AstObject *, int * );
-char *astGetNextText_( AstChannel *, int * );
-char *astReadString_( AstChannel *, const char *, const char *, int * );
-double astReadDouble_( AstChannel *, const char *, double, int * );
-int astGetComment_( AstChannel *, int * );
-int astGetFull_( AstChannel *, int * );
-int astGetStrict_( AstChannel *, int * );
-int astReadInt_( AstChannel *, const char *, int, int * );
-int astTestComment_( AstChannel *, int * );
-int astTestFull_( AstChannel *, int * );
-int astTestStrict_( AstChannel *, int * );
-void astAddWarning_( void *, int, const char *, const char *, int *, ... )__attribute__((format(printf,3,6)));
-void astClearComment_( AstChannel *, int * );
-void astClearFull_( AstChannel *, int * );
-void astClearStrict_( AstChannel *, int * );
-void astGetNextData_( AstChannel *, int, char **, char **, int * );
-void astPutNextText_( AstChannel *, const char *, int * );
-void astReadClassData_( AstChannel *, const char *, int * );
-void astSetComment_( AstChannel *, int, int * );
-void astSetFull_( AstChannel *, int, int * );
-void astSetStrict_( AstChannel *, int, int * );
-void astWriteBegin_( AstChannel *, const char *, const char *, int * );
-void astWriteDouble_( AstChannel *, const char *, int, int, double, const char *, int * );
-void astWriteEnd_( AstChannel *, const char *, int * );
-void astWriteInt_( AstChannel *, const char *, int, int, int, const char *, int * );
-int astWriteInvocations_( int * );
-void astWriteIsA_( AstChannel *, const char *, const char *, int * );
-void astWriteObject_( AstChannel *, const char *, int, int, AstObject *, const char *, int * );
-void astWriteString_( AstChannel *, const char *, int, int, const char *, const char *, int * );
-
-int astGetSkip_( AstChannel *, int * );
-int astTestSkip_( AstChannel *, int * );
-void astClearSkip_( AstChannel *, int * );
-void astSetSkip_( AstChannel *, int, int * );
-
-int astGetReportLevel_( AstChannel *, int * );
-int astTestReportLevel_( AstChannel *, int * );
-void astClearReportLevel_( AstChannel *, int * );
-void astSetReportLevel_( AstChannel *, int, int * );
-
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them to
- validate their own arguments. We must use a cast when passing object
- pointers (so that they can accept objects from derived classes). */
-
-/* Check class membership. */
-#define astCheckChannel(this) astINVOKE_CHECK(Channel,this,0)
-#define astVerifyChannel(this) astINVOKE_CHECK(Channel,this,1)
-
-/* Test class membership. */
-#define astIsAChannel(this) astINVOKE_ISA(Channel,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astChannel astINVOKE(F,astChannel_)
-#else
-#define astChannel astINVOKE(F,astChannelId_)
-#define astChannelFor astINVOKE(F,astChannelForId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitChannel(mem,size,init,vtab,name,source,source_wrap,sink,sink_wrap) \
-astINVOKE(O,astInitChannel_(mem,size,init,vtab,name,source,source_wrap,sink,sink_wrap,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitChannelVtab(vtab,name) astINVOKE(V,astInitChannelVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadChannel(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadChannel_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to member functions. */
-/* ------------------------------- */
-/* Here we make use of astCheckChannel to validate Channel pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#define astRead(this) \
-astINVOKE(O,astRead_(astCheckChannel(this),STATUS_PTR))
-#define astWrite(this,object) \
-astINVOKE(V,astWrite_(astCheckChannel(this),astCheckObject(object),STATUS_PTR))
-#define astPutChannelData(this,data) \
-astINVOKE(V,astPutChannelData_(astCheckChannel(this),data,STATUS_PTR))
-#define astWarnings(this) \
-astINVOKE(O,astWarnings_(astCheckChannel(this),STATUS_PTR))
-
-#define astSourceWrap astSourceWrap_
-#define astSinkWrap astSinkWrap_
-#define astChannelData astChannelData_()
-
-#if defined(astCLASS) /* Protected */
-#define astAddWarning astAddWarning_
-
-#define astClearComment(this) \
-astINVOKE(V,astClearComment_(astCheckChannel(this),STATUS_PTR))
-#define astClearFull(this) \
-astINVOKE(V,astClearFull_(astCheckChannel(this),STATUS_PTR))
-#define astClearStrict(this) \
-astINVOKE(V,astClearStrict_(astCheckChannel(this),STATUS_PTR))
-#define astGetComment(this) \
-astINVOKE(V,astGetComment_(astCheckChannel(this),STATUS_PTR))
-#define astGetFull(this) \
-astINVOKE(V,astGetFull_(astCheckChannel(this),STATUS_PTR))
-#define astGetNextData(this,begin,name,val) \
-astINVOKE(V,astGetNextData_(astCheckChannel(this),begin,name,val,STATUS_PTR))
-#define astGetNextText(this) \
-astINVOKE(V,astGetNextText_(astCheckChannel(this),STATUS_PTR))
-#define astGetStrict(this) \
-astINVOKE(V,astGetStrict_(astCheckChannel(this),STATUS_PTR))
-#define astPutNextText(this,line) \
-astINVOKE(V,astPutNextText_(astCheckChannel(this),line,STATUS_PTR))
-#define astReadClassData(this,class) \
-astINVOKE(V,astReadClassData_(astCheckChannel(this),class,STATUS_PTR))
-#define astReadDouble(this,name,def) \
-astINVOKE(V,astReadDouble_(astCheckChannel(this),name,def,STATUS_PTR))
-#define astReadInt(this,name,def) \
-astINVOKE(V,astReadInt_(astCheckChannel(this),name,def,STATUS_PTR))
-#define astReadObject(this,name,def) \
-astINVOKE(O,astReadObject_(astCheckChannel(this),name,(def)?astCheckObject(def):NULL,STATUS_PTR))
-#define astReadString(this,name,def) \
-astINVOKE(V,astReadString_(astCheckChannel(this),name,def,STATUS_PTR))
-#define astSetComment(this,value) \
-astINVOKE(V,astSetComment_(astCheckChannel(this),value,STATUS_PTR))
-#define astSetFull(this,value) \
-astINVOKE(V,astSetFull_(astCheckChannel(this),value,STATUS_PTR))
-#define astSetStrict(this,value) \
-astINVOKE(V,astSetStrict_(astCheckChannel(this),value,STATUS_PTR))
-#define astTestComment(this) \
-astINVOKE(V,astTestComment_(astCheckChannel(this),STATUS_PTR))
-#define astTestFull(this) \
-astINVOKE(V,astTestFull_(astCheckChannel(this),STATUS_PTR))
-#define astTestStrict(this) \
-astINVOKE(V,astTestStrict_(astCheckChannel(this),STATUS_PTR))
-#define astWriteBegin(this,class,comment) \
-astINVOKE(V,astWriteBegin_(astCheckChannel(this),class,comment,STATUS_PTR))
-#define astWriteDouble(this,name,set,helpful,value,comment) \
-astINVOKE(V,astWriteDouble_(astCheckChannel(this),name,set,helpful,value,comment,STATUS_PTR))
-#define astWriteEnd(this,class) \
-astINVOKE(V,astWriteEnd_(astCheckChannel(this),class,STATUS_PTR))
-#define astWriteInt(this,name,set,helpful,value,comment) \
-astINVOKE(V,astWriteInt_(astCheckChannel(this),name,set,helpful,value,comment,STATUS_PTR))
-#define astWriteIsA(this,class,comment) \
-astINVOKE(V,astWriteIsA_(astCheckChannel(this),class,comment,STATUS_PTR))
-#define astWriteObject(this,name,set,helpful,value,comment) \
-astINVOKE(V,astWriteObject_(astCheckChannel(this),name,set,helpful,astCheckObject(value),comment,STATUS_PTR))
-#define astWriteString(this,name,set,helpful,value,comment) \
-astINVOKE(V,astWriteString_(astCheckChannel(this),name,set,helpful,value,comment,STATUS_PTR))
-
-#define astWriteInvocations astWriteInvocations_(STATUS_PTR)
-
-#define astClearSkip(this) \
-astINVOKE(V,astClearSkip_(astCheckChannel(this),STATUS_PTR))
-#define astGetSkip(this) \
-astINVOKE(V,astGetSkip_(astCheckChannel(this),STATUS_PTR))
-#define astSetSkip(this,value) \
-astINVOKE(V,astSetSkip_(astCheckChannel(this),value,STATUS_PTR))
-#define astTestSkip(this) \
-astINVOKE(V,astTestSkip_(astCheckChannel(this),STATUS_PTR))
-
-#define astClearReportLevel(this) \
-astINVOKE(V,astClearReportLevel_(astCheckChannel(this),STATUS_PTR))
-#define astGetReportLevel(this) \
-astINVOKE(V,astGetReportLevel_(astCheckChannel(this),STATUS_PTR))
-#define astSetReportLevel(this,value) \
-astINVOKE(V,astSetReportLevel_(astCheckChannel(this),value,STATUS_PTR))
-#define astTestReportLevel(this) \
-astINVOKE(V,astTestReportLevel_(astCheckChannel(this),STATUS_PTR))
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/circle.c b/ast-5.3-1/circle.c
deleted file mode 100644
index a45d2e2..0000000
--- a/ast-5.3-1/circle.c
+++ /dev/null
@@ -1,2894 +0,0 @@
-/*
-*class++
-* Name:
-* Circle
-
-* Purpose:
-* A circular or spherical region within a Frame.
-
-* Constructor Function:
-c astCircle
-f AST_CIRCLE
-
-* Description:
-* The Circle class implements a Region which represents a circle or
-* sphere within a Frame.
-
-* Inheritance:
-* The Circle class inherits from the Region class.
-
-* Attributes:
-* The Circle class does not define any new attributes beyond
-* those which are applicable to all Regions.
-
-* Functions:
-c In addition to those functions applicable to all Regions, the
-c following functions may also be applied to all Circles:
-f In addition to those routines applicable to all Regions, the
-f following routines may also be applied to all Circles:
-*
-c - astCirclePars: Get the geometric parameters of the Circle
-c - AST_CIRCLEPARS: Get the geometric parameters of the Circle
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2009 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 31-AUG-2004 (DSB):
-* Original version.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS Circle
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
- compare bad values directory because of the danger of floating point
- exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E9*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "region.h" /* Coordinate regions (parent class) */
-#include "channel.h" /* I/O channels */
-#include "box.h" /* Box Regions */
-#include "wcsmap.h" /* Definitons of AST__DPI etc */
-#include "circle.h" /* Interface definition for this class */
-#include "ellipse.h" /* Interface definition for ellipse class */
-#include "mapping.h" /* Position mappings */
-#include "unitmap.h" /* Unit Mapping */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstMapping *(* parent_simplify)( AstMapping *, int * );
-static void (* parent_setregfs)( AstRegion *, AstFrame *, int * );
-static void (* parent_resetcache)( AstRegion *, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Circle)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Circle,Class_Init)
-#define class_vtab astGLOBAL(Circle,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstCircleVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstCircle *astCircleId_( void *, int, const double[], const double[], void *, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMapping *Simplify( AstMapping *, int * );
-static AstPointSet *RegBaseMesh( AstRegion *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static double *CircumPoint( AstFrame *, int, const double *, double, int * );
-static double *RegCentre( AstRegion *this, double *, double **, int, int, int * );
-static int RegPins( AstRegion *, AstPointSet *, AstRegion *, int **, int * );
-static int RegTrace( AstRegion *, int, double *, double **, int * );
-static void Cache( AstCircle *, int * );
-static void CalcPars( AstFrame *, AstPointSet *, double *, double *, double *, int * );
-static void CirclePars( AstCircle *, double *, double *, double *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void RegBaseBox( AstRegion *this, double *, double *, int * );
-static void ResetCache( AstRegion *this, int * );
-static void SetRegFS( AstRegion *, AstFrame *, int * );
-
-/* Member functions. */
-/* ================= */
-
-AstRegion *astBestCircle_( AstPointSet *mesh, double *cen, AstRegion *unc, int *status ){
-/*
-*+
-* Name:
-* astBestCircle
-
-* Purpose:
-* Find the best fitting Circle through a given mesh of points.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "circle.h"
-* AstRegion *astBestCircle( AstPointSet *mesh, double *cen, AstRegion *unc )
-
-* Class Membership:
-* Circle member function
-
-* Description:
-* This function finds the best fitting Circle through a given mesh of
-* points.
-
-* Parameters:
-* mesh
-* Pointer to a PointSet holding the mesh of points. They are
-* assumed to be in the Frame represented by "unc".
-* cen
-* Pointer to an array holding the coordinates of the new Circle
-* centre.
-* unc
-* A Region representing the uncertainty associated with each point
-* on the mesh.
-
-* Returned Value:
-* Pointer to the best fitting Circle. It will inherit the positional
-* uncertainty and Frame represented by "unc".
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-
-*-
-*/
-
-/* Local Variables: */
- AstRegion *result;
- double *p;
- double rad;
- double **ptr;
- double d;
- double s2r;
- double p0;
- int ic;
- int ip;
- int n;
- int nc;
- int np;
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get no. of points in the mesh, and the number of axis values per point. */
- np = astGetNpoint( mesh );
- nc = astGetNcoord( mesh );
-
-/* Get pointers to the axis values. */
- ptr = astGetPoints( mesh );
-
-/* Check pointers can be used safely */
- if( astOK ) {
-
-/* We find ther sum of the squared axis increments from the supplied
- centre to each of the supplied points. Initialise the sum to zero. */
- s2r = 0.0;
- n = 0;
-
-/* Loop round all axes. */
- for( ic = 0; ic < nc; ic++ ) {
- p = ptr[ ic ];
- p0 = cen[ ic ];
-
-/* Loop round all values for this axis. */
- for( ip = 0; ip < np; ip++, p++ ) {
- if( *p != AST__BAD ) {
-
-/* Increment the sums */
- d = *p - p0;
- s2r += d*d;
- n++;
-
- }
- }
- }
-
-/* Find the RMS distance of the points from the supplied centre. This is
- the radius of the best fitting circle. */
- if( n > 0 ) {
- rad = sqrt( nc*s2r/n );
-
-/* Create the returned Region. */
- result = (AstRegion *) astCircle( unc, 1, cen, &rad, unc, "", status );
- }
- }
-
-/* Return NULL if anything went wrong. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result.*/
- return result;
-}
-
-static void Cache( AstCircle *this, int *status ){
-/*
-* Name:
-* Cache
-
-* Purpose:
-* Calculate intermediate values and cache them in the Circle structure.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "circle.h"
-* void Cache( AstCircle *this, int *status )
-
-* Class Membership:
-* Circle member function
-
-* Description:
-* This function uses the PointSet stored in the parent Region to calculate
-* some intermediate values which are useful in other methods. These
-* values are stored within the Circle structure.
-
-* Parameters:
-* this
-* Pointer to the Circle.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstFrame *frm;
- double *centre;
- double *lb;
- double *ub;
- double radius;
- int i;
- int nc;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Do Nothing if the cached information is up to date. */
- if( this->stale ) {
-
-/* Get a pointer to the base Frame and the number of base axes. */
- frm = astGetFrame( ((AstRegion *) this)->frameset, AST__BASE );
- nc = astGetNaxes( frm );
-
-/* Allocate memory to hold the centre coords. */
- centre = astMalloc( sizeof( double )*astGetNaxes( frm ) );
-
-/* Get the radius and centre of the Circle in the base Frame, using the
- centre and circumference positions stored in the parent Region structure. */
- CalcPars( frm, ( (AstRegion *) this)->points, centre, &radius, NULL,
- status );
-
-/* Allocate memory to store the base frame bounding box. This is just
- initialised here. It is set properly when the astRegBaseMesh
- function is called. This box should not be used unless the "basemesh"
- component of the parent Region structure is set to a non-null value. */
- lb = (double *) astMalloc( sizeof( double )*(size_t) nc );
- ub = (double *) astMalloc( sizeof( double )*(size_t) nc );
-
-/* Initialise the bounding box. */
- for( i = 0; astOK && i < nc; i++ ) {
- lb[ i ] = -DBL_MAX;
- ub[ i ] = DBL_MAX;
- }
-
-/* If everything went OK, store these values in the Circle structure. */
- if( astOK ) {
- this->radius = radius;
-
- astFree( this->centre );
- this->centre = centre;
- centre = NULL;
-
- astFree( this->lb );
- this->lb = lb;
- lb = NULL;
-
- astFree( this->ub );
- this->ub = ub;
- ub = NULL;
- }
-
-/* Free resources */
- frm = astAnnul( frm );
- if( centre ) centre = astFree( centre );
-
-/* Indicate cached information is up to date. */
- this->stale = 0;
- }
-}
-
-static void CalcPars( AstFrame *frm, AstPointSet *pset, double *centre,
- double *radius, double *p1, int *status ){
-/*
-* Name:
-* CalcPars
-
-* Purpose:
-* Calculate the geometric parameters of the supplied Circle.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "circle.h"
-* double *CalcPars( AstFrame *frm, AstPointSet *pset, double *centre,
-* double *radius, double *p1, int *status )
-
-* Class Membership:
-* Circle member function
-
-* Description:
-* This function uses the supplied PointSet to calculate the geometric
-* parameters that describe the a crcle. These values are returned in
-* a newly allocated dynamic array.
-
-* Parameters:
-* frm
-* Pointer to the Frame in which the circle is defined.
-* pset
-* Pointer to a PointSet. The first point should be the circle
-* centre, and the second point should be a point on the circle
-* circumference.
-* centre
-* An array in which to return the axis values at the circle centre.
-* The length of this array should be no less than the number of
-* axes in "frm".
-* radius
-* Pointer to a double in which to return the circle radius,
-* expressed as a geodesic distance in the supplied Frame.
-* p1
-* An array in which to return the coordinates of a point on the
-* circumference of the circle. The length of this array should be
-* no less than the number of axes in "frm". Can be NULL if the
-* circumference position is not needed.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- double **ptr;
- double *circum;
- int i;
- int nc;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get and the number of axes. */
- nc = astGetNaxes( frm );
-
-/* Get pointers to the coordinate data in the supplied PointSet. */
- ptr = astGetPoints( pset );
-
-/* If no p1 array was supplied, create a temporary work array to hold the
- circumference position. */
- if( !p1 ) {
- circum = astMalloc( sizeof( double )*nc );
- } else {
- circum = p1;
- }
-
-/* Check pointers can be used safely. */
- if( ptr ) {
-
-/* Copy the two points in to the allocated memory. */
- for( i = 0; i < nc; i++ ) {
- centre[ i ] = ptr[ i ][ 0 ];
- circum[ i ] = ptr[ i ][ 1 ];
- }
-
-/* Return the geodesic distance between these two points as the radius. */
- *radius = astDistance( frm, centre, circum );
- }
-
-/* Free any work array. */
- if( !p1 ) circum = astFree( circum );
-}
-
-static void CirclePars( AstCircle *this, double *centre, double *radius,
- double *p1, int *status ){
-/*
-*++
-* Name:
-c astCirclePars
-f AST_CIRCLEPARS
-
-* Purpose:
-* Returns the geometric parameters of an Circle.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "circle.h"
-c void astCirclePars( AstCircle *this, double *centre, double *radius,
-c double *p1 )
-f CALL AST_CIRCLEPARS( THIS, CENTRE, RADIUS, P1, STATUS )
-
-* Class Membership:
-* Region method.
-
-* Description:
-c This function
-f This routine
-* returns the geometric parameters describing the supplied Circle.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Region.
-c centre
-f CENTRE( * ) = DOUBLE PRECISION (Returned)
-c Pointer to an array
-f An array
-* in which to return the coordinates of the Circle centre.
-* The length of this array should be no less than the number of
-* axes in the associated coordinate system.
-c radius
-f RADIUS = DOUBLE PRECISION (Returned)
-* Returned holding the radius of the Circle, as an geodesic
-* distance in the associated coordinate system.
-c p1
-f P1( * ) = DOUBLE PRECISION (Returned)
-c Pointer to an array
-f An array
-* in which to return the coordinates of a point on the
-* circumference of the Circle. The length of this array should be
-* no less than the number of axes in the associated coordinate system.
-c A NULL pointer can be supplied if the circumference position is
-c not needed.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - If the coordinate system represented by the Circle has been
-* changed since it was first created, the returned parameters refer
-* to the new (changed) coordinate system, rather than the original
-* coordinate system. Note however that if the transformation from
-* original to new coordinate system is non-linear, the shape
-* represented by the supplied Circle object may not be an accurate
-* circle.
-*--
-*/
-
-/* Local Variables: */
- AstRegion *this_region; /* Parent Region pointer */
- AstFrame *frm; /* Current Frame represented by the Circle */
- AstPointSet *pset; /* PointSet holding PointList axis values */
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* Store a pointer to the parent region structure. */
- this_region = (AstRegion *) this;
-
-/* Transform the base Frame axis values into the current Frame. */
- pset = astTransform( this_region->frameset, this_region->points, 1, NULL );
-
-/* Get the Circle frame. */
- frm = astGetFrame( this_region->frameset, AST__CURRENT );
-
-/* Calculate the required parameters. */
- CalcPars( frm, pset, centre, radius, p1, status );
-
-/* Free resources */
- frm = astAnnul( frm );
- pset = astAnnul( pset );
-}
-
-static double *CircumPoint( AstFrame *frm, int nax, const double *centre,
- double radius, int *status ){
-/*
-* Name:
-* CircumPoint
-
-* Purpose:
-* Find a point on the circumference of the circle.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "circle.h"
-* double *CircumPoint( AstFrame *frm, int nax, const double *centre,
-* double radius, int *status )
-
-* Class Membership:
-* Circle member function
-
-* Description:
-* This function returns a dynamically allocated array containing the
-* axis values at a point on the circumference of the circle specified
-* by a given centre and radius. The returned point is the point at
-* which the circle crosses the first axis.
-
-* Parameters:
-* frm
-* Pointer to the Frame in which the circle is defined.
-* nax
-* The number of axes in the Frame.
-* centre
-* An array holding the axis values at the circle centre.
-* radius
-* The circle radius, expressed as a geodesic distance in the
-* supplied Frame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a 1D array holding the axis values at the point where
-* the circle crosses the first frame axis. The length of this array
-* will equal the number of axes in the supsplied Frame. It should be
-* freed using astFree when no longer needed.
-
-*/
-
-/* Local Variables: */
- double *circum;
- double *work;
- int i;
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Allocate the returned array. */
- circum = astMalloc( sizeof( double)*(size_t) nax );
-
-/* Allocate work space */
- work = astMalloc( sizeof( double)*(size_t) nax );
-
-/* Check pointers can be used safely. */
- if( astOK ) {
-
-/* Find the coords of a point that is offset away from the centre
- position along the first axis. We use the supplied radius value as a
- convenient offset length, but the actual length used is not critical. */
- for( i = 0; i < nax; i++ ) work[ i ] = centre[ i ];
- work[ 0 ] = astAxOffset( frm, 1, work[ 0 ], radius );
-
-/* Offset away from the centre position, towards the position found
- above, going the distance specified by the supplied radius. */
- astOffset( frm, centre, work, radius, (double *) circum );
- }
-
-/* Free resources. */
- work = astFree( work );
-
-/* Return the result. */
- return circum;
-}
-
-void astInitCircleVtab_( AstCircleVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitCircleVtab
-
-* Purpose:
-* Initialise a virtual function table for a Circle.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "circle.h"
-* void astInitCircleVtab( AstCircleVtab *vtab, const char *name )
-
-* Class Membership:
-* Circle vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the Circle class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
- AstRegionVtab *region; /* Pointer to Region component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitRegionVtab( (AstRegionVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsACircle) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstRegionVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
- vtab->CirclePars = CirclePars;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- mapping = (AstMappingVtab *) vtab;
- region = (AstRegionVtab *) vtab;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
- parent_simplify = mapping->Simplify;
- mapping->Simplify = Simplify;
-
- parent_setregfs = region->SetRegFS;
- region->SetRegFS = SetRegFS;
-
- parent_resetcache = region->ResetCache;
- region->ResetCache = ResetCache;
-
- region->RegPins = RegPins;
- region->RegTrace = RegTrace;
- region->RegBaseMesh = RegBaseMesh;
- region->RegBaseBox = RegBaseBox;
- region->RegCentre = RegCentre;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
-
-/* Declare the copy constructor, destructor and class dump
- functions. */
- astSetDelete( vtab, Delete );
- astSetCopy( vtab, Copy );
- astSetDump( vtab, Dump, "Circle", "Circular or spherical region" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static void RegBaseBox( AstRegion *this_region, double *lbnd, double *ubnd, int *status ){
-/*
-* Name:
-* RegBaseBox
-
-* Purpose:
-* Returns the bounding box of an un-negated Region in the base Frame of
-* the encapsulated FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "circle.h"
-* void RegBaseBox( AstRegion *this, double *lbnd, double *ubnd, int *status )
-
-* Class Membership:
-* Circle member function (over-rides the astRegBaseBox protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns the upper and lower axis bounds of a Region in
-* the base Frame of the encapsulated FrameSet, assuming the Region
-* has not been negated. That is, the value of the Negated attribute
-* is ignored.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* lbnd
-* Pointer to an array in which to return the lower axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-* ubnd
-* Pointer to an array in which to return the upper axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstCircle *this; /* Pointer to Circle structure */
- AstFrame *frm; /* Pointer to base Frame */
- const char *class; /* Pointer to class name */
- int i; /* Axis index */
- int nb; /* No. of axes in base Frame */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the Circle structure */
- this = (AstCircle *) this_region;
-
-/* Ensure cached information is available. */
- Cache( this, status );
-
-/* Get a pointer to the base Frame in the Region, and get the number of
- axes. */
- frm = astGetFrame( this_region->frameset, AST__BASE );
- nb = astGetNaxes( frm );
-
-/* If the Frame is a simple Frame, we can assume plane geometry. */
- class = astGetClass( frm );
- if( class && !strcmp( class, "Frame" ) ) {
- for( i = 0; i < nb; i++ ) {
- lbnd[ i ] = ( this->centre )[ i ] - this->radius;
- ubnd[ i ] = ( this->centre )[ i ] + this->radius;
- }
-
-/* If the Frame is not a simple Frame we cannot assume plane geometry. */
- } else {
-
-/* The bounding box of the mesh returned by astRegBaseMesh is used as the
- bounding box of the Circle. These bounds are cached in the Circle
- structure by astRegBaseMesh. Ensure astRegBaseMesh has been invoked,
- so that it is safe to use the cached bounding box. */
- if( !this_region->basemesh ) (void) astAnnul( astRegBaseMesh( this ) );
-
-/* Store the bounding box. */
- for( i = 0; i < nb; i++ ) {
- lbnd[ i ] = this->lb[ i ];
- ubnd[ i ] = this->ub[ i ];
- }
- }
-
-/* Free resources. */
- frm = astAnnul( frm );
-}
-
-static AstPointSet *RegBaseMesh( AstRegion *this_region, int *status ){
-/*
-* Name:
-* RegBaseMesh
-
-* Purpose:
-* Return a PointSet containing a mesh of points on the boundary of a
-* Region in its base Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "circle.h"
-* AstPointSet *astRegBaseMesh( AstRegion *this, int *status )
-
-* Class Membership:
-* Circle member function (over-rides the astRegBaseMesh protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a PointSet containing a mesh of points on the
-* boundary of the Region. The points refer to the base Frame of
-* the encapsulated FrameSet.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the PointSet. The axis values in this PointSet will have
-* associated accuracies derived from the accuracies which were
-* supplied when the Region was created.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-
-*/
-
-/* Local Constants: */
-#define NP_EDGE 50 /* No. of points for determining geodesic */
-
-/* Local Variables: */
- AstBox *box; /* Bounding box for this Circle */
- AstCircle *this; /* The Circle structure */
- AstRegion *reg; /* Copy of supplied Circle */
- AstFrame *frm; /* Base Frame in encapsulated FrameSet */
- AstPointSet *result; /* Returned pointer */
- double **ptr; /* Pointers to data */
- double *p1; /* Pointer to array holding a single point */
- double *p2; /* Pointer to array holding a single point */
- double angle; /* Angular position of point */
- double delta; /* Angular separation of points */
- double dist; /* Offset along an axis */
- double lbx; /* Lower x bound of mesh bounding box */
- double lby; /* Lower y bound of mesh bounding box */
- double p[ 2 ]; /* Position in 2D Frame */
- double ubx; /* Upper x bound of mesh bounding box */
- double uby; /* Upper y bound of mesh bounding box */
- int i; /* Point index */
- int j; /* Axis index */
- int naxes; /* No. of axes in base Frame */
- int np; /* No. of points in returned PointSet */
-
-/* Initialise */
- result= NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If the Region structure contains a pointer to a PointSet holding
- a previously created mesh, return it. */
- if( this_region->basemesh ) {
- result = astClone( this_region->basemesh );
-
-/* Otherwise, create a new mesh. */
- } else {
-
-/* Get a pointer to the Circle structure. */
- this = (AstCircle *) this_region;
-
-/* Get a pointer to the base Frame in the encapsulated FrameSet. */
- frm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Get the number of axes in the base Frame */
- naxes = astGetNaxes( frm );
-
-/* Get the requested number of points to put on the mesh. */
- np = astGetMeshSize( this );
-
-/* Ensure cached information is available. */
- Cache( (AstCircle *) this, status );
-
-/* First deal with 1-D "circles" (where we ignore MeshSize). */
- if( naxes == 1 ) {
-
-/* The boundary of a 1-D circle consists of 2 points - the two extreme values.
- Create a PointSet to hold 2 1-D values, and store the extreme values. */
- result = astPointSet( 2, 1, "", status );
- ptr = astGetPoints( result );
- if( astOK ) {
- ptr[ 0 ][ 0 ] = ( this->centre )[ 0 ] - this->radius;
- ptr[ 0 ][ 1 ] = ( this->centre )[ 0 ] + this->radius;
- }
-
-/* Store the bounding box in the Circle structure. */
- this->lb[ 0 ] = ptr[ 0 ][ 0 ];
- this->ub[ 0 ] = ptr[ 0 ][ 1 ];
-
-/* Now deal with 2-D circles. */
- } else if( naxes == 2 ){
-
-/* Store the angular increment between points. */
- delta = 2*AST__DPI/np;
-
-/* Create a suitable PointSet to hold the returned positions. */
- result = astPointSet( np, 2, "", status );
- ptr = astGetPoints( result );
- if( astOK ) {
-
-/* Initialise the bounding box of the mesh points. */
- lbx = DBL_MAX;
- ubx = -DBL_MAX;
- lby = DBL_MAX;
- uby = -DBL_MAX;
-
-/* Loop round each point. */
- angle = 0.0;
- for( i = 0; i < np; i++ ) {
-
-/* Work out where the end of the radius vector at this angle is, and
- store in the returned PointSet. */
- astOffset2( frm, this->centre, angle, this->radius, p );
- ptr[ 0 ][ i ] = p[ 0 ];
- ptr[ 1 ][ i ] = p[ 1 ];
-
-/* Update the bounds of the mesh bounding box. The box is expressed in
- terms of axis offsets from the centre, in order to avoid problems with
- boxes that cross RA=0 or RA=12h */
- if( p[ 0 ] != AST__BAD && p[ 1 ] != AST__BAD ){
- dist = astAxDistance( frm, 1, this->centre[ 0 ], p[ 0 ] );
- if( dist < lbx ) {
- lbx = dist;
- } else if( dist > ubx ) {
- ubx = dist;
- }
- dist = astAxDistance( frm, 2, this->centre[ 1 ], p[ 1 ] );
- if( dist < lby ) {
- lby = dist;
- } else if( dist > uby ) {
- uby = dist;
- }
- }
-
-/* Increment the angular position of the next mesh point. */
- angle += delta;
- }
-
-/* Store the bounding box in the Circle structure. */
- this->lb[ 0 ] = this->centre[ 0 ] + lbx;
- this->lb[ 1 ] = this->centre[ 1 ] + lby;
- this->ub[ 0 ] = this->centre[ 0 ] + ubx;
- this->ub[ 1 ] = this->centre[ 1 ] + uby;
- }
-
-/* Now deal with circles with more than 2 dimensions. Producing an evenly
- spread mesh of points over a sphere is a complex task (see e.g.
- http://www.eso.org/science/healpix/ ). This implementation does not
- attempt to produce a genuinely even spread. Instead it simply uses the
- mesh for the bounding box of the sphere, and projects each point on to
- the surface of the sphere. */
- } else {
-
-/* Allocate memory to hold an approximation of the circle bounding box. */
- p1 = astMalloc( sizeof( double )*(size_t) naxes );
- p2 = astMalloc( sizeof( double )*(size_t) naxes );
-
-/* Get an approximation to the bounding box, and initialise the real
- bounding box of the mesh points. */
- if( astOK ) {
- memcpy( p1, this->centre, sizeof( double )*(size_t) naxes );
- for( j = 0; j < naxes; j++ ) {
- p1[ j ] += this->radius;
- astOffset( frm, this->centre, p1, this->radius, p2 );
- p1[ j ] = this->centre[ j ];
- this->ub[ j ] = p2[ j ];
- }
- }
-
-/* Create a Box region which just encompasses the circle. */
- box = astBox( frm, 0, this->centre, this->ub, NULL, "", status );
-
-/* Get a mesh covering this box. */
- astSetMeshSize( box, np );
- result = astRegBaseMesh( box );
- ptr = astGetPoints( result );
- np = astGetNpoint( result );
-
-/* Allocate memory for a single point */
- if( astOK ) {
-
-/* Initialise the real bounding box of the mesh points. */
- for( j = 0; j < naxes; j++ ) {
- this->lb[ j ] = DBL_MAX;
- this->ub[ j ] = -DBL_MAX;
- }
-
-/* Move each point in this mesh radially so that its distance from the centre
- equals the radius of this Circle. */
- for( i = 0; i < np; i++ ) {
- for( j = 0; j < naxes; j++ ) p1[ j ] = ptr[ j ][ i ];
- astOffset( frm, this->centre, p1, this->radius, p2 );
-
- for( j = 0; j < naxes; j++ ) {
- ptr[ j ][ i ] = p2[ j ];
-
-/* Update the bounds of the mesh bounding box. */
- if( p2[ j ] != AST__BAD ){
- if( p2[ j ] < this->lb[ j ] ) {
- this->lb[ j ] = p2[ j ];
- } else if( p2[ j ] > this->ub[ j ] ) {
- this->ub[ j ] = p2[ j ];
- }
- }
- }
- }
- }
-
-/* Same the returned pointer in the Region structure so that it does not
- need to be created again next time this function is called. */
- if( astOK && result ) this_region->basemesh = astClone( result );
-
-/* Free resources. */
- p1 = astFree( p1 );
- p2 = astFree( p2 );
- box = astAnnul( box );
- }
-
-/* Extend the bounding box if it contains any singularies. The astNormBox
- requires a Mapping which can be used to test points in the base Frame.
- Create a copy of the Circle and then set its FrameSet so that the current
- Frame in the copy is the same as the base Frame in the original. */
- reg = astCopy( this );
- astSetRegFS( reg, frm );
- astSetNegated( reg, 0 );
-
-/* Normalise this box. */
- astNormBox( frm, this->lb, this->ub, reg );
-
-/* Free resources. */
- reg = astAnnul( reg );
- frm = astAnnul( frm );
- }
-
-/* Annul the result if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-static double *RegCentre( AstRegion *this_region, double *cen, double **ptr,
- int index, int ifrm, int *status ){
-/*
-* Name:
-* RegCentre
-
-* Purpose:
-* Re-centre a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "circle.h"
-* double *RegCentre( AstRegion *this, double *cen, double **ptr,
-* int index, int ifrm, int *status )
-
-* Class Membership:
-* Circle member function (over-rides the astRegCentre protected
-* method inherited from the Region class).
-
-* Description:
-* This function shifts the centre of the supplied Region to a
-* specified position, or returns the current centre of the Region.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* cen
-* Pointer to an array of axis values, giving the new centre.
-* Supply a NULL value for this in order to use "ptr" and "index" to
-* specify the new centre.
-* ptr
-* Pointer to an array of pointers, one for each axis in the Region.
-* Each pointer locates an array of axis values. This is the format
-* returned by the PointSet method astGetPoints. Only used if "cen"
-* is NULL.
-* index
-* The index of the point within the arrays identified by "ptr" at
-* which is stored the coords for the new centre position. Only used
-* if "cen" is NULL.
-* ifrm
-* Should be AST__BASE or AST__CURRENT. Indicates whether the centre
-* position is supplied and returned in the base or current Frame of
-* the FrameSet encapsulated within "this".
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If both "cen" and "ptr" are NULL then a pointer to a newly
-* allocated dynamic array is returned which contains the centre
-* coords of the Region. This array should be freed using astFree when
-* no longer needed. If either of "ptr" or "cen" is not NULL, then a
-* NULL pointer is returned.
-
-* Notes:
-* - Some Region sub-classes do not have a centre. Such classes will report
-* an AST__INTER error code if this method is called.
-*/
-
-/* Local Variables: */
- AstFrame *frm; /* Pointer to base Frame */
- AstCircle *this; /* Pointer to Circle structure */
- double **rptr; /* Data pointers for Region PointSet */
- double *bc; /* Base Frame centre position */
- double *circum; /* Base frame circumference position */
- double *result; /* Returned pointer */
- double *tmp; /* Temporary array pointer */
- double axval; /* Axis value */
- int ic; /* Coordinate index */
- int ncb; /* Number of base frame coordinate values per point */
- int ncc; /* Number of current frame coordinate values per point */
-
-/* Initialise */
- result = NULL;
-
-/* Check the local error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the Circle structure. */
- this = (AstCircle *) this_region;
-
-/* Get the number of axis values per point in the base and current Frames. */
- ncb = astGetNin( this_region->frameset );
- ncc = astGetNout( this_region->frameset );
-
-/* Ensure cached information is available. */
- Cache( this, status );
-
-/* If the centre coords are to be returned, return either a copy of the
- base Frame centre coords, or transform the base Frame centre coords
- into the current Frame. */
- if( !ptr && !cen ) {
- if( ifrm == AST__CURRENT ) {
- result = astRegTranPoint( this_region, this->centre, 1, 1 );
- } else {
- result = astStore( NULL, this->centre, sizeof( double )*ncb );
- }
-
-/* Otherwise, we store the supplied new centre coords and return a NULL
- pointer. */
- } else {
-
-/* Get a pointer to the base Frame in the Region's FrameSet. */
- frm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Get a pointer to the axis values stored in the Region structure. */
- rptr = astGetPoints( this_region->points );
-
-/* Check pointers can be used safely */
- if( astOK ) {
-
-/* If the centre position was supplied in the current Frame, find the
- corresponding base Frame position... */
- if( ifrm == AST__CURRENT ) {
- if( cen ) {
- bc = astRegTranPoint( this_region, cen, 1, 0 );
- } else {
- tmp = astMalloc( sizeof( double)*(size_t)ncc );
- if( astOK ) {
- for( ic = 0; ic < ncc; ic++ ) tmp[ ic ] = ptr[ ic ][ index ];
- }
- bc = astRegTranPoint( this_region, tmp, 1, 0 );
- tmp = astFree( tmp );
- }
-
-/* Replace any bad centre values with their current values. */
- for( ic = 0; ic < ncb; ic++ ) {
- if( bc[ ic ] == AST__BAD ) bc[ ic ] = this->centre[ ic ];
- }
-
-/* ... and change the coords in the parent Region structure and the cached
- coords in the Circle structure. */
- circum = CircumPoint( frm, ncb, bc, this->radius, status );
- if( circum ) {
- for( ic = 0; ic < ncb; ic++ ) {
- rptr[ ic ][ 0 ] = bc[ ic ];
- rptr[ ic ][ 1 ] = circum[ ic ];
- this->centre[ ic ] = bc[ ic ];
- }
- }
-
-/* Free resources */
- circum = astFree( circum );
- bc = astFree( bc );
-
-/* If the centre position was supplied in the base Frame, use the
- supplied "cen" or "ptr" pointer directly to change the coords in the
- parent Region structure and the cached coords in the Circle structure. */
- } else {
- for( ic = 0; ic < ncb; ic++ ) {
- axval = cen ? cen[ ic ] : ptr[ ic ][ index ];
- if( axval != AST__BAD ) this->centre[ ic ] = axval;
- }
-
- circum = CircumPoint( frm, ncb, this->centre, this->radius,
- status );
- if( circum ) {
- for( ic = 0; ic < ncb; ic++ ) {
- rptr[ ic ][ 0 ] = this->centre[ ic ];
- rptr[ ic ][ 1 ] = circum[ ic ];
- }
- circum = astFree( circum );
- }
- }
- }
-
-/* Free resources */
- frm = astAnnul( frm );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int RegPins( AstRegion *this_region, AstPointSet *pset, AstRegion *unc,
- int **mask, int *status ){
-/*
-* Name:
-* RegPins
-
-* Purpose:
-* Check if a set of points fall on the boundary of a given Circle.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "circle.h"
-* int RegPins( AstRegion *this, AstPointSet *pset, AstRegion *unc,
-* int **mask, int *status ){
-
-* Class Membership:
-* Circle member function (over-rides the astRegPins protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a flag indicating if the supplied set of
-* points all fall on the boundary of the given Circle.
-*
-* Some tolerance is allowed, as specified by the uncertainty Region
-* stored in the supplied Circle "this", and the supplied uncertainty
-* Region "unc" which describes the uncertainty of the supplied points.
-
-* Parameters:
-* this
-* Pointer to the Circle.
-* pset
-* Pointer to the PointSet. The points are assumed to refer to the
-* base Frame of the FrameSet encapsulated by "this".
-* unc
-* Pointer to a Region representing the uncertainties in the points
-* given by "pset". The Region is assumed to represent the base Frame
-* of the FrameSet encapsulated by "this". Zero uncertainity is assumed
-* if NULL is supplied.
-* mask
-* Pointer to location at which to return a pointer to a newly
-* allocated dynamic array of ints. The number of elements in this
-* array is equal to the value of the Npoint attribute of "pset".
-* Each element in the returned array is set to 1 if the
-* corresponding position in "pset" is on the boundary of the Region
-* and is set to zero otherwise. A NULL value may be supplied
-* in which case no array is created. If created, the array should
-* be freed using astFree when no longer needed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the points all fall on the boundary of the given
-* Region, to within the tolerance specified. Zero otherwise.
-
-*/
-
-/* Local variables: */
- AstCircle *large_circle; /* Circle slightly larger than "this" */
- AstCircle *small_circle; /* Circle slightly smaller than "this" */
- AstCircle *this; /* Pointer to the Circle structure. */
- AstFrame *frm; /* Base Frame in supplied Circle */
- AstPointSet *ps1; /* Points masked by larger Circle */
- AstPointSet *ps2; /* Points masked by larger and smaller Circlees */
- AstRegion *tunc; /* Uncertainity Region from "this" */
- double **ptr; /* Pointer to axis values in "ps2" */
- double *lbnd_tunc; /* Lower bounds of "this" uncertainty Region */
- double *lbnd_unc; /* Lower bounds of supplied uncertainty Region */
- double *p; /* Pointer to next axis value */
- double *ubnd_tunc; /* Upper bounds of "this" uncertainty Region */
- double *ubnd_unc; /* Upper bounds of supplied uncertainty Region */
- double drad; /* Radius increment corresponding to border width */
- double l1; /* Length of bounding box diagonal */
- double l2; /* Length of bounding box diagonal */
- double rad; /* Radius of Circle */
- int i; /* Axis index */
- int j; /* Point index */
- int nc; /* No. of axes in Circle base frame */
- int np; /* No. of supplied points */
- int result; /* Returned flag */
-
-/* Initialise */
- result = 0;
- if( mask ) *mask = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return result;
-
-/* Get a pointer to the Circle structure. */
- this = (AstCircle *) this_region;
-
-/* Get the number of base Frame axes in the Circle, and check the supplied
- PointSet has the same number of axis values per point. */
- frm = astGetFrame( this_region->frameset, AST__BASE );
- nc = astGetNaxes( frm );
- if( astGetNcoord( pset ) != nc && astOK ) {
- astError( AST__INTER, "astRegPins(%s): Illegal number of axis "
- "values per point (%d) in the supplied PointSet - should be "
- "%d (internal AST programming error).", status, astGetClass( this ),
- astGetNcoord( pset ), nc );
- }
-
-/* Get the number of axes in the uncertainty Region and check it is the
- same as above. */
- if( unc && astGetNaxes( unc ) != nc && astOK ) {
- astError( AST__INTER, "astRegPins(%s): Illegal number of axes (%d) "
- "in the supplied uncertainty Region - should be "
- "%d (internal AST programming error).", status, astGetClass( this ),
- astGetNaxes( unc ), nc );
- }
-
-/* We now find the maximum distance on each axis that a point can be from the
- boundary of the Circle for it still to be considered to be on the boundary.
- First get the Region which defines the uncertainty within the Circle being
- checked (in its base Frame), and get its bounding box. */
- tunc = astGetUncFrm( this, AST__BASE );
-
- lbnd_tunc = astMalloc( sizeof( double )*(size_t) nc );
- ubnd_tunc = astMalloc( sizeof( double )*(size_t) nc );
- astGetRegionBounds( tunc, lbnd_tunc, ubnd_tunc );
-
-/* Find the geodesic length withi the base Frame of "this" of the diagonal of
- the bounding box. */
- l1 = astDistance( frm, lbnd_tunc, ubnd_tunc );
-
-/* Also get the Region which defines the uncertainty of the supplied points
- and get its bounding box. */
- if( unc ) {
- lbnd_unc = astMalloc( sizeof( double )*(size_t) nc );
- ubnd_unc = astMalloc( sizeof( double )*(size_t) nc );
- astGetRegionBounds( unc, lbnd_unc, ubnd_unc );
-
-/* Find the geodesic length of the diagonal of this bounding box. */
- l2 = astDistance( frm, lbnd_unc, ubnd_unc );
-
-/* Use a zero sized box "unc" if no box was supplied. */
- } else {
- lbnd_unc = NULL;
- ubnd_unc = NULL;
- l2 = 0.0;
- }
-
-/* Ensure cached information is available. */
- Cache( this, status );
-
-/* The required border width is half of the total diagonal of the two bounding
- boxes. */
- if( astOK ) {
- drad = 0.5*( l1 + l2 );
-
-/* Create two new Circle, one of which is larger than "this" by the amount
- found above, and the other of which is smaller than "this" by the amount
- found above. */
- rad = this->radius + 0.5*drad;
- large_circle = astCircle( frm, 1, this->centre, &rad, NULL, "", status );
- rad = this->radius - 0.5*drad;
- small_circle = astCircle( frm, 1, this->centre, &rad, NULL, "", status );
-
-/* Negate the smaller region.*/
- astNegate( small_circle );
-
-/* Points are on the boundary of "this" if they are inside both the large
- Circle and the negated small Circle. First transform the supplied PointSet
- using the large Circle, then transform them using the negated smaller
- Circle. */
- ps1 = astTransform( large_circle, pset, 1, NULL );
- ps2 = astTransform( small_circle, ps1, 1, NULL );
-
-/* Get a point to the resulting axis values, and the number of axis
- values per axis. */
- ptr = astGetPoints( ps2 );
- np = astGetNpoint( ps2 );
-
-/* If a mask array is to be returned, create one. */
- if( mask ) {
- *mask = astMalloc( sizeof(int)*(size_t) np );
-
-/* Check all the resulting points, setting mask values for all of them. */
- if( astOK ) {
-
-/* Initialise the mask elements on the basis of the first axis values */
- result = 1;
- p = ptr[ 0 ];
- for( j = 0; j < np; j++ ) {
- if( *(p++) == AST__BAD ) {
- result = 0;
- (*mask)[ j ] = 0;
- } else {
- (*mask)[ j ] = 1;
- }
- }
-
-/* Now check for bad values on other axes. */
- for( i = 1; i < nc; i++ ) {
- p = ptr[ i ];
- for( j = 0; j < np; j++ ) {
- if( *(p++) == AST__BAD ) {
- result = 0;
- (*mask)[ j ] = 0;
- }
- }
- }
- }
-
-/* If no output mask is to be made, we can break out of the check as soon
- as the first bad value is found. */
- } else if( astOK ) {
- result = 1;
- for( i = 0; i < nc && result; i++ ) {
- p = ptr[ i ];
- for( j = 0; j < np; j++ ) {
- if( *(p++) == AST__BAD ) {
- result = 0;
- break;
- }
- }
- }
- }
-
-/* Free resources. */
- large_circle = astAnnul( large_circle );
- small_circle = astAnnul( small_circle );
- ps1 = astAnnul( ps1 );
- ps2 = astAnnul( ps2 );
- }
-
- tunc = astAnnul( tunc );
- frm = astAnnul( frm );
- lbnd_tunc = astFree( lbnd_tunc );
- ubnd_tunc = astFree( ubnd_tunc );
- if( unc ) lbnd_unc = astFree( lbnd_unc );
- if( unc ) ubnd_unc = astFree( ubnd_unc );
-
-/* If an error has occurred, return zero. */
- if( !astOK ) {
- result = 0;
- if( mask ) *mask = astAnnul( *mask );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int RegTrace( AstRegion *this_region, int n, double *dist, double **ptr,
- int *status ){
-/*
-*+
-* Name:
-* RegTrace
-
-* Purpose:
-* Return requested positions on the boundary of a 2D Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "circle.h"
-* int astTraceRegion( AstRegion *this, int n, double *dist, double **ptr );
-
-* Class Membership:
-* Circle member function (overrides the astTraceRegion method
-* inherited from the parent Region class).
-
-* Description:
-* This function returns positions on the boundary of the supplied
-* Region, if possible. The required positions are indicated by a
-* supplied list of scalar parameter values in the range zero to one.
-* Zero corresponds to some arbitrary starting point on the boundary,
-* and one corresponds to the end (which for a closed region will be
-* the same place as the start).
-
-* Parameters:
-* this
-* Pointer to the Region.
-* n
-* The number of positions to return. If this is zero, the function
-* returns without action (but the returned function value still
-* indicates if the method is supported or not).
-* dist
-* Pointer to an array of "n" scalar parameter values in the range
-* 0 to 1.0.
-* ptr
-* A pointer to an array of pointers. The number of elements in
-* this array should equal tthe number of axes in the Frame spanned
-* by the Region. Each element of the array should be a pointer to
-* an array of "n" doubles, in which to return the "n" values for
-* the corresponding axis. The contents of the arrays are unchanged
-* if the supplied Region belongs to a class that does not
-* implement this method.
-
-* Returned Value:
-* Non-zero if the astTraceRegion method is implemented by the class
-* of Region supplied, and zero if not.
-
-*-
-*/
-
-/* Local Variables; */
- AstCircle *this;
- AstFrame *frm;
- AstMapping *map;
- AstPointSet *bpset;
- AstPointSet *cpset;
- double **bptr;
- double angle;
- double p[ 2 ];
- int i;
- int ncur;
- int result;
-
-/* Initialise */
- result = 0;
-
-/* Check inherited status. */
- if( ! astOK ) return result;
-
-/* Get a pointer to the base Frame in the encapsulated FrameSet. */
- frm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Check it is 2-dimensional. */
- if( astGetNaxes( frm ) == 2 ) result = 1;
-
-/* Check we have some points to find. */
- if( result && n > 0 ) {
-
-/* Get a pointer to the Circle structure. */
- this = (AstCircle *) this_region;
-
-/* Ensure cached information is available. */
- Cache( this, status );
-
-/* We first determine the required positions in the base Frame of the
- Region, and then transform them into the current Frame. Get the
- base->current Mapping, and the number of current Frame axes. */
- map = astGetMapping( this_region->frameset, AST__BASE, AST__CURRENT );
-
-/* If it's a UnitMap we do not need to do the transformation, so put the
- base Frame positions directly into the supplied arrays. */
- if( astIsAUnitMap( map ) ) {
- bpset = NULL;
- bptr = ptr;
- ncur = 2;
-
-/* Otherwise, create a PointSet to hold the base Frame positions. */
- } else {
- bpset = astPointSet( n, 2, " ", status );
- bptr = astGetPoints( bpset );
- ncur = astGetNout( map );
- }
-
-/* Check the pointers can be used safely. */
- if( astOK ) {
-
-/* Loop round each point. Get the angle around the circle, and offset
- along that angle to find the point that is one radius away from the
- centre. Copy the results into the required arrays. */
- for( i = 0; i < n; i++ ) {
- angle = dist[ i ]*2*AST__DPI;
- astOffset2( frm, this->centre, angle, this->radius, p );
- bptr[ 0 ][ i ] = p[ 0 ];
- bptr[ 1 ][ i ] = p[ 1 ];
- }
-
- }
-
-/* If required, transform the base frame positions into the current
- Frame, storing them in the supplied array. Then free resources. */
- if( bpset ) {
- cpset = astPointSet( n, ncur, " ", status );
- astSetPoints( cpset, ptr );
-
- (void) astTransform( map, bpset, 1, cpset );
-
- cpset = astAnnul( cpset );
- bpset = astAnnul( bpset );
- }
-
-/* Free remaining resources. */
- map = astAnnul( map );
- }
- frm = astAnnul( frm );
-
-/* Return the result. */
- return result;
-}
-
-static void ResetCache( AstRegion *this, int *status ){
-/*
-* Name:
-* ResetCache
-
-* Purpose:
-* Clear cached information within the supplied Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "circle.h"
-* void ResetCache( AstRegion *this, int *status )
-
-* Class Membership:
-* Region member function (overrides the astResetCache method
-* inherited from the parent Region class).
-
-* Description:
-* This function clears cached information from the supplied Region
-* structure.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-*/
- if( this ) {
- ( (AstCircle *) this )->stale = 1;
- (*parent_resetcache)( this, status );
- }
-}
-
-static void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status ) {
-/*
-* Name:
-* SetRegFS
-
-* Purpose:
-* Stores a new FrameSet in a Region
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "circle.h"
-* void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status )
-
-* Class Membership:
-* Circle method (over-rides the astSetRegFS method inherited from
-* the Region class).
-
-* Description:
-* This function creates a new FrameSet and stores it in the supplied
-* Region. The new FrameSet contains two copies of the supplied
-* Frame, connected by a UnitMap.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* frm
-* The Frame to use.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Invoke the parent method to store the FrameSet in the parent Region
- structure. */
- (* parent_setregfs)( this_region, frm, status );
-
-/* Re-calculate cached information. */
- astResetCache( this_region );
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* Simplify
-
-* Purpose:
-* Simplify the Mapping represented by a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "circle.h"
-* AstMapping *Simplify( AstMapping *this, int *status )
-
-* Class Membership:
-* Circle method (over-rides the astSimplify method inherited
-* from the Region class).
-
-* Description:
-* This function invokes the parent Region Simplify method, and then
-* performs any further region-specific simplification.
-*
-* If the Mapping from base to current Frame is not a UnitMap, this
-* will include attempting to fit a new Region to the boundary defined
-* in the current Frame.
-
-* Parameters:
-* this
-* Pointer to the original Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the simplified Region. A cloned pointer to the
-* supplied Region will be returned if no simplication could be
-* performed.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstMapping *map; /* Base -> current Mapping */
- AstMapping *result; /* Result pointer to return */
- AstPointSet *mesh; /* Mesh of current Frame positions */
- AstPointSet *ps2; /* Circle PointSet in current Frame */
- AstRegion *new; /* Pointer to simplified Region */
- AstRegion *newreg; /* Equivalent circle or ellipse */
- AstRegion *this; /* Pointer to supplied Region structure */
- AstRegion *unc; /* Pointer to uncertainty Region */
- double **ptr2; /* Pointer axis values in "ps2" */
- double *cen; /* Pointer to array holding new centre coords */
- int ic; /* Axis index */
- int nc; /* No. of axis values per point */
- int ok; /* Was the new centre found OK? */
- int simpler; /* Has some simplication taken place? */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the supplied Region structure. */
- this = (AstRegion *) this_mapping;
-
-/* Invoke the parent Simplify method inherited from the Region class. This
- will simplify the encapsulated FrameSet and uncertainty Region. */
- new = (AstRegion *) (*parent_simplify)( this_mapping, status );
-
-/* Note if any simplification took place. This is assumed to be the case
- if the pointer returned by the above call is different to the supplied
- pointer. */
- simpler = ( new != this );
-
-/* If the Mapping from base to current Frame is not a UnitMap, we attempt
- to simplify the Circle by re-defining it within its current Frame.
- Transforming the Circle from its base to its current Frame may result in
- the region no longer being a circle. We test this by transforming a set of
- bounds on the Circle boundary. */
- map = astGetMapping( new->frameset, AST__BASE, AST__CURRENT );
- if( !astIsAUnitMap( map ) ){
-
-/* Get a mesh of points covering the Circle in its current Frame. */
- mesh = astRegMesh( new );
-
-/* Get the Region describing the positional uncertainty within the Circle in
- its current Frame. */
- unc = astGetUncFrm( new, AST__CURRENT );
-
-/* Transform the PointSet holding the circle centre into the current
- Frame, and copy the axis values into a new array. */
- ps2 = astRegTransform( this, this->points, 1, NULL, NULL );
- nc = astGetNcoord( ps2 );
- cen = astMalloc( sizeof( double )*(size_t) nc );
- ptr2 = astGetPoints( ps2 );
- if( astOK ) {
-
- ok = 1;
- for( ic = 0; ic < nc; ic++ ) {
- cen[ ic ] = ptr2[ ic ][ 0 ];
- if( cen[ ic ] == AST__BAD ) ok = 0;
- }
-
-/* Find the best fitting Circle (defined in the current Frame) through these
- points */
- newreg = ok ? astBestCircle( mesh, cen, unc ) : NULL;
-
-/* See if all points within this mesh fall on the boundary of the best
- fitting Circle, to within the uncertainty of the Region. */
- if( newreg && astRegPins( newreg, mesh, NULL, NULL ) ) {
-
-/* If so, use the new Circle in place of the original. */
- (void) astAnnul( new );
- new = astClone( newreg );
-
-/* Otherwise, if the region is 2-d we see if an Ellipse can represent the
- mesh. */
- } else if( ok && nc == 2 ){
-
-/* Find the best fitting Ellipse (defined in the current Frame) through these
- points */
- if( newreg ) (void) astAnnul( newreg );
- newreg = astBestEllipse( mesh, cen, unc );
-
-/* See if all points within this mesh fall on the boundary of the best
- fitting Ellipse, to within the uncertainty of the Region. */
- if( newreg && astRegPins( newreg, mesh, NULL, NULL ) ) {
-
-/* If so, use the new Ellipse in place of the original. */
- (void) astAnnul( new );
- new = astClone( newreg );
- simpler = 1;
- }
- }
-
-/* Free resources. */
- if( newreg ) newreg = astAnnul( newreg );
- }
-
- ps2 = astAnnul( ps2 );
- cen = astFree( cen );
- mesh = astAnnul( mesh );
- unc = astAnnul( unc );
- }
- map = astAnnul( map );
-
-/* If any simplification could be performed, copy Region attributes from
- the supplied Region to the returned Region, and return a pointer to it.
- If the supplied Region had no uncertainty, ensure the returned Region
- has no uncertainty. Otherwise, return a clone of the supplied pointer. */
- if( simpler ){
- astRegOverlay( new, this, 1 );
- result = (AstMapping *) new;
-
- } else {
- new = astAnnul( new );
- result = astClone( this );
- }
-
-/* If an error occurred, annul the returned pointer. */
- if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a Circle to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "circle.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* Circle member function (over-rides the astTransform protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function takes a Circle and a set of points encapsulated in a
-* PointSet and transforms the points by setting axis values to
-* AST__BAD for all points which are outside the region. Points inside
-* the region are copied unchanged from input to output.
-
-* Parameters:
-* this
-* Pointer to the Circle.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - The forward and inverse transformations are identical for a
-* Region.
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of axes in the Frame represented by the Circle.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstCircle *this; /* Pointer to Circle */
- AstFrame *frm; /* Pointer to base Frame in FrameSet */
- AstPointSet *pset_tmp; /* Pointer to PointSet holding base Frame positions*/
- AstPointSet *result; /* Pointer to output PointSet */
- double **ptr_out; /* Pointer to output coordinate data */
- double **ptr_tmp; /* Pointer to base Frame coordinate data */
- double *work; /* Pointer to array holding single base point */
- double d; /* Base-Frame distance from centre to point */
- int closed; /* Is the boundary part of the Region? */
- int coord; /* Zero-based index for coordinates */
- int inside; /* Is the point inside the Region? */
- int ncoord_out; /* No. of coordinates per output point */
- int ncoord_tmp; /* No. of coordinates per base Frame point */
- int neg; /* Has the Region been negated? */
- int npoint; /* No. of points */
- int point; /* Loop counter for points */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the Circle structure. */
- this = (AstCircle *) this_mapping;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Region class. This function validates
- all arguments and generates an output PointSet if necessary,
- containing a copy of the input PointSet. */
- result = (*parent_transform)( this_mapping, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- calculations needed to generate the output coordinate values. */
-
-/* First use the encapsulated FrameSet to transform the supplied positions
- from the current Frame in the encapsulated FrameSet (the Frame
- represented by the Region), to the base Frame (the Frame in which the
- Region is defined). This call also returns a pointer to the base Frame
- of the encapsulated FrameSet. Note, the returned pointer may be a
- clone of the "in" pointer, and so we must be carefull not to modify the
- contents of the returned PointSet. */
- pset_tmp = astRegTransform( this, in, 0, NULL, &frm );
-
-/* Determine the numbers of points and coordinates per point from the base
- Frame PointSet and obtain pointers for accessing the base Frame and output
- coordinate values. */
- npoint = astGetNpoint( pset_tmp );
- ncoord_tmp = astGetNcoord( pset_tmp );
- ptr_tmp = astGetPoints( pset_tmp );
- ncoord_out = astGetNcoord( result );
- ptr_out = astGetPoints( result );
-
-/* Get work space for one base Frame position */
- work = astMalloc( sizeof( double )*(size_t) ncoord_tmp );
-
-/* See if the boundary is part of the Region. */
- closed = astGetClosed( this );
-
-/* See if the Region has been negated. */
- neg = astGetNegated( this );
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
- if ( astOK ) {
-
-/* Ensure cached information is available. */
- Cache( this, status );
-
-/* Loop round each point */
- for ( point = 0; point < npoint; point++ ) {
-
-/* Copy the base Frame position into a work array. */
- for ( coord = 0; coord < ncoord_tmp; coord++ ) {
- work[ coord ] = ptr_tmp[ coord ][ point ];
- }
-
-/* Find the geodesic distance from the centre of the Circle in the base
- Frame. */
- d = astDistance( frm, this->centre, work );
-
-/* Now consider whether this radius value puts the point in or out of the
- Circle. */
- if( d != AST__BAD ){
- if( neg ) {
- if( closed ) {
- inside = ( d >= this->radius );
- } else {
- inside = ( d > this->radius );
- }
- } else {
- if( closed ) {
- inside = ( d <= this->radius );
- } else {
- inside = ( d < this->radius );
- }
- }
- } else {
- inside = 0;
- }
-
-/* If the point is outside, store bad output values. */
- if( !inside ) {
- for ( coord = 0; coord < ncoord_out; coord++ ) {
- ptr_out[ coord ][ point ] = AST__BAD;
- }
- }
- }
- }
-
-/* Free resources */
- work = astFree( work );
- pset_tmp = astAnnul( pset_tmp );
- frm = astAnnul( frm );
-
-/* Annul the result if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for Region objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for Region objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstCircle *in; /* Pointer to input Circle */
- AstCircle *out; /* Pointer to output Circle */
- int nax; /* Number of base Frame axes */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Circles. */
- in = (AstCircle *) objin;
- out = (AstCircle *) objout;
-
-/* For safety, first clear any references to the input memory from
- the output Circle. */
- out->centre = NULL;
- out->lb = NULL;
- out->ub = NULL;
-
-/* Copy dynamic memory contents */
- nax = astGetNin( ((AstRegion *) in)->frameset );
- out->centre = astStore( NULL, in->centre,
- sizeof( double )*(size_t)nax );
- out->lb = astStore( NULL, in->lb, sizeof( double )*(size_t)nax );
- out->ub = astStore( NULL, in->ub, sizeof( double )*(size_t)nax );
-}
-
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for Circle objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for Circle objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstCircle *this; /* Pointer to Circle */
-
-/* Obtain a pointer to the Circle structure. */
- this = (AstCircle *) obj;
-
-/* Annul all resources. */
- this->centre = astFree( this->centre );
- this->lb = astFree( this->lb );
- this->ub = astFree( this->ub );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for Circle objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the Circle class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the Circle whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstCircle *this; /* Pointer to the Circle structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Circle structure. */
- this = (AstCircle *) this_object;
-
-/* Write out values representing the instance variables for the
- Circle class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* There are no values to write, so return without further action. */
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsACircle and astCheckCircle functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(Circle,Region)
-astMAKE_CHECK(Circle)
-
-AstCircle *astCircle_( void *frame_void, int form, const double centre[],
- const double point[], AstRegion *unc,
- const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astCircle
-f AST_CIRCLE
-
-* Purpose:
-* Create a Circle.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "circle.h"
-c AstCircle *astCircle( AstFrame *frame, int form, const double centre[],
-c const double point[], AstRegion *unc,
-c const char *options, ... )
-f RESULT = AST_CIRCLE( FRAME, FORM, CENTRE, POINT, UNC, OPTIONS, STATUS )
-
-* Class Membership:
-* Circle constructor.
-
-* Description:
-* This function creates a new Circle and optionally initialises its
-* attributes.
-*
-* A Circle is a Region which represents a circle or sphere within the
-* supplied Frame.
-
-* Parameters:
-c frame
-f FRAME = INTEGER (Given)
-* A pointer to the Frame in which the region is defined. A deep
-* copy is taken of the supplied Frame. This means that any
-* subsequent changes made to the Frame using the supplied pointer
-* will have no effect the Region.
-c form
-f FORM = INTEGER (Given)
-* Indicates how the circle is described by the remaining parameters.
-* A value of zero indicates that the circle is specified by a
-* centre position and a position on the circumference. A value of one
-* indicates that the circle is specified by a centre position and a
-* scalar radius.
-c centre
-f CENTRE( * ) = DOUBLE PRECISION (Given)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* (Naxes attribute) containing the coordinates at the centre of
-* the circle or sphere.
-c point
-f POINT( * ) = DOUBLE PRECISION (Given)
-c If "form"
-f If FORM
-* is zero, then this array should have one element for each Frame
-* axis (Naxes attribute), and should be supplied holding the
-* coordinates at a point on the circumference of the circle or sphere.
-c If "form"
-f If FORM
-* is one, then this array should have one element only which should
-* be supplied holding the scalar radius of the circle or sphere,
-* as a geodesic distance within the Frame.
-c unc
-f UNC = INTEGER (Given)
-* An optional pointer to an existing Region which specifies the
-* uncertainties associated with the boundary of the Circle being created.
-* The uncertainty in any point on the boundary of the Circle is found by
-* shifting the supplied "uncertainty" Region so that it is centred at
-* the boundary point being considered. The area covered by the
-* shifted uncertainty Region then represents the uncertainty in the
-* boundary position. The uncertainty is assumed to be the same for
-* all points.
-*
-* If supplied, the uncertainty Region must be of a class for which
-* all instances are centro-symetric (e.g. Box, Circle, Ellipse, etc.)
-* or be a Prism containing centro-symetric component Regions. A deep
-* copy of the supplied Region will be taken, so subsequent changes to
-* the uncertainty Region using the supplied pointer will have no
-* effect on the created Circle. Alternatively,
-f a null Object pointer (AST__NULL)
-c a NULL Object pointer
-* may be supplied, in which case a default uncertainty is used
-* equivalent to a box 1.0E-6 of the size of the Circle being created.
-*
-* The uncertainty Region has two uses: 1) when the
-c astOverlap
-f AST_OVERLAP
-* function compares two Regions for equality the uncertainty
-* Region is used to determine the tolerance on the comparison, and 2)
-* when a Region is mapped into a different coordinate system and
-* subsequently simplified (using
-c astSimplify),
-f AST_SIMPLIFY),
-* the uncertainties are used to determine if the transformed boundary
-* can be accurately represented by a specific shape of Region.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new Circle. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new Circle. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astCircle()
-f AST_CIRCLE = INTEGER
-* A pointer to the new Circle.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *frame; /* Pointer to Frame structure */
- AstCircle *new; /* Pointer to new Circle */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the supplied Frame structure. */
- frame = astCheckFrame( frame_void );
-
-/* Initialise the Circle, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitCircle( NULL, sizeof( AstCircle ), !class_init, &class_vtab,
- "Circle", frame, form, centre, point, unc );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new Circle's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new Circle. */
- return new;
-}
-
-AstCircle *astCircleId_( void *frame_void, int form, const double centre[],
- const double point[], void *unc_void,
- const char *options, ... ) {
-/*
-* Name:
-* astCircleId_
-
-* Purpose:
-* Create a Circle.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "circle.h"
-* AstCircle *astCircleId_( AstFrame *frame, int form, const double centre[],
-* const double point[], AstRegion *unc,
-* const char *options, ... )
-
-* Class Membership:
-* Circle constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astCircle constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astCircle_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astCircle_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astCircle_.
-
-* Returned Value:
-* The ID value associated with the new Circle.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *frame; /* Pointer to Frame structure */
- AstCircle *new; /* Pointer to new Circle */
- AstRegion *unc; /* Pointer to Region structure */
- va_list args; /* Variable argument list */
-
- int *status; /* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a Frame pointer from the supplied ID and validate the
- pointer to ensure it identifies a valid Frame. */
- frame = astVerifyFrame( astMakePointer( frame_void ) );
-
-/* Obtain a Region pointer from the supplied "unc" ID and validate the
- pointer to ensure it identifies a valid Region . */
- unc = unc_void ? astCheckRegion( astMakePointer( unc_void ) ) : NULL;
-
-/* Initialise the Circle, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitCircle( NULL, sizeof( AstCircle ), !class_init, &class_vtab,
- "Circle", frame, form, centre, point, unc );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new Circle's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new Circle. */
- return astMakeId( new );
-}
-
-AstCircle *astInitCircle_( void *mem, size_t size, int init, AstCircleVtab *vtab,
- const char *name, AstFrame *frame, int form,
- const double centre[], const double point[],
- AstRegion *unc, int *status ) {
-/*
-*+
-* Name:
-* astInitCircle
-
-* Purpose:
-* Initialise a Circle.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "circle.h"
-* AstCircle *astInitCircle_( void *mem, size_t size, int init, AstCircleVtab *vtab,
-* const char *name, AstFrame *frame, int form,
-* const double centre[], const double point[],
-* AstRegion *unc )
-
-* Class Membership:
-* Circle initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new Circle object. It allocates memory (if necessary) to accommodate
-* the Circle plus any additional data associated with the derived class.
-* It then initialises a Circle structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a Circle at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the Circle is to be initialised.
-* This must be of sufficient size to accommodate the Circle data
-* (sizeof(Circle)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the Circle (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the Circle
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the Circle's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new Circle.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-* frame
-* A pointer to the Frame in which the region is defined.
-* form
-* Indicates how the "point" parameter should be interpreted.
-* Should be either 0 or 1.
-* centre
-* An array of double, with one element for each Frame axis (Naxes
-* attribute) containing the coordinates of the circle centre.
-* point
-* If "form" is zero, this should be an array of double, with one
-* element for each Frame axis (Naxes attribute) containing the
-* coordinates at any point on the circumference. If "form" is one,
-* this should be the address of a double containing the scalar
-* radius of the circle or sphere.
-* unc
-* A pointer to a Region which specifies the uncertainty in the
-* supplied positions (all points on the boundary of the new Circle
-* being initialised are assumed to have the same uncertainty). A NULL
-* pointer can be supplied, in which case default uncertainties equal to
-* 1.0E-6 of the dimensions of the new Circle's bounding box are used.
-* If an uncertainty Region is supplied, it must be either a Box, a
-* Circle or an Ellipse, and its encapsulated Frame must be related
-* to the Frame supplied for parameter "frame" (i.e. astConvert
-* should be able to find a Mapping between them). Two positions
-* the "frame" Frame are considered to be co-incident if their
-* uncertainty Regions overlap. The centre of the supplied
-* uncertainty Region is immaterial since it will be re-centred on the
-* point being tested before use. A deep copy is taken of the supplied
-* Region.
-
-* Returned Value:
-* A pointer to the new Circle.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstCircle *new; /* Pointer to new Circle */
- AstPointSet *pset; /* PointSet to pass to Region initialiser */
- const double *circum; /* Pointer to circumference position */
- double **ptr; /* Pointer to coords data in pset */
- int i; /* Axis index */
- int nc; /* No. of axes */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitCircleVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Check the supplied value for "form" is legal. */
- if( form != 0 && form != 1 && astOK ) {
- astError( AST__BADIN, "astInitCircle(%s): The value supplied for "
- "parameter \"form\" (%d) is illegal - it should be 0 or 1 "
- "(programming error).", status, name, form );
- }
-
-/* Get the number of axis values required for each position. */
- nc = astGetNaxes( frame );
-
-/* If the circle radius has been supplied, find a point on the circle
- circumference. */
- if( form == 1 ) {
- circum = CircumPoint( frame, nc, centre, *point, status );
-
-/* Otherwise, use the supplied circumference point. */
- } else {
- circum = point;
- }
-
-/* Create a PointSet to hold the centre position, and a point on the
- circumference, and get points to the data arrays. */
- pset = astPointSet( 2, nc, "", status );
- ptr = astGetPoints( pset );
-
-/* Copy the centre and circumference coordinates into the PointSet, checking
- that no bad values have been supplied. */
- for( i = 0; astOK && i < nc; i++ ) {
- if( centre[ i ] == AST__BAD ) {
- astError( AST__BADIN, "astInitCircle(%s): The value of axis %d is "
- "undefined at the circle centre.", status, name, i + 1 );
- }
- if( astOK && circum[ i ] == AST__BAD ) {
- astError( AST__BADIN, "astInitCircle(%s): The value of axis %d is "
- "undefined on the circumference of the circle.", status, name, i + 1 );
- }
- ptr[ i ][ 0 ] = centre[ i ];
- ptr[ i ][ 1 ] = circum[ i ];
- }
-
-/* Check pointers can be used safely. */
- if( astOK ) {
-
-/* Initialise a Region structure (the parent class) as the first component
- within the Circle structure, allocating memory if necessary. */
- new = (AstCircle *) astInitRegion( mem, size, 0, (AstRegionVtab *) vtab,
- name, frame, pset, unc );
-
- if ( astOK ) {
-
-/* Initialise the Circle data. */
-/* ------------------------ */
- new->stale = 1;
- new->centre = NULL;
- new->lb = NULL;
- new->ub = NULL;
- Cache( new, status );
-
-/* If an error occurred, clean up by deleting the new Circle. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Free resources. */
- pset = astAnnul( pset );
- if( form == 1 ) circum = astFree( (void *) circum );
-
-/* Return a pointer to the new Circle. */
- return new;
-}
-
-AstCircle *astLoadCircle_( void *mem, size_t size, AstCircleVtab *vtab,
- const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadCircle
-
-* Purpose:
-* Load a Circle.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "circle.h"
-* AstCircle *astLoadCircle( void *mem, size_t size, AstCircleVtab *vtab,
-* const char *name, AstChannel *channel )
-
-* Class Membership:
-* Circle loader.
-
-* Description:
-* This function is provided to load a new Circle using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* Circle structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a Circle at the start of the memory
-* passed via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory into which the Circle is to be
-* loaded. This must be of sufficient size to accommodate the
-* Circle data (sizeof(Circle)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the Circle (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the Circle structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstCircle) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new Circle. If this is NULL, a pointer
-* to the (static) virtual function table for the Circle class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "Circle" is used instead.
-
-* Returned Value:
-* A pointer to the new Circle.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstCircle *new; /* Pointer to the new Circle */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this Circle. In this case the
- Circle belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstCircle );
- vtab = &class_vtab;
- name = "Circle";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitCircleVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built Circle. */
- new = astLoadRegion( mem, size, (AstRegionVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "Circle" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* There are no values to read. */
-/* ---------------------------- */
-
-/* Cache intermediate results in the Circle structure */
- new->centre = NULL;
- new->lb = NULL;
- new->ub = NULL;
- new->stale = 1;
- Cache( new, status );
-
-/* If an error occurred, clean up by deleting the new Circle. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new Circle pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-
-void astCirclePars_( AstCircle *this, double *centre, double *radius,
- double *p1, int *status ){
- if ( !astOK ) return;
- (**astMEMBER(this,Circle,CirclePars))( this, centre, radius,
- p1, status );
-}
-
-
-
-
-
-
diff --git a/ast-5.3-1/circle.h b/ast-5.3-1/circle.h
deleted file mode 100644
index badc8a5..0000000
--- a/ast-5.3-1/circle.h
+++ /dev/null
@@ -1,241 +0,0 @@
-#if !defined( CIRCLE_INCLUDED ) /* Include this file only once */
-#define CIRCLE_INCLUDED
-/*
-*+
-* Name:
-* circle.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the Circle class.
-
-* Invocation:
-* #include "circle.h"
-
-* Description:
-* This include file defines the interface to the Circle class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The Circle class implement a Region which represents a simple interval
-* on each axis of the encapsulated Frame
-
-* Inheritance:
-* The Circle class inherits from the Region class.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 31-AUG-2004 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "region.h" /* Coordinate regions (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* Circle structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstCircle {
-
-/* Attributes inherited from the parent class. */
- AstRegion region; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- double *centre; /* Circle centre coords */
- double radius; /* Circle radius */
- double *lb; /* Lower limits of mesh bounding box */
- double *ub; /* Upper limit of mesh bounding box */
- int stale; /* Is Cached information stale? */
-
-} AstCircle;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstCircleVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstRegionVtab region_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- void (* CirclePars)( AstCircle *, double *, double *, double *, int * );
-} AstCircleVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstCircleGlobals {
- AstCircleVtab Class_Vtab;
- int Class_Init;
-} AstCircleGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitCircleGlobals_( AstCircleGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Circle) /* Check class membership */
-astPROTO_ISA(Circle) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstCircle *astCircle_( void *, int, const double[], const double[], AstRegion *, const char *, int *, ...);
-#else
-AstCircle *astCircleId_( void *, int, const double[], const double[],
- AstRegion *, const char *, ... )__attribute__((format(printf,6,7)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstCircle *astInitCircle_( void *, size_t, int, AstCircleVtab *,
- const char *, AstFrame *, int, const double[],
- const double[], AstRegion *, int * );
-
-/* Vtab initialiser. */
-void astInitCircleVtab_( AstCircleVtab *, const char *, int * );
-
-/* Loader. */
-AstCircle *astLoadCircle_( void *, size_t, AstCircleVtab *,
- const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-void astCirclePars_( AstCircle *, double *, double *, double *, int * );
-
-# if defined(astCLASS) /* Protected */
-AstRegion *astBestCircle_( AstPointSet *, double *, AstRegion *, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckCircle(this) astINVOKE_CHECK(Circle,this,0)
-#define astVerifyCircle(this) astINVOKE_CHECK(Circle,this,1)
-
-/* Test class membership. */
-#define astIsACircle(this) astINVOKE_ISA(Circle,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astCircle astINVOKE(F,astCircle_)
-#else
-#define astCircle astINVOKE(F,astCircleId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitCircle(mem,size,init,vtab,name,frame,form,p1,p2,unc) \
-astINVOKE(O,astInitCircle_(mem,size,init,vtab,name,frame,form,p1,p2,unc,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitCircleVtab(vtab,name) astINVOKE(V,astInitCircleVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadCircle(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadCircle_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckCircle to validate Circle pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#define astCirclePars(this,centre,radius,p1) \
-astINVOKE(V,astCirclePars_(astCheckCircle(this),centre,radius,p1,STATUS_PTR))
-
-#if defined(astCLASS) /* Protected */
-#define astBestCircle(pset,cen,unc) astBestCircle_(pset,cen,unc,STATUS_PTR)
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/cmpframe.c b/ast-5.3-1/cmpframe.c
deleted file mode 100644
index a31fe35..0000000
--- a/ast-5.3-1/cmpframe.c
+++ /dev/null
@@ -1,10273 +0,0 @@
-/*
-*class++
-* Name:
-* CmpFrame
-
-* Purpose:
-* Compound Frame.
-
-* Constructor Function:
-c astCmpFrame
-f AST_CMPFRAME
-
-* Description:
-* A CmpFrame is a compound Frame which allows two component Frames
-* (of any class) to be merged together to form a more complex
-* Frame. The axes of the two component Frames then appear together
-* in the resulting CmpFrame (those of the first Frame, followed by
-* those of the second Frame).
-*
-* Since a CmpFrame is itself a Frame, it can be used as a
-* component in forming further CmpFrames. Frames of arbitrary
-* complexity may be built from simple individual Frames in this
-* way.
-*
-* Also since a Frame is a Mapping, a CmpFrame can also be used as a
-* Mapping. Normally, a CmpFrame is simply equivalent to a UnitMap,
-* but if either of the component Frames within a CmpFrame is a Region
-* (a sub-class of Frame), then the CmpFrame will use the Region as a
-* Mapping when transforming values for axes described by the Region.
-* Thus input axis values corresponding to positions which are outside the
-* Region will result in bad output axis values.
-
-* Inheritance:
-* The CmpFrame class inherits from the Frame class.
-
-* Attributes:
-* The CmpFrame class does not define any new attributes beyond
-* those which are applicable to all Frames. However, the attributes
-* of the component Frames can be accessed as if they were attributes
-* of the CmpFrame. For instance, if a CmpFrame contains a SpecFrame
-* and a SkyFrame, then the CmpFrame will recognise the "Equinox"
-* attribute and forward access requests to the component SkyFrame.
-* Likewise, it will recognise the "RestFreq" attribute and forward
-* access requests to the component SpecFrame. An axis index can
-* optionally be appended to the end of any attribute name, in which
-* case the request to access the attribute will be forwarded to the
-* primary Frame defining the specified axis.
-
-* Functions:
-c The CmpFrame class does not define any new functions beyond those
-f The CmpFrame class does not define any new routines beyond those
-* which are applicable to all Frames.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2009 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 4-MAR-1996 (RFWS):
-* Original version.
-* 27-FEB-1997 (RFWS):
-* Improved public prologues.
-* 25-FEB-1998 (RFWS):
-* Over-ride the astUnformat method.
-* 6-APR-1998 (RFWS):
-* Fixed bug in returned value of GenAxisSelection.
-* 22-SEP-1998 (RFWS):
-* Fixed bug in Match function - was not checking Domain values
-* for equality.
-* 11-JUN-1999 (RFWS):
-* Fixed bug in GenAxisSelection- some selections were being omitted.
-* 5-FEB-2001 (DSB):
-* Ensure that Title and Domain values appropriate to a CmpFrame
-* are preserved if a CmpFrame result is generated by SubFrame.
-* 27-FEB-2001 (DSB):
-* Modified Match so that all the frames have some axes in order to
-* match. Otherwise, null pointers are created (for zero axes),
-* resulting in a seg vio.
-* 21-JUN-2001 (DSB):
-* Added astAngle.
-* 7-SEP-2001 (DSB):
-* Added astResolve.
-* 26-SEP-2001 (DSB):
-* Over-ride the astDecompose method.
-* 20-DEC-2002 (DSB):
-* Allows any attribute of a component frame to be accessed as though
-* it were an attribute of the CmpFrame by including an axis index in
-* the attribute name (e.g. "System(3)").
-* 8-JAN-2003 (DSB):
-* - Changed private InitVtab method to protected astInitCmpFrameVtab
-* method.
-* - Override astGetAttrib, astClearAttrib, astTestAttrib,
-* astSetAttrib to allow attributes to be set for individual
-* axes.
-* - Override astGetEpoch astGetSystem, astGetAlignSystem.
-* astValidateSystem, astSystemString, astSystemCode.
-* 27-FEB-2003 (DSB):
-* - Modify the default Domain name for a CmpFrame to be the
-* domains of the two subFrames separated by a "-".
-* 24-JAN-2004 (DSB):
-* o Override the astFields method.
-* o Added argument "fmt" to Abbrev.
-* 24-MAR-2004 (DSB):
-* Over-ride the astSimplify and astTransform methods.
-* 8-SEP-2004 (DSB):
-* Over-ride astResolvePoints method.
-* 21-JAN-2005 (DSB):
-* Over-ride the astGetActiveUnit and astSetActiveUnit methods.
-* 23-FEB-2005 (DSB):
-* Modify GetDomain to avoid over-writing the static "buff" array
-* if called recursively.
-* 29-MAR-2005 (DSB):
-* Override astSetEpoch and astClearEpoch by implementations which
-* propagate the changed epoch value to the component Frames.
-* 5-APR-2005 (DSB):
-* Correct error checking in Clear/Get/Set/TestAttrib.
-* 12-MAY-2005 (DSB):
-* Override astNormBox method.
-* 12-AUG-2005 (DSB):
-* Override astSetObsLat/Lon and astClearObslat/Lon by implementations
-* which propagate the changed value to the component Frames.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 3-APR-2006 (DSB):
-* Modify Match so that an attempt is made to align the target with
-* each of the two component Frames if the target cannot be matched
-* with the CmpFrame as a whole.
-* 3-MAY-2006 (DSB):
-* Fix bug in Match that could cause segvio when matching a target
-* against the second component of a CmpFrame.
-* 31-OCT-2006 (DSB):
-* Over-ride the SetFrameFlags method.
-* 1-NOV-2005 (DSB):
-* Override astSetDut1, astGetDut1 and astClearDut1.
-* 15-MAR-2007 (DSB):
-* Override astClearAlignSystem by an implementation that clears
-* AlignSystem in the component Frames.
-* 7-FEB-2008 (DSB):
-* Allow the MaxAxes and MinAxes attributes to be specified for a
-* CmpFrame (rather than just being the sum of the attribute values
-* in the component frames). This enables, for instance, a (detector
-* index,mjd) frame to match with a ((velocity,detector index),mjd)
-* frame.
-* 5-MAY-2009 (DSB):
-* In GetAttrib, if an index is included in the attribute name, attempt
-* to use the GetAttrib method of the primary frame before using the
-* parent GetAttrib method. This is because the Frame getattrib
-* method will dissociate axes from their parent class. Thus, a
-* SkyAxis attribute such as AsTime will come out wrong since its
-* value is managed by the SkyFrame class rather than the SkyAxis
-* class.
-* 18-JUN-2009 (DSB):
-* Override astSetObsAlt and astClearObsAlt.
-* 29-SEP-2009 (DSB):
-* Ensure the astMatch method provided by this class honours the
-* PreserveAxes, MaxAxes and MinAxes attribute settings.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS CmpFrame
-
-/* Define the first and last acceptable System values. */
-#define FIRST_SYSTEM AST__COMP
-#define LAST_SYSTEM AST__COMP
-
-/* Define macros to implement member functions for accessing axis
- attributes. */
-/*
-* Name:
-* MAKE_CLEAR
-
-* Purpose:
-* Implement a function to clear an attribute value for a CmpFrame axis.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "cmpframe.h"
-* MAKE_CLEAR(attribute)
-
-* Class Membership:
-* Defined by the CmpFrame class.
-
-* Description:
-* This macro expands to an implementation of a private member
-* function of the form:
-*
-* static void Clear<Attribute>( AstFrame *this, int axis )
-*
-* which clears an attribute value for a specified axis of a CmpFrame.
-
-* Parameters:
-* attribute
-* The name of the attribute to be cleared, as it appears in the
-* function name (e.g. Label in "ClearLabel").
-
-* Notes:
-* - This macro assumes the existence of a method of the form:
-*
-* void astClear<Attribute>( AstFrame *this, int axis )
-*
-* which clears the required attribute for a Frame object.
-* - To avoid problems with some compilers, you should not leave
-* any white space around the macro arguments.
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attribute) \
-static void Clear##attribute( AstFrame *this_frame, int axis, int *status ) { \
- AstCmpFrame *this; /* Pointer to CmpFrame structure */ \
- int naxes1; /* Number of axes in frame1 */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Obtain a pointer to the CmpFrame structure. */ \
- this = (AstCmpFrame *) this_frame; \
-\
-/* Validate and alidateAxispermute the axis index supplied. */ \
- axis = astValidateAxis( this, axis, "astSet" #attribute ); \
-\
-/* Determine the number of axes in the first component Frame. */ \
- naxes1 = astGetNaxes( this->frame1 ); \
- if ( astOK ) { \
-\
-/* Decide which Frame contains the axis and invoke its astClear... method to \
- clear the attribute value. */ \
- if ( axis < naxes1 ) { \
- astClear##attribute( this->frame1, axis ); \
- } else { \
- astClear##attribute( this->frame2, axis - naxes1 ); \
- } \
- } \
-}
-
-/*
-* Name:
-* MAKE_GET
-
-* Purpose:
-* Implement a function to get an attribute value for a CmpFrame axis.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-# #include "cmpframe.h"
-* MAKE_GET(attribute,type,bad_value,default,assign_default)
-
-* Class Membership:
-* Defined by the CmpFrame class.
-
-* Description:
-* This macro expands to an implementation of a private member
-* function of the form:
-*
-* static <Type> Get<Attribute>( AstFrame *this, int axis )
-*
-* which gets an attribute value for a specified axis of a
-* CmpFrame.
-
-* Parameters:
-* attribute
-* The name of the attribute whose value is to be obtained, as
-* it appears in the function name (e.g. Label in "GetLabel").
-* type
-* The C type of the attribute.
-* bad_value
-* A constant value to return if the global error status is set,
-* or if the function fails.
-* default
-* A boolean (int) value that indicates whether a new default
-* value should be returned if the requested attribute has not
-* been set for the appropriate axis of the appropriate
-* component Frame. If this value is zero, the component Frame's
-* default (for the appropriate axis) will be used instead.
-* assign_default
-* An expression that evaluates to the new default value to be
-* assigned. This value is ignored if "default" is zero, but a
-* valid (e.g. constant) value should nevertheless be supplied.
-
-* Notes:
-* - This macro assumes the existence of a method of the form:
-*
-* <Type> astGet<Attribute>( AstFrame *this, int axis )
-*
-* which gets the required attribute for a Frame object.
-* - To avoid problems with some compilers, you should not leave
-* any white space around the macro arguments.
-*/
-
-/* Define the macro. */
-#define MAKE_GET(attribute,type,bad_value,default,assign_default) \
-static type Get##attribute( AstFrame *this_frame, int axis, int *status ) { \
- astDECLARE_GLOBALS /* Declare the thread specific global data */ \
- AstCmpFrame *this; /* Pointer to CmpFrame structure */ \
- AstFrame *frame; /* Pointer to Frame containing axis */\
- int axis_p; /* Permuted axis index */ \
- int naxes1; /* Number of axes in frame1 */ \
- int set; /* Digits attribute set? */ \
- type result; /* Result value to return */ \
- \
-/* Initialise. */ \
- result = (bad_value); \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* Get a pointer to the structure holding thread-specific global data. */ \
- astGET_GLOBALS(this_frame); \
-\
-/* Obtain a pointer to the CmpFrame structure. */ \
- this = (AstCmpFrame *) this_frame; \
-\
-/* Validate and permute the axis index supplied. */ \
- axis_p = astValidateAxis( this, axis, "astGet" #attribute ); \
-\
-/* Determine the number of axes in the first component Frame. */ \
- naxes1 = astGetNaxes( this->frame1 ); \
- if ( astOK ) { \
-\
-/* Decide which Frame contains the axis and adjust the axis index if \
- necessary. */ \
- frame = ( axis_p < naxes1 ) ? this->frame1 : this->frame2; \
- axis_p = ( axis_p < naxes1 ) ? axis_p : axis_p - naxes1; \
-\
-/* Since the component Frame is "managed" by the enclosing CmpFrame, we next \
- test if any Frame attributes which may affect the result are undefined \
- (i.e. have not been explicitly set). If so, we over-ride them, giving \
- them temporary values dictated by the CmpFrame. Only the Digits attribute \
- is relevant here. */ \
- set = astTestDigits( frame ); \
- if ( !set ) astSetDigits( frame, astGetDigits( this ) ); \
-\
-/* If the default value is to be over-ridden, test if the Frame's axis \
- attribute has been set. Then, if required, obtain the attribute value from \
- the Frame. */ \
- if ( !(default) || astTest##attribute( frame, axis_p ) ) { \
- result = astGet##attribute( frame, axis_p ); \
-\
-/* If required, assign the new default value. */ \
- } else { \
- result = (assign_default); \
- } \
-\
-/* Clear Frame attributes which were temporarily over-ridden. */ \
- if ( !set ) astClearDigits( frame ); \
- } \
-\
-/* If an error occurred, clear the result value. */ \
- if ( !astOK ) result = (bad_value); \
-\
-/* Return the result. */ \
- return result; \
-}
-
-/*
-* Name:
-* MAKE_SET
-
-* Purpose:
-* Implement a function to set an attribute value for a CmpFrame axis.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "cmpframe.h"
-* MAKE_SET(attribute,type)
-
-* Class Membership:
-* Defined by the CmpFrame class.
-
-* Description:
-* This macro expands to an implementation of a private member
-* function of the form:
-*
-* static void Set<Attribute>( AstFrame *this, int axis, <Type> value )
-*
-* which sets an attribute value for a specified axis of a CmpFrame.
-
-* Parameters:
-* attribute
-* The name of the attribute to be set, as it appears in the
-* function name (e.g. Label in "SetLabel").
-* type
-* The C type of the attribute.
-
-* Notes:
-* - This macro assumes the existence of a method of the form:
-*
-* void astSet<Attribute>( AstFrame *this, int axis, <Type> value )
-*
-* which sets the required attribute for a Frame object.
-* - To avoid problems with some compilers, you should not leave
-* any white space around the macro arguments.
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attribute,type) \
-static void Set##attribute( AstFrame *this_frame, int axis, type value, int *status ) { \
- AstCmpFrame *this; /* Pointer to CmpFrame structure */ \
- int naxes1; /* Number of axes in frame1 */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Obtain a pointer to the CmpFrame structure. */ \
- this = (AstCmpFrame *) this_frame; \
-\
-/* Validate and permute the axis index supplied. */ \
- axis = astValidateAxis( this, axis, "astSet" #attribute ); \
-\
-/* Determine the number of axes in the first component Frame. */ \
- naxes1 = astGetNaxes( this->frame1 ); \
- if ( astOK ) { \
-\
-/* Decide which Frame contains the axis and invoke its astSet... method to \
- set the attribute value. */ \
- if ( axis < naxes1 ) { \
- astSet##attribute( this->frame1, axis, value ); \
- } else { \
- astSet##attribute( this->frame2, axis - naxes1, value ); \
- } \
- } \
-}
-
-/*
-* Name:
-* MAKE_TEST
-
-* Purpose:
-* Implement a function to test if an attribute is set for a CmpFrame axis.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "cmpframe.h"
-* MAKE_TEST(attribute)
-
-* Class Membership:
-* Defined by the CmpFrame class.
-
-* Description:
-* This macro expands to an implementation of a private member
-* function of the form:
-*
-* static int Test<Attribute>( AstFrame *this, int axis )
-*
-* which tests whether an attribute value is set for a specified
-* axis of a CmpFrame.
-
-* Parameters:
-* attribute
-* The name of the attribute to be tested, as it appears in the
-* function name (e.g. Label in "TestLabel").
-
-* Notes:
-* - This macro assumes the existence of a method of the form:
-*
-* int astTest<Attribute>( AstFrame *this, int axis )
-*
-* which tests the required attribute for a Frame object.
-* - To avoid problems with some compilers, you should not leave
-* any white space around the macro arguments.
-*/
-
-/* Define the macro. */
-#define MAKE_TEST(attribute) \
-static int Test##attribute( AstFrame *this_frame, int axis, int *status ) { \
- AstCmpFrame *this; /* Pointer to CmpFrame structure */ \
- int naxes1; /* Number of axes in frame1 */ \
- int result; /* Result value to return */ \
-\
-/* Initialise. */ \
- result = 0; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* Obtain a pointer to the CmpFrame structure. */ \
- this = (AstCmpFrame *) this_frame; \
-\
-/* Validate and permute the axis index supplied. */ \
- axis = astValidateAxis( this, axis, "astSet" #attribute ); \
-\
-/* Determine the number of axes in the first component Frame. */ \
- naxes1 = astGetNaxes( this->frame1 ); \
- if ( astOK ) { \
-\
-/* Decide which Frame contains the axis and invoke its astTest... method to \
- test the attribute. */ \
- if ( axis < naxes1 ) { \
- result = astTest##attribute( this->frame1, axis ); \
- } else { \
- result = astTest##attribute( this->frame2, axis - naxes1 ); \
- } \
- } \
-\
-/* Return the result. */ \
- return result; \
-}
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "pointset.h" /* Sets of points */
-#include "object.h" /* Base Object class */
-#include "mapping.h" /* Coordinate Mappings */
-#include "unitmap.h" /* Unit Mappings */
-#include "permmap.h" /* Coordinate permutation Mappings */
-#include "cmpmap.h" /* Compound Mappings */
-#include "axis.h" /* Coordinate axes */
-#include "frame.h" /* Parent Frame class */
-#include "cmpframe.h" /* Interface definition for this class */
-#include "globals.h" /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <limits.h>
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstSystemType (* parent_getalignsystem)( AstFrame *, int * );
-static AstSystemType (* parent_getsystem)( AstFrame *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static const char *(* parent_getdomain)( AstFrame *, int * );
-static const char *(* parent_gettitle)( AstFrame *, int * );
-static double (* parent_angle)( AstFrame *, const double[], const double[], const double[], int * );
-static double (* parent_getdut1)( AstFrame *, int * );
-static double (* parent_getepoch)( AstFrame *, int * );
-static double (* parent_getobsalt)( AstFrame *, int * );
-static double (* parent_getobslat)( AstFrame *, int * );
-static double (* parent_getobslon)( AstFrame *, int * );
-static int (* parent_getactiveunit)( AstFrame *, int * );
-static int (* parent_getmaxaxes)( AstFrame *, int * );
-static int (* parent_getminaxes)( AstFrame *, int * );
-static int (* parent_getobjsize)( AstObject *, int * );
-static int (* parent_getusedefs)( AstObject *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearalignsystem)( AstFrame *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_cleardut1)( AstFrame *, int * );
-static void (* parent_clearepoch)( AstFrame *, int * );
-static void (* parent_clearobsalt)( AstFrame *, int * );
-static void (* parent_clearobslat)( AstFrame *, int * );
-static void (* parent_clearobslon)( AstFrame *, int * );
-static void (* parent_overlay)( AstFrame *, const int *, AstFrame *, int * );
-static void (* parent_setactiveunit)( AstFrame *, int, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static void (* parent_setdut1)( AstFrame *, double, int * );
-static void (* parent_setepoch)( AstFrame *, double, int * );
-static void (* parent_setframeflags)( AstFrame *, int, int * );
-static void (* parent_setobsalt)( AstFrame *, double, int * );
-static void (* parent_setobslat)( AstFrame *, double, int * );
-static void (* parent_setobslon)( AstFrame *, double, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->Label_Buff[ 0 ] = 0; \
- globals->Symbol_Buff[ 0 ] = 0; \
- globals->GetDomain_Buff[ 0 ] = 0; \
- globals->GetTitle_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(CmpFrame)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(CmpFrame,Class_Init)
-#define class_vtab astGLOBAL(CmpFrame,Class_Vtab)
-#define getdomain_buff astGLOBAL(CmpFrame,GetDomain_Buff)
-#define gettitle_buff astGLOBAL(CmpFrame,GetTitle_Buff)
-#define label_buff astGLOBAL(CmpFrame,Label_Buff)
-#define symbol_buff astGLOBAL(CmpFrame,Symbol_Buff)
-#define qsort_axes astGLOBAL(CmpFrame,qsort_axes)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-/* Pointer to axis index array accessed by "qsort". */
-static int *qsort_axes;
-
-/* Default Label string buffer */
-static char label_buff[ 101 ];
-
-/* Default Symbol buffer */
-static char symbol_buff[ 51 ];
-
-/* Buffer for returned domain name in GetDomain */
-static char getdomain_buff[ 101 ];
-
-/* Buffer for returned title in GetTitle */
-static char gettitle_buff[ 101 ];
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstCmpFrameVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstCmpFrame *astCmpFrameId_( void *, void *, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstAxis *GetAxis( AstFrame *, int, int * );
-static AstMapping *RemoveRegions( AstMapping *, int * );
-static AstMapping *Simplify( AstMapping *, int * );
-static AstObject *Cast( AstObject *, AstObject *, int * );
-static AstPointSet *ResolvePoints( AstFrame *, const double [], const double [], AstPointSet *, AstPointSet *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstSystemType GetAlignSystem( AstFrame *, int * );
-static AstSystemType GetSystem( AstFrame *, int * );
-static AstSystemType SystemCode( AstFrame *, const char *, int * );
-static AstSystemType ValidateSystem( AstFrame *, AstSystemType, const char *, int * );
-static const char *Abbrev( AstFrame *, int, const char *, const char *, const char *, int * );
-static const char *Format( AstFrame *, int, double, int * );
-static const char *GetDomain( AstFrame *, int * );
-static const char *GetFormat( AstFrame *, int, int * );
-static const char *GetLabel( AstFrame *, int, int * );
-static const char *GetSymbol( AstFrame *, int, int * );
-static const char *GetTitle( AstFrame *, int * );
-static const char *GetUnit( AstFrame *, int, int * );
-static const char *SystemString( AstFrame *, AstSystemType, int * );
-static const int *GetPerm( AstFrame *, int * );
-static double Angle( AstFrame *, const double[], const double[], const double[], int * );
-static double Distance( AstFrame *, const double[], const double[], int * );
-static double Gap( AstFrame *, int, double, int *, int * );
-static int ComponentMatch( AstCmpFrame *, AstFrame *, int, int **, int **, AstMapping **, AstFrame **, int * );
-static int Fields( AstFrame *, int, const char *, const char *, int, char **, int *, double *, int * );
-static int GenAxisSelection( int, int, int [], int * );
-static int GetActiveUnit( AstFrame *, int * );
-static int GetDirection( AstFrame *, int, int * );
-static int GetMaxAxes( AstFrame *, int * );
-static int GetMinAxes( AstFrame *, int * );
-static int GetNaxes( AstFrame *, int * );
-static int GetObjSize( AstObject *, int * );
-static int GetUseDefs( AstObject *, int * );
-static int GoodPerm( int, const int [], int, const int [], int * );
-static int IsUnitFrame( AstFrame *, int * );
-static int Match( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int PartMatch( AstCmpFrame *, AstFrame *, int, const int [], int, const int [], int **, int **, AstMapping **, AstFrame **, int * );
-static int QsortCmpAxes( const void *, const void * );
-static int SubFrame( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int TestDirection( AstFrame *, int, int * );
-static int TestFormat( AstFrame *, int, int * );
-static int TestLabel( AstFrame *, int, int * );
-static int TestSymbol( AstFrame *, int, int * );
-static int TestUnit( AstFrame *, int, int * );
-static int Unformat( AstFrame *, int, const char *, double *, int * );
-static void AddExtraAxes( int, int [], int, int, int, int * );
-static void ClearDirection( AstFrame *, int, int * );
-static void ClearFormat( AstFrame *, int, int * );
-static void ClearLabel( AstFrame *, int, int * );
-static void ClearSymbol( AstFrame *, int, int * );
-static void ClearUnit( AstFrame *, int, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Decompose( AstMapping *, AstMapping **, AstMapping **, int *, int *, int *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void MatchAxesX( AstFrame *, AstFrame *, int *, int * );
-static void Norm( AstFrame *, double [], int * );
-static void NormBox( AstFrame *, double[], double[], AstMapping *, int * );
-static void Offset( AstFrame *, const double [], const double [], double, double [], int * );
-static void Overlay( AstFrame *, const int *, AstFrame *, int * );
-static void PartitionSelection( int, const int [], const int [], int, int, int [], int, int * );
-static void PermAxes( AstFrame *, const int[], int * );
-static void PrimaryFrame( AstFrame *, int, AstFrame **, int *, int * );
-static void RenumberAxes( int, int [], int * );
-static void Resolve( AstFrame *, const double [], const double [], const double [], double [], double *, double *, int * );
-static void SetActiveUnit( AstFrame *, int, int * );
-static void SetAxis( AstFrame *, int, AstAxis *, int * );
-static void SetDirection( AstFrame *, int, int, int * );
-static void SetFormat( AstFrame *, int, const char *, int * );
-static void SetFrameFlags( AstFrame *, int, int * );
-static void SetLabel( AstFrame *, int, const char *, int * );
-static void SetSymbol( AstFrame *, int, const char *, int * );
-static void SetUnit( AstFrame *, int, const char *, int * );
-
-static const char *GetAttrib( AstObject *, const char *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-
-static double GetEpoch( AstFrame *, int * );
-static void ClearEpoch( AstFrame *, int * );
-static void SetEpoch( AstFrame *, double, int * );
-
-static double GetDut1( AstFrame *, int * );
-static void ClearDut1( AstFrame *, int * );
-static void SetDut1( AstFrame *, double, int * );
-
-static double GetObsLon( AstFrame *, int * );
-static void ClearObsLon( AstFrame *, int * );
-static void SetObsLon( AstFrame *, double, int * );
-
-static double GetObsLat( AstFrame *, int * );
-static void ClearObsLat( AstFrame *, int * );
-static void SetObsLat( AstFrame *, double, int * );
-
-static double GetObsAlt( AstFrame *, int * );
-static void ClearObsAlt( AstFrame *, int * );
-static void SetObsAlt( AstFrame *, double, int * );
-
-static void ClearAlignSystem( AstFrame *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Member functions. */
-/* ================= */
-static const char *Abbrev( AstFrame *this_frame, int axis, const char *fmt,
- const char *str1, const char *str2, int *status ) {
-/*
-* Name:
-* Abbrev
-
-* Purpose:
-* Abbreviate a formatted CmpFrame axis value by skipping leading fields.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* const char *Abbrev( AstFrame *this, int axis, const char *fmt,
-* const char *str1, const char *str2, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the protected astAbbrev
-* method inherited from the Frame class).
-
-* Description:
-* This function compares two CmpFrame axis values that have been
-* formatted (using astFormat) and determines if they have any
-* redundant leading fields (i.e. leading fields in common which
-* can be suppressed when tabulating the values or plotting them on
-* the axis of a graph).
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* axis
-* The number of the CmpFrame axis for which the values have
-* been formatted (axis numbering starts at zero for the first
-* axis).
-* fmt
-* Pointer to a constant null-terminated string containing the
-* format specification used to format the two values.
-* str1
-* Pointer to a constant null-terminated string containing the
-* first formatted value. If this is null, the returned pointer
-* points to the start of the final field in str2.
-* str2
-* Pointer to a constant null-terminated string containing the
-* second formatted value.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer into the "str2" string which locates the first
-* character in the first field that differs between the two
-* formatted values.
-*
-* If the two values have no leading fields in common, the returned
-* value will point at the start of string "str2". If the two
-* values are equal, it will point at the terminating null at the
-* end of this string.
-
-* Notes:
-* - This function assumes that the format specification used was
-* the same when both values were formatted and that they both
-* apply to the same CmpFrame axis.
-* - A pointer to the start of "str2" will be returned if this
-* function is invoked with the global error status set, or if it
-* should fail for any reason.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to CmpFrame structure */
- AstFrame *frame; /* Pointer to Frame containing axis */
- const char *result; /* Pointer value to return */
- int naxes1; /* Number of axes in frame1 */
- int set; /* Digits attribute set? */
-
-/* Initialise. */
- result = str2;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Validate and permute the axis index supplied. */
- axis = astValidateAxis( this, axis, "astAbbrev" );
-
-/* Determine the number of axes in the first component Frame. */
- naxes1 = astGetNaxes( this->frame1 );
- if ( astOK ) {
-
-/* Decide which component Frame contains the axis and adjust the axis
- index if necessary. */
- frame = ( axis < naxes1 ) ? this->frame1 : this->frame2;
- axis = ( axis < naxes1 ) ? axis : axis - naxes1;
-
-/* Since the component Frame is "managed" by the enclosing CmpFrame,
- we next test if any Frame attributes which may affect the result
- are undefined (i.e. have not been explicitly set). If so, we
- over-ride them, giving them temporary values dictated by the
- CmpFrame. Only the Digits attribute is relevant here. */
- set = astTestDigits( frame );
- if ( !set ) astSetDigits( frame, astGetDigits( this ) );
-
-/* Invoke the Frame's astAbbrev method to perform the processing. */
- result = astAbbrev( frame, axis, fmt, str1, str2 );
-
-/* Clear Frame attributes which were temporarily over-ridden. */
- if ( !set ) astClearDigits( frame );
- }
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) result = str2;
-
-/* Return the result. */
- return result;
-}
-
-static void AddExtraAxes( int naxes, int axes[], int i1, int i2,
- int following, int *status ) {
-/*
-* Name:
-* AddExtraAxes
-
-* Purpose:
-* Add extra axis indices in place of missing ones.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void AddExtraAxes( int naxes, int axes[], int i1, int i2,
-* int following, int *status )
-
-* Class Membership:
-* CmpFrame member function.
-
-* Description:
-* This function takes an array of axis indices that refer to the
-* axes of a Frame, and which may have values missing (denoted by
-* an index of -1). It replaces each occurrence of -1 by a new axis
-* index (and re-numbers the others to avoid duplication) in such a
-* way that the new indices introduced are "associated" with
-* certain of the pre-existing indices, by virtue of being numbered
-* consecutively with them.
-*
-* The purpose of this operation is to establish the relative
-* location of new axes in relation to the pre-existing ones.
-*
-* Normally, each new axis will be associated with (i.e. numbered
-* one more than) the pre-existing index which precedes
-* it. However, if the "following" parameter is non-zero, it will
-* instead be associated with (numbered one less than) the one
-* which follows it. If there is no preceding (or following)
-* pre-existing index, the following (or preceding) one is used
-* instead. If several adjacent occurrences of -1 must be replaced,
-* they are numbered consecutively in their order of occurrence.
-
-* Parameters:
-* naxes
-* The number of axis indices in the array.
-* axes
-* The array containing the axis indices.
-* i1
-* Index of the first element of the array to be processed.
-* i2
-* Index of the last element of the array to be processed.
-* following
-* Boolean flag to determine if new indices are associated with
-* the preceding index (if zero) or the following index (if
-* non-zero).
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The values of "i1" and "i2" dictate the range of array
-* elements where values of -1 will be replaced, but all array
-* elements are candidates for renumbering in order to avoid
-* duplicate axis indices.
-* - This function aims to establish the location of new axes only
-* by means of the relative numerical value of the indices assigned
-* to them. It does not constrain the actual indices assigned in
-* any further way.
-* - Because axis indices are always incremented (never
-* decremented) in order to avoid duplicates, where a number of new
-* indices have been introduced, the maximum index present in the
-* result array may exceed the original maximum.
-* - Some axis indices may remain unused (i.e. not present) in the
-* result array.
-*/
-
-/* Local Variables: */
- int end; /* Loop termination value */
- int extra; /* Index to apply to next "extra" axis */
- int found; /* Default value found? */
- int i; /* Main loop counter */
- int inc; /* Loop increment value */
- int j; /* Loop counter for eliminating duplicates */
- int start; /* Loop starting value */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Initialise the default index of the next extra axis to add. This
- will apply only if there are no valid axis indices from which to
- obtain a better default. */
- extra = 0;
-
-/* Initialise loop parameters so as to scan the axis indices provided
- in either the forward or reverse direction, according to the value
- of "following". Start with the section of the array being processed,
- but continue looking for a default right up to the end of the array
- (this prevents the current section being numbered inconsistently
- with respect to adjacent ones that may already have been
- processed). */
- start = following ? i2 : i1;
- end = following ? -1 : naxes;
- inc = following ? -1 : 1;
-
-/* Search for the first (in whichever direction this is) valid axis
- index and use it to set a new default index for the next extra axis
- to add. If scanning forward, use the valid axis index (causing any
- preceding extra axis to displace it upwards). If scanning
- backwards, use one more than the valid axis index (causing any
- following extra axis to tag on the end). */
- found = 0;
- for ( i = start; i != end; i += inc ) {
- if ( axes[ i ] != -1 ) {
- found = 1;
- extra = axes[ i ] + ( following ? 1 : 0 );
- break;
- }
- }
-
-/* If no default has yet been found, repeat the above process by
- scanning in the opposite direction (by inverting the "following"
- value used). Again, this prevents inconsistency with neighbouring
- regions. This time a default must be found unless the entire array
- is filled with -1's (in which case a default of zero is used). */
- if ( !found ) {
- start = !following ? i2 : i1;
- end = !following ? -1 : naxes;
- inc = !following ? -1 : 1;
- for ( i = start; i != end; i += inc ) {
- if ( axes[ i ] != -1 ) {
- extra = axes[ i ] + ( !following ? 1 : 0 );
- break;
- }
- }
- }
-
-/* Reset the loop parameters to scan just the region of interest in
- the original (correct) direction. */
- start = following ? i2 : i1;
- end = following ? i1 - 1 : i2 + 1;
- inc = following ? -1 : 1;
-
-/* Identify those indices which are not valid. */
- for ( i = start; i != end; i += inc ) {
- if ( axes[ i ] == -1 ) {
-
-/* We wish to assign the value "extra" in place of this invalid axis
- index. However, this may duplicate an index already present, so
- increment by one all valid indices which are not less than the new
- index. This eliminates any possibility duplication, although it may
- leave an axis index value unused (if no duplication would actually
- have occurred). */
- for ( j = 0; j < naxes; j++ ) {
- if ( axes[ j ] != -1 ) {
- if ( axes[ j ] >= extra ) axes[ j ]++;
- }
- }
-
-/* We can now assign the new axis index. */
- axes[ i ] = extra;
-
-/* Assign the value to be used for the next extra axis index. If
- scanning forward, this will be one more than the last one used (so
- it will follow it). If scanning backwards, it is equal to the last
- one (so that it will displace the last one upwards). */
- extra += ( following ? 0 : 1 );
-
-/* When a valid axis index is encountered, reset the value to be used
- for the next extra axis index. If scanning forward, this is one
- more than the last valid index (so the extra axis will follow
- it). If scanning backwards, it is equal to the last valid index (so
- it will displace the valid index upwards). */
- } else {
- extra = axes[ i ] + ( following ? 0 : 1 );
- }
- }
-}
-
-static double Angle( AstFrame *this_frame, const double a[],
- const double b[], const double c[], int *status ) {
-/*
-* Name:
-* Angle
-
-* Purpose:
-* Calculate the angle subtended by two points at a third point.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* double Angle( AstFrame *this_frame, const double a[],
-* const double b[], const double c[], int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astAngle method
-* inherited from the Frame class).
-
-* Description:
-* This function finds the angle at point B between the line joining
-* points A and B, and the line joining points C and B, in the context
-* of a CmpFrame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* a
-* An array of double, with one element for each CmpFrame axis,
-* containing the coordinates of the first point.
-* b
-* An array of double, with one element for each CmpFrame axis,
-* containing the coordinates of the second point.
-* c
-* An array of double, with one element for each CmpFrame axis,
-* containing the coordinates of the third point.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The required angle, or AST__BAD if the angle is undefined.
-
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
- AstFrame *pframe; /* Pointer to the primary Frame for an axis */
- const int *perm; /* Pointer to axis permutation array */
- double *pa; /* Permuted coordinates for point a */
- double *pb; /* Permuted coordinates for point b */
- double *pc; /* Permuted coordinates for point c */
- double ang1; /* Angle between input points in frame1 */
- double ang2; /* Angle between input points in frame2 */
- double result; /* Required angle */
- int axis; /* Loop counter for axes */
- int iscart; /* Is the CmpFrame a Cartesian system? */
- int naxes1; /* Number of axes in frame1 */
- int naxes; /* Total number of axes in CmpFrame */
- int paxis; /* Axis index within primary Frame */
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Obtain the number of axes in the CmpFrame. */
- naxes = astGetNaxes( this );
-
-/* See if all axes within the CmpFrame belong to a simple Frame, in which
- case we assume that the CmpFrame describes a Cartesian coordinate system. */
- iscart = 1;
- for( axis = 0; axis < naxes; axis++ ){
- PrimaryFrame( this_frame, axis, &pframe, &paxis, status );
- if( strcmp( astGetClass( pframe ), "Frame" ) ) {
- iscart = 0;
- pframe = astAnnul( pframe );
- break;
- }
- pframe = astAnnul( pframe );
- }
-
-/* If the CmpFrame describes a Cartesian coordinate system, we can use the
- Angle method from the parent Frame class. */
- if( iscart ) {
- result = (*parent_angle)( this_frame, a, b, c, status );
-
-/* If the CmpFrame is not Cartesian... */
- } else {
-
-/* Obtain a pointer to the CmpFrame's axis permutation array. */
- perm = astGetPerm( this );
-
-/* Get workspace. */
- pa = (double *) astMalloc( sizeof(double)*naxes );
- pb = (double *) astMalloc( sizeof(double)*naxes );
- pc = (double *) astMalloc( sizeof(double)*naxes );
-
-/* If OK, apply the axis permutation array to obtain the coordinates in the
- required order. */
- if( astOK ) {
- for( axis = 0; axis < naxes; axis++ ) {
- pa[ perm[ axis ] ] = a[ axis ];
- pb[ perm[ axis ] ] = b[ axis ];
- pc[ perm[ axis ] ] = c[ axis ];
- }
-
-/* Obtain the number of axes in the first component Frame. */
- naxes1 = astGetNaxes( this->frame1 );
-
-/* Project the two input points into the two component Frames and
- determine the angle between the points in each Frame. */
- ang1 = astAngle( this->frame1, pa, pb, pc );
- ang2 = astAngle( this->frame2, pa + naxes1, pb + naxes1,
- pc + naxes1 );
-
-/* The required angle is defined if one and only one of the two component
- frames gives a defined angle between the two points. */
- if( ang1 == AST__BAD ) {
- result = ang2;
- } else if( ang2 == AST__BAD ) {
- result = ang1;
- }
- }
-
-/* Free the workspace */
- pa = (double *) astFree( (void *) pa );
- pb = (double *) astFree( (void *) pb );
- pc = (double *) astFree( (void *) pc );
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstObject *Cast( AstObject *this_object, AstObject *obj, int *status ) {
-/*
-* Name:
-* Cast
-
-* Purpose:
-* Cast an Object into an instance of a sub-class.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* AstObject *Cast( AstObject *this, AstObject *obj, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the protected astCast
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a deep copy of an ancestral component of the
-* supplied object. The required class of the ancestral component is
-* specified by another object. Specifically, if "this" and "new" are
-* of the same class, a copy of "this" is returned. If "this" is an
-* instance of a subclass of "obj", then a copy of the component
-* of "this" that matches the class of "obj" is returned. Otherwise,
-* a NULL pointer is returned without error.
-
-* Parameters:
-* this
-* Pointer to the Object to be cast.
-* obj
-* Pointer to an Object that defines the class of the returned Object.
-* The returned Object will be of the same class as "obj".
-
-* Returned Value:
-* A pointer to the new Object. NULL if "this" is not a sub-class of
-* "obj", or if an error occurs.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables; */
- AstAxis *newaxis;
- AstFrame *cfrm;
- AstFrame *this;
- AstObject *new;
- astDECLARE_GLOBALS
- int generation_gap;
- int i;
- int naxes;
-
-/* Initialise */
- new = NULL;
-
-/* Check inherited status */
- if( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* See how many steps up the class inheritance ladder it is from "obj"
- to this class (CmpFrame). A positive value is returned if CmpFrame
- is a sub-class of "obj". A negative value is returned if "obj" is
- a sub-class of CmpFrame. Zero is returned if "obj" is a CmpFrame.
- AST__COUSIN is returned if "obj" is not on the same line of descent
- as CmpFrame. */
- generation_gap = astClassCompare( (AstObjectVtab *) &class_vtab,
- astVTAB( obj ) );
-
-/* If "obj" is a CmpFrame or a sub-class of CmpFrame, we can cast by
- truncating the vtab for "this" so that it matches the vtab of "obJ",
- and then taking a deep copy of "this". */
- if( generation_gap <= 0 && generation_gap != AST__COUSIN ) {
- new = astCastCopy( this_object, obj );
-
-/* If "obj" is not a CmpFrame or a sub-class of CmpFrame (e.g. it's a
- Frame), we create a basic Frame containing the same axes and attributes
- as the CmpFrame, and then attempt to cast this Frame into the class
- indicated by "obj". */
- } else {
- this = (AstFrame *) this_object;
-
-/* Create a basic Frame with the right number of axes. */
- naxes = astGetNaxes( this );
- cfrm = astFrame( naxes, " ", status );
-
-/* Replace the Axis structures in the basic Frame with those in the
- CmpFrame. */
- for( i = 0; i < naxes; i++ ) {
- newaxis = astGetAxis( this, i );
- astSetAxis( cfrm, i, newaxis );
- newaxis = astAnnul( newaxis );
- }
-
-/* Overlay the properties of the CmpFrame onto the basic Frame. */
- astOverlay( this, NULL, cfrm );
-
-/* Try to cast the basic Frame to the class of "obj". */
- new = astCast( cfrm, obj );
-
-/* Annull the basic Frame. */
- cfrm = astAnnul( cfrm );
- }
-
-/* Return the new pointer. */
- return new;
-}
-
-static void ClearAlignSystem( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* ClearAlignSystem
-
-* Purpose:
-* Clear the value of the AlignSystem attribute for a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void ClearAlignSystem( AstFrame *this, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astClearAlignSystem method
-* inherited from the Frame class).
-
-* Description:
-* This function clears the AlignSystem value in the component Frames as
-* well as this CmpFrame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Invoke the parent method to clear the CmpFrame AlignSystem value. */
- (*parent_clearalignsystem)( this_frame, status );
-
-/* Now clear the AlignSystem attribute in the two component Frames. */
- astClearAlignSystem( this->frame1 );
- astClearAlignSystem( this->frame2 );
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astClearAttrib protected
-* method inherited from the Frame class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* CmpFrame, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function uses one-based axis numbering so that it is
-* suitable for external (public) use.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
- AstFrame *pfrm; /* Pointer to primary Frame containing axis */
- char buf1[80]; /* For for un-indexed attribute name */
- char buf2[80]; /* For for indexed attribute name */
- int axis; /* Sipplied (1-based) axis index */
- int len; /* Length of attrib string */
- int nc; /* Number of characters used so dar */
- int oldrep; /* Original error reporting state */
- int paxis; /* Index of primary Frame axis */
- int ok; /* Has the attribute been accessed succesfully? */
-
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_object;
-
-/* Obtain the length of the "attrib" string. */
- len = strlen( attrib );
-
-/* Indicate we have not yet acessed the attribute succesfully. */
- ok = 0;
-
-/* First check the supplied attribute name against each of the attribute
- names defined by this class. In fact there is nothing to do here
- since the CmpFrame class currently defines no extra attributes, but
- this may change in the future. */
- if( 0 ) {
-
-
-
-/* If the attribute is not a CmpFrame specific attribute... */
- } else if( astOK ) {
-
-/* We want to allow easy access to the attributes of the component Frames.
- That is, we do not want it to be necessary to extract a Frame from
- its parent CmpFrame in order to access its attributes. For this reason
- we first temporarily switch off error reporting so that if an attempt
- to access the attribute fails, we can try a different approach. */
- oldrep = astReporting( 0 );
-
-/* Our first attempt is to see if the attribute is recognised by the parent
- class (Frame). */
- (*parent_clearattrib)( this_object, attrib, status );
-
-/* Indicate success. */
- if( astOK ) {
- ok = 1;
-
-/* Otherwise, clear the error condition so that we can try a different
- approach. */
- } else {
- astClearStatus;
-
-/* If the attribute is qualified by an axis index, try accessing it as an
- attribute of the primary Frame containing the specified index. */
- if ( nc = 0,
- ( 2 == astSscanf( attrib, "%[^(](%d)%n", buf1, &axis, &nc ) )
- && ( nc >= len ) ) {
-
-/* Find the primary Frame containing the specified axis. */
- astPrimaryFrame( this, axis - 1, &pfrm, &paxis );
- if( astOK ) {
-
-/* Create a new attribute with the same name but with the axis index
- appropriate to the primary Frame. */
- sprintf( buf2, "%s(%d)", buf1, paxis + 1 );
-
-/* Attempt to access the attribute. */
- astClearAttrib( pfrm, buf2 );
-
-/* Indicate success. */
- if( astOK ) {
- ok = 1;
-
-/* Otherwise clear the status value, and try again without any axis index. */
- } else {
- astClearStatus;
- astClearAttrib( pfrm, buf1 );
-
-/* Indicate success, or clear the status value. */
- if( astOK ) {
- ok = 1;
- } else {
- astClearStatus;
- }
- }
-
-/* Free the primary frame pointer. */
- pfrm = astAnnul( pfrm );
- }
-
-/* If the attribute is not qualified by an axis index, try accessing it
- using the primary Frame of each axis in turn. */
- } else {
-
-/* Loop round all axes attribute. */
- for( axis = 0; axis < astGetNaxes( this ); axis++ ) {
-
-/* Get the primary Frame containing this axis. */
- astPrimaryFrame( this, axis, &pfrm, &paxis );
-
-/* Attempt to access the attribute as an attribute of the primary Frame. */
- astClearAttrib( pfrm, attrib );
-
-/* Free the primary Frame pointer. */
- pfrm = astAnnul( pfrm );
-
-/* Indicate success, or clear the status value. */
- if( astOK ) {
- ok = 1;
- } else {
- astClearStatus;
- }
- }
- }
- }
-
-/* Re-instate the original error reporting state. */
- astReporting( oldrep );
-
- }
-
-/* Report an error if the attribute could not be accessed. */
- if( !ok && astOK ) {
- astError( AST__BADAT, "astClear: The %s given does not have an attribute "
- "called \"%s\".", status, astGetClass( this ), attrib );
- }
-
-}
-
-static void ClearDut1( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* ClearDut1
-
-* Purpose:
-* Clear the value of the Dut1 attribute for a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void ClearDut1( AstFrame *this, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astClearDut1 method
-* inherited from the Frame class).
-
-* Description:
-* This function clears the Dut1 value in the component Frames as
-* well as this CmpFrame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Invoke the parent method to clear the CmpFrame Dut1 value. */
- (*parent_cleardut1)( this_frame, status );
-
-/* Now clear the Dut1 attribute in the two component Frames. */
- astClearDut1( this->frame1 );
- astClearDut1( this->frame2 );
-}
-
-static void ClearEpoch( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* ClearEpoch
-
-* Purpose:
-* Clear the value of the Epoch attribute for a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void ClearEpoch( AstFrame *this, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astClearEpoch method
-* inherited from the Frame class).
-
-* Description:
-* This function clears the Epoch value in the component Frames as
-* well as this CmpFrame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Invoke the parent method to clear the CmpFrame epoch. */
- (*parent_clearepoch)( this_frame, status );
-
-/* Now clear the Epoch attribute in the two component Frames. */
- astClearEpoch( this->frame1 );
- astClearEpoch( this->frame2 );
-}
-
-static void ClearObsAlt( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* ClearObsAlt
-
-* Purpose:
-* Clear the value of the ObsAlt attribute for a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void ClearObsAlt( AstFrame *this, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astClearObsAlt method
-* inherited from the Frame class).
-
-* Description:
-* This function clears the ObsAlt value in the component Frames as
-* well as this CmpFrame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Invoke the parent method to clear the CmpFrame ObsAlt. */
- (*parent_clearobsalt)( this_frame, status );
-
-/* Now clear the ObsAlt attribute in the two component Frames. */
- astClearObsAlt( this->frame1 );
- astClearObsAlt( this->frame2 );
-}
-
-static void ClearObsLat( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* ClearObsLat
-
-* Purpose:
-* Clear the value of the ObsLat attribute for a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void ClearObsLat( AstFrame *this, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astClearObsLat method
-* inherited from the Frame class).
-
-* Description:
-* This function clears the ObsLat value in the component Frames as
-* well as this CmpFrame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Invoke the parent method to clear the CmpFrame ObsLat. */
- (*parent_clearobslat)( this_frame, status );
-
-/* Now clear the ObsLat attribute in the two component Frames. */
- astClearObsLat( this->frame1 );
- astClearObsLat( this->frame2 );
-}
-
-static void ClearObsLon( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* ClearObsLon
-
-* Purpose:
-* Clear the value of the ObsLon attribute for a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void ClearObsLon( AstFrame *this, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astClearObsLon method
-* inherited from the Frame class).
-
-* Description:
-* This function clears the ObsLon value in the component Frames as
-* well as this CmpFrame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Invoke the parent method to clear the CmpFrame ObsLon. */
- (*parent_clearobslon)( this_frame, status );
-
-/* Now clear the ObsLon attribute in the two component Frames. */
- astClearObsLon( this->frame1 );
- astClearObsLon( this->frame2 );
-}
-
-static int ComponentMatch( AstCmpFrame *template, AstFrame *target,
- int icomp, int **template_axes, int **target_axes,
- AstMapping **map, AstFrame **result, int *status ) {
-/*
-* Name:
-* ComponentMatch
-
-* Purpose:
-* Determine if conversion is possible between a component Frame in a
-* template CmpFrame and another target Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* int ComponentMatch( AstCmpFrame *template, AstFrame *target,
-* int icomp, int **template_axes, int **target_axes,
-* AstMapping **map, AstFrame **result, int *status )
-
-* Class Membership:
-* CmpFrame member function
-
-* Description:
-* This function is like astMatch, but it compares the supplied target
-* Frame with a specified component Frame of the supplied template
-* CmpFrame, rather than with the entire template CmpFrame. If a match
-* is found, the returned Mapping, Frame and axis lists are adjusted so
-* that they refer to the entire template CmpFrame.
-
-* Parameters:
-* template
-* Pointer to the template CmpFrame. This describes the
-* coordinate system (or set of possible coordinate systems)
-* into which we wish to convert our coordinates.
-* target
-* Pointer to the target Frame. This describes the coordinate
-* system in which we already have coordinates.
-* icomp
-* The index of the component Frame to use within the template
-* CmpFrame; 0 or 1.
-* template_axes
-* Address of a location where a pointer to int will be returned
-* if the requested coordinate conversion is possible. This
-* pointer will point at a dynamically allocated array of
-* integers with one element for each axis of the "result" Frame
-* (see below). It must be freed by the caller (using astFree)
-* when no longer required.
-*
-* For each axis in the result Frame, the corresponding element
-* of this array will return the (zero-based) index of the
-* template CmpFrame axis from which it is derived. If it is not
-* derived from any template axis, a value of -1 will be
-* returned instead.
-* target_axes
-* Address of a location where a pointer to int will be returned
-* if the requested coordinate conversion is possible. This
-* pointer will point at a dynamically allocated array of
-* integers with one element for each axis of the "result" Frame
-* (see below). It must be freed by the caller (using astFree)
-* when no longer required.
-*
-* For each axis in the result Frame, the corresponding element
-* of this array will return the (zero-based) index of the
-* target Frame axis from which it is derived. If it is not
-* derived from any target axis, a value of -1 will be returned
-* instead.
-* map
-* Address of a location where a pointer to a new Mapping will
-* be returned if the requested coordinate conversion is
-* possible. If returned, the forward transformation of this
-* Mapping may be used to convert coordinates between the
-* "target" Frame and the "result" Frame (see below) and the
-* inverse transformation will convert in the opposite
-* direction.
-* result
-* Address of a location where a pointer to a new Frame will be
-* returned if the requested coordinate conversion is
-* possible. If returned, this Frame describes the coordinate
-* system that results from applying the returned Mapping
-* (above) to the "target" coordinate system. In general, this
-* Frame will combine attributes from (and will therefore be
-* more specific than) both the target Frame and the template
-* CmpFrame. In particular, when the template allows the
-* possibility of transformaing to any one of a set of
-* alternative coordinate systems, the "result" Frame will
-* indicate which of the alternatives was used.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if the requested coordinate
-* conversion is possible. Otherwise zero is returned (this will
-* not in itself result in an error condition).
-
-* Notes:
-* - By default, the "result" Frame will have its number of axes
-* and axis order determined by the "template" CmpFrame. However,
-* if the PreserveAxes attribute of the template CmpFrame is
-* non-zero, then the axis count and axis order of the "target"
-* Frame will be used instead.
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *ctemplate;
- AstFrame *fother;
- AstFrame *fresult;
- AstMapping *fmap;
- AstPermMap *pm;
- const int *perm;
- int *ftarget_axes;
- int *ftemplate_axes;
- int *inperm;
- int *operm;
- int *outperm;
- int axis;
- int match;
- int nax1;
- int nax2;
- int naxr;
- int prax;
- int praxo;
- int result_naxes;
- int template_naxes;
-
-/* Initialise the returned values. */
- *template_axes = NULL;
- *target_axes = NULL;
- *map = NULL;
- *result = NULL;
- match = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return match;
-
-/* Get a pointer to the requested component Frame of the template CmpFrame. */
- ctemplate = icomp ? template->frame2 :template->frame1;
-
-/* Temporarily set the component Frame PreserveAxes value to that of the
- template CmpFrame. PreserveAxes determines whether astMatch returns a
- result Frame that looks like the template or the target. */
- if( astTestPreserveAxes( ctemplate ) ) {
- praxo = astGetPreserveAxes( ctemplate ) ? 1 : 0;
- } else {
- praxo = -1;
- }
- prax = astGetPreserveAxes( template );
- astSetPreserveAxes( ctemplate, prax );
-
-/* Attempt to find a match between the axes of the supplied target Frame
- and the axes of the selected component Frame in the template. */
- match = astMatch( ctemplate, target, &ftemplate_axes, &ftarget_axes, &fmap,
- &fresult );
-
-/* Restore the original PreserveAxes value in the component template
- Frame. */
- if( praxo == -1 ) {
- astClearPreserveAxes( ctemplate );
- } else {
- astSetPreserveAxes( ctemplate, praxo );
- }
-
-/* If a match was found, we need to adjust the Mapping, Frame and axis
- lists returned by the above call to astMatch so that they refer to the
- full template CmpFrame or target (depending on PreserveAxes). */
- if( match ) {
-
-/* Get the number of axes in each component Frame and the total number of
- axes in the template CmpFrame. */
- nax1 = astGetNaxes( template->frame1 );
- nax2 = astGetNaxes( template->frame2 );
- template_naxes = nax1 + nax2;
-
-/* Get the axis permutation array from the template and get its inverse.
- The "perm" array holds the internal axis index at each external axis
- index. The "operm" array holds the external axis index at each
- internal axis index. */
- perm = astGetPerm( template );
- operm = astMalloc( sizeof( int )*(size_t)template_naxes );
- if( astOK) {
- for( axis = 0; axis < template_naxes; axis++ ) {
- operm[ perm[ axis ] ] = axis;
- }
-
-/* The PreserveAxes attribute is used by astMatch to decide whether the
- result Frame should inherit its axes from the target frame or the
- template frame. First deal with cases where the order and count of axes
- in the result frame is the same as the target. */
- if( prax ) {
-
-/* Return the result Frame and Mapping unchanged since they already refer
- to the full target Frame used in the above call to astMatch. */
- *result = astClone( fresult );
- *map = astClone( fmap );
-
-/* Also return the lists of target axes unchanged. */
- *target_axes = ftarget_axes;
-
-/* The values in the template axes list refer to the component template
- Frame, but we want to return values that refer to the full template
- CmpFrame. This involve sup to two setps 1) for the second component
- Frame only, increase the axis numbers by the number of axes in the
- first component Frame, and 2) take account of any axis permutation in
- the template. First allocate memory for the returned list (which,
- because PreserveAxes is zero, will have an entry for each template axis). */
- *template_axes = astMalloc( sizeof( int )*template_naxes );
-
-/* Now, if the second component of the template has been selected, increment
- the template axes so that they give the internal axis indices of the
- second component Frame within the CmpFrame. The first component axes
- will be unchanged. */
- result_naxes = astGetNaxes( fresult );
- if( icomp ) {
- for( axis = 0; axis < result_naxes; axis++ ) {
- ftemplate_axes[ axis ] += nax1;
- }
- }
-
-/* Now copy the internal axis value into the returned array, modifying them
- in the process from internal to external axis ordering. */
- for( axis = 0; axis < result_naxes; axis++ ) {
- (*template_axes)[ axis ] = operm[ ftemplate_axes[ axis ] ];
- }
-
-/* If the order and count of axes in the result frame is the same as the
- template CmpFrame... */
- } else {
-
-/* We need to adjust the Mapping, Frame and axis lists returned by the
- above call to astMatch so that they refer to the supplied template
- CmpFrame rather than to the selected component Frame. Get the number
- of axes in the result Frame returned by astMatch (naxr) and the number
- in the result Frame returned by this function (result-naxes). */
- naxr = astGetNaxes( fresult );
- result_naxes = ( icomp ? nax1 : nax2 ) + naxr;
-
-/* Create the full result Frame by combining the partial result Frame
- returned by astMatch above with the other component Frame from the
- template. */
- if( icomp ) {
- fother = astCopy( template->frame1 );
- *result = (AstFrame *) astCmpFrame( fother, fresult, "", status );
- } else {
- fother = astCopy( template->frame2 );
- *result = (AstFrame *) astCmpFrame( fresult, fother, "", status );
- }
- fother = astAnnul( fother );
-
-/* Modify the Mapping returned by the above call to astMatch so that it
- produces positions within the full result Frame created above. */
- if( icomp ) {
- inperm = astMalloc( sizeof( int )*(size_t) naxr );
- outperm = astMalloc( sizeof( int )*(size_t) result_naxes );
- if( astOK ) {
- for( axis = 0; axis < nax1; axis++ ) outperm[ axis ] = -1;
- for( axis = 0; axis < naxr; axis++ ) {
- outperm[ axis + nax1 ] = axis;
- inperm[ axis ] = axis + nax1;
- }
- }
-
- } else {
- inperm = NULL;
- outperm = NULL;
- }
-
- pm = astPermMap( naxr, inperm, result_naxes, outperm, NULL, "", status );
- *map = (AstMapping *) astCmpMap( fmap, pm, 1, "", status );
-
-/* Free resources. */
- pm = astAnnul( pm );
- if( inperm ) inperm = astFree( inperm );
- if( outperm ) outperm = astFree( outperm );
-
-/* Allocate memory for the returned list of axes. */
- *template_axes = astMalloc( sizeof( int )*(size_t)result_naxes );
- *target_axes = astMalloc( sizeof( int )*(size_t)result_naxes );
-
-/* The axis indices returned by astMatch above will refer to the selected
- component Frame rather than the permuted (i.e. external) axis indices for
- the template CmpFrame. Change the template axes list so that they describe
- the axes in the full result Frame in terms of the external template axis
- numbering. This involves shifting the indices for the second component
- Frame to leave room for the axes of the first component Frame, and
- also permuting the axis indicies from internal to external order. */
- if( icomp ) {
- for( axis = 0; axis < nax1; axis++ ) {
- (*template_axes)[ axis ] = operm[ axis ];
- }
-
- for( ; axis < result_naxes; axis++ ) {
- (*template_axes)[ axis ] = operm[ nax1 + ftemplate_axes[ axis - nax1 ] ];
- }
-
- } else {
- for( axis = 0; axis < nax1; axis++ ) {
- (*template_axes)[ axis ] = operm[ ftemplate_axes[ axis ] ];
- }
-
- for( ; axis < result_naxes; axis++ ) {
- (*template_axes)[ axis ] = operm[ axis ];
- }
- }
-
-/* Change the target axes list so that they describe the axes in the
- full result Frame (this just means padding with -1 to indicate that
- the extra axes do not correspond to any axis in the target). */
- for( axis = 0; axis < naxr; axis++ ) {
- (*target_axes)[ axis ] = ftarget_axes[ axis ];
- }
-
- for( ; axis < result_naxes; axis++ ) {
- (*target_axes)[ axis ] = -1;
- }
-
-/* Free resources */
- ftarget_axes = astFree( ftarget_axes );
- }
- }
-
- operm = astFree( operm );
- ftemplate_axes = astFree( ftemplate_axes );
- fmap = astAnnul( fmap );
- fresult = astAnnul( fresult );
-
- }
-
-/* If an error occurred, free all allocated memory, annul the result
- Object pointers and clear all returned values. */
- if ( !astOK ) {
- *template_axes = astFree( *template_axes );
- *target_axes = astFree( *target_axes );
- *map = astAnnul( *map );
- *result = astAnnul( *result );
- match = 0;
- }
-
-/* Return the result. */
- return match;
-}
-
-static void Decompose( AstMapping *this_cmpframe, AstMapping **map1,
- AstMapping **map2, int *series, int *invert1,
- int *invert2, int *status ) {
-/*
-*
-* Name:
-* Decompose
-
-* Purpose:
-* Decompose a CmpFrame into two component CmpFrames.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void Decompose( AstMapping *this, AstMapping **map1,
-* AstMapping **map2, int *series,
-* int *invert1, int *invert2, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the protected astDecompose
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns pointers to two Mappings which, when applied
-* either in series or parallel, are equivalent to the supplied Mapping.
-*
-* Since the Frame class inherits from the Mapping class, Frames can
-* be considered as special types of Mappings and so this method can
-* be used to decompose either CmpMaps or CmpFrames.
-
-* Parameters:
-* this
-* Pointer to the Mapping.
-* map1
-* Address of a location to receive a pointer to first component
-* Mapping.
-* map2
-* Address of a location to receive a pointer to second component
-* Mapping.
-* series
-* Address of a location to receive a value indicating if the
-* component Mappings are applied in series or parallel. A non-zero
-* value means that the supplied Mapping is equivalent to applying map1
-* followed by map2 in series. A zero value means that the supplied
-* Mapping is equivalent to applying map1 to the lower numbered axes
-* and map2 to the higher numbered axes, in parallel.
-* invert1
-* The value of the Invert attribute to be used with map1.
-* invert2
-* The value of the Invert attribute to be used with map2.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - Any changes made to the component rames using the returned
-* pointers will be reflected in the supplied CmpFrame.
-
-*-
-*/
-
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to CmpMap structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpMap structure. */
- this = (AstCmpFrame *) this_cmpframe;
-
-/* The components Frames of a CmpFrame are considered to be parallel
- Mappings. */
- if( series ) *series = 0;
-
-/* The Frames are returned in their original order whether or not the
- CmpFrame has been inverted. */
- if( map1 ) *map1 = astClone( this->frame1 );
- if( map2 ) *map2 = astClone( this->frame2 );
-
-/* If the CmpFrame has been inverted, return inverted Invert flags. */
- if( astGetInvert( this ) ) {
- if( invert1 ) *invert1 = astGetInvert( this->frame1 ) ? 0 : 1;
- if( invert2 ) *invert2 = astGetInvert( this->frame2 ) ? 0 : 1;
-
-/* If the CmpFrame has not been inverted, return the current Invert flags. */
- } else {
- if( invert1 ) *invert1 = astGetInvert( this->frame1 );
- if( invert2 ) *invert2 = astGetInvert( this->frame2 );
- }
-}
-
-static double Distance( AstFrame *this_frame,
- const double point1[], const double point2[], int *status ) {
-/*
-* Name:
-* Distance
-
-* Purpose:
-* Calculate the distance between two points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* double Distance( AstFrame *this,
-* const double point1[], const double point2[], int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astDistance method
-* inherited from the Frame class).
-
-* Description:
-* This function finds the distance between two points whose
-* CmpFrame coordinates are given. The distance calculated is that
-* along the geodesic curve that joins the two points. This is
-* computed as the Cartesian sum of the distances between the
-* points when their coordinates are projected into each of the
-* CmpFrame's component Frames.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* point1
-* An array of double, with one element for each CmpFrame axis,
-* containing the coordinates of the first point.
-* point2
-* An array of double, with one element for each CmpFrame axis,
-* containing the coordinates of the second point.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The distance between the two points.
-
-* Notes:
-* - This function will return a "bad" result value (AST__BAD) if
-* any of the input coordinates has this value.
-* - A "bad" value will also be returned if this function is
-* invoked with the AST error status set or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to CmpFrame structure */
- const int *perm; /* Axis permutation array */
- double *p1; /* Pointer to permuted point1 coordinates */
- double *p2; /* Pointer to permuted point2 coordinates */
- double dist1; /* Distance in frame1 */
- double dist2; /* Distance in frame2 */
- double result; /* Value to return */
- int axis; /* Loop counter for axes */
- int naxes1; /* Number of axes in frame1 */
- int naxes; /* Number of axes in CmpFrame */
- int ok; /* No "bad" coordinates found? */
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Obtain a pointer to the CmpFrame's axis permutation array. */
- perm = astGetPerm( this );
-
-/* Obtain the number of axes in the CmpFrame and in the first
- component Frame. */
- naxes = astGetNaxes( this );
- naxes1 = astGetNaxes( this->frame1 );
-
-/* Allocate memory to hold the permuted coordinates of each point. */
- p1 = astMalloc( sizeof( double ) * (size_t) naxes );
- p2 = astMalloc( sizeof( double ) * (size_t) naxes );
- if ( astOK ) {
-
-/* Examine the coordinates of both points and note if any coordinate
- value is "bad". */
- ok = 1;
- for ( axis = 0; axis < naxes; axis++ ) {
- if ( ( point1[ axis ] == AST__BAD ) ||
- ( point2[ axis ] == AST__BAD ) ) {
- ok = 0;
- break;
-
-/* Permute good coordinates using the CmpFrame's axis permutation
- array to put them into the order required internally (i.e. by the
- two component Frames). */
- } else {
- p1[ perm[ axis ] ] = point1[ axis ];
- p2[ perm[ axis ] ] = point2[ axis ];
- }
- }
-
-/* If no "bad" coordinates were found, obtain the distance between the
- two points when their coordinates are projected into each component
- Frame. */
- if ( ok ) {
- dist1 = astDistance( this->frame1, p1, p2 );
- dist2 = astDistance( this->frame2, p1 + naxes1, p2 + naxes1 );
-
-/* If the distances found were OK, compute the distance between the
- two points as the Cartesian sum of the two component distances. */
- if ( astOK && ( dist1 != AST__BAD ) && ( dist2 != AST__BAD ) ) {
- result = sqrt( ( dist1 * dist1 ) + ( dist2 * dist2 ) );
- }
- }
- }
-
-/* Free the memory used for the permuted coordinates. */
- p1 = astFree( p1 );
- p2 = astFree( p2 );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
- return result;
-}
-
-static int Fields( AstFrame *this_frame, int axis, const char *fmt,
- const char *str, int maxfld, char **fields,
- int *nc, double *val, int *status ) {
-/*
-*+
-* Name:
-* astFields
-
-* Purpose:
-* Identify numerical fields within a formatted CmpFrame axis value.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* int astFields( AstFrame *this, int axis, const char *fmt,
-* const char *str, int maxfld, char **fields,
-* int *nc, double *val )
-
-* Class Membership:
-* CmpFrame member function (over-rides the protected astFields
-* method inherited from the Frame class).
-
-* Description:
-* This function identifies the numerical fields within a CmpFrame axis
-* value that has been formatted using astAxisFormat. It assumes that
-* the value was formatted using the supplied format string. It also
-* returns the equivalent floating point value.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* axis
-* The number of the CmpFrame axis for which the values have been
-* formatted (axis numbering starts at zero for the first axis).
-* fmt
-* Pointer to a constant null-terminated string containing the
-* format used when creating "str".
-* str
-* Pointer to a constant null-terminated string containing the
-* formatted value.
-* maxfld
-* The maximum number of fields to identify within "str".
-* fields
-* A pointer to an array of at least "maxfld" character pointers.
-* Each element is returned holding a pointer to the start of the
-* corresponding field in "str" (in the order in which they occur
-* within "str"), or NULL if no corresponding field can be found.
-* nc
-* A pointer to an array of at least "maxfld" integers. Each
-* element is returned holding the number of characters in the
-* corresponding field, or zero if no corresponding field can be
-* found.
-* val
-* Pointer to a location at which to store the value
-* equivalent to the returned field values. If this is NULL,
-* it is ignored.
-
-* Returned Value:
-* The number of fields succesfully identified and returned.
-
-* Notes:
-* - Leading and trailing spaces are ignored.
-* - If the formatted value is not consistent with the supplied format
-* string, then a value of zero will be returned, "fields" will be
-* returned holding NULLs, "nc" will be returned holding zeros, and
-* "val" is returned holding VAL__BAD.
-* - Fields are counted from the start of the formatted string. If the
-* string contains more than "maxfld" fields, then trailing fields are
-* ignored.
-* - If this function is invoked with the global error status set, or
-* if it should fail for any reason, then a value of zero will be returned
-* as the function value, and "fields", "nc" and "val" will be returned
-* holding their supplied values
-*-
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to CmpFrame structure */
- AstFrame *frame; /* Pointer to Frame containing axis */
- int naxes1; /* Number of axes in frame1 */
- int result; /* Result field count to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Validate and permute the axis index supplied. */
- axis = astValidateAxis( this, axis, "astFields" );
-
-/* Determine the number of axes in the first component Frame. */
- naxes1 = astGetNaxes( this->frame1 );
- if ( astOK ) {
-
-/* Decide which component Frame contains the axis and adjust the axis
- index if necessary. */
- frame = ( axis < naxes1 ) ? this->frame1 : this->frame2;
- axis = ( axis < naxes1 ) ? axis : axis - naxes1;
-
-/* Invoke the Frame's astFields method to perform the processing. */
- result = astFields( frame, axis, fmt, str, maxfld, fields,
- nc, val );
- }
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static const char *Format( AstFrame *this_frame, int axis, double value, int *status ) {
-/*
-* Name:
-* Format
-
-* Purpose:
-* Format a coordinate value for a CmpFrame axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* const char *Format( AstFrame *this, int axis, double value, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astFormat method
-* inherited from the Frame class).
-
-* Description:
-* This function returns a pointer to a string containing the
-* formatted (character) version of a coordinate value for a
-* CmpFrame axis. The formatting applied is that specified by a
-* previous invocation of the astSetFormat method (or a default
-* format appropriate to the axis in question).
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* axis
-* The number of the axis (zero-based) for which formatting is
-* to be performed.
-* value
-* The coordinate value to be formatted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a null-terminated string containing the formatted
-* value.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to CmpFrame structure */
- AstFrame *frame; /* Pointer to Frame containing axis */
- const char *result; /* Pointer value to return */
- int naxes1; /* Number of axes in frame1 */
- int set; /* Digits attribute set? */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Validate and permute the axis index supplied. */
- axis = astValidateAxis( this, axis, "astFormat" );
-
-/* Determine the number of axes in the first component Frame. */
- naxes1 = astGetNaxes( this->frame1 );
- if ( astOK ) {
-
-/* Decide which component Frame contains the axis and adjust the axis
- index if necessary. */
- frame = ( axis < naxes1 ) ? this->frame1 : this->frame2;
- axis = ( axis < naxes1 ) ? axis : axis - naxes1;
-
-/* Since the component Frame is "managed" by the enclosing CmpFrame,
- we next test if any Frame attributes which may affect the result
- are undefined (i.e. have not been explicitly set). If so, we
- over-ride them, giving them temporary values dictated by the
- CmpFrame. Only the Digits attribute is relevant here. */
- set = astTestDigits( frame );
- if ( !set ) astSetDigits( frame, astGetDigits( this ) );
-
-/* Invoke the Frame's astFormat method to format the value. */
- result = astFormat( frame, axis, value );
-
-/* Clear Frame attributes which were temporarily over-ridden. */
- if ( !set ) astClearDigits( frame );
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-static double Gap( AstFrame *this_frame, int axis, double gap, int *ntick, int *status ) {
-/*
-* Name:
-* Gap
-
-* Purpose:
-* Find a "nice" gap for tabulating CmpFrame axis values.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* double Gap( AstFrame *this, int axis, double gap, int *ntick, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the protected astGap method
-* inherited from the Frame class).
-
-* Description:
-* This function returns a gap size which produces a nicely spaced
-* series of formatted values for a CmpFrame axis, the returned gap
-* size being as close as possible to the supplied target gap
-* size. It also returns a convenient number of divisions into
-* which the gap can be divided.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* axis
-* The number of the axis (zero-based) for which a gap is to be found.
-* gap
-* The target gap size.
-* ntick
-* Address of an int in which to return a convenient number of
-* divisions into which the gap can be divided.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The nice gap size.
-
-* Notes:
-* - A value of zero is returned if the target gap size is zero.
-* - A negative gap size is returned if the supplied gap size is negative.
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to CmpFrame structure */
- AstFrame *frame; /* Pointer to Frame containing axis */
- double result; /* Result value to return */
- int naxes1; /* Number of axes in frame1 */
- int set; /* Digits attribute set? */
-
-/* Initialise. */
- result = 0.0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Validate and permute the axis index supplied. */
- axis = astValidateAxis( this, axis, "astGap" );
-
-/* Determine the number of axes in the first component Frame. */
- naxes1 = astGetNaxes( this->frame1 );
- if ( astOK ) {
-
-/* Decide which component Frame contains the axis and adjust the axis
- index if necessary. */
- frame = ( axis < naxes1 ) ? this->frame1 : this->frame2;
- axis = ( axis < naxes1 ) ? axis : axis - naxes1;
-
-/* Since the component Frame is "managed" by the enclosing CmpFrame,
- we next test if any Frame attributes which may affect the result
- are undefined (i.e. have not been explicitly set). If so, we
- over-ride them, giving them temporary values dictated by the
- CmpFrame. Only the Digits attribute is relevant here. */
- set = astTestDigits( frame );
- if ( !set ) astSetDigits( frame, astGetDigits( this ) );
-
-/* Invoke the Frame's astGap method to find the gap size. */
- result = astGap( frame, axis, gap, ntick );
-
-/* Clear Frame attributes which were temporarily over-ridden. */
- if ( !set ) astClearDigits( frame );
- }
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) result = 0.0;
-
-/* Return the result. */
- return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied CmpFrame,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to CmpFrame structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the CmpFrame structure. */
- this = (AstCmpFrame *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
-
- result += astGetObjSize( this->frame1 );
- result += astGetObjSize( this->frame2 );
- result += astTSizeOf( this->perm );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static AstSystemType GetAlignSystem( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetAlignSystem
-
-* Purpose:
-* Obtain the AlignSystem attribute for a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* AstSystemType GetAlignSystem( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astGetAlignSystem protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns the AlignSystem attribute for a CmpFrame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The AlignSystem value.
-
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to CmpFrame structure */
- AstSystemType result; /* Value to return */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* If a AlignSystem attribute has been set, invoke the parent method to obtain
- it. */
- if ( astTestAlignSystem( this ) ) {
- result = (*parent_getalignsystem)( this_frame, status );
-
-/* Otherwise, provide a suitable default. */
- } else {
- result = AST__COMP;
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "CmpFrame.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the protected astGetAttrib
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a CmpFrame, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - This function uses one-based axis numbering so that it is
-* suitable for external (public) use.
-* - The returned string pointer may point at memory allocated
-* within the CmpFrame, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the CmpFrame. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
- char buf1[80]; /* For for un-indexed attribute name */
- char buf2[80]; /* For for indexed attribute name */
- const char *result; /* Pointer value to return */
- AstFrame *pfrm; /* Pointer to primary Frame containing axis */
- int axis; /* Supplied (1-base) axis index */
- int paxis; /* Index of primary Frame axis */
- int len; /* Length of attrib string */
- int nc; /* Length of string used so far */
- int oldrep; /* Original error reporting state */
- int ok; /* Has the attribute been accessed succesfully? */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_object;
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Indicate we have not yet acessed the attribute succesfully. */
- ok = 0;
-
-/* First check the supplied attribute name against each of the attribute
- names defined by this class. In fact there is nothing to do here
- since the CmpFrame class currently defines no extra attributes, but
- this may change in the future. */
- if( 0 ) {
-
-/* If the attribute is not a CmpFrame specific attribute... */
- } else if( astOK ) {
-
-/* We want to allow easy access to the attributes of the component Frames.
- That is, we do not want it to be necessary to extract a Frame from
- its parent CmpFrame in order to access its attributes. For this reason
- we first temporarily switch off error reporting so that if an attempt
- to access the attribute fails, we can try a different approach. */
- oldrep = astReporting( 0 );
-
-/* If the attribute is qualified by an axis index, try accessing it as an
- attribute of the primary Frame containing the specified index. */
- if ( nc = 0,
- ( 2 == astSscanf( attrib, "%[^(](%d)%n", buf1, &axis, &nc ) )
- && ( nc >= len ) ) {
-
-/* Find the primary Frame containing the specified axis. */
- astPrimaryFrame( this, axis - 1, &pfrm, &paxis );
- if( astOK ) {
-
-/* Create a new attribute with the same name but with the axis index
- appropriate to the primary Frame. */
- sprintf( buf2, "%s(%d)", buf1, paxis + 1 );
-
-/* Attempt to access the attribute. */
- result = astGetAttrib( pfrm, buf2 );
-
-/* Indicate success. */
- if( astOK ) {
- ok = 1;
-
-/* Otherwise clear the status value, and try again without any axis index. */
- } else {
- astClearStatus;
- result = astGetAttrib( pfrm, buf1 );
-
-/* Indicate success, or clear the status value. */
- if( astOK ) {
- ok = 1;
- } else {
- astClearStatus;
- }
- }
-
-/* Free the primary frame pointer. */
- pfrm = astAnnul( pfrm );
- }
-
-/* If the attribute is not qualified by an axis index, try accessing it
- using the parent Frame method. */
- } else if( astOK ){
- result = (*parent_getattrib)( this_object, attrib, status );
-
-/* Indicate success. */
- if( astOK ) {
- ok = 1;
-
-/* Otherwise, clear the error condition so that we can try a different
- approach. */
- } else {
- astClearStatus;
-
-/* Next try accessing it using the primary Frame of each axis in turn.
- Loop round all axes, until one is found which defines the specified
- attribute. */
- for( axis = 0; axis < astGetNaxes( this ) && !ok; axis++ ) {
-
-/* Get the primary Frame containing this axis. */
- astPrimaryFrame( this, axis, &pfrm, &paxis );
-
-/* Attempt to access the attribute as an attribute of the primary Frame. */
- result = astGetAttrib( pfrm, attrib );
-
-/* Indicate success, or clear the status value. */
- if( astOK ) {
- ok = 1;
- } else {
- astClearStatus;
- }
-
-/* Free the primary Frame pointer. */
- pfrm = astAnnul( pfrm );
-
- }
- }
- }
-
-/* Re-instate the original error reporting state. */
- astReporting( oldrep );
-
- }
-
-/* Report an error if the attribute could not be accessed. */
- if( !ok && astOK ) {
- astError( AST__BADAT, "astGet: The %s given does not have an attribute "
- "called \"%s\".", status, astGetClass( this ), attrib );
- }
-
-/* Return the result. */
- return result;
-
-}
-
-static int GenAxisSelection( int naxes, int nselect, int axes[], int *status ) {
-/*
-* Name:
-* GenAxisSelection
-
-* Purpose:
-* Generate a sequence of axis selections.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* int GenAxisSelection( int naxes, int nselect, int axes[], int *status )
-
-* Class Membership:
-* CmpFrame member function.
-
-* Description:
-* This function generates a sequence of axis selections covering
-* all possible ways of selecting a specified number of axes from a
-* Frame.
-
-* Parameters:
-* naxes
-* The number of axes in the Frame.
-* nselect
-* The number of axes to be selected (between zero and "naxes").
-* axes
-* An array with "nselect" elements. On entry it should contain
-* the (zero-based) indices of the initial set of distinct axes
-* to be selected, in increasing order (initiallly this should
-* just be the sequence [0,1,...nselect-1]). On exit, these
-* indices will be updated to identify the next possible axis
-* selection.
-*
-* By invoking the function repeatedly, and passing this array
-* each time, all possible selections will be covered.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a new axis selection has been returned. Zero if all
-* possible selections have already been returned (in which case
-* the selection returned this time is not valid and should not be
-* used).
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- int i; /* Loop counter for axes */
- int iselect; /* Selection index */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Start with the first axis index and loop until the selection has
- been updated. */
- iselect = 0;
- while ( 1 ) {
-
-/* Increment the current axis index if it is the final one or it can
- be incremented without equalling the one which follows (this ensures
- the indices remain in increasing order). */
- if ( ( iselect == ( nselect - 1 ) ) ||
- ( axes[ iselect + 1 ] > ( axes[ iselect ] + 1 ) ) ) {
- axes[ iselect ]++;
-
-/* After incrementing an index, reset all previous indices to their
- starting values. */
- for ( i = 0; i < iselect; i++ ) axes[ i ] = i;
- break;
-
-/* If this axis index can't be incremented, consider the next one.
- Quit if we go beyond the end of the selection array. */
- } else if ( ++iselect >= nselect ) {
- break;
- }
- }
-
-/* Return a result to indicate if we've reached the final selection
- (when the final axis index goes out of range). */
- return ( nselect > 0 ) && ( axes[ nselect - 1 ] < naxes );
-}
-
-static AstAxis *GetAxis( AstFrame *this_frame, int axis, int *status ) {
-/*
-* Name:
-* GetAxis
-
-* Purpose:
-* Obtain a pointer to a specified Axis from a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* AstAxis *GetAxis( AstFrame *this, int axis, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astGetAxis method
-* inherited from the Frame class).
-
-* Description:
-* This function returns a pointer to the Axis object associated
-* with one of the axes of a CmpFrame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* axis
-* The number of the axis (zero-based) for which an Axis pointer
-* is required.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the requested Axis object.
-
-* Notes:
-* - The reference count of the requested Axis object will be
-* incremented by one to reflect the additional pointer returned by
-* this function.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Vaiables: */
- AstAxis *result; /* Pointer value to return */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
- int naxes1; /* Number of axes for frame1 */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Validate and permute the axis index supplied. */
- axis = astValidateAxis( this, axis, "astGetAxis" );
-
-/* Obtain the number of axes for frame1. */
- naxes1 = astGetNaxes( this->frame1 );
-
-/* Decide which Frame the axis belongs to and obtain the required
- Axis pointer. */
- if ( axis < naxes1 ) {
- result = astGetAxis( this->frame1, axis );
- } else {
- result = astGetAxis( this->frame2, axis - naxes1 );
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetDomain( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetDomain
-
-* Purpose:
-* Obtain a pointer to the Domain attribute string for a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* const char *GetDomain( AstFrame *this, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astGetDomain protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a pointer to the Domain attribute string
-* for a CmpFrame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a constant null-terminated string containing the
-* Domain value.
-
-* Notes:
-* - The returned pointer or the string it refers to may become
-* invalid following further invocation of this function or
-* modification of the CmpFrame.
-* - A NULL pointer is returned if this function is invoked with
-* the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstCmpFrame *this; /* Pointer to CmpFrame structure */
- char *dom1; /* Pointer to first sub domain */
- char *dom2; /* Pointer to second sub domain */
- const char *result; /* Pointer value to return */
- const char *t; /* Temporary pointer */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_frame);
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* If a Domain attribute string has been set, invoke the parent method
- to obtain a pointer to it. */
- if ( astTestDomain( this ) ) {
- result = (*parent_getdomain)( this_frame, status );
-
-/* Otherwise, provide a pointer to a suitable default string. */
- } else {
-
-/* Get the Domain value for the two component Frames and store new
- copies of them. This is necessary because the component Frames may
- themselves be CmpFrames, resulting in this function being called
- recursively and so causing the static "getdomain_buff" array to be used in
- multiple contexts. */
- t = astGetDomain( this->frame1 );
- dom1 = t ? astStore( NULL, t, strlen(t) + 1 ) : NULL;
- t = astGetDomain( this->frame2 );
- dom2 = t ? astStore( NULL, t, strlen(t) + 1 ) : NULL;
-
- if( dom2 ) {
- if( strlen( dom1 ) > 0 || strlen( dom2 ) > 0 ) {
- sprintf( (char *) getdomain_buff, "%s-%s", dom1, dom2 );
- result = getdomain_buff;
- } else {
- result = "CMP";
- }
- }
-
- dom1 = astFree( dom1 );
- dom2 = astFree( dom2 );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int GetMaxAxes( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetMaxAxes
-
-* Purpose:
-* Get a value for the MaxAxes attribute of a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* int GetMaxAxes( AstFrame *this, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astGetMaxAxes method
-* inherited from the Frame class).
-
-* Description:
-* This function returns a value for the MaxAxes attribute of a
-* CmpFrame. A large default value is supplied that is much larger
-* than the maximum likely number of axes in a Frame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The MaxAxes attribute value.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* If a value has been set explicitly for the CmpFrame, return it.
- Otherwise returned a large default value. */
- if( astTestMaxAxes( this ) ) {
- result = (*parent_getmaxaxes)( this_frame, status );
- } else {
- result = 1000000;
- }
-
-/* Return the result. */
- return result;
-}
-
-static int GetMinAxes( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetMinAxes
-
-* Purpose:
-* Get a value for the MinAxes attribute of a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* int GetMinAxes( AstFrame *this, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astGetMinAxes method
-* inherited from the Frame class).
-
-* Description:
-* This function returns a value for the MinAxes attribute of a
-* CmpFrame. A default value of zero is used.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The MinAxes attribute value.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* If a value has been set explicitly for the CmpFrame, return it.
- Otherwise returned a default value of zero. */
- if( astTestMinAxes( this ) ) {
- result = (*parent_getminaxes)( this_frame, status );
- } else {
- result = 0;
- }
-
-/* Return the result. */
- return result;
-}
-
-static double GetDut1( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetDut1
-
-* Purpose:
-* Get a value for the Dut1 attribute of a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* double GetDut1( AstFrame *this, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astGetDut1 method
-* inherited from the Frame class).
-
-* Description:
-* This function returns a value for the Dut1 attribute of a
-* CmpFrame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Dut1 attribute value.
-
-* Notes:
-* - A value of AST__BAD will be returned if this function is invoked
-* with the global error status set or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
- double result; /* Result value to return */
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* If an Dut1 attribute value has been set, invoke the parent method
- to obtain it. */
- if ( astTestDut1( this ) ) {
- result = (*parent_getdut1)( this_frame, status );
-
-/* Otherwise, if the Dut1 value is set in the first component Frame,
- return it. */
- } else if( astTestDut1( this->frame1 ) ){
- result = astGetDut1( this->frame1 );
-
-/* Otherwise, if the Dut1 value is set in the second component Frame,
- return it. */
- } else if( astTestDut1( this->frame2 ) ){
- result = astGetDut1( this->frame2 );
-
-/* Otherwise, return the default Dut1 value from the first component
- Frame. */
- } else {
- result = astGetDut1( this->frame1 );
- }
-
-/* Return the result. */
- return result;
-}
-
-static double GetEpoch( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetEpoch
-
-* Purpose:
-* Get a value for the Epoch attribute of a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* double GetEpoch( AstFrame *this, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astGetEpoch method
-* inherited from the Frame class).
-
-* Description:
-* This function returns a value for the Epoch attribute of a
-* CmpFrame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Epoch attribute value.
-
-* Notes:
-* - A value of AST__BAD will be returned if this function is invoked
-* with the global error status set or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
- double result; /* Result value to return */
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* If an Epoch attribute value has been set, invoke the parent method
- to obtain it. */
- if ( astTestEpoch( this ) ) {
- result = (*parent_getepoch)( this_frame, status );
-
-/* Otherwise, if the Epoch value is set in the first component Frame,
- return it. */
- } else if( astTestEpoch( this->frame1 ) ){
- result = astGetEpoch( this->frame1 );
-
-/* Otherwise, if the Epoch value is set in the second component Frame,
- return it. */
- } else if( astTestEpoch( this->frame2 ) ){
- result = astGetEpoch( this->frame2 );
-
-/* Otherwise, return the default Epoch value from the first component
- Frame. */
- } else {
- result = astGetEpoch( this->frame1 );
- }
-
-/* Return the result. */
- return result;
-}
-
-static double GetObsAlt( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetObsAlt
-
-* Purpose:
-* Get a value for the ObsAlt attribute of a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* double GetObsAlt( AstFrame *this, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astGetObsAlt method
-* inherited from the Frame class).
-
-* Description:
-* This function returns a value for the ObsAlt attribute of a
-* CmpFrame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The ObsAlt attribute value.
-
-* Notes:
-* - A value of AST__BAD will be returned if this function is invoked
-* with the global error status set or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
- double result; /* Result value to return */
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* If an ObsAlt attribute value has been set, invoke the parent method
- to obtain it. */
- if ( astTestObsAlt( this ) ) {
- result = (*parent_getobsalt)( this_frame, status );
-
-/* Otherwise, if the ObsAlt value is set in the first component Frame,
- return it. */
- } else if( astTestObsAlt( this->frame1 ) ){
- result = astGetObsAlt( this->frame1 );
-
-/* Otherwise, if the ObsAlt value is set in the second component Frame,
- return it. */
- } else if( astTestObsAlt( this->frame2 ) ){
- result = astGetObsAlt( this->frame2 );
-
-/* Otherwise, return the default ObsAlt value from the first component
- Frame. */
- } else {
- result = astGetObsAlt( this->frame1 );
- }
-
-/* Return the result. */
- return result;
-}
-
-static double GetObsLat( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetObsLat
-
-* Purpose:
-* Get a value for the ObsLat attribute of a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* double GetObsLat( AstFrame *this, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astGetObsLat method
-* inherited from the Frame class).
-
-* Description:
-* This function returns a value for the ObsLat attribute of a
-* CmpFrame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The ObsLat attribute value.
-
-* Notes:
-* - A value of AST__BAD will be returned if this function is invoked
-* with the global error status set or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
- double result; /* Result value to return */
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* If an ObsLat attribute value has been set, invoke the parent method
- to obtain it. */
- if ( astTestObsLat( this ) ) {
- result = (*parent_getobslat)( this_frame, status );
-
-/* Otherwise, if the ObsLat value is set in the first component Frame,
- return it. */
- } else if( astTestObsLat( this->frame1 ) ){
- result = astGetObsLat( this->frame1 );
-
-/* Otherwise, if the ObsLat value is set in the second component Frame,
- return it. */
- } else if( astTestObsLat( this->frame2 ) ){
- result = astGetObsLat( this->frame2 );
-
-/* Otherwise, return the default ObsLat value from the first component
- Frame. */
- } else {
- result = astGetObsLat( this->frame1 );
- }
-
-/* Return the result. */
- return result;
-}
-
-static double GetObsLon( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetObsLon
-
-* Purpose:
-* Get a value for the ObsLon attribute of a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* double GetObsLon( AstFrame *this, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astGetObsLon method
-* inherited from the Frame class).
-
-* Description:
-* This function returns a value for the ObsLon attribute of a
-* CmpFrame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The ObsLon attribute value.
-
-* Notes:
-* - A value of AST__BAD will be returned if this function is invoked
-* with the global error status set or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
- double result; /* Result value to return */
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* If an ObsLon attribute value has been set, invoke the parent method
- to obtain it. */
- if ( astTestObsLon( this ) ) {
- result = (*parent_getobslon)( this_frame, status );
-
-/* Otherwise, if the ObsLon value is set in the first component Frame,
- return it. */
- } else if( astTestObsLon( this->frame1 ) ){
- result = astGetObsLon( this->frame1 );
-
-/* Otherwise, if the ObsLon value is set in the second component Frame,
- return it. */
- } else if( astTestObsLon( this->frame2 ) ){
- result = astGetObsLon( this->frame2 );
-
-/* Otherwise, return the default ObsLon value from the first component
- Frame. */
- } else {
- result = astGetObsLon( this->frame1 );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int GetNaxes( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetNaxes
-
-* Purpose:
-* Determine how many axes a CmpFrame has.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* int GetNaxes( AstFrame *this, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astGetNaxes method
-* inherited from the Frame class).
-
-* Description:
-* This function returns the number of axes for a CmpFrame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The number of CmpFrame axes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
- int naxes1; /* Number of axes for frame1 */
- int naxes2; /* Number of axes for frame2 */
- int result; /* Number of CmpFrame axes */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Obtain the number of axes for each component Frame. */
- naxes1 = astGetNaxes( this->frame1 );
- naxes2 = astGetNaxes( this->frame2 );
-
-/* If OK, calculate the total number of axes. */
- if ( astOK ) result = naxes1 + naxes2;
-
-/* Return the result. */
- return result;
-}
-
-static const int *GetPerm( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetPerm
-
-* Purpose:
-* Access the axis permutation array for a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* const int *astGetPerm( AstFrame *this, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the protected astGetPerm
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a pointer to the axis permutation array
-* for a CmpFrame. This array constitutes a lookup-table that
-* converts between an axis number supplied externally and the
-* corresponding index in the CmpFrame's internal data.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the CmpFrame's axis permutation array (a constant
-* array of int). Each element of this contains the (zero-based)
-* internal axis index to be used in place of the external index
-* which is used to address the permutation array. If the CmpFrame
-* has zero axes, this pointer will be NULL.
-
-* Notes:
-* - This protected method is provided to assist class
-* implementations which need to implement axis-dependent
-* extensions to CmpFrame methods, and which therefore need to know
-* how a CmpFrames's external axis index is converted for internal
-* use.
-* - The pointer returned by this function gives direct access to
-* data internal to the CmpFrame object. It remains valid only so
-* long as the CmpFrame exists. The permutation array contents may
-* be modified by other functions which operate on the CmpFrame and
-* this may render the returned pointer invalid.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-
-* Implementation Notes:
-* - This function performs essentially the same operation as the
-* Frame member function which it over-rides. However, it returns a
-* pointer to the "perm" array held in the CmpFrame structure
-* (rather than the one in the parent Frame structure). This
-* duplication of the array is necessary because the one in the
-* Frame structure is of zero length, the number of axes in the
-* Frame structure having been set to zero to prevent unnecessary
-* allocation of Axis objects which are not needed by the CmpFrame.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Return a pointer to the axis permutation array. */
- return this->perm;
-}
-
-static AstSystemType GetSystem( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetSystem
-
-* Purpose:
-* Obtain the System attribute for a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* AstSystemType GetSystem( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astGetSystem protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns the System attribute for a CmpFrame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The System value.
-
-* Notes:
-* - AST__BADSYSTEM is returned if this function is invoked with
-* the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to CmpFrame structure */
- AstSystemType result; /* Value to return */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* If a System attribute has been set, invoke the parent method to obtain
- it. */
- if ( astTestSystem( this ) ) {
- result = (*parent_getsystem)( this_frame, status );
-
-/* Otherwise, provide a suitable default. */
- } else {
- result = AST__COMP;
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetTitle( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetTitle
-
-* Purpose:
-* Obtain a pointer to the Title attribute string for a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* const char *GetTitle( AstFrame *this, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astGetTitle protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a pointer to the Title attribute string for
-* a CmpFrame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a constant null-terminated string containing the
-* Title value.
-
-* Notes:
-* - The returned pointer or the string it refers to may become
-* invalid following further invocation of this function or
-* modification of the CmpFrame.
-* - A NULL pointer is returned if this function is invoked with
-* the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstCmpFrame *this; /* Pointer to CmpFrame structure */
- const char *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_frame);
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* If a Title attribute string has been set, invoke the parent method
- to obtain a pointer to it. */
- if ( astTestTitle( this ) ) {
- result = (*parent_gettitle)( this_frame, status );
-
-/* Otherwise, create a suitable default string and return a pointer to
- this. */
- } else {
- (void) sprintf( gettitle_buff, "%d-d compound coordinate system",
- astGetNaxes( this ) );
- if ( astOK ) result = gettitle_buff;
- }
-
-/* Return the result. */
- return result;
-
-}
-
-static int GetUseDefs( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetUseDefs
-
-* Purpose:
-* Get a value for the UseDefs attribute of a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* int GetUseDefs( AstCmpFrame *this, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astGetUseDefs method
-* inherited from the Frame class).
-
-* Description:
-* This function returns a value for the UseDefs attribute of a
-* CmpFrame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The UseDefs attribute value.
-
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 1;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_object;
-
-/* If an UseDefs attribute value has been set, invoke the parent method
- to obtain it. */
- if ( astTestUseDefs( this ) ) {
- result = (*parent_getusedefs)( this_object, status );
-
-/* Otherwise, use the UseDefs value in the first component Frame as the
- default. */
- } else {
- result = (*parent_getusedefs)( (AstObject *) this->frame1, status );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int GoodPerm( int ncoord_in, const int inperm[],
- int ncoord_out, const int outperm[], int *status ) {
-/*
-* Name:
-* GoodPerm
-
-* Purpose:
-* Test if a PermMap will be non-null.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* int GoodPerm( int ncoord_in, const int inperm[],
-* int ncoord_out, const int outperm[], int *status )
-
-* Class Membership:
-* CmpFrame member function.
-
-* Description:
-* This function tests if a pair of permutation arrays will, when
-* used to create a PermMap, result in a PermMap which has a
-* non-null effect (i.e. one which is not simply equivalent to a
-* unit Mapping).
-
-* Parameters:
-* ncoord_in
-* The number of input coordinates for the PermMap.
-* inperm
-* The input permutation array for the PermMap (with "ncoord_in"
-* elements).
-* ncoord_out
-* The number of output coordinates for the PermMap.
-* outperm
-* The output permutation array for the PermMap (with
-* "ncoord_out" elements).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero if the PermMap would be equivalent to a unit Mapping,
-* otherwise one.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- int axis; /* Loop counter for axes */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* First test if the number of input and output coordinates are
- different. */
- result = ( ncoord_in != ncoord_out );
-
-/* If they are not, examine the contents of the "inperm" array. */
- if ( !result ) {
- for ( axis = 0; axis < ncoord_in; axis++ ) {
-
-/* We have a non-null Mapping if any element of this array selects an
- output axis with a different index to the input axis (or selects an
- invalid axis or a constant). */
- if ( inperm[ axis ] != axis ) {
- result = 1;
- break;
- }
- }
- }
-
-/* If the Mapping still appears to be null, also examine the "outperm"
- array in the same way. */
- if ( !result ) {
- for ( axis = 0; axis < ncoord_out; axis++ ) {
- if ( outperm[ axis ] != axis ) {
- result = 1;
- break;
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-void astInitCmpFrameVtab_( AstCmpFrameVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitCmpFrameVtab
-
-* Purpose:
-* Initialise a virtual function table for a CmpFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void astInitCmpFrameVtab( AstCmpFrameVtab *vtab, const char *name )
-
-* Class Membership:
-* CmpFrame vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the CmpFrame class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstFrameVtab *frame; /* Pointer to Frame component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitFrameVtab( (AstFrameVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsACmpFrame) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstFrameVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- frame = (AstFrameVtab *) vtab;
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
- mapping = (AstMappingVtab *) vtab;
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
- parent_getusedefs = object->GetUseDefs;
- object->GetUseDefs = GetUseDefs;
-
-#if defined(THREAD_SAFE)
- parent_managelock = object->ManageLock;
- object->ManageLock = ManageLock;
-#endif
-
- mapping->RemoveRegions = RemoveRegions;
- mapping->Simplify = Simplify;
- mapping->Transform = Transform;
-
- parent_getdomain = frame->GetDomain;
- frame->GetDomain = GetDomain;
-
- parent_gettitle = frame->GetTitle;
- frame->GetTitle = GetTitle;
-
- parent_getepoch = frame->GetEpoch;
- frame->GetEpoch = GetEpoch;
-
- parent_setepoch = frame->SetEpoch;
- frame->SetEpoch = SetEpoch;
-
- parent_clearepoch = frame->ClearEpoch;
- frame->ClearEpoch = ClearEpoch;
-
- parent_getdut1 = frame->GetDut1;
- frame->GetDut1 = GetDut1;
-
- parent_setdut1 = frame->SetDut1;
- frame->SetDut1 = SetDut1;
-
- parent_cleardut1 = frame->ClearDut1;
- frame->ClearDut1 = ClearDut1;
-
- parent_getobslon = frame->GetObsLon;
- frame->GetObsLon = GetObsLon;
-
- parent_setobslon = frame->SetObsLon;
- frame->SetObsLon = SetObsLon;
-
- parent_clearobslon = frame->ClearObsLon;
- frame->ClearObsLon = ClearObsLon;
-
- parent_getobslat = frame->GetObsLat;
- frame->GetObsLat = GetObsLat;
-
- parent_setobslat = frame->SetObsLat;
- frame->SetObsLat = SetObsLat;
-
- parent_clearobslat = frame->ClearObsLat;
- frame->ClearObsLat = ClearObsLat;
-
- parent_getobsalt = frame->GetObsAlt;
- frame->GetObsAlt = GetObsAlt;
-
- parent_setobsalt = frame->SetObsAlt;
- frame->SetObsAlt = SetObsAlt;
-
- parent_clearobsalt = frame->ClearObsAlt;
- frame->ClearObsAlt = ClearObsAlt;
-
- parent_angle = frame->Angle;
- frame->Angle = Angle;
-
- parent_getsystem = frame->GetSystem;
- frame->GetSystem = GetSystem;
-
- parent_getalignsystem = frame->GetAlignSystem;
- frame->GetAlignSystem = GetAlignSystem;
-
- parent_clearalignsystem = frame->ClearAlignSystem;
- frame->ClearAlignSystem = ClearAlignSystem;
-
- parent_overlay = frame->Overlay;
- frame->Overlay = Overlay;
-
- parent_setactiveunit = frame->SetActiveUnit;
- frame->SetActiveUnit = SetActiveUnit;
-
- parent_getactiveunit = frame->GetActiveUnit;
- frame->GetActiveUnit = GetActiveUnit;
-
- parent_setframeflags = frame->SetFrameFlags;
- frame->SetFrameFlags = SetFrameFlags;
-
- parent_getmaxaxes = frame->GetMaxAxes;
- frame->GetMaxAxes = GetMaxAxes;
-
- parent_getminaxes = frame->GetMinAxes;
- frame->GetMinAxes = GetMinAxes;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- object->Cast = Cast;
- mapping->Decompose = Decompose;
- frame->Abbrev = Abbrev;
- frame->ClearDirection = ClearDirection;
- frame->ClearFormat = ClearFormat;
- frame->ClearLabel = ClearLabel;
- frame->ClearSymbol = ClearSymbol;
- frame->ClearUnit = ClearUnit;
- frame->Distance = Distance;
- frame->Fields = Fields;
- frame->Format = Format;
- frame->Gap = Gap;
- frame->GetAxis = GetAxis;
- frame->GetDirection = GetDirection;
- frame->GetFormat = GetFormat;
- frame->GetLabel = GetLabel;
- frame->GetNaxes = GetNaxes;
- frame->GetPerm = GetPerm;
- frame->GetSymbol = GetSymbol;
- frame->GetUnit = GetUnit;
- frame->IsUnitFrame = IsUnitFrame;
- frame->Match = Match;
- frame->Norm = Norm;
- frame->NormBox = NormBox;
- frame->Offset = Offset;
- frame->PermAxes = PermAxes;
- frame->PrimaryFrame = PrimaryFrame;
- frame->Resolve = Resolve;
- frame->ResolvePoints = ResolvePoints;
- frame->SetAxis = SetAxis;
- frame->SetDirection = SetDirection;
- frame->SetFormat = SetFormat;
- frame->SetLabel = SetLabel;
- frame->SetSymbol = SetSymbol;
- frame->SetUnit = SetUnit;
- frame->SubFrame = SubFrame;
- frame->TestDirection = TestDirection;
- frame->TestFormat = TestFormat;
- frame->TestLabel = TestLabel;
- frame->TestSymbol = TestSymbol;
- frame->TestUnit = TestUnit;
- frame->Unformat = Unformat;
- frame->ValidateSystem = ValidateSystem;
- frame->SystemString = SystemString;
- frame->SystemCode = SystemCode;
- frame->MatchAxesX = MatchAxesX;
-
-/* Declare the copy constructor, destructor and class dump
- function. */
- astSetCopy( vtab, Copy );
- astSetDelete( vtab, Delete );
- astSetDump( vtab, Dump, "CmpFrame",
- "Compound coordinate system description" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static int IsUnitFrame( AstFrame *this_frame, int *status ){
-/*
-* Name:
-* IsUnitFrame
-
-* Purpose:
-* Is this Frame equivalent to a UnitMap?
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* int IsUnitFrame( AstFrame *this, int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astIsUnitFrame
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a flag indicating if the supplied Frame is
-* equivalent to a UnitMap when treated as a Mapping (note, the Frame
-* class inherits from Mapping and therefore every Frame is also a Mapping).
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if the supplied Frame is equivalent to
-* a UnitMap when treated as a Mapping.
-
-*-
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Return the result. */
- return astIsUnitFrame( this->frame1 ) && astIsUnitFrame( this->frame2 );
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra,
- AstObject **fail, int *status ) {
-/*
-* Name:
-* ManageLock
-
-* Purpose:
-* Manage the thread lock on an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *ManageLock( AstObject *this, int mode, int extra,
-* AstObject **fail, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astManageLock protected
-* method inherited from the parent class).
-
-* Description:
-* This function manages the thread lock on the supplied Object. The
-* lock can be locked, unlocked or checked by this function as
-* deteremined by parameter "mode". See astLock for details of the way
-* these locks are used.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* mode
-* An integer flag indicating what the function should do:
-*
-* AST__LOCK: Lock the Object for exclusive use by the calling
-* thread. The "extra" value indicates what should be done if the
-* Object is already locked (wait or report an error - see astLock).
-*
-* AST__UNLOCK: Unlock the Object for use by other threads.
-*
-* AST__CHECKLOCK: Check that the object is locked for use by the
-* calling thread (report an error if not).
-* extra
-* Extra mode-specific information.
-* fail
-* If a non-zero function value is returned, a pointer to the
-* Object that caused the failure is returned at "*fail". This may
-* be "this" or it may be an Object contained within "this". Note,
-* the Object's reference count is not incremented, and so the
-* returned pointer should not be annulled. A NULL pointer is
-* returned if this function returns a value of zero.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A local status value:
-* 0 - Success
-* 1 - Could not lock or unlock the object because it was already
-* locked by another thread.
-* 2 - Failed to lock a POSIX mutex
-* 3 - Failed to unlock a POSIX mutex
-* 4 - Bad "mode" value supplied.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to CmpFrame structure */
- int result; /* Returned status value */
-
-/* Initialise */
- result = 0;
-
-/* Check the supplied pointer is not NULL. */
- if( !this_object ) return result;
-
-/* Obtain a pointers to the CmpFrame structure. */
- this = (AstCmpFrame *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
- if( !result ) result = (*parent_managelock)( this_object, mode, extra,
- fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
- the supplied Object. */
- if( !result ) result = astManageLock( this->frame1, mode, extra, fail );
- if( !result ) result = astManageLock( this->frame2, mode, extra, fail );
-
- return result;
-
-}
-#endif
-
-static int Match( AstFrame *template_frame, AstFrame *target,
- int **template_axes, int **target_axes,
- AstMapping **map, AstFrame **result, int *status ) {
-/*
-* Name:
-* Match
-
-* Purpose:
-* Determine if conversion is possible between two coordinate systems.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* int Match( AstFrame *template, AstFrame *target,
-* int **template_axes, int **target_axes,
-* AstMapping **map, AstFrame **result, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the protected astMatch
-* method inherited from the Frame class).
-
-* Description:
-* This function matches a "template" CmpFrame to a "target" Frame
-* and determines whether it is possible to convert coordinates
-* between them. If it is, a Mapping that performs the
-* transformation is returned along with a new Frame that describes
-* the coordinate system that results when this Mapping is applied
-* to the "target" coordinate system. In addition, information is
-* returned to allow the axes in this "result" Frame to be
-* associated with the corresponding axes in the "target" Frame and
-* "template" CmpFrame from which they are derived.
-
-* Parameters:
-* template
-* Pointer to the template CmpFrame. This describes the
-* coordinate system (or set of possible coordinate systems)
-* into which we wish to convert our coordinates.
-* target
-* Pointer to the target Frame. This describes the coordinate
-* system in which we already have coordinates.
-* template_axes
-* Address of a location where a pointer to int will be returned
-* if the requested coordinate conversion is possible. This
-* pointer will point at a dynamically allocated array of
-* integers with one element for each axis of the "result" Frame
-* (see below). It must be freed by the caller (using astFree)
-* when no longer required.
-*
-* For each axis in the result Frame, the corresponding element
-* of this array will return the (zero-based) index of the
-* template CmpFrame axis from which it is derived. If it is not
-* derived from any template axis, a value of -1 will be
-* returned instead.
-* target_axes
-* Address of a location where a pointer to int will be returned
-* if the requested coordinate conversion is possible. This
-* pointer will point at a dynamically allocated array of
-* integers with one element for each axis of the "result" Frame
-* (see below). It must be freed by the caller (using astFree)
-* when no longer required.
-*
-* For each axis in the result Frame, the corresponding element
-* of this array will return the (zero-based) index of the
-* target Frame axis from which it is derived. If it is not
-* derived from any target axis, a value of -1 will be returned
-* instead.
-* map
-* Address of a location where a pointer to a new Mapping will
-* be returned if the requested coordinate conversion is
-* possible. If returned, the forward transformation of this
-* Mapping may be used to convert coordinates between the
-* "target" Frame and the "result" Frame (see below) and the
-* inverse transformation will convert in the opposite
-* direction.
-* result
-* Address of a location where a pointer to a new Frame will be
-* returned if the requested coordinate conversion is
-* possible. If returned, this Frame describes the coordinate
-* system that results from applying the returned Mapping
-* (above) to the "target" coordinate system. In general, this
-* Frame will combine attributes from (and will therefore be
-* more specific than) both the target Frame and the template
-* CmpFrame. In particular, when the template allows the
-* possibility of transformaing to any one of a set of
-* alternative coordinate systems, the "result" Frame will
-* indicate which of the alternatives was used.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if the requested coordinate
-* conversion is possible. Otherwise zero is returned (this will
-* not in itself result in an error condition).
-
-* Notes:
-* - By default, the "result" Frame will have its number of axes
-* and axis order determined by the "template" CmpFrame. However,
-* if the PreserveAxes attribute of the template CmpFrame is
-* non-zero, then the axis count and axis order of the "target"
-* Frame will be used instead.
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstCmpFrame *template; /* Pointer to template CmpFrame structure */
- char *template_domain; /* Pointer to copy of template domain */
- const char *ptr; /* Pointer to domain string */
- const char *target_domain; /* Pointer to target domain string */
- int *axes1; /* Pointer to axis selection 1 */
- int *axes2; /* Pointer to axis selection 2 */
- int *used; /* Pointer to flags array */
- int axis2; /* Index for axis selection 2 */
- int axis; /* Index for axis arrays */
- int last_target; /* Last target axis association */
- int last_template; /* Last template axis associateion */
- int match; /* Match obtained (returned result)? */
- int maxax1; /* MaxAxes attribute for component 1 */
- int maxax2; /* MaxAxes attribute for component 2 */
- int maxax; /* Max axes that can be matched by template */
- int minax1; /* MinAxes attribute for component 1 */
- int minax2; /* MinAxes attribute for component 2 */
- int minax; /* Min axes that can be matched by template */
- int naxes1; /* Number of axes assigned to component 1 */
- int naxes2; /* Number of axes assigned to component 2 */
- int naxes; /* Total number of target axes */
- int naxes_max1; /* First estimate of naxes_max */
- int naxes_max2; /* Second estimate of naxes_max */
- int naxes_max; /* Max number of axes to match component 1 */
- int naxes_min1; /* First estimate of naxes_min */
- int naxes_min2; /* Second estimate of naxes_min */
- int naxes_min; /* Min number of axes to match component 1 */
- int permute; /* Permute attribute for template */
- int result_naxes; /* Number of result Frame axes */
-
-/* Initialise the returned values. */
- *template_axes = NULL;
- *target_axes = NULL;
- *map = NULL;
- *result = NULL;
- match = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return match;
-
-/* Obtain a pointer to the template CmpFrame structure. */
- template = (AstCmpFrame *) template_frame;
-
-/* Obtain the maximum number of axes that the template CmpFrame, and each
- component Frame of the template CmpFrame, can match. If the MaxAxes
- attribute is set for the template, use it and assume that each
- component Frame can match any number of axes. */
- if( astTestMaxAxes( template ) ) {
- maxax = astGetMaxAxes( template );
- maxax1 = 100000;
- maxax2 = 100000;
- } else {
- maxax1 = astGetMaxAxes( template->frame1 );
- maxax2 = astGetMaxAxes( template->frame2 );
- maxax = maxax1 + maxax2;
- }
-
-/* Do the same for the minimum number of axes that can be matched by the
- template CmpFrame. */
- if( astTestMinAxes( template ) ) {
- minax = astGetMinAxes( template );
- minax1 = 1;
- minax2 = 1;
- } else {
- minax1 = astGetMinAxes( template->frame1 );
- minax2 = astGetMinAxes( template->frame2 );
- minax = minax1 + minax2;
- }
-
-/* Obtain the number of axes in the target Frame and test to see if it
- is possible for the template to match it on the basis of axis
- counts. */
- naxes = astGetNaxes( target );
- match = ( naxes >= minax && naxes <= maxax );
-
-/* The next requirement is that all the frames have some axes. */
- if( naxes == 0 || maxax1 == 0 || maxax2 == 0 ) match = 0;
-
-/* The next requirement is that if the template CmpFrame has its
- Domain attribute defined, then the target Frame must also have the
- same Domain (although it need not be set - the default will
- do). First check if the template has a domain. */
- if ( astOK && match ) {
- if ( astTestDomain( template ) ) {
-
-/* Obtain a pointer to the template domain. Then allocate memory and
- make a copy of it (this is necessary as we will next inquire the
- domain of the target and may over-write the buffer holding the
- template's domain). */
- ptr = astGetDomain( template );
- if ( astOK ) {
- template_domain = astStore( NULL, ptr,
- strlen( ptr ) + (size_t) 1 );
-
-/* Obtain a pointer to the target domain. */
- target_domain = astGetDomain( target );
-
-/* Compare the domain strings for equality. Then free the memory
- allocated above. */
- match = astOK && !strcmp( template_domain, target_domain );
- template_domain = astFree( template_domain );
- }
- }
- }
-
-/* If a match still appears possible, determine the minimum number of
- target axes that will have to match the first component Frame of
- the template CmpFrame. */
- if ( astOK && match ) {
- naxes_min1 = minax1;
- naxes_min2 = naxes - maxax2;
- naxes_min = ( naxes_min1 > naxes_min2 ) ? naxes_min1 : naxes_min2;
-
-/* Also determine the maximum number of target axes that may match
- this component of the template. */
- naxes_max1 = maxax1;
- naxes_max2 = naxes - minax2;
- naxes_max = ( naxes_max1 < naxes_max2 ) ? naxes_max1 : naxes_max2;
-
-/* No match possible if the number of axes are inconsistent. */
- if( naxes_min > naxes_max ) match = 0;
- }
-
-/* If a match is still possible, allocate workspace. */
- if( match ) {
- axes1 = astMalloc( sizeof( int ) * (size_t) naxes );
- axes2 = astMalloc( sizeof( int ) * (size_t) naxes );
- used = astMalloc( sizeof( int ) * (size_t) naxes );
-
-/* Obtain the value of the template's Permute attribute. */
- permute = astGetPermute( template );
- if ( astOK ) {
-
-/* Loop to consider all possible choices of the number of template
- axes that might match the first component Frame of the template,
- and derive the corresponding number of axes that must match the
- second component at the same time. */
- for ( naxes1 = naxes_max; naxes1 >= naxes_min; naxes1-- ) {
- naxes2 = naxes - naxes1;
-
-/* Initialise the selection of target axes that we will attempt to
- match against the first template component (to [0,1,2,...]). */
- for ( axis = 0; axis < naxes1; axis++ ) axes1[ axis ] = axis;
-
-/* Loop to consider all possible selections with this number of axes,
- until a match is found. */
- while ( 1 ) {
-
-/* Initialise an array of flags to zero for each target axis. Then set
- the flag to 1 for each axis which is in the first selection.*/
- for ( axis = 0; axis < naxes; axis++ ) used[ axis ] = 0;
- for( axis = 0; axis < naxes1; axis++ ) {
- used[ axes1[ axis ] ] = 1;
- }
-
-/* Generate the second selection by including all target axes that are
- not in the first selection. */
- axis2 = 0;
- for ( axis = 0; axis < naxes; axis++ ) {
- if ( !used[ axis ] ) axes2[ axis2++ ] = axis;
- }
-
-/* Attempt to match the target axes partitioned in this way to the two
- template components. */
- match = PartMatch( template, target,
- naxes1, axes1, naxes2, axes2,
- template_axes, target_axes, map, result, status );
-
-/* If a match was obtained but the template's Permute attribute is zero,
- then we must check to see if the match involves permuting the target
- axes. */
- if ( astOK && match && !permute ) {
-
-/* Obtain the number of result Frame axes. */
- result_naxes = astGetNaxes( *result );
-
-/* Loop to check the target and template axis associations for all the
- result Frame axes. The match will only be accepted if both of these
- are monotonically increasing (indicating no axis permutation) after
- allowing for any absent associations . */
- last_template = -1;
- last_target = -1;
- for ( axis = 0; axis < result_naxes; axis++ ) {
-
-/* Check the template axis association against the previous value,
- omitting any axes witout valid associations. */
- if ( ( *template_axes )[ axis ] != -1 ) {
- if ( ( *template_axes )[ axis ] <= last_template ) {
- match = 0;
- break;
-
-/* Update the previous association value. */
- } else {
- last_template = ( *template_axes )[ axis ];
- }
- }
-
-/* Repeat this process for the target axis associations. */
- if ( ( *target_axes )[ axis ] != -1 ) {
- if ( ( *target_axes )[ axis ] <= last_target ) {
- match = 0;
- break;
- } else {
- last_target = ( *target_axes )[ axis ];
- }
- }
- }
-
-/* If the match was rejected because it involves an axis permutation,
- then free the allocated memory and annul the Object pointers
- associated with the match. */
- if ( !match ) {
- *template_axes = astFree( *template_axes );
- *target_axes = astFree( *target_axes );
- *map = astAnnul( *map );
- *result = astAnnul( *result );
- }
- }
-
-/* If an error occurred or a match was found, quit searching,
- otherwise generate the next axis selection and try that
- instead. Quit if there are no more selections to try. */
- if ( !astOK || match ||
- !GenAxisSelection( naxes, naxes1, axes1, status ) ) break;
- }
-
-/* Quit the outer loop if an error occurs or a match is found. */
- if ( !astOK || match ) break;
- }
- }
-
-/* Free the workspace arrays. */
- axes1 = astFree( axes1 );
- axes2 = astFree( axes2 );
- used = astFree( used );
- }
-
-/* If the target did not match the supplied template CmpFrame, see if it
- will match either of the component Frames. First try matching it against
- the first component Frame. */
- if( !match ) match = ComponentMatch( template, target, 0, template_axes,
- target_axes, map, result, status );
-
-/* If we still dont have a mcth, try matching it against the second
- component Frame. */
- if( !match ) match = ComponentMatch( template, target, 1, template_axes,
- target_axes, map, result, status );
-
-/* If an error occurred, free all allocated memory, annul the result
- Object pointers and clear all returned values. */
- if ( !astOK ) {
- *template_axes = astFree( *template_axes );
- *target_axes = astFree( *target_axes );
- *map = astAnnul( *map );
- *result = astAnnul( *result );
- match = 0;
- }
-
-/* Return the result. */
- return match;
-}
-
-static void MatchAxesX( AstFrame *frm2_frame, AstFrame *frm1, int *axes,
- int *status ) {
-/*
-* Name:
-* MatchAxesX
-
-* Purpose:
-* Find any corresponding axes in two Frames.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void MatchAxesX( AstFrame *frm2, AstFrame *frm1, int *axes )
-* int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the protected astMatchAxesX
-* method inherited from the Frame class).
-
-* Description:
-* This function looks for corresponding axes within two supplied
-* Frames. An array of integers is returned that contains an element
-* for each axis in the second supplied Frame. An element in this array
-* will be set to zero if the associated axis within the second Frame
-* has no corresponding axis within the first Frame. Otherwise, it
-* will be set to the index (a non-zero positive integer) of the
-* corresponding axis within the first supplied Frame.
-
-* Parameters:
-* frm2
-* Pointer to the second Frame.
-* frm1
-* Pointer to the first Frame.
-* axes
-* Pointer to an integer array in which to return the indices of
-* the axes (within the first Frame) that correspond to each axis
-* within the second Frame. Axis indices start at 1. A value of zero
-* will be stored in the returned array for each axis in the second
-* Frame that has no corresponding axis in the first Frame.
-*
-* The number of elements in this array must be greater than or
-* equal to the number of axes in the second Frame.
-* status
-* Pointer to inherited status value.
-
-* Notes:
-* - Corresponding axes are identified by the fact that a Mapping
-* can be found between them using astFindFrame or astConvert. Thus,
-* "corresponding axes" are not necessarily identical. For instance,
-* SkyFrame axes in two Frames will match even if they describe
-* different celestial coordinate systems
-*/
-
-/* Local Variables: */
- AstCmpFrame *frm2;
- const int *perm;
- int *work;
- int i;
- int nax2;
- int nax1;
- int nax;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the CmpFrame. */
- frm2 = (AstCmpFrame *) frm2_frame;
-
-/* Get the number of axes in the two component Frames, and the total
- number of axes in the CmpFrame. */
- nax2 = astGetNaxes( frm2->frame1 );
- nax1 = astGetNaxes( frm2->frame2 );
- nax = nax2 + nax1;
-
-/* Allocate a work array to hold the unpermuted axis indices */
- work = astMalloc( sizeof( int )*nax );
- if( astOK ) {
-
-/* Use the astMatchAxes method to match axes in the first component Frame
- within CmpFrame "frm2". Write the associated axis indices into the first
- part of the work array. */
- astMatchAxes( frm1, frm2->frame1, work );
-
-/* Use the MatchAxes method to match axes in the second component
- Frame. Write the associated axis indices into the work array
- following the end of the values already in there. */
- astMatchAxes( frm1, frm2->frame2, work + nax2 );
-
-/* Obtain a pointer to the CmpFrame's axis permutation array. The index
- into "perm" represents the external axis index, and the value held in
- each element of "perm" represents the corresponding internal axis index. */
- perm = astGetPerm( frm2 );
- if( astOK ) {
-
-/* Copy the frm2 axis indices from the work array into the returned "axes"
- array, permuting their order into the external axis order of the
- CmpFrame. */
- for( i = 0; i < nax; i++ ) axes[ i ] = work[ perm[ i ] ];
- }
-
-/* Free resources */
- work = astFree( work );
- }
-}
-
-static void Norm( AstFrame *this_frame, double value[], int *status ) {
-/*
-* Name:
-* Norm
-
-* Purpose:
-* Normalise a set of CmpFrame coordinates.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void Norm( AstAxis *this, double value[], int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astNorm method
-* inherited from the Frame class).
-
-* Description:
-* This function converts a set of CmpFrame coordinate values,
-* which might potentially be unsuitable for display to a user (for
-* instance, may lie outside the expected range of values) into a
-* set of acceptable alternative values suitable for display.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* value
-* An array of double, with one element for each CmpFrame axis.
-* This should contain the initial set of coordinate values,
-* which will be modified in place.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to CmpFrame structure */
- const int *perm; /* Axis permutation array */
- double *v; /* Pointer to permuted coordinates */
- int axis; /* Loop counter for axes */
- int naxes1; /* Number of axes in frame1 */
- int naxes; /* Number of axes in CmpFrame */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Obtain a pointer to the CmpFrame's axis permutation array. */
- perm = astGetPerm( this );
-
-/* Obtain the number of axes in the CmpFrame and in the first
- component Frame. */
- naxes = astGetNaxes( this );
- naxes1 = astGetNaxes( this->frame1 );
-
-/* Allocate memory to hold the permuted coordinates. */
- v = astMalloc( sizeof( double ) * (size_t) naxes );
- if ( astOK ) {
-
-/* Permute the coordinates using the CmpFrame's axis permutation array
- to put them into the order required internally (i.e. by the two
- component Frames). */
- for ( axis = 0; axis < naxes; axis++ ) v[ perm[ axis ] ] = value[ axis ];
-
-/* Invoke the astNorm method of both component Frames, passing the
- relevant (permuted) coordinate values for normalisation. */
- astNorm( this->frame1, v );
- astNorm( this->frame2, v + naxes1 );
-
-/* Copy the normalised values back into the original coordinate array,
- un-permuting them in the process. */
- for ( axis = 0; axis < naxes; axis++ ) value[ axis ] = v[ perm[ axis ] ];
- }
-
-/* Free the memory used for the permuted coordinates. */
- v = astFree( v );
-}
-
-static void NormBox( AstFrame *this_frame, double lbnd[], double ubnd[],
- AstMapping *reg, int *status ) {
-/*
-* Name:
-* NormBox
-
-* Purpose:
-* Extend a box to include effect of any singularities in the Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void astNormBox( AstFrame *this, double lbnd[], double ubnd[],
-* AstMapping *reg, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astNormBox method inherited
-* from the Frame class).
-
-* Description:
-* This function modifies a supplied box to include the effect of any
-* singularities in the co-ordinate system represented by the Frame.
-* For a normal Cartesian coordinate system, the box will be returned
-* unchanged. Other classes of Frame may do other things. For instance,
-* a SkyFrame will check to see if the box contains either the north
-* or south pole and extend the box appropriately.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* lbnd
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). Initially, this should contain a set of
-* lower axis bounds for the box. They will be modified on exit
-* to include the effect of any singularities within the box.
-* ubnd
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). Initially, this should contain a set of
-* upper axis bounds for the box. They will be modified on exit
-* to include the effect of any singularities within the box.
-* reg
-* A Mapping which should be used to test if any singular points are
-* inside or outside the box. The Mapping should leave an input
-* position unchanged if the point is inside the box, and should
-* set all bad if the point is outside the box.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this;
- AstCmpMap *m1;
- AstCmpMap *m2;
- AstCmpMap *m3;
- AstCmpMap *m4;
- AstCmpMap *m5;
- AstCmpMap *m6;
- AstPermMap *pm1;
- AstPermMap *pm2;
- AstPermMap *pm3;
- const int *perm;
- double *vl;
- double *vu;
- int *inperm;
- int axis;
- int naxes1;
- int naxes;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Obtain a pointer to the CmpFrame's axis permutation array. */
- perm = astGetPerm( this );
-
-/* Obtain the number of axes in the CmpFrame and in the first
- component Frame. */
- naxes = astGetNaxes( this );
- naxes1 = astGetNaxes( this->frame1 );
-
-/* Allocate memory to hold the permuted coordinates. */
- vl = astMalloc( sizeof( double ) * (size_t) naxes );
- vu = astMalloc( sizeof( double ) * (size_t) naxes );
- inperm = astMalloc( sizeof( int ) * (size_t) naxes );
- if( inperm ) {
-
-/* Permute the coordinates using the CmpFrame's axis permutation array
- to put them into the order required internally (i.e. by the two
- component Frames). */
- for ( axis = 0; axis < naxes; axis++ ) {
- vl[ perm[ axis ] ] = lbnd[ axis ];
- vu[ perm[ axis ] ] = ubnd[ axis ];
- }
-
-/* Create a PermMap with a forward transformation which reorders a position
- which uses internal axis ordering into a position which uses external axis
- ordering. */
- pm1 = astPermMap( naxes, NULL, naxes, perm, NULL, "", status );
-
-/* Put it in front of the supplied Mapping. The combination transforms an
- input internal position into an output external position. */
- m1 = astCmpMap( pm1, reg, 1, "", status );
-
-/* Invert it and add it to the end. This combination now transforms an
- input internal position into an output internal position. */
- astInvert( pm1 );
- m2 = astCmpMap( m1, pm1, 1, "", status );
-
-/* Create a PermMap with a forward transformation which copies the lower
- naxes1 inputs to the same outputs, and supplies AST__BAD for the other
- outputs. */
- for( axis = 0; axis < naxes1; axis++ ) inperm[ axis ] = axis;
- pm2 = astPermMap( naxes1, inperm, naxes, NULL, NULL, "", status );
-
-/* Put it in front of the Mapping created above, then invert it and add
- it at the end. */
- m3 = astCmpMap( pm2, m2, 1, "", status );
- astInvert( pm2 );
- m4 = astCmpMap( m3, pm2, 1, "", status );
-
-/* Invoke the astNormBox method of the first component Frame, passing the
- relevant (permuted) coordinate values for normalisation. */
- astNormBox( this->frame1, vl, vu, m4 );
-
-/* Create a PermMap with a forward transformation which copies the upper
- inputs to the same outputs, and supplied AST__BAD for the other
- outputs. */
- for( axis = 0; axis < naxes - naxes1; axis++ ) inperm[ axis ] = naxes1 + axis;
- pm3 = astPermMap( naxes1, inperm, naxes, NULL, NULL, "", status );
-
-/* Put it in front of the Mapping created above, then invert it and add
- it at the end. */
- m5 = astCmpMap( pm3, m2, 1, "", status );
- astInvert( pm3 );
- m6 = astCmpMap( m5, pm3, 1, "", status );
-
-/* Invoke the astNormBox method of the seond component Frame, passing the
- relevant (permuted) coordinate values for normalisation. */
- astNormBox( this->frame2, vl + naxes1, vu + naxes1, m6 );
-
-/* Copy the normalised values back into the original coordinate array,
- un-permuting them in the process. */
- for ( axis = 0; axis < naxes; axis++ ) {
- lbnd[ axis ] = vl[ perm[ axis ] ];
- ubnd[ axis ] = vu[ perm[ axis ] ];
- }
-
-/* Free resources. */
- pm1 = astAnnul( pm1 );
- pm2 = astAnnul( pm2 );
- pm3 = astAnnul( pm3 );
- m1 = astAnnul( m1 );
- m2 = astAnnul( m2 );
- m3 = astAnnul( m3 );
- m4 = astAnnul( m4 );
- m5 = astAnnul( m5 );
- m6 = astAnnul( m6 );
- }
- inperm = astFree( inperm );
- vl = astFree( vl );
- vu = astFree( vu );
-}
-
-static void Offset( AstFrame *this_frame, const double point1[],
- const double point2[], double offset, double point3[], int *status ) {
-/*
-* Name:
-* Offset
-
-* Purpose:
-* Calculate an offset along a geodesic curve.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void Offset( AstFrame *this,
-* const double point1[], const double point2[],
-* double offset, double point3[], int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astOffset method
-* inherited from the Frame class).
-
-* Description:
-* This function finds the CmpFrame coordinate values of a point
-* which is offset a specified distance along the geodesic curve
-* between two other points.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* point1
-* An array of double, with one element for each CmpFrame axis.
-* This should contain the coordinates of the point marking the
-* start of the geodesic curve.
-* point2
-* An array of double, with one element for each CmpFrame axis.
-* This should contain the coordinates of the point marking the
-* end of the geodesic curve.
-* offset
-* The required offset from the first point along the geodesic
-* curve. If this is positive, it will be towards the second
-* point. If it is negative, it will be in the opposite
-* direction. This offset need not imply a position lying
-* between the two points given, as the curve will be
-* extrapolated if necessary.
-* point3
-* An array of double, with one element for each CmpFrame axis
-* in which the coordinates of the required point will be
-* returned.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The geodesic curve used by this function is the path of
-* shortest distance between two points, as defined by the
-* astDistance function.
-* - This function will return "bad" coordinate values (AST__BAD)
-* if any of the input coordinates has this value.
-* - "Bad" coordinate values will also be returned if the two
-* points supplied are coincident (or otherwise fail to uniquely
-* specify a geodesic curve) but the requested offset is non-zero.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
- const int *perm; /* Pointer to axis permutation array */
- double *p1; /* Permuted coordinates for point1 */
- double *p2; /* Permuted coordinates for point2 */
- double *p3; /* Permuted coordinates for point3 */
- double dist1; /* Distance between input points in frame1 */
- double dist2; /* Distance between input points in frame2 */
- double dist; /* Total distance between input points */
- double offset1; /* Offset distance required in frame1 */
- double offset2; /* Offset distance required in frame2 */
- int axis; /* Loop counter for axes */
- int bad; /* Set bad output coordinates? */
- int naxes1; /* Number of axes in frame1 */
- int naxes; /* Total number of axes in CmpFrame */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Obtain the number of axes in the CmpFrame. */
- naxes = astGetNaxes( this );
-
-/* Obtain a pointer to the CmpFrame's axis permutation array. */
- perm = astGetPerm( this );
-
-/* Allocate workspace. */
- p1 = astMalloc( sizeof( double ) * (size_t) naxes );
- p2 = astMalloc( sizeof( double ) * (size_t) naxes );
- p3 = astMalloc( sizeof( double ) * (size_t) naxes );
-
-/* Initialise variables to avoid compiler warnings. */
- dist1 = 0.0;
- dist2 = 0.0;
- offset1 = 0.0;
- offset2 = 0.0;
- naxes1 = 0;
-
-/* Initialise a flag to indicate whether "bad" coordinates should be
- returned. */
- bad = 0;
-
-/* Check that all the coordinates of both input points are OK. If not,
- set the "bad" flag and quit checking. */
- if ( astOK ) {
- for ( axis = 0; axis < naxes; axis++ ) {
- if ( ( point1[ axis ] == AST__BAD ) ||
- ( point2[ axis ] == AST__BAD ) ) {
- bad = 1;
- break;
-
-/* If the coordinates are OK, apply the axis permutation array to
- obtain them in the required order. */
- } else {
- p1[ perm[ axis ] ] = point1[ axis ];
- p2[ perm[ axis ] ] = point2[ axis ];
- }
- }
- }
-
-/* If OK, obtain the number of axes in the first component Frame. */
- if ( astOK && !bad ) {
- naxes1 = astGetNaxes( this->frame1 );
-
-/* Project the two input points into the two component Frames and
- determine the distance between the points in each Frame. */
- dist1 = astDistance( this->frame1, p1, p2 );
- dist2 = astDistance( this->frame2, p1 + naxes1, p2 + naxes1 );
-
-/* Check that the returned distances are not bad. */
- if ( astOK ) bad = ( ( dist1 == AST__BAD ) || ( dist2 == AST__BAD ) );
- }
-
-/* If OK, calculate the total distance between the two points. */
- if ( astOK && !bad ) {
- dist = sqrt( dist1 * dist1 + dist2 * dist2 );
-
-/* If the points are co-incident, but "offset" is non-zero, then set
- the "bad" flag. */
- if ( dist == 0.0 ) {
- if ( offset != 0.0 ) {
- bad = 1;
-
-/* Otherwise, set the offset distance required in each Frame to
- zero. */
- } else {
- offset1 = 0.0;
- offset2 = 0.0;
- }
-
-/* If the points are not co-incident, divide the total offset required
- between each component Frame in such a way that the path being
- followed will pass through the second point. */
- } else {
- offset1 = offset * dist1 / dist;
- offset2 = offset * dist2 / dist;
- }
- }
-
-/* If OK, apply the separate offsets to each component Frame. */
- if ( astOK && !bad ) {
- astOffset( this->frame1, p1, p2, offset1, p3 );
- astOffset( this->frame2, p1 + naxes1, p2 + naxes1, offset2,
- p3 + naxes1 );
-
-/* Copy the resulting coordinates into the output array "point3",
- permuting them back into the required order. */
- if ( astOK ) {
- for ( axis = 0; axis < naxes; axis++ ) {
- point3[ axis ] = p3[ perm[ axis ] ];
-
-/* If any of the result coordinates is bad, set the "bad" flag and
- quit copying. */
- if ( point3[ axis ] == AST__BAD ) {
- bad = 1;
- break;
- }
- }
- }
- }
-
-/* Free the workspace arrays. */
- p1 = astFree( p1 );
- p2 = astFree( p2 );
- p3 = astFree( p3 );
-
-/* If no error has occurred, but bad coordinates must be returned,
- then set these in the output array. */
- if ( astOK && bad ) {
- for ( axis = 0; axis < naxes; axis++ ) point3[ axis ] = AST__BAD;
- }
-}
-
-static void Overlay( AstFrame *template_frame, const int *template_axes,
- AstFrame *result, int *status ) {
-/*
-* Name:
-* Overlay
-
-* Purpose:
-* Overlay the attributes of a template CmpFrame on to another Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void Overlay( AstFrame *template, const int *template_axes,
-* AstFrame *result, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the protected astOverlay
-* method inherited from the Frame class).
-
-* Description:
-* This function overlays attributes from a CmpFrame on to another Frame,
-* so as to over-ride selected attributes of that second Frame. Normally
-* only those attributes which have been specifically set in the template
-* will be transferred. This implements a form of defaulting, in which
-* a Frame acquires attributes from the template, but retains its
-* original attributes (as the default) if new values have not previously
-* been explicitly set in the template.
-
-* Parameters:
-* template
-* Pointer to the template CmpFrame, for whose current Frame
-* values should have been explicitly set for any attribute
-* which is to be transferred.
-* template_axes
-* Pointer to an array of int, with one element for each axis of
-* the "result" Frame (see below). For each axis in the result
-* frame, the corresponding element of this array should contain
-* the (zero-based) index of the axis in the current Frame of
-* the template CmpFrame to which it corresponds. This array is
-* used to establish from which template Frame axis any
-* axis-dependent attributes should be obtained.
-*
-* If any axis in the result Frame is not associated with a
-* template Frame axis, the corresponding element of this array
-* should be set to -1.
-*
-* If a NULL pointer is supplied, the template and result axis
-* indicies are assumed to be identical.
-* result
-* Pointer to the Frame which is to receive the new attribute values.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstCmpFrame *res; /* Pointer to the result CmpFrame structure */
- AstCmpFrame *template; /* Pointer to the template CmpFrame structure */
- AstFrame *sub1; /* Template subframe for 1st result subframe */
- AstFrame *sub2; /* Template subframe for 2nd result subframe */
- const int *perm; /* Template axis permutation array */
- const int *rperm; /* Result axis permutation array */
- int *axes1; /* Axis associations with template frame1 */
- int *axes2; /* Axis associations with template frame2 */
- int done; /* Have attributes been overlayed yet? */
- int i; /* Index of result axis */
- int icmp; /* Internal template axis number */
- int isfirst; /* Res. subframe -> 1st template subframe? */
- int issecond; /* Res. subframe -> 2nd template subframe? */
- int j; /* Index of template axis */
- int nc1; /* Number of axes in template frame1 */
- int nres1; /* Number of axes in first result subframe */
- int nres2; /* Number of axes in second result subframe */
- int nres; /* Number of axes in result Frame */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
- template = (AstCmpFrame *) template_frame;
-
-/* Get the axis permutation array for the template CmpFrame. */
- perm = astGetPerm( template );
-
-/* Get the number of axes in the first component Frame in the template
- CmpFrame. */
- nc1 = astGetNaxes( template->frame1 );
-
-/* Indicate we have not yet overlayed any attributes. */
- done = 0;
-
-/* If the result Frame is a CmpFrame... */
- if( astIsACmpFrame( result ) ) {
-
-/* Get the number of axes in the two component Frames of the result CmpFrame. */
- res = (AstCmpFrame *) result;
- nres1 = astGetNaxes( res->frame1 );
- nres2 = astGetNaxes( res->frame2 );
-
-/* Get the total number of axes in the result CmpFrame. */
- nres = nres1 + nres2;
-
-/* Get the axis permutation array for the result CmpFrame. */
- rperm = astGetPerm( result );
-
-/* Allocate memory for two new axes arrays, one for each result sub-frame. */
- axes1 = astMalloc( sizeof(int)*(size_t)nres1 );
- axes2 = astMalloc( sizeof(int)*(size_t)nres2 );
- if( astOK ) {
-
-/* Assume that there is a 1-to-1 correspondence between axes in the
- subframes of the result and template CmpFrame. That is, all the axes
- in each result sub-frame are overlayed from the same template sub-frame. */
- done = 1;
-
-/* Loop round each axis in the first result sub-frame. */
- isfirst = 0;
- issecond = 0;
- for( i = 0; i < nres1; i++ ) {
-
-/* Find the external result CmpFrame axis index (j) for internal axis i. */
- for( j = 0; j < nres; j++ ) {
- if( rperm[ j ] == i ) break;
- }
-
-/* Get the internal axis number within the template CmpFrame which
- provides attribute values for the current result axis. */
- icmp = perm[ template_axes ? template_axes[ j ] : j ];
-
-/* If this template axis is in the first template subframe, store the
- corresponding internal frame axis index in "axes1" and set a flag
- indicating that the first result subframe corresponds to the first
- template subframe. If the correspondance has already been established,
- but is broken by this axis, then set "done" false and exit the axis
- loop. */
- if( icmp < nc1 ) {
- if( issecond ) {
- done = 0;
- break;
- } else {
- isfirst = 1;
- axes1[ i ] = icmp;
- }
-
- } else {
- if( isfirst ) {
- done = 0;
- break;
- } else {
- issecond = 1;
- axes1[ i ] = icmp - nc1;
- }
- }
- }
-
-/* Save a pointer to the template subframe which is associated with the first
- result subframe.*/
- sub1 = isfirst ? template->frame1 :template->frame2;
-
-/* Now do the same for the axes in the second result sub-frame. */
- isfirst = 0;
- issecond = 0;
- for( i = 0; i < nres2; i++ ) {
- for( j = 0; j < nres; j++ ) {
- if( rperm[ j ] == i + nres1 ) break;
- }
-
- icmp = perm[ template_axes ? template_axes[ j ] : j ];
-
- if( icmp < nc1 ) {
- if( issecond ) {
- done = 0;
- break;
- } else {
- isfirst = 1;
- axes2[ i ] = icmp;
- }
-
- } else {
- if( isfirst ) {
- done = 0;
- break;
- } else {
- issecond = 1;
- axes2[ i ] = icmp - nc1;
- }
- }
- }
-
-/* Save a pointer to the template subframe which is associated with the
- second result subframe.*/
- sub2 = isfirst ? template->frame1 :template->frame2;
-
-/* If the two used template subframes are the same, something has gone
- wrong. */
- if( sub1 == sub2 ) done = 0;
-
-/* If all axes within each result subframe are associated with the same
- template subframe we continue to use the subframe astOverlay methods. */
- if( done ) {
-
-/* Overlay the first result subframe. */
- astOverlay( sub1, axes1, res->frame1 );
- astOverlay( sub2, axes2, res->frame2 );
- }
- }
-
-/* Free the axes arrays. */
- axes1 = astFree( axes1 );
- axes2 = astFree( axes2 );
- }
-
-/* If we have not yet overlayed any attributes... */
- if( !done ) {
-
-/* Get the number of axes in the result Frame. */
- nres = astGetNaxes( result );
-
-/* Allocate memory for two new template_axes arrays. */
- axes1 = astMalloc( sizeof(int)*(size_t)nres );
- axes2 = astMalloc( sizeof(int)*(size_t)nres );
- if( astOK ) {
-
-/* Set elements to -1 in "axes1" if they do not refer to the first component
- Frame in the template CmpFrame. Likewise, set elements to -1 in "axes2" if
- they do not refer to the second component Frame in the template CmpFrame. */
- for( i = 0; i < nres; i++ ) {
-
-/* Get the internal axis number within the template CmpFrame which
- provides attribute values for the current results axis. */
- icmp = perm[ template_axes ? template_axes[ i ] : i ];
-
-/* If this template axis is in the first component Frame, store the
- corresponding internal frame axis index in "axes1" and set "axis2" to
- -1. */
- if( icmp < nc1 ) {
- axes1[ i ] = icmp;
- axes2[ i ] = -1;
-
-/* If this template axis is in the second component Frame, store the
- corresponding internal frame axis index in "axes2" and set "axis1" to
- -1. */
- } else {
- axes1[ i ] = -1;
- axes2[ i ] = icmp - nc1;
- }
- }
-
-/* Now use the astOverlay methods of the two component Frames to overlay
- attributes onto the appropriate axes of the results Frame. */
- astOverlay( template->frame1, axes1, result );
- astOverlay( template->frame2, axes2, result );
- }
-
-/* Free the axes arrays. */
- axes1 = astFree( axes1 );
- axes2 = astFree( axes2 );
- }
-}
-
-static void PartitionSelection( int nselect, const int select[],
- const int perm[], int naxes1, int naxes2,
- int iframe[], int following, int *status ) {
-/*
-* Name:
-* PartitionSelection
-
-* Purpose:
-* Partition a CmpFrame axis selection into two component Frame selections.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void PartitionSelection( int nselect, const int select[],
-* const int perm[], int naxes1, int naxes2,
-* int iframe[], int following, int *status )
-
-* Class Membership:
-* CmpFrame member function.
-
-* Description:
-* This function accepts an array containing the indices of axes
-* which are to be selected from a CmpFrame, and partitions these
-* indices to indicate which must be selected from each of the
-* CmpFrame's two component Frames.
-*
-* This operation is trivial if all the axis indices supplied refer
-* to valid CmpFrame axes. However, if some of them do not (these
-* should generally be set to -1), this function assigns these
-* "extra" axes to one or other of the component Frames by
-* associating them with the axes selected immediately before (or
-* after). Allowance is made for the possibility that several
-* consecutive selected axes may be "extra" ones, or even that they
-* may all be. The CmpFrame's axis permutation array is also taken
-* into account.
-
-* Parameters:
-* nselect
-* The number of axes to be selected.
-* select
-* An array containing the (zero-based) indices of the CmpFrame
-* axes to be selected, or -1 where "extra" axes are required.
-* perm
-* The CmpFrame's axis permutation array.
-* naxes1
-* The number of axes in the CmpFrame's first component Frame.
-* naxes2
-* The number of axes in the CmpFrame's second component Frame.
-* iframe
-* An array with "nselect" elements in which to return a number
-* (either 1 or 2) to indicate to which component Frame (frame1
-* or frame2) each selected axis belongs.
-* following
-* If this is zero, "extra" axes will be associated with the
-* preceding normal selected axis which appears in the "select"
-* array (if any), otherwise they will be associated with the
-* following normal selected axis.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- int end; /* Loop termination value */
- int ifr; /* Choice of Frame for next "extra" axis */
- int inc; /* Loop increment value */
- int iselect; /* Loop counter for axis selections */
- int naxes; /* Total number of CmpFrame axes */
- int start; /* Loop starting value */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain the total number of CmpFrame axes. */
- naxes = naxes1 + naxes2;
-
-/* Loop through each axis selection and identify those which refer to
- valid CmpFrame axes. */
- for ( iselect = 0; iselect < nselect; iselect++ ) {
- if ( ( select[ iselect ] >= 0 ) && ( select[ iselect ] < naxes ) ) {
-
-/* For these selections (only), enter a flag into the "iframe" array
- which indicates which component Frame the selected axis resides
- in. Permute each axis index before deciding this. */
- iframe[ iselect ] = 1 + ( perm[ select[ iselect ] ] >= naxes1 );
- }
- }
-
-/* Set up a start, end, and increment value for looping through the
- array of axis selections forward (if "following" is 0) or backwards
- (otherwise). */
- start = following ? nselect - 1 : 0;
- end = following ? -1 : nselect;
- inc = following ? -1 : 1;
-
-/* Set the default choice of component Frame. This will be used if
- there are no normal axis selections to guide the choice at all. */
- ifr = following ? 2 : 1;
-
-/* Search for the first normal axis selection so that we can replace
- this default, if possible. (Here, "first" actually means "last" if
- "following" is set, because we will then be scanning the array of
- selections in reverse.) */
- for ( iselect = start; iselect != end; iselect += inc ) {
-
-/* Identify normal axis selections and obtain the choice of component
- Frame for the first one found. The resulting value "ifr" will be
- used for initial (or final, if "following" is set) "extra"
- selections for which no earlier normal selection exists - see
- below. */
- if ( ( select[ iselect ] >= 0 ) && ( select[ iselect ] < naxes ) ) {
- ifr = iframe[ iselect ];
- break;
- }
- }
-
-/* Loop through the selections again to allocate a choice of Frame to
- the "extra" selected axes. */
- for ( iselect = start; iselect != end; iselect += inc ) {
-
-/* Remember the component Frame used by the most recently encountered
- normal axis selection. */
- if ( ( select[ iselect ] >= 0 ) && ( select[ iselect ] < naxes ) ) {
- ifr = iframe[ iselect ];
-
-/* For "extra" axes, allocate the most recent Frame choice. The
- default choice (found above) will apply if no "most recent" choice
- has been encountered. */
- } else {
- iframe[ iselect ] = ifr;
- }
- }
-}
-
-static int PartMatch( AstCmpFrame *template, AstFrame *target,
- int naxes1, const int axes1[],
- int naxes2, const int axes2[],
- int **template_axes, int **target_axes,
- AstMapping **map, AstFrame **result, int *status ) {
-/*
-* Name:
-* PartMatch
-
-* Purpose:
-* Match a CmpFrame template to partitioned target axes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* int PartMatch( AstCmpFrame *template, AstFrame *target,
-* int naxes1, const int axes1[],
-* int naxes2, const int axes2[],
-* int **template_axes, int **target_axes,
-* AstMapping **map, AstFrame **result, int *status )
-
-* Class Membership:
-* CmpFrame member function.
-
-* Description:
-* This function matches a "template" CmpFrame to a "target" Frame
-* and determines whether it is possible to convert coordinates
-* between them. If it is, a Mapping that performs the
-* transformation is returned along with a new Frame that describes
-* the coordinate system that results when this Mapping is applied
-* to the "target" coordinate system. In addition, information is
-* returned to allow the axes in this "result" Frame to be
-* associated with the corresponding axes in the "target" Frame and
-* "template" CmpFrame from which they are derived.
-*
-* To simplify the matching process for a CmpFrame template, this
-* function requires the caller to specify how the axes of the
-* target Frame should be partitioned between the two component
-* Frames of the template. The function attempts to find a match
-* using this axis partitioning only. In general, the way in which
-* the target axes must be partitioned is not known in advance, so
-* this function must be invoked several times with alternative
-* partitioning before a match will be found.
-
-* Parameters:
-* template
-* Pointer to the template CmpFrame. This describes the
-* coordinate system (or set of possible coordinate systems)
-* into which we wish to convert our coordinates.
-* target
-* Pointer to the target Frame. This describes the coordinate
-* system in which we already have coordinates.
-* naxes1
-* The number of target axes to be matched against the first
-* component Frame of the template CmpFrame.
-* axes1
-* An array with "naxes1" elements containing the (zero-based)
-* indices of the target axes to be matched against the first
-* component Frame. Order is not significant.
-* naxes2
-* The number of target axes to be matched against the second
-* component Frame of the template CmpFrame.
-* axes2
-* An array with "naxes2" elements containing the (zero-based)
-* indices of the target axes to be matched against the second
-* component Frame. Order is not significant.
-* template_axes
-* Address of a location where a pointer to int will be returned
-* if the requested coordinate conversion is possible. This
-* pointer will point at a dynamically allocated array of
-* integers with one element for each axis of the "result" Frame
-* (see below). It must be freed by the caller (using astFree)
-* when no longer required.
-*
-* For each axis in the result Frame, the corresponding element
-* of this array will return the (zero-based) index of the
-* template CmpFrame axis from which it is derived. If it is not
-* derived from any template axis, a value of -1 will be
-* returned instead.
-* target_axes
-* Address of a location where a pointer to int will be returned
-* if the requested coordinate conversion is possible. This
-* pointer will point at a dynamically allocated array of
-* integers with one element for each axis of the "result" Frame
-* (see below). It must be freed by the caller (using astFree)
-* when no longer required.
-*
-* For each axis in the result Frame, the corresponding element
-* of this array will return the (zero-based) index of the
-* target Frame axis from which it is derived. If it is not
-* derived from any target Frame axis, a value of -1 will be
-* returned instead.
-* map
-* Address of a location where a pointer to a new Mapping will
-* be returned if the requested coordinate conversion is
-* possible. If returned, the forward transformation of this
-* Mapping may be used to convert coordinates between the
-* "target" Frame and the "result" Frame (see below) and the
-* inverse transformation will convert in the opposite
-* direction.
-* result
-* Address of a location where a pointer to a new Frame will be
-* returned if the requested coordinate conversion is
-* possible. If returned, this Frame describes the coordinate
-* system that results from applying the returned Mapping
-* (above) to the "target" coordinate system. In general, this
-* Frame will combine attributes from (and will therefore be
-* more specific than) both the target Frame and the template
-* CmpFrame. In particular, when the template allows the
-* possibility of transformaing to any one of a set of
-* alternative coordinate systems, the "result" Frame will
-* indicate which of the alternatives was used.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if the requested coordinate
-* conversion is possible. Otherwise zero is returned (this will
-* not in itself result in an error condition).
-
-* Notes:
-* - The "axes1" and "axes2" arrays should not contain any axis
-* indices in common and should, taken together, list all the axes
-* of the target Frame.
-* - By default, the "result" Frame will have its number of axes
-* and axis order determined by the "template" CmpFrame. However,
-* if the PreserveAxes attribute of the template is non-zero, then
-* the axis count and axis order of the "target" Frame will be used
-* instead.
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *frame1; /* Pointer to first sub-Frame from target */
- AstFrame *frame2; /* Pointer to second sub-Frame from target */
- AstFrame *result1; /* Result Frame pointer from first match */
- AstFrame *result2; /* Result Frame pointer from second match */
- AstFrame *tmp_frame; /* Temporary Frame pointer */
- AstMapping *junk_map; /* Mapping pointer returned by astSubFrame */
- AstMapping *map1; /* Mapping pointer from first match */
- AstMapping *map2; /* Mapping pointer from second match */
- AstMapping *permmap; /* Pointer to PermMap */
- AstMapping *tmp_map; /* Temporary Mapping pointer */
- const int *perm; /* Template axis permutation array pointer */
- int *inperm; /* Pointer to temporary permutation array */
- int *invperm; /* Inverse axis permutation array pointer */
- int *outperm; /* Pointer to temporary permutation array */
- int *pick; /* Pointer to array of axis selections */
- int *result_order; /* Relative result axis order array pointer */
- int *result_perm; /* Result axis permutation array pointer */
- int *target_assoc; /* Target axis association array pointer */
- int *target_axes1; /* Target axis associations from 1st match */
- int *target_axes2; /* Target axis associations from 2nd match */
- int *template_assoc; /* Template axis association array pointer */
- int *template_axes1; /* Template axis associations, 1st match */
- int *template_axes2; /* Template axis associations, 2nd match */
- int first; /* Axis in 1st component? */
- int full_axis; /* Result Frame axis index, before sub-set */
- int match1; /* First match successful? */
- int match2; /* Second match successful? */
- int match; /* Both matches successful? (result) */
- int match_end1; /* MatchEnd attribute for component 1 */
- int match_end2; /* MatchEnd attribute for component 2 */
- int match_end; /* MatchEnd attribute for template */
- int match_end_set; /* Component MatchEnd attribute set? */
- int output_axis; /* Output axis index */
- int part_result_axis; /* Result Frame component axis index */
- int part_target_axis; /* Target Frame component axis index */
- int part_template_axis; /* Template CmpFrame component axis index */
- int permute_set; /* Component Permute attribute set? */
- int permute_value; /* Component Permute attribute value */
- int preserve_axes; /* Template PreserveAxes attribute value */
- int preserve_axes_set; /* Component PreserveAxes attribute set? */
- int ref_naxes; /* Number of reference Frame axes */
- int result_axis; /* Result Frame axis index */
- int result_naxes1; /* Number of result Frame axes, component 1 */
- int result_naxes2; /* Number of result Frame axes, component 2 */
- int result_naxes; /* Total number of result Frame axes */
- int target_axis; /* Target Frame axis index */
- int target_naxes; /* Number of target Frame axes */
- int template_axis; /* Template CmpFrame axis index */
- int template_naxes1; /* Number of template axes, component 1 */
- int template_naxes; /* Total number of template axes */
-
-/* Initialise the returned values. */
- *template_axes = NULL;
- *target_axes = NULL;
- *map = NULL;
- *result = NULL;
- match = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return match;
-
-/* Initialise other variables to avoid compiler errors. */
- ref_naxes = 0;
-
-/* Select the required sub-Frames from the target. */
-/* ----------------------------------------------- */
-/* We first create two sub-Frames (that can be matched against the two
- template component Frames) by selecting the two specified sets of
- axes from the target. This is done without overlaying any template
- attributes. Annul the Mappings produced by this process, as these
- are not needed. */
-
- frame1 = NULL;
- junk_map = NULL;
- (void) astSubFrame( target, NULL, naxes1, axes1, NULL, &junk_map, &frame1 );
- if( junk_map ) junk_map = astAnnul( junk_map );
-
- frame2 = NULL;
- junk_map = NULL;
- (void) astSubFrame( target, NULL, naxes2, axes2, NULL, &junk_map, &frame2 );
- if( junk_map ) junk_map = astAnnul( junk_map );
-
-/* Match the sub-Frames with the template component Frames. */
-/* -------------------------------------------------------- */
-/* We now have two sub-Frames obtained from the target, and will
- attempt to match these with the component Frames contained within
- the template CmpFrame. */
-
-/* Before using each template component Frame, see whether any of its
- attributes that control matching is "un-set". If so, over-ride it
- with the attribute value of the template CmpFrame as a whole. */
- match_end_set = astTestMatchEnd( template->frame1 );
- if ( !match_end_set ) {
- astSetMatchEnd( template->frame1, astGetMatchEnd( template ) );
- }
- preserve_axes_set = astTestPreserveAxes( template->frame1 );
- if ( !preserve_axes_set ) {
- astSetPreserveAxes( template->frame1, astGetPreserveAxes( template ) );
- }
-
-/* We must also temporarily set the Permute attribute to 1 (this is
- normally the default, but might have been set otherwise). This is
- needed so that permutations of the target axes will be considered.
- Without this, the order in which the axes are presented is
- significant and we would have to test all the permutations. If the
- Permute attribute of the template CmpFrame as a whole is zero, then
- the resulting match may still have to be rejected, but this must be
- done at a higher level. */
- permute_set = astTestPermute( template->frame1 );
- permute_value = ( permute_set ) ? astGetPermute( template->frame1 ) : 0;
- astSetPermute( template->frame1, 1 );
-
-/* Test for a match with the first template component Frame. */
- match1 = astMatch( template->frame1, frame1,
- &template_axes1, &target_axes1, &map1, &result1 );
-
-/* Clear the attribute values again afterwards if necessary. */
- if ( !match_end_set ) astClearMatchEnd( template->frame1 );
- if ( !preserve_axes_set ) astClearPreserveAxes( template->frame1 );
-
-/* Also restore the original Permute attribute setting. */
- if ( permute_set ) {
- astSetPermute( template->frame1, permute_value );
- } else {
- astClearPermute( template->frame1 );
- }
-
-/* Repeat the whole process for the second component Frame. */
- match_end_set = astTestMatchEnd( template->frame2 );
- if ( !match_end_set ) {
- astSetMatchEnd( template->frame2, astGetMatchEnd( template ) );
- }
- preserve_axes_set = astTestPreserveAxes( template->frame2 );
- if ( !preserve_axes_set ) {
- astSetPreserveAxes( template->frame2, astGetPreserveAxes( template ) );
- }
- permute_set = astTestPermute( template->frame2 );
- if ( permute_set ) permute_value = astGetPermute( template->frame2 );
- astSetPermute( template->frame2, 1 );
-
- match2 = astMatch( template->frame2, frame2,
- &template_axes2, &target_axes2, &map2, &result2 );
-
- if ( !match_end_set ) astClearMatchEnd( template->frame2 );
- if ( !preserve_axes_set ) astClearPreserveAxes( template->frame2 );
- if ( permute_set ) {
- astSetPermute( template->frame2, permute_value );
- } else {
- astClearPermute( template->frame2 );
- }
-
-/* See if both matches were successful. */
- if ( astOK && match1 && match2 ) {
- match = 1;
-
-/* Obtain the number of target axes. */
- target_naxes = astGetNaxes( target );
-
-/* Obtain the number of axes in each of the result Frames produced by
- the matching operation. */
- result_naxes1 = astGetNaxes( result1 );
- result_naxes2 = astGetNaxes( result2 );
-
-/* Obtain the number of axes in the first template component Frame and
- in the template CmpFrame as a whole. */
- template_naxes1 = astGetNaxes( template->frame1 );
- template_naxes = astGetNaxes( template );
-
-/* Obtain the value of the MatchEnd attribute for each of the
- template's component Frames and for the template CmpFrame as a
- whole. */
- match_end1 = astGetMatchEnd( template->frame1 );
- match_end2 = astGetMatchEnd( template->frame2 );
- match_end = astGetMatchEnd( template );
-
-/* Obtain a pointer to the template CmpFrame's axis permutation
- array. Allocate space for a further array and fill it with the
- inverse of this axis permutation. */
- perm = astGetPerm( template );
- invperm = astMalloc( sizeof( int ) * (size_t) template_naxes );
- if ( astOK ) {
- for ( template_axis = 0; template_axis < template_naxes;
- template_axis++ ) {
- invperm[ perm[ template_axis ] ] = template_axis;
- }
- }
-
-/* Generate template and target axis associations. */
-/* ----------------------------------------------- */
-/* We now construct two arrays which identify the axis associations
- between the result axes (in the order obtained from the matching
- process above) and the axes of the template and target. This
- involves tracing back through several steps. */
-
-/* First calculate the total number of result axes and allocate memory
- for the association arrays. */
- result_naxes = result_naxes1 + result_naxes2;
- template_assoc = astMalloc( sizeof( int ) * (size_t) result_naxes );
- target_assoc = astMalloc( sizeof( int ) * (size_t) result_naxes );
- if ( astOK ) {
-
-/* Produce associations for each result axis in turn. */
- for ( result_axis = 0; result_axis < result_naxes; result_axis++ ) {
-
-/* Decide whether this result axis is contained in the first (or
- second) individual result Frame. */
- first = ( result_axis < result_naxes1 );
-
-/* Obtain the index of the axis within the individual result Frame.
- This involves adjusting for the axis numbering offset of the second
- result Frame if necessary. */
- part_result_axis = first ? result_axis :
- result_axis - result_naxes1;
-
-/* Find the template and target axis associations for this axis by
- looking them up in the association arrays returned from the
- matching process. This gives axis indices that apply to the
- individual template/target Frames supplied as input to the matching
- process. */
- part_template_axis = first ? template_axes1[ part_result_axis ] :
- template_axes2[ part_result_axis ];
- part_target_axis = first ? target_axes1[ part_result_axis ] :
- target_axes2[ part_result_axis ];
-
-/* Check that the resulting template association identifies a valid
- template axis. */
- if ( part_template_axis != -1 ) {
-
-/* If so, obtain the template axis index. This involves adjusting for
- the axis numbering offset of the second template component Frame
- (if necessary) and then applying the inverse template axis
- permutation to convert to the external template axis
- numbering. Store the result in the template association array. */
- template_assoc[ result_axis ] =
- invperm[ first ? part_template_axis :
- part_template_axis + template_naxes1 ];
-
-/* Indicate if there is no template axis association by storing an
- index of -1. */
- } else {
- template_assoc[ result_axis ] = -1;
- }
-
-/* Similarly, check that the target association identifies a valid
- target axis. */
- if ( part_target_axis != -1 ) {
-
-/* If so, obtain the target axis index. This simply involves using the
- axis selection arrays provided by the caller to look up which
- target axes were involved in the matching process. */
- target_assoc[ result_axis ] =
- first ? axes1[ part_target_axis ] :
- axes2[ part_target_axis ];
-
-/* Indicate if there is no target axis association by storing an index
- of -1. */
- } else {
- target_assoc[ result_axis ] = -1;
- }
- }
- }
-
-/* Free the inverse axis permutation array. */
- invperm = astFree( invperm );
-
-/* Create the output Frame. */
-/* ------------------------ */
-/* Initialise. */
- result_order = NULL;
- result_perm = NULL;
-
-/* Construct the basis of the final result Frame by combining the two
- individual result Frames (from the matching process) using a
- CmpFrame. */
- if ( astOK ) {
- *result = (AstFrame *) astCmpFrame( result1, result2, "", status );
-
-/* The next step is to permute the result Frame's axis order so that
- it corresponds with the axis order of the "reference Frame". The
- reference Frame is either the template or the target, depending on
- whether the template's PreserveAxes attribute is non-zero. Obtain
- the value of this attribute. */
- preserve_axes = astGetPreserveAxes( template );
-
-/* Decide how many axes the reference Frame contains. */
- ref_naxes = preserve_axes ? target_naxes : template_naxes;
-
-/* Make a copy of the axis association array that refers to the
- reference Frame. */
- result_order = astStore( NULL,
- preserve_axes ? target_assoc :
- template_assoc,
- sizeof( int ) * (size_t) result_naxes );
-
-/* The intention is to use this axis association array to permute the
- result axes into the same order as the reference Frame's axes. It
- is not that simple, however, because some of the axis associations
- may be null (i.e. result axes may exist that are not associated
- with reference axes) and they may also be incomplete (i.e. not
- every reference axis may be associated with a result axis).
-
- This prevents us from permuting the result axis order using this
- array directly, essentially because we haven't yet defined where
- any "extra" result axes (those with no association) should appear
- in the final axis order. */
-
-/* To overcome this, we replace all the null (-1) entries in the
- "result_order" array with new values which define their position
- relative to the other entries. This also involves re-numbering
- other entries to avoid clashes. The new numbers assigned depend on
- the MatchEnd attribute for each of the template component Frames,
- so we handle the associations for each of these components
- separately. */
- AddExtraAxes( result_naxes, result_order,
- 0, result_naxes1 - 1, match_end1, status );
- AddExtraAxes( result_naxes, result_order,
- result_naxes1, result_naxes - 1, match_end2, status );
-
-/* There may now be some reference Frame axes which are not referenced
- in this array, so we renumber the entries starting at zero (but
- preserving their relative order) so that there are no missing
- values due to these. */
- RenumberAxes( result_naxes, result_order, status );
-
-/* The resulting "result_order" array no longer describes the original
- reference Frame axis associations, but is now suitable for
- permuting the result axes into the required order. However, we
- require the inverse of this permutation, so allocate an array and
- fill it with the inverse. */
- result_perm = astMalloc( sizeof( int ) * (size_t) result_naxes );
- if ( astOK ) {
- for ( result_axis = 0; result_axis < result_naxes;
- result_axis++ ) {
- result_perm[ result_order[ result_axis ] ] = result_axis;
- }
- }
-
-/* Apply the inverse permutation to the result CmpFrame to put its
- axes into the required order. */
- astPermAxes( *result, result_perm );
-
-/* Check if the number of result Frame axes differs from the number of
- reference axes. This can arise if the PreserveAxes attribute of
- either template component Frame is set to a value that differs from
- that of the template CmpFrame as a whole. If this is the case, we
- must select a sub-set (or super-set) of the result axes, so that we
- end up with the same number of axes as the reference Frame. */
- if ( ref_naxes != result_naxes ) {
-
-/* Allocate an array to hold the indices of the axes required. */
- pick = astMalloc( sizeof( int ) * (size_t) ref_naxes );
- if ( astOK ) {
-
-/* Generate the axis indices, using the template CmpFrame's MatchEnd
- attribute to decide which ones to use. */
- for ( output_axis = 0; output_axis < ref_naxes;
- output_axis++ ) {
- full_axis =
- match_end ? output_axis + ( result_naxes - ref_naxes ) :
- output_axis;
-
-/* If the index is valid (i.e. the required axis is available), store
- it. Otherwise, use an index of -1, which requests that new
- (default) axes be supplied where needed. */
- if ( ( full_axis >= 0 ) && ( full_axis < result_naxes ) ) {
- pick[ output_axis ] = full_axis;
- } else {
- pick[ output_axis ] = -1;
- }
- }
- }
-
-/* Pick the required axes from the result Frame and replace it with
- the new one. */
- tmp_frame = astPickAxes( *result, ref_naxes, pick, NULL );
- *result = astAnnul( *result );
- *result = tmp_frame;
-
-/* Free the array of axis indices. */
- pick = astFree( pick );
- }
- }
-
-/* Create output axis association arrays. */
-/* -------------------------------------- */
-/* We now construct the two arrays that are returned to identify which
- template and target axes (if any) are associated with each final
- result Frame axis. Allocate memory for these arrays. */
- if ( astOK ) {
- *target_axes = astMalloc( sizeof( int ) * (size_t) ref_naxes );
- *template_axes = astMalloc( sizeof( int ) * (size_t) ref_naxes );
- if ( astOK ) {
-
-/* For each output axis, obtain the original result axis index (before
- any sub-set or super-set of the output axes was selected). */
- for ( output_axis = 0; output_axis < ref_naxes; output_axis++ ) {
- full_axis =
- match_end ? output_axis + ( result_naxes - ref_naxes ) :
- output_axis;
-
-/* Derive the result axis index before the axes were permuted into
- their final order. */
- if ( ( full_axis >= 0 ) && ( full_axis < result_naxes ) ) {
- result_axis = result_perm[ full_axis ];
-
-/* Use this axis index and the axis association arrays generated
- earlier to obtain the required associations, and store these in the
- output arrays. */
- ( *template_axes )[ output_axis ] =
- template_assoc[ result_axis ];
- ( *target_axes )[ output_axis ] =
- target_assoc[ result_axis ];
-
-/* Store a value of -1 if there is no association. */
- } else {
- ( *template_axes )[ output_axis ] = -1;
- ( *target_axes )[ output_axis ] = -1;
- }
- }
- }
- }
-
-/* Free the original (un-permuted) axis association arrays. */
- template_assoc = astFree( template_assoc );
- target_assoc = astFree( target_assoc );
-
-/* Create the output Mapping. */
-/* -------------------------- */
-/* Construct the basis of the final output Mapping by combining the
- Mappings produced by the individual matching processes in parallel,
- using a CmpMap. */
- *map = (AstMapping *) astCmpMap( map1, map2, 0, "", status );
-
-/* It is now necessary to prefix and suffix this CmpMap with two
- PermMaps, which correct the input and output axis order to
- correspond with the target and result Frame axes.
-
- At the target end, this reflects the partitioning of the target
- axes into two groups, as specified by the caller. At the result
- end, it reflects the axis permutation applied (above) to put the
- final result Frame axes into the required order, together with the
- selection of any sub-set or super-set of these axes. */
-
-/* Allocate memory for permutation arrays to describe the prefix
- PermMap. */
- inperm = astMalloc( sizeof( int ) * (size_t) target_naxes );
- outperm = astMalloc( sizeof( int ) * (size_t) target_naxes );
- if ( astOK ) {
-
-/* Consider the target axes in the order that they were supplied to
- the matching processes (i.e. the order that corresponds with the
- input coordinates of the CmpMap produced above). */
- for ( target_axis = 0; target_axis < target_naxes; target_axis++ ) {
-
-/* Decide whether each axis belongs to the first (or second) selected
- group of target axes. */
- first = ( target_axis < naxes1 );
-
-/* Obtain the index of the target axis within the group. This involves
- allowing for the numbering offset of the second group if
- necessary. */
- part_target_axis = first ? target_axis :
- target_axis - naxes1;
-
-/* Obtain the original target axis index by looking up the axis in the
- appropriate axis selection array provided by the caller. */
- outperm[ target_axis ] = first ? axes1[ part_target_axis ] :
- axes2[ part_target_axis ];
-
-/* Fill the "inperm" array with the inverse of this permutation. */
- inperm[ outperm[ target_axis ] ] = target_axis;
- }
- }
-
-/* If the permutation is not null, use these permutation arrays to
- construct the required prefix PermMap. */
- if ( GoodPerm( target_naxes, inperm, target_naxes, outperm, status ) ) {
- permmap = (AstMapping *) astPermMap( target_naxes, inperm,
- target_naxes, outperm,
- NULL, "", status );
-
-/* Add the PermMap as a prefix to the result Mapping and then annul
- the original Mapping pointers. */
- tmp_map = (AstMapping *) astCmpMap( permmap, *map, 1, "", status );
- (void) astAnnul( *map );
- *map = tmp_map;
- permmap = astAnnul( permmap );
- }
-
-/* Free the permutation arrays. */
- inperm = astFree( inperm );
- outperm = astFree( outperm );
-
-/* Allocate memory for permutation arrays to describe the suffix
- PermMap. */
- inperm = astMalloc( sizeof( int ) * (size_t) result_naxes );
- outperm = astMalloc( sizeof( int ) * (size_t) ref_naxes );
- if ( astOK ) {
-
-/* Initialise the "inperm" array. */
- for ( result_axis = 0; result_axis < result_naxes; result_axis++ ) {
- inperm[ result_axis ] = -1;
- }
-
-/* For each output axis, obtain the index of the corresponding result
- axis before any sub-set or super-set was selected. */
- for ( output_axis = 0; output_axis < ref_naxes; output_axis++ ) {
- full_axis =
- match_end ? output_axis + ( result_naxes - ref_naxes ) :
- output_axis;
-
-/* Store the axis index before the result axes were permuted, and also
- construct the inverse permutation. */
- if ( ( full_axis >= 0 ) && ( full_axis < result_naxes ) ) {
- outperm[ output_axis ] = result_perm[ full_axis ];
- inperm[ outperm[ output_axis ] ] = output_axis;
-
-/* Note which output axes do not exist in the result Frame
- (e.g. because a super-set was selected). */
- } else {
- outperm[ output_axis ] = -1;
- }
- }
- }
-
-/* If the permutation is not null, use these permutation arrays to
- construct the required suffix PermMap. */
- if ( GoodPerm( target_naxes, inperm, target_naxes, outperm, status ) ) {
- permmap = (AstMapping *) astPermMap( result_naxes, inperm,
- ref_naxes, outperm,
- NULL, "", status );
-
-/* Add the PermMap as a suffix to the result Mapping and then annul
- the original Mapping pointers. */
- tmp_map = (AstMapping *) astCmpMap( *map, permmap, 1, "", status );
- (void) astAnnul( *map );
- *map = tmp_map;
- permmap = astAnnul( permmap );
- }
-
-/* Free the permutation arrays. */
- inperm = astFree( inperm );
- outperm = astFree( outperm );
-
-/* Free the result axis permutation arrays. */
- result_order = astFree( result_order );
- result_perm = astFree( result_perm );
- }
-
-/* If necessary, free the results of the first matching process. */
- if ( match1 ) {
- template_axes1 = astFree( template_axes1 );
- target_axes1 = astFree( target_axes1 );
- map1 = astAnnul( map1 );
- result1 = astAnnul( result1 );
- }
-
-/* If necessary, free the results of the second matching process. */
- if ( match2 ) {
- template_axes2 = astFree( template_axes2 );
- target_axes2 = astFree( target_axes2 );
- map2 = astAnnul( map2 );
- result2 = astAnnul( result2 );
- }
-
-/* Annul the pointers to the sub-Frames selected from the target. */
- frame1 = astAnnul( frame1 );
- frame2 = astAnnul( frame2 );
-
-/* If an error occurred, free all allocated memory, annul the result
- Object pointers and clear all returned values. */
- if ( !astOK ) {
- *template_axes = astFree( *template_axes );
- *target_axes = astFree( *target_axes );
- *map = astAnnul( *map );;
- *result = astAnnul( *result );
- match = 0;
- }
-
-/* Return the result. */
- return match;
-}
-
-static void PermAxes( AstFrame *this_frame, const int perm[], int *status ) {
-/*
-* Name:
-* PermAxes
-
-* Purpose:
-* Permute the order of a CmpFrame's axes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void astPermAxes( AstFrame *this, const int perm[], int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astPermAxes method
-* inherited from the Frame class).
-
-* Description:
-* This function permutes the order in which a CmpFrame's axes occur.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* perm
-* An array of int (with one element for each axis of the
-* CmpFrame) which lists the axes in their new order. Each
-* element of this array should be a (zero-based) axis index
-* identifying the axes according to their old (un-permuted)
-* order.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - Only genuine permutations of the axis order are permitted, so
-* each axis must be referenced exactly once in the "perm" array.
-* - If more than one axis permutation is applied to a CmpFrame,
-* the effects are cumulative.
-
-* Implementation Notes:
-* - This function performs essentially the same operation as the
-* Frame member function which it over-rides. However, it operates
-* on a "perm" array held in the CmpFrame structure (rather than
-* the one in the parent Frame structure). This duplication of the
-* array is necessary because the one in the Frame structure is of
-* zero length, the number of axes in the Frame structure having
-* been set to zero to prevent unnecessary allocation of Axis
-* objects which are not needed by the CmpFrame.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to CmpFrame structure */
- int *old; /* Pointer to copy of old permutation array */
- int axis; /* Loop counter for CmpFrame axes */
- int naxes; /* Number of CmpFrame axes */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Validate the permutation array, to check that it describes a
- genuine permutation. */
- astCheckPerm( this, perm, "astPermAxes" );
-
-/* Obtain the number of CmpFrame axes. */
- naxes = astGetNaxes( this );
-
-/* Allocate memory and use it to store a copy of the old permutation
- array for the CmpFrame. */
- old = astStore( NULL, this->perm, sizeof( int ) * (size_t) naxes );
-
-/* Apply the new axis permutation cumulatively to the old one and
- store the result in the CmpFrame. */
- if ( astOK ) {
- for ( axis = 0; axis < naxes; axis++ ) {
- this->perm[ axis ] = old[ perm[ axis ] ];
- }
- }
-
-/* Free the temporary copy of the old array. */
- old = astFree( old );
-}
-
-static void PrimaryFrame( AstFrame *this_frame, int axis1,
- AstFrame **frame, int *axis2, int *status ) {
-/*
-* Name:
-* PrimaryFrame
-
-* Purpose:
-* Uniquely identify a primary Frame and one of its axes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void astPrimaryFrame( AstFrame *this, int axis1, AstFrame **frame,
-* int *axis2, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the protected
-* astPrimaryFrame method inherited from the Frame class).
-
-* Description:
-* This function returns information about the underlying (primary)
-* Frame corresponding to a specified CmpFrame axis.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* axis1
-* An axis index (zero-based) identifying the CmpFrame axis for
-* which information is required.
-* frame
-* Address of a location to receive a pointer to the underlying
-* (primary) Frame to which the requested axis belongs
-* (i.e. this will not be a compound Frame).
-* axis2
-* Pointer to an int which is to receive the (zero-based) axis
-* index within "frame" which identifies the axis being referred
-* to, using the axis order that applied when the primary Frame
-* was originally constructed (i.e. this function undoes all
-* subsequent axis pemutations and the effects of combining
-* Frames, in order to reveal the original underlying axis
-* order).
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This protected method is provided so that class
-* implementations can distinguish the axes of Frames from one
-* another (e.g. can distinguish a longitude axis as being
-* different from a latitide axis) even after their order has been
-* permuted and they have been combined with axes from other
-* Frames.
-* - The reference count of the primary Frame will be incremented
-* by one to reflect the new pointer returned.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to CmpFrame structure */
- int naxes1; /* Number of axes in frame1 */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Validate and permute the axis index supplied. */
- axis1 = astValidateAxis( this, axis1, "astPrimaryFrame" );
-
-/* Obtain the number of axes in the first component Frame. */
- naxes1 = astGetNaxes( this->frame1 );
- if ( astOK ) {
-
-/* Decide which Frame contains the axis and invoke its astPrimaryFrame
- method to obtain the required information. */
- if ( axis1 < naxes1 ) {
- astPrimaryFrame( this->frame1, axis1, frame, axis2 );
- } else {
- astPrimaryFrame( this->frame2, axis1 - naxes1, frame, axis2 );
- }
- }
-}
-
-static int QsortCmpAxes( const void *a, const void *b ) {
-/*
-* Name:
-* QsortCmpAxes
-
-* Purpose:
-* Compare two axis indices for "qsort".
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* int QsortCmpAxes( const void *a, const void *b )
-
-* Class Membership:
-* CmpFrame member function.
-
-* Description:
-* This is a service function for the C RTL routine "qsort". It
-* takes the two values supplied and interprets them as integer
-* indices into the static "qsort_axes" array. It compares the
-* values of these two array elements and returns the result
-* required by "qsort".
-*
-* This function is used when sorting an array of indices so that
-* they access the "qsort_axes" array in ascending order.
-
-* Parameters:
-* As required by "qsort".
-
-* Returned Value:
-* As required by "qsort".
-*/
-
-/* Local Variables. */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- int result; /* Result value to return */
- int val_a; /* First axis index */
- int val_b; /* Second axis index */
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(NULL);
-
-/* Convert the values passed by "qsort" into integer array indices and
- use these to access the "qsort_axes" array (this pointer to the
- array being assigned by the caller of "qsort"). Extract the two
- values being compared. */
- val_a = qsort_axes[ *( (const int *) a ) ];
- val_b = qsort_axes[ *( (const int *) b ) ];
-
-/* Compare the two values as required by "qsort". */
- if ( val_a < val_b ) {
- result = -1;
- } else if ( val_a == val_b ) {
- result = 0;
- } else {
- result = 1;
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstMapping *RemoveRegions( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* RemoveRegions
-
-* Purpose:
-* Remove any Regions from a Mapping.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* AstMapping *RemoveRegions( AstMapping *this, int *status )
-
-* Class Membership:
-* CmpFrame method (over-rides the astRemoveRegions method inherited
-* from the Frame class).
-
-* Description:
-* This function searches the supplied Mapping (which may be a
-* compound Mapping such as a CmpMap) for any component Mappings
-* that are instances of the AST Region class. It then creates a new
-* Mapping from which all Regions have been removed. If a Region
-* cannot simply be removed (for instance, if it is a component of a
-* parallel CmpMap), then it is replaced with an equivalent UnitMap
-* in the returned Mapping.
-*
-* The implementation provided by the CmpFrame class invokes the
-* astRemoveRegions method on the two component Frames, and joins
-* the results together into a new CmpFrame. This replaces any Regions
-* with their equivalent Frames.
-
-* Parameters:
-* this
-* Pointer to the original Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the modified mapping.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstCmpFrame *new; /* Pointer to new CmpFrame */
- AstCmpFrame *this; /* Pointer to CmpFrame structure */
- AstFrame *newfrm1; /* New first component Frame */
- AstFrame *newfrm2; /* New second component Frame */
- AstMapping *result; /* Result pointer to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the CmpFrame. */
- this = (AstCmpFrame *) this_mapping;
-
-/* Invoke the astRemoveRegions method on the two component Frames. */
- newfrm1 = astRemoveRegions( this->frame1 );
- newfrm2 = astRemoveRegions( this->frame2 );
-
-/* If neither component was modified, just return a clone of the supplied
- pointer. */
- if( this->frame1 == newfrm1 && this->frame2 == newfrm2 ) {
- result = astClone( this );
-
-/* Annul new new Frame pointers. */
- newfrm1 = astAnnul( newfrm1 );
- newfrm2 = astAnnul( newfrm2 );
-
-/* Otherwise, we need to create a new CmpFrame to return. */
- } else {
-
-/* Make a copy of the supplied CmpFrame so that the new CmpFrame retains
- any attribute settings of the supplied CmpFrame. */
- new = astCopy( this );
- result = (AstMapping *) new;
-
-/* Replace the two component Frames with the simplified Frames. */
- (void) astAnnul( new->frame1 );
- (void) astAnnul( new->frame2 );
- new->frame1 = (AstFrame *) newfrm1;
- new->frame2 = (AstFrame *) newfrm2;
- }
-
-/* Annul the returned Mapping if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static void RenumberAxes( int naxes, int axes[], int *status ) {
-/*
-* Name:
-* RenumberAxes
-
-* Purpose:
-* Renumber axis indices to eliminate missing ones.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void RenumberAxes( int naxes, int axes[], int *status )
-
-* Class Membership:
-* CmpFrame member function.
-
-* Description:
-* This function takes an array containing a list of (zero-based)
-* axis indices referring to the axes of a Frame, some of whose
-* axes may not be referenced. It renumbers the axis indices, to
-* eliminate any which are missing (i.e. not referenced), while
-* preserving the original order. It does this by replacing each
-* axis index by its rank (starting at zero) when the indices are
-* sorted into ascending order.
-
-* Parameters:
-* naxes
-* The number of axis indices present.
-* axes
-* An array, with "naxes" elements, containing the indices. This
-* is modified by this function to contain the new indices.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- int *work; /* Pointer to workspace array */
- int i; /* Loop counter */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(NULL);
-
-/* Allocate workspace. */
- work = astMalloc( sizeof( int ) * (size_t) naxes );
- if ( astOK ) {
-
-/* Fill the workspace with indices which address the axis index values
- in their natural order. */
- for ( i = 0; i < naxes; i++ ) work[ i ] = i;
-
-/* Make the "axes" values available to the C RTL function "qsort" via
- the static "qsort_axes" pointer. Then use "qsort" to permute the
- contents of "work" so that it addresses the axis indices in
- ascending order. */
- qsort_axes = axes;
- qsort( work, (size_t) naxes, sizeof( int ), QsortCmpAxes );
-
-/* Use the result to replace each axis index by its rank when sorted
- into ascending order (starting with zero). */
- for ( i = 0; i < naxes; i++ ) axes[ work[ i ] ] = i;
- }
-
-/* Free the workspace array. */
- work = astFree( work );
-}
-
-static void Resolve( AstFrame *this_frame, const double point1[],
- const double point2[], const double point3[],
- double point4[], double *d1, double *d2, int *status ){
-/*
-* Name:
-* Resolve
-
-* Purpose:
-* Resolve a vector into two orthogonal components
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void Resolve( AstFrame *this, const double point1[],
-* const double point2[], const double point3[],
-* double point4[], double *d1, double *d2, int *status );
-
-* Class Membership:
-* CmpFrame member function (over-rides the astOffset method
-* inherited from the Frame class).
-
-* Description:
-* This function resolves a vector into two perpendicular components.
-* The vector from point 1 to point 2 is used as the basis vector.
-* The vector from point 1 to point 3 is resolved into components
-* parallel and perpendicular to this basis vector. The lengths of the
-* two components are returned, together with the position of closest
-* aproach of the basis vector to point 3.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* point1
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). This marks the start of the basis vector,
-* and of the vector to be resolved.
-* point2
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). This marks the end of the basis vector.
-* point3
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). This marks the end of the vector to be
-* resolved.
-* point4
-* An array of double, with one element for each Frame axis
-* in which the coordinates of the point of closest approach of the
-* basis vector to point 3 will be returned.
-* d1
-* The address of a location at which to return the distance from
-* point 1 to point 4 (that is, the length of the component parallel
-* to the basis vector). Positive values are in the same sense as
-* movement from point 1 to point 2.
-* d2
-* The address of a location at which to return the distance from
-* point 4 to point 3 (that is, the length of the component
-* perpendicular to the basis vector). The returned value is always
-* positive.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - Each vector used in this function is the path of
-* shortest distance between two points, as defined by the
-* astDistance function.
-* - This function will return "bad" coordinate values (AST__BAD)
-* if any of the input coordinates has this value, or if the required
-* output values are undefined.
-*--
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
- const int *perm; /* Pointer to axis permutation array */
- double *p1; /* Permuted coordinates for point1 */
- double *p2; /* Permuted coordinates for point2 */
- double *p3; /* Permuted coordinates for point3 */
- double *p4; /* Permuted coordinates for point4 */
- double d1a; /* Parallel distance in frame1 */
- double d1b; /* Parallel distance in frame2 */
- double d2a; /* Perpendicular distance in frame1 */
- double d2b; /* Perpendicular distance in frame2 */
- double d; /* Total length of basis vector */
- double da; /* Length of basis vector in frame1 */
- double db; /* Length of basis vector in frame2 */
- int axis; /* Loop counter for axes */
- int bad; /* Set bad output coordinates? */
- int naxes1; /* Number of axes in frame1 */
- int naxes; /* Total number of axes in CmpFrame */
-
-/* Check the global error status. */
- *d1 = AST__BAD;
- *d2 = AST__BAD;
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Obtain the number of axes in the CmpFrame. */
- naxes = astGetNaxes( this );
-
-/* Obtain a pointer to the CmpFrame's axis permutation array. */
- perm = astGetPerm( this );
-
-/* Allocate workspace. */
- p1 = astMalloc( sizeof( double ) * (size_t) naxes );
- p2 = astMalloc( sizeof( double ) * (size_t) naxes );
- p3 = astMalloc( sizeof( double ) * (size_t) naxes );
- p4 = astMalloc( sizeof( double ) * (size_t) naxes );
-
-/* Initialise a flag to indicate whether "bad" coordinates should be
- returned. */
- bad = 0;
-
-/* Initialise ther variables to avoid compiler warnings. */
- da = 0.0;
- db = 0.0;
-
-/* Check that all the coordinates of both input points are OK. If not,
- set the "bad" flag and quit checking. */
- if ( astOK ) {
- for ( axis = 0; axis < naxes; axis++ ) {
- if ( ( point1[ axis ] == AST__BAD ) ||
- ( point2[ axis ] == AST__BAD ) ||
- ( point3[ axis ] == AST__BAD ) ) {
- bad = 1;
- break;
-
-/* If the coordinates are OK, apply the axis permutation array to
- obtain them in the required order. */
- } else {
- p1[ perm[ axis ] ] = point1[ axis ];
- p2[ perm[ axis ] ] = point2[ axis ];
- p3[ perm[ axis ] ] = point3[ axis ];
- }
- }
- }
-
-/* If OK, obtain the number of axes in the first component Frame. */
- if ( astOK && !bad ) {
- naxes1 = astGetNaxes( this->frame1 );
-
-/* Find the projection of the required parallel distance into each of the
- two Frames. */
- astResolve( this->frame1, p1, p2, p3, p4, &d1a, &d2a );
- astResolve( this->frame2, p1 + naxes1, p2 + naxes1, p3 + naxes1,
- p4 + naxes1, &d1b, &d2b );
-
-/* Project the first two input points into the two component Frames and
- determine the length of the basis vector in each Frame. */
- da = astDistance( this->frame1, p1, p2 );
- db = astDistance( this->frame2, p1 + naxes1, p2 + naxes1 );
-
-/* Check that the returned distances are not bad. */
- if ( astOK ) bad = ( bad || ( da == AST__BAD ) || ( db == AST__BAD ) );
-
-/* We can tolerate a bad parallel distance within a sub-Frame if the
- basis vector has zero length in the sub-Frame, because the bad
- parallel distance will have zero weight in the calculation. Set such
- bad parallel distanced arbitrarily to zero. */
- if( d1a == AST__BAD && da == 0.0 ) d1a = 0.0;
- if( d1b == AST__BAD && db == 0.0 ) d1b = 0.0;
-
-/* Check that the final parallel distances are not bad. */
- if ( astOK ) bad = ( bad || ( d1a == AST__BAD ) || ( d1b == AST__BAD ) );
-
- }
-
-/* If OK, calculate the total distance between the two points. */
- if ( astOK && !bad ) {
- d = sqrt( da * da + db * db );
-
-/* If the points are co-incident, then set the "bad" flag. */
- if ( d == 0.0 ) {
- bad = 1;
-
-/* If the points are not co-incident, combine the parallel distances for
- the individual Frames into a single parallel distance for the entire
- CmpFrame. */
- } else {
- *d1 = ( da*d1a + db*d1b )/d;
-
-/* Offset this distance away from point 1 towards point 2 to get point 4. */
- astOffset( this, point1, point2, *d1, point4 );
-
-/* Now find the perpendicular distance (the distance between point4 and
- point3). */
- *d2 = astDistance( this, point4, point3 );
-
- }
- }
-
-/* Free the workspace arrays. */
- p1 = astFree( p1 );
- p2 = astFree( p2 );
- p3 = astFree( p3 );
- p4 = astFree( p4 );
-
-/* If no error has occurred, but bad coordinates must be returned,
- then set these in the output array. */
- if ( astOK && bad ) {
- *d1 = AST__BAD;
- *d2 = AST__BAD;
- for ( axis = 0; axis < naxes; axis++ ) point4[ axis ] = AST__BAD;
- }
-
-}
-
-static AstPointSet *ResolvePoints( AstFrame *this_frame, const double point1[],
- const double point2[], AstPointSet *in,
- AstPointSet *out, int *status ) {
-/*
-* Name:
-* ResolvePoints
-
-* Purpose:
-* Resolve a set of vectors into orthogonal components
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* AstPointSet *ResolvePoints( AstFrame *this, const double point1[],
-* const double point2[], AstPointSet *in,
-* AstPointSet *out )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astResolvePoints method
-* inherited from the Frame class).
-
-* Description:
-* This function takes a CmpFrame and a set of vectors encapsulated
-* in a PointSet, and resolves each one into two orthogonal components,
-* returning these two components in another PointSet.
-*
-* This is exactly the same as the public astResolve method, except
-* that this method allows many vectors to be processed in a single call,
-* thus reducing the computational cost of overheads of many
-* individual calls to astResolve.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* point1
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). This marks the start of the basis vector,
-* and of the vectors to be resolved.
-* point2
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). This marks the end of the basis vector.
-* in
-* Pointer to the PointSet holding the ends of the vectors to be
-* resolved.
-* out
-* Pointer to a PointSet which will hold the length of the two
-* resolved components. A NULL value may also be given, in which
-* case a new PointSet will be created by this function.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet. The first axis will
-* hold the lengths of the vector components parallel to the basis vector.
-* These values will be signed (positive values are in the same sense as
-* movement from point 1 to point 2. The second axis will hold the lengths
-* of the vector components perpendicular to the basis vector. These
-* values will always be positive.
-
-* Notes:
-* - The number of coordinate values per point in the input
-* PointSet must match the number of axes in the supplied Frame.
-* - If an output PointSet is supplied, it must have space for
-* sufficient number of points and 2 coordinate values per point.
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
- AstPointSet *in1; /* Pointer to input PointSet for frame1 */
- AstPointSet *in2; /* Pointer to input PointSet for frame2 */
- AstPointSet *out1; /* Pointer to output PointSet for frame1 */
- AstPointSet *out2; /* Pointer to output PointSet for frame2 */
- AstPointSet *result; /* Pointer to output PointSet */
- const int *perm; /* Pointer to axis permutation array */
- double **ptr_in; /* Pointers to input axis values */
- double **ptr_out1; /* Pointers to frame1 component lengths */
- double **ptr_out2; /* Pointers to frame2 component lengths */
- double **ptr_out; /* Pointers to returned component lengths */
- double *d1; /* Pointer to next parallel component value */
- double *d1_1; /* arallel distance in frame1 */
- double *d1_2; /* Parallel distance in frame2 */
- double *d2; /* Pointer to next perpendicular component value */
- double *d2_1; /* Perpendicular distance in frame1 */
- double *d2_2; /* Perpendicular distance in frame2 */
- double *p1; /* Permuted coordinates for point1 */
- double *p2; /* Permuted coordinates for point2 */
- double *p3; /* Supplied vector */
- double *p4; /* Closest approach to supplied vector */
- double b1; /* Length of basis vector in frame1 */
- double b2; /* Length of basis vector in frame2 */
- double b; /* Length of basis vector */
- int axis; /* Loop counter for axes */
- int ipoint; /* Index of next point */
- int nax; /* Number of Frame axes */
- int naxes1; /* Number of axes in frame1 */
- int naxes2; /* Number of axes in frame2 */
- int ncoord_in; /* Number of input PointSet coordinates */
- int ncoord_out; /* Number of coordinates in output PointSet */
- int npoint; /* Number of points to transform */
- int npoint_out; /* Number of points in output PointSet */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Further initialise to prevent compiler "uninitialised use" messages. */
- d1 = NULL;
- d2 = NULL;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Obtain the number of axes in the two component Frames */
- naxes1 = astGetNaxes( this->frame1 );
- naxes2 = astGetNaxes( this->frame2 );
-
-/* For the total number of axes. */
- nax = naxes1 + naxes2;
-
-/* Obtain the number of input vectors to resolve and the number of coordinate
- values per vector. */
- npoint = astGetNpoint( in );
- ncoord_in = astGetNcoord( in );
-
-/* If OK, check that the number of input coordinates matches the number
- required by the Frame. Report an error if these numbers do not match. */
- if ( astOK && ( ncoord_in != nax ) ) {
- astError( AST__NCPIN, "astResolvePoints(%s): Bad number of coordinate "
- "values (%d) in input %s.", status, astGetClass( this ), ncoord_in,
- astGetClass( in ) );
- astError( AST__NCPIN, "The %s given requires %d coordinate value(s) for "
- "each input point.", status, astGetClass( this ), nax );
- }
-
-/* If still OK, and a non-NULL pointer has been given for the output PointSet,
- then obtain the number of points and number of coordinates per point for
- this PointSet. */
- if ( astOK && out ) {
- npoint_out = astGetNpoint( out );
- ncoord_out = astGetNcoord( out );
-
-/* Check that the dimensions of this PointSet are adequate to accommodate the
- output coordinate values and report an error if they are not. */
- if ( astOK ) {
- if ( npoint_out < npoint ) {
- astError( AST__NOPTS, "astResolvePoints(%s): Too few points (%d) in "
- "output %s.", status, astGetClass( this ), npoint_out,
- astGetClass( out ) );
- astError( AST__NOPTS, "The %s needs space to hold %d transformed "
- "point(s).", status, astGetClass( this ), npoint );
- } else if ( ncoord_out < 2 ) {
- astError( AST__NOCTS, "astResolvePoints(%s): Too few coordinate "
- "values per point (%d) in output %s.", status,
- astGetClass( this ), ncoord_out, astGetClass( out ) );
- astError( AST__NOCTS, "The %s supplied needs space to store 2 "
- "coordinate value(s) per transformed point.", status,
- astGetClass( this ) );
- }
- }
- }
-
-/* If all the validation stages are passed successfully, and a NULL output
- pointer was given, then create a new PointSet to encapsulate the output
- coordinate data. */
- if ( astOK ) {
- if ( !out ) {
- result = astPointSet( npoint, 2, "", status );
-
-/* Otherwise, use the PointSet supplied. */
- } else {
- result = out;
- }
- }
-
-/* Store points to the first two axis arrays in the returned PointSet. */
- ptr_out = astGetPoints( result );
- if( astOK ) {
- d1 = ptr_out[ 0 ];
- d2 = ptr_out[ 1 ];
- }
-
-/* Obtain a pointer to the CmpFrame's axis permutation array. This array
- holds the original axis index for each current Frame axis index. */
- perm = astGetPerm( this );
-
-/* Temporarily permute the coordinates within the supplied PointSet back
- in to the axis order which existed when the CmpFrame was created. */
- astPermPoints( in, 0, perm );
-
-/* Extract the axis values relevant to each of the two sub-Frames from the
- point1 and point2 arrays, at the same time undoing any axis permutation
- applied to the CmpFrame as a whole. */
- p1 = astMalloc( sizeof( double )*( size_t )nax );
- p2 = astMalloc( sizeof( double )*( size_t )nax );
- if( astOK ) {
- for( axis = 0; axis < nax; axis++ ) {
- p1[ perm[ axis ] ] = point1[ axis ];
- p2[ perm[ axis ] ] = point2[ axis ];
- }
- }
-
-/* Project the first two input points into the two component Frames and
- determine the length of the basis vector in each Frame. */
- b1 = astDistance( this->frame1, p1, p2 );
- b2 = astDistance( this->frame2, p1 + naxes1, p2 + naxes1 );
-
-/* If either of these distances is bad or if both are zero, then fill the
- returned PointSet with bad values. */
- if( b1 == AST__BAD || b2 == AST__BAD || ( b1 == 0.0 && b2 == 0.0 ) ) {
- for( ipoint = 0; ipoint < npoint; ipoint++, d1++, d2++ ) {
- *d1 = AST__BAD;
- *d2 = AST__BAD;
- }
-
-/* Otherwise we continue to calculate the resolved components */
- } else if( astOK ){
-
-/* Calculate the total distance between the two points. */
- b = sqrt( b1*b1 + b2*b2 );
-
-/* Create PointSets holding the input values which refer to each of the
- two component Frames. */
- in1 = astPointSet( npoint, naxes1, "", status );
- in2 = astPointSet( npoint, naxes2, "", status );
-
-/* Associated the appropriate subset of the data in the supplied input
- PointSet with each of these two PointSets. */
- astSetSubPoints( in, 0, 0, in1 );
- astSetSubPoints( in, 0, naxes1, in2 );
-
-/* Invoke the astResolvePoints method on each of the sub-Frames. These
- invocations create two new PointSets containing the output values. */
- out1 = astResolvePoints( this->frame1, p1, p2, in1, NULL );
- out2 = astResolvePoints( this->frame2, p1 + naxes1, p2 + naxes1, in2, NULL );
-
-/* Get pointers to the axis values in these pointsets. */
- ptr_out1 = astGetPoints( out1 );
- ptr_out2 = astGetPoints( out2 );
-
-/* More work space */
- p3 = astMalloc( sizeof( double )*( size_t )nax );
- p4 = astMalloc( sizeof( double )*( size_t )nax );
-
-/* Get pointers to the input axis values (these are still permuted to
- undo any axis permutation applied to the CmpFrame). */
- ptr_in = astGetPoints( in );
-
-/* Check pointers can be used safely. */
- if( astOK ) {
-
-/* Get pointers to the parallel (d1) and perpendiclar (d2) components
- within the two sub-Frames (_1 and _2). */
- d1_1 = ptr_out1[ 0 ];
- d2_1 = ptr_out1[ 1 ];
- d1_2 = ptr_out2[ 0 ];
- d2_2 = ptr_out2[ 1 ];
-
-/* Loop round each supplied vector. */
- for( ipoint = 0; ipoint < npoint; ipoint++, d1++, d2++,
- d1_1++, d2_1++,
- d1_2++, d2_2++ ) {
-
-/* We can tolerate a bad parallel distance within a sub-Frame if the
- basis vector has zero length in the sub-Frame, because the bad
- parallel distance will have zero weight in the calculation. Set such
- bad parallel distanced arbitrarily to zero. */
- if( *d1_1 == AST__BAD && b1 == 0.0 ) *d1_1 = 0.0;
- if( *d1_2 == AST__BAD && b2 == 0.0 ) *d1_2 = 0.0;
-
-/* Combine the parallel distances for the individual Frames into a single
- parallel distance for the entire CmpFrame. */
- if( *d1_1 != AST__BAD && *d1_2 != AST__BAD ) {
- *d1 = ( b1*(*d1_1) + b2*(*d1_2) )/b;
-
-/* Offset this distance away from point 1 towards point 2 to get point 4. */
- astOffset( this, p1, p2, *d1, p4 );
-
-/* Now find the perpendicular distance (the distance between point4 and
- point3). */
- for( axis = 0; axis < nax; axis++ ) p3[ axis ] = ptr_in[ axis ][ ipoint ];
- *d2 = astDistance( this, p4, p3 );
-
- } else {
- *d1 = AST__BAD;
- *d2 = AST__BAD;
- }
- }
- }
-
-/* Free resources */
- in1 = astAnnul( in1 );
- in2 = astAnnul( in2 );
- out1 = astAnnul( out1 );
- out2 = astAnnul( out2 );
- p3 = astFree( p3 );
- p4 = astFree( p4 );
- }
-
-/* Free resources */
- p1 = astFree( p1 );
- p2 = astFree( p2 );
-
-/* Re-instate the original ordering of the coordinates within the
- supplied PointSet. */
- astPermPoints( in, 1, perm );
-
-/* Annul the returned PointSet if an error occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-static void SetActiveUnit( AstFrame *this_frame, int value, int *status ){
-/*
-* Name:
-* SetActiveUnit
-
-* Purpose:
-* Specify how the Unit attribute should be used.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void SetActiveUnit( AstFrame *this, int value, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astSetActiveUnit method
-* inherited from the Frame class).
-
-* Description:
-* This function sets the current value of the ActiveUnit flag for a
-* CmpFrame, which controls how the Frame behaves when it is used (by
-* astFindFrame) as a template to match another (target) Frame, or is
-* used as the "to" Frame by astConvert. It determines if the Mapping
-* between the template and target Frames should take differences in
-* axis units into account.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* value
-* The new value to use.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Invoke the parent method to set the ActiveUnitFlag for the CmpFrame,
- then set the same value for the component Frames. */
- (*parent_setactiveunit)( this_frame, value, status );
- astSetActiveUnit( ((AstCmpFrame *)this_frame)->frame1, value );
- astSetActiveUnit( ((AstCmpFrame *)this_frame)->frame2, value );
-}
-
-static void SetFrameFlags( AstFrame *this_frame, int value, int *status ){
-/*
-* Name:
-* SetFrameFlags
-
-* Purpose:
-* Set flags that control current Frame behaviour.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void SetFrameFlags( AstFrame *this, int value, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astSetFrameFlags method
-* inherited from the Frame class).
-
-* Description:
-* This function sets values for the bit mask of flags that control
-* how the CmpFrame behaves. It ensures that both component Frames use
-* the the same bitmask as the parent CmpFrame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* value
-* The new value to use.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Invoke the parent method to set the FrameFlags for the CmpFrame,
- then set the same value for the component Frames. */
- (*parent_setframeflags)( this_frame, value, status );
- astSetFrameFlags( ((AstCmpFrame *)this_frame)->frame1, value );
- astSetFrameFlags( ((AstCmpFrame *)this_frame)->frame2, value );
-}
-
-static int GetActiveUnit( AstFrame *this_frame, int *status ){
-/*
-* Name:
-* GetActiveUnit
-
-* Purpose:
-* Determines how the Unit attribute will be used.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* int GetActiveUnit( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astGetActiveUnit method
-* inherited from the Frame class).
-
-* Description:
-* This function returns the current value of the ActiveUnit flag for a
-* CmpFrame. See the description of the astSetActiveUnit function
-* for a description of the ActiveUnit flag.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The current value of the ActiveUnit flag.
-
-*/
-
-/* Local Variables; */
- int result; /* The ActiveUnit flag for the CmpFrame */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* If the ActiveUnit value has been set for the CmpFrame use the parent
- implementation to get its value. */
- if( astTestActiveUnit( this_frame ) ) {
- result = (*parent_getactiveunit)( this_frame, status );
-
-/* Otherwise, the default is determined by the component Frames. If both
- components have active units, the default for the CmpFrame is "on" */
- } else {
- result = astGetActiveUnit( ((AstCmpFrame *)this_frame)->frame1 ) ||
- astGetActiveUnit( ((AstCmpFrame *)this_frame)->frame2 );
- }
-
-/* Return the result */
- return result;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void SetAttrib( AstObject *this, const char *setting, int *status )
-
-* Class Membership:
-* CmpFrame member function (extends the astSetAttrib method inherited from
-* the Mapping class).
-
-* Description:
-* This function assigns an attribute value for a CmpFrame, the attribute
-* and its value being specified by means of a string of the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in lower
-* case with no white space present. The value to the right of the "="
-* should be a suitable textual representation of the value to be assigned
-* and this will be interpreted according to the attribute's data type.
-* White space surrounding the value is only significant for string
-* attributes.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* setting
-* Pointer to a null terminated string specifying the new attribute
-* value.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This protected method is intended to be invoked by the Object astSet
-* method and makes additional attributes accessible to it.
-*/
-
-/* Local Vaiables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
- AstFrame *pfrm; /* Pointer to primary Frame containing axis */
- char buf1[80]; /* For for un-indexed attribute name */
- char buf2[80]; /* For for indexed attribute name */
- int axis; /* Supplied (1-base) axis index */
- int len; /* Length of setting string */
- int nc; /* Number of characters read by astSscanf */
- int oldrep; /* Original error reporting state */
- int paxis; /* Index of primary Frame axis */
- int ok; /* Have we accessed the attribute succesfully? */
- int value; /* Offset to start fo value string */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_object;
-
-/* Obtain the length of the setting string. */
- len = strlen( setting );
-
-/* Indicate we have not yet acessed the attribute succesfully. */
- ok = 0;
-
-/* First check the supplied attribute name against each of the attribute
- names defined by this class. In fact there is nothing to do here
- since the CmpFrame class currently defines no extra attributes, but
- this may change in the future. */
- if( 0 ) {
-
-
-
-/* If the attribute is not a CmpFrame specific attribute... */
- } else if( astOK ) {
-
-/* We want to allow easy access to the attributes of the component Frames.
- That is, we do not want it to be necessary to extract a Frame from
- its parent CmpFrame in order to access its attributes. For this reason
- we first temporarily switch off error reporting so that if an attempt
- to access the attribute fails, we can try a different approach. */
- oldrep = astReporting( 0 );
-
-/* Our first attempt is to see if the attribute is recognised by the parent
- class (Frame). */
- (*parent_setattrib)( this_object, setting, status );
-
-/* Indicate success. */
- if( astOK ) {
- ok = 1;
-
-/* Otherwise, clear the error condition so that we can try a different
- approach. */
- } else {
- astClearStatus;
-
-/* If the attribute is qualified by an axis index, try accessing it as an
- attribute of the primary Frame containing the specified index. */
- if ( nc = 0,
- ( 2 == astSscanf( setting, "%[^(](%d)= %n%*s %n", buf1, &axis,
- &value, &nc ) ) && ( nc >= len ) ) {
-
-/* Find the primary Frame containing the specified axis. */
- astPrimaryFrame( this, axis - 1, &pfrm, &paxis );
- if( astOK ) {
-
-/* Create a new setting with the same name but with the axis index
- appropriate to the primary Frame. */
- sprintf( buf2, "%s(%d)=%s", buf1, paxis + 1, setting+value );
-
-/* Attempt to access the attribute. */
- astSetAttrib( pfrm, buf2 );
-
-/* Indicate success. */
- if( astOK ) {
- ok = 1;
-
-/* Otherwise clear the status value, and try again without any axis index. */
- } else {
- astClearStatus;
- sprintf( buf2, "%s=%s", buf1, setting+value );
- astSetAttrib( pfrm, buf2 );
-
-/* Indicate success, or clear the status value. */
- if( astOK ) {
- ok = 1;
- } else {
- astClearStatus;
- }
- }
-
-/* Free the primary frame pointer. */
- pfrm = astAnnul( pfrm );
- }
-
-/* If the attribute is not qualified by an axis index, try accessing it
- using the primary Frame of each axis in turn. */
- } else {
-
-/* Loop round all axes attribute. */
- for( axis = 0; axis < astGetNaxes( this ); axis++ ) {
-
-/* Get the primary Frame containing this axis. */
- astPrimaryFrame( this, axis, &pfrm, &paxis );
-
-/* Attempt to access the attribute as an attribute of the primary Frame. */
- astSetAttrib( pfrm, setting );
-
-/* Free the primary Frame pointer. */
- pfrm = astAnnul( pfrm );
-
-/* Indicate success, or clear the status value. */
- if( astOK ) {
- ok = 1;
- } else {
- astClearStatus;
- }
- }
- }
- }
-
-/* Re-instate the original error reporting state. */
- astReporting( oldrep );
-
- }
-
-/* Report an error if the attribute could not be accessed. */
- if( !ok && astOK ) {
- astError( AST__BADAT, "astSet: The attribute setting \"%s\" is invalid "
- "for the given %s.", status, setting, astGetClass( this ) );
- }
-}
-
-static void SetAxis( AstFrame *this_frame, int axis, AstAxis *newaxis, int *status ) {
-/*
-* Name:
-* SetAxis
-
-* Purpose:
-* Set a new Axis for a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void astSetAxis( AstFrame *this, int axis, AstAxis *newaxis, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astSetAxis method
-* inherited from the Frame class).
-
-* Description:
-* This function allows a new Axis object to be associated with one
-* of the axes of a CmpFrame, replacing the previous one. Each Axis
-* object contains a description of the quantity represented along
-* one of the CmpFrame's axes, so this function allows this
-* description to be exchanged for another one.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* axis
-* The index (zero-based) of the CmpFrame axis whose associated
-* Axis object is to be replaced.
-* newaxis
-* Pointer to the new Axis object.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
- int naxes1; /* Number of axes in frame1 */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Validate and permute the axis index supplied. */
- axis = astValidateAxis( this, axis, "astSetAxis" );
-
-/* Determine the number of axes in the first component Frame. */
- naxes1 = astGetNaxes( this->frame1 );
- if ( astOK ) {
-
-/* Decide which Frame contains the axis and invoke its astSetAxis
- method to set the new Axis. */
- if ( axis < naxes1 ) {
- astSetAxis( this->frame1, axis, newaxis );
- } else {
- astSetAxis( this->frame2, axis - naxes1, newaxis );
- }
- }
-}
-
-static void SetDut1( AstFrame *this_frame, double val, int *status ) {
-/*
-* Name:
-* SetDut1
-
-* Purpose:
-* Set the value of the Dut1 attribute for a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void SetDut1( AstFrame *this, double val, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astSetDut1 method
-* inherited from the Frame class).
-
-* Description:
-* This function sets the Dut1 value in the component Frames as
-* well as this CmpFrame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* val
-* New Dut1 value.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Invoke the parent method to set the CmpFrame Dut1 value. */
- (*parent_setdut1)( this_frame, val, status );
-
-/* Now set the Dut1 attribute in the two component Frames. */
- astSetDut1( this->frame1, val );
- astSetDut1( this->frame2, val );
-}
-
-static void SetEpoch( AstFrame *this_frame, double val, int *status ) {
-/*
-* Name:
-* SetEpoch
-
-* Purpose:
-* Set the value of the Epoch attribute for a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void SetEpoch( AstFrame *this, double val, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astSetEpoch method
-* inherited from the Frame class).
-
-* Description:
-* This function sets the Epoch value in the component Frames as
-* well as this CmpFrame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* val
-* New Epoch value.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Invoke the parent method to set the CmpFrame epoch. */
- (*parent_setepoch)( this_frame, val, status );
-
-/* Now set the Epoch attribute in the two component Frames. */
- astSetEpoch( this->frame1, val );
- astSetEpoch( this->frame2, val );
-}
-
-static void SetObsAlt( AstFrame *this_frame, double val, int *status ) {
-/*
-* Name:
-* SetObsAlt
-
-* Purpose:
-* Set the value of the ObsAlt attribute for a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void SetObsAlt( AstFrame *this, double val, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astSetObsAlt method
-* inherited from the Frame class).
-
-* Description:
-* This function sets the ObsAlt value in the component Frames as
-* well as this CmpFrame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* val
-* New ObsAlt value.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Invoke the parent method to set the CmpFrame ObsAlt. */
- (*parent_setobsalt)( this_frame, val, status );
-
-/* Now set the ObsAlt attribute in the two component Frames. */
- astSetObsAlt( this->frame1, val );
- astSetObsAlt( this->frame2, val );
-}
-
-static void SetObsLat( AstFrame *this_frame, double val, int *status ) {
-/*
-* Name:
-* SetObsLat
-
-* Purpose:
-* Set the value of the ObsLat attribute for a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void SetObsLat( AstFrame *this, double val, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astSetObsLat method
-* inherited from the Frame class).
-
-* Description:
-* This function sets the ObsLat value in the component Frames as
-* well as this CmpFrame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* val
-* New ObsLat value.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Invoke the parent method to set the CmpFrame ObsLat. */
- (*parent_setobslat)( this_frame, val, status );
-
-/* Now set the ObsLat attribute in the two component Frames. */
- astSetObsLat( this->frame1, val );
- astSetObsLat( this->frame2, val );
-}
-
-static void SetObsLon( AstFrame *this_frame, double val, int *status ) {
-/*
-* Name:
-* SetObsLon
-
-* Purpose:
-* Set the value of the ObsLon attribute for a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* void SetObsLon( AstFrame *this, double val, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astSetObsLon method
-* inherited from the Frame class).
-
-* Description:
-* This function sets the ObsLon value in the component Frames as
-* well as this CmpFrame.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* val
-* New ObsLon value.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Invoke the parent method to set the CmpFrame ObsLon. */
- (*parent_setobslon)( this_frame, val, status );
-
-/* Now set the ObsLon attribute in the two component Frames. */
- astSetObsLon( this->frame1, val );
- astSetObsLon( this->frame2, val );
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* Simplify
-
-* Purpose:
-* Simplify the Mapping represented by a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* AstMapping *Simplify( AstMapping *this, int *status )
-
-* Class Membership:
-* CmpFrame method (over-rides the astSimplify method inherited
-* from the Frame class).
-
-* Description:
-* This function simplifies the Mapping represented by a CmpFrame,
-* by using the astSimplify method on each of the component Frames and
-* combining the resulting Mappings together.
-
-* Parameters:
-* this
-* Pointer to the original CmpFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A new pointer to the simplified CmpFrame.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstCmpFrame *new; /* Pointer to new CmpFrame structure */
- AstCmpFrame *this; /* Pointer to original CmpFrame structure */
- AstMapping *map1; /* Intermediate Mapping */
- AstMapping *map2; /* Intermediate Mapping */
- AstMapping *result; /* Result pointer to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_mapping;
-
-/* Simplify each of the component Frames. */
- map1 = astSimplify( this->frame1 );
- map2 = astSimplify( this->frame2 );
-
-/* Did any usable simplification occur? */
- if( astIsAFrame( map1 ) && astIsAFrame( map2 ) &&
- ( map1 != (AstMapping *) this->frame1 ||
- map2 != (AstMapping *) this->frame2 ) ) {
-
-/* Make a copy of the supplied CmpFrame. */
- new = astCopy( this );
- result = (AstMapping *) new;
-
-/* Replace the two component Frames with the simplified Frames. */
- (void) astAnnul( new->frame1 );
- (void) astAnnul( new->frame2 );
- new->frame1 = (AstFrame *) map1;
- new->frame2 = (AstFrame *) map2;
-
-/* If no simplication took place, annul the Mapping pointers and return a
- clone of the supplied pointer. */
- } else {
- map1 = astAnnul( map1 );
- map2 = astAnnul( map2 );
- result= astClone( this );
- }
-
-/* If an error occurred, annul the returned pointer. */
- if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static AstSystemType SystemCode( AstFrame *this, const char *system, int *status ) {
-/*
-* Name:
-* SystemCode
-
-* Purpose:
-* Convert a string into a coordinate system type code.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* AstSystemType SystemCode( AstFrame *this, const char *system, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astSystemCode method
-* inherited from the Frame class).
-
-* Description:
-* This function converts a string used for the external
-* description of a coordinate system into a CmpFrame
-* coordinate system type code (System attribute value). It is the
-* inverse of the astSystemString function.
-
-* Parameters:
-* this
-* The Frame.
-* system
-* Pointer to a constant null-terminated string containing the
-* external description of the coordinate system.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The System type code.
-
-* Notes:
-* - A value of AST__BADSYSTEM is returned if the coordinate
-* system description was not recognised. This does not produce an
-* error.
-* - A value of AST__BADSYSTEM is also returned if this function
-* is invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- AstSystemType result; /* Result value to return */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Match the "system" string against each possibility and assign the
- result. The CmpFrame class only supports a single system "Compound". */
- if ( astChrMatch( "Compound", system ) ) {
- result = AST__COMP;
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *SystemString( AstFrame *this, AstSystemType system, int *status ) {
-/*
-* Name:
-* SystemString
-
-* Purpose:
-* Convert a coordinate system type code into a string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* const char *SystemString( AstFrame *this, AstSystemType system, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astSystemString method
-* inherited from the Frame class).
-
-* Description:
-* This function converts a CmpFrame coordinate system type code
-* (System attribute value) into a string suitable for use as an
-* external representation of the coordinate system type.
-
-* Parameters:
-* this
-* The Frame.
-* system
-* The coordinate system type code.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a constant null-terminated string containing the
-* textual equivalent of the type code supplied.
-
-* Notes:
-* - A NULL pointer value is returned if the coordinate system
-* code was not recognised. This does not produce an error.
-* - A NULL pointer value is also returned if this function is
-* invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- const char *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Match the "system" value against each possibility and convert to a
- string pointer. (Where possible, return the same string as would be
- used in the FITS WCS representation of the coordinate system). A
- CmpFrame only allows a single System value, "Compound". */
- switch ( system ) {
- case AST__COMP:
- result = "Compound";
- break;
- }
-
-/* Return the result pointer. */
- return result;
-}
-
-static int SubFrame( AstFrame *target_frame, AstFrame *template,
- int result_naxes, const int *target_axes,
- const int *template_axes, AstMapping **map,
- AstFrame **result, int *status ) {
-/*
-* Name:
-* SubFrame
-
-* Purpose:
-* Select axes from a CmpFrame and convert to the new coordinate system.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* int SubFrame( AstFrame *target, AstFrame *template,
-* int result_naxes, const int *target_axes,
-* const int *template_axes, AstMapping **map,
-* AstFrame **result, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the protected astSubFrame
-* method inherited from the Frame class).
-
-* Description:
-* This function selects a requested sub-set (or super-set) of the
-* axes from a "target" CmpFrame and creates a new Frame with
-* copies of the selected axes assembled in the requested order. It
-* then optionally overlays the attributes of a "template" Frame on
-* to the result. It returns both the resulting Frame and a Mapping
-* that describes how to convert between the coordinate systems
-* described by the target and result Frames. If necessary, this
-* Mapping takes account of any differences in the Frames'
-* attributes due to the influence of the template.
-
-* Parameters:
-* target
-* Pointer to the target CmpFrame, from which axes are to be selected.
-* template
-* Pointer to the template Frame, from which new attributes for
-* the result Frame are to be obtained. Optionally, this may be
-* NULL, in which case no overlaying of template attributes will
-* be performed.
-* result_naxes
-* Number of axes to be selected from the target Frame. This
-* number may be greater than or less than the number of axes in
-* this Frame (or equal).
-* target_axes
-* Pointer to an array of int with result_naxes elements, giving
-* a list of the (zero-based) axis indices of the axes to be
-* selected from the target CmpFrame. The order in which these
-* are given determines the order in which the axes appear in
-* the result Frame. If any of the values in this array is set
-* to -1, the corresponding result axis will not be derived from
-* the target Frame, but will be assigned default attributes
-* instead.
-* template_axes
-* Pointer to an array of int with result_naxes elements. This
-* should contain a list of the template axes (given as
-* zero-based axis indices) with which the axes of the result
-* Frame are to be associated. This array determines which axes
-* are used when overlaying axis-dependent attributes of the
-* template on to the result. If any element of this array is
-* set to -1, the corresponding result axis will not receive any
-* template attributes.
-*
-* If the template argument is given as NULL, this array is not
-* used and a NULL pointer may also be supplied here.
-* map
-* Address of a location to receive a pointer to the returned
-* Mapping. The forward transformation of this Mapping will
-* describe how to convert coordinates from the coordinate
-* system described by the target CmpFrame to that described by
-* the result Frame. The inverse transformation will convert in
-* the opposite direction.
-* result
-* Address of a location to receive a pointer to the result Frame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if coordinate conversion is
-* possible between the target and the result Frame. Otherwise zero
-* is returned and *map and *result are returned as NULL (but this
-* will not in itself result in an error condition). In general,
-* coordinate conversion should always be possible if no template
-* Frame is supplied but may not always be possible otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-
-* Implementation Deficiencies:
-* - It is not clear that the method of handling "extra" axes is
-* the best one, nor is the method of setting the "following" flag
-* necessarily correct. However, it is also not obvious that this
-* feature will ever be needed, so improvements have been left
-* until the requirement is clearer.
-*/
-
-/* Local Variables: */
- AstCmpFrame *target; /* Pointer to target CmpFrame structure */
- AstFrame *sub_result1; /* Pointer to result Frame for frame1 */
- AstFrame *sub_result2; /* Pointer to result Frame for frame2 */
- AstMapping *permmap_pref; /* Pointer to PermMap used as a prefix */
- AstMapping *permmap_suff; /* Pointer to PermMap used as a suffix */
- AstMapping *sub_map1; /* Pointer to Mapping from frame1 */
- AstMapping *sub_map2; /* Pointer to Mapping from frame2 */
- AstMapping *sub_map; /* Pointer to combined component Mappings */
- AstMapping *tmp_map; /* Temporary Mapping pointer */
- const int *perm; /* Pointer to axis permutation array */
- int *frame_choice; /* Pointer to flag array for partitioning */
- int *inperm_pref; /* Pointer to prefix permutation array */
- int *inperm_suff; /* Pointer to suffix permutation array */
- int *outperm_pref; /* Pointer to prefix permutation array */
- int *outperm_suff; /* Pointer to suffix permutation array */
- int *target_axes1; /* Pointer to frame1 axis selection array */
- int *target_axes2; /* Pointer to frame2 axis selection array */
- int *template_axes1; /* Pointer to frame1 template axis array */
- int *template_axes2; /* Pointer to frame2 template axis array */
- int axis_p; /* Permuted axis index */
- int following; /* Associate extra axis and following axis? */
- int i1; /* Count of axes obtained from frame1 */
- int i2; /* Count of axes obtained from frame2 */
- int match; /* Result value to return */
- int n1; /* Number of axes obtained from frame1 */
- int n2; /* Number of axes obtained from frame2 */
- int naxes1; /* Number of axes in frame1 */
- int naxes2; /* Number of axes in frame2 */
- int naxes; /* Number of axes in target */
- int result_axis; /* Result axis index */
- int target_axis; /* Target axis index */
-
-/* Initialise the returned values. */
- *map = NULL;
- *result = NULL;
- match = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return match;
-
-/* Obtain a pointer to the target CmpFrame structure. */
- target = (AstCmpFrame *) target_frame;
-
-/* Obtain the number of axes in the target CmpFrame and in each of its
- component Frames. */
- naxes = astGetNaxes( target );
- naxes1 = astGetNaxes( target->frame1 );
- naxes2 = astGetNaxes( target->frame2 );
-
-/* Iinitialise variables to avoid compiler warnings. */
- template_axes1 = NULL;
- template_axes2 = NULL;
- n1 = 0;
- n2 = 0;
-
-/* Obtain the axis permutation array for the target CmpFrame. */
- perm = astGetPerm( target );
-
-/* Determine how any "extra" axes should be associated with existing
- axes (i.e. whether to associate with the preceding or following
- axis). */
- following = astGetMatchEnd( target );
-
-/* Split selected axes into two groups. */
-/* ------------------------------------ */
-/* Allocate a workspace array to hold the choice of component Frame
- for each selected target axis. */
- frame_choice = astMalloc( sizeof( int ) * (size_t) result_naxes );
-
-/* Obtain an array of flags indicating whether each selected target
- axis should be obtained from the first or second component
- Frame. */
- PartitionSelection( result_naxes, target_axes, perm, naxes1, naxes2,
- frame_choice, following, status );
-
-/* Allocate two arrays to hold the axis indices that refer to each of
- the component Frames. The maximum number of indices is given by
- "result_naxes" (if all the selected axes come from one component
- Frame alone). */
- target_axes1 = astMalloc( sizeof( int ) * (size_t) result_naxes );
- target_axes2 = astMalloc( sizeof( int ) * (size_t) result_naxes );
-
-/* If a template Frame has been provided, allocate similar arrays to
- hold the indices of the two groups of template axes. */
- if ( template ) {
- template_axes1 = astMalloc( sizeof( int ) * (size_t) result_naxes );
- template_axes2 = astMalloc( sizeof( int ) * (size_t) result_naxes );
- }
-
-/* Initialise the count of axes selected from each component Frame. */
- if ( astOK ) {
- n1 = n2 = 0;
-
-/* Loop through each axis index to be selected from the CmpFrame. */
- for ( result_axis = 0; result_axis < result_naxes; result_axis++ ) {
- target_axis = target_axes[ result_axis ];
-
-/* Determine if the index refers to a valid CmpFrame axis. If it does,
- then permute the index, otherwise set it to -1. */
- if ( ( target_axis >= 0 ) && ( target_axis < naxes ) ) {
- axis_p = perm[ target_axis ];
- } else {
- axis_p = -1;
- }
-
-/* If the axis is to be selected from the first component Frame, store
- the index of the axis to be selected. Also store the associated
- template axis index (if any). */
- if ( frame_choice[ result_axis ] == 1 ) {
- target_axes1[ n1 ] = axis_p;
- if ( template ) {
- template_axes1[ n1 ] = template_axes[ result_axis ];
- }
-
-/* Count the axes selected from the first component Frame. */
- n1++;
-
-/* If the axis is to be selected from the second component Frame,
- store the index of the index to be selected (adjusting for the
- offset in axis numbering). Also store the associated template axis
- index (if any) and count the axes selected. */
- } else {
- target_axes2[ n2 ] = ( axis_p == -1 ) ? -1 : axis_p - naxes1;
- if ( template ) {
- template_axes2[ n2 ] = template_axes[ result_axis ];
- }
- n2++;
- }
- }
- }
-
-/* Select from first component Frame only. */
-/* --------------------------------------- */
-/* If all the selected axes come from the first component Frame, use
- that Frame's astSubFrame method to select them (and overlay the
- template attributes if required). */
- if ( astOK ) {
- if ( n1 && !n2 ) {
- sub_map1 = NULL;
- match = astSubFrame( target->frame1, template, n1, target_axes1,
- template_axes1, &sub_map1, result );
-
-/* If this is successful, the "result" Frame will be ready to return
- and "sub_map1" will point at a Mapping that converts from the first
- component Frame to the "result" Frame. We must now modify this
- mapping to account for the CmpFrame's axis permutation array
- (i.e. make it refer back to the CmpFrame's original axis order). */
- if ( astOK && match ) {
-
-/* To do this we must prefix the Mapping with a PermMap which converts
- between the target CmpFrame axes and those of the first component
- Frame. Allocate space for the permutation arrays required. */
- inperm_pref = astMalloc( sizeof( int ) * (size_t) naxes );
- outperm_pref = astMalloc( sizeof( int ) * (size_t) naxes1 );
- if ( astOK ) {
-
-/* Permute each target axis index. */
- for ( target_axis = 0; target_axis < naxes; target_axis++ ) {
- axis_p = perm[ target_axis ];
-
-/* Set up arrays that describe this permutation and its inverse. */
- if ( axis_p < naxes1 ) {
- inperm_pref[ target_axis ] = axis_p;
- outperm_pref[ axis_p ] = target_axis;
-
-/* Note which target axes do not correspond with axes in the first
- component Frame and assign -1 (so the PermMap will assign "bad"
- coordinate values to these axes). */
- } else {
- inperm_pref[ target_axis ] = -1;
- }
- }
-
-/* Use these permutation arrays to construct the PermMap. Prefix this
- to the Mapping obtained earlier to give the final Mapping to be
- returned. */
- permmap_pref =
- (AstMapping *) astPermMap( naxes, inperm_pref,
- naxes1, outperm_pref, NULL, "", status );
- *map = (AstMapping *) astCmpMap( permmap_pref, sub_map1, 1, "", status );
-
-/* Annul the PermMap pointer. */
- permmap_pref = astAnnul( permmap_pref );
- }
-
-/* Free the permutation arrays and annul the original Mapping pointer. */
- inperm_pref = astFree( inperm_pref );
- outperm_pref = astFree( outperm_pref );
- sub_map1 = astAnnul( sub_map1 );
- }
-
-/* Select from second component Frame only. */
-/* ---------------------------------------- */
-/* If all the selected axes come from the second component Frame, use
- that Frame's astSubFrame method to select them (and overlay the
- template attributes if required). */
- } else if ( n2 && !n1 ) {
- sub_map2 = NULL;
- match = astSubFrame( target->frame2, template, n2, target_axes2,
- template_axes2, &sub_map2, result );
-
-/* If this is successful, the "result" Frame will be ready to return
- and "sub_map2" will point at a Mapping that converts from the second
- component Frame to the "result" Frame. We must now modify this
- mapping to account for the CmpFrame's axis permutation array
- (i.e. make it refer back to the CmpFrame's original axis order). */
- if ( astOK && match ) {
-
-/* To do this we must prefix the Mapping with a PermMap which converts
- between the target CmpFrame axes and those of the second component
- Frame. Allocate space for the permutation arrays required. */
- inperm_pref = astMalloc( sizeof( int ) * (size_t) naxes );
- outperm_pref = astMalloc( sizeof( int ) * (size_t) naxes2 );
- if ( astOK ) {
-
-/* Permute each target axis index. */
- for ( target_axis = 0; target_axis < naxes; target_axis++ ) {
- axis_p = perm[ target_axis ];
-
-/* Set up arrays that describe this permutation and its inverse,
- allowing for the shift in axis numbering for the second component
- Frame. */
- if ( axis_p >= naxes1 ) {
- inperm_pref[ target_axis ] = axis_p - naxes1;
- outperm_pref[ axis_p - naxes1 ] = target_axis;
-
-/* Note which target axes do not correspond with axes in the second
- component Frame and assign -1 (so the PermMap will assign "bad"
- coordinate values to these axes). */
- } else {
- inperm_pref[ target_axis ] = -1;
- }
- }
-
-/* Use these permutation arrays to construct the PermMap. Prefix this
- to the Mapping obtained earlier to give the final Mapping to be
- returned. */
- permmap_pref =
- (AstMapping *) astPermMap( naxes, inperm_pref,
- naxes2, outperm_pref, NULL, "", status );
-
- *map = (AstMapping *) astCmpMap( permmap_pref, sub_map2, 1, "", status );
-
-/* Annul the PermMap pointer. */
- permmap_pref = astAnnul( permmap_pref );
- }
-
-/* Free the permutation arrays and annul the original Mapping pointer. */
- inperm_pref = astFree( inperm_pref );
- outperm_pref = astFree( outperm_pref );
- sub_map2 = astAnnul( sub_map2 );
- }
-
-/* Select from both component Frames. */
-/* ---------------------------------- */
-/* If the selected axes come from both component Frames, then use both
- Frames' astSubFrame methods to select the required axes from each
- of them (and overlay the template attributes if required). */
- } else {
- sub_map1 = NULL;
- sub_map2 = NULL;
- sub_result1 = NULL;
- sub_result2 = NULL;
- match = astSubFrame( target->frame1, template, n1, target_axes1,
- template_axes1, &sub_map1, &sub_result1 );
- if ( match ) {
- match = astSubFrame( target->frame2, template, n2, target_axes2,
- template_axes2, &sub_map2, &sub_result2 );
- }
-
-/* If this is successful, the two "result" Frames will need to be
- combined together (in a CmpFrame) in order to produce the required
- result, and the two accompanying Mappings will also need to be
- applied in parallel (in a CmpMap). However, the axis order
- resulting from this will still not match that required.
-
- On the target side, this is because of the target's axis
- permutation array. On the result side, it is because the result
- axes cannot be inter-mingled (as may be required) simply by joining
- the Frames and Mappings in parallel. The resulting CmpFrame axes
- will therefore need permuting into the required final order. */
- if ( astOK && match ) {
-
-/* In addition, the Mappings will need to be both prefixed and
- suffixed with suitable PermMaps which re-order the axes. Allocate
- space for the permutation arrays required. */
- inperm_pref = astMalloc( sizeof( int ) * (size_t) naxes );
- outperm_pref = astMalloc( sizeof( int ) * (size_t) naxes );
- inperm_suff = astMalloc( sizeof( int ) * (size_t) result_naxes );
- outperm_suff = astMalloc( sizeof( int ) * (size_t) result_naxes );
- if ( astOK ) {
-
-/* Set up permutation arrays to construct the prefix PermMap. This
- simply represents the target CmpFrame's axis permutation array and
- its inverse. */
- for ( target_axis = 0; target_axis < naxes; target_axis++ ) {
- axis_p = perm[ target_axis ];
- inperm_pref[ target_axis ] = axis_p;
- outperm_pref[ axis_p ] = target_axis;
- }
-
-/* Set up permutation arrays to construct the suffix PermMap. This
- represents the way the original axis selections were partitioned
- between the two component frames. */
- i1 = i2 = 0;
- for ( result_axis = 0; result_axis < result_naxes;
- result_axis++ ) {
-
-/* For each result axis derived from the first component Frame, set up
- permutation array elements to link the output axis with the next
- component Frame axis. Count the number of component Frame axes
- used. */
- if ( frame_choice[ result_axis ] == 1 ) {
- inperm_suff[ i1 ] = result_axis;
- outperm_suff[ result_axis ] = i1;
- i1++;
-
-/* Similarly link the axes derived from the second component Frame
- with the appropriate axes of that Frame. */
- } else {
- inperm_suff[ n1 + i2 ] = result_axis;
- outperm_suff[ result_axis ] = n1 + i2;
- i2++;
- }
- }
-
-/* Combine the Mappings supplied by the two component Frames in
- parallel. */
- sub_map = (AstMapping *) astCmpMap( sub_map1, sub_map2, 0, "", status );
-
-/* Create the PermMaps which are to be used as a prefix and a suffix. */
- permmap_pref =
- (AstMapping *) astPermMap( naxes, inperm_pref,
- naxes, outperm_pref, NULL, "", status );
- permmap_suff =
- (AstMapping *) astPermMap( result_naxes, inperm_suff,
- result_naxes, outperm_suff,
- NULL, "", status );
-
-/* Add the prefix and suffix PermMaps. */
- tmp_map = (AstMapping *) astCmpMap( permmap_pref, sub_map,
- 1, "", status );
- *map = (AstMapping *) astCmpMap( tmp_map, permmap_suff, 1, "", status );
-
-/* Annul the Mapping pointers that are no longer required. */
- sub_map = astAnnul( sub_map );
- permmap_pref = astAnnul( permmap_pref );
- permmap_suff = astAnnul( permmap_suff );
- tmp_map = astAnnul( tmp_map );
-
-/* Create the result CmpFrame by combining the two component result
- Frames and permuting the resulting axes into the required order. */
- *result = (AstFrame *) astCmpFrame( sub_result1, sub_result2,
- "", status );
- astPermAxes( *result, outperm_suff );
-
-/* ADDED BY DSB (5-FEB-2001). Without this, properties of the target frame
- (most importantly, Domain) are not transferred to the result frame.
- This results in Frames not matching which should match.
- =================================================================== */
-
-/* If the result CmpFrame includes all the axes of the target CmpFrame,
- then it should inherit any Domain and Title attributes set in the target
- CmpFrame. */
- if( result_naxes == naxes ) {
-
- if( astTestDomain( target ) ) {
- astSetDomain( *result, astGetDomain( target ) );
- }
-
- if( astTestTitle( target ) ) {
- astSetTitle( *result, astGetTitle( target ) );
- }
- }
-
-/* End of DSB insertion (5/2/01).
- =================================================================== */
- }
-
-/* Free the temporary permutation arrays. */
- inperm_pref = astFree( inperm_pref );
- inperm_suff = astFree( inperm_suff );
- outperm_pref = astFree( outperm_pref );
- outperm_suff = astFree( outperm_suff );
- }
-
-/* Annul the Mapping and Frame pointers obtained from each component
- Frame. */
- if( sub_map1 ) sub_map1 = astAnnul( sub_map1 );
- if( sub_map2 ) sub_map2 = astAnnul( sub_map2 );
- if( sub_result1 ) sub_result1 = astAnnul( sub_result1 );
- if( sub_result2 ) sub_result2 = astAnnul( sub_result2 );
- }
- }
-
-/* Free the workspace used to store the choice of component Frame and the
- axis indices for each component Frame. */
- frame_choice = astFree( frame_choice );
- target_axes1 = astFree( target_axes1 );
- target_axes2 = astFree( target_axes2 );
-
-/* If necessary, also free the memory used for the template axis
- indices. */
- if ( template ) {
- template_axes1 = astFree( template_axes1 );
- template_axes2 = astFree( template_axes2 );
- }
-
-/* If an error occurred, clean up by annulling the result pointers and
- returning appropriate null values. */
- if ( !astOK ) {
- *map = astAnnul( *map );
- *result = astAnnul( *result );
- match = 0;
- }
-
-/* Return the result. */
- return match;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astTestAttrib protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a CmpFrame's attributes.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - This function uses one-based axis numbering so that it is
-* suitable for external (public) use.
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
- AstFrame *pfrm; /* Pointer to primary Frame containing axis */
- char buf1[80]; /* For for un-indexed attribute name */
- char buf2[80]; /* For for indexed attribute name */
- int axis; /* Supplied (1-base) axis index */
- int len; /* Length of attrib string */
- int nc; /* Length of string used so far */
- int oldrep; /* Original error reporting state */
- int paxis; /* Index of primary Frame axis */
- int result; /* Result value to return */
- int ok; /* Has the attribute been accessed succesfully? */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_object;
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Indicate we have not yet acessed the attribute succesfully. */
- ok = 0;
-
-/* First check the supplied attribute name against each of the attribute
- names defined by this class. In fact there is nothing to do here
- since the CmpFrame class currently defines no extra attributes, but
- this may change in the future. */
- if( 0 ) {
-
-
-
-/* If the attribute is not a CmpFrame specific attribute... */
- } else if( astOK ) {
-
-/* We want to allow easy access to the attributes of the component Frames.
- That is, we do not want it to be necessary to extract a Frame from
- its parent CmpFrame in order to access its attributes. For this reason
- we first temporarily switch off error reporting so that if an attempt
- to access the attribute fails, we can try a different approach. */
- oldrep = astReporting( 0 );
-
-/* Our first attempt is to see if the attribute is recognised by the parent
- class (Frame). */
- result = (*parent_testattrib)( this_object, attrib, status );
-
-/* Indicate success. */
- if( astOK ) {
- ok = 1;
-
-/* Otherwise, clear the error condition so that we can try a different
- approach. */
- } else {
- astClearStatus;
-
-/* If the attribute is qualified by an axis index, try accessing it as an
- attribute of the primary Frame containing the specified index. */
- if ( nc = 0,
- ( 2 == astSscanf( attrib, "%[^(](%d)%n", buf1, &axis, &nc ) )
- && ( nc >= len ) ) {
-
-/* Find the primary Frame containing the specified axis. */
- astPrimaryFrame( this, axis - 1, &pfrm, &paxis );
- if( astOK ) {
-
-/* Create a new attribute with the same name but with the axis index
- appropriate to the primary Frame. */
- sprintf( buf2, "%s(%d)", buf1, paxis + 1 );
-
-/* Attempt to access the attribute. */
- result = astTestAttrib( pfrm, buf2 );
-
-/* Indicate success. */
- if( astOK ) {
- ok = 1;
-
-/* Otherwise clear the status value, and try again without any axis index. */
- } else {
- astClearStatus;
- result = astTestAttrib( pfrm, buf1 );
-
-/* Indicate success, or clear the status value. */
- if( astOK ) {
- ok = 1;
- } else {
- astClearStatus;
- }
- }
-
-/* Free the primary frame pointer. */
- pfrm = astAnnul( pfrm );
- }
-
-/* If the attribute is not qualified by an axis index, try accessing it
- using the primary Frame of each axis in turn. */
- } else {
-
-/* Loop round all axes, until one is found which defines the specified
- attribute. */
- for( axis = 0; axis < astGetNaxes( this ) && !ok; axis++ ) {
-
-/* Get the primary Frame containing this axis. */
- astPrimaryFrame( this, axis, &pfrm, &paxis );
-
-/* Attempt to access the attribute as an attribute of the primary Frame. */
- result = astTestAttrib( pfrm, attrib );
-
-/* Indicate success, or clear the status value. */
- if( astOK ) {
- ok = 1;
- } else {
- astClearStatus;
- }
-
-/* Free the primary Frame pointer. */
- pfrm = astAnnul( pfrm );
-
- }
- }
- }
-
-/* Re-instate the original error reporting state. */
- astReporting( oldrep );
-
- }
-
-/* Report an error if the attribute could not be accessed. */
- if( !ok && astOK ) {
- astError( AST__BADAT, "astTest: The %s given does not have an attribute "
- "called \"%s\".", status, astGetClass( this ), attrib );
- }
-
-/* Return the result. */
- return result;
-
-}
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astTransform method
-* inherited from the Frame class).
-
-* Description:
-* This function takes a CmpFrame and a set of points encapsulated
-* in a PointSet, and applies the coordinate transformation equivalent
-* to the CmpFrame (this will normally be a UnitMap but may not be if
-* the CmpFrame contains any Regions).
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - The number of coordinate values per point in the input
-* PointSet must match the number of axes in the CmpFrame.
-* - If an output PointSet is supplied, it must have space for
-* sufficient number of points and coordinate values per point to
-* accommodate the result (e.g. the number of CmpFrame axes). Any
-* excess space will be ignored.
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to original CmpFrame structure */
- AstCmpMap *map2; /* Intermediate Mapping */
- AstCmpMap *map; /* Equivalent Mapping */
- AstPermMap *pmap; /* Intermediate PermMap */
- AstPointSet *result; /* Pointer value to return */
- const int *inperm; /* Pointer to axis permutation array */
- int *outperm; /* Pointer to inverse axis permutation array */
- int i; /* External axis index */
- int naxes; /* Number of axes in CmpFrame */
- int perm; /* Is there an axis permutation to undo? */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_mapping;
-
-/* Form a parallel CmpMap from the two component Frames. */
- map = astCmpMap( this->frame1, this->frame2, 0, "", status );
-
-/* The above CmpMap does not take into account any axis permutation
- which has been applied to the CmpFrame as a whole (as opposed to axis
- permutations applied to the individual component Frames, which are taken
- care of by the Transform methods of the individual Frames). Therefore
- we need to modify the Mapping by adding a PermMap at the start which
- converts from external axis numbering to internal axis numbering, and a
- corresponding PermMap at the end which converts from internal to external
- axis numbering. Obtain the number of axes in the CmpFrame */
- naxes = astGetNaxes( this );
-
-/* Obtain a pointer to the CmpFrame's axis permutation array. This
- contains internal axis numbers and is indexed by external axis number. */
- inperm = astGetPerm( this );
-
-/* Check if there is any axis permutation to be performed. */
- perm = 0;
- for( i = 0; i < naxes; i++ ) {
- if( inperm[ i ] != i ) {
- perm = 1;
- break;
- }
- }
-
-/* If so, create an array holding the inverse permutation - one which
- contains external axis numbers and is indexed by internal axis number. */
- if( perm ) {
- outperm = astMalloc( sizeof( int )*(size_t) naxes );
- if( astOK ) for( i = 0; i < naxes; i++ ) outperm[ inperm[ i ] ] = i;
-
-/* Create a PermMap from these permutation arrays. The forward
- transformation maps from external axis indices to internal axis
- indices. */
- pmap = astPermMap( naxes, inperm, naxes, outperm, NULL, "", status );
- outperm = astFree( outperm );
-
-/* Combine this PermMap with the CmpMap created above, adding it in the
- forward direction at the start and in the inverse direction at the end. */
- map2 = astCmpMap( pmap, map, 1, "", status );
- map = astAnnul( map );
- astInvert( pmap );
- map = astCmpMap( map2, pmap, 1, "", status );
- map2 = astAnnul( map2 );
- pmap = astAnnul( pmap );
-
- }
-
-/* Apply the Mapping to the input PointSet. */
- result = astTransform( map, in, forward, out );
-
-/* Annul the Mapping pointer. */
- map = astAnnul( map );
-
-/* If an error has occurred and a new PointSet may have been created, then
- clean up by annulling it. In any case, ensure that a NULL result is
- returned.*/
- if ( !astOK ) {
- if ( !out ) result = astAnnul( result );
- result = NULL;
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-static int Unformat( AstFrame *this_frame, int axis, const char *string,
- double *value, int *status ) {
-/*
-* Name:
-* Unformat
-
-* Purpose:
-* Read a formatted coordinate value for a CmpFrame axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* int Unformat( AstFrame *this, int axis, const char *string,
-* double *value, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the public astUnformat
-* method inherited from the Frame class).
-
-* Description:
-* This function reads a formatted coordinate value for a CmpFrame
-* axis (supplied as a string) and returns the equivalent numerical
-* value as a double. It also returns the number of characters read
-* from the string.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame.
-* axis
-* The number of the CmpFrame axis for which the coordinate
-* value is to be read (axis numbering starts at zero for the
-* first axis).
-* string
-* Pointer to a constant null-terminated string containing the
-* formatted coordinate value.
-* value
-* Pointer to a double in which the coordinate value read will be
-* returned.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The number of characters read from the string to obtain the
-* coordinate value.
-
-* Notes:
-* - Any white space at the beginning of the string will be
-* skipped, as also will any trailing white space following the
-* coordinate value read. The function's return value will reflect
-* this.
-* - A function value of zero (and no coordinate value) will be
-* returned, without error, if the string supplied does not contain
-* a suitably formatted value.
-* - The string "<bad>" is recognised as a special case and will
-* generate the value AST__BAD, without error. The test for this
-* string is case-insensitive and permits embedded white space.
-* - A function result of zero will be returned and no coordinate
-* value will be returned via the "value" pointer if this function
-* is invoked with the global error status set, or if it should
-* fail for any reason.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to CmpFrame structure */
- AstFrame *frame; /* Pointer to Frame containing axis */
- double coord; /* Coordinate value read */
- int naxes1; /* Number of axes in frame1 */
- int nc; /* Number of characters read */
- int set; /* Digits attribute set? */
-
-/* Initialise. */
- nc = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return nc;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_frame;
-
-/* Validate and permute the axis index supplied. */
- axis = astValidateAxis( this, axis, "astUnformat" );
-
-/* Determine the number of axes in the first component Frame. */
- naxes1 = astGetNaxes( this->frame1 );
- if ( astOK ) {
-
-/* Decide which component Frame contains the axis and adjust the axis
- index if necessary. */
- frame = ( axis < naxes1 ) ? this->frame1 : this->frame2;
- axis = ( axis < naxes1 ) ? axis : axis - naxes1;
-
-/* Since the component Frame is "managed" by the enclosing CmpFrame,
- we next test if any Frame attributes which may affect the result
- are undefined (i.e. have not been explicitly set). If so, we
- over-ride them, giving them temporary values dictated by the
- CmpFrame. Only the Digits attribute is potentially relevant
- here. */
- set = astTestDigits( frame );
- if ( !set ) astSetDigits( frame, astGetDigits( this ) );
-
-/* Invoke the Frame's astUnformat method to read the coordinate value. */
- nc = astUnformat( frame, axis, string, &coord );
-
-/* Clear Frame attributes which were temporarily over-ridden. */
- if ( !set ) astClearDigits( frame );
- }
-
-/* If an error occurred, clear the number of characters read. */
- if ( !astOK ) {
- nc = 0;
-
-/* Otherwise, if characters were read, return the coordinate value. */
- } else if ( nc ) {
- *value = coord;
- }
-
-/* Return the number of chracters read. */
- return nc;
-}
-
-static int ValidateSystem( AstFrame *this, AstSystemType system, const char *method, int *status ) {
-/*
-*
-* Name:
-* ValidateSystem
-
-* Purpose:
-* Validate a value for a CmpFrame's System attribute.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* int ValidateSystem( AstFrame *this, AstSystemType system,
-* const char *method, int *status )
-
-* Class Membership:
-* CmpFrame member function (over-rides the astValidateSystem method
-* inherited from the Frame class).
-
-* Description:
-* This function checks the validity of the supplied system value.
-* If the value is valid, it is returned unchanged. Otherwise, an
-* error is reported and a value of AST__BADSYSTEM is returned.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* system
-* The system value to be checked.
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function
-* to validate an axis index. This method name is used solely
-* for constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The validated system value.
-
-* Notes:
-* - A value of AST__BADSYSTEM will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstSystemType result; /* Validated system value */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If the value is out of bounds, report an error. */
- if ( system < FIRST_SYSTEM || system > LAST_SYSTEM ) {
- astError( AST__AXIIN, "%s(%s): Bad value (%d) given for the System "
- "or AlignSystem attribute of a %s.", status, method,
- astGetClass( this ), (int) system, astGetClass( this ) );
-
-/* Otherwise, return the supplied value. */
- } else {
- result = system;
- }
-
-/* Return the result. */
- return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- the axes of a CmpFrame using the private macros defined for this
- purpose at the start of this file. */
-
-/* Direction(axis). */
-/* ---------------- */
-MAKE_CLEAR(Direction)
-MAKE_GET(Direction,int,0,0,0)
-MAKE_SET(Direction,int)
-MAKE_TEST(Direction)
-
-/* Format(axis). */
-/* ------------- */
-MAKE_CLEAR(Format)
-MAKE_GET(Format,const char *,NULL,0,NULL)
-MAKE_SET(Format,const char *)
-MAKE_TEST(Format)
-
-/* Label(axis). */
-/* ------------ */
-MAKE_CLEAR(Label)
-
-/* Over-ride the default axis labels produced by Frame class objects
- and substitute the axis numbering of the enclosing CmpFrame
- instead. */
-static const char *label_class;
-MAKE_GET(Label,const char *,NULL,( label_class = astGetClass( frame ),
- ( astOK && !strcmp( label_class,
- "Frame" ) ) ),
- ( (void) sprintf( label_buff, "Axis %d", axis + 1 ), label_buff ))
-MAKE_SET(Label,const char *)
-MAKE_TEST(Label)
-
-/* Symbol(axis). */
-/* ------------- */
-MAKE_CLEAR(Symbol)
-
-/* Over-ride the default axis symbols produced by Frame class objects
- and substitute the axis numbering of the enclosing CmpFrame
- instead. */
-static const char *symbol_class;
-MAKE_GET(Symbol,const char *,NULL,( symbol_class = astGetClass( frame ),
- ( astOK && !strcmp( symbol_class,
- "Frame" ) ) ),
- ( (void) sprintf( symbol_buff, "x%d", axis + 1 ), symbol_buff ))
-MAKE_SET(Symbol,const char *)
-MAKE_TEST(Symbol)
-
-/* Unit(axis). */
-/* ----------- */
-MAKE_CLEAR(Unit)
-MAKE_GET(Unit,const char *,NULL,0,NULL)
-MAKE_SET(Unit,const char *)
-MAKE_TEST(Unit)
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for CmpFrame objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for CmpFrame objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstCmpFrame *in; /* Pointer to input CmpFrame */
- AstCmpFrame *out; /* Pointer to output CmpFrame */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output CmpFrames. */
- in = (AstCmpFrame *) objin;
- out = (AstCmpFrame *) objout;
-
-/* Copy the two component Frames. */
- out->frame1 = astCopy( in->frame1 );
- out->frame2 = astCopy( in->frame2 );
-
-/* Determine the number of axes and copy the axis permutation
- array. */
- out->perm = astStore( NULL, in->perm, sizeof( int ) *
- (size_t) GetNaxes( (AstFrame *) in, status ) );
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for CmpFrame objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for CmpFrame objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* This function attempts to execute even if the global error
-* status is set.
-*/
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to CmpFrame structure */
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) obj;
-
-/* Annul the two component Frame pointers. */
- if ( this->frame1 ) this->frame1 = astAnnul( this->frame1 );
- if ( this->frame2 ) this->frame2 = astAnnul( this->frame2 );
-
-/* Free the axis permutation array. */
- if ( this->perm ) this->perm = astFree( this->perm );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for CmpFrame objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the CmpFrame class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the CmpFrame whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define COMMENT_LEN 150 /* Maximum length of a comment string */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstCmpFrame *this; /* Pointer to the CmpFrame structure */
- char comment[ COMMENT_LEN + 1 ]; /* Buffer for comment strings */
- char key[ KEY_LEN + 1 ]; /* Buffer for keywords */
- int axis; /* Loop counter for CmpFrame axes */
- int full; /* Full attribute value */
- int full_set; /* Full attribute set? */
- int ival; /* Integer value */
- int naxes; /* Number of CmpFrame axes */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
- this = (AstCmpFrame *) this_object;
-
-/* Write out values representing the instance variables for the
- CmpFrame class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* Axis permutation array. */
-/* ----------------------- */
-/* Obtain the number of CmpFrame axes. */
- naxes = GetNaxes( (AstFrame *) this, status );
-
-/* Write out the CmpFrame axis permutation array value for each axis,
- converting to 1-based axis numbering. */
- for ( axis = 0; axis < naxes; axis++ ) {
- set = ( this->perm[ axis ] != axis );
- ival = this->perm[ axis ] + 1;
-
-/* Create a keyword and comment appropriate to the axis. */
- (void) sprintf( key, "Axp%d", axis + 1 );
- if ( set ) {
- (void) sprintf( comment,
- "Axis %d permuted to use internal axis %d",
- axis + 1, ival );
- } else {
- (void) sprintf( comment, "Axis %d not permuted", axis + 1 );
- }
- astWriteInt( channel, key, set, 0, ival, comment );
- }
-
-/* Component Frames. */
-/* ----------------- */
-/* Temporarily set the Channel's Full attribute to -1 (unless it is +1
- to start with), remembering the original setting. This prevents any
- unnecessary "un-set" Frame values being output that would otherwise
- simply duplicate the CmpFrame's attributes which have already been
- written. "Set" Frame values are still written, however (and all
- values are written if Full is set to 1). */
- full_set = astTestFull( channel );
- full = astGetFull( channel );
- if ( full <= 0 ) astSetFull( channel, -1 );
-
-/* Write out Object descriptions for the two component Frames. */
- astWriteObject( channel, "FrameA", 1, 1, this->frame1,
- "First component Frame" );
- astWriteObject( channel, "FrameB", 1, 1, this->frame2,
- "Second component Frame" );
-
-/* Restore the Channel's original Full attribute setting. */
- if ( full_set ) {
- astSetFull( channel, full );
- } else {
- astClearFull( channel );
- }
-
-/* Undefine macros local to this function. */
-#undef COMMENT_LEN
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsACmpFrame and astCheckCmpFrame functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(CmpFrame,Frame)
-astMAKE_CHECK(CmpFrame)
-
-AstCmpFrame *astCmpFrame_( void *frame1_void, void *frame2_void,
- const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astCmpFrame
-f AST_CMPFRAME
-
-* Purpose:
-* Create a CmpFrame.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "cmpframe.h"
-c AstCmpFrame *astCmpFrame( AstFrame *frame1, AstFrame *frame2,
-c const char *options, ... )
-f RESULT = AST_CMPFRAME( FRAME1, FRAME2, OPTIONS, STATUS )
-
-* Class Membership:
-* CmpFrame constructor.
-
-* Description:
-* This function creates a new CmpFrame and optionally initialises
-* its attributes.
-*
-* A CmpFrame is a compound Frame which allows two component Frames
-* (of any class) to be merged together to form a more complex
-* Frame. The axes of the two component Frames then appear together
-* in the resulting CmpFrame (those of the first Frame, followed by
-* those of the second Frame).
-*
-* Since a CmpFrame is itself a Frame, it can be used as a
-* component in forming further CmpFrames. Frames of arbitrary
-* complexity may be built from simple individual Frames in this
-* way.
-*
-* Also since a Frame is a Mapping, a CmpFrame can also be used as a
-* Mapping. Normally, a CmpFrame is simply equivalent to a UnitMap,
-* but if either of the component Frames within a CmpFrame is a Region
-* (a sub-class of Frame), then the CmpFrame will use the Region as a
-* Mapping when transforming values for axes described by the Region.
-* Thus input axis values corresponding to positions which are outside the
-* Region will result in bad output axis values.
-
-* Parameters:
-c frame1
-f FRAME1 = INTEGER (Given)
-* Pointer to the first component Frame.
-c frame2
-f FRAME2 = INTEGER (Given)
-* Pointer to the second component Frame.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new CmpFrame. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new CmpFrame. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astCmpFrame()
-f AST_CMPFRAME = INTEGER
-* A pointer to the new CmpFrame.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-
-* Status Handling:
-* The protected interface to this function includes an extra
-* parameter at the end of the parameter list descirbed above. This
-* parameter is a pointer to the integer inherited status
-* variable: "int *status".
-
-*--
-
-* Implementation Notes:
-* - This function implements the basic CmpFrame constructor which
-* is available via the protected interface to the CmpFrame class.
-* A public interface is provided by the astCmpFrameId_ function.
-* - Because this function has a variable argument list, it is
-* invoked by a macro that evaluates to a function pointer (not a
-* function invocation) and no checking or casting of arguments is
-* performed before the function is invoked. Because of this, the
-* "frame1" and "frame2" parameters are of type (void *) and are
-* converted and validated within the function itself.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstCmpFrame *new; /* Pointer to new CmpFrame */
- AstFrame *frame1; /* Pointer to first Frame structure */
- AstFrame *frame2; /* Pointer to second Frame structure */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- new = NULL;
- if ( !astOK ) return new;
-
-/* Obtain and validate pointers to the Frame structures provided. */
- frame1 = astCheckFrame( frame1_void );
- frame2 = astCheckFrame( frame2_void );
- if ( astOK ) {
-
-/* Initialise the CmpFrame, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitCmpFrame( NULL, sizeof( AstCmpFrame ), !class_init,
- &class_vtab, "CmpFrame", frame1, frame2 );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- CmpFrame's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return a pointer to the new CmpFrame. */
- return new;
-}
-
-AstCmpFrame *astCmpFrameId_( void *frame1_void, void *frame2_void,
- const char *options, ... ) {
-/*
-* Name:
-* astCmpFrameId_
-
-* Purpose:
-* Create a CmpFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* AstCmpFrame *astCmpFrameId_( void *frame1_void, void *frame2_void,
-* const char *options, ... )
-
-* Class Membership:
-* CmpFrame constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astCmpFrame constructor function. It returns an ID value
-* (instead of a true C pointer) to external users, and must be
-* provided because astCmpFrame_ has a variable argument list which
-* cannot be encapsulated in a macro (where this conversion would
-* otherwise occur). For the same reason, the "frame1" and "frame2"
-* parameters are of type (void *) and are converted and validated
-* within the function itself.
-*
-* The variable argument list also prevents this function from
-* invoking astCmpFrame_ directly, so it must be a
-* re-implementation of it in all respects, except for the final
-* conversion of the result to an ID value.
-
-* Parameters:
-* As for astCmpFrame_.
-
-* Returned Value:
-* The ID value associated with the new CmpFrame.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstCmpFrame *new; /* Pointer to new CmpFrame */
- AstFrame *frame1; /* Pointer to first Frame structure */
- AstFrame *frame2; /* Pointer to second Frame structure */
- va_list args; /* Variable argument list */
-
- int *status; /* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- new = NULL;
- if ( !astOK ) return new;
-
-/* Obtain the Frame pointers from the ID's supplied and validate the
- pointers to ensure they identify valid Frames. */
- frame1 = astVerifyFrame( astMakePointer( frame1_void ) );
- frame2 = astVerifyFrame( astMakePointer( frame2_void ) );
- if ( astOK ) {
-
-/* Initialise the CmpFrame, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitCmpFrame( NULL, sizeof( AstCmpFrame ), !class_init,
- &class_vtab, "CmpFrame", frame1, frame2 );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- CmpFrame's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return an ID value for the new CmpFrame. */
- return astMakeId( new );
-}
-
-AstCmpFrame *astInitCmpFrame_( void *mem, size_t size, int init,
- AstCmpFrameVtab *vtab, const char *name,
- AstFrame *frame1, AstFrame *frame2, int *status ) {
-/*
-*+
-* Name:
-* astInitCmpFrame
-
-* Purpose:
-* Initialise a CmpFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* AstCmpFrame *astInitCmpFrame( void *mem, size_t size, int init,
-* AstCmpFrameVtab *vtab, const char *name,
-* AstFrame *frame1, AstFrame *frame2 )
-
-* Class Membership:
-* CmpFrame initialiser.
-
-* Description:
-* This function is provided for use by class implementations to
-* initialise a new CmpFrame object. It allocates memory (if
-* necessary) to accommodate the CmpFrame plus any additional data
-* associated with the derived class. It then initialises a
-* CmpFrame structure at the start of this memory. If the "init"
-* flag is set, it also initialises the contents of a virtual
-* function table for a CmpFrame at the start of the memory passed
-* via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the CmpFrame is to be
-* created. This must be of sufficient size to accommodate the
-* CmpFrame data (sizeof(CmpFrame)) plus any data used by the
-* derived class. If a value of NULL is given, this function
-* will allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the CmpFrame (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the CmpFrame structure, so a valid value must be
-* supplied even if not required for allocating memory.
-* init
-* A logical flag indicating if the CmpFrame's virtual function
-* table is to be initialised. If this value is non-zero, the
-* virtual function table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new CmpFrame.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the Object astClass function).
-* frame1
-* Pointer to the first Frame to be included in the new CmpFrame.
-* frame2
-* Pointer to the second Frame to be included in the new CmpFrame.
-
-* Returned Value:
-* A pointer to the new CmpFrame.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstCmpFrame *new; /* Pointer to new CmpFrame */
- int axis; /* Loop counter for axes */
- int naxes; /* Number of CmpFrame axes */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitCmpFrameVtab( vtab, name );
-
-/* Initialise a Frame structure (the parent class) as the first
- component within the CmpFrame structure, allocating memory if
- necessary. Set the number of Frame axes to zero, since all axis
- information is stored within the component Frames. */
- new = (AstCmpFrame *) astInitFrame( mem, size, 0, (AstFrameVtab *) vtab,
- name, 0 );
-
- if ( astOK ) {
-
-/* Initialise the CmpFrame data. */
-/* ----------------------------- */
-/* Clone the component Frame pointers. */
- new->frame1 = astClone( frame1 );
- new->frame2 = astClone( frame2 );
-
-/* Determine the number of CmpFrame axes. */
- naxes = astGetNaxes( frame1 ) + astGetNaxes( frame2 );
-
-/* Allocate memory to hold the axis permutation array and initialise
- this array. */
- new->perm = astMalloc( sizeof( int ) * (size_t) naxes );
- if ( astOK ) {
- for ( axis = 0; axis < naxes; axis++ ) new->perm[ axis ] = axis;
- }
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstCmpFrame *astLoadCmpFrame_( void *mem, size_t size,
- AstCmpFrameVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadCmpFrame
-
-* Purpose:
-* Load a CmpFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "cmpframe.h"
-* AstCmpFrame *astLoadCmpFrame( void *mem, size_t size,
-* AstCmpFrameVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* CmpFrame loader.
-
-* Description:
-* This function is provided to load a new CmpFrame using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* CmpFrame structure in this memory, using data read from the
-* input Channel.
-
-* Parameters:
-* mem
-* A pointer to the memory into which the CmpFrame is to be
-* loaded. This must be of sufficient size to accommodate the
-* CmpFrame data (sizeof(CmpFrame)) plus any data used by
-* derived classes. If a value of NULL is given, this function
-* will allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the CmpFrame (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the CmpFrame structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstCmpFrame) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new CmpFrame. If this is NULL, a pointer
-* to the (static) virtual function table for the CmpFrame class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "CmpFrame" is used instead.
-
-* Returned Value:
-* A pointer to the new CmpFrame.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Constants: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstCmpFrame *new; /* Pointer to the new CmpFrame */
- char key[ KEY_LEN + 1 ]; /* Buffer for keywords */
- int axis; /* Loop counter for axes */
- int naxes; /* Number of CmpFrame axes */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this CmpFrame. In this case the
- CmpFrame belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstCmpFrame );
- vtab = &class_vtab;
- name = "CmpFrame";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitCmpFrameVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built CmpFrame. */
- new = astLoadFrame( mem, size, (AstFrameVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "CmpFrame" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* Component Frames. */
-/* ----------------- */
-/* Read both component Frames, supplying a default 1-dimensional Frame
- if necessary. */
- new->frame1 = astReadObject( channel, "framea", NULL );
- if ( !new->frame1 ) new->frame1 = astFrame( 1, "", status );
-
- new->frame2 = astReadObject( channel, "frameb", NULL );
- if ( !new->frame2 ) new->frame2 = astFrame( 1, "", status );
-
-/* Axis permutation array. */
-/* ----------------------- */
-/* Obtain the number of CmpFrame axes and allocate memory to hold the
- axis permutation array. */
- naxes = GetNaxes( (AstFrame *) new, status );
- new->perm = astMalloc( sizeof( int ) * (size_t) naxes );
-
-/* If OK, loop to read the array value for each axis. */
- if ( astOK ) {
- for ( axis = 0; axis < naxes; axis++ ) {
-
-/* Convert from 1-based to zero-based axis numbering at this
- point. The default is the "un-permuted" value. */
- sprintf( key, "axp%d", axis + 1 );
- new->perm[ axis ] = astReadInt( channel, key, axis + 1 ) - 1;
-
-/* Quit looping if an error occurs. */
- if ( !astOK ) break;
- }
- }
-
-/* If an error occurred, clean up by deleting the new CmpFrame. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new CmpFrame pointer. */
- return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-
-
-
-
diff --git a/ast-5.3-1/cmpframe.h b/ast-5.3-1/cmpframe.h
deleted file mode 100644
index a4d6b33..0000000
--- a/ast-5.3-1/cmpframe.h
+++ /dev/null
@@ -1,428 +0,0 @@
-#if !defined( CMPFRAME_INCLUDED ) /* Include this file only once */
-#define CMPFRAME_INCLUDED
-/*
-*+
-* Name:
-* cmpframe.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the CmpFrame class.
-
-* Invocation:
-* #include "cmpframe.h"
-
-* Description:
-* This include file defines the interface to the CmpFrame class
-* and provides the type definitions, function prototypes and
-* macros, etc. needed to use this class.
-*
-* A CmpFrame is a compound Frame which allows two component Frames
-* (of any class) to be merged together to form a more complex
-* Frame. The axes of the two component Frames then appear together
-* in the resulting CmpFrame (those of the first Frame, followed by
-* those of the second Frame).
-*
-* Since a CmpFrame is itself a Frame, it can be used as a
-* component in forming further CmpFrames. Frames of arbitrary
-* complexity may be built from simple individual Frames in this
-* way.
-
-* Inheritance:
-* The CmpFrame class inherits from the Frame class.
-
-* Attributes Over-Ridden:
-* Domain (string)
-* A string which may be used to identify a CmpFrame and used as
-* an additional key when matching a target CmpFrame with a
-* template. The CmpFrame class re-defines the default value to
-* "CMP".
-* MaxAxes (integer)
-* Specifies the maximum number of axes in a target Frame that
-* can be matched when using the CmpFrame as a template. The
-* CmpFrame class sets this to be the sum of the MaxAxes
-* attribute values for the two component Frames contained by
-* the CmpFrame. Any attempt to alter this value (other than
-* through the component Frames) is simply ignored.
-* MinAxes (integer)
-* Specifies the minimum number of axes in a target Frame that
-* can be matched when using the CmpFrame as a template. The
-* CmpFrame class sets this to be the sum of the MinAxes
-* attribute values for the two component Frames contained by
-* the CmpFrame. Any attempt to alter this value (other than
-* through the component Frames) is simply ignored.
-* Naxes (integer)
-* A read-only attribute that gives the number of axes in a
-* CmpFrame (i.e. the number of dimensions of the space which
-* the CmpFrame describes). This value is determined when the
-* CmpFrame is created and is equal to the sum of the Naxes
-* attributes of the two component Frames.
-* Title (string)
-* Specifies a string to be used as a title on (e.g.) graphs to
-* describe the coordinate system which the CmpFrame
-* represents. The CmpFrame class re-defines the default value
-* to "<n>-D Compound Coordinate System", where <n> is the
-* number of CmpFrame axes.
-
-* New Attributes Defined:
-* None.
-
-* Methods Over-Ridden:
-* Public:
-* astDistance
-* Calculate the distance between two points.
-* astFormat
-* Format a coordinate value for a CmpFrame axis.
-* astNorm
-* Normalise a set of CmpFrame coordinates.
-* astOffset
-* Calculate an offset along a geodesic curve.
-* astPermAxes
-* Permute the order of a CmpFrame's axes.
-* astUnformat
-* Read a formatted coordinate value for a CmpFrame axis.
-*
-* Protected:
-* astAbbrev
-* Abbreviate a formatted CmpFrame axis value by skipping leading
-* fields.
-* astClearDirection
-* Clear the value of the Direction attribute for a CmpFrame axis.
-* astClearFormat
-* Clear the value of the Format attribute for a CmpFrame axis.
-* astClearLabel
-* Clear the value of the Label attribute for a CmpFrame axis.
-* astClearMaxAxes
-* Clear the value of the MaxAxes attribute for a CmpFrame.
-* astClearMinAxes
-* Clear the value of the MinAxes attribute for a CmpFrame.
-* astClearSymbol
-* Clear the value of the Symbol attribute for a CmpFrame axis.
-* astClearUnit
-* Clear the value of the Unit attribute for a CmpFrame axis.
-* astGap
-* Find a "nice" gap for tabulating CmpFrame axis values.
-* astGetAxis
-* Obtain a pointer to a specified Axis from a CmpFrame.
-* astGetDirection
-* Obtain the value of the Direction attribute for a CmpFrame axis.
-* astGetDomain
-* Obtain a pointer to the Domain attribute string for a CmpFrame.
-* astGetFormat
-* Obtain the value of the Format attribute for a CmpFrame axis.
-* astGetLabel
-* Obtain the value of the Label attribute for a CmpFrame axis.
-* astGetMaxAxes
-* Obtain the value of the MaxAxes attribute for a CmpFrame.
-* astGetMinAxes
-* Obtain the value of the MinAxes attribute for a CmpFrame.
-* astGetNaxes
-* Obtain the value of the Naxes attribute for a CmpFrame.
-* astGetPerm
-* Access the axis permutation array for a CmpFrame.
-* astGetSymbol
-* Obtain the value of the Symbol attribute for a CmpFrame axis.
-* astGetTitle
-* Obtain a pointer to the Title attribute string for a CmpFrame.
-* astGetUnit
-* Obtain the value of the Unit attribute for a CmpFrame axis.
-* astMatch
-* Determine if conversion is possible between two coordinate
-* systems.
-* astPrimaryFrame
-* Uniquely identify a primary Frame and one of its axes.
-* astSetAxis
-* Set a new Axis for a CmpFrame.
-* astSetDirection
-* Set the value of the Direction attribute for a CmpFrame axis.
-* astSetFormat
-* Set the value of the Format attribute for a CmpFrame axis.
-* astSetLabel
-* Set the value of the Label attribute for a CmpFrame axis.
-* astSetMaxAxes
-* Set a value for the MaxAxes attribute of a CmpFrame.
-* astSetMinAxes
-* Set a value for the MinAxes attribute of a CmpFrame.
-* astSetSymbol
-* Set the value of the Symbol attribute for a CmpFrame axis.
-* astSetUnit
-* Set the value of the Unit attribute for a CmpFrame axis.
-* astSubFrame
-* Select axes from a CmpFrame and convert to the new coordinate
-* system.
-* astTestDirection
-* Test if a Direction attribute value has been set for a CmpFrame
-* axis.
-* astTestFormat
-* Test if a Format attribute value has been set for a CmpFrame axis.
-* astTestLabel
-* Test if a Label attribute value has been set for a CmpFrame axis.
-* astTestMaxAxes
-* Test if a value has been set for the MaxAxes attribute of a
-* CmpFrame.
-* astTestMinAxes
-* Test if a value has been set for the MinAxes attribute of a
-* CmpFrame.
-* astTestSymbol
-* Test if a Symbol attribute value has been set for a CmpFrame axis.
-* astTestUnit
-* Test if a Unit attribute value has been set for a CmpFrame axis.
-
-* New Methods Defined:
-* Public:
-* None.
-*
-* Protected:
-* None.
-
-* Other Class Functions:
-* Public:
-* astIsACmpFrame
-* Test class membership.
-* astCmpFrame
-* Create a CmpFrame.
-*
-* Protected:
-* astCheckCmpFrame
-* Validate class membership.
-* astInitCmpFrame
-* Initialise a CmpFrame.
-* astInitCmpFrameVtab
-* Initialise the virtual function table for the CmpFrame class.
-* astLoadCmpFrame
-* Load a CmpFrame.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstCmpFrame
-* CmpFrame object type.
-*
-* Protected:
-* AstCmpFrameVtab
-* CmpFrame virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 6-MAR-1996 (RFWS):
-* Original version.
-* 27-FEB-1997 (RFWS):
-* Improved the prologue.
-* 25-FEB-1998 (RFWS):
-* Over-ride the astUnformat method.
-* 8-JAN-2003 (DSB):
-* Added protected astInitCmpFrameVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h" /* Base Object class */
-#include "frame.h" /* Parent Frame class */
-
-#if defined(astCLASS) /* Protected */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros. */
-/* ------- */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* The legal System values recognized by this class of Frame. */
-#define AST__COMP 0
-
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* CmpFrame structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each
- object in the class (e.g. its instance variables). */
-typedef struct AstCmpFrame {
-
-/* Attributes inherited from the parent class. */
- AstFrame frame; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- AstFrame *frame1; /* First component frame */
- AstFrame *frame2; /* Second component Frame */
- int *perm; /* Pointer to axis permutation array */
-} AstCmpFrame;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstCmpFrameVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstFrameVtab frame_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-
-} AstCmpFrameVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstCmpFrameGlobals {
- AstCmpFrameVtab Class_Vtab;
- int Class_Init;
- int *qsort_axes;
- char Label_Buff[ 101 ];
- char Symbol_Buff[ 51 ];
- char GetDomain_Buff[ 101 ];
- char GetTitle_Buff[ 101 ];
-} AstCmpFrameGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(CmpFrame) /* Check class membership */
-astPROTO_ISA(CmpFrame) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstCmpFrame *astCmpFrame_( void *, void *, const char *, int *, ...);
-#else
-AstCmpFrame *astCmpFrameId_( void *, void *, const char *, ... )__attribute__((format(printf,3,4)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstCmpFrame *astInitCmpFrame_( void *, size_t, int, AstCmpFrameVtab *,
- const char *, AstFrame *, AstFrame *, int * );
-
-/* Vtab initialiser. */
-void astInitCmpFrameVtab_( AstCmpFrameVtab *, const char *, int * );
-
-/* Loader. */
-AstCmpFrame *astLoadCmpFrame_( void *, size_t, AstCmpFrameVtab *,
- const char *, AstChannel *, int * );
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitCmpFrameGlobals_( AstCmpFrameGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckCmpFrame(this) astINVOKE_CHECK(CmpFrame,this,0)
-#define astVerifyCmpFrame(this) astINVOKE_CHECK(CmpFrame,this,1)
-
-/* Test class membership. */
-#define astIsACmpFrame(this) astINVOKE_ISA(CmpFrame,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astCmpFrame astINVOKE(F,astCmpFrame_)
-#else
-#define astCmpFrame astINVOKE(F,astCmpFrameId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitCmpFrame(mem,size,init,vtab,name,frame1,frame2) \
-astINVOKE(O,astInitCmpFrame_(mem,size,init,vtab,name,astCheckFrame(frame1),astCheckFrame(frame2),STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitCmpFrameVtab(vtab,name) astINVOKE(V,astInitCmpFrameVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadCmpFrame(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadCmpFrame_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckCmpFrame to validate CmpFrame pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/cmpmap.c b/ast-5.3-1/cmpmap.c
deleted file mode 100644
index bf2e482..0000000
--- a/ast-5.3-1/cmpmap.c
+++ /dev/null
@@ -1,4402 +0,0 @@
-/*
-*class++
-* Name:
-* CmpMap
-
-* Purpose:
-* Compound Mapping.
-
-* Constructor Function:
-c astCmpMap
-f AST_CMPMAP
-
-* Description:
-* A CmpMap is a compound Mapping which allows two component
-* Mappings (of any class) to be connected together to form a more
-* complex Mapping. This connection may either be "in series"
-* (where the first Mapping is used to transform the coordinates of
-* each point and the second mapping is then applied to the
-* result), or "in parallel" (where one Mapping transforms the
-* earlier coordinates for each point and the second Mapping
-* simultaneously transforms the later coordinates).
-*
-* Since a CmpMap is itself a Mapping, it can be used as a
-* component in forming further CmpMaps. Mappings of arbitrary
-* complexity may be built from simple individual Mappings in this
-* way.
-
-* Inheritance:
-* The CmpMap class inherits from the Mapping class.
-
-* Attributes:
-* The CmpMap class does not define any new attributes beyond those
-* which are applicable to all Mappings.
-
-* Functions:
-c The CmpMap class does not define any new functions beyond those
-f The CmpMap class does not define any new routines beyond those
-* which are applicable to all Mappings.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 1-FEB-1996 (RFWS):
-* Original version.
-* 25-SEP-1996 (RFWS):
-* Implemented external interface and I/O facilities.
-* 12-DEC-1996 (RFWS):
-* Over-ride the astMapList method.
-* 13-DEC-1996 (RFWS):
-* Over-ride the astSimplify method.
-* 4-JUN-1997 (RFWS):
-* Eliminate any simplification when MapList is used. Instead,
-* over-ride the MapMerge method and implement all
-* simplification in this.
-* 24-MAR-1998 (RFWS):
-* Fixed bug in testing of simplified invert flag in Simplify.
-* 15-APR-1998 (RFWS):
-* Improved the MapMerge method to allow parallel combinations
-* of series CmpMaps to be replaced by series combinations of
-* parallel CmpMaps, and vice versa.
-* 26-SEP-2001 (DSB):
-* Over-ride the astDecompose method.
-* 8-JAN-2003 (DSB):
-* - Changed private InitVtab method to protected astInitCmpMapVtab
-* method.
-* 8-JAN-2003 (DSB):
-* - Modified MapMerge so that a parallel CmpMap can swap with a
-* suitable PermMap lower neighbour.
-* 23-APR-2004 (DSB):
-* - Modified Simplify to avoid infinite loops.
-* 27-APR-2004 (DSB):
-* - Correction to MapMerge to prevent segvio if CmpMap and PermMap
-* cannot be swapped.
-* 4-OCT-2004 (DSB):
-* Modify astMapList to return flag indicating presence of inverted
-* CmpMaps in supplied Mapping.
-* 20-APR-2005 (DSB):
-* Modify MapMerge so that it will attempt to merge the first
-* and second CmpMaps in a list of series CmpMaps.
-* 8-FEB-2006 (DSB):
-* Corrected logic within MapMerge for cases where a PermMap is
-* followed by a parallel CmpMap.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 14-MAR-2006 (DSB):
-* - When checking for patterns in the simplification process,
-* require at least 30 samples in the waveform for evidence of a
-* pattern.
-* - Override astEqual.
-* - The constructor no longer reports an error if the resulting
-* CmpMap cannot transform points in either direction. This is
-* because it may be possible to simplify such a CmpMap and the
-* simplified Mapping may have defined transformations. E.g. if a
-* Mapping which has only a forward transformation is combined in
-* series with its own inverse, the combination will simplify to a
-* UnitMap (usually).
-* 9-MAY-2006 (DSB):
-* - In Simplify, remove checks for patterns in the number of atomic
-* mappings when calling astSimplify recursively.
-* 23-AUG-2006 (DSB):
-* - In Simplify, add checks for re-appearance of a Mapping that is
-* already being simplified at a higher levelin the call stack.
-* 18-APR-2007 (DSB):
-* In Simplify: if the returned Mapping is not a CmpMap, always copy
-* the returned component Mapping (rather than cloning it) so that
-* the returned Mapping is not affected if user code subsequently
-* inverts the component Mapping via some other pointer.
-* 12-MAR-2008 (DSB):
-* Modify MapSplit so that attempts to split the inverse
-* transformation if it cannot split the forward transformation.
-* 30-JUL-2009 (DSB):
-* Ensure the PermMap has equal number of inputs and outputs when
-* swapping a PermMap and a CmpMap in astMapMerge.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS CmpMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "mapping.h" /* Coordinate Mappings (parent class) */
-#include "channel.h" /* I/O channels */
-#include "permmap.h" /* Coordinate permutation Mappings */
-#include "unitmap.h" /* Unit transformations */
-#include "cmpmap.h" /* Interface definition for this class */
-#include "frameset.h" /* Interface definition for FrameSets */
-#include "globals.h" /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <string.h>
-#include <stdio.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static int (* parent_maplist)( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int *(* parent_mapsplit)( AstMapping *, int, const int *, AstMapping **, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->Simplify_Depth = 0; \
- globals->Simplify_Stackmaps = NULL;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(CmpMap)
-
-#define class_init astGLOBAL(CmpMap,Class_Init)
-#define class_vtab astGLOBAL(CmpMap,Class_Vtab)
-#define simplify_depth astGLOBAL(CmpMap,Simplify_Depth)
-#define simplify_stackmaps astGLOBAL(CmpMap,Simplify_Stackmaps)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-static int simplify_depth = 0;
-static AstMapping **simplify_stackmaps = NULL;
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstCmpMapVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstCmpMap *astCmpMapId_( void *, void *, int, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMapping *CombineMaps( AstMapping *, int, AstMapping *, int, int, int * );
-static AstMapping *RemoveRegions( AstMapping *, int * );
-static AstMapping *Simplify( AstMapping *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-static int *MapSplit1( AstMapping *, int, const int *, AstMapping **, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetIsLinear( AstMapping *, int * );
-static int MapList( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int PatternCheck( int, int, int **, int *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Decompose( AstMapping *, AstMapping **, AstMapping **, int *, int *, int *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static int GetObjSize( AstObject *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-/* Member functions. */
-/* ================= */
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two CmpMaps are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpmap.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* CmpMap member function (over-rides the astEqual protected
-* method inherited from the astMapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two CmpMaps are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Object (a CmpMap).
-* that
-* Pointer to the second Object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the CmpMaps are equivalent, zero otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstCmpMap *that;
- AstCmpMap *this;
- AstMapping **that_map_list;
- AstMapping **this_map_list;
- int *that_invert_list;
- int *this_invert_list;
- int i;
- int result;
- int that_inv;
- int that_nmap;
- int this_inv;
- int this_nmap;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain pointers to the two CmpMap structures. */
- this = (AstCmpMap *) this_object;
- that = (AstCmpMap *) that_object;
-
-/* Check the second object is a CmpMap. We know the first is a
- CmpMap since we have arrived at this implementation of the virtual
- function. */
- if( astIsACmpMap( that ) ) {
-
-/* Check they are both either parallel or series. */
- if( that->series == that->series ) {
-
-/* Decompose the first CmpMap into a sequence of Mappings to be applied in
- series or parallel, as appropriate, and an associated list of
- Invert flags. */
- this_nmap = 0;
- this_map_list = NULL;
- this_invert_list = NULL;
- astMapList( (AstMapping *) this, this->series, astGetInvert( this ),
- &this_nmap, &this_map_list, &this_invert_list );
-
-/* Similarly decompose the second CmpMap. */
- that_nmap = 0;
- that_map_list = NULL;
- that_invert_list = NULL;
- astMapList( (AstMapping *) that, that->series, astGetInvert( that ),
- &that_nmap, &that_map_list, &that_invert_list );
-
-/* Check the decompositions yielded the same number of component
- Mappings. */
- if( that_nmap == this_nmap ) {
-
-/* Check equality of every component. */
- for( i = 0; i < this_nmap; i++ ) {
-
-/* Temporarily set the Mapping Invert flags to the required values,
- saving the original values so that they can be re-instated later.*/
- this_inv = astGetInvert( this_map_list[ i ] );
- astSetInvert( this_map_list[ i ], this_invert_list[ i ] );
- that_inv = astGetInvert( that_map_list[ i ] );
- astSetInvert( that_map_list[ i ], that_invert_list[ i ] );
-
-/* Compare the two component Mappings for equality. */
- result = astEqual( this_map_list[ i ], that_map_list[ i ] );
-
-/* Re-instate the original Invert flags. */
- astSetInvert( this_map_list[ i ], this_inv );
- astSetInvert( that_map_list[ i ], that_inv );
-
-/* Leave the loop if the Mappings are not equal. */
- if( !result ) break;
- }
- }
-
-/* Free resources */
- for( i = 0; i < this_nmap; i++ ) {
- this_map_list[ i ] = astAnnul( this_map_list[ i ] );
- }
- this_map_list = astFree( this_map_list );
- this_invert_list = astFree( this_invert_list );
-
- for( i = 0; i < that_nmap; i++ ) {
- that_map_list[ i ] = astAnnul( that_map_list[ i ] );
- }
- that_map_list = astFree( that_map_list );
- that_invert_list = astFree( that_invert_list );
-
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static int GetIsLinear( AstMapping *this_mapping, int *status ){
-/*
-* Name:
-* GetIsLinear
-
-* Purpose:
-* Return the value of the IsLinear attribute for a CmpMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void GetIsLinear( AstMapping *this, int *status )
-
-* Class Membership:
-* CmpMap member function (over-rides the protected astGetIsLinear
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns the value of the IsLinear attribute for a
-* Frame, which is one if both component Mappings have a value of 1
-* for the IsLinear attribute.
-
-* Parameters:
-* this
-* Pointer to the CmpqMap.
-* status
-* Pointer to the inherited status variable.
-*/
- AstCmpMap *this;
- this = (AstCmpMap *) this_mapping;
- return astGetIsLinear( this->map1 ) && astGetIsLinear( this->map2 );
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpmap.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* CmpMap member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied CmpMap,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the CmpMap.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstCmpMap *this; /* Pointer to CmpMap structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the CmpMap structure. */
- this = (AstCmpMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
-
- result += astGetObjSize( this->map1 );
- result += astGetObjSize( this->map2 );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static AstMapping *CombineMaps( AstMapping *mapping1, int invert1,
- AstMapping *mapping2, int invert2,
- int series, int *status ) {
-/*
-* Name:
-* CombineMaps
-
-* Purpose:
-* Combine two Mappings with specified Invert flags into a CmpMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpmap.h"
-* AstMapping *CombineMaps( AstMapping *mapping1, int invert1,
-* AstMapping *mapping2, int invert2,
-* int series, int *status )
-
-* Class Membership:
-* CmpMap member function.
-
-* Description:
-* This function combines two Mappings into a CmpMap (compound
-* Mapping) as if their Invert flags were set to specified values
-* when the CmpMap is created. However, the individual Mappings are
-* returned with their Invert flag values unchanged from their
-* original state.
-
-* Parameters:
-* mapping1
-* Pointer to the first Mapping.
-* invert1
-* The (boolean) Invert flag value required for the first Mapping.
-* mapping2
-* Pointer to the second Mapping.
-* invert2
-* The (boolean) Invert flag value required for the second Mapping.
-* series
-* Whether the Mappings are to be combined in series (as opposed to
-* in parallel).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the resulting compound Mapping (a CmpMap).
-
-* Notes:
-* - This function is a wrap-up for the astCmpMap constructor and
-* temporarily assigns the required Invert flag values while
-* creating the required CmpMap. However, it also takes account of
-* the possibility that the two Mapping pointers supplied may point
-* at the same Mapping.
-* - A null Object pointer (AST__NULL) will be returned if this
-* function is invoked with the AST error status set, or if it
-* should fail for any reason.
-*/
-
-/* Local Variables: */
- AstMapping *map1; /* First temporary Mapping pointer */
- AstMapping *map2; /* Second temporary Mapping pointer */
- AstMapping *result; /* Pointer to result Mapping */
- int copy; /* Copy needed? */
- int inv1; /* First original Invert flag value */
- int inv2; /* Second original Invert flag value */
- int set1; /* First Invert flag originally set? */
- int set2; /* Second Invert flag originally set? */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Limit incoming values to 0 or 1. */
- invert1 = ( invert1 != 0 );
- invert2 = ( invert2 != 0 );
-
-/* Obtain the Invert flag values for each Mapping. */
- inv1 = astGetInvert( mapping1 );
- inv2 = astGetInvert( mapping2 );
-
-/* Also determine if these values are explicitly set. */
- set1 = astTestInvert( mapping1 );
- set2 = astTestInvert( mapping2 );
-
-/* If both Mappings are actually the same but we need different Invert
- flag values to be set, then this can only be achieved by making a
- copy. Note if this is necessary. */
- copy = ( ( mapping1 == mapping2 ) && ( invert1 != invert2 ) );
-
-/* Clone the first Mapping pointer. Do likewise for the second but
- make a copy instead if necessary. */
- map1 = astClone( mapping1 );
- map2 = copy ? astCopy( mapping2 ) : astClone( mapping2 );
-
-/* If the Invert value for the first Mapping needs changing, make the
- change. */
- if ( invert1 != inv1 ) {
- if ( invert1 ) {
- astSetInvert( map1, 1 );
- } else {
- astClearInvert( map1 );
- }
- }
-
-/* Similarly, change the Invert flag for the second Mapping if
- necessary. */
- if ( invert2 != inv2 ) {
- if ( invert2 ) {
- astSetInvert( map2, 1 );
- } else {
- astClearInvert( map2 );
- }
- }
-
-/* Combine the two Mappings into a CmpMap. */
- result = (AstMapping *) astCmpMap( map1, map2, series, "", status );
-
-/* If the first Mapping's Invert value was changed, restore it to its
- original state. */
- if ( invert1 != inv1 ) {
- if ( set1 ) {
- astSetInvert( map1, inv1 );
- } else {
- astClearInvert( map1 );
- }
- }
-
-/* Similarly, restore the second Mapping's Invert value if
- necessary. This step is not needed, however, if a copy was made. */
- if ( ( invert2 != inv2 ) && !copy ) {
- if ( set2 ) {
- astSetInvert( map2, inv2 );
- } else {
- astClearInvert( map2 );
- }
- }
-
-/* Annul the temporary Mapping pointers. */
- map1 = astAnnul( map1 );
- map2 = astAnnul( map2 );
-
-/* If an error occurred, then annul the result pointer. */
- if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static void Decompose( AstMapping *this_mapping, AstMapping **map1,
- AstMapping **map2, int *series, int *invert1,
- int *invert2, int *status ) {
-/*
-*
-* Name:
-* Decompose
-
-* Purpose:
-* Decompose a Mapping into two component Mappings.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void Decompose( AstMapping *this, AstMapping **map1,
-* AstMapping **map2, int *series,
-* int *invert1, int *invert2, int *status )
-
-* Class Membership:
-* CmpMap member function (over-rides the protected astDecompose
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns pointers to two Mappings which, when applied
-* either in series or parallel, are equivalent to the supplied Mapping.
-*
-* Since the Frame class inherits from the Mapping class, Frames can
-* be considered as special types of Mappings and so this method can
-* be used to decompose either CmpMaps or CmpFrames.
-
-* Parameters:
-* this
-* Pointer to the Mapping.
-* map1
-* Address of a location to receive a pointer to first component
-* Mapping.
-* map2
-* Address of a location to receive a pointer to second component
-* Mapping.
-* series
-* Address of a location to receive a value indicating if the
-* component Mappings are applied in series or parallel. A non-zero
-* value means that the supplied Mapping is equivalent to applying map1
-* followed by map2 in series. A zero value means that the supplied
-* Mapping is equivalent to applying map1 to the lower numbered axes
-* and map2 to the higher numbered axes, in parallel.
-* invert1
-* The value of the Invert attribute to be used with map1.
-* invert2
-* The value of the Invert attribute to be used with map2.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - Any changes made to the component Mappings using the returned
-* pointers will be reflected in the supplied Mapping.
-
-*-
-*/
-
-
-/* Local Variables: */
- AstCmpMap *this; /* Pointer to CmpMap structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpMap structure. */
- this = (AstCmpMap *) this_mapping;
-
-/* First deal with series mappings. */
- if( this->series ) {
- if( series ) *series = 1;
-
-/* If the CmpMap has been inverted, return the Mappings in reverse
- order with inverted Invert falgs. */
- if( astGetInvert( this ) ) {
- if( map1 ) *map1 = astClone( this->map2 );
- if( map2 ) *map2 = astClone( this->map1 );
- if( invert1 ) *invert1 = this->invert2 ? 0 : 1;
- if( invert2 ) *invert2 = this->invert1 ? 0 : 1;
-
-/* If the CmpMap has not been inverted, return the Mappings in their
- original order with their original Invert flags. */
- } else {
- if( map1 ) *map1 = astClone( this->map1 );
- if( map2 ) *map2 = astClone( this->map2 );
- if( invert1 ) *invert1 = this->invert1;
- if( invert2 ) *invert2 = this->invert2;
- }
-
-/* Now deal with parallel mappings. */
- } else {
- if( series ) *series = 0;
-
-/* The mappings are returned in their original order whether or not the
- CmpMap has been inverted. */
- if( map1 ) *map1 = astClone( this->map1 );
- if( map2 ) *map2 = astClone( this->map2 );
-
-/* If the CmpMap has been inverted, return inverted Invert flags. */
- if( astGetInvert( this ) ) {
- if( invert1 ) *invert1 = this->invert1 ? 0 : 1;
- if( invert2 ) *invert2 = this->invert2 ? 0 : 1;
-
-/* If the CmpMap has not been inverted, return the original Invert flags. */
- } else {
- if( invert1 ) *invert1 = this->invert1;
- if( invert2 ) *invert2 = this->invert2;
- }
-
- }
-}
-
-void astInitCmpMapVtab_( AstCmpMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitCmpMapVtab
-
-* Purpose:
-* Initialise a virtual function table for a CmpMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "cmpmap.h"
-* void astInitCmpMapVtab( AstCmpMapVtab *vtab, const char *name )
-
-* Class Membership:
-* CmpMap vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the CmpMap class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsACmpMap) to determine if an object belongs to
- this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
-
-/* None. */
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
-#if defined(THREAD_SAFE)
- parent_managelock = object->ManageLock;
- object->ManageLock = ManageLock;
-#endif
-
- parent_maplist = mapping->MapList;
- mapping->MapList = MapList;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
- parent_mapsplit = mapping->MapSplit;
- mapping->MapSplit = MapSplit;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- object->Equal = Equal;
- mapping->Decompose = Decompose;
- mapping->MapMerge = MapMerge;
- mapping->Simplify = Simplify;
- mapping->RemoveRegions = RemoveRegions;
- mapping->Rate = Rate;
- mapping->GetIsLinear = GetIsLinear;
-
-/* Declare the copy constructor, destructor and class dump function. */
- astSetCopy( vtab, Copy );
- astSetDelete( vtab, Delete );
- astSetDump( vtab, Dump, "CmpMap", "Compound Mapping" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra,
- AstObject **fail, int *status ) {
-/*
-* Name:
-* ManageLock
-
-* Purpose:
-* Manage the thread lock on an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *ManageLock( AstObject *this, int mode, int extra,
-* AstObject **fail, int *status )
-
-* Class Membership:
-* CmpMap member function (over-rides the astManageLock protected
-* method inherited from the parent class).
-
-* Description:
-* This function manages the thread lock on the supplied Object. The
-* lock can be locked, unlocked or checked by this function as
-* deteremined by parameter "mode". See astLock for details of the way
-* these locks are used.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* mode
-* An integer flag indicating what the function should do:
-*
-* AST__LOCK: Lock the Object for exclusive use by the calling
-* thread. The "extra" value indicates what should be done if the
-* Object is already locked (wait or report an error - see astLock).
-*
-* AST__UNLOCK: Unlock the Object for use by other threads.
-*
-* AST__CHECKLOCK: Check that the object is locked for use by the
-* calling thread (report an error if not).
-* extra
-* Extra mode-specific information.
-* fail
-* If a non-zero function value is returned, a pointer to the
-* Object that caused the failure is returned at "*fail". This may
-* be "this" or it may be an Object contained within "this". Note,
-* the Object's reference count is not incremented, and so the
-* returned pointer should not be annulled. A NULL pointer is
-* returned if this function returns a value of zero.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A local status value:
-* 0 - Success
-* 1 - Could not lock or unlock the object because it was already
-* locked by another thread.
-* 2 - Failed to lock a POSIX mutex
-* 3 - Failed to unlock a POSIX mutex
-* 4 - Bad "mode" value supplied.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-*/
-
-/* Local Variables: */
- AstCmpMap *this; /* Pointer to CmpMap structure */
- int result; /* Returned status value */
-
-/* Initialise */
- result = 0;
-
-/* Check the supplied pointer is not NULL. */
- if( !this_object ) return result;
-
-/* Obtain a pointers to the CmpMap structure. */
- this = (AstCmpMap *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
- if( !result ) result = (*parent_managelock)( this_object, mode, extra,
- fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
- the supplied Object. */
- if( !result ) result = astManageLock( this->map1, mode, extra, fail );
- if( !result ) result = astManageLock( this->map2, mode, extra, fail );
-
- return result;
-
-}
-#endif
-
-static int MapList( AstMapping *this_mapping, int series, int invert,
- int *nmap, AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapList
-
-* Purpose:
-* Decompose a CmpMap into a sequence of simpler Mappings.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MapList( AstMapping *this, int series, int invert, int *nmap,
-* AstMapping ***map_list, int **invert_list )
-
-* Class Membership:
-* CmpMap member function (over-rides the protected astMapList
-* method inherited from the Maping class).
-
-* Description:
-* This function decomposes a CmpMap into a sequence of simpler
-* Mappings which may be applied in sequence to achieve the same
-* effect. The CmpMap is decomposed as far as possible, but it is
-* not guaranteed that this will necessarily yield any more than
-* one Mapping, which may actually be the original CmpMap supplied.
-*
-* This function is provided to support both the simplification of
-* CmpMaps, and the analysis of CmpMap structure so that particular
-* forms can be recognised.
-
-* Parameters:
-* this
-* Pointer to the CmpMap to be decomposed (the CmpMap is not
-* actually modified by this function).
-* series
-* If this value is non-zero, an attempt will be made to
-* decompose the CmpMap into a sequence of equivalent Mappings
-* which can be applied in series (i.e. one after the other). If
-* it is zero, the decomposition will instead yield Mappings
-* which can be applied in parallel (i.e. on successive sub-sets
-* of the input/output coordinates).
-* invert
-* The value to which the CmpMap's Invert attribute is to be
-* (notionally) set before performing the
-* decomposition. Normally, the value supplied here will be the
-* actual Invert value obtained from the CmpMap (e.g. using
-* astGetInvert). Sometimes, however, when a CmpMap is
-* encapsulated within another structure, that structure may
-* retain an Invert value (in order to prevent external
-* interference) which should be used instead.
-*
-* Note that the actual Invert value of the CmpMap supplied is
-* not used (or modified) by this function.
-* nmap
-* The address of an int which holds a count of the number of
-* individual Mappings in the decomposition. On entry, this
-* should count the number of Mappings already in the
-* "*map_list" array (below). On exit, it is updated to include
-* any new Mappings appended by this function.
-* map_list
-* Address of a pointer to an array of Mapping pointers. On
-* entry, this array pointer should either be NULL (if no
-* Mappings have yet been obtained) or should point at a
-* dynamically allocated array containing Mapping pointers
-* ("*nmap" in number) which have been obtained from a previous
-* invocation of this function.
-*
-* On exit, the dynamic array will be enlarged to contain any
-* new Mapping pointers that result from the decomposition
-* requested. These pointers will be appended to any previously
-* present, and the array pointer will be updated as necessary
-* to refer to the enlarged array (any space released by the
-* original array will be freed automatically).
-*
-* The new Mapping pointers returned will identify a sequence of
-* Mappings which, when applied in order, will perform a forward
-* transformation equivalent to that of the original CmpMap
-* (after its Invert flag has first been set to the value
-* requested above). The Mappings should be applied in series or
-* in parallel according to the type of decomposition requested.
-*
-* All the Mapping pointers returned by this function should be
-* annulled by the caller, using astAnnul, when no longer
-* required. The dynamic array holding these pointers should
-* also be freed, using astFree.
-* invert_list
-* Address of a pointer to an array of int. On entry, this array
-* pointer should either be NULL (if no Mappings have yet been
-* obtained) or should point at a dynamically allocated array
-* containing Invert attribute values ("*nmap" in number) which
-* have been obtained from a previous invocation of this
-* function.
-*
-* On exit, the dynamic array will be enlarged to contain any
-* new Invert attribute values that result from the
-* decomposition requested. These values will be appended to any
-* previously present, and the array pointer will be updated as
-* necessary to refer to the enlarged array (any space released
-* by the original array will be freed automatically).
-*
-* The new Invert values returned identify the values which must
-* be assigned to the Invert attributes of the corresponding
-* Mappings (whose pointers are in the "*map_list" array) before
-* they are applied. Note that these values may differ from the
-* actual Invert attribute values of these Mappings, which are
-* not relevant.
-*
-* The dynamic array holding these values should be freed by the
-* caller, using astFree, when no longer required.
-
-* Returned Value:
-* A non-zero value is returned if the supplied Mapping contained any
-* inverted CmpMaps.
-
-* Notes:
-* - It is unspecified to what extent the original CmpMap and the
-* individual (decomposed) Mappings are
-* inter-dependent. Consequently, the individual Mappings cannot be
-* modified without risking modification of the original CmpMap.
-* - If this function is invoked with the global error status set,
-* or if it should fail for any reason, then the *nmap value, the
-* list of Mapping pointers and the list of Invert values will all
-* be returned unchanged.
-*/
-
-/* Local Variables: */
- AstCmpMap *this; /* Pointer to CmpMap structure */
- int invert1; /* Invert flag for first component Mapping */
- int invert2; /* Invert flag for second component Mapping */
- int r1; /* Value returned from first map list */
- int r2; /* Value returned from second map list */
- int result; /* Returned value */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Obtain a pointer to the CmpMap structure. */
- this = (AstCmpMap *) this_mapping;
-
-/* Check if the CmpMap combines its component Mappings in the same way
- (series or parallel) as the decomposition requires. */
- if ( this->series == series ) {
-
-/* If so, obtain the Invert attribute values to be applied to each
- component Mapping. */
- invert1 = this->invert1;
- invert2 = this->invert2;
-
-/* If the CmpMap itself is inverted, also invert the Invert values to be
- applied to its components. */
- if ( invert ) {
- invert1 = !invert1;
- invert2 = !invert2;
- }
-
-/* If the component Mappings are applied in series, then concatenate
- the Mapping lists obtained from each of them. Do this in reverse
- order if the CmpMap is inverted, since the second Mapping would be
- applied first in this case. */
- if ( series ) {
- if ( !invert ) {
- r1 = astMapList( this->map1, series, invert1,
- nmap, map_list, invert_list );
- r2 = astMapList( this->map2, series, invert2,
- nmap, map_list, invert_list );
- } else {
- r1 = astMapList( this->map2, series, invert2,
- nmap, map_list, invert_list );
- r2 = astMapList( this->map1, series, invert1,
- nmap, map_list, invert_list );
- }
-
-/* If the component Mappings are applied in parallel, then concatenate
- the Mapping lists obtained from each of them. In this case,
- inverting the CmpMap has no effect on the order in which they are
- applied. */
- } else {
- r1 = astMapList( this->map1, series, invert1,
- nmap, map_list, invert_list );
- r2 = astMapList( this->map2, series, invert2,
- nmap, map_list, invert_list );
- }
-
-/* Did we find any inverted CmpMaps? */
- result = invert || r1 || r2;
-
-/* If the CmpMap does not combine its components in the way required
- by the decomposition (series or parallel), then we cannot decompose
- it. In this case it must be appended to the Mapping list as a
- single entity. We can use the parent class method to do this. */
- } else {
- result = ( *parent_maplist )( this_mapping, series, invert, nmap,
- map_list, invert_list, status );
- }
-
- return result;
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a CmpMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list )
-
-* Class Membership:
-* CmpMap method (over-rides the protected astMapMerge method
-* inherited from the Mapping class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated CmpMap in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated CmpMap with one which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated CmpMap which is to be merged with
-* its neighbours. This should be a cloned copy of the CmpMap
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* CmpMap it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated CmpMap resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstCmpMap *cmpmap1; /* Pointer to first CmpMap */
- AstCmpMap *cmpmap2; /* Pointer to second CmpMap */
- AstCmpMap *cmpmap; /* Pointer to nominated CmpMap */
- AstCmpMap *new_cm; /* Pointer to new CmpMap */
- AstMapping **new_map_list; /* Extended Mapping list */
- AstMapping *map; /* Pointer to nominated CmpMap */
- AstMapping *new1; /* Pointer to new CmpMap */
- AstMapping *new2; /* Pointer to new CmpMap */
- AstMapping *new; /* Pointer to replacement Mapping */
- AstMapping *simp1; /* Pointer to simplified Mapping */
- AstMapping *simp2; /* Pointer to simplified Mapping */
- AstPermMap *new_pm; /* Pointer to new PermMap */
- AstPermMap *permmap1; /* Pointer to first PermMap */
- AstUnitMap *unit; /* UnitMap that feeds const PermMap i/p's */
- const char *class; /* Pointer to Mapping class string */
- double *conperm; /* Pointer to PermMap constants array */
- double *const_new; /* Pointer to new PermMap constants array */
- double *p; /* Pointer to PermMap input position */
- double *q; /* Pointer to PermMap output position */
- double *qa; /* Pointer to 1st component output position */
- double *qb; /* Pointer to 2nd component output position */
- int *inperm; /* Pointer to copy of PermMap inperm array */
- int *inperm_new; /* Pointer to new PermMap inperm array */
- int *new_invert_list; /* Extended Invert flag list */
- int *outperm; /* Pointer to copy of PermMap outperm array */
- int *outperm_new; /* Pointer to new PermMap outperm array */
- int aconstants; /* Are all 1st component outputs constant? */
- int bconstants; /* Are all 2nd component outputs constant? */
- int canswap; /* Can nominated Mapping swap with lower neighbour? */
- int i; /* Coordinate index */
- int iconid; /* Constant identifier in supplied PermMap */
- int imap1; /* Index of first Mapping */
- int imap2; /* Index of second Mapping */
- int imap; /* Loop counter for Mappings */
- int invert1; /* Invert flag for first CmpMap */
- int invert1a; /* Invert flag for sub-Mapping */
- int invert1b; /* Invert flag for sub-Mapping */
- int invert2; /* Invert flag for second CmpMap */
- int invert2a; /* Invert flag for sub-Mapping */
- int invert2b; /* Invert flag for sub-Mapping */
- int invert; /* Invert attribute value */
- int j; /* Coordinate index */
- int new_invert; /* New Invert attribute value */
- int nin2a; /* No. input coordinates for sub-Mapping */
- int nin2b; /* No. input coordinates for sub-Mapping */
- int nout1a; /* No. output coordinates for sub-Mapping */
- int nout1b; /* No. output coordinates for sub-Mapping */
- int nout2a; /* No. of outputs for 1st component Mapping */
- int nout2b; /* No. of outputs for 2nd component Mapping */
- int npin; /* No. of inputs for original PermMap */
- int npin_new; /* No. of inputs for new PermMap */
- int npout; /* No. of outputs for original PermMap */
- int npout_new; /* No. of outputs for new PermMap */
- int nunit; /* No. of PermMap i/p's fed by UnitMap */
- int oconid; /* Constant identifier in returned PermMap */
- int result; /* Result value to return */
- int set; /* Invert attribute set? */
- int simpler; /* Simplification possible? */
-
-/* Initialise.*/
- result = -1;
-
-/* Check the inherited status. */
- if ( !astOK ) return result;
-
-/* Simplify the CmpMap on its own. */
-/* =============================== */
-/* Obtain a pointer to the nominated Mapping (which is a CmpMap). */
- map = ( *map_list )[ where ];
- cmpmap = (AstCmpMap *) map;
-
-/* Determine if the Mapping's Invert attribute is set and obtain its
- value. */
- set = astTestInvert( map );
- invert = astGetInvert( map );
-
-/* If necessary, change the Invert attribute to the value we want. We
- do this so that simplification (below) has a chance to absorb a
- non-zero Invert value into the implementation of the simplified
- Mapping (the preference being to have an Invert value of zero after
- simplification, if possible). */
- if ( invert != ( *invert_list )[ where ] ) {
- astSetInvert( map, ( *invert_list )[ where ] );
- }
-
-/* Simplify the Mapping and obtain the new Invert value. */
- new = astSimplify( map );
- new_invert = astGetInvert( new );
-
-/* If necessary, restore the original Mapping's Invert attribute to
- its initial state. */
- if ( invert != ( *invert_list )[ where ] ) {
- if ( set ) {
- astSetInvert( map, invert );
- } else {
- astClearInvert( map );
- }
- }
-
-/* We must now determine if simplification has occurred. Since this is
- internal code, we can compare the two Mapping pointers directly to
- see whether "astSimplify" just cloned the pointer we gave it. If it
- did, then simplification was probably not possible, but check to
- see if the Invert attribute has changed to be sure. */
- if ( astOK ) {
- simpler = ( new != map ) || ( new_invert != ( *invert_list )[ where ] );
-
-/* If simplification was successful, annul the original pointer in the
- Mapping list and replace it with the new one, together with its
- invert flag. */
- if ( simpler ) {
- (void) astAnnul( ( *map_list )[ where ] );
- ( *map_list )[ where ] = new;
- ( *invert_list )[ where ] = new_invert;
-
-/* Return the result. */
- result = where;
-
-/* Otherwise, annul the new Mapping pointer. */
- } else {
- new = astAnnul( new );
-
-/* If the nominated CmpMap is a series CmpMap and the sequence of
- Mappings are being combined in series, or if the nominated CmpMap is
- a parallel CmpMap and the sequence of Mappings are being combined in
- parallel, replace the single CmpMap with the two component Mappings. */
- if( ( series && cmpmap->series ) ||
- ( !series && !cmpmap->series ) ) {
-
-/* We are increasing the number of Mappings in the list, so we need to create
- new, larger, arrays to hold the list of Mapping pointers and invert flags. */
- new_map_list = astMalloc( ( *nmap + 1 )*sizeof( AstMapping * ) );
- new_invert_list = astMalloc( ( *nmap + 1 )*sizeof( int ) );
- if( astOK ) {
-
-/* Copy the values prior to the nominated CmpMap. */
- for( i = 0; i < where; i++ ) {
- new_map_list[ i ] = astClone( ( *map_list )[ i ] );
- new_invert_list[ i ] = ( *invert_list )[ i ];
- }
-
-/* Next insert the two components of the nominated CmpMap */
- new_map_list[ where ] = astClone( cmpmap->map1 );
- new_invert_list[ where ] = cmpmap->invert1;
- new_map_list[ where + 1 ] = astClone( cmpmap->map2 );
- new_invert_list[ where + 1 ] = cmpmap->invert2;
-
-/* Now copy any values after the nominated CmpMap. */
- for( i = where + 1; i < *nmap; i++ ) {
- new_map_list[ i + 1 ] = astClone( ( *map_list )[ i ] );
- new_invert_list[ i + 1 ] = ( *invert_list )[ i ];
- }
-
-/* Now annul the Object pointers in the supplied map list. */
- for( i = 0; i < *nmap; i++ ) {
- (* map_list )[ i ] = astAnnul( ( *map_list )[ i ] );
- }
-
-/* Free the memory holding the supplied Mapping and invert flag lists. */
- astFree( *map_list );
- astFree( *invert_list );
-
-/* Return pointers to the new extended lists. */
- *map_list = new_map_list;
- *invert_list = new_invert_list;
-
-/* Increase the number of Mappings in the list, and the index of
- the first modified Mapping. */
- (*nmap)++;
- result = where;
-
-/* Indicate some simplification has taken place */
- simpler = 1;
- }
- }
- }
-
-/* If no simplification has been done, merge adjacent CmpMaps. */
-/* ========================================================== */
-/* If the CmpMap would not simplify on its own, we now look for a
- neighbouring CmpMap with which it might merge. We use the previous
- Mapping, if suitable, since this will normally also have been fully
- simplified on its own. Check if a previous Mapping exists. */
- if( !simpler ) {
- if ( astOK && *nmap > 1 ) {
-
-/* Obtain the indices of the two potential Mappings to be merged. imap1
- is the first Mapping, imap2 is the second. imapc is the CmpMap, imapn is
- the neighbouring Mapping. */
- if( where == 0 ) {
- imap1 = 0;
- imap2 = 1;
- } else {
- imap1 = where - 1;
- imap2 = where;
- }
-
-/* Obtain the Class string of the neighbouring Mapping and determine if it
- is a CmpMap. */
- class = astGetClass( ( *map_list )[ (where>0)?where-1:1 ] );
- if ( astOK && !strcmp( class, "CmpMap" ) ) {
-
-/* If suitable, obtain pointers to the two CmpMaps. */
- cmpmap1 = (AstCmpMap *) ( *map_list )[ imap1 ];
- cmpmap2 = (AstCmpMap *) ( *map_list )[ imap2 ];
-
-/* Obtain the associated invert flag values. */
- invert1 = ( *invert_list )[ imap1 ];
- invert2 = ( *invert_list )[ imap2 ];
-
-/* Extract the invert flags associated with each CmpMap sub-Mapping
- and combine these with the flag values obtained above so as to give
- the invert flag to be used with each individual sub-Mapping. */
- invert1a = cmpmap1->invert1;
- invert1b = cmpmap1->invert2;
- if ( invert1 ) {
- invert1a = !invert1a;
- invert1b = !invert1b;
- }
- invert2a = cmpmap2->invert1;
- invert2b = cmpmap2->invert2;
- if ( invert2 ) {
- invert2a = !invert2a;
- invert2b = !invert2b;
- }
-
-/* Series CmpMaps in parallel. */
-/* =========================== */
-/* Now check if the CmpMaps can be merged. This may be possible if we
- are examining a list of Mappings combined in parallel and the two
- adjacent CmpMaps both combine their sub-Mappings in series. */
- if ( !series && cmpmap1->series && cmpmap2->series ) {
-
-/* Form two new parallel CmpMaps with the sub-Mappings re-arranged so
- that when combined in series these new CmpMaps are equivalent to
- the original ones. In doing this, we must take account of the
- invert flags which apply to each sub-Mapping and also of the fact
- that the order in which the sub-Mappings are applied depends on the
- invert flags of the original CmpMaps. */
- new1 = CombineMaps( invert1 ? cmpmap1->map2 : cmpmap1->map1,
- invert1 ? invert1b : invert1a,
- invert2 ? cmpmap2->map2 : cmpmap2->map1,
- invert2 ? invert2b : invert2a, 0, status );
- new2 = CombineMaps( invert1 ? cmpmap1->map1 : cmpmap1->map2,
- invert1 ? invert1a : invert1b,
- invert2 ? cmpmap2->map1 : cmpmap2->map2,
- invert2 ? invert2a : invert2b, 0, status );
-
-/* Having converted the parallel combination of series CmpMaps into a
- pair of equivalent parallel CmpMaps that can be combined in series,
- try and simplify each of these new CmpMaps. */
- simp1 = astSimplify( new1 );
- simp2 = astSimplify( new2 );
-
-/* Test if either could be simplified by checking if its pointer value
- has changed. Also check if the Invert attribute has changed (not
- strictly necessary, but a useful safety feature in case of any
- rogue code which just changes this attribute instead of issuing a
- new pointer). */
- simpler = ( simp1 != new1 ) || ( simp2 != new2 ) ||
- astGetInvert( simp1 ) || astGetInvert( simp2 );
-
-/* If either CmpMap was simplified, then combine the resulting
- Mappings in series to give the replacement CmpMap. */
- if ( simpler ) new =
- (AstMapping *) astCmpMap( simp1, simp2, 1, "", status );
-
-/* Annul the temporary Mapping pointers. */
- new1 = astAnnul( new1 );
- new2 = astAnnul( new2 );
- simp1 = astAnnul( simp1 );
- simp2 = astAnnul( simp2 );
-
-/* Parallel CmpMaps in series. */
-/* =========================== */
-/* A pair of adjacent CmpMaps can also potentially be merged if we are
- examining a list of Mappings combined in series and the two
- adjacent CmpMaps both combine their sub-Mappings in parallel. */
- } else if ( series && !cmpmap1->series && !cmpmap2->series ) {
-
-/* In this case, we must check that the number of input and output
- coordinates associated with the sub-Mappings are
- compatible. Determine the effective number of output coordinates
- produced by each sub-Mapping of the first CmpMap. Take account of
- the invert flags to be applied and the current setting of the
- Invert attributes. */
- if ( astGetInvert( cmpmap1->map1 ) ) {
- nout1a = invert1a ? astGetNout( cmpmap1->map1 ) :
- astGetNin( cmpmap1->map1 );
- } else {
- nout1a = invert1a ? astGetNin( cmpmap1->map1 ) :
- astGetNout( cmpmap1->map1 );
- }
- if ( astGetInvert( cmpmap1->map2 ) ) {
- nout1b = invert1b ? astGetNout( cmpmap1->map2 ) :
- astGetNin( cmpmap1->map2 );
- } else {
- nout1b = invert1b ? astGetNin( cmpmap1->map2 ) :
- astGetNout( cmpmap1->map2 );
- }
-
-/* Repeat this to obtain the effective number of input coordinates for
- each sub-Mapping of the second CmpMap. */
- if ( astGetInvert( cmpmap2->map1 ) ) {
- nin2a = invert2a ? astGetNin( cmpmap2->map1 ) :
- astGetNout( cmpmap2->map1 );
- } else {
- nin2a = invert2a ? astGetNout( cmpmap2->map1 ) :
- astGetNin( cmpmap2->map1 );
- }
- if ( astGetInvert( cmpmap2->map2 ) ) {
- nin2b = invert2b ? astGetNin( cmpmap2->map2 ) :
- astGetNout( cmpmap2->map2 );
- } else {
- nin2b = invert2b ? astGetNout( cmpmap2->map2 ) :
- astGetNin( cmpmap2->map2 );
- }
-
-/* Check if the numbers of coordinates are compatible. */
- if ( astOK && ( nout1a == nin2a ) && ( nout1b == nin2b ) ) {
-
-/* If so, combine the sub-Mappings into a pair of series CmpMaps
- which, when combined in parallel, are equivalent to the original
- ones. */
- new1 = CombineMaps( cmpmap1->map1, invert1a,
- cmpmap2->map1, invert2a, 1, status );
- new2 = CombineMaps( cmpmap1->map2, invert1b,
- cmpmap2->map2, invert2b, 1, status );
-
-/* Having converted the series combination of parallel CmpMaps into a
- pair of equivalent series CmpMaps that can be combined in parallel,
- try and simplify each of these new CmpMaps. */
- simp1 = astSimplify( new1 );
- simp2 = astSimplify( new2 );
-
-/* Test if either could be simplified by checking if its pointer value
- has changed. Also check if the Invert attribute has changed. */
- simpler = ( simp1 != new1 ) || ( simp2 != new2 ) ||
- astGetInvert( simp1 ) || astGetInvert( simp2 );
-
-/* If either CmpMap was simplified, then combine the resulting
- Mappings in parallel to give the replacement CmpMap. */
- if ( simpler ) new =
- (AstMapping *) astCmpMap( simp1, simp2, 0, "", status );
-
-/* Annul the temporary Mapping pointers. */
- new1 = astAnnul( new1 );
- new2 = astAnnul( new2 );
- simp1 = astAnnul( simp1 );
- simp2 = astAnnul( simp2 );
- }
- }
- }
-
-/* Update Mapping list. */
-/* ==================== */
-/* If adjacent CmpMaps can be combined, then annul the original pointers. */
- if ( astOK && simpler ) {
- ( *map_list )[ imap1 ] = astAnnul( ( *map_list )[ imap1 ] );
- ( *map_list )[ imap2 ] = astAnnul( ( *map_list )[ imap2 ] );
-
-/* Insert the pointer to the replacement CmpMap and initialise its
- invert flag. */
- ( *map_list )[ imap1 ] = new;
- ( *invert_list )[ imap1 ] = 0;
-
-/* Loop to close the resulting gap by moving subsequent elements down
- in the arrays. */
- for ( imap = imap2 + 1; imap < *nmap; imap++ ) {
- ( *map_list )[ imap - 1 ] = ( *map_list )[ imap ];
- ( *invert_list )[ imap - 1 ] = ( *invert_list )[ imap ];
- }
-
-/* Clear the vacated elements at the end. */
- ( *map_list )[ *nmap - 1 ] = NULL;
- ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
- modified element. */
- ( *nmap )--;
- result = imap1;
- }
- }
- }
- }
-
-/* If we are merging the Mappings in series, and if the nominated CmpMap
- is a parallel CmpMap, and if the lower neighbour is a PermMap, it may
- be possible to swap the PermMap and the CmpMap. This may allow one of
- the two swapped Mappings to merge with its new neighbour.
- ==================================================================== */
-
-/* Only do this if no simplification occurred above, and if the Mappings
- are being merged in series, and if the nominated Mapping is not the
- first in the list. */
- if( result == -1 && where > 0 ){
-
-/* Obtain the indices of the two potential Mappings to be swapped. */
- imap1 = where - 1;
- imap2 = where;
-
-/* Obtain a pointer to the CmpMap. */
- cmpmap2 = (AstCmpMap *) ( *map_list )[ imap2 ];
-
-/* Obtain the Class string of the first (previous) Mapping and
- determine if it is a PermMap. Also check that the nominated Mapping is
- a parallel CmpMap. */
- class = astGetClass( ( *map_list )[ imap1 ] );
- if ( astOK && !strcmp( class, "PermMap" ) && !cmpmap2->series) {
-
-/* Indicate we have no new Mapping to store. */
- new = NULL;
-
-/* If suitable, obtain a pointer to the PermMap. */
- permmap1 = (AstPermMap *) ( *map_list )[ imap1 ];
-
-/* Obtain the current values of the Invert attribute in the Mappings. */
- invert1 = astGetInvert( permmap1 );
- invert2 = astGetInvert( cmpmap2 );
-
-/* Temporarily set the Invert attributes of both Mappings to the values
- supplied in the "invert_list" parameter. */
- astSetInvert( permmap1, ( *invert_list )[ imap1 ] );
- astSetInvert( cmpmap2, ( *invert_list )[ imap2 ] );
-
-/* Get the number of inputs and outputs for the PermMap.*/
- npout = astGetNout( permmap1 );
- npin = astGetNin( permmap1 );
-
-/* Get the number of inputs and outputs for the two components of the
- nominated parallel CmpMap. */
- nin2a = astGetNin( cmpmap2->map1 );
- nin2b = astGetNin( cmpmap2->map2 );
- nout2a = astGetNout( cmpmap2->map1 );
- nout2b = astGetNout( cmpmap2->map2 );
-
-/* Get the input and output axis permutation arrays and the constants
- array from the PermMap */
- inperm =astGetInPerm( permmap1 );
- outperm =astGetOutPerm( permmap1 );
- conperm = astGetConstants( permmap1 );
-
-/* In order to swap the Mappings, the PermMap outputs which feed the
- inputs of the first component of the parallel CmpMap must be copied
- from a contiguous block at the end of the list of PermMap inputs, or
- must all be assigned constant values. Likewise, the PermMap outputs which
- feed the inputs of the second component of the parallel CmpMap must be
- copied from a contiguous block at the beggining of the list of PermMap
- inputs or must be assigned constant values. Also, there must be a
- one-to-one correspondance between inputs and outputs in the PermMap.
- Check that the first block of nin2a PermMap outputs are copied from
- the last block of nin2a PermMap inputs (and vica-versa) or are constant. */
- canswap = ( npin == npout );
- aconstants = ( outperm[ 0 ] < 0 );
-
- for( i = 0, j = npin - nin2a; i < nin2a; i++, j++ ) {
- if( aconstants ) {
- if( outperm[ i ] >= 0 ) {
- canswap = 0;
- break;
- }
-
- } else if( outperm[ i ] != j || inperm[ j ] != i ) {
- canswap = 0;
- break;
- }
- }
-
-/* Check that the first block of nin2b PermMap inputs are copied from
- the last block of nin2b PermMap outputs, and vica-versa. */
- bconstants = ( outperm[ nin2a ] < 0 );
- for( i = 0, j = npout - nin2b; i < nin2b; i++, j++ ) {
- if( bconstants ) {
- if( outperm[ j ] >= 0 ) {
- canswap = 0;
- break;
- }
- } else if( inperm[ i ] != j || outperm[ j ] != i ) {
- canswap = 0;
- break;
- }
- }
-
-/* If the Mappings can be swapped.. */
- new_pm = NULL;
- new_cm = NULL;
- qa = NULL;
- qb = NULL;
- if( canswap ) {
-
-/* Temporarily set the Invert attributes of the component Mappings to the
- values they had when the CmpMap was created. */
- invert2a = astGetInvert( cmpmap2->map1 );
- invert2b = astGetInvert( cmpmap2->map2 );
- astSetInvert( cmpmap2->map1, cmpmap2->invert1 );
- astSetInvert( cmpmap2->map2, cmpmap2->invert2 );
-
-/* If any PermMap outputs are constant, we will need the results of
- transforming these constants using the CmpMap which follows. */
- if( aconstants || bconstants ) {
-
-/* Transform a set of bad inputs using the PermMap. This will assign the
- PermMap constant to any fixed outputs. */
- p = astMalloc( sizeof( double )*(size_t) npin );
- q = astMalloc( sizeof( double )*(size_t) npout );
- qa = astMalloc( sizeof( double )*(size_t) nout2a );
- qb = astMalloc( sizeof( double )*(size_t) nout2b );
- if( astOK ) {
- for( i = 0; i < npin; i++ ) p[ i ] = AST__BAD;
- astTranN( permmap1, 1, npin, 1, p, 1, npout, 1, q );
-
-/* Transform the PermMap outputs using the two component Mappings in the
- CmpMap. */
- astTranN( cmpmap2->map1, 1, nin2a, 1, q, 1, nout2a, 1, qa );
- astTranN( cmpmap2->map2, 1, nin2b, 1, q + nin2a, 1, nout2b, 1, qb );
-
- }
- p = astFree( p );
- q = astFree( q );
- }
-
-/* If necessary, create a UnitMap to replace a Mapping which has constant
- outputs. The number of axes for the UnitMap is chosen to give the
- correct total number of inputs for the final parallel CmpMap. At the
- same time determine the number of inputs needed by the final PermMap. */
- if( aconstants ) {
- nunit = npin - nin2b;
- npin_new = nout2b + nunit;
- } else if( bconstants ) {
- nunit = npin - nin2a;
- npin_new = nout2a + nunit;
- } else {
- nunit = 0;
- npin_new = nout2a + nout2b;
- }
- unit = nunit ? astUnitMap( nunit, "", status ) : NULL;
-
-/* Determine the number of outputs for the final PermMap and allocate memory
- for its permutation arrays. */
- npout_new = nout2a + nout2b;
- outperm_new = astMalloc( sizeof( int )*(size_t) npout_new );
- inperm_new = astMalloc( sizeof( int )*(size_t) npin_new );
- const_new = astMalloc( sizeof( double )*(size_t) ( npout_new + npin_new ) );
- if( astOK ) {
- oconid = 0;
-
-/* First assign permutations for the second component Mapping, if used. */
- if( !bconstants ) {
- for( i = 0, j = npout_new - nout2b; i < nout2b; i++,j++ ) {
- inperm_new[ i ] = j;
- outperm_new[ j ] = i;
- }
-
-/* Otherwise, store constants */
- } else {
-
- for( i = 0; i < nunit; i++ ){
- iconid = inperm[ i ];
- if( iconid >= npout ) {
- inperm_new[ i ] = npout_new;
-
- } else if( iconid >= 0 ) {
- astError( AST__INTER, "astMapMerge(CmpMap): Swapped PermMap "
- "input is not constant (internal AST programming "
- "error)." , status);
- break;
-
- } else {
- inperm_new[ i ] = --oconid;
- const_new[ -( oconid + 1 ) ] = conperm[ -( iconid + 1 ) ];
- }
- }
-
- for( i = 0, j = npout_new - nout2b; i < nout2b; i++,j++ ) {
- outperm_new[ j ] = --oconid;
- const_new[ -( oconid + 1 ) ] = qb[ i ];
- }
-
- }
-
-/* Now assign permutations for the first component Mapping, if used. */
- if( !aconstants ) {
- for( i = 0, j = npin_new - nout2a; i < nout2a; i++,j++ ) {
- inperm_new[ j ] = i;
- outperm_new[ i ] = j;
- }
-
-/* Otherwise, store constants */
- } else {
-
- for( i = nout2b; i < npin_new; i++ ){
- iconid = inperm[ i - nout2b + nin2b ];
- if( iconid >= npout ) {
- inperm_new[ i ] = npout_new;
-
- } else if( iconid >= 0 ) {
- astError( AST__INTER, "astMapMerge(CmpMap): Swapped PermMap "
- "input is not constant (internal AST programming "
- "error)." , status);
- break;
-
- } else {
- inperm_new[ i ] = --oconid;
- const_new[ -( oconid + 1 ) ] = conperm[ -( iconid + 1 ) ];
- }
- }
-
- for( i = 0; i < nout2a; i++ ) {
- outperm_new[ i ] = --oconid;
- const_new[ -( oconid + 1 ) ] = qa[ i ];
- }
-
- }
-
-/* Create the new PermMap */
- new_pm = astPermMap( npin_new, inperm_new, npout_new,
- outperm_new, const_new, "", status );
-
-/* Create the new CmpMap.*/
- if( aconstants ) {
- if( unit ) {
- new_cm = astCmpMap( cmpmap2->map2, unit, 0, "", status );
- } else {
- new_cm = astCopy( cmpmap2->map2 );
- }
-
- } else if( bconstants ) {
- if( unit ) {
- new_cm = astCmpMap( unit, cmpmap2->map1, 0, "", status );
- } else {
- new_cm = astCopy( cmpmap2->map1 );
- }
-
- } else{
- new_cm = astCmpMap( cmpmap2->map2, cmpmap2->map1, 0, "", status );
- }
-
- }
-
-/* Free Memory. */
- if( unit ) unit = astAnnul( unit );
- outperm_new = astFree( outperm_new );
- inperm_new = astFree( inperm_new );
- const_new = astFree( const_new );
- if( aconstants || bconstants ) {
- qa = astFree( qa );
- qb = astFree( qb );
- }
-
-/* Re-instate the original Invert attributes in the component Mappings. */
- astSetInvert( cmpmap2->map1, invert2a );
- astSetInvert( cmpmap2->map2, invert2b );
-
- }
-
-/* Release the arrays holding the input and output permutation arrays
- and constants copied from the PermMap. */
- inperm = astFree( inperm );
- outperm = astFree( outperm );
- conperm = astFree( conperm );
-
-/* Re-instate the original values of the Invert attributes of both
- Mappings. */
- astSetInvert( permmap1, invert1 );
- astSetInvert( cmpmap2, invert2 );
-
-/* If the Mappings can be swapped... */
- if( astOK && canswap ) {
-
-/* Annul the supplied pointer to the two Mappings. */
- ( *map_list )[ imap1 ] = astAnnul( ( *map_list )[ imap1 ] );
- ( *map_list )[ imap2 ] = astAnnul( ( *map_list )[ imap2 ] );
-
-/* Store the new PermMap pointer in the slot previously occupied by the
- nominated CmpMap pointer. Likewise, store the invert flag. */
- ( *map_list )[ imap2 ] = (AstMapping *) new_pm;
- ( *invert_list )[ imap2 ] = astGetInvert( new_pm );
-
-/* Store the new PermMap pointer in the slot previously occupied by the
- nominated CmpMap pointer. Likewise, store the invert flag. */
- ( *map_list )[ imap1 ] = (AstMapping *) new_cm;
- ( *invert_list )[ imap1 ] = astGetInvert( new_cm );
-
-/* Return the index of the first modified element. */
- result = imap1;
-
- }
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = -1;
-
-/* Return the result. */
- return result;
-}
-
-static int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status ){
-/*
-* Name:
-* MapSplit
-
-* Purpose:
-* Create a Mapping representing a subset of the inputs of an existing
-* CmpMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpmap.h"
-* int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map )
-
-* Class Membership:
-* CmpMap method (over-rides the protected astMapSplit method
-* inherited from the Mapping class).
-
-* Description:
-* This function performs the work for the astMapSplit method. It
-* first simply invokes the private MapSplit1 function to see if the
-* forward transformation of the supplied CmpMap can be split as
-* requested. If this is not possible it attempts an inverse approach
-* to the problem. For each possible sub-sets of the Mapping outputs
-* it call MapSplit1 to see if the sub-set of outputs are generated
-* from the selected inputs.
-
-* Parameters:
-* this
-* Pointer to the CmpMap to be split (the CmpMap is not actually
-* modified by this function).
-* nin
-* The number of inputs to pick from "this".
-* in
-* Pointer to an array of indices (zero based) for the inputs which
-* are to be picked. This array should have "nin" elements. If "Nin"
-* is the number of inputs of the supplied CmpMap, then each element
-* should have a value in the range zero to Nin-1.
-* map
-* Address of a location at which to return a pointer to the new
-* Mapping. This Mapping will have "nin" inputs (the number of
-* outputs may be different to "nin"). A NULL pointer will be
-* returned if the supplied CmpMap has no subset of outputs which
-* depend only on the selected inputs.
-
-* Returned Value:
-* A pointer to a dynamically allocated array of ints. The number of
-* elements in this array will equal the number of outputs for the
-* returned Mapping. Each element will hold the index of the
-* corresponding output in the supplied CmpMap. The array should be
-* freed using astFree when no longer needed. A NULL pointer will
-* be returned if no output Mapping can be created.
-
-* Notes:
-* - If this function is invoked with the global error status set,
-* or if it should fail for any reason, then NULL values will be
-* returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
- AstMapping *map2; /* Subset Mapping */
- AstMapping *this2; /* Inverted copy of the supplied Mapping */
- int *out; /* Selected output indices */
- int *result; /* Axis order to return */
- int *result2; /* Axis order for current output subset */
- int i; /* Loop count */
- int j; /* Loop count */
- int mout; /* Number of selected outputs */
- int nin2; /* Number of inputs fed by current outputs */
- int nout; /* The number of outputs from the supplied Mapping */
- int ok; /* Are all required inputs fed by current outputs? */
-
-/* Initialise */
- result = NULL;
- *map = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* First see if the forward transformation can be split as requested. */
- result = MapSplit1( this, nin, in, map, status );
-
-/* If forward transformation could not be split, we attempt to split the
- inverse transformation by selecting every possible sub-set of Mapping
- outputs until one is found which is fed by the requested mapping inputs. */
- if( !result ) {
-
-/* Get the number of Mapping outputs. */
- nout = astGetNout( this );
-
-/* Get an inverted copy of the Mapping. We do this rather than inverting
- the supplied Maping in case an error occurs which may leave the
- supplied Mapping inverted. */
- this2 = astCopy( this );
- astInvert( this2 );
-
-/* Allocate memory to hold the selected output indices. */
- out = astMalloc( nout*sizeof( int ) );
-
-/* Loop round all useful subset sizes. */
- if( out ) {
- for( mout = 1; mout < nout && !result; mout++ ) {
-
-/* Initialise the first subset of outputs to check at the current subset
- size. */
- for( i = 0; i < mout; i++ ) out[ i ] = 0;
-
-/* Loop round all ways of picking a subset of "mout" outputs from the total
- available "nout" outputs. */
- while( ! result ) {
-
-/* Skip this subset if it refers to any axis index more than once. */
- ok = 1;
- for( i = 1; i < mout && ok; i++ ) {
- for( j = 0; j < i; j++ ) {
- if( out[ i ] == out[ j ] ) {
- ok = 0;
- break;
- }
- }
- }
- if( ok ) {
-
-/* Attempt to split the inverted Mapping using the current subset of
- outputs. */
- result2 = MapSplit1( this2, mout, out, &map2, status );
-
-/* If succesful... */
- if( result2 ) {
-
-/* See if the inputs that feed the current subset of outputs are the same
- as the inputs specified by the caller (and in the same order). */
- nin2 = astGetNout( map2 );
- ok = ( nin2 == nin );
- if( ok ) {
- for( i = 0; i < nin; i++ ) {
- if( in[ i ] != result2[ i ] ) {
- ok = 0;
- break;
- }
- }
- }
-
-/* If so, set up the values returned to the caller. */
- if( ok ) {
- result = astStore( result, out, mout*sizeof(int) );
- astInvert( map2 );
- *map = astClone( map2 );
- }
-
-/* Free resources. */
- result2 = astFree( result2 );
- map2 = astAnnul( map2 );
- }
- }
-
-/* Increment the first axis index. */
- i = 0;
- out[ i ]++;
-
-/* If the incremented axis index is now too high, reset it to zero and
- increment the next higher axis index. Do this until an incremented axis
- index is not too high. */
- while( out[ i ] == nout ) {
- out[ i++ ] = 0;
-
- if( i < mout ) {
- out[ i ]++;
- } else {
- break;
- }
- }
-
-/* If all subsets have been checked break out of the loop. */
- if( i == mout ) break;
-
- }
- }
- }
-
-/* Free resources. */
- out = astFree( out );
- this2 = astAnnul( this2 );
- }
-
-/* Free returned resources if an error has occurred. */
- if( !astOK ) {
- result = astFree( result );
- *map = astAnnul( *map );
- }
-
-/* Return the list of output indices. */
- return result;
-}
-
-static int *MapSplit1( AstMapping *this_map, int nin, const int *in, AstMapping **map,
- int *status ){
-/*
-* Name:
-* MapSplit1
-
-* Purpose:
-* Create a Mapping representing a subset of the inputs of an existing
-* CmpMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpmap.h"
-* int *MapSplit1( AstMapping *this, int nin, const int *in, AstMapping **map,
-* int *status )
-
-* Class Membership:
-* CmpMap method
-
-* Description:
-* This function creates a new Mapping by picking specified inputs from
-* an existing CmpMap. This is only possible if the specified inputs
-* correspond to some subset of the CmpMap outputs. That is, there
-* must exist a subset of the CmpMap outputs for which each output
-* depends only on the selected CmpMap inputs, and not on any of the
-* inputs which have not been selected. If this condition is not met
-* by the supplied CmpMap, then a NULL Mapping is returned.
-
-* Parameters:
-* this
-* Pointer to the CmpMap to be split (the CmpMap is not actually
-* modified by this function).
-* nin
-* The number of inputs to pick from "this".
-* in
-* Pointer to an array of indices (zero based) for the inputs which
-* are to be picked. This array should have "nin" elements. If "Nin"
-* is the number of inputs of the supplied CmpMap, then each element
-* should have a value in the range zero to Nin-1.
-* map
-* Address of a location at which to return a pointer to the new
-* Mapping. This Mapping will have "nin" inputs (the number of
-* outputs may be different to "nin"). A NULL pointer will be
-* returned if the supplied CmpMap has no subset of outputs which
-* depend only on the selected inputs.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated array of ints. The number of
-* elements in this array will equal the number of outputs for the
-* returned Mapping. Each element will hold the index of the
-* corresponding output in the supplied CmpMap. The array should be
-* freed using astFree when no longer needed. A NULL pointer will
-* be returned if no output Mapping can be created.
-
-* Notes:
-* - If this function is invoked with the global error status set,
-* or if it should fail for any reason, then NULL values will be
-* returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
- AstCmpMap *this; /* Pointer to CmpMap structure */
- AstCmpMap *tmap; /* Pointer to partial Mapping */
- AstMapping *amap; /* Pointer to ealier Mapping split by given inputs */
- AstMapping *bmap; /* Pointer to later Mapping split by earlier outputs */
- AstMapping *map1; /* Pointer to 1st component Mapping */
- AstMapping *map2; /* Pointer to 2nd component Mapping */
- AstMapping *rmap1; /* Pointer to split lower Mapping */
- AstMapping *rmap2; /* Pointer to split higher Mapping */
- AstPermMap *pmap; /* Input permutation */
- int *bin; /* Inputs to use with later Mapping */
- int *inp; /* Pointer to inperm work array */
- int *outp; /* Pointer to outperm work array */
- int *p; /* Pointer to next element */
- int *pb; /* Pointer to first input for higher Mapping */
- int *res1; /* Pointer to outputs used from lower Mapping */
- int *res2; /* Pointer to outputs used from higher Mapping */
- int *result; /* Pointer to returned array */
- int doperm; /* Is input permutation needed? */
- int i; /* Loop count */
- int inv; /* Has the CmpMap been inverted? */
- int j; /* Loop count */
- int nbin; /* Number of inputs to pick from later Mapping */
- int nin1; /* No. of inputs to lower Mapping */
- int nin2; /* No. of inputs to higher Mapping */
- int noff; /* No. of outputs from total lower Mapping */
- int nout1; /* No. of outputs from split lower Mapping */
- int nout2; /* No. of outputs from split higher Mapping */
- int npin; /* Total no. of CmpMap inputs */
- int ok; /* Can required Mapping be created? */
- int old_inv1; /* Original Invert flag for map1 */
- int old_inv2; /* Original Invert flag for map2 */
- int t; /* Temporary storage */
-
-/* Initialise */
- result = NULL;
- *map = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the CmpMap structure. */
- this = (AstCmpMap *) this_map;
-
-/* Get the number of inputs in the supplied CmpMap. */
- npin = astGetNin( this );
-
-/* Check all input axis indices are valid. */
- ok = 1;
- for( i = 0; i < nin; i++ ) {
- if( in[ i ] < 0 || in[ i ] >= npin ) {
- ok = 0;
- break;
- }
- }
-
-/* If OK, proceed. */
- if( ok ) {
-
-/* Get the component Mapping pointers. Set the Invert flags as they were when
- the CmpMap was created, first saving the current Invert flags so they can
- be re-instated later. */
- map1 = this->map1;
- old_inv1 = astGetInvert( map1 );
- astSetInvert( map1, this->invert1 );
- map2 = this->map2;
- old_inv2 = astGetInvert( map2 );
- astSetInvert( map2, this->invert2 );
-
-/* If the CmpMap has been inverted, invert the components. */
- inv = astGetInvert( this );
- if( inv ) {
- astInvert( map1 );
- astInvert( map2 );
- }
-
-/* First deal with series CmpMaps. */
- if( this->series ) {
-
-/* Try to split the first (or second if the CmpMap has been inverted)
- component Mapping. */
- bin = astMapSplit( inv ? map2 : map1, nin, in, &amap );
-
-/* Check the split was done. */
- if( bin ) {
-
-/* Split the other component using the outputs generated by splitting the
- first component. */
- nbin = astGetNout( amap );
- result = astMapSplit( inv ? map1 : map2, nbin, bin, &bmap );
-
-/* Check the split was done. */
- if( result ) {
-
-/* Form the required CmpMap. */
- *map = (AstMapping *) astCmpMap( amap, bmap, 1, "", status );
-
-/* Free resources. */
- bmap = astAnnul( bmap );
- }
-
- bin = astFree( bin );
- amap = astAnnul( amap );
- }
-
-/* Now deal with parallel CmpMaps. */
- } else {
-
-/* Allocate work space. */
- outp = astMalloc( sizeof(int)*(size_t)nin );
- inp = astMalloc( sizeof(int)*(size_t)nin );
- if( astOK ) {
-
-/* Initialise pointers. */
- res1 = NULL;
- rmap1 = NULL;
- res2 = NULL;
- rmap2 = NULL;
-
-/* The caller may have selected the Mapping inputs in any order, so we
- need to create a PermMap which will permute the inputs from the
- requested order to the order used by the CmpMap. First fill the outperm
- work array with its own indices. */
- for( i = 0; i < nin; i++ ) outp[ i ] = i;
-
-/* Sort the outperm work array so that it accesses the array of input indices
- in ascending order */
- for( j = nin - 1; j > 0; j-- ) {
- p = outp;
- for( i = 0; i < j; i++,p++ ) {
- if( in[ p[0] ] > in[ p[1] ] ) {
- t = p[0];
- p[0] = p[1];
- p[1] = t;
- }
- }
- }
-
-/* Create the inperm array which is the inverse of the above outperm
- array. Note if the permutation is necessary. */
- doperm = 0;
- for( i = 0; i < nin; i++ ) {
- if( outp[ i ] != i ) doperm = 1;
- inp[ outp[ i ] ] = i;
- }
-
-/* Create a PermMap which reorders the inputs into ascending order. */
- pmap = doperm ? astPermMap( nin, inp, nin, outp, NULL, "", status ) : NULL;
-
-/* Store the sorted input indices in the inp work array, get a pointer
- to the first input relating to the second component Mapping, and shift
- all the indices relating to the second component Mapping so they are
- zero based. */
- nin1 = astGetNin( map1 );
- pb = NULL;
- for( i = 0; i < nin; i++ ) {
- inp[ i ] = in[ outp[ i ] ];
- if( inp[ i ] >= nin1 ) {
- inp[ i ] -= nin1;
- if( !pb ) pb = inp + i;
- }
- }
-
-/* If any of the selected inputs relate to the first component Mapping, try
- to split the first component Mapping using the input indices stored
- at the start of the sorted array. */
- nin1 = pb ? ( pb - inp ) : nin;
- if( nin1 ) {
- res1 = astMapSplit( map1, nin1, inp, &rmap1 );
- ok = ( res1 != NULL );
- } else {
- ok = 1;
- }
-
-/* If OK, see if any of the selected inputs relate to the second component
- Mapping, try to split the second component Mapping using the input indices
- stored at the end of the sorted array. */
- if( ok ) {
- nin2 = nin - nin1;
- if( nin2 ) {
- res2 = astMapSplit( map2, nin2, pb, &rmap2 );
- ok = ( res2 != NULL );
- } else {
- ok = 1;
- }
- }
-
-/* If OK, combine the two resulting Mappings in parallel and construct
- the returned results array. */
- if( ok ) {
- if( res1 && res2 ) {
- tmap = astCmpMap( rmap1, rmap2, 0, "", status );
- nout1 = astGetNout( rmap1 );
- nout2 = astGetNout( rmap2 );
- result = astMalloc( sizeof(int)*(size_t) (nout1+nout2) );
- for( i = 0; i < nout1; i++ ) result[ i ] = res1[ i ];
- noff = astGetNout( map1 );
- for( i = 0; i < nout2; i++ ) result[ i + nout1 ] = res2[ i ] + noff;
-
- } else if( res1 ) {
- tmap = astCopy( rmap1 );
- nout1 = astGetNout( rmap1 );
- result = astMalloc( sizeof(int)*(size_t) nout1 );
- for( i = 0; i < nout1; i++ ) result[ i ] = res1[ i ];
-
- } else if( res2 ) {
- tmap = astCopy( rmap2 );
- nout2 = astGetNout( rmap2 );
- result = astMalloc( sizeof(int)*(size_t) nout2 );
- noff = astGetNout( map1 );
- for( i = 0; i < nout2; i++ ) result[ i ] = res2[ i ] + noff;
-
- } else {
- ok = 0;
- tmap = NULL;
- }
-
-/* If required, add in the PermMap which re-orders the inputs. */
- if( ok ) {
- if( doperm ) {
- *map = (AstMapping *) astCmpMap( pmap, tmap, 1, "", status );
- } else {
- *map = astCopy( tmap );
- }
- }
-
-/* Free resources */
- if( tmap ) tmap = astAnnul( tmap );
- }
-
- if( res1 ) res1 = astFree( res1 );
- if( rmap1 ) rmap1 = astAnnul( rmap1 );
- if( res2 ) res2 = astFree( res2 );
- if( rmap2 ) rmap2 = astAnnul( rmap2 );
- if( pmap ) pmap = astAnnul( pmap );
- }
-
- inp = astFree( inp );
- outp = astFree( outp );
- }
-
-/* Reset the original values of the Invert flags of the component
- Mappings. */
- astSetInvert( map1, old_inv1 );
- astSetInvert( map2, old_inv2 );
- }
-
-/* Free returned resources if an error has occurred. */
- if( !astOK ) {
- result = astFree( result );
- *map = astAnnul( *map );
- }
-
-/* Return the list of output indices. */
- return result;
-}
-
-static int PatternCheck( int val, int check, int **list, int *list_len, int *status ){
-/*
-* Name:
-* Looping
-
-* Purpose:
-* Check for repeating patterns in a set of integer values.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpmap.h"
-* int PatternCheck( int val, int nmap, int **mlist, int **nlist, int *list_len )
-
-* Class Membership:
-* CmpMap member function.
-
-* Description:
-* This function appends a supplied integer to a dynamic list, creating
-* or expanding the list if necessary.It then optionally, check the
-* list for evidence of repeating patterns. If such a pattern is
-* found, its wavelength is returned.
-
-* Parameters:
-* val
-* The integer value to add to the list.
-* check
-* Should a check for reating patterns be performed?
-* list
-* Address of a location at which is stored a pointer to an array
-* holding the values supplied on previous invocations of this
-* function. If a NULL pointer is supplied a new array is allocated.
-* On exit, the supplied value is appended to the end of the array. The
-* array is extended as necessary. The returned pointer should be
-* freed using astFree when no longer needed.
-* list_len
-* Address of a location at which is stored the number of elements
-* in the "list" array.
-
-* Returned Value:
-* A non-zero "wavelength" value is returned if there is a repeating
-* pattern is found in the "list" array. Otherwise, zero is returned.
-* The "wavelength" is the number of integer values which constitute a
-* single instance of the pattern.
-
-* Notes:
-* - A value of 1 is returned if this function is invoked with the AST
-* error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- int *wave[ 30 ]; /* Pointers to start of waves */
- int iat; /* Index of elements added by this invocation */
- int jat; /* Index of element condiered next */
- int jlo; /* Earliest "mlist" entry to consider */
- int k; /* Index of element within pattern */
- int mxwave; /* Max pattern length to consider */
- int iwave; /* Index of current wave */
- int nwave; /* Number of waves required to mark a pattern */
- int result; /* Returned flag */
- int wavelen; /* Current pattern length */
-
-/* Check the global status. */
- if ( !astOK ) return 1;
-
-/* Initialise */
- result = 0;
-
-/* If no array has been supplied, create a new array. */
- if( !(*list) ) {
- *list = astMalloc( 100*sizeof( int ) );
- *list_len = 0;
- }
-
-/* Store the new value in the array, extending it if necessary. */
- iat = (*list_len)++;
- *list = astGrow( *list, *list_len, sizeof( int ) );
- if( astOK ) {
- (*list)[ iat ] = val;
-
-/* If required, determine the maximum "wavelength" for looping patterns to be
- checked, and store the earliest list entry to consider. We take 3 complete
- patterns as evidence of looping, but we only do the check when the
- list length is at least 30. */
- if( check && *list_len > 29 ){
- mxwave = iat/3;
- if( mxwave > 50 ) mxwave = 50;
- jlo = iat - 3*mxwave;
-
-/* Search backwards from the end of "list" looking for the most recent
- occurence of the supplied "val" value. Limit the search to
- wavelengths of no more than the above limit. */
- jat = iat - 1;
- while( jat >= jlo ) {
- if( (*list)[ jat ] == val ) {
-
-/* When an earlier occurrence of "val" is found, see if the values
- which preceed it are the same as the values which preceed the new
- element if "list" added by this invocation. We use 3 complete
- patterns as evidence of looping, unless the wavelength is 1 in which
- case we use 30 patterns (this is because wavelengths of 1 can occur
- in short sequences legitamately). */
- wavelen = iat - jat;
-
- if( wavelen == 1 ) {
- nwave = 30;
- if( nwave > iat ) nwave = iat;
- } else {
- nwave = 3;
- }
-
- if( nwave*wavelen <= *list_len ) {
- result = wavelen;
- wave[ 0 ] = *list + *list_len - wavelen;
- for( iwave = 1; iwave < nwave; iwave++ ) {
- wave[ iwave ] = wave[ iwave - 1 ] - wavelen;
- }
-
- for( k = 0; k < wavelen; k++ ) {
- for( iwave = 1; iwave < nwave; iwave++ ) {
- if( *wave[ iwave ] != *wave[ 0 ] ) {
- result = 0;
- break;
- }
- wave[ iwave ]++;
- }
- wave[ 0 ]++;
- }
- }
-
-/* Break if we have found a repeating pattern. */
- if( result ) break;
-
- }
- jat--;
- }
- }
- }
-
- if( !astOK ) result= 1;
-
-/* Return the result.*/
- return result;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-* Name:
-* Rate
-
-* Purpose:
-* Calculate the rate of change of a Mapping output.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpmap.h"
-* result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-* Class Membership:
-* CmpMap member function (overrides the astRate method inherited
-* from the Mapping class ).
-
-* Description:
-* This function returns the rate of change of a specified output of
-* the supplied Mapping with respect to a specified input, at a
-* specified input position.
-
-* Parameters:
-* this
-* Pointer to the Mapping to be applied.
-* at
-* The address of an array holding the axis values at the position
-* at which the rate of change is to be evaluated. The number of
-* elements in this array should equal the number of inputs to the
-* Mapping.
-* ax1
-* The index of the Mapping output for which the rate of change is to
-* be found (output numbering starts at 0 for the first output).
-* ax2
-* The index of the Mapping input which is to be varied in order to
-* find the rate of change (input numbering starts at 0 for the first
-* input).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The rate of change of Mapping output "ax1" with respect to input
-* "ax2", evaluated at "at", or AST__BAD if the value cannot be
-* calculated.
-
-*/
-
-/* Local Variables: */
- AstMapping *c1;
- AstMapping *c2;
- AstCmpMap *map;
- double result;
- int old_inv1;
- int old_inv2;
- int nin1;
- int nin2;
- double *at2;
- double r1;
- double r2;
- int nout1;
- int i;
-
-/* Check inherited status */
- if( !astOK ) return AST__BAD;
-
-/* Get a pointer to the CmpMap structure. */
- map = (AstCmpMap *) this;
-
-/* Note the current Invert flags of the two component Mappings. */
- old_inv1 = astGetInvert( map->map1 );
- old_inv2 = astGetInvert( map->map2 );
-
-/* Temporarily reset them to the values they had when the CmpMap was
- created. */
- astSetInvert( map->map1, map->invert1 );
- astSetInvert( map->map2, map->invert2 );
-
-/* If the CmpMap itself has been inverted, invert the component Mappings.
- Also note the order in which the Mappings should be applied if in series. */
- if( !astGetInvert( this ) ) {
- c1 = map->map1;
- c2 = map->map2;
- } else {
- c1 = map->map2;
- c2 = map->map1;
- astInvert( c1 );
- astInvert( c2 );
- }
-
-/* First deal with Mappings in series. */
- if( map->series ) {
-
-/* Get the number of inputs to the two component Mappings. */
- nin1 = astGetNin( c1 );
- nin2 = astGetNin( c2 );
-
-/* Allocate workspace to hold the result of transforming the supplied "at"
- position using the first component. */
- at2 = astMalloc( sizeof( double )*(size_t) nin2 );
-
-/* Transform the supplied "at" position using the first component. */
- astTranN( c1, 1, nin1, 1, at, 1, nin2, 1, at2 );
-
-/* The required rate of change is the sum of the products of the rate of
- changes of the two component mappings, summed over all the output axes
- of the first componment. */
- result = 0.0;
- for( i = 0; i < nin2; i++ ) {
-
-/* Find the rate of change of output "i" of the first component with
- respect to input "ax2" at the supplied "at" position. */
- r1 = astRate( c1, at, i, ax2 );
-
-/* Find the rate of change of output "ax1" of the second component with
- respect to input "i" at the transformed "at2" position. */
- r2 = astRate( c2, at2, ax1, i );
-
-/* If both are good, increment the ryunning total by the product of the
- two rates. Otherwise, break. */
- if( r1 != AST__BAD && r2 != AST__BAD ) {
- result += r1*r2;
- } else {
- result = AST__BAD;
- break;
- }
- }
-
-/* Free the workspace. */
- at2 = astFree( at2 );
-
-/* Now deal with Mappings in parallel. */
- } else {
-
-/* Get the number of inputs and outputs for the lower component Mappings. */
- nin1 = astGetNin( map->map1 );
- nout1 = astGetNout( map->map1 );
-
-/* If both input and output relate to the lower component Mappings, use its
- astRate method. */
- if( ax1 < nout1 && ax2 < nin1 ) {
- result = astRate( map->map1, at, ax1, ax2 );
-
-/* If both input and output relate to the upper component Mappings, use its
- astRate method. */
- } else if( ax1 >= nout1 && ax2 >= nin1 ) {
- result = astRate( map->map2, at + nin1, ax1 - nout1, ax2 - nin1 );
-
-/* If input and output relate to different component Mappings, return
- zero. */
- } else {
- result = 0.0;
- }
- }
-
-/* Reinstate the original Invert flags of the component Mappings .*/
- astSetInvert( map->map1, old_inv1 );
- astSetInvert( map->map2, old_inv2 );
-
-/* Return the result. */
- return result;
-}
-
-static AstMapping *RemoveRegions( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* RemoveRegions
-
-* Purpose:
-* Remove any Regions from a Mapping.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpmap.h"
-* AstMapping *RemoveRegions( AstMapping *this, int *status )
-
-* Class Membership:
-* CmpMap method (over-rides the astRemoveRegions method inherited
-* from the Mapping class).
-
-* Description:
-* This function searches the supplied Mapping (which may be a
-* compound Mapping such as a CmpMap) for any component Mappings
-* that are instances of the AST Region class. It then creates a new
-* Mapping from which all Regions have been removed. If a Region
-* cannot simply be removed (for instance, if it is a component of a
-* parallel CmpMap), then it is replaced with an equivalent UnitMap
-* in the returned Mapping.
-*
-* The implementation provided by the CmpMap class invokes the
-* astRemoveRegions method on the two component Mappings, and joins
-* the results together into a new CmpMap.
-
-* Parameters:
-* this
-* Pointer to the original Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the modified mapping.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstCmpMap *new; /* Pointer to new CmpMap */
- AstCmpMap *this; /* Pointer to CmpMap structure */
- AstMapping *newmap1; /* New first component Mapping */
- AstMapping *newmap2; /* New second component Mapping */
- AstMapping *result; /* Result pointer to return */
- int nax; /* Number of Frame axes */
- int unit1; /* Is new first Mapping a UnitMap? */
- int unit2; /* Is new second Mapping a UnitMap? */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the CmpMap. */
- this = (AstCmpMap *) this_mapping;
-
-/* Invoke the astRemoveRegions method on the two component Mappings. */
- newmap1 = astRemoveRegions( this->map1 );
- newmap2 = astRemoveRegions( this->map2 );
-
-/* If neither component was modified, just return a clone of the supplied
- pointer. */
- if( this->map1 == newmap1 && this->map2 == newmap2 ) {
- result = astClone( this );
-
-/* Otherwise, we need to create a new Mapping to return. */
- } else {
-
-/* The implementation of the astRemoveRegions method provided by the
- Region class returns a Frame rather than a UnitMap. But we need
- Mappings here, not Frames. So if either of these new Mappings is
- a Frame, replace it with an equivalent UnitMap. Also, get flags
- indicating if either Mapping is a UnitMap.*/
- if( astIsAFrame( newmap1 ) ) {
- nax = astGetNin( newmap1 );
- (void) astAnnul( newmap1 );
- newmap1 = (AstMapping *) astUnitMap( nax, " ", status );
- unit1 = 1;
- } else {
- unit1 = astIsAUnitMap( newmap1 );
- }
-
- if( astIsAFrame( newmap2 ) ) {
- nax = astGetNin( newmap2 );
- (void) astAnnul( newmap2 );
- newmap2 = (AstMapping *) astUnitMap( nax, " ", status );
- unit2 = 1;
- } else {
- unit2 = astIsAUnitMap( newmap2 );
- }
-
-/* First handle series CmpMaps. */
- if( this->series ) {
-
-/* Otherwise, if the second new Mapping is a UnitMap, return a copy of the
- first new Mapping (with the original Invert attribute) since the second
- one will have no effect. */
- if( unit1 ) {
- result = astCopy( newmap2 );
- astSetInvert( result, this->invert2 );
- if( astGetInvert( this ) ) astInvert( result );
-
-/* Otherwise, if the second new Mapping is a UnitMap, return a copy of the
- first new Mapping (with the original Invert attribute) since the second
- one will have no effect. */
- } else if( unit2 ) {
- result = astCopy( newmap1 );
- astSetInvert( result, this->invert1 );
- if( astGetInvert( this ) ) astInvert( result );
-
-/* If neither of the new Mappings is a UnitMap, return a new CmpMap
- containing the two new Mappings. We take a deep copy of the supplied
- CmpMap and then modify the Mappings os that we retain any extra
- information (such as invert flags) in the supplied CmpMap. */
- } else {
- new = astCopy( this );
- (void) astAnnul( new->map1 );
- (void) astAnnul( new->map2 );
- new->map1 = astClone( newmap1 );
- new->map2 = astClone( newmap2 );
- result = (AstMapping *) new;
- }
-
-/* Now handle parallel CmpMaps. */
- } else {
-
-/* If both new Mappings are UnitMaps, return an equivalent UnitMap. */
- if( unit1 && unit2 ) {
- result = (AstMapping *) astUnitMap( astGetNin( newmap1 ) +
- astGetNin( newmap2 ), " ",
- status );
-
-/* Otherwise, return a new CmpMap containing the two new Mappings. */
- } else {
- new = astCopy( this );
- (void) astAnnul( new->map1 );
- (void) astAnnul( new->map2 );
- new->map1 = astClone( newmap1 );
- new->map2 = astClone( newmap2 );
- result = (AstMapping *) new;
- }
- }
- }
-
-/* Free resources. */
- newmap1 = astAnnul( newmap1 );
- newmap2 = astAnnul( newmap2 );
-
-/* Annul the returned Mapping if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* Simplify
-
-* Purpose:
-* Simplify a Mapping.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* AstMapping *Simplify( AstMapping *this, int *status )
-
-* Class Membership:
-* CmpMap method (over-rides the astSimplify method inherited from
-* the Mapping class).
-
-* Description:
-* This function simplifies a CmpMap to eliminate redundant
-* computational steps, or to merge separate steps which can be
-* performed more efficiently in a single operation.
-
-* Parameters:
-* this
-* Pointer to the original Mapping.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A new pointer to the (possibly simplified) Mapping.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstCmpMap *this; /* Pointer to CmpMap structure */
- AstMapping **map_list; /* Mapping array pointer */
- AstMapping *map; /* Pointer to cloned Mapping pointer */
- AstMapping *result; /* Result pointer to return */
- AstMapping *tmp; /* Temporary Mapping pointer */
- int *invert_list; /* Invert array pointer */
- int *mlist; /* Point to list of modified Mapping indices */
- int *nlist; /* Point to list of Mapping counts */
- int i; /* Loop counter for Mappings */
- int improved; /* Simplification achieved? */
- int invert; /* Invert attribute value */
- int invert_n; /* Invert value for final Mapping */
- int mlist_len; /* No. of entries in mlist */
- int nlist_len; /* No. of entries in nlist */
- int modified; /* Index of first modified Mapping */
- int nmap; /* Mapping count */
- int nominated; /* Index of nominated Mapping */
- int set; /* Invert attribute set? */
- int set_n; /* Invert set for final Mapping? */
- int simpler; /* Simplification possible? */
- int t; /* Temporary storage */
- int wlen1; /* Pattern wavelength for "modified" values */
- int wlen2; /* Pattern wavelength for "nmap" values */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this_mapping);
-
-/* It is possible for the astSimplify method to be called recursively from
- within astSimplify. It is also possible that the Mapping being
- simplified by the current invocation is the same as the Mapping being
- simplified by some recursive invocation higher up the call stack. If
- this happens we will get into an infinite loop, since we already know
- that simplifying the supplied Mapping will involve (eventually) a
- recursive call to astSimplify with the same Mapping. To avoid this
- looping, we note the Mappings supplied at each depth and first compare
- the supplied Mapping with the Mappings which are currently being
- simplified higher up the call stack. If the supplied Mapping is
- already being simplified at a higher level, then we return immediately
- without doing any simplification. Otherwise, we record the supplied
- Mapping pointer in a static list so that it is available to subsequent
- recursive invocations of this function. First compare the supplied
- Mapping with the Mappingsbeing simpliied higher up. Return without
- action if a match is found. */
- for( i = 0; i < simplify_depth; i++ ) {
- if( astEqual( this_mapping, simplify_stackmaps[ i ] ) ) {
- return astClone( this_mapping );
- }
- }
-
-/* We have further work to do, so increment the recursion depth, extend
- the simplify_stackmaps array, and store the new Mapping in it for future use. */
- simplify_depth++;
- simplify_stackmaps = astGrow( simplify_stackmaps, simplify_depth, sizeof( AstMapping * ) );
- if( astOK ) {
- simplify_stackmaps[ simplify_depth - 1 ] = astClone( this_mapping );
- }
-
-/* Obtain a pointer to the CmpMap structure. */
- this = (AstCmpMap *) this_mapping;
-
-/* Initialise dynamic arrays of Mapping pointers and associated Invert
- flags. */
- nmap = 0;
- map_list = NULL;
- invert_list = NULL;
-
-/* Decompose the CmpMap into a sequence of Mappings to be applied in
- series or parallel, as appropriate, and an associated list of
- Invert flags. If any inverted CmpMaps are found in the Mapping, then
- we can at least simplify the returned Mapping by swapping and
- inverting the components. Set "simpler" to indicate this. */
- simpler = astMapList( this_mapping, this->series, astGetInvert( this ), &nmap,
- &map_list, &invert_list );
-
-/* Initialise pointers to memory used to hold lists of the modified
- Mapping index and the number of mappings after each call of
- astMapMerge. */
- mlist = NULL;
- nlist = NULL;
-
-/* Loop to simplify the sequence until a complete pass through it has
- been made without producing any improvement. */
- improved = 1;
- while ( astOK && improved ) {
- improved = 0;
-
-/* Loop to nominate each Mapping in the sequence in turn. */
- nominated = 0;
- while ( astOK && ( nominated < nmap ) ) {
-
-
-/* Clone a pointer to the nominated Mapping and attempt to merge it
- with its neighbours. Annul the cloned pointer afterwards. */
- map = astClone( map_list[ nominated ] );
- modified = astMapMerge( map, nominated, this->series,
- &nmap, &map_list, &invert_list );
- map = astAnnul( map );
-
-/* Move on to nominate the next Mapping in the sequence. */
- nominated++;
-
-/* Note if any simplification occurred above. */
- if( modified >= 0 ) {
-
-/* Append the index of the first modified Mapping in the list and and check
- that there is no repreating pattern in the list. If there is, we are
- probably in a loop where one mapping class is making a change, and another
- is undoing the change. The Looping function returns the "wavelength"
- of any pattern found. If a pattern was discovered, we ignore it unless
- there is also a pattern in the "nmap" values - the wavelengths of the
- two patterns must be related by a integer factor. */
- wlen1 = PatternCheck( modified, 1, &mlist, &mlist_len, status );
- wlen2 = PatternCheck( nmap, wlen1, &nlist, &nlist_len, status );
- if( wlen1 && wlen2 ) {
-
-/* Ensure wlen2 is larger tnan or equal to wlen1. */
- if( wlen1 > wlen2 ) {
- t = wlen1;
- wlen1 = wlen2;
- wlen2 = wlen1;
- }
-
-/* See if wlen2 is an integer multiple of wlen1. If not, ignore the
- patterns. */
- if( ( wlen2 % wlen1 ) != 0 ) wlen1 = 0;
- }
-
-/* Ignore the simplication if a repeating pattern is occurring. */
- if( wlen1 == 0 ) {
- improved = 1;
- simpler = 1;
-
-/* If the simplification resulted in modification of an earlier
- Mapping than would normally be considered next, then go back to
- consider the modified one first. */
- if ( modified < nominated ) nominated = modified;
- }
- }
- }
- }
-
-/* Free resources */
- if( mlist ) mlist = astFree( mlist );
- if( nlist ) nlist = astFree( nlist );
-
-/* Construct the output Mapping. */
-/* ============================= */
-/* If no simplification occurred above, then simply clone a pointer to
- the original Mapping. */
- if ( astOK ) {
- if ( !simpler ) {
- result = astClone( this );
-
-/* Otherwise, we must construct the result from the contents of the
- Mapping list. */
- } else {
-
-/* If the simplified Mapping list has only a single element, then the
- output Mapping will not be a CmpMap. In this case, we cannot
- necessarily set the Invert flag of the Mapping to the value we want
- (because we must not modify the Mapping itself. */
- if ( nmap == 1 ) {
-
-/* We must make a copy. Cloning is no good (even if the Mapping already
- has the Invert attribute value we want), since we want the returned
- Mapping to be independent of the original component Mappings, so that
- if user code inverts a component Mapping (via some other pre-existing
- pointer), the returned simplified Mapping is not affected. */
- result = astCopy( map_list[ 0 ] );
-
-/* Either clear the copy's Invert attribute, or set it to 1, as
- required. */
- if ( invert_list[ 0 ] ) {
- astSetInvert( result, 1 );
- } else {
- astClearInvert( result );
- }
-
-/* If the simplified Mapping sequence has more than one element, the
- output Mapping will be a CmpMap. In this case, we can set each
- individual Mapping element to have the Invert attribute value we
- want, so long as we return these attribute values to their original
- state again afterwards (once a Mapping is encapsulated inside a
- CmpMap, further external changes to its Invert attribute do not
- affect the behaviour of the CmpMap). */
- } else {
-
-/* Determine if the Invert attribute for the last Mapping is set, and
- obtain its value. */
- set_n = astTestInvert( map_list[ nmap - 1 ] );
- invert_n = astGetInvert( map_list[ nmap - 1 ] );
-
-/* Set this attribute to the value we want. */
- astSetInvert( map_list[ nmap - 1 ], invert_list[ nmap - 1 ] );
-
-/* Loop through the Mapping sequence in reverse to merge it into an
- equivalent CmpMap. */
- for ( i = nmap - 1; i >= 0; i-- ) {
-
-/* Simply clone the pointer to the last Mapping in the sequence (which
- will be encountered first). */
- if ( !result ) {
- result = astClone( map_list[ i ] );
-
-/* For subsequent Mappings, test if the Invert attribute is set and
- save its value. */
- } else {
- set = astTestInvert( map_list[ i ] );
- invert = astGetInvert( map_list[ i ] );
-
-/* Set this attribute to the value required. */
- astSetInvert( map_list[ i ], invert_list[ i ] );
-
-/* Combine the Mapping with the CmpMap formed so far and replace the
- result pointer with the new pointer this produces, annulling the
- previous pointer. */
- tmp = (AstMapping *) astCmpMap( map_list[ i ], result,
- this->series, "", status );
- (void) astAnnul( result );
- result = tmp;
-
-/* Restore the Invert attribute of the Mapping to its original
- state. */
- if ( !set ) {
- astClearInvert( map_list[ i ] );
- } else {
- astSetInvert( map_list[ i ], invert );
- }
- }
- }
-
-/* When all the Mappings have been merged into the CmpMap, restore the
- state of the Invert attribute for the final Mapping in the
- sequence. */
- if ( !set_n ) {
- astClearInvert( map_list[ nmap - 1 ] );
- } else {
- astSetInvert( map_list[ nmap - 1 ], invert_n );
- }
- }
- }
- }
-
-/* Clean up. */
-/* ========= */
-/* Loop to annul all the Mapping pointers in the simplified list. */
- for ( i = 0; i < nmap; i++ ) map_list[ i ] = astAnnul( map_list[ i ] );
-
-/* Free the dynamic arrays. */
- map_list = astFree( map_list );
- invert_list = astFree( invert_list );
-
-/* Decrement the recursion depth and free the pointer to the supplied
- Mapping currently stored at the end of the simplify_stackmaps array. */
- simplify_depth--;
- if( astOK ) {
- simplify_stackmaps[ simplify_depth ] = astAnnul( simplify_stackmaps[ simplify_depth ] );
- }
-
-/* If we are now at depth zero, free the simplify_stackmaps array. */
- if( simplify_depth == 0 ) simplify_stackmaps = astFree( simplify_stackmaps );
-
-/* If an error occurred, annul the returned Mapping. */
- if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a CmpMap to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpmap.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* CmpMap member function (over-rides the astTransform method inherited
-* from the Mapping class).
-
-* Description:
-* This function takes a CmpMap and a set of points encapsulated in a
-* PointSet and transforms the points so as to apply the required Mapping.
-* This implies applying each of the CmpMap's component Mappings in turn,
-* either in series or in parallel.
-
-* Parameters:
-* this
-* Pointer to the CmpMap.
-* in
-* Pointer to the PointSet associated with the input coordinate values.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of coordinates for the CmpMap being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstCmpMap *map; /* Pointer to CmpMap to be applied */
- AstPointSet *result; /* Pointer to output PointSet */
- AstPointSet *temp1; /* Pointer to temporary PointSet */
- AstPointSet *temp2; /* Pointer to temporary PointSet */
- AstPointSet *temp; /* Pointer to temporary PointSet */
- int forward1; /* Use forward direction for Mapping 1? */
- int forward2; /* Use forward direction for Mapping 2? */
- int ipoint1; /* Index of first point in batch */
- int ipoint2; /* Index of last point in batch */
- int nin1; /* No. input coordinates for Mapping 1 */
- int nin2; /* No. input coordinates for Mapping 2 */
- int nin; /* No. input coordinates supplied */
- int nout1; /* No. output coordinates for Mapping 1 */
- int nout2; /* No. output coordinates for Mapping 2 */
- int nout; /* No. output coordinates supplied */
- int np; /* Number of points in batch */
- int npoint; /* Number of points to be transformed */
-
-/* Local Constants: */
- const int nbatch = 2048; /* Maximum points in a batch */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the CmpMap. */
- map = (AstCmpMap *) this;
-
-/* Apply the parent Mapping using the stored pointer to the Transform member
- function inherited from the parent Mapping class. This function validates
- all arguments and generates an output PointSet if necessary, but does not
- actually transform any coordinate values. */
- result = (*parent_transform)( this, in, forward, out, status );
-
-/* We now extend the parent astTransform method by applying the component
- Mappings of the CmpMap to generate the output coordinate values. */
-
-/* Determine whether to apply the forward or inverse Mapping, according to the
- direction specified and whether the Mapping has been inverted. */
- if ( astGetInvert( map ) ) forward = !forward;
-
-/* Check if either component Mapping's inversion flag has changed since it was
- used to construct the CmpMap. Set a "forward" flag for each Mapping to
- change the direction we will use, to compensate if necessary. (Such changes
- may have occurred if other pointers to the component Mappings are in
- circulation). */
- forward1 = forward;
- forward2 = forward;
- if ( map->invert1 != astGetInvert( map->map1 ) ) forward1 = !forward1;
- if ( map->invert2 != astGetInvert( map->map2 ) ) forward2 = !forward2;
-
-/* Determine the number of points being transformed. */
- npoint = astGetNpoint( in );
-
-/* Mappings in series. */
-/* ------------------- */
-/* If required, use the two component Mappings in series. To do this, we must
- apply one Mapping followed by the other, which means storing an intermediate
- result. Since this function may be invoked recursively and have to store an
- intermediate result on each occasion, the memory required may become
- excessive when transforming large numbers of points. To overcome this, we
- split the points up into smaller batches. */
- if ( astOK ) {
- if ( map->series ) {
-
-/* Obtain the numbers of input and output coordinates. */
- nin = astGetNcoord( in );
- nout = astGetNcoord( result );
-
-/* Loop to process all the points in batches, of maximum size nbatch points. */
- for ( ipoint1 = 0; ipoint1 < npoint; ipoint1 += nbatch ) {
-
-/* Calculate the index of the final point in the batch and deduce the number of
- points (np) to be processed in this batch. */
- ipoint2 = ipoint1 + nbatch - 1;
- if ( ipoint2 > npoint - 1 ) ipoint2 = npoint - 1;
- np = ipoint2 - ipoint1 + 1;
-
-/* Create temporary PointSets to describe the input and output points for this
- batch. */
- temp1 = astPointSet( np, nin, "", status );
- temp2 = astPointSet( np, nout, "", status );
-
-/* Associate the required subsets of the input and output coordinates with the
- two PointSets. */
- astSetSubPoints( in, ipoint1, 0, temp1 );
- astSetSubPoints( result, ipoint1, 0, temp2 );
-
-/* Apply the two Mappings in sequence and in the required order and direction.
- Store the intermediate result in a temporary PointSet (temp) which is
- created by the first Mapping applied. */
- if ( forward ) {
- temp = astTransform( map->map1, temp1, forward1, NULL );
- (void) astTransform( map->map2, temp, forward2, temp2 );
- } else {
- temp = astTransform( map->map2, temp1, forward2, NULL );
- (void) astTransform( map->map1, temp, forward1, temp2 );
- }
-
-/* Delete the temporary PointSets after processing each batch of points. */
- temp = astDelete( temp );
- temp1 = astDelete( temp1 );
- temp2 = astDelete( temp2 );
-
-/* Quit processing batches if an error occurs. */
- if ( !astOK ) break;
- }
-
-/* Mappings in parallel. */
-/* --------------------- */
-/* If required, use the two component Mappings in parallel. Since we do not
- need to allocate any memory to hold intermediate coordinate values here,
- there is no need to process the points in batches. */
- } else {
-
-/* Get the effective number of input and output coordinates per point for each
- Mapping (taking account of the direction in which each will be used to
- transform points). */
- nin1 = forward1 ? astGetNin( map->map1 ) : astGetNout( map->map1 );
- nout1 = forward1 ? astGetNout( map->map1 ) : astGetNin( map->map1 );
- nin2 = forward2 ? astGetNin( map->map2 ) : astGetNout( map->map2 );
- nout2 = forward2 ? astGetNout( map->map2 ) : astGetNin( map->map2 );
-
-/* Create temporary PointSets to describe the input and output coordinates for
- the first Mapping. */
- temp1 = astPointSet( npoint, nin1, "", status );
- temp2 = astPointSet( npoint, nout1, "", status );
-
-/* Associate the required subsets of the input and output coordinates with
- these PointSets. */
- astSetSubPoints( in, 0, 0, temp1 );
- astSetSubPoints( result, 0, 0, temp2 );
-
-/* Use the astTransform method to apply the coordinate transformation described
- by the first Mapping. */
- (void) astTransform( map->map1, temp1, forward1, temp2 );
-
-/* Delete the temporary PointSets. */
- temp1 = astDelete( temp1 );
- temp2 = astDelete( temp2 );
-
-/* Create a new pair of temporary PointSets to describe the input and output
- coordinates for the second Mapping, and associate the required subsets of
- the input and output coordinates with these PointSets. */
- temp1 = astPointSet( npoint, nin2, "", status );
- temp2 = astPointSet( npoint, nout2, "", status );
- astSetSubPoints( in, 0, nin1, temp1 );
- astSetSubPoints( result, 0, nout1, temp2 );
-
-/* Apply the coordinate transformation described by the second Mapping. */
- (void) astTransform( map->map2, temp1, forward2, temp2 );
-
-/* Delete the two temporary PointSets. */
- temp1 = astDelete( temp1 );
- temp2 = astDelete( temp2 );
- }
- }
-
-/* If an error occurred, clean up by deleting the output PointSet (if
- allocated by this function) and setting a NULL result pointer. */
- if ( !astOK ) {
- if ( !out ) result = astDelete( result );
- result = NULL;
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for CmpMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for CmpMap objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - This constructor makes a deep copy, including a copy of the component
-* Mappings within the CmpMap.
-*/
-
-/* Local Variables: */
- AstCmpMap *in; /* Pointer to input CmpMap */
- AstCmpMap *out; /* Pointer to output CmpMap */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output CmpMaps. */
- in = (AstCmpMap *) objin;
- out = (AstCmpMap *) objout;
-
-/* For safety, start by clearing any references to the input component
- Mappings from the output CmpMap. */
- out->map1 = NULL;
- out->map2 = NULL;
-
-/* Make copies of these Mappings and store pointers to them in the output
- CmpMap structure. */
- out->map1 = astCopy( in->map1 );
- out->map2 = astCopy( in->map2 );
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for CmpMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for CmpMap objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstCmpMap *this; /* Pointer to CmpMap */
-
-/* Obtain a pointer to the CmpMap structure. */
- this = (AstCmpMap *) obj;
-
-/* Annul the pointers to the component Mappings. */
- this->map1 = astAnnul( this->map1 );
- this->map2 = astAnnul( this->map2 );
-
-/* Clear the remaining CmpMap variables. */
- this->invert1 = 0;
- this->invert2 = 0;
- this->series = 0;
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for CmpMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the CmpMap class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the CmpMap whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstCmpMap *this; /* Pointer to the CmpMap structure */
- int ival; /* Integer value */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpMap structure. */
- this = (AstCmpMap *) this_object;
-
-/* Write out values representing the instance variables for the CmpMap
- class. Accompany these with appropriate comment strings, possibly
- depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* Series. */
-/* ------- */
- ival = this->series;
- set = ( ival == 0 );
- astWriteInt( channel, "Series", set, 0, ival,
- ival ? "Component Mappings applied in series" :
- "Component Mappings applied in parallel" );
-
-/* First Invert flag. */
-/* ------------------ */
- ival = this->invert1;
- set = ( ival != 0 );
- astWriteInt( channel, "InvA", set, 0, ival,
- ival ? "First Mapping used in inverse direction" :
- "First Mapping used in forward direction" );
-
-/* Second Invert flag. */
-/* ------------------- */
- ival = this->invert2;
- set = ( ival != 0 );
- astWriteInt( channel, "InvB", set, 0, ival,
- ival ? "Second Mapping used in inverse direction" :
- "Second Mapping used in forward direction" );
-
-/* First Mapping. */
-/* -------------- */
- astWriteObject( channel, "MapA", 1, 1, this->map1,
- "First component Mapping" );
-
-/* Second Mapping. */
-/* --------------- */
- astWriteObject( channel, "MapB", 1, 1, this->map2,
- "Second component Mapping" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsACmpMap and astCheckCmpMap functions using the
- macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(CmpMap,Mapping)
-astMAKE_CHECK(CmpMap)
-
-AstCmpMap *astCmpMap_( void *map1_void, void *map2_void, int series,
- const char *options, int *status, ...) {
-/*
-*+
-* Name:
-* astCmpMap
-
-* Purpose:
-* Create a CmpMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "cmpmap.h"
-* AstCmpMap *astCmpMap( AstMapping *map1, AstMapping *map2, int series,
-* const char *options, ... )
-
-* Class Membership:
-* CmpMap constructor.
-
-* Description:
-* This function creates a new CmpMap and optionally initialises its
-* attributes.
-
-* Parameters:
-* map1
-* Pointer to the first Mapping.
-* map2
-* Pointer to the second Mapping.
-* series
-* If a non-zero value is given, the two Mappings will be connected
-* together in series. A zero value requests that they be connected in
-* parallel.
-* options
-* Pointer to a null terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new CmpMap. The syntax used is the same as for the
-* astSet method and may include "printf" format specifiers identified
-* by "%" symbols in the normal way.
-* ...
-* If the "options" string contains "%" format specifiers, then an
-* optional list of arguments may follow it in order to supply values to
-* be substituted for these specifiers. The rules for supplying these
-* are identical to those for the astSet method (and for the C "printf"
-* function).
-
-* Returned Value:
-* A pointer to the new CmpMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-
-* Implementation Notes:
-* - This function implements the basic CmpMap constructor which is
-* available via the protected interface to the CmpMap class. A
-* public interface is provided by the astCmpMapId_ function.
-* - Because this function has a variable argument list, it is
-* invoked by a macro that evaluates to a function pointer (not a
-* function invocation) and no checking or casting of arguments is
-* performed before the function is invoked. Because of this, the
-* "map1" and "map2" parameters are of type (void *) and are
-* converted and validated within the function itself.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstCmpMap *new; /* Pointer to new CmpMap */
- AstMapping *map1; /* Pointer to first Mapping structure */
- AstMapping *map2; /* Pointer to second Mapping structure */
- va_list args; /* Variable argument list */
-
-/* Initialise. */
- new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return new;
-
-/* Obtain and validate pointers to the Mapping structures provided. */
- map1 = astCheckMapping( map1_void );
- map2 = astCheckMapping( map2_void );
- if ( astOK ) {
-
-/* Initialise the CmpMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitCmpMap( NULL, sizeof( AstCmpMap ), !class_init, &class_vtab,
- "CmpMap", map1, map2, series );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new CmpMap's
- attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return a pointer to the new CmpMap. */
- return new;
-}
-
-AstCmpMap *astCmpMapId_( void *map1_void, void *map2_void, int series,
- const char *options, ... ) {
-/*
-*++
-* Name:
-c astCmpMap
-f AST_CMPMAP
-
-* Purpose:
-* Create a CmpMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "cmpmap.h"
-c AstCmpMap *astCmpMap( AstMapping *map1, AstMapping *map2, int series,
-c const char *options, ... )
-f RESULT = AST_CMPMAP( MAP1, MAP2, SERIES, OPTIONS, STATUS )
-
-* Class Membership:
-* CmpMap constructor.
-
-* Description:
-* This function creates a new CmpMap and optionally initialises
-* its attributes.
-*
-* A CmpMap is a compound Mapping which allows two component
-* Mappings (of any class) to be connected together to form a more
-* complex Mapping. This connection may either be "in series"
-* (where the first Mapping is used to transform the coordinates of
-* each point and the second mapping is then applied to the
-* result), or "in parallel" (where one Mapping transforms the
-* earlier coordinates for each point and the second Mapping
-* simultaneously transforms the later coordinates).
-*
-* Since a CmpMap is itself a Mapping, it can be used as a
-* component in forming further CmpMaps. Mappings of arbitrary
-* complexity may be built from simple individual Mappings in this
-* way.
-
-* Parameters:
-c map1
-f MAP1 = INTEGER (Given)
-* Pointer to the first component Mapping.
-c map2
-f MAP2 = INTEGER (Given)
-* Pointer to the second component Mapping.
-c series
-f SERIES = LOGICAL (Given)
-c If a non-zero value is given for this parameter, the two
-c component Mappings will be connected in series. A zero
-c value requests that they are connected in parallel.
-f If a .TRUE. value is given for this argument, the two
-f component Mappings will be connected in series. A
-f .FALSE. value requests that they are connected in parallel.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new CmpMap. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new CmpMap. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astCmpMap()
-f AST_CMPMAP = INTEGER
-* A pointer to the new CmpMap.
-
-* Notes:
-* - If the component Mappings are connected in series, then using
-* the resulting CmpMap to transform coordinates will cause the
-* first Mapping to be applied, followed by the second Mapping. If
-* the inverse CmpMap transformation is requested, the two
-* component Mappings will be applied in both the reverse order and
-* the reverse direction.
-* - When connecting two component Mappings in series, the number
-* of output coordinates generated by the first Mapping (its Nout
-* attribute) must equal the number of input coordinates accepted
-* by the second Mapping (its Nin attribute).
-* - If the component Mappings of a CmpMap are connected in
-* parallel, then the first Mapping will be used to transform the
-* earlier input coordinates for each point (and to produce the
-* earlier output coordinates) and the second Mapping will be used
-* simultaneously to transform the remaining input coordinates (to
-* produce the remaining output coordinates for each point). If the
-* inverse transformation is requested, each Mapping will still be
-* applied to the same coordinates, but in the reverse direction.
-* - When connecting two component Mappings in parallel, there is
-* no restriction on the number of input and output coordinates for
-* each Mapping.
-c - Note that the component Mappings supplied are not copied by
-c astCmpMap (the new CmpMap simply retains a reference to
-c them). They may continue to be used for other purposes, but
-c should not be deleted. If a CmpMap containing a copy of its
-c component Mappings is required, then a copy of the CmpMap should
-c be made using astCopy.
-f - Note that the component Mappings supplied are not copied by
-f AST_CMPMAP (the new CmpMap simply retains a reference to
-f them). They may continue to be used for other purposes, but
-f should not be deleted. If a CmpMap containing a copy of its
-f component Mappings is required, then a copy of the CmpMap should
-f be made using AST_COPY.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-
-* Implementation Notes:
-* - This function implements the external (public) interface to
-* the astCmpMap constructor function. It returns an ID value
-* (instead of a true C pointer) to external users, and must be
-* provided because astCmpMap_ has a variable argument list which
-* cannot be encapsulated in a macro (where this conversion would
-* otherwise occur).
-* - Because no checking or casting of arguments is performed
-* before the function is invoked, the "map1" and "map2" parameters
-* are of type (void *) and are converted from an ID value to a
-* pointer and validated within the function itself.
-* - The variable argument list also prevents this function from
-* invoking astCmpMap_ directly, so it must be a re-implementation
-* of it in all respects, except for the conversions between IDs
-* and pointers on input/output of Objects.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstCmpMap *new; /* Pointer to new CmpMap */
- AstMapping *map1; /* Pointer to first Mapping structure */
- AstMapping *map2; /* Pointer to second Mapping structure */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialise. */
- new = NULL;
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return new;
-
-/* Obtain the Mapping pointers from the ID's supplied and validate the
- pointers to ensure they identify valid Mappings. */
- map1 = astVerifyMapping( astMakePointer( map1_void ) );
- map2 = astVerifyMapping( astMakePointer( map2_void ) );
- if ( astOK ) {
-
-/* Initialise the CmpMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitCmpMap( NULL, sizeof( AstCmpMap ), !class_init, &class_vtab,
- "CmpMap", map1, map2, series );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new CmpMap's
- attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return an ID value for the new CmpMap. */
- return astMakeId( new );
-}
-
-AstCmpMap *astInitCmpMap_( void *mem, size_t size, int init,
- AstCmpMapVtab *vtab, const char *name,
- AstMapping *map1, AstMapping *map2, int series, int *status ) {
-/*
-*+
-* Name:
-* astInitCmpMap
-
-* Purpose:
-* Initialise a CmpMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "cmpmap.h"
-* AstCmpMap *astInitCmpMap( void *mem, size_t size, int init,
-* AstCmpMapVtab *vtab, const char *name,
-* AstMapping *map1, AstMapping *map2,
-* int series )
-
-* Class Membership:
-* CmpMap initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new CmpMap object. It allocates memory (if necessary) to
-* accommodate the CmpMap plus any additional data associated with the
-* derived class. It then initialises a CmpMap structure at the start
-* of this memory. If the "init" flag is set, it also initialises the
-* contents of a virtual function table for a CmpMap at the start of
-* the memory passed via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the CmpMap is to be initialised.
-* This must be of sufficient size to accommodate the CmpMap data
-* (sizeof(CmpMap)) plus any data used by the derived class. If a
-* value of NULL is given, this function will allocate the memory itself
-* using the "size" parameter to determine its size.
-* size
-* The amount of memory used by the CmpMap (plus derived class
-* data). This will be used to allocate memory if a value of NULL is
-* given for the "mem" parameter. This value is also stored in the
-* CmpMap structure, so a valid value must be supplied even if not
-* required for allocating memory.
-* init
-* A logical flag indicating if the CmpMap's virtual function table
-* is to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new CmpMap.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the Object
-* astClass function).
-* map1
-* Pointer to the first Mapping.
-* map2
-* Pointer to the second Mapping.
-* series
-* If a non-zero value is given, the two Mappings will be connected
-* together in series. A zero value requests that they be connected in
-* parallel.
-
-* Returned Value:
-* A pointer to the new CmpMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstCmpMap *new; /* Pointer to new CmpMap */
- int map_f; /* Forward transformation defined? */
- int map_i; /* Inverse transformation defined? */
- int nin2; /* No. input coordinates for Mapping 2 */
- int nin; /* No. input coordinates for CmpMap */
- int nout1; /* No. output coordinates for Mapping 1 */
- int nout; /* No. output coordinates for CmpMap */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitCmpMapVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Determine in which directions each component Mapping is able to transform
- coordinates. Combine these results to obtain a result for the overall
- CmpMap. */
- map_f = astGetTranForward( map1 ) && astGetTranForward( map2 );
- map_i = astGetTranInverse( map1 ) && astGetTranInverse( map2 );
- if ( astOK ) {
-
-/* If connecting the Mappings in series, check that the number of coordinates
- are compatible and report an error if they are not. */
- if ( series ) {
- nout1 = astGetNout( map1 );
- nin2 = astGetNin( map2 );
- if ( astOK && ( nout1 != nin2 ) ) {
- astError( AST__INNCO, "astInitCmpMap(%s): The number of output "
- "coordinates per point (%d) for the first Mapping "
- "supplied does not match the number of input "
- "coordinates (%d) for the second Mapping.", status, name, nout1,
- nin2 );
- }
- }
- }
-
-/* If OK, determine the total number of input and output coordinates per point
- for the CmpMap. */
- if ( astOK ) {
- if ( series ) {
- nin = astGetNin( map1 );
- nout = astGetNout( map2 );
- } else {
- nin = astGetNin( map1 ) + astGetNin( map2 );
- nout = astGetNout( map1 ) + astGetNout( map2 );
- }
-
- } else {
- nin = 0;
- nout = 0;
- }
-
-/* Initialise a Mapping structure (the parent class) as the first component
- within the CmpMap structure, allocating memory if necessary. Specify
- the number of input and output coordinates and in which directions the
- Mapping should be defined. */
- if ( astOK ) {
- new = (AstCmpMap *) astInitMapping( mem, size, 0,
- (AstMappingVtab *) vtab, name,
- nin, nout, map_f, map_i );
-
- if ( astOK ) {
-
-/* Initialise the CmpMap data. */
-/* --------------------------- */
-/* Store pointers to the component Mappings. Extract Mappings if
- FrameSets are provided. */
- if( astIsAFrameSet( map1 ) ) {
- new->map1 = astGetMapping( (AstFrameSet *) map1, AST__BASE,
- AST__CURRENT );
- } else {
- new->map1 = astClone( map1 );
- }
-
- if( astIsAFrameSet( map2 ) ) {
- new->map2 = astGetMapping( (AstFrameSet *) map2, AST__BASE,
- AST__CURRENT );
- } else {
- new->map2 = astClone( map2 );
- }
-
-
-/* Save the initial values of the inversion flags for these Mappings. */
- new->invert1 = astGetInvert( new->map1 );
- new->invert2 = astGetInvert( new->map2 );
-
-/* Note whether the Mappings are joined in series (instead of in parallel),
- constraining this flag to be 0 or 1. */
- new->series = ( series != 0 );
-
-/* If an error occurred, clean up by annulling the Mapping pointers and
- deleting the new object. */
- if ( !astOK ) {
- new->map1 = astAnnul( new->map1 );
- new->map2 = astAnnul( new->map2 );
- new = astDelete( new );
- }
- }
- }
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstCmpMap *astLoadCmpMap_( void *mem, size_t size,
- AstCmpMapVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadCmpMap
-
-* Purpose:
-* Load a CmpMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "cmpmap.h"
-* AstCmpMap *astLoadCmpMap( void *mem, size_t size,
-* AstCmpMapVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* CmpMap loader.
-
-* Description:
-* This function is provided to load a new CmpMap using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* CmpMap structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a CmpMap at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the CmpMap is to be
-* loaded. This must be of sufficient size to accommodate the
-* CmpMap data (sizeof(CmpMap)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the CmpMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the CmpMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstCmpMap) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new CmpMap. If this is NULL, a pointer to
-* the (static) virtual function table for the CmpMap class is
-* used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "CmpMap" is used instead.
-
-* Returned Value:
-* A pointer to the new CmpMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstCmpMap *new; /* Pointer to the new CmpMap */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this CmpMap. In this case the
- CmpMap belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstCmpMap );
- vtab = &class_vtab;
- name = "CmpMap";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitCmpMapVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built CmpMap. */
- new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "CmpMap" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* Series. */
-/* ------- */
- new->series = astReadInt( channel, "series", 1 );
- new->series = ( new->series != 0 );
-
-/* First Invert flag. */
-/* ------------------ */
- new->invert1 = astReadInt( channel, "inva", 0 );
- new->invert1 = ( new->invert1 != 0 );
-
-/* Second Invert flag. */
-/* ------------------- */
- new->invert2 = astReadInt( channel, "invb", 0 );
- new->invert2 = ( new->invert2 != 0 );
-
-/* First Mapping. */
-/* -------------- */
- new->map1 = astReadObject( channel, "mapa", NULL );
-
-/* Second Mapping. */
-/* --------------- */
- new->map2 = astReadObject( channel, "mapb", NULL );
-
-/* If an error occurred, clean up by deleting the new CmpMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new CmpMap pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-/* None. */
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/cmpmap.h b/ast-5.3-1/cmpmap.h
deleted file mode 100644
index 3e74846..0000000
--- a/ast-5.3-1/cmpmap.h
+++ /dev/null
@@ -1,300 +0,0 @@
-#if !defined( CMPMAP_INCLUDED ) /* Include this file only once */
-#define CMPMAP_INCLUDED
-/*
-*+
-* Name:
-* cmpmap.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the CmpMap class.
-
-* Invocation:
-* #include "cmpmap.h"
-
-* Description:
-* This include file defines the interface to the CmpMap class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* A CmpMap is a compound Mapping which allows two component
-* Mappings (of any class) to be connected together to form a more
-* complex Mapping. This connection may either be "in series"
-* (where the first Mapping is used to transform the coordinates of
-* each point and the second mapping is then applied to the
-* result), or "in parallel" (where one Mapping transforms the
-* earlier coordinates for each point and the second Mapping
-* simultaneously transforms the later coordinates).
-*
-* Since a CmpMap is itself a Mapping, it can be used as a
-* component in forming further CmpMaps. Mappings of arbitrary
-* complexity may be built from simple individual Mappings in this
-* way.
-
-* Inheritance:
-* The CmpMap class inherits from the Mapping class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* None.
-
-* Methods Over-Ridden:
-* Public:
-* astSimplify
-* Simplify a CmpMap.
-*
-* Protected:
-* astMapList
-* Decompose a CmpMap into a sequence of simpler Mappings.
-* astTransform
-* Transform a set of points.
-
-* New Methods Defined:
-* Public:
-* None.
-*
-* Protected:
-* None.
-
-* Other Class Functions:
-* Public:
-* astIsACmpMap
-* Test class membership.
-* astCmpMap
-* Create a CmpMap.
-*
-* Protected:
-* astCheckCmpMap
-* Validate class membership.
-* astInitCmpMap
-* Initialise a CmpMap.
-* astInitCmpMapVtab
-* Initialise the virtual function table for the CmpMap class.
-* astLoadCmpMap
-* Load a CmpMap.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstCmpMap
-* CmpMap object type.
-*
-* Protected:
-* AstCmpMapVtab
-* CmpMap virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 6-FEB-1996 (RFWS):
-* Original version.
-* 25-SEP-1996 (RFWS):
-* Implemented external interface and I/O facilities.
-* 13-DEC-1996 (RFWS):
-* Over-ride the astSimplify method.
-* 8-JAN-2003 (DSB):
-* Added protected astInitCmpMapVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h" /* Coordinate Mappings (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* CmpMap structure. */
-/* ----------------- */
-/* This structure contains all information that is unique to each
- object in the class (e.g. its instance variables). */
-typedef struct AstCmpMap {
-
-/* Attributes inherited from the parent class. */
- AstMapping mapping; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- AstMapping *map1; /* Pointer to first Mapping */
- AstMapping *map2; /* Pointer to second Mapping */
- char invert1; /* Inversion flag for first Mapping */
- char invert2; /* Inversion flag for second Mapping */
- char series; /* Connect in series (else in parallel)? */
-} AstCmpMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstCmpMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstMappingVtab mapping_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-/* None. */
-} AstCmpMapVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstCmpMapGlobals {
- AstCmpMapVtab Class_Vtab;
- int Class_Init;
- int Simplify_Depth;
- AstMapping **Simplify_Stackmaps;
-} AstCmpMapGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(CmpMap) /* Check class membership */
-astPROTO_ISA(CmpMap) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstCmpMap *astCmpMap_( void *, void *, int, const char *, int *, ...);
-#else
-AstCmpMap *astCmpMapId_( void *, void *, int, const char *, ... )__attribute__((format(printf,4,5)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstCmpMap *astInitCmpMap_( void *, size_t, int, AstCmpMapVtab *,
- const char *, AstMapping *, AstMapping *, int, int * );
-
-/* Vtab initialiser. */
-void astInitCmpMapVtab_( AstCmpMapVtab *, const char *, int * );
-
-/* Loader. */
-AstCmpMap *astLoadCmpMap_( void *, size_t, AstCmpMapVtab *,
- const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitCmpMapGlobals_( AstCmpMapGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-/* None. */
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckCmpMap(this) astINVOKE_CHECK(CmpMap,this,0)
-#define astVerifyCmpMap(this) astINVOKE_CHECK(CmpMap,this,1)
-
-/* Test class membership. */
-#define astIsACmpMap(this) astINVOKE_ISA(CmpMap,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astCmpMap astINVOKE(F,astCmpMap_)
-#else
-#define astCmpMap astINVOKE(F,astCmpMapId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitCmpMap(mem,size,init,vtab,name,map1,map2,series) \
-astINVOKE(O,astInitCmpMap_(mem,size,init,vtab,name,astCheckMapping(map1),astCheckMapping(map2),series,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitCmpMapVtab(vtab,name) astINVOKE(V,astInitCmpMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadCmpMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadCmpMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckCmpMap to validate CmpMap pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-/* None. */
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/cmpregion.c b/ast-5.3-1/cmpregion.c
deleted file mode 100644
index a46e93d..0000000
--- a/ast-5.3-1/cmpregion.c
+++ /dev/null
@@ -1,4829 +0,0 @@
-/*
-*class++
-* Name:
-* CmpRegion
-
-* Purpose:
-* A combination of two regions within a single Frame
-
-* Constructor Function:
-c astCmpRegion
-f AST_CMPREGION
-
-* Description:
-* A CmpRegion is a Region which allows two component
-* Regions (of any class) to be combined to form a more complex
-* Region. This combination may be performed a boolean AND, OR
-* or XOR (exclusive OR) operator. If the AND operator is
-* used, then a position is inside the CmpRegion only if it is
-* inside both of its two component Regions. If the OR operator is
-* used, then a position is inside the CmpRegion if it is inside
-* either (or both) of its two component Regions. If the XOR operator
-* is used, then a position is inside the CmpRegion if it is inside
-* one but not both of its two component Regions. Other operators can
-* be formed by negating one or both component Regions before using
-* them to construct a new CmpRegion.
-*
-* The two component Region need not refer to the same coordinate
-* Frame, but it must be possible for the
-c astConvert
-f AST_CONVERT
-* function to determine a Mapping between them (an error will be
-* reported otherwise when the CmpRegion is created). For instance,
-* a CmpRegion may combine a Region defined within an ICRS SkyFrame
-* with a Region defined within a Galactic SkyFrame. This is
-* acceptable because the SkyFrame class knows how to convert between
-* these two systems, and consequently the
-c astConvert
-f AST_CONVERT
-* function will also be able to convert between them. In such cases,
-* the second component Region will be mapped into the coordinate Frame
-* of the first component Region, and the Frame represented by the
-* CmpRegion as a whole will be the Frame of the first component Region.
-*
-* Since a CmpRegion is itself a Region, it can be used as a
-* component in forming further CmpRegions. Regions of arbitrary
-* complexity may be built from simple individual Regions in this
-* way.
-
-* Inheritance:
-* The CmpRegion class inherits from the Region class.
-
-* Attributes:
-* The CmpRegion class does not define any new attributes beyond those
-* which are applicable to all Regions.
-
-* Functions:
-c The CmpRegion class does not define any new functions beyond those
-f The CmpRegion class does not define any new routines beyond those
-* which are applicable to all Regions.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2009 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 7-OCT-2004 (DSB):
-* Original version.
-* 28-MAY-2007 (DSB):
-* - Corrected RegBaseMesh.
-* - In RegBaseBox, if the CmpRegion is bounded find the box by
-* finding the extreme position sin a mesh covering the boundary.
-* 20-JAN-2009 (DSB):
-* Over-ride astRegBasePick.
-* 19-MAR-2009 (DSB):
-* Over-ride the astDecompose method.
-* 8-SEP-2009 (DSB):
-* Fix logic in RegTrace.
-* 9-SEP-2009 (DSB):
-* - Added astCmpRegionList
-* - Added support for XOR
-* - Override astGetObjSize.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS CmpRegion
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "region.h" /* Regions (parent class) */
-#include "channel.h" /* I/O channels */
-#include "nullregion.h" /* Boundless Regions */
-#include "cmpregion.h" /* Interface definition for this class */
-#include "unitmap.h" /* Unit Mapings */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <string.h>
-#include <stdio.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstRegion *(* parent_getdefunc)( AstRegion *, int * );
-static void (* parent_setregfs)( AstRegion *, AstFrame *, int * );
-static AstMapping *(* parent_simplify)( AstMapping *, int * );
-static int (* parent_equal)( AstObject *, AstObject *, int * );
-static void (* parent_setclosed)( AstRegion *, int, int * );
-static void (* parent_setmeshsize)( AstRegion *, int, int * );
-static void (* parent_clearclosed)( AstRegion *, int * );
-static void (* parent_clearmeshsize)( AstRegion *, int * );
-static double (*parent_getfillfactor)( AstRegion *, int * );
-static void (*parent_regsetattrib)( AstRegion *, const char *, char **, int * );
-static void (*parent_regclearattrib)( AstRegion *, const char *, char **, int * );
-static void (* parent_resetcache)( AstRegion *, int * );
-static int (* parent_getobjsize)( AstObject *, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(CmpRegion)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(CmpRegion,Class_Init)
-#define class_vtab astGLOBAL(CmpRegion,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstCmpRegionVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstCmpRegion *astCmpRegionId_( void *, void *, int, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMapping *Simplify( AstMapping *, int * );
-static AstPointSet *RegBaseMesh( AstRegion *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstRegion *GetDefUnc( AstRegion *, int * );
-static AstRegion *MatchRegion( AstRegion *, int, AstRegion *, const char *, int * );
-static AstRegion *RegBasePick( AstRegion *this, int, const int *, int * );
-static double GetFillFactor( AstRegion *, int * );
-static int CmpRegionList( AstCmpRegion *, int *, AstRegion ***, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetBounded( AstRegion *, int * );
-static int GetObjSize( AstObject *, int * );
-static int RegPins( AstRegion *, AstPointSet *, AstRegion *, int **, int * );
-static int RegTrace( AstRegion *, int, double *, double **, int * );
-static void ClearClosed( AstRegion *, int * );
-static void ClearMeshSize( AstRegion *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Decompose( AstMapping *, AstMapping **, AstMapping **, int *, int *, int *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void GetRegions( AstCmpRegion *, AstRegion **, AstRegion **, int *, int *, int *, int * );
-static void RegBaseBox( AstRegion *, double *, double *, int * );
-static void RegBaseBox2( AstRegion *, double *, double *, int * );
-static void RegClearAttrib( AstRegion *, const char *, char **, int * );
-static void RegSetAttrib( AstRegion *, const char *, char **, int * );
-static void ResetCache( AstRegion *this, int * );
-static void SetBreakInfo( AstCmpRegion *, int, int * );
-static void SetClosed( AstRegion *, int, int * );
-static void SetMeshSize( AstRegion *, int, int * );
-static void SetRegFS( AstRegion *, AstFrame *, int * );
-static void XORCheck( AstCmpRegion *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-/* Member functions. */
-/* ================= */
-int CmpRegionList( AstCmpRegion *this, int *nreg, AstRegion ***reg_list,
- int *status ) {
-/*
-*+
-* Name:
-* astCmpRegionList
-
-* Purpose:
-* Decompose a CmpRegion into a sequence of simpler Regions.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* int astCmpRegionList( AstCmpRegion *this, int *nreg,
-* AstRegion ***reg_list, int *status )
-
-* Class Membership:
-* CmpRegion method.
-
-* Description:
-* This function decomposes a CmpRegion into a sequence of simpler
-* Regions which may be applied in sequence to achieve the same
-* effect.
-
-* Parameters:
-* this
-* Pointer to the CmpRegion to be decomposed (the CmpRegion is not
-* actually modified by this function).
-* nreg
-* The address of an int which holds a count of the number of
-* individual Regions in the decomposition. On entry, this
-* should count the number of Regions already in the
-* "*reg_list" array (below). On exit, it is updated to include
-* any new Regions appended by this function.
-* reg_list
-* Address of a pointer to an array of Region pointers. On
-* entry, this array pointer should either be NULL (if no
-* Regions have yet been obtained) or should point at a
-* dynamically allocated array containing Region pointers
-* ("*nreg" in number) which have been obtained from a previous
-* invocation of this function.
-*
-* On exit, the dynamic array will be enlarged to contain any
-* new Region pointers that result from the decomposition
-* requested. These pointers will be appended to any previously
-* present, and the array pointer will be updated as necessary
-* to refer to the enlarged array (any space released by the
-* original array will be freed automatically).
-*
-* The new Region pointers returned will identify a sequence of
-* Region which, when applied in order, will represent an area
-* equivalent to that of the original Region.
-*
-* All the Region pointers returned by this function should be
-* annulled by the caller, using astAnnul, when no longer
-* required. The dynamic array holding these pointers should
-* also be freed, using astFree.
-
-* Returned Value:
-* An integer identifying the boolean operation that should be used to
-* combine the Regions returned in "reg_list". This will be AST__AND
-* or AST__OR.
-
-*-
-*/
-
-/* Local Variables: */
- AstCmpRegion *cmpreg;
- int add;
- int result;
-
-/* Check the global error status. */
- if ( !astOK ) return AST__AND;
-
-/* Check if this CmpRegion has an equivalent XOR representation. Is so,
- store details of the XOR representation in the CmpRegion. */
- XORCheck( this, status );
-
-/* The CmpRegion class only has full support for AND and OR operators.
- However, it can also represent XOR operators, but it does this by
- an equivalent set of AND and OR operators. When an XOR CmpRegion is
- created, the original supplied argument regions are stored in
- "this->xor1" and "this->xor2", and the component Regions placed in the
- new CmpRegion are actually CmpRegions that implement the equivalent
- of an XOR operation, using AND and OR operators. We want to hide this
- to the outside world, so if the supplied CmpRegion represents an XOR
- operation, add the XOR regions to the returned list, and return an
- XOR operator. */
- if( this->xor1 ) {
- *reg_list = astGrow( *reg_list, *nreg + 2, sizeof( AstRegion * ) );
- if( astOK ) {
- ( *reg_list )[ (*nreg)++ ] = astClone( this->xor1 );
- ( *reg_list )[ (*nreg)++ ] = astClone( this->xor2 );
- }
- result = AST__XOR;
-
-/* For AND and OR operators, we deal with the component Regions directly. */
- } else {
-
-/* If the first component of the supplied CmpRegion is itself a CmpRegion
- that uses the same boolean operator as "this", call this function
- recursively to add its component Regions to the returned list. */
- add = 1;
- if( astIsACmpRegion( this->region1 ) ) {
- cmpreg = (AstCmpRegion *) this->region1;
- if( cmpreg->oper == this->oper ) {
- (void) CmpRegionList( cmpreg, nreg, reg_list, status );
- add = 0;
- }
- }
-
-/* Otherwise, add the component Region directly into the returned list of
- Regions. */
- if( add ) {
- *reg_list = astGrow( *reg_list, *nreg + 1, sizeof( AstRegion * ) );
- if( astOK ) {
- ( *reg_list )[ *nreg ] = astClone( this->region1 );
- ( *nreg )++;
- }
- }
-
-/* Do the same for the second component region */
- add = 1;
- if( astIsACmpRegion( this->region2 ) ) {
- cmpreg = (AstCmpRegion *) this->region2;
- if( cmpreg->oper == this->oper ) {
- (void) CmpRegionList( cmpreg, nreg, reg_list, status );
- add = 0;
- }
- }
-
- if( add ) {
- *reg_list = astGrow( *reg_list, *nreg + 1, sizeof( AstRegion * ) );
- if( astOK ) {
- ( *reg_list )[ *nreg ] = astClone( this->region2 );
- ( *nreg )++;
- }
- }
-
- result = this->oper;
- }
-
-/* Return the boolean operator used to combine the regions in the
- returned array. */
- return result;
-}
-
-static void Decompose( AstMapping *this_mapping, AstMapping **map1,
- AstMapping **map2, int *series, int *invert1,
- int *invert2, int *status ) {
-/*
-*
-* Name:
-* Decompose
-
-* Purpose:
-* Decompose a CmpRegion into two component Regions.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* void Decompose( AstMapping *this, AstMapping **map1,
-* AstMapping **map2, int *series,
-* int *invert1, int *invert2, int *status )
-
-* Class Membership:
-* CmpRegion member function (over-rides the protected astDecompose
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns pointers to two Mappings which, when applied
-* either in series or parallel, are equivalent to the supplied Mapping.
-*
-* Since the Frame class inherits from the Mapping class, Frames can
-* be considered as special types of Mappings and so this method can
-* be used to decompose either CmpMaps, CmpFrames, CmpRegions or Prisms.
-
-* Parameters:
-* this
-* Pointer to the Mapping.
-* map1
-* Address of a location to receive a pointer to first component
-* Mapping.
-* map2
-* Address of a location to receive a pointer to second component
-* Mapping.
-* series
-* Address of a location to receive a value indicating if the
-* component Mappings are applied in series or parallel. A non-zero
-* value means that the supplied Mapping is equivalent to applying map1
-* followed by map2 in series. A zero value means that the supplied
-* Mapping is equivalent to applying map1 to the lower numbered axes
-* and map2 to the higher numbered axes, in parallel.
-* invert1
-* The value of the Invert attribute to be used with map1.
-* invert2
-* The value of the Invert attribute to be used with map2.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - Any changes made to the component rames using the returned
-* pointers will be reflected in the supplied CmpFrame.
-
-*-
-*/
-
-
-/* Local Variables: */
- AstCmpRegion *this; /* Pointer to CmpRegion structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpMap structure. */
- this = (AstCmpRegion *) this_mapping;
-
-/* The components Frames of a CmpRegion are considered to be series
- Mappings. */
- if( series ) *series = 1;
-
-/* The Frames are returned in their original order whether or not the
- CmpRegion has been inverted. */
- if( map1 ) *map1 = astClone( this->region1 );
- if( map2 ) *map2 = astClone( this->region2 );
-
-/* The invert flags dont mean anything for a Region, but we return them
- anyway. If the CmpRegion has been inverted, return inverted Invert flags. */
- if( astGetInvert( this ) ) {
- if( invert1 ) *invert1 = astGetInvert( this->region1 ) ? 0 : 1;
- if( invert2 ) *invert2 = astGetInvert( this->region2 ) ? 0 : 1;
-
-/* If the CmpRegion has not been inverted, return the current Invert flags. */
- } else {
- if( invert1 ) *invert1 = astGetInvert( this->region1 );
- if( invert2 ) *invert2 = astGetInvert( this->region2 );
- }
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two Objects are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* int Equal( AstObject *this_object, AstObject *that_object, int *status )
-
-* Class Membership:
-* CmpRegion member function (over-rides the astEqual protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two CmpRegions are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first CmpRegion.
-* that
-* Pointer to the second CmpRegion.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the CmpRegions are equivalent, zero otherwise.
-
-* Notes:
-* - The CmpRegions are equivalent if their component Regions are
-* equivalent and if they have the same boolean operation, negation
-* and closed flags.
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstCmpRegion *that;
- AstCmpRegion *this;
- int result;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Invoke the Equal method inherited from the parent Region class. This checks
- that the Objects are both of the same class, and have the same Negated
- and Closed flags (amongst other things). */
- if( (*parent_equal)( this_object, that_object, status ) ) {
-
-/* Obtain pointers to the two CmpRegion structures. */
- this = (AstCmpRegion *) this_object;
- that = (AstCmpRegion *) that_object;
-
-/* Test their first component Regions for equality. */
- if( astEqual( this->region1, that->region1 ) ) {
-
-/* Test their second component Regions for equality. */
- if( astEqual( this->region2, that->region2 ) ) {
-
-/* Test their boolean operator for equality. */
- if( this->oper == that->oper ) result = 1;
- }
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-/*
-* Name:
-* MAKE_SET
-
-* Purpose:
-* Define a function to set an attribute value for a CmpRegion.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "cmpregion.h"
-* MAKE_SET(attribute,lattribute,type)
-
-* Class Membership:
-* Defined by the CmpRegion class.
-
-* Description:
-* This macro expands to an implementation of a private member function
-* of the form:
-*
-* static void Set<Attribute>( AstRegion *this, <Type> value )
-*
-* that sets the value of a specified Region attribute in the parent
-* Region structure and also in the component Regions.
-
-* Parameters:
-* attribute
-* Name of the attribute, as it appears in the function name.
-* lattribute
-* Name of the attribute, all in lower case.
-* type
-* The C type of the attribute.
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attribute,lattribute,type) \
-static void Set##attribute( AstRegion *this_region, type value, int *status ) { \
-\
-/* Local Variables: */ \
- AstCmpRegion *this; /* Pointer to the CmpRegion structure */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Use the parent method to set the value in the parent Region structure. */ \
- (*parent_set##lattribute)( this_region, value, status ); \
-\
-/* Also set the value in the two component Regions. */ \
- this = (AstCmpRegion *) this_region; \
- astSet##attribute( this->region1, value ); \
- astSet##attribute( this->region2, value ); \
-}
-
-/* Use the above macro to create accessors for the MeshSize and Closed attributes. */
-MAKE_SET(MeshSize,meshsize,int)
-MAKE_SET(Closed,closed,int)
-
-/* Undefine the macro. */
-#undef MAKE_SET
-
-/*
-* Name:
-* MAKE_CLEAR
-
-* Purpose:
-* Define a function to clear an attribute value for a CmpRegion.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "cmpregion.h"
-* MAKE_CLEAR(attribute,lattribute)
-
-* Class Membership:
-* Defined by the CmpRegion class.
-
-* Description:
-* This macro expands to an implementation of a private member function
-* of the form:
-*
-* static void Clear<Attribute>( AstRegion *this )
-*
-* that sets the value of a specified Region attribute in the parent
-* Region structure and also in the component Regions.
-
-* Parameters:
-* attribute
-* Name of the attribute, as it appears in the function name.
-* lattribute
-* Name of the attribute, all in lower case.
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attribute,lattribute) \
-static void Clear##attribute( AstRegion *this_region, int *status ) { \
-\
-/* Local Variables: */ \
- AstCmpRegion *this; /* Pointer to the CmpRegion structure */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Use the parent method to clear the value in the parent Region structure. */ \
- (*parent_clear##lattribute)( this_region, status ); \
-\
-/* Also clear the value in the two component Regions. */ \
- this = (AstCmpRegion *) this_region; \
- astClear##attribute( this->region1 ); \
- astClear##attribute( this->region2 ); \
-}
-
-/* Use the above macro to create accessors for the MeshSize and Closed attributes. */
-MAKE_CLEAR(MeshSize,meshsize)
-MAKE_CLEAR(Closed,closed)
-
-/* Undefine the macro. */
-#undef MAKE_CLEAR
-
-static int GetBounded( AstRegion *this_region, int *status ) {
-/*
-* Name:
-* GetBounded
-
-* Purpose:
-* Is the Region bounded?
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* int GetBounded( AstRegion *this, int *status )
-
-* Class Membership:
-* CmpRegion method (over-rides the astGetBounded method inherited from
-* the Region class).
-
-* Description:
-* This function returns a flag indicating if the Region is bounded.
-* The implementation provided by the base Region class is suitable
-* for Region sub-classes representing the inside of a single closed
-* curve (e.g. Circle, Ellipse, Box, etc). Other sub-classes (such as
-* CmpRegion, PointList, etc ) may need to provide their own
-* implementations.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the Region is bounded. Zero otherwise.
-
-*/
-
-/* Local Variables: */
- AstCmpRegion *this; /* Pointer to CmpRegion structure */
- AstRegion *reg1; /* Pointer to first component Region */
- AstRegion *reg2; /* Pointer to second component Region */
- int neg1; /* Negated flag to use with first component */
- int neg1_old; /* Original Negated flag for first component */
- int neg2; /* Negated flag to use with second component */
- int neg2_old; /* Original Negated flag for second component */
- int oper; /* Combination operator */
- int overlap; /* Nature of overlap between components */
- int reg1b; /* Is the first component Region bounded?*/
- int reg2b; /* Is the second component Region bounded?*/
- int result; /* Returned result */
-
-/* Initialise */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the CmpRegion structure. */
- this = (AstCmpRegion *) this_region;
-
-/* Get the component Regions, how they should be combined, and the
- Negated values which should be used with them. The returned values
- take account of whether the supplied CmpRegion has itself been Negated
- or not. The returned Regions represent regions within the base Frame
- of the FrameSet encapsulated by the parent Region structure. */
- GetRegions( this, ®1, ®2, &oper, &neg1, &neg2, status );
-
-/* Temporarily set their Negated attributes to the required values.*/
- neg1_old = astGetNegated( reg1 );
- neg2_old = astGetNegated( reg2 );
- astSetNegated( reg1, neg1 );
- astSetNegated( reg2, neg2 );
-
-/* See if either of the component Regions is bounded. */
- reg1b = astGetBounded( reg1 );
- reg2b = astGetBounded( reg2 );
-
-/* If the regions are ANDed... */
- if( oper == AST__AND ) {
-
-/* If either one of the two components are bounded, then the AND region is
- bounded. */
- if( reg1b || reg2b ) {
- result = 1;
-
-/* If neither of the two components is bounded, then the AND region is
- unbounded if there is partial or no overlap between them and is bounded
- otherwise. */
- } else {
- overlap = astOverlap( reg1, reg2 );
- if( overlap == 1 || overlap == 4 || overlap == 6 ) {
- result = 0;
- } else {
- result = 1;
- }
- }
-
-/* If the regions are ORed... */
- } else {
-
-/* If either one of the two components is unbounded, then the OR region is
- unbounded. */
- if( !reg1b || !reg2b ) {
- result = 0;
-
-/* If both of the two components are bounded, then the OR region is also
- bounded. */
- } else {
- result = 1;
- }
- }
-
-/* Re-instate the original values for the Negated attributes of the two
- component Regions. */
- if( reg1 ) astSetNegated( reg1, neg1_old );
- if( reg2 ) astSetNegated( reg2, neg2_old );
-
-/* Free resources. */
- reg1 = astAnnul( reg1 );
- reg2 = astAnnul( reg2 );
-
-/* Return zero if an error occurred. */
- if( !astOK ) result = 0;
-
-/* Return the required pointer. */
- return result;
-}
-
-static double GetFillFactor( AstRegion *this_region, int *status ) {
-/*
-* Name:
-* GetFillFactor
-
-* Purpose:
-* Obtain the value of the FillFactor attribute for a CmpRegion.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* double GetFillFactor( AstRegion *this, int *status )
-
-* Class Membership:
-* CmpRegion member function (over-rides the astGetFillFactor method inherited
-* from the Region class).
-
-* Description:
-* This function returns the value of the FillFactor attribute for a
-* CmpRegion. A suitable default value is returned if no value has
-* previously been set.
-
-* Parameters:
-* this
-* Pointer to the CmpRegion.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The FillFactor value to use.
-
-*/
-
-/* Local Variables: */
- AstCmpRegion *this;
- double result;
-
-/* Check the global error status. */
- if ( !astOK ) return AST__BAD;
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Obtain a pointer to the CmpRegion structure. */
- this = (AstCmpRegion *) this_region;
-
-/* See if a FillFactor value has been set. If so, use the parent
- astGetFillFactor method to obtain it. */
- if ( astTestFillFactor( this ) ) {
- result = (*parent_getfillfactor)( this_region, status );
-
-/* Otherwise, we will generate a default value equal to the FillFactor values
- of the first component Region. */
- } else {
- result = astGetFillFactor( this->region1 );
- }
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
- return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* CmpRegion member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied CmpRegion,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the CmpRegion.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstCmpRegion *this; /* Pointer to CmpRegion structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the CmpRegion structure. */
- this = (AstCmpRegion *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by this class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
-
- result += astGetObjSize( this->region1 );
- result += astGetObjSize( this->region2 );
- if( this->xor1 ) result += astGetObjSize( this->xor1 );
- if( this->xor2 ) result += astGetObjSize( this->xor2 );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static void GetRegions( AstCmpRegion *this, AstRegion **reg1, AstRegion **reg2,
- int *oper, int *neg1, int *neg2, int *status ) {
-/*
-*
-* Name:
-* GetRegions
-
-* Purpose:
-* Get the component Regions of a CmpRegion.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* void GetRegions( AstCmpRegion *this, AstRegion **reg1, AstRegion **reg2,
-* int *oper, int *neg1, int *neg2, int *status )
-
-* Class Membership:
-* CmpRegion member function
-
-* Description:
-* This function returns pointers to two Regions which, when applied
-* using the returned boolean operator, are equivalent to the supplied
-* Region. If the CmpRegion has been negated, then the returned operator
-* and "negated" flags will be set such that they represent the
-* negated CmpRegion.
-*
-* The current Frames in both the returned component Regions will be
-* equivalent to the base Frame in the FrameSet encapsulated by the
-* parent Region structure.
-
-* Parameters:
-* this
-* Pointer to the CmpRegion.
-* reg1
-* Address of a location to receive a pointer to first component
-* Region. The current Frame in this region will be equivalent to
-* the base Frame in the FrameSet
-* reg2
-* Address of a location to receive a pointer to second component
-* Region.
-* oper
-* Address of a location to receive a value indicating how the
-* component Regions are combined together. This will be one of
-* AST__AND or AST__OR
-* neg1
-* The value of the Negated attribute to be used with reg1.
-* neg2
-* The value of the Negated attribute to be used with reg2.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - Any changes made to the component Regions using the returned
-* pointers will be reflected in the supplied CmpRegion.
-
-*-
-*/
-
-/* Initialise */
- if( reg1 ) *reg1 = NULL;
- if( reg2 ) *reg2 = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Return the component Region pointers. */
- if( reg1 ) *reg1 = astClone( this->region1 );
- if( reg2 ) *reg2 = astClone( this->region2 );
-
-/* Initialise the other returned items. Note, the CmpRegion initialiser
- stored a deep copy of the supplied component Regions, and so we do not
- need to worry about attributes of the components having been changed
- after the creation of the CmpRegion. This is different to the CmpMap
- class which merely clones its supplied component pointers and so has
- to save copies of the original Invert settings within the CmpMap
- structure. */
- if( oper ) *oper = this->oper;
- if( neg1 ) *neg1 = astGetNegated( this->region1 );
- if( neg2 ) *neg2 = astGetNegated( this->region2 );
-
-/* If the CmpRegion has been inverted, we modify the boolean operator and
- negation flags so that they reflect the inverted CmpRegion. */
- if( astGetNegated( this ) ) {
-
-/* If the component Regions are combined using AND, then the negated
- CmpRegion combines its negated components using OR. */
- if( this->oper == AST__AND ){
- if( oper ) *oper = AST__OR;
- if( neg1 ) *neg1 = *neg1 ? 0 : 1;
- if( neg2 ) *neg2 = *neg2 ? 0 : 1;
-
-/* If the component Regions are combined using OR, then the negated CmpRegion
- combines its negated components using AND. */
- } else if( this->oper == AST__OR ){
- if( oper ) *oper = AST__AND;
- if( neg1 ) *neg1 = *neg1 ? 0 : 1;
- if( neg2 ) *neg2 = *neg2 ? 0 : 1;
-
- } else if( astOK ) {
- astError( AST__INTER, "GetRegions(%s): The %s refers to an unknown "
- "boolean operator with identifier %d (internal AST "
- "programming error).", status, astGetClass( this ),
- astGetClass( this ), this->oper );
- }
- }
-}
-
-static AstRegion *GetDefUnc( AstRegion *this_region, int *status ) {
-/*
-* Name:
-* GetDefUnc
-
-* Purpose:
-* Obtain a pointer to the default uncertainty Region for a given Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* AstRegion *GetDefUnc( AstRegion *this )
-
-* Class Membership:
-* CmpRegion method (over-rides the astGetDefUnc method inherited from
-* the Region class).
-
-* This function returns a pointer to a Region which represents the
-* default uncertainty associated with a position on the boundary of the
-* given Region. The returned Region refers to the base Frame within the
-* FrameSet encapsulated by the supplied Region.
-
-* Parameters:
-* this
-* Pointer to the Region.
-
-* Returned Value:
-* A pointer to the Region. This should be annulled (using astAnnul)
-* when no longer needed.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstCmpRegion *this; /* Pointer to CmpRegion structure */
- AstRegion *result; /* Returned pointer */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the CmpRegion structure. */
- this = (AstCmpRegion *) this_region;
-
-/* If the first component region has non-default uncertainty, use it as
- the default uncertainty for the CmpRegion. Note, the current Frame of
- an uncertainty Region is assumed to be the same as the base Frame in the
- CmpRegion. */
- if( astTestUnc( this->region1 ) ) {
- result = astGetUncFrm( this->region1, AST__CURRENT );
-
-/* Otherwise, if the second component region has non-default uncertainty,
- use it as the default uncertainty for the CmpRegion. */
- } else if( astTestUnc( this->region2 ) ) {
- result = astGetUncFrm( this->region2, AST__CURRENT );
-
-/* Otherwise, use the parent method to determine the default uncertainty. */
- } else {
- result = (* parent_getdefunc)( this_region, status );
- }
-
-/* Return NULL if an error occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the required pointer. */
- return result;
-}
-
-void astInitCmpRegionVtab_( AstCmpRegionVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitCmpRegionVtab
-
-* Purpose:
-* Initialise a virtual function table for a CmpRegion.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* void astInitCmpRegionVtab( AstCmpRegionVtab *vtab, const char *name )
-
-* Class Membership:
-* CmpRegion vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the CmpRegion class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrameVtab *frame; /* Pointer to Frame component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstRegionVtab *region; /* Pointer to Region component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitRegionVtab( (AstRegionVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsACmpRegion) to determine if an object belongs to
- this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstRegionVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
-
- vtab->CmpRegionList = CmpRegionList;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
- region = (AstRegionVtab *) vtab;
- frame = (AstFrameVtab *) vtab;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
- parent_simplify = mapping->Simplify;
- mapping->Simplify = Simplify;
-
- parent_getdefunc = region->GetDefUnc;
- region->GetDefUnc = GetDefUnc;
-
- parent_setregfs = region->SetRegFS;
- region->SetRegFS = SetRegFS;
-
- parent_resetcache = region->ResetCache;
- region->ResetCache = ResetCache;
-
- parent_equal = object->Equal;
- object->Equal = Equal;
-
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
-#if defined(THREAD_SAFE)
- parent_managelock = object->ManageLock;
- object->ManageLock = ManageLock;
-#endif
-
- parent_clearclosed = region->ClearClosed;
- region->ClearClosed = ClearClosed;
-
- parent_clearmeshsize = region->ClearMeshSize;
- region->ClearMeshSize = ClearMeshSize;
-
- parent_setclosed = region->SetClosed;
- region->SetClosed = SetClosed;
-
- parent_setmeshsize = region->SetMeshSize;
- region->SetMeshSize = SetMeshSize;
-
- parent_getfillfactor = region->GetFillFactor;
- region->GetFillFactor = GetFillFactor;
-
- parent_regsetattrib = region->RegSetAttrib;
- region->RegSetAttrib = RegSetAttrib;
-
- parent_regclearattrib = region->RegClearAttrib;
- region->RegClearAttrib = RegClearAttrib;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- mapping->Decompose = Decompose;
- region->RegBaseBox = RegBaseBox;
- region->RegBaseBox2 = RegBaseBox2;
- region->RegBaseMesh = RegBaseMesh;
- region->RegPins = RegPins;
- region->RegTrace = RegTrace;
- region->GetBounded = GetBounded;
- region->RegBasePick = RegBasePick;
-
-/* Declare the copy constructor, destructor and class dump function. */
- astSetCopy( vtab, Copy );
- astSetDelete( vtab, Delete );
- astSetDump( vtab, Dump, "CmpRegion", "Combination of two Regions" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra,
- AstObject **fail, int *status ) {
-/*
-* Name:
-* ManageLock
-
-* Purpose:
-* Manage the thread lock on an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *ManageLock( AstObject *this, int mode, int extra,
-* AstObject **fail, int *status )
-
-* Class Membership:
-* CmpRegion member function (over-rides the astManageLock protected
-* method inherited from the parent class).
-
-* Description:
-* This function manages the thread lock on the supplied Object. The
-* lock can be locked, unlocked or checked by this function as
-* deteremined by parameter "mode". See astLock for details of the way
-* these locks are used.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* mode
-* An integer flag indicating what the function should do:
-*
-* AST__LOCK: Lock the Object for exclusive use by the calling
-* thread. The "extra" value indicates what should be done if the
-* Object is already locked (wait or report an error - see astLock).
-*
-* AST__UNLOCK: Unlock the Object for use by other threads.
-*
-* AST__CHECKLOCK: Check that the object is locked for use by the
-* calling thread (report an error if not).
-* extra
-* Extra mode-specific information.
-* fail
-* If a non-zero function value is returned, a pointer to the
-* Object that caused the failure is returned at "*fail". This may
-* be "this" or it may be an Object contained within "this". Note,
-* the Object's reference count is not incremented, and so the
-* returned pointer should not be annulled. A NULL pointer is
-* returned if this function returns a value of zero.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A local status value:
-* 0 - Success
-* 1 - Could not lock or unlock the object because it was already
-* locked by another thread.
-* 2 - Failed to lock a POSIX mutex
-* 3 - Failed to unlock a POSIX mutex
-* 4 - Bad "mode" value supplied.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-*/
-
-/* Local Variables: */
- AstCmpRegion *this; /* Pointer to CmpRegion structure */
- int result; /* Returned status value */
-
-/* Initialise */
- result = 0;
-
-/* Check the supplied pointer is not NULL. */
- if( !this_object ) return result;
-
-/* Obtain a pointers to the CmpRegion structure. */
- this = (AstCmpRegion *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
- if( !result ) result = (*parent_managelock)( this_object, mode, extra,
- fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
- the supplied Object. */
- if( !result ) result = astManageLock( this->region1, mode, extra, fail );
- if( !result ) result = astManageLock( this->region2, mode, extra, fail );
-
- return result;
-
-}
-#endif
-
-static AstRegion *MatchRegion( AstRegion *this, int ifrm, AstRegion *that,
- const char *method, int *status ) {
-/*
-* Name:
-* MatchRegion
-
-* Purpose:
-* Map a Region into the Frame of another Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* AstRegion *MatchRegion( AstRegion *this, int ifrm, AstRegion *that,
-* const char *method, int *status )
-
-* Class Membership:
-* CmpRegion method.
-
-* Description:
-* This function returns a pointer to a new Region which is a copy of
-* "that" mapped into either the base or current Frame of "this".
-
-* Parameters:
-* this
-* Pointer to a Region defining the Frame of the returned Region.
-* ifrm
-* The index of a Frame within the FrameSet encapsulated by "this".
-* The returned Region will refer to the requested Frame. It should
-* be either AST__CURRENT or AST__BASE.
-* that
-* Pointer to a Region defining the shape and extent of the
-* returned Region.
-* method
-* Pointer to a string holding the calling method.This is only used
-* in error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a new Region. This should be annulled (using astAnnul)
-* when no longer needed.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *frm; /* Current Frame from "fs" */
- AstFrameSet *fs; /* FrameSet connecting that to this */
- AstMapping *map; /* Base->Current Mapping from "fs" */
- AstRegion *result; /* Returned pointer */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. Also return NULL if no Regions were
- supplied. */
- if ( !astOK || !this || !that ) return result;
-
-/* Temporarily invert "this" if we are matching its base Frame (since the
- astConvert method matches current Frames). */
- if( ifrm == AST__BASE ) astInvert( this );
-
-/* Find a FrameSet connecting the current Frames of the two Regions */
- fs = astConvert( that, this, "" );
-
-/* Re-instate the original Frame indices in "this" if required. */
- if( ifrm == AST__BASE ) astInvert( this );
-
-/* Check a conversion path was found. */
- if( fs ) {
-
-/* Get the Frame and Mapping form the FrameSet. */
- frm = astGetFrame( fs, AST__CURRENT );
- map = astGetMapping( fs, AST__BASE, AST__CURRENT );
-
-/* Re-map the Region. */
- result = astMapRegion( that, map, frm );
-
-/* Free resources. */
- frm = astAnnul( frm );
- map = astAnnul( map );
- fs = astAnnul( fs );
-
-/* Report an error if there is no conversion between the two Frames. */
- } else {
- astError( AST__INTER, "%s(%s): MatchRegion cannot convert between "
- "the two supplied coordinate Frames (internal AST "
- "programming error).", status, method, astGetClass( this ) );
- }
-
-/* Annul the returned pointer if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static void RegBaseBox( AstRegion *this_region, double *lbnd, double *ubnd, int *status ){
-/*
-* Name:
-* RegBaseBox
-
-* Purpose:
-* Returns the bounding box of an un-negated Region in the base Frame of
-* the encapsulated FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* void RegBaseBox( AstRegion *this, double *lbnd, double *ubnd, int *status )
-
-* Class Membership:
-* CmpRegion member function (over-rides the astRegBaseBox protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns the upper and lower axis bounds of a Region in
-* the base Frame of the encapsulated FrameSet, assuming the Region
-* has not been negated. That is, the value of the Negated attribute
-* is ignored.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* lbnd
-* Pointer to an array in which to return the lower axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-* ubnd
-* Pointer to an array in which to return the upper axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstCmpRegion *this; /* Pointer to CmpRegion structure */
- AstPointSet *ps; /* Mesh pointset */
- AstRegion *reg1; /* Pointer to first component Region */
- AstRegion *reg2; /* Pointer to second component Region */
- double **ptr; /* Pointer to mesh data */
- double *clbnd1; /* Point to 1st comp lower bounds array */
- double *clbnd2; /* Point to 2nd comp lower bounds array */
- double *cubnd1; /* Point to 1st comp upper bounds array */
- double *cubnd2; /* Point to 2nd comp upper bounds array */
- double *p; /* Pointer to next coordinate value */
- double lb; /* Lower limit */
- double ub; /* Upper limit */
- int i; /* Axis index */
- int icoord; /* Coordinate index */
- int inc1; /* First component interval is included? */
- int inc2; /* Second component interval is included? */
- int ipoint; /* Point index */
- int nax; /* Number of axes in Frame */
- int ncoord; /* Number of coords */
- int neg1; /* First component negated? */
- int neg2; /* Second component negated? */
- int npoint; /* Number of points */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the CmpRegion structure */
- this = (AstCmpRegion *) this_region;
-
-/* If the CmpRegion is bounded, we find the bounding box using a mesh of
- points spread evenly over the boundary of the CmpRegion. */
- if( astGetBounded( this ) ) {
- ps = astRegBaseMesh( this_region );
- ptr = astGetPoints( ps );
- ncoord = astGetNcoord( ps );
- npoint = astGetNpoint( ps );
-
- if( astOK ) {
- for( icoord = 0; icoord < ncoord; icoord++ ) {
- lbnd[ icoord ] = DBL_MAX;
- ubnd[ icoord ] = -DBL_MAX;
- p = ptr[ icoord ];
- for( ipoint = 0; ipoint < npoint; ipoint++, p++ ) {
- if( *p != AST__BAD ) {
- if( *p < lbnd[ icoord ] ) lbnd[ icoord ] = *p;
- if( *p > ubnd[ icoord ] ) ubnd[ icoord ] = *p;
- }
- }
- }
- }
- ps = astAnnul( ps );
-
-/* If the CmpRegion is not bounded we look at each axis individually. */
- } else {
-
-/* Get pointers to the component Regions. */
- reg1 = this->region1;
- reg2 = this->region2;
-
-/* Get their negated flags */
- neg1 = astGetNegated( reg1 );
- neg2 = astGetNegated( reg2 );
-
-/* The base Frame of the parent Region structure is the current Frame of
- the component Regions. Get the no. of axes in this Frame. */
- nax = astGetNaxes( reg1 );
-
-/* Get the bounding boxes of the component Regions in this Frame. */
- clbnd1 = astMalloc( sizeof( double )*(size_t) nax );
- cubnd1 = astMalloc( sizeof( double )*(size_t) nax );
- clbnd2 = astMalloc( sizeof( double )*(size_t) nax );
- cubnd2 = astMalloc( sizeof( double )*(size_t) nax );
- if( astOK ) {
- astGetRegionBounds( reg1, clbnd1, cubnd1 );
- astGetRegionBounds( reg2, clbnd2, cubnd2 );
-
-/* Loop round every axis. */
- for( i = 0; i < nax; i++ ) {
- double ub1, lb1;
- double ub2, lb2;
- lb1 = clbnd1[ i ];
- ub1 = cubnd1[ i ];
- lb2 = clbnd2[ i ];
- ub2 = cubnd2[ i ];
-
-/* If the first component Region has been negated, the lower and upper
- bounds from the first component are the bounds of an *excluded* axis
- interval, not an included interval. If either of the bounds are
- infinite, we can swap it to an included interval. If both bounds are
- finite, we cannot convert to an included interval. In this case, we
- assume that the gap will be filled at some point on another axis, if
- there is more than 1 axis, and convert it to an unbouded included
- interval. */
- inc1 = 1;
- if( neg1 ) {
- lb = clbnd1[ i ];
- ub = cubnd1[ i ];
- if( lb == -DBL_MAX ) clbnd1[ i ] = ub;
- if( ub == DBL_MAX ) cubnd1[ i ] = lb;
- if( lb != -DBL_MAX && ub != DBL_MAX ) {
- if( nax == 1 ) {
- inc1 = 0;
- } else {
- clbnd1[ i ] = -DBL_MAX;
- cubnd1[ i ] = DBL_MAX;
- }
- }
- }
-
-/* Likewise attempt to convert an excluded interval into an included
- interval for the second component Region. */
- inc2 = 1;
- if( neg2 ) {
- lb = clbnd2[ i ];
- ub = cubnd2[ i ];
- if( lb == -DBL_MAX ) clbnd2[ i ] = ub;
- if( ub == DBL_MAX ) cubnd2[ i ] = lb;
- if( lb != -DBL_MAX && ub != DBL_MAX ) {
- if( nax == 1 ) {
- inc2 = 0;
- } else {
- clbnd2[ i ] = -DBL_MAX;
- cubnd2[ i ] = DBL_MAX;
- }
- }
- }
-
-/* If the component Regions are combined using AND, find the overlap of
- the axis intervals. This depends on whether the intervals are included
- or excluded. */
- if( this->oper == AST__AND ) {
-
- if( inc1 ) {
- if( inc2 ) {
- lbnd[ i ] = MAX( clbnd1[ i ], clbnd2[ i ] );
- ubnd[ i ] = MIN( cubnd1[ i ], cubnd2[ i ] );
- } else {
- lbnd[ i ] = clbnd1[ i ] < clbnd2[ i ] ? clbnd1[ i ] : cubnd2[ i ];
- ubnd[ i ] = cubnd1[ i ] > cubnd2[ i ] ? cubnd1[ i ] : clbnd2[ i ];
- }
- } else {
- if( inc2 ) {
- lbnd[ i ] = clbnd2[ i ] < clbnd1[ i ] ? clbnd2[ i ] : cubnd1[ i ];
- ubnd[ i ] = cubnd2[ i ] > cubnd1[ i ] ? cubnd2[ i ] : clbnd1[ i ];
- } else {
- lbnd[ i ] = clbnd1[ i ] < clbnd2[ i ] ? clbnd1[ i ] : cubnd2[ i ];
- ubnd[ i ] = cubnd1[ i ] > cubnd2[ i ] ? cubnd1[ i ] : clbnd2[ i ];
- }
- }
-
-/* If the component Regions are not combined using AND, find the union of
- the axis intervals. */
- } else {
- if( inc1 && inc2 ) {
- lbnd[ i ] = MIN( clbnd1[ i ], clbnd2[ i ] );
- ubnd[ i ] = MAX( cubnd1[ i ], cubnd2[ i ] );
- } else {
- lbnd[ i ] = -DBL_MAX;
- ubnd[ i ] = DBL_MAX;
- }
- }
- }
- }
-
-/* Free resources. */
- clbnd1 = astFree( clbnd1 );
- cubnd1 = astFree( cubnd1 );
- clbnd2 = astFree( clbnd2 );
- cubnd2 = astFree( cubnd2 );
- }
-}
-
-static void RegBaseBox2( AstRegion *this_region, double *lbnd, double *ubnd, int *status ){
-/*
-* Name:
-* RegBaseBox2
-
-* Purpose:
-* Returns the bounding box of an un-negated Region in the base Frame of
-* the encapsulated FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* void RegBaseBox2( AstRegion *this, double *lbnd, double *ubnd, int *status )
-
-* Class Membership:
-* CmpRegion member function (over-rides the astRegBaseBox2 protected
-* method inherited from the Region class).
-
-* Description:
-* This function is similar to astRegBaseBox in that it returns the
-* upper and lower axis bounds of a Region in the base Frame of the
-* encapsulated FrameSet. But, in addition to assuming that the
-* supplied Region has not been negated, it also assumes that any
-* component Regions contained within the supplied Region have not been
-* negated.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* lbnd
-* Pointer to an array in which to return the lower axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-* ubnd
-* Pointer to an array in which to return the upper axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstCmpRegion *this; /* Pointer to CmpRegion structure */
- AstRegion *reg1; /* Pointer to first component Region */
- AstRegion *reg2; /* Pointer to second component Region */
- double *clbnd1; /* Point to 1st comp lower bounds array */
- double *clbnd2; /* Point to 2nd comp lower bounds array */
- double *cubnd1; /* Point to 1st comp upper bounds array */
- double *cubnd2; /* Point to 2nd comp upper bounds array */
- int i; /* Axis index */
- int nax; /* Number of axes in Frame */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the CmpRegion structure */
- this = (AstCmpRegion *) this_region;
-
-/* Get pointers to the component Regions. */
- reg1 = this->region1;
- reg2 = this->region2;
-
-/* The base Frame of the parent Region structure is the current Frame of
- the component Regions. Get the no. of axes in this Frame. */
- nax = astGetNaxes( reg1 );
-
-/* Get the bounding boxes of the component Regions in this Frame. */
- clbnd1 = astMalloc( sizeof( double )*(size_t) nax );
- cubnd1 = astMalloc( sizeof( double )*(size_t) nax );
- clbnd2 = astMalloc( sizeof( double )*(size_t) nax );
- cubnd2 = astMalloc( sizeof( double )*(size_t) nax );
- if( astOK ) {
- astGetRegionBounds2( reg1, clbnd1, cubnd1 );
- astGetRegionBounds2( reg2, clbnd2, cubnd2 );
-
-/* How we combine the two bounding boxes depends on the boolean operator
- associated with this CmpRegion. For AND find the overlap of the two
- bounding boxes. For other operators find the union. */
- if( this->oper == AST__AND ) {
- for( i = 0; i < nax; i++ ) {
- lbnd[ i ]= MAX( clbnd1[ i ], clbnd2[ i ] );
- ubnd[ i ]= MIN( cubnd1[ i ], cubnd2[ i ] );
- }
-
- } else {
- for( i = 0; i < nax; i++ ) {
- lbnd[ i ]= MIN( clbnd1[ i ], clbnd2[ i ] );
- ubnd[ i ]= MAX( cubnd1[ i ], cubnd2[ i ] );
- }
- }
- }
-
-/* Free resources. */
- clbnd1 = astFree( clbnd1 );
- cubnd1 = astFree( cubnd1 );
- clbnd2 = astFree( clbnd2 );
- cubnd2 = astFree( cubnd2 );
-
-}
-
-static AstPointSet *RegBaseMesh( AstRegion *this_region, int *status ){
-/*
-* Name:
-* RegBaseMesh
-
-* Purpose:
-* Return a PointSet containing a mesh of points on the boundary of a
-* Region in its base Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* AstPointSet *astRegBaseMesh( AstRegion *this, int *status )
-
-* Class Membership:
-* CmpRegion member function (over-rides the astRegBaseMesh protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a PointSet containing a mesh of points on the
-* boundary of the Region. The points refer to the base Frame of
-* the encapsulated FrameSet.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the PointSet. Annul the pointer using astAnnul when it
-* is no longer needed.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-
-*/
-
-
-/* Local Variables: */
- AstCmpRegion *this; /* The CmpRegion structure */
- AstPointSet *mesh1; /* PointSet holding mesh for 1st component */
- AstPointSet *mesh1b; /* Mesh for 1st component mapped by 2nd comp. */
- AstPointSet *mesh2; /* PointSet holding mesh for 2nd component */
- AstPointSet *mesh2b; /* Mesh for 2nd component mapped by 1st comp. */
- AstPointSet *result; /* Returned pointer */
- AstRegion *reg1; /* Pointer to first component Region */
- AstRegion *reg2; /* Pointer to second component Region */
- double **ptr1; /* Pointer to array of mesh1b axis value pointers */
- double **ptr2; /* Pointer to array of mesh2b axis value pointers */
- double **ptr; /* Pointer to array of total axis value pointers */
- double *lbnd; /* Pointer to array of bounding box lower bounds */
- double *ubnd; /* Pointer to array of bounding box upper bounds */
- double v; /* Axis value */
- int hasMesh1; /* Does 1st component Region have a mesh? */
- int hasMesh2; /* Does 2nd component Region have a mesh? */
- int ic; /* Axis index */
- int ip; /* Input point index */
- int jp; /* Output point index */
- int nc; /* No. of axis values per point */
- int np1; /* No. of points in mesh1b */
- int np2; /* No. of points in mesh2b */
- int np; /* No. of points in returned PointSet */
- int ok; /* Were all axis values good at this point? */
-
-/* Initialise */
- result= NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the CmpRegion structure. */
- this = (AstCmpRegion *) this_region;
-
-/* If the Region structure contains a pointer to a PointSet holding
- a previously created mesh, return it. */
- if( this_region->basemesh ) {
- result = astClone( this_region->basemesh );
-
-/* Otherwise, create a new mesh. */
- } else {
-
-/* Get pointers to the component regions. */
- reg1 = this->region1;
- reg2 = this->region2;
-
-/* A mesh can only be produced for a Region if it is bounded when either
- negated or un-negated. See if meshes can be produced for the component
- Regions. */
- hasMesh1 = astGetBounded( reg1 );
- if( !hasMesh1 ){
- astNegate( reg1 );
- hasMesh1 = astGetBounded( reg1 );
- astNegate( reg1 );
- }
-
- hasMesh2 = astGetBounded( reg2 );
- if( !hasMesh2 ){
- astNegate( reg2 );
- hasMesh2 = astGetBounded( reg2 );
- astNegate( reg2 );
- }
-
-/* If neither Region has a mesh we cannot produce a mesh. */
- if( !hasMesh1 && !hasMesh2 && astOK ) {
- astError( AST__INTER, "astRegBaseMesh(%s): No mesh can be "
- "produced for the %s bacause neither of its component "
- "Regions has a mesh (internal AST programming error).", status,
- astGetClass( this ), astGetClass( this ) );
-
-/* If only one Region has a mesh, we can produce a mesh so long as the
- boolean operator is not OR. */
- } else if( ( !hasMesh1 || !hasMesh2 ) && this->oper == AST__OR && astOK ) {
- astError( AST__INTER, "astRegBaseMesh(%s): No mesh can be produced "
- "for the %s bacause one its component Regions has no "
- "mesh and the union of the Regions is required (internal "
- "AST programming error).", status, astGetClass( this ), astGetClass( this ) );
- }
-
-/* Allocate memory to hold a bounding box in the base Frame of the CmpRegion. */
- nc = astGetNin( this_region->frameset );
- lbnd = astMalloc( sizeof( double )*(size_t) nc );
- ubnd = astMalloc( sizeof( double )*(size_t) nc );
-
-/* Get current Frame meshes covering the two component Regions (the current
- Frame of the component Regions is the same as the base Frame of the parent
- Region). We now know that at least one Region has a mesh. If the other
- one does not have a mesh we may be able to create a mesh by taking the
- intersection of the Region with the bounding box of the bounded Region. */
- if( hasMesh1 ) {
- mesh1 = astRegMesh( reg1 );
- if( hasMesh2 ) {
- mesh2 = astRegMesh( reg2 );
- } else {
- astGetRegionBounds( reg1, lbnd, ubnd );
- mesh2 = astBndMesh( reg2, lbnd, ubnd );
- }
-
- } else {
- mesh2 = astRegMesh( reg2 );
- astGetRegionBounds( reg2, lbnd, ubnd );
- mesh1 = astBndMesh( reg1, lbnd, ubnd );
- }
-
-/* If the CmpRegion represents the intersection of the two component Regions
- (AND operator), the total mesh is the sum of the component mesh points
- which are inside the other component region. If the CmpRegion represents
- the union of the two component Regions (OR operator), the total mesh is
- the sum of the component mesh points which are outside the other component
- region. So temporarily negate the component Regions if they are
- combined using OR. */
- if( this->oper == AST__OR ) {
- astNegate( reg1 );
- astNegate( reg2 );
- }
-
-/* Transform the mesh for the first component using the second component
- as a Mapping. Mesh points outside (or inside if "oper" is OR) the bounds
- of the second component will be set bad. */
- mesh1b = astTransform( reg2, mesh1, 1, NULL );
-
-/* Transform the mesh for the second component using the first component
- as a Mapping. Mesh points outside (or inside if "oper" is OR) the bounds
- of the first component will be set bad. */
- mesh2b = astTransform( reg1, mesh2, 1, NULL );
-
-/* If required, negate them again to bring them back to their original state.*/
- if( this->oper == AST__OR ) {
- astNegate( reg1 );
- astNegate( reg2 );
- }
-
-/* The required mesh contains all the good points form both mesh1b and
- mesh2b (i.e. all boundary points which are inside -or inside if "oper"
- is OR- the other component Region). Create a PointSet assuming that all
- points are good. First allocate an array to hold pointers to the arrays
- holding coordinate values for each axis. */
- nc = astGetNcoord( mesh1b );
- np1 = astGetNpoint( mesh1b );
- np2 = astGetNpoint( mesh2b );
- np = np1 + np2;
- result = astPointSet( np, nc, "", status );
- ptr = astGetPoints( result );
-
-/* Get points to the axis values of the mapped meshes. */
- ptr1 = astGetPoints( mesh1b );
- ptr2 = astGetPoints( mesh2b );
-
-/* Check pointers can be used safely. */
- if( astOK ) {
-
-/* Initialise the index of the next point in the total mesh. */
- jp = 0;
-
-/* Loop round all the points in the transformed mesh for the first
- component. */
- for( ip = 0; ip < np1; ip++ ) {
-
-/* Assume this point has good axis values */
- ok = 1;
-
-/* Copy the axis values into the total mesh. Break if a bad axis value is
- found. */
- for( ic = 0; ic < nc; ic++ ) {
- v = ptr1[ ic ][ ip ];
- if( v != AST__BAD ) {
- ptr[ ic ][ jp ] = v;
- } else {
- ok = 0;
- break;
- }
- }
-
-/* If no bad axis values were found, increment the index of the next
- point in the total mesh. */
- if( ok ) jp++;
- }
-
-/* Now similarly copy the good values from the second transformed mesh onto
- the end of the total mesh array. */
- for( ip = 0; ip < np2; ip++ ) {
- ok = 1;
- for( ic = 0; ic < nc; ic++ ) {
- v = ptr2[ ic ][ ip ];
- if( v != AST__BAD ) {
- ptr[ ic ][ jp ] = v;
- } else {
- ok = 0;
- break;
- }
- }
- if( ok ) jp++;
- }
-
-/* If the total mesh contains no good points, we will create a PointSet
- holding a single bad position. */
- if( jp == 0 ) {
- np = 1;
- for( ic = 0; ic < nc; ic++ ) ptr[ ic ][ 0 ] = AST__BAD;
- } else {
- np = jp;
- }
-
-/* Adjust the size of the returned PointSet to exclude the extra space
- caused by any axis values being bad in the transformed meshes. */
- astSetNpoint( result, np );
-
- }
-
-/* Free resources. */
- mesh1 = astAnnul( mesh1 );
- mesh2 = astAnnul( mesh2 );
- mesh1b = astAnnul( mesh1b );
- mesh2b = astAnnul( mesh2b );
- lbnd = astFree( lbnd );
- ubnd = astFree( ubnd );
-
-/* Save the returned pointer in the Region structure so that it does not
- need to be created again next time this function is called. */
- if( astOK && result ) this_region->basemesh = astClone( result );
- }
-
-/* Annul the result if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-static AstRegion *RegBasePick( AstRegion *this_region, int naxes,
- const int *axes, int *status ){
-/*
-* Name:
-* RegBasePick
-
-* Purpose:
-* Return a Region formed by picking selected base Frame axes from the
-* supplied Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* AstRegion *RegBasePick( AstRegion *this, int naxes, const int *axes,
-* int *status )
-
-* Class Membership:
-* CmpRegion member function (over-rides the astRegBasePick protected
-* method inherited from the Region class).
-
-* Description:
-* This function attempts to return a Region that is spanned by selected
-* axes from the base Frame of the encapsulated FrameSet of the supplied
-* Region. This may or may not be possible, depending on the class of
-* Region. If it is not possible a NULL pointer is returned.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* naxes
-* The number of base Frame axes to select.
-* axes
-* An array holding the zero-based indices of the base Frame axes
-* that are to be selected.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the Region, or NULL if no region can be formed.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-*/
-
-/* Local Variables: */
- AstCmpRegion *this; /* Pointer to CmpRegion structure */
- AstFrame *frm1; /* Axes picked from the 1st encapsulated Region */
- AstFrame *frm2; /* Axes picked from the 2nd encapsulated Region */
- AstRegion *result; /* Returned Region */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the CmpRegion information. */
- this = (AstCmpRegion *) this_region;
-
-/* Both encapsulated regions refer to the same Frame (the base Frame of
- the parent Region), so attempt to pick the requested axs from them.
- If the resulting Frames are not Regions, we cannot pick the requested
- axes so return the NULL Frame pointer initialised above. */
- frm1 = astPickAxes( this->region1, naxes, axes, NULL );
- if( astIsARegion( frm1 ) ) {
- frm2 = astPickAxes( this->region2, naxes, axes, NULL );
- if( astIsARegion( frm2 ) ) {
-
-/* Create the new CmpRegion. */
- result = (AstRegion *) astCmpRegion( (AstRegion *) frm1,
- (AstRegion *) frm2,
- this->oper, "", status );
- }
-
-/* Free resources */
- frm2 = astAnnul( frm2 );
- }
- frm1 = astAnnul( frm1 );
-
-/* Return a NULL pointer if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static int RegPins( AstRegion *this_region, AstPointSet *pset, AstRegion *unc,
- int **mask, int *status ){
-/*
-* Name:
-* RegPins
-
-* Purpose:
-* Check if a set of points fall on the boundary of a given CmpRegion.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* int RegPins( AstRegion *this, AstPointSet *pset, AstRegion *unc,
-* int **mask, int *status )
-
-* Class Membership:
-* CmpRegion member function (over-rides the astRegPins protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a flag indicating if the supplied set of
-* points all fall on the boundary of the given CmpRegion.
-*
-* Some tolerance is allowed, as specified by the uncertainty Region
-* stored in the supplied CmpRegion "this", and the supplied uncertainty
-* Region "unc" which describes the uncertainty of the supplied points.
-
-* Parameters:
-* this
-* Pointer to the CmpRegion.
-* pset
-* Pointer to the PointSet. The points are assumed to refer to the
-* base Frame of the FrameSet encapsulated by "this".
-* unc
-* Pointer to a Region representing the uncertainties in the points
-* given by "pset". The Region is assumed to represent the base Frame
-* of the FrameSet encapsulated by "this". Zero uncertainity is assumed
-* if NULL is supplied.
-* mask
-* Pointer to location at which to return a pointer to a newly
-* allocated dynamic array of ints. The number of elements in this
-* array is equal to the value of the Npoint attribute of "pset".
-* Each element in the returned array is set to 1 if the
-* corresponding position in "pset" is on the boundary of the Region
-* and is set to zero otherwise. A NULL value may be supplied
-* in which case no array is created. If created, the array should
-* be freed using astFree when no longer needed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the points all fall on the boundary of the given
-* Region, to within the tolerance specified. Zero otherwise.
-
-*/
-
-/* Local variables: */
- AstCmpRegion *this; /* Pointer to the CmpRegion structure. */
- AstPointSet *pset1; /* Points masked by 1st component Region */
- AstPointSet *pset2; /* Points masked by 2nd component Region */
- AstPointSet *psetb1; /* Points in base Frame of 1st component Region */
- AstPointSet *psetb2; /* Points in base Frame of 2nd component Region */
- AstRegion *reg1; /* Pointer to first component Region */
- AstRegion *reg2; /* Pointer to second component Region */
- AstRegion *unc1; /* Base Frame uncertainty in 1st component Region */
- AstRegion *unc2; /* Base Frame uncertainty in 2nd component Region */
- double **ptr1; /* Pointer to axis values in "pset1" */
- double **ptr2; /* Pointer to axis values in "pset2" */
- double *p1; /* Pointer to next axis zero value for pset1 */
- double *p2; /* Pointer to next axis zero value for pset2 */
- int *mask1; /* Mask for first component boundary */
- int *mask2; /* Mask for second component boundary */
- int ip; /* Point index */
- int np; /* Number of points */
- int result; /* Returned flag */
-
-/* Initialise */
- result = 0;
- if( mask ) *mask = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return result;
-
-/* Get a pointer to the CmpRegion structure. */
- this = (AstCmpRegion *) this_region;
-
-/* Get pointers to the two component Regions. */
- reg1 = this->region1;
- reg2 = this->region2;
-
-/* Get a mask which indicates if each supplied point is on or off the
- boundary of the first component Region. astRegPins expects its "pset"
- argument to contain positions in the base Frame of the Region, so
- we must first transform the supplied points into the base Frame of
- "reg1". We must also map the uncertainty into the base Frame of the
- component Region. */
- psetb1 = astRegTransform( reg1, pset, 0, NULL, NULL );
- unc1 = MatchRegion( reg1, AST__BASE, unc, "astRegPins", status );
- astRegPins( reg1, psetb1, unc1, &mask1 );
-
-/* Likewise, get a mask which indicates if each supplied point is on or off
- the boundary of the second component Region. */
- psetb2 = astRegTransform( reg2, pset, 0, NULL, NULL );
- unc2 = MatchRegion( reg2, AST__BASE, unc, "astRegPins", status );
- astRegPins( reg2, psetb2, unc2, &mask2 );
-
-/* The criteria for a point to be on the boundary of the CmpRegion depend
- on the boolean operator being used. If component regions A and B are
- ANDed together, then a point is on the boundary of the CmpRegion if
- either 1) it is on the boundary of A and inside B, or 2) it is on the
- boundary of B and inside A. If the component regions are ORed together,
- then a point is on the boundary of the CmpRegion if either 1) it is on
- the boundary of A and outside B, or 2) it is on the boundary of B and
- outside A. Either we need to transform the supplied PointSet using each
- component Region as a Mapping. But if using OR we temporarily negate
- the Regions. */
- if( this->oper == AST__OR ) {
- astNegate( reg1 );
- astNegate( reg2 );
- }
- pset1 = astTransform( reg1, pset, 1, NULL );
- pset2 = astTransform( reg2, pset, 1, NULL );
- if( this->oper == AST__OR ) {
- astNegate( reg1 );
- astNegate( reg2 );
- }
-
-/* Get pointers to the axis values in these PointSets */
- ptr1 = astGetPoints( pset1 );
- ptr2 = astGetPoints( pset2 );
-
-/* If required, create an output mask array */
- np = astGetNpoint( pset );
- if( mask ) *mask = astMalloc( sizeof(int)*(size_t) np );
-
-/* Check pointers can be used safely. */
- if( astOK ) {
-
-/* We can use the values for the first axis to indicate if a point is
- inside or outside a Region. So store pointers to the first axis arrays. */
- p1 = ptr1[ 0 ];
- p2 = ptr2[ 0 ];
-
-/* Assume all points are on the boundary of the CmpRegion. */
- result = 1;
-
-/* If we are creating an output mask, we must check every point. Otherwise
- we can stop checking when we find the first point which is not on the
- boundary of the CmpRegion. */
- if( mask ) {
-
- for( ip = 0; ip < np; ip++ ) {
- if( ( mask1[ ip ] && p2[ ip ] != AST__BAD ) ||
- ( mask2[ ip ] && p1[ ip ] != AST__BAD ) ){
- (*mask)[ ip ] = 1;
- } else {
- (*mask)[ ip ] = 0;
- result = 0;
- }
- }
-
- } else {
-
- for( ip = 0; ip < np; ip++ ) {
- if( ( !mask1[ ip ] || p2[ ip ] == AST__BAD ) &&
- ( !mask2[ ip ] || p1[ ip ] == AST__BAD ) ){
- result = 0;
- break;
- }
- }
- }
- }
-
-/* Free resources */
- mask1 = astFree( mask1 );
- mask2 = astFree( mask2 );
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
- psetb1 = astAnnul( psetb1 );
- psetb2 = astAnnul( psetb2 );
- if( unc1 ) unc1 = astAnnul( unc1 );
- if( unc2 ) unc2 = astAnnul( unc2 );
-
-/* If an error has occurred, return zero. */
- if( !astOK ) {
- result = 0;
- if( mask ) *mask = astAnnul( *mask );
- }
-
-/* Return the result. */
- return result;
-}
-
-static void RegSetAttrib( AstRegion *this_region, const char *setting,
- char **base_setting, int *status ) {
-/*
-* Name:
-* RegSetAttrib
-
-* Purpose:
-* Set an attribute value for a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* void RegSetAttrib( AstRegion *this, const char *setting,
-* char **base_setting, int *status )
-
-* Class Membership:
-* CmpRegion method (over-rides the astRegSetAttrib method inherited from
-* the Region class).
-
-* Description:
-* This function assigns an attribute value to both the base and
-* current Frame in the FrameSet encapsulated within a Region, without
-* remapping either Frame.
-*
-* No error is reported if the attribute is not recognised by the base
-* Frame.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* setting
-* Pointer to a null terminated attribute setting string. NOTE, IT
-* SHOULD BE ENTIRELY LOWER CASE. The supplied string will be
-* interpreted using the public interpretation implemented by
-* astSetAttrib. This can be different to the interpretation of the
-* protected accessor functions. For instance, the public
-* interpretation of an unqualified floating point value for the
-* Epoch attribute is to interpet the value as a gregorian year,
-* but the protected interpretation is to interpret the value as an
-* MJD.
-* base_setting
-* Address of a location at which to return a pointer to the null
-* terminated attribute setting string which was applied to the
-* base Frame of the encapsulated FrameSet. This may differ from
-* the supplied setting if the supplied setting contains an axis
-* index and the current->base Mapping in the FrameSet produces an
-* axis permutation. The returned pointer should be freed using
-* astFree when no longer needed. A NULL pointer may be supplied in
-* which case no pointer is returned.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstCmpRegion *this;
- char *bset;
- int rep;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the CmpRegion structure. */
- this = (AstCmpRegion *) this_region;
-
-/* Use the RegSetAttrib method inherited from the parent class to apply the
- setting to the current and base Frames in the FrameSet encapsulated by the
- parent Region structure. */
- (*parent_regsetattrib)( this_region, setting, &bset, status );
-
-/* Now apply the base Frame setting to the component Regions (the current
- Frame within the component Regions is equivalent to the base Frame in the
- parent Region structure). Annul any "attribute unknown" error that results
- from attempting to do this. */
- if( astOK ) {
- rep = astReporting( 0 );
- astRegSetAttrib( this->region1, bset, NULL );
- astRegSetAttrib( this->region2, bset, NULL );
- if( astStatus == AST__BADAT ) astClearStatus;
- astReporting( rep );
- }
-
-/* If required, return the base Frame setting string, otherwise free it. */
- if( base_setting ) {
- *base_setting = bset;
- } else {
- bset = astFree( bset );
- }
-}
-
-static int RegTrace( AstRegion *this_region, int n, double *dist, double **ptr,
- int *status ){
-/*
-*+
-* Name:
-* RegTrace
-
-* Purpose:
-* Return requested positions on the boundary of a 2D Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* int astRegTrace( AstRegion *this, int n, double *dist, double **ptr );
-
-* Class Membership:
-* CmpRegion member function (overrides the astRegTrace method
-* inherited from the parent Region class).
-
-* Description:
-* This function returns positions on the boundary of the supplied
-* Region, if possible. The required positions are indicated by a
-* supplied list of scalar parameter values in the range zero to one.
-* Zero corresponds to some arbitrary starting point on the boundary,
-* and one corresponds to the end (which for a closed region will be
-* the same place as the start).
-
-* Parameters:
-* this
-* Pointer to the Region.
-* n
-* The number of positions to return. If this is zero, the function
-* returns without action (but the returned function value still
-* indicates if the method is supported or not).
-* dist
-* Pointer to an array of "n" scalar parameter values in the range
-* 0 to 1.0.
-* ptr
-* A pointer to an array of pointers. The number of elements in
-* this array should equal tthe number of axes in the Frame spanned
-* by the Region. Each element of the array should be a pointer to
-* an array of "n" doubles, in which to return the "n" values for
-* the corresponding axis. The contents of the arrays are unchanged
-* if the supplied Region belongs to a class that does not
-* implement this method.
-
-* Returned Value:
-* Non-zero if the astRegTrace method is implemented by the class
-* of Region supplied, and zero if not.
-
-*-
-*/
-
-/* Local Variables; */
- AstCmpRegion *this;
- AstFrame *frm;
- AstMapping *map;
- AstPointSet *bpset;
- AstPointSet *cpset;
- double **bptr;
- int i;
- int j;
- int ncur;
- int result;
- double *rval;
- double *off;
- double *r1d;
- double *r2d;
- double *r1ptr[ 2 ];
- double *r2ptr[ 2 ];
- double **r1ptrb;
- double **r2ptrb;
- double dbreak;
- double dtot;
- double x;
- double x0;
- int r1n;
- int r2n;
- AstPointSet *r1pset;
- AstPointSet *r2pset;
- AstPointSet *r1psetb;
- AstPointSet *r2psetb;
-
-/* Initialise */
- result = 0;
-
-/* Check inherited status. */
- if( ! astOK ) return result;
-
-/* Get a pointer to the CmpRegion structure. */
- this = (AstCmpRegion *) this_region;
-
-/* Get a pointer to the base Frame in the encapsulated FrameSet. */
- frm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Check it is 2-dimensional. */
- result = 1;
- if( astGetNaxes( frm ) != 2 ) result = 0;
-
-/* Check the component Regions can be traced. */
- if( !astRegTrace( this->region1, 0, NULL, NULL ) ||
- !astRegTrace( this->region1, 0, NULL, NULL ) ) result = 0;
-
-/* Check we have some points to find. */
- if( result && n > 0 ) {
-
-/* We first determine the required positions in the base Frame of the
- Region, and then transform them into the current Frame. Get the
- base->current Mapping, and the number of current Frame axes. */
- map = astGetMapping( this_region->frameset, AST__BASE, AST__CURRENT );
-
-/* If it's a UnitMap we do not need to do the transformation, so put the
- base Frame positions directly into the supplied arrays. */
- if( astIsAUnitMap( map ) ) {
- bpset = NULL;
- bptr = ptr;
- ncur = 2;
-
-/* Otherwise, create a PointSet to hold the base Frame positions. */
- } else {
- bpset = astPointSet( n, 2, " ", status );
- bptr = astGetPoints( bpset );
- ncur = astGetNout( map );
- }
-
- r1d = astMalloc( sizeof( double )*n );
- r2d = astMalloc( sizeof( double )*n );
-
-/* Ensure information about the breaks in the boundary of each component
- region is available within the CmpRegion structure. These breaks are
- the points at which the two boundaries cross. */
- SetBreakInfo( this, 0, status );
- SetBreakInfo( this, 1, status );
-
-/* Get the constants needed to convert the supplied distances (normalised
- so that the border of the entire CmpRegion has a length of 1.0), into
- distances around the border of each component Region. */
- dtot = this->d0[ 0 ] + this->d0[ 1 ];
- dbreak = this->d0[ 0 ]/dtot;
-
-/* Initialise here to avoid compiler warnings. */
- r1n = 0;
- r2n = 0;
-
-/* Check the pointers can be used safely. */
- if( astOK ) {
-
-/* Loop round all supplied distances, determining if they represent a
- position on the first or second component Region. */
- for( i = 0; i < n; i++ ) {
-
-/* If the current distance represents a point in the second component
- Region... */
- if( dist[ i ] > dbreak ) {
-
-/* Find the correspond distance around the used sections of the second
- component region (normalised so that the entire border of the
- component region has a length of "this->d0[1]"). */
- x0 = ( dist[ i ] - dbreak )*dtot;
- x = x0;
-
-/* Convert this into the correspond distance around the entire border of
- the second component region (normalised so that the entire border of the
- component region has unit length). */
- rval = this->rvals[ 1 ];
- off = this->offs[ 1 ];
-
- for( j = 0; j < this->nbreak[ 1 ]; j++,rval++,off++ ) {
- if( *rval >= x0 ) break;
- x += *off;
- }
-
-/* Store this as the next distance to move around the second component
- Region. */
- r2d[ r2n++ ] = x;
-
-/* Now we do the same if the current distance corresponds to a position
- in the first component Region. */
- } else {
-
- x0 = dist[ i ]*dtot;
- x = x0;
-
- rval = this->rvals[ 0 ];
- off = this->offs[ 0 ];
-
- for( j = 0; j < this->nbreak[ 0 ]; j++,rval++,off++ ) {
- if( *rval >= x0 ) break;
- x += *off;
- }
-
- r1d[ r1n++ ] = x;
-
- }
-
- }
- }
-
-/* Allocate memory to hold the axis values at the corresponding positions
- in the first component Region. */
- r1ptr[ 0 ] = astMalloc( sizeof( double )*r1n );
- r1ptr[ 1 ] = astMalloc( sizeof( double )*r1n );
-
-/* Allocate memory to hold the axis values at the corresponding positions
- in the second component Region. */
- r2ptr[ 0 ] = astMalloc( sizeof( double )*r2n );
- r2ptr[ 1 ] = astMalloc( sizeof( double )*r2n );
-
-/* Check the pointers can be used safely. */
- if( astOK ) {
-
-/* Find the axis values at each of the required positions that fall in
- the first component Region. Negate it first if needed to ensure the
- Region is bounded (not guaranteed, but likely). */
- if( astGetBounded( this->region1 ) ) {
- (void) astRegTrace( this->region1, r1n, r1d, r1ptr );
- } else {
- astNegate( this->region1 );
- (void) astRegTrace( this->region1, r1n, r1d, r1ptr );
- astNegate( this->region1 );
- }
-
-/* Do the same for the second component Region. */
- if( astGetBounded( this->region2 ) ) {
- (void) astRegTrace( this->region2, r2n, r2d, r2ptr );
- } else {
- astNegate( this->region2 );
- (void) astRegTrace( this->region2, r2n, r2d, r2ptr );
- astNegate( this->region2 );
- }
-
-/* If the two component Regions are ANDed together, we want to remove the
- positions from the boundary of the required component Region that fall
- outside the other region. We can do this by simply using the other Region
- as a Mapping. If the two component Regions are ORed together, we want to
- remove the position that fall within (rather than outside) the other
- Region. To do this we need to negate the other region first. */
- if( this->oper == AST__OR ) {
- astNegate( this->region1 );
- astNegate( this->region2 );
- }
-
-/* Now transform the points on the boundary of the first Region in order
- to set invalid those positions which are not on the boundary of the
- supplied CmpRegion. */
- if( r1n > 0 ) {
- r1pset = astPointSet( r1n, 2, " ", status );
- astSetPoints( r1pset, r1ptr );
- r1psetb = astTransform( this->region2, r1pset, 1, NULL );
- r1ptrb = astGetPoints( r1psetb );
- } else {
- r1pset = NULL;
- r1psetb = NULL;
- r1ptrb = NULL;
- }
-
-/* Now transform the points on the boundary of the second Region in order
- to set invalid those positions which are not on the boundary of the
- supplied CmpRegion. */
- if( r2n > 0 ) {
- r2pset = astPointSet( r2n, 2, " ", status );
- astSetPoints( r2pset, r2ptr );
- r2psetb = astTransform( this->region1, r2pset, 1, NULL );
- r2ptrb = astGetPoints( r2psetb );
- } else {
- r2pset = NULL;
- r2psetb = NULL;
- r2ptrb = NULL;
- }
-
-/* Re-instate the original Negated values */
- if( this->oper == AST__OR ) {
- astNegate( this->region1 );
- astNegate( this->region2 );
- }
-
-/* Check pointer can be used safely. */
- if( astOK ) {
-
-/* Copy the boundary positions from each component Region into a single
- PointSet. These positions are in the base Frame of the CmpRegion. */
- r1n = 0;
- r2n = 0;
- for( i = 0; i < n; i++ ) {
- if( dist[ i ] > dbreak ) {
- bptr[ 0 ][ i ] = r2ptrb[ 0 ][ r2n ];
- bptr[ 1 ][ i ] = r2ptrb[ 1 ][ r2n++ ];
- } else {
- bptr[ 0 ][ i ] = r1ptrb[ 0 ][ r1n ];
- bptr[ 1 ][ i ] = r1ptrb[ 1 ][ r1n++ ];
- }
- }
-
- }
-
-/* Free resources. */
- if( r1pset ) r1pset = astAnnul( r1pset );
- if( r2pset ) r2pset = astAnnul( r2pset );
- if( r1psetb ) r1psetb = astAnnul( r1psetb );
- if( r2psetb ) r2psetb = astAnnul( r2psetb );
-
- }
-
-
-/* If required, transform the base frame positions into the current
- Frame of the CmpRegion, storing them in the supplied array. Then
- free resources. */
- if( bpset ) {
- cpset = astPointSet( n, ncur, " ", status );
- astSetPoints( cpset, ptr );
-
- (void) astTransform( map, bpset, 1, cpset );
-
- cpset = astAnnul( cpset );
- bpset = astAnnul( bpset );
- }
-
-/* Free remaining resources. */
- map = astAnnul( map );
- }
- frm = astAnnul( frm );
-
-/* Return the result. */
- return result;
-}
-
-static void RegClearAttrib( AstRegion *this_region, const char *attrib,
- char **base_attrib, int *status ) {
-/*
-* Name:
-* RegClearAttrib
-
-* Purpose:
-* Clear an attribute value for a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* void RegClearAttrib( AstRegion *this, const char *attrib,
-* char **base_attrib, int *status )
-
-* Class Membership:
-* CmpRegion member function (over-rides the astRegClearAttrib method
-* inherited from the Region class).
-
-* Description:
-* This function clears the value of a named attribute in both the base
-* and current Frame in the FrameSet encapsulated within a Region, without
-* remapping either Frame.
-*
-* No error is reported if the attribute is not recognised by the base
-* Frame.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* attrib
-* Pointer to a null terminated string holding the attribute name.
-* NOTE, IT SHOULD BE ENTIRELY LOWER CASE.
-* base_attrib
-* Address of a location at which to return a pointer to the null
-* terminated string holding the attribute name which was cleared in
-* the base Frame of the encapsulated FrameSet. This may differ from
-* the supplied attribute if the supplied attribute contains an axis
-* index and the current->base Mapping in the FrameSet produces an
-* axis permutation. The returned pointer should be freed using
-* astFree when no longer needed. A NULL pointer may be supplied in
-* which case no pointer is returned.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstCmpRegion *this;
- char *batt;
- int rep;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the CmpRegion structure. */
- this = (AstCmpRegion *) this_region;
-
-/* Use the RegClearAttrib method inherited from the parent class to clear the
- attribute in the current and base Frames in the FrameSet encapsulated by
- the parent Region structure. */
- (*parent_regclearattrib)( this_region, attrib, &batt, status );
-
-/* Now clear the base Frame attribute to the component Regions (the current
- Frame within the component Regions is equivalent to the base Frame in the
- parent Region structure). Annul any "attribute unknown" error that results
- from attempting to do this. */
- if( astOK ) {
- rep = astReporting( 0 );
- astRegClearAttrib( this->region1, batt, NULL );
- astRegClearAttrib( this->region2, batt, NULL );
- if( astStatus == AST__BADAT ) astClearStatus;
- astReporting( rep );
- }
-
-/* If required, return the base Frame attribute name, otherwise free it. */
- if( base_attrib ) {
- *base_attrib = batt;
- } else {
- batt = astFree( batt );
- }
-}
-
-static void ResetCache( AstRegion *this_region, int *status ){
-/*
-* Name:
-* ResetCache
-
-* Purpose:
-* Clear cached information within the supplied Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* void ResetCache( AstRegion *this, int *status )
-
-* Class Membership:
-* Region member function (overrides the astResetCache method
-* inherited from the parent Region class).
-
-* Description:
-* This function clears cached information from the supplied Region
-* structure.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables *: */
- AstCmpRegion *this;
- int i;
-
-/* Check a Region was supplied. */
- if( this_region ) {
-
-/* Get a pointer to the CmpRegion structure. */
- this = (AstCmpRegion *) this_region;
-
-/* Clear information cached in the CmpRegion structure. */
- for( i = 0; i < 2; i++ ) {
- this->rvals[ i ] = astFree( this->rvals[ i ] );
- this->offs[ i ] = astFree( this->offs[ i ] );
- this->nbreak[ i ] = 0;
- this->d0[ i ] = AST__BAD;
- }
-
-/* Clear information cached in the component regions. */
- if( this->region1 ) astResetCache( this->region1 );
- if( this->region2 ) astResetCache( this->region2 );
-
-/* Clear information cached in the parent Region structure. */
- (*parent_resetcache)( this_region, status );
- }
-}
-
-static void SetBreakInfo( AstCmpRegion *this, int comp, int *status ){
-/*
-* Name:
-* SetBreakInfo
-
-* Purpose:
-* Ensure that a CmpRegion has information about the breaks in the
-* boundaries of one of the two component Regions.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* void SetBreakInfo( AstCmpRegion *this, int comp, int *status )
-
-* Class Membership:
-* CmpRegion method.
-
-* Description:
-* This function returns without action if the supplied CmpRegion
-* already contains break information for the specified component Region.
-* Otherwise, it creates the required information and stores it in the
-* CmpRegion.
-*
-* Each component Region in the CmpRegion has a boundary. But in
-* general only part of the boundary of a component Region will also
-* be included in the CmpRegion boundary. Thus the component Region
-* boundary can be broken up into sections; sections that form part
-* of the CmpRegion boundary, and sections that do not. This function
-* stores information about the breaks between these sections.
-*
-* The complete boundary of a component Region is parameterised by a
-* distance that goes from 0.0 to 1.0. This function find the ranges
-* of this parameter that correspond to the sections of the boundary that
-* are also on the CmpRegion boundary, and thus finds the total length
-* that the component boundary contributes to the CmpRegion boundary.
-* This length is stored in "this->d0" (a two element array, one for
-* each component Region).
-*
-* It also find two arrays "this->rvals" and "this->offs" that allow a
-* distance value in the range 0.0 to "this->d0" (i.e. a distance
-* measured by skipping over the parts of the component boundary that
-* are not on the CmpRegion boundary), to be converted into the
-* corresponding distance value in the range 0.0 to 1.0 (i.e. a distance
-* measured round the complete component boundary, including the parts
-* not on the CmpRegion boundary).
-
-* Parameters:
-* this
-* Pointer to a CmpRegion.
-* comp
-* Zero or one, indicating which component Region is to be checked.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* The number of points to be spread evenly over the entire boundary of the
- component Region. */
-#define NP 101
-
-/* Local Variables: */
- AstPointSet *pset1;
- AstPointSet *pset2;
- AstRegion *other;
- AstRegion *reg;
- double **ptr1;
- double **ptr2;
- double *d;
- double *offs;
- double *p;
- double *q;
- double *rvals;
- double delta;
- double rval;
- int i;
- int j;
- double rbad;
- int nn;
- int prevgood;
-
-/* Check inherited status */
- if( !astOK ) return;
-
-/* If the information describing breaks in the component boundary has not
- yet been set up, do so now. */
- if( this->d0[ comp ] == AST__BAD ) {
-
-/* Get a pointer to the component Region for which break information is
- required. */
- reg = comp ? this->region2 : this->region1;
-
-/* Check the component class implements the astRegTrace method. */
- if( astRegTrace( reg, 0, NULL, NULL ) ) {
-
-/* Create a pointSet to hold axis values at evenly spaced positions along
- the entire boundary of the selected component region. */
- pset1 = astPointSet( NP, 2, " ", status );
- ptr1 = astGetPoints( pset1 );
-
-/* Allocate memory to hold an array of corresponding scalar distances around
- the boundary. */
- d = astMalloc( NP*sizeof( double ) );
-
-/* Check pointers can be used safely. */
- if( astOK ) {
-
-/* Get the distance increment between points (the entire boundary has
- unit length). */
- delta = 1.0/( NP - 1 );
-
-/* Set up the array of evenly spaced distances around the boundary of the
- component region. */
- for( i = 0; i < NP; i++ ) d[ i ] = i*delta;
-
-/* Get the corresponding Frame positions. If the Region is unbounded
- (e.g. a negated circle, etc), then negate it first in the hope that
- this may produced a bounded Region. */
- if( astGetBounded( reg ) ) {
- (void) astRegTrace( reg, NP, d, ptr1 );
- } else {
- astNegate( reg );
- (void) astRegTrace( reg, NP, d, ptr1 );
- astNegate( reg );
- }
-
-/* Get a pointer to the other component Region. */
- other = comp ? this->region1 : this->region2;
-
-/* If the two component Regions are ANDed together, we want to remove the
- positions from the boundary of the required component Region that fall
- outside the other region. We can do this by simply using the other Region
- as a Mapping. If the two component Regions are ORed together, we want to
- remove the position that fall within (rather than outside) the other
- Region. To do this we need to negate the other region first. */
- if( this->oper == AST__OR ) astNegate( other );
-
-/* Now transform the points on the boundary of the selected Region in
- order to set invalid those positions which are not on the boundary of
- the supplied CmpRegion. */
- pset2 = astTransform( other, pset1, 1, NULL );
-
-/* Negate the other region again to revert it to is original state */
- if( this->oper == AST__OR ) astNegate( other );
-
-/* Modify the distance array by setting invalid each element that is not
- on the boundary of the CmpRegion. */
- ptr2 = astGetPoints( pset2 );
- if( astOK ) {
- p = ptr2[ 0 ];
- q = ptr2[ 1 ];
- for( i = 0; i < NP; i++,p++,q++ ) {
- if( *p == AST__BAD || *q == AST__BAD ) d[ i ] = AST__BAD;
- }
-
-/* At each good/bad junction in this list, extend the good section by one
- point. This ensures that the good sections of the curve do in fact
- touch each other (they may in fact overlap a little but that does not
- matter). */
- prevgood = ( d[ 0 ] != AST__BAD );
- for( i = 1; i < NP; i++,p++,q++ ) {
- if( d[ i ] == AST__BAD ) {
- if( prevgood ) d[ i ] = i*delta;
- prevgood = 0;
-
- } else {
- if( !prevgood ) d[ i - 1 ] = ( i - 1 )*delta;
- prevgood = 1;
- }
- }
-
-/* Now create two arrays - "rvals" holds the distance travelled around
- the used parts of the border at which breaks occur, "offs" holds the jump
- in distance around the complete border at each break. The distance
- around the complete border is normalised to the range [0.0,1.0].
- Therefore the total distance around the used parts of the border will in
- general be less than 1.0 */
-
- if( d[ 0 ] == AST__BAD ) {
- nn = 1;
- j = 0;
- rvals = astMalloc( sizeof( double ) );
- offs = astMalloc( sizeof( double ) );
- if( astOK ) rvals[ 0 ] = -0.5*delta;
- rbad = 0.5;
- prevgood = 0;
- rval = -0.5*delta;
-
- } else {
- nn = 0;
- rvals = NULL;
- offs = NULL;
- prevgood = 1;
- rbad = 0.0;
- rval = 0.0;
- }
-
- for( i = 1; i < NP; i++,p++,q++ ) {
-
- if( d[ i ] == AST__BAD ) {
- if( prevgood ) {
- j = nn++;
- rvals = astGrow( rvals, nn, sizeof( double ) );
- offs = astGrow( offs, nn, sizeof( double ) );
- if( astOK ) {
- rvals[ j ] = rval + 0.5*delta;
- rbad = 0.0;
- } else {
- break;
- }
- prevgood = 0;
- }
-
- rbad += 1.0;
-
- } else {
- if( !prevgood ) {
- offs[ j ] = rbad*delta;
- prevgood = 1;
- }
- rval += delta;
- }
- }
-
- if( !prevgood ) {
- rval += 0.5*delta;
- offs[ j ] = rbad*delta;
- }
-
-/* Record the information in the CmpRegion structure. */
- this->rvals[ comp ] = rvals;
- this->offs[ comp ] = offs;
- this->nbreak[ comp ] = nn;
- this->d0[ comp ] = rval;
- }
-
-/* Free resources. */
- pset2 = astAnnul( pset2 );
- }
-
- pset1 = astAnnul( pset1 );
- d = astFree( d );
-
- }
- }
-}
-
-#undef NP
-
-static void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status ) {
-/*
-* Name:
-* SetRegFS
-
-* Purpose:
-* Stores a new FrameSet in a Region
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status )
-
-* Class Membership:
-* CmpRegion method (over-rides the astSetRegFS method inherited from
-* the Region class).
-
-* Description:
-* This function creates a new FrameSet and stores it in the supplied
-* Region. The new FrameSet contains two copies of the supplied
-* Frame, connected by a UnitMap.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* frm
-* The Frame to use.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstRegion *creg; /* Pointer to component Region structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Invoke the parent method to store the FrameSet in the parent Region
- structure. */
- (* parent_setregfs)( this_region, frm, status );
-
-/* If either component Region has a dummy FrameSet use this method
- recursively to give them the same FrameSet. */
- creg = ((AstCmpRegion *) this_region )->region1;
- if( creg && !astGetRegionFS( creg ) ) astSetRegFS( creg, frm );
-
- creg = ((AstCmpRegion *) this_region )->region2;
- if( creg && !astGetRegionFS( creg ) ) astSetRegFS( creg, frm );
-
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* Simplify
-
-* Purpose:
-* Simplify a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* AstMapping *Simplify( AstMapping *this, int *status )
-
-* Class Membership:
-* CmpRegion method (over-rides the astSimplify method inherited from
-* the Region class).
-
-* Description:
-* This function simplifies a CmpRegion to eliminate redundant
-* computational steps, or to merge separate steps which can be
-* performed more efficiently in a single operation.
-
-* Parameters:
-* this
-* Pointer to the original Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A new pointer to the (possibly simplified) Region.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-
-* Deficiencies:
-* - Currently, this function does not attempt to map the component
-* Regions into the current Frame of the parent Region structure.
-* Both components should be mapped into the current Frame, and if the
-* resulting base->current Mappings in *both* remapped component Regions are
-* UnitMaps, then a new CmpRegion should be created from the re-mapped
-* Regions.
-*/
-
-/* Local Variables: */
- AstCmpRegion *newb; /* New CmpRegion defined in base Frame */
- AstCmpRegion *newc; /* New CmpRegion defined in current Frame */
- AstFrame *frm; /* Current Frame */
- AstMapping *map; /* Base->current Mapping */
- AstMapping *result; /* Result pointer to return */
- AstRegion *csreg1; /* Copy of simplified first component Region */
- AstRegion *csreg2; /* Copy of simplified second component Region */
- AstRegion *nullreg; /* Null or infinfite Region */
- AstRegion *othereg; /* Non-Null and non-infinfite Region */
- AstRegion *reg1; /* First component Region */
- AstRegion *reg2; /* Second component Region */
- AstRegion *sreg1; /* Simplified first component Region */
- AstRegion *sreg2; /* Simplified second component Region */
- int neg1; /* Negated flag to use with first component */
- int neg1_old; /* Original Negated flag for first component */
- int neg2; /* Negated flag to use with second component */
- int neg2_old; /* Original Negated flag for second component */
- int oper; /* Boolean operator used to combine components */
- int overlap; /* Nature of overlap between components */
- int rep; /* Original error reporting status */
- int simpler; /* Has any simplification taken place? */
- int status_value; /* AST status value */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Invoke the parent Simplify method inherited from the Region class. This
- will simplify the encapsulated FrameSet and uncertainty Region. The
- returned pointer identifies a region within the current Frame of the
- FrameSet encapsulated by the parent Region structure. Note this by
- storing the pointer in the "newc" ("c" for "current") variable. */
- newc = (AstCmpRegion *) (*parent_simplify)( this_mapping, status );
-
-/* Note if any simplification took place. This is assumed to be the case
- if the pointer returned by the above call is different to the supplied
- pointer. */
- simpler = ( (AstMapping *) newc != this_mapping );
-
-/* Below we may create a new simplified region which identifies a region
- within the base Frame of the FrameSet encapsulated by the parent Region
- structure. Such a result will need to be mapped into the current Frame
- before being returned. The "newb" variable ("b" for "base") will be
- used to store a pointer to such a result. Initialise this variable to
- indicate that we do not yet have a base Frame result. */
- newb = NULL;
-
-/* Get the component Regions, how they should be combined, and the
- Negated values which should be used with them. The returned values
- take account of whether the supplied CmpRegion has itself been Negated
- or not. The returned Regions represent regions within the base Frame
- of the FrameSet encapsulated by the parent Region structure. */
- GetRegions( newc, ®1, ®2, &oper, &neg1, &neg2, status );
-
-/* Temporarily set their Negated attributes to the required values.*/
- neg1_old = astGetNegated( reg1 );
- neg2_old = astGetNegated( reg2 );
- astSetNegated( reg1, neg1 );
- astSetNegated( reg2, neg2 );
-
-/* Simplify each of the two components. */
- sreg1 = astSimplify( reg1 );
- sreg2 = astSimplify( reg2 );
-
-/* Note if any simplification took place. */
- simpler = simpler || ( sreg1 != reg1 || sreg2 != reg2 );
-
-/* If either component is null or infinite we can exclude it from the
- returned Region. */
- if( astIsANullRegion( sreg1 ) || astIsANullRegion( sreg2 ) ) {
-
-/* Get a pointer to the non-null Region. The following is still valid
- even if both regions are null or infinite. */
- if( astIsANullRegion( sreg1 ) ){
- nullreg = sreg1;
- othereg = sreg2;
- } else {
- nullreg = sreg2;
- othereg = sreg1;
- }
-
-/* If null.. */
- if( !astGetNegated( nullreg ) ){
- if( oper == AST__AND ) {
- newb = (AstCmpRegion *) astNullRegion( othereg,
- astGetUnc( othereg, 0 ), "", status );
-
- } else if( oper == AST__OR ) {
- newb = astCopy( othereg );
-
- } else {
- astError( AST__INTER, "astSimplify(%s): The %s refers to an "
- "unknown boolean operator with identifier %d (internal "
- "AST programming error).", status, astGetClass( newc ),
- astGetClass( newc ), oper );
- }
-
-/* If infinite.. */
- } else {
- if( oper == AST__AND ) {
- newb = astCopy( othereg );
-
- } else if( oper == AST__OR ) {
- newb = (AstCmpRegion *) astNullRegion( othereg,
- astGetUnc( othereg, 0 ), "negated=1", status );
-
- } else {
- astError( AST__INTER, "astSimplify(%s): The %s refers to an "
- "unknown boolean operator with identifier %d (internal "
- "AST programming error).", status, astGetClass( newc ),
- astGetClass( newc ), oper );
- }
- }
-
-/* Flag that we have done some simplication.*/
- simpler = 1;
-
-/* If neither component is null or infinite, see if it is possible to
- remove one or both of the components on the basis of the overlap
- between them. */
- } else {
- overlap = astOverlap( sreg1, sreg2 );
-
-/* If the components have no overlap, and they are combined using AND, then
- the CmpRegion is null. */
- if( ( overlap == 1 || overlap == 6 ) && oper == AST__AND ) {
- newb = (AstCmpRegion *) astNullRegion( sreg1, astGetUnc( sreg1, 0 ),
- "", status );
- simpler = 1;
-
-/* If one component is the negation of the other component, and they are
- combined using OR, then the CmpRegion is infinite. This is represented
- by a negated null region.*/
- } else if( overlap == 6 && oper == AST__OR ) {
- newb = (AstCmpRegion *) astNullRegion( sreg1, astGetUnc( sreg1, 0 ),
- "negated=1", status );
- simpler = 1;
-
-/* If the two components are identical... */
- } else if( overlap == 5 ) {
- simpler = 1;
-
-/* If combined with AND or OR, the CmpRegion can be replaced by the first
- (or second) component Region. */
- if( oper == AST__AND || oper == AST__OR ) {
- newb = astCopy( sreg1 );
- } else {
- astError( AST__INTER, "astSimplify(%s): The %s refers to an "
- "unknown boolean operator with identifier %d (internal "
- "AST programming error).", status, astGetClass( newc ),
- astGetClass( newc ), oper );
- }
-
-/* If the first component is entirely contained within the second
- component, and they are combined using AND or OR, then the CmpRegion
- can be replaced by the first or second component. */
- } else if( overlap == 2 && ( oper == AST__AND || oper == AST__OR ) ){
- newb = astCopy( ( oper == AST__AND ) ? sreg1 : sreg2 );
- simpler = 1;
-
-/* If the second component is entirely contained within the first
- component, and they are combined using AND or OR, then the CmpRegion
- can be replaced by the second or first component. */
- } else if( overlap == 3 && ( oper == AST__AND || oper == AST__OR ) ){
- newb = astCopy( ( oper == AST__AND ) ? sreg2 : sreg1 );
- simpler = 1;
-
-/* Otherwise, no further simplication is possible, so either create a new
- CmpRegion or leave the "newb" pointer NULL (which will cause "newc" to
- be used), depending on whether the components were simplified. */
- } else if( simpler ){
- csreg1 = astCopy( sreg1 );
- csreg2 = astCopy( sreg2 );
- newb = astCmpRegion( csreg1, csreg2, oper, "", status );
- csreg1 = astAnnul( csreg1 );
- csreg2 = astAnnul( csreg2 );
-
- }
- }
-
-/* Re-instate the original values for the Negated attributes of the two
- component Regions. Do this even if an error has occurred. */
- status_value = astStatus;
- astClearStatus;
- rep = astReporting( 0 );
- if( reg1 ) astSetNegated( reg1, neg1_old );
- if( reg2 ) astSetNegated( reg2, neg2_old );
- astReporting( rep );
- astSetStatus( status_value );
-
-/* If any simplification took place, decide whether to use the "newc" or
- "newb" pointer for the returned Mapping. If "newb" is non-NULL we use
- it, otherwise we use "newc". If "newb" is used we must first map the
- result Region from the base Frame of the FrameSet encapsulated
- by the parent Region structure, to the current Frame. */
- if( simpler ) {
- if( newb ){
- frm = astGetFrame( ((AstRegion *) newc)->frameset, AST__CURRENT );
- map = astGetMapping( ((AstRegion *) newc)->frameset, AST__BASE, AST__CURRENT );
- result = astMapRegion( newb, map, frm );
- frm = astAnnul( frm );
- map = astAnnul( map );
- newb = astAnnul( newb );
- } else {
- result = astClone( newc );
- }
-
-/* If no simplification took place, return a clone of the supplied pointer. */
- } else {
- result = astClone( this_mapping );
- }
-
-/* Free resources. */
- reg1 = astAnnul( reg1 );
- reg2 = astAnnul( reg2 );
- sreg1 = astAnnul( sreg1 );
- sreg2 = astAnnul( sreg2 );
- newc = astAnnul( newc );
-
-/* If an error occurred, annul the returned Mapping. */
- if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a CmpRegion to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* CmpRegion member function (over-rides the astTransform method inherited
-* from the Region class).
-
-* Description:
-* This function takes a CmpRegion and a set of points encapsulated in a
-* PointSet and transforms the points so as to apply the required Region.
-* This implies applying each of the CmpRegion's component Regions in turn,
-* either in series or in parallel.
-
-* Parameters:
-* this
-* Pointer to the CmpRegion.
-* in
-* Pointer to the PointSet associated with the input coordinate values.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of coordinates for the CmpRegion being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstCmpRegion *this; /* Pointer to the CmpRegion structure */
- AstPointSet *ps1; /* Pointer to PointSet for first component */
- AstPointSet *ps2; /* Pointer to PointSet for second component */
- AstPointSet *pset_tmp; /* Pointer to PointSet holding base Frame positions*/
- AstPointSet *result; /* Pointer to output PointSet */
- AstRegion *reg1; /* Pointer to first component Region */
- AstRegion *reg2; /* Pointer to second component Region */
- double **ptr1; /* Pointer to first component axis values */
- double **ptr2; /* Pointer to second component axis values */
- double **ptr_out; /* Pointer to output coordinate data */
- int coord; /* Zero-based index for coordinates */
- int good; /* Is the point inside the CmpRegion? */
- int ncoord_out; /* No. of coordinates per output point */
- int ncoord_tmp; /* No. of coordinates per base Frame point */
- int neg1; /* Negated value for first component Region */
- int neg1_old; /* Original Negated flag for first component */
- int neg2; /* Negated value for second component Region */
- int neg2_old; /* Original Negated flag for second component */
- int npoint; /* No. of points */
- int oper; /* Boolean operator to use */
- int point; /* Loop counter for points */
- int rep; /* Original error reporting status */
- int status_value; /* AST status value */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a Pointer to the CmpRegion structure */
- this = (AstCmpRegion *) this_mapping;
-
-/* Get the component Regions, how they should be combined, and the
- Negated values which should be used with them. The returned values
- take account of whether the supplied CmpRegion has itself been Negated
- or not. The returned Regions represent regions within the base Frame
- of the FrameSet encapsulated by the parent Region structure. */
- GetRegions( this, ®1, ®2, &oper, &neg1, &neg2, status );
-
-/* Temporarily set their Negated attributes to the required values.*/
- neg1_old = astGetNegated( reg1 );
- neg2_old = astGetNegated( reg2 );
- astSetNegated( reg1, neg1 );
- astSetNegated( reg2, neg2 );
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Region class. This function validates
- all arguments and generates an output PointSet if necessary, containing
- a copy of the input PointSet. */
- result = (*parent_transform)( this_mapping, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- calculations needed to generate the output coordinate values. */
-
-/* First use the encapsulated FrameSet in the parent Region structure to
- transform the supplied positions from the current Frame in the
- encapsulated FrameSet (the Frame represented by the CmpRegion), to the
- base Frame (the Frame in which the component Regions are defined). Note,
- the returned pointer may be a clone of the "in" pointer, and so we
- must be carefull not to modify the contents of the returned PointSet. */
- pset_tmp = astRegTransform( this, in, 0, NULL, NULL );
-
-/* Now transform this PointSet using each of the two component Regions in
- turn. */
- ps1 = astTransform( reg1, pset_tmp, 0, NULL );
- ps2 = astTransform( reg2, pset_tmp, 0, NULL );
-
-/* Determine the numbers of points and coordinates per point for these base
- Frame PointSets and obtain pointers for accessing the base Frame and output
- coordinate values. */
- npoint = astGetNpoint( pset_tmp );
- ncoord_tmp = astGetNcoord( pset_tmp );
- ptr1 = astGetPoints( ps1 );
- ptr2 = astGetPoints( ps2 );
- ncoord_out = astGetNcoord( result );
- ptr_out = astGetPoints( result );
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
- if ( astOK ) {
-
-/* First deal with ANDed Regions */
- if( oper == AST__AND ) {
- for ( point = 0; point < npoint; point++ ) {
- good = 0;
-
- for ( coord = 0; coord < ncoord_tmp; coord++ ) {
- if( ptr1[ coord ][ point ] != AST__BAD &&
- ptr2[ coord ][ point ] != AST__BAD ) {
- good = 1;
- break;
- }
- }
-
- if( !good ) {
- for ( coord = 0; coord < ncoord_out; coord++ ) {
- ptr_out[ coord ][ point ] = AST__BAD;
- }
- }
- }
-
-/* Now deal with ORed Regions */
- } else if( oper == AST__OR ) {
- for ( point = 0; point < npoint; point++ ) {
- good = 0;
-
- for ( coord = 0; coord < ncoord_tmp; coord++ ) {
- if( ptr1[ coord ][ point ] != AST__BAD ||
- ptr2[ coord ][ point ] != AST__BAD ) {
- good = 1;
- break;
- }
- }
-
- if( !good ) {
- for ( coord = 0; coord < ncoord_out; coord++ ) {
- ptr_out[ coord ][ point ] = AST__BAD;
- }
- }
- }
-
-/* Report error for any unknown operator. */
- } else if( astOK ) {
- astError( AST__INTER, "astTransform(%s): The %s refers to an unknown "
- "boolean operator with identifier %d (internal AST "
- "programming error).", status, astGetClass( this ),
- astGetClass( this ), oper );
- }
- }
-
-/* Re-instate the original values for the Negated attributes of the two
- component Regions. Do this even if an error has occurred. */
- status_value = astStatus;
- astClearStatus;
- rep = astReporting( 0 );
- if( reg1 ) astSetNegated( reg1, neg1_old );
- if( reg2 ) astSetNegated( reg2, neg2_old );
- astReporting( rep );
- astSetStatus( status_value );
-
-/* Free resources. */
- reg1 = astAnnul( reg1 );
- reg2 = astAnnul( reg2 );
- ps1 = astAnnul( ps1 );
- ps2 = astAnnul( ps2 );
- pset_tmp = astAnnul( pset_tmp );
-
-/* If an error occurred, clean up by deleting the output PointSet (if
- allocated by this function) and setting a NULL result pointer. */
- if ( !astOK ) {
- if ( !out ) result = astDelete( result );
- result = NULL;
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-static void XORCheck( AstCmpRegion *this, int *status ) {
-/*
-* Name:
-* XORCheck
-
-* Purpose:
-* Check if the supplied CmpRegion represents an XOR operation.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* void XORCheck( AstCmpRegion *this, int *status )
-
-* Class Membership:
-* CmpRegion method
-
-* Decription:
-* This function analyses the component Regions within the supplied
-* CmpRegion to see if the CmpRegion is equivalent to an XOR operation
-* on two other Regions. If it is, teh Regions that are XORed are
-* stored in the supplied CmpRegion.
-
-* Parameters:
-* this
-* Pointer to the CmpRegion.
-
-*/
-
-/* Local Variables: */
- AstCmpRegion *cmpreg1;
- AstCmpRegion *cmpreg2;
- int xor;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* If the CmpRegion is already known to be an XOR operation, return
- without action. */
- if( this->xor1 ) return;
-
-/* To be equivalent to an XOR operation, the supplied CmpRegion must be an
- OR operation and each component Region must be a CmpRegion. */
- if( this->oper == AST__OR && astIsACmpRegion( this->region1 )
- && astIsACmpRegion( this->region2 ) ) {
- cmpreg1 = (AstCmpRegion *) this->region1;
- cmpreg2 = (AstCmpRegion *) this->region2;
-
-/* Each component CmpRegion must be an AND operation. */
- if( cmpreg1->oper == AST__AND && cmpreg2->oper == AST__AND ) {
-
-/* Temporarily negate the first component of the first CmpRegion. */
- astNegate( cmpreg1->region1 );
-
-/* Initially, assume the supplied CmpRegion is not equivalent to an XOR
- operation. */
- xor = 0;
-
-/* This negated region must be equal to one of the two component Regions
- in the second component CmpRegion. Check the first. */
- if( astEqual( cmpreg1->region1, cmpreg2->region1 ) ) {
-
-/* We now check that the other two Regions are equal (after negating the
- first). If so, set "xor" non-zero. */
- astNegate( cmpreg1->region2 );
- if( astEqual( cmpreg1->region2, cmpreg2->region2 ) ) xor = 1;
- astNegate( cmpreg1->region2 );
-
-/* Do equiovalent checks the other way round. */
- } else if( astEqual( cmpreg1->region1, cmpreg2->region2 ) ) {
- astNegate( cmpreg1->region2 );
- if( astEqual( cmpreg1->region2, cmpreg2->region1 ) ) xor = 1;
- astNegate( cmpreg1->region2 );
- }
-
-/* Re-instate the original state of the Negated attribute in the first
- component of the first CmpRegion. */
- astNegate( cmpreg1->region1 );
-
-/* If the supplied CmpRegion is equivalent to an XOR operation, store
- copies of the components in the supplied CmpRegion. */
- if( xor ) {
- this->xor1 = astCopy( cmpreg1->region1 );
- this->xor2 = astCopy( cmpreg1->region2 );
-
-/* We need to negate one of these two Region (it doesn't matter which),
- and we choose to negate which ever of them is already negated (so that
- it becomes un-negated). */
- if( astGetNegated( this->xor1 ) ) {
- astNegate( this->xor1 );
- } else {
- astNegate( this->xor2 );
- }
- }
- }
- }
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for CmpRegion objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for CmpRegion objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - This constructor makes a deep copy, including a copy of the component
-* Regions within the CmpRegion.
-*/
-
-/* Local Variables: */
- AstCmpRegion *in; /* Pointer to input CmpRegion */
- AstCmpRegion *out; /* Pointer to output CmpRegion */
- int i; /* Loop count */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output CmpRegions. */
- in = (AstCmpRegion *) objin;
- out = (AstCmpRegion *) objout;
-
-/* For safety, start by clearing any references to the input component
- Regions from the output CmpRegion. */
- out->region1 = NULL;
- out->region2 = NULL;
- out->xor1 = NULL;
- out->xor2 = NULL;
-
- for( i = 0; i < 2; i++ ) {
- out->rvals[ i ] = NULL;
- out->offs[ i ] = NULL;
- out->nbreak[ i ] = 0;
- out->d0[ i ] = AST__BAD;
- }
-
-/* Make copies of these Regions and store pointers to them in the output
- CmpRegion structure. */
- out->region1 = astCopy( in->region1 );
- out->region2 = astCopy( in->region2 );
- if( in->xor1 ) out->xor1 = astCopy( in->xor1 );
- if( in->xor2 ) out->xor2 = astCopy( in->xor2 );
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for CmpRegion objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for CmpRegion objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstCmpRegion *this; /* Pointer to CmpRegion */
- int i;
-
-/* Obtain a pointer to the CmpRegion structure. */
- this = (AstCmpRegion *) obj;
-
-/* Free arrays holding cached information. */
- for( i = 0; i < 2; i++ ) {
- this->rvals[ i ] = astFree( this->rvals[ i ] );
- this->offs[ i ] = astFree( this->offs[ i ] );
- }
-
-/* Annul the pointers to the component Regions. */
- this->region1 = astAnnul( this->region1 );
- this->region2 = astAnnul( this->region2 );
- if( this->xor1 ) this->xor1 = astAnnul( this->xor1 );
- if( this->xor2 ) this->xor2 = astAnnul( this->xor2 );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for CmpRegion objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the CmpRegion class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the CmpRegion whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstRegion *reg1; /* First Region to include in dump */
- AstRegion *reg2; /* Second Region to include in dump */
- AstCmpRegion *this; /* Pointer to the CmpRegion structure */
- const char *comment; /* Pointer to comment string */
- int ival; /* Integer value */
- int oper; /* The operator to include in the dump */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpRegion structure. */
- this = (AstCmpRegion *) this_object;
-
-/* Check if this CmpRegion has an equivalent XOR representation. Is so,
- store details of the XOR representation in the CmpRegion. */
- XORCheck( this, status );
-
-/* Choose the operator and component regions to include in the dump. If
- the CmpRegion originally used an XOR operator, then save the XORed
- regions. Otherwise, store the real component Regions. */
- if( this->xor1 ) {
- oper = AST__XOR;
- reg1 = this->xor1;
- reg2 = this->xor2;
- } else {
- oper = this->oper;
- reg1 = this->region1;
- reg2 = this->region2;
- }
-
-/* Write out values representing the instance variables for the CmpRegion
- class. Accompany these with appropriate comment strings, possibly
- depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* Oper */
-/* ------- */
- ival = oper;
- if( ival == AST__AND ) {
- comment = "Regions combined using Boolean AND";
- } else if( ival == AST__OR ) {
- comment = "Regions combined using Boolean OR";
- } else if( ival == AST__XOR ) {
- comment = "Regions combined using Boolean XOR";
- } else {
- comment = "Regions combined using unknown operator";
- }
- astWriteInt( channel, "Operator", 1, 0, ival, comment );
-
-/* First Region. */
-/* -------------- */
- astWriteObject( channel, "RegionA", 1, 1, reg1,
- "First component Region" );
-
-/* Second Region. */
-/* --------------- */
- astWriteObject( channel, "RegionB", 1, 1, reg2,
- "Second component Region" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsACmpRegion and astCheckCmpRegion functions using the
- macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(CmpRegion,Region)
-astMAKE_CHECK(CmpRegion)
-
-AstCmpRegion *astCmpRegion_( void *region1_void, void *region2_void, int oper,
- const char *options, int *status, ...) {
-/*
-*+
-* Name:
-* astCmpRegion
-
-* Purpose:
-* Create a CmpRegion.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* AstCmpRegion *astCmpRegion( AstRegion *region1, AstRegion *region2,
-* int oper, const char *options, ..., int *status )
-
-* Class Membership:
-* CmpRegion constructor.
-
-* Description:
-* This function creates a new CmpRegion and optionally initialises its
-* attributes.
-
-* Parameters:
-* region1
-* Pointer to the first Region.
-* region2
-* Pointer to the second Region.
-* oper
-* The boolean operator with which to combine the two Regions. Either
-* AST__AND or AST__OR.
-* options
-* Pointer to a null terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new CmpRegion. The syntax used is the same as for the
-* astSet method and may include "printf" format specifiers identified
-* by "%" symbols in the normal way.
-* status
-* Pointer to the inherited status variable.
-* ...
-* If the "options" string contains "%" format specifiers, then an
-* optional list of arguments may follow it in order to supply values to
-* be substituted for these specifiers. The rules for supplying these
-* are identical to those for the astSet method (and for the C "printf"
-* function).
-
-* Returned Value:
-* A pointer to the new CmpRegion.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-
-* Implementation Notes:
-* - This function implements the basic CmpRegion constructor which is
-* available via the protected interface to the CmpRegion class. A
-* public interface is provided by the astCmpRegionId_ function.
-* - Because this function has a variable argument list, it is
-* invoked by a macro that evaluates to a function pointer (not a
-* function invocation) and no checking or casting of arguments is
-* performed before the function is invoked. Because of this, the
-* "region1" and "region2" parameters are of type (void *) and are
-* converted and validated within the function itself.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstCmpRegion *new; /* Pointer to new CmpRegion */
- AstRegion *region1; /* Pointer to first Region structure */
- AstRegion *region2; /* Pointer to second Region structure */
- va_list args; /* Variable argument list */
-
-/* Initialise. */
- new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return new;
-
-/* Obtain and validate pointers to the Region structures provided. */
- region1 = astCheckRegion( region1_void );
- region2 = astCheckRegion( region2_void );
- if ( astOK ) {
-
-/* Initialise the CmpRegion, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitCmpRegion( NULL, sizeof( AstCmpRegion ), !class_init,
- &class_vtab, "CmpRegion", region1, region2,
- oper );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new CmpRegion's
- attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return a pointer to the new CmpRegion. */
- return new;
-}
-
-AstCmpRegion *astCmpRegionId_( void *region1_void, void *region2_void,
- int oper, const char *options, ... ) {
-/*
-*++
-* Name:
-c astCmpRegion
-f AST_CMPREGION
-
-* Purpose:
-* Create a CmpRegion.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "cmpregion.h"
-c AstCmpRegion *astCmpRegion( AstRegion *region1, AstRegion *region2,
-c int oper, const char *options, ... )
-f RESULT = AST_CMPREGION( REGION1, REGION2, OPER, OPTIONS, STATUS )
-
-* Class Membership:
-* CmpRegion constructor.
-
-* Description:
-* This function creates a new CmpRegion and optionally initialises
-* its attributes.
-*
-* A CmpRegion is a Region which allows two component
-* Regions (of any class) to be combined to form a more complex
-* Region. This combination may be performed a boolean AND, OR
-* or XOR (exclusive OR) operator. If the AND operator is
-* used, then a position is inside the CmpRegion only if it is
-* inside both of its two component Regions. If the OR operator is
-* used, then a position is inside the CmpRegion if it is inside
-* either (or both) of its two component Regions. If the XOR operator
-* is used, then a position is inside the CmpRegion if it is inside
-* one but not both of its two component Regions. Other operators can
-* be formed by negating one or both component Regions before using
-* them to construct a new CmpRegion.
-*
-* The two component Region need not refer to the same coordinate
-* Frame, but it must be possible for the
-c astConvert
-f AST_CONVERT
-* function to determine a Mapping between them (an error will be
-* reported otherwise when the CmpRegion is created). For instance,
-* a CmpRegion may combine a Region defined within an ICRS SkyFrame
-* with a Region defined within a Galactic SkyFrame. This is
-* acceptable because the SkyFrame class knows how to convert between
-* these two systems, and consequently the
-c astConvert
-f AST_CONVERT
-* function will also be able to convert between them. In such cases,
-* the second component Region will be mapped into the coordinate Frame
-* of the first component Region, and the Frame represented by the
-* CmpRegion as a whole will be the Frame of the first component Region.
-*
-* Since a CmpRegion is itself a Region, it can be used as a
-* component in forming further CmpRegions. Regions of arbitrary
-* complexity may be built from simple individual Regions in this
-* way.
-
-* Parameters:
-c region1
-f REGION1 = INTEGER (Given)
-* Pointer to the first component Region.
-c region2
-f REGION2 = INTEGER (Given)
-* Pointer to the second component Region. This Region will be
-* transformed into the coordinate Frame of the first region before
-* use. An error will be reported if this is not possible.
-c oper
-f OPER = INTEGER (Given)
-* The boolean operator with which to combine the two Regions. This
-* must be one of the symbolic constants AST__AND, AST__OR or AST__XOR.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new CmpRegion. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new CmpRegion. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astCmpRegion()
-f AST_CMPREGION = INTEGER
-* A pointer to the new CmpRegion.
-
-* Notes:
-* - If one of the supplied Regions has an associated uncertainty,
-* that uncertainty will also be used for the returned CmpRegion.
-* If both supplied Regions have associated uncertainties, the
-* uncertainty associated with the first Region will be used for the
-* returned CmpRegion.
-* - Deep copies are taken of the supplied Regions. This means that
-* any subsequent changes made to the component Regions using the
-* supplied pointers will have no effect on the CmpRegion.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-
-* Implementation Notes:
-* - This function implements the external (public) interface to
-* the astCmpRegion constructor function. It returns an ID value
-* (instead of a true C pointer) to external users, and must be
-* provided because astCmpRegion_ has a variable argument list which
-* cannot be encapsulated in a macro (where this conversion would
-* otherwise occur).
-* - Because no checking or casting of arguments is performed
-* before the function is invoked, the "region1" and "region2" parameters
-* are of type (void *) and are converted from an ID value to a
-* pointer and validated within the function itself.
-* - The variable argument list also prevents this function from
-* invoking astCmpRegion_ directly, so it must be a re-implementation
-* of it in all respects, except for the conversions between IDs
-* and pointers on input/output of Objects.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstCmpRegion *new; /* Pointer to new CmpRegion */
- AstRegion *region1; /* Pointer to first Region structure */
- AstRegion *region2; /* Pointer to second Region structure */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialise. */
- new = NULL;
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return new;
-
-/* Obtain the Region pointers from the ID's supplied and validate the
- pointers to ensure they identify valid Regions. */
- region1 = astVerifyRegion( astMakePointer( region1_void ) );
- region2 = astVerifyRegion( astMakePointer( region2_void ) );
- if ( astOK ) {
-
-/* Initialise the CmpRegion, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitCmpRegion( NULL, sizeof( AstCmpRegion ), !class_init,
- &class_vtab, "CmpRegion", region1, region2,
- oper );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new CmpRegion's
- attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return an ID value for the new CmpRegion. */
- return astMakeId( new );
-}
-
-AstCmpRegion *astInitCmpRegion_( void *mem, size_t size, int init,
- AstCmpRegionVtab *vtab, const char *name,
- AstRegion *region1, AstRegion *region2,
- int oper, int *status ) {
-/*
-*+
-* Name:
-* astInitCmpRegion
-
-* Purpose:
-* Initialise a CmpRegion.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* AstCmpRegion *astInitCmpRegion_( void *mem, size_t size, int init,
-* AstCmpRegionVtab *vtab, const char *name,
-* AstRegion *region1, AstRegion *region2,
-* int oper )
-
-* Class Membership:
-* CmpRegion initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new CmpRegion object. It allocates memory (if necessary) to
-* accommodate the CmpRegion plus any additional data associated with the
-* derived class. It then initialises a CmpRegion structure at the start
-* of this memory. If the "init" flag is set, it also initialises the
-* contents of a virtual function table for a CmpRegion at the start of
-* the memory passed via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the CmpRegion is to be initialised.
-* This must be of sufficient size to accommodate the CmpRegion data
-* (sizeof(CmpRegion)) plus any data used by the derived class. If a
-* value of NULL is given, this function will allocate the memory itself
-* using the "size" parameter to determine its size.
-* size
-* The amount of memory used by the CmpRegion (plus derived class
-* data). This will be used to allocate memory if a value of NULL is
-* given for the "mem" parameter. This value is also stored in the
-* CmpRegion structure, so a valid value must be supplied even if not
-* required for allocating memory.
-* init
-* A logical flag indicating if the CmpRegion's virtual function table
-* is to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new CmpRegion.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the Object
-* astClass function).
-* region1
-* Pointer to the first Region.
-* region2
-* Pointer to the second Region.
-* oper
-* The boolean operator to use. Must be one of AST__AND, AST__OR or
-* AST__XOR.
-
-* Returned Value:
-* A pointer to the new CmpRegion.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstCmpRegion *new; /* Pointer to new CmpRegion */
- AstFrame *frm; /* Frame encapsulated by first Region */
- AstFrameSet *fs; /* FrameSet connecting supplied Regions */
- AstMapping *map; /* Mapping between two supplied Regions */
- AstMapping *smap; /* Simplified Mapping between two supplied Regions */
- AstRegion *new_reg1; /* Replacement for first region */
- AstRegion *new_reg2; /* Replacement for second region */
- AstRegion *reg1; /* First Region to store in the CmpRegion */
- AstRegion *reg2; /* Second Region to store in the CmpRegion */
- AstRegion *xor1; /* Copy of first supplied Region or NULL */
- AstRegion *xor2; /* Copy of second supplied Region or NULL */
- int i; /* Loop count */
- int used_oper; /* The boolean operation actually used */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitCmpRegionVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Check the supplied oper value. */
- if( oper != AST__AND && oper != AST__OR && oper != AST__XOR && astOK ) {
- astError( AST__INTRD, "astInitCmpRegion(%s): Illegal "
- "boolean operator value (%d) supplied.", status, name, oper );
- }
-
-/* Take copies of the supplied Regions. */
- reg1 = astCopy( region1 );
- reg2 = astCopy( region2 );
-
-/* Get the Mapping from the second to the first Region. */
- fs = astConvert( reg2, reg1, "" );
-
-/* Report an error if not possible. */
- if( fs == NULL ) {
- frm = NULL;
- if( astOK ) astError( AST__INTRD, "astInitCmpRegion(%s): No Mapping can "
- "be found between the two supplied Regions.", status, name );
-
-/* Otherwise, map the second Region into the Frame of the first (unless
- they are already in the same Frame). This results in both component
- Frames having the same current Frame. This current Frame is used as the
- encapsulated Frame within the parent Region structure. */
- } else {
- frm = astGetFrame( fs, AST__CURRENT );
- map = astGetMapping( fs, AST__BASE, AST__CURRENT );
- smap = astSimplify( map );
- if( !astIsAUnitMap( smap ) ) {
- new_reg2 = astMapRegion( reg2, smap, frm );
- (void) astAnnul( reg2 );
- reg2 = new_reg2;
- }
- smap = astAnnul( smap );
- map = astAnnul( map );
- fs = astAnnul( fs );
- }
-
-/* The CmpRegion class does not implement XOR directly (as it does for
- AND and OR). Instead, when requested to create an XOR CmpRegion, it
- creates a CmpRegion that uses AND and OR to simulate XOR. The top
- level XOR CmpRegion actually uses AST__OR and the two component
- regions within it are CmpRegions formed by combing the two supplied
- Regions (one being negated first) using AND. Create the required
- component Regions. */
- if( oper == AST__XOR ) {
- astNegate( reg1 );
- new_reg1 = (AstRegion *) astCmpRegion( reg1, reg2, AST__AND, " ",
- status );
- astNegate( reg1 );
-
- astNegate( reg2 );
- new_reg2 = (AstRegion *) astCmpRegion( reg1, reg2, AST__AND, " ",
- status );
- astNegate( reg2 );
-
- xor1 = reg1;
- xor2 = reg2;
-
- reg1 = new_reg1;
- reg2 = new_reg2;
-
- used_oper = AST__OR;
-
-/* For AND and OR, use the supplied operator. */
- } else {
- xor1 = NULL;
- xor2 = NULL;
- used_oper = oper;
- }
-
-/* Initialise a Region structure (the parent class) as the first component
- within the CmpRegion structure, allocating memory if necessary. A NULL
- PointSet is suppled as the two component Regions will perform the function
- of defining the Region shape. The base Frame of the FrameSet in the
- parent Region structure will be the same as the current Frames of the
- FrameSets in the two component Regions. */
- if ( astOK ) {
- new = (AstCmpRegion *) astInitRegion( mem, size, 0,
- (AstRegionVtab *) vtab, name,
- frm, NULL, NULL );
-
-/* Initialise the CmpRegion data. */
-/* --------------------------- */
-/* Store pointers to the component Regions. */
- new->region1 = astClone( reg1 );
- new->region2 = astClone( reg2 );
-
-/* Note the operator used to combine the somponent Regions. */
- new->oper = used_oper;
-
-/* If we are creating an XOR CmpRegion, save copies of the supplied
- Regions (i.e. the supplied Regions which are XORed). These will not
- be the same as "reg1" and "reg2" since each of those two regions will
- be CmpRegions that combine the supplied Regions using AST__AND. */
- if( oper == AST__XOR ) {
- new->xor1 = xor1;
- new->xor2 = xor2;
- } else {
- new->xor1 = NULL;
- new->xor2 = NULL;
- }
-
-/* Initialised cached values to show they have not yet been found. */
- for( i = 0; i < 2; i++ ) {
- new->rvals[ i ] = NULL;
- new->offs[ i ] = NULL;
- new->nbreak[ i ] = 0;
- new->d0[ i ] = AST__BAD;
- }
-
-/* If the base->current Mapping in the FrameSet within each component Region
- is a UnitMap, then the FrameSet does not need to be included in the
- Dump of the new CmpRegion. Set the RegionFS attribute of the component
- Region to zero to flag this. */
- map = astGetMapping( reg1->frameset, AST__BASE, AST__CURRENT );
- if( astIsAUnitMap( map ) ) astSetRegionFS( reg1, 0 );
- map = astAnnul( map );
-
- map = astGetMapping( reg2->frameset, AST__BASE, AST__CURRENT );
- if( astIsAUnitMap( map ) ) astSetRegionFS( reg2, 0 );
- map = astAnnul( map );
-
-/* Copy attribute values from the first component Region to the parent
- Region. */
- if( astTestMeshSize( new->region1 ) ) {
- astSetMeshSize( new, astGetMeshSize( new->region1 ) );
- }
- if( astTestClosed( new->region1 ) ) {
- astSetClosed( new, astGetClosed( new->region1 ) );
- }
-
-/* If an error occurred, clean up by annulling the Region pointers and
- deleting the new object. */
- if ( !astOK ) {
- new->region1 = astAnnul( new->region1 );
- new->region2 = astAnnul( new->region2 );
- new = astDelete( new );
- }
- }
-
-/* Free resources */
- reg1 = astAnnul( reg1 );
- reg2 = astAnnul( reg2 );
- if( frm ) frm = astAnnul( frm );
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstCmpRegion *astLoadCmpRegion_( void *mem, size_t size,
- AstCmpRegionVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadCmpRegion
-
-* Purpose:
-* Load a CmpRegion.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* AstCmpRegion *astLoadCmpRegion( void *mem, size_t size,
-* AstCmpRegionVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* CmpRegion loader.
-
-* Description:
-* This function is provided to load a new CmpRegion using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* CmpRegion structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a CmpRegion at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the CmpRegion is to be
-* loaded. This must be of sufficient size to accommodate the
-* CmpRegion data (sizeof(CmpRegion)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the CmpRegion (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the CmpRegion structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstCmpRegion) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new CmpRegion. If this is NULL, a pointer to
-* the (static) virtual function table for the CmpRegion class is
-* used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "CmpRegion" is used instead.
-
-* Returned Value:
-* A pointer to the new CmpRegion.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstCmpRegion *new; /* Pointer to the new CmpRegion */
- AstRegion *reg1; /* First Region read from dump */
- AstRegion *reg2; /* Second Region read from dump */
- AstFrame *f1; /* Base Frame in parent Region */
- AstRegion *creg; /* Pointer to component Region */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- int i; /* Loop count */
- int oper; /* The operator to include in the dump */
-
-/* Initialise. */
- new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this CmpRegion. In this case the
- CmpRegion belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstCmpRegion );
- vtab = &class_vtab;
- name = "CmpRegion";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitCmpRegionVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built CmpRegion. */
- new = astLoadRegion( mem, size, (AstRegionVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "CmpRegion" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* Operator */
-/* -------- */
- oper = astReadInt( channel, "operator", AST__AND );
-
-/* First Region. */
-/* -------------- */
- reg1 = astReadObject( channel, "regiona", NULL );
-
-/* Second Region. */
-/* --------------- */
- reg2 = astReadObject( channel, "regionb", NULL );
-
-/* Initialised cached values to show they have not yet been found. */
- for( i = 0; i < 2; i++ ) {
- new->rvals[ i ] = NULL;
- new->offs[ i ] = NULL;
- new->nbreak[ i ] = 0;
- new->d0[ i ] = AST__BAD;
- }
-
-/* The CmpRegion class does not implement XOR directly (as it does for
- AND and OR). Instead, when requested to create an XOR CmpRegion, it
- creates a CmpRegion that uses AND and OR to simulate XOR. The top
- level XOR CmpRegion actually uses AST__OR and the two component
- regions within it are CmpRegions formed by combing the two supplied
- Regions (one being negated first) using AND. Create the required
- component Regions. */
- if( oper == AST__XOR ) {
- astNegate( reg1 );
- new->region1 = (AstRegion *) astCmpRegion( reg1, reg2, AST__AND,
- " ", status );
- astNegate( reg1 );
-
- astNegate( reg2 );
- new->region2 = (AstRegion *) astCmpRegion( reg1, reg2, AST__AND,
- " ", status );
- astNegate( reg2 );
-
- new->xor1 = reg1;
- new->xor2 = reg2;
-
- new->oper = AST__OR;
-
-/* For AND and OR, use the supplied Regions and operator. */
- } else {
- new->region1 = reg1;
- new->region2 = reg2;
- new->xor1 = NULL;
- new->xor2 = NULL;
- new->oper = oper;
- }
-
-/* If either component Region has a dummy FrameSet rather than the correct
- FrameSet, the correct FrameSet will have copies of the base Frame of the
- new CmpRegion as both its current and base Frames, connected by a UnitMap
- (this is equivalent to a FrameSet containing a single Frame). However if
- the new CmpRegion being loaded has itself got a dummy FrameSet, then we do
- not do this since we do not yet know what the correct FrameSet is. In this
- case we wait until the parent Region invokes the astSetRegFS method on the
- new CmpRegion. */
- if( !astRegDummyFS( new ) ) {
- f1 = astGetFrame( ((AstRegion *) new)->frameset, AST__BASE );
- creg = new->region1;
- if( astRegDummyFS( creg ) ) astSetRegFS( creg, f1 );
- creg = new->region2;
- if( astRegDummyFS( creg ) ) astSetRegFS( creg, f1 );
- f1 = astAnnul( f1 );
- }
-
-/* If an error occurred, clean up by deleting the new CmpRegion. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new CmpRegion pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-int astCmpRegionList_( AstCmpRegion *this, int *nreg, AstRegion ***reg_list,
- int *status ) {
- if ( !astOK ) return AST__AND;
- return (**astMEMBER(this,CmpRegion,CmpRegionList))( this, nreg, reg_list,
- status );
-}
-
-
-
-
-
-
diff --git a/ast-5.3-1/cmpregion.h b/ast-5.3-1/cmpregion.h
deleted file mode 100644
index 7c782b3..0000000
--- a/ast-5.3-1/cmpregion.h
+++ /dev/null
@@ -1,250 +0,0 @@
-#if !defined( CMPREGION_INCLUDED ) /* Include this file only once */
-#define CMPREGION_INCLUDED
-/*
-*+
-* Name:
-* cmpregion.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the CmpRegion class.
-
-* Invocation:
-* #include "cmpregion.h"
-
-* Description:
-* This include file defines the interface to the CmpRegion class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The CmpRegion class implement a Region which represents a simple interval
-* on each axis of the encapsulated Frame
-
-* Inheritance:
-* The CmpRegion class inherits from the Region class.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 11-OCT-2004 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "region.h" /* Coordinate regions (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros. */
-/* ------- */
-/* Boolean operators */
-
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-#define AST__AND 1
-#define AST__OR 2
-#define AST__XOR 3
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* CmpRegion structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstCmpRegion {
-
-/* Attributes inherited from the parent class. */
- AstRegion region; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- AstRegion *region1; /* First component Region */
- AstRegion *region2; /* Second component Region */
- int oper; /* Boolean operator */
- double *rvals[ 2 ]; /* Used boundary length at each break */
- double *offs[ 2 ]; /* Jump at each break */
- int nbreak[ 2 ]; /* Number of breaks */
- double d0[ 2 ]; /* Total used boundary length */
- AstRegion *xor1; /* First XORed Region */
- AstRegion *xor2; /* Second XORed Region */
-
-} AstCmpRegion;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstCmpRegionVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstRegionVtab region_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- int (* CmpRegionList)( AstCmpRegion *, int *, AstRegion ***, int * );
-
-} AstCmpRegionVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstCmpRegionGlobals {
- AstCmpRegionVtab Class_Vtab;
- int Class_Init;
-} AstCmpRegionGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitCmpRegionGlobals_( AstCmpRegionGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(CmpRegion) /* Check class membership */
-astPROTO_ISA(CmpRegion) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstCmpRegion *astCmpRegion_( void *, void *, int, const char *, int *, ...);
-#else
-AstCmpRegion *astCmpRegionId_( void *, void *, int, const char *, ... )__attribute__((format(printf,4,5)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstCmpRegion *astInitCmpRegion_( void *, size_t, int, AstCmpRegionVtab *,
- const char *, AstRegion *, AstRegion *, int, int * );
-
-/* Vtab initialiser. */
-void astInitCmpRegionVtab_( AstCmpRegionVtab *, const char *, int * );
-
-/* Loader. */
-AstCmpRegion *astLoadCmpRegion_( void *, size_t, AstCmpRegionVtab *,
- const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS) /* Protected */
-int astCmpRegionList_( AstCmpRegion *, int *, AstRegion ***, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckCmpRegion(this) astINVOKE_CHECK(CmpRegion,this,0)
-#define astVerifyCmpRegion(this) astINVOKE_CHECK(CmpRegion,this,1)
-
-/* Test class membership. */
-#define astIsACmpRegion(this) astINVOKE_ISA(CmpRegion,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astCmpRegion astINVOKE(F,astCmpRegion_)
-#else
-#define astCmpRegion astINVOKE(F,astCmpRegionId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitCmpRegion(mem,size,init,vtab,name,reg1,reg2,oper) \
-astINVOKE(O,astInitCmpRegion_(mem,size,init,vtab,name,reg1,reg2,oper,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitCmpRegionVtab(vtab,name) astINVOKE(V,astInitCmpRegionVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadCmpRegion(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadCmpRegion_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckCmpRegion to validate CmpRegion pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-#define astCmpRegionList(this,nreg,reg_list) \
-astINVOKE(V,astCmpRegionList_(this,nreg,reg_list,STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/compile b/ast-5.3-1/compile
deleted file mode 100755
index 1b1d232..0000000
--- a/ast-5.3-1/compile
+++ /dev/null
@@ -1,142 +0,0 @@
-#! /bin/sh
-# Wrapper for compilers which do not understand `-c -o'.
-
-scriptversion=2005-05-14.22
-
-# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
-# Written by Tom Tromey <tromey at cygnus.com>.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# This file is maintained in Automake, please report
-# bugs to <bug-automake at gnu.org> or send patches to
-# <automake-patches at gnu.org>.
-
-case $1 in
- '')
- echo "$0: No command. Try \`$0 --help' for more information." 1>&2
- exit 1;
- ;;
- -h | --h*)
- cat <<\EOF
-Usage: compile [--help] [--version] PROGRAM [ARGS]
-
-Wrapper for compilers which do not understand `-c -o'.
-Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
-arguments, and rename the output as expected.
-
-If you are trying to build a whole package this is not the
-right script to run: please start by reading the file `INSTALL'.
-
-Report bugs to <bug-automake at gnu.org>.
-EOF
- exit $?
- ;;
- -v | --v*)
- echo "compile $scriptversion"
- exit $?
- ;;
-esac
-
-ofile=
-cfile=
-eat=
-
-for arg
-do
- if test -n "$eat"; then
- eat=
- else
- case $1 in
- -o)
- # configure might choose to run compile as `compile cc -o foo foo.c'.
- # So we strip `-o arg' only if arg is an object.
- eat=1
- case $2 in
- *.o | *.obj)
- ofile=$2
- ;;
- *)
- set x "$@" -o "$2"
- shift
- ;;
- esac
- ;;
- *.c)
- cfile=$1
- set x "$@" "$1"
- shift
- ;;
- *)
- set x "$@" "$1"
- shift
- ;;
- esac
- fi
- shift
-done
-
-if test -z "$ofile" || test -z "$cfile"; then
- # If no `-o' option was seen then we might have been invoked from a
- # pattern rule where we don't need one. That is ok -- this is a
- # normal compilation that the losing compiler can handle. If no
- # `.c' file was seen then we are probably linking. That is also
- # ok.
- exec "$@"
-fi
-
-# Name of file we expect compiler to create.
-cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
-
-# Create the lock directory.
-# Note: use `[/.-]' here to ensure that we don't use the same name
-# that we are using for the .o file. Also, base the name on the expected
-# object file name, since that is what matters with a parallel build.
-lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
-while true; do
- if mkdir "$lockdir" >/dev/null 2>&1; then
- break
- fi
- sleep 1
-done
-# FIXME: race condition here if user kills between mkdir and trap.
-trap "rmdir '$lockdir'; exit 1" 1 2 15
-
-# Run the compile.
-"$@"
-ret=$?
-
-if test -f "$cofile"; then
- mv "$cofile" "$ofile"
-elif test -f "${cofile}bj"; then
- mv "${cofile}bj" "$ofile"
-fi
-
-rmdir "$lockdir"
-exit $ret
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/ast-5.3-1/component.xml.in b/ast-5.3-1/component.xml.in
deleted file mode 100644
index 35f79c2..0000000
--- a/ast-5.3-1/component.xml.in
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE component SYSTEM "componentinfo.dtd">
-
-<component id="@PACKAGE@" support="S">
- <version>@PACKAGE_VERSION@</version>
- <path>libraries/ast</path>
- <description>WCS library</description>
- <abstract>
- <p>The AST library provides a comprehensive range of facilities for
- attaching world coordinate systems to astronomical data, for
- retrieving and interpreting that information in a variety of formats,
- including FITS-WCS, and for generating graphical output based on it.</p>
- <p>This library should be of interest to anyone writing
- astronomical applications which need to manipulate coordinate system
- data, especially celestial or spectral coordinate systems. AST
- is portable and environment-independent.</p>
- </abstract>
- <dependencies @STAR_DEPENDENCIES_ATTRIBUTES@>
- @STAR_DEPENDENCIES_CHILDREN@
- </dependencies>
- <developers>
- <person>
- <name>Rodney Warren-Smith</name>
- <uname>rfws</uname>
- </person>
- <person>
- <name>David Berry</name>
- <uname>dsb</uname>
- <email>dsb at ast.man.ac.uk</email>
- <role>owner</role>
- </person>
- <person>
- <name>Norman Gray</name>
- <uname>nxg</uname>
- <email>norman at astro.gla.ac.uk</email>
- </person>
- </developers>
- <documentation>@STAR_DOCUMENTATION@</documentation>
- <bugreports>@PACKAGE_BUGREPORT@</bugreports>
- <copyright>
- <year></year>
- <name>Council for the Central Laboratory of the Research Councils</name>
- </copyright>
-</component>
diff --git a/ast-5.3-1/config.guess b/ast-5.3-1/config.guess
deleted file mode 100755
index 21a7ad8..0000000
--- a/ast-5.3-1/config.guess
+++ /dev/null
@@ -1,1495 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
-
-timestamp='2005-05-15'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Originally written by Per Bothner <per at bothner.com>.
-# Please send patches to <config-patches at gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub. If it succeeds, it prints the system name on stdout, and
-# exits with 0. Otherwise, it exits with 1.
-#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches at gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit ;;
- --version | -v )
- echo "$version" ; exit ;;
- --help | --h* | -h )
- echo "$usage"; exit ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help" >&2
- exit 1 ;;
- * )
- break ;;
- esac
-done
-
-if test $# != 0; then
- echo "$me: too many arguments$help" >&2
- exit 1
-fi
-
-trap 'exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,) echo "int x;" > $dummy.c ;
- for c in cc gcc c89 c99 ; do
- if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
- CC_FOR_BUILD="$c"; break ;
- fi ;
- done ;
- if test x"$CC_FOR_BUILD" = x ; then
- CC_FOR_BUILD=no_compiler_found ;
- fi
- ;;
- ,,*) CC_FOR_BUILD=$CC ;;
- ,*,*) CC_FOR_BUILD=$HOST_CC ;;
-esac ;'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi at noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
- PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- *:NetBSD:*:*)
- # NetBSD (nbsd) targets should (where applicable) match one or
- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
- # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
- # switched to ELF, *-*-netbsd* would select the old
- # object file format. This provides both forward
- # compatibility and a consistent mechanism for selecting the
- # object file format.
- #
- # Note: NetBSD doesn't particularly care about the vendor
- # portion of the name. We always set it to "unknown".
- sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
- case "${UNAME_MACHINE_ARCH}" in
- armeb) machine=armeb-unknown ;;
- arm*) machine=arm-unknown ;;
- sh3el) machine=shl-unknown ;;
- sh3eb) machine=sh-unknown ;;
- *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
- esac
- # The Operating System including object format, if it has switched
- # to ELF recently, or will in the future.
- case "${UNAME_MACHINE_ARCH}" in
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
- eval $set_cc_for_build
- if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep __ELF__ >/dev/null
- then
- # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
- # Return netbsd for either. FIX?
- os=netbsd
- else
- os=netbsdelf
- fi
- ;;
- *)
- os=netbsd
- ;;
- esac
- # The OS release
- # Debian GNU/NetBSD machines have a different userland, and
- # thus, need a distinct triplet. However, they do not need
- # kernel version information, so it can be replaced with a
- # suitable tag, in the style of linux-gnu.
- case "${UNAME_VERSION}" in
- Debian*)
- release='-gnu'
- ;;
- *)
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- ;;
- esac
- # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
- # contains redundant information, the shorter form:
- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
- exit ;;
- amd64:OpenBSD:*:*)
- echo x86_64-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- amiga:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- cats:OpenBSD:*:*)
- echo arm-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- hp300:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- luna88k:OpenBSD:*:*)
- echo m88k-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- mac68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- macppc:OpenBSD:*:*)
- echo powerpc-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- mvme68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- mvme88k:OpenBSD:*:*)
- echo m88k-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- mvmeppc:OpenBSD:*:*)
- echo powerpc-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- sgi:OpenBSD:*:*)
- echo mips64-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- sun3:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- *:OpenBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- *:ekkoBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
- exit ;;
- macppc:MirBSD:*:*)
- echo powerppc-unknown-mirbsd${UNAME_RELEASE}
- exit ;;
- *:MirBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
- exit ;;
- alpha:OSF1:*:*)
- case $UNAME_RELEASE in
- *4.0)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
- ;;
- *5.*)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
- ;;
- esac
- # According to Compaq, /usr/sbin/psrinfo has been available on
- # OSF/1 and Tru64 systems produced since 1995. I hope that
- # covers most systems running today. This code pipes the CPU
- # types through head -n 1, so we only detect the type of CPU 0.
- ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
- case "$ALPHA_CPU_TYPE" in
- "EV4 (21064)")
- UNAME_MACHINE="alpha" ;;
- "EV4.5 (21064)")
- UNAME_MACHINE="alpha" ;;
- "LCA4 (21066/21068)")
- UNAME_MACHINE="alpha" ;;
- "EV5 (21164)")
- UNAME_MACHINE="alphaev5" ;;
- "EV5.6 (21164A)")
- UNAME_MACHINE="alphaev56" ;;
- "EV5.6 (21164PC)")
- UNAME_MACHINE="alphapca56" ;;
- "EV5.7 (21164PC)")
- UNAME_MACHINE="alphapca57" ;;
- "EV6 (21264)")
- UNAME_MACHINE="alphaev6" ;;
- "EV6.7 (21264A)")
- UNAME_MACHINE="alphaev67" ;;
- "EV6.8CB (21264C)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.8AL (21264B)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.8CX (21264D)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.9A (21264/EV69A)")
- UNAME_MACHINE="alphaev69" ;;
- "EV7 (21364)")
- UNAME_MACHINE="alphaev7" ;;
- "EV7.9 (21364A)")
- UNAME_MACHINE="alphaev79" ;;
- esac
- # A Pn.n version is a patched version.
- # A Vn.n version is a released version.
- # A Tn.n version is a released field test version.
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- exit ;;
- Alpha\ *:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # Should we change UNAME_MACHINE based on the output of uname instead
- # of the specific Alpha model?
- echo alpha-pc-interix
- exit ;;
- 21064:Windows_NT:50:3)
- echo alpha-dec-winnt3.5
- exit ;;
- Amiga*:UNIX_System_V:4.0:*)
- echo m68k-unknown-sysv4
- exit ;;
- *:[Aa]miga[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-amigaos
- exit ;;
- *:[Mm]orph[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-morphos
- exit ;;
- *:OS/390:*:*)
- echo i370-ibm-openedition
- exit ;;
- *:z/VM:*:*)
- echo s390-ibm-zvmoe
- exit ;;
- *:OS400:*:*)
- echo powerpc-ibm-os400
- exit ;;
- arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix${UNAME_RELEASE}
- exit ;;
- arm:riscos:*:*|arm:RISCOS:*:*)
- echo arm-unknown-riscos
- exit ;;
- SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- echo hppa1.1-hitachi-hiuxmpp
- exit ;;
- Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
- # akee at wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "`(/bin/universe) 2>/dev/null`" = att ; then
- echo pyramid-pyramid-sysv3
- else
- echo pyramid-pyramid-bsd
- fi
- exit ;;
- NILE*:*:*:dcosx)
- echo pyramid-pyramid-svr4
- exit ;;
- DRS?6000:unix:4.0:6*)
- echo sparc-icl-nx6
- exit ;;
- DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
- case `/usr/bin/uname -p` in
- sparc) echo sparc-icl-nx7; exit ;;
- esac ;;
- sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- i86pc:SunOS:5.*:*)
- echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:6*:*)
- # According to config.sub, this is the proper way to canonicalize
- # SunOS6. Hard to guess exactly what SunOS6 will be like, but
- # it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:*:*)
- case "`/usr/bin/arch -k`" in
- Series*|S4*)
- UNAME_RELEASE=`uname -v`
- ;;
- esac
- # Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
- exit ;;
- sun3*:SunOS:*:*)
- echo m68k-sun-sunos${UNAME_RELEASE}
- exit ;;
- sun*:*:4.2BSD:*)
- UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
- test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
- case "`/bin/arch`" in
- sun3)
- echo m68k-sun-sunos${UNAME_RELEASE}
- ;;
- sun4)
- echo sparc-sun-sunos${UNAME_RELEASE}
- ;;
- esac
- exit ;;
- aushp:SunOS:*:*)
- echo sparc-auspex-sunos${UNAME_RELEASE}
- exit ;;
- # The situation for MiNT is a little confusing. The machine name
- # can be virtually everything (everything which is not
- # "atarist" or "atariste" at least should have a processor
- # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
- # to the lowercase version "mint" (or "freemint"). Finally
- # the system name "TOS" denotes a system which is actually not
- # MiNT. But MiNT is downward compatible to TOS, so this should
- # be no problem.
- atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint${UNAME_RELEASE}
- exit ;;
- hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint${UNAME_RELEASE}
- exit ;;
- *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint${UNAME_RELEASE}
- exit ;;
- m68k:machten:*:*)
- echo m68k-apple-machten${UNAME_RELEASE}
- exit ;;
- powerpc:machten:*:*)
- echo powerpc-apple-machten${UNAME_RELEASE}
- exit ;;
- RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
- exit ;;
- RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix${UNAME_RELEASE}
- exit ;;
- VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix${UNAME_RELEASE}
- exit ;;
- 2020:CLIX:*:* | 2430:CLIX:*:*)
- echo clipper-intergraph-clix${UNAME_RELEASE}
- exit ;;
- mips:*:*:UMIPS | mips:*:*:RISCos)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
- #if defined (host_mips) && defined (MIPSEB)
- #if defined (SYSTYPE_SYSV)
- printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_SVR4)
- printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
- printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
- #endif
- #endif
- exit (-1);
- }
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.c &&
- dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
- SYSTEM_NAME=`$dummy $dummyarg` &&
- { echo "$SYSTEM_NAME"; exit; }
- echo mips-mips-riscos${UNAME_RELEASE}
- exit ;;
- Motorola:PowerMAX_OS:*:*)
- echo powerpc-motorola-powermax
- exit ;;
- Motorola:*:4.3:PL8-*)
- echo powerpc-harris-powermax
- exit ;;
- Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
- echo powerpc-harris-powermax
- exit ;;
- Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
- exit ;;
- m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
- exit ;;
- m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
- exit ;;
- m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
- exit ;;
- AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
- then
- if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
- [ ${TARGET_BINARY_INTERFACE}x = x ]
- then
- echo m88k-dg-dgux${UNAME_RELEASE}
- else
- echo m88k-dg-dguxbcs${UNAME_RELEASE}
- fi
- else
- echo i586-dg-dgux${UNAME_RELEASE}
- fi
- exit ;;
- M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit ;;
- M88*:*:R3*:*)
- # Delta 88k system running SVR3
- echo m88k-motorola-sysv3
- exit ;;
- XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
- exit ;;
- Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
- exit ;;
- *:IRIX*:*:*)
- echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- exit ;;
- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
- i*86:AIX:*:*)
- echo i386-ibm-aix
- exit ;;
- ia64:AIX:*:*)
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
- exit ;;
- *:AIX:2:3)
- if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <sys/systemcfg.h>
-
- main()
- {
- if (!__power_pc())
- exit(1);
- puts("powerpc-ibm-aix3.2.5");
- exit(0);
- }
-EOF
- if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
- then
- echo "$SYSTEM_NAME"
- else
- echo rs6000-ibm-aix3.2.5
- fi
- elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
- else
- echo rs6000-ibm-aix3.2
- fi
- exit ;;
- *:AIX:*:[45])
- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
- if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
- IBM_ARCH=rs6000
- else
- IBM_ARCH=powerpc
- fi
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${IBM_ARCH}-ibm-aix${IBM_REV}
- exit ;;
- *:AIX:*:*)
- echo rs6000-ibm-aix
- exit ;;
- ibmrt:4.4BSD:*|romp-ibm:BSD:*)
- echo romp-ibm-bsd4.4
- exit ;;
- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
- echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
- exit ;; # report: romp-ibm BSD 4.3
- *:BOSX:*:*)
- echo rs6000-bull-bosx
- exit ;;
- DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
- exit ;;
- 9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
- exit ;;
- hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
- exit ;;
- 9000/[34678]??:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- case "${UNAME_MACHINE}" in
- 9000/31? ) HP_ARCH=m68000 ;;
- 9000/[34]?? ) HP_ARCH=m68k ;;
- 9000/[678][0-9][0-9])
- if [ -x /usr/bin/getconf ]; then
- sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
- case "${sc_cpu_version}" in
- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
- 532) # CPU_PA_RISC2_0
- case "${sc_kernel_bits}" in
- 32) HP_ARCH="hppa2.0n" ;;
- 64) HP_ARCH="hppa2.0w" ;;
- '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
- esac ;;
- esac
- fi
- if [ "${HP_ARCH}" = "" ]; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-
- #define _HPUX_SOURCE
- #include <stdlib.h>
- #include <unistd.h>
-
- int main ()
- {
- #if defined(_SC_KERNEL_BITS)
- long bits = sysconf(_SC_KERNEL_BITS);
- #endif
- long cpu = sysconf (_SC_CPU_VERSION);
-
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
- case CPU_PA_RISC2_0:
- #if defined(_SC_KERNEL_BITS)
- switch (bits)
- {
- case 64: puts ("hppa2.0w"); break;
- case 32: puts ("hppa2.0n"); break;
- default: puts ("hppa2.0"); break;
- } break;
- #else /* !defined(_SC_KERNEL_BITS) */
- puts ("hppa2.0"); break;
- #endif
- default: puts ("hppa1.0"); break;
- }
- exit (0);
- }
-EOF
- (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
- test -z "$HP_ARCH" && HP_ARCH=hppa
- fi ;;
- esac
- if [ ${HP_ARCH} = "hppa2.0w" ]
- then
- # avoid double evaluation of $set_cc_for_build
- test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
-
- # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
- # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
- # generating 64-bit code. GNU and HP use different nomenclature:
- #
- # $ CC_FOR_BUILD=cc ./config.guess
- # => hppa2.0w-hp-hpux11.23
- # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
- # => hppa64-hp-hpux11.23
-
- if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
- grep __LP64__ >/dev/null
- then
- HP_ARCH="hppa2.0w"
- else
- HP_ARCH="hppa64"
- fi
- fi
- echo ${HP_ARCH}-hp-hpux${HPUX_REV}
- exit ;;
- ia64:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- echo ia64-hp-hpux${HPUX_REV}
- exit ;;
- 3050*:HI-UX:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <unistd.h>
- int
- main ()
- {
- long cpu = sysconf (_SC_CPU_VERSION);
- /* The order matters, because CPU_IS_HP_MC68K erroneously returns
- true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
- results, however. */
- if (CPU_IS_PA_RISC (cpu))
- {
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
- default: puts ("hppa-hitachi-hiuxwe2"); break;
- }
- }
- else if (CPU_IS_HP_MC68K (cpu))
- puts ("m68k-hitachi-hiuxwe2");
- else puts ("unknown-hitachi-hiuxwe2");
- exit (0);
- }
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
- { echo "$SYSTEM_NAME"; exit; }
- echo unknown-hitachi-hiuxwe2
- exit ;;
- 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
- echo hppa1.1-hp-bsd
- exit ;;
- 9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
- exit ;;
- *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
- echo hppa1.0-hp-mpeix
- exit ;;
- hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
- echo hppa1.1-hp-osf
- exit ;;
- hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
- exit ;;
- i*86:OSF1:*:*)
- if [ -x /usr/sbin/sysversion ] ; then
- echo ${UNAME_MACHINE}-unknown-osf1mk
- else
- echo ${UNAME_MACHINE}-unknown-osf1
- fi
- exit ;;
- parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
- exit ;;
- C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
- exit ;;
- C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit ;;
- C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
- exit ;;
- C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
- exit ;;
- C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
- exit ;;
- CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*[A-Z]90:*:*:*)
- echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
- | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
- -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*TS:*:*:*)
- echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*T3E:*:*:*)
- echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*SV1:*:*:*)
- echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- *:UNICOS/mp:*:*)
- echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
- FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
- 5000:UNIX_System_V:4.*:*)
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
- i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
- exit ;;
- sparc*:BSD/OS:*:*)
- echo sparc-unknown-bsdi${UNAME_RELEASE}
- exit ;;
- *:BSD/OS:*:*)
- echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
- exit ;;
- *:FreeBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit ;;
- i*:CYGWIN*:*)
- echo ${UNAME_MACHINE}-pc-cygwin
- exit ;;
- i*:MINGW*:* | i*:windows32*:*)
- echo ${UNAME_MACHINE}-pc-mingw32
- exit ;;
- i*:PW*:*)
- echo ${UNAME_MACHINE}-pc-pw32
- exit ;;
- x86:Interix*:[34]*)
- echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
- exit ;;
- [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
- echo i${UNAME_MACHINE}-pc-mks
- exit ;;
- i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
- # UNAME_MACHINE based on the output of uname instead of i386?
- echo i586-pc-interix
- exit ;;
- i*:UWIN*:*)
- echo ${UNAME_MACHINE}-pc-uwin
- exit ;;
- amd64:CYGWIN*:*:*)
- echo x86_64-unknown-cygwin
- exit ;;
- p*:CYGWIN*:*)
- echo powerpcle-unknown-cygwin
- exit ;;
- prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- *:GNU:*:*)
- # the GNU system
- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- exit ;;
- *:GNU/*:*:*)
- # other systems with GNU libc and userland
- echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
- exit ;;
- i*86:Minix:*:*)
- echo ${UNAME_MACHINE}-pc-minix
- exit ;;
- arm*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- cris:Linux:*:*)
- echo cris-axis-linux-gnu
- exit ;;
- crisv32:Linux:*:*)
- echo crisv32-axis-linux-gnu
- exit ;;
- frv:Linux:*:*)
- echo frv-unknown-linux-gnu
- exit ;;
- ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- m32r*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- mips:Linux:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #undef CPU
- #undef mips
- #undef mipsel
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=mipsel
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=mips
- #else
- CPU=
- #endif
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
- ;;
- mips64:Linux:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #undef CPU
- #undef mips64
- #undef mips64el
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=mips64el
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=mips64
- #else
- CPU=
- #endif
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
- ;;
- ppc:Linux:*:*)
- echo powerpc-unknown-linux-gnu
- exit ;;
- ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-gnu
- exit ;;
- alpha:Linux:*:*)
- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
- EV5) UNAME_MACHINE=alphaev5 ;;
- EV56) UNAME_MACHINE=alphaev56 ;;
- PCA56) UNAME_MACHINE=alphapca56 ;;
- PCA57) UNAME_MACHINE=alphapca56 ;;
- EV6) UNAME_MACHINE=alphaev6 ;;
- EV67) UNAME_MACHINE=alphaev67 ;;
- EV68*) UNAME_MACHINE=alphaev68 ;;
- esac
- objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
- exit ;;
- parisc:Linux:*:* | hppa:Linux:*:*)
- # Look for CPU level
- case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
- PA7*) echo hppa1.1-unknown-linux-gnu ;;
- PA8*) echo hppa2.0-unknown-linux-gnu ;;
- *) echo hppa-unknown-linux-gnu ;;
- esac
- exit ;;
- parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-gnu
- exit ;;
- s390:Linux:*:* | s390x:Linux:*:*)
- echo ${UNAME_MACHINE}-ibm-linux
- exit ;;
- sh64*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- sh*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- sparc:Linux:*:* | sparc64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- x86_64:Linux:*:*)
- echo x86_64-unknown-linux-gnu
- exit ;;
- i*86:Linux:*:*)
- # The BFD linker knows what the default object file format is, so
- # first see if it will tell us. cd to the root directory to prevent
- # problems with other programs or directories called `ld' in the path.
- # Set LC_ALL=C to ensure ld outputs messages in English.
- ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
- | sed -ne '/supported targets:/!d
- s/[ ][ ]*/ /g
- s/.*supported targets: *//
- s/ .*//
- p'`
- case "$ld_supported_targets" in
- elf32-i386)
- TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
- ;;
- a.out-i386-linux)
- echo "${UNAME_MACHINE}-pc-linux-gnuaout"
- exit ;;
- coff-i386)
- echo "${UNAME_MACHINE}-pc-linux-gnucoff"
- exit ;;
- "")
- # Either a pre-BFD a.out linker (linux-gnuoldld) or
- # one that does not give us useful --help.
- echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
- exit ;;
- esac
- # Determine whether the default compiler is a.out or elf
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <features.h>
- #ifdef __ELF__
- # ifdef __GLIBC__
- # if __GLIBC__ >= 2
- LIBC=gnu
- # else
- LIBC=gnulibc1
- # endif
- # else
- LIBC=gnulibc1
- # endif
- #else
- #ifdef __INTEL_COMPILER
- LIBC=gnu
- #else
- LIBC=gnuaout
- #endif
- #endif
- #ifdef __dietlibc__
- LIBC=dietlibc
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
- test x"${LIBC}" != x && {
- echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
- exit
- }
- test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
- ;;
- i*86:DYNIX/ptx:4*:*)
- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
- # earlier versions are messed up and put the nodename in both
- # sysname and nodename.
- echo i386-sequent-sysv4
- exit ;;
- i*86:UNIX_SV:4.2MP:2.*)
- # Unixware is an offshoot of SVR4, but it has its own version
- # number series starting with 2...
- # I am not positive that other SVR4 systems won't match this,
- # I just have to hope. -- rms.
- # Use sysv4.2uw... so that sysv4* matches it.
- echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
- exit ;;
- i*86:OS/2:*:*)
- # If we were able to find `uname', then EMX Unix compatibility
- # is probably installed.
- echo ${UNAME_MACHINE}-pc-os2-emx
- exit ;;
- i*86:XTS-300:*:STOP)
- echo ${UNAME_MACHINE}-unknown-stop
- exit ;;
- i*86:atheos:*:*)
- echo ${UNAME_MACHINE}-unknown-atheos
- exit ;;
- i*86:syllable:*:*)
- echo ${UNAME_MACHINE}-pc-syllable
- exit ;;
- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
- echo i386-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- i*86:*DOS:*:*)
- echo ${UNAME_MACHINE}-pc-msdosdjgpp
- exit ;;
- i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
- UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
- else
- echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
- fi
- exit ;;
- i*86:*:5:[678]*)
- # UnixWare 7.x, OpenUNIX and OpenServer 6.
- case `/bin/uname -X | grep "^Machine"` in
- *486*) UNAME_MACHINE=i486 ;;
- *Pentium) UNAME_MACHINE=i586 ;;
- *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
- esac
- echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
- exit ;;
- i*86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
- echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
- elif /bin/uname -X 2>/dev/null >/dev/null ; then
- UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
- (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
- (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
- && UNAME_MACHINE=i586
- (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
- && UNAME_MACHINE=i686
- (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
- && UNAME_MACHINE=i686
- echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
- else
- echo ${UNAME_MACHINE}-pc-sysv32
- fi
- exit ;;
- pc:*:*:*)
- # Left here for compatibility:
- # uname -m prints for DJGPP always 'pc', but it prints nothing about
- # the processor, so we play safe by assuming i386.
- echo i386-pc-msdosdjgpp
- exit ;;
- Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit ;;
- paragon:*:*:*)
- echo i860-intel-osf1
- exit ;;
- i860:*:4.*:*) # i860-SVR4
- if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
- else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
- fi
- exit ;;
- mini*:CTIX:SYS*5:*)
- # "miniframe"
- echo m68010-convergent-sysv
- exit ;;
- mc68k:UNIX:SYSTEM5:3.51m)
- echo m68k-convergent-sysv
- exit ;;
- M680?0:D-NIX:5.3:*)
- echo m68k-diab-dnix
- exit ;;
- M68*:*:R3V[5678]*:*)
- test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
- 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
- OS_REL=''
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
- 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4; exit; } ;;
- m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- echo m68k-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
- exit ;;
- TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- rs6000:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
- echo powerpc-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv${UNAME_RELEASE}
- exit ;;
- RM*:ReliantUNIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
- RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
- *:SINIX-*:*:*)
- if uname -p 2>/dev/null >/dev/null ; then
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- echo ${UNAME_MACHINE}-sni-sysv4
- else
- echo ns32k-sni-sysv
- fi
- exit ;;
- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel at ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit ;;
- *:UNIX_System_V:4*:FTX*)
- # From Gerald Hewes <hewes at openmarket.com>.
- # How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
- exit ;;
- *:*:*:FTX*)
- # From seanf at swdc.stratus.com.
- echo i860-stratus-sysv4
- exit ;;
- i*86:VOS:*:*)
- # From Paul.Green at stratus.com.
- echo ${UNAME_MACHINE}-stratus-vos
- exit ;;
- *:VOS:*:*)
- # From Paul.Green at stratus.com.
- echo hppa1.1-stratus-vos
- exit ;;
- mc68*:A/UX:*:*)
- echo m68k-apple-aux${UNAME_RELEASE}
- exit ;;
- news*:NEWS-OS:6*:*)
- echo mips-sony-newsos6
- exit ;;
- R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- if [ -d /usr/nec ]; then
- echo mips-nec-sysv${UNAME_RELEASE}
- else
- echo mips-unknown-sysv${UNAME_RELEASE}
- fi
- exit ;;
- BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
- echo powerpc-be-beos
- exit ;;
- BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
- echo powerpc-apple-beos
- exit ;;
- BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
- echo i586-pc-beos
- exit ;;
- SX-4:SUPER-UX:*:*)
- echo sx4-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-5:SUPER-UX:*:*)
- echo sx5-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-6:SUPER-UX:*:*)
- echo sx6-nec-superux${UNAME_RELEASE}
- exit ;;
- Power*:Rhapsody:*:*)
- echo powerpc-apple-rhapsody${UNAME_RELEASE}
- exit ;;
- *:Rhapsody:*:*)
- echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
- exit ;;
- *:Darwin:*:*)
- UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
- case $UNAME_PROCESSOR in
- *86) UNAME_PROCESSOR=i686 ;;
- unknown) UNAME_PROCESSOR=powerpc ;;
- esac
- echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
- exit ;;
- *:procnto*:*:* | *:QNX:[0123456789]*:*)
- UNAME_PROCESSOR=`uname -p`
- if test "$UNAME_PROCESSOR" = "x86"; then
- UNAME_PROCESSOR=i386
- UNAME_MACHINE=pc
- fi
- echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
- exit ;;
- *:QNX:*:4*)
- echo i386-pc-qnx
- exit ;;
- NSE-?:NONSTOP_KERNEL:*:*)
- echo nse-tandem-nsk${UNAME_RELEASE}
- exit ;;
- NSR-?:NONSTOP_KERNEL:*:*)
- echo nsr-tandem-nsk${UNAME_RELEASE}
- exit ;;
- *:NonStop-UX:*:*)
- echo mips-compaq-nonstopux
- exit ;;
- BS2000:POSIX*:*:*)
- echo bs2000-siemens-sysv
- exit ;;
- DS/*:UNIX_System_V:*:*)
- echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
- exit ;;
- *:Plan9:*:*)
- # "uname -m" is not consistent, so use $cputype instead. 386
- # is converted to i386 for consistency with other x86
- # operating systems.
- if test "$cputype" = "386"; then
- UNAME_MACHINE=i386
- else
- UNAME_MACHINE="$cputype"
- fi
- echo ${UNAME_MACHINE}-unknown-plan9
- exit ;;
- *:TOPS-10:*:*)
- echo pdp10-unknown-tops10
- exit ;;
- *:TENEX:*:*)
- echo pdp10-unknown-tenex
- exit ;;
- KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- echo pdp10-dec-tops20
- exit ;;
- XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- echo pdp10-xkl-tops20
- exit ;;
- *:TOPS-20:*:*)
- echo pdp10-unknown-tops20
- exit ;;
- *:ITS:*:*)
- echo pdp10-unknown-its
- exit ;;
- SEI:*:*:SEIUX)
- echo mips-sei-seiux${UNAME_RELEASE}
- exit ;;
- *:DragonFly:*:*)
- echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit ;;
- *:*VMS:*:*)
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- case "${UNAME_MACHINE}" in
- A*) echo alpha-dec-vms ; exit ;;
- I*) echo ia64-dec-vms ; exit ;;
- V*) echo vax-dec-vms ; exit ;;
- esac ;;
- *:XENIX:*:SysV)
- echo i386-pc-xenix
- exit ;;
- i*86:skyos:*:*)
- echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
- exit ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
- I don't know.... */
- printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
- "4"
-#else
- ""
-#endif
- ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
- printf ("arm-acorn-riscix\n"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
- printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
- if (version < 4)
- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- else
- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
- exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
- printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
- printf ("ns32k-encore-mach\n"); exit (0);
-#else
- printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
- printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
- printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
- struct utsname un;
-
- uname(&un);
-
- if (strncmp(un.version, "V2", 2) == 0) {
- printf ("i386-sequent-ptx2\n"); exit (0);
- }
- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- printf ("i386-sequent-ptx1\n"); exit (0);
- }
- printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-# include <sys/param.h>
-# if defined (BSD)
-# if BSD == 43
- printf ("vax-dec-bsd4.3\n"); exit (0);
-# else
-# if BSD == 199006
- printf ("vax-dec-bsd4.3reno\n"); exit (0);
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# endif
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# else
- printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
- printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
- exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
- { echo "$SYSTEM_NAME"; exit; }
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
- case `getsysinfo -f cpu_type` in
- c1*)
- echo c1-convex-bsd
- exit ;;
- c2*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit ;;
- c34*)
- echo c34-convex-bsd
- exit ;;
- c38*)
- echo c38-convex-bsd
- exit ;;
- c4*)
- echo c4-convex-bsd
- exit ;;
- esac
-fi
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
- http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
-and
- http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches at gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo = `(hostinfo) 2>/dev/null`
-/bin/universe = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/ast-5.3-1/config.h.in b/ast-5.3-1/config.h.in
deleted file mode 100644
index 50a5837..0000000
--- a/ast-5.3-1/config.h.in
+++ /dev/null
@@ -1,104 +0,0 @@
-/* config.h.in. Generated from configure.ac by autoheader. */
-
-/* Define to 1 if you have the `backtrace' function. */
-#undef HAVE_BACKTRACE
-
-/* Define to 1 if you have the declaration of `isnan', and to 0 if you don't.
- */
-#undef HAVE_DECL_ISNAN
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#undef HAVE_DLFCN_H
-
-/* Define to 1 if you have the <execinfo.h> header file. */
-#undef HAVE_EXECINFO_H
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if you have the `isnan' function. */
-#undef HAVE_ISNAN
-
-/* Define to 1 if you have the `pthread' library (-lpthread). */
-#undef HAVE_LIBPTHREAD
-
-/* Define to 1 if the system has the type `long double'. */
-#undef HAVE_LONG_DOUBLE
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* The sscanf shows the non-ANSI behaviour reported by Bill Joye */
-#undef HAVE_NONANSI_SSCANF
-
-/* Define to 1 if the Fortran compiler supports the VAX %LOC extension */
-#undef HAVE_PERCENTLOC
-
-/* Use the starmem library for memory management */
-#undef HAVE_STAR_MEM_H
-
-/* Define to 1 if you have the <stdarg.h> header file. */
-#undef HAVE_STDARG_H
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the `strerror_r' function. */
-#undef HAVE_STRERROR_R
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the `strtok_r' function. */
-#undef HAVE_STRTOK_R
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define to 1 if you have the <varargs.h> header file. */
-#undef HAVE_VARARGS_H
-
-/* enable AST memory leak debugging functions in memory.c */
-#undef MEM_DEBUG
-
-/* Name of package */
-#undef PACKAGE
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* The size of a `void*', as computed by sizeof. */
-#undef SIZEOF_VOIDP
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Type of Fortran CNF TRAIL argument */
-#undef TRAIL_TYPE
-
-/* Version number of package */
-#undef VERSION
diff --git a/ast-5.3-1/config.sub b/ast-5.3-1/config.sub
deleted file mode 100755
index 519f2cd..0000000
--- a/ast-5.3-1/config.sub
+++ /dev/null
@@ -1,1570 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
-
-timestamp='2005-05-12'
-
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine. It does not imply ALL GNU software can.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Please send patches to <config-patches at gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support. The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
- $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches at gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit ;;
- --version | -v )
- echo "$version" ; exit ;;
- --help | --h* | -h )
- echo "$usage"; exit ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help"
- exit 1 ;;
-
- *local*)
- # First pass through any local machine types.
- echo $1
- exit ;;
-
- * )
- break ;;
- esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
- exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
- exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
- nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
- kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
- os=-$maybe_os
- basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
- ;;
- *)
- basic_machine=`echo $1 | sed 's/-[^-]*$//'`
- if [ $basic_machine != $1 ]
- then os=`echo $1 | sed 's/.*-/-/'`
- else os=; fi
- ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work. We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
- -sun*os*)
- # Prevent following clause from handling this invalid input.
- ;;
- -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
- -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
- -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
- -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
- -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
- -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple | -axis | -knuth | -cray)
- os=
- basic_machine=$1
- ;;
- -sim | -cisco | -oki | -wec | -winbond)
- os=
- basic_machine=$1
- ;;
- -scout)
- ;;
- -wrs)
- os=-vxworks
- basic_machine=$1
- ;;
- -chorusos*)
- os=-chorusos
- basic_machine=$1
- ;;
- -chorusrdb)
- os=-chorusrdb
- basic_machine=$1
- ;;
- -hiux*)
- os=-hiuxwe2
- ;;
- -sco5)
- os=-sco3.2v5
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco4)
- os=-sco3.2v4
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2.[4-9]*)
- os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2v[4-9]*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco*)
- os=-sco3.2v2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -udk*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -isc)
- os=-isc2.2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -clix*)
- basic_machine=clipper-intergraph
- ;;
- -isc*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -lynx*)
- os=-lynxos
- ;;
- -ptx*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
- ;;
- -windowsnt*)
- os=`echo $os | sed -e 's/windowsnt/winnt/'`
- ;;
- -psos*)
- os=-psos
- ;;
- -mint | -mint[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
- # Recognize the basic CPU types without company name.
- # Some are omitted here because they have special meanings below.
- 1750a | 580 \
- | a29k \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
- | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
- | am33_2.0 \
- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
- | bfin \
- | c4x | clipper \
- | d10v | d30v | dlx | dsp16xx \
- | fr30 | frv \
- | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | i370 | i860 | i960 | ia64 \
- | ip2k | iq2000 \
- | m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \
- | mips | mipsbe | mipseb | mipsel | mipsle \
- | mips16 \
- | mips64 | mips64el \
- | mips64vr | mips64vrel \
- | mips64orion | mips64orionel \
- | mips64vr4100 | mips64vr4100el \
- | mips64vr4300 | mips64vr4300el \
- | mips64vr5000 | mips64vr5000el \
- | mipsisa32 | mipsisa32el \
- | mipsisa32r2 | mipsisa32r2el \
- | mipsisa64 | mipsisa64el \
- | mipsisa64r2 | mipsisa64r2el \
- | mipsisa64sb1 | mipsisa64sb1el \
- | mipsisa64sr71k | mipsisa64sr71kel \
- | mipstx39 | mipstx39el \
- | mn10200 | mn10300 \
- | msp430 \
- | ns16k | ns32k \
- | openrisc | or32 \
- | pdp10 | pdp11 | pj | pjl \
- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
- | pyramid \
- | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
- | sh64 | sh64le \
- | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \
- | sparcv8 | sparcv9 | sparcv9b \
- | strongarm \
- | tahoe | thumb | tic4x | tic80 | tron \
- | v850 | v850e \
- | we32k \
- | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
- | z8k)
- basic_machine=$basic_machine-unknown
- ;;
- m6811 | m68hc11 | m6812 | m68hc12)
- # Motorola 68HC11/12.
- basic_machine=$basic_machine-unknown
- os=-none
- ;;
- m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
- ;;
-
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
- # (2) the word "unknown" tends to confuse beginning users.
- i*86 | x86_64)
- basic_machine=$basic_machine-pc
- ;;
- # Object if more than one company name word.
- *-*-*)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
- # Recognize the basic CPU types with company name.
- 580-* \
- | a29k-* \
- | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
- | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
- | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
- | avr-* \
- | bfin-* | bs2000-* \
- | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
- | clipper-* | craynv-* | cydra-* \
- | d10v-* | d30v-* | dlx-* \
- | elxsi-* \
- | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
- | h8300-* | h8500-* \
- | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
- | i*86-* | i860-* | i960-* | ia64-* \
- | ip2k-* | iq2000-* \
- | m32r-* | m32rle-* \
- | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | maxq-* | mcore-* \
- | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
- | mips16-* \
- | mips64-* | mips64el-* \
- | mips64vr-* | mips64vrel-* \
- | mips64orion-* | mips64orionel-* \
- | mips64vr4100-* | mips64vr4100el-* \
- | mips64vr4300-* | mips64vr4300el-* \
- | mips64vr5000-* | mips64vr5000el-* \
- | mipsisa32-* | mipsisa32el-* \
- | mipsisa32r2-* | mipsisa32r2el-* \
- | mipsisa64-* | mipsisa64el-* \
- | mipsisa64r2-* | mipsisa64r2el-* \
- | mipsisa64sb1-* | mipsisa64sb1el-* \
- | mipsisa64sr71k-* | mipsisa64sr71kel-* \
- | mipstx39-* | mipstx39el-* \
- | mmix-* \
- | msp430-* \
- | none-* | np1-* | ns16k-* | ns32k-* \
- | orion-* \
- | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
- | pyramid-* \
- | romp-* | rs6000-* \
- | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
- | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \
- | sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
- | tahoe-* | thumb-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
- | tron-* \
- | v850-* | v850e-* | vax-* \
- | we32k-* \
- | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
- | xstormy16-* | xtensa-* \
- | ymp-* \
- | z8k-*)
- ;;
- # Recognize the various machine names and aliases which stand
- # for a CPU type and a company and sometimes even an OS.
- 386bsd)
- basic_machine=i386-unknown
- os=-bsd
- ;;
- 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- basic_machine=m68000-att
- ;;
- 3b*)
- basic_machine=we32k-att
- ;;
- a29khif)
- basic_machine=a29k-amd
- os=-udi
- ;;
- abacus)
- basic_machine=abacus-unknown
- ;;
- adobe68k)
- basic_machine=m68010-adobe
- os=-scout
- ;;
- alliant | fx80)
- basic_machine=fx80-alliant
- ;;
- altos | altos3068)
- basic_machine=m68k-altos
- ;;
- am29k)
- basic_machine=a29k-none
- os=-bsd
- ;;
- amd64)
- basic_machine=x86_64-pc
- ;;
- amd64-*)
- basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- amdahl)
- basic_machine=580-amdahl
- os=-sysv
- ;;
- amiga | amiga-*)
- basic_machine=m68k-unknown
- ;;
- amigaos | amigados)
- basic_machine=m68k-unknown
- os=-amigaos
- ;;
- amigaunix | amix)
- basic_machine=m68k-unknown
- os=-sysv4
- ;;
- apollo68)
- basic_machine=m68k-apollo
- os=-sysv
- ;;
- apollo68bsd)
- basic_machine=m68k-apollo
- os=-bsd
- ;;
- aux)
- basic_machine=m68k-apple
- os=-aux
- ;;
- balance)
- basic_machine=ns32k-sequent
- os=-dynix
- ;;
- c90)
- basic_machine=c90-cray
- os=-unicos
- ;;
- convex-c1)
- basic_machine=c1-convex
- os=-bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- os=-bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- os=-bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- os=-bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- os=-bsd
- ;;
- cray | j90)
- basic_machine=j90-cray
- os=-unicos
- ;;
- craynv)
- basic_machine=craynv-cray
- os=-unicosmp
- ;;
- cr16c)
- basic_machine=cr16c-unknown
- os=-elf
- ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
- crisv32 | crisv32-* | etraxfs*)
- basic_machine=crisv32-axis
- ;;
- cris | cris-* | etrax*)
- basic_machine=cris-axis
- ;;
- crx)
- basic_machine=crx-unknown
- os=-elf
- ;;
- da30 | da30-*)
- basic_machine=m68k-da30
- ;;
- decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
- basic_machine=mips-dec
- ;;
- decsystem10* | dec10*)
- basic_machine=pdp10-dec
- os=-tops10
- ;;
- decsystem20* | dec20*)
- basic_machine=pdp10-dec
- os=-tops20
- ;;
- delta | 3300 | motorola-3300 | motorola-delta \
- | 3300-motorola | delta-motorola)
- basic_machine=m68k-motorola
- ;;
- delta88)
- basic_machine=m88k-motorola
- os=-sysv3
- ;;
- djgpp)
- basic_machine=i586-pc
- os=-msdosdjgpp
- ;;
- dpx20 | dpx20-*)
- basic_machine=rs6000-bull
- os=-bosx
- ;;
- dpx2* | dpx2*-bull)
- basic_machine=m68k-bull
- os=-sysv3
- ;;
- ebmon29k)
- basic_machine=a29k-amd
- os=-ebmon
- ;;
- elxsi)
- basic_machine=elxsi-elxsi
- os=-bsd
- ;;
- encore | umax | mmax)
- basic_machine=ns32k-encore
- ;;
- es1800 | OSE68k | ose68k | ose | OSE)
- basic_machine=m68k-ericsson
- os=-ose
- ;;
- fx2800)
- basic_machine=i860-alliant
- ;;
- genix)
- basic_machine=ns32k-ns
- ;;
- gmicro)
- basic_machine=tron-gmicro
- os=-sysv
- ;;
- go32)
- basic_machine=i386-pc
- os=-go32
- ;;
- h3050r* | hiux*)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- h8300hms)
- basic_machine=h8300-hitachi
- os=-hms
- ;;
- h8300xray)
- basic_machine=h8300-hitachi
- os=-xray
- ;;
- h8500hms)
- basic_machine=h8500-hitachi
- os=-hms
- ;;
- harris)
- basic_machine=m88k-harris
- os=-sysv3
- ;;
- hp300-*)
- basic_machine=m68k-hp
- ;;
- hp300bsd)
- basic_machine=m68k-hp
- os=-bsd
- ;;
- hp300hpux)
- basic_machine=m68k-hp
- os=-hpux
- ;;
- hp3k9[0-9][0-9] | hp9[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k2[0-9][0-9] | hp9k31[0-9])
- basic_machine=m68000-hp
- ;;
- hp9k3[2-9][0-9])
- basic_machine=m68k-hp
- ;;
- hp9k6[0-9][0-9] | hp6[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k7[0-79][0-9] | hp7[0-79][0-9])
- basic_machine=hppa1.1-hp
- ;;
- hp9k78[0-9] | hp78[0-9])
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][13679] | hp8[0-9][13679])
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][0-9] | hp8[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hppa-next)
- os=-nextstep3
- ;;
- hppaosf)
- basic_machine=hppa1.1-hp
- os=-osf
- ;;
- hppro)
- basic_machine=hppa1.1-hp
- os=-proelf
- ;;
- i370-ibm* | ibm*)
- basic_machine=i370-ibm
- ;;
-# I'm not sure what "Sysv32" means. Should this be sysv3.2?
- i*86v32)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv32
- ;;
- i*86v4*)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv4
- ;;
- i*86v)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv
- ;;
- i*86sol2)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-solaris2
- ;;
- i386mach)
- basic_machine=i386-mach
- os=-mach
- ;;
- i386-vsta | vsta)
- basic_machine=i386-unknown
- os=-vsta
- ;;
- iris | iris4d)
- basic_machine=mips-sgi
- case $os in
- -irix*)
- ;;
- *)
- os=-irix4
- ;;
- esac
- ;;
- isi68 | isi)
- basic_machine=m68k-isi
- os=-sysv
- ;;
- m88k-omron*)
- basic_machine=m88k-omron
- ;;
- magnum | m3230)
- basic_machine=mips-mips
- os=-sysv
- ;;
- merlin)
- basic_machine=ns32k-utek
- os=-sysv
- ;;
- mingw32)
- basic_machine=i386-pc
- os=-mingw32
- ;;
- miniframe)
- basic_machine=m68000-convergent
- ;;
- *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
- mips3*-*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
- ;;
- mips3*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
- ;;
- monitor)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- morphos)
- basic_machine=powerpc-unknown
- os=-morphos
- ;;
- msdos)
- basic_machine=i386-pc
- os=-msdos
- ;;
- mvs)
- basic_machine=i370-ibm
- os=-mvs
- ;;
- ncr3000)
- basic_machine=i486-ncr
- os=-sysv4
- ;;
- netbsd386)
- basic_machine=i386-unknown
- os=-netbsd
- ;;
- netwinder)
- basic_machine=armv4l-rebel
- os=-linux
- ;;
- news | news700 | news800 | news900)
- basic_machine=m68k-sony
- os=-newsos
- ;;
- news1000)
- basic_machine=m68030-sony
- os=-newsos
- ;;
- news-3600 | risc-news)
- basic_machine=mips-sony
- os=-newsos
- ;;
- necv70)
- basic_machine=v70-nec
- os=-sysv
- ;;
- next | m*-next )
- basic_machine=m68k-next
- case $os in
- -nextstep* )
- ;;
- -ns2*)
- os=-nextstep2
- ;;
- *)
- os=-nextstep3
- ;;
- esac
- ;;
- nh3000)
- basic_machine=m68k-harris
- os=-cxux
- ;;
- nh[45]000)
- basic_machine=m88k-harris
- os=-cxux
- ;;
- nindy960)
- basic_machine=i960-intel
- os=-nindy
- ;;
- mon960)
- basic_machine=i960-intel
- os=-mon960
- ;;
- nonstopux)
- basic_machine=mips-compaq
- os=-nonstopux
- ;;
- np1)
- basic_machine=np1-gould
- ;;
- nsr-tandem)
- basic_machine=nsr-tandem
- ;;
- op50n-* | op60c-*)
- basic_machine=hppa1.1-oki
- os=-proelf
- ;;
- or32 | or32-*)
- basic_machine=or32-unknown
- os=-coff
- ;;
- os400)
- basic_machine=powerpc-ibm
- os=-os400
- ;;
- OSE68000 | ose68000)
- basic_machine=m68000-ericsson
- os=-ose
- ;;
- os68k)
- basic_machine=m68k-none
- os=-os68k
- ;;
- pa-hitachi)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- paragon)
- basic_machine=i860-intel
- os=-osf
- ;;
- pbd)
- basic_machine=sparc-tti
- ;;
- pbb)
- basic_machine=m68k-tti
- ;;
- pc532 | pc532-*)
- basic_machine=ns32k-pc532
- ;;
- pentium | p5 | k5 | k6 | nexgen | viac3)
- basic_machine=i586-pc
- ;;
- pentiumpro | p6 | 6x86 | athlon | athlon_*)
- basic_machine=i686-pc
- ;;
- pentiumii | pentium2 | pentiumiii | pentium3)
- basic_machine=i686-pc
- ;;
- pentium4)
- basic_machine=i786-pc
- ;;
- pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
- basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumpro-* | p6-* | 6x86-* | athlon-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentium4-*)
- basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pn)
- basic_machine=pn-gould
- ;;
- power) basic_machine=power-ibm
- ;;
- ppc) basic_machine=powerpc-unknown
- ;;
- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppcle | powerpclittle | ppc-le | powerpc-little)
- basic_machine=powerpcle-unknown
- ;;
- ppcle-* | powerpclittle-*)
- basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64) basic_machine=powerpc64-unknown
- ;;
- ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64le | powerpc64little | ppc64-le | powerpc64-little)
- basic_machine=powerpc64le-unknown
- ;;
- ppc64le-* | powerpc64little-*)
- basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ps2)
- basic_machine=i386-ibm
- ;;
- pw32)
- basic_machine=i586-unknown
- os=-pw32
- ;;
- rom68k)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- rm[46]00)
- basic_machine=mips-siemens
- ;;
- rtpc | rtpc-*)
- basic_machine=romp-ibm
- ;;
- s390 | s390-*)
- basic_machine=s390-ibm
- ;;
- s390x | s390x-*)
- basic_machine=s390x-ibm
- ;;
- sa29200)
- basic_machine=a29k-amd
- os=-udi
- ;;
- sb1)
- basic_machine=mipsisa64sb1-unknown
- ;;
- sb1el)
- basic_machine=mipsisa64sb1el-unknown
- ;;
- sei)
- basic_machine=mips-sei
- os=-seiux
- ;;
- sequent)
- basic_machine=i386-sequent
- ;;
- sh)
- basic_machine=sh-hitachi
- os=-hms
- ;;
- sh64)
- basic_machine=sh64-unknown
- ;;
- sparclite-wrs | simso-wrs)
- basic_machine=sparclite-wrs
- os=-vxworks
- ;;
- sps7)
- basic_machine=m68k-bull
- os=-sysv2
- ;;
- spur)
- basic_machine=spur-unknown
- ;;
- st2000)
- basic_machine=m68k-tandem
- ;;
- stratus)
- basic_machine=i860-stratus
- os=-sysv4
- ;;
- sun2)
- basic_machine=m68000-sun
- ;;
- sun2os3)
- basic_machine=m68000-sun
- os=-sunos3
- ;;
- sun2os4)
- basic_machine=m68000-sun
- os=-sunos4
- ;;
- sun3os3)
- basic_machine=m68k-sun
- os=-sunos3
- ;;
- sun3os4)
- basic_machine=m68k-sun
- os=-sunos4
- ;;
- sun4os3)
- basic_machine=sparc-sun
- os=-sunos3
- ;;
- sun4os4)
- basic_machine=sparc-sun
- os=-sunos4
- ;;
- sun4sol2)
- basic_machine=sparc-sun
- os=-solaris2
- ;;
- sun3 | sun3-*)
- basic_machine=m68k-sun
- ;;
- sun4)
- basic_machine=sparc-sun
- ;;
- sun386 | sun386i | roadrunner)
- basic_machine=i386-sun
- ;;
- sv1)
- basic_machine=sv1-cray
- os=-unicos
- ;;
- symmetry)
- basic_machine=i386-sequent
- os=-dynix
- ;;
- t3e)
- basic_machine=alphaev5-cray
- os=-unicos
- ;;
- t90)
- basic_machine=t90-cray
- os=-unicos
- ;;
- tic54x | c54x*)
- basic_machine=tic54x-unknown
- os=-coff
- ;;
- tic55x | c55x*)
- basic_machine=tic55x-unknown
- os=-coff
- ;;
- tic6x | c6x*)
- basic_machine=tic6x-unknown
- os=-coff
- ;;
- tx39)
- basic_machine=mipstx39-unknown
- ;;
- tx39el)
- basic_machine=mipstx39el-unknown
- ;;
- toad1)
- basic_machine=pdp10-xkl
- os=-tops20
- ;;
- tower | tower-32)
- basic_machine=m68k-ncr
- ;;
- tpf)
- basic_machine=s390x-ibm
- os=-tpf
- ;;
- udi29k)
- basic_machine=a29k-amd
- os=-udi
- ;;
- ultra3)
- basic_machine=a29k-nyu
- os=-sym1
- ;;
- v810 | necv810)
- basic_machine=v810-nec
- os=-none
- ;;
- vaxv)
- basic_machine=vax-dec
- os=-sysv
- ;;
- vms)
- basic_machine=vax-dec
- os=-vms
- ;;
- vpp*|vx|vx-*)
- basic_machine=f301-fujitsu
- ;;
- vxworks960)
- basic_machine=i960-wrs
- os=-vxworks
- ;;
- vxworks68)
- basic_machine=m68k-wrs
- os=-vxworks
- ;;
- vxworks29k)
- basic_machine=a29k-wrs
- os=-vxworks
- ;;
- w65*)
- basic_machine=w65-wdc
- os=-none
- ;;
- w89k-*)
- basic_machine=hppa1.1-winbond
- os=-proelf
- ;;
- xbox)
- basic_machine=i686-pc
- os=-mingw32
- ;;
- xps | xps100)
- basic_machine=xps100-honeywell
- ;;
- ymp)
- basic_machine=ymp-cray
- os=-unicos
- ;;
- z8k-*-coff)
- basic_machine=z8k-unknown
- os=-sim
- ;;
- none)
- basic_machine=none-none
- os=-none
- ;;
-
-# Here we handle the default manufacturer of certain CPU types. It is in
-# some cases the only manufacturer, in others, it is the most popular.
- w89k)
- basic_machine=hppa1.1-winbond
- ;;
- op50n)
- basic_machine=hppa1.1-oki
- ;;
- op60c)
- basic_machine=hppa1.1-oki
- ;;
- romp)
- basic_machine=romp-ibm
- ;;
- mmix)
- basic_machine=mmix-knuth
- ;;
- rs6000)
- basic_machine=rs6000-ibm
- ;;
- vax)
- basic_machine=vax-dec
- ;;
- pdp10)
- # there are many clones, so DEC is not a safe bet
- basic_machine=pdp10-unknown
- ;;
- pdp11)
- basic_machine=pdp11-dec
- ;;
- we32k)
- basic_machine=we32k-att
- ;;
- sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
- basic_machine=sh-unknown
- ;;
- sh64)
- basic_machine=sh64-unknown
- ;;
- sparc | sparcv8 | sparcv9 | sparcv9b)
- basic_machine=sparc-sun
- ;;
- cydra)
- basic_machine=cydra-cydrome
- ;;
- orion)
- basic_machine=orion-highlevel
- ;;
- orion105)
- basic_machine=clipper-highlevel
- ;;
- mac | mpw | mac-mpw)
- basic_machine=m68k-apple
- ;;
- pmac | pmac-mpw)
- basic_machine=powerpc-apple
- ;;
- *-unknown)
- # Make sure to match an already-canonicalized machine name.
- ;;
- *)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
- *-digital*)
- basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
- ;;
- *-commodore*)
- basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
- ;;
- *)
- ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
- # First match some system type aliases
- # that might get confused with valid system types.
- # -solaris* is a basic system type, with this one exception.
- -solaris1 | -solaris1.*)
- os=`echo $os | sed -e 's|solaris1|sunos4|'`
- ;;
- -solaris)
- os=-solaris2
- ;;
- -svr4*)
- os=-sysv4
- ;;
- -unixware*)
- os=-sysv4.2uw
- ;;
- -gnu/linux*)
- os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
- ;;
- # First accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST END IN A *, to match a version number.
- # -sysv* is not here because it comes later, after sysvr4.
- -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
- | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
- | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
- | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -chorusos* | -chorusrdb* \
- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
- | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
- | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
- | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
- | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
- | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
- | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* | -skyos*)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
- -qnx*)
- case $basic_machine in
- x86-* | i*86-*)
- ;;
- *)
- os=-nto$os
- ;;
- esac
- ;;
- -nto-qnx*)
- ;;
- -nto*)
- os=`echo $os | sed -e 's|nto|nto-qnx|'`
- ;;
- -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
- | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
- | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
- ;;
- -mac*)
- os=`echo $os | sed -e 's|mac|macos|'`
- ;;
- -linux-dietlibc)
- os=-linux-dietlibc
- ;;
- -linux*)
- os=`echo $os | sed -e 's|linux|linux-gnu|'`
- ;;
- -sunos5*)
- os=`echo $os | sed -e 's|sunos5|solaris2|'`
- ;;
- -sunos6*)
- os=`echo $os | sed -e 's|sunos6|solaris3|'`
- ;;
- -opened*)
- os=-openedition
- ;;
- -os400*)
- os=-os400
- ;;
- -wince*)
- os=-wince
- ;;
- -osfrose*)
- os=-osfrose
- ;;
- -osf*)
- os=-osf
- ;;
- -utek*)
- os=-bsd
- ;;
- -dynix*)
- os=-bsd
- ;;
- -acis*)
- os=-aos
- ;;
- -atheos*)
- os=-atheos
- ;;
- -syllable*)
- os=-syllable
- ;;
- -386bsd)
- os=-bsd
- ;;
- -ctix* | -uts*)
- os=-sysv
- ;;
- -nova*)
- os=-rtmk-nova
- ;;
- -ns2 )
- os=-nextstep2
- ;;
- -nsk*)
- os=-nsk
- ;;
- # Preserve the version number of sinix5.
- -sinix5.*)
- os=`echo $os | sed -e 's|sinix|sysv|'`
- ;;
- -sinix*)
- os=-sysv4
- ;;
- -tpf*)
- os=-tpf
- ;;
- -triton*)
- os=-sysv3
- ;;
- -oss*)
- os=-sysv3
- ;;
- -svr4)
- os=-sysv4
- ;;
- -svr3)
- os=-sysv3
- ;;
- -sysvr4)
- os=-sysv4
- ;;
- # This must come after -sysvr4.
- -sysv*)
- ;;
- -ose*)
- os=-ose
- ;;
- -es1800*)
- os=-ose
- ;;
- -xenix)
- os=-xenix
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- os=-mint
- ;;
- -aros*)
- os=-aros
- ;;
- -kaos*)
- os=-kaos
- ;;
- -zvmoe)
- os=-zvmoe
- ;;
- -none)
- ;;
- *)
- # Get rid of the `-' at the beginning of $os.
- os=`echo $os | sed 's/[^-]*-//'`
- echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
- exit 1
- ;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system. Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
- *-acorn)
- os=-riscix1.2
- ;;
- arm*-rebel)
- os=-linux
- ;;
- arm*-semi)
- os=-aout
- ;;
- c4x-* | tic4x-*)
- os=-coff
- ;;
- # This must come before the *-dec entry.
- pdp10-*)
- os=-tops20
- ;;
- pdp11-*)
- os=-none
- ;;
- *-dec | vax-*)
- os=-ultrix4.2
- ;;
- m68*-apollo)
- os=-domain
- ;;
- i386-sun)
- os=-sunos4.0.2
- ;;
- m68000-sun)
- os=-sunos3
- # This also exists in the configure program, but was not the
- # default.
- # os=-sunos4
- ;;
- m68*-cisco)
- os=-aout
- ;;
- mips*-cisco)
- os=-elf
- ;;
- mips*-*)
- os=-elf
- ;;
- or32-*)
- os=-coff
- ;;
- *-tti) # must be before sparc entry or we get the wrong os.
- os=-sysv3
- ;;
- sparc-* | *-sun)
- os=-sunos4.1.1
- ;;
- *-be)
- os=-beos
- ;;
- *-ibm)
- os=-aix
- ;;
- *-knuth)
- os=-mmixware
- ;;
- *-wec)
- os=-proelf
- ;;
- *-winbond)
- os=-proelf
- ;;
- *-oki)
- os=-proelf
- ;;
- *-hp)
- os=-hpux
- ;;
- *-hitachi)
- os=-hiux
- ;;
- i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- os=-sysv
- ;;
- *-cbm)
- os=-amigaos
- ;;
- *-dg)
- os=-dgux
- ;;
- *-dolphin)
- os=-sysv3
- ;;
- m68k-ccur)
- os=-rtu
- ;;
- m88k-omron*)
- os=-luna
- ;;
- *-next )
- os=-nextstep
- ;;
- *-sequent)
- os=-ptx
- ;;
- *-crds)
- os=-unos
- ;;
- *-ns)
- os=-genix
- ;;
- i370-*)
- os=-mvs
- ;;
- *-next)
- os=-nextstep3
- ;;
- *-gould)
- os=-sysv
- ;;
- *-highlevel)
- os=-bsd
- ;;
- *-encore)
- os=-bsd
- ;;
- *-sgi)
- os=-irix
- ;;
- *-siemens)
- os=-sysv4
- ;;
- *-masscomp)
- os=-rtu
- ;;
- f30[01]-fujitsu | f700-fujitsu)
- os=-uxpv
- ;;
- *-rom68k)
- os=-coff
- ;;
- *-*bug)
- os=-coff
- ;;
- *-apple)
- os=-macos
- ;;
- *-atari*)
- os=-mint
- ;;
- *)
- os=-none
- ;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer. We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
- *-unknown)
- case $os in
- -riscix*)
- vendor=acorn
- ;;
- -sunos*)
- vendor=sun
- ;;
- -aix*)
- vendor=ibm
- ;;
- -beos*)
- vendor=be
- ;;
- -hpux*)
- vendor=hp
- ;;
- -mpeix*)
- vendor=hp
- ;;
- -hiux*)
- vendor=hitachi
- ;;
- -unos*)
- vendor=crds
- ;;
- -dgux*)
- vendor=dg
- ;;
- -luna*)
- vendor=omron
- ;;
- -genix*)
- vendor=ns
- ;;
- -mvs* | -opened*)
- vendor=ibm
- ;;
- -os400*)
- vendor=ibm
- ;;
- -ptx*)
- vendor=sequent
- ;;
- -tpf*)
- vendor=ibm
- ;;
- -vxsim* | -vxworks* | -windiss*)
- vendor=wrs
- ;;
- -aux*)
- vendor=apple
- ;;
- -hms*)
- vendor=hitachi
- ;;
- -mpw* | -macos*)
- vendor=apple
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- vendor=atari
- ;;
- -vos*)
- vendor=stratus
- ;;
- esac
- basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
- ;;
-esac
-
-echo $basic_machine$os
-exit
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/ast-5.3-1/configure b/ast-5.3-1/configure
deleted file mode 100755
index 9010b10..0000000
--- a/ast-5.3-1/configure
+++ /dev/null
@@ -1,25174 +0,0 @@
-#! /bin/sh
-# From configure.ac Revision.
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by Starlink Autoconf 2.59 for ast 5.3-1.
-#
-# Report bugs to <ussc at star.rl.ac.uk>.
-#
-# Copyright (C) 2003 Free Software Foundation, Inc.
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
- set -o posix
-fi
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
- LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
- LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
- LC_TELEPHONE LC_TIME
-do
- if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
- eval $as_var=C; export $as_var
- else
- $as_unset $as_var
- fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)$' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
- /^X\/\(\/\/\)$/{ s//\1/; q; }
- /^X\/\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
-
-
-# PATH needs CR, and LINENO needs CR and PATH.
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
-fi
-
-
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2" || {
- # Find who we are. Look in the path if we contain no path at all
- # relative or not.
- case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-
- ;;
- esac
- # We did not find ourselves, most probably we were run as `sh COMMAND'
- # in which case we are not to be found in the path.
- if test "x$as_myself" = x; then
- as_myself=$0
- fi
- if test ! -f "$as_myself"; then
- { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
- { (exit 1); exit 1; }; }
- fi
- case $CONFIG_SHELL in
- '')
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for as_base in sh bash ksh sh5; do
- case $as_dir in
- /*)
- if ("$as_dir/$as_base" -c '
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
- CONFIG_SHELL=$as_dir/$as_base
- export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$0" ${1+"$@"}
- fi;;
- esac
- done
-done
-;;
- esac
-
- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
- # uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line before each line; the second 'sed' does the real
- # work. The second script uses 'N' to pair each line-number line
- # with the numbered line, and appends trailing '-' during
- # substitution so that $LINENO is not a special case at line end.
- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
- sed '=' <$as_myself |
- sed '
- N
- s,$,-,
- : loop
- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
- t loop
- s,-$,,
- s,^['$as_cr_digits']*\n,,
- ' >$as_me.lineno &&
- chmod +x $as_me.lineno ||
- { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
- { (exit 1); exit 1; }; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensible to this).
- . ./$as_me.lineno
- # Exit status is that of the last command.
- exit
-}
-
-
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
- *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T=' ' ;;
- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
- *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
- # We could just check for DJGPP; but this test a) works b) is more generic
- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
- if test -f conf$$.exe; then
- # Don't use ln at all; we don't have any links
- as_ln_s='cp -p'
- else
- as_ln_s='ln -s'
- fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.file
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-as_executable_p="test -f"
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" $as_nl"
-
-# CDPATH.
-$as_unset CDPATH
-
-
-
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$ECHO in
-X*--fallback-echo)
- # Remove one level of quotation (which was required for Make).
- ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','`
- ;;
-esac
-
-echo=${ECHO-echo}
-if test "X$1" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
-elif test "X$1" = X--fallback-echo; then
- # Avoid inline document here, it may be left over
- :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
- # Yippee, $echo works!
- :
-else
- # Restart under the correct shell.
- exec $SHELL "$0" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
- # used as fallback echo
- shift
- cat <<EOF
-$*
-EOF
- exit 0
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$ECHO"; then
-if test "X${echo_test_string+set}" != Xset; then
-# find a string as large as possible, as long as the shell can cope with it
- for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
- # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
- if (echo_test_string="`eval $cmd`") 2>/dev/null &&
- echo_test_string="`eval $cmd`" &&
- (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
- then
- break
- fi
- done
-fi
-
-if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- :
-else
- # The Solaris, AIX, and Digital Unix default echo programs unquote
- # backslashes. This makes it impossible to quote backslashes using
- # echo "$something" | sed 's/\\/\\\\/g'
- #
- # So, first we look for a working echo in the user's PATH.
-
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for dir in $PATH /usr/ucb; do
- IFS="$lt_save_ifs"
- if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
- test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- echo="$dir/echo"
- break
- fi
- done
- IFS="$lt_save_ifs"
-
- if test "X$echo" = Xecho; then
- # We didn't find a better echo, so look for alternatives.
- if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- # This shell has a builtin print -r that does the trick.
- echo='print -r'
- elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
- test "X$CONFIG_SHELL" != X/bin/ksh; then
- # If we have ksh, try running configure again with it.
- ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
- export ORIGINAL_CONFIG_SHELL
- CONFIG_SHELL=/bin/ksh
- export CONFIG_SHELL
- exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
- else
- # Try using printf.
- echo='printf %s\n'
- if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- # Cool, printf works
- :
- elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
- test "X$echo_testing_string" = 'X\t' &&
- echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
- export CONFIG_SHELL
- SHELL="$CONFIG_SHELL"
- export SHELL
- echo="$CONFIG_SHELL $0 --fallback-echo"
- elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
- test "X$echo_testing_string" = 'X\t' &&
- echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- echo="$CONFIG_SHELL $0 --fallback-echo"
- else
- # maybe with a smaller string...
- prev=:
-
- for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
- if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
- then
- break
- fi
- prev="$cmd"
- done
-
- if test "$prev" != 'sed 50q "$0"'; then
- echo_test_string=`eval $prev`
- export echo_test_string
- exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
- else
- # Oops. We lost completely, so just stick with echo.
- echo=echo
- fi
- fi
- fi
- fi
-fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-ECHO=$echo
-if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
- ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
-fi
-
-
-
-
-tagnames=${tagnames+${tagnames},}CXX
-
-tagnames=${tagnames+${tagnames},}F77
-
-# Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-exec 6>&1
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_config_libobj_dir=.
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-# Maximum number of lines to put in a shell here document.
-# This variable seems obsolete. It should probably be removed, and
-# only ac_max_sed_lines should be used.
-: ${ac_max_here_lines=38}
-
-# Identity of this package.
-PACKAGE_NAME='ast'
-PACKAGE_TARNAME='ast'
-PACKAGE_VERSION='5.3-1'
-PACKAGE_STRING='ast 5.3-1'
-PACKAGE_BUGREPORT='ussc at star.rl.ac.uk'
-
-ac_unique_file="ast_link.in"
-ac_default_prefix=/usr/local
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#if HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#if STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# if HAVE_STDLIB_H
-# include <stdlib.h>
-# endif
-#endif
-#if HAVE_STRING_H
-# if !STDC_HEADERS && HAVE_MEMORY_H
-# include <memory.h>
-# endif
-# include <string.h>
-#endif
-#if HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#if HAVE_INTTYPES_H
-# include <inttypes.h>
-#else
-# if HAVE_STDINT_H
-# include <stdint.h>
-# endif
-#endif
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar STARLINK STAR_CPPFLAGS STAR_FCFLAGS STAR_FFLAGS STAR_LDFLAGS build build_cpu build_vendor build_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE FC FCFLAGS ac_ct_FC C_FC_FCLINK_MAGIC C_FC_PPFC_FCLINK_MAGIC stardocsdir staretcdir starexamplesdir starfacsdir starhelpdir starnewsdir STAR_DEPENDENCIES_ATTRIBUTES STAR_DEPENDENCIES_CHILDREN STAR_DOCUMENTATION PACKAGE_VERSION_MAJOR PACKAGE_VERSION_MINOR PACKAGE_VERSION_RELEASE PACKAGE_VERSION_INTEGER STAR_MANIFEST_DIR GIT STAR_SOURCE_ROOT_DIR PREDIST PAX TAR CPP host host_cpu host_vendor host_os EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL NOPIC_TRUE NOPIC_FALSE NOTHREADS_TRUE NOTHREADS_FALSE THREADS FCLIBS PERL REAL_FUNCTION_TYPE TRAIL_TYPE MESSGEN LATEX2DVI STAR_LATEX_DOCUMENTATION STAR2HTML PROLAT LIBOBJS LTLIBOBJS'
-ac_subst_files=''
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datadir='${prefix}/share'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-libdir='${exec_prefix}/lib'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-infodir='${prefix}/info'
-mandir='${prefix}/man'
-
-ac_prev=
-for ac_option
-do
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval "$ac_prev=\$ac_option"
- ac_prev=
- continue
- fi
-
- ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_option in
-
- -bindir | --bindir | --bindi | --bind | --bin | --bi)
- ac_prev=bindir ;;
- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir=$ac_optarg ;;
-
- -build | --build | --buil | --bui | --bu)
- ac_prev=build_alias ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build_alias=$ac_optarg ;;
-
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- ac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file=$ac_optarg ;;
-
- --config-cache | -C)
- cache_file=config.cache ;;
-
- -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
- | --da=*)
- datadir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid feature name: $ac_feature" >&2
- { (exit 1); exit 1; }; }
- ac_feature=`echo $ac_feature | sed 's/-/_/g'`
- eval "enable_$ac_feature=no" ;;
-
- -enable-* | --enable-*)
- ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid feature name: $ac_feature" >&2
- { (exit 1); exit 1; }; }
- ac_feature=`echo $ac_feature | sed 's/-/_/g'`
- case $ac_option in
- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
- *) ac_optarg=yes ;;
- esac
- eval "enable_$ac_feature='$ac_optarg'" ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
- | --exec | --exe | --ex)
- ac_prev=exec_prefix ;;
- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
- | --exec=* | --exe=* | --ex=*)
- exec_prefix=$ac_optarg ;;
-
- -gas | --gas | --ga | --g)
- # Obsolete; use --with-gas.
- with_gas=yes ;;
-
- -help | --help | --hel | --he | -h)
- ac_init_help=long ;;
- -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
- ac_init_help=recursive ;;
- -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
- ac_init_help=short ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host_alias ;;
- -host=* | --host=* | --hos=* | --ho=*)
- host_alias=$ac_optarg ;;
-
- -includedir | --includedir | --includedi | --included | --include \
- | --includ | --inclu | --incl | --inc)
- ac_prev=includedir ;;
- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
- | --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir=$ac_optarg ;;
-
- -infodir | --infodir | --infodi | --infod | --info | --inf)
- ac_prev=infodir ;;
- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir=$ac_optarg ;;
-
- -libdir | --libdir | --libdi | --libd)
- ac_prev=libdir ;;
- -libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir=$ac_optarg ;;
-
- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
- | --libexe | --libex | --libe)
- ac_prev=libexecdir ;;
- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
- | --libexe=* | --libex=* | --libe=*)
- libexecdir=$ac_optarg ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst \
- | --locals | --local | --loca | --loc | --lo)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* \
- | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
- localstatedir=$ac_optarg ;;
-
- -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
- ac_prev=mandir ;;
- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir=$ac_optarg ;;
-
- -nfp | --nfp | --nf)
- # Obsolete; use --without-fp.
- with_fp=no ;;
-
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c | -n)
- no_create=yes ;;
-
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
- no_recursion=yes ;;
-
- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
- | --oldin | --oldi | --old | --ol | --o)
- ac_prev=oldincludedir ;;
- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir=$ac_optarg ;;
-
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- ac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix=$ac_optarg ;;
-
- -program-prefix | --program-prefix | --program-prefi | --program-pref \
- | --program-pre | --program-pr | --program-p)
- ac_prev=program_prefix ;;
- -program-prefix=* | --program-prefix=* | --program-prefi=* \
- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix=$ac_optarg ;;
-
- -program-suffix | --program-suffix | --program-suffi | --program-suff \
- | --program-suf | --program-su | --program-s)
- ac_prev=program_suffix ;;
- -program-suffix=* | --program-suffix=* | --program-suffi=* \
- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix=$ac_optarg ;;
-
- -program-transform-name | --program-transform-name \
- | --program-transform-nam | --program-transform-na \
- | --program-transform-n | --program-transform- \
- | --program-transform | --program-transfor \
- | --program-transfo | --program-transf \
- | --program-trans | --program-tran \
- | --progr-tra | --program-tr | --program-t)
- ac_prev=program_transform_name ;;
- -program-transform-name=* | --program-transform-name=* \
- | --program-transform-nam=* | --program-transform-na=* \
- | --program-transform-n=* | --program-transform-=* \
- | --program-transform=* | --program-transfor=* \
- | --program-transfo=* | --program-transf=* \
- | --program-trans=* | --program-tran=* \
- | --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name=$ac_optarg ;;
-
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- silent=yes ;;
-
- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
- ac_prev=sbindir ;;
- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
- | --sbi=* | --sb=*)
- sbindir=$ac_optarg ;;
-
- -sharedstatedir | --sharedstatedir | --sharedstatedi \
- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
- | --sharedst | --shareds | --shared | --share | --shar \
- | --sha | --sh)
- ac_prev=sharedstatedir ;;
- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
- | --sha=* | --sh=*)
- sharedstatedir=$ac_optarg ;;
-
- -site | --site | --sit)
- ac_prev=site ;;
- -site=* | --site=* | --sit=*)
- site=$ac_optarg ;;
-
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- ac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir=$ac_optarg ;;
-
- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
- | --syscon | --sysco | --sysc | --sys | --sy)
- ac_prev=sysconfdir ;;
- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir=$ac_optarg ;;
-
- -target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target_alias ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target_alias=$ac_optarg ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers | -V)
- ac_init_version=: ;;
-
- -with-* | --with-*)
- ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid package name: $ac_package" >&2
- { (exit 1); exit 1; }; }
- ac_package=`echo $ac_package| sed 's/-/_/g'`
- case $ac_option in
- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
- *) ac_optarg=yes ;;
- esac
- eval "with_$ac_package='$ac_optarg'" ;;
-
- -without-* | --without-*)
- ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid package name: $ac_package" >&2
- { (exit 1); exit 1; }; }
- ac_package=`echo $ac_package | sed 's/-/_/g'`
- eval "with_$ac_package=no" ;;
-
- --x)
- # Obsolete; use --with-x.
- with_x=yes ;;
-
- -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
- | --x-incl | --x-inc | --x-in | --x-i)
- ac_prev=x_includes ;;
- -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
- | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes=$ac_optarg ;;
-
- -x-libraries | --x-libraries | --x-librarie | --x-librari \
- | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
- ac_prev=x_libraries ;;
- -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries=$ac_optarg ;;
-
- -*) { echo "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; }
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
- { (exit 1); exit 1; }; }
- ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
- eval "$ac_envvar='$ac_optarg'"
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- echo "$as_me: WARNING: invalid host type: $ac_option" >&2
- : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
- ;;
-
- esac
-done
-
-if test -n "$ac_prev"; then
- ac_option=--`echo $ac_prev | sed 's/_/-/g'`
- { echo "$as_me: error: missing argument to $ac_option" >&2
- { (exit 1); exit 1; }; }
-fi
-
-# Be sure to have absolute paths.
-for ac_var in exec_prefix prefix
-do
- eval ac_val=$`echo $ac_var`
- case $ac_val in
- [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
- { (exit 1); exit 1; }; };;
- esac
-done
-
-# Be sure to have absolute paths.
-for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
- localstatedir libdir includedir oldincludedir infodir mandir
-do
- eval ac_val=$`echo $ac_var`
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) ;;
- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
- { (exit 1); exit 1; }; };;
- esac
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
- if test "x$build_alias" = x; then
- cross_compiling=maybe
- echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
- If a cross compiler is detected then cross compile mode will be used." >&2
- elif test "x$build_alias" != "x$host_alias"; then
- cross_compiling=yes
- fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
- ac_srcdir_defaulted=yes
- # Try the directory containing this script, then its parent.
- ac_confdir=`(dirname "$0") 2>/dev/null ||
-$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$0" : 'X\(//\)[^/]' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$0" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- srcdir=$ac_confdir
- if test ! -r $srcdir/$ac_unique_file; then
- srcdir=..
- fi
-else
- ac_srcdir_defaulted=no
-fi
-if test ! -r $srcdir/$ac_unique_file; then
- if test "$ac_srcdir_defaulted" = yes; then
- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
- { (exit 1); exit 1; }; }
- else
- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
- { (exit 1); exit 1; }; }
- fi
-fi
-(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
- { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
- { (exit 1); exit 1; }; }
-srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
-ac_env_build_alias_set=${build_alias+set}
-ac_env_build_alias_value=$build_alias
-ac_cv_env_build_alias_set=${build_alias+set}
-ac_cv_env_build_alias_value=$build_alias
-ac_env_host_alias_set=${host_alias+set}
-ac_env_host_alias_value=$host_alias
-ac_cv_env_host_alias_set=${host_alias+set}
-ac_cv_env_host_alias_value=$host_alias
-ac_env_target_alias_set=${target_alias+set}
-ac_env_target_alias_value=$target_alias
-ac_cv_env_target_alias_set=${target_alias+set}
-ac_cv_env_target_alias_value=$target_alias
-ac_env_STARLINK_set=${STARLINK+set}
-ac_env_STARLINK_value=$STARLINK
-ac_cv_env_STARLINK_set=${STARLINK+set}
-ac_cv_env_STARLINK_value=$STARLINK
-ac_env_CC_set=${CC+set}
-ac_env_CC_value=$CC
-ac_cv_env_CC_set=${CC+set}
-ac_cv_env_CC_value=$CC
-ac_env_CFLAGS_set=${CFLAGS+set}
-ac_env_CFLAGS_value=$CFLAGS
-ac_cv_env_CFLAGS_set=${CFLAGS+set}
-ac_cv_env_CFLAGS_value=$CFLAGS
-ac_env_LDFLAGS_set=${LDFLAGS+set}
-ac_env_LDFLAGS_value=$LDFLAGS
-ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
-ac_cv_env_LDFLAGS_value=$LDFLAGS
-ac_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_env_CPPFLAGS_value=$CPPFLAGS
-ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_cv_env_CPPFLAGS_value=$CPPFLAGS
-ac_env_FC_set=${FC+set}
-ac_env_FC_value=$FC
-ac_cv_env_FC_set=${FC+set}
-ac_cv_env_FC_value=$FC
-ac_env_FCFLAGS_set=${FCFLAGS+set}
-ac_env_FCFLAGS_value=$FCFLAGS
-ac_cv_env_FCFLAGS_set=${FCFLAGS+set}
-ac_cv_env_FCFLAGS_value=$FCFLAGS
-ac_env_CPP_set=${CPP+set}
-ac_env_CPP_value=$CPP
-ac_cv_env_CPP_set=${CPP+set}
-ac_cv_env_CPP_value=$CPP
-ac_env_CXX_set=${CXX+set}
-ac_env_CXX_value=$CXX
-ac_cv_env_CXX_set=${CXX+set}
-ac_cv_env_CXX_value=$CXX
-ac_env_CXXFLAGS_set=${CXXFLAGS+set}
-ac_env_CXXFLAGS_value=$CXXFLAGS
-ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
-ac_cv_env_CXXFLAGS_value=$CXXFLAGS
-ac_env_CXXCPP_set=${CXXCPP+set}
-ac_env_CXXCPP_value=$CXXCPP
-ac_cv_env_CXXCPP_set=${CXXCPP+set}
-ac_cv_env_CXXCPP_value=$CXXCPP
-ac_env_F77_set=${F77+set}
-ac_env_F77_value=$F77
-ac_cv_env_F77_set=${F77+set}
-ac_cv_env_F77_value=$F77
-ac_env_FFLAGS_set=${FFLAGS+set}
-ac_env_FFLAGS_value=$FFLAGS
-ac_cv_env_FFLAGS_set=${FFLAGS+set}
-ac_cv_env_FFLAGS_value=$FFLAGS
-ac_env_MESSGEN_set=${MESSGEN+set}
-ac_env_MESSGEN_value=$MESSGEN
-ac_cv_env_MESSGEN_set=${MESSGEN+set}
-ac_cv_env_MESSGEN_value=$MESSGEN
-ac_env_STAR2HTML_set=${STAR2HTML+set}
-ac_env_STAR2HTML_value=$STAR2HTML
-ac_cv_env_STAR2HTML_set=${STAR2HTML+set}
-ac_cv_env_STAR2HTML_value=$STAR2HTML
-ac_env_PROLAT_set=${PROLAT+set}
-ac_env_PROLAT_value=$PROLAT
-ac_cv_env_PROLAT_set=${PROLAT+set}
-ac_cv_env_PROLAT_value=$PROLAT
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat <<_ACEOF
-\`configure' configures ast 5.3-1 to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE. See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
- -h, --help display this help and exit
- --help=short display options specific to this package
- --help=recursive display the short help of all the included packages
- -V, --version display version information and exit
- -q, --quiet, --silent do not print \`checking...' messages
- --cache-file=FILE cache test results in FILE [disabled]
- -C, --config-cache alias for \`--cache-file=config.cache'
- -n, --no-create do not create output files
- --srcdir=DIR find the sources in DIR [configure dir or \`..']
-
-_ACEOF
-
- cat <<_ACEOF
-Installation directories:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --datadir=DIR read-only architecture-independent data [PREFIX/share]
- --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc [/usr/include]
- --infodir=DIR info documentation [PREFIX/info]
- --mandir=DIR man documentation [PREFIX/man]
-_ACEOF
-
- cat <<\_ACEOF
-
-Program names:
- --program-prefix=PREFIX prepend PREFIX to installed program names
- --program-suffix=SUFFIX append SUFFIX to installed program names
- --program-transform-name=PROGRAM run sed PROGRAM on installed program names
-
-System types:
- --build=BUILD configure for building on BUILD [guessed]
- --host=HOST cross-compile to build programs to run on HOST [BUILD]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
- case $ac_init_help in
- short | recursive ) echo "Configuration of ast 5.3-1:";;
- esac
- cat <<\_ACEOF
-
-Optional Features:
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --disable-dependency-tracking speeds up one-time build
- --enable-dependency-tracking do not reject slow dependency extractors
- --enable-shared[=PKGS]
- build shared libraries [default=yes]
- --enable-static[=PKGS]
- build static libraries [default=yes]
- --enable-fast-install[=PKGS]
- optimize for fast installation [default=yes]
- --disable-libtool-lock avoid locking (might break parallel builds)
-
-Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-starlink Starlink tree to use (default
- ${STARLINK:=/stardev/git/starlink/star})
- --without-stardocs Do not install built documentation (default --with)
- --with-starmem use starmem library for memory management
- --with-memdebug enable AST memory leak debugging functions
- --with-gnu-ld assume the C compiler uses GNU ld [default=no]
- --with-pic try to use only PIC/non-PIC objects [default=use
- both]
- --with-tags[=TAGS]
- include additional configurations [automatic]
- --without-pthreads Build package without POSIX threads support
-
-Some influential environment variables:
- STARLINK Location of a current Starlink tree (used if necessary)
- CC C compiler command
- CFLAGS C compiler flags
- LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
- nonstandard directory <lib dir>
- CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
- headers in a nonstandard directory <include dir>
- FC Fortran compiler command
- FCFLAGS Fortran compiler flags
- CPP C preprocessor
- CXX C++ compiler command
- CXXFLAGS C++ compiler flags
- CXXCPP C++ preprocessor
- F77 Fortran 77 compiler command
- FFLAGS Fortran 77 compiler flags
- MESSGEN Location of the messgen application
- STAR2HTML Location of the star2html application
- PROLAT Location of the prolat application
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to <ussc at star.rl.ac.uk>.
-_ACEOF
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- ac_popdir=`pwd`
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d $ac_dir || continue
- ac_builddir=.
-
-if test "$ac_dir" != .; then
- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
- # A "../" for each directory in $ac_dir_suffix.
- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
- ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
- .) # No --srcdir option. We are building in place.
- ac_srcdir=.
- if test -z "$ac_top_builddir"; then
- ac_top_srcdir=.
- else
- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
- fi ;;
- [\\/]* | ?:[\\/]* ) # Absolute path.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir ;;
- *) # Relative path.
- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
- case "$ac_dir" in
- .) ac_abs_builddir=`pwd`;;
- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
- *) ac_abs_builddir=`pwd`/"$ac_dir";;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
- case ${ac_top_builddir}. in
- .) ac_abs_top_builddir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
- case $ac_srcdir in
- .) ac_abs_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
- case $ac_top_srcdir in
- .) ac_abs_top_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
- esac;;
-esac
-
- cd $ac_dir
- # Check for guested configure; otherwise get Cygnus style configure.
- if test -f $ac_srcdir/configure.gnu; then
- echo
- $SHELL $ac_srcdir/configure.gnu --help=recursive
- elif test -f $ac_srcdir/configure; then
- echo
- $SHELL $ac_srcdir/configure --help=recursive
- elif test -f $ac_srcdir/configure.ac ||
- test -f $ac_srcdir/configure.in; then
- echo
- $ac_configure --help
- else
- echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi
- cd $ac_popdir
- done
-fi
-
-test -n "$ac_init_help" && exit 0
-if $ac_init_version; then
- cat <<\_ACEOF
-ast configure 5.3-1
-generated by Starlink Autoconf 2.59
-
-Copyright (C) 2003 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
- exit 0
-fi
-exec 5>config.log
-cat >&5 <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by ast $as_me 5.3-1, which was
-generated by Starlink Autoconf 2.59. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
-
-/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-hostinfo = `(hostinfo) 2>/dev/null || echo unknown`
-/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
-/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- echo "PATH: $as_dir"
-done
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_sep=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
- for ac_arg
- do
- case $ac_arg in
- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- continue ;;
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
- ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
- 2)
- ac_configure_args1="$ac_configure_args1 '$ac_arg'"
- if test $ac_must_keep_next = true; then
- ac_must_keep_next=false # Got value, back to normal.
- else
- case $ac_arg in
- *=* | --config-cache | -C | -disable-* | --disable-* \
- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
- | -with-* | --with-* | -without-* | --without-* | --x)
- case "$ac_configure_args0 " in
- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
- esac
- ;;
- -* ) ac_must_keep_next=true ;;
- esac
- fi
- ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
- # Get rid of the leading space.
- ac_sep=" "
- ;;
- esac
- done
-done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log. We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Be sure not to use single quotes in there, as some shells,
-# such as our DU 5.0 friend, will then `close' the trap.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- cat <<\_ASBOX
-## ---------------- ##
-## Cache variables. ##
-## ---------------- ##
-_ASBOX
- echo
- # The following way of writing the cache mishandles newlines in values,
-{
- (set) 2>&1 |
- case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
- *ac_space=\ *)
- sed -n \
- "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
- ;;
- *)
- sed -n \
- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
- ;;
- esac;
-}
- echo
-
- cat <<\_ASBOX
-## ----------------- ##
-## Output variables. ##
-## ----------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=$`echo $ac_var`
- echo "$ac_var='"'"'$ac_val'"'"'"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- cat <<\_ASBOX
-## ------------- ##
-## Output files. ##
-## ------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=$`echo $ac_var`
- echo "$ac_var='"'"'$ac_val'"'"'"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- cat <<\_ASBOX
-## ----------- ##
-## confdefs.h. ##
-## ----------- ##
-_ASBOX
- echo
- sed "/^$/d" confdefs.h | sort
- echo
- fi
- test "$ac_signal" != 0 &&
- echo "$as_me: caught signal $ac_signal"
- echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core &&
- rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
- ' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo >confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
- if test "x$prefix" != xNONE; then
- CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
- else
- CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
- fi
-fi
-for ac_site_file in $CONFIG_SITE; do
- if test -r "$ac_site_file"; then
- { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file"
- fi
-done
-
-if test -r "$cache_file"; then
- # Some versions of bash will fail to source /dev/null (special
- # files actually), so we avoid doing that.
- if test -f "$cache_file"; then
- { echo "$as_me:$LINENO: loading cache $cache_file" >&5
-echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . $cache_file;;
- *) . ./$cache_file;;
- esac
- fi
-else
- { echo "$as_me:$LINENO: creating cache $cache_file" >&5
-echo "$as_me: creating cache $cache_file" >&6;}
- >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in `(set) 2>&1 |
- sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
- eval ac_old_set=\$ac_cv_env_${ac_var}_set
- eval ac_new_set=\$ac_env_${ac_var}_set
- eval ac_old_val="\$ac_cv_env_${ac_var}_value"
- eval ac_new_val="\$ac_env_${ac_var}_value"
- case $ac_old_set,$ac_new_set in
- set,)
- { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,);;
- *)
- if test "x$ac_old_val" != "x$ac_new_val"; then
- { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
-echo "$as_me: former value: $ac_old_val" >&2;}
- { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
-echo "$as_me: current value: $ac_new_val" >&2;}
- ac_cache_corrupted=:
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
- ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
- *) ac_arg=$ac_var=$ac_new_val ;;
- esac
- case " $ac_configure_args " in
- *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
- *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-am__api_version="1.9"
-ac_aux_dir=
-for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
- if test -f $ac_dir/install-sh; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f $ac_dir/install.sh; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f $ac_dir/shtool; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
-echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
- { (exit 1); exit 1; }; }
-fi
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"
-ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
-
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in
- ./ | .// | /cC/* | \
- /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
- ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
- /usr/ucb/* ) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
- if test $ac_prog = install &&
- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- elif test $ac_prog = install &&
- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # program-specific install script used by HP pwplus--don't use.
- :
- else
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
- break 3
- fi
- fi
- done
- done
- ;;
-esac
-done
-
-
-fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL=$ac_cv_path_install
- else
- # As a last resort, use the slow shell script. We don't cache a
- # path for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the path is relative.
- INSTALL=$ac_install_sh
- fi
-fi
-echo "$as_me:$LINENO: result: $INSTALL" >&5
-echo "${ECHO_T}$INSTALL" >&6
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-echo "$as_me:$LINENO: checking whether build environment is sane" >&5
-echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
-# Just in case
-sleep 1
-echo timestamp > conftest.file
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments. Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
- set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
- if test "$*" = "X"; then
- # -L didn't work.
- set X `ls -t $srcdir/configure conftest.file`
- fi
- rm -f conftest.file
- if test "$*" != "X $srcdir/configure conftest.file" \
- && test "$*" != "X conftest.file $srcdir/configure"; then
-
- # If neither matched, then we have a broken ls. This can happen
- # if, for instance, CONFIG_SHELL is bash and it inherits a
- # broken ls alias from the environment. This has actually
- # happened. Such a system could not be considered "sane".
- { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken
-alias in your environment" >&5
-echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken
-alias in your environment" >&2;}
- { (exit 1); exit 1; }; }
- fi
-
- test "$2" = conftest.file
- )
-then
- # Ok.
- :
-else
- { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
-Check your system clock" >&5
-echo "$as_me: error: newly created file is older than distributed files!
-Check your system clock" >&2;}
- { (exit 1); exit 1; }; }
-fi
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-test "$program_prefix" != NONE &&
- program_transform_name="s,^,$program_prefix,;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
- program_transform_name="s,\$,$program_suffix,;$program_transform_name"
-# Double any \ or $. echo might interpret backslashes.
-# By default was `s,x,x', remove it if useless.
-cat <<\_ACEOF >conftest.sed
-s/[\\$]/&&/g;s/;s,x,x,$//
-_ACEOF
-program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
-rm conftest.sed
-
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
-
-test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
-# Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
- am_missing_run="$MISSING --run "
-else
- am_missing_run=
- { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
-echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
-fi
-
-if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
- # We used to keeping the `.' as first argument, in order to
- # allow $(mkdir_p) to be used without argument. As in
- # $(mkdir_p) $(somedir)
- # where $(somedir) is conditionally defined. However this is wrong
- # for two reasons:
- # 1. if the package is installed by a user who cannot write `.'
- # make install will fail,
- # 2. the above comment should most certainly read
- # $(mkdir_p) $(DESTDIR)$(somedir)
- # so it does not work when $(somedir) is undefined and
- # $(DESTDIR) is not.
- # To support the latter case, we have to write
- # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
- # so the `.' trick is pointless.
- mkdir_p='mkdir -p --'
-else
- # On NextStep and OpenStep, the `mkdir' command does not
- # recognize any option. It will interpret all options as
- # directories to create, and then abort because `.' already
- # exists.
- for d in ./-p ./--version;
- do
- test -d $d && rmdir $d
- done
- # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
- if test -f "$ac_aux_dir/mkinstalldirs"; then
- mkdir_p='$(mkinstalldirs)'
- else
- mkdir_p='$(install_sh) -d'
- fi
-fi
-
-for ac_prog in gawk mawk nawk awk
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_AWK+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$AWK"; then
- ac_cv_prog_AWK="$AWK" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_AWK="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-AWK=$ac_cv_prog_AWK
-if test -n "$AWK"; then
- echo "$as_me:$LINENO: result: $AWK" >&5
-echo "${ECHO_T}$AWK" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$AWK" && break
-done
-
-echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.make <<\_ACEOF
-all:
- @echo 'ac_maketemp="$(MAKE)"'
-_ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
-if test -n "$ac_maketemp"; then
- eval ac_cv_prog_make_${ac_make}_set=yes
-else
- eval ac_cv_prog_make_${ac_make}_set=no
-fi
-rm -f conftest.make
-fi
-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
- SET_MAKE=
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
- am__leading_dot=.
-else
- am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-# test to see if srcdir already configured
-if test "`cd $srcdir && pwd`" != "`pwd`" &&
- test -f $srcdir/config.status; then
- { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
-echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-# test whether we have cygpath
-if test -z "$CYGPATH_W"; then
- if (cygpath --version) >/dev/null 2>/dev/null; then
- CYGPATH_W='cygpath -w'
- else
- CYGPATH_W=echo
- fi
-fi
-
-
-# Define the identity of the package.
- PACKAGE='ast'
- VERSION='5.3-1'
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE "$PACKAGE"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define VERSION "$VERSION"
-_ACEOF
-
-# Some tools Automake needs.
-
-ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
-
-
-AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
-
-
-AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
-
-
-AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
-
-
-MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
-
-install_sh=${install_sh-"$am_aux_dir/install-sh"}
-
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'. However `strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-if test "$cross_compiling" != no; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
-set dummy ${ac_tool_prefix}strip; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_STRIP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$STRIP"; then
- ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_STRIP="${ac_tool_prefix}strip"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-STRIP=$ac_cv_prog_STRIP
-if test -n "$STRIP"; then
- echo "$as_me:$LINENO: result: $STRIP" >&5
-echo "${ECHO_T}$STRIP" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_STRIP"; then
- ac_ct_STRIP=$STRIP
- # Extract the first word of "strip", so it can be a program name with args.
-set dummy strip; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_STRIP"; then
- ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_STRIP="strip"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
- test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
-fi
-fi
-ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
-if test -n "$ac_ct_STRIP"; then
- echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
-echo "${ECHO_T}$ac_ct_STRIP" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- STRIP=$ac_ct_STRIP
-else
- STRIP="$ac_cv_prog_STRIP"
-fi
-
-fi
-INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
-
-# We need awk for the "check" target. The system "awk" is bad on
-# some platforms.
-# Always define AMTAR for backward compatibility.
-
-AMTAR=${AMTAR-"${am_missing_run}tar"}
-
-am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
-
-
-
-
-
-
-
-
-# Include defaults for Starlink configurations
-# Make sure we can run config.sub.
-$ac_config_sub sun4 >/dev/null 2>&1 ||
- { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
-echo "$as_me: error: cannot run $ac_config_sub" >&2;}
- { (exit 1); exit 1; }; }
-
-echo "$as_me:$LINENO: checking build system type" >&5
-echo $ECHO_N "checking build system type... $ECHO_C" >&6
-if test "${ac_cv_build+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_build_alias=$build_alias
-test -z "$ac_cv_build_alias" &&
- ac_cv_build_alias=`$ac_config_guess`
-test -z "$ac_cv_build_alias" &&
- { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
-echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
- { (exit 1); exit 1; }; }
-ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
- { (exit 1); exit 1; }; }
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_build" >&5
-echo "${ECHO_T}$ac_cv_build" >&6
-build=$ac_cv_build
-build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-
-DEPDIR="${am__leading_dot}deps"
-
- ac_config_commands="$ac_config_commands depfiles"
-
-
-am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
- @echo done
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
-echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# We grep out `Entering directory' and `Leaving directory'
-# messages which can occur if `w' ends up in MAKEFLAGS.
-# In particular we don't look at `^make:' because GNU make might
-# be invoked under some other name (usually "gmake"), in which
-# case it prints its new name instead of `make'.
-if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
- am__include=include
- am__quote=
- _am_result=GNU
-fi
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
- echo '.include "confinc"' > confmf
- if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
- am__include=.include
- am__quote="\""
- _am_result=BSD
- fi
-fi
-
-
-echo "$as_me:$LINENO: result: $_am_result" >&5
-echo "${ECHO_T}$_am_result" >&6
-rm -f confinc confmf
-
-# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given.
-if test "${enable_dependency_tracking+set}" = set; then
- enableval="$enable_dependency_tracking"
-
-fi;
-if test "x$enable_dependency_tracking" != xno; then
- am_depcomp="$ac_aux_dir/depcomp"
- AMDEPBACKSLASH='\'
-fi
-
-
-if test "x$enable_dependency_tracking" != xno; then
- AMDEP_TRUE=
- AMDEP_FALSE='#'
-else
- AMDEP_TRUE='#'
- AMDEP_FALSE=
-fi
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="gcc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- CC=$ac_ct_CC
-else
- CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="cc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- CC=$ac_ct_CC
-else
- CC="$ac_cv_prog_CC"
-fi
-
-fi
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# != 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
- fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$ac_ct_CC" && break
-done
-
- CC=$ac_ct_CC
-fi
-
-fi
-
-
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-
-# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
- "checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
- (eval $ac_compiler --version </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
- (eval $ac_compiler -v </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
- (eval $ac_compiler -V </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
- (eval $ac_link_default) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # Find the output, starting from the most likely. This scheme is
-# not robust to junk in `.', hence go to wildcards (a.*) only as a last
-# resort.
-
-# Be careful to initialize this variable, since it used to be cached.
-# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
-ac_cv_exeext=
-# b.out is created by i960 compilers.
-for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
- ;;
- conftest.$ac_ext )
- # This is the source file.
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- # FIXME: I believe we export ac_cv_exeext for Libtool,
- # but it would be cool to find out if it's true. Does anybody
- # maintain Libtool? --akim.
- export ac_cv_exeext
- break;;
- * )
- break;;
- esac
-done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details." >&5
-echo "$as_me: error: C compiler cannot create executables
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
-fi
-
-ac_exeext=$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6
-
-# Check the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
- if { ac_try='./$ac_file'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
- fi
- fi
-fi
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-rm -f a.out a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-# Check the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
-echo "$as_me:$LINENO: result: $cross_compiling" >&5
-echo "${ECHO_T}$cross_compiling" >&6
-
-echo "$as_me:$LINENO: checking for suffix of executables" >&5
-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- export ac_cv_exeext
- break;;
- * ) break;;
- esac
-done
-else
- { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-echo "${ECHO_T}$ac_cv_exeext" >&6
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-echo "$as_me:$LINENO: checking for suffix of object files" >&5
-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
-if test "${ac_cv_objext+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-echo "${ECHO_T}$ac_cv_objext" >&6
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_compiler_gnu=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_compiler_gnu=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
-GCC=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-CFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_g+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_prog_cc_g=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_prog_cc_g=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_stdc+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_prog_cc_stdc=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std1 is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std1. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX -qlanglvl=ansi
-# Ultrix and OSF/1 -std1
-# HP-UX 10.20 and later -Ae
-# HP-UX older versions -Aa -D_HPUX_SOURCE
-# SVR4 -Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_prog_cc_stdc=$ac_arg
-break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext
-done
-rm -f conftest.$ac_ext conftest.$ac_objext
-CC=$ac_save_CC
-
-fi
-
-case "x$ac_cv_prog_cc_stdc" in
- x|xno)
- echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
- *)
- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
- CC="$CC $ac_cv_prog_cc_stdc" ;;
-esac
-
-# Some people use a C++ compiler to compile C. Since we use `exit',
-# in C++ we need to declare it. In case someone uses the same compiler
-# for both compiling C and C++ we need to have the C++ compiler decide
-# the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
-#ifndef __cplusplus
- choke me
-#endif
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- for ac_declaration in \
- '' \
- 'extern "C" void std::exit (int) throw (); using std::exit;' \
- 'extern "C" void std::exit (int); using std::exit;' \
- 'extern "C" void exit (int) throw ();' \
- 'extern "C" void exit (int);' \
- 'void exit (int);'
-do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_declaration
-#include <stdlib.h>
-int
-main ()
-{
-exit (42);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_declaration
-int
-main ()
-{
-exit (42);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
- echo '#ifdef __cplusplus' >>confdefs.h
- echo $ac_declaration >>confdefs.h
- echo '#endif' >>confdefs.h
-fi
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-depcc="$CC" am_compiler_list=
-
-echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
-echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
- # We make a subdir and do the tests there. Otherwise we can end up
- # making bogus files that we don't know about and never remove. For
- # instance it was reported that on HP-UX the gcc test will end up
- # making a dummy file named `D' -- because `-MD' means `put the output
- # in D'.
- mkdir conftest.dir
- # Copy depcomp to subdir because otherwise we won't find it if we're
- # using a relative directory.
- cp "$am_depcomp" conftest.dir
- cd conftest.dir
- # We will build objects and dependencies in a subdirectory because
- # it helps to detect inapplicable dependency modes. For instance
- # both Tru64's cc and ICC support -MD to output dependencies as a
- # side effect of compilation, but ICC will put the dependencies in
- # the current directory while Tru64 will put them in the object
- # directory.
- mkdir sub
-
- am_cv_CC_dependencies_compiler_type=none
- if test "$am_compiler_list" = ""; then
- am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
- fi
- for depmode in $am_compiler_list; do
- # Setup a source with many dependencies, because some compilers
- # like to wrap large dependency lists on column 80 (with \), and
- # we should not choose a depcomp mode which is confused by this.
- #
- # We need to recreate these files for each test, as the compiler may
- # overwrite some of them when testing with obscure command lines.
- # This happens at least with the AIX C compiler.
- : > sub/conftest.c
- for i in 1 2 3 4 5 6; do
- echo '#include "conftst'$i'.h"' >> sub/conftest.c
- # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
- # Solaris 8's {/usr,}/bin/sh.
- touch sub/conftst$i.h
- done
- echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
- case $depmode in
- nosideeffect)
- # after this tag, mechanisms are not by side-effect, so they'll
- # only be used when explicitly requested
- if test "x$enable_dependency_tracking" = xyes; then
- continue
- else
- break
- fi
- ;;
- none) break ;;
- esac
- # We check with `-c' and `-o' for the sake of the "dashmstdout"
- # mode. It turns out that the SunPro C++ compiler does not properly
- # handle `-M -o', and we need to detect this.
- if depmode=$depmode \
- source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
- depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
- $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
- >/dev/null 2>conftest.err &&
- grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
- grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
- ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
- # icc doesn't choke on unknown options, it will just issue warnings
- # or remarks (even with -Werror). So we grep stderr for any message
- # that says an option was ignored or not supported.
- # When given -MP, icc 7.0 and 7.1 complain thusly:
- # icc: Command line warning: ignoring option '-M'; no argument required
- # The diagnosis changed in icc 8.0:
- # icc: Command line remark: option '-MP' not supported
- if (grep 'ignoring option' conftest.err ||
- grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
- am_cv_CC_dependencies_compiler_type=$depmode
- break
- fi
- fi
- done
-
- cd ..
- rm -rf conftest.dir
-else
- am_cv_CC_dependencies_compiler_type=none
-fi
-
-fi
-echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
-echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
-CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
-
-
-
-if
- test "x$enable_dependency_tracking" != xno \
- && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
- am__fastdepCC_TRUE=
- am__fastdepCC_FALSE='#'
-else
- am__fastdepCC_TRUE='#'
- am__fastdepCC_FALSE=
-fi
-
-
-ac_ext=${FC_SRCEXT-f}
-ac_compile='$FC -c $FCFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- for ac_prog in g95 lf95 f95 fort xlf95 ifc efc pgf95 gfortran f90 xlf90 pgf90 epcf90 g77 f77 xlf frt pgf77 fort77 fl32 af77 'f77 -old_f77'
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_FC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$FC"; then
- ac_cv_prog_FC="$FC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_FC="$ac_tool_prefix$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-FC=$ac_cv_prog_FC
-if test -n "$FC"; then
- echo "$as_me:$LINENO: result: $FC" >&5
-echo "${ECHO_T}$FC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$FC" && break
- done
-fi
-if test -z "$FC"; then
- ac_ct_FC=$FC
- for ac_prog in g95 lf95 f95 fort xlf95 ifc efc pgf95 gfortran f90 xlf90 pgf90 epcf90 g77 f77 xlf frt pgf77 fort77 fl32 af77 'f77 -old_f77'
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_FC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_FC"; then
- ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_FC="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-ac_ct_FC=$ac_cv_prog_ac_ct_FC
-if test -n "$ac_ct_FC"; then
- echo "$as_me:$LINENO: result: $ac_ct_FC" >&5
-echo "${ECHO_T}$ac_ct_FC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$ac_ct_FC" && break
-done
-
- FC=$ac_ct_FC
-fi
-
-
-# Provide some information about the compiler.
-echo "$as_me:3221:" \
- "checking for Fortran compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
- (eval $ac_compiler --version </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
- (eval $ac_compiler -v </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
- (eval $ac_compiler -V </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-rm -f a.out
-
-
-ac_mod_ext=
-ac_fc_mod_uppercase=no
-cat > conftest.$ac_ext << \_ACEOF
- module conftest
- implicit none
- integer :: i
- end module conftest
-_ACEOF
-{ (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-echo "$as_me:$LINENO: checking for suffix of module files" >&5
-echo $ECHO_N "checking for suffix of module files... $ECHO_C" >&6
-for ac_mod_file in conftest.mod conftest.MOD conftest.M CONFTEST.MOD none
-do
- if test -f $ac_mod_file; then
- break;
- fi
-done
-rm -f conftest.$ac_ext conftest.$ac_exe_ext conftest.mod conftest.MOD conftest.M CONFTEST.MOD
-#
-case $ac_mod_file in
- conftest.mod)
- ac_mod_ext=mod
- ;;
- conftest.MOD)
- ac_mod_ext=MOD
- ;;
- conftest.M)
- ac_mod_ext=M
- ;;
- CONFTEST.MOD)
- ac_mod_ext=MOD
- ac_fc_mod_uppercase=yes
- ;;
- none)
- { echo "$as_me:$LINENO: WARNING: Could not find Fortran module file extension." >&5
-echo "$as_me: WARNING: Could not find Fortran module file extension." >&2;}
- ;;
-esac
-
-if test $ac_mod_file != none; then
- echo "$as_me:$LINENO: result: $ac_mod_ext" >&5
-echo "${ECHO_T}$ac_mod_ext" >&6
-fi
-if test $ac_fc_mod_uppercase = yes; then
- { echo "$as_me:$LINENO: Fortran module filenames are uppercase." >&5
-echo "$as_me: Fortran module filenames are uppercase." >&6;}
-fi
-
-# If we don't use `.F' as extension, the preprocessor is not run on the
-# input file. (Note that this only needs to work for GNU compilers.)
-ac_save_ext=$ac_ext
-ac_ext=F
-echo "$as_me:$LINENO: checking whether we are using the GNU Fortran compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU Fortran compiler... $ECHO_C" >&6
-if test "${ac_cv_fc_compiler_gnu+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
- program main
-#ifndef __GNUC__
- choke me
-#endif
-
- end
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_fc_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_compiler_gnu=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_compiler_gnu=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_fc_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_fc_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_fc_compiler_gnu" >&6
-ac_ext=$ac_save_ext
-ac_test_FFLAGS=${FCFLAGS+set}
-ac_save_FFLAGS=$FCFLAGS
-FCFLAGS=
-echo "$as_me:$LINENO: checking whether $FC accepts -g" >&5
-echo $ECHO_N "checking whether $FC accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_fc_g+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- FCFLAGS=-g
-cat >conftest.$ac_ext <<_ACEOF
- program main
-
- end
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_fc_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_prog_fc_g=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_prog_fc_g=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_fc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_fc_g" >&6
-if test "$ac_test_FFLAGS" = set; then
- FCFLAGS=$ac_save_FFLAGS
-elif test $ac_cv_prog_fc_g = yes; then
- if test "x$ac_cv_fc_compiler_gnu" = xyes; then
- FCFLAGS="-g -O2"
- else
- FCFLAGS="-g"
- fi
-else
- if test "x$ac_cv_fc_compiler_gnu" = xyes; then
- FCFLAGS="-O2"
- else
- FCFLAGS=
- fi
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-##
-
-
-
-
-
-
-test -n "$_star_per_package_dirs" || _star_per_package_dirs=false
-test -n "$_star_docs_only" || _star_docs_only=false
-
-
-# Ensure that STARLINK has a value, defaulting to
-# /stardev/git/starlink/star. Note that this directory may be
-# different from /star, and reflects the value of
-# STARCONF_DEFAULT_STARLINK that the `starconf' package was configured
-# with before its installation.
-#
-# We use $STARLINK as the location of any other Starlink tools we need
-# to use during the building of our packages, and for the location of
-# any manifests we need to check. It is permissable for it to be
-# different from $(prefix): this is partly because we have no way of
-# enforcing that the two be the same, since the user can set
-# prefix=xxx on the `make install' command line, and partly so that it
-# is possible to make a test version of a new package, using tools
-# from an old installation, but installing in a new place.
-#
-# However, we install software in /stardev/git/starlink/star by
-# default. This is so even if $STARLINK and STARCONF_DEFAULT_STARLINK
-# are different, because in this case we are planning to use a
-# previous installation in $STARLINK or $STARCONF_DEFAULT_STARLINK,
-# but install the newly built tool elsewhere.
-#
-# In most cases, including the most important case where we are
-# building the tree from scratch, in a checked out directory,
-# STARLINK, STARCONF_DEFAULT_STARLINK and STARCONF_DEFAULT_PREFIX will
-# all be the same. That's OK because a separate aspect of the build
-# process, respecting the various dependencies expresses in source
-# directories, ensures that we don't use (and install) any Starlink
-# tools in one component before that component has been build and
-# installed.
-
-
-test -n "$STARLINK" || STARLINK=/stardev/git/starlink/star
-
-# Handle the --with-starlink option. If --with-starlink is present
-# with no argument (the default), we do nothing as this simply
-# indicates that this is part of a Starlink tree. If it has an
-# argument, then this overrides the location of the Starlink tree.
-# Option --without-starlink or --with-starlink=no indicates that this
-# is being built _not_ as part of a Starlink build (that is, it's
-# being distributed as something other than a Starlink package). In
-# this case, the variable STARLINK is unset.
-
-# Check whether --with-starlink or --without-starlink was given.
-if test "${with_starlink+set}" = set; then
- withval="$with_starlink"
- if test -z "$withval" -o "$withval" = yes; then
- : nothing needs to be done
- elif test "X$withval" = Xno; then
- unset STARLINK
- elif test -d "$withval"; then
- STARLINK="$withval"
- else
- { echo "$as_me:$LINENO: WARNING: --with-starlink given nonexistent directory; ignored: using default $STARLINK instead" >&5
-echo "$as_me: WARNING: --with-starlink given nonexistent directory; ignored: using default $STARLINK instead" >&2;}
- fi
-fi;
-if test -n "$STARLINK"; then
- { echo "$as_me:$LINENO: Starlink tree located at $STARLINK" >&5
-echo "$as_me: Starlink tree located at $STARLINK" >&6;}
-else
- { echo "$as_me:$LINENO: Not being built as part of the Starlink tree" >&5
-echo "$as_me: Not being built as part of the Starlink tree" >&6;}
-fi
-
-# Handle --without-stardocs. Don't build and install documentation.
-# Default is --with-stardocs.
-_star_build_docs=:
-
-# Check whether --with-stardocs or --without-stardocs was given.
-if test "${with_stardocs+set}" = set; then
- withval="$with_stardocs"
- if test -z "$withval"; then
- _star_build_docs=: # default
- elif test "X$withval" = Xno; then
- _star_build_docs=false
- elif test "X$withval" = Xyes; then
- _star_build_docs=:
- else
- { echo "$as_me:$LINENO: WARNING: bad arg to --with-stardocs: using yes" >&5
-echo "$as_me: WARNING: bad arg to --with-stardocs: using yes" >&2;}
- _star_build_docs=:
- fi
-fi;
-
-if $_star_docs_only; then
- if $_star_build_docs; then
- : OK
- else
- { echo "$as_me:$LINENO: WARNING: Building without documentation in a docs-only directory" >&5
-echo "$as_me: WARNING: Building without documentation in a docs-only directory" >&2;}
- fi
-fi
-
-# Everything depends on where /star is. Declare STARLINK as a
-# `precious variable'. Amongst other things, this will make
-# ./configure squeal if the package is re-configured with an
-# inconsistent value of this variable.
-
-# AC_SUBST the STARLINK variable. Macro AC_ARG_VAR does this anyway,
-# but automake doesn't know that (in 1.6 at least): however any
-# variable that automake finds has been AC_SUBSTed, it includes in
-# Makefile.in, and we need that.
-
-
-# Use the above information: $STARLINK indicates a preexisting
-# Starlink tree.
-#
-# Avoid doing anything if $STARLINK was unset above.
-#
-# Add library search paths using STAR_LDFLAGS. Do it this way, rather than
-# by defining LIBS (which is also a non-user variable): (a) these are
-# really options to the linker, rather than adjustments to the set of
-# libraries, so this makes sense; also (b) adding them to LIBS is too
-# late, since that adds -L _after_ any -l options found in *_LDADD.
-if test -n "$STARLINK"; then
- STAR_CPPFLAGS="-I$STARLINK/include"
- STAR_FCFLAGS="-I$STARLINK/include"
- STAR_FFLAGS="-I$STARLINK/include"
- STAR_LDFLAGS="-L$STARLINK/lib"
-else
- STAR_CPPFLAGS=
- STAR_FCFLAGS=
- STAR_FFLAGS=
- STAR_LDFLAGS=
-fi
-
-
-
-
-
-
-echo "$as_me:$LINENO: checking whether we need any library fixups" >&5
-echo $ECHO_N "checking whether we need any library fixups... $ECHO_C" >&6
-if test "${star_cv_restfp_fixup+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- if expr $build_os : 'darwin7' >/dev/null; then
- # Following uses undocumented (but probably fairly stable)
- # autoconf internal variable.
- if test "$ac_cv_fc_compiler_gnu" = yes; then
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
- rm -f conftest*
- star_cv_restfp_fixup=unknown
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-restFP()
- ;
- return 0;
-}
-_ACEOF
- { { ac_try='$CC -o conftest.x -S conftest.c'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }
- test $ac_status = 0
- } &&
- sed 's/_restFP/restFP/g' conftest.x>conftest.s &&
- { { ac_try='$CC -c -o conftest.$ac_objext conftest.s'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }
- test $ac_status = 0
- } || star_cv_restfp_fixup=broken
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
- if test $star_cv_restfp_fixup = broken; then
- { echo "$as_me:$LINENO: WARNING: unable to assemble restFP test" >&5
-echo "$as_me: WARNING: unable to assemble restFP test" >&2;}
- else
- # Link this with the C compiler
- { ac_try='$CC -o conftest conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }
- _s_cstatus=$ac_status
- # Link this with the Fortran compiler
- { ac_try='$FC -o conftest conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }
- if test $_s_cstatus = 0 -a $ac_status = 0; then
- # both compilers can compile it
- star_cv_restfp_fixup=no
- elif test $_s_cstatus != 0 -a $ac_status != 0; then
- # neither compiler can compile it
- star_cv_restfp_fixup=no
- elif test $_s_cstatus = 0; then
- # The C compiler can, but the Fortran cannot
- star_cv_restfp_fixup=yes
- else
- # The C compiler can't compile, but the Fortran can.
- # Haven't heard of this case! Don't know what to do.
- star_cv_restfp_fixup=broken
- fi
- fi
- # Link with -lcc_dynamic.
- # See http://www.astro.gla.ac.uk/users/norman/note/2004/restFP/
- if test $star_cv_restfp_fixup = yes; then
- { ac_try='$FC -o conftest conftest.$ac_objext -lcc_dynamic'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }
- if test $ac_status = 0; then
- star_cv_restfp_fixup=cc_dynamic
- fi
- fi
- if test $star_cv_restfp_fixup = yes; then
- # ooops
- { echo "$as_me:$LINENO: WARNING: unable to solve restFP problem" >&5
-echo "$as_me: WARNING: unable to solve restFP problem" >&2;}
- star_cv_restfp_fixup=broken
- fi
- rm -f conftest*
- elif test -z "$FC"; then
- # not g77, and indeed no Fortran at all
- star_cv_restfp_fixup=nofortran
- else
- # There is a Fortran, but it's not g77, so either there's no
- # problem, or it's a mixed-compiler problem that's harder
- # than we know how to deal with. But presumably the user
- # has worked this out.
- star_cv_restfp_fixup=no
- fi
- else # !Darwin
- star_cv_restfp_fixup=no
- fi
-
-fi
-echo "$as_me:$LINENO: result: $star_cv_restfp_fixup" >&5
-echo "${ECHO_T}$star_cv_restfp_fixup" >&6
- C_FC_FCLINK_MAGIC=
- C_FC_PPFC_FCLINK_MAGIC=
- case $star_cv_restfp_fixup in
- cc_dynamic)
- # Add the required libraries to C_FC_... variables, which are
- # generated in the required places by (our) automake.
- C_FC_FCLINK_MAGIC="-lcc_dynamic"
- C_FC_PPFC_FCLINK_MAGIC="-lcc_dynamic"
- ;;
- nofortran)
- { echo "$as_me:$LINENO: No Fortran in path, so presumably no g77/gcc library problems" >&5
-echo "$as_me: No Fortran in path, so presumably no g77/gcc library problems" >&6;}
- ;;
- *) ;;
- esac
-
-
-
-
-# Installation directory options (these are no longer handled
-# by _STAR_EXTRADIR_COMMON). There should be an entry here for each of
-# Starlink's special installation locations.
-stardocsdir='${prefix}/docs'
-staretcdir='${prefix}/etc'
-starexamplesdir='${prefix}/examples'
-starfacsdir='${prefix}/help'
-starhelpdir='${prefix}/help'
-starnewsdir='${prefix}/news'
-
-# Certain directories are affected by the $_star_per_package_dir variable;
-# if it's true, then add the $PACKAGE_NAME to the directory.
-# The directories currently adjusted by this are bin and help;
-# there are others: see PWD's message of 2004-02-16
-# <http://www.jiscmail.ac.uk/cgi-bin/wa.exe?A2=ind0402&L=stardev&T=0&F=&S=&P=5153>
-if $_star_per_package_dirs; then
- bindir="$bindir/$PACKAGE_NAME"
- starhelpdir="$starhelpdir/$PACKAGE_NAME"
- staretcdir="$staretcdir/$PACKAGE_NAME"
- { echo "$as_me:$LINENO: STAR_DEFAULTS has option per-package-dirs:" >&5
-echo "$as_me: STAR_DEFAULTS has option per-package-dirs:" >&6;}
- { echo "$as_me:$LINENO: bindir=$bindir starhelpdir=$starhelpdir staretcdir=$staretcdir" >&5
-echo "$as_me: bindir=$bindir starhelpdir=$starhelpdir staretcdir=$staretcdir" >&6;}
- # Note that starfacsdir is unaffected by per-package-dirs -- facility
- # files must always be installed in .../help (this also facilitates
- # changing this installation location in future, to somewhere with a
- # more logical name than .../help).
-fi
-
-
-# Dependency declarations and checks.
-# Everything is dependent on starconf, so we don't have to declare that
-# for each package separately.
-# STAR_DEPENDENCIES_ATTRIBUTES is currently not used.
-STAR_DEPENDENCIES_ATTRIBUTES=''
-STAR_DEPENDENCIES_CHILDREN=''
-
-
-
-# List of documentation. See [STAR_LATEX_DOCUMENTATION].
-# STAR_DOCUMENTATION is a list of document codes,
-STAR_DOCUMENTATION=
-
-
-# Create a PACKAGE_VERSION_INTEGER variable, which contains the
-# package's version number as an integer major*1e6+minor*1e3+release.
-eval `echo $VERSION | sed -e 's/\([0-9]*\)[^0-9]*\([0-9]*\)[^0-9]*\([0-9]*\).*/PACKAGE_VERSION_MAJOR=\1; PACKAGE_VERSION_MINOR=\2; PACKAGE_VERSION_RELEASE=\3;/'`
-test -n "$PACKAGE_VERSION_MAJOR" || PACKAGE_VERSION_MAJOR=0
-test -n "$PACKAGE_VERSION_MINOR" || PACKAGE_VERSION_MINOR=0
-test -n "$PACKAGE_VERSION_RELEASE" || PACKAGE_VERSION_RELEASE=0
-PACKAGE_VERSION_INTEGER=`expr $PACKAGE_VERSION_MAJOR \* 1000000 + $PACKAGE_VERSION_MINOR \* 1000 + $PACKAGE_VERSION_RELEASE`
-
-
-
-
-
-# When we do dependency checking, using the dependencies declared in
-# the package's configure.ac, we do so by looking at what tools have
-# already been installed in the Starlink tree. The tree in question
-# is to be found under $STARLINK (see above), so we check that a
-# package is installed by checking that its manifest can be found in
-# $STARLINK/manifests. We don't AC_SUBST this.
-current_MANIFESTS=$STARLINK/manifests
-
-# When we install manifests, however, they should go in the
-# installation directory. Allow this to be defaulted from the environment.
-# In particular, if it is set to null in the environment, this will
-# suppress the installation of manifests.
-: ${STAR_MANIFEST_DIR='$(prefix)/manifests'}
-
-
-# Each package updates the "starlink.version" file installed into the
-# manifests directory. This tracks the last git sha1 checkin for
-# the current code state by running the git show on the HEAD.
-# Define GIT as the program to run, but allow it to be overridden
-# (most likely by ":" to avoid the overhead).
-# Also requires that STAR_SOURCE_ROOT_DIR is defined to locate the
-# head of the source tree.
-: ${GIT='git'}
-if test "${GIT}" = "git"; then
- # Extract the first word of "git", so it can be a program name with args.
-set dummy git; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_GIT+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- case $GIT in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_GIT="$GIT" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_GIT="$as_dir/$ac_word$ac_exec_ext"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
- ;;
-esac
-fi
-GIT=$ac_cv_path_GIT
-
-if test -n "$GIT"; then
- echo "$as_me:$LINENO: result: $GIT" >&5
-echo "${ECHO_T}$GIT" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-
-
-: ${STAR_SOURCE_ROOT_DIR=''}
-
-
-# Although PACKAGE_VERSION is a default output variable, it isn't
-# added as a Makefile variable by default. We need it below, however,
-# so add it now.
-
-
-# Initialise state of predist/postdist flags (see STAR_PREDIST_SOURCES).
-# The value of _star_predist_status must be inherited by any
-# ./configure run in a subdirectory, so that we there avoid the predist
-# test of starconf.status: in a pre-distribution state, this file must
-# be present in the component directory (where we are running
-# ./configure), but must not be present in any subdirectory.
-_star_predist_status=unknown
-PREDIST='#' # safe default
-
-
-# pax and/or tar are used in some install targets.
-# Note: value-if-not-found should be blank, so this can be tested for.
-# Extract the first word of "pax", so it can be a program name with args.
-set dummy pax; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_PAX+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- case $PAX in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_PAX="$PAX" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_PAX="$as_dir/$ac_word$ac_exec_ext"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
- ;;
-esac
-fi
-PAX=$ac_cv_path_PAX
-
-if test -n "$PAX"; then
- echo "$as_me:$LINENO: result: $PAX" >&5
-echo "${ECHO_T}$PAX" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-for ac_prog in gnutar tar
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_TAR+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- case $TAR in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_TAR="$TAR" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_TAR="$as_dir/$ac_word$ac_exec_ext"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
- ;;
-esac
-fi
-TAR=$ac_cv_path_TAR
-
-if test -n "$TAR"; then
- echo "$as_me:$LINENO: result: $TAR" >&5
-echo "${ECHO_T}$TAR" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$TAR" && break
-done
-
-
-ALL_TARGET=all-am-normal
-
-# Default $prefix. This is done by the standard autoconf configure, but at
-# a slightly later stage than this. Doing it here, as part of STAR_[]DEFAULTS
-# means that the defaulted value of $prefix can be used within the body of
-# the configure.ac, for example to pass it to a ./configure in a subdirectory.
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-
-# See if the --with-starmem option has been provided. This sets the
-# preprocesor macro HAVE_STAR_MEM_H.
-
-# Check whether --with-starmem or --without-starmem was given.
-if test "${with_starmem+set}" = set; then
- withval="$with_starmem"
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_STAR_MEM_H 1
-_ACEOF
-
-fi;
-
-# See if the --with-memdebug option has been provided. This sets the
-# preprocesor macro MEM_DEBUG which enables facilities used to track
-# down memory leaks, etc.
-
-# Check whether --with-memdebug or --without-memdebug was given.
-if test "${with_memdebug+set}" = set; then
- withval="$with_memdebug"
-
-cat >>confdefs.h <<\_ACEOF
-#define MEM_DEBUG 1
-_ACEOF
-
-fi;
-
-# Checks for programs
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="gcc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- CC=$ac_ct_CC
-else
- CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="cc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- CC=$ac_ct_CC
-else
- CC="$ac_cv_prog_CC"
-fi
-
-fi
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# != 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
- fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$ac_ct_CC" && break
-done
-
- CC=$ac_ct_CC
-fi
-
-fi
-
-
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-
-# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
- "checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
- (eval $ac_compiler --version </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
- (eval $ac_compiler -v </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
- (eval $ac_compiler -V </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-
-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_compiler_gnu=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_compiler_gnu=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
-GCC=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-CFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_g+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_prog_cc_g=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_prog_cc_g=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_stdc+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_prog_cc_stdc=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std1 is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std1. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX -qlanglvl=ansi
-# Ultrix and OSF/1 -std1
-# HP-UX 10.20 and later -Ae
-# HP-UX older versions -Aa -D_HPUX_SOURCE
-# SVR4 -Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_prog_cc_stdc=$ac_arg
-break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext
-done
-rm -f conftest.$ac_ext conftest.$ac_objext
-CC=$ac_save_CC
-
-fi
-
-case "x$ac_cv_prog_cc_stdc" in
- x|xno)
- echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
- *)
- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
- CC="$CC $ac_cv_prog_cc_stdc" ;;
-esac
-
-# Some people use a C++ compiler to compile C. Since we use `exit',
-# in C++ we need to declare it. In case someone uses the same compiler
-# for both compiling C and C++ we need to have the C++ compiler decide
-# the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
-#ifndef __cplusplus
- choke me
-#endif
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- for ac_declaration in \
- '' \
- 'extern "C" void std::exit (int) throw (); using std::exit;' \
- 'extern "C" void std::exit (int); using std::exit;' \
- 'extern "C" void exit (int) throw ();' \
- 'extern "C" void exit (int);' \
- 'void exit (int);'
-do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_declaration
-#include <stdlib.h>
-int
-main ()
-{
-exit (42);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_declaration
-int
-main ()
-{
-exit (42);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
- echo '#ifdef __cplusplus' >>confdefs.h
- echo $ac_declaration >>confdefs.h
- echo '#endif' >>confdefs.h
-fi
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-depcc="$CC" am_compiler_list=
-
-echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
-echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
- # We make a subdir and do the tests there. Otherwise we can end up
- # making bogus files that we don't know about and never remove. For
- # instance it was reported that on HP-UX the gcc test will end up
- # making a dummy file named `D' -- because `-MD' means `put the output
- # in D'.
- mkdir conftest.dir
- # Copy depcomp to subdir because otherwise we won't find it if we're
- # using a relative directory.
- cp "$am_depcomp" conftest.dir
- cd conftest.dir
- # We will build objects and dependencies in a subdirectory because
- # it helps to detect inapplicable dependency modes. For instance
- # both Tru64's cc and ICC support -MD to output dependencies as a
- # side effect of compilation, but ICC will put the dependencies in
- # the current directory while Tru64 will put them in the object
- # directory.
- mkdir sub
-
- am_cv_CC_dependencies_compiler_type=none
- if test "$am_compiler_list" = ""; then
- am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
- fi
- for depmode in $am_compiler_list; do
- # Setup a source with many dependencies, because some compilers
- # like to wrap large dependency lists on column 80 (with \), and
- # we should not choose a depcomp mode which is confused by this.
- #
- # We need to recreate these files for each test, as the compiler may
- # overwrite some of them when testing with obscure command lines.
- # This happens at least with the AIX C compiler.
- : > sub/conftest.c
- for i in 1 2 3 4 5 6; do
- echo '#include "conftst'$i'.h"' >> sub/conftest.c
- # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
- # Solaris 8's {/usr,}/bin/sh.
- touch sub/conftst$i.h
- done
- echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
- case $depmode in
- nosideeffect)
- # after this tag, mechanisms are not by side-effect, so they'll
- # only be used when explicitly requested
- if test "x$enable_dependency_tracking" = xyes; then
- continue
- else
- break
- fi
- ;;
- none) break ;;
- esac
- # We check with `-c' and `-o' for the sake of the "dashmstdout"
- # mode. It turns out that the SunPro C++ compiler does not properly
- # handle `-M -o', and we need to detect this.
- if depmode=$depmode \
- source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
- depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
- $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
- >/dev/null 2>conftest.err &&
- grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
- grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
- ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
- # icc doesn't choke on unknown options, it will just issue warnings
- # or remarks (even with -Werror). So we grep stderr for any message
- # that says an option was ignored or not supported.
- # When given -MP, icc 7.0 and 7.1 complain thusly:
- # icc: Command line warning: ignoring option '-M'; no argument required
- # The diagnosis changed in icc 8.0:
- # icc: Command line remark: option '-MP' not supported
- if (grep 'ignoring option' conftest.err ||
- grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
- am_cv_CC_dependencies_compiler_type=$depmode
- break
- fi
- fi
- done
-
- cd ..
- rm -rf conftest.dir
-else
- am_cv_CC_dependencies_compiler_type=none
-fi
-
-fi
-echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
-echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
-CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
-
-
-
-if
- test "x$enable_dependency_tracking" != xno \
- && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
- am__fastdepCC_TRUE=
- am__fastdepCC_FALSE='#'
-else
- am__fastdepCC_TRUE='#'
- am__fastdepCC_FALSE=
-fi
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if test "${ac_cv_prog_CPP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether non-existent headers
- # can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- # Broken: success on invalid input.
-continue
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
- break
-fi
-
- done
- ac_cv_prog_CPP=$CPP
-
-fi
- CPP=$ac_cv_prog_CPP
-else
- ac_cv_prog_CPP=$CPP
-fi
-echo "$as_me:$LINENO: result: $CPP" >&5
-echo "${ECHO_T}$CPP" >&6
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether non-existent headers
- # can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- # Broken: success on invalid input.
-continue
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
- :
-else
- { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&5
-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-# Check whether --enable-shared or --disable-shared was given.
-if test "${enable_shared+set}" = set; then
- enableval="$enable_shared"
- p=${PACKAGE-default}
- case $enableval in
- yes) enable_shared=yes ;;
- no) enable_shared=no ;;
- *)
- enable_shared=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for pkg in $enableval; do
- IFS="$lt_save_ifs"
- if test "X$pkg" = "X$p"; then
- enable_shared=yes
- fi
- done
- IFS="$lt_save_ifs"
- ;;
- esac
-else
- enable_shared=yes
-fi;
-
-# Check whether --enable-static or --disable-static was given.
-if test "${enable_static+set}" = set; then
- enableval="$enable_static"
- p=${PACKAGE-default}
- case $enableval in
- yes) enable_static=yes ;;
- no) enable_static=no ;;
- *)
- enable_static=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for pkg in $enableval; do
- IFS="$lt_save_ifs"
- if test "X$pkg" = "X$p"; then
- enable_static=yes
- fi
- done
- IFS="$lt_save_ifs"
- ;;
- esac
-else
- enable_static=yes
-fi;
-
-# Check whether --enable-fast-install or --disable-fast-install was given.
-if test "${enable_fast_install+set}" = set; then
- enableval="$enable_fast_install"
- p=${PACKAGE-default}
- case $enableval in
- yes) enable_fast_install=yes ;;
- no) enable_fast_install=no ;;
- *)
- enable_fast_install=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for pkg in $enableval; do
- IFS="$lt_save_ifs"
- if test "X$pkg" = "X$p"; then
- enable_fast_install=yes
- fi
- done
- IFS="$lt_save_ifs"
- ;;
- esac
-else
- enable_fast_install=yes
-fi;
-
-echo "$as_me:$LINENO: checking host system type" >&5
-echo $ECHO_N "checking host system type... $ECHO_C" >&6
-if test "${ac_cv_host+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_host_alias=$host_alias
-test -z "$ac_cv_host_alias" &&
- ac_cv_host_alias=$ac_cv_build_alias
-ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
- { (exit 1); exit 1; }; }
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_host" >&5
-echo "${ECHO_T}$ac_cv_host" >&6
-host=$ac_cv_host
-host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-
-echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
-echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6
-if test "${lt_cv_path_SED+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- # Loop through the user's path and test for sed and gsed.
-# Then use that list of sed's as ones to test for truncation.
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for lt_ac_prog in sed gsed; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
- lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
- fi
- done
- done
-done
-lt_ac_max=0
-lt_ac_count=0
-# Add /usr/xpg4/bin/sed as it is typically found on Solaris
-# along with /bin/sed that truncates output.
-for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
- test ! -f $lt_ac_sed && continue
- cat /dev/null > conftest.in
- lt_ac_count=0
- echo $ECHO_N "0123456789$ECHO_C" >conftest.in
- # Check for GNU sed and select it if it is found.
- if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
- lt_cv_path_SED=$lt_ac_sed
- break
- fi
- while true; do
- cat conftest.in conftest.in >conftest.tmp
- mv conftest.tmp conftest.in
- cp conftest.in conftest.nl
- echo >>conftest.nl
- $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
- cmp -s conftest.out conftest.nl || break
- # 10000 chars as input seems more than enough
- test $lt_ac_count -gt 10 && break
- lt_ac_count=`expr $lt_ac_count + 1`
- if test $lt_ac_count -gt $lt_ac_max; then
- lt_ac_max=$lt_ac_count
- lt_cv_path_SED=$lt_ac_sed
- fi
- done
-done
-
-fi
-
-SED=$lt_cv_path_SED
-echo "$as_me:$LINENO: result: $SED" >&5
-echo "${ECHO_T}$SED" >&6
-
-echo "$as_me:$LINENO: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6
-if test "${ac_cv_prog_egrep+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if echo a | (grep -E '(a|b)') >/dev/null 2>&1
- then ac_cv_prog_egrep='grep -E'
- else ac_cv_prog_egrep='egrep'
- fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
-echo "${ECHO_T}$ac_cv_prog_egrep" >&6
- EGREP=$ac_cv_prog_egrep
-
-
-
-# Check whether --with-gnu-ld or --without-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then
- withval="$with_gnu_ld"
- test "$withval" = no || with_gnu_ld=yes
-else
- with_gnu_ld=no
-fi;
-ac_prog=ld
-if test "$GCC" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- echo "$as_me:$LINENO: checking for ld used by $CC" >&5
-echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
- case $host in
- *-*-mingw*)
- # gcc leaves a trailing carriage return which upsets mingw
- ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
- *)
- ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
- esac
- case $ac_prog in
- # Accept absolute paths.
- [\\/]* | ?:[\\/]*)
- re_direlt='/[^/][^/]*/\.\./'
- # Canonicalize the pathname of ld
- ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
- while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
- done
- test -z "$LD" && LD="$ac_prog"
- ;;
- "")
- # If it fails, then pretend we aren't using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
-elif test "$with_gnu_ld" = yes; then
- echo "$as_me:$LINENO: checking for GNU ld" >&5
-echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
-else
- echo "$as_me:$LINENO: checking for non-GNU ld" >&5
-echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
-fi
-if test "${lt_cv_path_LD+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -z "$LD"; then
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- lt_cv_path_LD="$ac_dir/$ac_prog"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some GNU ld's only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
- *GNU* | *'with BFD'*)
- test "$with_gnu_ld" != no && break
- ;;
- *)
- test "$with_gnu_ld" != yes && break
- ;;
- esac
- fi
- done
- IFS="$lt_save_ifs"
-else
- lt_cv_path_LD="$LD" # Let the user override the test with a path.
-fi
-fi
-
-LD="$lt_cv_path_LD"
-if test -n "$LD"; then
- echo "$as_me:$LINENO: result: $LD" >&5
-echo "${ECHO_T}$LD" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
-echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
- { (exit 1); exit 1; }; }
-echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
-echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
-if test "${lt_cv_prog_gnu_ld+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- # I'd rather use --version here, but apparently some GNU ld's only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
- lt_cv_prog_gnu_ld=yes
- ;;
-*)
- lt_cv_prog_gnu_ld=no
- ;;
-esac
-fi
-echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
-echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
-with_gnu_ld=$lt_cv_prog_gnu_ld
-
-
-echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
-echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6
-if test "${lt_cv_ld_reload_flag+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- lt_cv_ld_reload_flag='-r'
-fi
-echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
-echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6
-reload_flag=$lt_cv_ld_reload_flag
-case $reload_flag in
-"" | " "*) ;;
-*) reload_flag=" $reload_flag" ;;
-esac
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-case $host_os in
- darwin*)
- if test "$GCC" = yes; then
- reload_cmds='$CC -nostdlib ${wl}-r -o $output$reload_objs'
- else
- reload_cmds='$LD$reload_flag -o $output$reload_objs'
- fi
- ;;
-esac
-
-echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
-echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6
-if test "${lt_cv_path_NM+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$NM"; then
- # Let the user override the test.
- lt_cv_path_NM="$NM"
-else
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- tmp_nm="$ac_dir/${ac_tool_prefix}nm"
- if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
- # Check to see if the nm accepts a BSD-compat flag.
- # Adding the `sed 1q' prevents false positives on HP-UX, which says:
- # nm: unknown option "B" ignored
- # Tru64's nm complains that /dev/null is an invalid object file
- case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
- */dev/null* | *'Invalid file or object type'*)
- lt_cv_path_NM="$tmp_nm -B"
- break
- ;;
- *)
- case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
- */dev/null*)
- lt_cv_path_NM="$tmp_nm -p"
- break
- ;;
- *)
- lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
- continue # so that we can try to find one that supports BSD flags
- ;;
- esac
- esac
- fi
- done
- IFS="$lt_save_ifs"
- test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
-fi
-fi
-echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
-echo "${ECHO_T}$lt_cv_path_NM" >&6
-NM="$lt_cv_path_NM"
-
-echo "$as_me:$LINENO: checking whether ln -s works" >&5
-echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
- echo "$as_me:$LINENO: result: no, using $LN_S" >&5
-echo "${ECHO_T}no, using $LN_S" >&6
-fi
-
-echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5
-echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6
-if test "${lt_cv_deplibs_check_method+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- lt_cv_file_magic_cmd='$MAGIC_CMD'
-lt_cv_file_magic_test_file=
-lt_cv_deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given extended regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-
-case $host_os in
-aix4* | aix5*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-beos*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-bsdi[45]*)
- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
- lt_cv_file_magic_cmd='/usr/bin/file -L'
- lt_cv_file_magic_test_file=/shlib/libc.so
- ;;
-
-cygwin*)
- # func_win32_libid is a shell function defined in ltmain.sh
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- ;;
-
-mingw* | pw32*)
- # Base MSYS/MinGW do not provide the 'file' command needed by
- # func_win32_libid shell function, so use a weaker test based on 'objdump'.
- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- ;;
-
-darwin* | rhapsody*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-freebsd* | kfreebsd*-gnu | dragonfly*)
- if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
- case $host_cpu in
- i*86 )
- # Not sure whether the presence of OpenBSD here was a mistake.
- # Let's accept both of them until this is cleared up.
- lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
- lt_cv_file_magic_cmd=/usr/bin/file
- lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
- ;;
- esac
- else
- lt_cv_deplibs_check_method=pass_all
- fi
- ;;
-
-gnu*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-hpux10.20* | hpux11*)
- lt_cv_file_magic_cmd=/usr/bin/file
- case "$host_cpu" in
- ia64*)
- lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
- lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
- ;;
- hppa*64*)
- lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
- lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
- ;;
- *)
- lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
- lt_cv_file_magic_test_file=/usr/lib/libc.sl
- ;;
- esac
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $LD in
- *-32|*"-32 ") libmagic=32-bit;;
- *-n32|*"-n32 ") libmagic=N32;;
- *-64|*"-64 ") libmagic=64-bit;;
- *) libmagic=never-match;;
- esac
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-# This must be Linux ELF.
-linux*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
- lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
- else
- lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
- fi
- ;;
-
-newos6*)
- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
- lt_cv_file_magic_cmd=/usr/bin/file
- lt_cv_file_magic_test_file=/usr/lib/libnls.so
- ;;
-
-nto-qnx*)
- lt_cv_deplibs_check_method=unknown
- ;;
-
-openbsd*)
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
- else
- lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
- fi
- ;;
-
-osf3* | osf4* | osf5*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-sco3.2v5*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-solaris*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
- case $host_vendor in
- motorola)
- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
- lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
- ;;
- ncr)
- lt_cv_deplibs_check_method=pass_all
- ;;
- sequent)
- lt_cv_file_magic_cmd='/bin/file'
- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
- ;;
- sni)
- lt_cv_file_magic_cmd='/bin/file'
- lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
- lt_cv_file_magic_test_file=/lib/libc.so
- ;;
- siemens)
- lt_cv_deplibs_check_method=pass_all
- ;;
- esac
- ;;
-
-sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7* | sysv4*uw2*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-esac
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
-echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6
-file_magic_cmd=$lt_cv_file_magic_cmd
-deplibs_check_method=$lt_cv_deplibs_check_method
-test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-
-
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
-if test "${enable_libtool_lock+set}" = set; then
- enableval="$enable_libtool_lock"
-
-fi;
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case $host in
-ia64-*-hpux*)
- # Find out which ABI we are using.
- echo 'int i;' > conftest.$ac_ext
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- case `/usr/bin/file conftest.$ac_objext` in
- *ELF-32*)
- HPUX_IA64_MODE="32"
- ;;
- *ELF-64*)
- HPUX_IA64_MODE="64"
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-*-*-irix6*)
- # Find out which ABI we are using.
- echo '#line 5621 "configure"' > conftest.$ac_ext
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- if test "$lt_cv_prog_gnu_ld" = yes; then
- case `/usr/bin/file conftest.$ac_objext` in
- *32-bit*)
- LD="${LD-ld} -melf32bsmip"
- ;;
- *N32*)
- LD="${LD-ld} -melf32bmipn32"
- ;;
- *64-bit*)
- LD="${LD-ld} -melf64bmip"
- ;;
- esac
- else
- case `/usr/bin/file conftest.$ac_objext` in
- *32-bit*)
- LD="${LD-ld} -32"
- ;;
- *N32*)
- LD="${LD-ld} -n32"
- ;;
- *64-bit*)
- LD="${LD-ld} -64"
- ;;
- esac
- fi
- fi
- rm -rf conftest*
- ;;
-
-x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
- # Find out which ABI we are using.
- echo 'int i;' > conftest.$ac_ext
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- case "`/usr/bin/file conftest.o`" in
- *32-bit*)
- case $host in
- x86_64-*linux*)
- LD="${LD-ld} -m elf_i386"
- ;;
- ppc64-*linux*|powerpc64-*linux*)
- LD="${LD-ld} -m elf32ppclinux"
- ;;
- s390x-*linux*)
- LD="${LD-ld} -m elf_s390"
- ;;
- sparc64-*linux*)
- LD="${LD-ld} -m elf32_sparc"
- ;;
- esac
- ;;
- *64-bit*)
- case $host in
- x86_64-*linux*)
- LD="${LD-ld} -m elf_x86_64"
- ;;
- ppc*-*linux*|powerpc*-*linux*)
- LD="${LD-ld} -m elf64ppc"
- ;;
- s390*-*linux*)
- LD="${LD-ld} -m elf64_s390"
- ;;
- sparc*-*linux*)
- LD="${LD-ld} -m elf64_sparc"
- ;;
- esac
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-
-*-*-sco3.2v5*)
- # On SCO OpenServer 5, we need -belf to get full-featured binaries.
- SAVE_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -belf"
- echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
-echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6
-if test "${lt_cv_cc_needs_belf+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- lt_cv_cc_needs_belf=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-lt_cv_cc_needs_belf=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
-echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6
- if test x"$lt_cv_cc_needs_belf" != x"yes"; then
- # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
- CFLAGS="$SAVE_CFLAGS"
- fi
- ;;
-
-esac
-
-need_locks="$enable_libtool_lock"
-
-
-
-echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
-if test "${ac_cv_header_stdc+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_header_stdc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_header_stdc=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then
- :
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then
- :
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then
- :
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ctype.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- exit(2);
- exit (0);
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_header_stdc=no
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6
-if test $ac_cv_header_stdc = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-
-
-
-
-
-
-
-
-
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_Header=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_Header=no"
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-for ac_header in dlfcn.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-else
- # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_header_compiler=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- ac_header_preproc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
- (
- cat <<\_ASBOX
-## --------------------------------- ##
-## Report this to ussc at star.rl.ac.uk ##
-## --------------------------------- ##
-_ASBOX
- ) |
- sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- eval "$as_ac_Header=\$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CXX+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CXX"; then
- ac_cv_prog_CXX="$CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
- echo "$as_me:$LINENO: result: $CXX" >&5
-echo "${ECHO_T}$CXX" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$CXX" && break
- done
-fi
-if test -z "$CXX"; then
- ac_ct_CXX=$CXX
- for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_CXX"; then
- ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CXX="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
- echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
-echo "${ECHO_T}$ac_ct_CXX" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$ac_ct_CXX" && break
-done
-test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
-
- CXX=$ac_ct_CXX
-fi
-
-
-# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
- "checking for C++ compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
- (eval $ac_compiler --version </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
- (eval $ac_compiler -v </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
- (eval $ac_compiler -V </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-
-echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
-if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_compiler_gnu=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_compiler_gnu=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
-GXX=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-CXXFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
-echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_cxx_g+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_prog_cxx_g=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_prog_cxx_g=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
-if test "$ac_test_CXXFLAGS" = set; then
- CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
- if test "$GXX" = yes; then
- CXXFLAGS="-g -O2"
- else
- CXXFLAGS="-g"
- fi
-else
- if test "$GXX" = yes; then
- CXXFLAGS="-O2"
- else
- CXXFLAGS=
- fi
-fi
-for ac_declaration in \
- '' \
- 'extern "C" void std::exit (int) throw (); using std::exit;' \
- 'extern "C" void std::exit (int); using std::exit;' \
- 'extern "C" void exit (int) throw ();' \
- 'extern "C" void exit (int);' \
- 'void exit (int);'
-do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_declaration
-#include <stdlib.h>
-int
-main ()
-{
-exit (42);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_declaration
-int
-main ()
-{
-exit (42);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
- echo '#ifdef __cplusplus' >>confdefs.h
- echo $ac_declaration >>confdefs.h
- echo '#endif' >>confdefs.h
-fi
-
-ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-depcc="$CXX" am_compiler_list=
-
-echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
-echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
-if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
- # We make a subdir and do the tests there. Otherwise we can end up
- # making bogus files that we don't know about and never remove. For
- # instance it was reported that on HP-UX the gcc test will end up
- # making a dummy file named `D' -- because `-MD' means `put the output
- # in D'.
- mkdir conftest.dir
- # Copy depcomp to subdir because otherwise we won't find it if we're
- # using a relative directory.
- cp "$am_depcomp" conftest.dir
- cd conftest.dir
- # We will build objects and dependencies in a subdirectory because
- # it helps to detect inapplicable dependency modes. For instance
- # both Tru64's cc and ICC support -MD to output dependencies as a
- # side effect of compilation, but ICC will put the dependencies in
- # the current directory while Tru64 will put them in the object
- # directory.
- mkdir sub
-
- am_cv_CXX_dependencies_compiler_type=none
- if test "$am_compiler_list" = ""; then
- am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
- fi
- for depmode in $am_compiler_list; do
- # Setup a source with many dependencies, because some compilers
- # like to wrap large dependency lists on column 80 (with \), and
- # we should not choose a depcomp mode which is confused by this.
- #
- # We need to recreate these files for each test, as the compiler may
- # overwrite some of them when testing with obscure command lines.
- # This happens at least with the AIX C compiler.
- : > sub/conftest.c
- for i in 1 2 3 4 5 6; do
- echo '#include "conftst'$i'.h"' >> sub/conftest.c
- # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
- # Solaris 8's {/usr,}/bin/sh.
- touch sub/conftst$i.h
- done
- echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
- case $depmode in
- nosideeffect)
- # after this tag, mechanisms are not by side-effect, so they'll
- # only be used when explicitly requested
- if test "x$enable_dependency_tracking" = xyes; then
- continue
- else
- break
- fi
- ;;
- none) break ;;
- esac
- # We check with `-c' and `-o' for the sake of the "dashmstdout"
- # mode. It turns out that the SunPro C++ compiler does not properly
- # handle `-M -o', and we need to detect this.
- if depmode=$depmode \
- source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
- depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
- $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
- >/dev/null 2>conftest.err &&
- grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
- grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
- ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
- # icc doesn't choke on unknown options, it will just issue warnings
- # or remarks (even with -Werror). So we grep stderr for any message
- # that says an option was ignored or not supported.
- # When given -MP, icc 7.0 and 7.1 complain thusly:
- # icc: Command line warning: ignoring option '-M'; no argument required
- # The diagnosis changed in icc 8.0:
- # icc: Command line remark: option '-MP' not supported
- if (grep 'ignoring option' conftest.err ||
- grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
- am_cv_CXX_dependencies_compiler_type=$depmode
- break
- fi
- fi
- done
-
- cd ..
- rm -rf conftest.dir
-else
- am_cv_CXX_dependencies_compiler_type=none
-fi
-
-fi
-echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
-echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6
-CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
-
-
-
-if
- test "x$enable_dependency_tracking" != xno \
- && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
- am__fastdepCXX_TRUE=
- am__fastdepCXX_FALSE='#'
-else
- am__fastdepCXX_TRUE='#'
- am__fastdepCXX_FALSE=
-fi
-
-
-
-
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
- ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
- (test "X$CXX" != "Xg++"))) ; then
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
-echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6
-if test -z "$CXXCPP"; then
- if test "${ac_cv_prog_CXXCPP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- # Double quotes because CXXCPP needs to be expanded
- for CXXCPP in "$CXX -E" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_cxx_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_cxx_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether non-existent headers
- # can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_cxx_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- # Broken: success on invalid input.
-continue
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
- break
-fi
-
- done
- ac_cv_prog_CXXCPP=$CXXCPP
-
-fi
- CXXCPP=$ac_cv_prog_CXXCPP
-else
- ac_cv_prog_CXXCPP=$CXXCPP
-fi
-echo "$as_me:$LINENO: result: $CXXCPP" >&5
-echo "${ECHO_T}$CXXCPP" >&6
-ac_preproc_ok=false
-for ac_cxx_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_cxx_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether non-existent headers
- # can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_cxx_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- # Broken: success on invalid input.
-continue
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
- :
-else
- { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check
-See \`config.log' for more details." >&5
-echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-fi
-
-
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 'f77 -old_f77' f90 xlf90 pgf90 epcf90 g95 lf95 f95 fort xlf95 ifc efc pgf95 gfortran
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_F77+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$F77"; then
- ac_cv_prog_F77="$F77" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_F77="$ac_tool_prefix$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-F77=$ac_cv_prog_F77
-if test -n "$F77"; then
- echo "$as_me:$LINENO: result: $F77" >&5
-echo "${ECHO_T}$F77" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$F77" && break
- done
-fi
-if test -z "$F77"; then
- ac_ct_F77=$F77
- for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 'f77 -old_f77' f90 xlf90 pgf90 epcf90 g95 lf95 f95 fort xlf95 ifc efc pgf95 gfortran
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_F77+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_F77"; then
- ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_F77="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-ac_ct_F77=$ac_cv_prog_ac_ct_F77
-if test -n "$ac_ct_F77"; then
- echo "$as_me:$LINENO: result: $ac_ct_F77" >&5
-echo "${ECHO_T}$ac_ct_F77" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$ac_ct_F77" && break
-done
-
- F77=$ac_ct_F77
-fi
-
-
-# Provide some information about the compiler.
-echo "$as_me:6966:" \
- "checking for Fortran 77 compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
- (eval $ac_compiler --version </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
- (eval $ac_compiler -v </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
- (eval $ac_compiler -V </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-rm -f a.out
-
-
-ac_mod_ext=
-ac_fc_mod_uppercase=no
-cat > conftest.$ac_ext << \_ACEOF
- module conftest
- implicit none
- integer :: i
- end module conftest
-_ACEOF
-{ (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-echo "$as_me:$LINENO: checking for suffix of module files" >&5
-echo $ECHO_N "checking for suffix of module files... $ECHO_C" >&6
-for ac_mod_file in conftest.mod conftest.MOD conftest.M CONFTEST.MOD none
-do
- if test -f $ac_mod_file; then
- break;
- fi
-done
-rm -f conftest.$ac_ext conftest.$ac_exe_ext conftest.mod conftest.MOD conftest.M CONFTEST.MOD
-#
-case $ac_mod_file in
- conftest.mod)
- ac_mod_ext=mod
- ;;
- conftest.MOD)
- ac_mod_ext=MOD
- ;;
- conftest.M)
- ac_mod_ext=M
- ;;
- CONFTEST.MOD)
- ac_mod_ext=MOD
- ac_fc_mod_uppercase=yes
- ;;
- none)
- { echo "$as_me:$LINENO: WARNING: Could not find Fortran module file extension." >&5
-echo "$as_me: WARNING: Could not find Fortran module file extension." >&2;}
- ;;
-esac
-
-if test $ac_mod_file != none; then
- echo "$as_me:$LINENO: result: $ac_mod_ext" >&5
-echo "${ECHO_T}$ac_mod_ext" >&6
-fi
-if test $ac_fc_mod_uppercase = yes; then
- { echo "$as_me:$LINENO: Fortran module filenames are uppercase." >&5
-echo "$as_me: Fortran module filenames are uppercase." >&6;}
-fi
-
-# If we don't use `.F' as extension, the preprocessor is not run on the
-# input file. (Note that this only needs to work for GNU compilers.)
-ac_save_ext=$ac_ext
-ac_ext=F
-echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6
-if test "${ac_cv_f77_compiler_gnu+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
- program main
-#ifndef __GNUC__
- choke me
-#endif
-
- end
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_f77_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_compiler_gnu=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_compiler_gnu=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_f77_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6
-ac_ext=$ac_save_ext
-ac_test_FFLAGS=${FFLAGS+set}
-ac_save_FFLAGS=$FFLAGS
-FFLAGS=
-echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5
-echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_f77_g+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- FFLAGS=-g
-cat >conftest.$ac_ext <<_ACEOF
- program main
-
- end
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_f77_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_prog_f77_g=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_prog_f77_g=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5
-echo "${ECHO_T}$ac_cv_prog_f77_g" >&6
-if test "$ac_test_FFLAGS" = set; then
- FFLAGS=$ac_save_FFLAGS
-elif test $ac_cv_prog_f77_g = yes; then
- if test "x$ac_cv_f77_compiler_gnu" = xyes; then
- FFLAGS="-g -O2"
- else
- FFLAGS="-g"
- fi
-else
- if test "x$ac_cv_f77_compiler_gnu" = xyes; then
- FFLAGS="-O2"
- else
- FFLAGS=
- fi
-fi
-
-G77=`test $ac_compiler_gnu = yes && echo yes`
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
-
-# find the maximum length of command line arguments
-echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
-echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6
-if test "${lt_cv_sys_max_cmd_len+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- i=0
- teststring="ABCD"
-
- case $build_os in
- msdosdjgpp*)
- # On DJGPP, this test can blow up pretty badly due to problems in libc
- # (any single argument exceeding 2000 bytes causes a buffer overrun
- # during glob expansion). Even if it were fixed, the result of this
- # check would be larger than it should be.
- lt_cv_sys_max_cmd_len=12288; # 12K is about right
- ;;
-
- gnu*)
- # Under GNU Hurd, this test is not required because there is
- # no limit to the length of command line arguments.
- # Libtool will interpret -1 as no limit whatsoever
- lt_cv_sys_max_cmd_len=-1;
- ;;
-
- cygwin* | mingw*)
- # On Win9x/ME, this test blows up -- it succeeds, but takes
- # about 5 minutes as the teststring grows exponentially.
- # Worse, since 9x/ME are not pre-emptively multitasking,
- # you end up with a "frozen" computer, even though with patience
- # the test eventually succeeds (with a max line length of 256k).
- # Instead, let's just punt: use the minimum linelength reported by
- # all of the supported platforms: 8192 (on NT/2K/XP).
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
- amigaos*)
- # On AmigaOS with pdksh, this test takes hours, literally.
- # So we just punt and use a minimum line length of 8192.
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
- netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
- # This has been around since 386BSD, at least. Likely further.
- if test -x /sbin/sysctl; then
- lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
- elif test -x /usr/sbin/sysctl; then
- lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
- else
- lt_cv_sys_max_cmd_len=65536 # usable default for *BSD
- fi
- # And add a safety zone
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
- ;;
- osf*)
- # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
- # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
- # nice to cause kernel panics so lets avoid the loop below.
- # First set a reasonable default.
- lt_cv_sys_max_cmd_len=16384
- #
- if test -x /sbin/sysconfig; then
- case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
- *1*) lt_cv_sys_max_cmd_len=-1 ;;
- esac
- fi
- ;;
- *)
- # If test is not a shell built-in, we'll probably end up computing a
- # maximum length that is only half of the actual maximum length, but
- # we can't tell.
- SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
- while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \
- = "XX$teststring") >/dev/null 2>&1 &&
- new_result=`expr "X$teststring" : ".*" 2>&1` &&
- lt_cv_sys_max_cmd_len=$new_result &&
- test $i != 17 # 1/2 MB should be enough
- do
- i=`expr $i + 1`
- teststring=$teststring$teststring
- done
- teststring=
- # Add a significant safety factor because C++ compilers can tack on massive
- # amounts of additional arguments before passing them to the linker.
- # It appears as though 1/2 is a usable value.
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
- ;;
- esac
-
-fi
-
-if test -n $lt_cv_sys_max_cmd_len ; then
- echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
-echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6
-else
- echo "$as_me:$LINENO: result: none" >&5
-echo "${ECHO_T}none" >&6
-fi
-
-
-
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
-echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6
-if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix. What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[BCDEGRST]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
-
-# Transform an extracted symbol line into a proper C declaration
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
-
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
-
-# Define system-specific variables.
-case $host_os in
-aix*)
- symcode='[BCDT]'
- ;;
-cygwin* | mingw* | pw32*)
- symcode='[ABCDGISTW]'
- ;;
-hpux*) # Its linker distinguishes data from code symbols
- if test "$host_cpu" = ia64; then
- symcode='[ABCDEGRST]'
- fi
- lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
- lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
- ;;
-linux*)
- if test "$host_cpu" = ia64; then
- symcode='[ABCDGIRSTW]'
- lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
- lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
- fi
- ;;
-irix* | nonstopux*)
- symcode='[BCDEGRST]'
- ;;
-osf*)
- symcode='[BCDEGQRST]'
- ;;
-solaris* | sysv5*)
- symcode='[BDRT]'
- ;;
-sysv4)
- symcode='[DFNSTU]'
- ;;
-esac
-
-# Handle CRLF in mingw tool chain
-opt_cr=
-case $build_os in
-mingw*)
- opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
- ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
- symcode='[ABCDGIRSTW]' ;;
-esac
-
-# Try without a prefix undercore, then with it.
-for ac_symprfx in "" "_"; do
-
- # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
- symxfrm="\\1 $ac_symprfx\\2 \\2"
-
- # Write the raw and C identifiers.
- lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
-
- # Check to see that the pipe works correctly.
- pipe_works=no
-
- rm -f conftest*
- cat > conftest.$ac_ext <<EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-EOF
-
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # Now try to grab the symbols.
- nlist=conftest.nm
- if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
- (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && test -s "$nlist"; then
- # Try sorting and uniquifying the output.
- if sort "$nlist" | uniq > "$nlist"T; then
- mv -f "$nlist"T "$nlist"
- else
- rm -f "$nlist"T
- fi
-
- # Make sure that we snagged all the symbols we need.
- if grep ' nm_test_var$' "$nlist" >/dev/null; then
- if grep ' nm_test_func$' "$nlist" >/dev/null; then
- cat <<EOF > conftest.$ac_ext
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-EOF
- # Now generate the symbol file.
- eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
-
- cat <<EOF >> conftest.$ac_ext
-#if defined (__STDC__) && __STDC__
-# define lt_ptr_t void *
-#else
-# define lt_ptr_t char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-const struct {
- const char *name;
- lt_ptr_t address;
-}
-lt_preloaded_symbols[] =
-{
-EOF
- $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
- cat <<\EOF >> conftest.$ac_ext
- {0, (lt_ptr_t) 0}
-};
-
-#ifdef __cplusplus
-}
-#endif
-EOF
- # Now try linking the two files.
- mv conftest.$ac_objext conftstm.$ac_objext
- lt_save_LIBS="$LIBS"
- lt_save_CFLAGS="$CFLAGS"
- LIBS="conftstm.$ac_objext"
- CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
- if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && test -s conftest${ac_exeext}; then
- pipe_works=yes
- fi
- LIBS="$lt_save_LIBS"
- CFLAGS="$lt_save_CFLAGS"
- else
- echo "cannot find nm_test_func in $nlist" >&5
- fi
- else
- echo "cannot find nm_test_var in $nlist" >&5
- fi
- else
- echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
- fi
- else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- fi
- rm -f conftest* conftst*
-
- # Do not use the global_symbol_pipe unless it works.
- if test "$pipe_works" = yes; then
- break
- else
- lt_cv_sys_global_symbol_pipe=
- fi
-done
-
-fi
-
-if test -z "$lt_cv_sys_global_symbol_pipe"; then
- lt_cv_sys_global_symbol_to_cdecl=
-fi
-if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
- echo "$as_me:$LINENO: result: failed" >&5
-echo "${ECHO_T}failed" >&6
-else
- echo "$as_me:$LINENO: result: ok" >&5
-echo "${ECHO_T}ok" >&6
-fi
-
-echo "$as_me:$LINENO: checking for objdir" >&5
-echo $ECHO_N "checking for objdir... $ECHO_C" >&6
-if test "${lt_cv_objdir+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
- lt_cv_objdir=.libs
-else
- # MS-DOS does not allow filenames that begin with a dot.
- lt_cv_objdir=_libs
-fi
-rmdir .libs 2>/dev/null
-fi
-echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
-echo "${ECHO_T}$lt_cv_objdir" >&6
-objdir=$lt_cv_objdir
-
-
-
-
-
-case $host_os in
-aix3*)
- # AIX sometimes has problems with the GCC collect2 program. For some
- # reason, if we set the COLLECT_NAMES environment variable, the problems
- # vanish in a puff of smoke.
- if test "X${COLLECT_NAMES+set}" != Xset; then
- COLLECT_NAMES=
- export COLLECT_NAMES
- fi
- ;;
-esac
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e 1s/^X//'
-sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
-# Constants:
-rm="rm -f"
-
-# Global variables:
-default_ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except M$VC,
-# which needs '.lib').
-libext=a
-ltmain="$ac_aux_dir/ltmain.sh"
-ofile="$default_ofile"
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_AR+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$AR"; then
- ac_cv_prog_AR="$AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_AR="${ac_tool_prefix}ar"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
- echo "$as_me:$LINENO: result: $AR" >&5
-echo "${ECHO_T}$AR" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_AR"; then
- ac_ct_AR=$AR
- # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_AR"; then
- ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_AR="ar"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
- test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false"
-fi
-fi
-ac_ct_AR=$ac_cv_prog_ac_ct_AR
-if test -n "$ac_ct_AR"; then
- echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
-echo "${ECHO_T}$ac_ct_AR" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- AR=$ac_ct_AR
-else
- AR="$ac_cv_prog_AR"
-fi
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_RANLIB+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
- echo "$as_me:$LINENO: result: $RANLIB" >&5
-echo "${ECHO_T}$RANLIB" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
- ac_ct_RANLIB=$RANLIB
- # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_RANLIB"; then
- ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_RANLIB="ranlib"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
-echo "${ECHO_T}$ac_ct_RANLIB" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- RANLIB=$ac_ct_RANLIB
-else
- RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
-set dummy ${ac_tool_prefix}strip; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_STRIP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$STRIP"; then
- ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_STRIP="${ac_tool_prefix}strip"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-STRIP=$ac_cv_prog_STRIP
-if test -n "$STRIP"; then
- echo "$as_me:$LINENO: result: $STRIP" >&5
-echo "${ECHO_T}$STRIP" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_STRIP"; then
- ac_ct_STRIP=$STRIP
- # Extract the first word of "strip", so it can be a program name with args.
-set dummy strip; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_STRIP"; then
- ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_STRIP="strip"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
- test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
-fi
-fi
-ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
-if test -n "$ac_ct_STRIP"; then
- echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
-echo "${ECHO_T}$ac_ct_STRIP" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- STRIP=$ac_ct_STRIP
-else
- STRIP="$ac_cv_prog_STRIP"
-fi
-
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-test -z "$AS" && AS=as
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-test -z "$LD" && LD=ld
-test -z "$LN_S" && LN_S="ln -s"
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-test -z "$NM" && NM=nm
-test -z "$SED" && SED=sed
-test -z "$OBJDUMP" && OBJDUMP=objdump
-test -z "$RANLIB" && RANLIB=:
-test -z "$STRIP" && STRIP=:
-test -z "$ac_objext" && ac_objext=o
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
- case $host_os in
- openbsd*)
- old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
- ;;
- *)
- old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
- ;;
- esac
- old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-fi
-
-for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-
-# Only perform the check for file, if the check method requires it
-case $deplibs_check_method in
-file_magic*)
- if test "$file_magic_cmd" = '$MAGIC_CMD'; then
- echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
-echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- case $MAGIC_CMD in
-[\\/*] | ?:[\\/]*)
- lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
- ;;
-*)
- lt_save_MAGIC_CMD="$MAGIC_CMD"
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
- for ac_dir in $ac_dummy; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/${ac_tool_prefix}file; then
- lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
- if test -n "$file_magic_test_file"; then
- case $deplibs_check_method in
- "file_magic "*)
- file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
- MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
- if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
- $EGREP "$file_magic_regex" > /dev/null; then
- :
- else
- cat <<EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such. This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem. Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool at gnu.org
-
-EOF
- fi ;;
- esac
- fi
- break
- fi
- done
- IFS="$lt_save_ifs"
- MAGIC_CMD="$lt_save_MAGIC_CMD"
- ;;
-esac
-fi
-
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
- echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
-echo "${ECHO_T}$MAGIC_CMD" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-if test -z "$lt_cv_path_MAGIC_CMD"; then
- if test -n "$ac_tool_prefix"; then
- echo "$as_me:$LINENO: checking for file" >&5
-echo $ECHO_N "checking for file... $ECHO_C" >&6
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- case $MAGIC_CMD in
-[\\/*] | ?:[\\/]*)
- lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
- ;;
-*)
- lt_save_MAGIC_CMD="$MAGIC_CMD"
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
- for ac_dir in $ac_dummy; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/file; then
- lt_cv_path_MAGIC_CMD="$ac_dir/file"
- if test -n "$file_magic_test_file"; then
- case $deplibs_check_method in
- "file_magic "*)
- file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
- MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
- if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
- $EGREP "$file_magic_regex" > /dev/null; then
- :
- else
- cat <<EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such. This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem. Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool at gnu.org
-
-EOF
- fi ;;
- esac
- fi
- break
- fi
- done
- IFS="$lt_save_ifs"
- MAGIC_CMD="$lt_save_MAGIC_CMD"
- ;;
-esac
-fi
-
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
- echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
-echo "${ECHO_T}$MAGIC_CMD" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- else
- MAGIC_CMD=:
- fi
-fi
-
- fi
- ;;
-esac
-
-enable_dlopen=no
-enable_win32_dll=no
-
-# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
-if test "${enable_libtool_lock+set}" = set; then
- enableval="$enable_libtool_lock"
-
-fi;
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-
-# Check whether --with-pic or --without-pic was given.
-if test "${with_pic+set}" = set; then
- withval="$with_pic"
- pic_mode="$withval"
-else
- pic_mode=default
-fi;
-test -z "$pic_mode" && pic_mode=default
-
-# Use C for the default configuration in the libtool script
-tagname=
-lt_save_CC="$CC"
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-# Source file extension for C test sources.
-ac_ext=c
-
-# Object file extension for compiled C test sources.
-objext=o
-objext=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;\n"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}\n'
-
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-printf "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$rm conftest*
-
-ac_outfile=conftest.$ac_objext
-printf "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$rm conftest*
-
-
-#
-# Check for any special shared library compilation flags.
-#
-lt_prog_cc_shlib=
-if test "$GCC" = no; then
- case $host_os in
- sco3.2v5*)
- lt_prog_cc_shlib='-belf'
- ;;
- esac
-fi
-if test -n "$lt_prog_cc_shlib"; then
- { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&5
-echo "$as_me: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&2;}
- if echo "$old_CC $old_CFLAGS " | grep "[ ]$lt_prog_cc_shlib[ ]" >/dev/null; then :
- else
- { echo "$as_me:$LINENO: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5
-echo "$as_me: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;}
- lt_cv_prog_cc_can_build_shared=no
- fi
-fi
-
-
-#
-# Check to make sure the static flag actually works.
-#
-echo "$as_me:$LINENO: checking if $compiler static flag $lt_prog_compiler_static works" >&5
-echo $ECHO_N "checking if $compiler static flag $lt_prog_compiler_static works... $ECHO_C" >&6
-if test "${lt_prog_compiler_static_works+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- lt_prog_compiler_static_works=no
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS $lt_prog_compiler_static"
- printf "$lt_simple_link_test_code" > conftest.$ac_ext
- if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- # Append any errors to the config.log.
- cat conftest.err 1>&5
- $echo "X$_lt_linker_boilerplate" | $Xsed > conftest.exp
- $SED '/^$/d' conftest.err >conftest.er2
- if diff conftest.exp conftest.er2 >/dev/null; then
- lt_prog_compiler_static_works=yes
- fi
- else
- lt_prog_compiler_static_works=yes
- fi
- fi
- $rm conftest*
- LDFLAGS="$save_LDFLAGS"
-
-fi
-echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5
-echo "${ECHO_T}$lt_prog_compiler_static_works" >&6
-
-if test x"$lt_prog_compiler_static_works" = xyes; then
- :
-else
- lt_prog_compiler_static=
-fi
-
-
-
-
-lt_prog_compiler_no_builtin_flag=
-
-if test "$GCC" = yes; then
- lt_prog_compiler_no_builtin_flag=' -fno-builtin'
-
-
-echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
-if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- lt_cv_prog_compiler_rtti_exceptions=no
- ac_outfile=conftest.$ac_objext
- printf "$lt_simple_compile_test_code" > conftest.$ac_ext
- lt_compiler_flag="-fno-rtti -fno-exceptions"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- # The option is referenced via a variable to avoid confusing sed.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:8120: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&5
- echo "$as_me:8124: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s "$ac_outfile"; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $echo "X$_lt_compiler_boilerplate" | $Xsed >conftest.exp
- $SED '/^$/d' conftest.err >conftest.er2
- if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_rtti_exceptions=yes
- fi
- fi
- $rm conftest*
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
-echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
-
-if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
- lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
-else
- :
-fi
-
-fi
-
-lt_prog_compiler_wl=
-lt_prog_compiler_pic=
-lt_prog_compiler_static=
-
-echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
-
- if test "$GCC" = yes; then
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_static='-static'
-
- case $host_os in
- aix*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static='-Bstatic'
- fi
- ;;
-
- amigaos*)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the `-m68020' flag to GCC prevents building anything better,
- # like `-m68040'.
- lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
- ;;
-
- beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
-
- mingw* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_prog_compiler_pic='-DDLL_EXPORT'
- ;;
-
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- lt_prog_compiler_pic='-fno-common'
- ;;
-
- msdosdjgpp*)
- # Just because we use GCC doesn't mean we suddenly get shared libraries
- # on systems that don't support them.
- lt_prog_compiler_can_build_shared=no
- enable_shared=no
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- lt_prog_compiler_pic=-Kconform_pic
- fi
- ;;
-
- hpux*)
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case "$host_cpu" in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- lt_prog_compiler_pic='-fPIC'
- ;;
- esac
- ;;
-
- *)
- lt_prog_compiler_pic='-fPIC'
- ;;
- esac
- else
- # PORTME Check for flag to pass linker flags through the system compiler.
- case $host_os in
- aix*)
- lt_prog_compiler_wl='-Wl,'
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static='-Bstatic'
- else
- lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
- darwin*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- case $cc_basename in
- xlc*)
- lt_prog_compiler_pic='-qnocommon'
- lt_prog_compiler_wl='-Wl,'
- ;;
- esac
- ;;
-
- mingw* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_prog_compiler_pic='-DDLL_EXPORT'
- ;;
-
- hpux9* | hpux10* | hpux11*)
- lt_prog_compiler_wl='-Wl,'
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case "$host_cpu" in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- lt_prog_compiler_pic='+Z'
- ;;
- esac
- # Is there a better lt_prog_compiler_static that works with the bundled CC?
- lt_prog_compiler_static='${wl}-a ${wl}archive'
- ;;
-
- irix5* | irix6* | nonstopux*)
- lt_prog_compiler_wl='-Wl,'
- # PIC (with -KPIC) is the default.
- lt_prog_compiler_static='-non_shared'
- ;;
-
- newsos6)
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
-
- linux*)
- case $cc_basename in
- icc* | ecc*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-static'
- ;;
- pgcc* | pgf77* | pgf90*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-fpic'
- lt_prog_compiler_static='-static'
- ;;
- ccc*)
- lt_prog_compiler_wl='-Wl,'
- # All Alpha code is PIC.
- lt_prog_compiler_static='-non_shared'
- ;;
- esac
- ;;
-
- osf3* | osf4* | osf5*)
- lt_prog_compiler_wl='-Wl,'
- # All OSF/1 code is PIC.
- lt_prog_compiler_static='-non_shared'
- ;;
-
- sco3.2v5*)
- lt_prog_compiler_pic='-Kpic'
- lt_prog_compiler_static='-dn'
- ;;
-
- solaris*)
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- case $cc_basename in
- f77* | f90* | f95*)
- lt_prog_compiler_wl='-Qoption ld ';;
- *)
- lt_prog_compiler_wl='-Wl,';;
- esac
- ;;
-
- sunos4*)
- lt_prog_compiler_wl='-Qoption ld '
- lt_prog_compiler_pic='-PIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
-
- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec ;then
- lt_prog_compiler_pic='-Kconform_pic'
- lt_prog_compiler_static='-Bstatic'
- fi
- ;;
-
- unicos*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_can_build_shared=no
- ;;
-
- uts4*)
- lt_prog_compiler_pic='-pic'
- lt_prog_compiler_static='-Bstatic'
- ;;
-
- *)
- lt_prog_compiler_can_build_shared=no
- ;;
- esac
- fi
-
-echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
-echo "${ECHO_T}$lt_prog_compiler_pic" >&6
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic"; then
-
-echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
-echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6
-if test "${lt_prog_compiler_pic_works+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- lt_prog_compiler_pic_works=no
- ac_outfile=conftest.$ac_objext
- printf "$lt_simple_compile_test_code" > conftest.$ac_ext
- lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- # The option is referenced via a variable to avoid confusing sed.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:8382: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&5
- echo "$as_me:8386: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s "$ac_outfile"; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $echo "X$_lt_compiler_boilerplate" | $Xsed >conftest.exp
- $SED '/^$/d' conftest.err >conftest.er2
- if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then
- lt_prog_compiler_pic_works=yes
- fi
- fi
- $rm conftest*
-
-fi
-echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5
-echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6
-
-if test x"$lt_prog_compiler_pic_works" = xyes; then
- case $lt_prog_compiler_pic in
- "" | " "*) ;;
- *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
- esac
-else
- lt_prog_compiler_pic=
- lt_prog_compiler_can_build_shared=no
-fi
-
-fi
-case "$host_os" in
- # For platforms which do not support PIC, -DPIC is meaningless:
- *djgpp*)
- lt_prog_compiler_pic=
- ;;
- *)
- lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
- ;;
-esac
-
-echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
-if test "${lt_cv_prog_compiler_c_o+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- lt_cv_prog_compiler_c_o=no
- $rm -r conftest 2>/dev/null
- mkdir conftest
- cd conftest
- mkdir out
- printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- lt_compiler_flag="-o out/conftest2.$ac_objext"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:8444: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>out/conftest.err)
- ac_status=$?
- cat out/conftest.err >&5
- echo "$as_me:8448: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s out/conftest2.$ac_objext
- then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- $echo "X$_lt_compiler_boilerplate" | $Xsed > out/conftest.exp
- $SED '/^$/d' out/conftest.err >out/conftest.er2
- if test ! -s out/conftest.err || diff out/conftest.exp out/conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_c_o=yes
- fi
- fi
- chmod u+w .
- $rm conftest*
- # SGI C++ compiler will create directory out/ii_files/ for
- # template instantiation
- test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
- $rm out/* && rmdir out
- cd ..
- rmdir conftest
- $rm conftest*
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
-echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6
-
-
-hard_links="nottested"
-if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
- # do not overwrite the value of need_locks provided by the user
- echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
- hard_links=yes
- $rm conftest*
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- touch conftest.a
- ln conftest.a conftest.b 2>&5 || hard_links=no
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- echo "$as_me:$LINENO: result: $hard_links" >&5
-echo "${ECHO_T}$hard_links" >&6
- if test "$hard_links" = no; then
- { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
- need_locks=warn
- fi
-else
- need_locks=no
-fi
-
-echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
-
- runpath_var=
- allow_undefined_flag=
- enable_shared_with_static_runtimes=no
- archive_cmds=
- archive_expsym_cmds=
- old_archive_From_new_cmds=
- old_archive_from_expsyms_cmds=
- export_dynamic_flag_spec=
- whole_archive_flag_spec=
- thread_safe_flag_spec=
- hardcode_libdir_flag_spec=
- hardcode_libdir_flag_spec_ld=
- hardcode_libdir_separator=
- hardcode_direct=no
- hardcode_minus_L=no
- hardcode_shlibpath_var=unsupported
- link_all_deplibs=unknown
- hardcode_automatic=no
- module_cmds=
- module_expsym_cmds=
- always_export_symbols=no
- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- # include_expsyms should be a list of space-separated symbols to be *always*
- # included in the symbol list
- include_expsyms=
- # exclude_expsyms can be an extended regexp of symbols to exclude
- # it will be wrapped by ` (' and `)$', so one must not match beginning or
- # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
- # as well as any symbol that contains `d'.
- exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
- # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
- # platforms (ab)use it in PIC code, but their linkers get confused if
- # the symbol is explicitly referenced. Since portable code cannot
- # rely on this symbol name, it's probably fine to never include it in
- # preloaded symbol tables.
- extract_expsyms_cmds=
- # Just being paranoid about ensuring that cc_basename is set.
- for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
- case $host_os in
- cygwin* | mingw* | pw32*)
- # FIXME: the MSVC++ port hasn't been tested in a loooong time
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- if test "$GCC" != yes; then
- with_gnu_ld=no
- fi
- ;;
- openbsd*)
- with_gnu_ld=no
- ;;
- esac
-
- ld_shlibs=yes
- if test "$with_gnu_ld" = yes; then
- # If archive_cmds runs LD, not CC, wlarc should be empty
- wlarc='${wl}'
-
- # Set some defaults for GNU ld with shared library support. These
- # are reset later if shared libraries are not supported. Putting them
- # here allows them to be overridden if necessary.
- runpath_var=LD_RUN_PATH
- hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
- export_dynamic_flag_spec='${wl}--export-dynamic'
- # ancient GNU ld didn't support --whole-archive et. al.
- if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
- whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- whole_archive_flag_spec=
- fi
- supports_anon_versioning=no
- case `$LD -v 2>/dev/null` in
- *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
- *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
- *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
- *\ 2.11.*) ;; # other 2.11 versions
- *) supports_anon_versioning=yes ;;
- esac
-
- # See if GNU ld supports shared libraries.
- case $host_os in
- aix3* | aix4* | aix5*)
- # On AIX/PPC, the GNU linker is very broken
- if test "$host_cpu" != ia64; then
- ld_shlibs=no
- cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support. If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-EOF
- fi
- ;;
-
- amigaos*)
- archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
-
- # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
- # that the semantics of dynamic libraries on AmigaOS, at least up
- # to version 4, is to share data among multiple programs linked
- # with the same dynamic library. Since this doesn't match the
- # behavior of shared libraries on other platforms, we can't use
- # them.
- ld_shlibs=no
- ;;
-
- beos*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- allow_undefined_flag=unsupported
- # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
- # support --undefined. This deserves some investigation. FIXME
- archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- cygwin* | mingw* | pw32*)
- # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
- # as there is no search path for DLLs.
- hardcode_libdir_flag_spec='-L$libdir'
- allow_undefined_flag=unsupported
- always_export_symbols=no
- enable_shared_with_static_runtimes=yes
- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
-
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
- cp $export_symbols $output_objdir/$soname.def;
- else
- echo EXPORTS > $output_objdir/$soname.def;
- cat $export_symbols >> $output_objdir/$soname.def;
- fi~
- $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- linux*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- tmp_addflag=
- case $cc_basename,$host_cpu in
- pgcc*) # Portland Group C compiler
- whole_archive_flag_spec='${wl}--whole-archive,`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag'
- ;;
- pgf77* | pgf90* ) # Portland Group f77 and f90 compilers
- whole_archive_flag_spec='${wl}--whole-archive,`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag -Mnomain' ;;
- ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
- tmp_addflag=' -i_dynamic' ;;
- efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
- tmp_addflag=' -i_dynamic -nofor_main' ;;
- ifc* | ifort*) # Intel Fortran compiler
- tmp_addflag=' -nofor_main' ;;
- esac
- archive_cmds='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
- if test $supports_anon_versioning = yes; then
- archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- $echo "local: *; };" >> $output_objdir/$libname.ver~
- $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
- fi
- else
- ld_shlibs=no
- fi
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
- solaris* | sysv5*)
- if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
- ld_shlibs=no
- cat <<EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-EOF
- elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- sunos4*)
- archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- wlarc=
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- *)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
- esac
-
- if test "$ld_shlibs" = no; then
- runpath_var=
- hardcode_libdir_flag_spec=
- export_dynamic_flag_spec=
- whole_archive_flag_spec=
- fi
- else
- # PORTME fill in a description of your system's linker (not GNU ld)
- case $host_os in
- aix3*)
- allow_undefined_flag=unsupported
- always_export_symbols=yes
- archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
- # Note: this linker hardcodes the directories in LIBPATH if there
- # are no directories specified by -L.
- hardcode_minus_L=yes
- if test "$GCC" = yes && test -z "$link_static_flag"; then
- # Neither direct hardcoding nor static linking is supported with a
- # broken collect2.
- hardcode_direct=unsupported
- fi
- ;;
-
- aix4* | aix5*)
- if test "$host_cpu" = ia64; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- exp_sym_flag='-Bexport'
- no_entry_flag=""
- else
- # If we're using GNU nm, then we don't want the "-C" option.
- # -C means demangle to AIX nm, but means don't demangle with GNU nm
- if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
- export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
- else
- export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
- fi
- aix_use_runtimelinking=no
-
- # Test if we are trying to use run time linking or normal
- # AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
- case $host_os in aix4.[23]|aix4.[23].*|aix5*)
- for ld_flag in $LDFLAGS; do
- if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
- aix_use_runtimelinking=yes
- break
- fi
- done
- esac
-
- exp_sym_flag='-bexport'
- no_entry_flag='-bnoentry'
- fi
-
- # When large executables or shared objects are built, AIX ld can
- # have problems creating the table of contents. If linking a library
- # or program results in "error TOC overflow" add -mminimal-toc to
- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
- archive_cmds=''
- hardcode_direct=yes
- hardcode_libdir_separator=':'
- link_all_deplibs=yes
-
- if test "$GCC" = yes; then
- case $host_os in aix4.[012]|aix4.[012].*)
- # We only want to do this on AIX 4.2 and lower, the check
- # below for broken collect2 doesn't work under 4.3+
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" && \
- strings "$collect2name" | grep resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- hardcode_direct=yes
- else
- # We have old collect2
- hardcode_direct=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- hardcode_minus_L=yes
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_libdir_separator=
- fi
- esac
- shared_flag='-shared'
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag="$shared_flag "'${wl}-G'
- fi
- else
- # not using gcc
- if test "$host_cpu" = ia64; then
- # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
- # chokes on -Wl,-G. The following line is correct:
- shared_flag='-G'
- else
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag='${wl}-G'
- else
- shared_flag='${wl}-bM:SRE'
- fi
- fi
- fi
-
- # It seems that -bexpall does not export symbols beginning with
- # underscore (_), so it is better to generate a list of symbols to export.
- always_export_symbols=yes
- if test "$aix_use_runtimelinking" = yes; then
- # Warning - without using the other runtime loading flags (-brtl),
- # -berok will link without error, but may produce a broken library.
- allow_undefined_flag='-berok'
- # Determine the default libpath from the value encoded in an empty executable.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-}'`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-}'`; fi
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
- else
- if test "$host_cpu" = ia64; then
- hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
- allow_undefined_flag="-z nodefs"
- archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
- else
- # Determine the default libpath from the value encoded in an empty executable.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-}'`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-}'`; fi
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
- # -berok will link without error, but may produce a broken library.
- no_undefined_flag=' ${wl}-bernotok'
- allow_undefined_flag=' ${wl}-berok'
- # -bexpall does not export symbols beginning with underscore (_)
- always_export_symbols=yes
- # Exported symbols can be pulled into shared objects from archives
- whole_archive_flag_spec=' '
- archive_cmds_need_lc=yes
- # This is similar to how AIX traditionally builds it's shared libraries.
- archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
- fi
- fi
- ;;
-
- amigaos*)
- archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- # see comment about different semantics on the GNU ld section
- ld_shlibs=no
- ;;
-
- bsdi[45]*)
- export_dynamic_flag_spec=-rdynamic
- ;;
-
- cygwin* | mingw* | pw32*)
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- hardcode_libdir_flag_spec=' '
- allow_undefined_flag=unsupported
- # Tell ltmain to make .lib files, not .a files.
- libext=lib
- # Tell ltmain to make .dll files, not .so files.
- shrext_cmds=".dll"
- # FIXME: Setting linknames here is a bad hack.
- archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
- # The linker will automatically build a .lib file if we build a DLL.
- old_archive_From_new_cmds='true'
- # FIXME: Should let the user specify the lib program.
- old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
- fix_srcfile_path='`cygpath -w "$srcfile"`'
- enable_shared_with_static_runtimes=yes
- ;;
-
- darwin* | rhapsody*)
- case "$host_os" in
- rhapsody* | darwin1.[012])
- allow_undefined_flag='${wl}-undefined ${wl}suppress'
- ;;
- *) # Darwin 1.3 on
- if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
- allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
- else
- case ${MACOSX_DEPLOYMENT_TARGET} in
- 10.[012])
- allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
- ;;
- 10.*)
- allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup'
- ;;
- esac
- fi
- ;;
- esac
- archive_cmds_need_lc=no
- hardcode_direct=no
- hardcode_automatic=yes
- hardcode_shlibpath_var=unsupported
- whole_archive_flag_spec=''
- link_all_deplibs=yes
- if test "$GCC" = yes ; then
-# echo "G77=$G77,compiler=$compiler,tagname=$tagname"
- if test "$tagname" = "F77"; then
-archive_cmds='$CC -dynamiclib -single_module -nostdlib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
- else
-archive_cmds='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
- fi
- output_verbose_link_cmd='echo'
- module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
- archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- else
- case $cc_basename in
- xlc*)
- output_verbose_link_cmd='echo'
- archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
- module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
- archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- ;;
- *)
- ld_shlibs=no
- ;;
- esac
- fi
- ;;
-
- dgux*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_shlibpath_var=no
- ;;
-
- freebsd1*)
- ld_shlibs=no
- ;;
-
- # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
- # support. Future versions do this automatically, but an explicit c++rt0.o
- # does not break anything, and helps significantly (at the cost of a little
- # extra space).
- freebsd2.2*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
- freebsd2*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=yes
- hardcode_shlibpath_var=no
- ;;
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | kfreebsd*-gnu | dragonfly*)
- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- hpux9*)
- if test "$GCC" = yes; then
- archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- fi
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator=:
- hardcode_direct=yes
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L=yes
- export_dynamic_flag_spec='${wl}-E'
- ;;
-
- hpux10* | hpux11*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- case "$host_cpu" in
- hppa*64*|ia64*)
- archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- else
- case "$host_cpu" in
- hppa*64*|ia64*)
- archive_cmds='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
- ;;
- *)
- archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- ;;
- esac
- fi
- if test "$with_gnu_ld" = no; then
- case "$host_cpu" in
- hppa*64*)
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_flag_spec_ld='+b $libdir'
- hardcode_libdir_separator=:
- hardcode_direct=no
- hardcode_shlibpath_var=no
- ;;
- ia64*)
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_direct=no
- hardcode_shlibpath_var=no
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L=yes
- ;;
- *)
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator=:
- hardcode_direct=yes
- export_dynamic_flag_spec='${wl}-E'
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L=yes
- ;;
- esac
- fi
- ;;
-
- irix5* | irix6* | nonstopux*)
- if test "$GCC" = yes; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- hardcode_libdir_flag_spec_ld='-rpath $libdir'
- fi
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- link_all_deplibs=yes
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
- else
- archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
- fi
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- newsos6)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- hardcode_shlibpath_var=no
- ;;
-
- openbsd*)
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
- hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
- export_dynamic_flag_spec='${wl}-E'
- else
- case $host_os in
- openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-R$libdir'
- ;;
- *)
- archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
- ;;
- esac
- fi
- ;;
-
- os2*)
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- allow_undefined_flag=unsupported
- archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
- old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
- ;;
-
- osf3*)
- if test "$GCC" = yes; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- allow_undefined_flag=' -expect_unresolved \*'
- archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- fi
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- ;;
-
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test "$GCC" = yes; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- else
- allow_undefined_flag=' -expect_unresolved \*'
- archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
- $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
-
- # Both c and cxx compiler support -rpath directly
- hardcode_libdir_flag_spec='-rpath $libdir'
- fi
- hardcode_libdir_separator=:
- ;;
-
- sco3.2v5*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var=no
- export_dynamic_flag_spec='${wl}-Bexport'
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- ;;
-
- solaris*)
- no_undefined_flag=' -z text'
- if test "$GCC" = yes; then
- wlarc='${wl}'
- archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
- else
- wlarc=''
- archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
- archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
- fi
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_shlibpath_var=no
- case $host_os in
- solaris2.[0-5] | solaris2.[0-5].*) ;;
- *)
- # The compiler driver will combine linker options so we
- # cannot just pass the convience library names through
- # without $wl, iff we do not link with $LD.
- # Luckily, gcc supports the same syntax we need for Sun Studio.
- # Supported since Solaris 2.6 (maybe 2.5.1?)
- case $wlarc in
- '')
- whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
- *)
- whole_archive_flag_spec='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
- esac ;;
- esac
- link_all_deplibs=yes
- ;;
-
- sunos4*)
- if test "x$host_vendor" = xsequent; then
- # Use $CC to link under sequent, because it throws in some extra .o
- # files that make .init and .fini sections work.
- archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
- fi
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_direct=yes
- hardcode_minus_L=yes
- hardcode_shlibpath_var=no
- ;;
-
- sysv4)
- case $host_vendor in
- sni)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes # is this really true???
- ;;
- siemens)
- ## LD is ld it makes a PLAMLIB
- ## CC just makes a GrossModule.
- archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
- reload_cmds='$CC -r -o $output$reload_objs'
- hardcode_direct=no
- ;;
- motorola)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=no #Motorola manual says yes, but my tests say they lie
- ;;
- esac
- runpath_var='LD_RUN_PATH'
- hardcode_shlibpath_var=no
- ;;
-
- sysv4.3*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var=no
- export_dynamic_flag_spec='-Bexport'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var=no
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- ld_shlibs=yes
- fi
- ;;
-
- sysv4.2uw2*)
- archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=no
- hardcode_shlibpath_var=no
- hardcode_runpath_var=yes
- runpath_var=LD_RUN_PATH
- ;;
-
- sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
- no_undefined_flag='${wl}-z ${wl}text'
- if test "$GCC" = yes; then
- archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- runpath_var='LD_RUN_PATH'
- hardcode_shlibpath_var=no
- ;;
-
- sysv5*)
- no_undefined_flag=' -z text'
- # $CC -shared without GNU ld will not create a library from C++
- # object files and a static libstdc++, better avoid it by now
- archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
- archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
- hardcode_libdir_flag_spec=
- hardcode_shlibpath_var=no
- runpath_var='LD_RUN_PATH'
- ;;
-
- uts4*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_shlibpath_var=no
- ;;
-
- *)
- ld_shlibs=no
- ;;
- esac
- fi
-
-echo "$as_me:$LINENO: result: $ld_shlibs" >&5
-echo "${ECHO_T}$ld_shlibs" >&6
-test "$ld_shlibs" = no && can_build_shared=no
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
- variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$archive_cmds_need_lc" in
-x|xyes)
- # Assume -lc should be added
- archive_cmds_need_lc=yes
-
- if test "$enable_shared" = yes && test "$GCC" = yes; then
- case $archive_cmds in
- *'~'*)
- # FIXME: we may have to deal with multi-command sequences.
- ;;
- '$CC '*)
- # Test whether the compiler implicitly links with -lc since on some
- # systems, -lgcc has to come before -lc. If gcc already passes -lc
- # to ld, don't add -lc before -lgcc.
- echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
- $rm conftest*
- printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } 2>conftest.err; then
- soname=conftest
- lib=conftest
- libobjs=conftest.$ac_objext
- deplibs=
- wl=$lt_prog_compiler_wl
- compiler_flags=-v
- linker_flags=-v
- verstring=
- output_objdir=.
- libname=conftest
- lt_save_allow_undefined_flag=$allow_undefined_flag
- allow_undefined_flag=
- if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
- (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
- then
- archive_cmds_need_lc=no
- else
- archive_cmds_need_lc=yes
- fi
- allow_undefined_flag=$lt_save_allow_undefined_flag
- else
- cat conftest.err 1>&5
- fi
- $rm conftest*
- echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
-echo "${ECHO_T}$archive_cmds_need_lc" >&6
- ;;
- esac
- fi
- ;;
-esac
-
-echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-if test "$GCC" = yes; then
- sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
- # if the path contains ";" then we assume it to be the separator
- # otherwise default to the standard path separator (i.e. ":") - it is
- # assumed that no part of a normal pathname contains ";" but that should
- # okay in the real world where ";" in dirpaths is itself problematic.
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
- else
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
-else
- sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
- shlibpath_var=LIBPATH
-
- # AIX 3 has no versioning support, so we append a major version to the name.
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
-
-aix4* | aix5*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- hardcode_into_libs=yes
- if test "$host_cpu" = ia64; then
- # AIX 5 supports IA64
- library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- else
- # With GCC up to 2.95.x, collect2 would create an import file
- # for dependence libraries. The import file would start with
- # the line `#! .'. This would cause the generated library to
- # depend on `.', always an invalid library. This was fixed in
- # development snapshots of GCC prior to 3.0.
- case $host_os in
- aix4 | aix4.[01] | aix4.[01].*)
- if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
- echo ' yes '
- echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
- :
- else
- can_build_shared=no
- fi
- ;;
- esac
- # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
- # soname into executable. Probably we can add versioning support to
- # collect2, so additional links can be useful in future.
- if test "$aix_use_runtimelinking" = yes; then
- # If using run time linking (on AIX 4.2 or later) use lib<name>.so
- # instead of lib<name>.a to let people know that these are not
- # typical AIX shared libraries.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- else
- # We preserve .a as extension for shared libraries through AIX4.2
- # and later when we are not doing run time linking.
- library_names_spec='${libname}${release}.a $libname.a'
- soname_spec='${libname}${release}${shared_ext}$major'
- fi
- shlibpath_var=LIBPATH
- fi
- ;;
-
-amigaos*)
- library_names_spec='$libname.ixlibrary $libname.a'
- # Create ${libname}_ixlibrary.a entries in /sys/libs.
- finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
- ;;
-
-beos*)
- library_names_spec='${libname}${shared_ext}'
- dynamic_linker="$host_os ld.so"
- shlibpath_var=LIBRARY_PATH
- ;;
-
-bsdi[45]*)
- version_type=linux
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
- sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
- # the default ld.so.conf also contains /usr/contrib/lib and
- # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
- # libtool to hard-code these into programs
- ;;
-
-cygwin* | mingw* | pw32*)
- version_type=windows
- shrext_cmds=".dll"
- need_version=no
- need_lib_prefix=no
-
- case $GCC,$host_os in
- yes,cygwin* | yes,mingw* | yes,pw32*)
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \${file}`~
- dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
- dldir=$destdir/`dirname \$dlpath`~
- test -d \$dldir || mkdir -p \$dldir~
- $install_prog $dir/$dlname \$dldir/$dlname'
- postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
- dlpath=$dir/\$dldll~
- $rm \$dlpath'
- shlibpath_overrides_runpath=yes
-
- case $host_os in
- cygwin*)
- # Cygwin DLLs use 'cyg' prefix rather than 'lib'
- soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
- ;;
- mingw*)
- # MinGW DLLs use traditional 'lib' prefix
- soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
- # It is most probably a Windows format PATH printed by
- # mingw gcc, but we are running on Cygwin. Gcc prints its search
- # path with ; separators, and with drive letters. We can handle the
- # drive letters (cygwin fileutils understands them), so leave them,
- # especially as we might pass files found there to a mingw objdump,
- # which wouldn't understand a cygwinified path. Ahh.
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
- else
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
- ;;
- pw32*)
- # pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- ;;
- esac
- ;;
-
- *)
- library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
- ;;
- esac
- dynamic_linker='Win32 ld.exe'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-
-darwin* | rhapsody*)
- dynamic_linker="$host_os dyld"
- version_type=darwin
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
- soname_spec='${libname}${release}${major}$shared_ext'
- shlibpath_overrides_runpath=yes
- shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
- # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
- if test "$GCC" = yes; then
- sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
- else
- sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
- fi
- sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
- ;;
-
-dgux*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-freebsd1*)
- dynamic_linker=no
- ;;
-
-kfreebsd*-gnu)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- dynamic_linker='GNU ld.so'
- ;;
-
-freebsd* | dragonfly*)
- # DragonFly does not have aout. When/if they implement a new
- # versioning mechanism, adjust this.
- objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
- version_type=freebsd-$objformat
- case $version_type in
- freebsd-elf*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- need_version=no
- need_lib_prefix=no
- ;;
- freebsd-*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
- need_version=yes
- ;;
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
- freebsd2*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- *) # from 3.2 on
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
- esac
- ;;
-
-gnu*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- ;;
-
-hpux9* | hpux10* | hpux11*)
- # Give a soname corresponding to the major version so that dld.sl refuses to
- # link against other versions.
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- case "$host_cpu" in
- ia64*)
- shrext_cmds='.so'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.so"
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- if test "X$HPUX_IA64_MODE" = X32; then
- sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
- else
- sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
- fi
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- hppa*64*)
- shrext_cmds='.sl'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- *)
- shrext_cmds='.sl'
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=SHLIB_PATH
- shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
- esac
- # HP-UX runs *really* slowly unless shared libraries are mode 555.
- postinstall_cmds='chmod 555 $lib'
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $host_os in
- nonstopux*) version_type=nonstopux ;;
- *)
- if test "$lt_cv_prog_gnu_ld" = yes; then
- version_type=linux
- else
- version_type=irix
- fi ;;
- esac
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
- case $host_os in
- irix5* | nonstopux*)
- libsuff= shlibsuff=
- ;;
- *)
- case $LD in # libtool.m4 will add one of these switches to LD
- *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
- libsuff= shlibsuff= libmagic=32-bit;;
- *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
- libsuff=32 shlibsuff=N32 libmagic=N32;;
- *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
- libsuff=64 shlibsuff=64 libmagic=64-bit;;
- *) libsuff= shlibsuff= libmagic=never-match;;
- esac
- ;;
- esac
- shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
- sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
- hardcode_into_libs=yes
- ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
- dynamic_linker=no
- ;;
-
-# This must be Linux ELF.
-linux*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- # This implies no fast_install, which is unacceptable.
- # Some rework will be needed to allow for fast_install
- # before this can be enabled.
- hardcode_into_libs=yes
-
- # Append ld.so.conf contents to the search path
- if test -f /etc/ld.so.conf; then
- lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
- fi
-
- # We used to test for /lib/ld.so.1 and disable shared libraries on
- # powerpc, because MkLinux only supported shared libraries with the
- # GNU dynamic linker. Since this was broken with cross compilers,
- # most powerpc-linux boxes support dynamic linking these days and
- # people can always --disable-shared, the test was removed, and we
- # assume the GNU/Linux dynamic linker is in use.
- dynamic_linker='GNU/Linux ld.so'
- ;;
-
-knetbsd*-gnu)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- dynamic_linker='GNU ld.so'
- ;;
-
-netbsd*)
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- dynamic_linker='NetBSD (a.out) ld.so'
- else
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='NetBSD ld.elf_so'
- fi
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
-
-newsos6)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-nto-qnx*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-openbsd*)
- version_type=sunos
- need_lib_prefix=no
- # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
- case $host_os in
- openbsd3.3 | openbsd3.3.*) need_version=yes ;;
- *) need_version=no ;;
- esac
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- case $host_os in
- openbsd2.[89] | openbsd2.[89].*)
- shlibpath_overrides_runpath=no
- ;;
- *)
- shlibpath_overrides_runpath=yes
- ;;
- esac
- else
- shlibpath_overrides_runpath=yes
- fi
- ;;
-
-os2*)
- libname_spec='$name'
- shrext_cmds=".dll"
- need_lib_prefix=no
- library_names_spec='$libname${shared_ext} $libname.a'
- dynamic_linker='OS/2 ld.exe'
- shlibpath_var=LIBPATH
- ;;
-
-osf3* | osf4* | osf5*)
- version_type=osf
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
- sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
- ;;
-
-sco3.2v5*)
- version_type=osf
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-solaris*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- # ldd complains unless libraries are executable
- postinstall_cmds='chmod +x $lib'
- ;;
-
-sunos4*)
- version_type=sunos
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- if test "$with_gnu_ld" = yes; then
- need_lib_prefix=no
- fi
- need_version=yes
- ;;
-
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- case $host_vendor in
- sni)
- shlibpath_overrides_runpath=no
- need_lib_prefix=no
- export_dynamic_flag_spec='${wl}-Blargedynsym'
- runpath_var=LD_RUN_PATH
- ;;
- siemens)
- need_lib_prefix=no
- ;;
- motorola)
- need_lib_prefix=no
- need_version=no
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
- ;;
- esac
- ;;
-
-sysv4*MP*)
- if test -d /usr/nec ;then
- version_type=linux
- library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
- soname_spec='$libname${shared_ext}.$major'
- shlibpath_var=LD_LIBRARY_PATH
- fi
- ;;
-
-uts4*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-*)
- dynamic_linker=no
- ;;
-esac
-echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-echo "${ECHO_T}$dynamic_linker" >&6
-test "$dynamic_linker" = no && can_build_shared=no
-
-echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
-hardcode_action=
-if test -n "$hardcode_libdir_flag_spec" || \
- test -n "$runpath_var" || \
- test "X$hardcode_automatic" = "Xyes" ; then
-
- # We can hardcode non-existant directories.
- if test "$hardcode_direct" != no &&
- # If the only mechanism to avoid hardcoding is shlibpath_var, we
- # have to relink, otherwise we might link with an installed library
- # when we should be linking with a yet-to-be-installed one
- ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no &&
- test "$hardcode_minus_L" != no; then
- # Linking always hardcodes the temporary library directory.
- hardcode_action=relink
- else
- # We can link without hardcoding, and we can hardcode nonexisting dirs.
- hardcode_action=immediate
- fi
-else
- # We cannot hardcode anything, or else we can only hardcode existing
- # directories.
- hardcode_action=unsupported
-fi
-echo "$as_me:$LINENO: result: $hardcode_action" >&5
-echo "${ECHO_T}$hardcode_action" >&6
-
-if test "$hardcode_action" = relink; then
- # Fast installation is not supported
- enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
- test "$enable_shared" = no; then
- # Fast installation is not necessary
- enable_fast_install=needless
-fi
-
-striplib=
-old_striplib=
-echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
-echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
-if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
- test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
- test -z "$striplib" && striplib="$STRIP --strip-unneeded"
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
-# FIXME - insert some real tests, host_os isn't really good enough
- case $host_os in
- darwin*)
- if test -n "$STRIP" ; then
- striplib="$STRIP -x"
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
- else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
- ;;
- *)
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- ;;
- esac
-fi
-
-if test "x$enable_dlopen" != xyes; then
- enable_dlopen=unknown
- enable_dlopen_self=unknown
- enable_dlopen_self_static=unknown
-else
- lt_cv_dlopen=no
- lt_cv_dlopen_libs=
-
- case $host_os in
- beos*)
- lt_cv_dlopen="load_add_on"
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
- ;;
-
- mingw* | pw32*)
- lt_cv_dlopen="LoadLibrary"
- lt_cv_dlopen_libs=
- ;;
-
- cygwin*)
- lt_cv_dlopen="dlopen"
- lt_cv_dlopen_libs=
- ;;
-
- darwin*)
- # if libdl is installed we need to link against it
- echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
-echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char dlopen ();
-int
-main ()
-{
-dlopen ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_dl_dlopen=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dl_dlopen=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
-echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
-if test $ac_cv_lib_dl_dlopen = yes; then
- lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
-
- lt_cv_dlopen="dyld"
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
-
-fi
-
- ;;
-
- *)
- echo "$as_me:$LINENO: checking for shl_load" >&5
-echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
-if test "${ac_cv_func_shl_load+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define shl_load innocuous_shl_load
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char shl_load (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef shl_load
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char shl_load ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_shl_load) || defined (__stub___shl_load)
-choke me
-#else
-char (*f) () = shl_load;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != shl_load;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_shl_load=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_shl_load=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
-echo "${ECHO_T}$ac_cv_func_shl_load" >&6
-if test $ac_cv_func_shl_load = yes; then
- lt_cv_dlopen="shl_load"
-else
- echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
-echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
-if test "${ac_cv_lib_dld_shl_load+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char shl_load ();
-int
-main ()
-{
-shl_load ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_dld_shl_load=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dld_shl_load=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
-echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
-if test $ac_cv_lib_dld_shl_load = yes; then
- lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
-else
- echo "$as_me:$LINENO: checking for dlopen" >&5
-echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
-if test "${ac_cv_func_dlopen+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define dlopen innocuous_dlopen
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char dlopen (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef dlopen
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char dlopen ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_dlopen) || defined (__stub___dlopen)
-choke me
-#else
-char (*f) () = dlopen;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != dlopen;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_dlopen=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_dlopen=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
-echo "${ECHO_T}$ac_cv_func_dlopen" >&6
-if test $ac_cv_func_dlopen = yes; then
- lt_cv_dlopen="dlopen"
-else
- echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
-echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char dlopen ();
-int
-main ()
-{
-dlopen ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_dl_dlopen=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dl_dlopen=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
-echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
-if test $ac_cv_lib_dl_dlopen = yes; then
- lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
- echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
-echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
-if test "${ac_cv_lib_svld_dlopen+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsvld $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char dlopen ();
-int
-main ()
-{
-dlopen ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_svld_dlopen=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_svld_dlopen=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
-echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
-if test $ac_cv_lib_svld_dlopen = yes; then
- lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
-else
- echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
-echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
-if test "${ac_cv_lib_dld_dld_link+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char dld_link ();
-int
-main ()
-{
-dld_link ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_dld_dld_link=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dld_dld_link=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
-echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
-if test $ac_cv_lib_dld_dld_link = yes; then
- lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
- ;;
- esac
-
- if test "x$lt_cv_dlopen" != xno; then
- enable_dlopen=yes
- else
- enable_dlopen=no
- fi
-
- case $lt_cv_dlopen in
- dlopen)
- save_CPPFLAGS="$CPPFLAGS"
- test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-
- save_LDFLAGS="$LDFLAGS"
- eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
- save_LIBS="$LIBS"
- LIBS="$lt_cv_dlopen_libs $LIBS"
-
- echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
-echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
-if test "${lt_cv_dlopen_self+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$cross_compiling" = yes; then :
- lt_cv_dlopen_self=cross
-else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<EOF
-#line 10689 "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LT_DLGLOBAL RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-# define LT_DLGLOBAL DL_GLOBAL
-# else
-# define LT_DLGLOBAL 0
-# endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
- find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-# ifdef RTLD_LAZY
-# define LT_DLLAZY_OR_NOW RTLD_LAZY
-# else
-# ifdef DL_LAZY
-# define LT_DLLAZY_OR_NOW DL_LAZY
-# else
-# ifdef RTLD_NOW
-# define LT_DLLAZY_OR_NOW RTLD_NOW
-# else
-# ifdef DL_NOW
-# define LT_DLLAZY_OR_NOW DL_NOW
-# else
-# define LT_DLLAZY_OR_NOW 0
-# endif
-# endif
-# endif
-# endif
-#endif
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
- int status = $lt_dlunknown;
-
- if (self)
- {
- if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
- else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
- /* dlclose (self); */
- }
-
- exit (status);
-}
-EOF
- if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
- (./conftest; exit; ) 2>/dev/null
- lt_status=$?
- case x$lt_status in
- x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
- x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
- x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
- esac
- else :
- # compilation failed
- lt_cv_dlopen_self=no
- fi
-fi
-rm -fr conftest*
-
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
-echo "${ECHO_T}$lt_cv_dlopen_self" >&6
-
- if test "x$lt_cv_dlopen_self" = xyes; then
- LDFLAGS="$LDFLAGS $link_static_flag"
- echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
-echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
-if test "${lt_cv_dlopen_self_static+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$cross_compiling" = yes; then :
- lt_cv_dlopen_self_static=cross
-else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<EOF
-#line 10787 "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LT_DLGLOBAL RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-# define LT_DLGLOBAL DL_GLOBAL
-# else
-# define LT_DLGLOBAL 0
-# endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
- find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-# ifdef RTLD_LAZY
-# define LT_DLLAZY_OR_NOW RTLD_LAZY
-# else
-# ifdef DL_LAZY
-# define LT_DLLAZY_OR_NOW DL_LAZY
-# else
-# ifdef RTLD_NOW
-# define LT_DLLAZY_OR_NOW RTLD_NOW
-# else
-# ifdef DL_NOW
-# define LT_DLLAZY_OR_NOW DL_NOW
-# else
-# define LT_DLLAZY_OR_NOW 0
-# endif
-# endif
-# endif
-# endif
-#endif
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
- int status = $lt_dlunknown;
-
- if (self)
- {
- if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
- else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
- /* dlclose (self); */
- }
-
- exit (status);
-}
-EOF
- if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
- (./conftest; exit; ) 2>/dev/null
- lt_status=$?
- case x$lt_status in
- x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
- x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
- x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
- esac
- else :
- # compilation failed
- lt_cv_dlopen_self_static=no
- fi
-fi
-rm -fr conftest*
-
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
-echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
- fi
-
- CPPFLAGS="$save_CPPFLAGS"
- LDFLAGS="$save_LDFLAGS"
- LIBS="$save_LIBS"
- ;;
- esac
-
- case $lt_cv_dlopen_self in
- yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
- *) enable_dlopen_self=unknown ;;
- esac
-
- case $lt_cv_dlopen_self_static in
- yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
- *) enable_dlopen_self_static=unknown ;;
- esac
-fi
-
-
-# Report which librarie types wil actually be built
-echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
-echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
-echo "$as_me:$LINENO: result: $can_build_shared" >&5
-echo "${ECHO_T}$can_build_shared" >&6
-
-echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
-echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
-test "$can_build_shared" = "no" && enable_shared=no
-
-# On AIX, shared libraries and static libraries use the same namespace, and
-# are all built from PIC.
-case "$host_os" in
-aix3*)
- test "$enable_shared" = yes && enable_static=no
- if test -n "$RANLIB"; then
- archive_cmds="$archive_cmds~\$RANLIB \$lib"
- postinstall_cmds='$RANLIB $lib'
- fi
- ;;
-
-aix4* | aix5*)
- if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
- test "$enable_shared" = yes && enable_static=no
- fi
- ;;
-esac
-echo "$as_me:$LINENO: result: $enable_shared" >&5
-echo "${ECHO_T}$enable_shared" >&6
-
-echo "$as_me:$LINENO: checking whether to build static libraries" >&5
-echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-echo "$as_me:$LINENO: result: $enable_static" >&5
-echo "${ECHO_T}$enable_static" >&6
-
-# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
- # See if we are running on zsh, and set the options which allow our commands through
- # without removal of \ escapes.
- if test -n "${ZSH_VERSION+set}" ; then
- setopt NO_GLOB_SUBST
- fi
- # Now quote all the things that may contain metacharacters while being
- # careful not to overquote the AC_SUBSTed values. We take copies of the
- # variables and quote the copies for generation of the libtool script.
- for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
- SED SHELL STRIP \
- libname_spec library_names_spec soname_spec extract_expsyms_cmds \
- old_striplib striplib file_magic_cmd finish_cmds finish_eval \
- deplibs_check_method reload_flag reload_cmds need_locks \
- lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
- lt_cv_sys_global_symbol_to_c_name_address \
- sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
- old_postinstall_cmds old_postuninstall_cmds \
- compiler \
- CC \
- LD \
- lt_prog_compiler_wl \
- lt_prog_compiler_pic \
- lt_prog_compiler_static \
- lt_prog_compiler_no_builtin_flag \
- export_dynamic_flag_spec \
- thread_safe_flag_spec \
- whole_archive_flag_spec \
- enable_shared_with_static_runtimes \
- old_archive_cmds \
- old_archive_from_new_cmds \
- predep_objects \
- postdep_objects \
- predeps \
- postdeps \
- compiler_lib_search_path \
- archive_cmds \
- archive_expsym_cmds \
- postinstall_cmds \
- postuninstall_cmds \
- old_archive_from_expsyms_cmds \
- allow_undefined_flag \
- no_undefined_flag \
- export_symbols_cmds \
- hardcode_libdir_flag_spec \
- hardcode_libdir_flag_spec_ld \
- hardcode_libdir_separator \
- hardcode_automatic \
- module_cmds \
- module_expsym_cmds \
- lt_cv_prog_compiler_c_o \
- exclude_expsyms \
- include_expsyms; do
-
- case $var in
- old_archive_cmds | \
- old_archive_from_new_cmds | \
- archive_cmds | \
- archive_expsym_cmds | \
- module_cmds | \
- module_expsym_cmds | \
- old_archive_from_expsyms_cmds | \
- export_symbols_cmds | \
- extract_expsyms_cmds | reload_cmds | finish_cmds | \
- postinstall_cmds | postuninstall_cmds | \
- old_postinstall_cmds | old_postuninstall_cmds | \
- sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
- # Double-quote double-evaled strings.
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
- ;;
- *)
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
- ;;
- esac
- done
-
- case $lt_echo in
- *'\$0 --fallback-echo"')
- lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
- ;;
- esac
-
-cfgfile="${ofile}T"
- trap "$rm \"$cfgfile\"; exit 1" 1 2 15
- $rm -f "$cfgfile"
- { echo "$as_me:$LINENO: creating $ofile" >&5
-echo "$as_me: creating $ofile" >&6;}
-
- cat <<__EOF__ >> "$cfgfile"
-#! $SHELL
-
-# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
-# Free Software Foundation, Inc.
-#
-# This file is part of GNU Libtool:
-# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# A sed program that does not truncate output.
-SED=$lt_SED
-
-# Sed that helps us avoid accidentally triggering echo(1) options like -n.
-Xsed="$SED -e 1s/^X//"
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# The names of the tagged configurations supported by this script.
-available_tags=
-
-# ### BEGIN LIBTOOL CONFIG
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$archive_cmds_need_lc
-
-# Whether or not to disallow shared libs when runtime libs are static
-allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-host_os=$host_os
-
-# The build system.
-build_alias=$build_alias
-build=$build
-build_os=$build_os
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# A language-specific compiler.
-CC=$lt_compiler
-
-# Is the compiler the GNU C compiler?
-with_gcc=$GCC
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_LD
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# Do we need the lib prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Whether dlopen is supported.
-dlopen_support=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_thread_safe_flag_spec
-
-# Library versioning type.
-version_type=$version_type
-
-# Format of library name prefix.
-libname_spec=$lt_libname_spec
-
-# List of archive names. First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME.
-library_names_spec=$lt_library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$lt_soname_spec
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_old_archive_cmds
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
-
-# Commands used to build and install a shared archive.
-archive_cmds=$lt_archive_cmds
-archive_expsym_cmds=$lt_archive_expsym_cmds
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_module_cmds
-module_expsym_cmds=$lt_module_expsym_cmds
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_predep_objects
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_postdep_objects
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_predeps
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$lt_postdeps
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_compiler_lib_search_path
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$lt_deplibs_check_method
-
-# Command to use when deplibs_check_method == file_magic.
-file_magic_cmd=$lt_file_magic_cmd
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration
-global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-
-# Transform the output of nm in a C name address pair
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
-
-# If ld is used when linking, flag to hardcode \$libdir into
-# a binary during linking. This must work even if \$libdir does
-# not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator
-
-# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$hardcode_direct
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$hardcode_minus_L
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var
-
-# Set to yes if building a shared library automatically hardcodes DIR into the library
-# and all subsequent libraries and executables linked against it.
-hardcode_automatic=$hardcode_automatic
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path="$fix_srcfile_path"
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$always_export_symbols
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms
-
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms
-
-# ### END LIBTOOL CONFIG
-
-__EOF__
-
-
- case $host_os in
- aix3*)
- cat <<\EOF >> "$cfgfile"
-
-# AIX sometimes has problems with the GCC collect2 program. For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
- COLLECT_NAMES=
- export COLLECT_NAMES
-fi
-EOF
- ;;
- esac
-
- # We use sed instead of cat because bash on DJGPP gets confused if
- # if finds mixed CR/LF and LF-only lines. Since sed operates in
- # text mode, it properly converts lines to CR/LF. This bash problem
- # is reportedly fixed, but why not run on old versions too?
- sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
-
- mv -f "$cfgfile" "$ofile" || \
- (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
- chmod +x "$ofile"
-
-else
- # If there is no Makefile yet, we rely on a make rule to execute
- # `config.status --recheck' to rerun these tests and create the
- # libtool script then.
- ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
- if test -f "$ltmain_in"; then
- test -f Makefile && make "$ltmain"
- fi
-fi
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-CC="$lt_save_CC"
-
-
-# Check whether --with-tags or --without-tags was given.
-if test "${with_tags+set}" = set; then
- withval="$with_tags"
- tagnames="$withval"
-fi;
-
-if test -f "$ltmain" && test -n "$tagnames"; then
- if test ! -f "${ofile}"; then
- { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5
-echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;}
- fi
-
- if test -z "$LTCC"; then
- eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
- if test -z "$LTCC"; then
- { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5
-echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;}
- else
- { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5
-echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;}
- fi
- fi
-
- # Extract list of available tagged configurations in $ofile.
- # Note that this assumes the entire list is on one line.
- available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
-
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for tagname in $tagnames; do
- IFS="$lt_save_ifs"
- # Check whether tagname contains only valid characters
- case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in
- "") ;;
- *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5
-echo "$as_me: error: invalid tag name: $tagname" >&2;}
- { (exit 1); exit 1; }; }
- ;;
- esac
-
- if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
- then
- { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5
-echo "$as_me: error: tag name \"$tagname\" already exists" >&2;}
- { (exit 1); exit 1; }; }
- fi
-
- # Update the list of available tags.
- if test -n "$tagname"; then
- echo appending configuration tag \"$tagname\" to $ofile
-
- case $tagname in
- CXX)
- if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
- ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
- (test "X$CXX" != "Xg++"))) ; then
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-
-
-
-archive_cmds_need_lc_CXX=no
-allow_undefined_flag_CXX=
-always_export_symbols_CXX=no
-archive_expsym_cmds_CXX=
-export_dynamic_flag_spec_CXX=
-hardcode_direct_CXX=no
-hardcode_libdir_flag_spec_CXX=
-hardcode_libdir_flag_spec_ld_CXX=
-hardcode_libdir_separator_CXX=
-hardcode_minus_L_CXX=no
-hardcode_automatic_CXX=no
-module_cmds_CXX=
-module_expsym_cmds_CXX=
-link_all_deplibs_CXX=unknown
-old_archive_cmds_CXX=$old_archive_cmds
-no_undefined_flag_CXX=
-whole_archive_flag_spec_CXX=
-enable_shared_with_static_runtimes_CXX=no
-
-# Dependencies to place before and after the object being linked:
-predep_objects_CXX=
-postdep_objects_CXX=
-predeps_CXX=
-postdeps_CXX=
-compiler_lib_search_path_CXX=
-
-# Source file extension for C++ test sources.
-ac_ext=cc
-
-# Object file extension for compiled C++ test sources.
-objext=o
-objext_CXX=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;\n"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(int, char *) { return(0); }\n'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-printf "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$rm conftest*
-
-ac_outfile=conftest.$ac_objext
-printf "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$rm conftest*
-
-
-# Allow CC to be a program name with arguments.
-lt_save_CC=$CC
-lt_save_LD=$LD
-lt_save_GCC=$GCC
-GCC=$GXX
-lt_save_with_gnu_ld=$with_gnu_ld
-lt_save_path_LD=$lt_cv_path_LD
-if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
- lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
-else
- unset lt_cv_prog_gnu_ld
-fi
-if test -n "${lt_cv_path_LDCXX+set}"; then
- lt_cv_path_LD=$lt_cv_path_LDCXX
-else
- unset lt_cv_path_LD
-fi
-test -z "${LDCXX+set}" || LD=$LDCXX
-CC=${CXX-"c++"}
-compiler=$CC
-compiler_CXX=$CC
-for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-
-# We don't want -fno-exception wen compiling C++ code, so set the
-# no_builtin_flag separately
-if test "$GXX" = yes; then
- lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
-else
- lt_prog_compiler_no_builtin_flag_CXX=
-fi
-
-if test "$GXX" = yes; then
- # Set up default GNU C++ configuration
-
-
-# Check whether --with-gnu-ld or --without-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then
- withval="$with_gnu_ld"
- test "$withval" = no || with_gnu_ld=yes
-else
- with_gnu_ld=no
-fi;
-ac_prog=ld
-if test "$GCC" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- echo "$as_me:$LINENO: checking for ld used by $CC" >&5
-echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
- case $host in
- *-*-mingw*)
- # gcc leaves a trailing carriage return which upsets mingw
- ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
- *)
- ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
- esac
- case $ac_prog in
- # Accept absolute paths.
- [\\/]* | ?:[\\/]*)
- re_direlt='/[^/][^/]*/\.\./'
- # Canonicalize the pathname of ld
- ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
- while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
- done
- test -z "$LD" && LD="$ac_prog"
- ;;
- "")
- # If it fails, then pretend we aren't using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
-elif test "$with_gnu_ld" = yes; then
- echo "$as_me:$LINENO: checking for GNU ld" >&5
-echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
-else
- echo "$as_me:$LINENO: checking for non-GNU ld" >&5
-echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
-fi
-if test "${lt_cv_path_LD+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -z "$LD"; then
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- lt_cv_path_LD="$ac_dir/$ac_prog"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some GNU ld's only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
- *GNU* | *'with BFD'*)
- test "$with_gnu_ld" != no && break
- ;;
- *)
- test "$with_gnu_ld" != yes && break
- ;;
- esac
- fi
- done
- IFS="$lt_save_ifs"
-else
- lt_cv_path_LD="$LD" # Let the user override the test with a path.
-fi
-fi
-
-LD="$lt_cv_path_LD"
-if test -n "$LD"; then
- echo "$as_me:$LINENO: result: $LD" >&5
-echo "${ECHO_T}$LD" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
-echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
- { (exit 1); exit 1; }; }
-echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
-echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
-if test "${lt_cv_prog_gnu_ld+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- # I'd rather use --version here, but apparently some GNU ld's only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
- lt_cv_prog_gnu_ld=yes
- ;;
-*)
- lt_cv_prog_gnu_ld=no
- ;;
-esac
-fi
-echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
-echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
-with_gnu_ld=$lt_cv_prog_gnu_ld
-
-
-
- # Check if GNU C++ uses GNU ld as the underlying linker, since the
- # archiving commands below assume that GNU ld is being used.
- if test "$with_gnu_ld" = yes; then
- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-
- hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
- export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-
- # If archive_cmds runs LD, not CC, wlarc should be empty
- # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
- # investigate it a little bit more. (MM)
- wlarc='${wl}'
-
- # ancient GNU ld didn't support --whole-archive et. al.
- if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
- grep 'no-whole-archive' > /dev/null; then
- whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- whole_archive_flag_spec_CXX=
- fi
- else
- with_gnu_ld=no
- wlarc=
-
- # A generic and very simple default shared library creation
- # command for GNU C++ for the case where it uses the native
- # linker, instead of GNU ld. If possible, this setting should
- # overridden to take advantage of the native linker features on
- # the platform it is being used on.
- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
- fi
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-
-else
- GXX=no
- with_gnu_ld=no
- wlarc=
-fi
-
-# PORTME: fill in a description of your system's C++ link characteristics
-echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
-ld_shlibs_CXX=yes
-case $host_os in
- aix3*)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- aix4* | aix5*)
- if test "$host_cpu" = ia64; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- exp_sym_flag='-Bexport'
- no_entry_flag=""
- else
- aix_use_runtimelinking=no
-
- # Test if we are trying to use run time linking or normal
- # AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
- case $host_os in aix4.[23]|aix4.[23].*|aix5*)
- for ld_flag in $LDFLAGS; do
- case $ld_flag in
- *-brtl*)
- aix_use_runtimelinking=yes
- break
- ;;
- esac
- done
- esac
-
- exp_sym_flag='-bexport'
- no_entry_flag='-bnoentry'
- fi
-
- # When large executables or shared objects are built, AIX ld can
- # have problems creating the table of contents. If linking a library
- # or program results in "error TOC overflow" add -mminimal-toc to
- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
- archive_cmds_CXX=''
- hardcode_direct_CXX=yes
- hardcode_libdir_separator_CXX=':'
- link_all_deplibs_CXX=yes
-
- if test "$GXX" = yes; then
- case $host_os in aix4.[012]|aix4.[012].*)
- # We only want to do this on AIX 4.2 and lower, the check
- # below for broken collect2 doesn't work under 4.3+
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" && \
- strings "$collect2name" | grep resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- hardcode_direct_CXX=yes
- else
- # We have old collect2
- hardcode_direct_CXX=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- hardcode_minus_L_CXX=yes
- hardcode_libdir_flag_spec_CXX='-L$libdir'
- hardcode_libdir_separator_CXX=
- fi
- esac
- shared_flag='-shared'
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag="$shared_flag "'${wl}-G'
- fi
- else
- # not using gcc
- if test "$host_cpu" = ia64; then
- # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
- # chokes on -Wl,-G. The following line is correct:
- shared_flag='-G'
- else
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag='${wl}-G'
- else
- shared_flag='${wl}-bM:SRE'
- fi
- fi
- fi
-
- # It seems that -bexpall does not export symbols beginning with
- # underscore (_), so it is better to generate a list of symbols to export.
- always_export_symbols_CXX=yes
- if test "$aix_use_runtimelinking" = yes; then
- # Warning - without using the other runtime loading flags (-brtl),
- # -berok will link without error, but may produce a broken library.
- allow_undefined_flag_CXX='-berok'
- # Determine the default libpath from the value encoded in an empty executable.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-}'`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-}'`; fi
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
-
- archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
- else
- if test "$host_cpu" = ia64; then
- hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
- allow_undefined_flag_CXX="-z nodefs"
- archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
- else
- # Determine the default libpath from the value encoded in an empty executable.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-}'`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-}'`; fi
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
- # -berok will link without error, but may produce a broken library.
- no_undefined_flag_CXX=' ${wl}-bernotok'
- allow_undefined_flag_CXX=' ${wl}-berok'
- # -bexpall does not export symbols beginning with underscore (_)
- always_export_symbols_CXX=yes
- # Exported symbols can be pulled into shared objects from archives
- whole_archive_flag_spec_CXX=' '
- archive_cmds_need_lc_CXX=yes
- # This is similar to how AIX traditionally builds it's shared libraries.
- archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
- fi
- fi
- ;;
- chorus*)
- case $cc_basename in
- *)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- esac
- ;;
-
-
- cygwin* | mingw* | pw32*)
- # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
- # as there is no search path for DLLs.
- hardcode_libdir_flag_spec_CXX='-L$libdir'
- allow_undefined_flag_CXX=unsupported
- always_export_symbols_CXX=no
- enable_shared_with_static_runtimes_CXX=yes
-
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
- cp $export_symbols $output_objdir/$soname.def;
- else
- echo EXPORTS > $output_objdir/$soname.def;
- cat $export_symbols >> $output_objdir/$soname.def;
- fi~
- $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
- else
- ld_shlibs_CXX=no
- fi
- ;;
- darwin* | rhapsody*)
- case "$host_os" in
- rhapsody* | darwin1.[012])
- allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress'
- ;;
- *) # Darwin 1.3 on
- if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
- allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
- else
- case ${MACOSX_DEPLOYMENT_TARGET} in
- 10.[012])
- allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
- ;;
- 10.*)
- allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup'
- ;;
- esac
- fi
- ;;
- esac
- archive_cmds_need_lc_CXX=no
- hardcode_direct_CXX=no
- hardcode_automatic_CXX=yes
- hardcode_shlibpath_var_CXX=unsupported
- whole_archive_flag_spec_CXX=''
- link_all_deplibs_CXX=yes
-
- if test "$GXX" = yes ; then
- lt_int_apple_cc_single_mod=no
- output_verbose_link_cmd='echo'
- if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then
- lt_int_apple_cc_single_mod=yes
- fi
- if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
- archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
- else
- archive_cmds_CXX='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
- fi
- module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
- if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
- archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- else
- archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- fi
- module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- else
- case $cc_basename in
- xlc*)
- output_verbose_link_cmd='echo'
- archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
- module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
- archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- ;;
- *)
- ld_shlibs_CXX=no
- ;;
- esac
- fi
- ;;
-
- dgux*)
- case $cc_basename in
- ec++*)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- ghcx*)
- # Green Hills C++ Compiler
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- esac
- ;;
- freebsd[12]*)
- # C++ shared libraries reported to be fairly broken before switch to ELF
- ld_shlibs_CXX=no
- ;;
- freebsd-elf*)
- archive_cmds_need_lc_CXX=no
- ;;
- freebsd* | kfreebsd*-gnu | dragonfly*)
- # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
- # conventions
- ld_shlibs_CXX=yes
- ;;
- gnu*)
- ;;
- hpux9*)
- hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator_CXX=:
- export_dynamic_flag_spec_CXX='${wl}-E'
- hardcode_direct_CXX=yes
- hardcode_minus_L_CXX=yes # Not in the search PATH,
- # but as the default
- # location of the library.
-
- case $cc_basename in
- CC*)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- aCC*)
- archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$GXX" = yes; then
- archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- fi
- ;;
- esac
- ;;
- hpux10*|hpux11*)
- if test $with_gnu_ld = no; then
- case "$host_cpu" in
- hppa*64*)
- hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
- hardcode_libdir_flag_spec_ld_CXX='+b $libdir'
- hardcode_libdir_separator_CXX=:
- ;;
- ia64*)
- hardcode_libdir_flag_spec_CXX='-L$libdir'
- ;;
- *)
- hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator_CXX=:
- export_dynamic_flag_spec_CXX='${wl}-E'
- ;;
- esac
- fi
- case "$host_cpu" in
- hppa*64*)
- hardcode_direct_CXX=no
- hardcode_shlibpath_var_CXX=no
- ;;
- ia64*)
- hardcode_direct_CXX=no
- hardcode_shlibpath_var_CXX=no
- hardcode_minus_L_CXX=yes # Not in the search PATH,
- # but as the default
- # location of the library.
- ;;
- *)
- hardcode_direct_CXX=yes
- hardcode_minus_L_CXX=yes # Not in the search PATH,
- # but as the default
- # location of the library.
- ;;
- esac
-
- case $cc_basename in
- CC*)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- aCC*)
- case "$host_cpu" in
- hppa*64*|ia64*)
- archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
- ;;
- *)
- archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- esac
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$GXX" = yes; then
- if test $with_gnu_ld = no; then
- case "$host_cpu" in
- ia64*|hppa*64*)
- archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
- ;;
- *)
- archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- esac
- fi
- else
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- fi
- ;;
- esac
- ;;
- irix5* | irix6*)
- case $cc_basename in
- CC*)
- # SGI C++
- archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-
- # Archives containing C++ object files must be created using
- # "CC -ar", where "CC" is the IRIX C++ compiler. This is
- # necessary to make sure instantiated templates are included
- # in the archive.
- old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
- ;;
- *)
- if test "$GXX" = yes; then
- if test "$with_gnu_ld" = no; then
- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
- fi
- fi
- link_all_deplibs_CXX=yes
- ;;
- esac
- hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator_CXX=:
- ;;
- linux*)
- case $cc_basename in
- KCC*)
- # Kuck and Associates, Inc. (KAI) C++ Compiler
-
- # KCC will only create a shared library if the output file
- # ends with ".so" (or ".sl" for HP-UX), so rename the library
- # to its proper name (with version) after linking.
- archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
- archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-
- hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir'
- export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-
- # Archives containing C++ object files must be created using
- # "CC -Bstatic", where "CC" is the KAI C++ compiler.
- old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
- ;;
- icpc*)
- # Intel C++
- with_gnu_ld=yes
- # version 8.0 and above of icpc choke on multiply defined symbols
- # if we add $predep_objects and $postdep_objects, however 7.1 and
- # earlier do not add the objects themselves.
- case `$CC -V 2>&1` in
- *"Version 7."*)
- archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- ;;
- *) # Version 8.0 or newer
- tmp_idyn=
- case $host_cpu in
- ia64*) tmp_idyn=' -i_dynamic';;
- esac
- archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- ;;
- esac
- archive_cmds_need_lc_CXX=no
- hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
- export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
- whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
- ;;
- pgCC*)
- # Portland Group C++ compiler
- archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
- archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-
- hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
- export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
- whole_archive_flag_spec_CXX='${wl}--whole-archive,`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- ;;
- cxx*)
- # Compaq C++
- archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
-
- runpath_var=LD_RUN_PATH
- hardcode_libdir_flag_spec_CXX='-rpath $libdir'
- hardcode_libdir_separator_CXX=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- esac
- ;;
- lynxos*)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- m88k*)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- mvs*)
- case $cc_basename in
- cxx*)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- esac
- ;;
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
- wlarc=
- hardcode_libdir_flag_spec_CXX='-R$libdir'
- hardcode_direct_CXX=yes
- hardcode_shlibpath_var_CXX=no
- fi
- # Workaround some broken pre-1.5 toolchains
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
- ;;
- openbsd2*)
- # C++ shared libraries are fairly broken
- ld_shlibs_CXX=no
- ;;
- openbsd*)
- hardcode_direct_CXX=yes
- hardcode_shlibpath_var_CXX=no
- archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
- hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
- export_dynamic_flag_spec_CXX='${wl}-E'
- whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- fi
- output_verbose_link_cmd='echo'
- ;;
- osf3*)
- case $cc_basename in
- KCC*)
- # Kuck and Associates, Inc. (KAI) C++ Compiler
-
- # KCC will only create a shared library if the output file
- # ends with ".so" (or ".sl" for HP-UX), so rename the library
- # to its proper name (with version) after linking.
- archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
- hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
- hardcode_libdir_separator_CXX=:
-
- # Archives containing C++ object files must be created using
- # "CC -Bstatic", where "CC" is the KAI C++ compiler.
- old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
-
- ;;
- RCC*)
- # Rational C++ 2.4.1
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- cxx*)
- allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-
- hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator_CXX=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$GXX" = yes && test "$with_gnu_ld" = no; then
- allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-
- hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator_CXX=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-
- else
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- fi
- ;;
- esac
- ;;
- osf4* | osf5*)
- case $cc_basename in
- KCC*)
- # Kuck and Associates, Inc. (KAI) C++ Compiler
-
- # KCC will only create a shared library if the output file
- # ends with ".so" (or ".sl" for HP-UX), so rename the library
- # to its proper name (with version) after linking.
- archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
- hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
- hardcode_libdir_separator_CXX=:
-
- # Archives containing C++ object files must be created using
- # the KAI C++ compiler.
- old_archive_cmds_CXX='$CC -o $oldlib $oldobjs'
- ;;
- RCC*)
- # Rational C++ 2.4.1
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- cxx*)
- allow_undefined_flag_CXX=' -expect_unresolved \*'
- archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
- echo "-hidden">> $lib.exp~
- $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~
- $rm $lib.exp'
-
- hardcode_libdir_flag_spec_CXX='-rpath $libdir'
- hardcode_libdir_separator_CXX=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$GXX" = yes && test "$with_gnu_ld" = no; then
- allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-
- hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator_CXX=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-
- else
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- fi
- ;;
- esac
- ;;
- psos*)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- sco*)
- archive_cmds_need_lc_CXX=no
- case $cc_basename in
- CC*)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- esac
- ;;
- sunos4*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.x
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- lcc*)
- # Lucid
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- esac
- ;;
- solaris*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.2, 5.x and Centerline C++
- no_undefined_flag_CXX=' -zdefs'
- archive_cmds_CXX='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
- hardcode_libdir_flag_spec_CXX='-R$libdir'
- hardcode_shlibpath_var_CXX=no
- case $host_os in
- solaris2.[0-5] | solaris2.[0-5].*) ;;
- *)
- # The C++ compiler is used as linker so we must use $wl
- # flag to pass the commands to the underlying system
- # linker. We must also pass each convience library through
- # to the system linker between allextract/defaultextract.
- # The C++ compiler will combine linker options so we
- # cannot just pass the convience library names through
- # without $wl.
- # Supported since Solaris 2.6 (maybe 2.5.1?)
- whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract'
- ;;
- esac
- link_all_deplibs_CXX=yes
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[LR]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-
- # Archives containing C++ object files must be created using
- # "CC -xar", where "CC" is the Sun C++ compiler. This is
- # necessary to make sure instantiated templates are included
- # in the archive.
- old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
- ;;
- gcx*)
- # Green Hills C++ Compiler
- archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-
- # The C++ compiler must be used to create the archive.
- old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
- ;;
- *)
- # GNU C++ compiler with Solaris linker
- if test "$GXX" = yes && test "$with_gnu_ld" = no; then
- no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
- if $CC --version | grep -v '^2\.7' > /dev/null; then
- archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
- archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
- else
- # g++ 2.7 appears to require `-G' NOT `-shared' on this
- # platform.
- archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
- archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
- fi
-
- hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
- fi
- ;;
- esac
- ;;
- sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
- archive_cmds_need_lc_CXX=no
- ;;
- tandem*)
- case $cc_basename in
- NCC*)
- # NonStop-UX NCC 3.20
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- esac
- ;;
- vxworks*)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- ld_shlibs_CXX=no
- ;;
-esac
-echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
-echo "${ECHO_T}$ld_shlibs_CXX" >&6
-test "$ld_shlibs_CXX" = no && can_build_shared=no
-
-GCC_CXX="$GXX"
-LD_CXX="$LD"
-
-
-cat > conftest.$ac_ext <<EOF
-class Foo
-{
-public:
- Foo (void) { a = 0; }
-private:
- int a;
-};
-EOF
-
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # Parse the compiler output and extract the necessary
- # objects, libraries and library flags.
-
- # Sentinel used to keep track of whether or not we are before
- # the conftest object file.
- pre_test_object_deps_done=no
-
- # The `*' in the case matches for architectures that use `case' in
- # $output_verbose_cmd can trigger glob expansion during the loop
- # eval without this substitution.
- output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`"
-
- for p in `eval $output_verbose_link_cmd`; do
- case $p in
-
- -L* | -R* | -l*)
- # Some compilers place space between "-{L,R}" and the path.
- # Remove the space.
- if test $p = "-L" \
- || test $p = "-R"; then
- prev=$p
- continue
- else
- prev=
- fi
-
- if test "$pre_test_object_deps_done" = no; then
- case $p in
- -L* | -R*)
- # Internal compiler library paths should come after those
- # provided the user. The postdeps already come after the
- # user supplied libs so there is no need to process them.
- if test -z "$compiler_lib_search_path_CXX"; then
- compiler_lib_search_path_CXX="${prev}${p}"
- else
- compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
- fi
- ;;
- # The "-l" case would never come before the object being
- # linked, so don't bother handling this case.
- esac
- else
- if test -z "$postdeps_CXX"; then
- postdeps_CXX="${prev}${p}"
- else
- postdeps_CXX="${postdeps_CXX} ${prev}${p}"
- fi
- fi
- ;;
-
- *.$objext)
- # This assumes that the test object file only shows up
- # once in the compiler output.
- if test "$p" = "conftest.$objext"; then
- pre_test_object_deps_done=yes
- continue
- fi
-
- if test "$pre_test_object_deps_done" = no; then
- if test -z "$predep_objects_CXX"; then
- predep_objects_CXX="$p"
- else
- predep_objects_CXX="$predep_objects_CXX $p"
- fi
- else
- if test -z "$postdep_objects_CXX"; then
- postdep_objects_CXX="$p"
- else
- postdep_objects_CXX="$postdep_objects_CXX $p"
- fi
- fi
- ;;
-
- *) ;; # Ignore the rest.
-
- esac
- done
-
- # Clean up.
- rm -f a.out a.exe
-else
- echo "libtool.m4: error: problem compiling CXX test program"
-fi
-
-$rm -f confest.$objext
-
-case " $postdeps_CXX " in
-*" -lc "*) archive_cmds_need_lc_CXX=no ;;
-esac
-
-lt_prog_compiler_wl_CXX=
-lt_prog_compiler_pic_CXX=
-lt_prog_compiler_static_CXX=
-
-echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
-
- # C++ specific cases for pic, static, wl, etc.
- if test "$GXX" = yes; then
- lt_prog_compiler_wl_CXX='-Wl,'
- lt_prog_compiler_static_CXX='-static'
-
- case $host_os in
- aix*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static_CXX='-Bstatic'
- fi
- ;;
- amigaos*)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the `-m68020' flag to GCC prevents building anything better,
- # like `-m68040'.
- lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
- ;;
- beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
- mingw* | os2* | pw32*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
- ;;
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- lt_prog_compiler_pic_CXX='-fno-common'
- ;;
- *djgpp*)
- # DJGPP does not support shared libraries at all
- lt_prog_compiler_pic_CXX=
- ;;
- sysv4*MP*)
- if test -d /usr/nec; then
- lt_prog_compiler_pic_CXX=-Kconform_pic
- fi
- ;;
- hpux*)
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case "$host_cpu" in
- hppa*64*|ia64*)
- ;;
- *)
- lt_prog_compiler_pic_CXX='-fPIC'
- ;;
- esac
- ;;
- *)
- lt_prog_compiler_pic_CXX='-fPIC'
- ;;
- esac
- else
- case $host_os in
- aix4* | aix5*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static_CXX='-Bstatic'
- else
- lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
- chorus*)
- case $cc_basename in
- cxch68*)
- # Green Hills C++ Compiler
- # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
- ;;
- esac
- ;;
- darwin*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- case $cc_basename in
- xlc*)
- lt_prog_compiler_pic_CXX='-qnocommon'
- lt_prog_compiler_wl_CXX='-Wl,'
- ;;
- esac
- ;;
- dgux*)
- case $cc_basename in
- ec++*)
- lt_prog_compiler_pic_CXX='-KPIC'
- ;;
- ghcx*)
- # Green Hills C++ Compiler
- lt_prog_compiler_pic_CXX='-pic'
- ;;
- *)
- ;;
- esac
- ;;
- freebsd* | kfreebsd*-gnu | dragonfly*)
- # FreeBSD uses GNU C++
- ;;
- hpux9* | hpux10* | hpux11*)
- case $cc_basename in
- CC*)
- lt_prog_compiler_wl_CXX='-Wl,'
- lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
- if test "$host_cpu" != ia64; then
- lt_prog_compiler_pic_CXX='+Z'
- fi
- ;;
- aCC*)
- lt_prog_compiler_wl_CXX='-Wl,'
- lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
- case "$host_cpu" in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- lt_prog_compiler_pic_CXX='+Z'
- ;;
- esac
- ;;
- *)
- ;;
- esac
- ;;
- irix5* | irix6* | nonstopux*)
- case $cc_basename in
- CC*)
- lt_prog_compiler_wl_CXX='-Wl,'
- lt_prog_compiler_static_CXX='-non_shared'
- # CC pic flag -KPIC is the default.
- ;;
- *)
- ;;
- esac
- ;;
- linux*)
- case $cc_basename in
- KCC*)
- # KAI C++ Compiler
- lt_prog_compiler_wl_CXX='--backend -Wl,'
- lt_prog_compiler_pic_CXX='-fPIC'
- ;;
- icpc* | ecpc*)
- # Intel C++
- lt_prog_compiler_wl_CXX='-Wl,'
- lt_prog_compiler_pic_CXX='-KPIC'
- lt_prog_compiler_static_CXX='-static'
- ;;
- pgCC*)
- # Portland Group C++ compiler.
- lt_prog_compiler_wl_CXX='-Wl,'
- lt_prog_compiler_pic_CXX='-fpic'
- lt_prog_compiler_static_CXX='-static'
- ;;
- cxx*)
- # Compaq C++
- # Make sure the PIC flag is empty. It appears that all Alpha
- # Linux and Compaq Tru64 Unix objects are PIC.
- lt_prog_compiler_pic_CXX=
- lt_prog_compiler_static_CXX='-non_shared'
- ;;
- *)
- ;;
- esac
- ;;
- lynxos*)
- ;;
- m88k*)
- ;;
- mvs*)
- case $cc_basename in
- cxx*)
- lt_prog_compiler_pic_CXX='-W c,exportall'
- ;;
- *)
- ;;
- esac
- ;;
- netbsd*)
- ;;
- osf3* | osf4* | osf5*)
- case $cc_basename in
- KCC*)
- lt_prog_compiler_wl_CXX='--backend -Wl,'
- ;;
- RCC*)
- # Rational C++ 2.4.1
- lt_prog_compiler_pic_CXX='-pic'
- ;;
- cxx*)
- # Digital/Compaq C++
- lt_prog_compiler_wl_CXX='-Wl,'
- # Make sure the PIC flag is empty. It appears that all Alpha
- # Linux and Compaq Tru64 Unix objects are PIC.
- lt_prog_compiler_pic_CXX=
- lt_prog_compiler_static_CXX='-non_shared'
- ;;
- *)
- ;;
- esac
- ;;
- psos*)
- ;;
- sco*)
- case $cc_basename in
- CC*)
- lt_prog_compiler_pic_CXX='-fPIC'
- ;;
- *)
- ;;
- esac
- ;;
- solaris*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.2, 5.x and Centerline C++
- lt_prog_compiler_pic_CXX='-KPIC'
- lt_prog_compiler_static_CXX='-Bstatic'
- lt_prog_compiler_wl_CXX='-Qoption ld '
- ;;
- gcx*)
- # Green Hills C++ Compiler
- lt_prog_compiler_pic_CXX='-PIC'
- ;;
- *)
- ;;
- esac
- ;;
- sunos4*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.x
- lt_prog_compiler_pic_CXX='-pic'
- lt_prog_compiler_static_CXX='-Bstatic'
- ;;
- lcc*)
- # Lucid
- lt_prog_compiler_pic_CXX='-pic'
- ;;
- *)
- ;;
- esac
- ;;
- tandem*)
- case $cc_basename in
- NCC*)
- # NonStop-UX NCC 3.20
- lt_prog_compiler_pic_CXX='-KPIC'
- ;;
- *)
- ;;
- esac
- ;;
- unixware*)
- ;;
- vxworks*)
- ;;
- *)
- lt_prog_compiler_can_build_shared_CXX=no
- ;;
- esac
- fi
-
-echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5
-echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic_CXX"; then
-
-echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
-echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6
-if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- lt_prog_compiler_pic_works_CXX=no
- ac_outfile=conftest.$ac_objext
- printf "$lt_simple_compile_test_code" > conftest.$ac_ext
- lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- # The option is referenced via a variable to avoid confusing sed.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:13035: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&5
- echo "$as_me:13039: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s "$ac_outfile"; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $echo "X$_lt_compiler_boilerplate" | $Xsed >conftest.exp
- $SED '/^$/d' conftest.err >conftest.er2
- if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then
- lt_prog_compiler_pic_works_CXX=yes
- fi
- fi
- $rm conftest*
-
-fi
-echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5
-echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6
-
-if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then
- case $lt_prog_compiler_pic_CXX in
- "" | " "*) ;;
- *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
- esac
-else
- lt_prog_compiler_pic_CXX=
- lt_prog_compiler_can_build_shared_CXX=no
-fi
-
-fi
-case "$host_os" in
- # For platforms which do not support PIC, -DPIC is meaningless:
- *djgpp*)
- lt_prog_compiler_pic_CXX=
- ;;
- *)
- lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
- ;;
-esac
-
-echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
-if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- lt_cv_prog_compiler_c_o_CXX=no
- $rm -r conftest 2>/dev/null
- mkdir conftest
- cd conftest
- mkdir out
- printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- lt_compiler_flag="-o out/conftest2.$ac_objext"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:13097: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>out/conftest.err)
- ac_status=$?
- cat out/conftest.err >&5
- echo "$as_me:13101: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s out/conftest2.$ac_objext
- then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- $echo "X$_lt_compiler_boilerplate" | $Xsed > out/conftest.exp
- $SED '/^$/d' out/conftest.err >out/conftest.er2
- if test ! -s out/conftest.err || diff out/conftest.exp out/conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_c_o_CXX=yes
- fi
- fi
- chmod u+w .
- $rm conftest*
- # SGI C++ compiler will create directory out/ii_files/ for
- # template instantiation
- test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
- $rm out/* && rmdir out
- cd ..
- rmdir conftest
- $rm conftest*
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5
-echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6
-
-
-hard_links="nottested"
-if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
- # do not overwrite the value of need_locks provided by the user
- echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
- hard_links=yes
- $rm conftest*
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- touch conftest.a
- ln conftest.a conftest.b 2>&5 || hard_links=no
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- echo "$as_me:$LINENO: result: $hard_links" >&5
-echo "${ECHO_T}$hard_links" >&6
- if test "$hard_links" = no; then
- { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
- need_locks=warn
- fi
-else
- need_locks=no
-fi
-
-echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
-
- export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- case $host_os in
- aix4* | aix5*)
- # If we're using GNU nm, then we don't want the "-C" option.
- # -C means demangle to AIX nm, but means don't demangle with GNU nm
- if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
- export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
- else
- export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
- fi
- ;;
- pw32*)
- export_symbols_cmds_CXX="$ltdll_cmds"
- ;;
- cygwin* | mingw*)
- export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([^ ]*\) [^ ]*/\1 DATA/;/^I /d;/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
- ;;
- *)
- export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- ;;
- esac
-
-echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
-echo "${ECHO_T}$ld_shlibs_CXX" >&6
-test "$ld_shlibs_CXX" = no && can_build_shared=no
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
- variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$archive_cmds_need_lc_CXX" in
-x|xyes)
- # Assume -lc should be added
- archive_cmds_need_lc_CXX=yes
-
- if test "$enable_shared" = yes && test "$GCC" = yes; then
- case $archive_cmds_CXX in
- *'~'*)
- # FIXME: we may have to deal with multi-command sequences.
- ;;
- '$CC '*)
- # Test whether the compiler implicitly links with -lc since on some
- # systems, -lgcc has to come before -lc. If gcc already passes -lc
- # to ld, don't add -lc before -lgcc.
- echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
- $rm conftest*
- printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } 2>conftest.err; then
- soname=conftest
- lib=conftest
- libobjs=conftest.$ac_objext
- deplibs=
- wl=$lt_prog_compiler_wl_CXX
- compiler_flags=-v
- linker_flags=-v
- verstring=
- output_objdir=.
- libname=conftest
- lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
- allow_undefined_flag_CXX=
- if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
- (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
- then
- archive_cmds_need_lc_CXX=no
- else
- archive_cmds_need_lc_CXX=yes
- fi
- allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
- else
- cat conftest.err 1>&5
- fi
- $rm conftest*
- echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5
-echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6
- ;;
- esac
- fi
- ;;
-esac
-
-echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-if test "$GCC" = yes; then
- sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
- # if the path contains ";" then we assume it to be the separator
- # otherwise default to the standard path separator (i.e. ":") - it is
- # assumed that no part of a normal pathname contains ";" but that should
- # okay in the real world where ";" in dirpaths is itself problematic.
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
- else
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
-else
- sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
- shlibpath_var=LIBPATH
-
- # AIX 3 has no versioning support, so we append a major version to the name.
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
-
-aix4* | aix5*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- hardcode_into_libs=yes
- if test "$host_cpu" = ia64; then
- # AIX 5 supports IA64
- library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- else
- # With GCC up to 2.95.x, collect2 would create an import file
- # for dependence libraries. The import file would start with
- # the line `#! .'. This would cause the generated library to
- # depend on `.', always an invalid library. This was fixed in
- # development snapshots of GCC prior to 3.0.
- case $host_os in
- aix4 | aix4.[01] | aix4.[01].*)
- if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
- echo ' yes '
- echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
- :
- else
- can_build_shared=no
- fi
- ;;
- esac
- # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
- # soname into executable. Probably we can add versioning support to
- # collect2, so additional links can be useful in future.
- if test "$aix_use_runtimelinking" = yes; then
- # If using run time linking (on AIX 4.2 or later) use lib<name>.so
- # instead of lib<name>.a to let people know that these are not
- # typical AIX shared libraries.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- else
- # We preserve .a as extension for shared libraries through AIX4.2
- # and later when we are not doing run time linking.
- library_names_spec='${libname}${release}.a $libname.a'
- soname_spec='${libname}${release}${shared_ext}$major'
- fi
- shlibpath_var=LIBPATH
- fi
- ;;
-
-amigaos*)
- library_names_spec='$libname.ixlibrary $libname.a'
- # Create ${libname}_ixlibrary.a entries in /sys/libs.
- finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
- ;;
-
-beos*)
- library_names_spec='${libname}${shared_ext}'
- dynamic_linker="$host_os ld.so"
- shlibpath_var=LIBRARY_PATH
- ;;
-
-bsdi[45]*)
- version_type=linux
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
- sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
- # the default ld.so.conf also contains /usr/contrib/lib and
- # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
- # libtool to hard-code these into programs
- ;;
-
-cygwin* | mingw* | pw32*)
- version_type=windows
- shrext_cmds=".dll"
- need_version=no
- need_lib_prefix=no
-
- case $GCC,$host_os in
- yes,cygwin* | yes,mingw* | yes,pw32*)
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \${file}`~
- dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
- dldir=$destdir/`dirname \$dlpath`~
- test -d \$dldir || mkdir -p \$dldir~
- $install_prog $dir/$dlname \$dldir/$dlname'
- postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
- dlpath=$dir/\$dldll~
- $rm \$dlpath'
- shlibpath_overrides_runpath=yes
-
- case $host_os in
- cygwin*)
- # Cygwin DLLs use 'cyg' prefix rather than 'lib'
- soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
- ;;
- mingw*)
- # MinGW DLLs use traditional 'lib' prefix
- soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
- # It is most probably a Windows format PATH printed by
- # mingw gcc, but we are running on Cygwin. Gcc prints its search
- # path with ; separators, and with drive letters. We can handle the
- # drive letters (cygwin fileutils understands them), so leave them,
- # especially as we might pass files found there to a mingw objdump,
- # which wouldn't understand a cygwinified path. Ahh.
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
- else
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
- ;;
- pw32*)
- # pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- ;;
- esac
- ;;
-
- *)
- library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
- ;;
- esac
- dynamic_linker='Win32 ld.exe'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-
-darwin* | rhapsody*)
- dynamic_linker="$host_os dyld"
- version_type=darwin
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
- soname_spec='${libname}${release}${major}$shared_ext'
- shlibpath_overrides_runpath=yes
- shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
- # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
- if test "$GCC" = yes; then
- sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
- else
- sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
- fi
- sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
- ;;
-
-dgux*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-freebsd1*)
- dynamic_linker=no
- ;;
-
-kfreebsd*-gnu)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- dynamic_linker='GNU ld.so'
- ;;
-
-freebsd* | dragonfly*)
- # DragonFly does not have aout. When/if they implement a new
- # versioning mechanism, adjust this.
- objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
- version_type=freebsd-$objformat
- case $version_type in
- freebsd-elf*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- need_version=no
- need_lib_prefix=no
- ;;
- freebsd-*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
- need_version=yes
- ;;
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
- freebsd2*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- *) # from 3.2 on
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
- esac
- ;;
-
-gnu*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- ;;
-
-hpux9* | hpux10* | hpux11*)
- # Give a soname corresponding to the major version so that dld.sl refuses to
- # link against other versions.
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- case "$host_cpu" in
- ia64*)
- shrext_cmds='.so'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.so"
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- if test "X$HPUX_IA64_MODE" = X32; then
- sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
- else
- sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
- fi
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- hppa*64*)
- shrext_cmds='.sl'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- *)
- shrext_cmds='.sl'
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=SHLIB_PATH
- shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
- esac
- # HP-UX runs *really* slowly unless shared libraries are mode 555.
- postinstall_cmds='chmod 555 $lib'
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $host_os in
- nonstopux*) version_type=nonstopux ;;
- *)
- if test "$lt_cv_prog_gnu_ld" = yes; then
- version_type=linux
- else
- version_type=irix
- fi ;;
- esac
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
- case $host_os in
- irix5* | nonstopux*)
- libsuff= shlibsuff=
- ;;
- *)
- case $LD in # libtool.m4 will add one of these switches to LD
- *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
- libsuff= shlibsuff= libmagic=32-bit;;
- *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
- libsuff=32 shlibsuff=N32 libmagic=N32;;
- *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
- libsuff=64 shlibsuff=64 libmagic=64-bit;;
- *) libsuff= shlibsuff= libmagic=never-match;;
- esac
- ;;
- esac
- shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
- sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
- hardcode_into_libs=yes
- ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
- dynamic_linker=no
- ;;
-
-# This must be Linux ELF.
-linux*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- # This implies no fast_install, which is unacceptable.
- # Some rework will be needed to allow for fast_install
- # before this can be enabled.
- hardcode_into_libs=yes
-
- # Append ld.so.conf contents to the search path
- if test -f /etc/ld.so.conf; then
- lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
- fi
-
- # We used to test for /lib/ld.so.1 and disable shared libraries on
- # powerpc, because MkLinux only supported shared libraries with the
- # GNU dynamic linker. Since this was broken with cross compilers,
- # most powerpc-linux boxes support dynamic linking these days and
- # people can always --disable-shared, the test was removed, and we
- # assume the GNU/Linux dynamic linker is in use.
- dynamic_linker='GNU/Linux ld.so'
- ;;
-
-knetbsd*-gnu)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- dynamic_linker='GNU ld.so'
- ;;
-
-netbsd*)
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- dynamic_linker='NetBSD (a.out) ld.so'
- else
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='NetBSD ld.elf_so'
- fi
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
-
-newsos6)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-nto-qnx*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-openbsd*)
- version_type=sunos
- need_lib_prefix=no
- # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
- case $host_os in
- openbsd3.3 | openbsd3.3.*) need_version=yes ;;
- *) need_version=no ;;
- esac
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- case $host_os in
- openbsd2.[89] | openbsd2.[89].*)
- shlibpath_overrides_runpath=no
- ;;
- *)
- shlibpath_overrides_runpath=yes
- ;;
- esac
- else
- shlibpath_overrides_runpath=yes
- fi
- ;;
-
-os2*)
- libname_spec='$name'
- shrext_cmds=".dll"
- need_lib_prefix=no
- library_names_spec='$libname${shared_ext} $libname.a'
- dynamic_linker='OS/2 ld.exe'
- shlibpath_var=LIBPATH
- ;;
-
-osf3* | osf4* | osf5*)
- version_type=osf
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
- sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
- ;;
-
-sco3.2v5*)
- version_type=osf
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-solaris*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- # ldd complains unless libraries are executable
- postinstall_cmds='chmod +x $lib'
- ;;
-
-sunos4*)
- version_type=sunos
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- if test "$with_gnu_ld" = yes; then
- need_lib_prefix=no
- fi
- need_version=yes
- ;;
-
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- case $host_vendor in
- sni)
- shlibpath_overrides_runpath=no
- need_lib_prefix=no
- export_dynamic_flag_spec='${wl}-Blargedynsym'
- runpath_var=LD_RUN_PATH
- ;;
- siemens)
- need_lib_prefix=no
- ;;
- motorola)
- need_lib_prefix=no
- need_version=no
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
- ;;
- esac
- ;;
-
-sysv4*MP*)
- if test -d /usr/nec ;then
- version_type=linux
- library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
- soname_spec='$libname${shared_ext}.$major'
- shlibpath_var=LD_LIBRARY_PATH
- fi
- ;;
-
-uts4*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-*)
- dynamic_linker=no
- ;;
-esac
-echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-echo "${ECHO_T}$dynamic_linker" >&6
-test "$dynamic_linker" = no && can_build_shared=no
-
-echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
-hardcode_action_CXX=
-if test -n "$hardcode_libdir_flag_spec_CXX" || \
- test -n "$runpath_var_CXX" || \
- test "X$hardcode_automatic_CXX" = "Xyes" ; then
-
- # We can hardcode non-existant directories.
- if test "$hardcode_direct_CXX" != no &&
- # If the only mechanism to avoid hardcoding is shlibpath_var, we
- # have to relink, otherwise we might link with an installed library
- # when we should be linking with a yet-to-be-installed one
- ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
- test "$hardcode_minus_L_CXX" != no; then
- # Linking always hardcodes the temporary library directory.
- hardcode_action_CXX=relink
- else
- # We can link without hardcoding, and we can hardcode nonexisting dirs.
- hardcode_action_CXX=immediate
- fi
-else
- # We cannot hardcode anything, or else we can only hardcode existing
- # directories.
- hardcode_action_CXX=unsupported
-fi
-echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5
-echo "${ECHO_T}$hardcode_action_CXX" >&6
-
-if test "$hardcode_action_CXX" = relink; then
- # Fast installation is not supported
- enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
- test "$enable_shared" = no; then
- # Fast installation is not necessary
- enable_fast_install=needless
-fi
-
-striplib=
-old_striplib=
-echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
-echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
-if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
- test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
- test -z "$striplib" && striplib="$STRIP --strip-unneeded"
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
-# FIXME - insert some real tests, host_os isn't really good enough
- case $host_os in
- darwin*)
- if test -n "$STRIP" ; then
- striplib="$STRIP -x"
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
- else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
- ;;
- *)
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- ;;
- esac
-fi
-
-if test "x$enable_dlopen" != xyes; then
- enable_dlopen=unknown
- enable_dlopen_self=unknown
- enable_dlopen_self_static=unknown
-else
- lt_cv_dlopen=no
- lt_cv_dlopen_libs=
-
- case $host_os in
- beos*)
- lt_cv_dlopen="load_add_on"
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
- ;;
-
- mingw* | pw32*)
- lt_cv_dlopen="LoadLibrary"
- lt_cv_dlopen_libs=
- ;;
-
- cygwin*)
- lt_cv_dlopen="dlopen"
- lt_cv_dlopen_libs=
- ;;
-
- darwin*)
- # if libdl is installed we need to link against it
- echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
-echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char dlopen ();
-int
-main ()
-{
-dlopen ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_dl_dlopen=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dl_dlopen=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
-echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
-if test $ac_cv_lib_dl_dlopen = yes; then
- lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
-
- lt_cv_dlopen="dyld"
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
-
-fi
-
- ;;
-
- *)
- echo "$as_me:$LINENO: checking for shl_load" >&5
-echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
-if test "${ac_cv_func_shl_load+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define shl_load innocuous_shl_load
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char shl_load (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef shl_load
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char shl_load ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_shl_load) || defined (__stub___shl_load)
-choke me
-#else
-char (*f) () = shl_load;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != shl_load;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_shl_load=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_shl_load=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
-echo "${ECHO_T}$ac_cv_func_shl_load" >&6
-if test $ac_cv_func_shl_load = yes; then
- lt_cv_dlopen="shl_load"
-else
- echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
-echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
-if test "${ac_cv_lib_dld_shl_load+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char shl_load ();
-int
-main ()
-{
-shl_load ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_dld_shl_load=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dld_shl_load=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
-echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
-if test $ac_cv_lib_dld_shl_load = yes; then
- lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
-else
- echo "$as_me:$LINENO: checking for dlopen" >&5
-echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
-if test "${ac_cv_func_dlopen+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define dlopen innocuous_dlopen
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char dlopen (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef dlopen
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char dlopen ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_dlopen) || defined (__stub___dlopen)
-choke me
-#else
-char (*f) () = dlopen;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != dlopen;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_dlopen=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_dlopen=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
-echo "${ECHO_T}$ac_cv_func_dlopen" >&6
-if test $ac_cv_func_dlopen = yes; then
- lt_cv_dlopen="dlopen"
-else
- echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
-echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char dlopen ();
-int
-main ()
-{
-dlopen ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_dl_dlopen=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dl_dlopen=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
-echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
-if test $ac_cv_lib_dl_dlopen = yes; then
- lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
- echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
-echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
-if test "${ac_cv_lib_svld_dlopen+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsvld $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char dlopen ();
-int
-main ()
-{
-dlopen ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_svld_dlopen=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_svld_dlopen=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
-echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
-if test $ac_cv_lib_svld_dlopen = yes; then
- lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
-else
- echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
-echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
-if test "${ac_cv_lib_dld_dld_link+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char dld_link ();
-int
-main ()
-{
-dld_link ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_dld_dld_link=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dld_dld_link=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
-echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
-if test $ac_cv_lib_dld_dld_link = yes; then
- lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
- ;;
- esac
-
- if test "x$lt_cv_dlopen" != xno; then
- enable_dlopen=yes
- else
- enable_dlopen=no
- fi
-
- case $lt_cv_dlopen in
- dlopen)
- save_CPPFLAGS="$CPPFLAGS"
- test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-
- save_LDFLAGS="$LDFLAGS"
- eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
- save_LIBS="$LIBS"
- LIBS="$lt_cv_dlopen_libs $LIBS"
-
- echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
-echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
-if test "${lt_cv_dlopen_self+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$cross_compiling" = yes; then :
- lt_cv_dlopen_self=cross
-else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<EOF
-#line 14466 "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LT_DLGLOBAL RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-# define LT_DLGLOBAL DL_GLOBAL
-# else
-# define LT_DLGLOBAL 0
-# endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
- find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-# ifdef RTLD_LAZY
-# define LT_DLLAZY_OR_NOW RTLD_LAZY
-# else
-# ifdef DL_LAZY
-# define LT_DLLAZY_OR_NOW DL_LAZY
-# else
-# ifdef RTLD_NOW
-# define LT_DLLAZY_OR_NOW RTLD_NOW
-# else
-# ifdef DL_NOW
-# define LT_DLLAZY_OR_NOW DL_NOW
-# else
-# define LT_DLLAZY_OR_NOW 0
-# endif
-# endif
-# endif
-# endif
-#endif
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
- int status = $lt_dlunknown;
-
- if (self)
- {
- if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
- else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
- /* dlclose (self); */
- }
-
- exit (status);
-}
-EOF
- if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
- (./conftest; exit; ) 2>/dev/null
- lt_status=$?
- case x$lt_status in
- x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
- x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
- x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
- esac
- else :
- # compilation failed
- lt_cv_dlopen_self=no
- fi
-fi
-rm -fr conftest*
-
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
-echo "${ECHO_T}$lt_cv_dlopen_self" >&6
-
- if test "x$lt_cv_dlopen_self" = xyes; then
- LDFLAGS="$LDFLAGS $link_static_flag"
- echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
-echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
-if test "${lt_cv_dlopen_self_static+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$cross_compiling" = yes; then :
- lt_cv_dlopen_self_static=cross
-else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<EOF
-#line 14564 "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LT_DLGLOBAL RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-# define LT_DLGLOBAL DL_GLOBAL
-# else
-# define LT_DLGLOBAL 0
-# endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
- find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-# ifdef RTLD_LAZY
-# define LT_DLLAZY_OR_NOW RTLD_LAZY
-# else
-# ifdef DL_LAZY
-# define LT_DLLAZY_OR_NOW DL_LAZY
-# else
-# ifdef RTLD_NOW
-# define LT_DLLAZY_OR_NOW RTLD_NOW
-# else
-# ifdef DL_NOW
-# define LT_DLLAZY_OR_NOW DL_NOW
-# else
-# define LT_DLLAZY_OR_NOW 0
-# endif
-# endif
-# endif
-# endif
-#endif
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
- int status = $lt_dlunknown;
-
- if (self)
- {
- if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
- else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
- /* dlclose (self); */
- }
-
- exit (status);
-}
-EOF
- if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
- (./conftest; exit; ) 2>/dev/null
- lt_status=$?
- case x$lt_status in
- x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
- x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
- x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
- esac
- else :
- # compilation failed
- lt_cv_dlopen_self_static=no
- fi
-fi
-rm -fr conftest*
-
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
-echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
- fi
-
- CPPFLAGS="$save_CPPFLAGS"
- LDFLAGS="$save_LDFLAGS"
- LIBS="$save_LIBS"
- ;;
- esac
-
- case $lt_cv_dlopen_self in
- yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
- *) enable_dlopen_self=unknown ;;
- esac
-
- case $lt_cv_dlopen_self_static in
- yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
- *) enable_dlopen_self_static=unknown ;;
- esac
-fi
-
-
-# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
- # See if we are running on zsh, and set the options which allow our commands through
- # without removal of \ escapes.
- if test -n "${ZSH_VERSION+set}" ; then
- setopt NO_GLOB_SUBST
- fi
- # Now quote all the things that may contain metacharacters while being
- # careful not to overquote the AC_SUBSTed values. We take copies of the
- # variables and quote the copies for generation of the libtool script.
- for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
- SED SHELL STRIP \
- libname_spec library_names_spec soname_spec extract_expsyms_cmds \
- old_striplib striplib file_magic_cmd finish_cmds finish_eval \
- deplibs_check_method reload_flag reload_cmds need_locks \
- lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
- lt_cv_sys_global_symbol_to_c_name_address \
- sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
- old_postinstall_cmds old_postuninstall_cmds \
- compiler_CXX \
- CC_CXX \
- LD_CXX \
- lt_prog_compiler_wl_CXX \
- lt_prog_compiler_pic_CXX \
- lt_prog_compiler_static_CXX \
- lt_prog_compiler_no_builtin_flag_CXX \
- export_dynamic_flag_spec_CXX \
- thread_safe_flag_spec_CXX \
- whole_archive_flag_spec_CXX \
- enable_shared_with_static_runtimes_CXX \
- old_archive_cmds_CXX \
- old_archive_from_new_cmds_CXX \
- predep_objects_CXX \
- postdep_objects_CXX \
- predeps_CXX \
- postdeps_CXX \
- compiler_lib_search_path_CXX \
- archive_cmds_CXX \
- archive_expsym_cmds_CXX \
- postinstall_cmds_CXX \
- postuninstall_cmds_CXX \
- old_archive_from_expsyms_cmds_CXX \
- allow_undefined_flag_CXX \
- no_undefined_flag_CXX \
- export_symbols_cmds_CXX \
- hardcode_libdir_flag_spec_CXX \
- hardcode_libdir_flag_spec_ld_CXX \
- hardcode_libdir_separator_CXX \
- hardcode_automatic_CXX \
- module_cmds_CXX \
- module_expsym_cmds_CXX \
- lt_cv_prog_compiler_c_o_CXX \
- exclude_expsyms_CXX \
- include_expsyms_CXX; do
-
- case $var in
- old_archive_cmds_CXX | \
- old_archive_from_new_cmds_CXX | \
- archive_cmds_CXX | \
- archive_expsym_cmds_CXX | \
- module_cmds_CXX | \
- module_expsym_cmds_CXX | \
- old_archive_from_expsyms_cmds_CXX | \
- export_symbols_cmds_CXX | \
- extract_expsyms_cmds | reload_cmds | finish_cmds | \
- postinstall_cmds | postuninstall_cmds | \
- old_postinstall_cmds | old_postuninstall_cmds | \
- sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
- # Double-quote double-evaled strings.
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
- ;;
- *)
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
- ;;
- esac
- done
-
- case $lt_echo in
- *'\$0 --fallback-echo"')
- lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
- ;;
- esac
-
-cfgfile="$ofile"
-
- cat <<__EOF__ >> "$cfgfile"
-# ### BEGIN LIBTOOL TAG CONFIG: $tagname
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$archive_cmds_need_lc_CXX
-
-# Whether or not to disallow shared libs when runtime libs are static
-allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-host_os=$host_os
-
-# The build system.
-build_alias=$build_alias
-build=$build
-build_os=$build_os
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# A language-specific compiler.
-CC=$lt_compiler_CXX
-
-# Is the compiler the GNU C compiler?
-with_gcc=$GCC_CXX
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_LD_CXX
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_CXX
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic_CXX
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# Do we need the lib prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Whether dlopen is supported.
-dlopen_support=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static_CXX
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX
-
-# Library versioning type.
-version_type=$version_type
-
-# Format of library name prefix.
-libname_spec=$lt_libname_spec
-
-# List of archive names. First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME.
-library_names_spec=$lt_library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$lt_soname_spec
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_old_archive_cmds_CXX
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
-
-# Commands used to build and install a shared archive.
-archive_cmds=$lt_archive_cmds_CXX
-archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_module_cmds_CXX
-module_expsym_cmds=$lt_module_expsym_cmds_CXX
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_predep_objects_CXX
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_postdep_objects_CXX
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_predeps_CXX
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$lt_postdeps_CXX
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$lt_deplibs_check_method
-
-# Command to use when deplibs_check_method == file_magic.
-file_magic_cmd=$lt_file_magic_cmd
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag_CXX
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag_CXX
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration
-global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-
-# Transform the output of nm in a C name address pair
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action_CXX
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
-
-# If ld is used when linking, flag to hardcode \$libdir into
-# a binary during linking. This must work even if \$libdir does
-# not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
-
-# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$hardcode_direct_CXX
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$hardcode_minus_L_CXX
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
-
-# Set to yes if building a shared library automatically hardcodes DIR into the library
-# and all subsequent libraries and executables linked against it.
-hardcode_automatic=$hardcode_automatic_CXX
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs_CXX
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path="$fix_srcfile_path_CXX"
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$always_export_symbols_CXX
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds_CXX
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms_CXX
-
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms_CXX
-
-# ### END LIBTOOL TAG CONFIG: $tagname
-
-__EOF__
-
-
-else
- # If there is no Makefile yet, we rely on a make rule to execute
- # `config.status --recheck' to rerun these tests and create the
- # libtool script then.
- ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
- if test -f "$ltmain_in"; then
- test -f Makefile && make "$ltmain"
- fi
-fi
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-CC=$lt_save_CC
-LDCXX=$LD
-LD=$lt_save_LD
-GCC=$lt_save_GCC
-with_gnu_ldcxx=$with_gnu_ld
-with_gnu_ld=$lt_save_with_gnu_ld
-lt_cv_path_LDCXX=$lt_cv_path_LD
-lt_cv_path_LD=$lt_save_path_LD
-lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
-lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
-
- else
- tagname=""
- fi
- ;;
-
- F77)
- if test -n "$F77" && test "X$F77" != "Xno"; then
-
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-
-
-archive_cmds_need_lc_F77=no
-allow_undefined_flag_F77=
-always_export_symbols_F77=no
-archive_expsym_cmds_F77=
-export_dynamic_flag_spec_F77=
-hardcode_direct_F77=no
-hardcode_libdir_flag_spec_F77=
-hardcode_libdir_flag_spec_ld_F77=
-hardcode_libdir_separator_F77=
-hardcode_minus_L_F77=no
-hardcode_automatic_F77=no
-module_cmds_F77=
-module_expsym_cmds_F77=
-link_all_deplibs_F77=unknown
-old_archive_cmds_F77=$old_archive_cmds
-no_undefined_flag_F77=
-whole_archive_flag_spec_F77=
-enable_shared_with_static_runtimes_F77=no
-
-# Source file extension for f77 test sources.
-ac_ext=f
-
-# Object file extension for compiled f77 test sources.
-objext=o
-objext_F77=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code=" subroutine t\n return\n end\n"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code=" program t\n end\n"
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-printf "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$rm conftest*
-
-ac_outfile=conftest.$ac_objext
-printf "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$rm conftest*
-
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-CC=${F77-"f77"}
-compiler=$CC
-compiler_F77=$CC
-for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-
-echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
-echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
-echo "$as_me:$LINENO: result: $can_build_shared" >&5
-echo "${ECHO_T}$can_build_shared" >&6
-
-echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
-echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
-test "$can_build_shared" = "no" && enable_shared=no
-
-# On AIX, shared libraries and static libraries use the same namespace, and
-# are all built from PIC.
-case "$host_os" in
-aix3*)
- test "$enable_shared" = yes && enable_static=no
- if test -n "$RANLIB"; then
- archive_cmds="$archive_cmds~\$RANLIB \$lib"
- postinstall_cmds='$RANLIB $lib'
- fi
- ;;
-aix4* | aix5*)
- if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
- test "$enable_shared" = yes && enable_static=no
- fi
- ;;
-esac
-echo "$as_me:$LINENO: result: $enable_shared" >&5
-echo "${ECHO_T}$enable_shared" >&6
-
-echo "$as_me:$LINENO: checking whether to build static libraries" >&5
-echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-echo "$as_me:$LINENO: result: $enable_static" >&5
-echo "${ECHO_T}$enable_static" >&6
-
-test "$ld_shlibs_F77" = no && can_build_shared=no
-
-GCC_F77="$G77"
-LD_F77="$LD"
-
-lt_prog_compiler_wl_F77=
-lt_prog_compiler_pic_F77=
-lt_prog_compiler_static_F77=
-
-echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
-
- if test "$GCC" = yes; then
- lt_prog_compiler_wl_F77='-Wl,'
- lt_prog_compiler_static_F77='-static'
-
- case $host_os in
- aix*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static_F77='-Bstatic'
- fi
- ;;
-
- amigaos*)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the `-m68020' flag to GCC prevents building anything better,
- # like `-m68040'.
- lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4'
- ;;
-
- beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
-
- mingw* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_prog_compiler_pic_F77='-DDLL_EXPORT'
- ;;
-
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- lt_prog_compiler_pic_F77='-fno-common'
- ;;
-
- msdosdjgpp*)
- # Just because we use GCC doesn't mean we suddenly get shared libraries
- # on systems that don't support them.
- lt_prog_compiler_can_build_shared_F77=no
- enable_shared=no
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- lt_prog_compiler_pic_F77=-Kconform_pic
- fi
- ;;
-
- hpux*)
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case "$host_cpu" in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- lt_prog_compiler_pic_F77='-fPIC'
- ;;
- esac
- ;;
-
- *)
- lt_prog_compiler_pic_F77='-fPIC'
- ;;
- esac
- else
- # PORTME Check for flag to pass linker flags through the system compiler.
- case $host_os in
- aix*)
- lt_prog_compiler_wl_F77='-Wl,'
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static_F77='-Bstatic'
- else
- lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
- darwin*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- case $cc_basename in
- xlc*)
- lt_prog_compiler_pic_F77='-qnocommon'
- lt_prog_compiler_wl_F77='-Wl,'
- ;;
- esac
- ;;
-
- mingw* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_prog_compiler_pic_F77='-DDLL_EXPORT'
- ;;
-
- hpux9* | hpux10* | hpux11*)
- lt_prog_compiler_wl_F77='-Wl,'
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case "$host_cpu" in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- lt_prog_compiler_pic_F77='+Z'
- ;;
- esac
- # Is there a better lt_prog_compiler_static that works with the bundled CC?
- lt_prog_compiler_static_F77='${wl}-a ${wl}archive'
- ;;
-
- irix5* | irix6* | nonstopux*)
- lt_prog_compiler_wl_F77='-Wl,'
- # PIC (with -KPIC) is the default.
- lt_prog_compiler_static_F77='-non_shared'
- ;;
-
- newsos6)
- lt_prog_compiler_pic_F77='-KPIC'
- lt_prog_compiler_static_F77='-Bstatic'
- ;;
-
- linux*)
- case $cc_basename in
- icc* | ecc*)
- lt_prog_compiler_wl_F77='-Wl,'
- lt_prog_compiler_pic_F77='-KPIC'
- lt_prog_compiler_static_F77='-static'
- ;;
- pgcc* | pgf77* | pgf90*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
- lt_prog_compiler_wl_F77='-Wl,'
- lt_prog_compiler_pic_F77='-fpic'
- lt_prog_compiler_static_F77='-static'
- ;;
- ccc*)
- lt_prog_compiler_wl_F77='-Wl,'
- # All Alpha code is PIC.
- lt_prog_compiler_static_F77='-non_shared'
- ;;
- esac
- ;;
-
- osf3* | osf4* | osf5*)
- lt_prog_compiler_wl_F77='-Wl,'
- # All OSF/1 code is PIC.
- lt_prog_compiler_static_F77='-non_shared'
- ;;
-
- sco3.2v5*)
- lt_prog_compiler_pic_F77='-Kpic'
- lt_prog_compiler_static_F77='-dn'
- ;;
-
- solaris*)
- lt_prog_compiler_pic_F77='-KPIC'
- lt_prog_compiler_static_F77='-Bstatic'
- case $cc_basename in
- f77* | f90* | f95*)
- lt_prog_compiler_wl_F77='-Qoption ld ';;
- *)
- lt_prog_compiler_wl_F77='-Wl,';;
- esac
- ;;
-
- sunos4*)
- lt_prog_compiler_wl_F77='-Qoption ld '
- lt_prog_compiler_pic_F77='-PIC'
- lt_prog_compiler_static_F77='-Bstatic'
- ;;
-
- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
- lt_prog_compiler_wl_F77='-Wl,'
- lt_prog_compiler_pic_F77='-KPIC'
- lt_prog_compiler_static_F77='-Bstatic'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec ;then
- lt_prog_compiler_pic_F77='-Kconform_pic'
- lt_prog_compiler_static_F77='-Bstatic'
- fi
- ;;
-
- unicos*)
- lt_prog_compiler_wl_F77='-Wl,'
- lt_prog_compiler_can_build_shared_F77=no
- ;;
-
- uts4*)
- lt_prog_compiler_pic_F77='-pic'
- lt_prog_compiler_static_F77='-Bstatic'
- ;;
-
- *)
- lt_prog_compiler_can_build_shared_F77=no
- ;;
- esac
- fi
-
-echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5
-echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic_F77"; then
-
-echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5
-echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6
-if test "${lt_prog_compiler_pic_works_F77+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- lt_prog_compiler_pic_works_F77=no
- ac_outfile=conftest.$ac_objext
- printf "$lt_simple_compile_test_code" > conftest.$ac_ext
- lt_compiler_flag="$lt_prog_compiler_pic_F77"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- # The option is referenced via a variable to avoid confusing sed.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:15449: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&5
- echo "$as_me:15453: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s "$ac_outfile"; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $echo "X$_lt_compiler_boilerplate" | $Xsed >conftest.exp
- $SED '/^$/d' conftest.err >conftest.er2
- if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then
- lt_prog_compiler_pic_works_F77=yes
- fi
- fi
- $rm conftest*
-
-fi
-echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5
-echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6
-
-if test x"$lt_prog_compiler_pic_works_F77" = xyes; then
- case $lt_prog_compiler_pic_F77 in
- "" | " "*) ;;
- *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;;
- esac
-else
- lt_prog_compiler_pic_F77=
- lt_prog_compiler_can_build_shared_F77=no
-fi
-
-fi
-case "$host_os" in
- # For platforms which do not support PIC, -DPIC is meaningless:
- *djgpp*)
- lt_prog_compiler_pic_F77=
- ;;
- *)
- lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77"
- ;;
-esac
-
-echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
-if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- lt_cv_prog_compiler_c_o_F77=no
- $rm -r conftest 2>/dev/null
- mkdir conftest
- cd conftest
- mkdir out
- printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- lt_compiler_flag="-o out/conftest2.$ac_objext"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:15511: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>out/conftest.err)
- ac_status=$?
- cat out/conftest.err >&5
- echo "$as_me:15515: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s out/conftest2.$ac_objext
- then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- $echo "X$_lt_compiler_boilerplate" | $Xsed > out/conftest.exp
- $SED '/^$/d' out/conftest.err >out/conftest.er2
- if test ! -s out/conftest.err || diff out/conftest.exp out/conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_c_o_F77=yes
- fi
- fi
- chmod u+w .
- $rm conftest*
- # SGI C++ compiler will create directory out/ii_files/ for
- # template instantiation
- test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
- $rm out/* && rmdir out
- cd ..
- rmdir conftest
- $rm conftest*
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5
-echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6
-
-
-hard_links="nottested"
-if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then
- # do not overwrite the value of need_locks provided by the user
- echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
- hard_links=yes
- $rm conftest*
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- touch conftest.a
- ln conftest.a conftest.b 2>&5 || hard_links=no
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- echo "$as_me:$LINENO: result: $hard_links" >&5
-echo "${ECHO_T}$hard_links" >&6
- if test "$hard_links" = no; then
- { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
- need_locks=warn
- fi
-else
- need_locks=no
-fi
-
-echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
-
- runpath_var=
- allow_undefined_flag_F77=
- enable_shared_with_static_runtimes_F77=no
- archive_cmds_F77=
- archive_expsym_cmds_F77=
- old_archive_From_new_cmds_F77=
- old_archive_from_expsyms_cmds_F77=
- export_dynamic_flag_spec_F77=
- whole_archive_flag_spec_F77=
- thread_safe_flag_spec_F77=
- hardcode_libdir_flag_spec_F77=
- hardcode_libdir_flag_spec_ld_F77=
- hardcode_libdir_separator_F77=
- hardcode_direct_F77=no
- hardcode_minus_L_F77=no
- hardcode_shlibpath_var_F77=unsupported
- link_all_deplibs_F77=unknown
- hardcode_automatic_F77=no
- module_cmds_F77=
- module_expsym_cmds_F77=
- always_export_symbols_F77=no
- export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- # include_expsyms should be a list of space-separated symbols to be *always*
- # included in the symbol list
- include_expsyms_F77=
- # exclude_expsyms can be an extended regexp of symbols to exclude
- # it will be wrapped by ` (' and `)$', so one must not match beginning or
- # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
- # as well as any symbol that contains `d'.
- exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_"
- # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
- # platforms (ab)use it in PIC code, but their linkers get confused if
- # the symbol is explicitly referenced. Since portable code cannot
- # rely on this symbol name, it's probably fine to never include it in
- # preloaded symbol tables.
- extract_expsyms_cmds=
- # Just being paranoid about ensuring that cc_basename is set.
- for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
- case $host_os in
- cygwin* | mingw* | pw32*)
- # FIXME: the MSVC++ port hasn't been tested in a loooong time
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- if test "$GCC" != yes; then
- with_gnu_ld=no
- fi
- ;;
- openbsd*)
- with_gnu_ld=no
- ;;
- esac
-
- ld_shlibs_F77=yes
- if test "$with_gnu_ld" = yes; then
- # If archive_cmds runs LD, not CC, wlarc should be empty
- wlarc='${wl}'
-
- # Set some defaults for GNU ld with shared library support. These
- # are reset later if shared libraries are not supported. Putting them
- # here allows them to be overridden if necessary.
- runpath_var=LD_RUN_PATH
- hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir'
- export_dynamic_flag_spec_F77='${wl}--export-dynamic'
- # ancient GNU ld didn't support --whole-archive et. al.
- if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
- whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- whole_archive_flag_spec_F77=
- fi
- supports_anon_versioning=no
- case `$LD -v 2>/dev/null` in
- *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
- *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
- *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
- *\ 2.11.*) ;; # other 2.11 versions
- *) supports_anon_versioning=yes ;;
- esac
-
- # See if GNU ld supports shared libraries.
- case $host_os in
- aix3* | aix4* | aix5*)
- # On AIX/PPC, the GNU linker is very broken
- if test "$host_cpu" != ia64; then
- ld_shlibs_F77=no
- cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support. If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-EOF
- fi
- ;;
-
- amigaos*)
- archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec_F77='-L$libdir'
- hardcode_minus_L_F77=yes
-
- # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
- # that the semantics of dynamic libraries on AmigaOS, at least up
- # to version 4, is to share data among multiple programs linked
- # with the same dynamic library. Since this doesn't match the
- # behavior of shared libraries on other platforms, we can't use
- # them.
- ld_shlibs_F77=no
- ;;
-
- beos*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- allow_undefined_flag_F77=unsupported
- # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
- # support --undefined. This deserves some investigation. FIXME
- archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- else
- ld_shlibs_F77=no
- fi
- ;;
-
- cygwin* | mingw* | pw32*)
- # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless,
- # as there is no search path for DLLs.
- hardcode_libdir_flag_spec_F77='-L$libdir'
- allow_undefined_flag_F77=unsupported
- always_export_symbols_F77=no
- enable_shared_with_static_runtimes_F77=yes
- export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
-
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
- archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
- cp $export_symbols $output_objdir/$soname.def;
- else
- echo EXPORTS > $output_objdir/$soname.def;
- cat $export_symbols >> $output_objdir/$soname.def;
- fi~
- $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
- else
- ld_shlibs_F77=no
- fi
- ;;
-
- linux*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- tmp_addflag=
- case $cc_basename,$host_cpu in
- pgcc*) # Portland Group C compiler
- whole_archive_flag_spec_F77='${wl}--whole-archive,`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag'
- ;;
- pgf77* | pgf90* ) # Portland Group f77 and f90 compilers
- whole_archive_flag_spec_F77='${wl}--whole-archive,`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag -Mnomain' ;;
- ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
- tmp_addflag=' -i_dynamic' ;;
- efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
- tmp_addflag=' -i_dynamic -nofor_main' ;;
- ifc* | ifort*) # Intel Fortran compiler
- tmp_addflag=' -nofor_main' ;;
- esac
- archive_cmds_F77='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
- if test $supports_anon_versioning = yes; then
- archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- $echo "local: *; };" >> $output_objdir/$libname.ver~
- $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
- fi
- else
- ld_shlibs_F77=no
- fi
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
- archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
- solaris* | sysv5*)
- if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
- ld_shlibs_F77=no
- cat <<EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-EOF
- elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs_F77=no
- fi
- ;;
-
- sunos4*)
- archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- wlarc=
- hardcode_direct_F77=yes
- hardcode_shlibpath_var_F77=no
- ;;
-
- *)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs_F77=no
- fi
- ;;
- esac
-
- if test "$ld_shlibs_F77" = no; then
- runpath_var=
- hardcode_libdir_flag_spec_F77=
- export_dynamic_flag_spec_F77=
- whole_archive_flag_spec_F77=
- fi
- else
- # PORTME fill in a description of your system's linker (not GNU ld)
- case $host_os in
- aix3*)
- allow_undefined_flag_F77=unsupported
- always_export_symbols_F77=yes
- archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
- # Note: this linker hardcodes the directories in LIBPATH if there
- # are no directories specified by -L.
- hardcode_minus_L_F77=yes
- if test "$GCC" = yes && test -z "$link_static_flag"; then
- # Neither direct hardcoding nor static linking is supported with a
- # broken collect2.
- hardcode_direct_F77=unsupported
- fi
- ;;
-
- aix4* | aix5*)
- if test "$host_cpu" = ia64; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- exp_sym_flag='-Bexport'
- no_entry_flag=""
- else
- # If we're using GNU nm, then we don't want the "-C" option.
- # -C means demangle to AIX nm, but means don't demangle with GNU nm
- if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
- export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
- else
- export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
- fi
- aix_use_runtimelinking=no
-
- # Test if we are trying to use run time linking or normal
- # AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
- case $host_os in aix4.[23]|aix4.[23].*|aix5*)
- for ld_flag in $LDFLAGS; do
- if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
- aix_use_runtimelinking=yes
- break
- fi
- done
- esac
-
- exp_sym_flag='-bexport'
- no_entry_flag='-bnoentry'
- fi
-
- # When large executables or shared objects are built, AIX ld can
- # have problems creating the table of contents. If linking a library
- # or program results in "error TOC overflow" add -mminimal-toc to
- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
- archive_cmds_F77=''
- hardcode_direct_F77=yes
- hardcode_libdir_separator_F77=':'
- link_all_deplibs_F77=yes
-
- if test "$GCC" = yes; then
- case $host_os in aix4.[012]|aix4.[012].*)
- # We only want to do this on AIX 4.2 and lower, the check
- # below for broken collect2 doesn't work under 4.3+
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" && \
- strings "$collect2name" | grep resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- hardcode_direct_F77=yes
- else
- # We have old collect2
- hardcode_direct_F77=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- hardcode_minus_L_F77=yes
- hardcode_libdir_flag_spec_F77='-L$libdir'
- hardcode_libdir_separator_F77=
- fi
- esac
- shared_flag='-shared'
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag="$shared_flag "'${wl}-G'
- fi
- else
- # not using gcc
- if test "$host_cpu" = ia64; then
- # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
- # chokes on -Wl,-G. The following line is correct:
- shared_flag='-G'
- else
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag='${wl}-G'
- else
- shared_flag='${wl}-bM:SRE'
- fi
- fi
- fi
-
- # It seems that -bexpall does not export symbols beginning with
- # underscore (_), so it is better to generate a list of symbols to export.
- always_export_symbols_F77=yes
- if test "$aix_use_runtimelinking" = yes; then
- # Warning - without using the other runtime loading flags (-brtl),
- # -berok will link without error, but may produce a broken library.
- allow_undefined_flag_F77='-berok'
- # Determine the default libpath from the value encoded in an empty executable.
- cat >conftest.$ac_ext <<_ACEOF
- program main
-
- end
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_f77_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-}'`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-}'`; fi
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
- archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
- else
- if test "$host_cpu" = ia64; then
- hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib'
- allow_undefined_flag_F77="-z nodefs"
- archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
- else
- # Determine the default libpath from the value encoded in an empty executable.
- cat >conftest.$ac_ext <<_ACEOF
- program main
-
- end
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_f77_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-}'`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-}'`; fi
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
- # -berok will link without error, but may produce a broken library.
- no_undefined_flag_F77=' ${wl}-bernotok'
- allow_undefined_flag_F77=' ${wl}-berok'
- # -bexpall does not export symbols beginning with underscore (_)
- always_export_symbols_F77=yes
- # Exported symbols can be pulled into shared objects from archives
- whole_archive_flag_spec_F77=' '
- archive_cmds_need_lc_F77=yes
- # This is similar to how AIX traditionally builds it's shared libraries.
- archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
- fi
- fi
- ;;
-
- amigaos*)
- archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec_F77='-L$libdir'
- hardcode_minus_L_F77=yes
- # see comment about different semantics on the GNU ld section
- ld_shlibs_F77=no
- ;;
-
- bsdi[45]*)
- export_dynamic_flag_spec_F77=-rdynamic
- ;;
-
- cygwin* | mingw* | pw32*)
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- hardcode_libdir_flag_spec_F77=' '
- allow_undefined_flag_F77=unsupported
- # Tell ltmain to make .lib files, not .a files.
- libext=lib
- # Tell ltmain to make .dll files, not .so files.
- shrext_cmds=".dll"
- # FIXME: Setting linknames here is a bad hack.
- archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
- # The linker will automatically build a .lib file if we build a DLL.
- old_archive_From_new_cmds_F77='true'
- # FIXME: Should let the user specify the lib program.
- old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs'
- fix_srcfile_path_F77='`cygpath -w "$srcfile"`'
- enable_shared_with_static_runtimes_F77=yes
- ;;
-
- darwin* | rhapsody*)
- case "$host_os" in
- rhapsody* | darwin1.[012])
- allow_undefined_flag_F77='${wl}-undefined ${wl}suppress'
- ;;
- *) # Darwin 1.3 on
- if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
- allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
- else
- case ${MACOSX_DEPLOYMENT_TARGET} in
- 10.[012])
- allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
- ;;
- 10.*)
- allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup'
- ;;
- esac
- fi
- ;;
- esac
- archive_cmds_need_lc_F77=no
- hardcode_direct_F77=no
- hardcode_automatic_F77=yes
- hardcode_shlibpath_var_F77=unsupported
- whole_archive_flag_spec_F77=''
- link_all_deplibs_F77=yes
- if test "$GCC" = yes ; then
-# echo "G77=$G77,compiler=$compiler,tagname=$tagname"
- if test "$tagname" = "F77"; then
-archive_cmds_F77='$CC -dynamiclib -single_module -nostdlib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
- else
-archive_cmds_F77='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
- fi
- output_verbose_link_cmd='echo'
- module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
- archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- else
- case $cc_basename in
- xlc*)
- output_verbose_link_cmd='echo'
- archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
- module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
- archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- ;;
- *)
- ld_shlibs_F77=no
- ;;
- esac
- fi
- ;;
-
- dgux*)
- archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec_F77='-L$libdir'
- hardcode_shlibpath_var_F77=no
- ;;
-
- freebsd1*)
- ld_shlibs_F77=no
- ;;
-
- # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
- # support. Future versions do this automatically, but an explicit c++rt0.o
- # does not break anything, and helps significantly (at the cost of a little
- # extra space).
- freebsd2.2*)
- archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
- hardcode_libdir_flag_spec_F77='-R$libdir'
- hardcode_direct_F77=yes
- hardcode_shlibpath_var_F77=no
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
- freebsd2*)
- archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct_F77=yes
- hardcode_minus_L_F77=yes
- hardcode_shlibpath_var_F77=no
- ;;
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | kfreebsd*-gnu | dragonfly*)
- archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec_F77='-R$libdir'
- hardcode_direct_F77=yes
- hardcode_shlibpath_var_F77=no
- ;;
-
- hpux9*)
- if test "$GCC" = yes; then
- archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- fi
- hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator_F77=:
- hardcode_direct_F77=yes
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L_F77=yes
- export_dynamic_flag_spec_F77='${wl}-E'
- ;;
-
- hpux10* | hpux11*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- case "$host_cpu" in
- hppa*64*|ia64*)
- archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- else
- case "$host_cpu" in
- hppa*64*|ia64*)
- archive_cmds_F77='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
- ;;
- *)
- archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- ;;
- esac
- fi
- if test "$with_gnu_ld" = no; then
- case "$host_cpu" in
- hppa*64*)
- hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
- hardcode_libdir_flag_spec_ld_F77='+b $libdir'
- hardcode_libdir_separator_F77=:
- hardcode_direct_F77=no
- hardcode_shlibpath_var_F77=no
- ;;
- ia64*)
- hardcode_libdir_flag_spec_F77='-L$libdir'
- hardcode_direct_F77=no
- hardcode_shlibpath_var_F77=no
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L_F77=yes
- ;;
- *)
- hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator_F77=:
- hardcode_direct_F77=yes
- export_dynamic_flag_spec_F77='${wl}-E'
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L_F77=yes
- ;;
- esac
- fi
- ;;
-
- irix5* | irix6* | nonstopux*)
- if test "$GCC" = yes; then
- archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- hardcode_libdir_flag_spec_ld_F77='-rpath $libdir'
- fi
- hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator_F77=:
- link_all_deplibs_F77=yes
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
- else
- archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
- fi
- hardcode_libdir_flag_spec_F77='-R$libdir'
- hardcode_direct_F77=yes
- hardcode_shlibpath_var_F77=no
- ;;
-
- newsos6)
- archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct_F77=yes
- hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator_F77=:
- hardcode_shlibpath_var_F77=no
- ;;
-
- openbsd*)
- hardcode_direct_F77=yes
- hardcode_shlibpath_var_F77=no
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
- hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
- export_dynamic_flag_spec_F77='${wl}-E'
- else
- case $host_os in
- openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
- archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec_F77='-R$libdir'
- ;;
- *)
- archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
- ;;
- esac
- fi
- ;;
-
- os2*)
- hardcode_libdir_flag_spec_F77='-L$libdir'
- hardcode_minus_L_F77=yes
- allow_undefined_flag_F77=unsupported
- archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
- old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
- ;;
-
- osf3*)
- if test "$GCC" = yes; then
- allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- allow_undefined_flag_F77=' -expect_unresolved \*'
- archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- fi
- hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator_F77=:
- ;;
-
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test "$GCC" = yes; then
- allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
- else
- allow_undefined_flag_F77=' -expect_unresolved \*'
- archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
- $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
-
- # Both c and cxx compiler support -rpath directly
- hardcode_libdir_flag_spec_F77='-rpath $libdir'
- fi
- hardcode_libdir_separator_F77=:
- ;;
-
- sco3.2v5*)
- archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var_F77=no
- export_dynamic_flag_spec_F77='${wl}-Bexport'
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- ;;
-
- solaris*)
- no_undefined_flag_F77=' -z text'
- if test "$GCC" = yes; then
- wlarc='${wl}'
- archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
- else
- wlarc=''
- archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
- archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
- fi
- hardcode_libdir_flag_spec_F77='-R$libdir'
- hardcode_shlibpath_var_F77=no
- case $host_os in
- solaris2.[0-5] | solaris2.[0-5].*) ;;
- *)
- # The compiler driver will combine linker options so we
- # cannot just pass the convience library names through
- # without $wl, iff we do not link with $LD.
- # Luckily, gcc supports the same syntax we need for Sun Studio.
- # Supported since Solaris 2.6 (maybe 2.5.1?)
- case $wlarc in
- '')
- whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;;
- *)
- whole_archive_flag_spec_F77='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
- esac ;;
- esac
- link_all_deplibs_F77=yes
- ;;
-
- sunos4*)
- if test "x$host_vendor" = xsequent; then
- # Use $CC to link under sequent, because it throws in some extra .o
- # files that make .init and .fini sections work.
- archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
- fi
- hardcode_libdir_flag_spec_F77='-L$libdir'
- hardcode_direct_F77=yes
- hardcode_minus_L_F77=yes
- hardcode_shlibpath_var_F77=no
- ;;
-
- sysv4)
- case $host_vendor in
- sni)
- archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct_F77=yes # is this really true???
- ;;
- siemens)
- ## LD is ld it makes a PLAMLIB
- ## CC just makes a GrossModule.
- archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
- reload_cmds_F77='$CC -r -o $output$reload_objs'
- hardcode_direct_F77=no
- ;;
- motorola)
- archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie
- ;;
- esac
- runpath_var='LD_RUN_PATH'
- hardcode_shlibpath_var_F77=no
- ;;
-
- sysv4.3*)
- archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var_F77=no
- export_dynamic_flag_spec_F77='-Bexport'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var_F77=no
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- ld_shlibs_F77=yes
- fi
- ;;
-
- sysv4.2uw2*)
- archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct_F77=yes
- hardcode_minus_L_F77=no
- hardcode_shlibpath_var_F77=no
- hardcode_runpath_var=yes
- runpath_var=LD_RUN_PATH
- ;;
-
- sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
- no_undefined_flag_F77='${wl}-z ${wl}text'
- if test "$GCC" = yes; then
- archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds_F77='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- runpath_var='LD_RUN_PATH'
- hardcode_shlibpath_var_F77=no
- ;;
-
- sysv5*)
- no_undefined_flag_F77=' -z text'
- # $CC -shared without GNU ld will not create a library from C++
- # object files and a static libstdc++, better avoid it by now
- archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
- archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
- hardcode_libdir_flag_spec_F77=
- hardcode_shlibpath_var_F77=no
- runpath_var='LD_RUN_PATH'
- ;;
-
- uts4*)
- archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec_F77='-L$libdir'
- hardcode_shlibpath_var_F77=no
- ;;
-
- *)
- ld_shlibs_F77=no
- ;;
- esac
- fi
-
-echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5
-echo "${ECHO_T}$ld_shlibs_F77" >&6
-test "$ld_shlibs_F77" = no && can_build_shared=no
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
- variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$archive_cmds_need_lc_F77" in
-x|xyes)
- # Assume -lc should be added
- archive_cmds_need_lc_F77=yes
-
- if test "$enable_shared" = yes && test "$GCC" = yes; then
- case $archive_cmds_F77 in
- *'~'*)
- # FIXME: we may have to deal with multi-command sequences.
- ;;
- '$CC '*)
- # Test whether the compiler implicitly links with -lc since on some
- # systems, -lgcc has to come before -lc. If gcc already passes -lc
- # to ld, don't add -lc before -lgcc.
- echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
- $rm conftest*
- printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } 2>conftest.err; then
- soname=conftest
- lib=conftest
- libobjs=conftest.$ac_objext
- deplibs=
- wl=$lt_prog_compiler_wl_F77
- compiler_flags=-v
- linker_flags=-v
- verstring=
- output_objdir=.
- libname=conftest
- lt_save_allow_undefined_flag=$allow_undefined_flag_F77
- allow_undefined_flag_F77=
- if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
- (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
- then
- archive_cmds_need_lc_F77=no
- else
- archive_cmds_need_lc_F77=yes
- fi
- allow_undefined_flag_F77=$lt_save_allow_undefined_flag
- else
- cat conftest.err 1>&5
- fi
- $rm conftest*
- echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5
-echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6
- ;;
- esac
- fi
- ;;
-esac
-
-echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-if test "$GCC" = yes; then
- sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
- # if the path contains ";" then we assume it to be the separator
- # otherwise default to the standard path separator (i.e. ":") - it is
- # assumed that no part of a normal pathname contains ";" but that should
- # okay in the real world where ";" in dirpaths is itself problematic.
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
- else
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
-else
- sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
- shlibpath_var=LIBPATH
-
- # AIX 3 has no versioning support, so we append a major version to the name.
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
-
-aix4* | aix5*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- hardcode_into_libs=yes
- if test "$host_cpu" = ia64; then
- # AIX 5 supports IA64
- library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- else
- # With GCC up to 2.95.x, collect2 would create an import file
- # for dependence libraries. The import file would start with
- # the line `#! .'. This would cause the generated library to
- # depend on `.', always an invalid library. This was fixed in
- # development snapshots of GCC prior to 3.0.
- case $host_os in
- aix4 | aix4.[01] | aix4.[01].*)
- if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
- echo ' yes '
- echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
- :
- else
- can_build_shared=no
- fi
- ;;
- esac
- # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
- # soname into executable. Probably we can add versioning support to
- # collect2, so additional links can be useful in future.
- if test "$aix_use_runtimelinking" = yes; then
- # If using run time linking (on AIX 4.2 or later) use lib<name>.so
- # instead of lib<name>.a to let people know that these are not
- # typical AIX shared libraries.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- else
- # We preserve .a as extension for shared libraries through AIX4.2
- # and later when we are not doing run time linking.
- library_names_spec='${libname}${release}.a $libname.a'
- soname_spec='${libname}${release}${shared_ext}$major'
- fi
- shlibpath_var=LIBPATH
- fi
- ;;
-
-amigaos*)
- library_names_spec='$libname.ixlibrary $libname.a'
- # Create ${libname}_ixlibrary.a entries in /sys/libs.
- finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
- ;;
-
-beos*)
- library_names_spec='${libname}${shared_ext}'
- dynamic_linker="$host_os ld.so"
- shlibpath_var=LIBRARY_PATH
- ;;
-
-bsdi[45]*)
- version_type=linux
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
- sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
- # the default ld.so.conf also contains /usr/contrib/lib and
- # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
- # libtool to hard-code these into programs
- ;;
-
-cygwin* | mingw* | pw32*)
- version_type=windows
- shrext_cmds=".dll"
- need_version=no
- need_lib_prefix=no
-
- case $GCC,$host_os in
- yes,cygwin* | yes,mingw* | yes,pw32*)
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \${file}`~
- dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
- dldir=$destdir/`dirname \$dlpath`~
- test -d \$dldir || mkdir -p \$dldir~
- $install_prog $dir/$dlname \$dldir/$dlname'
- postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
- dlpath=$dir/\$dldll~
- $rm \$dlpath'
- shlibpath_overrides_runpath=yes
-
- case $host_os in
- cygwin*)
- # Cygwin DLLs use 'cyg' prefix rather than 'lib'
- soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
- ;;
- mingw*)
- # MinGW DLLs use traditional 'lib' prefix
- soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
- # It is most probably a Windows format PATH printed by
- # mingw gcc, but we are running on Cygwin. Gcc prints its search
- # path with ; separators, and with drive letters. We can handle the
- # drive letters (cygwin fileutils understands them), so leave them,
- # especially as we might pass files found there to a mingw objdump,
- # which wouldn't understand a cygwinified path. Ahh.
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
- else
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
- ;;
- pw32*)
- # pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- ;;
- esac
- ;;
-
- *)
- library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
- ;;
- esac
- dynamic_linker='Win32 ld.exe'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-
-darwin* | rhapsody*)
- dynamic_linker="$host_os dyld"
- version_type=darwin
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
- soname_spec='${libname}${release}${major}$shared_ext'
- shlibpath_overrides_runpath=yes
- shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
- # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
- if test "$GCC" = yes; then
- sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
- else
- sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
- fi
- sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
- ;;
-
-dgux*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-freebsd1*)
- dynamic_linker=no
- ;;
-
-kfreebsd*-gnu)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- dynamic_linker='GNU ld.so'
- ;;
-
-freebsd* | dragonfly*)
- # DragonFly does not have aout. When/if they implement a new
- # versioning mechanism, adjust this.
- objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
- version_type=freebsd-$objformat
- case $version_type in
- freebsd-elf*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- need_version=no
- need_lib_prefix=no
- ;;
- freebsd-*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
- need_version=yes
- ;;
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
- freebsd2*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- *) # from 3.2 on
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
- esac
- ;;
-
-gnu*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- ;;
-
-hpux9* | hpux10* | hpux11*)
- # Give a soname corresponding to the major version so that dld.sl refuses to
- # link against other versions.
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- case "$host_cpu" in
- ia64*)
- shrext_cmds='.so'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.so"
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- if test "X$HPUX_IA64_MODE" = X32; then
- sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
- else
- sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
- fi
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- hppa*64*)
- shrext_cmds='.sl'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- *)
- shrext_cmds='.sl'
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=SHLIB_PATH
- shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
- esac
- # HP-UX runs *really* slowly unless shared libraries are mode 555.
- postinstall_cmds='chmod 555 $lib'
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $host_os in
- nonstopux*) version_type=nonstopux ;;
- *)
- if test "$lt_cv_prog_gnu_ld" = yes; then
- version_type=linux
- else
- version_type=irix
- fi ;;
- esac
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
- case $host_os in
- irix5* | nonstopux*)
- libsuff= shlibsuff=
- ;;
- *)
- case $LD in # libtool.m4 will add one of these switches to LD
- *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
- libsuff= shlibsuff= libmagic=32-bit;;
- *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
- libsuff=32 shlibsuff=N32 libmagic=N32;;
- *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
- libsuff=64 shlibsuff=64 libmagic=64-bit;;
- *) libsuff= shlibsuff= libmagic=never-match;;
- esac
- ;;
- esac
- shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
- sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
- hardcode_into_libs=yes
- ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
- dynamic_linker=no
- ;;
-
-# This must be Linux ELF.
-linux*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- # This implies no fast_install, which is unacceptable.
- # Some rework will be needed to allow for fast_install
- # before this can be enabled.
- hardcode_into_libs=yes
-
- # Append ld.so.conf contents to the search path
- if test -f /etc/ld.so.conf; then
- lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
- fi
-
- # We used to test for /lib/ld.so.1 and disable shared libraries on
- # powerpc, because MkLinux only supported shared libraries with the
- # GNU dynamic linker. Since this was broken with cross compilers,
- # most powerpc-linux boxes support dynamic linking these days and
- # people can always --disable-shared, the test was removed, and we
- # assume the GNU/Linux dynamic linker is in use.
- dynamic_linker='GNU/Linux ld.so'
- ;;
-
-knetbsd*-gnu)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- dynamic_linker='GNU ld.so'
- ;;
-
-netbsd*)
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- dynamic_linker='NetBSD (a.out) ld.so'
- else
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='NetBSD ld.elf_so'
- fi
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
-
-newsos6)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-nto-qnx*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-openbsd*)
- version_type=sunos
- need_lib_prefix=no
- # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
- case $host_os in
- openbsd3.3 | openbsd3.3.*) need_version=yes ;;
- *) need_version=no ;;
- esac
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- case $host_os in
- openbsd2.[89] | openbsd2.[89].*)
- shlibpath_overrides_runpath=no
- ;;
- *)
- shlibpath_overrides_runpath=yes
- ;;
- esac
- else
- shlibpath_overrides_runpath=yes
- fi
- ;;
-
-os2*)
- libname_spec='$name'
- shrext_cmds=".dll"
- need_lib_prefix=no
- library_names_spec='$libname${shared_ext} $libname.a'
- dynamic_linker='OS/2 ld.exe'
- shlibpath_var=LIBPATH
- ;;
-
-osf3* | osf4* | osf5*)
- version_type=osf
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
- sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
- ;;
-
-sco3.2v5*)
- version_type=osf
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-solaris*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- # ldd complains unless libraries are executable
- postinstall_cmds='chmod +x $lib'
- ;;
-
-sunos4*)
- version_type=sunos
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- if test "$with_gnu_ld" = yes; then
- need_lib_prefix=no
- fi
- need_version=yes
- ;;
-
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- case $host_vendor in
- sni)
- shlibpath_overrides_runpath=no
- need_lib_prefix=no
- export_dynamic_flag_spec='${wl}-Blargedynsym'
- runpath_var=LD_RUN_PATH
- ;;
- siemens)
- need_lib_prefix=no
- ;;
- motorola)
- need_lib_prefix=no
- need_version=no
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
- ;;
- esac
- ;;
-
-sysv4*MP*)
- if test -d /usr/nec ;then
- version_type=linux
- library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
- soname_spec='$libname${shared_ext}.$major'
- shlibpath_var=LD_LIBRARY_PATH
- fi
- ;;
-
-uts4*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-*)
- dynamic_linker=no
- ;;
-esac
-echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-echo "${ECHO_T}$dynamic_linker" >&6
-test "$dynamic_linker" = no && can_build_shared=no
-
-echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
-hardcode_action_F77=
-if test -n "$hardcode_libdir_flag_spec_F77" || \
- test -n "$runpath_var_F77" || \
- test "X$hardcode_automatic_F77" = "Xyes" ; then
-
- # We can hardcode non-existant directories.
- if test "$hardcode_direct_F77" != no &&
- # If the only mechanism to avoid hardcoding is shlibpath_var, we
- # have to relink, otherwise we might link with an installed library
- # when we should be linking with a yet-to-be-installed one
- ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no &&
- test "$hardcode_minus_L_F77" != no; then
- # Linking always hardcodes the temporary library directory.
- hardcode_action_F77=relink
- else
- # We can link without hardcoding, and we can hardcode nonexisting dirs.
- hardcode_action_F77=immediate
- fi
-else
- # We cannot hardcode anything, or else we can only hardcode existing
- # directories.
- hardcode_action_F77=unsupported
-fi
-echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5
-echo "${ECHO_T}$hardcode_action_F77" >&6
-
-if test "$hardcode_action_F77" = relink; then
- # Fast installation is not supported
- enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
- test "$enable_shared" = no; then
- # Fast installation is not necessary
- enable_fast_install=needless
-fi
-
-striplib=
-old_striplib=
-echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
-echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
-if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
- test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
- test -z "$striplib" && striplib="$STRIP --strip-unneeded"
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
-# FIXME - insert some real tests, host_os isn't really good enough
- case $host_os in
- darwin*)
- if test -n "$STRIP" ; then
- striplib="$STRIP -x"
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
- else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
- ;;
- *)
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- ;;
- esac
-fi
-
-
-
-# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
- # See if we are running on zsh, and set the options which allow our commands through
- # without removal of \ escapes.
- if test -n "${ZSH_VERSION+set}" ; then
- setopt NO_GLOB_SUBST
- fi
- # Now quote all the things that may contain metacharacters while being
- # careful not to overquote the AC_SUBSTed values. We take copies of the
- # variables and quote the copies for generation of the libtool script.
- for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
- SED SHELL STRIP \
- libname_spec library_names_spec soname_spec extract_expsyms_cmds \
- old_striplib striplib file_magic_cmd finish_cmds finish_eval \
- deplibs_check_method reload_flag reload_cmds need_locks \
- lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
- lt_cv_sys_global_symbol_to_c_name_address \
- sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
- old_postinstall_cmds old_postuninstall_cmds \
- compiler_F77 \
- CC_F77 \
- LD_F77 \
- lt_prog_compiler_wl_F77 \
- lt_prog_compiler_pic_F77 \
- lt_prog_compiler_static_F77 \
- lt_prog_compiler_no_builtin_flag_F77 \
- export_dynamic_flag_spec_F77 \
- thread_safe_flag_spec_F77 \
- whole_archive_flag_spec_F77 \
- enable_shared_with_static_runtimes_F77 \
- old_archive_cmds_F77 \
- old_archive_from_new_cmds_F77 \
- predep_objects_F77 \
- postdep_objects_F77 \
- predeps_F77 \
- postdeps_F77 \
- compiler_lib_search_path_F77 \
- archive_cmds_F77 \
- archive_expsym_cmds_F77 \
- postinstall_cmds_F77 \
- postuninstall_cmds_F77 \
- old_archive_from_expsyms_cmds_F77 \
- allow_undefined_flag_F77 \
- no_undefined_flag_F77 \
- export_symbols_cmds_F77 \
- hardcode_libdir_flag_spec_F77 \
- hardcode_libdir_flag_spec_ld_F77 \
- hardcode_libdir_separator_F77 \
- hardcode_automatic_F77 \
- module_cmds_F77 \
- module_expsym_cmds_F77 \
- lt_cv_prog_compiler_c_o_F77 \
- exclude_expsyms_F77 \
- include_expsyms_F77; do
-
- case $var in
- old_archive_cmds_F77 | \
- old_archive_from_new_cmds_F77 | \
- archive_cmds_F77 | \
- archive_expsym_cmds_F77 | \
- module_cmds_F77 | \
- module_expsym_cmds_F77 | \
- old_archive_from_expsyms_cmds_F77 | \
- export_symbols_cmds_F77 | \
- extract_expsyms_cmds | reload_cmds | finish_cmds | \
- postinstall_cmds | postuninstall_cmds | \
- old_postinstall_cmds | old_postuninstall_cmds | \
- sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
- # Double-quote double-evaled strings.
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
- ;;
- *)
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
- ;;
- esac
- done
-
- case $lt_echo in
- *'\$0 --fallback-echo"')
- lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
- ;;
- esac
-
-cfgfile="$ofile"
-
- cat <<__EOF__ >> "$cfgfile"
-# ### BEGIN LIBTOOL TAG CONFIG: $tagname
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$archive_cmds_need_lc_F77
-
-# Whether or not to disallow shared libs when runtime libs are static
-allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-host_os=$host_os
-
-# The build system.
-build_alias=$build_alias
-build=$build
-build_os=$build_os
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# A language-specific compiler.
-CC=$lt_compiler_F77
-
-# Is the compiler the GNU C compiler?
-with_gcc=$GCC_F77
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_LD_F77
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_F77
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic_F77
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# Do we need the lib prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Whether dlopen is supported.
-dlopen_support=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static_F77
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77
-
-# Library versioning type.
-version_type=$version_type
-
-# Format of library name prefix.
-libname_spec=$lt_libname_spec
-
-# List of archive names. First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME.
-library_names_spec=$lt_library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$lt_soname_spec
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_old_archive_cmds_F77
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77
-
-# Commands used to build and install a shared archive.
-archive_cmds=$lt_archive_cmds_F77
-archive_expsym_cmds=$lt_archive_expsym_cmds_F77
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_module_cmds_F77
-module_expsym_cmds=$lt_module_expsym_cmds_F77
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_predep_objects_F77
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_postdep_objects_F77
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_predeps_F77
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$lt_postdeps_F77
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_compiler_lib_search_path_F77
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$lt_deplibs_check_method
-
-# Command to use when deplibs_check_method == file_magic.
-file_magic_cmd=$lt_file_magic_cmd
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag_F77
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag_F77
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration
-global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-
-# Transform the output of nm in a C name address pair
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action_F77
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77
-
-# If ld is used when linking, flag to hardcode \$libdir into
-# a binary during linking. This must work even if \$libdir does
-# not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77
-
-# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$hardcode_direct_F77
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$hardcode_minus_L_F77
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var_F77
-
-# Set to yes if building a shared library automatically hardcodes DIR into the library
-# and all subsequent libraries and executables linked against it.
-hardcode_automatic=$hardcode_automatic_F77
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs_F77
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path="$fix_srcfile_path_F77"
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$always_export_symbols_F77
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds_F77
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms_F77
-
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms_F77
-
-# ### END LIBTOOL TAG CONFIG: $tagname
-
-__EOF__
-
-
-else
- # If there is no Makefile yet, we rely on a make rule to execute
- # `config.status --recheck' to rerun these tests and create the
- # libtool script then.
- ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
- if test -f "$ltmain_in"; then
- test -f Makefile && make "$ltmain"
- fi
-fi
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-CC="$lt_save_CC"
-
- else
- tagname=""
- fi
- ;;
-
- GCJ)
- if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
-
-
-
-# Source file extension for Java test sources.
-ac_ext=java
-
-# Object file extension for compiled Java test sources.
-objext=o
-objext_GCJ=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="class foo {}\n"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-printf "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$rm conftest*
-
-ac_outfile=conftest.$ac_objext
-printf "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$rm conftest*
-
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-CC=${GCJ-"gcj"}
-compiler=$CC
-compiler_GCJ=$CC
-for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-
-# GCJ did not exist at the time GCC didn't implicitly link libc in.
-archive_cmds_need_lc_GCJ=no
-
-old_archive_cmds_GCJ=$old_archive_cmds
-
-
-lt_prog_compiler_no_builtin_flag_GCJ=
-
-if test "$GCC" = yes; then
- lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin'
-
-
-echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
-if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- lt_cv_prog_compiler_rtti_exceptions=no
- ac_outfile=conftest.$ac_objext
- printf "$lt_simple_compile_test_code" > conftest.$ac_ext
- lt_compiler_flag="-fno-rtti -fno-exceptions"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- # The option is referenced via a variable to avoid confusing sed.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:17638: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&5
- echo "$as_me:17642: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s "$ac_outfile"; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $echo "X$_lt_compiler_boilerplate" | $Xsed >conftest.exp
- $SED '/^$/d' conftest.err >conftest.er2
- if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_rtti_exceptions=yes
- fi
- fi
- $rm conftest*
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
-echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
-
-if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
- lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions"
-else
- :
-fi
-
-fi
-
-lt_prog_compiler_wl_GCJ=
-lt_prog_compiler_pic_GCJ=
-lt_prog_compiler_static_GCJ=
-
-echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
-
- if test "$GCC" = yes; then
- lt_prog_compiler_wl_GCJ='-Wl,'
- lt_prog_compiler_static_GCJ='-static'
-
- case $host_os in
- aix*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static_GCJ='-Bstatic'
- fi
- ;;
-
- amigaos*)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the `-m68020' flag to GCC prevents building anything better,
- # like `-m68040'.
- lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4'
- ;;
-
- beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
-
- mingw* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
- ;;
-
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- lt_prog_compiler_pic_GCJ='-fno-common'
- ;;
-
- msdosdjgpp*)
- # Just because we use GCC doesn't mean we suddenly get shared libraries
- # on systems that don't support them.
- lt_prog_compiler_can_build_shared_GCJ=no
- enable_shared=no
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- lt_prog_compiler_pic_GCJ=-Kconform_pic
- fi
- ;;
-
- hpux*)
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case "$host_cpu" in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- lt_prog_compiler_pic_GCJ='-fPIC'
- ;;
- esac
- ;;
-
- *)
- lt_prog_compiler_pic_GCJ='-fPIC'
- ;;
- esac
- else
- # PORTME Check for flag to pass linker flags through the system compiler.
- case $host_os in
- aix*)
- lt_prog_compiler_wl_GCJ='-Wl,'
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static_GCJ='-Bstatic'
- else
- lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
- darwin*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- case $cc_basename in
- xlc*)
- lt_prog_compiler_pic_GCJ='-qnocommon'
- lt_prog_compiler_wl_GCJ='-Wl,'
- ;;
- esac
- ;;
-
- mingw* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
- ;;
-
- hpux9* | hpux10* | hpux11*)
- lt_prog_compiler_wl_GCJ='-Wl,'
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case "$host_cpu" in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- lt_prog_compiler_pic_GCJ='+Z'
- ;;
- esac
- # Is there a better lt_prog_compiler_static that works with the bundled CC?
- lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive'
- ;;
-
- irix5* | irix6* | nonstopux*)
- lt_prog_compiler_wl_GCJ='-Wl,'
- # PIC (with -KPIC) is the default.
- lt_prog_compiler_static_GCJ='-non_shared'
- ;;
-
- newsos6)
- lt_prog_compiler_pic_GCJ='-KPIC'
- lt_prog_compiler_static_GCJ='-Bstatic'
- ;;
-
- linux*)
- case $cc_basename in
- icc* | ecc*)
- lt_prog_compiler_wl_GCJ='-Wl,'
- lt_prog_compiler_pic_GCJ='-KPIC'
- lt_prog_compiler_static_GCJ='-static'
- ;;
- pgcc* | pgf77* | pgf90*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
- lt_prog_compiler_wl_GCJ='-Wl,'
- lt_prog_compiler_pic_GCJ='-fpic'
- lt_prog_compiler_static_GCJ='-static'
- ;;
- ccc*)
- lt_prog_compiler_wl_GCJ='-Wl,'
- # All Alpha code is PIC.
- lt_prog_compiler_static_GCJ='-non_shared'
- ;;
- esac
- ;;
-
- osf3* | osf4* | osf5*)
- lt_prog_compiler_wl_GCJ='-Wl,'
- # All OSF/1 code is PIC.
- lt_prog_compiler_static_GCJ='-non_shared'
- ;;
-
- sco3.2v5*)
- lt_prog_compiler_pic_GCJ='-Kpic'
- lt_prog_compiler_static_GCJ='-dn'
- ;;
-
- solaris*)
- lt_prog_compiler_pic_GCJ='-KPIC'
- lt_prog_compiler_static_GCJ='-Bstatic'
- case $cc_basename in
- f77* | f90* | f95*)
- lt_prog_compiler_wl_GCJ='-Qoption ld ';;
- *)
- lt_prog_compiler_wl_GCJ='-Wl,';;
- esac
- ;;
-
- sunos4*)
- lt_prog_compiler_wl_GCJ='-Qoption ld '
- lt_prog_compiler_pic_GCJ='-PIC'
- lt_prog_compiler_static_GCJ='-Bstatic'
- ;;
-
- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
- lt_prog_compiler_wl_GCJ='-Wl,'
- lt_prog_compiler_pic_GCJ='-KPIC'
- lt_prog_compiler_static_GCJ='-Bstatic'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec ;then
- lt_prog_compiler_pic_GCJ='-Kconform_pic'
- lt_prog_compiler_static_GCJ='-Bstatic'
- fi
- ;;
-
- unicos*)
- lt_prog_compiler_wl_GCJ='-Wl,'
- lt_prog_compiler_can_build_shared_GCJ=no
- ;;
-
- uts4*)
- lt_prog_compiler_pic_GCJ='-pic'
- lt_prog_compiler_static_GCJ='-Bstatic'
- ;;
-
- *)
- lt_prog_compiler_can_build_shared_GCJ=no
- ;;
- esac
- fi
-
-echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5
-echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic_GCJ"; then
-
-echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5
-echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6
-if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- lt_prog_compiler_pic_works_GCJ=no
- ac_outfile=conftest.$ac_objext
- printf "$lt_simple_compile_test_code" > conftest.$ac_ext
- lt_compiler_flag="$lt_prog_compiler_pic_GCJ"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- # The option is referenced via a variable to avoid confusing sed.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:17900: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&5
- echo "$as_me:17904: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s "$ac_outfile"; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $echo "X$_lt_compiler_boilerplate" | $Xsed >conftest.exp
- $SED '/^$/d' conftest.err >conftest.er2
- if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then
- lt_prog_compiler_pic_works_GCJ=yes
- fi
- fi
- $rm conftest*
-
-fi
-echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5
-echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6
-
-if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then
- case $lt_prog_compiler_pic_GCJ in
- "" | " "*) ;;
- *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;;
- esac
-else
- lt_prog_compiler_pic_GCJ=
- lt_prog_compiler_can_build_shared_GCJ=no
-fi
-
-fi
-case "$host_os" in
- # For platforms which do not support PIC, -DPIC is meaningless:
- *djgpp*)
- lt_prog_compiler_pic_GCJ=
- ;;
- *)
- lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ"
- ;;
-esac
-
-echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
-if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- lt_cv_prog_compiler_c_o_GCJ=no
- $rm -r conftest 2>/dev/null
- mkdir conftest
- cd conftest
- mkdir out
- printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- lt_compiler_flag="-o out/conftest2.$ac_objext"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:17962: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>out/conftest.err)
- ac_status=$?
- cat out/conftest.err >&5
- echo "$as_me:17966: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s out/conftest2.$ac_objext
- then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- $echo "X$_lt_compiler_boilerplate" | $Xsed > out/conftest.exp
- $SED '/^$/d' out/conftest.err >out/conftest.er2
- if test ! -s out/conftest.err || diff out/conftest.exp out/conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_c_o_GCJ=yes
- fi
- fi
- chmod u+w .
- $rm conftest*
- # SGI C++ compiler will create directory out/ii_files/ for
- # template instantiation
- test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
- $rm out/* && rmdir out
- cd ..
- rmdir conftest
- $rm conftest*
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5
-echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6
-
-
-hard_links="nottested"
-if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then
- # do not overwrite the value of need_locks provided by the user
- echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
- hard_links=yes
- $rm conftest*
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- touch conftest.a
- ln conftest.a conftest.b 2>&5 || hard_links=no
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- echo "$as_me:$LINENO: result: $hard_links" >&5
-echo "${ECHO_T}$hard_links" >&6
- if test "$hard_links" = no; then
- { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
- need_locks=warn
- fi
-else
- need_locks=no
-fi
-
-echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
-
- runpath_var=
- allow_undefined_flag_GCJ=
- enable_shared_with_static_runtimes_GCJ=no
- archive_cmds_GCJ=
- archive_expsym_cmds_GCJ=
- old_archive_From_new_cmds_GCJ=
- old_archive_from_expsyms_cmds_GCJ=
- export_dynamic_flag_spec_GCJ=
- whole_archive_flag_spec_GCJ=
- thread_safe_flag_spec_GCJ=
- hardcode_libdir_flag_spec_GCJ=
- hardcode_libdir_flag_spec_ld_GCJ=
- hardcode_libdir_separator_GCJ=
- hardcode_direct_GCJ=no
- hardcode_minus_L_GCJ=no
- hardcode_shlibpath_var_GCJ=unsupported
- link_all_deplibs_GCJ=unknown
- hardcode_automatic_GCJ=no
- module_cmds_GCJ=
- module_expsym_cmds_GCJ=
- always_export_symbols_GCJ=no
- export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- # include_expsyms should be a list of space-separated symbols to be *always*
- # included in the symbol list
- include_expsyms_GCJ=
- # exclude_expsyms can be an extended regexp of symbols to exclude
- # it will be wrapped by ` (' and `)$', so one must not match beginning or
- # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
- # as well as any symbol that contains `d'.
- exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_"
- # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
- # platforms (ab)use it in PIC code, but their linkers get confused if
- # the symbol is explicitly referenced. Since portable code cannot
- # rely on this symbol name, it's probably fine to never include it in
- # preloaded symbol tables.
- extract_expsyms_cmds=
- # Just being paranoid about ensuring that cc_basename is set.
- for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
- case $host_os in
- cygwin* | mingw* | pw32*)
- # FIXME: the MSVC++ port hasn't been tested in a loooong time
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- if test "$GCC" != yes; then
- with_gnu_ld=no
- fi
- ;;
- openbsd*)
- with_gnu_ld=no
- ;;
- esac
-
- ld_shlibs_GCJ=yes
- if test "$with_gnu_ld" = yes; then
- # If archive_cmds runs LD, not CC, wlarc should be empty
- wlarc='${wl}'
-
- # Set some defaults for GNU ld with shared library support. These
- # are reset later if shared libraries are not supported. Putting them
- # here allows them to be overridden if necessary.
- runpath_var=LD_RUN_PATH
- hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir'
- export_dynamic_flag_spec_GCJ='${wl}--export-dynamic'
- # ancient GNU ld didn't support --whole-archive et. al.
- if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
- whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- whole_archive_flag_spec_GCJ=
- fi
- supports_anon_versioning=no
- case `$LD -v 2>/dev/null` in
- *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
- *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
- *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
- *\ 2.11.*) ;; # other 2.11 versions
- *) supports_anon_versioning=yes ;;
- esac
-
- # See if GNU ld supports shared libraries.
- case $host_os in
- aix3* | aix4* | aix5*)
- # On AIX/PPC, the GNU linker is very broken
- if test "$host_cpu" != ia64; then
- ld_shlibs_GCJ=no
- cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support. If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-EOF
- fi
- ;;
-
- amigaos*)
- archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec_GCJ='-L$libdir'
- hardcode_minus_L_GCJ=yes
-
- # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
- # that the semantics of dynamic libraries on AmigaOS, at least up
- # to version 4, is to share data among multiple programs linked
- # with the same dynamic library. Since this doesn't match the
- # behavior of shared libraries on other platforms, we can't use
- # them.
- ld_shlibs_GCJ=no
- ;;
-
- beos*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- allow_undefined_flag_GCJ=unsupported
- # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
- # support --undefined. This deserves some investigation. FIXME
- archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- else
- ld_shlibs_GCJ=no
- fi
- ;;
-
- cygwin* | mingw* | pw32*)
- # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless,
- # as there is no search path for DLLs.
- hardcode_libdir_flag_spec_GCJ='-L$libdir'
- allow_undefined_flag_GCJ=unsupported
- always_export_symbols_GCJ=no
- enable_shared_with_static_runtimes_GCJ=yes
- export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
-
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
- archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
- cp $export_symbols $output_objdir/$soname.def;
- else
- echo EXPORTS > $output_objdir/$soname.def;
- cat $export_symbols >> $output_objdir/$soname.def;
- fi~
- $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
- else
- ld_shlibs_GCJ=no
- fi
- ;;
-
- linux*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- tmp_addflag=
- case $cc_basename,$host_cpu in
- pgcc*) # Portland Group C compiler
- whole_archive_flag_spec_GCJ='${wl}--whole-archive,`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag'
- ;;
- pgf77* | pgf90* ) # Portland Group f77 and f90 compilers
- whole_archive_flag_spec_GCJ='${wl}--whole-archive,`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag -Mnomain' ;;
- ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
- tmp_addflag=' -i_dynamic' ;;
- efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
- tmp_addflag=' -i_dynamic -nofor_main' ;;
- ifc* | ifort*) # Intel Fortran compiler
- tmp_addflag=' -nofor_main' ;;
- esac
- archive_cmds_GCJ='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
- if test $supports_anon_versioning = yes; then
- archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- $echo "local: *; };" >> $output_objdir/$libname.ver~
- $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
- fi
- else
- ld_shlibs_GCJ=no
- fi
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
- archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
- solaris* | sysv5*)
- if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
- ld_shlibs_GCJ=no
- cat <<EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-EOF
- elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs_GCJ=no
- fi
- ;;
-
- sunos4*)
- archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- wlarc=
- hardcode_direct_GCJ=yes
- hardcode_shlibpath_var_GCJ=no
- ;;
-
- *)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs_GCJ=no
- fi
- ;;
- esac
-
- if test "$ld_shlibs_GCJ" = no; then
- runpath_var=
- hardcode_libdir_flag_spec_GCJ=
- export_dynamic_flag_spec_GCJ=
- whole_archive_flag_spec_GCJ=
- fi
- else
- # PORTME fill in a description of your system's linker (not GNU ld)
- case $host_os in
- aix3*)
- allow_undefined_flag_GCJ=unsupported
- always_export_symbols_GCJ=yes
- archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
- # Note: this linker hardcodes the directories in LIBPATH if there
- # are no directories specified by -L.
- hardcode_minus_L_GCJ=yes
- if test "$GCC" = yes && test -z "$link_static_flag"; then
- # Neither direct hardcoding nor static linking is supported with a
- # broken collect2.
- hardcode_direct_GCJ=unsupported
- fi
- ;;
-
- aix4* | aix5*)
- if test "$host_cpu" = ia64; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- exp_sym_flag='-Bexport'
- no_entry_flag=""
- else
- # If we're using GNU nm, then we don't want the "-C" option.
- # -C means demangle to AIX nm, but means don't demangle with GNU nm
- if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
- export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
- else
- export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
- fi
- aix_use_runtimelinking=no
-
- # Test if we are trying to use run time linking or normal
- # AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
- case $host_os in aix4.[23]|aix4.[23].*|aix5*)
- for ld_flag in $LDFLAGS; do
- if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
- aix_use_runtimelinking=yes
- break
- fi
- done
- esac
-
- exp_sym_flag='-bexport'
- no_entry_flag='-bnoentry'
- fi
-
- # When large executables or shared objects are built, AIX ld can
- # have problems creating the table of contents. If linking a library
- # or program results in "error TOC overflow" add -mminimal-toc to
- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
- archive_cmds_GCJ=''
- hardcode_direct_GCJ=yes
- hardcode_libdir_separator_GCJ=':'
- link_all_deplibs_GCJ=yes
-
- if test "$GCC" = yes; then
- case $host_os in aix4.[012]|aix4.[012].*)
- # We only want to do this on AIX 4.2 and lower, the check
- # below for broken collect2 doesn't work under 4.3+
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" && \
- strings "$collect2name" | grep resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- hardcode_direct_GCJ=yes
- else
- # We have old collect2
- hardcode_direct_GCJ=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- hardcode_minus_L_GCJ=yes
- hardcode_libdir_flag_spec_GCJ='-L$libdir'
- hardcode_libdir_separator_GCJ=
- fi
- esac
- shared_flag='-shared'
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag="$shared_flag "'${wl}-G'
- fi
- else
- # not using gcc
- if test "$host_cpu" = ia64; then
- # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
- # chokes on -Wl,-G. The following line is correct:
- shared_flag='-G'
- else
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag='${wl}-G'
- else
- shared_flag='${wl}-bM:SRE'
- fi
- fi
- fi
-
- # It seems that -bexpall does not export symbols beginning with
- # underscore (_), so it is better to generate a list of symbols to export.
- always_export_symbols_GCJ=yes
- if test "$aix_use_runtimelinking" = yes; then
- # Warning - without using the other runtime loading flags (-brtl),
- # -berok will link without error, but may produce a broken library.
- allow_undefined_flag_GCJ='-berok'
- # Determine the default libpath from the value encoded in an empty executable.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-}'`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-}'`; fi
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
- archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
- else
- if test "$host_cpu" = ia64; then
- hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib'
- allow_undefined_flag_GCJ="-z nodefs"
- archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
- else
- # Determine the default libpath from the value encoded in an empty executable.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-}'`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-}'`; fi
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
- # -berok will link without error, but may produce a broken library.
- no_undefined_flag_GCJ=' ${wl}-bernotok'
- allow_undefined_flag_GCJ=' ${wl}-berok'
- # -bexpall does not export symbols beginning with underscore (_)
- always_export_symbols_GCJ=yes
- # Exported symbols can be pulled into shared objects from archives
- whole_archive_flag_spec_GCJ=' '
- archive_cmds_need_lc_GCJ=yes
- # This is similar to how AIX traditionally builds it's shared libraries.
- archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
- fi
- fi
- ;;
-
- amigaos*)
- archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec_GCJ='-L$libdir'
- hardcode_minus_L_GCJ=yes
- # see comment about different semantics on the GNU ld section
- ld_shlibs_GCJ=no
- ;;
-
- bsdi[45]*)
- export_dynamic_flag_spec_GCJ=-rdynamic
- ;;
-
- cygwin* | mingw* | pw32*)
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- hardcode_libdir_flag_spec_GCJ=' '
- allow_undefined_flag_GCJ=unsupported
- # Tell ltmain to make .lib files, not .a files.
- libext=lib
- # Tell ltmain to make .dll files, not .so files.
- shrext_cmds=".dll"
- # FIXME: Setting linknames here is a bad hack.
- archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
- # The linker will automatically build a .lib file if we build a DLL.
- old_archive_From_new_cmds_GCJ='true'
- # FIXME: Should let the user specify the lib program.
- old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs'
- fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`'
- enable_shared_with_static_runtimes_GCJ=yes
- ;;
-
- darwin* | rhapsody*)
- case "$host_os" in
- rhapsody* | darwin1.[012])
- allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress'
- ;;
- *) # Darwin 1.3 on
- if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
- allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
- else
- case ${MACOSX_DEPLOYMENT_TARGET} in
- 10.[012])
- allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
- ;;
- 10.*)
- allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup'
- ;;
- esac
- fi
- ;;
- esac
- archive_cmds_need_lc_GCJ=no
- hardcode_direct_GCJ=no
- hardcode_automatic_GCJ=yes
- hardcode_shlibpath_var_GCJ=unsupported
- whole_archive_flag_spec_GCJ=''
- link_all_deplibs_GCJ=yes
- if test "$GCC" = yes ; then
-# echo "G77=$G77,compiler=$compiler,tagname=$tagname"
- if test "$tagname" = "F77"; then
-archive_cmds_GCJ='$CC -dynamiclib -single_module -nostdlib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
- else
-archive_cmds_GCJ='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
- fi
- output_verbose_link_cmd='echo'
- module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
- archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- else
- case $cc_basename in
- xlc*)
- output_verbose_link_cmd='echo'
- archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
- module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
- archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- ;;
- *)
- ld_shlibs_GCJ=no
- ;;
- esac
- fi
- ;;
-
- dgux*)
- archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec_GCJ='-L$libdir'
- hardcode_shlibpath_var_GCJ=no
- ;;
-
- freebsd1*)
- ld_shlibs_GCJ=no
- ;;
-
- # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
- # support. Future versions do this automatically, but an explicit c++rt0.o
- # does not break anything, and helps significantly (at the cost of a little
- # extra space).
- freebsd2.2*)
- archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
- hardcode_libdir_flag_spec_GCJ='-R$libdir'
- hardcode_direct_GCJ=yes
- hardcode_shlibpath_var_GCJ=no
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
- freebsd2*)
- archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct_GCJ=yes
- hardcode_minus_L_GCJ=yes
- hardcode_shlibpath_var_GCJ=no
- ;;
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | kfreebsd*-gnu | dragonfly*)
- archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec_GCJ='-R$libdir'
- hardcode_direct_GCJ=yes
- hardcode_shlibpath_var_GCJ=no
- ;;
-
- hpux9*)
- if test "$GCC" = yes; then
- archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- fi
- hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator_GCJ=:
- hardcode_direct_GCJ=yes
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L_GCJ=yes
- export_dynamic_flag_spec_GCJ='${wl}-E'
- ;;
-
- hpux10* | hpux11*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- case "$host_cpu" in
- hppa*64*|ia64*)
- archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- else
- case "$host_cpu" in
- hppa*64*|ia64*)
- archive_cmds_GCJ='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
- ;;
- *)
- archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- ;;
- esac
- fi
- if test "$with_gnu_ld" = no; then
- case "$host_cpu" in
- hppa*64*)
- hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
- hardcode_libdir_flag_spec_ld_GCJ='+b $libdir'
- hardcode_libdir_separator_GCJ=:
- hardcode_direct_GCJ=no
- hardcode_shlibpath_var_GCJ=no
- ;;
- ia64*)
- hardcode_libdir_flag_spec_GCJ='-L$libdir'
- hardcode_direct_GCJ=no
- hardcode_shlibpath_var_GCJ=no
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L_GCJ=yes
- ;;
- *)
- hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator_GCJ=:
- hardcode_direct_GCJ=yes
- export_dynamic_flag_spec_GCJ='${wl}-E'
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L_GCJ=yes
- ;;
- esac
- fi
- ;;
-
- irix5* | irix6* | nonstopux*)
- if test "$GCC" = yes; then
- archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir'
- fi
- hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator_GCJ=:
- link_all_deplibs_GCJ=yes
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
- else
- archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
- fi
- hardcode_libdir_flag_spec_GCJ='-R$libdir'
- hardcode_direct_GCJ=yes
- hardcode_shlibpath_var_GCJ=no
- ;;
-
- newsos6)
- archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct_GCJ=yes
- hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator_GCJ=:
- hardcode_shlibpath_var_GCJ=no
- ;;
-
- openbsd*)
- hardcode_direct_GCJ=yes
- hardcode_shlibpath_var_GCJ=no
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
- hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
- export_dynamic_flag_spec_GCJ='${wl}-E'
- else
- case $host_os in
- openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
- archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec_GCJ='-R$libdir'
- ;;
- *)
- archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
- ;;
- esac
- fi
- ;;
-
- os2*)
- hardcode_libdir_flag_spec_GCJ='-L$libdir'
- hardcode_minus_L_GCJ=yes
- allow_undefined_flag_GCJ=unsupported
- archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
- old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
- ;;
-
- osf3*)
- if test "$GCC" = yes; then
- allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- allow_undefined_flag_GCJ=' -expect_unresolved \*'
- archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- fi
- hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator_GCJ=:
- ;;
-
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test "$GCC" = yes; then
- allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
- else
- allow_undefined_flag_GCJ=' -expect_unresolved \*'
- archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
- $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
-
- # Both c and cxx compiler support -rpath directly
- hardcode_libdir_flag_spec_GCJ='-rpath $libdir'
- fi
- hardcode_libdir_separator_GCJ=:
- ;;
-
- sco3.2v5*)
- archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var_GCJ=no
- export_dynamic_flag_spec_GCJ='${wl}-Bexport'
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- ;;
-
- solaris*)
- no_undefined_flag_GCJ=' -z text'
- if test "$GCC" = yes; then
- wlarc='${wl}'
- archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
- else
- wlarc=''
- archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
- archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
- fi
- hardcode_libdir_flag_spec_GCJ='-R$libdir'
- hardcode_shlibpath_var_GCJ=no
- case $host_os in
- solaris2.[0-5] | solaris2.[0-5].*) ;;
- *)
- # The compiler driver will combine linker options so we
- # cannot just pass the convience library names through
- # without $wl, iff we do not link with $LD.
- # Luckily, gcc supports the same syntax we need for Sun Studio.
- # Supported since Solaris 2.6 (maybe 2.5.1?)
- case $wlarc in
- '')
- whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;;
- *)
- whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
- esac ;;
- esac
- link_all_deplibs_GCJ=yes
- ;;
-
- sunos4*)
- if test "x$host_vendor" = xsequent; then
- # Use $CC to link under sequent, because it throws in some extra .o
- # files that make .init and .fini sections work.
- archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
- fi
- hardcode_libdir_flag_spec_GCJ='-L$libdir'
- hardcode_direct_GCJ=yes
- hardcode_minus_L_GCJ=yes
- hardcode_shlibpath_var_GCJ=no
- ;;
-
- sysv4)
- case $host_vendor in
- sni)
- archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct_GCJ=yes # is this really true???
- ;;
- siemens)
- ## LD is ld it makes a PLAMLIB
- ## CC just makes a GrossModule.
- archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags'
- reload_cmds_GCJ='$CC -r -o $output$reload_objs'
- hardcode_direct_GCJ=no
- ;;
- motorola)
- archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie
- ;;
- esac
- runpath_var='LD_RUN_PATH'
- hardcode_shlibpath_var_GCJ=no
- ;;
-
- sysv4.3*)
- archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var_GCJ=no
- export_dynamic_flag_spec_GCJ='-Bexport'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var_GCJ=no
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- ld_shlibs_GCJ=yes
- fi
- ;;
-
- sysv4.2uw2*)
- archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct_GCJ=yes
- hardcode_minus_L_GCJ=no
- hardcode_shlibpath_var_GCJ=no
- hardcode_runpath_var=yes
- runpath_var=LD_RUN_PATH
- ;;
-
- sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
- no_undefined_flag_GCJ='${wl}-z ${wl}text'
- if test "$GCC" = yes; then
- archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds_GCJ='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- runpath_var='LD_RUN_PATH'
- hardcode_shlibpath_var_GCJ=no
- ;;
-
- sysv5*)
- no_undefined_flag_GCJ=' -z text'
- # $CC -shared without GNU ld will not create a library from C++
- # object files and a static libstdc++, better avoid it by now
- archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
- archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
- hardcode_libdir_flag_spec_GCJ=
- hardcode_shlibpath_var_GCJ=no
- runpath_var='LD_RUN_PATH'
- ;;
-
- uts4*)
- archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec_GCJ='-L$libdir'
- hardcode_shlibpath_var_GCJ=no
- ;;
-
- *)
- ld_shlibs_GCJ=no
- ;;
- esac
- fi
-
-echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5
-echo "${ECHO_T}$ld_shlibs_GCJ" >&6
-test "$ld_shlibs_GCJ" = no && can_build_shared=no
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
- variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$archive_cmds_need_lc_GCJ" in
-x|xyes)
- # Assume -lc should be added
- archive_cmds_need_lc_GCJ=yes
-
- if test "$enable_shared" = yes && test "$GCC" = yes; then
- case $archive_cmds_GCJ in
- *'~'*)
- # FIXME: we may have to deal with multi-command sequences.
- ;;
- '$CC '*)
- # Test whether the compiler implicitly links with -lc since on some
- # systems, -lgcc has to come before -lc. If gcc already passes -lc
- # to ld, don't add -lc before -lgcc.
- echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
- $rm conftest*
- printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } 2>conftest.err; then
- soname=conftest
- lib=conftest
- libobjs=conftest.$ac_objext
- deplibs=
- wl=$lt_prog_compiler_wl_GCJ
- compiler_flags=-v
- linker_flags=-v
- verstring=
- output_objdir=.
- libname=conftest
- lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ
- allow_undefined_flag_GCJ=
- if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
- (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
- then
- archive_cmds_need_lc_GCJ=no
- else
- archive_cmds_need_lc_GCJ=yes
- fi
- allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag
- else
- cat conftest.err 1>&5
- fi
- $rm conftest*
- echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5
-echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6
- ;;
- esac
- fi
- ;;
-esac
-
-echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-if test "$GCC" = yes; then
- sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
- # if the path contains ";" then we assume it to be the separator
- # otherwise default to the standard path separator (i.e. ":") - it is
- # assumed that no part of a normal pathname contains ";" but that should
- # okay in the real world where ";" in dirpaths is itself problematic.
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
- else
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
-else
- sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
- shlibpath_var=LIBPATH
-
- # AIX 3 has no versioning support, so we append a major version to the name.
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
-
-aix4* | aix5*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- hardcode_into_libs=yes
- if test "$host_cpu" = ia64; then
- # AIX 5 supports IA64
- library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- else
- # With GCC up to 2.95.x, collect2 would create an import file
- # for dependence libraries. The import file would start with
- # the line `#! .'. This would cause the generated library to
- # depend on `.', always an invalid library. This was fixed in
- # development snapshots of GCC prior to 3.0.
- case $host_os in
- aix4 | aix4.[01] | aix4.[01].*)
- if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
- echo ' yes '
- echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
- :
- else
- can_build_shared=no
- fi
- ;;
- esac
- # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
- # soname into executable. Probably we can add versioning support to
- # collect2, so additional links can be useful in future.
- if test "$aix_use_runtimelinking" = yes; then
- # If using run time linking (on AIX 4.2 or later) use lib<name>.so
- # instead of lib<name>.a to let people know that these are not
- # typical AIX shared libraries.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- else
- # We preserve .a as extension for shared libraries through AIX4.2
- # and later when we are not doing run time linking.
- library_names_spec='${libname}${release}.a $libname.a'
- soname_spec='${libname}${release}${shared_ext}$major'
- fi
- shlibpath_var=LIBPATH
- fi
- ;;
-
-amigaos*)
- library_names_spec='$libname.ixlibrary $libname.a'
- # Create ${libname}_ixlibrary.a entries in /sys/libs.
- finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
- ;;
-
-beos*)
- library_names_spec='${libname}${shared_ext}'
- dynamic_linker="$host_os ld.so"
- shlibpath_var=LIBRARY_PATH
- ;;
-
-bsdi[45]*)
- version_type=linux
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
- sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
- # the default ld.so.conf also contains /usr/contrib/lib and
- # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
- # libtool to hard-code these into programs
- ;;
-
-cygwin* | mingw* | pw32*)
- version_type=windows
- shrext_cmds=".dll"
- need_version=no
- need_lib_prefix=no
-
- case $GCC,$host_os in
- yes,cygwin* | yes,mingw* | yes,pw32*)
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \${file}`~
- dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
- dldir=$destdir/`dirname \$dlpath`~
- test -d \$dldir || mkdir -p \$dldir~
- $install_prog $dir/$dlname \$dldir/$dlname'
- postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
- dlpath=$dir/\$dldll~
- $rm \$dlpath'
- shlibpath_overrides_runpath=yes
-
- case $host_os in
- cygwin*)
- # Cygwin DLLs use 'cyg' prefix rather than 'lib'
- soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
- ;;
- mingw*)
- # MinGW DLLs use traditional 'lib' prefix
- soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
- # It is most probably a Windows format PATH printed by
- # mingw gcc, but we are running on Cygwin. Gcc prints its search
- # path with ; separators, and with drive letters. We can handle the
- # drive letters (cygwin fileutils understands them), so leave them,
- # especially as we might pass files found there to a mingw objdump,
- # which wouldn't understand a cygwinified path. Ahh.
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
- else
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
- ;;
- pw32*)
- # pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- ;;
- esac
- ;;
-
- *)
- library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
- ;;
- esac
- dynamic_linker='Win32 ld.exe'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-
-darwin* | rhapsody*)
- dynamic_linker="$host_os dyld"
- version_type=darwin
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
- soname_spec='${libname}${release}${major}$shared_ext'
- shlibpath_overrides_runpath=yes
- shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
- # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
- if test "$GCC" = yes; then
- sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
- else
- sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
- fi
- sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
- ;;
-
-dgux*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-freebsd1*)
- dynamic_linker=no
- ;;
-
-kfreebsd*-gnu)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- dynamic_linker='GNU ld.so'
- ;;
-
-freebsd* | dragonfly*)
- # DragonFly does not have aout. When/if they implement a new
- # versioning mechanism, adjust this.
- objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
- version_type=freebsd-$objformat
- case $version_type in
- freebsd-elf*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- need_version=no
- need_lib_prefix=no
- ;;
- freebsd-*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
- need_version=yes
- ;;
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
- freebsd2*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- *) # from 3.2 on
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
- esac
- ;;
-
-gnu*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- ;;
-
-hpux9* | hpux10* | hpux11*)
- # Give a soname corresponding to the major version so that dld.sl refuses to
- # link against other versions.
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- case "$host_cpu" in
- ia64*)
- shrext_cmds='.so'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.so"
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- if test "X$HPUX_IA64_MODE" = X32; then
- sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
- else
- sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
- fi
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- hppa*64*)
- shrext_cmds='.sl'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- *)
- shrext_cmds='.sl'
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=SHLIB_PATH
- shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
- esac
- # HP-UX runs *really* slowly unless shared libraries are mode 555.
- postinstall_cmds='chmod 555 $lib'
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $host_os in
- nonstopux*) version_type=nonstopux ;;
- *)
- if test "$lt_cv_prog_gnu_ld" = yes; then
- version_type=linux
- else
- version_type=irix
- fi ;;
- esac
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
- case $host_os in
- irix5* | nonstopux*)
- libsuff= shlibsuff=
- ;;
- *)
- case $LD in # libtool.m4 will add one of these switches to LD
- *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
- libsuff= shlibsuff= libmagic=32-bit;;
- *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
- libsuff=32 shlibsuff=N32 libmagic=N32;;
- *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
- libsuff=64 shlibsuff=64 libmagic=64-bit;;
- *) libsuff= shlibsuff= libmagic=never-match;;
- esac
- ;;
- esac
- shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
- sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
- hardcode_into_libs=yes
- ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
- dynamic_linker=no
- ;;
-
-# This must be Linux ELF.
-linux*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- # This implies no fast_install, which is unacceptable.
- # Some rework will be needed to allow for fast_install
- # before this can be enabled.
- hardcode_into_libs=yes
-
- # Append ld.so.conf contents to the search path
- if test -f /etc/ld.so.conf; then
- lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
- fi
-
- # We used to test for /lib/ld.so.1 and disable shared libraries on
- # powerpc, because MkLinux only supported shared libraries with the
- # GNU dynamic linker. Since this was broken with cross compilers,
- # most powerpc-linux boxes support dynamic linking these days and
- # people can always --disable-shared, the test was removed, and we
- # assume the GNU/Linux dynamic linker is in use.
- dynamic_linker='GNU/Linux ld.so'
- ;;
-
-knetbsd*-gnu)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- dynamic_linker='GNU ld.so'
- ;;
-
-netbsd*)
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- dynamic_linker='NetBSD (a.out) ld.so'
- else
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='NetBSD ld.elf_so'
- fi
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
-
-newsos6)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-nto-qnx*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-openbsd*)
- version_type=sunos
- need_lib_prefix=no
- # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
- case $host_os in
- openbsd3.3 | openbsd3.3.*) need_version=yes ;;
- *) need_version=no ;;
- esac
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- case $host_os in
- openbsd2.[89] | openbsd2.[89].*)
- shlibpath_overrides_runpath=no
- ;;
- *)
- shlibpath_overrides_runpath=yes
- ;;
- esac
- else
- shlibpath_overrides_runpath=yes
- fi
- ;;
-
-os2*)
- libname_spec='$name'
- shrext_cmds=".dll"
- need_lib_prefix=no
- library_names_spec='$libname${shared_ext} $libname.a'
- dynamic_linker='OS/2 ld.exe'
- shlibpath_var=LIBPATH
- ;;
-
-osf3* | osf4* | osf5*)
- version_type=osf
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
- sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
- ;;
-
-sco3.2v5*)
- version_type=osf
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-solaris*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- # ldd complains unless libraries are executable
- postinstall_cmds='chmod +x $lib'
- ;;
-
-sunos4*)
- version_type=sunos
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- if test "$with_gnu_ld" = yes; then
- need_lib_prefix=no
- fi
- need_version=yes
- ;;
-
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- case $host_vendor in
- sni)
- shlibpath_overrides_runpath=no
- need_lib_prefix=no
- export_dynamic_flag_spec='${wl}-Blargedynsym'
- runpath_var=LD_RUN_PATH
- ;;
- siemens)
- need_lib_prefix=no
- ;;
- motorola)
- need_lib_prefix=no
- need_version=no
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
- ;;
- esac
- ;;
-
-sysv4*MP*)
- if test -d /usr/nec ;then
- version_type=linux
- library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
- soname_spec='$libname${shared_ext}.$major'
- shlibpath_var=LD_LIBRARY_PATH
- fi
- ;;
-
-uts4*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-*)
- dynamic_linker=no
- ;;
-esac
-echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-echo "${ECHO_T}$dynamic_linker" >&6
-test "$dynamic_linker" = no && can_build_shared=no
-
-echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
-hardcode_action_GCJ=
-if test -n "$hardcode_libdir_flag_spec_GCJ" || \
- test -n "$runpath_var_GCJ" || \
- test "X$hardcode_automatic_GCJ" = "Xyes" ; then
-
- # We can hardcode non-existant directories.
- if test "$hardcode_direct_GCJ" != no &&
- # If the only mechanism to avoid hardcoding is shlibpath_var, we
- # have to relink, otherwise we might link with an installed library
- # when we should be linking with a yet-to-be-installed one
- ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no &&
- test "$hardcode_minus_L_GCJ" != no; then
- # Linking always hardcodes the temporary library directory.
- hardcode_action_GCJ=relink
- else
- # We can link without hardcoding, and we can hardcode nonexisting dirs.
- hardcode_action_GCJ=immediate
- fi
-else
- # We cannot hardcode anything, or else we can only hardcode existing
- # directories.
- hardcode_action_GCJ=unsupported
-fi
-echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5
-echo "${ECHO_T}$hardcode_action_GCJ" >&6
-
-if test "$hardcode_action_GCJ" = relink; then
- # Fast installation is not supported
- enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
- test "$enable_shared" = no; then
- # Fast installation is not necessary
- enable_fast_install=needless
-fi
-
-striplib=
-old_striplib=
-echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
-echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
-if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
- test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
- test -z "$striplib" && striplib="$STRIP --strip-unneeded"
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
-# FIXME - insert some real tests, host_os isn't really good enough
- case $host_os in
- darwin*)
- if test -n "$STRIP" ; then
- striplib="$STRIP -x"
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
- else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
- ;;
- *)
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- ;;
- esac
-fi
-
-if test "x$enable_dlopen" != xyes; then
- enable_dlopen=unknown
- enable_dlopen_self=unknown
- enable_dlopen_self_static=unknown
-else
- lt_cv_dlopen=no
- lt_cv_dlopen_libs=
-
- case $host_os in
- beos*)
- lt_cv_dlopen="load_add_on"
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
- ;;
-
- mingw* | pw32*)
- lt_cv_dlopen="LoadLibrary"
- lt_cv_dlopen_libs=
- ;;
-
- cygwin*)
- lt_cv_dlopen="dlopen"
- lt_cv_dlopen_libs=
- ;;
-
- darwin*)
- # if libdl is installed we need to link against it
- echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
-echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char dlopen ();
-int
-main ()
-{
-dlopen ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_dl_dlopen=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dl_dlopen=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
-echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
-if test $ac_cv_lib_dl_dlopen = yes; then
- lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
-
- lt_cv_dlopen="dyld"
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
-
-fi
-
- ;;
-
- *)
- echo "$as_me:$LINENO: checking for shl_load" >&5
-echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
-if test "${ac_cv_func_shl_load+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define shl_load innocuous_shl_load
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char shl_load (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef shl_load
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char shl_load ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_shl_load) || defined (__stub___shl_load)
-choke me
-#else
-char (*f) () = shl_load;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != shl_load;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_shl_load=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_shl_load=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
-echo "${ECHO_T}$ac_cv_func_shl_load" >&6
-if test $ac_cv_func_shl_load = yes; then
- lt_cv_dlopen="shl_load"
-else
- echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
-echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
-if test "${ac_cv_lib_dld_shl_load+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char shl_load ();
-int
-main ()
-{
-shl_load ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_dld_shl_load=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dld_shl_load=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
-echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
-if test $ac_cv_lib_dld_shl_load = yes; then
- lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
-else
- echo "$as_me:$LINENO: checking for dlopen" >&5
-echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
-if test "${ac_cv_func_dlopen+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define dlopen innocuous_dlopen
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char dlopen (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef dlopen
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char dlopen ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_dlopen) || defined (__stub___dlopen)
-choke me
-#else
-char (*f) () = dlopen;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != dlopen;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_dlopen=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_dlopen=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
-echo "${ECHO_T}$ac_cv_func_dlopen" >&6
-if test $ac_cv_func_dlopen = yes; then
- lt_cv_dlopen="dlopen"
-else
- echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
-echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char dlopen ();
-int
-main ()
-{
-dlopen ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_dl_dlopen=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dl_dlopen=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
-echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
-if test $ac_cv_lib_dl_dlopen = yes; then
- lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
- echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
-echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
-if test "${ac_cv_lib_svld_dlopen+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsvld $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char dlopen ();
-int
-main ()
-{
-dlopen ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_svld_dlopen=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_svld_dlopen=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
-echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
-if test $ac_cv_lib_svld_dlopen = yes; then
- lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
-else
- echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
-echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
-if test "${ac_cv_lib_dld_dld_link+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char dld_link ();
-int
-main ()
-{
-dld_link ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_dld_dld_link=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dld_dld_link=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
-echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
-if test $ac_cv_lib_dld_dld_link = yes; then
- lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
- ;;
- esac
-
- if test "x$lt_cv_dlopen" != xno; then
- enable_dlopen=yes
- else
- enable_dlopen=no
- fi
-
- case $lt_cv_dlopen in
- dlopen)
- save_CPPFLAGS="$CPPFLAGS"
- test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-
- save_LDFLAGS="$LDFLAGS"
- eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
- save_LIBS="$LIBS"
- LIBS="$lt_cv_dlopen_libs $LIBS"
-
- echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
-echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
-if test "${lt_cv_dlopen_self+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$cross_compiling" = yes; then :
- lt_cv_dlopen_self=cross
-else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<EOF
-#line 20207 "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LT_DLGLOBAL RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-# define LT_DLGLOBAL DL_GLOBAL
-# else
-# define LT_DLGLOBAL 0
-# endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
- find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-# ifdef RTLD_LAZY
-# define LT_DLLAZY_OR_NOW RTLD_LAZY
-# else
-# ifdef DL_LAZY
-# define LT_DLLAZY_OR_NOW DL_LAZY
-# else
-# ifdef RTLD_NOW
-# define LT_DLLAZY_OR_NOW RTLD_NOW
-# else
-# ifdef DL_NOW
-# define LT_DLLAZY_OR_NOW DL_NOW
-# else
-# define LT_DLLAZY_OR_NOW 0
-# endif
-# endif
-# endif
-# endif
-#endif
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
- int status = $lt_dlunknown;
-
- if (self)
- {
- if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
- else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
- /* dlclose (self); */
- }
-
- exit (status);
-}
-EOF
- if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
- (./conftest; exit; ) 2>/dev/null
- lt_status=$?
- case x$lt_status in
- x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
- x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
- x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
- esac
- else :
- # compilation failed
- lt_cv_dlopen_self=no
- fi
-fi
-rm -fr conftest*
-
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
-echo "${ECHO_T}$lt_cv_dlopen_self" >&6
-
- if test "x$lt_cv_dlopen_self" = xyes; then
- LDFLAGS="$LDFLAGS $link_static_flag"
- echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
-echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
-if test "${lt_cv_dlopen_self_static+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$cross_compiling" = yes; then :
- lt_cv_dlopen_self_static=cross
-else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<EOF
-#line 20305 "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LT_DLGLOBAL RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-# define LT_DLGLOBAL DL_GLOBAL
-# else
-# define LT_DLGLOBAL 0
-# endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
- find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-# ifdef RTLD_LAZY
-# define LT_DLLAZY_OR_NOW RTLD_LAZY
-# else
-# ifdef DL_LAZY
-# define LT_DLLAZY_OR_NOW DL_LAZY
-# else
-# ifdef RTLD_NOW
-# define LT_DLLAZY_OR_NOW RTLD_NOW
-# else
-# ifdef DL_NOW
-# define LT_DLLAZY_OR_NOW DL_NOW
-# else
-# define LT_DLLAZY_OR_NOW 0
-# endif
-# endif
-# endif
-# endif
-#endif
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
- int status = $lt_dlunknown;
-
- if (self)
- {
- if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
- else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
- /* dlclose (self); */
- }
-
- exit (status);
-}
-EOF
- if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
- (./conftest; exit; ) 2>/dev/null
- lt_status=$?
- case x$lt_status in
- x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
- x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
- x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
- esac
- else :
- # compilation failed
- lt_cv_dlopen_self_static=no
- fi
-fi
-rm -fr conftest*
-
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
-echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
- fi
-
- CPPFLAGS="$save_CPPFLAGS"
- LDFLAGS="$save_LDFLAGS"
- LIBS="$save_LIBS"
- ;;
- esac
-
- case $lt_cv_dlopen_self in
- yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
- *) enable_dlopen_self=unknown ;;
- esac
-
- case $lt_cv_dlopen_self_static in
- yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
- *) enable_dlopen_self_static=unknown ;;
- esac
-fi
-
-
-# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
- # See if we are running on zsh, and set the options which allow our commands through
- # without removal of \ escapes.
- if test -n "${ZSH_VERSION+set}" ; then
- setopt NO_GLOB_SUBST
- fi
- # Now quote all the things that may contain metacharacters while being
- # careful not to overquote the AC_SUBSTed values. We take copies of the
- # variables and quote the copies for generation of the libtool script.
- for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
- SED SHELL STRIP \
- libname_spec library_names_spec soname_spec extract_expsyms_cmds \
- old_striplib striplib file_magic_cmd finish_cmds finish_eval \
- deplibs_check_method reload_flag reload_cmds need_locks \
- lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
- lt_cv_sys_global_symbol_to_c_name_address \
- sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
- old_postinstall_cmds old_postuninstall_cmds \
- compiler_GCJ \
- CC_GCJ \
- LD_GCJ \
- lt_prog_compiler_wl_GCJ \
- lt_prog_compiler_pic_GCJ \
- lt_prog_compiler_static_GCJ \
- lt_prog_compiler_no_builtin_flag_GCJ \
- export_dynamic_flag_spec_GCJ \
- thread_safe_flag_spec_GCJ \
- whole_archive_flag_spec_GCJ \
- enable_shared_with_static_runtimes_GCJ \
- old_archive_cmds_GCJ \
- old_archive_from_new_cmds_GCJ \
- predep_objects_GCJ \
- postdep_objects_GCJ \
- predeps_GCJ \
- postdeps_GCJ \
- compiler_lib_search_path_GCJ \
- archive_cmds_GCJ \
- archive_expsym_cmds_GCJ \
- postinstall_cmds_GCJ \
- postuninstall_cmds_GCJ \
- old_archive_from_expsyms_cmds_GCJ \
- allow_undefined_flag_GCJ \
- no_undefined_flag_GCJ \
- export_symbols_cmds_GCJ \
- hardcode_libdir_flag_spec_GCJ \
- hardcode_libdir_flag_spec_ld_GCJ \
- hardcode_libdir_separator_GCJ \
- hardcode_automatic_GCJ \
- module_cmds_GCJ \
- module_expsym_cmds_GCJ \
- lt_cv_prog_compiler_c_o_GCJ \
- exclude_expsyms_GCJ \
- include_expsyms_GCJ; do
-
- case $var in
- old_archive_cmds_GCJ | \
- old_archive_from_new_cmds_GCJ | \
- archive_cmds_GCJ | \
- archive_expsym_cmds_GCJ | \
- module_cmds_GCJ | \
- module_expsym_cmds_GCJ | \
- old_archive_from_expsyms_cmds_GCJ | \
- export_symbols_cmds_GCJ | \
- extract_expsyms_cmds | reload_cmds | finish_cmds | \
- postinstall_cmds | postuninstall_cmds | \
- old_postinstall_cmds | old_postuninstall_cmds | \
- sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
- # Double-quote double-evaled strings.
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
- ;;
- *)
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
- ;;
- esac
- done
-
- case $lt_echo in
- *'\$0 --fallback-echo"')
- lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
- ;;
- esac
-
-cfgfile="$ofile"
-
- cat <<__EOF__ >> "$cfgfile"
-# ### BEGIN LIBTOOL TAG CONFIG: $tagname
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$archive_cmds_need_lc_GCJ
-
-# Whether or not to disallow shared libs when runtime libs are static
-allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-host_os=$host_os
-
-# The build system.
-build_alias=$build_alias
-build=$build
-build_os=$build_os
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# A language-specific compiler.
-CC=$lt_compiler_GCJ
-
-# Is the compiler the GNU C compiler?
-with_gcc=$GCC_GCJ
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_LD_GCJ
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_GCJ
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic_GCJ
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# Do we need the lib prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Whether dlopen is supported.
-dlopen_support=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static_GCJ
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ
-
-# Library versioning type.
-version_type=$version_type
-
-# Format of library name prefix.
-libname_spec=$lt_libname_spec
-
-# List of archive names. First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME.
-library_names_spec=$lt_library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$lt_soname_spec
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_old_archive_cmds_GCJ
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ
-
-# Commands used to build and install a shared archive.
-archive_cmds=$lt_archive_cmds_GCJ
-archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_module_cmds_GCJ
-module_expsym_cmds=$lt_module_expsym_cmds_GCJ
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_predep_objects_GCJ
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_postdep_objects_GCJ
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_predeps_GCJ
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$lt_postdeps_GCJ
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$lt_deplibs_check_method
-
-# Command to use when deplibs_check_method == file_magic.
-file_magic_cmd=$lt_file_magic_cmd
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag_GCJ
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag_GCJ
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration
-global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-
-# Transform the output of nm in a C name address pair
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action_GCJ
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ
-
-# If ld is used when linking, flag to hardcode \$libdir into
-# a binary during linking. This must work even if \$libdir does
-# not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ
-
-# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$hardcode_direct_GCJ
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$hardcode_minus_L_GCJ
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ
-
-# Set to yes if building a shared library automatically hardcodes DIR into the library
-# and all subsequent libraries and executables linked against it.
-hardcode_automatic=$hardcode_automatic_GCJ
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs_GCJ
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path="$fix_srcfile_path_GCJ"
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$always_export_symbols_GCJ
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds_GCJ
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms_GCJ
-
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms_GCJ
-
-# ### END LIBTOOL TAG CONFIG: $tagname
-
-__EOF__
-
-
-else
- # If there is no Makefile yet, we rely on a make rule to execute
- # `config.status --recheck' to rerun these tests and create the
- # libtool script then.
- ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
- if test -f "$ltmain_in"; then
- test -f Makefile && make "$ltmain"
- fi
-fi
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-CC="$lt_save_CC"
-
- else
- tagname=""
- fi
- ;;
-
- RC)
-
-
-
-# Source file extension for RC test sources.
-ac_ext=rc
-
-# Object file extension for compiled RC test sources.
-objext=o
-objext_RC=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
-
-# Code to be used in simple link tests
-lt_simple_link_test_code="$lt_simple_compile_test_code"
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-printf "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$rm conftest*
-
-ac_outfile=conftest.$ac_objext
-printf "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$rm conftest*
-
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-CC=${RC-"windres"}
-compiler=$CC
-compiler_RC=$CC
-for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-lt_cv_prog_compiler_c_o_RC=yes
-
-# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
- # See if we are running on zsh, and set the options which allow our commands through
- # without removal of \ escapes.
- if test -n "${ZSH_VERSION+set}" ; then
- setopt NO_GLOB_SUBST
- fi
- # Now quote all the things that may contain metacharacters while being
- # careful not to overquote the AC_SUBSTed values. We take copies of the
- # variables and quote the copies for generation of the libtool script.
- for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
- SED SHELL STRIP \
- libname_spec library_names_spec soname_spec extract_expsyms_cmds \
- old_striplib striplib file_magic_cmd finish_cmds finish_eval \
- deplibs_check_method reload_flag reload_cmds need_locks \
- lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
- lt_cv_sys_global_symbol_to_c_name_address \
- sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
- old_postinstall_cmds old_postuninstall_cmds \
- compiler_RC \
- CC_RC \
- LD_RC \
- lt_prog_compiler_wl_RC \
- lt_prog_compiler_pic_RC \
- lt_prog_compiler_static_RC \
- lt_prog_compiler_no_builtin_flag_RC \
- export_dynamic_flag_spec_RC \
- thread_safe_flag_spec_RC \
- whole_archive_flag_spec_RC \
- enable_shared_with_static_runtimes_RC \
- old_archive_cmds_RC \
- old_archive_from_new_cmds_RC \
- predep_objects_RC \
- postdep_objects_RC \
- predeps_RC \
- postdeps_RC \
- compiler_lib_search_path_RC \
- archive_cmds_RC \
- archive_expsym_cmds_RC \
- postinstall_cmds_RC \
- postuninstall_cmds_RC \
- old_archive_from_expsyms_cmds_RC \
- allow_undefined_flag_RC \
- no_undefined_flag_RC \
- export_symbols_cmds_RC \
- hardcode_libdir_flag_spec_RC \
- hardcode_libdir_flag_spec_ld_RC \
- hardcode_libdir_separator_RC \
- hardcode_automatic_RC \
- module_cmds_RC \
- module_expsym_cmds_RC \
- lt_cv_prog_compiler_c_o_RC \
- exclude_expsyms_RC \
- include_expsyms_RC; do
-
- case $var in
- old_archive_cmds_RC | \
- old_archive_from_new_cmds_RC | \
- archive_cmds_RC | \
- archive_expsym_cmds_RC | \
- module_cmds_RC | \
- module_expsym_cmds_RC | \
- old_archive_from_expsyms_cmds_RC | \
- export_symbols_cmds_RC | \
- extract_expsyms_cmds | reload_cmds | finish_cmds | \
- postinstall_cmds | postuninstall_cmds | \
- old_postinstall_cmds | old_postuninstall_cmds | \
- sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
- # Double-quote double-evaled strings.
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
- ;;
- *)
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
- ;;
- esac
- done
-
- case $lt_echo in
- *'\$0 --fallback-echo"')
- lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
- ;;
- esac
-
-cfgfile="$ofile"
-
- cat <<__EOF__ >> "$cfgfile"
-# ### BEGIN LIBTOOL TAG CONFIG: $tagname
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$archive_cmds_need_lc_RC
-
-# Whether or not to disallow shared libs when runtime libs are static
-allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-host_os=$host_os
-
-# The build system.
-build_alias=$build_alias
-build=$build
-build_os=$build_os
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# A language-specific compiler.
-CC=$lt_compiler_RC
-
-# Is the compiler the GNU C compiler?
-with_gcc=$GCC_RC
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_LD_RC
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_RC
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic_RC
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# Do we need the lib prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Whether dlopen is supported.
-dlopen_support=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static_RC
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC
-
-# Library versioning type.
-version_type=$version_type
-
-# Format of library name prefix.
-libname_spec=$lt_libname_spec
-
-# List of archive names. First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME.
-library_names_spec=$lt_library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$lt_soname_spec
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_old_archive_cmds_RC
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC
-
-# Commands used to build and install a shared archive.
-archive_cmds=$lt_archive_cmds_RC
-archive_expsym_cmds=$lt_archive_expsym_cmds_RC
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_module_cmds_RC
-module_expsym_cmds=$lt_module_expsym_cmds_RC
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_predep_objects_RC
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_postdep_objects_RC
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_predeps_RC
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$lt_postdeps_RC
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_compiler_lib_search_path_RC
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$lt_deplibs_check_method
-
-# Command to use when deplibs_check_method == file_magic.
-file_magic_cmd=$lt_file_magic_cmd
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag_RC
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag_RC
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration
-global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-
-# Transform the output of nm in a C name address pair
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action_RC
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC
-
-# If ld is used when linking, flag to hardcode \$libdir into
-# a binary during linking. This must work even if \$libdir does
-# not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC
-
-# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$hardcode_direct_RC
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$hardcode_minus_L_RC
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var_RC
-
-# Set to yes if building a shared library automatically hardcodes DIR into the library
-# and all subsequent libraries and executables linked against it.
-hardcode_automatic=$hardcode_automatic_RC
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs_RC
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path="$fix_srcfile_path_RC"
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$always_export_symbols_RC
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds_RC
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms_RC
-
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms_RC
-
-# ### END LIBTOOL TAG CONFIG: $tagname
-
-__EOF__
-
-
-else
- # If there is no Makefile yet, we rely on a make rule to execute
- # `config.status --recheck' to rerun these tests and create the
- # libtool script then.
- ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
- if test -f "$ltmain_in"; then
- test -f Makefile && make "$ltmain"
- fi
-fi
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-CC="$lt_save_CC"
-
- ;;
-
- *)
- { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5
-echo "$as_me: error: Unsupported tag name: $tagname" >&2;}
- { (exit 1); exit 1; }; }
- ;;
- esac
-
- # Append the new tag name to the list of available tags.
- if test -n "$tagname" ; then
- available_tags="$available_tags $tagname"
- fi
- fi
- done
- IFS="$lt_save_ifs"
-
- # Now substitute the updated list of available tags.
- if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
- mv "${ofile}T" "$ofile"
- chmod +x "$ofile"
- else
- rm -f "${ofile}T"
- { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5
-echo "$as_me: error: unable to update list of available tagged configurations." >&2;}
- { (exit 1); exit 1; }; }
- fi
-fi
-
-
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-
-# Prevent multiple expansion
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-echo "$as_me:$LINENO: checking whether ln -s works" >&5
-echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
- echo "$as_me:$LINENO: result: no, using $LN_S" >&5
-echo "${ECHO_T}no, using $LN_S" >&6
-fi
-
-
-# If --with-pic=no is set we should honour that.
-
-
-if test x$pic_mode = xno; then
- NOPIC_TRUE=
- NOPIC_FALSE='#'
-else
- NOPIC_TRUE='#'
- NOPIC_FALSE=
-fi
-
-
-# Conditional defining whether we build with POSIX thread support.
-
-# Check whether --with-pthreads or --without-pthreads was given.
-if test "${with_pthreads+set}" = set; then
- withval="$with_pthreads"
- if test "$withval" = "yes"; then
- use_pthreads="1"
- else
- use_pthreads="0"
- fi
-else
- use_pthreads="1"
-fi;
-if test "$use_pthreads" = "1"; then
-
-echo "$as_me:$LINENO: checking for pthread_create in -lpthread" >&5
-echo $ECHO_N "checking for pthread_create in -lpthread... $ECHO_C" >&6
-if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpthread $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char pthread_create ();
-int
-main ()
-{
-pthread_create ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_pthread_pthread_create=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_pthread_pthread_create=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_create" >&5
-echo "${ECHO_T}$ac_cv_lib_pthread_pthread_create" >&6
-if test $ac_cv_lib_pthread_pthread_create = yes; then
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBPTHREAD 1
-_ACEOF
-
- LIBS="-lpthread $LIBS"
-
-else
- use_pthreads="0"
-fi
-
-fi
-
-
-if test x$use_pthreads = x0; then
- NOTHREADS_TRUE=
- NOTHREADS_FALSE='#'
-else
- NOTHREADS_TRUE='#'
- NOTHREADS_FALSE=
-fi
-
-THREADS=$use_pthreads
-
-
-# See which variadic function API to use
-
-
-for ac_header in stdarg.h varargs.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-else
- # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_header_compiler=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- ac_header_preproc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
- (
- cat <<\_ASBOX
-## --------------------------------- ##
-## Report this to ussc at star.rl.ac.uk ##
-## --------------------------------- ##
-_ASBOX
- ) |
- sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- eval "$as_ac_Header=\$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
- break
-fi
-
-done
-
-
-# Can we use backtrace?
-
-for ac_header in execinfo.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-else
- # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_header_compiler=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- ac_header_preproc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
- (
- cat <<\_ASBOX
-## --------------------------------- ##
-## Report this to ussc at star.rl.ac.uk ##
-## --------------------------------- ##
-_ASBOX
- ) |
- sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- eval "$as_ac_Header=\$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-for ac_func in backtrace
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-# Do we have reentrant strerror and strtok?
-
-
-for ac_func in strerror_r strtok_r
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-# See if we have long doubles (used by the Mapping and Region classes)
-echo "$as_me:$LINENO: checking for long double" >&5
-echo $ECHO_N "checking for long double... $ECHO_C" >&6
-if test "${ac_cv_type_long_double+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-if ((long double *) 0)
- return 0;
-if (sizeof (long double))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_type_long_double=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_type_long_double=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_type_long_double" >&5
-echo "${ECHO_T}$ac_cv_type_long_double" >&6
-if test $ac_cv_type_long_double = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_LONG_DOUBLE 1
-_ACEOF
-
-
-fi
-
-
-# ast_link needs to be able to link against the Fortran runtime if
-# necessary
-
-ac_ext=${FC_SRCEXT-f}
-ac_compile='$FC -c $FCFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-echo "$as_me:$LINENO: checking how to get verbose linking output from $FC" >&5
-echo $ECHO_N "checking how to get verbose linking output from $FC... $ECHO_C" >&6
-if test "${ac_cv_prog_fc_v+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
- program main
-
- end
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_fc_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_prog_fc_v=
-# Try some options frequently used verbose output
-for ac_verb in -v -verbose --verbose -V -\#\#\#; do
- cat >conftest.$ac_ext <<_ACEOF
- program main
-
- end
-_ACEOF
-
-# Compile and link our simple test program by passing a flag (argument
-# 1 to this macro) to the Fortran compiler in order to get
-# "verbose" output that we can then parse for the Fortran linker
-# flags.
-ac_save_FFLAGS=$FCFLAGS
-FCFLAGS="$FCFLAGS $ac_verb"
-(eval echo $as_me:22116: \"$ac_link\") >&5
-ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | grep -v 'Driving:'`
-echo "$ac_fc_v_output" >&5
-FCFLAGS=$ac_save_FFLAGS
-
-rm -f conftest*
-
-# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where
-# /foo, /bar, and /baz are search directories for the Fortran linker.
-# Here, we change these into -L/foo -L/bar -L/baz (and put it first):
-ac_fc_v_output="`echo $ac_fc_v_output |
- grep 'LPATH is:' |
- sed 's,.*LPATH is\(: *[^ ]*\).*,\1,;s,: */, -L/,g'` $ac_fc_v_output"
-
-case $ac_fc_v_output in
- # If we are using xlf then replace all the commas with spaces.
- *xlfentry*)
- ac_fc_v_output=`echo $ac_fc_v_output | sed 's/,/ /g'` ;;
-
- # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted
- # $LIBS confuse us, and the libraries appear later in the output anyway).
- *mGLOB_options_string*)
- ac_fc_v_output=`echo $ac_fc_v_output | sed 's/\"-mGLOB[^\"]*\"/ /g'` ;;
-
- # If we are using Cray Fortran then delete quotes.
- # Use "\"" instead of '"' for font-lock-mode.
- # FIXME: a more general fix for quoted arguments with spaces?
- *cft90*)
- ac_fc_v_output=`echo $ac_fc_v_output | sed "s/\"//g"` ;;
-esac
-
-
- # look for -l* and *.a constructs in the output
- for ac_arg in $ac_fc_v_output; do
- case $ac_arg in
- [\\/]*.a | ?:[\\/]*.a | -[lLRu]*)
- ac_cv_prog_fc_v=$ac_verb
- break 2 ;;
- esac
- done
-done
-if test -z "$ac_cv_prog_fc_v"; then
- { echo "$as_me:$LINENO: WARNING: cannot determine how to obtain linking information from $FC" >&5
-echo "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;}
-fi
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ echo "$as_me:$LINENO: WARNING: compilation failed" >&5
-echo "$as_me: WARNING: compilation failed" >&2;}
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_fc_v" >&5
-echo "${ECHO_T}$ac_cv_prog_fc_v" >&6
-echo "$as_me:$LINENO: checking for Fortran libraries of $FC" >&5
-echo $ECHO_N "checking for Fortran libraries of $FC... $ECHO_C" >&6
-if test "${ac_cv_fc_libs+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "x$FCLIBS" != "x"; then
- ac_cv_fc_libs="$FCLIBS" # Let the user override the test.
-else
-
-cat >conftest.$ac_ext <<_ACEOF
- program main
-
- end
-_ACEOF
-
-# Compile and link our simple test program by passing a flag (argument
-# 1 to this macro) to the Fortran compiler in order to get
-# "verbose" output that we can then parse for the Fortran linker
-# flags.
-ac_save_FFLAGS=$FCFLAGS
-FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v"
-(eval echo $as_me:22194: \"$ac_link\") >&5
-ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | grep -v 'Driving:'`
-echo "$ac_fc_v_output" >&5
-FCFLAGS=$ac_save_FFLAGS
-
-rm -f conftest*
-
-# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where
-# /foo, /bar, and /baz are search directories for the Fortran linker.
-# Here, we change these into -L/foo -L/bar -L/baz (and put it first):
-ac_fc_v_output="`echo $ac_fc_v_output |
- grep 'LPATH is:' |
- sed 's,.*LPATH is\(: *[^ ]*\).*,\1,;s,: */, -L/,g'` $ac_fc_v_output"
-
-case $ac_fc_v_output in
- # If we are using xlf then replace all the commas with spaces.
- *xlfentry*)
- ac_fc_v_output=`echo $ac_fc_v_output | sed 's/,/ /g'` ;;
-
- # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted
- # $LIBS confuse us, and the libraries appear later in the output anyway).
- *mGLOB_options_string*)
- ac_fc_v_output=`echo $ac_fc_v_output | sed 's/\"-mGLOB[^\"]*\"/ /g'` ;;
-
- # If we are using Cray Fortran then delete quotes.
- # Use "\"" instead of '"' for font-lock-mode.
- # FIXME: a more general fix for quoted arguments with spaces?
- *cft90*)
- ac_fc_v_output=`echo $ac_fc_v_output | sed "s/\"//g"` ;;
-esac
-
-
-
-ac_cv_fc_libs=
-
-# Save positional arguments (if any)
-ac_save_positional="$@"
-
-set X $ac_fc_v_output
-while test $# != 1; do
- shift
- ac_arg=$1
- case $ac_arg in
- [\\/]*.a | ?:[\\/]*.a)
- ac_exists=false
- for ac_i in $ac_cv_fc_libs; do
- if test x"$ac_arg" = x"$ac_i"; then
- ac_exists=true
- break
- fi
- done
-
- if test x"$ac_exists" = xtrue; then
- :
-else
- ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
-fi
-
- ;;
- -bI:*)
- ac_exists=false
- for ac_i in $ac_cv_fc_libs; do
- if test x"$ac_arg" = x"$ac_i"; then
- ac_exists=true
- break
- fi
- done
-
- if test x"$ac_exists" = xtrue; then
- :
-else
- if test "$ac_compiler_gnu" = yes; then
- for ac_link_opt in $ac_arg; do
- ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt"
- done
-else
- ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
-fi
-fi
-
- ;;
- # Ignore these flags.
- -lang* | -lcrt*.o | -lc | -lgcc | -libmil | -LANG:=*)
- ;;
- -lkernel32)
- test x"$CYGWIN" != xyes && ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
- ;;
- -[LRuY])
- # These flags, when seen by themselves, take an argument.
- # We remove the space between option and argument and re-iterate
- # unless we find an empty arg or a new option (starting with -)
- case $2 in
- "" | -*);;
- *)
- ac_arg="$ac_arg$2"
- shift; shift
- set X $ac_arg "$@"
- ;;
- esac
- ;;
- -YP,*)
- for ac_j in `echo $ac_arg | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do
- ac_exists=false
- for ac_i in $ac_cv_fc_libs; do
- if test x"$ac_j" = x"$ac_i"; then
- ac_exists=true
- break
- fi
- done
-
- if test x"$ac_exists" = xtrue; then
- :
-else
- ac_arg="$ac_arg $ac_j"
- ac_cv_fc_libs="$ac_cv_fc_libs $ac_j"
-fi
-
- done
- ;;
- -[lLR]*)
- ac_exists=false
- for ac_i in $ac_cv_fc_libs; do
- if test x"$ac_arg" = x"$ac_i"; then
- ac_exists=true
- break
- fi
- done
-
- if test x"$ac_exists" = xtrue; then
- :
-else
- ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
-fi
-
- ;;
- # Ignore everything else.
- esac
-done
-# restore positional arguments
-set X $ac_save_positional; shift
-
-# We only consider "LD_RUN_PATH" on Solaris systems. If this is seen,
-# then we insist that the "run path" must be an absolute path (i.e. it
-# must begin with a "/").
-case `(uname -sr) 2>/dev/null` in
- "SunOS 5"*)
- ac_ld_run_path=`echo $ac_fc_v_output |
- sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'`
- test "x$ac_ld_run_path" != x &&
- if test "$ac_compiler_gnu" = yes; then
- for ac_link_opt in $ac_ld_run_path; do
- ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt"
- done
-else
- ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path"
-fi
- ;;
-esac
-fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x"
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_fc_libs" >&5
-echo "${ECHO_T}$ac_cv_fc_libs" >&6
-FCLIBS="$ac_cv_fc_libs"
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-# Find an absolute path to the Perl binary, augmenting the path with the
-# location of the Starlink Perl build. If this fails, then set @PERL@
-# to the backup `/usr/bin/env perl', which will find Perl if it exists
-# in the path at runtime.
-# Extract the first word of "perl", so it can be a program name with args.
-set dummy perl; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_PERL+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- case $PERL in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_dummy="$STARLINK/Perl/bin:$PATH"
-for as_dir in $as_dummy
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
- test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="/usr/bin/env perl"
- ;;
-esac
-fi
-PERL=$ac_cv_path_PERL
-
-if test -n "$PERL"; then
- echo "$as_me:$LINENO: result: $PERL" >&5
-echo "${ECHO_T}$PERL" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-
-# Function and declaration checks
-
-for ac_func in isnan
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-echo "$as_me:$LINENO: checking whether isnan is declared" >&5
-echo $ECHO_N "checking whether isnan is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_isnan+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-
-
-int
-main ()
-{
-#ifndef isnan
- char *p = (char *) isnan;
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_have_decl_isnan=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_isnan=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_isnan" >&5
-echo "${ECHO_T}$ac_cv_have_decl_isnan" >&6
-if test $ac_cv_have_decl_isnan = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ISNAN 1
-_ACEOF
-
-
-else
- cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ISNAN 0
-_ACEOF
-
-
-fi
-
-
- for _star_tmp in sst htx
- do
- STAR_DEPENDENCIES_CHILDREN="$STAR_DEPENDENCIES_CHILDREN<sourceset>$_star_tmp</sourceset>"
- done
-
- for _star_tmp in sla
- do
- STAR_DEPENDENCIES_CHILDREN="$STAR_DEPENDENCIES_CHILDREN<build>$_star_tmp</build>"
- done
-
-
-# Perform the check that configures f77.h.in for the return type of REAL
-# Fortran functions. On 64-bit g77 with f2c compatibility this is double
-# not float.
-$_star_docs_only &&
- { { echo "$as_me:$LINENO: error: STAR_CNF_F2C_SYMBOLS in docs-only dir" >&5
-echo "$as_me: error: STAR_CNF_F2C_SYMBOLS in docs-only dir" >&2;}
- { (exit 1); exit 1; }; }
- echo "$as_me:$LINENO: checking if $FC is in strict f2c compatible mode" >&5
-echo $ECHO_N "checking if $FC is in strict f2c compatible mode... $ECHO_C" >&6
-if test "${star_cv_cnf_f2c_compatible+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$ac_cv_fc_compiler_gnu" = yes; then
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-float fred_() {
- return 1.0f;
-}
-
-_ACEOF
- if (eval $ac_compile) 2>&5
- then
- mv conftest.$ac_objext c-conftest.$ac_objext
- else
- { { echo "$as_me:$LINENO: error: cannot compile a C function!" >&5
-echo "$as_me: error: cannot compile a C function!" >&2;}
- { (exit 1); exit 1; }; }
- fi
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
- ac_ext=${FC_SRCEXT-f}
-ac_compile='$FC -c $FCFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-
- PROGRAM F2CTEST
- REAL FRED
- REAL R
- R = FRED()
- IF ( R .NE. 0.0 ) THEN
- WRITE(*,*) 'no'
- ELSE
- WRITE(*,*) 'yes'
- ENDIF
- END
-
-_ACEOF
- star_cv_cnf_f2c_compatible=yes
- $FC $FCFLAGS $opt -o conftest conftest.f c-conftest.$ac_objext 2>&5
- if test -r conftest
- then
- star_cv_cnf_f2c_compatible=`eval conftest | sed 's/\ //g'` > /dev/null
- else
- { { echo "$as_me:$LINENO: error: failed to link program" >&5
-echo "$as_me: error: failed to link program" >&2;}
- { (exit 1); exit 1; }; }
- fi
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
- rm -f conftest* c-conftest*
- else
- # Not a GNU compiler.
- star_cv_cnf_f2c_compatible=no
- fi
-
-fi
-echo "$as_me:$LINENO: result: $star_cv_cnf_f2c_compatible" >&5
-echo "${ECHO_T}$star_cv_cnf_f2c_compatible" >&6
- if test "$star_cv_cnf_f2c_compatible" = "yes"
- then
- REAL_FUNCTION_TYPE=double
-
- else
- REAL_FUNCTION_TYPE=float
-
- fi
-
-
-# Determine the type of Fortran character string lengths.
-echo "$as_me:$LINENO: checking for void*" >&5
-echo $ECHO_N "checking for void*... $ECHO_C" >&6
-if test "${ac_cv_type_voidp+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-if ((void* *) 0)
- return 0;
-if (sizeof (void*))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_type_voidp=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_type_voidp=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_type_voidp" >&5
-echo "${ECHO_T}$ac_cv_type_voidp" >&6
-
-echo "$as_me:$LINENO: checking size of void*" >&5
-echo $ECHO_N "checking size of void*... $ECHO_C" >&6
-if test "${ac_cv_sizeof_voidp+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$ac_cv_type_voidp" = yes; then
- # The cast to unsigned long works around a bug in the HP C Compiler
- # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
- # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
- # This bug is HP SR number 8606223364.
- if test "$cross_compiling" = yes; then
- # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long) (sizeof (void*))) >= 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_lo=0 ac_mid=0
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long) (sizeof (void*))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_hi=$ac_mid; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_lo=`expr $ac_mid + 1`
- if test $ac_lo -le $ac_mid; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid + 1`
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long) (sizeof (void*))) < 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_hi=-1 ac_mid=-1
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long) (sizeof (void*))) >= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_lo=$ac_mid; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_hi=`expr '(' $ac_mid ')' - 1`
- if test $ac_mid -le $ac_hi; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid`
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_lo= ac_hi=
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
- ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long) (sizeof (void*))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_hi=$ac_mid
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_lo=`expr '(' $ac_mid ')' + 1`
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in
-?*) ac_cv_sizeof_voidp=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (void*), 77
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (void*), 77
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; } ;;
-esac
-else
- if test "$cross_compiling" = yes; then
- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-long longval () { return (long) (sizeof (void*)); }
-unsigned long ulongval () { return (long) (sizeof (void*)); }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
- FILE *f = fopen ("conftest.val", "w");
- if (! f)
- exit (1);
- if (((long) (sizeof (void*))) < 0)
- {
- long i = longval ();
- if (i != ((long) (sizeof (void*))))
- exit (1);
- fprintf (f, "%ld\n", i);
- }
- else
- {
- unsigned long i = ulongval ();
- if (i != ((long) (sizeof (void*))))
- exit (1);
- fprintf (f, "%lu\n", i);
- }
- exit (ferror (f) || fclose (f) != 0);
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_sizeof_voidp=`cat conftest.val`
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (void*), 77
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (void*), 77
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-rm -f conftest.val
-else
- ac_cv_sizeof_voidp=0
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_sizeof_voidp" >&5
-echo "${ECHO_T}$ac_cv_sizeof_voidp" >&6
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_VOIDP $ac_cv_sizeof_voidp
-_ACEOF
-
- echo "$as_me:$LINENO: checking whether ${FC} has the %LOC extension" >&5
-echo $ECHO_N "checking whether ${FC} has the %LOC extension... $ECHO_C" >&6
-if test "${ac_cv_fc_have_percentloc+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_ext=${FC_SRCEXT-f}
-ac_compile='$FC -c $FCFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
- program main
-
- INTEGER I, ADDR
- I = 1
- ADDR = %LOC( I )
-
- end
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_fc_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_fc_have_percentloc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_fc_have_percentloc=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_fc_have_percentloc" >&5
-echo "${ECHO_T}$ac_cv_fc_have_percentloc" >&6
- if test $ac_cv_fc_have_percentloc = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_PERCENTLOC 1
-_ACEOF
-
- fi
- echo "$as_me:$LINENO: checking type used for Fortran string lengths" >&5
-echo $ECHO_N "checking type used for Fortran string lengths... $ECHO_C" >&6
-if test "${star_cv_cnf_trail_type+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$ac_cv_sizeof_voidp" = 8 -a "$ac_cv_fc_compiler_gnu" = no; then
- if "$FC" -V 2>&1 < /dev/null | grep 'Intel.*64' > /dev/null; then
- star_cv_cnf_trail_type=long
- elif "$FC" -V 2>&1 < /dev/null | grep 'Sun.*Fortran' > /dev/null; then
- star_cv_cnf_trail_type=long
- else
- ac_ext=${FC_SRCEXT-f}
-ac_compile='$FC -c $FCFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-
- if test "$ac_cv_fc_have_percentloc" = yes; then
- FORTRAN_GETLOC='%loc'
- else
- FORTRAN_GETLOC='loc'
- fi
- cat >conftest.$ac_ext <<_ACEOF
-
- program conftest
-
-C checks passing 4 byte character string lengths on 64bit compiler.
-
- integer*8 ip1, ip2
- integer*4 l1, l2
- integer dummy1, dummy2
- real dummy3, dummy4
- double precision dummy5, dummy6
-
- character str1*(1024)
- character str2*(2048)
-
- ip1 = $FORTRAN_GETLOC (str1)
- ip2 = $FORTRAN_GETLOC (str2)
-
- l1 = 1024
- l2 = 2048
-
- call report( dummy1, dummy2, %val(ip1), dummy3, dummy4,
- : %val(ip2), dummy5, dummy6,
- : %val(l1), %val(l2) )
-
- end
-
- subroutine report( dummy1, dummy2, str1, dummy3, dummy4,
- : str2, dummy5, dummy6 )
- integer dummy1, dummy2
- real dummy3, dummy4
- double precision dummy5, dummy6
-
- character*(*) str1
- character*(*) str2
-
- if ( len(str1) .eq. 1024 .and. len(str2) .eq. 2048 ) then
- print *, 'int'
- else
- print *, 'long'
- endif
- end
-
-_ACEOF
- star_cv_cnf_trail_type=int
- $FC $FCFLAGS $opt -o conftest conftest.f 2>&5
- if test -r conftest
- then
- star_cv_cnf_trail_type=`eval conftest | sed 's/\ //g'` > /dev/null
- else
- { { echo "$as_me:$LINENO: error: failed to link program" >&5
-echo "$as_me: error: failed to link program" >&2;}
- { (exit 1); exit 1; }; }
- fi
- rm -f conftest*
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
- fi
- else
- star_cv_cnf_trail_type=int
- fi
-
-fi
-echo "$as_me:$LINENO: result: $star_cv_cnf_trail_type" >&5
-echo "${ECHO_T}$star_cv_cnf_trail_type" >&6
- TRAIL_TYPE=$star_cv_cnf_trail_type
-
-
-cat >>confdefs.h <<_ACEOF
-#define TRAIL_TYPE $star_cv_cnf_trail_type
-_ACEOF
-
-
-
-# Declare the message file.
-#
- $_star_docs_only &&
- { { echo "$as_me:$LINENO: error: STAR_MESSGEN in docs-only directory" >&5
-echo "$as_me: error: STAR_MESSGEN in docs-only directory" >&2;}
- { (exit 1); exit 1; }; }
- for _star_tmp in messgen
- do
- STAR_DEPENDENCIES_CHILDREN="$STAR_DEPENDENCIES_CHILDREN<sourceset>$_star_tmp</sourceset>"
- done
-
- _star_tmp='ast_err.msg'
-for marker in $_star_tmp
-do
- if test -f $marker; then
- _star_predist_marker_present=:
- { echo "$as_me:$LINENO: found predist marker file $marker" >&5
-echo "$as_me: found predist marker file $marker" >&6;}
- else
- _star_predist_marker_present=false
- fi
- case $_star_predist_status in
- unknown)
- if $_star_predist_marker_present; then
- # we do want to build sourceset files
- _star_predist_status=predist
- PREDIST=
- { echo "$as_me:$LINENO: in pre-distribution state" >&5
-echo "$as_me: in pre-distribution state" >&6;}
- else
- _star_predist_status=postdist
- PREDIST='#'
- { echo "$as_me:$LINENO: in post-distribution state" >&5
-echo "$as_me: in post-distribution state" >&6;}
- fi
- ;;
- predist)
- if $_star_predist_marker_present; then
- : OK
- else
- { echo "$as_me:$LINENO: WARNING: Building predist, but marker file $marker is not present" >&5
-echo "$as_me: WARNING: Building predist, but marker file $marker is not present" >&2;}
- fi
- ;;
- postdist)
- if $_star_predist_marker_present; then
- { echo "$as_me:$LINENO: WARNING: In postdistribution state, but predist marker file $marker is present" >&5
-echo "$as_me: WARNING: In postdistribution state, but predist marker file $marker is present" >&2;}
- fi
- ;;
- *)
- { { echo "$as_me:$LINENO: error: impossible predist status $_star_predist_status" >&5
-echo "$as_me: error: impossible predist status $_star_predist_status" >&2;}
- { (exit 1); exit 1; }; }
- ;;
- esac
-done
-
- eval default_bindir=`echo $bindir | sed 's,\${exec_prefix},$ac_default_prefix,'`
-
- # Extract the first word of "messgen", so it can be a program name with args.
-set dummy messgen; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_MESSGEN+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- case $MESSGEN in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_MESSGEN="$MESSGEN" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_dummy="$STARLINK/Perl/bin:$STARLINK/starjava/bin:$STARLINK/bin:$default_bindir:$PATH"
-for as_dir in $as_dummy
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_MESSGEN="$as_dir/$ac_word$ac_exec_ext"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
- test -z "$ac_cv_path_MESSGEN" && ac_cv_path_MESSGEN="messgen"
- ;;
-esac
-fi
-MESSGEN=$ac_cv_path_MESSGEN
-
-if test -n "$MESSGEN"; then
- echo "$as_me:$LINENO: result: $MESSGEN" >&5
-echo "${ECHO_T}$MESSGEN" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-
-
-
-
-# Test for non-ANSI behaviour in sscanf on some platforms, reported by
-# Bill Joye. Also check for bad MINGW sscanf. That returns nc=0 in the
-# System test.
-echo "$as_me:$LINENO: checking whether the sscanf function is ANSI-compatible" >&5
-echo $ECHO_N "checking whether the sscanf function is ANSI-compatible... $ECHO_C" >&6
-if test "$cross_compiling" = yes; then
-
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_NONANSI_SSCANF 1
-_ACEOF
-
-
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <stdio.h>
-#include <stdlib.h>
-
-int main() {
- char foo[] = " name 1111.1 ";
- char mingw[] = "system= FK4_NO_E";
-
- char bar[8];
- float ff;
- int system;
- int nc;
- int r;
-
- nc = 0;
- r = sscanf(foo, " %s %f %n", bar, &ff, &nc);
-
- if ( nc == 13 ) {
- nc = 0;
- r = sscanf( mingw, "system= %n%*s %n", &system, &nc );
- if ( nc != 0 ) nc = 13;
- }
- exit( ( nc != 13 ) ? 0 : 1 );
-}
-
-
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6;
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_NONANSI_SSCANF 1
-_ACEOF
-
-
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-# Declare the documentation. We need to do complicated things to
-# satisfy these targets, so give a non-null value
-# for the second argument, to suppress automatic generation of
-# rules.
-
- STAR_DOCUMENTATION="$STAR_DOCUMENTATION sun210 sun211"
-
- if $_star_build_docs; then
- STAR_LATEX_DOCUMENTATION="sun210.ps sun210.tex sun211.ps sun211.tex sun210.htx_tar sun211.htx_tar"
- fi
-
- if $_star_build_docs; then
- : ${LATEX2DVI='$$LATEX "\\batchmode\\input $$1" && $$LATEX "\\batchmode\\input $$1"'}
-
- else
- { echo "$as_me:$LINENO: WARNING: not installing docs sun210 sun211" >&5
-echo "$as_me: WARNING: not installing docs sun210 sun211" >&2;}
- fi
-
-_star_tmp='sun_master.tex'
-for marker in $_star_tmp
-do
- if test -f $marker; then
- _star_predist_marker_present=:
- { echo "$as_me:$LINENO: found predist marker file $marker" >&5
-echo "$as_me: found predist marker file $marker" >&6;}
- else
- _star_predist_marker_present=false
- fi
- case $_star_predist_status in
- unknown)
- if $_star_predist_marker_present; then
- # we do want to build sourceset files
- _star_predist_status=predist
- PREDIST=
- { echo "$as_me:$LINENO: in pre-distribution state" >&5
-echo "$as_me: in pre-distribution state" >&6;}
- else
- _star_predist_status=postdist
- PREDIST='#'
- { echo "$as_me:$LINENO: in post-distribution state" >&5
-echo "$as_me: in post-distribution state" >&6;}
- fi
- ;;
- predist)
- if $_star_predist_marker_present; then
- : OK
- else
- { echo "$as_me:$LINENO: WARNING: Building predist, but marker file $marker is not present" >&5
-echo "$as_me: WARNING: Building predist, but marker file $marker is not present" >&2;}
- fi
- ;;
- postdist)
- if $_star_predist_marker_present; then
- { echo "$as_me:$LINENO: WARNING: In postdistribution state, but predist marker file $marker is present" >&5
-echo "$as_me: WARNING: In postdistribution state, but predist marker file $marker is present" >&2;}
- fi
- ;;
- *)
- { { echo "$as_me:$LINENO: error: impossible predist status $_star_predist_status" >&5
-echo "$as_me: error: impossible predist status $_star_predist_status" >&2;}
- { (exit 1); exit 1; }; }
- ;;
- esac
-done
-
-eval default_bindir=`echo $bindir | sed 's,\${exec_prefix},$ac_default_prefix,'`
-
- # Extract the first word of "star2html", so it can be a program name with args.
-set dummy star2html; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_STAR2HTML+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- case $STAR2HTML in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_STAR2HTML="$STAR2HTML" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_dummy="$STARLINK/Perl/bin:$STARLINK/starjava/bin:$STARLINK/bin:$default_bindir:$PATH"
-for as_dir in $as_dummy
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_STAR2HTML="$as_dir/$ac_word$ac_exec_ext"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
- test -z "$ac_cv_path_STAR2HTML" && ac_cv_path_STAR2HTML="star2html"
- ;;
-esac
-fi
-STAR2HTML=$ac_cv_path_STAR2HTML
-
-if test -n "$STAR2HTML"; then
- echo "$as_me:$LINENO: result: $STAR2HTML" >&5
-echo "${ECHO_T}$STAR2HTML" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-
-
-eval default_bindir=`echo $bindir | sed 's,\${exec_prefix},$ac_default_prefix,'`
-
- # Extract the first word of "prolat", so it can be a program name with args.
-set dummy prolat; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_PROLAT+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- case $PROLAT in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_PROLAT="$PROLAT" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_dummy="$STARLINK/Perl/bin:$STARLINK/starjava/bin:$STARLINK/bin:$STARLINK/bin/sst:$default_bindir:$default_bindir/sst:$PATH"
-for as_dir in $as_dummy
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_PROLAT="$as_dir/$ac_word$ac_exec_ext"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
- test -z "$ac_cv_path_PROLAT" && ac_cv_path_PROLAT="prolat"
- ;;
-esac
-fi
-PROLAT=$ac_cv_path_PROLAT
-
-if test -n "$PROLAT"; then
- echo "$as_me:$LINENO: result: $PROLAT" >&5
-echo "${ECHO_T}$PROLAT" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-
- # prolat is part of SST
-
- ac_config_headers="$ac_config_headers config.h"
-
-
- ac_config_files="$ac_config_files Makefile component.xml ast_link object.h f77.h"
-
- ac_config_files="$ac_config_files ast_cpp"
-
-# Following are files which are substituted by the Makefile at
-# distribution time, rather than by configure. They are not distributed.
-_star_tmp='version.h.in builddocs.in addversion.in'
-for marker in $_star_tmp
-do
- if test -f $marker; then
- _star_predist_marker_present=:
- { echo "$as_me:$LINENO: found predist marker file $marker" >&5
-echo "$as_me: found predist marker file $marker" >&6;}
- else
- _star_predist_marker_present=false
- fi
- case $_star_predist_status in
- unknown)
- if $_star_predist_marker_present; then
- # we do want to build sourceset files
- _star_predist_status=predist
- PREDIST=
- { echo "$as_me:$LINENO: in pre-distribution state" >&5
-echo "$as_me: in pre-distribution state" >&6;}
- else
- _star_predist_status=postdist
- PREDIST='#'
- { echo "$as_me:$LINENO: in post-distribution state" >&5
-echo "$as_me: in post-distribution state" >&6;}
- fi
- ;;
- predist)
- if $_star_predist_marker_present; then
- : OK
- else
- { echo "$as_me:$LINENO: WARNING: Building predist, but marker file $marker is not present" >&5
-echo "$as_me: WARNING: Building predist, but marker file $marker is not present" >&2;}
- fi
- ;;
- postdist)
- if $_star_predist_marker_present; then
- { echo "$as_me:$LINENO: WARNING: In postdistribution state, but predist marker file $marker is present" >&5
-echo "$as_me: WARNING: In postdistribution state, but predist marker file $marker is present" >&2;}
- fi
- ;;
- *)
- { { echo "$as_me:$LINENO: error: impossible predist status $_star_predist_status" >&5
-echo "$as_me: error: impossible predist status $_star_predist_status" >&2;}
- { (exit 1); exit 1; }; }
- ;;
- esac
-done
-
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems. If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-{
- (set) 2>&1 |
- case `(ac_space=' '; set | grep ac_space) 2>&1` in
- *ac_space=\ *)
- # `set' does not quote correctly, so add quotes (double-quote
- # substitution turns \\\\ into \\, and sed turns \\ into \).
- sed -n \
- "s/'/'\\\\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
- ;;
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n \
- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
- ;;
- esac;
-} |
- sed '
- t clear
- : clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- : end' >>confcache
-if diff $cache_file confcache >/dev/null 2>&1; then :; else
- if test -w $cache_file; then
- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
- cat confcache >$cache_file
- else
- echo "not updating unwritable cache $cache_file"
- fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=/{
-s/:*\$(srcdir):*/:/;
-s/:*\${srcdir}:*/:/;
-s/:*@srcdir@:*/:/;
-s/^\([^=]*=[ ]*\):*/\1/;
-s/:*$//;
-s/^[^=]*=[ ]*$//;
-}'
-fi
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_i=`echo "$ac_i" |
- sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
- # 2. Add them.
- ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
- ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
- { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"AMDEP\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
- { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
- { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
- { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${NOPIC_TRUE}" && test -z "${NOPIC_FALSE}"; then
- { { echo "$as_me:$LINENO: error: conditional \"NOPIC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"NOPIC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${NOTHREADS_TRUE}" && test -z "${NOTHREADS_FALSE}"; then
- { { echo "$as_me:$LINENO: error: conditional \"NOTHREADS\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"NOTHREADS\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-: ${CONFIG_STATUS=./config.status}
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
- set -o posix
-fi
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
- LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
- LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
- LC_TELEPHONE LC_TIME
-do
- if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
- eval $as_var=C; export $as_var
- else
- $as_unset $as_var
- fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)$' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
- /^X\/\(\/\/\)$/{ s//\1/; q; }
- /^X\/\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
-
-
-# PATH needs CR, and LINENO needs CR and PATH.
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
-fi
-
-
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2" || {
- # Find who we are. Look in the path if we contain no path at all
- # relative or not.
- case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-
- ;;
- esac
- # We did not find ourselves, most probably we were run as `sh COMMAND'
- # in which case we are not to be found in the path.
- if test "x$as_myself" = x; then
- as_myself=$0
- fi
- if test ! -f "$as_myself"; then
- { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
-echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
- { (exit 1); exit 1; }; }
- fi
- case $CONFIG_SHELL in
- '')
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for as_base in sh bash ksh sh5; do
- case $as_dir in
- /*)
- if ("$as_dir/$as_base" -c '
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
- CONFIG_SHELL=$as_dir/$as_base
- export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$0" ${1+"$@"}
- fi;;
- esac
- done
-done
-;;
- esac
-
- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
- # uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line before each line; the second 'sed' does the real
- # work. The second script uses 'N' to pair each line-number line
- # with the numbered line, and appends trailing '-' during
- # substitution so that $LINENO is not a special case at line end.
- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
- sed '=' <$as_myself |
- sed '
- N
- s,$,-,
- : loop
- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
- t loop
- s,-$,,
- s,^['$as_cr_digits']*\n,,
- ' >$as_me.lineno &&
- chmod +x $as_me.lineno ||
- { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
-echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
- { (exit 1); exit 1; }; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensible to this).
- . ./$as_me.lineno
- # Exit status is that of the last command.
- exit
-}
-
-
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
- *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T=' ' ;;
- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
- *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
- # We could just check for DJGPP; but this test a) works b) is more generic
- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
- if test -f conf$$.exe; then
- # Don't use ln at all; we don't have any links
- as_ln_s='cp -p'
- else
- as_ln_s='ln -s'
- fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.file
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-as_executable_p="test -f"
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" $as_nl"
-
-# CDPATH.
-$as_unset CDPATH
-
-exec 6>&1
-
-# Open the log real soon, to keep \$[0] and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling. Logging --version etc. is OK.
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-} >&5
-cat >&5 <<_CSEOF
-
-This file was extended by ast $as_me 5.3-1, which was
-generated by Starlink Autoconf 2.59. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-_CSEOF
-echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
-echo >&5
-_ACEOF
-
-# Files that config.status was made for.
-if test -n "$ac_config_files"; then
- echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_headers"; then
- echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_links"; then
- echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_commands"; then
- echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
-
-Usage: $0 [OPTIONS] [FILE]...
-
- -h, --help print this help, then exit
- -V, --version print version number, then exit
- -q, --quiet do not print progress messages
- -d, --debug don't remove temporary files
- --recheck update $as_me by reconfiguring in the same conditions
- --file=FILE[:TEMPLATE]
- instantiate the configuration file FILE
- --header=FILE[:TEMPLATE]
- instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Configuration commands:
-$config_commands
-
-Report bugs to <bug-autoconf at gnu.org>."
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-ac_cs_version="\\
-ast config.status 5.3-1
-configured by $0, generated by Starlink Autoconf 2.59,
- with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
-
-Copyright (C) 2003 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-srcdir=$srcdir
-INSTALL="$INSTALL"
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-# If no file are specified by the user, then we need to provide default
-# value. By we need to know if files were specified by the user.
-ac_need_defaults=:
-while test $# != 0
-do
- case $1 in
- --*=*)
- ac_option=`expr "x$1" : 'x\([^=]*\)='`
- ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
- ac_shift=:
- ;;
- -*)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- *) # This is not an option, so the user has probably given explicit
- # arguments.
- ac_option=$1
- ac_need_defaults=false;;
- esac
-
- case $ac_option in
- # Handling of the options.
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --vers* | -V )
- echo "$ac_cs_version"; exit 0 ;;
- --he | --h)
- # Conflict between --help and --header
- { { echo "$as_me:$LINENO: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2;}
- { (exit 1); exit 1; }; };;
- --help | --hel | -h )
- echo "$ac_cs_usage"; exit 0 ;;
- --debug | --d* | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- CONFIG_FILES="$CONFIG_FILES $ac_optarg"
- ac_need_defaults=false;;
- --header | --heade | --head | --hea )
- $ac_shift
- CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
- ac_need_defaults=false;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2;}
- { (exit 1); exit 1; }; } ;;
-
- *) ac_config_targets="$ac_config_targets $1" ;;
-
- esac
- shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
- exec 6>/dev/null
- ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-if \$ac_cs_recheck; then
- echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
- exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-fi
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-#
-# INIT-COMMANDS section.
-#
-
-AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
-
-_ACEOF
-
-
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_config_target in $ac_config_targets
-do
- case "$ac_config_target" in
- # Handling of arguments.
- "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
- "component.xml" ) CONFIG_FILES="$CONFIG_FILES component.xml" ;;
- "ast_link" ) CONFIG_FILES="$CONFIG_FILES ast_link" ;;
- "object.h" ) CONFIG_FILES="$CONFIG_FILES object.h" ;;
- "f77.h" ) CONFIG_FILES="$CONFIG_FILES f77.h" ;;
- "ast_cpp" ) CONFIG_FILES="$CONFIG_FILES ast_cpp" ;;
- "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
- "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
- *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
- { (exit 1); exit 1; }; };;
- esac
-done
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used. Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
- test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
- test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
-fi
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason to put it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Create a temporary directory, and hook for its removal unless debugging.
-$debug ||
-{
- trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
- trap '{ (exit 1); exit 1; }' 1 2 13 15
-}
-
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
- test -n "$tmp" && test -d "$tmp"
-} ||
-{
- tmp=./confstat$$-$RANDOM
- (umask 077 && mkdir $tmp)
-} ||
-{
- echo "$me: cannot create a temporary directory in ." >&2
- { (exit 1); exit 1; }
-}
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-
-#
-# CONFIG_FILES section.
-#
-
-# No need to generate the scripts if there are no CONFIG_FILES.
-# This happens for instance when ./config.status config.h
-if test -n "\$CONFIG_FILES"; then
- # Protect against being on the right side of a sed subst in config.status.
- sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
- s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
-s, at SHELL@,$SHELL,;t t
-s, at PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
-s, at PACKAGE_NAME@,$PACKAGE_NAME,;t t
-s, at PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
-s, at PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
-s, at PACKAGE_STRING@,$PACKAGE_STRING,;t t
-s, at PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
-s, at exec_prefix@,$exec_prefix,;t t
-s, at prefix@,$prefix,;t t
-s, at program_transform_name@,$program_transform_name,;t t
-s, at bindir@,$bindir,;t t
-s, at sbindir@,$sbindir,;t t
-s, at libexecdir@,$libexecdir,;t t
-s, at datadir@,$datadir,;t t
-s, at sysconfdir@,$sysconfdir,;t t
-s, at sharedstatedir@,$sharedstatedir,;t t
-s, at localstatedir@,$localstatedir,;t t
-s, at libdir@,$libdir,;t t
-s, at includedir@,$includedir,;t t
-s, at oldincludedir@,$oldincludedir,;t t
-s, at infodir@,$infodir,;t t
-s, at mandir@,$mandir,;t t
-s, at build_alias@,$build_alias,;t t
-s, at host_alias@,$host_alias,;t t
-s, at target_alias@,$target_alias,;t t
-s, at DEFS@,$DEFS,;t t
-s, at ECHO_C@,$ECHO_C,;t t
-s, at ECHO_N@,$ECHO_N,;t t
-s, at ECHO_T@,$ECHO_T,;t t
-s, at LIBS@,$LIBS,;t t
-s, at INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
-s, at INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
-s, at INSTALL_DATA@,$INSTALL_DATA,;t t
-s, at CYGPATH_W@,$CYGPATH_W,;t t
-s, at PACKAGE@,$PACKAGE,;t t
-s, at VERSION@,$VERSION,;t t
-s, at ACLOCAL@,$ACLOCAL,;t t
-s, at AUTOCONF@,$AUTOCONF,;t t
-s, at AUTOMAKE@,$AUTOMAKE,;t t
-s, at AUTOHEADER@,$AUTOHEADER,;t t
-s, at MAKEINFO@,$MAKEINFO,;t t
-s, at install_sh@,$install_sh,;t t
-s, at STRIP@,$STRIP,;t t
-s, at ac_ct_STRIP@,$ac_ct_STRIP,;t t
-s, at INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
-s, at mkdir_p@,$mkdir_p,;t t
-s, at AWK@,$AWK,;t t
-s, at SET_MAKE@,$SET_MAKE,;t t
-s, at am__leading_dot@,$am__leading_dot,;t t
-s, at AMTAR@,$AMTAR,;t t
-s, at am__tar@,$am__tar,;t t
-s, at am__untar@,$am__untar,;t t
-s, at STARLINK@,$STARLINK,;t t
-s, at STAR_CPPFLAGS@,$STAR_CPPFLAGS,;t t
-s, at STAR_FCFLAGS@,$STAR_FCFLAGS,;t t
-s, at STAR_FFLAGS@,$STAR_FFLAGS,;t t
-s, at STAR_LDFLAGS@,$STAR_LDFLAGS,;t t
-s, at build@,$build,;t t
-s, at build_cpu@,$build_cpu,;t t
-s, at build_vendor@,$build_vendor,;t t
-s, at build_os@,$build_os,;t t
-s, at CC@,$CC,;t t
-s, at CFLAGS@,$CFLAGS,;t t
-s, at LDFLAGS@,$LDFLAGS,;t t
-s, at CPPFLAGS@,$CPPFLAGS,;t t
-s, at ac_ct_CC@,$ac_ct_CC,;t t
-s, at EXEEXT@,$EXEEXT,;t t
-s, at OBJEXT@,$OBJEXT,;t t
-s, at DEPDIR@,$DEPDIR,;t t
-s, at am__include@,$am__include,;t t
-s, at am__quote@,$am__quote,;t t
-s, at AMDEP_TRUE@,$AMDEP_TRUE,;t t
-s, at AMDEP_FALSE@,$AMDEP_FALSE,;t t
-s, at AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
-s, at CCDEPMODE@,$CCDEPMODE,;t t
-s, at am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t
-s, at am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
-s, at FC@,$FC,;t t
-s, at FCFLAGS@,$FCFLAGS,;t t
-s, at ac_ct_FC@,$ac_ct_FC,;t t
-s, at C_FC_FCLINK_MAGIC@,$C_FC_FCLINK_MAGIC,;t t
-s, at C_FC_PPFC_FCLINK_MAGIC@,$C_FC_PPFC_FCLINK_MAGIC,;t t
-s, at stardocsdir@,$stardocsdir,;t t
-s, at staretcdir@,$staretcdir,;t t
-s, at starexamplesdir@,$starexamplesdir,;t t
-s, at starfacsdir@,$starfacsdir,;t t
-s, at starhelpdir@,$starhelpdir,;t t
-s, at starnewsdir@,$starnewsdir,;t t
-s, at STAR_DEPENDENCIES_ATTRIBUTES@,$STAR_DEPENDENCIES_ATTRIBUTES,;t t
-s, at STAR_DEPENDENCIES_CHILDREN@,$STAR_DEPENDENCIES_CHILDREN,;t t
-s, at STAR_DOCUMENTATION@,$STAR_DOCUMENTATION,;t t
-s, at PACKAGE_VERSION_MAJOR@,$PACKAGE_VERSION_MAJOR,;t t
-s, at PACKAGE_VERSION_MINOR@,$PACKAGE_VERSION_MINOR,;t t
-s, at PACKAGE_VERSION_RELEASE@,$PACKAGE_VERSION_RELEASE,;t t
-s, at PACKAGE_VERSION_INTEGER@,$PACKAGE_VERSION_INTEGER,;t t
-s, at STAR_MANIFEST_DIR@,$STAR_MANIFEST_DIR,;t t
-s, at GIT@,$GIT,;t t
-s, at STAR_SOURCE_ROOT_DIR@,$STAR_SOURCE_ROOT_DIR,;t t
-s, at PREDIST@,$PREDIST,;t t
-s, at PAX@,$PAX,;t t
-s, at TAR@,$TAR,;t t
-s, at CPP@,$CPP,;t t
-s, at host@,$host,;t t
-s, at host_cpu@,$host_cpu,;t t
-s, at host_vendor@,$host_vendor,;t t
-s, at host_os@,$host_os,;t t
-s, at EGREP@,$EGREP,;t t
-s, at LN_S@,$LN_S,;t t
-s, at ECHO@,$ECHO,;t t
-s, at AR@,$AR,;t t
-s, at ac_ct_AR@,$ac_ct_AR,;t t
-s, at RANLIB@,$RANLIB,;t t
-s, at ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
-s, at CXX@,$CXX,;t t
-s, at CXXFLAGS@,$CXXFLAGS,;t t
-s, at ac_ct_CXX@,$ac_ct_CXX,;t t
-s, at CXXDEPMODE@,$CXXDEPMODE,;t t
-s, at am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t
-s, at am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t
-s, at CXXCPP@,$CXXCPP,;t t
-s, at F77@,$F77,;t t
-s, at FFLAGS@,$FFLAGS,;t t
-s, at ac_ct_F77@,$ac_ct_F77,;t t
-s, at LIBTOOL@,$LIBTOOL,;t t
-s, at NOPIC_TRUE@,$NOPIC_TRUE,;t t
-s, at NOPIC_FALSE@,$NOPIC_FALSE,;t t
-s, at NOTHREADS_TRUE@,$NOTHREADS_TRUE,;t t
-s, at NOTHREADS_FALSE@,$NOTHREADS_FALSE,;t t
-s, at THREADS@,$THREADS,;t t
-s, at FCLIBS@,$FCLIBS,;t t
-s, at PERL@,$PERL,;t t
-s, at REAL_FUNCTION_TYPE@,$REAL_FUNCTION_TYPE,;t t
-s, at TRAIL_TYPE@,$TRAIL_TYPE,;t t
-s, at MESSGEN@,$MESSGEN,;t t
-s, at LATEX2DVI@,$LATEX2DVI,;t t
-s, at STAR_LATEX_DOCUMENTATION@,$STAR_LATEX_DOCUMENTATION,;t t
-s, at STAR2HTML@,$STAR2HTML,;t t
-s, at PROLAT@,$PROLAT,;t t
-s, at LIBOBJS@,$LIBOBJS,;t t
-s, at LTLIBOBJS@,$LTLIBOBJS,;t t
-CEOF
-
-_ACEOF
-
- cat >>$CONFIG_STATUS <<\_ACEOF
- # Split the substitutions into bite-sized pieces for seds with
- # small command number limits, like on Digital OSF/1 and HP-UX.
- ac_max_sed_lines=48
- ac_sed_frag=1 # Number of current file.
- ac_beg=1 # First line for current file.
- ac_end=$ac_max_sed_lines # Line after last line for current file.
- ac_more_lines=:
- ac_sed_cmds=
- while $ac_more_lines; do
- if test $ac_beg -gt 1; then
- sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
- else
- sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
- fi
- if test ! -s $tmp/subs.frag; then
- ac_more_lines=false
- else
- # The purpose of the label and of the branching condition is to
- # speed up the sed processing (if there are no `@' at all, there
- # is no need to browse any of the substitutions).
- # These are the two extra sed commands mentioned above.
- (echo ':t
- /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
- if test -z "$ac_sed_cmds"; then
- ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
- else
- ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
- fi
- ac_sed_frag=`expr $ac_sed_frag + 1`
- ac_beg=$ac_end
- ac_end=`expr $ac_end + $ac_max_sed_lines`
- fi
- done
- if test -z "$ac_sed_cmds"; then
- ac_sed_cmds=cat
- fi
-fi # test -n "$CONFIG_FILES"
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case $ac_file in
- - | *:- | *:-:* ) # input from stdin
- cat >$tmp/stdin
- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- * ) ac_file_in=$ac_file.in ;;
- esac
-
- # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
- ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- { if $as_mkdir_p; then
- mkdir -p "$ac_dir"
- else
- as_dir="$ac_dir"
- as_dirs=
- while test ! -d "$as_dir"; do
- as_dirs="$as_dir $as_dirs"
- as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- done
- test ! -n "$as_dirs" || mkdir $as_dirs
- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
- { (exit 1); exit 1; }; }; }
-
- ac_builddir=.
-
-if test "$ac_dir" != .; then
- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
- # A "../" for each directory in $ac_dir_suffix.
- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
- ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
- .) # No --srcdir option. We are building in place.
- ac_srcdir=.
- if test -z "$ac_top_builddir"; then
- ac_top_srcdir=.
- else
- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
- fi ;;
- [\\/]* | ?:[\\/]* ) # Absolute path.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir ;;
- *) # Relative path.
- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
- case "$ac_dir" in
- .) ac_abs_builddir=`pwd`;;
- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
- *) ac_abs_builddir=`pwd`/"$ac_dir";;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
- case ${ac_top_builddir}. in
- .) ac_abs_top_builddir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
- case $ac_srcdir in
- .) ac_abs_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
- case $ac_top_srcdir in
- .) ac_abs_top_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
- esac;;
-esac
-
-
- case $INSTALL in
- [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
- esac
-
- if test x"$ac_file" != x-; then
- { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
- rm -f "$ac_file"
- fi
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- if test x"$ac_file" = x-; then
- configure_input=
- else
- configure_input="$ac_file. "
- fi
- configure_input=$configure_input"Generated from `echo $ac_file_in |
- sed 's,.*/,,'` by configure."
-
- # First look for the input files in the build tree, otherwise in the
- # src tree.
- ac_file_inputs=`IFS=:
- for f in $ac_file_in; do
- case $f in
- -) echo $tmp/stdin ;;
- [\\/$]*)
- # Absolute (can't be DOS-style, as IFS=:)
- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- echo "$f";;
- *) # Relative
- if test -f "$f"; then
- # Build tree
- echo "$f"
- elif test -f "$srcdir/$f"; then
- # Source tree
- echo "$srcdir/$f"
- else
- # /dev/null tree
- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- fi;;
- esac
- done` || { (exit 1); exit 1; }
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
- sed "$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s, at configure_input@,$configure_input,;t t
-s, at srcdir@,$ac_srcdir,;t t
-s, at abs_srcdir@,$ac_abs_srcdir,;t t
-s, at top_srcdir@,$ac_top_srcdir,;t t
-s, at abs_top_srcdir@,$ac_abs_top_srcdir,;t t
-s, at builddir@,$ac_builddir,;t t
-s, at abs_builddir@,$ac_abs_builddir,;t t
-s, at top_builddir@,$ac_top_builddir,;t t
-s, at abs_top_builddir@,$ac_abs_top_builddir,;t t
-s, at INSTALL@,$ac_INSTALL,;t t
-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
- rm -f $tmp/stdin
- if test x"$ac_file" != x-; then
- mv $tmp/out $ac_file
- else
- cat $tmp/out
- rm -f $tmp/out
- fi
-
- # Run the commands associated with the file.
- case $ac_file in
- ast_cpp ) chmod +x ast_cpp ;;
- esac
-done
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-#
-# CONFIG_HEADER section.
-#
-
-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
-# NAME is the cpp macro being defined and VALUE is the value it is being given.
-#
-# ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
-ac_dB='[ ].*$,\1#\2'
-ac_dC=' '
-ac_dD=',;t'
-# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_uB='$,\1#\2define\3'
-ac_uC=' '
-ac_uD=',;t'
-
-for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case $ac_file in
- - | *:- | *:-:* ) # input from stdin
- cat >$tmp/stdin
- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- * ) ac_file_in=$ac_file.in ;;
- esac
-
- test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-
- # First look for the input files in the build tree, otherwise in the
- # src tree.
- ac_file_inputs=`IFS=:
- for f in $ac_file_in; do
- case $f in
- -) echo $tmp/stdin ;;
- [\\/$]*)
- # Absolute (can't be DOS-style, as IFS=:)
- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- # Do quote $f, to prevent DOS paths from being IFS'd.
- echo "$f";;
- *) # Relative
- if test -f "$f"; then
- # Build tree
- echo "$f"
- elif test -f "$srcdir/$f"; then
- # Source tree
- echo "$srcdir/$f"
- else
- # /dev/null tree
- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- fi;;
- esac
- done` || { (exit 1); exit 1; }
- # Remove the trailing spaces.
- sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
-
-_ACEOF
-
-# Transform confdefs.h into two sed scripts, `conftest.defines' and
-# `conftest.undefs', that substitutes the proper values into
-# config.h.in to produce config.h. The first handles `#define'
-# templates, and the second `#undef' templates.
-# And first: Protect against being on the right side of a sed subst in
-# config.status. Protect against being in an unquoted here document
-# in config.status.
-rm -f conftest.defines conftest.undefs
-# Using a here document instead of a string reduces the quoting nightmare.
-# Putting comments in sed scripts is not portable.
-#
-# `end' is used to avoid that the second main sed command (meant for
-# 0-ary CPP macros) applies to n-ary macro definitions.
-# See the Autoconf documentation for `clear'.
-cat >confdef2sed.sed <<\_ACEOF
-s/[\\&,]/\\&/g
-s,[\\$`],\\&,g
-t clear
-: clear
-s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
-t end
-s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
-: end
-_ACEOF
-# If some macros were called several times there might be several times
-# the same #defines, which is useless. Nevertheless, we may not want to
-# sort them, since we want the *last* AC-DEFINE to be honored.
-uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
-sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
-rm -f confdef2sed.sed
-
-# This sed command replaces #undef with comments. This is necessary, for
-# example, in the case of _POSIX_SOURCE, which is predefined and required
-# on some systems where configure will not decide to define it.
-cat >>conftest.undefs <<\_ACEOF
-s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
-_ACEOF
-
-# Break up conftest.defines because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
-echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
-echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
-echo ' :' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.defines >/dev/null
-do
- # Write a limited-size here document to $tmp/defines.sed.
- echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
- # Speed up: don't consider the non `#define' lines.
- echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
- # Work around the forget-to-reset-the-flag bug.
- echo 't clr' >>$CONFIG_STATUS
- echo ': clr' >>$CONFIG_STATUS
- sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
- echo 'CEOF
- sed -f $tmp/defines.sed $tmp/in >$tmp/out
- rm -f $tmp/in
- mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
- sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
- rm -f conftest.defines
- mv conftest.tail conftest.defines
-done
-rm -f conftest.defines
-echo ' fi # grep' >>$CONFIG_STATUS
-echo >>$CONFIG_STATUS
-
-# Break up conftest.undefs because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo ' # Handle all the #undef templates' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.undefs >/dev/null
-do
- # Write a limited-size here document to $tmp/undefs.sed.
- echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
- # Speed up: don't consider the non `#undef'
- echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
- # Work around the forget-to-reset-the-flag bug.
- echo 't clr' >>$CONFIG_STATUS
- echo ': clr' >>$CONFIG_STATUS
- sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
- echo 'CEOF
- sed -f $tmp/undefs.sed $tmp/in >$tmp/out
- rm -f $tmp/in
- mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
- sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
- rm -f conftest.undefs
- mv conftest.tail conftest.undefs
-done
-rm -f conftest.undefs
-
-cat >>$CONFIG_STATUS <<\_ACEOF
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- if test x"$ac_file" = x-; then
- echo "/* Generated by configure. */" >$tmp/config.h
- else
- echo "/* $ac_file. Generated by configure. */" >$tmp/config.h
- fi
- cat $tmp/in >>$tmp/config.h
- rm -f $tmp/in
- if test x"$ac_file" != x-; then
- if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
- { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-echo "$as_me: $ac_file is unchanged" >&6;}
- else
- ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- { if $as_mkdir_p; then
- mkdir -p "$ac_dir"
- else
- as_dir="$ac_dir"
- as_dirs=
- while test ! -d "$as_dir"; do
- as_dirs="$as_dir $as_dirs"
- as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- done
- test ! -n "$as_dirs" || mkdir $as_dirs
- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
- { (exit 1); exit 1; }; }; }
-
- rm -f $ac_file
- mv $tmp/config.h $ac_file
- fi
- else
- cat $tmp/config.h
- rm -f $tmp/config.h
- fi
-# Compute $ac_file's index in $config_headers.
-_am_stamp_count=1
-for _am_header in $config_headers :; do
- case $_am_header in
- $ac_file | $ac_file:* )
- break ;;
- * )
- _am_stamp_count=`expr $_am_stamp_count + 1` ;;
- esac
-done
-echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
-$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X$ac_file : 'X\(//\)[^/]' \| \
- X$ac_file : 'X\(//\)$' \| \
- X$ac_file : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X$ac_file |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`/stamp-h$_am_stamp_count
-done
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-#
-# CONFIG_COMMANDS section.
-#
-for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
- ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
- ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
-$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_dest" : 'X\(//\)[^/]' \| \
- X"$ac_dest" : 'X\(//\)$' \| \
- X"$ac_dest" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$ac_dest" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- { if $as_mkdir_p; then
- mkdir -p "$ac_dir"
- else
- as_dir="$ac_dir"
- as_dirs=
- while test ! -d "$as_dir"; do
- as_dirs="$as_dir $as_dirs"
- as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- done
- test ! -n "$as_dirs" || mkdir $as_dirs
- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
- { (exit 1); exit 1; }; }; }
-
- ac_builddir=.
-
-if test "$ac_dir" != .; then
- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
- # A "../" for each directory in $ac_dir_suffix.
- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
- ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
- .) # No --srcdir option. We are building in place.
- ac_srcdir=.
- if test -z "$ac_top_builddir"; then
- ac_top_srcdir=.
- else
- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
- fi ;;
- [\\/]* | ?:[\\/]* ) # Absolute path.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir ;;
- *) # Relative path.
- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
- case "$ac_dir" in
- .) ac_abs_builddir=`pwd`;;
- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
- *) ac_abs_builddir=`pwd`/"$ac_dir";;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
- case ${ac_top_builddir}. in
- .) ac_abs_top_builddir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
- case $ac_srcdir in
- .) ac_abs_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
- case $ac_top_srcdir in
- .) ac_abs_top_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
- esac;;
-esac
-
-
- { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
-echo "$as_me: executing $ac_dest commands" >&6;}
- case $ac_dest in
- depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
- # Strip MF so we end up with the name of the file.
- mf=`echo "$mf" | sed -e 's/:.*$//'`
- # Check whether this is an Automake generated Makefile or not.
- # We used to match only the files named `Makefile.in', but
- # some people rename them; so instead we look at the file content.
- # Grep'ing the first line is not enough: some people post-process
- # each Makefile.in and add a new line on top of each file to say so.
- # So let's grep whole file.
- if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
- dirpart=`(dirname "$mf") 2>/dev/null ||
-$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$mf" : 'X\(//\)[^/]' \| \
- X"$mf" : 'X\(//\)$' \| \
- X"$mf" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$mf" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- else
- continue
- fi
- # Extract the definition of DEPDIR, am__include, and am__quote
- # from the Makefile without running `make'.
- DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
- test -z "$DEPDIR" && continue
- am__include=`sed -n 's/^am__include = //p' < "$mf"`
- test -z "am__include" && continue
- am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
- # When using ansi2knr, U may be empty or an underscore; expand it
- U=`sed -n 's/^U = //p' < "$mf"`
- # Find all dependency output files, they are included files with
- # $(DEPDIR) in their names. We invoke sed twice because it is the
- # simplest approach to changing $(DEPDIR) to its actual value in the
- # expansion.
- for file in `sed -n "
- s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
- sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
- # Make sure the directory exists.
- test -f "$dirpart/$file" && continue
- fdir=`(dirname "$file") 2>/dev/null ||
-$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$file" : 'X\(//\)[^/]' \| \
- X"$file" : 'X\(//\)$' \| \
- X"$file" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- { if $as_mkdir_p; then
- mkdir -p $dirpart/$fdir
- else
- as_dir=$dirpart/$fdir
- as_dirs=
- while test ! -d "$as_dir"; do
- as_dirs="$as_dir $as_dirs"
- as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- done
- test ! -n "$as_dirs" || mkdir $as_dirs
- fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
-echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
- { (exit 1); exit 1; }; }; }
-
- # echo "creating $dirpart/$file"
- echo '# dummy' > "$dirpart/$file"
- done
-done
- ;;
- esac
-done
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-{ (exit 0); exit 0; }
-_ACEOF
-chmod +x $CONFIG_STATUS
-ac_clean_files=$ac_clean_files_save
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded. So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status. When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
- ac_cs_success=:
- ac_config_status_args=
- test "$silent" = yes &&
- ac_config_status_args="$ac_config_status_args --quiet"
- exec 5>/dev/null
- $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
- exec 5>>config.log
- # Use ||, not &&, to avoid exiting from the if with $? = 1, which
- # would make configure fail if this is the last instruction.
- $ac_cs_success || { (exit 1); exit 1; }
-fi
-
diff --git a/ast-5.3-1/configure.ac b/ast-5.3-1/configure.ac
deleted file mode 100644
index 074bc21..0000000
--- a/ast-5.3-1/configure.ac
+++ /dev/null
@@ -1,160 +0,0 @@
-dnl Process this file with autoconf to produce a configure script
-AC_REVISION($Revision: 1.1.1.1 $)
-
-dnl This configure file is known to work with autoconf-2.57,
-dnl automake versions 1.6.3 and 1.7.5, and libtool versions 1.4.2 and
-dnl 1.5. It should work with autoconf versions 2.50 or better, and
-dnl automake 1.6 or better.
-
-dnl Initialisation: package name and version number
-AC_INIT(ast, 5.3-1, ussc at star.rl.ac.uk)
-
-dnl Require autoconf-2.50 at least
-AC_PREREQ(2.50)
-dnl Require Starlink automake
-AM_INIT_AUTOMAKE(1.8.2-starlink)
-
-dnl Sanity-check: name a file in the source directory
-AC_CONFIG_SRCDIR([ast_link.in])
-
-# Include defaults for Starlink configurations
-STAR_DEFAULTS
-
-# See if the --with-starmem option has been provided. This sets the
-# preprocesor macro HAVE_STAR_MEM_H.
-AC_ARG_WITH(
- [starmem],
- AC_HELP_STRING([--with-starmem],
- [use starmem library for memory management]),
- AC_DEFINE([HAVE_STAR_MEM_H],[1],[Use the starmem library for memory management]),
-)
-
-# See if the --with-memdebug option has been provided. This sets the
-# preprocesor macro MEM_DEBUG which enables facilities used to track
-# down memory leaks, etc.
-AC_ARG_WITH(
- [memdebug],
- AC_HELP_STRING([--with-memdebug],
- [enable AST memory leak debugging functions]),
- AC_DEFINE([MEM_DEBUG],[1],[enable AST memory leak debugging functions in memory.c]),
-)
-
-# Checks for programs
-AC_PROG_CC
-AC_PROG_CPP
-AC_PROG_LIBTOOL
-AC_PROG_LN_S
-
-# If --with-pic=no is set we should honour that.
-AM_CONDITIONAL(NOPIC, test x$pic_mode = xno)
-
-# Conditional defining whether we build with POSIX thread support.
-AC_ARG_WITH([pthreads],
- [ --without-pthreads Build package without POSIX threads support],
- if test "$withval" = "yes"; then
- use_pthreads="1"
- else
- use_pthreads="0"
- fi,
- use_pthreads="1")
-if test "$use_pthreads" = "1"; then
-AC_CHECK_LIB([pthread], [pthread_create], ,[use_pthreads="0"])
-fi
-AM_CONDITIONAL(NOTHREADS, test x$use_pthreads = x0)
-AC_SUBST(THREADS, $use_pthreads)
-
-# See which variadic function API to use
-AC_CHECK_HEADERS(stdarg.h varargs.h, break)
-
-# Can we use backtrace?
-AC_CHECK_HEADERS([execinfo.h])
-AC_CHECK_FUNCS([backtrace])
-
-# Do we have reentrant strerror and strtok?
-AC_CHECK_FUNCS([strerror_r strtok_r])
-
-# See if we have long doubles (used by the Mapping and Region classes)
-AC_CHECK_TYPES([long double])
-
-# ast_link needs to be able to link against the Fortran runtime if
-# necessary
-AC_FC_LIBRARY_LDFLAGS
-
-# Find an absolute path to the Perl binary, augmenting the path with the
-# location of the Starlink Perl build. If this fails, then set @PERL@
-# to the backup `/usr/bin/env perl', which will find Perl if it exists
-# in the path at runtime.
-AC_PATH_PROG(PERL, perl, [/usr/bin/env perl], [$STARLINK/Perl/bin:$PATH])
-
-# Function and declaration checks
-AC_CHECK_FUNCS([isnan])
-AC_CHECK_DECLS([isnan],,,[#include <math.h>
- ])
-STAR_DECLARE_DEPENDENCIES(sourceset, [sst htx])
-STAR_DECLARE_DEPENDENCIES(build, sla)
-
-# Perform the check that configures f77.h.in for the return type of REAL
-# Fortran functions. On 64-bit g77 with f2c compatibility this is double
-# not float.
-STAR_CNF_F2C_COMPATIBLE
-
-# Determine the type of Fortran character string lengths.
-STAR_CNF_TRAIL_TYPE
-
-# Declare the message file.
-STAR_MESSGEN(ast_err.msg)
-
-# Test for non-ANSI behaviour in sscanf on some platforms, reported by
-# Bill Joye. Also check for bad MINGW sscanf. That returns nc=0 in the
-# System test.
-AC_MSG_CHECKING([whether the sscanf function is ANSI-compatible])
-AC_RUN_IFELSE([AC_LANG_SOURCE([[
-
-#include <stdio.h>
-#include <stdlib.h>
-
-int main() {
- char foo[] = " name 1111.1 ";
- char mingw[] = "system= FK4_NO_E";
-
- char bar[8];
- float ff;
- int system;
- int nc;
- int r;
-
- nc = 0;
- r = sscanf(foo, " %s %f %n", bar, &ff, &nc);
-
- if ( nc == 13 ) {
- nc = 0;
- r = sscanf( mingw, "system= %n%*s %n", &system, &nc );
- if ( nc != 0 ) nc = 13;
- }
- exit( ( nc != 13 ) ? 0 : 1 );
-}
-
-]])],[
- AC_MSG_RESULT([no]);AC_DEFINE([HAVE_NONANSI_SSCANF],[1],[The sscanf shows the non-ANSI behaviour reported by Bill Joye])
-],[AC_MSG_RESULT([yes])],[
- AC_DEFINE([HAVE_NONANSI_SSCANF],[1],[The sscanf may show the non-ANSI behaviour reported by Bill Joye])
-])
-
-# Declare the documentation. We need to do complicated things to
-# satisfy these targets, so give a non-null value
-# for the second argument, to suppress automatic generation of
-# rules.
-STAR_LATEX_DOCUMENTATION([sun210 sun211], [sun210.ps sun210.tex sun211.ps sun211.tex sun210.htx_tar sun211.htx_tar])
-STAR_PREDIST_SOURCES(sun_master.tex)
-STAR_CHECK_PROGS(star2html)
-STAR_CHECK_PROGS(prolat, sst) # prolat is part of SST
-
-AC_CONFIG_HEADERS(config.h)
-
-AC_CONFIG_FILES(Makefile component.xml ast_link object.h f77.h)
-AC_CONFIG_FILES([ast_cpp], [chmod +x ast_cpp])
-# Following are files which are substituted by the Makefile at
-# distribution time, rather than by configure. They are not distributed.
-STAR_PREDIST_SOURCES(version.h.in builddocs.in addversion.in)
-
-AC_OUTPUT
diff --git a/ast-5.3-1/depcomp b/ast-5.3-1/depcomp
deleted file mode 100755
index 04701da..0000000
--- a/ast-5.3-1/depcomp
+++ /dev/null
@@ -1,530 +0,0 @@
-#! /bin/sh
-# depcomp - compile a program generating dependencies as side-effects
-
-scriptversion=2005-07-09.11
-
-# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Originally written by Alexandre Oliva <oliva at dcc.unicamp.br>.
-
-case $1 in
- '')
- echo "$0: No command. Try \`$0 --help' for more information." 1>&2
- exit 1;
- ;;
- -h | --h*)
- cat <<\EOF
-Usage: depcomp [--help] [--version] PROGRAM [ARGS]
-
-Run PROGRAMS ARGS to compile a file, generating dependencies
-as side-effects.
-
-Environment variables:
- depmode Dependency tracking mode.
- source Source file read by `PROGRAMS ARGS'.
- object Object file output by `PROGRAMS ARGS'.
- DEPDIR directory where to store dependencies.
- depfile Dependency file to output.
- tmpdepfile Temporary file to use when outputing dependencies.
- libtool Whether libtool is used (yes/no).
-
-Report bugs to <bug-automake at gnu.org>.
-EOF
- exit $?
- ;;
- -v | --v*)
- echo "depcomp $scriptversion"
- exit $?
- ;;
-esac
-
-if test -z "$depmode" || test -z "$source" || test -z "$object"; then
- echo "depcomp: Variables source, object and depmode must be set" 1>&2
- exit 1
-fi
-
-# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
-depfile=${depfile-`echo "$object" |
- sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
-tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
-
-rm -f "$tmpdepfile"
-
-# Some modes work just like other modes, but use different flags. We
-# parameterize here, but still list the modes in the big case below,
-# to make depend.m4 easier to write. Note that we *cannot* use a case
-# here, because this file can only contain one case statement.
-if test "$depmode" = hp; then
- # HP compiler uses -M and no extra arg.
- gccflag=-M
- depmode=gcc
-fi
-
-if test "$depmode" = dashXmstdout; then
- # This is just like dashmstdout with a different argument.
- dashmflag=-xM
- depmode=dashmstdout
-fi
-
-case "$depmode" in
-gcc3)
-## gcc 3 implements dependency tracking that does exactly what
-## we want. Yay! Note: for some reason libtool 1.4 doesn't like
-## it if -MD -MP comes after the -MF stuff. Hmm.
- "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
- stat=$?
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile"
- exit $stat
- fi
- mv "$tmpdepfile" "$depfile"
- ;;
-
-gcc)
-## There are various ways to get dependency output from gcc. Here's
-## why we pick this rather obscure method:
-## - Don't want to use -MD because we'd like the dependencies to end
-## up in a subdir. Having to rename by hand is ugly.
-## (We might end up doing this anyway to support other compilers.)
-## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
-## -MM, not -M (despite what the docs say).
-## - Using -M directly means running the compiler twice (even worse
-## than renaming).
- if test -z "$gccflag"; then
- gccflag=-MD,
- fi
- "$@" -Wp,"$gccflag$tmpdepfile"
- stat=$?
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile"
- exit $stat
- fi
- rm -f "$depfile"
- echo "$object : \\" > "$depfile"
- alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
-## The second -e expression handles DOS-style file names with drive letters.
- sed -e 's/^[^:]*: / /' \
- -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
-## This next piece of magic avoids the `deleted header file' problem.
-## The problem is that when a header file which appears in a .P file
-## is deleted, the dependency causes make to die (because there is
-## typically no way to rebuild the header). We avoid this by adding
-## dummy dependencies for each header file. Too bad gcc doesn't do
-## this for us directly.
- tr ' ' '
-' < "$tmpdepfile" |
-## Some versions of gcc put a space before the `:'. On the theory
-## that the space means something, we add a space to the output as
-## well.
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly. Breaking it into two sed invocations is a workaround.
- sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
- rm -f "$tmpdepfile"
- ;;
-
-hp)
- # This case exists only to let depend.m4 do its work. It works by
- # looking at the text of this script. This case will never be run,
- # since it is checked for above.
- exit 1
- ;;
-
-sgi)
- if test "$libtool" = yes; then
- "$@" "-Wp,-MDupdate,$tmpdepfile"
- else
- "$@" -MDupdate "$tmpdepfile"
- fi
- stat=$?
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile"
- exit $stat
- fi
- rm -f "$depfile"
-
- if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
- echo "$object : \\" > "$depfile"
-
- # Clip off the initial element (the dependent). Don't try to be
- # clever and replace this with sed code, as IRIX sed won't handle
- # lines with more than a fixed number of characters (4096 in
- # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
- # the IRIX cc adds comments like `#:fec' to the end of the
- # dependency line.
- tr ' ' '
-' < "$tmpdepfile" \
- | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
- tr '
-' ' ' >> $depfile
- echo >> $depfile
-
- # The second pass generates a dummy entry for each header file.
- tr ' ' '
-' < "$tmpdepfile" \
- | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
- >> $depfile
- else
- # The sourcefile does not contain any dependencies, so just
- # store a dummy comment line, to avoid errors with the Makefile
- # "include basename.Plo" scheme.
- echo "#dummy" > "$depfile"
- fi
- rm -f "$tmpdepfile"
- ;;
-
-aix)
- # The C for AIX Compiler uses -M and outputs the dependencies
- # in a .u file. In older versions, this file always lives in the
- # current directory. Also, the AIX compiler puts `$object:' at the
- # start of each line; $object doesn't have directory information.
- # Version 6 uses the directory in both cases.
- stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
- tmpdepfile="$stripped.u"
- if test "$libtool" = yes; then
- "$@" -Wc,-M
- else
- "$@" -M
- fi
- stat=$?
-
- if test -f "$tmpdepfile"; then :
- else
- stripped=`echo "$stripped" | sed 's,^.*/,,'`
- tmpdepfile="$stripped.u"
- fi
-
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile"
- exit $stat
- fi
-
- if test -f "$tmpdepfile"; then
- outname="$stripped.o"
- # Each line is of the form `foo.o: dependent.h'.
- # Do two passes, one to just change these to
- # `$object: dependent.h' and one to simply `dependent.h:'.
- sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
- sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
- else
- # The sourcefile does not contain any dependencies, so just
- # store a dummy comment line, to avoid errors with the Makefile
- # "include basename.Plo" scheme.
- echo "#dummy" > "$depfile"
- fi
- rm -f "$tmpdepfile"
- ;;
-
-icc)
- # Intel's C compiler understands `-MD -MF file'. However on
- # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
- # ICC 7.0 will fill foo.d with something like
- # foo.o: sub/foo.c
- # foo.o: sub/foo.h
- # which is wrong. We want:
- # sub/foo.o: sub/foo.c
- # sub/foo.o: sub/foo.h
- # sub/foo.c:
- # sub/foo.h:
- # ICC 7.1 will output
- # foo.o: sub/foo.c sub/foo.h
- # and will wrap long lines using \ :
- # foo.o: sub/foo.c ... \
- # sub/foo.h ... \
- # ...
-
- "$@" -MD -MF "$tmpdepfile"
- stat=$?
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile"
- exit $stat
- fi
- rm -f "$depfile"
- # Each line is of the form `foo.o: dependent.h',
- # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
- # Do two passes, one to just change these to
- # `$object: dependent.h' and one to simply `dependent.h:'.
- sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
- # Some versions of the HPUX 10.20 sed can't process this invocation
- # correctly. Breaking it into two sed invocations is a workaround.
- sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
- sed -e 's/$/ :/' >> "$depfile"
- rm -f "$tmpdepfile"
- ;;
-
-tru64)
- # The Tru64 compiler uses -MD to generate dependencies as a side
- # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
- # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
- # dependencies in `foo.d' instead, so we check for that too.
- # Subdirectories are respected.
- dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
- test "x$dir" = "x$object" && dir=
- base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
-
- if test "$libtool" = yes; then
- # With Tru64 cc, shared objects can also be used to make a
- # static library. This mecanism is used in libtool 1.4 series to
- # handle both shared and static libraries in a single compilation.
- # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
- #
- # With libtool 1.5 this exception was removed, and libtool now
- # generates 2 separate objects for the 2 libraries. These two
- # compilations output dependencies in in $dir.libs/$base.o.d and
- # in $dir$base.o.d. We have to check for both files, because
- # one of the two compilations can be disabled. We should prefer
- # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
- # automatically cleaned when .libs/ is deleted, while ignoring
- # the former would cause a distcleancheck panic.
- tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
- tmpdepfile2=$dir$base.o.d # libtool 1.5
- tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
- tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
- "$@" -Wc,-MD
- else
- tmpdepfile1=$dir$base.o.d
- tmpdepfile2=$dir$base.d
- tmpdepfile3=$dir$base.d
- tmpdepfile4=$dir$base.d
- "$@" -MD
- fi
-
- stat=$?
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
- exit $stat
- fi
-
- for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
- do
- test -f "$tmpdepfile" && break
- done
- if test -f "$tmpdepfile"; then
- sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
- # That's a tab and a space in the [].
- sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
- else
- echo "#dummy" > "$depfile"
- fi
- rm -f "$tmpdepfile"
- ;;
-
-#nosideeffect)
- # This comment above is used by automake to tell side-effect
- # dependency tracking mechanisms from slower ones.
-
-dashmstdout)
- # Important note: in order to support this mode, a compiler *must*
- # always write the preprocessed file to stdout, regardless of -o.
- "$@" || exit $?
-
- # Remove the call to Libtool.
- if test "$libtool" = yes; then
- while test $1 != '--mode=compile'; do
- shift
- done
- shift
- fi
-
- # Remove `-o $object'.
- IFS=" "
- for arg
- do
- case $arg in
- -o)
- shift
- ;;
- $object)
- shift
- ;;
- *)
- set fnord "$@" "$arg"
- shift # fnord
- shift # $arg
- ;;
- esac
- done
-
- test -z "$dashmflag" && dashmflag=-M
- # Require at least two characters before searching for `:'
- # in the target name. This is to cope with DOS-style filenames:
- # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
- "$@" $dashmflag |
- sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
- rm -f "$depfile"
- cat < "$tmpdepfile" > "$depfile"
- tr ' ' '
-' < "$tmpdepfile" | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly. Breaking it into two sed invocations is a workaround.
- sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
- rm -f "$tmpdepfile"
- ;;
-
-dashXmstdout)
- # This case only exists to satisfy depend.m4. It is never actually
- # run, as this mode is specially recognized in the preamble.
- exit 1
- ;;
-
-makedepend)
- "$@" || exit $?
- # Remove any Libtool call
- if test "$libtool" = yes; then
- while test $1 != '--mode=compile'; do
- shift
- done
- shift
- fi
- # X makedepend
- shift
- cleared=no
- for arg in "$@"; do
- case $cleared in
- no)
- set ""; shift
- cleared=yes ;;
- esac
- case "$arg" in
- -D*|-I*)
- set fnord "$@" "$arg"; shift ;;
- # Strip any option that makedepend may not understand. Remove
- # the object too, otherwise makedepend will parse it as a source file.
- -*|$object)
- ;;
- *)
- set fnord "$@" "$arg"; shift ;;
- esac
- done
- obj_suffix="`echo $object | sed 's/^.*\././'`"
- touch "$tmpdepfile"
- ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
- rm -f "$depfile"
- cat < "$tmpdepfile" > "$depfile"
- sed '1,2d' "$tmpdepfile" | tr ' ' '
-' | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly. Breaking it into two sed invocations is a workaround.
- sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
- rm -f "$tmpdepfile" "$tmpdepfile".bak
- ;;
-
-cpp)
- # Important note: in order to support this mode, a compiler *must*
- # always write the preprocessed file to stdout.
- "$@" || exit $?
-
- # Remove the call to Libtool.
- if test "$libtool" = yes; then
- while test $1 != '--mode=compile'; do
- shift
- done
- shift
- fi
-
- # Remove `-o $object'.
- IFS=" "
- for arg
- do
- case $arg in
- -o)
- shift
- ;;
- $object)
- shift
- ;;
- *)
- set fnord "$@" "$arg"
- shift # fnord
- shift # $arg
- ;;
- esac
- done
-
- "$@" -E |
- sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
- -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
- sed '$ s: \\$::' > "$tmpdepfile"
- rm -f "$depfile"
- echo "$object : \\" > "$depfile"
- cat < "$tmpdepfile" >> "$depfile"
- sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
- rm -f "$tmpdepfile"
- ;;
-
-msvisualcpp)
- # Important note: in order to support this mode, a compiler *must*
- # always write the preprocessed file to stdout, regardless of -o,
- # because we must use -o when running libtool.
- "$@" || exit $?
- IFS=" "
- for arg
- do
- case "$arg" in
- "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
- set fnord "$@"
- shift
- shift
- ;;
- *)
- set fnord "$@" "$arg"
- shift
- shift
- ;;
- esac
- done
- "$@" -E |
- sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
- rm -f "$depfile"
- echo "$object : \\" > "$depfile"
- . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
- echo " " >> "$depfile"
- . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
- rm -f "$tmpdepfile"
- ;;
-
-none)
- exec "$@"
- ;;
-
-*)
- echo "Unknown depmode $depmode" 1>&2
- exit 1
- ;;
-esac
-
-exit 0
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/ast-5.3-1/dsbspecframe.c b/ast-5.3-1/dsbspecframe.c
deleted file mode 100644
index 12a2a3a..0000000
--- a/ast-5.3-1/dsbspecframe.c
+++ /dev/null
@@ -1,3172 +0,0 @@
-/*
-*class++
-* Name:
-* DSBSpecFrame
-
-* Purpose:
-* Dual sideband spectral coordinate system description.
-
-* Constructor Function:
-c astDSBSpecFrame
-f AST_DSBSPECFRAME
-
-* Description:
-* A DSBSpecFrame is a specialised form of SpecFrame which represents
-* positions in a spectrum obtained using a dual sideband instrument.
-* Such an instrument produces a spectrum in which each point contains
-* contributions from two distinctly different frequencies, one from
-* the "lower side band" (LSB) and one from the "upper side band" (USB).
-* Corresponding LSB and USB frequencies are connected by the fact
-* that they are an equal distance on either side of a fixed central
-* frequency known as the "Local Oscillator" (LO) frequency.
-*
-* When quoting a position within such a spectrum, it is necessary to
-* indicate whether the quoted position is the USB position or the
-* corresponding LSB position. The SideBand attribute provides this
-* indication. Another option that the SideBand attribute provides is
-* to represent a spectral position by its topocentric offset from the
-* LO frequency.
-*
-* In practice, the LO frequency is specified by giving the distance
-* from the LO frequency to some "central" spectral position. Typically
-* this central position is that of some interesting spectral feature.
-* The distance from this central position to the LO frequency is known
-* as the "intermediate frequency" (IF). The value supplied for IF can
-* be a signed value in order to indicate whether the LO frequency is
-* above or below the central position.
-
-* Inheritance:
-* The DSBSpecFrame class inherits from the SpecFrame class.
-
-* Attributes:
-* In addition to those attributes common to all SpecFrames, every
-* DSBSpecFrame also has the following attributes:
-*
-* - AlignSideBand: Should alignment occur between sidebands?
-* - DSBCentre: The central position of interest.
-* - IF: The intermediate frequency used to define the LO frequency.
-* - ImagFreq: The image sideband equivalent of the rest frequency.
-* - SideBand: Indicates which sideband the DSBSpecFrame represents.
-
-* Functions:
-c The DSBSpecFrame class does not define any new functions beyond those
-f The DSBSpecFrame class does not define any new routines beyond those
-* which are applicable to all SpecFrames.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David Berry (Starlink)
-
-* History:
-* 5-AUG-2004 (DSB):
-* Original version.
-* 7-OCT-2004 (DSB):
-* Fixed SetAttrib code which assigns values to SideBand. Previously
-* all supplied values were ignored, leaving SideBand unchanged.
-* 2-SEP-2005 (DSB):
-* Allow conversion in any Domain within TopoMap (sometimes
-* SpecFrames have a new Domain set which is not equal to SPECTRUM").
-* 12-SEP-2005 (DSB):
-* Set all attributes required to described the RestFreq value
-* before determining Mapping from RestFreq to ImagFreq in
-* GetImageFreq.
-* 2-DEC-2005 (DSB):
-* Change default Domain from SPECTRUM to DSBSPECTRUM
-* 3-APR-2006 (DSB):
-* Fix memory leak in astLoadDSBSpecFrame.
-* 6-OCT-2006 (DSB):
-* Guard against annulling null pointers in subFrame.
-* 27-OCT-2006 (DSB):
-* Added AlignSideBand attribute.
-* 31-OCT-2006 (DSB):
-* Use AlignSideBand attribute in SubFrame only if we are not
-* currently restoring a FrameSet's integrity.
-* 31-JAN-2007 (DSB):
-* Modified so that a DSBSpecFrame can be used as a template to find a
-* DSBSpecFrame (or SpecFrame) contained within a CmpFrame. This
-* involves changes in Match.
-* 1-MAY-2007 (DSB):
-* The default for AlignSideband has been changed from 1 to 0.
-* 8-MAY-2007 (DSB):
-* Correct initialisation of alignsideband in astInitDSBSpecFrame_.
-* 19-OCT-2007 (DSB):
-* Ignore SideBand alignment if the AlignSideBand attribute is zero
-* in either the target or the template.
-* 16-JAN-2007 (DSB):
-* Modify SubFrame so that DSBSpecFrames are aligned in the
-* observed sideband (LSB or USB) rather than always being aligned
-* in the USB.
-*class--
-
-* Implementation Deficiencies:
-* - The default values for System and StdOfRest inherited from the
-* SpecFrame class are "Wave" and "Heliocentric". These are not
-* usually what is wanted for a DSB instrument. Defaults such as
-* "Freq" and "Topo" may be more appropriate. However, changing the
-* defaults inherited from SpecFrame may cause problems in the
-* astConvert algorithm. The astConvertX function in frame.c includes
-* the following implementation deficiency warning: "One likely
-* problem is with attributes which default in both the source and
-* destination Frames. This means they also default in the common
-* coordinate system. If these default values were to differ when
-* matching different target Frames, however, we would be in trouble,
-* because the common coordinate system would not then be remaining
-* constant. The longer-term solution to this is probably to provide
-* some mechanism to "fix" all attribute values for a Frame, by taking
-* any attributes that are un-set and explicitly setting a firm value
-* (equal to the default) so they cannot then change". So the defaults
-* should probably be left unchanged until this fix is made.
-
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS DSBSpecFrame
-
-#define BADSB -9999
-#define FIRST_SB -1
-#define LSB -1
-#define LO 0
-#define USB 1
-#define LAST_SB 1
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory management facilities */
-#include "object.h" /* Base Object class */
-#include "channel.h" /* I/O channels */
-#include "specframe.h" /* Spectral frames (parent class) */
-#include "unit.h" /* Unit handling */
-#include "cmpmap.h" /* Compound Mappings */
-#include "unitmap.h" /* Unit Mappings */
-#include "winmap.h" /* Window Mappings */
-#include "dsbspecframe.h" /* Interface definition for this class */
-#include "globals.h" /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static const char *(* parent_getlabel)( AstFrame *, int, int * );
-static int (* parent_match)( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int (* parent_subframe)( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static void (* parent_overlay)( AstFrame *, const int *, AstFrame *, int * );
-static const char *(* parent_getdomain)( AstFrame *, int * );
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->GetAttrib_Buff[ 0 ] = 0; \
- globals->GetLabel_Buff[ 0 ] = 0; \
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(DSBSpecFrame)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(DSBSpecFrame,Class_Init)
-#define class_vtab astGLOBAL(DSBSpecFrame,Class_Vtab)
-#define getattrib_buff astGLOBAL(DSBSpecFrame,GetAttrib_Buff)
-#define getlabel_buff astGLOBAL(DSBSpecFrame,GetLabel_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-/* Define the thread-specific globals for this class. */
-
-/* Buffer returned by GetAttrib. */
-static char getattrib_buff[ 101 ];
-
-/* Default Label string buffer */
-static char getlabel_buff[ 101 ];
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstDSBSpecFrameVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstDSBSpecFrame *astDSBSpecFrameId_( const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-
-static AstMapping *TopoMap( AstDSBSpecFrame *, int, const char *, int * );
-static AstMapping *ToLOMapping( AstDSBSpecFrame *, const char *, int * )__attribute__((unused));
-static AstMapping *ToLSBMapping( AstDSBSpecFrame *, const char *, int * );
-static AstMapping *ToUSBMapping( AstDSBSpecFrame *, const char *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static const char *GetLabel( AstFrame *, int, int * );
-static double GetImagFreq( AstDSBSpecFrame *, int * );
-static int Match( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int SubFrame( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void Overlay( AstFrame *, const int *, AstFrame *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void VerifyAttrs( AstDSBSpecFrame *, const char *, const char *, const char *, int * );
-static const char *GetDomain( AstFrame *, int * );
-
-static double GetIF( AstDSBSpecFrame *, int * );
-static int TestIF( AstDSBSpecFrame *, int * );
-static void ClearIF( AstDSBSpecFrame *, int * );
-static void SetIF( AstDSBSpecFrame *, double, int * );
-
-static double GetDSBCentre( AstDSBSpecFrame *, int * );
-static int TestDSBCentre( AstDSBSpecFrame *, int * );
-static void ClearDSBCentre( AstDSBSpecFrame *, int * );
-static void SetDSBCentre( AstDSBSpecFrame *, double, int * );
-
-static int GetSideBand( AstDSBSpecFrame *, int * );
-static int TestSideBand( AstDSBSpecFrame *, int * );
-static void ClearSideBand( AstDSBSpecFrame *, int * );
-static void SetSideBand( AstDSBSpecFrame *, int, int * );
-
-static int GetAlignSideBand( AstDSBSpecFrame *, int * );
-static int TestAlignSideBand( AstDSBSpecFrame *, int * );
-static void ClearAlignSideBand( AstDSBSpecFrame *, int * );
-static void SetAlignSideBand( AstDSBSpecFrame *, int, int * );
-
-
-/* Member functions. */
-/* ================= */
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a DSBSpecFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "dsbspecframe.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* DSBSpecFrame member function (over-rides the astClearAttrib protected
-* method inherited from the SpecFrame class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* DSBSpecFrame, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the DSBSpecFrame.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstDSBSpecFrame *this; /* Pointer to the DSBSpecFrame structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the DSBSpecFrame structure. */
- this = (AstDSBSpecFrame *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* DSBCentre. */
-/* ---------- */
- if ( !strcmp( attrib, "dsbcentre" ) ) {
- astClearDSBCentre( this );
-
-/* IF */
-/* -- */
- } else if ( !strcmp( attrib, "if" ) ) {
- astClearIF( this );
-
-/* SideBand */
-/* -------- */
- } else if ( !strcmp( attrib, "sideband" ) ) {
- astClearSideBand( this );
-
-/* AlignSideBand */
-/* ------------- */
- } else if ( !strcmp( attrib, "alignsideband" ) ) {
- astClearAlignSideBand( this );
-
-/* Read-only attributes. */
-/* --------------------- */
-/* Test if the attribute name matches any of the read-only attributes
- of this class. If it does, then report an error. */
- } else if ( !strcmp( attrib, "imagfreq" ) ) {
- astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
- "value for a %s.", status, attrib, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* If the attribute is not recognised, pass it on to the parent method
- for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a DSBSpecFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "dsbspecframe.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* DSBSpecFrame member function (over-rides the protected astGetAttrib
-* method inherited from the SpecFrame class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a DSBSpecFrame, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the DSBSpecFrame.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the DSBSpecFrame, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the DSBSpecFrame. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstDSBSpecFrame *this; /* Pointer to the DSBSpecFrame structure */
- AstMapping *tmap; /* Ptr to Mapping from topofreq to this */
- const char *result; /* Pointer value to return */
- double dval; /* Attribute value */
- double dtemp; /* Attribute value */
- int ival; /* Attribute value */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the SpecFrame structure. */
- this = (AstDSBSpecFrame *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null-terminated string in an appropriate
- format. Set "result" to point at the result string. */
-
-/* DSBCentre */
-/* --------- */
- if ( !strcmp( attrib, "dsbcentre" ) ) {
-
-/* Get the value as topocentric frequency in Hz. */
- dval = astGetDSBCentre( this );
-
-/* Find the Mapping from topocentric frequency in Hz to the spectral system
- described by this SpecFrame. */
- tmap = TopoMap( this, 0, "astGetAttrib", status );
- if ( astOK ) {
-
-/* Transform the internal value from topocentric frequency into the required
- system. */
- astTran1( tmap, 1, &dval, 1, &dtemp );
- if( dtemp == AST__BAD ) {
- astError( AST__INTER, "astGetAttrib(%s): Cannot convert DSBCentre "
- "value from topocentric frequency to the required "
- "system.", status, astGetClass( this ) );
- } else {
-
-/* Format it. */
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dtemp );
- result = getattrib_buff;
- }
- tmap = astAnnul( tmap );
- }
-
-/* IF */
-/* -- */
- } else if ( !strcmp( attrib, "if" ) ) {
- dval = astGetIF( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval*1.0E-9 );
- result = getattrib_buff;
- }
-
-/* ImagFreq */
-/* -------- */
- } else if ( !strcmp( attrib, "imagfreq" ) ) {
- dval = astGetImagFreq( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval*1.0E-9 );
- result = getattrib_buff;
- }
-
-/* SideBand */
-/* -------- */
- } else if ( !strcmp( attrib, "sideband" ) ) {
- ival = astGetSideBand( this );
- if ( astOK ) {
- result = ( ival == USB ) ? "USB" : (( ival == LO ) ? "LO" : "LSB" );
- }
-
-/* AlignSideBand */
-/* ------------- */
- } else if ( !strcmp( attrib, "alignsideband" ) ) {
- ival = astGetAlignSideBand( this ) ? 1 : 0;
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-
-}
-
-static const char *GetDomain( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetDomain
-
-* Purpose:
-* Obtain a pointer to the Domain attribute string for a DSBSpecFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "dsbspecframe.h"
-* const char *GetDomain( AstFrame *this, int *status )
-
-* Class Membership:
-* DSBSpecFrame member function (over-rides the astGetDomain protected
-* method inherited from the SpecFrame class).
-
-* Description:
-* This function returns a pointer to the Domain attribute string
-* for a DSBSpecFrame.
-
-* Parameters:
-* this
-* Pointer to the DSBSpecFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a constant null-terminated string containing the
-* Domain value.
-
-* Notes:
-* - The returned pointer or the string it refers to may become
-* invalid following further invocation of this function or
-* modification of the DSBSpecFrame.
-* - A NULL pointer is returned if this function is invoked with
-* the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstDSBSpecFrame *this; /* Pointer to DSBSpecFrame structure */
- const char *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the DSBSpecFrame structure. */
- this = (AstDSBSpecFrame *) this_frame;
-
-/* If a Domain attribute string has been set, invoke the parent method
- to obtain a pointer to it. */
- if ( astTestDomain( this ) ) {
- result = (*parent_getdomain)( this_frame, status );
-
-/* Otherwise, provide a pointer to a suitable default string. */
- } else {
- result = "DSBSPECTRUM";
- }
-
-/* Return the result. */
- return result;
-}
-
-static double GetImagFreq( AstDSBSpecFrame *this, int *status ) {
-/*
-*+
-* Name:
-* astGetImagFreq
-
-* Purpose:
-* Get the value of the ImagFreq attribute.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "dsbspecframe.h"
-* double GetImagFreq( AstDSBSpecFrame *this )
-
-* Class Membership:
-* DSBSpecFrame method.
-
-* Description:
-* This function returns the image sideband frequency corresponding to
-* the rest frequency.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-
-* Returned Value:
-* The required frequency, in Hz.
-
-* Notes:
-* - A value of AST__BAD will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstDSBSpecFrame *rf_frame;/* DSBSpecFrame describing the rest frequency */
- AstMapping *map; /* Pointer to "Observed to Image" mapping */
- double result; /* The returned frequency */
- double rf; /* Rest frequency in observed sideband */
- int sb; /* SideBand value */
-
-/* Check the global error status. */
- if ( !astOK ) return AST__BAD;
-
-/* The RestFreq attribute is an observed sideband frequency in the
- source's standard of rest, measured in Hz. Temporaily set attributes
- to these values. Create a copy of the supplied DSBSpecFrame and set
- its attributes to these values. */
- rf_frame = astCopy( this );
- astSetStdOfRest( rf_frame, AST__SCSOR );
- astSetSystem( rf_frame, AST__FREQ );
- astSetUnit( rf_frame, 0, "Hz" );
- astSetC( rf_frame, "SideBand", "observed" );
-
-/* Create a Mapping which transforms positions from the observed to the
- image sideband. */
- sb = astGetSideBand( rf_frame );
- if( sb == USB ) {
- map = ToLSBMapping( rf_frame, "astGetImagFreq", status );
-
- } else if( sb == LSB ) {
- map = ToUSBMapping( rf_frame, "astGetImagFreq", status );
-
- } else {
- map = NULL;
- astError( AST__INTER, "astGetImagFreq(%s): Illegal sideband value "
- "(%d) encountered (internal AST programming error).", status,
- astGetClass( this ), sb );
- }
-
-/* Get the rest frequency in Hz, and transform it using the above Mapping. */
- rf = astGetRestFreq( rf_frame );
- astTran1( map, 1, &rf, 1, &result );
-
-/* Free resources */
- map = astAnnul( map );
- rf_frame = astAnnul( rf_frame );
-
-/* If an error has occurrred, return AST__BAD. */
- if( !astOK ) result = AST__BAD;
-
-/* Return the result. */
- return result;
-
-}
-
-static const char *GetLabel( AstFrame *this, int axis, int *status ) {
-/*
-* Name:
-* GetLabel
-
-* Purpose:
-* Access the Label string for a DSBSpecFrame axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "dsbspecframe.h"
-* const char *GetLabel( AstFrame *this, int axis, int *status )
-
-* Class Membership:
-* DSBSpecFrame member function (over-rides the astGetLabel method inherited
-* from the SpecFrame class).
-
-* Description:
-* This function returns a pointer to the Label string for a specified axis
-* of a DSBSpecFrame.
-
-* Parameters:
-* this
-* Pointer to the SpecFrame.
-* axis
-* Axis index (zero-based) identifying the axis for which information is
-* required.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a constant null-terminated character string containing the
-* requested information.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- const char *result; /* Pointer to label string */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Initialise. */
- result = NULL;
-
-/* Validate the axis index. */
- astValidateAxis( this, axis, "astGetLabel" );
-
-/* Invoke the parent astGetLabel method to obtain a pointer to it. */
- result = (*parent_getlabel)( this, axis, status );
-
-/* Check if this is a default value. If so, append a string indicating
- the sideband. */
- if ( !astTestLabel( this, axis ) ) {
-
-/* If OK, supply a pointer to a suitable default label string. */
- sprintf( getlabel_buff, "%s (%s)", result, astGetAttrib( this, "sideband" ) );
- result = getlabel_buff;
- }
-
-/* Return the result. */
- return result;
-
-}
-
-void astInitDSBSpecFrameVtab_( AstDSBSpecFrameVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitDSBSpecFrameVtab
-
-* Purpose:
-* Initialise a virtual function table for a DSBSpecFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "dsbspecframe.h"
-* void astInitDSBSpecFrameVtab( AstDSBSpecFrameVtab *vtab, const char *name )
-
-* Class Membership:
-* DSBSpecFrame vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the DSBSpecFrame class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstFrameVtab *frame; /* Pointer to Frame component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitSpecFrameVtab( (AstSpecFrameVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsADSBSpecFrame) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstSpecFrameVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
- vtab->ClearDSBCentre = ClearDSBCentre;
- vtab->TestDSBCentre = TestDSBCentre;
- vtab->GetDSBCentre = GetDSBCentre;
- vtab->SetDSBCentre = SetDSBCentre;
-
- vtab->ClearIF = ClearIF;
- vtab->TestIF = TestIF;
- vtab->GetIF = GetIF;
- vtab->SetIF = SetIF;
-
- vtab->ClearSideBand = ClearSideBand;
- vtab->TestSideBand = TestSideBand;
- vtab->GetSideBand = GetSideBand;
- vtab->SetSideBand = SetSideBand;
-
- vtab->ClearAlignSideBand = ClearAlignSideBand;
- vtab->TestAlignSideBand = TestAlignSideBand;
- vtab->GetAlignSideBand = GetAlignSideBand;
- vtab->SetAlignSideBand = SetAlignSideBand;
-
- vtab->GetImagFreq = GetImagFreq;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- frame = (AstFrameVtab *) vtab;
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
-
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
-
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
-
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
- parent_getdomain = frame->GetDomain;
- frame->GetDomain = GetDomain;
-
- parent_overlay = frame->Overlay;
- frame->Overlay = Overlay;
-
- parent_match = frame->Match;
- frame->Match = Match;
-
- parent_subframe = frame->SubFrame;
- frame->SubFrame = SubFrame;
-
- parent_getlabel = frame->GetLabel;
- frame->GetLabel = GetLabel;
-
-/* Declare the class delete function.*/
- astSetDump( vtab, Dump, "DSBSpecFrame", "Dual sideband spectral axis" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static int Match( AstFrame *template_frame, AstFrame *target,
- int **template_axes, int **target_axes, AstMapping **map,
- AstFrame **result, int *status ) {
-/*
-* Name:
-* Match
-
-* Purpose:
-* Determine if conversion is possible between two coordinate systems.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "dsbspecframe.h"
-* int Match( AstFrame *template, AstFrame *target,
-* int **template_axes, int **target_axes,
-* AstMapping **map, AstFrame **result, int *status )
-
-* Class Membership:
-* DSBSpecFrame member function (over-rides the protected astMatch method
-* inherited from the SpecFrame class).
-
-* Description:
-* This function matches a "template" DSBSpecFrame to a "target" Frame and
-* determines whether it is possible to convert coordinates between them.
-* If it is, a mapping that performs the transformation is returned along
-* with a new Frame that describes the coordinate system that results when
-* this mapping is applied to the "target" coordinate system. In addition,
-* information is returned to allow the axes in this "result" Frame to be
-* associated with the corresponding axes in the "target" and "template"
-* Frames from which they are derived.
-
-* Parameters:
-* template
-* Pointer to the template DSBSpecFrame. This describes the coordinate
-* system (or set of possible coordinate systems) into which we wish to
-* convert our coordinates.
-* target
-* Pointer to the target Frame. This describes the coordinate system in
-* which we already have coordinates.
-* template_axes
-* Address of a location where a pointer to int will be returned if the
-* requested coordinate conversion is possible. This pointer will point
-* at a dynamically allocated array of integers with one element for each
-* axis of the "result" Frame (see below). It must be freed by the caller
-* (using astFree) when no longer required.
-*
-* For each axis in the result Frame, the corresponding element of this
-* array will return the index of the template DSBSpecFrame axis from
-* which it is derived. If it is not derived from any template
-* DSBSpecFrame axis, a value of -1 will be returned instead.
-* target_axes
-* Address of a location where a pointer to int will be returned if the
-* requested coordinate conversion is possible. This pointer will point
-* at a dynamically allocated array of integers with one element for each
-* axis of the "result" Frame (see below). It must be freed by the caller
-* (using astFree) when no longer required.
-*
-* For each axis in the result Frame, the corresponding element of this
-* array will return the index of the target Frame axis from which it
-* is derived. If it is not derived from any target Frame axis, a value
-* of -1 will be returned instead.
-* map
-* Address of a location where a pointer to a new Mapping will be
-* returned if the requested coordinate conversion is possible. If
-* returned, the forward transformation of this Mapping may be used to
-* convert coordinates between the "target" Frame and the "result"
-* Frame (see below) and the inverse transformation will convert in the
-* opposite direction.
-* result
-* Address of a location where a pointer to a new Frame will be returned
-* if the requested coordinate conversion is possible. If returned, this
-* Frame describes the coordinate system that results from applying the
-* returned Mapping (above) to the "target" coordinate system. In
-* general, this Frame will combine attributes from (and will therefore
-* be more specific than) both the target and the template Frames. In
-* particular, when the template allows the possibility of transformaing
-* to any one of a set of alternative coordinate systems, the "result"
-* Frame will indicate which of the alternatives was used.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if the requested coordinate conversion is
-* possible. Otherwise zero is returned (this will not in itself result in
-* an error condition).
-
-* Notes:
-* - A value of zero will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-
-* Implementation Notes:
-* This implementation addresses the matching of a DSBSpecFrame class
-* object to any other class of Frame. A DSBSpecFrame will match any class
-* of DSBSpecFrame (i.e. possibly from a derived class) but will not match
-* a less specialised class of Frame (except for a SpecFrame).
-*/
-
-/* Local Variables: */
- AstDSBSpecFrame *template; /* Pointer to template DSBSpecFrame structure */
- AstFrame *frame0; /* Pointer to Frame underlying axis 0 */
- int iaxis0; /* Axis index underlying axis 0 */
- int match; /* Coordinate conversion possible? */
-
-/* Initialise the returned values. */
- *template_axes = NULL;
- *target_axes = NULL;
- *map = NULL;
- *result = NULL;
- match = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return match;
-
-/* Obtain a pointer to the template DSBSpecFrame structure. */
- template = (AstDSBSpecFrame *) template_frame;
-
-/* The first criterion for a match is that the template matches as a
- SpecFrame class object. This ensures that the number of axes (1) and
- domain, class, etc. of the target Frame are suitable. Invoke the parent
- "astMatch" method to verify this. */
- match = (*parent_match)( template_frame, target,
- template_axes, target_axes, map, result, status );
-
-/* If a match was found, the target Frame must be (or contain) a SpecFrame,
- but this target SpecFrame may be a simple SpecFrame rather than a
- DSBSpecFrame. We use the returned objects directly if the target
- SpecFrame is not a DSBSpecFrame. So if a DSBSpecFrame and a base
- SpecFrame are aligned, this will result in the DSBSpecFrame behaving as
- a normal SpecFrame. */
- if ( astOK && match ) {
-
-/* Get the primary Frame associated with the matching target axis. */
- astPrimaryFrame( target, (*target_axes)[ 0 ], &frame0, &iaxis0 );
-
-/* Skip this next section, thus retaining the values returned by the
- parent Match method above, if the target axis is not a DSBSpecFrame. */
- if( astIsADSBSpecFrame( frame0 ) ) {
-
-/* Annul the returned objects, which are not needed, but keep the axis
- association arrays which already hold the correct values. */
- *map = astAnnul( *map );
- *result = astAnnul( *result );
-
-/* Use the target's "astSubFrame" method to create a new Frame (the
- result Frame) with a copy of of the target axis. This process also
- overlays the template attributes on to the target Frame and returns a
- Mapping between the target and result Frames which effects the required
- coordinate conversion. */
- match = astSubFrame( target, template, 1, *target_axes, *template_axes,
- map, result );
- }
-
-/* Free resources. */
- frame0 = astAnnul( frame0 );
-
- }
-
-/* If an error occurred, or conversion to the result Frame's coordinate
- system was not possible, then free all memory, annul the returned
- objects, and reset the returned value. */
- if ( !astOK || !match ) {
- if( *template_axes ) *template_axes = astFree( *template_axes );
- if( *target_axes ) *target_axes = astFree( *target_axes );
- if( *map ) *map = astAnnul( *map );
- if( *result ) *result = astAnnul( *result );
- match = 0;
- }
-
-/* Return the result. */
- return match;
-}
-
-static void Overlay( AstFrame *template, const int *template_axes,
- AstFrame *result, int *status ) {
-/*
-* Name:
-* Overlay
-
-* Purpose:
-* Overlay the attributes of a template DSBSpecFrame on to another Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* void Overlay( AstFrame *template, const int *template_axes,
-* AstFrame *result, int *status )
-
-* Class Membership:
-* DSBSpecFrame member function (over-rides the protected astOverlay method
-* inherited from the SpecFrame class).
-
-* Description:
-* This function overlays attributes of a DSBSpecFrame (the "template") on to
-* another Frame, so as to over-ride selected attributes of that second
-* Frame. Normally only those attributes which have been specifically set
-* in the template will be transferred. This implements a form of
-* defaulting, in which a Frame acquires attributes from the template, but
-* retains its original attributes (as the default) if new values have not
-* previously been explicitly set in the template.
-*
-* Note that if the result Frame is a DSBSpecFrame and a change of spectral
-* coordinate system occurs as a result of overlaying its System
-* attribute, then some of its original attribute values may no
-* longer be appropriate (e.g. the Title, or attributes describing
-* its axes). In this case, these will be cleared before overlaying
-* any new values.
-
-* Parameters:
-* template
-* Pointer to the template DSBSpecFrame, for which values should have been
-* explicitly set for any attribute which is to be transferred.
-* template_axes
-* Pointer to an array of int, with one element for each axis of the
-* "result" Frame (see below). For each axis in the result frame, the
-* corresponding element of this array should contain the (zero-based)
-* index of the template axis to which it corresponds. This array is used
-* to establish from which template axis any axis-dependent attributes
-* should be obtained.
-*
-* If any axis in the result Frame is not associated with a template
-* axis, the corresponding element of this array should be set to -1.
-*
-* If a NULL pointer is supplied, the template and result axis
-* indicies are assumed to be identical.
-* result
-* Pointer to the Frame which is to receive the new attribute values.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - In general, if the result Frame is not from the same class as the
-* template DSBSpecFrame, or from a class derived from it, then attributes may
-* exist in the template DSBSpecFrame which do not exist in the result Frame.
-* In this case, these attributes will not be transferred.
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Invoke the parent class astOverlay method to transfer attributes inherited
- from the parent class. */
- (*parent_overlay)( template, template_axes, result, status );
-
-/* Check if the result Frame is a DSBSpecFrame or from a class derived from
- DSBSpecFrame. If not, we cannot transfer DSBSpecFrame attributes to it as it is
- insufficiently specialised. In this case simply omit these attributes. */
- if( astIsADSBSpecFrame( result ) && astOK ) {
-
-/* Define macros that test whether an attribute is set in the template and,
- if so, transfers its value to the result. */
-#define OVERLAY(attribute) \
- if ( astTest##attribute( template ) ) { \
- astSet##attribute( result, astGet##attribute( template ) ); \
- }
-
-/* Use the macro to transfer each DSBSpecFrame attribute in turn. */
- OVERLAY(DSBCentre)
- OVERLAY(IF)
- OVERLAY(SideBand)
- OVERLAY(AlignSideBand)
- }
-
-/* Undefine macros local to this function. */
-#undef OVERLAY
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a DSBSpecFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "dsbspecframe.h"
-* void SetAttrib( AstObject *this, const char *setting )
-
-* Class Membership:
-* DSBSpecFrame member function (over-rides the astSetAttrib protected
-* method inherited from the SpecFrame class).
-
-* Description:
-* This function assigns an attribute value for a DSBSpecFrame, the
-* attribute and its value being specified by means of a string of
-* the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in
-* lower case with no white space present. The value to the right
-* of the "=" should be a suitable textual representation of the
-* value to be assigned and this will be interpreted according to
-* the attribute's data type. White space surrounding the value is
-* only significant for string attributes.
-
-* Parameters:
-* this
-* Pointer to the DSBSpecFrame.
-* setting
-* Pointer to a null-terminated string specifying the new attribute
-* value.
-*/
-
-/* Local Variables: */
- AstDSBSpecFrame *this; /* Pointer to the DSBSpecFrame structure */
- AstMapping *tmap; /* Ptr to Mapping from this to topofreq */
- AstMapping *umap; /* Ptr to Mapping between units */
- double dtemp; /* Attribute value */
- double dval; /* Attribute value */
- int ival; /* Attribute value */
- int len; /* Length of setting string */
- int nc; /* Used length */
- int off; /* Offset to start of string */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the DSBSpecFrame structure. */
- this = (AstDSBSpecFrame *) this_object;
-
-/* Obtain the length of the setting string. */
- len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse the
- setting string and extract the attribute value (or an offset to it in the
- case of string values). In each case, use the value set in "nc" to check
- that the entire string was matched. Once a value has been obtained, use the
- appropriate method to set it. */
-
-/* DSBCentre */
-/* --------- */
- if ( strstr( setting, "dsbcentre=" ) ) {
-
-/* Without any units indication - assume it is supplied in the system of
- the DSBSpecFrame. */
- int ok = 0;
- if( nc = 0,
- ( 1 == astSscanf( setting, "dsbcentre= %lg %n", &dval, &nc ) )
- && ( nc >= len ) ) {
- ok = 1;
-
-/* With units indication. Is there a Mapping from the supplied units to the
- units used by the DSBSpecFrame? If so, use the Mapping to convert the
- supplied value to the required units. */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "dsbcentre= %lg %n%*s %n", &dval, &off, &nc ) )
- && ( nc >= len ) ) {
-
- if( ( umap = astUnitMapper( setting + off, astGetUnit( this, 0 ), NULL, NULL ) ) ) {
- astTran1( umap, 1, &dval, 1, &dtemp );
- dval = dtemp;
- umap = astAnnul( umap );
- if( astOK && dval != AST__BAD ) ok = 1;
-
-/* Otherwise report an error. */
- } else if( astOK ) {
- astError( AST__ATTIN, "astSetAttrib(%s): Value supplied for "
- "attribute \"DSBCentre\" (%s) uses units which are "
- "inappropriate for the current spectral system (%s).", status,
- astGetClass( this ), setting + 10,
- astGetTitle( this ) );
- }
- }
-
-/* Convert the value from the supplied system to topocentric frequency in
- Hx, and store. */
- if( ok ) {
-
-/* Find the Mapping from the spectral system described by this SpecFrame to
- topocentric frequency in Hz. */
- tmap = TopoMap( this, 1, "astSetAttrib", status );
- if ( astOK ) {
-
-/* Transform the supplied value to topocentric frequency. */
- astTran1( tmap, 1, &dval, 1, &dtemp );
- if( dtemp == AST__BAD ) {
- astError( AST__ATTIN, "astSetAttrib(%s): The setting \"%s\" is "
- "invalid for a %s.", status, astGetClass( this ), setting,
- astGetClass( this ) );
- } else {
-
-/* Store it. */
- astSetDSBCentre( this, dtemp );
-
- }
- tmap = astAnnul( tmap );
- }
-
- } else if( astOK ) {
- astError( AST__ATTIN, "astSetAttrib(%s): The setting \"%s\" is "
- "invalid for a %s.", status, astGetClass( this ), setting,
- astGetClass( this ) );
- }
-
-/* IF */
-/* -- */
-/* Without any units indication - assume GHz. Convert to Hz for storage. */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "if= %lg %n", &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetIF( this, dval*1.0E9 );
-
-/* With units indication. */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "if= %lg %n%*s %n", &dval, &off, &nc ) )
- && ( nc >= len ) ) {
-
-/* Is there a Mapping from the supplied units to Hz? If so, use the
- Mapping to convert the supplied value to Hz. */
- if( ( umap = astUnitMapper( setting + off, "Hz", NULL, NULL ) ) ) {
- astTran1( umap, 1, &dval, 1, &dtemp );
- umap = astAnnul( umap );
-
-/* Otherwise report an error. */
- } else if( astOK ) {
- astError( AST__ATTIN, "astSetAttrib(%s): Intermediate frequency given "
- "in an inappropriate system of units \"%g %s\".", status,
- astGetClass( this ), dval, setting + off );
- }
-
-/* Set the intermediate frequency. */
- astSetIF( this, dtemp );
-
-/* SideBand */
-/* -------- */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "sideband= %n%*s %n", &ival, &nc ) )
- && ( nc >= len ) ) {
-
- if( astChrMatch( "usb", setting+ival ) ) {
- astSetSideBand( this, USB );
-
- } else if( astChrMatch( "lsb", setting+ival ) ) {
- astSetSideBand( this, LSB );
-
- } else if( astChrMatch( "lo", setting+ival ) ) {
- astSetSideBand( this, LO );
-
- } else if( astChrMatch( "observed", setting+ival ) ) {
- astSetSideBand( this, ( astGetIF( this ) > 0 ) ? LSB : USB );
-
- } else if( astChrMatch( "image", setting+ival ) ) {
- astSetSideBand( this, ( astGetIF( this ) <= 0 ) ? LSB : USB );
-
- } else {
- astError( AST__ATTIN, "astSetAttrib(%s): The setting \"%s\" is "
- "invalid for a %s.", status, astGetClass( this ), setting,
- astGetClass( this ) );
- }
-
-/* AlignSideBand */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "alignsideband= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetAlignSideBand( this, ival );
-
-/* Read-only attributes. */
-/* --------------------- */
-/* Define a macro to see if the setting string matches any of the
- read-only attributes of this class. */
-#define MATCH(attrib) \
- ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
- ( nc >= len ) )
-
-/* Use this macro to report an error if a read-only attribute has been
- specified. */
- } else if ( MATCH( "imagfreq" ) ) {
- astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.", status,
- setting, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Pass any unrecognised setting to the parent method for further
- interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-}
-
-static int SubFrame( AstFrame *target_frame, AstFrame *template,
- int result_naxes, const int *target_axes,
- const int *template_axes, AstMapping **map,
- AstFrame **result, int *status ) {
-/*
-* Name:
-* SubFrame
-
-* Purpose:
-* Select axes from a DSBSpecFrame and convert to the new coordinate
-* system.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "dsbspecframe.h"
-* int SubFrame( AstFrame *target, AstFrame *template,
-* int result_naxes, const int *target_axes,
-* const int *template_axes, AstMapping **map,
-* AstFrame **result, int *status )
-
-* Class Membership:
-* DSBSpecFrame member function (over-rides the protected astSubFrame
-* method inherited from the SpecFrame class).
-
-* Description:
-* This function selects a requested sub-set (or super-set) of the axes
-* from a "target" DSBSpecFrame and creates a new Frame with copies of
-* the selected axes assembled in the requested order. It then
-* optionally overlays the attributes of a "template" Frame on to the
-* result. It returns both the resulting Frame and a Mapping that
-* describes how to convert between the coordinate systems described by
-* the target and result Frames. If necessary, this Mapping takes
-* account of any differences in the Frames' attributes due to the
-* influence of the template.
-
-* Parameters:
-* target
-* Pointer to the target DSBSpecFrame, from which axes are to be
-* selected.
-* template
-* Pointer to the template Frame, from which new attributes for the
-* result Frame are to be obtained. Optionally, this may be NULL, in
-* which case no overlaying of template attributes will be performed.
-* result_naxes
-* Number of axes to be selected from the target Frame. This number may
-* be greater than or less than the number of axes in this Frame (or
-* equal).
-* target_axes
-* Pointer to an array of int with result_naxes elements, giving a list
-* of the (zero-based) axis indices of the axes to be selected from the
-* target DSBSpecFrame. The order in which these are given determines
-* the order in which the axes appear in the result Frame. If any of the
-* values in this array is set to -1, the corresponding result axis will
-* not be derived from the target Frame, but will be assigned default
-* attributes instead.
-* template_axes
-* Pointer to an array of int with result_naxes elements. This should
-* contain a list of the template axes (given as zero-based axis indices)
-* with which the axes of the result Frame are to be associated. This
-* array determines which axes are used when overlaying axis-dependent
-* attributes of the template on to the result. If any element of this
-* array is set to -1, the corresponding result axis will not receive any
-* template attributes.
-*
-* If the template argument is given as NULL, this array is not used and
-* a NULL pointer may also be supplied here.
-* map
-* Address of a location to receive a pointer to the returned Mapping.
-* The forward transformation of this Mapping will describe how to
-* convert coordinates from the coordinate system described by the target
-* DSBSpecFrame to that described by the result Frame. The inverse
-* transformation will convert in the opposite direction.
-* result
-* Address of a location to receive a pointer to the result Frame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if coordinate conversion is possible
-* between the target and the result Frame. Otherwise zero is returned and
-* *map and *result are returned as NULL (but this will not in itself
-* result in an error condition). In general, coordinate conversion should
-* always be possible if no template Frame is supplied but may not always
-* be possible otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-
-* Implementation Notes:
-* - This implementation addresses the selection of axes from a
-* DSBSpecFrame object. This results in another object of the same class
-* only if the single DSBSpecFrame axis is selected exactly once.
-* Otherwise, the result is a Frame class object which inherits the
-* DSBSpecFrame's axis information (if appropriate) but none of the other
-* properties of a DSBSpecFrame.
-* - In the event that a DSBSpecFrame results, the returned Mapping will
-* take proper account of the relationship between the target and result
-* coordinate systems.
-* - In the event that a Frame class object results, the returned Mapping
-* will only represent a selection/permutation of axes.
-
-* Implementation Deficiencies:
-* - Any axis selection is currently permitted. Probably this should be
-* restricted so that each axis can only be selected once. The
-* astValidateAxisSelection method will do this but currently there are bugs
-* in the CmpFrame class that cause axis selections which will not pass this
-* test. Install the validation when these are fixed.
-*/
-
-/* Local Variables: */
- AstDSBSpecFrame *dsbresult;/* Pointer to the DSBSpecFrame result Frame */
- AstDSBSpecFrame *dsbtarget;/* Pointer to the DSBSpecFrame target Frame */
- AstMapping *map1; /* Intermediate Mapping */
- AstMapping *map2; /* Intermediate Mapping */
- AstMapping *map3; /* Intermediate Mapping */
- int alignsb; /* Use sidebands to align the Frames? */
- int match; /* Coordinate conversion is possible? */
- int obs_sb; /* The observed sideband value */
- int old_sb; /* The original Sideband value */
-
-/* Initialise the returned values. */
- *map = NULL;
- *result = NULL;
- match = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return match;
-
-/* Invoke the astSubFrame method inherited from the parent SpecFrame
- class. This will (if possible) create a result Frame which is a
- DSBSpecFrame (since the supplied target Frame is a DSBSpecFrame).
- However, the Mapping from target to result Frame will take no account
- of any differences in the values of the attributes specific to the
- DSBSpecFrame class. */
- match = (*parent_subframe)( target_frame, template, result_naxes,
- target_axes, template_axes, map, result, status );
-
-/* If a match occurred, and the result and template Frames are both
- DSBSpecFrames, we now modify the Mapping to take account of
- DSBSpecFrame-specific attributes. */
- if( match && template && astIsADSBSpecFrame( template ) &&
- astIsADSBSpecFrame( *result ) ) {
-
-/* Get pointers to the two DSBSpecFrames */
- dsbtarget = (AstDSBSpecFrame *) target_frame;
-
-/* See whether alignment occurs between sidebands. If the current call to
- this function is part of the process of restoring a FrameSet's integrity
- following changes to the FrameSet's current Frame, then we ignore the
- setting of the AlignSideBand attributes and use 1. This ensures that
- when the SideBand attribute (for instance) is changed via a FrameSet
- pointer, the Mappings within the FrameSet are modified to produce
- frequencies in the new SideBand. In most other cases, astronomers
- usually want to align the DSBSpecFrames as if they were basic SpecFrames
- (that is, ignoring the setting of the SideBand attribute). */
- if( astGetFrameFlags( target_frame ) & AST__INTFLAG ) {
- alignsb = 1;
- } else {
- alignsb = astGetAlignSideBand( dsbtarget ) &&
- astGetAlignSideBand( (AstDSBSpecFrame *) template );
- }
-
-/* If we are aligning the sidebands we need to modify the Mapping
- returned above by the parent SubFrame method. The existing Mapping
- will convert between the spectral systems represented by the two
- DSBSpecFrames but will not take account of any difference in
- sidebands. */
- if( alignsb ) {
-
-/* We assume that alignment occurs in the observed sideband. Determine
- which side band is the observed sideband in the target. */
- old_sb = astGetSideBand( dsbtarget );
- astSetC( dsbtarget, "SideBand", "observed" );
- obs_sb = astGetSideBand( dsbtarget );
- astSetSideBand( dsbtarget, old_sb );
-
-/* Create a Mapping which transforms positions from the target to an exact
- copy of the target in which the SideBand attribute is set to the
- observed (USB or LSB) sideband. This will be a UnitMap if the target
- already represents the observed sideband. */
- if( obs_sb == USB ) {
- map1 = ToUSBMapping( dsbtarget, "astSubFrame", status );
-
- } else if( obs_sb == LSB ) {
- map1 = ToLSBMapping( dsbtarget, "astSubFrame", status );
-
- } else {
- map1 = NULL;
- astError( AST__INTER, "astGetImagFreq(%s): Illegal sideband value "
- "(%d) encountered (internal AST programming error).", status,
- astGetClass( target_frame ), obs_sb );
- }
-
-/* Determine which side band is the observed sideband in the result. */
- dsbresult = (AstDSBSpecFrame *) *result;
- old_sb = astGetSideBand( dsbresult );
- astSetC( dsbresult, "SideBand", "observed" );
- obs_sb = astGetSideBand( dsbresult );
- astSetSideBand( dsbresult, old_sb );
-
-/* Create a Mapping which transforms positions from the result to an exact
- copy of the result in which the SideBand attribute is set to the
- obserfed sideband. This will be a UnitMap if the target already represents
- the observed sideband. */
- if( obs_sb == USB ) {
- map2 = ToUSBMapping( dsbresult, "astSubFrame", status );
-
- } else if( obs_sb == LSB ) {
- map2 = ToLSBMapping( dsbresult, "astSubFrame", status );
-
- } else {
- map2 = NULL;
- astError( AST__INTER, "astGetImagFreq(%s): Illegal sideband value "
- "(%d) encountered (internal AST programming error).", status,
- astGetClass( target_frame ), obs_sb );
- }
-
-/* Invert it to get the mapping from the observed sideband to the result. */
- astInvert( map2 );
-
-/* Form a Mapping which first maps target values to the observed sideband,
- then applies the Mapping returned by the parent SubFrame method in
- order to convert between spectral systems, and then converts from the
- observed sideband to the SideBand of the result. */
- map3 = (AstMapping *) astCmpMap( map1, *map, 1, "", status );
- map1 = astAnnul( map1 );
- *map = astAnnul( *map );
- map1 = (AstMapping *) astCmpMap( map3, map2, 1, "", status );
- map3 = astAnnul( map3 );
- map2 = astAnnul( map2 );
-
-/* Returned the simplified Mapping. */
- *map = astSimplify( map1 );
- map1 = astAnnul( map1 );
- }
- }
-
-/* If an error occurred or no match was found, annul the returned
- objects and reset the returned result. */
- if ( !astOK || !match ) {
- if( *map ) *map = astAnnul( *map );
- if( *result ) *result = astAnnul( *result );
- match = 0;
- }
-
-/* Return the result. */
- return match;
-
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a DSBSpecFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "dsbspecframe.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* DSBSpecFrame member function (over-rides the astTestAttrib protected
-* method inherited from the SpecFrame class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a DSBSpecFrame's attributes.
-
-* Parameters:
-* this
-* Pointer to the DSBSpecFrame.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstDSBSpecFrame *this; /* Pointer to the DSBSpecFrame structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the DSBSpecFrame structure. */
- this = (AstDSBSpecFrame *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* DSBCentre */
-/* --------- */
- if ( !strcmp( attrib, "dsbcentre" ) ) {
- result = astTestDSBCentre( this );
-
-/* IF */
-/* -- */
- } else if ( !strcmp( attrib, "if" ) ) {
- result = astTestIF( this );
-
-/* SideBand */
-/* -------- */
- } else if ( !strcmp( attrib, "sideband" ) ) {
- result = astTestSideBand( this );
-
-/* AlignSideBand */
-/* ------------- */
- } else if ( !strcmp( attrib, "alignsideband" ) ) {
- result = astTestAlignSideBand( this );
-
-/* Read-only attributes. */
-/* --------------------- */
-/* Test if the attribute name matches any of the read-only attributes
- of this class. If it does, then return zero. */
- } else if ( !strcmp( attrib, "imagfreq" ) ) {
- result = 0;
-
-/* If the attribute is not recognised, pass it on to the parent method
- for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static AstMapping *ToLOMapping( AstDSBSpecFrame *this, const char *method, int *status ){
-/*
-* Name:
-* ToLOMapping
-
-* Purpose:
-* Create a Mapping which transforms a DSBSpecFrame to offset from the
-* local oscillator frequency.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "dsbspecframe.h"
-* AstMapping *ToLOMapping( AstDSBSpecFrame *this, const char *method, int *status )
-
-* Class Membership:
-* DSBSpecFrame member function
-
-* Description:
-* This function returns a pointer to a new Mapping which transforms
-* positions in the supplied DSBSpecFrame into an offset from the local
-* oscillator frequency. This will be a UnitMap if the DSBSpecFrame
-* already represents offset from the local oscillator frequency.
-
-* Parameters:
-* this
-* Pointer to the DSBSpecFrame.
-* method
-* Pointer to a null-terminated string containing the name of the
-* public invoking method. This is only used in the construction of
-* error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a new Mapping.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstMapping *fmap; /* LSB to USB (topo freq) */
- AstMapping *map1; /* This to USB (topo freq) */
- AstMapping *map2; /* This (LSB) to This (USB) */
- AstMapping *result; /* Pointer to the returned Mapping */
- AstMapping *tmap; /* This to topocentric freq */
- double f_lo; /* Local oscillator freq (topo Hz) */
- double f_in_a; /* First LSB or USB freq */
- double f_in_b; /* Second LSB or USB freq */
- double f_out_a; /* First LO freq */
- double f_out_b; /* Second LO freq */
- int sb; /* SideBand value */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If the DSBSpecFrame already represents LO offset, return a UnitMap.*/
- sb = astGetSideBand( this );
- if( sb == LO ) {
- result = (AstMapping *) astUnitMap( 1, "", status );
-
-/* If the DSBSpecFrame represents the USB or LSB, create a suitable WinMap. */
- } else {
-
-/* Find the Mapping from the spectral system described by this SpecFrame to
- topocentric frequency in Hz. */
- tmap = TopoMap( this, 1, method, status );
-
-/* Calculate the local oscillator frequency (topocentric in Hertz). */
- VerifyAttrs( this, "create a Mapping to upper sideband",
- "IF DSBCentre", "astGetImagFreq", status );
- f_lo = astGetDSBCentre( this ) + astGetIF( this );
-
-/* Create a 1D WinMap which converts f_in to f_out. */
- if( sb == LSB ) {
- f_in_a = 0.0;
- f_in_b = f_lo;
- f_out_a = f_lo;
- f_out_b = 0.0;
- } else {
- f_in_a = 0.0;
- f_in_b = -f_lo;
- f_out_a = f_lo;
- f_out_b = 0.0;
- }
-
- fmap = (AstMapping *) astWinMap( 1, &f_in_a, &f_in_b, &f_out_a, &f_out_b, "", status );
-
-/* Construct the Mapping: input to f_in, f_in to f_out, f_out to input */
- map1 = (AstMapping *) astCmpMap( tmap, fmap, 1, "", status );
- astInvert( tmap );
- map2 = (AstMapping *) astCmpMap( map1, tmap, 1, "", status );
-
-/* Simplify */
- result = astSimplify( map2 );
-
-/* Free resources */
- tmap = astAnnul( tmap );
- fmap = astAnnul( fmap );
- map1 = astAnnul( map1 );
- map2 = astAnnul( map2 );
- }
-
-/* Return NULL if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-
-}
-
-static AstMapping *ToLSBMapping( AstDSBSpecFrame *this, const char *method, int *status ){
-/*
-* Name:
-* ToLSBMapping
-
-* Purpose:
-* Create a Mapping which transforms a DSBSpecFrame to the lower
-* sideband.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "dsbspecframe.h"
-* AstMapping *ToLSBMapping( AstDSBSpecFrame *this, const char *method, int *status )
-
-* Class Membership:
-* DSBSpecFrame member function
-
-* Description:
-* This function returns a pointer to a new Mapping which transforms
-* positions in the supplied DSBSpecFrame to the lower sideband. This
-* will be a UnitMap if the DSBSpecFrame already represents the lower
-* sideband.
-
-* Parameters:
-* this
-* Pointer to the DSBSpecFrame.
-* method
-* Pointer to a null-terminated string containing the name of the
-* public invoking method. This is only used in the construction of
-* error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a new Mapping.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstMapping *fmap; /* LSB to USB (topo freq) */
- AstMapping *map1; /* This to USB (topo freq) */
- AstMapping *map2; /* This (LSB) to This (USB) */
- AstMapping *result; /* Pointer to the returned Mapping */
- AstMapping *tmap; /* This to topocentric freq */
- double f_lo; /* Local oscillator freq (topo Hz) */
- double f_out_a; /* First LSB freq */
- double f_out_b; /* Second LSB freq */
- double f_in_a; /* First USB or LO freq */
- double f_in_b; /* Second USB or LO freq */
- int sb; /* SideBand value */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If the DSBSpecFrame already represents the LSB, return a UnitMap.*/
- sb = astGetSideBand( this );
- if( sb == LSB ) {
- result = (AstMapping *) astUnitMap( 1, "", status );
-
-/* If the DSBSpecFrame represents the USB or LO offset, create a suitable
- WinMap. */
- } else {
-
-/* Find the Mapping from the spectral system described by this SpecFrame to
- topocentric frequency in Hz. */
- tmap = TopoMap( this, 1, method, status );
-
-/* Calculate the local oscillator frequency (topocentric in Hertz). */
- VerifyAttrs( this, "create a Mapping to lower sideband",
- "IF DSBCentre", "astGetImagFreq", status );
- f_lo = astGetDSBCentre( this ) + astGetIF( this );
-
-/* Create a 1D WinMap which converts USB or LO to LSB. */
- if( sb == USB ) {
- f_in_a = 0.0;
- f_in_b = 2*f_lo;
- f_out_a = 2*f_lo;
- f_out_b = 0.0;
- } else {
- f_in_a = 0.0;
- f_in_b = f_lo;
- f_out_a = f_lo;
- f_out_b = 0.0;
- }
-
- fmap = (AstMapping *) astWinMap( 1, &f_in_a, &f_in_b, &f_out_a, &f_out_b, "", status );
-
-/* Construct the Mapping: input to f_in, f_in to f_out, f_out to input */
- map1 = (AstMapping *) astCmpMap( tmap, fmap, 1, "", status );
- astInvert( tmap );
- map2 = (AstMapping *) astCmpMap( map1, tmap, 1, "", status );
-
-/* Simplify */
- result = astSimplify( map2 );
-
-/* Free resources */
- tmap = astAnnul( tmap );
- fmap = astAnnul( fmap );
- map1 = astAnnul( map1 );
- map2 = astAnnul( map2 );
- }
-
-/* Return NULL if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-
-}
-
-static AstMapping *TopoMap( AstDSBSpecFrame *this, int forward,
- const char *method, int *status ){
-/*
-* Name:
-* TopoMap
-
-* Purpose:
-* Create a Mapping which transforms a DSBSpecFrame to topocentric
-* frequency.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "dsbspecframe.h"
-* AstMapping *TopoMap( AstDSBSpecFrame *this, int forward,
-* const char *method, int *status )
-
-* Class Membership:
-* DSBSpecFrame member function
-
-* Description:
-* This function returns a pointer to a new Mapping which transforms
-* positions in the supplied DSBSpecFrame to the corresponding
-* topocentric frequency values in Hz (or the inverse of this).
-
-* Parameters:
-* this
-* Pointer to the DSBSpecFrame.
-* forward
-* If zero, the calcuated Mapping is inverted before being returned.
-* method
-* Pointer to a null-terminated string containing the name of the
-* public invoking method. This is only used in the construction of
-* error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a new Mapping.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstMapping *result; /* The returned Mapping */
- AstFrameSet *fs; /* FrameSet connecting tf1 and tf2 */
- AstSpecFrame *tf1; /* SpecFrame corresponding to this DSBSpecFrame */
- AstSpecFrame *tf2; /* Topocentric frequency SpecFrame */
- int template_axis; /* The axis to overlay */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Make a SpecFrame and then overlay the SpecFrame attributes of this
- DSBSpecFrame onto the new SpecFrame. This means it inherits the current
- values of things like ObsLon and ObsLat. */
- tf1 = astSpecFrame( "", status );
- template_axis = 0;
- (*parent_overlay)( (AstFrame *) this, &template_axis, (AstFrame *) tf1, status );
-
-/* Copy this new SpecFrame and set its attributes to describe topocentric
- frequency in Hz. Ensure that alignment occurs in the topocentric Frame. */
- astSetAlignStdOfRest( tf1, AST__TPSOR);
- tf2 = astCopy( tf1 );
- astSetSystem( tf2, AST__FREQ );
- astSetStdOfRest( tf2, AST__TPSOR );
- astSetUnit( tf2, 0, "Hz" );
-
-/* Find the Mapping from the spectral system described by this SpecFrame to
- topocentric frequency in Hz. */
- fs = astConvert( tf1, tf2, "" );
- if ( astOK ) {
- if( !fs ) {
- astError( AST__INTER, "%s(%s): Cannot convert DSBCentre "
- "value from the supplied system to topocentric frequency "
- "(internal AST programming error).", status, method,
- astGetClass( this ) );
- } else {
- result = astGetMapping( fs, AST__BASE, AST__CURRENT );
- if( !forward ) astInvert( result );
- }
- fs = astAnnul( fs );
- }
-
-/* Free resources */
- tf1 = astAnnul( tf1 );
- tf2 = astAnnul( tf2 );
-
-/* Annul the result if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-
-}
-
-static AstMapping *ToUSBMapping( AstDSBSpecFrame *this, const char *method, int *status ){
-/*
-* Name:
-* ToUSBMapping
-
-* Purpose:
-* Create a Mapping which transforms a DSBSpecFrame to the upper
-* sideband.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "dsbspecframe.h"
-* AstMapping *ToUSBMapping( AstDSBSpecFrame *this, const char *method, int *status )
-
-* Class Membership:
-* DSBSpecFrame member function
-
-* Description:
-* This function returns a pointer to a new Mapping which transforms
-* positions in the supplied DSBSpecFrame to the upper sideband. This
-* will be a UnitMap if the DSBSpecFrame already represents the upper
-* sideband.
-
-* Parameters:
-* this
-* Pointer to the DSBSpecFrame.
-* method
-* Pointer to a null-terminated string containing the name of the
-* public invoking method. This is only used in the construction of
-* error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a new Mapping.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstMapping *fmap; /* LSB to USB (topo freq) */
- AstMapping *map1; /* This to USB (topo freq) */
- AstMapping *map2; /* This (LSB) to This (USB) */
- AstMapping *result; /* Pointer to the returned Mapping */
- AstMapping *tmap; /* This to topocentric freq */
- double f_lo; /* Local oscillator freq (topo Hz) */
- double f_in_a; /* First LSB or LO freq */
- double f_in_b; /* Second LSB or LO freq */
- double f_out_a; /* First USB freq */
- double f_out_b; /* Second USB freq */
- int sb; /* SideBand value */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If the DSBSpecFrame already represents the USB, return a UnitMap.*/
- sb = astGetSideBand( this );
- if( sb == USB ) {
- result = (AstMapping *) astUnitMap( 1, "", status );
-
-/* If the DSBSpecFrame represents the LSB, or LO offset, create a suitable
- WinMap. */
- } else {
-
-/* Find the Mapping from the spectral system described by this SpecFrame to
- topocentric frequency in Hz. */
- tmap = TopoMap( this, 1, method, status );
-
-/* Calculate the local oscillator frequency (topocentric in Hertz). */
- VerifyAttrs( this, "create a Mapping to upper sideband",
- "IF DSBCentre", "astGetImagFreq", status );
- f_lo = astGetDSBCentre( this ) + astGetIF( this );
-
-/* Create a 1D WinMap which converts f_in to f_out. */
- if( sb == LSB ) {
- f_in_a = 0.0;
- f_in_b = 2*f_lo;
- f_out_a = 2*f_lo;
- f_out_b = 0.0;
- } else {
- f_in_a = 0.0;
- f_in_b = -f_lo;
- f_out_a = f_lo;
- f_out_b = 0.0;
- }
-
- fmap = (AstMapping *) astWinMap( 1, &f_in_a, &f_in_b, &f_out_a, &f_out_b, "", status );
-
-/* Construct the Mapping: input to f_in, f_in to f_out, f_out to input */
- map1 = (AstMapping *) astCmpMap( tmap, fmap, 1, "", status );
- astInvert( tmap );
- map2 = (AstMapping *) astCmpMap( map1, tmap, 1, "", status );
-
-/* Simplify */
- result = astSimplify( map2 );
-
-/* Free resources */
- tmap = astAnnul( tmap );
- fmap = astAnnul( fmap );
- map1 = astAnnul( map1 );
- map2 = astAnnul( map2 );
- }
-
-/* Return NULL if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-
-}
-
-static void VerifyAttrs( AstDSBSpecFrame *this, const char *purp,
- const char *attrs, const char *method, int *status ) {
-/*
-* Name:
-* VerifyAttrs
-
-* Purpose:
-* Verify that usable attribute values are available.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "dsbspecframe.h"
-* void VerifyAttrs( AstDSBSpecFrame *this, const char *purp,
-* const char *attrs, const char *method, int *status )
-
-* Class Membership:
-* DSBSpecFrame member function
-
-* Description:
-* This function tests each attribute listed in "attrs". It returns
-* without action if 1) an explicit value has been set for each attribute
-* or 2) the UseDefs attribute of the supplied DSBSpecFrame is non-zero.
-*
-* If UseDefs is zero (indicating that default values should not be
-* used for attributes), and any of the named attributes does not have
-* an explicitly set value, then an error is reported.
-
-* Parameters:
-* this
-* Pointer to the DSBSpecFrame.
-* purp
-* Pointer to a text string containing a message which will be
-* included in any error report. This shouldindicate the purpose
-* for which the attribute value is required.
-* attrs
-* A string holding a space separated list of attribute names.
-* method
-* A string holding the name of the calling method for use in error
-* messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- const char *a;
- const char *desc;
- const char *p;
- int len;
- int set;
- int state;
-
-/* Check inherited status */
- if( !astOK ) return;
-
-/* If the DSBSpecFrame has a non-zero value for its UseDefs attribute, then
- all attributes are assumed to have usable values, since the defaults
- will be used if no explicit value has been set. So we only need to do
- any checks if UseDefs is zero. */
- if( !astGetUseDefs( this ) ) {
-
-/* Initialise variables to avoid compiler warnings. */
- a = NULL;
- desc = NULL;
- len = 0;
- set = 0;
-
-/* Loop round the "attrs" string identifying the start and length of each
- non-blank word in the string. */
- state = 0;
- p = attrs;
- while( 1 ) {
- if( state == 0 ) {
- if( !isspace( *p ) ) {
- a = p;
- len = 1;
- state = 1;
- }
- } else {
- if( isspace( *p ) || !*p ) {
-
-/* The end of a word has just been reached. Compare it to each known
- attribute value. Get a flag indicating if the attribute has a set
- value, and a string describing the attribute.*/
- if( len > 0 ) {
-
- if( !strncmp( "DSBCentre", a, len ) ) {
- set = astTestDSBCentre( this );
- desc = "central position of interest";
-
- } else if( !strncmp( "IF", a, len ) ) {
- set = astTestIF( this );
- desc = "intermediate frequency";
-
- } else {
- astError( AST__INTER, "VerifyAttrs(DSBSpecFrame): "
- "Unknown attribute name \"%.*s\" supplied (AST "
- "internal programming error).", status, len, a );
- }
-
-/* If the attribute does not have a set value, report an error. */
- if( !set && astOK ) {
- astError( AST__NOVAL, "%s(%s): Cannot %s.", status, method,
- astGetClass( this ), purp );
- astError( AST__NOVAL, "No value has been set for "
- "the AST \"%.*s\" attribute (%s).", status, len, a,
- desc );
- }
-
-/* Continue the word search algorithm. */
- }
- len = 0;
- state = 0;
- } else {
- len++;
- }
- }
- if( !*(p++) ) break;
- }
- }
-}
-
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/*
-*att++
-* Name:
-* ImagFreq
-
-* Purpose:
-* The image sideband equivalent of the rest frequency.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point, read-only.
-
-* Description:
-* This is a read-only attribute giving the frequency which
-* corresponds to the rest frequency but is in the opposite sideband.
-
-* The value is calculated by first transforming the rest frequency
-* (given by the RestFreq attribute) from the standard of rest of the
-* source (given by the SourceVel and SourceVRF attributes) to the
-* standard of rest of the observer (i.e. the topocentric standard of
-* rest). The resulting topocentric frequency is assumed to be in the
-* same sideband as the value given for the DSBCentre attribute (the
-* "observed" sideband), and is transformed to the other sideband (the
-* "image" sideband). The new frequency is converted back to the standard
-* of rest of the source, and the resulting value is returned as the
-* attribute value, in units of GHz.
-
-* Applicability:
-* DSBSpecFrame
-* All DSBSpecFrames have this attribute.
-
-*att--
-*/
-
-
-/*
-*att++
-* Name:
-* DSBCentre
-
-* Purpose:
-* The central position of interest in a dual sideband spectrum.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute specifies the central position of interest in a dual
-* sideband spectrum. Its sole use is to determine the local oscillator
-* frequency (the frequency which marks the boundary between the lower
-* and upper sidebands). See the description of the IF (intermediate
-* frequency) attribute for details of how the local oscillator frequency
-* is calculated. The sideband containing this central position is
-* referred to as the "observed" sideband, and the other sideband as
-* the "image" sideband.
-*
-* The value is accessed as a position in the spectral system
-* represented by the SpecFrame attributes inherited by this class, but
-* is stored internally as topocentric frequency. Thus, if the System
-* attribute of the DSBSpecFrame is set to "VRAD", the Unit attribute
-* set to "m/s" and the StdOfRest attribute set to "LSRK", then values
-* for the DSBCentre attribute should be supplied as radio velocity in
-* units of "m/s" relative to the kinematic LSR (alternative units may
-* be used by appending a suitable units string to the end of the value).
-* This value is then converted to topocentric frequency and stored. If
-* (say) the Unit attribute is subsequently changed to "km/s" before
-* retrieving the current value of the DSBCentre attribute, the stored
-* topocentric frequency will be converted back to LSRK radio velocity,
-* this time in units of "km/s", before being returned.
-*
-* The default value for this attribute is 30 GHz.
-
-* Applicability:
-* DSBSpecFrame
-* All DSBSpecFrames have this attribute.
-
-* Note:
-* - The attributes which define the transformation to or from topocentric
-* frequency should be assigned their correct values before accessing
-* this attribute. These potentially include System, Unit, StdOfRest,
-* ObsLon, ObsLat, ObsAlt, Epoch, RefRA, RefDec and RestFreq.
-
-*att--
-*/
-/* The central frequency (topocentric frequency in Hz). */
-astMAKE_CLEAR(DSBSpecFrame,DSBCentre,dsbcentre,AST__BAD)
-astMAKE_GET(DSBSpecFrame,DSBCentre,double,3.0E10,((this->dsbcentre!=AST__BAD)?this->dsbcentre:3.0E10))
-astMAKE_SET(DSBSpecFrame,DSBCentre,double,dsbcentre,value)
-astMAKE_TEST(DSBSpecFrame,DSBCentre,( this->dsbcentre != AST__BAD ))
-
-
-/*
-*att++
-* Name:
-* IF
-
-* Purpose:
-* The intermediate frequency in a dual sideband spectrum.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute specifies the (topocentric) intermediate frequency in
-* a dual sideband spectrum. Its sole use is to determine the local
-* oscillator (LO) frequency (the frequency which marks the boundary
-* between the lower and upper sidebands). The LO frequency is
-* equal to the sum of the centre frequency and the intermediate
-* frequency. Here, the "centre frequency" is the topocentric
-* frequency in Hz corresponding to the current value of the DSBCentre
-* attribute. The value of the IF attribute may be positive or
-* negative: a positive value results in the LO frequency being above
-* the central frequency, whilst a negative IF value results in the LO
-* frequency being below the central frequency. The sign of the IF
-* attribute value determines the default value for the SideBand
-* attribute.
-*
-* When setting a new value for this attribute, the units in which the
-* frequency value is supplied may be indicated by appending a suitable
-* string to the end of the formatted value. If the units are not
-* specified, then the supplied value is assumed to be in units of GHz.
-* For instance, the following strings all result in an IF of 4 GHz being
-* used: "4.0", "4.0 GHz", "4.0E9 Hz", etc.
-*
-* When getting the value of this attribute, the returned value is
-* always in units of GHz. The default value for this attribute is 4 GHz.
-
-* Applicability:
-* DSBSpecFrame
-* All DSBSpecFrames have this attribute.
-
-*att--
-*/
-/* The intermediate frequency (topocentric in Hz). */
-astMAKE_CLEAR(DSBSpecFrame,IF,ifr,AST__BAD)
-astMAKE_GET(DSBSpecFrame,IF,double,4.0E9,((this->ifr!=AST__BAD)?this->ifr:4.0E9))
-astMAKE_SET(DSBSpecFrame,IF,double,ifr,value)
-astMAKE_TEST(DSBSpecFrame,IF,( this->ifr != AST__BAD ))
-
-/*
-*att++
-* Name:
-* SideBand
-
-* Purpose:
-* Indicates which sideband a dual sideband spectrum represents.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute indicates whether the DSBSpecFrame currently
-* represents its lower or upper sideband, or an offset from the local
-* oscillator frequency. When querying the current value, the returned
-* string is always one of "usb" (for upper sideband), "lsb" (for lower
-* sideband), or "lo" (for offset from the local oscillator frequency).
-* When setting a new value, any of the strings "lsb", "usb", "observed",
-* "image" or "lo" may be supplied (case insensitive). The "observed"
-* sideband is which ever sideband (upper or lower) contains the central
-* spectral position given by attribute DSBCentre, and the "image"
-* sideband is the other sideband. It is the sign of the IF attribute
-* which determines if the observed sideband is the upper or lower
-* sideband. The default value for SideBand is the observed sideband.
-
-* Applicability:
-* DSBSpecFrame
-* All DSBSpecFrames have this attribute.
-
-*att--
-*/
-/* Protected access to the SideBand attribute uses BADSB to indicate
- "unset". Other negative values mean "LSB", zero means "LO" and
- positive values mean "USB". */
-astMAKE_CLEAR(DSBSpecFrame,SideBand,sideband,BADSB)
-astMAKE_SET(DSBSpecFrame,SideBand,int,sideband,((value<0)?LSB:((value==0)?LO:USB)))
-astMAKE_TEST(DSBSpecFrame,SideBand,( this->sideband != BADSB ))
-astMAKE_GET(DSBSpecFrame,SideBand,int,USB,(this->sideband == BADSB ? ((astGetIF( this )>0)?LSB:USB):this->sideband))
-
-/*
-*att++
-* Name:
-* AlignSideBand
-
-* Purpose:
-* Should the SideBand attribute be taken into account when aligning
-* this DSBSpecFrame with another DSBSpecFrame?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute controls how a DSBSpecFrame behaves when an attempt
-* is made to align it with another DSBSpecFrame using
-c astFindFrame or astConvert.
-f AST_FINDFRAME or AST_CONVERT.
-* If both DSBSpecFrames have a non-zero value for AlignSideBand, the
-* value of the SideBand attribute in each DSBSpecFrame is used so that
-* alignment occurs between sidebands. That is, if one DSBSpecFrame
-* represents USB and the other represents LSB then
-c astFindFrame and astConvert
-f AST_FINDFRAME and AST_CONVERT
-* will recognise that the DSBSpecFrames represent different sidebands
-* and will take this into account when constructing the Mapping that
-* maps positions in one DSBSpecFrame into the other. If AlignSideBand
-* in either DSBSpecFrame is set to zero, then the values of the SideBand
-* attributes are ignored. In the above example, this would result in a
-* frequency in the first DSBSpecFrame being mapped onto the same
-* frequency in the second DSBSpecFrame, even though those frequencies
-* refer to different sidebands. In other words, if either AlignSideBand
-* attribute is zero, then the two DSBSpecFrames aligns like basic
-* SpecFrames. The default value for AlignSideBand is zero.
-*
-c When astFindFrame or astConvert
-f When AST_FINDFRAME or AST_CONVERT
-* is used on two DSBSpecFrames (potentially describing different spectral
-* coordinate systems and/or sidebands), it returns a Mapping which can be
-* used to transform a position in one DSBSpecFrame into the corresponding
-* position in the other. The Mapping is made up of the following steps in
-* the indicated order:
-*
-* - If both DSBSpecFrames have a value of 1 for the AlignSideBand
-* attribute, map values from the target's current sideband (given by its
-* SideBand attribute) to the observed sideband (whether USB or LSB). If
-* the target already represents the observed sideband, this step will
-* leave the values unchanged. If either of the two DSBSpecFrames have a
-* value of zero for its AlignSideBand attribute, then this step is omitted.
-*
-* - Map the values from the spectral system of the target to the spectral
-* system of the template. This Mapping takes into account all the
-* inherited SpecFrame attributes such as System, StdOfRest, Unit, etc.
-*
-* - If both DSBSpecFrames have a value of 1 for the AlignSideBand
-* attribute, map values from the result's observed sideband to the
-* result's current sideband (given by its SideBand attribute). If the
-* result already represents the observed sideband, this step will leave
-* the values unchanged. If either of the two DSBSpecFrames have a value
-* of zero for its AlignSideBand attribute, then this step is omitted.
-
-* Applicability:
-* DSBSpecFrame
-* All DSBSpecFrames have this attribute.
-
-*att--
-*/
-/* The AlignSideBand value has a value of -1 when not set yielding a
- default of 0. */
-astMAKE_TEST(DSBSpecFrame,AlignSideBand,( this->alignsideband != -1 ))
-astMAKE_CLEAR(DSBSpecFrame,AlignSideBand,alignsideband,-1)
-astMAKE_GET(DSBSpecFrame,AlignSideBand,int,-1,((this->alignsideband==-1)?0:this->alignsideband) )
-astMAKE_SET(DSBSpecFrame,AlignSideBand,int,alignsideband,(value?1:0))
-
-/* Copy constructor. */
-/* ----------------- */
-/* None needed */
-
-/* Destructor. */
-/* ----------- */
-/* None needed */
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for DSBSpecFrame objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the DSBSpecFrame class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the DSBSpecFrame whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstDSBSpecFrame *this; /* Pointer to the DSBSpecFrame structure */
- const char *cval; /* Attribute value */
- const char *comm; /* Attribute comment */
- double dval; /* Attribute value */
- int ival; /* Attribute value */
- int set; /* Is attribute set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the DSBSpecFrame structure. */
- this = (AstDSBSpecFrame *) this_object;
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* DSBCentre */
-/* --------- */
- set = TestDSBCentre( this, status );
- dval = set ? GetDSBCentre( this, status ) : astGetDSBCentre( this );
- astWriteDouble( channel, "DSBCen", set, 1, dval, "Central frequency (Hz topo)" );
-
-/* IF */
-/* -- */
- set = TestIF( this, status );
- dval = set ? GetIF( this, status ) : astGetIF( this );
- astWriteDouble( channel, "IF", set, 1, dval, "Intermediate frequency (Hz)" );
-
-/* SideBand */
-/* -------- */
- set = TestSideBand( this, status );
- ival = set ? GetSideBand( this, status ) : astGetSideBand( this );
- if( ival == LSB ) {
- cval = "LSB";
- comm = "Represents lower sideband";
-
- } else if( ival == LO ) {
- cval = "LO";
- comm = "Represents offset from LO frequency";
-
- } else {
- cval = "USB";
- comm = "Represents upper sideband";
- }
- astWriteString( channel, "SideBn", set, 1, cval, comm );
-
-/* AlignSideBand */
-/* ------------- */
- set = TestAlignSideBand( this, status );
- ival = set ? GetAlignSideBand( this, status ) : astGetAlignSideBand( this );
- astWriteInt( channel, "AlSdBn", set, 1, ival, "Align sidebands?" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsADSBSpecFrame and astCheckDSBSpecFrame functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(DSBSpecFrame,SpecFrame)
-astMAKE_CHECK(DSBSpecFrame)
-
-AstDSBSpecFrame *astDSBSpecFrame_( const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astDSBSpecFrame
-f AST_DSBSPECFRAME
-
-* Purpose:
-* Create a DSBSpecFrame.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "dsbspecframe.h"
-c AstDSBSpecFrame *astDSBSpecFrame( const char *options, ... )
-f RESULT = AST_DSBSPECFRAME( OPTIONS, STATUS )
-
-* Class Membership:
-* DSBSpecFrame constructor.
-
-* Description:
-* This function creates a new DSBSpecFrame and optionally initialises its
-* attributes.
-*
-* A DSBSpecFrame is a specialised form of SpecFrame which represents
-* positions in a spectrum obtained using a dual sideband instrument.
-* Such an instrument produces a spectrum in which each point contains
-* contributions from two distinctly different frequencies, one from
-* the "lower side band" (LSB) and one from the "upper side band" (USB).
-* Corresponding LSB and USB frequencies are connected by the fact
-* that they are an equal distance on either side of a fixed central
-* frequency known as the "Local Oscillator" (LO) frequency.
-*
-* When quoting a position within such a spectrum, it is necessary to
-* indicate whether the quoted position is the USB position or the
-* corresponding LSB position. The SideBand attribute provides this
-* indication. Another option that the SideBand attribute provides is
-* to represent a spectral position by its topocentric offset from the
-* LO frequency.
-*
-* In practice, the LO frequency is specified by giving the distance
-* from the LO frequency to some "central" spectral position. Typically
-* this central position is that of some interesting spectral feature.
-* The distance from this central position to the LO frequency is known
-* as the "intermediate frequency" (IF). The value supplied for IF can
-* be a signed value in order to indicate whether the LO frequency is
-* above or below the central position.
-
-* Parameters:
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new DSBSpecFrame. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new DSBSpecFrame. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astDSBSpecFrame()
-f AST_DSBSPECFRAME = INTEGER
-* A pointer to the new DSBSpecFrame.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstDSBSpecFrame *new; /* Pointer to new DSBSpecFrame */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the DSBSpecFrame, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitDSBSpecFrame( NULL, sizeof( AstDSBSpecFrame ), !class_init, &class_vtab,
- "DSBSpecFrame" );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new DSBSpecFrame's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new DSBSpecFrame. */
- return new;
-}
-
-AstDSBSpecFrame *astDSBSpecFrameId_( const char *options, ... ) {
-/*
-* Name:
-* astDSBSpecFrameId_
-
-* Purpose:
-* Create a DSBSpecFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "dsbspecframe.h"
-* AstDSBSpecFrame *astDSBSpecFrameId_( const char *options, ... )
-
-* Class Membership:
-* DSBSpecFrame constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astDSBSpecFrame constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astDSBSpecFrame_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astDSBSpecFrame_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astDSBSpecFrame_.
-
-* Returned Value:
-* The ID value associated with the new DSBSpecFrame.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstDSBSpecFrame *new; /* Pointer to new DSBSpecFrame */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the DSBSpecFrame, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitDSBSpecFrame( NULL, sizeof( AstDSBSpecFrame ), !class_init, &class_vtab,
- "DSBSpecFrame" );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new DSBSpecFrame's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new DSBSpecFrame. */
- return astMakeId( new );
-}
-
-AstDSBSpecFrame *astInitDSBSpecFrame_( void *mem, size_t size, int init,
- AstDSBSpecFrameVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitDSBSpecFrame
-
-* Purpose:
-* Initialise a DSBSpecFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "dsbspecframe.h"
-* AstDSBSpecFrame *astInitDSBSpecFrame( void *mem, size_t size, int init,
-* AstDSBSpecFrameVtab *vtab, const char *name )
-
-* Class Membership:
-* DSBSpecFrame initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new DSBSpecFrame object. It allocates memory (if necessary) to accommodate
-* the DSBSpecFrame plus any additional data associated with the derived class.
-* It then initialises a DSBSpecFrame structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a DSBSpecFrame at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the DSBSpecFrame is to be initialised.
-* This must be of sufficient size to accommodate the DSBSpecFrame data
-* (sizeof(DSBSpecFrame)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the DSBSpecFrame (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the DSBSpecFrame
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the DSBSpecFrame's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new DSBSpecFrame.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-
-* Returned Value:
-* A pointer to the new DSBSpecFrame.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstDSBSpecFrame *new; /* Pointer to new DSBSpecFrame */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitDSBSpecFrameVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Initialise a SpecFrame structure (the parent class) as the first component
- within the DSBSpecFrame structure, allocating memory if necessary. Specify that
- the SpecFrame should be defined in both the forward and inverse directions. */
- new = (AstDSBSpecFrame *) astInitSpecFrame( mem, size, 0,
- (AstSpecFrameVtab *) vtab, name );
- if ( astOK ) {
-
-/* Initialise the DSBSpecFrame data. */
-/* --------------------------------- */
- new->dsbcentre = AST__BAD;
- new->ifr = AST__BAD;
- new->sideband = BADSB;
- new->alignsideband = -1;
-
-/* If an error occurred, clean up by deleting the new DSBSpecFrame. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new DSBSpecFrame. */
- return new;
-}
-
-AstDSBSpecFrame *astLoadDSBSpecFrame_( void *mem, size_t size,
- AstDSBSpecFrameVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadDSBSpecFrame
-
-* Purpose:
-* Load a DSBSpecFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "dsbspecframe.h"
-* AstDSBSpecFrame *astLoadDSBSpecFrame( void *mem, size_t size,
-* AstDSBSpecFrameVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* DSBSpecFrame loader.
-
-* Description:
-* This function is provided to load a new DSBSpecFrame using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* DSBSpecFrame structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a DSBSpecFrame at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the DSBSpecFrame is to be
-* loaded. This must be of sufficient size to accommodate the
-* DSBSpecFrame data (sizeof(DSBSpecFrame)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the DSBSpecFrame (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the DSBSpecFrame structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstDSBSpecFrame) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new DSBSpecFrame. If this is NULL, a pointer
-* to the (static) virtual function table for the DSBSpecFrame class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "DSBSpecFrame" is used instead.
-
-* Returned Value:
-* A pointer to the new DSBSpecFrame.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Constants. */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstDSBSpecFrame *new; /* Pointer to the new DSBSpecFrame */
- char *text; /* Pointer to string value */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this DSBSpecFrame. In this case the
- DSBSpecFrame belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstDSBSpecFrame );
- vtab = &class_vtab;
- name = "DSBSpecFrame";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitDSBSpecFrameVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built DSBSpecFrame. */
- new = astLoadSpecFrame( mem, size, (AstSpecFrameVtab *) vtab, name,
- channel );
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "DSBSpecFrame" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* DSBCentre */
-/* --------- */
- new->dsbcentre = astReadDouble( channel, "dsbcen", AST__BAD );
- if ( TestDSBCentre( new, status ) ) SetDSBCentre( new, new->dsbcentre, status );
-
-/* IF */
-/* -- */
- new->ifr = astReadDouble( channel, "if", AST__BAD );
- if ( TestIF( new, status ) ) SetIF( new, new->ifr, status );
-
-/* SideBand */
-/* -------- */
- text = astReadString( channel, "sidebn", " " );
- if( astOK ) {
- if( !strcmp( text, " " ) ) {
- new->sideband = BADSB;
- } else if( !strcmp( text, "USB" ) ) {
- new->sideband = USB;
- } else if( !strcmp( text, "LSB" ) ) {
- new->sideband = LSB;
- } else if( !strcmp( text, "LO" ) ) {
- new->sideband = LO;
- } else {
- astError( AST__ATTIN, "astRead(%s): Invalid SideBand description "
- "\"%s\".", status, astGetClass( channel ), text );
- }
- if ( TestSideBand( new, status ) ) SetSideBand( new, new->sideband, status );
- text = astFree( text );
- }
-
-/* AlignSideBand */
-/* ------------- */
- new->alignsideband = astReadInt( channel, "alsdbn", -1 );
- if( TestAlignSideBand( new, status ) ) SetAlignSideBand( new, new->alignsideband, status );
-
-/* If an error occurred, clean up by deleting the new DSBSpecFrame. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new DSBSpecFrame pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-double astGetImagFreq_( AstDSBSpecFrame *this, int *status ) {
- if ( !astOK ) return AST__BAD;
- return (**astMEMBER(this,DSBSpecFrame,GetImagFreq))( this, status );
-}
-
-
-
-
-
-
diff --git a/ast-5.3-1/dsbspecframe.h b/ast-5.3-1/dsbspecframe.h
deleted file mode 100644
index 3ed0446..0000000
--- a/ast-5.3-1/dsbspecframe.h
+++ /dev/null
@@ -1,298 +0,0 @@
-#if !defined( DSBSPECFRAME_INCLUDED ) /* Include this file only once */
-#define DSBSPECFRAME_INCLUDED
-/*
-*+
-* Name:
-* dsbspecframe.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the DSBSpecFrame class.
-
-* Invocation:
-* #include "dsbspecframe.h"
-
-* Description:
-* This include file defines the interface to the DSBSpecFrame class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-
-* Inheritance:
-* The DSBSpecFrame class inherits from the SpecFrame class.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-
-* History:
-* 5-AUG-2004 (DSB):
-* Original version.
-* 27-OCT-2006 (DSB):
-* Added AlignSideBand.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "specframe.h" /* Spectral coord systems (parent class) */
-
-/* C header files. */
-/* --------------- */
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* DSBSpecFrame structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstDSBSpecFrame {
-
-/* Attributes inherited from the parent class. */
- AstSpecFrame specframe; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- double dsbcentre; /* Centre frequency */
- double ifr; /* Intermediate frequency */
- int sideband; /* Current sideband */
- int alignsideband; /* Aligns sidebands? */
-
-} AstDSBSpecFrame;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstDSBSpecFrameVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstSpecFrameVtab specframe_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- double (* GetDSBCentre)( AstDSBSpecFrame *, int * );
- int (* TestDSBCentre)( AstDSBSpecFrame *, int * );
- void (* ClearDSBCentre)( AstDSBSpecFrame *, int * );
- void (* SetDSBCentre)( AstDSBSpecFrame *, double, int * );
-
- double (* GetIF)( AstDSBSpecFrame *, int * );
- int (* TestIF)( AstDSBSpecFrame *, int * );
- void (* ClearIF)( AstDSBSpecFrame *, int * );
- void (* SetIF)( AstDSBSpecFrame *, double, int * );
-
- int (* GetSideBand)( AstDSBSpecFrame *, int * );
- int (* TestSideBand)( AstDSBSpecFrame *, int * );
- void (* ClearSideBand)( AstDSBSpecFrame *, int * );
- void (* SetSideBand)( AstDSBSpecFrame *, int, int * );
-
- int (* GetAlignSideBand)( AstDSBSpecFrame *, int * );
- int (* TestAlignSideBand)( AstDSBSpecFrame *, int * );
- void (* ClearAlignSideBand)( AstDSBSpecFrame *, int * );
- void (* SetAlignSideBand)( AstDSBSpecFrame *, int, int * );
-
- double (* GetImagFreq)( AstDSBSpecFrame *, int * );
-
-} AstDSBSpecFrameVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstDSBSpecFrameGlobals {
- AstDSBSpecFrameVtab Class_Vtab;
- int Class_Init;
- char GetAttrib_Buff[ 101 ];
- char GetLabel_Buff[ 101 ];
-} AstDSBSpecFrameGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(DSBSpecFrame) /* Check class membership */
-astPROTO_ISA(DSBSpecFrame) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstDSBSpecFrame *astDSBSpecFrame_( const char *, int *, ...);
-#else
-AstDSBSpecFrame *astDSBSpecFrameId_( const char *, ... )__attribute__((format(printf,1,2)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstDSBSpecFrame *astInitDSBSpecFrame_( void *, size_t, int, AstDSBSpecFrameVtab *,
- const char *, int * );
-
-/* Vtab initialiser. */
-void astInitDSBSpecFrameVtab_( AstDSBSpecFrameVtab *, const char *, int * );
-
-/* Loader. */
-AstDSBSpecFrame *astLoadDSBSpecFrame_( void *, size_t, AstDSBSpecFrameVtab *,
- const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitDSBSpecFrameGlobals_( AstDSBSpecFrameGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS) /* Protected */
- double astGetDSBCentre_( AstDSBSpecFrame *, int * );
- int astTestDSBCentre_( AstDSBSpecFrame *, int * );
- void astClearDSBCentre_( AstDSBSpecFrame *, int * );
- void astSetDSBCentre_( AstDSBSpecFrame *, double, int * );
-
- double astGetIF_( AstDSBSpecFrame *, int * );
- int astTestIF_( AstDSBSpecFrame *, int * );
- void astClearIF_( AstDSBSpecFrame *, int * );
- void astSetIF_( AstDSBSpecFrame *, double, int * );
-
- int astGetSideBand_( AstDSBSpecFrame *, int * );
- int astTestSideBand_( AstDSBSpecFrame *, int * );
- void astClearSideBand_( AstDSBSpecFrame *, int * );
- void astSetSideBand_( AstDSBSpecFrame *, int, int * );
-
- int astGetAlignSideBand_( AstDSBSpecFrame *, int * );
- int astTestAlignSideBand_( AstDSBSpecFrame *, int * );
- void astClearAlignSideBand_( AstDSBSpecFrame *, int * );
- void astSetAlignSideBand_( AstDSBSpecFrame *, int, int * );
-
- double astGetImagFreq_( AstDSBSpecFrame *, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckDSBSpecFrame(this) astINVOKE_CHECK(DSBSpecFrame,this,0)
-#define astVerifyDSBSpecFrame(this) astINVOKE_CHECK(DSBSpecFrame,this,1)
-
-/* Test class membership. */
-#define astIsADSBSpecFrame(this) astINVOKE_ISA(DSBSpecFrame,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astDSBSpecFrame astINVOKE(F,astDSBSpecFrame_)
-#else
-#define astDSBSpecFrame astINVOKE(F,astDSBSpecFrameId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define \
-astInitDSBSpecFrame(mem,size,init,vtab,name) \
-astINVOKE(O,astInitDSBSpecFrame_(mem,size,init,vtab,name,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitDSBSpecFrameVtab(vtab,name) astINVOKE(V,astInitDSBSpecFrameVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadDSBSpecFrame(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadDSBSpecFrame_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckDSBSpecFrame to validate DSBSpecFrame pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-
-#define astGetDSBCentre(this) \
-astINVOKE(V,astGetDSBCentre_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#define astTestDSBCentre(this) \
-astINVOKE(V,astTestDSBCentre_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#define astClearDSBCentre(this) \
-astINVOKE(V,astClearDSBCentre_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#define astSetDSBCentre(this,val) \
-astINVOKE(V,astSetDSBCentre_(astCheckDSBSpecFrame(this),val,STATUS_PTR))
-
-#define astGetIF(this) \
-astINVOKE(V,astGetIF_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#define astTestIF(this) \
-astINVOKE(V,astTestIF_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#define astClearIF(this) \
-astINVOKE(V,astClearIF_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#define astSetIF(this,val) \
-astINVOKE(V,astSetIF_(astCheckDSBSpecFrame(this),val,STATUS_PTR))
-
-#define astGetSideBand(this) \
-astINVOKE(V,astGetSideBand_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#define astTestSideBand(this) \
-astINVOKE(V,astTestSideBand_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#define astClearSideBand(this) \
-astINVOKE(V,astClearSideBand_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#define astSetSideBand(this,val) \
-astINVOKE(V,astSetSideBand_(astCheckDSBSpecFrame(this),val,STATUS_PTR))
-
-#define astGetAlignSideBand(this) \
-astINVOKE(V,astGetAlignSideBand_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#define astTestAlignSideBand(this) \
-astINVOKE(V,astTestAlignSideBand_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#define astClearAlignSideBand(this) \
-astINVOKE(V,astClearAlignSideBand_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#define astSetAlignSideBand(this,val) \
-astINVOKE(V,astSetAlignSideBand_(astCheckDSBSpecFrame(this),val,STATUS_PTR))
-
-#define astGetImagFreq(this) \
-astINVOKE(V,astGetImagFreq_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/dssmap.c b/ast-5.3-1/dssmap.c
deleted file mode 100644
index e727f1d..0000000
--- a/ast-5.3-1/dssmap.c
+++ /dev/null
@@ -1,2287 +0,0 @@
-/*
-*class++
-* Name:
-* DssMap
-
-* Purpose:
-* Map points using a Digitised Sky Survey plate solution.
-
-* Constructor Function:
-* The DssMap class does not have a constructor function. A DssMap
-* is created only as a by-product of reading a FrameSet (using
-c astRead) from a FitsChan which contains FITS header cards
-f AST_READ) from a FitsChan which contains FITS header cards
-* describing a DSS plate solution, and whose Encoding attribute is
-* set to "DSS". The result of such a read, if successful, is a
-* FrameSet whose base and current Frames are related by a DssMap.
-
-* Description:
-* The DssMap class implements a Mapping which transforms between
-* 2-dimensional pixel coordinates and an equatorial sky coordinate
-* system (right ascension and declination) using a Digitised Sky
-* Survey (DSS) astrometric plate solution.
-*
-* The input coordinates are pixel numbers along the first and
-* second dimensions of an image, where the centre of the first
-* pixel is located at (1,1) and the spacing between pixel centres
-* is unity.
-*
-* The output coordinates are right ascension and declination in
-* radians. The celestial coordinate system used (FK4, FK5, etc.)
-* is unspecified, and will usually be indicated by appropriate
-* keywords in a FITS header.
-
-* Inheritance:
-* The DssMap class inherits from the Mapping class.
-
-* Attributes:
-* The DssMap class does not define any new attributes beyond those
-* which are applicable to all Mappings.
-
-* Functions:
-c The DssMap class does not define any new functions beyond those
-f The DssMap class does not define any new routines beyond those
-* which are applicable to all Mappings.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-* (except for code supplied by Doug Mink, as noted in this file)
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-* RFWS: R.F. Warren-Smith (Starlink, RAL)
-
-* History:
-* 18-FEB-1997 (DSB):
-* Original version.
-* 30-JUN-1997 (DSB):
-* astDssFits and astDssMap made protected instead of public.
-* 15-JUL-1997 (RFWS):
-* Tidied public prologues.
-* 5-SEP-197 (RFWS):
-* Added prototypes for platepos and platepix.
-* 4-NOV-1997 (DSB):
-* o A copy of the supplied FitsChan is no longer stored inside
-* the DssMap. The FitsChan returned by DssFits is now derived from
-* the wcs information stored in the SAOimage "WorldCoor" structure
-* (stored within the DssMap), and only contains the keywords
-* necessary to reconstruct the DssMap.
-* o The external representation of a DssMap is now stored in a set
-* of scalar values, rather than a FitsChan.
-* 22-DEC-1997 (DSB):
-* Bug fixed in MapMerge which caused a core dump when a
-* DssMap/WinMap combination is succesfully simplified.
-* 8-JAN-2003 (DSB):
-* Changed private InitVtab method to protected astInitDssMapVtab
-* method.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 10-MAY-2006 (DSB):
-* Override astEqual.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS DssMap
-
-/* Macro which returns the nearest integer to a given floating point
- value. */
-#define NINT(x) (int)((x)+(((x)>0.0)?0.5:-0.5))
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "memory.h" /* Memory allocation facilities */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-#include "channel.h" /* I/O channels */
-#include "fitschan.h" /* Manipulation of FITS header cards */
-#include "wcsmap.h" /* Degrees/radians conversion factors */
-#include "winmap.h" /* Shift and scale mappings */
-#include "dssmap.h" /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(DssMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(DssMap,Class_Init)
-#define class_vtab astGLOBAL(DssMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstDssMapVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstFitsChan *DssFits( AstDssMap *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int platepix( double, double, struct WorldCoor *, double *, double * );
-static int platepos( double, double, struct WorldCoor *, double *, double * );
-static struct WorldCoor *BuildWcs( AstFitsChan *, const char *, const char *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *obj, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-
-static int GetObjSize( AstObject *, int * );
-/* Member functions. */
-/* ================= */
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two DssMaps are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "dssmap.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* DssMap member function (over-rides the astEqual protected
-* method inherited from the astMapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two DssMaps are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Object (a DssMap).
-* that
-* Pointer to the second Object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the DssMaps are equivalent, zero otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstDssMap *that;
- AstDssMap *this;
- int i;
- int nin;
- int nout;
- int result;
- struct WorldCoor *this_wcs;
- struct WorldCoor *that_wcs;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain pointers to the two DssMap structures. */
- this = (AstDssMap *) this_object;
- that = (AstDssMap *) that_object;
-
-/* Check the second object is a DssMap. We know the first is a
- DssMap since we have arrived at this implementation of the virtual
- function. */
- if( astIsADssMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
- nin = astGetNin( this );
- nout = astGetNout( this );
- if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two DssMaps differ, it may still be possible
- for them to be equivalent. First compare the DssMaps if their Invert
- flags are the same. In this case all the attributes of the two DssMaps
- must be identical. */
- if( astGetInvert( this ) == astGetInvert( that ) ) {
-
- this_wcs = ( struct WorldCoor *) this->wcs;
- that_wcs = ( struct WorldCoor *) that->wcs;
-
- if( this_wcs->x_pixel_offset == that_wcs->x_pixel_offset &&
- this_wcs->y_pixel_offset == that_wcs->y_pixel_offset &&
- this_wcs->ppo_coeff[2] == that_wcs->ppo_coeff[2] &&
- this_wcs->ppo_coeff[5] == that_wcs->ppo_coeff[5] &&
- this_wcs->x_pixel_size == that_wcs->x_pixel_size &&
- this_wcs->y_pixel_size == that_wcs->y_pixel_size &&
- this_wcs->plate_dec == that_wcs->plate_dec &&
- this_wcs->plate_ra == that_wcs->plate_ra ) {
-
- result = 1;
- for( i = 0; i < 13; i++ ) {
- if( this_wcs->amd_x_coeff[i] != that_wcs->amd_x_coeff[i] ||
- this_wcs->amd_y_coeff[i] != that_wcs->amd_y_coeff[i] ) {
- result = 0;
- break;
- }
- }
-
- }
-
-/* If the Invert flags for the two DssMaps differ, the attributes of the two
- DssMaps must be inversely related to each other. */
- } else {
-
-/* In the specific case of a DssMap, Invert flags must be equal. */
- result = 0;
-
- }
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "dssmap.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* DssMap member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied DssMap,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the DssMap.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstDssMap *this; /* Pointer to DssMap structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the DssMap structure. */
- this = (AstDssMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
- result += astTSizeOf( this->wcs );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-
-static struct WorldCoor *BuildWcs( AstFitsChan *fits, const char *method,
- const char *class, int *status ) {
-/*
-* Name:
-* BuildWcs
-
-* Purpose:
-* Copy DSS plate fit information from a FitsChan to a SAOimage
-* WorldCoor structure.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "dssmap.h"
-* struct WorldCoor *BuildWcs( AstFitsChan *fits, const char *method,
-* const char *class )
-
-* Class Membership:
-* DssMap member function.
-
-* Description:
-* This creates a WorldCoor structure and copies the required data
-* from the supplied FitsChan into the new WorldCoor structure. Note,
-* only those components of the WorldCoor structure which are needed to
-* transform between pixel and sky coordinates are initialised in the
-* returned structure.
-
-* Parameters:
-* fits
-* Pointer to the FitsChan containing the FITS header describing
-* the DSS plate fit.
-* method
-* The calling method (for error messages).
-* class
-* The object class (for error messages).
-
-* Returned Value:
-* A pointer to the new WorldCoor structure. This should be freed
-* using astFree when no longer needed.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or
-* if this function should fail for any reason.
-
-*/
-
-/* Local Variables: */
- char name_buff[ 10 ]; /* Buffer for keyword name */
- char *name; /* Pointer to jeyword name string */
- char *ckeyval; /* Pointer to string keyword value */
- struct WorldCoor *ret; /* Pointer to the returned structure */
- double rah,ram,ras; /* Centre RA hours, minutes and seconds */
- double dsign; /* Sign of centre dec */
- double decd,decm,decs; /* Centre Dec degrees, minutes, seconds */
- double dec_deg; /* Centre Dec in degrees */
- double ra_hours; /* Centre RA in hours */
- int i; /* Coefficient index */
-
-/* Check the local error status. */
- if ( !astOK ) return NULL;
-
-/* Get memory to hold the returned structure. */
- ret = (struct WorldCoor *) astMalloc( sizeof( struct WorldCoor ) );
-
-/* Check the memory can be used. */
- if( astOK ){
-
-/* The following code is based on the "wcsinit" function in SAOimage file
- wcs.c. Note, only the values needed in the platepos and platepix
- functions are set up. The FITS keywords are accessed in the order in
- which they are usually stored in a FITS file. This will cut down the
- time spent searching for keywords. Report an error if any required
- keyword is not found. */
-
-/* Plate center RA */
- rah = 0.0;
- ram = 0.0;
- ras = 0.0;
-
- name = "PLTRAH";
- if( !astGetFitsF( fits, name, &rah ) && astOK ){
- astError( AST__BDFTS, "%s(%s): No value has been supplied for the "
- "FITS keyword '%s'.", status, method, class, name );
- }
-
- name = "PLTRAM";
- if( !astGetFitsF( fits, name, &ram ) && astOK ){
- astError( AST__BDFTS, "%s(%s): No value has been supplied for the "
- "FITS keyword '%s'.", status, method, class, name );
- }
-
- name = "PLTRAS";
- if( !astGetFitsF( fits, name, &ras ) && astOK ){
- astError( AST__BDFTS, "%s(%s): No value has been supplied for the "
- "FITS keyword '%s'.", status, method, class, name );
- }
-
- ra_hours = rah + (ram / (double)60.0) + (ras / (double)3600.0);
- ret->plate_ra = AST__DD2R*15.0*ra_hours;
-
-
-/* Plate center Dec */
- name = "PLTDECSN";
- if( !astGetFitsS( fits, name, &ckeyval ) && astOK ){
- dsign = 1.0;
-
- } else {
- if( *ckeyval == '-' ){
- dsign = -1.0;
- } else {
- dsign = 1.0;
- }
-
- }
-
- decd = 0.0;
- decm = 0.0;
- decs = 0.0;
-
- name = "PLTDECD";
- if( !astGetFitsF( fits, name, &decd ) && astOK ){
- astError( AST__BDFTS, "%s(%s): No value has been supplied for the "
- "FITS keyword '%s'.", status, method, class, name );
- }
-
- name = "PLTDECM";
- if( !astGetFitsF( fits, name, &decm ) && astOK ){
- astError( AST__BDFTS, "%s(%s): No value has been supplied for the "
- "FITS keyword '%s'.", status, method, class, name );
- }
-
- name = "PLTDECS";
- if( !astGetFitsF( fits, name, &decs ) && astOK ){
- astError( AST__BDFTS, "%s(%s): No value has been supplied for the "
- "FITS keyword '%s'.", status, method, class, name );
- }
-
- dec_deg = dsign * (decd+(decm/(double)60.0)+(decs/(double)3600.0));
- ret->plate_dec = AST__DD2R*dec_deg;
-
-/* Plate Scale arcsec per mm */
- name = "PLTSCALE";
- if( !astGetFitsF( fits, name, &ret->plate_scale ) && astOK ){
- astError( AST__BDFTS, "%s(%s): No value has been supplied for the "
- "FITS keyword '%s'.", status, method, class, name );
- }
-
-/* X and Y corners (in pixels) */
- name = "CNPIX1";
- if( !astGetFitsF( fits, name, &ret->x_pixel_offset ) && astOK ){
- astError( AST__BDFTS, "%s(%s): No value has been supplied for the "
- "FITS keyword '%s'.", status, method, class, name );
- }
-
- name = "CNPIX2";
- if( !astGetFitsF( fits, name, &ret->y_pixel_offset ) && astOK ){
- astError( AST__BDFTS, "%s(%s): No value has been supplied for the "
- "FITS keyword '%s'.", status, method, class, name );
- }
-
-/* X and Y pixel sizes (microns). */
- name = "XPIXELSZ";
- if( !astGetFitsF( fits, name, &ret->x_pixel_size ) && astOK ){
- astError( AST__BDFTS, "%s(%s): No value has been supplied for the "
- "FITS keyword '%s'.", status, method, class, name );
- }
-
- name = "YPIXELSZ";
- if( !astGetFitsF( fits, name, &ret->y_pixel_size ) && astOK ){
- astError( AST__BDFTS, "%s(%s): No value has been supplied for the "
- "FITS keyword '%s'.", status, method, class, name );
- }
-
-/* Orientation Coefficients. Only report an error if PPO3 or PPO6 are
- missing (these are the only two which are actually used). Assume a
- value of zero for any of the others which are missing. */
- name = name_buff;
- for ( i = 0; i < 6; i++ ) {
- sprintf( name_buff, "PPO%d", i + 1 );
- if( !astGetFitsF( fits, name, &ret->ppo_coeff[i] ) ) {
- ret->ppo_coeff[i] = 0.0;
- if( ( i == 2 || i == 5 ) && astOK ) {
- astError( AST__BDFTS, "%s(%s): No value has been supplied "
- "for the FITS keyword '%s'.", status, method, class,
- name );
- break;
- }
- }
- }
-
-/* Plate solution x and y coefficients. Report an error if any of
- coefficients 1 to 14 are missing. Assume a value of zero for any
- others which are missing. */
- name = name_buff;
- for( i = 0; i < 19; i++ ){
- sprintf( name_buff, "AMDX%d", i + 1 );
- if( !astGetFitsF( fits, name, &ret->amd_x_coeff[i] ) ) {
- ret->amd_x_coeff[i] = 0.0;
- if( i < 13 && astOK ){
- astError( AST__BDFTS, "%s(%s): No value has been supplied "
- "for the FITS keyword '%s'.", status, method, class, name );
- break;
- }
- }
- }
-
- for( i = 0; i < 19; i++ ){
- sprintf( name_buff, "AMDY%d", i + 1 );
- if( !astGetFitsF( fits, name, &ret->amd_y_coeff[i] ) ){
- ret->amd_y_coeff[i] = 0.0;
- if( i < 13 && astOK ){
- astError( AST__BDFTS, "%s(%s): No value has been supplied "
- "for the FITS keyword '%s'.", status, method, class, name );
- break;
- }
- }
- }
-
-/* If anything went wrong, free the returned structure. */
- if( !astOK ) ret = (struct WorldCoor *) astFree( (void *) ret );
- }
-
-/* Return the pointer. */
- return ret;
-}
-
-static AstFitsChan *DssFits( AstDssMap *this, int *status ) {
-/*
-*+
-* Name:
-* astDssFits
-
-* Purpose:
-* Return a pointer to a FitsChan describing a DssMap.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "dssmap.h"
-* AstFitsChan *DssFits( AstDssMap *this )
-
-* Class Membership:
-* DssMap method.
-
-* Description:
-* This function returns a pointer to a DSS-encoded FitsChan containing
-* cards generated from the information stored with the DssMap. The
-* keywords contained in the FitsChan are those which would ne needed to
-* re-create the DssMap (see astDSSMap).
-
-* Parameters:
-* this
-* Pointer to the DssMap.
-
-* Returned Value:
-* astDssFits()
-* A pointer to the FitsChan.
-
-* Notes:
-* - The returned pointer should be annuled using astAnnul when no longer
-* needed.
-* - A value of NULL will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstFitsChan *ret; /* Pointer to the returned FitsChan */
- char *comm; /* Pointer to keyword comment string */
- char *name; /* Pointer to keyword name string */
- char name_buff[ 10 ]; /* Buffer for keyword name */
- double dec; /* Centre Dec in degrees */
- double decd,decm,decs; /* Centre Dec degrees, minutes, seconds */
- double ra; /* Centre RA in hours */
- double rah,ram,ras; /* Centre RA hours, minutes and seconds */
- int i; /* Coefficient index */
- struct WorldCoor *wcs; /* WCS information from the DssMap */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Store a pointer to the WCS information stored in the DSSMap. */
- wcs = (struct WorldCoor *) this->wcs,
-
-/* Create a new empty FitsChan, using DSS encoding. */
- ret = astFitsChan( NULL, NULL, "Encoding=DSS", status );
-
-/* Create the keyword values and stored them in the returned FitsChan... */
-
-/* Plate centre RA. */
- ra = wcs->plate_ra/( AST__DD2R*15.0 );
- ra = modf( ra, &rah );
- ra = modf( 60.0*ra, &ram );
- ras = 60.0*ra;
-
- astSetFitsI( ret, "PLTRAH", NINT( rah ), "Plate centre RA", 0 );
- astSetFitsI( ret, "PLTRAM", NINT( ram ), " ", 0 );
- astSetFitsF( ret, "PLTRAS", ras, " ", 0 );
-
-/* Plate centre DEC. */
- dec = wcs->plate_dec/AST__DD2R;
- if( dec < 0.0 ) {
- dec = -dec;
- astSetFitsS( ret, "PLTDECSN", "-", "Plate centre DEC", 0 );
- } else {
- astSetFitsS( ret, "PLTDECSN", "+", "Plate centre DEC", 0 );
- }
-
- dec = modf( dec, &decd );
- dec = modf( 60.0*dec, &decm );
- decs = 60.0*dec;
-
- astSetFitsI( ret, "PLTDECD", NINT( decd ), " ", 0 );
- astSetFitsI( ret, "PLTDECM", NINT( decm ), " ", 0 );
- astSetFitsF( ret, "PLTDECS", decs, " ", 0 );
-
-/* Plate Scale arcsec per mm */
- astSetFitsF( ret, "PLTSCALE", wcs->plate_scale, "Plate Scale arcsec per mm",
- 0 );
-
-/* X and Y corners (in pixels) */
- astSetFitsI( ret, "CNPIX1", NINT( wcs->x_pixel_offset ),
- "X corner (pixels)", 0 );
- astSetFitsI( ret, "CNPIX2", NINT( wcs->y_pixel_offset ),
- "Y corner", 0 );
-
-/* X and Y pixel sizes (microns). */
- astSetFitsF( ret, "XPIXELSZ", wcs->x_pixel_size,
- "X pixel size (microns)", 0 );
- astSetFitsF( ret, "YPIXELSZ", wcs->y_pixel_size,
- "Y pixel size (microns)", 0 );
-
-/* Orientation Coefficients. */
- name = name_buff;
- comm = "Orientation Coefficients";
- for ( i = 0; i < 6; i++ ) {
- sprintf( name_buff, "PPO%d", i + 1 );
- astSetFitsF( ret, name, wcs->ppo_coeff[i], comm, 0 );
- comm = " ";
- }
-
-/* Plate solution x and y coefficients. */
- comm = "Plate solution x coefficients";
- for( i = 0; i < 19; i++ ){
- sprintf( name_buff, "AMDX%d", i + 1 );
- astSetFitsF( ret, name, wcs->amd_x_coeff[i], comm, 0 );
- comm = " ";
- }
-
- comm = "Plate solution y coefficients";
- for( i = 0; i < 19; i++ ){
- sprintf( name_buff, "AMDY%d", i + 1 );
- astSetFitsF( ret, name, wcs->amd_y_coeff[i], comm, 0 );
- comm = " ";
- }
-
-/* Return a pointer to the FitsChan. */
- return ret;
-}
-
-void astInitDssMapVtab_( AstDssMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitDssMapVtab
-
-* Purpose:
-* Initialise a virtual function table for a DssMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "dssmap.h"
-* void astInitDssMapVtab( AstDssMapVtab *vtab, const char *name )
-
-* Class Membership:
-* DssMap vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the DssMap class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsADssMap) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
- vtab->DssFits = DssFits;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- mapping = (AstMappingVtab *) vtab;
- object = (AstObjectVtab *) vtab;
-
- parent_transform = mapping->Transform;
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
- mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- object->Equal = Equal;
- mapping->MapMerge = MapMerge;
-
-/* Declare the class dump, copy and delete function. */
- astSetDump( object, Dump, "DssMap", "DSS plate fit mapping" );
- astSetCopy( object, Copy );
- astSetDelete( object, Delete );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a DssMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* DssMap method (over-rides the protected astMapMerge method
-* inherited from the Mapping class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated DssMap in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated DssMap with a Mapping which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated DssMap which is to be merged with
-* its neighbours. This should be a cloned copy of the DssMap
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* DssMap it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated DssMap resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstDssMap *dm; /* Pointer to supplied DssMap */
- AstDssMap *dmnew; /* Pointer to replacement DssMap */
- AstFitsChan *fits; /* FITS headers for replacement DssMap */
- AstFitsChan *fits_dss;/* FITS headers for supplied DssMap */
- AstWinMap *wm; /* Pointer to the adjacent WinMap */
- double *a; /* Pointer to shift terms */
- double *b; /* Pointer to scale terms */
- double cnpix1; /* X pixel origin */
- double cnpix2; /* Y pixel origin */
- double xpixelsz; /* X pixel size */
- double ypixelsz; /* Y pixel size */
- int i; /* Loop counter */
- int ok; /* All FITS keywords found? */
- int old_winv; /* original Invert value for supplied WinMap */
- int result; /* Result value to return */
- int wmi; /* Index of adjacent WinMap in map list */
- struct WorldCoor *wcs;/* Pointer to SAOimage wcs structure */
-
-/* Initialise. */
- result = -1;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* The only simplification easily possible is if a WinMap maps the pixel
- coordinates prior to a DssMap. If the DssMap has not been inverted, the
- WinMap must be applied before the DssMap, otherwise the WinMap must be
- applied after the DssMap. */
- if( series ){
-
- if( !( *invert_list )[ where ] ){
- wmi = where - 1;
- } else {
- wmi = where + 1;
- }
-
- if( wmi >= 0 && wmi < *nmap ){
- if( !strcmp( astGetClass( ( *map_list )[ wmi ] ), "WinMap" ) ){
-
-/* Temporarily set the Invert attribute of the WinMap to the supplied value. */
- wm = (AstWinMap *) ( *map_list )[ wmi ];
- old_winv = astGetInvert( wm );
- astSetInvert( wm, ( *invert_list )[ wmi ] );
-
-/* Get a copy of the scale and shift terms from the WinMap. */
- astWinTerms( wm, &a, &b );
-
-/* Check that the scale and shift terms are usable. */
- if( astOK &&
- a[ 0 ] != AST__BAD && b[ 0 ] != AST__BAD && b[ 0 ] != 0.0 &&
- a[ 1 ] != AST__BAD && b[ 1 ] != AST__BAD && b[ 1 ] != 0.0 ){
-
-/* Get the values of the keywords which define the origin and scales of
- the DssMap pixel coordinate system. */
- dm = (AstDssMap *) ( *map_list )[ where ];
- wcs = (struct WorldCoor *) ( dm->wcs );
-
- cnpix1 = wcs->x_pixel_offset;
- cnpix2 = wcs->y_pixel_offset;
- xpixelsz = wcs->x_pixel_size;
- ypixelsz = wcs->y_pixel_size;
-
-/* Calculate new values which take into account the WinMap. */
- if( wmi == where - 1 ){
- xpixelsz *= b[ 0 ];
- ypixelsz *= b[ 1 ];
- cnpix1 = 0.5 + ( cnpix1 + a[ 0 ] - 0.5 )/b[ 0 ];
- cnpix2 = 0.5 + ( cnpix2 + a[ 1 ] - 0.5 )/b[ 1 ];
-
- } else {
- xpixelsz /= b[ 0 ];
- ypixelsz /= b[ 1 ];
- cnpix1 = b[ 0 ]*( cnpix1 - 0.5 ) - a[ 0 ] + 0.5;
- cnpix2 = b[ 1 ]*( cnpix2 - 0.5 ) - a[ 1 ] + 0.5;
- }
-
-/* The CNPIX1 and CNPIX2 keywords are integer keywords. Therefore, we can
- only do the simplification if the new values are integer to a good
- approximation. We use one hundredth of a pixel. */
- if( fabs( cnpix1 - NINT( cnpix1 ) ) < 0.01 &&
- fabs( cnpix2 - NINT( cnpix2 ) ) < 0.01 ){
-
-/* Get a copy of the FitsChan holding the header cards which define the
- DssMap. */
- fits_dss = astDssFits( dm );
- fits = astCopy( fits_dss );
- fits_dss = astAnnul( fits_dss );
-
-/* Update the value of each of the changed keywords. */
- ok = 1;
-
- astClearCard( fits );
- if( astFindFits( fits, "CNPIX1", NULL, 0 ) ){
- astSetFitsI( fits, "CNPIX1", NINT( cnpix1 ), NULL, 1 );
- } else {
- ok = 0;
- }
-
- astClearCard( fits );
- if( astFindFits( fits, "CNPIX2", NULL, 0 ) ){
- astSetFitsI( fits, "CNPIX2", NINT( cnpix2 ), NULL, 1 );
- } else {
- ok = 0;
- }
-
- astClearCard( fits );
- if( astFindFits( fits, "XPIXELSZ", NULL, 0 ) ){
- astSetFitsF( fits, "XPIXELSZ", xpixelsz, NULL, 1 );
- } else {
- ok = 0;
- }
-
- astClearCard( fits );
- if( astFindFits( fits, "YPIXELSZ", NULL, 0 ) ){
- astSetFitsF( fits, "YPIXELSZ", ypixelsz, NULL, 1 );
- } else {
- ok = 0;
- }
-
-/* If all the keywords were updated succesfully, create the new DssMap
- based on the modified FITS header cards. */
- if( ok ){
- dmnew = astDssMap( fits, "", status );
-
-/* Anull the DssMap pointer in the list and replace it with the new one.
- The invert flag is left unchanged. */
- dm = astAnnul( dm );
- ( *map_list )[ where ] = (AstMapping *) dmnew;
-
-/* Annul the WinMap pointer in the list, and shuffle any remaining
- Mappings down to fill the gap. */
- wm = astAnnul( wm );
- for ( i = wmi + 1; i < *nmap; i++ ) {
- ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
- ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
- }
-
-/* Clear the vacated element at the end. */
- ( *map_list )[ *nmap - 1 ] = NULL;
- ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
- modified element. */
- ( *nmap )--;
- result = MIN( wmi, where );
-
- }
-
-/* Annul the FitsChan holding the modified header cards. */
- fits = astAnnul( fits );
- }
- }
-
-/* Free the arrays holding scale and shift terms from the WinMap. */
- a = (double *) astFree( (void *) a );
- b = (double *) astFree( (void *) b );
-
-/* Reinstate the original setting of the Invert attribute of the WinMap (if
- it still exists). */
- if( wm ) astSetInvert( wm, old_winv );
-
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a DssMap to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "dssmap.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* DssMap member function (over-rides the astTransform protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function takes a DssMap and a set of points encapsulated in a
-* PointSet and transforms the points so as to apply the required DSS
-* plate fit.
-
-* Parameters:
-* this
-* Pointer to the DssMap.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* be 2.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstPointSet *result; /* Pointer to output PointSet */
- AstDssMap *map; /* Pointer to DssMap to be applied */
- double **ptr_in; /* Pointer to input coordinate data */
- double **ptr_out; /* Pointer to output coordinate data */
- double *aa; /* Pointer to next longitude value */
- double *bb; /* Pointer to next latitude value */
- double *xx; /* Pointer to next pixel X value */
- double *yy; /* Pointer to next pixel Y value */
- int npoint; /* Number of points */
- int point; /* Loop counter for points */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the DssMap. */
- map = (AstDssMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Mapping class. This function validates
- all arguments and generates an output PointSet if necessary, but does not
- actually transform any coordinate values. */
- result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points from the input PointSet and obtain
- pointers for accessing the input and output coordinate values. */
- npoint = astGetNpoint( in );
- ptr_in = astGetPoints( in );
- ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse mapping, according to the
- direction specified and whether the mapping has been inverted. */
- if ( astGetInvert( map ) ) forward = !forward;
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
- if ( astOK ) {
-
-/* First deal with forward transformations. */
- if( forward ){
-
-/* Store pointers to the next value on each axis. */
- xx = ptr_in[ 0 ];
- yy = ptr_in[ 1 ];
- aa = ptr_out[ 0 ];
- bb = ptr_out[ 1 ];
-
-/* Loop to apply the plate fit to all the points, checking for (and
- propagating) bad values in the process. */
- for ( point = 0; point < npoint; point++ ) {
- if( *xx != AST__BAD && *yy != AST__BAD ){
-
-/* If the pixel position is transformed succesfully, convert the returned
- RA/DEC from degrees to radians. Otherwise, store bad values. NB,
- platepos returns zero for success. */
- if( !platepos( *xx, *yy, (struct WorldCoor *) map->wcs,
- aa, bb ) ){
- (*aa) *= AST__DD2R;
- (*bb) *= AST__DD2R;
-
- } else {
- *aa = AST__BAD;
- *bb = AST__BAD;
- }
-
- } else {
- *aa = AST__BAD;
- *bb = AST__BAD;
- }
-
-/* Move on to the next point. */
- xx++;
- yy++;
- aa++;
- bb++;
- }
-
-/* Now deal with inverse transformations in the same way. */
- } else {
- aa = ptr_in[ 0 ];
- bb = ptr_in[ 1 ];
- xx = ptr_out[ 0 ];
- yy = ptr_out[ 1 ];
-
- for ( point = 0; point < npoint; point++ ) {
- if( *aa != AST__BAD && *bb != AST__BAD ){
-
- if( platepix( AST__DR2D*(*aa), AST__DR2D*(*bb),
- (struct WorldCoor *) map->wcs, xx, yy ) ){
- *xx = AST__BAD;
- *yy = AST__BAD;
- }
-
- } else {
- *xx = AST__BAD;
- *yy = AST__BAD;
- }
-
- xx++;
- yy++;
- aa++;
- bb++;
- }
- }
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for DssMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for DssMap objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-
-/* Local Variables: */
- AstDssMap *in; /* Pointer to input DssMap */
- AstDssMap *out; /* Pointer to output DssMap */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output DssMaps. */
- in = (AstDssMap *) objin;
- out = (AstDssMap *) objout;
-
-/* Store a copy of the input SAOIMAGE WorldCoor structure in the output. */
- out->wcs = astStore( NULL, in->wcs, sizeof( struct WorldCoor ) );
-
- return;
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for DssMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for DssMap objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstDssMap *this; /* Pointer to DssMap */
-
-/* Obtain a pointer to the DssMap structure. */
- this = (AstDssMap *) obj;
-
-/* Free the SAOIMAGE WorldCoor structure. */
- this->wcs = astFree( this->wcs );
-
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for DssMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the DssMap class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the DssMap whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
- AstDssMap *this; /* Pointer to the DssMap structure */
- struct WorldCoor *wcs; /* Pointer to SAOimage wcs structure */
- char name_buff[ 11 ]; /* Buffer for keyword string */
- int i; /* Coefficient index */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the DssMap structure. */
- this = (AstDssMap *) this_object;
-
-/* Get a pointer to the WorldCoor structure holding the description of the
- DssMap. */
- wcs = (struct WorldCoor *) ( this->wcs );
-
-/* Write out values representing the contents of the WorldCoor structure.
- Only the components which are required to re-create the DssMap are
- written out. */
- astWriteDouble( channel, "PltRA", 1, 1, wcs->plate_ra, "Plate centre RA (radians)" );
- astWriteDouble( channel, "PltDec", 1, 1, wcs->plate_dec, "Plate centre Dec (radians)" );
- astWriteDouble( channel, "PltScl", 1, 1, wcs->plate_scale, "Plate scale (arcsec/mm)" );
- astWriteDouble( channel, "CNPix1", 1, 1, wcs->x_pixel_offset, "X Pixel offset (pixels)" );
- astWriteDouble( channel, "CNPix2", 1, 1, wcs->y_pixel_offset, "Y Pixel offset (pixels)" );
- astWriteDouble( channel, "XPixSz", 1, 1, wcs->x_pixel_size, "X Pixel size (microns)" );
- astWriteDouble( channel, "YPixSz", 1, 1, wcs->y_pixel_size, "Y Pixel size (microns)" );
-
- for( i = 0; i < 6; i++ ) {
- sprintf( name_buff, "PPO%d", i + 1 );
- astWriteDouble( channel, name_buff, 1, 1, wcs->ppo_coeff[i],
- "Orientation coefficients" );
- }
-
- for( i = 0; i < 19; i++ ) {
- sprintf( name_buff, "AMDX%d", i + 1 );
- astWriteDouble( channel, name_buff, 1, 1, wcs->amd_x_coeff[i],
- "Plate solution X coefficients" );
- }
-
- for( i = 0; i < 19; i++ ) {
- sprintf( name_buff, "AMDY%d", i + 1 );
- astWriteDouble( channel, name_buff, 1, 1, wcs->amd_y_coeff[i],
- "Plate solution Y coefficients" );
- }
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsADssMap and astCheckDssMap functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(DssMap,Mapping)
-astMAKE_CHECK(DssMap)
-
-AstDssMap *astDssMap_( void *fits_void, const char *options, int *status, ...) {
-/*
-*+
-* Name:
-* astDssMap
-
-* Purpose:
-* Create a DssMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "dssmap.h"
-* AstDssMap *astDssMap( AstFitsChan *fits, const char *options, int *status, ... )
-
-* Class Membership:
-* DssMap constructor.
-
-* Description:
-* This function creates a new DssMap and optionally initialises its
-* attributes.
-*
-* A DssMap is a Mapping which uses a Digitised Sky Survey plate fit to
-* transform a set of points from pixel coordinates to equatorial
-* coordinates (i.e. Right Ascension and Declination).
-
-* Parameters:
-* fits
-* A pointer to a FitsChan holding a set of FITS header cards
-* describing the plate fit to be used. The FitsChan may contain
-* other header cards which will be ignored, and it is unchanged on
-* exit. The required information is copied from the FitsChan, and
-* so the supplied FitsChan may subsequently be changed or deleted
-* without changing the DssMap.
-* options
-* Pointer to a null-terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new DssMap. The syntax used is identical to
-* that for the astSet function and may include "printf" format
-* specifiers identified by "%" symbols in the normal way.
-* status
-* Pointer to the inherited status variable.
-* ...
-* If the "options" string contains "%" format specifiers, then
-* an optional list of additional arguments may follow it in
-* order to supply values to be substituted for these
-* specifiers. The rules for supplying these are identical to
-* those for the astSet function (and for the C "printf"
-* function).
-
-* Returned Value:
-* astDssMap()
-* A pointer to the new DssMap.
-
-* Attributes:
-* The DssMap class has no additional attributes over and above those
-* common to all Mappings.
-
-* Notes:
-* - The supplied FitsChan must contain values for the following FITS
-* keywords: CNPIX1, CNPIX2, PPO3, PPO6, XPIXELSZ, YPIXELSZ, PLTRAH,
-* PLTRAM, PLTRAS, PLTDECD, PLTDECM, PLTDECS, PLTDECSN, PLTSCALE,
-* AMDX1, AMDX2, ..., AMDX13, AMDY1, AMDY2, ..., AMDY13.
-* - A null Object pointer (AST__NULL) will be returned if this
-* function is invoked with the AST error status set, or if it
-* should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFitsChan *fits; /* Pointer to supplied FitsChan */
- AstDssMap *new; /* Pointer to new DssMap */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- new = NULL;
- if ( !astOK ) return new;
-
-/* Obtain and validate a pointer to the FitsChan structure provided. */
- fits = astCheckFitsChan( fits_void );
- if ( astOK ) {
-
-/* Initialise the DssMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitDssMap( NULL, sizeof( AstDssMap ), !class_init, &class_vtab,
- "DssMap", fits );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new DssMap's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return a pointer to the new DssMap. */
- return new;
-}
-
-AstDssMap *astInitDssMap_( void *mem, size_t size, int init,
- AstDssMapVtab *vtab, const char *name,
- AstFitsChan *fits, int *status ) {
-/*
-*+
-* Name:
-* astInitDssMap
-
-* Purpose:
-* Initialise a DssMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "dssmap.h"
-* AstDssMap *astInitDssMap( void *mem, size_t size, int init,
-* AstDssMapVtab *vtab, const char *name,
-* AstFitsChan *fits )
-
-* Class Membership:
-* DssMap initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new DssMap object. It allocates memory (if necessary) to accommodate
-* the DssMap plus any additional data associated with the derived class.
-* It then initialises a DssMap structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a DssMap at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the DssMap is to be initialised.
-* This must be of sufficient size to accommodate the DssMap data
-* (sizeof(DssMap)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the DssMap (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the DssMap
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the DssMap's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new DssMap.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-* fits
-* Pointer to a FitsChan containing the DSS FITS Header.
-
-* Returned Value:
-* A pointer to the new DssMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstDssMap *new; /* Pointer to new DssMap */
- struct WorldCoor *wcs; /* Pointer to SAOIMAGE wcs structure */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitDssMapVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Create a structure holding the information required by the SAOIMAGE
- "platepos" function. The required values are extracted from the
- supplied FitsChan. An error is reported and NULL returned if any required
- keywords are missing or unusable. */
- if ( ( wcs = BuildWcs( fits, "astInitDssMap", name, status ) ) ) {
-
-/* Initialise a 2-D Mapping structure (the parent class) as the first component
- within the DssMap structure, allocating memory if necessary. Specify that
- the Mapping should be defined in both the forward and inverse directions. */
- new = (AstDssMap *) astInitMapping( mem, size, 0,
- (AstMappingVtab *) vtab, name,
- 2, 2, 1, 1 );
-
- if ( astOK ) {
-
-/* Initialise the DssMap data. */
-/* --------------------------- */
-/* Store a copy of the SAOIMAGE wcs structure. */
- new->wcs = astStore( NULL, (void *) wcs, sizeof( struct WorldCoor ) );
-
-/* If an error occurred, clean up by deleting the new DssMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Free the SAOIMAGE wcs structure. */
- wcs = (struct WorldCoor *) astFree( (void *) wcs );
-
- }
-
-/* Return a pointer to the new DssMap. */
- return new;
-}
-
-AstDssMap *astLoadDssMap_( void *mem, size_t size,
- AstDssMapVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadDssMap
-
-* Purpose:
-* Load a DssMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "dssmap.h"
-* AstDssMap *astLoadDssMap( void *mem, size_t size,
-* AstDssMapVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* DssMap loader.
-
-* Description:
-* This function is provided to load a new DssMap using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* DssMap structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a DssMap at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the DssMap is to be
-* loaded. This must be of sufficient size to accommodate the
-* DssMap data (sizeof(DssMap)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the DssMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the DssMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstDssMap) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new DssMap. If this is NULL, a pointer
-* to the (static) virtual function table for the DssMap class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "DssMap" is used instead.
-
-* Returned Value:
-* A pointer to the new DssMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstDssMap *new; /* Pointer to the new DssMap */
- char name_buff[ 11 ]; /* Buffer for item name */
- int i; /* Coefficient index */
- struct WorldCoor *wcs; /* Pointer to Wcs information */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this DssMap. In this case the
- DssMap belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstDssMap );
- vtab = &class_vtab;
- name = "DssMap";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitDssMapVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built DssMap. */
- new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "DssMap" );
-
-/* Allocate memory to hold the WorldCoor structure which holds the wcs
- information in a form usable by the SAOimage projection functions. */
- new->wcs = astMalloc( sizeof(struct WorldCoor) );
- if( astOK ) {
-
-/* Get a pointer to the WorldCoor structure holding the description of the
- DssMap. */
- wcs = (struct WorldCoor *) ( new->wcs );
-
-/* Read the values representing the contents of the WorldCoor structure.
- Only the components which are required to re-create the DssMap are
- read. */
- wcs->plate_ra = astReadDouble( channel, "pltra", AST__BAD );
- if( wcs->plate_ra == AST__BAD && astOK ){
- astError( AST__RDERR, "astRead(DssMap): 'PltRA' object (Plate "
- "centre RA) missing from input." , status);
- }
-
- wcs->plate_dec = astReadDouble( channel, "pltdec", AST__BAD );
- if( wcs->plate_dec == AST__BAD && astOK ){
- astError( AST__RDERR, "astRead(DssMap): 'PltDec' object (Plate "
- "centre Dec) missing from input." , status);
- }
-
- wcs->plate_scale = astReadDouble( channel, "pltscl", AST__BAD );
- if( wcs->plate_scale == AST__BAD && astOK ){
- astError( AST__RDERR, "astRead(DssMap): 'PltScl' object (Plate "
- "scale) missing from input." , status);
- }
-
- wcs->x_pixel_offset = astReadDouble( channel, "cnpix1", AST__BAD );
- if( wcs->x_pixel_offset == AST__BAD && astOK ){
- astError( AST__RDERR, "astRead(DssMap): 'CNPix1' object (X pixel "
- "offset) missing from input." , status);
- }
-
- wcs->y_pixel_offset = astReadDouble( channel, "cnpix2", AST__BAD );
- if( wcs->y_pixel_offset == AST__BAD && astOK ){
- astError( AST__RDERR, "astRead(DssMap): 'CNPix2' object (Y pixel "
- "offset) missing from input." , status);
- }
-
- wcs->x_pixel_size = astReadDouble( channel, "xpixsz", AST__BAD );
- if( wcs->x_pixel_size == AST__BAD && astOK ){
- astError( AST__RDERR, "astRead(DssMap): 'XPixSz' object (X pixel "
- "size) missing from input." , status);
- }
-
- wcs->y_pixel_size = astReadDouble( channel, "ypixsz", AST__BAD );
- if( wcs->y_pixel_size == AST__BAD && astOK ){
- astError( AST__RDERR, "astRead(DssMap): 'YPixSz' object (Y pixel "
- "size) missing from input." , status);
- }
-
- for( i = 0; i < 6 && astOK; i++ ) {
- sprintf( name_buff, "ppo%d", i + 1 );
- wcs->ppo_coeff[i] = astReadDouble( channel, name_buff, AST__BAD );
- if( wcs->ppo_coeff[i] == AST__BAD ){
- if( i == 2 || i == 5 ) {
- if( astOK ) astError( AST__RDERR, "astRead(DssMap): 'PPO%d' "
- "object (orientation coefficient %d) "
- "missing from input.", status, i + 1, i + 1 );
- } else {
- wcs->ppo_coeff[i] = 0.0;
- }
- }
- }
-
- for( i = 0; i < 19 && astOK; i++ ) {
- sprintf( name_buff, "amdx%d", i + 1 );
- wcs->amd_x_coeff[i] = astReadDouble( channel, name_buff, AST__BAD );
- if( wcs->amd_x_coeff[i] == AST__BAD ){
- if( i < 13 ){
- if( astOK ) astError( AST__RDERR, "astRead(DssMap): 'AMDX%d' "
- "object (plate solution X coefficient "
- "%d) missing from input.", status, i + 1, i + 1 );
- } else {
- wcs->amd_x_coeff[i] = 0.0;
- }
- }
- }
-
- for( i = 0; i < 19 && astOK; i++ ) {
- sprintf( name_buff, "amdy%d", i + 1 );
- wcs->amd_y_coeff[i] = astReadDouble( channel, name_buff, AST__BAD );
- if( wcs->amd_y_coeff[i] == AST__BAD ){
- if( i < 13 ){
- if( astOK ) astError( AST__RDERR, "astRead(DssMap): 'AMDY%d' "
- "object (plate solution Y coefficient "
- "%d) missing from input.", status, i + 1, i + 1 );
- } else {
- wcs->amd_y_coeff[i] = 0.0;
- }
- }
- }
- }
-
-/* If an error occurred, clean up by deleting the new DssMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new DssMap pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-AstFitsChan *astDssFits_( AstDssMap *this, int *status ){
- if( !astOK ) return NULL;
- return (**astMEMBER(this,DssMap,DssFits))( this, status );
-}
-
-/* The code which follows in this file is covered by the following
- statement of terms and conditions, which differ from the terms and
- conditions which apply above.
-
-***************************************************************************
-*
-* Copyright: 1988 Smithsonian Astrophysical Observatory
-* You may do anything you like with these files except remove
-* this copyright. The Smithsonian Astrophysical Observatory
-* makes no representations about the suitability of this
-* software for any purpose. It is provided "as is" without
-* express or implied warranty.
-*
-*****************************************************************************
-*/
-
-/* >>>>>>>>>>>>>>>>>>>>>> platepos.c <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */
-
-/* File saoimage/wcslib/platepos.c
- * February 25, 1996
- * By Doug Mink, Harvard-Smithsonian Center for Astrophysics
-
- * Module: platepos.c (Plate solution WCS conversion
- * Purpose: Compute WCS from Digital Sky Survey plate fit
- * Subroutine: platepos() converts from pixel location to RA,Dec
- * Subroutine: platepix() converts from RA,Dec to pixel location
-
- These functions are based on the astrmcal.c portion of GETIMAGE by
- J. Doggett and the documentation distributed with the Digital Sky Survey.
-
- >>>>>>> STARLINK VERSION <<<<<<<<
-
-*/
-
-/* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-
- Changed by R.F. Warren-Smith (Starlink) to make the function static. */
-
-static int
-platepos (xpix, ypix, wcs, xpos, ypos)
-
-/* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> */
-
-/* Routine to determine accurate position for pixel coordinates */
-/* returns 0 if successful otherwise 1 = angle too large for projection; */
-/* based on amdpos() from getimage */
-
-/* Input: */
-double xpix; /* x pixel number (RA or long without rotation) */
-double ypix; /* y pixel number (dec or lat without rotation) */
-struct WorldCoor *wcs; /* WCS parameter structure */
-
-/* Output: */
-double *xpos; /* Right ascension or longitude in degrees */
-double *ypos; /* Declination or latitude in degrees */
-
-{
- double x, y, xmm, ymm, xmm2, ymm2, xmm3, ymm3, x2y2;
- double xi, xir, eta, etar, raoff, ra, dec;
- double cond2r = 1.745329252e-2;
- double cons2r = 206264.8062470964;
- double twopi = 6.28318530717959;
- double ctan, ccos;
-
-/* Ignore magnitude and color terms
- double mag = 0.0;
- double color = 0.0; */
-
-/* Convert from image pixels to plate pixels */
- x = xpix + wcs->x_pixel_offset - 1.0 + 0.5;
- y = ypix + wcs->y_pixel_offset - 1.0 + 0.5;
-
-/* Convert from pixels to millimeters */
- xmm = (wcs->ppo_coeff[2] - x * wcs->x_pixel_size) / 1000.0;
- ymm = (y * wcs->y_pixel_size - wcs->ppo_coeff[5]) / 1000.0;
- xmm2 = xmm * xmm;
- ymm2 = ymm * ymm;
- xmm3 = xmm * xmm2;
- ymm3 = ymm * ymm2;
- x2y2 = xmm2 + ymm2;
-
-/* Compute coordinates from x,y and plate model */
-
- xi = wcs->amd_x_coeff[ 0]*xmm + wcs->amd_x_coeff[ 1]*ymm +
- wcs->amd_x_coeff[ 2] + wcs->amd_x_coeff[ 3]*xmm2 +
- wcs->amd_x_coeff[ 4]*xmm*ymm + wcs->amd_x_coeff[ 5]*ymm2 +
- wcs->amd_x_coeff[ 6]*(x2y2) + wcs->amd_x_coeff[ 7]*xmm3 +
- wcs->amd_x_coeff[ 8]*xmm2*ymm + wcs->amd_x_coeff[ 9]*xmm*ymm2 +
- wcs->amd_x_coeff[10]*ymm3 + wcs->amd_x_coeff[11]*xmm*(x2y2) +
- wcs->amd_x_coeff[12]*xmm*x2y2*x2y2;
-
-/* Ignore magnitude and color terms
- + wcs->amd_x_coeff[13]*mag + wcs->amd_x_coeff[14]*mag*mag +
- wcs->amd_x_coeff[15]*mag*mag*mag + wcs->amd_x_coeff[16]*mag*xmm +
- wcs->amd_x_coeff[17]*mag*x2y2 + wcs->amd_x_coeff[18]*mag*xmm*x2y2 +
- wcs->amd_x_coeff[19]*color; */
-
- eta = wcs->amd_y_coeff[ 0]*ymm + wcs->amd_y_coeff[ 1]*xmm +
- wcs->amd_y_coeff[ 2] + wcs->amd_y_coeff[ 3]*ymm2 +
- wcs->amd_y_coeff[ 4]*xmm*ymm + wcs->amd_y_coeff[ 5]*xmm2 +
- wcs->amd_y_coeff[ 6]*(x2y2) + wcs->amd_y_coeff[ 7]*ymm3 +
- wcs->amd_y_coeff[ 8]*ymm2*xmm + wcs->amd_y_coeff[ 9]*ymm*xmm2 +
- wcs->amd_y_coeff[10]*xmm3 + wcs->amd_y_coeff[11]*ymm*(x2y2) +
- wcs->amd_y_coeff[12]*ymm*x2y2*x2y2;
-
-/* Ignore magnitude and color terms
- + wcs->amd_y_coeff[13]*mag + wcs->amd_y_coeff[14]*mag*mag +
- wcs->amd_y_coeff[15]*mag*mag*mag + wcs->amd_y_coeff[16]*mag*ymm +
- wcs->amd_y_coeff[17]*mag*x2y2) + wcs->amd_y_coeff[18]*mag*ymm*x2y2 +
- wcs->amd_y_coeff[19]*color; */
-
-/* Convert to radians */
-
- xir = xi / cons2r;
- etar = eta / cons2r;
-
-/* Convert to RA and Dec */
-
- ctan = tan (wcs->plate_dec);
- ccos = cos (wcs->plate_dec);
- raoff = atan2 (xir / ccos, 1.0 - etar * ctan);
- ra = raoff + wcs->plate_ra;
- if (ra < 0.0) ra = ra + twopi;
- *xpos = ra / cond2r;
-
- dec = atan (cos (raoff) / ((1.0 - (etar * ctan)) / (etar + ctan)));
- *ypos = dec / cond2r;
- return 0;
-}
-
-
-/* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-
- Changed by R.F. Warren-Smith (Starlink) to make the function static. */
-
-static int
-platepix (xpos, ypos, wcs, xpix, ypix)
-
-/* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> */
-
-/* Routine to determine pixel coordinates for sky position */
-/* returns 0 if successful otherwise 1 = angle too large for projection; */
-/* based on amdinv() from getimage */
-
-/* Input: */
-double xpos; /* Right ascension or longitude in degrees */
-double ypos; /* Declination or latitude in degrees */
-struct WorldCoor *wcs; /* WCS parameter structure */
-
-/* Output: */
-double *xpix; /* x pixel number (RA or long without rotation) */
-double *ypix; /* y pixel number (dec or lat without rotation) */
-
-{
- double div,xi,eta,x,y,xy,x2,y2,x2y,y2x,x3,y3,x4,y4,x2y2,cjunk,dx,dy;
- double sypos,cypos,syplate,cyplate,sxdiff,cxdiff;
- double f,fx,fy,g,gx,gy, xmm, ymm;
- double conr2s = 206264.8062470964;
- double tolerance = 0.0000005;
- int max_iterations = 50;
- int i;
- double xr, yr; /* position in radians */
- double cond2r = 1.745329252e-2;
-
-/* Convert RA and Dec in radians to standard coordinates on a plate */
- xr = xpos * cond2r;
- yr = ypos * cond2r;
- sypos = sin (yr);
- cypos = cos (yr);
- syplate = sin (wcs->plate_dec);
- cyplate = cos (wcs->plate_dec);
- sxdiff = sin (xr - wcs->plate_ra);
- cxdiff = cos (xr - wcs->plate_ra);
- div = (sypos * syplate) + (cypos * cyplate * cxdiff);
- xi = cypos * sxdiff * conr2s / div;
- eta = ((sypos * cyplate) - (cypos * syplate * cxdiff)) * conr2s / div;
-
-/* Set initial value for x,y */
- xmm = xi / wcs->plate_scale;
- ymm = eta / wcs->plate_scale;
-
-/* Iterate by Newton's method */
- for (i = 0; i < max_iterations; i++) {
-
- /* X plate model */
- xy = xmm * ymm;
- x2 = xmm * xmm;
- y2 = ymm * ymm;
- x2y = x2 * ymm;
- y2x = y2 * xmm;
- x2y2 = x2 + y2;
- cjunk = x2y2 * x2y2;
- x3 = x2 * xmm;
- y3 = y2 * ymm;
- x4 = x2 * x2;
- y4 = y2 * y2;
- f = wcs->amd_x_coeff[0]*xmm + wcs->amd_x_coeff[1]*ymm +
- wcs->amd_x_coeff[2] + wcs->amd_x_coeff[3]*x2 +
- wcs->amd_x_coeff[4]*xy + wcs->amd_x_coeff[5]*y2 +
- wcs->amd_x_coeff[6]*x2y2 + wcs->amd_x_coeff[7]*x3 +
- wcs->amd_x_coeff[8]*x2y + wcs->amd_x_coeff[9]*y2x +
- wcs->amd_x_coeff[10]*y3 + wcs->amd_x_coeff[11]*xmm*x2y2 +
- wcs->amd_x_coeff[12]*xmm*cjunk;
- /* magnitude and color terms ignored
- + wcs->amd_x_coeff[13]*mag +
- wcs->amd_x_coeff[14]*mag*mag + wcs->amd_x_coeff[15]*mag*mag*mag +
- wcs->amd_x_coeff[16]*mag*xmm + wcs->amd_x_coeff[17]*mag*(x2+y2) +
- wcs->amd_x_coeff[18]*mag*xmm*(x2+y2) + wcs->amd_x_coeff[19]*color;
- */
-
- /* Derivative of X model wrt x */
- fx = wcs->amd_x_coeff[0] + wcs->amd_x_coeff[3]*2.0*xmm +
- wcs->amd_x_coeff[4]*ymm + wcs->amd_x_coeff[6]*2.0*xmm +
- wcs->amd_x_coeff[7]*3.0*x2 + wcs->amd_x_coeff[8]*2.0*xy +
- wcs->amd_x_coeff[9]*y2 + wcs->amd_x_coeff[11]*(3.0*x2+y2) +
- wcs->amd_x_coeff[12]*(5.0*x4 +6.0*x2*y2+y4);
- /* magnitude and color terms ignored
- wcs->amd_x_coeff[16]*mag + wcs->amd_x_coeff[17]*mag*2.0*xmm +
- wcs->amd_x_coeff[18]*mag*(3.0*x2+y2);
- */
-
- /* Derivative of X model wrt y */
- fy = wcs->amd_x_coeff[1] + wcs->amd_x_coeff[4]*xmm +
- wcs->amd_x_coeff[5]*2.0*ymm + wcs->amd_x_coeff[6]*2.0*ymm +
- wcs->amd_x_coeff[8]*x2 + wcs->amd_x_coeff[9]*2.0*xy +
- wcs->amd_x_coeff[10]*3.0*y2 + wcs->amd_x_coeff[11]*2.0*xy +
- wcs->amd_x_coeff[12]*4.0*xy*x2y2;
- /* magnitude and color terms ignored
- wcs->amd_x_coeff[17]*mag*2.0*ymm +
- wcs->amd_x_coeff[18]*mag*2.0*xy;
- */
-
- /* Y plate model */
- g = wcs->amd_y_coeff[0]*ymm + wcs->amd_y_coeff[1]*xmm +
- wcs->amd_y_coeff[2] + wcs->amd_y_coeff[3]*y2 +
- wcs->amd_y_coeff[4]*xy + wcs->amd_y_coeff[5]*x2 +
- wcs->amd_y_coeff[6]*x2y2 + wcs->amd_y_coeff[7]*y3 +
- wcs->amd_y_coeff[8]*y2x + wcs->amd_y_coeff[9]*x2y +
- wcs->amd_y_coeff[10]*x3 + wcs->amd_y_coeff[11]*ymm*x2y2 +
- wcs->amd_y_coeff[12]*ymm*cjunk;
- /* magnitude and color terms ignored
- wcs->amd_y_coeff[13]*mag + wcs->amd_y_coeff[14]*mag*mag +
- wcs->amd_y_coeff[15]*mag*mag*mag + wcs->amd_y_coeff[16]*mag*ymm +
- wcs->amd_y_coeff[17]*mag*x2y2 +
- wcs->amd_y_coeff[18]*mag*ymm*x2y2 + wcs->amd_y_coeff[19]*color;
- */
-
- /* Derivative of Y model wrt x */
- gx = wcs->amd_y_coeff[1] + wcs->amd_y_coeff[4]*ymm +
- wcs->amd_y_coeff[5]*2.0*xmm + wcs->amd_y_coeff[6]*2.0*xmm +
- wcs->amd_y_coeff[8]*y2 + wcs->amd_y_coeff[9]*2.0*xy +
- wcs->amd_y_coeff[10]*3.0*x2 + wcs->amd_y_coeff[11]*2.0*xy +
- wcs->amd_y_coeff[12]*4.0*xy*x2y2;
- /* magnitude and color terms ignored
- wcs->amd_y_coeff[17]*mag*2.0*xmm +
- wcs->amd_y_coeff[18]*mag*ymm*2.0*xmm;
- */
-
- /* Derivative of Y model wrt y */
- gy = wcs->amd_y_coeff[0] + wcs->amd_y_coeff[3]*2.0*ymm +
- wcs->amd_y_coeff[4]*xmm + wcs->amd_y_coeff[6]*2.0*ymm +
- wcs->amd_y_coeff[7]*3.0*y2 + wcs->amd_y_coeff[8]*2.0*xy +
- wcs->amd_y_coeff[9]*x2 + wcs->amd_y_coeff[11]*(x2+3.0*y2) +
- wcs->amd_y_coeff[12]*(5.0*y4 + 6.0*x2*y2 + x4);
- /* magnitude and color terms ignored
- wcs->amd_y_coeff[16]*mag + wcs->amd_y_coeff[17]*mag*2.0*ymm +
- wcs->amd_y_coeff[18]*mag*(x2+3.0*y2);
- */
-
- f = f - xi;
- g = g - eta;
- dx = ((-f * gy) + (g * fy)) / ((fx * gy) - (fy * gx));
- dy = ((-g * fx) + (f * gx)) / ((fx * gy) - (fy * gx));
- xmm = xmm + dx;
- ymm = ymm + dy;
- if ((fabs(dx) < tolerance) && (fabs(dy) < tolerance)) break;
- }
-
-/* Convert mm from plate center to plate pixels */
- x = (wcs->ppo_coeff[2] - xmm*1000.0) / wcs->x_pixel_size;
- y = (wcs->ppo_coeff[5] + ymm*1000.0) / wcs->y_pixel_size;
-
-/* Convert from plate pixels to image pixels */
- *xpix = x - wcs->x_pixel_offset + 1.0 - 0.5;
- *ypix = y - wcs->y_pixel_offset + 1.0 - 0.5;
-
-/* If position is off of the image, return offscale code */
-
-/* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-
- Commented out by D.Berry (Starlink) in order to remove dependancy
- on NAXIS1/NAXIS2 keywords >>>>>>>>
-
- if (*xpix < 0.5 || *xpix > wcs->nxpix+0.5)
- return -1;
- if (*ypix < 0.5 || *ypix > wcs->nypix+0.5)
- return -1;
-
->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> */
-
- return 0;
-}
-/* Mar 6 1995 Original version of this code
- May 4 1995 Fix eta cross terms which were all in y
- Jun 21 1995 Add inverse routine
- Oct 17 1995 Fix inverse routine (degrees -> radians)
- Nov 7 1995 Add half pixel to image coordinates to get astrometric
- plate coordinates
- Feb 26 1996 Fix plate to image pixel conversion error
- Feb 18 1997 Modified by D.S. Berry (Starlink) to avoid use of the image
- dimensions stored in wcs->nxpix and wcs->nypix.
- Sep 5 1997 Modified by R.F. Warren-Smith (Starlink) to make the
- platepos and platepix functions static.
- */
-
-
-
-
diff --git a/ast-5.3-1/dssmap.h b/ast-5.3-1/dssmap.h
deleted file mode 100644
index 858238e..0000000
--- a/ast-5.3-1/dssmap.h
+++ /dev/null
@@ -1,401 +0,0 @@
-#if !defined( DSSMAP_INCLUDED ) /* Include this file only once */
-#define DSSMAP_INCLUDED
-/*
-*+
-* Name:
-* dssmap.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the DssMap class.
-
-* Invocation:
-* #include "dssmap.h"
-
-* Description:
-* This include file defines the interface to the DssMap class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The DssMap class implements Mappings which use a Digitised Sky
-* Survey plate fit to transform between pixel coordinates and
-* Equatorial coordinates.
-
-* Inheritance:
-* The DssMap class inherits from the Mapping class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* None.
-
-* Methods Over-Ridden:
-* Public:
-* None.
-*
-* Protected:
-* astTransform
-* Apply a DssMap to transform a set of points.
-
-* New Methods Defined:
-* Public:
-* astDssFits
-* Create a FitsChan holding a FITS description of the DSS plate fit.
-*
-* Protected:
-* None.
-
-* Other Class Functions:
-* Public:
-* astIsADssMap
-* Test class membership.
-* astDssMap
-* Create a DssMap.
-*
-* Protected:
-* astCheckDssMap
-* Validate class membership.
-* astInitDssMap
-* Initialise a DssMap.
-* astInitDssMapVtab
-* Initialise the virtual function table for the DssMap class.
-* astLoadDssMap
-* Load a DssMap.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstDssMap
-* DssMap object type.
-*
-* Protected:
-* AstDssMapVtab
-* DssMap virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-* (except for code supplied by Doug Mink, as noted in this file)
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-
-* History:
-* 18-FEB-1997 (DSB):
-* Original version.
-* 30-JUN-1997 (DSB):
-* All public functions made protected.
-* 4-NOV-1997 (DSB):
-* Removed copy of supplied FitsChan from DssMap structure.
-* 8-JAN-2003 (DSB):
-* Added protected astInitDssMapVtab method.
-* 21-OCT-2004 (DSB):
-* Removed wcstools prototypes which clash with the MS Windows
-* runtime library.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#if defined(astCLASS) /* Protected */
-
-/* The code within this #if...#endif block is covered by the following
- statement of terms and conditions, which differ from the terms and
- conditions which apply elsewhere in this file.
-
-***************************************************************************
-*
-* Copyright: 1988 Smithsonian Astrophysical Observatory
-* You may do anything you like with these files except remove
-* this copyright. The Smithsonian Astrophysical Observatory
-* makes no representations about the suitability of this
-* software for any purpose. It is provided "as is" without
-* express or implied warranty.
-*
-*****************************************************************************
-*/
-
-/* >>>>>>>>>>>>>>>>>> SAOimage wcs.h header file <<<<<<<<<<<<<<<<<< */
-
-/* libwcs/wcs.h
- November 1, 1996
- By Doug Mink, Harvard-Smithsonian Center for Astrophysics */
-
-struct WorldCoor {
- double xref; /* x reference coordinate value (deg) */
- double yref; /* y reference coordinate value (deg) */
- double xrefpix; /* x reference pixel */
- double yrefpix; /* y reference pixel */
- double xinc; /* x coordinate increment (deg) */
- double yinc; /* y coordinate increment (deg) */
- double rot; /* rotation (deg) (from N through E) */
- double crot,srot; /* Cosine and sine of rotation angle */
- double cd11,cd12,cd21,cd22;
- /* rotation matrix */
- double dc11,dc12,dc21,dc22;
- /* inverse rotation matrix */
- double equinox; /* Equinox of coordinates default to 1950.0 */
- double epoch; /* Epoch of coordinates default to equinox */
- double nxpix; /* Number of pixels in X-dimension of image */
- double nypix; /* Number of pixels in Y-dimension of image */
- double plate_ra; /* Right ascension of plate center */
- double plate_dec; /* Declination of plate center */
- double plate_scale; /* Plate scale in arcsec/mm */
- double x_pixel_offset; /* X pixel offset of image lower right */
- double y_pixel_offset; /* Y pixel offset of image lower right */
- double x_pixel_size; /* X pixel_size */
- double y_pixel_size; /* Y pixel_size */
- double ppo_coeff[6];
- double amd_x_coeff[20]; /* X coefficients for plate model */
- double amd_y_coeff[20]; /* Y coefficients for plate model */
- double xpix; /* x (RA) coordinate (pixels) */
- double ypix; /* y (dec) coordinate (pixels) */
- double xpos; /* x (RA) coordinate (deg) */
- double ypos; /* y (dec) coordinate (deg) */
- int pcode; /* projection code (1-8) */
- int changesys; /* 1 for FK4->FK5, 2 for FK5->FK4 */
- /* 3 for FK4->galactic, 4 for FK5->galactic */
- int printsys; /* 1 to print coordinate system, else 0 */
- int ndec; /* Number of decimal places in PIX2WCST */
- int degout; /* 1 to always print degrees in PIX2WCST */
- int tabsys; /* 1 to put tab between RA & Dec, else 0 */
- int rotmat; /* 0 if CDELT, CROTA; 1 if CD */
- int coorflip; /* 0 if x=RA, y=Dec; 1 if x=Dec, y=RA */
- int offscl; /* 0 if OK, 1 if offscale */
- int plate_fit; /* 1 if plate fit, else 0 */
- int wcson; /* 1 if WCS is set, else 0 */
- char c1type[8]; /* 1st coordinate type code:
- RA--, GLON, ELON */
- char c2type[8]; /* 2nd coordinate type code:
- DEC-, GLAT, ELAT */
- char ptype[8]; /* projection type code:
- -SIN, -TAN, -ARC, -NCP, -GLS, -MER, -AIT */
- char radecsys[16]; /* Reference frame: FK4, FK4-NO-E, FK5, GAPPT*/
- char sysout[16]; /* Reference frame for output: FK4, FK5 */
- char center[32]; /* Center coordinates (with frame) */
- char search_format[120]; /* search command format */
- /* where %s is replaced by WCS coordinates */
-};
-
-#ifndef PI
-#define PI 3.141592653589793
-#endif
-
-/* Conversions among hours of RA, degrees and radians. */
-#define degrad(x) ((x)*PI/180.)
-#define raddeg(x) ((x)*180./PI)
-#define hrdeg(x) ((x)*15.)
-#define deghr(x) ((x)/15.)
-#define hrrad(x) degrad(hrdeg(x))
-#define radhr(x) deghr(raddeg(x))
-
-
-/* WCS subroutines in wcs.c */
-
-/* >>>>> DSB: Prototypes for "subroutines in wcs.c" have been removed since
- they clash with prototypes defined by the MS windows runtime library and
- are not needed by AST. */
-
-/* Oct 26 1994 New file
- * Dec 21 1994 Add rotation matrix
- * Dec 22 1994 Add flag for coordinate reversal
-
- * Mar 6 1995 Add parameters for Digital Sky Survey plate fit
- * Jun 8 1995 Add parameters for coordinate system change
- * Jun 21 1995 Add parameter for plate scale
- * Jul 6 1995 Add parameter to note whether WCS is set
- * Aug 8 1995 Add parameter to note whether to print coordinate system
- * Oct 16 1995 Add parameters to save image dimensions and center coordinates
-
- * Feb 15 1996 Add coordinate conversion functions
- * Feb 20 1996 Add flag for tab tables
- * Apr 26 1996 Add epoch of positions (actual date of image)
- * Jul 5 1996 Add subroutine declarations
- * Jul 19 1996 Add WCSFULL declaration
- * Aug 5 1996 Add WCSNINIT to initialize WCS for non-terminated header
- * Oct 31 1996 Add DCnn inverse rotation matrix
- * Nov 1 1996 Add NDEC number of decimal places in output
- */
-/* >>>>>>>>>>>>>>>>>>>> End of SAOimage wcs.h header file <<<<<<<<<<<<<<<< */
-#endif
-
-#include "mapping.h" /* Coordinate mappings (parent class) */
-#include "fitschan.h" /* Storage for FITS header cards */
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* DssMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstDssMap {
-
-/* Attributes inherited from the parent class. */
- AstMapping mapping; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- void *wcs; /* Pointer to structure holding plate fit info */
-
-} AstDssMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstDssMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstMappingVtab mapping_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- AstFitsChan *(* DssFits)( AstDssMap *, int * );
-
-} AstDssMapVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstDssMapGlobals {
- AstDssMapVtab Class_Vtab;
- int Class_Init;
-} AstDssMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitDssMapGlobals_( AstDssMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(DssMap) /* Check class membership */
-astPROTO_ISA(DssMap) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstDssMap *astDssMap_( void *, const char *, int *, ...);
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstDssMap *astInitDssMap_( void *, size_t, int, AstDssMapVtab *,
- const char *, AstFitsChan *, int * );
-
-/* Vtab initialiser. */
-void astInitDssMapVtab_( AstDssMapVtab *, const char *, int * );
-
-/* Loader. */
-AstDssMap *astLoadDssMap_( void *, size_t, AstDssMapVtab *,
- const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS) /* Protected */
-AstFitsChan *astDssFits_( AstDssMap *, int * );
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckDssMap(this) astINVOKE_CHECK(DssMap,this,0)
-#define astVerifyDssMap(this) astINVOKE_CHECK(DssMap,this,1)
-
-/* Test class membership. */
-#define astIsADssMap(this) astINVOKE_ISA(DssMap,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astDssMap astINVOKE(F,astDssMap_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitDssMap(mem,size,init,vtab,name,fits) \
-astINVOKE(O,astInitDssMap_(mem,size,init,vtab,name,astCheckFitsChan(fits),STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitDssMapVtab(vtab,name) astINVOKE(V,astInitDssMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadDssMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadDssMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckDssMap to validate DssMap pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-#define astDssFits(this) astINVOKE(O,astDssFits_(astCheckDssMap(this),STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/ellipse.c b/ast-5.3-1/ellipse.c
deleted file mode 100644
index ae14b31..0000000
--- a/ast-5.3-1/ellipse.c
+++ /dev/null
@@ -1,3045 +0,0 @@
-/*
-*class++
-* Name:
-* Ellipse
-
-* Purpose:
-* An elliptical region within a 2-dimensional Frame.
-
-* Constructor Function:
-c astEllipse
-f AST_ELLIPSE
-
-* Description:
-* The Ellipse class implements a Region which represents a ellipse
-* within a 2-dimensional Frame.
-
-* Inheritance:
-* The Ellipse class inherits from the Region class.
-
-* Attributes:
-* The Ellipse class does not define any new attributes beyond
-* those which are applicable to all Regions.
-
-* Functions:
-c In addition to those functions applicable to all Regions, the
-c following functions may also be applied to all Ellipses:
-f In addition to those routines applicable to all Regions, the
-f following routines may also be applied to all Ellipses:
-*
-c - astEllipsePars: Get the geometric parameters of the Ellipse
-c - AST_ELLIPSEPARS: Get the geometric parameters of the Ellipse
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2009 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 7-SEP-2004 (DSB):
-* Original version.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS Ellipse
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
- compare bad values directory because of the danger of floating point
- exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E9*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "region.h" /* Coordinate regions (parent class) */
-#include "channel.h" /* I/O channels */
-#include "box.h" /* Box Regions */
-#include "wcsmap.h" /* Definitons of AST__DPI etc */
-#include "circle.h" /* Interface definition for circle class */
-#include "ellipse.h" /* Interface definition for this class */
-#include "mapping.h" /* Position mappings */
-#include "unitmap.h" /* Unit Mapping */
-#include "pal.h" /* SLALIB library interface */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstMapping *(* parent_simplify)( AstMapping *, int * );
-static void (* parent_setregfs)( AstRegion *, AstFrame *, int * );
-static void (* parent_resetcache)( AstRegion *, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Ellipse)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Ellipse,Class_Init)
-#define class_vtab astGLOBAL(Ellipse,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstEllipseVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstEllipse *astEllipseId_( void *, int, const double[2], const double[2], const double[2], void *, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMapping *Simplify( AstMapping *, int * );
-static AstPointSet *RegBaseMesh( AstRegion *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static double *RegCentre( AstRegion *this, double *, double **, int, int, int * );
-static int RegPins( AstRegion *, AstPointSet *, AstRegion *, int **, int * );
-static int RegTrace( AstRegion *, int, double *, double **, int * );
-static void Cache( AstEllipse *, int * );
-static void CalcPars( AstFrame *, double[2], double[2], double[2], double *, double *, double *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void EllipsePars( AstEllipse *, double[2], double *, double *, double *, double[2], double[2], int * );
-static void RegBaseBox( AstRegion *this, double *, double *, int * );
-static void ResetCache( AstRegion *this, int * );
-static void SetRegFS( AstRegion *, AstFrame *, int * );
-
-/* Member functions. */
-/* ================= */
-
-AstRegion *astBestEllipse_( AstPointSet *mesh, double *cen, AstRegion *unc, int *status ){
-/*
-*+
-* Name:
-* astBestEllipse
-
-* Purpose:
-* Find the best fitting Ellipse through a given mesh of points.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "ellipse.h"
-* AstRegion *astBestEllipse( AstPointSet *mesh, double *cen, AstRegion *unc )
-
-* Class Membership:
-* Ellipse member function
-
-* Description:
-* This function finds the best fitting Ellipse through a given mesh of
-* points. Ellispes are always 2-dimensional.
-
-* Parameters:
-* mesh
-* Pointer to a PointSet holding the mesh of points. They are
-* assumed to be in the Frame represented by "unc".
-* cen
-* Pointer to an array holding the coordinates of the new Ellipse
-* centre.
-* unc
-* A Region representing the uncertainty associated with each point
-* on the mesh.
-
-* Returned Value:
-* Pointer to the best fitting Ellipse. It will inherit the positional
-* uncertainty and Frame represented by "unc".
-
-* Implementation Deficiencies:
-* - The method used by this function is not very accurate, and assumes
-* that the supplied mesh provides uniform coverage of the entire ellipse.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-
-*-
-*/
-
-/* Local Variables: */
- AstFrame *frm;
- AstPointSet *ps2;
- AstRegion *result;
- double **ptr2;
- double **ptr;
- double *ang;
- double *dist;
- double *px;
- double *py;
- double a0;
- double a;
- double aa[2];
- double at;
- double b;
- double c0;
- double c1;
- double c2;
- double c;
- double d;
- double den;
- double e;
- double f;
- double mn;
- double mx;
- double p[2];
- double pa[2];
- double pb[2];
- double r1;
- double r2;
- double r3;
- double smn;
- double t1;
- double t2;
- double t3;
- int ip;
- int maxat;
- int np;
- double sw;
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get no. of points in the mesh. */
- np = astGetNpoint( mesh );
-
-/* Get pointers to the axis values. */
- ptr = astGetPoints( mesh );
-
-/* Allocate work space */
- dist = astMalloc( sizeof( double )*(size_t) np );
- ang = astMalloc( sizeof( double )*(size_t) np );
-
-/* Get a pointer to the Frame represented by "unc". This is the Frame to
- which the supplied mesh points refer. */
- frm = astGetFrame( unc->frameset, AST__CURRENT );
-
-/* Check pointers can be used safely */
- if( astOK ) {
-
-/* Find the first mesh point which is at a non-zero distance from the
- centre. */
- px = ptr[ 0 ];
- py = ptr[ 1 ];
- for( ip = 0; ip < np; ip++, px++, py++ ) {
- p[ 0 ] = *px;
- p[ 1 ] = *py;
- dist[ ip ] = astDistance( frm, cen, p );
- if( dist[ ip ] != AST__BAD && dist[ ip ] != 0.0 ) {
- break;
- } else {
- ang[ ip ] = AST__BAD;
- dist[ ip ] = AST__BAD;
- }
- }
-
-/* Find a point which is this distance away from the centre along the second
- axis. This point is used to define zero angle when calling astAngle
- below. */
- astOffset2( frm, cen, 0.0, dist[ ip ], aa );
- ang[ ip ] = astAngle( frm, aa, cen, p );
-
-/* Get the distance from the centre to each of the remaining mesh points. Also
- find the orientation of the radial lines through the centre to each mesh
- point. At the same time, find the index of the point with the largest
- radial distance. */
- maxat = ip;
- r2 = dist[ maxat ];
- ip++;
- px++;
- py++;
- for( ; ip < np; ip++, px++, py++ ) {
- p[ 0 ] = *px;
- p[ 1 ] = *py;
- dist[ ip ] = astDistance( frm, cen, p );
- ang[ ip ] = astAngle( frm, aa, cen, p );
- if( dist[ ip ] != AST__BAD && dist[ ip ] > r2 ) {
- r2 = dist[ ip ];
- maxat = ip;
- }
- }
-
-/* Find the higher index neighbouring point, wrapping back to the start
- of the list when the end is reached. Note the radius and position angle
- at this neighbouring point. */
- t2 = 0.0;
- r3 = AST__BAD;
- t3 = AST__BAD;
- a0 = ang[ maxat ];
- for( ip = maxat + 1; ip < np; ip++ ) {
- if( dist[ ip ] != AST__BAD ) {
- r3 = dist[ ip ];
- t3 = palSlaDrange( ang[ ip ] - a0 );
- break;
- }
- }
- if( r3 == AST__BAD ) {
- for( ip = 0; ip < maxat; ip++ ) {
- if( dist[ ip ] != AST__BAD ) {
- r3 = dist[ ip ];
- t3 = palSlaDrange( ang[ ip ] - a0 );
- break;
- }
- }
- }
-
-/* Find the lower index neighbouring point, wrapping back to the end
- of the list when the start is reached. Note the radius and position angle
- at this neighbouring point. */
- r1 = AST__BAD;
- t1 = AST__BAD;
- for( ip = maxat - 1; ip > -1; ip-- ) {
- if( dist[ ip ] != AST__BAD ) {
- r1 = dist[ ip ];
- t1 = palSlaDrange( ang[ ip ] - a0 );
- break;
- }
- }
- if( r1 == AST__BAD ) {
- for( ip = np - 1; ip > maxat; ip-- ) {
- if( dist[ ip ] != AST__BAD ) {
- r1 = dist[ ip ];
- t1 = palSlaDrange( ang[ ip ] - a0 );
- break;
- }
- }
- }
-
-/* Fit a quadratic through the three pairs of (radius,angle) values. The
- centre point (r2,t2) is the point which is furthest from the centre,
- and the other two are the neighbouring points found above. */
- a = r2 - r1;
- b = t2 - t1;
- c = t2*t2 - t1*t1;
- d = r3 - r2;
- e = t3 - t2;
- f = t3*t3 - t2*t2;
-
- den = c*e - b*f;
- if( den != 0.0 ) {
-
-/* The co-efficients of the interpolating polynomial... */
- c1 = ( d*c - a*f )/den;
- c2 = ( a*e - d*b )/den;
- c0 = r1 - c1*t1 - c2*t1*t1;
-
-/* Find the largest radius (the turning point of the quadratic), and the
- angle at which it occurs. */
- if( c2 < 0.0 ) {
- mx = ( 4*c0*c2 - c1*c1 )/( 4*c2 );
- at = a0 - c1/( 2*c2 );
- } else {
- mx = r2;
- at = a0 - t2;
- }
-
-/* This point is the end of the ellipse primary axis. Find its (x,y)
- coords, and store in "pa". */
- astOffset2( frm, cen, at, mx, pa );
-
-/* Resolve all the supplied points into components parallel and
- perpendicular to the line joining the centre and "pa". */
- ps2 = astResolvePoints( frm, cen, pa, mesh, NULL );
- ptr2 = astGetPoints( ps2 );
- if( astOK ) {
-
-/* For each other mesh point, work out the length of the secondary
- axis which would result if we used that point to define the ellipse.
- Find the mean of these secondary axis lengths, weighted by the length
- of the y component to reduce influence of poor conditioning at very
- low y. */
- smn = 0.0;
- sw = 0.0;
- px = ptr2[ 0 ];
- py = ptr2[ 1 ];
- for( ip = 0; ip < np; ip++, px++, py++ ) {
- if( *px != AST__BAD && *py != AST__BAD ) {
- den = mx*mx - (*px)*(*px);
- if( den > 0.0 ) {
- smn += fabs( mx*(*py)*(*py) )/sqrt( den );
- sw += fabs( *py );
- }
- }
- }
-
- if( sw > 0 ) {
- mn = smn/sw;
-
-/* Find the coords at the end of the mean secondary axis. */
- astOffset2( frm, cen, at + AST__DPIBY2, mn, pb );
-
-/* Create the Ellipse to return. */
- result = (AstRegion *) astEllipse( frm, 0, cen, pa, pb, unc, "", status );
- }
- }
-
-/* Free resources. */
- ps2 = astAnnul( ps2 );
-
- }
- }
-
- dist = astFree( dist );
- ang = astFree( ang );
- frm = astAnnul( frm );
-
-/* Return NULL if anything went wrong. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result.*/
- return result;
-}
-
-void astInitEllipseVtab_( AstEllipseVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitEllipseVtab
-
-* Purpose:
-* Initialise a virtual function table for a Ellipse.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "ellipse.h"
-* void astInitEllipseVtab( AstEllipseVtab *vtab, const char *name )
-
-* Class Membership:
-* Ellipse vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the Ellipse class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
- AstRegionVtab *region; /* Pointer to Region component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitRegionVtab( (AstRegionVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAEllipse) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstRegionVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
- vtab->EllipsePars = EllipsePars;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- mapping = (AstMappingVtab *) vtab;
- region = (AstRegionVtab *) vtab;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
- parent_simplify = mapping->Simplify;
- mapping->Simplify = Simplify;
-
- parent_setregfs = region->SetRegFS;
- region->SetRegFS = SetRegFS;
-
- parent_resetcache = region->ResetCache;
- region->ResetCache = ResetCache;
-
- region->RegPins = RegPins;
- region->RegBaseMesh = RegBaseMesh;
- region->RegBaseBox = RegBaseBox;
- region->RegCentre = RegCentre;
- region->RegTrace = RegTrace;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
-
-/* Declare the copy constructor, destructor and class dump
- functions. */
- astSetDelete( vtab, Delete );
- astSetCopy( vtab, Copy );
- astSetDump( vtab, Dump, "Ellipse", "Elliptical region" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static void Cache( AstEllipse *this, int *status ){
-/*
-* Name:
-* Cache
-
-* Purpose:
-* Calculate intermediate values and cache them in the Ellipse structure.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "ellipse.h"
-* void Cache( AstEllipse *this, int *status )
-
-* Class Membership:
-* Ellipse member function
-
-* Description:
-* This function uses the PointSet stored in the parent Region to calculate
-* some intermediate values which are useful in other methods. These
-* values are stored within the Ellipse structure.
-
-* Parameters:
-* this
-* Pointer to the Ellipse.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstFrame *frm; /* Pointer to base Frame in Ellipse */
- double **ptr; /* Pointer to data in the encapsulated PointSet */
- double *centre; /* Array holding centre coords */
- double *point1; /* Array holding coords at end of primary axis */
- double *point2; /* Array holding coords at another point on ellipse */
- double a; /* The half-length of the primary axis */
- double angle; /* Orientation of primary axis */
- double b; /* The half-length of the secondary axis */
- int i; /* Axis index */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Do Nothing if the cached information is up to date. */
- if( this->stale ) {
-
-/* Get a pointer to the base Frame. */
- frm = astGetFrame( ((AstRegion *) this)->frameset, AST__BASE );
-
-/* Allocate memory. */
- centre = (double *) astMalloc( sizeof( double )*2 );
- point1 = (double *) astMalloc( sizeof( double )*2 );
- point2 = (double *) astMalloc( sizeof( double )*2 );
-
-/* Get pointers to the coordinate data in the parent Region structure. */
- ptr = astGetPoints( ((AstRegion *) this)->points );
-
-/* Check pointers can be used safely. */
- if( astOK ) {
-
-/* Copy the points in to the allocated memory. */
- for( i = 0; i < 2; i++ ) {
- centre[ i ] = ptr[ i ][ 0 ];
- point1[ i ] = ptr[ i ][ 1 ];
- point2[ i ] = ptr[ i ][ 2 ];
- }
-
-/* Calculate the geometric parameters of the ellipse. */
- CalcPars( frm, centre, point1, point2, &a, &b, &angle, status );
-
-/* Check the returned values. */
- if( a <= 0.0 || a == AST__BAD || b <= 0.0 || b == AST__BAD ) {
- if( astOK ) astError( AST__BADIN, "astInitEllipse(%s): The "
- "supplied points do not determine an "
- "ellipse.", status, astGetClass( this ) );
- }
-
-/* Store useful things in the Ellipse structure. */
- if( astOK ) {
- astFree( this->centre );
- this->centre = centre;
- centre = NULL;
-
- astFree( this->point1 );
- this->point1 = point1;
- point1 = NULL;
-
- this->a = a;
- this->b = b;
- this->angle = angle;
- }
- }
-
-/* Initialise the bounding box. This is set properly when the astRegBaseMesh
- function is called. These variables should not be used unless the
- "basemesh" component of the parent Region structure is set to a non-null
- value. */
- this->lbx = -DBL_MAX;
- this->ubx = DBL_MAX;
- this->lby = -DBL_MAX;
- this->uby = DBL_MAX;
-
-/* Free resources */
- frm = astAnnul( frm );
- if( centre ) centre = astFree( centre );
- if( point1 ) point1 = astFree( point1 );
- point2 = astFree( point2 );
-
-/* Indicate cached information is up to date. */
- this->stale = 0;
-
- }
-}
-
-static void CalcPars( AstFrame *frm, double centre[2], double point1[2],
- double point2[2], double *a, double *b,
- double *angle, int *status ){
-/*
-* Name:
-* CalcPars
-
-* Purpose:
-* Calculate ellipse parameters.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "ellipse.h"
-* void CalcPars( AstFrame *frm, double centre[2], double point1[2],
-* double point2[2], double *a, double *b, double *angle,
-* int *status )
-
-* Class Membership:
-* Ellipse member function
-
-* Description:
-* This function uses the supplied positions to calculate the
-* geometric parameters of an ellipse.
-
-* Parameters:
-* frm
-* Pointer to the Frame in which the positions are defined.
-* centre;
-* Array holding centre coords.
-* point1
-* Array holding coords at end of primary axis
-* point2
-* Array holding coords at another point on ellipse. On exit it
-* holds the coords at the end of the secondary axis.
-* a
-* Pointer to location at which to store the half-length of the
-* primary axis.
-* b
-* Pointer to location at which to store the half-length of the
-* secondary axis.
-* angle
-* Pointer to location at which to store the angle from the
-* positive direction of the second Frame axis to the primary
-* ellipse axis, in radians. Rotation from the second to the first
-* Frame axis is positive.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- double point3[ 2 ]; /* Array holding a point on the primary axis */
- double x; /* The offset parallel to the primary axis */
- double y; /* The offset perpendicular to the primary axis */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get the geodesic distance between the centre and point 1 (the end of
- the primary axis of the ellipse). This is the half length of the
- primary axis of the ellipse (the axis which joins the centre position to
- point 1). */
- *a = astDistance( frm, centre, point1 );
-
-/* Find the point (point3) on the primary axis which is closest to point 2,
- and thus get the geodesic offsets (resolved parallel and perpendicular to
- the primary axis) between the centre and point 2. */
- if( *a > 0.0 ) {
- astResolve( frm, centre, point1, point2, point3, &x, &y );
-
-/* Find the half-length of the secondary ellipse axis. */
- if( astOK ) {
- *b = (*a)*(*a) - x*x;
- if( *b > 0.0 ) *b = (*a)*y/sqrt( *b );
- } else {
- *b = *a;
- }
-
-/* Find the angle from the positive direction of the second axis to the
- primary ellipse axis. */
- point3[ 0 ] = centre[ 0 ];
- point3[ 1 ] = centre[ 1 ] + fabs( 0.1*(*a) );
- *angle = astAngle( frm, point3, centre, point1 );
-
-/* Find the end point of the secondary axis. */
- (void) astOffset2( frm, centre, *angle + AST__DPIBY2, *b, point2 );
- }
-}
-
-static void EllipsePars( AstEllipse *this, double centre[2], double *a,
- double *b, double *angle, double p1[2],
- double p2[2], int *status ){
-/*
-*++
-* Name:
-c astEllipsePars
-f AST_ELLIPSEPARS
-
-* Purpose:
-* Returns the geometric parameters of an Ellipse.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "ellipse.h"
-c void astEllipsePars( AstEllipse *this, double centre[2], double *a,
-c double *b, double *angle, double p1[2], double p2[2] )
-f CALL AST_ELLIPSEPARS( THIS, CENTRE, A, B, ANGLE, P1, P2, STATUS )
-
-* Class Membership:
-* Region method.
-
-* Description:
-c This function
-f This routine
-* returns the geometric parameters describing the supplied ellipse.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Region.
-c centre
-f CENTRE( 2 ) = DOUBLE PRECISION (Returned)
-* The coordinates of the Ellipse centre are returned in this arrays.
-c a
-f A = DOUBLE PRECISION (Returned)
-* Returned holding the half-length of the first axis of the
-* ellipse.
-c b
-f B = DOUBLE PRECISION (Returned)
-* Returned holding the half-length of the second axis of the
-* ellipse.
-c angle
-f ANGLE = DOUBLE PRECISION (Returned)
-* If the coordinate system in which the Ellipse is defined has
-* axes (X,Y), then
-c "*angle"
-f ANGLE
-* is returned holding the angle from the positive direction of
-* the Y axis to the first axis of the ellipse, in radians.
-* Positive rotation is in the same sense as rotation from the
-* positive direction of Y to the positive direction of X.
-c p1
-f P1( 2 ) = DOUBLE PRECISION (Returned)
-* An array in which to return the coordinates at one of the two ends
-* of the first axis of the ellipse.
-c A NULL pointer can be supplied if these coordinates are not needed.
-c p2
-f P2( 2 ) = DOUBLE PRECISION (Returned)
-* An array in which to return the coordinates at one of the two ends
-* of the second axis of the ellipse.
-c A NULL pointer can be supplied if these coordinates are not needed.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - If the coordinate system represented by the Ellipse has been
-* changed since it was first created, the returned parameters refer
-* to the new (changed) coordinate system, rather than the original
-* coordinate system. Note however that if the transformation from
-* original to new coordinate system is non-linear, the shape
-* represented by the supplied Ellipse object may not be an accurate
-* ellipse.
-* - Values of AST__BAD are returned for the parameters without error
-* if the ellipse is degenerate or undefined.
-*--
-*/
-
-/* Local Variables: */
- AstFrame *frm; /* Current Frame represented by the Ellipse */
- AstPointSet *pset; /* PointSet holding PointList axis values */
- AstRegion *this_region; /* Parent Region pointer */
- double **ptr; /* Pointer to axes values in the PointList */
- double *point1; /* Pointer to "p1" or "buf1" */
- double *point2; /* Pointer to "p2" or "buf2" */
- double buf1[2]; /* Local substitute array for "p1" */
- double buf2[2]; /* Local substitute array for "p2" */
- int i; /* Axis index */
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* Store a pointer to the parent region structure. */
- this_region = (AstRegion *) this;
-
-/* Transform the base Frame axis values into the current Frame. */
- pset = astTransform( this_region->frameset, this_region->points, 1, NULL );
-
-/* Get pointers to the coordinate data. */
- ptr = astGetPoints( pset );
-
-/* Choose the arrays to use - supplied arrays if possible, local arrays
- otherwise. */
- if( p1 ) {
- point1 = p1;
- } else {
- point1 = buf1;
- }
- if( p2 ) {
- point2 = p2;
- } else {
- point2 = buf2;
- }
-
-/* Check pointers can be used safely. */
- if( astOK ) {
-
-/* Copy the points in to separate arrays. */
- for( i = 0; i < 2; i++ ) {
- centre[ i ] = ptr[ i ][ 0 ];
- point1[ i ] = ptr[ i ][ 1 ];
- point2[ i ] = ptr[ i ][ 2 ];
- }
-
-/* Get the Ellipse frame. */
- frm = astGetFrame( this_region->frameset, AST__CURRENT );
-
-/* Calculate the geometric parameters of the ellipse. */
- CalcPars( frm, centre, point1, point2, a, b, angle, status );
-
-/* Ensure no zero values are returned. */
- if( *a <= 0.0 || *b <= 0.0 ) {
- *a = AST__BAD;
- *b = AST__BAD;
- *angle = AST__BAD;
- }
-
-/* Free resources */
- frm = astAnnul( frm );
- }
- pset = astAnnul( pset );
-}
-
-static void RegBaseBox( AstRegion *this_region, double *lbnd, double *ubnd, int *status ){
-/*
-* Name:
-* RegBaseBox
-
-* Purpose:
-* Returns the bounding box of an un-negated Region in the base Frame of
-* the encapsulated FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "ellipse.h"
-* void RegBaseBox( AstRegion *this, double *lbnd, double *ubnd, int *status )
-
-* Class Membership:
-* Ellipse member function (over-rides the astRegBaseBox protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns the upper and lower axis bounds of a Region in
-* the base Frame of the encapsulated FrameSet, assuming the Region
-* has not been negated. That is, the value of the Negated attribute
-* is ignored.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* lbnd
-* Pointer to an array in which to return the lower axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-* ubnd
-* Pointer to an array in which to return the upper axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstEllipse *this; /* Pointer to Ellipse structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the Ellipse structure */
- this = (AstEllipse *) this_region;
-
-/* The bounding box of the mesh returned by astRegBaseMesh is used as the
- bounding box of the Ellipse. These bounds are cached in the Ellipse
- structure by astRegBaseMesh. Ensure astRegBaseMesh has been invoked,
- so that it is safe to use the cached bounding box. */
- if( !this_region->basemesh ) (void) astAnnul( astRegBaseMesh( this ) );
-
-/* Store the bounding box. */
- lbnd[ 0 ] = this->lbx;
- ubnd[ 0 ] = this->ubx;
- lbnd[ 1 ] = this->lby;
- ubnd[ 1 ] = this->uby;
-
-}
-
-static AstPointSet *RegBaseMesh( AstRegion *this_region, int *status ){
-/*
-* Name:
-* RegBaseMesh
-
-* Purpose:
-* Return a PointSet containing a mesh of points on the boundary of a
-* Region in its base Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "ellipse.h"
-* AstPointSet *astRegBaseMesh( AstRegion *this, int *status )
-
-* Class Membership:
-* Ellipse member function (over-rides the astRegBaseMesh protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a PointSet containing a mesh of points on the
-* boundary of the Region. The points refer to the base Frame of
-* the encapsulated FrameSet.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the PointSet. Annul the pointer using astAnnul when it
-* is no longer needed.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-
-*/
-
-/* Local Constants: */
-#define NP_EDGE 50 /* No. of points for determining geodesic */
-
-/* Local Variables: */
- AstEllipse *this; /* The Ellipse structure */
- AstFrame *frm; /* Base Frame in encapsulated FrameSet */
- AstPointSet *result; /* Returned pointer */
- AstRegion *reg; /* Copy of supplied Ellipse */
- double **ptr; /* Pointers to data */
- double ang; /* Position angular of primary axis at "dx" */
- double angle; /* Ellipse parametric angle at point */
- double delta; /* Angular separation of points */
- double dist; /* Offset along an axis */
- double dx; /* Primary axis offset */
- double dy; /* Secondary axis offset */
- double lbnd[2]; /* Lower bounding box bounds */
- double lbx; /* Lower x bound of mesh bounding box */
- double lby; /* Lower y bound of mesh bounding box */
- double p2[ 2 ]; /* Position in 2D Frame */
- double p[ 2 ]; /* Position in 2D Frame */
- double ubnd[2]; /* Upper bounding box bounds */
- double ubx; /* Upper x bound of mesh bounding box */
- double uby; /* Upper y bound of mesh bounding box */
- int i; /* Point index */
- int np; /* No. of points in returned PointSet */
-
-/* Initialise */
- result= NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If the Region structure contains a pointer to a PointSet holding
- a previously created mesh, return it. */
- if( this_region->basemesh ) {
- result = astClone( this_region->basemesh );
-
-/* Otherwise, create a new mesh. */
- } else {
-
-/* Initialise the bounding box of the mesh points. */
- lbx = DBL_MAX;
- ubx = -DBL_MAX;
- lby = DBL_MAX;
- uby = -DBL_MAX;
-
-/* Get a pointer to the Ellipse structure. */
- this = (AstEllipse *) this_region;
-
-/* Ensure cached information is available. */
- Cache( this, status );
-
-/* Get a pointer to the base Frame in the encapsulated FrameSet. */
- frm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Get the requested number of points to put on the mesh. */
- np = astGetMeshSize( this );
-
-/* Store the angular increment between points. */
- delta = 2*AST__DPI/np;
-
-/* Create a suitable PointSet to hold the returned positions. */
- result = astPointSet( np, 2, "", status );
- ptr = astGetPoints( result );
- if( astOK ) {
-
-/* Loop round each point. The angle is the parametric angle, phi, where
- the ellipse is defined by:
-
- dx = a.cos( phi )
- dy = a.sin( phi )
-
- measured from the primary ellipse. Positive in the sense of rotation from
- axis 2 to axis 1. */
- angle = 0.0;
- for( i = 0; i < np; i++ ) {
-
-/* Find the offsets from the centre. "dx" is geodesic distance along the
- primary axis, and dy is geodesic distance along the secondary axis. */
- dx = this->a*cos( angle );
- dy = this->b*sin( angle );
-
-/* Now find the point which corresponds to this dx and dy, taking account
- of the potential spherical geometry of hte coordinate system. First
- move a distance "dx" from the centre along the primary axis. The
- function value returned is the direction of the geodesic curve at the
- end point. That is, the angle (in radians) between the positive direction
- of the second axis and the continuation of the geodesic curve at the
- requested end point. */
- ang = astOffset2( frm, this->centre, this->angle, dx, p );
-
-/* Now move a distance "dy" from the point found above at right angles to
- the primary axis. */
- astOffset2( frm, p, ang + AST__DPIBY2, dy, p2 );
-
-/* Store the resulting axis values. */
- ptr[ 0 ][ i ] = p2[ 0 ];
- ptr[ 1 ][ i ] = p2[ 1 ];
-
-/* Update the bounds of the mesh bounding box. The box is expressed in
- terms of axis offsets from the centre, in order to avoid problems with
- boxes that cross RA=0 or RA=12h */
- if( p2[ 0 ] != AST__BAD && p2[ 1 ] != AST__BAD ){
-
- dist = astAxDistance( frm, 1, this->centre[ 0 ], p2[ 0 ] );
- if( dist < lbx ) {
- lbx = dist;
- } else if( dist > ubx ) {
- ubx = dist;
- }
-
- dist = astAxDistance( frm, 1, this->centre[ 1 ], p2[ 1 ] );
- if( dist < lby ) {
- lby = dist;
- } else if( dist > uby ) {
- uby = dist;
- }
- }
-
-/* Increment the angular position of the next mesh point. */
- angle += delta;
- }
- }
-
-/* Save the returned pointer in the Region structure so that it does not
- need to be created again next time this function is called. Also cache
- the bounding box in the Ellipse structure. */
- if( astOK && result ) {
- this_region->basemesh = astClone( result );
-
-/* Extend the bounding box if it contains any singularies. The astNormBox
- requires a Mapping which can be used to test points in the base Frame.
- Create a copy of the Circle and then set its FrameSet so that the current
- Frame in the copy is the same as the base Frame in the original. */
- reg = astCopy( this );
- astSetRegFS( reg, frm );
- astSetNegated( reg, 0 );
-
-/* Normalise this box. */
- lbnd[ 0 ] = this->centre[ 0 ] + lbx;
- lbnd[ 1 ] = this->centre[ 1 ] + lby;
- ubnd[ 0 ] = this->centre[ 0 ] + ubx;
- ubnd[ 1 ] = this->centre[ 1 ] + uby;
- astNormBox( frm, lbnd, ubnd, reg );
-
-/* Save this box */
- this->lbx = lbnd[ 0 ];
- this->ubx = ubnd[ 0 ];
- this->lby = lbnd[ 1 ];
- this->uby = ubnd[ 1 ];
-
-/* Free resources. */
- reg = astAnnul( reg );
- }
- frm = astAnnul( frm );
-
- }
-
-/* Annul the result if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-static double *RegCentre( AstRegion *this_region, double *cen, double **ptr,
- int index, int ifrm, int *status ){
-/*
-* Name:
-* RegCentre
-
-* Purpose:
-* Re-centre a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "ellipse.h"
-* double *RegCentre( AstRegion *this, double *cen, double **ptr,
-* int index, int ifrm, int *status )
-
-* Class Membership:
-* Ellipse member function (over-rides the astRegCentre protected
-* method inherited from the Region class).
-
-* Description:
-* This function shifts the centre of the supplied Region to a
-* specified position, or returns the current centre of the Region.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* cen
-* Pointer to an array of axis values, giving the new centre.
-* Supply a NULL value for this in order to use "ptr" and "index" to
-* specify the new centre.
-* ptr
-* Pointer to an array of points, one for each axis in the Region.
-* Each pointer locates an array of axis values. This is the format
-* returned by the PointSet method astGetPoints. Only used if "cen"
-* is NULL.
-* index
-* The index of the point within the arrays identified by "ptr" at
-* which is stored the coords for the new centre position. Only used
-* if "cen" is NULL.
-* ifrm
-* Should be AST__BASE or AST__CURRENT. Indicates whether the centre
-* position is supplied and returned in the base or current Frame of
-* the FrameSet encapsulated within "this".
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If both "cen" and "ptr" are NULL then a pointer to a newly
-* allocated dynamic array is returned which contains the centre
-* coords of the Region. This array should be freed using astFree when
-* no longer needed. If either of "ptr" or "cen" is not NULL, then a
-* NULL pointer is returned.
-
-* Notes:
-* - Some Region sub-classes do not have a centre. Such classes will report
-* an AST__INTER error code if this method is called.
-*/
-
-/* Local Variables: */
- AstEllipse *this; /* Pointer to Ellipse structure */
- AstFrame *frm; /* Base Frame */
- double **rptr; /* Data pointers for Region PointSet */
- double *bc; /* Base Frame centre position */
- double *result; /* Returned pointer */
- double *tmp; /* Temporary array pointer */
- double a[ 2 ]; /* Original position */
- double angle; /* Orietentation of offset from old to new centre */
- double axval; /* Axis value */
- double b[ 2 ]; /* New position */
- double dist; /* Distance from old to new centre */
- double newcen[ 2 ]; /* New centre */
- int ic; /* Coordinate index */
- int ip; /* Position index */
- int ncb; /* Number of base frame coordinate values per point */
- int ncc; /* Number of current frame coordinate values per point */
-
-/* Initialise */
- result = NULL;
-
-/* Check the local error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the Ellipse structure. */
- this = (AstEllipse *) this_region;
-
-/* Get the number of axis values per point in the current Frame. */
- ncc = astGetNout( this_region->frameset );
-
-/* An ellipse always has 2 base frame axes. */
- ncb = 2;
-
-/* If the centre coords are to be returned, return either a copy of the
- base Frame centre coords, or transform the base Frame centre coords
- into the current Frame. */
- if( !ptr && !cen ) {
- if( ifrm == AST__CURRENT ) {
- result = astRegTranPoint( this_region, this->centre, 1, 1 );
- } else {
- result = astStore( NULL, this->centre, sizeof( double )*ncb );
- }
-
-/* Otherwise, we store the supplied new centre coords and return a NULL
- pointer. */
- } else {
-
-/* Ensure cached information is available. */
- Cache( this, status );
-
-/* Get a pointer to the axis values stored in the Region structure. */
- rptr = astGetPoints( this_region->points );
-
-/* Check pointers can be used safely */
- if( astOK ) {
-
-/* If the centre position was supplied in the current Frame, find the
- corresponding base Frame position... */
- if( ifrm == AST__CURRENT ) {
- if( cen ) {
- bc = astRegTranPoint( this_region, cen, 1, 0 );
- } else {
- tmp = astMalloc( sizeof( double)*(size_t)ncc );
- if( astOK ) {
- for( ic = 0; ic < ncc; ic++ ) tmp[ ic ] = ptr[ ic ][ index ];
- }
- bc = astRegTranPoint( this_region, tmp, 1, 0 );
- tmp = astFree( tmp );
- }
-
-/* Replace any bad centre values with their current values. */
- for( ic = 0; ic < ncb; ic++ ) {
- if( bc[ ic ] == AST__BAD ) bc[ ic ] = this->centre[ ic ];
- }
-
-/* If the centre position was supplied in the base Frame, use the
- supplied "cen" or "ptr" pointer directly to change the coords in the
- parent Region structure and the cached coords in the Ellipse structure. */
- } else {
- bc = newcen;
- for( ic = 0; ic < ncb; ic++ ) {
- axval = cen ? cen[ ic ] : ptr[ ic ][ index ];
- newcen[ ic ] = ( axval != AST__BAD ) ? axval : this->centre[ ic ];
- }
- }
-
-/* Find the direction and length of the offset between the old and new
- centre. */
- frm = astGetFrame( this_region->frameset, AST__BASE );
- angle = astAxAngle( frm, this->centre, bc, 2 );
- dist = astDistance( frm, this->centre, bc );
-
-/* Shift each point in the parent Region structure by the same length and
- direction. */
- for( ip = 0; ip < 3; ip++ ) {
- a[ 0 ] = rptr[ ip ][ 0 ];
- a[ 1 ] = rptr[ ip ][ 1 ];
- astOffset2( frm, a, angle, dist, b );
- rptr[ ip ][ 0 ] = b[ 0 ];
- rptr[ ip ][ 1 ] = b[ 1 ];
- }
-
-/* Indicate that the cache is stale. */
- astResetCache( this );
-
-/* Free resources */
- frm = astAnnul( frm );
- if( bc != newcen ) bc = astFree( bc );
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static int RegPins( AstRegion *this_region, AstPointSet *pset, AstRegion *unc,
- int **mask, int *status ){
-/*
-* Name:
-* RegPins
-
-* Purpose:
-* Check if a set of points fall on the boundary of a given Ellipse.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "ellipse.h"
-* int RegPins( AstRegion *this, AstPointSet *pset, AstRegion *unc,
-* int **mask, int *status )
-
-* Class Membership:
-* Ellipse member function (over-rides the astRegPins protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a flag indicating if the supplied set of
-* points all fall on the boundary of the given Ellipse.
-*
-* Some tolerance is allowed, as specified by the uncertainty Region
-* stored in the supplied Ellipse "this", and the supplied uncertainty
-* Region "unc" which describes the uncertainty of the supplied points.
-
-* Parameters:
-* this
-* Pointer to the Ellipse.
-* pset
-* Pointer to the PointSet. The points are assumed to refer to the
-* base Frame of the FrameSet encapsulated by "this".
-* unc
-* Pointer to a Region representing the uncertainties in the points
-* given by "pset". The Region is assumed to represent the base Frame
-* of the FrameSet encapsulated by "this". Zero uncertainity is assumed
-* if NULL is supplied.
-* mask
-* Pointer to location at which to return a pointer to a newly
-* allocated dynamic array of ints. The number of elements in this
-* array is equal to the value of the Npoint attribute of "pset".
-* Each element in the returned array is set to 1 if the
-* corresponding position in "pset" is on the boundary of the Region
-* and is set to zero otherwise. A NULL value may be supplied
-* in which case no array is created. If created, the array should
-* be freed using astFree when no longer needed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the points all fall on the boundary of the given
-* Region, to within the tolerance specified. Zero otherwise.
-
-*/
-
-/* Local variables: */
- AstEllipse *large_ellipse; /* Ellipse slightly larger than "this" */
- AstEllipse *small_ellipse; /* Ellipse slightly smaller than "this" */
- AstEllipse *this; /* Pointer to the Ellipse structure. */
- AstFrame *frm; /* Base Frame in supplied Ellipse */
- AstPointSet *ps1; /* Points masked by larger Ellipse */
- AstPointSet *ps2; /* Points masked by larger and smaller Ellipsees */
- AstRegion *tunc; /* Uncertainity Region from "this" */
- double **ptr; /* Pointer to axis values in "ps2" */
- double *p; /* Pointer to next axis value */
- double drad; /* Radius increment corresponding to border width */
- double l1; /* Length of bounding box diagonal */
- double l2; /* Length of bounding box diagonal */
- double lbnd_tunc[2]; /* Lower bounds of "this" uncertainty Region */
- double lbnd_unc[2]; /* Lower bounds of supplied uncertainty Region */
- double lim; /* Smallest semi-minor/major axis length */
- double p1[2]; /* New ellipse axis lengths */
- double ubnd_tunc[2]; /* Upper bounds of "this" uncertainty Region */
- double ubnd_unc[2]; /* Upper bounds of supplied uncertainty Region */
- int i; /* Axis index */
- int j; /* Point index */
- int np; /* No. of supplied points */
- int result; /* Returned flag */
-
-/* Initialise */
- result = 0;
- if( mask ) *mask = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return result;
-
-/* Get a pointer to the Ellipse structure. */
- this = (AstEllipse *) this_region;
-
-/* Check the supplied PointSet has 2 axis values per point. */
- if( astGetNcoord( pset ) != 2 && astOK ) {
- astError( AST__INTER, "astRegPins(%s): Illegal number of axis "
- "values per point (%d) in the supplied PointSet - should be "
- "2 (internal AST programming error).", status, astGetClass( this ),
- astGetNcoord( pset ) );
- }
-
-/* Get the number of axes in the uncertainty Region and check it is also 2. */
- if( unc && astGetNaxes( unc ) != 2 && astOK ) {
- astError( AST__INTER, "astRegPins(%s): Illegal number of axes (%d) "
- "in the supplied uncertainty Region - should be 2 "
- "(internal AST programming error).", status, astGetClass( this ),
- astGetNaxes( unc ) );
- }
-
-/* We now find the maximum distance on each axis that a point can be from the
- boundary of the Ellipse for it still to be considered to be on the boundary.
- First get the Region which defines the uncertainty within the Ellipse being
- checked (in its base Frame), and get its bounding box. */
- tunc = astGetUncFrm( this, AST__BASE );
- astGetRegionBounds( tunc, lbnd_tunc, ubnd_tunc );
-
-/* Find the geodesic length within the base Frame of "this" of the diagonal of
- the bounding box. */
- frm = astGetFrame( this_region->frameset, AST__BASE );
- l1 = astDistance( frm, lbnd_tunc, ubnd_tunc );
-
-/* Also get the Region which defines the uncertainty of the supplied points
- and get its bounding box in the same Frame. */
- if( unc ) {
- astGetRegionBounds( unc, lbnd_unc, ubnd_unc );
-
-/* Find the geodesic length of the diagonal of this bounding box. */
- l2 = astDistance( frm, lbnd_unc, ubnd_unc );
-
-/* Assume zero uncertainty if no "unc" Region was supplied. */
- } else {
- l2 = 0.0;
- }
-
-/* Ensure cached information is available. */
- Cache( this, status );
-
-/* The required border width is half of the total diagonal of the two bounding
- boxes. */
- if( astOK ) {
- drad = 0.5*( l1 + l2 );
-
-/* Create two new Ellipse, one of which is larger than "this" by the amount
- found above, and the other of which is smaller than "this" by the amount
- found above. */
- p1[ 0 ] = this->a + 0.5*drad;
- p1[ 1 ] = this->b + 0.5*drad;
- large_ellipse = astEllipse( frm, 1, this->centre, p1, &(this->angle),
- NULL, " ", status );
-
- p1[ 0 ] = this->a - 0.5*drad;
- p1[ 1 ] = this->b - 0.5*drad;
- lim = 1.0E-6*drad;
- if( p1[ 0 ] < lim ) p1[ 0 ] = lim;
- if( p1[ 1 ] < lim ) p1[ 1 ] = lim;
- small_ellipse = astEllipse( frm, 1, this->centre, p1, &(this->angle),
- NULL, " ", status );
-
-/* Negate the smaller region.*/
- astNegate( small_ellipse );
-
-/* Points are on the boundary of "this" if they are inside both the large
- Ellipse and the negated small Ellipse. First transform the supplied PointSet
- using the large Ellipse, then transform them using the negated smaller
- Ellipse. */
- ps1 = astTransform( large_ellipse, pset, 1, NULL );
- ps2 = astTransform( small_ellipse, ps1, 1, NULL );
-
-/* Get a point to the resulting axis values, and the number of axis
- values per axis. */
- ptr = astGetPoints( ps2 );
- np = astGetNpoint( ps2 );
-
-/* If a mask array is to be returned, create one. */
- if( mask ) {
- *mask = astMalloc( sizeof(int)*(size_t) np );
-
-/* Check all the resulting points, setting mask values for all of them. */
- if( astOK ) {
-
-/* Initialise the mask elements on the basis of the first axis values */
- result = 1;
- p = ptr[ 0 ];
- for( j = 0; j < np; j++ ) {
- if( *(p++) == AST__BAD ) {
- result = 0;
- (*mask)[ j ] = 0;
- } else {
- (*mask)[ j ] = 1;
- }
- }
-
-/* Now check for bad values on other axes. */
- for( i = 1; i < 2; i++ ) {
- p = ptr[ i ];
- for( j = 0; j < np; j++ ) {
- if( *(p++) == AST__BAD ) {
- result = 0;
- (*mask)[ j ] = 0;
- }
- }
- }
- }
-
-/* If no output mask is to be made, we can break out of the check as soon
- as the first bad value is found. */
- } else if( astOK ) {
- result = 1;
- for( i = 0; i < 2 && result; i++ ) {
- p = ptr[ i ];
- for( j = 0; j < np; j++ ) {
- if( *(p++) == AST__BAD ) {
- result = 0;
- break;
- }
- }
- }
- }
-
-/* Free resources. */
- large_ellipse = astAnnul( large_ellipse );
- small_ellipse = astAnnul( small_ellipse );
- ps1 = astAnnul( ps1 );
- ps2 = astAnnul( ps2 );
- }
-
- tunc = astAnnul( tunc );
- frm = astAnnul( frm );
-
-/* If an error has occurred, return zero. */
- if( !astOK ) {
- result = 0;
- if( mask ) *mask = astAnnul( *mask );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int RegTrace( AstRegion *this_region, int n, double *dist, double **ptr,
- int *status ){
-/*
-*+
-* Name:
-* RegTrace
-
-* Purpose:
-* Return requested positions on the boundary of a 2D Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "ellipse.h"
-* int astTraceRegion( AstRegion *this, int n, double *dist, double **ptr );
-
-* Class Membership:
-* Ellipse member function (overrides the astTraceRegion method
-* inherited from the parent Region class).
-
-* Description:
-* This function returns positions on the boundary of the supplied
-* Region, if possible. The required positions are indicated by a
-* supplied list of scalar parameter values in the range zero to one.
-* Zero corresponds to some arbitrary starting point on the boundary,
-* and one corresponds to the end (which for a closed region will be
-* the same place as the start).
-
-* Parameters:
-* this
-* Pointer to the Region.
-* n
-* The number of positions to return. If this is zero, the function
-* returns without action (but the returned function value still
-* indicates if the method is supported or not).
-* dist
-* Pointer to an array of "n" scalar parameter values in the range
-* 0 to 1.0.
-* ptr
-* A pointer to an array of pointers. The number of elements in
-* this array should equal tthe number of axes in the Frame spanned
-* by the Region. Each element of the array should be a pointer to
-* an array of "n" doubles, in which to return the "n" values for
-* the corresponding axis. The contents of the arrays are unchanged
-* if the supplied Region belongs to a class that does not
-* implement this method.
-
-* Returned Value:
-* Non-zero if the astTraceRegion method is implemented by the class
-* of Region supplied, and zero if not.
-
-*-
-*/
-
-/* Local Variables; */
- AstEllipse *this;
- AstFrame *frm;
- AstMapping *map;
- AstPointSet *bpset;
- AstPointSet *cpset;
- double **bptr;
- double ang;
- double angle;
- double dx;
- double dy;
- double p2[ 2 ];
- double p[ 2 ];
- int i;
- int ncur;
-
-/* Check inherited status, and the number of points to return, returning
- a non-zero value to indicate that this class supports the astRegTrace
- method. */
- if( ! astOK || n == 0 ) return 1;
-
-/* Get a pointer to the Ellipse structure. */
- this = (AstEllipse *) this_region;
-
-/* Ensure cached information is available. */
- Cache( this, status );
-
-/* Get a pointer to the base Frame in the encapsulated FrameSet. */
- frm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* We first determine the required positions in the base Frame of the
- Region, and then transform them into the current Frame. Get the
- base->current Mapping, and the number of current Frame axes. */
- map = astGetMapping( this_region->frameset, AST__BASE, AST__CURRENT );
-
-/* If it's a UnitMap we do not need to do the transformation, so put the
- base Frame positions directly into the supplied arrays. */
- if( astIsAUnitMap( map ) ) {
- bpset = NULL;
- bptr = ptr;
- ncur = 2;
-
-/* Otherwise, create a PointSet to hold the base Frame positions (known
- to be 2D since this is an ellipse). */
- } else {
- bpset = astPointSet( n, 2, " ", status );
- bptr = astGetPoints( bpset );
- ncur = astGetNout( map );
- }
-
-/* Check the pointers can be used safely. */
- if( astOK ) {
-
-/* Loop round each point. */
- for( i = 0; i < n; i++ ) {
-
-/* The supplied scalar parameter values are the parametric angles, phi,
- where the ellipse is defined by:
-
- dx = a.cos( phi )
- dy = a.sin( phi )
-
- measured from the primary ellipse. Positive in the sense of rotation from
- axis 2 to axis 1. */
- angle = dist[ i ]*2*AST__DPI;
-
-/* Find the offsets from the centre. "dx" is geodesic distance along the
- primary axis, and dy is geodesic distance along the secondary axis. */
- dx = this->a*cos( angle );
- dy = this->b*sin( angle );
-
-/* Now find the point which corresponds to this dx and dy, taking account
- of the potential spherical geometry of hte coordinate system. First
- move a distance "dx" from the centre along the primary axis. The
- function value returned is the direction of the geodesic curve at the
- end point. That is, the angle (in radians) between the positive direction
- of the second axis and the continuation of the geodesic curve at the
- requested end point. */
- ang = astOffset2( frm, this->centre, this->angle, dx, p );
-
-/* Now move a distance "dy" from the point found above at right angles to
- the primary axis. */
- astOffset2( frm, p, ang + AST__DPIBY2, dy, p2 );
-
-/* Store the resulting axis values. */
- bptr[ 0 ][ i ] = p2[ 0 ];
- bptr[ 1 ][ i ] = p2[ 1 ];
- }
- }
-
-/* If required, transform the base frame positions into the current
- Frame, storing them in the supplied array. Then free resources. */
- if( bpset ) {
- cpset = astPointSet( n, ncur, " ", status );
- astSetPoints( cpset, ptr );
-
- (void) astTransform( map, bpset, 1, cpset );
-
- cpset = astAnnul( cpset );
- bpset = astAnnul( bpset );
- }
-
-/* Free remaining resources. */
- map = astAnnul( map );
- frm = astAnnul( frm );
-
-/* Return a non-zero value to indicate that this class supports the
- astRegTrace method. */
- return 1;
-}
-
-static void ResetCache( AstRegion *this, int *status ){
-/*
-* Name:
-* ResetCache
-
-* Purpose:
-* Clear cached information within the supplied Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "ellipse.h"
-* void ResetCache( AstRegion *this, int *status )
-
-* Class Membership:
-* Region member function (overrides the astResetCache method
-* inherited from the parent Region class).
-
-* Description:
-* This function clears cached information from the supplied Region
-* structure.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-*/
- if( this ) {
- ( (AstEllipse *) this )->stale = 1;
- (*parent_resetcache)( this, status );
- }
-}
-
-static void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status ) {
-/*
-* Name:
-* SetRegFS
-
-* Purpose:
-* Stores a new FrameSet in a Region
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "ellipse.h"
-* void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status )
-
-* Class Membership:
-* Ellipse method (over-rides the astSetRegFS method inherited from
-* the Region class).
-
-* Description:
-* This function creates a new FrameSet and stores it in the supplied
-* Region. The new FrameSet contains two copies of the supplied
-* Frame, connected by a UnitMap.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* frm
-* The Frame to use.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Invoke the parent method to store the FrameSet in the parent Region
- structure. */
- (* parent_setregfs)( this_region, frm, status );
-
-/* Indicate that cached information will need to be re-calculated before
- it is next used. */
- astResetCache( this_region );
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* Simplify
-
-* Purpose:
-* Simplify the Mapping represented by a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "ellipse.h"
-* AstMapping *Simplify( AstMapping *this, int *status )
-
-* Class Membership:
-* Ellipse method (over-rides the astSimplify method inherited
-* from the Region class).
-
-* Description:
-* This function invokes the parent Region Simplify method, and then
-* performs any further region-specific simplification.
-*
-* If the Mapping from base to current Frame is not a UnitMap, this
-* will include attempting to fit a new Region to the boundary defined
-* in the current Frame.
-
-* Parameters:
-* this
-* Pointer to the original Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the simplified Region. A cloned pointer to the
-* supplied Region will be returned if no simplication could be
-* performed.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstMapping *map; /* Base -> current Mapping */
- AstMapping *result; /* Result pointer to return */
- AstPointSet *mesh; /* Mesh of current Frame positions */
- AstPointSet *ps2; /* Ellipse PointSet in current Frame */
- AstRegion *new; /* Pointer to simplified Region */
- AstRegion *newreg; /* Equivalent circle or ellipse */
- AstRegion *this; /* Pointer to supplied Region structure */
- AstRegion *unc; /* Pointer to uncertainty Region */
- double **ptr2; /* Pointer axis values in "ps2" */
- double *cen; /* Pointer to array holding new centre coords */
- int ic; /* Axis index */
- int nc; /* No. of axis values per point */
- int ok; /* Was the new centre found OK? */
- int simpler; /* Has some simplication taken place? */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the supplied Region structure. */
- this = (AstRegion *) this_mapping;
-
-/* Invoke the parent Simplify method inherited from the Region class. This
- will simplify the encapsulated FrameSet and uncertainty Region. */
- new = (AstRegion *) (*parent_simplify)( this_mapping, status );
-
-/* Note if any simplification took place. This is assumed to be the case
- if the pointer returned by the above call is different to the supplied
- pointer. */
- simpler = ( new != this );
-
-/* We attempt to simplify the Ellipse by re-defining it within its current
- Frame. Transforming the Ellipse from its base to its current Frame may
- result in the region no longer being an ellipse. We test this by
- transforming a set of bounds on the Ellipse boundary. */
- map = astGetMapping( new->frameset, AST__BASE, AST__CURRENT );
-
-/* Get a mesh of points covering the Ellipse in its current Frame. */
- mesh = astRegMesh( new );
-
-/* Get the Region describing the positional uncertainty within the Ellipse in
- its current Frame. */
- unc = astGetUncFrm( new, AST__CURRENT );
-
-/* Transform the PointSet holding the ellipse centre into the current
- Frame, and copy the axis values into a new array. */
- ps2 = astRegTransform( this, this->points, 1, NULL, NULL );
- nc = astGetNcoord( ps2 );
- cen = astMalloc( sizeof( double )*(size_t) nc );
- ptr2 = astGetPoints( ps2 );
- if( astOK ) {
- ok = 1;
- for( ic = 0; ic < nc; ic++ ) {
- cen[ ic ] = ptr2[ ic ][ 0 ];
- if( cen[ ic ] == AST__BAD ) ok = 0;
- }
-
-/* Find the best fitting Circle (defined in the current Frame) through these
- points */
- newreg = ok ? astBestCircle( mesh, cen, unc ) : NULL;
-
-/* See if all points within this mesh fall on the boundary of the best
- fitting Circle, to within the uncertainty of the Region. */
- if( newreg && astRegPins( newreg, mesh, NULL, NULL ) ) {
-
-/* If so, use the new Circle in place of the original Region. */
- (void) astAnnul( new );
- new = astClone( newreg );
- simpler =1;
-
-/* Otherwise, if the region is 2-d we see if an Ellipse can represent the
- mesh. */
- } else if( ok && nc == 2 ){
-
-/* Find the best fitting Ellipse (defined in the current Frame) through these
- points */
- if( newreg ) (void) astAnnul( newreg );
- newreg = astBestEllipse( mesh, cen, unc );
-
-/* See if all points within this mesh fall on the boundary of the best
- fitting Ellipse, to within the uncertainty of the Region. */
- if( newreg && astRegPins( newreg, mesh, NULL, NULL ) ) {
-
-/* If so, use the new Ellipse in place of the original Region. */
- (void) astAnnul( new );
- new = astClone( newreg );
- simpler = 1;
- }
- }
-
-/* Free resources. */
- if( newreg ) newreg = astAnnul( newreg );
- }
-
- ps2 = astAnnul( ps2 );
- cen = astFree( cen );
- mesh = astAnnul( mesh );
- unc = astAnnul( unc );
- map = astAnnul( map );
-
-/* If any simplification could be performed, copy Region attributes from
- the supplied Region to the returned Region, and return a pointer to it.
- If the supplied Region had no uncertainty, ensure the returned Region
- has no uncertainty. Otherwise, return a clone of the supplied pointer. */
- if( simpler ){
- astRegOverlay( new, this, 1 );
- result = (AstMapping *) new;
-
- } else {
- new = astAnnul( new );
- result = astClone( this );
- }
-
-/* If an error occurred, annul the returned pointer. */
- if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a Ellipse to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "ellipse.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* Ellipse member function (over-rides the astTransform protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function takes a Ellipse and a set of points encapsulated in a
-* PointSet and transforms the points by setting axis values to
-* AST__BAD for all points which are outside the region. Points inside
-* the region are copied unchanged from input to output.
-
-* Parameters:
-* this
-* Pointer to the Ellipse.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - The forward and inverse transformations are identical for a
-* Region.
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of axes in the Frame represented by the Ellipse.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstEllipse *this; /* Pointer to Ellipse */
- AstFrame *frm; /* Pointer to base Frame in FrameSet */
- AstPointSet *pset_res; /* Pointer to PointSet holding resolved components */
- AstPointSet *pset_tmp; /* Pointer to PointSet holding base Frame positions*/
- AstPointSet *result; /* Pointer to output PointSet */
- double **ptr_out; /* Pointer to output coordinate data */
- double **ptr_res; /* Pointer to resolved components coordinate data */
- double *px; /* Pointer to array of primary axis components */
- double *py; /* Pointer to array of secondary axis components */
- double c1; /* Constant */
- double c2; /* Constant */
- double d; /* Elliptical distance to current point */
- int closed; /* Is the boundary part of the Region? */
- int coord; /* Zero-based index for coordinates */
- int inside; /* Is the point inside the Region? */
- int ncoord_out; /* No. of coordinates per output point */
- int neg; /* Has the Region been negated? */
- int npoint; /* No. of points */
- int point; /* Loop counter for points */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the Ellipse structure. */
- this = (AstEllipse *) this_mapping;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Region class. This function validates
- all arguments and generates an output PointSet if necessary,
- containing a copy of the input PointSet. */
- result = (*parent_transform)( this_mapping, in, forward, out, status );
-
-/* Ensure cached information is available. */
- Cache( this, status );
-
-/* We will now extend the parent astTransform method by performing the
- calculations needed to generate the output coordinate values. */
-
-/* First use the encapsulated FrameSet to transform the supplied positions
- from the current Frame in the encapsulated FrameSet (the Frame
- represented by the Region), to the base Frame (the Frame in which the
- Region is defined). This call also returns a pointer to the base Frame
- of the encapsulated FrameSet. Note, the returned pointer may be a
- clone of the "in" pointer, and so we must be carefull not to modify the
- contents of the returned PointSet. */
- pset_tmp = astRegTransform( this, in, 0, NULL, &frm );
-
-/* Resolve all the base Frame positions into components parallel to and
- perpendicular to the primary axis, relative to the ellipse centre. The
- components are returned in a new PointSet. */
- pset_res = astResolvePoints( frm, this->centre, this->point1, pset_tmp, NULL );
-
-/* Determine the numbers of points from the component PointSet and obtain
- pointers for accessing the component and output coordinate values. */
- npoint = astGetNpoint( pset_res );
- ptr_res = astGetPoints( pset_res );
- ncoord_out = astGetNcoord( result );
- ptr_out = astGetPoints( result );
-
-/* See if the boundary is part of the Region. */
- closed = astGetClosed( this );
-
-/* See if the Region has been negated. */
- neg = astGetNegated( this );
-
-/* Form some frequently needed constants. */
- c1 = 1.0/(this->a*this->a);
- c2 = 1.0/(this->b*this->b);
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
- if ( astOK ) {
- px = ptr_res[ 0 ];
- py = ptr_res[ 1 ];
-
-/* Loop round each point */
- for ( point = 0; point < npoint; point++, px++, py++ ) {
-
-/* Bad input points result in bad output points */
- if( *px == AST__BAD || *py == AST__BAD ) {
- inside = 0;
-
-/* If the input points are good... */
- } else {
-
-/* Find the elliptical distance from the centre to the supplied point (the
- ellipse circumference has an "elliptical distance" of 1.0 at all points).*/
- d = c1*(*px)*(*px) + c2*(*py)*(*py);
-
-/* Now consider whether this radius value puts the point in or out of the
- Ellipse. */
- if( d != AST__BAD ){
- if( neg ) {
- if( closed ) {
- inside = ( d >= 1.0 );
- } else {
- inside = ( d > 1.0 );
- }
- } else {
- if( closed ) {
- inside = ( d <= 1.0 );
- } else {
- inside = ( d < 1.0 );
- }
- }
- } else {
- inside = 0;
- }
- }
-
-/* If the point is outside, store bad output values. */
- if( !inside ) {
- for ( coord = 0; coord < ncoord_out; coord++ ) {
- ptr_out[ coord ][ point ] = AST__BAD;
- }
- }
- }
- }
-
-/* Free resources */
- pset_tmp = astAnnul( pset_tmp );
- pset_res = astAnnul( pset_res );
- frm = astAnnul( frm );
-
-/* Annul the result if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for Ellipse objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for Ellipse objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstEllipse *in; /* Pointer to input Ellipse */
- AstEllipse *out; /* Pointer to output Ellipse */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Ellipses. */
- in = (AstEllipse *) objin;
- out = (AstEllipse *) objout;
-
-/* For safety, first clear any references to the input memory from
- the output Ellipse. */
- out->centre = NULL;
- out->point1 = NULL;
-
-/* Copy dynamic memory contents */
- out->centre = astStore( NULL, in->centre, sizeof( double )*2 );
- out->point1 = astStore( NULL, in->point1, sizeof( double )*2 );
-}
-
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for Ellipse objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for Ellipse objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstEllipse *this; /* Pointer to Ellipse */
-
-/* Obtain a pointer to the Ellipse structure. */
- this = (AstEllipse *) obj;
-
-/* Annul all resources. */
- this->centre = astFree( this->centre );
- this->point1 = astFree( this->point1 );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for Ellipse objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the Ellipse class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the Ellipse whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstEllipse *this; /* Pointer to the Ellipse structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Ellipse structure. */
- this = (AstEllipse *) this_object;
-
-/* Write out values representing the instance variables for the
- Ellipse class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* There are no values to write, so return without further action. */
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAEllipse and astCheckEllipse functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(Ellipse,Region)
-astMAKE_CHECK(Ellipse)
-
-AstEllipse *astEllipse_( void *frame_void, int form, const double centre[2],
- const double point1[2], const double point2[2],
- AstRegion *unc, const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astEllipse
-f AST_ELLIPSE
-
-* Purpose:
-* Create a Ellipse.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "ellipse.h"
-c AstEllipse *astEllipse( AstFrame *frame, int form, const double centre[2],
-c const double point1[2], const double point2[2],
-c AstRegion *unc, const char *options, ... )
-f RESULT = AST_ELLIPSE( FRAME, FORM, CENTRE, POINT1, POINT2, UNC, OPTIONS,
-f STATUS )
-
-* Class Membership:
-* Ellipse constructor.
-
-* Description:
-* This function creates a new Ellipse and optionally initialises its
-* attributes.
-*
-* A Ellipse is a Region which represents a elliptical area within the
-* supplied 2-dimensional Frame.
-
-* Parameters:
-c frame
-f FRAME = INTEGER (Given)
-* A pointer to the Frame in which the region is defined. It must
-* have exactly 2 axes. A deep copy is taken of the supplied Frame.
-* This means that any subsequent changes made to the Frame using the
-* supplied pointer will have no effect the Region.
-c form
-f FORM = INTEGER (Given)
-* Indicates how the ellipse is described by the remaining parameters.
-* A value of zero indicates that the ellipse is specified by a
-* centre position and two positions on the circumference. A value of
-* one indicates that the ellipse is specified by its centre position,
-* the half-lengths of its two axes, and the orientation of its first
-* axis.
-c centre
-f CENTRE( 2 ) = DOUBLE PRECISION (Given)
-c An array of 2 doubles,
-f An array
-* containing the coordinates at the centre of
-* the ellipse.
-c point1
-f POINT1( 2 ) = DOUBLE PRECISION (Given)
-c An array of 2 doubles. If "form"
-f If FORM
-* is zero, this array should contain the coordinates of one of the four
-* points where an axis of the ellipse crosses the circumference of the
-* ellipse.
-c If "form"
-f If FORM
-* is one, it should contain the lengths of semi-major and
-* semi-minor axes of the ellipse, given as geodesic distances
-* within the Frame.
-c point2
-f POINT2( 2 ) = DOUBLE PRECISION (Given)
-c An array of 2 doubles. If "form"
-f If FORM
-* is zero, this array should containing the coordinates at some other
-* point on the circumference of the ellipse, distinct from
-c "point1". If "form"
-f POINT1. If FORM
-* is one, the first element of this array should hold the angle
-* between the second axis of the Frame and the first ellipse axis
-* (i.e. the ellipse axis which is specified first in the
-c "point1"
-f POINT1
-* array), and the second element will be ignored. The angle should be
-* given in radians, measured positive in the same sense as rotation
-* from the positive direction of the second Frame axis to the positive
-* direction of the first Frame axis.
-c unc
-f UNC = INTEGER (Given)
-* An optional pointer to an existing Region which specifies the
-* uncertainties associated with the boundary of the Box being created.
-* The uncertainty in any point on the boundary of the Box is found by
-* shifting the supplied "uncertainty" Region so that it is centred at
-* the boundary point being considered. The area covered by the
-* shifted uncertainty Region then represents the uncertainty in the
-* boundary position. The uncertainty is assumed to be the same for
-* all points.
-*
-* If supplied, the uncertainty Region must be of a class for which
-* all instances are centro-symetric (e.g. Box, Circle, Ellipse, etc.)
-* or be a Prism containing centro-symetric component Regions. A deep
-* copy of the supplied Region will be taken, so subsequent changes to
-* the uncertainty Region using the supplied pointer will have no
-* effect on the created Box. Alternatively,
-f a null Object pointer (AST__NULL)
-c a NULL Object pointer
-* may be supplied, in which case a default uncertainty is used
-* equivalent to a box 1.0E-6 of the size of the Box being created.
-*
-* The uncertainty Region has two uses: 1) when the
-c astOverlap
-f AST_OVERLAP
-* function compares two Regions for equality the uncertainty
-* Region is used to determine the tolerance on the comparison, and 2)
-* when a Region is mapped into a different coordinate system and
-* subsequently simplified (using
-c astSimplify),
-f AST_SIMPLIFY),
-* the uncertainties are used to determine if the transformed boundary
-* can be accurately represented by a specific shape of Region.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new Ellipse. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new Ellipse. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astEllipse()
-f AST_ELLIPSE = INTEGER
-* A pointer to the new Ellipse.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *frame; /* Pointer to Frame structure */
- AstEllipse *new; /* Pointer to new Ellipse */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the supplied Frame structure. */
- frame = astCheckFrame( frame_void );
-
-/* Initialise the Ellipse, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitEllipse( NULL, sizeof( AstEllipse ), !class_init, &class_vtab,
- "Ellipse", frame, form, centre, point1, point2, unc );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new Ellipse's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new Ellipse. */
- return new;
-}
-
-AstEllipse *astEllipseId_( void *frame_void, int form, const double centre[2],
- const double point1[2], const double point2[2],
- void *unc_void, const char *options, ... ) {
-/*
-* Name:
-* astEllipseId_
-
-* Purpose:
-* Create a Ellipse.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "ellipse.h"
-* AstEllipse *astEllipseId( void *frame_void, int form, const double centre[2],
-* const double point1[2], const double point2[2],
-* void *unc_void, const char *options, ..., int *status )
-
-* Class Membership:
-* Ellipse constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astEllipse constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astEllipse_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astEllipse_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astEllipse_.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The ID value associated with the new Ellipse.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *frame; /* Pointer to Frame structure */
- AstEllipse *new; /* Pointer to new Ellipse */
- AstRegion *unc; /* Pointer to Region structure */
- va_list args; /* Variable argument list */
-
- int *status; /* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a Frame pointer from the supplied ID and validate the
- pointer to ensure it identifies a valid Frame. */
- frame = astVerifyFrame( astMakePointer( frame_void ) );
-
-/* Obtain a Region pointer from the supplied "unc" ID and validate the
- pointer to ensure it identifies a valid Region . */
- unc = unc_void ? astCheckRegion( astMakePointer( unc_void ) ) : NULL;
-
-/* Initialise the Ellipse, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitEllipse( NULL, sizeof( AstEllipse ), !class_init, &class_vtab,
- "Ellipse", frame, form, centre, point1, point2, unc );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new Ellipse's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new Ellipse. */
- return astMakeId( new );
-}
-
-AstEllipse *astInitEllipse_( void *mem, size_t size, int init, AstEllipseVtab *vtab,
- const char *name, AstFrame *frame, int form,
- const double centre[2], const double point1[2],
- const double point2[2], AstRegion *unc, int *status ){
-/*
-*+
-* Name:
-* astInitEllipse
-
-* Purpose:
-* Initialise a Ellipse.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "ellipse.h"
-* AstEllipse *astInitEllipse( void *mem, size_t size, int init,
-* AstEllipseVtab *vtab, const char *name,
-* AstFrame *frame, const double centre[2],
-* const double point1[2], const double point2[2],
-* AstRegion *unc )
-
-* Class Membership:
-* Ellipse initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new Ellipse object. It allocates memory (if necessary) to accommodate
-* the Ellipse plus any additional data associated with the derived class.
-* It then initialises a Ellipse structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a Ellipse at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the Ellipse is to be initialised.
-* This must be of sufficient size to accommodate the Ellipse data
-* (sizeof(Ellipse)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the Ellipse (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the Ellipse
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the Ellipse's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new Ellipse.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-* frame
-* A pointer to the Frame in which the region is defined.
-* form
-* Indicates how the "point" parameter should be interpreted.
-* Should be either 0 or 1.
-* centre
-* An array of double, with one element for each Frame axis (Naxes
-* attribute) containing the coordinates of the ellipse centre.
-* point1
-* An array of double, with one element for each Frame axis (Naxes
-* attribute). If "form" is zero, it should contain the coordinates at
-* the end of one of the axes of the ellipse. If "form" is one, it
-* should contain the semi-major and semi-minor axes of the ellipse.
-* point2
-* An array of double, with one element for each Frame axis (Naxes
-* attribute). If "form" is zero, it should contain the coordinates at
-* some other point on the circumference of the ellipse. If "form" is
-* one, element [1] is ignored and element [0] should contain the
-* angle from the second frame axis to the first ellipse axis, given in
-* radians, measured positive in the same sense as rotation from the
-* positive direction of the second Frame axis to the positive
-* direction of the first Frame axis. The "first" ellipse axis is
-* whichever of the semi-major or semi-minor axis is specified first in
-* the "point1" array.
-* unc
-* A pointer to a Region which specifies the uncertainty in the
-* supplied positions (all points on the boundary of the new Ellipse
-* being initialised are assumed to have the same uncertainty). A NULL
-* pointer can be supplied, in which case default uncertainties equal to
-* 1.0E-6 of the dimensions of the new Ellipse's bounding box are used.
-* If an uncertainty Region is supplied, it must be either a Box, a
-* Circle or an Ellipse, and its encapsulated Frame must be related
-* to the Frame supplied for parameter "frame" (i.e. astConvert
-* should be able to find a Mapping between them). Two positions
-* the "frame" Frame are considered to be co-incident if their
-* uncertainty Regions overlap. The centre of the supplied
-* uncertainty Region is immaterial since it will be re-centred on the
-* point being tested before use. A deep copy is taken of the supplied
-* Region.
-
-* Returned Value:
-* A pointer to the new Ellipse.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstEllipse *new; /* Pointer to new Ellipse */
- AstPointSet *pset; /* PointSet to pass to Region initialiser */
- double **ptr; /* Pointer to coords data in pset */
- const double *p1; /* Pointer to circumference point 1 */
- const double *p2; /* Pointer to circumference point 2 */
- int i; /* axis index */
- int nc; /* No. of axes */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitEllipseVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Check the supplied value for "form" is legal. */
- if( form != 0 && form != 1 && astOK ) {
- astError( AST__BADIN, "astInitEllipse(%s): The value supplied for "
- "parameter \"form\" (%d) is illegal - it should be 0 or 1 "
- "(programming error).", status, name, form );
- }
-
-/* Get the number of axis values required for each position. */
- nc = astGetNaxes( frame );
-
-/* Report an error if the Frame is not 2-dimensional. */
- if( nc != 2 ) {
- astError( AST__BADIN, "astInitEllipse(%s): The supplied %s has %d "
- "axes - ellipses must have exactly 2 axes.", status, name,
- astGetClass( frame ), nc );
- }
-
-/* If the ellipse is specified by axis lengths and orientation, find two
- points on the circumference (ends of the two ellipse axes). */
- if( form == 1 ) {
- p1 = astMalloc( sizeof( double )*2 );
- p2 = astMalloc( sizeof( double )*2 );
- if( astOK ) {
- astOffset2( frame, centre, *point2, point1[ 0 ], (double *) p1 );
- astOffset2( frame, centre, *point2 + AST__DPIBY2, point1[ 1 ],
- (double *) p2 );
- }
-
-/* If the ellipse is specified by two points on the circumference, use
- them. */
- } else {
- p1 = point1;
- p2 = point2;
- }
-
-/* Create a PointSet to hold the supplied values, and get points to the
- data arrays. */
- pset = astPointSet( 3, nc, " ", status );
- ptr = astGetPoints( pset );
-
-/* Copy the supplied coordinates into the PointSet, checking that no bad
- values have been supplied. */
- for( i = 0; astOK && i < nc; i++ ) {
- if( centre[ i ] == AST__BAD ) {
- astError( AST__BADIN, "astInitEllipse(%s): The value of axis %d is "
- "undefined at the ellipse centre.", status, name, i + 1 );
- }
- if( astOK && p1[ i ] == AST__BAD ) {
- astError( AST__BADIN, "astInitEllipse(%s): The value of axis %d is "
- "undefined at point 1 on the circumference of "
- "the ellipse.", status, name, i + 1 );
- }
- if( astOK && p2[ i ] == AST__BAD ) {
- astError( AST__BADIN, "astInitEllipse(%s): The value of axis %d is "
- "undefined at point 2 on the circumference of "
- "the ellipse.", status, name, i + 1 );
- }
- ptr[ i ][ 0 ] = centre[ i ];
- ptr[ i ][ 1 ] = p1[ i ];
- ptr[ i ][ 2 ] = p2[ i ];
- }
-
-/* Check pointers can be used safely. */
- if( astOK ) {
-
-/* Initialise a Region structure (the parent class) as the first component
- within the Ellipse structure, allocating memory if necessary. */
- new = (AstEllipse *) astInitRegion( mem, size, 0, (AstRegionVtab *) vtab,
- name, frame, pset, unc );
-
- if ( astOK ) {
-
-/* Initialise the Ellipse data. */
-/* ------------------------ */
- new->stale = 1;
-
-/* If an error occurred, clean up by deleting the new Ellipse. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Free resources. */
- pset = astAnnul( pset );
- if( form == 1 ) {
- p1 = astFree( (void *) p1 );
- p2 = astFree( (void *) p2 );
- }
-
-/* Return a pointer to the new Ellipse. */
- return new;
-}
-
-AstEllipse *astLoadEllipse_( void *mem, size_t size, AstEllipseVtab *vtab,
- const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadEllipse
-
-* Purpose:
-* Load a Ellipse.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "ellipse.h"
-* AstEllipse *astLoadEllipse( void *mem, size_t size, AstEllipseVtab *vtab,
-* const char *name, AstChannel *channel )
-
-* Class Membership:
-* Ellipse loader.
-
-* Description:
-* This function is provided to load a new Ellipse using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* Ellipse structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a Ellipse at the start of the memory
-* passed via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory into which the Ellipse is to be
-* loaded. This must be of sufficient size to accommodate the
-* Ellipse data (sizeof(Ellipse)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the Ellipse (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the Ellipse structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstEllipse) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new Ellipse. If this is NULL, a pointer
-* to the (static) virtual function table for the Ellipse class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "Ellipse" is used instead.
-
-* Returned Value:
-* A pointer to the new Ellipse.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstEllipse *new; /* Pointer to the new Ellipse */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this Ellipse. In this case the
- Ellipse belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstEllipse );
- vtab = &class_vtab;
- name = "Ellipse";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitEllipseVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built Ellipse. */
- new = astLoadRegion( mem, size, (AstRegionVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "Ellipse" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* There are no values to read. */
-/* ---------------------------- */
-
-/* Indicate that no cache intermediate results are yet available in the
- Ellipse structure */
- new->stale = 1;
-
-/* If an error occurred, clean up by deleting the new Ellipse. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new Ellipse pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-void astEllipsePars_( AstEllipse *this, double centre[2], double *a,
- double *b, double *angle, double p1[2], double p2[2],
- int *status ){
- if ( !astOK ) return;
- (**astMEMBER(this,Ellipse,EllipsePars))( this, centre, a, b,
- angle, p1, p2, status );
-}
-
-
-
-
-
-
diff --git a/ast-5.3-1/ellipse.h b/ast-5.3-1/ellipse.h
deleted file mode 100644
index d9857c0..0000000
--- a/ast-5.3-1/ellipse.h
+++ /dev/null
@@ -1,244 +0,0 @@
-#if !defined( ELLIPSE_INCLUDED ) /* Include this file only once */
-#define ELLIPSE_INCLUDED
-/*
-*+
-* Name:
-* ellipse.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the Ellipse class.
-
-* Invocation:
-* #include "ellipse.h"
-
-* Description:
-* This include file defines the interface to the Ellipse class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The Ellipse class implement a Region which represents a simple interval
-* on each axis of the encapsulated Frame
-
-* Inheritance:
-* The Ellipse class inherits from the Region class.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 7-SEP-2004 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "region.h" /* Coordinate regions (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* Ellipse structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstEllipse {
-
-/* Attributes inherited from the parent class. */
- AstRegion region; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- double *centre; /* Ellipse centre coords */
- double *point1; /* Point at end of primary axis */
- double angle; /* Orientation of primary axis */
- double a; /* Half-length of primary axis */
- double b; /* Half-length of secondary axis */
- double lbx; /* Lower x limit of mesh bounding box */
- double ubx; /* Upper y limit of mesh bounding box */
- double lby; /* Lower x limit of mesh bounding box */
- double uby; /* Upper y limit of mesh bounding box */
- int stale; /* Is cached information stale? */
-
-} AstEllipse;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstEllipseVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstRegionVtab region_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- void (* EllipsePars)( AstEllipse *, double[2], double *, double *, double *, double[2], double[2], int * );
-
-} AstEllipseVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstEllipseGlobals {
- AstEllipseVtab Class_Vtab;
- int Class_Init;
-} AstEllipseGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitEllipseGlobals_( AstEllipseGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Ellipse) /* Check class membership */
-astPROTO_ISA(Ellipse) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstEllipse *astEllipse_( void *, int, const double[2], const double[2], const double[2], AstRegion *, const char *, int *, ...);
-#else
-AstEllipse *astEllipseId_( void *, int, const double[2], const double[2], const double[2], AstRegion *, const char *, ... )__attribute__((format(printf,7,8)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstEllipse *astInitEllipse_( void *, size_t, int, AstEllipseVtab *,
- const char *, AstFrame *, int, const double[2],
- const double[2], const double[2], AstRegion *, int * );
-
-/* Vtab initialiser. */
-void astInitEllipseVtab_( AstEllipseVtab *, const char *, int * );
-
-/* Loader. */
-AstEllipse *astLoadEllipse_( void *, size_t, AstEllipseVtab *,
- const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-void astEllipsePars_( AstEllipse *, double[2], double *, double *, double *, double[2], double[2], int * );
-# if defined(astCLASS) /* Protected */
-AstRegion *astBestEllipse_( AstPointSet *, double *, AstRegion *, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckEllipse(this) astINVOKE_CHECK(Ellipse,this,0)
-#define astVerifyEllipse(this) astINVOKE_CHECK(Ellipse,this,1)
-
-/* Test class membership. */
-#define astIsAEllipse(this) astINVOKE_ISA(Ellipse,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astEllipse astINVOKE(F,astEllipse_)
-#else
-#define astEllipse astINVOKE(F,astEllipseId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitEllipse(mem,size,init,vtab,name,frame,form,p1,p2,p3,unc) \
-astINVOKE(O,astInitEllipse_(mem,size,init,vtab,name,frame,form,p1,p2,p3,unc,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitEllipseVtab(vtab,name) astINVOKE(V,astInitEllipseVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadEllipse(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadEllipse_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckEllipse to validate Ellipse pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-#define astEllipsePars(this,centre,a,b,angle,p1,p2) \
-astINVOKE(V,astEllipsePars_(astCheckEllipse(this),centre,a,b,angle,p1,p2,STATUS_PTR))
-
-#if defined(astCLASS) /* Protected */
-#define astBestEllipse(pset,cen,unc) astBestEllipse_(pset,cen,unc,STATUS_PTR)
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/ems.h b/ast-5.3-1/ems.h
deleted file mode 100644
index b12651d..0000000
--- a/ast-5.3-1/ems.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/*+
- * Name:
- * ems.h
-
- * Purpose:
- * EMS_ C interface header file.
-
- * Language:
- * Starlink ANSI C
-
- * Description:
- * This include file contains the function prototypes for all
- * EMS C interface routines and defines EMS__VERSN to be the major
- * version number
-
- * Authors:
- * PCTR: P.C.T. Rees (STARLINK)
- * AJC: A.J.Chipperfield (STARLINK)
- * TIMJ: Tim Jenness (JAC, Hawaii)
- * {enter_new_authors_here}
-
- * History:
- * 19-SEP-1990 (PCTR):
- * Original version.
- * 21-JUN-1991 (PCTR):
- * Made all given character strings type "const".
- * 5-OCT-1993 (PCTR):
- * Updated for Vn. 1.2-3
- * 28-SEP-1994 (AJC):
- * V1.4 Added ems_facer_c and ems_errno_c
- * 21-JUN-1995 (AJC):
- * V1.5 Added ems1_starf_c
- * 13-MAY-1999 (AJC):
- * Added the emsXxx form of name
- * and #define old_names = new_names
- * Removed ems_tune/gtune/show/_c
- * Added ems1_get_facility_error
- * 27-JUL-2001 (AJC):
- * Removed emsFmtx
- * Add emsExpnd, emsTune
- * 13-AUG-2001 (AJC):
- * Removed emsFioer
- * #define EMS__VERSN
- * 20-SEP-2001 (AJC):
- * Added emsSetnc and point ems_setc_c at it
- * 3-MAR-2006 (TIMJ):
- * Add emsSetu / emsSetp / emsSeti64
- * 30-JUL-2008 (PWD):
- * Added emsGtune.
- * 31-JUL-2008 (PWD):
- * Added emsStune and changed emsGtune to return the value as a result.
- * Marked emsTune as deprecated.
- * 10-SEP-2008 (TIMJ):
- * Remove fortran prototypes. Should not be in a public include file.
- * 16-SEP-2008 (TIMJ):
- * Remove 3 arg version of emsSetc
- * {enter_changes_here}
-
- * Bugs:
- * {note_any_bugs_here}
-
- *- */
-
-#ifndef EMS_DEFINED
-#define EMS_DEFINED
-
-/* ANSI types */
-#include <stdarg.h>
-#include <stddef.h>
-#include <inttypes.h>
-
-
-/* EMS Major Version */
-#define EMS__VERSN 2
-
-/* Function Prototypes: */
-void emsAnnul( int *status );
-
-void emsBegin( int *status );
-
-void emsEload( char *param,
- int *parlen,
- char *opstr,
- int *oplen,
- int *status );
-
-void emsEnd( int * status );
-
-void emsErrno( const char *token,
- int errval );
-
-void emsExpnd( const char *text,
- char *opstr,
- const int maxlen,
- int *oplen,
- int *status );
-
-void emsFacer( const char *token,
- int status );
-
-int emsGtune( const char *key,
- int *status );
-
-void emsLevel( int *level );
-
-void emsMark( void );
-
-void emsMload( const char *msg,
- const char *text,
- char *opstr,
- int *oplen,
- int *status );
-
-void emsRenew( void );
-
-void emsRep( const char *err,
- const char *text,
- int *status );
-
-void emsRlse( void );
-
-void emsSetc( const char *token,
- const char *cvalue );
-
-void emsSetnc( const char *token,
- const char *cvalue,
- int mxchar );
-
-void emsSetd( const char *token,
- double dvalue );
-
-void emsSeti( const char *token,
- int ivalue );
-
-void emsSeti64( const char *token,
- int64_t ivalue );
-
-void emsSetl( const char *token,
- int lvalue );
-
-void emsSetr( const char *token,
- float rvalue );
-
-void emsSetp( const char *token,
- void * pvalue );
-
-void emsSetu( const char *token,
- unsigned int ivalue );
-
-void emsStat( int *status );
-
-void emsSyser( const char *token,
- int systat );
-
-int emsStune( const char *key,
- const int value,
- int *status );
-
-/* Deprecated function. */
-void emsTune( const char *key,
- const int value,
- int *status );
-
-/* Internal Functions */
-/* Not for general use */
-int ems1Starf( const char *envar,
- const char *relpath,
- const char *acmode,
- char **filename,
- int *pathlen );
-
-void ems1_get_facility_error( unsigned int errcode,
- char **facility_name,
- char **error_ident,
- char **error_text );
-
-/* Required by MERS. Not to be used by anyone else */
-
-void ems1Rform( const char *text, const int maxlen, int *iposn, char *string, int *strlength );
-
-void ems1Gesc( const char *escchr, const char *string, int *iposn );
-
-void ems1Gnam( const char *string, int *iposn, char *name, int *namlen, int *status);
-
-#endif /* EMS_DEFINED */
diff --git a/ast-5.3-1/err.h b/ast-5.3-1/err.h
deleted file mode 100644
index 5c59a5a..0000000
--- a/ast-5.3-1/err.h
+++ /dev/null
@@ -1,66 +0,0 @@
-#if !defined( ERR_INCLUDED ) /* Include this file only once */
-#define ERR_INCLUDED
-/*
-*+
-* Name:
-* err.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the err module.
-
-* Invocation:
-* #include "err.h"
-
-* Description:
-* This include file defines the interface to the err module and
-* provides the type definitions, function prototypes and macros, etc.
-* needed to use this module.
-
-* Inheritance:
-* The err module is not a class and does not inherit.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (STARLINK)
-* {enter_new_authors_here}
-
-* History:
-* 6-NOV-1996 (DSB):
-* Original version.
-* {enter_changes_here}
-*-
-*/
-
-/* Function prototypes. */
-/* ==================== */
-#if defined(astCLASS) /* Protected */
-void astPutErr_( int, const char * );
-
-/* Function interfaces. */
-/* ==================== */
-#define astPutErr(status,message) astPutErr_(status,message)
-#endif
-
-#endif
diff --git a/ast-5.3-1/err_drama.c b/ast-5.3-1/err_drama.c
deleted file mode 100644
index 8395bfa..0000000
--- a/ast-5.3-1/err_drama.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
-* Name:
-* err_ems.c
-
-* Purpose:
-* Implement the "err" module for the DRAMA ERS error system.
-
-* Description:
-* This file implements an alternative "err" module for the AST
-* library. It is used to deliver error messages through the
-* DRAMA ERS error message system rather than by the default mechanism.
-
-* Copyright:
-* Copyright (C) 2008 Science and Technology Facilities Council.
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (UCLan)
-* TIMJ: Tim Jenness (JAC, Hawaii)
-* RFWS: R.F. Warren-Smith (STARLINK)
-* {enter_new_authors_here}
-
-* History:
-* 6-NOV-1996 (DSB):
-* Original version.
-* 16-SEP-2008 (TIMJ):
-* Use modern EMS interface
-* 13-NOV-2008 (TIMJ):
-* Modify for DRAMA
-* {enter_changes_here}
-*/
-
-#if HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-/* Module Macros. */
-/* ============== */
-/* Define the astCLASS macro (even although this is not a class
- implementation). This indicates to header files that they should
- make "protected" symbols available. */
-#define astCLASS
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "err.h" /* Interface to this module */
-
-/* Need to define these for DRAMA. Otherwise we have to include drama.h
- in the distribution as well */
-#if HAVE_STDARG_H
-# define DSTDARG_OK
-#endif
-#define ERS_STANDALONE
-#include "Ers.h" /* Interface to the Ers system */
-
-/* Function implementations. */
-/* ========================= */
-void astPutErr_( int status, const char *message ) {
-/*
-*+
-* Name:
-* astPutErr
-
-* Purpose:
-* Deliver an error message.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "err.h"
-* void astPutErr( int status, const char *message )
-
-* Description:
-* This function delivers an error message and (optionally) an
-* accompanying status value to the user. It may be re-implemented
-* in order to deliver error messages in different ways, according
-* to the environment in which the AST library is being used.
-
-* Parameters:
-* status
-* The error status value.
-* message
-* A pointer to a null-terminated character string containing
-* the error message to be delivered. This should not contain
-* newline characters.
-
-* Notes:
-* - This function is documented as "protected" but, in fact, is
-* publicly accessible so that it may be re-implemented as
-* required.
-*-
-*/
-
-/* Local Variables: */
- StatusType local_status; /* Local status value */
-
-/* Make a copy of the status value supplied. Then invoke ems_rep_c to
- report the error message through EMS and to associate the error
- status with it. Ignore any returned status value. */
- local_status = status;
- ErsRep( 0, &local_status, message );
-}
diff --git a/ast-5.3-1/err_ems.c b/ast-5.3-1/err_ems.c
deleted file mode 100644
index 7439175..0000000
--- a/ast-5.3-1/err_ems.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
-* Name:
-* err_ems.c
-
-* Purpose:
-* Implement the "err" module for the EMS error system.
-
-* Description:
-* This file implements an alternative "err" module for the AST
-* library. It is used to deliver error messages through the
-* Starlink EMS error message system (Starlink System Note 4)
-* rather than by the default mechanism.
-
-* Copyright:
-* Copyright (C) 2008 Science and Technology Facilities Council.
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (STARLINK)
-* {enter_new_authors_here}
-
-* History:
-* 6-NOV-1996 (DSB):
-* Original version.
-* 16-SEP-2008 (TIMJ):
-* Use modern EMS interface
-* {enter_changes_here}
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Define the astCLASS macro (even although this is not a class
- implementation). This indicates to header files that they should
- make "protected" symbols available. */
-#define astCLASS
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "err.h" /* Interface to this module */
-#include "ems.h" /* Interface to the EMS system */
-
-/* Function implementations. */
-/* ========================= */
-void astPutErr_( int status, const char *message ) {
-/*
-*+
-* Name:
-* astPutErr
-
-* Purpose:
-* Deliver an error message.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "err.h"
-* void astPutErr( int status, const char *message )
-
-* Description:
-* This function delivers an error message and (optionally) an
-* accompanying status value to the user. It may be re-implemented
-* in order to deliver error messages in different ways, according
-* to the environment in which the AST library is being used.
-
-* Parameters:
-* status
-* The error status value.
-* message
-* A pointer to a null-terminated character string containing
-* the error message to be delivered. This should not contain
-* newline characters.
-
-* Notes:
-* - This function is documented as "protected" but, in fact, is
-* publicly accessible so that it may be re-implemented as
-* required.
-*-
-*/
-
-/* Local Variables: */
- int local_status; /* Local status value */
-
-/* Make a copy of the status value supplied. Then invoke ems_rep_c to
- report the error message through EMS and to associate the error
- status with it. Ignore any returned status value. */
- local_status = status;
- emsRep( "AST_ERROR", message, &local_status );
-}
diff --git a/ast-5.3-1/err_null.c b/ast-5.3-1/err_null.c
deleted file mode 100644
index 868db8d..0000000
--- a/ast-5.3-1/err_null.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
-* Name:
-* err_null.c
-
-* Purpose:
-* Implement the default "err" module.
-
-* Description:
-* This file implements the default "err" module for the AST
-* library. It is used to deliver error messages if no alternative
-* error delivery mechanism is provided.
-*
-* To provide an alternative mechanism, re-implement this module
-* and link your program against the resulting library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (STARLINK)
-* {enter_new_authors_here}
-
-* History:
-* 6-NOV-1996 (DSB):
-* Original version.
-* {enter_changes_here}
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Define the astCLASS macro (even although this is not a class
- implementation). This indicates to header files that they should
- make "protected" symbols available. */
-#define astCLASS
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "err.h" /* Interface to this module */
-#include "error.h" /* Interface to the error module */
-
-/* C header files. */
-/* --------------- */
-#include <stdio.h>
-
-/* Function implementations. */
-/* ========================= */
-void astPutErr_( int status_value, const char *message ) {
-/*
-*+
-* Name:
-* astPutErr
-
-* Purpose:
-* Deliver an error message.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "err.h"
-* void astPutErr( int status_value, const char *message )
-
-* Description:
-* This function delivers an error message and (optionally) an
-* accompanying status value to the user. It may be re-implemented
-* in order to deliver error messages in different ways, according
-* to the environment in which the AST library is being used.
-
-* Parameters:
-* status_value
-* The error status value.
-* message
-* A pointer to a null-terminated character string containing
-* the error message to be delivered. This should not contain
-* newline characters.
-
-* Notes:
-* - This function is documented as "protected" but, in fact, is
-* publicly accessible so that it may be re-implemented as
-* required.
-*-
-*/
-
-
-/* This is the default implementation. Simply write the message to
- standard error with a newline appended. Ignore the status value. */
- int *status = astGetStatusPtr;
- (void) fprintf( stderr, "%s%s\n", astOK ? "!! " : "! ", message );
-}
diff --git a/ast-5.3-1/error.c b/ast-5.3-1/error.c
deleted file mode 100644
index 663340e..0000000
--- a/ast-5.3-1/error.c
+++ /dev/null
@@ -1,1022 +0,0 @@
-/*
-* Name:
-* error.c
-
-* Purpose:
-* Implement error handling functions.
-
-* Description:
-* This file implements the Error module which provides functions
-* for handling error conditions in the AST library. For a
-* description of the module and its interface, see the .h file of
-* the same name.
-*
-* Since its initial release, AST has used a global status variable
-* rather than adding an explicit status parameter to the argument
-* list of each AST function. This caused problems for the thread-safe
-* version of AST since each thread needs its own status value. Whilst
-* it would have been possible for each function to access a global
-* status value via the pthreads "thread speific data key" mechanism,
-* the huge number of status checks performed within AST caused this
-* option to be slow. Instead AST has been modified so that every
-* function has an explicit status pointer parameter. This though
-* causes problems in that we cannot change the public interface to
-* AST because doing so would break large amounts of external software.
-* To get round this, the macros that define the public interface to
-* AST have been modified so that they provide a status pointer
-* automatically to the function that is being invoked. This is how
-* the system works...
-*
-* All AST functions have an integer inherited status pointer parameter
-* called "status". This parameter is "hidden" in AST functions that
-* are invoked via macros (typically public and protected functions).
-* This means that whilst "int *status" appears explicitly at the end
-* of the function argument list (in both prototype and definition), it
-* is not included in the prologue documentation, and is not included
-* explicitly in the argument list when invoking the function. Instead,
-* the macro that is used to invoke the function adds in the required
-* status parameter to the function invocation.
-*
-* Macros which are invoked within AST (the protected interface) expand
-* to include ", status" at the end of the function parameter list. For
-* backward compatability with previous versions of AST, macros which
-* are invoked from outside AST (the public interface) expand to include
-* ", astGetStatusPtr" at the end of the function parameter list. The
-* astGetStatusPtr function returns a pointer to the interbal AST
-* status variable or to the external variable specified via astWatch.
-*
-* Parameter lists for functions that have variable argument lists
-* (such as astError) cannot be handled in this way, since macros cannot
-* have variable numbers of arguments. Instead, separate public and
-* protected implementations of such functions are provided within AST.
-* Protected implementations include an explicit, documented status
-* pointer parameter that must be given explicitly when invoking the
-* function. Public implementations do not have a status pointer
-* parameter. Instead they obtain the status pointer internally using
-* astGetStatusPtr.
-*
-* Private functions are called directly rather than via macros, and so
-* they have a documented status pointer parameter that should be
-* included explicitly in the parameter list when invoking the
-* function.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2008-2009 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 2-JAN-1996 (RFWS):
-* Original version.
-* 8-JAN-1996 (RFWS):
-* Tidied up.
-* 26-JAN-1996 (RFWS):
-* Incorporated changes to prologue style.
-* 14-JUN-1996 (RFWS):
-* Added astAt.
-* 20-JUN-1996 (RFWS):
-* Added astSetStatus.
-* 15-JUL-1996 (RFWS):
-* Sorted out the public interface.
-* 16-JUL-1996 (RFWS):
-* Added astWatch.
-* 18-MAR-1998 (RFWS):
-* Added notes about functions being available for writing
-* foreign language and graphics interfaces, etc.
-* 27-NOV-2002 (DSB):
-* Added suppression of error reporting using astReporting.
-* 11-MAR-2004 (DSB):
-* Add facility to astAt to allow astAt to be called from public
-* interface without private interface settings over-riding the
-* public interface settings.
-* 30-MAR-2005 (DSB):
-* Added facility to report deferred messages when reporting is
-* switched back on.
-* 16-FEB-2006 (DSB):
-* Improve efficiency by replacing the astOK_ function with a macro
-* which tests the value of status variable. The pointer which points
-* to the AST status variable are now global rather than static.
-* 19-SEP-2008 (DSB):
-* Big changes for the thread-safe version of AST.
-* 3-FEB-2009 (DSB):
-* Added astBacktrace.
-*/
-
-/* Define the astCLASS macro (even although this is not a class
- implementation) to obtain access to protected interfaces. */
-#define astCLASS
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "err.h" /* Interface to the err module */
-#include "error.h" /* Interface to this module */
-#include "globals.h" /* Thread-safe global data access */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Configuration results. */
-/* ---------------------- */
-#include <config.h>
-
-/* Select the appropriate memory management functions. These will be the
- system's malloc, free and realloc unless AST was configured with the
- "--with-starmem" option, in which case they will be the starmem
- malloc, free and realloc. */
-#ifdef HAVE_STAR_MEM_H
-# include <star/mem.h>
-# define MALLOC starMalloc
-# define FREE starFree
-# define REALLOC starRealloc
-#else
-# define MALLOC malloc
-# define FREE free
-# define REALLOC realloc
-#endif
-
-/* Include execinfo.h if the backtrace function is available */
-#if HAVE_EXECINFO_H
-#include <execinfo.h>
-#endif
-
-
-
-/* Module Variables. */
-/* ================= */
-
-/* Define macros for accessing all items of thread-safe global data
- used by this module. */
-#ifdef THREAD_SAFE
-
-#define reporting astGLOBAL(Error,Reporting)
-#define current_file astGLOBAL(Error,Current_File)
-#define current_routine astGLOBAL(Error,Current_Routine)
-#define current_line astGLOBAL(Error,Current_Line)
-#define foreign_set astGLOBAL(Error,Foreign_Set)
-#define message_stack astGLOBAL(Error,Message_Stack)
-#define mstack_size astGLOBAL(Error,Mstack_Size)
-
-/* Since the external astPutErr function may not be thread safe, we need
- to ensure that it cannot be invoked simultaneously from two different
- threads. So we lock a mutex before each call to astPutErr. */
-static pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
-
-#define INVOKE_ASTPUTERR( status, buff ) \
- ( pthread_mutex_lock( &mutex1 ), \
- astPutErr( (status), (buff) ), \
- (void) pthread_mutex_unlock( &mutex1 ) )
-
-/* Define the initial values for the global data for this module. */
-#define GLOBAL_inits \
- globals->Reporting = 1; \
- globals->Current_File = NULL; \
- globals->Current_Routine = NULL; \
- globals->Current_Line = 0; \
- globals->Foreign_Set = 0; \
- globals->Mstack_Size = 0; \
-
-/* Create the global initialisation function. */
-astMAKE_INITGLOBALS(Error)
-
-
-/* If thread safety is not needed, declare globals at static variables. */
-/* -------------------------------------------------------------------- */
-#else
-
-/* Status variable. */
-static int internal_status = 0; /* Internal error status */
-int *starlink_ast_status_ptr = &internal_status; /* Pointer to status variable */
-
-/* Reporting flag: delivery of message is supressed if zero. */
-static int reporting = 1;
-
-/* Error context. */
-static const char *current_file = NULL; /* Current file name pointer */
-static const char *current_routine = NULL; /* Current routine name pointer */
-static int current_line = 0; /* Current line number */
-static int foreign_set = 0; /* Have foreign values been set? */
-
-/* Un-reported message stack */
-static char *message_stack[ AST__ERROR_MSTACK_SIZE ];
-static int mstack_size = 0;
-
-/* If thread-safety is not needed, we can invoke the external astPutErr
- function directly. */
-#define INVOKE_ASTPUTERR( status, buff ) \
- astPutErr( (status), (buff) );
-
-#endif
-
-
-/* Function prototypes. */
-/* ==================== */
-static void EmptyStack( int, int * );
-
-/* Function implementations. */
-/* ========================= */
-void astAt_( const char *routine, const char *file, int line, int forn,
- int *status) {
-/*
-*+
-* Name:
-* astAt
-
-* Purpose:
-* Store a routine, file and line number context in case of error.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "error.h"
-* void astAt( const char *routine, const char *file, int line, int forn)
-
-* Description:
-* This function stores a pointer to two strings containing the
-* names of a routine and a file, together with an integer line
-* number. These values are retained for subsequent use in
-* reporting the context of any error that may arise.
-
-* Parameters:
-* routine
-* Pointer to a null terminated C string containing a routine
-* name (which should reside in static memory).
-* file
-* Pointer to a null terminated C string containing a file name
-* (which should reside in static memory).
-* line
-* The line number in the file.
-* for
-* Is this call being made from a foreign language interface?
-* If so any values supplied will take precedence of the values
-* set by the C interface.
-
-* Notes:
-* - This function returns without action (i.e. without changing
-* the stored values) if the global error status is set. It
-* performs no other error checking.
-* - Any (or all) of the arguments may be omitted by supplying a
-* NULL or zero value (as appropriate) and will then not be included
-* in any error report.
-* - This function is documented as protected because it should not
-* be invoked by external code. However, it is available via the
-* external C interface so that it may be used when writing (e.g.)
-* foreign language or graphics interfaces.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* If needed, get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* If the values refer to a foreign interface, or if no foreign values
- have yet been set, store the supplied values. */
- if( forn|| !foreign_set ) {
- current_routine = routine;
- current_file = file;
- current_line = line;
- }
-
-/* If the values relate to a foreign interface, set a flag which prevents
- local values set later replacing them. */
- foreign_set = forn;
-}
-
-void astBacktrace_( int *status ) {
-/*
-c+
-* Name:
-* astBacktrace
-
-* Purpose:
-* Display a backtrace on standard output.
-
-* Type:
-* Protected macro.
-
-* Synopsis:
-* #include "error.h"
-* astBacktrace;
-
-* Description:
-* This macro displays a set of messages on standard output that
-* give a backtrace of the caller. It can be useful for debugging AST
-* code in situations when it is not easy or possible to use a
-* debugger (for instance, when debugging JNIAST).
-
-* Notes:
-* - Only non-static function names are included in the backtrace.
-* - This function requires the GNU C library. When called, it will
-* just issue a warning if the GNU 'backtrace' function was not
-* available when AST was configured.
-c-
-*/
-#if HAVE_BACKTRACE
-
-#define MAX_ADDR 100
-
-/* Local Variables: */
- char **strings; /* Pointer to array of formated strings */
- char buf[ 120 ]; /* Output line buffer */
- int j; /* String index */
- int np; /* Number of used return addresses */
- void *buffer[ MAX_ADDR ]; /* Array of return addresses */
-
-/* Get the array of return addresses. */
- np = backtrace( buffer, MAX_ADDR );
-
-/* Convert them into strings. */
- strings = backtrace_symbols( buffer, np );
-
-/* If succesful, display them and then free the array. Note we skip the
- first one since that will refer to this function. */
- if( strings ) {
- INVOKE_ASTPUTERR( astStatus, " " );
- for( j = 1; j < np; j++ ) {
- sprintf( buf, "%d: %s", j, strings[j] );
- INVOKE_ASTPUTERR( astStatus, buf );
- }
- free( strings );
- INVOKE_ASTPUTERR( astStatus, " " );
-
-/* If not succesful, issue a warning. */
- } else {
- INVOKE_ASTPUTERR( astStatus, "Cannot convert backtrace addresses into formatted strings" );
- }
-
-#else
- INVOKE_ASTPUTERR( astStatus, "Backtrace functionality is not available "
- "on the current operating system." );
-#endif
-}
-
-void astClearStatus_( int *status ) {
-/*
-c++
-* Name:
-* astClearStatus
-
-* Purpose:
-* Clear the AST error status.
-
-* Type:
-* Public macro.
-
-* Synopsis:
-* #include "error.h"
-* void astClearStatus
-
-* Description:
-* This macro resets the AST error status to an OK value,
-* indicating that an error condition (if any) has been cleared.
-
-* Notes:
-* - If the AST error status is set to an error value (after an
-* error), most AST functions will not execute and will simply
-* return without action. Using astClearStatus will restore normal
-* behaviour.
-c--
-*/
-
-/* Empty the deferred error stack without displaying the messages on the
- stack. */
- EmptyStack( 0, status );
-
-/* Reset the error status value. */
- *status = 0;
-}
-
-static void EmptyStack( int display, int *status ) {
-/*
-* Name:
-* EmptyStack
-
-* Purpose:
-* Empty the stack of deferred error messages, optionally displaying
-* them.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "error.h"
-* void EmptyStack( int display, int *status )
-
-* Description:
-* This function removes all messages from the stack of deferred error
-* messages. If "display" is non-zero it reports them using astPutErr
-* before deleting them.
-
-* Parameters:
-* display
-* Report messages before deleting them?
-* status
-* Pointer to the integer holding the inherited status value.
-
-*/
-
-/* Local variables; */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- int i;
-
-/* If needed, get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Loop round all messages on the stack. */
- for( i = 0; i < mstack_size; i++ ) {
-
-/* Display the message if required. */
- if( display ) INVOKE_ASTPUTERR( astStatus, message_stack[ i ] );
-
-/* Free the memory used to hold the message. */
- FREE( message_stack[ i ] );
- message_stack[ i ] = NULL;
- }
-
-/* Reset the stack size to zero. */
- mstack_size = 0;
-
-}
-
-void astErrorPublic_( int status_value, const char *fmt, ... ) {
-/*
-*+
-* Name:
-* astError
-
-* Purpose:
-* Set the AST error status and report an error message.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "error.h"
-* void astError( int status_value, const char *fmt, ... )
-
-* Description:
-* This function sets the AST error status to a specified value and
-* reports an associated error message.
-
-* Parameters:
-* status_value
-* The new error status value to be set.
-* fmt
-* Pointer to a null-terminated character string containing the
-* format specification for the error message, in the same way
-* as for a call to the C "printf" family of functions.
-* ...
-* Additional optional arguments (as used by e.g. "printf")
-* which specify values which are to appear in the error
-* message.
-
-* Notes:
-* This function operates just like "printf", except that:
-* - The first argument is an error status.
-* - The return value is void.
-* - A newline is automatically appended to the error message
-* (there is no need to add one).
-* - This function is documented as protected because it should not
-* be invoked by external code. However, it is available via the
-* external C interface so that it may be used when writing (e.g.)
-* foreign language or graphics interfaces.
-*-
-
-* This is the public implementation of astError. It does not have an
- status pointer parameter, but instead obtains the status pointer
- explicitly using the astGetStatusPtr function. This is different to
- other public functions, which typically have a status pointer parameter
- that is supplied via a call to astGetStatusPtr within the associated
- interface macro. The benefit of doing it the usual way is that the
- public and protected implementations are the same, with the
- differences between public and protecte dinterfaces wrapped up in the
- associated interface macro. We cannot do this with this function
- because of the variale argument list. The prologue for the astError_
- function defines the interface for use internally within AST.
-
-*/
-
-/* Local Constants: */
-#define BUFF_LEN 1023 /* Max. length of an error message */
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- char buff[ BUFF_LEN + 1 ]; /* Message buffer */
- int *status; /* Pointer to inherited status value */
- int imess; /* Index into deferred message stack */
- int nc; /* Number of characters written */
- va_list args; /* Variable argument list pointer */
-
-/* Initialise the variable argument list pointer. */
- va_start( args, fmt );
-
-/* If needed, get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Get a pointer to the integer holding the inherited status value. */
- status = astGetStatusPtr;
-
-/* If this is the first report of an error (the global status has not
- previously been set) and error context information is available,
- then construct an error context message. */
- if ( astOK &&
- ( current_routine || current_file || current_line ) ) {
- nc = sprintf( buff, "AST: Error" );
- if ( current_routine ) {
- nc += sprintf( buff + nc, " in routine %s", current_routine );
- }
- if ( current_line ) {
- nc += sprintf( buff + nc, " at line %d", current_line );
- }
- if ( current_file ) {
- nc += sprintf( buff + nc, " in file %s", current_file );
- }
- nc += sprintf( buff + nc, "." );
-
-/* Deliver the error message unless reporting has been switched off using
- astReporting. In which case store them in a static array. */
- if( reporting ) {
- INVOKE_ASTPUTERR( status_value, buff );
- } else if( mstack_size < AST__ERROR_MSTACK_SIZE ){
- imess = mstack_size++;
- message_stack[ imess ] = MALLOC( strlen( buff ) + 1 );
- if( message_stack[ imess ] ) {
- strcpy( message_stack[ imess ], buff );
- }
- }
-
-/* Set the global status. */
- astSetStatus( status_value );
- }
-
-/* Write the error message supplied to the formatting buffer. */
- nc = vsprintf( buff, fmt, args );
-
-/* Tidy up the argument pointer. */
- va_end( args );
-
-/* Deliver the error message unless reporting has been switched off using
- astReporting. */
- if( reporting ) {
- INVOKE_ASTPUTERR( status_value, buff );
- } else if( mstack_size < AST__ERROR_MSTACK_SIZE ){
- imess = mstack_size++;
- message_stack[ imess ] = MALLOC( strlen( buff ) + 1 );
- if( message_stack[ imess ] ) {
- strcpy( message_stack[ imess ], buff );
- }
- }
-
-/* Set the error status value. */
- astSetStatus( status_value );
-
-/* Undefine macros local to this function. */
-#undef BUFF_LEN
-}
-
-void astError_( int status_value, const char *fmt, int *status, ... ) {
-/*
-*+
-* Name:
-* astError
-
-* Purpose:
-* Set the AST error status and report an error message.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "error.h"
-* void astError( int status_value, const char *fmt, int *status, ... )
-
-* Description:
-* This function sets the AST error status to a specified value and
-* reports an associated error message.
-
-* Parameters:
-* status_value
-* The error status value to be set.
-* fmt
-* Pointer to a null-terminated character string containing the
-* format specification for the error message, in the same way
-* as for a call to the C "printf" family of functions.
-* status
-* Pointer to the integer holding the inherited status value.
-* ...
-* Additional optional arguments (as used by e.g. "printf")
-* which specify values which are to appear in the error
-* message.
-
-* Notes:
-* This function operates just like "printf", except that:
-* - The first argument is an error status.
-* - The return value is void.
-* - A newline is automatically appended to the error message
-* (there is no need to add one).
-* - This function is documented as protected because it should not
-* be invoked by external code. However, it is available via the
-* external C interface so that it may be used when writing (e.g.)
-* foreign language or graphics interfaces.
-*-
-
-* This is the protected implementation of astError. It has a status
- pointer parameter that is not present in the public form. Different
- implementations for protected and public interfaces are required
- because of the variable argument list.
-
-*/
-
-/* Local Constants: */
-#define BUFF_LEN 1023 /* Max. length of an error message */
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- char buff[ BUFF_LEN + 1 ]; /* Message buffer */
- int imess; /* Index into deferred message stack */
- int nc; /* Number of characters written */
- va_list args; /* Variable argument list pointer */
-
-/* Initialise the variable argument list pointer. */
- va_start( args, status );
-
-/* If needed, get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* If this is the first report of an error (the global status has not
- previously been set) and error context information is available,
- then construct an error context message. */
- if ( astOK &&
- ( current_routine || current_file || current_line ) ) {
- nc = sprintf( buff, "AST: Error" );
- if ( current_routine ) {
- nc += sprintf( buff + nc, " in routine %s", current_routine );
- }
- if ( current_line ) {
- nc += sprintf( buff + nc, " at line %d", current_line );
- }
- if ( current_file ) {
- nc += sprintf( buff + nc, " in file %s", current_file );
- }
- nc += sprintf( buff + nc, "." );
-
-/* Deliver the error message unless reporting has been switched off using
- astReporting. In which case store them in a static array. */
- if( reporting ) {
- INVOKE_ASTPUTERR( status_value, buff );
- } else if( mstack_size < AST__ERROR_MSTACK_SIZE ){
- imess = mstack_size++;
- message_stack[ imess ] = MALLOC( strlen( buff ) + 1 );
- if( message_stack[ imess ] ) {
- strcpy( message_stack[ imess ], buff );
- }
- }
-
-/* Set the global status. */
- astSetStatus( status_value );
- }
-
-/* Write the error message supplied to the formatting buffer. */
- nc = vsprintf( buff, fmt, args );
-
-/* Tidy up the argument pointer. */
- va_end( args );
-
-/* Deliver the error message unless reporting has been switched off using
- astReporting. */
- if( reporting ) {
- INVOKE_ASTPUTERR( status_value, buff );
- } else if( mstack_size < AST__ERROR_MSTACK_SIZE ){
- imess = mstack_size++;
- message_stack[ imess ] = MALLOC( strlen( buff ) + 1 );
- if( message_stack[ imess ] ) {
- strcpy( message_stack[ imess ], buff );
- }
- }
-
-/* Set the error status value. */
- astSetStatus( status_value );
-
-/* Undefine macros local to this function. */
-#undef BUFF_LEN
-}
-
-int *astGetStatusPtr_(){
-/*
-*+
-* Name:
-* astGetStatusPtr
-
-* Purpose:
-* Return a pointer to the integer holding the inherited status value.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "error.h"
-* int *astGetStatusPtr;
-
-* Description:
-* This macro returns a pointer to the integer holding the inherited
-* status pointer. This will either be an internal global integer
-* (possibly stored as thread specific data), or an ineger specified
-* via the astWatch function.
-
-* Returned Value:
-* A pointer to the integer holding the inherited status value.
-
-*-
-*/
-
-/* The thread-safe version of AST stores the status pointer in thread
- specific data, using the key stored in the global variable
- "starlink_ast_status_key". */
-#if defined(THREAD_SAFE)
- astDECLARE_GLOBALS
- AstStatusBlock *sb;
-
- astGET_GLOBALS(NULL);
- sb = (AstStatusBlock *) pthread_getspecific(starlink_ast_status_key);
- return sb->status_ptr;
-
-/* The non thread-safe version of AST stores the status pointer in the
- global variable "starlink_ast_status_ptr". */
-#else
- return starlink_ast_status_ptr;
-#endif
-}
-
-/*
-c++
-* Name:
-* astOK
-
-* Purpose:
-* Test whether AST functions have been successful.
-
-* Type:
-* Public macro.
-
-* Synopsis:
-* #include "error.h"
-* int astOK
-
-* Description:
-* This macro returns a boolean value (0 or 1) to indicate if
-* preceding AST functions have completed successfully
-* (i.e. without setting the AST error status). If the error status
-* is set to an error value, a value of zero is returned, otherwise
-* the result is one.
-
-* Returned Value:
-* astOK
-* One if the AST error status is OK, otherwise zero.
-
-* Notes:
-* - If the AST error status is set to an error value (after an
-* error), most AST functions will not execute and will simply
-* return without action. To clear the error status and restore
-* normal behaviour, use astClearStatus.
-c--
-*/
-
-
-int astReporting_( int report, int *status ) {
-/*
-c+
-* Name:
-* astReporting
-
-* Purpose:
-* Controls the reporting of error messages.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "error.h"
-* int astReporting( int report )
-
-* Description:
-* Error messages supplied to astError will only be delivered to the
-* underlying error system if the "Reporting" flag is set to a
-* non-zero value. Setting this flag to zero suppresses the reporting
-* of error messages (the value of the AST error status however is
-* unaffected). Instead, the reports are saved in an internal message
-* stack. When reporting is switched back on again, any messages on this
-* stack of deferred messages will be reported (and the stack emptied)
-* if the AST error status is not astOK. Also the stack is emptied each
-* time astClearStatus is called (the stacked messages are not displayed
-* in this case).
-
-* Parameters:
-* report
-* The new value for the Reporting flag.
-
-* Returned Value:
-* The original value of the Reporting flag.
-
-* Notes:
-* - The Reporting flag is initially set to 1.
-c-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- int oldval; /* Original "reporting" value */
-
-/* If needed, get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Save the original reporting value, and then store the new value. */
- oldval = reporting;
- reporting = report;
-
-/* If we are now reporting errors, flush any messages on the error stack.
- This causes the messages to be displayed and the stack emptied. */
- if( reporting ) EmptyStack( 1, status );
-
-/* Return the original reporting value. */
- return oldval;
-}
-
-/*
-c++
-* Name:
-* astSetStatus
-
-* Purpose:
-* Set the AST error status to an explicit value.
-
-* Type:
-* Public function.
-
-* Synopsis:
-* #include "error.h"
-* void astSetStatus( int status_value )
-
-* Description:
-* This function sets the AST error status to the value supplied.
-* It does not cause any error message to be produced and should
-* not be used as part of normal error reporting. Its purpose is
-* simply to communicate to AST that an error has occurred in some
-* other item of software.
-*
-* For example, a source or sink function supplied as an argument
-* to astChannel or astFitsChan might use this to signal that an
-* input/output error has occurred. AST could then respond by
-* terminating the current read or write operation.
-
-* Parameters:
-* status_value
-* The new error status value to be set.
-
-* Notes:
-* - If the AST error status is set to an error value, most AST
-* functions will not execute and will simply return without
-* action. To clear the error status and restore normal behaviour,
-* use astClearStatus.
-c--
-*/
-
-/*
-c++
-* Name:
-* astStatus
-
-* Purpose:
-* Obtain the current AST error status value.
-
-* Type:
-* Public function.
-
-* Synopsis:
-* #include "error.h"
-* int astStatus
-
-* Description:
-* This function returns the current value of the AST error status.
-
-* Returned Value:
-* astStatus
-* The AST error status value.
-
-* Notes:
-* - If the AST error status is set to an error value (after an
-* error), most AST functions will not execute and will simply
-* return without action. To clear the error status and restore
-* normal behaviour, use astClearStatus.
-c--
-*/
-
-int *astWatch_( int *status_ptr ) {
-/*
-c++
-* Name:
-* astWatch
-
-* Purpose:
-* Identify a new error status variable for the AST library.
-
-* Type:
-* Public function.
-
-* Synopsis:
-* #include "error.h"
-* int *astWatch( int *status_ptr )
-
-* Description:
-* This function allows a new error status variable to be accessed
-* by the AST library when checking for and reporting error
-* conditions.
-*
-* By default, the library uses an internal integer error status
-* which is set to an error value if an error occurs. Use of
-* astWatch allows the internal error status to be replaced by an
-* integer variable of your choosing, so that the AST library can
-* share its error status directly with other code which uses the
-* same error detection convention.
-*
-* If an alternative error status variable is supplied, it is used
-* by all related AST functions and macros (e.g. astOK, astStatus
-* and astClearStatus).
-
-* Parameters:
-* status_ptr
-* Pointer to an int whose value is to be used subsequently as
-* the AST inherited status value. If a NULL pointer is supplied,
-* the AST library will revert to using its own internal error status.
-
-* Returned Value:
-* astWatch()
-* Address of the previous error status variable. This may later
-* be passed back to astWatch to restore the previous behaviour
-* of the library. (Note that on the first invocation of
-* astWatch the returned value will be the address of the
-* internal error status variable.)
-
-* Notes:
-* - This function is not available in the FORTRAN 77 interface to
-* the AST library.
-c--
-*/
-
-/* Local Variables: */
- int *result; /* Value to be returned */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-
-#if defined(THREAD_SAFE)
- AstStatusBlock *sb = NULL;
-#endif
-
-/* Ensure that the thread-specific status block has been created and
- ininitialised. */
- astGET_GLOBALS(NULL);
-
-#if defined(THREAD_SAFE)
- sb = (AstStatusBlock *) pthread_getspecific( starlink_ast_status_key );
- result = sb->status_ptr;
- sb->status_ptr = status_ptr ? status_ptr : &(sb->internal_status);
-#else
- result = starlink_ast_status_ptr;
- starlink_ast_status_ptr = status_ptr ? status_ptr : &internal_status;
-#endif
-
-/* Return the old address. */
- return result;
-}
-
-
diff --git a/ast-5.3-1/error.h b/ast-5.3-1/error.h
deleted file mode 100644
index 8e37f46..0000000
--- a/ast-5.3-1/error.h
+++ /dev/null
@@ -1,327 +0,0 @@
-#if !defined( ERROR_INCLUDED ) /* Include this file only once */
-#define ERROR_INCLUDED 1
-/*
-*+
-* Name:
-* error.h
-
-* Purpose:
-* Define the interface to the Error module.
-
-* Description:
-* This module defines functions which implement error handling and
-* reporting of error messages from within the AST library. A
-* simple public interface is included to allow the AST error
-* status to be tested and cleared after an error.
-*
-* Note that this module is not a class implementation, although it
-* resembles one.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2008 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: David S Berry (Starlink)
-* NG: Norman Gray (Starlink)
-
-* History:
-* 2-JAN-1996 (RFWS):
-* Original version.
-* 26-JAN-1996 (RFWS):
-* Added function interfaces.
-* 14-JUN-1996 (RFWS):
-* Added AST__FAC and astAt.
-* 20-JUN-1996 (RFWS):
-* Added astSetStatus.
-* 16-JUL-1996 (RFWS):
-* Added astWatch.
-* 18-MAR-1998 (RFWS):
-* Make interface available for writing foreign language and
-* graphics interfaces, etc.
-* 27-NOV-2002 (DSB):
-* Added astReporting.
-* 14-MAR-2005 (NG):
-* Added astAssert
-* 20-MAY-2005 (DSB):
-* Modified astAssert so that it does nothing if the AST error
-* status is already set, and also so that does nothing unless
-* the DEBUG macro is defined.
-* 16-FEB-2006 (DSB):
-* Improve efficiency by replacing the astOK_ function with a macro
-* which tests the value of status variable. The pointer which points
-* to the status variable are now global rather than static.
-* 1-MAR-2006 (DSB):
-* Remove astAssert.
-* 19-SEP-2008 (DSB)
-* Big changes for thread-safe version of AST.
-*-
-*/
-
-/* Suppress "operands are evaluated in unspecified order" warnings from
- the Intel icc compiler. These are caused by the astGetStatusPtr_
- function being called several times within each of the macros that
- form the public interface for AST. */
-#ifdef __INTEL_COMPILER
-#pragma warning(disable:981)
-#endif
-
-
-/* Include files. */
-/* ============== */
-#if defined(THREAD_SAFE)
-#include <pthread.h>
-#endif
-
-
-/* Macros. */
-/* ======= */
-#if defined(astCLASS) || defined(astFORTRAN77) /* Protected */
-
-/* Define a facility number that is unique to this library. The number here
- * is the facility code assigned to the AST library, but it doesn't have to
- * be this number -- it only has to be probably unique. If that code were
- * ever to change, then you can update this number if you feel it's tidier
- * that way. */
-#define AST__FAC (1521)
-
-/* Max number of messages which can be deferred when reporting is
- switched off. */
-#define AST__ERROR_MSTACK_SIZE 100
-
-#endif
-
-/* This macro expands to an invocation of a specified function, together
- with a call to astAt to record the file and line number at which the
- invocation occurs. These are included in public error reports. This is
- only done for invocations from outside of AST (i.e. public invocations).*/
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define astERROR_INVOKE(function) (function)
-#else
-#define astERROR_INVOKE(function) (astAt_(NULL,__FILE__,__LINE__,0,astGetStatusPtr),(function))
-#endif
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type definitions */
-/* ================ */
-
-/* Define a structure to hold information about an error context. */
-typedef struct AstErrorContext {
- int reporting; /* Value of error reporting flag at start of context */
- int ok; /* Was the status value OK at start of context? */
- int status; /* The status value at the start of the context */
-} AstErrorContext;
-
-#if defined(THREAD_SAFE) && ( defined(astCLASS) || defined(astFORTRAN77) )
-
-/* Define a structure holding all data items that are global within the
- error.c file. */
-typedef struct AstErrorGlobals {
-
-/* Reporting flag: delivery of message is supressed if zero. */
- int Reporting;
-
-/* Error context. */
- const char *Current_File; /* Current file name pointer */
- const char *Current_Routine; /* Current routine name pointer */
- int Current_Line; /* Current line number */
- int Foreign_Set; /* Have foreign values been set? */
-
-/* Un-reported message stack */
- char *Message_Stack[ AST__ERROR_MSTACK_SIZE ];
- int Mstack_Size;
-
-} AstErrorGlobals;
-
-/* Structure to hold the internal status variable, and the status
- pointer for a single thread. */
-typedef struct AstStatusBlock {
- int internal_status;
- int *status_ptr;
-} AstStatusBlock;
-
-#endif
-
-
-/* Function Macros. */
-/* ================ */
-
-#if defined(astCLASS)
-
-/*
-*+
-* Name:
-* astErrorBegin
-
-* Purpose:
-* Begin a new error reporting context.
-
-* Type:
-* Protected macro.
-
-* Synopsis:
-* #include "error.h"
-* astErrorBegin( AstErrorContext *context );
-
-* Description:
-* This macro starts a new error reporting context. It saves any
-* existing error status in the supplied ontext structure, and then
-* clears the status value. It also defers further error reporting.
-*
-* Each invocation of this macro should be followed (eventually) by a
-* matching invocation of astErrorEnd.
-
-* Parameters:
-* context
-* Pointer to a structure in which to to storeinformation about the
-* current error reporting context. This structure should be passed
-* unchanged to the corresponding invocation of astErrorEnd.
-
-*-
-*/
-#define astErrorBegin(context) {\
-\
-/* Save the original error status value. */ \
- (context)->status = astStatus; \
-\
-/* Save a flag indicating if the original error status was good. */ \
- (context)->ok = astOK; \
-\
-/* Switch off the immediate delivery of error messages, recording the \
- original value of the reporting flag. */ \
- (context)->reporting = astReporting( 0 ); \
-\
-/* Clear any existing error condition. */ \
- astClearStatus; \
-}
-
-
-/*
-*+
-* Name:
-* astErrorEnd
-
-* Purpose:
-* End an error reporting context.
-
-* Type:
-* Protected macro.
-
-* Synopsis:
-* #include "error.h"
-* astErrorEnd( AstErrorContext *context );
-
-* Description:
-* This macro ends an error reporting context started using
-* astErrorBegin.
-*
-* Each invocation of this macro should correspond to an earlier
-* invocation of astErrorBegin.
-
-* Parameters:
-* context
-* Pointer to a structure holding information returned by the
-* matching invocation of astErrorBegin.
-
-*-
-*/
-#define astErrorEnd(context) { \
-\
-/* If an error condition existed when astErrorBegin was called, and \
- another error has since occurred, clear the deferred messages \
- reported during the error context without displaying them. */ \
- if( !(context)->ok && !astOK ) astClearStatus; \
-\
-/* Put the error reporting flag back to its original value. This will \
- have the effect of displaying any remaining errors reported within \
- the error context (they will already have been cleared if an error \
- condition existed at the start of the context). */ \
- astReporting( (context)->reporting ); \
-\
-/* If an error condition existed at the start of the context, re-instate \
- the original status value. */ \
- if( !(context)->ok ) astSetStatus( (context)->status ); \
-}
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-
-int *astWatch_( int * );
-void astClearStatus_( int * );
-int *astGetStatusPtr_( void )__attribute__((pure));
-void astAt_( const char *, const char *, int, int, int * );
-
-#if defined(astCLASS) || defined(astFORTRAN77) /* Protected only */
-int astReporting_( int, int * );
-void astError_( int, const char *, int *, ... )__attribute__((format(printf,2,4)));
-void astBacktrace_( int * );
-#if defined(THREAD_SAFE)
-void astInitErrorGlobals_( AstErrorGlobals * );
-#endif
-#endif
-
-void astErrorPublic_( int, const char *, ... )__attribute__((format(printf,2,3)));
-
-
-
-/* Function interfaces. */
-/* ==================== */
-/* These wrap up the functions defined by this module to make them
- easier to use. */
-
-#define astWatch(status_ptr) astWatch_(status_ptr)
-#define astGetStatusPtr astGetStatusPtr_()
-#define astOK (astStatus==0)
-#define astSetStatus(status_value) (astStatus=(status_value))
-
-#if defined(astCLASS) /* Protected */
-
-#define astAt(routine,file,line) astAt_(routine,file,line,0,status)
-#define astClearStatus astClearStatus_(status)
-#define astStatus (*status)
-#define astError astError_
-#define astReporting(report) astReporting_(report,status)
-#define astBacktrace astBacktrace_(status)
-
-#elif defined(astFORTRAN77)
-
-#define astAt(routine,file,line) astAt_(routine,file,line,1,STATUS)
-#define astClearStatus astClearStatus_(status)
-#define astStatus (*status)
-#define astError astError_
-#define astReporting(report) astReporting_(report,status)
-
-#else
-
-#define astAt(routine,file,line) astAt_(routine,file,line,1,astGetStatusPtr)
-#define astClearStatus astClearStatus_(astGetStatusPtr)
-#define astStatus (*astGetStatusPtr)
-#define astError astErrorPublic_
-
-#endif
-
-#endif
diff --git a/ast-5.3-1/f77.h b/ast-5.3-1/f77.h
deleted file mode 100644
index f518cbc..0000000
--- a/ast-5.3-1/f77.h
+++ /dev/null
@@ -1,1038 +0,0 @@
-/*
-*+
-* Name:
-* f77.h and cnf.h
-
-* Purpose:
-* C - FORTRAN interace macros and prototypes
-
-* Language:
-* C (part ANSI, part not)
-
-* Type of Module:
-* C include file
-
-* Description:
-* For historical reasons two files, F77.h and cnf.h are required
-* but the have now been combined and for new code, only one is
-* necessary.
-*
-* This file defines the macros needed to write C functions that are
-* designed to be called from FORTRAN programs, and to do so in a
-* portable way. Arguments are normally passed by reference from a
-* FORTRAN program, and so the F77 macros arrange for a pointer to
-* all arguments to be available. This requires no work on most
-* machines, but will actually generate the pointers on a machine
-* that passes FORTRAN arguments by value.
-
-* Notes:
-* - Macros are provided to handle the conversion of logical data
-* values between the way that FORTRAN represents a value and the
-* way that C represents it.
-* - Macros are provided to convert variables between the FORTRAN and
-* C method of representing them. In most cases there is no
-* conversion required, the macros just arrange for a pointer to
-* the FORTRAN variable to be set appropriately. The possibility that
-* FORTRAN and C might use different ways of representing integer
-* and floating point values is considered remote, the macros are
-* really only there for completeness and to assist in the automatic
-* generation of C interfaces.
-* - For character variables the macros convert between
-* the FORTRAN method of representing them (fixed length, blank
-* filled strings) and the C method (variable length, null
-* terminated strings) using calls to the CNF functions.
-
-* Implementation Deficiencies:
-* - The macros support the K&R style of function definition, but
-* this file may not work with all K&R compilers as it contains
-* "#if defined" statements. These could be replaced with #ifdef's
-* if necessary. This has not been done as is would make the code
-* less clear and the need for support for K&R sytle definitions
-* should disappear as ANSI compilers become the default.
-
-* Copyright:
-* Copyright (C) 1991, 1993 Science & Engineering Research Council
-* Copyright (C) 2006 Particle Physics and Astronomy Research Council
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License as
-* published by the Free Software Foundation; either version 2 of
-* the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* PMA: Peter Allan (Starlink, RAL)
-* AJC: Alan Chipperfield (Starlink, RAL)
-* PWD: Peter W. Draper (JAC, Durham University)
-* {enter_new_authors_here}
-
-* History:
-* 23-MAY-1991 (PMA):
-* Original version.
-* 19-JUN-1991 (PMA):
-* Removed VMS versions of IM(EX)PORT_LOGICAL macros that tried
-* to convert data representations.
-* 24-JUN-1991 (PMA):
-* Changed the names of IMPORT macros to GENPTR.
-* Removed the EXPORT macros.
-* 27-JUN-1991 (PMA):
-* Modified DECstation specific stuff to allow use of the c89
-* compiler.
-* 8-JUL-1991 (PMA):
-* Added macros to call FORTRAN from C.
-* 16-OCT-1991 (PMA):
-* Remove type_ARRAY2 definitions.
-* Remove the length argument from CHARACTER_ARRAY and the
-* dimension specifier from GENPTR_type_ARRAY.
-* Add extra brackets to F77_ISFALSE and F77_ISTRUE.
-* 25-OCT-1991 (PMA):
-* Changed "if defined(sun4)" to "if defined(sun)"
-* 2-JUN-1992 (PMA):
-* Changed "if defined(mips)" to "if defined(ultrix)" to prevent
-* those definitions being used on a Silicon Graphics machine.
-* 11-JUN-1992 (PMA):
-* Changed "if defined(ultrix)" back to "if defined(mips)" so that
-* it still works on OSF/1 on a DECstation.
-* Add support for general non-ANSI compilers, but not basic K&R
-* ones.
-* 12-JUN-1992 (PMA):
-* Change declaration of dummy scalar arguments to be const
-* pointers. Change declaration of dummy array arguments to be
-* const pointers.
-* 5-JAN-1993 (PMA):
-* Changed "if defined(mips)" so that it will recognise a
-* DECstation running Ultrix or OSF/1, but not a Silicon Graphics
-* workstation.
-* Change the definition of F77_BYTE_TYPE to add "signed".
-* Redefine this on VMS where signed is invalid syntax.
-* Add new types of UBYTE and UWORD.
-* 8-JAN-1993 (PMA):
-* Fix bug in the definition of CHARACTER_RETURN_VALUE. There was
-* an extraneous space.
-* Add a macro F77_POINTER_TYPE and use it to define POINTER.
-* 13-JAN-1993 (PMA):
-* Start to add support for K&R function definitions. These are
-* done on a per machine basis.
-* 16-APR-1993 (PMA):
-* Change the definition of F77_POINTER_TYPE from int to unsigned
-* int.
-* 7-MAY-1993 (PMA):
-* Change from using a null comment as a token concatenation
-* operator to using the internal macro _f77_x on non-ANSI
-* systems.
-* 10-MAY-1993 (PMA):
-* Finish adding K&R support. This will form version 2.0 of F77.
-* 10-MAY-1993 (PMA):
-* Add support for Alpha OSF/1.
-* 9-JUL-1993 (PMA):
-* Add further POINTER macros: POINTER_ARRAY,
-* GENPTR_POINTER_ARRAY, DECLARE_POINTER, DECLARE_POINTER_ARRAY,
-* POINTER_ARG, POINTER_ARRAY_ARG, F77_POINTER_FUNCTION,
-* KR_POINTER_ARRAY.
-* 24-AUG-1993 (PMA):
-* Add const to the VMS definitions of CHARACTER and CHARACTER_ARRAY.
-* 3-NOV-1993 (PMA):
-* Remove K&R stuff to a separate file.
-* Released on Unix as version 2.0 of CNF.
-* 11-NOV-1993 (PMA):
-* Return to using the null comment to concatenate text on non-ANSI
-* systems as _f77_x caused problems with the c89 -common flag on
-* DECstations.
-* 23-JAN-1996 (AJC):
-* Add SUBROUTINE, type_FUNCTION, SUBROUTINE_ARG,
-* type_FUNCTION_ARG, GENPTR_SUBROUTINE and GENPTR_type_FUNCTION
-* required for passed subroutine and function name.
-* 29-JAN-1996 (AJC):
-* Add the dynamic CHARACTER_ macros
-* and CHARACTER_ARG_TYPE
-* 22-FEB-1996 (AJC):
-* Add CHARACTER_RETURN_ARG
-* 23-MAY-1996 (AJC):
-* Add DECLARE_CHARACTER_ARRAY_DYN
-* F77_CREATE_CHARACTER_ARRAY
-* F77_CHARACTER_ARG_TYPE
-* 14-JUN-1996 (AJC):
-* Add DECLARE_LOGICAL_ARRAY_DYN
-* F77_CREATE_LOGICAL_ARRAY
-* 21-JUN-1996 (AJC):
-* Add cast to _ARRAY_ARGs to allow multidimensional arrays
-* 17-MAR-1998 (AJC):
-* Add DECLARE, CREATE and FREE dynamic array macros for all types
-* Changed CREATE_CHARACTER_ARRAY and CREATE_LOGICAL_ARRAY to use
-* number of elements rather than dimensions.
-* Add IMPORT, EXPORT and ASSOC macros
-* 22-JUL-1998 (AJC):
-* Combined F77.h and cnf.h
-* 23-SEP-1998 (AJC):
-* Input strings for cnf -> const char *
-* Input int arrays for cnf -> const int *
-* 4-NOV-1998 (AJC):
-* Bring cnf prototypes in line with .c routines
-* 8-FEB-1999 (AJC):
-* Added cnf_mem stuff
-* 9-FEB-1999 (AJC):
-* Use cnf_cptr/fptr for IMPORT/EXPORT_POINTER
-* 16-FEB-1999 (AJC):
-* Added missing cnf_fptr prototype
-* 23-JUN-1999 (AJC):
-* Change cnf_name to cnfName
-* and add macros for cnf_name
-* 1-DEC-1999 (AJC):
-* Add define cnf_free
-* 7-JAN-2000 (AJC):
-* Correct omission of F77_ASSOC_UBYTE_ARRAY
-* Correct F77_EXPORT_UWORD_ARRAY
-* 21-JUN-2006 (PWD):
-* Changed to use a different return type for REAL functions. This
-* effects g77 under 64-bit, when the f2c bindings expect the return
-* value of a REAL function to be a double, not a float. Note this
-* file is now a branch of the CNF version (no starmem dependency).
-* 13-JUL-2007 (PWD):
-* Parameterise the type of Fortran character string lengths. Can
-* be long.
-* {enter_further_changes_here}
-*
-
-* Bugs:
-* {note_any_bugs_here}
-
-*-
-------------------------------------------------------------------------------
-*/
-#if !defined(CNF_MACROS)
-#define CNF_MACROS
-
-#include <stdlib.h>
-/* This initial sections defines values for all macros. These are the */
-/* values that are generally appropriate to an ANSI C compiler on Unix. */
-/* For macros that have different values on other systems, the macros */
-/* should be undefined and then redefined in the system specific sections. */
-/* At the end of this section, some macros are redefined if the compiler */
-/* is non-ANSI. */
-
-
-#if defined(__STDC__) || defined(VMS)
-#define CNF_CONST const
-#else
-#define CNF_CONST
-#endif
-
-/* ----- Macros common to calling C from FORTRAN and FORTRAN from C ---- */
-
-
-/* --- External Names --- */
-
-/* Macro to define the name of a Fortran routine or common block. This */
-/* ends in an underscore on many Unix systems. */
-
-#define F77_EXTERNAL_NAME(X) X ## _
-
-
-/* --- Logical Values --- */
-
-/* Define the values that are used to represent the logical values TRUE */
-/* and FALSE in Fortran. */
-
-#define F77_TRUE 1
-#define F77_FALSE 0
-
-/* Define macros that evaluate to C logical values, given a FORTRAN */
-/* logical value. */
-
-#define F77_ISTRUE(X) ( X )
-#define F77_ISFALSE(X) ( !( X ) )
-
-
-/* --- Common Blocks --- */
-
-/* Macros used in referring to FORTRAN common blocks. */
-
-#define F77_BLANK_COMMON _BLNK__
-#define F77_NAMED_COMMON(B) F77_EXTERNAL_NAME(B)
-
-
-
-/* ------------------ Calling C from FORTRAN --------------------------- */
-
-
-/* --- Data Types --- */
-
-/* Define macros for all the Fortran data types (except COMPLEX, which is */
-/* not handled by this package). */
-
-#define F77_INTEGER_TYPE int
-#define F77_REAL_TYPE float
-#define F77_REAL_FUNCTION_TYPE float
-#define F77_DOUBLE_TYPE double
-#define F77_LOGICAL_TYPE int
-#define F77_CHARACTER_TYPE char
-#define F77_BYTE_TYPE signed char
-#define F77_WORD_TYPE short int
-#define F77_UBYTE_TYPE unsigned char
-#define F77_UWORD_TYPE unsigned short int
-
-/* Define macros for the type of a CHARACTER and CHARACTER_ARRAY argument */
-#define F77_CHARACTER_ARG_TYPE char
-#define F77_CHARACTER_ARRAY_ARG_TYPE char
-
-/* Define a macro to use when passing arguments that STARLINK FORTRAN */
-/* treats as a pointer. From the point of view of C, this type should be */
-/* (void *), but it is declared as type unsigned int as we actually pass */
-/* an INTEGER from the FORTRAN routine. The distinction is important for */
-/* architectures where the size of an INTEGER is not the same as the size */
-/* of a pointer. */
-
-#define F77_POINTER_TYPE unsigned int
-
-
-/* --- Subroutine Names --- */
-
-/* This declares that the C function returns a value of void. */
-
-#define F77_SUBROUTINE(X) void F77_EXTERNAL_NAME(X)
-
-
-/* --- Function Names --- */
-
-/* Macros to define the types and names of functions that return values. */
-/* Due the the different ways that function return values could be */
-/* implemented, it is better not to use functions, but to stick to using */
-/* subroutines. */
-
-/* Character functions are implemented, but in a way that cannot be */
-/* guaranteed to be portable although it will work on VMS, SunOS, Ultrix */
-/* and DEC OSF/1. It would be better to return the character value as a */
-/* subroutine argument where possible, rather than use a character */
-/* function. */
-
-#define F77_INTEGER_FUNCTION(X) F77_INTEGER_TYPE F77_EXTERNAL_NAME(X)
-#define F77_REAL_FUNCTION(X) F77_REAL_FUNCTION_TYPE F77_EXTERNAL_NAME(X)
-#define F77_DOUBLE_FUNCTION(X) F77_DOUBLE_TYPE F77_EXTERNAL_NAME(X)
-#define F77_LOGICAL_FUNCTION(X) F77_LOGICAL_TYPE F77_EXTERNAL_NAME(X)
-#define F77_CHARACTER_FUNCTION(X) void F77_EXTERNAL_NAME(X)
-#define F77_BYTE_FUNCTION(X) F77_BYTE_TYPE F77_EXTERNAL_NAME(X)
-#define F77_WORD_FUNCTION(X) F77_WORD_TYPE F77_EXTERNAL_NAME(X)
-#define F77_UBYTE_FUNCTION(X) F77_UBYTE_TYPE F77_EXTERNAL_NAME(X)
-#define F77_UWORD_FUNCTION(X) F77_UWORD_TYPE F77_EXTERNAL_NAME(X)
-#define F77_POINTER_FUNCTION(X) F77_POINTER_TYPE F77_EXTERNAL_NAME(X)
-
-
-/* --- Character return value for a function --- */
-
-#define CHARACTER_RETURN_VALUE(X) CHARACTER(X) TRAIL(X)
-#define CHARACTER_RETURN_ARG(X) CHARACTER_ARG(X) TRAIL_ARG(X)
-
-/* --- Dummy Arguments --- */
-
-/* Macros for defining subroutine arguments. All these macros take a */
-/* single argument; the name of the parameter. On most systems, a numeric */
-/* argument is passed as a pointer. */
-
-#define INTEGER(X) F77_INTEGER_TYPE *CNF_CONST X
-#define REAL(X) F77_REAL_TYPE *CNF_CONST X
-#define DOUBLE(X) F77_DOUBLE_TYPE *CNF_CONST X
-#define LOGICAL(X) F77_LOGICAL_TYPE *CNF_CONST X
-#define BYTE(X) F77_BYTE_TYPE *CNF_CONST X
-#define WORD(X) F77_WORD_TYPE *CNF_CONST X
-#define UBYTE(X) F77_UBYTE_TYPE *CNF_CONST X
-#define UWORD(X) F77_UWORD_TYPE *CNF_CONST X
-
-/* Pointer arguments. Define a pointer type for passing pointer values */
-/* between subroutines. */
-
-#define POINTER(X) F77_POINTER_TYPE *CNF_CONST X
-
-/* EXTERNAL arguments. Define a passed subroutine or function name */
-#define SUBROUTINE(X) void (*X)()
-#define INTEGER_FUNCTION(X) F77_INTEGER_TYPE (*X)()
-#define REAL_FUNCTION(X) F77_REAL_TYPE (*X)()
-#define DOUBLE_FUNCTION(X) F77_DOUBLE_TYPE (*X)()
-#define LOGICAL_FUNCTION(X) F77_LOGICAL_TYPE (*X)()
-#define CHARACTER_FUNCTION(X) F77_CHARACTER_TYPE (*X)()
-#define BYTE_FUNCTION(X) F77_BYTE_TYPE (*X)()
-#define WORD_FUNCTION(X) F77_WORD_TYPE (*X)()
-#define UBYTE_FUNCTION(X) F77_UBYTE_TYPE (*X)()
-#define UWORD_FUNCTION(X) F77_UWORD_TYPE (*X)()
-#define POINTER_FUNCTION(X) F77_POINTER_TYPE (*X)()
-
-/* Array arguments. */
-
-#define INTEGER_ARRAY(X) F77_INTEGER_TYPE *CNF_CONST X
-#define REAL_ARRAY(X) F77_REAL_TYPE *CNF_CONST X
-#define DOUBLE_ARRAY(X) F77_DOUBLE_TYPE *CNF_CONST X
-#define LOGICAL_ARRAY(X) F77_LOGICAL_TYPE *CNF_CONST X
-#define BYTE_ARRAY(X) F77_BYTE_TYPE *CNF_CONST X
-#define WORD_ARRAY(X) F77_WORD_TYPE *CNF_CONST X
-#define UBYTE_ARRAY(X) F77_UBYTE_TYPE *CNF_CONST X
-#define UWORD_ARRAY(X) F77_UWORD_TYPE *CNF_CONST X
-
-#define POINTER_ARRAY(X) F77_POINTER_TYPE *CNF_CONST X
-
-/* Macros to handle character arguments. */
-
-/* Character arguments can be passed in many ways. The purpose of these */
-/* macros and the GENPTR_CHARACTER macro (defined in the next section) is */
-/* to generate a pointer to a character variable called ARG and an integer */
-/* ARG_length containing the length of ARG. If these two variables are */
-/* available directly from the argument list of the routine, then the */
-/* GENPTR_CHARACTER macro is null, otherwise it works on intermediate */
-/* variables. */
-
-#define CHARACTER(X) F77_CHARACTER_TYPE *CNF_CONST X
-#define TRAIL(X) ,int X ## _length
-#define CHARACTER_ARRAY(X) F77_CHARACTER_TYPE *CNF_CONST X
-
-
-/* --- Getting Pointers to Arguments --- */
-
-/* Macros that ensure that a pointer to each argument is available for the */
-/* programmer to use. Usually this means that these macros are null. On */
-/* VMS, a pointer to a character variable has to be generated. If a */
-/* particular machine were to pass arguments by reference, rather than by */
-/* value, then these macros would construct the appropriate pointers. */
-
-#define GENPTR_INTEGER(X)
-#define GENPTR_REAL(X)
-#define GENPTR_DOUBLE(X)
-#define GENPTR_CHARACTER(X)
-#define GENPTR_LOGICAL(X)
-#define GENPTR_BYTE(X)
-#define GENPTR_WORD(X)
-#define GENPTR_UBYTE(X)
-#define GENPTR_UWORD(X)
-#define GENPTR_POINTER(X)
-
-#define GENPTR_INTEGER_ARRAY(X)
-#define GENPTR_REAL_ARRAY(X)
-#define GENPTR_DOUBLE_ARRAY(X)
-#define GENPTR_CHARACTER_ARRAY(X)
-#define GENPTR_LOGICAL_ARRAY(X)
-#define GENPTR_BYTE_ARRAY(X)
-#define GENPTR_WORD_ARRAY(X)
-#define GENPTR_UBYTE_ARRAY(X)
-#define GENPTR_UWORD_ARRAY(X)
-#define GENPTR_POINTER_ARRAY(X)
-
-#define GENPTR_SUBROUTINE(X)
-#define GENPTR_INTEGER_FUNCTION(X)
-#define GENPTR_REAL_FUNCTION(X)
-#define GENPTR_DOUBLE_FUNCTION(X)
-#define GENPTR_CHARACTER_FUNCTION(X)
-#define GENPTR_LOGICAL_FUNCTION(X)
-#define GENPTR_BYTE_FUNCTION(X)
-#define GENPTR_WORD_FUNCTION(X)
-#define GENPTR_UBYTE_FUNCTION(X)
-#define GENPTR_UWORD_FUNCTION(X)
-#define GENPTR_POINTER_FUNCTION(X)
-
-
-
-/* ------------------ Calling FORTRAN from C --------------------------- */
-
-
-/* --- Declare variables --- */
-
-#define DECLARE_INTEGER(X) F77_INTEGER_TYPE X
-#define DECLARE_REAL(X) F77_REAL_TYPE X
-#define DECLARE_DOUBLE(X) F77_DOUBLE_TYPE X
-#define DECLARE_LOGICAL(X) F77_LOGICAL_TYPE X
-#define DECLARE_BYTE(X) F77_BYTE_TYPE X
-#define DECLARE_WORD(X) F77_WORD_TYPE X
-#define DECLARE_UBYTE(X) F77_UBYTE_TYPE X
-#define DECLARE_UWORD(X) F77_UWORD_TYPE X
-
-#define DECLARE_POINTER(X) F77_POINTER_TYPE X
-
-#define DECLARE_CHARACTER(X,L) F77_CHARACTER_TYPE X[L]; \
- const int X##_length = L
-
-
-/* --- Declare arrays --- */
-
-#define DECLARE_INTEGER_ARRAY(X,D) F77_INTEGER_TYPE X[D]
-#define DECLARE_REAL_ARRAY(X,D) F77_REAL_TYPE X[D]
-#define DECLARE_DOUBLE_ARRAY(X,D) F77_DOUBLE_TYPE X[D]
-#define DECLARE_LOGICAL_ARRAY(X,D) F77_LOGICAL_TYPE X[D]
-#define DECLARE_BYTE_ARRAY(X,D) F77_BYTE_TYPE X[D]
-#define DECLARE_WORD_ARRAY(X,D) F77_WORD_TYPE X[D]
-#define DECLARE_UBYTE_ARRAY(X,D) F77_UBYTE_TYPE X[D]
-#define DECLARE_UWORD_ARRAY(X,D) F77_UWORD_TYPE X[D]
-#define DECLARE_POINTER_ARRAY(X,D) F77_POINTER_TYPE X[D]
-#define DECLARE_CHARACTER_ARRAY(X,L,D) F77_CHARACTER_TYPE X[D][L]; \
- const int X##_length = L
-
-/* --- Declare and construct dynamic CHARACTER arguments --- */
-#define DECLARE_CHARACTER_DYN(X) F77_CHARACTER_TYPE *X;\
- int X##_length
-#define F77_CREATE_CHARACTER(X,L) X=cnfCref(L);\
- X##_length = L
-
-/* Declare Dynamic Fortran arrays */
-#define DECLARE_INTEGER_ARRAY_DYN(X) F77_INTEGER_TYPE *X
-#define DECLARE_REAL_ARRAY_DYN(X) F77_REAL_TYPE *X
-#define DECLARE_DOUBLE_ARRAY_DYN(X) F77_DOUBLE_TYPE *X
-#define DECLARE_LOGICAL_ARRAY_DYN(X) F77_LOGICAL_TYPE *X
-#define DECLARE_BYTE_ARRAY_DYN(X) F77_BYTE_TYPE *X
-#define DECLARE_WORD_ARRAY_DYN(X) F77_WORD_TYPE *X
-#define DECLARE_UBYTE_ARRAY_DYN(X) F77_UBYTE_TYPE *X
-#define DECLARE_UWORD_ARRAY_DYN(X) F77_UWORD_TYPE *X
-#define DECLARE_POINTER_ARRAY_DYN(X) F77_POINTER_TYPE *X
-#define DECLARE_CHARACTER_ARRAY_DYN(X) F77_CHARACTER_TYPE *X;\
- int X##_length
-
-/* Create arrays dynamic Fortran arrays for those types which require */
-/* Separate space for Fortran and C arrays */
-/* Character and logical are already defined */
-/* For most types there is nothing to do */
-#define F77_CREATE_CHARACTER_ARRAY(X,L,N) \
- {int f77dims[1];f77dims[0]=N;X=cnfCrefa(L,1,f77dims);X##_length=L;}
-#define F77_CREATE_CHARACTER_ARRAY_M(X,L,N,D) X=cnfCrefa(L,N,D);\
- X##_length = L
-#define F77_CREATE_LOGICAL_ARRAY(X,N) \
- {int f77dims[1];f77dims[0]=N;X=cnfCrela(1,f77dims);}
-#define F77_CREATE_LOGICAL_ARRAY_M(X,N,D) X=cnfCrela(N,D)
-#define F77_CREATE_INTEGER_ARRAY(X,N)
-#define F77_CREATE_REAL_ARRAY(X,N)
-#define F77_CREATE_DOUBLE_ARRAY(X,N)
-#define F77_CREATE_BYTE_ARRAY(X,N)
-#define F77_CREATE_UBYTE_ARRAY(X,N)
-#define F77_CREATE_WORD_ARRAY(X,N)
-#define F77_CREATE_UWORD_ARRAY(X,N)
-#define F77_CREATE_POINTER_ARRAY(X,N)\
- X=(F77_POINTER_TYPE *) malloc(N*sizeof(F77_POINTER_TYPE))
-
-/* Associate Fortran arrays with C arrays */
-/* These macros ensure that there is space somewhere for the Fortran */
-/* array. They are complemetary to the CREATE_type_ARRAY macros */
-#define F77_ASSOC_CHARACTER_ARRAY(F,C)
-#define F77_ASSOC_LOGICAL_ARRAY(F,C)
-#define F77_ASSOC_INTEGER_ARRAY(F,C) F=C
-#define F77_ASSOC_REAL_ARRAY(F,C) F=C
-#define F77_ASSOC_DOUBLE_ARRAY(F,C) F=C
-#define F77_ASSOC_BYTE_ARRAY(F,C) F=C
-#define F77_ASSOC_UBYTE_ARRAY(F,C) F=C
-#define F77_ASSOC_WORD_ARRAY(F,C) F=C
-#define F77_ASSOC_UWORD_ARRAY(F,C) F=C
-#define F77_ASSOC_POINTER_ARRAY(F,C)
-
-/* Free created dynamic arrays */
-/* Character and logical are already defined */
-/* For most types there is nothing to do */
-#define F77_FREE_INTEGER(X)
-#define F77_FREE_REAL(X)
-#define F77_FREE_DOUBLE(X)
-#define F77_FREE_BYTE(X)
-#define F77_FREE_UBYTE(X)
-#define F77_FREE_WORD(X)
-#define F77_FREE_UWORD(X)
-#define F77_FREE_POINTER(X) cnfFree((void *)X);
-#define F77_FREE_CHARACTER(X) cnfFreef( X )
-#define F77_FREE_LOGICAL(X) cnfFree( (char *)X )
-
-/* --- IMPORT and EXPORT of values --- */
-/* Export C variables to Fortran variables */
-#define F77_EXPORT_CHARACTER(C,F,L) cnfExprt(C,F,L)
-#define F77_EXPORT_DOUBLE(C,F) F=C
-#define F77_EXPORT_INTEGER(C,F) F=C
-#define F77_EXPORT_LOGICAL(C,F) F=C?F77_TRUE:F77_FALSE
-#define F77_EXPORT_REAL(C,F) F=C
-#define F77_EXPORT_BYTE(C,F) F=C
-#define F77_EXPORT_WORD(C,F) F=C
-#define F77_EXPORT_UBYTE(C,F) F=C
-#define F77_EXPORT_UWORD(C,F) F=C
-#define F77_EXPORT_POINTER(C,F) F=cnfFptr(C)
-#define F77_EXPORT_LOCATOR(C,F) cnfExpch(C,F,DAT__SZLOC)
-
-/* Export C arrays to Fortran */
-/* Arrays are assumed to be 1-d so just the number of elements is given */
-/* This may be OK for n-d arrays also */
-/* CHARACTER arrays may be represented in C as arrays of arrays of char or */
-/* as arrays of pointers to char (the _P variant) */
-#define F77_EXPORT_CHARACTER_ARRAY(C,LC,F,LF,N) \
- {int f77dims[1];f77dims[0]=N;cnfExprta(C,LC,F,LF,1,f77dims);}
-#define F77_EXPORT_CHARACTER_ARRAY_P(C,F,LF,N) \
- {int f77dims[1];f77dims[0]=N;cnfExprtap(C,F,LF,1,f77dims);}
-#define F77_EXPORT_DOUBLE_ARRAY(C,F,N) F=(F77_DOUBLE_TYPE *)C
-#define F77_EXPORT_INTEGER_ARRAY(C,F,N) F=(F77_INTEGER_TYPE *)C
-#define F77_EXPORT_LOGICAL_ARRAY(C,F,N) \
- {int f77dims[1];f77dims[0]=N;cnfExpla(C,F,1,f77dims);}
-#define F77_EXPORT_REAL_ARRAY(C,F,N) F=(F77_REAL_TYPE *)C
-#define F77_EXPORT_BYTE_ARRAY(C,F,N) F=(F77_BYTE_TYPE *)C
-#define F77_EXPORT_WORD_ARRAY(C,F,N) F=(F77_WORD_TYPE *)C
-#define F77_EXPORT_UBYTE_ARRAY(C,F,N) F=(F77_UBYTE_TYPE *)C
-#define F77_EXPORT_UWORD_ARRAY(C,F,N) F=(F77_UWORD_TYPE * )C
-#define F77_EXPORT_POINTER_ARRAY(C,F,N) \
- {int f77i;for (f77i=0;f77i<N;f77i++)F[f77i]=cnfFptr(C[f77i]);}
-#define F77_EXPORT_LOCATOR_ARRAY(C,F,N) \
- {int f77i;for (f77i=0;f77i<N;f77i++)cnfExpch(C,F,DAT__SZLOC);}
-
-/* Import Fortran variables to C */
-#define F77_IMPORT_CHARACTER(F,L,C) cnfImprt(F,L,C)
-#define F77_IMPORT_DOUBLE(F,C) C=F
-#define F77_IMPORT_INTEGER(F,C) C=F
-#define F77_IMPORT_LOGICAL(F,C) C=F77_ISTRUE(F)
-#define F77_IMPORT_REAL(F,C) C=F
-#define F77_IMPORT_BYTE(F,C) C=F
-#define F77_IMPORT_WORD(F,C) C=F
-#define F77_IMPORT_UBYTE(F,C) C=F
-#define F77_IMPORT_UWORD(F,C) C=F
-#define F77_IMPORT_POINTER(F,C) C=cnfCptr(F)
-#define F77_IMPORT_LOCATOR(F,C) cnfImpch(F,DAT__SZLOC,C)
-
-/* Import Fortran arrays to C */
-/* Arrays are assumed to be 1-d so just the number of elements is given */
-/* This may be OK for n-d arrays also */
-/* CHARACTER arrays may be represented in C as arrays of arrays of char or */
-/* as arrays of pointers to char (the _P variant) */
-#define F77_IMPORT_CHARACTER_ARRAY(F,LF,C,LC,N) \
- {int f77dims[1];f77dims[0]=N;cnfImprta(F,LF,C,LC,1,f77dims);}
-#define F77_IMPORT_CHARACTER_ARRAY_P(F,LF,C,LC,N) \
- {int f77dims[1];f77dims[0]=N;cnfImprtap(F,LF,C,LC,1,f77dims);}
-#define F77_IMPORT_DOUBLE_ARRAY(F,C,N)
-#define F77_IMPORT_INTEGER_ARRAY(F,C,N)
-#define F77_IMPORT_LOGICAL_ARRAY(F,C,N) \
- {int f77dims[1];f77dims[0]=N;cnfImpla(F,C,1,f77dims);}
-#define F77_IMPORT_REAL_ARRAY(F,C,N)
-#define F77_IMPORT_BYTE_ARRAY(F,C,N)
-#define F77_IMPORT_WORD_ARRAY(F,C,N)
-#define F77_IMPORT_UBYTE_ARRAY(F,C,N)
-#define F77_IMPORT_UWORD_ARRAY(F,C,N)
-#define F77_IMPORT_POINTER_ARRAY(F,C,N) \
- {int f77i;for (f77i=0;f77i<N;f77i++)C[f77i]=cnfCptr(F[f77i]);}
-#define F77_IMPORT_LOCATOR_ARRAY(F,C,N) \
- {int f77i;for (f77i=0;f77i<N;f77i++)cnfImpch(F,DAT__SZLOC,C);}
-
-/* --- Call a FORTRAN routine --- */
-
-#define F77_CALL(X) F77_EXTERNAL_NAME(X)
-
-
-/* --- Pass arguments to a FORTRAN routine --- */
-
-#define INTEGER_ARG(X) X
-#define REAL_ARG(X) X
-#define DOUBLE_ARG(X) X
-#define LOGICAL_ARG(X) X
-#define BYTE_ARG(X) X
-#define WORD_ARG(X) X
-#define UBYTE_ARG(X) X
-#define UWORD_ARG(X) X
-#define POINTER_ARG(X) X
-#define CHARACTER_ARG(X) X
-#define TRAIL_ARG(X) ,X##_length
-
-#define SUBROUTINE_ARG(X) X
-#define INTEGER_FUNCTION_ARG(X) X
-#define REAL_FUNCTION_ARG(X) X
-#define DOUBLE_FUNCTION_ARG(X) X
-#define LOGICAL_FUNCTION_ARG(X) X
-#define CHARACTER_FUNCTION_ARG(X) X
-#define BYTE_FUNCTION_ARG(X) X
-#define WORD_FUNCTION_ARG(X) X
-#define UBYTE_FUNCTION_ARG(X) X
-#define UWORD_FUNCTION_ARG(X) X
-#define POINTER_FUNCTION_ARG(X) X
-
-#define INTEGER_ARRAY_ARG(X) (F77_INTEGER_TYPE *)X
-#define REAL_ARRAY_ARG(X) (F77_REAL_TYPE *)X
-#define DOUBLE_ARRAY_ARG(X) (F77_DOUBLE_TYPE *)X
-#define LOGICAL_ARRAY_ARG(X) (F77_LOGICAL_TYPE *)X
-#define BYTE_ARRAY_ARG(X) (F77_BYTE_TYPE *)X
-#define WORD_ARRAY_ARG(X) (F77_WORD_TYPE *)X
-#define UBYTE_ARRAY_ARG(X) (F77_UBYTE_TYPE *)X
-#define UWORD_ARRAY_ARG(X) (F77_UWORD_TYPE *)X
-#define POINTER_ARRAY_ARG(X) (F77_POINTER_TYPE *)X
-#define CHARACTER_ARRAY_ARG(X) (F77_CHARACTER_ARRAY_ARG_TYPE *)X
-
-
-/* ------------------------ Non-ansi section ------------------------------ */
-
-/* The difference between ANSI and non-ANSI compilers, as far as macro */
-/* definition is concerned, is that non-ANSI compilers do not support the */
-/* token concatenation operator (##). To work around this, we use the fact */
-/* that the null comment is preprocessed to produce no characters at all */
-/* by our non-ANSI compilers. */
-/* This section does not deal with the fact that some non-ANSI compilers */
-/* cannot handle function prototypes. That is handled in the machine */
-/* specific sections. */
-
-#if !defined(__STDC__)
-
-/* --- External Name --- */
-
-/* Macro to define the name of a Fortran routine or common block. This */
-/* ends in an underscore on many Unix systems. */
-
-#undef F77_EXTERNAL_NAME
-#define F77_EXTERNAL_NAME(X) X/**/_
-
-
-/* --- Dummy Arguments --- */
-
-/* Macros to handle character dummy arguments. */
-
-#undef TRAIL
-#define TRAIL(X) ,int X/**/_length
-
-
-/* --- Declare variables --- */
-
-#undef DECLARE_CHARACTER
-#define DECLARE_CHARACTER(X,L) F77_CHARACTER_TYPE X[L]; \
- const int X/**/_length = L
-#undef DECLARE_CHARACTER_ARRAY
-#define DECLARE_CHARACTER_ARRAY(X,L,D) F77_CHARACTER_TYPE X[D][L]; \
- const int X/**/_length = L
-#undef DECLARE_CHARACTER_DYN
-#define DECLARE_CHARACTER_DYN(X) F77_CHARACTER_TYPE *X;\
- int X/**/_length
-#undef DECLARE_CHARACTER_ARRAY_DYN
-#define DECLARE_CHARACTER_ARRAY_DYN(X) F77_CHARACTER_TYPE *X;\
- int X/**/_length
-#undef F77_CREATE_CHARACTER
-#define F77_CREATE_CHARACTER(X,L) X=cnfCref(L);\
- X/**/_length = L
-#undef F77_CREATE_CHARACTER_ARRAY
-#define F77_CREATE_CHARACTER_ARRAY(X,L,N) \
- {int f77dims[1];f77dims[0]=N;X=cnfCrefa(L,1,f77dims);X/**/_length=L;}
-
-/* --- Pass arguments to a FORTRAN routine --- */
-
-#undef TRAIL_ARG
-#define TRAIL_ARG(X) ,X/**/_length
-
-
-#endif /* of non ANSI redefinitions */
-
-
-/* ----------------------------------------------------------------------- */
-
-/* The standard macros defined above are known to work with the following */
-/* systems: */
-
-/*--------
-| Sun |
----------*/
-
-/* On SunOS, the ANSI definitions work with the acc and gcc compilers. */
-/* The cc compiler uses the non ANSI definitions. It also needs the K&R */
-/* definitions in the file kr.h. */
-/* On Solaris, the standard definitions work with the cc compiler. */
-
-#if defined(sun)
-
-#if !defined(__STDC__)
-#if !defined(_F77_KR)
-#define _F77_KR
-#endif
-#endif
-
-#endif /* Sun */
-
-/* -------------------- System dependent sections ------------------------- */
-
-/*------------
-| VAX/VMS |
--------------*/
-
-/* Many macros need to be changed due to the way that VMS handles external */
-/* names, passes character arguments and handles logical values. */
-
-
-#if defined(VMS)
-
-/* --- Data Types --- */
-
-/* Redefine the macro for the byte data type as signed is not valid syntax */
-/* as the VMS compiler is not ANSI compliant. */
-
-#undef F77_BYTE_TYPE
-#define F77_BYTE_TYPE char
-
-
-/* --- External Names --- */
-
-/* Macro to define the name of a Fortran routine or common block. */
-/* Fortran and C routines names are the same on VMS. */
-
-#undef F77_EXTERNAL_NAME
-#define F77_EXTERNAL_NAME(X) X
-
-
-/* --- Dummy Arguments --- */
-
-/* Macros to handle character arguments. */
-/* Character string arguments are pointers to character string descriptors */
-/* and there are no trailing arguments. */
-
-#if( VMS != 0 )
-#include <descrip.h>
-#endif
-
-
-#undef F77_CHARACTER_ARG_TYPE
-#define F77_CHARACTER_ARG_TYPE struct dsc$descriptor_s
-#undef F77_CHARACTER_ARRAY_ARG_TYPE
-#define F77_CHARACTER_ARRAY_ARG_TYPE struct dsc$descriptor_a
-#undef CHARACTER
-#define CHARACTER(X) F77_CHARACTER_ARG_TYPE *CNF_CONST X/**/_arg
-#undef TRAIL
-#define TRAIL(X)
-#undef CHARACTER_ARRAY
-#define CHARACTER_ARRAY(X) F77_CHARACTER_ARRAY_ARG_TYPE *CNF_CONST X/**/_arg
-#undef GENPTR_CHARACTER
-#define GENPTR_CHARACTER(X) \
- F77_CHARACTER_TYPE *X = X/**/_arg->dsc$a_pointer; \
- int X/**/_length = X/**/_arg->dsc$w_length;
-#undef GENPTR_CHARACTER_ARRAY
-#define GENPTR_CHARACTER_ARRAY(X) GENPTR_CHARACTER(X)
-
-
-/* --- Logical Values --- */
-
-#undef F77_TRUE
-#define F77_TRUE -1
-#undef F77_ISTRUE
-#define F77_ISTRUE(X) ( (X)&1 )
-#undef F77_ISFALSE
-#define F77_ISFALSE(X) ( ! ( (X)&1 ) )
-
-
-/* --- Common Blocks --- */
-
-#undef F77_BLANK_COMMON
-#define F77_BLANK_COMMON $BLANK
-
-
-/* --- Declare Variables --- */
-
-#undef DECLARE_CHARACTER
-#define DECLARE_CHARACTER(X,L) \
- F77_CHARACTER_TYPE X[L]; const int X/**/_length = L; \
- F77_CHARACTER_ARG_TYPE X/**/_descr = \
- { L, DSC$K_DTYPE_T, DSC$K_CLASS_S, X }; \
- F77_CHARACTER_ARG_TYPE *X/**/_arg = &X/**/_descr
-#undef DECLARE_CHARACTER_ARRAY
-#define DECLARE_CHARACTER_ARRAY(X,L,D) \
- F77_CHARACTER_TYPE X[D][L]; const int X/**/_length = L; \
- F77_CHARACTER_ARRAY_ARG_TYPE X/**/_descr = \
- { L, DSC$K_DTYPE_T, DSC$K_CLASS_S, X }; \
- F77_CHARACTER_ARRAY_ARG_TYPE *X/**/_arg = &X/**/_descr
-
-
-/* --- The dynamic allocation of character arguments --- */
-#undef DECLARE_CHARACTER_DYN
-#define DECLARE_CHARACTER_DYN(X) int X/**/_length;\
- F77_CHARACTER_ARG_TYPE *X/**/_arg;\
- F77_CHARACTER_TYPE *X
-#undef DECLARE_CHARACTER_ARRAY_DYN
-#define DECLARE_CHARACTER_ARRAY_DYN(X) int X/**/_length;\
- F77_CHARACTER_ARRAY_ARG_TYPE *X/**/_arg;\
- F77_CHARACTER_TYPE *X
-#undef F77_CREATE_CHARACTER
-#define F77_CREATE_CHARACTER(X,L) X/**/_arg = cnfCref(L);\
- X = X/**/_arg->dsc$a_pointer; \
- X/**/_length = X/**/_arg->dsc$w_length
-#undef F77_CREATE_CHARACTER_ARRAY
-#define F77_CREATE_CHARACTER_ARRAY(X,L,N) \
- {int f77dims[1];f77dims[0]=N;X/**/_arg=cnfCrefa(L,1,f77dims);X/**/_length=L;}
-#define F77_CREATE_CHARACTER_ARRAY_M(X,L,N,D) X/**/_arg = cnfCrefa(L,N,D);\
- X = X/**/_arg->dsc$a_pointer; \
- X/**/_length = X/**/_arg->dsc$w_length
-#undef F77_FREE_CHARACTER
-#define F77_FREE_CHARACTER(X) cnfFreef( X/**/_arg )
-
-/* --- Pass arguments to a FORTRAN routine --- */
-
-#undef CHARACTER_ARG
-#define CHARACTER_ARG(X) X/**/_arg
-#undef CHARACTER_ARRAY_ARG
-#define CHARACTER_ARRAY_ARG(X) X/**/_arg
-#undef TRAIL_ARG
-#define TRAIL_ARG(X)
-
-#endif /* VMS */
-
-/* ----------------------------------------------------------------------- */
-
-/*--------------------------
-| DECstation Ultrix (cc) |
-| DECstation Ultrix (c89) |
-| DECstation OSF/1 |
-| Alpha OSF/1 |
- --------------------------*/
-
-/* Do this complicated set of definitions as a single #if cannot be */
-/* continued across multiple lines. */
-
-#if defined(mips) && defined(ultrix)
-#define _dec_unix 1
-#endif
-#if defined(__mips) && defined(__ultrix)
-#define _dec_unix 1
-#endif
-#if defined(__mips__) && defined(__osf__)
-#define _dec_unix 1
-#endif
-#if defined(__alpha) && defined(__osf__)
-#define _dec_unix 1
-#endif
-
-#if _dec_unix
-
-/* The macros for Ultrix are the same as the standard ones except for ones */
-/* dealing with logical values. The ANSI definitions work with the c89 */
-/* compiler, and the non ANSI definitions work with the cc compiler. */
-/* The same applies to DEC OSF/1, except that its cc compiler is ANSI */
-/* compliant. */
-
-
-/* --- Logical Values --- */
-
-/* Redefine macros that evaluate to a C logical value, given a FORTRAN */
-/* logical value. These definitions are only valid when used with the DEC */
-/* FORTRAN for RISC compiler. If you are using the earlier FORTRAN for */
-/* RISC compiler from MIPS, then these macros should be deleted. */
-
-#undef F77_TRUE
-#define F77_TRUE -1
-#undef F77_ISTRUE
-#define F77_ISTRUE(X) ( (X)&1 )
-#undef F77_ISFALSE
-#define F77_ISFALSE(X) ( ! ( (X)&1 ) )
-
-
-#endif /* DEC Unix */
-
-/*
-*+
-* Name:
-* cnf.h
-
-* Purpose:
-* Function prototypes for cnf routines
-
-* Language:
-* ANSI C
-
-* Type of Module:
-* C include file
-
-* Description:
-* These are the prototype definitions for the functions in the CNF
-* library. They are used used in mixing C and FORTRAN programs.
-
-* Copyright:
-* Copyright (C) 1991 Science & Engineering Research Council
-
-* Authors:
-* PMA: Peter Allan (Starlink, RAL)
-* AJC: Alan Chipperfield (Starlink, RAL)
-* {enter_new_authors_here}
-
-* History:
-* 23-MAY-1991 (PMA):
-* Original version.
-* 12-JAN-1996 (AJC):
-* Add cnf_cref and cnf_freef
-* 14-JUN-1996 (AJC):
-* Add cnf_crefa, imprta, exprta
-* crela, impla, expla
-* 18-JUL-1996 (AJC):
-* Add impch and expch
-* 17-MAR-1998 (AJC):
-* Add imprtap and exprtap
-* {enter_changes_here}
-
-* Bugs:
-* {note_any_bugs_here}
-
-*-
-------------------------------------------------------------------------------
-*/
-void *cnfCalloc( size_t, size_t );
-void cnfCopyf( const char *source_f, int source_len, char *dest_f,
- int dest_len );
-void *cnfCptr( F77_POINTER_TYPE );
-char *cnfCreat( int length );
-F77_CHARACTER_ARG_TYPE *cnfCref( int length );
-F77_CHARACTER_ARG_TYPE *cnfCrefa( int length, int ndims, const int *dims );
-char *cnfCreib( const char *source_f, int source_len );
-char *cnfCreim( const char *source_f, int source_len );
-F77_LOGICAL_TYPE *cnfCrela( int ndims, const int *dims );
-void cnfExpch( const char *source_c, char *dest_f, int nchars );
-void cnfExpla( const int *source_c, F77_LOGICAL_TYPE *dest_f, int ndims,
- const int *dims );
-void cnfExpn( const char *source_c, int max, char *dest_f, int dest_len );
-void cnfExprt( const char *source_c, char *dest_f, int dest_len );
-void cnfExprta( const char *source_c, int source_len, char *dest_f,
- int dest_len, int ndims, const int *dims );
-void cnfExprtap( char *const *source_c, char *dest_f, int dest_len,
- int ndims, const int *dims );
-F77_POINTER_TYPE cnfFptr( void *cpointer );
-void cnfFree( void * );
-void cnfFreef( F77_CHARACTER_ARG_TYPE *temp );
-void cnfImpb( const char *source_f, int source_len, char *dest_c );
-void cnfImpbn( const char *source_f, int source_len, int max, char *dest_c );
-void cnfImpch( const char *source_f, int nchars, char *dest_c );
-void cnfImpla( const F77_LOGICAL_TYPE *source_f, int *dest_c,
- int ndims, const int *dims );
-void cnfImpn( const char *source_f, int source_len, int max, char *dest_c );
-void cnfImprt( const char *source_f, int source_len, char *dest_c );
-void cnfImprta( const char *source_f, int source_len, char *dest_c,
- int dest_len, int ndims, const int *dims );
-void cnfImprtap( const char *source_f, int source_len, char *const *dest_c,
- int dest_len, int ndims, const int *dims );
-int cnfLenc( const char *source_c );
-int cnfLenf( const char *source_f, int source_len );
-void *cnfMalloc( size_t );
-int cnfRegp( void * );
-void cnfUregp( void * );
-#endif
-
-#ifndef CNF_OLD_DEFINED
-#define CNF_OLD_DEFINED
-/* Define old names to be new names */
-#define cnf_calloc cnfCalloc
-#define cnf_copyf cnfCopyf
-#define cnf_cptr cnfCptr
-#define cnf_creat cnfCreat
-#define cnf_cref cnfCref
-#define cnf_crefa cnfCrefa
-#define cnf_creib cnfCreib
-#define cnf_creim cnfCreim
-#define cnf_crela cnfCrela
-#define cnf_expch cnfExpch
-#define cnf_expla cnfExpla
-#define cnf_expn cnfExpn
-#define cnf_exprt cnfExprt
-#define cnf_exprta cnfExprta
-#define cnf_exprtap cnfExprtap
-#define cnf_fptr cnfFptr
-#define cnf_free cnfFree
-#define cnf_freef cnfFreef
-#define cnf_impb cnfImpb
-#define cnf_impbn cnfImpbn
-#define cnf_impch cnfImpch
-#define cnf_impla cnfImpla
-#define cnf_impn cnfImpn
-#define cnf_imprt cnfImprt
-#define cnf_imprta cnfImprta
-#define cnf_imprtap cnfImprtap
-#define cnf_lenc cnfLenc
-#define cnf_lenf cnfLenf
-#define cnf_malloc cnfMalloc
-#define cnf_regp cnfRegp
-#define cnf_uregp cnfUregp
-
-#endif
diff --git a/ast-5.3-1/f77.h.in b/ast-5.3-1/f77.h.in
deleted file mode 100644
index 712ca8d..0000000
--- a/ast-5.3-1/f77.h.in
+++ /dev/null
@@ -1,1038 +0,0 @@
-/*
-*+
-* Name:
-* f77.h and cnf.h
-
-* Purpose:
-* C - FORTRAN interace macros and prototypes
-
-* Language:
-* C (part ANSI, part not)
-
-* Type of Module:
-* C include file
-
-* Description:
-* For historical reasons two files, F77.h and cnf.h are required
-* but the have now been combined and for new code, only one is
-* necessary.
-*
-* This file defines the macros needed to write C functions that are
-* designed to be called from FORTRAN programs, and to do so in a
-* portable way. Arguments are normally passed by reference from a
-* FORTRAN program, and so the F77 macros arrange for a pointer to
-* all arguments to be available. This requires no work on most
-* machines, but will actually generate the pointers on a machine
-* that passes FORTRAN arguments by value.
-
-* Notes:
-* - Macros are provided to handle the conversion of logical data
-* values between the way that FORTRAN represents a value and the
-* way that C represents it.
-* - Macros are provided to convert variables between the FORTRAN and
-* C method of representing them. In most cases there is no
-* conversion required, the macros just arrange for a pointer to
-* the FORTRAN variable to be set appropriately. The possibility that
-* FORTRAN and C might use different ways of representing integer
-* and floating point values is considered remote, the macros are
-* really only there for completeness and to assist in the automatic
-* generation of C interfaces.
-* - For character variables the macros convert between
-* the FORTRAN method of representing them (fixed length, blank
-* filled strings) and the C method (variable length, null
-* terminated strings) using calls to the CNF functions.
-
-* Implementation Deficiencies:
-* - The macros support the K&R style of function definition, but
-* this file may not work with all K&R compilers as it contains
-* "#if defined" statements. These could be replaced with #ifdef's
-* if necessary. This has not been done as is would make the code
-* less clear and the need for support for K&R sytle definitions
-* should disappear as ANSI compilers become the default.
-
-* Copyright:
-* Copyright (C) 1991, 1993 Science & Engineering Research Council
-* Copyright (C) 2006 Particle Physics and Astronomy Research Council
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License as
-* published by the Free Software Foundation; either version 2 of
-* the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* PMA: Peter Allan (Starlink, RAL)
-* AJC: Alan Chipperfield (Starlink, RAL)
-* PWD: Peter W. Draper (JAC, Durham University)
-* {enter_new_authors_here}
-
-* History:
-* 23-MAY-1991 (PMA):
-* Original version.
-* 19-JUN-1991 (PMA):
-* Removed VMS versions of IM(EX)PORT_LOGICAL macros that tried
-* to convert data representations.
-* 24-JUN-1991 (PMA):
-* Changed the names of IMPORT macros to GENPTR.
-* Removed the EXPORT macros.
-* 27-JUN-1991 (PMA):
-* Modified DECstation specific stuff to allow use of the c89
-* compiler.
-* 8-JUL-1991 (PMA):
-* Added macros to call FORTRAN from C.
-* 16-OCT-1991 (PMA):
-* Remove type_ARRAY2 definitions.
-* Remove the length argument from CHARACTER_ARRAY and the
-* dimension specifier from GENPTR_type_ARRAY.
-* Add extra brackets to F77_ISFALSE and F77_ISTRUE.
-* 25-OCT-1991 (PMA):
-* Changed "if defined(sun4)" to "if defined(sun)"
-* 2-JUN-1992 (PMA):
-* Changed "if defined(mips)" to "if defined(ultrix)" to prevent
-* those definitions being used on a Silicon Graphics machine.
-* 11-JUN-1992 (PMA):
-* Changed "if defined(ultrix)" back to "if defined(mips)" so that
-* it still works on OSF/1 on a DECstation.
-* Add support for general non-ANSI compilers, but not basic K&R
-* ones.
-* 12-JUN-1992 (PMA):
-* Change declaration of dummy scalar arguments to be const
-* pointers. Change declaration of dummy array arguments to be
-* const pointers.
-* 5-JAN-1993 (PMA):
-* Changed "if defined(mips)" so that it will recognise a
-* DECstation running Ultrix or OSF/1, but not a Silicon Graphics
-* workstation.
-* Change the definition of F77_BYTE_TYPE to add "signed".
-* Redefine this on VMS where signed is invalid syntax.
-* Add new types of UBYTE and UWORD.
-* 8-JAN-1993 (PMA):
-* Fix bug in the definition of CHARACTER_RETURN_VALUE. There was
-* an extraneous space.
-* Add a macro F77_POINTER_TYPE and use it to define POINTER.
-* 13-JAN-1993 (PMA):
-* Start to add support for K&R function definitions. These are
-* done on a per machine basis.
-* 16-APR-1993 (PMA):
-* Change the definition of F77_POINTER_TYPE from int to unsigned
-* int.
-* 7-MAY-1993 (PMA):
-* Change from using a null comment as a token concatenation
-* operator to using the internal macro _f77_x on non-ANSI
-* systems.
-* 10-MAY-1993 (PMA):
-* Finish adding K&R support. This will form version 2.0 of F77.
-* 10-MAY-1993 (PMA):
-* Add support for Alpha OSF/1.
-* 9-JUL-1993 (PMA):
-* Add further POINTER macros: POINTER_ARRAY,
-* GENPTR_POINTER_ARRAY, DECLARE_POINTER, DECLARE_POINTER_ARRAY,
-* POINTER_ARG, POINTER_ARRAY_ARG, F77_POINTER_FUNCTION,
-* KR_POINTER_ARRAY.
-* 24-AUG-1993 (PMA):
-* Add const to the VMS definitions of CHARACTER and CHARACTER_ARRAY.
-* 3-NOV-1993 (PMA):
-* Remove K&R stuff to a separate file.
-* Released on Unix as version 2.0 of CNF.
-* 11-NOV-1993 (PMA):
-* Return to using the null comment to concatenate text on non-ANSI
-* systems as _f77_x caused problems with the c89 -common flag on
-* DECstations.
-* 23-JAN-1996 (AJC):
-* Add SUBROUTINE, type_FUNCTION, SUBROUTINE_ARG,
-* type_FUNCTION_ARG, GENPTR_SUBROUTINE and GENPTR_type_FUNCTION
-* required for passed subroutine and function name.
-* 29-JAN-1996 (AJC):
-* Add the dynamic CHARACTER_ macros
-* and CHARACTER_ARG_TYPE
-* 22-FEB-1996 (AJC):
-* Add CHARACTER_RETURN_ARG
-* 23-MAY-1996 (AJC):
-* Add DECLARE_CHARACTER_ARRAY_DYN
-* F77_CREATE_CHARACTER_ARRAY
-* F77_CHARACTER_ARG_TYPE
-* 14-JUN-1996 (AJC):
-* Add DECLARE_LOGICAL_ARRAY_DYN
-* F77_CREATE_LOGICAL_ARRAY
-* 21-JUN-1996 (AJC):
-* Add cast to _ARRAY_ARGs to allow multidimensional arrays
-* 17-MAR-1998 (AJC):
-* Add DECLARE, CREATE and FREE dynamic array macros for all types
-* Changed CREATE_CHARACTER_ARRAY and CREATE_LOGICAL_ARRAY to use
-* number of elements rather than dimensions.
-* Add IMPORT, EXPORT and ASSOC macros
-* 22-JUL-1998 (AJC):
-* Combined F77.h and cnf.h
-* 23-SEP-1998 (AJC):
-* Input strings for cnf -> const char *
-* Input int arrays for cnf -> const int *
-* 4-NOV-1998 (AJC):
-* Bring cnf prototypes in line with .c routines
-* 8-FEB-1999 (AJC):
-* Added cnf_mem stuff
-* 9-FEB-1999 (AJC):
-* Use cnf_cptr/fptr for IMPORT/EXPORT_POINTER
-* 16-FEB-1999 (AJC):
-* Added missing cnf_fptr prototype
-* 23-JUN-1999 (AJC):
-* Change cnf_name to cnfName
-* and add macros for cnf_name
-* 1-DEC-1999 (AJC):
-* Add define cnf_free
-* 7-JAN-2000 (AJC):
-* Correct omission of F77_ASSOC_UBYTE_ARRAY
-* Correct F77_EXPORT_UWORD_ARRAY
-* 21-JUN-2006 (PWD):
-* Changed to use a different return type for REAL functions. This
-* effects g77 under 64-bit, when the f2c bindings expect the return
-* value of a REAL function to be a double, not a float. Note this
-* file is now a branch of the CNF version (no starmem dependency).
-* 13-JUL-2007 (PWD):
-* Parameterise the type of Fortran character string lengths. Can
-* be long.
-* {enter_further_changes_here}
-*
-
-* Bugs:
-* {note_any_bugs_here}
-
-*-
-------------------------------------------------------------------------------
-*/
-#if !defined(CNF_MACROS)
-#define CNF_MACROS
-
-#include <stdlib.h>
-/* This initial sections defines values for all macros. These are the */
-/* values that are generally appropriate to an ANSI C compiler on Unix. */
-/* For macros that have different values on other systems, the macros */
-/* should be undefined and then redefined in the system specific sections. */
-/* At the end of this section, some macros are redefined if the compiler */
-/* is non-ANSI. */
-
-
-#if defined(__STDC__) || defined(VMS)
-#define CNF_CONST const
-#else
-#define CNF_CONST
-#endif
-
-/* ----- Macros common to calling C from FORTRAN and FORTRAN from C ---- */
-
-
-/* --- External Names --- */
-
-/* Macro to define the name of a Fortran routine or common block. This */
-/* ends in an underscore on many Unix systems. */
-
-#define F77_EXTERNAL_NAME(X) X ## _
-
-
-/* --- Logical Values --- */
-
-/* Define the values that are used to represent the logical values TRUE */
-/* and FALSE in Fortran. */
-
-#define F77_TRUE 1
-#define F77_FALSE 0
-
-/* Define macros that evaluate to C logical values, given a FORTRAN */
-/* logical value. */
-
-#define F77_ISTRUE(X) ( X )
-#define F77_ISFALSE(X) ( !( X ) )
-
-
-/* --- Common Blocks --- */
-
-/* Macros used in referring to FORTRAN common blocks. */
-
-#define F77_BLANK_COMMON _BLNK__
-#define F77_NAMED_COMMON(B) F77_EXTERNAL_NAME(B)
-
-
-
-/* ------------------ Calling C from FORTRAN --------------------------- */
-
-
-/* --- Data Types --- */
-
-/* Define macros for all the Fortran data types (except COMPLEX, which is */
-/* not handled by this package). */
-
-#define F77_INTEGER_TYPE int
-#define F77_REAL_TYPE float
-#define F77_REAL_FUNCTION_TYPE @REAL_FUNCTION_TYPE@
-#define F77_DOUBLE_TYPE double
-#define F77_LOGICAL_TYPE int
-#define F77_CHARACTER_TYPE char
-#define F77_BYTE_TYPE signed char
-#define F77_WORD_TYPE short int
-#define F77_UBYTE_TYPE unsigned char
-#define F77_UWORD_TYPE unsigned short int
-
-/* Define macros for the type of a CHARACTER and CHARACTER_ARRAY argument */
-#define F77_CHARACTER_ARG_TYPE char
-#define F77_CHARACTER_ARRAY_ARG_TYPE char
-
-/* Define a macro to use when passing arguments that STARLINK FORTRAN */
-/* treats as a pointer. From the point of view of C, this type should be */
-/* (void *), but it is declared as type unsigned int as we actually pass */
-/* an INTEGER from the FORTRAN routine. The distinction is important for */
-/* architectures where the size of an INTEGER is not the same as the size */
-/* of a pointer. */
-
-#define F77_POINTER_TYPE unsigned int
-
-
-/* --- Subroutine Names --- */
-
-/* This declares that the C function returns a value of void. */
-
-#define F77_SUBROUTINE(X) void F77_EXTERNAL_NAME(X)
-
-
-/* --- Function Names --- */
-
-/* Macros to define the types and names of functions that return values. */
-/* Due the the different ways that function return values could be */
-/* implemented, it is better not to use functions, but to stick to using */
-/* subroutines. */
-
-/* Character functions are implemented, but in a way that cannot be */
-/* guaranteed to be portable although it will work on VMS, SunOS, Ultrix */
-/* and DEC OSF/1. It would be better to return the character value as a */
-/* subroutine argument where possible, rather than use a character */
-/* function. */
-
-#define F77_INTEGER_FUNCTION(X) F77_INTEGER_TYPE F77_EXTERNAL_NAME(X)
-#define F77_REAL_FUNCTION(X) F77_REAL_FUNCTION_TYPE F77_EXTERNAL_NAME(X)
-#define F77_DOUBLE_FUNCTION(X) F77_DOUBLE_TYPE F77_EXTERNAL_NAME(X)
-#define F77_LOGICAL_FUNCTION(X) F77_LOGICAL_TYPE F77_EXTERNAL_NAME(X)
-#define F77_CHARACTER_FUNCTION(X) void F77_EXTERNAL_NAME(X)
-#define F77_BYTE_FUNCTION(X) F77_BYTE_TYPE F77_EXTERNAL_NAME(X)
-#define F77_WORD_FUNCTION(X) F77_WORD_TYPE F77_EXTERNAL_NAME(X)
-#define F77_UBYTE_FUNCTION(X) F77_UBYTE_TYPE F77_EXTERNAL_NAME(X)
-#define F77_UWORD_FUNCTION(X) F77_UWORD_TYPE F77_EXTERNAL_NAME(X)
-#define F77_POINTER_FUNCTION(X) F77_POINTER_TYPE F77_EXTERNAL_NAME(X)
-
-
-/* --- Character return value for a function --- */
-
-#define CHARACTER_RETURN_VALUE(X) CHARACTER(X) TRAIL(X)
-#define CHARACTER_RETURN_ARG(X) CHARACTER_ARG(X) TRAIL_ARG(X)
-
-/* --- Dummy Arguments --- */
-
-/* Macros for defining subroutine arguments. All these macros take a */
-/* single argument; the name of the parameter. On most systems, a numeric */
-/* argument is passed as a pointer. */
-
-#define INTEGER(X) F77_INTEGER_TYPE *CNF_CONST X
-#define REAL(X) F77_REAL_TYPE *CNF_CONST X
-#define DOUBLE(X) F77_DOUBLE_TYPE *CNF_CONST X
-#define LOGICAL(X) F77_LOGICAL_TYPE *CNF_CONST X
-#define BYTE(X) F77_BYTE_TYPE *CNF_CONST X
-#define WORD(X) F77_WORD_TYPE *CNF_CONST X
-#define UBYTE(X) F77_UBYTE_TYPE *CNF_CONST X
-#define UWORD(X) F77_UWORD_TYPE *CNF_CONST X
-
-/* Pointer arguments. Define a pointer type for passing pointer values */
-/* between subroutines. */
-
-#define POINTER(X) F77_POINTER_TYPE *CNF_CONST X
-
-/* EXTERNAL arguments. Define a passed subroutine or function name */
-#define SUBROUTINE(X) void (*X)()
-#define INTEGER_FUNCTION(X) F77_INTEGER_TYPE (*X)()
-#define REAL_FUNCTION(X) F77_REAL_TYPE (*X)()
-#define DOUBLE_FUNCTION(X) F77_DOUBLE_TYPE (*X)()
-#define LOGICAL_FUNCTION(X) F77_LOGICAL_TYPE (*X)()
-#define CHARACTER_FUNCTION(X) F77_CHARACTER_TYPE (*X)()
-#define BYTE_FUNCTION(X) F77_BYTE_TYPE (*X)()
-#define WORD_FUNCTION(X) F77_WORD_TYPE (*X)()
-#define UBYTE_FUNCTION(X) F77_UBYTE_TYPE (*X)()
-#define UWORD_FUNCTION(X) F77_UWORD_TYPE (*X)()
-#define POINTER_FUNCTION(X) F77_POINTER_TYPE (*X)()
-
-/* Array arguments. */
-
-#define INTEGER_ARRAY(X) F77_INTEGER_TYPE *CNF_CONST X
-#define REAL_ARRAY(X) F77_REAL_TYPE *CNF_CONST X
-#define DOUBLE_ARRAY(X) F77_DOUBLE_TYPE *CNF_CONST X
-#define LOGICAL_ARRAY(X) F77_LOGICAL_TYPE *CNF_CONST X
-#define BYTE_ARRAY(X) F77_BYTE_TYPE *CNF_CONST X
-#define WORD_ARRAY(X) F77_WORD_TYPE *CNF_CONST X
-#define UBYTE_ARRAY(X) F77_UBYTE_TYPE *CNF_CONST X
-#define UWORD_ARRAY(X) F77_UWORD_TYPE *CNF_CONST X
-
-#define POINTER_ARRAY(X) F77_POINTER_TYPE *CNF_CONST X
-
-/* Macros to handle character arguments. */
-
-/* Character arguments can be passed in many ways. The purpose of these */
-/* macros and the GENPTR_CHARACTER macro (defined in the next section) is */
-/* to generate a pointer to a character variable called ARG and an integer */
-/* ARG_length containing the length of ARG. If these two variables are */
-/* available directly from the argument list of the routine, then the */
-/* GENPTR_CHARACTER macro is null, otherwise it works on intermediate */
-/* variables. */
-
-#define CHARACTER(X) F77_CHARACTER_TYPE *CNF_CONST X
-#define TRAIL(X) , at TRAIL_TYPE@ X ## _length
-#define CHARACTER_ARRAY(X) F77_CHARACTER_TYPE *CNF_CONST X
-
-
-/* --- Getting Pointers to Arguments --- */
-
-/* Macros that ensure that a pointer to each argument is available for the */
-/* programmer to use. Usually this means that these macros are null. On */
-/* VMS, a pointer to a character variable has to be generated. If a */
-/* particular machine were to pass arguments by reference, rather than by */
-/* value, then these macros would construct the appropriate pointers. */
-
-#define GENPTR_INTEGER(X)
-#define GENPTR_REAL(X)
-#define GENPTR_DOUBLE(X)
-#define GENPTR_CHARACTER(X)
-#define GENPTR_LOGICAL(X)
-#define GENPTR_BYTE(X)
-#define GENPTR_WORD(X)
-#define GENPTR_UBYTE(X)
-#define GENPTR_UWORD(X)
-#define GENPTR_POINTER(X)
-
-#define GENPTR_INTEGER_ARRAY(X)
-#define GENPTR_REAL_ARRAY(X)
-#define GENPTR_DOUBLE_ARRAY(X)
-#define GENPTR_CHARACTER_ARRAY(X)
-#define GENPTR_LOGICAL_ARRAY(X)
-#define GENPTR_BYTE_ARRAY(X)
-#define GENPTR_WORD_ARRAY(X)
-#define GENPTR_UBYTE_ARRAY(X)
-#define GENPTR_UWORD_ARRAY(X)
-#define GENPTR_POINTER_ARRAY(X)
-
-#define GENPTR_SUBROUTINE(X)
-#define GENPTR_INTEGER_FUNCTION(X)
-#define GENPTR_REAL_FUNCTION(X)
-#define GENPTR_DOUBLE_FUNCTION(X)
-#define GENPTR_CHARACTER_FUNCTION(X)
-#define GENPTR_LOGICAL_FUNCTION(X)
-#define GENPTR_BYTE_FUNCTION(X)
-#define GENPTR_WORD_FUNCTION(X)
-#define GENPTR_UBYTE_FUNCTION(X)
-#define GENPTR_UWORD_FUNCTION(X)
-#define GENPTR_POINTER_FUNCTION(X)
-
-
-
-/* ------------------ Calling FORTRAN from C --------------------------- */
-
-
-/* --- Declare variables --- */
-
-#define DECLARE_INTEGER(X) F77_INTEGER_TYPE X
-#define DECLARE_REAL(X) F77_REAL_TYPE X
-#define DECLARE_DOUBLE(X) F77_DOUBLE_TYPE X
-#define DECLARE_LOGICAL(X) F77_LOGICAL_TYPE X
-#define DECLARE_BYTE(X) F77_BYTE_TYPE X
-#define DECLARE_WORD(X) F77_WORD_TYPE X
-#define DECLARE_UBYTE(X) F77_UBYTE_TYPE X
-#define DECLARE_UWORD(X) F77_UWORD_TYPE X
-
-#define DECLARE_POINTER(X) F77_POINTER_TYPE X
-
-#define DECLARE_CHARACTER(X,L) F77_CHARACTER_TYPE X[L]; \
- const int X##_length = L
-
-
-/* --- Declare arrays --- */
-
-#define DECLARE_INTEGER_ARRAY(X,D) F77_INTEGER_TYPE X[D]
-#define DECLARE_REAL_ARRAY(X,D) F77_REAL_TYPE X[D]
-#define DECLARE_DOUBLE_ARRAY(X,D) F77_DOUBLE_TYPE X[D]
-#define DECLARE_LOGICAL_ARRAY(X,D) F77_LOGICAL_TYPE X[D]
-#define DECLARE_BYTE_ARRAY(X,D) F77_BYTE_TYPE X[D]
-#define DECLARE_WORD_ARRAY(X,D) F77_WORD_TYPE X[D]
-#define DECLARE_UBYTE_ARRAY(X,D) F77_UBYTE_TYPE X[D]
-#define DECLARE_UWORD_ARRAY(X,D) F77_UWORD_TYPE X[D]
-#define DECLARE_POINTER_ARRAY(X,D) F77_POINTER_TYPE X[D]
-#define DECLARE_CHARACTER_ARRAY(X,L,D) F77_CHARACTER_TYPE X[D][L]; \
- const int X##_length = L
-
-/* --- Declare and construct dynamic CHARACTER arguments --- */
-#define DECLARE_CHARACTER_DYN(X) F77_CHARACTER_TYPE *X;\
- int X##_length
-#define F77_CREATE_CHARACTER(X,L) X=cnfCref(L);\
- X##_length = L
-
-/* Declare Dynamic Fortran arrays */
-#define DECLARE_INTEGER_ARRAY_DYN(X) F77_INTEGER_TYPE *X
-#define DECLARE_REAL_ARRAY_DYN(X) F77_REAL_TYPE *X
-#define DECLARE_DOUBLE_ARRAY_DYN(X) F77_DOUBLE_TYPE *X
-#define DECLARE_LOGICAL_ARRAY_DYN(X) F77_LOGICAL_TYPE *X
-#define DECLARE_BYTE_ARRAY_DYN(X) F77_BYTE_TYPE *X
-#define DECLARE_WORD_ARRAY_DYN(X) F77_WORD_TYPE *X
-#define DECLARE_UBYTE_ARRAY_DYN(X) F77_UBYTE_TYPE *X
-#define DECLARE_UWORD_ARRAY_DYN(X) F77_UWORD_TYPE *X
-#define DECLARE_POINTER_ARRAY_DYN(X) F77_POINTER_TYPE *X
-#define DECLARE_CHARACTER_ARRAY_DYN(X) F77_CHARACTER_TYPE *X;\
- int X##_length
-
-/* Create arrays dynamic Fortran arrays for those types which require */
-/* Separate space for Fortran and C arrays */
-/* Character and logical are already defined */
-/* For most types there is nothing to do */
-#define F77_CREATE_CHARACTER_ARRAY(X,L,N) \
- {int f77dims[1];f77dims[0]=N;X=cnfCrefa(L,1,f77dims);X##_length=L;}
-#define F77_CREATE_CHARACTER_ARRAY_M(X,L,N,D) X=cnfCrefa(L,N,D);\
- X##_length = L
-#define F77_CREATE_LOGICAL_ARRAY(X,N) \
- {int f77dims[1];f77dims[0]=N;X=cnfCrela(1,f77dims);}
-#define F77_CREATE_LOGICAL_ARRAY_M(X,N,D) X=cnfCrela(N,D)
-#define F77_CREATE_INTEGER_ARRAY(X,N)
-#define F77_CREATE_REAL_ARRAY(X,N)
-#define F77_CREATE_DOUBLE_ARRAY(X,N)
-#define F77_CREATE_BYTE_ARRAY(X,N)
-#define F77_CREATE_UBYTE_ARRAY(X,N)
-#define F77_CREATE_WORD_ARRAY(X,N)
-#define F77_CREATE_UWORD_ARRAY(X,N)
-#define F77_CREATE_POINTER_ARRAY(X,N)\
- X=(F77_POINTER_TYPE *) malloc(N*sizeof(F77_POINTER_TYPE))
-
-/* Associate Fortran arrays with C arrays */
-/* These macros ensure that there is space somewhere for the Fortran */
-/* array. They are complemetary to the CREATE_type_ARRAY macros */
-#define F77_ASSOC_CHARACTER_ARRAY(F,C)
-#define F77_ASSOC_LOGICAL_ARRAY(F,C)
-#define F77_ASSOC_INTEGER_ARRAY(F,C) F=C
-#define F77_ASSOC_REAL_ARRAY(F,C) F=C
-#define F77_ASSOC_DOUBLE_ARRAY(F,C) F=C
-#define F77_ASSOC_BYTE_ARRAY(F,C) F=C
-#define F77_ASSOC_UBYTE_ARRAY(F,C) F=C
-#define F77_ASSOC_WORD_ARRAY(F,C) F=C
-#define F77_ASSOC_UWORD_ARRAY(F,C) F=C
-#define F77_ASSOC_POINTER_ARRAY(F,C)
-
-/* Free created dynamic arrays */
-/* Character and logical are already defined */
-/* For most types there is nothing to do */
-#define F77_FREE_INTEGER(X)
-#define F77_FREE_REAL(X)
-#define F77_FREE_DOUBLE(X)
-#define F77_FREE_BYTE(X)
-#define F77_FREE_UBYTE(X)
-#define F77_FREE_WORD(X)
-#define F77_FREE_UWORD(X)
-#define F77_FREE_POINTER(X) cnfFree((void *)X);
-#define F77_FREE_CHARACTER(X) cnfFreef( X )
-#define F77_FREE_LOGICAL(X) cnfFree( (char *)X )
-
-/* --- IMPORT and EXPORT of values --- */
-/* Export C variables to Fortran variables */
-#define F77_EXPORT_CHARACTER(C,F,L) cnfExprt(C,F,L)
-#define F77_EXPORT_DOUBLE(C,F) F=C
-#define F77_EXPORT_INTEGER(C,F) F=C
-#define F77_EXPORT_LOGICAL(C,F) F=C?F77_TRUE:F77_FALSE
-#define F77_EXPORT_REAL(C,F) F=C
-#define F77_EXPORT_BYTE(C,F) F=C
-#define F77_EXPORT_WORD(C,F) F=C
-#define F77_EXPORT_UBYTE(C,F) F=C
-#define F77_EXPORT_UWORD(C,F) F=C
-#define F77_EXPORT_POINTER(C,F) F=cnfFptr(C)
-#define F77_EXPORT_LOCATOR(C,F) cnfExpch(C,F,DAT__SZLOC)
-
-/* Export C arrays to Fortran */
-/* Arrays are assumed to be 1-d so just the number of elements is given */
-/* This may be OK for n-d arrays also */
-/* CHARACTER arrays may be represented in C as arrays of arrays of char or */
-/* as arrays of pointers to char (the _P variant) */
-#define F77_EXPORT_CHARACTER_ARRAY(C,LC,F,LF,N) \
- {int f77dims[1];f77dims[0]=N;cnfExprta(C,LC,F,LF,1,f77dims);}
-#define F77_EXPORT_CHARACTER_ARRAY_P(C,F,LF,N) \
- {int f77dims[1];f77dims[0]=N;cnfExprtap(C,F,LF,1,f77dims);}
-#define F77_EXPORT_DOUBLE_ARRAY(C,F,N) F=(F77_DOUBLE_TYPE *)C
-#define F77_EXPORT_INTEGER_ARRAY(C,F,N) F=(F77_INTEGER_TYPE *)C
-#define F77_EXPORT_LOGICAL_ARRAY(C,F,N) \
- {int f77dims[1];f77dims[0]=N;cnfExpla(C,F,1,f77dims);}
-#define F77_EXPORT_REAL_ARRAY(C,F,N) F=(F77_REAL_TYPE *)C
-#define F77_EXPORT_BYTE_ARRAY(C,F,N) F=(F77_BYTE_TYPE *)C
-#define F77_EXPORT_WORD_ARRAY(C,F,N) F=(F77_WORD_TYPE *)C
-#define F77_EXPORT_UBYTE_ARRAY(C,F,N) F=(F77_UBYTE_TYPE *)C
-#define F77_EXPORT_UWORD_ARRAY(C,F,N) F=(F77_UWORD_TYPE * )C
-#define F77_EXPORT_POINTER_ARRAY(C,F,N) \
- {int f77i;for (f77i=0;f77i<N;f77i++)F[f77i]=cnfFptr(C[f77i]);}
-#define F77_EXPORT_LOCATOR_ARRAY(C,F,N) \
- {int f77i;for (f77i=0;f77i<N;f77i++)cnfExpch(C,F,DAT__SZLOC);}
-
-/* Import Fortran variables to C */
-#define F77_IMPORT_CHARACTER(F,L,C) cnfImprt(F,L,C)
-#define F77_IMPORT_DOUBLE(F,C) C=F
-#define F77_IMPORT_INTEGER(F,C) C=F
-#define F77_IMPORT_LOGICAL(F,C) C=F77_ISTRUE(F)
-#define F77_IMPORT_REAL(F,C) C=F
-#define F77_IMPORT_BYTE(F,C) C=F
-#define F77_IMPORT_WORD(F,C) C=F
-#define F77_IMPORT_UBYTE(F,C) C=F
-#define F77_IMPORT_UWORD(F,C) C=F
-#define F77_IMPORT_POINTER(F,C) C=cnfCptr(F)
-#define F77_IMPORT_LOCATOR(F,C) cnfImpch(F,DAT__SZLOC,C)
-
-/* Import Fortran arrays to C */
-/* Arrays are assumed to be 1-d so just the number of elements is given */
-/* This may be OK for n-d arrays also */
-/* CHARACTER arrays may be represented in C as arrays of arrays of char or */
-/* as arrays of pointers to char (the _P variant) */
-#define F77_IMPORT_CHARACTER_ARRAY(F,LF,C,LC,N) \
- {int f77dims[1];f77dims[0]=N;cnfImprta(F,LF,C,LC,1,f77dims);}
-#define F77_IMPORT_CHARACTER_ARRAY_P(F,LF,C,LC,N) \
- {int f77dims[1];f77dims[0]=N;cnfImprtap(F,LF,C,LC,1,f77dims);}
-#define F77_IMPORT_DOUBLE_ARRAY(F,C,N)
-#define F77_IMPORT_INTEGER_ARRAY(F,C,N)
-#define F77_IMPORT_LOGICAL_ARRAY(F,C,N) \
- {int f77dims[1];f77dims[0]=N;cnfImpla(F,C,1,f77dims);}
-#define F77_IMPORT_REAL_ARRAY(F,C,N)
-#define F77_IMPORT_BYTE_ARRAY(F,C,N)
-#define F77_IMPORT_WORD_ARRAY(F,C,N)
-#define F77_IMPORT_UBYTE_ARRAY(F,C,N)
-#define F77_IMPORT_UWORD_ARRAY(F,C,N)
-#define F77_IMPORT_POINTER_ARRAY(F,C,N) \
- {int f77i;for (f77i=0;f77i<N;f77i++)C[f77i]=cnfCptr(F[f77i]);}
-#define F77_IMPORT_LOCATOR_ARRAY(F,C,N) \
- {int f77i;for (f77i=0;f77i<N;f77i++)cnfImpch(F,DAT__SZLOC,C);}
-
-/* --- Call a FORTRAN routine --- */
-
-#define F77_CALL(X) F77_EXTERNAL_NAME(X)
-
-
-/* --- Pass arguments to a FORTRAN routine --- */
-
-#define INTEGER_ARG(X) X
-#define REAL_ARG(X) X
-#define DOUBLE_ARG(X) X
-#define LOGICAL_ARG(X) X
-#define BYTE_ARG(X) X
-#define WORD_ARG(X) X
-#define UBYTE_ARG(X) X
-#define UWORD_ARG(X) X
-#define POINTER_ARG(X) X
-#define CHARACTER_ARG(X) X
-#define TRAIL_ARG(X) ,X##_length
-
-#define SUBROUTINE_ARG(X) X
-#define INTEGER_FUNCTION_ARG(X) X
-#define REAL_FUNCTION_ARG(X) X
-#define DOUBLE_FUNCTION_ARG(X) X
-#define LOGICAL_FUNCTION_ARG(X) X
-#define CHARACTER_FUNCTION_ARG(X) X
-#define BYTE_FUNCTION_ARG(X) X
-#define WORD_FUNCTION_ARG(X) X
-#define UBYTE_FUNCTION_ARG(X) X
-#define UWORD_FUNCTION_ARG(X) X
-#define POINTER_FUNCTION_ARG(X) X
-
-#define INTEGER_ARRAY_ARG(X) (F77_INTEGER_TYPE *)X
-#define REAL_ARRAY_ARG(X) (F77_REAL_TYPE *)X
-#define DOUBLE_ARRAY_ARG(X) (F77_DOUBLE_TYPE *)X
-#define LOGICAL_ARRAY_ARG(X) (F77_LOGICAL_TYPE *)X
-#define BYTE_ARRAY_ARG(X) (F77_BYTE_TYPE *)X
-#define WORD_ARRAY_ARG(X) (F77_WORD_TYPE *)X
-#define UBYTE_ARRAY_ARG(X) (F77_UBYTE_TYPE *)X
-#define UWORD_ARRAY_ARG(X) (F77_UWORD_TYPE *)X
-#define POINTER_ARRAY_ARG(X) (F77_POINTER_TYPE *)X
-#define CHARACTER_ARRAY_ARG(X) (F77_CHARACTER_ARRAY_ARG_TYPE *)X
-
-
-/* ------------------------ Non-ansi section ------------------------------ */
-
-/* The difference between ANSI and non-ANSI compilers, as far as macro */
-/* definition is concerned, is that non-ANSI compilers do not support the */
-/* token concatenation operator (##). To work around this, we use the fact */
-/* that the null comment is preprocessed to produce no characters at all */
-/* by our non-ANSI compilers. */
-/* This section does not deal with the fact that some non-ANSI compilers */
-/* cannot handle function prototypes. That is handled in the machine */
-/* specific sections. */
-
-#if !defined(__STDC__)
-
-/* --- External Name --- */
-
-/* Macro to define the name of a Fortran routine or common block. This */
-/* ends in an underscore on many Unix systems. */
-
-#undef F77_EXTERNAL_NAME
-#define F77_EXTERNAL_NAME(X) X/**/_
-
-
-/* --- Dummy Arguments --- */
-
-/* Macros to handle character dummy arguments. */
-
-#undef TRAIL
-#define TRAIL(X) , at TRAIL_TYPE@ X/**/_length
-
-
-/* --- Declare variables --- */
-
-#undef DECLARE_CHARACTER
-#define DECLARE_CHARACTER(X,L) F77_CHARACTER_TYPE X[L]; \
- const int X/**/_length = L
-#undef DECLARE_CHARACTER_ARRAY
-#define DECLARE_CHARACTER_ARRAY(X,L,D) F77_CHARACTER_TYPE X[D][L]; \
- const int X/**/_length = L
-#undef DECLARE_CHARACTER_DYN
-#define DECLARE_CHARACTER_DYN(X) F77_CHARACTER_TYPE *X;\
- int X/**/_length
-#undef DECLARE_CHARACTER_ARRAY_DYN
-#define DECLARE_CHARACTER_ARRAY_DYN(X) F77_CHARACTER_TYPE *X;\
- int X/**/_length
-#undef F77_CREATE_CHARACTER
-#define F77_CREATE_CHARACTER(X,L) X=cnfCref(L);\
- X/**/_length = L
-#undef F77_CREATE_CHARACTER_ARRAY
-#define F77_CREATE_CHARACTER_ARRAY(X,L,N) \
- {int f77dims[1];f77dims[0]=N;X=cnfCrefa(L,1,f77dims);X/**/_length=L;}
-
-/* --- Pass arguments to a FORTRAN routine --- */
-
-#undef TRAIL_ARG
-#define TRAIL_ARG(X) ,X/**/_length
-
-
-#endif /* of non ANSI redefinitions */
-
-
-/* ----------------------------------------------------------------------- */
-
-/* The standard macros defined above are known to work with the following */
-/* systems: */
-
-/*--------
-| Sun |
----------*/
-
-/* On SunOS, the ANSI definitions work with the acc and gcc compilers. */
-/* The cc compiler uses the non ANSI definitions. It also needs the K&R */
-/* definitions in the file kr.h. */
-/* On Solaris, the standard definitions work with the cc compiler. */
-
-#if defined(sun)
-
-#if !defined(__STDC__)
-#if !defined(_F77_KR)
-#define _F77_KR
-#endif
-#endif
-
-#endif /* Sun */
-
-/* -------------------- System dependent sections ------------------------- */
-
-/*------------
-| VAX/VMS |
--------------*/
-
-/* Many macros need to be changed due to the way that VMS handles external */
-/* names, passes character arguments and handles logical values. */
-
-
-#if defined(VMS)
-
-/* --- Data Types --- */
-
-/* Redefine the macro for the byte data type as signed is not valid syntax */
-/* as the VMS compiler is not ANSI compliant. */
-
-#undef F77_BYTE_TYPE
-#define F77_BYTE_TYPE char
-
-
-/* --- External Names --- */
-
-/* Macro to define the name of a Fortran routine or common block. */
-/* Fortran and C routines names are the same on VMS. */
-
-#undef F77_EXTERNAL_NAME
-#define F77_EXTERNAL_NAME(X) X
-
-
-/* --- Dummy Arguments --- */
-
-/* Macros to handle character arguments. */
-/* Character string arguments are pointers to character string descriptors */
-/* and there are no trailing arguments. */
-
-#if( VMS != 0 )
-#include <descrip.h>
-#endif
-
-
-#undef F77_CHARACTER_ARG_TYPE
-#define F77_CHARACTER_ARG_TYPE struct dsc$descriptor_s
-#undef F77_CHARACTER_ARRAY_ARG_TYPE
-#define F77_CHARACTER_ARRAY_ARG_TYPE struct dsc$descriptor_a
-#undef CHARACTER
-#define CHARACTER(X) F77_CHARACTER_ARG_TYPE *CNF_CONST X/**/_arg
-#undef TRAIL
-#define TRAIL(X)
-#undef CHARACTER_ARRAY
-#define CHARACTER_ARRAY(X) F77_CHARACTER_ARRAY_ARG_TYPE *CNF_CONST X/**/_arg
-#undef GENPTR_CHARACTER
-#define GENPTR_CHARACTER(X) \
- F77_CHARACTER_TYPE *X = X/**/_arg->dsc$a_pointer; \
- int X/**/_length = X/**/_arg->dsc$w_length;
-#undef GENPTR_CHARACTER_ARRAY
-#define GENPTR_CHARACTER_ARRAY(X) GENPTR_CHARACTER(X)
-
-
-/* --- Logical Values --- */
-
-#undef F77_TRUE
-#define F77_TRUE -1
-#undef F77_ISTRUE
-#define F77_ISTRUE(X) ( (X)&1 )
-#undef F77_ISFALSE
-#define F77_ISFALSE(X) ( ! ( (X)&1 ) )
-
-
-/* --- Common Blocks --- */
-
-#undef F77_BLANK_COMMON
-#define F77_BLANK_COMMON $BLANK
-
-
-/* --- Declare Variables --- */
-
-#undef DECLARE_CHARACTER
-#define DECLARE_CHARACTER(X,L) \
- F77_CHARACTER_TYPE X[L]; const int X/**/_length = L; \
- F77_CHARACTER_ARG_TYPE X/**/_descr = \
- { L, DSC$K_DTYPE_T, DSC$K_CLASS_S, X }; \
- F77_CHARACTER_ARG_TYPE *X/**/_arg = &X/**/_descr
-#undef DECLARE_CHARACTER_ARRAY
-#define DECLARE_CHARACTER_ARRAY(X,L,D) \
- F77_CHARACTER_TYPE X[D][L]; const int X/**/_length = L; \
- F77_CHARACTER_ARRAY_ARG_TYPE X/**/_descr = \
- { L, DSC$K_DTYPE_T, DSC$K_CLASS_S, X }; \
- F77_CHARACTER_ARRAY_ARG_TYPE *X/**/_arg = &X/**/_descr
-
-
-/* --- The dynamic allocation of character arguments --- */
-#undef DECLARE_CHARACTER_DYN
-#define DECLARE_CHARACTER_DYN(X) int X/**/_length;\
- F77_CHARACTER_ARG_TYPE *X/**/_arg;\
- F77_CHARACTER_TYPE *X
-#undef DECLARE_CHARACTER_ARRAY_DYN
-#define DECLARE_CHARACTER_ARRAY_DYN(X) int X/**/_length;\
- F77_CHARACTER_ARRAY_ARG_TYPE *X/**/_arg;\
- F77_CHARACTER_TYPE *X
-#undef F77_CREATE_CHARACTER
-#define F77_CREATE_CHARACTER(X,L) X/**/_arg = cnfCref(L);\
- X = X/**/_arg->dsc$a_pointer; \
- X/**/_length = X/**/_arg->dsc$w_length
-#undef F77_CREATE_CHARACTER_ARRAY
-#define F77_CREATE_CHARACTER_ARRAY(X,L,N) \
- {int f77dims[1];f77dims[0]=N;X/**/_arg=cnfCrefa(L,1,f77dims);X/**/_length=L;}
-#define F77_CREATE_CHARACTER_ARRAY_M(X,L,N,D) X/**/_arg = cnfCrefa(L,N,D);\
- X = X/**/_arg->dsc$a_pointer; \
- X/**/_length = X/**/_arg->dsc$w_length
-#undef F77_FREE_CHARACTER
-#define F77_FREE_CHARACTER(X) cnfFreef( X/**/_arg )
-
-/* --- Pass arguments to a FORTRAN routine --- */
-
-#undef CHARACTER_ARG
-#define CHARACTER_ARG(X) X/**/_arg
-#undef CHARACTER_ARRAY_ARG
-#define CHARACTER_ARRAY_ARG(X) X/**/_arg
-#undef TRAIL_ARG
-#define TRAIL_ARG(X)
-
-#endif /* VMS */
-
-/* ----------------------------------------------------------------------- */
-
-/*--------------------------
-| DECstation Ultrix (cc) |
-| DECstation Ultrix (c89) |
-| DECstation OSF/1 |
-| Alpha OSF/1 |
- --------------------------*/
-
-/* Do this complicated set of definitions as a single #if cannot be */
-/* continued across multiple lines. */
-
-#if defined(mips) && defined(ultrix)
-#define _dec_unix 1
-#endif
-#if defined(__mips) && defined(__ultrix)
-#define _dec_unix 1
-#endif
-#if defined(__mips__) && defined(__osf__)
-#define _dec_unix 1
-#endif
-#if defined(__alpha) && defined(__osf__)
-#define _dec_unix 1
-#endif
-
-#if _dec_unix
-
-/* The macros for Ultrix are the same as the standard ones except for ones */
-/* dealing with logical values. The ANSI definitions work with the c89 */
-/* compiler, and the non ANSI definitions work with the cc compiler. */
-/* The same applies to DEC OSF/1, except that its cc compiler is ANSI */
-/* compliant. */
-
-
-/* --- Logical Values --- */
-
-/* Redefine macros that evaluate to a C logical value, given a FORTRAN */
-/* logical value. These definitions are only valid when used with the DEC */
-/* FORTRAN for RISC compiler. If you are using the earlier FORTRAN for */
-/* RISC compiler from MIPS, then these macros should be deleted. */
-
-#undef F77_TRUE
-#define F77_TRUE -1
-#undef F77_ISTRUE
-#define F77_ISTRUE(X) ( (X)&1 )
-#undef F77_ISFALSE
-#define F77_ISFALSE(X) ( ! ( (X)&1 ) )
-
-
-#endif /* DEC Unix */
-
-/*
-*+
-* Name:
-* cnf.h
-
-* Purpose:
-* Function prototypes for cnf routines
-
-* Language:
-* ANSI C
-
-* Type of Module:
-* C include file
-
-* Description:
-* These are the prototype definitions for the functions in the CNF
-* library. They are used used in mixing C and FORTRAN programs.
-
-* Copyright:
-* Copyright (C) 1991 Science & Engineering Research Council
-
-* Authors:
-* PMA: Peter Allan (Starlink, RAL)
-* AJC: Alan Chipperfield (Starlink, RAL)
-* {enter_new_authors_here}
-
-* History:
-* 23-MAY-1991 (PMA):
-* Original version.
-* 12-JAN-1996 (AJC):
-* Add cnf_cref and cnf_freef
-* 14-JUN-1996 (AJC):
-* Add cnf_crefa, imprta, exprta
-* crela, impla, expla
-* 18-JUL-1996 (AJC):
-* Add impch and expch
-* 17-MAR-1998 (AJC):
-* Add imprtap and exprtap
-* {enter_changes_here}
-
-* Bugs:
-* {note_any_bugs_here}
-
-*-
-------------------------------------------------------------------------------
-*/
-void *cnfCalloc( size_t, size_t );
-void cnfCopyf( const char *source_f, int source_len, char *dest_f,
- int dest_len );
-void *cnfCptr( F77_POINTER_TYPE );
-char *cnfCreat( int length );
-F77_CHARACTER_ARG_TYPE *cnfCref( int length );
-F77_CHARACTER_ARG_TYPE *cnfCrefa( int length, int ndims, const int *dims );
-char *cnfCreib( const char *source_f, int source_len );
-char *cnfCreim( const char *source_f, int source_len );
-F77_LOGICAL_TYPE *cnfCrela( int ndims, const int *dims );
-void cnfExpch( const char *source_c, char *dest_f, int nchars );
-void cnfExpla( const int *source_c, F77_LOGICAL_TYPE *dest_f, int ndims,
- const int *dims );
-void cnfExpn( const char *source_c, int max, char *dest_f, int dest_len );
-void cnfExprt( const char *source_c, char *dest_f, int dest_len );
-void cnfExprta( const char *source_c, int source_len, char *dest_f,
- int dest_len, int ndims, const int *dims );
-void cnfExprtap( char *const *source_c, char *dest_f, int dest_len,
- int ndims, const int *dims );
-F77_POINTER_TYPE cnfFptr( void *cpointer );
-void cnfFree( void * );
-void cnfFreef( F77_CHARACTER_ARG_TYPE *temp );
-void cnfImpb( const char *source_f, int source_len, char *dest_c );
-void cnfImpbn( const char *source_f, int source_len, int max, char *dest_c );
-void cnfImpch( const char *source_f, int nchars, char *dest_c );
-void cnfImpla( const F77_LOGICAL_TYPE *source_f, int *dest_c,
- int ndims, const int *dims );
-void cnfImpn( const char *source_f, int source_len, int max, char *dest_c );
-void cnfImprt( const char *source_f, int source_len, char *dest_c );
-void cnfImprta( const char *source_f, int source_len, char *dest_c,
- int dest_len, int ndims, const int *dims );
-void cnfImprtap( const char *source_f, int source_len, char *const *dest_c,
- int dest_len, int ndims, const int *dims );
-int cnfLenc( const char *source_c );
-int cnfLenf( const char *source_f, int source_len );
-void *cnfMalloc( size_t );
-int cnfRegp( void * );
-void cnfUregp( void * );
-#endif
-
-#ifndef CNF_OLD_DEFINED
-#define CNF_OLD_DEFINED
-/* Define old names to be new names */
-#define cnf_calloc cnfCalloc
-#define cnf_copyf cnfCopyf
-#define cnf_cptr cnfCptr
-#define cnf_creat cnfCreat
-#define cnf_cref cnfCref
-#define cnf_crefa cnfCrefa
-#define cnf_creib cnfCreib
-#define cnf_creim cnfCreim
-#define cnf_crela cnfCrela
-#define cnf_expch cnfExpch
-#define cnf_expla cnfExpla
-#define cnf_expn cnfExpn
-#define cnf_exprt cnfExprt
-#define cnf_exprta cnfExprta
-#define cnf_exprtap cnfExprtap
-#define cnf_fptr cnfFptr
-#define cnf_free cnfFree
-#define cnf_freef cnfFreef
-#define cnf_impb cnfImpb
-#define cnf_impbn cnfImpbn
-#define cnf_impch cnfImpch
-#define cnf_impla cnfImpla
-#define cnf_impn cnfImpn
-#define cnf_imprt cnfImprt
-#define cnf_imprta cnfImprta
-#define cnf_imprtap cnfImprtap
-#define cnf_lenc cnfLenc
-#define cnf_lenf cnfLenf
-#define cnf_malloc cnfMalloc
-#define cnf_regp cnfRegp
-#define cnf_uregp cnfUregp
-
-#endif
diff --git a/ast-5.3-1/fac_1521_err b/ast-5.3-1/fac_1521_err
deleted file mode 100644
index 0be574c..0000000
--- a/ast-5.3-1/fac_1521_err
+++ /dev/null
@@ -1,139 +0,0 @@
-FACILITY AST
-300,ATGER,attribute getting error
-301,ATSER,attribute setting error
-302,ATTIN,attribute value invalid
-303,AXIIN,axis index invalid
-304,BADAT,bad attribute name
-305,BADBX,zero-sized box given
-306,BADIN,bad input data
-307,BADNI,bad number of input coordinates
-308,BADNO,bad number of output coordinates
-309,BADPW,PolyMap contains illegal power value
-310,BADSM,ShiftMap contains no shift information
-311,BADWM,WinMap contains no bounds information
-312,BDBRK,bad break index
-313,BDFMT,bad field specifier
-314,BDFTS,invalid FITS keyword value found
-315,BDOBJ,inappropriate Object supplied
-316,CLPAX,wrong number of clipping axes
-317,CORNG,range of coordinates invalid
-318,CVBRK,too many breaks in a curve
-319,DIMIN,array dimensions invalid
-320,DTERR,date/time error
-321,ENDIN,invalid use of astEnd
-322,EOCHN,end of input Channel encountered
-323,EXPIN,attempt to export Object pointer from level zero
-324,FCRPT,corrupted FitsChan supplied
-325,FMTER,error while formatting coordinate value
-326,FRMIN,Frame index invalid
-327,FRSIN,FrameSet invalid
-328,FTCNV,cannot convert FITS data value type
-329,GRFER,low level graphics error
-330,INHAN,invalid Handle
-331,INNCO,incompatible numbers of coordinates
-332,INTER,internal programming error
-333,INTRD,incompatible transformation directions
-334,KYCIR,circular dependency between KeyMaps
-335,LDERR,class loader error
-336,LUTII,invalid lookup table increment
-337,LUTIN,invalid number of lookup table elements
-338,MEMIN,requested memory size invalid
-339,MTR23,not a 2d or 3d MatrixMap
-340,MTRAX,null rotation axis supplied
-341,MTRML,bad matrix shapes for multiplication
-342,MTRMT,null matrix supplied
-343,NAXIN,number of axes invalid
-344,NCHIN,number of characters invalid
-345,NCOIN,number of coordinates invalid
-346,NCPIN,number of coordinates per point invalid
-347,NELIN,number of array elements invalid
-348,NOCTS,number of output coordinates too small
-349,NODEF,transformation not defined
-350,NOFTS,required FITS keywords missing
-351,NOMEM,unable to allocate memory
-352,NOPTS,number of output points too small
-353,NOWRT,attribute is read-only
-354,NPTIN,number of points invalid
-355,OBJIN,Object invalid
-356,OPT,invalid Plot option
-357,PDSIN,points data structure invalid
-358,PLFMT,no numerical labels can be produced
-359,PRMIN,permutation invalid
-360,PTRIN,pointer invalid
-361,PTRNG,range of points invalid
-362,RDERR,read error
-363,REGIN,invalid or corrupted Region structure supplied
-364,REMIN,invalid attempt to remove last Frame
-365,SCSIN,sky coordinate system invalid
-366,SELIN,axis selection invalid
-367,SLAIN,bad SLALIB transformation type
-368,TRNND,coordinate transformation not defined
-369,UNMQT,unmatched quotes
-370,VSMAL,valid area too small
-371,WCSAX,non-existent longitude or latitude axis
-372,WCSNC,too few mapping coordinates
-373,WCSPA,invalid projection parameters
-374,WCSTY,unknown projection type
-375,XSOBJ,too many Objects in use at once
-376,ZOOMI,zoom factor invalid
-377,BADCI,bad coordinate index
-378,ILOST,FrameSet integrity lost
-379,ITFER,error in IntraMap transformation function
-380,ITFNI,IntraMap transformation function name invalid
-381,MBBNF,Mapping bounding box not found
-382,MRITF,multiple registration of IntraMap transformation function
-383,OCLUK,Object class unknown
-384,UNFER,error while unformatting a coordinate value
-385,URITF,unregistered IntraMap transformation function
-386,GBDIN,grid bounds invalid
-387,NGDIN,number of grid dimensions invalid
-388,PATIN,positional accuracy tolerance invalid
-389,SISIN,sub-pixel interpolation scheme invalid
-390,SSPIN,scale size in pixels invalid
-391,UINER,error in user-supplied sub-pixel interpolation function
-392,UK1ER,error in user-supplied 1-d sub-pixel interpolation kernel
-393,COMIN,invalid comma in expression
-394,CONIN,invalid constant in expression
-395,DUVAR,duplicate variable name
-396,INNTF,invalid number of transformation functions
-397,MIOPA,missing or invalid operand in expression
-398,MIOPR,missing or invalid operator in expression
-399,MISVN,missing variable name
-400,MLPAR,missing left parenthesis in expression
-401,MRPAR,missing right parenthesis in expression
-402,NORHS,missing right hand side in function
-403,UDVOF,undefined variable or function in expression
-404,VARIN,variable name invalid
-405,WRNFA,wrong number of function arguments in expression
-406,BADUN,invalid units specification
-407,NORSF,no rest frequency is defined
-408,NOSOR,no standard of rest is defined
-409,SPCIN,invalid SpecMap
-410,XMLNM,invalid XML name or prefix
-411,XMLCM,invalid XML comment text
-412,XMLPT,invalid XML processing instruction target text
-413,XMLIT,invalid XML content item index
-414,XMLWF,supplied XML document is not well formed
-415,ZERAX,Range of log axis scale includes zero
-416,BADOC,Invalid parameters for offset sky coordinate system
-417,MPGER,error getting a named value from a KeyMap
-418,MPIND,invalid integer index supplied for a KeyMap entry
-419,REGCN,region cannot be re-centred
-420,NOVAL,attribute has no usable value
-421,INCTS,incompatible time scales
-422,TIMIN,invalid TimeMap
-423,STCKEY,cannot use supplied AstroCoords info
-424,STCIND,invalid AstroCoords index
-425,CNFLX,cannot conserve flux whilst resampling an array of data
-426,TUNAM,Unknown AST tuning parameter name supplied
-427,BDPAR,Bad value supplied for a public function parameter
-428,3DFSET,Supplied FrameSet does not contain any independent axes
-429,PXFRRM,Attempt to delete original Plot3D base Frame
-430,BADSUB,Illegal syntax for string substitution template
-431,BADFLG,Incompatible flags for re-sampling or re-binning
-432,LCKERR,Error locking or unlocking an AST Object
-433,FUNDEF,FITS keyword had undefined value
-434,MPVIN,invalid integer index supplied for a KeyMap vector element
-435,OPRIN,operation specifier invalid
-436,NONIN,no inside point found
-437,MPKER,requested key not found in KeyMap
diff --git a/ast-5.3-1/fbox.c b/ast-5.3-1/fbox.c
deleted file mode 100644
index e727a07..0000000
--- a/ast-5.3-1/fbox.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
-*+
-* Name:
-* fbox.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST Box class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the Box class.
-
-* Routines Defined:
-* AST_ISABOX
-* AST_BOX
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 22-MAR-2004 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "box.h" /* C interface to the Box class */
-
-F77_LOGICAL_FUNCTION(ast_isabox)( INTEGER(THIS), INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISABOX", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsABox( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_box)( INTEGER(FRAME),
- INTEGER(FORM),
- DOUBLE_ARRAY(POINT1),
- DOUBLE_ARRAY(POINT2),
- INTEGER(UNC),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(FRAME)
- GENPTR_INTEGER(FORM)
- GENPTR_DOUBLE_ARRAY(POINT1)
- GENPTR_DOUBLE_ARRAY(POINT2)
- GENPTR_INTEGER(UNC)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_BOX", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
-
- RESULT = astP2I( astBox( astI2P( *FRAME ), *FORM, POINT1, POINT2,
- astI2P( *UNC ), "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fchannel.c b/ast-5.3-1/fchannel.c
deleted file mode 100644
index d238f2f..0000000
--- a/ast-5.3-1/fchannel.c
+++ /dev/null
@@ -1,470 +0,0 @@
-/*
-*+
-* Name:
-* fchannel.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST Channel class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the Channel class.
-
-* Routines Defined:
-* AST_CHANNEL
-* AST_ISACHANNEL
-* AST_READ
-* AST_WRITE
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 6-SEP-1996 (RFWS):
-* Original version.
-* 12-DEC-1996 (RFWS):
-* Added SOURCE and SINK arguments to AST_CHANNEL.
-* 13-NOV-2003 (DSB):
-* Made SourceWrap and SinkWrap into protected functions rather
-* than private functions, so that they can be used in fxmlchan.c
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "channel.h" /* C interface to the Channel class */
-
-#include <stddef.h>
-
-/* Module Variables. */
-/* ================= */
-static char *line_in = NULL; /* Pointer to incoming line of text */
-static const char *line_out = NULL; /* Pointer to outgoing line of text */
-
-/* Prototypes for external functions. */
-/* ================================== */
-/* This is the null function defined by the FORTRAN interface in fobject.c. */
-F77_SUBROUTINE(ast_null)( void );
-
-/* Source and sink function interfaces. */
-/* ==================================== */
-/* These functions are concerned with allowing FORTRAN implementations
- of Channel source and sink functions to be passed to the Channel
- class and invoked when necessary by C code in the main class
- implementation. All FORTRAN-specific aspects of this interface are
- encapsulated here. */
-F77_SUBROUTINE(ast_getline)( CHARACTER(LINE),
- INTEGER(L),
- INTEGER(STATUS)
- TRAIL(LINE) ) {
-/*
-f++
-* Name:
-* AST_GETLINE
-
-* Purpose:
-* Obtain text to be written by a Channel sink routine.
-
-* Type:
-* Public function.
-
-* Synopsis:
-* CALL AST_GETLINE( LINE, L, STATUS )
-
-* Description:
-* This routine should only be used when implementing a routine
-* which will be passed as the SINK argument to AST_CHANNEL. It
-* should be used to obtain (from the AST library) each line of
-* text which is to be written to the external data sink. One such
-* line should be obtained in this way for each invocation of the
-* sink routine.
-
-* Parameters:
-* LINE = CHARACTER * ( * ) (Returned)
-* The line of text to be written. Depending on the length of
-* character variable supplied, the returned text may be
-* truncated if necessary. Note, however, that it will not be
-* padded with blanks in order to fill this variable.
-* L = INTEGER (Returned)
-* The number of characters returned, which may be zero. Note
-* that characters beyond the L'th character in the LINE
-* variable are not modified and may therefore contain junk.
-* STATUS = INTEGER (Given and Returned)
-* The global status.
-
-* Notes:
-* - This routine is only available in the Fortran interface to the
-* AST library.
-f--
-*/
-
-/* Argument Pointers: */
- GENPTR_CHARACTER(LINE)
- GENPTR_INTEGER(L)
-
-/* Local Variables: */
- int i; /* Loop counter for characters */
-
-/* Set the error context and watch the STATUS value. */
- astAt( "AST_GETLINE", NULL, 0 );
- astWatchSTATUS(
-
-/* Initialise the returned string length. */
- *L = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* If there is no outgoing line ready (e.g. if this routine has been
- called at an inappropriate point), we simply return
- nothing. Otherwise, loop to copy the text into the character
- argument supplied, ensuring that its length is not exceeded. */
- if ( line_out ) {
- for ( i = 0; line_out[ i ] && ( i < LINE_length ); i++ ) {
- LINE[ i ] = line_out[ i ];
- }
-
-/* Return the number of characters copied. */
- *L = i;
- }
- )
-}
-
-F77_SUBROUTINE(ast_putline)( CHARACTER(LINE),
- INTEGER(L),
- INTEGER(STATUS)
- TRAIL(LINE) ) {
-/*
-f++
-* Name:
-* AST_PUTLINE
-
-* Purpose:
-* Store a text line read by a Channel source routine.
-
-* Type:
-* Public function.
-
-* Synopsis:
-* CALL AST_PUTLINE( LINE, L, STATUS )
-
-* Description:
-* This routine should only be used when implementing a routine
-* which will be passed as the SOURCE argument to AST_CHANNEL. It
-* should be used to pass back (to the AST library) each line of
-* text read from the external data source. One such line should be
-* passed back in this way for each invocation of the source
-* routine.
-
-* Parameters:
-* LINE = CHARACTER * ( * ) (Given)
-* A character string containing the line of input text which
-* has been read.
-* L = INTEGER (Given)
-* The number of characters in the input line, which may be
-* zero. If there is no more input available (e.g. an end of
-* file has been reached), this value should be set negative and
-* this will terminate the read operation on the Channel.
-* STATUS = INTEGER (Given and Returned)
-* The global status.
-
-* Notes:
-* - This routine is only available in the Fortran interface to the
-* AST library.
-f--
-*/
-
-/* Argument Pointers: */
- GENPTR_CHARACTER(LINE)
- GENPTR_INTEGER(L)
-
-/* Local Variables: */
- int l; /* Number of characters in line */
-
-/* Set the error context and watch the STATUS value. */
- astAt( "AST_PUTLINE", NULL, 0 );
- astWatchSTATUS(
-
-/* Initialise the incoming line pointer. */
- line_in = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain the number of characters in the line. */
- l = *L;
-
-/* Negative values (or STATUS set) indicate end of input. If the value
- is not negative, limit the number of characters to the length of
- the character variable supplied. */
- if ( l >= 0 ) {
- if ( l > LINE_length ) l = LINE_length;
-
-/* Create a dynamic string and fill it with the incoming data. Store
- the resulting pointer, which will be picked up by the SourceWrap
- function. */
- line_in = astString( LINE, l );
- }
- )
-}
-
-void astSinkWrap_( void (* sink)( const char * ), const char *line, int *status ) {
-/*
-*+
-* Name:
-* astSinkWrap
-
-* Purpose:
-* Wrapper function to invoke a FORTRAN Channel sink function.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* void astSinkWrap( void (* sink)( const char * ), const char *line )
-
-* Description:
-* This function invokes the sink function whose pointer is
-* supplied in order to write an output line to an external data
-* store.
-
-* Parameters:
-* sink
-* Pointer to a sink function. This should result from a cast
-* applied to a pointer to a function, with a single FORTRAN
-* INTEGER error status argument, that returns void. This is
-* the form of Channel sink function employed by the FORTRAN
-* language interface to the AST library.
-* line
-* Pointer to a constant null-terminated string containing the
-* line of output text.
-*-
-*/
-
-/* Local Variables; */
- DECLARE_INTEGER(STATUS); /* FORTRAN error status variable */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Store the pointer to the output text line in the (static)
- "line_out" variable, where it will be accessed by the sink function
- invoking AST_GETLINE. */
- line_out = line;
-
-/* Cast the sink function pointer to a pointer to the FORTRAN
- subroutine and then invoke it. Transfer the AST error status to and
- from the subroutine's error status argument. */
- STATUS = astStatus;
- ( *(void (*)()) sink )( INTEGER_ARG(&STATUS) );
- astSetStatus( STATUS );
-
-/* Clear the outgoing line pointer. */
- line_out = NULL;
-}
-
-char *astSourceWrap_( const char *(* source)( void ), int *status ) {
-/*
-*+
-* Name:
-* astSourceWrap
-
-* Purpose:
-* Wrapper function to invoke a FORTRAN Channel source function.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* char *astSourceWrap( const char *(* source)( void ) )
-
-* Description:
-* This function invokes the source function whose pointer is
-* supplied in order to read the next input line from an external
-* data store. It then returns a pointer to a dynamic string
-* containing a copy of the text that was read.
-
-* Parameters:
-* source
-* Pointer to a source function. This should result from a cast
-* applied to a pointer to a function, with a single FORTRAN
-* INTEGER error status argument, that returns void. This is
-* the form of Channel source function employed by the FORTRAN
-* language interface to the AST library.
-
-* Returned Value:
-* A pointer to a dynamically allocated, null terminated string
-* containing a copy of the text that was read. This string must be
-* freed by the caller (using astFree) when no longer required.
-*
-* A NULL pointer will be returned if there is no more input text
-* to read.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the global error status set or if it should fail
-* for any reason.
-*-
-*/
-
-/* Local Variables: */
- DECLARE_INTEGER(STATUS); /* FORTRAN error status variable */
- char *result; /* Result pointer to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Initialise the incoming line pointer. */
- line_in = NULL;
-
-/* Cast the source function pointer to a pointer to the FORTRAN
- subroutine and then invoke it. Transfer the AST error status to and
- from the subroutine's error status argument. */
- STATUS = astStatus;
- ( *(void (*)()) source )( INTEGER_ARG(&STATUS) );
- astSetStatus( STATUS );
-
-/* This should result in a pointer to a dynamic string containing the
- input text being stored in the (static) "line_in" variable as a
- result of the source function invoking AST_PUTLINE. Save this
- string pointer and clear the original. */
- result = line_in;
- line_in = NULL;
-
-/* If an error occurred, free the returned string. */
- if ( ! astOK ) result = astFree( result );
-
-/* Return the result. */
- return result;
-}
-
-/* FORTRAN interface functions. */
-/* ============================ */
-/* These functions implement the remainder of the FORTRAN interface. */
-F77_INTEGER_FUNCTION(ast_channel)( void (* SOURCE)(),
- void (* SINK)(),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- const char *(* source)( void );
- int i;
- void (* sink)( const char * );
-
- astAt( "AST_CHANNEL", NULL, 0 );
- astWatchSTATUS(
-
-/* Set the source and sink function pointers to NULL if a pointer to
- the null routine AST_NULL has been supplied. */
- source = (const char *(*)( void )) SOURCE;
- if ( source == (const char *(*)( void )) F77_EXTERNAL_NAME(ast_null) ) {
- source = NULL;
- }
- sink = (void (*)( const char * )) SINK;
- if ( sink == (void (*)( const char * )) F77_EXTERNAL_NAME(ast_null) ) {
- sink = NULL;
- }
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astChannelFor( source, astSourceWrap, sink, astSinkWrap,
- "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_isachannel)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISACHANNEL", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAChannel( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_read)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_INTEGER_TYPE(RESULT);
-
- astAt( "AST_READ", NULL, 0 );
- astWatchSTATUS(
- RESULT = astP2I( astRead( astI2P( *THIS ) ) );
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_write)( INTEGER(THIS),
- INTEGER(OBJECT),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(OBJECT)
- F77_INTEGER_TYPE(RESULT);
-
- astAt( "AST_WRITE", NULL, 0 );
- astWatchSTATUS(
- RESULT = astWrite( astI2P( *THIS ), astI2P( *OBJECT ) );
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_warnings)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_INTEGER_TYPE(RESULT);
-
- astAt( "AST_WARNINGS", NULL, 0 );
- astWatchSTATUS(
- RESULT = astP2I( astWarnings( astI2P( *THIS ) ) );
- )
- return RESULT;
-}
-
-
-
diff --git a/ast-5.3-1/fcircle.c b/ast-5.3-1/fcircle.c
deleted file mode 100644
index 3ad88dd..0000000
--- a/ast-5.3-1/fcircle.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
-*+
-* Name:
-* fcircle.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST Circle class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the Circle class.
-
-* Routines Defined:
-* AST_ISACIRCLE
-* AST_CIRCLE
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 31-AUG-2004 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "circle.h" /* C interface to the Circle class */
-
-
-F77_LOGICAL_FUNCTION(ast_isacircle)( INTEGER(THIS), INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISACIRCLE", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsACircle( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_circle)( INTEGER(FRAME),
- INTEGER(FORM),
- DOUBLE_ARRAY(POINT1),
- DOUBLE_ARRAY(POINT2),
- INTEGER(UNC),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(FRAME)
- GENPTR_INTEGER(FORM)
- GENPTR_DOUBLE_ARRAY(POINT1)
- GENPTR_DOUBLE_ARRAY(POINT2)
- GENPTR_INTEGER(UNC)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_CIRCLE", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
-
- RESULT = astP2I( astCircle( astI2P( *FRAME ), *FORM, POINT1, POINT2,
- astI2P( *UNC ), "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
-
-F77_SUBROUTINE(ast_circlepars)( INTEGER(THIS),
- DOUBLE_ARRAY(CENTRE),
- DOUBLE(RADIUS),
- DOUBLE_ARRAY(P1),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_DOUBLE_ARRAY(CENTRE)
- GENPTR_DOUBLE(RADIUS)
- GENPTR_DOUBLE_ARRAY(P1)
-
- astAt( "AST_CIRCLEPARS", NULL, 0 );
- astWatchSTATUS(
- astCirclePars( astI2P( *THIS ), CENTRE, RADIUS, P1 );
- )
-}
-
diff --git a/ast-5.3-1/fcmpframe.c b/ast-5.3-1/fcmpframe.c
deleted file mode 100644
index 2bc16a9..0000000
--- a/ast-5.3-1/fcmpframe.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-*+
-* Name:
-* fcmpframe.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST CmpFrame class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the CmpFrame class.
-
-* Routines Defined:
-* AST_CMPFRAME
-* AST_ISACMPFRAME
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 30-SEP-1996 (RFWS):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "cmpframe.h" /* C interface to the CmpFrame class */
-
-F77_LOGICAL_FUNCTION(ast_isacmpframe)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISACMPFRAME", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsACmpFrame( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_cmpframe)( INTEGER(FRAME1),
- INTEGER(FRAME2),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(FRAME1)
- GENPTR_INTEGER(FRAME2)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- int i;
- char *options;
-
- astAt( "AST_CMPFRAME", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astCmpFrame( astI2P( *FRAME1 ), astI2P( *FRAME2 ),
- "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fcmpmap.c b/ast-5.3-1/fcmpmap.c
deleted file mode 100644
index 279a35c..0000000
--- a/ast-5.3-1/fcmpmap.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
-*+
-* Name:
-* fcmpmap.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST CmpMap class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the CmpMap class.
-
-* Routines Defined:
-* AST_ISACMPMAP
-* AST_CMPMAP
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 25-SEP-1996 (RFWS):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "cmpmap.h" /* C interface to the CmpMap class */
-
-F77_LOGICAL_FUNCTION(ast_isacmpmap)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astWatchSTATUS(
- astAt( "AST_ISACMPMAP", NULL, 0 );
- RESULT = astIsACmpMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_cmpmap)( INTEGER(MAP1),
- INTEGER(MAP2),
- LOGICAL(SERIES),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(MAP1)
- GENPTR_INTEGER(MAP2)
- GENPTR_LOGICAL(SERIES)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- int i;
- char *options;
-
- astAt( "AST_CMPMAP", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astCmpMap( astI2P( *MAP1 ), astI2P( *MAP2 ),
- F77_ISTRUE( *SERIES ), "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fcmpregion.c b/ast-5.3-1/fcmpregion.c
deleted file mode 100644
index fdc5c90..0000000
--- a/ast-5.3-1/fcmpregion.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-*+
-* Name:
-* fcmpregion.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST CmpRegion class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the CmpRegion class.
-
-* Routines Defined:
-* AST_ISACMPREGION
-* AST_CMPREGION
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 12-OCT-2004 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "cmpregion.h" /* C interface to the CmpRegion class */
-
-
-F77_LOGICAL_FUNCTION(ast_isacmpregion)( INTEGER(THIS), INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISACMPREGION", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsACmpRegion( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_cmpregion)( INTEGER(REG1),
- INTEGER(REG2),
- INTEGER(OPER),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(REG1)
- GENPTR_INTEGER(REG2)
- GENPTR_INTEGER(OPER)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_CMPREGION", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
-
- RESULT = astP2I( astCmpRegion( astI2P( *REG1 ), astI2P( *REG2 ),
- *OPER, "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fdsbspecframe.c b/ast-5.3-1/fdsbspecframe.c
deleted file mode 100644
index 510322f..0000000
--- a/ast-5.3-1/fdsbspecframe.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
-*+
-* Name:
-* fdsbspecframe.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST DSBSpecFrame class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the DSBSpecFrame class.
-
-* Routines Defined:
-* AST_ISADSBSPECFRAME
-* AST_DSBSPECFRAME
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 5-AUG-2004 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "dsbspecframe.h" /* C interface to the DSBSpecFrame class */
-
-F77_LOGICAL_FUNCTION(ast_isadsbspecframe)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISADSBSPECFRAME", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsADSBSpecFrame( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_dsbspecframe)( CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- int i;
- char *options;
-
- astAt( "AST_DSBSPECFRAME", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astDSBSpecFrame( "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
-
diff --git a/ast-5.3-1/fdssmap.c b/ast-5.3-1/fdssmap.c
deleted file mode 100644
index 2454364..0000000
--- a/ast-5.3-1/fdssmap.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-*+
-* Name:
-* fdssmap.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST DssMap class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the DssMap class.
-
-* Routines Defined:
-* AST_ISADSSMAP
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 19-FEB-1997 (DSB):
-* Original version.
-* 5-SEP-1997 (RFWS)
-* Removed the AST_DSSMAP function (now protected, so not
-* required in the Fortran interface).
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "dssmap.h" /* C interface to the DssMap class */
-
-F77_LOGICAL_FUNCTION(ast_isadssmap)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISADSSMAP", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsADssMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fellipse.c b/ast-5.3-1/fellipse.c
deleted file mode 100644
index 3a0ea91..0000000
--- a/ast-5.3-1/fellipse.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
-*+
-* Name:
-* fellipse.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST Ellipse class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the Ellipse class.
-
-* Routines Defined:
-* AST_ISAELLIPSE
-* AST_ELLIPSE
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 31-AUG-2004 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "ellipse.h" /* C interface to the Ellipse class */
-
-
-F77_LOGICAL_FUNCTION(ast_isaellipse)( INTEGER(THIS), INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAELLIPSE", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAEllipse( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_ellipse)( INTEGER(FRAME),
- INTEGER(FORM),
- DOUBLE_ARRAY(POINT1),
- DOUBLE_ARRAY(POINT2),
- DOUBLE_ARRAY(POINT3),
- INTEGER(UNC),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(FRAME)
- GENPTR_INTEGER(FORM)
- GENPTR_DOUBLE_ARRAY(POINT1)
- GENPTR_DOUBLE_ARRAY(POINT2)
- GENPTR_DOUBLE_ARRAY(POINT3)
- GENPTR_INTEGER(UNC)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_ELLIPSE", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
-
- RESULT = astP2I( astEllipse( astI2P( *FRAME ), *FORM, POINT1, POINT2,
- POINT3, astI2P( *UNC ), "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
-
-F77_SUBROUTINE(ast_ellipsepars)( INTEGER(THIS),
- DOUBLE_ARRAY(CENTRE),
- DOUBLE(A),
- DOUBLE(B),
- DOUBLE(ANGLE),
- DOUBLE_ARRAY(P1),
- DOUBLE_ARRAY(P2),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_DOUBLE_ARRAY(CENTRE)
- GENPTR_DOUBLE(A)
- GENPTR_DOUBLE(B)
- GENPTR_DOUBLE(ANGLE)
- GENPTR_DOUBLE_ARRAY(P1)
- GENPTR_DOUBLE_ARRAY(P2)
-
- astAt( "AST_ELLIPSEPARS", NULL, 0 );
- astWatchSTATUS(
- astEllipsePars( astI2P( *THIS ), CENTRE, A, B, ANGLE, P1, P2 );
- )
-}
-
diff --git a/ast-5.3-1/ferror.c b/ast-5.3-1/ferror.c
deleted file mode 100644
index 9eecb90..0000000
--- a/ast-5.3-1/ferror.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
-*+
-* Name:
-* ferror.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST Error module.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the Error module.
-
-* Routines Defined:
-* None.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 15-JUL-1996 (RFWS):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "error.h" /* C interface to the Error module */
-
-/* At present there are no Fortran callable routines in this module. */
diff --git a/ast-5.3-1/ffitschan.c b/ast-5.3-1/ffitschan.c
deleted file mode 100644
index 54271ca..0000000
--- a/ast-5.3-1/ffitschan.c
+++ /dev/null
@@ -1,779 +0,0 @@
-/*
-*+
-* Name:
-* ffitschan.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST FitsChan class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the FitsChan class.
-
-* Routines Defined:
-* AST_DELFITS
-* AST_PURGEWCS
-* AST_FINDFITS
-* AST_FITSCHAN
-* AST_ISAFITSCHAN
-* AST_PUTCARDS
-* AST_PUTFITS
-* AST_RETAINFITS
-* AST_SETFITS<X>
-* AST_GETFITS<X>
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-
-* History:
-* 11-DEC-1996 (DSB):
-* Original version.
-* 21-FEB-1997 (DSB):
-* Added source and sink functions to AST_FITSCHAN.
-* 20-MAR-1997 (DSB):
-* Functions for accessing named keywords removed. Others renamed.
-* 28-APR-1997 (DSB):
-* FindFits and GetFits merged.
-* 10-SEP-2004 (TIMJ):
-* Only copy the fits header to fortran string if it was found
-* by astFindFits.
-* 17-NOV-2004 (DSB):
-* Added AST_SETFITS<X>
-* 7-OCT-2005 (DSB):
-* Added AST_GETFITS<X>
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "fitschan.h" /* C interface to the FitsChan class */
-
-#include <stddef.h>
-#include <string.h>
-
-/* Prototypes for private functions. */
-/* ================================= */
-static char *SourceWrap( const char *(*)( void ), int * );
-static void SinkWrap( void (*)( const char * ), const char *, int * );
-
-/* Prototypes for external functions. */
-/* ================================== */
-/* This is the null function defined by the FORTRAN interface in fobject.c. */
-F77_SUBROUTINE(ast_null)( void );
-
-/* Source and sink function interfaces. */
-/* ==================================== */
-/* These functions are concerned with allowing FORTRAN implementations
- of FitsChan source and sink functions to be passed to the FitsChan
- class and invoked when necessary by C code in the main class
- implementation. All FORTRAN-specific aspects of this interface are
- encapsulated here. */
-static void SinkWrap( void (* sink)( const char * ), const char *line,
- int *status ) {
-/*
-* Name:
-* SinkWrap
-
-* Purpose:
-* Wrapper function to invoke a FORTRAN FitsChan sink function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* static void SinkWrap( void (* sink)( const char * ), const char *line,
-* int *status )
-
-* Description:
-* This function invokes the sink function whose pointer is
-* supplied in order to write an output line to an external data
-* store.
-
-* Parameters:
-* sink
-* Pointer to a sink function. This should result from a cast
-* applied to a pointer to a function (with two FORTRAN
-* arguments: a character string of length 80 to receive a FITS
-* card and an integer error status), that returns void. This
-* is the form of FitsChan sink function employed by the FORTRAN
-* language interface to the AST library.
-* status
-* Pointer to inherited status value.
-*/
-
-/* Local Variables: */
- DECLARE_CHARACTER(CARD,80);
- DECLARE_INTEGER(STATUS);
- char *d;
- const char *c;
- int i,lim;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Copy the supplied null terminated string to a fixed length, blank
- padded string which can be passed to the Fortran routine. */
- c = line;
- d = CARD;
-
- lim = (int) strlen( line );
- if( lim > 80 ) lim = 80;
-
- for( i = 0; i < lim; i++ ){
- *(d++) = (*c++);
- }
-
- for( ; i < 80; i++ ){
- *(d++) = ' ';
- }
-
-/* Cast the sink function pointer to a pointer to the FORTRAN
- subroutine and then invoke it. Transfer the AST error status to and
- from the subroutine's error status argument. */
- STATUS = astStatus;
- ( ( void (*)() ) sink )( CHARACTER_ARG(CARD), INTEGER_ARG(&STATUS)
- TRAIL_ARG(CARD) );
- astSetStatus( STATUS );
-}
-
-static char *SourceWrap( const char *(* source)( void ), int *status ) {
-/*
-* Name:
-* SourceWrap
-
-* Purpose:
-* Wrapper function to invoke a FORTRAN FitsChan source function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* static char *SourceWrap( const char *(* source)( void ), int *status )
-
-* Description:
-* This function invokes the source function whose pointer is
-* supplied in order to read the next input line from an external
-* data store. It then returns a pointer to a dynamic string
-* containing a copy of the text that was read.
-
-* Parameters:
-* source
-* Pointer to a source function. This should result from a cast
-* applied to a pointer to a function (with two FORTRAN
-* arguments: a character string of length 80 to return a FITS
-* card and an integer error status), that returns a Fortran
-* integer. This is the form of FitsChan source function
-* employed by the FORTRAN language interface to the AST
-* library.
-* status
-* Pointer to inherited status.
-
-* Returned Value:
-* A pointer to a dynamically allocated, null terminated string
-* containing a copy of the text that was read. This string must be
-* freed by the caller (using astFree) when no longer required.
-*
-* A NULL pointer will be returned if there is no more input text
-* to read.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- DECLARE_CHARACTER(CARD,81); /* Fixed length Fortran string */
- DECLARE_INTEGER(STATUS); /* Fortran error status value */
- char *result; /* Result pointer to return */
- int retval; /* Value returned by source subroutine */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Cast the source function pointer to a pointer to the FORTRAN
- function and then invoke it. Transfer the AST error status to and
- from the subroutine's error status argument. */
- STATUS = astStatus;
- retval = ( *(F77_INTEGER_TYPE (*)()) source )( CHARACTER_ARG(CARD),
- INTEGER_ARG(&STATUS)
- TRAIL_ARG(CARD) );
- astSetStatus( STATUS );
-
-/* If a card was returned, make a dynamic copy of it. */
- if ( astOK && retval ) result = astString( CARD, 80 );
-
-/* Return the result. */
- return result;
-}
-
-/* FORTRAN interface functions. */
-/* ============================ */
-/* These functions implement the remainder of the FORTRAN interface. */
-F77_INTEGER_FUNCTION(ast_fitschan)( F77_INTEGER_TYPE (* SOURCE)(),
- void (* SINK)(),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- const char *(* source)( void );
- int i;
- void (* sink)( const char * );
-
- astAt( "AST_FITSCHAN", NULL, 0 );
- astWatchSTATUS(
-
-/* Set the source and sink function pointers to NULL if a pointer to
- the null routine AST_NULL has been supplied. */
- source = (const char *(*)( void )) SOURCE;
- if ( source == (const char *(*)( void )) F77_EXTERNAL_NAME(ast_null) ) {
- source = NULL;
- }
- sink = (void (*)( const char * )) SINK;
- if ( sink == (void (*)( const char * )) F77_EXTERNAL_NAME(ast_null) ) {
- sink = NULL;
- }
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astFitsChanFor( source, SourceWrap, sink, SinkWrap,
- "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_isafitschan)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAFITSCHAN", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAFitsChan( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_SUBROUTINE(ast_putcards)( INTEGER(THIS),
- CHARACTER(CARDS),
- INTEGER(STATUS)
- TRAIL(CARDS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(CARDS)
- char *cards;
-
- astAt( "AST_PUTCARDS", NULL, 0 );
- astWatchSTATUS(
- cards = astString( CARDS, CARDS_length );
- astPutCards( astI2P( *THIS ), cards );
- (void) astFree( (void *) cards );
- )
-}
-
-F77_SUBROUTINE(ast_putfits)( INTEGER(THIS),
- CHARACTER(CARD),
- LOGICAL(OVERWRITE),
- INTEGER(STATUS)
- TRAIL(CARD) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(CARD)
- GENPTR_LOGICAL(OVERWRITE)
- int overwrite;
- char *card;
-
- astAt( "AST_PUTFITS", NULL, 0 );
- astWatchSTATUS(
- card = astString( CARD, CARD_length );
- overwrite = F77_ISTRUE( *OVERWRITE );
- astPutFits( astI2P( *THIS ), card, overwrite );
- (void) astFree( (void *) card );
- )
-}
-
-F77_SUBROUTINE(ast_delfits)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
-
- astAt( "AST_DELFITS", NULL, 0 );
- astWatchSTATUS(
- astDelFits( astI2P( *THIS ) );
- )
-}
-
-F77_SUBROUTINE(ast_purgewcs)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
-
- astAt( "AST_PURGEWCS", NULL, 0 );
- astWatchSTATUS(
- astPurgeWCS( astI2P( *THIS ) );
- )
-}
-
-F77_SUBROUTINE(ast_retainfits)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
-
- astAt( "AST_RETAINFITS", NULL, 0 );
- astWatchSTATUS(
- astRetainFits( astI2P( *THIS ) );
- )
-}
-
-F77_LOGICAL_FUNCTION(ast_findfits)( INTEGER(THIS),
- CHARACTER(NAME),
- CHARACTER(CARD),
- LOGICAL(INC),
- INTEGER(STATUS)
- TRAIL(NAME)
- TRAIL(CARD) ){
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(NAME)
- GENPTR_CHARACTER(CARD)
- GENPTR_LOGICAL(INC)
- F77_LOGICAL_TYPE(RESULT);
- int i, len;
- char *name;
- char card[ 81 ];
- int inc;
-
- astAt( "AST_FINDFITS", NULL, 0 );
- astWatchSTATUS(
- name = astString( NAME, NAME_length );
- inc = F77_ISTRUE( *INC );
- RESULT = astFindFits( astI2P( *THIS ), name, card, inc ) ?
- F77_TRUE : F77_FALSE;
- i = 0;
- if ( astOK && F77_ISTRUE(RESULT) ) {
- len = (int) strlen( card );
- for( i = 0; i < CARD_length && i < len; i++ ) CARD[i] = card[i];
- }
- for( ; i < CARD_length; i++ ) CARD[i] = ' ';
- (void) astFree( (void *) name );
- )
- return RESULT;
-}
-
-
-F77_SUBROUTINE(ast_setfitsf)( INTEGER(THIS),
- CHARACTER(NAME),
- DOUBLE(VALUE),
- CHARACTER(COMMENT),
- LOGICAL(OVERWRITE),
- INTEGER(STATUS)
- TRAIL(NAME)
- TRAIL(COMMENT) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(NAME)
- GENPTR_DOUBLE(VALUE)
- GENPTR_CHARACTER(COMMENT)
- GENPTR_LOGICAL(OVERWRITE)
- int overwrite;
- char *name, *comment;
-
- astAt( "AST_SETFITSF", NULL, 0 );
- astWatchSTATUS(
- name = astString( NAME, NAME_length );
- comment = astString( COMMENT, COMMENT_length );
- overwrite = F77_ISTRUE( *OVERWRITE );
- astSetFitsF( astI2P( *THIS ), name, *VALUE, comment, overwrite );
- (void) astFree( (void *) name );
- (void) astFree( (void *) comment );
- )
-}
-
-F77_SUBROUTINE(ast_setfitsu)( INTEGER(THIS),
- CHARACTER(NAME),
- CHARACTER(COMMENT),
- LOGICAL(OVERWRITE),
- INTEGER(STATUS)
- TRAIL(NAME)
- TRAIL(COMMENT) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(NAME)
- GENPTR_CHARACTER(COMMENT)
- GENPTR_LOGICAL(OVERWRITE)
- int overwrite;
- char *name, *comment;
-
- astAt( "AST_SETFITSU", NULL, 0 );
- astWatchSTATUS(
- name = astString( NAME, NAME_length );
- comment = astString( COMMENT, COMMENT_length );
- overwrite = F77_ISTRUE( *OVERWRITE );
- astSetFitsU( astI2P( *THIS ), name, comment, overwrite );
- (void) astFree( (void *) name );
- (void) astFree( (void *) comment );
- )
-}
-
-F77_SUBROUTINE(ast_setfitscm)( INTEGER(THIS),
- CHARACTER(COMMENT),
- LOGICAL(OVERWRITE),
- INTEGER(STATUS)
- TRAIL(COMMENT) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(COMMENT)
- GENPTR_LOGICAL(OVERWRITE)
- int overwrite;
- char *comment;
-
- astAt( "AST_SETFITSCM", NULL, 0 );
- astWatchSTATUS(
- comment = astString( COMMENT, COMMENT_length );
- overwrite = F77_ISTRUE( *OVERWRITE );
- astSetFitsCM( astI2P( *THIS ), comment, overwrite );
- (void) astFree( (void *) comment );
- )
-}
-
-
-F77_SUBROUTINE(ast_setfitsi)( INTEGER(THIS),
- CHARACTER(NAME),
- INTEGER(VALUE),
- CHARACTER(COMMENT),
- LOGICAL(OVERWRITE),
- INTEGER(STATUS)
- TRAIL(NAME)
- TRAIL(COMMENT) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(NAME)
- GENPTR_INTEGER(VALUE)
- GENPTR_CHARACTER(COMMENT)
- GENPTR_LOGICAL(OVERWRITE)
- int overwrite;
- char *name, *comment;
-
- astAt( "AST_SETFITSI", NULL, 0 );
- astWatchSTATUS(
- name = astString( NAME, NAME_length );
- comment = astString( COMMENT, COMMENT_length );
- overwrite = F77_ISTRUE( *OVERWRITE );
- astSetFitsI( astI2P( *THIS ), name, *VALUE, comment, overwrite );
- (void) astFree( (void *) name );
- (void) astFree( (void *) comment );
- )
-}
-
-
-F77_SUBROUTINE(ast_setfitscf)( INTEGER(THIS),
- CHARACTER(NAME),
- DOUBLE_ARRAY(VALUE),
- CHARACTER(COMMENT),
- LOGICAL(OVERWRITE),
- INTEGER(STATUS)
- TRAIL(NAME)
- TRAIL(COMMENT) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(NAME)
- GENPTR_DOUBLE_ARRAY(VALUE)
- GENPTR_CHARACTER(COMMENT)
- GENPTR_LOGICAL(OVERWRITE)
- int overwrite;
- char *name, *comment;
-
- astAt( "AST_SETFITSCF", NULL, 0 );
- astWatchSTATUS(
- name = astString( NAME, NAME_length );
- comment = astString( COMMENT, COMMENT_length );
- overwrite = F77_ISTRUE( *OVERWRITE );
- astSetFitsCF( astI2P( *THIS ), name, VALUE, comment, overwrite );
- (void) astFree( (void *) name );
- (void) astFree( (void *) comment );
- )
-}
-
-
-F77_SUBROUTINE(ast_setfitsci)( INTEGER(THIS),
- CHARACTER(NAME),
- INTEGER_ARRAY(VALUE),
- CHARACTER(COMMENT),
- LOGICAL(OVERWRITE),
- INTEGER(STATUS)
- TRAIL(NAME)
- TRAIL(COMMENT) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(NAME)
- GENPTR_INTEGER_ARRAY(VALUE)
- GENPTR_CHARACTER(COMMENT)
- GENPTR_LOGICAL(OVERWRITE)
- int overwrite;
- char *name, *comment;
-
- astAt( "AST_SETFITSCI", NULL, 0 );
- astWatchSTATUS(
- name = astString( NAME, NAME_length );
- comment = astString( COMMENT, COMMENT_length );
- overwrite = F77_ISTRUE( *OVERWRITE );
- astSetFitsCI( astI2P( *THIS ), name, VALUE, comment, overwrite );
- (void) astFree( (void *) name );
- (void) astFree( (void *) comment );
- )
-}
-
-
-F77_SUBROUTINE(ast_setfitsl)( INTEGER(THIS),
- CHARACTER(NAME),
- LOGICAL(VALUE),
- CHARACTER(COMMENT),
- LOGICAL(OVERWRITE),
- INTEGER(STATUS)
- TRAIL(NAME)
- TRAIL(COMMENT) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(NAME)
- GENPTR_LOGICAL(VALUE)
- GENPTR_CHARACTER(COMMENT)
- GENPTR_LOGICAL(OVERWRITE)
- int overwrite, value;
- char *name, *comment;
-
- astAt( "AST_SETFITSL", NULL, 0 );
- astWatchSTATUS(
- name = astString( NAME, NAME_length );
- comment = astString( COMMENT, COMMENT_length );
- overwrite = F77_ISTRUE( *OVERWRITE );
- value = F77_ISTRUE( *VALUE );
- astSetFitsL( astI2P( *THIS ), name, value, comment, overwrite );
- (void) astFree( (void *) name );
- (void) astFree( (void *) comment );
- )
-}
-
-
-F77_SUBROUTINE(ast_setfitss)( INTEGER(THIS),
- CHARACTER(NAME),
- CHARACTER(VALUE),
- CHARACTER(COMMENT),
- LOGICAL(OVERWRITE),
- INTEGER(STATUS)
- TRAIL(NAME)
- TRAIL(VALUE)
- TRAIL(COMMENT) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(NAME)
- GENPTR_CHARACTER(VALUE)
- GENPTR_CHARACTER(COMMENT)
- GENPTR_LOGICAL(OVERWRITE)
- int overwrite;
- char *name, *comment, *value;
-
- astAt( "AST_SETFITSS", NULL, 0 );
- astWatchSTATUS(
- name = astString( NAME, NAME_length );
- value = astString( VALUE, VALUE_length );
- comment = astString( COMMENT, COMMENT_length );
- overwrite = F77_ISTRUE( *OVERWRITE );
- astSetFitsS( astI2P( *THIS ), name, value, comment, overwrite );
- (void) astFree( (void *) name );
- (void) astFree( (void *) value );
- (void) astFree( (void *) comment );
- )
-}
-
-F77_SUBROUTINE(ast_setfitscn)( INTEGER(THIS),
- CHARACTER(NAME),
- CHARACTER(VALUE),
- CHARACTER(COMMENT),
- LOGICAL(OVERWRITE),
- INTEGER(STATUS)
- TRAIL(NAME)
- TRAIL(VALUE)
- TRAIL(COMMENT) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(NAME)
- GENPTR_CHARACTER(VALUE)
- GENPTR_CHARACTER(COMMENT)
- GENPTR_LOGICAL(OVERWRITE)
- int overwrite;
- char *name, *comment, *value;
-
- astAt( "AST_SETFITSS", NULL, 0 );
- astWatchSTATUS(
- name = astString( NAME, NAME_length );
- value = astString( VALUE, VALUE_length );
- comment = astString( COMMENT, COMMENT_length );
- overwrite = F77_ISTRUE( *OVERWRITE );
- astSetFitsCN( astI2P( *THIS ), name, value, comment, overwrite );
- (void) astFree( (void *) name );
- (void) astFree( (void *) value );
- (void) astFree( (void *) comment );
- )
-}
-
-#define MAKE_AST_GETFITS(f,F,Ftype,X,Xtype) \
-F77_LOGICAL_FUNCTION(ast_getfits##f)( INTEGER(THIS), \
- CHARACTER(NAME), \
- Ftype(VALUE), \
- INTEGER(STATUS) \
- TRAIL(NAME) ){ \
- GENPTR_INTEGER(THIS) \
- GENPTR_CHARACTER(NAME) \
- GENPTR_##Ftype(VALUE) \
- GENPTR_INTEGER(STATUS) \
- F77_LOGICAL_TYPE(RESULT); \
-\
- char *name; \
- Xtype *value; \
-\
- value = (Xtype *) VALUE; \
-\
- astAt( "AST_GETFITS"#F, NULL, 0 ); \
- astWatchSTATUS( \
- name = astString( NAME, NAME_length ); \
- RESULT = astGetFits##X( astI2P( *THIS ), name, value ) ? \
- F77_TRUE : F77_FALSE; \
- (void) astFree( (void *) name ); \
- ) \
- return RESULT; \
-}
-
-MAKE_AST_GETFITS(f,F,DOUBLE,F,double)
-MAKE_AST_GETFITS(i,I,INTEGER,I,int)
-MAKE_AST_GETFITS(l,L,LOGICAL,L,int)
-#undef MAKE_AST_GETFITS
-
-
-F77_LOGICAL_FUNCTION(ast_testfits)( INTEGER(THIS),
- CHARACTER(NAME),
- LOGICAL(THERE),
- INTEGER(STATUS)
- TRAIL(NAME) ){
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(NAME)
- GENPTR_LOGICAL(THERE)
- GENPTR_INTEGER(STATUS)
- F77_LOGICAL_TYPE(RESULT);
-
- char *name;
- int there;
-
- astAt( "AST_TESTFITS", NULL, 0 );
- astWatchSTATUS(
- name = astString( NAME, NAME_length );
- RESULT = astTestFits( astI2P( *THIS ), name, &there ) ?
- F77_TRUE : F77_FALSE;
- (void) astFree( (void *) name );
- )
- *THERE = there ? F77_TRUE : F77_FALSE;
- return RESULT;
-}
-
-
-#define MAKE_AST_GETFITS(f,F,Ftype,X,Xtype) \
-F77_LOGICAL_FUNCTION(ast_getfits##f)( INTEGER(THIS), \
- CHARACTER(NAME), \
- Ftype##_ARRAY(VALUE), \
- INTEGER(STATUS) \
- TRAIL(NAME) ){ \
- GENPTR_INTEGER(THIS) \
- GENPTR_CHARACTER(NAME) \
- GENPTR_##Ftype##_ARRAY(VALUE) \
- GENPTR_INTEGER(STATUS) \
- F77_LOGICAL_TYPE(RESULT); \
-\
- char *name; \
- Xtype value[2]; \
-\
- astAt( "AST_GETFITS"#F, NULL, 0 ); \
- astWatchSTATUS( \
- name = astString( NAME, NAME_length ); \
- RESULT = astGetFits##X( astI2P( *THIS ), name, value ) ? \
- F77_TRUE : F77_FALSE; \
- VALUE[ 0 ] = (F77_DOUBLE_TYPE) value[ 0 ]; \
- VALUE[ 1 ] = (F77_DOUBLE_TYPE) value[ 1 ]; \
- (void) astFree( (void *) name ); \
- ) \
- return RESULT; \
-}
-
-
-MAKE_AST_GETFITS(cf,CF,DOUBLE,CF,double)
-MAKE_AST_GETFITS(ci,CI,INTEGER,CI,int)
-
-#undef MAKE_AST_GETFITS
-
-#define MAKE_AST_GETFITS(f,F,X) \
-F77_LOGICAL_FUNCTION(ast_getfits##f)( INTEGER(THIS), \
- CHARACTER(NAME), \
- CHARACTER(VALUE), \
- INTEGER(STATUS) \
- TRAIL(NAME) \
- TRAIL(VALUE) ){ \
- GENPTR_INTEGER(THIS) \
- GENPTR_CHARACTER(NAME) \
- GENPTR_CHARACTER(VALUE) \
- GENPTR_INTEGER(STATUS) \
- F77_LOGICAL_TYPE(RESULT); \
-\
- char *name; \
- int i, len; \
- char *value; \
-\
- astAt( "AST_GETFITS"#F, NULL, 0 ); \
- astWatchSTATUS( \
- name = astString( NAME, NAME_length ); \
- RESULT = astGetFits##X( astI2P( *THIS ), name, &value ) ? \
- F77_TRUE : F77_FALSE; \
- if ( astOK && F77_ISTRUE(RESULT) ) { \
- len = (int) strlen( value ); \
- for( i = 0; i < VALUE_length && i < len; i++ ) VALUE[i] = value[i]; \
- } else { \
- i = 0; \
- } \
- for( ; i < VALUE_length; i++ ) VALUE[i] = ' '; \
- (void) astFree( (void *) name ); \
- ) \
- return RESULT; \
-}
-
-MAKE_AST_GETFITS(s,S,S)
-MAKE_AST_GETFITS(cn,CN,CN)
-
-#undef MAKE_AST_GETFITS
-
-
-
diff --git a/ast-5.3-1/ffluxframe.c b/ast-5.3-1/ffluxframe.c
deleted file mode 100644
index 4b40f2f..0000000
--- a/ast-5.3-1/ffluxframe.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-*+
-* Name:
-* ffluxframe.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST FluxFrame class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the FluxFrame class.
-
-* Routines Defined:
-* AST_ISAFLUXFRAME
-* AST_FLUXFRAME
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 1-DEC-2004 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "fluxframe.h" /* C interface to the FluxFrame class */
-
-F77_LOGICAL_FUNCTION(ast_isafluxframe)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAFLUXFRAME", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAFluxFrame( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_fluxframe)( DOUBLE(SPECVAL),
- INTEGER(SPECFRM),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_DOUBLE(SPECVAL)
- GENPTR_INTEGER(SPECFRM)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- int i;
- char *options;
-
- astAt( "AST_FLUXFRAME", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astFluxFrame( *SPECVAL, astI2P( *SPECFRM ), "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
-
diff --git a/ast-5.3-1/fframe.c b/ast-5.3-1/fframe.c
deleted file mode 100644
index 37aa725..0000000
--- a/ast-5.3-1/fframe.c
+++ /dev/null
@@ -1,488 +0,0 @@
-/*
-*+
-* Name:
-* fframe.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST Frame class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the Frame class.
-
-* Routines Defined:
-* AST_ANGLE
-* AST_AXANGLE
-* AST_AXDISTANCE
-* AST_AXOFFSET
-* AST_CONVERT
-* AST_DISTANCE
-* AST_FORMAT
-* AST_FRAME
-* AST_GETACTIVEUNIT
-* AST_INTERSECT
-* AST_ISAFRAME
-* AST_NORM
-* AST_OFFSET
-* AST_OFFSET2
-* AST_PERMAXES
-* AST_PICKAXES
-* AST_RESOLVE
-* AST_SETACTIVEUNIT
-* AST_UNFORMAT
-
-* Copyright:
-* Copyright (C) 1997-2009 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 23-JUL-1996 (RFWS):
-* Original version.
-* 16-SEP-1996 (RFWS):
-* Added AST_DISTANCE and AST_OFFSET.
-* 25-FEB-1998 (RFWS):
-* Added AST_UNFORMAT.
-* 21-JUN-2001 (DSB):
-* Added AST_ANGLE and AST_OFFSET2.
-* 29-AUG-2001 (DSB):
-* Added AST_AXDISTANCE and AST_AXOFFSET.
-* 9-SEP-2001 (DSB):
-* Added AST_RESOLVE and AST_BEAR.
-* 21-SEP-2001 (DSB):
-* Replaced AST_BEAR by AST_AXANGLE.
-* 17-DEC-2002 (DSB):
-* Added AST_GETACTIVEUNIT and AST_SETACTIVEUNIT.
-* 14-JAN-2009 (DSB):
-* Added AST_INTERSECT.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "mapping.h" /* C interface to the Mapping class */
-#include "frame.h" /* C interface to the Frame class */
-
-
-F77_INTEGER_FUNCTION(ast_convert)( INTEGER(FROM),
- INTEGER(TO),
- CHARACTER(NAMELIST),
- INTEGER(STATUS)
- TRAIL(NAMELIST) ) {
- GENPTR_INTEGER(FROM)
- GENPTR_INTEGER(TO)
- GENPTR_INTEGER(NAMELIST)
- F77_INTEGER_TYPE(RESULT);
- char *namelist;
-
- astAt( "AST_CONVERT", NULL, 0 );
- astWatchSTATUS(
- namelist = astString( NAMELIST, NAMELIST_length );
- RESULT = astP2I( astConvert( astI2P( *FROM ), astI2P( *TO ),
- namelist ) );
- namelist = astFree( namelist );
- )
- return RESULT;
-}
-
-F77_DOUBLE_FUNCTION(ast_angle)( INTEGER(THIS),
- DOUBLE_ARRAY(A),
- DOUBLE_ARRAY(B),
- DOUBLE_ARRAY(C),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_DOUBLE_ARRAY(A)
- GENPTR_DOUBLE_ARRAY(B)
- GENPTR_DOUBLE_ARRAY(C)
- F77_DOUBLE_TYPE(RESULT);
-
- astAt( "AST_ANGLE", NULL, 0 );
- astWatchSTATUS(
- RESULT = astAngle( astI2P( *THIS ), A, B, C );
- )
- return RESULT;
-}
-
-F77_DOUBLE_FUNCTION(ast_axangle)( INTEGER(THIS),
- DOUBLE_ARRAY(A),
- DOUBLE_ARRAY(B),
- INTEGER(AXIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_DOUBLE_ARRAY(A)
- GENPTR_DOUBLE_ARRAY(B)
- GENPTR_INTEGER(AXIS)
- F77_DOUBLE_TYPE(RESULT);
-
- astAt( "AST_AXANGLE", NULL, 0 );
- astWatchSTATUS(
- RESULT = astAxAngle( astI2P( *THIS ), A, B, *AXIS );
- )
- return RESULT;
-}
-
-F77_DOUBLE_FUNCTION(ast_distance)( INTEGER(THIS),
- DOUBLE_ARRAY(POINT1),
- DOUBLE_ARRAY(POINT2),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_DOUBLE_ARRAY(POINT1)
- GENPTR_DOUBLE_ARRAY(POINT2)
- F77_DOUBLE_TYPE(RESULT);
-
- astAt( "AST_DISTANCE", NULL, 0 );
- astWatchSTATUS(
- RESULT = astDistance( astI2P( *THIS ), POINT1, POINT2 );
- )
- return RESULT;
-}
-
-F77_DOUBLE_FUNCTION(ast_axdistance)( INTEGER(THIS),
- INTEGER(AXIS),
- DOUBLE(V1),
- DOUBLE(V2),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(AXIS)
- GENPTR_DOUBLE(V1)
- GENPTR_DOUBLE(V2)
- F77_DOUBLE_TYPE(RESULT);
-
- astAt( "AST_AXDISTANCE", NULL, 0 );
- astWatchSTATUS(
- RESULT = astAxDistance( astI2P( *THIS ), *AXIS, *V1, *V2 );
- )
- return RESULT;
-}
-
-F77_DOUBLE_FUNCTION(ast_axoffset)( INTEGER(THIS),
- INTEGER(AXIS),
- DOUBLE(V1),
- DOUBLE(DIST),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(AXIS)
- GENPTR_DOUBLE(V1)
- GENPTR_DOUBLE(DIST)
- F77_DOUBLE_TYPE(RESULT);
-
- astAt( "AST_AXOFFSET", NULL, 0 );
- astWatchSTATUS(
- RESULT = astAxOffset( astI2P( *THIS ), *AXIS, *V1, *DIST );
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_findframe)( INTEGER(TARGET),
- INTEGER(TEMPLATE),
- CHARACTER(NAMELIST),
- INTEGER(STATUS)
- TRAIL(NAMELIST) ) {
- GENPTR_INTEGER(TARGET)
- GENPTR_INTEGER(TEMPLATE)
- GENPTR_INTEGER(NAMELIST)
- F77_INTEGER_TYPE(RESULT);
- char *namelist;
-
- astAt( "AST_FINDFRAME", NULL, 0 );
- astWatchSTATUS(
- namelist = astString( NAMELIST, NAMELIST_length );
- RESULT = astP2I( astFindFrame( astI2P( *TARGET ), astI2P( *TEMPLATE ),
- namelist ) );
- )
- return RESULT;
-}
-
-F77_SUBROUTINE(ast_matchaxes)( INTEGER(FRM1),
- INTEGER(FRM2),
- INTEGER_ARRAY(AXES),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(FRM1)
- GENPTR_INTEGER(FRM2)
- GENPTR_INTEGER_ARRAY(AXES)
-
- astAt( "AST_MATCHAXES", NULL, 0 );
- astWatchSTATUS(
- astMatchAxes( astI2P( *FRM1 ), astI2P( *FRM2 ), AXES );
- )
-}
-
-/* NO_CHAR_FUNCTION indicates that the f77.h method of returning a
- character result doesn't work, so add an extra argument instead and
- wrap this function up in a normal FORTRAN 77 function (in the file
- frame.f). */
-#if NO_CHAR_FUNCTION
-F77_SUBROUTINE(ast_format_a)( CHARACTER(RESULT),
-#else
-F77_SUBROUTINE(ast_format)( CHARACTER_RETURN_VALUE(RESULT),
-#endif
- INTEGER(THIS),
- INTEGER(AXIS),
- DOUBLE(VALUE),
- INTEGER(STATUS)
-#if NO_CHAR_FUNCTION
- TRAIL(RESULT)
-#endif
- ) {
- GENPTR_CHARACTER(RESULT)
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(AXIS)
- GENPTR_DOUBLE(VALUE)
- const char *result;
- int i;
-
- astAt( "AST_FORMAT", NULL, 0 );
- astWatchSTATUS(
- result = astFormat( astI2P( *THIS ), *AXIS, *VALUE );
- i = 0;
- if ( astOK ) { /* Copy result */
- for ( ; result[ i ] && i < RESULT_length; i++ ) {
- RESULT[ i ] = result[ i ];
- }
- }
- while ( i < RESULT_length ) RESULT[ i++ ] = ' '; /* Pad with blanks */
- )
-}
-
-F77_INTEGER_FUNCTION(ast_frame)( INTEGER(NAXES),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(NAXES)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_FRAME", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astFrame( *NAXES, "%s", options ) );
- (void) astFree( options );
- )
- return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_isaframe)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAFRAME", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAFrame( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_getactiveunit)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_GETACTIVEUNIT", NULL, 0 );
- astWatchSTATUS(
- RESULT = astGetActiveUnit( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_SUBROUTINE(ast_setactiveunit)( INTEGER(THIS),
- LOGICAL(VALUE),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_LOGICAL(VALUE)
-
- astAt( "AST_SETACTIVEUNIT", NULL, 0 );
- astWatchSTATUS(
- astSetActiveUnit( astI2P( *THIS ), F77_ISTRUE( *VALUE ) ? 1 : 0 );
- )
-}
-
-F77_SUBROUTINE(ast_norm)( INTEGER(THIS),
- DOUBLE_ARRAY(VALUE),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_DOUBLE_ARRAY(VALUE)
-
- astAt( "AST_NORM", NULL, 0 );
- astWatchSTATUS(
- astNorm( astI2P( *THIS ), VALUE );
- )
-}
-
-F77_SUBROUTINE(ast_offset)( INTEGER(THIS),
- DOUBLE_ARRAY(POINT1),
- DOUBLE_ARRAY(POINT2),
- DOUBLE(OFFSET),
- DOUBLE_ARRAY(POINT3),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_DOUBLE_ARRAY(POINT1)
- GENPTR_DOUBLE_ARRAY(POINT2)
- GENPTR_DOUBLE(OFFSET)
- GENPTR_DOUBLE_ARRAY(POINT3)
-
- astAt( "AST_OFFSET", NULL, 0 );
- astWatchSTATUS(
- astOffset( astI2P( *THIS ), POINT1, POINT2, *OFFSET, POINT3 );
- )
-}
-
-F77_DOUBLE_FUNCTION(ast_offset2)( INTEGER(THIS),
- DOUBLE_ARRAY(POINT1),
- DOUBLE(ANGLE),
- DOUBLE(OFFSET),
- DOUBLE_ARRAY(POINT2),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_DOUBLE_ARRAY(POINT1)
- GENPTR_DOUBLE(ANGLE)
- GENPTR_DOUBLE(OFFSET)
- GENPTR_DOUBLE_ARRAY(POINT2)
- F77_DOUBLE_TYPE(RESULT);
-
- astAt( "AST_OFFSET2", NULL, 0 );
- astWatchSTATUS(
- RESULT = astOffset2( astI2P( *THIS ), POINT1, *ANGLE, *OFFSET, POINT2 );
- )
- return RESULT;
-}
-
-F77_SUBROUTINE(ast_resolve)( INTEGER(THIS),
- DOUBLE_ARRAY(POINT1),
- DOUBLE_ARRAY(POINT2),
- DOUBLE_ARRAY(POINT3),
- DOUBLE_ARRAY(POINT4),
- DOUBLE(D1),
- DOUBLE(D2),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_DOUBLE_ARRAY(POINT1)
- GENPTR_DOUBLE_ARRAY(POINT2)
- GENPTR_DOUBLE_ARRAY(POINT3)
- GENPTR_DOUBLE_ARRAY(POINT4)
- GENPTR_DOUBLE(D1)
- GENPTR_DOUBLE(D2)
-
- astAt( "AST_RESOLVE", NULL, 0 );
- astWatchSTATUS(
- astResolve( astI2P( *THIS ), POINT1, POINT2, POINT3, POINT4, D1, D2 );
- )
-}
-
-F77_SUBROUTINE(ast_intersect)( INTEGER(THIS),
- DOUBLE_ARRAY(A1),
- DOUBLE_ARRAY(A2),
- DOUBLE_ARRAY(B1),
- DOUBLE_ARRAY(B2),
- DOUBLE_ARRAY(CROSS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_DOUBLE_ARRAY(A1)
- GENPTR_DOUBLE_ARRAY(A2)
- GENPTR_DOUBLE_ARRAY(B1)
- GENPTR_DOUBLE_ARRAY(B2)
- GENPTR_DOUBLE_ARRAY(CROSS)
-
- astAt( "AST_INTERSECT", NULL, 0 );
- astWatchSTATUS(
- astIntersect( astI2P( *THIS ), A1, A2, B1, B2, CROSS );
- )
-}
-
-F77_SUBROUTINE(ast_permaxes)( INTEGER(THIS),
- INTEGER_ARRAY(PERM),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER_ARRAY(PERM)
-
- astAt( "AST_PERMAXES", NULL, 0 );
- astWatchSTATUS(
- astPermAxes( astI2P( *THIS ), PERM );
- )
-}
-
-F77_INTEGER_FUNCTION(ast_pickaxes)( INTEGER(THIS),
- INTEGER(NAXES),
- INTEGER_ARRAY(AXES),
- INTEGER(MAP),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(NAXES)
- GENPTR_INTEGER_ARRAY(AXES)
- GENPTR_INTEGER(MAP)
- F77_INTEGER_TYPE(RESULT);
- AstMapping *map;
-
- astAt( "AST_PICKAXES", NULL, 0 );
- astWatchSTATUS(
- RESULT = astP2I( astPickAxes( astI2P( *THIS ), *NAXES, AXES, &map ) );
- *MAP = astP2I( map );
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_unformat)( INTEGER(THIS),
- INTEGER(AXIS),
- CHARACTER(STRING),
- DOUBLE(VALUE),
- INTEGER(STATUS)
- TRAIL(STRING) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(AXIS)
- GENPTR_CHARACTER(STRING)
- GENPTR_DOUBLE(VALUE)
- GENPTR_INTEGER(STATUS)
- F77_INTEGER_TYPE(RESULT);
- char *string;
- double value;
-
- astAt( "AST_UNFORMAT", NULL, 0 );
- astWatchSTATUS(
- string = astString( STRING, STRING_length );
-
- RESULT = astUnformat( astI2P( *THIS ), *AXIS, string, &value );
- *VALUE = value;
- (void) astFree( string );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fframeset.c b/ast-5.3-1/fframeset.c
deleted file mode 100644
index e1dbd6a..0000000
--- a/ast-5.3-1/fframeset.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
-*+
-* Name:
-* fframeset.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST FrameSet class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the FrameSet class.
-
-* Routines Defined:
-* AST_ADDFRAME
-* AST_FRAMESET
-* AST_GETFRAME
-* AST_GETMAPPING
-* AST_ISAFRAMESET
-* AST_REMAPFRAME
-* AST_REMOVEFRAME
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 1-AUG-1996 (RFWS):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "mapping.h" /* C interface to the Mapping class */
-#include "frame.h" /* C interface to the Frame class */
-#include "frameset.h" /* C interface to the FrameSet class */
-
-F77_SUBROUTINE(ast_addframe)( INTEGER(THIS),
- INTEGER(IFRAME),
- INTEGER(MAP),
- INTEGER(FRAME),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(IFRAME)
- GENPTR_INTEGER(MAP)
- GENPTR_INTEGER(FRAME)
-
- astAt( "AST_ADDFRAME", NULL, 0 );
- astWatchSTATUS(
- astAddFrame( astI2P( *THIS ), *IFRAME, astI2P( *MAP ),
- astI2P( *FRAME ) );
- )
-}
-
-F77_INTEGER_FUNCTION(ast_frameset)( INTEGER(FRAME),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(FRAME)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_FRAMESET", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astFrameSet( astI2P( *FRAME ), "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_getframe)( INTEGER(THIS),
- INTEGER(IFRAME),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(IFRAME)
- F77_INTEGER_TYPE(RESULT);
-
- astAt( "AST_GETFRAME", NULL, 0 );
- astWatchSTATUS(
- RESULT = astP2I( astGetFrame( astI2P( *THIS ), *IFRAME ) );
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_getmapping)( INTEGER(THIS),
- INTEGER(IFRAME1),
- INTEGER(IFRAME2),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(IFRAME1)
- GENPTR_INTEGER(IFRAME2)
- F77_INTEGER_TYPE(RESULT);
-
- astAt( "AST_GETMAPPING", NULL, 0 );
- astWatchSTATUS(
- RESULT = astP2I( astGetMapping( astI2P( *THIS ), *IFRAME1, *IFRAME2 ) );
- )
- return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_isaframeset)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAFRAMESET", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAFrameSet( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_SUBROUTINE(ast_remapframe)( INTEGER(THIS),
- INTEGER(IFRAME),
- INTEGER(MAP),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(IFRAME)
- GENPTR_INTEGER(MAP)
-
- astAt( "AST_REMAPFRAME", NULL, 0 );
- astWatchSTATUS(
- astRemapFrame( astI2P( *THIS ), *IFRAME, astI2P( *MAP ) );
- )
-}
-
-F77_SUBROUTINE(ast_removeframe)( INTEGER(THIS),
- INTEGER(IFRAME),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(IFRAME)
-
- astAt( "AST_REMOVEFRAME", NULL, 0 );
- astWatchSTATUS(
- astRemoveFrame( astI2P( *THIS ), *IFRAME );
- )
-}
diff --git a/ast-5.3-1/fgrismmap.c b/ast-5.3-1/fgrismmap.c
deleted file mode 100644
index cd3b5d6..0000000
--- a/ast-5.3-1/fgrismmap.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-*+
-* Name:
-* fgrismmap.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST GrismMap class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the GrismMap class.
-
-* Routines Defined:
-* AST_ISAGRISMMAP
-* AST_GRISMMAP
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 10-JUL-2003 (RFWS):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "grismmap.h" /* C interface to the GrismMap class */
-
-F77_LOGICAL_FUNCTION(ast_isagrismmap)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAGRISMMAP", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAGrismMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_grismmap)( CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_GRISMMAP", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astGrismMap( "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/finterval.c b/ast-5.3-1/finterval.c
deleted file mode 100644
index f10b074..0000000
--- a/ast-5.3-1/finterval.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-*+
-* Name:
-* finterval.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST Interval class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the Interval class.
-
-* Routines Defined:
-* AST_ISAINTERVAL
-* AST_INTERVAL
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 31-AUG-2004 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "interval.h" /* C interface to the Interval class */
-
-
-F77_LOGICAL_FUNCTION(ast_isainterval)( INTEGER(THIS), INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAINTERVAL", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAInterval( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_interval)( INTEGER(FRAME),
- DOUBLE_ARRAY(LBND),
- DOUBLE_ARRAY(UBND),
- INTEGER(UNC),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(FRAME)
- GENPTR_DOUBLE_ARRAY(LBND)
- GENPTR_DOUBLE_ARRAY(UBND)
- GENPTR_INTEGER(UNC)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_INTERVAL", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
-
- RESULT = astP2I( astInterval( astI2P( *FRAME ), LBND, UBND,
- astI2P( *UNC ), "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fintramap.c b/ast-5.3-1/fintramap.c
deleted file mode 100644
index 46c79e0..0000000
--- a/ast-5.3-1/fintramap.c
+++ /dev/null
@@ -1,329 +0,0 @@
-/*
-*+
-* Name:
-* fintramap.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST IntraMap class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the IntraMap class.
-
-* Routines Defined:
-* AST_INTRAMAP
-* AST_INTRAREG
-* AST_ISAINTRAMAP
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 18-MAR-1998 (RFWS):
-* Original version.
-* 15-SEP-1999 (RFWS):
-* Added a THIS pointer to the external transformation function
-* used by an IntraMap.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "intramap.h" /* C interface to the IntraMap class */
-
-#include <stddef.h>
-#include <string.h>
-
-/* Prototypes for private functions. */
-/* ================================= */
-static void TranWrap( void (*)( AstMapping *, int, int, const double *[], int, int, double *[] ), AstMapping *, int, int, const double *[], int, int, double *[], int * );
-
-/* Transformation function interface. */
-/* ================================== */
-/* This is concerned with allowing FORTRAN implementations of
- transformation functions to be passed to the IntraMap class and
- invoked when necessary by C code in the main class
- implementation. All FORTRAN-specific aspects of this interface are
- encapsulated here. */
-static void TranWrap( void (* tran)( AstMapping *, int, int, const double *[],
- int, int, double *[] ),
- AstMapping *this, int npoint, int ncoord_in,
- const double *ptr_in[], int forward, int ncoord_out,
- double *ptr_out[], int *status ) {
-/*
-* Name:
-* TranWrap
-
-* Purpose:
-* Wrapper function to invoke a FORTRAN transformation function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void TranWrap( void (* tran)( AstMapping *, int, int, const double *[],
-* int, int, double *[] ),
-* AstMapping *this, int npoint, int ncoord_in,
-* const double *ptr_in[], int forward, int ncoord_out,
-* double *ptr_out[], int *status )
-
-* Description:
-* This function invokes a FORTRAN implementation of a
-* transformation function (which resembles AST_TRANN from the
-* Mapping class FORTRAN interface) in order to make it callable by
-* C code which would prefer to call a C function that resembles
-* astTranP (from the Mapping class C interface).
-
-* Parameters:
-* tran
-* Pointer to the FORTRAN transformation function to be invoked.
-* This should result from a cast applied to a pointer to a
-* function that resembles AST_TRANN (but with the first
-* argument omitted).
-* this
-* An external Mapping ID associated with the internal (true C) pointer
-* for the IntraMap whose transformation is being evaluated.
-* npoint
-* The number of points to be transformed.
-* ncoord_in
-* The number of coordinates being supplied for each input point
-* (i.e. the number of dimensions of the space in which the
-* input points reside).
-* ptr_in
-* An array of pointers to double, with "ncoord_in"
-* elements. Element "ptr_in[coord]" should point at the first
-* element of an array of double (with "npoint" elements) which
-* contain the values of coordinate number "coord" for each
-* input (untransformed) point. The value of coordinate number
-* "coord" for input point number "point" is therefore given by
-* "ptr_in[coord][point]".
-* forward
-* A non-zero value indicates that the forward coordinate
-* transformation is to be applied, while a zero value indicates
-* that the inverse transformation should be used.
-* ncoord_out
-* The number of coordinates being generated for each output
-* point (i.e. the number of dimensions of the space in which
-* the output points reside). This need not be the same as
-* "ncoord_in".
-* ptr_out
-* An array of pointers to double, with "ncoord_out"
-* elements. Element "ptr_out[coord]" should point at the first
-* element of an array of double (with "npoint" elements) into
-* which the values of coordinate number "coord" for each output
-* (transformed) point will be written. The value of coordinate
-* number "coord" for output point number "point" will therefore
-* be found in "ptr_out[coord][point]".
-* status
-* Pointer to the inherited status value.
-*/
-
-/* Local Variables; */
- DECLARE_INTEGER(INDIM); /* First dimension size of input array */
- DECLARE_INTEGER(NCOORD_IN); /* Number of input coordinates */
- DECLARE_INTEGER(NCOORD_OUT); /* Number of output coordinates */
- DECLARE_INTEGER(NPOINT); /* Number of points */
- DECLARE_INTEGER(OUTDIM); /* First dimension size of output array */
- DECLARE_INTEGER(STATUS); /* FORTRAN error status variable */
- DECLARE_INTEGER(THIS); /* External ID for the IntraMap */
- DECLARE_LOGICAL(FORWARD); /* Use forward transformation? */
- F77_DOUBLE_TYPE *IN; /* Input coordinate array for FORTRAN */
- F77_DOUBLE_TYPE *OUT; /* Output coordinate array for FORTRAN */
- int coord; /* Loop counter for coordinates */
- int i; /* Index into FORTRAN arrays */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Assign input values to the arguments for the FORTRAN transformation
- function. */
- THIS = astP2I( this );
- NPOINT = npoint;
- NCOORD_IN = ncoord_in;
- INDIM = npoint;
- FORWARD = forward ? F77_TRUE : F77_FALSE;
- NCOORD_OUT = ncoord_out;
- OUTDIM = npoint;
-
-/* Since the input/output coordinate values may be stored in separate
- arrays, we must move them temporarily into new 2-dimensional
- arrays, as required by the FORTRAN transformation function
- interface. Allocate memory for these arrays. */
- IN = astMalloc( (size_t) ( npoint * ncoord_in ) *
- sizeof( F77_DOUBLE_TYPE ) );
- OUT = astMalloc( (size_t) ( npoint * ncoord_out ) *
- sizeof( F77_DOUBLE_TYPE ) );
-
-/* If OK, fill the input array with coordinate values. Use "memcpy" to
- avoid numerical errors if the data contain junk - this allows the
- transformation function to produce the appropriate error instead of
- it happening here. */
- if ( astOK ) {
- i = 0;
- for ( coord = 0; coord < ncoord_in; coord++ ) {
- (void) memcpy( IN + i, ptr_in[ coord ],
- (size_t) npoint * sizeof( F77_DOUBLE_TYPE ) );
- i += npoint;
- }
- }
-
-/* Cast the transformation function pointer to a pointer to the
- FORTRAN subroutine and then invoke it. Transfer the AST error
- status to and from the subroutine's error status argument. */
- if ( astOK ) {
- STATUS = astStatus;
- ( *(void (*)()) tran )( INTEGER_ARG(&THIS),
- INTEGER_ARG(&NPOINT),
- INTEGER_ARG(&NCOORD_IN),
- INTEGER_ARG(&INDIM),
- DOUBLE_ARRAY_ARG(IN),
- LOGICAL_ARG(&FORWARD),
- INTEGER_ARG(&NCOORD_OUT),
- INTEGER_ARG(&OUTDIM),
- DOUBLE_ARRAY_ARG(OUT),
- INTEGER_ARG(&STATUS) );
- astSetStatus( STATUS );
- }
-
-
-/* If OK, transfer the transformed coordinate values to the output
- arrays. */
- if ( astOK ) {
- i = 0;
- for ( coord = 0; coord < ncoord_out; coord++ ) {
- (void) memcpy( ptr_out[ coord ], OUT + i,
- (size_t) npoint * sizeof( F77_DOUBLE_TYPE ) );
- i += npoint;
- }
- }
-
-/* Free the temporary arrays. */
- astFree( IN );
- astFree( OUT );
-}
-
-/* FORTRAN interface functions. */
-/* ============================ */
-/* These functions implement the remainder of the FORTRAN interface. */
-F77_SUBROUTINE(ast_intrareg)( CHARACTER(NAME),
- INTEGER(NIN),
- INTEGER(NOUT),
- void (* TRAN)(),
- INTEGER(FLAGS),
- CHARACTER(PURPOSE),
- CHARACTER(AUTHOR),
- CHARACTER(CONTACT),
- INTEGER(STATUS)
- TRAIL(NAME)
- TRAIL(PURPOSE)
- TRAIL(AUTHOR)
- TRAIL(CONTACT) ) {
- GENPTR_CHARACTER(NAME)
- GENPTR_INTEGER(NIN)
- GENPTR_INTEGER(NOUT)
- GENPTR_INTEGER(FLAGS)
- GENPTR_CHARACTER(PURPOSE)
- GENPTR_CHARACTER(AUTHOR)
- GENPTR_CHARACTER(CONTACT)
- char *name;
- void (* tran)( AstMapping *, int, int, const double *[], int, int,
- double *[] );
- char *purpose;
- char *author;
- char *contact;
-
- astAt( "AST_INTRAREG", NULL, 0 );
- astWatchSTATUS(
- name = astString( NAME, NAME_length );
- tran =
- (void (*)( AstMapping *, int, int, const double *[], int, int,
- double *[] )) TRAN;
- purpose = astString( PURPOSE, PURPOSE_length );
- author = astString( AUTHOR, AUTHOR_length );
- contact = astString( CONTACT, CONTACT_length );
- astIntraRegFor( name, *NIN, *NOUT, tran, TranWrap, *FLAGS, purpose,
- author, contact );
- astFree( name );
- astFree( purpose );
- astFree( author );
- astFree( contact );
- )
-}
-
-F77_INTEGER_FUNCTION(ast_intramap)( CHARACTER(NAME),
- INTEGER(NIN),
- INTEGER(NOUT),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(NAME)
- TRAIL(OPTIONS) ) {
- GENPTR_CHARACTER(NAME)
- GENPTR_INTEGER(NIN)
- GENPTR_INTEGER(NOUT)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *name;
- char *options;
- int i;
-
- astAt( "AST_INTRAMAP", NULL, 0 );
- astWatchSTATUS(
- name = astString( NAME, NAME_length );
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astIntraMap( name, *NIN, *NOUT, "%s", options ) );
- astFree( name );
- astFree( options );
- )
- return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_isaintramap)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAINTRAMAP", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAIntraMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fitschan.c b/ast-5.3-1/fitschan.c
deleted file mode 100644
index 04b5c15..0000000
--- a/ast-5.3-1/fitschan.c
+++ /dev/null
@@ -1,35993 +0,0 @@
-/*
-*class++
-* Name:
-* FitsChan
-
-* Purpose:
-* I/O Channel using FITS header cards to represent Objects.
-
-* Constructor Function:
-c astFitsChan
-f AST_FITSCHAN
-
-* Description:
-* A FitsChan is a specialised form of Channel which supports I/O
-* operations involving the use of FITS (Flexible Image Transport
-* System) header cards. Writing an Object to a FitsChan (using
-c astWrite) will, if the Object is suitable, generate a
-f AST_WRITE) will, if the Object is suitable, generate a
-* description of that Object composed of FITS header cards, and
-* reading from a FitsChan will create a new Object from its FITS
-* header card description.
-*
-* While a FitsChan is active, it represents a buffer which may
-* contain zero or more 80-character "header cards" conforming to
-* FITS conventions. Any sequence of FITS-conforming header cards
-* may be stored, apart from the "END" card whose existence is
-* merely implied. The cards may be accessed in any order by using
-* the FitsChan's integer Card attribute, which identifies a "current"
-* card, to which subsequent operations apply. Searches
-c based on keyword may be performed (using astFindFits), new
-c cards may be inserted (astPutFits, astPutCards, astSetFits<X>) and
-c existing ones may be deleted (astDelFits), extracted (astGetFits<X>),
-c or changed (astSetFits<X>).
-f based on keyword may be performed (using AST_FINDFITS), new
-f cards may be inserted (AST_PUTFITS, AST_PUTCARDS, AST_SETFITS<X>) and
-f existing ones may be deleted (AST_DELFITS), extracted
-f (AST_GETFITS<X>) or changed (AST_SETFITS<X>).
-*
-* When you create a FitsChan, you have the option of specifying
-* "source" and "sink" functions which connect it to external data
-* stores by reading and writing FITS header cards. If you provide
-* a source function, it is used to fill the FitsChan with header cards
-* when it is accessed for the first time. If you do not provide a
-* source function, the FitsChan remains empty until you explicitly enter
-c data into it (e.g. using astPutFits, astPutCards or astWrite). If you
-f data into it (e.g. using AST_PUTFITS, AST_PUTCARDS or AST_WRITE). If you
-* provide a sink function, it is used to deliver any remaining
-* contents of a FitsChan to an external data store when the
-* FitsChan is deleted. If you do not provide a sink function, any
-* header cards remaining when the FitsChan is deleted will be
-* lost, so you should arrange to extract them first if necessary
-c (e.g. using astFindFits or astRead).
-f (e.g. using AST_FINDFITS or AST_READ).
-*
-* Coordinate system information may be described using FITS header
-* cards using several different conventions, termed
-* "encodings". When an AST Object is written to (or read from) a
-* FitsChan, the value of the FitsChan's Encoding attribute
-* determines how the Object is converted to (or from) a
-* description involving FITS header cards. In general, different
-* encodings will result in different sets of header cards to
-* describe the same Object. Examples of encodings include the DSS
-* encoding (based on conventions used by the STScI Digitised Sky
-* Survey data), the FITS-WCS encoding (based on a proposed FITS
-* standard) and the NATIVE encoding (a near loss-less way of
-* storing AST Objects in FITS headers).
-*
-* The available encodings differ in the range of Objects they can
-* represent, in the number of Object descriptions that can coexist
-* in the same FitsChan, and in their accessibility to other
-* (external) astronomy applications (see the Encoding attribute
-* for details). Encodings are not necessarily mutually exclusive
-* and it may sometimes be possible to describe the same Object in
-* several ways within a particular set of FITS header cards by
-* using several different encodings.
-*
-c The detailed behaviour of astRead and astWrite, when used with
-f The detailed behaviour of AST_READ and AST_WRITE, when used with
-* a FitsChan, depends on the encoding in use. In general, however,
-c all successful use of astRead is destructive, so that FITS header cards
-f all successful use of AST_READ is destructive, so that FITS header cards
-* are consumed in the process of reading an Object, and are
-* removed from the FitsChan (this deletion can be prevented for
-* specific cards by calling the
-c astRetainFits function).
-f AST_RETAINFITS routine).
-* An unsuccessful call of
-c astRead
-f AST_READ
-* (for instance, caused by the FitsChan not containing the necessary
-* FITS headers cards needed to create an Object) results in the
-* contents of the FitsChan being left unchanged.
-*
-* If the encoding in use allows only a single Object description
-* to be stored in a FitsChan (e.g. the DSS, FITS-WCS and FITS-IRAF
-c encodings), then write operations using astWrite will
-f encodings), then write operations using AST_WRITE will
-* over-write any existing Object description using that
-* encoding. Otherwise (e.g. the NATIVE encoding), multiple Object
-* descriptions are written sequentially and may later be read
-* back in the same sequence.
-
-* Inheritance:
-* The FitsChan class inherits from the Channel class.
-
-* Attributes:
-* In addition to those attributes common to all Channels, every
-* FitsChan also has the following attributes:
-*
-* - AllWarnings: A list of the available conditions
-* - Card: Index of current FITS card in a FitsChan
-* - CarLin: Ignore spherical rotations on CAR projections?
-* - CDMatrix: Use a CD matrix instead of a PC matrix?
-* - Clean: Remove cards used whilst reading even if an error occurs?
-* - DefB1950: Use FK4 B1950 as default equatorial coordinates?
-* - Encoding: System for encoding Objects as FITS headers
-* - FitsDigits: Digits of precision for floating-point FITS values
-* - Iwc: Add a Frame describing Intermediate World Coords?
-* - Ncard: Number of FITS header cards in a FitsChan
-* - Warnings: Produces warnings about selected conditions
-
-* Functions:
-c In addition to those functions applicable to all Channels, the
-c following functions may also be applied to all FitsChans:
-f In addition to those routines applicable to all Channels, the
-f following routines may also be applied to all FitsChans:
-*
-c - astDelFits: Delete the current FITS card in a FitsChan
-f - AST_DELFITS: Delete the current FITS card in a FitsChan
-c - astFindFits: Find a FITS card in a FitsChan by keyword
-f - AST_FINDFITS: Find a FITS card in a FitsChan by keyword
-c - astGetFits<X>: Get a keyword value from a FitsChan
-f - AST_GETFITS<X>: Get a keyword value from a FitsChan
-c - astSetFits<X>: Store a new keyword value in a FitsChan
-f - AST_SETFITS<X>: Store a new keyword value in a FitsChan
-c - astPurgeWCS: Delete all WCS-related cards in a FitsChan
-c - AST_PURGEWCS: Delete all WCS-related cards in a FitsChan
-c - astPutFits: Store a FITS header card in a FitsChan
-f - AST_PUTFITS: Store a FITS header card in a FitsChan
-c - astPutCards: Stores a set of FITS header card in a FitsChan
-f - AST_PUTCARDS: Stores a set of FITS header card in a FitsChan
-c - astRetainFits: Ensure current card is retained in a FitsChan
-f - AST_RETAINFITS: Ensure current card is retained in a FitsChan
-c - astTestFits: Test if a keyword has a defined value in a FitsChan
-f - AST_TESTFITS: Test if a keyword has a defined value in a FitsChan
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2008 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David Berry (Starlink)
-* RFWS: R.F. Warren-Smith (Starlink, RAL)
-* TIMJ: Tim Jenness (JAC, Hawaii)
-
-* History:
-* 11-DEC-1996 (DSB):
-* Original version.
-* 20-MAR-1997 (DSB):
-* Made keyword setting and getting functions protected instead of
-* public. Renamed public methods. Added Ncard attribute.
-* 20-MAY-1997 (RFWS):
-* Tidied public prologues.
-* 30-JUN-1997 (DSB):
-* Added support for reading post-2000 DATE-OBS strings. Reading DSS
-* or FITS-WCS objects now returns NULL unless the FitsChan is
-* positioned at the start-of-file prior to the read. Bug fixed
-* which caused Ncard to be returned too large by one. Removed
-* dependancy on hard-wired header and footer text in Native
-* FitsChans.
-* 18-AUG-1997 (DSB):
-* Bug fixed in WcsNative which caused incorrect CRVAL values
-* to be used if the axes needed permuting. Values assigned to the
-* Projection attribute fo the SkyFrames created by astRead.
-* 2-SEP-1997 (DSB):
-* Added the IRAF convention that EPOCH=0.0 really means EPOCH=1950.0
-* (the EPOCH keyword is deprecated in the new FITS-WCS conventions
-* and is taken always as a Besselian epoch).
-* 19-SEP-1997 (DSB):
-* Corrected interpretation of the FITS CD matrix.
-* 25-SEP-1997 (DSB):
-* o Fix bug in LinearMap which caused it always to detect a linear
-* mapping. For instance, this allowed DssMaps to be erroneously
-* written out using FITS-WCS encoding with a CAR projection.
-* o Assign a full textual description to SkyFrame's Projection
-* attribute instead of a 3 letter acronym.
-* o If DATE-OBS >= 1999.0 then DATE-OBS is now written in new
-* Y2000 format. For DATE-OBS < 1999.0, the old format is written.
-* o Add new attribute CDMatrix to determine whether PC or CD
-* matrices should be used when writing objects using FITS-WCS
-* encoding.
-* o Modified the way floating point values are formatted to omit
-* unnecessary leading zeros from the exponent (i.e. E-5 instead of
-* E-05).
-* o New-line characters at the end of supplied header cards are now
-* ignored.
-* o Cater for EQUINOX specified as a string prefixed by B or J
-* rather than as a floating point value (some HST data does this).
-* o Corrected SetValue so that it always inserts comment cards
-* rather than over-write existing comment cards. Previously,
-* writing a FrameSet to a DSS encoded FitsChan resulted in all
-* comments cards being stripped except for the last one.
-* o Reading a FrameSet from a DSS-encoded FrameSet now only
-* removes the keywords actually required to construct the FrameSet.
-* Previously, all keywords were removed.
-* o The EPOCH and EQUINOX keywords created when a FrameSet is
-* written to a DSS-encoded FitsChan are now determined from the
-* epoch and equinox of the current Frame, instead of from a copy
-* of the original FitsChan stored within the DssMap.
-* o The Encoding and CDMatrix attributes, and keyword types are
-* now stored as strings externally instead of integers.
-* 11-NOV-1997 (DSB):
-* o Assume default of j2000 for DSS EQUINOX value.
-* o Check for null object pointers in the interfaces for
-* virtual functions which execute even if an error has previously
-* occurred. Otherwise, a segmentation violation can occur when
-* trying to find the member function pointer.
-* o Trailing spaces ignored in Encoding attribute.
-* o Bugs fixed in FindWcs and SetValue which resulted in WCS cards
-* being written at the wrong place if the supplied FitsChan does not
-* contain any WCS keywords.
-* o Default for CDMatrix (if no axis rotation keywords can be found)
-* changed to 2 (i.e. use "CDi_j" form keywords).
-* o Write now leaves the current card unchanged if nothing is
-* written to the FitsChan.
-* 17-NOV-1997 (RFWS):
-* Disabled use of CDmatrix. Fixed initialisation problems in
-* astLoadFitsChan.
-* 24-NOV-1997 (DSB):
-* Replace references to error code AST__OPT with AST__RDERR.
-* 28-NOV-1997 (DSB):
-* o Function WcsValues modified to prevent it from changing the
-* current card. Previously, this could cause new cards to be
-* written to the wrong place in a FITS-WCS encoded FitsChan.
-* o Description of argument "value" corrected in prologue of
-* function SetFits.
-* o Argument "lastkey" removed from function SetValue since it
-* was never used (it was a relic from a previous method of
-* determining where to store new cards). Corresponding changes
-* have been made to all the functions which create "lastkey" values
-* or pass them on to SetValue (i.e DescWcs, WcsPrimary, WcsSecondary,
-* WriteWcs and WriteDss).
-* 10-DEC-1997 (DSB):
-* Bug fixed which caused the initial character designating the system
-* within CTYPE value (eg E in ELON, G in GLON, etc) to be omitted.
-* 1-JUN-1998 (DSB):
-* CDELT values of zero are now replaced by a small non-zero value
-* when creating the "pixel-to-relative physical" transformation
-* matrix. Previously, zero CDELT values could cause the matrix to
-* be non-invertable.
-* 4-SEP-1998 (DSB):
-* - Indicate that SphMaps created by this class when using FITS-WCS
-* encoding all operate on the unit sphere. This aids simplification.
-* - Fix a bug in StoreFits which caused CD matrices to be indexed
-* incorrectly (sometimes causing floating exceptions) if they do not
-* describe a celestial longitude/latitude system.
-* - Changed astFindFits to ignore trailing spaces in the keyword
-* template.
-* - astSplit changed so that an error is not reported if a textual
-* keyword value ends before column 20.
-* 7-OCT-1998 (DSB):
-* - Corrected test for linearity in LinearMap to include a factor
-* of the test vector length. Also LinearMap now uses a simplified
-* Mapping.
-* 5-NOV-1998 (DSB):
-* Added FITS-IRAF encoding.
-* 9-NOV-1998 (DSB):
-* - Corrected values of macros DSS_ENCODING and MAX_ENCODING.
-* - Corrected erroneous success indication in IrafStore.
-* - Included checks for bad values in function LinearMap.
-* 17-NOV-1998 (DSB):
-* The Domain name GRID is now given to the Base Frame in any FrameSets
-* created by astRead when using FitsChans with DSS, FITS-WCS or
-* FITS-IRAF encodings.
-* 18-DEC-1998 (DSB):
-* Check for "D" exponents in floating point keyword strings.
-* 12-FEB-1998 (DSB):
-* Modified EncodeFloat to avoid exceeding the 20 character FITS
-* limit wherever possible if FitsDigits is positive.
-* 10-MAY-1998 (DSB):
-* Bug fixed in astSplit which caused comments associated with string
-* keywords to be lost when storing the card in a FitsChan.
-* 15-JUN-1999 (DSB):
-* Report an error if an unrecognised projection name is supplied.
-* 9-DEC-1999 (DSB):
-* - Fixed bug in WcsNatPole which could result in longitude values
-* being out by 180 degrees for cylindrical projections such as CAR.
-* - Only report an "unrecognised projection" error for CTYPE values
-* which look like celestial longitude or latitude axes (i.e. if the
-* first 4 characters are "RA--", "DEC-", "xLON" or "xLAT", and the
-* fifth character is "-").
-* - Added function SpecTrans to translated keywords related to the
-* IRAF ZPX projection into keyword for the standard ZPN projection.
-* - Add ICRS as a valid value for the RADECSYS keyword. Since the
-* SkyFrame class does not yet support ICRS, an FK5 SkyFrame is
-* created if RADECSYS=ICRS.
-* 16-DEC-1999 (DSB):
-* - Modified SpecTrans so that all keywords used to created a
-* standard WCS representation from a non-standard one are consumed
-* by the astRead operation.
-* - Changed the text of ASTWARN cards added to the FitsChan if an
-* IRAF ZPX projection is found to require unsupported corrections.
-* - Simplified the documentation describing the handling of the IRAF
-* ZPX projection.
-* - Fixed code which assumed that the 10 FITS-WCS projection
-* parameters were PROJP1 -> PROJP10. In fact they are PROJP0 -
-* PROJP9. This could cause projection parameter values to be
-* incorrectly numbered when they are written out upon deletion of
-* the FitsChan.
-* 1-FEB-2000 (DSB):
-* Check that FITS_IRAF encoding is not being used before using a
-* PC matrix when reading WCS information from a header. This is
-* important if the header contains both PC and CD matrices.
-* 8-FEB-2000 (DSB):
-* - Header cards are now only consumed by an astRead operation if the
-* operation succeeds (i.e. returns a non-null Object).
-* - The original FITS-WCS encoding has been renamed as FITS-PC (to
-* indicate the use of a PCiiijjj matrix), and a new FITS-WCS
-* encoding has been added.
-* - The disabled CDMatrix attribute has been removed.
-* - Bug in LinearMap corrected which prevented genuinely linear
-* Mappings from being judged to be linear. This bug was previously
-* fudged (so it now appears) by the introduction of the test vector
-* length factor (see History entry for 7-OCT-1998). This test
-* vector length scale factor has consequently now been removed.
-* - Added FITS-AIPS encoding.
-* - The critical keywords used to select default encoding have been
-* changed.
-* - Support for common flavours of IRAF TNX projections added.
-* - The algorithm used to find a WcsMap in the supplied FrameSet
-* has been improved so that compound Mappings which contain complex
-* mixtures of parallel and serial Mappings can be translated into
-* FITS-WCS encoding.
-* - Trailing white space in string keyword values is now retained
-* when using foreign encodings to enable correct concatenation where
-* a string has been split over several keywords. E.g. if 2 string
-* keywords contain a list of formatted numerical values (e.g. IRAF
-* WAT... keywords), and the 1st one ends "0.123 " and the next one
-* begins "1234.5 ", the trailing space at the end of the first keyword
-* is needed to prevent the two numbers being merged into "0.1231234.5".
-* Trailing spaces in native encodings is still protected by enclosing
-* the whole string in double quotes.
-* - The Channel methods WriteString and GetNextData can now save
-* and restore strings of arbitary length. This is done by storing
-* as much of the string as possible in the usual way, and then
-* storing any remaining characters in subsequent CONTINUE cards,
-* using the FITSIO conventions. This storage and retrieval of long
-* strings is only available for native encodings.
-* 19-MAY-2000 (DSB):
-* Added attribute Warnings. Lowered DSS in the priority list
-* of encodings implemented by GetEncoding.
-* 6-OCT-2000 (DSB):
-* Increased size of buffers used to store CTYPE values to take
-* account of the possiblity of lots of trailing spaces.
-* 5-DEC-2000 (DSB):
-* Add support for the WCSNAME FITS keyword.
-* 12-DEC-2000 (DSB):
-* Add a title to each physical, non-celestial coord Frame based on
-* its Domain name (if any).
-* 3-APR-2001 (DSB):
-* - Use an "unknown" celestial coordinate system, instead of a
-* Cartesian coordinate system, if the CTYPE keywords specify an
-* unknown celestial coordinate system.
-* - Do not report an error if there are no CTYPE keywords in the
-* header (assume a unit mapping, like in La Palma FITS files).
-* - Add a NoCTYPE warning condition.
-* - Added AllWarnings attribute.
-* - Ensure multiple copies of identical warnings are not produced.
-* - Use the Object Ident attribute to store the identifier letter
-* associated with each Frame read from a secondary axis description,
-* so that they can be given the same letter when they are written
-* out to a new FITS file.
-* 10-AUG-2001 (DSB):
-* - Corrected function value returned by SkySys to be 1 unless an
-* error occurs. This error resulted in CAR headers being produced
-* by astWrite with CRVAL and CD values till in radians rather than
-* degrees.
-* - Introduced SplitMap2 in order to guard against producing
-* celestial FITS headers for a Mapping which includes more than
-* one WcsMap.
-* 13-AUG-2001 (DSB):
-* - Modified FixNew so that it retains the current card index if possible.
-* This fixed a bug which could cause headers written out using Native
-* encodings to be non-contiguous.
-* - Corrected ComBlock to correctly remove AST comment blocks in
-* native encoded fitschans.
-* 14-AUG-2001 (DSB):
-* - Modified FixUsed so that it it does not set the current card
-* back to the start of file if the last card in the FitsChan is
-* deleted.
-* 16-AUG-2001 (DSB):
-* Modified WcsNative to limit reference point latitude to range
-* +/-90 degs (previously values outside this range were wrapped
-* round onto the opposite meridian). Also added new warning
-* condition "badlat".
-* 23-AUG-2001 (DSB):
-* - Re-write LinearMap to use a least squares fit.
-* - Check that CDj_i is not AST__BAD within WcsWithWcs when
-* forming the increments along each physical axis.
-* 28-SEP-2001 (DSB):
-* GoodWarns changed so that no error is reported if a blank list
-* of conditions is supplied.
-* 12-OCT-2001 (DSB):
-* - Added DefB1950 attribute.
-* - Corrected equations which calculate CROTA when writing
-* FITS-AIPS encodings.
-* - Corrected equations which turn a CROTA value into a CD matrix.
-* 29-NOV-2001 (DSB):
-* Corrected use of "_" and "-" characters when referring to FK4-NO-E
-* system in function SkySys.
-* 20-FEB-2002 (DSB)
-* Added CarLin attribute.
-* 8-MAY-2002 (DSB):
-* Correct DSSToStore to ignore trailing blanks in the PLTDECSN
-* keyword value.
-* 9-MAY-2002 (DSB):
-* Correct GetCard to avoid infinite loop if the current card has
-* been marked as deleted.
-* 25-SEP-2002 (DSB):
-* AIPSFromStore: use larger of coscro and sincro when determining
-* CDELT values. Previously a non-zero coscro was always used, even
-* if it was a s small as 1.0E-17.
-* 3-OCT-2002 (DSB):
-* - SkySys: Corrected calculation of longitude axis index for unknown
-* celestial systems.
-* - SpecTrans: Corrected check for latcor terms for ZPX projections.
-* - WcsFrame: Only store an explicit equinox value in a skyframe if
-* it needs one (i.e. if the system is ecliptic or equatorial).
-* - WcsWithWcs: For Zenithal projections, always use the default
-* LONPOLE value, and absorb any excess rotation caused by this
-* into the CD matrix.
-* - WcsWithWcs: Improve the check that the native->celestial mapping
-* is a pure rotation, allowing for rotations which change the
-* handed-ness of the system (if possible).
-* - WcsWithWcs: Avoid using LONPOLE keywords when creating headers
-* for a zenithal projection. Instead, add the corresponding rotation
-* into the CD matrix.
-* 22-OCT-2002 (DSB):
-* - Retain leading and trailing white space within COMMENT cards.
-* - Only use CTYPE comments as axis labels if all non-celestial
-* axes have a unique non-blank comment (otherwise use CTYPE
-* values as labels).
-* - Updated to use latest FITS-WCS projections. This means that the
-* "TAN with projection terms" is no longer a standard FITS
-* projection. It is now represented using the AST-specific TPN
-* projection (until such time as FITS-WCS paper IV is finished).
-* - Remove trailing "Z" from DATE-OBS values created by astWrite.
-* 14-NOV-2002 (DSB):
-* - WcsWithWcs: Corrected to ignore longitude axis returned by
-* astPrimaryFrame since it does not take into account any axis
-* permutation.
-* 26-NOV-2002 (DSB):
-* - SpecTrans: Corrected no. of characters copied from CTYPE to PRJ,
-* (from 5 to 4), and terminate PRJ correctly.
-* 8-JAN-2003 (DSB):
-* Changed private InitVtab method to protected astInitFitsChanVtab
-* method.
-* 22-JAN-2003 (DSB):
-* Restructured the functions used for reading FITS_WCS headers to
-* make the distinction between the generic parts (pixel->intermediate
-* world coordinates) and the specialised parts (e.g. celestial,
-* spectral, etc) clearer.
-* 31-JAN-2003 (DSB)
-* - Added Clean attribute.
-* - Corrected initialisation and defaulting of CarLin and DefB1950
-* attributes.
-* - Extensive changes to allow foreign encodings to be produced in
-* cases where the Base Frame has fewer axes than the Current Frame.
-* 12-FEB-2003 (DSB)
-* - Modified SetFits so that the existing card comment is retained
-* if the new data value equals the existing data value.
-* 30-APR-2003 (DSB):
-* - Revert to standard "TAN" code for distorted tan projections,
-* rather than using the "TPN" code. Also recognise QVi_m (produced
-* by AUTOASTROM) as an alternative to PVi_m when reading distorted
-* TAN headers.
-* 22-MAY-2003 (DSB):
-* Modified GetEncoding so that the presence of RADECSYS and/or
-* PROJPm is only considered significant if the modern equivalent
-* keyword (REDESYS or PVi_m) is *NOT* present.
-* 2-JUN-2003 (DSB):
-* - Added support for PCi_j kewwords within FITS-WCS encoding
-* - Added CDMatrix attribute
-* - Changed internal FitsStore usage to use PC/CDELT instead of CD
-* (as preparation for FITS-WCS paper IV).
-* - Added warning "BadMat".
-* 11-JUN-2003 (DSB):
-* - Modified WcsNative to use the new SphMap PolarLong attribute
-* in order to ensure correct propagation of the longitude CRVAL
-* value in cases where the fiducial point is coincident with a pole.
-* - Use PVi_3 and PVi_4 for longitude axis "i" (if present) in
-* preference to LONPOLE and LATPOLE when reading a FITS-WCS header.
-* Note, these projection values are never written out (LONPOLE and
-* LATPOLE are written instead).
-* - Associate "RADESYS=ICRS" with SkyFrame( "System=ICRS" ), rather
-* than SkyFrame( "System=FK5" ).
-* - If DefB1950 is zero, use ICRS instead of FK5 as the default RADESYS
-* if no EQUINOX is present.
-* 1-SEP-2003 (DSB):
-* - Modify Dump so that it dumps all cards including those flagged as
-* having been read.
-* - Added "reset" parameter to FixUsed.
-* - WcsMapFrm: store an Ident of ' ' for the primary coordinate
-* description (previously Ident was left unset)
-* - Default value for DefB1950 attribute now depends on the value
-* of the Encoding attribute.
-* 15-SEP-2003 (DSB):
-* - Added Warnings "BadVal", "Distortion".
-* - Ignore FITS-WCS paper IV CTYPE distortion codes (except for
-* "-SIP" which is interpreted correctly on reading).
-* 22-OCT-2003 (DSB):
-* - GetEncoding: If the header contains CDi_j but does not contain
-* any of the old IRAF keywords (RADECSYS, etc) then assume FITS-WCS
-* encoding. This allows a FITS-WCS header to have both CDi_j *and*
-* CROTA keywords.
-* 5-JAN-2004 (DSB):
-* - SpecTrans: Use 1.0 (instead of the CDELT value) as the
-* diagonal PCi_j term for non-celestial axes with associated CROTA
-* values.
-* 12-JAN-2004 (DSB):
-* - CelestialAxes: Initialise "tmap1" pointer to NULL in case of error
-* (avoids a segvio happening in the case of an error).
-* - AddVersion: Do not attempt to add a Frame into the FITS header
-* if the mapping from grid to frame is not invertable.
-* - WorldAxes: Initialise the returned "perm" values to safe values,
-* and return these values if no basis vectors cen be created.
-* 19-JAN-2004 (DSB):
-* - When reading a FITS-WCS header, allow all keywords to be defaulted
-* as decribed in paper I.
-* 27-JAN-2004 (DSB):
-* - Modify FitLine to use correlation between actual and estimated
-* axis value as the test for linearity.
-* - Modify RoundFString to avoid writing beyond the end of the
-* supplied buffer if the supplied string contains a long list of 9's.
-* 11-MAR-2004 (DSB):
-* - Modified SpecTrans to check all axis descriptions for keywords
-* to be translated.
-* 19-MAR-2004 (DSB):
-* - Added astPutCards to support new fits_hdr2str function in
-* CFITSIO.
-* 25-MAR-2004 (DSB):
-* - Corrected bug in astSplit which causes legal cards to be
-* rejected because characters beyond the 80 char limit are being
-* considered significant.
-* - Corrected bug in SpecTrans which caused QV keywords to be
-* ignored.
-* 15-APR-2004 (DSB):
-* - SpecTrans modified to include translation of old "-WAV", "-FRQ"
-* and "-VEL" spectral algorithm codes to modern "-X2P" form.
-* - WcsFromStore modified to supress creation of WCSAXES keywords
-* for un-used axis versions.
-* - IsMapLinear modified to improve fit by doing a second least
-* squares fit to the residualleft by the first least squares fit.
-* 16-APR-2004 (DSB):
-* - NonLinSpecWcs: Issue a warning if an illegal non-linear
-* spectral code is encountered.
-* - Add a BadCTYPE warning condition.
-* - Corrected default value for Clean so that it is zero (as
-* documented).
-* 21-APR-2004 (DSB):
-* - FindWcs: Corrected to use correct OBSGEO template. This bug
-* caused OBSGEO keywords to be misplaced in written headers.
-* 23-APR-2004 (DSB):
-* - SplitMap: Modified so that a Mapping which has celestial axes
-* with constant values (such as produced by a PermMap) are treated
-* as a valid sky coordinate Mapping.
-* - AddFrame modified so that WCS Frames with a different number
-* of axes ot the pixel Frame can be added into the FrameSet.
-* - IRAFFromStore and AIPSFromStore modified so that they do not
-* create any output keywords if the number of WCS axes is different
-* to the number of pixel axes.
-* - Handling of OBSGEO-X/Y/Z corrected again.
-* - WCSFromStore modified to avouid writing partial axis descriptions.
-* 26-APR-2004 (DSB):
-* - Corrected text of output SPECSYS keyword values.
-* 17-MAY-2004 (DSB):
-* - Added IWC attribute.
-* 15-JUN-2004 (DSB):
-* - Ensure out-of-bounds longitude CRPIX values for CAR
-* projections are wrapped back into bounds.
-* 21-JUN-2004 (DSB):
-* - Ensure primary MJD-OBS value is used when reading foreign FITS
-* headers.
-* 7-JUL-2004 (DSB):
-* - Issue errors if an un-invertable PC/CD matrix is supplied in a
-* FITS-WCS Header.
-* 11-JUL-2004 (DSB):
-* - Re-factor code for checking spectral axis CTYPE values into
-* new function IsSpectral.
-* - Modify AIPSFromSTore to create spectral axis keywords if
-* possible.
-* - Modify SpecTrans to recognize AIPS spectral axis keywords, and
-* to convert "HZ" to "Hz".
-* - Added FITS-AIPS++ encoding.
-* 12-AUG-2004 (DSB):
-* - Convert GLS projection codes to equivalent SFL in SpecTrans.
-* - Added FITS-CLASS encoding.
-* 16-AUG-2004 (DSB):
-* - Removed support for paper III keyword VSOURCE, and added
-* support for SSYSSRC keyword.
-* - Added initial support for CLASS encoding.
-* - In FitOK: Changed tolerance for detecting constant values
-* from 1.0E-10 to 1.0E-8.
-* 17-AUG-2004 (DSB):
-* Correct GetFiducialNSC so that the stored values for longitude
-* parameters 1 and 2 are ignored unless the value of parameter 0 is
-* not zero.
-* 19-AUG-2004 (DSB):
-* Modify SpecTrans to ignore any CDELT values if the header
-* includes some CDi_j values.
-* 26-AUG-2004 (DSB):
-* Modify astSplit_ to allow floating point keyword values which
-* include an exponent to be specified with no decimal point
-* (e.g. "2E-4").
-* 27-AUG-2004 (DSB):
-* Completed initial attempt at a FITS-CLASS encoding.
-* 9-SEP-2004 (DSB):
-* Fixed usage of uninitialised values within ReadCrval.
-* 13-SEP-2004 (DSB):
-* Check the "text" pointer can be used safely before using it in
-* DSSToStore.
-* 27-SEP-2004 (DSB):
-* In SpecTrans, before creating new PCi_j values, check that no
-* PCi_j values have been created via an earlier translation.
-* 28-SEP-2004 (DSB):
-* In AIPSPPFromStore only get projection parameters values if there
-* are some celestialaxes. Also allow CROTA to describe rotation of
-* non-celestial axes (same for AIPSFromSTore).
-* 4-OCT-2004 (DSB):
-* Correct rounding of CRPIX in AddVersion to avoid integer overflow.
-* 11-NOV-2004 (DSB):
-* - WcsFcRead: Avoid issuing warnings about bad keywords which
-* have already been translated into equivalent good forms.
-* - SpecTrans: If both PROJP and PV keywords are present, use PV
-* in favour of PROJP only if the PV values look correct.
-* 17-NOV-2004 (DSB):
-* - Make astSetFits<X> public.
-* 16-MAR-2005 (DSB):
-* - Primary OBSGEO-X/Y/Z, MJD-AVG and MJDOBS keywords are associated
-* with all axis descriptions and should not have a trailing single
-* character indicating an alternate axis set.
-* 9-AUG-2005 (DSB):
-* In WcsMapFrm, check reffrm is used before annulling it.
-* 8-SEP-2005 (DSB):
-* - Change "if( a < b < c )" constructs to "if( a < b && b < c )"
-* - DSBSetup: correct test on FrameSet pointer state
-* - Ensure CLASS keywords written to a FitsChan do not come before
-* the final fixed position keyword.
-* 9-SEP-2005 (DSB):
-* - Added "AZ--" and "EL--" as allowed axis types in FITS-WCS
-* ctype values.
-* 12-SEP-2005 (DSB):
-* - Cast difference between two pointers to (int)
-* - CLASSFromStore:Check source velocity is defined before
-* storing it in the output header.
-* 13-SEP-2005 (DSB):
-* - Corrected B1940 to B1950 in AddEncodingFrame. This bug
-* prevented some FrameSets being written out using FITS-CLASS.
-* - Rationalise the use of the "mapping" pointer in AddVersion.
-* - WcsCelestial: Modified so that the FITS reference point is
-* stored as the SkyFrame SkyRef attribute value.
-* 7-OCT-2005 (DSB):
-* Make astGetFits<X> public.
-* 30-NOV-2005 (DSB):
-* Add support for undefined FITS keyword values.
-* 5-DEC-2005 (DSB):
-* - Include an IMAGFREQ keyword in the output when writing a
-* DSBSpecFrame out using FITS-WCS encoding.
-* - Correct test for constant values in FitOK.
-* 7-DEC-2005 (DSB):
-* Free memory allocated by calls to astReadString.
-* 30-JAN-2006 (DSB):
-* Modify astSplit so that it does no read the supplied card beyond
-* column 80.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 28-FEB-2006 (DSB):
-* Correct documentation typo ("NCards" -> "Ncard").
-* 5-APR-2006 (DSB):
-* Modify SpecTrans to convert CTYPE="LAMBDA" to CTYPE="WAVE".
-* 26-MAY-2006 (DSB):
-* Guard against NULL comment pointer when converting RESTFREQ to
-* RESTFRQ in SpecTrans.
-* 29-JUN-2006 (DSB):
-* - Added astRetainFits.
-* - Consume VELOSYS FITS-WCS keywords when reading an object.
-* - Write out VELOSYS FITS-WCS keywords when writing an object.
-* 7-AUG-2006 (DSB):
-* Remove trailing spaces from the string returned by astGetFitsS
-* if the original string contains 8 or fewer characters.
-* 16-AUG-2006 (DSB):
-* Document non-destructive nature of unsuccessful astRead calls.
-* 17-AUG-2006 (DSB):
-* Fix bugs so that the value of the Clean attribute is honoured
-* even if an error has occurred.
-* 4-SEP-2006 (DSB):
-* Modify GetClean so that it ignores the inherited status.
-* 20-SEP-2006 (DSB):
-* Fix memory leak in WcsSpectral.
-* 6-OCT-2006 (DSB):
-* Modify IsSpectral and IsAIPSSpectral to allow for CTYPE values that
-* are shorter than eight characters.
-* 13-OCT-2006 (DSB):
-* - Ensure SpecFrames and SkyFrames created from a foreign FITS header
-* are consistent in their choice of Epoch.
-* - Convert MJD-OBS and MJD-AVG values from TIMESYS timescale to
-* TDB before using as the Epoch value in an AstFrame. Use UTC if
-* TIMESYS is absent.
-* - Convert Epoch values from TDB to UTC before storing as the
-* value of an MJD-OBS or MJD-AVG keyword (no TIMESYS keyword is
-* written).
-* 23-OCT-2006 (DSB):
-* Prefer MJD-AVG over MJD-OBS.
-* 30-OCT-2006 (DSB):
-* In FitOK: Changed lower limit on acceptbale correlation from
-* 0.999999 to 0.99999.
-* 1-NOV-2006 (DSB):
-* - When reading a foreign header that contains a DUT1 keyword,
-* use it to set the Dut1 attribute in the SkyFrame. Note, JACH
-* store DUT1 in units of days. This may clash with the FITS-WCS
-* standard (when its produced). Also note that DUT1 is not written
-* out as yet when writing a FrameSet to a foreign FITS header.
-* - Correct bug that prevented ZSOURCE keyword being added to the
-* output header if the source velocity was negative.
-* 9-NOV-2006 (DSB):
-* Add STATUS argument to docs for F77 AST_SETx.
-* 20-DEC-2006 (DSB):
-* Correct FK5 to ICRS in error message issued if no RADESYS or
-* EQUINOX is found.
-* 16-JAN-2007 (DSB):
-* Cast ignored function return values to (void) to avoid compiler
-* warnings.
-* 31-JAN-2007 (DSB):
-* Change SpecTrans to ignore blank unit strings (previously
-* converted them to "Hz").
-* 16-APR-2007 (DSB):
-* In SplitMat, increase the allowed level of rounding erros from
-* 1.0E-10 to 1.0E-7 (to avoid spurious low CDi_j values being
-* created that should be zero).
-* 30-APR-2007 (DSB):
-* - Change DSBSetup so that the central DSBSpecFrame frequency is
-* CRVAL and the IF is the difference between CRVAL and LO.
-* - Change tolerance in FitOK from 0.99999 to 0.995 to handle data from Nicolas
-* Peretto.
-* 1-MAY-2007 (DSB):
-* - In astSplit, if a keyword value looks like an int but is too long to
-* fit in an int, then treat it as a float instead.
-* 18-MAY-2007 (DSB):
-* In CnvType, use input type rather than output type when checking
-* for a COMMENT card. Also, return a null data value buffer for a
-* COMMENT card.
-* 4-JUN-2007 (DSB):
-* In CLASSFromStore, create a DELTAV header even if it is equal to
-* the spectral CDELT value. Also, convert spatial reference point
-* to (az,el) and write out as headers AZIMUTH and ELEVATIO.
-* 9-JUL-2007 (DSB):
-* Fixed bug in DSBSetUp - previously, this function assumed that
-* the supplied DSBSpecFrame represented frequency, and so gave
-* incorrect values for IF and DSBCentre if the header described
-* velocity.
-* 9-AUG-2007 (DSB):
-* Changed GetEncoding so that critcal keywords are ignored if
-* there are no CTYPE, CRPIX or CRVAL keywords in the header.
-* 10-AUG-2007 (DSB):
-* - Changed GetEncoding so that FITS_PC is not returned if there are
-* any CDi_j or PCi_j keywords in the header.
-* - Added astPurgeWCS method.
-* 13-AUG-2007 (DSB):
-* - Include the DSS keywords AMDX%d and AMDY%d in FindWCS.
-* 16-AUG-2007 (DSB):
-* - Force all FITS-CLASS headers to contain frequency axes
-* (velocity axes seem not to be recognised properly by CLASS).
-* - Change the CLASS "VELO-LSR" header to be the velocity at the
-* reference channel, not the source velocity.
-* 22-AUG-2007 (DSB):
-* - Remove debugging printf statements.
-* 20-SEP-2007 (DSB):
-* Changed FitOK to check that the RMS residual is not more than
-* a fixed small fraction of the pixel size.
-* 4-DEC-2007 (DSB):
-* Changed CreateKeyword so that it uses a KeyMap to search for
-* existing keywords. This is much faster than checking every
-* FitsCard in the FitsChan explicitly.
-* 18-DEC-2007 (DSB):
-* Add keyword VLSR to the CLASS encoding. It holds the same value
-* as VELO-LSR, but different versions of class use different names.
-* Also write out the DELTAV keyword in the LSR rest frame rather
-* than the source rest frame.
-* 31-JAN-2008 (DSB):
-* Correct calculation of redshift from radio velocity in ClassTrans.
-* 25-FEB-2008 (DSB):
-* Ensure a SkyFrame represents absolute (rather than offset)
-* coords before writing it out in any non-native encoding.
-* 28-FEB-2008 (DSB):
-* Test for existing of SkyRefIs attribute before accessing it.
-* 2-APR-2008 (DSB):
-* In CLASSFromStore, adjust the spatial CRVAL and CRPIX values to be
-* the centre of the first pixel if the spatial axes are degenerate.
-* 17-APR-2008 (DSB):
-* Ignore latitude axis PV terms supplied in a TAN header
-* (previously, such PV terms were used as polynomial correction
-* terms in a TPN projection).
-* 30-APR-2008 (DSB):
-* SetValue changed so that new keywords are inserted before the
-* current card.
-* 1-MAY-2008 (DSB):
-* Added UndefRead warning.
-* 7-MAY-2008 (DSB):
-* Correct conversion of CDi_j to PCi_j/CDELT in SpecTrans.
-* 8-MAY-2008 (DSB):
-* When writing out a FITS-WCS header, allow linear grid->WCS
-* mapping to be represented by a CAR projection.
-* 9-MAY-2008 (DSB):
-* Make class variables IgnoreUsed and MarkNew static.
-* 30-JUN-2008 (DSB):
-* Improve efficiency of FindWcs.
-* 2-JUL-2008 (DSB):
-* FitsSof now returns non-zero if the FitsChan is empty.
-* 16-JUL-2008 (DSB):
-* Plug memory leak caused by failure to free the Warnings
-* attribute string when a FitsChan is deleted.
-* 24-JUL-2008 (TIMJ):
-* Fix buffer overrun in astGetFits when writing the keyword
-* to the buffer (occurred if the input string was 80 characters).
-* 1-OCT-2008 (DSB):
-* When reading a FITS-WCS header, spurious PVi_j keywords no
-* longer generate an error. Instead they generate warnings via the
-* new "BadPV" warning type.
-* 21-NOV-2008 (DSB):
-* Do not remove keywords from read headers if they may be of
-* relevance to things other than WCS (e.g. MJD-OBS, OBSGEO, etc).
-* 2-DEC-2008 (DSB):
-* - astGetFits<X> now reports an error if the keyword value is undefined.
-* - Add new functions astTestFits and astSetFitsU.
-* - Remove use of AST__UNDEF<X> constants.
-* - Remove "undefread" warning.
-* 16-JAN-2009 (DSB):
-* Use astAddWarning to store each warning in the parent Channel
-* structure.
-* 4-MAR-2009 (DSB):
-* DATE-OBS and MJD-OBS cannot have an axis description character.
-* 13-MAR-2009 (DSB):
-* The VELOSYS value read from the header is never used, so do not
-* report an error if VELOSYS has an undefined value.
-* 11-JUN-2009 (DSB):
-* Delay reading cards from the source until they are actually
-* needed. Previously, the source function was called in the
-* FitsChan initialiser, but this means it is not possible for
-* application code to call astPutChannelData before the source
-* function is called. The ReadFromSource function is now called
-* at the start of each (nearly) public or protected function to
-* ensure the source function has been called (the source function
-* pointer in the FitsChan is then nullified to ensure it is not
-* called again).
-* 18-JUN-2009 (DSB):
-* Include the effect of observer height (in the ObsAlt attribute)
-* when creating OBSGEO-X/Y/Z headers, and store a value for
-* ObsAlt when reading a set of OBSGEO-X/Y/Z headers.
-* 2-JUL-2009 (DSB):
-* Check FitsChan is not empty at start of FindWcs.
-* 7-JUL-2009 (DSB):
-* Add new function astSetFitsCM.
-* 30-JUL-2009 (DSB):
-* Fix axis numbering in SkyPole.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS FitsChan
-
-/* A macro which tests a character to see if it can be used within a FITS
- keyword. We include lower case letters here, but they are considered
- as equivalent to upper case letter. */
-#define isFits(a) ( islower(a) || isupper(a) || isdigit(a) || (a)=='-' || (a)=='_' )
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro which takes a pointer to a FitsCard and returns non-zero if the
- card has been used and so should be ignored. */
-#define CARDUSED(card) ( \
- ( ignore_used == 2 && \
- ( (FitsCard *) (card) )->flags & PROVISIONALLY_USED ) || \
- ( ignore_used >= 1 && \
- ( (FitsCard *) (card) )->flags & USED ) )
-
-/* Set of characters used to encode a "sequence number" at the end of
- FITS keywords in an attempt to make them unique.. */
-#define SEQ_CHARS "_ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-
-/* A general tolerance for equality between floating point values. */
-#define TOL1 10.0*DBL_EPSILON
-
-/* A tolerance for equality between angular values in radians. */
-#define TOL2 1.0E-10
-
-/* Macro to check for equality of floating point values. We cannot
- compare bad values directory because of the danger of floating point
- exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Macro to check for equality of floating point angular values. We cannot
- compare bad values directory because of the danger of floating point
- exceptions, so bad values are dealt with explicitly. The smallest
- significant angle is assumed to be 1E-9 radians (0.0002 arc-seconds).*/
-#define EQUALANG(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=MAX(1.0E5*(fabs(aa)+fabs(bb))*DBL_EPSILON,1.0E-9))))
-
-/* Macro to compare an angle in radians with zero, allowing some tolerance. */
-#define ZEROANG(aa) (fabs(aa)<1.0E-9)
-
-/* Constants: */
-#define UNKNOWN_ENCODING -1
-#define NATIVE_ENCODING 0
-#define FITSPC_ENCODING 1
-#define DSS_ENCODING 2
-#define FITSWCS_ENCODING 3
-#define FITSIRAF_ENCODING 4
-#define FITSAIPS_ENCODING 5
-#define FITSAIPSPP_ENCODING 6
-#define FITSCLASS_ENCODING 7
-#define MAX_ENCODING 7
-#define UNKNOWN_STRING "UNKNOWN"
-#define NATIVE_STRING "NATIVE"
-#define FITSPC_STRING "FITS-PC"
-#define FITSPC_STRING2 "FITS_PC"
-#define DSS_STRING "DSS"
-#define FITSWCS_STRING "FITS-WCS"
-#define FITSWCS_STRING2 "FITS_WCS"
-#define FITSIRAF_STRING "FITS-IRAF"
-#define FITSIRAF_STRING2 "FITS_IRAF"
-#define FITSAIPS_STRING "FITS-AIPS"
-#define FITSAIPS_STRING2 "FITS_AIPS"
-#define FITSAIPSPP_STRING "FITS-AIPS++"
-#define FITSAIPSPP_STRING2 "FITS_AIPS++"
-#define FITSCLASS_STRING "FITS-CLASS"
-#define FITSCLASS_STRING2 "FITS_CLASS"
-#define INDENT_INC 3
-#define PREVIOUS 0
-#define NEXT 1
-#define HEADER_TEXT "Beginning of AST data for "
-#define FOOTER_TEXT "End of AST data for "
-#define FITSNAMLEN 8
-#define FITSSTCOL 20
-#define FITSRLCOL 30
-#define FITSIMCOL 50
-#define FITSCOMCOL 32
-#define NORADEC 0
-#define FK4 1
-#define FK4NOE 2
-#define FK5 3
-#define GAPPT 4
-#define ICRS 5
-#define NOCEL 0
-#define RADEC 1
-#define ECLIP 2
-#define GALAC 3
-#define SUPER 4
-#define HECLIP 5
-#define AZEL 6
-#define LONAX -1
-#define NONAX 0
-#define LATAX 1
-#define NDESC 9
-#define MXCTYPELEN 81
-#define ALLWARNINGS " distortion noequinox noradesys nomjd-obs nolonpole nolatpole tnx zpx badcel noctype badlat badmat badval badctype badpv "
-#define NPFIT 10
-#define SPD 86400.0
-
-#define FL 1.0/298.257 /* Reference spheroid flattening factor */
-#define A0 6378140.0 /* Earth equatorial radius (metres) */
-
-/* Each card in the fitschan has a set of flags associated with it,
- stored in different bits of the "flags" item within each FitsCard
- structure (note, in AST V1.4 these flags were stored in the "del"
- item... Dump and LoadFitsChan will need to be changed to use a
- correspondingly changed name for the external representation of this
- item). The following flags are currently defined: */
-
-/* "USED" - This flag indicates that the the card has been used in the
- construction of an AST Object returned by astRead. Such cards should
- usually be treated as if they do not exist, i.e. they should not be
- used again by subsequent calls to astRead, they should not be recognised
- by public FitsChan methods which search the FitsChan for specified
- cards, and they should not be written out when the FitsChan is deleted.
- This flag was the only flag available in AST V1.4, and was called
- "Del" (for "deleted"). Used cards are retained in order to give an
- indication of where abouts within the header new cards should be placed
- when astWrite is called (i.e. new cards should usually be placed at
- the same point within the header as the cards which they replace). */
-#define USED 1
-
-/* "PROVISIONALLY_USED" - This flag indicates that the the card is being
- considered as a candidate for inclusion in the construction of an AST
- Object. If the Object is constructed succesfully, cards flagged as
- "provisionally used" will be changed to be flagged as "definitely used"
- (using the USED flag). If the Object fails to be constructed
- succesfully (if some required cards are missing from the FitsChan
- for instance), then "provisionally used" cards will be returned to the
- former state which they had prior to the attempt to construct the
- object. */
-#define PROVISIONALLY_USED 2
-
-/* "NEW" - This flag indicates that the the card has just been added to
- the FitsChan and may yet proove to be unrequired. For instance if the
- supplied Object is not of an appropriate flavour to be stored using
- the requested encoding, all "new" cards which were added before the
- inappropriateness was discovered will be removed from the FitsChan.
- Two different levels of "newness" are available. */
-#define NEW1 4
-#define NEW2 8
-
-/* "PROTECTED" - This flag indicates that the the card should not be
- removed form the FitsChan when an Object is read using astRead. If
- this flag is not set, then the card will dehave as if it has been
- deleted if it was used in the construction of the returned AST Object. */
-#define PROTECTED 16
-
-
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "channel.h"
-#include "cmpframe.h"
-#include "cmpmap.h"
-#include "dssmap.h"
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h"
-#include "fitschan.h"
-#include "frame.h"
-#include "frameset.h"
-#include "grismmap.h"
-#include "mathmap.h"
-#include "matrixmap.h"
-#include "memory.h"
-#include "object.h"
-#include "permmap.h"
-#include "pointset.h"
-#include "shiftmap.h"
-#include "skyframe.h"
-#include "timeframe.h"
-#include "keymap.h"
-#include "pal.h"
-#include "slamap.h"
-#include "specframe.h"
-#include "dsbspecframe.h"
-#include "specmap.h"
-#include "sphmap.h"
-#include "unitmap.h"
-#include "polymap.h"
-#include "wcsmap.h"
-#include "winmap.h"
-#include "zoommap.h"
-#include "globals.h"
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <float.h>
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Type Definitions */
-/* ================ */
-/* This structure contains information describing a single FITS header card
- in a circular list of such structures. */
-
-typedef struct FitsCard {
- char name[ FITSNAMLEN + 1 ];/* Keyword name (plus terminating null). */
- int type; /* Data type. */
- void *data; /* Pointer to the keyword's data value. */
- char *comment; /* Pointer to a comment for the keyword. */
- int flags; /* Flags for each card */
- size_t size; /* Size of data value */
- struct FitsCard *next; /* Pointer to next structure in list. */
- struct FitsCard *prev; /* Pointer to previous structure in list. */
-} FitsCard;
-
-
-/* Structure used to store information derived from the FITS WCS keyword
- values in a form more convenient to further processing. Conventions
- for units, etc, for values in a FitsStore follow FITS-WCS (e.g. angular
- values are stored in degrees, equinox is B or J depending on RADECSYS,
- etc). */
-typedef struct FitsStore {
- char ***cname;
- char ***ctype;
- char ***ctype_com;
- char ***cunit;
- char ***radesys;
- char ***wcsname;
- char ***specsys;
- char ***ssyssrc;
- double ***pc;
- double ***cdelt;
- double ***crpix;
- double ***crval;
- double ***equinox;
- double ***latpole;
- double ***lonpole;
- double ***mjdobs;
- double ***dut1;
- double ***mjdavg;
- double ***pv;
- double ***wcsaxes;
- double ***obsgeox;
- double ***obsgeoy;
- double ***obsgeoz;
- double ***restfrq;
- double ***restwav;
- double ***zsource;
- double ***velosys;
- double ***asip;
- double ***bsip;
- double ***apsip;
- double ***bpsip;
- double ***imagfreq;
- int naxis;
- AstTimeScaleType timesys;
-} FitsStore;
-
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_getfull)( AstChannel *, int * );
-static int (* parent_getskip)( AstChannel *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static int (* parent_write)( AstChannel *, AstObject *, int * );
-static AstObject *(* parent_read)( AstChannel *, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Strings to describe each data type. These should be in the order implied
- by the corresponding macros (eg AST__FLOAT, etc). */
-static const char *type_names[] = {"comment", "integer", "floating point",
- "string", "complex floating point",
- "complex integer", "logical",
- "continuation string", "undef" };
-
-/* Text values used to represent Encoding values externally. */
-static const char *xencod[8] = { NATIVE_STRING, FITSPC_STRING,
- DSS_STRING, FITSWCS_STRING,
- FITSIRAF_STRING, FITSAIPS_STRING,
- FITSAIPSPP_STRING, FITSCLASS_STRING };
-
-/* Define two variables to hold TimeFrames which will be used for converting
- MJD values between time scales. */
-static AstTimeFrame *tdbframe = NULL;
-static AstTimeFrame *timeframe = NULL;
-
-/* Max number of characters in a formatted int */
-static int int_dig;
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->GetAttrib_Buff[ 0 ] = 0; \
- globals->Items_Written = 0; \
- globals->Write_Nest = -1; \
- globals->Current_Indent = 0; \
- globals->Ignore_Used = 1; \
- globals->Mark_New = 0; \
- globals->CnvType_Text[ 0 ] = 0; \
- globals->CnvType_Text0[ 0 ] = 0; \
- globals->CnvType_Text1[ 0 ] = 0; \
- globals->CreateKeyword_Seq_Nchars = -1; \
- globals->FormatKey_Buff[ 0 ] = 0; \
- globals->FitsGetCom_Sval[ 0 ] = 0; \
- globals->IsSpectral_Ret = NULL; \
- globals->Match_Fmt[ 0 ] = 0; \
- globals->Match_Template = NULL; \
- globals->Match_PA = 0; \
- globals->Match_PB = 0; \
- globals->Match_NA = 0; \
- globals->Match_NB = 0; \
- globals->Match_Nentry = 0; \
- globals->WcsCelestial_Type[ 0 ] = 0; \
- globals->Ignore_Used = 1; \
- globals->Mark_New = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(FitsChan)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(FitsChan,Class_Init)
-#define class_vtab astGLOBAL(FitsChan,Class_Vtab)
-#define getattrib_buff astGLOBAL(FitsChan,GetAttrib_Buff)
-#define items_written astGLOBAL(FitsChan,Items_Written)
-#define write_nest astGLOBAL(FitsChan,Write_Nest)
-#define current_indent astGLOBAL(FitsChan,Current_Indent)
-#define ignore_used astGLOBAL(FitsChan,Ignore_Used)
-#define mark_new astGLOBAL(FitsChan,Mark_New)
-#define cnvtype_text astGLOBAL(FitsChan,CnvType_Text)
-#define cnvtype_text0 astGLOBAL(FitsChan,CnvType_Text0)
-#define cnvtype_text1 astGLOBAL(FitsChan,CnvType_Text1)
-#define createkeyword_seq_nchars astGLOBAL(FitsChan,CreateKeyword_Seq_Nchars)
-#define formatkey_buff astGLOBAL(FitsChan,FormatKey_Buff)
-#define fitsgetcom_sval astGLOBAL(FitsChan,FitsGetCom_Sval)
-#define isspectral_ret astGLOBAL(FitsChan,IsSpectral_Ret)
-#define match_fmt astGLOBAL(FitsChan,Match_Fmt)
-#define match_template astGLOBAL(FitsChan,Match_Template)
-#define match_pa astGLOBAL(FitsChan,Match_PA)
-#define match_pb astGLOBAL(FitsChan,Match_PB)
-#define match_na astGLOBAL(FitsChan,Match_NA)
-#define match_nb astGLOBAL(FitsChan,Match_NB)
-#define match_nentry astGLOBAL(FitsChan,Match_Nentry)
-#define wcscelestial_type astGLOBAL(FitsChan,WcsCelestial_Type)
-
-
-
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX2 pthread_mutex_lock( &mutex2 );
-#define UNLOCK_MUTEX2 pthread_mutex_unlock( &mutex2 );
-
-static pthread_mutex_t mutex3 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX3 pthread_mutex_lock( &mutex3 );
-#define UNLOCK_MUTEX3 pthread_mutex_unlock( &mutex3 );
-
-static pthread_mutex_t mutex4 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX4 pthread_mutex_lock( &mutex4 );
-#define UNLOCK_MUTEX4 pthread_mutex_unlock( &mutex4 );
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-/* Buffer returned by GetAttrib. */
-static char getattrib_buff[ AST__FITSCHAN_GETATTRIB_BUFF_LEN + 1 ];
-
-/* Buffer for returned text string in CnvType */
-static char cnvtype_text[ AST__FITSCHAN_FITSCARDLEN + 1 ];
-
-/* Buffer for real value in CnvType */
-static char cnvtype_text0[ AST__FITSCHAN_FITSCARDLEN + 1 ];
-
-/* Buffer for imaginary value in CnvType */
-static char cnvtype_text1[ AST__FITSCHAN_FITSCARDLEN + 1 ];
-
-/* Number of output items written since the last "Begin" or "IsA"
- output item, and level of Object nesting during recursive
- invocation of the astWrite method. */
-static int items_written = 0;
-static int write_nest = -1;
-
-/* Indentation level for indented comments when writing Objects to a
- FitsChan. */
-static int current_indent = 0;
-
-/* Ignore_Used: If 2, then cards which have been marked as either "definitely
- used" or "provisionally used" (see the USED flag above) will be ignored
- when searching the FitsChan, etc (i.e. they will be treated as if they
- have been removed from the FitsChan). If 1, then cards which have been
- "definitely used" will be skipped over. If zero then no cards will be
- skipped over. */
-static int ignore_used = 1;
-
-/* Mark_New: If non-zero, then all cards added to the FitsChan will be
- marked with both the NEW1 and NEW2 flags (see above). If zero then
- new cards will not be marked with either NEW1 or NEW2. */
-static int mark_new = 0;
-
-/* Number of characters used for encoding */
-static int createkeyword_seq_nchars = -1;
-
-/* Buffer for value returned by FormatKey */
-static char formatkey_buff[ 10 ];
-
-/* Buffer for value returned by FitsGetCom */
-static char fitsgetcom_sval[ AST__FITSCHAN_FITSCARDLEN + 1 ];
-
-/* Pointer returned by IsSpectral */
-static const char *isspectral_ret = NULL;
-
-/* Format specifier for reading an integer field in Match */
-static char match_fmt[ 10 ];
-
-/* Pointer to start of template in Match */
-static const char *match_template = NULL;
-
-/* Pointer to first returned field value in Match */
-static int *match_pa = 0;
-
-/* Pointer to last returned field value in Match */
-static int *match_pb = 0;
-
-/* No. of characters read from the test string in Match */
-static int match_na = 0;
-
-/* No. of characters read from the template string in Match */
-static int match_nb = 0;
-
-/* Number of recursive entries into Match */
-static int match_nentry = 0;
-
-/* Buffer for celestial system in WcsCelestial */
-static char wcscelestial_type[ 4 ];
-
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstFitsChanVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-#define LOCK_MUTEX3
-#define UNLOCK_MUTEX3
-#define LOCK_MUTEX4
-#define UNLOCK_MUTEX4
-
-#endif
-
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstFitsChan *astFitsChanForId_( const char *(*)( void ),
- char *(*)( const char *(*)( void ), int * ),
- void (*)( const char * ),
- void (*)( void (*)( const char * ), const char *, int * ),
- const char *, ... );
-AstFitsChan *astFitsChanId_( const char *(* source)( void ),
- void (* sink)( const char * ),
- const char *options, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static int GetObjSize( AstObject *, int * );
-
-static void ClearCard( AstFitsChan *, int * );
-static int GetCard( AstFitsChan *, int * );
-static int TestCard( AstFitsChan *, int * );
-static void SetCard( AstFitsChan *, int, int * );
-
-static void ClearEncoding( AstFitsChan *, int * );
-static int GetEncoding( AstFitsChan *, int * );
-static int TestEncoding( AstFitsChan *, int * );
-static void SetEncoding( AstFitsChan *, int, int * );
-
-static void ClearCDMatrix( AstFitsChan *, int * );
-static int GetCDMatrix( AstFitsChan *, int * );
-static int TestCDMatrix( AstFitsChan *, int * );
-static void SetCDMatrix( AstFitsChan *, int, int * );
-
-static void ClearFitsDigits( AstFitsChan *, int * );
-static int GetFitsDigits( AstFitsChan *, int * );
-static int TestFitsDigits( AstFitsChan *, int * );
-static void SetFitsDigits( AstFitsChan *, int, int * );
-
-static void ClearDefB1950( AstFitsChan *, int * );
-static int GetDefB1950( AstFitsChan *, int * );
-static int TestDefB1950( AstFitsChan *, int * );
-static void SetDefB1950( AstFitsChan *, int, int * );
-
-static void ClearCarLin( AstFitsChan *, int * );
-static int GetCarLin( AstFitsChan *, int * );
-static int TestCarLin( AstFitsChan *, int * );
-static void SetCarLin( AstFitsChan *, int, int * );
-
-static void ClearIwc( AstFitsChan *, int * );
-static int GetIwc( AstFitsChan *, int * );
-static int TestIwc( AstFitsChan *, int * );
-static void SetIwc( AstFitsChan *, int, int * );
-
-static void ClearClean( AstFitsChan *, int * );
-static int GetClean( AstFitsChan *, int * );
-static int TestClean( AstFitsChan *, int * );
-static void SetClean( AstFitsChan *, int, int * );
-
-static void ClearWarnings( AstFitsChan *, int * );
-static const char *GetWarnings( AstFitsChan *, int * );
-static int TestWarnings( AstFitsChan *, int * );
-static void SetWarnings( AstFitsChan *, const char *, int * );
-
-static int GetNcard( AstFitsChan *, int * );
-static const char *GetAllWarnings( AstFitsChan *, int * );
-
-static AstFitsChan *SpecTrans( AstFitsChan *, int, const char *, const char *, int * );
-static AstFrameSet *MakeFitsFrameSet( AstFrameSet *, int, int, int * );
-static AstGrismMap *ExtractGrismMap( AstMapping *, int, AstMapping **, int * );
-static AstMapping *AddUnitMaps( AstMapping *, int, int, int * );
-static AstMapping *CelestialAxes( AstFrameSet *, double *, int *, char, FitsStore *, int *, const char *, const char *, int * );
-static AstMapping *GrismSpecWcs( char *, FitsStore *, int, char, AstSpecFrame *, const char *, const char *, int * );
-static AstMapping *LinearWcs( FitsStore *, int, char, const char *, const char *, int * );
-static AstMapping *LogAxis( AstMapping *, int, int, double *, double *, double, int * );
-static AstMapping *LogWcs( FitsStore *, int, char, const char *, const char *, int * );
-static AstMapping *NonLinSpecWcs( AstFitsChan *, char *, FitsStore *, int, char, AstSpecFrame *, const char *, const char *, int * );
-static AstMapping *OtherAxes( AstFrameSet *, double *, int *, char, FitsStore *, double *, int *, const char *, const char *, int * );
-static AstMapping *SIPMapping( FitsStore *, char, int, const char *, const char *, int * );
-static AstMapping *SpectralAxes( AstFrameSet *, double *, int *, char, FitsStore *, double *, int *, const char *, const char *, int * );
-static AstMapping *WcsCelestial( AstFitsChan *, FitsStore *, char, AstFrame **, AstFrame *, double *, double *, AstSkyFrame **, const char *, const char *, int * );
-static AstMapping *WcsIntWorld( AstFitsChan *, FitsStore *, char, int, const char *, const char *, int * );
-static AstMapping *WcsMapFrm( AstFitsChan *, FitsStore *, char, AstFrame **, const char *, const char *, int * );
-static AstMapping *WcsNative( AstFitsChan *, FitsStore *, char, AstWcsMap *, int, int, const char *, const char *, int * );
-static AstMapping *WcsOthers( AstFitsChan *, FitsStore *, char, AstFrame **, AstFrame *, const char *, const char *, int * );
-static AstMapping *WcsSpectral( AstFitsChan *, FitsStore *, char, AstFrame **, AstFrame *, double, double, AstSkyFrame *, const char *, const char *, int * );
-static AstMatrixMap *WcsCDeltMatrix( FitsStore *, char, int, const char *, const char *, int * );
-static AstMatrixMap *WcsPCMatrix( FitsStore *, char, int, const char *, const char *, int * );
-static AstObject *FsetFromStore( AstFitsChan *, FitsStore *, const char *, const char *, int * );
-static AstObject *Read( AstChannel *, int * );
-static AstSkyFrame *WcsSkyFrame( AstFitsChan *, FitsStore *, char, int, char *, int, int, const char *, const char *, int * );
-static AstTimeScaleType TimeSysToAst( AstFitsChan *, const char *, const char *, const char *, int * );
-static AstWinMap *WcsShift( FitsStore *, char, int, const char *, const char *, int * );
-static FitsCard *GetLink( FitsCard *, int, const char *, const char *, int * );
-static FitsStore *FitsToStore( AstFitsChan *, int, const char *, const char *, int * );
-static FitsStore *FreeStore( FitsStore *, int * );
-static FitsStore *FsetToStore( AstFitsChan *, AstFrameSet *, int, double *, const char *, const char *, int * );
-static char *CardComm( AstFitsChan *, int * );
-static char *CardName( AstFitsChan *, int * );
-static char *FormatKey( const char *, int, int, char, int * );
-static char *GetItemC( char ****, int, char, char *, const char *method, const char *class, int * );
-static char *SourceWrap( const char *(*)( void ), int * );
-static char *UnPreQuote( const char *, int * );
-static char GetMaxS( double ****item, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static const char *GetFitsSor( const char *, int * );
-static const char *IsSpectral( const char *, char[5], char[5], int * );
-static double **OrthVectorSet( int, int, double **, int * );
-static double *FitLine( AstMapping *, double *, double *, double *, double, double *, int * );
-static double *OrthVector( int, int, double **, int * );
-static double *ReadCrval( AstFitsChan *, AstFrame *, char, const char *, const char *, int * );
-static double ChooseEpoch( FitsStore *, char, const char *, const char *, int * );
-static double DateObs( const char *, int * );
-static double GetItem( double ****, int, int, char, char *, const char *method, const char *class, int * );
-static double NearestPix( AstMapping *, double, int, int * );
-static double TDBConv( double, int, int, const char *, const char *, int * );
-static int *CardFlags( AstFitsChan *, int * );
-static int AIPSFromStore( AstFitsChan *, FitsStore *, const char *, const char *, int * );
-static int AIPSPPFromStore( AstFitsChan *, FitsStore *, const char *, const char *, int * );
-static int AddEncodingFrame( AstFitsChan *, AstFrameSet *, int, const char *, const char *, int * );
-static int AddVersion( AstFitsChan *, AstFrameSet *, int, int, FitsStore *, double *, char, const char *, const char *, int * );
-static int CLASSFromStore( AstFitsChan *, FitsStore *, AstFrameSet *, double *, const char *, const char *, int * );
-static int CardType( AstFitsChan *, int * );
-static int CheckFitsName( const char *, const char *, const char *, int * );
-static int ChrLen( const char *, int * );
-static int CnvType( int, void *, size_t, int, int, void *, const char *, const char *, const char *, int * );
-static int CnvValue( AstFitsChan *, int , int, void *, const char *, int * );
-static int FindFits( AstFitsChan *, const char *, char[ AST__FITSCHAN_FITSCARDLEN + 1 ], int, int * );
-static int ComBlock( AstFitsChan *, int, const char *, const char *, int * );
-static int CountFields( const char *, char, const char *, const char *, int * );
-static int DSSFromStore( AstFitsChan *, FitsStore *, const char *, const char *, int * );
-static int EncodeFloat( char *, int, int, int, double, int * );
-static int EncodeValue( AstFitsChan *, char *, int, int, const char *, int * );
-static int FindBasisVectors( AstMapping *, int, int, double *, AstPointSet *, AstPointSet *, int * );
-static int FindKeyCard( AstFitsChan *, const char *, const char *, const char *, int * );
-static int FindLonLatSpecAxes( FitsStore *, char, int *, int *, int *, const char *, const char *, int * );
-static int FindString( int, const char *[], const char *, const char *, const char *, const char *, int * );
-static int FitOK( int, double *, double *, double, int * );
-static int FitsEof( AstFitsChan *, int * );
-static int FitsSof( AstFitsChan *, int * );
-static int FitsFromStore( AstFitsChan *, FitsStore *, int, double *, AstFrameSet *, const char *, const char *, int * );
-static int FitsGetCom( AstFitsChan *, const char *, char **, int * );
-static int FullForm( const char *, const char *, int, int * );
-static int GetFiducialWCS( AstWcsMap *, AstMapping *, int, int, double *, double *, int * );
-static int GetFitsCF( AstFitsChan *, const char *, double *, int * );
-static int GetFitsCI( AstFitsChan *, const char *, int *, int * );
-static int GetFitsCN( AstFitsChan *, const char *, char **, int * );
-static int GetFitsF( AstFitsChan *, const char *, double *, int * );
-static int GetFitsI( AstFitsChan *, const char *, int *, int * );
-static int GetFitsL( AstFitsChan *, const char *, int *, int * );
-static int GetFitsS( AstFitsChan *, const char *, char **, int * );
-static int GetFull( AstChannel *, int * );
-static int GetMaxI( double ****item, char, int * );
-static int GetMaxJM( double ****item, char, int * );
-static int GetSkip( AstChannel *, int * );
-static int GetValue( AstFitsChan *, const char *, int, void *, int, int, const char *, const char *, int * );
-static int GetValue2( AstFitsChan *, AstFitsChan *, const char *, int, void *, int, const char *, const char *, int * );
-static int GoodWarns( const char *, int * );
-static int HasAIPSSpecAxis( AstFitsChan *, const char *, const char *, int * );
-static int IRAFFromStore( AstFitsChan *, FitsStore *, const char *, const char *, int * );
-static int IsAIPSSpectral( const char *, char **, char **, int * );
-static int IsMapLinear( AstMapping *, const double [], const double [], int, int * );
-static int KeyFields( AstFitsChan *, const char *, int, int *, int *, int * );
-static int LooksLikeClass( AstFitsChan *, const char *, const char *, int * );
-static int MakeBasisVectors( AstMapping *, int, int, double *, AstPointSet *, AstPointSet *, int * );
-static int MakeIntWorld( AstMapping *, AstFrame *, int *, char, FitsStore *, double *, const char *, const char *, int * );
-static int Match( const char *, const char *, int, int *, int *, const char *, const char *, int * );
-static int MatchChar( char, char, const char *, const char *, const char *, int * );
-static int MatchFront( const char *, const char *, char *, int *, int *, int *, const char *, const char *, const char *, int * );
-static int MoveCard( AstFitsChan *, int, const char *, const char *, int * );
-static int PCFromStore( AstFitsChan *, FitsStore *, const char *, const char *, int * );
-static int HasCard( AstFitsChan *, const char *, const char *, const char *, int * );
-static int SearchCard( AstFitsChan *, const char *, const char *, const char *, int * );
-static int SetFits( AstFitsChan *, const char *, void *, int, const char *, int, int * );
-static int Similar( const char *, const char *, int * );
-static int SkySys( AstSkyFrame *, int, FitsStore *, int, int, char c, const char *, const char *, int * );
-static int SplitMap( AstMapping *, int, int, int, AstMapping **, AstWcsMap **, AstMapping **, int * );
-static int SplitMap2( AstMapping *, int, AstMapping **, AstWcsMap **, AstMapping **, int * );
-static int SplitMat( int , double *, double *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestFits( AstFitsChan *, const char *, int *, int * );
-static int Use( AstFitsChan *, int, int, int * );
-static int Ustrcmp( const char *, const char *, int * );
-static int Ustrncmp( const char *, const char *, size_t, int * );
-static int WcsFromStore( AstFitsChan *, FitsStore *, const char *, const char *, int * );
-static int WcsNatPole( AstFitsChan *, AstWcsMap *, double, double, double, double *, double *, double *, int * );
-static int Write( AstChannel *, AstObject *, int * );
-static int Split( const char *, char **, char **, char **, const char *, const char *, int * );
-static void *CardData( AstFitsChan *, size_t *, int * );
-static void AddFrame( AstFitsChan *, AstFrameSet *, int, int, FitsStore *, char, const char *, const char *, int * );
-static void CheckZero( char *, double, int, int * );
-static void ClassTrans( AstFitsChan *, AstFitsChan *, int, int, const char *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void CreateKeyword( AstFitsChan *, const char *, char [ FITSNAMLEN + 1 ], int * );
-static void DSBSetUp( AstFitsChan *, FitsStore *, AstDSBSpecFrame *, char, double, const char *, const char *, int * );
-static void DSSToStore( AstFitsChan *, FitsStore *, const char *, const char *, int * );
-static void DelFits( AstFitsChan *, int * );
-static void PurgeWCS( AstFitsChan *, int * );
-static void Delete( AstObject *, int * );
-static void DeleteCard( AstFitsChan *, const char *, const char *, int * );
-static void DistortMaps( AstFitsChan *, FitsStore *, char, int , AstMapping **, AstMapping **, AstMapping **, AstMapping **, const char *, const char *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void Empty( AstFitsChan *, int * );
-static void FindWcs( AstFitsChan *, int, int, int, const char *, const char *, int * );
-static void FixNew( AstFitsChan *, int, int, const char *, const char *, int * );
-static void FixUsed( AstFitsChan *, int, int, int, const char *, const char *, int * );
-static void FormatCard( AstFitsChan *, char *, const char *, int * );
-static void FreeItem( double ****, int * );
-static void FreeItemC( char ****, int * );
-static void Geod( double[3], double *, double *, double *, int * );
-static void GetFiducialNSC( AstWcsMap *, double *, double *, int * );
-static void GetFiducialPPC( AstWcsMap *, double *, double *, int * );
-static void GetNextData( AstChannel *, int, char **, char **, int * );
-static void InsCard( AstFitsChan *, int, const char *, int, void *, const char *, const char *, const char *, int * );
-static void MakeBanner( const char *, const char *, const char *, char [ AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN + 1 ], int * );
-static void MakeIndentedComment( int, char, const char *, const char *, char [ AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN + 1], int * );
-static void MakeIntoComment( AstFitsChan *, const char *, const char *, int * );
-static void MarkCard( AstFitsChan *, int * );
-static void NewCard( AstFitsChan *, const char *, int, const void *, const char *, int, int * );
-static void PreQuote( const char *, char [ AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN - 3 ], int * );
-static void PutCards( AstFitsChan *, const char *, int * );
-static void PutFits( AstFitsChan *, const char [ AST__FITSCHAN_FITSCARDLEN + 1 ], int, int * );
-static void ReadFromSource( AstFitsChan *, int * );
-static void RetainFits( AstFitsChan *, int * );
-static void RoundFString( char *, int, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetFitsCF( AstFitsChan *, const char *, double *, const char *, int, int * );
-static void SetFitsCI( AstFitsChan *, const char *, int *, const char *, int, int * );
-static void SetFitsCN( AstFitsChan *, const char *, const char *, const char *, int, int * );
-static void SetFitsCom( AstFitsChan *, const char *, const char *, int, int * );
-static void SetFitsF( AstFitsChan *, const char *, double, const char *, int, int * );
-static void SetFitsI( AstFitsChan *, const char *, int, const char *, int, int * );
-static void SetFitsL( AstFitsChan *, const char *, int, const char *, int, int * );
-static void SetFitsS( AstFitsChan *, const char *, const char *, const char *, int, int * );
-static void SetFitsU( AstFitsChan *, const char *, const char *, int, int * );
-static void SetFitsCM( AstFitsChan *, const char *, int, int * );
-static void SetItem( double ****, int, int, char, double, int * );
-static void SetItemC( char ****, int, char, const char *, int * );
-static void SetValue( AstFitsChan *, const char *, void *, int, const char *, int * );
-static void SinkWrap( void (*)( const char * ), const char *, int * );
-static void SkyPole( AstWcsMap *, AstMapping *, int, int, int *, char, FitsStore *, const char *, const char *, int * );
-static void Warn( AstFitsChan *, const char *, const char *, const char *, const char *, int * );
-static void WcsFcRead( AstFitsChan *, AstFitsChan *, FitsStore *, const char *, const char *, int * );
-static void WcsToStore( AstFitsChan *, AstFitsChan *, FitsStore *, const char *, const char *, int * );
-static void WorldAxes( AstMapping *, double *, int *, int * );
-static void WriteBegin( AstChannel *, const char *, const char *, int * );
-static void WriteDouble( AstChannel *, const char *, int, int, double, const char *, int * );
-static void WriteEnd( AstChannel *, const char *, int * );
-static void WriteInt( AstChannel *, const char *, int, int, int, const char *, int * );
-static void WriteIsA( AstChannel *, const char *, const char *, int * );
-static void WriteObject( AstChannel *, const char *, int, int, AstObject *, const char *, int * );
-static void WriteString( AstChannel *, const char *, int, int, const char *, const char *, int * );
-static void WriteToSink( AstFitsChan *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-/* Member functions. */
-/* ================= */
-static int AddEncodingFrame( AstFitsChan *this, AstFrameSet *fs, int encoding,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* AddEncodingFrame
-
-* Purpose:
-* Add a Frame which conforms to the requirements of the specified encoding.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* int AddEncodingFrame( AstFitsChan *this, AstFrameSet *fs, int encoding,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* This function attempts to create a Frame based on the current Frame
-* of the supplied FrameSet, which conforms to the requirements of the
-* specified Encoding. If created, this Frame is added into the
-* FrameSet as the new current Frame, and the index of the original current
-* Frame is returned.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* fs
-* Pointer to the FrameSet.
-* encoding
-* The encoding in use.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The index of the original current Frame in the FrameSet. A value of
-* AST__NOFRAME is returned if no new Frame is added to the FrameSet,
-* or if an error occurs.
-
-*/
-
-/* Local Variables: */
- AstCmpFrame *cmpfrm; /* Pointer to spectral cube frame */
- AstFrame *cfrm; /* Pointer to original current Frame */
- AstFrame *newfrm; /* Frame describing coord system to be used */
- AstFrame *pfrm; /* Pointer to primary Frame containing axis */
- AstFrameSet *fsconv; /* FrameSet converting what we have to what we want */
- AstMapping *map; /* Mapping from what we have to what we want */
- AstSkyFrame *skyfrm; /* Pointer to SkyFrame */
- AstSpecFrame *specfrm; /* Pointer to SpecFrame */
- AstSystemType sys; /* Frame coordinate system */
- int i; /* Axis index */
- int naxc; /* No. of axes in original current Frame */
- int paxis; /* Axis index in primary frame */
- int result; /* Returned value */
-
-/* Initialise */
- result = AST__NOFRAME;
-
-/* Check the inherited status. */
- if( !astOK ) return result;
-
-/* Get a pointer to the current Frame and note how many axes it has. */
- cfrm = astGetFrame( fs, AST__CURRENT );
- naxc = astGetNaxes( cfrm );
-
-/* FITS-CLASS */
-/* ========== */
- if( encoding == FITSCLASS_ENCODING ) {
-
-/* Try to locate a SpecFrame and a SkyFrame in the current Frame. */
- specfrm = NULL;
- skyfrm = NULL;
- for( i = 0; i < naxc; i++ ) {
- astPrimaryFrame( cfrm, i, &pfrm, &paxis );
- if( astIsASpecFrame( pfrm ) ) {
- if( !specfrm ) specfrm = astCopy( pfrm );
- } else if( astIsASkyFrame( pfrm ) ) {
- if( !skyfrm ) skyfrm = astCopy( pfrm );
- }
- pfrm = astAnnul( pfrm );
- }
-
-/* Cannot do anything if either is missing. */
- if( specfrm && skyfrm ) {
-
-/* If the spectral axis is not frequency, set it to frequency. Also set
- spectral units of "Hz". */
- sys = astGetSystem( specfrm );
- if( sys != AST__FREQ ) {
- astSetSystem( specfrm, AST__FREQ );
- sys = AST__FREQ;
- }
-
-/* Ensure the standard of rest is Source and units are "Hz". */
- astSetUnit( specfrm, 0, "Hz" );
- astSetStdOfRest( specfrm, AST__SCSOR );
-
-/* The celestial axes must be either FK4, FK5 or galactic. */
- sys = astGetSystem( skyfrm );
- if( sys != AST__FK4 && sys != AST__FK5 && sys != AST__GALACTIC ) {
- astSetSystem( skyfrm, AST__FK5 );
- sys = AST__FK5;
- }
-
-/* FK5 systems must be J2000, and FK4 must be B1950. */
- if( sys == AST__FK5 ) {
- astSetC( skyfrm, "Equinox", "J2000.0" );
- } else if( sys == AST__FK4 ) {
- astSetC( skyfrm, "Equinox", "B1950.0" );
- }
-
-/* Combine the spectral and celestial Frames into a single CmpFrame with
- the spectral axis being the first axis. */
- cmpfrm = astCmpFrame( specfrm, skyfrm, "", status );
-
-/* Attempt to obtain the current Frame of the supplied FrameSet to this
- new Frame. */
- fsconv = astConvert( cfrm, cmpfrm, "" );
- if( fsconv ) {
-
-/* Get the Mapping and current Frame from the rconversion FrameSet. */
- newfrm = astGetFrame( fsconv, AST__CURRENT );
- map = astGetMapping( fsconv, AST__BASE, AST__CURRENT );
-
-/* Save the original current Frame index. */
- result = astGetCurrent( fs );
-
-/* Add the new Frame into the supplied FrameSet using the above Mapping
- to connect it to the original current Frame. The new Frame becomes the
- current Frame. */
- astAddFrame( fs, AST__CURRENT, map, newfrm );
-
-/* Free resources */
- map = astAnnul( map );
- newfrm = astAnnul( newfrm );
- fsconv = astAnnul( fsconv );
- }
-
-/* Free resources */
- cmpfrm = astAnnul( cmpfrm );
-
- }
-
-/* Release resources. */
- if( specfrm ) specfrm = astAnnul( specfrm );
- if( skyfrm ) skyfrm = astAnnul( skyfrm );
-
- }
-
-/* Free reources. */
- cfrm = astAnnul( cfrm );
-
-/* Return the result */
- return result;
-}
-
-static void AddFrame( AstFitsChan *this, AstFrameSet *fset, int pixel,
- int npix, FitsStore *store, char s, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* AddFrame
-
-* Purpose:
-* Create a Frame describing a set of axes with a given co-ordinate
-* version, and add it to the supplied FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void AddFrame( AstFitsChan *this, AstFrameSet *fset, int pixel,
-* int npix, FitsStore *store, char s, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* A Frame is created describing axis with a specific co-ordinate
-* version character, reading information from the supplied FitsStore.
-* A suitable Mapping is created to connect the new Frame to the pixel
-* (GRID) Frame in the supplied FrameSet, and the Frame is added into
-* the FrameSet using this Mapping.
-
-* Parameters:
-* this
-* The FitsChan from which the keywords were read. Warning messages
-* are added to this FitsChan if the celestial co-ordinate system is
-* not recognized.
-* fset
-* Pointer to the FrameSet to be extended.
-* pixel
-* The index of the pixel (GRID) Frame within fset.
-* npix
-* The number of pixel axes.
-* store
-* The FitsStore containing the required information extracted from
-* the FitsChan.
-* s
-* The co-ordinate version character. A space means the primary
-* axis descriptions. Otherwise the supplied character should be
-* an upper case alphabetical character ('A' to 'Z').
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstFrame *frame; /* Requested Frame */
- AstMapping *mapping; /* Mapping from pixel to requested Frame */
- AstMapping *tmap; /* Temporary Mapping pointer */
- AstPermMap *pmap; /* PermMap pointer to add or remove axes */
- double con; /* Value to be assigned to missing axes */
- int *inperm; /* Pointer to input axis permutation array */
- int *outperm; /* Pointer to output axis permutation array */
- int i; /* Axis index */
- int nwcs; /* Number of wcs axes */
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* Get a Mapping between pixel coordinates and physical coordinates, using
- the requested axis descriptions. Also returns a Frame describing the
- physical coordinate system. */
- mapping = WcsMapFrm( this, store, s, &frame, method, class, status );
-
-/* Add the Frame into the FrameSet, and annul the mapping and frame. If
- the new Frame has more axes than the pixel Frame, use a PermMap which
- assigns constant value 1.0 to the extra axes. If the new Frame has less
- axes than the pixel Frame, use a PermMap which throws away the extra
- axes. */
- if( mapping != NULL ) {
- nwcs = astGetNin( mapping );
- if( nwcs != npix ) {
- inperm = astMalloc( sizeof(int)*(size_t)npix );
- outperm = astMalloc( sizeof(int)*(size_t)nwcs );
- if( astOK ) {
- for( i = 0; i < npix; i++ ) {
- inperm[ i ] = ( i < nwcs ) ? i : -1;
- }
- for( i = 0; i < nwcs; i++ ) {
- outperm[ i ] = ( i < npix ) ? i : -1;
- }
- con = 1.0;
- pmap = astPermMap( npix, inperm, nwcs, outperm, &con, "", status );
- tmap = (AstMapping *) astCmpMap( pmap, mapping, 1, "", status );
- pmap = astAnnul( pmap );
- (void) astAnnul( mapping );
- mapping = tmap;
- }
- inperm = astFree( inperm );
- outperm = astFree( outperm );
- }
-
- astAddFrame( fset, pixel, mapping, frame );
-
-/* Annul temporary resources. */
- frame = astAnnul( frame );
- mapping = astAnnul( mapping );
- }
-}
-
-static int AddVersion( AstFitsChan *this, AstFrameSet *fs, int ipix, int iwcs,
- FitsStore *store, double *dim, char s,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* AddVersion
-
-* Purpose:
-* Add values to a FitsStore describing a specified Frame in a FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int AddVersion( AstFitsChan *this, AstFrameSet *fs, int ipix, int iwcs,
-* FitsStore *store, double *dim, char s,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* Values are added to the supplied FitsStore describing the specified
-* WCS Frame, and its relationship to the specified pixel Frame. These
-* values are based on the standard FITS-WCS conventions.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* fs
-* Pointer to the FrameSet.
-* ipix
-* The index of the pixel (GRID) Frame within fset.
-* iwcs
-* The index of the Frame within fset to use as the WCS co-ordinate
-* Frame.
-* store
-* The FitsStore in which to store the information extracted from
-* the FrameSet.
-* dim
-* Pointer to an array of pixel axis dimensions. Individual elements
-* will be AST__BAD if dimensions are not known. The number of
-* elements should equal the number of axes in the base Frame of the
-* supplied FrameSet.
-* s
-* The co-ordinate version character. A space means the primary
-* axis descriptions. Otherwise the supplied character should be
-* an upper case alphabetical character ('A' to 'Z').
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Retuned Value:
-* A value of 1 is returned if the WCS Frame was succesfully added to
-* the FitsStore. A value of zero is returned otherwise.
-
-*/
-
-/* Local Variables: */
-
- AstFrame *wcsfrm; /* WCS Frame */
- AstFrameSet *fset; /* Temporary FrameSet */
- AstMapping *iwcmap; /* Mapping from WCS to IWC Frame */
- AstMapping *pixiwcmap; /* Mapping from pixel to IWC Frame */
- AstMapping *mapping; /* Mapping from pixel to WCS Frame */
- AstMapping *tmap2; /* Temporary Mapping */
- AstMapping *tmap; /* Temporary Mapping */
- const char *old_skyrefis;/* Old value of SkyRefIs attribute */
- double *crvals; /* Pointer to array holding default CRVAL values */
- double cdelt2; /* Sum of squared PC values */
- double cdelt; /* CDELT value for axis */
- double crpix; /* CRPIX value for axis */
- double crval; /* CRVAL value for axis */
- double pc; /* Element of the PC array */
- int *axis_done; /* Flags indicating which axes have been done */
- int *wperm; /* FITS axis for each Mapping output (Frame axis) */
- int fits_i; /* FITS WCS axis index */
- int fits_j; /* FITS pixel axis index */
- int has_skyrefis; /* Does the FrameSet have a SkyRefIs attribute? */
- int iax; /* Frame axis index */
- int nwcs; /* No. of axes in WCS frame */
- int oldrep; /* Old error reporting flag */
- int ret; /* Returned value */
-
-/* Initialise */
- ret = 0;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* We need to ensure that any SkyFrame represents absolute coords rather
- than offset coords. Since the current Frame may not contain a
- SkyFrame, we temporarily switch off error reporting. */
- oldrep = astReporting( 0 );
-
-/* If the SkyRefIs attribute is set, remember the original value so that
- it can be re-instated later. */
- has_skyrefis = 1;
- if( astTest( fs, "SkyRefIs" ) ) {
- old_skyrefis = astGetC( fs, "SkyRefIs" );
-
-/* Take a copy of the string value because the pointer returned by
- astGetC points to static memory and may be changed by future calls
- to astGetC. */
- if( old_skyrefis ) {
- old_skyrefis = astStore( NULL, old_skyrefis,
- strlen( old_skyrefis ) + 1 );
-
-/* Set the new value. The Mapping inside the FrameSet is adjusted to take
- account of the changed Frame properties. */
- astSet( fs, "SkyRefIs=Ignored", status );
- }
-
- } else {
- old_skyrefis = NULL;
- if( !astOK ) has_skyrefis = 0;
- }
-
-/* Cancel any error and switch error reporting back on again. */
- astClearStatus;
- astReporting( oldrep );
-
-/* Construct a new FrameSet holding the pixel and WCS Frames from the
- supplied FrameSet, but in which the current Frame is a copy of the
- supplied WCS Frame, but optionally extended to include any extra axes
- needed to conform to the FITS model. For instance, if the WCS Frame
- consists of a single 1D SpecFrame with a defined celestial reference
- position (SpecFrame attributes RefRA and RefDec), then FITS-WCS paper
- III requires there to be a pair of celestial axes in the WCS Frame in
- which the celestial reference point for the spectral axis is defined. */
- fset = MakeFitsFrameSet( fs, ipix, iwcs, status );
-
-/* Abort if the FrameSet could not be produced. */
- if( !fset ) return ret;
-
-/* Get the Mapping from base to current Frame and check its inverse is
- defined. Return if not. */
- mapping = astGetMapping( fset, AST__BASE, AST__CURRENT );
- if( !astGetTranInverse( mapping ) ) {
- mapping = astAnnul( mapping );
- fset = astAnnul( fset );
- return ret;
- }
-
-/* We now need to choose the "FITS WCS axis" (i.e. the number that is included
- in FITS keywords such as CRVAL2) for each axis of the output Frame. For
- each WCS axis, we use the index of the pixel axis which is most closely
- aligned with it. Allocate memory to store these indices, and then fill
- the memory. */
- nwcs= astGetNout( mapping );
- wperm = astMalloc( sizeof(int)*(size_t) nwcs );
- WorldAxes( mapping, dim, wperm, status );
-
-/* Allocate an array of flags, one for each axis, which indicate if a
- description of the corresponding axis has yet been stored in the
- FitsStore. Initialise them to indicate that no axes have yet been
- described. */
- axis_done = astMalloc( sizeof(int)*(size_t) nwcs );
- if( astOK ) for( iax = 0; iax < nwcs; iax++ ) axis_done[ iax ] = 0;
-
-/* Get the original reference point from the FitsChan and convert it into
- the require WCS Frame. This is used as the default reference point (some
- algorithms may choose to ignore this default reference point ). */
- wcsfrm = astGetFrame( fset, AST__CURRENT );
- crvals = ReadCrval( this, wcsfrm, s, method, class, status );
-
-/* For each class of FITS conventions (celestial, spectral, others),
- identify any corresponding axes within the WCS Frame and add
- descriptions of them to the FitsStore. These descriptions are in terms
- of the FITS keywords defined in the corresponding FITS-WCS paper. Note,
- the keywords which descirbed the pixel->IWC mapping (CRPIX, CD, PC,
- CDELT) are not stored by these functions, instead each function
- returns a Mapping from WCS to IWC coords (these Mappings
- pass on axes of the wrong class without change). These Mappings are
- combined in series to get the final WCS->IWC Mapping. First do
- celestial axes. */
- iwcmap = CelestialAxes( fset, dim, wperm, s, store, axis_done, method, class, status );
-
-/* Now look for spectral axes, and update the iwcmap. */
- tmap = SpectralAxes( fset, dim, wperm, s, store, crvals, axis_done, method,
- class, status );
- tmap2 = (AstMapping *) astCmpMap( iwcmap, tmap, 1, "", status );
- tmap = astAnnul( tmap );
- (void) astAnnul( iwcmap );
- iwcmap = tmap2;
-
-/* Finally add descriptions of any axes not yet described (they are
- assumed to be linear), and update the iwcmap. */
- tmap = OtherAxes( fset, dim, wperm, s, store, crvals, axis_done, method, class, status );
- tmap2 = (AstMapping *) astCmpMap( iwcmap, tmap, 1, "", status );
- tmap = astAnnul( tmap );
- (void) astAnnul( iwcmap );
- iwcmap = tmap2;
-
-/* The "iwcmap" Mapping found above converts from the WCS Frame to the IWC
- Frame. Combine the pixel->WCS Mapping with this WCS->IWC Mapping to
- get the pixel->IWC Mapping. */
- pixiwcmap = (AstMapping *) astCmpMap( mapping, iwcmap, 1, "", status );
- mapping = astAnnul( mapping );
- iwcmap = astAnnul( iwcmap );
-
-/* Now attempt to store values for the keywords describing the pixel->IWC
- Mapping (CRPIX, CD, PC, CDELT). This tests that the iwcmap is linear.
- Zero is returned if the test fails. */
- ret = MakeIntWorld( pixiwcmap, wcsfrm, wperm, s, store, dim, method, class, status );
-
-/* If succesfull... */
- if( ret ) {
-
-/* Store the Domain name as the WCSNAME keyword (if set). */
- if( astTestDomain( wcsfrm ) ) {
- SetItemC( &(store->wcsname), 0, s, (char *) astGetDomain( wcsfrm ), status );
- }
-
-/* Store the UT1-UTC correction, if set, converting from seconds to days
- (as used by JACH). */
- if( astTestDut1( wcsfrm ) && s == ' ' ) {
- SetItem( &(store->dut1), 0, 0, ' ', astGetDut1( wcsfrm )/SPD, status );
- }
-
-/* Set CRVAL values which are very small compared to the pixel size to
- zero. */
- for( iax = 0; iax < nwcs; iax++ ) {
- fits_i = wperm[ iax ];
- crval = GetItem( &(store->crval), fits_i, 0, s, NULL, method, class, status );
- if( crval != AST__BAD ) {
-
- cdelt2 = 0.0;
- for( fits_j = 0; fits_j < nwcs; fits_j++ ){
- pc = GetItem( &(store->pc), fits_i, fits_j, s, NULL, method, class, status );
- if( pc == AST__BAD ) pc = ( fits_i == fits_j ) ? 1.0 : 0.0;
- cdelt2 += pc*pc;
- }
-
- cdelt = GetItem( &(store->cdelt), fits_i, 0, s, NULL, method, class, status );
- if( cdelt == AST__BAD ) cdelt = 1.0;
- cdelt2 *= ( cdelt*cdelt );
-
- if( fabs( crval ) < sqrt( DBL_EPSILON*cdelt2 ) ) {
- SetItem( &(store->crval), fits_i, 0, s, 0.0, status );
- }
- }
- }
-
-/* Round CRPIX values to the nearest millionth of a pixel. */
- for( iax = 0; iax < nwcs; iax++ ) {
- crpix = GetItem( &(store->crpix), 0, iax, s, NULL, method, class, status );
- if( crpix != AST__BAD ) {
- SetItem( &(store->crpix), 0, iax, s,
- floor( crpix*1.0E6 + 0.5 )*1.0E-6, status );
- }
- }
- }
-
-/* If required, re-instate the original value of the SkyRefIs attribute. */
- if( has_skyrefis ) {
- if( old_skyrefis ) {
- astSetC( fs, "SkyRefIs", old_skyrefis );
- old_skyrefis = astFree( (void *) old_skyrefis );
- } else {
- astClear( fs, "SkyRefIs" );
- }
- }
-
-/* Free remaining resources. */
- if( crvals ) crvals = astFree( crvals );
- wcsfrm = astAnnul( wcsfrm );
- pixiwcmap = astAnnul( pixiwcmap );
- axis_done = astFree( axis_done );
- wperm = astFree( wperm );
- fset = astAnnul( fset );
-
-/* If an error has occurred, return zero */
- return astOK ? ret : 0;
-
-}
-
-static AstMapping *AddUnitMaps( AstMapping *map, int iax, int nax, int *status ) {
-/*
-* Name:
-* AddUnitMaps
-
-* Purpose:
-* Embed a Mapping within a pair of parallel UnitMaps.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* AstMapping *AddUnitMaps( AstMapping *map, int iax, int nax, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function returns a Mapping which consists of the supplied Mapping
-* in parallel with a pair of UnitMaps so that he first axis of the
-* supplied Mapping is at a specified axis number in the returned Mapping.
-
-* Parameters:
-* map
-* Pointer to the Mapping. The Mapping must have equal numbers of
-* input and output coordinates.
-* iax
-* The index for the first input of "map" within the returned
-* Mapping.
-* nax
-* The number of axes for the returned Mapping.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A Mapping which has "nax" axes, and in which the "iax" axis
-* corresponds to the first axis of "map". Axes lower than "iax" are
-* transformed using a UnitMap, and axes higher than the last axis of
-* "map" are transformed using a UnitMap.
-
-*/
-
-/* Local Variables: */
- AstMapping *ret; /* Returned Mapping */
- AstMapping *tmap0; /* Temporary Mapping */
- AstMapping *tmap1; /* Temporary Mapping */
- AstMapping *tmap2; /* Temporary Mapping */
- int nmap; /* Number of supplied Mapping inputs */
-
-/* Initialise */
- ret = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* Initialise the returned Mapping to be a clone of the supplied Mapping. */
- ret = astClone( map );
-
-/* Note the number of inputs of the supplied Mapping (assumed to be equal
- to the number of outputs). */
- nmap = astGetNin( map );
-
-/* If necessary produce a parallel CmpMap which combines the Mapping with a
- UnitMap representing the axes lower than "iax". */
- if( iax > 0 ) {
- tmap0 = (AstMapping *) astUnitMap( iax, "", status );
- tmap1 = (AstMapping *) astCmpMap( tmap0, ret, 0, "", status );
- ret = astAnnul( ret );
- tmap0 = astAnnul( tmap0 );
- ret = tmap1;
- }
-
-/* If necessary produce a parallel CmpMap which combines the Mapping with a
- UnitMap representing the axes higher than "iax+nmap". */
- if( iax + nmap < nax ) {
- tmap1 = (AstMapping *) astUnitMap( nax - iax - nmap, "", status );
- tmap2 = (AstMapping *) astCmpMap( ret, tmap1, 0, "", status );
- ret = astAnnul( ret );
- tmap1 = astAnnul( tmap1 );
- ret = tmap2;
- }
-
-/* Return the result. */
- return ret;
-}
-
-static int AIPSFromStore( AstFitsChan *this, FitsStore *store,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* AIPSFromStore
-
-* Purpose:
-* Store WCS keywords in a FitsChan using FITS-AIPS encoding.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* int AIPSFromStore( AstFitsChan *this, FitsStore *store,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* A FitsStore is a structure containing a generalised represention of
-* a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-* from a set of FITS header cards (using a specified encoding), or
-* an AST FrameSet. In other words, a FitsStore is an encoding-
-* independant intermediary staging post between a FITS header and
-* an AST FrameSet.
-*
-* This function copies the WCS information stored in the supplied
-* FitsStore into the supplied FitsChan, using FITS-AIPS encoding.
-*
-* AIPS encoding is like FITS-WCS encoding but with the following
-* restrictions:
-*
-* 1) The celestial projection must not have any projection parameters
-* which are not set to their default values. The one exception to this
-* is that SIN projections are acceptable if the associated projection
-* parameter PV<axlat>_1 is zero and PV<axlat>_2 = cot( reference point
-* latitude). This is encoded using the string "-NCP". The SFL projection
-* is encoded using the string "-GLS". Note, the original AIPS WCS
-* system only recognised a small subset of the currently available
-* projections, but some more recent AIPS-like software recognizes some
-* of the new projections included in the FITS-WCS encoding. The AIT,
-* GLS and MER can only be written if the CRVAL keywords are zero for
-* both longitude and latitude axes.
-*
-* 2) The celestial axes must be RA/DEC, galactic or ecliptic.
-*
-* 3) LONPOLE and LATPOLE must take their default values.
-*
-* 4) Only primary axis descriptions are written out.
-*
-* 5) EPOCH is written instead of EQUINOX & RADECSYS, and uses the
-* IAU 1984 rule ( EPOCH < 1984.0 is treated as a Besselian epoch
-* and implies RADECSYS=FK4, EPOCH >= 1984.0 is treated as a
-* Julian epoch and implies RADECSYS=FK5). The RADECSYS & EQUINOX
-* values in the FitsStore must be consistent with this rule.
-*
-* 6) Any rotation produced by the PC matrix must be restricted to
-* the celestial plane, and must involve no shear. A CROTA keyword
-* with associated CDELT values are produced instead of the PC
-* matrix.
-*
-* 7) ICRS is not supported.
-*
-* 8) Spectral axes can be created only for FITS-WCS CTYPE values of "FREQ"
-* "VRAD" and "VOPT-F2W" and with standards of rest of LSRK, LSRD,
-* BARYCENT and GEOCENTR.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* store
-* Pointer to the FitsStore.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A value of 1 is returned if succesfull, and zero is returned
-* otherwise.
-
-*/
-
-/* Local Variables: */
- char *comm; /* Pointer to comment string */
- const char *cval; /* Pointer to string keyword value */
- const char *specunit;/* Pointer to corrected spectral units string */
- char combuf[80]; /* Buffer for FITS card comment */
- char lattype[MXCTYPELEN];/* Latitude axis CTYPE */
- char lontype[MXCTYPELEN];/* Longitude axis CTYPE */
- char s; /* Co-ordinate version character */
- char sign[2]; /* Fraction's sign character */
- char spectype[MXCTYPELEN];/* Spectral axis CTYPE */
- double *cdelt; /* Pointer to CDELT array */
- double cdl; /* CDELT term */
- double cdlat_lon; /* Off-diagonal CD element */
- double cdlon_lat; /* Off-diagonal CD element */
- double coscro; /* Cos( CROTA ) */
- double crota; /* CROTA value to use */
- double epoch; /* Epoch of reference equinox */
- double fd; /* Fraction of a day */
- double latval; /* CRVAL for latitude axis */
- double lonval; /* CRVAL for longitude axis */
- double mjd99; /* MJD at start of 1999 */
- double p1, p2; /* Projection parameters */
- double rho_a; /* First estimate of CROTA */
- double rho_b; /* Second estimate of CROTA */
- double sincro; /* Sin( CROTA ) */
- double specfactor; /* Factor for converting internal spectral units */
- double val; /* General purpose value */
- int axlat; /* Index of latitude FITS WCS axis */
- int axlon; /* Index of longitude FITS WCS axis */
- int axrot1; /* Index of first CROTA rotation axis */
- int axrot2; /* Index of second CROTA rotation axis */
- int axspec; /* Index of spectral FITS WCS axis */
- int i; /* Axis index */
- int ihmsf[ 4 ]; /* Hour, minute, second, fractional second */
- int iymdf[ 4 ]; /* Year, month, date, fractional day */
- int j; /* Axis index */
- int jj; /* SlaLib status */
- int naxis; /* No. of axes */
- int ok; /* Is FitsSTore OK for IRAF encoding? */
- int prj; /* Projection type */
-
-/* Check the inherited status. */
- if( !astOK ) return 0;
-
-/* Initialise */
- specunit = "";
- specfactor = 1.0;
-
-/* First check that the values in the FitsStore conform to the
- requirements of the AIPS encoding. Assume they do to begin with. */
- ok = 1;
-
-/* Just do primary axes. */
- s = ' ';
-
-/* Look for the primary celestial axes. */
- FindLonLatSpecAxes( store, s, &axlon, &axlat, &axspec, method, class, status );
-
-/* If both longitude and latitude axes are present ...*/
- if( axlon >= 0 && axlat >= 0 ) {
-
-/* Get the CRVAL values for both axes. */
- latval = GetItem( &( store->crval ), axlat, 0, s, NULL, method, class, status );
- if( latval == AST__BAD ) ok = 0;
-
- lonval = GetItem( &( store->crval ), axlon, 0, s, NULL, method, class, status );
- if( lonval == AST__BAD ) ok = 0;
-
-/* Get the CTYPE values for both axes. Extract the projection type as
- specified by the last 4 characters in the latitude CTYPE keyword value. */
- cval = GetItemC( &(store->ctype), axlon, s, NULL, method, class, status );
- if( !cval ) {
- ok = 0;
- } else {
- strcpy( lontype, cval );
- }
-
- cval = GetItemC( &(store->ctype), axlat, s, NULL, method, class, status );
- if( !cval ) {
- ok = 0;
- prj = AST__WCSBAD;
- } else {
- strcpy( lattype, cval );
- prj = astWcsPrjType( cval + 4 );
- }
-
-/* Check the projection type is OK. */
- if( prj != AST__SIN ){
-
-/* There must be no projection parameters. */
- if( GetMaxJM( &(store->pv), ' ', status ) >= 0 ) {
- ok = 0;
-
-/* FITS-AIPS cannot handle the AST-specific TPN projection. */
- } else if( prj == AST__TPN ) {
- ok = 0;
-
-/* For AIT, MER and GLS, check that the reference point is the origin of
- the celestial co-ordinate system. */
- } else if( prj == AST__MER ||
- prj == AST__AIT ||
- prj == AST__SFL ) {
- if( latval != 0.0 || lonval != 0.0 ){
- ok = 0;
-
-/* Change the new SFL projection code to to the older equivalent GLS */
- } else if( prj == AST__SFL ){
- (void) strcpy( lontype + 4, "-GLS" );
- (void) strcpy( lattype + 4, "-GLS" );
- }
- }
-
-/* SIN projections are only acceptable if the associated projection
- parameters are both zero, or if the first is zero and the second
- = cot( reference point latitude ) (the latter case is equivalent to
- the old NCP projection). */
- } else {
- p1 = GetItem( &( store->pv ), axlat, 1, s, NULL, method, class, status );
- p2 = GetItem( &( store->pv ), axlat, 2, s, NULL, method, class, status );
- if( p1 == AST__BAD ) p1 = 0.0;
- if( p2 == AST__BAD ) p2 = 0.0;
- ok = 0;
-
- if( p1 == 0.0 ) {
- if( p2 == 0.0 ) {
- ok = 1;
-
- } else if( fabs( p2 ) >= 1.0E14 && latval == 0.0 ){
- ok = 1;
- (void) strcpy( lontype + 4, "-NCP" );
- (void) strcpy( lattype + 4, "-NCP" );
-
- } else if( fabs( p2*tan( AST__DD2R*latval ) - 1.0 )
- < 0.01 ){
- ok = 1;
- (void) strcpy( lontype + 4, "-NCP" );
- (void) strcpy( lattype + 4, "-NCP" );
- }
- }
- }
-
-/* Identify the celestial coordinate system from the first 4 characters of the
- longitude CTYPE value. Only RA, galactic longitude, and ecliptic
- longitude can be stored using FITS-AIPS. */
- if( ok && strncmp( lontype, "RA--", 4 ) &&
- strncmp( lontype, "GLON", 4 ) &&
- strncmp( lontype, "ELON", 4 ) ) ok = 0;
-
-/* If the physical Frame requires a LONPOLE or LATPOLE keyword, it cannot
- be encoded using FITS-IRAF. */
- if( GetItem( &(store->latpole), 0, 0, s, NULL, method, class, status )
- != AST__BAD ||
- GetItem( &(store->lonpole), 0, 0, s, NULL, method, class, status )
- != AST__BAD ) ok = 0;
- }
-
-/* If a spectral axis is present ...*/
- if( ok && axspec >= 0 ) {
-
-/* Get the CTYPE values for the axis, and find the AIPS equivalent, if
- possible. */
- cval = GetItemC( &(store->ctype), axspec, s, NULL, method, class, status );
- if( !cval ) {
- ok = 0;
- } else {
- if( !strncmp( cval, "FREQ", astChrLen( cval ) ) ) {
- strcpy( spectype, "FREQ" );
- } else if( !strncmp( cval, "VRAD", astChrLen( cval ) ) ) {
- strcpy( spectype, "VELO" );
- } else if( !strncmp( cval, "VOPT-F2W", astChrLen( cval ) ) ) {
- strcpy( spectype, "FELO" );
- } else {
- ok = 0;
- }
- }
-
-/* If OK, check the SPECSYS value and add the AIPS equivalent onto the
- end of the CTYPE value.*/
- cval = GetItemC( &(store->specsys), 0, s, NULL, method, class, status );
- if( !cval ) {
- ok = 0;
- } else if( ok ) {
- if( !strncmp( cval, "LSRK", astChrLen( cval ) ) ) {
- strcpy( spectype+4, "-LSR" );
- } else if( !strncmp( cval, "LSRD", astChrLen( cval ) ) ) {
- strcpy( spectype+4, "-LSD" );
- } else if( !strncmp( cval, "BARYCENT", astChrLen( cval ) ) ) {
- strcpy( spectype+4, "-HEL" );
- } else if( !strncmp( cval, "GEOCENTR", astChrLen( cval ) ) ) {
- strcpy( spectype+4, "-GEO" );
- } else {
- ok = 0;
- }
- }
-
-/* If still OK, ensure the spectral axis units are Hz or m/s. */
- cval = GetItemC( &(store->cunit), axspec, s, NULL, method, class, status );
- if( !cval ) {
- ok = 0;
- } else if( ok ) {
- if( !strcmp( cval, "Hz" ) ) {
- specunit = "HZ";
- specfactor = 1.0;
- } else if( !strcmp( cval, "kHz" ) ) {
- specunit = "HZ";
- specfactor = 1.0E3;
- } else if( !strcmp( cval, "MHz" ) ) {
- specunit = "HZ";
- specfactor = 1.0E6;
- } else if( !strcmp( cval, "GHz" ) ) {
- specunit = "HZ";
- specfactor = 1.0E9;
- } else if( !strcmp( cval, "m/s" ) ) {
- specunit = "m/s";
- specfactor = 1.0;
- } else if( !strcmp( cval, "km/s" ) ) {
- specunit = "m/s";
- specfactor = 1.0E3;
- } else {
- ok = 0;
- }
- }
- }
-
-/* Save the number of axes */
- naxis = GetMaxJM( &(store->crpix), ' ', status ) + 1;
-
-/* If this is different to the value of NAXIS abort since this encoding
- does not support WCSAXES keyword. */
- if( naxis != store->naxis ) ok = 0;
-
-/* Allocate memory to store the CDELT values */
- if( ok ) {
- cdelt = (double *) astMalloc( sizeof(double)*naxis );
- if( !cdelt ) ok = 0;
- } else {
- cdelt = NULL;
- }
-
-/* Check that rotation is restricted to the celestial plane, and extract
- the CDELT (diagonal) terms, etc. If there are no celestial
- axes, restrict rotation to the first two non-spectral axes. */
- if( axlat < 0 && axlon < 0 ) {
- if( axspec >= 0 && naxis > 2 ) {
- axrot2 = ( axspec == 0 ) ? 1 : 0;
- axrot1 = axrot2 + 1;
- if( axrot1 == axspec ) axrot1++;
- } else if( naxis > 1 ){
- axrot2 = 0;
- axrot1 = 1;
- } else {
- axrot2 = -1;
- axrot1 = -1;
- }
- } else {
- axrot1 = axlon;
- axrot2 = axlat;
- }
-
- cdlat_lon = 0.0;
- cdlon_lat = 0.0;
- for( i = 0; i < naxis && ok; i++ ){
- cdl = GetItem( &(store->cdelt), i, 0, s, NULL, method, class, status );
- if( cdl == AST__BAD ) cdl = 1.0;
-
- for( j = 0; j < naxis && ok; j++ ){
- val = GetItem( &(store->pc), i, j, s, NULL, method, class, status );
- if( val == AST__BAD ) val = ( i == j ) ? 1.0 : 0.0;
- val *= cdl;
-
- if( i == j ){
- cdelt[ i ] = val;
-
- } else if( i == axrot2 && j == axrot1 ){
- cdlat_lon = val;
-
- } else if( i == axrot1 && j == axrot2 ){
- cdlon_lat = val;
-
- } else if( val != 0.0 ){
- ok = 0;
- }
- }
- }
-
-/* Find the CROTA and CDELT values for the celestial axes. */
- if( ok && axrot1 >= 0 && axrot2 >= 0 ) {
-
- if( cdlat_lon > 0.0 ) {
- rho_a = atan2( cdlat_lon, cdelt[ axrot1 ] );
- } else if( cdlat_lon == 0.0 ) {
- rho_a = 0.0;
- } else {
- rho_a = atan2( -cdlat_lon, -cdelt[ axrot1 ] );
- }
-
- if( cdlon_lat > 0.0 ) {
- rho_b = atan2( cdlon_lat, -cdelt[ axrot2 ] );
- } else if( cdlon_lat == 0.0 ) {
- rho_b = 0.0;
- } else {
- rho_b = atan2( -cdlon_lat, cdelt[ axrot2 ] );
- }
-
- if( fabs( palSlaDrange( rho_a - rho_b ) ) < 1.0E-2 ){
- crota = 0.5*( palSlaDranrm( rho_a ) + palSlaDranrm( rho_b ) );
- coscro = cos( crota );
- sincro = sin( crota );
-
- if( fabs( coscro ) > fabs( sincro ) ){
- cdelt[ axrot2 ] /= coscro;
- cdelt[ axrot1 ] /= coscro;
- } else {
- cdelt[ axrot2 ] = -cdlon_lat/sincro;
- cdelt[ axrot1 ] = cdlat_lon/sincro;
- }
- crota *= AST__DR2D;
-
- } else {
- ok = 0;
- }
-
- } else {
- crota = 0.0;
- }
-
-/* Get RADECSYS and the reference equinox (called EPOCH in FITS-AIPS). */
- cval = GetItemC( &(store->radesys), 0, s, NULL, method, class, status );
- epoch = GetItem( &(store->equinox), 0, 0, s, NULL, method, class, status );
-
-/* If RADECSYS was available... */
- if( cval ){
-
-/* ICRS is not supported in this encoding. */
- if( !strcmp( "ICRS", cval ) ) ok = 0;
-
-/* If epoch was not available, set a default epoch. */
- if( epoch == AST__BAD ){
-
- if( !strcmp( "FK4", cval ) ){
- epoch = 1950.0;
- } else if( !strcmp( "FK5", cval ) ){
- epoch = 2000.0;
- } else {
- ok = 0;
- }
-
-/* If an epoch was supplied, check it is consistent with the IAU 1984
- rule. */
- } else {
- if( !strcmp( "FK4", cval ) ){
- if( epoch >= 1984.0 ) ok = 0;
- } else if( !strcmp( "FK5", cval ) ){
- if( epoch < 1984.0 ) ok = 0;
- } else {
- ok = 0;
- }
- }
- }
-
-/* Only create the keywords if the FitsStore conforms to the requirements
- of the FITS-AIPS encoding. */
- if( ok ) {
-
-/* Get and save CRPIX for all pixel axes. These are required, so break
- if they are not available. */
- for( j = 0; j < naxis && ok; j++ ){
- val = GetItem( &(store->crpix), 0, j, s, NULL, method, class, status );
- if( val == AST__BAD ) {
- ok = 0;
- } else {
- sprintf( combuf, "Reference pixel on axis %d", j + 1 );
- SetValue( this, FormatKey( "CRPIX", j + 1, -1, s, status ), &val,
- AST__FLOAT, combuf, status );
- }
- }
-
-/* Get and save CRVAL for all intermediate axes. These are required, so
- break if they are not available. */
- for( i = 0; i < naxis && ok; i++ ){
- val = GetItem( &(store->crval), i, 0, s, NULL, method, class, status );
- if( val == AST__BAD ) {
- ok = 0;
- } else {
- if( i == axspec ) val *= specfactor;
- sprintf( combuf, "Value at ref. pixel on axis %d", i + 1 );
- SetValue( this, FormatKey( "CRVAL", i + 1, -1, s, status ), &val,
- AST__FLOAT, combuf, status );
- }
- }
-
-/* Get and save CTYPE for all intermediate axes. These are required, so
- break if they are not available. Use the potentially modified versions
- saved above for the celestial axes. */
- for( i = 0; i < naxis && ok; i++ ){
- if( i == axlat ) {
- cval = lattype;
- } else if( i == axlon ) {
- cval = lontype;
- } else if( i == axspec ) {
- cval = spectype;
- } else {
- cval = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
- }
- if( cval ){
- comm = GetItemC( &(store->ctype_com), i, s, NULL, method, class, status );
- if( !comm ) {
- sprintf( combuf, "Type of co-ordinate on axis %d", i + 1 );
- comm = combuf;
- }
- SetValue( this, FormatKey( "CTYPE", i + 1, -1, s, status ), &cval,
- AST__STRING, comm, status );
- } else {
- ok = 0;
- }
- }
-
-/* CDELT values */
- if( axspec != -1 ) cdelt[ axspec ] *= specfactor;
- for( i = 0; i < naxis; i++ ){
- SetValue( this, FormatKey( "CDELT", i + 1, -1, s, status ), cdelt + i,
- AST__FLOAT, "Pixel size", status );
- }
-
-/* CUNIT values. */
- for( i = 0; i < naxis; i++ ) {
- cval = GetItemC( &(store->cunit), i, s, NULL, method, class, status );
- if( cval ) {
- if( i == axspec ) cval = specunit;
- sprintf( combuf, "Units for axis %d", i + 1 );
- SetValue( this, FormatKey( "CUNIT", i + 1, -1, s, status ), &cval, AST__STRING,
- combuf, status );
- }
- }
-
-/* CROTA */
- if( axrot2 != -1 ){
- SetValue( this, FormatKey( "CROTA", axrot2 + 1, -1, s, status ), &crota,
- AST__FLOAT, "Axis rotation", status );
- } else if( ( axspec == -1 && naxis > 1 ) ||
- ( axspec != -1 && naxis > 2 ) ) {
- SetValue( this, "CROTA1", &crota, AST__FLOAT, "Axis rotation", status );
- }
-
-/* Reference equinox */
- if( epoch != AST__BAD ) SetValue( this, "EPOCH", &epoch, AST__FLOAT,
- "Epoch of reference equinox", status );
-
-/* Date of observation. */
- val = GetItem( &(store->mjdobs), 0, 0, ' ', NULL, method, class, status );
- if( val != AST__BAD ) {
-
-/* The format used for the DATE-OBS keyword depends on the value of the
- keyword. For DATE-OBS < 1999.0, use the old "dd/mm/yy" format.
- Otherwise, use the new "ccyy-mm-ddThh:mm:ss[.ssss]" format. */
- palSlaCaldj( 99, 1, 1, &mjd99, &jj );
- if( val < mjd99 ) {
- palSlaDjcal( 0, val, iymdf, &jj );
- sprintf( combuf, "%2.2d/%2.2d/%2.2d", iymdf[ 2 ], iymdf[ 1 ],
- iymdf[ 0 ] - ( ( iymdf[ 0 ] > 1999 ) ? 2000 : 1900 ) );
- } else {
- palSlaDjcl( val, iymdf, iymdf+1, iymdf+2, &fd, &jj );
- palSlaDd2tf( 3, fd, sign, ihmsf );
- sprintf( combuf, "%4.4d-%2.2d-%2.2dT%2.2d:%2.2d:%2.2d.%3.3d",
- iymdf[0], iymdf[1], iymdf[2], ihmsf[0], ihmsf[1],
- ihmsf[2], ihmsf[3] );
- }
-
-/* Now store the formatted string in the FitsChan. */
- cval = combuf;
- SetValue( this, "DATE-OBS", (void *) &cval, AST__STRING,
- "Date of observation", status );
- }
-
-/* Spectral stuff.. */
- if( axspec >= 0 ) {
-
-/* Rest frequency */
- val = GetItem( &(store->restfrq), 0, 0, s, NULL, method, class, status );
- if( val != AST__BAD ) SetValue( this, FormatKey( "RESTFREQ", -1, -1, s, status ),
- &val, AST__FLOAT, "[Hz] Rest frequency", status );
- }
- }
-
-/* Release CDELT workspace */
- if( cdelt ) cdelt = (double *) astFree( (void *) cdelt );
-
-/* Return zero or ret depending on whether an error has occurred. */
- return astOK ? ok : 0;
-}
-
-static int AIPSPPFromStore( AstFitsChan *this, FitsStore *store,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* AIPSPPFromStore
-
-* Purpose:
-* Store WCS keywords in a FitsChan using FITS-AIPS++ encoding.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* int AIPSPPFromStore( AstFitsChan *this, FitsStore *store,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* A FitsStore is a structure containing a generalised represention of
-* a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-* from a set of FITS header cards (using a specified encoding), or
-* an AST FrameSet. In other words, a FitsStore is an encoding-
-* independant intermediary staging post between a FITS header and
-* an AST FrameSet.
-*
-* This function copies the WCS information stored in the supplied
-* FitsStore into the supplied FitsChan, using FITS-AIPS++ encoding.
-*
-* AIPS++ encoding is like FITS-WCS encoding but with the following
-* restrictions:
-*
-* 1) The celestial axes must be RA/DEC, galactic or ecliptic.
-*
-* 2) Only primary axis descriptions are written out.
-*
-* 3) RADESYS is not written and so the RADECSYS & EQUINOX values in the
-* FitsStore must be consistent with the "1984" rule.
-*
-* 4) Any rotation produced by the PC matrix must be restricted to
-* the celestial plane, and must involve no shear. A CROTA keyword
-* with associated CDELT values are produced instead of the PC
-* matrix.
-*
-* 5) ICRS is not supported.
-*
-* 6) Spectral axes can be created only for FITS-WCS CTYPE values of "FREQ"
-* "VRAD" and "VOPT-F2W" and with standards of rest of LSRK, LSRD,
-* BARYCENT and GEOCENTR.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* store
-* Pointer to the FitsStore.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A value of 1 is returned if succesfull, and zero is returned
-* otherwise.
-
-*/
-
-/* Local Variables: */
- char *comm; /* Pointer to comment string */
- const char *cval; /* Pointer to string keyword value */
- const char *specunit;/* Pointer to corrected spectral units string */
- char combuf[80]; /* Buffer for FITS card comment */
- char lattype[MXCTYPELEN];/* Latitude axis CTYPE */
- char lontype[MXCTYPELEN];/* Longitude axis CTYPE */
- char s; /* Co-ordinate version character */
- char sign[2]; /* Fraction's sign character */
- char spectype[MXCTYPELEN];/* Spectral axis CTYPE */
- double *cdelt; /* Pointer to CDELT array */
- double cdl; /* CDELT term */
- double cdlat_lon; /* Off-diagonal CD element */
- double cdlon_lat; /* Off-diagonal CD element */
- double coscro; /* Cos( CROTA ) */
- double crota; /* CROTA value to use */
- double epoch; /* Epoch of reference equinox */
- double fd; /* Fraction of a day */
- double mjd99; /* MJD at start of 1999 */
- double rho_a; /* First estimate of CROTA */
- double rho_b; /* Second estimate of CROTA */
- double sincro; /* Sin( CROTA ) */
- double specfactor; /* Factor for converting internal spectral units */
- double val; /* General purpose value */
- int axlat; /* Index of latitude FITS WCS axis */
- int axlon; /* Index of longitude FITS WCS axis */
- int axrot1; /* Index of first CROTA rotation axis */
- int axrot2; /* Index of second CROTA rotation axis */
- int axspec; /* Index of spectral FITS WCS axis */
- int i; /* Axis index */
- int ihmsf[ 4 ]; /* Hour, minute, second, fractional second */
- int iymdf[ 4 ]; /* Year, month, date, fractional day */
- int j; /* Axis index */
- int jj; /* SlaLib status */
- int m; /* Projection parameter index */
- int maxm; /* Max projection parameter index */
- int naxis; /* No. of axes */
- int ok; /* Is FitsSTore OK for IRAF encoding? */
- int prj; /* Projection type */
-
-/* Check the inherited status. */
- if( !astOK ) return 0;
-
-/* Initialise */
- specunit = "";
- specfactor = 1.0;
- maxm = 0;
-
-/* First check that the values in the FitsStore conform to the
- requirements of the AIPS++ encoding. Assume they do to begin with. */
- ok = 1;
-
-/* Just do primary axes. */
- s = ' ';
-
-/* Save the number of axes */
- naxis = GetMaxJM( &(store->crpix), ' ', status ) + 1;
-
-/* Look for the primary celestial and spectral axes. */
- FindLonLatSpecAxes( store, s, &axlon, &axlat, &axspec, method, class, status );
-
-/* If both longitude and latitude axes are present ...*/
- if( axlon >= 0 && axlat >= 0 ) {
-
-/* Get the CTYPE values for both axes. Extract the projection type as
- specified by the last 4 characters in the latitude CTYPE keyword value. */
- cval = GetItemC( &(store->ctype), axlon, s, NULL, method, class, status );
- if( !cval ) {
- ok = 0;
- } else {
- strcpy( lontype, cval );
- }
-
- cval = GetItemC( &(store->ctype), axlat, s, NULL, method, class, status );
- if( !cval ) {
- ok = 0;
- prj = AST__WCSBAD;
- } else {
- strcpy( lattype, cval );
- prj = astWcsPrjType( cval + 4 );
- }
-
-/* FITS-AIPS++ cannot handle the AST-specific TPN projection. */
- if( prj == AST__TPN ) ok = 0;
-
-/* Projection parameters. FITS-AIPS++ encoding ignores projection parameters
- associated with the longitude axis. The number of parameters is limited to
- 10. */
- maxm = GetMaxJM( &(store->pv), ' ', status );
- for( i = 0; i < naxis && ok; i++ ){
- if( i != axlon ) {
- for( m = 0; m <= maxm; m++ ){
- val = GetItem( &(store->pv), i, m, s, NULL, method, class, status );
- if( val != AST__BAD ) {
- if( i != axlat || m >= 10 ){
- ok = 0;
- break;
- }
- }
- }
- }
- }
-
-/* Identify the celestial coordinate system from the first 4 characters of the
- longitude CTYPE value. Only RA, galactic longitude, and ecliptic
- longitude can be stored using FITS-AIPS++. */
- if( ok && strncmp( lontype, "RA--", 4 ) &&
- strncmp( lontype, "GLON", 4 ) &&
- strncmp( lontype, "ELON", 4 ) ) ok = 0;
-
- }
-
-/* If a spectral axis is present ...*/
- if( axspec >= 0 ) {
-
-/* Get the CTYPE values for the axis, and find the AIPS equivalent, if
- possible. */
- cval = GetItemC( &(store->ctype), axspec, s, NULL, method, class, status );
- if( !cval ) {
- ok = 0;
- } else {
- if( !strncmp( cval, "FREQ", astChrLen( cval ) ) ) {
- strcpy( spectype, "FREQ" );
- } else if( !strncmp( cval, "VRAD", astChrLen( cval ) ) ) {
- strcpy( spectype, "VELO" );
- } else if( !strncmp( cval, "VOPT-F2W", astChrLen( cval ) ) ) {
- strcpy( spectype, "FELO" );
- } else {
- ok = 0;
- }
- }
-
-/* If OK, check the SPECSYS value and add the AIPS equivalent onto the
- end of the CTYPE value.*/
- cval = GetItemC( &(store->specsys), 0, s, NULL, method, class, status );
- if( !cval ) {
- ok = 0;
- } else {
- if( !strncmp( cval, "LSRK", astChrLen( cval ) ) ) {
- strcpy( spectype+4, "-LSR" );
- } else if( !strncmp( cval, "LSRD", astChrLen( cval ) ) ) {
- strcpy( spectype+4, "-LSD" );
- } else if( !strncmp( cval, "BARYCENT", astChrLen( cval ) ) ) {
- strcpy( spectype+4, "-HEL" );
- } else if( !strncmp( cval, "GEOCENTR", astChrLen( cval ) ) ) {
- strcpy( spectype+4, "-GEO" );
- } else {
- ok = 0;
- }
- }
-
-/* If still OK, ensure the spectral axis units are Hz or m/s. */
- cval = GetItemC( &(store->cunit), axspec, s, NULL, method, class, status );
- if( !cval ) {
- ok = 0;
- } else if( ok ) {
- if( !strcmp( cval, "Hz" ) ) {
- specunit = "HZ";
- specfactor = 1.0;
- } else if( !strcmp( cval, "kHz" ) ) {
- specunit = "HZ";
- specfactor = 1.0E3;
- } else if( !strcmp( cval, "MHz" ) ) {
- specunit = "HZ";
- specfactor = 1.0E6;
- } else if( !strcmp( cval, "GHz" ) ) {
- specunit = "HZ";
- specfactor = 1.0E9;
- } else if( !strcmp( cval, "m/s" ) ) {
- specunit = "m/s";
- specfactor = 1.0;
- } else if( !strcmp( cval, "km/s" ) ) {
- specunit = "m/s";
- specfactor = 1.0E3;
- } else {
- ok = 0;
- }
- }
- }
-
-/* If this is different to the value of NAXIS abort since this encoding
- does not support WCSAXES keyword. */
- if( naxis != store->naxis ) ok = 0;
-
-/* Allocate memory to store the CDELT values */
- if( ok ) {
- cdelt = (double *) astMalloc( sizeof(double)*naxis );
- if( !cdelt ) ok = 0;
- } else {
- cdelt = NULL;
- }
-
-/* Check that rotation is restricted to the celestial plane, and extract
- the CDELT (diagonal) terms, etc. If there are no celestial
- axes, restrict rotation to the first two non-spectral axes. */
- if( axlat < 0 && axlon < 0 ) {
- if( axspec >= 0 && naxis > 2 ) {
- axrot2 = ( axspec == 0 ) ? 1 : 0;
- axrot1 = axrot2 + 1;
- if( axrot1 == axspec ) axrot1++;
- } else if( naxis > 1 ){
- axrot2 = 0;
- axrot1 = 1;
- } else {
- axrot2 = -1;
- axrot1 = -1;
- }
- } else {
- axrot1 = axlon;
- axrot2 = axlat;
- }
-
-
- cdlat_lon = 0.0;
- cdlon_lat = 0.0;
- for( i = 0; i < naxis && ok; i++ ){
- cdl = GetItem( &(store->cdelt), i, 0, s, NULL, method, class, status );
- if( cdl == AST__BAD ) cdl = 1.0;
-
- for( j = 0; j < naxis && ok; j++ ){
- val = GetItem( &(store->pc), i, j, s, NULL, method, class, status );
- if( val == AST__BAD ) val = ( i == j ) ? 1.0 : 0.0;
- val *= cdl;
-
- if( i == j ){
- cdelt[ i ] = val;
-
- } else if( i == axrot2 && j == axrot1 ){
- cdlat_lon = val;
-
- } else if( i == axrot1 && j == axrot2 ){
- cdlon_lat = val;
-
- } else if( val != 0.0 ){
- ok = 0;
- }
- }
- }
-
-/* Find the CROTA and CDELT values for the celestial axes. */
- if( ok && axrot1 >= 0 && axrot2 >= 0 ) {
-
- if( cdlat_lon > 0.0 ) {
- rho_a = atan2( cdlat_lon, cdelt[ axrot1 ] );
- } else if( cdlat_lon == 0.0 ) {
- rho_a = 0.0;
- } else {
- rho_a = atan2( -cdlat_lon, -cdelt[ axrot1 ] );
- }
-
- if( cdlon_lat > 0.0 ) {
- rho_b = atan2( cdlon_lat, -cdelt[ axrot2 ] );
- } else if( cdlon_lat == 0.0 ) {
- rho_b = 0.0;
- } else {
- rho_b = atan2( -cdlon_lat, cdelt[ axrot2 ] );
- }
-
- if( fabs( palSlaDrange( rho_a - rho_b ) ) < 1.0E-2 ){
- crota = 0.5*( palSlaDranrm( rho_a ) + palSlaDranrm( rho_b ) );
- coscro = cos( crota );
- sincro = sin( crota );
-
- if( fabs( coscro ) > fabs( sincro ) ){
- cdelt[ axrot2 ] /= coscro;
- cdelt[ axrot1 ] /= coscro;
- } else {
- cdelt[ axrot2 ] = -cdlon_lat/sincro;
- cdelt[ axrot1 ] = cdlat_lon/sincro;
- }
- crota *= AST__DR2D;
-
-/* Use AST__BAD to indicate that CDi_j values should be produced
- instead of CROTA/CDELT. (I am told AIPS++ can understand CD matrices) */
- } else {
- crota = AST__BAD;
- }
-
- } else {
- crota = 0.0;
- }
-
-/* Get RADECSYS and the reference equinox. */
- cval = GetItemC( &(store->radesys), 0, s, NULL, method, class, status );
- epoch = GetItem( &(store->equinox), 0, 0, s, NULL, method, class, status );
-
-/* If RADECSYS was available... */
- if( cval ){
-
-/* ICRS is not supported in this encoding. */
- if( !strcmp( "ICRS", cval ) ) ok = 0;
-
-/* If epoch was not available, set a default epoch. */
- if( epoch == AST__BAD ){
-
- if( !strcmp( "FK4", cval ) ){
- epoch = 1950.0;
- } else if( !strcmp( "FK5", cval ) ){
- epoch = 2000.0;
- } else {
- ok = 0;
- }
-
-/* If an equinox was supplied, check it is consistent with the IAU 1984
- rule. */
- } else {
- if( !strcmp( "FK4", cval ) ){
- if( epoch >= 1984.0 ) ok = 0;
- } else if( !strcmp( "FK5", cval ) ){
- if( epoch < 1984.0 ) ok = 0;
- } else {
- ok = 0;
- }
- }
- }
-
-/* Only create the keywords if the FitsStore conforms to the requirements
- of the FITS-AIPS++ encoding. */
- if( ok ) {
-
-/* Get and save CRPIX for all pixel axes. These are required, so break
- if they are not available. */
- for( j = 0; j < naxis && ok; j++ ){
- val = GetItem( &(store->crpix), 0, j, s, NULL, method, class, status );
- if( val == AST__BAD ) {
- ok = 0;
- } else {
- sprintf( combuf, "Reference pixel on axis %d", j + 1 );
- SetValue( this, FormatKey( "CRPIX", j + 1, -1, s, status ), &val,
- AST__FLOAT, combuf, status );
- }
- }
-
-/* Get and save CRVAL for all intermediate axes. These are required, so
- break if they are not available. */
- for( i = 0; i < naxis && ok; i++ ){
- val = GetItem( &(store->crval), i, 0, s, NULL, method, class, status );
- if( val == AST__BAD ) {
- ok = 0;
- } else {
- if( i == axspec ) val *= specfactor;
- sprintf( combuf, "Value at ref. pixel on axis %d", i + 1 );
- SetValue( this, FormatKey( "CRVAL", i + 1, -1, s, status ), &val,
- AST__FLOAT, combuf, status );
- }
- }
-
-/* Get and save CTYPE for all intermediate axes. These are required, so
- break if they are not available. Use the potentially modified versions
- saved above for the celestial axes. */
- for( i = 0; i < naxis && ok; i++ ){
- if( i == axlat ) {
- cval = lattype;
- } else if( i == axlon ) {
- cval = lontype;
- } else if( i == axspec ) {
- cval = spectype;
- } else {
- cval = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
- }
- if( cval ){
- comm = GetItemC( &(store->ctype_com), i, s, NULL, method, class, status );
- if( !comm ) {
- sprintf( combuf, "Type of co-ordinate on axis %d", i + 1 );
- comm = combuf;
- }
- SetValue( this, FormatKey( "CTYPE", i + 1, -1, s, status ), &cval,
- AST__STRING, comm, status );
- } else {
- ok = 0;
- }
- }
-
-/* CDELT values */
- if( axspec != -1 ) cdelt[ axspec ] *= specfactor;
- for( i = 0; i < naxis; i++ ){
- SetValue( this, FormatKey( "CDELT", i + 1, -1, s, status ), cdelt + i,
- AST__FLOAT, "Pixel size", status );
- }
-
-/* CUNIT values. [Spectral axis units should be upper-case] */
- for( i = 0; i < naxis; i++ ) {
- cval = GetItemC( &(store->cunit), i, s, NULL, method, class, status );
- if( cval ) {
- if( i == axspec ) cval = specunit;
- sprintf( combuf, "Units for axis %d", i + 1 );
- SetValue( this, FormatKey( "CUNIT", i + 1, -1, s, status ), &cval, AST__STRING,
- combuf, status );
- }
- }
-
-/* CD matrix. Multiply the row of the PC matrix by the CDELT value. */
- if( crota == AST__BAD ) {
-
- for( i = 0; i < naxis; i++ ) {
- cdl = GetItem( &(store->cdelt), i, 0, s, NULL, method, class, status );
- if( cdl == AST__BAD ) cdl = 1.0;
-
- for( j = 0; j < naxis; j++ ){
- val = GetItem( &(store->pc), i, j, s, NULL, method, class, status );
- if( val == AST__BAD ) val = ( i == j ) ? 1.0 : 0.0;
- val *= cdl;
-
- if( val != 0.0 ) {
- SetValue( this, FormatKey( "CD", i + 1, j + 1, s, status ), &val,
- AST__FLOAT, "Transformation matrix element", status );
- }
- }
- }
-
-/* CROTA */
- } else if( crota != 0.0 ) {
- if( axrot2 != -1 ){
- SetValue( this, FormatKey( "CROTA", axrot2 + 1, -1, s, status ), &crota,
- AST__FLOAT, "Axis rotation", status );
- } else if( ( axspec == -1 && naxis > 1 ) ||
- ( axspec != -1 && naxis > 2 ) ) {
- SetValue( this, "CROTA1", &crota, AST__FLOAT, "Axis rotation", status );
- }
- }
-
-/* Reference equinox */
- if( epoch != AST__BAD ) SetValue( this, "EPOCH", &epoch, AST__FLOAT,
- "Epoch of reference equinox", status );
-
-/* Latitude of native north pole. */
- val = GetItem( &(store->latpole), 0, 0, s, NULL, method, class, status );
- if( val != AST__BAD ) SetValue( this, "LATPOLE", &val, AST__FLOAT,
- "Latitude of native north pole", status );
-
-/* Longitude of native north pole. */
- val = GetItem( &(store->lonpole), 0, 0, s, NULL, method, class, status );
- if( val != AST__BAD ) SetValue( this, "LONPOLE", &val, AST__FLOAT,
- "Longitude of native north pole", status );
-
-/* Date of observation. */
- val = GetItem( &(store->mjdobs), 0, 0, ' ', NULL, method, class, status );
- if( val != AST__BAD ) {
-
-/* The format used for the DATE-OBS keyword depends on the value of the
- keyword. For DATE-OBS < 1999.0, use the old "dd/mm/yy" format.
- Otherwise, use the new "ccyy-mm-ddThh:mm:ss[.ssss]" format. */
- palSlaCaldj( 99, 1, 1, &mjd99, &jj );
- if( val < mjd99 ) {
- palSlaDjcal( 0, val, iymdf, &jj );
- sprintf( combuf, "%2.2d/%2.2d/%2.2d", iymdf[ 2 ], iymdf[ 1 ],
- iymdf[ 0 ] - ( ( iymdf[ 0 ] > 1999 ) ? 2000 : 1900 ) );
- } else {
- palSlaDjcl( val, iymdf, iymdf+1, iymdf+2, &fd, &jj );
- palSlaDd2tf( 3, fd, sign, ihmsf );
- sprintf( combuf, "%4.4d-%2.2d-%2.2dT%2.2d:%2.2d:%2.2d.%3.3d",
- iymdf[0], iymdf[1], iymdf[2], ihmsf[0], ihmsf[1],
- ihmsf[2], ihmsf[3] );
- }
-
-/* Now store the formatted string in the FitsChan. */
- cval = combuf;
- SetValue( this, "DATE-OBS", (void *) &cval, AST__STRING,
- "Date of observation", status );
- }
-
-/* Projection parameters. */
- if( axlat >= 0 && axlon >= 0 ) {
- for( m = 0; m <= maxm; m++ ){
- val = GetItem( &(store->pv), axlat, m, s, NULL, method, class, status );
- if( val != AST__BAD ) SetValue( this, FormatKey( "PROJP", m, -1, ' ', status ),
- &val, AST__FLOAT, "Projection parameter", status );
- }
- }
-
-/* Spectral stuff.. */
- if( axspec >= 0 ) {
-
-/* Rest frequency */
- val = GetItem( &(store->restfrq), 0, 0, s, NULL, method, class, status );
- if( val != AST__BAD ) SetValue( this, FormatKey( "RESTFREQ", -1, -1, s, status ),
- &val, AST__FLOAT, "[Hz] Rest frequency", status );
- }
- }
-
-/* Release CDELT workspace */
- if( cdelt ) cdelt = (double *) astFree( (void *) cdelt );
-
-/* Return zero or ret depending on whether an error has occurred. */
- return astOK ? ok : 0;
-}
-
-static char *CardComm( AstFitsChan *this, int *status ){
-/*
-* Name:
-* CardComm
-
-* Purpose:
-* Return the keyword comment from the current card.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* char *CardComm( AstFitsChan *this, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* Returns a pointer to a string holding the keyword comment from the
-* current card.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the keyword comment, or NULL if the FitsChan is at
-* end-of-file, or does not have a comment.
-
-* Notes:
-* - The current card is not changed by this function.
-* - This function attempts to execute even if an error has occurred.
-*/
-
-/* Local Variables: */
- char *ret;
-
-/* Check the supplied object. */
- if( !this ) return NULL;
-
-/* If the current card is defined, store a pointer to its keyword comment. */
- if( this->card ){
- ret = ( (FitsCard *) this->card )->comment;
-
-/* Otherwise store a NULL pointer. */
- } else {
- ret = NULL;
- }
-
-/* Return the answer. */
- return ret;
-
-}
-
-static void *CardData( AstFitsChan *this, size_t *size, int *status ){
-/*
-* Name:
-* CardData
-
-* Purpose:
-* Return a pointer to the keyword data value for the current card.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void *CardData( AstFitsChan *this, size_t *size, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* Returns a pointer to keyword data value from the current card.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* size
-* A pointer to a location at which to return the number of bytes
-* occupied by the data value. NULL can be supplied if this
-* information is not required.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the keyword data, or NULL if the FitsChan is at
-* end-of-file, or if the keyword does not have any data.
-
-* Notes:
-* - For text data, the returned value for "size" includes the
-* terminating null character.
-* - The current card is not changed by this function.
-* - This function attempts to execute even if an error has occurred.
-*/
-
-/* Local Variables: */
- void *ret;
-
-/* Check the supplied object. */
- if( !this ) return NULL;
-
-/* If the current card is defined, store a pointer to its keyword data. */
- if( this->card ){
- ret = ( (FitsCard *) this->card )->data;
- if( size ) *size = ( (FitsCard *) this->card )->size;
-
-/* Otherwise store a NULL pointer. */
- } else {
- ret = NULL;
- if( size ) *size = 0;
- }
-
-/* Return the answer. */
- return ret;
-
-}
-
-static int *CardFlags( AstFitsChan *this, int *status ){
-/*
-* Name:
-* CardFlags
-
-* Purpose:
-* Return a pointer to the flags mask for the current card.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int *CardFlags( AstFitsChan *this, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* Returns a pointer to the flags mask for the current card.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The pointer to the flags mask.
-
-* Notes:
-* - The current card is not changed by this function.
-* - NULL is returned if the current card is not defined.
-* - This function attempts to execute even if an error has occurred.
-*/
-
-/* Local Variables: */
- int *ret;
-
-/* Check the supplied object. */
- if( !this ) return NULL;
-
-/* If the current card is defined, store its deletion flag. */
- if( this->card ){
- ret = &( ( (FitsCard *) this->card )->flags );
-
-/* Otherwise store zero. */
- } else {
- ret = NULL;
- }
-
-/* Return the answer. */
- return ret;
-
-}
-
-static char *CardName( AstFitsChan *this, int *status ){
-/*
-* Name:
-* CardName
-
-* Purpose:
-* Return the keyword name from the current card.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* char *CardName( AstFitsChan *this, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* Returns a pointer to a string holding the keyword name from the
-* current card.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the keyword name, or NULL if the FitsChan is at
-* end-of-file.
-
-* Notes:
-* - The current card is not changed by this function.
-* - This function attempts to execute even if an error has occurred.
-*/
-
-/* Local Variables: */
- char *ret;
-
-/* Check the supplied object. */
- if( !this ) return NULL;
-
-/* If the current card is defined, store a pointer to its keyword name. */
- if( this->card ){
- ret = ( (FitsCard *) this->card )->name;
-
-/* Otherwise store a NULL pointer. */
- } else {
- ret = NULL;
- }
-
-/* Return the answer. */
- return ret;
-
-}
-
-static int CardType( AstFitsChan *this, int *status ){
-/*
-* Name:
-* CardType
-
-* Purpose:
-* Return the keyword type from the current card.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int CardType( AstFitsChan *this, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* Returns the keyword type from the current card.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The keyword type.
-
-* Notes:
-* - The current card is not changed by this function.
-* - AST__NOTYPE is returned if the current card is not defined.
-* - This function attempts to execute even if an error has occurred.
-*/
-
-/* Local Variables: */
- int ret;
-
-/* Check the supplied object. */
- if( !this ) return AST__NOTYPE;
-
-/* If the current card is defined, store the keyword type. */
- if( this->card ){
- ret = ( (FitsCard *) this->card )->type;
-
-/* Otherwise store AST__NOTYPE. */
- } else {
- ret = AST__NOTYPE;
- }
-
-/* Return the answer. */
- return ret;
-
-}
-
-static AstMapping *CelestialAxes( AstFrameSet *fs, double *dim, int *wperm,
- char s, FitsStore *store, int *axis_done,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* CelestialAxes
-
-* Purpose:
-* Add values to a FitsStore describing celestial axes in a Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* AstMapping *CelestialAxes( AstFrameSet *fs, double *dim, int *wperm,
-* char s, FitsStore *store, int *axis_done,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* The current Frame of the supplied FrameSet is searched for celestial
-* axes. If any are found, FITS WCS keyword values describing the axis
-* are added to the supplied FitsStore, if possible (the conventions
-* of FITS-WCS paper II are used). Note, this function does not store
-* values for keywords which define the transformation from pixel
-* coords to Intermediate World Coords (CRPIX, PC and CDELT), but a
-* Mapping is returned which embodies these values. This Mapping is
-* from the current Frame in the FrameSet (WCS coords) to a Frame
-* representing IWC. The IWC Frame has the same number of axes as the
-* WCS Frame which may be greater than the number of base Frame (i.e.
-* pixel) axes.
-
-* Parameters:
-* fs
-* Pointer to the FrameSet. The base Frame should represent FITS pixel
-* coordinates, and the current Frame should represent FITS WCS
-* coordinates. The number of base Frame axes should not exceed the
-* number of current Frame axes.
-* dim
-* An array holding the image dimensions in pixels. AST__BAD can be
-* supplied for any unknwon dimensions.
-* wperm
-* Pointer to an array of integers with one element for each axis of
-* the current Frame. Each element holds the zero-based
-* index of the FITS-WCS axis (i.e. the value of "i" in the keyword
-* names "CTYPEi", "CRVALi", etc) which describes the Frame axis.
-* s
-* The co-ordinate version character. A space means the primary
-* axis descriptions. Otherwise the supplied character should be
-* an upper case alphabetical character ('A' to 'Z').
-* store
-* The FitsStore in which to store the FITS WCS keyword values.
-* axis_done
-* An array of flags, one for each Frame axis, which indicate if a
-* description of the corresponding axis has yet been stored in the
-* FitsStore.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If celestial axes were found which can be described using the
-* conventions of FITS-WCS paper II, then a Mapping from the current Frame
-* of the supplied FrameSet, to the IWC Frame is returned. Otherwise,
-* a UnitMap is returned. Note, the Mapping only defines the IWC
-* transformation for celestial axes. Any non-celestial axes are passed
-* unchanged by the returned Mapping.
-
-*/
-
-/* Local Variables: */
- AstFrame *pframe; /* Primary Frame containing current WCS axis*/
- AstFrame *wcsfrm; /* WCS Frame within FrameSet */
- AstMapping *map1; /* Pointer to pre-WcsMap Mapping */
- AstMapping *map3; /* Pointer to post-WcsMap Mapping */
- AstMapping *map; /* Pixel -> WCS mapping */
- AstMapping *ret; /* Returned Mapping */
- AstMapping *tmap0; /* A temporary Mapping */
- AstMapping *tmap1; /* A temporary Mapping */
- AstMapping *tmap2; /* A temporary Mapping */
- AstMapping *tmap3; /* A temporary Mapping */
- AstMapping *tmap4; /* A temporary Mapping */
- AstSkyFrame *skyfrm; /* The SkyFrame defining current WCS axis */
- AstWcsMap *map2; /* Pointer to WcsMap */
- AstWcsMap *map2b; /* Pointer to WcsMap with cleared lat/lonpole */
- char *cval; /* Pointer to keyword value */
- char *temp; /* Pointer to temporary string */
- double *ppcfid; /* Pointer to array holding PPC at fiducial point */
- double *mat; /* Pointer to matrix diagonal elements */
- double con; /* Constant value for unassigned axes */
- double pv; /* Projection parameter value */
- double skyfid[ 2 ]; /* Sky coords of fiducial point */
- double val; /* Keyword value */
- int *inperm; /* Input axis permutation array */
- int *outperm; /* Output axis permutation array */
- int *tperm; /* Pointer to new FITS axis numbering array */
- int axlat; /* Index of latitude output from WcsMap */
- int axlon; /* Index of longitude output from WcsMap */
- int fits_ilat; /* FITS WCS axis index for latitude axis */
- int fits_ilon; /* FITS WCS axis index for longitude axis */
- int i; /* Loop index */
- int iax; /* Axis index */
- int ilat; /* Index of latitude axis within total WCS Frame */
- int ilon; /* Index of longitude axis within total WCS Frame */
- int m; /* Projection parameter index */
- int maxm; /* Largest used "m" value */
- int npix; /* Number of pixel axes */
- int nwcs; /* Number of WCS axes */
- int nwcsmap; /* Number of inputs/outputs for the WcsMap */
- int paxis; /* Axis index within primary Frame */
- int skylataxis; /* Index of latitude axis within SkyFrame */
- int skylonaxis; /* Index of longitude axis within SkyFrame */
- int tpn; /* Is the WCS projectiona TPN projection? */
-
-/* Initialise */
- ret = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* Get a pointer to the WCS Frame. */
- wcsfrm = astGetFrame( fs, AST__CURRENT );
-
-/* Store the number of pixel and WCS axes. */
- npix = astGetNin( fs );
- nwcs = astGetNout( fs );
-
-/* Check each axis in the WCS Frame to see if it is a celestial axis. */
- skyfrm = NULL;
- map = NULL;
- ilon = -1;
- ilat = -1;
- for( iax = 0; iax < nwcs; iax++ ) {
-
-/* Obtain a pointer to the primary Frame containing the current WCS axis. */
- astPrimaryFrame( wcsfrm, iax, &pframe, &paxis );
-
-/* If the current axis belongs to a SkyFrame, we have found a celestial
- axis. Keep a pointer to it, and note the indices of the celestial axes
- within the complete WCS Frame. The MakeFitsFrameSet function will have
- ensured that the WCS Frame only contains at most a single SkyFrame. */
- if( astIsASkyFrame( pframe ) ) {
- if( !skyfrm ) skyfrm = astClone( pframe );
- if( paxis == 0 ) {
- ilon = iax;
- } else {
- ilat = iax;
- }
-
-/* Indicate that this axis has been classified. */
- axis_done[ iax ] = 1;
- }
-
-/* Release resources. */
- pframe = astAnnul( pframe );
- }
-
-/* Only proceed if we found celestial axes. */
- if( ilon != -1 && ilat != -1 ) {
-
-/* Create an array to hold the Projection Plane Coords corresponding to the
- CRVALi keywords. */
- ppcfid = (double *) astMalloc( sizeof( double )*nwcs );
-
-/* Get the pixel->wcs Mapping. */
- map = astGetMapping( fs, AST__BASE, AST__CURRENT );
-
-/* Some of the required FITS Keyword values are defined by the WcsMap
- contained within the Mapping. Split the mapping up into a list of serial
- component mappings, and locate the first WcsMap in this list. The first
- Mapping returned by this call is the result of compounding all the
- Mappings up to (but not including) the WcsMap, the second returned Mapping
- is the (inverted) WcsMap, and the third returned Mapping is anything
- following the WcsMap. Only proceed if one and only one WcsMap is found. */
- if( SplitMap( map, astGetInvert( map ), ilon, ilat, &map1, &map2, &map3, status ) ){
-
-/* Get the indices of the latitude and longitude axes within the SkyFrame
- (not necessarily (1,0) because they may have been permuted). */
- skylataxis = astGetLatAxis( skyfrm );
- skylonaxis = astGetLonAxis( skyfrm );
-
-/* The reference point in the celestial coordinate system is found by
- transforming the fiducial point in native spherical co-ordinates
- into WCS coordinates using map3. */
- if( GetFiducialWCS( map2, map3, ilon, ilat, skyfid + skylonaxis,
- skyfid + skylataxis, status ) ){
-
-/* We also need to find the indices of the longitude and latitude outputs
- from the WcsMap. These may not be the same as ilat and ilon because of
- axis permutations in "map3". */
- axlon = astGetWcsAxis( map2, 0 );
- axlat = astGetWcsAxis( map2, 1 );
-
-/* Note the FITS WCS axis indices for the longitude and latitude axes */
- fits_ilon = wperm[ ilon ];
- fits_ilat = wperm[ ilat ];
-
-/* Normalise the latitude and longitude values at the fiducial point. The
- longitude and latitude values found above will be in radians, but after
- normalization we convert them to degrees, as expected by other functions
- which handle FitsStores. */
- if( skyfid[ skylonaxis ] == AST__BAD ) skyfid[ skylonaxis ] = 0.0;
- if( skyfid[ skylataxis ] == AST__BAD ) skyfid[ skylataxis ] = 0.0;
-
- if( ZEROANG( skyfid[ 0 ] ) ) skyfid[ 0 ] = 0.0;
- if( ZEROANG( skyfid[ 1 ] ) ) skyfid[ 1 ] = 0.0;
-
- astNorm( skyfrm, skyfid );
-
- SetItem( &(store->crval), fits_ilon, 0, s, AST__DR2D*skyfid[ skylonaxis ], status );
- SetItem( &(store->crval), fits_ilat, 0, s, AST__DR2D*skyfid[ skylataxis ], status );
-
-/* Set a flag if we have a TPN projection. This is an AST-specific
- projection which mimicks the old "TAN with correction terms" projection
- which was removed from the final version of the FITS-WCS paper II. */
- tpn = ( astGetWcsType( map2 ) == AST__TPN );
-
-/* Store the WCS projection parameters. Except for TPN projections, always
- exclude parameters 3 and 4 on the longitude axis since these are
- reserved to hold copies of LONPOLE and LATPOLE. */
- for( m = 0; m < WCSLIB_MXPAR; m++ ){
- if( astTestPV( map2, axlon, m ) ) {
- if( m < 3 || m > 4 || tpn ) {
- pv = astGetPV( map2, axlon, m );
- if( pv != AST__BAD ) SetItem( &(store->pv), fits_ilon, m,
- s, pv, status );
- }
- }
- if( astTestPV( map2, axlat, m ) ) {
- pv = astGetPV( map2, axlat, m );
- if( pv != AST__BAD ) SetItem( &(store->pv), fits_ilat, m,
- s, pv, status );
- }
- }
-
-/* If PVi_0 (for the longitude axis) is non-zero, the Cartesian coordinates
- used by the WcsMap (Projection Plane Coordinates, PPC) need to be shifted
- to produce Intermediate World Coordinates (IWC). This shift results in
- the pixel reference position specified by the CRPIXi values (and which
- corresponds to the origin of IWC) mapping on to the fiducial position
- specified by the CRVALi values. The required shifts are just the PPC
- coordinates of the fiducial point. The AST-specific "TPN" projection uses
- longitude projection parameters to define correction terms, and so cannot
- use the above convention (which is part of FITS-WCS paper II). Therefore
- TPN projections always use zero shift between PPC and IWC. */
- for( iax = 0; iax < nwcs; iax++ ) ppcfid[ iax ] = 0.0;
- if( !tpn && astGetPV( map2, axlon, 0 ) != 0.0 ) {
- GetFiducialPPC( (AstWcsMap *) map2, ppcfid + ilon, ppcfid + ilat, status );
- if( ppcfid[ ilon ] == AST__BAD ) ppcfid[ ilon ] = 0.0;
- if( ppcfid[ ilat ] == AST__BAD ) ppcfid[ ilat ] = 0.0;
- ppcfid[ ilon ] *= AST__DR2D;
- ppcfid[ ilat ] *= AST__DR2D;
- }
-
-/* Store the CTYPE, CNAME, EQUINOX, MJDOBS, and RADESYS values. */
- SkySys( skyfrm, astGetWcsType( map2 ), store, fits_ilon,
- fits_ilat, s, method, class, status );
-
-/* Store the LONPOLE and LATPOLE values in the FitsStore. */
- SkyPole( map2, map3, ilon, ilat, wperm, s, store, method, class, status );
-
-/* The values of LONPOLE and LATPOLE stored above (in the FitsStore) will be
- ignored by WcsNative if the WcsMap contains set values for projection
- parameters PVi_3a and/or PVi_4a (these will be used in preference to
- the values in the FitsStore). To avoid this happening we take a copy
- of the WcsMap and clear the relevant parameters (but not if the WcsMap is
- for a TPN projection because TPN uses PVi_3a and PVi_4a for other
- purposes). */
- if( astGetWcsType( map2 ) != AST__TPN ) {
- map2b = astCopy( map2 );
- astClearPV( map2b, axlon, 3 );
- astClearPV( map2b, axlon, 4 );
- } else {
- map2b = astClone( map2 );
- }
-
-/* We will now create the Mapping from WCS coords to IWC coords. In fact,
- we produce the Mapping from IWC to WCS and then invert it. Create the
- first component of this Mapping which implements any shift of origin
- from IWC to PPC. */
- tmap0 = (AstMapping *) astShiftMap( nwcs, ppcfid, "", status );
-
-/* The next component of this Mapping scales the PPC coords from degrees
- to radians on the celestial axes. */
- mat = astMalloc( sizeof( double )*(size_t) nwcs );
- if( astOK ) {
- for( iax = 0; iax < nwcs; iax++ ) mat[ iax ] = 1.0;
- mat[ ilon ] = AST__DD2R;
- mat[ ilat ] = AST__DD2R;
- tmap1 = (AstMapping *) astMatrixMap( nwcs, nwcs, 1, mat, "", status );
- mat = astFree( mat );
- } else {
- tmap1 = NULL;
- }
-
-/* Now create the Mapping from Native Spherical Coords to WCS. */
- tmap2 = WcsNative( NULL, store, s, map2b, fits_ilon, fits_ilat,
- method, class, status );
-
-/* Combine the WcsMap with the above Mapping, to get the Mapping from PPC
- to WCS. */
- tmap3 = (AstMapping *) astCmpMap( map2b, tmap2, 1, "", status );
- tmap2 = astAnnul( tmap2 );
-
-/* If there are more WCS axes than IWC axes, create aUnitMapfor the extra
- WCS axes and add it in parallel with tmap3. */
- nwcsmap = astGetNin( map3 );
- if( nwcsmap < nwcs ) {
- tmap2 = (AstMapping *) astUnitMap( nwcs - nwcsmap, "", status );
- tmap4 = (AstMapping *) astCmpMap( tmap3, tmap2, 0, "", status );
- tmap3 = astAnnul( tmap3 );
- tmap2 = astAnnul( tmap2 );
- tmap3 = tmap4;
- nwcsmap = nwcs;
- }
-
-/* The pixel->wcs mapping may include a PermMap which selects some sub-set
- or super-set of the orignal WCS axes. In this case the number of inputs
- and outputs for "tmap3" created above may not equal "nwcs". To avoid this,
- we embed "tmap3" between 2 PermMaps which select the required axes. */
- if( nwcsmap != nwcs || ilon != axlon || ilat != axlat ) {
- inperm = astMalloc( sizeof( int )*(size_t) nwcs );
- outperm = astMalloc( sizeof( int )*(size_t) nwcsmap );
- if( astOK ) {
-
-/* Indicate that no inputs of the PermMap have yet been assigned to any
- outputs */
- for( i = 0; i < nwcs; i++ ) inperm[ i ] = -1;
-
-/* Assign the WcsMap long/lat axes to the WCS Frame long/lat axes */
- inperm[ ilon ] = axlon;
- inperm[ ilat ] = axlat;
-
-/* Assign the remaining inputs arbitrarily (doesn't matter how we do this
- since the WcsMap is effectively a UnitMap on all non-celestial axes). */
- iax = 0;
- for( i = 0; i < nwcs; i++ ) {
- while( iax == axlon || iax == axlat ) iax++;
- if( inperm[ i ] == -1 ) inperm[ i ] = iax++;
- }
-
-/* Do the same for the outputs. */
- for( i = 0; i < nwcsmap; i++ ) outperm[ i ] = -1;
- outperm[ axlon ] = ilon;
- outperm[ axlat ] = ilat;
- iax = 0;
- for( i = 0; i < nwcsmap; i++ ) {
- while( iax == ilon || iax == ilat ) iax++;
- if( outperm[ i ] == -1 ) outperm[ i ] = iax++;
- }
-
-/* Create the PermMap. */
- con = AST__BAD;
- tmap2 = (AstMapping *) astPermMap( nwcs, inperm, nwcsmap,
- outperm, &con, "", status );
-
-/* Sandwich the WcsMap between the PermMap and its inverse. */
- tmap4 = (AstMapping *) astCmpMap( tmap2, tmap3, 1, "", status );
- tmap3 = astAnnul( tmap3 );
- astInvert( tmap2 );
- tmap3 = (AstMapping *) astCmpMap( tmap4, tmap2, 1, "", status );
- tmap2 = astAnnul( tmap2 );
- tmap4 = astAnnul( tmap4 );
-
- }
-
- inperm = astFree( inperm );
- outperm = astFree( outperm );
-
- }
-
-/* Combine these Mappings together. */
- tmap4 = (AstMapping *) astCmpMap( tmap0, tmap1, 1, "", status );
- tmap0 = astAnnul( tmap0 );
- tmap1 = astAnnul( tmap1 );
- ret = (AstMapping *) astCmpMap( tmap4, tmap3, 1, "", status );
- tmap3 = astAnnul( tmap3 );
- tmap4 = astAnnul( tmap4 );
-
-/* Invert this Mapping to get the Mapping from WCS to IWC. */
- astInvert( ret );
-
-/* The spherical rotation involved in converting WCS to IWC can result in
- in appropriate numbering of the FITS axes. For instance, a LONPOLE
- value of 90 degrees causes the IWC axes to be transposed. For this
- reason we re-asses the FITS axis numbers assigned to the celestial
- axes in order to make the IWC axes as close as possible to the pixel
- axes with the same number. To do this, we need the Mapping from pixel
- to IWC, which is formed by concatenating the pixel->WCS Mapping with the
- WCS->IWC Mapping. */
- tmap0 = (AstMapping *) astCmpMap( map, ret, 1, "", status );
-
-/* Find the outputs of this Mapping which should be associated with each
- input. */
- tperm = astMalloc( sizeof(int)*(size_t) nwcs );
- WorldAxes( tmap0, dim, tperm, status );
-
-/* If the index associated with the celestial axes appear to have been
- swapped... */
- if( astOK && fits_ilon == tperm[ ilat ] &&
- fits_ilat == tperm[ ilon ] ) {
-
-/* Swap the fits axis indices associated with each WCS axis to match. */
- wperm[ ilon ] = fits_ilat;
- wperm[ ilat ] = fits_ilon;
-
-/* Swap the stored CRVAL value for the longitude and latitude axis. */
- val = GetItem( &(store->crval), fits_ilat, 0, s, NULL, method, class, status );
- SetItem( &(store->crval), fits_ilat, 0, s,
- GetItem( &(store->crval), fits_ilon, 0, s, NULL,
- method, class, status ), status );
- SetItem( &(store->crval), fits_ilon, 0, s, val, status );
-
-/* Swap the stored CTYPE value for the longitude and latitude axis. */
- cval = GetItemC( &(store->ctype), fits_ilat, s, NULL, method, class, status );
- if( cval ) {
- temp = astStore( NULL, (void *) cval, strlen( cval ) + 1 );
- cval = GetItemC( &(store->ctype), fits_ilon, s, NULL, method, class, status );
- if( cval ) {
- SetItemC( &(store->ctype), fits_ilat, s, cval, status );
- SetItemC( &(store->ctype), fits_ilon, s, temp, status );
- }
- temp = astFree( temp );
- }
-
-/* Swap the stored CNAME value for the longitude and latitude axis. */
- cval = GetItemC( &(store->cname), fits_ilat, s, NULL, method, class, status );
- if( cval ) {
- temp = astStore( NULL, (void *) cval, strlen( cval ) + 1 );
- cval = GetItemC( &(store->cname), fits_ilon, s, NULL, method, class, status );
- if( cval ) {
- SetItemC( &(store->cname), fits_ilat, s, cval, status );
- SetItemC( &(store->cname), fits_ilon, s, temp, status );
- }
- temp = astFree( temp );
- }
-
-/* Swap the projection parameters asociated with the longitude and latitude
- axes. */
- maxm = GetMaxJM( &(store->pv), s, status );
- for( m = 0; m <= maxm; m++ ){
- val = GetItem( &(store->pv), fits_ilat, m, s, NULL, method, class, status );
- SetItem( &(store->pv), fits_ilat, m, s,
- GetItem( &(store->pv), fits_ilon, m, s, NULL,
- method, class, status ), status );
- SetItem( &(store->pv), fits_ilon, m, s, val, status );
- }
- }
-
-/* Release resources. */
- map2b = astAnnul( map2b );
- tperm = astFree( tperm );
-
- }
-
-/* Release resources. */
- map1 = astAnnul( map1 );
- map2 = astAnnul( map2 );
- map3 = astAnnul( map3 );
- }
- ppcfid = astFree( ppcfid );
-
- }
-
-/* Release resources. */
- wcsfrm = astAnnul( wcsfrm );
- if( skyfrm ) skyfrm = astAnnul( skyfrm );
- if( map ) map = astAnnul( map );
-
-/* If we have a Mapping to return, simplify it. Otherwise, create
- a UnitMap to return. */
- if( ret ) {
- tmap0 = ret;
- ret = astSimplify( tmap0 );
- tmap0 = astAnnul( tmap0 );
- } else {
- ret = (AstMapping *) astUnitMap( nwcs, "", status );
- }
-
-/* Return the result. */
- return ret;
-
-}
-
-static int CheckFitsName( const char *name, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* CheckFitsName
-
-* Purpose:
-* Check a keyword name conforms to FITS standards.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int CheckFitsName( const char *name, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* FITS keywords must contain between 1 and 8 characters, and each
-* character must be an upper-case Latin alphabetic character, a digit,
-* an underscore, or a hyphen. Leading, trailing or embedded white space
-* is not allowed, with the exception of totally blank or null keyword
-* names.
-
-* Parameters:
-* name
-* Pointer to a string holding the name to check.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A value of 0 is returned if the supplied name was blank. A value of 1
-* is returned otherwise.
-
-* Notes:
-* - An error is reported if the supplied keyword name does not
-* conform to FITS requirements, and zero is returned.
-
-*/
-
-/* Local Variables: */
- const char *c; /* Pointer to next character in name */
- size_t n; /* No. of characters in supplied name */
- int ret; /* Returned value */
-
-/* Check the global status. */
- if( !astOK ) return 0;
-
-/* Initialise the returned value to indicate that the supplied name was
- blank. */
- ret = 0;
-
-/* Check that the supplied pointer is not NULL. */
- if( name ){
-
-/* Get the number of characters in the name. */
- n = strlen( name );
-
-/* Report an error if the name has too many characters in it. */
- if( n > FITSNAMLEN ){
- astError( AST__BDFTS, "%s(%s): The supplied FITS keyword name ('%s') "
- "has %d characters. FITS only allows up to %d.", status, method,
- class, name, (int) n, FITSNAMLEN );
-
-/* If the name has no characters in it, then assume it is a legal blank
- keyword name. Otherwise, check that no illegal characters occur in the
- name. */
- } else if( n != 0 ) {
-
-/* Whitespace is only allowed in the special case of a name consisting
- entirely of whitespace. Such keywords are used to indicate that the rest
- of the card is a comment. Find the first non-whitespace character in the
- name. */
- c = name;
- while( isspace( ( int ) *(c++) ) );
-
-/* If the name is filled entirely with whitespace, then the name is acceptable
- as the special case. Otherwise, we need to do more checks. */
- if( c - name - 1 < n ){
-
-/* Indicate that the supplied name is not blank. */
- ret = 1;
-
-/* Loop round every character checking that it is one of the legal characters.
- Report an error if any illegal characters are found. */
- c = name;
- while( *c ){
-
- if( !isFits( (int) *c ) ){
-
- if( *c == '=' ){
- astError( AST__BDFTS, "%s(%s): An equals sign ('=') was found "
- "before column %d within a FITS keyword name or header "
- "card.", status, method, class, FITSNAMLEN + 1 );
- } else if( *c < ' ' ) {
- astError( AST__BDFTS, "%s(%s): The supplied FITS keyword "
- "name ('%s') contains an illegal non-printing "
- "character (ascii value %d).", status, method, class,
- name, *c );
- } else if( *c < ' ' ) {
- astError( AST__BDFTS, "%s(%s): The supplied FITS keyword "
- "name ('%s') contains an illegal character ('%c').",
- status, method, class, name, *c );
- }
- break;
- }
- c++;
- }
- }
-
- }
-
-/* Report an error if no pointer was supplied. */
- } else if( astOK ){
- astError( AST__INTER, "CheckFitsName(fitschan): AST internal "
- "error; a NULL pointer was supplied for the keyword name. ",
- status );
- }
-
-/* If an error has occurred, return 0. */
- if( !astOK ) ret = 0;
-
-/* Return the answer. */
- return ret;
-
-}
-
-static void CheckZero( char *text, double value, int width, int *status ){
-/*
-* Name:
-* CheckZero
-
-* Purpose:
-* Ensure that the formatted value zero has no minus sign.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void CheckZero( char *text, double value, int width, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* There is sometimes a problem (perhaps only on DEC UNIX) when formatting
-* the floating-point value 0.0 using C. Sometimes it gives the string
-* "-0". This function fixed this by checking the first character of
-* the supplied string (if the supplied value is zero), and shunting the
-* remaining text one character to the right if it is a minus sign. It
-* returns without action if the supplied value is not zero.
-*
-* In addition, this function also rounds out long sequences of
-* adjacent zeros or nines in the number.
-
-* Parameters:
-* text
-* The formatted value.
-* value
-* The floating value which was formatted.
-* width
-* The minimum field width to use. The value is right justified in
-* this field width. Ignored if zero.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function attempts to execute even if an error has occurred.
-*/
-
-/* Local Variables: */
- char *c;
-
-/* Return if no text was supplied. */
- if( !text ) return;
-
-/* If the numerical value is zero, check for the leading minus sign. */
- if( value == 0.0 ) {
-
-/* Find the first non-space character. */
- c = text;
- while( *c && isspace( (int) *c ) ) c++;
-
-/* If the first non-space character is a minus sign, replace it with a
- space. */
- if( *c == '-' ) *c = ' ';
-
-/* Otherwise, round out sequences of zeros or nines. */
- } else {
- RoundFString( text, width, status );
- }
-}
-
-static double ChooseEpoch( FitsStore *store, char s, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* ChooseEpoch
-
-* Purpose:
-* Choose a FITS keyword value to use for the AST Epoch attribute.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* double ChooseEpoch( FitsStore *store, char s, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* This function returns an MJD value in the TDB timescale, which can
-* be used as the Epoch value in an AST Frame. It uses the following
-* preference order: secondary MJD-AVG, primary MJD-AVG, secondary MJD-OBS,
-* primary MJD-OBS. Note, DATE-OBS keywords are converted into MJD-OBS
-* keywords by the SpecTrans function before this function is called.
-
-* Parameters:
-* store
-* A structure containing values for FITS keywords relating to
-* the World Coordinate System.
-* s
-* A character identifying the co-ordinate version to use. A space
-* means use primary axis descriptions. Otherwise, it must be an
-* upper-case alphabetical characters ('A' to 'Z').
-* method
-* The calling method. Used only in error messages.
-* class
-* The object class. Used only in error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The MJD value.
-
-* Notes:
-* - A value of AST__BAD is returned if an error occurs, or if none
-
-* of the required keywords can be found in the FitsChan.
-
-*/
-
-/* Local Variables: */
- double mjd; /* The returned MJD */
-
-/* Initialise the returned value. */
- mjd = AST__BAD;
-
-/* Check the global status. */
- if( !astOK ) return mjd;
-
-/* Otherwise, try to get the secondary MJD-AVG value. */
- mjd = GetItem( &(store->mjdavg), 0, 0, s, NULL, method, class, status );
-
-/* Otherwise, try to get the primary MJD-AVG value. */
- if( mjd == AST__BAD ) mjd = GetItem( &(store->mjdavg), 0, 0, ' ', NULL,
- method, class, status );
-
-/* If the secondary MJD-OBS keyword is present in the FitsChan, gets its
- value. */
- if( mjd == AST__BAD ) mjd = GetItem( &(store->mjdobs), 0, 0, s, NULL,
- method, class, status );
-
-/* Otherwise, try to get the primary MJD-OBS value. */
- if( mjd == AST__BAD ) mjd = GetItem( &(store->mjdobs), 0, 0, ' ', NULL,
- method, class, status );
-
-/* Now convert the MJD value to the TDB timescale. */
- mjd = TDBConv( mjd, store->timesys, 0, method, class, status );
-
-/* Return the answer. */
- return mjd;
-}
-
-static int ChrLen( const char *string, int *status ){
-/*
-* Name:
-* ChrLen
-
-* Purpose:
-* Return the length of a string excluding any trailing white space.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* int ChrLen( const char *string, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* This function returns the length of a string excluding any trailing
-* white space, or non-printable characters.
-
-* Parameters:
-* string
-* Pointer to the string.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The length of a string excluding any trailing white space and
-* non-printable characters.
-
-* Notes:
-* - A value of zero is returned if a NULL pointer is supplied, or if an
-* error has already occurred.
-
-*/
-
-/* Local Variables: */
- const char *c; /* Pointer to the next character to check */
- int ret; /* The returned string length */
-
-/* Check the global status. */
- if( !astOK ) return 0;
-
-/* Initialise the returned string length. */
- ret = 0;
-
-/* Check a string has been supplied. */
- if( string ){
-
-/* Check each character in turn, starting with the last one. */
- ret = strlen( string );
- c = string + ret - 1;
- while( ret ){
- if( isprint( (int) *c ) && !isspace( (int) *c ) ) break;
- c--;
- ret--;
- }
- }
-
-/* Return the answer. */
- return ret;
-
-}
-
-static int CLASSFromStore( AstFitsChan *this, FitsStore *store,
- AstFrameSet *fs, double *dim, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* CLASSFromStore
-
-* Purpose:
-* Store WCS keywords in a FitsChan using FITS-CLASS encoding.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* int CLASSFromStore( AstFitsChan *this, FitsStore *store,
-* AstFrameSet *fs, double *dim, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* A FitsStore is a structure containing a generalised represention of
-* a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-* from a set of FITS header cards (using a specified encoding), or
-* an AST FrameSet. In other words, a FitsStore is an encoding-
-* independant intermediary staging post between a FITS header and
-* an AST FrameSet.
-*
-* This function copies the WCS information stored in the supplied
-* FitsStore into the supplied FitsChan, using FITS-CLASS encoding.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* store
-* Pointer to the FitsStore.
-* fs
-* Pointer to the FrameSet from which the values in the FitsStore
-* were derived.
-* dim
-* Pointer to an array holding the main array dimensions (AST__BAD
-* if a dimension is not known).
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A value of 1 is returned if succesfull, and zero is returned
-* otherwise.
-
-*/
-
-/* Local Variables: */
- AstFrame *azelfrm; /* (az,el) frame */
- AstFrame *curfrm; /* Current Frame in supplied FrameSet */
- AstFrame *freqfrm; /* Frame for reference frequency value */
- AstFrame *radecfrm; /* Spatial frame for CRVAL values */
- AstFrame *velofrm; /* Frame for reference velocity value */
- AstFrameSet *fsconv1;/* FrameSet connecting "curfrm" & "radecfrm" */
- AstFrameSet *fsconv2;/* FrameSet connecting "curfrm" & "azelfrm" */
- AstMapping *map1; /* Axis permutation to get (lonaxis,lataxis) = (0,1) */
- AstMapping *map2; /* Mapping from FITS CTYPE to (az,el) */
- AstMapping *map3; /* Mapping from (lon,lat) to (az,el) */
- char *comm; /* Pointer to comment string */
- char *cval; /* Pointer to string keyword value */
- char combuf[80]; /* Buffer for FITS card comment */
- char lattype[MXCTYPELEN];/* Latitude axis CTYPE */
- char lontype[MXCTYPELEN];/* Longitude axis CTYPE */
- char s; /* Co-ordinate version character */
- char sign[2]; /* Fraction's sign character */
- char spectype[MXCTYPELEN];/* Spectral axis CTYPE */
- const char *srcsys; /* Pointer to rest frame string for source velocity */
- double *cdelt; /* Pointer to CDELT array */
- double aval[ 2 ]; /* General purpose array */
- double azel[ 2 ]; /* Reference (az,el) values */
- double cdl; /* CDELT term */
- double cdlat_lon; /* Off-diagonal CD element */
- double cdlon_lat; /* Off-diagonal CD element */
- double crval[ 3 ]; /* CRVAL values converted to rads, etc */
- double delta; /* Spectral axis increment */
- double equ; /* Epoch of reference equinox */
- double fd; /* Fraction of a day */
- double latval; /* CRVAL for latitude axis */
- double lonpole; /* LONPOLE value */
- double lonval; /* CRVAL for longitude axis */
- double mjd99; /* MJD at start of 1999 */
- double p1, p2; /* Projection parameters */
- double radec[ 2 ]; /* Reference (lon,lat) values */
- double rf; /* Rest freq (Hz) */
- double specfactor; /* Factor for converting internal spectral units */
- double val; /* General purpose value */
- double xin[ 3 ]; /* Grid coords at centre of first pixel */
- double xout[ 3 ]; /* WCS coords at centre of first pixel */
- int axlat; /* Index of latitude FITS WCS axis */
- int axlon; /* Index of longitude FITS WCS axis */
- int axspec; /* Index of spectral FITS WCS axis */
- int i; /* Axis index */
- int ihmsf[ 4 ]; /* Hour, minute, second, fractional second */
- int iymdf[ 4 ]; /* Year, month, date, fractional day */
- int j; /* Axis index */
- int jj; /* SlaLib status */
- int naxis2; /* Length of pixel axis 2 */
- int naxis3; /* Length of pixel axis 3 */
- int naxis; /* No. of axes */
- int ok; /* Is FitsSTore OK for IRAF encoding? */
- int prj; /* Projection type */
-
-/* Check the inherited status. */
- if( !astOK ) return 0;
-
-/* Initialise */
- specfactor = 1.0;
- srcsys = NULL;
-
-/* First check that the values in the FitsStore conform to the
- requirements of the CLASS encoding. Assume they do not to begin with. */
- ok = 0;
-
-/* Just do primary axes. */
- s = ' ';
-
-/* Look for the primary celestial axes. */
- FindLonLatSpecAxes( store, s, &axlon, &axlat, &axspec, method, class, status );
-
-/* Spectral and celestial axes must be present in axes 1,2 and 3. */
- if( axspec >= 0 && axspec < 3 &&
- axlon >= 0 && axlon < 3 &&
- axlat >= 0 && axlat < 3 ) {
- ok = 1;
-
-/* If the spatial pixel axes are degenerate (i.e. span only a single
- pixel), modify the CRPIX and CRVAL values in the FitsStore to put
- the reference point at the centre of the one and only spatial pixel. */
- if( dim[ axlon ] == 1.0 && dim[ axlat ] == 1.0 ){
-
- xin[ 0 ] = 1.0;
- xin[ 1 ] = 1.0;
- xin[ 2 ] = 1.0;
- astTranN( fs, 1, 3, 1, xin, 1, 3, 1, xout );
-
- if( xout[ axlon ] != AST__BAD && xout[ axlat ] != AST__BAD ) {
-
- SetItem( &(store->crval), axlon, 0, ' ', xout[ axlon ]*AST__DR2D, status );
- SetItem( &(store->crval), axlat, 0, ' ', xout[ axlat ]*AST__DR2D, status );
-
-/* This assumes that the indices of the pixel axes that correspond to
- WCS axes "axlon" and "axlat" are also "axlon" and "axlat". */
- SetItem( &(store->crpix), 0, axlon, ' ', 1.0, status );
- SetItem( &(store->crpix), 0, axlat, ' ', 1.0, status );
-
- }
- }
-
-/* Get the CRVAL values for both spatial axes. */
- latval = GetItem( &( store->crval ), axlat, 0, s, NULL, method, class, status );
- if( latval == AST__BAD ) ok = 0;
-
- lonval = GetItem( &( store->crval ), axlon, 0, s, NULL, method, class, status );
- if( lonval == AST__BAD ) ok = 0;
-
-/* Get the CTYPE values for both axes. Extract the projection type as
- specified by the last 4 characters in the latitude CTYPE keyword value. */
- cval = GetItemC( &(store->ctype), axlon, s, NULL, method, class, status );
- if( !cval ) {
- ok = 0;
- } else {
- strcpy( lontype, cval );
- }
-
- cval = GetItemC( &(store->ctype), axlat, s, NULL, method, class, status );
- if( !cval ) {
- ok = 0;
- prj = AST__WCSBAD;
- } else {
- strcpy( lattype, cval );
- prj = astWcsPrjType( cval + 4 );
- }
-
-/* Check the projection type is OK. */
- if( prj != AST__SIN ){
-
-/* Check the projection code is OK. */
- ok = 0;
- if( prj == AST__TAN ||
- prj == AST__ARC ||
- prj == AST__STG ||
- prj == AST__AIT ||
- prj == AST__SFL ) {
- ok = 1;
-
-/* For AIT, and SFL, check that the reference point is the origin of
- the celestial co-ordinate system. */
- if( prj == AST__AIT ||
- prj == AST__SFL ) {
- if( latval != 0.0 || lonval != 0.0 ){
- ok = 0;
-
-/* Change the new SFL projection code to to the older equivalent GLS */
- } else if( prj == AST__SFL ){
- (void) strcpy( lontype + 4, "-GLS" );
- (void) strcpy( lattype + 4, "-GLS" );
-
-/* Change the new AIT projection code to to the older equivalent ATF */
- } else if( prj == AST__AIT ){
- (void) strcpy( lontype + 4, "-ATF" );
- (void) strcpy( lattype + 4, "-ATF" );
- }
- }
- }
-
-/* SIN projections are only acceptable if the associated projection
- parameters are both zero. */
- } else {
- p1 = GetItem( &( store->pv ), axlat, 1, s, NULL, method, class, status );
- p2 = GetItem( &( store->pv ), axlat, 2, s, NULL, method, class, status );
- if( p1 == AST__BAD ) p1 = 0.0;
- if( p2 == AST__BAD ) p2 = 0.0;
- ok = ( p1 == 0.0 && p2 == 0.0 );
- }
-
-
-/* Identify the celestial coordinate system from the first 4 characters of the
- longitude CTYPE value. Only RA and galactic longitude can be stored using
- FITS-CLASS. */
- if( ok && strncmp( lontype, "RA--", 4 ) &&
- strncmp( lontype, "GLON", 4 ) ) ok = 0;
-
-/* Get the CTYPE values for the spectral axis, and find the CLASS equivalent,
- if possible. */
- cval = GetItemC( &(store->ctype), axspec, s, NULL, method, class, status );
- if( !cval ) {
- ok = 0;
- } else {
- if( !strncmp( cval, "FREQ", astChrLen( cval ) ) ) {
- strcpy( spectype, "FREQ" );
- } else {
- ok = 0;
- }
- }
-
-/* If OK, check the SPECSYS value is SOURCE. */
- cval = GetItemC( &(store->specsys), 0, s, NULL, method, class, status );
- if( !cval ) {
- ok = 0;
- } else if( ok ) {
- if( strncmp( cval, "SOURCE", astChrLen( cval ) ) ) ok = 0;
- }
-
-/* If still OK, ensure the spectral axis units are Hz. */
- cval = GetItemC( &(store->cunit), axspec, s, NULL, method, class, status );
- if( !cval ) {
- ok = 0;
- } else if( ok ) {
- if( !strcmp( cval, "Hz" ) ) {
- specfactor = 1.0;
- } else if( !strcmp( cval, "kHz" ) ) {
- specfactor = 1.0E3;
- } else if( !strcmp( cval, "MHz" ) ) {
- specfactor = 1.0E6;
- } else if( !strcmp( cval, "GHz" ) ) {
- specfactor = 1.0E9;
- } else {
- ok = 0;
- }
- }
- }
-
-/* Save the number of WCS axes */
- naxis = GetMaxJM( &(store->crpix), ' ', status ) + 1;
-
-/* If this is larger than the number of pixel axes, ignore the surplus
- WCS axes. */
- if( naxis > store->naxis ) naxis = store->naxis;
-
-/* Allocate memory to store the CDELT values */
- if( ok ) {
- cdelt = (double *) astMalloc( sizeof(double)*naxis );
- if( !cdelt ) ok = 0;
- } else {
- cdelt = NULL;
- }
-
-/* Check that there is no rotation, and extract the CDELT (diagonal) terms,
- etc. If the spatial axes are degenerate (i.e. cover only a single pixel)
- then ignore any rotation. */
- if( !GetValue( this, FormatKey( "NAXIS", axlon + 1, -1, s, status ), AST__INT,
- &naxis2, 0, 0, method, class, status ) ) {
- naxis2 = 0;
- }
- if( !GetValue( this, FormatKey( "NAXIS", axlat + 1, -1, s, status ), AST__INT,
- &naxis3, 0, 0, method, class, status ) ) {
- naxis3 = 0;
- }
-
- cdlat_lon = 0.0;
- cdlon_lat = 0.0;
- for( i = 0; i < naxis && ok; i++ ){
- cdl = GetItem( &(store->cdelt), i, 0, s, NULL, method, class, status );
- if( cdl == AST__BAD ) cdl = 1.0;
-
- for( j = 0; j < naxis && ok; j++ ){
- val = GetItem( &(store->pc), i, j, s, NULL, method, class, status );
- if( val == AST__BAD ) val = ( i == j ) ? 1.0 : 0.0;
- val *= cdl;
-
- if( i == j ){
- cdelt[ i ] = val;
-
- } else if( val != 0.0 ){
- if( naxis2 != 1 || naxis3 != 1 ) ok = 0;
- }
- }
- }
-
-/* Get RADECSYS and the reference equinox. */
- cval = GetItemC( &(store->radesys), 0, s, NULL, method, class, status );
- equ = GetItem( &(store->equinox), 0, 0, s, NULL, method, class, status );
-
-/* If RADECSYS was available... */
- if( cval ){
-
-/* Only FK4 and FK5 are supported in this encoding. */
- if( strcmp( "FK4", cval ) && strcmp( "FK5", cval ) ) ok = 0;
-
-/* If epoch was not available, set a default epoch. */
- if( equ == AST__BAD ){
-
- if( !strcmp( "FK4", cval ) ){
- equ = 1950.0;
- } else if( !strcmp( "FK5", cval ) ){
- equ = 2000.0;
- } else {
- ok = 0;
- }
-
-/* If an epoch was supplied, check it is consistent with the IAU 1984
- rule. */
- } else {
- if( !strcmp( "FK4", cval ) ){
- if( equ >= 1984.0 ) ok = 0;
- } else if( !strcmp( "FK5", cval ) ){
- if( equ < 1984.0 ) ok = 0;
- } else {
- ok = 0;
- }
- }
-
-/* Check we have a rest frequency */
- rf = GetItem( &(store->restfrq), 0, 0, s, NULL, method, class, status );
- if( rf == AST__BAD ) ok = 0;
-
- }
-
-/* If the spatial Frame covers more than a single Frame and requires a LONPOLE
- or LATPOLE keyword, it cannot be encoded using FITS-CLASS. However since
- FITS-CLASS imposes a no rotation restriction, it can tolerate lonpole
- values of +/- 180 degrees. */
- if( ok && ( naxis2 != 1 || naxis3 != 1 ) ) {
- lonpole = GetItem( &(store->latpole), 0, 0, s, NULL, method, class, status );
- if( lonpole != AST__BAD && lonpole != -180.0 && lonpole == 180 ) ok = 0;
- if( GetItem( &(store->latpole), 0, 0, s, NULL, method, class, status )
- != AST__BAD ) ok = 0;
- }
-
-/* Only create the keywords if the FitsStore conforms to the requirements
- of the FITS-CLASS encoding. */
- if( ok ) {
-
-/* Find the last WCS related card. */
- FindWcs( this, 1, 1, 0, method, class, status );
-
-/* Get and save CRPIX for all pixel axes. These are required, so break
- if they are not available. */
- for( j = 0; j < naxis && ok; j++ ){
- val = GetItem( &(store->crpix), 0, j, s, NULL, method, class, status );
- if( val == AST__BAD ) {
- ok = 0;
- } else {
- sprintf( combuf, "Reference pixel on axis %d", j + 1 );
- SetValue( this, FormatKey( "CRPIX", j + 1, -1, s, status ), &val,
- AST__FLOAT, combuf, status );
- }
- }
-
-/* Get and save CRVAL for all intermediate axes. These are required, so
- break if they are not available. Note, the frequency axis CRVAL is
- redefined by FITS-CLASS by reducing it by the RESTFREQ value. */
- for( i = 0; i < naxis && ok; i++ ){
- val = GetItem( &(store->crval), i, 0, s, NULL, method, class, status );
- if( val == AST__BAD ) {
- ok = 0;
- } else {
- crval[ i ] = val;
- if( i == axspec ) {
- val *= specfactor;
- val -= rf;
- }
- sprintf( combuf, "Value at ref. pixel on axis %d", i + 1 );
- SetValue( this, FormatKey( "CRVAL", i + 1, -1, s, status ), &val,
- AST__FLOAT, combuf, status );
- }
- }
-
-/* Get and save CTYPE for all intermediate axes. These are required, so
- break if they are not available. Use the potentially modified versions
- saved above for the celestial axes. */
- for( i = 0; i < naxis && ok; i++ ){
- if( i == axlat ) {
- cval = lattype;
- } else if( i == axlon ) {
- cval = lontype;
- } else if( i == axspec ) {
- cval = spectype;
- } else {
- cval = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
- }
- if( cval ){
- comm = GetItemC( &(store->ctype_com), i, s, NULL, method, class, status );
- if( !comm ) {
- sprintf( combuf, "Type of co-ordinate on axis %d", i + 1 );
- comm = combuf;
- }
- SetValue( this, FormatKey( "CTYPE", i + 1, -1, s, status ), &cval,
- AST__STRING, comm, status );
- } else {
- ok = 0;
- }
- }
-
-/* CDELT values */
- if( axspec != -1 ) cdelt[ axspec ] *= specfactor;
- for( i = 0; i < naxis; i++ ){
- SetValue( this, FormatKey( "CDELT", i + 1, -1, s, status ), cdelt + i,
- AST__FLOAT, "Pixel size", status );
- }
-
-/* Reference equinox */
- if( equ != AST__BAD ) SetValue( this, "EQUINOX", &equ, AST__FLOAT,
- "Epoch of reference equinox", status );
-
-/* Date of observation. */
- val = GetItem( &(store->mjdobs), 0, 0, ' ', NULL, method, class, status );
- if( val != AST__BAD ) {
-
-/* The format used for the DATE-OBS keyword depends on the value of the
- keyword. For DATE-OBS < 1999.0, use the old "dd/mm/yy" format.
- Otherwise, use the new "ccyy-mm-ddThh:mm:ss[.ssss]" format. */
- palSlaCaldj( 99, 1, 1, &mjd99, &jj );
- if( val < mjd99 ) {
- palSlaDjcal( 0, val, iymdf, &jj );
- sprintf( combuf, "%2.2d/%2.2d/%2.2d", iymdf[ 2 ], iymdf[ 1 ],
- iymdf[ 0 ] - ( ( iymdf[ 0 ] > 1999 ) ? 2000 : 1900 ) );
- } else {
- palSlaDjcl( val, iymdf, iymdf+1, iymdf+2, &fd, &jj );
- palSlaDd2tf( 3, fd, sign, ihmsf );
- sprintf( combuf, "%4.4d-%2.2d-%2.2dT%2.2d:%2.2d:%2.2d.%3.3d",
- iymdf[0], iymdf[1], iymdf[2], ihmsf[0], ihmsf[1],
- ihmsf[2], ihmsf[3] );
- }
-
-/* Now store the formatted string in the FitsChan. */
- cval = combuf;
- SetValue( this, "DATE-OBS", (void *) &cval, AST__STRING,
- "Date of observation", status );
- }
-
-/* Rest frequency */
- SetValue( this, "RESTFREQ", &rf, AST__FLOAT, "[Hz] Rest frequency", status );
-
-/* The image frequency corresponding to the rest frequency (only used for
- double sideband data). */
- val = GetItem( &(store->imagfreq), 0, 0, s, NULL, method, class, status );
- if( val != AST__BAD ) {
- SetValue( this, "IMAGFREQ", &val, AST__FLOAT, "[Hz] Image frequency", status );
- }
-
-/* Ensure the FitsChan contains OBJECT and LINE headers */
- if( !HasCard( this, "OBJECT", method, class, status ) ) {
- cval = " ";
- SetValue( this, "OBJECT", &cval, AST__STRING, NULL, status );
- }
- if( !HasCard( this, "LINE", method, class, status ) ) {
- cval = " ";
- SetValue( this, "LINE", &cval, AST__STRING, NULL, status );
- }
-
-/* CLASS expects the VELO-LSR keyword to hold the radio velocity of the
- reference channel (NOT of the source as I was told!!) with respect to
- the LSRK rest frame. The "crval" array holds the frequency of the
- reference channel in the source rest frame, so we need to convert this
- to get the value for VELO-LSR. Create a SpecFrame describing the
- required frame (other attributes such as Epoch etc are left unset and
- so will be picked up from the supplied FrameSet). We set MinAxes
- and MaxAxes so that the Frame can be used as a template to match the 3D
- current Frame in the supplied FrameSet. */
- velofrm = (AstFrame *) astSpecFrame( "System=vrad,StdOfRest=lsrk,"
- "Unit=m/s,MinAxes=3,MaxAxes=3", status );
-
-/* Get the current Frame from the supplied FrameSet and find the spectral
- axis using the above "velofrm" as a template. */
- curfrm = astGetFrame( fs, AST__CURRENT );
- fsconv1 = astFindFrame( curfrm, velofrm, "" );
-
-/* If OK, extract the SpecFrame from the returned FraneSet (this will
- have the attribute values that were assigned explicitly to "velofrm"
- and will have inherited all unset attributes from the supplied
- FrameSet). */
- if( fsconv1 ) {
- velofrm = astAnnul( velofrm );
- velofrm = astGetFrame( fsconv1, AST__CURRENT );
- fsconv1 = astAnnul( fsconv1 );
-
-/* Take a copy of the velofrm and modify its attributes so that it
- describes frequency in the sources rest frame in units of Hz. This is
- the system that CLASS expects for the CRVAL3 keyword. */
- freqfrm = astCopy( velofrm );
- astSet( freqfrm, "System=freq,StdOfRest=Source,Unit=Hz", status );
-
-/* Get a Mapping from frequency to velocity. */
- fsconv1 = astConvert( freqfrm, velofrm, "" );
- if( fsconv1 ) {
-
-/* Use this Mapping to convert the spectral crval value from frequency to
- velocity. Also convert the value for the neighbouring channel. */
- aval[ 0 ] = crval[ axspec ]*specfactor;
- aval[ 1 ] = aval[ 0 ] + cdelt[ axspec ]*specfactor;
- astTran1( fsconv1, 2, aval, 1, aval );
-
-/* Store the value. Also store it as VLSR since this keyword seems to be
- used for the same thing. */
- SetValue( this, "VELO-LSR", aval, AST__FLOAT, "[m/s] Reference velocity", status );
- SetValue( this, "VLSR", aval, AST__FLOAT, "[m/s] Reference velocity", status );
-
-/* The DELTAV keyword holds the radio velocity channel spacing in the
- LSR. */
- delta = aval[ 1 ] - aval[ 0 ];
- SetValue( this, "DELTAV", &delta, AST__FLOAT, "[m/s] Velocity resolution", status );
-
-/* Free remaining resources. */
- fsconv1 = astAnnul( fsconv1 );
- }
- }
- velofrm = astAnnul( velofrm );
-
-/* AZIMUTH and ELEVATIO - the (az,el) equivalent of CRVAL. We need a
- Mapping from the CTYPE spatial system to (az,el). This depends on all
- the extra info like telescope position, epoch, etc. This info is in
- the current Frame in the supplied FrameSet. First get a conversion
- from a sky frame with default axis ordering to the supplied Frame. All
- the extra info is picked up from the supplied Frame since it is not set
- in the template. */
- radecfrm = (AstFrame *) astSkyFrame( "Permute=0,MinAxes=3,MaxAxes=3", status );
- fsconv1 = astFindFrame( curfrm, radecfrm, "" );
-
-/* Now get conversion from the an (az,el) Frame to the supplied Frame. */
- azelfrm = (AstFrame *) astSkyFrame( "System=AZEL,Permute=0,MinAxes=3,MaxAxes=3", status );
- fsconv2 = astFindFrame( curfrm, azelfrm, "" );
-
-/* If both conversions werew possible, concatenate their Mappings to get
- a Mapping from (lon,lat) in the CTYPE system, to (az,el). */
- if( fsconv1 && fsconv2 ) {
- map1 = astGetMapping( fsconv1, AST__CURRENT, AST__BASE );
- map2 = astGetMapping( fsconv2, AST__BASE, AST__CURRENT );
- map3 = (AstMapping *) astCmpMap( map1, map2, 1, "", status );
-
-/* Store the CTYPE (ra,dec) values in the default order. */
- radec[ 0 ] = crval[ axlon ]*AST__DD2R;
- radec[ 1 ] = crval[ axlat ]*AST__DD2R;
-
-/* Transform to (az,el), normalise, convert to degrees and store. */
- astTranN( map3, 1, 2, 1, radec, 1, 2, 1, azel );
- if( azel[ 0 ] != AST__BAD && azel[ 1 ] != AST__BAD ) {
- astNorm( azelfrm, azel );
- azel[ 0 ] *= AST__DR2D;
- azel[ 1 ] *= AST__DR2D;
- SetValue( this, "AZIMUTH", azel, AST__FLOAT, "[Deg] Telescope azimuth", status );
- SetValue( this, "ELEVATIO", azel + 1, AST__FLOAT, "[Deg] Telescope elevation", status );
- }
-
-/* Free resources */
- map1 = astAnnul( map1 );
- map2 = astAnnul( map2 );
- map3 = astAnnul( map3 );
- fsconv1 = astAnnul( fsconv1 );
- fsconv2 = astAnnul( fsconv2 );
- }
- radecfrm = astAnnul( radecfrm );
- azelfrm = astAnnul( azelfrm );
- curfrm = astAnnul( curfrm );
-
- }
-
-/* Release CDELT workspace */
- if( cdelt ) cdelt = (double *) astFree( (void *) cdelt );
-
-/* Return zero or ret depending on whether an error has occurred. */
- return astOK ? ok : 0;
-}
-
-static void ClassTrans( AstFitsChan *this, AstFitsChan *ret, int axlat,
- int axlon, const char *method, const char *class, int *status ){
-/*
-* Name:
-* ClassTrans
-
-* Purpose:
-* Translated non-standard FITS-CLASS headers into equivalent standard
-* ones.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void ClassTrans( AstFitsChan *this, AstFitsChan *ret, int axlat,
-* int axlon, const char *method, const char *class )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function extends the functionality of the SpecTrans function,
-* by converting non-standard WCS keywords into standard FITS-WCS
-* keywords, using the conventions of the FITS-CLASS encoding.
-
-* Parameters:
-* this
-* Pointer to the FitsChan containing the original header cards.
-* ret
-* Pointer to a FitsChan in which to return the standardised header
-* cards.
-* axlat
-* Zero-based index of the celestial latitude axis.
-* axlon
-* Zero-based index of the celestial longitude axis.
-* method
-* Pointer to string holding name of calling method.
-* class
-* Pointer to a string holding the name of the supplied object class.
-
-*/
-
-/* Local Variables: */
- char *cval; /* Pointer to character string */
- char newtype[ 10 ]; /* New CTYPE value */
- const char *keyname; /* Pointer to keyword name */
- const char *ssyssrc; /* Pointer to SSYSSRC keyword value string */
- double crval; /* CRVAL value */
- double restfreq; /* Rest frequency (Hz) */
- double v0; /* Ref channel velocity in source frame */
- double vref; /* Ref channel velocity in LSR or whatever */
- double vsource; /* Source velocity */
- double zsource; /* Source redshift */
- int axspec; /* Index of spectral axis */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get the rest frequency. */
- restfreq = AST__BAD;
- if( !GetValue2( ret, this, "RESTFRQ", AST__FLOAT, (void *) &restfreq, 0,
- method, class, status ) ){
- GetValue2( ret, this, "RESTFREQ", AST__FLOAT, (void *) &restfreq, 0,
- method, class, status );
- }
-
- if( restfreq == AST__BAD ) {
- astError( AST__BDFTS, "%s(%s): Keyword RESTFREQ not found in CLASS "
- "FITS header.", status, method, class );
- }
-
-/* Get the index of the spectral axis. */
- if( axlat + axlon == 1 ) {
- axspec = 2;
- } else if( axlat + axlon == 3 ) {
- axspec = 0;
- } else {
- axspec = 1;
- }
-
-/* Get the spectral CTYPE value */
- if( GetValue2( ret, this, FormatKey( "CTYPE", axspec + 1, -1, ' ', status ),
- AST__STRING, (void *) &cval, 0, method, class, status ) ){
-
-/* We can only handle frequency axes at the moment. */
- if( strcmp( "FREQ ", cval ) ) {
- astError( AST__BDFTS, "%s(%s): FITS-CLASS keyword %s has value "
- "\"%s\" - CLASS support in AST only includes \"FREQ\" axes.", status,
- method, class, FormatKey( "CTYPE", axspec + 1, -1, ' ', status ),
- cval );
-
-/* CRVAL for the spectral axis needs to be incremented by RESTFREQ if the
- axis represents frequency. */
- } else {
- keyname = FormatKey( "CRVAL", axspec + 1, -1, ' ', status );
- if( GetValue2( ret, this, keyname, AST__FLOAT, (void *) &crval, 1,
- method, class, status ) ) {
- crval += restfreq;
- SetValue( ret, keyname, (void *) &crval, AST__FLOAT, NULL, status );
- }
- }
-
-/* CLASS frequency axes describe source frame frequencies. */
- cval = "SOURCE";
- SetValue( ret, "SPECSYS", (void *) &cval, AST__STRING, NULL, status );
-
- }
-
-/* If no projection code is supplied for the longitude and latitude axes,
- use "-GLS". This will be translated to "-SFL" by SpecTrans. */
- keyname = FormatKey( "CTYPE", axlon + 1, -1, ' ', status );
- if( GetValue2( ret, this, keyname, AST__STRING, (void *) &cval, 0, method,
- class, status ) ){
- if( !strncmp( " ", cval + 4, 4 ) ) {
- strncpy( newtype, cval, 4 );
- strcpy( newtype + 4, "-GLS" );
- cval = newtype;
- SetValue( ret, keyname, (void *) &cval, AST__STRING, NULL, status );
- }
- }
-
- keyname = FormatKey( "CTYPE", axlat + 1, -1, ' ', status );
- if( GetValue2( ret, this, keyname, AST__STRING, (void *) &cval, 0, method,
- class, status ) ){
- if( !strncmp( " ", cval + 4, 4 ) ) {
- strncpy( newtype, cval, 4 );
- strcpy( newtype + 4, "-GLS" );
- cval = newtype;
- SetValue( ret, keyname, (void *) &cval, AST__STRING, NULL, status );
- }
- }
-
-/* Look for a keyword with name "VELO-...". This specifies the radio velocity
- at the reference channel, in a standard of rest specified by the "..."
- in the keyword name. */
- if( GetValue2( ret, this, "VELO-%3c", AST__FLOAT, (void *) &vref, 0,
- method, class, status ) ){
-
-/* Calculate the radio velocity (in the rest frame of the source) corresponding
- to the frequency at the reference channel. */
- v0 = AST__C*( restfreq - crval )/restfreq;
-
-/* Assume that the source velocity is the difference between this velocity
- and the reference channel velocity given by "VELO-..." */
- vsource = vref - v0;
-
-/* Get the keyword name and find the corresponding SSYSSRC keyword value. */
- keyname = CardName( this, status );
- if( !strcmp( keyname, "VELO-HEL" ) ) {
- ssyssrc = "BARYCENT";
- } else if( !strcmp( keyname, "VELO-OBS" ) || !strcmp( keyname, "VELO-TOP" ) ) {
- ssyssrc = "TOPOCENT";
- } else if( !strcmp( keyname, "VELO-EAR" ) || !strcmp( keyname, "VELO-GEO" ) ) {
- ssyssrc = "GEOCENTR";
- } else {
- ssyssrc = "LSRK";
- }
- SetValue( ret, "SSYSSRC", (void *) &ssyssrc, AST__STRING, NULL, status );
-
-/* Convert from radio velocity to redshift and store as ZSOURCE */
- zsource = ( AST__C / (AST__C - vsource) ) - 1.0;
- SetValue( ret, "ZSOURCE", (void *) &zsource, AST__FLOAT, NULL, status );
- }
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a FitsChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* FitsChan member function (over-rides the astClearAttrib protected
-* method inherited from the Channel class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* FitsChan, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstFitsChan *this; /* Pointer to the FitsChan structure */
- int len; /* Length of attrib string */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FitsChan structure. */
- this = (AstFitsChan *) this_object;
-
-/* Obtain the length of the "attrib" string. */
- len = strlen( attrib );
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* Card. */
-/* ----- */
- if ( !strcmp( attrib, "card" ) ) {
- astClearCard( this );
-
-/* Encoding. */
-/* --------- */
- } else if ( !strcmp( attrib, "encoding" ) ) {
- astClearEncoding( this );
-
-/* CDMatrix */
-/* -------- */
- } else if ( !strcmp( attrib, "cdmatrix" ) ) {
- astClearCDMatrix( this );
-
-/* FitsDigits. */
-/* ----------- */
- } else if ( !strcmp( attrib, "fitsdigits" ) ) {
- astClearFitsDigits( this );
-
-/* DefB1950 */
-/* -------- */
- } else if ( !strcmp( attrib, "defb1950" ) ) {
- astClearDefB1950( this );
-
-/* CarLin */
-/* ------ */
- } else if ( !strcmp( attrib, "carlin" ) ) {
- astClearCarLin( this );
-
-/* Iwc */
-/* --- */
- } else if ( !strcmp( attrib, "iwc" ) ) {
- astClearIwc( this );
-
-/* Clean */
-/* ----- */
- } else if ( !strcmp( attrib, "clean" ) ) {
- astClearClean( this );
-
-/* Warnings. */
-/* -------- */
- } else if ( !strcmp( attrib, "warnings" ) ) {
- astClearWarnings( this );
-
-/* If the name was not recognised, test if it matches any of the
- read-only attributes of this class. If it does, then report an
- error. */
- } else if ( astOK && ( !strcmp( attrib, "ncard" ) ||
- !strcmp( attrib, "allwarnings" ) ) ){
- astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
- "value for a %s.", status, attrib, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static void ClearCard( AstFitsChan *this, int *status ){
-/*
-*+
-* Name:
-* astClearCard
-
-* Purpose:
-* Clear the Card attribute.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void astClearCard( AstFitsChan *this )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-* This function clears the Card attribute for the supplied FitsChan by
-* setting it to the index of the first un-used card in the FitsChan.
-* This causes the next read operation performed on the FitsChan to
-* read the first card. Thus, it is equivalent to "rewinding" the FitsChan.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-
-* Notes:
-* - This function attempts to execute even if an error has occurred.
-*-
-*/
-
-/* Local Variables; */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
-
-/* Ensure the source function has been called */
- ReadFromSource( this, status );
-
-/* Check the supplied FitsChan. If its is empty, return. */
- if ( !this || !(this->head) ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Set the pointer to the current card so that it points to the card at
- the head of the list. */
- this->card = this->head;
-
-/* If the current card has been read into an AST object, move on to the
- first card which has not, unless we are not skipping such cards. */
-
- if( CARDUSED(this->card) ){
- MoveCard( this, 1, "astClearCard", astGetClass( this ), status );
- }
-
-}
-
-static int CnvValue( AstFitsChan *this, int type, int undef, void *buff,
- const char *method, int *status ){
-/*
-*
-* Name:
-* CnvValue
-
-* Purpose:
-* Convert a data value into a given FITS data type.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int CnvValue( AstFitsChan *this, int type, int undef, void *buff,
-* const char *method, int *status )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-* This function produces a copy of the data value for the current card
-* converted from its stored data type to the supplied data type.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* type
-* The FITS data type in which to return the data value of the
-* current card.
-* undef
-* Determines what happens if the current card has an undefined
-* value. If "undef" is zero, an error will be reported identifying
-* the undefined keyword value. If "undef" is non-zero, no error is
-* reported and the contents of the output buffer are left unchanged.
-* buf
-* A pointer to a buffer to recieve the converted value. It is the
-* responsibility of the caller to ensure that a suitable buffer is
-* supplied.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero if the conversion was not possible (in which case NO error is
-* reported), one otherwise.
-
-* Notes:
-* - When converting from floating point to integer, the floating
-* point value is truncated using a C cast.
-* - Non-zero numerical values are considered TRUE, and zero
-* numerical values are considered FALSE. Any string starting with a
-* 'T' or a 'Y' (upper or lower case) is considered TRUE, and anything
-* starting with an 'F' or an 'N' (upper or lower case) is considered
-* FALSE. In addition, a dot ('.') may be placed in front of a 'T' or an
-* 'F'.
-* - A logical TRUE value is represented as a real numerical value of
-* one and the character string "Y". A logical FALSE value is represented
-* by a real numerical value of zero and the character string "N".
-* - When converting from a string to any numerical value, zero is
-* returned if the string is not a formatted value which can be converted
-* into the corresponding type using astSscanf.
-* - Real and imaginary parts of a complex value should be separated by
-* spaces within strings. If a string does contains only a single numerical
-* value, it is assumed to be the real part, and the imaginary part is
-* assumed to be zero.
-* - When converting a complex numerical type to a non-complex numerical
-* type, the returned value is derived from the real part only, the
-* imaginary part is ignored.
-* - Zero is returned if an error has occurred, or if this function
-* should fail for any reason.
-* - If the supplied value is undefined an error will be reported.
-*/
-
-/* Local Variables: */
- int otype; /* Stored data type */
- size_t osize; /* Size of stored data */
- void *odata; /* Pointer to stored data */
-
-/* Check the global error status, and the supplied buffer. */
- if ( !astOK || !buff ) return 0;
-
-/* Get the type in which the data value is stored. */
- otype = CardType( this, status );
-
-/* Get a pointer to the stored data value, and its size. */
- osize = 0;
- odata = CardData( this, &osize, status );
-
-/* Do the conversion. */
- return CnvType( otype, odata, osize, type, undef, buff,
- CardName( this, status ), method, astGetClass( this ),
- status );
-}
-
-static int CnvType( int otype, void *odata, size_t osize, int type, int undef,
- void *buff, const char *name, const char *method,
- const char *class, int *status ){
-/*
-*
-* Name:
-* CnvType
-
-* Purpose:
-* Convert a data value into a given FITS data type.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int CnvType( int otype, void *odata, size_t osize, int type, int undef,
-* void *buff, const char *name, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-* This function produces a copy of the data value for the current card
-* converted from its stored data type to the supplied data type.
-
-* Parameters:
-* otype
-* The type of the supplied data value.
-* odata
-* Pointer to a buffer holding the supplied data value.
-* osize
-* The size of the data value (in bytes - strings include the
-* terminating null).
-* type
-* The FITS data type in which to return the data value of the
-* current card.
-* undef
-* Determines what happens if the supplied data value type is
-* undefined If "undef" is zero, an error will be reported identifying
-* the undefined keyword value. If "undef" is non-zero, no error is
-* reported and the contents of the output buffer are left unchanged.
-* buff
-* A pointer to a buffer to recieve the converted value. It is the
-* responsibility of the caller to ensure that a suitable buffer is
-* supplied.
-* name
-* A pointer to a string holding a keyword name to include in error
-* messages.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero if the conversion was not possible (in which case NO error is
-* reported), one otherwise.
-
-* Notes:
-* - When converting from floating point to integer, the floating
-* point value is truncated using a C cast.
-* - Non-zero numerical values are considered TRUE, and zero
-* numerical values are considered FALSE. Any string starting with a
-* 'T' or a 'Y' (upper or lower case) is considered TRUE, and anything
-* starting with an 'F' or an 'N' (upper or lower case) is considered
-* FALSE. In addition, a dot ('.') may be placed in front of a 'T' or an
-* 'F'.
-* - A logical TRUE value is represented as a real numerical value of
-* one and the character string "Y". A logical FALSE value is represented
-* by a real numerical value of zero and the character string "N".
-* - When converting from a string to any numerical value, zero is
-* returned if the string isn not a formatted value which can be converted
-* into the corresponding type using astSscanf.
-* - Real and imaginary parts of a complex value should be separated by
-* spaces within strings. If a string does contains only a single numerical
-* value, it is assumed to be the real part, and the imaginary part is
-* assumed to be zero.
-* - When converting a complex numerical type to a non-complex numerical
-* type, the returned value is derived from the real part only, the
-* imaginary part is ignored.
-* - Zero is returned if an error has occurred, or if this function
-* should fail for any reason.
-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- const char *c; /* Pointer to next character */
- const char *ostring; /* String data value */
- double odouble; /* Double data value */
- int oint; /* Integer data value */
- int ival; /* Integer value read from string */
- int len; /* Length of character string */
- int nc; /* No. of characetsr used */
- int ret; /* Returned success flag */
-
-/* Check the global error status, and the supplied buffer. */
- if ( !astOK || !buff ) return 0;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(NULL);
-
-/* Assume success. */
- ret = 1;
-
-/* If the supplied data type is undefined, report an error unless the
- returned data type is also undefined or an undefined value is
- acceptable for the keyword. */
- if( otype == AST__UNDEF ) {
- if( type != AST__UNDEF && !undef ) {
- ret = 0;
- astError( AST__FUNDEF, "The FITS keyword '%s' has an undefined "
- "value.", status, name );
- }
-
-/* If the returned data type is undefined, the returned value is
- immaterial, so leave the buffer contents unchanged. */
- } else if( type == AST__UNDEF ) {
-
-/* If there is no data value and this is not a COMMENT keyword, or if
- there is a data value and this is a COMMENT card, conversion is not
- possible. */
- } else if( ( odata && otype == AST__COMMENT ) ||
- ( !odata && otype != AST__COMMENT ) ) {
- ret = 0;
-
-/* If there is no data (and therefore this is a comment card), leave the
- supplied buffers unchanged. */
- } else if( odata ) {
-
-/* Do each possible combination of supplied and stored data types... */
-
-/* Convert a AST__FLOAT data value to ... */
- if( otype == AST__FLOAT ){
- odouble = *( (double *) odata );
-
- if( type == AST__FLOAT ){
- (void) memcpy( buff, odata, osize );
-
- } else if( type == AST__STRING || type == AST__CONTINUE ){
- (void) sprintf( cnvtype_text, "%.*g", DBL_DIG, odouble );
- CheckZero( cnvtype_text, odouble, 0, status );
- *( (char **) buff ) = cnvtype_text;
-
- } else if( type == AST__INT ){
- *( (int *) buff ) = (int) odouble;
-
- } else if( type == AST__LOGICAL ){
- *( (int *) buff ) = ( odouble == 0.0 ) ? 0 : 1;
-
- } else if( type == AST__COMPLEXF ){
- ( (double *) buff )[ 0 ] = odouble;
- ( (double *) buff )[ 1 ] = 0.0;
-
- } else if( type == AST__COMPLEXI ){
- ( (int *) buff )[ 0 ] = (int) odouble;
- ( (int *) buff )[ 1 ] = 0;
-
- } else if( astOK ){
- ret = 0;
- astError( AST__INTER, "CnvType: AST internal programming error - "
- "FITS data-type no. %d not yet supported.", status, type );
- }
-
-/* Convert a AST__STRING data value to ... */
- } else if( otype == AST__STRING || type == AST__CONTINUE ){
- ostring = (char *) odata;
- len = (int) strlen( ostring );
-
- if( type == AST__FLOAT ){
- if( nc = 0,
- ( 1 != astSscanf( ostring, "%lf %n", (double *) buff, &nc ) )
- || (nc < len ) ){
- ret = 0;
- }
-
- } else if( type == AST__STRING || type == AST__CONTINUE ){
- strncpy( cnvtype_text, (char *) odata, AST__FITSCHAN_FITSCARDLEN );
- *( (char **) buff ) = cnvtype_text;
-
- } else if( type == AST__INT ){
- if( nc = 0,
- ( 1 != astSscanf( ostring, "%d %n", (int *) buff, &nc ) )
- || (nc < len ) ){
- ret = 0;
- }
-
- } else if( type == AST__LOGICAL ){
- if( nc = 0,
- ( 1 == astSscanf( ostring, "%d %n", &ival, &nc ) )
- && (nc >= len ) ){
- *( (int *) buff ) = ival ? 1 : 0;
-
- } else {
- c = ostring;
- while( *c && isspace( (int) *c ) ) c++;
-
- if( *c == 'y' || *c == 'Y' || *c == 't' || *c == 'T' ||
- ( *c == '.' && ( c[1] == 't' || c[1] == 'T' ) ) ){
- *( (int *) buff ) = 1;
-
- } else if( *c == 'n' || *c == 'N' || *c == 'f' || *c == 'F' ||
- ( *c == '.' && ( c[1] == 'f' || c[1] == 'F' ) ) ){
- *( (int *) buff ) = 0;
- } else {
- ret = 0;
- }
- }
-
- } else if( type == AST__COMPLEXF ){
- if( nc = 0,
- ( 1 != astSscanf( ostring, "%lf %lf %n", (double *) buff,
- (double *) buff + 1, &nc ) )
- || (nc < len ) ){
-
- if( nc = 0,
- ( 1 != astSscanf( ostring, "%lf %n", (double *) buff,
- &nc ) )
- || (nc < len ) ){
- ret = 0;
- } else {
- ( (double *) buff )[ 1 ] = 0.0;
- }
-
- }
-
- } else if( type == AST__COMPLEXI ){
- if( nc = 0,
- ( 1 != astSscanf( ostring, "%d %d %n", (int *) buff,
- (int *) buff + 1, &nc ) )
- || (nc < len ) ){
-
- if( nc = 0,
- ( 1 != astSscanf( ostring, "%d %n", (int *) buff, &nc ) )
- || (nc < len ) ){
-
- ret = 0;
- } else {
- ( (int *) buff )[ 1 ] = 0;
- }
-
- }
-
- } else if( astOK ){
- ret = 0;
- astError( AST__INTER, "CnvType: AST internal programming error - "
- "FITS data-type no. %d not yet supported.", status, type );
- }
-
-/* Convert an AST__INT data value to ... */
- } else if( otype == AST__INT ){
- oint = *( (int *) odata );
-
- if( type == AST__FLOAT ){
- *( (double *) buff ) = (double) oint;
-
- } else if( type == AST__STRING || type == AST__CONTINUE ){
- (void) sprintf( cnvtype_text, "%d", oint );
- *( (char **) buff ) = cnvtype_text;
-
- } else if( type == AST__INT ){
- (void) memcpy( buff, odata, osize );
-
- } else if( type == AST__LOGICAL ){
- *( (int *) buff ) = oint ? 1 : 0;
-
- } else if( type == AST__COMPLEXF ){
- ( (double *) buff )[ 0 ] = (double) oint;
- ( (double *) buff )[ 1 ] = 0.0;
-
- } else if( type == AST__COMPLEXI ){
- ( (int *) buff )[ 0 ] = oint;
- ( (int *) buff )[ 1 ] = 0;
-
- } else if( astOK ){
- ret = 0;
- astError( AST__INTER, "CnvType: AST internal programming error - "
- "FITS data-type no. %d not yet supported.", status, type );
- }
-
-/* Convert a LOGICAL data value to ... */
- } else if( otype == AST__LOGICAL ){
- oint = *( (int *) odata );
-
- if( type == AST__FLOAT ){
- *( (double *) buff ) = oint ? 1.0 : 0.0;
-
- } else if( type == AST__STRING || type == AST__CONTINUE ){
- if( oint ){
- strcpy( cnvtype_text, "Y" );
- } else {
- strcpy( cnvtype_text, "N" );
- }
- *( (char **) buff ) = cnvtype_text;
-
- } else if( type == AST__INT ){
- *( (int *) buff ) = oint;
-
- } else if( type == AST__LOGICAL ){
- (void) memcpy( buff, odata, osize );
-
- } else if( type == AST__COMPLEXF ){
- ( (double *) buff )[ 0 ] = oint ? 1.0 : 0.0;
- ( (double *) buff )[ 1 ] = 0.0;
-
- } else if( type == AST__COMPLEXI ){
- ( (int *) buff )[ 0 ] = oint ? 1 : 0;
- ( (int *) buff )[ 1 ] = 0;
-
- } else if( astOK ){
- ret = 0;
- astError( AST__INTER, "CnvType: AST internal programming error - "
- "FITS data-type no. %d not yet supported.", status, type );
- }
-
-/* Convert a AST__COMPLEXF data value to ... */
- } else if( otype == AST__COMPLEXF ){
- odouble = ( (double *) odata )[ 0 ];
-
- if( type == AST__FLOAT ){
- *( (double *) buff ) = odouble;
-
- } else if( type == AST__STRING || type == AST__CONTINUE ){
- (void) sprintf( cnvtype_text0, "%.*g", DBL_DIG, ( (double *) odata )[ 0 ] );
- CheckZero( cnvtype_text0, ( (double *) odata )[ 0 ], 0, status );
- (void) sprintf( cnvtype_text1, "%.*g", DBL_DIG, ( (double *) odata )[ 1 ] );
- CheckZero( cnvtype_text1, ( (double *) odata )[ 1 ], 0, status );
- (void) sprintf( cnvtype_text, "%s %s", cnvtype_text0, cnvtype_text1 );
- *( (char **) buff ) = cnvtype_text;
-
- } else if( type == AST__INT ){
- *( (int *) buff ) = (int) odouble;
-
- } else if( type == AST__LOGICAL ){
- *( (int *) buff ) = ( odouble == 0.0 ) ? 0 : 1;
-
- } else if( type == AST__COMPLEXF ){
- (void) memcpy( buff, odata, osize );
-
- } else if( type == AST__COMPLEXI ){
- ( (int *) buff )[ 0 ] = (int) odouble;
- ( (int *) buff )[ 1 ] = (int) ( (double *) odata )[ 1 ];
-
- } else if( astOK ){
- ret = 0;
- astError( AST__INTER, "CnvType: AST internal programming error - "
- "FITS data-type no. %d not yet supported.", status, type );
- }
-
-/* Convert a AST__COMPLEXI data value to ... */
- } else if( otype == AST__COMPLEXI ){
- oint = ( (int *) odata )[ 0 ];
-
- if( type == AST__FLOAT ){
- *( (double *) buff ) = (double) oint;
-
- } else if( type == AST__STRING || type == AST__CONTINUE ){
- (void) sprintf( cnvtype_text, "%d %d", ( (int *) odata )[ 0 ],
- ( (int *) odata )[ 1 ] );
- *( (char **) buff ) = cnvtype_text;
-
- } else if( type == AST__INT ){
- *( (int *) buff ) = oint;
-
- } else if( type == AST__LOGICAL ){
- *( (int *) buff ) = oint ? 1 : 0;
-
- } else if( type == AST__COMPLEXF ){
- ( (double *) buff )[ 0 ] = (double) oint;
- ( (double *) buff )[ 1 ] = (double) ( (int *) odata )[ 1 ];
-
- } else if( type == AST__COMPLEXI ){
- (void) memcpy( buff, odata, osize );
-
- } else if( astOK ){
- ret = 0;
- astError( AST__INTER, "CnvType: AST internal programming error - "
- "FITS data-type no. %d not yet supported.", status, type );
- }
-
- } else if( astOK ){
- ret = 0;
- astError( AST__INTER, "CnvType: AST internal programming error - "
- "FITS data-type no. %d not yet supported.", status, type );
- }
-
- }
-
- return ret;
-
-}
-
-static int ComBlock( AstFitsChan *this, int incr, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* ComBlock
-
-* Purpose:
-* Delete a AST comment block in a Native-encoded FitsChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int ComBlock( AstFitsChan *this, int incr, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function looks for a block of comment cards as defined below,
-* and deletes all the cards in the block, if a suitable block is found.
-*
-* Comment blocks consist of a contiguous sequence of COMMENT cards. The
-* text of each card should start and end with the 3 characters "AST".
-* The block is delimited above by a card containing all +'s (except
-* for the two "AST" strings), and below by a card containing all -'s.
-*
-* The block is assumed to start on the card which is adjacent to the
-* current card on entry.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* incr
-* This should be either +1 or -1, and is the increment between
-* adjacent cards in the comment block. A value of +1 means
-* that the card following the current card is taken as the first in
-* the block, and subsequent cards are checked. The block must then
-* end with a line of -'s. If -1 is supplied, then the card
-* preceding the current card is taken as the first in the block,
-* and preceding cards are checked. The block must then end with
-* a row of +'s.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* 1 if a block was found and deleted, 0 otherwise.
-
-* Notes:
-* - The pointer to the current card is returned unchanged.
-*/
-
-/* Local Variables: */
- FitsCard *card0; /* Pointer to current FitsCard on entry */
- char del; /* Delimiter character */
- char *text; /* Pointer to the comment text */
- int i; /* Card index within the block */
- int ncard; /* No. of cards in the block */
- int ret; /* The returned flag */
- size_t len; /* Length of the comment text */
-
-/* Check the global status. */
- if( !astOK ) return 0;
-
-/* Save the pointer to the current card. */
- card0 = this->card;
-
-/* Initialise the returned flag to indicate that we have not found a
- comment block. */
- ret = 0;
-
-/* Move on to the first card in the block. If this is not possible (due to
- us already being at the start or end of the FitsChan), then return. */
- if( MoveCard( this, incr, method, class, status ) == 1 ) {
-
-/* Store the character which is used in the delimiter line for the
- comment block. */
- del = ( incr == 1 ) ? '-' : '+';
-
-/* Initialise the number of cards in the comment block to zero. */
- ncard = 0;
-
-/* Loop round until the end (or start) of the comment block is found.
- Leave the loop if an error occurs. */
- while( astOK ) {
-
-/* Is this card a comment card? If not, then we have failed to find a
- complete comment block. Break out of the loop. */
- if( CardType( this, status ) != AST__COMMENT ) break;
-
-/* Increment the number of cards in the comment block. */
- ncard++;
-
-/* Get the text of the comment, and its length. */
- text = CardComm( this, status );
- if( text ){
- len = strlen( text );
-
-/* Check the first 3 characters. Break out of the loop if they are not
- "AST". */
- if( strncmp( "AST", text, 3 ) ) break;
-
-/* Check the last 3 characters. Break out of the loop if they are not
- "AST". */
- if( strcmp( "AST", text + len - 3 ) ) break;
-
-/* If the comment is the appropriate block delimiter (a line of +'s or
- -'s depending on the direction), then set the flag to indicate that we
- have a complete comment block and leave the loop. Allow spaces to be
- included. Exclude the "AST" strings at begining and end from the check. */
- ret = 1;
- for( i = 3; i < len - 3; i++ ) {
- if( text[ i ] != del && text[ i ] != ' ' ) {
- ret = 0;
- break;
- }
- }
- }
-
- if( ret ) break;
-
-/* Move on to the next card. If this is not possible (due to us already
- being at the start or end of the FitsChan), then break out of the loop. */
- if( MoveCard( this, incr, method, class, status ) == 0 ) break;
-
- }
-
-/* Re-instate the original current card. */
- this->card = card0;
-
-/* If we found a complete comment block, mark it (which is equivalent to
- deleting it except that memory of the cards location within the
- FitsChan is preserved for future use), and then re-instate the original
- current card. */
- if( ret && astOK ) {
-
- for( i = 0; i < ncard; i++ ) {
- MoveCard( this, incr, method, class, status );
- MarkCard( this, status );
- }
-
- this->card = card0;
-
- }
- }
-
-/* If an error occurred, indicate that coment block has been deleted. */
- if( !astOK ) ret = 0;
-
- return ret;
-
-}
-
-static int CountFields( const char *temp, char type, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* CountFields
-
-* Purpose:
-* Count the number of field specifiers in a template string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int CountFields( const char *temp, char type, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function returns the number of fields which include the
-* specified character type in the supplied string.
-
-* Parameters:
-* temp
-* Pointer to a null terminated string holding the template.
-* type
-* A single character giving the field type to be counted (e.g.
-* 'd', 'c' or 'f').
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The number of fields.
-
-* Notes:
-* - No error is reported if the parameter "type" is not a valid
-* field type specifier, but zero will be returned.
-* - An error is reported if the template has any invalid field
-* specifiers in it.
-* - A value of zero is returned if an error has already occurred,
-* or if this function should fail for any reason.
-
-*/
-/* Local Variables: */
- const char *b; /* Pointer to next template character */
- int nf; /* No. of fields found so far */
-
-/* Check global status. */
- if( !astOK ) return 0;
-
-/* Initialise a pointer to the start of the template string. */
- b = temp;
-
-/* Initialise the number of fields found so far. */
- nf = 0;
-
-/* Go through the string. */
- while( *b && astOK ){
-
-/* If the current character is a '%', a field is starting. */
- if( *b == '%' ){
-
-/* Skip over the field width (if supplied). */
- if( isdigit( (int) *(++b) ) ) b++;
-
-/* Report an error if the end of the string occurs within the field. */
- if( !*b ) {
- astError( AST__BDFMT, "%s(%s): Incomplete field specifier found "
- "at end of filter template '%s'.", status, method, class,
- temp );
- break;
-
-/* Report an error if the field type is illegal. */
- } else if( *b != 'd' && *b != 'c' && *b != 'f' ) {
- astError( AST__BDFMT, "%s(%s): Illegal field type or width "
- "specifier '%c' found in filter template '%s'.", status,
- method, class, *b, temp );
- break;
- }
-
-/* Compare the field type with the supplied type, and increment the
- number of fields found if it is the correct type. */
- if( *b == type ) nf++;
-
- }
-
-/* Move on to the next character. */
- b++;
-
- }
-
-/* If an error has occurred, return 0. */
- if( !astOK ) nf = 0;
-
-/* Return the answer. */
- return nf;
-
-}
-
-static void CreateKeyword( AstFitsChan *this, const char *name,
- char keyword[ FITSNAMLEN + 1 ], int *status ){
-/*
-* Name:
-* CreateKeyword
-
-* Purpose:
-* Create a unique un-used keyword for a FitsChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void CreateKeyword( AstFitsChan *this, const char *name,
-* char keyword[ FITSNAMLEN + 1 ], int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function takes a name which forms the basis of a FITS
-* keyword and appends a sequence number (encoded as a pair of
-* legal FITS keyword characters) so as to generate a unique FITS
-* keyword which has not previously been used in the FitsChan
-* supplied.
-*
-* It is intended for use when several keywords with the same name
-* must be stored in a FitsChan, since to comply strictly with the
-* FITS standard keywords should normally be unique (otherwise
-* external software which processes the keywords might omit one or
-* other of the values).
-*
-* An attempt is also made to generate keywords in a form that is
-* unlikely to clash with those from other sources (in as far as
-* this is possible with FITS). In any event, a keyword that
-* already appears in the FitsChan will not be re-used.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* name
-* Pointer to a constant null-terminated string containing the
-* name on which the new keyword should be based. This should be
-* a legal FITS keyword in itself, except that it should be at
-* least two characters shorter than the maximum length, in
-* order to accommodate the sequence number characters.
-*
-* If this string is too long, it will be silently
-* truncated. Mixed case is permitted, as all characters
-* supplied are converted to upper case before use.
-* keyword
-* A character array in which the generated unique keyword will
-* be returned, null terminated.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- const char *seq_chars = SEQ_CHARS;/* Pointer to characters used for encoding */
- char seq_char; /* The first sequence character */
- const char *class; /* Object clas */
- int found; /* Keyword entry found in list? */
- int limit; /* Sequence number has reached limit? */
- int nc; /* Number of basic keyword characters */
- int seq; /* The sequence number */
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Store the object class. */
- class = astGetClass( this );
-
-/* On the first invocation only, determine the number of characters
- being used to encode sequence number information and save this
- value. */
- if( createkeyword_seq_nchars < 0 ) createkeyword_seq_nchars = (int) strlen( seq_chars );
-
-/* Copy the name supplied into the output array, converting to upper
- case. Leave space for two characters to encode a sequence
- number. Terminate the resulting string. */
- for( nc = 0; name[ nc ] && ( nc < ( FITSNAMLEN - 2 ) ); nc++ ) {
- keyword[ nc ] = toupper( name[ nc ] );
- }
- keyword[ nc ] = '\0';
-
-/* We now search the list of sequence numbers already allocated to
- find the next one to use for this keyword. */
- if( this->keyseq ) {
- found = astMapGet0I( this->keyseq, keyword, &seq );
- } else {
- found = 0;
- this->keyseq = astKeyMap( "", status );
- }
-
-/* If the keyword was not found in the list, create a new list entry
- to describe it. */
- if( !found ) seq = 0;
-
-/* If OK, loop to find a new sequence number which results in a FITS
- keyword that hasn't already been used to store data in the
- FitsChan. */
- if( astOK ) {
- while( 1 ) {
-
-/* Determine if the sequence number just obtained has reached the
- upper limit. This is unlikely to happen in practice, but if it
- does, we simply re-use this maximum value. Otherwise, we increment
- the sequence number last used for this keyword to obtain a new
- one. */
- limit = ( seq >= ( createkeyword_seq_nchars * createkeyword_seq_nchars - 1 ) );
- if( !limit ) seq++;
-
-/* Encode the sequence number into two characters and append them to
- the original keyword (with a terminating null). */
- seq_char = seq_chars[ seq / createkeyword_seq_nchars ];
- keyword[ nc ] = seq_char;
- keyword[ nc + 1 ] = seq_chars[ seq % createkeyword_seq_nchars ];
- keyword[ nc + 2 ] = '\0';
-
-/* If the upper sequence number limit has not been reached, try to
- look up the resulting keyword in the FitsChan to see if it has
- already been used. Quit searching when a suitable keyword is
- found. */
- if ( limit || !HasCard( this, keyword, "astWrite", class, status ) ) break;
- }
-
-/* Store the update sequence number in the keymap. The keys into this
- keymap are the base keyword name without the appended sequence string, so
- temporaily terminate the returned keyword name to exclude the sequence
- string. */
- keyword[ nc ] = '\0';
- astMapPut0I( this->keyseq, keyword, seq, NULL );
- keyword[ nc ] = seq_char;
- }
-}
-
-static double DateObs( const char *dateobs, int *status ) {
-/*
-* Name:
-* DateObs
-
-* Purpose:
-* Convert a FITS DATE-OBS keyword value to a MJD.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* double DateObs( const char *dateobs, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* Extracts the date and time fields from the supplied string and converts
-* them into a modified Julian Date. Supports both old "dd/mm/yy"
-* format, and the new "ccyy-mm-ddThh:mm:ss[.sss...]" format.
-
-* Parameters:
-* dateobs
-* Pointer to the DATE-OBS string.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Modified Julian Date corresponding to the supplied DATE-OBS
-* string.
-
-* Notes:
-* - The value AST__BAD is returned (without error) if the supplied
-* string does not conform to the requirements of a FITS DATE-OBS value,
-* or if an error has already occurred.
-*/
-
-/* Local Variables: */
- double days; /* The hours, mins and secs as a fraction of a day */
- double ret; /* The returned MJD value */
- double secs; /* The total value of the two seconds fields */
- int dd; /* The day field from the supplied string */
- int fsc; /* The fractional seconds field from the supplied string */
- int hr; /* The hour field from the supplied string */
- int j; /* SLALIB status */
- int len; /* The length of the supplied string */
- int mm; /* The month field from the supplied string */
- int mn; /* The minute field from the supplied string */
- int nc; /* Number of characters used */
- int ok; /* Was the string of a legal format? */
- int rem; /* The least significant digit in fsc */
- int sc; /* The whole seconds field from the supplied string */
- int yy; /* The year field from the supplied string */
-
-
-/* Check the global status. */
- if( !astOK ) return AST__BAD;
-
-/* Initialise the returned value. */
- ret = AST__BAD;
-
-/* Save the length of the supplied string. */
- len = (int) strlen( dateobs );
-
-/* Extract the year, month, day, hour, minute, second and fractional
- seconds fields from the supplied string. Assume initially that the
- string does not match any format. */
- ok = 0;
-
-/* First check for the old "dd/mm/yy" format. */
- if( nc = 0,
- ( astSscanf( dateobs, " %2d/%2d/%d %n", &dd, &mm, &yy, &nc ) == 3 ) &&
- ( nc >= len ) ){
- ok = 1;
- hr = 0;
- mn = 0;
- sc = 0;
- fsc = 0;
-
-/* Otherwise, check for the new short format "ccyy-mm-dd". */
- } else if( nc = 0,
- ( astSscanf( dateobs, " %4d-%2d-%2d %n", &yy, &mm, &dd, &nc ) == 3 ) &&
- ( nc >= len ) ){
- ok = 1;
- hr = 0;
- mn = 0;
- sc = 0;
- fsc = 0;
-
-/* Otherwise, check for the new format "ccyy-mm-ddThh:mm:ss" without a
- fractional seconds field or the trailing Z. */
- } else if( nc = 0,
- ( astSscanf( dateobs, " %4d-%2d-%2dT%2d:%2d:%2d %n", &yy, &mm, &dd,
- &hr, &mn, &sc, &nc ) == 6 ) && ( nc >= len ) ){
- ok = 1;
- fsc = 0;
-
-/* Otherwise, check for the new format "ccyy-mm-ddThh:mm:ss.sss" with a
- fractional seconds field but without the trailing Z. */
- } else if( nc = 0,
- ( astSscanf( dateobs, " %4d-%2d-%2dT%2d:%2d:%2d.%d %n", &yy, &mm, &dd,
- &hr, &mn, &sc, &fsc, &nc ) == 7 ) && ( nc >= len ) ){
- ok = 1;
-
-/* Otherwise, check for the new format "ccyy-mm-ddThh:mm:ssZ" without a
- fractional seconds field but with the trailing Z. */
- } else if( nc = 0,
- ( astSscanf( dateobs, " %4d-%2d-%2dT%2d:%2d:%2dZ %n", &yy, &mm, &dd,
- &hr, &mn, &sc, &nc ) == 6 ) && ( nc >= len ) ){
- ok = 1;
- fsc = 0;
-
-/* Otherwise, check for the new format "ccyy-mm-ddThh:mm:ss.sssZ" with a
- fractional seconds field and the trailing Z. */
- } else if( nc = 0,
- ( astSscanf( dateobs, " %4d-%2d-%2dT%2d:%2d:%2d.%dZ %n", &yy, &mm, &dd,
- &hr, &mn, &sc, &fsc, &nc ) == 7 ) && ( nc >= len ) ){
- ok = 1;
- }
-
-/* If the supplied string was legal, create a MJD from the separate fields. */
- if( ok ) {
-
-/* Get the MJD at the start of the day. */
- palSlaCaldj( yy, mm, dd, &ret, &j );
-
-/* If succesful, convert the hours, minutes and seconds to a fraction of
- a day, and add it onto the MJD found above. */
- if( j == 0 ) {
-
-/* Obtain a floating point representation of the fractional seconds
- field. */
- secs = 0.0;
- while ( fsc > 0 ) {
- rem = ( fsc % 10 );
- fsc /= 10;
- secs = 0.1 * ( secs + (double) rem );
- }
-
-/* Add on the whole seconds field. */
- secs += (double) sc;
-
-/*Convert the hours, minutes and seconds to a fractional day. */
- palSlaDtf2d( hr, mn, secs, &days, &j );
-
-/* If succesful, add this onto the returned MJD. */
- if( j == 0 ) {
- ret = ret + days;
-
-/* If the conversion to MJD failed, return AST__BAD. */
- } else {
- ret = AST__BAD;
- }
-
- } else {
- ret = AST__BAD;
- }
- }
-
-/* Return the result. */
- return ret;
-
-}
-
-static void DeleteCard( AstFitsChan *this, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* DeleteCard
-
-* Purpose:
-* Delete the current card from a FitsChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void DeleteCard( AstFitsChan *this, const char *method,
-* const char *class )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* The current card is removed from the circular linked list of structures
-* stored in the supplied FitsChan, and the memory used to store the
-* structure is then freed.
-
-* Parameters:
-* this
-* Pointer to the FitsChan containing the list.
-* method
-* Name of calling method.
-* class
-* Object class.
-
-* Notes:
-* - This function returns without action if the FitsChan is
-* currently at "end-of-file".
-* - The next card becomes the current card.
-* - This function attempts to execute even if an error has occurred.
-
-*/
-
-/* Local Variables: */
- FitsCard *card; /* Pointer to the current card */
- FitsCard *next; /* Pointer to next card in list */
- FitsCard *prev; /* Pointer to previous card in list */
-
-/* Return if the supplied object or current card is NULL. */
- if( !this || !this->card ) return;
-
-/* Get a pointer to the card to be deleted (the current card). */
- card = (FitsCard *) this->card;
-
-/* Remove it from the KeyMap holding all keywords. */
- astMapRemove( this->keywords, card->name );
-
-/* Move the current card on to the next card. */
- MoveCard( this, 1, method, class, status );
-
-/* Save pointers to the previous and next cards in the list. */
- prev = GetLink( card, PREVIOUS, method, class, status );
- next = GetLink( card, NEXT, method, class, status );
-
-/* If the backwards link points back to the supplied card, then it must
- be the only one left on the list. */
- if( prev == card ) prev = NULL;
- if( next == card ) next = NULL;
-
-/* If the list head is to be deleted, store a value for the new list
- head. */
- if( this->head == (void *) card ) this->head = (void *) next;
-
-/* Free the memory used to hold the data value. */
- (void) astFree( card->data );
-
-/* Free the memory used to hold any comment. */
- if( card->comment ) (void) astFree( (void *) card->comment );
-
-/* Free the memory used to hold the whole structure. */
- (void) astFree( (void *) card );
-
-/* Fix up the links between the two adjacent cards in the list, unless the
- supplied card was the last one in the list. */
- if( prev && next ){
- next->prev = prev;
- prev->next = next;
-
- } else {
- this->head = NULL;
- this->card = NULL;
- }
-
-/* Return. */
- return;
-
-}
-
-static void DelFits( AstFitsChan *this, int *status ){
-/*
-*++
-* Name:
-c astDelFits
-f AST_DELFITS
-
-* Purpose:
-* Delete the current FITS card in a FitsChan.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "fitschan.h"
-c void astDelFits( AstFitsChan *this )
-f CALL AST_DELFITS( THIS, STATUS )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-c This function deletes the current FITS card from a FitsChan. The
-f This routine deletes the current FITS card from a FitsChan. The
-* current card may be selected using the Card attribute (if its index
-c is known) or by using astFindFits (if only the FITS keyword is
-f is known) or by using AST_FINDFITS (if only the FITS keyword is
-* known).
-*
-* After deletion, the following card becomes the current card.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the FitsChan.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - This function returns without action if the FitsChan is
-* initially positioned at the "end-of-file" (i.e. if the Card
-* attribute exceeds the number of cards in the FitsChan).
-* - If there are no subsequent cards in the FitsChan, then the
-* Card attribute is left pointing at the "end-of-file" after
-* deletion (i.e. is set to one more than the number of cards in
-* the FitsChan).
-*--
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Ensure the source function has been called */
- ReadFromSource( this, status );
-
-/* Delete the current card. The next card will be made the current card. */
- DeleteCard( this, "astDelFits", astGetClass( this ), status );
-
-}
-
-static void DistortMaps( AstFitsChan *this, FitsStore *store, char s,
- int naxes, AstMapping **map1, AstMapping **map2,
- AstMapping **map3, AstMapping **map4,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* DistortMap
-
-* Purpose:
-* Create a Mapping representing a FITS-WCS Paper IV distortion code.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void DistortMaps( AstFitsChan *this, FitsStore *store, char s,
-* int naxes, AstMapping **map1, AstMapping **map2,
-* AstMapping **map3, AstMapping **map4,
-* const char *method, const char *class )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* This function checks the CTYPE keywords in the supplied FitsStore to see
-* if they contain a known distortion code (following the syntax described
-* in FITS-WCS paper IV). If so, Mappings are returned which represent the
-* distortions to be applied at each stage in the pixel->IWC chain. If
-* any distortion codes are found in the FitsStore CTYPE values, whether
-* recognised or not, the CTYPE values in the FitsStore are modified to
-* remove the distortion code. Warnings about any unknown or inappropriate
-* distortion codes are added to the FitsChan.
-
-* Parameters:
-* this
-* The FitsChan. ASTWARN cards may be added to this FitsChan if any
-* anomalies are found in the keyword values in the FitsStore.
-* store
-* A structure containing information about the requested axis
-* descriptions derived from a FITS header.
-* s
-* A character identifying the co-ordinate version to use. A space
-* means use primary axis descriptions. Otherwise, it must be an
-* upper-case alphabetical characters ('A' to 'Z').
-* naxes
-* The number of intermediate world coordinate axes (WCSAXES).
-* map1
-* Address of a location at which to store a pointer to a Mapping
-* which describes any distortion to be applied to pixel
-* coordinates, prior to performing the translation specified by the
-* CRPIXj keywords. NULL is returned if no distortion is necessary.
-* map2
-* Address of a location at which to store a pointer to a Mapping
-* which describes any distortion to be applied to translated pixel
-* coordinates, prior to performing the PC matrix multiplication.
-* NULL is returned if no distortion is necessary.
-* map3
-* Address of a location at which to store a pointer to a Mapping
-* which describes any distortion to be applied to unscaled IWC
-* coordinates, prior to performing the CDELT matrix multiplication.
-* NULL is returned if no distortion is necessary.
-* map4
-* Address of a location at which to store a pointer to a Mapping
-* which describes any distortion to be applied to scaled IWC
-* coordinates, after performing the CDELT matrix multiplication.
-* NULL is returned if no distortion is necessary.
-* method
-* A pointer to a string holding the name of the calling method.
-* This is used only in the construction of error messages.
-* class
-* A pointer to a string holding the class of the object being
-* read. This is used only in the construction of error messages.
-
-*/
-
-/* Local Variables: */
- AstMapping *tmap1; /* Mapping pointer */
- AstMapping *tmap2; /* Mapping pointer */
- char msgbuf[ 250 ]; /* Buffer for warning message */
- int i; /* FITS axis index */
- char *ctype; /* Pointer to CTYPE value */
- char type[ 5 ]; /* Axis type extracted from CTYPE */
- char code[ 4 ]; /* Projection code extracted from CTYPE */
- char dist[ 4 ]; /* Distortion code extracted from CTYPE */
- int warned; /* Have any ASTWARN cards been issued? */
-
-/* Initialise pointers to the returned Mappings. */
- *map1 = NULL;
- *map2 = NULL;
- *map3 = NULL;
- *map4 = NULL;
-
-/* Check the global status. */
- if ( !astOK ) return;
-
-/* First check each known distortion type... */
-
-/* "-SIP": SIRTF (http://sirtf.caltech.edu/SSC/documents/WCSkeywords_v1.3.pdf)
- ============= */
-
-/* SIRTF distortion is limited to 2D. Check the first two axes to see if
- they have "-SIP" codes in their CTYPE values. If they do, terminate the
- ctype string in order to exclude the distortion code (this is so that
- later functions do not need to allow for the possibility of a distortion
- code being present in the CTYPE value)*/
- ctype = GetItemC( &(store->ctype), 0, s, NULL, method, class, status );
- if( ctype && 3 == astSscanf( ctype, "%4s-%3s-%3s", type, code, dist ) ){
- if( !strcmp( "SIP", dist ) ) {
- ctype[ 8 ] = 0;
- ctype = GetItemC( &(store->ctype), 1, s, NULL, method, class, status );
- if( ctype && 3 == astSscanf( ctype, "%4s-%3s-%3s", type, code, dist ) ){
- if( !strcmp( "SIP", dist ) ) {
- ctype[ 8 ] = 0;
-
-/* Create a Mapping describing the distortion (other axes are passed
- unchanged by this Mapping), and add it in series with the returned map2
- (SIRTF distortion is applied to the translated pixel coordinates). */
- tmap1 = SIPMapping( store, s, naxes, method, class, status );
- if( ! *map2 ) {
- *map2 = tmap1;
- } else {
- tmap2 = (AstMapping *) astCmpMap( *map2, tmap1, 1, "", status );
- *map2 = astAnnul( *map2 );
- tmap1 = astAnnul( tmap1 );
- *map2 = tmap2;
- }
- }
- }
- }
- }
-
-/* Check that the "-SIP" code is not included in any axes other than axes
- 0 and 1. Issue a warning if it is, and remove it. */
- warned = 0;
- for( i = 2; i < naxes; i++ ){
- ctype = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
- if( ctype && 3 == astSscanf( ctype, "%4s-%3s-%3s", type, code, dist ) ){
- if( !strcmp( "SIP", dist ) ){
- if( !warned ){
- warned = 1;
- sprintf( msgbuf, "The \"-SIP\" distortion code can only be "
- "used on axes 1 and 2, but was found in keyword "
- "%s (='%s'). The distortion will be ignored.",
- FormatKey( "CTYPE", i + 1, -1, ' ', status ), ctype );
- Warn( this, "distortion", msgbuf, method, class, status );
- }
- ctype[ 8 ] = 0;
- }
- }
- }
-
-
-/* (There are currently no other supported distortion codes.) */
-
-
-/* Finally, check all axes looking for any remaining (and therefore
- unsupported) distortion codes. Issue a warning about them and remove
- them.
- =================================================================== */
-
-/* Indicate that we have not yet issued a warning. */
- warned = 0;
-
-/* Do each IWC axis. */
- for( i = 0; i < naxes; i++ ){
-
-/* Get the CTYPE value for this axis. */
- ctype = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
- if( ctype ) {
-
-/* See if has the "4-3-3" form described in FITS-WCS paper IV. */
- if( 3 == astSscanf( ctype, "%4s-%3s-%3s", type, code, dist ) ){
-
-/* Add an ASTWARN card to the FitsChan. Only issue one warning (this avoids
- multiple warnings about the same distortion code in multiple CTYPE values). */
- if( !warned ){
- warned = 1;
- sprintf( msgbuf, "The header contains CTYPE values (e.g. "
- "%s = '%s') which "
- "include a distortion code \"-%s\". AST "
- "currently ignores this distortion. The code "
- "has been removed from the CTYPE values.",
- FormatKey( "CTYPE", i + 1, -1, ' ', status ), ctype, dist );
- Warn( this, "distortion", msgbuf, method, class, status );
- }
-
-/* Terminate the CTYPE value in the FitsStore in order to exclude the distortion
- code. This means that later functions will not need to take account of
- distortion codes. */
- ctype[ 8 ] = 0;
- }
- }
- }
-}
-
-static void DSBSetUp( AstFitsChan *this, FitsStore *store,
- AstDSBSpecFrame *dsb, char s, double crval,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* DSBSetUp
-
-* Purpose:
-* Modify an AstDSBSpecFrame object to reflect the contents of a FitsStore.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void DSBSetUp( AstFitsChan *this, FitsStore *store,
-* AstDSBSpecFrame *dsb, char s, double crval,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* This function sets the attributes of the supplied DSBSpecFrame to
-* reflect the values in the supplied FitsStore.
-
-* Parameters:
-* this
-* The FitsChan.
-* store
-* A structure containing information about the requested axis
-* descriptions derived from a FITS header.
-* dsb
-* Pointer to the DSBSpecFrame.
-* s
-* Alternate axis code.
-* crval
-* The spectral CRVAL value, in the spectral system represented by
-* the supplied DSBSPecFrame.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This implementation follows the conventions of the FITS-CLASS encoding.
-
-*/
-
-/* Local Variables: */
- AstDSBSpecFrame *dsb_src; /* New DSBSpecFrame in which StdOfRest is source */
- AstDSBSpecFrame *dsb_topo;/* New DSBSpecFrame in which StdOfRest is topo */
- AstFrameSet *fs; /* FrameSet connecting two standards of rest */
- double dsbcentre; /* Topocentric reference (CRVAL) frequency */
- double in[2]; /* Source rest and image frequencies */
- double lo; /* Topocentric Local Oscillator frequency */
- double out[2]; /* Topocentric rest and image frequencies */
-
-/* Check the global status. */
- if ( !astOK ) return;
-
-/* In order to determine the topocentric IF, we need the topocentric
- frequencies corresponding to the RESTFREQ and IMAGFREQ values in the
- FITS header. The values stored in the FITS header are measured in Hz,
- in the source's rest frame, so we need a mapping from frequency in the
- source rest frame to topocentric frequency. Take a copy of the supplied
- DSBSpecFrame and then set its attributes to represent frequency in the
- sources rest frame. */
- dsb_src = astCopy( dsb );
- astSetStdOfRest( dsb_src, AST__SCSOR );
- astSetSystem( dsb_src, AST__FREQ );
- astSetUnit( dsb_src, 0, "Hz" );
-
-/* Take a copy of this DSBSpecFrame and set its standard of rest to
- topocentric. */
- dsb_topo = astCopy( dsb_src );
- astSetStdOfRest( dsb_topo, AST__TPSOR );
-
-/* Now get the Mapping between these. */
- fs = astConvert( dsb_src, dsb_topo, "" );
- dsb_src = astAnnul( dsb_src );
- dsb_topo = astAnnul( dsb_topo );
-
-/* Check a conversion was found. */
- if( fs != NULL ) {
-
-/* Use this Mapping to transform the rest frequency and the image
- frequency from the standard of rest of the source to that of the
- observer. */
- in[ 0 ] = astGetRestFreq( dsb );
- in[ 1 ] = GetItem( &(store->imagfreq), 0, 0, s, NULL, method, class, status );
- astTran1( fs, 2, in, 1, out );
-
-/* The intermediate frequency is half the distance between these two
- frequencies. Note, the IF value is signed so as to put the rest
- frequency in the observed sideband. */
- if( out[ 0 ] != AST__BAD && out[ 1 ] != AST__BAD ) {
-
-/* Store the spectral CRVAL value as the centre frequency of the
- DSBSpecFrame. The public astSetD method interprets the supplied value
- as a value in the spectral system described by the other SpecFrame
- attributes. */
- astSetD( dsb, "DSBCentre", crval );
-
-/* To calculate the topocentric IF we need the topocentric frequency
- equivalent of CRVAL. So take a copy of the DSBSpecFrame, then set it to
- represent topocentric frequency, and read back the DSBCentre value. */
- dsb_topo = astCopy( dsb );
- astSetStdOfRest( dsb_topo, AST__TPSOR );
- astSetSystem( dsb_topo, AST__FREQ );
- astSetUnit( dsb_topo, 0, "Hz" );
- dsbcentre = astGetD( dsb_topo, "DSBCentre" );
- dsb_topo = astAnnul( dsb_topo );
-
-/* We also need the topocentric Local Oscillator frequency. This is
- assumed to be half way between the topocentric IMAGFREQ and RESTFREQ
- values. */
- lo = 0.5*( out[ 1 ] + out[ 0 ] );
-
-/* Set the IF to be the difference between the Local Oscillator frequency
- and the CRVAL frequency. */
- astSetIF( dsb, lo - dsbcentre );
-
-/* Set the DSBSpecFrame to represent the observed sideband */
- astSetC( dsb, "SideBand", "observed" );
- }
-
-/* Free resources. */
- fs = astAnnul( fs );
-
- }
-}
-
-static int DSSFromStore( AstFitsChan *this, FitsStore *store,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* DSSFromStore
-
-* Purpose:
-* Store WCS keywords in a FitsChan using DSS encoding.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* int DSSFromStore( AstFitsChan *this, FitsStore *store,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* A FitsStore is a structure containing a generalised represention of
-* a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-* from a set of FITS header cards (using a specified encoding), or
-* an AST FrameSet. In other words, a FitsStore is an encoding-
-* independant intermediary staging post between a FITS header and
-* an AST FrameSet.
-*
-* This function copies the WCS information stored in the supplied
-* FitsStore into the supplied FitsChan, using DSS encoding.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* store
-* Pointer to the FitsStore.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A value of 1 is returned if succesfull, and zero is returned
-* otherwise.
-
-*/
-
-/* Local Variables: */
- const char *comm; /* Pointer to comment string */
- char *cval; /* Pointer to string keyword value */
- const char *pltdecsn;/* PLTDECSN keyword value */
- double amdx[20]; /* AMDXi keyword value */
- double amdy[20]; /* AMDYi keyword value */
- double cdelt; /* CDELT element */
- double cnpix1; /* CNPIX1 keyword value */
- double cnpix2; /* CNPIX2 keyword value */
- double pc; /* PC element */
- double pltdecd; /* PLTDECD keyword value */
- double pltdecm; /* PLTDECM keyword value */
- double pltdecs; /* PLTDECS keyword value */
- double pltrah; /* PLTRAH keyword value */
- double pltram; /* PLTRAM keyword value */
- double pltras; /* PLTRAS keyword value */
- double pltscl; /* PLTSCL keyword value */
- double ppo1; /* PPO1 keyword value */
- double ppo2; /* PPO2 keyword value */
- double ppo3; /* PPO3 keyword value */
- double ppo4; /* PPO4 keyword value */
- double ppo5; /* PPO5 keyword value */
- double ppo6; /* PPO6 keyword value */
- double pvx[22]; /* X projection parameter values */
- double pvy[22]; /* Y projection parameter values */
- double val; /* General purpose value */
- double xpixelsz; /* XPIXELSZ keyword value */
- double ypixelsz; /* YPIXELSZ keyword value */
- int i; /* Loop count */
- int gottpn; /* Is the projection a "TPN" projection? */
- int m; /* Parameter index */
- int ret; /* Returned value. */
-
-/* Initialise */
- ret = 0;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* Check the image is 2 dimensional. */
- if( GetMaxJM( &(store->crpix), ' ', status ) != 1 ) return ret;
-
-/* Check the first axis is RA with a TAN or TPN projection. */
- cval = GetItemC( &(store->ctype), 0, ' ', NULL, method, class, status );
- if( !cval ) return ret;
- gottpn = !strcmp( "RA---TPN", cval );
- if( strcmp( "RA---TAN", cval ) && !gottpn ) return ret;
-
-/* Check the second axis is DEC with a TAN or TPN projection. */
- cval = GetItemC( &(store->ctype), 1, ' ', NULL, method, class, status );
- if( !cval ) return ret;
- if( gottpn ) {
- if( strcmp( "DEC--TPN", cval ) ) return ret;
- } else {
- if( strcmp( "DEC--TAN", cval ) ) return ret;
- }
-
-/* Check that LONPOLE is undefined or is 180 degrees. */
- val = GetItem( &(store->lonpole), 0, 0, ' ', NULL, method, class, status );
- if( val != AST__BAD && val != 180.0 ) return ret;
-
-/* Check that the RA/DEC system is FK5. */
- cval = GetItemC( &(store->radesys), 0, ' ', NULL, method, class, status );
- if( !cval || strcmp( "FK5", cval ) ) return ret;
-
-/* Check that equinox is not defined or is 2000.0 */
- val = GetItem( &(store->equinox), 0, 0, ' ', NULL, method, class, status );
- if( val != AST__BAD && val != 2000.0 ) return ret;
-
-/* Get the pixel sizes from the PC/CDELT keywords. They must be defined and
- not be zero. */
- cdelt = GetItem( &(store->cdelt), 0, 0, ' ', NULL, method, class, status );
- if( cdelt == AST__BAD ) return ret;
-
- pc = GetItem( &(store->pc), 0, 0, ' ', NULL, method, class, status );
- if( pc == AST__BAD ) pc = 1.0;
-
- xpixelsz = cdelt*pc;
-
- cdelt = GetItem( &(store->cdelt), 1, 0, ' ', NULL, method, class, status );
- if( cdelt == AST__BAD ) return ret;
-
- pc = GetItem( &(store->pc), 1, 1, ' ', NULL, method, class, status );
- if( pc == AST__BAD ) pc = 1.0;
-
- ypixelsz = cdelt*pc;
-
- if( xpixelsz == 0.0 || ypixelsz == 0.0 ) return ret;
-
- xpixelsz *= -1000.0;
- ypixelsz *= 1000.0;
-
-/* Check the off-diagonal PC terms are zero. DSS does not allow any rotation. */
- val = GetItem( &(store->pc), 0, 1, ' ', NULL, method, class, status );
- if( val != AST__BAD && val != 0.0 ) return ret;
-
- val = GetItem( &(store->pc), 1, 0, ' ', NULL, method, class, status );
- if( val != AST__BAD && val != 0.0 ) return ret;
-
-/* Get the required projection parameter values from the store, supplying
- appropriate values if a simple TAN projection is being used. */
- for( m = 0; m < 22; m++ ){
- pvx[ m ] = GetItem( &(store->pv), 0, m, ' ', NULL, method, class, status );
- if( pvx[ m ] == AST__BAD || !gottpn ) pvx[ m ] = ( m == 1 ) ? 1.0 : 0.0;
-
- pvy[ m ] = GetItem( &(store->pv), 1, m, ' ', NULL, method, class, status );
- if( pvy[ m ] == AST__BAD || !gottpn ) pvy[ m ] = ( m == 1 ) ? 1.0 : 0.0;
- }
-
-/* Check that no other projection parameters have been set. */
- if( GetMaxJM( &(store->pv), ' ', status ) > 21 ) return ret;
-
-/* Check that specific parameters take their required zero value. */
- if( pvx[ 3 ] != 0.0 || pvy[ 3 ] != 0.0 ) return ret;
-
- for( m = 11; m < 17; m++ ){
- if( pvx[ m ] != 0.0 || pvy[ m ] != 0.0 ) return ret;
- }
-
- if( pvx[ 18 ] != 0.0 || pvy[ 18 ] != 0.0 ) return ret;
- if( pvx[ 20 ] != 0.0 || pvy[ 20 ] != 0.0 ) return ret;
-
-/* Check that other projection parameters are related correctly. */
- if( !EQUAL( 2*pvx[ 17 ], pvx[ 19 ] ) ) return ret;
- if( !EQUAL( pvx[ 17 ], pvx[ 21 ] ) ) return ret;
-
- if( !EQUAL( 2*pvy[ 17 ], pvy[ 19 ] ) ) return ret;
- if( !EQUAL( pvy[ 17 ], pvy[ 21 ] ) ) return ret;
-
-/* Initialise all polynomial co-efficients to zero. */
- for( m = 0; m < 20; m++ ){
- amdx[ m ] = 0.0;
- amdy[ m ] = 0.0;
- }
-
-/* Polynomial co-efficients. There is redundancy here too, so we
- arbitrarily choose to leave AMDX/Y7 and AMDX/Y12 set to zero. */
- amdx[ 0 ] = 3600.0*pvx[ 1 ];
- amdx[ 1 ] = 3600.0*pvx[ 2 ];
- amdx[ 2 ] = 3600.0*pvx[ 0 ];
- amdx[ 3 ] = 3600.0*pvx[ 4 ];
- amdx[ 4 ] = 3600.0*pvx[ 5 ];
- amdx[ 5 ] = 3600.0*pvx[ 6 ];
- amdx[ 7 ] = 3600.0*pvx[ 7 ];
- amdx[ 8 ] = 3600.0*pvx[ 8 ];
- amdx[ 9 ] = 3600.0*pvx[ 9 ];
- amdx[ 10 ] = 3600.0*pvx[ 10 ];
- amdx[ 12 ] = 3600.0*pvx[ 17 ];
-
- amdy[ 0 ] = 3600.0*pvy[ 1 ];
- amdy[ 1 ] = 3600.0*pvy[ 2 ];
- amdy[ 2 ] = 3600.0*pvy[ 0 ];
- amdy[ 3 ] = 3600.0*pvy[ 4 ];
- amdy[ 4 ] = 3600.0*pvy[ 5 ];
- amdy[ 5 ] = 3600.0*pvy[ 6 ];
- amdy[ 7 ] = 3600.0*pvy[ 7 ];
- amdy[ 8 ] = 3600.0*pvy[ 8 ];
- amdy[ 9 ] = 3600.0*pvy[ 9 ];
- amdy[ 10 ] = 3600.0*pvy[ 10 ];
- amdy[ 12 ] = 3600.0*pvy[ 17 ];
-
-/* The plate scale is the mean of the first X and Y co-efficients. */
- pltscl = 0.5*( amdx[ 0 ] + amdy[ 0 ] );
-
-/* There is redundancy in the DSS encoding. We can choose an arbitrary
- pixel corner (CNPIX1, CNPIX2) so long as we use the corresponding origin
- for the cartesian co-ordinate system in which the plate centre is
- specified (PPO3, PPO6). Arbitrarily set CNPIX1 and CNPIX2 to one. */
- cnpix1 = 1.0;
- cnpix2 = 1.0;
-
-/* Find the corresponding plate centre PPO3 and PPO6 (other co-efficients
- are set to zero). */
- ppo1 = 0.0;
- ppo2 = 0.0;
-
- val = GetItem( &(store->crpix), 0, 0, ' ', NULL, method, class, status );
- if( val == AST__BAD ) return ret;
- ppo3 = xpixelsz*( val + cnpix1 - 0.5 );
-
- ppo4 = 0.0;
- ppo5 = 0.0;
-
- val = GetItem( &(store->crpix), 0, 1, ' ', NULL, method, class, status );
- if( val == AST__BAD ) return ret;
- ppo6 = ypixelsz*( val + cnpix2 - 0.5 );
-
-/* The reference RA. Get it in degrees. */
- val = GetItem( &(store->crval), 0, 0, ' ', NULL, method, class, status );
- if( val == AST__BAD ) return ret;
-
-/* Convert to hours and ensure it is in the range 0 to 24 */
- val /= 15.0;
- while( val < 0 ) val += 24.0;
- while( val >= 24.0 ) val -= 24.0;
-
-/* Split into hours, mins and seconds. */
- pltrah = (int) val;
- val = 60.0*( val - pltrah );
- pltram = (int) val;
- pltras = 60.0*( val - pltram );
-
-/* The reference DEC. Get it in degrees. */
- val = GetItem( &(store->crval), 1, 0, ' ', NULL, method, class, status );
- if( val == AST__BAD ) return ret;
-
-/* Ensure it is in the range -180 to +180 */
- while( val < -180.0 ) val += 360.0;
- while( val >= 180.0 ) val -= 360.0;
-
-/* Save the sign. */
- if( val > 0.0 ){
- pltdecsn = "+";
- } else {
- pltdecsn = "-";
- val = -val;
- }
-
-/* Split into degrees, mins and seconds. */
- pltdecd = (int) val;
- val = 60.0*( val - pltdecd );
- pltdecm = (int) val;
- pltdecs = 60.0*( val - pltdecm );
-
-/* Store the DSS keywords in the FitsChan. */
- SetValue( this, "CNPIX1", &cnpix1, AST__FLOAT, "X corner (pixels)", status );
- SetValue( this, "CNPIX2", &cnpix2, AST__FLOAT, "Y corner (pixels)", status );
- SetValue( this, "PPO1", &ppo1, AST__FLOAT, "Orientation co-efficients", status );
- SetValue( this, "PPO2", &ppo2, AST__FLOAT, "", status );
- SetValue( this, "PPO3", &ppo3, AST__FLOAT, "", status );
- SetValue( this, "PPO4", &ppo4, AST__FLOAT, "", status );
- SetValue( this, "PPO5", &ppo5, AST__FLOAT, "", status );
- SetValue( this, "PPO6", &ppo6, AST__FLOAT, "", status );
- SetValue( this, "XPIXELSZ", &xpixelsz, AST__FLOAT, "X pixel size (microns)", status );
- SetValue( this, "YPIXELSZ", &ypixelsz, AST__FLOAT, "Y pixel size (microns)", status );
- SetValue( this, "PLTRAH", &pltrah, AST__FLOAT, "RA at plate centre", status );
- SetValue( this, "PLTRAM", &pltram, AST__FLOAT, "", status );
- SetValue( this, "PLTRAS", &pltras, AST__FLOAT, "", status );
- SetValue( this, "PLTDECD", &pltdecd, AST__FLOAT, "DEC at plate centre", status );
- SetValue( this, "PLTDECM", &pltdecm, AST__FLOAT, "", status );
- SetValue( this, "PLTDECS", &pltdecs, AST__FLOAT, "", status );
- SetValue( this, "PLTDECSN", &pltdecsn, AST__STRING, "", status );
- SetValue( this, "PLTSCALE", &pltscl, AST__FLOAT, "Plate scale (arcsec/mm)", status );
-
- comm = "Plate solution x co-efficients";
- for( i = 0; i < 20; i++ ){
- SetValue( this, FormatKey( "AMDX", i + 1, -1, ' ', status ), amdx + i,
- AST__FLOAT, comm, status );
- comm = NULL;
- }
-
- comm = "Plate solution y co-efficients";
- for( i = 0; i < 20; i++ ){
- SetValue( this, FormatKey( "AMDY", i + 1, -1, ' ', status ), amdy + i,
- AST__FLOAT, comm, status );
- comm = NULL;
- }
-
-/* If no error has occurred, return one. */
- if( astOK ) ret = 1;
-
-/* Return the answer. */
- return ret;
-
-}
-
-static void DSSToStore( AstFitsChan *this, FitsStore *store,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* DSSToStore
-
-* Purpose:
-* Extract WCS information from the supplied FitsChan using a DSS
-* encoding, and store it in the supplied FitsStore.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void DSSToStore( AstFitsChan *this, FitsStore *store,
- const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* A FitsStore is a structure containing a generalised represention of
-* a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-* from a set of FITS header cards (using a specified encoding), or
-* an AST FrameSet. In other words, a FitsStore is an encoding-
-* independant intermediary staging post between a FITS header and
-* an AST FrameSet.
-*
-* This function extracts DSS keywords from the supplied FitsChan, and
-* stores the corresponding WCS information in the supplied FitsStore.
-* The conversion from DSS encoding to standard WCS encoding is
-* described in an ear;y draft of the Calabretta & Greisen paper
-* "Representations of celestial coordinates in FITS" (A&A, in prep.),
-* and uses the now deprecated "TAN with polynomial corrections",
-* which is still supported by the WcsMap class as type AST__TPN.
-* Here we use "lambda=1" (i.e. plate co-ordinate are measured in mm,
-* not degrees).
-*
-* It is assumed that DSS images are 2 dimensional.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* store
-* Pointer to the FitsStore structure.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- char *text; /* Pointer to textual keyword value */
- char pltdecsn[11]; /* First 10 non-blank characters from PLTDECSN keyword */
- char keyname[10]; /* Buffer for keyword name */
- double amdx[20]; /* AMDXi keyword value */
- double amdy[20]; /* AMDYi keyword value */
- double cnpix1; /* CNPIX1 keyword value */
- double cnpix2; /* CNPIX2 keyword value */
- double crval2; /* Equivalent CRVAL2 keyword value */
- double dummy; /* Unused keyword value */
- double pltdecd; /* PLTDECD keyword value */
- double pltdecm; /* PLTDECM keyword value */
- double pltdecs; /* PLTDECS keyword value */
- double pltrah; /* PLTRAH keyword value */
- double pltram; /* PLTRAM keyword value */
- double pltras; /* PLTRAS keyword value */
- double ppo3; /* PPO3 keyword value */
- double ppo6; /* PPO6 keyword value */
- double pv; /* Projection parameter value */
- double xpixelsz; /* XPIXELSZ keyword value */
- double ypixelsz; /* YPIXELSZ keyword value */
- int i; /* Loop count */
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* Get the required DSS keywords. Report an error if any are missing. */
- GetValue( this, "CNPIX1", AST__FLOAT, &cnpix1, 1, 1, method, class, status );
- GetValue( this, "CNPIX2", AST__FLOAT, &cnpix2, 1, 1, method, class, status );
- GetValue( this, "PPO3", AST__FLOAT, &ppo3, 1, 1, method, class, status );
- GetValue( this, "PPO6", AST__FLOAT, &ppo6, 1, 1, method, class, status );
- GetValue( this, "XPIXELSZ", AST__FLOAT, &xpixelsz, 1, 1, method, class, status );
- GetValue( this, "YPIXELSZ", AST__FLOAT, &ypixelsz, 1, 1, method, class, status );
- GetValue( this, "PLTRAH", AST__FLOAT, &pltrah, 1, 1, method, class, status );
- GetValue( this, "PLTRAM", AST__FLOAT, &pltram, 1, 1, method, class, status );
- GetValue( this, "PLTRAS", AST__FLOAT, &pltras, 1, 1, method, class, status );
- GetValue( this, "PLTDECD", AST__FLOAT, &pltdecd, 1, 1, method, class, status );
- GetValue( this, "PLTDECM", AST__FLOAT, &pltdecm, 1, 1, method, class, status );
- GetValue( this, "PLTDECS", AST__FLOAT, &pltdecs, 1, 1, method, class, status );
-
-/* Copy the first 10 non-blank characters from the PLTDECSN keyword. */
- GetValue( this, "PLTDECSN", AST__STRING, &text, 1, 1, method, class, status );
- if( astOK ) {
- text += strspn( text, " " );
- text[ strcspn( text, " " ) ] = 0;
- strncpy( pltdecsn, text, 10 );
- }
-
-/* Read other related keywords. We do not need these, but we read them
- so that they are not propagated to any output FITS file. */
- GetValue( this, "PLTSCALE", AST__FLOAT, &dummy, 0, 1, method, class, status );
- GetValue( this, "PPO1", AST__FLOAT, &dummy, 0, 1, method, class, status );
- GetValue( this, "PPO2", AST__FLOAT, &dummy, 0, 1, method, class, status );
- GetValue( this, "PPO4", AST__FLOAT, &dummy, 0, 1, method, class, status );
- GetValue( this, "PPO5", AST__FLOAT, &dummy, 0, 1, method, class, status );
-
-/* Get the polynomial co-efficients. These can be defaulted if they are
- missing, so do not report an error. */
- for( i = 0; i < 20; i++ ){
- (void) sprintf( keyname, "AMDX%d", i + 1 );
- amdx[i] = AST__BAD;
- GetValue( this, keyname, AST__FLOAT, amdx + i, 0, 1, method, class, status );
-
- (void) sprintf( keyname, "AMDY%d", i + 1 );
- amdy[i] = AST__BAD;
- GetValue( this, keyname, AST__FLOAT, amdy + i, 0, 1, method, class, status );
- }
-
-/* Check the above went OK. */
- if( astOK ) {
-
-/* Calculate and store the equivalent PV projection parameters. */
- if( amdx[2] != AST__BAD ) {
- pv = amdx[2]/3600.0;
- SetItem( &(store->pv), 0, 0, ' ', pv, status );
- }
- if( amdx[0] != AST__BAD ) {
- pv = amdx[0]/3600.0;
- SetItem( &(store->pv), 0, 1, ' ', pv, status );
- }
- if( amdx[1] != AST__BAD ) {
- pv = amdx[1]/3600.0;
- SetItem( &(store->pv), 0, 2, ' ', pv, status );
- }
- if( amdx[3] != AST__BAD && amdx[6] != AST__BAD ) {
- pv = ( amdx[3] + amdx[6] )/3600.0;
- SetItem( &(store->pv), 0, 4, ' ', pv, status );
- }
- if( amdx[4] != AST__BAD ) {
- pv = amdx[4]/3600.0;
- SetItem( &(store->pv), 0, 5, ' ', pv, status );
- }
- if( amdx[5] != AST__BAD && amdx[6] != AST__BAD ) {
- pv = ( amdx[5] + amdx[6] )/3600.0;
- SetItem( &(store->pv), 0, 6, ' ', pv, status );
- }
- if( amdx[7] != AST__BAD && amdx[11] != AST__BAD ) {
- pv = ( amdx[7] + amdx[11] )/3600.0;
- SetItem( &(store->pv), 0, 7, ' ', pv, status );
- }
- if( amdx[8] != AST__BAD ) {
- pv = amdx[8]/3600.0;
- SetItem( &(store->pv), 0, 8, ' ', pv, status );
- }
- if( amdx[9] != AST__BAD && amdx[11] != AST__BAD ) {
- pv = ( amdx[9] + amdx[11] )/3600.0;
- SetItem( &(store->pv), 0, 9, ' ', pv, status );
- }
- if( amdx[10] != AST__BAD ) {
- pv = amdx[10]/3600.0;
- SetItem( &(store->pv), 0, 10, ' ', pv, status );
- }
- if( amdx[12] != AST__BAD ) {
- pv = amdx[12]/3600.0;
- SetItem( &(store->pv), 0, 17, ' ', pv, status );
- SetItem( &(store->pv), 0, 19, ' ', 2*pv, status );
- SetItem( &(store->pv), 0, 21, ' ', pv, status );
- }
-
- if( amdy[2] != AST__BAD ) {
- pv = amdy[2]/3600.0;
- SetItem( &(store->pv), 1, 0, ' ', pv, status );
- }
- if( amdy[0] != AST__BAD ) {
- pv = amdy[0]/3600.0;
- SetItem( &(store->pv), 1, 1, ' ', pv, status );
- }
- if( amdy[1] != AST__BAD ) {
- pv = amdy[1]/3600.0;
- SetItem( &(store->pv), 1, 2, ' ', pv, status );
- }
- if( amdy[3] != AST__BAD && amdy[6] != AST__BAD ) {
- pv = ( amdy[3] + amdy[6] )/3600.0;
- SetItem( &(store->pv), 1, 4, ' ', pv, status );
- }
- if( amdy[4] != AST__BAD ) {
- pv = amdy[4]/3600.0;
- SetItem( &(store->pv), 1, 5, ' ', pv, status );
- }
- if( amdy[5] != AST__BAD && amdy[6] != AST__BAD ) {
- pv = ( amdy[5] + amdy[6] )/3600.0;
- SetItem( &(store->pv), 1, 6, ' ', pv, status );
- }
- if( amdy[7] != AST__BAD && amdy[11] != AST__BAD ) {
- pv = ( amdy[7] + amdy[11] )/3600.0;
- SetItem( &(store->pv), 1, 7, ' ', pv, status );
- }
- if( amdy[8] != AST__BAD ) {
- pv = amdy[8]/3600.0;
- SetItem( &(store->pv), 1, 8, ' ', pv, status );
- }
- if( amdy[9] != AST__BAD && amdy[11] != AST__BAD ) {
- pv = ( amdy[9] + amdy[11] )/3600.0;
- SetItem( &(store->pv), 1, 9, ' ', pv, status );
- }
- if( amdy[10] != AST__BAD ) {
- pv = amdy[10]/3600.0;
- SetItem( &(store->pv), 1, 10, ' ', pv, status );
- }
- if( amdy[12] != AST__BAD ) {
- pv = amdy[12]/3600.0;
- SetItem( &(store->pv), 1, 17, ' ', pv, status );
- SetItem( &(store->pv), 1, 19, ' ', 2*pv, status );
- SetItem( &(store->pv), 1, 21, ' ', pv, status );
- }
-
-/* Calculate and store the equivalent CRPIX values. */
- if( xpixelsz != 0.0 ) {
- SetItem( &(store->crpix), 0, 0, ' ',
- ( ppo3/xpixelsz ) - cnpix1 + 0.5, status );
- } else if( astOK ){
- astError( AST__BDFTS, "%s(%s): FITS keyword XPIXELSZ has illegal "
- "value 0.0", status, method, class );
- }
-
- if( ypixelsz != 0.0 ) {
- SetItem( &(store->crpix), 0, 1, ' ',
- ( ppo6/ypixelsz ) - cnpix2 + 0.5, status );
- } else if( astOK ){
- astError( AST__BDFTS, "%s(%s): FITS keyword YPIXELSZ has illegal "
- "value 0.0", status, method, class );
- }
-
-/* Calculate and store the equivalent CRVAL values. */
- SetItem( &(store->crval), 0, 0, ' ',
- 15.0*( pltrah + pltram/60.0 + pltras/3600.0 ), status );
- crval2 = pltdecd + pltdecm/60.0 + pltdecs/3600.0;
- if( !strcmp( pltdecsn, "-") ) crval2 = -crval2;
- SetItem( &(store->crval), 1, 0, ' ', crval2, status );
-
-/* Calculate and store the equivalent PC matrix. */
- SetItem( &(store->pc), 0, 0, ' ', -0.001*xpixelsz, status );
- SetItem( &(store->pc), 1, 1, ' ', 0.001*ypixelsz, status );
-
-/* Set values of 1.0 for the CDELT values. */
- SetItem( &(store->cdelt), 0, 0, ' ', 1.0, status );
- SetItem( &(store->cdelt), 1, 0, ' ', 1.0, status );
-
-/* Store remaining constant items */
- SetItem( &(store->lonpole), 0, 0, ' ', 180.0, status );
- SetItem( &(store->equinox), 0, 0, ' ', 2000.0, status );
- SetItemC( &(store->radesys), 0, ' ', "FK5", status );
- SetItem( &(store->wcsaxes), 0, 0, ' ', 2.0, status );
- store->naxis = 2;
- SetItemC( &(store->ctype), 0, ' ', "RA---TPN", status );
- SetItemC( &(store->ctype), 1, ' ', "DEC--TPN", status );
- }
-}
-
-static void Empty( AstFitsChan *this, int *status ){
-/*
-*+
-* Name:
-* astEmpty
-
-* Purpose:
-* Remove all cards and related data from a FitsChan.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void astEmpty( AstFitsChan *this )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function removes all cards and associated information from the
-* supplied FitsChan.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-
-* Notes:
-* - This function attempts to execute even if an error has occurred.
-
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- const char *class; /* Pointer to string holding object class */
- const char *method; /* Pointer to string holding calling method */
- int old_ignore_used; /* Original setting of ignore_used variable */
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Store the method and class strings. */
- method = "astEmpty";
- class = astGetClass( this );
-
-/* Delete all cards from the circular linked list stored in the FitsChan,
- starting with the card at the head of the list. */
- old_ignore_used = ignore_used;
- ignore_used = 0;
- astClearCard( this );
- while( !astFitsEof( this ) ) DeleteCard( this, method, class, status );
- ignore_used = old_ignore_used;
-
-/* Delete the KeyMap which holds keywords and the latest sequence number
- used by each of them. */
- if( this->keyseq ) this->keyseq = astAnnul( this->keyseq );
-
-/* Delete the KeyMap holding the keyword names. */
- if( this->keywords ) this->keywords = astAnnul( this->keywords );
-
-}
-
-static int EncodeFloat( char *buf, int digits, int width, int maxwidth,
- double value, int *status ){
-/*
-*
-* Name:
-* EncodeFloat
-
-* Purpose:
-* Formats a floating point value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int EncodeFloat( char *buf, int digits, int width, int maxwidth,
-* double value, int *status )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-* This function formats the value using a G format specified in order
-* to use the minimum field width (trailing zeros are not printed).
-* However, the G specifier does not include a decimal point unless it
-* is necessary. FITS requires that floating point values always include
-* a decimal point, so this function inserts one, if necessary.
-
-* Parameters:
-* buf
-* A character string into which the value is written.
-* digits
-* The number of digits after the decimal point. If the supplied value
-* is negative, the number of digits actually used may be reduced if
-* the string would otherwise extend beyond the number of columns
-* allowed by the FITS standard. If the value is positive, the
-* specified number of digits are always produced, even if it means
-* breaking the FITS standard.
-* width
-* The minimum field width to use. The value is right justified in
-* this field width.
-* maxwidth
-* The maximum field width to use. A value of zero is returned if
-* the maximum field width is exceeded.
-* value
-* The value to format.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The field width actually used, or zero if the value could not be
-* formatted. This does not include the trailing null character.
-
-* Notes:
-* - If there is room, a trailing zero is also added following the
-* inserted decimal point.
-
-*/
-
-/* Local Variables: */
- char *c;
- char *w, *r;
- int i;
- int ldigits;
- int n;
- int ret;
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* The supplied value of "digits" may be negative. Obtain the positive
- value giving the initial number of decimal digits to use. */
- ldigits = ( digits > 0 ) ? digits : -digits;
-
-/* Loop until a suitably encoded value has been obtained. */
- while( 1 ){
-
-/* Write the value into the buffer. Most are formatted with a G specifier.
- This will result in values between -0.001 and -0.0001 being formatted
- without an exponent, and thus occupying (ldigits+6) characters. With
- an exponent, these values would be formatted in (ldigits+5) characters
- thus saving one character. This is important because the default value
- of ldigits is 15, resulting in 21 characters being used by the G
- specifier. This is one more than the maximum allowed by the FITS
- standard. Using an exponent instead would result in 20 characters
- being used without any loss of precision, thus staying within the FITS
- limit. Note, the precision used with the E specifier is one less than
- with the G specifier because the digit to the left of the decimal place
- is significant with the E specifier, and so we only need (ldigits-1)
- significant digits to the right of the decimal point. */
- if( value > -0.001 && value < -0.0001 ) {
- (void) sprintf( buf, "%*.*E", width, ldigits - 1, value );
- } else {
- (void) sprintf( buf, "%*.*G", width, ldigits, value );
- }
-
-/* Check that the value zero is not encoded with a minus sign (e.g. "-0.").
- This also rounds out long sequences of zeros or nines. */
- CheckZero( buf, value, width, status );
-
-/* If the formatted value includes an exponent, it will have 2 digits.
- If the exponent includes a leading zero, remove it. */
- if( ( w = strstr( buf, "E-0" ) ) ) {
- w += 2;
- } else if( ( w = strstr( buf, "E+0" ) ) ){
- w += 2;
- } else if( ( w = strstr( buf, "E0" ) ) ){
- w += 1;
- }
-
-/* If a leading zero was found, shuffle everything down from the start of
- the string by one character, over-writing the redundant zero, and insert
- a space at the start of the string. */
- if( w ) {
- r = w - 1 ;
- while( w != buf ) *(w--) = *(r--);
- *w = ' ';
- }
-
-/* If the used field width was too large, reduce it and try again, so
- long as we are allowed to change the number of digits being used. */
- ret = strlen( buf );
- if( ret > width && digits < 0 ){
- ldigits -= ( ret - width );
-
-/* Otherwise leave the loop. Return zero field width if the maximum field
- width was exceeded. */
- } else {
- if( ret > maxwidth ) ret = 0;
- break;
- }
-
- }
-
-/* If a formatted value was obtained, we need to ensure that the it includes
- a decimal point. */
- if( ret ){
-
-/* Get a pointer to the first digit in the buffer. */
- c = strpbrk( buf, "0123456789" );
-
-/* Something funny is going on if there are no digits in the buffer,
- so return a zero field width. */
- if( !c ){
- ret = 0;
-
-/* Otherwise... */
- } else {
-
-/* Find the number of digits following and including the first digit. */
- n = strspn( c, "0123456789" );
-
-/* If the first non-digit character is a decimal point, do nothing. */
- if( c[ n ] != '.' ){
-
-/* If there are two or more leading spaces, move the start of the string
- two character to the left, and insert ".0" in the gap created. This
- keeps the field right justified within the desired field width. */
- if( buf[ 0 ] == ' ' && buf[ 1 ] == ' ' ){
- for( i = 2; i < c - buf + n; i++ ) buf[ i - 2 ] = buf[ i ];
- c[ n - 2 ] = '.';
- c[ n - 1 ] = '0';
-
-/* If there is just one leading space, move the start of the string
- one character to the left, and insert "." in the gap created. This
- keeps the field right justified within the desired field width. */
- } else if( buf[ 0 ] == ' ' ){
- for( i = 0; i < n; i++ ) c[ i - 1 ] = c[ i ];
- c[ n - 1 ] = '.';
-
-/* If there are no leading spaces we need to move the end of the string
- to the right. This will result in the string no longer being right
- justified in the required field width. Return zero if there is
- insufficient room for an extra character. */
- } else {
- ret++;
- if( ret > maxwidth ){
- ret = 0;
-
-/* Otherwise, more the end of the string one place to the right and insert
- the decimal point. */
- } else {
- for( i = strlen( c ); i >= n; i-- ) c[ i + 1 ] = c[ i ];
- c[ n ] = '.';
- }
- }
- }
- }
- }
-
-/* Return the field width. */
- return ret;
-
-}
-
-static int EncodeValue( AstFitsChan *this, char *buf, int col, int digits,
- const char *method, int *status ){
-/*
-* Name:
-* EncodeValue
-
-* Purpose:
-* Encode the current card's keyword value into a string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int EncodeValue( AstFitsChan *this, char *buf, int col, int digits,
-* const char *method, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function encodes the keyword value defined in the current card
-* of the supplied FitsChan and stores it at the start of the supplied
-* buffer. The number of characters placed in the buffer is returned
-* (not including a terminating null).
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* buf
-* The buffer to receive the formatted value. This should be at least
-* 70 characters long.
-* col
-* The column number within the FITS header card corresponding to the
-* start of "buf".
-* digits
-* The number of digits to use when formatting floating point
-* values. If the supplied value is negative, the number of digits
-* actually used may be reduced if the string would otherwise extend
-* beyond the number of columns allowed by the FITS standard. If the
-* value is positive, the specified number of digits are always
-* produced, even if it means breaking the FITS standard.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The number of columns used by the encoded value.
-
-* Notes:
-* - The function returns 0 if an error has already occurred
-* or if an error occurs for any reason within this function.
-*/
-
-/* Local Variables: */
- char *c; /* Pointer to next character */
- char *name; /* Pointer to the keyword name */
- double dval; /* Keyword value */
- void *data; /* Pointer to keyword value */
- int i; /* Loop count */
- int ilen; /* Length of imaginary part */
- int len; /* Returned length */
- int quote; /* Quote character found? */
- int rlen; /* Length of real part */
- int type; /* Data type for keyword in current card */
-
-/* Check the global status. */
- if( !astOK ) return 0;
-
-/* Initialise returned length. */
- len = 0;
-
-/* Get the data type of the keyword. */
- type = CardType( this, status );
-
-/* Get a pointer to the data value in the current card. */
- data = CardData( this, NULL, status );
-
-/* Return if there is no defined value associated with the keyword in the
- current card. */
- if( type != AST__UNDEF ) {
-
-/* Get the name of the keyword. */
- name = CardName( this, status );
-
-/* Go through each supported data type (roughly in the order of
- decreasing usage)... */
-
-/* AST__FLOAT - stored internally in a variable of type "double". Right
- justified to column 30 in the header card. */
- if( type == AST__FLOAT ){
- dval = *( (double *) data );
-
- len = EncodeFloat( buf, digits, FITSRLCOL - FITSNAMLEN - 2,
- AST__FITSCHAN_FITSCARDLEN - col + 1, dval, status );
-
- if( len <= 0 && astOK ) {
- astError( AST__BDFTS, "%s(%s): Cannot encode floating point value "
- "%g into a FITS header card for keyword '%s'.", status, method,
- astGetClass( this ), dval, name );
- }
-
-/* AST__STRING & AST__CONTINUE - stored internally in a null terminated array of
- type "char". The encoded string is enclosed in single quotes, starting
- at FITS column 11 and ending in at least column 20. Single quotes
- in the string are replaced by two adjacent single quotes. */
- } else if( type == AST__STRING || type == AST__CONTINUE ){
- c = (char *) data;
-
-/* Enter the opening quote. */
- len = 0;
- buf[ len++ ] = '\'';
-
-/* Inspect each character, looking for quotes. */
- for ( i = 0; c[ i ]; ) {
- quote = ( c[ i ] == '\'' );
-
-/* If it will not fit into the header card (allowing for doubled
- quotes), give up here. */
- if ( len + ( quote ? 2 : 1 ) > AST__FITSCHAN_FITSCARDLEN - col ) break;
-
-/* Otherwise, copy it into the output buffer and double any quotes. */
- buf[ len++ ] = c[ i ];
- if ( quote ) buf[ len++ ] = '\'';
-
-/* Look at the next character. */
- i++;
- }
-
-/* Pad the string out to the required minimum length with blanks and
- add the final quote. */
- while( len < FITSSTCOL - col ) buf[ len++ ] = ' ';
- buf[ len++ ] = '\'';
-
-/* Inspect any characters that weren't used. If any are non-blank,
- report an error. */
- for ( ; c[ i ]; i++ ) {
- if ( !isspace( c[ i ] ) ) {
- astError( AST__BDFTS,
- "%s(%s): Cannot encode string '%s' into a FITS "
- "header card for keyword '%s'.", status, method, astGetClass( this ),
- (char *) data, name );
- break;
- }
- }
-
-/* INTEGER - stored internally in a variable of type "int". Right justified
- to column 30 in the header card. */
- } else if( type == AST__INT ){
- len = sprintf( buf, "%*d", FITSRLCOL - col + 1,
- *( (int *) data ) );
- if( len < 0 || len > AST__FITSCHAN_FITSCARDLEN - col ) {
- astError( AST__BDFTS, "%s(%s): Cannot encode integer value %d into a "
- "FITS header card for keyword '%s'.", status, method, astGetClass( this ),
- *( (int *) data ), name );
- }
-
-/* LOGICAL - stored internally in a variable of type "int". Represented by
- a "T" or "F" in column 30 of the FITS header card. */
- } else if( type == AST__LOGICAL ){
- for( i = 0; i < FITSRLCOL - col; i++ ) buf[ i ] = ' ';
- if( *( (int *) data ) ){
- buf[ FITSRLCOL - col ] = 'T';
- } else {
- buf[ FITSRLCOL - col ] = 'F';
- }
- len = FITSRLCOL - col + 1;
-
-/* AST__COMPLEXF - stored internally in an array of two "doubles". The real
- part is right justified to FITS column 30. The imaginary part is right
- justified to FITS column 50. */
- } else if( type == AST__COMPLEXF ){
- dval = ( (double *) data )[ 0 ];
-
- rlen = EncodeFloat( buf, digits, FITSRLCOL - FITSNAMLEN - 2,
- AST__FITSCHAN_FITSCARDLEN - col + 1, dval, status );
- if( rlen <= 0 || rlen > AST__FITSCHAN_FITSCARDLEN - col ) {
- astError( AST__BDFTS, "%s(%s): Cannot encode real part of a complex "
- "floating point value [%g,%g] into a FITS header card "
- "for keyword '%s'.", status, method, astGetClass( this ), dval,
- ( (double *) data )[ 1 ], name );
- } else {
-
- dval = ( (double *) data )[ 1 ];
- ilen = EncodeFloat( buf + rlen, digits,
- FITSIMCOL - FITSRLCOL,
- AST__FITSCHAN_FITSCARDLEN - col - rlen, dval, status );
-
- if( ilen <= 0 ) {
- astError( AST__BDFTS, "%s(%s): Cannot encode imaginary part of a "
- "complex floating point value [%g,%g] into a FITS header "
- "card for keyword '%s'.", status, method, astGetClass( this ),
- ( (double *) data )[ 0 ], dval, name );
- } else {
- len = ilen + rlen;
- }
-
- }
-
-/* AST__COMPLEXI - stored internally in a an array of two "ints". */
- } else if( type == AST__COMPLEXI ){
- rlen = sprintf( buf, "%*d", FITSRLCOL - col + 1,
- ( (int *) data )[ 0 ] );
- if( rlen < 0 || rlen > AST__FITSCHAN_FITSCARDLEN - col ) {
- astError( AST__BDFTS, "%s(%s): Cannot encode real part of a complex "
- "integer value [%d,%d] into a FITS header card "
- "for keyword '%s'.", status, method, astGetClass( this ),
- ( (int *) data )[ 0 ],
- ( (int *) data )[ 1 ], name );
- } else {
-
- ilen = sprintf( buf + rlen, "%*d", FITSIMCOL - FITSRLCOL + 1,
- ( (int *) data )[ 1 ] );
- if( ilen < 0 || ilen > AST__FITSCHAN_FITSCARDLEN - col - rlen ) {
- astError( AST__BDFTS, "%s(%s): Cannot encode imaginary part of a "
- "complex integer value [%d,%d] into a FITS header card "
- "for keyword '%s'.", status, method, astGetClass( this ),
- ( (int *) data )[ 0 ],
- ( (int *) data )[ 1 ], name );
- } else {
- len = ilen + rlen;
-
- }
-
- }
-
-/* Report an internal (ast) programming error if the keyword is of none of the
- above types. */
- } else if( astOK ){
- astError( AST__INTER, "EncodeValue: AST internal programming error - "
- "FITS %s data-type not yet supported.", status,
- type_names[ type ] );
- }
-
- }
-
-/* If an error has occurred, return zero length. */
- if( !astOK ) len = 0;
-
-/* Return the answer. */
- return len;
-}
-
-static AstGrismMap *ExtractGrismMap( AstMapping *map, int iax,
- AstMapping **new_map, int *status ){
-/*
-* Name:
-* ExtractGrismMap
-
-* Purpose:
-* Extract a GrismMap from the end of the supplied Mapping.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* AstGrismMap *ExtractGrismMap( AstMapping *map, int iax,
-* AstMapping **new_map, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function examines the supplied Mapping; if the specified output
-* coordinate of the Mapping is created directly by an un-inverted GrismMap,
-* then a pointer to the GrismMap is returned as the function value. A new
-* Mapping is also returned via parameter "new_map" which is a copy of
-* the supplied Mapping, except that the GrismMap is replaced with a
-* UnitMap. If no GrismMap is found, NULL is returned for both Mappings.
-
-* The condition that "the specified output coordinate of the Mapping is
-* created directly by an un-inverted GrismMap" means that the output
-* of the GrismMap is no subsequently modified by any further Mappings
-* before being returned as the "iax"th output of the supplied Mapping.
-* This means the GrismMap must be "at the end of" a CmpMap, not in
-* the middle of the CmpMap.
-
-* Parameters:
-* map
-* Pointer to the Mapping to check.
-* iax
-* The index for the output coordinate to be checked.
-* new_map
-* Pointer to a location at which to return a pointer to a new
-* Mapping which is a copy of "map" except that the GrismMap is
-* replaced by a UnitMap. NULL is returned if the specified output
-* was not created by a GrismMap.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The extracted GrismMap, or NULL if the specified output was not
-* created by a GrismMap.
-
-*/
-
-/* Local Variables: */
- AstMapping *mapa; /* First component Mapping */
- AstMapping *mapb; /* Second component Mapping */
- AstMapping *new_mapa; /* Replacement for first component Mapping */
- AstMapping *new_mapb; /* Replacement for second component Mapping */
- AstGrismMap *ret; /* Returned GrismMap */
- int inva; /* Invert attribute for mapa within the CmpMap */
- int invb; /* Invert attribute for mapb within the CmpMap */
- int na; /* Number of outputs for mapa */
- int old_inva; /* Current Invert attribute for mapa */
- int old_invb; /* Current Invert attribute for mapb */
- int series; /* Are component Mappings applied in series? */
-
-/* Initialise */
- ret = NULL;
- *new_map = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* If the supplied Mapping is a GrismMap which has not been inverted,
- return it as the function value and return a UnitMap as the new
- Mapping. */
- if( astIsAGrismMap( map ) ) {
- if( !astGetInvert( map ) ) {
- ret = astClone( map );
- *new_map = (AstMapping *) astUnitMap( 1, "", status );
- }
-
-/* If the supplied Mapping is a CmpMap, get its two component Mappings,
- see if they are applied in parallel or series, and get the Invert
- attribute values which the component Mappings had at the time the
- CmpMap was created. */
- } else if( astIsACmpMap( map ) ) {
- astDecompose( map, &mapa, &mapb, &series, &inva, &invb );
-
-/* Temporaily reset the Invert attributes of the component Mappings back to
- the values they had when the CmpMap was created. */
- old_inva = astGetInvert( mapa );
- old_invb = astGetInvert( mapb );
- astSetInvert( mapa, inva );
- astSetInvert( mapb, invb );
-
-/* If the supplied Mapping is a series CmpMap, attempt to extract a
- GrismMap from the second component Mapping ("mapb"). The first
- component Mapping ("mapa") is unchanged. We do not need to consdier
- the first component since we are only interested in GrismMaps which are
- at the end of the CmpMap. */
- if( series ) {
- ret = ExtractGrismMap( mapb, iax, &new_mapb, status );
- if( ret ) new_mapa = astClone( mapa );
-
-/* If the supplied Mapping is a parallel CmpMap, attempt to extract a
- GrismMap from the component Mapping which produces output "iax". The
- other component Mapping is unchanged. */
- } else {
- na = astGetNout( mapa );
- if( iax < na ) {
- ret = ExtractGrismMap( mapa, iax, &new_mapa, status );
- if( ret ) new_mapb = astClone( mapb );
- } else {
- ret = ExtractGrismMap( mapb, iax - na, &new_mapb, status );
- if( ret ) new_mapa = astClone( mapa );
- }
- }
-
-/* If succesful, create a new CmpMap to return. */
- if( ret ) {
- *new_map = (AstMapping *) astCmpMap( new_mapa, new_mapb, series, "", status );
- new_mapa = astAnnul( new_mapa );
- new_mapb = astAnnul( new_mapb );
- }
-
-/* Re-instate the original Invert attributes of the component Mappings. */
- astSetInvert( mapa, old_inva );
- astSetInvert( mapb, old_invb );
-
-/* Annul the component Mapping pointers. */
- mapa = astAnnul( mapa );
- mapb = astAnnul( mapb );
-
- }
-
-/* Return the result. */
- return ret;
-
-}
-
-static int MakeBasisVectors( AstMapping *map, int nin, int nout,
- double *g0, AstPointSet *psetg,
- AstPointSet *psetw, int *status ){
-/*
-* Name:
-* MakeBasisVectors
-
-* Purpose:
-* Create a set of basis vectors in grid coordinates
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int MakeBasisVectors( AstMapping *map, int nin, int nout,
-* double *g0, AstPointSet *psetg,
-* AstPointSet *psetw, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function returns a set of unit vectors in grid coordinates,
-* one for each grid axis. Each unit vector is parallel to the
-* corresponding grid axis, and rooted at a specified grid position
-* ("g0"). The IWC coordinates corresponding to "g0" and to the end of
-* each of the unit vectors are also returned, together with a flag
-* indicating if all the IWC coordinate values are good.
-
-* Parameters:
-* map
-* A pointer to a Mapping which transforms grid coordinates into
-* intermediate world coordinates (IWC). The number of outputs must
-* be greater than or equal to the number of inputs.
-* nin
-* The number of inputs for "map" (i.e. the number of grid axes).
-* nout
-* The number of outputs for "map" (i.e. the number of IWC axes).
-* g0
-* Pointer to an array of holding the grid coordinates at the
-* "root" position.
-* psetg
-* A pointer to a PointSet which can be used to hold the required
-* grid positions. This should have room for nin+1 positions. On
-* return, the first position holds "g0", and the subsequent "nin"
-* positions hold are offset from "g0" by unit vectors along the
-* corresponding grid axis.
-* psetw
-* A pointer to a PointSet which can be used to hold the required
-* IWC position. This should also have room for nin+1 positions. On
-* return, the values are the IWC coordinates corresponding to the
-* grid positions returned in "psetg".
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A value of 1 is returned if all the axis values in "psetw" are good.
-* Zero is returned otherwise.
-
-* Notes:
-* - Zero is returned if an error occurs.
-*/
-
-/* Local Variables: */
- double **ptrg;
- double **ptrw;
- double *c;
- int i;
- int ii;
- int j;
- int ret;
-
-/* Initialise */
- ret = 0;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* Get pointers to the data in the two supplied PointSets. */
- ptrg = astGetPoints( psetg );
- ptrw = astGetPoints( psetw );
-
-/* Check the pointers can be used safely. */
- if( astOK ) {
-
-/* Assume success. */
- ret = 1;
-
-/* Store the required grid positions in PointSet "pset1". The first
- position is the supplied root grid position, g0. The next "nin"
- positions are offset from the root position by a unit vector along
- each grid axis in turn. Store values for each grid axis in turn. */
- for( i = 0; i < nin; i++ ) {
-
-/* Get a pointer to the first axis value for this grid axis. */
- c = ptrg[ i ];
-
-/* Initially set all values for this axis to the supplied root grid value. */
- for( ii = 0; ii < nin + 1; ii++ ) c[ ii ] = g0[ i ];
-
-/* Modify the value corresponding to the vector along this grid axis. */
- c[ i + 1 ] += 1.0;
- }
-
-/* Transform these grid positions in IWC positions using the supplied
- Mapping. */
- (void) astTransform( map, psetg, 1, psetw );
-
-/* Check that all the transformed positions are good. */
- for( j = 0; j < nout; j++ ) {
- c = ptrw[ j ];
- for( ii = 0; ii < nin + 1; ii++, c++ ) {
- if( *c == AST__BAD ) {
- ret = 0;
- break;
- }
- }
- }
- }
-
-/* Return the result. */
- return ret;
-}
-
-static int FindBasisVectors( AstMapping *map, int nin, int nout,
- double *dim, AstPointSet *psetg,
- AstPointSet *psetw, int *status ){
-/*
-* Name:
-* FindBasisVectors
-
-* Purpose:
-* Find the a set of basis vectors in grid coordinates
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int FindBasisVectors( AstMapping *map, int nin, int nout,
-* double *dim, AstPointSet *psetg,
-* AstPointSet *psetw, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function returns a set of unit vectors in grid coordinates,
-* one for each grid axis. Each unit vector is parallel to the
-* corresponding grid axis, and rooted at a specified grid position
-* ("g0"). The IWC coordinates corresponding to "g0" and to the end of
-* each of the unit vectors are also returned, together with a flag
-* indicating if all the IWC coordinate values are good.
-
-* Parameters:
-* map
-* A pointer to a Mapping which transforms grid coordinates into
-* intermediate world coordinates (IWC). The number of outputs must
-* be greater than or equal to the number of inputs.
-* nin
-* The number of inputs for "map" (i.e. the number of grid axes).
-* nout
-* The number of outputs for "map" (i.e. the number of IWC axes).
-* dim
-* Array dimensions, in pixels, if known (otherwise supplied a NULL
-* pointer to values of AST__BAD).
-* psetg
-* A pointer to a PointSet which can be used to hold the required
-* grid position. This should have room for nin+1 positions. On
-* return, the first position holds the "root" position and the
-* subsequent "nin" positions hold are offset from root position
-* by unit vectors along the corresponding grid axis.
-* psetw
-* A pointer to a PointSet which can be used to hold the required
-* IWC position. This should also have room for nin+1 positions. On
-* return, the values are the IWC coordinates corresponding to the
-* grid positions returned in "psetg".
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A value of 1 is returned if a set of basis vectors was found
-* succesfully. Zero is returned otherwise.
-
-* Notes:
-* - Zero is returned if an error occurs.
-*/
-
-/* Local Variables: */
- double *g0;
- double dd;
- double ddlim;
- int i;
- int ii;
- int ret;
-
-/* Initialise */
- ret = 0;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* Allocate an array to store the candidate root position. */
- g0 = astMalloc( sizeof( double )*(size_t) nin );
- if( astOK ) {
-
-/* First try the grid centre, if known. */
- ddlim = 0;
- ret = 0;
- if( dim ) {
- ret = 1;
- for( i = 0; i < nin; i++ ) {
- if( dim[ i ] != AST__BAD ) {
- g0[ i ] = 0.5*dim[ i ];
- if( dim[ i ] > ddlim ) ddlim = dim[ i ];
- } else {
- ret = 0;
- break;
- }
- }
- }
-
- if( ret ) ret = MakeBasisVectors( map, nin, nout, g0, psetg, psetw, status );
-
-/* If this did not produce a set of good IWC positions, try grid position
- (1,1,1...). */
- if( !ret ) {
- for( i = 0; i < nin; i++ ) g0[ i ] = 1.0;
- ret = MakeBasisVectors( map, nin, nout, g0, psetg, psetw, status );
- }
-
-/* If this did not produce a set of good IWC positions, try a sequence of
- grid positions which move an increasing distance along each grid axis
- from (1,1,1,...). Stop when we get further than "ddlim" from the
- origin. */
- dd = 10.0;
- if( ddlim == 0.0 ) ddlim = 10240.0;
- while( !ret && dd <= ddlim ) {
-
-/* First try positions which extend across the middle of the data set.
- If the image dimensions are known, make the line go from the "bottom
- left corner" towards the "top right corner", taking the aspect ratio
- of the image into account. Otherise, just use a vector of (1,1,1,..) */
- for( i = 0; i < nin; i++ ) {
- if( dim && dim[ i ] != AST__BAD ) {
- g0[ i ] = dd*dim[ i ]/ddlim;
- } else {
- g0[ i ] = dd;
- }
- }
-
- ret = MakeBasisVectors( map, nin, nout, g0, psetg, psetw, status );
-
-/* If the above didn't produce good positions, try moving out along each
- grid axis in turn. */
- for( ii = 0; !ret && ii < nin; ii++ ) {
- for( i = 0; i < nin; i++ ) g0[ i ] = 1.0;
- g0[ ii ] = dd;
- ret = MakeBasisVectors( map, nin, nout, g0, psetg, psetw, status );
- }
-
-/* Go further out from the origin for the next set of tests (if any). */
- dd *= 2.0;
- }
-
- }
-
-/* Free resources. */
- g0 = astFree( g0 );
-
-/* Return the result. */
- return ret;
-}
-
-static int FindLonLatSpecAxes( FitsStore *store, char s, int *axlon, int *axlat,
- int *axspec, const char *method, const char *class, int *status ) {
-/*
-* Name:
-* FindLonLatSpecAxes
-
-* Purpose:
-* Search the CTYPE values in a FitsStore for celestial and spectral axes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* int FindLonLatSpecAxes( FitsStore *store, char s, int *axlon, int *axlat,
-* int *axspec, const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* The supplied FitsStore is searched for axes with a specified axis
-* description character which describe celestial longitude or latitude
-* or spectral position.
-
-* Parameters:
-* store
-* A structure containing values for FITS keywords relating to
-* the World Coordinate System.
-* s
-* A character identifying the co-ordinate version to use. A space
-* means use primary axis descriptions. Otherwise, it must be an
-* upper-case alphabetical characters ('A' to 'Z').
-* axlon
-* Address of a location at which to return the index of the
-* longitude axis (if found). This is the value of "i" within the
-* keyword name "CTYPEi". A value of -1 is returned if no longitude
-* axis is found.
-* axlat
-* Address of a location at which to return the index of the
-* latitude axis (if found). This is the value of "i" within the
-* keyword name "CTYPEi". A value of -1 is returned if no latitude
-* axis is found.
-* axspec
-* Address of a location at which to return the index of the
-* spectral axis (if found). This is the value of "i" within the
-* keyword name "CTYPEi". A value of -1 is returned if no spectral
-* axis is found.
-* method
-* A pointer to a string holding the name of the calling method.
-* This is used only in the construction of error messages.
-* class
-* A pointer to a string holding the class of the object being
-* read. This is used only in the construction of error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One is returned if both celestial axes were found. Zero is returned if
-* either axis was not found. The presence of a spectral axis does not
-* affect the returned value.
-
-* Notes:
-* - If an error occurs, zero is returned.
-
-*/
-
-/* Local Variables: */
- char *assys;
- char *astype;
- char algcode[5];
- char stype[5];
- const char *ctype;
- double dval;
- int i;
- int wcsaxes;
-
-/* Initialise */
- *axlon = -1;
- *axlat = -1;
- *axspec = -1;
-
-/* Check the global status. */
- if ( !astOK ) return 0;
-
-/* Obtain the number of FITS WCS axes in the header. If the WCSAXES header
- was specified, use it. Otherwise assume it is the same as the number
- of pixel axes. */
- dval = GetItem( &(store->wcsaxes), 0, 0, s, NULL, method, class, status );
- if( dval != AST__BAD ) {
- wcsaxes = (int) dval + 0.5;
- } else {
- wcsaxes = store->naxis;
- }
-
-/* Loop round the FITS WCS axes, getting each CTYPE value. */
- for( i = 0; i < wcsaxes && astOK; i++ ){
- ctype = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
-
-/* Check a value was found. */
- if( ctype ) {
-
-/* First check for spectral axes, either FITS-WCS or AIPS-like. */
- if( IsSpectral( ctype, stype, algcode, status ) ||
- IsAIPSSpectral( ctype, &astype, &assys, status ) ) {
- *axspec = i;
-
-/* Otherwise look for celestial axes. Celestial axes must have a "-" as the
- fifth character in CTYPE. */
- } else if( ctype[4] == '-' ) {
-
-/* See if this is a longitude axis (e.g. if the first 4 characters of CTYPE
- are "RA--" or "xLON" or "yzLN" ). */
- if( !strncmp( ctype, "RA--", 4 ) ||
- !strncmp( ctype, "AZ--", 4 ) ||
- !strncmp( ctype + 1, "LON", 3 ) ||
- !strncmp( ctype + 2, "LN", 2 ) ){
- *axlon = i;
-
-/* Otherwise see if it is a latitude axis. */
- } else if( !strncmp( ctype, "DEC-", 4 ) ||
- !strncmp( ctype, "EL--", 4 ) ||
- !strncmp( ctype + 1, "LAT", 3 ) ||
- !strncmp( ctype + 2, "LT", 2 ) ){
- *axlat = i;
- }
- }
- }
- }
-
-/* Indicate failure if an error occurred. */
- if( !astOK ) {
- *axlon = -1;
- *axlat = -1;
- *axspec = -1;
- }
-
-/* Return the result. */
- return ( *axlat != -1 && *axlon != -1 );
-
-}
-
-static void FindWcs( AstFitsChan *this, int last, int all, int rewind,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* FindWcs
-
-* Purpose:
-* Find the first or last FITS WCS related keyword in a FitsChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void FindWcs( AstFitsChan *this, int last, int all, int rewind,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* A search is made through the FitsChan for the first or last card
-* which relates to a FITS WCS keyword (any encoding). If "last" is
-* non-zero, the next card becomes the current card. If "last" is
-* zero, the WCS card is left as the current card. Cards marked as
-* having been read are included or not, as specified by "all".
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* last
-* If non-zero, the last WCS card is searched for. Otherwise, the
-* first WCS card is searched for.
-* all
-* If non-zero, then cards marked as having been read are included
-* in the search. Otherwise such cards are ignored.
-* rewind
-* Only used if "last" is zero (i.e. the first card is being
-* searched for). If "rewind" is non-zero, then the search starts
-* from the first card in the FitsChan. If zero, the search starts
-* from the current card.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The FitsChan is left at end-of-file if no FITS-WCS keyword cards
-* are found in the FitsChan.
-
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- const char *keyname; /* Keyword name from current card */
- int nfld; /* Number of fields in keyword template */
- int old_ignore_used; /* Original value of variable ignore_used */
-
-/* Check the global status. Also check the FitsChan is not empty. */
- if( !astOK || !this->head ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Indicate that we should, or should not, skip over cards marked as having
- been read. */
- old_ignore_used = ignore_used;
- ignore_used = all ? 0 : 1;
-
-/* If required, set the FitsChan to start or end of file. */
- if( last ) {
- astSetCard( this, INT_MAX );
- } else if( rewind ) {
- astClearCard( this );
- }
-
-/* If the current card is marked as used, and we are skipping used cards,
- move on to the next unused card */
- if( CARDUSED( this->card ) ) MoveCard( this, last?-1:1, method, class, status );
-
-/* Check each card moving backwards from the end to the start, or
- forwards from the start to the end, until a WCS keyword is found,
- or the other end of the FitsChan is reached. */
- while( astOK ){
-
-/* Get the keyword name from the current card. */
- keyname = CardName( this, status );
-
-/* Save a pointer to the keyword if it is the first non-null, non-comment
- card. */
- if( keyname ) {
-
-/* If it matches any of the WCS keywords, move on one card
- and break out of the loop. */
- if( Match( keyname, "CRVAL%d%0c", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "CRPIX%d%0c", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "CDELT%d%0c", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "CROTA%d", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "CTYPE%d%0c", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "CUNIT%d%0c", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "PC%3d%3d%0c", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "CD%3d%3d%0c", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "CD%1d_%1d%0c", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "PC%1d_%1d%0c", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "LONGPOLE", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "LONPOLE%0c", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "LATPOLE%0c", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "PROJP%d", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "PV%d_%d%0c", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "PS%d_%d%0c", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "EPOCH", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "EQUINOX%0c", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "MJD-OBS", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "DATE-OBS", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "RADECSYS", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "RADESYS%0c", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "C%1dVAL%d", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "C%1dPIX%d", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "C%1dELT%d", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "C%1dYPE%d", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "C%1dNIT%d", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "CNPIX1", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "CNPIX2", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "PPO%d", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "AMDX%d", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "AMDY%d", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "XPIXELSZ", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "YPIXELSZ", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "PLTRAH", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "PLTRAM", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "PLTRAS", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "PLTDECD", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "PLTDECM", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "PLTDECS", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "PLTDECSN", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "PLTSCALE", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "PPO1", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "PPO2", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "PPO4", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "PPO5", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "WCSNAME%0c", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "SPECSYS%0c", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "SSYSSRC%0c", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "ZSOURCE%0c", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "VELOSYS%0c", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "RESTFRQ%0c", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "MJD_AVG%0c", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "OBSGEO-X", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "OBSGEO-Y", 0, NULL, &nfld, method, class, status ) ||
- Match( keyname, "OBSGEO-Z", 0, NULL, &nfld, method, class, status ) ) {
-
- if( last ) MoveCard( this, 1, method, class, status );
- break;
- }
- }
-
-/* Leave the FitsChan at end-of-file if no WCS cards were found. */
- if( (last && FitsSof( this, status ) ) ||
- (!last && astFitsEof( this ) ) ) {
- astSetCard( this, INT_MAX );
- break;
- } else {
- MoveCard( this, last?-1:1, method, class, status );
- }
-
- }
-
-/* Re-instate the original flag indicating if cards marked as having been
- read should be skipped over. */
- ignore_used = old_ignore_used;
-
-/* Return. */
- return;
-}
-
-static int FindString( int n, const char *list[], const char *test,
- const char *text, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* FindString
-
-* Purpose:
-* Find a given string within an array of character strings.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int FindString( int n, const char *list[], const char *test,
-* const char *text, const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-* This function identifies a supplied string within a supplied
-* array of valid strings, and returns the index of the string within
-* the array. The test option may not be abbreviated, but case is
-* insignificant.
-
-* Parameters:
-* n
-* The number of strings in the array pointed to be "list".
-* list
-* A pointer to an array of legal character strings.
-* test
-* A candidate string.
-* text
-* A string giving a description of the object, parameter,
-* attribute, etc, to which the test value refers.
-* This is only for use in constructing error messages. It should
-* start with a lower case letter.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The index of the identified string within the supplied array, starting
-* at zero.
-
-* Notes:
-* - A value of -1 is returned if an error has already occurred, or
-* if this function should fail for any reason (for instance if the
-* supplied option is not specified in the supplied list).
-
-*/
-
-/* Local Variables: */
- int ret; /* The returned index */
-
-/* Check global status. */
- if( !astOK ) return -1;
-
-/* Compare the test string with each element of the supplied list. Leave
- the loop when a match is found. */
- for( ret = 0; ret < n; ret++ ) {
- if( !Ustrcmp( test, list[ ret ], status ) ) break;
- }
-
-/* Report an error if the supplied test string does not match any element
- in the supplied list. */
- if( ret >= n && astOK ) {
- astError( AST__RDERR, "%s(%s): Illegal value '%s' supplied for %s.", status,
- method, class, test, text );
- ret = -1;
- }
-
-/* Return the answer. */
- return ret;
-}
-
-static int FitOK( int n, double *act, double *est, double tol, int *status ) {
-/*
-* Name:
-* FitOK
-
-* Purpose:
-* See if a fit is usable.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int FitOK( int n, double *act, double *est, double tol, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function is supplied with a set of actual data values, and the
-* corresponding values estimated by some fitting process. It tests
-* that the RMS residual between them is no more than "tol".
-
-* Parameters:
-* n
-* Number of data points.
-* act
-* Pointer to the start of the actual data values.
-* est
-* Pointer to the start of the estimated data values.
-* tol
-* The largest acceptable RMS error between "act" and "est".
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A value of 1 is returned if the two sets of values agree. Zero is
-* returned otherwise.
-
-* Notes:
-* - Zero is returned if an error occurs.
-*/
-
-/* Local Variables: */
- int ret, i;
- double s1, s2;
- double *px, *py, diff, mserr;
-
-/* Initialise */
- ret = 0;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* Initialise the sum of the squared residuals, and the number summed. */
- s1 = 0.0;
- s2 = 0.0;
-
-/* Initialise pointers to the next actual and estimated values to use. */
- px = act;
- py = est;
-
-/* Loop round all pairs of good actual and estimate value. */
- for( i = 0; i < n; i++, px++, py++ ){
- if( *px != AST__BAD && *py != AST__BAD ) {
-
-/* Increment the sums need to find the RMS residual between the actual
- and estimated values. */
- diff = *px - *py;
- s1 += diff*diff;
- s2 += 1.0;
- }
- }
-
-/* If the sums are usable... */
- if( s2 > 0.0 ) {
-
-/* Form the mean squared residual, and check if it is less than the
- squared error limit. */
- mserr = s1/s2;
- if( mserr < tol*tol ) ret = 1;
- }
-
-/* Return the result. */
- return ret;
-}
-
-static int FitsFromStore( AstFitsChan *this, FitsStore *store, int encoding,
- double *dim, AstFrameSet *fs, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* FitsFromStore
-
-* Purpose:
-* Store WCS keywords in a FitsChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* int FitsFromStore( AstFitsChan *this, FitsStore *store, int encoding,
-* double *dim, AstFrameSet *fs, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* A FitsStore is a structure containing a generalised represention of
-* a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-* from a set of FITS header cards (using a specified encoding), or
-* an AST FrameSet. In other words, a FitsStore is an encoding-
-* independant intermediary staging post between a FITS header and
-* an AST FrameSet.
-*
-* This function copies the WCS information stored in the supplied
-* FitsStore into the supplied FitsChan, using a specified encoding.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* store
-* Pointer to the FitsStore.
-* encoding
-* The encoding to use.
-* dim
-* Pointer to an array holding the array dimensions (AST__BAD
-* indicates that the dimenson is not known).
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A value of 1 is returned if succesfull, and zero is returned
-* otherwise.
-
-*/
-
-/* Local Variables: */
- int ret;
-
-/* Initialise */
- ret = 0;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* Set the current card so that it points to the last WCS-related keyword
- in the FitsChan (whether previously read or not). Any new WCS related
- keywords either over-write pre-existing cards for the same keyword, or
- (if no pre-existing card exists) are inserted after the last WCS related
- keyword. */
- FindWcs( this, 1, 1, 0, method, class, status );
-
-/* Do each non-standard FITS encoding... */
- if( encoding == DSS_ENCODING ){
- ret = DSSFromStore( this, store, method, class, status );
-
- } else if( encoding == FITSPC_ENCODING ){
- ret = PCFromStore( this, store, method, class, status );
-
- } else if( encoding == FITSIRAF_ENCODING ){
- ret = IRAFFromStore( this, store, method, class, status );
-
- } else if( encoding == FITSAIPS_ENCODING ){
- ret = AIPSFromStore( this, store, method, class, status );
-
- } else if( encoding == FITSAIPSPP_ENCODING ){
- ret = AIPSPPFromStore( this, store, method, class, status );
-
- } else if( encoding == FITSCLASS_ENCODING ){
- ret = CLASSFromStore( this, store, fs, dim, method, class, status );
-
-/* Standard FITS-WCS encoding */
- } else {
- ret = WcsFromStore( this, store, method, class, status );
-
- }
-
-/* If an error has occurred, return zero. */
- if( !astOK ) ret = 0;
-
-/* Return the answer. */
- return ret;
-
-}
-
-static FitsStore *FitsToStore( AstFitsChan *this, int encoding,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* FitsToStore
-
-* Purpose:
-* Return a pointer to a FitsStore structure containing WCS information
-* read from the supplied FitsChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* FitsStore *FitsToStore( AstFitsChan *this, int encoding,
-* const char *method, const char *class )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* A FitsStore is a structure containing a generalised represention of
-* a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-* from a set of FITS header cards (using a specified encoding), or
-* an AST FrameSet. In other words, a FitsStore is an encoding-
-* independant intermediary staging post between a FITS header and
-* an AST FrameSet.
-*
-* This function creates a new FitsStore containing WCS information
-* read from the supplied FitsChan using the specified encoding. An
-* error is reported and a null pointer returned if the FitsChan does
-* not contain usable WCS information with the specified encoding.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* encoding
-* The encoding to use.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-
-* Returned Value:
-* A pointer to a new FitsStore, or NULL if an error has occurred. The
-* FitsStore should be released using FreeStore function when it is no
-* longer needed.
-
-*/
-
-/* Local Variables: */
- AstFitsChan *trans;
- FitsStore *ret;
-
-/* Initialise */
- ret = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* Allocate memory for the new FitsStore, and store NULL pointers in it. */
- ret = (FitsStore *) astMalloc( sizeof(FitsStore) );
- if( ret ) {
- ret->cname = NULL;
- ret->ctype = NULL;
- ret->ctype_com = NULL;
- ret->cunit = NULL;
- ret->radesys = NULL;
- ret->wcsname = NULL;
- ret->wcsaxes = NULL;
- ret->pc = NULL;
- ret->cdelt = NULL;
- ret->crpix = NULL;
- ret->crval = NULL;
- ret->equinox = NULL;
- ret->latpole = NULL;
- ret->lonpole = NULL;
- ret->mjdobs = NULL;
- ret->mjdavg = NULL;
- ret->dut1 = NULL;
- ret->pv = NULL;
- ret->specsys = NULL;
- ret->ssyssrc = NULL;
- ret->obsgeox = NULL;
- ret->obsgeoy = NULL;
- ret->obsgeoz = NULL;
- ret->restfrq = NULL;
- ret->restwav = NULL;
- ret->zsource = NULL;
- ret->velosys = NULL;
- ret->asip = NULL;
- ret->bsip = NULL;
- ret->apsip = NULL;
- ret->bpsip = NULL;
- ret->imagfreq = NULL;
- ret->naxis = 0;
- ret->timesys = AST__UTC;
- }
-
-/* Call the routine apropriate to the encoding. */
- if( encoding == DSS_ENCODING ){
- DSSToStore( this, ret, method, class, status );
-
-/* All other foreign encodings are treated as variants of FITS-WCS. */
- } else {
-
-/* Create a new FitsChan containing standard translations for any
- non-standard keywords in the supplied FitsChan. The non-standard
- keywords are marked as provisionally read in the supplied FitsChan. */
- trans = SpecTrans( this, encoding, method, class, status );
-
-/* Copy the required values to the FitsStore, using keywords in "trans"
- in preference to those in "this". */
- WcsToStore( this, trans, ret, method, class, status );
-
-/* Delete the temporary FitsChan holding translations of non-standard
- keywords. */
- if( trans ) trans = (AstFitsChan *) astDelete( trans );
-
-/* Store the number of pixel axes. This is taken as the highest index used
- in any primary CRPIX keyword. */
- ret->naxis = GetMaxJM( &(ret->crpix), ' ', status ) + 1;
- }
-
-/* If an error has occurred, free the returned FitsStore, and return a null
- pointer. */
- if( !astOK ) ret = FreeStore( ret, status );
-
-/* Return the answer. */
- return ret;
-
-}
-
-static void FreeItem( double ****item, int *status ){
-/*
-* Name:
-* FreeItem
-
-* Purpose:
-* Frees all dynamically allocated memory associated with a specified
-* item in a FitsStore.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void FreeItem( double ****item, int *status );
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* Frees all dynamically allocated memory associated with the specified
-* item in a FitsStore. A NULL pointer is stored in the FitsStore.
-
-* Parameters:
-* item
-* The address of the pointer within the FitsStore which locates the
-* arrays of values for the required keyword (eg &(store->crval) ).
-* The array located by the supplied pointer contains a vector of
-* pointers. Each of these pointers is associated with a particular
-* co-ordinate version (s), and locates an array of pointers for that
-* co-ordinate version. Each such array of pointers has an element
-* for each intermediate axis number (j), and the pointer locates an
-* array of axis keyword values. These arrays of keyword values have
-* one element for every pixel axis (i) or projection parameter (m).
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function attempt to execute even if an error has occurred.
-
-*/
-
-/* Local Variables: */
- int si; /* Integer co-ordinate version index */
- int j; /* Intermediate co-ordinate axis index */
-
-/* Check the supplied pointer */
- if( item && *item ){
-
-/* Loop round each coordinate version. */
- for( si = 0; si < astSizeOf( (void *) *item )/sizeof(double **);
- si++ ){
-
-/* Check the pointer stored for this co-ordinate version is not null. */
- if( (*item)[si] ) {
-
-/* Loop round the intermediate axes. */
- for( j = 0; j < astSizeOf( (void *) (*item)[si] )/sizeof(double *);
- j++ ){
-
-/* Free the pixel axis/parameter index pointer. */
- (*item)[si][j] = (double *) astFree( (void *) (*item)[si][j] );
- }
-
-/* Free the intermediate axes pointer */
- (*item)[si] = (double **) astFree( (void *) (*item)[si] );
- }
- }
-
-/* Free the co-ordinate versions pointer */
- *item = (double ***) astFree( (void *) *item );
-
- }
-
-}
-
-static void FreeItemC( char ****item, int *status ){
-/*
-* Name:
-* FreeItemC
-
-* Purpose:
-* Frees all dynamically allocated memory associated with a specified
-* string item in a FitsStore.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void FreeItemC( char ****item, int *status );
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* Frees all dynamically allocated memory associated with the specified
-* string item in a FitsStore. A NULL pointer is stored in the FitsStore.
-
-* Parameters:
-* item
-* The address of the pointer within the FitsStore which locates the
-* arrays of values for the required keyword (eg &(store->crval) ).
-* The array located by the supplied pointer contains a vector of
-* pointers. Each of these pointers is associated with a particular
-* co-ordinate version (s), and locates an array of pointers for that
-* co-ordinate version. Each such array of pointers has an element
-* for each intermediate axis number (j), and the pointer locates a
-* character string.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function attempt to execute even if an error has occurred.
-
-*/
-
-/* Local Variables: */
- int si; /* Integer co-ordinate version index */
- int j; /* Intermediate co-ordinate axis index */
-
-/* Check the supplied pointer */
- if( item && *item ){
-
-/* Loop round each coordinate version. */
- for( si = 0; si < astSizeOf( (void *) *item )/sizeof(char **);
- si++ ){
-
-/* Check the pointer stored for this co-ordinate version is not null. */
- if( (*item)[si] ) {
-
-/* Loop round the intermediate axes. */
- for( j = 0; j < astSizeOf( (void *) (*item)[si] )/sizeof(char *);
- j++ ){
-
-/* Free the character string pointer. */
- (*item)[si][j] = (char *) astFree( (void *) (*item)[si][j] );
- }
-
-/* Free the intermediate axes pointer */
- (*item)[si] = (char **) astFree( (void *) (*item)[si] );
- }
- }
-
-/* Free the co-ordinate versions pointer */
- *item = (char ***) astFree( (void *) *item );
-
- }
-
-}
-
-static FitsStore *FreeStore( FitsStore *store, int *status ){
-/*
-* Name:
-* FreeStore
-
-* Purpose:
-* Free dynamic arrays stored in a FitsStore structure.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* FitsStore *FreeStore( FitsStore *store, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* This function frees all dynamically allocated arrays stored in the
-* supplied FitsStore structure, and returns a NULL pointer.
-
-* Parameters:
-* store
-* Pointer to the structure to clean.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function attempts to execute even if an error exists on entry.
-
-*/
-
-/* Return if no FitsStore was supplied. */
- if( !store ) return NULL;
-
-/* Free each of the dynamic arrays stored in the FitsStore. */
- FreeItemC( &(store->cname), status );
- FreeItemC( &(store->ctype), status );
- FreeItemC( &(store->ctype_com), status );
- FreeItemC( &(store->cunit), status );
- FreeItemC( &(store->radesys), status );
- FreeItemC( &(store->wcsname), status );
- FreeItemC( &(store->specsys), status );
- FreeItemC( &(store->ssyssrc), status );
-
- FreeItem( &(store->pc), status );
- FreeItem( &(store->cdelt), status );
- FreeItem( &(store->crpix), status );
- FreeItem( &(store->crval), status );
- FreeItem( &(store->equinox), status );
- FreeItem( &(store->latpole), status );
- FreeItem( &(store->lonpole), status );
- FreeItem( &(store->mjdobs), status );
- FreeItem( &(store->dut1), status );
- FreeItem( &(store->mjdavg), status );
- FreeItem( &(store->pv), status );
- FreeItem( &(store->wcsaxes), status );
- FreeItem( &(store->obsgeox), status );
- FreeItem( &(store->obsgeoy), status );
- FreeItem( &(store->obsgeoz), status );
- FreeItem( &(store->restfrq), status );
- FreeItem( &(store->restwav), status );
- FreeItem( &(store->zsource), status );
- FreeItem( &(store->velosys), status );
- FreeItem( &(store->asip), status );
- FreeItem( &(store->bsip), status );
- FreeItem( &(store->apsip), status );
- FreeItem( &(store->bpsip), status );
- FreeItem( &(store->imagfreq), status );
-
- return (FitsStore *) astFree( (void *) store );
-}
-
-static char *FormatKey( const char *key, int c1, int c2, char s, int *status ){
-/*
-* Name:
-* FormatKey
-
-* Purpose:
-* Format a keyword name with indices and co-ordinate version character.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* char *FormatKey( const char *key, int c1, int c2, char s, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* This function formats a keyword name by including the supplied
-* axis/parameter indices and co-ordinate version character.
-
-* Parameters:
-* key
-* The base name of the keyword (e.g. "CD", "CRVAL", etc).
-* c1
-* An integer value to append to the end of the keyword. Ignored if
-* less than zero.
-* c2
-* A second integer value to append to the end of the keyword. Ignored if
-* less than zero. This second integer is preceeded by an underscore.
-* s
-* The co-ordinate version character to append to the end of the
-* final string. Ignored if blank.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value;
-* A pointer to a static character buffer containing the final string.
-* NULL if an error occurs.
-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS
- char *ret;
- int len;
- int nc;
-
-/* Initialise */
- ret = NULL;
-
-/* Check inherited status */
- if( !astOK ) return ret;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(NULL);
-
-/* No characters stored yet. A value of -1 is used to indicate that an
- error has occurred. */
- len = 0;
-
-/* Store the supplied keyword base name. */
- if( len >= 0 && ( nc = sprintf( formatkey_buff + len, "%s", key ) ) >= 0 ){
- len += nc;
- } else {
- len = -1;
- }
-
-/* If index c1 has been supplied, append it to the end of the string. */
- if( c1 >= 0 ) {
- if( len >= 0 && ( nc = sprintf( formatkey_buff + len, "%d", c1 ) ) >= 0 ){
- len += nc;
- } else {
- len = -1;
- }
-
-/* If index c2 has been supplied, append it to the end of the string,
- preceeded by an underscore. */
- if( c2 >= 0 ) {
- if( len >= 0 && ( nc = sprintf( formatkey_buff + len, "_%d", c2 ) ) >= 0 ){
- len += nc;
- } else {
- len = -1;
- }
- }
- }
-
-/* If a co-ordinate version character has been supplied, append it to the end
- of the string. */
- if( s != ' ' ) {
- if( len >= 0 && ( nc = sprintf( formatkey_buff + len, "%c", s ) ) >= 0 ){
- len += nc;
- } else {
- len = -1;
- }
- }
-
-/* Report an error if necessary */
- if( len < 0 && astOK ) {
- astError( AST__INTER, "FormatKey(fitschan): AST internal error; failed "
- "to format the keyword %s with indices %d and %d, and "
- "co-ordinate version %c.", status, key, c1, c2, s );
- ret = NULL;
-
- } else {
- ret = formatkey_buff;
- }
-
- return formatkey_buff;
-}
-
-static AstObject *FsetFromStore( AstFitsChan *this, FitsStore *store,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* FsetFromStore
-
-* Purpose:
-* Create a FrameSet using the the information previously stored in
-* the suppllied FitsStore structure.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* AstObject *FsetFromStore( AstFitsChan *this, FitsStore *store,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* A FitsStore is a structure containing a generalised represention of
-* a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-* from a set of FITS header cards (using a specified encoding), or
-* an AST FrameSet. In other words, a FitsStore is an encoding-
-* independant intermediary staging post between a FITS header and
-* an AST FrameSet.
-*
-* This function creates a new FrameSet containing WCS information
-* stored in the supplied FitsStore. A null pointer is returned and no
-* error is reported if this is not possible.
-
-* Parameters:
-* this
-* The FitsChan from which the keywords were read. Warning messages
-* are added to this FitsChan if the celestial co-ordinate system is
-* not recognized.
-* store
-* Pointer to the FitsStore.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new FrameSet, or a null pointer if no FrameSet
-* could be constructed.
-
-* Notes:
-* - The pixel Frame is given a title of "Pixel Coordinates", and
-* each axis in the pixel Frame is given a label of the form "Pixel
-* axis <n>", where <n> is the axis index (starting at one).
-* - The FITS CTYPE keyword values are used to set the labels for any
-* non-celestial axes in the physical coordinate Frames, and the FITS
-* CUNIT keywords are used to set the corresponding units strings.
-* - On exit, the pixel Frame is the base Frame, and the physical
-* Frame derived from the primary axis descriptions is the current Frame.
-* - Extra Frames are added to hold any secondary axis descriptions. All
-* axes within such a Frame refer to the same coordinate version ('A',
-* 'B', etc).
-
-*/
-
-/* Local Variables: */
- AstFrame *frame; /* Pointer to pixel Frame */
- AstFrameSet *ret; /* Pointer to returned FrameSet */
- char buff[ 20 ]; /* Buffer for axis label */
- char s; /* Co-ordinate version character */
- int i; /* Pixel axis index */
- int physical; /* Index of primary physical co-ordinate Frame */
- int pixel; /* Index of pixel Frame in returned FrameSet */
- int use; /* Has this co-ordinate version been used? */
-
-/* Initialise */
- ret = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return (AstObject *) ret;
-
-/* Only proceed if there are some axes. */
- if( store->naxis ) {
-
-/* Create a Frame describing the pixel coordinate system. Give it the Domain
- GRID. */
- frame = astFrame( store->naxis, "Title=Pixel Coordinates,Domain=GRID", status );
-
-/* Store labels for each pixel axis. */
- if( astOK ){
- for( i = 0; i < store->naxis; i++ ){
- sprintf( buff, "Pixel axis %d", i + 1 );
- astSetLabel( frame, i, buff );
- }
- }
-
-/* Create the FrameSet initially holding just the pixel coordinate frame
- (this becomes the base Frame). */
- ret = astFrameSet( frame, "", status );
-
-/* Annul the pointer to the pixel coordinate Frame. */
- frame = astAnnul( frame );
-
-/* Get the index of the pixel Frame in the FrameSet. */
- pixel = astGetCurrent( ret );
-
-/* Produce the Frame describing the primary axis descriptions, and add it
- into the FrameSet. */
- AddFrame( this, ret, pixel, store->naxis, store, ' ', method, class, status );
-
-/* Get the index of the primary physical co-ordinate Frame in the FrameSet. */
- physical = astGetCurrent( ret );
-
-/* Loop, producing secondary axis Frames for each of the co-ordinate
- versions stored in the FitsStore. */
- for( s = 'A'; s <= GetMaxS( &(store->crval), status ) && astOK; s++ ){
-
-/* Only use this co-ordinate version character if any of the required
- keywords (for any axis) are stored in the FitsStore. */
- use = 0;
- for( i = 0; i < store->naxis; i++ ){
- if( GetItem( &(store->crval), i, 0, s, NULL, method, class, status ) != AST__BAD ||
- GetItem( &(store->crpix), 0, i, s, NULL, method, class, status ) != AST__BAD ||
- GetItemC( &(store->ctype), i, s, NULL, method, class, status ) != NULL ){
- use = 1;
- break;
- }
- }
-
-/* If this co-ordinate version has been used, add a Frame to the returned
- FrameSet holding this co-ordinate version. */
- if( use ) AddFrame( this, ret, pixel, store->naxis, store, s, method, class, status );
-
- }
-
-/* Ensure the pixel Frame is the Base Frame and the primary physical
- Frame is the Current Frame. */
- astSetBase( ret, pixel );
- astSetCurrent( ret, physical );
- }
-
-/* If an error has occurred, free the returned FrameSet and return a null
- pointer. */
- if( !astOK ) ret = astAnnul( ret );
-
-/* Return the answer. */
- return (AstObject *) ret;
-
-}
-
-static FitsStore *FsetToStore( AstFitsChan *this, AstFrameSet *fset, int naxis,
- double *dim, const char *class,
- const char *method, int *status ){
-/*
-* Name:
-* FsetToStore
-
-* Purpose:
-* Fill a FitsStore structure with a description of the supplied
-* FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* FitsStore *FsetToStore( AstFitsChan *this, AstFrameSet *fset, int naxis,
-* double *dim, const char *class,
-* const char *method, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* A FitsStore is a structure containing a generalised represention of
-* a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-* from a set of FITS header cards (using a specified encoding), or
-* an AST FrameSet. In other words, a FitsStore is an encoding-
-* independant intermediary staging post between a FITS header and
-* an AST FrameSet.
-*
-* This function creates a new FitsStore containing WCS information
-* read from the supplied FitsChan using the specified encoding. An
-* error is reported and a null pointer returned if the FitsChan does
-* not contain usable WCS information with the specified encoding.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* fset
-* Pointer to the FrameSet.
-* naxis
-* The number of axes in the Base Frame of the supplied FrameSet.
-* dim
-* Pointer to an array of pixel axis dimensions. Individual elements
-* will be AST__BAD if dimensions are not known.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a new FitsStore, or NULL if an error has occurred. The
-* FitsStore should be released using FreeStore function when it is no
-* longer needed.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the AST error status set, or if it should fail for any
-* reason.
-* - The Base Frame in the FrameSet is used as the pixel Frame, and
-* the Current Frame is used to create the primary axis descriptions.
-* Attempts are made to create secondary axis descriptions for any
-* other Frames in the FrameSet (up to a total of 26).
-*/
-
-/* Local Variables: */
- AstFrame *frame; /* A Frame */
- const char *id; /* Frame Ident string */
- int nfrm; /* Number of Frames in FrameSet */
- char *sid; /* Pointer to array of version letters */
- int frms[ 'Z' + 1 ]; /* Array of Frame indices */
- FitsStore *ret; /* Returned FitsStore */
- char s; /* Co-ordinate version character */
- int ibase; /* Base Frame index */
- int icurr; /* Current Frame index */
- int ifrm; /* Next Frame index */
- int primok; /* Primary Frame stored succesfully? */
- int secok; /* Secondary Frame stored succesfully? */
-
-/* Initialise */
- ret = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* Allocate memory for the new FitsStore, and store NULL pointers in it. */
- ret = (FitsStore *) astMalloc( sizeof(FitsStore) );
- if( astOK ) {
- ret->cname = NULL;
- ret->ctype = NULL;
- ret->ctype_com = NULL;
- ret->cunit = NULL;
- ret->radesys = NULL;
- ret->wcsname = NULL;
- ret->wcsaxes = NULL;
- ret->pc = NULL;
- ret->cdelt = NULL;
- ret->crpix = NULL;
- ret->crval = NULL;
- ret->equinox = NULL;
- ret->latpole = NULL;
- ret->lonpole = NULL;
- ret->dut1 = NULL;
- ret->mjdobs = NULL;
- ret->mjdavg = NULL;
- ret->pv = NULL;
- ret->specsys = NULL;
- ret->ssyssrc = NULL;
- ret->obsgeox = NULL;
- ret->obsgeoy = NULL;
- ret->obsgeoz = NULL;
- ret->restfrq = NULL;
- ret->restwav = NULL;
- ret->zsource = NULL;
- ret->velosys = NULL;
- ret->asip = NULL;
- ret->bsip = NULL;
- ret->apsip = NULL;
- ret->bpsip = NULL;
- ret->imagfreq = NULL;
- ret->naxis = naxis;
- ret->timesys = AST__UTC;
-
-/* Obtain the index of the Base Frame (i.e. the pixel frame ). */
- ibase = astGetBase( fset );
-
-/* Obtain the index of the Current Frame (i.e. the Frame to use as the
- primary physical coordinate frame). */
- icurr = astGetCurrent( fset );
-
-/* Add a description of the primary axes to the FitsStore, based on the
- Current Frame in the FrameSet. */
- primok = AddVersion( this, fset, ibase, icurr, ret, dim, ' ', method,
- class, status );
-
-/* Do not add any alternate axis descriptions if the primary axis
- descriptions could not be produced. */
- if( primok && astOK ) {
-
-/* Get the number of Frames in the FrameSet. */
- nfrm = astGetNframe( fset );
-
-/* We now need to allocate a version letter to each Frame. Allocate
- memory to hold the version letter assigned to each Frame. */
- sid = (char *) astMalloc( ( nfrm + 1 )*sizeof( char ) );
-
-/* The frms array has an entry for each of the 26 possible version
- letters (starting at A and ending at Z). Each entry holds the index of
- the Frame which has been assigned that version character. Initialise
- this array to indicate that no version letters have yet been assigned. */
- for( s = 'A'; s <= 'Z'; s++ ) {
- frms[ (int) s ] = 0;
- }
-
-/* Loop round all frames (excluding the current and base and IWC Frames which
- do not need version letters). If the Frame has an Ident attribute consisting
- of a single upper case letter, use it as its version letter unless that
- letter has already been given to an earlier frame. IWC Frames are not
- written out - identify them by giving thema a "sid" value of 1 (an
- illegal FITS axis description character). */
- for( ifrm = 1; ifrm <= nfrm; ifrm++ ){
- sid[ ifrm ] = 0;
- if( ifrm != icurr && ifrm != ibase ) {
- frame = astGetFrame( fset, ifrm );
- if( astChrMatchN( astGetDomain( frame ), "IWC", 3 ) ) {
- sid[ ifrm ] = 1;
- } else {
- id = astGetIdent( frame );
- if( strlen( id ) == 1 && isupper( id[ 0 ] ) ) {
- if( frms[ (int) id[ 0 ] ] == 0 ) {
- frms[ (int) id[ 0 ] ] = ifrm;
- sid[ ifrm ] = id[ 0 ];
- }
- }
- }
- (void) astAnnul( frame );
- }
- }
-
-/* Now go round all the Frames again, looking for Frames which did not
- get a version letter assigned to it on the previous loop. Assign them
- letters now, selected them from the letters not already assigned
- (lowest to highest). */
- s = 'A' - 1;
- for( ifrm = 1; ifrm <= nfrm; ifrm++ ){
- if( ifrm != icurr && ifrm != ibase && sid[ ifrm ] != 1 ) {
- if( sid[ ifrm ] == 0 ){
- while( frms[ (int) ++s ] != 0 );
- if( s <= 'Z' ) {
- sid[ ifrm ] = s;
- frms[ (int) s ] = ifrm;
- }
- }
- }
- }
-
-/* Now go through all the other Frames in the FrameSet, attempting to
- create alternate axis descriptions for each one. */
- for( ifrm = 1; ifrm <= nfrm; ifrm++ ){
- s = sid[ ifrm ];
- if( s != 0 && s != 1 ) {
- secok = AddVersion( this, fset, ibase, ifrm, ret, dim,
- s, method, class, status );
- }
- }
-
-/* Free memory holding version letters */
- sid = (char *) astFree( (void *) sid );
-
- }
-
-/* If an error has occurred, or if the primary Frame could not be cerated,
- free the returned FitsStore, and return a null pointer. */
- if( !astOK || !primok ) ret = FreeStore( ret, status );
- }
-
-/* Return the answer. */
- return ret;
-
-}
-
-static void Geod( double pos[3], double *phi, double *h, double *lambda, int *status ){
-/*
-* Name:
-* Geod
-
-* Purpose:
-* Convert a terrestrial Cartesian (x,y,z) position to geodetic lat/long
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void Geod( double pos[3], double *phi, double *h, double *lambda, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function converts a position supplied as terrestrial Cartesian
-* (x,y,z) values into geodetic longitude, latitude and height above the
-* reference spheroid. The (x,y,z) system has origin at the centre of
-* the earth, Z axis going through the north pole, X axis at
-* (long,lat)=(0,0), and Y axis at (long,lat) = (E90,0).
-*
-* The algorithm is due to Borkowski, and is described in the
-* Explanatory Supplement to the Astronomical Almanac (p206).
-
-* Parameters:
-* pos
-* Array holding the (x,y,z) values, in metres.
-* phi
-* Pointer at a location at which to return the geodetic latitude,
-* in radians.
-* h
-* Pointer at a location at which to return the height above the
-* reference spheroid (geodetic, metres).
-* lambda
-* Pointer at a location at which to return the geodetic longitude,
-* in radians, positive east.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables... */
- double r, e, f, p, q, d, n, g, t, rp, rd, sn, b0, boa, ab2oa;
-
-/* Initialise */
- *phi = 0.0;
- *h = 0.0;
- *lambda = 0.0;
-
-/* Check the global status. */
- if( !astOK ) return;
-
-/* Earth polar radius (metres) */
- b0 = A0*( 1.0 - FL );
-
-/* Useful functions */
- boa = b0/A0;
- ab2oa = ( A0*A0 - b0*b0)/A0;
-
-/* To obtain the proper sign and polynomial solution, the sign of b is
- set to that of z. Note the sign of z. */
- if( pos[ 2 ] > 0.0 ) {
- sn = 1.0;
- } else {
- sn = -1.0;
- }
-
-/* If the supplied position is on the polar axis, the returned values are
- trivial. We check this case because it corresponds to a singularity in
- the main algorithm. */
- r = sqrt( pos[ 0 ]*pos[ 0 ] + pos[ 1 ]*pos[ 1 ] );
- if( r == 0 ) {
- *lambda = 0.0;
- *phi = AST__DPIBY2;
- *h = pos[ 2 ] - sn*b0;
-
- } else {
-
-/* The longitude is simple. */
- *lambda = atan2( pos[ 1 ], pos[ 0 ] );
-
-/* The equator is also a singularity in the main algorithm. If the
- supplied point is on the equator, the answers are trivial. */
- if( pos[ 2 ] == 0.0 ) {
- *phi = 0.0;
- *h = r - A0;
-
-/* For all other cases, use the main Borkowski algorithm. */
- } else {
- e = ( sn*boa*pos[ 2 ] - ab2oa )/r;
- f = ( sn*boa*pos[ 2 ] + ab2oa )/r;
- p = 4.0*( e*f + 1.0 )/3.0;
- q = 2.0*( e*e - f*f );
- d = p*p*p + q*q;
-
- if( d < 0.0 ) {
- rp = sqrt( -p );
- n = 2.0*rp*cos( acos( q/(p*rp) )/3.0 );
- } else {
- rd = sqrt( d );
- n = pow( ( rd - q ), 1.0/3.0 ) - pow( (rd + q ), 1.0/3.0 );
- }
-
- g = 0.5* ( sqrt( e*e + n ) + e );
- t = sqrt( g*g + ( f - n*g )/( 2*g - e ) ) - g;
-
- *phi = atan( A0*( 1.0 - t*t )/( 2.0*sn*b0*t ) );
- *h = ( r - A0*t )*cos( *phi ) + ( pos[ 2 ] - sn*b0 )*sin( *phi );
-
- }
- }
-}
-
-static int GetClean( AstFitsChan *this, int *status ) {
-/*
-* Name:
-* GetClean
-
-* Purpose:
-* Return the value of the Clean attribute.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int GetClean( AstFitsChan *this, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function returns the value of the Clean attribute. Since this
-* attribute controls the behaviour of the FitsChan in the event of an
-* error condition, it is is necessary to ignore any inherited error
-* condition when getting the attribute value. This is why the
-* astMAKE_GET macro is not used.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Clean value to use.
-
-*/
-
-/* Return if no FitsChan pointer was supplied. */
- if ( !this ) return 0;
-
-/* Return the attribute value, supplying a default value of 0 (false). */
- return ( this->clean == -1 ) ? 0 : (this->clean ? 1 : 0 );
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* FitsChan member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied FitsChan,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFitsChan *this; /* Pointer to FitsChan structure */
- FitsCard *card; /* Pointer to next FitsCard */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the FitsChan structure. */
- this = (AstFitsChan *) this_object;
-
-/* Ensure the source function has been called */
- ReadFromSource( this, status );
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
-
- result += astTSizeOf( this->warnings );
- result += astGetObjSize( this->keyseq );
- result += astGetObjSize( this->keywords );
-
- card = (FitsCard *) ( this->head );
- while( card ) {
- result += astTSizeOf( card );
- result += card->size;
- result += astTSizeOf( card->comment );
- card = GetLink( card, NEXT, "astGetObjSize", "FitsChan", status );
- if( (void *) card == this->head ) break;
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static int GetCDMatrix( AstFitsChan *this, int *status ){
-/*
-* Name:
-* GetCDMatrix
-
-* Purpose:
-* Get the value of the CDMatrix attribute.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int GetCDMatrix( AstFitsChan *this, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* If the CDMatrix attribute has been set, then its value is returned.
-* Otherwise, the supplied FitsChan is searched for keywords of the
-* form CDi_j. If any are found a non-zero value is returned. Otherwise
-* a zero value is returned.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The attribute value to use.
-
-* Notes:
-* - A value of zero is returned if an error has already occurred
-* or if an error occurs for any reason within this function.
-*/
-
-/* Local Variables... */
- int ret; /* Returned value */
- int icard; /* Index of current card on entry */
-
-/* Check the global status. */
- if( !astOK ) return 0;
-
-/* If a value has been supplied for the CDMatrix attribute, use it. */
- if( astTestCDMatrix( this ) ) {
- ret = this->cdmatrix;
-
-/* Otherwise, check for the existence of CDi_j keywords... */
- } else {
-
-/* Save the current card index, and rewind the FitsChan. */
- icard = astGetCard( this );
- astClearCard( this );
-
-/* If the FitsChan contains any keywords with the format "CDi_j" then return
- 1. Otherwise return zero. */
- ret = astKeyFields( this, "CD%1d_%1d", 0, NULL, NULL ) ? 1 : 0;
-
-/* Reinstate the original current card index. */
- astSetCard( this, icard );
-
- }
-
-/* Return the result. */
- return astOK ? ret : 0;
-}
-
-static int GetEncoding( AstFitsChan *this, int *status ){
-/*
-* Name:
-* GetEncoding
-
-* Purpose:
-* Get the value of the Encoding attribute.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int GetEncoding( AstFitsChan *this, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* If the Encoding attribute has been set, then its value is returned.
-* Otherwise, an attempt is made to determine the encoding scheme by
-* looking for selected keywords within the FitsChan. Checks are made
-* for the following keywords in the order specified, and the
-* corresponding encoding is adopted when the first one is found ( where
-* i, j and m are integers and s is a single upper case character):
-*
-* 1) Any keywords starting with "BEGAST" = Native encoding
-* 2) DELTAV and VELO-xxx keywords = FITS-CLASS.
-* 3) Any AIPS spectral CTYPE values:
-* Any of CDi_j, PROJP, LONPOLE, LATPOLE = FITS-AIPS++ encoding:
-* None of the above = FITS-AIPS encoding.
-* 4) Any keywords matching PCiiijjj = FITS-PC encoding
-* 5) Any keywords matching CDiiijjj = FITS-IRAF encoding
-* 6) Any keywords matching CDi_j, AND at least one of RADECSYS, PROJPi
-* or CmVALi = FITS-IRAF encoding
-* 7) Any keywords RADECSYS, PROJPi or CmVALi, and no CDi_j or PCi_j
-* keywords, = FITS-PC encoding
-* 8) Any keywords matching CROTAi = FITS-AIPS encoding
-* 9) Keywords matching CRVALi = FITS-WCS encoding
-* 10) The PLTRAH keyword = DSS encoding
-* 11) If none of the above keywords are found, Native encoding is assumed.
-*
-* For cases 2) to 9), a check is also made that the header contains
-* at least one of each keyword CTYPE, CRPIX and CRVAL. If not, then
-* the checking process continues to the next case. This goes some way
-* towards ensuring that the critical keywords used to determine the
-* encoding are part of a genuine WCS description and have not just been
-* left in the header by accident.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The encoding scheme identifier.
-
-* Notes:
-* - The function returns UNKNOWN_ENCODING if an error has already occurred
-* or if an error occurs for any reason within this function.
-*/
-
-/* Local Variables... */
- int hascd; /* Any CDi_j keywords found? */
- int haspc; /* Any PCi_j keywords found? */
- int haswcs; /* Any CRVAL, CTYPE and CRPIX found? */
- int icard; /* Index of current card on entry */
- int ret; /* Returned value */
-
-/* Check the global status. */
- if( !astOK ) return UNKNOWN_ENCODING;
-
-/* If a value has been supplied for the Encoding attribute, use it. */
- if( astTestEncoding( this ) ) {
- ret = this->encoding;
-
-/* Otherwise, check for the existence of certain critcal keywords... */
- } else {
-
-/* See if the header contains some CTYPE, CRPIX and CRVAL keywords. */
- haswcs = astKeyFields( this, "CTYPE%d", 0, NULL, NULL ) &&
- astKeyFields( this, "CRPIX%d", 0, NULL, NULL ) &&
- astKeyFields( this, "CRVAL%d", 0, NULL, NULL );
-
-/* See if there are any CDi_j keywords. */
- hascd = astKeyFields( this, "CD%1d_%1d", 0, NULL, NULL );
-
-/* See if there are any PCi_j keywords. */
- haspc = astKeyFields( this, "PC%1d_%1d", 0, NULL, NULL );
-
-/* Save the current card index, and rewind the FitsChan. */
- icard = astGetCard( this );
- astClearCard( this );
-
-/* If the FitsChan contains any keywords starting with "BEGAST", then return
- "Native" encoding. */
- if( astKeyFields( this, "BEGAST%2f", 0, NULL, NULL ) ){
- ret = NATIVE_ENCODING;
-
-/* Otherwise, look for a FITS-CLASS signature... */
- } else if( haswcs && LooksLikeClass( this, "astGetEncoding", "AstFitsChan", status ) ){
- ret = FITSCLASS_ENCODING;
-
-/* Otherwise, if the FitsChan contains any CTYPE keywords which have the
- peculiar form used by AIPS, then use "FITS-AIPS" or "FITS-AIPS++" encoding. */
- } else if( haswcs && HasAIPSSpecAxis( this, "astGetEncoding", "AstFitsChan", status ) ){
- if( hascd ||
- astKeyFields( this, "PROJP%d", 0, NULL, NULL ) ||
- astKeyFields( this, "LONPOLE", 0, NULL, NULL ) ||
- astKeyFields( this, "LATPOLE", 0, NULL, NULL ) ) {
- ret = FITSAIPSPP_ENCODING;
- } else {
- ret = FITSAIPS_ENCODING;
- }
-
-/* Otherwise, if the FitsChan contains any keywords with the format
- "PCiiijjj" then return "FITS-PC" encoding. */
- } else if( haswcs && astKeyFields( this, "PC%3d%3d", 0, NULL, NULL ) ){
- ret = FITSPC_ENCODING;
-
-/* Otherwise, if the FitsChan contains any keywords with the format
- "CDiiijjj" then return "FITS-IRAF" encoding. */
- } else if( haswcs && astKeyFields( this, "CD%3d%3d", 0, NULL, NULL ) ){
- ret = FITSIRAF_ENCODING;
-
-/* Otherwise, if the FitsChan contains any keywords with the format
- "CDi_j" AND there is a RADECSYS. PROJPi or CmVALi keyword, then return
- "FITS-IRAF" encoding. If "CDi_j" is present but none of the others
- are, return "FITS-WCS" encoding. */
- } else if( haswcs && hascd ) {
-
- if( ( astKeyFields( this, "RADECSYS", 0, NULL, NULL ) &&
- !astKeyFields( this, "RADESYS", 0, NULL, NULL ) ) ||
-
- ( astKeyFields( this, "PROJP%d", 0, NULL, NULL ) &&
- !astKeyFields( this, "PV%d_%d", 0, NULL, NULL ) ) ||
-
- ( astKeyFields( this, "C%1dVAL%d", 0, NULL, NULL )) ){
- ret = FITSIRAF_ENCODING;
-
- } else {
- ret = FITSWCS_ENCODING;
- }
-
-/* Otherwise, if the FitsChan contains any keywords with the format
- RADECSYS. PROJPi or CmVALi keyword, then return "FITS-PC" encoding,
- so long as there are no FITS-WCS equivalent keywords. */
- } else if( haswcs && !haspc && !hascd && (
- ( astKeyFields( this, "RADECSYS", 0, NULL, NULL ) &&
- !astKeyFields( this, "RADESYS", 0, NULL, NULL ) ) ||
-
- ( astKeyFields( this, "PROJP%d", 0, NULL, NULL ) &&
- !astKeyFields( this, "PV%d_%d", 0, NULL, NULL ) ) ||
-
- astKeyFields( this, "C%1dVAL%d", 0, NULL, NULL ) ) ) {
- ret = FITSPC_ENCODING;
-
-/* Otherwise, if the FitsChan contains any keywords with the format
- "CROTAi" then return "FITS-AIPS" encoding. */
- } else if( haswcs && astKeyFields( this, "CROTA%d", 0, NULL, NULL ) ){
- ret = FITSAIPS_ENCODING;
-
-/* Otherwise, if the FitsChan contains any keywords with the format
- "CRVALi" then return "FITS-WCS" encoding. */
- } else if( haswcs && astKeyFields( this, "CRVAL%d", 0, NULL, NULL ) ){
- ret = FITSWCS_ENCODING;
-
-/* Otherwise, if the FitsChan contains the "PLTRAH" keywords, use "DSS"
- encoding. */
- } else if( astKeyFields( this, "PLTRAH", 0, NULL, NULL ) ){
- ret = DSS_ENCODING;
-
-/* If none of these conditions is met, assume Native encoding. */
- } else {
- ret = NATIVE_ENCODING;
- }
-
-/* Reinstate the original current card index. */
- astSetCard( this, icard );
-
- }
-
-/* Return the encoding scheme. */
- return astOK ? ret : UNKNOWN_ENCODING;
-}
-
-static void GetFiducialNSC( AstWcsMap *map, double *phi, double *theta, int *status ){
-/*
-* Name:
-* GetFiducialNSC
-
-* Purpose:
-* Return the Native Spherical Coordinates at the fiducial point of a
-* WcsMap projection.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void GetFiducialNSC( AstWcsMap *map, double *phi, double *theta, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function returns the native spherical coords corresponding at
-* the fiducial point of a WcsMap.
-*
-* The values of parameters 1 and 2 on the longitude axis of the WcsMap
-* are usually used as the native spherical coordinates of the
-* fiducial point. The default values for these parameters are equal
-* to the native spherical coordinates of the projection reference point.
-* The exception is that a TPN projection always uses the default
-* values, since the projection parameters are used to store polynomial
-* coefficients.
-
-* Parameters:
-* map
-* Pointer to the WcsMap.
-* phi
-* Address of a location at which to return the native spherical
-* longitude at the fiducial point (radians).
-* theta
-* Address of a location at which to return the native spherical
-* latitude at the fiducial point (radians).
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- int axlon; /* Index of longitude axis */
-
-/* Initialise */
- *phi = AST__BAD;
- *theta = AST__BAD;
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* If this is not a TPN projection get he value of the required
- projection parameters (the default values for these are equal to the
- fixed native shperical coordinates at the projection reference point). */
- if( astGetWcsType( map ) != AST__TPN ) {
- axlon = astGetWcsAxis( map, 0 );
- if( astGetPV( map, axlon, 0 ) != 0.0 ) {
- *phi = AST__DD2R*astGetPV( map, axlon, 1 );
- *theta = AST__DD2R*astGetPV( map, axlon, 2 );
- } else {
- *phi = astGetNatLon( map );
- *theta = astGetNatLat( map );
- }
-
-/* If this is a TPN projection, the returned values are always the fixed
- native shperical coordinates at the projection reference point). */
- } else {
- *phi = astGetNatLon( map );
- *theta = astGetNatLat( map );
- }
-}
-
-static void GetFiducialPPC( AstWcsMap *map, double *x0, double *y0, int *status ){
-/*
-* Name:
-* GetFiducialPPC
-
-* Purpose:
-* Return the IWC at the fiducial point of a WcsMap projection.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void GetFiducialPPC( AstWcsMap *map, double *x0, double *y0, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function returns the projection plane coords corresponding to
-* the native spherical coords of the fiducial point of a FITS-WCS
-* header. Note, projection plane coordinates (PPC) are equal to
-* Intermediate World Coordinates (IWC) except for cases where the
-* fiducial point does not correspond to the projection reference point.
-* In these cases, IWC and PPC will be connected by a translation
-* which ensures that the fiducial point corresponds to the origin of
-* IWC.
-*
-* The values of parameters 1 and 2 on the longitude axis of
-* the WcsMap are used as the native spherical coordinates of the
-* fiducial point. The default values for these parameters are equal
-* to the native spherical coordinates of the projection reference point.
-
-* Parameters:
-* map
-* Pointer to the WcsMap.
-* x0
-* Address of a location at which to return the PPC X axis value at
-* the fiducial point (radians).
-* y0
-* Address of a location at which to return the PPC Y axis value at
-* the fiducial point (radians).
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstPointSet *pset1; /* Pointer to the native spherical PointSet */
- AstPointSet *pset2; /* Pointer to the intermediate world PointSet */
- double **ptr1; /* Pointer to pset1 data */
- double **ptr2; /* Pointer to pset2 data */
- int axlat; /* Index of latitude axis */
- int axlon; /* Index of longitude axis */
- int i; /* Loop count */
- int naxes; /* Number of axes */
-
-/* Initialise */
- *x0 = AST__BAD;
- *y0 = AST__BAD;
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* Save number of axes in the WcsMap. */
- naxes = astGetNin( map );
-
-/* Allocate resources. */
- pset1 = astPointSet( 1, naxes, "", status );
- ptr1 = astGetPoints( pset1 );
-
- pset2 = astPointSet( 1, naxes, "", status );
- ptr2 = astGetPoints( pset2 );
-
-/* Check pointers can be used safely. */
- if( astOK ) {
-
-/* Get the indices of the longitude and latitude axes in WcsMap. */
- axlon = astGetWcsAxis( map, 0 );
- axlat = astGetWcsAxis( map, 1 );
-
-/* Use zero on all non-celestial axes. */
- for( i = 0; i < naxes; i++ ) ptr1[ i ][ 0 ] = 0.0;
-
-/* Get the native spherical coords at the fiducial point. */
- GetFiducialNSC( map, ptr1[ axlon ], ptr1[ axlat ], status );
-
-/* Use the inverse WcsMap to convert the native longitude and latitude of
- the fiducial point into PPC (x,y). */
- (void) astTransform( map, pset1, 0, pset2 );
-
-/* Return the calculated PPC coords. */
- *x0 = ptr2[ axlon ][ 0 ];
- *y0 = ptr2[ axlat ][ 0 ];
- }
-
-/* Free resources. */
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
-}
-
-static int GetFiducialWCS( AstWcsMap *wcsmap, AstMapping *map2, int colon,
- int colat, double *fidlon, double *fidlat, int *status ){
-/*
-* Name:
-* GetFiducialWCS
-
-* Purpose:
-* Decide on the celestial coordinates of the fiducial point.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int GetFiducialWCS( AstWcsMap wcsmap, AstMapping map2, int colon,
-* int colat, double *fidlon, double *fidlat, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function returns the celestial longitude and latitude values
-* to use for the fiducial point. These are the values stored in FITS
-* keywords CRVALi.
-
-* Parameters:
-* wcsmap
-* The WcsMap which converts Projection Plane Coordinates into
-* native spherical coordinates. The number of outputs from this
-* Mapping should match the number of inputs to "map2".
-* map2
-* The Mapping which converts native spherical coordinates into WCS
-* coordinates.
-* colon
-* The index of the celestial longitude output from "map2".
-* colat
-* The index of the celestial latitude output from "map2".
-* fidlon
-* Pointer to a location at which to return the celestial longitude
-* value at the fiducial point. The value is returned in radians.
-* fidlat
-* Pointer to a location at which to return the celestial latitude
-* value at the fiducial point. The value is returned in radians.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero if the fiducial point longitude or latitude could not be
-* determined. One otherwise.
-
-*/
-
-/* Local Variables: */
- AstPointSet *pset1; /* Pointer to the native spherical PointSet */
- AstPointSet *pset2; /* Pointer to the WCS PointSet */
- double **ptr1; /* Pointer to pset1 data */
- double **ptr2; /* Pointer to pset2 data */
- int axlat; /* Index of latitude axis */
- int axlon; /* Index of longitude axis */
- int iax; /* Axis index */
- int naxin; /* Number of IWC axes */
- int naxout; /* Number of WCS axes */
- int ret; /* The returned FrameSet */
-
-/* Initialise */
- ret = 0;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* Allocate resources. */
- naxin = astGetNin( map2 );
- naxout = astGetNout( map2 );
- pset1 = astPointSet( 1, naxin, "", status );
- ptr1 = astGetPoints( pset1 );
- pset2 = astPointSet( 1, naxout, "", status );
- ptr2 = astGetPoints( pset2 );
- if( astOK ) {
-
-/* Get the indices of the latitude and longitude outputs in the WcsMap.
- These are not necessarily the same as "colat" and "colon" because "map2"
- may contain a PermMap. */
- axlon = astGetWcsAxis( wcsmap, 0 );
- axlat = astGetWcsAxis( wcsmap, 1 );
-
-/* Use zero on all non-celestial axes. */
- for( iax = 0; iax < naxin; iax++ ) ptr1[ iax ][ 0 ] = 0.0;
-
-/* Get the native spherical coords at the fiducial point. */
- GetFiducialNSC( wcsmap, ptr1[ axlon ], ptr1[ axlat ], status );
-
-/* The fiducial point in the celestial coordinate system is found by
- transforming the fiducial point in native spherical co-ordinates
- into absolute physical coordinates using map2. */
- (void) astTransform( map2, pset1, 1, pset2 );
-
-/* Store the returned WCS values. */
- *fidlon = ptr2[ colon ][ 0 ];
- *fidlat = ptr2[ colat ][ 0 ];
-
-/* Indicate if we have been succesfull. */
- if( astOK && *fidlon != AST__BAD && *fidlat != AST__BAD ) ret = 1;
-
- }
-
-/* Free resources. */
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
-
-/* Return the result. */
- return ret;
-
-}
-
-static const char *GetFitsSor( const char *string, int *status ) {
-/*
-* Name:
-* GetFitsSor
-
-* Purpose:
-* Get the string used to represent an AST spectral standard of rest.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* const char *GetFitsSor( const char *string, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function returns a pointer to a static string which is the
-* FITS equivalent to a given SpecFrame StdOfRest value.
-
-* Parameters:
-* string
-* Pointer to a constant null-terminated string containing the
-* SpecFrame StdOfRest value.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a static null-terminated string containing the FITS
-* equivalent to the supplied string. NULL is returned if the supplied
-* string has no FITS equivalent.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked wth the global error status set, or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- const char *result; /* Pointer value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Compare the supplied string with SpecFrame value for which there is a
- known FITS equivalent. */
- if( !strcmp( string, "Topocentric" ) ){
- result = "TOPOCENT";
- } else if( !strcmp( string, "Geocentric" )){
- result = "GEOCENTR";
- } else if( !strcmp( string, "Barycentric" )){
- result = "BARYCENT";
- } else if( !strcmp( string, "Heliocentric" )){
- result = "HELIOCEN";
- } else if( !strcmp( string, "LSRK" )){
- result = "LSRK";
- } else if( !strcmp( string, "LSRD" )){
- result = "LSRD";
- } else if( !strcmp( string, "Galactic" )){
- result = "GALACTOC";
- } else if( !strcmp( string, "Local_group" )){
- result = "LOCALGRP";
- } else if( !strcmp( string, "Source" )){
- result = "SOURCE";
- } else {
- result = NULL;
- }
-
-/* Return the answer. */
- return result;
-
-}
-
-static double GetItem( double ****item, int i, int jm, char s, char *name,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* GetItem
-
-* Purpose:
-* Retrieve a value for a axis keyword value from a FitStore structure.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* double GetItem( double ****item, int i, int jm, char s, char *name,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* The requested keyword value is retrieved from the specified array,
-* at a position indicated by the axis and co-ordinate version.
-* AST__BAD is returned if the array does not contain the requested
-* value.
-
-* Parameters:
-* item
-* The address of the pointer within the FitsStore which locates the
-* arrays of values for the required keyword (eg &(store->crval) ).
-* The array located by the supplied pointer contains a vector of
-* pointers. Each of these pointers is associated with a particular
-* co-ordinate version (s), and locates an array of pointers for that
-* co-ordinate version. Each such array of pointers has an element
-* for each intermediate axis number (i), and the pointer locates an
-* array of axis keyword values. These arrays of keyword values have
-* one element for every pixel axis (j) or projection parameter (m).
-* i
-* The zero based intermediate axis index in the range 0 to 98. Set
-* this to zero for keywords (e.g. CRPIX) which are not indexed by
-* intermediate axis number.
-* jm
-* The zero based pixel axis index (in the range 0 to 98) or parameter
-* index (in the range 0 to WCSLIB_MXPAR-1). Set this to zero for
-* keywords (e.g. CRVAL) which are not indexed by either pixel axis or
-* parameter number.
-* s
-* The co-ordinate version character (A to Z, or space), case
-* insensitive
-* name
-* A string holding a name for the item of information. A NULL
-* pointer may be supplied, in which case it is ignored. If a
-* non-NULL pointer is supplied, an error is reported if the item
-* of information has not been stored, and the supplied name is
-* used to identify the information within the error message.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-
-* Returned Value:
-* The required keyword value, or AST__BAD if no value has previously
-* been stored for the keyword (or if an error has occurred).
-
-*/
-
-/* Local Variables: */
- double ret; /* Returned keyword value */
- int si; /* Integer co-ordinate version index */
-
-/* Initialise */
- ret = AST__BAD;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* Convert the character co-ordinate version into an integer index, and
- check it is within range. The primary axis description (s=' ') is
- given index zero. 'A' is 1, 'B' is 2, etc. */
- if( s == ' ' ) {
- si = 0;
- } else if( islower(s) ){
- si = (int) ( s - 'a' ) + 1;
- } else {
- si = (int) ( s - 'A' ) + 1;
- }
-
- if( si < 0 || si > 26 ) {
- astError( AST__INTER, "GetItem(fitschan): AST internal error; "
- "co-ordinate version '%c' ( char(%d) ) is invalid.", status, s, s );
-
-/* Check the intermediate axis index is within range. */
- } else if( i < 0 || i > 98 ) {
- astError( AST__INTER, "GetItem(fitschan): AST internal error; "
- "intermediate axis index %d is invalid.", status, i );
-
-/* Check the pixel axis or parameter index is within range. */
- } else if( jm < 0 || jm > 99 ) {
- astError( AST__INTER, "GetItem(fitschan): AST internal error; "
- "pixel axis or parameter index %d is invalid.", status, jm );
-
-/* Otherwise, if the array holding the required keyword is not null,
- proceed... */
- } else if( *item ){
-
-/* Find the number of coordinate versions in the supplied array.
- Only proceed if it encompasses the requested co-ordinate
- version. */
- if( astSizeOf( (void *) *item )/sizeof(double **) > si ){
-
-/* Find the number of intermediate axes in the supplied array.
- Only proceed if it encompasses the requested intermediate axis. */
- if( astSizeOf( (void *) (*item)[si] )/sizeof(double *) > i ){
-
-/* Find the number of pixel axes or parameters in the supplied array.
- Only proceed if it encompasses the requested index. */
- if( astSizeOf( (void *) (*item)[si][i] )/sizeof(double) > jm ){
-
-/* Return the required keyword value. */
- ret = (*item)[si][i][jm];
- }
- }
- }
- }
-
-/* If required, report an error if the requested item of information has
- not been stored. */
- if( ret == AST__BAD && name && astOK ){
- astError( AST__NOFTS, "%s(%s): No value can be found for %s.", status,
- method, class, name );
- }
-
- return ret;
-}
-
-static int GetMaxJM( double ****item, char s, int *status ){
-/*
-* Name:
-* GetMaxJM
-
-* Purpose:
-* Return the largest pixel axis or parameter index stored for an axis
-* keyword value in a FitStore structure.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int GetMaxJM( double ****item, char s, int *status)
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* The number of pixel axis numbers or projection parameters stored for
-* a specified axis keyword is found and returned.
-
-* Parameters:
-* item
-* The address of the pointer within the FitsStore which locates the
-* arrays of values for the required keyword (eg &(store->crpix) ).
-* The array located by the supplied pointer contains a vector of
-* pointers. Each of these pointers is associated with a particular
-* co-ordinate version (s), and locates an array of pointers for that
-* co-ordinate version. Each such array of pointers has an element
-* for each intermediate axis number (i), and the pointer locates an
-* array of axis keyword values. These arrays of keyword values have
-* one element for every pixel axis (j) or projection parameter (m).
-* s
-* The co-ordinate version character (A to Z, or space), case
-* insensitive
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The maximum pixel axis number or projection parameter index (zero
-* based).
-
-*/
-
-/* Local Variables: */
- int jm; /* Number of parameters/pixel axes */
- int i; /* Intermediate axis index */
- int ret; /* Returned axis index */
- int si; /* Integer co-ordinate version index */
-
-/* Initialise */
- ret = -1;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* If the array holding the required keyword is not null, proceed... */
- if( *item ){
-
-/* Convert the character co-ordinate version into an integer index, and
- check it is within range. The primary axis description (s=' ') is
- given index zero. 'A' is 1, 'B' is 2, etc. */
- if( s == ' ' ) {
- si = 0;
- } else if( islower(s) ){
- si = (int) ( s - 'a' ) + 1;
- } else {
- si = (int) ( s - 'A' ) + 1;
- }
-
- if( si < 0 || si > 26 ) {
- astError( AST__INTER, "GetMaxJM(fitschan): AST internal error; "
- "co-ordinate version '%c' ( char(%d) ) is invalid.", status, s, s );
- return ret;
- }
-
-/* Find the number of coordinate versions in the supplied array.
- Only proceed if it encompasses the requested co-ordinate
- version. */
- if( astSizeOf( (void *) *item )/sizeof(double **) > si ){
-
-/* Check that the pointer to the array of intermediate axis values is not null. */
- if( (*item)[si] ){
-
-/* Loop round each used element in this array. */
- for( i = 0; i < astSizeOf( (void *) (*item)[si] )/sizeof(double *);
- i++ ){
- if( (*item)[si][i] ){
-
-/* Get the size of the pixel axis/projection parameter array for the
- current intermediate axis, and subtract 1 to get the largest index. */
- jm = astSizeOf( (void *) (*item)[si][i] )/sizeof(double) - 1;
-
-/* Ignore any trailing unused (AST__BAD) values. */
- while( jm >= 0 && (*item)[si][i][jm] == AST__BAD ) jm--;
-
-/* Update the returned value if the current value is larger. */
- if( jm > ret ) ret = jm;
-
- }
- }
- }
- }
- }
-
- return ret;
-
-}
-
-static int GetMaxI( double ****item, char s, int *status ){
-/*
-* Name:
-* GetMaxI
-
-* Purpose:
-* Return the largest WCS axis index stored for an axis keyword value in
-* a FitStore structure.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int GetMaxJM( double ****item, char s)
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* The number of Wcs axis numbers stored for a specified axis keyword is
-* found and returned.
-
-* Parameters:
-* item
-* The address of the pointer within the FitsStore which locates the
-* arrays of values for the required keyword (eg &(store->crval) ).
-* The array located by the supplied pointer contains a vector of
-* pointers. Each of these pointers is associated with a particular
-* co-ordinate version (s), and locates an array of pointers for that
-* co-ordinate version. Each such array of pointers has an element
-* for each intermediate axis number (i), and the pointer locates an
-* array of axis keyword values. These arrays of keyword values have
-* one element for every pixel axis (j) or projection parameter (m).
-* s
-* The co-ordinate version character (A to Z, or space), case
-* insensitive
-
-* Returned Value:
-* The maximum WCS axis index (zero based).
-
-*/
-
-/* Local Variables: */
- int ret; /* Returned axis index */
- int si; /* Integer co-ordinate version index */
-
-/* Initialise */
- ret = -1;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* If the array holding the required keyword is not null, proceed... */
- if( *item ){
-
-/* Convert the character co-ordinate version into an integer index, and
- check it is within range. The primary axis description (s=' ') is
- given index zero. 'A' is 1, 'B' is 2, etc. */
- if( s == ' ' ) {
- si = 0;
- } else if( islower(s) ){
- si = (int) ( s - 'a' ) + 1;
- } else {
- si = (int) ( s - 'A' ) + 1;
- }
-
- if( si < 0 || si > 26 ) {
- astError( AST__INTER, "GetMaxI(fitschan): AST internal error; "
- "co-ordinate version '%c' ( char(%d) ) is invalid.", status, s, s );
- return ret;
- }
-
-/* Find the number of coordinate versions in the supplied array.
- Only proceed if it encompasses the requested co-ordinate
- version. */
- if( astSizeOf( (void *) *item )/sizeof(double **) > si ){
-
-/* Check that the pointer to the array of intermediate axis values is not null. */
- if( (*item)[si] ){
-
-/* Get the size of the intermediate axis array and subtract 1 to get the largest
- index. */
- ret = astSizeOf( (void *) (*item)[si] )/sizeof(double *) - 1;
-
-/* Ignore any trailing unused (NULL) values. */
- while( ret >= 0 && (*item)[si][ret] == NULL ) ret--;
- }
- }
- }
-
- return ret;
-
-}
-
-static char GetMaxS( double ****item, int *status ){
-/*
-* Name:
-* GetMaxS
-
-* Purpose:
-* Return the largest (i.e. closest to Z) coordinate version character
-* stored for a axis keyword value in a FitStore structure.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* char GetMaxS( double ****item, int *status)
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* The largest (i.e. closest to Z) coordinate version character
-* stored for a axis keyword value in a FitStore structure is found
-* and returned.
-
-* Parameters:
-* item
-* The address of the pointer within the FitsStore which locates the
-* arrays of values for the required keyword (eg &(store->crval) ).
-* The array located by the supplied pointer contains a vector of
-* pointers. Each of these pointers is associated with a particular
-* co-ordinate version (s), and locates an array of pointers for that
-* co-ordinate version. Each such array of pointers has an element
-* for each intermediate axis number (i), and the pointer locates an
-* array of axis keyword values. These arrays of keyword values have
-* one element for every pixel axis (j) or projection parameter (m).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The highest coordinate version character.
-
-*/
-
-/* Local Variables: */
- char ret; /* Returned axis index */
- int si; /* Integer index into alphabet */
-
-/* Initialise */
- ret = ' ';
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* If the array holding the required keyword is not null, proceed... */
- if( *item ){
-
-/* Find the length of this array, and subtract 1 to get the largest index
- in the array. */
- si = astSizeOf( (void *) *item )/sizeof(double **) - 1;
-
-/* Ignore any trailing null (i.e. unused) values. */
- while( si >= 0 && !(*item)[si] ) si--;
-
-/* Store the corresponding character */
- if( si == 0 ) {
- ret = ' ';
- } else {
- ret = 'A' + si - 1;
- }
- }
-
- return ret;
-
-}
-
-static char *GetItemC( char ****item, int i, char s, char *name,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* GetItemC
-
-* Purpose:
-* Retrieve a string value for a axis keyword value from a FitStore
-* structure.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* char *GetItemC( char ****item, int i, char s, char *name,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* The requested keyword string value is retrieved from the specified
-* array, at a position indicated by the axis and co-ordinate version.
-* NULL is returned if the array does not contain the requested
-* value.
-
-* Parameters:
-* item
-* The address of the pointer within the FitsStore which locates the
-* arrays of values for the required keyword (eg &(store->crval) ).
-* The array located by the supplied pointer contains a vector of
-* pointers. Each of these pointers is associated with a particular
-* co-ordinate version (s), and locates an array of pointers for that
-* co-ordinate version. Each such array of pointers has an element
-* for each intermediate axis number (i), and the pointer locates a
-* character string.
-* i
-* The zero based intermediate axis index in the range 0 to 98. Set
-* this to zero for keywords (e.g. CRPIX) which are not indexed by
-* intermediate axis number.
-* s
-* The co-ordinate version character (A to Z, or space), case
-* insensitive
-* name
-* A string holding a name for the item of information. A NULL
-* pointer may be supplied, in which case it is ignored. If a
-* non-NULL pointer is supplied, an error is reported if the item
-* of information has not been stored, and the supplied name is
-* used to identify the information within the error message.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the required keyword string value, or NULL if no value
-* has previously been stored for the keyword (or if an error has
-* occurred).
-
-*/
-
-/* Local Variables: */
- char *ret; /* Returned keyword value */
- int si; /* Integer co-ordinate version index */
-
-/* Initialise */
- ret = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* Convert the character co-ordinate version into an integer index, and
- check it is within range. The primary axis description (s=' ') is
- given index zero. 'A' is 1, 'B' is 2, etc. */
- if( s == ' ' ) {
- si = 0;
- } else if( islower(s) ){
- si = (int) ( s - 'a' ) + 1;
- } else {
- si = (int) ( s - 'A' ) + 1;
- }
-
- if( si < 0 || si > 26 ) {
- astError( AST__INTER, "GetItemC(fitschan): AST internal error; "
- "co-ordinate version '%c' ( char(%d) ) is invalid.", status, s, s );
-
-/* Check the intermediate axis index is within range. */
- } else if( i < 0 || i > 98 ) {
- astError( AST__INTER, "GetItemC(fitschan): AST internal error; "
- "intermediate axis index %d is invalid.", status, i );
-
-/* Otherwise, if the array holding the required keyword is not null,
- proceed... */
- } else if( *item ){
-
-/* Find the number of coordinate versions in the supplied array.
- Only proceed if it encompasses the requested co-ordinate
- version. */
- if( astSizeOf( (void *) *item )/sizeof(char **) > si ){
-
-/* Find the number of intermediate axes in the supplied array.
- Only proceed if it encompasses the requested intermediate axis. */
- if( astSizeOf( (void *) (*item)[si] )/sizeof(char *) > i ){
-
-/* Return the required keyword value. */
- ret = (*item)[si][i];
- }
- }
- }
-
-/* If required, report an error if the requested item of information has
- not been stored. */
- if( !ret && name && astOK ){
- astError( AST__NOFTS, "%s(%s): No value can be found for %s.", status,
- method, class, name );
- }
-
- return ret;
-
-}
-
-static int GoodWarns( const char *value, int *status ){
-/*
-* Name:
-* GoodWarns
-
-* Purpose:
-* Checks a string to ensure it is a legal list of warning conditions.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int GoodWarns( const char *value, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function checks the supplied string to ensure it contains a space
-* separated list of zero or more recognised warning conditions. An
-* error is reported if it does not.
-
-* Parameters:
-* value
-* The string to check.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero is returned if the supplied string is not a legal list of
-* conditions, or if an error has already occurred. One is returned
-* otherwise.
-
-*/
-
-/* Local Variables: */
- char *b; /* Pointer to next buffer element */
- const char *c ; /* Pointer to next character */
- char buf[100]; /* Buffer for condition name */
- int inword; /* Are we in a word? */
- int n; /* Number of conditions supplied */
- int ret; /* Returned value */
-
-/* Initialise */
- ret = 0;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* Report an error and return if the pointer is null. */
- if( !value ){
- astError( AST__ATTIN, "astSetWarnings(fitschan): Null pointer "
- "supplied for the Warnings attribute." , status);
- return ret;
- }
-
-/* Initialise things */
- inword = 0;
- buf[ 0 ] = ' ';
- b = buf + 1;
- n = 0;
- ret = 1;
-
-/* Loop round each character in the supplied string. */
- for( c = value ; c < value + strlen( value ) + 1; c++ ){
-
-/* Have we found the first space or null following a word? */
- if( ( !(*c) || isspace( *c ) ) && inword ){
-
-/* Add a space to the end of the buffer and terminate it. */
- *(b++) = ' ';
- *b = 0;
-
-/* Check the word is legal by searching for it in the string of all
- conditions, which should be lower case and have spaces at start and end.
- The word in the buffer is delimited by spaces and so it will not match
- a substring within a condition. If it is legal increment the number of
- conditions found. */
- if( strstr( ALLWARNINGS, buf ) ){
- n++;
-
-/* Otherwise, report an error and break. */
- } else {
- ret = 0;
- *(--b) = 0;
- astError( AST__ATTIN, "astSetWarnings(fitschan): Unknown "
- "condition '%s' specified when setting the Warnings "
- "attribute.", status, buf + 1 );
- break;
- }
-
-/* Reset the pointer to the next character in the buffer, retaining the
- initial space in the buffer. */
- b = buf + 1;
-
-/* Indicate we are no longer in a word. */
- inword = 0;
-
-/* Have we found the first non-space, non-null character following a space? */
- } else if( *c && !isspace( *c ) && !inword ){
-
-/* Note we are now in a word. */
- inword = 1;
-
- }
-
-/* If we are in a word, copy the lowercase character to the buffer. */
- if( inword ) *(b++) = tolower( *c );
-
- }
-
- return ret;
-
-}
-
-static AstMapping *GrismSpecWcs( char *algcode, FitsStore *store, int i,
- char s, AstSpecFrame *specfrm,
- const char *method, const char *class, int *status ) {
-/*
-* Name:
-* GrismSpecWcs
-
-* Purpose:
-* Create a Mapping describing a FITS-WCS grism-dispersion algorithm
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* AstMapping *GrismSpecWcs( char *algcode, FitsStore *store, int i, char s,
-* AstSpecFrame *specfrm, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function uses the contents of the supplied FitsStore to create
-* a Mapping which goes from Intermediate World Coordinate (known as "w"
-* in the context of FITS-WCS paper III) to the spectral system
-* described by the supplied SpecFrame.
-*
-* The returned Mapping implements the grism "GRA" and "GRI" algorithms
-* described in FITS-WCS paper III.
-
-* Parameters:
-* algcode
-* Pointer to a string holding the code for the required algorithm
-* ("-GRA" or "-GRI").
-* store
-* Pointer to the FitsStore structure holding the values to use for
-* the WCS keywords.
-* i
-* The zero-based index of the spectral axis within the FITS header
-* s
-* A character identifying the co-ordinate version to use. A space
-* means use primary axis descriptions. Otherwise, it must be an
-* upper-case alphabetical characters ('A' to 'Z').
-* specfrm
-* Pointer to the SpecFrame. This specifies the "S" system - the
-* system in which the CRVAL kewyords (etc) are specified.
-* method
-* A pointer to a string holding the name of the calling method.
-* This is used only in the construction of error messages.
-* class
-* A pointer to a string holding the class of the object being
-* read. This is used only in the construction of error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a Mapping, or NULL if an error occurs.
-
-*/
-
-/* Local Variables: */
- AstFrameSet *fs;
- AstMapping *gmap;
- AstMapping *map1;
- AstMapping *map2;
- AstMapping *map2a;
- AstMapping *map2b;
- AstMapping *ret;
- AstMapping *smap;
- AstSpecFrame *wfrm;
- double crv;
- double dg;
- double gcrv;
- double pv;
- double wcrv;
-
-/* Check the global status. */
- ret = NULL;
- if( !astOK ) return ret;
-
-/* The returned Mapping will be a CmpMap including a GrismMap. This
- GrismMap will produced wavelength as output. We also need the Mapping
- from wavelength to the system represented by the supplied SpecFrame.
- To get this, we first create a copy of the supplied SpecFrame (in order
- to inherit the standard of rest, epoch, etc), and set its System to
- wavlength in vacuum (for "-GRI") or air (for "-GRA"), and then use
- astConvert to get the Mapping from the SpecFrame system to relevant
- form of wavelength. */
- wfrm = astCopy( specfrm );
- astSetSystem( wfrm, strcmp( algcode, "-GRI" )?AST__AIRWAVE:AST__WAVELEN );
- astSetUnit( wfrm, 0, "m" );
-
- fs = astConvert( specfrm, wfrm, "" );
- if( fs ) {
- smap = astGetMapping( fs, AST__BASE, AST__CURRENT );
- fs = astAnnul( fs );
-
-/* Get the CRVAL value for the spectral axis (this will be in the S system). */
- crv = GetItem( &(store->crval), i, 0, s, NULL, method, class, status );
- if( crv == AST__BAD ) crv = 0.0;
-
-/* Convert it to the wavelength system (vacuum or air) in metres. */
- astTran1( smap, 1, &crv, 1, &wcrv );
-
-/* Create a GrismMap, and then use the projection parameters stored in
- the FitsStore to set its attributes (convert degrees values to radians
- and supply the defaults specified in FITS-WCS paper III). The FITS
- paper specifies units in which these parameters should be stored in a
- FITS header - distances are in metres and angles in degrees. */
- gmap = (AstMapping *) astGrismMap( "", status );
-
- pv = GetItem( &(store->pv), i, 0, s, NULL, method, class, status );
- astSetGrismG( gmap, ( pv != AST__BAD )?pv:0.0 );
-
- pv = GetItem( &(store->pv), i, 1, s, NULL, method, class, status );
- astSetGrismM( gmap, ( pv != AST__BAD )?(int) ( pv + 0.5 ):0);
-
- pv = GetItem( &(store->pv), i, 2, s, NULL, method, class, status );
- astSetGrismAlpha( gmap, ( pv != AST__BAD )?pv*AST__DD2R:0.0 );
-
- pv = GetItem( &(store->pv), i, 3, s, NULL, method, class, status );
- astSetGrismNR( gmap, ( pv != AST__BAD )?pv:1.0 );
-
- pv = GetItem( &(store->pv), i, 4, s, NULL, method, class, status );
- astSetGrismNRP( gmap, ( pv != AST__BAD )?pv:0.0 );
-
- pv = GetItem( &(store->pv), i, 5, s, NULL, method, class, status );
- astSetGrismEps( gmap, ( pv != AST__BAD )?pv*AST__DD2R:0.0 );
-
- pv = GetItem( &(store->pv), i, 6, s, NULL, method, class, status );
- astSetGrismTheta( gmap, ( pv != AST__BAD )?pv*AST__DD2R:0.0 );
-
-/* Store the reference wavelength found above as an attribute of the
- GrismMap. */
- astSetGrismWaveR( gmap, wcrv );
-
-/* Invert the GrismMap to get the (Wavelength -> grism parameter) Mapping, and
- then combine it with the (S -> Wavelength) Mapping to get the (S -> grism
- parameter) Mapping. */
- astInvert( gmap );
- map1 = (AstMapping *) astCmpMap( smap, gmap, 1, "", status );
-
-/* Convert the reference point value from wavelength to grism parameter. */
- astTran1( gmap, 1, &wcrv, 1, &gcrv );
-
-/* Find the rate of change of grism parameter with respect to the S
- system at the reference point, dg/dS. */
- dg = astRate( map1, &crv, 0, 0 );
- if( dg != AST__BAD && dg != 0.0 ) {
-
-/* FITS-WCS paper II requires headers to be constructed so that dS/dw = 1.0
- at the reference point. Therefore dg/dw = dg/dS. Create a WinMap which
- scales and shifts the "w" value to get the grism parameter value. */
- map2a = (AstMapping *) astZoomMap( 1, dg, "", status );
- map2b = (AstMapping *) astShiftMap( 1, &gcrv, "", status );
- map2 = (AstMapping *) astCmpMap( map2a, map2b, 1, "", status );
- map2a = astAnnul( map2a );
- map2b = astAnnul( map2b );
-
-/* The Mapping to be returned is the concatenation of the above Mapping
- (from w to g) with the Mapping from g to S. */
- astInvert( map1 );
- ret = (AstMapping *) astCmpMap( map2, map1, 1, "", status );
- map2 = astAnnul( map2 );
-
- }
-
- map1 = astAnnul( map1 );
- smap = astAnnul( smap );
- gmap = astAnnul( gmap );
- }
- wfrm = astAnnul( wfrm );
-
-
-/* Return the result */
- return ret;
-}
-
-static int KeyFields( AstFitsChan *this, const char *filter, int maxfld,
- int *ubnd, int *lbnd, int *status ){
-/*
-*+
-* Name:
-* astKeyFields
-
-* Purpose:
-* Find the ranges taken by integer fields within the keyword names
-* in a FitsChan.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int astKeyFields( AstFitsChan *this, const char *filter, int maxfld,
-* int *ubnd, int *lbnd )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-* This function returns the number of cards within a FitsChan which
-* refer to keywords which match the supplied filter template. If the
-* filter contains any integer field specifiers (e.g. "%d", "%3d", etc),
-* it also returns the upper and lower bounds found for the integer
-* fields.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* filter
-* The filter string.
-* maxfld
-* The size of the "ubnd" and "lbnd" arrays.
-* ubnd
-* A pointer to an integer array in which to return the
-* upper bound found for each integer field in the filter.
-* They are stored in the order in which they occur in the filter.
-* If the filter contains too many fields to fit in the supplied
-* array, the excess trailing fields are ignored.
-* lbnd
-* A pointer to an integer array in which to return the
-* lower bound found for each integer field in the filter.
-
-* Returned Value:
-* astKeyFields()
-* The total number of cards matching the supplied filter in the
-* FitsChan.
-
-* Filter Syntax:
-* - The criteria for a keyword name to match a filter template are
-* as follows:
-* - All characters in the template other than "%" (and the field width
-* and type specifiers which follow a "%") must be matched by an
-* identical character in the test string.
- - If a "%" occurs in the template, then the next character in the
-* template should be a single digit specifying a field width. If it is
-* zero, then the test string may contain zero or more matching characters.
-* Otherwise, the test string must contain exactly the specified number
-* of matching characters (i.e. 1 to 9). The field width digit may be
-* omitted, in which case the test string must contain one or more matching
-* characters. The next character in the template specifies the type of
-* matching characters and must be one of "d", "c" or "f". Decimal digits
-* are matched by "d", all upper (but not lower) case alphabetical
-* characters are matched by "c", and all characters which may legally be
-* found within a FITS keyword name are matched by "f".
-
-* Examples:
-* - The filter "CRVAL1" accepts the single keyword CRVAL1.
-* - The filter "CRVAL%1d" accepts the single keyword CRVAL0, CRVAL1,
-* CRVAL2, up to CRVAL9.
-* - The filter "CRVAL%d" accepts any keyword consisting of the string
-* "CRVAL" followed by any integer value.
-* - The filter "CR%0s1" accepts any keyword starting with the string "CR"
-* and ending with the character "1" (including CR1).
-
-* Notes:
-* - The entire FitsChan is searched, irrespective of the setting of
-* the Card attribute.
-* - If "maxfld" is supplied as zero, "ubnd" and "lbnd" are ignored,
-* but the number of matching cards is still returned as the function value.
-* - If no matching cards are found in the FitsChan, or if there are no
-* integer fields in the filter, then the lower and upper bounds are
-* returned as zero and -1 (i.e. reversed).
-* - If an error has already occured, or if this function should fail
-* for any reason, a value of zero is returned for the function value,
-* and the lower and upper bounds are set to zero and -1.
-
-*-
-*/
-
-/* Local Variables: */
- const char *class; /* Object class */
- const char *method; /* Method name */
- int *fields; /* Pointer to array of field values */
- int i; /* Field index */
- int icard; /* Index of current card on entry */
- int nmatch; /* No. of matching cards */
- int nf; /* No. of integer fields in the filter */
- int nfld; /* No. of integer fields in current keyword name */
-
-/* Initialise the returned values. */
- nmatch = 0;
- for( i = 0; i < maxfld; i++ ){
- lbnd[ i ] = 0;
- ubnd[ i ] = -1;
- }
- nf = 0;
-
-/* Check the global error status. */
- if ( !astOK || !filter ) return nf;
-
-/* Ensure the source function has been called */
- ReadFromSource( this, status );
-
-/* Store the method name and object class for use in error messages. */
- method = "astKeyFields";
- class = astGetClass( this );
-
-/* Count the number of integer fields in the filter string. */
- nf = CountFields( filter, 'd', method, class, status );
-
-/* If this is larger than the supplied arrays, use the size of the arrays
- instead. */
- if( nf > maxfld ) nf = maxfld;
-
-/* Allocate memory to hold the integer field values extracted from
- each matching keyword. */
- fields = (int *) astMalloc( sizeof( int )*(size_t) nf );
-
-/* Save the current card index, and rewind the FitsChan. */
- icard = astGetCard( this );
- astClearCard( this );
-
-/* Check that the FitsChan is not empty and the pointer can be used. */
- if( !astFitsEof( this ) && astOK ){
-
-/* Initialise the returned bounds. Any excess elements in the array are left
- at the previously initialised values. */
- for( i = 0; i < nf; i++ ){
- lbnd[ i ] = INT_MAX;
- ubnd[ i ] = -INT_MAX;
- }
-
-/* Initialise the number of matching keywords. */
- nmatch = 0;
-
-/* Loop round all the cards in the FitsChan. */
- while( !astFitsEof( this ) && astOK ){
-
-/* If the current keyword name matches the filter, update the returned
- bounds and increment the number of matches. */
- if( Match( CardName( this, status ), filter, nf, fields, &nfld,
- method, class, status ) ){
-
- for( i = 0; i < nf; i++ ){
- if( fields[ i ] > ubnd[ i ] ) ubnd[ i ] = fields[ i ];
- if( fields[ i ] < lbnd[ i ] ) lbnd[ i ] = fields[ i ];
- }
-
- nmatch++;
-
- }
-
-/* Move on to the next card. */
- MoveCard( this, 1, method, class, status );
-
- }
-
-/* If bounds were not found, returned 0 and -1. */
- for( i = 0; i < nf; i++ ){
- if( lbnd[ i ] == INT_MAX ){
- lbnd[ i ] = 0;
- ubnd[ i ] = -1;
- }
- }
-
- }
-
-/* Reinstate the original current card index. */
- astSetCard( this, icard );
-
-/* Free the memory used to hold the integer field values extracted from
- each matching keyword. */
- fields = (int *) astFree( (void *) fields );
-
-/* If an error has occurred, returned no matches and reversed bounds. */
- if( !astOK ){
- nmatch = 0;
- for( i = 0; i < maxfld; i++ ){
- lbnd[ i ] = 0;
- ubnd[ i ] = -1;
- }
- }
-
-/* Returned the answer. */
- return nmatch;
-
-}
-
-static int FindFits( AstFitsChan *this, const char *name,
- char card[ AST__FITSCHAN_FITSCARDLEN + 1 ], int inc, int *status ){
-/*
-*++
-* Name:
-c astFindFits
-f AST_FINDFITS
-
-* Purpose:
-* Find a FITS card in a FitsChan by keyword.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "fitschan.h"
-c int astFindFits( AstFitsChan *this, const char *name, char card[ 81 ],
-c int inc )
-f RESULT = AST_FINDFITS( THIS, NAME, CARD, INC, STATUS )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function searches for a card in a FitsChan by keyword. The
-* search commences at the current card (identified by the Card
-* attribute) and ends when a card is found whose FITS keyword
-* matches the template supplied, or when the last card in the
-* FitsChan has been searched.
-*
-* If the search is successful (i.e. a card is found which matches
-c the template), the contents of the card are (optionally)
-f the template), the contents of the card are
-* returned and the Card attribute is adjusted to identify the card
-* found or, if required, the one following it. If the search is
-c not successful, the function returns zero and the Card attribute
-f not successful, the function returns .FALSE. and the Card attribute
-* is set to the "end-of-file".
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the FitsChan.
-c name
-f NAME = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated character string containing a
-f A character string containing a
-* template for the keyword to be found. In the simplest case,
-* this should simply be the keyword name (the search is case
-* insensitive and trailing spaces are ignored). However, this
-* template may also contain "field specifiers" which are
-* capable of matching a range of characters (see the "Keyword
-* Templates" section for details). In this case, the first card
-* with a keyword which matches the template will be found. To
-* find the next FITS card regardless of its keyword, you should
-* use the template "%f".
-c card
-f CARD = CHARACTER * ( 80 ) (Returned)
-c An array of at least 81 characters (to allow room for a
-c terminating null)
-f A character variable with at least 80 characters
-* in which the FITS card which is found will be returned. If
-c the search is not successful (or a NULL pointer is given), a
-f the search is not successful, a
-* card will not be returned.
-c inc
-f INC = LOGICAL (Given)
-c If this value is zero (and the search is successful), the
-f If this value is .FALSE. (and the search is successful), the
-* FitsChan's Card attribute will be set to the index of the card
-c that was found. If it is non-zero, however, the Card
-f that was found. If it is .TRUE., however, the Card
-* attribute will be incremented to identify the card which
-* follows the one found.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astFindFits()
-f AST_FINDFITS = LOGICAL
-c One if the search was successful, otherwise zero.
-f .TRUE. if the search was successful, otherwise .FALSE..
-
-* Notes:
-* - The search always starts with the current card, as identified
-* by the Card attribute. To ensure you search the entire contents
-* of a FitsChan, you should first clear the Card attribute (using
-c astClear). This effectively "rewinds" the FitsChan.
-f AST_CLEAR). This effectively "rewinds" the FitsChan.
-* - If a search is unsuccessful, the Card attribute is set to the
-* "end-of-file" (i.e. to one more than the number of cards in the
-* FitsChan). No error occurs.
-c - A value of zero will be returned if this function is invoked
-f - A value of .FALSE. will be returned if this function is invoked
-* with the AST error status set, or if it should fail for any
-* reason.
-
-* Examples:
-c result = astFindFits( fitschan, "%f", card, 1 );
-f RESULT = AST_FINDFITS( FITSCHAN, '%f', CARD, .TRUE., STATUS )
-* Returns the current card in a FitsChan and advances the Card
-* attribute to identify the card that follows (the "%f"
-* template matches any keyword).
-c result = astFindFits( fitschan, "BITPIX", card, 1 );
-f RESULT = AST_FINDFITS( FITSCHAN, 'BITPIX', CARD, .TRUE., STATUS )
-* Searches a FitsChan for a FITS card with the "BITPIX" keyword
-* and returns that card. The Card attribute is then incremented
-* to identify the card that follows it.
-c result = astFindFits( fitschan, "COMMENT", NULL, 0 );
-f RESULT = AST_FINDFITS( FITSCHAN, 'COMMENT', CARD, .FALSE., STATUS )
-* Sets the Card attribute of a FitsChan to identify the next
-c COMMENT card (if any). The card itself is not returned.
-f COMMENT card (if any) and returns that card.
-c result = astFindFits( fitschan, "CRVAL%1d", card, 1 );
-f RESULT = AST_FINDFITS( FITSCHAN, 'CRVAL%1d', CARD, .TRUE., STATUS )
-* Searches a FitsChan for the next card with a keyword of the
-* form "CRVALi" (for example, any of the keywords "CRVAL1",
-* "CRVAL2" or "CRVAL3" would be matched). The card found (if
-* any) is returned, and the Card attribute is then incremented
-* to identify the following card (ready to search for another
-* keyword with the same form, perhaps).
-
-* Keyword Templates:
-* The templates used to match FITS keywords are normally composed
-* of literal characters, which must match the keyword exactly
-* (apart from case). However, a template may also contain "field
-* specifiers" which can match a range of possible characters. This
-* allows you to search for keywords that contain (for example)
-* numbers, where the digits comprising the number are not known in
-* advance.
-*
-* A field specifier starts with a "%" character. This is followed
-* by an optional single digit (0 to 9) specifying a field
-* width. Finally, there is a single character which specifies the
-* type of character to be matched, as follows:
-*
-* - "c": matches all upper case letters,
-* - "d": matches all decimal digits,
-* - "f": matches all characters which are permitted within a FITS
-* keyword (upper case letters, digits, underscores and hyphens).
-*
-* If the field width is omitted, the field specifier matches one
-* or more characters. If the field width is zero, it matches zero
-* or more characters. Otherwise, it matches exactly the number of
-* characters specified. In addition to this:
-*
-* - The template "%f" will match a blank FITS keyword consisting
-* of 8 spaces (as well as matching all other keywords).
-* - A template consisting of 8 spaces will match a blank keyword
-* (only).
-*
-* For example:
-*
-* - The template "BitPix" will match the keyword "BITPIX" only.
-* - The template "crpix%1d" will match keywords consisting of
-* "CRPIX" followed by one decimal digit.
-* - The template "P%c" will match any keyword starting with "P"
-* and followed by one or more letters.
-* - The template "E%0f" will match any keyword beginning with "E".
-* - The template "%f" will match any keyword at all (including a
-* blank one).
-*--
-*/
-
-/* Local Variables: */
- char *c; /* Pointer to next character to check */
- char *lname; /* Pointer to copy of name without trailing spaces */
- const char *class; /* Object class */
- const char *method; /* Calling method */
- int ret; /* Was a card found? */
-
-/* Check the global status, and supplied keyword name. */
- if( !astOK ) return 0;
-
-/* Ensure the source function has been called */
- ReadFromSource( this, status );
-
-/* Store the calling method and object class. */
- method = "astFindFits";
- class = astGetClass( this );
-
-/* Get a local copy of the keyword template. */
- lname = (char *) astStore( NULL, (void *) name, strlen(name) + 1 );
-
-/* Terminate it to exclude trailing spaces. */
- c = lname + strlen(lname) - 1;
- while( *c == ' ' && c >= lname ) *(c--) = 0;
-
-/* Use the private FindKeyCard function to find the card and make it the
- current card. Always use the supplied current card (if any) if the
- template is "%f" or "%0f". */
- if ( !strcmp( lname, "%f" ) || !strcmp( lname, "%0f" ) ){
- ret = astFitsEof( this ) ? 0 : 1;
- } else {
- ret = FindKeyCard( this, lname, method, class, status );
- }
-
-/* Only proceed if the card was found. */
- if( ret && astOK ){
-
-/* Format the current card if a destination string was supplied. */
- if( card ) FormatCard( this, card, method, status );
-
-/* Increment the current card pointer if required. */
- if( inc ) MoveCard( this, 1, method, class, status );
-
-/* Indicate that a card has been formatted. */
- ret = 1;
-
- }
-
-/* Free the memory holding the local copy of the keyword template. */
- lname = (char *) astFree( (void *) lname );
-
-/* If an errror has occurred, return zero. */
- if( !astOK ) ret = 0;
-
-/* Return the answer. */
- return ret;
-
-}
-
-static int FindKeyCard( AstFitsChan *this, const char *name,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* FindKeyCard
-
-* Purpose:
-* Find the next card refering to given keyword.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int FindKeyCard( AstFitsChan *this, const char *name,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* Finds the next card which refers to the supplied keyword and makes
-* it the current card. The search starts with the current card and ends
-* when it reaches the last card.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* name
-* Pointer to a string holding the keyword template (using the
-* syntax expected by the Match function).
-* method
-* Pointer to string holding name of calling method.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A value of 1 is returned if a card was found refering to the given
-* keyword. Otherwise zero is returned.
-
-* Notes:
-* - If a NULL pointer is supplied for "name" then the current card
-* is left unchanged.
-* - The current card is set to NULL (end-of-file) if no card can be
-* found for the supplied keyword.
-
-*/
-
-/* Local Variables: */
- int nfld; /* Number of fields in keyword template */
- int ret; /* Was a card found? */
-
-/* Check the global status, and supplied keyword name. */
- if( !astOK || !name ) return 0;
-
-/* Indicate that no card has been found yet. */
- ret = 0;
-
-/* Search forward through the list until all cards have been checked. */
- while( !astFitsEof( this ) && astOK ){
-
-/* Break out of the loop if the keyword name from the current card matches
- the supplied keyword name. */
- if( Match( CardName( this, status ), name, 0, NULL, &nfld, method, class, status ) ){
- ret = 1;
- break;
-
-/* Otherwise, move the current card on to the next card. */
- } else {
- MoveCard( this, 1, method, class, status );
- }
-
- }
-
-/* Return. */
- return ret;
-
-}
-
-static double *FitLine( AstMapping *map, double *g, double *g0, double *w0,
- double dim, double *tol, int *status ){
-/*
-* Name:
-* FitLine
-
-* Purpose:
-* Check a Mapping for linearity.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* double *FitLine( AstMapping *map, double *g, double *g0, double *w0,
-* double dim, double *tol, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function applies the supplied Mapping to a set of points along
-* a straight line in the input space. It checks to see if the transformed
-* positions also lie on a straight line (in the output space). If so,
-* it returns the vector along this line in the output space which
-* corresponds to a unit vector along the line in the input space. If
-* not, a NULL pointer is returned.
-*
-* The returned vector is found by doing a least squares fit.
-
-* Parameters:
-* map
-* A pointer to the Mapping to test. The number of outputs must be
-* greater than or equal to the number of inputs.
-* g
-* A pointer to an array holding a unit vector within the input space
-* defining the straight line to be checked. The number of elements
-* within this array should equal the number of inputs for "map".
-* g0
-* A pointer to an array holding a position within the input space
-* giving the central position of the vector "g". The number of elements
-* within this array should equal the number of inputs for "map".
-* w0
-* A pointer to an array holding a vector within the output space
-* which corresponds to "g0". The number of elements within this array
-* should equal the number of outputs for "map".
-* dim
-* The length of the pixel axis, or AST__BAD if unknown.
-* tol
-* Pointer to an array holding the tolerance for equality on each
-* output axis.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to dynamically allocated memory holding the required vector
-* in the output space. The number of elements in this vector will equal
-* the number of outputs for "map". The memory should be freed using
-* astFree when no longer needed. If the Mapping is not linear, NULL
-* is returned.
-
-* Notes:
-* - NULL is returned if an error occurs.
-*/
-
-/* Local Constants: */
-#define NPO2 50
-#define NP (2*NPO2+1)
-
-/* Local Variables: */
- AstPointSet *pset1;
- AstPointSet *pset2;
- double **ptr1;
- double **ptr2;
- double *offset;
- double *pax;
- double *ret;
- double *voffset;
- double dax;
- double denom;
- double gap;
- double sd2;
- double sd;
- double sdw;
- double sw;
- int i;
- int j;
- int n;
- int nin;
- int nout;
- int ok;
-
-/* Initialise */
- ret = NULL;
-
-/* Check the inherited status and supplied axis size. */
- if( !astOK || dim == 0.0 ) return ret;
-
-/* Get the number of inputs and outputs for the Mapping. Return if the
- number of outputs is smaller than the number of inputs. */
- nin = astGetNin( map );
- nout = astGetNout( map );
- if( nout < nin ) return ret;
-
-/* Check the supplied position is good on all axes. */
- for( j = 0; j < nout; j++ ) {
- if( w0[ j ] == AST__BAD ) return ret;
- }
-
-/* We use NP points in the fit. If a value for "dim" has been supplied,
- we use points evenly distributed over one tenth of this size, If
- not, we use a gap of 1.0 (corresponds to an axis length of 100 pixels).
- Choose the gap. */
- gap = ( dim != AST__BAD ) ? 0.1*dim/NP : 1.0;
-
-/* Create PointSets to hold the input and output positions. */
- pset1 = astPointSet( NP, nin, "", status );
- ptr1 = astGetPoints( pset1 );
- pset2 = astPointSet( NP, nout, "", status );
- ptr2 = astGetPoints( pset2 );
-
-/* Allocate the returned array. */
- ret = astMalloc( sizeof( double )*(size_t) nout );
-
-/* Allocate workspace to hold the constant offsets of the fit. */
- offset = astMalloc( sizeof( double )*(size_t) nout );
- voffset = astMalloc( sizeof( double )*(size_t) nout );
-
-/* Indicate we have not yet got a usable returned vector. */
- ok = 0;
-
-/* Check we can use the pointers safely. */
- if( astOK ) {
-
-/* Set up the input positions: NP evenly spaced points along a line with
- unit direction vector given by "g", centred at position given by "g0". */
- for( j = 0; j < nin; j++ ) {
- pax = ptr1[ j ];
- dax = g[ j ]*gap;
- for( i = -NPO2; i <= NPO2; i++ ) *(pax++) = g0[ j ] + dax*i;
- }
-
-/* Transform these positions into the output space. */
- (void) astTransform( map, pset1, 1, pset2 );
-
-/* Loop over all output axes, finding the component of the returned vector. */
- ok = 1;
- for( j = 0; j < nout; j++ ) {
- pax = ptr2[ j ];
-
-/* Now loop over all the transformed points to form the other required
- sums. We also form the sums needed to estimate the variance in the
- calculated offset. */
- sdw = 0.0;
- sw = 0.0;
- sd = 0.0;
- sd2 = 0.0;
- n = 0;
-
- for( i = -NPO2; i <= NPO2; i++, pax++ ) {
- if( *pax != AST__BAD ) {
-
-/* Increment the required sums. */
- sdw += i*(*pax);
- sw += (*pax);
- sd += i;
- sd2 += i*i;
- n++;
- }
- }
-
-/* If a reasonable number of good points were found, find the component of
- the returned vector (excluding a scale factor of 1/gap). */
- denom = sd2*n - sd*sd;
- if( n > NP/4 && denom != 0.0 ) {
-
-/* Find the constant scale factor to return for this axis. */
- ret[ j ] = (sdw*n - sw*sd)/denom;
-
-/* Now find the constant offset for this axis. */
- offset[ j ] = (sw*sd2 - sdw*sd)/denom;
-
- } else {
- ok = 0;
- break;
- }
- }
-
-/* Now check that the fit is good enough. Each axis is checked separately.
- All axes must be good. */
- if( ok ) {
- for( j = 0; j < nout; j++ ) {
-
-/* Store the axis values implied by the linear fit in the now un-needed ptr1[0]
- array. */
- pax = ptr1[ 0 ];
- for( i = -NPO2; i <= NPO2; i++, pax++ ) {
- *pax = i*ret[ j ] + offset[ j ];
- }
-
-/* Test the fit to see if we beleive that the mapping is linear. If
- it is, scale the returned value from units of "per gap" to units of
- "per pixel". Otherwise,indicate that he returned vector is unusable. */
- if( FitOK( NP, ptr2[ j ], ptr1[ 0 ], tol[ j ], status ) ) {
- ret[ j ] /= gap;
- } else {
- ok = 0;
- break;
- }
- }
- }
- }
-
-/* Annul the PointSets. */
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
-
-/* Free memory. */
- offset = astFree( offset );
-
-/* If an error has occurred, or if the returned vector is unusable,
- free any returned memory */
- if( !astOK || !ok ) ret = astFree( ret );
-
-/* Return the answer. */
- return ret;
-
-/* Undefine local constants: */
-#undef NP
-#undef NPO2
-}
-
-static int FitsEof( AstFitsChan *this, int *status ){
-/*
-*+
-* Name:
-* astFitsEof
-
-* Purpose:
-* See if the FitsChan is at "end-of-file".
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int astFitsEof( AstFitsChan *this )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-* A value of zero is returned if any more cards remain to be read from the
-* FitsChan. Otherwise a value of 1 is returned. Thus, it is
-* equivalent to testing the FitsChan for an "end-of-file" condition.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-
-* Returned Value:
-* One if no more cards remain to be read, otherwise zero.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-
-*-
-*/
-
-/* Check the supplied object. */
- if( !this ) return 1;
-
-/* Ensure the source function has been called */
- ReadFromSource( this, status );
-
-/* If no more cards remain to be read, the current card pointer in the
- FitsChan will be NULL. Return an appropriate integer value. */
- return this->card ? 0 : 1;
-
-}
-static int FitsSof( AstFitsChan *this, int *status ){
-/*
-*+
-* Name:
-* FitsSof
-
-* Purpose:
-* See if the FitsChan is at "start-of-file".
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int FitsSof( AstFitsChan *this, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* A value of 1 is returned if the current card is the first card in
-* the FitsChan. Otherwise a value of zero is returned. This function
-* is much more efficient than "astGetCard(this) <= 1" .
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero if the current card is the first card.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-* - A non-zero value is returned if the FitsChan is empty.
-*-
-*/
-
-/* Return if no FitsChan was supplied, or if the FitsChan is empty. */
- if ( !this || !this->head ) return 1;
-
-/* Ensure the source function has been called */
- ReadFromSource( this, status );
-
-/* If the current card is at the head of the linked list, it is the first
- card. */
- return this->card == this->head;
-}
-
-/*
-*++
-* Name:
-c astGetFits<X>
-f AST_GETFITS<X>
-
-* Purpose:
-* Get a named keyword value from a FitsChan.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "fitschan.h"
-c int astGetFits<X>( AstFitsChan *this, const char *name, <X>type *value )
-f RESULT = AST_GETFITS<X>( THIS, NAME, VALUE, STATUS )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-* This is a family of functions which gets a value for a named keyword
-* from a FitsChan using one of several different data types. The data
-* type of the returned value is selected by replacing <X> in the function
-* name by one of the following strings representing the recognised FITS
-* data types:
-*
-* The data type of the returned value is selected by replacing <X> in the
-* function name by one of the following strings representing the
-* recognised FITS data types:
-*
-* - CF - Complex floating point values.
-* - CI - Complex integer values.
-* - F - Floating point values.
-* - I - Integer values.
-* - L - Logical (i.e. boolean) values.
-* - S - String values.
-* - CN - A "CONTINUE" value, these are treated like string values, but
-* are encoded without an equals sign.
-*
-* The data type of the "value"
-c parameter
-f argument
-* depends on <X> as follows:
-*
-c - CF - "double *" (a pointer to a 2 element array to hold the real and
-c imaginary parts of the complex value).
-c - CI - "int *" (a pointer to a 2 element array to hold the real and
-c imaginary parts of the complex value).
-c - F - "double *".
-c - I - "int *".
-c - L - "int *".
-c - S - "char **" (a pointer to a static "char" array is returned at the
-c location given by the "value" parameter, Note, the stored string
-c may change on subsequent invocations of astGetFitsS so a
-c permanent copy should be taken of the string if necessary).
-c - CN - Like"S".
-f - CF - DOUBLE PRECISION(2) (a 2 element array to hold the real and
-f imaginary parts of the complex value).
-f - CI - INTEGER(2) (a 2 element array to hold the real and imaginary
-f parts of the complex value).
-f - F - DOUBLE PRECISION.
-f - I - INTEGER
-f - L - LOGICAL
-f - S - CHARACTER
-f - CN - CHARACTER
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the FitsChan.
-c name
-f NAME = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated character string
-f A character string
-* containing the FITS keyword name. This may be a complete FITS
-* header card, in which case the keyword to use is extracted from
-* it. No more than 80 characters are read from this string.
-c value
-f VALUE = <X>type (Given)
-c A pointer to a
-f A
-* buffer to receive the keyword value. The data type depends on <X>
-* as described above.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astGetFits<X><X>()
-f AST_GETFITS<X> = LOGICAL
-c A value of zero
-f .FALSE.
-* is returned if the keyword was not found in the FitsChan (no error
-* is reported). Otherwise, a value of
-c one
-f .TRUE.
-* is returned.
-
-* Notes:
-* - The card following the current card is checked first. If this is
-* not the required card, then the rest of the FitsChan is searched,
-* starting with the first card added to the FitsChan. Therefore cards
-* should be accessed in the order they are stored in the FitsChan (if
-* possible) as this will minimise the time spent searching for cards.
-* - If the requested card is found, it becomes the current card,
-* otherwise the current card is left pointing at the "end-of-file".
-* - If the stored keyword value is not of the requested type, it is
-* converted into the requested type.
-* - If the keyword is found in the FitsChan, but has no associated
-* value, an error is reported. If necessary, the
-c astTestFits
-f AST_TESTFITS
-* function can be used to determine if the keyword has a defined
-* value in the FitsChan prior to calling this function.
-* - An error will be reported if the keyword name does not conform
-* to FITS requirements.
-c - Zero
-* - .FALSE.
-* is returned as the function value if an error has already occurred,
-* or if this function should fail for any reason.
-* - The FITS standard says that string keyword values should be
-* padded with trailing spaces if they are shorter than 8 characters.
-* For this reason, trailing spaces are removed from the string
-* returned by
-c astGetFitsS
-f AST_GETFITSS
-* if the original string (including any trailing spaces) contains 8
-* or fewer characters. Trailing spaces are not removed from longer
-* strings.
-*--
-*/
-
-/* Define a macro which expands to the implementation of the astGetFits<X>
- routine for a given data type. */
-
-#define MAKE_FGET(code,ctype,ftype) \
-static int GetFits##code( AstFitsChan *this, const char *name, ctype value, int *status ){ \
-\
-/* Local Variables: */ \
- const char *class; /* Object class */ \
- const char *method; /* Calling method */ \
- char *lcom; /* Supplied keyword comment */ \
- char *lname; /* Supplied keyword name */ \
- char *lvalue; /* Supplied keyword value */ \
- char *string; /* Pointer to returned string value */ \
- char *c; /* Pointer to next character */ \
- int cl; /* Length of string value */ \
- int ret; /* The returned value */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return 0; \
-\
-/* Ensure the source function has been called */ \
- ReadFromSource( this, status ); \
-\
-/* Store the calling method and object class. */ \
- method = "astGetFits"#code; \
- class = astGetClass( this ); \
-\
-/* Initialise the returned value. */ \
- ret = 0; \
-\
-/* Extract the keyword name from the supplied string. */ \
- (void) Split( name, &lname, &lvalue, &lcom, method, class, status ); \
-\
-/* Attempt to find a card in the FitsChan refering to this keyword, \
- and make it the current card. Only proceed if a card was found. */ \
- if( SearchCard( this, lname, method, class, status ) ){ \
-\
-/* Convert the stored data value to the requested type, and store it in \
- the supplied buffer. */ \
- if( !CnvValue( this, ftype, 0, value, method, status ) && astOK ) { \
- astError( AST__FTCNV, "%s(%s): Cannot convert FITS keyword " \
- "'%s' to %s.", status, method, class, \
- lname, type_names[ ftype ] ); \
- } \
-\
-/* If the returned value is a string containing 8 or fewer characters, \
- replace trailing spaces with null characters. */ \
- if( astOK ) { \
- if( ftype == AST__STRING ) { \
- string = *( (char **) value ); \
- if( string ) { \
- cl =strlen( string ); \
- if( cl <= 8 ) { \
- c = string + cl - 1; \
- while( *c == ' ' && c > string ) { \
- *c = 0; \
- c--; \
- } \
- } \
- } \
- } \
-\
-/* Indicate that a value is available. */ \
- ret = 1; \
- } \
-\
- } \
-\
-/* Context error message. */ \
- if( !astOK && lname && *lname ) { \
- astError( astStatus, "%s(%s): Cannot get value for FITS keyword " \
- "'%s'.", status, method, class, lname ); \
- } \
-\
-/* Release the memory used to hold keyword name, value and comment strings. */ \
- lname = (char *) astFree( (void *) lname ); \
- lvalue = (char *) astFree( (void *) lvalue ); \
- lcom = (char *) astFree( (void *) lcom ); \
-\
-/* Return the answer. */ \
- return ret; \
-\
-}
-
-/* Use the above macro to give defintions for the astGetFits<X> method
- for each FITS data type. */
-
-MAKE_FGET(CF,double *,AST__COMPLEXF)
-MAKE_FGET(CI,int *,AST__COMPLEXI)
-MAKE_FGET(F,double *,AST__FLOAT)
-MAKE_FGET(I,int *,AST__INT)
-MAKE_FGET(L,int *,AST__LOGICAL)
-MAKE_FGET(S,char **,AST__STRING)
-MAKE_FGET(CN,char **,AST__CONTINUE)
-
-#undef MAKE_FGET
-
-static int FitsGetCom( AstFitsChan *this, const char *name,
- char **comment, int *status ){
-/*
-*+
-* Name:
-* astFitsGetCom
-
-* Purpose:
-* Get a keyword comment from a FitsChan.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int astFitsGetCom( AstFitsChan *this, const char *name,
-* char **comment )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-* This function gets the comment associated with the next occurrence of
-* a named keyword in a FitsChan.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* name
-* A pointer to a
-* string holding the keyword name. This may be a complete FITS
-* header card, in which case the keyword to use is extracted from
-* it. No more than 80 characters are read from this string.
-* comment
-* A pointer to a location at which to return a pointer to a string
-* holding the keyword comment. Note, the stored string will change on
-* subsequent invocations of astFitsGetCom so a permanent copy
-* should be taken of the string if necessary.
-
-* Returned Value:
-* astFitsGetCom()
-* A value of zero is returned if the keyword was not found before
-* the end of the FitsChan was reached (no error is reported).
-* Otherwise, a value of one is returned.
-
-* Notes:
-* - If a NULL pointer is supplied for "name" then the comment from
-* the current card is returned.
-* - The returned value is obtained from the next card refering to
-* the required keyword, starting the search with the current card.
-* Any cards occuring before the current card are not seached. If
-* the entire contents of the FitsChan must be searched, then ensure
-* the current card is the first card in the FitsChan by clearing the Card
-* attribute. This effectively "rewinds" the FitsChan.
-* - The current card is updated to become the card following the one
-* read by this function. If the card read by this function is the
-* last one in the FitsChan, then the current card is left pointing at the
-* "end-of-file".
-* - An error will be reported if the keyword name does not conform
-* to FITS requirements.
-* - A NULL pointer is returned for the comment string if the keyword
-* has no comment.
-* - Zero is returned as the function value if an error has already
-* occurred, or if this function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- const char *method; /* Calling method */
- const char *class; /* Object class */
- char *lcom; /* Supplied keyword comment */
- char *lname; /* Supplied keyword name */
- char *lvalue; /* Supplied keyword value */
- int ret; /* The returned value */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Ensure the source function has been called */
- ReadFromSource( this, status );
-
-/* Initialise the returned value. */
- ret = 0;
-
-/* Store the method name and object class. */
- method = "astFitsGetCom";
- class = astGetClass( this );
-
-/* Extract the keyword name from the supplied string (if supplied). */
- if( name ){
- (void) Split( name, &lname, &lvalue, &lcom, method, class, status );
- } else {
- lname = NULL;
- lcom = NULL;
- lvalue = NULL;
- }
-
-/* Find the next card in the FitsChan refering to this keyword. This will
- be the current card if no keyword name was supplied. The matching card
- is made the current card. Only proceed if a card was found. */
- if( FindKeyCard( this, lname, method, class, status ) ){
-
-/* Copy the comment into a static buffer, and return a pointer to it. */
- if( CardComm( this, status ) ){
- (void) strncpy( fitsgetcom_sval, CardComm( this, status ), AST__FITSCHAN_FITSCARDLEN );
- fitsgetcom_sval[ AST__FITSCHAN_FITSCARDLEN ] = 0;
- if( comment ) *comment = fitsgetcom_sval;
- } else {
- if( comment ) *comment = NULL;
- }
-
-/* Move on to the next card. */
- MoveCard( this, 1, method, class, status );
-
-/* Indicate that a value is available. */
- if( astOK ) ret = 1;
-
- }
-
-/* Release the memory used to hold keyword name, value and comment strings. */
- lname = (char *) astFree( (void *) lname );
- lvalue = (char *) astFree( (void *) lvalue );
- lcom = (char *) astFree( (void *) lcom );
-
-/* Return the answer. */
- return ret;
-
-}
-
-static int SetFits( AstFitsChan *this, const char *keyname, void *value,
- int type, const char *comment, int overwrite, int *status ){
-/*
-* Name:
-* SetFits
-
-* Purpose:
-* Store a keyword value of any type in a FitsChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int SetFits( AstFitsChan *this, const char *keyname, void *value,
-* int type, const char *comment, int overwrite, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function stores the supplied value for the supplied keyword
-* in the supplied FitsChan, assuming it is of the supplied data type.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* name
-* A pointer to a string holding the keyword name.
-* value
-* A pointer to a buffer holding the keyword value. For strings,
-* the buffer should hold the address of a pointer to the character
-* string.
-* type
-* The keyword type.
-* comment
-* A pointer to a string holding a comment to associated with the
-* keyword. If a NULL pointer or a blank string is supplied, then
-* any comment included in the string supplied for the "name" parameter
-* is used instead. If "name" contains no comment, then any existing
-* comment in the card being over-written is retained, or a NULL
-* pointer is stored if a new card is being inserted. If the data
-* value being stored for the card is the same as the card being
-* over-written, then any existing comment is retained.
-* overwrite
-* If non-zero, the new card formed from the supplied keyword name,
-* value and comment string over-writes the current card, and the
-* current card is incremented to refer to the next card. If zero, the
-* new card is inserted in front of the current card and the current
-* card is left unchanged. In either case, if the current card on
-* entry points to the "end-of-file", the new card is appended to the
-* end of the list.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A value of 0 is returned if the value could not be stored for any
-* reason. A value of 1 is returned otherwise.
-
-* Notes:
-* - Nothing is stored in the FitsChan and a value of zero is returned
-* (but no error is reported) if an AST__FLOAT value is supplied equal
-* to AST__BAD.
-
-*/
-
-/* Local Variables: */
- const char *cval;
- const char *ecval;
- double dval;
- double ecdval[ 2 ];
- double edval;
- int ecival[ 2 ];
- int eival;
- int ival;
- int ret;
-
-/* Check the global status, and the supplied pointer. */
- if( !astOK || !value ) return 0;
-
-/* Initialise the returned value to indicate that the supplied name was
- stored. */
- ret = 1;
-
-/* Check each data type in turn. */
- if( type == AST__FLOAT ){
- dval = *( (double *) value );
- if( dval != AST__BAD ) {
-
-/* If the data value has not changed, and the card has a coment,
- set the comment pointer NULL so that the existing comment will be
- retained. */
- if( overwrite && CnvValue( this, type, 0, &edval, "SetFits",
- status ) &&
- CardComm( this, status ) ) {
- if( EQUAL( edval, dval ) ) comment = NULL;
- }
-
- astSetFitsF( this, keyname, dval, comment, overwrite );
- } else {
- ret = 0;
- }
-
- } else if( type == AST__STRING ){
- cval = *( (char **) value);
- if( cval ){
-
-/* If the data value has not changed, retain the original comment. */
- if( overwrite && CnvValue( this, type, 0, &ecval, "SetFits",
- status ) &&
- CardComm( this, status ) ) {
- if( Similar( ecval, cval, status ) ) comment = NULL;
- }
-
-/* Ignore comments if they are identical to the keyword value. */
- if( comment && !strcmp( cval, comment ) ) comment = NULL;
-
- astSetFitsS( this, keyname, cval, comment, overwrite );
- } else {
- ret = 0;
- }
-
- } else if( type == AST__CONTINUE ){
- cval = *( (char **) value);
- if( cval ){
- astSetFitsCN( this, keyname, cval, comment, overwrite );
- } else {
- ret = 0;
- }
-
- } else if( type == AST__COMMENT ){
- astSetFitsCom( this, keyname, comment, overwrite );
-
- } else if( type == AST__INT ){
- ival = *( (int *) value );
-
-/* If the data value has not changed, retain the original comment. */
- if( overwrite && CnvValue( this, type, 0, &eival, "SetFits",
- status ) &&
- CardComm( this, status ) ) {
- if( eival == ival ) comment = NULL;
- }
-
- astSetFitsI( this, keyname, ival, comment, overwrite );
-
- } else if( type == AST__COMPLEXF ){
- if( ( (double *) value )[0] != AST__BAD &&
- ( (double *) value )[1] != AST__BAD ) {
-
-/* If the data value has not changed, retain the original comment. */
- if( overwrite && CnvValue( this, type, 0, ecdval, "SetFits",
- status ) &&
- CardComm( this, status ) ) {
- if( EQUAL( ecdval[ 0 ], ( (double *) value )[ 0 ] ) &&
- EQUAL( ecdval[ 1 ], ( (double *) value )[ 1 ] ) ) comment = NULL;
- }
-
- astSetFitsCF( this, keyname, (double *) value, comment, overwrite );
- } else {
- ret = 0;
- }
-
- } else if( type == AST__COMPLEXI ){
-
-/* If the data value has not changed, retain the original comment. */
- if( overwrite && CnvValue( this, type, 0, ecival, "SetFits",
- status ) &&
- CardComm( this, status ) ) {
- if( ecival[ 0 ] == ( (int *) value )[ 0 ] &&
- ecival[ 1 ] == ( (int *) value )[ 1 ] ) comment = NULL;
- }
-
- astSetFitsCI( this, keyname, (int *) value, comment, overwrite );
-
- } else if( type == AST__LOGICAL ){
- ival = ( *( (int *) value ) != 0 );
-
-/* If the data value has not changed, retain the original comment. */
- if( overwrite && CnvValue( this, type, 0, &eival, "SetFits",
- status ) &&
- CardComm( this, status ) ) {
- if( eival == ival ) comment = NULL;
- }
-
- astSetFitsL( this, keyname, ival, comment, overwrite );
-
-
- } else if( type == AST__UNDEF ){
- if( overwrite && CardType( this, status ) == AST__UNDEF && CardComm( this, status ) ) {
- comment = NULL;
- }
- astSetFitsU( this, keyname, comment, overwrite );
-
- }
-
- return ret;
-}
-
-/*
-*++
-* Name:
-c astSetFits<X>
-f AST_SETFITS<X>
-
-* Purpose:
-* Store a keyword value in a FitsChan.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "fitschan.h"
-c void astSetFits<X>( AstFitsChan *this, const char *name, <X>type value,
-c const char *comment, int overwrite )
-f CALL AST_SETFITS<X>( THIS, NAME, VALUE, COMMENT, OVERWRITE, STATUS )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-c This is a family of functions which store values for named keywords
-f This is a family of routines which store values for named keywords
-* within a FitsChan at the current card position. The supplied keyword
-* value can either over-write an existing keyword value, or can be
-* inserted as a new header card into the FitsChan.
-*
-c The keyword data type is selected by replacing <X> in the function name
-f The keyword data type is selected by replacing <X> in the routine name
-* by one of the following strings representing the recognised FITS data
-* types:
-*
-* - CF - Complex floating point values.
-* - CI - Complex integer values.
-* - F - Floating point values.
-* - I - Integer values.
-* - L - Logical (i.e. boolean) values.
-* - S - String values.
-* - CN - A "CONTINUE" value, these are treated like string values, but
-* are encoded without an equals sign.
-*
-* The data type of the "value" parameter depends on <X> as follows:
-*
-c - CF - "double *" (a pointer to a 2 element array holding the real and
-c imaginary parts of the complex value).
-c - CI - "int *" (a pointer to a 2 element array holding the real and
-c imaginary parts of the complex value).
-c - F - "double".
-c - I - "int".
-c - L - "int".
-c - S - "const char *".
-c - CN - "const char *".
-*
-f - CF - DOUBLE PRECISION(2) (a 2 element array holding the real and
-f imaginary parts of the complex value).
-f - CI - INTEGER(2) (a 2 element array holding the real and imaginary
-f parts of the complex value).
-f - F - DOUBLE PRECISION.
-f - I - INTEGER
-f - L - LOGICAL
-f - S - CHARACTER
-f - CN - CHARACTER
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the FitsChan.
-c name
-f NAME = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated character string
-f A character string
-* containing the FITS keyword name. This may be a complete FITS
-* header card, in which case the keyword to use is extracted from
-* it. No more than 80 characters are read from this string.
-c value
-f VALUE = <X>type (Given)
-* The keyword value to store with the named keyword. The data type
-* of this parameter depends on <X> as described above.
-c comment
-f COMMENT = CHARACTER * ( * ) (Given)
-c A pointer to a null terminated string
-f A string
-* holding a comment to associated with the keyword.
-c If a NULL pointer or
-f If
-* a blank string is supplied, then any comment included in the string
-* supplied for the
-c "name" parameter is used instead. If "name"
-f NAME parameter is used instead. If NAME
-* contains no comment, then any existing comment in the card being
-* over-written is retained. Otherwise, no comment is stored with
-* the card.
-c overwrite
-f OVERWRITE = LOGICAL (Given)
-c If non-zero,
-f If .TRUE.,
-* the new card formed from the supplied keyword name, value and comment
-* string over-writes the current card, and the current card is
-* incremented to refer to the next card (see the "Card" attribute). If
-c zero,
-f .FALSE.,
-* the new card is inserted in front of the current card and the current
-* card is left unchanged. In either case, if the current card on entry
-* points to the "end-of-file", the new card is appended to the end of
-* the list.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - The
-c function astSetFitsU
-f routine AST_SETFITSU
-* can be used to indicate that no value is associated with a keyword.
-* - The
-c function astSetFitsCM
-f routine AST_SETFITSCM
-* can be used to store a pure comment card (i.e. a card with a blank
-* keyword).
-* - To assign a new value for an existing keyword within a FitsChan,
-c first find the card describing the keyword using astFindFits, and
-c then use one of the astSetFits<X> family to over-write the old value.
-f first find the card describing the keyword using AST_FINDFITS, and
-f then use one of the AST_SETFITS<X> family to over-write the old value.
-* - If, on exit, there are no cards following the card written by
-c this function, then the current card is left pointing at the
-f this routine, then the current card is left pointing at the
-* "end-of-file".
-* - An error will be reported if the keyword name does not conform
-* to FITS requirements.
-*--
-*/
-
-/* Define a macro which expands to the implementation of the astSetFits<X>
- routine for a given data type. */
-
-#define MAKE_FSET(code,ctype,ftype,valexp) \
-static void SetFits##code( AstFitsChan *this, const char *name, ctype value, const char *comment, int overwrite, int *status ) { \
-\
-/* Local variables: */ \
- const char *class; /* Object class */ \
- const char *method; /* Calling method */ \
- const char *com; /* Comment to use */ \
- char *lcom; /* Supplied keyword comment */ \
- char *lname; /* Supplied keyword name */ \
- char *lvalue; /* Supplied keyword value */ \
- int free_com; /* Should com be freed before returned? */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Ensure the source function has been called */ \
- ReadFromSource( this, status ); \
-\
-/* Store the object clas and calling method. */ \
- class = astGetClass( this ); \
- method = "astSetFits"#code; \
-\
-/* Extract the keyword name from the supplied string. */ \
- (void) Split( name, &lname, &lvalue, &lcom, method, class, status ); \
-\
-/* Initialise a pointer to the comment to be stored. If the supplied \
- comment is blank, use the comment given with "name". */ \
- com = ChrLen( comment, status ) ? comment : lcom; \
-\
-/* If the comment is still blank, use the existing comment if we are \
- over-writing, or a NULL pointer otherwise. */ \
- free_com = 0; \
- if( !ChrLen( com, status ) ) { \
- com = NULL; \
- if( overwrite ) { \
- if( CardComm( this, status ) ){ \
- com = (const char *) astStore( NULL, (void *) CardComm( this, status ), \
- strlen( CardComm( this, status ) ) + 1 ); \
- free_com = 1; \
- } \
- } \
- } \
-\
-/* Insert the new card. */ \
- InsCard( this, overwrite, lname, ftype, valexp, com, method, class, status ); \
-\
-/* Release the memory used to hold keyword name, value and comment strings. */ \
- lname = (char *) astFree( (void *) lname ); \
- lvalue = (char *) astFree( (void *) lvalue ); \
- lcom = (char *) astFree( (void *) lcom ); \
-\
-/* Release the memory holding the stored comment string, so long as it was \
- allocated within this function. */ \
- if( free_com ) com = (const char *) astFree( (void *) com ); \
-\
-}
-
-/* Use the above macro to give defintions for the astSetFits<X> method
- for each FITS data type. */
-
-MAKE_FSET(I,int,AST__INT,(void *)&value)
-MAKE_FSET(F,double,AST__FLOAT,(void *)&value)
-MAKE_FSET(S,const char *,AST__STRING,(void *)value)
-MAKE_FSET(CN,const char *,AST__CONTINUE,(void *)value)
-MAKE_FSET(CF,double *,AST__COMPLEXF,(void *)value)
-MAKE_FSET(CI,int *,AST__COMPLEXI,(void *)value)
-MAKE_FSET(L,int,AST__LOGICAL,(void *)&value)
-
-#undef MAKE_FSET
-
-static void SetFitsU( AstFitsChan *this, const char *name, const char *comment,
- int overwrite, int *status ) {
-/*
-*++
-* Name:
-c astSetFitsU
-f AST_SETFITSU
-
-* Purpose:
-* Store an undefined keyword value in a FitsChan.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "fitschan.h"
-c void astSetFitsU( AstFitsChan *this, const char *name,
-c const char *comment, int overwrite )
-f CALL AST_SETFITSU( THIS, NAME, COMMENT, OVERWRITE, STATUS )
-
-* Description:
-* This
-c function
-f routine
-* stores an undefined value for a named keyword within
-* a FitsChan at the current card position. The new undefined value
-* can either over-write an existing keyword value, or can be inserted
-* as a new header card into the FitsChan.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the FitsChan.
-c name
-f NAME = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated character string
-f A character string
-* containing the FITS keyword name. This may be a complete FITS
-* header card, in which case the keyword to use is extracted from
-* it. No more than 80 characters are read from this string.
-c comment
-f COMMENT = CHARACTER * ( * ) (Given)
-c A pointer to a null terminated string
-f A string
-* holding a comment to associated with the keyword.
-c If a NULL pointer or
-f If
-* a blank string is supplied, then any comment included in the string
-* supplied for the
-c "name" parameter is used instead. If "name"
-f NAME parameter is used instead. If NAME
-* contains no comment, then any existing comment in the card being
-* over-written is retained. Otherwise, no comment is stored with
-* the card.
-c overwrite
-f OVERWRITE = LOGICAL (Given)
-c If non-zero,
-f If .TRUE.,
-* the new card formed from the supplied keyword name and comment
-* string over-writes the current card, and the current card is
-* incremented to refer to the next card (see the "Card" attribute). If
-c zero,
-f .FALSE.,
-* the new card is inserted in front of the current card and the current
-* card is left unchanged. In either case, if the current card on entry
-* points to the "end-of-file", the new card is appended to the end of
-* the list.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - If, on exit, there are no cards following the card written by
-* this function, then the current card is left pointing at the
-* "end-of-file".
-* - An error will be reported if the keyword name does not conform
-* to FITS requirements.
-*--
-*/
-
-/* Local variables: */
- const char *class; /* Object class */
- const char *method; /* Calling method */
- const char *com; /* Comment to use */
- char *lcom; /* Supplied keyword comment */
- char *lname; /* Supplied keyword name */
- char *lvalue; /* Supplied keyword value */
- int free_com; /* Should com be freed before returned? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Ensure the source function has been called */
- ReadFromSource( this, status );
-
-/* Store the object clas and calling method. */
- class = astGetClass( this );
- method = "astSetFitsU";
-
-/* Extract the keyword name from the supplied string. */
- (void) Split( name, &lname, &lvalue, &lcom, method, class, status );
-
-/* Initialise a pointer to the comment to be stored. If the supplied
- comment is blank, use the comment given with "name". */
- com = ChrLen( comment, status ) ? comment : lcom;
-
-/* If the comment is still blank, use the existing comment if we are
- over-writing, or a NULL pointer otherwise. */
- free_com = 0;
- if( !ChrLen( com, status ) ) {
- com = NULL;
- if( overwrite ) {
- if( CardComm( this, status ) ){
- com = (const char *) astStore( NULL, (void *) CardComm( this, status ),
- strlen( CardComm( this, status ) ) + 1 );
- free_com = 1;
- }
- }
- }
-
-/* Insert the new card. */
- InsCard( this, overwrite, lname, AST__UNDEF, NULL, com, method, class,
- status );
-
-/* Release the memory used to hold keyword name, value and comment strings. */
- lname = (char *) astFree( (void *) lname );
- lvalue = (char *) astFree( (void *) lvalue );
- lcom = (char *) astFree( (void *) lcom );
-
-/* Release the memory holding the stored comment string, so long as it was
- allocated within this function. */
- if( free_com ) com = (const char *) astFree( (void *) com );
-
-}
-
-static void SetFitsCM( AstFitsChan *this, const char *comment,
- int overwrite, int *status ) {
-/*
-*++
-* Name:
-c astSetFitsCM
-f AST_SETFITSCM
-
-* Purpose:
-* Store a comment card in a FitsChan.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "fitschan.h"
-c void astSetFitsCM( AstFitsChan *this, const char *comment,
-c int overwrite )
-f CALL AST_SETFITSCM( THIS, COMMENT, OVERWRITE, STATUS )
-
-* Description:
-* This
-c function
-f routine
-* stores a comment card ( i.e. a card with no keyword name or equals
-* sign) within a FitsChan at the current card position. The new card
-* can either over-write an existing card, or can be inserted as a new
-* card into the FitsChan.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the FitsChan.
-c comment
-f COMMENT = CHARACTER * ( * ) (Given)
-c A pointer to a null terminated string
-f A string
-* holding the text of the comment card.
-c If a NULL pointer or
-f If
-* a blank string is supplied, then a totally blank card is produced.
-c overwrite
-f OVERWRITE = LOGICAL (Given)
-c If non-zero,
-f If .TRUE.,
-* the new card over-writes the current card, and the current card is
-* incremented to refer to the next card (see the "Card" attribute). If
-c zero,
-f .FALSE.,
-* the new card is inserted in front of the current card and the current
-* card is left unchanged. In either case, if the current card on entry
-* points to the "end-of-file", the new card is appended to the end of
-* the list.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - If, on exit, there are no cards following the card written by
-* this function, then the current card is left pointing at the
-* "end-of-file".
-*--
-*/
-
-/* Just call astSetFitsCom with a blank keyword name. */
- astSetFitsCom( this, "", comment, overwrite );
-}
-
-static void SetFitsCom( AstFitsChan *this, const char *name,
- const char *comment, int overwrite, int *status ){
-/*
-*+
-* Name:
-* astSetFitsCom
-
-* Purpose:
-* Store a comment for a keyword in a FitsChan.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void astSetFitsCom( AstFitsChan *this, const char *name,
-* const char *comment, int overwrite )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-* This function replaces the comment within an existing card, or
-* stores a new comment card within a FitsChan.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* name
-* A pointer to a
-* string holding the keyword name. This may be a complete FITS
-* header card, in which case the keyword to use is extracted from
-* it. No more than 80 characters are read from this string.
-* comment
-* A pointer to a
-* string holding a comment to associated with the keyword.
-* If a NULL or
-* blank string is supplied, any existing comment associated with
-* the keyword is removed.
-* overwrite
-* If non-zero, the new comment replaces the comment in the current
-* card, and the current card is then incremented to refer to the next
-* card. If zero, a new comment card is inserted in front of the current
-* card and the current card is left unchanged. In either case, if the
-* current card on entry points to the "end-of-file", the new card is
-* appended to the end of the list.
-
-* Notes:
-* - When replacing an existing comment, any existing keyword value is
-* retained only if the supplied keyword name is the same as the keyword
-* name in the current card. If the keyword names are different, then
-* the new name replaces the old name, and any existing keyword data value
-* is deleted. The card thus becomes a comment card with the supplied
-* keyword name and comment, but no data value.
-* - If, on exit, there are no cards following the card written by
-* this function, then the current card is left pointing at the
-* "end-of-file".
-* - The current card can be set explicitly before calling this function
-* either by assigning a value to the Card attribute (if the index of the
-* required card is already known), or using astFindFits (if only the
-* keyword name is known).
-* - An error will be reported if the keyword name does not conform
-* to FITS requirements.
-*-
-*/
-
-/* Local variables: */
- const char *class; /* Pointer to object class string */
- const char *method; /* Pointer to calling method string */
- const char *cname; /* The existing keyword name */
- const char *com; /* The comment to use */
- char *lcom; /* Supplied keyword comment */
- char *lname; /* Supplied keyword name */
- char *lvalue; /* Supplied keyword value */
- void *old_data; /* Pointer to the old data value */
- void *data; /* Pointer to data value to be stored */
- size_t size; /* The size of the data value */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Ensure the source function has been called */
- ReadFromSource( this, status );
-
-/* Store the calling method and object class. */
- method = "astSetFitsCom";
- class = astGetClass( this );
-
-/* Extract the keyword name, etc, from the supplied string. */
- (void) Split( name, &lname, &lvalue, &lcom, method, class, status );
-
-/* If a blank comment has been supplied, use NULL instead. */
- com = ChrLen( comment, status )? comment : NULL;
-
-/* If we are inserting a new card, or over-writing an old card with a
- different name, create and store a comment card with the given keyword
- name and comment, but no data value. */
- cname = CardName( this, status );
- if( !overwrite || !cname || strcmp( lname, cname ) ){
- InsCard( this, overwrite, lname, AST__COMMENT, NULL, com, method, class, status );
-
-/* If we are overwriting an existing keyword comment, use the data type
- and value from the existing current card. Note, we have to take a copy
- of the old data value because InsCard over-writes by deleting the old
- card and then inserting a new one. */
- } else {
- old_data = CardData( this, &size, status );
- data = astStore( NULL, old_data, size );
- InsCard( this, 1, lname, CardType( this, status ), data, com, method, class, status );
- data = astFree( data );
- }
-
-/* Release the memory used to hold keyword name, value and comment strings. */
- lname = (char *) astFree( (void *) lname );
- lvalue = (char *) astFree( (void *) lvalue );
- lcom = (char *) astFree( (void *) lcom );
-
-}
-
-static void FixNew( AstFitsChan *this, int flag, int remove,
- const char *method, const char *class, int *status ){
-/*
-*
-* Name:
-* FixNew
-
-* Purpose:
-* Remove "new" flags from the whole FitsChan, and optionally remove
-* "new" cards.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void FixNew( AstFitsChan *this, int flag, int remove,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-* This function searches the entire FitsChan for cards which are
-* marked as new using the supplied flag (NEW1 or NEW2). If "remove"
-* is non-zero, these cards are completely removed from the FitsChan
-* (not just marked as used). If "remove" is zero, they are retained
-* and the specified flag is cleared.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* flag
-* The flag to use; NEW1 or NEW2.
-* remove
-* Remove flagged cards from the FitsChan?
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function attempts to execute even if an error has occurred.
-* - If any cards are removed, the current Card is left at "end-of-file"
-* on exit. If no cards are removed, the original current card is
-* retained.
-
-*-
-*/
-
-/* Local Variables: */
- int *flags; /* Pointer to flags mask for the current card */
- int icard; /* Index of current card on entry */
- int ndeleted; /* Number of cards deleted by this call */
-
-/* Return if no FitsChan was supplied, or if the FitsChan is empty. */
- if ( !this || !this->head ) return;
-
-/* Save the current card index, and rewind the FitsChan. */
- icard = astGetCard( this );
- astClearCard( this );
-
-/* Indicate no cards have yet been deleted. */
- ndeleted = 0;
-
-/* Loop through the list of FitsCards in the FitsChan until the final
- card is reached. */
- while( astOK && this->card ){
-
-/* Get a pointer to the flags mask for this card. */
- flags = CardFlags( this, status );
-
-/* See if the Card has been marked with the requeste new flag. */
- if( flags && ( (*flags) & flag ) ) {
-
-/* If requested, remove the card. This will automatically move the
- current card on to the next card. */
- if( remove ){
- DeleteCard( this, method, class, status );
- ndeleted++;
-
-/* Otherwise, clear the flag. */
- } else {
- *flags = (*flags) & ~flag;
-
-/* Increment the card count and move on to the next card. */
- MoveCard( this, 1, method, class, status );
-
- }
-
-/* Move on to the next card if this card is not marked with the requested
- new flag. */
- } else {
- MoveCard( this, 1, method, class, status );
- }
- }
-
-/* If no cards were removed, we can safely re-instate the original
- current card. Otherwise, the current card is left at "end-of-file". */
- if( ndeleted == 0 ) astSetCard( this, icard );
-
-/* Return */
- return;
-
-}
-
-static void FixUsed( AstFitsChan *this, int reset, int used, int remove,
- const char *method, const char *class, int *status ){
-/*
-*
-* Name:
-* FixUsed
-
-* Purpose:
-* Remove "provisionally used" flags from the whole FitsChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void FixUsed( AstFitsChan *this, int reset, int used, int remove,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-* This function searches the entire FitsChan for cards which are
-* marked as "provisionally used". The "provisionally used" flag is
-* cleared for each such card. In addition, if "used" is non-zero then
-* each such card is flagged as having been "definitely used". If
-* "remove" is non-zero, then all "provisionally used" cards are deleted
-* from the FitsChan.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* reset
-* Set all cards so that they are neither provisionally used or
-* definitely used. In this case neither the "used" nor the
-* "remove" parameter are accssed.
-* used
-* Have the provisionally used cards definitely been used?
-* remove
-* Should provisionally used cards be deleted?
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function attempts to execute even if an error has occurred.
-
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- FitsCard *card0; /* Pointer to current FitsCard */
- int *flags; /* Pointer to flags mask for the current card */
- int old_ignore_used; /* Original value of variable ignore_used */
- int old_status; /* Original inherited status value */
- int rep; /* Original error reporting flag */
-
-/* Return if no FitsChan was supplied, or if the FitsChan is empty. */
- if ( !this || !this->head ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Temporarily clear any bad status value and supress error reporting in
- this function. */
- old_status = astStatus;
- astClearStatus;
- rep = astReporting( 0 );
-
-/* Indicate that we should not skip over cards marked as having been
- read. */
- old_ignore_used = ignore_used;
- ignore_used = 0;
-
-/* Save a pointer to the current card, and the reset the current card to
- be the first card. */
- card0 = this->card;
- astClearCard( this );
-
-/* Loop through the list of FitsCards in the FitsChan until the final
- card is reached. */
- while( this->card ){
-
-/* Get a pointer to the flags mask for this card. */
- flags = CardFlags( this, status );
-
-/* Reset both used flags if required. */
- if( reset ) {
- *flags = (*flags) & ~PROVISIONALLY_USED;
- *flags = (*flags) & ~USED;
- MoveCard( this, 1, method, class, status );
-
-/* Otherwise perform the actions indicated by parameters "used" and
- "remove". */
- } else {
-
-/* See if the Card has been provisionally used. */
- if( flags && ( (*flags) & PROVISIONALLY_USED ) ) {
-
-/* Clear the provisionally used flag. */
- *flags = (*flags) & ~PROVISIONALLY_USED;
-
-/* If required, set the definitely used flag. */
- if( used ) *flags = (*flags) | USED;
-
-/* If required, delete the card. The next card is made current. If we are
- about to delete the original current card, we need to update the
- pointer to the card to be made current at the end of this function.
- If we end up back at the head of the chain, indicate that we have
- reached the end of file by setting card0 NULL. */
- if( remove ) {
- if( card0 == this->card && card0 ) {
- card0 = ( (FitsCard *) this->card )->next;
- if( (void *) card0 == this->head ) card0 = NULL;
- }
- DeleteCard( this, method, class, status );
-
-/* Otherwise, just move on to the next card. */
- } else {
- MoveCard( this, 1, method, class, status );
- }
-
-/* If this card has not bee provisionally used, move on to the next card. */
- } else {
- MoveCard( this, 1, method, class, status );
- }
- }
- }
-
-/* Re-instate the original current card. */
- this->card = card0;
-
-/* If this card is now flagged as definitely used, move forward to the
- next un-used card. */
- flags = CardFlags( this, status );
- if( flags && (*flags & USED ) ) {
- ignore_used = 1;
- MoveCard( this, 1, method, class, status );
- }
-
-/* Re-instate the original flag indicating if cards marked as having been
- read should be skipped over. */
- ignore_used = old_ignore_used;
-
-/* Re-instate the original status value and error reporting condition. */
- astReporting( rep );
- astSetStatus( old_status );
-
-}
-
-static void FormatCard( AstFitsChan *this, char *buf, const char *method, int *status ){
-/*
-*
-* Name:
-* FormatCard
-
-* Purpose:
-* Formats the current card.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void FormatCard( AstFitsChan *this, char *buf, const char *method, int *status )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-* This function write the current card into the supplied character
-* buffer as a complete FITS header card.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* buf
-* A character string into which the header card is written. This
-* should be at least 81 characters long. The returned string is
-* padded with spaces upto column 80. A terminating null character
-* is added.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - An error is reported if the requested header card does not conform to
-* FITS standards.
-*
-*/
-
-/* Local Variables: */
- const char *com; /* Pointer to comment string to use */
- int comlen; /* Length of comment string */
- int comstart; /* Column in which to start comment */
- int i; /* Loop counter for characters */
- int len; /* Output string length */
- int digits; /* No. of digits to use when formatting floating point values */
- int type; /* Card data type */
-
-/* Check the global error status, and check the current card is defined. */
- if ( !astOK || astFitsEof( this ) ) return;
-
-/* Get a pointer to the comment to use and determine its length. */
- com = CardComm( this, status );
- comlen = ChrLen( com, status );
-
-/* Copy the keyword name to the start of the output buffer, and store
- its length. */
- len = (int) strlen( strcpy( buf, CardName( this, status ) ) );
-
-/* Pad the name with spaces up to column 8. */
- while ( len < FITSNAMLEN ) buf[ len++ ] = ' ';
-
-/* If the card contains a keyword value... */
- type = CardType( this, status );
- if( type != AST__COMMENT ){
-
-/* Get the number of digits to use when formatting floating point values. */
- digits = astGetFitsDigits( this );
-
-/* Put an equals sign in column 9 (or a space if the keyword is a CONTINUE
- card), followed by a space in column 10. */
- buf[ len++ ] = ( type == AST__CONTINUE ) ? ' ' : '=';
- buf[ len++ ] = ' ';
-
-/* Format and store the keyword value, starting at column 11 and update the
- output string length. */
- len += EncodeValue( this, buf + len, FITSNAMLEN + 3, digits,
- method, status );
-
-/* If there is a comment, determine which column it should start in so that
- it ends in column 80. */
- if( com ){
- comstart = AST__FITSCHAN_FITSCARDLEN - ( comlen - 2 ) + 1;
-
-/* Adjust the starting column to 32 if possible, avoiding over-writing
- the value, or running off the end of the card unless this is
- unavoidable. */
- if ( comstart > FITSCOMCOL ) comstart = FITSCOMCOL;
- if ( comstart < len + 1 ) comstart = len + 1;
-
-/* Pad the output buffer with spaces up to the start of the comment. */
- while ( len < comstart - 1 ) buf[ len++ ] = ' ';
-
-/* Then append "/ " to introduce the comment, truncating if the card
- length forces this. */
- for ( i = 0; ( i < 2 ) && ( len < AST__FITSCHAN_FITSCARDLEN ); i++ ) {
- buf[ len++ ] = "/ "[ i ];
- }
- }
- }
-
-/* Append any comment, truncating it if the card length forces
- this. */
- if ( com ) {
- for ( i = 0; com[ i ] && ( len < AST__FITSCHAN_FITSCARDLEN ); i++ ) {
- buf[ len++ ] = com[ i ];
- }
- }
-
-/* Pad with spaces up to the end of the card. */
- while ( len < AST__FITSCHAN_FITSCARDLEN ) buf[ len++ ] = ' ';
-
-/* Terminate it. */
- buf[ AST__FITSCHAN_FITSCARDLEN ] = 0;
-
-}
-
-static int FullForm( const char *list, const char *test, int abbrev, int *status ){
-/*
-* Name:
-* FullForm
-
-* Purpose:
-* Identify the full form of an option string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int FullForm( const char *list, const char *test, int abbrev, int *status )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-* This function identifies a supplied test option within a supplied
-* list of valid options, and returns the index of the option within
-* the list. The test option may be abbreviated, and case is
-* insignificant.
-
-* Parameters:
-* list
-* A list of space separated option strings.
-* test
-* A candidate option string.
-* abbrev
-* 1 if abbreviations are to be accepted. Zero otherwise.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The index of the identified option within the supplied list, starting
-* at zero. -1 is returned if the option is not recognised, and (if
-* abbrev is 1 ) -2 if the option is ambiguous (no errors are reported
-* in these cases). If abbrev is zero, the returned index will be the
-* index of the first matching string.
-*
-
-* Notes:
-* - A value of -1 is returned if an error has already occurred, or
-* if this function should fail for any reason.
-
-*/
-
-/* Local Variables: */
- char *context; /* Context used by strtok_r */
- char *llist; /* Pointer to a local copy of the options list */
- char *option; /* Pointer to the start of the next option */
- int i; /* Current option index */
- int len; /* Length of supplied option */
- int nmatch; /* Number of matching options */
- int ret; /* The returned index */
-
-/* Initialise the answer to indicate that the option has not been
- identified. */
- ret = -1;
-
-/* Avoid compiler warnings. */
- context = NULL;
-
-/* Check global status. */
- if( !astOK ) return ret;
-
-/* Take a local copy of the supplied options list. This is necessary since
- "strtok" modified the string by inserting null characters. */
- llist = (char *) astStore( NULL, (void *) list, strlen(list) + 1 );
- if( astOK ){
-
-/* Save the number of characters in the supplied test option (excluding
- trailing spaces). */
- len = ChrLen( test, status );
-
-/* Compare the supplied test option against each of the known options in
- turn. Count the number of matches. */
- nmatch = 0;
-#if HAVE_STRTOK_R
- option = strtok_r( llist, " ", &context );
-#else
- option = strtok( llist, " " );
-#endif
- i = 0;
- while( option ){
-
-/* If every character in the supplied label matches the corresponding
- character in the current test label we have a match. Increment the
- number of matches and save the current item index. If abbreviation is
- not allowed ensure that the lengths of the strings are equal. */
- if( !Ustrncmp( test, option, len, status ) && ( abbrev ||
- len == ChrLen( option, status ) ) ) {
- nmatch++;
- ret = i;
- if( !abbrev ) break;
- }
-
-/* Get a pointer to the next option. */
-#if HAVE_STRTOK_R
- option = strtok_r( NULL, " ", &context );
-#else
- option = strtok( NULL, " " );
-#endif
- i++;
- }
-
-/* Return -1 if no match was found. */
- if( !nmatch ){
- ret = -1;
-
-/* Return -2 if the option was ambiguous. */
- } else if( abbrev && nmatch > 1 ){
- ret = -2;
- }
-
-/* Free the local copy of the options list. */
- llist = (char *) astFree( (void *) llist );
- }
-
-/* Return the answer. */
- return ret;
-}
-
-static const char *GetAllWarnings( AstFitsChan *this, int *status ){
-/*
-*+
-* Name:
-* astGetAllWarnings
-
-* Purpose:
-* Return a list of all condition names.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "fitschan.h"
-* const char *GetAllWarnings( AstFitsChan *this )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-* This function returns a space separated lits of the condition names
-* currently recognized by the Warnings attribute.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-
-* Returned Value:
-* A pointer to a static string holding the condition names.
-
-* Notes:
-* - This routine does not check the inherited status.
-
-*-
-*/
-
-/* Return the result. */
- return ALLWARNINGS;
-
-}
-
-const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a FitsChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* FitsChan member function (over-rides the protected astGetAttrib
-* method inherited from the Channel class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a FitsChan, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the FitsChan, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the FitsChan. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstFitsChan *this; /* Pointer to the FitsChan structure */
- const char *result; /* Pointer value to return */
- int ival; /* Integer attribute value */
- int len; /* Length of attrib string */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the FitsChan structure. */
- this = (AstFitsChan *) this_object;
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Card. */
-/* ----- */
- if ( !strcmp( attrib, "card" ) ) {
- ival = astGetCard( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Encoding. */
-/* --------- */
- } else if ( !strcmp( attrib, "encoding" ) ) {
- ival = astGetEncoding( this );
- if ( astOK ) {
- if( ival == NATIVE_ENCODING ){
- result = NATIVE_STRING;
-
- } else if( ival == FITSPC_ENCODING ){
- result = FITSPC_STRING;
-
- } else if( ival == FITSIRAF_ENCODING ){
- result = FITSIRAF_STRING;
-
- } else if( ival == FITSAIPS_ENCODING ){
- result = FITSAIPS_STRING;
-
- } else if( ival == FITSAIPSPP_ENCODING ){
- result = FITSAIPSPP_STRING;
-
- } else if( ival == FITSCLASS_ENCODING ){
- result = FITSCLASS_STRING;
-
- } else if( ival == FITSWCS_ENCODING ){
- result = FITSWCS_STRING;
-
- } else if( ival == DSS_ENCODING ){
- result = DSS_STRING;
-
- } else {
- result = UNKNOWN_STRING;
- }
- }
-
-/* CDMatrix */
-/* -------- */
- } else if ( !strcmp( attrib, "cdmatrix" ) ) {
- ival = astGetCDMatrix( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* DefB1950 */
-/* -------- */
- } else if ( !strcmp( attrib, "defb1950" ) ) {
- ival = astGetDefB1950( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* CarLin */
-/* ------ */
- } else if ( !strcmp( attrib, "carlin" ) ) {
- ival = astGetCarLin( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Iwc */
-/* --- */
- } else if ( !strcmp( attrib, "iwc" ) ) {
- ival = astGetIwc( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Clean */
-/* ----- */
- } else if ( !strcmp( attrib, "clean" ) ) {
- ival = astGetClean( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* FitsDigits. */
-/* ----------- */
- } else if ( !strcmp( attrib, "fitsdigits" ) ) {
- ival = astGetFitsDigits( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Ncard. */
-/* ------ */
- } else if ( !strcmp( attrib, "ncard" ) ) {
- ival = astGetNcard( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* AllWarnings */
-/* ----------- */
- } else if ( !strcmp( attrib, "allwarnings" ) ) {
- result = astGetAllWarnings( this );
-
-/* Warnings. */
-/* -------- */
- } else if ( !strcmp( attrib, "warnings" ) ) {
- result = astGetWarnings( this );
-
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-
-}
-
-static int GetCard( AstFitsChan *this, int *status ){
-/*
-*+
-* Name:
-* astGetCard
-
-* Purpose:
-* Get the value of the Card attribute.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int astGetCard( AstFitsChan *this )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-* This function returns the value of the Card attribute for the supplied
-* FitsChan. This is the index of the next card to be read from the
-* FitsChan. The index of the first card is 1. If there are no more
-* cards to be read, a value one greater than the number of cards in the
-* FitsChan is returned.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-
-* Returned Value:
-* The index of the next card to be read.
-
-* Notes:
-* - A value of zero will be returned if the current card is not defined.
-* - This function attempts to execute even if an error has occurred.
-
-*-
-*/
-
-/* Local Variables: */
- const char *class; /* Pointer to class string */
- const char *method; /* Pointer to method string */
- FitsCard *card0; /* Pointer to current FitsCard */
- int index; /* Index of next FitsCard */
-
-/* Ensure the source function has been called */
- ReadFromSource( this, status );
-
-/* Return if no FitsChan was supplied, or if the FitsChan is empty. */
- if ( !this || !this->head ) return 0;
-
-/* Store the method and object class. */
- method = "astGetCard";
- class = astGetClass( this );
-
-/* Save a pointer to the current card, and the reset the current card to
- be the first card. */
- card0 = this->card;
- astClearCard( this );
-
-/* Count through the list of FitsCards in the FitsChan until the original
- current card is reached. If the current card is not found (for instance
- if it has been marked as deleted and we are currently skipping such cards),
- this->card will be left null (end-of-file). */
- index = 1;
- while( this->card != card0 && astOK && this->card ){
-
-/* Increment the card count and move on to the next card. */
- index++;
- MoveCard( this, 1, method, class, status );
-
- }
-
-/* Return the card index. */
- return index;
-
-}
-
-static int GetFull( AstChannel *this_channel, int *status ) {
-/*
-* Name:
-* GetFull
-
-* Purpose:
-* Obtain the value of the Full attribute for a FitsChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int GetFull( AstChannel *this, int *status )
-
-* Class Membership:
-* FitsChan member function (over-rides the protected astGetFull
-* method inherited from the Channel class).
-
-* Description:
-* This function return the integer value of the Full attribute for
-* a FitsChan.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Full attribute value.
-
-* Notes:
-* - This function modifies the default Full value from 0 to -1 for
-* the benefit of the FitsChan class. This prevents non-essential
-* information being written by the astWrite method unless it is
-* requested by explicitlt setting a Full value.
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFitsChan *this; /* Pointer to the FitsChan structure */
- int result; /* Result value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Obtain a pointer to the FitsChan structure. */
- this = (AstFitsChan *) this_channel;
-
-/* If the Full attribute us set, obtain its value using the parent class
- method. */
- if ( astTestFull( this ) ) {
- result = (* parent_getfull)( this_channel, status );
-
-/* Otherwise, supply a default value of -1. */
- } else {
- result = -1;
- }
-
-/* Return the result. */
- return result;
-}
-
-static FitsCard *GetLink( FitsCard *card, int next, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* GetLink
-
-* Purpose:
-* Get a pointer to the next or previous card in the list.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* FitsCard *GetLink( FitsCard *card, int next, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* Returns the a pointer to either the next or previous FitsCard
-* structure in the circular linked list of such structures stored in a
-* FitsChan. A check is performed to ensure that the forward and
-* backward links from the supplied card are consistent and an error
-* is reported if they are not (so long as no previous error has been
-* reported). Memory corruption can result in inconsistent links
-* which can result in infinite loops if an attempt is made to scan the
-* list.
-
-* Parameters:
-* card
-* The current card.
-* next
-* If non-zero, a pointer to the "next" card is returned. Otherwise
-* a pointer to the "previous" card is returned.
-* method
-* Pointer to string holding the name of the calling method.
-* class
-* Pointer to string holding the object class.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the required card, or NULL if an error occurs.
-
-* Notes:
-* - This function attempts to execute even if an error has occurred.
-*/
-
-/* Local Variables: */
- FitsCard *ret; /* Pointer to the returned card */
-
-/* Check that the "next" link from the previous card points back to
- the current card, and that the "prev" link from the next card points
- back to the current card. */
- if( card && ( card->prev->next != card ||
- card->next->prev != card ) ){
-
-/* Report an error so long as no previous error has been reported, and
- return a NULL pointer. */
- if( astOK ){
- astError( AST__FCRPT, "%s(%s): A corrupted %s object has been "
- "supplied.", status, method, class, class );
- }
- ret = NULL;
-
-/* If the links are good, return a pointer to the required card. */
- } else {
- ret = next ? card->next : card->prev;
- }
-
-/* Return the result. */
- return ret;
-
-}
-
-static int GetNcard( AstFitsChan *this, int *status ){
-/*
-*+
-* Name:
-* astGetNcard
-
-* Purpose:
-* Get the value of the Ncard attribute.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int astGetNcard( AstFitsChan *this )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-* This function returns the value of the Ncard attribute for the supplied
-* FitsChan. This is the number of cards currently in the FitsChan.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-
-* Returned Value:
-* The number of cards currently in the FitsChan.
-
-* Notes:
-* - A value of zero will be returned if an error has already
-* occurred, or if this function should fail for any reason.
-
-*-
-*/
-
-/* Local Variables: */
- const char *class; /* Pointer to class string */
- const char *method; /* Pointer to method string */
- FitsCard *card0; /* Pointer to current card on entry */
- int ncard; /* Number of cards so far */
-
-/* Ensure the source function has been called */
- ReadFromSource( this, status );
-
-/* Return zero if an error has already occurred, or no FitsChan was supplied,
- or the FitsChan is empty. */
- if ( !astOK || !this || !this->head ) return 0;
-
-/* Store the method and object class. */
- method = "astGetNcard";
- class = astGetClass( this );
-
-/* Save a pointer to the current card, and then reset the current card to
- be the first card. */
- card0 = this->card;
- astClearCard( this );
-
-/* Count through the cards in the FitsChan until the end of file is reached. */
- ncard = 0;
- while( astOK && this->card ){
-
-/* Increment the card count and move on to the next card. */
- ncard++;
- MoveCard( this, 1, method, class, status );
-
- }
-
-/* Reset the current card to be the original current card. */
- this->card = card0;
-
-/* Return the result. */
- return astOK ? ncard : 0;
-
-}
-
-static void GetNextData( AstChannel *this_channel, int skip, char **name,
- char **val, int *status ) {
-/*
-* Name:
-* GetNextData
-
-* Purpose:
-* Read the next item of data from a data source.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void GetNextData( AstChannel *this, int skip, char **name, char **val )
-
-* Class Membership:
-* FitsChan member function (over-rides the protected
-* astGetNextData method inherited from the Channel class).
-
-* Description:
-* This function reads the next item of input data from a data
-* source associated with a FitsChan and returns the result. It
-* decodes the data item and returns name/value pairs ready for
-* use.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* skip
-* A non-zero value indicates that a new Object is to be read,
-* and that all input data up to the next "Begin" item are to be
-* skipped in order to locate it. This is useful if the data
-* source contains AST objects interspersed with other data (but
-* note that these other data cannot appear inside AST Objects,
-* only between them).
-*
-* A zero value indicates that all input data are significant
-* and the next item will therefore be read and an attempt made
-* to interpret it whatever it contains. Any other data
-* inter-mixed with AST Objects will then result in an error.
-* name
-* An address at which to store a pointer to a null-terminated
-* dynamically allocated string containing the name of the next
-* item in the input data stream. This name will be in lower
-* case with no surrounding white space. It is the callers
-* responsibilty to free the memory holding this string (using
-* astFree) when it is no longer required.
-*
-* A NULL pointer value will be returned (without error) to
-* indicate when there are no further input data items to be
-* read.
-* val
-* An address at which to store a pointer to a null-terminated
-* dynamically allocated string containing the value associated
-* with the next item in the input data stream. No case
-* conversion is performed on this string and all white space is
-* potentially significant. It is the callers responsibilty to
-* free the memory holding this string (using astFree) when it
-* is no longer required.
-*
-* The returned pointer will be NULL if an Object data item is
-* read (see the "Data Representation" section).
-
-* Data Representation:
-* The returned data items fall into the following categories:
-*
-* - Begin: Identified by the name string "begin", this indicates
-* the start of an Object definition. The associated value string
-* gives the class name of the Object being defined.
-*
-* - IsA: Identified by the name string "isa", this indicates the
-* end of the data associated with a particular class structure
-* within the definiton of a larger Object. The associated value
-* string gives the name of the class whose data have just been
-* read.
-*
-* - End: Identified by the name string "end", this indicates the
-* end of the data associated with a complete Object
-* definition. The associated value string gives the class name of
-* the Object whose definition is being ended.
-*
-* - Non-Object: Identified by any other name string plus a
-* non-NULL "val" pointer, this gives the value of a non-Object
-* structure component (instance variable). The name identifies
-* which instance variable it is (within the context of the class
-* whose data are being read) and the value is encoded as a string.
-*
-* - Object: Identified by any other name string plus a NULL "val"
-* pointer, this identifies the value of an Object structure
-* component (instance variable). The name identifies which
-* instance variable it is (within the context of the class whose
-* data are being read) and the value is given by subsequent data
-* items (so the next item should be a "Begin" item).
-
-* Notes:
-* - NULL pointer values will be returned if this function is
-* invoked with the global error status set, or if it should fail
-* for any reason.
-*/
-
-/* Local Constants: */
-#define BUFF_LEN 100 /* Length of formatting buffer */
-
-/* Local Variables: */
- AstFitsChan *this; /* Pointer to the FitsChan structure */
- char *keyword; /* Pointer to current keyword string */
- char *newdata; /* Pointer to stripped string value */
- char *upq; /* Pointer to unprequoted string */
- char buff[ BUFF_LEN + 1 ]; /* Buffer for formatting values */
- const char *class; /* Pointer to object class */
- const char *method; /* Pointer to method name */
- int cont; /* String ends with an ampersand? */
- int done; /* Data item found? */
- int freedata; /* Should the data pointer be freed? */
- int i; /* Loop counter for keyword characters */
- int len; /* Length of current keyword */
- int nc; /* Number of characters read by "astSscanf" */
- int nn; /* No. of characters after UnPreQuoting */
- int type; /* Data type code */
- void *data; /* Pointer to current data value */
-
-/* Initialise the returned pointer values. */
- *name = NULL;
- *val = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FitsChan structure. */
- this = (AstFitsChan *) this_channel;
-
-/* Store the method name and object class. */
- method = "astRead";
- class = astGetClass( this );
-
-/* Loop to consider successive cards stored in the FitsChan (starting
- at the "current" card) until a valid data item is read or "end of
- file" is reached. Also quit the loop if an error occurs. */
- done = 0;
- newdata = NULL;
- while ( !done && !astFitsEof( this ) && astOK ){
-
-/* Obtain the keyword string, data type code and data value pointer
- from the current card. */
- keyword = CardName( this, status );
- type = CardType( this, status );
- data = CardData( this, NULL, status );
-
-/* Mark all cards as having been used unless we are skipping over cards which
- may not be related to AST. */
- if( !skip ) MarkCard( this, status );
-
-/* Ignore comment cards. */
- if ( type != AST__COMMENT ) {
-
-/* Native encoding requires trailing white space to be removed from
- string values (so that null strings can be distinguished from blank
- strings). Do this now. */
- freedata = 0;
- if ( ( type == AST__STRING || type == AST__CONTINUE ) && data ){
- newdata = (char *) astStore( NULL, data, strlen( (char *) data ) + 1 );
- if( newdata ){
- newdata[ ChrLen( data, status ) ] = 0;
- data = (void *) newdata;
- freedata = 1;
- }
- }
-/* Obtain the keyword length and test the card to identify the type of
- AST data item (if any) that it represents. */
- len = (int) strlen( keyword );
-
-/* "Begin" item. */
-/* ------------- */
-/* This is identified by a string value and a keyword of the form
- "BEGASTxx", where "xx" are characters encoding a sequence
- number. */
- if ( ( type == AST__STRING ) &&
- ( nc = 0,
- ( 0 == astSscanf( keyword, "BEGAST"
- "%*1[" SEQ_CHARS "]"
- "%*1[" SEQ_CHARS "]%n", &nc ) )
- && ( nc >= len ) ) ) {
-
-/* Note we have found a data item. */
- done = 1;
-
-/* Set the returned name to "begin" and extract the associated class
- name from the string value. Store both of these in dynamically
- allocated strings. */
- *name = astString( "begin", 5 );
- *val = UnPreQuote( (const char *) data, status );
-
-/* Indicate that the current card has been used. */
- MarkCard( this, status );
-
-/* The "begin" item will be preceded by a header of COMMENT cards. Mark
- them as having been used. */
- ComBlock( this, -1, method, class, status );
-
-/* "IsA" item. */
-/* ----------- */
-/* This is identified by a string value and a keyword of the form
- "ISAxx", where "xx" are characters encoding a sequence
- number. Don't accept the item if we are skipping over cards looking
- for a "Begin" item. */
- } else if ( !skip &&
- ( type == AST__STRING ) &&
- ( nc = 0,
- ( 0 == astSscanf( keyword,
- "ISA"
- "%*1[" SEQ_CHARS "]"
- "%*1[" SEQ_CHARS "]%n", &nc ) )
- && ( nc >= len ) ) ) {
-
-/* Note we have found a data item. */
- done = 1;
-
-/* Set the returned name to "isa" and extract the associated class
- name from the string value. Store both of these in dynamically
- allocated strings. */
- *name = astString( "isa", 3 );
- *val = UnPreQuote( (const char *) data, status );
-
-/* "End" item. */
-/* ----------- */
-/* This is identified by a string value and a keyword of the form
- "ENDASTxx", where "xx" are characters encoding a sequence
- number. Don't accept the item if we are skipping over cards looking
- for a "Begin" item. */
- } else if ( !skip &&
- ( type == AST__STRING ) &&
- ( nc = 0,
- ( 0 == astSscanf( keyword,
- "ENDAST"
- "%*1[" SEQ_CHARS "]"
- "%*1[" SEQ_CHARS "]%n", &nc ) )
- && ( nc >= len ) ) ) {
-
-/* Note we have found a data item. */
- done = 1;
-
-/* Set the returned name to "end" and extract the associated class
- name from the string value. Store both of these in dynamically
- allocated strings. */
- *name = astString( "end", 3 );
- *val = UnPreQuote( (const char *) data, status );
-
-/* The "end" item eill be followed by a footer of COMMENT cards. Mark
- these cards as having been used. */
- ComBlock( this, 1, method, class, status );
-
-/* Object or data item. */
-/* -------------------- */
-/* These are identified by a string, int, or double value, and a
- keyword ending in two characters encoding a sequence number. Don't
- accept the item if we are skipping over cards looking for a "Begin"
- item. */
- } else if ( !skip &&
- ( ( type == AST__STRING ) ||
- ( type == AST__INT ) ||
- ( type == AST__FLOAT ) ) &&
- ( len > 2 ) &&
- strchr( SEQ_CHARS, keyword[ len - 1 ] ) &&
- strchr( SEQ_CHARS, keyword[ len - 2 ] ) ) {
-
-/* Note we have found a data item. */
- done = 1;
-
-/* Set the returned name by removing the last two characters from the
- keyword and converting to lower case. Store this in a dynamically
- allocated string. */
- *name = astString( keyword, len - 2 );
- for ( i = 0; ( *name )[ i ]; i++ ) {
- ( *name )[ i ] = tolower( ( *name )[ i ] );
- }
-
-/* Classify the data type. */
- switch ( type ) {
-
-/* If the value is a string, test if it is zero-length. If so, this
- "null" value indicates an Object data item (whose definition
- follows), so leave the returned value pointer as NULL. Otherwise,
- we have a string data item, so extract its value and store it in a
- dynamically allocated string. */
- case AST__STRING:
- if ( *( (char *) data ) ) {
-
-/* A long string value may be continued on subsequent CONTINUE cards. See
- if the current string may be continued. This is the case if the final
- non-blank character (before UnPreQuoting) is an ampersand. */
- cont = ( ((char *) data)[ ChrLen( data, status ) - 1 ] == '&' );
-
-/* If the string does not end with an ampersand, just UnPreQUote it and
- return a copy. */
- if( !cont ) {
- *val = UnPreQuote( (const char *) data, status );
-
-/* Otherwise, initialise the returned string to hold a copy of the keyword
- value. */
- } else {
- nc = strlen( (const char *) data );
- *val = astStore( NULL, (const char *) data, nc + 1 );
-
-/* Loop round reading any subsequent CONTINUE cards. Leave the loop when
- the end-of-file is hit, or an error occurs. */
- while( cont && MoveCard( this, 1, method, class, status ) &&
- astOK ){
-
-/* See if this is a CONTINUE card. If so, get its data pointer. */
- if( CardType( this, status ) == AST__CONTINUE ){
- data = CardData( this, NULL, status );
-
-/* See if the CONTINUE card ends with an ampersand (i.e. if there is
- a possibility of there being any remaining CONTINUE cards). */
- cont = ( ( (char *) data)[ ChrLen( data, status ) - 1 ] == '&' );
-
-/* UnPreQUote it. */
- upq = UnPreQuote( (const char *) data, status );
- if( !astOK ) break;
-
-/* Expand the memory for the returned string to hold the new string. */
- nn = strlen( upq );
- *val = astRealloc( *val, nc + nn );
- if( !astOK ) break;
-
-/* Copy the new string into the expanded memory, so that the first
- character of the new string over-writes the trailing ampersand
- currently in the buffer. */
- strcpy( *val + nc - 1, upq );
-
-/* Release the memory holding the UnPreQUoted string . */
- upq = astFree( upq );
-
-/* Update the current length of the returned string. */
- nc += nn - 1;
-
-/* Mark the current card as having been read. */
- MarkCard( this, status );
-
-/* Report an error if this is not a CONTINUE card. */
- } else {
- astError( AST__BADIN, "%s(%s): One or more "
- "FITS \"CONTINUE\" cards are missing "
- "after the card for keyword \"%s\".", status,
- method, class, keyword );
- }
- }
- }
- }
- break;
-
-/* If the value is an int, format it and store the result in a
- dynamically allocated string. */
- case AST__INT:
- (void) sprintf( buff, "%d", *( (int *) data ) );
- *val = astString( buff, (int) strlen( buff ) );
- break;
-
-/* If the value is a double, format it and store the result in a
- dynamically allocated string. */
- case AST__FLOAT:
- (void) sprintf( buff, "%.*g", DBL_DIG, *( (double *) data ) );
- CheckZero( buff, *( (double *) data ), 0, status );
- *val = astString( buff, (int) strlen( buff ) );
- break;
- }
-
-/* Anything else. */
-/* -------------- */
-/* If the input line didn't match any of the above and the "skip" flag
- is not set, then report an error.. */
- } else if ( !skip ) {
- astError( AST__BADIN,
- "%s(%s): Cannot interpret the input data given by "
- "FITS keyword \"%s\".", status, method, class, keyword );
- }
-
-/* Free any memory used to hold stripped string data. */
- if( freedata ) newdata = (char *) astFree( (void *) newdata );
-
- }
-
-/* Increment the current card. */
- MoveCard( this, 1, method, class, status );
- }
-
-/* If an error occurred, ensure that any allocated memory is freed and
- that NULL pointer values are returned. */
- if ( !astOK ) {
- *name = astFree( *name );
- *val = astFree( *val );
- }
-
-/* Undefine macros local to this function. */
-#undef BUFF_LEN
-}
-
-static int GetSkip( AstChannel *this_channel, int *status ) {
-/*
-* Name:
-* GetSkip
-
-* Purpose:
-* Obtain the value of the Skip attribute for a FitsChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int GetSkip( AstChannel *this, int *status )
-
-* Class Membership:
-* FitsChan member function (over-rides the protected astGetSkip
-* method inherited from the Channel class).
-
-* Description:
-* This function return the (boolean) integer value of the Skip
-* attribute for a FitsChan.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Skip attribute value.
-
-* Notes:
-* - This function modifies the default Skip value from 0 to 1 for
-* the benefit of the FitsChan class. This default value allows the
-* astRead method to skip over unrelated FITS keywords when
-* searching for the next Object to read.
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFitsChan *this; /* Pointer to the FitsChan structure */
- int result; /* Result value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Obtain a pointer to the FitsChan structure. */
- this = (AstFitsChan *) this_channel;
-
-/* If the Skip attribute us set, obtain its value using the parent class
- method. */
- if ( astTestSkip( this ) ) {
- result = (* parent_getskip)( this_channel, status );
-
-/* Otherwise, supply a default value of 1. */
- } else {
- result = 1;
- }
-
-/* Return the result. */
- return result;
-}
-
-static int GetValue( AstFitsChan *this, const char *keyname, int type,
- void *value, int report, int mark, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* GetValue
-
-* Purpose:
-* Obtain a FITS keyword value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* int GetValue( AstFitsChan *this, const char *keyname, int type, void *value,
-* int report, int mark, const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* This function gets a value for the specified keyword from the
-* supplied FitsChan, and stores it in the supplied buffer. Optionally,
-* the keyword is marked as having been read into an AST object so that
-* it is not written out when the FitsChan is deleted.
-
-* Parameters:
-* this
-* A pointer to the FitsChan containing the keyword values to be
-* read.
-* keyname
-* A pointer to a string holding the keyword name.
-* type
-* The FITS data type in which to return the keyword value. If the
-* stored value is not of the requested type, it is converted if
-* possible.
-* value
-* A pointer to a buffer of suitable size to receive the keyword
-* value. The supplied value is left unchanged if the keyword is
-* not found.
-* report
-* Should an error be reported if the keyword cannot be found, or
-* cannot be converted to the requested type?
-* mark
-* Should the card be marked as having been used?
-* method
-* A string holding the name of the calling method.
-* class
-* A string holding the object class.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero if the keyword does not exist in "this", or cannot be
-* converted to the requested type. One is returned otherwise.
-
-* Notes:
-* - An error is reported if the keyword value is undefined.
-* - A value of zero is returned if an error has already occurred,
-* or if an error occurs within this function.
-
-*/
-
-/* Local Variables: */
- int ret; /* Returned value */
-
-/* Check the status */
- if( !astOK ) return 0;
-
-/* Attempt to find the supplied keyword. */
- ret = SearchCard( this, keyname, method, class, status );
-
-/* If the keyword was found, convert the current card's data value and copy
- it to the supplied buffer. */
- if( ret ){
- if( CnvValue( this, type, 0, value, method, status ) ) {
-
-/* If required, mark it as having been read into an AST object. */
- if( mark ) MarkCard( this, status );
-
-/* If the value is undefined, report an error if "report" is non-zero. */
- if( type == AST__UNDEF && report && astOK ) {
- ret = 0;
- astError( AST__FUNDEF, "%s(%s): FITS keyword \"%s\" has no value.",
- status, method, class, keyname );
- }
-
-/* If the value could not be converted to the requested data, type report
- an error if reporting is enabled. */
- } else {
- ret = 0;
- if( report && astOK ){
- astError( AST__FTCNV, "%s(%s): Cannot convert FITS keyword '%s' to %s.",
- status, method, class, keyname, type_names[ type ] );
- }
- }
-
-/* If the keyword was not found, report an error if "report" is non-zero. */
- } else if( report && astOK ){
- astError( AST__BDFTS, "%s(%s): Unable to find a value for FITS "
- "keyword \"%s\".", status, method, class, keyname );
- }
-
-/* If an error has occurred, return 0. */
- if( !astOK ) ret = 0;
-
-/* Return the result. */
- return ret;
-
-}
-
-static int GetValue2( AstFitsChan *this1, AstFitsChan *this2, const char *keyname,
- int type, void *value, int report, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* GetValue2
-
-* Purpose:
-* Obtain a FITS keyword value from one of two FitsChans.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* int GetValue2( AstFitsChan *this1, AstFitsChan *this2, const char *keyname,
-* int type, void *value, int report, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* This function attempts to get a value for the specified keyword from
-* the first supplied FitsChan. If this fails (due to the FitsChan not
-* containing a value for the ketword) then an attempt is made to get
-* a value for the keyword from the second supplied FitsChan.
-
-* Parameters:
-* this1
-* A pointer to the first FitsChan to be used.
-* this2
-* A pointer to the second FitsChan to be used.
-* keyname
-* A pointer to a string holding the keyword name.
-* type
-* The FITS data type in which to return the keyword value. If the
-* stored value is not of the requested type, it is converted if
-* possible.
-* value
-* A pointer to a buffer of suitable size to receive the keyword
-* value. The supplied value is left unchanged if the keyword is
-* not found.
-* report
-* Should an error be reported if the keyword cannot be found, or
-* cannot be converted to the requested type?
-* method
-* A string holding the name of the calling method.
-* class
-* A string holding the object class.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero if the keyword does not exist in either FitsChan, or cannot be
-* converted to the requested type. One is returned otherwise.
-
-* Notes:
-* - A value of zero is returned if an error has already occurred,
-* or if an error occurs within this function.
-* - If the card is found in the first FitsChan, it is not marked as
-* having been used. If the card is found in the second FitsChan, it is
-* marked as having been used.
-
-*/
-
-/* Local Variables: */
- int ret; /* Returned value */
-
-/* Check the status */
- if( !astOK ) return 0;
-
-/* Try the first FitsChan. If this fails try the second. Do not report
- an error if the keyword is not found in the first FitsChan (this will
- be done, if required, once the second FitsChan has been searched). */
- ret = GetValue( this1, keyname, type, value, 0, 0, method, class, status );
- if( ! ret ) {
- ret = GetValue( this2, keyname, type, value, report, 1, method, class, status );
- }
-
-/* If an error has occurred, return 0. */
- if( !astOK ) ret = 0;
-
-/* Return the result. */
- return ret;
-
-}
-
-static int HasAIPSSpecAxis( AstFitsChan *this, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* HasAIPSSpecAxis
-
-* Purpose:
-* Does the FitsChan contain an AIPS spectral CTYPE keyword?
-
-* Type:
-* Private function.
-
-* Synopsis:
-* int HasAIPSSpecAxis( AstFitsChan *this, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* This function returns a non-zero value if the FitsCHan contains a
-* CTYPE value which conforms to the non-standard system used by AIPS.
-
-* Parameters:
-* this
-* A pointer to the FitsChan to be used.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if an AIPS spectral CTYPE keyword was found.
-
-*/
-
-/* Local Variables: */
- char *assys; /* AIPS standard of rest type */
- char *astype; /* AIPS spectral type */
- char *cval; /* Pointer to character string */
- int j; /* Current axis index */
- int jhi; /* Highest axis index with a CTYPE */
- int jlo; /* Lowest axis index with a CTYPE */
- int ret; /* Returned value */
-
-/* Initialise */
- ret = 0;
-
-/* Check the status */
- if( !astOK ) return ret;
-
-/* If the FitsChan contains any CTYPE values, convert the bounds from
- one-based to zero-based, and loop round them all. */
- if( astKeyFields( this, "CTYPE%1d", 1, &jhi, &jlo ) ) {
- jlo--;
- jhi--;
- for( j = jlo; j <= jhi; j++ ) {
-
-/* Get the next CTYPE value. If found, see if it is an AIPS spectral
- CTYPE value. */
- if( GetValue( this, FormatKey( "CTYPE", j + 1, -1, ' ', status ),
- AST__STRING, (void *) &cval, 0, 0, method,
- class, status ) ){
- if( IsAIPSSpectral( cval, &astype, &assys, status ) ) {
- ret = 1;
- break;
- }
- }
- }
- }
-
-/* If an error has occurred, return 0. */
- if( !astOK ) ret = 0;
-
-/* Return the result. */
- return ret;
-
-}
-
-static int HasCard( AstFitsChan *this, const char *name,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* HasCard
-
-* Purpose:
-* Check if the FitsChan contains a specified keyword.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int HasCard( AstFitsChan *this, const char *name,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* Returns a non-zero value if the FitsChan contains the given keyword,
-* and zero otherwise. The current card is unchanged.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* name
-* Pointer to a string holding the keyword name.
-* method
-* Pointer to string holding name of calling method.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A value of 1 is returned if a card was found refering to the given
-* keyword. Otherwise zero is returned.
-
-*/
-
-/* Check the supplied pointers (we can rely on astMapHasKey to check the
- inherited status). */
- if( !name || !this || !this->keywords ) return 0;
-
-/* Search the KeyMap holding the keywords currently in the FitsChan,
- returning non-zero if the keyword was found. A KeyMap is used because
- it uses a hashing algorithm to find the entries and is therefore a lot
- quicker than searching through the list of linked FitsCards. */
- return astMapHasKey( this->keywords, name );
-
-}
-
-void astInitFitsChanVtab_( AstFitsChanVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitFitsChanVtab
-
-* Purpose:
-* Initialise a virtual function table for a FitsChan.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void astInitFitsChanVtab( AstFitsChanVtab *vtab, const char *name )
-
-* Class Membership:
-* FitsChan vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the FitsChan class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstChannelVtab *channel; /* Pointer to Channel component of Vtab */
- char buf[ 100 ]; /* Buffer large enough to store formatted INT_MAX */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitChannelVtab( (AstChannelVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAFitsChan) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstChannelVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
- vtab->PutCards = PutCards;
- vtab->PutFits = PutFits;
- vtab->DelFits = DelFits;
- vtab->PurgeWCS = PurgeWCS;
- vtab->RetainFits = RetainFits;
- vtab->FindFits = FindFits;
- vtab->KeyFields = KeyFields;
- vtab->Empty = Empty;
- vtab->FitsEof = FitsEof;
- vtab->GetFitsCF = GetFitsCF;
- vtab->GetFitsCI = GetFitsCI;
- vtab->GetFitsF = GetFitsF;
- vtab->GetFitsI = GetFitsI;
- vtab->GetFitsL = GetFitsL;
- vtab->TestFits = TestFits;
- vtab->GetFitsS = GetFitsS;
- vtab->GetFitsCN = GetFitsCN;
- vtab->FitsGetCom = FitsGetCom;
- vtab->SetFitsCom = SetFitsCom;
- vtab->SetFitsCF = SetFitsCF;
- vtab->SetFitsCI = SetFitsCI;
- vtab->SetFitsF = SetFitsF;
- vtab->SetFitsI = SetFitsI;
- vtab->SetFitsL = SetFitsL;
- vtab->SetFitsU = SetFitsU;
- vtab->SetFitsS = SetFitsS;
- vtab->SetFitsCN = SetFitsCN;
- vtab->SetFitsCM = SetFitsCM;
- vtab->ClearCard = ClearCard;
- vtab->TestCard = TestCard;
- vtab->SetCard = SetCard;
- vtab->GetCard = GetCard;
- vtab->ClearFitsDigits = ClearFitsDigits;
- vtab->TestFitsDigits = TestFitsDigits;
- vtab->SetFitsDigits = SetFitsDigits;
- vtab->GetFitsDigits = GetFitsDigits;
- vtab->ClearDefB1950 = ClearDefB1950;
- vtab->TestDefB1950 = TestDefB1950;
- vtab->SetDefB1950 = SetDefB1950;
- vtab->GetDefB1950 = GetDefB1950;
- vtab->ClearCarLin = ClearCarLin;
- vtab->TestCarLin = TestCarLin;
- vtab->SetCarLin = SetCarLin;
- vtab->GetCarLin = GetCarLin;
- vtab->ClearIwc = ClearIwc;
- vtab->TestIwc = TestIwc;
- vtab->SetIwc = SetIwc;
- vtab->GetIwc = GetIwc;
- vtab->ClearWarnings = ClearWarnings;
- vtab->TestWarnings = TestWarnings;
- vtab->SetWarnings = SetWarnings;
- vtab->GetWarnings = GetWarnings;
- vtab->GetNcard = GetNcard;
- vtab->GetAllWarnings = GetAllWarnings;
- vtab->ClearEncoding = ClearEncoding;
- vtab->TestEncoding = TestEncoding;
- vtab->SetEncoding = SetEncoding;
- vtab->GetEncoding = GetEncoding;
- vtab->ClearClean = ClearClean;
- vtab->TestClean = TestClean;
- vtab->SetClean = SetClean;
- vtab->GetClean = GetClean;
- vtab->ClearCDMatrix = ClearCDMatrix;
- vtab->TestCDMatrix = TestCDMatrix;
- vtab->SetCDMatrix = SetCDMatrix;
- vtab->GetCDMatrix = GetCDMatrix;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- channel = (AstChannelVtab *) vtab;
-
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
-#if defined(THREAD_SAFE)
- parent_managelock = object->ManageLock;
- object->ManageLock = ManageLock;
-#endif
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
- parent_write = channel->Write;
- channel->Write = Write;
- parent_read = channel->Read;
- channel->Read = Read;
- parent_getskip = channel->GetSkip;
- channel->GetSkip = GetSkip;
- parent_getfull = channel->GetFull;
- channel->GetFull = GetFull;
-
- channel->WriteBegin = WriteBegin;
- channel->WriteIsA = WriteIsA;
- channel->WriteEnd = WriteEnd;
- channel->WriteInt = WriteInt;
- channel->WriteDouble = WriteDouble;
- channel->WriteString = WriteString;
- channel->WriteObject = WriteObject;
- channel->GetNextData = GetNextData;
-
-/* Declare the class dump, copy and delete functions.*/
- astSetDump( vtab, Dump, "FitsChan", "I/O channels to FITS files" );
- astSetCopy( (AstObjectVtab *) vtab, Copy );
- astSetDelete( (AstObjectVtab *) vtab, Delete );
-
-/* Max number of characters needed to format an int. */
- LOCK_MUTEX4
- sprintf( buf, "%d", INT_MAX );
- int_dig = strlen( buf );
-
-/* Create a pair of MJD TimeFrames which will be used for converting to and
- from TDB. */
- astBeginPM;
- tdbframe = astTimeFrame( "system=MJD,timescale=TDB", status );
- timeframe = astTimeFrame( "system=MJD", status );
- astEndPM;
-
- UNLOCK_MUTEX4
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static void InsCard( AstFitsChan *this, int overwrite, const char *name,
- int type, void *data, const char *comment,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* InsCard
-
-* Purpose:
-* Inserts a card into a FitsChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void InsCard( AstFitsChan *this, int overwrite, const char *name,
-* int type, void *data, const char *comment,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* Either appends a new card to a FitsChan, or over-writes an existing
-* card, holding the supplied keyword name, value and comment.
-
-* Parameters:
-* this
-* Pointer to the FitsChan containing the filters to apply to the
-* keyword name. If a NULL pointer is supplied, no filtering is applied.
-* overwrite
-* If non-zero, the new card over-writes the current card given by
-* the "Card" attribute, and the current card is incremented so
-* that it refers to the next card. Otherwise, the new card is
-* inserted in front of the current card and the current card is
-* left unchanged.
-* name
-* Pointer to a string holding the keyword name of the new card.
-* type
-* An integer value representing the data type of the keyword.
-* data
-* Pointer to the data associated with the keyword.
-* comment
-* Pointer to a null-terminated string holding a comment.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - An error is reported if an attempt is made to change the data type
-* of an existing card.
-* - If a type of AST__COMMENT is supplied, then any data value (of any
-* type) associated with an existing card is left unchanged.
-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- int flags; /* Flags to assign to new card */
-
-/* Check the global status. */
- if( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* If the current card is to be over-written, delete the current card (the
- next card in the list, if any, will become the new current card). */
- if( overwrite ) DeleteCard( this, method, class, status );
-
-/* If requested, set both NEW flags for the new card. */
- flags = ( mark_new ) ? ( NEW1 | NEW2 ): 0;
-
-/* Insert the new card into the list, just before the current card. */
- NewCard( this, name, type, data, comment, flags, status );
-
-}
-
-static int IRAFFromStore( AstFitsChan *this, FitsStore *store,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* IRAFFromStore
-
-* Purpose:
-* Store WCS keywords in a FitsChan using FITS-IRAF encoding.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* int IRAFFromStore( AstFitsChan *this, FitsStore *store,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* A FitsStore is a structure containing a generalised represention of
-* a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-* from a set of FITS header cards (using a specified encoding), or
-* an AST FrameSet. In other words, a FitsStore is an encoding-
-* independant intermediary staging post between a FITS header and
-* an AST FrameSet.
-*
-* This function copies the WCS information stored in the supplied
-* FitsStore into the supplied FitsChan, using FITS-IRAF encoding.
-*
-* IRAF encoding is like FITS-WCS encoding but with the following
-* restrictions:
-*
-* 1) The celestial projection must not have any projection parameters
-* which are not set to their default values. The one exception to this
-* is that SIN projections are acceptable if the associated projection
-* parameter PV<axlat>_1 is zero and PV<axlat>_2 = cot( reference point
-* latitude). This is encoded using the string "-NCP". The SFL projection
-* is encoded using the string "-GLS". Note, the original IRAF WCS
-* system only recognised a small subset of the currently available
-* projections, but some more recent IRAF-like software recognizes some
-* of the new projections included in the FITS-WCS encoding.
-*
-* 2) The celestial axes must be RA/DEC, galactic or ecliptic.
-*
-* 3) LONPOLE and LATPOLE cannot be used.
-*
-* 4) Only primary axis descriptions are written out.
-*
-* 5) RADECSYS is used in place of RADESYS.
-*
-* 6) PC/CDELT keywords are not allowed (CD must be used)
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* store
-* Pointer to the FitsStore.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A value of 1 is returned if succesfull, and zero is returned
-* otherwise.
-
-*/
-
-/* Local Variables: */
- char *comm; /* Pointer to comment string */
- char *cval; /* Pointer to string keyword value */
- char combuf[80]; /* Buffer for FITS card comment */
- char lattype[MXCTYPELEN];/* Latitude axis CTYPE */
- char lontype[MXCTYPELEN];/* Longitude axis CTYPE */
- char s; /* Co-ordinate version character */
- char sign[2]; /* Fraction's sign character */
- double cdelt; /* A CDELT value */
- double fd; /* Fraction of a day */
- double mjd99; /* MJD at start of 1999 */
- double p1, p2; /* Projection parameters */
- double val; /* General purpose value */
- int axlat; /* Index of latitude FITS WCS axis */
- int axlon; /* Index of longitude FITS WCS axis */
- int axspec; /* Index of spectral FITS WCS axis */
- int i; /* Axis index */
- int ihmsf[ 4 ]; /* Hour, minute, second, fractional second */
- int iymdf[ 4 ]; /* Year, month, date, fractional day */
- int j; /* Axis index */
- int jj; /* SlaLib status */
- int naxis; /* No. of axes */
- int ok; /* Is FitsSTore OK for IRAF encoding? */
- int prj; /* Projection type */
- int ret; /* Returned value. */
-
-/* Initialise */
- ret = 0;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* First check that the values in the FitsStore conform to the
- requirements of the IRAF encoding. Assume they do to begin with. */
- ok = 1;
-
-/* Just do primary axes. */
- s = ' ';
-
-/* Look for the primary celestial and spectral axes. */
- FindLonLatSpecAxes( store, s, &axlon, &axlat, &axspec, method, class, status );
-
-/* If both longitude and latitude axes are present ...*/
- if( axlon >= 0 && axlat >= 0 ) {
-
-/* Get the CTYPE values for both axes. */
- cval = GetItemC( &(store->ctype), axlon, s, NULL, method, class, status );
- if( !cval ) return ret;
- strcpy( lontype, cval );
-
- cval = GetItemC( &(store->ctype), axlat, s, NULL, method, class, status );
- if( !cval ) return ret;
- strcpy( lattype, cval );
-
-/* Extract the projection type as specified by the last 4 characters
- in the CTYPE keyword value. */
- prj = astWcsPrjType( lattype + 4 );
-
-/* Check the projection type is OK. Assume not initially. */
- ok = 0;
-
-/* FITS-IRAF cannot handle the AST-specific TPN projection. */
- if( prj == AST__TPN ) {
- ok = 0;
-
-/* SIN projections are handled later. */
- } else if( prj != AST__SIN ){
-
-/* There must be no projection parameters. */
- if( GetMaxJM( &(store->pv), ' ', status ) == -1 ) ok = 1;
-
-/* Change the new SFL projection code to to the older equivalent GLS */
- if( prj == AST__SFL ){
- (void) strcpy( lontype + 4, "-GLS" );
- (void) strcpy( lattype + 4, "-GLS" );
- }
-
-/* SIN projections are only acceptable if the associated projection
- parameters are both zero, or if the first is zero and the second
- = cot( reference point latitude ) (the latter case is equivalent to
- the old NCP projection). */
- } else {
- p1 = GetItem( &( store->pv ), axlat, 1, s, NULL, method, class, status );
- p2 = GetItem( &( store->pv ), axlat, 2, s, NULL, method, class, status );
- if( p1 == AST__BAD ) p1 = 0.0;
- if( p2 == AST__BAD ) p2 = 0.0;
-
- val = GetItem( &( store->crval ), axlat, 0, s, NULL, method, class, status );
- if( val != AST__BAD ) {
- if( p1 == 0.0 ) {
- if( p2 == 0.0 ) {
- ok = 1;
-
- } else if( fabs( p2 ) >= 1.0E14 && val == 0.0 ){
- ok = 1;
- (void) strcpy( lontype + 4, "-NCP" );
- (void) strcpy( lattype + 4, "-NCP" );
-
- } else if( fabs( p2*tan( AST__DD2R*val ) - 1.0 )
- < 0.01 ){
- ok = 1;
- (void) strcpy( lontype + 4, "-NCP" );
- (void) strcpy( lattype + 4, "-NCP" );
- }
- }
- }
- }
-
-/* Identify the celestial coordinate system from the first 4 characters of the
- longitude CTYPE value. Only RA, galactic longitude, and ecliptic
- longitude can be stored using FITS-IRAF. */
- if( strncmp( lontype, "RA--", 4 ) &&
- strncmp( lontype, "GLON", 4 ) &&
- strncmp( lontype, "ELON", 4 ) ) ok = 0;
-
-/* If the physical Frame requires a LONPOLE or LATPOLE keyword, it cannot
- be encoded using FITS-IRAF. */
- if( GetItem( &(store->latpole), 0, 0, s, NULL, method, class, status )
- != AST__BAD ||
- GetItem( &(store->lonpole), 0, 0, s, NULL, method, class, status )
- != AST__BAD ) ok = 0;
-
-/* If there are no celestial axes, the physical Frame can be written out
- using FITS-IRAF. */
- } else {
- ok = 1;
- }
-
-/* Save the number of axes */
- naxis = GetMaxJM( &(store->crpix), ' ', status ) + 1;
-
-/* If this is different to the value of NAXIS abort since this encoding
- does not support WCSAXES keyword. */
- if( naxis != store->naxis ) ok = 0;
-
-/* Return if the FitsStore does not conform to IRAF encoding. */
- if( !ok ) return ret;
-
-/* Get and save CRPIX for all pixel axes. These are required, so return
- if they are not available. */
- for( i = 0; i < naxis; i++ ){
- val = GetItem( &(store->crpix), 0, i, s, NULL, method, class, status );
- if( val == AST__BAD ) return ret;
- sprintf( combuf, "Reference pixel on axis %d", i + 1 );
- SetValue( this, FormatKey( "CRPIX", i + 1, -1, s, status ), &val, AST__FLOAT,
- combuf, status );
- }
-
-/* Get and save CRVAL for all intermediate axes. These are required, so return
- if they are not available. */
- for( j = 0; j < naxis; j++ ){
- val = GetItem( &(store->crval), j, 0, s, NULL, method, class, status );
- if( val == AST__BAD ) return ret;
- sprintf( combuf, "Value at ref. pixel on axis %d", j + 1 );
- SetValue( this, FormatKey( "CRVAL", j + 1, -1, s, status ), &val, AST__FLOAT,
- combuf, status );
- }
-
-/* Get and save CTYPE for all intermediate axes. These are required, so return
- if they are not available. Use the potentially modified versions saved
- above for the celestial axes. */
- for( i = 0; i < naxis; i++ ){
- if( i == axlat ) {
- cval = lattype;
- } else if( i == axlon ) {
- cval = lontype;
- } else {
- cval = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
- if( !cval ) return ret;
- }
- comm = GetItemC( &(store->ctype_com), i, s, NULL, method, class, status );
- if( !comm ) {
- sprintf( combuf, "Type of co-ordinate on axis %d", i + 1 );
- comm = combuf;
- }
- SetValue( this, FormatKey( "CTYPE", i + 1, -1, s, status ), &cval, AST__STRING,
- comm, status );
- }
-
-/* CD matrix (the product of the CDELT and PC matrices). */
- for( i = 0; i < naxis; i++ ){
- cdelt = GetItem( &(store->cdelt), i, 0, s, NULL, method, class, status );
- if( cdelt == AST__BAD ) cdelt = 1.0;
-
- for( j = 0; j < naxis; j++ ){
- val = GetItem( &(store->pc), i, j, s, NULL, method, class, status );
- if( val == AST__BAD ) val = ( i == j ) ? 1.0 : 0.0;
- val *= cdelt;
-
- if( val != 0.0 ) {
- SetValue( this, FormatKey( "CD", i + 1, j + 1, s, status ), &val,
- AST__FLOAT, "Transformation matrix element", status );
- }
- }
- }
-
-/* Get and save CUNIT for all intermediate axes. These are NOT required, so
- do not return if they are not available. */
- for( i = 0; i < naxis; i++ ){
- cval = GetItemC( &(store->cunit), i, s, NULL, method, class, status );
- if( cval ) {
- sprintf( combuf, "Units for axis %d", i + 1 );
- SetValue( this, FormatKey( "CUNIT", i + 1, -1, s, status ), &cval, AST__STRING,
- combuf, status );
- }
- }
-
-/* Get and save RADECSYS. This is NOT required, so do not return if it is
- not available. */
- cval = GetItemC( &(store->radesys), 0, s, NULL, method, class, status );
- if( cval ) SetValue( this, "RADECSYS", &cval, AST__STRING,
- "Reference frame for RA/DEC values", status );
-
-/* Reference equinox */
- val = GetItem( &(store->equinox), 0, 0, s, NULL, method, class, status );
- if( val != AST__BAD ) SetValue( this, "EQUINOX", &val, AST__FLOAT,
- "Epoch of reference equinox", status );
-
-/* Date of observation */
- val = GetItem( &(store->mjdobs), 0, 0, ' ', NULL, method, class, status );
- if( val != AST__BAD ) {
-
-/* The format used for the DATE-OBS keyword depends on the value of the
- keyword. For DATE-OBS < 1999.0, use the old "dd/mm/yy" format.
- Otherwise, use the new "ccyy-mm-ddThh:mm:ss[.ssss]" format. */
- palSlaCaldj( 99, 1, 1, &mjd99, &jj );
- if( val < mjd99 ) {
-
- palSlaDjcal( 0, val, iymdf, &jj );
- sprintf( combuf, "%2.2d/%2.2d/%2.2d", iymdf[ 2 ], iymdf[ 1 ],
- iymdf[ 0 ] - ( ( iymdf[ 0 ] > 1999 ) ? 2000 : 1900 ) );
-
- } else {
-
- palSlaDjcl( val, iymdf, iymdf+1, iymdf+2, &fd, &jj );
- palSlaDd2tf( 3, fd, sign, ihmsf );
- sprintf( combuf, "%4.4d-%2.2d-%2.2dT%2.2d:%2.2d:%2.2d.%3.3d",
- iymdf[0], iymdf[1], iymdf[2], ihmsf[0], ihmsf[1],
- ihmsf[2], ihmsf[3] );
- }
-
-/* Now store the formatted string in the FitsChan. */
- cval = combuf;
- SetValue( this, "DATE-OBS", (void *) &cval, AST__STRING,
- "Date of observation", status );
- }
-
-/* If we get here we have succeeded. */
- ret = 1;
-
-/* Return zero or ret depending on whether an error has occurred. */
- return astOK ? ret : 0;
-}
-
-static int IsMapLinear( AstMapping *map, const double lbnd_in[],
- const double ubnd_in[], int coord_out, int *status ) {
-/*
-* Name:
-* IsMapLinear
-
-* Purpose:
-* See if a specified Mapping output is linearly related to the
-* Mapping inputs.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int IsMapLinear( AstMapping *map, const double lbnd_in[],
-* const double ubnd_in[], int coord_out, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* Returns a flag indicating if the specified output of the supplied
-* Mapping is a linear function of the Mapping inputs. A set of output
-* positions are created which are evenly spaced along the specified
-* output coordinate. The spacing is chosen so that the entire range
-* of the output coordinate is covered in 20 steps. The other output
-* coordinates are held fixed at arbitrary values (actually, values
-* at which the specified output coordinate achieves its minimum value).
-* This set of output positions is transformed into the corresponding
-* set of input coordinates using the inverse of the supplied Mapping.
-* A least squares linear fit is then made which models each input
-* coordinate as a linear function of the specified output coordinate.
-* The residual at every point in this fit must be less than some
-* small fraction of the total range of the corresponding input
-* coordinate for the Mapping to be considered linear.
-
-* Parameters:
-* map
-* Pointer to the Mapping.
-* lbnd_in
-* Pointer to an array of double, with one element for each
-* Mapping input coordinate. This should contain the lower bound
-* of the input box in each input dimension.
-* ubnd_in
-* Pointer to an array of double, with one element for each
-* Mapping input coordinate. This should contain the upper bound
-* of the input box in each input dimension.
-* coord_out
-* The zero-based index of the Mapping output which is to be checked.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the specified Mapping output is linear. Zero otherwise.
-
-*/
-
-/* Local Constants: */
-#define NP 20
-
-/* Local Variables: */
- AstPointSet *pset1;
- AstPointSet *pset2;
- double **ptr1;
- double **ptr2;
- double *p;
- double *s;
- double *xl;
- double c;
- double d;
- double delta;
- double in_lbnd;
- double in_ubnd;
- double lbnd_out;
- double m;
- double p0;
- double pv;
- double sn;
- double sp;
- double sps;
- double ss2;
- double ss;
- double sv;
- double tol;
- double ubnd_out;
- int boxok;
- int i;
- int j;
- int nin;
- int nout;
- int oldrep;
- int ret;
-
-/* Initialise */
- ret = 0;
-
-/* Check inherited status */
- if( !astOK ) return ret;
-
-/* Check the Mapping is defined in both directions. */
- if( astGetTranForward( map ) && astGetTranInverse( map ) ) {
-
-/* Allocate resources. */
- nin = astGetNin( map );
- nout = astGetNout( map );
- xl = astMalloc( sizeof( double )*(size_t) nin );
- pset1 = astPointSet( NP, nin, "", status );
- ptr1 = astGetPoints( pset1 );
- pset2 = astPointSet( NP, nout, "", status );
- ptr2 = astGetPoints( pset2 );
-
-/* Call astMapBox in a new error reporting context. */
- boxok = 0;
- if( astOK ) {
-
-/* Temporarily switch off error reporting so that no report is made if
- astMapBox cannot find a bounding box (which can legitimately happen with
- some non-linear Mappings). */
- oldrep = astReporting( 0 );
-
-/* Find the upper and lower bounds on the specified Mapping output. This also
- returns the input coords of a point at which the required output has its
- lowest value. */
- astMapBox( map, lbnd_in, ubnd_in, 1, coord_out, &lbnd_out, &ubnd_out,
- xl, NULL );
-
-/* If the box could not be found, clear the error status and pass on. */
- if( !astOK ) {
- astClearStatus;
-
-/* If the box was found OK, flag this and check if the bounds are equal.
- If so we cannot use them. In this case create new bounds. */
- } else {
- boxok = 1;
-
- if( EQUAL( lbnd_out, ubnd_out ) ) {
- m = 0.5*( lbnd_out + ubnd_out );
- if( fabs( m ) > 1.0E-15 ) {
- lbnd_out = 0.9*m;
- ubnd_out = 1.1*m;
- } else {
- lbnd_out = -1.0;
- ubnd_out = 1.0;
- }
- }
- }
-
-/* Re-instate error reporting. */
- astReporting( oldrep );
- }
-
-/* Check pointers can be used safely and a box was obtained. */
- if( astOK && boxok ) {
-
-/* Transform the input position returned by astMapBox using the supplied
- Mapping to get the corresponding output position. Fill all unused
- elements of the PointSet with AST__BAD. */
- for( i = 0; i < nin; i++ ){
- p = ptr1[ i ];
- *(p++) = xl[ i ];
- for( j = 1; j < NP; j++ ) *(p++) = AST__BAD;
- }
- (void) astTransform( map, pset1, 1, pset2 );
-
-/* Now create a set of NP points evenly spaced in output coordinates. The
- first point is at the output position found above. Each subsequent
- point is incremented by a fixed amount along the specified output
- coordinate (the values on all other output coordinates is held fixed). */
- delta = ( ubnd_out - lbnd_out )/ ( NP - 1 );
- for( i = 0; i < nout; i++ ){
- p = ptr2[ i ];
- if( i == coord_out ) {
- for( j = 0; j < NP; j++ ) *(p++) = lbnd_out + j*delta;
- } else {
- p0 = p[ 0 ];
- for( j = 0; j < NP; j++ ) *(p++) = p0;
- }
- }
-
-/* Transform these output positions into input positions using the
- inverse Mapping. */
- (void) astTransform( map, pset2, 0, pset1 );
-
-/* Do a least squares fit to each input coordinate. Each fit gives the
- corresponding input coordinate value as a linear function of the
- specified output coordinate value. Note, linear function should never
- produce bad values so abort if a bad value is found. */
- ret = 1;
- s = ptr2[ coord_out ];
- for( i = 0; i < nin; i++ ) {
- p = ptr1[ i ];
-
-/* Form the required sums. Also find the largest and smallest input
- coordinate value achieved. */
- sp = 0.0;
- ss = 0.0;
- sps = 0.0;
- sn = 0.0;
- ss2 = 0.0;
- in_lbnd = DBL_MAX;
- in_ubnd = DBL_MIN;
-
- for( j = 0; j < NP; j++ ) {
- sv = s[ j ];
- pv = p[ j ];
- if( pv != AST__BAD && sv != AST__BAD ) {
- sp += pv;
- ss += sv;
- sps += pv*sv;
- sn += 1.0;
- ss2 += sv*sv;
- if( pv < in_lbnd ) in_lbnd = pv;
- if( pv > in_ubnd ) in_ubnd = pv;
- } else {
- sn = 0.0;
- break;
- }
- }
-
-/* Ignore input axes which are independant of the output axis. */
- if( !EQUAL( in_lbnd, in_ubnd ) ) {
-
-/* Calculate the constants "input coord = m*output coord + c" */
- d = ss*ss - sn*ss2;
- if( sn > 0.0 && d != 0.0 ) {
- m = ( sp*ss - sps*sn )/d;
- c = ( sps*ss - sp*ss2 )/d;
-
-/* Subtract off the fit value form the "p" values to get the residuals of
- the fit. */
- for( j = 0; j < NP; j++ ) p[ j ] -= m*s[ j ] + c;
-
-/* We now do a least squares fit to the residuals. This second fit is done
- because the first least squares fit sometimes leaves the residuals with a
- distinct non-zero gradient. We do not need to worry about bad values
- here since we have checked above that there are no bad values. Also we
- do not need to recalculate sums which only depend on the "s" values since
- they have not changed. */
- sp = 0.0;
- sps = 0.0;
- for( j = 0; j < NP; j++ ) {
- pv = p[ j ];
- sp += pv;
- sps += pv*s[ j ];
- }
-
-/* Find the constants in "input residual = m*output coord + c" equation. */
- m = ( sp*ss - sps*sn )/d;
- c = ( sps*ss - sp*ss2 )/d;
-
-/* Subtract off the fit value form the "p residuals" values to get the
- residual redisuals of the fit. */
- for( j = 0; j < NP; j++ ) p[ j ] -= m*s[ j ] + c;
-
-/* The requirement for a linear relationship is that the absolute residual
- between the input coord produced by the above linear fit and the input
- coord produced by the actual Mapping should be less than some small
- fraction of the total range of input coord value, at every point. Test
- this. */
- tol = 1.0E-8*( in_ubnd - in_lbnd );
- for( j = 0; j < NP; j++ ) {
- if( fabs( p[ j ] ) > tol ) {
- ret = 0;
- break;
- }
- }
-
- } else {
- ret = 0;
- }
- }
- if( !ret ) break;
- }
- }
-
-/* Free resources. */
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
- xl = astFree( xl );
- }
-
-/* Return the answer. */
- return ret;
-}
-
-static int IsAIPSSpectral( const char *ctype, char **wctype, char **wspecsys, int *status ){
-/*
-* Name:
-* IsAIPSSpectral
-
-* Purpose:
-* See if a given CTYPE value describes a FITS-AIPS spectral axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int IsAIPSSpectral( const char *ctype, char **wctype, char **wspecsys, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* The given CTYPE value is checked to see if it conforms to the
-* requirements of a spectral axis CTYPE value as specified by
-* FITS-AIPS encoding. If so, the equivalent FITS-WCS CTYPE and
-* SPECSYS values are returned.
-
-* Parameters:
-* ctype
-* Pointer to a null terminated string holding the CTYPE value to
-* check.
-* wctype
-* The address of a location at which to return a pointer to a
-* static string holding the corresponding FITS-WCS CTYPE value. A
-* NULL pointer is returned if the supplied CTYPE string is not an
-* AIPS spectral CTYPE value.
-* wspecsys
-* The address of a location at which to return a pointer to a
-* static string holding the corresponding FITS-WCS SPECSYS value. A
-* NULL pointer is returned if the supplied CTYPE string is not an
-* AIPS spectral CTYPE value.
-* status
-* Pointer to the inherited status variable.
-
-* Retuned Value:
-* Non-zero fi the supplied CTYPE was an AIPS spectral CTYPE value.
-
-* Note:
-* - These translations are also used by the FITS-CLASS encoding.
-
-*/
-
-/* Local Variables: */
- int ret;
-
-/* Initialise */
- ret = 0;
- *wctype = NULL;
- *wspecsys = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* If the length of the string is not 8, then it is not an AIPS spectral axis. */
- if( strlen( ctype ) == 8 ) {
-
-/* Translate AIPS spectral CTYPE values to FITS-WCS paper III equivalents.
- These are of the form AAAA-BBB, where "AAAA" can be "FREQ", "VELO" (=VRAD!)
- or "FELO" (=VOPT-F2W), and BBB can be "LSR", "LSD", "HEL" (=*Bary*centric!)
- or "GEO". */
- if( !strncmp( ctype, "FREQ", 4 ) ){
- *wctype = "FREQ ";
- } else if( !strncmp( ctype, "VELO", 4 ) ){
- *wctype = "VRAD ";
- } else if( !strncmp( ctype, "FELO", 4 ) ){
- *wctype = "VOPT-F2W";
- } else if( !strncmp( ctype, "WAVELENG", 8 ) ){
- *wctype = "WAVE ";
- }
-
- if( !strcmp( ctype + 4, "-LSR" ) ){
- *wspecsys = "LSRK";
- } else if( !strcmp( ctype + 4, "LSRK" ) ){
- *wspecsys = "LSRK";
- } else if( !strcmp( ctype + 4, "-LSRK" ) ){
- *wspecsys = "LSRK";
- } else if( !strcmp( ctype + 4, "-LSD" ) ){
- *wspecsys = "LSRD";
- } else if( !strcmp( ctype + 4, "-HEL" ) ){
- *wspecsys = "BARYCENT";
- } else if( !strcmp( ctype + 4, "-EAR" ) || !strcmp( ctype + 4, "-GEO" ) ){
- *wspecsys = "GEOCENTR";
- } else if( !strcmp( ctype + 4, "-OBS" ) || !strcmp( ctype + 4, "-TOP" ) ){
- *wspecsys = "TOPOCENT";
- }
-
- if( *wctype && *wspecsys ) {
- ret = 1;
- } else {
- *wctype = NULL;
- *wspecsys = NULL;
- }
- }
-
-/* Return the result. */
- return ret;
-}
-
-static const char *IsSpectral( const char *ctype, char stype[5], char algcode[5], int *status ) {
-/*
-* Name:
-* IsSpectral
-
-* Purpose:
-* See if a given FITS-WCS CTYPE value describes a spectral axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* char *IsSpectral( const char *ctype, char stype[5], char algcode[5], int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* The given CTYPE value is checked to see if it conforms to the
-* requirements of a spectral axis CTYPE value as specified by
-* FITS-WCS paper 3. If so, the spectral system and algorithm codes
-* are extracted from it and returned, together with the default units
-* for the spectral system.
-
-* Parameters:
-* ctype
-* Pointer to a null terminated string holding the CTYPE value to
-* check.
-* stype
-* An array in which to return the null-terminated spectral system type
-* (e.g. "FREQ", "VELO", "WAVE", etc). A null string is returned if
-* the CTYPE value does not describe a spectral axis.
-* algcode
-* An array in which to return the null-terminated algorithm code
-* (e.g. "-LOG", "", "-F2W", etc). A null string is returned if the
-* spectral axis is linear. A null string is returned if the CTYPE
-* value does not describe a spectral axis.
-* status
-* Pointer to the inherited status variable.
-
-* Retuned Value:
-* A point to a static string holding the default units associated
-* with the spectral system specified by the supplied CTYPE value.
-* NULL is returned if the CTYPE value does not describe a spectral
-* axis.
-
-* Notes:
-* - The axis is considered to be a spectral axis if the first 4
-* characters form one of the spectral system codes listed in FITS-WCS
-* paper 3. The algorithm code is not checked, except to ensure that
-* it begins with a minus sign, or is blank.
-* - A NULL pointer is returned if an error has already occurred.
-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS
- int ctype_len;
-
-/* Initialise */
- stype[ 0 ] = 0;
- algcode[ 0 ] = 0;
-
-/* Check the inherited status. */
- if( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(NULL);
-
-/* Initialise more stuff */
- isspectral_ret = NULL;
-
-/* If the length of the string is less than 4, then it is not a spectral
- axis. */
- ctype_len = strlen( ctype );
- if( ctype_len >= 4 ) {
-
-/* Copy the first 4 characters (the coordinate system described by the
- axis) into a null-terminated buffer. */
- strncpy( stype, ctype, 4 );
- stype[ 4 ] = 0;
- stype[ astChrLen( stype ) ] = 0;
-
-/* Copy any remaining characters (the algorithm code) into a null-terminated
- buffer. Only copy a maximum of 4 characters. */
- if( ctype_len > 4 ) {
- if( ctype_len <= 8 ) {
- strcpy( algcode, ctype + 4 );
- } else {
- strncpy( algcode, ctype + 4, 4 );
- algcode[ 4 ] = 0;
- }
- algcode[ astChrLen( algcode ) ] = 0;
-
- } else {
- algcode[ 0 ] = 0;
- }
-
-/* See if the first 4 characters of the CTYPE value form one of the legal
- spectral coordinate type codes listed in FITS-WCS Paper III. Also note
- the default units associated with the system. */
- if( !strcmp( stype, "FREQ" ) ) {
- isspectral_ret = "Hz";
-
- } else if( !strcmp( stype, "ENER" ) ) {
- isspectral_ret = "J";
-
- } else if( !strcmp( stype, "WAVN" ) ) {
- isspectral_ret = "/m";
-
- } else if( !strcmp( stype, "VRAD" ) ) {
- isspectral_ret = "m/s";
-
- } else if( !strcmp( stype, "WAVE" ) ) {
- isspectral_ret = "m";
-
- } else if( !strcmp( stype, "VOPT" ) ) {
- isspectral_ret = "m/s";
-
- } else if( !strcmp( stype, "ZOPT" ) ) {
- isspectral_ret = "";
-
- } else if( !strcmp( stype, "AWAV" ) ) {
- isspectral_ret = "m";
-
- } else if( !strcmp( stype, "VELO" ) ) {
- isspectral_ret = "m/s";
-
- } else if( !strcmp( stype, "BETA" ) ) {
- isspectral_ret = "";
- }
-
-/* Also check that the remaining part of CTYPE (the algorithm code) begins
- with a minus sign or is blank. */
- if( algcode[ 0 ] != '-' && strlen( algcode ) > 0 ) isspectral_ret = NULL;
-
- }
-
-/* Return null strings if the axis is not a spectral axis. */
- if( ! isspectral_ret ) {
- stype[ 0 ] = 0;
- algcode[ 0 ] = 0;
- }
-
-/* Return the result. */
- return isspectral_ret;
-}
-
-static AstMapping *LinearWcs( FitsStore *store, int i, char s,
- const char *method, const char *class, int *status ) {
-/*
-* Name:
-* LinearWcs
-
-* Purpose:
-* Create a Mapping describing a FITS-WCS linear algorithm
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* AstMapping *LinearWcs( FitsStore *store, int i, char s,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function uses the contents of the supplied FitsStore to create
-* a Mapping which goes from Intermediate World Coordinate (known as "w"
-* in the context of FITS-WCS paper III) to a linearly related axis.
-*
-* The returned Mapping is a ShiftMap which simply adds on the value of
-* CRVALi.
-
-* Parameters:
-* store
-* Pointer to the FitsStore structure holding the values to use for
-* the WCS keywords.
-* i
-* The zero-based index of the spectral axis within the FITS header
-* s
-* A character identifying the co-ordinate version to use. A space
-* means use primary axis descriptions. Otherwise, it must be an
-* upper-case alphabetical characters ('A' to 'Z').
-* method
-* A pointer to a string holding the name of the calling method.
-* This is used only in the construction of error messages.
-* class
-* A pointer to a string holding the class of the object being
-* read. This is used only in the construction of error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a Mapping, or NULL if an error occurs.
-
-*/
-
-/* Local Variables: */
- AstMapping *ret;
- double crv;
-
-/* Check the global status. */
- ret = NULL;
- if( !astOK ) return ret;
-
-/* Get the CRVAL value for the specified axis. */
- crv = GetItem( &(store->crval), i, 0, s, NULL, method, class, status );
- if( crv == AST__BAD ) crv = 0.0;
-
-/* Create a 1D ShiftMap which adds this value onto the IWCS value. */
- if( crv != 0.0 ) {
- ret = (AstMapping *) astShiftMap( 1, &crv, "", status );
- } else {
- ret = (AstMapping *) astUnitMap( 1, "", status );
- }
- return ret;
-}
-
-static AstMapping *LogAxis( AstMapping *map, int iax, int nwcs, double *lbnd_p,
- double *ubnd_p, double crval, int *status ){
-/*
-* Name:
-* LogAxes
-
-* Purpose:
-* Test a Frame axis to see if it logarithmically spaced in pixel coords.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* AstMapping *LogAxis( AstMapping *map, int iax, int nwcs, double *lbnd_p,
-* double *ubnd_p, double crval )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* A specified axis of the supplied Mappinhg is tested to see if it
-* corresponds to the form
-*
-* S = Sr.exp( w/Sr )
-*
-* where "w" is one of the Mapping inputs, "S" is the specified
-* Mapping output, and "Sr" is the supplied value of "crval". This
-* is the form for a FITS log axis as defined in FITS-WCS paper III.
-*
-* If the above test is passed, a Mapping is returned from "S" to "w"
-* (the inverseof the above expression).
-
-* Parameters:
-* map
-* Pointer to the Mapping. This will usually be a Mapping from
-* pixel coords to WCS coords.
-* iax
-* The index of the output of "map" which correspoinds to "S".
-* nwcs
-* The number of outputs from "map".
-* lbnd_p
-* Pointer to an array of double, with one element for each
-* Mapping input coordinate. This should contain the lower bound
-* of the input pixel box in each input dimension.
-* ubnd_p
-* Pointer to an array of double, with one element for each
-* Mapping input coordinate. This should contain the upper bound
-* of the input pixel box in each input dimension.
-* crval
-* The reference value ("Sr") to use. Must not be zero.
-
-* Returned Value:
-* If the specified axis is logarithmically spaced, a Mapping with
-* "nwcs" inputs and "nwcs" outputs is returned. This Mapping transforms
-* its "iax"th input using the transformation:
-*
-* w = Sr.Log( S/Sr )
-*
-* (where "S" is the Mapping is the "iax"th input and "w" is the
-* "iax"th output). Other inputs are copied to the corresponding
-* output without change. NULL is returned if the specified axis is
-* not logarithmically spaced.
-*/
-
-/* Local Variables: */
- AstMapping *result; /* Returned Mapping */
- AstMapping *tmap0; /* A temporary Mapping */
- AstMapping *tmap1; /* A temporary Mapping */
- AstMapping *tmap2; /* A temporary Mapping */
- AstMapping *tmap3; /* A temporary Mapping */
- AstMapping *tmap4; /* A temporary Mapping */
- const char *fexps[ 1 ]; /* Forward MathMap expressions */
- const char *iexps[ 1 ]; /* Inverse MathMap expressions */
-
-/* Initialise */
- result = NULL;
-
-/* Check the inherited status and crval value. */
- if( !astOK || crval == 0.0 ) return result;
-
-/* If the "log" algorithm is appropriate, the supplied axis (s) is related
- to pixel coordinate (p) by s = Sr.EXP( a*p - b ). If this is the case,
- then the log of s will be linearly related to pixel coordinates. To test
- this, we create a CmpMap which produces log(s). */
- fexps[ 0 ] = "logs=log(s)";
- iexps[ 0 ] = "s=exp(logs)";
- tmap1 = (AstMapping *) astMathMap( 1, 1, 1, fexps, 1, iexps,
- "simpfi=1,simpif=1", status );
- tmap2 = AddUnitMaps( tmap1, iax, nwcs, status );
-
- tmap0 = (AstMapping *) astCmpMap( map, tmap2, 1, "", status );
- tmap2 = astAnnul( tmap2 );
-
-/* See if this Mapping is linear. */
- if( IsMapLinear( tmap0, lbnd_p, ubnd_p, iax, status ) ) {
-
-/* Create the Mapping which defines the IWC axis. This is the Mapping from
- WCS to IWCS - "W = Sr.log( S/Sr )". Other axes are left unchanged by the
- Mapping. The IWC axis has the same axis index as the WCS axis. */
- tmap2 = (AstMapping *) astZoomMap( 1, 1.0/crval, "", status );
- tmap3 = (AstMapping *) astCmpMap( tmap2, tmap1, 1, "", status );
- tmap2 = astAnnul( tmap2 );
- tmap2 = (AstMapping *) astZoomMap( 1, crval, "", status );
- tmap4 = (AstMapping *) astCmpMap( tmap3, tmap2, 1, "", status );
- tmap3 = astAnnul( tmap3 );
- tmap2 = astAnnul( tmap2 );
- result = AddUnitMaps( tmap4, iax, nwcs, status );
- tmap4 = astAnnul( tmap4 );
- }
-
-/* Free resources. */
- tmap0 = astAnnul( tmap0 );
- tmap1 = astAnnul( tmap1 );
-
-/* Return the result. */
- return result;
-}
-
-static AstMapping *LogWcs( FitsStore *store, int i, char s,
- const char *method, const char *class, int *status ) {
-/*
-* Name:
-* LogWcs
-
-* Purpose:
-* Create a Mapping describing a FITS-WCS logarithmic algorithm
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* AstMapping *LogWcs( FitsStore *store, int i, char s,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function uses the contents of the supplied FitsStore to create
-* a Mapping which goes from Intermediate World Coordinate (known as "w"
-* in the context of FITS-WCS paper III) to a logarthmic version of w
-* called "S" given by:
-*
-* S = Sr.exp( w/Sr )
-*
-* where Sr is the value of S corresponding to w=0.
-
-* Parameters:
-* store
-* Pointer to the FitsStore structure holding the values to use for
-* the WCS keywords.
-* i
-* The zero-based index of the axis within the FITS header
-* s
-* A character identifying the co-ordinate version to use. A space
-* means use primary axis descriptions. Otherwise, it must be an
-* upper-case alphabetical characters ('A' to 'Z').
-* method
-* A pointer to a string holding the name of the calling method.
-* This is used only in the construction of error messages.
-* class
-* A pointer to a string holding the class of the object being
-* read. This is used only in the construction of error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a Mapping, or NULL if an error occurs.
-
-*/
-
-/* Local Variables: */
- AstMapping *ret;
- char forexp[ 12 + DBL_DIG*2 ];
- char invexp[ 12 + DBL_DIG*2 ];
- const char *fexps[ 1 ];
- const char *iexps[ 1 ];
- double crv;
-
-/* Check the global status. */
- ret = NULL;
- if( !astOK ) return ret;
-
-/* Get the CRVAL value for the specified axis. Use a default of zero. */
- crv = GetItem( &(store->crval), i, 0, s, NULL, method, class, status );
- if( crv == AST__BAD ) crv = 0.0;
-
-/* Create the MathMap, if possible. */
- if( crv != 0.0 ) {
- sprintf( forexp, "s=%.*g*exp(w/%.*g)", DBL_DIG, crv, DBL_DIG, crv );
- sprintf( invexp, "w=%.*g*log(s/%.*g)", DBL_DIG, crv, DBL_DIG, crv );
- fexps[ 0 ] = forexp;
- iexps[ 0 ] = invexp;
- ret = (AstMapping *) astMathMap( 1, 1, 1, fexps, 1, iexps, "simpfi=1,simpif=1", status );
- }
-
-/* Return the result */
- return ret;
-}
-
-static int LooksLikeClass( AstFitsChan *this, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* LooksLikeClass
-
-* Purpose:
-* Does the FitsChan seem to use FITS-CLASS encoding?
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int LooksLikeClass( AstFitsChan *this, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* Returns non-zero if the supplied FitsChan probably uses FITS-CLASS
-* encoding. This is the case if it contains a DELTAV keyword and a
-* keyword of the form VELO-xxx", where xxx is one of the accepted
-* standards of rest.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the encoding in use lookslike FITS-CLASS.
-
-*/
-
-/* Local Variables... */
- int ret; /* Returned value */
-
-/* Initialise */
- ret = 0;
-
-/* Check the global status. */
- if( !astOK ) return ret;
-
-/* See if there is a "DELTAV" card, and a "VELO-xxx" card. */
- if( astKeyFields( this, "DELTAV", 0, NULL, NULL ) && (
- astKeyFields( this, "VELO-OBS", 0, NULL, NULL ) ||
- astKeyFields( this, "VELO-HEL", 0, NULL, NULL ) ||
- astKeyFields( this, "VELO-EAR", 0, NULL, NULL ) ||
- astKeyFields( this, "VELO-LSR", 0, NULL, NULL ) ) ) {
- ret = 1;
- }
-
-/* Return the result. */
- return ret;
-}
-
-static void MakeBanner( const char *prefix, const char *middle,
- const char *suffix,
- char banner[ AST__FITSCHAN_FITSCARDLEN -
- FITSNAMLEN + 1 ], int *status ) {
-/*
-* Name:
-* MakeBanner
-
-* Purpose:
-* Create a string containing a banner comment.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void MakeBanner( const char *prefix, const char *middle,
-* const char *suffix,
-* char banner[ AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN + 1 ], int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function creates a string which can be written as a FITS
-* comment card to produce a banner heading (or tail) for an AST
-* Object when it is written to a FitsChan. The banner will occupy
-* the maximum permitted width for text in a FITS comment card.
-
-* Parameters:
-* prefix
-* A pointer to a constant null-terminated string containing the
-* first part of the text to appear in the banner.
-* middle
-* A pointer to a constant null-terminated string containing the
-* second part of the text to appear in the banner.
-* suffix
-* A pointer to a constant null-terminated string containing the
-* third part of the text to appear in the banner.
-* banner
-* A character array to receive the null-terminated result string.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The text to appear in the banner is constructed by
-* concatenating the three input strings supplied.
-*/
-
-/* Local Variables: */
- char token[] = "AST"; /* Identifying token */
- int i; /* Loop counter for input characters */
- int len; /* Number of output characters */
- int ltok; /* Length of token string */
- int mxlen; /* Maximum permitted output characters */
- int start; /* Column number where text starts */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Calculate the maximum number of characters that the output banner
- can hold and the length of the token string. */
- mxlen = AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN;
- ltok = (int) strlen( token );
-
-/* Calculate the column in which to start the text, so that it is
- centred in the banner (with 4 non-text characters on each side). */
- start = ltok + 2 + ( mxlen - ltok - 1 -
- (int) ( strlen( prefix ) +
- strlen( middle ) +
- strlen( suffix ) ) - 1 - ltok ) / 2;
- if ( start < ltok + 2 ) start = ltok + 2;
-
-/* Start building the banner with the token string. */
- len = 0;
- for ( i = 0; token[ i ] && ( len < mxlen ); i++ ) {
- banner[ len++ ] = token[ i ];
- }
-
-/* Then pad with spaces up to the start of the text. */
- while ( len < start - 1 ) banner[ len++ ] = ' ';
-
-/* Insert the prefix data, truncating it if it is too long. */
- for ( i = 0; prefix[ i ] && ( len < mxlen - ltok - 1 ); i++ ) {
- banner[ len++ ] = prefix[ i ];
- }
-
-/* Insert the middle data, truncating it if it is too long. */
- for ( i = 0; middle[ i ] && ( len < mxlen - ltok - 1 ); i++ ) {
- banner[ len++ ] = middle[ i ];
- }
-
-/* Insert the suffix data, truncating it if it is too long. */
- for ( i = 0; suffix[ i ] && ( len < mxlen - ltok - 1 ); i++ ) {
- banner[ len++ ] = suffix[ i ];
- }
-
-/* Pad the end of the text with spaces. */
- while ( len < mxlen - ltok ) banner[ len++ ] = ' ';
-
-/* Finish the banner with the token string. */
- for ( i = 0; token[ i ] && ( len < mxlen ); i++ ) {
- banner[ len++ ] = token[ i ];
- }
-
-/* Terminate the output string. */
- banner[ len ] = '\0';
-}
-
-static AstFrameSet *MakeFitsFrameSet( AstFrameSet *fset, int ipix, int iwcs, int *status ) {
-/*
-* Name:
-* MakeFitsFrameSet
-
-* Purpose:
-* Create a FrameSet which conforms to the requirements of the FITS-WCS
-* papers.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* AstFrameSet *MakeFitsFrameSet( AstFrameSet *fset, int ipix, int iwcs, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function constructs a new FrameSet holding the pixel and WCS
-* Frames from the supplied FrameSet, but optionally extends the WCS
-* Frame to include any extra axes needed to conform to the FITS model.
-* Currently, this function does the following:
-*
-* - if the WCS Frame contains a spectral axis with a defined celestial
-* reference position (SpecFrame attributes RefRA and RefDec), then
-* it ensures that the WCS Frame also contains a pair of celestial
-* axes (such axes are added if they do not already exist within the
-* supplied WCS Frame). The pixel->WCS Mapping is adjusted accordingly.
-*
-* - if the WCS Frame contains a spectral axis and a pair of celestial
-* axes, then the SpecFrame attributes RefRA and RefDec are set to the
-* reference position defined by the celestial axes. The pixel->WCS
-* Mapping is adjusted accordingly.
-*
-* - NULL is returned if the WCS Frame contains more than one spectral
-* axis.
-*
-* - NULL is returned if the WCS Frame contains more than one pair of
-* celestial axes.
-
-* Parameters:
-* fset
-* The FrameSet to check.
-* ipix
-* The index of the FITS pixel Frame within "fset".
-* iwcs
-* The index of the WCS Frame within "fset".
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A new FrameSet which confoms to the requirements of the FITS-WCS
-* papers. The base Frame in this FrameSet will be the FITS pixel
-* Frame, and the current Frame will be the WCS Frame. NULL is
-* returned if an error has already occurred, or if the FrameSet cannot
-* be produced for any reason.
-
-*/
-
-/* Local Variables: */
- AstFitsChan *fc; /* Pointer to temporary FitsChan */
- AstFrame *pframe; /* Pointer to the primary Frame */
- AstFrame *pixfrm; /* Pointer to the FITS pixel Frame */
- AstFrame *tfrm0; /* Pointer to a temporary Frame */
- AstFrame *tfrm; /* Pointer to a temporary Frame */
- AstFrame *wcsfrm; /* Pointer to the FITS WCS Frame */
- AstFrameSet *ret; /* The returned FrameSet */
- AstFrameSet *tfs; /* Pointer to a temporary FrameSet */
- AstMapping *map1; /* Pointer to pre-WcsMap Mapping */
- AstMapping *map3; /* Pointer to post-WcsMap Mapping */
- AstMapping *map; /* Pointer to the pixel->wcs Mapping */
- AstMapping *tmap0; /* Pointer to a temporary Mapping */
- AstMapping *tmap1; /* Pointer to a temporary Mapping */
- AstMapping *tmap2; /* Pointer to a temporary Mapping */
- AstMapping *tmap; /* Pointer to a temporary Mapping */
- AstSpecFrame *skyfrm; /* Pointer to the SkyFrame within WCS Frame */
- AstSpecFrame *specfrm; /* Pointer to the SpecFrame within WCS Frame */
- AstWcsMap *map2; /* Pointer to WcsMap */
- char card[ AST__FITSCHAN_FITSCARDLEN + 1 ]; /* A FITS header card */
- char equinox_attr[ 13 ];/* Name of Equinox attribute for sky axes */
- char system_attr[ 12 ]; /* Name of System attribute for sky axes */
- const char *eqn; /* Pointer to original sky Equinox value */
- const char *skysys; /* Pointer to original sky System value */
- double con; /* Constant axis value */
- double reflat; /* Celestial latitude at reference point */
- double reflon; /* Celestial longitude at reference point */
- int *perm; /* Pointer to axis permutation array */
- int iax; /* Axis inex */
- int ilat; /* Celestial latitude index within WCS Frame */
- int ilon; /* Celestial longitude index within WCS Frame */
- int ispec; /* SpecFrame axis index within WCS Frame */
- int npix; /* Number of pixel axes */
- int nwcs; /* Number of WCS axes */
- int ok; /* Is the supplied FrameSet usable? */
- int paxis; /* Axis index within the primary Frame */
-
-/* Initialise */
- ret = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* Get copies of the pixel Frame, the WCS Frame and the Mapping. */
- tfrm = astGetFrame( fset, ipix );
- pixfrm = astCopy( tfrm );
- tfrm = astAnnul( tfrm );
-
- tfrm = astGetFrame( fset, iwcs );
- wcsfrm = astCopy( tfrm );
- tfrm = astAnnul( tfrm );
-
- tmap = astGetMapping( fset, ipix, iwcs );
- map = astCopy( tmap );
- tmap = astAnnul( tmap );
-
-/* Store the number of pixel and WCS axes. */
- npix = astGetNaxes( pixfrm );
- nwcs = astGetNaxes( wcsfrm );
-
-/* Search the WCS Frame for SkyFrames and SpecFrames. */
- specfrm = NULL;
- skyfrm = NULL;
- ok = 1;
- ilat = -1;
- ilon = -1;
- for( iax = 0; iax < nwcs; iax++ ) {
-
-/* Obtain a pointer to the primary Frame containing the current WCS axis. */
- astPrimaryFrame( wcsfrm, iax, &pframe, &paxis );
-
-/* If the current axis is a SpecFrame, save a pointer to it, and its WCS
- index. If we have already found a SpecFrame, abort. */
- if( astIsASpecFrame( pframe ) ) {
- if( specfrm ) {
- ok = 0;
- break;
- }
- specfrm = astClone( pframe );
- ispec = iax;
-
-/* If the current axis is a SkyFrame, save a pointer to it, and its WCS
- index. If we have already found a different SkyFrame, abort. */
- } else if( astIsASkyFrame( pframe ) ) {
- if( skyfrm ) {
- if( pframe != (AstFrame *) skyfrm ) {
- ok = 0;
- break;
- }
- } else {
- skyfrm = astClone( pframe );
- }
-
- if( paxis == 0 ) {
- ilon = iax;
- } else {
- ilat = iax;
- }
-
- }
-
-/* Free resources. */
- pframe = astAnnul( pframe );
-
- }
-
-/* If the supplied FrameSet is usable... */
- if( ok ) {
-
-/* If we did not find a SpecFrame, return a FrameSet made from the base
- and current Frames in the supplied FrameSet. */
- if( !specfrm ) {
- ret = astFrameSet( pixfrm, "", status );
- astAddFrame( ret, AST__BASE, map, wcsfrm );
-
-/* If we have a SpecFrame, proceed. */
- } else {
-
-/* Check that both the RefRA and RefDec attributes of the SpecFrame are set.
- If not, return a FrameSet made from the base and current Frames in the
- supplied FrameSet.*/
- if( !astTestRefRA( specfrm ) || !astTestRefDec( specfrm ) ) {
- ret = astFrameSet( pixfrm, "", status );
- astAddFrame( ret, AST__BASE, map, wcsfrm );
-
-/* If we have a celestial reference position for the spectral axis, ensure
- it is descirbed correctly by a pair of celestial axes. */
- } else {
-
-/* If the WCS Frame does not contain any celestial axes, we add some now. */
- if( !skyfrm ) {
-
-/* The easiest way to create the required mapping from pixel to celestial
- to create a simple FITS header and read it in via a FitsChan to create a
- FrameSet. */
- fc = astFitsChan( NULL, NULL, "", status );
- astPutFits( fc, "CRPIX1 = 0", 0 );
- astPutFits( fc, "CRPIX2 = 0", 0 );
- astPutFits( fc, "CDELT1 = 0.0003", 0 );
- astPutFits( fc, "CDELT2 = 0.0003", 0 );
- astPutFits( fc, "CTYPE1 = 'RA---TAN'", 0 );
- astPutFits( fc, "CTYPE2 = 'DEC--TAN'", 0 );
- astPutFits( fc, "RADESYS = 'FK5'", 0 );
- astPutFits( fc, "EQUINOX = 2000.0", 0 );
-
- sprintf( card, "CRVAL1 = %.*g", DBL_DIG,
- AST__DR2D*astGetRefRA( specfrm ) );
- astPutFits( fc, card, 0 );
-
- sprintf( card, "CRVAL2 = %.*g", DBL_DIG,
- AST__DR2D*astGetRefDec( specfrm ) );
- astPutFits( fc, card, 0 );
-
- sprintf( card, "MJD-OBS = %.*g", DBL_DIG,
- TDBConv( astGetEpoch( specfrm ), AST__UTC, 1,
- "astWrite", "FitsChan", status ) );
- astPutFits( fc, card, 0 );
-
- astClearCard( fc );
- tfs = astRead( fc );
- if( tfs ) {
-
-/* Create the new pixel->wcs Mapping. First get the 2-input,2-output
- Mapping between pixel and sky coords from the above FrameSet. Then add
- this Mapping in parallel with the original pixel->wcs Mapping. */
- tmap0 = astGetMapping( tfs, AST__BASE, AST__CURRENT );
- tmap1 = (AstMapping *) astCmpMap( map, tmap0, 0, "", status );
- tmap0 = astAnnul( tmap0 );
-
-/* We now have a (npix+2)-input,(nwcs+2)-output Mapping. We now add a
- PermMap in series with this which feeds the constant value 0.0 (the
- CRPIX value in the above set of FITS headers) into the 2 pixel axes
- corresponding to RA and Dec. This PermMap has npix-inputs and (npix+2)
- outputs. The total Mapping then has npix inputs and (nwcs+2) outputs. */
- perm = astMalloc( sizeof( int )*(size_t) ( npix + 2 ) );
- if( astOK ) {
- for( iax = 0; iax < npix; iax++ ) perm[ iax ] = iax;
- perm[ npix ] = -1;
- perm[ npix + 1 ] = -1;
- con = 0.0;
- tmap0 = (AstMapping *) astPermMap( npix, perm, npix + 2, perm, &con, "", status );
- tmap2 = (AstMapping *) astCmpMap( tmap0, tmap1, 1, "", status );
- tmap0 = astAnnul( tmap0 );
- tmap1 = astAnnul( tmap1 );
-
-/* We now create the new WCS Frame with the extra RA and Dec axes. This
- is just a CmpFrame made up of the original WCS Frame and the new
- SkyFrame. */
- tfrm = astGetFrame( tfs, AST__CURRENT );
- tfrm0 = (AstFrame *) astCmpFrame( wcsfrm, tfrm, "", status );
- tfrm = astAnnul( tfrm );
-
-/* Construct the returned FrameSet. */
- ret = astFrameSet( pixfrm, "", status );
- astAddFrame( ret, AST__BASE, tmap2, tfrm0 );
- tmap2 = astAnnul( tmap2 );
- tfrm0 = astAnnul( tfrm0 );
-
-/* Free remaining resources. */
- perm = astFree( perm );
- }
-
- tfs = astAnnul( tfs );
- }
-
- fc = astAnnul( fc );
-
-/* If the WCS Frame does contain celestial axes we make sure that the
- SpecFrame uses the same reference point. */
- } else {
-
-/* The returned FrameSet has no extra Frames (although some attributes
- may be changed) so just create a new FrameSet equaivalent to the supplied
- FrameSet. */
- tfs = astFrameSet( pixfrm, "", status );
- astAddFrame( tfs, AST__BASE, map, wcsfrm );
-
-/* The RefRA and RefDec attributes of the SpecFrame must be set in FK5
- J2000. Therefore we need to know the celestial reference point in
- FK5 J2000. Modify the SkyFrame within the FrameSet to represent FK5
- J2000, noting the original sky system and equinox first so that they
- can be re-instated (if set) later on. */
- sprintf( system_attr, "System(%d)", ilon + 1 );
- if( astTest( tfs, system_attr ) ) {
- skysys = astGetC( tfs, system_attr );
- } else {
- skysys = NULL;
- }
- astSetC( tfs, system_attr, "FK5" );
-
- sprintf( equinox_attr, "Equinox(%d)", ilon + 1 );
- if( astTest( tfs, equinox_attr ) ) {
- eqn = astGetC( tfs, equinox_attr );
- } else {
- eqn = NULL;
- }
- astSetC( tfs, equinox_attr, "J2000" );
-
-/* The reference point for the celestial axes is defined by the WcsMap
- contained within the Mapping. Split the mapping up into a list of serial
- component mappings, and locate the first WcsMap in this list. The first
- Mapping returned by this call is the result of compounding all the
- Mappings up to (but not including) the WcsMap, the second returned Mapping
- is the (inverted) WcsMap, and the third returned Mapping is anything
- following the WcsMap. Only proceed if one and only one WcsMap is found. */
- tmap0 = astGetMapping( tfs, AST__BASE, AST__CURRENT );
- if( SplitMap( tmap0, astGetInvert( tmap0 ), ilon, ilat, &map1, &map2, &map3, status ) ){
-
-/* The reference point in the celestial coordinate system is found by
- transforming the fiducial point in native spherical co-ordinates
- into absolute physical coordinates using map3. */
- if( GetFiducialWCS( map2, map3, ilon, ilat, &reflon, &reflat, status ) ){
-
-/* Use reflon and reflat (which represent FK5 J2000 RA and Dec) to set
- the values of the SpecFrame RefRA and RefDec attributes. Format the
- values first so that we can use the FrameSet astSetC method, and so
- maintain the FrameSet integrity. */
- astSetC( tfs, "RefRA", astFormat( wcsfrm, ilon, reflon ) );
- astSetC( tfs, "RefDec", astFormat( wcsfrm, ilat, reflat ) );
-
-/* If succesfull, return a pointer to the FrameSet. */
- if( astOK ) ret = astClone( tfs );
- }
-
-/* Release resources. */
- map1 = astAnnul( map1 );
- map2 = astAnnul( map2 );
- map3 = astAnnul( map3 );
- }
- tmap0 = astAnnul( tmap0 );
-
-/* Re-instate the original sky system and equinox. */
- if( skysys ) astSetC( tfs, system_attr, skysys );
- if( eqn ) astSetC( tfs, equinox_attr, eqn );
-
-/* Release resources. */
- tfs = astAnnul( tfs );
- }
- }
- }
- }
-
-/* Free resources. */
- if( specfrm ) specfrm = astAnnul( specfrm );
- if( skyfrm ) skyfrm = astAnnul( skyfrm );
- pixfrm = astAnnul( pixfrm );
- wcsfrm = astAnnul( wcsfrm );
- map = astAnnul( map );
-
-/* Return NULL if an error has occurred. */
- if( !astOK && ret ) ret = astAnnul( ret );
-
-/* Return the result. */
- return ret;
-}
-
-static void MakeIndentedComment( int indent, char token,
- const char *comment, const char *data,
- char string[ AST__FITSCHAN_FITSCARDLEN -
- FITSNAMLEN + 1 ], int *status ) {
-/*
-* Name:
-* MakeIndentedComment
-
-* Purpose:
-* Create a comment string containing an indentation bar.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void MakeIndentedComment( int indent, char token,
-* const char *comment, const char *data,
-* char string[ AST__FITSCHAN_FITSCARDLEN -
-* FITSNAMLEN + 1 ], int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function creates a string that may be used as text in a
-* FITS comment card. The string contains a textual comment
-* preceded by a bar (a line of characters) whose length can be
-* used to indicate a level of indentation (in the absence of any
-* way of indenting FITS keywords).
-
-* Parameters:
-* indent
-* The level of indentation, in characters.
-* token
-* The character used to form the indentation bar.
-* comment
-* A pointer to a constant null-terminated string containing the text
-* of the comment to be included.
-* data
-* A pointer to a constant null-terminated string containing any
-* textual data to be appended to the comment.
-* string
-* A character array to receive the output string.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The comment text that appears in the output string is formed by
-* concatenating the "comment" and "data" strings.
-*/
-
-/* Local Variables: */
- int i; /* Loop counter for input characters */
- int len; /* Number of output characters */
- int mxlen; /* Maximum length of output string */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Calculate the maximum number of characters that the output string
- can accommodate. */
- mxlen = AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN;
-
-/* Start the string with "indent" copies of the token character, but
- without exceeding the output string length. */
- len = 0;
- while ( ( len < indent ) && ( len < mxlen ) ) string[ len++ ] = token;
-
-/* Pad with spaces up to the start of the comment, if necessary. */
- while ( len < ( FITSCOMCOL - FITSNAMLEN - 1 ) ) {
- string[ len++ ] = ' ';
- }
-
-/* Add "/ " to introduce the comment (strictly not necessary as the
- whole card will be a comment, but it matches the other non-comment
- cards). Truncate if necessary. */
- for ( i = 0; ( i < 2 ) && ( len < mxlen ); i++ ) {
- string[ len++ ] = "/ "[ i ];
- }
-
-/* Append the comment string, truncating it if it is too long. */
- for ( i = 0; comment[ i ] && ( len < mxlen ); i++ ) {
- string[ len++ ] = comment[ i ];
- }
-
-/* Append the data string, again truncating if too long. */
- for ( i = 0; data[ i ] && ( len < mxlen ); i++ ) {
- string[ len++ ] = data[ i ];
- }
-
-/* Terminate the output string. */
- string[ len ] = '\0';
-}
-
-static void MakeIntoComment( AstFitsChan *this, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* MakeIntoComment
-
-* Purpose:
-* Convert a card into a FITS COMMENT card.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void MakeIntoComment( AstFitsChan *this, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function formats the card stored just prior to the current card,
-* and re-stores it as a COMMENT card. It is used (when writing an Object
-* to a FitsChan) to output values that are not "set" and which are
-* therefore provided for information only, and should not be read back.
-* the COMMENT card has the effect of "commenting out" the value.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* method
-* Calling method.
-* class
-* Object class.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- char card[ AST__FITSCHAN_FITSCARDLEN + 1 ]; /* Character buffer for FITS card data */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Move the current card backwards by one card. */
- MoveCard( this, -1, method, class, status );
-
-/* Format the new current card. */
- FormatCard( this, card, method, status );
-
-/* Write the resulting string to the FitsChan as the contents of a COMMENT
- card, overwriting the existing card. The current card is incremented
- by this call so that it refers to the same card as on entry. */
- astSetFitsCom( this, "COMMENT", card, 1 );
-
-}
-
-static int MakeIntWorld( AstMapping *cmap, AstFrame *fr, int *wperm, char s,
- FitsStore *store, double *dim,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* MakeIntWorld
-
-* Purpose:
-* Create FITS header values which map grid into intermediate world
-* coords.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int MakeIntWorld( AstMapping *cmap, AstFrame *fr, int *wperm, char s,
-* FitsStore *store, double *dim,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function adds values to the supplied FitsStore which describe
-* the transformation from grid (pixel) coords to intermediate world
-* coords. The values added to the FitsStore correspond to the CRPIXj,
-* PCi_j, CDELTi and WCSAXES keywords, and are determined by examining the
-* suppliedMapping, which must be linear with an optional shift of
-* origin (otherwise a value of zero is returned).
-*
-* Much of the complication in the algorithm arises from the need to
-* support cases where the supplied Mapping has more outputs than
-* inputs. In these case we add some "degenerate" axes to the grid
-* coord system, choosing their unit vectors to be orthogonal to all
-* the other grid axes. It is assumed that degenerate axes will never
-* be used to find a position other than at the axis value of 1.0.
-*
-* NOTE, appropriate values for CRVAL keywords should have been stored
-* in the FitsStore before calling this function (since this function may
-* modify them).
-
-* Parameters:
-* cmap
-* A pointer to a Mapping which transforms grid coordinates into
-* intermediate world coordinates. The number of outputs must be
-* greater than or equal to the number of inputs.
-* fr
-* Pointer to the final WCS coordinate Frame.
-* wperm
-* Pointer to an array of integers with one element for each axis of
-* the "fr" Frame. Each element holds the zero-based index of the
-* FITS-WCS axis (i.e. the value of "i" in the keyword names "CTYPEi",
-* "CDi_j", etc) which describes the Frame axis.
-* s
-* The co-ordinate version character. A space means the primary
-* axis descriptions. Otherwise the supplied character should be
-* an upper case alphabetical character ('A' to 'Z').
-* store
-* A pointer to the FitsStore into which the calculated CRPIX and
-* CDi_j values are to be put.
-* dim
-* An array holding the image dimensions in pixels. AST__BAD can be
-* supplied for any unknwon dimensions.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A value of 1 is returned if the CRPIX and CDi_j values are
-* succesfully calculated. Zero is returned otherwise.
-
-* Notes:
-* - Zero is returned if an error occurs.
-*/
-
-/* Local Variables: */
- AstFrame *pfrm;
- AstFrame *sfrm;
- AstMapping *map;
- AstPointSet *psetw;
- AstPointSet *psetg;
- double **fullmat;
- double **partmat;
- double **ptrg;
- double **ptrw;
- double *c;
- double *cdelt;
- double *cdmat;
- double *colvec;
- double *d;
- double *g;
- double *g0;
- double *m;
- double *mat;
- double *tol;
- double *w0;
- double *y;
- double cd;
- double crp;
- double crv;
- double cv;
- double det;
- double err;
- double k;
- double mxcv;
- double skydiag1;
- double skydiag0;
- double val;
- int *iw;
- int *lin;
- int *pperm;
- int *skycol;
- int i;
- int ii;
- int j;
- int jax;
- int jj;
- int nin;
- int nout;
- int nwcs;
- int paxis;
- int ret;
- int sing;
- int skycol0;
- int skycol1;
-
-/* Initialise */
- ret = 0;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* Simplify the supplied Mapping to reduce rounding errors when
- transforming points. */
- map = astSimplify( cmap );
-
-/* Get the number of inputs and outputs for the Mapping. Return if the
- number of outputs is smaller than the number of inputs. */
- nin = astGetNin( map );
- nout = astGetNout( map );
- if( nout < nin ) return ret;
-
-/* Note the number of final World Coordinate axes (not necessarily the
- same as "nout", since some intermediate axes may be discarded by a
- later PermMap. */
- nwcs = astGetNaxes( fr );
-
-/* Allocate work space. */
- g = astMalloc( sizeof(double)*(size_t) nin );
- g0 = astMalloc( sizeof(double)*(size_t) nin );
- w0 = astMalloc( sizeof(double)*(size_t) nout );
- tol = astMalloc( sizeof(double)*(size_t) nout );
- partmat = astMalloc( sizeof(double *)*(size_t) nout );
- lin = astMalloc( sizeof(int)*(size_t) nout );
- pperm = astMalloc( sizeof(int)*(size_t) nout );
- skycol = astMalloc( sizeof(int)*(size_t) nout );
- cdmat = astMalloc( sizeof(double)*(size_t) (nout*nout) );
- cdelt = astMalloc( sizeof(double)*(size_t) nout );
-
-/* For safety, initialise all other pointers. */
- if( partmat ) for( j = 0; j < nout; j++ ) partmat[ j ] = NULL;
- fullmat = NULL;
-
-/* Create a PointSet to hold an input (grid) position for each axis, plus
- an extra one. Create two other PointSets to hold corresponding
- output (IWC) coordinates. */
- psetg = astPointSet( nin + 1, nin, "", status );
- ptrg = astGetPoints( psetg );
- psetw = astPointSet( nin + 1, nout, "", status );
- ptrw = astGetPoints( psetw );
-
-/* Check the pointers can be used safely. */
- if( astOK ) {
-
-/* Assume success. */
- ret = 1;
-
-/* The next section finds a 'root' grid position for which the
- corresponding IWC coordinates are all good. It also finds these IWC
- coordinates, together with the IWC coordinates of "nin" points which
- are a unit distance away from the root grid position along each
- grid axis. It also finds an estimate of the rounding error in each
- Mapping output.
- ================================================================= */
- ret = FindBasisVectors( map, nin, nout, dim, psetg, psetw, status );
-
-/* Save the grid root position in "g0". */
- for( j = 0; j < nin; j++ ) g0[ j ] = ptrg[ j ][ 0 ];
-
-/* Save the transformed root position in "w0". This is the grid root
- position represented as a vector within the Intermediate World
- Coordinate system. */
- for( j = 0; j < nout; j++ ) {
- w0[ j ] = ptrw[ j ][ 0 ];
-
-/* Find the tolerance for positions on the j'th IWC axis. This is one
- hundredth of the largest change in the j'th IWC axis value caused by
- moving out 1 pixel along any grid axis. */
- tol[ j ] = 0.0;
- for( i = 0; i < nin; i++ ) {
- err = fabs( ptrw[ j ][ i + 1 ] - w0[ j ] );
- if( err > tol[ j ] ) tol[ j ] = err;
- }
- tol[ j ] *= 0.01;
-
-/* If the tolerance is zero (e.g. as is produced for degenerate axes),
- then use a tolerance equal to a very small fraction of hte degenerate
- axis value. If the axis value is zero use a fixed small value. */
- if( tol[ j ] == 0.0 ) tol[ j ] = w0[ j ]*DBL_EPSILON*1.0E5;
- if( tol[ j ] == 0.0 ) tol[ j ] = sqrt( DBL_MIN );
- }
-
-
-/* The next section finds the CD matrix.
- ===================================== */
-
-/* Initialise the CD matrix elements to "all missing". */
- for( i = 0; i < nout*nout; i++ ) cdmat[ i ] = AST__BAD;
-
-/* The elements of column "j" of the CD matrix form a vector (in Intermediate
- World Coords) which corresponds to a unit vector along grid axis "j".
- We now find these vectors for all the grid axes represented by the
- inputs to the supplied Mapping. */
- for( i = 0; i < nin && ret; i++ ) {
-
-/* Form a unit vector along the current input axis. */
- for( ii = 0; ii < nin; ii++ ) g[ ii ] = 0.0;
- g[ i ] = 1.0;
-
-/* Fit a straight line (within IWC) to the current input axis of the Mapping.
- The IWC vector corresponding to a unit vector along the current input axis
- is returned if the Mapping is linear. A NULL pointer is returned if the
- Mapping is not linear. */
- partmat[ i ] = FitLine( map, g, g0, w0, dim[ i ], tol, status );
-
-/* If unsuccesful, indicate failure and break out of the loop. */
- if( !partmat[ i ] ) {
- ret = 0;
- break;
- }
- }
-
-/* If the number of outputs for "map" is larger than the number of inputs,
- then we will still be missing some column vectors for the CDi_j matrix
- (which has to be square). We invent these such that the they are
- orthogonal to all the other column vectors. Only od this if the
- Mapping is linear. */
- if( ret ) {
- fullmat = OrthVectorSet( nout, nin, partmat, status );
- if( !fullmat ) ret = 0;
- }
-
-/* Check everything is OK. */
- if( ret ) {
-
-/* Set up an array holding index of the Mapping output corresponding to
- each IWC axis (the inverse of "wperm"). Also look for matching pairs of
- celestial WCS axes. For the first such pair, note the corresponding
- column indices and the diagonal element of the matrix which gives the
- scaling for the axis (taking account of the permutation of WCS axes).
- Also note if the Mapping from intermediate world coords to final world
- coords is linear for each axis (this is assumed to be the case if the
- axis is part of a simple Frame). */
- sfrm = NULL;
- skydiag0 = AST__BAD;
- skydiag1 = AST__BAD;
- skycol0 = -1;
- skycol1 = -1;
- for( i = 0; i < nout; i++ ) {
- pperm[ wperm[ i ] ] = i;
-
- astPrimaryFrame( fr, i, &pfrm, &paxis );
- if( astIsASkyFrame( pfrm ) ) {
- skycol[ wperm[ i ] ] = paxis + 1;
- lin[ i ] = 0;
- if( !sfrm ) {
- sfrm = pfrm;
- skycol0 = wperm[ i ];
- skydiag0 = fullmat[ skycol0 ][ i ];
- } else if( sfrm == pfrm ) {
- skycol1 = wperm[ i ];
- skydiag1 = fullmat[ skycol1 ][ i ];
- } else {
- pfrm = astAnnul( pfrm );
- }
- } else {
- skycol[ wperm[ i ] ] = 0;
- lin[ i ] = !strcmp( astGetClass( pfrm ), "Frame" );
- pfrm = astAnnul( pfrm );
- }
- }
- if( sfrm ) sfrm = astAnnul( sfrm );
-
-/* We now have the complete CDi_j matrix. Now to find the CRPIX values.
- These are the grid coords of the reference point (which corresponds to
- the origin of Intermediate World Coords). The "w0" array currently holds
- the position of the root position, as a position within IWC, and the
- "g0" array holds the corresponding position in grid coordinates. We
- also have IWC vectors which correspond to unit vectors on each grid
- axis. The CRPIX values are defined by the matrix equation
-
- w0 = fullmat*( g0 - crpix )
-
- The "g0" array only contains "nin" values. If nout>nin, then the
- missing g0 values will be assumed to be zero when we come to find the
- CRPIX values below.
-
- We use palSlaDmat to solve this system of simultaneous equations to get
- crpix. The "y" array initially holds "w0" but is over-written to hold
- "g0 - crpix". */
- mat = astMalloc( sizeof( double )*(size_t)( nout*nout ) );
- y = astMalloc( sizeof( double )*(size_t) nout );
- iw = astMalloc( sizeof( int )*(size_t) nout );
- if( astOK ) {
- m = mat;
- for( i = 0; i < nout; i++ ) {
- for( j = 0; j < nout; j++ ) *(m++) = fullmat[ j ][ i ];
- y[ i ] = w0[ i ];
- }
- palSlaDmat( nout, mat, y, &det, &sing, iw );
- }
- mat = astFree( mat );
- iw = astFree( iw );
-
-/* Loop round all axes, storing the column vector pointer. */
- for( j = 0; j < nout; j++ ) {
- colvec = fullmat[ j ];
-
-/* Get the CRPIX values from the "y" vector created above by palSlaDmat.
- First deal with axes for which there are Mapping inputs. */
- if( j < nin ) {
- crp = g0[ j ] - y[ j ];
-
-/* If this is a grid axis which has been created to represent a "missing"
- input to the mapping, we need to add on 1.0 to the crpix value found
- above. This is because the "w0" vector corresponds to a value of zero
- on any missing axes, but the FITS grid value for any missing axes is
- 1.0. */
- } else {
- crp = 1.0 - y[ j ];
- }
-
-/* Store the CD and CRPIX values for axes which correspond to inputs
- of "map". The CD matrix elements are stored in an array and are
- converted later to the corresponding PC and CDELT values. */
- if( j < nin || crp == 0.0 ) {
- for( i = 0; i < nout; i++ ) {
- cdmat[ wperm[ i ]*nout+j ] = colvec[ i ] ;
- }
-
- SetItem( &(store->crpix), 0, j, s, crp, status );
-
-
-/* The length of the unit vector along any "degenerate" axes was fixed
- arbitrarily at 1.0 by the call to OrthVectorSet. We can probably
- choose a more appropriate vector length. The choice shouldn't make any
- difference to the transformation, but an appropriate value will look
- more natural to human readers. */
- } else {
-
-/* First, try to arrange for longitude/latitude axis pairs to have the same
- scale. Do we have a matching pair of celestial axes? */
- k = AST__BAD;
- if( skydiag0 != AST__BAD && skydiag1 != AST__BAD ) {
-
-/* Is the current column the one which corresponds to the first celestial
- axis, and does the other sky column correspond to a Mapping input? */
- if( skycol0 == j && skycol1 < nin ) {
-
-/* If so, scale this column so that its diagonal element is the negative
- of the diagonal element of the other axis. This is on the assumption that
- the scales on the two axes should be equal, and that longitude increases
- east whilst latitude increases north, and that the CD matrix does not
- introduce an axis permutation. */
- if( skydiag0 != 0.0 ) k = -skydiag1/skydiag0;
-
-/* Now see if the current column the one which corresponds to the second
- celestial axis. Do the same as above. */
- } else if( skycol1 == j && skycol0 < nin ) {
- if( skydiag1 != 0.0 ) k = -skydiag0/skydiag1;
-
-/* If neither of the above conditions was met, assume a diagonal element
- value of 1.0 degrees for latitude axes, and -1.0 degrees for longitude
- axes. */
- }
- }
-
-/* If this failed, the next choice is to arrange for diagonally opposite
- elements to be equal and opposite in value. Look for the element of the
- column which has the largest diagonally opposite element, and choose a
- scaling factor which makes this column element equal to the negative value
- of its diagonally opposite element. Be careful to take axis permutations
- into account when finding the value of the diagonal element. */
- if( k == AST__BAD ) {
- mxcv = 0.0;
- ii = pperm[ j ];
- for( i = 0; i < nout; i++ ) {
- jj = wperm[ i ];
- if( jj < nin ) {
- cv = fullmat[ jj ][ ii ];
- if( !EQUAL( colvec[ i ], 0.0 ) && fabs( cv ) > mxcv ) {
- mxcv = fabs( cv );
- k = -cv/colvec[ i ];
- }
- }
- }
- }
-
-/* If still no scaling factor is available, use a scaling factor which
- produces a diagonal element of 1.0 degree if the corresponding row is a
- sky latitude axis, -1.0 degree of sky longitude axes, and 1.0 for other
- axes. */
- if( k == AST__BAD && colvec[ pperm[ j ] ] != 0.0 ) {
- if( skycol[ j ] ) {
- k = AST__DD2R/colvec[ pperm[ j ] ];
- if( skycol[ j ] == 1 ) k = -k;
- } else {
- k = 1.0/colvec[ pperm[ j ] ];
- }
- }
-
-/* If we still do not have a scaling, use 1.0 (no scaling). */
- if( k == AST__BAD ) k = 1.0;
-
-/* Now scale and store the column elements. */
- for( i = 0; i < nout; i++ ) {
- cdmat[ wperm[ i ]*nout+j ] = k*colvec[ i ];
- }
-
-/* Find the corresponding modified CRPIX value and store it. */
- crp = 1.0 + ( crp - 1.0 )/k;
- SetItem( &(store->crpix), 0, j, s, crp, status );
- }
-
-/* Free resources */
- if( pfrm ) pfrm = astAnnul( pfrm );
-
- }
-
-/* Any "degenerate" axes added in the above process for which the
- intermediate->world mapping is linear, and which depend only on one
- pixel axis, can be adjusted so that the reference point is at grid
- coord 1.0. */
- for( i = 0; i < nout; i++ ) {
- if( lin[ i ] ) {
-
-/* Check only one pixel axis contributes to this intermediate world axis
- and find which one it is. */
- jax = -1;
- for( j = 0; j < nout; j++ ) {
- if( !EQUAL( fullmat[ j ][ i ], 0.0 ) ) {
- if( jax == -1 ) {
- jax = j;
- } else {
- jax = -1;
- break;
- }
- }
- }
-
-/* We only adjust values for "degenerate" axes. */
- if( jax >= nin ) {
-
-/* Check that this pixel axis only contributes to the single world axis
- currently being considered. */
- for( ii = 0; ii < nout; ii++ ) {
- if( ii != i ) {
- if( !EQUAL( fullmat[ jax ][ ii ], 0.0 ) ) {
- jax = -1;
- break;
- }
- }
- }
-
- if( jax != -1 ) {
-
-/* Get the original CRVAL, CRPIX and CD values. Check they are defined.*/
- crv = GetItem( &(store->crval), wperm[ i ], 0, s, NULL,
- method, class, status );
- cd = cdmat[ wperm[ i ]*nout + jax ];
- crp = GetItem( &(store->crpix), 0, jax, s, NULL, method, class, status );
- if( crv != AST__BAD && crp != AST__BAD &&
- cd != AST__BAD ) {
-
-/* Modify the CRPIX to be 1.0 and modify the CRVAL value accordingly. */
- SetItem( &(store->crpix), 0, jax, s, 1.0, status );
- SetItem( &(store->crval), wperm[ i ], 0, s,
- cd*( 1.0 - crp ) + crv, status );
- }
- }
- }
- }
- }
-
-/* Finally, if there are fewer input axes than output axes, put a value for
- the WCSAXES keyword into the store. */
- if( nin < nwcs ) SetItem( &(store->wcsaxes), 0, 0, s, nwcs, status );
-
-/* Release resources. */
- y = astFree( y );
- }
-
-/* Produce and store PC and CDELT values from the above CD matrix */
- SplitMat( nout, cdmat, cdelt, status );
- c = cdmat;
- d = cdelt;
- for( i = 0; i < nout; i++ ){
- for( j = 0; j < nout; j++ ){
- val = *(c++);
- if( i == j ){
- if( EQUAL( val, 1.0 ) ) val = AST__BAD;
- } else {
- if( EQUAL( val, 0.0 ) ) val = AST__BAD;
- }
- if( val != AST__BAD ) SetItem( &(store->pc), i, j, s, val, status );
- }
- SetItem( &(store->cdelt), i, 0, s, *(d++), status );
- }
- }
-
-/* Annul pointsets. */
- psetg = astAnnul( psetg );
- psetw = astAnnul( psetw );
-
-/* Free other resources*/
- map = astAnnul( map );
- if( fullmat ) for( j = 0; j < nout; j++ ) fullmat[ j ] = astFree( fullmat[ j ] );
- if( partmat ) for( j = 0; j < nout; j++ ) partmat[ j ] = astFree( partmat[ j ] );
- fullmat = astFree( fullmat );
- partmat = astFree( partmat );
- cdmat = astFree( cdmat );
- cdelt = astFree( cdelt );
- g = astFree( g );
- g0 = astFree( g0 );
- w0 = astFree( w0 );
- tol = astFree( tol );
- lin = astFree( lin );
- skycol = astFree( skycol );
- pperm = astFree( pperm );
-
-/* If an error has occurred, return zero. */
- if( !astOK ) ret = 0;
-
-/* Return the answer. */
- return ret;
-
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra,
- AstObject **fail, int *status ) {
-/*
-* Name:
-* ManageLock
-
-* Purpose:
-* Manage the thread lock on an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *ManageLock( AstObject *this, int mode, int extra,
-* AstObject **fail, int *status )
-
-* Class Membership:
-* FitsChan member function (over-rides the astManageLock protected
-* method inherited from the parent class).
-
-* Description:
-* This function manages the thread lock on the supplied Object. The
-* lock can be locked, unlocked or checked by this function as
-* deteremined by parameter "mode". See astLock for details of the way
-* these locks are used.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* mode
-* An integer flag indicating what the function should do:
-*
-* AST__LOCK: Lock the Object for exclusive use by the calling
-* thread. The "extra" value indicates what should be done if the
-* Object is already locked (wait or report an error - see astLock).
-*
-* AST__UNLOCK: Unlock the Object for use by other threads.
-*
-* AST__CHECKLOCK: Check that the object is locked for use by the
-* calling thread (report an error if not).
-* extra
-* Extra mode-specific information.
-* fail
-* If a non-zero function value is returned, a pointer to the
-* Object that caused the failure is returned at "*fail". This may
-* be "this" or it may be an Object contained within "this". Note,
-* the Object's reference count is not incremented, and so the
-* returned pointer should not be annulled. A NULL pointer is
-* returned if this function returns a value of zero.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A local status value:
-* 0 - Success
-* 1 - Could not lock or unlock the object because it was already
-* locked by another thread.
-* 2 - Failed to lock a POSIX mutex
-* 3 - Failed to unlock a POSIX mutex
-* 4 - Bad "mode" value supplied.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-*/
-
-/* Local Variables: */
- AstFitsChan *this; /* Pointer to FitsChan structure */
- int result; /* Returned status value */
-
-/* Initialise */
- result = 0;
-
-/* Check the supplied pointer is not NUL. */
- if( ! this_object ) return result;
-
-/* Obtain a pointers to the FitsChan structure. */
- this = (AstFitsChan *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
- if( !result ) result = (*parent_managelock)( this_object, mode, extra,
- fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
- the supplied Object. */
- if( !result ) result = astManageLock( this->keyseq, mode, extra, fail );
- if( !result ) result = astManageLock( this->keywords, mode, extra, fail );
-
- return result;
-
-}
-#endif
-
-static int Match( const char *test, const char *temp, int maxfld, int *fields,
- int *nfld, const char *method, const char *class, int *status ){
-/*
-* Name:
-* Match
-
-* Purpose:
-* Sees if a test keyword name matches a template.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int Match( const char *test, const char *temp, int maxfld, int *fields,
-* int *nfld, const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* All characters in the template other than "%" (and the field width
-* and type specifiers which follow a "%") must be matched by an
-* identical character (ignoring case) in the test string. If a "%" occurs
-* in the template, then the next character in the template should be a
-* single digit specifying a field width. If it is zero, then the test
-* string may contain zero or more matching characters. Otherwise,
-* the test string must contain exactly the specified number of matching
-* characters (i.e. 1 to 9). The field width digit may be omitted, in
-* which case the test string must contain one or more matching
-* characters. The next character in the template specifies the type of
-* matching characters and must be one of "d", "c" or "f". Decimal digits
-* are matched by "d", all upper (but not lower) case alphabetical
-* characters are matched by "c", and all characters which are legal within
-* a FITS keyword (i.e. upper case letters, digits, underscores and
-* hyphens) are matched by "f".
-
-* Parameters:
-* test
-* Pointer to a null terminated string holding the keyword name to
-* be tested.
-* temp
-* Pointer to a null terminated string holding the template.
-* maxfld
-* The maximum number of integer field values which should be
-* returned in "fields".
-* fields
-* A pointer to an array of at least "maxfld" integers. This is
-* returned holding the values of any integer fields specified
-* in the template. The values are extracted from the test string,
-* and stored in the order they appear in the template string.
-* nfld
-* Pointer to a location at which is returned the total number of
-* integer fields in the test string. This may be more than the
-* number returned in "fields" if "maxfld" is smaller than "*nfld".
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero is returned if the test string does not match the template
-* string, and one is returned if it does.
-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- char type; /* Field type specifier */
- const char *a; /* Pointer to next test character */
- const char *b; /* Pointer to next template character */
- int extend; /* Can the width of the first field be extended? */
- int i; /* Field index */
- int match; /* Does "test" match "temp"? */
- int nfret; /* No. of fields returned */
- int tmp; /* Field value */
-
-/* Check global status. */
- if( !astOK ) return 0;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(NULL);
-
-/* On the first entry to this function, indicate that no integer fields
- have yet been returned, and save a pointer to the start of the template
- string. */
- if( !match_nentry ) {
- *nfld = 0;
- match_template = temp;
- }
-
-/* Increment the number of entries into this function. */
- match_nentry++;
-
-/* Initialise pointers to the start of each string. */
- a = test;
- b = temp;
-
-/* Initialise the returned flag to indicate that the two strings do not
- match. */
- match = 0;
-
-/* Check that the initial part of the test string can match the first
- field in the template. */
- if( MatchFront( a, b, &type, &extend, &match_na, &match_nb, method, class, match_template, status ) ){
-
-/* If it does, increment the pointers to skip over the characters
- used up in the comparison. */
- a += match_na;
- b += match_nb;
-
-/* If the ends of both strings have been reached, they match. */
- if( *a == 0 && *b == 0 ){
- match = 1;
-
-/* Otherwise, if the end of the template has been reached but there are
- still characters to be read from the test string, we could still have
- a match if all the remaining test characters match an extandable field. */
- } else if( *b == 0 && *a != 0 && extend ){
-
-/* Loop until all the matching characters have been read from the end of
- the test string. */
- while( *a != 0 && MatchChar( *a, type, method, class, match_template, status ) ) a++;
-
-/* If we reached the end of the test string, we have a match. */
- if( *a == 0 ) match = 1;
-
-/* Otherwise, we need to carry on checking the remaining fields. */
- } else {
-
-/* Call this function recursively to see if the remainder of the
- strings match. */
- if( Match( a, b, maxfld, fields, nfld, method, class, status ) ){
- match = 1;
-
-/* If the remainder of the strings do not match, we may be able to make
- them match by using up some extra test characters on the first field.
- This can only be done if the first field has an unspecified field width,
- and if the next test character if of a type which matches the first
- field in the template. */
- } else if( extend ){
-
-/* Loop until all the suitable characters have been read from the
- test string. Break out of the loop early if we find a field width
- which results in the whole string matching. */
- while( MatchChar( *a, type, method, class, match_template, status ) ){
- a++;
-
- if( Match( a, b, maxfld, fields, nfld, method, class, status ) ){
- match = 1;
- break;
- }
-
- }
-
- }
-
- }
-
- }
-
-/* If the strings match and the leading field is an integer, decode
- the field and store it in the supplied array (if there is room). */
- if( match && type == 'd' && a > test ){
- if( *nfld < maxfld ){
- sprintf( match_fmt, "%%%dd", (int) ( a - test ) );
- astSscanf( test, match_fmt, fields + *nfld );
- }
- (*nfld)++;
- }
-
-/* Decrement the number of entries into this function. */
- match_nentry--;
-
-/* If we are leaving this function for the last time, reverse the
- order of the returned integer fields so that they are returned
- in the same order that they occur in the template. */
- if( !match_nentry ){
- nfret = ( *nfld < maxfld ) ? (*nfld) : maxfld;
- match_pa = fields;
- match_pb = fields + nfret - 1;
- for( i = 0; i < nfret/2; i++ ){
- tmp = *match_pa;
- *(match_pa++) = *match_pb;
- *(match_pb--) = tmp;
- }
- }
-
-/* Return the result. */
- return match;
-
-}
-
-static int MatchChar( char test, char type, const char *method,
- const char *class, const char *template, int *status ){
-/*
-* Name:
-* MatchChar
-
-* Purpose:
-* See if a given character is of a specified type.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int MatchChar( char test, char type, const char *method,
-* const char *class, const char *template, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function checks that the supplied test character belongs
-* to the set of characters specified by the parameter "type".
-
-* Parameters:
-* test
-* The character to test.
-* type
-* The character specifying the set of acceptable characters. This
-* should be one of the field type characters accepted by function
-* Match (e.g. "d", "c" or "f").
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* template
-* Pointer to the start of the whole template string, for use in error
-* messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero is returned if the test character does not belongs to the
-* specified character set, and one is returned if it does.
-
-* Notes:
-* - An error is reported if the type specifier is not legal.
-* - Zero is returned if an error has already occurred, or if ths
-* function fails for any reason.
-
-*/
-
-/* Local Variables: */
- int ret; /* Returned flag */
-
-/* Check global status. */
- ret = 0;
- if( !astOK ) return ret;
-
-/* Check for "d" specifiers (digits). */
- if( type == 'd' ){
- ret = isdigit( (int) test );
-
-/* Check for "c" specifiers (upper case letters). */
- } else if( type == 'c' ){
- ret = isupper( (int) test );
-
-/* Check for "s" specifiers (any legal FITS keyword character). */
- } else if( type == 'f' ){
- ret = isFits( (int) test );
-
-/* Report an error for any other specifier. */
- } else if( astOK ){
- ret = 0;
- astError( AST__BDFMT, "%s(%s): Illegal field type or width "
- "specifier '%c' found in filter template '%s'.", status,
- method, class, type, template );
- }
-
-/* Return the answer. */
- return ret;
-
-}
-
-static int MatchFront( const char *test, const char *temp, char *type,
- int *extend, int *ntest, int *ntemp,
- const char *method, const char *class,
- const char *template, int *status ){
-/*
-* Name:
-* MatchFront
-
-* Purpose:
-* Sees if the start of a test string matches the start of a template.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int MatchFront( const char *test, const char *temp, char *type,
-* int *extend, int *ntest, int *ntemp,
-* const char *method, const char *class,
-* const char *template )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function looks for a match between the first field in the
-* template string and the string at the start of the test string,
-* using the syntax described in function Match.
-
-* Parameters:
-* test
-* Pointer to a null terminated string holding the keyword name to
-* be tested.
-* temp
-* Pointer to a null terminated string holding the template.
-* type
-* Pointer to a location at which to return a character specifying the
-* sort of field that was matched. This will be one of the legal field
-* types accepted by Match (e.g. "d", "c" or "f"), or null (zero) if
-* the first field in the template string was a literal character (i.e.
-* did not start with a "%").
-* extend
-* Pointer to a location at which to return a flag which will be non-zero
-* if the further test characters could be matched by the first field in
-* the template. This will be the case if the template field only
-* specifies a minimum number of matching characters (i.e. if the field
-* width can be extended). For instance, "%d" can be extended, but "%1d"
-* cannot.
-* ntest
-* Pointer to a location at which to return the number of characters
-* matched in the test string. This will be the minimum number allowed
-* by the template field.
-* ntemp
-* Pointer to a location at which to return the number of characters
-* read from the template string (i.e. the number of characters in the
-* field specification).
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* template
-* Pointer to the start of the whole template string, for use in error
-* messages.
-
-* Returned Value:
-* Zero is returned if the test string starts with fewer than the
-* minimum number of characters matching the template string, and one
-* is returned if it does.
-
-* Notes:
-* - Zero is returned if an error has already occurred, or if this
-* function fails for any reason.
-
-*/
-
-/* Local Variables: */
- const char *a; /* Pointer to next test character */
- const char *b; /* Pointer to next template character */
- int i; /* Character index */
- int match; /* Does "test" match "temp"? */
-
-/* Check global status. */
- if( !astOK ) return 0;
-
-/* Initialise pointers to the start of each string. */
- a = test;
- b = temp;
-
-/* Initialise the returned value to indicate that the strings match. */
- match = 1;
-
-/* If the current character in the template is not a % sign, it must
- match the current character in the test string (except for case). */
- if( *b != '%' ){
- if( toupper( (int) *b ) != toupper( (int) *a ) ) {
- match = 0;
-
-/* If the characters match, return all the required information. */
- } else {
- *type = 0;
- *extend = 0;
- *ntest = 1;
- *ntemp = 1;
- }
-
-/* If the current character of the template is a %, we need to match
- a field. */
- } else {
- *ntemp = 3;
-
-/* The next character in the template string determines the field width.
- Get the lowest number of characters which must match in the test string,
- and set a flag indicating if this lowest limit can be extended. */
- b++;
- if( *b == '0' ){
- *ntest = 0;
- *extend = 1;
-
- } else if( *b == '1' ){
- *ntest = 1;
- *extend = 0;
-
- } else if( *b == '2' ){
- *ntest = 2;
- *extend = 0;
-
- } else if( *b == '3' ){
- *ntest = 3;
- *extend = 0;
-
- } else if( *b == '4' ){
- *ntest = 4;
- *extend = 0;
-
- } else if( *b == '5' ){
- *ntest = 5;
- *extend = 0;
-
- } else if( *b == '6' ){
- *ntest = 6;
- *extend = 0;
-
- } else if( *b == '7' ){
- *ntest = 7;
- *extend = 0;
-
- } else if( *b == '8' ){
- *ntest = 8;
- *extend = 0;
-
- } else if( *b == '9' ){
- *ntest = 9;
- *extend = 0;
-
-/* If no field width was given, one or more test characters are matched.
- Step back a character so that the current character will be re-used as
- the type specifier. */
- } else {
- *ntest = 1;
- *extend = 1;
- b--;
- (*ntemp)--;
- }
-
-/* The next template character gives the type of character which should
- be matched. */
- b++;
- *type = *b;
-
-/* Report an error if the template string ended within the field
- specifier. */
- if( !*b ){
- match = 0;
- astError( AST__BDFMT, "%s(%s): Incomplete field specifier found "
- "at end of filter template '%s'.", status, method, class,
- template );
-
-/* Otherwise, check that the test string starts with the minimum allowed
- number of characters matching the specified type. */
- } else {
-
- for( i = 0; i < *ntest; i++ ){
- if( !MatchChar( *a, *type, method, class, template, status ) ){
- match = 0;
- break;
- }
- a++;
- }
-
- }
-
- }
-
-/* Return the answer. */
- return match;
-
-}
-
-static void MarkCard( AstFitsChan *this, int *status ){
-/*
-* Name:
-* MarkCard
-
-* Purpose:
-* Mark the current card as having been read into an AST object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void MarkCard( AstFitsChan *this, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* The current card is marked as having been "provisionally used" in
-* the construction of an AST object. If the Object is constructed
-* succesfully, such cards are marked as having been definitely used,
-* and they are then considered to have been removed from the FitsChan.
-
-* Parameters:
-* this
-* Pointer to the FitsChan containing the list of cards.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The card remains the current card even though it is now marked
-* as having been read.
-
-*/
- int flags;
-
-/* Return if the global error status has been set, or the current card
- is not defined. */
- if( !astOK || !this->card ) return;
-
-/* Set the PROVISIONALLY_USED flag in the current card, but only if the
- PROTECTED flag is not set. */
- flags = ( (FitsCard *) this->card )->flags;
- if( !( flags & PROTECTED ) ) {
- ( (FitsCard *) this->card )->flags = flags | PROVISIONALLY_USED;
- }
-}
-
-static int MoveCard( AstFitsChan *this, int move, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* MoveCard
-
-* Purpose:
-* Move the current card a given number of cards forward or backwards.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int MoveCard( AstFitsChan *this, int move, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* The current card is increment by the given number of cards, ignoring
-* cards which have been read into an AST object if the ignore_used flag
-* is set non-zero.
-
-* Parameters:
-* this
-* Pointer to the FitsChan containing the list of cards.
-* move
-* The number of cards by which to move the current card. Positive
-* values move towards the end-of-file. Negative values move
-* towards the start of the file (i.e. the list head).
-* method
-* Pointer to string holding name of calling method.
-* class
-* Pointer to string holding object class.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The number of cards actually moved. This may not always be equal to
-* the requested number (for instance, if the end or start of the
-* FitsChan is encountered first).
-
-* Notes:
-* - If the end-of-file is reached before the required number of
-* cards have been skipped, the current card is set NULL, to indicate
-* an end-of-file condition.
-* - If the start of the file is reached before the required number of
-* cards have been skipped, the current card is left pointing to the
-* first usable card.
-* - This function attempts to execute even if an error has occurred.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- FitsCard *card; /* The current card */
- FitsCard *card0; /* The previous non-deleted card */
- int moved; /* The number of cards moved by so far */
-
-/* Return if the supplied object is NULL or the FitsChan is
- empty, or zero movement is requested. */
- if( !this || !this->head || !move ) return 0;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Get a pointer to the current card. */
- card = (FitsCard *) this->card;
-
-/* Initialise the number of cards moved so far. */
- moved = 0;
-
-/* First deal with positive movements (towards the end-of-file). */
- if( move > 0 ){
-
-/* Loop round moving on to the next card until the correct number of
- moves have been made, or the end-of-file is reached. */
- while( moved < move && card ){
-
-/* Get a pointer to the next card in the list, reporting an error if the
- links are inconsistent. */
- card = GetLink( card, NEXT, method, class, status );
-
-/* If we have moved past the last card and are now pointing back at the
- list head, then indicate that we are at end-of-file by setting the
- card pointer NULL. */
- if( (void *) card == this->head ){
- card = NULL;
-
-/* Otherwise, increment the number of cards moved. We ignore cards which
- have been read into an AST object if the external "ignore_used" flag is
- set. */
- } else if( card ){
- if( !CARDUSED(card) ) moved++;
- }
- }
-
-/* Now deal with negative movements (towards the list head), so long as
- we are not currently at the list head. */
- } else if( (void *) card != this->head ){
-
-/* If we are currently at end-of-file, replace the NULL pointer for the
- current card with a pointer to the list head. The first step backwards
- will make the last card the current card. */
- if( !card ) card = (FitsCard *) this->head;
-
-/* Loop round until the correct number of cards have been moved. */
- while( moved < -move && card ){
-
-/* If cards which have been read into an AST object are to be included in the
- count of moved cards, get a pointer to the previous card in the list,
- reporting an error if the links are inconsistent. */
- if( !ignore_used ){
- card = GetLink( card, PREVIOUS, method, class, status );
-
-/* If cards which have been read into an AST object are to be ignored... */
- } else {
-
-/* We need to find the previous card which has not been read into an AST
- object. We do not search beyond the start of the list. */
- card0 = GetLink( card, PREVIOUS, method, class, status );
- while( card0 && CARDUSED(card0) && (void *) card0 != this->head ){
- card0 = GetLink( card0, PREVIOUS, method, class, status );
- }
-
-/* If no such card was found we leave the card where it is. */
- if( card0 && ( card0->flags & USED ) ) {
- break;
-
-/* Otherwise, move back to card found above. */
- } else {
- card = card0;
- }
-
- }
-
-/* Increment the number of cards moved. */
- moved++;
-
-/* If the current card is the list head, break out of the loop. */
- if( (void *) card == this->head ) break;
-
- }
-
- }
-
-/* Store the new current card. */
- this->card = (void *) card;
-
-/* Return the answer. */
- return moved;
-
-}
-
-static double NearestPix( AstMapping *map, double val, int axis, int *status ){
-/*
-* Name:
-* NearestPix
-
-* Purpose:
-* Find an axis value which corresponds to an integer pixel value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* double NearestPix( AstMapping *map, double val, int axis, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* The supplied axis value is transformed using the inverse of the
-* supplied Mapping (other axes are given the value AST__BAD). The
-* resulting axis values are rounded to the nearest whole number, and
-* then transformed back using the supplied Mapping in the forward
-* direction. If the nominated axis value is good, it is returned as
-* the function value, otherwise the supplied value is returned unchanged.
-
-* Parameters:
-* map
-* A Mapping (usually the input coordinates will correspond to
-* pixel coordinates).
-* val
-* A value for one of the outputs of the "map" Mapping.
-* axis
-* The index of the Mapping output to which "val" refers.
-* status
-* Pointer to the inherited status variable.
-
-* Retuned Value:
-* The modified output axis value.
-
-*/
-
-/* Local Variables: */
- AstPointSet *pset1; /* Pixel coords PointSet */
- AstPointSet *pset2; /* WCS coords PointSet */
- double **ptr1; /* Pointer to data in pset1 */
- double **ptr2; /* Pointer to data in pset2 */
- double result; /* Returned value */
- int i; /* Loop count */
- int nin; /* Number of Mapping inputs */
- int nout; /* Number of Mapping outputs */
-
-/* Initialise. */
- result = val;
-
-/* Check inherited status, and that the supplied value is good. */
- if( !astOK || result == AST__BAD ) return result;
-
-/* Get the number of input and output coordinates. */
- nin = astGetNin( map );
- nout = astGetNout( map );
-
-/* Create PointSets to hold a single input position and the corresponding
- output position. */
- pset1 = astPointSet( 1, nin, "", status );
- ptr1 = astGetPoints( pset1 );
- pset2 = astPointSet( 1, nout, "", status );
- ptr2 = astGetPoints( pset2 );
- if( astOK ) {
-
-/* Assign AST__BAD values to all output axes, except for the specified
- axis, which is given the supplied axis value. */
- for( i = 0; i < nout; i++ ) ptr2[ i ][ 0 ] = AST__BAD;
- ptr2[ axis ][ 0 ] = val;
-
-/* Transform this output position into an input position. */
- (void) astTransform( map, pset2, 0, pset1 );
-
-/* Round all good axis values in the resulting input position to the nearest
- integer. */
- for( i = 0; i < nin; i++ ) {
- if( ptr1[ i ][ 0 ] != AST__BAD ) {
- ptr1[ i ][ 0 ] = (int) ( ptr1[ i ][ 0 ] + 0.5 );
- }
- }
-
-/* Transform this input position back into output coords. */
- (void) astTransform( map, pset1, 1, pset2 );
-
-/* If the resulting axis value is good, return it. */
- if( ptr2[ axis ] [ 0 ] != AST__BAD ) result = ptr2[ axis ] [ 0 ];
-
- }
-
-/* Free resources. */
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
-
-/* Return the result. */
- return result;
-}
-
-static void NewCard( AstFitsChan *this, const char *name, int type,
- const void *data, const char *comment, int flags,
- int *status ){
-/*
-* Name:
-* NewCard
-
-* Purpose:
-* Insert a new card in front of the current card.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void NewCard( AstFitsChan *this, const char *name, int type,
-* const void *data, const char *comment, int flags,
-* int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* The supplied keyword name, data type and value, and comment are
-* stored in a new FitsCard structure, and this structure is
-* inserted into the circular linked list stored in the supplied
-* FitsChan. It is inserted in front of the current card.
-
-* Parameters:
-* this
-* Pointer to the FitsChan containing the list of cards.
-* name
-* Pointer to a string holding the keyword name of the new card.
-* type
-* An integer value representing the data type of the keyword.
-* data
-* Pointer to the data associated with the keyword.
-* comment
-* Pointer to a null-terminated string holding a comment.
-* flags
-* The flags to assign to the card.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The new card is inserted into the list in front of the current card,
-* so that the "next" link from the new card points to the current card.
-* If the FitsChan is currently at end-of-file (indicated by a NULL
-* pointer being stored for the current card), then the card is appended
-* to the end of the list. The pointer to the current card is left
-* unchanged.
-* - Keyword names are converted to upper case before being stored.
-* - Any trailing white space in a string value is saved as supplied.
-* - Logical values are converted to zero or one before being stored.
-* - The "comment" and/or "data" pointers may be supplied as NULL.
-
-*/
-
-/* Local Variables: */
- FitsCard *new; /* Pointer to the new card */
- FitsCard *prev; /* Pointer to the previous card in the list */
- char *b; /* Pointer to next stored character */
- const char *a; /* Pointer to next supplied character */
- int lval; /* Logical data value restricted to 0 or 1 */
- int nc; /* No. of characters to store */
-
-/* Check the global status. */
- if( !astOK ) return;
-
-/* Get memory to hold the new FitsCard structure. */
- new = (FitsCard *) astMalloc( sizeof( FitsCard ) );
-
-/* Check the pointer can be used. */
- if( astOK ){
-
-/* Copy the keyword name, converting to upper case. */
- a = name;
- b = new->name;
- while( *a ) *(b++) = (char) toupper( (int) *(a++) );
- *b = 0;
-
-/* Ensure that a KeyMap exists to hold the keywords currently in the
- FitsChan. */
- if( !this->keywords ) this->keywords = astKeyMap( "", status );
-
-/* Add the keyword name to the KeyMap. The value associated with the
- KeyMap entry is not used and is set arbitrarily to zero. */
- astMapPut0I( this->keywords, new->name, 0, NULL );
-
-/* Copy the data type. */
- new->type = type;
-
-/* Copy any data (ignore any data supplied for an UNDEF value). */
- if( data && type != AST__UNDEF ){
-
-/* Logical values are converted to zero or one before being stored. */
- if( type == AST__LOGICAL ){
- lval = *( (int *) data ) ? 1 : 0;
- new->size = sizeof( int );
- new->data = astStore( NULL, (void *) &lval, sizeof( int ) );
-
-/* String values... */
- } else if( type == AST__STRING || type == AST__CONTINUE ){
-
-/* Find the number of characters excluding the trailing null character. */
- nc = strlen( data );
-
-/* Store the string, reserving room for a terminating null. */
- new->size = (size_t)( nc + 1 );
- new->data = astStore( NULL, (void *) data, (size_t)( nc + 1 ) );
-
-/* Terminate it. */
- ( (char *) new->data)[ nc ] = 0;
-
-/* Other types are stored as supplied. */
- } else if( type == AST__INT ){
- new->size = sizeof( int );
- new->data = astStore( NULL, (void *) data, sizeof( int ) );
-
- } else if( type == AST__FLOAT ){
- new->size = sizeof( double );
- new->data = astStore( NULL, (void *) data, sizeof( double ) );
-
- } else if( type == AST__COMPLEXF ){
- new->size = 2*sizeof( double );
- new->data = astStore( NULL, (void *) data, 2*sizeof( double ) );
-
- } else if( type == AST__COMPLEXI ){
- new->size = 2*sizeof( int );
- new->data = astStore( NULL, (void *) data, 2*sizeof( int ) );
-
- } else {
- new->size = 0;
- new->data = NULL;
- }
-
- } else {
- new->size = 0;
- new->data = NULL;
- }
-
-/* Find the first non-blank character in the comment, and find the used
- length of the remaining string. We retain leading and trailing white
- space if the card is a COMMENT card. */
- if( comment ){
- a = comment;
- if( type != AST__COMMENT ) {
- while( isspace( *a ) ) a++;
- nc = ChrLen( a, status );
- } else {
- nc = strlen( a );
- }
- } else {
- nc = 0;
- }
-
-/* Copy any comment, excluding leading and trailing white space unless
- this is a COMMENT card */
- if( nc > 0 ){
- new->comment = astStore( NULL, (void *) a, (size_t)( nc + 1 ) );
- ( (char *) new->comment)[ nc ] = 0;
- } else {
- new->comment = NULL;
- }
-
-/* Set the supplied flag values. */
- new->flags = flags;
-
-/* Insert the copied card into the list, in front of the current card. If
- the current card is the list head, make the new card the list head. */
- if( this->card ){
- prev = ( ( FitsCard *) this->card )->prev;
- ( ( FitsCard *) this->card )->prev = new;
- new->prev = prev;
-
- prev->next = new;
- new->next = (FitsCard *) this->card;
-
- if( this->card == this->head ) this->head = (void *) new;
-
-/* If the FitsChan is at end-of-file, append the new card to the end of
- the list (i.e. insert it just before the list head). */
- } else {
-
- if( this->head ){
- prev = ( (FitsCard *) this->head )->prev;
- ( (FitsCard *) this->head )->prev = new;
- new->prev = prev;
-
- prev->next = new;
- new->next = (FitsCard *) this->head;
-
-/* If there are no cards in the list, start a new list. */
- } else {
- new->prev = new;
- new->next = new;
- this->head = (void *) new;
- this->card = NULL;
- }
-
- }
-
- }
-
-/* Return. */
- return;
-
-}
-
-static AstMapping *NonLinSpecWcs( AstFitsChan *this, char *algcode,
- FitsStore *store, int i, char s,
- AstSpecFrame *specfrm, const char *method,
- const char *class, int *status ) {
-/*
-* Name:
-* NonLinSpecWcs
-
-* Purpose:
-* Create a Mapping describing a FITS-WCS non-linear spectral algorithm
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* AstMapping *NonLinSpecWcs( AstFitsChan *this, char *algcode,
-* FitsStore *store, int i, char s,
-* AstSpecFrame *specfrm, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function uses the contents of the supplied FitsStore to create
-* a Mapping which goes from Intermediate World Coordinate (known as "w"
-* in the context of FITS-WCS paper III) to the spectral system
-* described by the supplied SpecFrame.
-*
-* The returned Mapping implements the non-linear "X2P" algorithms
-* described in FITS-WCS paper III. The axis is linearly sampled in
-* system "X" but expressed in some other system (specified by the
-* supplied SpecFrame).
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* algcode
-* Pointer to a string holding the non-linear "-X2P" code for the
-* required algorithm. This includes aleading "-" character.
-* store
-* Pointer to the FitsStore structure holding the values to use for
-* the WCS keywords.
-* i
-* The zero-based index of the spectral axis within the FITS header
-* s
-* A character identifying the co-ordinate version to use. A space
-* means use primary axis descriptions. Otherwise, it must be an
-* upper-case alphabetical characters ('A' to 'Z').
-* specfrm
-* Pointer to the SpecFrame. This specified the "S" system - the
-* system in which the CRVAL kewyords (etc) are specified.
-* method
-* A pointer to a string holding the name of the calling method.
-* This is used only in the construction of error messages.
-* class
-* A pointer to a string holding the class of the object being
-* read. This is used only in the construction of error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a Mapping, or NULL if an error occurs.
-
-*/
-
-/* Local Variables: */
- AstFrameSet *fs;
- AstMapping *map1;
- AstMapping *ret;
- AstSpecFrame *xfrm;
- AstMapping *map2;
- char buf[ 100 ];
- char pc;
- double crv;
- double ds;
- double in_a;
- double in_b;
- double out_a;
- double out_b;
- int ok;
- int s_sys;
-
-/* Check the global status. */
- ret = NULL;
- if( !astOK ) return ret;
-
-/* Identify the spectral "X" system within the "X2P" algorithm code, and
- create a SpecFrame describing the X system ("X" is the system in
- which the axis is linearly sampled). This is done by copying the
- supplied SpecFrame and then setting its System attribute. Copying
- the supplied SpecFrame ensures that all the other attributes (RestFreq,
- etc.) are set correctly. */
- ok = 1;
- xfrm = astCopy( specfrm );
- if( algcode[ 1 ] == 'F' ) {
- astSetSystem( xfrm, AST__FREQ );
- astSetUnit( xfrm, 0, "Hz" );
-
- } else if( algcode[ 1 ] == 'W' ) {
- astSetSystem( xfrm, AST__WAVELEN );
- astSetUnit( xfrm, 0, "m" );
-
- } else if( algcode[ 1 ] == 'V' ) {
- astSetSystem( xfrm, AST__VREL );
- astSetUnit( xfrm, 0, "m/s" );
-
- } else if( algcode[ 1 ] == 'A' ) {
- astSetSystem( xfrm, AST__AIRWAVE );
- astSetUnit( xfrm, 0, "m" );
-
- } else {
- ok = 0;
- }
-
-/* If the X system was identified, find a Mapping from the "S" (specfrm)
- system to the X system. */
- map1 = NULL;
- if( ok ) {
- ok = 0;
- fs = astConvert( specfrm, xfrm, "" );
- if( fs ) {
- map1 = astGetMapping( fs, AST__BASE, AST__CURRENT );
- fs = astAnnul( fs );
- ok = 1;
- }
-
-/* Issue a warning if the "P" system is not the correct one for the given
- "S" system. We can however continue, sine AST interprets illegal "P"
- systems correctly. */
- pc = 0;
- s_sys = astGetSystem( specfrm );
- if( s_sys == AST__FREQ || s_sys == AST__ENERGY ||
- s_sys == AST__WAVENUM || s_sys == AST__VRADIO ) {
- pc = 'F';
-
- } else if( s_sys == AST__WAVELEN || s_sys == AST__VOPTICAL ||
- s_sys == AST__REDSHIFT ){
- pc = 'W';
-
- } else if( s_sys == AST__AIRWAVE ) {
- pc = 'A';
-
- } else if( s_sys == AST__BETA || s_sys == AST__VREL ) {
- pc = 'V';
-
- } else if( astOK ) {
- pc = algcode[ 3 ];
- astError( AST__INTER, "%s: Function NonLinSpecWcs does not yet "
- "support spectral axes of type %s (internal AST "
- "programming error).", status, method, astGetC( specfrm, "System" ) );
- }
-
- if( algcode[ 3 ] != pc ) {
- sprintf( buf, "The spectral CTYPE value %s%s is not legal - "
- "using %s%.3s%c instead.", astGetC( specfrm, "System" ),
- algcode, astGetC( specfrm, "System" ), algcode, pc );
- Warn( this, "badctype", buf, method, class, status );
- }
- }
-
-/* If succesfull, use this Mapping to find the reference value (CRVAL)
- in the "X" system. */
- if( ok ) {
-
-/* Get the CRVAL value for the spectral axis (this will be in the S system). */
- crv = GetItem( &(store->crval), i, 0, s, NULL, method, class, status );
- if( crv == AST__BAD ) crv = 0.0;
-
-/* Convert it to the X system. */
- astTran1( map1, 1, &crv, 1, &crv );
-
-/* Invert this Mapping so that it forward transformation goes from X to S. */
- astInvert( map1 );
-
-/* Find the rate of change of S with respect to X (dS/dX) at the reference
- point (x = crv). */
- ds = astRate( map1, &crv, 0, 0 );
- if( ds != AST__BAD && ds != 0.0 ) {
-
-/* FITS-WCS paper III says that dS/dw must be 1.0 at the reference point.
- Therefore dX/dw = dX/dS at the reference point. Also, since the spectral
- axis is linear in X, dX/dw must be constant. Therefore the Mapping from
- IWC to X is a WinMap which scales the IWC axis ("w") by dX/dw and adds
- on the X value at the reference point. */
- if( crv != 0.0 ) {
- in_a = 0.0;
- out_a = crv;
- in_b = crv*ds;
- out_b = 2.0*crv;
- map2 = (AstMapping *) astWinMap( 1, &in_a, &in_b, &out_a, &out_b, "", status );
-
- } else {
- map2 = (AstMapping *) astZoomMap( 1, 1.0/ds, "", status );
- }
-
-/* The Mapping to be returned is the concatenation of the above Mapping
- (from w to X) with the Mapping from X to S. */
- ret = (AstMapping *) astCmpMap( map2, map1, 1, "", status );
- map1 = astAnnul( map1 );
- map2 = astAnnul( map2 );
- }
- }
-
- xfrm = astAnnul( xfrm );
-
-/* Return the result */
- return ret;
-}
-
-static double *OrthVector( int n, int m, double **in, int *status ){
-/*
-* Name:
-* OrthVector
-
-* Purpose:
-* Find a unit vector which is orthogonal to a set of supplied vectors.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* double *OrthVector( int n, int m, double **in, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* A set of M vectors is supplied, each vector being N-dimensional.
-* It is assumed that M < N and that the supplied vectors span M
-* axes within the N dimensional space. An N-dimensional unit vector is
-* returned which is orthogonal to all the supplied vectors.
-*
-* The required vector is orthogonal to all the supplied vectors.
-* Therefore the dot product of the required vector with each of the
-* supplied vectors must be zero. This gives us M equations of the
-* form:
-*
-* a1*r1 + a2*r2 + a3*r3 + .... + aN*rN = 0.0
-* b1*r1 + b2*r2 + b3*r3 + .... + bN*rN = 0.0
-* ...
-*
-* where (a1,a2,..,aN), (b1,b2,..,bN), ... are the supplied vectors
-* and (r1,r2,...,rN) is the required vector. Since M is less
-* than N the system of linear simultaneous equations is under
-* specified and we need to assign arbitrary values to some of the
-* components of the required vector in order to allow the equations
-* to be solved. We arbitrarily assume that 1 element of the required
-* vector has value 1.0 and (N-M-1) have value zero. The selection of
-* *which* elements to set constant is based on the magnitudes of the
-* columns of coefficients (a1,b1...), (a2,b2,...), etc. The M components
-* of the required vector which are *not* set constant are the ones which
-* have coefficient columns with the *largest* magnitude. This choice is
-* made in order to minimise the risk of the remaining matrix of
-* coefficients being singular (for instance, if a component of the
-* required vector has a coefficient of zero in every supplied vector
-* then the column magnitude will be zero and that component will be
-* set to 1.0). After choosing the M largest columns, the largest
-* remaining column is assigned a value of 1.0 in the required vector,
-* and all other columns are assigned the value zero in the required
-* vector. This means that the above equations becomes:
-*
-* a1*r1 + a2*r2 + a3*r3 + .... + aM*rM = -aM+1
-* b1*r1 + b2*r2 + b3*r3 + .... + bM*rM = -bM+1
-* ...
-*
-* Where the indices are now not direct indices into the supplied and
-* returned vectors, but indices into an array of indices which have
-* been sorted into column magnitude order. This is now a set of MxM
-* simultaneous linear equations which we can solve using palSlaDmat:
-*
-* MAT.R = V
-*
-* where MAT is the the matrix of columns (coefficients) on the left
-* hand side of the above set of simultaneous equations, R is the
-* required vector (just the components which have *not* been set
-* constant), and V is a constant vector equal to the column of values
-* on the right hand side in the above set of simultaneous equations.
-* The palSlaDmat function solves this equation to obtain R.
-
-* Parameters:
-* n
-* The number of dimensions
-* m
-* The number of supplied vectors.
-* in
-* A pointer to an array with "m" elements, each element being a
-* pointer to an array with "n" elements. Each of these "n" element
-* array holds one of the supplied vectors.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The pointer to some newly allocated memory holding the returned N
-* dimensional unit vector. The memory should be freed using astFree when
-* no longer needed.
-
-* Notes:
-* - NULL is returned if an error occurs.
-* - NULL is returned (without error) if the required vector cannot
-* be found (.e.g becuase the supplied M vectors span less than M axes).
-*/
-
-/* Local Variables: */
- double *colmag;
- double *d;
- double *e;
- double *mat;
- double *mel;
- double *ret;
- double *rhs;
- double det;
- double sl;
- int *colperm;
- int *iw;
- int done;
- int i;
- int ih;
- int ii;
- int il;
- int j;
- int sing;
-
-/* Initialise */
- ret = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* Return if any of the M supplied vectors are NULL. */
- for( i = 0; i < m; i++ ) {
- if( !in[ i ] ) return ret;
- }
-
-/* Allocate rquired memory. */
- ret = astMalloc( sizeof( double )*(size_t) n );
- rhs = astMalloc( sizeof( double )*(size_t) m );
- mat = astMalloc( sizeof( double )*(size_t) m*m );
- iw = astMalloc( sizeof( int )*(size_t) m );
- colmag = astMalloc( sizeof( double )*(size_t) n );
- colperm = astMalloc( sizeof( int )*(size_t) n );
-
-/* Check memory can be used safely. */
- if( astOK ) {
-
-/* Find the magnitude of each column of coefficients in the full set of
- simultaneous linear equations (before setting any components of the
- required vector constant). Also initialise the column permutation array
- to indicate that the columns are in their original order. The outer
- loop loops through the columns and the inner loop loops through rows
- (i.e. equations). */
- for( i = 0; i < n; i++ ) {
- colperm[ i ] = i;
- colmag[ i ] = 0.0;
- for( j = 0; j < m; j++ ) {
- colmag[ i ] += in[ j ][ i ]*in[ j ][ i ];
- }
- }
-
-/* Now re-arrange the column indices within the permutation array so that
- they are in order of decreasing ciolumn magnitude (i.e. colperm[0] will
- be left holding the index of the column with the largest magnitude). A
- simple bubble sort is used. */
- ii = 1;
- done = 0;
- while( !done ) {
- done = 1;
- for( i = ii; i < n; i++ ) {
- ih = colperm[ i ];
- il = colperm[ i - 1 ];
- if( colmag[ ih ] > colmag[ il ] ) {
- colperm[ i ] = il;
- colperm[ i - 1 ] = ih;
- done = 0;
- }
- }
- ii++;
- }
-
-/* The first M elements in "colperm" now hold the indices of the
- columns which are to be used within the MAT matrix, the next element
- of "colperm" hold the index of the column which is to be included in the
- V vector (other elements hold the indices of the columns which are
- being ignored because they will be mutiplied by a value of zero - the
- assumed value of the corresponding components of the returned vector). We
- now copy the these values into arrays which can be passed to palSlaDmat.
- First, initialise a pointer used to step through the mat array. */
- mel = mat;
-
-/* Loop through all the supplied vectors. Get a pointer to the first
- element of the vector. */
- for( i = 0; i < m; i++ ) {
- d = in[ i ];
-
-/* Copy the required M elements of this supplied vector into the work array
- which will be passed to palSlaDmat. */
- for( j = 0; j < m; j++ ) *(mel++) = d[ colperm[ j ] ];
-
-/* Put the next right-hand side value into the "rhs" array. */
- rhs[ i ] = -d[ colperm[ m ] ];
- }
-
-/* Use palSlaDmat to find the first M elements of the returned array. These
- are stored in "rhs", over-writing the original right-hand side values. */
- palSlaDmat( m, mat, rhs, &det, &sing, iw );
-
-/* If the supplied vectors span fewer than M axes, the above call will fail.
- In this case, annul the returned vector. */
- if( sing != 0 ) {
- ret = astFree( ret );
-
-/* If succesful, copy the M elements of the solution vector into the
- required M elements of the returned vector. Also find the squared length
- of the vector. */
- } else {
- sl = 0.0;
- e = rhs;
- for( j = 0; j < m; j++ ) {
- sl += (*e)*(*e);
- ret[ colperm[ j ] ] = *(e++);
- }
-
-/* Put 1.0 into the next element of the returned vector. */
- sl += 1.0;
- ret[ colperm[ m ] ] = 1.0;
-
-/* Fill up the rest of the returned vector with zeros. */
- for( j = m + 1; j < n; j++ ) ret[ colperm[ j ] ] = 0.0;
-
-/* Normalise the returned vector so that it is a unit vector.Also ensure
- that any zeros are "+0.0" insteasd of "-0.0". */
- e = ret;
- sl = sqrt( sl );
- for( j = 0; j < n; e++,j++ ) {
- *e /= sl;
- if( *e == 0.0 ) *e = 0.0;
- }
- }
- }
-
-/* Free workspace. */
- rhs = astFree( rhs );
- mat = astFree( mat );
- iw = astFree( iw );
- colmag = astFree( colmag );
- colperm = astFree( colperm );
-
-/* Free the returned vector if an error has occurred. */
- if( !astOK ) ret = astFree( ret );
-
-/* Return the answer. */
- return ret;
-
-}
-
-static double **OrthVectorSet( int n, int m, double **in, int *status ){
-/*
-* Name:
-* OrthVectorSet
-
-* Purpose:
-* Find a set of mutually orthogonal vectors.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* double **OrthVectorSet( int n, int m, double **in, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* A set of M vectors is supplied, each vector being N-dimensional.
-* It is assumed that the supplied vectors span M axes within the
-* N dimensional space. A pointer to a set of N vectors is returned.
-* The first M returned vectors are copies of the M supplied vectors.
-* The remaining returned vectors are unit vectors chosen to be
-* orthogonal to all other vectors in the returned set.
-
-* Parameters:
-* n
-* The number of dimensions
-* m
-* The number of supplied vectors.
-* in
-* A pointer to an array with "m" elements, each element being a
-* pointer to an array with "n" elements. Each of these "n" element
-* array holds one of the supplied vectors.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The pointer to some newly allocated memory holding the returned N
-* vectors. The pointer locates an array of N elements, each of which
-* is a pointer to an array holding the N elements of a single vector.
-* The memory (including the inner pointers) should be freed using
-* astFree when no longer needed.
-
-* Notes:
-* - NULL is returned if an error occurs.
-* - NULL is returned (without error) if the required vectors cannot
-* be found (e.g. becuase the supplied M vectors span less than M axes).
-*/
-
-/* Local Variables: */
- double **ret;
- int i;
- int bad;
-
-/* Initialise */
- ret = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* Allocate required memory. */
- ret = astMalloc( sizeof( double * )*(size_t) n );
-
-/* Check memory can be used safely. */
- bad = 0;
- if( astOK ) {
-
-/* Copy the supplied vectors into the returned array. */
- for( i = 0; i < m; i++ ) {
- ret[ i ] = astStore( NULL, in[ i ], sizeof( double )*n );
- }
-
-/* For the remaining vectors, find a vector which is orthogonal to all
- the vectors currently in the returned set. */
- for( ; i < n; i++ ) {
- ret[ i ] = OrthVector( n, i, ret, status );
- if( !ret[ i ] ) bad = 1;
- }
- }
-
-/* Free the returned vectors if an error has occurred. */
- if( bad || !astOK ) {
- for( i = 0; ret && i < n; i++ ) ret[ i ] = astFree( ret[ i ] );
- ret = astFree( ret );
- }
-
-/* Return the answer. */
- return ret;
-
-}
-
-static AstMapping *OtherAxes( AstFrameSet *fs, double *dim, int *wperm,
- char s, FitsStore *store, double *crvals,
- int *axis_done, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* OtherAxes
-
-* Purpose:
-* Add values to a FitsStore describing unknown axes in a Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* AstMapping *OtherAxes( AstFrameSet *fs, double *dim, int *wperm,
-* char s, FitsStore *store, double *crvals,
-* int *axis_done, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* FITS WCS keyword values are added to the supplied FitsStore which
-* describe any as yet undescribed axes in the supplied FrameSet. These
-* axes are assumed to be linear and to follow the conventions
-* of FITS-WCS paper I. Note, this function does not store
-* values for keywords which define the transformation from pixel
-* coords to Intermediate World Coords (CRPIX, PC and CDELT), but a
-* Mapping is returned which embodies these values. This Mapping is
-* from the current Frame in the FrameSet (WCS coords) to a Frame
-* representing IWC. The IWC Frame has the same number of axes as the
-* WCS Frame which may be greater than the number of base Frame (i.e.
-* pixel) axes.
-
-* Parameters:
-* fs
-* Pointer to the FrameSet. The base Frame should represent FITS pixel
-* coordinates, and the current Frame should represent FITS WCS
-* coordinates. The number of base Frame axes should not exceed the
-* number of current Frame axes.
-* dim
-* An array holding the image dimensions in pixels. AST__BAD can be
-* supplied for any unknwon dimensions.
-* wperm
-* Pointer to an array of integers with one element for each axis of
-* the current Frame. Each element holds the zero-based
-* index of the FITS-WCS axis (i.e. the value of "i" in the keyword
-* names "CTYPEi", "CRVALi", etc) which describes the Frame axis.
-* s
-* The co-ordinate version character. A space means the primary
-* axis descriptions. Otherwise the supplied character should be
-* an upper case alphabetical character ('A' to 'Z').
-* store
-* The FitsStore in which to store the FITS WCS keyword values.
-* crvals
-* Pointer to an array holding the default CRVAL value for each
-* axis in the WCS Frame.
-* axis_done
-* An array of flags, one for each Frame axis, which indicate if a
-* description of the corresponding axis has yet been stored in the
-* FitsStore.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If any axis descriptions were added to the FitsStore, a Mapping from
-* the current Frame of the supplied FrameSet, to the IWC Frame is returned.
-* Otherwise, a UnitMap is returned. Note, the Mapping only defines the IWC
-* transformation for the described axes. Any other (previously
-* described) axes are passed unchanged by the returned Mapping.
-
-*/
-
-/* Local Variables: */
- AstFrame *wcsfrm; /* WCS Frame within FrameSet */
- AstMapping *axmap; /* Mapping from WCS to IWC */
- AstMapping *map; /* FITS pixel->WCS Mapping */
- AstMapping *ret; /* Returned Mapping */
- AstMapping *tmap0; /* Pointer to a temporary Mapping */
- AstPointSet *pset1; /* PointSet holding central pixel position */
- AstPointSet *pset2; /* PointSet holding reference WCS position */
- char buf[80]; /* Text buffer */
- const char *lab; /* Pointer to axis Label */
- const char *sym; /* Pointer to axis Symbol */
- double **ptr1; /* Pointer to data for pset1 */
- double **ptr2; /* Pointer to data for pset2 */
- double *lbnd_p; /* Pointer to array of lower pixel bounds */
- double *ubnd_p; /* Pointer to array of upper pixel bounds */
- double crval; /* The value for the FITS CRVAL keyword */
- int fits_i; /* FITS WCS axis index */
- int iax; /* WCS Frame axis index */
- int log_axis; /* Is the axis logarithmically spaced? */
- int nother; /* Number of axes still to be described */
- int nc; /* Number of characters */
- int npix; /* Number of pixel axes */
- int nwcs; /* Number of WCS axes */
- int ok; /* Are all remaining axes describable? */
-
-/* Initialise */
- ret = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* Get the number of WCS axes. */
- nwcs = astGetNaxes( fs );
-
-/* Count the number of WCS axes which have not yet been described. */
- nother = 0;
- for( iax = 0; iax < nwcs; iax++ ) {
- if( ! axis_done[ iax ] ) nother++;
- }
-
-/* Only proceed if there are some axes to described. */
- if( nother ) {
-
-/* Get a pointer to the WCS Frame. */
- wcsfrm = astGetFrame( fs, AST__CURRENT );
-
-/* Get a pointer to the pixel->wcs Mapping. */
- map = astGetMapping( fs, AST__BASE, AST__CURRENT );
-
-/* Store the number of pixel and WCS axes. */
- npix = astGetNin( fs );
- nwcs = astGetNout( fs );
-
-/* Store the upper and lower pixel bounds. */
- lbnd_p = astMalloc( sizeof( double )*(size_t) npix );
- ubnd_p = astMalloc( sizeof( double )*(size_t) npix );
- if( astOK ) {
- for( iax = 0; iax < npix; iax++ ) {
- lbnd_p[ iax ] = 1.0;
- ubnd_p[ iax ] = ( dim[ iax ] != AST__BAD ) ? dim[ iax ] : 500;
- }
- }
-
-/* Transform the central pixel coords into WCS coords */
- pset1 = astPointSet( 1, npix, "", status );
- ptr1 = astGetPoints( pset1 );
- pset2 = astPointSet( 1, nwcs, "", status );
- ptr2 = astGetPoints( pset2 );
- if( astOK ) {
- for( iax = 0; iax < npix; iax++ ) {
- ptr1[ iax ][ 0 ] = ( dim[ iax ] != AST__BAD ) ? floor( 0.5*dim[ iax ] ) : 1.0;
- }
- (void) astTransform( map, pset1, 1, pset2 );
- }
-
-/* Loop round all WCS axes, producing descriptions of any axes which have not
- yet been described. */
- ok = 1;
- for( iax = 0; iax < nwcs && astOK; iax++ ) {
- if( ! axis_done[ iax ] ) {
-
-/* Get the (one-based) FITS WCS axis index to use for this Frame axis. */
- fits_i = wperm[ iax ];
-
-/* Use the supplied default CRVAL value. If bad, use the WCS value
- corresponding to the central pixel found above (if this value is bad,
- abort). */
- crval = crvals ? crvals[ iax ] : AST__BAD;
- if( crval == AST__BAD ) crval = ptr2[ iax ][ 0 ];
- if( crval == AST__BAD ) {
- ok = 0;
- break;
- } else {
- SetItem( &(store->crval), fits_i, 0, s, crval, status );
- }
-
-/* If the "log" algorithm is appropriate (as defined in FITS-WCS paper III),
- the supplied Frame (s) is related to pixel coordinate (p) by
-
- s = Sr.EXP( a*p - b ). If this
-
- is the case, the log of s will be linearly related to pixel coordinates.
- Test this. If the test is passed a Mapping is returned from WCS to IWC. */
- axmap = LogAxis( map, iax, nwcs, lbnd_p, ubnd_p, crval, status );
-
-/* If the axis is not logarthmic, we assume it is linear. Create a ShiftMap
- which subtracts off the CRVAL value. */
- if( !axmap ) {
- log_axis = 0;
- crval = -crval;
- tmap0 = (AstMapping *) astShiftMap( 1, &crval, "", status );
- axmap = AddUnitMaps( tmap0, iax, nwcs, status );
- tmap0 = astAnnul( tmap0 );
- crval = -crval;
- } else {
- log_axis = 1;
- }
-
-/* Combine the Mapping for this axis in series with those of earlier axes. */
- if( ret ) {
- tmap0 = (AstMapping *) astCmpMap( ret, axmap, 1, "", status );
- (void) astAnnul( ret );
- ret = tmap0;
- } else {
- ret = astClone( axmap );
- }
-
-/* Get axis label and symbol. */
- sym = astGetSymbol( wcsfrm, iax );
- lab = astGetLabel( wcsfrm, iax );
-
-/* The axis symbols are taken as the CTYPE values. Append "-LOG" if the
- axis is logarithmic and the symbold does not already end with "-LOG". */
- if( sym && strlen( sym ) ) {
- nc = sprintf( buf, "%s", sym );
- } else {
- nc = sprintf( buf, "AXIS%d", iax + 1 );
- }
- if( log_axis && strcmp( buf + nc - 4, "-LOG" ) ) strcpy( buf + nc, "-LOG" );
- SetItemC( &(store->ctype), fits_i, s, buf, status );
-
-/* The axis labels are taken as the comment for the CTYPE keywords and as
- the CNAME keyword (but only if a label has been set and is different to
- the symbol). */
- if( lab && lab[ 0 ] && astTestLabel( wcsfrm, iax ) && strcmp( sym, lab ) ) {
- SetItemC( &(store->ctype_com), fits_i, s, (char *) lab, status );
- SetItemC( &(store->cname), fits_i, s, (char *) lab, status );
- } else {
- sprintf( buf, "Type of co-ordinate on axis %d", iax + 1 );
- SetItemC( &(store->ctype_com), fits_i, s, buf, status );
- }
-
-/* If a value has been set for the axis units, use it as CUNIT. */
- if( astTestUnit( wcsfrm, iax ) ){
- SetItemC( &(store->cunit), fits_i, s, (char *) astGetUnit( wcsfrm, iax ), status );
- }
-
-/* Indicate this axis has now been described. */
- axis_done[ iax ] = 1;
-
-/* Release Resources. */
- axmap = astAnnul( axmap );
- }
- }
-
-/* Release Resources. */
- wcsfrm = astAnnul( wcsfrm );
- map = astAnnul( map );
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
- lbnd_p = astFree( lbnd_p );
- ubnd_p = astFree( ubnd_p );
- }
-
-/* If we have a Mapping to return, simplify it. Otherwise, create
- a UnitMap to return. */
- if( ret ) {
- tmap0 = ret;
- ret = astSimplify( tmap0 );
- tmap0 = astAnnul( tmap0 );
- } else {
- ret = (AstMapping *) astUnitMap( nwcs, "", status );
- }
-
-/* Return the result. */
- return ret;
-
-}
-
-static int PCFromStore( AstFitsChan *this, FitsStore *store,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* PCFromStore
-
-* Purpose:
-* Store WCS keywords in a FitsChan using FITS-PC encoding.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* int PCFromStore( AstFitsChan *this, FitsStore *store,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* A FitsStore is a structure containing a generalised represention of
-* a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-* from a set of FITS header cards (using a specified encoding), or
-* an AST FrameSet. In other words, a FitsStore is an encoding-
-* independant intermediary staging post between a FITS header and
-* an AST FrameSet.
-*
-* This function copies the WCS information stored in the supplied
-* FitsStore into the supplied FitsChan, using FITS-PC encoding.
-*
-* Zero is returned if the primary axis descriptions cannot be produced.
-* Whether or not secondary axis descriptions can be produced does not
-* effect the returned value (i.e. failure to produce a specific set of
-* secondary axes does not prevent other axis descriptions from being
-* produced).
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* store
-* Pointer to the FitsStore.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A value of 1 is returned if succesfull, and zero is returned
-* otherwise.
-
-*/
-
-/* Local Variables: */
- char *comm; /* Pointer to comment string */
- char *cval; /* Pointer to string keyword value */
- char combuf[80]; /* Buffer for FITS card comment */
- char keyname[10]; /* Buffer for keyword name string */
- char primsys[20]; /* Buffer for primnary RADECSYS value */
- char type[MXCTYPELEN];/* Buffer for CTYPE value */
- char s; /* Co-ordinate version character */
- char sign[2]; /* Fraction's sign character */
- char sup; /* Upper limit on s */
- double *c; /* Pointer to next array element */
- double *d; /* Pointer to next array element */
- double *matrix; /* Pointer to Frame PC/CD matrix */
- double *primpc; /* Pointer to primary PC/CD matrix */
- double fd; /* Fraction of a day */
- double mjd99; /* MJD at start of 1999 */
- double primdt; /* Primary mjd-obs value */
- double primeq; /* Primary equinox value */
- double primln; /* Primary lonpole value */
- double primlt; /* Primary latpole value */
- double primpv[10]; /* Primary projection parameter values */
- double val; /* General purpose value */
- int axlat; /* Index of latitude FITS WCS axis */
- int axlon; /* Index of longitude FITS WCS axis */
- int axspec; /* Index of spectral FITS WCS axis */
- int i; /* Axis index */
- int ihmsf[ 4 ]; /* Hour, minute, second, fractional second */
- int is; /* Co-ordinate version index */
- int iymdf[ 4 ]; /* Year, month, date, fractional day */
- int j; /* Axis index */
- int jj; /* SlaLib status */
- int m; /* Parameter index */
- int maxm; /* Upper limit on m */
- int naxis; /* No. of axes */
- int ok; /* Frame written out succesfully? */
- int prj; /* Projection type */
- int ret; /* Returned value. */
-
-/* Initialise */
- ret = 0;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* Find the number of co-ordinate versions in the FitsStore. FITS-PC
- can only encode 10 axis descriptions (including primary). */
- sup = GetMaxS( &(store->crval), status );
- if( sup > 'I' ) return ret;
-
-/* Initialise */
- primdt = AST__BAD;
- primeq = AST__BAD;
- primln = AST__BAD;
- primlt = AST__BAD;
-
-/* Loop round all co-ordinate versions (0-9) */
- primpc = NULL;
- for( s = ' '; s <= sup && astOK; s++ ){
- is = s - 'A' + 1;
-
-/* Assume the Frame can be created succesfully. */
- ok = 1;
-
-/* Save the number of wcs axes */
- val = GetItem( &(store->wcsaxes), 0, 0, s, NULL, method, class, status );
- if( val != AST__BAD ) {
- naxis = (int) ( val + 0.5 );
- SetValue( this, FormatKey( "WCSAXES", -1, -1, s, status ),
- &naxis, AST__INT, "Number of WCS axes", status );
- } else {
- naxis = GetMaxJM( &(store->crpix), s, status ) + 1;
- }
-
-/* PC matrix:
- --------- */
-
-/* This encoding does not allow the PC matrix to be specified for each
- version - instead they all share the primary PC matrix. Therefore we
- need to check that all versions can use the primary PC matrix. Allocate
- memory to hold the PC matrix for this version. */
- matrix = (double *) astMalloc( sizeof(double)*naxis*naxis );
- if( matrix ){
-
-/* Fill these array with the values supplied in the FitsStore. */
- c = matrix;
- for( i = 0; i < naxis; i++ ){
- for( j = 0; j < naxis; j++ ){
- *c = GetItem( &(store->pc), i, j, s, NULL, method, class, status );
- if( *c == AST__BAD ) *c = ( i == j ) ? 1.0 : 0.0;
- c++;
- }
- }
-
-/* If we are currently processing the primary axis description, take
- a copy of the PC matrix. */
- if( s == ' ' ) {
- primpc = (double *) astStore( NULL, (void *) matrix,
- sizeof(double)*naxis*naxis );
-
-/* Store each matrix element in turn. */
- c = matrix;
- for( i = 0; i < naxis; i++ ){
- for( j = 0; j < naxis; j++ ){
-
-/* Set the element bad if it takes its default value. */
- val = *(c++);
- if( i == j ){
- if( EQUAL( val, 1.0 ) ) val = AST__BAD;
- } else {
- if( EQUAL( val, 0.0 ) ) val = AST__BAD;
- }
-
-/* Only store elements which do not take their default values. */
- if( val != AST__BAD ){
- sprintf( keyname, "PC%.3d%.3d", i + 1, j + 1 );
- SetValue( this, keyname, &val, AST__FLOAT, NULL, status );
- }
- }
- }
-
-/* For secondary axis descriptions, a check is made that the PC values are
- the same as the primary PC values stored earlier. If not, the current
- Frame cannot be stored as a secondary axis description so continue on
- to the next Frame. */
- } else {
- if( primpc ){
- c = matrix;
- d = primpc;
- for( i = 0; i < naxis; i++ ){
- for( j = 0; j < naxis; j++ ){
- if( !EQUAL( *c, *d ) ){
- ok = 0;
- } else {
- c++;
- d++;
- }
- }
- }
-
-/* Continue with the next Frame if the PC matrix for this Frame is different
- to the primary PC matrix. */
- if( !ok ) goto next;
- }
- }
-
- matrix = (double *) astFree( (void *) matrix );
- }
-
-/* CDELT:
- ------ */
- for( i = 0; i < naxis; i++ ){
- val = GetItem( &(store->cdelt), i, 0, s, NULL, method, class, status );
- if( val == AST__BAD ) {
- ok = 0;
- goto next;
- }
- sprintf( combuf, "Pixel scale on axis %d", i + 1 );
- if( s == ' ' ) {
- sprintf( keyname, "CDELT%d", i + 1 );
- } else {
- sprintf( keyname, "C%dELT%d", is, i + 1 );
- }
- SetValue( this, keyname, &val, AST__FLOAT, combuf, status );
- }
-
-/* CRPIX:
- ------ */
- for( j = 0; j < naxis; j++ ){
- val = GetItem( &(store->crpix), 0, j, s, NULL, method, class, status );
- if( val == AST__BAD ) {
- ok = 0;
- goto next;
- }
- sprintf( combuf, "Reference pixel on axis %d", j + 1 );
- if( s == ' ' ) {
- sprintf( keyname, "CRPIX%d", j + 1 );
- } else {
- sprintf( keyname, "C%dPIX%d", is, j + 1 );
- }
- SetValue( this, keyname, &val, AST__FLOAT, combuf, status );
- }
-
-/* CRVAL:
- ------ */
- for( i = 0; i < naxis; i++ ){
- val = GetItem( &(store->crval), i, 0, s, NULL, method, class, status );
- if( val == AST__BAD ) {
- ok = 0;
- goto next;
- }
- sprintf( combuf, "Value at ref. pixel on axis %d", i + 1 );
- if( s == ' ' ) {
- sprintf( keyname, "CRVAL%d", i + 1 );
- } else {
- sprintf( keyname, "C%dVAL%d", is, i + 1 );
- }
- SetValue( this, keyname, &val, AST__FLOAT, combuf, status );
- }
-
-/* CTYPE:
- ------ */
- for( i = 0; i < naxis; i++ ){
- cval = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
- if( !cval ) {
- ok = 0;
- goto next;
- }
-
- comm = GetItemC( &(store->ctype_com), i, s, NULL, method, class, status );
- if( !comm ) {
- sprintf( combuf, "Type of co-ordinate on axis %d", i + 1 );
- comm = combuf;
- }
-
- if( s == ' ' ) {
- sprintf( keyname, "CTYPE%d", i + 1 );
- } else {
- sprintf( keyname, "C%dYPE%d", is, i + 1 );
- }
-
-/* FITS-PC cannot handle celestial axes of type "xxLT" or "xxLN". */
- if( !strncmp( cval + 2, "LT-", 3 ) ||
- !strncmp( cval + 2, "LN-", 3 ) ){
- ok = 0;
- goto next;
- }
-
-/* Extract the projection type as specified by the last 4 characters
- in the CTYPE keyword value. This will be AST__WCSBAD for non-celestial
- axes. */
- prj = astWcsPrjType( cval + 4 );
-
-/* Change the new SFL projection code to to the older equivalent GLS */
- if( prj == AST__SFL ) {
- strcpy( type, cval );
- (void) strcpy( type + 4, "-GLS" );
- cval = type;
- }
-
-/* FITS-PC cannot handle the AST-specific TPN projection. */
- if( prj == AST__TPN ) {
- ok = 0;
- goto next;
- }
-
-/* Store the CTYPE value */
- SetValue( this, keyname, &cval, AST__STRING, comm, status );
- }
-
-/* Get and save CUNIT for all intermediate axes. These are NOT required, so
- do not pass on if they are not available. */
- for( i = 0; i < naxis; i++ ){
- cval = GetItemC( &(store->cunit), i, s, NULL, method, class, status );
- if( cval ) {
- sprintf( combuf, "Units for axis %d", i + 1 );
- if( s == ' ' ) {
- sprintf( keyname, "CUNIT%d", i + 1 );
- } else {
- sprintf( keyname, "C%dNIT%d", is, i + 1 );
- }
- SetValue( this, keyname, &cval, AST__STRING, combuf, status );
- }
- }
-
-/* Get and save RADESYS. This is NOT required, so do not pass on if it is
- not available. If RADECSYS is provided for a secondary axis, it must
- be the same as the primary axis RADECSYS value. If it is not, pass on to
- the next Frame. */
- cval = GetItemC( &(store->radesys), 0, s, NULL, method, class, status );
- if( cval ) {
- if( s == ' ' ) {
- strcpy( primsys, cval );
- SetValue( this, "RADECSYS", &cval, AST__STRING,
- "Reference frame for RA/DEC values", status );
- } else if( strcmp( cval, primsys ) ) {
- ok = 0;
- goto next;
- }
- }
-
-/* Reference equinox. This is NOT required, so do not pass on if it is
- not available. If equinox is provided for a secondary axis, it must
- be the same as the primary axis equinox value. If it is not, pass on to
- the next Frame. */
- val = GetItem( &(store->equinox), 0, 0, s, NULL, method, class, status );
- if( s == ' ' ) {
- primeq = val;
- if( val != AST__BAD ) SetValue( this, "EQUINOX", &val, AST__FLOAT,
- "Epoch of reference equinox", status );
- } else if( !EQUAL( val, primeq ) ){
- ok = 0;
- goto next;
- }
-
-/* Latitude of native north pole. This is NOT required, so do not pass on
- if it is not available. If latpole is provided for a secondary axis, it
- must be the same as the primary axis value. If it is not, pass on to
- the next Frame. */
- val = GetItem( &(store->latpole), 0, 0, s, NULL, method, class, status );
- if( s == ' ' ) {
- primlt = val;
- if( val != AST__BAD ) SetValue( this, "LATPOLE", &val, AST__FLOAT,
- "Latitude of native north pole", status );
- } else if( !EQUALANG( val, primlt ) ){
- ok = 0;
- goto next;
- }
-
-/* Longitude of native north pole. This is NOT required, so do not pass on
- if it is not available. If lonpole is provided for a secondary axis, it
- must be the same as the primary axis value. If it is not, pass on to
- the next Frame. */
- val = GetItem( &(store->lonpole), 0, 0, s, NULL, method, class, status );
- if( s == ' ' ) {
- primln = val;
- if( val != AST__BAD ) SetValue( this, "LONGPOLE", &val, AST__FLOAT,
- "Longitude of native north pole", status );
- } else if( !EQUALANG( val, primln ) ){
- ok = 0;
- goto next;
- }
-
-/* Date of observation. This is NOT required, so do not pass on if it is
- not available. If mjd-obs is provided for a secondary axis, it must be
- the same as the primary axis value. If it is not, pass on to the next
- Frame. */
- val = GetItem( &(store->mjdobs), 0, 0, s, NULL, method, class, status );
- if( s == ' ' ) {
- primdt = val;
- if( val != AST__BAD ) {
- SetValue( this, "MJD-OBS", &val, AST__FLOAT,
- "Modified Julian Date of observation", status );
-
-/* The format used for the DATE-OBS keyword depends on the value of the
- keyword. For DATE-OBS < 1999.0, use the old "dd/mm/yy" format.
- Otherwise, use the new "ccyy-mm-ddThh:mm:ss[.ssss]" format. */
- palSlaCaldj( 99, 1, 1, &mjd99, &jj );
- if( val < mjd99 ) {
- palSlaDjcal( 0, val, iymdf, &jj );
- sprintf( combuf, "%2.2d/%2.2d/%2.2d", iymdf[ 2 ], iymdf[ 1 ],
- iymdf[ 0 ] - ( ( iymdf[ 0 ] > 1999 ) ? 2000 : 1900 ) );
-
- } else {
- palSlaDjcl( val, iymdf, iymdf+1, iymdf+2, &fd, &jj );
- palSlaDd2tf( 3, fd, sign, ihmsf );
- sprintf( combuf, "%4.4d-%2.2d-%2.2dT%2.2d:%2.2d:%2.2d.%3.3d",
- iymdf[0], iymdf[1], iymdf[2], ihmsf[0], ihmsf[1],
- ihmsf[2], ihmsf[3] );
- }
-
-/* Now store the formatted string in the FitsChan. */
- cval = combuf;
- SetValue( this, "DATE-OBS", &cval, AST__STRING,
- "Date of observation", status );
- }
-
- } else if( !EQUAL( val, primdt ) ){
- ok = 0;
- goto next;
- }
-
-/* Look for the celestial and spectral axes. */
- FindLonLatSpecAxes( store, s, &axlon, &axlat, &axspec, method, class, status );
-
-/* If both longitude and latitude axes are present ...*/
- if( axlon >= 0 && axlat >= 0 ) {
-
-/* Get the CTYPE values for the latitude axis. */
- cval = GetItemC( &(store->ctype), axlat, s, NULL, method, class, status );
-
-/* Extract the projection type as specified by the last 4 characters
- in the CTYPE keyword value. */
- prj = ( cval ) ? astWcsPrjType( cval + 4 ) : AST__WCSBAD;
-
-/* Projection parameters. If provided for a secondary axis, they must be
- the same as the primary axis value. If it is not, pass on to the next
- Frame. PC encoding ignores parameters associated with the longitude
- axis. The old PC TAN projection did not have any parameters.
- Pass on if a TAN projection with parameters is found. The number of
- parameters was limited to 10. Pass on if more than 10 are supplied. */
- maxm = GetMaxJM( &(store->pv), ' ', status );
- for( i = 0; i < naxis; i++ ){
- if( i != axlon ) {
- for( m = 0; m <= maxm; m++ ){
- val = GetItem( &(store->pv), i, m, s, NULL, method, class, status );
- if( s == ' ' ){
- if( val != AST__BAD ) {
- if( i != axlat || prj == AST__TAN || m >= 10 ){
- ok = 0;
- goto next;
- } else {
- SetValue( this, FormatKey( "PROJP", m, -1, ' ', status ), &val,
- AST__FLOAT, "Projection parameter", status );
- }
- }
-
- if( i == axlat && m < 10 ) primpv[m] = val;
-
- } else {
- if( ( ( i != axlat || m >= 10 ) && val != AST__BAD ) ||
- ( i == axlat && m < 10 && !EQUAL( val, primpv[m] ) ) ){
- ok = 0;
- goto next;
- }
- }
- }
- }
- }
- }
-
-/* See if a Frame was sucessfully written to the FitsChan. */
-next:
- ok = ok && astOK;
-
-/* If so, indicate we have something to return. */
- if( ok ) ret = 1;
-
-/* Clear any error status so we can continue to produce the next Frame.
- Retain the error if the primary axes could not be produced. After the
- primary axes, do the A axes. */
- if( s != ' ' ) {
- astClearStatus;
- } else {
- s = 'A' - 1;
- }
-
-/* Remove the secondary "new" flags from the FitsChan. This flag is
- associated with cards which have been added to the FitsChan during
- this pass through the main loop in this function. If the Frame was
- written out succesfully, just clear the flags. If anything went wrong
- with this Frame, remove the flagged cards from the FitsChan. */
- FixNew( this, NEW2, !ok, method, class, status );
-
-/* Set the current card so that it points to the last WCS-related keyword
- in the FitsChan (whether previously read or not). */
- FindWcs( this, 1, 1, 0, method, class, status );
- }
-
-/* Annul the array holding the primary PC matrix. */
- primpc = (double *) astFree( (void *) primpc );
-
-/* Return zero or ret depending on whether an error has occurred. */
- return astOK ? ret : 0;
-}
-
-static void PreQuote( const char *value,
- char string[ AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN - 3 ], int *status ) {
-/*
-* Name:
-* PreQuote
-
-* Purpose:
-* Pre-quote FITS character data.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void PreQuote( const char *value,
-* char string[ AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN - 3 ] )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function processes a string value in such a way that it can
-* be stored as a FITS character value (associated with a keyword)
-* and later retrieved unchanged, except for possible truncation.
-*
-* This pre-processing is necessary because FITS does not regard
-* trailing white space as significant, so it is lost. This
-* function adds double quote (") characters around the string if
-* it is necessary in order to prevent this loss. These quotes are
-* also added to zero-length strings and to strings that are
-* already quoted (so that the original quotes are not lost when
-* they are later un-quoted).
-*
-* This function will silently truncate any string that is too long
-* to be stored as a FITS character value, but will ensure that the
-* maximum number of characters are retained, taking account of any
-* quoting required.
-
-* Parameters:
-* value
-* Pointer to a constant null-terminated string containing the
-* input character data to be quoted. All white space is
-* significant.
-* string
-* A character array into which the result string will be
-* written, with a terminating null. The maximum number of
-* characters from the input string that can be accommodated in
-* this is (AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN - 4), but this
-* will be reduced if quoting is necessary.
-
-* Notes:
-* - The UnPreQuote function should be used to reverse the effect
-* of this function on a string (apart from any truncation).
-*/
-
-/* Local Variables: */
- int dq; /* Number of double quotes needed */
- int dquotes; /* Final number of double quotes */
- int i; /* Loop counter for input characters */
- int j; /* Counter for output characters */
- int nc; /* Number of characters to be accommodated */
- int sq; /* Number of single quotes needed */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Initialise, setting the default number of double quotes (which
- applies to a zero-length string) to 2. */
- dquotes = 2;
- nc = 0;
- sq = 0;
-
-/* Loop to consider each input character to see if it will fit into
- the result string. */
- for ( i = 0; value[ i ]; i++ ) {
-
-/* If a single quote character is to be included, count it. When the
- string is encoded as FITS character data, these quotes will be
- doubled, so will increase the overall string length by one. */
- if ( value[ i ] == '\'' ) sq++;
-
-/* See how many double quotes are needed around the string (0 or
- 2). These are needed if there is trailing white space that needs
- protecting (this is not significant in FITS and will be removed),
- or if the string already has quotes at either end (in which case an
- extra set is needed to prevent the original ones being removed when
- it is later un-quoted). Note we do not need to double existing
- double quote characters within the string, because the position of
- the ends of the string are known (from the quoting supplied by
- FITS) so only the first and last characters need be inspected when
- un-quoting the string.
-
- In assessing the number of double quotes, assume the string will be
- truncated after the current character. */
- dq = ( isspace( value[ i ] ) ||
- ( ( value[ 0 ] == '"' ) && ( value[ i ] == '"' ) ) ) ? 2 : 0;
-
-/* See if the length of the resulting string, including the current
- character and all necessary quotes, is too long. If so, give up
- here. */
- if ( ( nc + 1 + dq + sq ) >
- ( AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN - 4 ) ) break;
-
-/* If the string is not too long, accept the character and note the
- number of double quotes needed. */
- nc = i + 1;
- dquotes = dq;
- }
-
-/* If double quotes are needed, insert the opening quote into the
- output string. */
- j = 0;
- if ( dquotes ) string[ j++ ] = '"';
-
-/* Follow this with the maximum number of input string characters that
- can be accommodated. */
- for ( i = 0; i < nc; i++ ) string[ j++ ] = value[ i ];
-
-/* Append the closing quote if necessary and terminate the output
- string. */
- if ( dquotes ) string[ j++ ] = '"';
- string[ j ] = '\0';
-}
-
-static void PurgeWCS( AstFitsChan *this, int *status ){
-/*
-*++
-* Name:
-c astPurgeWCS
-f AST_PURGEWCS
-
-* Purpose:
-* Delete all cards in the FitsChan describing WCS information.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "fitschan.h"
-c void astPurgeWCS( AstFitsChan *this )
-f CALL AST_PURGEWCS( THIS, STATUS )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-c This function
-f This routine
-* deletes all cards in a FitsChan that relate to any of the recognised
-* WCS encodings. On exit, the current card is the first remaining card
-* in the FitsChan.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the FitsChan.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-*--
-*/
-
-/* Local Variables: */
- AstObject *obj;
-
-/* Check the global status. */
- if( !astOK ) return;
-
-/* Ensure the source function has been called */
- ReadFromSource( this, status );
-
-/* Loop round attempting to read AST objects form the FitsChan. This will
- flag cards as used that are involved in the creation of these object
- (including NATIVE encodings). */
- astClearCard( this );
- obj = astRead( this );
- while( obj ) {
- obj = astAnnul( obj );
- astClearCard( this );
- obj = astRead( this );
- }
-
-/* We now loop round to remove any spurious WCS-related cards left in the
- FitsChan that did not form part of a complete WCS encoding. Find the
- first WCS-related card left in the FitsChan. */
- FindWcs( this, 0, 0, 1, "DeleteWcs", "FitsChan", status );
-
-/* Loop round marking each WCS-related card as used until none are left */
- while( this->card ) {
-
-/* Mark the current card as having been read. */
- ( (FitsCard*) this->card )->flags = USED;
-
-/* Find the next WCS-related card. */
- FindWcs( this, 0, 0, 0, "DeleteWcs", "FitsChan", status );
- }
-
-/* Rewind the FitsChan. */
- astClearCard( this );
-}
-
-static void PutCards( AstFitsChan *this, const char *cards, int *status ) {
-/*
-*++
-* Name:
-c astPutCards
-f AST_PUTCARDS
-
-* Purpose:
-* Store a set of FITS header cards in a FitsChan.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "fitschan.h"
-c void astPutCards( AstFitsChan *this, const char *cards )
-f CALL AST_PUTCARDS( THIS, CARDS, STATUS )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-c This function
-f This routine
-* stores a set of FITS header cards in a FitsChan. The cards are
-* supplied concatenated together into a single character string.
-* Any existing cards in the FitsChan are removed before the new cards
-* are added. The FitsChan is "re-wound" on exit by clearing its Card
-* attribute. This means that a subsequent invocation of
-c astRead
-f AST_READ
-* can be made immediately without the need to re-wind the FitsChan
-* first.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the FitsChan.
-c cards
-f CARDS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated character string
-f A character string
-* containing the FITS cards to be stored. Each individual card
-* should occupy 80 characters in this string, and there should be
-* no delimiters, new lines, etc, between adjacent cards. The final
-* card may be less than 80 characters long.
-c This is the format produced by the fits_hdr2str function in the
-c CFITSIO library.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - An error will result if the supplied string contains any cards
-* which cannot be interpreted.
-*--
-*/
-/* Local Variables: */
- const char *a; /* Pointer to start of next card */
- const char *class; /* Object class */
- const char *method; /* Current method */
- int clen; /* Length of supplied string */
- int i; /* Card index */
- int ncard; /* No. of cards supplied */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Ensure the source function has been called */
- ReadFromSource( this, status );
-
-/* Store the current method, and the class of the supplied object for use
- in error messages.*/
- method = "astPutCards";
- class = astGetClass( this );
-
-/* Empty the FitsChan. */
- astEmpty( this );
-
-/* Loop round the supplied string in 80 character segments, inserting
- each segment into the FitsChan as a header card. Allow the last card
- to be less than 80 characters long. */
- clen = strlen( cards );
- ncard = clen/80;
- if( ncard*80 < clen ) ncard++;
-
- a = cards;
- for( i = 0; i < ncard; i++, a += 80 ) astPutFits( this, a, 1 );
-
-/* Rewind the FitsChan. */
- astClearCard( this );
-
-}
-
-static void PutFits( AstFitsChan *this, const char card[ AST__FITSCHAN_FITSCARDLEN + 1 ],
- int overwrite, int *status ){
-/*
-*++
-* Name:
-c astPutFits
-f AST_PUTFITS
-
-* Purpose:
-* Store a FITS header card in a FitsChan.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "fitschan.h"
-c void astPutFits( AstFitsChan *this, const char card[ 80 ],
-c int overwrite )
-f CALL AST_PUTFITS( THIS, CARD, OVERWRITE, STATUS )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-c This function stores a FITS header card in a FitsChan. The card
-f This routine stores a FITS header card in a FitsChan. The card
-* is either inserted before the current card (identified by the
-* Card attribute), or over-writes the current card, as required.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the FitsChan.
-c card
-f CARD = CHARACTER * ( 80 ) (Given)
-c Pointer to a possibly null-terminated character string
-c containing the FITS card to be stored. No more than 80
-c characters will be used from this string (or fewer if a null
-c occurs earlier).
-f A character string string containing the FITS card to be
-f stored. No more than 80 characters will be used from this
-f string.
-c overwrite
-f OVERWRITE = LOGICAL (Given)
-c If this value is zero, the new card is inserted in front of
-f If this value is .FALSE., the new card is inserted in front of
-* the current card in the FitsChan (as identified by the
-c initial value of the Card attribute). If it is non-zero, the
-f initial value of the Card attribute). If it is .TRUE., the
-* new card replaces the current card. In either case, the Card
-* attribute is then incremented by one so that it subsequently
-* identifies the card following the one stored.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - If the Card attribute initially points at the "end-of-file"
-* (i.e. exceeds the number of cards in the FitsChan), then the new
-* card is appended as the last card in the FitsChan.
-* - An error will result if the supplied string cannot be interpreted
-* as a FITS header card.
-*--
-*/
-/* Local Variables: */
- char *comment; /* The keyword comment */
- char *name; /* The keyword name */
- char *value; /* The keyword value */
- const char *class; /* Object class */
- const char *method; /* Current method */
- double cfval[2]; /* Complex floating point keyword value */
- double fval; /* floating point keyword value */
- int cival[2]; /* Complex integer keyword value */
- int ival; /* Integer keyword value */
- int len; /* No. of characters to read from the value string */
- int nc; /* No. of characters read from value string */
- int type; /* Keyword data type */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Ensure the source function has been called */
- ReadFromSource( this, status );
-
-/* Store the current method, and the class of the supplied object for use
- in error messages.*/
- method = "astPutFits";
- class = astGetClass( this );
-
-/* Split the supplied card up into name, value and commment strings, and
- get pointers to local copies of them. The data type associated with the
- keyword is returned. */
- type = Split( card, &name, &value, &comment, method, class, status );
-
-/* Check that the pointers can be used. */
- if( astOK ){
-
-/* Initialise the number of characters read from the value string. */
- nc = 0;
-
-/* Store the number of characters in the value string. */
- len = strlen( value );
-
-/* Read and store floating point values from the value string. NB, this
- list is roughly in the order of descreasing frequency of use (i.e.
- most FITS keywords are simple floating point values, the next most
- common are strings, etc). */
- if( type == AST__FLOAT ){
- if( 1 == astSscanf( value, " %lf %n", &fval, &nc ) && nc >= len ){
- astSetFitsF( this, name, fval, comment, overwrite );
- } else {
- astError( AST__BDFTS, "%s(%s): Unable to read a floating point "
- "FITS keyword value.", status, method, class );
- }
-
-/* Read and store string values from the value string. */
- } else if( type == AST__STRING ){
- astSetFitsS( this, name, value, comment, overwrite );
-
-/* Read and store string values from the value string. */
- } else if( type == AST__CONTINUE ){
- astSetFitsCN( this, name, value, comment, overwrite );
-
-/* Store comment card. */
- } else if( type == AST__COMMENT ){
- astSetFitsCom( this, name, comment, overwrite );
-
-/* Read and store integer values from the value string. */
- } else if( type == AST__INT ){
- if( 1 == astSscanf( value, " %d %n", &ival, &nc ) && nc >= len ){
- astSetFitsI( this, name, ival, comment, overwrite );
- } else {
- astError( AST__BDFTS, "%s(%s): Unable to read an integer FITS "
- "keyword value.", status, method, class );
- }
-
-/* Read and store logical values from the value string. */
- } else if( type == AST__LOGICAL ){
- astSetFitsL( this, name, (*value == 'T'), comment, overwrite );
-
-/* Read and store undefined values from the value string. */
- } else if( type == AST__UNDEF ){
- astSetFitsU( this, name, comment, overwrite );
-
-/* Read and store complex floating point values from the value string. */
- } else if( type == AST__COMPLEXF ){
- if( 2 == astSscanf( value, " %lf %lf %n", cfval, cfval + 1, &nc ) &&
- nc >= len ){
- astSetFitsCF( this, name, cfval, comment, overwrite );
- } else {
- astError( AST__BDFTS, "%s(%s): Unable to read a complex pair "
- "of floating point FITS keyword values.", status, method, class );
- }
-
-/* Read and store complex integer values from the value string. */
- } else if( type == AST__COMPLEXI ){
- if( 2 == astSscanf( value, " %d %d %n", cival, cival + 1, &nc ) &&
- nc >= len ){
- astSetFitsCI( this, name, cival, comment, overwrite );
- } else {
- astError( AST__BDFTS, "%s(%s): Unable to read a complex pair "
- "of integer FITS keyword values.", status, method, class );
- }
-
-/* Report an error for any other type. */
- } else {
- astError( AST__INTER, "%s: AST internal programming error - "
- "FITS data-type '%d' not yet supported.", status, method, type );
- }
-
-/* Give a context message if an error occurred. */
- if( !astOK ){
- astError( astStatus, "%s(%s): Unable to store the following FITS "
- "header card:\n%s\n", status, method, class, card );
- }
-
- }
-
-/* Free the memory used to hold the keyword name, comment and value
- strings. */
- (void) astFree( (void *) name );
- (void) astFree( (void *) comment );
- (void) astFree( (void *) value );
-
-}
-
-static AstObject *Read( AstChannel *this_channel, int *status ) {
-/*
-* Name:
-* Read
-
-* Purpose:
-* Read an Object from a Channel.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* AstObject *Read( AstChannel *this_channel, int *status )
-
-* Class Membership:
-* FitsChan member function (over-rides the astRead method
-* inherited from the Channel class).
-
-* Description:
-* This function reads an Object from a FitsChan.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Object. This will always be a FrameSet.
-
-* Notes:
-* - The pixel Frame is given a title of "Pixel Coordinates", and
-* each axis in the pixel Frame is given a label of the form "Pixel
-* axis <n>", where <n> is the axis index (starting at one).
-* - The FITS CTYPE keyword values are used to set the labels for any
-* non-celestial axes in the physical coordinate Frames, and the FITS
-* CUNIT keywords are used to set the corresponding units strings.
-* - On exit, the pixel Frame is the base Frame, and the physical
-* Frame derived from the primary axis descriptions is the current Frame.
-* - Extra Frames are added to hold any secondary axis descriptions. All
-* axes within such a Frame refer to the same coordinate version ('A',
-* 'B', etc).
-* - For foreign encodings, the first card in the FitsChan must be
-* the current card on entry (otherwise a NULL pointer is returned),
-* and the FitsChan is left at end-of-file on exit.
-* - For the Native encoding, reading commences from the current card
-* on entry (which need not be the first in the FitsChan), and the
-* current Card on exit is the first card following the last one read
-* (or end-of-file).
-
-*/
-
-/* Local Variables: */
- AstObject *new; /* Pointer to returned Object */
- AstFitsChan *this; /* Pointer to the FitsChan structure */
- FitsStore *store; /* Intermediate storage for WCS information */
- const char *method; /* Pointer to string holding calling method */
- const char *class; /* Pointer to string holding object class */
- int encoding; /* The encoding scheme */
- int remove; /* Remove used cards? */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Obtain a pointer to the FitsChan structure. */
- this = (AstFitsChan *) this_channel;
-
-/* Ensure the source function has been called */
- ReadFromSource( this, status );
-
-/* Store the calling method, and object class. */
- method = "astRead";
- class = astGetClass( this );
-
-/* Get the encoding scheme used by the FitsChan. */
- encoding = astGetEncoding( this );
-
-/* If we are reading from a FitsChan in which AST objects are encoded using
- native AST-specific keywords, use the Read method inherited from the
- Channel class. */
- if( encoding == NATIVE_ENCODING ){
- new = (*parent_read)( this_channel, status );
-
-/* Indicate that used cards should be removed from the FitsChan. */
- remove = 1;
-
-/* If we are reading from a FitsChan in which AST objects are encoded using
- any of the other supported encodings, the header may only contain a
- single FrameSet. */
- } else {
- remove = 0;
-
-/* Only proceed if the FitsChan is at start-of-file. */
- if( !astTestCard( this ) && astOK ){
-
-/* Extract the required information from the FITS header into a standard
- intermediary structure called a FitsStore. */
- store = FitsToStore( this, encoding, method, class, status );
-
-/* Now create a FrameSet from this FitsStore. */
- new = FsetFromStore( this, store, method, class, status );
-
-/* Release the resources used by the FitsStore. */
- store = FreeStore( store, status );
-
-/* Indicate that used cards should be retained in the FitsChan. */
- remove = 0;
-
-/* If no object is being returned, rewind the fitschan in order to
- re-instate the original current Card. */
- if( !new ) {
- astClearCard( this );
-
-/* Otherwise, ensure the current card is at "end-of-file". */
- } else {
- astSetCard( this, INT_MAX );
- }
- }
- }
-
-/* If an error occurred, clean up by deleting the new Object and
- return a NULL pointer. */
- if ( !astOK ) new = astDelete( new );
-
-/* If no object is being returned, clear the "provisionally used" flags
- associated with cards which were read. We do not do this if the user
- wants to clean WCS cards from the FitsChan even if an error occurs. */
- if( !new && !astGetClean( this ) ) {
- FixUsed( this, 0, 0, 0, method, class, status );
-
-/* Otherwise, indicate that all the "provisionally used" cards have been
- "definitely used". If native encoding was used, these cards are
- totally removed from the FitsChan. */
- } else {
- FixUsed( this, 0, 1, remove, method, class, status );
- }
-
-/* Return the pointer to the new Object. */
- return new;
-}
-
-static double *ReadCrval( AstFitsChan *this, AstFrame *wcsfrm, char s,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* ReadCrval
-
-* Purpose:
-* Obtain the reference point from the supplied FitsChan in the
-* supplied WCS Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* double *ReadCrval( AstFitsChan *this, AstFrame *wcsfrm, char s,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* The original reference point in the "s" coordinate description is read
-* from the CRVAL keywords in the supplied FitsChan, and the original
-* FrameSet is re-read from the FitsChan. If possible, the reference
-* position is then converted from the "s" coordinate description to the
-* supplied WCS Frame, and a pointer to an array holding the axis
-* values for the transformed reference point is returned.
-
-* Parameters:
-* this
-* The FitsChan.
-* wcsfrm
-* The WCS Frame in the FitsChan being written to.
-* s
-* The co-ordinate version character. A space means the primary
-* axis descriptions. Otherwise the supplied character should be
-* an upper case alphabetical character ('A' to 'Z').
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated array holding the reference
-* point in the supplied WCS Frame. NULL is returned if is is not
-* possible to determine the reference point for any reason (for
-* instance, if the FitsChan does not contain values for the CRVAL
-* keywords).
-
-*/
-
-/* Local Variables: */
- AstFitsChan *fc; /* A copy of the supplied FitsChan */
- AstFrame *tfrm; /* Temporary Frame pointer */
- AstFrameSet *fs; /* The FITS FrameSet */
- AstFrameSet *tfs; /* FrameSet connecting FITS and supplied WCS Frame */
- const char *id; /* Pointer to Object "Id" string */
- char buf[ 11 ]; /* FITS keyword template buffer */
- double *crval; /* CRVAL keyword values in supplied FitsChan */
- double *ret; /* Returned array */
- int hii; /* Highest found FITS axis index */
- int iax; /* Axis index (zero based) */
- int ifr; /* Frames index */
- int loi; /* Lowest found FITS axis index */
- int nax; /* Axis count */
- int nfr; /* No. of Frames in FITS FrameSet */
- int ok; /* Were CRVAL values found? */
-
-/* Initialise */
- ret = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* We want to re-create the original FrameSet represented by the original
- contents of the supplied FitsChan. Some of the contents of the
- FitsChan will already have been marked as "having been read" and so
- will be ignored if we attempt to read a FrameSet directly from the
- supplied FitsChan. Therefore we take a deep copy of the supplied
- FitsChan and clear all the "previusly read" flags in the copy. */
- fc = astCopy( this );
- astClearEncoding( fc );
- FixUsed( fc, 1, 0, 0, method, class, status );
-
-/* Copy the CRVAL values for the "s" axis descriptions into a dynamically
- allocated array ("crval"). */
- if( s == ' ' ) {
- strcpy( buf, "CRVAL%d" );
- } else {
- sprintf( buf, "CRVAL%%d%c", s );
- }
- if( astKeyFields( fc, buf, 1, &hii, &loi ) > 0 ) {
- crval = astMalloc( sizeof( double )*(size_t) hii );
- ok = 1;
- for( iax = 0; iax < hii; iax++ ){
- ok = ok && GetValue( fc, FormatKey( "CRVAL", iax + 1, -1, s, status ),
- AST__FLOAT, (void *) (crval + iax), 0, 0, method,
- class, status );
- }
- } else {
- crval = NULL;
- ok = 0;
- }
-
-/* If the CRVAL values were obtained succesfully, attempt to read a FrameSet
- from the FitsChan copy. */
- if( ok ) {
- astClearCard( fc );
- fs = astRead( fc );
- if( fs ) {
-
-/* We want to find a conversion from the Frame in this FrameSet which
- represents the FITS-WCS "s" coordinate descriptions and the supplied WCS
- Frame. So first find the Frame which has its Ident attribute set to
- "s" and make it the current Frame. */
- nfr = astGetNframe( fs );
- for( ifr = 1; ifr <= nfr; ifr++ ) {
- astSetCurrent( fs, ifr );
- tfrm = astGetFrame( fs, ifr );
- id = astTestIdent( tfrm ) ? astGetIdent( tfrm ) : NULL;
- tfrm = astAnnul( tfrm );
- if( id && strlen( id ) == 1 && id[ 0 ] == s ) break;
- }
-
-/* Check a Frame was found, and that we have CRVAL values for all axes in
- the Frame. */
- if( ifr <= nfr && astGetNaxes( fs ) == hii ) {
-
-/* Attempt to find a conversion route from the Frame found above to the
- supplied WCS Frame. */
- tfs = astConvert( fs, wcsfrm, astGetDomain( wcsfrm ) );
- if( tfs ) {
-
-/* Allocate memory to hold the returned reference point. */
- nax = astGetNaxes( wcsfrm );
- ret = astMalloc( sizeof( double )*(size_t) nax );
-
-/* Transform the original reference position from the "s" Frame to the
- supplied WCS Frame using the Mapping returned by astConvert. */
- astTranN( tfs, 1, hii, 1, crval, 1, nax, 1, ret );
-
-/* Free resources. */
- tfs = astAnnul( tfs );
- }
- }
-
-/* Free resources. */
- fs = astAnnul( fs );
- }
- }
-
-/* Free resources. */
- if( crval ) crval = astFree( crval );
- fc = astAnnul( fc );
-
-/* If an error occurred, free the returned array. */
- if( !astOK ) ret = astFree( ret );
-
-/* Return the result. */
- return ret;
-}
-
-static void ReadFromSource( AstFitsChan *this, int *status ){
-/*
-* Name:
-* ReadFromSource
-
-* Purpose:
-* Fill the FitsChan by reading cards from the source function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void ReadFromSource( AstFitsChan *this, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* The source function specified when the FitsChan was created is
-* called repeatedly until it returns a NULL pointer. The string
-* returned by each such call is assumed to be a FITS header card,
-* and is stored in the FitsChan using astPutFits.
-*
-* If no source function was provided, the FitsChan is left as supplied.
-* This is different to a standard Channel, which tries to read data
-* from standard input if no source function is provided.
-*
-* This function should be called at the start of most public or protected
-* FitsChan functions, and most private functions that are used to override
-* methods inherited form the Channel class. Previously, this function
-* was called only once, from the FitsChan initialiser (astInitFitschan).
-* However, calling it from astInitFitsChan means that application code
-* cannot use the astPutChannelData function with a FitsChan, since the
-* source function would already have been called by the time the
-* FitsChan constructor returned (and thus before astPutChannelData
-* could have been called). In order to ensure that teh source
-* function is called only once, this function now nullifies the source
-* function pointer after its first use.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The new cards are appended to the end of the FitsChan.
-* - The first of the new cards is made the current card on exit. If no
-* source function is supplied, the current card is left unchanged.
-
-*/
-
-/* Local Variables: */
- const char *(* source)( void ); /* Pointer to source function */
- const char *card; /* Pointer to externally-read header card */
- int icard; /* Current card index on entry */
-
-/* Check the global status. */
- if( !astOK || !this ) return;
-
-/* Only proceed if source function and wrapper were supplied when the FitsChan
- was created and are still available. */
- if( this->source && this->source_wrap ){
-
-/* Save the source function pointer and then nullify the pointer in the
- FitsChan structure. This avoids infinte loops. */
- source = this->source;
- this->source = NULL;
-
-/* Ensure the FitsChan is at end-of-file. This will result in the
- new cards being appended to the end of the FitsChan. */
- astSetCard( this, INT_MAX );
-
-/* Store the current card index. */
- icard = astGetCard( this );
-
-/* Obtain the first header card from the source function. This is an
- externally supplied function which may not be thread-safe, so lock a
- mutex first. */
- LOCK_MUTEX2;
- card = ( *this->source_wrap )( source, status );
- UNLOCK_MUTEX2;
-
-/* Loop until a NULL pointer is returned by the source function, or an
- error occurs. */
- while( card && astOK ){
-
-/* Store the card in the FitsChan. */
- astPutFits( this, card, 0 );
-
-/* Free the memory holding the header card. */
- card = (char *) astFree( (void *) card );
-
-/* Obtain the next header card. */
- card = ( *this->source_wrap )( source, status );
-
- }
-
-/* Set the current card index so that the first of the new cards will be the
- next card to be read from the FitsChan. */
- astSetCard( this, icard );
- }
-}
-
-static void RetainFits( AstFitsChan *this, int *status ){
-/*
-*++
-* Name:
-c astRetainFits
-f AST_RETAINFITS
-
-* Purpose:
-* Indicate that the current card in a FitsChan should be retained.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "fitschan.h"
-c void astRetainFits( AstFitsChan *this )
-f CALL AST_RETAINFITS( THIS, STATUS )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-c This function
-f This routine
-* stores a flag with the current card in the FitsChan indicating that
-* the card should not be removed from the FitsChan when an Object is
-* read from the FitsChan using
-c astRead.
-f AST_READ.
-*
-* Cards that have not been flagged in this way are removed when a
-* read operation completes succesfully, but only if the card was used
-* in the process of creating the returned AST Object. Any cards that
-* are irrelevant to the creation of the AST Object are retained whether
-* or not they are flagged.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the FitsChan.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - This function returns without action if the FitsChan is
-* initially positioned at the "end-of-file" (i.e. if the Card
-* attribute exceeds the number of cards in the FitsChan).
-* - The current card is not changed by this function.
-*--
-*/
-
-/* Local variables: */
- int flags;
-
-/* Ensure the source function has been called */
- ReadFromSource( this, status );
-
-/* Return if the global error status has been set, or the current card
- is not defined. */
- if( !astOK || !this->card ) return;
-
-/* Set the PROTECTED flag in the current card. */
- flags = ( (FitsCard *) this->card )->flags;
- ( (FitsCard *) this->card )->flags = flags | PROTECTED;
-
-}
-
-static void RoundFString( char *text, int width, int *status ){
-/*
-* Name:
-* RoundString
-
-* Purpose:
-* Modify a formatted floating point number to round out long
-* sequences of zeros or nines.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void RoundFString( char *text, int width )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* The supplied string is assumed to be a valid decimal representation of
-* a floating point number. It is searched for sub-strings consisting
-* of NSEQ or more adjacent zeros, or NSEQ or more adjacent nines. If found
-* the string is modified to represent the result of rounding the
-* number to remove the sequence of zeros or nines.
-
-* Parameters:
-* text
-* The formatted number. Modified on exit to round out long
-* sequences of zeros or nines. The returned string is right justified.
-* width
-* The minimum field width to use. The value is right justified in
-* this field width. Ignored if zero.
-
-*/
-
-/* Local Constants: */
-#define NSEQ 4 /* No. of adjacent 0's or 9's to produce rounding */
-
-/* Local Variables: */
- char *a;
- char *c;
- char *dot;
- char *exp;
- char *last;
- char *start;
- char *end;
- int i;
- int neg;
- int nnine;
- int nonzero;
- int nzero;
- int replace;
- int started;
- int len;
- int bu;
- int nls;
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* Save the original length of the text. */
- len = strlen( text );
-
-/* Locate the start of any exponent string. */
- exp = strpbrk( text, "dDeE" );
-
-/* First check for long strings of adjacent zeros.
- =============================================== */
-
-/* Indicate that we have not yet found a decimal point in the string. */
- dot = NULL;
-
-/* The "started" flag controls whether *leading* zeros should be removed
- if there are more than NSEQ of them. They are only removed if there is an
- exponent. */
- started = ( exp != NULL );
-
-/* We are not currently replacing digits with zeros. */
- replace = 0;
-
-/* We have not yet found any adjacent zeros. */
- nzero = 0;
-
-/* We have no evidence yet that the number is non-zero. */
- nonzero = 0;
-
-/* Loop round the supplied text string. */
- c = text;
- while( *c && c != exp ){
-
-/* If this is a zero, increment the number of adjacent zeros found, so
- long as we have previously found a non-zero digit (or there is an
- exponent). If this is the NSEQ'th adjacent zero, indicate that
- subsequent digits should be replaced by zeros. */
- if( *c == '0' ){
- if( started && ++nzero >= NSEQ ) replace = 1;
-
-/* Note if the number contains a decimal point. */
- } else if( *c == '.' ){
- dot = c;
-
-/* If this character is a non-zero digit, indicate that we have found a
- non-zero digit. If we have previously found a long string of adjacent
- zeros, replace the digit by '0'. Otherwise, reset the count of
- adjacent zeros, and indicate the final number is non-zero. */
- } else if( *c != ' ' && *c != '+' && *c != '-' ){
- started = 1;
- if( replace ) {
- *c = '0';
- } else {
- nzero = 0;
- nonzero = 1;
- }
- }
-
-/* Move on to the next character. */
- c++;
- }
-
-/* If the final number is zero, just return the most simple decimal zero
- value. */
- if( !nonzero ) {
- strcpy( text, "0.0" );
-
-/* Otherwise, we remove any trailing zeros which occur to the right of a
- decimal point. */
- } else if( dot ) {
-
-/* Find the last non-zero digit. */
- while( c-- > text && *c == '0' );
-
-/* If any trailing zeros were found... */
- if( c > text ) {
-
-/* Retain one trailing zero before a decimal point. */
- if( *c == '.' ) c++;
-
-/* We put a terminator folling the last non-zero character. The
- terminator is the exponent, if there was one, or a null character. */
- c++;
- if( exp ) {
- a = exp;
- while( ( *(c++) = *(a++) ) );
- } else {
- *c = 0;
- }
- }
- }
-
-/* Next check for long strings of adjacent nines.
- ============================================= */
-
-/* We have not yet found any adjacent nines. */
- nnine = 0;
-
-/* We have not yet found a non-nine digit. */
- a = NULL;
-
-/* We have not yet found a non-blank character */
- start = NULL;
- last = NULL;
-
-/* Number is assumed positive. */
- neg = 0;
-
-/* Indicate that we have not yet found a decimal point in the string. */
- dot = NULL;
-
-/* Loop round the supplied text string. */
- c = text;
- while( *c && c != exp ){
-
-/* Note the address of the first non-blank character. */
- if( !start && *c != ' ' ) start = c;
-
-/* If this is a nine, increment the number of adjacent nines found. */
- if( *c == '9' ){
- ++nnine;
-
-/* Note if the number contains a decimal point. */
- } else if( *c == '.' ){
- dot = c;
-
-/* Note if the number is negative. */
- } else if( *c == '-' ){
- neg = 1;
-
-/* If this character is a non-nine digit, and we have not had a long
- sequence of 9's, reset the count of adjacent nines, and update a pointer
- to "the last non-nine digit prior to a long string of nines". */
- } else if( *c != ' ' && *c != '+' ){
- if( nnine < NSEQ ) {
- nnine = 0;
- a = c;
- }
- }
-
-/* Note the address of the last non-blank character. */
- if( *c != ' ' ) last = c;
-
-/* Move on to the next character. */
- c++;
- }
-
-/* If a long string of adjacent nines was found... */
- if( nnine >= NSEQ ) {
- c = NULL;
-
-/* If we found at least one non-nine digit. */
- if( a ) {
-
-/* "a" points to the last non-nine digit before the first of the group of 9's.
- Increment this digit by 1. Since we know the digit is not a nine, there
- is no danger of a carry. */
- *a = *a + 1;
-
-/* Fill with zeros up to the decimal point. */
- c = a + 1;
- while( dot && c < dot ) *(c++) = '0';
-
-/* Now make "c" point to the first character for the terminator. This is
- usually the character following the last non-nine digit. However, if
- the last non-nine digit appears immediately before a decimal point, then
- we append ".0" to the string before appending the terminator. */
- if( *c == '.' ) {
- *(++c) = '0';
- c++;
- }
-
-/* If all digits were nines, the rounded number will occupy one more
- character than the supplied number. We can only do the rounding if there
- is a spare character (i.e.a space) in the supplied string. */
- } else if( last - start + 1 < len ) {
-
-/* Put the modified text at the left of the available space. */
- c = text;
-
-/* Start with a munus sing if needed, followed by the leading "1" (caused
- by the overflow from the long string of 9's). */
- if( neg ) *(c++) = '-';
- *(c++) = '1';
-
-/* Now put in the correct number of zeros. */
- if( dot ) {
- nzero = dot - start;
- } else if( exp ) {
- nzero = exp - start;
- } else {
- nzero = last - start;
- }
- for( i = 0; i < nzero; i++ ) *(c++) = '0';
-
-/* If the original string containsed a decimal point, make sure the
- returned string also contains one. */
- if( dot ) {
- *(c++) = '.';
- if( *c ) *(c++) = '0';
- }
-
- }
-
-/* We put a terminator folling the last non-zero character. The
- terminator is the exponent, if there was one, or a null character. */
- if( c ) {
- if( exp ) {
- while( ( *(c++) = *(exp++) ) );
- } else {
- *c = 0;
- }
- }
- }
-
-/* Right justify the returned string in the original field width. */
- end = text + len;
- c = text + strlen( text );
- if( c != end ) {
- while( c >= text ) *(end--) = *(c--);
- while( end >= text ) *(end--) = ' ';
- }
-
-/* If a minimum field width was given, shunt the text to the left in
- order to reduce the used field width to the specified value. This
- requires there to be some leading spaces (because we do not want to
- loose any non-blank characters from the left hand end of the string).
- If there are insufficient leading spaces to allow the field width to
- be reduced to the specified value, then reduce the field width as far
- as possible. First find the number of spaces we would like to remove
- from the front of the string (in order to reduce the used width to the
- specified value). */
- bu = len - width;
-
-/* If we need to remove any leading spaces... */
- if( width > 0 && bu > 0 ) {
-
-/* Find the number of leading spaces which are available to be removed. */
- c = text - 1;
- while( *(++c) == ' ' );
- nls = c - text;
-
-/* If there are insufficient leading spaces, just use however many there
- are. */
- if( bu > nls ) bu = nls;
-
-/* Shift the string. */
- c = text;
- a = c + bu;
- while( ( *(c++) = *(a++) ) );
- }
-
-/* Undefine local constants. */
-#undef NSEQ
-
-}
-
-static int SearchCard( AstFitsChan *this, const char *name,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* SearchCard
-
-* Purpose:
-* Search the whole FitsChan for a card refering to given keyword.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int SearchCard( AstFitsChan *this, const char *name,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* Searches the whole FitsChan for a card refering to the supplied keyword,
-* and makes it the current card. The card following the current card is
-* checked first. If this is not the required card, then a search is
-* performed starting with the first keyword in the FitsChan.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* name
-* Pointer to a string holding the keyword name.
-* method
-* Pointer to string holding name of calling method.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A value of 1 is returned if a card was found refering to the given
-* keyword. Otherwise zero is returned.
-
-* Notes:
-* - If a NULL pointer is supplied for "name" then the current card
-* is left unchanged.
-* - The current card is set to NULL (end-of-file) if no card can be
-* found for the supplied keyword.
-
-*/
-
-/* Local Variables: */
- int ret; /* Was a card found? */
-
-/* Check the global status, and supplied keyword name. */
- if( !astOK || !name ) return 0;
-
-/* Indicate that no card has been found yet. */
- ret = 0;
-
-/* The required card is very often the next card in the FitsChan, so check the
- next card, and only search the entire FitsChan if the check fails. */
- MoveCard( this, 1, method, class, status );
- if( !astFitsEof( this ) &&
- !Ustrncmp( CardName( this, status ), name, FITSNAMLEN, status ) ){
- ret = 1;
-
-/* If the next card is not the required card, rewind the FitsChan back to
- the first card. */
- } else {
- astClearCard( this );
-
-/* Attempt to find the supplied keyword, searching from the first card. */
- ret = FindKeyCard( this, name, method, class, status );
- }
-
-/* Return. */
- return ret;
-
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a FitsChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void SetAttrib( AstObject *this, const char *setting )
-
-* Class Membership:
-* FitsChan member function (over-rides the astSetAttrib protected
-* method inherited from the Channel class).
-
-* Description:
-* This function assigns an attribute value for a FitsChan, the
-* attribute and its value being specified by means of a string of
-* the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in
-* lower case with no white space present. The value to the right
-* of the "=" should be a suitable textual representation of the
-* value to be assigned and this will be interpreted according to
-* the attribute's data type. White space surrounding the value is
-* only significant for string attributes.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* setting
-* Pointer to a null-terminated string specifying the new attribute
-* value.
-*/
-
-/* Local Variables: */
- AstFitsChan *this; /* Pointer to the FitsChan structure */
- const char *class; /* Object class */
- int ival; /* Integer attribute value */
- int len; /* Length of setting string */
- int nc; /* Number of characters read by astSscanf */
- int warn; /* Offset of Warnings string */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FitsChan structure. */
- this = (AstFitsChan *) this_object;
-
-/* Obtain the length of the setting string. */
- len = (int) strlen( setting );
-
-/* Obtain the object class. */
- class = astGetClass( this );
-
-/* Card. */
-/* ----- */
- if ( nc = 0,
- ( 1 == astSscanf( setting, "card= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetCard( this, ival );
-
-/* Encoding. */
-/* --------- */
- } else if( nc = 0,
- ( 0 == astSscanf( setting, "encoding=%n%*[^\n]%n", &ival, &nc ) )
- && ( nc >= len ) ) {
-
- nc = ChrLen( setting + ival, status );
-
- if( !Ustrncmp( setting + ival, NATIVE_STRING, nc, status ) ){
- astSetEncoding( this, NATIVE_ENCODING );
-
- } else if( !Ustrncmp( setting + ival, FITSPC_STRING, nc, status ) ){
- astSetEncoding( this, FITSPC_ENCODING );
-
- } else if( !Ustrncmp( setting + ival, FITSPC_STRING2, nc, status ) ){
- astSetEncoding( this, FITSPC_ENCODING );
-
- } else if( !Ustrncmp( setting + ival, FITSWCS_STRING, nc, status ) ){
- astSetEncoding( this, FITSWCS_ENCODING );
-
- } else if( !Ustrncmp( setting + ival, FITSWCS_STRING2, nc, status ) ){
- astSetEncoding( this, FITSWCS_ENCODING );
-
- } else if( !Ustrncmp( setting + ival, FITSIRAF_STRING, nc, status ) ){
- astSetEncoding( this, FITSIRAF_ENCODING );
-
- } else if( !Ustrncmp( setting + ival, FITSIRAF_STRING2, nc, status ) ){
- astSetEncoding( this, FITSIRAF_ENCODING );
-
- } else if( !Ustrncmp( setting + ival, FITSAIPS_STRING, nc, status ) ){
- astSetEncoding( this, FITSAIPS_ENCODING );
-
- } else if( !Ustrncmp( setting + ival, FITSAIPS_STRING2, nc, status ) ){
- astSetEncoding( this, FITSAIPS_ENCODING );
-
- } else if( !Ustrncmp( setting + ival, FITSAIPSPP_STRING, nc, status ) ){
- astSetEncoding( this, FITSAIPSPP_ENCODING );
-
- } else if( !Ustrncmp( setting + ival, FITSAIPSPP_STRING2, nc, status ) ){
- astSetEncoding( this, FITSAIPSPP_ENCODING );
-
- } else if( !Ustrncmp( setting + ival, FITSCLASS_STRING, nc, status ) ){
- astSetEncoding( this, FITSCLASS_ENCODING );
-
- } else if( !Ustrncmp( setting + ival, FITSCLASS_STRING2, nc, status ) ){
- astSetEncoding( this, FITSCLASS_ENCODING );
-
- } else if( !Ustrncmp( setting + ival, DSS_STRING, nc, status ) ){
- astSetEncoding( this, DSS_ENCODING );
-
- } else {
- astError( AST__BADAT, "astSet(%s): Unknown encoding system '%s' "
- "requested for a %s.", status, class, setting + ival, class );
- }
-
-/* FitsDigits. */
-/* ----------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "fitsdigits= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetFitsDigits( this, ival );
-
-/* CDMatrix */
-/* -------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "cdmatrix= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetCDMatrix( this, ival );
-
-/* DefB1950 */
-/* -------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "defb1950= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetDefB1950( this, ival );
-
-/* CarLin */
-/* ------ */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "carlin= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetCarLin( this, ival );
-
-/* Iwc */
-/* --- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "iwc= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetIwc( this, ival );
-
-/* Clean */
-/* ----- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "clean= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetClean( this, ival );
-
-/* Warnings. */
-/* -------- */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "warnings=%n%*[^\n]%n", &warn, &nc ) )
- && ( nc >= len ) ) {
- astSetWarnings( this, setting + warn );
-
-/* Define a macro to see if the setting string matches any of the
- read-only attributes of this class. */
-#define MATCH(attrib) \
- ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
- ( nc >= len ) )
-
-/* If the attribute was not recognised, use this macro to report an error
- if a read-only attribute has been specified. */
- } else if ( MATCH( "ncard" ) ||
- MATCH( "allwarnings" ) ){
- astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.", status,
- setting, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-
-}
-
-static void SetCard( AstFitsChan *this, int icard, int *status ){
-/*
-*+
-* Name:
-* astSetCard
-
-* Purpose:
-* Set the value of the Card attribute.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void astSetCard( AstFitsChan *this, int icard )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-* This function sets the value of the Card attribute for the supplied
-* FitsChan. This is the index of the next card to be read from the
-* FitsChan. If a value of 1 or less is supplied, the first card in
-* the FitsChan will be read next. If a value greater than the number
-* of cards in the FitsChan is supplied, the FitsChan will be left in an
-* "end-of-file" condition, in which no further read operations can be
-* performed.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* icard
-* The index of the next card to read.
-
-* Notes:
-* - This function attempts to execute even if an error has occurred.
-
-*-
-*/
-
-/* Check the supplied object. */
- if ( !this ) return;
-
-/* Ensure the source function has been called */
- ReadFromSource( this, status );
-
-/* Rewind the FitsChan. */
- astClearCard( this );
-
-/* Move forward the requested number of cards. */
- MoveCard( this, icard - 1, "astSetCard", astGetClass( this ), status );
-
-/* Return. */
- return;
-}
-
-static void SetItem( double ****item, int i, int jm, char s, double val, int *status ){
-/*
-* Name:
-* SetItem
-
-* Purpose:
-* Store a value for a axis keyword value in a FitStore structure.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void SetItem( double ****item, int i, int jm, char s, double val, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* The supplied keyword value is stored in the specified array,
-* at a position indicated by the axis and co-ordinate version.
-* The array is created or extended as necessary to make room for
-* the new value. Any old value is over-written.
-
-* Parameters:
-* item
-* The address of the pointer within the FitsStore which locates the
-* arrays of values for the required keyword (eg &(store->crval) ).
-* The array located by the supplied pointer contains a vector of
-* pointers. Each of these pointers is associated with a particular
-* co-ordinate version (s), and locates an array of pointers for that
-* co-ordinate version. Each such array of pointers has an element
-* for each intermediate axis number (i), and the pointer locates an
-* array of axis keyword values. These arrays of keyword values have
-* one element for every pixel axis (j) or projection parameter (m).
-* i
-* The zero based intermediate axis index in the range 0 to 98. Set
-* this to zero for keywords (e.g. CRPIX) which are not indexed by
-* intermediate axis number.
-* jm
-* The zero based pixel axis index (in the range 0 to 98) or parameter
-* index (in the range 0 to WCSLIB__MXPAR-1). Set this to zero for
-* keywords (e.g. CRVAL) which are not indexed by either pixel axis or
-* parameter number.
-* val
-* The keyword value to store.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- int el; /* Array index */
- int nel; /* Number of elements in array */
- int si; /* Integer co-ordinate version index */
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* Convert the character co-ordinate version into an integer index, and
- check it is within range. The primary axis description (s=' ') is
- given index zero. 'A' is 1, 'B' is 2, etc. */
- if( s == ' ' ) {
- si = 0;
- } else if( islower(s) ){
- si = (int) ( s - 'a' ) + 1;
- } else {
- si = (int) ( s - 'A' ) + 1;
- }
-
- if( si < 0 || si > 26 ) {
- astError( AST__INTER, "SetItem(fitschan): AST internal error; "
- "co-ordinate version '%c' ( char(%d) ) is invalid.", status, s, s );
-
-/* Check the intermediate axis index is within range. */
- } else if( i < 0 || i > 98 ) {
- astError( AST__INTER, "SetItem(fitschan): AST internal error; "
- "intermediate axis index %d is invalid.", status, i );
-
-/* Check the pixel axis or parameter index is within range. */
- } else if( jm < 0 || jm > 99 ) {
- astError( AST__INTER, "SetItem(fitschan): AST internal error; "
- "pixel axis or parameter index %d is invalid.", status, jm );
-
-/* Otherwise proceed... */
- } else {
-
-/* Store the current number of coordinate versions in the supplied array */
- nel = astSizeOf( (void *) *item )/sizeof(double **);
-
-/* If required, extend the array located by the supplied pointer so that
- it is long enough to hold the specified co-ordinate version. */
- if( nel < si + 1 ){
- *item = (double ***) astGrow( (void *) *item, si + 1,
- sizeof(double **) );
-
-/* Check the pointer can be used. */
- if( astOK ){
-
-/* Initialise the new elements to hold NULL. Note, astGrow may add more
- elements to the array than is actually needed, so use the actual current
- size of the array as implied by astSize rather than the index si. */
- for( el = nel;
- el < astSizeOf( (void *) *item )/sizeof(double **);
- el++ ) (*item)[el] = NULL;
- }
- }
-
-/* If the above went OK... */
- if( astOK ){
-
-/* Store the currrent number of intermediate axes in the supplied array */
- nel = astSizeOf( (void *) (*item)[si] )/sizeof(double *);
-
-/* If required, extend the array so that it is long enough to hold the
- specified intermediate axis. */
- if( nel < i + 1 ){
- (*item)[si] = (double **) astGrow( (void *) (*item)[si], i + 1,
- sizeof(double *) );
-
-/* Check the pointer can be used. */
- if( astOK ){
-
-/* Initialise the new elements to hold NULL. */
- for( el = nel;
- el < astSizeOf( (void *) (*item)[si] )/sizeof(double *);
- el++ ) (*item)[si][el] = NULL;
- }
- }
-
-/* If the above went OK... */
- if( astOK ){
-
-/* Store the current number of pixel axis or parameter values in the array. */
- nel = astSizeOf( (void *) (*item)[si][i] )/sizeof(double);
-
-/* If required, extend the array so that it is long enough to hold the
- specified axis. */
- if( nel < jm + 1 ){
- (*item)[si][i] = (double *) astGrow( (void *) (*item)[si][i],
- jm + 1, sizeof(double) );
-
-/* Check the pointer can be used. */
- if( astOK ){
-
-/* Initialise the new elements to hold AST__BAD. */
- for( el = nel;
- el < astSizeOf( (void *) (*item)[si][i] )/sizeof(double);
- el++ ) (*item)[si][i][el] = AST__BAD;
- }
- }
-
-/* If the above went OK, store the supplied keyword value. */
- if( astOK ) (*item)[si][i][jm] = val;
- }
- }
- }
-}
-
-static void SetItemC( char ****item, int i, char s, const char *val, int *status ){
-/*
-* Name:
-* SetItemC
-
-* Purpose:
-* Store a character string for an axis keyword value in a FitStore
-* structure.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void SetItemC( char ****item, int i, char s, const char *val, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* The supplied keyword string value is stored in the specified array,
-* at a position indicated by the axis and co-ordinate version.
-* The array is created or extended as necessary to make room for
-* the new value. Any old value is over-written.
-
-* Parameters:
-* item
-* The address of the pointer within the FitsStore which locates the
-* arrays of values for the required keyword (eg &(store->ctype) ).
-* The array located by the supplied pointer contains a vector of
-* pointers. Each of these pointers is associated with a particular
-* co-ordinate version (s), and locates an array of pointers for that
-* co-ordinate version. Each such array of pointers has an element
-* for each intermediate axis number (i), and the pointer locates a
-* character string.
-* i
-* The zero based intermediate axis index in the range 0 to 98. Set
-* this to zero for keywords (e.g. RADESYS) which are not indexed by
-* intermediate axis number.
-* val
-* The keyword string value to store. A copy of the supplied string
-* is taken.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- int el; /* Array index */
- int nel; /* Number of elements in array */
- int si; /* Integer co-ordinate version index */
-
-/* Check the inherited status. Also return if a null pointer was supplied */
- if( !astOK || !val ) return;
-
-/* Convert the character co-ordinate version into an integer index, and
- check it is within range. The primary axis description (s=' ') is
- given index zero. 'A' is 1, 'B' is 2, etc. */
- if( s == ' ' ) {
- si = 0;
- } else if( islower(s) ){
- si = (int) ( s - 'a' ) + 1;
- } else {
- si = (int) ( s - 'A' ) + 1;
- }
-
- if( si < 0 || si > 26 ) {
- astError( AST__INTER, "SetItemC(fitschan): AST internal error; "
- "co-ordinate version '%c' ( char(%d) ) is invalid.", status, s, s );
-
-/* Check the intermediate axis index is within range. */
- } else if( i < 0 || i > 98 ) {
- astError( AST__INTER, "SetItemC(fitschan): AST internal error; "
- "intermediate axis index %d is invalid.", status, i );
-
-/* Otherwise proceed... */
- } else {
-
-/* Store the current number of coordinate versions in the supplied array */
- nel = astSizeOf( (void *) *item )/sizeof(char **);
-
-/* If required, extend the array located by the supplied pointer so that
- it is long enough to hold the specified co-ordinate version. */
- if( nel < si + 1 ){
- *item = (char ***) astGrow( (void *) *item, si + 1,
- sizeof(char **) );
-
-/* Check the pointer can be used. */
- if( astOK ){
-
-/* Initialise the new elements to hold NULL. */
- for( el = nel;
- el < astSizeOf( (void *) *item )/sizeof(char **);
- el++ ) (*item)[el] = NULL;
- }
- }
-
-/* If the above went OK... */
- if( astOK ){
-
-/* Store the currrent number of intermediate axes in the supplied array */
- nel = astSizeOf( (void *) (*item)[si] )/sizeof(char *);
-
-/* If required, extend the array so that it is long enough to hold the
- specified intermediate axis. */
- if( nel < i + 1 ){
- (*item)[si] = (char **) astGrow( (void *) (*item)[si], i + 1,
- sizeof(char *) );
-
-/* Check the pointer can be used. */
- if( astOK ){
-
-/* Initialise the new elements to hold NULL. */
- for( el = nel;
- el < astSizeOf( (void *) (*item)[si] )/sizeof(char *);
- el++ ) (*item)[si][el] = NULL;
- }
- }
-
-/* If the above went OK... */
- if( astOK ){
-
-/* Store a copy of the supplied string, using any pre-allocated memory. */
- (*item)[si][i] = (char *) astStore( (void *) (*item)[si][i],
- (void *) val,
- strlen( val ) + 1 );
- }
- }
- }
-}
-
-static void SetValue( AstFitsChan *this, const char *keyname, void *value,
- int type, const char *comment, int *status ){
-/*
-* Name:
-* SetValue
-
-* Purpose:
-* Save a FITS keyword value, over-writing any existing keyword value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void SetValue( AstFitsChan *this, char *keyname, void *value,
-* int type, const char *comment, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* This function saves a keyword value as a card in the supplied
-* FitsChan. Comment cards are always inserted in-front of the current
-* card. If the keyword is not a comment card, any existing value
-* for the keyword is over-written with the new value (even if it is
-* marked as having been read). Otherwise, (i.e. if it is not a comment
-* card, and no previous value exists) it is inserted in front
-* of the current card.
-
-* Parameters:
-* this
-* A pointer to the FitsChan.
-* keyname
-* A pointer to a string holding the keyword name.
-* value
-* A pointer to a buffer holding the keyword value. For strings,
-* the buffer should hold a pointer to the character string.
-* type
-* The FITS data type of the supplied keyword value.
-* comment
-* A comment to store with the keyword.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - Nothing is stored if a NULL pointer is supplied for "value".
-* - If the keyword has a value of AST__BAD then nothing is stored,
-* and an error is reported.
-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- FitsCard *card; /* Pointer to original current card */
- const char *class; /* Class name to include in error messages */
- const char *method; /* Method name to include in error messages */
- int newcard; /* Has the original current card been deleted? */
- int old_ignore_used; /* Original setting of external ignore_used variable */
- int stored; /* Has the keyword been stored? */
-
-/* Check the status and supplied value pointer. */
- if( !astOK || !value ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Set up the method and class names for inclusion in error mesages. */
- method = "astWrite";
- class = astGetClass( this );
-
-/* Comment card are always inserted in-front of the current card. */
- if ( type == AST__COMMENT ) {
- SetFits( this, keyname, value, type, comment, 0, status );
-
-/* Otherwise... */
- } else {
-
-/* Report an error if a bad value is stored for a keyword. */
- if( type == AST__FLOAT ){
- if( *( (double *) value ) == AST__BAD && astOK ) {
- astError( AST__BDFTS, "%s(%s): The required FITS keyword "
- "\"%s\" is indeterminate.", status, method, class, keyname );
- }
- }
-
-/* Save a pointer to the current card. */
- card = (FitsCard *) this->card;
-
-/* Indicate that we should not skip over cards marked as having been
- read. */
- old_ignore_used = ignore_used;
- ignore_used = 0;
-
-/* Indicate that we have not yet stored the keyword value. */
- stored = 0;
-
-/* Attempt to find a card refering to the supplied keyword. If one is
- found, it becomes the current card. */
- if( SearchCard( this, keyname, "astWrite", astGetClass( this ), status ) ){
-
-/* If the card which was current on entry to this function will be
- over-written, we will need to take account of this when re-instating the
- original current card. Make a note of this. */
- newcard = ( card == (FitsCard *) this->card );
-
-/* Replace the current card with a card holding the supplied information. */
- SetFits( this, keyname, value, type, comment, 1, status );
- stored = 1;
-
-/* If we have just replaced the original current card, back up a card
- so that the replacement card becomes the current card. */
- if( newcard ) {
- MoveCard( this, -1, "astWrite", astGetClass( this ), status );
-
-/* Otherwise, re-instate the original current card. */
- } else {
- this->card = (void *) card;
- }
- }
-
-/* If the keyword has not yet been stored (i.e. if it did not exist in the
- FitsChan), re-instate the original current card and insert the new card
- before the original current card, leaving the current card unchanged. */
- if( !stored ) {
- this->card = (void *) card;
- SetFits( this, keyname, value, type, comment, 0, status );
- }
-
-/* Re-instate the original flag indicating if cards marked as having been
- read should be skipped over. */
- ignore_used = old_ignore_used;
- }
-}
-
-static int Similar( const char *str1, const char *str2, int *status ){
-/*
-* Name:
-* Similar
-
-* Purpose:
-* Are two string effectively the same to human readers?
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void Similar( const char *str1, const char *str2, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* This function returns a non-zero value if the two supplied strings
-* are equivalent to a human reader. This is assumed to be the case if
-* the strings are equal apart from leading and trailing white space,
-* multiple embedded space, and case.
-
-* Parameters:
-* str1
-* The first string
-* str2
-* The second string
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the two supplied strings are equivalent, and zero
-* otherwise.
-
-*/
-
-/* Local Variables: */
- const char *ea; /* Pointer to end of string a */
- const char *eb; /* Pointer to end of string b */
- const char *a; /* Pointer to next character in string a */
- const char *b; /* Pointer to next character in string b */
- int result; /* Are the two strings equivalent? */
- int ss; /* Skip subsequent spaces? */
-
-/* Initialise */
- result = 0;
-
-/* Check the status and supplied value pointer. */
- if( !astOK ) return result;
-
-/* Initialise pointers into the two strings. */
- a = str1;
- b = str2;
-
-/* Get a pointer to the character following the last non-blank character in
- each string. */
- ea = a + ChrLen( a, status ) - 1;
- eb = b + ChrLen( b, status ) - 1;
-
-/* Set a flag indicating that spaces before the next non-blank character
- should be ignored. */
- ss = 1;
-
-/* Compare the strings. */
- while( 1 ){
-
-/* Move on to the next significant character in both strings. */
- while( a < ea && *a == ' ' && ss ) a++;
- while( b < eb && *b == ' ' && ss ) b++;
-
-/* If one string has been exhausted but the other has not, the strings
- are not equivalent. */
- if( ( a < ea && b == eb ) || ( a == ea && b < eb ) ) {
- break;
-
-/* If both strings have been exhausted simultaneously, the strings
- are equivalent. */
- } else if( b == eb && a == ea ) {
- result = 1;
- break;
-
-/* If neither string has been exhausted, compare the current character
- for equality, ignoring case. Break if they are different. */
- } else if( tolower( *a ) != tolower( *b ) ){
- break;
-
-/* If the two characters are both spaces, indicate that subsequent spaces
- should be skipped. */
- } else if( *a == ' ' ) {
- ss = 1;
-
-/* If the two characters are not spaces, indicate that subsequent spaces
- should not be skipped. */
- } else {
- ss = 0;
-
- }
-
-/* Move on to the next characters. */
- a++;
- b++;
- }
-
-/* Return the result. */
- return result;
-
-}
-
-static void SinkWrap( void (* sink)( const char * ), const char *line, int *status ) {
-/*
-* Name:
-* SinkWrap
-
-* Purpose:
-* Wrapper function to invoke a C FitsChan sink function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void SinkWrap( void (* sink)( const char * ), const char *line, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function invokes the sink function whose pointer is
-* supplied in order to write an output line to an external data
-* store.
-
-* Parameters:
-* sink
-* Pointer to a sink function, whose single parameter is a
-* pointer to a const, null-terminated string containing the
-* text to be written, and which returns void. This is the form
-* of FitsChan sink function employed by the C language interface
-* to the AST library.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Invoke the sink function. */
- ( *sink )( line );
-}
-
-static AstMapping *SIPMapping( FitsStore *store, char s, int naxes,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* SIPMapping
-
-* Purpose:
-* Create a Mapping descriping "-SIP" (SIRTF) distortion.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* AstMapping *SIPMapping( FitsStore *store, char s, int naxes,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* This function uses the values in the supplied FitsStore to create a
-* Mapping which implements the "-SIP" distortion code. This is the
-* code used by the SIRTF project and is described in:
-
-* http://sirtf.caltech.edu/SSC/documents/WCSkeywords_v1.3.pdf
-*
-* SIP distortion can only be applied to axes 0 and 1. Other axes are
-* passed unchanged by the returned Mapping.
-
-* Parameters:
-* store
-* A structure containing information about the requested axis
-* descriptions derived from a FITS header.
-* s
-* A character identifying the co-ordinate version to use. A space
-* means use primary axis descriptions. Otherwise, it must be an
-* upper-case alphabetical characters ('A' to 'Z').
-* naxes
-* The number of intermediate world coordinate axes (WCSAXES).
-* method
-* A pointer to a string holding the name of the calling method.
-* This is used only in the construction of error messages.
-* class
-* A pointer to a string holding the class of the object being
-* read. This is used only in the construction of error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the Mapping.
-
-*/
-
-/* Local Variables: */
- AstMapping *ret; /* Pointer to the returned Mapping */
- AstPolyMap *pmap; /* PolyMap describing the distortion */
- double ****item; /* Address of FitsStore item to use */
- double *c; /* Pointer to start of coefficient description */
- double *coeff_f; /* Array of coeffs. for forward transformation */
- double *coeff_i; /* Array of coeffs. for inverse transformation */
- double cof; /* Coefficient value */
- int def; /* Is transformation defined? */
- int iin; /* Input (u or v) index */
- int iout; /* Output (U or V) index */
- int ncoeff_f; /* No. of coeffs. for forward transformation */
- int ncoeff_i; /* No. of coeffs. for inverse transformation */
- int p; /* Power of u or U */
- int pmax; /* Max power of u or U */
- int q; /* Power of v or V */
- int qmax; /* Max power of v or V */
-
-/* Initialise the pointer to the returned Mapping. */
- ret = NULL;
-
-/* Check the global status. */
- if ( !astOK ) return ret;
-
-/* Store coefficients of the forward transformation:
- ================================================ */
-
-/* Indicate that we have as yet no coefficients for the forward polynomials. */
- ncoeff_f = 0;
-
-/* Indicate that we do not yet have any evidence that the forward
- transformation is defined. */
- def = 0;
-
-/* Allocate workspace to hold descriptions of (initially) 20 coefficients used
- within the forward polynomials. */
- coeff_f = astMalloc( sizeof( double )*20 );
-
-/* Store the coefficients of the polynomial which produces each output
- axis (U or V) in turn. */
- for( iout = 0; iout < 2; iout++ ){
-
-/* Get a pointer to the FitsStore item holding the values defining this
- output. */
- item = ( iout == 0 ) ? &(store->asip) : &(store->bsip);
-
-/* Get the largest powers used of u and v. */
- pmax = GetMaxI( item, s, status );
- qmax = GetMaxJM( item, s, status );
-
-/* Loop round all combination of powers. */
- for( p = 0; p <= pmax; p++ ){
- for( q = 0; q <= qmax; q++ ){
-
-/* Get the polynomial coefficient for this combination of powers. */
- cof = GetItem( item, p, q, s, NULL, method, class, status );
-
-/* If there is no coefficient for this combination of powers, use a value
- of zero. Otherwise indicate we have found at least one coefficient. */
- if( cof == AST__BAD ) {
- cof = 0.0;
- } else {
- def = 1;
- }
-
-/* The distortion polynomial gives a correction to be added on to the
- input value. On the other hand, the returned Mapping is a direct
- transformation from input to output. Therefore increment the coefficient
- value by 1 for the term which corresponds to the current output axis. */
- if( p == ( 1 - iout ) && q == iout ) cof += 1.0;
-
-/* If the coefficient is not zero, store it in the array of coefficient
- descriptions. */
- if( cof != 0.0 ) {
-
-/* Increment the number of coefficients for the forward polynomials. */
- ncoeff_f++;
-
-/* Ensure the "coeff_f" array is large enough to hold the new coefficient. */
- coeff_f = astGrow( coeff_f, sizeof( double )*4, ncoeff_f );
- if( astOK ) {
-
-/* Store it. Each coefficient is described by 4 values (since we have 2
- inputs to the Mapping). The first is the coefficient value, the second
- is the (1-based) index of the output to which the coefficient relates.
- The next is the power of input 0, and the last one is the power of input 1. */
- c = coeff_f + 4*( ncoeff_f - 1 );
- c[ 0 ] = cof;
- c[ 1 ] = iout + 1;
- c[ 2 ] = p;
- c[ 3 ] = q;
- }
- }
- }
- }
- }
-
-/* If no coefficients were supplied in the FitsStore, the forward
- transformation is undefined. */
- if( !def ) ncoeff_f = 0;
-
-/* Store coefficients of the inverse transformation:
- ================================================ */
-
-/* Indicate that we have as yet no coefficients for the inverse polynomials. */
- ncoeff_i = 0;
-
-/* Indicate that we do not yet have any evidence that the forward
- transformation is defined. */
- def = 0;
-
-/* Allocate workspace to hold descriptions of (initially) 20 coefficients used
- within the inverse polynomials. */
- coeff_i = astMalloc( sizeof( double )*20 );
-
-/* Store the coefficients of the polynomial which produces each input
- axis (u or v) in turn. */
- for( iin = 0; iin < 2; iin++ ){
-
-/* Get a pointer to the FitsStore item holding the values defining this
- output. */
- item = ( iin == 0 ) ? &(store->apsip) : &(store->bpsip);
-
-/* Get the largest powers used of U and V. */
- pmax = GetMaxI( item, s, status );
- qmax = GetMaxJM( item, s, status );
-
-/* Loop round all combination of powers. */
- for( p = 0; p <= pmax; p++ ){
- for( q = 0; q <= qmax; q++ ){
-
-/* Get the polynomial coefficient for this combination of powers. */
- cof = GetItem( item, p, q, s, NULL, method, class, status );
-
-/* If there is no coefficient for this combination of powers, use a value
- of zero. Otherwise indicate we have found at least one coefficient. */
- if( cof == AST__BAD ) {
- cof = 0.0;
- } else {
- def = 1;
- }
-
-/* The distortion polynomial gives a correction to be added on to the
- output value. On the other hand, the returned Mapping is a direct
- transformation from output to input. Therefore increment the coefficient
- value by 1 for the term which corresponds to the current input axis. */
- if( p == ( 1 - iin ) && q == iin ) cof += 1.0;
-
-/* If the coefficient is not zero, store it in the array of coefficient
- descriptions. */
- if( cof != 0.0 ) {
-
-/* Increment the number of coefficients for the inverse polynomials. */
- ncoeff_i++;
-
-/* Ensure the "coeff_i" array is large enough to hold the new coefficient. */
- coeff_i = astGrow( coeff_i, sizeof( double )*4, ncoeff_i );
- if( astOK ) {
-
-/* Store it. Each coefficient is described by 4 values (since we have 2
- outputs to the Mapping). The first is the coefficient value, the second
- is the (1-based) index of the input to which the coefficient relates. The
- next is the power of output 0, and the last one is the power of output 1. */
- c = coeff_i + 4*( ncoeff_i - 1 );
- c[ 0 ] = cof;
- c[ 1 ] = iin + 1;
- c[ 2 ] = p;
- c[ 3 ] = q;
- }
- }
- }
- }
- }
-
-/* If no coefficients were supplied in the FitsStore, the forward
- transformation is undefined. */
- if( !def ) ncoeff_f = 0;
-
-/* Create the returned Mapping:
- ============================ */
-
-/* If neither transformation is defined, create a UnitMap. */
- if( ncoeff_f == 0 && ncoeff_i == 0 ){
- ret = (AstMapping *) astUnitMap( naxes, "", status );
-
-/* Otherwise, create a PolyMap to describe axes 0 and 1. */
- } else {
- pmap = astPolyMap( 2, 2, ncoeff_f, coeff_f, ncoeff_i, coeff_i, "", status );
-
-/* Add the above Mapping in parallel with a UnitMap which passes any
- other axes unchanged. */
- ret = AddUnitMaps( (AstMapping *) pmap, 0, naxes, status );
- pmap = astAnnul( pmap );
-
- }
-
-/* Free resources. */
- coeff_f = astFree( coeff_f );
- coeff_i = astFree( coeff_i );
-
-/* Return the result. */
- return ret;
-}
-
-static void SkyPole( AstWcsMap *map2, AstMapping *map3, int ilon, int ilat,
- int *wperm, char s, FitsStore *store, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* SkyPole
-
-* Purpose:
-* Put values for FITS keywords LONPOLE and LATPOLE into a FitsStore.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void SkyPole( AstWcsMap *map2, AstMapping *map3, int ilon, int ilat,
-* int *wperm, char s, FitsStore *store, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function calculates values for the LONPOLE and LATPOLE FITS
-* keywords and stores them in the supplied FitsStore. LONPOLE and
-* LATPOLE are the longitude and latitude of the celestial north pole
-* in native spherical coordinates.
-
-* Parameters:
-* map2
-* Pointer to the Mapping from Intermediate World Coordinates to Native
-* Spherical Coordinates.
-* map3
-* Pointer to the Mapping from Native Spherical Coordinates to celestial
-* coordinates.
-* ilon
-* Zero-based index of longitude output from "map3".
-* ilat
-* Zero-based index of latitude output from "map3".
-* wperm
-* Pointer to an array of integers with one element for each axis of
-* the current Frame. Each element holds the zero-based
-* index of the FITS-WCS axis (i.e. the value of "i" in the keyword
-* names "CTYPEi", "CRVALi", etc) which describes the Frame axis.
-* s
-* The co-ordinate version character. A space means the primary
-* axis descriptions. Otherwise the supplied character should be
-* an upper case alphabetical character ('A' to 'Z').
-* store
-* The FitsStore in which to store the FITS WCS keyword values.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstPointSet *pset1; /* PointSet holding intermediate wcs coords */
- AstPointSet *pset2; /* PointSet holding final WCS coords */
- double **ptr1; /* Pointer to coordinate data */
- double **ptr2; /* Pointer to coordinate data */
- double alpha0; /* Long. of fiducial point in standard system */
- double alphap; /* Celestial longitude of native north pole */
- double deflonpole; /* Default value for lonpole */
- double delta0; /* Lat. of fiducial point in standard system */
- double latpole; /* Native latitude of celestial north pole */
- double lonpole; /* Native longitude of celestial north pole */
- double phi0; /* Native longitude at fiducial point */
- double theta0; /* Native latitude at fiducial point */
- int axlat; /* Index of latitude output from "map2" */
- int axlon; /* Index of longitude output from "map2" */
- int fits_ilat; /* FITS WCS axis index for latitude axis */
- int fits_ilon; /* FITS WCS axis index for longitude axis */
- int iax; /* Axis index */
- int nax; /* Number of IWC axes */
- int nax2; /* Number of WCS axes */
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* Store the indices of the native longitude and latitude outputs of the
- WcsMap. */
- axlon = astGetWcsAxis( map2, 0 );
- axlat = astGetWcsAxis( map2, 1 );
-
-/* Store the indices of the FITS WCS axes for longitude and latitude */
- fits_ilon = wperm[ ilon ];
- fits_ilat = wperm[ ilat ];
-
-/* To find the longitude and latitude of the celestial north pole in native
- spherical coordinates, we will transform the coords of the celestial north
- pole into spherical cords using the inverse of "map2", and if the resulting
- native spherical coords differ from the default values of LONPOLE and
- LATPOLE, we store them in the FitsStore. However, for zenithal projections,
- any value can be used simply by introducing an extra rotation into the
- (X,Y) projection plane. If values have been set in the WcsMap (as
- projection parameters PVi_3 and PVi_4 for longitude axis "i") uses
- them. Otherwise, set the values bad to indicate that the default values
- should be used. Note, these projection parameters are used for other
- purposes in a TPN projection. */
- lonpole = AST__BAD;
- latpole = AST__BAD;
- if( astIsZenithal( map2 ) ) {
- if( astGetWcsType( map2 ) != AST__TPN ) {
- lonpole = astTestPV( map2, axlon, 3 ) ? astGetPV( map2, axlon, 3 )
- : AST__BAD;
- latpole = astTestPV( map2, axlon, 4 ) ? astGetPV( map2, axlon, 4 )
- : AST__BAD;
- }
-
-/* For non-zenithal projections, do the full calculation. */
- } else {
-
-/* Allocate resources. */
- nax = astGetNin( map2 );
- pset1 = astPointSet( 1, nax, "", status );
- ptr1 = astGetPoints( pset1 );
-
- nax2 = astGetNout( map3 );
- pset2 = astPointSet( 1, nax2, "", status );
- ptr2 = astGetPoints( pset2 );
- if( astOK ) {
-
-/* Calculate the longitude and latitude of the celestial north pole
- in native spherical coordinates (using the inverse of map3). These
- values correspond to the LONPOLE and LATPOLE keywords. */
- for( iax = 0; iax < nax2; iax++ ) ptr2[ iax ][ 0 ] = 0.0;
- ptr2[ ilat ][ 0 ] = AST__DPIBY2;
- (void) astTransform( map3, pset2, 0, pset1 );
-
-/* Retrieve the latitude and longitude (in the standard system) of the
- fiducial point (i.e. CRVAL), in radians. */
- delta0 = GetItem( &(store->crval), fits_ilat, 0, s, NULL, method, class, status );
- if( delta0 == AST__BAD ) delta0 = 0.0;
- delta0 *= AST__DD2R;
-
- alpha0 = GetItem( &(store->crval), fits_ilon, 0, s, NULL, method, class, status );
- if( alpha0 == AST__BAD ) alpha0 = 0.0;
- alpha0 *= AST__DD2R;
-
-/* The default value of the LATPOLE is defined by equation 8 of FITS-WCS
- paper II (taking the +ve signs). Find this value. */
- if( WcsNatPole( NULL, map2, alpha0, delta0, 999.0, ptr1[ axlon ],
- &alphap, &latpole, status ) ){
-
-/* If the default value is defined, compare it to the latitude of the
- north pole found above. If they are equal use a bad value instead to
- prevent an explicit keyword from being added to the FitsChan. */
- if( EQUALANG( ptr1[ axlat ][ 0 ], latpole ) ) {
- latpole = AST__BAD;
- } else {
- latpole = ptr1[ axlat ][ 0 ];
- }
-
-/* If the default value is not defined, always store an explicit LATPOLE
- value. */
- } else {
- latpole = ptr1[ axlat ][ 0 ];
- }
-
-/* The default LONPOLE value is zero if the celestial latitude at the
- fiducial point is greater than or equal to the native latitude at the
- fiducial point. Otherwise, the default is (+ or -) 180 degrees. If LONPOLE
- takes the default value, replace it with AST__BAD to prevent an explicit
- keyword being stored in the FitsChan. */
- GetFiducialNSC( map2, &phi0, &theta0, status );
- lonpole = palSlaDranrm( ptr1[ axlon ][ 0 ] );
- if( delta0 >= theta0 ){
- deflonpole = 0.0;
- } else {
- deflonpole = AST__DPI;
- }
- if( EQUALANG( lonpole, deflonpole ) ) lonpole = AST__BAD;
-
- }
-
-/* Convert from radians to degrees. */
- if( lonpole != AST__BAD ) lonpole *= AST__DR2D;
- if( latpole != AST__BAD ) latpole *= AST__DR2D;
-
-/* Free resources. */
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
-
- }
-
-/* Store these values. */
- SetItem( &(store->lonpole), 0, 0, s, lonpole, status );
- SetItem( &(store->latpole), 0, 0, s, latpole, status );
-
-/* FITS-WCS paper 2 recommends putting a copy of LONPOLE and LATPOLE in
- projection parameters 3 and 4 associated with the longitude axis. Only do
- this if the projection is not TPN (since this projection uses these
- parameters for other purposes). */
- if( astGetWcsType( map2 ) != AST__TPN ) {
- SetItem( &(store->pv), fits_ilon, 3, s, lonpole, status );
- SetItem( &(store->pv), fits_ilon, 4, s, latpole, status );
- }
-}
-
-static int SkySys( AstSkyFrame *skyfrm, int wcstype, FitsStore *store,
- int axlon, int axlat, char s,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* SkySys
-
-* Purpose:
-* Return FITS-WCS values describing a sky coordinate system.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int SkySys( AstSkyFrame *skyfrm, int wcstype, FitsStore *store,
-* int axlon, int axlat, char s,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* This function sets values for the following FITS-WCS keywords
-* within the supplied FitsStore structure: CTYPE, CNAME, RADECSYS, EQUINOX,
-* MJDOBS, CUNIT, OBSGEO-X/Y/Z. The values are derived from the supplied
-* SkyFrame and WcsMap.
-
-* Parameters:
-* skyfrm
-* A pointer to the SkyFrame to be described.
-* wcstype
-* An identifier for the type of WCS projection to use.
-* store
-* A pointer to the FitsStore structure in which to store the
-* results.
-* axlon
-* The index of the FITS WCS longitude axis (i.e. the value of "i"
-* in "CTYPEi").
-* axlat
-* The index of the FITS WCS latitude axis (i.e. the value of "i"
-* in "CTYPEi").
-* s
-* Co-ordinate version character.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Are the keywords values in the FitsStore usable?
-
-*/
-
-/* Local Variables: */
- char *label; /* Pointer to axis label string */
- char lattype[MXCTYPELEN];/* Latitude axis CTYPE value */
- char lontype[MXCTYPELEN];/* Longitude axis CTYPE value */
- const char *latsym; /* SkyFrame latitude axis symbol */
- const char *lonsym; /* SkyFrame longitude axis symbol */
- const char *prj_name; /* Pointer to projection name string */
- const char *sys; /* Celestal coordinate system */
- double ep; /* Epoch of observation (MJD) */
- double eq; /* Epoch of reference equinox (MJD) */
- double h; /* Geodetic altitude of observer (metres) */
- double geolat; /* Geodetic latitude of observer (radians) */
- double geolon; /* Geodetic longitude of observer (radians) */
- double r; /* Distance (in AU) from earth axis */
- double z; /* Distance (in AU) above earth equator */
- int defdate; /* Can the date keywords be defaulted? */
- int i; /* Character count */
- int isys; /* Celestial coordinate system */
- int latax; /* Index of latitude axis in SkyFrame */
- int lonax; /* Index of longitude axis in SkyFrame */
- int radesys; /* RA/DEC reference frame */
- int ret; /* Returned flag */
-
-/* Check the status. */
- if( !astOK ) return 0;
-
-/* Check we have a SkyFrame. */
- if( !astIsASkyFrame( skyfrm ) ) return 0;
-
-/* Initialise */
- ret = 1;
-
-/* Get the equinox, epoch of observation, and system of the SkyFrame. */
- eq = astGetEquinox( skyfrm );
- if( astTestEpoch( skyfrm ) ) {
- ep = TDBConv( astGetEpoch( skyfrm ), AST__UTC, 1, method, class, status );
- } else {
- ep = AST__BAD;
- }
- sys = astGetC( skyfrm, "system" );
-
-/* The MJD-OBS and DATE-OBS keywords default to the epoch of the
- reference equinox if not supplied. Therefore MJD-OBS and DATE-OBS do
- not need to be stored in the FitsChan if the epoch of observation is
- the same as the epoch of the reference equinox. This can avoid
- producing FITS headers which say unlikely things like
- DATE-OBS = "01/01/50". Set a flag indicating if MJD-OBS and DATE-OBS
- can be defaulted. */
- defdate = EQUAL( ep, eq );
-
-/* Convert the equinox to a Julian or Besselian epoch. Also get the
- reference frame and standard system. */
- if( !Ustrcmp( sys, "FK4", status ) ){
- eq = palSlaEpb( eq );
- radesys = FK4;
- isys = RADEC;
- SetItemC( &(store->radesys), 0, s, "FK4", status );
-
- } else if( !Ustrcmp( sys, "FK4_NO_E", status ) || !Ustrcmp( sys, "FK4-NO-E", status ) ){
- eq = palSlaEpb( eq );
- radesys = FK4NOE;
- isys = RADEC;
- SetItemC( &(store->radesys), 0, s, "FK4-NO-E", status );
-
- } else if( !Ustrcmp( sys, "FK5", status ) ){
- eq = palSlaEpj( eq );
- radesys = FK5;
- isys = RADEC;
- SetItemC( &(store->radesys), 0, s, "FK5", status );
-
- } else if( !Ustrcmp( sys, "ICRS", status ) ){
- eq = AST__BAD;
- radesys = ICRS;
- isys = RADEC;
- SetItemC( &(store->radesys), 0, s, "ICRS", status );
-
- } else if( !Ustrcmp( sys, "GAPPT", status ) ||
- !Ustrcmp( sys, "Apparent", status ) ||
- !Ustrcmp( sys, "Geocentric", status ) ){
- eq = AST__BAD;
- radesys = GAPPT;
- isys = RADEC;
- SetItemC( &(store->radesys), 0, s, "GAPPT", status );
-
- } else if( !Ustrcmp( sys, "Helioecliptic", status ) ){
- eq = AST__BAD;
- radesys = NORADEC;
- isys = HECLIP;
-
- } else if( !Ustrcmp( sys, "Galactic", status ) ){
- eq = AST__BAD;
- radesys = NORADEC;
- isys = GALAC;
-
- } else if( !Ustrcmp( sys, "Supergalactic", status ) ){
- eq = AST__BAD;
- radesys = NORADEC;
- isys = SUPER;
-
- } else if( !Ustrcmp( sys, "AzEl", status ) ){
- eq = AST__BAD;
- radesys = NORADEC;
- isys = AZEL;
-
- } else {
- eq = AST__BAD;
- radesys = NORADEC;
- isys = NOCEL;
- }
-
-/* Store these values. Only store the date if it does not take its
- default value. */
- SetItem( &(store->equinox), 0, 0, s, eq, status );
- if( !defdate ) SetItem( &(store->mjdobs), 0, 0, ' ', ep, status );
-
-/* Only proceed if we have usable values */
- if( astOK ) {
-
-/* Get the indices of the latitude and longitude axes within the
- SkyFrame. */
- latax = astGetLatAxis( skyfrm );
- lonax = 1 - latax;
-
-/* The first 4 characters in CTYPE are determined by the celestial coordinate
- system and the second 4 by the projection type. */
- if( isys == RADEC ){
- strcpy( lontype, "RA--" );
- strcpy( lattype, "DEC-" );
-
- } else if( isys == ECLIP ){
- strcpy( lontype, "ELON" );
- strcpy( lattype, "ELAT" );
-
- } else if( isys == HECLIP ){
- strcpy( lontype, "HLON" );
- strcpy( lattype, "HLAT" );
-
- } else if( isys == GALAC ){
- strcpy( lontype, "GLON" );
- strcpy( lattype, "GLAT" );
-
- } else if( isys == SUPER ){
- strcpy( lontype, "SLON" );
- strcpy( lattype, "SLAT" );
-
- } else if( isys == AZEL ){
- strcpy( lontype, "AZ--" );
- strcpy( lattype, "EL--" );
-
-/* For unknown systems, use the axis symbols within CTYPE */
- } else {
-
- latsym = astGetSymbol( skyfrm, latax );
- lonsym = astGetSymbol( skyfrm, lonax );
-
- if( astOK ) {
- strncpy( lontype, lonsym, 4 );
- for( i = strlen( lonsym ); i < 4; i++ ) {
- lontype[ i ] = '-';
- }
-
- strncpy( lattype, latsym, 4 );
- for( i = strlen( latsym ); i < 4; i++ ) {
- lattype[ i ] = '-';
- }
- }
- }
-
-/* Store the projection strings. */
- prj_name = astWcsPrjName( wcstype );
- if( astOK ) {
- strcpy( lontype + 4, prj_name );
- strcpy( lattype + 4, prj_name );
- }
-
-/* Store the total CTYPE strings */
- SetItemC( &(store->ctype), axlon, s, lontype, status );
- SetItemC( &(store->ctype), axlat, s, lattype, status );
-
-/* If the Label attribute has been set for an axis, use it as the CTYPE
- comment and CNAME value. */
- if( astTestLabel( skyfrm, latax ) ) {
- label = (char *) astGetLabel( skyfrm, latax );
- SetItemC( &(store->ctype_com), axlat, s, label, status );
- SetItemC( &(store->cname), axlat, s, label, status );
- }
- if( astTestLabel( skyfrm, lonax ) ) {
- label = (char *) astGetLabel( skyfrm, lonax );
- SetItemC( &(store->ctype_com), axlon, s, label, status );
- SetItemC( &(store->cname), axlon, s, label, status );
- }
-
-/* Nullify any CUNITS strings for the longitude and latitude axes (they
- always take the default value of degrees). */
- SetItemC( &(store->cunit), axlat, s, NULL, status );
- SetItemC( &(store->cunit), axlon, s, NULL, status );
-
- }
-
-/* Store the Domain name as the WCSNAME keyword (if set). */
- if( astTestDomain( skyfrm ) ) {
- SetItemC( &(store->wcsname), 0, s, (char *) astGetDomain( skyfrm ), status );
- }
-
-/* Store the observer's position if set (needed for definition of AzEl
- systems). */
- if( astTestObsLon( skyfrm ) && astTestObsLat( skyfrm ) && s == ' ' ) {
- geolon = astGetObsLon( skyfrm );
- geolat = astGetObsLat( skyfrm );
- h = astGetObsAlt( skyfrm );
- if( geolat != AST__BAD && geolon != AST__BAD && h != AST__BAD ) {
- palSlaGeoc( geolat, h, &r, &z );
- r *= AST__AU;
- SetItem( &(store->obsgeox), 0, 0, ' ', r*cos( geolon ), status );
- SetItem( &(store->obsgeoy), 0, 0, ' ', r*sin( geolon ), status );
- SetItem( &(store->obsgeoz), 0, 0, ' ', z*AST__AU, status );
- }
- }
-
- if( !astOK ) ret = 0;
- return ret;
-}
-
-static char *SourceWrap( const char *(* source)( void ), int *status ) {
-/*
-* Name:
-* SourceWrap
-
-* Purpose:
-* Wrapper function to invoke a C FitsChan source function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* char *SourceWrap( const char *, int *status(* source)( void ) )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function invokes the source function whose pointer is
-* supplied in order to read the next input line from an external
-* data store. It then returns a pointer to a dynamic string
-* containing a copy of the text that was read.
-
-* Parameters:
-* source
-* Pointer to a source function, with no parameters, that
-* returns a pointer to a const, null-terminated string
-* containing the text that it read. This is the form of FitsChan
-* source function employed by the C language interface to the
-* AST library.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated, null terminated string
-* containing a copy of the text that was read. This string must be
-* freed by the caller (using astFree) when no longer required.
-*
-* A NULL pointer will be returned if there is no more input text
-* to read.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- char *result; /* Pointer value to return */
- const char *line; /* Pointer to input line */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Invoke the source function to read the next input line and return a
- pointer to the resulting string. */
- line = ( *source )();
-
-/* If a string was obtained, make a dynamic copy of it and save the
- resulting pointer. */
- if ( line ) result = astString( line, (int) strlen( line ) );
-
-/* Return the result. */
- return result;
-}
-
-static AstMapping *SpectralAxes( AstFrameSet *fs, double *dim, int *wperm,
- char s, FitsStore *store, double *crvals,
- int *axis_done, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* SpectralAxes
-
-* Purpose:
-* Add values to a FitsStore describing spectral axes in a Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* AstMapping *SpectralAxes( AstFrameSet *fs, double *dim, int *wperm,
-* char s, FitsStore *store, double *crvals,
-* int *axis_done, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* The current Frame of the supplied FrameSet is searched for spectral
-* axes. If any are found, FITS WCS keyword values describing the axis
-* are added to the supplied FitsStore, if possible (the conventions
-* of FITS-WCS paper III are used). Note, this function does not store
-* values for keywords which define the transformation from pixel
-* coords to Intermediate World Coords (CRPIX, PC and CDELT), but a
-* Mapping is returned which embodies these values. This Mapping is
-* from the current Frame in the FrameSet (WCS coords) to a Frame
-* representing IWC. The IWC Frame has the same number of axes as the
-* WCS Frame which may be greater than the number of base Frame (i.e.
-* pixel) axes.
-*
-* If a spectral axis is found, the RafRA and RefDec attributes of the
-* SpecFrame describing the axis are ignored: it is assumed that the
-* WCS Frame also contains a pair of celestial axes which will result
-* in appropriate celestial reference values being stored in the
-* FitsStore (this asumption should be enforced by calling function
-* MakeFitsFrameSet prior to calling this function).
-
-* Parameters:
-* fs
-* Pointer to the FrameSet. The base Frame should represent FITS pixel
-* coordinates, and the current Frame should represent FITS WCS
-* coordinates. The number of base Frame axes should not exceed the
-* number of current Frame axes. The spectral Unit in the returned
-* FrameSet will always be linearly related to the default Units for
-* the spectral System in use by the axis. If this requires a
-* change to the existing spectral Unit, the integrity of the
-* FrameSet will be maintained by suitable adjustments to the Mappings
-* within the FrameSet.
-* dim
-* An array holding the image dimensions in pixels. AST__BAD can be
-* supplied for any unknwon dimensions.
-* wperm
-* Pointer to an array of integers with one element for each axis of
-* the current Frame. Each element holds the zero-based
-* index of the FITS-WCS axis (i.e. the value of "i" in the keyword
-* names "CTYPEi", "CRVALi", etc) which describes the Frame axis.
-* s
-* The co-ordinate version character. A space means the primary
-* axis descriptions. Otherwise the supplied character should be
-* an upper case alphabetical character ('A' to 'Z').
-* store
-* The FitsStore in which to store the FITS WCS keyword values.
-* crvals
-* Pointer to an array holding the default CRVAL value for each
-* axis in the WCS Frame.
-* axis_done
-* An array of flags, one for each Frame axis, which indicate if a
-* description of the corresponding axis has yet been stored in the
-* FitsStore.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If a spectral axis was found which can be described using the
-* conventions of FITS-WCS paper III, then a Mapping from the current Frame
-* of the supplied FrameSet, to the IWC Frame is returned. Otherwise,
-* a UnitMap is returned. Note, the Mapping only defines the IWC
-* transformation for spectral axes. Any non-spectral axes are passed
-* unchanged by the returned Mapping.
-
-*/
-
-/* Local Variables: */
- AstFrame *pframe; /* Primary Frame containing current WCS axis*/
- AstFrame *tfrm1; /* A temporary Frame */
- AstFrame *tfrm; /* A temporary Frame */
- AstFrame *wcsfrm; /* WCS Frame within FrameSet */
- AstFrameSet *tfs; /* A temporary FrameSet */
- AstGrismMap *gmap; /* GrismMap defining the spectral axis */
- AstMapping *axmap; /* Mapping from WCS to IWC */
- AstMapping *map; /* Pixel -> WCS mapping */
- AstMapping *ret; /* Returned Mapping */
- AstMapping *tmap0; /* A temporary Mapping */
- AstMapping *tmap1; /* A temporary Mapping */
- AstMapping *tmap2; /* A temporary Mapping */
- AstMapping *tmap3; /* A temporary Mapping */
- AstMapping *tmap4; /* A temporary Mapping */
- AstMapping *tmap5; /* A temporary Mapping */
- AstMapping *tmap6; /* A temporary Mapping */
- AstSpecFrame *specfrm; /* The SpecFrame defining current WCS axis */
- char *cname; /* Pointer to CNAME value */
- const char *x_sys[ 4 ]; /* Basic spectral systems */
- char ctype[ MXCTYPELEN ]; /* The value for the FITS CTYPE keyword */
- char lin_unit[ 20 ]; /* Linear spectral Units being used */
- char orig_system[ 40 ]; /* Value of System attribute for current WCS axis */
- char system_attr[ 10 ]; /* Name of System attribute for current WCS axis */
- char unit_attr[ 10 ]; /* Name of Unit attribute for current WCS axis */
- const char *cval; /* Pointer to temporary character string */
- double *lbnd_p; /* Pointer to array of lower pixel bounds */
- double *ubnd_p; /* Pointer to array of upper pixel bounds */
- double crval; /* The value for the FITS CRVAL keyword */
- double dgbyds; /* Rate of change of grism parameter wrt "S" at ref. point */
- double dsbydx; /* Rate of change of "S" wrt "X" at ref. point */
- double h; /* Geodetic altitude of observer (metres) */
- double geolat; /* Geodetic latitude of observer (radians) */
- double geolon; /* Geodetic longitude of observer (radians) */
- double gval; /* Value of grism parameter at reference point */
- double imagfreq; /* Image sideband equivalent to the rest frequency (Hz) */
- double lbnd_s; /* Lower bound on spectral axis */
- double pv; /* Value of projection parameter */
- double r; /* Distance (in AU) from earth axis */
- double restfreq; /* Rest frequency (Hz) */
- double ubnd_s; /* Upper bound on spectral axis */
- double vsource; /* Rel.vel. of source (m/s) */
- double xval; /* Value of "X" system at reference point */
- double z; /* Distance (in AU) above earth equator */
- double zsource; /* Redshift of source */
- int fits_i; /* FITS WCS axis index for current WCS axis */
- int iax; /* Axis index */
- int ix; /* System index */
- int npix; /* Number of pixel axes */
- int nwcs; /* Number of WCS axes */
- int paxis; /* Axis index within primary Frame */
- int sourcevrf; /* Rest Frame in which SourceVel is accesed */
-
-/* Initialise */
- ret = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* Every supported spectral system is linearly related to one of the
- following four systems. */
- x_sys[ 0 ] = "FREQ";
- x_sys[ 1 ] = "WAVE";
- x_sys[ 2 ] = "AWAV";
- x_sys[ 3 ] = "VELO";
-
-/* Get a pointer to the WCS Frame. */
- wcsfrm = astGetFrame( fs, AST__CURRENT );
-
-/* Store the number of pixel and WCS axes. */
- npix = astGetNin( fs );
- nwcs = astGetNout( fs );
-
-/* Store the upper and lower pixel bounds. */
- lbnd_p = astMalloc( sizeof( double )*(size_t) npix );
- ubnd_p = astMalloc( sizeof( double )*(size_t) npix );
- if( astOK ) {
- for( iax = 0; iax < npix; iax++ ) {
- lbnd_p[ iax ] = 1.0;
- ubnd_p[ iax ] = ( dim[ iax ] != AST__BAD ) ? dim[ iax ] : 500;
- }
- }
-
-/* Check each axis in the WCS Frame to see if it is a spectral axis. */
- axmap = NULL;
- for( iax = 0; iax < nwcs; iax++ ) {
-
-/* Obtain a pointer to the primary Frame containing the current WCS axis. */
- astPrimaryFrame( wcsfrm, iax, &pframe, &paxis );
-
-/* If the current axis belongs to a SpecFrame, we have found a spectral
- axis. */
- if( astIsASpecFrame( pframe ) ) {
- specfrm = (AstSpecFrame *) pframe;
-
-/* Note the (zero-based) FITS WCS axis index to be used for the current
- Frame axis. */
- fits_i = wperm[ iax ];
-
-/* Note the name and original value of the System attribute for the spectral
- axis within the FrameSet current Frame. */
- sprintf( system_attr, "System(%d)", iax + 1 );
- cval = astGetC( wcsfrm, system_attr );
- if( cval ) strcpy( orig_system, cval );
-
-/* Note the name of the Unit attribute for the spectral axis within the
- FrameSet current Frame. */
- sprintf( unit_attr, "Unit(%d)", iax + 1 );
-
-/* Get a pointer to the Mapping from FITS pixel coordinates to SpecFrame. */
- map = astGetMapping( fs, AST__BASE, AST__CURRENT );
-
-/* Find the bounds of the Spectral axis over the volume of the pixel grid. */
- astMapBox( map, lbnd_p, ubnd_p, 1, iax, &lbnd_s, &ubnd_s,
- NULL, NULL );
-
-/* The Unit attribute of a SpecFrame can be set to arbitrary non-linear
- functions of standard linear spectral units. FITS-WCS paper III requires
- CRVAL etc to be given in linear units. So first we ensure that we have a
- SpecFrame with linear Units. Create a copy of the SpecFrame and clear
- its Unit attribute (this ensures the copy has the default linear units).
- Then find a Mapping from the original spectral units to the default
- linear units. If the conversion is possible, see if the Mapping
- between the units is linear. If it is, then the original Unit attribute
- of the SpecFrame is OK (i.e. the units are linear). If not, clear
- the Unit attribute of the spectral axis in the FrameSet so that it
- uses the default linear units (retaining the original value so that it
- can be re-instated later). Using the clear method on the FrameSet
- pointer rather than the SpecFrame pointer causes the SpecFrame to be
- re-mapped within the FrameSet to maintain its correct relationship with
- the other Frames in the FrameSet. Also update the pixel->spectrum
- Mapping to take account of the change in units and re-calculate the new
- bounds on the spectral axis. Also update any supplied CRVAL value for
- the spectral axis. */
- tfrm = astCopy( specfrm );
- astClearUnit( tfrm, 0 );
- tfs = astConvert( specfrm, tfrm, "" );
- tfrm = astAnnul( tfrm );
- if( tfs ) {
-
- crval = crvals ? crvals[ iax ] : AST__BAD;
-
- tmap1 = astGetMapping( tfs, AST__BASE, AST__CURRENT );
- tfs = astAnnul( tfs );
- if( !IsMapLinear( tmap1, &lbnd_s, &ubnd_s, 0, status ) ) {
- astClear( fs, unit_attr );
- (void) astAnnul( map );
- map = astGetMapping( fs, AST__BASE, AST__CURRENT );
- astMapBox( map, lbnd_p, ubnd_p, 1, iax, &lbnd_s, &ubnd_s,
- NULL, NULL );
- astTran1( tmap1, 1, &crval, 1, &crval );
-
- }
- tmap1 = astAnnul( tmap1 );
-
-/* Note the linear spectral Unit currently in use. */
- cval = astGetUnit( specfrm, 0 );
- if( cval ) strcpy( lin_unit, cval );
-
-/* For some of the algorithms, the reference value CRVAL is arbitrary.
- For these algorithms we choose to use the supplied default CRVAL value.
- If no default CRVAL value was suppllied, we use the mid spectral value
- if the size of the spectral axis was given, or the lower bound (i.e.
- pixel 1) if the size of the spectral axis was not given. */
- if( crval == AST__BAD ) {
- if( dim[ iax ] != AST__BAD ) {
- crval = 0.5*( lbnd_s + ubnd_s );
- } else {
- crval = lbnd_s;
- }
- }
-
-/* Modify this crval value so that it correpsonds to an integer pixel
- coordinate. */
- crval = NearestPix( map, crval, iax, status );
-
-/* We now check to see if the Mapping from pixel coords -> linear spectral
- coords corresponds to one of the algorithms supported in FITS-WCS paper
- III. First check for the "linear" algorithm in which the linear spectral
- coordinate given by the SpecFrame is related linearly to the pixel
- coords. */
- ctype[ 0 ] = 0;
- if( IsMapLinear( map, lbnd_p, ubnd_p, iax, status ) ) {
-
-/* The CTYPE value is just the spectral system. */
- strcpy( ctype, orig_system );
-
-/* Create the Mapping which defines the spectral IWC axis. This is
- initially the Mapping from WCS to IWCS - it subtracts the CRVAL value
- from the spectral WCS value to get the spectral IWC value (other
- non-spectral axes are left unchanged by this Mapping). This results
- in the spectral IWC axis having the same axis index as the spectral
- WCS axis. */
- crval = -crval;
- tmap0 = (AstMapping *) astShiftMap( 1, &crval, "", status );
- crval = -crval;
- axmap = AddUnitMaps( tmap0, iax, nwcs, status );
- tmap0 = astAnnul( tmap0 );
- }
-
-
-/* If the "linear" algorithm above is inappropriate, see if the "non-linear"
- algorithm defined in FITS-WCS paper III can be used, in which pixel
- coords are linearly related to some spectral system (called "X") other
- than the one represented by the supplied SpecFrame (called "S"). */
- if( !ctype[ 0 ] ) {
-
-/* Loop round each of the 4 allowed X systems. All other spectral systems
- are linearly related to one of these 4 systems and so do not need to be
- tested. */
- for( ix = 0; ix < 4 && !ctype[ 0 ]; ix++ ) {
-
-/* Set the system of the spectral WCS axis to the new trial X system. Clear
- the Unit attribute to ensure we are using the default linear units.
- Using the FrameSet pointer "fs" ensures that the Mappings within the
- FrameSet are modified to maintain the correct inter-Frame relationships. */
- astSetC( fs, system_attr, x_sys[ ix ] );
- astClear( fs, unit_attr );
-
-/* Now we check to see if the current X system is linearly related to
- pixel coordinates. */
- tmap3 = astGetMapping( fs, AST__BASE, AST__CURRENT );
- if( IsMapLinear( tmap3, lbnd_p, ubnd_p, iax, status ) ) {
-
-/* CTYPE: First 4 characters specify the "S" system. */
- strcpy( ctype, orig_system );
-
-/* The non-linear algorithm code to be appended to the "S" system is of the
- form "-X2P" ("P" is the system which is linearly related to "S"). */
- if( !strcmp( x_sys[ ix ], "FREQ" ) ) {
- strcpy( ctype + 4, "-F2" );
-
- } else if( !strcmp( x_sys[ ix ], "WAVE" ) ) {
- strcpy( ctype + 4, "-W2" );
-
- } else if( !strcmp( x_sys[ ix ], "AWAV" ) ) {
- strcpy( ctype + 4, "-A2" );
-
- } else {
- strcpy( ctype + 4, "-V2" );
- }
-
- if( !strcmp( orig_system, "FREQ" ) ||
- !strcmp( orig_system, "ENER" ) ||
- !strcmp( orig_system, "WAVN" ) ||
- !strcmp( orig_system, "VRAD" ) ) {
- strcpy( ctype + 7, "F" );
-
- } else if( !strcmp( orig_system, "WAVE" ) ||
- !strcmp( orig_system, "VOPT" ) ||
- !strcmp( orig_system, "ZOPT" ) ) {
- strcpy( ctype + 7, "W" );
-
- } else if( !strcmp( orig_system, "AWAV" ) ) {
- strcpy( ctype + 7, "A" );
-
- } else {
- strcpy( ctype + 7, "V" );
- }
-
-/* Create a Mapping which gives S as a function of X. */
- tfrm = astCopy( specfrm );
- astSetC( tfrm, "System(1)", orig_system );
- astSetC( tfrm, "Unit(1)", lin_unit );
- tfs = astConvert( specfrm, tfrm, "" );
- tmap5 = astGetMapping( tfs, AST__BASE, AST__CURRENT );
- tfs = astAnnul( tfs );
- tfrm = astAnnul( tfrm );
-
-/* Use the inverse of this Mapping to get the X value at the reference S
- value. */
- astTran1( tmap5, 1, &crval, 0, &xval );
-
-/* Also use it to get the rate of change of S with respect to X at the
- reference point. */
- dsbydx = astRate( tmap5, &xval, 0, 0 );
-
-/* Create the Mapping which defines the spectral IWC axis. This is the
- Mapping from WCS to IWC - it first converts from S to X, then subtracts
- the X reference value value, and then scales the axis to ensure that
- the rate of change of S with respect to IWC is unity (as required by
- FITS-WCS paper III). Other non-spectral axes are left unchanged by
- the Mapping. The spectral IWC axis has the same axis index as the
- spectral WCS axis. */
- xval = -xval;
- tmap2 = (AstMapping *) astShiftMap( 1, &xval, "", status );
- astInvert( tmap5 );
- tmap0 = (AstMapping *) astCmpMap( tmap5, tmap2, 1, "", status );
- tmap5 = astAnnul( tmap5 );
- tmap2 = astAnnul( tmap2 );
- tmap2 = (AstMapping *) astZoomMap( 1, dsbydx, "", status );
- tmap1 = (AstMapping *) astCmpMap( tmap0, tmap2, 1, "", status );
- tmap0 = astAnnul( tmap0 );
- tmap2 = astAnnul( tmap2 );
-
- axmap = AddUnitMaps( tmap1, iax, nwcs, status );
- tmap1 = astAnnul( tmap1 );
- }
- tmap3 = astAnnul( tmap3 );
-
-/* Re-instate the original system and unit attributes for the spectral axis. */
- astSetC( fs, system_attr, orig_system );
- astSetC( fs, unit_attr, lin_unit );
- }
- }
-
-/* If the "non-linear" algorithm above is inappropriate, see if the
- "log-linear" algorithm defined in FITS-WCS paper III can be used, in
- which the spectral axis is logarithmically spaced in the spectral
- system given by the SpecFrame. */
- if( !ctype[ 0 ] ) {
-
-/* If the "log-linear" algorithm is appropriate, the supplied SpecFrame (s)
- is related to pixel coordinate (p) by s = Sr.EXP( a*p - b ). If this
- is the case, then the log of s will be linearly related to pixel
- coordinates. Test this. If the test is passed a Mapping is returned from
- WCS to IWC. */
- axmap = LogAxis( map, iax, nwcs, lbnd_p, ubnd_p, crval, status );
-
-/* If the axis is logarithmic... */
- if( axmap ) {
-
-/* CTYPE: First 4 characters specify the "S" system. */
- strcpy( ctype, orig_system );
-
-/* The rest is "-LOG". */
- strcpy( ctype + 4, "-LOG" );
-
- }
- }
-
-/* If the "log-linear" algorithm above is inappropriate, see if the "grism"
- algorithm defined in FITS-WCS paper III can be used, in which pixel
- coords are related to wavelength using a grism dispersion function,
- implemented in AST by a GrismMap. GrismMaps produce either vacuum
- wavelength or air wavelength as output. Temporarily set the SpecFrame
- to these two systems in turn before we do the check for a GrismMap. */
- for( ix = 0; ix < 2 && !ctype[ 0 ]; ix++ ) {
- astSetC( fs, system_attr, ( ix == 0 ) ? "WAVE" : "AWAV" );
- astSetC( fs, unit_attr, "m" );
-
-/* Get the simplified Mapping from pixel to wavelength. If the Mapping is
- a CmpMap containing a GrismMap, and if the output of the GrismMap is
- scaled by a neighbouring ZoomMap (e.g. into different wavelength units),
- then the GrismMap will be modified to incorporate the effect of the
- ZoomMap, and the ZoomMap will be removed. */
- tmap2 = astGetMapping( fs, AST__BASE, AST__CURRENT );
- tmap1 = astSimplify( tmap2 );
- tmap2 = astAnnul( tmap2 );
-
-/* Analyse this Mapping to see if the iax'th output is created diretcly by a
- GrismMap (i.e. the output of theGrismMap must not subsequently be
- modified by some other Mapping). If so, ExtractGrismMap returns a pointer
- to the GrismMap as its function value, and also returns "tmap2" as a copy
- of tmap1 in which the GrismMap has been replaced by a UnitMap. */
- gmap = ExtractGrismMap( tmap1, iax, &tmap2, status );
- if( gmap ) {
-
-/* The Mapping without the GrismMap must be linear on the spectral axis. */
- if( IsMapLinear( tmap2, lbnd_p, ubnd_p, iax, status ) ) {
-
-/* Get the reference wavelength (in "m") stored in the GrismMap. */
- crval = astGetGrismWaveR( gmap );
-
-/* Save a copy of the current Wavelength (in "m") SpecFrame. */
- tfrm1 = astCopy( specfrm );
-
-/* Re-instate the original System and Unit attributes for the SpecFrame. */
- astSetC( fs, system_attr, orig_system );
- astSetC( fs, unit_attr, lin_unit );
-
-/* Find the Mapping from the original "S" system to wavelength (in "m"). */
- tfs = astConvert( specfrm, tfrm1, "" );
- tfrm1 = astAnnul( tfrm1 );
- if( tfs ) {
- tmap3 = astGetMapping( tfs, AST__BASE, AST__CURRENT );
- tfs = astAnnul( tfs );
-
-/* Use the inverse of this Mapping to convert the reference value from
- wavelength to the "S" system. */
- astTran1( tmap3, 1, &crval, 0, &crval );
-
-/* Concatenate the "S"->wavelength Mapping with the inverse GrismMap (from
- wavelength to grism parameter), to get the "S" -> "grism parameter"
- Mapping. */
- astInvert( gmap );
- tmap4 = (AstMapping *) astCmpMap( tmap3, gmap, 1, "", status );
- tmap3 = astAnnul( tmap3 );
-
-/* Use this Mapping to find the grism parameter at the reference point. */
- astTran1( tmap4, 1, &crval, 1, &gval );
-
-/* Also use it to find the rate of change of grism parameter with respect
- to "S" at the reference point. */
- dgbyds = astRate( tmap4, &crval, 0, 0 );
-
-/* FITS-WCS paper III required ds/dw to be unity at the reference point.
- Therefore the rate of change of grism parameter with respect to IWC ("w")
- is equal to the rate of change of grism parameter with respect to "S"
- (at the reference point). The mapping from "w" to grism parameter is a
- ZoomMap which scales "w" by "dgbyds" followed by a ShiftMap which adds
- on "gval". */
- tmap5 = (AstMapping *) astZoomMap( 1, dgbyds, "", status );
- tmap6 = (AstMapping *) astShiftMap( 1, &gval, "", status );
- tmap3 = (AstMapping *) astCmpMap( tmap5, tmap6, 1, "", status );
- tmap5 = astAnnul( tmap5 );
- tmap6 = astAnnul( tmap6 );
-
-/* Create the Mapping which defines the spectral IWC axis. This is the
- Mapping from WCS "S" to IWCS "w", formed by combining the Mapping from
- "S" to grism parameter (tmap4), with the Mapping from grism parameter to
- "w" (inverse of tmap3). Other non-spectral axes are left unchanged by the
- Mapping. The spectral IWC axis has the same axis index as the spectral
- WCS axis. */
- astInvert( tmap3 );
- tmap5 = (AstMapping *) astCmpMap( tmap4, tmap3, 1, "", status );
- tmap3 = astAnnul( tmap3 );
- tmap4 = astAnnul( tmap4 );
- axmap = AddUnitMaps( tmap5, iax, nwcs, status );
- tmap5 = astAnnul( tmap5 );
-
-/* CTYPE: First 4 characters specify the "S" system. */
- strcpy( ctype, orig_system );
-
-/* Last 4 characters are "-GRA" or "-GRI". */
- strcpy( ctype + 4, ( ix == 0 ) ? "-GRI" : "-GRA" );
-
-/* Store values for the projection parameters in the FitsStore. Ignore
- parameters which are set to the default values defined in FITS-WCS
- paper III. */
- pv = astGetGrismG( gmap );
- if( pv != 0 ) SetItem( &(store->pv), fits_i, 0, s, pv, status );
- pv = (double) astGetGrismM( gmap );
- if( pv != 0 ) SetItem( &(store->pv), fits_i, 1, s, pv, status );
- pv = astGetGrismAlpha( gmap );
- if( pv != 0 ) SetItem( &(store->pv), fits_i, 2, s, pv*AST__DR2D, status );
- pv = astGetGrismNR( gmap );
- if( pv != 1.0 ) SetItem( &(store->pv), fits_i, 3, s, pv, status );
- pv = astGetGrismNRP( gmap );
- if( pv != 0 ) SetItem( &(store->pv), fits_i, 4, s, pv, status );
- pv = astGetGrismEps( gmap );
- if( pv != 0 ) SetItem( &(store->pv), fits_i, 5, s, pv*AST__DR2D, status );
- pv = astGetGrismTheta( gmap );
- if( pv != 0 ) SetItem( &(store->pv), fits_i, 6, s, pv*AST__DR2D, status );
-
- }
- }
-
-/* Release resources. */
- tmap2 = astAnnul( tmap2 );
- gmap = astAnnul( gmap );
- }
-
-/* Release resources. */
- tmap1 = astAnnul( tmap1 );
-
-/* Re-instate the original System and Unit attributes for the SpecFrame. */
- astSetC( fs, system_attr, orig_system );
- astSetC( fs, unit_attr, lin_unit );
-
- }
-
-/* If this axis is a usable spectral axis... */
- if( ctype[ 0 ] ) {
-
-/* Add the Mapping for this axis in series with any existing result Mapping. */
- if( ret ) {
- tmap0 = (AstMapping *) astCmpMap( ret, axmap, 1, "", status );
- (void) astAnnul( ret );
- ret = tmap0;
- } else {
- ret = astClone( axmap );
- }
- axmap = astAnnul( axmap );
-
-/* Store values for CTYPE, CRVAL and CUNIT in the FitsStore. */
- SetItemC( &(store->ctype), fits_i, s, ctype, status );
- SetItem( &(store->crval), fits_i, 0, s, crval, status );
- SetItemC( &(store->cunit), fits_i, s, lin_unit, status );
-
-/* If the axis label has been set, use it as the CTYPE comment and CNAME
- value. */
- if( astTestLabel( specfrm, 0 ) ) {
- cname = (char *) astGetLabel( specfrm, 0 );
- SetItemC( &(store->ctype_com), fits_i, s, cname, status );
- SetItemC( &(store->cname), fits_i, s, cname, status );
- }
-
-/* Store values for the other FITS-WCS keywords which describe the
- spectral system. Only store values which have been explicitly set in
- the SpecFrame, which are different to the default values defined by
- FITS-WCS paper III (if any), and which are not bad. */
- if( astTestObsLon( specfrm ) && astTestObsLat( specfrm ) &&
- s == ' ' ) {
- geolon = astGetObsLon( specfrm );
- geolat = astGetObsLat( specfrm );
- h = astGetObsAlt( specfrm );
- if( geolat != AST__BAD && geolon != AST__BAD && h != AST__BAD ) {
- palSlaGeoc( geolat, h, &r, &z );
- r *= AST__AU;
- SetItem( &(store->obsgeox), 0, 0, ' ', r*cos( geolon ), status );
- SetItem( &(store->obsgeoy), 0, 0, ' ', r*sin( geolon ), status );
- SetItem( &(store->obsgeoz), 0, 0, ' ', z*AST__AU, status );
- }
- }
-
- if( astTestRestFreq( specfrm ) ) {
- restfreq = astGetRestFreq( specfrm );
- if( restfreq != AST__BAD ) {
- if( !strcmp( orig_system, "WAVE" ) ||
- !strcmp( orig_system, "VOPT" ) ||
- !strcmp( orig_system, "ZOPT" ) ||
- !strcmp( orig_system, "AWAV" ) ) {
- SetItem( &(store->restwav), 0, 0, s, AST__C/restfreq, status );
- } else {
- SetItem( &(store->restfrq), 0, 0, s, restfreq, status );
- }
- }
-
- if( astIsADSBSpecFrame( specfrm ) ) {
- imagfreq = astGetImagFreq( (AstDSBSpecFrame *) specfrm );
- if( imagfreq != AST__BAD ) {
- SetItem( &(store->imagfreq), 0, 0, s, imagfreq, status );
- }
- }
- }
-
- cval = GetFitsSor( astGetC( specfrm, "StdOfRest" ), status );
- if( cval ) SetItemC( &(store->specsys), 0, s, cval, status );
-
- if( astTestSourceVel( specfrm ) ) {
- vsource = astGetSourceVel( specfrm );
- if( vsource != AST__BAD && fabs( vsource ) < AST__C ) {
- zsource = sqrt( (AST__C + vsource)/
- (AST__C - vsource) ) - 1.0;
- SetItem( &(store->zsource), 0, 0, s, zsource, status );
- cval = GetFitsSor( astGetC( specfrm, "SourceVRF" ), status );
- if( cval ) SetItemC( &(store->ssyssrc), 0, s, cval, status );
- }
- } else {
- vsource = AST__BAD;
- }
-
-/* Store the VELOSYS value (not strictly needed since it can be
- determined from the other values, but FITS-WCS paper III says it can be
- useful). We temporarily change the source velocity to be zero m/s
- in the main rest frame (StdOfRest) (unless the main rest frame is
- already the source rest frame). We then change the source rest
- frame to topocentric and get the source velocity (i.e. the velocity of
- the main rest Frame) in the topocentric system. We then re-instate the
- original attribute values if they were set. */
- if( astGetStdOfRest( specfrm ) != AST__SCSOR ) {
- sourcevrf = astGetSourceVRF( specfrm );
- astSetSourceVRF( specfrm, astGetStdOfRest( specfrm ) );
- astSetSourceVel( specfrm, 0.0 );
- } else {
- vsource = AST__BAD;
- sourcevrf = AST__NOSOR;
- }
-
- astSetSourceVRF( specfrm, AST__TPSOR );
- SetItem( &(store->velosys), 0, 0, s,
- astGetSourceVel( specfrm ), status );
-
- if( vsource != AST__BAD ){
- astSetSourceVRF( specfrm, sourcevrf );
- astSetSourceVel( specfrm, vsource );
- }
-
-/* Indicate that this axis has been described. */
- axis_done[ iax ] = 1;
-
- }
-
-/* Release resources. */
- map = astAnnul( map );
- }
- }
- pframe = astAnnul( pframe );
- }
-
-/* Release resources. */
- lbnd_p = astFree( lbnd_p );
- ubnd_p = astFree( ubnd_p );
- wcsfrm = astAnnul( wcsfrm );
-
-/* If we have a Mapping to return, simplify it. Otherwise, create
- a UnitMap to return. */
- if( ret ) {
- tmap0 = ret;
- ret = astSimplify( tmap0 );
- tmap0 = astAnnul( tmap0 );
- } else {
- ret = (AstMapping *) astUnitMap( nwcs, "", status );
- }
-
-/* Return the result. */
- return ret;
-
-}
-
-static AstFitsChan *SpecTrans( AstFitsChan *this, int encoding,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* SpecTrans
-
-* Purpose:
-* Translated non-standard WCS FITS headers into equivalent standard
-* ones.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* AstFitsChan *SpecTrans( AstFitsChan *this, int encoding,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function checks the supplied FitsChan for selected
-* non-standard WCS keywords and, if found, stores equivalent
-* standard keywords in a newly created FitsChan which is returned as
-* the function value. All the original keywords are marked
-* as having been used, so that they are not written out when the
-* FitsChan is deleted.
-*
-* At the moment, the non-standard keywords checked for are:
-*
-* 1) RADECSYS is renamed as RADESYS
-*
-* 2) LONGPOLE is renamed as LONPOLE
-*
-* 3) CDjjjiii and CDj_i are converted to PCi_j (with unit CDELT)
-*
-* 4) CROTAj are converted to PCi_j
-*
-* 5) PROJPi are converted to PV<axlat>_i
-*
-* 6) CmVALi are converted to CRVALis (s=A,B,,, for m=1,2...). This
-* is also done for CmPIXi, CmYPEi, and CmNITi. CmELTi is converted
-* to a CDj_is array.
-*
-* 7) EQUINOX keywords with string values equal to a date preceeded
-* by the leter B or J (eg "B1995.0"). These are converted to the
-* corresponding Julian floating point value without any epoch
-* specifier.
-*
-* 8) EPOCH values are converted into Julian EQUINOX values (but only
-* if the FitsChan does not already contain an EQUINOX value).
-*
-* 9) DATE-OBS values are converted into MJD-OBS values (but only
-* if the FitsChan does not already contain an MJD-OBS value).
-*
-* 10) EQUINOX or EPOCH keywords with value zero are converted to
-* B1950.
-*
-* 11) The AIPS NCP and GLS projections are converted into equivalent SIN
-* or SFL projections.
-*
-* 12) The IRAF "ZPX" projection. If the last 4 chacaters of CTYPEi
-* (i = 1, naxis) are "-ZPX", then:
-* - "ZPX" is replaced by "ZPN" within the CTYPEi value
-* - If the FitsChan contains no PROJP keywords, then projection
-* parameter valus are read from any WATi_nnn keywords, and
-* corresponding PV keywords are added to the FitsChan.
-* - The WATi_nnn keywords may specify corrections to the basic ZPN
-* projection by including "lngcor" or "latcor" terms. There is no
-* direct equivalent in FITS-PC to these terms and so they are
-* ignored (it may be possible to use a pixel correction image but
-* such images are not supported by AST anyway). If these correction
-* terms are found ASTWARN keywords are added to the FitsChan
-* containing a warning message. The calling application can (if it
-* wants to) check for this keyword, and report its contents to the
-* user.
-*
-* 13) The IRAF "TNX" projection. If the last 4 chacaters of CTYPEi
-* (i = 1, naxis) are "-TNX", then:
-* - "TNX" is replaced by "TAN" within the CTYPEi value (the distorted
-* TAN projection included in a pre-final version of FITS-WCS is still
-* supported by AST using the WcsMap AST__TPN projection).
-* - If the FitsChan contains no PROJP keywords, then projection
-* parameter valus are read from any WATi_nnn keywords, and
-* corresponding PV keywords are added to the FitsChan.
-* - If the TNX projection cannot be converted exactly into a TAN
-* projection, ASTWARN keywords are added to the FitsChan
-* containing a warning message. The calling application can (if it
-* wants to) check for this keyword, and report its contents to the
-* user.
-*
-* 14) Keywords relating to the IRAF "mini-WCS" system are removed.
-* This is the IRAF equivalent of the AST native encoding. Mini-WCS
-* keywords are removed in order to avoid confusion arising between
-* potentially inconsistent encodings.
-*
-* 15) "QV" parameters for TAN projections (as produced by AUTOASTROM) are
-* renamed to "PV".
-*
-* 16) RESTFREQ is converted to RESTFRQ.
-*
-* 17) the "-WAV", "-FRQ" and "-VEL" CTYPE algorithms included in an
-* early draft of FITS-WCS paper III are translated to the
-* corresponding modern "-X2P" form.
-*
-* 18) AIPS spectral CTYPE values are translated to FITS-WCS paper III
-* equivalents.
-*
-* 19) AIPS spectral keywords OBSRA and OBSDEC are used to create a
-* pair of celestial axes with reference point at the specified
-* (OBSRA,OBSDEC) position. This is only done if the header does not
-* already contain a pair of celestial axes.
-*
-* 20) Common case insensitive CUNIT values: "Hz", "Angstrom", "km/s",
-* "M/S"
-*
-* 21) Various translations specific to the FITS-CLASS encoding.
-*
-* 21) CTYPE == "LAMBDA" changed to CTYPE = "WAVE"
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* encoding
-* The FitsChan encoding in use.
-* method
-* Pointer to string holding name of calling method.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new FitsChan containing the keywords which
-* constitute the standard equivalents to any non-standard keywords in
-* the supplied FitsChan. A NULL pointer is returned if there are no
-* non-standard keywords in the supplied FitsChan.
-
-*/
-
-/* Local Variables: */
- AstFitsChan *ret; /* The returned FitsChan */
- char *astype; /* AIPS spectral type */
- char *assys; /* AIPS standad of rest type */
- char *comm; /* Pointer to comment string */
- char *cval; /* Pointer to character string */
- char *start; /* Pointer to start of projp term */
- char *wat; /* Pointer to a single WAT string */
- char *watmem; /* Pointer to total WAT string */
- char bj; /* Besselian/Julian indicator */
- char format[ 50 ]; /* scanf format string */
- char keyname[ FITSNAMLEN + 5 ];/* General keyword name + formats */
- char template[ FITSNAMLEN + 1 ];/* General keyword name template */
- char lattype[MXCTYPELEN]; /* CTYPE value for latitude axis */
- char lontype[MXCTYPELEN]; /* CTYPE value for longitude axis */
- char spectype[MXCTYPELEN]; /* CTYPE value for spectral axis */
- char prj[6]; /* Projection string */
- char s; /* Co-ordinate version character */
- char ss; /* Co-ordinate version character */
- double cdelt; /* CDELT value */
- double cdelti; /* CDELT for longitude axis */
- double cdeltj; /* CDELT for latitude axis */
- double cosrota; /* Cos( CROTA ) */
- double crota; /* CROTA Value */
- double crpix; /* CRPIX value */
- double crval; /* CRVAL value */
- double dval; /* General floating value */
- double lambda; /* Ratio of CDELTs */
- double projp; /* Projection parameter value */
- double restfreq; /* Rest frequency (Hz) */
- double rowsum2; /* Sum of squared CDi_j row elements */
- double sinrota; /* Sin( CROTA ) */
- const int *mp; /* Pointer to next projection parameter index */
- int axlat; /* Index of latitude axis */
- int axlon; /* Index of longitude axis */
- int diag; /* Sign of diagonal CDi_j element */
- int gotpcij; /* Does FitsChan contain any PCi_j keywords? */
- int i,j; /* Indices */
- int jlo; /* Lowest axis index */
- int jhi; /* Highest axis index */
- int iaxis; /* Axis index */
- int iproj; /* Projection parameter index */
- int lbnd[ 2 ]; /* Lower index bounds */
- int m; /* Co-ordinate version index */
- int naxis; /* Number of axes */
- int nch; /* No. of characters read */
- int norot; /* Non-zero if there is no axis rotation */
- int ok; /* Can projection be represented in FITS-WCS?*/
- int porder; /* Order of polynomial */
- int tlbnd[ 2 ]; /* Lower index bounds */
- int tubnd[ 2 ]; /* Upper index bounds */
- int ubnd[ 2 ]; /* Upper index bounds */
- int use_projp; /* Use PROJP keywors in favour of PV keywords? */
- int watlen; /* Length of total WAT string (inc. term null)*/
- size_t size; /* Length of string value */
-
-/* Arrays needed to convert the index of a TNX co-efficient into an index
- of a TAN projection parameter. */
- static const int abskip[] = {0,1,4,10,20,35,56,84};
- static const int nab[] = {1,3,6,10,15,21,28,36};
- static const int a[] = {
-0,
-0,1,2,
-0,1,4,2,5,6,
-0,1,4,7,2,5,8,6,9,10,
-0,1,4,7,12,2,5,8,13,6,9,14,10,15,16,
-0,1,4,7,12,17,2,5,8,13,18,6,9,14,19,10,15,20,16,21,22,
-0,1,4,7,12,17,24,2,5,8,13,18,25,6,9,14,19,26,10,15,20,27,16,21,28,22,29,30,
-0,1,4,7,12,17,24,31,2,5,8,13,18,25,32,6,9,14,19,26,33,10,15,20,27,34,16,21,28,35,22,29,36,30,37,38};
-
- static const int b[] = {
-0,
-0,2,1,
-0,2,6,1,5,4,
-0,2,6,10,1,5,9,4,8,7,
-0,2,6,10,16,1,5,9,15,4,8,14,7,13,12,
-0,2,6,10,16,22,1,5,9,15,21,4,8,14,20,7,13,19,12,18,17,
-0,2,6,10,16,22,30,1,5,9,15,21,29,4,8,14,20,28,7,13,19,27,12,18,26,17,25,24,
-0,2,6,10,16,22,30,38,1,5,9,15,21,29,37,4,8,14,20,28,36,7,13,19,27,35,12,18,26,34,17,25,33,24,32,31};
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise to avoid compiler warnings. */
- size = 0;
-
-/* Create the returned FitsChan. */
- ret = astFitsChan( NULL, NULL, "", status );
-
-/* Loop round all axis descriptions, starting with primary (' '). */
- for( s = 'A' - 1; s <= 'Z' && astOK; s++ ){
- if( s == 'A' - 1 ) s = ' ';
-
-/* Find the number of axes by finding the highest axis number in any
- CRPIXi keyword name. Pass on if there are no axes for this axis
- description. */
- if( s != ' ' ) {
- sprintf( template, "CRPIX%%d%c", s );
- } else {
- strcpy( template, "CRPIX%d" );
- }
- if( !astKeyFields( this, template, 1, &naxis, lbnd ) ) {
- if( s == ' ' ) s = 'A' - 1;
- continue;
- }
-
-/* Find the longitude and latitude axes by examining the CTYPE values.
- They are marked as read. Such markings are only provisional, and they
- can be read again any number of times until the current astRead
- operation is completed. Also note the projection type. */
- j = 0;
- axlon = -1;
- axlat = -1;
- while( j < naxis && astOK ){
- if( GetValue2( ret, this, FormatKey( "CTYPE", j + 1, -1, s, status ),
- AST__STRING, (void *) &cval, 0, method,
- class, status ) ){
- if( !strncmp( cval, "RA--", 4 ) ||
- !strncmp( cval, "AZ--", 4 ) ||
- !strncmp( cval + 1, "LON", 3 ) ||
- !strncmp( cval + 2, "LN", 2 ) ) {
- axlon = j;
- strncpy( prj, cval + 4, 4 );
- strncpy( lontype, cval, 10 );
- prj[ 4 ] = 0;
-
- } else if( !strncmp( cval, "DEC-", 4 ) ||
- !strncmp( cval, "EL--", 4 ) ||
- !strncmp( cval + 1, "LAT", 3 ) ||
- !strncmp( cval + 2, "LT", 2 ) ) {
- axlat = j;
- strncpy( prj, cval + 4, 4 );
- strncpy( lattype, cval, 10 );
- prj[ 4 ] = 0;
-
-/* Check for spectral algorithms from early drafts of paper III */
- } else {
- prj[ 0 ] = '-';
- if( !strncmp( cval + 4, "-WAV", 4 ) ) {
- prj[ 1 ] = 'W';
- } else if( !strncmp( cval + 4, "-FRQ", 4 ) ) {
- prj[ 1 ] = 'F';
- } else if( !strncmp( cval + 4, "-VEL", 4 ) ) {
- prj[ 1 ] = 'V';
- } else {
- prj[ 0 ] = 0;
- }
- if( *prj ) {
- prj[ 2 ] = '2';
- if( !strncmp( cval, "WAVE", 4 ) ) {
- prj[ 3 ] = 'W';
- } else if( !strncmp( cval, "FREQ", 4 ) ) {
- prj[ 3 ] = 'F';
- } else if( !strncmp( cval, "VELO", 4 ) ) {
- prj[ 3 ] = 'V';
- } else if( !strncmp( cval, "VRAD", 4 ) ) {
- prj[ 3 ] = 'F';
- } else if( !strncmp( cval, "VOPT", 4 ) ) {
- prj[ 3 ] = 'W';
- } else if( !strncmp( cval, "ZOPT", 4 ) ) {
- prj[ 3 ] = 'W';
- } else if( !strncmp( cval, "ENER", 4 ) ) {
- prj[ 3 ] = 'F';
- } else if( !strncmp( cval, "WAVN", 4 ) ) {
- prj[ 3 ] = 'F';
- } else if( !strncmp( cval, "BETA", 4 ) ) {
- prj[ 3 ] = 'V';
- } else {
- prj[ 0 ] = 0;
- }
- }
- if( *prj ) {
- strcpy( spectype, cval );
- if( prj[ 1 ] == prj[ 3 ] ) {
- strcpy( prj, strlen( cval ) > 8 ? "----" : " " );
- } else {
- prj[ 4 ] = 0;
- }
- strncpy( spectype + 4, prj, 4 );
- cval = spectype;
- SetValue( ret, FormatKey( "CTYPE", j + 1, -1, s, status ),
- (void *) &cval, AST__STRING, NULL, status );
- }
- }
- j++;
-
- } else {
- break;
- }
- }
-
-/* RADECSYS keywords
- ----------------- */
- if( s == ' ' ) {
- if( GetValue2( ret, this, "RADECSYS", AST__STRING, (void *) &cval, 0, method,
- class, status ) ){
- if( encoding == FITSPC_ENCODING || encoding == FITSIRAF_ENCODING ){
- SetValue( ret, "RADESYS", (void *) &cval, AST__STRING,
- CardComm( this, status ), status );
- }
- }
-
-/* LONGPOLE keywords
- ----------------- */
- if( GetValue2( ret, this, "LONGPOLE", AST__FLOAT, (void *) &dval, 0, method,
- class, status ) ){
- if( encoding == FITSPC_ENCODING || encoding == FITSIRAF_ENCODING ){
- SetValue( ret, "LONPOLE", (void *) &dval, AST__FLOAT,
- CardComm( this, status ), status );
- }
- }
- }
-
-/* Zero CDELT values.
- ----------------- */
-
-/* Check there are some CDELT keywords... */
- if( s != ' ' ) {
- sprintf( template, "CDELT%%d%c", s );
- } else {
- strcpy( template, "CDELT%d" );
- }
- if( astKeyFields( this, template, 0, NULL, NULL ) ){
-
-/* Do each row in the matrix. */
- for( j = 0; j < naxis; j++ ){
-
-/* Get the CDELT value for this row. */
- GetValue2( ret, this, FormatKey( "CDELT", j + 1, -1, s, status ), AST__FLOAT,
- (void *) &cdeltj, 0, method, class, status );
-
-/* If CDELT is zero, use 1.0E-6 of the corresponding CRVAL value
- instead, or 1.0 if CRVAL is zero. Otherwise, the zeros could cause the
- matrix to be non-invertable. The Mapping could then not be simplified
- or used by a Plot. CDELT values of zero are usually used to indicate
- "redundant" axes. For instance, a 2D image may be stored as a 3D cube
- with a single plane with the "redundant" 3rd axis used to specify the
- wavelength of the filter. The actual value used for CDELT shouldn't
- matter since the axis only spans a single pixel anyway. */
- if( cdeltj == 0.0 ){
- GetValue2( ret, this, FormatKey( "CDELT", j + 1, -1, s, status ), AST__FLOAT,
- (void *) &dval, 1, method, class, status );
- cdeltj = 1.0E-6*dval;
- if( cdeltj == 0.0 ) cdeltj = 1.0;
- SetValue( ret, FormatKey( "CDELT", j + 1, -1, s, status ), (void *) &cdeltj,
- AST__FLOAT, NULL, status );
- }
- }
- }
-
-/* Following conversions produce PCi_j keywords. Only do them if there
- are currently no PCi_j keywords in the header. */
- if( s != ' ' ) {
- sprintf( template, "PC%%d_%%d%c", s );
- } else {
- strcpy( template, "PC%d_%d" );
- }
- gotpcij = astKeyFields( this, template, 0, NULL, NULL );
- if( !gotpcij ){
-
-/* CDjjjiii
- -------- */
- if( s == ' ' && astKeyFields( this, "CD%3d%3d", 0, NULL, NULL ) ){
-
-/* Do each row in the matrix. */
- for( j = 0; j < naxis; j++ ){
-
-/* Do each column in the matrix. */
- for( i = 0; i < naxis; i++ ){
-
-/* Get the CDjjjiii matrix element */
- sprintf( keyname, "CD%.3d%.3d", j + 1, i + 1 );
- if( GetValue2( ret, this, keyname, AST__FLOAT, (void *) &dval, 0,
- method, class, status ) ){
-
-/* If found, save it with name PCj_i, and ensure the default value of 1.0
- is used for CDELT. */
- if( encoding == FITSIRAF_ENCODING ){
- SetValue( ret, FormatKey( "PC", j + 1, i + 1, ' ', status ),
- (void *) &dval, AST__FLOAT, NULL, status );
- dval = 1.0;
- SetValue( ret, FormatKey( "CDELT", j + 1, -1, s, status ),
- (void *) &dval, AST__FLOAT, NULL, status );
- gotpcij = 1;
- }
- }
- }
- }
- }
-
-/* CDj_i
- ---- */
- if( s != ' ' ) {
- sprintf( template, "CD%%d_%%d%c", s );
- } else {
- strcpy( template, "CD%d_%d" );
- }
- if( !gotpcij && astKeyFields( this, template, 0, NULL, NULL ) ){
-
-/* Do each row in the matrix. */
- for( j = 0; j < naxis; j++ ){
-
-/* First find the sum of the squared elements in the row. and note the
- sign of the diagonal element. */
- rowsum2 = 0.0;
- diag = +1;
- for( i = 0; i < naxis; i++ ){
- if( GetValue2( ret, this, FormatKey( "CD", j + 1, i + 1, s, status ),
- AST__FLOAT, (void *) &dval, 0, method, class, status ) ){
- rowsum2 += dval*dval;
- if( i == j ) diag = ( dval >= 0.0 ) ? +1 : -1;
- }
- }
-
-/* The CDELT value for this row will be the length of the row vector. This means that
- each row will be a unit vector when converted to PCi_j form, and the CDELT will
- give a real indication of the pixel size. Ensure that the diagonal
- PCi+j element has a positive sign. */
- cdelti = sqrt( rowsum2 )*diag;
- SetValue( ret, FormatKey( "CDELT", j + 1, -1, s, status ),
- (void *) &cdelti, AST__FLOAT, NULL, status );
-
-/* Do each column in the matrix. */
- for( i = 0; i < naxis; i++ ){
-
-/* Get the CDj_i matrix element (note default value for all CD elements
- is zero (even diagonal elements!). */
- if( !GetValue2( ret, this, FormatKey( "CD", j + 1, i + 1, s, status ),
- AST__FLOAT, (void *) &dval, 0, method, class, status ) ){
- dval = 0.0;
- }
-
-/* Divide by the rows cdelt value and save it with name PCj_i. */
- if( cdelti != 0.0 ) dval /= cdelti;
- SetValue( ret, FormatKey( "PC", j + 1, i + 1, s, status ),
- (void *) &dval, AST__FLOAT, NULL, status );
- gotpcij = 1;
- }
- }
- }
-
-/* PCjjjiii and CROTAi keywords
- ---------------------------- */
-
-/* Check there are some CDELT keywords... */
- if( s != ' ' ) {
- sprintf( template, "CDELT%%d%c", s );
- } else {
- strcpy( template, "CDELT%d" );
- }
- if( !gotpcij && astKeyFields( this, template, 0, NULL, NULL ) ){
-
-/* See if there is a CROTA keyword. Try to read values for both axes
- since they are sometimes both included. This ensures they will not be
- included in the output when the FitsChan is deleted. Read the latitude
- axis second in order to give it priority in cases where both are
- present. */
- crota = AST__BAD;
- GetValue2( ret, this, FormatKey( "CROTA", axlon + 1, -1, s, status ),
- AST__FLOAT, (void *) &crota, 0, method, class, status );
- GetValue2( ret, this, FormatKey( "CROTA", axlat + 1, -1, s, status ),
- AST__FLOAT, (void *) &crota, 0, method, class, status );
-
-/* If there are any PCjjjiii keywords, rename them as PCj_i. */
- if( s == ' ' && astKeyFields( this, "PC%3d%3d", 0, NULL, NULL ) ){
-
-/* Do each row in the matrix. */
- for( j = 0; j < naxis; j++ ){
-
-/* Do each column in the matrix. */
- for( i = 0; i < naxis; i++ ){
-
-/* Get the PCiiijjj matrix element */
- sprintf( keyname, "PC%.3d%.3d", j + 1, i + 1 );
- if( GetValue2( ret, this, keyname, AST__FLOAT, (void *) &dval, 0,
- method, class, status ) ){
- } else if( i == j ) {
- dval = 1.0;
- } else {
- dval = 0.0;
- }
-
-/* Store it as PCi_j */
- SetValue( ret, FormatKey( "PC", j + 1, i + 1, ' ', status ),
- (void *) &dval, AST__FLOAT, NULL, status );
- gotpcij = 1;
- }
- }
-
-/* If there is a CROTA value and no PCjjjii keywords, create a PCj_i
- matrix from the CROTA values. We need to have latitude and longitude
- axes for this. */
- } else if( s == ' ' && axlat != -1 && axlon != -1 && crota != AST__BAD ){
-
-/* Get the sin and cos of CROTA */
- cosrota = cos( crota*AST__DD2R );
- sinrota = sin( crota*AST__DD2R );
-
-/* Get the CDELT values for the longitude and latitude axes. */
- if( GetValue2( ret, this, FormatKey( "CDELT", axlat + 1, -1, ' ', status ),
- AST__FLOAT, (void *) &cdeltj, 1, method,
- class, status ) &&
- GetValue2( ret, this, FormatKey( "CDELT", axlon + 1, -1, ' ', status ),
- AST__FLOAT, (void *) &cdelti, 1, method,
- class, status ) ){
-
-/* Save the ratio, needed below. */
- lambda = cdeltj/cdelti;
-
-/* Save a corresponding set of PCi_j keywords in the FitsChan. First do
- the diagonal terms. */
- for( i = 0; i < naxis; i++ ){
- if( i == axlat ) {
- dval = cosrota;
- } else if( i == axlon ) {
- dval = cosrota;
- } else {
- dval = 1.0;
- }
-
- SetValue( ret, FormatKey( "PC", i + 1, i + 1, ' ', status ),
- (void *) &dval, AST__FLOAT, NULL, status );
- gotpcij = 1;
- }
-
-/* Now do the non-zero off-diagonal terms. */
- dval = sinrota/lambda;
- SetValue( ret, FormatKey( "PC", axlat + 1, axlon + 1, ' ', status ),
- (void *) &dval, AST__FLOAT, NULL, status );
-
- dval = -sinrota*lambda;
- SetValue( ret, FormatKey( "PC", axlon + 1, axlat + 1, ' ', status ),
- (void *) &dval, AST__FLOAT, NULL, status );
- }
- }
- }
- }
-
-/* Conversion of old PROJP, etc, is done once on the "primary" pass. */
- if( s == ' ' ) {
-
-/* PROJP keywords
- -------------- */
- if( astKeyFields( this, "PROJP%d", 1, ubnd, lbnd ) && axlat != -1 ) {
-
-/* Some people produce headers with both PROJP and PV. Even worse, the
- PROJP and PV values are sometimes inconsistent. In this case we trust
- the PV values rather than the PROJP values, but only if the PV values
- are not obviously incorrect for some reason. In particularly, we check
- that, *if* either PVi_1 or PVi_2 (where i=longitude axis) is present,
- then PVi_0 is also present. Conversely we check that if PVi_0 is
- present then at least one of PVi_1 or PVi_2 is present. */
- use_projp = 1;
- if( axlat != -1 &&
- astKeyFields( this, "PV%d_%d", 2, tubnd, tlbnd ) ){
- use_projp = 0;
-
-/* Are there any PV values for the longitude axis? */
- if( tlbnd[ 0 ] <= axlon + 1 && axlon + 1 <= tubnd[ 0 ] ) {
-
-/* Are either PVi_1 or PVi_2 available? */
- if( HasCard( this, FormatKey( "PV", axlon + 1, 1, ' ', status ),
- method, class, status ) ||
- HasCard( this, FormatKey( "PV", axlon + 1, 2, ' ', status ),
- method, class, status ) ) {
-
-/* If so use PROJP if PVi_0 is not also available. */
- if( !HasCard( this, FormatKey( "PV", axlon + 1, 0, ' ', status ),
- method, class, status ) ) use_projp = 1;
-
-/* If neither PVi_1 or PVi_2 are available, use PROJP if PVi_0 is
- available. */
- } else if( HasCard( this, FormatKey( "PV", axlon + 1, 0, ' ', status ),
- method, class, status ) ) {
- use_projp = 1;
-
- }
- }
- }
-
-/* Translate PROJP to PV if required. */
- if( use_projp ) {
- for( i = lbnd[ 0 ]; i <= ubnd[ 0 ]; i++ ){
- if( GetValue2( ret, this, FormatKey( "PROJP", i, -1, ' ', status ),
- AST__FLOAT, (void *) &dval, 0, method, class, status ) &&
- ( encoding == FITSPC_ENCODING ||
- encoding == FITSIRAF_ENCODING ) ){
- SetValue( ret, FormatKey( "PV", axlat + 1, i, ' ', status ),
- (void *) &dval, AST__FLOAT, CardComm( this, status ), status );
- }
- }
- }
- }
-
-/* CmVALi keywords
- --------------- */
- if( astKeyFields( this, "C%1dVAL%d", 2, ubnd, lbnd ) ){
- ss = 'A';
- for( m = lbnd[ 0 ]; m <= ubnd[ 0 ]; m++ ){
- for( i = lbnd[ 1 ]; i <= ubnd[ 1 ]; i++ ){
- sprintf( keyname, "C%dVAL%d", m, i );
- if( GetValue2( ret, this, keyname, AST__FLOAT, (void *) &dval, 0,
- method, class, status ) &&
- ( encoding == FITSPC_ENCODING ||
- encoding == FITSIRAF_ENCODING ) ){
- sprintf( keyname, "CRVAL%d%c", i, ss );
- SetValue( ret, keyname, (void *) &dval, AST__FLOAT,
- CardComm( this, status ), status );
- }
- }
- ss++;
- }
- }
-
-/* CmPIXi keywords
- --------------- */
- if( astKeyFields( this, "C%1dPIX%d", 2, ubnd, lbnd ) ){
- ss = 'A';
- for( m = lbnd[ 0 ]; m <= ubnd[ 0 ]; m++ ){
- for( i = lbnd[ 1 ]; i <= ubnd[ 1 ]; i++ ){
- sprintf( keyname, "C%dPIX%d", m, i );
- if( GetValue2( ret, this, keyname, AST__FLOAT, (void *) &dval, 0,
- method, class, status ) &&
- ( encoding == FITSPC_ENCODING ||
- encoding == FITSIRAF_ENCODING ) ){
- sprintf( keyname, "CRPIX%d%c", i, ss );
- SetValue( ret, keyname, (void *) &dval, AST__FLOAT,
- CardComm( this, status ), status );
- }
- }
- ss++;
- }
- }
-
-/* CmYPEi keywords
- --------------- */
- if( astKeyFields( this, "C%1dYPE%d", 2, ubnd, lbnd ) ){
- ss = 'A';
- for( m = lbnd[ 0 ]; m <= ubnd[ 0 ]; m++ ){
- for( i = lbnd[ 1 ]; i <= ubnd[ 1 ]; i++ ){
- sprintf( keyname, "C%dYPE%d", m, i );
- if( GetValue2( ret, this, keyname, AST__STRING, (void *) &cval, 0,
- method, class, status ) &&
- ( encoding == FITSPC_ENCODING ||
- encoding == FITSIRAF_ENCODING ) ){
- sprintf( keyname, "CTYPE%d%c", i, ss );
- SetValue( ret, keyname, (void *) &cval, AST__STRING,
- CardComm( this, status ), status );
- }
- }
- ss++;
- }
- }
-
-/* CmNITi keywords
- --------------- */
- if( astKeyFields( this, "C%1dNIT%d", 2, ubnd, lbnd ) ){
- ss = 'A';
- for( m = lbnd[ 0 ]; m <= ubnd[ 0 ]; m++ ){
- for( i = lbnd[ 1 ]; i <= ubnd[ 1 ]; i++ ){
- sprintf( keyname, "C%dNIT%d", m, i );
- if( GetValue2( ret, this, keyname, AST__STRING, (void *) &cval, 0,
- method, class, status ) &&
- ( encoding == FITSPC_ENCODING ||
- encoding == FITSIRAF_ENCODING ) ){
- sprintf( keyname, "CUNIT%d%c", i, ss );
- SetValue( ret, keyname, (void *) &cval, AST__STRING,
- CardComm( this, status ), status );
- }
- }
- ss++;
- }
- }
-
-
-/* CmELTi keywords
- --------------- */
- if( astKeyFields( this, "C%1dELT%d", 2, ubnd, lbnd ) ){
- ss = 'A';
- for( m = lbnd[ 0 ]; m <= ubnd[ 0 ]; m++ ){
-
-/* Create a PCj_is matrix by copying the PCjjjiii values and rename CmELTi as
- CDELTis. */
-
-/* Do each row in the matrix. */
- for( j = 0; j < naxis; j++ ){
-
-/* Get the CDELT value for this row. Report an error if not present. */
- sprintf( keyname, "C%dELT%d", m, j + 1 );
- GetValue2( ret, this, keyname, AST__FLOAT, (void *) &cdeltj, 1,
- method, class, status );
-
-/* If CDELT is zero, use one hundredth of the corresponding CRVAL value
- instead, or 1.0 if CRVAL is zero. Otherwise, the zeros could cause the
- matrix to be non-invertable. The Mapping could then not be simplified
- or used by a Plot. CDELT values of zero are usually used to indicate
- "redundant" axes. For instance, a 2D image may be stored as a 3D cube
- with a single plane with the "redundant" 3rd axis used to specify the
- wavelength of the filter. The actual value used for CDELT shouldn't
- matter since the axis only spans a single pixel anyway. */
- if( cdeltj == 0.0 ){
- GetValue2( ret, this, FormatKey( "CRVAL", j + 1, -1, ss, status ), AST__FLOAT,
- (void *) &dval, 1, method, class, status );
- cdeltj = 0.01*dval;
- if( cdeltj == 0.0 ) cdeltj = 1.0;
- }
-
-/* Save it as CDELTis */
- sprintf( keyname, "CDELT%d%c", j + 1, ss );
- SetValue( ret, keyname, (void *) &cdeltj, AST__FLOAT,
- CardComm( this, status ), status );
-
-/* Do each column in the matrix. */
- for( i = 0; i < naxis; i++ ){
-
-/* Get the PCiiijjj matrix element */
- sprintf( keyname, "PC%.3d%.3d", j + 1, i + 1 );
- if( GetValue2( ret, this, keyname, AST__FLOAT, (void *) &dval, 0,
- method, class, status ) ){
- } else if( i == j ) {
- dval = 1.0;
- } else {
- dval = 0.0;
- }
-
-/* Store it as PCi_js. */
- SetValue( ret, FormatKey( "PC", j + 1, i + 1, ss, status ),
- (void *) &dval, AST__FLOAT, NULL, status );
- }
- }
- ss++;
- }
- }
-
-/* EPOCH keywords
- ------------ */
-/* Get any EPOCH card, marking it as read. */
- if( GetValue2( ret, this, "EPOCH", AST__FLOAT, (void *) &dval, 0, method,
- class, status ) ){
-
-/* Convert values of zero to B1950. */
- if( dval == 0.0 ) dval = 1950.0;
-
-/* Save a new EQUINOX card in the FitsChan, so long as there is not
- already one there. */
- if( !GetValue2( ret, this, "EQUINOX", AST__STRING, (void *) &cval, 0,
- method, class, status ) ){
- SetValue( ret, "EQUINOX", (void *) &dval, AST__FLOAT,
- "Reference equinox", status );
- }
- }
-
-/* String EQUINOX values
- ---------------------
- If found, EQUINOX will be used in favour of any EPOCH value found
- above. */
- if( GetValue2( ret, this, "EQUINOX", AST__STRING, (void *) &cval, 0, method,
- class, status ) ){
-
-/* Note the first character. */
- bj = cval[ 0 ];
-
-/* If it is "B" or "J", read a floating value from the rest */
- if( bj == 'B' || bj == 'J' ) {
- if( 1 == astSscanf( cval + 1, " %lf ", &dval ) ){
-
-/* If it is a Besselian epoch, convert to Julian. */
- if( bj == 'B' ) dval = palSlaEpj( palSlaEpb2d( dval ) );
-
-/* Replace the original EQUINOX card. */
- SetValue( ret, "EQUINOX", (void *) &dval, AST__FLOAT,
- CardComm( this, status ), status );
- }
- }
- }
-
-/* EQUINOX = 0.0 keywords
- ---------------------- */
- if( GetValue2( ret, this, "EQUINOX", AST__FLOAT, (void *) &dval, 0, method,
- class, status ) ){
- if( dval == 0.0 ){
- dval = 1950.0;
- SetValue( ret, "EQUINOX", (void *) &dval, AST__FLOAT,
- CardComm( this, status ), status );
- }
- }
- }
-
-/* DATE-OBS keywords
- ---------------- */
-/* Read any DATE-OBS card. This prevents it being written out when the
- FitsChan is deleted. */
- if( s == ' ' ) {
- strcpy( keyname, "DATE-OBS" );
- if( GetValue2( ret, this, keyname, AST__STRING, (void *) &cval, 0, method,
- class, status ) ){
-
-/* Ignore DATE-OBS values if the header contains an MJD-OBS value */
- strcpy( keyname, "MJD-OBS" );
- if( !GetValue2( ret, this, keyname, AST__FLOAT, (void *) &dval, 0,
- method, class, status ) ){
-
-/* Get the corresponding mjd-obs value, checking that DATE-OBS is valid. */
- dval = DateObs( cval, status );
- if( dval != AST__BAD ){
- SetValue( ret, keyname, (void *) &dval, AST__FLOAT,
- "Date of observation", status );
- }
- }
- }
- }
-
-/* Things specific to the CLASS encoding
- ------------------------------------- */
- if( encoding == FITSCLASS_ENCODING ) ClassTrans( this, ret, axlat,
- axlon, method, class, status );
-
-/* AIPS "NCP" projections
- --------------------- */
-
-/* Compare the projection type with "-NCP" */
- if( !Ustrcmp( prj, "-NCP", status ) ) {
-
-/* Get the latitude reference value, and take is cot. */
- GetValue2( ret, this, FormatKey( "CRVAL", axlat + 1, -1, s, status ),
- AST__FLOAT, (void *) &dval, 1, method, class, status );
-
- dval = sin( dval*AST__DD2R );
- if( dval != 0.0 ) {
- dval = cos( dval*AST__DD2R )/dval;
-
-/* Replace NCP with SIN in the CTYPE values. */
- strcpy( lontype + 4, "-SIN" );
- cval = lontype;
- SetValue( ret, FormatKey( "CTYPE", axlon + 1, -1, s, status ),
- (void *) &cval, AST__STRING, NULL, status );
- strcpy( lattype + 4, "-SIN" );
- cval = lattype;
- SetValue( ret, FormatKey( "CTYPE", axlat + 1, -1, s, status ),
- (void *) &cval, AST__STRING, NULL, status );
-
-/* Store the new projection parameters using names suitable to the
- encoding. */
- if( encoding == FITSWCS_ENCODING ){
- SetValue( ret, FormatKey( "PV", axlat + 1, 2, s, status ),
- (void *) &dval, AST__FLOAT, NULL, status );
- dval = 0.0;
- SetValue( ret, FormatKey( "PV", axlat + 1, 1, s, status ),
- (void *) &dval, AST__FLOAT, NULL, status );
- } else {
- SetValue( ret, FormatKey( "PROJP", 2, -1, s, status ),
- (void *) &dval, AST__FLOAT, NULL, status );
- dval = 0.0;
- SetValue( ret, FormatKey( "PROJP", 1, -1, s, status ),
- (void *) &dval, AST__FLOAT, NULL, status );
- }
- }
- }
-
-/* CLASS "ATF" projections
- ---------------------- */
-/* Replace ATF with AIT in the CTYPE values. */
- if( !Ustrcmp( prj, "-ATF", status ) ) {
-
- strcpy( lontype + 4, "-AIT" );
- cval = lontype;
- SetValue( ret, FormatKey( "CTYPE", axlon + 1, -1, s, status ),
- (void *) &cval, AST__STRING, NULL, status );
- strcpy( lattype + 4, "-AIT" );
- cval = lattype;
- SetValue( ret, FormatKey( "CTYPE", axlat + 1, -1, s, status ),
- (void *) &cval, AST__STRING, NULL, status );
- }
-
-/* AIPS "GLS" projections (see FITS-WCS paper II section 6.1.4)
- --------------------- */
-
-/* Compare the projection type with "-GLS" */
- if( !Ustrcmp( prj, "-GLS", status ) ) {
-
-/* Translation is only possible if there is no rotation on the celestial
- axes. Check the off-diagonal elements of the PCi_j array are zero. */
- norot = 1;
- sprintf( keyname, "PC%d_%d", axlon + 1, axlat + 1 );
- if( GetValue2( ret, this, keyname, AST__FLOAT, (void *) &dval, 0,
- method, class, status ) ){
- if( dval != 0.0 ) norot = 0;
- }
- sprintf( keyname, "PC%d_%d", axlat + 1, axlon + 1 );
- if( GetValue2( ret, this, keyname, AST__FLOAT, (void *) &dval, 0,
- method, class, status ) ){
- if( dval != 0.0 ) norot = 0;
- }
-
- if( norot ) {
-
-/* Get the reference value,reference pixel and cdelt value for the longitude
- axis. */
- GetValue2( ret, this, FormatKey( "CRVAL", axlon + 1, -1, s, status ),
- AST__FLOAT, (void *) &crval, 1, method, class, status );
- GetValue2( ret, this, FormatKey( "CDELT", axlon + 1, -1, s, status ),
- AST__FLOAT, (void *) &cdelt, 1, method, class, status );
- GetValue2( ret, this, FormatKey( "CRPIX", axlon + 1, -1, s, status ),
- AST__FLOAT, (void *) &crpix, 1, method, class, status );
-
-/* Store the original CRVAL value as RFVAL since it may be used for
- other purposes (e.g. to hold the spectral source position). */
- SetValue( ret, FormatKey( "RFVAL", axlon + 1, 1, s, status ),
- (void *) &crval, AST__FLOAT, NULL, status );
-
-/* Calculate and store a new CRPIX value which corresponds to a longitude
- value of zero. Also store zero for CRVAL. */
- crpix -= crval/cdelt;
- crval = 0.0;
- SetValue( ret, FormatKey( "CRPIX", axlon + 1, 1, s, status ),
- (void *) &crpix, AST__FLOAT, NULL, status );
- SetValue( ret, FormatKey( "CRVAL", axlon + 1, 1, s, status ),
- (void *) &crval, AST__FLOAT, NULL, status );
-
-/* Get the reference value,reference pixel and cdelt value for the latitude
- axis. */
- GetValue2( ret, this, FormatKey( "CRVAL", axlat + 1, -1, s, status ),
- AST__FLOAT, (void *) &crval, 1, method, class, status );
- GetValue2( ret, this, FormatKey( "CDELT", axlat + 1, -1, s, status ),
- AST__FLOAT, (void *) &cdelt, 1, method, class, status );
- GetValue2( ret, this, FormatKey( "CRPIX", axlat + 1, -1, s, status ),
- AST__FLOAT, (void *) &crpix, 1, method, class, status );
-
-/* Store the original CRVAL value as RFVAL since it may be used for
- other purposes (e.g. to hold the spectral source position). */
- SetValue( ret, FormatKey( "RFVAL", axlat + 1, 1, s, status ),
- (void *) &crval, AST__FLOAT, NULL, status );
-
-/* Calculate and store a new CRPIX value which corresponds to a longitude
- value of zero. Also store zero for CRVAL. */
- crpix -= crval/cdelt;
- crval = 0.0;
- SetValue( ret, FormatKey( "CRPIX", axlat + 1, 1, s, status ),
- (void *) &crpix, AST__FLOAT, NULL, status );
- SetValue( ret, FormatKey( "CRVAL", axlat + 1, 1, s, status ),
- (void *) &crval, AST__FLOAT, NULL, status );
- }
- }
-
-/* Rename "QV" TAN projection parameters as "PV"
- and change "-TAN" to "-TPN".
- -------------------------------------------- */
- if( !Ustrcmp( prj, "-TAN", status ) ){
-
-/* Rewind the FitsChan. */
- astClearCard( this );
-
-/* Search the FitsChan for QV cards. */
- if( s != ' ' ) {
- sprintf( template, "QV%%d_%%d%c", s );
- } else {
- strcpy( template, "QV%d_%d" );
- }
- while( FindKeyCard( this, template, method, class, status ) && astOK ) {
-
-/* If not already done, replace TAN with TPN in the CTYPE values. */
- if( !Ustrcmp( prj, "-TAN", status ) ){
- strcpy( prj, "-TPN" );
- strcpy( lontype + 4, "-TPN" );
- cval = lontype;
- SetValue( ret, FormatKey( "CTYPE", axlon + 1, -1, s, status ),
- (void *) &cval, AST__STRING, NULL, status );
- strcpy( lattype + 4, "-TPN" );
- cval = lattype;
- SetValue( ret, FormatKey( "CTYPE", axlat + 1, -1, s, status ),
- (void *) &cval, AST__STRING, NULL, status );
- }
-
-/* Indicate that the QV card has been consumed. */
- MarkCard( this, status );
-
-/* Get the keyword name and change it from QV to PV. */
- strcpy( keyname, CardName( this, status ) );
- keyname[ 0 ] ='P';
-
-/* Store the new PV card. */
- SetValue( ret, keyname, CardData( this, &size, status ), AST__FLOAT,
- CardComm( this, status ), status );
-
-/* Move on to the next card. */
- MoveCard( this, 1, method, class, status );
-
- }
- }
-
-
-/* IRAF "ZPX" projections
- --------------------- */
- if( s == ' ' && !Ustrcmp( prj, "-ZPX", status ) ) {
-
-/* Replace ZPX with ZPN in the CTYPE values. */
- strcpy( lontype + 4, "-ZPN" );
- cval = lontype;
- SetValue( ret, FormatKey( "CTYPE", axlon + 1, -1, ' ', status ),
- (void *) &cval, AST__STRING, NULL, status );
-
- strcpy( lattype + 4, "-ZPN" );
- cval = lattype;
- SetValue( ret, FormatKey( "CTYPE", axlat + 1, -1, ' ', status ),
- (void *) &cval, AST__STRING, NULL, status );
-
-/* Check latitude then longitude axes */
- for( i = 0; i < 2; i++ ){
- iaxis = i ? axlat : axlon;
-
-/* Rewind the FitsChan. */
- astClearCard( this );
-
-/* Concatenate all the IRAF "WAT" keywords together for this axis. These
- keywords are marked as having been used, so that they are not written
- out when the FitsChan is deleted. */
- watmem = NULL;
- watlen = 1;
- j = 1;
- sprintf( keyname, "WAT%d_%.3d", iaxis + 1, j );
- while( FindKeyCard( this, keyname, method, class, status ) && astOK ) {
- wat = (char *) CardData( this, &size, status );
- watmem = (char *) astRealloc( (void *) watmem,
- watlen - 1 + size );
- if( watmem ) {
- strcpy( watmem + watlen - 1, wat );
- watlen += size - 1;
- MarkCard( this, status );
- MoveCard( this, 1, method, class, status );
- j++;
- sprintf( keyname, "WAT%d_%.3d", iaxis + 1, j );
- } else {
- break;
- }
- }
-
-/* Search the total WAT string for any projp terms. */
- if( watmem ){
- for( iproj = 0; iproj < 10 && astOK; iproj++ ) {
- sprintf( format, "projp%d=", iproj );
- start = strstr( watmem, format );
- if( start ) {
- sprintf( format, "projp%d=%%lf", iproj );
- if( astSscanf( start, format, &projp ) ){
- SetValue( ret, FormatKey( "PV", axlat + 1, iproj, ' ', status ),
- (void *) &projp, AST__FLOAT,
- "ZPN projection parameter", status );
- }
- }
- }
-
-/* See if the WAT string contains any lngcor or latcor terms. If so, add
- warning keywords to the FitsChan. */
- if( ( strstr( watmem, "lngcor" ) ||
- strstr( watmem, "latcor" ) ) ){
- Warn( this, "zpn", "This FITS header includes, or was "
- "derived from, a ZPN projection which requires "
- "unsupported IRAF-specific corrections (lngcor "
- "and/or latcor). The WCS information may therefore "
- "be incorrect.", method, class, status );
- }
-
-/* Release the memory used to hold the concatenated WAT keywords. */
- watmem = (char *) astFree( (void *) watmem );
- }
- }
-
-/* IRAF "TNX" projections
- --------------------- */
- } else if( s == ' ' && !Ustrcmp( prj, "-TNX", status ) ) {
-
-/* Replace TNX with TPN in the CTYPE values. */
- strcpy( lontype + 4, "-TPN" );
- cval = lontype;
- SetValue( ret, FormatKey( "CTYPE", axlon + 1, -1, ' ', status ),
- (void *) &cval, AST__STRING, NULL, status );
-
- strcpy( lattype + 4, "-TPN" );
- cval = lattype;
- SetValue( ret, FormatKey( "CTYPE", axlat + 1, -1, ' ', status ),
- (void *) &cval, AST__STRING, NULL, status );
-
-/* Check latitude then longitude axes */
- for( i = 0; i < 2; i++ ){
- iaxis = i ? axlat : axlon;
-
-/* Assume the TNX axis can be represented in FITS-WCS. */
- ok = 1;
-
-/* Rewind the FitsChan. */
- astClearCard( this );
-
-/* Concatenate all the IRAF "WAT" keywords together for this axis. These
- keywords are marked as having been used, so that they are not written
- out when the FitsChan is deleted. */
- watmem = NULL;
- watlen = 1;
- j = 1;
- sprintf( keyname, "WAT%d_%.3d", iaxis + 1, j );
- while( FindKeyCard( this, keyname, method, class, status ) && astOK ) {
- wat = (char *) CardData( this, &size, status );
- watmem = (char *) astRealloc( (void *) watmem,
- watlen - 1 + size );
- if( watmem ) {
- strcpy( watmem + watlen - 1, wat );
- watlen += size - 1;
- MarkCard( this, status );
- MoveCard( this, 1, method, class, status );
- j++;
- sprintf( keyname, "WAT%d_%.3d", iaxis + 1, j );
- } else {
- break;
- }
- }
-
-/* Search the total WAT string for any lngcor or latcor terms. */
- if( watmem ){
- start = strstr( watmem, "cor = \"" );
-
-/* If found, extract the numerical values which follow. */
- if( start ) {
- start = strstr( start, "\"" ) + 1;
- mp = 0;
- j = 0;
- nch = 0;
- porder = -1;
- while( ok && 1 == astSscanf( start, " %lf %n", (double *) &dval, &nch ) ){
-
-/* The first value gives the correction surface type. We can only handle
- type 3 (simple polynonial). */
- if( j == 0 ){
- if( dval != 3.0 ) ok = 0;
-
-/* The second and third numbers gives the orders of the polynomial in X
- and Y. We can only handle cases in which the orders are the same on
- both axes, and greater than 0 and less than 9. Store a pointer to the
- first TAN projection parameter index to use. */
- } else if( j == 1 ){
- porder = dval - 1;
-
- } else if( j == 2 ){
- if( dval - 1 != porder || dval < 0 || dval > 7 ) ok = 0;
- mp = (i?b:a) + abskip[ porder ];
-
-/* The fourth number defines the type of cross-terms. We can only handle
- type 2 (half-cross terms). */
- } else if( j == 3 ){
- if( dval != 2.0 ) ok = 0;
-
-/* The next 4 numbers describe the region of validity of the fits in
- xi and eta space, e.g. ximin, ximax, etamin, etamax. We skip over these
- since we have no means of implementing any limit on the region of
- validity. */
-
-/* The remaining terms are the coefficients of the polynomial terms. */
- } else if( j > 7 ){
-
-/* Find the index of the corresponding PV keyword. */
- m = *(mp++);
-
-/* TNX polynomials provide a "correction* to be added to the supplied X and
- Y values. Therefore increase the linear co-efficients by 1 on both
- axes. */
- if( m == 1 ) dval += 1.0;
-
-/* Store the PV value */
- SetValue( ret, FormatKey( "PV", iaxis + 1, m, ' ', status ),
- (void *) &dval, AST__FLOAT,
- "TAN projection parameter", status );
- }
-
- start += nch;
- nch = 0;
- j++;
- }
-
-/* Check that all the required co-efficients were found */
- if( porder == -1 || j != 8 + nab[ porder ] ) ok = 0;
- }
-
-/* If the TNX cannot be represented in FITS-WCS (within our restrictions), add
- warning keywords to the FitsChan. */
- if( !ok ){
- Warn( this, "tnx", "This FITS header includes, or was "
- "derived from, a TNX projection which requires "
- "unsupported IRAF-specific corrections. The WCS "
- "information may therefore be incorrect.", method, class, status );
- }
-
-/* Release the memory used to hold the concatenated WAT keywords. */
- watmem = (char *) astFree( (void *) watmem );
- }
- }
- }
-
-/* MSX CAR projections.
- ------------------- */
- if( !Ustrcmp( prj, "-CAR", status ) ) {
-
-/* If the projection is a CAR projection, check that the CRPIX value for
- the longitude axis corresponds to a projection plane point which has
- valid native longitude. The CAR projection has valid projection plane
- points only for native longitudes in the range [-180,+180, so we
- modify the CRPIX value if necessary by the number of pixels corresponding
- to 360 degres of longitude in order to bring the refernce pixel into
- the valid domain of the projection. */
- if( GetValue2( ret, this, FormatKey( "CDELT", axlon + 1, -1, s, status ),
- AST__FLOAT, (void *) &cdelti, 1, method, class, status ) &&
- GetValue2( ret, this, FormatKey( "CRPIX", axlon + 1, -1, s, status ),
- AST__FLOAT, (void *) &dval, 0, method, class, status ) ) {
- if( cdelti != 0.0 ) {
- dval = AST__DR2D*palSlaDrange( AST__DD2R*dval*cdelti )/cdelti;
- SetValue( ret, FormatKey( "CRPIX", axlon + 1, -1, s, status ),
- (void *) &dval, AST__FLOAT, CardComm( this, status ), status );
- }
- }
- }
-
-/* Replace RESTFREQ by RESTFRQ.
- ---------------------------- */
-/* Get any RESTFREQ card, marking it as read. */
- restfreq = AST__BAD;
- if( s != ' ' ) {
- sprintf( keyname, "RESTFREQ%c", s );
- } else {
- strcpy( keyname, "RESTFREQ" );
- }
- if( GetValue2( ret, this, keyname, AST__FLOAT, (void *) &dval, 0, method,
- class, status ) ){
-
-/* Look for "MHz" and "GHz" within the comment. If found scale the value
- into Hz. */
- comm = CardComm( this, status );
- if( comm ) {
- if( strstr( comm, "GHz" ) ) {
- dval *= 1.0E9;
- comm = "[Hz] Rest Frequency";
- } else if( strstr( comm, "MHz" ) ) {
- dval *= 1.0E6;
- comm = "[Hz] Rest Frequency";
- }
- }
-
-/* Save a new RESTFRQ card in the FitsChan, so long as there is not
- already one there. */
- if( s != ' ' ) {
- sprintf( keyname, "RESTFRQ%c", s );
- } else {
- strcpy( keyname, "RESTFRQ" );
- }
- if( !GetValue2( ret, this, keyname, AST__STRING, (void *) &cval, 0,
- method, class, status ) ){
- SetValue( ret, keyname, (void *) &dval, AST__FLOAT, comm, status );
- restfreq = dval;
- }
- }
-
-/* Translate AIPS spectral CTYPE values to FITS-WCS paper III equivalents.
- These are of the form AAAA-BBB, where "AAAA" can be "FREQ", "VELO" (=VRAD!)
- or "FELO" (=VOPT-F2W), and BBB can be "LSR", "LSD", "HEL" (=*Bary*centric!)
- or "GEO". Also convert "LAMBDA" to "WAVE". */
- for( j = 0; j < naxis; j++ ) {
- if( GetValue2( ret, this, FormatKey( "CTYPE", j + 1, -1, s, status ),
- AST__STRING, (void *) &cval, 0, method,
- class, status ) ){
- if( IsAIPSSpectral( cval, &astype, &assys, status ) ) {
- SetValue( ret, FormatKey( "CTYPE", j + 1, -1, ' ', status ),
- (void *) &astype, AST__STRING, NULL, status );
- SetValue( ret, "SPECSYS", (void *) &assys, AST__STRING, NULL, status );
- break;
- } else if( !strcmp( cval, "LAMBDA " ) ) {
- cval = "WAVE";
- SetValue( ret, FormatKey( "CTYPE", j + 1, -1, ' ', status ),
- (void *) &cval, AST__STRING, NULL, status );
- break;
- }
- }
- }
-
-/* Common case insensitive CUNIT values: "Hz", "Angstrom", "km/s", "M/S" */
- if( s != ' ' ) {
- sprintf( template, "CUNIT%%d%c", s );
- } else {
- strcpy( template, "CUNIT%d" );
- }
- if( astKeyFields( this, template, 1, &jhi, &jlo ) ){
-
-/* Convert keyword indices from 1-based to 0-base, and loop round them all. */
- jhi--;
- jlo--;
- for( j = jlo; j <= jhi; j++ ){
- char *keynam;
- keynam = FormatKey( "CUNIT", j + 1, -1, s, status );
- if( GetValue2( ret, this, keynam, AST__STRING, (void *) &cval, 0,
- method, class, status ) ){
- size_t nc = astChrLen( cval );
- if( nc == 0 ) {
- cval = NULL;
- } else if( !Ustrncmp( cval, "Hz", nc, status ) ) {
- cval = "Hz";
- } else if( !Ustrncmp( cval, "Angstrom", nc, status ) ) {
- cval = "Angstrom";
- } else if( !Ustrncmp( cval, "km/s", nc, status ) ) {
- cval = "km/s";
- } else if( !Ustrncmp( cval, "m/s", nc, status ) ) {
- cval = "m/s";
- } else {
- cval = NULL;
- }
- if( cval ) SetValue( ret, keynam, (void *) &cval, AST__STRING, NULL, status );
- }
- }
- }
-
-/* After doing the primary axis descriptions, prepare to do the "A"
- description. */
- if( s == ' ' ) s = 'A' - 1;
- }
-
-/* IRAF mini-WCS keywords
- ---------------------- */
-/* Rewind the FitsChan to search from the first card. */
- astClearCard( this );
-
-/* Search forward through until all cards have been checked. */
- while( !astFitsEof( this ) && astOK ){
-
-/* Check to see if the keyword name from the current card matches
- any of the known mini-WCS keywords. If so, mark the card as read. */
- if( Match( CardName( this, status ), "WAT%d_%d", 0, NULL, &m, method, class, status ) ||
- Match( CardName( this, status ), "LTM%d_%d", 0, NULL, &m, method, class, status ) ||
- Match( CardName( this, status ), "LTV%d", 0, NULL, &m, method, class, status ) ||
- Match( CardName( this, status ), "WSV%d_LEN", 0, NULL, &m, method, class, status ) ||
- Match( CardName( this, status ), "WSV%d_%d", 0, NULL, &m, method, class, status ) ){
- MarkCard( this, status );
- }
-
-/* Now move the current card on to the next card. */
- MoveCard( this, 1, method, class, status );
- }
-
-/* Delete the returned FitsChan if it is empty. */
- if( ret && !astGetNcard( ret ) ) ret = (AstFitsChan *) astDelete( ret );
-
-/* Return. */
- return ret;
-}
-
-int Split( const char *card, char **name, char **value,
- char **comment, const char *method, const char *class, int *status ){
-/*
-* Name:
-* Split
-
-* Purpose:
-* Extract the keyword name, value and comment from a FITS header card.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int Split( const char *card, char **name, char **value,
-* char **comment, const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* The name, value and comment (if present) are extracted from the
-* supplied card text and returned.
-
-* Parameters:
-* card
-* Pointer to a string holding the FITS header card.
-* name
-* Pointer to a location at which to return the pointer to a string
-* holding the keyword name.
-* value
-* Pointer to a location at which to return the pointer to a string
-* holding the keyword value.
-* comment
-* Pointer to a location at which to return the pointer to a string
-* holding the keyword comment.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned value:
-* - An integer identifying the data type of the keyword value. This
-* will be one of the values AST__UNDEF, AST__COMMENT, AST__INT,
-* AST__STRING, AST__CONTINUE, AST__FLOAT, AST__COMPLEXI or AST__COMPLEXF
-* defined in fitschan.h.
-
-* Notes:
-* - If the keyword value is a string, then the returned value does not
-* include the delimiting quotes, and pairs of adjacent quotes within the
-* string are replaced by single quotes.
-* - A maximum of 80 characters are read from the supplied card, so the
-* string does not need to be null terminated unless less than 80
-* characters are to be read.
-* - The memory holding the three strings "name", "value" and "comment"
-* should be released when no longer needed using astFree.
-* - NULL pointers and a data type of AST__COMMENT are returned if an
-* error has already occurred, or if this function fails for any reason.
-*/
-
-/* Local Variables: */
- char *c; /* Pointer to returned comment string */
- char *dd; /* Pointer to intermediate character */
- char *slash; /* Pointer to comment character */
- char *v; /* Pointer to returned value string */
- const char *d; /* Pointer to first comment character */
- const char *v0; /* Pointer to first non-blank value character */
- double fi, fr; /* Values read from value string */
- int blank_name; /* Is keyword name blank? */
- int cont; /* Is this a continuation card? */
- int i; /* Character index */
- int ii, ir; /* Values read from value string */
- int iopt; /* Index of option within list */
- int lq; /* Was previous character an escaping quote? */
- int len; /* Used length of value string */
- int nch; /* No. of characters used */
- int ndig; /* No. of digits in the formatted integer */
- int type; /* Keyword data type */
- size_t nc; /* Number of character in the supplied card */
- size_t ncc; /* No. of characters in the comment string */
- size_t ncv; /* No. of characters in the value string */
-
-/* Initialise the returned pointers. */
- *name = NULL;
- *value = NULL;
- *comment = NULL;
- type = AST__COMMENT;
-
-/* Check the global status. */
- if( !astOK ) return type;
-
-/* Store the number of characters to be read from the supplied card. This
- is not allowed to be more than the length of a FITS header card.
- Trailing white space and non-printing characters such as new-line are
- ignored. */
- nc = 0;
- while( nc < AST__FITSCHAN_FITSCARDLEN && card[ nc ] ) nc++;
-
-/* Allocate memory for a copy of the keyword name plus a terminating
- null character. */
- *name = (char *) astMalloc( ( 1 + FITSNAMLEN )*sizeof(char) );
-
-/* Check the pointer can be used. */
- if( astOK ){
-
-/* Initialise the name string by filling it with spaces, and terminating it. */
- for( i = 0; i < FITSNAMLEN; i++ ) (*name)[ i ] = ' ';
- (*name)[ FITSNAMLEN ] = 0;
-
-/* Copy the the keyword name, ensuring that no more than FITSNAMLEN (8)
- characters are copied. */
- strncpy( *name, card, ( nc > FITSNAMLEN ) ? FITSNAMLEN : nc );
-
-/* If there is no keyword name, flag that we have a blank name which will
- be treated as a comment card. */
- if( strspn( *name, " " ) == strlen( *name ) ){
- blank_name = 1;
-
-/* If the card contains a keyword name, replace any white space with
- nulls. */
- } else {
- blank_name = 0;
- dd = *name + strlen( *name ) - 1;
- while( isspace( *dd ) ) *(dd--) = 0;
- }
-
-/* Check the keyword name is legal. */
- CheckFitsName( *name, method, class, status );
-
-/* Allocate memory to hold the keyword value and comment strings. */
- *value = (char *) astMalloc( sizeof(char)*( 2 + nc ) );
- *comment = (char *) astMalloc( sizeof(char)*( 1 + nc ) );
-
-/* Check the pointers can be used. */
- if( astOK ){
-
-/* Check for CONTINUE cards. These have keyword CONTINUE but have a space
- instead of an equals sign in column 9. They must also have a single quote
- in column 11. */
- cont = ( !Ustrcmp( *name, "CONTINUE", status ) &&
- nc > FITSNAMLEN + 3 &&
- card[ FITSNAMLEN ] == ' ' &&
- card[ FITSNAMLEN + 2 ] == '\'' );
-
-/* If column 9 does not contain an equals sign (but is not a CONTINUE card), or if
- the keyword is "HISTORY", "COMMENT" or blank, then columns 9 to the end are
- comment characters, and the value string is null. */
- if( ( nc <= FITSNAMLEN || card[ FITSNAMLEN ] != '='
- || !Ustrcmp( *name, "HISTORY", status )
- || !Ustrcmp( *name, "COMMENT", status )
- || blank_name ) && !cont ){
- (*value)[ 0 ] = 0;
- if( nc > FITSNAMLEN ){
- (void) strncpy( *comment, card + FITSNAMLEN,
- nc - FITSNAMLEN );
- (*comment)[ nc - FITSNAMLEN ] = 0;
- } else {
- (*comment)[ 0 ] = 0;
- }
-
-/* Otherwise there is a value field. */
- } else {
-
-/* Find the first non-blank character in the value string. */
- v0 = card + FITSNAMLEN + 1;
- while( (size_t)(v0 - card) < nc &&
- isspace( (int) *v0 ) ) v0++;
-
-/* Store pointers to the start of the returned value and comment strings. */
- v = *value;
- c = *comment;
-
-/* If the first character in the value string is a single quote, the value is
- a string. In this case the value ends at the first non-escaped single
- quote. */
- if( *v0 == '\''){
- type = cont ? AST__CONTINUE : AST__STRING;
-
-/* We want to copy the string value, without the delimiting quotes, to the
- returned value string. Single quotes within the string are represented
- by two adjacent quotes, so we also need to check for these and replace
- them by one quote in the returned string. First initialise a pointer
- to the first character after the opening quote, and set a flag
- indicating that (for the purposes of identifying pairs of adjacent
- quotes within the string) the previous character was not a quote. */
- d = v0 + 1;
- lq = 0;
-
-/* Loop round each remaining character in the supplied card. */
- while( (size_t)(d - card) < nc ){
-
-/* If the current character is a single quote... */
- if( *d == '\'' ){
-
-/* If the previous character was also a single quote then the quote does
- not mark the end of the string, but is a quote to be included literally
- in the value. Copy the quote to the returned string and clear the flag
- to indicate that the pair of adjacent quotes is now complete. */
- if( lq ){
- *(v++) = '\'';
- lq = 0;
-
-/* If the last character was not a quote, then set the flag for the next
- pass through the loop, but do not copy the quote to the returned string
- since it will either be a quote escaping a following adjacent quote, or
- a quote to mark the end of the string. */
- } else {
- lq = 1;
- }
-
-/* If the current character is not a quote... */
- } else {
-
-/* If the previous character was a quote, then we have found a single
- isolated quote which therefore marks the end of the string value.
- The pointer "d" is left pointing to the first character
- after the terminating quote. */
- if( lq ){
- break;
-
-/* If the last character was not a quote, copy it to the returned string. */
- } else {
- *(v++) = *d;
- }
- }
- d++;
- }
-
-/* Terminate the returned value string. */
- *v = 0;
-
-/* Now deal with logical and numerical values. */
- } else {
-
-/* The end of the value field is marked by the first "/". Find the number
- of characters in the value field. Pointer "d" is left pointing to the
- first character in the comment (if any). Only use "/" characters which
- occur within the first nc characters. */
- d = strchr( card, '/' );
- if( !d || ( d - card ) >= nc ){
- ncv = nc - FITSNAMLEN - 1;
- d = NULL;
- } else {
- ncv = (size_t)( d - card ) - FITSNAMLEN - 1;
- }
-
-/* Copy the value string to the returned string. */
- if( ncv == 0 ){
- *v = 0;
- } else {
- strncpy( v, card + FITSNAMLEN + 1, ncv );
- v[ ncv ] = ' ';
- v[ ncv + 1 ] = 0;
- }
-
-/* Find the first non-blank character in the value string. */
- v0 = v;
- while( *v0 && isspace( (int) *v0 ) ) v0++;
-
-/* See if the value string is one of the following strings (optionally
- abbreviated and case insensitive): YES, NO, TRUE, FALSE. */
- iopt = FullForm( "YES NO TRUE FALSE", v0, 1, status );
-
-/* Return the single character "T" or "F" at the start of the value string
- if the value matches one of the above strings. */
- if( iopt == 0 || iopt == 2 ) {
- type = AST__LOGICAL;
- strcpy ( v, "T" );
-
- } else if( iopt == 1 || iopt == 3 ) {
- type = AST__LOGICAL;
- strcpy ( v, "F" );
-
-/* If it does not match, see if the value is numerical. */
- } else {
-
-/* Save the length of the value string excluding trailing blanks. */
- len = ChrLen( v, status );
-
-/* If the entire string is blank, the value type is UNDEF. */
- if( len == 0 ) {
- type = AST__UNDEF;
-
-/* If there are no dots (decimal points) or exponents (D or E) in the value... */
- } else if( !strpbrk( v, ".EeDd" ) ){
-
-/* First attempt to read two integers from the string (separated by white
- space). */
- if( nch = 0,
- ( 2 == astSscanf( v, " %d %d%n", &ir, &ii, &nch ) ) &&
- ( nch >= len ) ) {
- type = AST__COMPLEXI;
-
-/* If that failed, attempt to read a single integer from the string. */
- } else if( nch = 0,
- ( 1 == astSscanf( v, " %d%n", &ir, &nch ) ) &&
- ( nch >= len ) ) {
- type = AST__INT;
- }
-
-/* If there are dots (decimal points) in the value... */
- } else {
-
-/* First attempt to read two doubles from the string (separated by white
- space). */
- if( nch = 0,
- ( 2 == astSscanf( v, " %lf %lf%n", &fr, &fi, &nch ) ) &&
- ( nch >= len ) ) {
- type = AST__COMPLEXF;
-
-/* If that failed, attempt to read a single double from the string. */
- } else if( nch = 0,
- ( 1 == astSscanf( v, " %lf%n", &fr, &nch ) ) &&
- ( nch >= len ) ) {
- type = AST__FLOAT;
- }
-
-/* If both the above failed, it could be because the string contains a
- "D" exponent (which is probably valid FITS) instead of an "E" exponent.
- Replace any "D" in the string with "e" and try again. */
- if( type == AST__COMMENT && astOK ) {
-
-/* Replace "d" and "D" by "e" (if this doesn't produce a readable floating
- point value then the value string will not be used, so it is safe to
- do the replacement in situ). */
- for( i = 0; i < len; i++ ) {
- if( v[ i ] == 'd' || v[ i ] == 'D' ) v[ i ] = 'e';
- }
-
-/* Attempt to read two doubles from the edited string (separated by white
- space). */
- if( nch = 0,
- ( 2 == astSscanf( v, " %lf %lf%n", &fr, &fi, &nch ) ) &&
- ( nch >= len ) ) {
- type = AST__COMPLEXF;
-
-/* If that failed, attempt to read a single double from the edited string. */
- } else if( nch = 0,
- ( 1 == astSscanf( v, " %lf%n", &fr, &nch ) ) &&
- ( nch >= len ) ) {
- type = AST__FLOAT;
- }
- }
- }
- }
-
-/* If the value type could not be determined report an error. */
- if( type == AST__COMMENT && astOK ) {
- astError( AST__BDFTS, "%s(%s): Illegal keyword value "
- "supplied.", status, method, class );
- }
- }
-
-/* Find the number of characters in the comment. Pointer "d" should point to
- the first character following the value string. */
- if( d ){
- ncc = nc - (size_t)( d - card );
- } else {
- ncc = 0;
- }
-
-/* Copy the remainder of the card to the returned comment string. */
- if( astOK && ncc > 0 ){
- strncpy( c, d, ncc );
- c[ ncc ] = 0;
-
-/* Find the start of the comment (indicated by the first "/" after the
- value string). */
- slash = strchr( c, '/' );
-
-/* Temporarily terminate the string at the slash. */
- if( slash ) *slash = 0;
-
-/* Shuffle the characters following the slash down to the
- start of the returned string. */
- if( slash ){
- ncc -= (size_t)( slash - c ) + 1;
- d = slash + 1;
- for( i = 0; i < 1 + (int) ncc; i++ ) *(c++) = *(d++);
- }
-
-/* If there is no comment string, return a null string. */
- } else {
- *c = 0;
- }
- }
- }
- }
-
-/* Truncate the returned string to avoid wasting space. */
- if( *name ) *name = (char *) astRealloc( (void *) *name, strlen( *name ) + 1 );
- if( *comment ) *comment = (char *) astRealloc( (void *) *comment, strlen( *comment ) + 1 );
- if( *value ) *value = (char *) astRealloc( (void *) *value, strlen( *value ) + 1 );
-
-/* If the value is deemed to be integer, check that the number of digits
- in the formatted value does not exceed the capacity of an int. This may
- be the case if there are too many digits in the integer for an "int" to
- hold. In this case, change the data type to float. */
- if( *value && type == AST__INT ) {
- ndig = 0;
- c = *value;
- while( *c ) {
- if( isdigit( *(c++) ) ) ndig++;
- }
-
- if( ndig >= int_dig ) type = AST__FLOAT;
- }
-
-
-/* If an error occurred, free the returned strings and issue a context
- message. */
- if( !astOK ){
- *name = (char *) astFree( (void *) *name );
- *value = (char *) astFree( (void *) *value );
- *comment = (char *) astFree( (void *) *comment );
- type = AST__COMMENT;
-
- astError( astStatus, "%s(%s): Unable to store the following FITS "
- "header card:\n%s\n", status, method, class, card );
- }
-
-/* Return the data type. */
- return type;
-
-}
-
-static int SplitMap( AstMapping *map, int invert, int ilon, int ilat,
- AstMapping **map1, AstWcsMap **map2, AstMapping **map3, int *status ){
-/*
-* Name:
-* SplitMap
-
-* Purpose:
-* Locate a WCS projection within a Mapping.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* int SplitMap( AstMapping *map, int invert, int ilon, int ilat,
-* AstMapping **map1, AstWcsMap **map2, AstMapping **map3, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* If possible, the supplied Mapping is decomposed into three component
-* mappings to be compounded in series. To be acceptable, the second of
-* these three Mappings must be an inverted WcsMap, and there must not
-* be a WcsMap in either of the other two Mappings. If it is not
-* possible to produce such a group of three Mappings, then a zero
-* function value is returned, together with three NULL Mapping
-* pointers. All the mappings before the WcsMap are compounded
-* together and returned as "map1". The inverse of the WcsMap itself is
-* returned as "map2", and any remaining Mappings are compounded together
-* and returned as "map3".
-*
-* The search algorithm allows for an arbitrary combination of series and
-* parallel CmpMaps.
-
-* Parameters:
-* map
-* A pointer to the Mapping from pixel to physical coordinates.
-* invert
-* The value of the Invert attribute to use with "map" (the value
-* returned by astGetInvert is not used).
-* ilon
-* Index of mapping output which is connected to the longitude axis.
-* ilat
-* Index of mapping output which is connected to the latitude axis.
-* map1
-* A location at which to return a pointer to the Mapping from pixel
-* to intermediate world coordinates.
-* map2
-* A location at which to return a pointer to the Mapping from intermediate
-* world coordinates to native spherical coordinates. This will
-* be an inverted WcsMap.
-* map3
-* A location at which to return a pointer to the Mapping from
-* native spherical coordinates to physical coordinates.
-* dep
-* The address of an integer holding the current depth of recursion
-* into this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a WcsMap was found, zero otherwise.
-
-* Notes:
-* - The returned Mappings contain independant copies of the relevant
-* components of the supplied Mapping and can be modified without
-* changing the supplied Mapping.
-* - NULL pointers will be returned for all Mappings if no WcsMap
-* can be found in the supplied Mapping.
-* - A pointer to a UnitMap will be returned for map1 if no mappings
-* exist before the WcsMap.
-* - A pointer to a UnitMap will be returned for map3 if no mappings
-* exist after the WcsMap.
-* - NULL pointers will be returned for all Mappings and a function
-* value of zero will be returned if an error has occurred, or if this
-* function should fail for any reason.
-
-*/
-
-/* Local Variables */
- AstFitsChan *fc; /* Pointer to temporary FitsChan */
- AstFrameSet *tfs; /* Temporary FrameSet */
- AstMapping *mapa; /* Pre-wcs Mapping */
- AstMapping *mapc; /* Post-wcs Mapping */
- AstMapping *tmap1; /* Temporary Mapping */
- AstMapping *tmap2; /* Temporary Mapping */
- AstPointSet *pset1; /* Pixel positions */
- AstPointSet *pset2; /* WCS positions */
- AstWcsMap *mapb; /* WcsMap */
- char card[ AST__FITSCHAN_FITSCARDLEN + 1 ]; /* Buffer for header card */
- double **ptr1; /* Pointer to pixel axis values */
- double **ptr2; /* Pointer to WCS axis values */
- double *iwc_origin; /* Array holding IWC at pixel origin */
- double *pix_origin; /* Array holding pixel coords at pixel origin */
- double *w1; /* Pointer to work space */
- int i; /* Loop index */
- int npix; /* Number of pixel axes */
- int nwcs; /* Number of WCS axes */
- int ret; /* Was a non-linear Mapping found? */
-
-/* Initialise */
- *map1 = NULL;
- *map2 = NULL;
- *map3 = NULL;
- ret = 0;
-
-/* Check the global status. */
- if( !astOK ) return ret;
-
-/* Call SplitMap2 to do the work. SplitMap2 does not check that the
- WcsMap is an *inverted* WcsMap, neither does it check that there
- are no WcsMaps in either map1 or map3. */
- if( SplitMap2( map, invert, map1, map2, map3, status ) ) {
-
-/* Check that the WcsMap is inverted. */
- if( astGetInvert( *map2 ) ) {
-
-/* Check that map 1 does not contain a WcsMap. */
- if( !SplitMap2( *map1, astGetInvert( *map1 ), &mapa, &mapb, &mapc, status ) ) {
-
-/* Check that map 3 does not contain a WcsMap. */
- if( !SplitMap2( *map3, astGetInvert( *map3 ), &mapa, &mapb, &mapc, status ) ) {
-
-/* If so, the three Mappings are OK. */
- ret = 1;
-
- } else {
- mapa = astAnnul( mapa );
- mapb = astAnnul( mapb );
- mapc = astAnnul( mapc );
- }
-
- } else {
- mapa = astAnnul( mapa );
- mapb = astAnnul( mapb );
- mapc = astAnnul( mapc );
- }
- }
- }
-
-/* If the above failed to find a suitable WcsMap, we now consider cases
- where the pixel->WCS mapping is linear. We can invent a CAR projection
- WcsMap for such cases. We use a ShiftMap to move the origin of the
- longitude IWC axis to a sensible value (it is left at zero otherwise).
- We cannot do this with the latitude axis since pre-FITS-WCS fits
- readers could not handle the resulting rotation from native to celestial
- coords. */
- if( !ret && astGetIsLinear( map ) ) {
- nwcs = astGetNout( map );
- npix = astGetNin( map );
- iwc_origin = astMalloc( sizeof( double )*nwcs );
- pix_origin = astMalloc( sizeof( double )*npix );
-
- if( astOK ) {
-
- for( i = 0; i < npix; i++ ) pix_origin[ i ] = 0.0;
- astTranN( map, 1, npix, 1, pix_origin, 1, nwcs, 1, iwc_origin );
-
- for( i = 0; i < nwcs; i++ ) {
- if( i != ilon ) {
- iwc_origin[ i ] = 0.0;
- } else {
- iwc_origin[ i ] *= -1;
- }
- }
- mapa = (AstMapping *) astShiftMap( nwcs, iwc_origin, "", status );
-
- *map1 = (AstMapping *) astCmpMap( map, mapa, 1, "", status );
- *map2 = astWcsMap( nwcs, AST__CAR, ilon + 1, ilat + 1, "Invert=1", status );
-
- astInvert( mapa );
- *map3 = astClone( mapa );
-
- mapa = astAnnul( mapa );
- ret = 1;
- }
-
- iwc_origin = astFree( iwc_origin );
- pix_origin = astFree( pix_origin );
- }
-
-/* If the above failed to find a suitable WcsMap, we now consider cases
- where the output (long,lat) values are constants supplied by a
- final PermMap. We can invent a WcsMap for such cases. */
- if( !ret ) {
-
-/* Transform two arbitrary pixel positions into the WCS Frame. */
- npix = astGetNin( map );
- nwcs = astGetNout( map );
- pset1 = astPointSet( 2, npix, "", status );
- pset2 = astPointSet( 2, nwcs, "", status );
- ptr1 = astGetPoints( pset1 );
- ptr2 = astGetPoints( pset2 );
- w1 = astMalloc( sizeof( double )*(size_t) nwcs );
- if( astOK ) {
- for( i = 0; i < npix; i++ ) {
- ptr1[ i ][ 0 ] = 1.0;
- ptr1[ i ][ 1 ] = 1000.0;
- }
- (void) astTransform( map, pset1, 1, pset2 );
-
-/* If the two wcs positions have equal longitude and latitude values,
- assume that the output longitude and latitude axes are assigned
- constant values by the Mapping. */
- if( ptr2[ ilon ][ 0 ] == ptr2[ ilon ][ 1 ] &&
- ptr2[ ilon ][ 0 ] != AST__BAD &&
- ptr2[ ilat ][ 0 ] == ptr2[ ilat ][ 1 ] &&
- ptr2[ ilat ][ 0 ] != AST__BAD ) {
-
-/* Create a set of Mappings to return, including a WcsMap, which result in
- these constant latitude and longitude values. We do this by creating a
- FITS-WCS header and reading the FrameSet from it. Keywords which are not
- important to the final mappings are given arbitrary values. */
- fc = astFitsChan( NULL, NULL, "", status );
- for( i = 0; i < nwcs; i++ ) {
- sprintf( card, "CRPIX%d = 0", i + 1 );
- astPutFits( fc, card, 0 );
- sprintf( card, "CDELT%d = 0.0003", i + 1 );
- astPutFits( fc, card, 0 );
- if( i == ilon ) {
- sprintf( card, "CTYPE%d = 'RA---TAN'", i + 1 );
- } else if( i == ilat ) {
- sprintf( card, "CTYPE%d = 'DEC--TAN'", i + 1 );
- } else {
- sprintf( card, "CTYPE%d = 'DUMMY'", i + 1 );
- }
- astPutFits( fc, card, 0 );
-
- if( i == ilon ) {
- sprintf( card, "CRVAL%d = %.*g", i + 1, DBL_DIG, AST__DR2D*ptr2[ ilon ][ 0 ] );
- } else if( i == ilat ) {
- sprintf( card, "CRVAL%d = %.*g", i + 1, DBL_DIG, AST__DR2D*ptr2[ ilat ][ 0 ] );
- } else {
- sprintf( card, "CRVAL%d = 0.0", i + 1 );
- }
- astPutFits( fc, card, 0 );
- }
-
- astClearCard( fc );
- tfs = astRead( fc );
- if( tfs ) {
-
-/* Use SplitMap to get the required Mapings from the FrameSet. */
- tmap2 = astGetMapping( tfs, AST__BASE, AST__CURRENT );
- SplitMap( tmap2, astGetInvert( tmap2 ), 0, 1, &tmap1, map2,
- map3, status );
- tmap1 = astAnnul( tmap1 );
- tmap2 = astAnnul( tmap2 );
-
-/* Create a ShiftMap which subtract the constant longitude and latitude
- values off the inputs. */
- for( i = 0; i < nwcs; i++ ) w1[ i ] = 0.0;
- w1[ ilon ] = -ptr2[ ilon ][ 0 ];
- w1[ ilat ] = -ptr2[ ilat ][ 0 ];
-
- tmap1 = (AstMapping *) astShiftMap( nwcs, w1, "", status );
-
-/* Compose this with the supplied Mapping. This results in the celestial
- outputs being zero. This gives the required "map1". */
- *map1 = (AstMapping *) astCmpMap( map, tmap1, 1, "", status );
-
-/* Indicate success.*/
- ret = 1;
-
-/* Free resources. */
- tmap1 = astAnnul( tmap1 );
- tfs = astAnnul( tfs );
- }
- fc = astAnnul( fc );
- }
- }
-
-/* Free resources */
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
- w1 = astFree( w1 );
-
- }
-
- if( !ret ) {
- if( *map1 ) *map1 = astAnnul( *map1 );
- if( *map2 ) *map2 = astAnnul( *map2 );
- if( *map3 ) *map3 = astAnnul( *map3 );
- }
-
- return ret;
-}
-
-static int SplitMap2( AstMapping *map, int invert, AstMapping **map1,
- AstWcsMap **map2, AstMapping **map3, int *status ){
-/*
-* Name:
-* SplitMap2
-
-* Purpose:
-* Locate a WCS projection within a Mapping.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* int SplitMap2( AstMapping *map, int invert, AstMapping **map1,
-* AstWcsMap **map2, AstMapping **map3, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* If possible, the supplied Mapping is decomposed into three component
-* mappings to be compounded in series. To be acceptable, the second of
-* these three Mappings must be a WcsMap. If it is not possible to produce
-* such a group of three Mappings, then a zero function value is returned,
-* together with three NULL Mapping pointers. All the mappings before the
-* WcsMap are compounded together and returned as "map1". The WcsMap itself
-* is returned as "map2", and any remaining Mappings are compounded together
-* and returned as "map3".
-*
-* The search algorithm allows for an arbitrary combination of series and
-* parallel CmpMaps.
-
-* Parameters:
-* map
-* A pointer to the Mapping from pixel to physical coordinates.
-* invert
-* The value of the Invert attribute to use with "map" (the value
-* returned by astGetInvert is not used).
-* map1
-* A location at which to return a pointer to the Mapping from pixel
-* to intermediate world coordinates.
-* map2
-* A location at which to return a pointer to the Mapping from relative
-* physical coordinates to native spherical coordinates. This will
-* be a WcsMap.
-* map3
-* A location at which to return a pointer to the Mapping from
-* native spherical coordinates to physical coordinates.
-* dep
-* The address of an integer holding the current depth of recursion
-* into this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a WcsMap was found, zero otherwise.
-
-* Notes:
-* - The returned Mappings contain independant copies of the relevant
-* components of the supplied Mapping and can be modified without
-* changing the supplied Mapping.
-* - NULL pointers will be returned for all Mappings if no WcsMap
-* can be found in the supplied Mapping.
-* - A pointer to a UnitMap will be returned for map1 if no mappings
-* exist before the WcsMap.
-* - A pointer to a UnitMap will be returned for map3 if no mappings
-* exist after the WcsMap.
-* - NULL pointers will be returned for all Mappings and a function
-* value of zero will be returned if an error has occurred, or if this
-* function should fail for any reason.
-
-*/
-
-/* Local Variables */
- AstMapping **map_list; /* Mapping array pointer */
- AstMapping *mapa; /* Pre-wcs Mapping */
- AstWcsMap *mapb; /* WcsMap */
- AstMapping *mapc; /* Post-wcs Mapping */
- AstMapping *temp; /* Intermediate Mapping */
- const char *class; /* Pointer to class of supplied Mapping */
- double pv; /* Projection parameter value */
- int *invert_list; /* Invert array pointer */
- int axis; /* No. of axes in whole Mapping */
- int axlat; /* Index of latitude axis */
- int axlon; /* Index of longitude axis */
- int haswcs; /* Was a usable inverted WcsMap found? */
- int imap; /* Index of current Mapping in list */
- int i; /* axis index */
- int m; /* Parameter index */
- int nax; /* No. of axes in Mapping */
- int nmap; /* Number of Mappings in the list */
- int ret; /* Was a non-linear Mapping found? */
- int wcsaxis; /* Index of first WcsMap axis */
-
-/* Initialise */
- *map1 = NULL;
- *map2 = NULL;
- *map3 = NULL;
- ret = 0;
-
-/* Check the global status. */
- if( !astOK ) return ret;
-
-/* Get the class of the Mapping. */
- class = astGetClass( map );
-
-/* If the supplied Mapping is a CmpMap... */
- wcsaxis = -1;
- if( !strcmp( class, "CmpMap" ) ){
-
-/* Decompose the Mapping into a sequence of Mappings to be applied in
- series and an associated list of Invert flags. */
- map_list = NULL;
- invert_list = NULL;
- nmap = 0;
- astMapList( map, 1, invert, &nmap, &map_list, &invert_list );
-
-/* If there is more than one Mapping, this must be a series CmpMap. */
- if( nmap > 1 && astOK ){
-
-/* Initialise the returned pre-wcs Mapping to be a UnitMap. */
- if( invert == astGetInvert( map ) ){
- *map1 = (AstMapping *) astUnitMap( astGetNin( map ), "", status );
- } else {
- *map1 = (AstMapping *) astUnitMap( astGetNout( map ), "", status );
- }
-
-/* Indicate we have not yet found a WcsMap. */
- ret = 0;
-
-/* Process each series Mapping. */
- for( imap = 0; imap < nmap; imap++ ){
-
-/* If we have not yet found a WcsMap... */
- if( !ret ){
-
-/* Search this Mapping for a WcsMap. */
- ret = SplitMap2( map_list[ imap ], invert_list[ imap ], &mapa,
- map2, map3, status );
-
-/* If no WcsMap was found, use the whole mapping as part of the
- pre-wcs Mapping. */
- if( !ret ){
- mapa = astCopy( map_list[ imap ] );
- astSetInvert( mapa, invert_list[ imap ] );
- }
-
-/* Add the pre-wcs mapping to the cumulative pre-wcs CmpMap. */
- temp = (AstMapping *) astCmpMap( *map1, mapa, 1, "", status );
- *map1 = astAnnul( *map1 );
- mapa = astAnnul( mapa );
- *map1 = temp;
-
-/* If we have previously found a WcsMap, use the whole mapping
- as part of the post-wcs mapping. */
- } else {
- mapc = astCopy( map_list[ imap ] );
- astSetInvert( mapc, invert_list[ imap ] );
-
- temp = (AstMapping *) astCmpMap( *map3, mapc, 1, "", status );
- *map3 = astAnnul( *map3 );
- mapc = astAnnul( mapc );
- *map3 = temp;
- }
- }
-
-/* If there is only one Mapping, this must be a parallel CmpMap. */
- } else {
-
-/* Annul the Mapping pointer in the series list created above, and free the
- dynamic arrays. */
- map_list[ 0 ] = astAnnul( map_list[ 0 ] );
- map_list = astFree( map_list );
- invert_list = astFree( invert_list );
- nmap = 0;
-
-/* Decompose the Mapping into a sequence of Mappings to be applied in
- parallel and an associated list of Invert flags. */
- astMapList( map, 0, invert, &nmap, &map_list, &invert_list );
-
-/* Process each parallel Mapping. */
- axis = 0;
- for( imap = 0; imap < nmap && astOK; imap++ ){
-
-/* See if this Mapping contains a usable WcsMap. Only do the search
- if no such WcsMap has already been found, since only the first is usable. */
- if( !ret ) {
-
-/* Search this Mapping for a WcsMap. */
- haswcs = SplitMap2( map_list[ imap ], invert_list[ imap ], &mapa,
- &mapb, &mapc, status );
-
-/* Note if we have found a usable WcsMap, and its first axis index. */
- if( haswcs ){
- ret = 1;
- wcsaxis = axis;
- }
-
-/* If a WcsMap has already been found, the mapping cannot contain a
- usable WcsMap. */
- } else {
- haswcs = 0;
- }
-
-/* If the Mapping did not contain a usable WcsMap, use the whole mapping as
- part of the pre-wcs Mapping, and create a UnitMap as part of the post-wcs
- mapping. */
- if( !haswcs ){
- mapa = astCopy( map_list[ imap ] );
- astSetInvert( mapa, invert_list[ imap ] );
- nax = astGetNout( mapa );
- mapc = (AstMapping *) astUnitMap( nax, "", status );
- }
-
-/* Increment the index of the first axis in the next Mapping. */
- axis += astGetNout( mapa );
-
-/* Add the pre-wcs mapping in parallel with the cumulative pre-wcs CmpMap. */
- if( *map1 ){
- temp = (AstMapping *) astCmpMap( *map1, mapa, 0, "", status );
- *map1 = astAnnul( *map1 );
- mapa = astAnnul( mapa );
- *map1 = temp;
- } else {
- *map1 = mapa;
- }
-
-/* Add the post-wcs mapping in parallel with the cumulative post-wcs CmpMap. */
- if( *map3 ){
- temp = (AstMapping *) astCmpMap( *map3, mapc, 0, "", status );
- *map3 = astAnnul( *map3 );
- mapc = astAnnul( mapc );
- *map3 = temp;
- } else {
- *map3 = mapc;
- }
-
- }
-
-/* If a usable WcsMap was found, create a new one which has all the same
- properties, but with enough axes to join the pre and post wcs Mappings
- together. Ensure the correct axes are used for longitude and latitude,
- and copy the projection parameters. */
- if( ret ){
- axlat = astGetWcsAxis( mapb, 1 );
- axlon = astGetWcsAxis( mapb, 0 );
- *map2 = astWcsMap( axis, astGetWcsType( mapb ),
- axlon + wcsaxis + 1,
- axlat + wcsaxis + 1, "", status );
- for( i = 0; i < astGetNin( mapb ); i++ ){
- for( m = 0; m < WCSLIB_MXPAR; m++ ){
- if( astTestPV( mapb, i, m ) ) {
- pv = astGetPV( mapb, i, m );
- if( pv != AST__BAD ) astSetPV( *map2, i + wcsaxis, m, pv );
- }
- }
- }
- astInvert( *map2 );
- mapb = astAnnul( mapb );
- }
- }
-
-/* Loop to annul all the Mapping pointers in the list. */
- for ( imap = 0; imap < nmap; imap++ ) map_list[ imap ] = astAnnul( map_list[ imap ] );
-
-/* Free the dynamic arrays. */
- map_list = astFree( map_list );
- invert_list = astFree( invert_list );
-
-/* If the supplied Mapping is not a CmpMap, see if it is a WcsMap. If so,
- take a copy and set its invert attribute correctly. Also create UnitMaps
- for the pre and post wcs mappings. */
- } else if( !strcmp( class, "WcsMap" ) ){
- ret = 1;
- nax = astGetNin( map );
- *map1 = (AstMapping *) astUnitMap( nax, "", status );
- *map2 = astCopy( map );
- astSetInvert( *map2, invert );
- *map3 = (AstMapping *) astUnitMap( nax, "", status );
- }
-
-/* If an error has occurred, or if no WcsMap was found, annul any Mappings. */
- if( !astOK || !ret ){
- ret = 0;
- if( *map1 ) *map1 = astAnnul( *map1 );
- if( *map2 ) *map2 = astAnnul( *map2 );
- if( *map3 ) *map3 = astAnnul( *map3 );
- }
-
-/* Return the answer. */
- return ret;
-
-}
-
-static int SplitMat( int naxis, double *matrix, double *cdelt, int *status ){
-/*
-* Name:
-* SplitMat
-
-* Purpose:
-* Factorises a single "CD"-style matrix into a diagonal CDELT matrix
-* and a "PC"-style matrix.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* int SplitMat( int naxis, double *matrix, double *cdelt, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* This function splits up the supplied CD matrix into separate PC and
-* CDELT matrices. The product of the returned matrices (CDELT.PC)
-* equals the supplied CD matrix. The CDELT values are chosen so that
-* the corresponding row of the PC matrix represents a unit vector.
-* The signs of the CDELT values are chosen so that the diagonal terms
-* of the PC matrix are all positive.
-*
-* Parameters:
-* naxis
-* The number of axes.
-* matrix
-* A pointer to an array of naxis*naxis elements. On entry this holds
-* the "CD" matrix. On exit, it is modified to represent the "PC"
-* matrix.
-* cdelt
-* A pointer to an array of naxis elements. On exit this holds the CDELT
-* values for each axis (i.e. the diagonal terms of the CDELT matrix).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero is returned if any bad values are found in the supplied
-* matrix, or if an error has already occurred. One is returned otherwise.
-
-*/
-
-/* Local Variables: */
- int i;
- int j;
- int ok;
- double *a;
- int dineg;
- double s2;
- double cdlt;
-
-/* Check the inherited status. */
- if( !astOK ) return 0;
-
-/* Assume success. */
- ok = 1;
-
-/* Loop round every row in the matrix. Get a pointer to the first element
- in the row. */
- for( i = 0; i < naxis; i++ ){
- a = matrix + i*naxis;
-
-/* Note the sign of the diagonal term (i.e. the i'th element) of this row. */
- dineg = ( a[ i ] < 0.0 );
-
-/* Get the magnitude of the vector represented by this row. This is the
- CDELT value for the row. BAD values cause the whole function to return. */
- s2 = 0.0;
- for( j = 0; j < naxis; j++ ){
- if( *a == AST__BAD ) {
- ok = 0;
- break;
- }
- s2 += (*a)*(*a);
- a++;
- }
-
- if( !ok ) break;
- cdlt = sqrt( MAX( 0.0, s2 ) );
-
-/* If the diagonal term for this row of the matrix is negative, make
- the CDELT value negative instead. This means that the diagonal term in
- the final PC matrix will be positive. */
- if( dineg ) cdlt = -cdlt;
-
-/* Store the CDELT value. */
- cdelt[ i ] = cdlt;
-
-/* The row of the PC matrix is obtained by dividing the original row by
- the CDELT value. Set to zero any PC values which are less than 1.0E-7
- (such values may be produced by rounding errors). */
- a = matrix + i*naxis;
- for( j = 0; j < naxis; j++ ) {
-
- if( cdlt != 0.0 ){
- *a /= cdlt;
- if( fabs( *a ) < 1.E-7 ) *a = 0.0;
- } else {
- *a = 0.0;
- }
-
- a++;
- }
- }
-
- return ok;
-
-}
-
-static double TDBConv( double mjd, int timescale, int fromTDB,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* TDBConv
-
-* Purpose:
-* Convert an MJD between the TDB time scale and another timescale.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* double TDBConv( double mjd, int timescale, int fromTDB,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* This function converts the supplied mjd value to or from the TDB
-* timescale.
-
-* Parameters:
-* mjd
-* The input MJD value.
-* timescale
-* The other timescale.
-* fromTDB
-* Indicates the direction of the required conversion. If non-zero,
-* the supplied "mjd" value should be in the TDB timescale, and the
-* returned value will be in the timescale specified by "timescale".
-* Indicates the direction of the required conversion. If zero,
-* the supplied "mjd" value should be in the timescale specified by
-* "timescale", and the returned value will be in the TDB timescale.
-* method
-* The calling method. Used only in error messages.
-* class
-* The object class. Used only in error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The converted MJD value, or AST__BAD if an error occurs.
-
-*/
-
-/* Local Variables: */
- AstFrameSet *fs; /* Mapping from supplied timescale to TDB */
- double ret; /* The returned value */
-
-/* Initialise */
- ret = AST__BAD;
-
-/* Check inherited status */
- if( !astOK ) return ret;
-
-/* Return the supplied value if no conversion is needed. */
- if( timescale == AST__TDB ) {
- ret = mjd;
-
-/* Otherwise, do the conversion. */
- } else {
-
-/* Lock the timeframes for use by the current thread, waiting if they are
- currently locked by another thread. */
- astManageLock( timeframe, AST__LOCK, 1, NULL );
- astManageLock( tdbframe, AST__LOCK, 1, NULL );
-
-/* Set the required timescale. */
- astSetTimeScale( timeframe, timescale );
-
-/* Get the Mapping between the two timescales, and use it to convert the
- suipplied value. */
- fs = astConvert( tdbframe, timeframe, "" );
- astTran1( fs, 1, &mjd, fromTDB, &ret );
- fs = astAnnul( fs );
-
-/* Unlock the timeframes. */
- astManageLock( timeframe, AST__UNLOCK, 1, NULL );
- astManageLock( tdbframe, AST__UNLOCK, 1, NULL );
- }
-
-/* Return the result */
- return ret;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a FitsChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* FitsChan member function (over-rides the astTestAttrib protected
-* method inherited from the Channel class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a FitsChan's attributes.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFitsChan *this; /* Pointer to the FitsChan structure */
- int result; /* Result value to return */
- int len; /* Length of attrib string */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the FitsChan structure. */
- this = (AstFitsChan *) this_object;
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Card. */
-/* ----- */
- if ( !strcmp( attrib, "card" ) ) {
- result = astTestCard( this );
-
-/* Encoding. */
-/* --------- */
- } else if ( !strcmp( attrib, "encoding" ) ) {
- result = astTestEncoding( this );
-
-/* FitsDigits. */
-/* ----------- */
- } else if ( !strcmp( attrib, "fitsdigits" ) ) {
- result = astTestFitsDigits( this );
-
-/* DefB1950. */
-/* --------- */
- } else if ( !strcmp( attrib, "defb1950" ) ) {
- result = astTestDefB1950( this );
-
-/* CDMatrix. */
-/* --------- */
- } else if ( !strcmp( attrib, "cdmatrix" ) ) {
- result = astTestCDMatrix( this );
-
-/* CarLin. */
-/* --------- */
- } else if ( !strcmp( attrib, "carlin" ) ) {
- result = astTestCarLin( this );
-
-/* Iwc. */
-/* ---- */
- } else if ( !strcmp( attrib, "iwc" ) ) {
- result = astTestIwc( this );
-
-/* Clean. */
-/* ------ */
- } else if ( !strcmp( attrib, "clean" ) ) {
- result = astTestClean( this );
-
-/* Warnings. */
-/* -------- */
- } else if ( !strcmp( attrib, "warnings" ) ) {
- result = astTestWarnings( this );
-
-/* If the name is not recognised, test if it matches any of the
- read-only attributes of this class. If it does, then return
- zero. */
- } else if ( !strcmp( attrib, "ncard" ) ||
- !strcmp( attrib, "allwarnings" ) ){
- result = 0;
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static int TestCard( AstFitsChan *this, int *status ){
-/*
-*+
-* Name:
-* astTestCard
-
-* Purpose:
-* Test the Card attribute.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int astTestCard( AstFitsChan *this )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-* This function tests the Card attribute for the supplied FitsChan.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-
-* Returned Value:
-* If the Card attribute has its "cleared" value (i.e. if the first card
-* in the FitsChan will be the next one to be read), then zero is returned,
-* otherwise 1 is returned.
-
-*-
-*/
-
-/* Local Variables: */
- int card; /* The original value of Card */
- int ret; /* The returned flag */
-
-/* Ensure the source function has been called */
- ReadFromSource( this, status );
-
-/* Get the current value of Card. */
- card = astGetCard( this );
-
-/* Temporarily clear Card. */
- astClearCard( this );
-
-/* See if the original Card is equal to the cleared card, and set the
- returned flag appropriately. Re-instate the original value of card is
- required.*/
- if( astGetCard( this ) == card ) {
- ret = 0;
- } else {
- astSetCard( this, card );
- ret = 1;
- }
-
-/* Return the flag. */
- return ret;
-
-}
-
-static int TestFits( AstFitsChan *this, const char *name, int *there,
- int *status ){
-/*
-*++
-* Name:
-c astTestFits
-f AST_TESTFITS
-
-* Purpose:
-* See if a named keyword has a defined value in a FitsChan.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "fitschan.h"
-c int astTestFits( AstFitsChan *this, const char *name, int *there )
-f RESULT = AST_TESTFITS( THIS, NAME, THERE, STATUS )
-
-* Class Membership:
-* FitsChan method.
-
-* Description:
-* This function serches for a named keyword in a FitsChan. If found,
-* and if the keyword has a value associated with it, a
-c non-zero
-f .TRUE.
-* value is returned. If the keyword is not found, or if it does not
-* have an associated value, a
-c zero
-f .FALSE.
-* value is returned.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the FitsChan.
-c name
-f NAME = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated character string
-f A character string
-* containing the FITS keyword name. This may be a complete FITS
-* header card, in which case the keyword to use is extracted from
-* it. No more than 80 characters are read from this string.
-c there
-f THERE = LOGICAL (Returned)
-c Pointer to an integer which will be returned holding a non-zero
-c value if the keyword was found in the header, and zero otherwise.
-f A value of .TRUE. will be returned if the keyword was found in the
-f header, and .FALSE. otherwise.
-* This parameter allows a distinction to be made between the case
-* where a keyword is not present, and the case where a keyword is
-* present but has no associated value.
-c A NULL pointer may be supplied if this information is not
-c required.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astTestFits()
-f AST_TESTFITS = LOGICAL
-* A value of zero
-f .FALSE.
-* is returned if the keyword was not found in the FitsChan or has
-* no associated value. Otherwise, a value of
-c one
-f .TRUE.
-* is returned.
-
-* Notes:
-* - The current card is left unchanged by this function.
-* - The card following the current card is checked first. If this is
-* not the required card, then the rest of the FitsChan is searched,
-* starting with the first card added to the FitsChan. Therefore cards
-* should be accessed in the order they are stored in the FitsChan (if
-* possible) as this will minimise the time spent searching for cards.
-* - An error will be reported if the keyword name does not conform
-* to FITS requirements.
-c - Zero
-f - .FALSE.
-* is returned as the function value if an error has already occurred,
-* or if this function should fail for any reason.
-*--
-*/
-
-
-/* Local Variables: */
- const char *class; /* Object class */
- const char *method; /* Calling method */
- char *lcom; /* Supplied keyword comment */
- char *lname; /* Supplied keyword name */
- char *lvalue; /* Supplied keyword value */
- int icard; /* Current card index on entry */
- int ret; /* The returned value */
-
-/* Initialise */
- if( there ) *there = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Ensure the source function has been called */
- ReadFromSource( this, status );
-
-/* Store the calling method and object class. */
- method = "astTestFits";
- class = astGetClass( this );
-
-/* Initialise the returned value. */
- ret = 0;
-
-/* Extract the keyword name from the supplied string. */
- (void) Split( name, &lname, &lvalue, &lcom, method, class, status );
-
-/* Store the current card index. */
- icard = astGetCard( this );
-
-/* Attempt to find a card in the FitsChan refering to this keyword,
- and make it the current card. Only proceed if a card was found. */
- if( SearchCard( this, lname, method, class, status ) ){
-
-/* Indicate the card has been found. */
- if( there ) *there = 1;
-
-/* If the cards data type is no undefined, return 1. */
- if( CardType( this, status ) != AST__UNDEF ) ret = 1;
-
- }
-
-/* Re-instate the original current card index. */
- astSetCard( this, icard );
-
-/* Release the memory used to hold keyword name, value and comment strings. */
- lname = (char *) astFree( (void *) lname );
- lvalue = (char *) astFree( (void *) lvalue );
- lcom = (char *) astFree( (void *) lcom );
-
-/* Return the answer. */
- return ret;
-}
-
-static AstTimeScaleType TimeSysToAst( AstFitsChan *this, const char *timesys,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* TimeSysToAst
-
-* Purpose:
-* Convert a FITS TIMESYS value to an AST TimeFrame timescale value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* AstTimeScaleType TimeSysToAst( AstFitsChan *this, const char *timesys,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* This function returns the value used by the AST TimeFrame class to
-* represent the timescale specified by the "timesys" parameter, which
-* should hold the value of a FITS TIMESYS keyword. The TIMESYS
-* convention was introduced as part of the Y2K DATE-OBS changes, and
-* is not currently part of the published FITS-WCS conventions.
-*
-* If the requested timescale is not supported by AST, then a warning is
-* added to the FitsChan and a value of AST__UTC is returned (but no
-* error is reported).
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* timesys
-* Pointer to the string holding the TIMESYS value.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The equivalent AstTimeScaleType value.
-
-*/
-
-/* Local Variables: */
- AstTimeScaleType result; /* The returned timescale */
- char buf[ 200 ]; /* Buffer for warning message */
-
-/* Initialise */
- result = AST__UTC;
-
-/* Check the inherited status. */
- if( !astOK ) return result;
-
- if( !strcmp( timesys, "UTC" ) ) {
- result = AST__UTC;
-
- } else if( !strcmp( timesys, "UT" ) ) {
- result = AST__UTC;
- Warn( this, "badval", "The original FITS header contained a value of UT "
- "for keyword TIMESYS which is being interpreted as UTC.", method,
- class, status );
-
- } else if( !strcmp( timesys, "TAI" ) ) {
- result = AST__TAI;
-
- } else if( !strcmp( timesys, "IAT" ) ) {
- result = AST__TAI;
-
- } else if( !strcmp( timesys, "ET" ) ) {
- result = AST__TT;
- Warn( this, "badval", "The original FITS header contained a value of ET "
- "for keyword TIMESYS. TT will be used instead.", method, class, status );
-
- } else if( !strcmp( timesys, "TT" ) ) {
- result = AST__TT;
-
- } else if( !strcmp( timesys, "TDT" ) ) {
- result = AST__TT;
-
- } else if( !strcmp( timesys, "TDB" ) ) {
- result = AST__TDB;
-
- } else if( !strcmp( timesys, "TCG" ) ) {
- result = AST__TCG;
-
- } else if( !strcmp( timesys, "TCB" ) ) {
- result = AST__TCB;
-
- } else {
- result = AST__UTC;
- sprintf( buf, "The original FITS header contained a value of %s for "
- "keyword TIMESYS. AST does not support this timescale so "
- "UTC will be used instead.", timesys );
- Warn( this, "badval", buf, method, class, status );
- }
-
-/* Return the result */
- return result;
-}
-
-static char *UnPreQuote( const char *string, int *status ) {
-/*
-* Name:
-* UnPreQuote
-
-* Purpose:
-* Reverse the pre-quoting of FITS character data.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* char *UnPreQuote( const char *string, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function reverses the effect of the PreQuote function on a
-* string (apart from any loss of data due to truncation). It
-* should be used to recover the original character data from the
-* pre-quoted version of a string retrieved from a FITS character
-* value associated with a keyword.
-
-* Parameters:
-* string
-* Pointer to a constant null-terminated string containing the
-* pre-quoted character data.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a dynamically allocated null-terminated string
-* containing the un-quoted character data. The memory holding this
-* string should be freed by the caller (using astFree) when no
-* longer required.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked wth the global error status set, or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- char *result; /* Pointer value to return */
- int i1; /* Offset of first useful character */
- int i2; /* Offest of last useful character */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise to use the first and last characters in the input
- string. */
- i1 = 0;
- i2 = strlen( string ) - 1;
-
-/* If the string contains at least 2 characters, check if the first
- and last characters are double quotes ("). If so, adjust the
- offsets to exclude them. */
- if ( ( i2 > i1 ) &&
- ( string[ i1 ] == '"' ) && ( string[ i2 ] == '"' ) ) {
- i1++;
- i2--;
- }
-
-/* Make a dynamically allocated copy of the useful part of the
- string. */
- result = astString( string + i1, i2 - i1 + 1 );
-
-/* Return the answer. */
- return result;
-
-}
-
-static int Use( AstFitsChan *this, int set, int helpful, int *status ) {
-/*
-* Name:
-* Use
-
-* Purpose:
-* Decide whether to write a value to a FitsChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int Use( AstFitsChan *this, int set, int helpful, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function decides whether a value supplied by a class "Dump"
-* function, via a call to one of the astWrite... protected
-* methods, should actually be written to a FitsChan.
-*
-* This decision is based on the settings of the "set" and
-* "helpful" flags supplied to the astWrite... method, plus the
-* attribute settings of the FitsChan.
-
-* Parameters:
-* this
-* A pointer to the FitsChan.
-* set
-* The "set" flag supplied.
-* helpful
-* The "helpful" value supplied.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the value should be written out, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- int full; /* Full attribute value */
- int result; /* Result value to be returned */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* If "set" is non-zero, then so is the result ("set" values must
- always be written out). */
- result = ( set != 0 );
-
-/* Otherwise, obtain the value of the FitsChan's Full attribute. */
- if ( !set ) {
- full = astGetFull( this );
-
-/* If Full is positive, display all values, if zero, display only
- "helpful" values, if negative, display no (un-"set") values. */
- if ( astOK ) result = ( ( helpful && ( full > -1 ) ) || ( full > 0 ) );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int Ustrcmp( const char *a, const char *b, int *status ){
-/*
-* Name:
-* Ustrcmp
-
-* Purpose:
-* A case blind version of strcmp.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int Ustrcmp( const char *a, const char *b, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* Returns 0 if there are no differences between the two strings, and 1
-* otherwise. Comparisons are case blind.
-
-* Parameters:
-* a
-* Pointer to first string.
-* b
-* Pointer to second string.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero if the strings match, otherwise one.
-
-* Notes:
-* - This function does not consider the sign of the difference between
-* the two strings, whereas "strcmp" does.
-* - This function attempts to execute even if an error has occurred.
-
-*/
-
-/* Local Variables: */
- const char *aa; /* Pointer to next "a" character */
- const char *bb; /* Pointer to next "b" character */
- int ret; /* Returned value */
-
-/* Initialise the returned value to indicate that the strings match. */
- ret = 0;
-
-/* Initialise pointers to the start of each string. */
- aa = a;
- bb = b;
-
-/* Loop round each character. */
- while( 1 ){
-
-/* We leave the loop if either of the strings has been exhausted. */
- if( !(*aa ) || !(*bb) ){
-
-/* If one of the strings has not been exhausted, indicate that the
- strings are different. */
- if( *aa || *bb ) ret = 1;
-
-/* Break out of the loop. */
- break;
-
-/* If neither string has been exhausted, convert the next characters to
- upper case and compare them, incrementing the pointers to the next
- characters at the same time. If they are different, break out of the
- loop. */
- } else {
-
- if( toupper( (int) *(aa++) ) != toupper( (int) *(bb++) ) ){
- ret = 1;
- break;
- }
-
- }
-
- }
-
-/* Return the result. */
- return ret;
-
-}
-
-static int Ustrncmp( const char *a, const char *b, size_t n, int *status ){
-/*
-* Name:
-* Ustrncmp
-
-* Purpose:
-* A case blind version of strncmp.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int Ustrncmp( const char *a, const char *b, size_t n, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* Returns 0 if there are no differences between the first "n"
-* characters of the two strings, and 1 otherwise. Comparisons are
-* case blind.
-
-* Parameters:
-* a
-* Pointer to first string.
-* b
-* Pointer to second string.
-* n
-* The maximum number of characters to compare.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero if the strings match, otherwise one.
-
-* Notes:
-* - This function does not consider the sign of the difference between
-* the two strings, whereas "strncmp" does.
-* - This function attempts to execute even if an error has occurred.
-
-*/
-
-/* Local Variables: */
- const char *aa; /* Pointer to next "a" character */
- const char *bb; /* Pointer to next "b" character */
- int i; /* Character index */
- int ret; /* Returned value */
-
-/* Initialise the returned value to indicate that the strings match. */
- ret = 0;
-
-/* Initialise pointers to the start of each string. */
- aa = a;
- bb = b;
-
-/* Compare up to "n" characters. */
- for( i = 0; i < (int) n; i++ ){
-
-/* We leave the loop if either of the strings has been exhausted. */
- if( !(*aa ) || !(*bb) ){
-
-/* If one of the strings has not been exhausted, indicate that the
- strings are different. */
- if( *aa || *bb ) ret = 1;
-
-/* Break out of the loop. */
- break;
-
-/* If neither string has been exhausted, convert the next characters to
- upper case and compare them, incrementing the pointers to the next
- characters at the same time. If they are different, break out of the
- loop. */
- } else {
-
- if( toupper( (int) *(aa++) ) != toupper( (int) *(bb++) ) ){
- ret = 1;
- break;
- }
-
- }
-
- }
-
-/* Return the result. */
- return ret;
-
-}
-
-static void Warn( AstFitsChan *this, const char *condition, const char *text,
- const char*method, const char *class, int *status ){
-/*
-* Name:
-* Warn
-
-* Purpose:
-* Store warning cards in a FitsChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int Warn( AstFitsChan *this, const char *condition, const char *text,
-* const char*method, const char *class, int *status );
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* If the Warnings attribute indicates that occurences of the specified
-* condition should be reported, the supplied text is split into lines
-* and stored in the FitsChan as a series of ASTWARN cards, in front
-* of the current card. If the specified condition is not being reported,
-* this function returns without action.
-
-* Parameters:
-* this
-* The FitsChan. If NULL, this function returns without action.
-* condition
-* Pointer to a string holding a lower case condition name.
-* text
-* Pointer to a string holding the text of the warning.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- char buff[ AST__FITSCHAN_FITSCARDLEN + 1 ]; /* Buffer for new card text */
- const char *a; /* Pointer to 1st character in next card */
- const char *b; /* Pointer to terminating null character */
- const char *c; /* Pointer to last character in next card */
- int exists; /* Has the supplied warning already been issued? */
- int icard; /* Index of original card */
- int nc; /* No. of characters in next card */
-
-/* Check the inherited status, warning text, FitsChan and Clean attribute. */
- if( !astOK || !text || !text[0] || !this || astGetClean( this ) ) return;
-
-/* Ignore the warning if the supplied condition is not contained within
- the list of conditions to be reported in this way (given by the
- Warnings attribute). */
- if( FullForm( astGetWarnings( this ), condition, 0, status ) >= 0 ){
-
-/* If found, store the warning in the parent Channel structure. */
- astAddWarning( this, 1, text, method, status );
-
-/* For historical reasons, warnings are also stored in the FitsChan as a
- set of FITS cards... First save the current card index, and rewind the
- FitsChan. */
- icard = astGetCard( this );
- astClearCard( this );
-
-/* Break the supplied text into lines and check the FitsChan to see if
- a block of adjacent ASTWARN cards with these lines already exist
- within the FitsChan. Assume they do until proven otherwise. */
- exists = 1;
- a = text;
- b = a + strlen( text );
- while( a < b ){
-
-/* Each card contains about 60 characters of the text. Get a pointer to
- the nominal last character in the next card. */
- c = a + 60;
-
-/* If this puts the last character beyond the end of the text, use the
- last character before the null as the last character in the card. */
- if( c >= b ) {
- c = b - 1;
-
-/* Otherwise, if the last character is not a space, move the last
- character backwards to the first space. This avoids breaking words
- across cards. */
- } else {
- while( !isspace( *c ) && c > a ) c--;
- }
-
-/* Copy the text into a null terminated buffer. */
- nc = c - a + 1;
- strncpy( buff, a, nc );
- buff[ nc ] = 0;
-
-/* If this is the first line, search the entire FitsChan for an ASTWARN card
- with this text. If not, indiate that the supplied text needs to be
- stored in the FitsChan, and break out of the loop. */
- if( a == text ) {
- exists = 0;
-
- while( !exists &&
- FindKeyCard( this, "ASTWARN", method, class, status ) ) {
- if( !strcmp( (const char *) CardData( this, NULL, status ), buff ) ) {
- exists = 1;
- }
- MoveCard( this, 1, method, class, status );
- }
- if( !exists ) break;
-
-/* If this is not the first line, see if the next card in the FitsChan is
- an ASTWARN card with this text. If not, indiate that the supplied text
- needs to be stored in the FitsChan, and break out of the loop. */
- } else {
- if( !strcmp( CardName( this, status ), "ASTWARN" ) &&
- !strcmp( (const char *) CardData( this, NULL, status ), buff ) ) {
- MoveCard( this, 1, method, class, status );
- } else {
- exists = 0;
- break;
- }
- }
-
-/* Set the start of the next bit of the text. */
- a = c + 1;
- }
-
-/* Reinstate the original current card index. */
- astSetCard( this, icard );
-
-/* We only add new cards to the FitsChan if they do not already exist. */
- if( !exists ) {
-
-/* Break the text into lines using the same algorithm as above, and store
- each line as a new ASTWARN card. Start with a blank ASTWARN card. */
- astSetFitsS( this, "ASTWARN", " ", NULL, 0 );
-
-/* Loop until the entire text has been written out. */
- a = text;
- b = a + strlen( text );
- while( a < b ){
-
-/* Each card contains about 60 characters of the text. Get a pointer to
- the nominal last character in the next card. */
- c = a + 60;
-
-/* If this puts the last character beyond the end of the text, use the
- last character before the null as the last character in the card. */
- if( c >= b ) {
- c = b - 1;
-
-/* Otherwise, if the last character is not a space, move the last
- character backwards to the first space. This avoids breaking words
- across cards. */
- } else {
- while( !isspace( *c ) && c > a ) c--;
- }
-
-/* Copy the text into a null terminated buffer. */
- nc = c - a + 1;
- strncpy( buff, a, nc );
- buff[ nc ] = 0;
-
-/* Store the buffer as the next card. */
- astSetFitsS( this, "ASTWARN", buff, NULL, 0 );
-
-/* Set the start of the next bit of the text. */
- a = c + 1;
- }
-
-/* Include a final blank card. */
- astSetFitsS( this, "ASTWARN", " ", NULL, 0 );
-
- }
- }
-}
-
-static AstMatrixMap *WcsCDeltMatrix( FitsStore *store, char s, int naxes,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* WcsCDeltMatrix
-
-* Purpose:
-* Create a MatrixMap representing the CDELT scaling.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* AstMatrixMap *WcsCDeltMatrix( FitsStore *store, char s, int naxes,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* A diagonal MatrixMap representing the FITS "CDELT" keywords is
-* returned.
-
-* Parameters:
-* store
-* A structure containing values for FITS keywords relating to
-* the World Coordinate System.
-* s
-* A character s identifying the co-ordinate version to use. A space
-* means use primary axis descriptions. Otherwise, it must be an
-* upper-case alphabetical characters ('A' to 'Z').
-* naxes
-* The number of intermediate world coordinate axes (WCSAXES).
-* method
-* A pointer to a string holding the name of the calling method.
-* This is used only in the construction of error messages.
-* class
-* A pointer to a string holding the class of the object being
-* read. This is used only in the construction of error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the created MatrixMap or a NULL pointer if an
-* error occurred.
-
-*/
-
-/* Local Variables: */
- AstMatrixMap *new; /* The created MatrixMap */
- double *el; /* Pointer to next matrix element */
- double *mat; /* Pointer to matrix array */
- int i; /* Pixel axis index */
-
-/* Initialise/ */
- new = NULL;
-
-/* Check the global status. */
- if ( !astOK ) return new;
-
-/* Allocate memory for the diagonal matrix elements. */
- mat = (double *) astMalloc( sizeof(double)*naxes );
- if( astOK ){
-
-/* Fill the matrix diagonal with values from the FitsStore. */
- el = mat;
- for( i = 0; i < naxes; i++ ){
-
-/* Get the CDELTi value for this axis. Missing terms can be defaulted so
- do not report an error if the required value is not present in the
- FitsStore. */
- *el = GetItem( &(store->cdelt), i, 0, s, NULL, method, class, status );
-
-/* Missing terms default to to 1.0. */
- if( *el == AST__BAD ) *el = 1.0;
-
-/* Move on to the next matrix element. */
- el++;
- }
-
-/* Create the diagional matrix. */
- new = astMatrixMap( naxes, naxes, 1, mat, "", status );
-
-/* Report an error if the inverse transformation is undefined. */
- if( !astGetTranInverse( new ) && astOK ) {
- astError( AST__BDFTS, "%s(%s): Unusable CDELT values found "
- "in the FITS-WCS header - one or more values are zero.", status, method, class );
- }
-
-/* Release the memory used to hold the matrix. */
- mat = (double *) astFree( (void *) mat );
-
- }
-
-/* If an error has occurred, attempt to annul the returned MatrixMap. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the MatrixMap. */
- return new;
-
-}
-
-static AstMapping *WcsCelestial( AstFitsChan *this, FitsStore *store, char s,
- AstFrame **frm, AstFrame *iwcfrm, double *reflon, double *reflat,
- AstSkyFrame **reffrm, const char *method, const char *class, int *status ){
-/*
-* Name:
-* WcsCelestial
-
-* Purpose:
-* Create a Mapping from intermediate world coords to celestial coords
-* as described in a FITS header.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* AstMapping *WcsCelestial( AstFitsChan *this, FitsStore *store, char s,
-* AstFrame **frm, AstFrame *iwcfrm, double *reflon, double *reflat,
-* AstSkyFrame **reffrm, const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* This function interprets the contents of the supplied FitsStore
-* structure, looking for world coordinate axes which describe positions
-* on the sky. If a pair of such longitude/latitude axes is found, a
-* Mapping is returned which transforms the corresponding intermediate
-* world coordinates to celestial world coordinates (this mapping leaves
-* any other axes unchanged). It also, modifies the supplied Frame to
-* describe the axes (again, other axes are left unchanged). If no
-* pair of celestial axes is found, a UnitMap is returned, and the
-* supplied Frame is left unchanged.
-
-* Parameters:
-* this
-* The FitsChan.
-* store
-* A structure containing information about the requested axis
-* descriptions derived from a FITS header.
-* s
-* A character identifying the co-ordinate version to use. A space
-* means use primary axis descriptions. Otherwise, it must be an
-* upper-case alphabetical characters ('A' to 'Z').
-* frm
-* The address of a location at which to store a pointer to the
-* Frame describing the world coordinate axes.
-* iwcfrm
-* A pointer to the Frame describing the intermediate world coordinate
-* axes. The properties of this Frame may be changed on exit.
-* reflon
-* Address of a location at which to return the celestial longitude
-* at the reference point. It is returned as AST__BAD if no
-* celestial coordinate frame is found.
-* reflat
-* Address of a location at which to return the celestial latitude
-* at the reference point. It is returned as AST__BAD if no
-* celestial coordinate frame is found.
-* reffrm
-* Address of a location at which to return a pointer to a SkyFrame
-* which define the reference values returned in reflon and reflat.
-* It is returned as NULL if no celestial coordinate frame is found.
-* method
-* A pointer to a string holding the name of the calling method.
-* This is used only in the construction of error messages.
-* class
-* A pointer to a string holding the class of the object being
-* read. This is used only in the construction of error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the Mapping.
-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstFrame *ofrm; /* Pointer to a Frame */
- AstMapping *map1; /* Pointer to a Mapping */
- AstMapping *map2; /* Pointer to a Mapping */
- AstMapping *map3; /* Pointer to a Mapping */
- AstMapping *map4; /* Pointer to a Mapping */
- AstMapping *ret; /* Pointer to the returned Mapping */
- AstMapping *newmap; /* Modified PIXEL->IWC Mapping */
- AstMapping *shiftmap; /* ShiftMap from IWC to PPC */
- AstSkyFrame *sfrm; /* Pointer to a SkyFrame */
- char *ctype; /* Pointer to CTYPE string */
- char *keyname; /* Pointer to keyword name string */
- char buf[300]; /* Text buffer */
- char latctype[MXCTYPELEN];/* Latitude CTYPE keyword value */
- char latkey[10]; /* Latitude CTYPE keyword name */
- char lattype[4]; /* Buffer for celestial system */
- char lonctype[MXCTYPELEN];/* Longitude CTYPE keyword value */
- char lonkey[10]; /* Longitude CTYPE keyword name */
- char lontype[4]; /* Buffer for celestial system */
- double *shifts; /* Array holding axis shifts */
- double *ina; /* Pointer to memory holding input position A */
- double *inb; /* Pointer to memory holding input position B */
- double *mat; /* Pointer to data for deg->rad scaling matrix */
- double *outa; /* Pointer to memory holding output position A */
- double *outb; /* Pointer to memory holding output position B */
- double latval; /* CRVAL for latitude axis */
- double lonval; /* CRVAL for longitude axis */
- double pv; /* Projection parameter value */
- double x0; /* IWC X at the projection fiducial point */
- double y0; /* IWC Y at the projection fiducial point */
- int *axes; /* Point to a list of axis indices */
- int axlat; /* Index of latitude physical axis */
- int axlon; /* Index of longitude physical axis */
- int gotax; /* Celestial axis found? */
- int i; /* Loop count */
- int j; /* Axis index */
- int latprj; /* Latitude projection type identifier */
- int lonprj; /* Longitude projection type identifier */
- int m; /* Parameter index */
- int mxpar_lat; /* Max. projection parameter index on lat axis */
- int mxpar_lon; /* Max. projection parameter index on lon axis */
- int naxes; /* Number of axes */
- int np; /* Max parameter index */
- int prj; /* Projection type identifier */
-
-/* Initialise the returned values. */
- ret = NULL;
- *reflon = AST__BAD;
- *reflat = AST__BAD;
- *reffrm = NULL;
-
-/* Check the global status. */
- if ( !astOK ) return ret;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Get the number of physical axes. */
- naxes = astGetNaxes( *frm );
-
-/* The first major section sees if the physical axes include a pair of
- longitude/latitude celestial axes.
- ================================================================= */
-
-/* We have not yet found any celestial axes. */
- axlon = -1;
- axlat = -1;
- latprj = AST__WCSBAD;
- lonprj = AST__WCSBAD;
- prj = AST__WCSBAD;
-
-/* First, we examine the CTYPE values in the FitsStore to determine
- which axes are the longitude and latitude axes, and what the celestial
- co-ordinate system and projection are. Loop round the physical axes,
- getting each CTYPE value. */
- for( i = 0; i < naxes && astOK; i++ ){
- keyname = FormatKey( "CTYPE", i + 1, -1, s, status );
- ctype = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
-
-/* Issue a warning if no CTYPE value was found. */
- if( !ctype ) {
- sprintf( buf, "Axis type keywords (CTYPE, etc) were not found "
- "for one or more axes in the original FITS header. These "
- "axes will be assumed to be linear." );
- Warn( this, "noctype", buf, method, class, status );
-
-/* We are looking for celestial axes. Celestial axes must have a "-" as the
- fifth character in CTYPE. */
- } else if( ctype[4] == '-' ) {
-
-/* Find the projection type as specified by the last 4 characters
- in the CTYPE keyword value. AST__WCSBAD is stored in "prj" if the
- last 4 characters do not specify a known WCS projection, but no error
- is reported. */
- prj = astWcsPrjType( ctype + 4 );
-
-/* See if this is a longitude axis (e.g. if the first 4 characters of CTYPE
- are "RA--" or "xLON" or "yzLN" ). If so, store the value of "x" or "yz"
- (or "EQU" for equatorial coordinates) in variable "type" to indicate which
- coordinate system is being used. */
- gotax = 0;
- if( !strncmp( ctype, "RA--", 4 ) ){
- strcpy( wcscelestial_type, "EQU" );
- gotax = 1;
-
- } else if( !strncmp( ctype, "AZ--", 4 ) ){
- strcpy( wcscelestial_type, "AZL" );
- gotax = 1;
-
- } else if( !strncmp( ctype + 1, "LON", 3 ) ){
- wcscelestial_type[ 0 ] = ctype[ 0 ];
- wcscelestial_type[ 1 ] = 0;
- gotax = 1;
-
- } else if( !strncmp( ctype + 2, "LN", 2 ) ){
- wcscelestial_type[ 0 ] = ctype[ 0 ];
- wcscelestial_type[ 1 ] = ctype[ 1 ];
- wcscelestial_type[ 2 ] = 0;
- gotax = 1;
- }
-
-/* If this is a longitude axis... */
- if( gotax ){
-
-/* Check that this is the first longitude axis to be found. */
- if( axlon == -1 ){
-
-/* Report an error if the projection is unknown. */
- if( prj == AST__WCSBAD ){
- astError( AST__BDFTS, "%s(%s): FITS keyword '%s' refers to "
- "an unknown projection type '%s'.", status, method, class,
- keyname, ctype + 4 );
- break;
- }
-
-/* Store the index of the longitude axis, type of longitude, etc. */
- axlon = i;
- strcpy( lontype, wcscelestial_type );
- strcpy( lonkey, keyname );
- strcpy( lonctype, ctype );
- lonprj = prj;
-
-/* If another longitude axis has already been found, report an error. */
- } else {
- astError( AST__BDFTS, "%s(%s): FITS keywords '%s' (='%s') "
- "and '%s' (='%s') both describe celestial longitude axes.", status,
- method, class, keyname, ctype, lonkey, lonctype );
- break;
- }
- }
-
-/* Do the same for the latitude axis, checking for "DEC-" and "xLAT" and
- "yzLT". */
- gotax = 0;
- if( !strncmp( ctype, "DEC-", 4 ) ){
- strcpy( wcscelestial_type, "EQU" );
- gotax = 1;
-
- } else if( !strncmp( ctype, "EL--", 4 ) ){
- strcpy( wcscelestial_type, "AZL" );
- gotax = 1;
-
- } else if( !strncmp( ctype + 1, "LAT", 3 ) ){
- wcscelestial_type[ 0 ] = ctype[ 0 ];
- wcscelestial_type[ 1 ] = 0;
- gotax = 1;
-
- } else if( !strncmp( ctype + 2, "LT", 2 ) ){
- wcscelestial_type[ 0 ] = ctype[ 0 ];
- wcscelestial_type[ 1 ] = ctype[ 1 ];
- wcscelestial_type[ 2 ] = 0;
- gotax = 1;
- }
-
- if( gotax ){
- if( axlat == -1 ){
- if( prj == AST__WCSBAD ){
- astError( AST__BDFTS, "%s(%s): FITS keyword '%s' refers to "
- "an unknown projection type '%s'.", status, method, class,
- keyname, ctype + 4 );
- break;
- }
-
- axlat = i;
- strcpy( lattype, wcscelestial_type );
- strcpy( latkey, keyname );
- strcpy( latctype, ctype );
- latprj = prj;
-
- } else {
- astError( AST__BDFTS, "%s(%s): FITS keywords '%s' (='%s') "
- "and '%s' (='%s') both describe celestial latitude axes.", status,
- method, class, keyname, ctype, latkey, latctype );
- break;
- }
- }
- }
- }
-
-/* Check the above went OK */
- if( astOK ){
-
-/* If both longitude and latitude axes were found... */
- if( axlat != -1 && axlon != -1 ){
-
-/* Report an error if they refer to different celestial coordinate systems. */
- if( strcmp( lattype, lontype ) ){
- astError( AST__BDFTS, "%s(%s): FITS keywords '%s' and '%s' "
- "indicate different celestial coordinate systems "
- "('%s' and '%s').", status, method, class, latkey, lonkey,
- latctype, lonctype );
-
-/* Otherwise report an error if longitude and latitude axes use different
- projections. */
- } else if( lonprj != latprj ){
- astError( AST__BDFTS, "%s(%s): FITS keywords '%s' and '%s' "
- "indicate different projections ('%s' and '%s').", status,
- method, class, latkey, lonkey, latctype, lonctype );
- }
-
-/* If only one axis has been provided without the other (e.g. longitude but no
- latitude), report an error. */
- } else if( axlat != -1 ){
- astError( AST__BDFTS, "%s(%s): A latitude axis ('%s') was found "
- "without a corresponding longitude axis.", status, method, class,
- latctype );
-
- } else if( axlon != -1 ){
- astError( AST__BDFTS, "%s(%s): A longitude axis ('%s') was found "
- "without a corresponding latitude axis.", status, method, class,
- lonctype );
- }
- }
-
-/* If a pair of matching celestial axes was not found, return a UnitMap
- and leave the Frame unchanged.
- ===================================================================== */
- if( axlat == -1 || axlon == -1 ) {
- ret = (AstMapping *) astUnitMap( naxes, "", status );
-
-/* The rest of this function deals with creating a Mapping from
- intermediate world coords to celestial coords, and modifying the
- Frame appropriately.
- ===================================================================== */
- } else {
-
-/* Create a MatrixMap which scales the intermediate world coordinate axes
- corresponding to the longitude and latitude axes from degrees to radians. */
- mat = (double *) astMalloc( sizeof(double)*naxes );
- if( mat ){
- for( i = 0; i < naxes; i++ ){
- if( i == axlat || i == axlon ){
- mat[ i ] = AST__DD2R;
- } else {
- mat[ i ] = 1.0;
- }
- }
- map1 = (AstMapping *) astMatrixMap( naxes, naxes, 1, mat, "", status );
- mat = (double *) astFree( (void *) mat );
-
-/* If the projection is a CAR projection, but the CarLin attribute is
- set, then we consider the CAR projection to be a simple linear mapping
- of pixel coords to celestial coords. Do this by using a WcsMap with no
- projection. All axes will then be treated as linear and non-celestial. */
- map3 = NULL;
- if( latprj == AST__CAR && astGetCarLin( this ) ) {
- map2 = (AstMapping *) astWcsMap( naxes, AST__WCSBAD, axlon + 1,
- axlat + 1, "", status );
-
-/* Now create a WinMap which adds on the CRVAL values to each axis. */
- ina = astMalloc( sizeof(double)*naxes );
- inb = astMalloc( sizeof(double)*naxes );
- outa = astMalloc( sizeof(double)*naxes );
- outb = astMalloc( sizeof(double)*naxes );
-
- if( astOK ) {
-
- for( i = 0; i < naxes; i++ ) {
- ina[ i ] = 0.0;
- inb[ i ] = 1.0;
- outa[ i ] = 0.0;
- outb[ i ] = 1.0;
- }
-
- lonval = GetItem( &(store->crval), axlon, 0, s, NULL, method, class, status );
- if( lonval != AST__BAD ) {
- *reflon = lonval*AST__DD2R;
- outa[ axlon ] += *reflon;
- outb[ axlon ] += *reflon;
- } else {
- outa[ axlon ] = AST__BAD;
- outb[ axlon ] = AST__BAD;
- }
-
- latval = GetItem( &(store->crval), axlat, 0, s, NULL, method, class, status );
- if( latval != AST__BAD ) {
- *reflat = latval*AST__DD2R;
- outa[ axlat ] += *reflat;
- outb[ axlat ] += *reflat;
- } else {
- outa[ axlat ] = AST__BAD;
- outb[ axlat ] = AST__BAD;
- }
-
- map3 = (AstMapping *) astWinMap( naxes, ina, inb, outa, outb, "", status );
-
- }
-
- ina = astFree( ina );
- inb = astFree( inb );
- outa = astFree( outa );
- outb = astFree( outb );
-
-/* Otherwise, create a WcsMap with the specified projection. The WcsMap
- is equivalent to a unit mapping for all axes other than "axlat" and
- "axlon". */
- } else {
-
-/* Get the highest index ("m" value) of any supplied PVi_m projection
- parameters (on any axes). */
- np = GetMaxJM( &(store->pv), s, status );
-
-/* Create the WcsMap */
- map2 = (AstMapping *) astWcsMap( naxes, latprj, axlon + 1,
- axlat + 1, "", status );
-
-/* If the FITS header contains any projection parameters, store them in
- the WcsMap. */
- mxpar_lat = astGetPVMax( map2, axlat );
- mxpar_lon = astGetPVMax( map2, axlon );
- for( m = 0; m <= np; m++ ){
- pv = GetItem( &(store->pv), axlat, m, s, NULL, method, class, status );
- if( pv != AST__BAD ) {
- if( m <= mxpar_lat ) {
- astSetPV( map2, axlat, m, pv );
- } else {
- sprintf( buf, "Projection parameter PV%d_%d found, "
- "but is not used by %s projections.", axlat + 1,
- m, astWcsPrjName( astGetWcsType( map2 ) ) );
- Warn( this, "badpv", buf, method, class, status );
- }
- }
-
- pv = GetItem( &(store->pv), axlon, m, s, NULL, method, class, status );
- if( pv != AST__BAD ) {
- if( m <= mxpar_lon ) {
- astSetPV( map2, axlon, m, pv );
- } else {
- sprintf( buf, "Projection parameter PV%d_%d found, "
- "but is not used by %s projections.", axlon + 1,
- m, astWcsPrjName( astGetWcsType( map2 ) ) );
- Warn( this, "badpv", buf, method, class, status );
- }
- }
- }
-
-/* Invert the WcsMap to get a DEprojection. */
- astInvert( map2 );
-
-/* Now produce a Mapping which converts the axes holding "Native Spherical
- Coords" into "Celestial Coords", leaving all other axes unchanged. */
- map3 = WcsNative( this, store, s, (AstWcsMap *) map2, -1, -1,
- method, class, status );
-
-/* Retrieve and store the reference longitude and latitude. */
- *reflon = GetItem( &(store->crval), axlon, 0, s, NULL, method, class, status );
- if( *reflon != AST__BAD ) *reflon *= AST__DD2R;
- *reflat = GetItem( &(store->crval), axlat, 0, s, NULL, method, class, status );
- if( *reflat != AST__BAD ) *reflat *= AST__DD2R;
-
- }
-
-/* If projection parameter PVi_0a for the longitude axis "i" is non-zero,
- then there is a shift of origin between Intermediate World Coords, IWC,
- (the CRPIXi values correspond to the origin of IWC), and Projection Plane
- Coords, PPC (these are the cartesian coordinates used by the WcsMap).
- This shift of origin results in the fiducial point specified by the
- CRVALi values mapping onto the pixel reference point specified by the
- CRPIXj values. In this case we need to add a Mapping which implements
- the shift of origin. Note, the AST-specific "TPN" projection cannot use
- this convention since it uses PVi_0 to hold a polynomial correction term. */
- if( astGetWcsType( map2 ) != AST__TPN &&
- astGetPV( map2, axlon, 0 ) != 0.0 ) {
-
-/* Find the projection plane coords corresponding to the fiducial point
- of the projection. This is done by using the inverse WcsMap to convert
- the native spherical coords at the fiducial point into PPC (x,y), which
- are returned in units of radians (not degrees). */
- GetFiducialPPC( (AstWcsMap *) map2, &x0, &y0, status );
- if( x0 != AST__BAD && y0 != AST__BAD ) {
-
-/* Allocate resources. */
- shifts = astMalloc( sizeof( double )*(size_t) naxes );
-
-/* Check pointers can be used safely. */
- if( astOK ) {
-
-/* Create a Mapping (a ShiftMap) from IWC to PPC. */
- for( i = 0; i < naxes; i++ ) shifts[ i ] = 0.0;
- shifts[ axlon ] = x0;
- shifts[ axlat ] = y0;
- shiftmap = (AstMapping *) astShiftMap( naxes, shifts, "", status );
-
-/* Produce a CmpMap which combines "map1" (which converts degrees to
- radians on the celestial axes) with the above ShiftMap. */
- newmap = (AstMapping *) astCmpMap( map1, shiftmap, 1, "", status );
-
-/* Annul the component Mappings and use the new one in place of map1. */
- shiftmap = astAnnul( shiftmap );
- map1 = astAnnul( map1 );
- map1 = newmap;
- }
-
-/* Free resources. */
- shifts = astFree( shifts );
- }
- }
-
-/* Now concatenate the Mappings to produce the returned Mapping. */
- map4 = (AstMapping *) astCmpMap( map1, map2, 1, "", status );
- ret = (AstMapping *) astCmpMap( map4, map3, 1, "", status );
-
-/* Annul the component Mappings. */
- map1 = astAnnul( map1 );
- map2 = astAnnul( map2 );
- map3 = astAnnul( map3 );
- map4 = astAnnul( map4 );
-
-/* We now make changes to the supplied Frame so that the longitude and
- latitude axes are described by a SkyFrame. First create an appropriate
- SkyFrame. */
- sfrm = WcsSkyFrame( this, store, s, prj, wcscelestial_type, axlon,
- axlat, method, class, status );
-
-/* The values currently stored in *reflat and *reflon are the CRVAL
- values. In some circumstances, these may not be the original values in
- the supplied header but may have been translated within the SpecTrans
- function as part of the process of translating an old unsupported
- projection (e.g. GLS) into a new supported projection (e.g. SFL).
- Since the returned RefLat and RefLon values may be used to set the
- reference position for a SpecFrame, we should return the original
- values rather than the translated values. The original values will
- have been stored (within SpecTrans) in the FitsChan as keywords
- RFVALi. If such keywords can be found, use their values in preference
- to the currently stored CRVAL values.*/
- if( GetValue( this, FormatKey( "RFVAL", axlon + 1, -1, s, status ),
- AST__FLOAT, (void *) &lonval, 0, 0, method, class, status ) &&
- GetValue( this, FormatKey( "RFVAL", axlat + 1, -1, s, status ),
- AST__FLOAT, (void *) &latval, 0, 0, method, class, status ) ) {
- *reflon = lonval*AST__DD2R;
- *reflat = latval*AST__DD2R;
- }
-
-/* Store the reflon and reflat values as the SkyRef position in the
- SkyFrame, and set SkyRefIs to "ignore" so that the SkyFrame continues
- to represent absolute celestial coords. */
- if( *reflon != AST__BAD && *reflat != AST__BAD ) {
- astSetSkyRef( sfrm, 0, *reflon );
- astSetSkyRef( sfrm, 1, *reflat );
- astSet( sfrm, "SkyRefIs=Ignored", status );
- }
-
-/* Return a clone of this SkyFrame as the reference Frame. */
- *reffrm = astClone( sfrm );
-
-/* Create a Frame by picking all the other (non-celestial) axes from the
- supplied Frame. */
- axes = astMalloc( naxes*sizeof( int ) );
- if( axes ) {
- j = 0;
- for( i = 0; i < naxes; i++ ) {
- if( i != axlat && i != axlon ) axes[ j++ ] = i;
- }
-
-/* If there were no other axes, replace the supplied Frame with the skyframe. */
- if( j == 0 ) {
- (void) astAnnul( *frm );
- *frm = (AstFrame *) astClone( sfrm );
-
-/* Otherwise pick the other axes from the supplied Frame */
- } else {
- ofrm = astPickAxes( *frm, j, axes, NULL );
-
-/* Replace the supplied Frame with a CmpFrame made up of this Frame and
- the SkyFrame. */
- (void) astAnnul( *frm );
- *frm = (AstFrame *) astCmpFrame( ofrm, sfrm, "", status );
- ofrm = astAnnul( ofrm );
- }
-
-/* Permute the axis order to put the longitude and latitude axes back in
- their original position. The SkyFrame will have the default axis
- ordering (lon=axis 0, lat = axis 1). */
- j = 0;
- for( i = 0; i < naxes; i++ ) {
- if( i == axlat ) {
- axes[ i ] = naxes - 1;
- } else if( i == axlon ) {
- axes[ i ] = naxes - 2;
- } else {
- axes[ i ] = j++;
- }
- }
- astPermAxes( *frm, axes );
-
-/* Free the axes array. */
- axes= astFree( axes );
- }
-
-/* Free resources. */
- sfrm = astAnnul( sfrm );
-
-/* Set the units in the supplied IWC Frame for the longitude and latitude
- axes. These are degrees (the conversion from degs to rads is part of
- the Mapping fronm IWC to WCS). */
- astSetUnit( iwcfrm, axlon, "deg" );
- astSetUnit( iwcfrm, axlat, "deg" );
- }
- }
-
-/* Return the result. */
- return ret;
-}
-
-static void WcsFcRead( AstFitsChan *fc, AstFitsChan *fc2, FitsStore *store,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* WcsFcRead
-
-* Purpose:
-* Extract WCS information from a supplied FitsChan using a FITSWCS
-* encoding, and store it in the supplied FitsStore.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void WcsFcRead( AstFitsChan *fc, AstFitsChan *fc2, FitsStore *store,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* A FitsStore is a structure containing a generalised represention of
-* a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-* from a set of FITS header cards (using a specified encoding), or
-* an AST FrameSet. In other words, a FitsStore is an encoding-
-* independant intermediary staging post between a FITS header and
-* an AST FrameSet.
-*
-* This function extracts FITSWCS keywords from the supplied FitsChan,
-* and stores the corresponding WCS information in the supplied FitsStore.
-
-* Parameters:
-* fc
-* Pointer to the FitsChan containing the cards read from the
-* original FITS header. This should not include any un-used
-* non-standard keywords.
-* fc2
-* Pointer to a second FitsChan. If a card read from "fc" fails to
-* be converted to its correct data type, a warning is only issued
-* if there is no card for this keyword in "fc2". "fc2" may be NULL
-* in which case a warning is always issued.
-* store
-* Pointer to the FitsStore structure.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- char buf[200]; /* Buffer for warning message */
- char *cval; /* String keyword value */
- char *keynam; /* Pointer to current keyword name */
- char s; /* Co-ordinate version character */
- double dval; /* Floating point keyword value */
- int fld[2]; /* Integer field values from keyword name */
- int jm; /* Pixel axis or projection parameter index */
- int i; /* Intermediate axis index */
- int mark; /* Non-zero if card should be removed once used */
- int nfld; /* Number of integer fields in test string */
- int ok; /* Was value converted succesfully? */
- int type; /* Keyword data type */
- int undef; /* Is an undefined keyword value acceptable? */
- void *item; /* Pointer to item to get/put */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Ensure the FitsChan is re-wound. */
- astClearCard( fc );
-
-/* Loop round all the cards in the FitsChan obtaining the keyword name for
- each card. Note, the single "=" is correct in the following "while"
- statement. */
- s = 0;
- jm = -1;
- i = -1;
- type = AST__NOTYPE;
- while( (keynam = CardName( fc, status )) ){
- item = NULL;
-
-/* Assume the card is to be consumed by the reading process. This means
- the card will be marked as used and effectively excluded from the header.
- Keywords which supply observation details that do not depend on the
- mapping from pixel to WCS axes, or on the nature of the WCS axes,
- are not removed as they may be needed for other, non-WCS related,
- purposes. */
- mark = 1;
-
-/* For most keywords, if the keyword is present in the header it must
- have a definded value. However, some keywords are read from the header
- but not actually used for anything. This is done to ensure that the
- keyword is stripped from the header. It is acceptable for such
- keywords to have an undefined value. Initialise a flag indicating that
- the next keyword read is not allowed to have an undefined value. */
- undef = 0;
-
-/* Is this a primary CRVAL keyword? */
- if( Match( keynam, "CRVAL%d", 1, fld, &nfld, method, class, status ) ){
- item = &(store->crval);
- type = AST__FLOAT;
- i = fld[ 0 ] - 1;
- jm = 0;
- s = ' ';
-
-/* Is this a secondary CRVAL keyword? */
- } else if( Match( keynam, "CRVAL%d%1c", 1, fld, &nfld, method, class, status ) ){
- item = &(store->crval);
- type = AST__FLOAT;
- i = fld[ 0 ] - 1;
- jm = 0;
- s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary CRPIX keyword? */
- } else if( Match( keynam, "CRPIX%d", 1, fld, &nfld, method, class, status ) ){
- item = &(store->crpix);
- type = AST__FLOAT;
- i = 0;
- jm = fld[ 0 ] - 1;
- s = ' ';
-
-/* Is this a secondary CRPIX keyword? */
- } else if( Match( keynam, "CRPIX%d%1c", 1, fld, &nfld, method, class, status ) ){
- item = &(store->crpix);
- type = AST__FLOAT;
- i = 0;
- jm = fld[ 0 ] - 1;
- s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary CDELT keyword? */
- } else if( Match( keynam, "CDELT%d", 1, fld, &nfld, method, class, status ) ){
- item = &(store->cdelt);
- type = AST__FLOAT;
- i = fld[ 0 ] - 1;
- jm = 0;
- s = ' ';
-
-/* Is this a secondary CDELT keyword? */
- } else if( Match( keynam, "CDELT%d%1c", 1, fld, &nfld, method, class, status ) ){
- item = &(store->cdelt);
- type = AST__FLOAT;
- i = fld[ 0 ] - 1;
- jm = 0;
- s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary CTYPE keyword? If so, store the associated comment. */
- } else if( Match( keynam, "CTYPE%d", 1, fld, &nfld, method, class, status ) ){
- item = &(store->ctype);
- type = AST__STRING;
- i = fld[ 0 ] - 1;
- jm = 0;
- s = ' ';
- SetItemC( &(store->ctype_com), i, ' ', CardComm( fc, status ), status );
-
-/* Is this a secondary CTYPE keyword? If so, store the associated comment. */
- } else if( Match( keynam, "CTYPE%d%1c", 1, fld, &nfld, method, class, status ) ){
- item = &(store->ctype);
- type = AST__STRING;
- i = fld[ 0 ] - 1;
- jm = 0;
- s = keynam[ strlen( keynam ) - 1 ];
- SetItemC( &(store->ctype_com), i, s, CardComm( fc, status ), status );
-
-/* Is this a primary CNAME keyword? */
- } else if( Match( keynam, "CNAME%d", 1, fld, &nfld, method, class, status ) ){
- item = &(store->cname);
- type = AST__STRING;
- i = fld[ 0 ] - 1;
- jm = 0;
- s = ' ';
-
-/* Is this a secondary CNAME keyword? */
- } else if( Match( keynam, "CNAME%d%1c", 1, fld, &nfld, method, class, status ) ){
- item = &(store->cname);
- type = AST__STRING;
- i = fld[ 0 ] - 1;
- jm = 0;
- s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary CUNIT keyword? */
- } else if( Match( keynam, "CUNIT%d", 1, fld, &nfld, method, class, status ) ){
- item = &(store->cunit);
- type = AST__STRING;
- i = fld[ 0 ] - 1;
- jm = 0;
- s = ' ';
-
-/* Is this a secondary CUNIT keyword? */
- } else if( Match( keynam, "CUNIT%d%1c", 1, fld, &nfld, method, class, status ) ){
- item = &(store->cunit);
- type = AST__STRING;
- i = fld[ 0 ] - 1;
- jm = 0;
- s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary PC keyword? */
- } else if( Match( keynam, "PC%d_%d", 2, fld, &nfld, method, class, status ) ){
- item = &(store->pc);
- type = AST__FLOAT;
- i = fld[ 0 ] - 1;
- jm = fld[ 1 ] - 1;
- s = ' ';
-
-/* Is this a secondary PC keyword? */
- } else if( Match( keynam, "PC%d_%d%1c", 2, fld, &nfld, method, class, status ) ){
- item = &(store->pc);
- type = AST__FLOAT;
- i = fld[ 0 ] - 1;
- jm = fld[ 1 ] - 1;
- s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary PV keyword? */
- } else if( Match( keynam, "PV%d_%d", 2, fld, &nfld, method, class, status ) ){
- item = &(store->pv);
- type = AST__FLOAT;
- i = fld[ 0 ] - 1;
- jm = fld[ 1 ];
- s = ' ';
-
-/* Is this a secondary PV keyword? */
- } else if( Match( keynam, "PV%d_%d%1c", 2, fld, &nfld, method, class, status ) ){
- item = &(store->pv);
- type = AST__FLOAT;
- i = fld[ 0 ] - 1;
- jm = fld[ 1 ];
- s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary RADESYS keyword? */
- } else if( Match( keynam, "RADESYS", 0, fld, &nfld, method, class, status ) ){
- item = &(store->radesys);
- type = AST__STRING;
- i = 0;
- jm = 0;
- s = ' ';
-
-/* Is this a secondary RADESYS keyword? */
- } else if( Match( keynam, "RADESYS%1c", 0, fld, &nfld, method, class, status ) ){
- item = &(store->radesys);
- type = AST__STRING;
- i = 0;
- jm = 0;
- s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary EQUINOX keyword? */
- } else if( Match( keynam, "EQUINOX", 0, fld, &nfld, method, class, status ) ){
- item = &(store->equinox);
- type = AST__FLOAT;
- i = 0;
- jm = 0;
- s = ' ';
-
-/* Is this a secondary EQUINOX keyword? */
- } else if( Match( keynam, "EQUINOX%1c", 0, fld, &nfld, method, class, status ) ){
- item = &(store->equinox);
- type = AST__FLOAT;
- i = 0;
- jm = 0;
- s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary LATPOLE keyword? */
- } else if( Match( keynam, "LATPOLE", 0, fld, &nfld, method, class, status ) ){
- item = &(store->latpole);
- type = AST__FLOAT;
- i = 0;
- jm = 0;
- s = ' ';
-
-/* Is this a secondary LATPOLE keyword? */
- } else if( Match( keynam, "LATPOLE%1c", 0, fld, &nfld, method, class, status ) ){
- item = &(store->latpole);
- type = AST__FLOAT;
- i = 0;
- jm = 0;
- s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary LONPOLE keyword? */
- } else if( Match( keynam, "LONPOLE", 0, fld, &nfld, method, class, status ) ){
- item = &(store->lonpole);
- type = AST__FLOAT;
- i = 0;
- jm = 0;
- s = ' ';
-
-/* Is this a secondary LONPOLE keyword? */
- } else if( Match( keynam, "LONPOLE%1c", 0, fld, &nfld, method, class, status ) ){
- item = &(store->lonpole);
- type = AST__FLOAT;
- i = 0;
- jm = 0;
- s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary WXSAXES keyword? */
- } else if( Match( keynam, "WCSAXES", 0, fld, &nfld, method, class, status ) ){
- item = &(store->wcsaxes);
- type = AST__FLOAT;
- i = 0;
- jm = 0;
- s = ' ';
-
-/* Is this a secondary WCSAXES keyword? */
- } else if( Match( keynam, "WCSAXES%1c", 0, fld, &nfld, method, class, status ) ){
- item = &(store->wcsaxes);
- type = AST__FLOAT;
- i = 0;
- jm = 0;
- s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary DUT1 keyword? */
- } else if( Match( keynam, "DUT1", 0, fld, &nfld, method, class, status ) ){
- mark = 0;
- item = &(store->dut1);
- type = AST__FLOAT;
- i = 0;
- jm = 0;
- s = ' ';
-
-/* Is this a primary MJD-OBS keyword? */
- } else if( Match( keynam, "MJD-OBS", 0, fld, &nfld, method, class, status ) ){
- mark = 0;
- item = &(store->mjdobs);
- type = AST__FLOAT;
- i = 0;
- jm = 0;
- s = ' ';
-
-/* Is this a primary WCSNAME keyword? */
- } else if( Match( keynam, "WCSNAME", 0, fld, &nfld, method, class, status ) ){
- item = &(store->wcsname);
- type = AST__STRING;
- i = 0;
- jm = 0;
- s = ' ';
-
-/* Is this a secondary WCSNAME keyword? */
- } else if( Match( keynam, "WCSNAME%1c", 0, fld, &nfld, method, class, status ) ){
- item = &(store->wcsname);
- type = AST__STRING;
- i = 0;
- jm = 0;
- s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary SPECSYS keyword? */
- } else if( Match( keynam, "SPECSYS", 0, fld, &nfld, method, class, status ) ){
- item = &(store->specsys);
- type = AST__STRING;
- i = 0;
- jm = 0;
- s = ' ';
-
-/* Is this a secondary SPECSYS keyword? */
- } else if( Match( keynam, "SPECSYS%1c", 0, fld, &nfld, method, class, status ) ){
- item = &(store->specsys);
- type = AST__STRING;
- i = 0;
- jm = 0;
- s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary SSYSSRC keyword? */
- } else if( Match( keynam, "SSYSSRC", 0, fld, &nfld, method, class, status ) ){
- item = &(store->ssyssrc);
- type = AST__STRING;
- i = 0;
- jm = 0;
- s = ' ';
-
-/* Is this a secondary SSYSSRC keyword? */
- } else if( Match( keynam, "SSYSSRC%1c", 0, fld, &nfld, method, class, status ) ){
- item = &(store->ssyssrc);
- type = AST__STRING;
- i = 0;
- jm = 0;
- s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary ZSOURCE keyword? */
- } else if( Match( keynam, "ZSOURCE", 0, fld, &nfld, method, class, status ) ){
- item = &(store->zsource);
- type = AST__FLOAT;
- i = 0;
- jm = 0;
- s = ' ';
-
-/* Is this a secondary ZSOURCE keyword? */
- } else if( Match( keynam, "ZSOURCE%1c", 0, fld, &nfld, method, class, status ) ){
- item = &(store->zsource);
- type = AST__FLOAT;
- i = 0;
- jm = 0;
- s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary VELOSYS keyword? */
- } else if( Match( keynam, "VELOSYS", 0, fld, &nfld, method, class, status ) ){
- item = &(store->velosys);
- type = AST__FLOAT;
- undef = 1;
- i = 0;
- jm = 0;
- s = ' ';
-
-/* Is this a secondary VELOSYS keyword? */
- } else if( Match( keynam, "VELOSYS%1c", 0, fld, &nfld, method, class, status ) ){
- item = &(store->velosys);
- type = AST__FLOAT;
- undef = 1;
- i = 0;
- jm = 0;
- s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary RESTFRQ keyword? */
- } else if( Match( keynam, "RESTFRQ", 0, fld, &nfld, method, class, status ) ){
- item = &(store->restfrq);
- type = AST__FLOAT;
- i = 0;
- jm = 0;
- s = ' ';
-
-/* Is this a secondary RESTFRQ keyword? */
- } else if( Match( keynam, "RESTFRQ%1c", 0, fld, &nfld, method, class, status ) ){
- item = &(store->restfrq);
- type = AST__FLOAT;
- i = 0;
- jm = 0;
- s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary RESTWAV keyword? */
- } else if( Match( keynam, "RESTWAV", 0, fld, &nfld, method, class, status ) ){
- item = &(store->restwav);
- type = AST__FLOAT;
- i = 0;
- jm = 0;
- s = ' ';
-
-/* Is this a secondary RESTWAV keyword? */
- } else if( Match( keynam, "RESTWAV%1c", 0, fld, &nfld, method, class, status ) ){
- item = &(store->restwav);
- type = AST__FLOAT;
- i = 0;
- jm = 0;
- s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary IMAGFREQ keyword? */
- } else if( Match( keynam, "IMAGFREQ", 0, fld, &nfld, method, class, status ) ){
- item = &(store->imagfreq);
- type = AST__FLOAT;
- i = 0;
- jm = 0;
- s = ' ';
-
-/* Is this a MJD-AVG keyword? */
- } else if( Match( keynam, "MJD-AVG", 0, fld, &nfld, method, class, status ) ){
- mark = 0;
- item = &(store->mjdavg);
- type = AST__FLOAT;
- i = 0;
- jm = 0;
- s = ' ';
-
-/* Is this a OBSGEO-X keyword? */
- } else if( Match( keynam, "OBSGEO-X", 0, fld, &nfld, method, class, status ) ){
- mark = 0;
- item = &(store->obsgeox);
- type = AST__FLOAT;
- i = 0;
- jm = 0;
- s = ' ';
-
-/* Is this a OBSGEO-Y keyword? */
- } else if( Match( keynam, "OBSGEO-Y", 0, fld, &nfld, method, class, status ) ){
- mark = 0;
- item = &(store->obsgeoy);
- type = AST__FLOAT;
- i = 0;
- jm = 0;
- s = ' ';
-
-/* Is this a OBSGEO-Z keyword? */
- } else if( Match( keynam, "OBSGEO-Z", 0, fld, &nfld, method, class, status ) ){
- mark = 0;
- item = &(store->obsgeoz);
- type = AST__FLOAT;
- i = 0;
- jm = 0;
- s = ' ';
-
-/* Is this a TIMESYS keyword? */
- } else if( Match( keynam, "TIMESYS", 0, fld, &nfld, method, class, status ) ){
- item = NULL;
- if( CnvValue( fc, AST__STRING, 0, &cval, method, status ) ) {
- store->timesys = TimeSysToAst( fc, cval, method, class, status );
- MarkCard( fc, status );
-
- } else {
- sprintf( buf, "The original FITS header contained a value for "
- "keyword TIMESYS which could not be converted to a "
- "character string." );
- Warn( fc, "badval", buf, method, class, status );
- }
-
-/* Following keywords are used to describe "-SIP" distortion as used by
- the SIRTF project... */
-
-/* Is this a primary A keyword? */
- } else if( Match( keynam, "A_%d_%d", 2, fld, &nfld, method, class, status ) ){
- item = &(store->asip);
- type = AST__FLOAT;
- i = fld[ 0 ];
- jm = fld[ 1 ];
- s = ' ';
-
-/* Is this a secondary A keyword? */
- } else if( Match( keynam, "A_%d_%d%1c", 2, fld, &nfld, method, class, status ) ){
- item = &(store->asip);
- type = AST__FLOAT;
- i = fld[ 0 ];
- jm = fld[ 1 ];
- s = keynam[ strlen( keynam ) - 1 ];
-
-
-/* Is this a primary B keyword? */
- } else if( Match( keynam, "B_%d_%d", 2, fld, &nfld, method, class, status ) ){
- item = &(store->bsip);
- type = AST__FLOAT;
- i = fld[ 0 ];
- jm = fld[ 1 ];
- s = ' ';
-
-/* Is this a secondary B keyword? */
- } else if( Match( keynam, "B_%d_%d%1c", 2, fld, &nfld, method, class, status ) ){
- item = &(store->bsip);
- type = AST__FLOAT;
- i = fld[ 0 ];
- jm = fld[ 1 ];
- s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary AP keyword? */
- } else if( Match( keynam, "AP_%d_%d", 2, fld, &nfld, method, class, status ) ){
- item = &(store->apsip);
- type = AST__FLOAT;
- i = fld[ 0 ];
- jm = fld[ 1 ];
- s = ' ';
-
-/* Is this a secondary AP keyword? */
- } else if( Match( keynam, "AP_%d_%d%1c", 2, fld, &nfld, method, class, status ) ){
- item = &(store->apsip);
- type = AST__FLOAT;
- i = fld[ 0 ];
- jm = fld[ 1 ];
- s = keynam[ strlen( keynam ) - 1 ];
-
-
-/* Is this a primary BP keyword? */
- } else if( Match( keynam, "BP_%d_%d", 2, fld, &nfld, method, class, status ) ){
- item = &(store->bpsip);
- type = AST__FLOAT;
- i = fld[ 0 ];
- jm = fld[ 1 ];
- s = ' ';
-
-/* Is this a secondary BP keyword? */
- } else if( Match( keynam, "BP_%d_%d%1c", 2, fld, &nfld, method, class, status ) ){
- item = &(store->bpsip);
- type = AST__FLOAT;
- i = fld[ 0 ];
- jm = fld[ 1 ];
- s = keynam[ strlen( keynam ) - 1 ];
- }
-
-/* If this keyword was recognized, store it in the FitsStore, and mark it
- as having been read. */
- if( item ){
- ok = 1;
- if( type == AST__FLOAT ){
- if( CnvValue( fc, AST__FLOAT, undef, &dval, method, status ) ) {
- SetItem( (double ****) item, i, jm, s, dval, status );
- if( mark ) MarkCard( fc, status );
- } else {
- ok = 0;
- }
- } else {
- if( CnvValue( fc, AST__STRING, undef, &cval, method, status ) ) {
- SetItemC( (char ****) item, i, s, cval, status );
- if( mark ) MarkCard( fc, status );
- } else {
- ok = 0;
- }
- }
-
-/* Issue a warning if the value could not be converted to the expected
- type. */
- if( !ok ) {
-
-/* First check that the keyword is not included in "fc2". */
- if( !HasCard( fc2, keynam, method, class, status ) ) {
- sprintf( buf, "The original FITS header contained a value for "
- "keyword %s which could not be converted to a %s.",
- keynam, ( type==AST__FLOAT ? "floating point number":
- "character string" ) );
- Warn( fc, "badval", buf, "astRead", "FitsChan", status );
- }
- }
- }
-
-/* Move on to the next card. */
- MoveCard( fc, 1, method, class, status );
-
- }
-}
-
-static int WcsFromStore( AstFitsChan *this, FitsStore *store,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* WcsFromStore
-
-* Purpose:
-* Store WCS keywords in a FitsChan using FITS-WCS encoding.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* int WcsFromStore( AstFitsChan *this, FitsStore *store,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* A FitsStore is a structure containing a generalised represention of
-* a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-* from a set of FITS header cards (using a specified encoding), or
-* an AST FrameSet. In other words, a FitsStore is an encoding-
-* independant intermediary staging post between a FITS header and
-* an AST FrameSet.
-*
-* This function copies the WCS information stored in the supplied
-* FitsStore into the supplied FitsChan, using FITS-WCS encoding.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* store
-* Pointer to the FitsStore.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A value of 1 is returned if succesfull, and zero is returned
-* otherwise.
-
-*/
-
-/* Local Variables: */
- char *comm; /* Pointer to comment string */
- char *cval; /* Pointer to string keyword value */
- char parprefix[3]; /* Prefix for projection parameter keywords */
- char combuf[80]; /* Buffer for FITS card comment */
- char s; /* Co-ordinate version character */
- char sign[2]; /* Fraction's sign character */
- char sup; /* Upper limit on s */
- char type[MXCTYPELEN];/* Buffer for CTYPE value */
- double cdl; /* CDELT value */
- double fd; /* Fraction of a day */
- double mjd99; /* MJD at start of 1999 */
- double val; /* General purpose value */
- int i; /* Axis index */
- int ihmsf[ 4 ]; /* Hour, minute, second, fractional second */
- int iymdf[ 4 ]; /* Year, month, date, fractional day */
- int j; /* Axis index */
- int jj; /* SlaLib status */
- int m; /* Parameter index */
- int maxm; /* Upper limit on m */
- int naxis; /* Value of NAXIS keyword */
- int nwcs; /* No. of WCS axes */
- int ok; /* Frame created succesfully? */
- int prj; /* Projection type */
- int ret; /* Returned value */
-
-/* Initialise */
- ret = 0;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* If the FitsChan contains a value for the NAXIS keyword, note it.
- Otherwise store -1. */
- if( !astGetFitsI( this, "NAXIS", &naxis ) ) naxis = -1;
-
-/* Find the last WCS related card. */
- FindWcs( this, 1, 1, 0, method, class, status );
-
-/* Loop round all co-ordinate versions */
- sup = GetMaxS( &(store->crval), status );
- for( s = ' '; s <= sup && astOK; s++ ){
-
-/* For alternate axes, skip this axis description if there is no CRPIX1 or
- CRVAL1 value. This avoids partial axis descriptions being written out. */
- if( s != ' ' ) {
- if( GetItem( &(store->crpix), 0, 0, s, NULL, method, class, status ) ==
- AST__BAD ||
- GetItem( &(store->crval), 0, 0, s, NULL, method, class, status ) ==
- AST__BAD ) {
- ok = 0;
- goto next;
- }
- }
-
-/* Assume the Frame can be created succesfully. */
- ok = 1;
-
-/* Save the number of wcs axes. If a value for WCSAXES has been set, or
- if the number of axes is not the same as specified in the NAXIS keyword,
- store a WCSAXES keyword. */
- val = GetItem( &(store->wcsaxes), 0, 0, s, NULL, method, class, status );
- if( val != AST__BAD ) {
- nwcs = (int) ( val + 0.5 );
- } else {
- nwcs = GetMaxJM( &(store->crpix), s, status ) + 1;
- if( nwcs != 0 && nwcs != naxis ) val = (double) nwcs;
- }
-
- if( val != AST__BAD ) {
- SetValue( this, FormatKey( "WCSAXES", -1, -1, s, status ),
- &nwcs, AST__INT, "Number of WCS axes", status );
- }
-
-/* Get and save WCSNAME. This is NOT required, so do not return if it is
- not available. If the WCS is 1-d, only store WCSNAME if its value is
- different to the CTYPE1 value. */
- cval = GetItemC( &(store->wcsname), 0, s, NULL, method, class, status );
- if( cval && nwcs == 1 ) {
- comm = GetItemC( &(store->ctype), 0, s, NULL, method, class, status );
- if( comm && Similar( comm, cval, status ) ) cval = NULL;
- }
- if( cval ) SetValue( this, FormatKey( "WCSNAME", -1, -1, s, status ), &cval,
- AST__STRING, "Reference name for the coord. frame", status );
-
-/* The prefix for projection parameters is usualy "PV". */
- strcpy( parprefix, "PV" );
-
-/* Keywords common to all axis types... */
-
-/* Get and save CRPIX for all pixel axes. These are required, so pass on
- if they are not available. */
- for( i = 0; i < nwcs; i++ ) {
- val = GetItem( &(store->crpix), 0, i, s, NULL, method, class, status );
- if( val == AST__BAD ) {
- ok = 0;
- goto next;
- }
- sprintf( combuf, "Reference pixel on axis %d", i + 1 );
- SetValue( this, FormatKey( "CRPIX", i + 1, -1, s, status ), &val, AST__FLOAT,
- combuf, status );
- }
-
-/* Get and save CRVAL for all WCS axes. These are required, so
- pass on if they are not available. */
- for( i = 0; i < nwcs; i++ ) {
- val = GetItem( &(store->crval), i, 0, s, NULL, method, class, status );
- if( val == AST__BAD ) {
- ok = 0;
- goto next;
- }
- sprintf( combuf, "Value at ref. pixel on axis %d", i + 1 );
- SetValue( this, FormatKey( "CRVAL", i + 1, -1, s, status ), &val, AST__FLOAT,
- combuf, status );
- }
-
-/* Get and save CTYPE for all WCS axes. These are required, so
- pass on if they are not available. */
- for( i = 0; i < nwcs; i++ ) {
- cval = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
- if( !cval ) {
- ok = 0;
- goto next;
- }
- comm = GetItemC( &(store->ctype_com), i, s, NULL, method, class, status );
- if( !comm ) {
- sprintf( combuf, "Type of co-ordinate on axis %d", i + 1 );
- comm = combuf;
- }
-
-/* Extract the projection type as specified by the last 4 characters
- in the CTYPE keyword value. This will be AST__WCSBAD for non-celestial
- axes. */
- prj = ( strlen( cval ) > 4 ) ? astWcsPrjType( cval + 4 ) : AST__WCSBAD;
-
-/* If the projection type is "TPN" (an AST-specific code) convert it to
- standard FITS-WCS code "TAN" and change the prefix for projection
- parameters from "PV" to "QV". AST will do the inverse conversions when
- reading such a header. Non-AST software will simply ignore the QV
- terms and interpret the header as a simple TAN projection. */
- if( prj == AST__TPN ) {
- strcpy( parprefix, "QV" );
- strcpy( type, cval );
- (void) strcpy( type + 4, "-TAN" );
- cval = type;
- }
-
-/* Store the (potentially modified) CTYPE value. */
- SetValue( this, FormatKey( "CTYPE", i + 1, -1, s, status ), &cval, AST__STRING,
- comm, status );
- }
-
-/* Get and save CNAME for all WCS axes. These are NOT required, so
- do not pass on if they are not available. Do not include a CNAME
- keyword if its value equals the commen or value of the corresponding
- CTYPE keyword. */
- for( i = 0; i < nwcs; i++ ) {
- cval = GetItemC( &(store->cname), i, s, NULL, method, class, status );
- if( cval ) {
- comm = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
- if( !comm || strcmp( comm, cval ) ) {
- comm = GetItemC( &(store->ctype_com), i, s, NULL, method, class, status );
- if( !comm || strcmp( comm, cval ) ) {
- sprintf( combuf, "Description of axis %d", i + 1 );
- SetValue( this, FormatKey( "CNAME", i + 1, -1, s, status ), &cval,
- AST__STRING, combuf, status );
- }
- }
- }
- }
-
-/* Now choose whether to produce CDi_j or CDELT/PCi_j keywords. */
- if( astGetCDMatrix( this ) ) {
-
-/* CD matrix. Multiply the row of the PC matrix by the CDELT value. */
- for( i = 0; i < nwcs; i++ ) {
- cdl = GetItem( &(store->cdelt), i, 0, s, NULL, method, class, status );
- if( cdl == AST__BAD ) cdl = 1.0;
-
- for( j = 0; j < nwcs; j++ ){
- val = GetItem( &(store->pc), i, j, s, NULL, method, class, status );
- if( val == AST__BAD ) val = ( i == j ) ? 1.0 : 0.0;
- val *= cdl;
-
- if( val != 0.0 ) {
- SetValue( this, FormatKey( "CD", i + 1, j + 1, s, status ), &val,
- AST__FLOAT, "Transformation matrix element", status );
- }
- }
- }
-
-/* If producing PC/CDELT keywords... */
- } else {
-
-/* CDELT keywords. */
- for( i = 0; i < nwcs; i++ ) {
- val = GetItem( &(store->cdelt), i, 0, s, NULL, method, class, status );
- if( val == AST__BAD ) {
- ok = 0;
- goto next;
- }
- sprintf( combuf, "Pixel size on axis %d", i + 1 );
- SetValue( this, FormatKey( "CDELT", i + 1, -1, s, status ), &val, AST__FLOAT,
- combuf, status );
- }
-
-/* PC matrix. */
- for( i = 0; i < nwcs; i++ ) {
- for( j = 0; j < nwcs; j++ ){
- val = GetItem( &(store->pc), i, j, s, NULL, method, class, status );
-
- if( val != AST__BAD ) {
- if( i == j ) {
- if( EQUAL( val, 1.0 ) ) val = AST__BAD;
- } else {
- if( EQUAL( val, 0.0 ) ) val = AST__BAD;
- }
- }
-
- if( val != AST__BAD ) {
- SetValue( this, FormatKey( "PC", i + 1, j + 1, s, status ), &val,
- AST__FLOAT, "Transformation matrix element", status );
- }
- }
- }
- }
-
-/* Get and save CUNIT for all WCS axes. These are NOT required, so
- do not pass on if they are not available. */
- for( i = 0; i < nwcs; i++ ) {
- cval = GetItemC( &(store->cunit), i, s, NULL, method, class, status );
- if( cval ) {
- sprintf( combuf, "Units for axis %d", i + 1 );
- SetValue( this, FormatKey( "CUNIT", i + 1, -1, s, status ), &cval, AST__STRING,
- combuf, status );
- }
- }
-
-/* Date of observation (only allowed for primary axis descriptions). */
- if( s == ' ' ) {
- val = GetItem( &(store->mjdobs), 0, 0, s, NULL, method, class, status );
- if( val != AST__BAD ) {
- SetValue( this, FormatKey( "MJD-OBS", -1, -1, s, status ),
- &val, AST__FLOAT, "Modified Julian Date of observation", status );
-
-/* The format used for the DATE-OBS keyword depends on the value of the
- keyword. For DATE-OBS < 1999.0, use the old "dd/mm/yy" format.
- Otherwise, use the new "ccyy-mm-ddThh:mm:ss[.ssss]" format. */
- palSlaCaldj( 99, 1, 1, &mjd99, &jj );
- if( val < mjd99 ) {
-
- palSlaDjcal( 0, val, iymdf, &jj );
- sprintf( combuf, "%2.2d/%2.2d/%2.2d", iymdf[ 2 ], iymdf[ 1 ],
- iymdf[ 0 ] - ( ( iymdf[ 0 ] > 1999 ) ? 2000 : 1900 ) );
-
- } else {
-
- palSlaDjcl( val, iymdf, iymdf+1, iymdf+2, &fd, &jj );
- palSlaDd2tf( 3, fd, sign, ihmsf );
- sprintf( combuf, "%4.4d-%2.2d-%2.2dT%2.2d:%2.2d:%2.2d.%3.3d",
- iymdf[0], iymdf[1], iymdf[2], ihmsf[0], ihmsf[1],
- ihmsf[2], ihmsf[3] );
- }
-
-/* Now store the formatted string in the FitsChan. */
- cval = combuf;
- SetValue( this, "DATE-OBS", (void *) &cval, AST__STRING,
- "Date of observation", status );
- }
-
- val = GetItem( &(store->mjdavg), 0, 0, ' ', NULL, method, class, status );
- if( val != AST__BAD ) SetValue( this, "MJD-AVG", &val, AST__FLOAT,
- "Average Modified Julian Date of observation", status );
- }
-
-/* Projection parameters */
- maxm = GetMaxJM( &(store->pv), s, status );
- for( i = 0; i < nwcs; i++ ){
- for( m = 0; m <= maxm; m++ ){
- val = GetItem( &(store->pv), i, m, s, NULL, method, class, status );
- if( val != AST__BAD ) {
- SetValue( this, FormatKey( parprefix, i + 1, m, s, status ), &val,
- AST__FLOAT, "Projection parameter", status );
- }
- }
- }
-
-/* Keywords specific to celestial axes... */
-
-/* Get and save RADESYS. This is NOT required, so do not return if it is
- not available. */
- cval = GetItemC( &(store->radesys), 0, s, NULL, method, class, status );
- if( cval ) SetValue( this, FormatKey( "RADESYS", -1, -1, s, status ), &cval,
- AST__STRING, "Reference frame for RA/DEC values", status );
-
-/* Reference equinox */
- val = GetItem( &(store->equinox), 0, 0, s, NULL, method, class, status );
- if( val != AST__BAD ) SetValue( this, FormatKey( "EQUINOX", -1, -1, s, status ),
- &val, AST__FLOAT,
- "[yr] Epoch of reference equinox", status );
-
-/* Latitude of native north pole */
- val = GetItem( &(store->latpole), 0, 0, s, NULL, method, class, status );
- if( val != AST__BAD ) SetValue( this, FormatKey( "LATPOLE", -1, -1, s, status ),
- &val, AST__FLOAT,
- "[deg] Latitude of native north pole", status );
-/* Longitude of native north pole */
- val = GetItem( &(store->lonpole), 0, 0, s, NULL, method, class, status );
- if( val != AST__BAD ) SetValue( this, FormatKey( "LONPOLE", -1, -1, s, status ),
- &val, AST__FLOAT,
- "[deg] Longitude of native north pole", status );
-
-/* Keywords specific to spectral axes... */
-
-/* SPECSYS - the standard of rest for the spectral axis */
- cval = GetItemC( &(store->specsys), 0, s, NULL, method, class, status );
- if( cval ) SetValue( this, FormatKey( "SPECSYS", -1, -1, s, status ), &cval,
- AST__STRING, "Standard of rest for spectral axis", status );
-
-/* SSYSSRC - the standard of rest in which ZSOURCE is stored. */
- cval = GetItemC( &(store->ssyssrc), 0, s, NULL, method, class, status );
- if( cval ) SetValue( this, FormatKey( "SSYSSRC", -1, -1, s, status ), &cval,
- AST__STRING, "Standard of rest for source redshift", status );
-
-/* ZSOURCE - topocentric optical velocity of source */
- val = GetItem( &(store->zsource), 0, 0, s, NULL, method, class, status );
- if( val != AST__BAD ) SetValue( this, FormatKey( "ZSOURCE", -1, -1, s, status ),
- &val, AST__FLOAT, "[] Redshift of source", status );
-
-/* VELOSYS - topocentric apparent radial velocity of the standard of rest. */
- val = GetItem( &(store->velosys), 0, 0, s, NULL, method, class, status );
- if( val != AST__BAD ) SetValue( this, FormatKey( "VELOSYS", -1, -1, s, status ),
- &val, AST__FLOAT, "[m/s] Topo. apparent velocity of rest frame", status );
-
-/* RESTFRQ - rest frequency */
- val = GetItem( &(store->restfrq), 0, 0, s, NULL, method, class, status );
- if( val != AST__BAD ) SetValue( this, FormatKey( "RESTFRQ", -1, -1, s, status ),
- &val, AST__FLOAT, "[Hz] Rest frequency", status );
-
-/* RESTWAV - rest wavelength */
- val = GetItem( &(store->restwav), 0, 0, s, NULL, method, class, status );
- if( val != AST__BAD ) SetValue( this, FormatKey( "RESTWAV", -1, -1, s, status ),
- &val, AST__FLOAT, "[m] Rest wavelength", status );
-
-/* The image frequency corresponding to the rest frequency (only used for
- double sideband data). This is not part of the FITS-WCS standard but
- is added for the benefit of JACH. */
- val = GetItem( &(store->imagfreq), 0, 0, s, NULL, method, class, status );
- if( val != AST__BAD ) {
- SetValue( this, "IMAGFREQ", &val, AST__FLOAT, "[Hz] Image frequency", status );
- }
-
-/* OBSGEO-X/Y/Z - observer's geocentric coords. Note, these always refer
- to the primary axes. */
- if( s == ' ' ) {
- val = GetItem( &(store->obsgeox), 0, 0, s, NULL, method, class, status );
- if( val != AST__BAD ) SetValue( this, "OBSGEO-X", &val, AST__FLOAT, "[m] Observatory geocentric X", status );
- val = GetItem( &(store->obsgeoy), 0, 0, s, NULL, method, class, status );
- if( val != AST__BAD ) SetValue( this, "OBSGEO-Y", &val, AST__FLOAT, "[m] Observatory geocentric Y", status );
- val = GetItem( &(store->obsgeoz), 0, 0, s, NULL, method, class, status );
- if( val != AST__BAD ) SetValue( this, "OBSGEO-Z", &val, AST__FLOAT, "[m] Observatory geocentric Z", status );
- }
-
-/* See if a Frame was sucessfully written to the FitsChan. */
-next:
- ok = ok && astOK;
-
-/* If so, indicate we have something to return. */
- if( ok ) ret = 1;
-
-/* If we are producing secondary axes, clear any error status so we can
- continue to produce the next Frame. Retain the error if the primary axes
- could not be produced. After the primary axes, do the A axes. */
- if( s != ' ' ) {
- astClearStatus;
- } else {
- s = 'A' - 1;
- }
-
-/* Remove the secondary "new" flags from the FitsChan. This flag is
- associated with cards which have been added to the FitsChan during
- this pass through the main loop in this function. If the Frame was
- written out succesfully, just clear the flags. If anything went wrong
- with this Frame, remove the flagged cards from the FitsChan. */
- FixNew( this, NEW2, !ok, method, class, status );
-
-/* Set the current card so that it points to the last WCS-related keyword
- in the FitsChan (whether previously read or not). */
- FindWcs( this, 1, 1, 0, method, class, status );
- }
-
-/* Return zero or ret depending on whether an error has occurred. */
- return astOK ? ret : 0;
-}
-
-static AstMapping *WcsIntWorld( AstFitsChan *this, FitsStore *store, char s,
- int naxes, const char *method, const char *class, int *status ){
-/*
-* Name:
-* WcsIntWorld
-
-* Purpose:
-* Create a Mapping from pixel coords to intermediate world coords.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* AstMapping *WcsIntWorld( AstFitsChan *this, FitsStore *store, char s,
-* int naxes, const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* This function interprets the contents of the supplied FitsStore
-* structure, and creates a Mapping which describes the transformation
-* from pixel coordinates to intermediate world coordinates, using the
-* FITS World Coordinate System conventions. This is a general linear
-* transformation described by the CRPIXj, PCi_j and CDELTi keywords.
-
-* Parameters:
-* this
-* The FitsChan. ASTWARN cards may be added to this FitsChan if any
-* anomalies are found in the keyword values in the FitsStore.
-* store
-* A structure containing information about the requested axis
-* descriptions derived from a FITS header.
-* s
-* A character identifying the co-ordinate version to use. A space
-* means use primary axis descriptions. Otherwise, it must be an
-* upper-case alphabetical characters ('A' to 'Z').
-* naxes
-* The number of intermediate world coordinate axes (WCSAXES).
-* method
-* A pointer to a string holding the name of the calling method.
-* This is used only in the construction of error messages.
-* class
-* A pointer to a string holding the class of the object being
-* read. This is used only in the construction of error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the Mapping.
-
-*/
-
-/* Local Variables: */
- AstMapping *mapd1; /* Pointer to first distortion Mapping */
- AstMapping *mapd2; /* Pointer to second distortion Mapping */
- AstMapping *mapd3; /* Pointer to third distortion Mapping */
- AstMapping *mapd4; /* Pointer to fourth distortion Mapping */
- AstMapping *map0; /* Pointer to a Mapping */
- AstMapping *map1; /* Pointer to a Mapping */
- AstMapping *ret; /* Pointer to the returned Mapping */
-
-/* Initialise the pointer to the returned Mapping. */
- ret = NULL;
-
-/* Check the global status. */
- if ( !astOK ) return ret;
-
-/* First of all, check the CTYPE keywords to see if they contain any known
- distortion codes (following the syntax described in FITS-WCS paper IV).
- If so, Mappings are returned which represents the distortions to be
- applied at each point in the chain of Mappings produced by this function.
- Any distortion codes are removed from the CTYPE values in the FitsStore. */
- DistortMaps( this, store, s, naxes, &mapd1, &mapd2, &mapd3, &mapd4, method,
- class, status );
-
-/* If distortion is to be applied now, initialise the returned Mapping to
- be the distortion. */
- if( mapd1 ) ret = mapd1;
-
-/* Try to create a WinMap which translates the pixel coordinates so
- that they are refered to an origin at the reference pixel. This
- subtracts the value of CRPIXi from axis i. */
- map1 = (AstMapping *) WcsShift( store, s, naxes, method, class, status );
-
-/* Combine this with any previous Mapping. */
- if( ret ) {
- map0 = (AstMapping *) astCmpMap( ret, map1, 1, "", status );
- ret = astAnnul( ret );
- map1 = astAnnul( map1 );
- ret = map0;
- } else {
- ret = map1;
- }
-
-/* If distortion is to be applied now, combine the two Mappings. */
- if( mapd2 ) {
- map0 = (AstMapping *) astCmpMap( ret, mapd2, 1, "", status );
- ret = astAnnul( ret );
- mapd2 = astAnnul( mapd2 );
- ret = map0;
- }
-
-/* Now try to create a MatrixMap to implement the PC matrix. Combine it
- with the above Mapping. */
- map1 = (AstMapping *) WcsPCMatrix( store, s, naxes, method, class, status );
- map0 = (AstMapping *) astCmpMap( ret, map1, 1, "", status );
- ret = astAnnul( ret );
- map1 = astAnnul( map1 );
- ret = map0;
-
-/* If distortion is to be applied now, combine the two Mappings. */
- if( mapd3 ) {
- map0 = (AstMapping *) astCmpMap( ret, mapd3, 1, "", status );
- ret = astAnnul( ret );
- mapd3 = astAnnul( mapd3 );
- ret = map0;
- }
-
-/* Now try to create a diagonal MatrixMap to implement the CDELT scaling.
- Combine it with the above Mapping. */
- map1 = (AstMapping *) WcsCDeltMatrix( store, s, naxes, method, class, status );
- map0 = (AstMapping *) astCmpMap( ret, map1, 1, "", status );
- ret = astAnnul( ret );
- map1 = astAnnul( map1 );
- ret = map0;
-
-/* If distortion is to be applied now, combine the two Mappings. */
- if( mapd4 ) {
- map0 = (AstMapping *) astCmpMap( ret, mapd4, 1, "", status );
- ret = astAnnul( ret );
- mapd4 = astAnnul( mapd4 );
- ret = map0;
- }
-
-/* Return the result. */
- return ret;
-}
-
-static AstMapping *WcsMapFrm( AstFitsChan *this, FitsStore *store, char s,
- AstFrame **frm, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* WcsMapFrm
-
-* Purpose:
-* Create a Mapping and Frame for the WCS transformations described in a
-* FITS header.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* AstMapping *WcsMapFrm( AstFitsChan *this, FitsStore *store, char s,
-* AstFrame **frm, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* This function interprets the contents of the supplied FitsStore
-* structure, and creates a Mapping which describes the transformation
-* from pixel coordinates to world coordinates, using the FITS World
-* Coordinate System conventions. It also creates a Frame describing
-* the world coordinate axes.
-
-* Parameters:
-* this
-* The FitsChan.
-* store
-* A structure containing information about the requested axis
-* descriptions derived from a FITS header.
-* s
-* A character identifying the co-ordinate version to use. A space
-* means use primary axis descriptions. Otherwise, it must be an
-* upper-case alphabetical characters ('A' to 'Z').
-* frm
-* The address of a location at which to store a pointer to the
-* Frame describing the world coordinate axes. If the Iwc attribute
-* is non-zero, then this is actually a FrameSet in which the current
-* Frame is the required WCS system. The FrameSet also contains one
-* other Frame which defines the FITS IWC system.
-* method
-* A pointer to a string holding the name of the calling method.
-* This is used only in the construction of error messages.
-* class
-* A pointer to a string holding the class of the object being
-* read. This is used only in the construction of error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the Mapping.
-
-*/
-
-/* Local Variables: */
- AstFrame *iwcfrm; /* Frame defining IWC system */
- AstFrameSet *fs; /* Pointer to returned FrameSet */
- AstMapping *map1; /* Pointer to a Mapping */
- AstMapping *map2; /* Pointer to a Mapping */
- AstMapping *map3; /* Pointer to a Mapping */
- AstMapping *map4; /* Pointer to a Mapping */
- AstMapping *map5; /* Pointer to a Mapping */
- AstMapping *map6; /* Pointer to a Mapping */
- AstMapping *map7; /* Pointer to a Mapping */
- AstMapping *map8; /* Pointer to a Mapping */
- AstMapping *map9; /* Pointer to a Mapping */
- AstMapping *ret; /* Pointer to the returned Mapping */
- AstSkyFrame *reffrm; /* SkyFrame defining reflon and reflat */
- char iwc[5]; /* Domain name for IWC Frame */
- char id[2]; /* ID string for returned Frame */
- const char *cc; /* Pointer to Domain */
- double dut1; /* UT1-UTC correction in days */
- double dval; /* Temporary double value */
- double reflat; /* Reference celestial latitude */
- double reflon; /* Reference celestial longitude */
- int wcsaxes; /* Number of physical axes */
-
-/* Initialise the pointer to the returned Mapping. */
- ret = NULL;
-
-/* Check the global status. */
- if ( !astOK ) return ret;
-
-/* Obtain the number of physical axes in the header. If the WCSAXES header
- was specified, use it. Otherwise assume it is the same as the number
- of pixel axes. */
- dval = GetItem( &(store->wcsaxes), 0, 0, s, NULL, method, class, status );
- if( dval != AST__BAD ) {
- wcsaxes = (int) dval + 0.5;
- } else {
- wcsaxes = store->naxis;
- }
-
-/* Create a simple Frame to represent IWC coords. */
- iwcfrm = astFrame( wcsaxes, "Title=FITS Intermediate World Coordinates", status );
- strcpy( iwc, "IWC" );
- iwc[ 3 ]= s;
- iwc[ 4 ]= 0;
- astSetDomain( iwcfrm, iwc );
-
-/* Create a simple Frame which will be used as the initial representation
- for the physical axes. This Frame will be changed later (or possibly
- replaced by a Frame of another class) when we know what type of
- physical axes we are dealing with. Set its Domain to "AST_FITSCHAN"
- This value is used to identify axes which have not been changed,
- and will be replaced before returning the final FrameSet. */
- *frm = astFrame( wcsaxes, "Domain=AST_FITSCHAN", status );
-
-/* Store the coordinate version character as the Ident attribute for the
- returned Frame. */
- id[ 0 ] = s;
- id[ 1 ] = 0;
- astSetIdent( *frm, id );
-
-/* Create a Mapping which goes from pixel coordinates to what FITS-WCS
- paper I calls "intermediate world coordinates". This stage is the same
- for all axes. It uses the CRPIXj, PCi_j and CDELTi headers (and
- distortion codes form the CTYPE keywords). */
- map1 = WcsIntWorld( this, store, s, wcsaxes, method, class, status );
-
-/* Add a Warning if this mapping cannot be inverted. */
- if( !astGetTranInverse( map1 ) ) {
- Warn( this, "badmat", "The pixel rotation matrix in the original FITS "
- "header (specified by CD or PC keywords) could not be inverted. "
- "This may be because the matrix contains rows or columns which "
- "are entirely zero.", method, class, status );
- }
-
-/* The conversion from intermediate world coordinates to the final world
- coordinates depends on the type of axis being converted (as specified
- by its CTYPE keyword). Check for each type of axis for which known
- conventions exist... */
-
-/* Celestial coordinate axes. The following call returns a Mapping which
- transforms any celestial coordinate axes from intermediate world
- coordinates to the final celestial coordinates. Other axes are left
- unchanged by the Mapping. It also modifies the Frame so that a
- SkyFrame is used to describe the celestial axes. */
- map2 = WcsCelestial( this, store, s, frm, iwcfrm, &reflon, &reflat,
- &reffrm, method, class, status );
-
-/* Spectral coordinate axes. The following call returns a Mapping which
- transforms any spectral coordinate axes from intermediate world
- coordinates to the final spectral coordinates. Other axes are left
- unchanged by the Mapping. It also modifies the Frame so that a
- SpecFrame is used to describe the spectral axes. */
- map3 = WcsSpectral( this, store, s, frm, iwcfrm, reflon, reflat, reffrm,
- method, class, status );
-
-/* Any axes which were not recognized by the above calls are assumed to
- be linear. Create a Mapping which adds on the reference value for such
- axes, and modify the Frame to desribe the axes. */
- map4 = WcsOthers( this, store, s, frm, iwcfrm, method, class, status );
-
-/* If the Frame still has the Domain "AST_FITSCHAN", clear it. */
- cc = astGetDomain( *frm );
- if( cc && !strcmp( cc, "AST_FITSCHAN" ) ) astClearDomain( *frm );
-
-/* Concatenate the Mappings and simplify the result. */
- map5 = (AstMapping *) astCmpMap( map1, map2, 1, "", status );
- map6 = (AstMapping *) astCmpMap( map5, map3, 1, "", status );
- map7 = (AstMapping *) astCmpMap( map6, map4, 1, "", status );
- ret = astSimplify( map7 );
-
-/* Ensure that the coordinate version character is stored as the Ident
- attribute for the returned Frame (the above calls may have changed it). */
- astSetIdent( *frm, id );
-
-/* Set the DUT1 value. Note, the JACH store DUT1 in units of days in their
- FITS headers, so convert from days to seconds. May need to do somthing
- about this if the forthcoming FITS-WCS paper 5 (time axes) defines DUT1
- to be in seconds. */
- dut1 = GetItem( &(store->dut1), 0, 0, s, NULL, method, class, status );
- if( dut1 != AST__BAD ) astSetDut1( *frm, dut1*SPD );
-
-/* The returned Frame is actually a FrameSet in which the current Frame
- is the required WCS Frame. The FrameSet contains one other Frame,
- which is the Frame representing IWC. Create a FrameSet containing these
- two Frames. */
- if( astGetIwc( this ) ) {
- fs = astFrameSet( iwcfrm, "", status );
- astInvert( map1 );
- map8 = (AstMapping *) astCmpMap( map1, ret, 1, "", status );
- astInvert( map1 );
- map9 = astSimplify( map8 );
- astAddFrame( fs, AST__BASE, map9, *frm );
-
-/* Return this FrameSet instead of the Frame. */
- *frm = astAnnul( *frm );
- *frm = (AstFrame *) fs;
-
-/* Free resources */
- map8 = astAnnul( map8 );
- map9 = astAnnul( map9 );
-
- }
-
-/* Annull temporary resources. */
- if( reffrm ) reffrm = astAnnul( reffrm );
- iwcfrm = astAnnul( iwcfrm );
- map1 = astAnnul( map1 );
- map2 = astAnnul( map2 );
- map3 = astAnnul( map3 );
- map4 = astAnnul( map4 );
- map5 = astAnnul( map5 );
- map6 = astAnnul( map6 );
- map7 = astAnnul( map7 );
-
-/* Return the result. */
- return ret;
-}
-
-static AstMatrixMap *WcsPCMatrix( FitsStore *store, char s, int naxes,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* WcsPCMatrix
-
-* Purpose:
-* Create a MatrixMap representing the PC matrix.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* AstMatrixMap *WcsPCMatrix( FitsStore *store, char s, int naxes,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* A MatrixMap representing the FITS "PC" matrix is returned.
-
-* Parameters:
-* store
-* A structure containing values for FITS keywords relating to
-* the World Coordinate System.
-* s
-* A character s identifying the co-ordinate version to use. A space
-* means use primary axis descriptions. Otherwise, it must be an
-* upper-case alphabetical characters ('A' to 'Z').
-* naxes
-* The number of intermediate world coordinate axes (WCSAXES).
-* method
-* A pointer to a string holding the name of the calling method.
-* This is used only in the construction of error messages.
-* class
-* A pointer to a string holding the class of the object being
-* read. This is used only in the construction of error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the created MatrixMap or a NULL pointer if an
-* error occurred.
-
-*/
-
-/* Local Variables: */
- AstMatrixMap *new; /* The created MatrixMap */
- double *el; /* Pointer to next matrix element */
- double *mat; /* Pointer to matrix array */
- int i; /* Pixel axis index */
- int j; /* Intermediate axis index. */
-
-/* Initialise/ */
- new = NULL;
-
-/* Check the global status. */
- if ( !astOK ) return new;
-
-/* Allocate memory for the matrix. */
- mat = (double *) astMalloc( sizeof(double)*naxes*naxes );
- if( astOK ){
-
-/* Fill the matrix with values from the FitsStore. */
- el = mat;
- for( i = 0; i < naxes; i++ ){
- for( j = 0; j < naxes; j++ ){
-
-/* Get the PCj_i value for this axis. Missing terms can be defaulted so
- do not report an error if the required value is not present in the
- FitsStore. */
- *el = GetItem( &(store->pc), i, j, s, NULL, method, class, status );
-
-/* Diagonal terms default to to 1.0, off-diagonal to zero. */
- if( *el == AST__BAD ) *el = ( i == j ) ? 1.0: 0.0;
-
-/* Move on to the next matrix element. */
- el++;
- }
- }
-
-/* Create the matrix. */
- new = astMatrixMap( naxes, naxes, 0, mat, "", status );
-
-/* Report an error if the inverse transformation is undefined. */
- if( !astGetTranInverse( new ) && astOK ) {
- astError( AST__BDFTS, "%s(%s): Unusable rotation matrix (PC or CD) found "
- "in the FITS-WCS header - the matrix cannot be inverted.", status, method, class );
- }
-
-/* Release the memory used to hold the matrix. */
- mat = (double *) astFree( (void *) mat );
-
- }
-
-/* If an error has occurred, attempt to annul the returned MatrixMap. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the MatrixMap. */
- return new;
-
-}
-
-static AstMapping *WcsNative( AstFitsChan *this, FitsStore *store, char s,
- AstWcsMap *wcsmap, int fits_ilon, int fits_ilat,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* WcsNative
-
-* Purpose:
-* Create a CmpMap which transforms Native Spherical Coords to
-* Celestial Coords.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* AstMapping *WcsNative( AstFitsChan *this, FitsStore *store, char s,
-* AstWcsMap *wcsmap, int fits_ilon, int fits_ilat,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* A CmpMap is created which rotates the supplied Native Spherical Coords
-* into Celestial Coords in the standard system specified by the CTYPE
-* keywords. Any non-celestial axes are left unchanged.
-*
-* At the highest level, the returned CmpMap is made up of the following
-* Mappings in series (if celestial long/lat axes are present):
-* 1 - A PermMap which rearranges the axes so that the longitude axis is
-* axis 0, the latitude axis is axis 1, and all other axes are
-* stored at higher indices, starting at axis 2.
-* 2 - A CmpMap which converts the values on axes 0 and 1 from Native
-* Spherical to Celestial coordinates, leaving all other axes
-* unchanged.
-* 3 - A PermMap which rearranges the axes to put the longitude and
-* latitude axes back in their original places. This is just the
-* inverse of the PermMap used at stage 1 above.
-*
-* The CmpMap used at stage 2 above, is made up of two Mappings in
-* parallel:
-* 4 - A CmpMap which maps axes 0 and 1 from Native Spherical to
-* Celestial coordinates.
-* 5 - A UnitMap which passes on the values to axes 2, 3, etc,
-* without change.
-*
-* The CmpMap used at stage 4 above, is made up of the following Mappings
-* in series:
-* 6 - A SphMap which converts the supplied spherical coordinates into
-* Cartesian Coordinates.
-* 7 - A MatrixMap which rotates the Cartesian coordinates from the
-* Native to the Celestial system.
-* 8 - A SphMap which converts the resulting Cartesian coordinates back
-* to spherical coordinates.
-
-* Parameters:
-* this
-* The FitsChan in which to store any warning cards. If NULL, no
-* warnings are stored.
-* store
-* A structure containing values for FITS keywords relating to
-* the World Coordinate System.
-* s
-* Co-ordinate version character to use (space means primary axes).
-* wcsmap
-* A mapping describing the deprojection which is being used. This is
-* needed in order to be able to locate the fiducial point within the
-* Native Speherical Coordinate system, since it varies from projection
-* to projection.
-* fits_ilon
-* The zero-based FITS WCS axis index corresponding to celestial
-* longitude (i.e. one less than the value of "i" in the keyword
-* names "CTYPEi", "CRVALi", etc). If -1 is supplied, the index of
-* the longitude axis in the supplied WcsMap is used.
-* fits_ilat
-* The zero-based FITS WCS axis index corresponding to celestial
-* latitude (i.e. one less than the value of "i" in the keyword
-* names "CTYPEi", "CRVALi", etc). If -1 is supplied, the index of
-* the latitude axis in the supplied WcsMap is used.
-* method
-* A pointer to a string holding the name of the calling method.
-* This is used only in the construction of error messages.
-* class
-* A pointer to a string holding the class of the object being
-* read. This is used only in the construction of error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the created CmpMap or a NULL pointer if an error occurred.
-
-* Notes:
-* - The local variable names correspond to the notation in the papers
-* by Greisen & Calabretta describing the FITS WCS system.
-
-*/
-
-/* Local Variables: */
- AstCmpMap *cmpmap; /* A CmpMap */
- AstMapping *new; /* The returned CmpMap */
- AstMatrixMap *matmap2; /* Another MatrixMap */
- AstMatrixMap *matmap; /* A MatrixMap */
- AstPermMap *permmap; /* A PermMap */
- AstSphMap *sphmap; /* A SphMap */
- AstUnitMap *unitmap; /* A UnitMap */
- char buf[150]; /* Message buffer */
- double alpha0; /* Long. of fiduaicl point in standard system */
- double alphap; /* Long. of native nth pole in standard system */
- double axis[3]; /* Vector giving the axis of rotation */
- double delta0; /* Lat. of fiducial point in standard system */
- double deltap; /* Lat. of native nth pole in standard system */
- double latpole; /* Lat. of native nth pole in standard system if deltap undefined */
- double phip; /* Long. of standard nth pole in native system */
- double phi0; /* Native longitude at fiducial point */
- double theta0; /* Native latitude at fiducial point */
- int *inperm; /* Pointer to array of output axis indices */
- int *outperm; /* Pointer to array of input axis indices */
- int axlat; /* Index of latitude physical axis */
- int axlon; /* Index of longitude physical axis */
- int i; /* Loop count */
- int nax_rem; /* No. of non-astrometric axes */
- int naxis; /* No. of axes. */
- int new_axlat; /* Index of lat. physical axis after perming */
- int tpn; /* Is this a TPN projection? */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the returned CmpMap pointer. */
- new = NULL;
-
-/* Store the number of axes in a local variable. */
- naxis = astGetNin( wcsmap );
-
-/* Get the indices of the celestial axes. */
- axlon = astGetWcsAxis( wcsmap, 0 );
- axlat = astGetWcsAxis( wcsmap, 1 );
-
-/* If the corresponding FITS axis indices were not supplied, use the
- WcsMap axes found above. */
- if( fits_ilon == -1 ) fits_ilon = axlon;
- if( fits_ilat == -1 ) fits_ilat = axlat;
-
-/* If there is no longitude or latitude axis, or if we have a
- non-celestial projection, just return a UnitMap. */
- if( axlon == axlat || astGetWcsType( wcsmap ) == AST__WCSBAD ){
- new = (AstMapping *) astUnitMap( naxis, "", status );
-
-/* If there is a lon/lat axis pair, create the inperm and outperm arrays
- which will be needed later to create the PermMap which reorganises
- the axes so that axis zero is the longitude axis and axis 1 is the
- latitude axis. */
- } else {
-
-/* Get storage for the two arrays. */
- inperm = (int *) astMalloc( sizeof( int )*(size_t)naxis );
- outperm = (int *) astMalloc( sizeof( int )*(size_t)naxis );
- if( astOK ){
-
-/* Initialise an array holding the indices of the input axes which are copied
- to each output axis. Initially assume that there is no re-arranging of
- the axes. */
- for( i = 0; i < naxis; i++ ) outperm[ i ] = i;
-
-/* Swap the longitude axis and axis 0. */
- i = outperm[ axlon ];
- outperm[ axlon ] = outperm[ 0 ];
- outperm[ 0 ] = i;
-
-/* If axis 0 was originally the latitude axis, the latitude axis will now
- be where the longitude axis was originally (because of the above axis
- swap). */
- if( axlat == 0 ) {
- new_axlat = axlon;
- } else {
- new_axlat = axlat;
- }
-
-/* Swap the latitude axis and axis 1. */
- i = outperm[ new_axlat ];
- outperm[ new_axlat ] = outperm[ 1 ];
- outperm[ 1 ] = i;
-
-/* Create the array holding the output axis index corresponding to
- each input axis. */
- for( i = 0; i < naxis; i++ ) inperm[ outperm[ i ] ] = i;
-
- }
-
-/* Store the latitude and longitude (in the standard system) of the fiducial
- point, in radians. */
- delta0 = GetItem( &(store->crval), fits_ilat, 0, s, NULL, method, class, status );
- if( delta0 == AST__BAD ) delta0 = 0.0;
- delta0 *= AST__DD2R;
-
- alpha0 = GetItem( &(store->crval), fits_ilon, 0, s, NULL, method, class, status );
- if( alpha0 == AST__BAD ) alpha0 = 0.0;
- alpha0 *= AST__DD2R;
-
-/* Limit the latitude to the range +/- PI/2, issuing a warning if the
- supplied CRVAL value is outside this range. The "alphap" variable is used
- as workspace here. */
- alphap = palSlaDrange( delta0 );
- delta0 = alphap;
- if ( delta0 > AST__DPIBY2 ){
- delta0 = AST__DPIBY2;
- } else if ( delta0 < -AST__DPIBY2 ){
- delta0 = -AST__DPIBY2;
- }
- if( alphap != delta0 ) {
- sprintf( buf, "The original FITS header specified a fiducial "
- "point with latitude %.*g. A value of %.*g is being used "
- "instead. ", DBL_DIG, alphap*AST__DR2D, DBL_DIG,
- delta0*AST__DR2D );
- Warn( this, "badlat", buf, method, class, status );
- }
-
-/* Set a flag indicating if we have a TPN projection. The handling or
- projection parameters is different for TPN projections. */
- tpn = ( astGetWcsType( wcsmap ) == AST__TPN );
-
-/* Store the radian values of the FITS keywords LONPOLE and LATPOLE. Defaults
- will be used if either of these items was not supplied. These keyword
- values may be stored in projection parameters PVi_3a and PVi_4a for
- longitude axis "i" - in which case the "PV" values take precedence over
- the "LONPOLE" and "LATPOLE" values. Do not do this for TPN projections
- since they use these projection parameters to specify correcton terms. */
- if( astTestPV( wcsmap, axlon, 3 ) && !tpn ) {
- phip = astGetPV( wcsmap, axlon, 3 );
- } else {
- phip = GetItem( &(store->lonpole), 0, 0, s, NULL, method, class, status );
- if( phip != AST__BAD && !tpn ) astSetPV( wcsmap, axlon, 3, phip );
- }
- if( phip != AST__BAD ) phip *= AST__DD2R;
-
- if( astTestPV( wcsmap, axlon, 4 ) && !tpn ) {
- latpole = astGetPV( wcsmap, axlon, 4 );
- } else {
- latpole = GetItem( &(store->latpole), 0, 0, s, NULL, method, class, status );
- if( latpole != AST__BAD && !tpn ) astSetPV( wcsmap, axlon, 4, latpole );
- }
- if( latpole != AST__BAD ) latpole *= AST__DD2R;
-
-/* Find the standard Celestial Coordinates of the north pole of the Native
- Spherical Coordinate system. Report an error if the position was not
- defined. */
- if( !WcsNatPole( this, wcsmap, alpha0, delta0, latpole, &phip, &alphap,
- &deltap, status ) && astOK ){
- astError( AST__BDFTS, "%s(%s): Conversion from FITS WCS native "
- "coordinates to celestial coordinates is ill-conditioned.", status,
- method, class );
- }
-
-/* Create the SphMap which converts spherical coordinates to Cartesian
- coordinates (stage 6 in the prologue). This asumes that axis 0 is the
- longitude axis, and axis 1 is the latitude axis. This will be ensured
- by a PermMap created later. Indicate that the SphMap will only be used
- to transform points on a unit sphere. This enables a forward SphMap
- to be combined with an inverse SphMap into a UnitMap, and thus aids
- simplification. */
- sphmap = astSphMap( "UnitRadius=1", status );
- astInvert( sphmap );
-
-/* Set the PolarLong attribute of the SphMap so that a longitude of phi0 (the
- native longitude of the fiducial point) is returned by the inverse
- transformation (cartesian->spherical) at either pole. */
- GetFiducialNSC( wcsmap, &phi0, &theta0, status );
- astSetPolarLong( sphmap, phi0 );
-
-/* Create a unit MatrixMap to be the basis of the MatrixMap which rotates
- Native Spherical Coords to Celestial Coords (stage 7 in the prologue). */
- matmap = astMatrixMap( 3, 3, 2, NULL, "", status );
-
-/* Modify the above MatrixMap so that it rotates the Cartesian position vectors
- by -phip (i.e. LONPOLE) about the Z axis. This puts the north pole of the
- standard system at zero longitude in the rotated system. Then annul the
- original MatrixMap and use the new one instead. */
- axis[ 0 ] = 0;
- axis[ 1 ] = 0;
- axis[ 2 ] = 1;
- matmap2 = astMtrRot( matmap, -phip, axis );
- matmap = astAnnul( matmap );
- matmap = matmap2;
-
-/* Now modify the above MatrixMap so that it rotates the Cartesian position
- vectors by -(PI/2-deltap) about the Y axis. This puts the north pole of
- the standard system as 90 degrees latitude in the rotated system. Then annul
- the original MatrixMap and use the new one instead. */
- axis[ 0 ] = 0;
- axis[ 1 ] = 1;
- axis[ 2 ] = 0;
- matmap2 = astMtrRot( matmap, deltap - AST__DPIBY2, axis );
- matmap = astAnnul( matmap );
- matmap = matmap2;
-
-/* Finally modify the above MatrixMap so that it rotates the Cartesian position
- vectors (PI+alphap) about the Z axis. This puts the primary meridian of the
- standard system at zero longitude in the rotated system. This results in the
- rotated system being coincident with the standard system. */
- axis[ 0 ] = 0;
- axis[ 1 ] = 0;
- axis[ 2 ] = 1;
- matmap2 = astMtrRot( matmap, AST__DPI + alphap, axis );
- matmap = astAnnul( matmap );
- matmap = matmap2;
-
-/* Combine the SphMap (stage 6) and MatrixMap (stage 7) in series. */
- cmpmap = astCmpMap( sphmap, matmap, 1, "", status );
- sphmap = astAnnul( sphmap );
- matmap = astAnnul( matmap );
-
-/* Create a new SphMap which converts Cartesian coordinates to spherical
- coordinates (stage 8 in the prologue). Indicate that the SphMap will
- only be used to transform points on a unit sphere. */
- sphmap = astSphMap( "UnitRadius=1", status );
-
-/* Set the PolarLong attribute of the SphMap so that a longitude of alpha0
- (the celestial longitude of the fiducial point) is returned by the
- forward transformation (cartesian->spherical) at either pole. */
- astSetPolarLong( sphmap, alpha0 );
-
-/* Add it to the compound mapping. The CmpMap then corresponds to stage 4
- in the prologue. Annul the constituent mappings. */
- new = (AstMapping *) astCmpMap( cmpmap, sphmap, 1, "", status );
- cmpmap = astAnnul( cmpmap );
- sphmap = astAnnul( sphmap );
-
-/* If there are any remaining axes (i.e. axes which do not describe a
- Celestial coordinate system), create a UnitMap which passes on their
- values unchanged (stage 5 in the prologue), and add it the CmpMap,
- putting it in parallel with the earlier mappings. The resulting CmpMap
- then corresponds to stage 2 in the prologue. Note, the axis numbering
- used by this UnitMap needs to take account of the fact that it is only
- applied to the non-celestial axes. The axes are re-ordered by the
- PermMap described at stage 1 in the prologue. */
- nax_rem = naxis - 2;
- if( nax_rem > 0 ){
- unitmap = astUnitMap( nax_rem, "", status );
- cmpmap = astCmpMap( new, unitmap, 0, "", status );
- new = astAnnul( new );
- unitmap = astAnnul( unitmap );
- new = (AstMapping *) cmpmap;
- }
-
-/* Now we need to ensure that axes 0 and 1 correspond to longitude and
- latitude. If this is already the case, then the CmpMap can be returned
- as it is. Otherwise, a PermMap needs to be created to rearrange the
- axes. */
- if( axlon != 0 || axlat != 1 ){
-
-/* Create the PermMap using the inperm and outperm arrays created earlier.
- This is the mapping described as stage 1 in the prologue. */
- permmap = astPermMap( naxis, inperm, naxis, outperm, NULL, "", status );
-
-/* Compound this PermMap and the CmpMap corresponding to stage 2 (created
- earlier) in series. */
- cmpmap = astCmpMap( permmap, new, 1, "", status );
- new = astAnnul( new );
- new = (AstMapping *) cmpmap;
-
-/* Now invert the PermMap, so that it re-arranges the axes back into
- their original order. This is the mapping described as stage 3 in
- the prologue. */
- astInvert( permmap );
-
-/* And finally.... add this inverted PermMap onto the end of the CmpMap. */
- cmpmap = astCmpMap( new, permmap, 1, "", status );
- permmap = astAnnul( permmap );
- new = astAnnul( new );
- new = (AstMapping *) cmpmap;
- }
-
-/* Free the temporary arrays. */
- inperm = (int *) astFree( (void *) inperm );
- outperm = (int *) astFree( (void *) outperm );
- }
-
-/* If an error has occurred, attempt to annul the new CmpMap. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the CmpMap. */
- return new;
-
-}
-
-static int WcsNatPole( AstFitsChan *this, AstWcsMap *wcsmap, double alpha0,
- double delta0, double latpole, double *phip,
- double *alphap, double *deltap, int *status ){
-/*
-* Name:
-* WcsNatPole
-
-* Purpose:
-* Find the celestial coordinates of the north pole of the Native Spherical
-* Coordinate system.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* int WcsNatPole( AstFitsChan *this, AstWcsMap *wcsmap, double alpha0,
-* double delta0, double latpole, double *phip,
-* double *alphap, double *deltap, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* The supplied WcsMap converts projected positions given in
-* "Projection Plane Coords" to positions in the "Native Spherical
-* Coordinate" system. This function finds the pole of this spherical
-* coordinate system in terms of the standard celestial coordinate
-* system to which the CRVALi, LONPOLE and LATPOLE keywords refer (this
-* system should be identified by characters 5-8 of the CTYPEi
-* keywords). It also supplies a default value for LONPOLE if no value
-* has been supplied explicitly in the FITS header.
-*
-* This function implements equations 8, 9 and 10 from the FITS-WCS paper
-* II by Calabretta & Greisen (plus the associated treatment of special
-* cases). The paper provides more detailed documentation for the
-* mathematics implemented by this function.
-
-* Parameters:
-* this
-* The FitsChan in which to store any warning cards. If NULL, no
-* warnings are stored.
-* wcsmap
-* A mapping describing the deprojection being used (i.e. the
-* mapping from Projection Plane Coords to Native Spherical Coords).
-* alpha0
-* The longitude of the fiducial point in the standard celestial
-* coordinate frame (in radians). Note, this fiducial point does
-* not necessarily correspond to the point given by keywords CRPIXj.
-* delta0
-* The celestial latitude (radians) of the fiducial point.
-* latpole
-* The value of FITS keyword LATPOLE, converted to radians, or the
-* symbolic constant AST__BAD if the keyword was not supplied.
-* phip
-* Pointer to a location at which is stored the longitude of the north
-* pole of the standard Celestial coordinate system, as measured in
-* the Native Spherical Coordinate system, in radians. This should be
-* supplied holding the radian equivalent of the value of the FITS
-* keyword LONPOLE, or the symbolic constant AST__BAD if the keyword was
-* not supplied (in which case a default value will be returned at the
-* given location).
-* alphap
-* Pointer to a location at which to store the calculated longitude
-* of the Native North Pole, in radians.
-* deltap
-* Pointer to a location at which to store the calculated latitude
-* of the Native North Pole, in radians.
-* class
-* A pointer to a string holding the class of the object being
-* read. This is used only in the construction of error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A status: non-zero for success, zero if the position of the native
-* north pole is undefined.
-
-* Notes:
-* - Certain combinations of keyword values result in the latitude of
-* the Native North Pole being undefined. In these cases, a value of
-* 0 is returned for the function value, but no error is reported.
-* - All angular values used by this function are in radians.
-* - A value of 0 is returned if an error has already occurred.
-
-*/
-
-/* Local Variables: */
- char buf[150]; /* Buffer for warning message */
- double cos_theta0; /* Cosine of theta0 */
- double cos_phip; /* Cosine of (phip - phi0) */
- double cos_delta0; /* Cosine of delta0 */
- double cos_deltap; /* Cosine of deltap */
- double deltap_1; /* First possible value for deltap */
- double deltap_2; /* Second possible value for deltap */
- double sin_theta0; /* Sine of theta0 */
- double sin_phip; /* Sine of (phip - phi0) */
- double sin_delta0; /* Sine of delta0 */
- double sin_deltap; /* Sine of deltap */
- double t0, t1, t2, t3, t4; /* Intermediate values */
- double phi0, theta0; /* Native coords of fiducial point */
-
-/* Check the global status. */
- if ( !astOK ) return 0;
-
-/* Get the longitude and latitude of the fiducial point in the native
- spherical coordinate frame (in radians). */
- GetFiducialNSC( wcsmap, &phi0, &theta0, status );
-
-/* If no value was supplied for the FITS keyword LONPOLE, set up a default
- value such that the celestial latitude increases in the same direction
- as the native latitude at the fiducial; point. */
- if( *phip == AST__BAD ){
- if( delta0 >= theta0 ){
- *phip = 0.0;
- } else {
- *phip = AST__DPI;
- }
-
-/* Issue a warning that a default lonpole value has been adopted. */
- sprintf( buf, "The original FITS header did not specify the "
- "longitude of the native north pole. A default value "
- "of %.8g degrees was assumed.", (*phip)*AST__DR2D );
- Warn( this, "nolonpole", buf, "astRead", "FitsChan", status );
-
- }
-
-/* If the fiducial point is coincident with the Native North Pole, then the
- Native North Pole must have the same coordinates as the fiducial
- point. Tests for equality include some tolerance to allow for rounding
- errors. */
- sin_theta0 = sin( theta0 );
- if( EQUAL( sin_theta0, 1.0 ) ){
- *alphap = alpha0;
- *deltap = delta0;
-
-/* If the fiducial point is concident with the Native South Pole, then the
- Native North Pole must have the coordinates of the point diametrically
- opposite the fiducial point. */
- } else if( EQUAL( sin_theta0, -1.0 ) ){
- *alphap = alpha0 + AST__DPI;
- *deltap = -delta0;
-
-/* For all other cases, go through the procedure described in the WCS paper
- by Greisen & Calabretta, to find the position of the Native North Pole.
- First store some useful values. */
- } else {
- cos_theta0 = cos( theta0 );
- cos_delta0 = cos( delta0 );
- cos_phip = cos( *phip - phi0 );
- sin_delta0 = sin( delta0 );
- sin_phip = sin( *phip - phi0 );
-
-/* Next, find the two possible values for the latitude of the Native
- North Pole (deltap). If any stage of this transformation is
- indeterminate, return zero (except for the single special case noted
- in item 6 para. 2 of the WCS paper, for which LATPOLE specifies the
- values to be used). */
- t0 = cos_theta0*cos_phip;
- if( fabs( t0 ) < TOL2 && fabs( sin_theta0 ) < TOL2 ){
- if( latpole != AST__BAD ) {
- *deltap = latpole;
- } else {
- return 0;
- }
-
- } else {
- t1 = atan2( sin_theta0, t0 );
- t2 = cos_theta0*cos_phip;
- t2 *= t2;
- t2 += sin_theta0*sin_theta0;
- if( t2 <= DBL_MIN ){
- return 0;
-
- } else {
- t3 = sin_delta0/sqrt( t2 );
- if( fabs( t3 ) > 1.0 + TOL1 ){
- return 0;
-
- } else {
- if( t3 < -1.0 ){
- t4 = AST__DPI;
- } else if( t3 > 1.0 ){
- t4 = 0.0;
- } else {
- t4 = acos( t3 );
- }
- deltap_1 = palSlaDrange( t1 + t4 );
- deltap_2 = palSlaDrange( t1 - t4 );
-
-/* Select which of these two values of deltap to use. Values outside the
- range +/- PI/2 cannot be used. If both values are within this range
- use the value which is closest to the supplied value of latpole (or
- use the northern most value if the LATPOLE keyword was not supplied. */
- if( fabs( deltap_1 ) > AST__DPIBY2 + TOL2 ){
- *deltap = deltap_2;
-
- } else if( fabs( deltap_2 ) > AST__DPIBY2 + TOL2 ){
- *deltap = deltap_1;
-
- } else {
- if( latpole != AST__BAD ){
- if( fabs( deltap_1 - latpole ) <
- fabs( deltap_2 - latpole ) ){
- *deltap = deltap_1;
- } else {
- *deltap = deltap_2;
- }
- } else {
- if( deltap_1 > deltap_2 ){
- *deltap = deltap_1;
- } else {
- *deltap = deltap_2;
- }
-
-/* Issue a warning that a default latpole value has been adopted. */
- sprintf( buf, "The original FITS header did not specify "
- "the latitude of the native north pole. A "
- "default value of %.8g degrees was assumed.",
- (*deltap)*AST__DR2D );
- Warn( this, "nolatpole", buf, "astRead", "FitsChan", status );
-
- }
- }
- if( fabs( *deltap ) > AST__DPIBY2 + TOL2 ) {
- return 0;
- } else if( *deltap < -AST__DPIBY2 ){
- *deltap = -AST__DPIBY2;
- } else if( *deltap > AST__DPIBY2 ){
- *deltap = AST__DPIBY2;
- }
- }
- }
- }
-
-/* If a valid value for the latitude (deltap) has been found, find the
- longitude of the Native North Pole. */
- if( *deltap != AST__BAD ) {
- if( fabs( cos_delta0) > TOL2 ){
- cos_deltap = cos( *deltap );
- sin_deltap = sin( *deltap );
- if( fabs( cos_deltap ) > TOL2 ){
- t1 = sin_phip*cos_theta0/cos_delta0;
- t2 = ( sin_theta0 - sin_deltap*sin_delta0 )
- /( cos_delta0*cos_deltap );
- if( ( fabs( t1 ) > TOL2 ) || ( fabs( t2 ) > TOL2 ) ){
- *alphap = alpha0 - atan2( t1, t2 );
- } else {
- *alphap = alpha0;
- }
-
- } else if( sin_deltap > 0.0 ){
- *alphap = alpha0 + (*phip - phi0) - AST__DPI;
-
- } else {
- *alphap = alpha0 - (*phip - phi0);
- }
-
- } else {
- *alphap = alpha0;
- }
-
- } else {
- *alphap = AST__BAD;
- }
- }
-
-/* Return a success status if valid latitude and longitude values were
- found. */
- return (*deltap) != AST__BAD && (*alphap) != AST__BAD ;
-
-}
-
-static AstMapping *WcsOthers( AstFitsChan *this, FitsStore *store, char s,
- AstFrame **frm, AstFrame *iwcfrm, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* WcsOthers
-
-* Purpose:
-* Create a Mapping from intermediate world coords to any axes
-* which are not covered by specialised conventions.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* AstMapping *WcsOthers( AstFitsChan *this, FitsStore *store, char s,
-* AstFrame **frm, AstFrame *iwcfrm, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* This function interprets the contents of the supplied FitsStore
-* structure, looking for world coordinate axes for which no
-* description has yet been added to the supplied Frame . It is
-* assumed that any such axes are simple linear axes. It returns a
-* Mapping which simply adds on the CRVAL values to such axes.
-* It also modifies the supplied Frame to describe the axes.
-
-* Parameters:
-* this
-* The FitsChan.
-* store
-* A structure containing information about the requested axis
-* descriptions derived from a FITS header.
-* s
-* A character identifying the co-ordinate version to use. A space
-* means use primary axis descriptions. Otherwise, it must be an
-* upper-case alphabetical characters ('A' to 'Z').
-* frm
-* The address of a location at which to store a pointer to the
-* Frame describing the world coordinate axes.
-* iwcfrm
-* A pointer to the Frame describing the intermediate world coordinate
-* axes. The properties of this Frame may be changed on exit.
-* method
-* A pointer to a string holding the name of the calling method.
-* This is used only in the construction of error messages.
-* class
-* A pointer to a string holding the class of the object being
-* read. This is used only in the construction of error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the Mapping.
-
-*/
-
-/* Local Variables: */
- AstFrame *pfrm; /* Pointer to primary Frame */
- AstFrame *pfrm2; /* Pointer to primary Frame */
- AstMapping *map1; /* Pointer to a Mapping */
- AstMapping *map2; /* Pointer to a Mapping */
- AstMapping *ret; /* The returned Mapping */
- char **comms; /* Pointer to array of CTYPE commments */
- char buf[ 100 ]; /* Buffer for textual attribute value */
- char buf2[ 100 ]; /* Buffer for textual attribute value */
- char buf3[ 20 ]; /* Buffer for default CTYPE value */
- char *newdom; /* Pointer to new Domain value */
- const char *ckeyval; /* Pointer to character keyword value */
- int i; /* Axis index */
- int j; /* Axis index */
- int len; /* Used length of string */
- int naxes; /* no. of axes in Frame */
- int nother; /* The number of "other" axes */
- int paxis; /* Primary axis index */
- int usecom; /* Use CTYPE comments as axis Labels? */
-
-/* Initialise the pointer to the returned Mapping. */
- ret = NULL;
-
-/* Check the global status. */
- if ( !astOK ) return ret;
-
-/* Get the number of physical axes. */
- naxes = astGetNaxes( *frm );
-
-/* Assume we will use CTYPE comments as the axis labels. */
- usecom = 1;
-
-/* Initialise the count of "other" axes. */
- nother = 0;
-
-/* Get the comments associated with the CTYPE keywords for all "other"
- axes. */
- comms = astMalloc( naxes*sizeof( char * ) );
- if( comms ) {
-
-/* Loop round all axes in the Frame, and initialise the pointer to its
- comment. */
- for( i = 0; i < naxes; i++ ){
- comms[ i ] = NULL;
-
-/* Get the Domain for the primary frame containing the axis. This will be
- "AST_FITSCHAN" if the axis has not yet been recognised (this Domain is
- set up by WcsMapFrm). Only consider the axis further if the Domain has
- not been changed. */
- astPrimaryFrame( *frm, i, &pfrm, &paxis );
- if( !strcmp( astGetDomain( pfrm ), "AST_FITSCHAN" ) ) {
-
-/* Increment the count of "other" axes. */
- nother++;
-
-/* Get the comment associated with the CTYPE header. */
- ckeyval = GetItemC( &(store->ctype_com), i, s, NULL, method, class, status );
-
-/* If this axis has no CTYPE comment, we will use CTYPE values as axis
- labels (if given, the CNAME keyword take precedence). */
- if( !ckeyval || astChrLen( ckeyval ) == 0 ) {
- usecom = 0;
-
-/* If the CTYPE comment for this axis is the same as any other comment, we
- will use CTYPE values as axis labels. */
- } else {
- for( j = 0; j < nother - 1; j++ ) {
- if( comms[ j ] && !strcmp( ckeyval, comms[ j ] ) ) {
- usecom = 0;
- break;
- }
- }
- }
-
-/* If we are still using comments as axis labels, store a copy of it in the
- workspace. */
- if( usecom ) comms[ i ] = astStore( NULL, ckeyval,
- strlen( ckeyval ) + 1 );
- }
- pfrm = astAnnul( pfrm );
- }
-
-/* Free the workspace holding comments. */
- for( i = 0; i < naxes; i++ ) comms[ i ] = astFree( comms[ i ] );
- comms = astFree( comms );
-
- }
-
-/* If there are no "other" axes, just return a UnitMap. */
- if( nother == 0 ) {
- ret = (AstMapping *) astUnitMap( naxes, "", status );
-
-/* Otherwise... */
- } else {
-
-/* If we have only a single other axis, use CTYPE value instead of
- comment. */
- if( nother == 1 ) usecom = 0;
-
-/* Not yet started a new Domain value to replace "AST_FITSCHAN". */
- newdom = NULL;
- pfrm2 = NULL;
-
-/* Check each axis of the Frame looking for axes which have not yet been
- recognised. */
- for( i = 0; i < naxes; i++ ) {
-
-/* Get the Domain for the primary frame containing the axis. This will be
- "AST_FITSCHAN" if the axis has not yet been recognised (this Domain is
- set up by WcsMapFrm). Only consider the axis further if the Domain has
- not been changed. */
- astPrimaryFrame( *frm, i, &pfrm, &paxis );
- if( !strcmp( astGetDomain( pfrm ), "AST_FITSCHAN" ) ) {
-
-/* Save a pointer to the primary Frame which we will use to set the
- Domain of the primary Frame. */
- if( !pfrm2 ) pfrm2 = astClone( pfrm );
-
-/* Get the CTYPE value. Use a default of "AXISn". */
- ckeyval = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
- if( !ckeyval ) {
- sprintf( buf3, "AXIS%d", i + 1 );
- ckeyval = buf3;
- }
-
-/* If the CTYPE value ends with "-LOG", assume it is a logarithmically spaced
- axis. Get the Mapping from IWC to WCS. Reduce the used length of the
- CTYPE string to exlude any trailing "-LOG" string. */
- len = strlen( ckeyval );
- if( len > 3 && !strcmp( ckeyval + len - 4, "-LOG" ) ){
- map1 = LogWcs( store, i, s, method, class, status );
- sprintf( buf2, "%.*s", len - 4, ckeyval );
-
-/* Otherwise, assume the axis is linearly spaced. */
- } else {
- map1 = LinearWcs( store, i, s, method, class, status );
- sprintf( buf2, "%.*s", len, ckeyval );
- }
-
-/* Append the CTYPE value to the final Domain value for the primary Frame. */
- if( ckeyval && astChrLen( ckeyval ) > 0 ) {
- if( newdom ) {
- sprintf( buf, "%s-%s", newdom, buf2 );
- } else {
- sprintf( buf, "%s", buf2 );
- newdom = buf;
- }
- }
-
-/* Now modify the axis in the Frame to have appropriate values for the
- Unit, Label and Symbol attributes. Also set the Unit attribute for
- the corresponding axis in the IWC Frame. */
- if( ckeyval ) astSetSymbol( *frm, i, buf2 );
-
- ckeyval = GetItemC( &(store->cname), i, s, NULL, method, class, status );
- if( !ckeyval && usecom ) ckeyval = GetItemC( &(store->ctype_com),
- i, s, NULL, method, class, status );
- if( !ckeyval ) ckeyval = buf2;
- if( ckeyval ) astSetLabel( *frm, i, ckeyval );
-
- ckeyval = GetItemC( &(store->cunit), i, s, NULL, method, class, status );
- if( ckeyval ) {
- astSetUnit( *frm, i, ckeyval );
- astSetUnit( iwcfrm, i, ckeyval );
- }
-
-/* If this axis has been described by an earlier function (because it
- uses specialised conventions such as those described in FITS-WCS papers
- II or III), then create a UnitMap for this axis. */
- } else {
- map1 = (AstMapping *) astUnitMap( 1, "", status );
- }
-
-/* Annul the pointer to the primary Frame containing the current axis. */
- pfrm = astAnnul( pfrm );
-
-/* Add the Mapping for this axis in parallel with the current "running sum"
- Mapping (if any). */
- if( ret ) {
- map2 = (AstMapping *) astCmpMap( ret, map1, 0, "", status );
- ret = astAnnul( ret );
- map1 = astAnnul( map1 );
- ret = map2;
- } else {
- ret = map1;
- }
- }
-
-/* Set the Domain name for the primary Frame. It is currently set to
- AST_FITSCHAN. We replace it with a value formed by concatenating the
- CTYPE values of its axes. */
- if( pfrm2 ) {
- if( newdom && astChrLen( newdom ) > 0 ) {
- astSetDomain( pfrm2, newdom );
- } else {
- astClearDomain( pfrm2 );
- }
- pfrm2 = astAnnul( pfrm2 );
- }
-
-/* If the header contained a WCSNAME keyword, use it as the Domain name for
- the Frame. Also use it to create a title. */
- ckeyval = GetItemC( &(store->wcsname), 0, s, NULL, method, class, status );
- if( ckeyval ){
- astSetDomain( *frm, ckeyval );
- sprintf( buf, "%s coordinates", ckeyval );
- astSetTitle( *frm, buf );
- }
- }
-
-/* Return the result. */
- return ret;
-}
-
-static AstWinMap *WcsShift( FitsStore *store, char s, int naxes,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* WcsShift
-
-* Purpose:
-* Create a WinMap which shifts pixels coordinates so that their origin
-* is at the reference pixel.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* AstWinMap *WcsShift( FitsStore *store, char s, int naxes,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* A WinMap is created which implements a shift of origin by subtracting
-* the reference pixel coordinates (CRPIXi) from the input pixel
-* coordinates.
-
-* Parameters:
-* store
-* A structure containing values for FITS keywords relating to
-* the World Coordinate System.
-* s
-* A character identifying the co-ordinate version to use. A space
-* means use primary axis descriptions. Otherwise, it must be an
-* upper-case alphabetical characters ('A' to 'Z').
-* naxes
-* The number of intermediate world coordinate axes (WCSAXES).
-* method
-* A pointer to a string holding the name of the calling method.
-* This is used only in the construction of error messages.
-* class
-* A pointer to a string holding the class of the object being
-* read. This is used only in the construction of error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the created WinMap or a NULL pointer if an
-* error occurred.
-
-* Notes:
-* - If an error occurs, a NULL pointer is returned.
-
-*/
-
-/* Local Variables: */
- AstWinMap *new; /* The created WinMap */
- int j; /* Pixel axis index */
- double crpix; /* CRPIX keyword value */
- double *c1_in; /* Input corner 1 */
- double *c2_in; /* Input corner 2 */
- double *c1_out; /* Output corner 1 */
- double *c2_out; /* Output corner 2 */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the returned WinMap pointer. */
- new = NULL;
-
-/* Allocate memory to hold the two corners, in both input and output
- coordinates. */
- c1_in = (double *) astMalloc( sizeof( double )*(size_t) naxes );
- c1_out = (double *) astMalloc( sizeof( double )*(size_t) naxes );
- c2_in = (double *) astMalloc( sizeof( double )*(size_t) naxes );
- c2_out = (double *) astMalloc( sizeof( double )*(size_t) naxes );
-
-/* Check these pointers can be used. */
- if( astOK ){
-
-/* Set up two arbitrary corners in the input coordinate system, and the
- corresponding values with the CRPIX values subtracted off. */
- for( j = 0; j < naxes; j++ ){
-
-/* Get the CRPIX value for this axis. */
- crpix = GetItem( &(store->crpix), 0, j, s, NULL, method, class, status );
- if( crpix == AST__BAD ) crpix = 0.0;
-
-/* Store the corner co-ordinates. */
- c1_in[ j ] = 0.0;
- c2_in[ j ] = 1.0;
- c1_out[ j ] = -crpix;
- c2_out[ j ] = 1.0 - crpix;
- }
-
-/* Create the WinMap. */
- new = astWinMap( naxes, c1_in, c2_in, c1_out, c2_out, "", status );
-
-/* If an error has occurred, attempt to annul the new WinMap. */
- if( !astOK ) new = astAnnul( new );
-
- }
-
-/* Free the memory holding the corners. */
- c1_in = (double *) astFree( (void *) c1_in );
- c1_out = (double *) astFree( (void *) c1_out );
- c2_in = (double *) astFree( (void *) c2_in );
- c2_out = (double *) astFree( (void *) c2_out );
-
-/* Return the WinMap. */
- return new;
-
-}
-
-static AstSkyFrame *WcsSkyFrame( AstFitsChan *this, FitsStore *store, char s,
- int prj, char *sys, int axlon, int axlat,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* WcsSkyFrame
-
-* Purpose:
-* Create a SkyFrame to describe a WCS celestial coordinate system.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* AstSkyFrame *WcsSkyFrame( AstFitsChan this, FitsStore *store, char s, int prj,
-* char *sys, int axlon, int axlat, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* A SkyFrame is returned describing the celestial coordinate system
-* described by a FITS header. The axes are *not* permuted in the
-* returned Frame (that is, axis 0 is longitude and axis 1 is latitude
-* in the returned SkyFrame, no matter what values are supplied for
-* "axlat" and "axlon").
-
-* Parameters:
-* this
-* The FitsChan from which the keywords were read. Warning messages
-* may be added to this FitsChan.
-* store
-* A structure containing values for FITS keywords relating to
-* the World Coordinate System.
-* s
-* A character identifying the co-ordinate version to use. A space
-* means use primary axis descriptions. Otherwise, it must be an
-* upper-case alphabetical characters ('A' to 'Z').
-* prj
-* An integer code for the WCS projection being used.
-* sys
-* A pointer to a string identifying the celestial co-ordinate system
-* implied by the CTYPE values in the FitsStore. This will be "EQU" (for
-* equatorial), or a one or two character code extracted from the
-* CTYPE values.
-* axlon
-* Zero based index of the longitude axis in the FITS header.
-* axlat
-* Zero based index of the latitude axis in the FITS header.
-* method
-* The calling method. Used only in error messages.
-* class
-* The object class. Used only in error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the SkyFrame.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or
-* if this function should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSkyFrame *ret; /* Returned Frame */
- char *ckeyval; /* Pointer to string item value */
- char *lattype; /* Pointer to latitude CTYPE value */
- char *lontype; /* Pointer to longitude CTYPE value */
- char bj; /* Besselian/Julian selector */
- char buf[300]; /* Text buffer */
- char sym[10]; /* Axis symbol */
- double eqmjd; /* MJD equivalent of equinox */
- double equinox; /* EQUINOX value */
- double geolat; /* Observer's geodetic latitude */
- double geolon; /* Observer's geodetic longitude */
- double h; /* Observer's geodetic height */
- double mjdobs; /* MJD-OBS value */
- double obsgeo[ 3 ]; /* Observer's Cartesian position */
- int radesys; /* RADESYS value */
-
-/* Initialise. */
- ret = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return ret;
-
-/* Get the RADESYS keyword from the header, and identify the value.
- Store a integer value identifying the system. Report an error if an
- unrecognised system is supplied. Store NORADEC if the keyword was
- not supplied. */
- ckeyval = GetItemC( &(store->radesys), 0, s, NULL, method, class, status );
- radesys = NORADEC;
- if( ckeyval ){
- if( !strncmp( ckeyval, "FK4 ", 4 ) ||
- !strcmp( ckeyval, "FK4" ) ){
- radesys = FK4;
-
- } else if( !strncmp( ckeyval, "FK4-NO-E", 8 ) ){
- radesys = FK4NOE;
-
- } else if( !strncmp( ckeyval, "FK5 ", 4 ) ||
- !strcmp( ckeyval, "FK5" ) ){
- radesys = FK5;
-
- } else if( !strncmp( ckeyval, "ICRS ", 5 ) ||
- !strcmp( ckeyval, "ICRS" ) ){
- radesys = ICRS;
-
- } else if( !strncmp( ckeyval, "GAPPT ", 6 ) ||
- !strcmp( ckeyval, "GAPPT" ) ){
- radesys = GAPPT;
-
- } else if( astOK ){
- astError( AST__BDFTS, "%s(%s): FITS keyword '%s' has the "
- "unrecognised value '%s'.", status, method, class,
- FormatKey( "RADESYS", -1, -1, s, status ), ckeyval );
- }
-
- } else {
- radesys = NORADEC;
- }
-
-/* Get the value of the EQUINOX keyword. */
- equinox = GetItem( &(store->equinox), 0, 0, s, NULL, method, class, status );
-
-/* For FK4 and FK4-NO-E any supplied equinox value is Besselian. For all
- other systems, the equinox value is Julian. */
- bj = 0;
- if( equinox != AST__BAD ){
- if( radesys == FK4 || radesys == FK4NOE ){
- bj = 'B';
- } else if( radesys != NORADEC ) {
- bj = 'J';
-
-/* If no RADESYS was suppied, but an equinox was, use the IAU 1984 rule
- to determine the default RADESYS and equinox type. */
- } else {
- if( equinox < 1984.0 ){
- radesys = FK4;
- bj = 'B';
- } else {
- radesys = FK5;
- bj = 'J';
- }
-
-/* If an equatorial system is being used, give a warning that a default RADESYS
- value is being used. */
- if( !strcmp( sys, "EQU" ) ){
- sprintf( buf, "The original FITS header did not specify the "
- "RA/DEC reference frame. A default value of %s was "
- "assumed.", ( radesys == FK4 ) ? "FK4" : "FK5" );
- Warn( this, "noradesys", buf, method, class, status );
- }
- }
-
-/* If no equinox was supplied, use a default equinox value depending
- on the frame of reference. For FK4-based systems, use B1950. */
- } else {
- if( radesys == FK4 || radesys == FK4NOE ){
- equinox = 1950.0;
- bj = 'B';
-
-/* For FK5-based systems, use J2000. */
- } else if( radesys == FK5 ){
- equinox = 2000.0;
- bj = 'J';
-
-/* If no RADESYS or EQUINOX was supplied, assume either FK4 B1950 or ICRS -
- as decided by attribute DefB1950 (GAPPT and ICRS do not use EQUINOX). */
- } else if( radesys == NORADEC ) {
- if( astGetDefB1950( this ) ) {
- equinox = 1950.0;
- bj = 'B';
- radesys = FK4;
- } else {
- radesys = ICRS;
- }
- if( !strcmp( sys, "EQU" ) ){
- sprintf( buf, "The original FITS header did not specify the "
- "RA/DEC reference frame. A default value of %s was "
- "assumed.", ( radesys == FK4 ) ? "FK4" : "ICRS" );
- Warn( this, "noradesys", buf, method, class, status );
- }
- }
-
-/* If we have an equatorial or ecliptic system, issue a warning that a default
- equinox has been adopted. */
- if( ( !strcmp( sys, "EQU" ) && radesys != ICRS && radesys != GAPPT ) ||
- !strcmp( sys, "ECL" ) ){
- sprintf( buf, "The original FITS header did not specify the "
- "reference equinox. A default value of %c%.8g was "
- "assumed.", bj, equinox );
- Warn( this, "noequinox", buf, method, class, status );
- }
- }
-
-/* Convert the equinox to a Modified Julian Date. */
- if( equinox != AST__BAD ) {
- if( bj == 'B' ) {
- eqmjd = palSlaEpb2d( equinox );
- } else {
- eqmjd = palSlaEpj2d( equinox );
- }
- } else {
- eqmjd = AST__BAD;
- }
-
-/* Get a value for the Epoch attribute. If no value is available, use
- EQUINOX and issue a warning. */
- mjdobs = ChooseEpoch( store, s, method, class, status );
- if( mjdobs == AST__BAD ) {
- mjdobs = eqmjd;
- if( mjdobs != AST__BAD ) {
- sprintf( buf, "The original FITS header did not specify the "
- "date of observation. A default value of %c%.8g was "
- "assumed.", bj, equinox );
- Warn( this, "nomjd-obs", buf, method, class, status );
- }
- }
-
-/* Create a SkyFrame for the specified system. */
- if( !strcmp( sys, "E" ) ){
- ret = astSkyFrame( "System=Ecliptic", status );
-
- } else if( !strcmp( sys, "H" ) ){
- ret = astSkyFrame( "System=Helioecliptic", status );
-
- } else if( !(strcmp( sys, "G" ) ) ){
- ret = astSkyFrame( "System=Galactic", status );
-
- } else if( !(strcmp( sys, "S" ) ) ){
- ret = astSkyFrame( "System=Supergalactic", status );
-
- } else if( !(strcmp( sys, "AZL" ) ) ){
- ret = astSkyFrame( "System=AzEl", status );
-
- } else if( !(strcmp( sys, "EQU" ) ) ){
-
-/* For equatorial systems, the specific system is given by the RADESYS
- value. */
- if( radesys == FK4 ){
- ret = astSkyFrame( "System=FK4", status );
-
- } else if( radesys == FK4NOE ){
- ret = astSkyFrame( "System=FK4-NO-E", status );
-
- } else if( radesys == FK5 ){
- ret = astSkyFrame( "System=FK5", status );
-
- } else if( radesys == ICRS ){
- ret = astSkyFrame( "System=ICRS", status );
-
- } else if( radesys == GAPPT ){
- ret = astSkyFrame( "System=GAPPT", status );
-
- } else if( astOK ){
- astError( AST__INTER, "%s(%s): Internal AST programming "
- "error - FITS equatorial coordinate system type %d "
- "not yet supported in WcsSkyFrame.", status, method, class, radesys );
- }
-
-/* If an unknown celestial co-ordinate system was specified by the CTYPE
- keywords, add warning messages to the FitsChan and treat the axes as
- a general spherical coordinate system. */
- } else if( astOK ){
- ret = astSkyFrame( "System=UNKNOWN", status );
- strcpy( sym, sys );
- if( strlen( sys ) == 1 ) {
- strcpy( sym + 1, "LON" );
- astSetSymbol( ret, 0, sym );
- strcpy( sym + 1, "LAT" );
- astSetSymbol( ret, 1, sym );
- } else {
- strcpy( sym + 2, "LN" );
- astSetSymbol( ret, 0, sym );
- strcpy( sym + 2, "LT" );
- astSetSymbol( ret, 1, sym );
- }
-
- lontype = GetItemC( &(store->ctype), axlon, s, NULL, method, class, status );
- lattype = GetItemC( &(store->ctype), axlat, s, NULL, method, class, status );
- if( lontype && lattype ){
- sprintf( buf, "This FITS header contains references to an unknown "
- "spherical co-ordinate system specified in the values "
- "%s and %s. It may not be possible to convert to "
- "other standard co-ordinate systems.", lontype, lattype );
- Warn( this, "badcel", buf, method, class, status );
- }
- }
-
-/* If a skyFrame was created... */
- if( ret ){
-
- astSetIdent( ret, "ZZZ" );
-
-
-/* Store the projection description. */
- astSetProjection( ret, astWcsPrjDesc( prj ) );
-
-/* Store the epoch of the observation in the SkyFrame. */
- if( mjdobs != AST__BAD ) astSetEpoch( ret, mjdobs );
-
-/* For equatorial and ecliptic systems, store the epoch of the reference
- equinox in the SkyFrame. */
- if( ( !strcmp( sys, "EQU" ) || !strcmp( sys, "ECL" ) ) &&
- equinox != AST__BAD ) astSetEquinox( ret, eqmjd );
-
-/* If either of the CNAME keywords is set, use it as the axis label. */
- ckeyval = GetItemC( &(store->cname), axlon, s, NULL, method, class, status );
- if( ckeyval ) astSetLabel( ret, 0, ckeyval );
- ckeyval = GetItemC( &(store->cname), axlat, s, NULL, method, class, status );
- if( ckeyval ) astSetLabel( ret, 1, ckeyval );
-
-/* Observer's position (from primary axis descriptions). Get the OBSGEO-X/Y/Z
- keywords, convert to geodetic longitude and latitude and store as the
- SpecFrame's ObsLat, ObsLon and ObsAlt attributes. */
- obsgeo[ 0 ] = GetItem( &(store->obsgeox), 0, 0, ' ', NULL, method, class, status );
- obsgeo[ 1 ] = GetItem( &(store->obsgeoy), 0, 0, ' ', NULL, method, class, status );
- obsgeo[ 2 ] = GetItem( &(store->obsgeoz), 0, 0, ' ', NULL, method, class, status );
- if( obsgeo[ 0 ] != AST__BAD &&
- obsgeo[ 1 ] != AST__BAD &&
- obsgeo[ 2 ] != AST__BAD ) {
- Geod( obsgeo, &geolat, &h, &geolon, status );
- astSetObsLat( ret, geolat );
- astSetObsLon( ret, geolon );
- astSetObsAlt( ret, h );
- }
- }
-
-/* If an error has occurred, annul the Frame. */
- if( !astOK ) ret = astAnnul( ret );
-
-/* Return the Frame. */
- return ret;
-
-}
-
-static AstMapping *WcsSpectral( AstFitsChan *this, FitsStore *store, char s,
- AstFrame **frm, AstFrame *iwcfrm, double reflon, double reflat,
- AstSkyFrame *reffrm, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* WcsSpectral
-
-* Purpose:
-* Create a Mapping from intermediate world coords to spectral coords
-* as described in a FITS header.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* AstMapping *WcsSpectral( AstFitsChan *this, FitsStore *store, char s,
-* AstFrame **frm, AstFrame *iwcfrm, double reflon,
-* double reflat, AstSkyFrame *reffrm,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* This function interprets the contents of the supplied FitsStore
-* structure, looking for world coordinate axes which describe positions
-* in a spectrum. If such an axis is found, a Mapping is returned which
-* transforms the corresponding intermediate world coordinates to
-* spectral world coordinates (this mapping leaves any other axes
-* unchanged). It also, modifies the supplied Frame to describe the
-* axis (again, other axes are left unchanged). If no spectral axis
-* is found, a UnitMap is returned, and the supplied Frame is left
-* unchanged.
-
-* Parameters:
-* this
-* The FitsChan.
-* store
-* A structure containing information about the requested axis
-* descriptions derived from a FITS header.
-* s
-* A character identifying the co-ordinate version to use. A space
-* means use primary axis descriptions. Otherwise, it must be an
-* upper-case alphabetical characters ('A' to 'Z').
-* frm
-* The address of a location at which to store a pointer to the
-* Frame describing the world coordinate axes.
-* iwcfrm
-* A pointer to the Frame describing the intermediate world coordinate
-* axes. The properties of this Frame may be changed on exit.
-* reflon
-* The reference celestial longitude, in the frame given by reffrm.
-* reflat
-* The reference celestial latitude, in the frame given by reffrm.
-* reffrm
-* The SkyFrame defining reflon and reflat.
-* method
-* A pointer to a string holding the name of the calling method.
-* This is used only in the construction of error messages.
-* class
-* A pointer to a string holding the class of the object being
-* read. This is used only in the construction of error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the Mapping.
-
-*/
-
-/* Local Variables: */
- AstFrame *ofrm; /* Pointer to a Frame */
- AstMapping *map1; /* Pointer to Mapping */
- AstMapping *map2; /* Pointer to Mapping */
- AstMapping *ret; /* Pointer to the returned Mapping */
- AstSpecFrame *specfrm; /* Pointer to a SpecFrame */
- char algcode[ 5 ]; /* Displayed spectral type string */
- char stype[ 5 ]; /* Displayed spectral type string */
- const char *cname; /* Pointer to CNAME value */
- const char *ctype; /* Pointer to CTYPE value */
- const char *cunit; /* Pointer to CUNIT value */
- const char *defunit; /* Default unit string */
- const char *specsys; /* Pointer to SPECSYS value */
- const char *ssyssrc; /* Pointer to SSYSSRC value */
- double geolat; /* Observer's geodetic latitude */
- double geolon; /* Observer's geodetic longitude */
- double h; /* Observer's geodetic height */
- double mjd; /* Modified Julian Date */
- double obsgeo[ 3 ]; /* Observer's Cartesian position */
- double restfrq; /* RESTFRQ keyword value */
- double vsource; /* Source velocity */
- int *axes; /* Pointer to axis permutation array */
- int i; /* Axis index */
- int j; /* Loop count */
- int k; /* Loop count */
- int kk; /* Loop count */
- int naxes; /* No. of axes in Frame */
-
-/* Initialise the pointer to the returned Mapping. */
- ret = NULL;
-
-/* Check the global status. */
- if ( !astOK ) return ret;
-
-/* Get the number of physical axes. */
- naxes = astGetNaxes( *frm );
-
-/* An array to hold a list of axis selections. */
- axes = astMalloc( naxes*sizeof( int ) );
-
-/* Loop round checking each axis. */
- defunit = NULL;
- map1 = NULL;
- for( i = 0; i < naxes && astOK; i++ ) {
-
-/* Get the CTYPE value. Pass on to the next axis if no CTYPE is available. */
- ctype = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
- if( ctype ) {
-
-/* See if this CTYPE describes a spectral axis, and if so, extract the
- system code, the algorithm code and get the default units. */
- defunit = IsSpectral( ctype, stype, algcode, status );
-
-/* Skip to the next axis if the system type was not a spectral system
- type. */
- if( defunit ) {
-
-/* Create a SpecFrame or DSBSpecFrame with this system (the FITS type codes
- are also legal SpecFrame System values). We use astSetC rather than
- astSetSystem because astSetC translates string values into the
- corresponding integer system identifiers. */
- if( GetItem( &(store->imagfreq), 0, 0, s, NULL, method,
- class, status ) == AST__BAD ) {
- specfrm = astSpecFrame( "", status );
- } else {
- specfrm = (AstSpecFrame *) astDSBSpecFrame( "", status );
- }
- astSetC( specfrm, "System", stype );
-
-/* Set the reference position (attributes RefRA and RefDec), if known. */
- if( reffrm ) astSetRefPos( specfrm, reffrm, reflon, reflat );
-
-/* Set the SpecFrame units. Use the value of the CUNIT FITS keyword for this
- axis if available, otherwise use the default units for the system, noted
- above. */
- cunit = GetItemC( &(store->cunit), i, s, NULL, method, class, status );
- if( !cunit ) cunit = defunit;
- astSetUnit( specfrm, 0, cunit );
-
-/* Set the axis unit in the IWC Frame. */
- astSetUnit( iwcfrm, i, cunit );
-
-/* Get a value for the Epoch attribute (the date of observation). */
- mjd = ChooseEpoch( store, s, method, class, status );
- if( mjd != AST__BAD ) astSetEpoch( specfrm, mjd );
-
-/* Set the rest frequency. Use the RESTFRQ keyword (assumed to be in Hz),
- or (if RESTFRQ is not available), RESTWAV (assumes to be in m). */
- restfrq = GetItem( &(store->restfrq), 0, 0, s, NULL, method, class, status );
- if( restfrq == AST__BAD ) {
- restfrq = GetItem( &(store->restwav), 0, 0, s, NULL, method, class, status );
- if( restfrq != AST__BAD ) restfrq = AST__C/restfrq;
- }
- astSetRestFreq( specfrm, restfrq );
-
-/* Observer's position (from primary axis descriptions). Get the OBSGEO-X/Y/Z
- keywords, convert to geodetic longitude and latitude and store as the
- SpecFrame's ObsLat, ObsLon and ObsAlt attributes. */
- obsgeo[ 0 ] = GetItem( &(store->obsgeox), 0, 0, ' ', NULL, method, class, status );
- obsgeo[ 1 ] = GetItem( &(store->obsgeoy), 0, 0, ' ', NULL, method, class, status );
- obsgeo[ 2 ] = GetItem( &(store->obsgeoz), 0, 0, ' ', NULL, method, class, status );
- if( obsgeo[ 0 ] != AST__BAD &&
- obsgeo[ 1 ] != AST__BAD &&
- obsgeo[ 2 ] != AST__BAD ) {
- Geod( obsgeo, &geolat, &h, &geolon, status );
- astSetObsLat( specfrm, geolat );
- astSetObsLon( specfrm, geolon );
- astSetObsAlt( specfrm, h );
- }
-
-/* Source velocity rest frame */
- ssyssrc = GetItemC( &(store->ssyssrc), 0, s, NULL, method, class, status );
- if( ssyssrc ) astSetC( specfrm, "SourceVRF", ssyssrc );
-
-/* Source velocity. Use the ZSOURCE keyword and convert from redshift to
- velocity. */
- vsource = GetItem( &(store->zsource), 0, 0, s, NULL, method, class, status );
- if( vsource != AST__BAD ) {
- vsource += 1.0;
- vsource *= vsource;
- vsource = AST__C*( vsource - 1.0 )/( vsource + 1.0 );
- astSetSourceVel( specfrm, vsource );
- }
-
-/* Reference frame. If the SPECSYS keyword is set, use it (the FITS codes
- are also legal SpecFrame StdOfRest values). We use astSetC rather than
- astSetSystem because astSetC translates string values into the
- corresponding integer system identifiers. */
- specsys = GetItemC( &(store->specsys), 0, s, NULL, method, class, status );
- if( specsys ) astSetC( specfrm, "StdOfRest", specsys );
-
-/* Axis label. If the CNAME keyword is set, use it as the axis label. */
- cname = GetItemC( &(store->cname), i, s, NULL, method, class, status );
- if( cname ) astSetLabel( specfrm, 0, cname );
-
-/* Now do the extra stuff needed if we are creating a dual sideband
- SpecFrame. */
- if( astIsADSBSpecFrame( specfrm ) ) {
- DSBSetUp( this, store, (AstDSBSpecFrame *) specfrm, s,
- GetItem( &(store->crval), i, 0, s, NULL, method,
- class, status ), method, class, status );
- }
-
-/* Now branch for each type of algorithm code. Each case returns a 1D
- Mapping which converts IWC value into the specified Spectral system. */
-
-/* Linear */
- if( strlen( algcode ) == 0 ) {
- map1 = LinearWcs( store, i, s, method, class, status );
-
-/* Log-Linear */
- } else if( !strcmp( "-LOG", algcode ) ) {
- map1 = LogWcs( store, i, s, method, class, status );
-
-/* Non-Linear */
- } else if( algcode[ 0 ] == '-' && algcode[ 2 ] == '2' ) {
- map1 = NonLinSpecWcs( this, algcode, store, i, s, specfrm, method, class, status );
-
-/* Grism */
- } else if( !strcmp( "-GRI", algcode ) ||
- !strcmp( "-GRA", algcode ) ) {
- map1 = GrismSpecWcs( algcode, store, i, s, specfrm, method, class, status );
-
- } else {
- map1 = NULL;
- }
-
- if( map1 == NULL && astOK ) {
- astError( AST__BDFTS, "%s(%s): Cannot implement spectral "
- "algorithm code '%s' specified in FITS keyword '%s'.", status,
- method, class, ctype + 4, FormatKey( "CTYPE", i + 1, -1, s, status ) );
- astError( AST__BDFTS, "%s(%s): Unknown algorithm code or "
- "unusable parameter values.", status, method, class );
- break;
- }
-
-/* Create a Frame by picking all the other (non-spectral) axes from the
- supplied Frame. */
- j = 0;
- for( k = 0; k < naxes; k++ ) {
- if( k != i ) axes[ j++ ] = k;
- }
-
-/* If there were no other axes, replace the supplied Frame with the
- specframe. */
- if( j == 0 ) {
- (void) astAnnul( *frm );
- *frm = (AstFrame *) specfrm;
-
-/* Otherwise pick the other axes from the supplied Frame */
- } else {
- ofrm = astPickAxes( *frm, j, axes, NULL );
-
-/* Replace the supplied Frame with a CmpFrame made up of this Frame and
- the SpecFrame. */
- (void) astAnnul( *frm );
- *frm = (AstFrame *) astCmpFrame( ofrm, specfrm, "", status );
- ofrm = astAnnul( ofrm );
- specfrm = astAnnul( specfrm );
- }
-
-/* Permute the axis order to put the spectral axis back in its original
- position. */
- j = 0;
- for( kk = 0; kk < naxes; kk++ ) {
- if( kk == i ) {
- axes[ kk ] = naxes - 1;
- } else {
- axes[ kk ] = j++;
- }
- }
- astPermAxes( *frm, axes );
-
- }
- }
-
-/* If this axis is not a spectral axis, create a UnitMap (the Frame is left
- unchanged). */
- if( !map1 && astOK ) map1 = (AstMapping *) astUnitMap( 1, "", status );
-
-/* Add the Mapping for this axis in parallel with the Mappings for
- previous axes. */
- if( ret ) {
- map2 = (AstMapping *) astCmpMap( ret, map1, 0, "", status );
- ret = astAnnul( ret );
- map1 = astAnnul( map1 );
- ret = map2;
- } else {
- ret = map1;
- map1 = NULL;
- }
- }
-
-/* Free the axes array. */
- axes= astFree( axes );
-
-/* Return the result. */
- return ret;
-}
-
-static void WcsToStore( AstFitsChan *this, AstFitsChan *trans,
- FitsStore *store, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* WcsToStore
-
-* Purpose:
-* Extract WCS information from the supplied FitsChan using a FITSWCS
-* encoding, and store it in the supplied FitsStore.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void WcsToStore( AstFitsChan *this, AstFitsChan *trans,
-* FitsStore *store, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* A FitsStore is a structure containing a generalised represention of
-* a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-* from a set of FITS header cards (using a specified encoding), or
-* an AST FrameSet. In other words, a FitsStore is an encoding-
-* independant intermediary staging post between a FITS header and
-* an AST FrameSet.
-*
-* This function extracts FITSWCS keywords from the supplied FitsChan(s),
-* and stores the corresponding WCS information in the supplied FitsStore.
-* Keywords will be searched for first in "trans", and then, if they
-* are not found in "trans", they will be searched for in "this".
-
-* Parameters:
-* this
-* Pointer to the FitsChan containing the cards read from the
-* original FITS header. This may include non-standard keywords.
-* trans
-* Pointer to a FitsChan containing cards representing standard
-* translations of any non-standard keywords in "this". A NULL
-* pointer indicates that "this" contains no non-standard keywords.
-* store
-* Pointer to the FitsStore structure.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Read all usable cards out of the main FitsChan, into the FitsStore. */
- WcsFcRead( this, trans, store, method, class, status );
-
-/* If a FitsChan containing standard translations was supplied, read all
- cards out of it, into the FitsStore, potentially over-writing the
- non-standard values stored in the previous call to WcsFcRead. */
- if( trans ) WcsFcRead( trans, NULL, store, method, class, status );
-
-}
-
-
-static void WorldAxes( AstMapping *cmap, double *dim, int *perm, int *status ){
-/*
-* Name:
-* WorldAxes
-
-* Purpose:
-* Associate final world axes with pixel axes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void WorldAxes( AstMapping *cmap, double *dim, int *perm, int *status )
-
-* Class Membership:
-* FitsChan
-
-* Description:
-* This function finds the association between the axes of the final
-* world coordinate system, and those of the pixel coordinate
-* system. This may not simply be a 1-to-1 association because the
-* Mapping may include a PermMap. Each output axis is associated with
-* the input axis which is most nearly aligned with it.
-
-* Parameters:
-* map
-* Pointer to the Mapping from pixel coordinates to final world
-* coordinates.
-* dim
-* Pointer to an array with one element for each input of "map",
-* supplied holding the no. of pixels in the data cube along the axis, or
-* AST__BAD If unknown.
-* perm
-* Pointer to an array with one element for each output of "map".
-* On exit, each element of this array holds the zero-based index of the
-* "corresponding" (i.e. most nearly parallel) pixel axis.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstMapping *map;
- AstPointSet *pset1;
- AstPointSet *pset2;
- double **ptr1;
- double **ptr2;
- double *dw;
- double *g0;
- double *ntn;
- double *nwt;
- double *tn;
- double *w0;
- double *wt;
- double dg;
- double s;
- double sj;
- double tnmin;
- double wtmax;
- int i2;
- int i;
- int imin;
- int j2;
- int j;
- int jmin;
- int nin;
- int nout;
- int used;
-
-/* Check the status */
- if( !astOK ) return;
-
-/* Simplfy the Mapping. */
- map = astSimplify( cmap );
-
-/* Get the number of inputs and outputs for the Mapping. */
- nin = astGetNin( map );
- nout = astGetNout( map );
-
-/* Initialise "perm". */
- for( i = 0; i < nout; i++ ) perm[ i ] = i;
-
-/* Use FindBasisVectors to find an input position which coresponds to a
- good output position. Store it in a dynamic array pointed to by "g0". */
-
- pset1 = astPointSet( nin+1, nin, "", status );
- pset2 = astPointSet( nin+1, nout, "", status );
-
- if( FindBasisVectors( map, nin, nout, dim, pset1, pset2, status ) ) {
- g0 = astMalloc( sizeof(double)*nin );
- ptr1 = astGetPoints( pset1 );
- if( astOK ) {
- for( j = 0; j < nin; j++ ) g0[ j ] = ptr1[ j ][ 0 ];
- }
-
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
-
-/* If no basis vectors found, return. */
- } else {
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
- return;
- }
-
-/* Create Pointset to hold two input (pixel) points. */
- pset1 = astPointSet( 2, nin, "", status );
- ptr1 = astGetPoints( pset1 );
-
-/* Create a Pointset to hold the same number of output (world) points. */
- pset2 = astPointSet( 2, nout, "", status );
- ptr2 = astGetPoints( pset2 );
-
-/* Allocate memory to use as work space */
- w0 = astMalloc( sizeof(double)*nout );
- dw = astMalloc( sizeof(double)*nout );
- tn = astMalloc( sizeof(double)*nout*nin );
- wt = astMalloc( sizeof(double)*nout*nin );
-
-/* Check that the pointers can be used. */
- if( astOK ) {
-
-/* Transform the grid position found above, plus a position 1 pixel away
- along all pixel axes, into world coords. Also set up "dw" to hold
- "a small increment" along each world axis. */
- for( j = 0; j < nin; j++ ) {
- ptr1[ j ] [ 0 ] = g0[ j ];
- ptr1[ j ] [ 1 ] = g0[ j ] + 1.0;
- }
-
- (void) astTransform( map, pset1, 1, pset2 );
-
- for( i = 0; i < nout; i++ ) {
- w0[ i ] = ptr2[ i ] [ 0 ];
- if( w0[ i ] != AST__BAD && ptr2[ i ] [ 1 ] != AST__BAD ) {
- dw[ i ] = fabs( 0.1*( ptr2[ i ] [ 1 ] - w0[ i ] ) );
- if( dw[ i ] <= fabs( 0.001*w0[ i ] ) ) {
- if( w0[ i ] != 0.0 ) {
- dw[ i ] = fabs( 0.001*w0[ i ] );
- } else {
- dw[ i ] = 1.0;
- }
- }
- } else {
- dw[ i ] = AST__BAD;
- }
- }
-
-/* Any PermMap in the mapping may result in the the "inverse transformation"
- not being a true inverse of the forward transformation (for instance,
- constant values fed in for degenerate axis would have this effect). To
- ensure that "g0" and "w0" are corresponding positions, transform the
- "w0" position back into grid coords and use the resulting grid position
- as "g0". */
- (void) astTransform( map, pset2, 0, pset1 );
- for( j = 0; j < nin; j++ ) {
- g0[ j ] = ptr1[ j ] [ 0 ];
- }
-
-/* In the next loop we find the tan of the angle between each WCS axis and
- each of the pixel axes. Loop round each WCS axis. */
- for( i = 0; i < nout; i++ ) {
-
-/* Initialise the tan values for this WCS axis to AST__BAD. */
- ntn = tn + i*nin;
- nwt = wt + i*nin;
- for( j = 0; j < nin; j++ ) ntn[ j ] = AST__BAD;
-
-/* As a side issue, initialise the pixel axis assigned to each WCS axis
- to -1, to indicate that no grid axis has yet been associated with this
- WCS axis. */
- perm[ i ] = -1;
-
-/* Skip over this axis if the increment is bad. */
- if( dw[ i ] != AST__BAD ) {
-
-/* Store a WCS position which is offset from the "w0" position by a small
- amount along the current WCS axis. The first position in "ptr2" is
- currently "w0". */
- ptr2[ i ][ 0 ] += dw[ i ];
-
-/* Transform this position into grid coords. */
- (void) astTransform( map, pset2, 0, pset1 );
-
-/* Re-instate the original "w0" values within "ptr2", ready for the next
- WCS axis. */
- ptr2[ i ][ 0 ] = w0[ i ];
-
-/* Consider each pixel axis in turn as a candidate for being assigned to
- the current WCS axis. */
- for( j = 0; j < nin; j++ ) {
-
-/* Find the tan of the angle between the current ("i"th) WCS axis and the
- current ("j"th) pixel axis. This gets stored in tn[j+nin*i]. A
- corresponding weight for each angle is stored in nwt[j+nin*i]. This
- is the length of the projection of the vector onto the "j"th pixel
- axis. */
- s = 0.0;
- sj = 0.0;
- for( j2 = 0; j2 < nin; j2++ ) {
- if( ptr1[ j2 ][ 0 ] != AST__BAD ) {
- dg = ptr1[ j2 ][ 0 ] - g0[ j2 ];
- if( j2 != j ) {
- s += dg*dg;
- } else {
- sj = fabs( dg );
- }
- } else {
- s = AST__BAD;
- break;
- }
- }
- if( s != AST__BAD && sj != 0.0 ) {
- ntn[ j ] = sqrt( s )/sj;
- nwt[ j ] = sj;
- }
- }
- }
- }
-
-/* Loop until every grid axes has been assigned to a WCS axis. */
- while( 1 ) {
-
-/* Pass through the array of tan values, finding the smallest. Note the
- pixel and WCS axis for which the smallest tan value occurs. If the tan
- values are equal, favour the one with highest weight. */
- ntn = tn;
- nwt = wt;
- tnmin = AST__BAD;
- wtmax = AST__BAD;
- imin = 0;
- jmin = 0;
- for( i = 0; i < nout; i++ ) {
- for( j = 0; j < nin; j++ ) {
- if( *ntn != AST__BAD ) {
- if( tnmin == AST__BAD || *ntn < tnmin ) {
- tnmin = *ntn;
- wtmax = *nwt;
- imin = i;
- jmin = j;
- } else if( EQUAL( *ntn, tnmin ) && *nwt > wtmax ) {
- wtmax = *nwt;
- imin = i;
- jmin = j;
- }
- }
- ntn++;
- nwt++;
- }
- }
-
-/* Check we found a usable minimum tan value */
- if( tnmin != AST__BAD ) {
-
-/* Assign the pixel axis to the WCS axis. */
- perm[ imin ] = jmin;
-
-/* Set bad all the tan values for this pixel and WCS axis pair. This ensures
- that the pixel axis will not be assigned to another WCS axis, and that
- the WCS will not have another pixel axis assigned to it. */
- ntn = tn;
- for( i = 0; i < nout; i++ ) {
- for( j = 0; j < nin; j++ ) {
- if( i == imin || j == jmin ) *ntn = AST__BAD;
- ntn++;
- }
- }
-
-/* Leave the loop if no more good tan values were found. */
- } else {
- break;
- }
- }
-
-/* The above process may have left some WCS axes with out any assigned
- pixel axis. We assign the remaining pixel arbitrarily to such axes,
- starting with the first remaining pixel axis. Find the lowest unused
- pixel axis. */
- for( j = 0; j < nin; j++ ) {
-
- used = 0;
- for( i = 0; i < nout; i++ ) {
- if( perm[ i ] == j ) {
- used = 1;
- break;
- }
- }
-
- if( !used ) break;
- }
-
-/* Now check each WCS axis looking for outputs which were not assigned a
- pixel axis in the above process. */
- for( i = 0; i < nout; i++ ) {
- if( perm[ i ] == -1 ) {
-
-/* Use the next unused axis value. */
- perm[ i ] = j++;
-
-/* Find the next unused axis value. */
- for( ; j < nin; j++ ) {
-
- used = 0;
- for( i2 = 0; i2 < nout; i2++ ) {
- if( perm[ i2 ] == j ) {
- used = 1;
- break;
- }
- }
-
- if( !used ) break;
- }
- }
- }
- }
-
-/* Free resources. */
- map = astAnnul( map );
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
- g0 = astFree( g0 );
- w0 = astFree( w0 );
- tn = astFree( tn );
- wt = astFree( wt );
- dw = astFree( dw );
-
-}
-
-static int Write( AstChannel *this_channel, AstObject *object, int *status ) {
-/*
-* Name:
-* Write
-
-* Purpose:
-* Write an Object to a FitsChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* int Write( AstChannel *this, AstObject *object, int *status )
-
-* Class Membership:
-* FitsChan member function (over-rides the astWrite method
-* inherited from the Channel class).
-
-* Description:
-* This function writes an Object to a FitsChan.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* object
-* Pointer to the Object which is to be written.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The number of Objects written to the FitsChan by this invocation of
-* astWrite.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the AST error status set, or if it should fail for any
-* reason.
-* - The Base Frame in the FrameSet is used as the pixel Frame, and
-* the Current Frame is used to create the primary axis descriptions.
-* Attempts are made to create secondary axis descriptions for any
-* other Frames in the FrameSet (up to a total of 26).
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstFitsChan *this; /* Pointer to the FitsChan structure */
- FitsStore *store; /* Intermediate storage for WCS information */
- char banner[ AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN + 1 ]; /* Buffer for begin/end banner */
- const char *class; /* Pointer to string holding object class */
- const char *method; /* Pointer to string holding calling method */
- double *dim; /* Pointer to array of axis dimensions */
- int card0; /* Index of original current card */
- int comm; /* Value of Comm attribute */
- int encoding; /* FITS encoding scheme to use */
- int i; /* Axis index */
- int icurr; /* Original current Frame index */
- int naxis; /* No. of pixel axes */
- int ret; /* Number of objects read */
-
-/* Initialise. */
- ret = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return ret;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_channel);
-
-/* Obtain a pointer to the FitsChan structure. */
- this = (AstFitsChan *) this_channel;
-
-/* Ensure the source function has been called */
- ReadFromSource( this, status );
-
-/* Store the calling method, and object class. */
- method = "astWrite";
- class = astGetClass( this );
-
-/* The original current card is re-instated at the end if no object
- is written. Save its index. */
- card0 = astGetCard( this );
-
-/* Indicate that all cards added to the FitsCHan by this call should be
- marked as "new". */
- mark_new = 1;
-
-/* Get the encoding scheme used by the FitsChan. */
- encoding = astGetEncoding( this );
-
-/* First deal with cases where we are writing to a FitsChan in which AST
- objects are encoded using native AST-specific keywords... */
- if( encoding == NATIVE_ENCODING ){
-
-/* Increment the nesting level which keeps track of recursive
- invocations of this function. */
- write_nest++;
-
-/* Initialise the current indentation level for top-level objects. */
- if ( !write_nest ) current_indent = 0;
-
-/* Obtain the value of the Comm attribute. */
- comm = astGetComment( this );
-
-/* If this is the top-level invocation (i.e. we are about to write out
- a new top-level Object), then prefix it with a blank FITS line and
- an appropriate banner of FITS comments, unless comments have been
- suppressed. */
- if ( !write_nest && comm ) {
- astSetFitsCom( this, " ", "", 0 );
- MakeBanner(
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
- "", "", banner, status );
- astSetFitsCom( this, "COMMENT", banner, 0 );
-
- if( astIsAFrameSet( object ) ) {
- MakeBanner( "WCS information in AST format", "", "", banner, status );
- astSetFitsCom( this, "COMMENT", banner, 0 );
- MakeBanner( "See http://www.starlink.ac.uk/ast/", "", "", banner, status );
- astSetFitsCom( this, "COMMENT", banner, 0 );
- }
-
- MakeBanner( HEADER_TEXT, astGetClass( object ), " object", banner, status );
- astSetFitsCom( this, "COMMENT", banner, 0 );
- MakeBanner(
-"................................................................",
- "", "", banner, status );
- astSetFitsCom( this, "COMMENT", banner, 0 );
- }
-
-/* Invoke the parent astWrite method to write out the Object data. */
- (*parent_write)( this_channel, object, status );
-
-/* Append a banner of FITS comments to the object data, as above, if
- necessary. */
- if ( !write_nest && comm ) {
- MakeBanner(
-"................................................................",
- "", "", banner, status );
- astSetFitsCom( this, "COMMENT", banner, 0 );
- MakeBanner( FOOTER_TEXT, astGetClass( object ), " object", banner, status );
- astSetFitsCom( this, "COMMENT", banner, 0 );
- MakeBanner(
-"----------------------------------------------------------------",
- "", "", banner, status );
- astSetFitsCom( this, "COMMENT", banner, 0 );
- }
-
-/* Return the nesting level to its previous value. */
- write_nest--;
-
-/* Indicate that an object has been written. */
- ret = 1;
-
-/* Now deal with cases where we are writing to a FitsChan in which AST
- objects are encoded using any of the supported foreign encodings... */
- } else {
-
-/* Only proceed if the supplied object is a FrameSet. */
- if( astIsAFrameSet( object ) ){
-
-/* Note the number of pixel (i.e. Base Frame) axes, and allocate memory to
- hold the image dimensions. */
- naxis = astGetNin( (AstFrameSet *) object );
- dim = (double *) astMalloc( sizeof(double)*naxis );
- if( dim ){
-
-/* Note the image dimensions, if known. If not, store AST__BAD values. */
- for( i = 0; i < naxis; i++ ){
- if( !astGetFitsF( this, FormatKey( "NAXIS", i + 1, -1, ' ', status ),
- dim + i ) ) dim[ i ] = AST__BAD;
- }
-
-/* Add a new current Frame into the FrameSet which increases the chances of
- the requested encoding being usable. The index of the original current
- Frame is returned, or AST__NOFRAME if no new Frame was added. */
- icurr = AddEncodingFrame( this, (AstFrameSet *) object,
- encoding, method, class, status );
-
-/* Extract the required information from the FrameSet into a standard
- intermediary structure called a FitsStore. The indices of any
- celestial axes are returned. */
- store = FsetToStore( this, (AstFrameSet *) object, naxis, dim,
- method, class, status );
-
-/* Remove the Frame (if any) added above, and re-instate the original current
- Frame. */
- if( icurr != AST__NOFRAME ) {
- astRemoveFrame( (AstFrameSet *) object, AST__CURRENT );
- astSetCurrent( (AstFrameSet *) object, icurr );
- }
-
-/* If the FrameSet cannot be described in terms of any of the supported
- FITS encodings, a null pointer will have been returned. */
- if( store ){
-
-/* Now put header cards describing the contents of the FitsStore into the
- supplied FitsChan, using the requested encoding. Zero or one is
- returned depending on whether the information could be encoded. */
- ret = FitsFromStore( this, store, encoding, dim,
- (AstFrameSet *) object, method, class, status );
-
-/* Release the resources used by the FitsStore. */
- store = FreeStore( store, status );
-
-/* If the Object was written to the FitsChan, set the current card to
- end-of-file. */
- if( ret ) astSetCard( this, INT_MAX );
- }
-
-/* Free workspace holding image dimensions */
- dim = (double *) astFree( (void *) dim );
- }
- }
- }
-
-/* If an error has occurred, return zero and remove any new cards added
- to the FitsCHan by this call. */
- if( !astOK ) ret = 0;
-
-/* Clear the new flag associated with cards which have been added to the
- FitsChan as a result of this function. If the object was not added
- succesfully to the FitsChan, remove any cards which were added before
- the error was discovered. */
- FixNew( this, NEW1, !ret, method, class, status );
- FixNew( this, NEW2, !ret, method, class, status );
-
-/* Indicate that all cards added to the FitsChan from now on should not be
- marked as "new". */
- mark_new = 0;
-
-/* If no object was written, re-instate the original current card. */
- if( !ret ) astSetCard( this, card0 );
-
-/* Return the answer. */
- return ret;
-}
-
-static void WriteBegin( AstChannel *this_channel, const char *class,
- const char *comment, int *status ) {
-/*
-* Name:
-* WriteBegin
-
-* Purpose:
-* Write a "Begin" data item to a data sink.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void WriteBegin( AstChannel *this, const char *class,
-* const char *comment )
-
-* Class Membership:
-* FitsChan member function (over-rides the protected astWriteBegin
-* method inherited from the Channel class).
-
-* Description:
-* This function writes a "Begin" data item to the data sink
-* associated with a FitsChan, so as to begin the output of a new
-* Object definition.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* class
-* Pointer to a constant null-terminated string containing the
-* name of the class to which the Object belongs.
-* comment
-* Pointer to a constant null-terminated string containing a
-* textual comment to be associated with the "Begin"
-* item. Normally, this will describe the purpose of the Object.
-
-* Notes:
-* - The comment supplied may not actually be used, depending on
-* the nature of the FitsChan supplied.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstFitsChan *this; /* Pointer to the FitsChan structure. */
- char buff[ AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN + 1 ];
- /* Character buffer */
- char keyword[ FITSNAMLEN + 1 ]; /* Buffer for FITS keyword */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_channel);
-
-/* Obtain a pointer to the FitsChan structure. */
- this = (AstFitsChan *) this_channel;
-
-/* Increment the indentation level for comments. */
- current_indent += INDENT_INC;
-
-/* If we are not beginning a top-level Object definition, and helpful
- information has not been suppressed, generate an indented comment
- to mark the "Begin" item and write it to the FitsChan as a comment
- card with a blank keyword. */
- if ( write_nest && ( astGetFull( this ) >= 0 ) ) {
- MakeIndentedComment( current_indent, '+', "Beginning of ", class, buff, status );
- astSetFitsCom( this, " ", buff, 0 );
- }
-
-/* Create a unique FITS keyword for this "Begin" item, basing it on
- "BEGAST". */
- CreateKeyword( this, "BEGAST", keyword, status );
-
-/* Generate a pre-quoted version of the class name. */
- PreQuote( class, buff, status );
-
-/* Write the "Begin" item to the FitsChan as a keyword and string
- value. */
- astSetFitsS( this, keyword, buff,
- astGetComment( this ) ? comment : NULL, 0 );
-
-/* Clear the count of items written. */
- items_written = 0;
-}
-
-static void WriteDouble( AstChannel *this_channel, const char *name,
- int set, int helpful,
- double value, const char *comment, int *status ) {
-/*
-* Name:
-* WriteDouble
-
-* Purpose:
-* Write a double value to a data sink.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void WriteDouble( AstChannel *this, const char *name,
-* int set, int helpful,
-* double value, const char *comment )
-
-* Class Membership:
-* FitsChan member function (over-rides the protected
-* astWriteDouble method inherited from the Channel class).
-
-* Description:
-* This function writes a named double value, representing the
-* value of a class instance variable, to the data sink associated
-* with a FitsChan. It is intended for use by class "Dump"
-* functions when writing out class information which will
-* subsequently be re-read.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* name
-* Pointer to a constant null-terminated string containing the
-* name to be used to identify the value in the external
-* representation. This will form the key for identifying it
-* again when it is re-read. The name supplied should be unique
-* within its class.
-*
-* Mixed case may be used and will be preserved in the external
-* representation (where possible) for cosmetic effect. However,
-* case is not significant when re-reading values.
-*
-* It is recommended that a maximum of 6 alphanumeric characters
-* (starting with an alphabetic character) be used. This permits
-* maximum flexibility in adapting to standard external data
-* representations (e.g. FITS).
-* set
-* If this is zero, it indicates that the value being written is
-* a default value (or can be re-generated from other values) so
-* need not necessarily be written out. Such values will
-* typically be included in the external representation with
-* (e.g.) a comment character so that they are available to
-* human readers but will be ignored when re-read. They may also
-* be completely omitted in some circumstances.
-*
-* If "set" is non-zero, the value will always be explicitly
-* included in the external representation so that it can be
-* re-read.
-* helpful
-* This flag provides a hint about whether a value whose "set"
-* flag is zero (above) should actually appear at all in the
-* external representaton.
-*
-* If the external representation allows values to be "commented
-* out" then, by default, values will be included in this form
-* only if their "helpful" flag is non-zero. Otherwise, they
-* will be omitted entirely. When possible, omitting the more
-* obscure values associated with a class is recommended in
-* order to improve readability.
-*
-* This default behaviour may be further modified if the
-* FitsChan's Full attribute is set - either to permit all
-* values to be shown, or to suppress non-essential information
-* entirely.
-* value
-* The value to be written.
-* comment
-* Pointer to a constant null-terminated string containing a
-* textual comment to be associated with the value.
-*
-* Note that this comment may not actually be used, depending on
-* the nature of the FitsChan supplied and the setting of its
-* Comm attribute.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstFitsChan *this; /* Pointer to the FitsChan structure. */
- char keyword[ FITSNAMLEN + 1 ]; /* Buffer for FITS keyword */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_channel);
-
-/* Obtain a pointer to the FitsChan structure. */
- this = (AstFitsChan *) this_channel;
-
-/* Use the "set" and "helpful" flags, along with the FitsChan's
- attributes to decide whether this value should actually be
- written. */
- if ( Use( this, set, helpful, status ) ) {
-
-/* Create a unique FITS keyword from the name supplied. */
- CreateKeyword( this, name, keyword, status );
-
-/* Write the value to the FitsChan as a keyword and value */
- astSetFitsF( this, keyword, value,
- astGetComment( this ) ? comment : NULL, 0 );
-
-/* If the value is not "set", replace the card just written by a COMMENT
- card containing the text of the card as the comment. */
- if( !set ) MakeIntoComment( this, "astWrite", astGetClass( this ), status );
-
-/* Increment the count of items written. */
- items_written++;
- }
-}
-
-static void WriteEnd( AstChannel *this_channel, const char *class, int *status ) {
-/*
-* Name:
-* WriteEnd
-
-* Purpose:
-* Write an "End" data item to a data sink.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void WriteEnd( AstChannel *this, const char *class )
-
-* Class Membership:
-* FitsChan member function (over-rides the protected astWriteEnd
-* method inherited from the Channel class).
-
-* Description:
-* This function writes an "End" data item to the data sink
-* associated with a FitsChan. This item delimits the end of an
-* Object definition.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* class
-* Pointer to a constant null-terminated string containing the
-* class name of the Object whose definition is being terminated
-* by the "End" item.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstFitsChan *this; /* Pointer to the FitsChan structure. */
- char buff[ AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN + 1 ];
- /* Character buffer */
- char keyword[ FITSNAMLEN + 1 ]; /* Buffer for FITS keyword */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_channel);
-
-/* Obtain a pointer to the FitsChan structure. */
- this = (AstFitsChan *) this_channel;
-
-/* Create a unique FITS keyword for this "End" item, basing it on
- "ENDAST". */
- CreateKeyword( this, "ENDAST", keyword, status );
-
-/* Generate a pre-quoted version of the class name. */
- PreQuote( class, buff, status );
-
-/* Write the "End" item to the FitsChan as a keyword and string
- value. */
- astSetFitsS( this, keyword, buff,
- astGetComment( this ) ? "End of object definition" : NULL,
- 0 );
-
-/* If we are not ending a top-level Object definition, and helpful
- information has not been suppressed, generate an indented comment
- to mark the "End" item and write it to the FitsChan as a comment
- card with a blank keyword. */
- if ( write_nest && ( astGetFull( this ) >= 0 ) ) {
- MakeIndentedComment( current_indent, '-', "End of ", class, buff, status );
- astSetFitsCom( this, " ", buff, 0 );
- }
-
-/* Decrement the indentation level for comments. */
- current_indent -= INDENT_INC;
-
-}
-
-static void WriteInt( AstChannel *this_channel, const char *name,
- int set, int helpful,
- int value, const char *comment, int *status ) {
-/*
-* Name:
-* WriteInt
-
-* Purpose:
-* Write an int value to a data sink.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void WriteInt( AstChannel *this, const char *name,
-* int set, int helpful,
-* int value, const char *comment )
-
-* Class Membership:
-* FitsChan member function (over-rides the protected
-* astWriteInt method inherited from the Channel class).
-
-* Description:
-* This function writes a named int value, representing the
-* value of a class instance variable, to the data sink associated
-* with a FitsChan. It is intended for use by class "Dump"
-* functions when writing out class information which will
-* subsequently be re-read.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* name
-* Pointer to a constant null-terminated string containing the
-* name to be used to identify the value in the external
-* representation. This will form the key for identifying it
-* again when it is re-read. The name supplied should be unique
-* within its class.
-*
-* Mixed case may be used and will be preserved in the external
-* representation (where possible) for cosmetic effect. However,
-* case is not significant when re-reading values.
-*
-* It is recommended that a maximum of 6 alphanumeric characters
-* (starting with an alphabetic character) be used. This permits
-* maximum flexibility in adapting to standard external data
-* representations (e.g. FITS).
-* set
-* If this is zero, it indicates that the value being written is
-* a default value (or can be re-generated from other values) so
-* need not necessarily be written out. Such values will
-* typically be included in the external representation with
-* (e.g.) a comment character so that they are available to
-* human readers but will be ignored when re-read. They may also
-* be completely omitted in some circumstances.
-*
-* If "set" is non-zero, the value will always be explicitly
-* included in the external representation so that it can be
-* re-read.
-* helpful
-* This flag provides a hint about whether a value whose "set"
-* flag is zero (above) should actually appear at all in the
-* external representaton.
-*
-* If the external representation allows values to be "commented
-* out" then, by default, values will be included in this form
-* only if their "helpful" flag is non-zero. Otherwise, they
-* will be omitted entirely. When possible, omitting the more
-* obscure values associated with a class is recommended in
-* order to improve readability.
-*
-* This default behaviour may be further modified if the
-* FitsChan's Full attribute is set - either to permit all
-* values to be shown, or to suppress non-essential information
-* entirely.
-* value
-* The value to be written.
-* comment
-* Pointer to a constant null-terminated string containing a
-* textual comment to be associated with the value.
-*
-* Note that this comment may not actually be used, depending on
-* the nature of the FitsChan supplied and the setting of its
-* Comm attribute.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstFitsChan *this; /* Pointer to the FitsChan structure. */
- char keyword[ FITSNAMLEN + 1 ]; /* Buffer for FITS keyword */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_channel);
-
-/* Obtain a pointer to the FitsChan structure. */
- this = (AstFitsChan *) this_channel;
-
-/* Use the "set" and "helpful" flags, along with the FitsChan's
- attributes to decide whether this value should actually be
- written. */
- if ( Use( this, set, helpful, status ) ) {
-
-/* Create a unique FITS keyword from the name supplied. */
- CreateKeyword( this, name, keyword, status );
-
-/* Write the value to the FitsChan as a keyword and value */
- astSetFitsI( this, keyword, value,
- astGetComment( this ) ? comment : NULL, 0 );
-
-/* If the value is not "set", replace the card just written by a COMMENT
- card containing the text of the card as the comment. */
- if( !set ) MakeIntoComment( this, "astWrite", astGetClass( this ), status );
-
-/* Increment the count of items written. */
- items_written++;
- }
-}
-
-static void WriteIsA( AstChannel *this_channel, const char *class,
- const char *comment, int *status ) {
-/*
-* Name:
-* WriteIsA
-
-* Purpose:
-* Write an "IsA" data item to a data sink.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void WriteIsA( AstChannel *this, const char *class,
-* const char *comment )
-
-* Class Membership:
-* FitsChan member function (over-rides the protected astWriteIsA
-* method inherited from the Channel class).
-
-* Description:
-* This function writes an "IsA" data item to the data sink
-* associated with a FitsChan. This item delimits the end of the
-* data associated with the instance variables of a class, as part
-* of an overall Object definition.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* class
-* Pointer to a constant null-terminated string containing the
-* name of the class whose data are terminated by the "IsA"
-* item.
-* comment
-* Pointer to a constant null-terminated string containing a
-* textual comment to be associated with the "IsA"
-* item. Normally, this will describe the purpose of the class
-* whose data are being terminated.
-
-* Notes:
-* - The comment supplied may not actually be used, depending on
-* the nature of the FitsChan supplied.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstFitsChan *this; /* Pointer to the FitsChan structure. */
- char buff[ AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN + 1 ];
- /* Character buffer */
- char keyword[ FITSNAMLEN + 1 ]; /* Buffer for FITS keyword */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_channel);
-
-/* Obtain a pointer to the FitsChan structure. */
- this = (AstFitsChan *) this_channel;
-
-/* Output an "IsA" item only if there has been at least one item
- written since the last "Begin" or "IsA" item, or if the Full
- attribute for the Channel is greater than zero (requesting maximum
- information). */
- if ( items_written || astGetFull( this ) > 0 ) {
-
-/* Create a unique FITS keyword for this "IsA" item, basing it on
- "ISA". */
- CreateKeyword( this, "ISA", keyword, status );
-
-/* Generate a pre-quoted version of the class name. */
- PreQuote( class, buff, status );
-
-/* Write the "IsA" item to the FitsChan as a keyword and string
- value. */
- astSetFitsS( this, keyword, buff,
- astGetComment( this ) ? comment : NULL, 0 );
-
-/* If helpful information has not been suppressed, generate an
- indented comment to mark the "IsA" item and write it to the
- FitsChan as a comment card with a blank keyword. */
- if ( astGetFull( this ) >= 0 ) {
- MakeIndentedComment( current_indent, '.', "Class boundary", "",
- buff, status );
- astSetFitsCom( this, " ", buff, 0 );
- }
- }
-
-/* Clear the count of items written. */
- items_written = 0;
-}
-
-static void WriteObject( AstChannel *this_channel, const char *name,
- int set, int helpful,
- AstObject *value, const char *comment, int *status ) {
-/*
-* Name:
-* WriteObject
-
-* Purpose:
-* Write an Object value to a data sink.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void WriteObject( AstChannel *this, const char *name,
-* int set, int helpful,
-* AstObject *value, const char *comment )
-
-* Class Membership:
-* FitsChan member function (over-rides the protected
-* astWriteObject method inherited from the Channel class).
-
-* Description:
-* This function writes a named Object value, representing the
-* value of a class instance variable, to the data sink associated
-* with a FitsChan. It is intended for use by class "Dump"
-* functions when writing out class information which will
-* subsequently be re-read.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* name
-* Pointer to a constant null-terminated string containing the
-* name to be used to identify the value in the external
-* representation. This will form the key for identifying it
-* again when it is re-read. The name supplied should be unique
-* within its class.
-*
-* Mixed case may be used and will be preserved in the external
-* representation (where possible) for cosmetic effect. However,
-* case is not significant when re-reading values.
-*
-* It is recommended that a maximum of 6 alphanumeric characters
-* (starting with an alphabetic character) be used. This permits
-* maximum flexibility in adapting to standard external data
-* representations (e.g. FITS).
-* set
-* If this is zero, it indicates that the value being written is
-* a default value (or can be re-generated from other values) so
-* need not necessarily be written out. Such values will
-* typically be included in the external representation with
-* (e.g.) a comment character so that they are available to
-* human readers but will be ignored when re-read. They may also
-* be completely omitted in some circumstances.
-*
-* If "set" is non-zero, the value will always be explicitly
-* included in the external representation so that it can be
-* re-read.
-* helpful
-* This flag provides a hint about whether a value whose "set"
-* flag is zero (above) should actually appear at all in the
-* external representaton.
-*
-* If the external representation allows values to be "commented
-* out" then, by default, values will be included in this form
-* only if their "helpful" flag is non-zero. Otherwise, they
-* will be omitted entirely. When possible, omitting the more
-* obscure values associated with a class is recommended in
-* order to improve readability.
-*
-* This default behaviour may be further modified if the
-* FitsChan's Full attribute is set - either to permit all
-* values to be shown, or to suppress non-essential information
-* entirely.
-* value
-* A pointer to the Object to be written.
-* comment
-* Pointer to a constant null-terminated string containing a
-* textual comment to be associated with the value.
-*
-* Note that this comment may not actually be used, depending on
-* the nature of the FitsChan supplied and the setting of its
-* Comm attribute.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstFitsChan *this; /* Pointer to the FitsChan structure. */
- char keyword[ FITSNAMLEN + 1 ]; /* Buffer for FITS keyword */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_channel);
-
-/* Obtain a pointer to the FitsChan structure. */
- this = (AstFitsChan *) this_channel;
-
-/* Use the "set" and "helpful" flags, along with the FitsChan's
- attributes to decide whether this value should actually be
- written. */
- if ( Use( this, set, helpful, status ) ) {
-
-/* Create a unique FITS keyword from the name supplied. */
- CreateKeyword( this, name, keyword, status );
-
-/* Write the value to the FitsChan as a keyword and a blank string value,
- not pre-quoted (this "null" value indicates that an Object description
- follows). */
- astSetFitsS( this, keyword, "",
- astGetComment( this ) ? comment : NULL, 0 );
-
-/* If the value is "set", write out the Object description. */
- if ( set ) {
- astWrite( this, value );
-
-/* If the value is not set, replace the card just written to the FitsChan
- by COMENT card containing the keyword and blank string value (do not
- write out the Object description). */
- } else {
- MakeIntoComment( this, "astWrite", astGetClass( this ), status );
- }
-
-/* Increment the count of items written. */
- items_written++;
- }
-}
-
-static void WriteToSink( AstFitsChan *this, int *status ){
-/*
-* Name:
-* WriteToSink
-
-* Purpose:
-* Write the contents of the FitsChan out through the sink function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void WriteToSink( AstFitsChan *this, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* Each card in the FitsChan is passed in turn to the sink function
-* specified when the FitsChan was created. If no sink function was
-* provided, the cards are not written out. Cards marked as having been
-* read into an AST object are not written out.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The current card is left unchanged.
-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- char card[ AST__FITSCHAN_FITSCARDLEN + 1]; /* Buffer for header card */
- int icard; /* Current card index on entry */
- int old_ignore_used; /* Original value of external variable ignore_used */
-
-/* Check the global status. */
- if( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Only proceed if a sink function and wrapper were supplied. */
- if( this->sink && this->sink_wrap ){
-
-/* Store the current card index. */
- icard = astGetCard( this );
-
-/* Indicate that cards which have been read into an AST object should skipped
- over by the functions which navigate the linked list of cards. */
- old_ignore_used = ignore_used;
- ignore_used = 1;
-
-/* Ensure that the first card in the FitsChan will be the next one to be
- read. */
- astSetCard( this, 1 );
-
-/* Loop round obtaining and writing out each card, until all cards have been
- processed. */
- while( !astFitsEof( this ) && astOK ){
-
-/* Get the current card, and write it out through the sink function.
- The call to astFindFits increments the current card. */
- if( astFindFits( this, "%f", card, 1 ) ) {
-
-/* The sink function is an externally supplied function which may not be
- thread-safe, so lock a mutex first. */
- LOCK_MUTEX3;
- ( *this->sink_wrap )( *this->sink, card, status );
- UNLOCK_MUTEX3;
- }
- }
-
-/* Re-instate the original flag indicating if cards marked as having been
- read should be skipped over. */
- ignore_used = old_ignore_used;
-
-/* Set the current card index back to what it was on entry. */
- astSetCard( this, icard );
- }
-}
-
-static void WriteString( AstChannel *this_channel, const char *name,
- int set, int helpful,
- const char *value, const char *comment, int *status ) {
-/*
-* Name:
-* WriteString
-
-* Purpose:
-* Write a string value to a data sink.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* void WriteString( AstChannel *this, const char *name,
-* int set, int helpful,
-* const char *value, const char *comment )
-
-* Class Membership:
-* FitsChan member function (over-rides the protected
-* astWriteString method inherited from the Channel class).
-
-* Description:
-* This function writes a named string value, representing the
-* value of a class instance variable, to the data sink associated
-* with a FitsChan. It is intended for use by class "Dump"
-* functions when writing out class information which will
-* subsequently be re-read.
-
-* Parameters:
-* this
-* Pointer to the FitsChan.
-* name
-* Pointer to a constant null-terminated string containing the
-* name to be used to identify the value in the external
-* representation. This will form the key for identifying it
-* again when it is re-read. The name supplied should be unique
-* within its class.
-*
-* Mixed case may be used and will be preserved in the external
-* representation (where possible) for cosmetic effect. However,
-* case is not significant when re-reading values.
-*
-* It is recommended that a maximum of 6 alphanumeric characters
-* (starting with an alphabetic character) be used. This permits
-* maximum flexibility in adapting to standard external data
-* representations (e.g. FITS).
-* set
-* If this is zero, it indicates that the value being written is
-* a default value (or can be re-generated from other values) so
-* need not necessarily be written out. Such values will
-* typically be included in the external representation with
-* (e.g.) a comment character so that they are available to
-* human readers but will be ignored when re-read. They may also
-* be completely omitted in some circumstances.
-*
-* If "set" is non-zero, the value will always be explicitly
-* included in the external representation so that it can be
-* re-read.
-* helpful
-* This flag provides a hint about whether a value whose "set"
-* flag is zero (above) should actually appear at all in the
-* external representaton.
-*
-* If the external representation allows values to be "commented
-* out" then, by default, values will be included in this form
-* only if their "helpful" flag is non-zero. Otherwise, they
-* will be omitted entirely. When possible, omitting the more
-* obscure values associated with a class is recommended in
-* order to improve readability.
-*
-* This default behaviour may be further modified if the
-* FitsChan's Full attribute is set - either to permit all
-* values to be shown, or to suppress non-essential information
-* entirely.
-* value
-* Pointer to a constant null-terminated string containing the
-* value to be written.
-* comment
-* Pointer to a constant null-terminated string containing a
-* textual comment to be associated with the value.
-*
-* Note that this comment may not actually be used, depending on
-* the nature of the FitsChan supplied and the setting of its
-* Comm attribute.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstFitsChan *this; /* Pointer to the FitsChan structure. */
- char *c; /* Pointer to next buffer character */
- char buff1[ AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN - 3 ]; /* Buffer for a single substring */
- char buff2[ AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN - 3 ]; /* Buffer for pre-quoted string */
- char cc; /* Next character */
- char keyword[ FITSNAMLEN + 1 ]; /* Buffer for FITS keyword */
- const char *start; /* Pointer to start of substring */
- int first; /* Is this the first sub-string? */
- int nc; /* No. of available columns remaining */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_channel);
-
-/* Obtain a pointer to the FitsChan structure. */
- this = (AstFitsChan *) this_channel;
-
-/* Use the "set" and "helpful" flags, along with the FitsChan's
- attributes to decide whether this value should actually be
- written. */
- if ( Use( this, set, helpful, status ) ) {
-
-/* Create a unique FITS keyword from the name supplied. */
- CreateKeyword( this, name, keyword, status );
-
-/* Store a pointer to the start of the next sub-string (i.e. the
- beggining of the string), and then loop round until the end of the
- string is reached. */
- start = value;
- first = 1;
- while( *start && astOK ){
-
-/* Store the number of characters available in the 80 column header card
- for the next substring, leaving room for the "= " string at the start,
- and the delimiting quotes. Also reserve 2 characters to allow for the
- possibility of double quotes being needed to protect trailing white space
- (see function PreQuote). */
- nc = AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN - 6;
-
-/* If this is the first sub-string reserve room for any comment. */
- if( first ){
- if( comment && comment[0] ) nc -= ChrLen( comment, status ) + 3;
-
-/* If the first card will be turned into a comment card, we need to leave room
- for the keyword name and equals sign, etc, within the 80 columns. */
- if( !set ) nc -= FITSNAMLEN + 5;
- }
-
-/* We need to check the sub-string for single quotes since these will
- take up 2 characters each instead of 1 when encoded since single quotes
- within a string are doubled. Search through from the starting
- character, copying the sub-string into a buffer, and reducing the number
- of available characters remaining in the card for each character. */
- c = buff1;
- while( *start && nc > 0 ){
- cc = *(start++);
- *(c++) = cc;
-
- if( cc == '\'' ) {
- nc -= 2;
- } else {
- nc -= 1;
- }
- }
-
-/* If the last character in the substring was a single quote, there may
- not have been room for the extra quote which is added when the
- sub-string is encoded. In this case we need to back up a character in
- order to remove the single quote frin this substring and move it into
- the next sub-string. */
- if( nc < 0 ){
- start--;
- c--;
- }
-
-/* If the supplied value has not been exhausted, append an ampersand to
- the string. In this case we need to move the last character in the
- substring into the next substring to make room for the ampersand. */
- if( *start ) {
- start--;
- c--;
- *(c++) = '&';
- }
-
-/* Terminate the buffer. */
- *c = 0;
-
-/* The FITS standard considers trailing white space is be insignificant,
- and so we need to guard against external applications throwing away
- significant trailing white space. This is done by encosing the string,
- including trailing white space, in double quotes. */
- PreQuote( buff1, buff2, status );
-
-/* On the first pass through this loop, write the value to the FitsChan as
- a keyword and value */
- if( first ){
- astSetFitsS( this, keyword, buff2,
- astGetComment( this ) ? comment : NULL, 0 );
-
-/* If the value is not "set", replace the card just written by a COMMENT
- card containing the text of the card as the comment. */
- if( !set ) MakeIntoComment( this, "astWrite", astGetClass( this ), status );
-
-/* On subsequent passes through the loop, store the string using a CONTINUE
- keyword, with type AST__CONTINUE (this type is like AST__STRING but is
- formatted without an equals sign). */
- } else {
- astSetFitsCN( this, "CONTINUE", buff2, NULL, 0 );
- }
-
- first = 0;
- }
-
-/* Increment the count of items written. */
- items_written++;
- }
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/* Card. */
-/* ===== */
-/*
-*att++
-* Name:
-* Card
-
-* Purpose:
-* Index of current FITS card in a FitsChan.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer.
-
-* Description:
-* This attribute gives the index of the "current" FITS header card
-* within a FitsChan, the first card having an index of 1. The
-c choice of current card affects the behaviour of functions that
-f choice of current card affects the behaviour of routines that
-c access the contents of the FitsChan, such as astDelFits,
-c astFindFits and astPutFits.
-f access the contents of the FitsChan, such as AST_DELFITS,
-f AST_FINDFITS and AST_PUTFITS.
-*
-* A value assigned to Card will position the FitsChan at any
-* desired point, so that a particular card within it can be
-* accessed. Alternatively, the value of Card may be enquired in
-* order to determine the current position of a FitsChan.
-*
-* The default value of Card is 1. This means that clearing
-c this attribute (using astClear) effectively "rewinds" the
-f this attribute (using AST_CLEAR) effectively "rewinds" the
-* FitsChan, so that the first card is accessed next. If Card is
-* set to a value which exceeds the total number of cards in the
-* FitsChan (as given by its Ncard attribute), it is regarded as
-* pointing at the "end-of-file". In this case, the value returned
-* in response to an enquiry is always one more than the number of
-* cards in the FitsChan.
-
-* Applicability:
-* FitsChan
-* All FitsChans have this attribute.
-*att--
-*/
-
-/* Encoding. */
-/* ========= */
-/*
-*att++
-* Name:
-* Encoding
-
-* Purpose:
-* System for encoding Objects as FITS headers.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute specifies the encoding system to use when AST
-* Objects are stored as FITS header cards in a FitsChan. It
-c affects the behaviour of the astWrite and astRead functions when
-f affects the behaviour of the AST_WRITE and AST_READ routines when
-* they are used to transfer any AST Object to or from an external
-* representation consisting of FITS header cards (i.e. whenever a
-* write or read operation is performed using a FitsChan as the I/O
-* Channel).
-*
-* There are several ways (conventions) by which coordinate system
-* information may be represented in the form of FITS headers and
-* the Encoding attribute is used to specify which of these should
-* be used. The encoding options available are outlined in the
-* "Encodings Available" section below, and in more detail in the
-* sections which follow.
-*
-* Encoding systems differ in the range of possible Objects
-* (e.g. classes) they can represent, in the restrictions they
-* place on these Objects (e.g. compatibility with some
-* externally-defined coordinate system model) and in the number of
-* Objects that can be stored together in any particular set of
-* FITS header cards (e.g. multiple Objects, or only a single
-* Object). The choice of encoding also affects the range of
-* external applications which can potentially read and interpret
-* the FITS header cards produced.
-*
-* The encoding options available are not necessarily mutually
-* exclusive, and it may sometimes be possible to store multiple
-* Objects (or the same Object several times) using different
-* encodings within the same set of FITS header cards. This
-* possibility increases the likelihood of other applications being
-* able to read and interpret the information.
-*
-* By default, a FitsChan will attempt to determine which encoding
-* system is already in use, and will set the default Encoding
-* value accordingly (so that subsequent I/O operations adopt the
-* same conventions). It does this by looking for certain critical
-* FITS keywords which only occur in particular encodings. For
-* details of how this works, see the "Choice of Default Encoding"
-* section below. If you wish to ensure that a particular encoding
-* system is used, independently of any FITS cards already present,
-* you should set an explicit Encoding value yourself.
-
-* Encodings Available:
-* The Encoding attribute can take any of the following (case
-* insensitive) string values to select the corresponding encoding
-* system:
-*
-* - "DSS": Encodes coordinate system information in FITS header
-* cards using the convention developed at the Space Telescope
-* Science Institute (STScI) for the Digitised Sky Survey (DSS)
-* astrometric plate calibrations. The main advantages of this
-* encoding are that FITS images which use it are widely available
-* and it is understood by a number of important and
-* well-established astronomy applications. For further details,
-* see the section "The DSS Encoding" below.
-*
-* - "FITS-WCS": Encodes coordinate system information in FITS
-* header cards using the conventions described in the FITS
-* world coordinate system (FITS-WCS) papers by E.W. Greisen,
-* M. Calabretta, et al. The main advantages of this encoding are that
-* it should be understood by any FITS-WCS compliant application and
-* is likely to be adopted widely for FITS data in future. For further
-* details, see the section "The FITS-WCS Encoding" below.
-*
-* - "FITS-PC": Encodes coordinate system information in FITS
-* header cards using the conventions described in an earlier draft
-* of the FITS world coordinate system papers by E.W. Greisen and
-* M. Calabretta. This encoding uses a combination of CDELTi and
-* PCiiijjj keywords to describe the scale and rotation of the pixel
-* axes. This encoding is included to support existing data and
-* software which uses these now superceded conventions. In general,
-* the "FITS-WCS" encoding (which uses CDi_j or PCi_j keywords to
-* describe the scale and rotation) should be used in preference to
-* "FITS-PC".
-*
-* - "FITS-IRAF": Encodes coordinate system information in FITS
-* header cards using the conventions described in the document
-* "World Coordinate Systems Representations Within the FITS
-* Format" by R.J. Hanisch and D.G. Wells, 1988. This encoding is
-* currently employed by the IRAF data analysis facility, so its
-* use will facilitate data exchange with IRAF. Its main advantages
-* are that it is a stable convention which approximates to a
-* subset of the propsed FITS-WCS encoding (above). This makes it
-* suitable as an interim method for storing coordinate system
-* information in FITS headers until the FITS-WCS encoding becomes
-* stable. Since many datasets currently use the FITS-IRAF
-* encoding, conversion of data from FITS-IRAF to the final form of
-* FITS-WCS is likely to be well supported.
-*
-* - "FITS-AIPS": Encodes coordinate system information in FITS
-* header cards using the conventions originally introduced by the
-* AIPS data analysis facility. This is base on the use of CDELTi and
-* CROTAi keuwords to desribe the scale and rotation of each axis.
-* These conventions have been superceded but are still widely used.
-*
-* - "FITS-AIPS++": Encodes coordinate system information in FITS
-* header cards using the conventions used by the AIPS++ project.
-* This is an extension of FITS-AIPS which includes some of the
-* features of FITS-IRAF and FITS-PC.
-*
-* - "FITS-CLASS": Encodes coordinate system information in FITS
-* header cards using the conventions used by the CLASS project.
-* CLASS is a software package for reducing single-dish radio and
-* sub-mm spectroscopic data. See the section "CLASS FITS format" at
-* http://www.iram.fr/IRAMFR/GILDAS/doc/html/class-html/.
-*
-* - "NATIVE": Encodes AST Objects in FITS header cards using a
-* convention which is private to the AST library (but adheres to
-* the general FITS standard) and which uses FITS keywords that
-* will not clash with other encoding systems. The main advantages
-* of this are that any class of AST Object may be encoded, and any
-* (reasonable) number of Objects may be stored sequentially in the
-* same FITS header. This makes FITS headers an almost loss-less
-* communication path for passing AST Objects between applications
-* (although all such applications must, of course, make use of the
-* AST library to interpret the information). For further details,
-* see the section "The NATIVE Encoding" below.
-
-* Choice of Default Encoding:
-* If the Encoding attribute of a FitsChan is not set, the default
-* value it takes is determined by the presence of certain critical
-* FITS keywords within the FitsChan. The sequence of decisions
-* used to arrive at the default value is as follows:
-*
-* - If the FitsChan contains any keywords beginning with the
-* string "BEGAST", then NATIVE encoding is used,
-* - Otherwise, FITS-CLASS is used if the FitsChan contains a DELTAV
-* keyword and a keyword of the form VELO-xxx, where xxx indicates one
-* of the rest frames used by class (e.g. "VELO-LSR").
-* - Otherwise, if the FitsChan contains a CTYPE keyword which
-* represents a spectral axis using the conventions of the AIPS and
-* AIPS++ projects (e.g. "FELO-LSR", etc), then one of FITS-AIPS or
-* FITS-AIPS++ encoding is used. FITS-AIPS++ is used if any of the
-* keywords CDi_j, PROJP, LONPOLE or LATPOLE are
-* found in the FitsChan. Otherwise FITS-AIPS is used.
-* - Otherwise, if the FitsChan contains a keyword of the form
-* "PCiiijjj", where "i" and "j" are single digits, then
-* FITS-PC encoding is used,
-* - Otherwise, if the FitsChan contains a keyword of the form
-* "CDiiijjj", where "i" and "j" are single digits, then
-* FITS-IRAF encoding is used,
-* - Otherwise, if the FitsChan contains a keyword of the form
-* "CDi_j", and at least one of RADECSYS, PROJPi, or CjVALi
-* where "i" and "j" are single digits, then FITS-IRAF encoding is
-* used.
-* - Otherwise, if the FitsChan contains any keywords of the form
-* PROJPi, CjVALi or RADECSYS, where "i" and "j" are single digits,
-* then FITS-PC encoding is used.
-* - Otherwise, if the FitsChan contains a keyword of the form
-* CROTAi, where "i" is a single digit, then FITS-AIPS encoding is
-* used.
-* - Otherwise, if the FitsChan contains a keyword of the form
-* CRVALi, where "i" is a single digit, then FITS-WCS encoding is
-* used.
-* - Otherwise, if the FitsChan contains the "PLTRAH" keyword, then
-* DSS encoding is used,
-* - Otherwise, if none of these conditions is met (as would be the
-* case when using an empty FitsChan), then NATIVE encoding is
-* used.
-*
-* Except for the NATIVE and DSS encodings, all the above checks
-* also require that the header contains at least one CTYPE, CRPIX and
-* CRVAL keyword (otherwise the checking process continues to the next
-* case).
-*
-* Setting an explicit value for the Encoding attribute always
-* over-rides this default behaviour.
-*
-* Note that when writing information to a FitsChan, the choice of
-* encoding will depend greatly on the type of application you
-* expect to be reading the information in future. If you do not
-* know this, there may sometimes be an advantage in writing the
-* information several times, using a different encoding on each
-* occasion.
-
-* The DSS Encoding:
-* The DSS encoding uses FITS header cards to store a multi-term
-* polynomial which relates pixel positions on a digitised
-* photographic plate to celestial coordinates (right ascension and
-* declination). This encoding may only be used to store a single
-* AST Object in any set of FITS header cards, and that Object must
-* be a FrameSet which conforms to the STScI/DSS coordinate system
-* model (this means the Mapping which relates its base and current
-* Frames must include either a DssMap or a WcsMap with type
-* AST__TAN or AST__TPN).
-*
-c When reading a DSS encoded Object (using astRead), the FitsChan
-f When reading a DSS encoded Object (using AST_READ), the FitsChan
-* concerned must initially be positioned at the first card (its
-* Card attribute must equal 1) and the result of the read, if
-* successful, will always be a pointer to a FrameSet. The base
-* Frame of this FrameSet represents DSS pixel coordinates, and the
-* current Frame represents DSS celestial coordinates. Such a read
-* is always destructive and causes the FITS header cards required
-* for the construction of the FrameSet to be removed from the
-* FitsChan, which is then left positioned at the "end-of-file". A
-* subsequent read using the same encoding will therefore not
-* return another FrameSet, even if the FitsChan is rewound.
-*
-c When astWrite is used to store a FrameSet using DSS encoding,
-f When AST_WRITE is used to store a FrameSet using DSS encoding,
-* an attempt is first made to simplify the FrameSet to see if it
-* conforms to the DSS model. Specifically, the current Frame must
-* be a FK5 SkyFrame; the projection must be a tangent plane
-* (gnomonic) projection with polynomial corrections conforming to
-* DSS requirements, and north must be parallel to the second base
-* Frame axis.
-*
-* If the simplification process succeeds, a description of the
-* FrameSet is written to the FitsChan using appropriate DSS FITS
-* header cards. The base Frame of the FrameSet is used to form the
-* DSS pixel coordinate system and the current Frame gives the DSS
-* celestial coordinate system. A successful write operation will
-* over-write any existing DSS encoded data in the FitsChan, but
-* will not affect other (non-DSS) header cards. If a destructive
-* read of a DSS encoded Object has previously occurred, then an
-* attempt will be made to store the FITS header cards back in
-* their original locations.
-*
-* If an attempt to simplify a FrameSet to conform to the DSS model
-* fails (or if the Object supplied is not a FrameSet), then no
-c data will be written to the FitsChan and astWrite will return
-f data will be written to the FitsChan and AST_WRITE will return
-* zero. No error will result.
-
-* The FITS-WCS Encoding:
-* The FITS-WCS convention uses FITS header cards to describe the
-* relationship between pixels in an image (not necessarily
-* 2-dimensional) and one or more related "world coordinate systems".
-* The FITS-WCS encoding may only be used to store a single AST Object
-* in any set of FITS header cards, and that Object must be a FrameSet
-* which conforms to the FITS-WCS model (the FrameSet may, however,
-* contain multiple Frames which will be result in multiple FITS
-* "alternate axis descriptions"). Details of the use made by this
-* Encoding of the conventions described in the FITS-WCS papers are
-* given in the appendix "FITS-WCS Coverage" of this document. A few
-* main points are described below.
-*
-* The rotation and scaling of the intermediate world coordinate system
-* can be specified using either "CDi_j" keywords, or "PCi_j" together
-* with "CDELTi" keywords. When writing a FrameSet to a FitsChan, the
-* the value of the CDMatrix attribute of the FitsChan determines
-* which system is used.
-*
-* In addition, this encoding supports the "TAN with polynomial correction
-* terms" projection which was included in a draft of the FITS-WCS paper,
-* but was not present in the final version. A "TAN with polynomial
-* correction terms" projection is represented using a WcsMap with type
-* AST__TPN (rather than AST__TAN which is used to represent simple
-* TAN projections). When reading a FITS header, a CTYPE keyword value
-* including a "-TAN" code results in an AST__TPN projection if there are
-* any projection parameters (given by the PVi_m keywords) associated with
-* the latitude axis, or if there are projection parameters associated
-* with the longitude axis for m greater than 4. When writing a
-* FrameSet to a FITS header, an AST__TPN projection gives rise to a
-* CTYPE value including the normal "-TAN" code, but the projection
-* parameters are stored in keywords with names "QVi_m", instead of the
-* usual "PVi_m". Since these QV parameters are not part of the
-* FITS-WCS standard they will be ignored by other non-AST software,
-* resulting in the WCS being interpreted as a simple TAN projection
-* without any corrections. This should be seen as an interim solution
-* until such time as an agreed method for describing projection
-* distortions within FITS-WCS has been published.
-*
-* AST extends the range of celestial coordinate sytstems which may be
-* described using this encoding by inclusion of the allowing the use of
-* "AZ--" and "EL--" as the coordinate specification within CTYPE
-* values. These form a longitude/latitude pair of axes which describe
-* azimuth and elevation. The geographic position of the observer
-* should be supplied using the OBSGEO-X/Y/Z keywords described in FITS-WCS
-* paper III. Currently, a simple model is used which includes diurnal
-* aberration, but ignores atmospheric refraction, polar motion, etc.
-* These may be added in a leter release.
-*
-c When reading a FITS-WCS encoded Object (using astRead), the FitsChan
-f When reading a FITS-WCS encoded Object (using AST_READ), the FitsChan
-* concerned must initially be positioned at the first card (its
-* Card attribute must equal 1) and the result of the read, if
-* successful, will always be a pointer to a FrameSet. The base
-* Frame of this FrameSet represents FITS-WCS pixel coordinates,
-* and the current Frame represents the physical coordinate system
-* described by the FITS-WCS primary axis descriptions. If
-* secondary axis descriptions are also present, then the FrameSet
-* may contain additional (non-current) Frames which represent
-* these. Such a read is always destructive and causes the FITS
-* header cards required for the construction of the FrameSet to be
-* removed from the FitsChan, which is then left positioned at the
-* "end-of-file". A subsequent read using the same encoding will
-* therefore not return another FrameSet, even if the FitsChan is
-* rewound.
-*
-c When astWrite is used to store a FrameSet using FITS-WCS
-f When AST_WRITE is used to store a FrameSet using FITS-WCS
-* encoding, an attempt is first made to simplify the FrameSet to
-* see if it conforms to the FITS-WCS model. If this simplification
-* process succeeds (as it often should, as the model is reasonably
-* flexible), a description of the FrameSet is written to the
-* FitsChan using appropriate FITS header cards. The base Frame of
-* the FrameSet is used to form the FITS-WCS pixel coordinate
-* system and the current Frame gives the physical coordinate
-* system to be described by the FITS-WCS primary axis
-* descriptions. Any additional Frames in the FrameSet may be used
-* to construct secondary axis descriptions, where appropriate.
-*
-* A successful write operation will over-write any existing
-* FITS-WCS encoded data in the FitsChan, but will not affect other
-* (non-FITS-WCS) header cards. If a destructive read of a FITS-WCS
-* encoded Object has previously occurred, then an attempt will be
-* made to store the FITS header cards back in their original
-* locations. Otherwise, the new cards will be inserted following
-* any other FITS-WCS related header cards present or, failing
-* that, in front of the current card (as given by the Card
-* attribute).
-*
-* If an attempt to simplify a FrameSet to conform to the FITS-WCS
-* model fails (or if the Object supplied is not a FrameSet), then
-c no data will be written to the FitsChan and astWrite will
-f no data will be written to the FitsChan and AST_WRITE will
-* return zero. No error will result.
-
-* The FITS-IRAF Encoding:
-* The FITS-IRAF encoding can, for most purposes, be considered as
-* a subset of the FITS-WCS encoding (above), although it differs
-* in the details of the FITS keywords used. It is used in exactly
-* the same way and has the same restrictions, but with the
-* addition of the following:
-*
-* - The only celestial coordinate systems that may be represented
-* are equatorial, galactic and ecliptic,
-* - Sky projections can be represented only if any associated
-* projection parameters are set to their default values.
-* - Secondary axis descriptions are not supported, so when writing
-* a FrameSet to a FitsChan, only information from the base and
-* current Frames will be stored.
-*
-* Note that this encoding is provided mainly as an interim measure to
-* provide a more stable alternative to the FITS-WCS encoding until the
-* FITS standard for encoding WCS information is finalised. The name
-* "FITS-IRAF" indicates the general keyword conventions used and does
-* not imply that this encoding will necessarily support all features of
-* the WCS scheme used by IRAF software. Nevertheless, an attempt has
-* been made to support a few such features where they are known to be
-* used by important sources of data.
-*
-* When writing a FrameSet using the FITS-IRAF encoding, axis rotations
-* are specified by a matrix of FITS keywords of the form "CDi_j", where
-* "i" and "j" are single digits. The alternative form "CDiiijjj", which
-* is also in use, is recognised when reading an Object, but is never
-* written.
-*
-* In addition, the experimental IRAF "ZPX" and "TNX" sky projections will
-* be accepted when reading, but will never be written (the corresponding
-* FITS "ZPN" or "distorted TAN" projection being used instead). However,
-* there are restrictions on the use of these experimental projections.
-* For "ZPX", longitude and latitude correction surfaces (appearing as
-* "lngcor" or "latcor" terms in the IRAF-specific "WAT" keywords) are
-* not supported. For "TNX" projections, only cubic surfaces encoded as
-* simple polynomials with "half cross-terms" are supported. If an
-* un-usable "TNX" or "ZPX" projection is encountered while reading
-* from a FitsChan, a simpler form of TAN or ZPN projection is used
-* which ignores the unsupported features and may therefore be
-* inaccurate. If this happens, a warning message is added to the
-* contents of the FitsChan as a set of cards using the keyword "ASTWARN".
-*
-* You should not normally attempt to mix the foreign FITS encodings within
-* the same FitsChan, since there is a risk that keyword clashes may occur.
-
-* The FITS-PC Encoding:
-* The FITS-PC encoding can, for most purposes, be considered as
-* equivalent to the FITS-WCS encoding (above), although it differs
-* in the details of the FITS keywords used. It is used in exactly
-* the same way and has the same restrictions.
-
-* The FITS-AIPS Encoding:
-* The FITS-AIPS encoding can, for most purposes, be considered as
-* equivalent to the FITS-WCS encoding (above), although it differs
-* in the details of the FITS keywords used. It is used in exactly
-* the same way and has the same restrictions, but with the
-* addition of the following:
-*
-* - The only celestial coordinate systems that may be represented
-* are equatorial, galactic and ecliptic,
-* - Spectral axes can only be represented if they represent
-* frequency, radio velocity or optical velocity, and are linearly
-* sampled in frequency. In addition, the standard of rest
-* must be LSRK, LSRD, barycentric or geocentric.
-* - Sky projections can be represented only if any associated
-* projection parameters are set to their default values.
-* - The AIT, SFL and MER projections can only be written if the CRVAL
-* keywords are zero for both longitude and latitude axes.
-* - Secondary axis descriptions are not supported, so when writing
-* a FrameSet to a FitsChan, only information from the base and
-* current Frames will be stored.
-* - If there are more than 2 axes in the base and current Frames, any
-* rotation must be restricted to the celestial plane, and must involve
-* no shear.
-
-* The FITS-AIPS++ Encoding:
-* The FITS-AIPS++ encoding is based on the FITS-AIPS encoding, but
-* includes some features of the FITS-IRAF and FITS-PC encodings.
-* Specifically, any celestial projections supported by FITS-PC may be
-* used, including those which require parameterisation, and the axis
-* rotation and scaling may be specified using CDi_j keywords. When
-* writing a FITS header, rotation will be specified using CROTA/CDELT
-* keywords if possible, otherwise CDi_j keywords will be used instead.
-
-* The FITS-CLASS Encoding:
-* The FITS-CLASS encoding uses the conventions of the CLASS project.
-* These are described in the section "Developer Manual"/"CLASS FITS
-* Format" contained in the CLASS documentation at:
-*
-* http://www.iram.fr/IRAMFR/GILDAS/doc/html/class-html/class.html.
-*
-* This encoding is similar to FITS-AIPS with the following restrictions:
-*
-* - When a SpecFrame is created by reading a FITS-CLASS header, the
-* attributes describing the observer's position (ObsLat, ObsLon and
-* ObsAlt) are left unset because the CLASS encoding does not specify
-* these values. Conversions to or from the topocentric standard of rest
-* will therefore be inaccurate (typically by up to about 0.5 km/s)
-* unless suitable values are assigned to these attributes after the
-* FrameSet has been created.
-* - When writing a FrameSet to a FITS-CLASS header, the current Frame
-* in the FrameSet must have at least 3 WCS axes, of which one must be
-* a linear spectral axis. The spectral axis in the created header will
-* always describe frequency. If the spectral axis in the supplied
-* FrameSet refers to some other system (e.g. radio velocity, etc),
-* then it will be converted to frequency.
-* - There must be a pair of celestial axes - either (RA,Dec) or
-* (GLON,GLAT). RA and Dec must be either FK4/B1950 or FK5/J2000.
-* - A limited range of projection codes (TAN, ARC, STG, AIT, SFL, SIN)
-* can be used. For AIT and SFL, the reference point must be at the
-* origin of longitude and latitude. For SIN, the associated projection
-* parameters must both be zero.
-* - No rotation of the celestial axes is allowed, unless the spatial
-* axes are degenerate (i.e. cover only a single pixel).
-* - The frequency axis in the created header will always describe
-* frequency in the source rest frame. If the supplied FrameSet uses
-* some other standard of rest then suitable conversion will be applied.
-* - The source velocity must be defined. In other words, the SpecFrame
-* attributes SourceVel and SourceVRF must have been assigned values.
-* - The frequency axis in a FITS-CLASS header does not represent
-* absolute frequency, but instead represents offsets from the rest
-* frequency in the standard of rest of the source.
-*
-* When writing a FrameSet out using FITS-CLASS encoding, the current
-* Frame may be temporarily modified if this will allow the header
-* to be produced. If this is done, the associated pixel->WCS Mapping
-* will also be modified to take account of the changes to the Frame.
-* The modifications performed include re-ordering axes (WCS axes, not
-* pixel axes), changing spectral coordinate system and standard of
-* rest, changing the celestial coordinate system and reference equinox,
-* and changing axis units.
-
-* The NATIVE Encoding:
-* The NATIVE encoding may be used to store a description of any
-* class of AST Object in the form of FITS header cards, and (for
-* most practical purposes) any number of these Object descriptions
-* may be stored within a single set of FITS cards. If multiple
-* Object descriptions are stored, they are written and read
-* sequentially. The NATIVE encoding makes use of unique FITS
-* keywords which are designed not to clash with keywords that have
-* already been used for other purposes (if a potential clash is
-* detected, an alternative keyword is constructed to avoid the
-* clash).
-*
-* When reading a NATIVE encoded object from a FitsChan (using
-c astRead), FITS header cards are read, starting at the current
-f AST_READ), FITS header cards are read, starting at the current
-* card (as determined by the Card attribute), until the start of
-* the next Object description is found. This description is then
-* read and converted into an AST Object, for which a pointer is
-* returned. Such a read is always destructive and causes all the
-* FITS header cards involved in the Object description to be
-* removed from the FitsChan, which is left positioned at the
-* following card.
-*
-* The Object returned may be of any class, depending on the
-* description that was read, and other AST routines may be used to
-* validate it (for example, by examining its Class or ID attribute
-c using astGetC). If further NATIVE encoded Object descriptions
-f using AST_GETC). If further NATIVE encoded Object descriptions
-c exist in the FitsChan, subsequent calls to astRead will return
-f exist in the FitsChan, subsequent calls to AST_READ will return
-* the Objects they describe in sequence (and destroy their
-* descriptions) until no more remain between the current card and
-* the "end-of-file".
-*
-c When astWrite is used to write an Object using NATIVE encoding,
-f When AST_WRITE is used to write an Object using NATIVE encoding,
-* a description of the Object is inserted immediately before the
-* current card (as determined by the Card attribute). Multiple
-* Object descriptions may be written in this way and are stored
-* separately (and sequentially if the Card attribute is not
-* modified between the writes). A write operation using the NATIVE
-* encoding does not over-write previously written Object
-* descriptions. Note, however, that subsequent behaviour is
-* undefined if an Object description is written inside a
-* previously-written description, so this should be avoided.
-*
-* When an Object is written to a FitsChan using NATIVE encoding,
-c astWrite should (barring errors) always transfer data and
-f AST_WRITE should (barring errors) always transfer data and
-* return a value of 1.
-
-* Applicability:
-* FitsChan
-* All FitsChans have this attribute.
-*att--
-*/
-astMAKE_CLEAR(FitsChan,Encoding,encoding,UNKNOWN_ENCODING)
-astMAKE_SET(FitsChan,Encoding,int,encoding,(
- value == NATIVE_ENCODING ||
- value == FITSPC_ENCODING ||
- value == FITSWCS_ENCODING ||
- value == FITSIRAF_ENCODING ||
- value == FITSAIPS_ENCODING ||
- value == FITSAIPSPP_ENCODING ||
- value == FITSCLASS_ENCODING ||
- value == DSS_ENCODING ? value :
- (astError( AST__BADAT, "astSetEncoding: Unknown encoding system %d "
- "supplied.", status, value ), UNKNOWN_ENCODING )))
-astMAKE_TEST(FitsChan,Encoding,( this->encoding != UNKNOWN_ENCODING ))
-
-/* DefB1950 */
-/* ======== */
-/*
-*att++
-* Name:
-* DefB1950
-
-* Purpose:
-* Use FK4 B1950 as defaults?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute is a boolean value which specifies a default equinox
-* and reference frame to use when reading a FrameSet from a FitsChan
-* with a foreign (i.e. non-native) encoding. It is only used if the FITS
-* header contains RA and DEC axes but contains no information about the
-* reference frame or equinox. If this is the case, then values of FK4 and
-* B1950 are assumed if the DefB1950 attribute has a non-zero value and
-* ICRS is assumed if DefB1950 is zero. The default value for DefB1950
-* depends on the value of the Encoding attribute: for FITS-WCS encoding
-* the default is zero, and for all other encodings it is one.
-
-* Applicability:
-* FitsChan
-* All FitsChans have this attribute.
-*att--
-*/
-astMAKE_CLEAR(FitsChan,DefB1950,defb1950,-1)
-astMAKE_GET(FitsChan,DefB1950,int,1,(this->defb1950 == -1 ? (astGetEncoding(this)== FITSWCS_ENCODING?0:1): this->defb1950))
-astMAKE_SET(FitsChan,DefB1950,int,defb1950,( value ? 1 : 0 ))
-astMAKE_TEST(FitsChan,DefB1950,( this->defb1950 != -1 ))
-
-/* CarLin */
-/* ====== */
-/*
-*att++
-* Name:
-* CarLin
-
-* Purpose:
-* Ignore spherical rotations on CAR projections?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute is a boolean value which specifies how FITS "CAR"
-* (plate carree, or "Cartesian") projections should be treated when
-* reading a FrameSet from a foreign encoded FITS header. If zero (the
-* default), it is assumed that the CAR projection conforms to the
-* conventions described in the FITS world coordinate system (FITS-WCS)
-* paper II "Representation of Celestial Coordinates in FITS" by
-* M. Calabretta & E.W. Greisen. If CarLin is non-zero, then these
-* conventions are ignored, and it is assumed that the mapping from pixel
-* coordinates to celestial coordinates is a simple linear transformation
-* (hence the attribute name "CarLin"). This is appropriate for some older
-* FITS data which claims to have a "CAR" projection, but which in fact do
-* not conform to the conventions of the FITS-WCS paper. Furthermore, if
-* CarLin is non-zero, it is assumed that CDELT and CD keywords are
-* in units of degrees rather than radians (as required by the
-* FITS-WCS papers).
-*
-* The FITS-WCS paper specifies that headers which include a CAR projection
-* represent a linear mapping from pixel coordinates to "native spherical
-* coordinates", NOT celestial coordinates. An extra mapping is then
-* required from native spherical to celestial. This mapping is a 3D
-* rotation and so the overall Mapping from pixel to celestial coordinates
-* is NOT linear. See the FITS-WCS papers for further details.
-
-* Applicability:
-* FitsChan
-* All FitsChans have this attribute.
-*att--
-*/
-astMAKE_CLEAR(FitsChan,CarLin,carlin,-1)
-astMAKE_GET(FitsChan,CarLin,int,1,(this->carlin == -1 ? 0 : this->carlin))
-astMAKE_SET(FitsChan,CarLin,int,carlin,( value ? 1 : 0 ))
-astMAKE_TEST(FitsChan,CarLin,( this->carlin != -1 ))
-
-/* Iwc */
-/* === */
-/*
-*att++
-* Name:
-* Iwc
-
-* Purpose:
-* Include a Frame representing FITS-WCS intermediate world coordinates?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute is a boolean value which is used when a FrameSet is
-* read from a FitsChan with a foreign FITS encoding (e.g. FITS-WCS) using
-c astRead.
-f AST_READ.
-* If it has a non-zero value then the returned FrameSet will include
-* Frames representing "intermediate world coordinates" (IWC). These
-* Frames will have Domain name "IWC" for primary axis descriptions, and
-* "IWCa" for secondary axis descriptions, where "a" is replaced by
-* the single alternate axis description character, as used in the
-* FITS-WCS header. The default value for "Iwc" is zero.
-*
-* FITS-WCS paper 1 defines IWC as a Cartesian coordinate system with one
-* axis for each WCS axis, and is the coordinate system produced by the
-* rotation matrix (represented by FITS keyword PCi_j, CDi_j, etc).
-* For instance, for a 2-D FITS-WCS header describing projected
-* celestial longitude and latitude, the intermediate world
-* coordinates represent offsets in degrees from the reference point
-* within the plane of projection.
-
-* Applicability:
-* FitsChan
-* All FitsChans have this attribute.
-*att--
-*/
-astMAKE_CLEAR(FitsChan,Iwc,iwc,-1)
-astMAKE_GET(FitsChan,Iwc,int,1,(this->iwc == -1 ? 0 : this->iwc))
-astMAKE_SET(FitsChan,Iwc,int,iwc,( value ? 1 : 0 ))
-astMAKE_TEST(FitsChan,Iwc,( this->iwc != -1 ))
-
-/*
-*att++
-* Name:
-* CDMatrix
-
-* Purpose:
-* Use CDi_j keywords to represent pixel scaling, rotation, etc?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute is a boolean value which specifies how the linear
-* transformation from pixel coordinates to intermediate world
-* coordinates should be represented within a FitsChan when using
-* FITS-WCS encoding. This transformation describes the scaling,
-* rotation, shear, etc., of the pixel axes.
-*
-* If the attribute has a non-zero value then the transformation is
-* represented by a set of CDi_j keywords representing a square matrix
-* (where "i" is the index of an intermediate world coordinate axis
-* and "j" is the index of a pixel axis). If the attribute has a zero
-* value the transformation is represented by a set of PCi_j keywords
-* (which also represent a square matrix) together with a corresponding
-* set of CDELTi keywords representing the axis scalings. See FITS-WCS
-* paper II "Representation of Celestial Coordinates in FITS" by
-* M. Calabretta & E.W. Greisen, for a complete description of these two
-* schemes.
-*
-* The default value of the CDMatrix attribute is determined by the
-* contents of the FitsChan at the time the attribute is accessed. If
-* the FitsChan contains any CDi_j keywords then the default value is
-* non-zero. Otherwise it is zero. Note, reading a FrameSet from a
-* FitsChan will in general consume any CDi_j keywords present in the
-* FitsChan. Thus the default value for CDMatrix following a read will
-* usually be zero, even if the FitsChan originally contained some
-* CDi_j keywords. This behaviour is similar to that of the Encoding
-* attribute, the default value for which is determined by the contents
-* of the FitsChan at the time the attribute is accessed. If you wish
-* to retain the original value of the CDMatrix attribute (that is,
-* the value before reading the FrameSet) then you should enquire the
-* default value before doing the read, and then set that value
-* explicitly.
-
-
-* Applicability:
-* FitsChan
-* All FitsChans have this attribute.
-*att--
-*/
-astMAKE_CLEAR(FitsChan,CDMatrix,cdmatrix,-1)
-astMAKE_SET(FitsChan,CDMatrix,int,cdmatrix,( value ? 1 : 0 ))
-astMAKE_TEST(FitsChan,CDMatrix,( this->cdmatrix != -1 ))
-
-/* Clean */
-/* ===== */
-/*
-*att++
-* Name:
-* Clean
-
-* Purpose:
-* Remove cards used whilst reading even if an error occurs?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute indicates whether or not cards should be removed from
-* the FitsChan if an error occurs within
-c astRead.
-f AST_READ.
-* A succesful read on a FitsChan always results in the removal of
-* the cards which were involved in the description of the returned
-* Object. However, in the event of an error during the read (for instance
-* if the cards in the FitsChan have illegal values, or if some required
-* cards are missing) no cards will be removed from the FitsChan if
-* the Clean attribute is zero (the default). If Clean is non-zero then
-* any cards which were used in the aborted attempt to read an object
-* will be removed.
-*
-* This provides a means of "cleaning" a FitsChan of WCS related cards
-* which works even in the event of the cards not forming a legal WCS
-* description.
-
-* Applicability:
-* FitsChan
-* All FitsChans have this attribute.
-*att--
-*/
-astMAKE_CLEAR(FitsChan,Clean,clean,-1)
-astMAKE_SET(FitsChan,Clean,int,clean,( value ? 1 : 0 ))
-astMAKE_TEST(FitsChan,Clean,( this->clean != -1 ))
-
-/* FitsDigits. */
-/* =========== */
-/*
-*att++
-* Name:
-* FitsDigits
-
-* Purpose:
-* Digits of precision for floating point FITS values.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer.
-
-* Description:
-* This attribute gives the number of significant decimal digits to
-* use when formatting floating point values for inclusion in the
-* FITS header cards within a FitsChan.
-*
-* By default, a positive value is used which results in no loss of
-c information, assuming that the value's precision is double.
-f information, assuming that the value is double precision.
-* Usually, this causes no problems.
-*
-* However, to adhere strictly to the recommendations of the FITS
-* standard, the width of the formatted value (including sign,
-* decimal point and exponent) ought not to be more than 20
-* characters. If you are concerned about this, you should set
-* FitsDigits to a negative value, such as -15. In this case, the
-* absolute value (+15) indicates the maximum number of significant
-* digits to use, but the actual number used may be fewer than this
-* to ensure that the FITS recommendations are satisfied. When
-* using this approach, the resulting number of significant digits
-* may depend on the value being formatted and on the presence of
-* any sign, decimal point or exponent.
-*
-* The value of this attribute is effective when FITS header cards
-* are output, either using
-c astFindFits or by the action of the FitsChan's sink function
-f AST_FINDFITS or by the action of the FitsChan's sink routine
-* when it is finally deleted.
-
-* Applicability:
-* FitsChan
-* All FitsChans have this attribute.
-*att--
-*/
-astMAKE_CLEAR(FitsChan,FitsDigits,fitsdigits,DBL_DIG)
-astMAKE_GET(FitsChan,FitsDigits,int,DBL_DIG,this->fitsdigits)
-astMAKE_SET(FitsChan,FitsDigits,int,fitsdigits,value)
-astMAKE_TEST(FitsChan,FitsDigits,( this->fitsdigits != DBL_DIG ))
-
-/* Ncard */
-/* ===== */
-/*
-*att++
-* Name:
-* Ncard
-
-* Purpose:
-* Number of FITS header cards in a FitsChan.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer, read-only.
-
-* Description:
-* This attribute gives the total number of FITS header cards
-* stored in a FitsChan. It is updated as cards are added or
-* deleted.
-
-* Applicability:
-* FitsChan
-* All FitsChans have this attribute.
-*att--
-*/
-
-/* Warnings. */
-/* ======== */
-/*
-*att++
-* Name:
-* Warnings
-
-* Purpose:
-* Controls the issuing of warnings about various conditions.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String
-
-* Description:
-* This attribute controls the issuing of warnings about selected
-* conditions when an Object or keyword is read from or written to a
-* FitsChan. The value supplied for the Warnings attribute should
-* consist of a space separated list of condition names (see the
-* AllWarnings attribute for a list of the currently defined names).
-* Each name indicates a condition which should be reported. The default
-* value for Warnings is the string "Tnx Zpx BadCel BadMat BadPV BadCTYPE".
-*
-* The text of any warning will be stored within the FitsChan in the
-* form of one or more new header cards with keyword ASTWARN. If
-* required, applications can check the FitsChan for ASTWARN cards
-c (using astFindFits) after the call to astRead or astWrite has been
-f (using AST_FINDFITS) after the call to AST_READ or AST_WRITE has been
-* performed, and report the text of any such cards to the user. ASTWARN
-* cards will be propagated to any output header unless they are
-c deleted from the FitsChan using astDelFits.
-f deleted from the FitsChan using astDelFits.
-
-* Notes:
-* This attribute only controls the warnings that are to be stored as
-* a set of header cards in the FitsChan as described above. It has no
-* effect on the storage of warnings in the parent Channel structure.
-* All warnings are stored in the parent Channel structure, from where
-* they can be retrieved using the
-c astWarnings
-f AST_WARNINGS
-* function.
-
-* Applicability:
-* FitsChan
-* All FitsChans have this attribute.
-*att--
-*/
-/* Clear the Warnings value by freeing the allocated memory and assigning
- a NULL pointer. */
-astMAKE_CLEAR(FitsChan,Warnings,warnings,astFree( this->warnings ))
-
-/* If the Warnings value is not set, supply a default in the form of a
- pointer to the constant string "Tnx Zpx BadCel BadMat BadCTYPE". */
-astMAKE_GET(FitsChan,Warnings,const char *,NULL,( this->warnings ? this->warnings :
- "Tnx Zpx BadPV BadCel BadMat BadCTYPE" ))
-
-/* Set a Warnings value by freeing any previously allocated memory, allocating
- new memory, storing the string and saving the pointer to the copy.
- First check that the list does not contain any unknown conditions. If
- it does, an error is reported by GoodWarns and the current attribute value
- is retained. */
-astMAKE_SET(FitsChan,Warnings,const char *,warnings,( GoodWarns( value, status ) ?
- astStore( this->warnings, value, strlen( value ) + (size_t) 1 ) :
- this->warnings))
-
-/* The Warnings value is set if the pointer to it is not NULL. */
-astMAKE_TEST(FitsChan,Warnings,( this->warnings != NULL ))
-
-/* AllWarnings. */
-/* ============ */
-/*
-*att++
-* Name:
-* AllWarnings
-
-* Purpose:
-* A list of all currently available condition names.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String, read-only
-
-* Description:
-* This read-only attribute is a space separated list of all the conditions
-* names recognized by the Warnings attribute. The names are listed
-* below.
-
-* Conditions:
-* The following conditions are currently recognised (all are
-* case-insensitive):
-*
-* - "BadCel": This condition arises when reading a FrameSet from a
-* non-Native encoded FitsChan if an unknown celestial co-ordinate
-* system is specified by the CTYPE keywords.
-*
-* - "BadCTYPE": This condition arises when reading a FrameSet from a
-* non-Native encoded FitsChan if an illegal algorithm code is specified
-* by a CTYPE keyword, and the illegal code can be converted to an
-* equivalent legal code.
-*
-* - "BadLat": This condition arises when reading a FrameSet from a
-* non-Native encoded FitsChan if the latitude of the reference point
-* has an absolute value greater than 90 degrees. The actual absolute
-* value used is set to exactly 90 degrees in these cases.
-*
-* - "BadMat": This condition arises if the matrix describing the
-* transformation from pixel offsets to intermediate world coordinates
-* cannot be inverted. This matrix describes the scaling, rotation, shear,
-* etc., applied to the pixel axes, and is specified by keywords such as
-* PCi_j, CDi_j, CROTA, etc. For example, the matrix will not be invertable
-* if any rows or columns consist entirely of zeros. The FITS-WCS Paper I
-* "Representation of World Coordinates in FITS" by Greisen & Calabretta
-* requires that this matrix be invertable. Many operations (such as
-* grid plotting) will not be possible if the matrix cannot be inverted.
-*
-* - "BadPV": This condition arises when reading a FrameSet from a
-* non-Native encoded FitsChan. It is issued if a PVi_m header is found
-* that refers to a projection parameter that is not used by the
-* projection type specified by CTYPE.
-*
-* - "BadVal": This condition arises when reading a FrameSet from a
-* non-Native encoded FitsChan if it is not possible to convert the
-* value of a FITS keywords to the expected type. For instance, this
-* can occur if the FITS header contains a string value for a keyword
-* which should have a floating point value, or if the keyword has no
-* value at all (i.e. is a comment card).
-*
-* - "Distortion": This condition arises when reading a FrameSet from a
-* non-Native encoded FitsChan if any of the CTYPE keywords specify an
-* unsupported distortion code using the "4-3-3" format specified in
-* FITS-WCS paper IV. Such distortion codes are ignored.
-*
-* - "NoCTYPE": This condition arises if a default CTYPE value is used
-c within astRead, due to no value being present in the supplied FitsChan.
-f within AST_READ, due to no value being present in the supplied FitsChan.
-* This condition is only tested for when using non-Native encodings.
-*
-* - "NoEquinox": This condition arises if a default equinox value is used
-c within astRead, due to no value being present in the supplied FitsChan.
-f within AST_READ, due to no value being present in the supplied FitsChan.
-* This condition is only tested for when using non-Native encodings.
-*
-* - "NoRadesys": This condition arises if a default reference frame is
-c used for an equatorial co-ordinate system within astRead, due to no
-f used for an equatorial co-ordinate system within AST_READ, due to no
-* value being present in the supplied FitsChan. This condition is only
-* tested for when using non-Native encodings.
-*
-* - "NoLonpole": This condition arises if a default value is used for
-c the LONPOLE keyword within astRead, due to no value being present
-f the LONPOLE keyword within AST_READ, due to no value being present
-* in the supplied FitsChan. This condition is only tested for when
-* using non-Native encodings.
-*
-* - "NoLatpole": This condition arises if a default value is used for
-c the LATPOLE keyword within astRead, due to no value being present
-f the LATPOLE keyword within AST_READ, due to no value being present
-* in the supplied FitsChan. This condition is only tested for when
-* using non-Native encodings.
-*
-* - "NoMjd-obs": This condition arises if a default value is used for
-c the date of observation within astRead, due to no value being present
-f the date of observation within AST_READ, due to no value being present
-* in the supplied FitsChan. This condition is only tested for when using
-* non-Native encodings.
-*
-* - "Tnx": This condition arises if a FrameSet is read from a FITS
-* header containing an IRAF "TNX" projection which includes terms
-* not supproted by AST. Such terms are ignored and so the resulting
-* FrameSet may be inaccurate.
-*
-* - "Zpx": This condition arises if a FrameSet is read from a FITS
-* header containing an IRAF "ZPX" projection which includes "lngcor"
-* or "latcor" correction terms. These terms are not supported by AST
-* and are ignored. The resulting FrameSet may therefore be inaccurate.
-
-* Applicability:
-* FitsChan
-* All FitsChans have this attribute.
-*att--
-*/
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for FitsChan objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for FitsChan objects.
-
-* Parameters:
-* objin
-* Pointer to the FitsChan to be copied.
-* objout
-* Pointer to the FitsChan being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The source and sink functions are not propagated (i.e. the
-* pointers are set NULL in the output FitsChan).
-* - This constructor makes a deep copy, including a copy of the
-* keyword values.
-*/
-
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- const char *class; /* Pointer to object class */
- AstFitsChan *in; /* Pointer to input FitsChan */
- AstFitsChan *out; /* Pointer to output FitsChan */
- int *flags;
- int icard;
- int old_ignore_used; /* Original value of external variable ignore_used */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(objin);
-
-/* Obtain pointers to the input and output FitsChans. */
- in = (AstFitsChan *) objin;
- out = (AstFitsChan *) objout;
-
-/* Nullify all pointers in the output FitsChan so that the input
- data will not be deleted in the event of an error occurring. */
- out->card = NULL;
- out->head = NULL;
- out->keyseq = NULL;
- out->keywords = NULL;
- out->source = NULL;
- out->source_wrap = NULL;
- out->sink = NULL;
- out->sink_wrap = NULL;
- out->warnings = NULL;
-
-/* Store the object class. */
- class = astGetClass( in );
-
-/* Ensure all cards are copied, including those already read by astRead. */
- old_ignore_used = ignore_used;
- ignore_used = 0;
-
-/* Save the current card index in the input FitsChan. */
- icard = astGetCard( in );
-
-/* Rewind the input FitsChan. */
- astClearCard( in );
-
-/* Copy all the FitsCard structures from input to output. */
- while( !astFitsEof( in ) && astOK ){
-
-/* Get a pointer to the flags mask for this card. */
- flags = CardFlags( in, status );
-
-/* Store a new card in the output, holding the same information as the
- input card. */
- NewCard( out, CardName( in, status ), CardType( in, status ), CardData( in, NULL, status ),
- CardComm( in, status ), (flags?(*flags):0), status );
-
-/* Move on to the next input card. */
- MoveCard( in, 1, "astCopy", class, status );
-
- }
-
-/* Set the current card in both input and output to the current input
- card on entry. */
- astSetCard( in, icard );
- astSetCard( out, icard );
-
-/* Copy the list of keyword sequence numbers used. */
- if( in->keyseq ) out->keyseq = astCopy( in->keyseq );
-
-/* Copy the Warnings attribute value */
- if( in->warnings ) out->warnings = astStore( NULL, in->warnings,
- strlen( in->warnings ) + 1 );
-
-/* Reinstate the original setting of the external ignore_used variable. */
- ignore_used = old_ignore_used;
-
-/* If an error occurred, delete the contents of the output Object. */
- if( !astOK ) Delete( objout, status );
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for FitsChan objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for FitsChan objects.
-
-* Parameters:
-* obj
-* Pointer to the FitsChan to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstFitsChan *this; /* Pointer to FitsChan */
-
-/* Obtain a pointer to the FitsChan structure. */
- this = (AstFitsChan *) obj;
-
-/* Write out the contents of the FitsChan using the sink function
- provided when it was created. */
- WriteToSink( this, status );
-
-/* Remove all cards from the FitsChan. */
- Empty( this, status );
-
-/* Free any memory used to hold the Warnings attribute value. */
- this->warnings = astFree( this->warnings );
-
- return;
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for FitsChan objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the FitsChan class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the FitsChan whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstFitsChan *this; /* Pointer to the FitsChan structure */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- char buff[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- const char *class; /* Object class */
- const char *sval; /* Pointer to string value */
- int cardtype; /* Keyword data type */
- int flags; /* Keyword flags */
- int icard; /* Index of current card */
- int ival; /* Integer value */
- int ncard; /* No. of cards dumped so far */
- int old_ignore_used; /* Original value of external variable ignore_used */
- int set; /* Attribute value set? */
- void *data; /* Pointer to keyword data value */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the FitsChan structure. */
- this = (AstFitsChan *) this_object;
-
-/* Store the object class. */
- class = astGetClass( this );
-
-/* Save the index of ht ecurrent card. */
- icard = astGetCard( this );
-
-/* Write out values representing the instance variables for the
- FitsChan class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* Card. */
-/* ----- */
- astWriteInt( channel, "Card", 1, 1, icard, "Index of current card" );
-
-/* Encoding. */
-/* --------- */
- set = TestEncoding( this, status );
- ival = set ? GetEncoding( this, status ) : astGetEncoding( this );
- if( ival > UNKNOWN_ENCODING && ival <= MAX_ENCODING ) {
- astWriteString( channel, "Encod", set, 1, xencod[ival], "Encoding system" );
- } else {
- astWriteString( channel, "Encod", set, 1, UNKNOWN_STRING, "Encoding system" );
- }
-
-/* FitsDigits. */
-/* ----------- */
- set = TestFitsDigits( this, status );
- ival = set ? GetFitsDigits( this, status ) : astGetFitsDigits( this );
- astWriteInt( channel, "FitsDg", set, 1, ival, "No. of digits for floating point values" );
-
-/* DefB1950 */
-/* -------- */
- set = TestDefB1950( this, status );
- ival = set ? GetDefB1950( this, status ) : astGetDefB1950( this );
- astWriteInt( channel, "DfB1950", set, 1, ival, (ival ? "Default to FK4 B1950": "Default to ICRS") );
-
-/* CDMatrix */
-/* -------- */
- set = TestCDMatrix( this, status );
- ival = set ? GetCDMatrix( this, status ) : astGetCDMatrix( this );
- astWriteInt( channel, "CdMat", set, 1, ival, (ival ? "Use CD Matrix":"Use PC matrix") );
-
-/* CarLin */
-/* ------ */
- set = TestCarLin( this, status );
- ival = set ? GetCarLin( this, status ) : astGetCarLin( this );
- astWriteInt( channel, "CarLin", set, 1, ival, (ival ? "Use simple linear CAR projections": "Use full FITS-WCS CAR projections") );
-
-/* Iwc */
-/* --- */
- set = TestIwc( this, status );
- ival = set ? GetIwc( this, status ) : astGetIwc( this );
- astWriteInt( channel, "Iwc", set, 1, ival, (ival ? "Include an IWC Frame": "Do not include an IWC Frame") );
-
-/* Clean */
-/* ----- */
- set = TestClean( this, status );
- ival = set ? GetClean( this, status ) : astGetClean( this );
- astWriteInt( channel, "Clean", set, 0, ival, "Always remove used cards?" );
-
-/* Warnings. */
-/* --------- */
- set = TestWarnings( this, status );
- sval = set ? GetWarnings( this, status ) : astGetWarnings( this );
- astWriteString( channel, "Warn", set, 1, sval, "Warnings to be reported" );
-
-/* Now do instance variables which are not attributes. */
-/* =================================================== */
-
-/* Ensure all cards are copied, including those already read by astRead. */
- old_ignore_used = ignore_used;
- ignore_used = 0;
-
-/* Rewind the FitsChan. */
- astClearCard( this );
-
-/* Dump each card. */
- ncard = 1;
- while( !astFitsEof( this ) && astOK ){
-
-/* Write out the keyword name. */
- if( CardName( this, status ) ){
- (void) sprintf( buff, "Nm%d", ncard );
- astWriteString( channel, buff, 1, 1, CardName( this, status ),
- "FITS keyword name" );
- }
-
-/* Write out the keyword type. */
- cardtype = CardType( this, status );
- (void) sprintf( buff, "Ty%d", ncard );
- astWriteString( channel, buff, 1, 1, type_names[ cardtype ],
- "FITS keyword data type" );
-
-/* Write out the flag values if any are non-zero. */
- flags = *CardFlags( this, status );
- if( flags ){
- (void) sprintf( buff, "Fl%d", ncard );
- astWriteInt( channel, buff, 1, 1, flags, "FITS keyword flags" );
- }
-
-/* Write out the data value, if defined, using the appropriate data type. */
- data = CardData( this, NULL, status );
- if( data && cardtype != AST__UNDEF ){
-
- if( cardtype == AST__FLOAT ){
- (void) sprintf( buff, "Dt%d", ncard );
- astWriteDouble( channel, buff, 1, 1, *( (double *) data ),
- "FITS keyword value" );
-
- } else if( cardtype == AST__STRING || cardtype == AST__CONTINUE ){
- (void) sprintf( buff, "Dt%d", ncard );
- astWriteString( channel, buff, 1, 1, (char *) data,
- "FITS keyword value" );
-
- } else if( cardtype == AST__INT ){
- (void) sprintf( buff, "Dt%d", ncard );
- astWriteInt( channel, buff, 1, 1, *( (int *) data ),
- "FITS keyword value" );
-
- } else if( cardtype == AST__LOGICAL ){
- (void) sprintf( buff, "Dt%d", ncard );
- astWriteInt( channel, buff, 1, 1, *( (int *) data ),
- "FITS keyword value" );
-
- } else if( cardtype == AST__COMPLEXF ){
- (void) sprintf( buff, "Dr%d", ncard );
- astWriteDouble( channel, buff, 1, 1, *( (double *) data ),
- "FITS keyword real value" );
-
- (void) sprintf( buff, "Di%d", ncard );
- astWriteDouble( channel, buff, 1, 1, *( ( (double *) data ) + 1 ),
- "FITS keyword imaginary value" );
-
- } else if( cardtype == AST__COMPLEXI ){
- (void) sprintf( buff, "Dr%d", ncard );
- astWriteInt( channel, buff, 1, 1, *( (int *) data ),
- "FITS keyword real value" );
-
- (void) sprintf( buff, "Di%d", ncard );
- astWriteInt( channel, buff, 1, 1, *( ( (int *) data ) + 1 ),
- "FITS keyword imaginary value" );
- }
-
- }
-
-/* Write out the keyword comment. */
- if( CardComm( this, status ) ){
- (void) sprintf( buff, "Cm%d", ncard );
- astWriteString( channel, buff, 1, 1, CardComm( this, status ),
- "FITS keyword comment" );
- }
-
-/* Move on to the next card. */
- ncard++;
- MoveCard( this, 1, "astDump", class, status );
-
- }
-
-/* Reinstate the original setting of the external ignore_used variable. */
- ignore_used = old_ignore_used;
-
-/* Reinstate the original current card. */
- astSetCard( this, icard );
-
-#undef KEY_LEN
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAFitsChan and astCheckFitsChan functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(FitsChan,Channel)
-astMAKE_CHECK(FitsChan)
-
-AstFitsChan *astFitsChan_( const char *(* source)( void ),
- void (* sink)( const char * ),
- const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astFitsChan
-f AST_FITSCHAN
-
-* Purpose:
-* Create a FitsChan.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "fitschan.h"
-c AstFitsChan *astFitsChan( const char *(* source)( void ),
-c void (* sink)( const char * ),
-c const char *options, ... )
-f RESULT = AST_FITSCHAN( SOURCE, SINK, OPTIONS, STATUS )
-
-* Class Membership:
-* FitsChan constructor.
-
-* Description:
-* This function creates a new FitsChan and optionally initialises
-* its attributes.
-*
-* A FitsChan is a specialised form of Channel which supports I/O
-* operations involving the use of FITS (Flexible Image Transport
-* System) header cards. Writing an Object to a FitsChan (using
-c astWrite) will, if the Object is suitable, generate a
-f AST_WRITE) will, if the Object is suitable, generate a
-* description of that Object composed of FITS header cards, and
-* reading from a FitsChan will create a new Object from its FITS
-* header card description.
-*
-* While a FitsChan is active, it represents a buffer which may
-* contain zero or more 80-character "header cards" conforming to
-* FITS conventions. Any sequence of FITS-conforming header cards
-* may be stored, apart from the "END" card whose existence is
-* merely implied. The cards may be accessed in any order by using
-* the FitsChan's integer Card attribute, which identifies a "current"
-* card, to which subsequent operations apply. Searches
-c based on keyword may be performed (using astFindFits), new
-c cards may be inserted (astPutFits, astPutCards, astSetFits<X>) and
-c existing ones may be deleted (astDelFits) or changed (astSetFits<X>).
-f based on keyword may be performed (using AST_FINDFITS), new
-f cards may be inserted (AST_PUTFITS, AST_PUTCARDS, AST_SETFITS<X>) and
-f existing ones may be deleted (AST_DELFITS) or changed (AST_SETFITS<X>).
-*
-* When you create a FitsChan, you have the option of specifying
-* "source" and "sink" functions which connect it to external data
-* stores by reading and writing FITS header cards. If you provide
-* a source function, it is used to fill the FitsChan with header cards
-* when it is accessed for the first time. If you do not provide a source
-* function, the FitsChan remains empty until you explicitly enter
-c data into it (e.g. using astPutCards, astPutFits or astWrite). If you
-f data into it (e.g. using AST_PUTCARDS, AST_PUTFITS or AST_WRITE). If you
-* provide a sink function, it is used to deliver any remaining
-* contents of a FitsChan to an external data store when the
-* FitsChan is deleted. If you do not provide a sink function, any
-* header cards remaining when the FitsChan is deleted will be
-* lost, so you should arrange to extract them first if necessary
-c (e.g. using astFindFits or astRead).
-f (e.g. using AST_FINDFITS or AST_READ).
-*
-* Coordinate system information may be described using FITS header
-* cards using several different conventions, termed
-* "encodings". When an AST Object is written to (or read from) a
-* FitsChan, the value of the FitsChan's Encoding attribute
-* determines how the Object is converted to (or from) a
-* description involving FITS header cards. In general, different
-* encodings will result in different sets of header cards to
-* describe the same Object. Examples of encodings include the DSS
-* encoding (based on conventions used by the STScI Digitised Sky
-* Survey data), the FITS-WCS encoding (based on a proposed FITS
-* standard) and the NATIVE encoding (a near loss-less way of
-* storing AST Objects in FITS headers).
-*
-* The available encodings differ in the range of Objects they can
-* represent, in the number of Object descriptions that can coexist
-* in the same FitsChan, and in their accessibility to other
-* (external) astronomy applications (see the Encoding attribute
-* for details). Encodings are not necessarily mutually exclusive
-* and it may sometimes be possible to describe the same Object in
-* several ways within a particular set of FITS header cards by
-* using several different encodings.
-*
-c The detailed behaviour of astRead and astWrite, when used with
-f The detailed behaviour of AST_READ and AST_WRITE, when used with
-* a FitsChan, depends on the encoding in use. In general, however,
-c all use of astRead is destructive, so that FITS header cards
-f all use of AST_READ is destructive, so that FITS header cards
-* are consumed in the process of reading an Object, and are
-* removed from the FitsChan (this deletion can be prevented for
-* specific cards by calling the
-c astRetainFits function).
-f AST_RETAINFITS routine).
-*
-* If the encoding in use allows only a single Object description
-* to be stored in a FitsChan (e.g. the DSS, FITS-WCS and FITS-IRAF
-c encodings), then write operations using astWrite will
-f encodings), then write operations using AST_WRITE will
-* over-write any existing Object description using that
-* encoding. Otherwise (e.g. the NATIVE encoding), multiple Object
-* descriptions are written sequentially and may later be read
-* back in the same sequence.
-
-* Parameters:
-c source
-f SOURCE = FUNCTION (Given)
-c Pointer to a source function which takes no arguments and
-c returns a pointer to a null-terminated string. This function
-c will be used by the FitsChan to obtain input FITS header
-c cards. On each invocation, it should read the next input card
-c from some external source (such as a FITS file), and return a
-c pointer to the (null-terminated) contents of the card. It
-c should return a NULL pointer when there are no more cards to
-c be read.
-c
-c If "source" is NULL, the FitsChan will remain empty until
-c cards are explicitly stored in it (e.g. using astPutCards or astPutFits).
-f A source routine, which is a function taking two arguments: a
-f character argument of length 80 to contain a FITS card, and an
-f integer error status argument. It should return an integer value.
-f This function will be used by the FitsChan to obtain input
-f FITS header cards. On each invocation, it should read the
-f next input card from some external source (such as a FITS
-f file), and return the contents of the card via its character
-f argument. It should return a function result of one unless
-f there are no more cards to be read, in which case it should
-f return zero. If an error occurs, it should set its error
-f status argument to an error value before returning.
-f
-f If the null routine AST_NULL is supplied as the SOURCE value,
-f the FitsChan will remain empty until cards are explicitly
-f stored in it (e.g. using AST_PUTCARDS or AST_PUTFITS).
-c sink
-f SINK = SUBROUTINE (Given)
-c Pointer to a sink function that takes a pointer to a
-c null-terminated string as an argument and returns void. This
-c function will be used by the FitsChan to deliver any FITS
-c header cards it contains when it is finally deleted. On
-c each invocation, it should deliver the contents of the character
-c string passed to it as a FITS header card to some external
-c data store (such as a FITS file).
-f A sink routine, which is a subroutine which takes two
-f arguments: a character argument of length 80 to contain a
-f FITS card, and an integer error status argument. This routine
-f will be used by the FitsChan to deliver any FITS header cards
-f it contains when it is finally deleted. On each invocation,
-f it should deliver the contents of the character string passed
-f to it as a FITS header card to some external data store (such
-f as a FITS file). If an error occurs, it should set its error
-f status argument to an error value before returning.
-*
-c If "sink" is NULL,
-f If the null routine AST_NULL is supplied as the SINK value,
-* the contents of the FitsChan will not be written out when it
-* is deleted.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new FitsChan. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new FitsChan. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astFitsChan()
-f AST_FITSCHAN = INTEGER
-* A pointer to the new FitsChan.
-
-* Notes:
-f - The names of the routines supplied for the SOURCE and SINK
-f arguments should appear in EXTERNAL statements in the Fortran
-f routine which invokes AST_FITSCHAN. However, this is not generally
-f necessary for the null routine AST_NULL (so long as the AST_PAR
-f include file has been used).
-c - No FITS "END" card will be written via the sink function. You
-f - No FITS "END" card will be written via the sink routine. You
-* should add this card yourself after the FitsChan has been
-* deleted.
-* - A null Object pointer (AST__NULL) will be returned if this
-* function is invoked with the AST error status set, or if it
-* should fail for any reason.
-f - Note that the null routine AST_NULL (one underscore) is
-f different to AST__NULL (two underscores), which is the null Object
-f pointer.
-
-* Status Handling:
-* The protected interface to this function includes an extra
-* parameter at the end of the parameter list descirbed above. This
-* parameter is a pointer to the integer inherited status
-* variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFitsChan *new; /* Pointer to new FitsChan */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the FitsChan, allocating memory and initialising the
- virtual function table as well if necessary. This interface is for
- use by other C functions within AST, and uses the standard "wrapper"
- functions included in this class. */
- new = astInitFitsChan( NULL, sizeof( AstFitsChan ), !class_init,
- &class_vtab, "FitsChan", source, SourceWrap,
- sink, SinkWrap );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- FitsChan's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new FitsChan. */
- return new;
-}
-
-AstFitsChan *astFitsChanId_( const char *(* source)( void ),
- void (* sink)( const char * ),
- const char *options, ... ) {
-/*
-* Name:
-* astFitsChanId_
-
-* Purpose:
-* Create a FitsChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fitschan.h"
-* AstFitsChan *astFitsChanId_( const char *(* source)( void ),
-* void (* sink)( const char * ),
-* const char *options, ... )
-
-* Class Membership:
-* FitsChan constructor.
-
-* Description:
-* This function implements the external (public) C interface to the
-* astFitsChan constructor function. Another function (astFitsChanForId)
-* should be called to create a FitsChan for use within other languages.
-* Both functions return an ID value (instead of a true C pointer) to
-* external users, and must be provided because astFitsChan_ has a variable
-* argument list which cannot be encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astFitsChan_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astFitsChan_.
-
-* Returned Value:
-* The ID value associated with the new FitsChan.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFitsChan *new; /* Pointer to new FitsChan */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the FitsChan, allocating memory and initialising the
- virtual function table as well if necessary. This interface is for
- use by external C functions and uses the standard "wrapper"
- functions included in this class. */
- new = astInitFitsChan( NULL, sizeof( AstFitsChan ), !class_init,
- &class_vtab, "FitsChan", source, SourceWrap,
- sink, SinkWrap );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- FitsChan's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new FitsChan. */
- return astMakeId( new );
-}
-
-AstFitsChan *astFitsChanForId_( const char *(* source)( void ),
- char *(* source_wrap)( const char *(*)( void ), int * ),
- void (* sink)( const char * ),
- void (* sink_wrap)( void (*)( const char * ),
- const char *, int * ),
- const char *options, ... ) {
-/*
-*+
-* Name:
-* astFitsChanFor
-
-* Purpose:
-* Initialise a FitsChan from a foreign language interface.
-
-* Type:
-* Public function.
-
-* Synopsis:
-* #include "fitschan.h"
-* AstFitsChan *astFitsChanFor( const char *(* source)( void ),
-* char *(* source_wrap)( const char *(*)
-* ( void ), int * ),
-* void (* sink)( const char * ),
-* void (* sink_wrap)( void (*)( const char * ),
-* const char *, int * ),
-* const char *options, ... )
-
-* Class Membership:
-* FitsChan constructor.
-
-* Description:
-* This function creates a new FitsChan from a foreign language
-* interface and optionally initialises its attributes.
-*
-* A FitsChan implements FITS input/output for the AST library.
-* Writing an Object to a FitsChan (using astWrite) will generate a
-* textual representation of that Object in terms of FITS header cards,
-* and reading from a FitsChan (using astRead) will create a new Object
-* from its FITS representation.
-*
-* Normally, when you use a FitsChan, you should provide "source"
-* and "sink" functions which connect it to an external data store
-* by reading and writing the resulting text. This function also
-* requires you to provide "wrapper" functions which will invoke
-* the source and sink functions.
-
-* Parameters:
-* source
-* Pointer to a "source" function which will be used to obtain
-* FITS header cards. Generally, this will be obtained by
-* casting a pointer to a source function which is compatible
-* with the "source_wrap" wrapper function (below). The pointer
-* should later be cast back to its original type by the
-* "source_wrap" function before the function is invoked.
-*
-* If "source" is NULL, the FitsChan will remain empty until
-* cards are added explicitly (e.g. using astPutCards or astPutFits).
-* source_wrap
-* Pointer to a function which can be used to invoke the
-* "source" function supplied (above). This wrapper function is
-* necessary in order to hide variations in the nature of the
-* source function, such as may arise when it is supplied by a
-* foreign (non-C) language interface.
-*
-* The single parameter of the "source_wrap" function is a
-* pointer to the "source" function, and it should cast this
-* function pointer (as necessary) and invoke the function with
-* appropriate arguments to obtain the next FITS header card.
-* The "source_wrap" function should then return a pointer
-* to a dynamically allocated, null terminated string containing
-* the text that was read. The string will be freed (using
-* astFree) when no longer required and the "source_wrap"
-* function need not concern itself with this. A NULL pointer
-* should be returned if there is no more input to read.
-*
-* If "source" is NULL, the FitsChan will remain empty until
-* cards are added explicitly (e.g. using astPutCards or astPutFits).
-* sink
-* Pointer to a "sink" function which will be used to deliver
-* FITS header cards. Generally, this will be obtained by
-* casting a pointer to a sink function which is compatible with
-* the "sink_wrap" wrapper function (below). The pointer should
-* later be cast back to its original type by the "sink_wrap"
-* function before the function is invoked.
-*
-* If "sink" is NULL, the contents of the FitsChan will not be
-* written out before being deleted.
-* sink_wrap
-* Pointer to a function which can be used to invoke the "sink"
-* function supplied (above). This wrapper function is necessary
-* in order to hide variations in the nature of the sink
-* function, such as may arise when it is supplied by a foreign
-* (non-C) language interface.
-*
-* The first parameter of the "sink_wrap" function is a pointer
-* to the "sink" function, and the second parameter is a pointer
-* to a const, null-terminated character string containing the
-* text to be written. The "sink_wrap" function should cast the
-* "sink" function pointer (as necessary) and invoke the
-* function with appropriate arguments to deliver the line of
-* output text. The "sink_wrap" function then returns void.
-*
-* If "sink_wrap" is NULL, the contents of the FitsChan will not be
-* written out before being deleted.
-* options
-* Pointer to a null-terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new FitsChan. The syntax used is identical to
-* that for the astSet function and may include "printf" format
-* specifiers identified by "%" symbols in the normal way.
-* ...
-* If the "options" string contains "%" format specifiers, then
-* an optional list of additional arguments may follow it in
-* order to supply values to be substituted for these
-* specifiers. The rules for supplying these are identical to
-* those for the astSet function (and for the C "printf"
-* function).
-
-* Returned Value:
-* astFitsChanFor()
-* A pointer to the new FitsChan.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-* function is invoked with the global error status set, or if it
-* should fail for any reason.
-* - This function is only available through the public interface
-* to the FitsChan class (not the protected interface) and is
-* intended solely for use in implementing foreign language
-* interfaces to this class.
-*-
-
-* Implememtation Notes:
-* - This function behaves exactly like astFitsChanId_, in that it
-* returns ID values and not true C pointers, but it has two
-* additional arguments. These are pointers to the "wrapper
-* functions" which are needed to accommodate foreign language
-* interfaces.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFitsChan *new; /* Pointer to new FitsChan */
- va_list args; /* Variable argument list */
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialise the FitsChan, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitFitsChan( NULL, sizeof( AstFitsChan ), !class_init,
- &class_vtab, "FitsChan", source, source_wrap,
- sink, sink_wrap );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- FitsChan's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new FitsChan. */
- return astMakeId( new );
-}
-
-AstFitsChan *astInitFitsChan_( void *mem, size_t size, int init,
- AstFitsChanVtab *vtab, const char *name,
- const char *(* source)( void ),
- char *(* source_wrap)( const char *(*)( void ), int * ),
- void (* sink)( const char * ),
- void (* sink_wrap)( void (*)( const char * ),
- const char *, int * ), int *status ) {
-/*
-*+
-* Name:
-* astInitFitsChan
-
-* Purpose:
-* Initialise a FitsChan.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "fitschan.h"
-* AstFitsChan *astInitFitsChan_( void *mem, size_t size, int init,
-* AstFitsChanVtab *vtab, const char *name,
-* const char *(* source)( void ),
-* char *(* source_wrap)( const char *(*)( void ), int * ),
-* void (* sink)( const char * ),
-* void (* sink_wrap)( void (*)( const char * ),
-* const char *, int * ) )
-
-* Class Membership:
-* FitsChan initialiser.
-
-* Description:
-* This function is provided for use by class implementations to
-* initialise a new FitsChan object. It allocates memory (if
-* necessary) to accommodate the FitsChan plus any additional data
-* associated with the derived class. It then initialises a
-* FitsChan structure at the start of this memory. If the "init"
-* flag is set, it also initialises the contents of a virtual
-* function table for a FitsChan at the start of the memory passed
-* via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the FitsChan is to be
-* initialised. This must be of sufficient size to accommodate
-* the FitsChan data (sizeof(FitsChan)) plus any data used by the
-* derived class. If a value of NULL is given, this function
-* will allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the FitsChan (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the FitsChan structure, so a valid value must be
-* supplied even if not required for allocating memory.
-* init
-* A boolean flag indicating if the FitsChan's virtual function
-* table is to be initialised. If this value is non-zero, the
-* virtual function table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new FitsChan.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-* source
-* Pointer to a "source" function which will be used to obtain
-* FITS header cards. Generally, this will be obtained by
-* casting a pointer to a source function which is compatible
-* with the "source_wrap" wrapper function (below). The pointer
-* should later be cast back to its original type by the
-* "source_wrap" function before the function is invoked.
-*
-* If "source" is NULL, the FitsChan will remain empty until
-* cards are added explicitly (e.g. using astPutCards or astPutFits).
-* source_wrap
-* Pointer to a function which can be used to invoke the
-* "source" function supplied (above). This wrapper function is
-* necessary in order to hide variations in the nature of the
-* source function, such as may arise when it is supplied by a
-* foreign (non-C) language interface.
-*
-* The single parameter of the "source_wrap" function is a
-* pointer to the "source" function, and it should cast this
-* function pointer (as necessary) and invoke the function with
-* appropriate arguments to obtain the next FITS header card.
-* The "source_wrap" function should then return a pointer
-* to a dynamically allocated, null terminated string containing
-* the text that was read. The string will be freed (using
-* astFree) when no longer required and the "source_wrap"
-* function need not concern itself with this. A NULL pointer
-* should be returned if there is no more input to read.
-*
-* If "source" is NULL, the FitsChan will remain empty until
-* cards are added explicitly (e.g. using astPutCards or astPutFits).
-* sink
-* Pointer to a "sink" function which will be used to deliver
-* FITS header cards. Generally, this will be obtained by
-* casting a pointer to a sink function which is compatible with
-* the "sink_wrap" wrapper function (below). The pointer should
-* later be cast back to its original type by the "sink_wrap"
-* function before the function is invoked.
-*
-* If "sink" is NULL, the contents of the FitsChan will not be
-* written out before being deleted.
-* sink_wrap
-* Pointer to a function which can be used to invoke the "sink"
-* function supplied (above). This wrapper function is necessary
-* in order to hide variations in the nature of the sink
-* function, such as may arise when it is supplied by a foreign
-* (non-C) language interface.
-*
-* The first parameter of the "sink_wrap" function is a pointer
-* to the "sink" function, and the second parameter is a pointer
-* to a const, null-terminated character string containing the
-* text to be written. The "sink_wrap" function should cast the
-* "sink" function pointer (as necessary) and invoke the
-* function with appropriate arguments to deliver the line of
-* output text. The "sink_wrap" function then returns void.
-*
-* If "sink_wrap" is NULL, the contents of the FitsChan will not be
-* written out before being deleted.
-
-* Returned Value:
-* A pointer to the new FitsChan.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstFitsChan *new; /* Pointer to new FitsChan */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitFitsChanVtab( vtab, name );
-
-/* Initialise a Channel structure (the parent class) as the first
- component within the FitsChan structure, allocating memory if
- necessary. I am not sure why FitsChan has its own source_wrap and
- sink_wrap items, rather than just using those inherited from Channel.
- It may be possible to do away with the fitschan wrappers and just use
- the channel wrapper, but I have not yet tried this. Old mail from RFWS
- suggests that it may be because the F77 FitsChan source and sink
- interfaces handle fixed length strings (80 characters), whereas
- Channel sournce and sink handle variable length strings. This needs
- investigating. */
- new = (AstFitsChan *) astInitChannel( mem, size, 0,
- (AstChannelVtab *) vtab, name,
- NULL, NULL, NULL, NULL );
- if ( astOK ) {
-
-/* Initialise the FitsChan data. */
-/* ---------------------------- */
- new->head = NULL;
- new->card = NULL;
- new->keyseq = NULL;
- new->keywords = NULL;
- new->defb1950 = -1;
- new->cdmatrix = -1;
- new->carlin = -1;
- new->iwc = -1;
- new->clean = -1;
- new->fitsdigits = DBL_DIG;
- new->encoding = UNKNOWN_ENCODING;
- new->warnings = NULL;
-
-/* Save the pointers to the source and sink functions and the wrapper
- functions that invoke them. */
- new->source = source;
- new->source_wrap = source_wrap;
- new->sink = sink;
- new->sink_wrap = sink_wrap;
-
-/* Rewind the FitsChan so that the next read operation will return the
- first card. */
- new->card = new->head;
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstFitsChan *astLoadFitsChan_( void *mem, size_t size,
- AstFitsChanVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadFitsChan
-
-* Purpose:
-* Load a FitsChan.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "fitschan.h"
-* AstFitsChan *astLoadFitsChan( void *mem, size_t size,
-* AstFitsChanVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* FitsChan loader.
-
-* Description:
-* This function is provided to load a new FitsChan using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* FitsChan structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a FitsChan at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the FitsChan is to be
-* loaded. This must be of sufficient size to accommodate the
-* FitsChan data (sizeof(FitsChan)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the FitsChan (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the FitsChan structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstFitsChan) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new FitsChan. If this is NULL, a pointer
-* to the (static) virtual function table for the FitsChan class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "FitsChan" is used instead.
-
-* Returned Value:
-* A pointer to the new FitsChan.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFitsChan *new; /* Pointer to the new FitsChan */
- char *comment; /* Pointer to keyword comment */
- char *keynm; /* Keyword name */
- char *text; /* Textual version of integer value */
- char buff[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- double dval[2]; /* Double precision data values */
- int flags; /* Keyword flags */
- int free_data; /* Should data memory be freed? */
- int ival[2]; /* Integer data values */
- int ncard; /* No. of FitsCards read so far */
- int type; /* Keyword type */
- void *data; /* Pointer to keyword data value */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this FitsChan. In this case the
- FitsChan belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstFitsChan );
- vtab = &class_vtab;
- name = "FitsChan";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitFitsChanVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built FitsChan. */
- new = astLoadChannel( mem, size, (AstChannelVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "FitsChan" );
-
-/* Initialise the KeyMap holding the keywords in the FitsChan. */
- new->keywords = NULL;
-
-/* Initialise the list of keyword sequence numbers. */
- new->keyseq = NULL;
-
-/* Set the pointers to the source and sink functions, and their
- wrapper functions, to NULL (we cannot restore these since they
- refer to process-specific addresses). */
- new->source = NULL;
- new->source_wrap = NULL;
- new->sink = NULL;
- new->sink_wrap = NULL;
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* Encoding. */
-/* --------- */
- text = astReadString( channel, "encod", UNKNOWN_STRING );
- if( text && strcmp( text, UNKNOWN_STRING ) ) {
- new->encoding = FindString( MAX_ENCODING + 1, xencod, text,
- "the FitsChan component 'Encod'",
- "astRead", astGetClass( channel ), status );
- } else {
- new->encoding = UNKNOWN_ENCODING;
- }
- if ( TestEncoding( new, status ) ) SetEncoding( new, new->encoding, status );
- text = astFree( text );
-
-/* FitsDigits. */
-/* ----------- */
- new->fitsdigits = astReadInt( channel, "fitsdg", DBL_DIG );
- if ( TestFitsDigits( new, status ) ) SetFitsDigits( new, new->fitsdigits, status );
-
-/* DefB1950 */
-/* -------- */
- new->defb1950 = astReadInt( channel, "dfb1950", -1 );
- if ( TestDefB1950( new, status ) ) SetDefB1950( new, new->defb1950, status );
-
-/* CDMatrix */
-/* -------- */
- new->cdmatrix = astReadInt( channel, "cdmat", -1 );
- if ( TestCDMatrix( new, status ) ) SetCDMatrix( new, new->cdmatrix, status );
-
-/* CarLin */
-/* ------ */
- new->carlin = astReadInt( channel, "carlin", -1 );
- if ( TestCarLin( new, status ) ) SetCarLin( new, new->carlin, status );
-
-/* Iwc */
-/* --- */
- new->iwc = astReadInt( channel, "iwc", -1 );
- if ( TestIwc( new, status ) ) SetIwc( new, new->iwc, status );
-
-/* Clean */
-/* ----- */
- new->clean = astReadInt( channel, "clean", -1 );
- if ( TestClean( new, status ) ) SetClean( new, new->clean, status );
-
-/* Warnings. */
-/* --------- */
- new->warnings = astReadString( channel, "warn", NULL );
-
-/* Card. */
-/* ----- */
-/* Initialise the index of the card to be read next. */
- ncard = 1;
- new->card = NULL;
- new->head = NULL;
-
-/* Load each card. */
- type = AST__NOTYPE + 1;
- while( type != AST__NOTYPE && astOK ){
-
-/* Get the keyword type. */
- (void) sprintf( buff, "ty%d", ncard );
- text = astReadString( channel, buff, " " );
-
- if( strcmp( text, " " ) ) {
- type = FindString( 8, type_names, text,
- "a FitsChan keyword data type",
- "astRead", astGetClass( channel ), status );
- } else {
- type = AST__NOTYPE;
- }
- text = astFree( text );
-
-/* Only proceed if the keyword type was found. */
- if( type != AST__NOTYPE ){
-
-/* Get the keyword name. Use a default blank name. */
- (void) sprintf( buff, "nm%d", ncard );
- keynm = astReadString( channel, buff, " " );
-
-/* Get the data value, using the appropriate data type, unless the
- keyword is a comment keyword or is undefined. */
- free_data = 0;
- if( type == AST__FLOAT ){
- (void) sprintf( buff, "dt%d", ncard );
- dval[ 0 ] = astReadDouble( channel, buff, AST__BAD );
- data = (void *) dval;
-
- } else if( type == AST__STRING || type == AST__CONTINUE ){
- (void) sprintf( buff, "dt%d", ncard );
- data = (void *) astReadString( channel, buff, "" );
- free_data = 1;
-
- } else if( type == AST__INT ){
- (void) sprintf( buff, "dt%d", ncard );
- ival[ 0 ] = astReadInt( channel, buff, 0 );
- data = (void *) ival;
-
- } else if( type == AST__LOGICAL ){
- (void) sprintf( buff, "dt%d", ncard );
- ival[ 0 ] = astReadInt( channel, buff, 0 );
- data = (void *) ival;
-
- } else if( type == AST__COMPLEXF ){
- (void) sprintf( buff, "dr%d", ncard );
- dval[ 0 ] = astReadDouble( channel, buff, AST__BAD );
-
- (void) sprintf( buff, "di%d", ncard );
- dval[ 1 ] = astReadDouble( channel, buff, AST__BAD );
- data = (void *) dval;
-
- } else if( type == AST__COMPLEXI ){
- (void) sprintf( buff, "dr%d", ncard );
- ival[ 0 ] = astReadInt( channel, buff, 0 );
-
- (void) sprintf( buff, "di%d", ncard );
- ival[ 1 ] = astReadInt( channel, buff, 0 );
- data = (void *) ival;
-
- } else {
- data = NULL;
- }
-
-/* Get the keyword flags (only written by versions of AST later than
- V1.4). These are packed into an int. */
- (void) sprintf( buff, "fl%d", ncard );
- flags = astReadInt( channel, buff, 0 );
-
-/* If the flags were not found, use the keyword deletion flag written by
- AST V1.4 and earlier. */
- if( !flags ) {
- (void) sprintf( buff, "dl%d", ncard );
- flags = astReadInt( channel, buff, 0 );
- }
-
-/* Get the keyword comment. */
- (void) sprintf( buff, "cm%d", ncard );
- comment = astReadString( channel, buff, NULL );
-
-/* Append a new card to the output FitsChan. */
- NewCard( new, keynm, type, data, comment, flags, status );
-
-/* Free the character strings, and data (if required). */
- comment = (char *) astFree( (void *) comment );
- keynm = (char *) astFree( (void *) keynm );
- if( free_data ) data = astFree( data );
- }
-
-/* Move on to the next card. */
- ncard++;
- }
-
-/* Set up the current card index. */
- astSetCard( new, astReadInt( channel, "card", 0 ) );
- }
-
-/* If an error occurred, clean up by deleting the new FitsChan. */
- if ( !astOK ) new = astDelete( new );
-
-/* Return the new FitsChan pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-void astEmpty_( AstFitsChan *this, int *status ){
- if( !this ) return;
- (**astMEMBER(this,FitsChan,Empty))(this, status );
-}
-
-void astPutCards_( AstFitsChan *this, const char *cards, int *status ){
- if( !astOK ) return;
- (**astMEMBER(this,FitsChan,PutCards))(this,cards, status );
-}
-
-void astPutFits_( AstFitsChan *this, const char *card, int overwrite, int *status ){
- if( !astOK ) return;
- (**astMEMBER(this,FitsChan,PutFits))(this,card,overwrite, status );
-}
-
-void astDelFits_( AstFitsChan *this, int *status ){
- if( !astOK ) return;
- (**astMEMBER(this,FitsChan,DelFits))(this, status );
-}
-
-void astPurgeWCS_( AstFitsChan *this, int *status ){
- if( !astOK ) return;
- (**astMEMBER(this,FitsChan,PurgeWCS))(this, status );
-}
-
-void astRetainFits_( AstFitsChan *this, int *status ){
- if( !astOK ) return;
- (**astMEMBER(this,FitsChan,RetainFits))(this, status );
-}
-
-int astFitsEof_( AstFitsChan *this, int *status ){
- if( !this ) return 1;
- return (**astMEMBER(this,FitsChan,FitsEof))( this, status );
-}
-
-void astSetFitsCom_( AstFitsChan *this, const char *name,
- const char *comment, int overwrite, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,FitsChan,SetFitsCom))( this, name, comment, overwrite, status );
-}
-
-void astSetFitsI_( AstFitsChan *this, const char *name, int value,
- const char *comment, int overwrite, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,FitsChan,SetFitsI))( this, name, value, comment, overwrite, status );
-}
-
-void astSetFitsF_( AstFitsChan *this, const char *name, double value,
- const char *comment, int overwrite, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,FitsChan,SetFitsF))( this, name, value, comment, overwrite, status );
-}
-
-void astSetFitsS_( AstFitsChan *this, const char *name, const char *value,
- const char *comment, int overwrite, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,FitsChan,SetFitsS))( this, name, value, comment, overwrite, status );
-}
-
-void astSetFitsCN_( AstFitsChan *this, const char *name, const char *value,
- const char *comment, int overwrite, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,FitsChan,SetFitsCN))( this, name, value, comment, overwrite, status );
-}
-
-void astSetFitsCF_( AstFitsChan *this, const char *name, double *value,
- const char *comment, int overwrite, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,FitsChan,SetFitsCF))( this, name, value, comment, overwrite, status );
-}
-
-void astSetFitsCI_( AstFitsChan *this, const char *name, int *value,
- const char *comment, int overwrite, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,FitsChan,SetFitsCI))( this, name, value, comment, overwrite, status );
-}
-
-void astSetFitsL_( AstFitsChan *this, const char *name, int value,
- const char *comment, int overwrite, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,FitsChan,SetFitsL))( this, name, value, comment, overwrite, status );
-}
-
-void astSetFitsU_( AstFitsChan *this, const char *name, const char *comment,
- int overwrite, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,FitsChan,SetFitsU))( this, name, comment, overwrite, status );
-}
-
-void astSetFitsCM_( AstFitsChan *this, const char *comment, int overwrite, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,FitsChan,SetFitsCM))( this, comment, overwrite, status );
-}
-
-void astClearCard_( AstFitsChan *this, int *status ){
- if( !this ) return;
- (**astMEMBER(this,FitsChan,ClearCard))( this, status );
-}
-
-void astSetCard_( AstFitsChan *this, int card, int *status ){
- if( !this ) return;
- (**astMEMBER(this,FitsChan,SetCard))( this, card, status );
-}
-
-int astTestCard_( AstFitsChan *this, int *status ){
- if( !this ) return 0;
- return (**astMEMBER(this,FitsChan,TestCard))( this, status );
-}
-
-int astGetCard_( AstFitsChan *this, int *status ){
- if( !this ) return 0;
- return (**astMEMBER(this,FitsChan,GetCard))( this, status );
-}
-
-int astGetNcard_( AstFitsChan *this, int *status ){
- if( !this ) return 0;
- return (**astMEMBER(this,FitsChan,GetNcard))( this, status );
-}
-
-int astGetClean_( AstFitsChan *this, int *status ){
- if( !this ) return 0;
- return (**astMEMBER(this,FitsChan,GetClean))( this, status );
-}
-
-const char *astGetAllWarnings_( AstFitsChan *this, int *status ){
- if( !this ) return NULL;
- return (**astMEMBER(this,FitsChan,GetAllWarnings))( this, status );
-}
-
-int astGetFitsCF_( AstFitsChan *this, const char *name, double *value, int *status ){
- if( !astOK ) return 0;
- return (**astMEMBER(this,FitsChan,GetFitsCF))( this, name, value, status );
-}
-
-int astGetFitsCI_( AstFitsChan *this, const char *name, int *value, int *status ){
- if( !astOK ) return 0;
- return (**astMEMBER(this,FitsChan,GetFitsCI))( this, name, value, status );
-}
-
-int astGetFitsF_( AstFitsChan *this, const char *name, double *value, int *status ){
- if( !astOK ) return 0;
- return (**astMEMBER(this,FitsChan,GetFitsF))( this, name, value, status );
-}
-
-int astGetFitsI_( AstFitsChan *this, const char *name, int *value, int *status ){
- if( !astOK ) return 0;
- return (**astMEMBER(this,FitsChan,GetFitsI))( this, name, value, status );
-}
-
-int astGetFitsL_( AstFitsChan *this, const char *name, int *value, int *status ){
- if( !astOK ) return 0;
- return (**astMEMBER(this,FitsChan,GetFitsL))( this, name, value, status );
-}
-
-int astTestFits_( AstFitsChan *this, const char *name, int *there, int *status ){
- if( there ) *there = 0;
- if( !astOK ) return 0;
- return (**astMEMBER(this,FitsChan,TestFits))( this, name, there, status );
-}
-
-int astGetFitsS_( AstFitsChan *this, const char *name, char **value, int *status ){
- if( !astOK ) return 0;
- return (**astMEMBER(this,FitsChan,GetFitsS))( this, name, value, status );
-}
-
-int astGetFitsCN_( AstFitsChan *this, const char *name, char **value, int *status ){
- if( !astOK ) return 0;
- return (**astMEMBER(this,FitsChan,GetFitsCN))( this, name, value, status );
-}
-
-int astFitsGetCom_( AstFitsChan *this, const char *name, char **comment, int *status ){
- if( !astOK ) return 0;
- return (**astMEMBER(this,FitsChan,FitsGetCom))( this, name, comment, status );
-}
-
-int astKeyFields_( AstFitsChan *this, const char *filter, int maxfld,
- int *ubnd, int *lbnd, int *status ){
- if( !astOK ) return 0;
- return (**astMEMBER(this,FitsChan,KeyFields))( this, filter, maxfld,
- ubnd, lbnd, status );
-}
-
-int astFindFits_( AstFitsChan *this, const char *name, char *card, int inc, int *status ){
- if( !astOK ) return 0;
- return (**astMEMBER(this,FitsChan,FindFits))( this, name, card, inc, status );
-}
-
-int astGetEncoding_( AstFitsChan *this, int *status ){
- if( !astOK ) return UNKNOWN_ENCODING;
- return (**astMEMBER(this,FitsChan,GetEncoding))( this, status );
-}
-
-int astGetCDMatrix_( AstFitsChan *this, int *status ){
- if( !astOK ) return 0;
- return (**astMEMBER(this,FitsChan,GetCDMatrix))( this, status );
-}
-
-
-
-
-
-/*
- * A diagnostic function which lists the contents of a FitsChan to
- * standard output.
- */
-
-
-/*
-static void ListFC( AstFitsChan *, const char * );
-
-static void ListFC( AstFitsChan *this, const char *ttl ) {
- FitsCard *cardo;
- char card[ 81 ];
- printf("%s\n----------------------------------------\n", ttl );
- cardo = (FitsCard *) this->card;
- astClearCard( this );
- while( !astFitsEof( this ) && astOK ){
- FormatCard( this, card, "List" );
- if( this->card == cardo ) {
- printf( "%s <<<<< currrent card <<<<< \n", card );
- } else {
- printf( "%s\n", card );
- }
- MoveCard( this, 1, "List", "FitsChan" );
- }
- this->card = cardo;
-}
-*/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/fitschan.h b/ast-5.3-1/fitschan.h
deleted file mode 100644
index 0510531..0000000
--- a/ast-5.3-1/fitschan.h
+++ /dev/null
@@ -1,671 +0,0 @@
-#if !defined( FITSCHAN_INCLUDED ) /* Include this file only once */
-#define FITSCHAN_INCLUDED
-/*
-*+
-* Name:
-* fitschan.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the FitsChan class.
-
-* Invocation:
-* #include "fitschan.h"
-
-* Description:
-* This include file defines the interface to the FitsChan class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The FitsChan class provides facilities for reading and writing AST
-* Objects in the form of FITS header cards.
-
-* Inheritance:
-* The FitsChan class inherits from the Channel class.
-
-* Macros:
-
-* Protected:
-* AST__NOTYPE
-* Integer dentifier for an illegal FITS data type.
-* AST__COMMENT
-* Integer dentifier for a FITS comment keyword.
-* AST__INT
-* Integer dentifier for the integer FITS data type.
-* AST__FLOAT
-* Integer dentifier for the floating point FITS data type.
-* AST__STRING
-* Integer dentifier for the string FITS data type.
-* AST__CONTINUE
-* Integer dentifier for the continuation string FITS data type.
-* AST__COMPLEXF
-* Integer dentifier for the complex floating point FITS data type.
-* AST__COMPLEXI
-* Integer dentifier for the complex integer FITS data type.
-* AST__LOGICAL
-* Integer dentifier for the logical FITS data type.
-* AST__UNDEF
-* Integer dentifier for undefined FITS data type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-
-* History:
-* 11-DEC-1996 (DSB):
-* Original version.
-* 30-Jun-1997 (DSB):
-* Changed character pointer argument to character array in PutFits.
-* 26-SEP-1997 (DSB):
-* Added CDMatrix attribute.
-* 21-OCT-1997 (DSB):
-* o Renamed astFields as astKeyFields.
-* 1-APR-2000 (DSB):
-* Changes for CDi_j based FITS-WCS standard.
-* 18-MAY-2000 (DSB):
-* Added Warnings attribute.
-* 4-APR-2001 (DSB):
-* Added AllWarnings attribute.
-* 20-FEB-2002 (DSB):
-* Added CarLin attribute.
-* 8-JAN-2003 (DSB):
-* Added protected astInitFitsChanVtab method.
-* 13-FEB-2003 (DSB):
-* Added Clean attribute.
-* 19-MAR-2004 (DSB):
-* Added astPutCards function.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "channel.h" /* I/O channels (parent class) */
-#include "pointset.h" /* Defines AST__BAD */
-#include "keymap.h" /* Defines the AstKeyMap type */
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros. */
-/* ------- */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-#if defined(astCLASS) /* Protected */
-#define AST__NOTYPE -1
-#define AST__COMMENT 0
-#define AST__INT 1
-#define AST__FLOAT 2
-#define AST__STRING 3
-#define AST__COMPLEXF 4
-#define AST__COMPLEXI 5
-#define AST__LOGICAL 6
-#define AST__CONTINUE 7
-#define AST__UNDEF 8
-
-/* Define constants used to size global arrays in this module. */
-#define AST__FITSCHAN_FITSCARDLEN 80
-#define AST__FITSCHAN_GETATTRIB_BUFF_LEN 50
-
-#endif
-
-
-
-/* Type Definitions. */
-/* ================= */
-
-/* FitsChan structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstFitsChan {
-
-/* Attributes inherited from the parent class. */
- AstChannel channel; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- int encoding; /* System for encoding AST objects ito FITS headers */
- int defb1950; /* Use FK4 B1950 as defaults? */
- int cdmatrix; /* Use a CD matrix in FITS-WCS Encoding? */
- int carlin; /* Use linear CAR mappings? */
- int iwc; /* Include an IWC Frame? */
- int clean; /* Remove used cards even if an error occurs? */
- int fitsdigits; /* No. of decmial places in formatted floating point keyword values */
- char *warnings; /* Pointer to a string containing warning conditions */
- void *card; /* Pointer to next FitsCard to be read */
- void *head; /* Pointer to first FitsCard in the circular linked list */
- AstKeyMap *keyseq; /* List of keyword sequence numbers used */
- AstKeyMap *keywords; /* A KeyMap holding the keywords in the FitsChan */
- const char *(* source)( void ); /* Pointer to source function */
- char *(* source_wrap)( const char *(*)( void ), int * );
- /* Source wrapper function pointer */
- void (* sink)( const char * ); /* Pointer to sink function */
- void (* sink_wrap)( void (*)( const char * ), const char *, int * );
- /* Sink wrapper function pointer */
-
-} AstFitsChan;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstFitsChanVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstChannelVtab channel_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- void (* Empty)( AstFitsChan *, int * );
- void (* DelFits)( AstFitsChan *, int * );
- void (* PurgeWCS)( AstFitsChan *, int * );
- void (* RetainFits)( AstFitsChan *, int * );
- int (* FindFits)( AstFitsChan *, const char *, char [81], int, int * );
- void (* PutFits)( AstFitsChan *, const char [81], int, int * );
- void (* PutCards)( AstFitsChan *, const char *, int * );
- int (* KeyFields)( AstFitsChan *, const char *, int, int *, int *, int * );
- int (* FitsEof)( AstFitsChan *, int * );
- int (* GetFitsCF)( AstFitsChan *, const char *, double *, int * );
- int (* GetFitsCI)( AstFitsChan *, const char *, int *, int * );
- int (* GetFitsF)( AstFitsChan *, const char *, double *, int * );
- int (* GetFitsI)( AstFitsChan *, const char *, int *, int * );
- int (* GetFitsL)( AstFitsChan *, const char *, int *, int * );
- int (* TestFits)( AstFitsChan *, const char *, int *, int * );
- int (* GetFitsS)( AstFitsChan *, const char *, char **, int * );
- int (* GetFitsCN)( AstFitsChan *, const char *, char **, int * );
- int (* FitsGetCom)( AstFitsChan *, const char *, char **, int * );
- void (* SetFitsCom)( AstFitsChan *, const char *, const char *, int, int * );
- void (* SetFitsCF)( AstFitsChan *, const char *, double *, const char *, int, int * );
- void (* SetFitsCI)( AstFitsChan *, const char *, int *, const char *, int, int * );
- void (* SetFitsF)( AstFitsChan *, const char *, double, const char *, int, int * );
- void (* SetFitsI)( AstFitsChan *, const char *, int, const char *, int, int * );
- void (* SetFitsL)( AstFitsChan *, const char *, int, const char *, int, int * );
- void (* SetFitsU)( AstFitsChan *, const char *, const char *, int, int * );
- void (* SetFitsS)( AstFitsChan *, const char *, const char *, const char *, int, int * );
- void (* SetFitsCN)( AstFitsChan *, const char *, const char *, const char *, int, int * );
- void (* SetFitsCM)( AstFitsChan *, const char *, int, int * );
- int (* GetCard)( AstFitsChan *, int * );
- int (* TestCard)( AstFitsChan *, int * );
- void (* SetCard)( AstFitsChan *, int, int * );
- void (* ClearCard)( AstFitsChan *, int * );
- int (* GetFitsDigits)( AstFitsChan *, int * );
- int (* TestFitsDigits)( AstFitsChan *, int * );
- void (* SetFitsDigits)( AstFitsChan *, int, int * );
- void (* ClearFitsDigits)( AstFitsChan *, int * );
- int (* GetDefB1950)( AstFitsChan *, int * );
- int (* TestDefB1950)( AstFitsChan *, int * );
- void (* SetDefB1950)( AstFitsChan *, int, int * );
- void (* ClearDefB1950)( AstFitsChan *, int * );
- int (* GetCarLin)( AstFitsChan *, int * );
- int (* TestCarLin)( AstFitsChan *, int * );
- void (* SetCarLin)( AstFitsChan *, int, int * );
- void (* ClearCarLin)( AstFitsChan *, int * );
- int (* GetNcard)( AstFitsChan *, int * );
- int (* GetEncoding)( AstFitsChan *, int * );
- int (* TestEncoding)( AstFitsChan *, int * );
- void (* SetEncoding)( AstFitsChan *, int, int * );
- void (* ClearEncoding)( AstFitsChan *, int * );
- const char *(* GetWarnings)( AstFitsChan *, int * );
- const char *(* GetAllWarnings)( AstFitsChan *, int * );
- int (* TestWarnings)( AstFitsChan *, int * );
- void (* ClearWarnings)( AstFitsChan *, int * );
- void (* SetWarnings)( AstFitsChan *, const char *, int * );
- int (* GetClean)( AstFitsChan *, int * );
- int (* TestClean)( AstFitsChan *, int * );
- void (* SetClean)( AstFitsChan *, int, int * );
- void (* ClearClean)( AstFitsChan *, int * );
- int (* GetCDMatrix)( AstFitsChan *, int * );
- int (* TestCDMatrix)( AstFitsChan *, int * );
- void (* SetCDMatrix)( AstFitsChan *, int, int * );
- void (* ClearCDMatrix)( AstFitsChan *, int * );
-
- int (* GetIwc)( AstFitsChan *, int * );
- int (* TestIwc)( AstFitsChan *, int * );
- void (* SetIwc)( AstFitsChan *, int, int * );
- void (* ClearIwc)( AstFitsChan *, int * );
-
-} AstFitsChanVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstFitsChanGlobals {
- AstFitsChanVtab Class_Vtab;
- int Class_Init;
- char GetAttrib_Buff[ AST__FITSCHAN_GETATTRIB_BUFF_LEN + 1 ];
- char CnvType_Text[ AST__FITSCHAN_FITSCARDLEN + 1 ];
- char CnvType_Text0[ AST__FITSCHAN_FITSCARDLEN + 1 ];
- char CnvType_Text1[ AST__FITSCHAN_FITSCARDLEN + 1 ];
- int Items_Written;
- int Write_Nest;
- int Current_Indent;
- int Ignore_Used;
- int Mark_New;
- int CreateKeyword_Seq_Nchars;
- char FormatKey_Buff[ 10 ];
- char FitsGetCom_Sval[ AST__FITSCHAN_FITSCARDLEN + 1 ];
- const char *IsSpectral_Ret;
- char Match_Fmt[ 10 ];
- const char *Match_Template;
- int *Match_PA;
- int *Match_PB;
- int Match_NA;
- int Match_NB;
- int Match_Nentry;
- char WcsCelestial_Type[ 4 ];
-} AstFitsChanGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(FitsChan) /* Check class membership */
-astPROTO_ISA(FitsChan) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstFitsChan *astFitsChan_( const char *(*)( void ), void (*)( const char * ),
- const char *, int *, ...);
-#else
-AstFitsChan *astFitsChanId_( const char *(*)( void ), void (*)( const char * ),
- const char *, ... )__attribute__((format(printf,3,4)));
-AstFitsChan *astFitsChanForId_( const char *(*)( void ),
- char *(*)( const char *(*)( void ), int * ),
- void (*)( const char * ),
- void (*)( void (*)( const char * ),
- const char *, int * ),
- const char *, ... );
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstFitsChan *astInitFitsChan_( void *, size_t, int, AstFitsChanVtab *,
- const char *,
- const char *(*)( void ),
- char *(*)( const char *(*)( void ), int * ),
- void (*)( const char * ),
- void (*)( void (*)( const char * ), const char *, int * ), int * );
-
-/* Vtab initialiser. */
-void astInitFitsChanVtab_( AstFitsChanVtab *, const char *, int * );
-
-
-
-/* Loader. */
-AstFitsChan *astLoadFitsChan_( void *, size_t, AstFitsChanVtab *,
- const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitFitsChanGlobals_( AstFitsChanGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
- void astPutFits_( AstFitsChan *, const char [81], int, int * );
- void astPutCards_( AstFitsChan *, const char *, int * );
- int astFindFits_( AstFitsChan *, const char *, char [81], int, int * );
- void astDelFits_( AstFitsChan *, int * );
- void astPurgeWCS_( AstFitsChan *, int * );
- void astRetainFits_( AstFitsChan *, int * );
- void astSetFitsCF_( AstFitsChan *, const char *, double *, const char *, int, int * );
- void astSetFitsCI_( AstFitsChan *, const char *, int *, const char *, int, int * );
- void astSetFitsF_( AstFitsChan *, const char *, double, const char *, int, int * );
- void astSetFitsI_( AstFitsChan *, const char *, int, const char *, int, int * );
- void astSetFitsL_( AstFitsChan *, const char *, int, const char *, int, int * );
- void astSetFitsU_( AstFitsChan *, const char *, const char *, int, int * );
- void astSetFitsS_( AstFitsChan *, const char *, const char *, const char *, int, int * );
- void astSetFitsCM_( AstFitsChan *, const char *, int, int * );
- void astSetFitsCN_( AstFitsChan *, const char *, const char *, const char *, int, int * );
- int astGetFitsCF_( AstFitsChan *, const char *, double *, int * );
- int astGetFitsCI_( AstFitsChan *, const char *, int *, int * );
- int astGetFitsF_( AstFitsChan *, const char *, double *, int * );
- int astGetFitsI_( AstFitsChan *, const char *, int *, int * );
- int astGetFitsL_( AstFitsChan *, const char *, int *, int * );
- int astTestFits_( AstFitsChan *, const char *, int *, int * );
- int astGetFitsS_( AstFitsChan *, const char *, char **, int * );
- int astGetFitsCN_( AstFitsChan *, const char *, char **, int * );
-
-# if defined(astCLASS) /* Protected */
-
- int astFitsEof_( AstFitsChan *, int * );
- int astFitsGetCom_( AstFitsChan *, const char *, char **, int * );
- void astSetFitsCom_( AstFitsChan *, const char *, const char *, int, int * );
-
- void astEmpty_( AstFitsChan *, int * );
- int astKeyFields_( AstFitsChan *, const char *, int, int *, int *, int * );
-
- int astGetCard_( AstFitsChan *, int * );
- int astTestCard_( AstFitsChan *, int * );
- void astSetCard_( AstFitsChan *, int, int * );
- void astClearCard_( AstFitsChan *, int * );
-
- int astGetDefB1950_( AstFitsChan *, int * );
- int astTestDefB1950_( AstFitsChan *, int * );
- void astSetDefB1950_( AstFitsChan *, int, int * );
- void astClearDefB1950_( AstFitsChan *, int * );
-
- int astGetCDMatrix_( AstFitsChan *, int * );
- int astTestCDMatrix_( AstFitsChan *, int * );
- void astSetCDMatrix_( AstFitsChan *, int, int * );
- void astClearCDMatrix_( AstFitsChan *, int * );
-
- int astGetCarLin_( AstFitsChan *, int * );
- int astTestCarLin_( AstFitsChan *, int * );
- void astSetCarLin_( AstFitsChan *, int, int * );
- void astClearCarLin_( AstFitsChan *, int * );
-
- int astGetIwc_( AstFitsChan *, int * );
- int astTestIwc_( AstFitsChan *, int * );
- void astSetIwc_( AstFitsChan *, int, int * );
- void astClearIwc_( AstFitsChan *, int * );
-
- int astGetClean_( AstFitsChan *, int * );
- int astTestClean_( AstFitsChan *, int * );
- void astSetClean_( AstFitsChan *, int, int * );
- void astClearClean_( AstFitsChan *, int * );
-
- int astGetFitsDigits_( AstFitsChan *, int * );
- int astTestFitsDigits_( AstFitsChan *, int * );
- void astSetFitsDigits_( AstFitsChan *, int, int * );
- void astClearFitsDigits_( AstFitsChan *, int * );
-
- const char *astGetAllWarnings_( AstFitsChan *, int * );
-
- const char *astGetWarnings_( AstFitsChan *, int * );
- int astTestWarnings_( AstFitsChan *, int * );
- void astClearWarnings_( AstFitsChan *, int * );
- void astSetWarnings_( AstFitsChan *, const char *, int * );
-
- int astGetNcard_( AstFitsChan *, int * );
-
- int astGetEncoding_( AstFitsChan *, int * );
- int astTestEncoding_( AstFitsChan *, int * );
- void astSetEncoding_( AstFitsChan *, int, int * );
- void astClearEncoding_( AstFitsChan *, int * );
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckFitsChan(this) astINVOKE_CHECK(FitsChan,this,0)
-#define astVerifyFitsChan(this) astINVOKE_CHECK(FitsChan,this,1)
-
-/* Test class membership. */
-#define astIsAFitsChan(this) astINVOKE_ISA(FitsChan,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astFitsChan astINVOKE(F,astFitsChan_)
-#else
-#define astFitsChan astINVOKE(F,astFitsChanId_)
-#define astFitsChanFor astINVOKE(F,astFitsChanForId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitFitsChan(mem,size,init,vtab,name,source,sourcewrap,sink,sinkwrap) \
-astINVOKE(O,astInitFitsChan_(mem,size,init,vtab,name,source,sourcewrap,sink,sinkwrap,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitFitsChanVtab(vtab,name) astINVOKE(V,astInitFitsChanVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadFitsChan(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadFitsChan_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckFitsChan to validate FitsChan pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#define astPutFits(this,card,overwrite) \
-astINVOKE(V,astPutFits_(astCheckFitsChan(this),card,overwrite,STATUS_PTR))
-
-#define astPutCards(this,cards) \
-astINVOKE(V,astPutCards_(astCheckFitsChan(this),cards,STATUS_PTR))
-
-#define astDelFits(this) \
-astINVOKE(V,astDelFits_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astPurgeWCS(this) \
-astINVOKE(V,astPurgeWCS_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astRetainFits(this) \
-astINVOKE(V,astRetainFits_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astFindFits( this, name, card, inc ) \
-astINVOKE(V,astFindFits_(astCheckFitsChan(this),name,card,inc,STATUS_PTR))
-
-#define astSetFitsI(this,name,value,comment,overwrite) \
-astINVOKE(V,astSetFitsI_(astCheckFitsChan(this),name,value,comment,overwrite,STATUS_PTR))
-
-#define astSetFitsF(this,name,value,comment,overwrite) \
-astINVOKE(V,astSetFitsF_(astCheckFitsChan(this),name,value,comment,overwrite,STATUS_PTR))
-
-#define astSetFitsS(this,name,value,comment,overwrite) \
-astINVOKE(V,astSetFitsS_(astCheckFitsChan(this),name,value,comment,overwrite,STATUS_PTR))
-
-#define astSetFitsCN(this,name,value,comment,overwrite) \
-astINVOKE(V,astSetFitsCN_(astCheckFitsChan(this),name,value,comment,overwrite,STATUS_PTR))
-
-#define astSetFitsCI(this,name,value,comment,overwrite) \
-astINVOKE(V,astSetFitsCI_(astCheckFitsChan(this),name,value,comment,overwrite,STATUS_PTR))
-
-#define astSetFitsCF(this,name,value,comment,overwrite) \
-astINVOKE(V,astSetFitsCF_(astCheckFitsChan(this),name,value,comment,overwrite,STATUS_PTR))
-
-#define astSetFitsL(this,name,value,comment,overwrite) \
-astINVOKE(V,astSetFitsL_(astCheckFitsChan(this),name,value,comment,overwrite,STATUS_PTR))
-
-#define astSetFitsU(this,name,comment,overwrite) \
-astINVOKE(V,astSetFitsU_(astCheckFitsChan(this),name,comment,overwrite,STATUS_PTR))
-
-#define astSetFitsCM(this,comment,overwrite) \
-astINVOKE(V,astSetFitsCM_(astCheckFitsChan(this),comment,overwrite,STATUS_PTR))
-
-#define astGetFitsCF(this,name,value) \
-astINVOKE(V,astGetFitsCF_(astCheckFitsChan(this),name,value,STATUS_PTR))
-
-#define astGetFitsCI(this,name,value) \
-astINVOKE(V,astGetFitsCI_(astCheckFitsChan(this),name,value,STATUS_PTR))
-
-#define astGetFitsF(this,name,value) \
-astINVOKE(V,astGetFitsF_(astCheckFitsChan(this),name,value,STATUS_PTR))
-
-#define astGetFitsI(this,name,value) \
-astINVOKE(V,astGetFitsI_(astCheckFitsChan(this),name,value,STATUS_PTR))
-
-#define astGetFitsL(this,name,value) \
-astINVOKE(V,astGetFitsL_(astCheckFitsChan(this),name,value,STATUS_PTR))
-
-#define astTestFits(this,name,there) \
-astINVOKE(V,astTestFits_(astCheckFitsChan(this),name,there,STATUS_PTR))
-
-#define astGetFitsS(this,name,value) \
-astINVOKE(V,astGetFitsS_(astCheckFitsChan(this),name,value,STATUS_PTR))
-
-#define astGetFitsCN(this,name,value) \
-astINVOKE(V,astGetFitsCN_(astCheckFitsChan(this),name,value,STATUS_PTR))
-
-
-#if defined(astCLASS) /* Protected */
-
-#define astFitsEof(this) \
-astINVOKE(V,astFitsEof_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astFitsGetCom(this,name,comment) \
-astINVOKE(V,astFitsGetCom_(astCheckFitsChan(this),name,comment,STATUS_PTR))
-
-#define astSetFitsCom(this,name,comment,overwrite) \
-astINVOKE(V,astSetFitsCom_(astCheckFitsChan(this),name,comment,overwrite,STATUS_PTR))
-
-#define astEmpty(this) \
-astINVOKE(V,astEmpty_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astKeyFields(this,filter,maxfld,ubnd,lbnd) \
-astINVOKE(V,astKeyFields_(astCheckFitsChan(this),filter,maxfld,ubnd,lbnd,STATUS_PTR))
-
-#define astClearCard(this) \
-astINVOKE(V,astClearCard_(astCheckFitsChan(this),STATUS_PTR))
-#define astGetCard(this) \
-astINVOKE(V,astGetCard_(astCheckFitsChan(this),STATUS_PTR))
-#define astSetCard(this,card) \
-astINVOKE(V,astSetCard_(astCheckFitsChan(this),card,STATUS_PTR))
-#define astTestCard(this) \
-astINVOKE(V,astTestCard_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astClearDefB1950(this) \
-astINVOKE(V,astClearDefB1950_(astCheckFitsChan(this),STATUS_PTR))
-#define astGetDefB1950(this) \
-astINVOKE(V,astGetDefB1950_(astCheckFitsChan(this),STATUS_PTR))
-#define astSetDefB1950(this,defb950) \
-astINVOKE(V,astSetDefB1950_(astCheckFitsChan(this),defb950,STATUS_PTR))
-#define astTestDefB1950(this) \
-astINVOKE(V,astTestDefB1950_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astClearCDMatrix(this) \
-astINVOKE(V,astClearCDMatrix_(astCheckFitsChan(this),STATUS_PTR))
-#define astGetCDMatrix(this) \
-astINVOKE(V,astGetCDMatrix_(astCheckFitsChan(this),STATUS_PTR))
-#define astSetCDMatrix(this,cdmatrix) \
-astINVOKE(V,astSetCDMatrix_(astCheckFitsChan(this),cdmatrix,STATUS_PTR))
-#define astTestCDMatrix(this) \
-astINVOKE(V,astTestCDMatrix_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astClearCarLin(this) \
-astINVOKE(V,astClearCarLin_(astCheckFitsChan(this),STATUS_PTR))
-#define astGetCarLin(this) \
-astINVOKE(V,astGetCarLin_(astCheckFitsChan(this),STATUS_PTR))
-#define astSetCarLin(this,carln) \
-astINVOKE(V,astSetCarLin_(astCheckFitsChan(this),carln,STATUS_PTR))
-#define astTestCarLin(this) \
-astINVOKE(V,astTestCarLin_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astClearClean(this) \
-astINVOKE(V,astClearClean_(astCheckFitsChan(this),STATUS_PTR))
-#define astGetClean(this) \
-astINVOKE(V,astGetClean_(astCheckFitsChan(this),STATUS_PTR))
-#define astSetClean(this,value) \
-astINVOKE(V,astSetClean_(astCheckFitsChan(this),value,STATUS_PTR))
-#define astTestClean(this) \
-astINVOKE(V,astTestClean_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astClearFitsDigits(this) \
-astINVOKE(V,astClearFitsDigits_(astCheckFitsChan(this),STATUS_PTR))
-#define astGetFitsDigits(this) \
-astINVOKE(V,astGetFitsDigits_(astCheckFitsChan(this),STATUS_PTR))
-#define astSetFitsDigits(this,fitsdigits) \
-astINVOKE(V,astSetFitsDigits_(astCheckFitsChan(this),fitsdigits,STATUS_PTR))
-#define astTestFitsDigits(this) \
-astINVOKE(V,astTestFitsDigits_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astClearWarnings(this) \
-astINVOKE(V,astClearWarnings_(astCheckFitsChan(this),STATUS_PTR))
-#define astGetWarnings(this) \
-astINVOKE(V,astGetWarnings_(astCheckFitsChan(this),STATUS_PTR))
-#define astSetWarnings(this,warnings) \
-astINVOKE(V,astSetWarnings_(astCheckFitsChan(this),warnings,STATUS_PTR))
-#define astTestWarnings(this) \
-astINVOKE(V,astTestWarnings_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astGetAllWarnings(this) \
-astINVOKE(V,astGetAllWarnings_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astGetNcard(this) \
-astINVOKE(V,astGetNcard_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astClearEncoding(this) \
-astINVOKE(V,astClearEncoding_(astCheckFitsChan(this),STATUS_PTR))
-#define astGetEncoding(this) \
-astINVOKE(V,astGetEncoding_(astCheckFitsChan(this),STATUS_PTR))
-#define astSetEncoding(this,encoding) \
-astINVOKE(V,astSetEncoding_(astCheckFitsChan(this),encoding,STATUS_PTR))
-#define astTestEncoding(this) \
-astINVOKE(V,astTestEncoding_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astClearIwc(this) \
-astINVOKE(V,astClearIwc_(astCheckFitsChan(this),STATUS_PTR))
-#define astGetIwc(this) \
-astINVOKE(V,astGetIwc_(astCheckFitsChan(this),STATUS_PTR))
-#define astSetIwc(this,iwc) \
-astINVOKE(V,astSetIwc_(astCheckFitsChan(this),iwc,STATUS_PTR))
-#define astTestIwc(this) \
-astINVOKE(V,astTestIwc_(astCheckFitsChan(this),STATUS_PTR))
-
-#endif
-
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/fkeymap.c b/ast-5.3-1/fkeymap.c
deleted file mode 100644
index fa20aee..0000000
--- a/ast-5.3-1/fkeymap.c
+++ /dev/null
@@ -1,947 +0,0 @@
-/*
-*+
-* Name:
-* fkeymap.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST KeyMap class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the KeyMap class.
-
-* Routines Defined:
-* AST_ISAKEYMAP
-* AST_KEYMAP
-* AST_MAPPUT0<X>
-* AST_MAPPUT1<X>
-* AST_MAPGET0<X>
-* AST_MAPGET1<X>
-* AST_MAPGETELEM<X>
-* AST_MAPREMOVE
-* AST_MAPSIZE
-* AST_MAPLENGTH
-* AST_MAPLENC
-* AST_MAPTYPE
-* AST_MAPKEY
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-
-* History:
-* 13-NOV-2004 (DSB):
-* Original version.
-* 5-JUN-2006 (DSB):
-* Added support for single precision entries.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "keymap.h" /* C interface to the KeyMap class */
-
-F77_LOGICAL_FUNCTION(ast_isakeymap)( INTEGER(THIS), INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAKEYMAP", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAKeyMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_keymap)( CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_KEYMAP", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astKeyMap( "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
-
-F77_SUBROUTINE(ast_mapput0a)( INTEGER(THIS),
- CHARACTER(KEY),
- INTEGER(VALUE),
- CHARACTER(COMMENT),
- INTEGER(STATUS)
- TRAIL(KEY)
- TRAIL(COMMENT) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- GENPTR_INTEGER(VALUE)
- GENPTR_CHARACTER(COMMENT)
- char *comment, *key;
-
- astAt( "AST_MAPPUT0A", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- comment = astString( COMMENT, COMMENT_length );
- astMapPut0A( astI2P( *THIS ), key, astI2P( *VALUE ), comment );
- astFree( key );
- astFree( comment );
- )
-}
-
-F77_SUBROUTINE(ast_mapput0c)( INTEGER(THIS),
- CHARACTER(KEY),
- CHARACTER(VALUE),
- CHARACTER(COMMENT),
- INTEGER(STATUS)
- TRAIL(KEY)
- TRAIL(VALUE)
- TRAIL(COMMENT) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- GENPTR_CHARACTER(VALUE)
- GENPTR_CHARACTER(COMMENT)
- char *comment, *value, *key;
-
- astAt( "AST_MAPPUT0C", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- value = astString( VALUE, VALUE_length );
- comment = astString( COMMENT, COMMENT_length );
- astMapPut0C( astI2P( *THIS ), key, value, comment );
- astFree( key );
- astFree( value );
- astFree( comment );
- )
-}
-
-F77_SUBROUTINE(ast_mapput0i)( INTEGER(THIS),
- CHARACTER(KEY),
- INTEGER(VALUE),
- CHARACTER(COMMENT),
- INTEGER(STATUS)
- TRAIL(KEY)
- TRAIL(COMMENT) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- GENPTR_INTEGER(VALUE)
- GENPTR_CHARACTER(COMMENT)
- char *comment, *key;
-
- astAt( "AST_MAPPUT0I", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- comment = astString( COMMENT, COMMENT_length );
- astMapPut0I( astI2P( *THIS ), key, *VALUE, comment );
- astFree( key );
- astFree( comment );
- )
-}
-
-F77_SUBROUTINE(ast_mapput0d)( INTEGER(THIS),
- CHARACTER(KEY),
- DOUBLE(VALUE),
- CHARACTER(COMMENT),
- INTEGER(STATUS)
- TRAIL(KEY)
- TRAIL(COMMENT) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- GENPTR_DOUBLE(VALUE)
- GENPTR_CHARACTER(COMMENT)
- char *comment, *key;
-
- astAt( "AST_MAPPUT0D", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- comment = astString( COMMENT, COMMENT_length );
- astMapPut0D( astI2P( *THIS ), key, *VALUE, comment );
- astFree( key );
- astFree( comment );
- )
-}
-
-F77_SUBROUTINE(ast_mapput0r)( INTEGER(THIS),
- CHARACTER(KEY),
- REAL(VALUE),
- CHARACTER(COMMENT),
- INTEGER(STATUS)
- TRAIL(KEY)
- TRAIL(COMMENT) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- GENPTR_REAL(VALUE)
- GENPTR_CHARACTER(COMMENT)
- char *comment, *key;
-
- astAt( "AST_MAPPUT0R", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- comment = astString( COMMENT, COMMENT_length );
- astMapPut0F( astI2P( *THIS ), key, *VALUE, comment );
- astFree( key );
- astFree( comment );
- )
-}
-
-F77_SUBROUTINE(ast_mapput1a)( INTEGER(THIS),
- CHARACTER(KEY),
- INTEGER(SIZE),
- INTEGER_ARRAY(VALUE),
- CHARACTER(COMMENT),
- INTEGER(STATUS)
- TRAIL(KEY)
- TRAIL(COMMENT) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- GENPTR_INTEGER(SIZE)
- GENPTR_INTEGER_ARRAY(VALUE)
- GENPTR_CHARACTER(COMMENT)
- char *comment, *key;
- AstObject **values;
- int i;
-
- astAt( "AST_MAPPUT1A", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- comment = astString( COMMENT, COMMENT_length );
-
- values = astMalloc( sizeof( AstObject * )*(size_t)( *SIZE ));
- if( astOK ) {
- for( i = 0; i < *SIZE; i++ ) {
- values[ i ] = astI2P( VALUE[ i ] );
- }
- }
-
- astMapPut1A( astI2P( *THIS ), key, *SIZE, values, comment );
- astFree( values );
- astFree( key );
- astFree( comment );
- )
-}
-
-F77_SUBROUTINE(ast_mapput1c)( INTEGER(THIS),
- CHARACTER(KEY),
- INTEGER(SIZE),
- CHARACTER_ARRAY(VALUE),
- CHARACTER(COMMENT),
- INTEGER(STATUS)
- TRAIL(KEY)
- TRAIL(VALUE)
- TRAIL(COMMENT) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- GENPTR_INTEGER(SIZE)
- GENPTR_CHARACTER_ARRAY(VALUE)
- GENPTR_CHARACTER(COMMENT)
- char *comment, *key;
- const char **values;
- int i;
-
- astAt( "AST_MAPPUT1C", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- comment = astString( COMMENT, COMMENT_length );
-
- values = astMalloc( sizeof( const char * )*(size_t)( *SIZE ));
- if( astOK ) {
- for( i = 0; i < *SIZE; i++ ) {
- values[ i ] = astString( VALUE + i*VALUE_length, VALUE_length );
- }
- }
-
- astMapPut1C( astI2P( *THIS ), key, *SIZE, values, comment );
-
- if( astOK ) {
- for( i = 0; i < *SIZE; i++ ) astFree( (void *) values[ i ] );
- }
- astFree( (void *) values );
- astFree( key );
- astFree( comment );
- )
-}
-
-
-
-F77_SUBROUTINE(ast_mapput1i)( INTEGER(THIS),
- CHARACTER(KEY),
- INTEGER(SIZE),
- INTEGER_ARRAY(VALUE),
- CHARACTER(COMMENT),
- INTEGER(STATUS)
- TRAIL(KEY)
- TRAIL(COMMENT) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- GENPTR_INTEGER(SIZE)
- GENPTR_INTEGER_ARRAY(VALUE)
- GENPTR_CHARACTER(COMMENT)
- char *comment, *key;
-
- astAt( "AST_MAPPUT1I", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- comment = astString( COMMENT, COMMENT_length );
- astMapPut1I( astI2P( *THIS ), key, *SIZE, VALUE, comment );
- astFree( key );
- astFree( comment );
- )
-}
-
-
-F77_SUBROUTINE(ast_mapput1d)( INTEGER(THIS),
- CHARACTER(KEY),
- INTEGER(SIZE),
- DOUBLE_ARRAY(VALUE),
- CHARACTER(COMMENT),
- INTEGER(STATUS)
- TRAIL(KEY)
- TRAIL(COMMENT) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- GENPTR_INTEGER(SIZE)
- GENPTR_DOUBLE_ARRAY(VALUE)
- GENPTR_CHARACTER(COMMENT)
- char *comment, *key;
-
- astAt( "AST_MAPPUT1D", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- comment = astString( COMMENT, COMMENT_length );
- astMapPut1D( astI2P( *THIS ), key, *SIZE, VALUE, comment );
- astFree( key );
- astFree( comment );
- )
-}
-
-F77_SUBROUTINE(ast_mapput1r)( INTEGER(THIS),
- CHARACTER(KEY),
- INTEGER(SIZE),
- REAL_ARRAY(VALUE),
- CHARACTER(COMMENT),
- INTEGER(STATUS)
- TRAIL(KEY)
- TRAIL(COMMENT) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- GENPTR_INTEGER(SIZE)
- GENPTR_REAL_ARRAY(VALUE)
- GENPTR_CHARACTER(COMMENT)
- char *comment, *key;
-
- astAt( "AST_MAPPUT1R", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- comment = astString( COMMENT, COMMENT_length );
- astMapPut1F( astI2P( *THIS ), key, *SIZE, VALUE, comment );
- astFree( key );
- astFree( comment );
- )
-}
-
-
-F77_LOGICAL_FUNCTION(ast_mapget0i)( INTEGER(THIS),
- CHARACTER(KEY),
- INTEGER(VALUE),
- INTEGER(STATUS)
- TRAIL(KEY) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- GENPTR_INTEGER(VALUE)
- F77_LOGICAL_TYPE(RESULT);
- char *key;
-
- astAt( "AST_MAPGET0I", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- RESULT = astMapGet0I( astI2P( *THIS ), key, VALUE ) ? F77_TRUE : F77_FALSE;
- astFree( key );
- )
- return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_mapget0d)( INTEGER(THIS),
- CHARACTER(KEY),
- DOUBLE(VALUE),
- INTEGER(STATUS)
- TRAIL(KEY) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- GENPTR_DOUBLE(VALUE)
- F77_LOGICAL_TYPE(RESULT);
- char *key;
-
- astAt( "AST_MAPGET0D", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- RESULT = astMapGet0D( astI2P( *THIS ), key, VALUE ) ? F77_TRUE : F77_FALSE;
- astFree( key );
- )
- return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_mapget0r)( INTEGER(THIS),
- CHARACTER(KEY),
- REAL(VALUE),
- INTEGER(STATUS)
- TRAIL(KEY) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- GENPTR_REAL(VALUE)
- F77_LOGICAL_TYPE(RESULT);
- char *key;
-
- astAt( "AST_MAPGET0R", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- RESULT = astMapGet0F( astI2P( *THIS ), key, VALUE ) ? F77_TRUE : F77_FALSE;
- astFree( key );
- )
- return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_mapget0c)( INTEGER(THIS),
- CHARACTER(KEY),
- CHARACTER(VALUE),
- INTEGER(L),
- INTEGER(STATUS)
- TRAIL(KEY)
- TRAIL(VALUE) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- GENPTR_CHARACTER(VALUE)
- GENPTR_INTEGER(L)
- F77_LOGICAL_TYPE(RESULT);
- char *key;
- const char *value;
- int i;
-
- astAt( "AST_MAPGET0C", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- value = NULL;
- RESULT = astMapGet0C( astI2P( *THIS ), key, &value ) ? F77_TRUE : F77_FALSE;
- astFree( key );
- i = 0;
- if( value ) {
- for( ; value[ i ] && ( i < VALUE_length ); i++ ) {
- VALUE[ i ] = value[ i ];
- }
- *L = i;
- } else {
- *L = 0;
- }
-
- if( VALUE ) {
- for( ; i < VALUE_length; i++ ) {
- VALUE[ i ] = ' ';
- }
- }
- )
- return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_mapget0a)( INTEGER(THIS),
- CHARACTER(KEY),
- INTEGER(VALUE),
- INTEGER(STATUS)
- TRAIL(KEY) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- GENPTR_INTEGER(VALUE)
- F77_LOGICAL_TYPE(RESULT);
- char *key;
- AstObject *value;
-
- astAt( "AST_MAPGET0A", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- RESULT = astMapGet0A( astI2P( *THIS ), key, &value ) ? F77_TRUE : F77_FALSE;
- astFree( key );
- *VALUE = astP2I( value );
- )
- return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_mapget1i)( INTEGER(THIS),
- CHARACTER(KEY),
- INTEGER(MXVAL),
- INTEGER(NVAL),
- INTEGER_ARRAY(VALUE),
- INTEGER(STATUS)
- TRAIL(KEY) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- GENPTR_INTEGER(MXVAL)
- GENPTR_INTEGER(NVAL)
- GENPTR_INTEGER_ARRAY(VALUE)
- F77_LOGICAL_TYPE(RESULT);
- char *key;
-
- astAt( "AST_MAPGET1I", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- RESULT = astMapGet1I( astI2P( *THIS ), key, *MXVAL, NVAL, VALUE ) ? F77_TRUE : F77_FALSE;
- astFree( key );
- )
- return RESULT;
-}
-
-
-F77_LOGICAL_FUNCTION(ast_mapget1d)( INTEGER(THIS),
- CHARACTER(KEY),
- INTEGER(MXVAL),
- INTEGER(NVAL),
- DOUBLE_ARRAY(VALUE),
- INTEGER(STATUS)
- TRAIL(KEY) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- GENPTR_INTEGER(MXVAL)
- GENPTR_INTEGER(NVAL)
- GENPTR_DOUBLE_ARRAY(VALUE)
- F77_LOGICAL_TYPE(RESULT);
- char *key;
-
- astAt( "AST_MAPGET1D", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- RESULT = astMapGet1D( astI2P( *THIS ), key, *MXVAL, NVAL, VALUE ) ? F77_TRUE : F77_FALSE;
- astFree( key );
- )
- return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_mapget1r)( INTEGER(THIS),
- CHARACTER(KEY),
- INTEGER(MXVAL),
- INTEGER(NVAL),
- REAL_ARRAY(VALUE),
- INTEGER(STATUS)
- TRAIL(KEY) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- GENPTR_INTEGER(MXVAL)
- GENPTR_INTEGER(NVAL)
- GENPTR_REAL_ARRAY(VALUE)
- F77_LOGICAL_TYPE(RESULT);
- char *key;
-
- astAt( "AST_MAPGET1R", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- RESULT = astMapGet1F( astI2P( *THIS ), key, *MXVAL, NVAL, VALUE ) ? F77_TRUE : F77_FALSE;
- astFree( key );
- )
- return RESULT;
-}
-
-
-F77_LOGICAL_FUNCTION(ast_mapget1a)( INTEGER(THIS),
- CHARACTER(KEY),
- INTEGER(MXVAL),
- INTEGER(NVAL),
- INTEGER_ARRAY(VALUE),
- INTEGER(STATUS)
- TRAIL(KEY) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- GENPTR_INTEGER(MXVAL)
- GENPTR_INTEGER(NVAL)
- GENPTR_INTEGER_ARRAY(VALUE)
- F77_LOGICAL_TYPE(RESULT);
- char *key;
- AstObject **values;
- int i;
-
- astAt( "AST_MAPGET1A", NULL, 0 );
- astWatchSTATUS(
- values = astMalloc( sizeof( AstObject *)*(size_t) *MXVAL );
- key = astString( KEY, KEY_length );
- RESULT = astMapGet1A( astI2P( *THIS ), key, *MXVAL, NVAL, values ) ? F77_TRUE : F77_FALSE;
- astFree( key );
- if( astOK ) {
- for( i = 0; i < *NVAL; i++ ) VALUE[ i ] = astP2I( values[ i ] );
- }
- astFree( values );
-
- )
- return RESULT;
-}
-
-
-F77_LOGICAL_FUNCTION(ast_mapget1c)( INTEGER(THIS),
- CHARACTER(KEY),
- INTEGER(MXVAL),
- INTEGER(NVAL),
- CHARACTER_ARRAY(VALUE),
- INTEGER(STATUS)
- TRAIL(KEY)
- TRAIL(VALUE) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- GENPTR_INTEGER(MXVAL)
- GENPTR_INTEGER(NVAL)
- GENPTR_CHARACTER_ARRAY(VALUE)
- F77_LOGICAL_TYPE(RESULT);
- char *key;
- char *values, *c, *d;
- int i, j, term;
-
- astAt( "AST_MAPGET1C", NULL, 0 );
- astWatchSTATUS(
- values = astMalloc( sizeof( char )*(size_t) (*MXVAL)*( VALUE_length + 1 ) );
- key = astString( KEY, KEY_length );
- RESULT = astMapGet1C( astI2P( *THIS ), key, VALUE_length + 1, *MXVAL,
- NVAL, values ) ? F77_TRUE : F77_FALSE;
- astFree( key );
-
-/* Loop round each string value returned in the array */
- if( astOK ) {
- c = values;
- d = VALUE;
- for( i = 0; i < *NVAL; i++ ) {
-
-/* Loop round each of character in the "i"th element of the returned
- array. Copy characters from the work array until a terminating null is
- found. Replace this null by a space and replace all subsequent
- characters by spaces up to the end of the returned array element. */
- term = 0;
- for( j = 0; j < VALUE_length; j++, d++, c++ ) {
- if( term ) {
- *d = ' ';
- } else if( (*d = *c) == 0 ) {
- *d = ' ';
- term = 1;
- }
- }
-
-/* Skip over the extra character at the end of each element in the work
- array. */
- c++;
- }
- }
- astFree( values );
- )
- return RESULT;
-}
-
-
-F77_SUBROUTINE(ast_mapremove)( INTEGER(THIS),
- CHARACTER(KEY),
- INTEGER(STATUS)
- TRAIL(KEY) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- char *key;
-
- astAt( "AST_MAPREMOVE", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- astMapRemove( astI2P( *THIS ), key );
- astFree( key );
- )
-}
-
-F77_INTEGER_FUNCTION(ast_mapsize)( INTEGER(THIS), INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_INTEGER_TYPE(RESULT);
-
- astAt( "AST_MAPSIZE", NULL, 0 );
- astWatchSTATUS(
- RESULT = astMapSize( astI2P( *THIS ) );
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_maplength)( INTEGER(THIS),
- CHARACTER(KEY),
- INTEGER(STATUS)
- TRAIL(KEY) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- F77_INTEGER_TYPE(RESULT);
- char *key;
-
- astAt( "AST_MAPLENGTH", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- RESULT = astMapLength( astI2P( *THIS ), key );
- astFree( key );
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_maplenc)( INTEGER(THIS),
- CHARACTER(KEY),
- INTEGER(STATUS)
- TRAIL(KEY) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- F77_INTEGER_TYPE(RESULT);
- char *key;
-
- astAt( "AST_MAPLENGTH", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- RESULT = astMapLenC( astI2P( *THIS ), key );
- astFree( key );
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_maptype)( INTEGER(THIS),
- CHARACTER(KEY),
- INTEGER(STATUS)
- TRAIL(KEY) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- F77_INTEGER_TYPE(RESULT);
- char *key;
-
- astAt( "AST_MAPLENGTH", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- RESULT = astMapType( astI2P( *THIS ), key );
- astFree( key );
- )
- return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_maphaskey)( INTEGER(THIS),
- CHARACTER(KEY),
- INTEGER(STATUS)
- TRAIL(KEY) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- F77_LOGICAL_TYPE(RESULT);
- char *key;
-
- astAt( "AST_MAPHASKEY", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- RESULT = astMapHasKey( astI2P( *THIS ), key ) ? F77_TRUE : F77_FALSE;
-
- astFree( key );
- )
- return RESULT;
-}
-
-/* NO_CHAR_FUNCTION indicates that the f77.h method of returning a
- character result doesn't work, so add an extra argument instead and
- wrap this function up in a normal FORTRAN 77 function (in the file
- keymap.f). */
-#if NO_CHAR_FUNCTION
-F77_SUBROUTINE(ast_mapkey_a)( CHARACTER(RESULT),
-#else
-F77_SUBROUTINE(ast_mapkey)( CHARACTER_RETURN_VALUE(RESULT),
-#endif
- INTEGER(THIS),
- INTEGER(INDEX),
-#if NO_CHAR_FUNCTION
- INTEGER(STATUS)
- TRAIL(RESULT) ) {
-#else
- INTEGER(STATUS) ) {
-#endif
- GENPTR_CHARACTER(RESULT)
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(INDEX)
- const char *result;
- int i;
-
- astAt( "AST_MAPKEY", NULL, 0 );
- astWatchSTATUS(
- result = astMapKey( astI2P( *THIS ), *INDEX - 1 );
- i = 0;
- if ( astOK ) { /* Copy result */
- for ( ; result[ i ] && i < RESULT_length; i++ ) {
- RESULT[ i ] = result[ i ];
- }
- }
- while ( i < RESULT_length ) RESULT[ i++ ] = ' '; /* Pad with blanks */
- )
-}
-
-
-F77_LOGICAL_FUNCTION(ast_mapgetelemi)( INTEGER(THIS),
- CHARACTER(KEY),
- INTEGER(ELEM),
- INTEGER_ARRAY(VALUE),
- INTEGER(STATUS)
- TRAIL(KEY) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- GENPTR_INTEGER(ELEM)
- GENPTR_INTEGER_ARRAY(VALUE)
- F77_LOGICAL_TYPE(RESULT);
- char *key;
-
- astAt( "AST_MAPGETELEMI", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- RESULT = astMapGetElemI( astI2P( *THIS ), key, *ELEM - 1, VALUE ) ? F77_TRUE : F77_FALSE;
- astFree( key );
- )
- return RESULT;
-}
-
-
-F77_LOGICAL_FUNCTION(ast_mapgetelemd)( INTEGER(THIS),
- CHARACTER(KEY),
- INTEGER(ELEM),
- DOUBLE_ARRAY(VALUE),
- INTEGER(STATUS)
- TRAIL(KEY) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- GENPTR_INTEGER(ELEM)
- GENPTR_DOUBLE_ARRAY(VALUE)
- F77_LOGICAL_TYPE(RESULT);
- char *key;
-
- astAt( "AST_MAPGETELEMD", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- RESULT = astMapGetElemD( astI2P( *THIS ), key, *ELEM - 1, VALUE ) ? F77_TRUE : F77_FALSE;
- astFree( key );
- )
- return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_mapgetelemr)( INTEGER(THIS),
- CHARACTER(KEY),
- INTEGER(ELEM),
- REAL_ARRAY(VALUE),
- INTEGER(STATUS)
- TRAIL(KEY) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- GENPTR_INTEGER(ELEM)
- GENPTR_REAL_ARRAY(VALUE)
- F77_LOGICAL_TYPE(RESULT);
- char *key;
-
- astAt( "AST_MAPGETELEMR", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- RESULT = astMapGetElemF( astI2P( *THIS ), key, *ELEM - 1, VALUE ) ? F77_TRUE : F77_FALSE;
- astFree( key );
- )
- return RESULT;
-}
-
-
-F77_LOGICAL_FUNCTION(ast_mapgetelema)( INTEGER(THIS),
- CHARACTER(KEY),
- INTEGER(ELEM),
- INTEGER_ARRAY(VALUE),
- INTEGER(STATUS)
- TRAIL(KEY) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- GENPTR_INTEGER(ELEM)
- GENPTR_INTEGER_ARRAY(VALUE)
- F77_LOGICAL_TYPE(RESULT);
- char *key;
- AstObject *ptr;
-
- astAt( "AST_MAPGETELEMA", NULL, 0 );
- astWatchSTATUS(
- key = astString( KEY, KEY_length );
- RESULT = astMapGetElemA( astI2P( *THIS ), key, *ELEM - 1, &ptr ) ? F77_TRUE : F77_FALSE;
- astFree( key );
- if( astOK ) *VALUE = astP2I( ptr );
- )
- return RESULT;
-}
-
-
-F77_LOGICAL_FUNCTION(ast_mapgetelemc)( INTEGER(THIS),
- CHARACTER(KEY),
- INTEGER(ELEM),
- CHARACTER_ARRAY(VALUE),
- INTEGER(STATUS)
- TRAIL(KEY)
- TRAIL(VALUE) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(KEY)
- GENPTR_INTEGER(ELEM)
- GENPTR_CHARACTER_ARRAY(VALUE)
- F77_LOGICAL_TYPE(RESULT);
- char *key;
- char *values, *c, *d;
- int j;
-
- astAt( "AST_MAPGETELEMC", NULL, 0 );
- astWatchSTATUS(
- values = astMalloc( sizeof( char )*(size_t) ( VALUE_length + 1 ) );
- key = astString( KEY, KEY_length );
- RESULT = astMapGetElemC( astI2P( *THIS ), key, VALUE_length + 1, *ELEM - 1,
- values ) ? F77_TRUE : F77_FALSE;
- astFree( key );
-
-/* Copy characters from the work array until a terminating null is
- found. Replace this null by a space and replace all subsequent
- characters by spaces up to the end of the returned array element. */
- if( astOK ) {
- c = values;
- d = VALUE;
-
- for( j = 0; j < VALUE_length; j++, d++, c++ ) {
- if( (*d = *c) == 0 ) {
- *d = ' ';
- break;
- }
- }
-
- for( ; j < VALUE_length; j++, d++ ) *d = ' ';
-
- }
- astFree( values );
- )
- return RESULT;
-}
-
-
diff --git a/ast-5.3-1/flutmap.c b/ast-5.3-1/flutmap.c
deleted file mode 100644
index 9466e53..0000000
--- a/ast-5.3-1/flutmap.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-*+
-* Name:
-* flutmap.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST LutMap class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the LutMap class.
-
-* Routines Defined:
-* AST_ISALUTMAP
-* AST_LUTMAP
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 8-JUL-1997 (RFWS):
-* Original version.
-*-
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "lutmap.h" /* C interface to the LutMap class */
-
-F77_LOGICAL_FUNCTION(ast_isalutmap)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISALUTMAP", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsALutMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_lutmap)( INTEGER(NLUT),
- DOUBLE_ARRAY(LUT),
- DOUBLE(START),
- DOUBLE(INC),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(NLUT)
- GENPTR_DOUBLE_ARRAY(LUT)
- GENPTR_DOUBLE(START)
- GENPTR_DOUBLE(INC)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- int i;
-
- astAt( "AST_LUTMAP", NULL, 0 );
- astWatchSTATUS(
- char *options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astLutMap( *NLUT, LUT, *START, *INC, "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fluxframe.c b/ast-5.3-1/fluxframe.c
deleted file mode 100644
index 5957544..0000000
--- a/ast-5.3-1/fluxframe.c
+++ /dev/null
@@ -1,4492 +0,0 @@
-/*
-*class++
-* Name:
-* FluxFrame
-
-* Purpose:
-* Measured flux description.
-
-* Constructor Function:
-c astFluxFrame
-f AST_FLUXFRAME
-
-* Description:
-* A FluxFrame is a specialised form of one-dimensional Frame which
-* represents various systems used to represent the signal level in an
-* observation. The particular coordinate system to be used is specified
-* by setting the FluxFrame's System attribute qualified, as necessary, by
-* other attributes such as the units, etc (see the description of the
-* System attribute for details).
-*
-* All flux values are assumed to be measured at the same frequency or
-* wavelength (as given by the SpecVal attribute). Thus this class is
-* more appropriate for use with images rather than spectra.
-
-* Inheritance:
-* The FluxFrame class inherits from the Frame class.
-
-* Attributes:
-* In addition to those attributes common to all Frames, every
-* FluxFrame also has the following attributes:
-*
-* - SpecVal: The spectral position at which the flux values are measured.
-
-* Functions:
-c The FluxFrame class does not define any new functions beyond those
-f The FluxFrame class does not define any new routines beyond those
-* which are applicable to all Frames.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 6-DEC-2004 (DSB):
-* Original version.
-* 14-DEC-2004 (DSB):
-* Added AST__SBRIGHT and AST__SBRIGHTW systems.
-* 7-DEC-2005 (DSB):
-* Free memory allocated by calls to astReadString.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 31-JAN-2007 (DSB):
-* Modified so that a FluxFrame can be used as a template to find a
-* FluxFrame contained within a CmpFrame. This involves changes in
-* Match and the removal of the local versions of SetMaxAxes and
-* SetMinAxes.
-* 3-SEP-2007 (DSB):
-* In SubFrame, since AlignSystem is extended by the FluxFrame class
-* it needs to be cleared before invoking the parent SubFrame
-* method in cases where the result Frame is not a FluxFrame.
-* 2-OCT-2007 (DSB):
-* In Overlay, clear AlignSystem as well as System before calling
-* the parent overlay method.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS FluxFrame
-
-/* Define the first and last acceptable System values. */
-#define FIRST_SYSTEM AST__FLUXDEN
-#define LAST_SYSTEM AST__SBRIGHTW
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
- compare bad values directory because of the danger of floating point
- exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E8*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Define other numerical constants for use in this module. */
-#define GETATTRIB_BUFF_LEN 50
-#define GETLABEL_BUFF_LEN 200
-#define GETSYMBOL_BUFF_LEN 20
-#define GETTITLE_BUFF_LEN 200
-
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "unit.h" /* Units management facilities */
-#include "globals.h" /* Thread-safe global data access */
-#include "object.h" /* Base Object class */
-#include "frame.h" /* Parent Frame class */
-#include "fluxframe.h" /* Interface definition for this class */
-#include "mapping.h" /* Coordinate Mappings */
-#include "unitmap.h" /* Unit Mappings */
-#include "cmpmap.h" /* Compound Mappings */
-#include "zoommap.h" /* Scaling Mappings */
-#include "specframe.h" /* Spectral Frames */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stddef.h>
-#include <math.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are used or extended by this
- class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstSystemType (* parent_getalignsystem)( AstFrame *, int * );
-static AstSystemType (* parent_getsystem)( AstFrame *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static const char *(* parent_getdomain)( AstFrame *, int * );
-static const char *(* parent_getlabel)( AstFrame *, int, int * );
-static const char *(* parent_getsymbol)( AstFrame *, int, int * );
-static const char *(* parent_gettitle)( AstFrame *, int * );
-static const char *(* parent_getunit)( AstFrame *, int, int * );
-static int (* parent_match)( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int (* parent_subframe)( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_setunit)( AstFrame *, int, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_overlay)( AstFrame *, const int *, AstFrame *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static void (* parent_setsystem)( AstFrame *, AstSystemType, int * );
-static void (* parent_clearsystem)( AstFrame *, int * );
-static void (* parent_clearunit)( AstFrame *, int, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->GetAttrib_Buff[ 0 ] = 0; \
- globals->GetLabel_Buff[ 0 ] = 0; \
- globals->GetSymbol_Buff[ 0 ] = 0; \
- globals->GetTitle_Buff[ 0 ] = 0; \
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(FluxFrame)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(FluxFrame,Class_Init)
-#define class_vtab astGLOBAL(FluxFrame,Class_Vtab)
-#define getattrib_buff astGLOBAL(FluxFrame,GetAttrib_Buff)
-#define getlabel_buff astGLOBAL(FluxFrame,GetLabel_Buff)
-#define getsymbol_buff astGLOBAL(FluxFrame,GetSymbol_Buff)
-#define gettitle_buff astGLOBAL(FluxFrame,GetTitle_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-/* Buffers for strings returned by various functions. */
-static char getattrib_buff[ AST__FLUXFRAME_GETATTRIB_BUFF_LEN + 1 ];
-static char getlabel_buff[ AST__FLUXFRAME_GETLABEL_BUFF_LEN + 1 ];
-static char getsymbol_buff[ AST__FLUXFRAME_GETSYMBOL_BUFF_LEN + 1 ];
-static char gettitle_buff[ AST__FLUXFRAME_GETTITLE_BUFF_LEN + 1 ];
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstFluxFrameVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static int GetObjSize( AstObject *, int * );
-static AstSpecFrame *GetSpecFrame( AstFluxFrame *, int * );
-static AstSystemType DensitySystem( AstSystemType, int * );
-static AstSystemType GetAlignSystem( AstFrame *, int * );
-static AstSystemType GetDensitySystem( AstFluxFrame *, int * );
-static AstSystemType SystemCode( AstFrame *, const char *, int * );
-static AstSystemType ValidateSystem( AstFrame *, AstSystemType, const char *, int * );
-static const char *DefUnit( AstSystemType, const char *, const char *, int * );
-static const char *DensityUnit( AstSystemType, int * );
-static const char *FluxSystemString( AstSystemType, int * );
-static const char *GetDensityUnit( AstFluxFrame *, int * );
-static const char *GetDomain( AstFrame *, int * );
-static const char *GetLabel( AstFrame *, int, int * );
-static const char *GetSymbol( AstFrame *, int, int * );
-static const char *GetTitle( AstFrame *, int * );
-static const char *GetUnit( AstFrame *, int, int * );
-static const char *SystemLabel( AstSystemType, int * );
-static const char *SystemString( AstFrame *, AstSystemType, int * );
-static int GetActiveUnit( AstFrame *, int * );
-static int MakeFluxMapping( AstFluxFrame *, AstFluxFrame *, AstSystemType, AstMapping **, int * );
-static int Match( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int SubFrame( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int TestActiveUnit( AstFrame *, int * );
-static int UnitsOK( AstSystemType, const char *, int, const char *, const char *, int * );
-static void ClearUnit( AstFrame *, int, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void Overlay( AstFrame *, const int *, AstFrame *, int * );
-static void SetUnit( AstFrame *, int, const char *, int * );
-
-static AstSystemType GetSystem( AstFrame *, int * );
-static void SetSystem( AstFrame *, AstSystemType, int * );
-static void ClearSystem( AstFrame *, int * );
-
-static const char *GetAttrib( AstObject *, const char *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-
-static double GetSpecVal( AstFluxFrame *, int * );
-static int TestSpecVal( AstFluxFrame *, int * );
-static void ClearSpecVal( AstFluxFrame *, int * );
-static void SetSpecVal( AstFluxFrame *, double, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Member functions. */
-/* ================= */
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a FluxFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* FluxFrame member function (over-rides the astClearAttrib protected
-* method inherited from the Frame class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* FluxFrame, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the FluxFrame.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function uses one-based axis numbering so that it is
-* suitable for external (public) use.
-*/
-
-/* Local Variables: */
- AstFluxFrame *this; /* Pointer to the FluxFrame structure */
- int len; /* Length of attrib string */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FluxFrame structure. */
- this = (AstFluxFrame *) this_object;
-
-/* Obtain the length of the "attrib" string. */
- len = strlen( attrib );
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* SpecVal. */
-/* -------- */
- if ( !strcmp( attrib, "specval" ) ) {
- astClearSpecVal( this );
-
-/* If the attribute is not recognised, pass it on to the parent method
- for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static void ClearSystem( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* ClearSystem
-
-* Purpose:
-* Clear the System attribute for a FluxFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* void ClearSystem( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* FluxFrame member function (over-rides the astClearSystem protected
-* method inherited from the Frame class).
-
-* Description:
-* This function clears the System attribute for a FluxFrame.
-
-* Parameters:
-* this
-* Pointer to the FluxFrame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstFluxFrame *this; /* Pointer to FluxFrame structure */
- AstSystemType newsys; /* System after clearing */
- AstSystemType oldsys; /* System before clearing */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FluxFrame structure. */
- this = (AstFluxFrame *) this_frame;
-
-/* Save the original system */
- oldsys = astGetSystem( this_frame );
-
-/* Use the parent ClearSystem method to clear the System value. */
- (*parent_clearsystem)( this_frame, status );
-
-/* Get the default System. */
- newsys = astGetSystem( this_frame );
-
-/* If the system has actually changed. */
- if( newsys != oldsys ) {
-
-/* Changing the System value will in general require the Units to change
- as well. If the used has previously specified the units to be used with
- the new system, then re-instate them (they are stored in the "usedunits"
- array in the FluxFrame structure). Otherwise, clear the units so that
- the default units will eb used with the new System. */
- if( (int) newsys < this->nuunits && this->usedunits &&
- this->usedunits[ (int) newsys ] ) {
- (*parent_setunit)( this_frame, 0, this->usedunits[ (int) newsys ], status );
- } else {
- (*parent_clearunit)( this_frame, 0, status );
- }
-
-/* Also, clear all attributes which have system-specific defaults. */
- astClearLabel( this_frame, 0 );
- astClearSymbol( this_frame, 0 );
- astClearTitle( this_frame );
- }
-
-}
-
-static void ClearUnit( AstFrame *this_frame, int axis, int *status ) {
-/*
-* Name:
-* ClearUnit
-
-* Purpose:
-* Clear the value of the Unit string for a FluxFrame's axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* void ClearUnit( AstFrame *this_frame, int axis )
-
-* Class Membership:
-* FluxFrame member function (over-rides the astClearUnit method inherited
-* from the Frame class).
-
-* Description:
-* This function clears the Unit string for a specified axis of a
-* FluxFrame. It also clears the UsedUnit item in the FluxFrame
-* structure corresponding to the current System.
-
-* Parameters:
-* this
-* Pointer to the FluxFrame.
-* axis
-* The number of the axis (zero-based).
-*/
-
-/* Local Variables: */
- AstFluxFrame *this; /* Pointer to the FluxFrame structure */
- int system; /* The FluxFrame's System value */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FluxFrame structure. */
- this = (AstFluxFrame *) this_frame;
-
-/* Validate the axis index. */
- astValidateAxis( this, axis, "astClearUnit" );
-
-/* Clear the UsedUnit item for the current System, if current set. */
- system = (int) astGetSystem( this );
- if( system < this->nuunits && this->usedunits ) {
- this->usedunits[ system ] = astFree( this->usedunits[ system ] );
- }
-
-/* Use the parent method to clear the Unit attribute of the axis. */
- (*parent_clearunit)( this_frame, axis, status );
-}
-
-static const char *DefUnit( AstSystemType system, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* DefUnit
-
-* Purpose:
-* Return the default units for a flux coordinate system type.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* const char *DefUnit( AstSystemType system, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* FluxFrame member function.
-
-* Description:
-* This function returns a textual representation of the default
-* units associated with the specified flux coordinate system.
-
-* Parameters:
-* system
-* The flux coordinate system.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* As tring describing the default units. This string follows the
-* units syntax described in FITS WCS paper I "Representations of world
-* coordinates in FITS" (Greisen & Calabretta).
-
-* Notes:
-* - A NULL pointer is returned if this function is invoked with
-* the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- const char *result; /* Value to return */
-
-/* Initialize */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get an identifier for the default units. */
- if( system == AST__FLUXDEN ) {
- result = "W/m^2/Hz";
-
- } else if( system == AST__FLUXDENW ) {
- result = "W/m^2/Angstrom";
-
- } else if( system == AST__SBRIGHT ) {
- result = "W/m^2/Hz/arcmin**2";
-
- } else if( system == AST__SBRIGHTW ) {
- result = "W/m^2/Angstrom/arcmin**2";
-
-/* Report an error if the coordinate system was not recognised. */
- } else {
- astError( AST__SCSIN, "%s(%s): Corrupt %s contains illegal System "
- "identification code (%d).", status, method, class, class,
- (int) system );
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstSystemType DensitySystem( AstSystemType sys, int *status ) {
-/*
-* Name:
-* DensitySystem
-
-* Purpose:
-* Obtain the System describing the spectral density for a FluxFrame
-* system.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* AstSystemType DensitySystem( AstSystemType sys, int *status )
-
-* Class Membership:
-* FluxFrame member function.
-
-* Description:
-* This function returns AST__FREQ if the FluxFrame system describes
-* a quantity measured per unit frequency, and returns AST__WAVELEN if
-* the FluxFrame system describes a quantity measured per unit wavelength.
-
-* Parameters:
-* sys
-* A System value appropriate to a FluxFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The density System value.
-
-* Notes:
-* - AST__BADSYSTEM is returned if this function is invoked with
-* the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSystemType result; /* Value to return */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Categorise the supplied system. */
- if( sys == AST__FLUXDEN || sys == AST__SBRIGHT ) {
- result = AST__FREQ;
-
- } else if( sys == AST__FLUXDENW || sys == AST__SBRIGHTW ) {
- result = AST__WAVELEN;
-
- } else if( astOK ) {
- astError( AST__INTER, "DensitySystem(FluxFrame): The "
- "DensitySystem method does not yet support "
- "FluxFrame system %d (AST internal programming error).", status,
- sys );
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *DensityUnit( AstSystemType sys, int *status ) {
-/*
-* Name:
-* DensityUnit
-
-* Purpose:
-* Obtain the default units for the spectral density of a FluxFrame
-* system.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* const char *DensityUnit( AstSystemType sys, int *status )
-
-* Class Membership:
-* FluxFrame member function.
-
-* Description:
-* This function returns "Hz" if the FluxFrame system describes
-* a quantity measured per unit frequency, and returns "Angstrom" if
-* the FluxFrame system describes a quantity measured per unit wavelength.
-
-* Parameters:
-* sys
-* A FluxFrame system value.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a null-terminated string containing the Unit value.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- const char *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Categorise the supplied FluxFrame system. */
- if( sys == AST__FLUXDEN || sys == AST__SBRIGHT ) {
- result = "Hz";
-
- } else if( sys == AST__FLUXDENW || sys == AST__SBRIGHTW ) {
- result = "Angstrom";
-
- } else if( astOK ) {
- astError( AST__INTER, "DensityUnit(FluxFrame): The DensityUnit "
- "method does not yet support FluxFrame system %d (AST "
- "internal programming error).", status, sys );
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *FluxSystemString( AstSystemType system, int *status ) {
-/*
-* Name:
-* FluxSystemString
-
-* Purpose:
-* Convert a FluxFrame coordinate system type code into a string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* const char *FluxSystemString( AstSystemType system, int *status )
-
-* Class Membership:
-* FluxFrame member function
-
-* Description:
-* This function converts a FluxFrame coordinate system type code
-* (System attribute value) into a string suitable for use as an
-* external representation of the coordinate system type.
-
-* Parameters:
-* system
-* The coordinate system type code.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a constant null-terminated string containing the
-* textual equivalent of the type code supplied.
-
-* Notes:
-* - A NULL pointer value is returned if the coordinate system
-* code was not recognised. This does not produce an error.
-* - A NULL pointer value is also returned if this function is
-* invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- const char *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Match the "system" value against each possibility and convert to a
- string pointer. */
- switch ( system ) {
-
- case AST__FLUXDEN:
- result = "FLXDN";
- break;
-
- case AST__FLUXDENW:
- result = "FLXDNW";
- break;
-
- case AST__SBRIGHT:
- result = "SFCBR";
- break;
-
- case AST__SBRIGHTW:
- result = "SFCBRW";
- break;
-
- }
-
-/* Return the result pointer. */
- return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* FluxFrame member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied FluxFrame,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the FluxFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFluxFrame *this; /* Pointer to FluxFrame structure */
- int result; /* Result value to return */
- int i;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the FluxFrame structure. */
- this = (AstFluxFrame *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
-
- if( this && this->usedunits ) {
- for( i = 0; i < this->nuunits; i++ ) {
- result += astTSizeOf( this->usedunits[ i ] );
- }
- result += astTSizeOf( this->usedunits );
- }
-
- result += astGetObjSize( this->specframe );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static int GetActiveUnit( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetActiveUnit
-
-* Purpose:
-* Obtain the value of the ActiveUnit flag for a FluxFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* int GetActiveUnit( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* FluxFrame member function (over-rides the astGetActiveUnit protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns the value of the ActiveUnit flag for a
-* FluxFrame, which is always 1.
-
-* Parameters:
-* this
-* Pointer to the FluxFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The value to use for the ActiveUnit flag (1).
-
-*/
- return 1;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a FluxFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* FluxFrame member function (over-rides the protected astGetAttrib
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a FluxFrame, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the FluxFrame.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - This function uses one-based axis numbering so that it is
-* suitable for external (public) use.
-* - The returned string pointer may point at memory allocated
-* within the FluxFrame, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the FluxFrame. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstFluxFrame *this; /* Pointer to the FluxFrame structure */
- const char *result; /* Pointer value to return */
- double dval; /* Attribute value */
- int len; /* Length of attrib string */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the FluxFrame structure. */
- this = (AstFluxFrame *) this_object;
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null-terminated string in an appropriate
- format. Set "result" to point at the result string. */
-
-/* SpecVal */
-/* ------- */
- if ( !strcmp( attrib, "specval" ) ) {
- dval = astGetSpecVal( this );
- if ( astOK ) {
- if( dval != AST__BAD ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- } else {
- result = "<bad>";
- }
- }
-
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstSystemType GetDensitySystem( AstFluxFrame *this, int *status ) {
-/*
-*+
-* Name:
-* astGetDensitySystem
-
-* Purpose:
-* Obtain the System describing the spectral density of a FluxFrame.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* AstSystemType astGetDensitySystem( AstFluxFrame *this )
-
-* Class Membership:
-* FluxFrame method.
-
-* Description:
-* This function returns AST__FREQ if the FluxFrame system describes
-* a quantity measured per unit frequency, and returns AST__WAVELEN if
-* the FluxFrame system describes a quantity measured per unit wavelength.
-
-* Parameters:
-* this
-* Pointer to the FluxFrame.
-
-* Returned Value:
-* The System value.
-
-* Notes:
-* - AST__BADSYSTEM is returned if this function is invoked with
-* the global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return AST__BADSYSTEM;
-
-/* Get the FluxFrame system and categorise it. */
- return DensitySystem( astGetSystem( this ), status );
-}
-
-static const char *GetDensityUnit( AstFluxFrame *this, int *status ) {
-/*
-*+
-* Name:
-* astGetDensityUnit
-
-* Purpose:
-* Obtain the default units for the spectral density of a FluxFrame.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* const char *astGetDensityUnit( AstFluxFrame *this )
-
-* Class Membership:
-* FluxFrame method.
-
-* Description:
-* This function returns "Hz" if the FluxFrame system describes
-* a quantity measured per unit frequency, and returns "Angstrom" if
-* the FluxFrame system describes a quantity measured per unit wavelength.
-
-* Parameters:
-* this
-* Pointer to the FluxFrame.
-
-* Returned Value:
-* A pointer to a null-terminated string containing the Unit value.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get the FluxFrame system and categorise it. */
- return DensityUnit( astGetSystem( this ), status );
-}
-
-static const char *GetDomain( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetDomain
-
-* Purpose:
-* Obtain a pointer to the Domain attribute string for a FluxFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* const char *GetDomain( AstFrame *this, int *status )
-
-* Class Membership:
-* FluxFrame member function (over-rides the astGetDomain protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a pointer to the Domain attribute string
-* for a FluxFrame.
-
-* Parameters:
-* this
-* Pointer to the FluxFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a constant null-terminated string containing the
-* Domain value.
-
-* Notes:
-* - The returned pointer or the string it refers to may become
-* invalid following further invocation of this function or
-* modification of the FluxFrame.
-* - A NULL pointer is returned if this function is invoked with
-* the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFluxFrame *this; /* Pointer to FluxFrame structure */
- const char *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the FluxFrame structure. */
- this = (AstFluxFrame *) this_frame;
-
-/* If a Domain attribute string has been set, invoke the parent method
- to obtain a pointer to it. */
- if ( astTestDomain( this ) ) {
- result = (*parent_getdomain)( this_frame, status );
-
-/* Otherwise, provide a pointer to a suitable default string. */
- } else {
- result = "FLUX";
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetLabel( AstFrame *this, int axis, int *status ) {
-/*
-* Name:
-* GetLabel
-
-* Purpose:
-* Access the Label string for a FluxFrame axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* const char *GetLabel( AstFrame *this, int axis, int *status )
-
-* Class Membership:
-* FluxFrame member function (over-rides the astGetLabel method inherited
-* from the Frame class).
-
-* Description:
-* This function returns a pointer to the Label string for a specified axis
-* of a FluxFrame.
-
-* Parameters:
-* this
-* Pointer to the FluxFrame.
-* axis
-* Axis index (zero-based) identifying the axis for which information is
-* required.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a constant null-terminated character string containing the
-* requested information.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstMapping *map; /* Mapping between units */
- AstSystemType system; /* Code identifying type of flux coordinates */
- char *new_lab; /* Modified label string */
- const char *result; /* Pointer to label string */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Initialise. */
- result = NULL;
-
-/* Validate the axis index. */
- astValidateAxis( this, axis, "astGetLabel" );
-
-/* Check if a value has been set for the required axis label string. If so,
- invoke the parent astGetLabel method to obtain a pointer to it. */
- if ( astTestLabel( this, axis ) ) {
- result = (*parent_getlabel)( this, axis, status );
-
-/* Otherwise, identify the flux coordinate system described by the
- FluxFrame. */
- } else {
- system = astGetSystem( this );
-
-/* If OK, supply a pointer to a suitable default label string. */
- if ( astOK ) {
- result = strcpy( getlabel_buff, SystemLabel( system, status ) );
- getlabel_buff[ 0 ] = toupper( getlabel_buff[ 0 ] );
-
-/* Modify this default to take account of the current value of the Unit
- attribute, if set. */
- if( astTestUnit( this, axis ) ) {
-
-/* Find a Mapping from the default Units for the current System, to the
- units indicated by the Unit attribute. This Mapping is used to modify
- the existing default label appropriately. For instance, if the default
- units is "Jy" and the actual units is "log(Jy)", then the default label
- of "Flux density" is changed to "log( Flux density )". */
- map = astUnitMapper( DefUnit( system, "astGetLabel",
- astGetClass( this ), status ),
- astGetUnit( this, axis ), result,
- &new_lab );
- if( new_lab ) {
- result = strcpy( getlabel_buff, new_lab );
- new_lab = astFree( new_lab );
- }
-
-/* Annul the unused Mapping. */
- if( map ) map = astAnnul( map );
-
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstSpecFrame *GetSpecFrame( AstFluxFrame *this, int *status ) {
-/*
-* Name:
-* GetSpecFrame
-
-* Purpose:
-* Get a pointer to a SpecFrame associated with a FluxFrame
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* AstSpecFrame *GetSpecFrame( AstFluxFrame *this, int *status )
-
-* Class Membership:
-* FluxFrame member function
-
-* Description:
-* This function returns a SpecFrame describing the spectral system in
-* which the FluxFrame's SpecVal attribute is stored. A default
-* SpecFrame is created and returned if the no SpecFrame was supplied
-* when the FluxFrame was created.
-
-* Parameters:
-* this
-* The FluxFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the SpecFrame. It should be freed using astAnnul when no
-* longer needed.
-
-* Notes:
-* - A NULL pointer value is returned if this function is
-* invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- AstSpecFrame *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If the FluxFrame contains a SpecFrame, return a clone of its pointer. */
- if( this->specframe ) {
- result = astClone( this->specframe );
-
-/* Otherwise, create a SpecFrame appropriate to the FluxFrames System. */
- } else {
- result = astSpecFrame( "", status );
- astSetSystem( result, astGetDensitySystem( this ) );
- astSetUnit( result, 0, astGetDensityUnit( this ) );
- }
-
-/* Annul the result if an error occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result pointer. */
- return result;
-}
-
-static const char *GetSymbol( AstFrame *this, int axis, int *status ) {
-/*
-* Name:
-* GetSymbol
-
-* Purpose:
-* Obtain a pointer to the Symbol string for a FluxFrame axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* const char *GetSymbol( AstFrame *this, int axis, int *status )
-
-* Class Membership:
-* FluxFrame member function (over-rides the astGetSymbol method inherited
-* from the Frame class).
-
-* Description:
-* This function returns a pointer to the Symbol string for a specified axis
-* of a FluxFrame.
-
-* Parameters:
-* this
-* Pointer to the FluxFrame.
-* axis
-* Axis index (zero-based) identifying the axis for which information is
-* required.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a constant null-terminated character string containing the
-* requested information.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstMapping *map; /* Mapping between units */
- AstSystemType system; /* Code identifying type of sky coordinates */
- char *new_sym; /* Modified symbol string */
- const char *result; /* Pointer to symbol string */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Initialise. */
- result = NULL;
-
-/* Validate the axis index. */
- astValidateAxis( this, axis, "astGetSymbol" );
-
-/* Check if a value has been set for the required axis symbol string. If so,
- invoke the parent astGetSymbol method to obtain a pointer to it. */
- if ( astTestSymbol( this, axis ) ) {
- result = (*parent_getsymbol)( this, axis, status );
-
-/* Otherwise, identify the flux coordinate system described by the FluxFrame. */
- } else {
- system = astGetSystem( this );
-
-/* If OK, supply a pointer to a suitable default Symbol string. */
- if ( astOK ) {
-
- if( system == AST__FLUXDEN ) {
- result = "S_nu";
-
- } else if( system == AST__FLUXDENW ) {
- result = "S_lambda";
-
- } else if( system == AST__SBRIGHT ) {
- result = "mu_nu";
-
- } else if( system == AST__SBRIGHTW ) {
- result = "mu_lambda";
-
-/* Report an error if the coordinate system was not recognised. */
- } else {
- astError( AST__SCSIN, "astGetSymbol(%s): Corrupt %s contains "
- "invalid System identification code (%d).", status,
- astGetClass( this ), astGetClass( this ), (int) system );
- }
-
-/* Modify this default to take account of the current value of the Unit
- attribute, if set. */
- if( astTestUnit( this, axis ) ) {
-
-/* Find a Mapping from the default Units for the current System, to the
- units indicated by the Unit attribute. This Mapping is used to modify
- the existing default symbol appropriately. For instance, if the default
- units is "Jy" and the actual units is "log(Jy)", then the default symbol
- of "S_nu" is changed to "log( S_nu )". */
- map = astUnitMapper( DefUnit( system, "astGetSymbol",
- astGetClass( this ), status ),
- astGetUnit( this, axis ), result,
- &new_sym );
- if( new_sym ) {
- result = strcpy( getsymbol_buff, new_sym );
- new_sym = astFree( new_sym );
- }
-
-/* Annul the unused Mapping. */
- if( map ) map = astAnnul( map );
-
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstSystemType GetAlignSystem( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetAlignSystem
-
-* Purpose:
-* Obtain the AlignSystem attribute for a FluxFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* AstSystemType GetAlignSystem( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* FluxFrame member function (over-rides the astGetAlignSystem protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns the AlignSystem attribute for a FluxFrame.
-
-* Parameters:
-* this
-* Pointer to the FluxFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The AlignSystem value.
-
-*/
-
-/* Local Variables: */
- AstFluxFrame *this; /* Pointer to FluxFrame structure */
- AstSystemType result; /* Value to return */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the FluxFrame structure. */
- this = (AstFluxFrame *) this_frame;
-
-/* If a AlignSystem attribute has been set, invoke the parent method to obtain
- it. */
- if ( astTestAlignSystem( this ) ) {
- result = (*parent_getalignsystem)( this_frame, status );
-
-/* Otherwise, provide a suitable default. */
- } else {
- result = AST__FLUXDEN;
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstSystemType GetSystem( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetSystem
-
-* Purpose:
-* Obtain the System attribute for a FluxFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* AstSystemType GetSystem( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* FluxFrame member function (over-rides the astGetSystem protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns the System attribute for a FluxFrame.
-
-* Parameters:
-* this
-* Pointer to the FluxFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The System value.
-
-* Notes:
-* - AST__BADSYSTEM is returned if this function is invoked with
-* the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFluxFrame *this; /* Pointer to FluxFrame structure */
- AstMapping *map; /* Pointer to unit Mapping */
- AstSystemType i; /* System to check */
- AstSystemType result; /* Value to return */
- const char *units; /* FluxFrame units */
- int unitSet; /* Has a value been supplied for Unit? */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the FluxFrame structure. */
- this = (AstFluxFrame *) this_frame;
-
-/* See if a value has been assigned to the Unit attribute. */
- unitSet = astTestUnit( this_frame, 0 );
-
-/* If a System attribute has been set, invoke the parent method to obtain
- it. */
- if ( astTestSystem( this ) ) {
- result = (*parent_getsystem)( this_frame, status );
-
-/* Otherwise, if the Unit attribute has been set, provide a suitable default
- system based on the units. */
- } else if( unitSet ){
-
-/* Loop round each known system value. If a Mapping can be found from the
- current units to the default units for the system, then use the system as
- the default system. */
- units = astGetUnit( this_frame, 0 );
- for( i = FIRST_SYSTEM; i <= LAST_SYSTEM; i++ ) {
- map = astUnitMapper( units, DefUnit( i, "astGetSystem",
- astGetClass( this ), status ), NULL, NULL );
- if( map ) {
- map = astAnnul( map );
- result = i;
- break;
- }
- }
-
-/* Otherwise, report an error. */
- if( result == AST__BADSYSTEM && astOK ) {
- astError( AST__BADUN, "astGetSystem(%s): The current units (%s) "
- "cannot be used with any of the supported flux systems.", status,
- astGetClass( this ), astGetUnit( this_frame, 0 ) );
- }
-
-/* Otherwise, provide a suitable default based on the units. */
- } else {
- result = AST__FLUXDEN;
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetTitle( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetTitle
-
-* Purpose:
-* Obtain a pointer to the Title string for a FluxFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* const char *GetTitle( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* FluxFrame member function (over-rides the astGetTitle method inherited
-* from the Frame class).
-
-* Description:
-* This function returns a pointer to the Title string for a FluxFrame.
-* A pointer to a suitable default string is returned if no Title value has
-* previously been set.
-
-* Parameters:
-* this
-* Pointer to the FluxFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a null-terminated character string containing the requested
-* information.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstFluxFrame *this; /* Pointer to FluxFrame structure */
- AstSpecFrame *sf; /* Pointer to SpecFrame structure */
- const char *result; /* Pointer to result string */
- const char *sv; /* Formatted SpecVal string */
- const char *su; /* Units string */
- double specval; /* SpecVal value */
- int pos; /* Buffer position to enter text */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_frame);
-
-/* Initialise. */
- result = NULL;
-
-/* Obtain a pointer to the FluxFrame structure. */
- this = (AstFluxFrame *) this_frame;
-
-/* See if a Title string has been set. If so, use the parent astGetTitle
- method to obtain a pointer to it. */
- if ( astTestTitle( this ) ) {
- result = (*parent_gettitle)( this_frame, status );
-
-/* Otherwise, we will generate a default Title string. */
- } else {
-
-/* Classify the coordinate system type and create an appropriate Title
- string. */
- if ( astOK ) {
- result = gettitle_buff;
-
-/* Begin with the system's default label. */
- pos = sprintf( gettitle_buff, "%s", SystemLabel( astGetSystem( this ), status ) );
- gettitle_buff[ 0 ] = toupper( gettitle_buff[ 0 ] );
-
-/* Append the spectral position, if known. */
- specval = astGetSpecVal( this );
- sf = GetSpecFrame( this, status );
- if( specval != AST__BAD && sf ) {
- sv = astFormat( sf, 0, specval );
- su = astGetUnit( sf, 0 );
- pos += sprintf( gettitle_buff + pos, " at = %s %s", sv, su );
- }
- sf = astAnnul( sf );
- }
- }
-
-/* If an error occurred, clear the returned pointer value. */
- if ( !astOK ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetUnit( AstFrame *this_frame, int axis, int *status ) {
-/*
-* Name:
-* GetUnit
-
-* Purpose:
-* Obtain a pointer to the Unit string for a FluxFrame's axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* const char *GetUnit( AstFrame *this_frame, int axis )
-
-* Class Membership:
-* FluxFrame member function (over-rides the astGetUnit method inherited
-* from the Frame class).
-
-* Description:
-* This function returns a pointer to the Unit string for a specified axis
-* of a FluxFrame. If the Unit attribute has not been set for the axis, a
-* pointer to a suitable default string is returned instead.
-
-* Parameters:
-* this
-* Pointer to the FluxFrame.
-* axis
-* The number of the axis (zero-based) for which information is required.
-
-* Returned Value:
-* A pointer to a null-terminated string containing the Unit value.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFluxFrame *this; /* Pointer to the FluxFrame structure */
- AstSystemType system; /* The FluxFrame's System value */
- const char *result; /* Pointer value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the FluxFrame structure. */
- this = (AstFluxFrame *) this_frame;
-
-/* Validate the axis index. */
- astValidateAxis( this, axis, "astGetUnit" );
-
-/* If a value has been set for the Unit attribute, use the parent
- GetUnit method to return a pointer to the required Unit string. */
- if( astTestUnit( this, axis ) ){
- result = (*parent_getunit)( this_frame, axis, status );
-
-/* Otherwise, identify the flux coordinate system described by the
- FluxFrame. */
- } else {
- system = astGetSystem( this );
-
-/* Return a string describing the default units. */
- result = DefUnit( system, "astGetUnit", astGetClass( this ), status );
- }
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-void astInitFluxFrameVtab_( AstFluxFrameVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitFluxFrameVtab
-
-* Purpose:
-* Initialise a virtual function table for a FluxFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* void astInitFluxFrameVtab( AstFluxFrameVtab *vtab, const char *name )
-
-* Class Membership:
-* FluxFrame vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the FluxFrame class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrameVtab *frame; /* Pointer to Frame component of Vtab */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitFrameVtab( (AstFrameVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAFluxFrame) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstFrameVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
- vtab->GetDensitySystem = GetDensitySystem;
- vtab->GetDensityUnit = GetDensityUnit;
-
- vtab->ClearSpecVal = ClearSpecVal;
- vtab->TestSpecVal = TestSpecVal;
- vtab->GetSpecVal = GetSpecVal;
- vtab->SetSpecVal = SetSpecVal;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- frame = (AstFrameVtab *) vtab;
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
-#if defined(THREAD_SAFE)
- parent_managelock = object->ManageLock;
- object->ManageLock = ManageLock;
-#endif
-
- parent_getdomain = frame->GetDomain;
- frame->GetDomain = GetDomain;
-
- parent_getsystem = frame->GetSystem;
- frame->GetSystem = GetSystem;
- parent_setsystem = frame->SetSystem;
- frame->SetSystem = SetSystem;
- parent_clearsystem = frame->ClearSystem;
- frame->ClearSystem = ClearSystem;
-
- parent_getalignsystem = frame->GetAlignSystem;
- frame->GetAlignSystem = GetAlignSystem;
-
- parent_getlabel = frame->GetLabel;
- frame->GetLabel = GetLabel;
-
- parent_getsymbol = frame->GetSymbol;
- frame->GetSymbol = GetSymbol;
-
- parent_gettitle = frame->GetTitle;
- frame->GetTitle = GetTitle;
-
- parent_clearunit = frame->ClearUnit;
- frame->ClearUnit = ClearUnit;
-
- parent_getunit = frame->GetUnit;
- frame->GetUnit = GetUnit;
-
- parent_setunit = frame->SetUnit;
- frame->SetUnit = SetUnit;
-
- parent_match = frame->Match;
- frame->Match = Match;
-
- parent_overlay = frame->Overlay;
- frame->Overlay = Overlay;
-
- parent_subframe = frame->SubFrame;
- frame->SubFrame = SubFrame;
-
-/* Store replacement pointers for methods which will be over-ridden by new
- member functions implemented here. */
- frame->GetActiveUnit = GetActiveUnit;
- frame->TestActiveUnit = TestActiveUnit;
- frame->ValidateSystem = ValidateSystem;
- frame->SystemString = SystemString;
- frame->SystemCode = SystemCode;
-
-/* Declare the copy constructor, destructor and class dump
- function. */
- astSetCopy( vtab, Copy );
- astSetDelete( vtab, Delete );
- astSetDump( vtab, Dump, "FluxFrame", "Description of flux values" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra,
- AstObject **fail, int *status ) {
-/*
-* Name:
-* ManageLock
-
-* Purpose:
-* Manage the thread lock on an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *ManageLock( AstObject *this, int mode, int extra,
-* AstObject **fail, int *status )
-
-* Class Membership:
-* FluxFrame member function (over-rides the astManageLock protected
-* method inherited from the parent class).
-
-* Description:
-* This function manages the thread lock on the supplied Object. The
-* lock can be locked, unlocked or checked by this function as
-* deteremined by parameter "mode". See astLock for details of the way
-* these locks are used.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* mode
-* An integer flag indicating what the function should do:
-*
-* AST__LOCK: Lock the Object for exclusive use by the calling
-* thread. The "extra" value indicates what should be done if the
-* Object is already locked (wait or report an error - see astLock).
-*
-* AST__UNLOCK: Unlock the Object for use by other threads.
-*
-* AST__CHECKLOCK: Check that the object is locked for use by the
-* calling thread (report an error if not).
-* extra
-* Extra mode-specific information.
-* fail
-* If a non-zero function value is returned, a pointer to the
-* Object that caused the failure is returned at "*fail". This may
-* be "this" or it may be an Object contained within "this". Note,
-* the Object's reference count is not incremented, and so the
-* returned pointer should not be annulled. A NULL pointer is
-* returned if this function returns a value of zero.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A local status value:
-* 0 - Success
-* 1 - Could not lock or unlock the object because it was already
-* locked by another thread.
-* 2 - Failed to lock a POSIX mutex
-* 3 - Failed to unlock a POSIX mutex
-* 4 - Bad "mode" value supplied.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-*/
-
-/* Local Variables: */
- AstFluxFrame *this; /* Pointer to FluxFrame structure */
- int result; /* Returned status value */
-
-/* Initialise */
- result = 0;
-
-/* Check the supplied pointer is not NULL. */
- if( !this_object ) return result;
-
-/* Obtain a pointers to the FluxFrame structure. */
- this = (AstFluxFrame *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
- if( !result ) result = (*parent_managelock)( this_object, mode, extra,
- fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
- the supplied Object. */
- if( !result ) result = astManageLock( this->specframe, mode, extra, fail );
-
- return result;
-
-}
-#endif
-
-static int MakeFluxMapping( AstFluxFrame *target, AstFluxFrame *result,
- AstSystemType align_sys, AstMapping **map, int *status ) {
-/*
-* Name:
-* MakeFluxMapping
-
-* Purpose:
-* Generate a Mapping between two FluxFrames.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* int MakeFluxMapping( AstFluxFrame *target, AstFluxFrame *result,
-* AstSystemType align_sys, MakeFluAstMapping **map, int *status )
-
-* Class Membership:
-* FluxFrame member function.
-
-* Description:
-* This function takes two FluxFrames and generates a Mapping that
-* converts between them, taking account of differences in their
-* coordinate systems, reference frequency, etc.
-*
-* In order to cut down the number of transformations to be considered,
-* the scheme works by first converting from the target frame to an
-* "alignment" Frame, using the attributes of the target to define the
-* transformation. A transformation is then found from the alignment
-* frame to the required result Frame, using the attributes of the
-* result to define the transformation. The alignment Frame is
-* described by the supplied parameter "align_sys".
-
-* Parameters:
-* target
-* Pointer to the first FluxFrame.
-* result
-* Pointer to the second FluxFrame.
-* align_sys
-* The flux system in which to align the two FluxFrames.
-* map
-* Pointer to a location which is to receive a pointer to the
-* returned Mapping. The forward transformation of this Mapping
-* will convert from "target" coordinates to "result"
-* coordinates, and the inverse transformation will convert in
-* the opposite direction (all coordinate values in radians).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the Mapping could be generated, or zero if the two
-* FluxFrames are sufficiently un-related that no meaningful Mapping
-* can be produced (in which case a NULL Mapping pointer will be
-* returned).
-
-* Notes:
-* A value of zero is returned if this function is invoked with the
-* global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFrameSet *fs;
- AstMapping *map1;
- AstMapping *map2;
- AstMapping *map3;
- AstMapping *map4;
- AstMapping *map5;
- AstMapping *smap;
- AstMapping *smap_in;
- AstMapping *smap_out;
- AstMapping *tmap;
- AstSpecFrame *sfin1;
- AstSpecFrame *sfin2;
- AstSpecFrame *sfout1;
- AstSpecFrame *sfout2;
- AstSystemType rsys_in;
- AstSystemType rsys_out;
- AstSystemType sys_in;
- AstSystemType sys_out;
- double specval2;
- double specval;
- double specval_in;
- double specval_out;
- double zoom;
- int match;
- int sb_in;
- int sb_out;
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Initialise the returned values. */
- match = 0;
- *map = NULL;
-
-/* Initialise to avoid compiler warnings. */
- map1 = NULL;
- map2 = NULL;
- map3 = NULL;
-
-/* Note the target and result System */
- rsys_in = astGetSystem( target );
- rsys_out = astGetSystem( result );
-
-/* First get a Mapping which converts from the units used in the target
- to the default units associated with the target's system.
- ---------------------------------------------------------------------- */
- map1 = astUnitMapper( astGetUnit( target, 0 ),
- DefUnit( rsys_in, "MakeFluxMapping", "FluxFrame", status ),
- NULL, NULL );
-
-/* If the target system is surface brightness, change it to the
- corresponding flux density system. We are effectively converting from
- surface brightness to the flux density normalised to unit area. Also
- set flags indicating if the systems are surface brightness systems. */
- if( rsys_in == AST__SBRIGHT ) {
- sys_in = AST__FLUXDEN;
- sb_in = 1;
-
- } else if( rsys_in == AST__SBRIGHTW ) {
- sys_in = AST__FLUXDENW;
- sb_in = 1;
-
- } else {
- sys_in = rsys_in;
- sb_in = 0;
- }
-
-/* Likewise if the result system is surface brightness, change it to the
- corresponding flux density system. */
- if( rsys_out == AST__SBRIGHT ) {
- sys_out = AST__FLUXDEN;
- sb_out = 1;
-
- } else if( rsys_out == AST__SBRIGHTW ) {
- sys_out = AST__FLUXDENW;
- sb_out = 1;
-
- } else {
- sys_out = rsys_out;
- sb_out = 0;
- }
-
-/* Assume at this point in the chain of coversions that we have target values
- in some form of flux density system (either frequency or wavelength). The
- precise units do not matter at this point (so long as they are
- dimensionally correct for describing the relevant form of flux density).
- When other systems are added (e.g. antenna temperature), some code
- will have to come before this point which produces a Mapping from (e.g.)
- antenna temperature to flux density. */
-
-
-/* Get a Mapping from the default units for the input flux density system
- to the default units for the output flux density system.
- ---------------------------------------------------------------------- */
-
-/* If one but not both of the systems represent surface brightness, then
- we cannot form a Mapping. */
- if( sb_in != sb_out ) {
- zoom = AST__BAD;
-
-/* If the input and output flux density systems are the same, then the
- required Mapping is a UnitMap. */
- } else if( sys_in == sys_out ) {
- zoom = 1.0;
-
-/* Otherwise, the required Mapping is a zoom map in which the scale factor is
- the rate of change of the input spectral system with respect to the output
- spectral system, at the position given by the SpecVal attribute (we
- cannot do the conversion if the SpecVal values in the target and result
- differ). Each spectral system is either wavelength (in Angstrom) or
- frequency (in Hz), depending on whether the associated flux density
- system is "per Angstrom" or "per Hertz". The SpecVal value may be
- stored in some other system, so the first job is to create SpecFrames
- with the required system and units from the SpecFrames encapsulated
- within the target and result FluxFrames. Take deep copies of the two
- SpecFrames, and set their systems and units. */
- } else {
- sfin1 = GetSpecFrame( target, status );
- sfin2 = astCopy( sfin1 );
- astSetSystem( sfin2, DensitySystem( sys_in, status ) );
- astSetUnit( sfin2, 0, DensityUnit( sys_in, status ) );
-
- sfout1 = GetSpecFrame( result, status );
- sfout2 = astCopy( sfout1 );
- astSetSystem( sfout2, DensitySystem( sys_out, status ) );
- astSetUnit( sfout2, 0, DensityUnit( sys_out, status ) );
-
-/* Indicate we do not yet have a zoom factor */
- zoom = AST__BAD;
-
-/* Get the Mapping from output to input spectral coordinate system */
- fs = astConvert( sfout2, sfin2, "" );
- if( fs ) {
- tmap = astGetMapping( fs, AST__BASE, AST__CURRENT );
- fs = astAnnul( fs );
-
-/* Simplify the Mapping. */
- smap = astSimplify( tmap );
- tmap = astAnnul( tmap );
-
-/* We first need to transform the two SpecVal attributes into the input
- coordinate system of the "smap" Mapping (i.e. the standardised result
- FluxFrame), and check they are the same. For this we need the Mappings
- from the SpecFrames stored in the FluxFrames to the modified copies
- created above. */
- fs = astConvert( sfin1, sfin2, "" );
- if( fs ) {
- smap_in = astGetMapping( fs, AST__BASE, AST__CURRENT );
- fs = astAnnul( fs );
- } else {
- smap_in = NULL;
- }
-
- fs = astConvert( sfout1, sfout2, "" );
- if( fs ) {
- smap_out = astGetMapping( fs, AST__BASE, AST__CURRENT );
- fs = astAnnul( fs );
- } else {
- smap_out = NULL;
- }
-
-/* Convert the target's SpecVal into the standardised target system */
- specval = astGetSpecVal( target );
- astTran1( smap_in, 1, &specval, 1, &specval2 );
-
-/* Now convert it into the standardised result system. Note, we need to
- use "smap" in the inverse direction for this. */
- astTran1( smap, 1, &specval2, 0, &specval_in );
-
-/* Convert the results's SpecVal into the standardised result system */
- specval = astGetSpecVal( result );
- astTran1( smap_out, 1, &specval, 1, &specval_out );
-
-/* Check they are equal and good. */
- if( EQUAL( specval_in, specval_out ) && specval_in != AST__BAD ) {
-
-/* If the siSimplified Mapping is a UnitMap the required rate of change
- factor is 1.0. If it resuts in a ZoomMap, the required factor is
- the zoom factor in the ZoomMap. */
- if( astIsAUnitMap( smap ) ) {
- zoom = 1.0;
-
- } else if( astIsAZoomMap( smap ) ) {
- zoom = astGetZoom( smap );
-
-/* For any other type of Mapping, we must determine the rate of change factor
- by differentiating the Mapping at the SpecVal position. */
- } else {
- specval = 0.5*( specval_in + specval_out );
- zoom = astRate( smap, &specval, 0, 0 );
- }
- }
-
-/* Free resources */
- if( smap_in ) smap_in = astAnnul( smap_in );
- if( smap_out ) smap_out = astAnnul( smap_out );
- smap = astAnnul( smap );
- }
-
- sfout1 = astAnnul( sfout1 );
- sfin1 = astAnnul( sfin1 );
- sfout2 = astAnnul( sfout2 );
- sfin2 = astAnnul( sfin2 );
- }
-
-/* Create the required zoom map if a scaling factor was found. */
- if( zoom != AST__BAD ) {
- map2 = (AstMapping *) astZoomMap( 1, fabs( zoom ), "", status );
- } else {
- map2 = NULL;
- }
-
-/* Now get a Mapping which converts from the default units associated with
- the results's system, to the units used in the result.
- ----------------------------------------------------------------------- */
- map3 = astUnitMapper( DefUnit( rsys_out, "MakeFluxMapping", "FluxFrame", status ),
- astGetUnit( result, 0 ), NULL, NULL );
-
-/* Indicate a match was found and combine all Mapings in series. */
- if( map1 && map2 && map3 ) {
- match = 1;
- map4 = (AstMapping *) astCmpMap( map1, map2, 1, "", status );
- map5 = (AstMapping *) astCmpMap( map4, map3, 1, "", status );
-
-/* Return the simplified Mapping. */
- *map = astSimplify( map5 );
-
-/* Free resources. */
- map4 = astAnnul( map4 );
- map5 = astAnnul( map5 );
- }
-
-/* Free resources. */
- if( map1 ) map1 = astAnnul( map1 );
- if( map2 ) map2 = astAnnul( map2 );
- if( map3 ) map3 = astAnnul( map3 );
-
-/* If an error occurred, annul the returned Mapping and clear the returned
- values. */
- if ( !astOK ) {
- *map = astAnnul( *map );
- match = 0;
- }
-
-/* Return the result. */
- return match;
-}
-
-static int Match( AstFrame *template_frame, AstFrame *target,
- int **template_axes, int **target_axes, AstMapping **map,
- AstFrame **result, int *status ) {
-/*
-* Name:
-* Match
-
-* Purpose:
-* Determine if conversion is possible between two coordinate systems.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* int Match( AstFrame *template, AstFrame *target,
-* int **template_axes, int **target_axes,
-* AstMapping **map, AstFrame **result, int *status )
-
-* Class Membership:
-* FluxFrame member function (over-rides the protected astMatch method
-* inherited from the Frame class).
-
-* Description:
-* This function matches a "template" FluxFrame to a "target" Frame and
-* determines whether it is possible to convert coordinates between them.
-* If it is, a mapping that performs the transformation is returned along
-* with a new Frame that describes the coordinate system that results when
-* this mapping is applied to the "target" coordinate system. In addition,
-* information is returned to allow the axes in this "result" Frame to be
-* associated with the corresponding axes in the "target" and "template"
-* Frames from which they are derived.
-
-* Parameters:
-* template
-* Pointer to the template FluxFrame. This describes the coordinate
-* system (or set of possible coordinate systems) into which we wish to
-* convert our coordinates.
-* target
-* Pointer to the target Frame. This describes the coordinate system in
-* which we already have coordinates.
-* template_axes
-* Address of a location where a pointer to int will be returned if the
-* requested coordinate conversion is possible. This pointer will point
-* at a dynamically allocated array of integers with one element for each
-* axis of the "result" Frame (see below). It must be freed by the caller
-* (using astFree) when no longer required.
-*
-* For each axis in the result Frame, the corresponding element of this
-* array will return the index of the template FluxFrame axis from
-* which it is derived. If it is not derived from any template
-* FluxFrame axis, a value of -1 will be returned instead.
-* target_axes
-* Address of a location where a pointer to int will be returned if the
-* requested coordinate conversion is possible. This pointer will point
-* at a dynamically allocated array of integers with one element for each
-* axis of the "result" Frame (see below). It must be freed by the caller
-* (using astFree) when no longer required.
-*
-* For each axis in the result Frame, the corresponding element of this
-* array will return the index of the target Frame axis from which it
-* is derived. If it is not derived from any target Frame axis, a value
-* of -1 will be returned instead.
-* map
-* Address of a location where a pointer to a new Mapping will be
-* returned if the requested coordinate conversion is possible. If
-* returned, the forward transformation of this Mapping may be used to
-* convert coordinates between the "target" Frame and the "result"
-* Frame (see below) and the inverse transformation will convert in the
-* opposite direction.
-* result
-* Address of a location where a pointer to a new Frame will be returned
-* if the requested coordinate conversion is possible. If returned, this
-* Frame describes the coordinate system that results from applying the
-* returned Mapping (above) to the "target" coordinate system. In
-* general, this Frame will combine attributes from (and will therefore
-* be more specific than) both the target and the template Frames. In
-* particular, when the template allows the possibility of transformaing
-* to any one of a set of alternative coordinate systems, the "result"
-* Frame will indicate which of the alternatives was used.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if the requested coordinate conversion is
-* possible. Otherwise zero is returned (this will not in itself result in
-* an error condition).
-
-* Notes:
-* - A value of zero will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-
-* Implementation Notes:
-* This implementation addresses the matching of a FluxFrame class
-* object to any other class of Frame. A FluxFrame will match any class
-* of FluxFrame (i.e. possibly from a derived class) but will not match
-* a less specialised class of Frame.
-*/
-
-/* Local Variables: */
- AstFrame *frame0; /* Pointer to Frame underlying axis 0 */
- AstFluxFrame *template; /* Pointer to template FluxFrame structure */
- int iaxis0; /* Axis index underlying axis 0 */
- int iaxis; /* Axis index */
- int match; /* Coordinate conversion possible? */
- int target_axis0; /* Index of FluxFrame axis in the target */
- int target_naxes; /* Number of target axes */
-
-/* Initialise the returned values. */
- *template_axes = NULL;
- *target_axes = NULL;
- *map = NULL;
- *result = NULL;
- match = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return match;
-
-/* Obtain a pointer to the template FluxFrame structure. */
- template = (AstFluxFrame *) template_frame;
-
-/* Obtain the number of axes in the target Frame. */
- target_naxes = astGetNaxes( target );
-
-/* The first criterion for a match is that the template matches as a
- Frame class object. This ensures that the number of axes (1) and
- domain, etc. of the target Frame are suitable. Invoke the parent
- "astMatch" method to verify this. */
- match = (*parent_match)( template_frame, target,
- template_axes, target_axes, map, result, status );
-
-/* If a match was found, annul the returned objects, which are not
- needed, but keep the memory allocated for the axis association
- arrays, which we will re-use. */
- if ( astOK && match ) {
- *map = astAnnul( *map );
- *result = astAnnul( *result );
- }
-
-/* If OK so far, obtain pointers to the primary Frames which underlie
- all target axes. Stop when a FluxFrame axis is found. */
- if ( match && astOK ) {
- match = 0;
- for( iaxis = 0; iaxis < target_naxes; iaxis++ ) {
- astPrimaryFrame( target, iaxis, &frame0, &iaxis0 );
- if( astIsAFluxFrame( frame0 ) ) {
- frame0 = astAnnul( frame0 );
- target_axis0 = iaxis;
- match = 1;
- break;
- } else {
- frame0 = astAnnul( frame0 );
- }
- }
- }
-
-/* Check at least one FluxFrame axis was found it the target. Store the
- axis associataions. */
- if( match && astOK ) {
- (*template_axes)[ 0 ] = 0;
- (*target_axes)[ 0 ] = target_axis0;
-
-/* Use the target's "astSubFrame" method to create a new Frame (the
- result Frame) with copies of the target axes in the required
- order. This process also overlays the template attributes on to the
- target Frame and returns a Mapping between the target and result
- Frames which effects the required coordinate conversion. */
- match = astSubFrame( target, template, 1, *target_axes, *template_axes,
- map, result );
- }
-
-/* If an error occurred, or conversion to the result Frame's
- coordinate system was not possible, then free all memory, annul the
- returned objects, and reset the returned value. */
- if ( !astOK || !match ) {
- *template_axes = astFree( *template_axes );
- *target_axes = astFree( *target_axes );
- if( *map ) *map = astAnnul( *map );
- if( *result ) *result = astAnnul( *result );
- match = 0;
- }
-
-/* Return the result. */
- return match;
-}
-
-static void Overlay( AstFrame *template, const int *template_axes,
- AstFrame *result, int *status ) {
-/*
-* Name:
-* Overlay
-
-* Purpose:
-* Overlay the attributes of a template FluxFrame on to another Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* void Overlay( AstFrame *template, const int *template_axes,
-* AstFrame *result, int *status )
-
-* Class Membership:
-* FluxFrame member function (over-rides the protected astOverlay method
-* inherited from the Frame class).
-
-* Description:
-* This function overlays attributes of a FluxFrame (the "template") on to
-* another Frame, so as to over-ride selected attributes of that second
-* Frame. Normally only those attributes which have been specifically set
-* in the template will be transferred. This implements a form of
-* defaulting, in which a Frame acquires attributes from the template, but
-* retains its original attributes (as the default) if new values have not
-* previously been explicitly set in the template.
-*
-* Note that if the result Frame is a FluxFrame and a change of flux
-* coordinate system occurs as a result of overlaying its System
-* attribute, then some of its original attribute values may no
-* longer be appropriate (e.g. the Title, or attributes describing
-* its axes). In this case, these will be cleared before overlaying
-* any new values.
-
-* Parameters:
-* template
-* Pointer to the template FluxFrame, for which values should have been
-* explicitly set for any attribute which is to be transferred.
-* template_axes
-* Pointer to an array of int, with one element for each axis of the
-* "result" Frame (see below). For each axis in the result frame, the
-* corresponding element of this array should contain the (zero-based)
-* index of the template axis to which it corresponds. This array is used
-* to establish from which template axis any axis-dependent attributes
-* should be obtained.
-*
-* If any axis in the result Frame is not associated with a template
-* axis, the corresponding element of this array should be set to -1.
-*
-* If a NULL pointer is supplied, the template and result axis
-* indicies are assumed to be identical.
-* result
-* Pointer to the Frame which is to receive the new attribute values.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - In general, if the result Frame is not from the same class as the
-* template FluxFrame, or from a class derived from it, then attributes may
-* exist in the template FluxFrame which do not exist in the result Frame.
-* In this case, these attributes will not be transferred.
-*/
-
-
-/* Local Variables: */
- AstFluxFrame *resff; /* Result FluxFrame */
- AstFluxFrame *tmpff; /* Template FluxFrame */
- AstSystemType new_alignsystem;/* Code identifying alignment coords */
- AstSystemType new_system; /* Code identifying new cordinates */
- AstSystemType old_system; /* Code identifying old coordinates */
- const char *method; /* Pointer to method string */
- const char *new_class; /* Pointer to template class string */
- const char *old_class; /* Pointer to result class string */
- int fluxframe; /* Result Frame is a FluxFrame? */
- int resetSystem; /* Was the template System value cleared? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Initialise strings used in error messages. */
- new_class = astGetClass( template );
- old_class = astGetClass( result );
- method = "astOverlay";
-
-/* Get the old and new systems. */
- old_system = astGetSystem( result );
- new_system = astGetSystem( template );
-
-/* If the result Frame is a FluxFrame, we must test to see if overlaying its
- System attribute will change the type of coordinate system it describes.
- Determine the value of this attribute for the result and template
- FluxFrames. */
- resetSystem = 0;
- fluxframe = astIsAFluxFrame( result );
- if( fluxframe ) {
-
-/* If the coordinate system will change, any value already set for the result
- FluxFrame's Title will no longer be appropriate, so clear it. */
- if ( new_system != old_system ) {
- astClearTitle( result );
-
-/* If the systems have the same default units, we can retain the current
- Unit value. */
- if( strcmp( DefUnit( new_system, method, new_class, status ),
- DefUnit( old_system, method, old_class, status ) ) ) {
- astClearUnit( result, 0 );
- }
-
-/* If necessary, clear inappropriate values for all those axis attributes
- whose access functions are over-ridden by this class (these access functions
- will then provide suitable defaults appropriate to the new coordinate system
- instead). */
- astClearLabel( result, 0 );
- astClearSymbol( result, 0 );
- }
-
-/* Transfer the default SpecVal value and the SpecFrame. */
- resff = (AstFluxFrame *) result;
- tmpff = (AstFluxFrame *) template;
- resff->defspecval = tmpff->defspecval;
- if( resff->specframe ) (void) astAnnul( resff->specframe );
- resff->specframe = tmpff->specframe ? astCopy( tmpff->specframe ) : NULL;
-
-/* If the result Frame is not a FluxFrame, we must temporarily clear the
- System and AlignSystem values since the values used by this class are only
- appropriate to this class. */
- } else {
- if( astTestSystem( template ) ) {
- astClearSystem( template );
-
- new_alignsystem = astGetAlignSystem( template );
- astClearAlignSystem( template );
-
- resetSystem = 1;
- }
- }
-
-/* Invoke the parent class astOverlay method to transfer attributes inherited
- from the parent class. */
- (*parent_overlay)( template, template_axes, result, status );
-
-/* Reset the System and AlignSystem values if necessary */
- if( resetSystem ) {
- astSetSystem( template, new_system );
- astSetAlignSystem( template, new_alignsystem );
- }
-
-/* Check if the result Frame is a FluxFrame or from a class derived from
- FluxFrame. If not, we cannot transfer FluxFrame attributes to it as it is
- insufficiently specialised. In this case simply omit these attributes. */
- if ( fluxframe && astOK ) {
-
-/* Define macros that test whether an attribute is set in the template and,
- if so, transfers its value to the result. */
-#define OVERLAY(attribute) \
- if ( astTest##attribute( template ) ) { \
- astSet##attribute( result, astGet##attribute( template ) ); \
- }
-
-/* Use the macro to transfer each FluxFrame attribute in turn. */
- OVERLAY(SpecVal)
-
-
- }
-
-/* Undefine macros local to this function. */
-#undef OVERLAY
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a FluxFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* void SetAttrib( AstObject *this, const char *setting, int *status )
-
-* Class Membership:
-* FluxFrame member function (extends the astSetAttrib method inherited from
-* the Mapping class).
-
-* Description:
-* This function assigns an attribute value for a FluxFrame, the attribute
-* and its value being specified by means of a string of the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in lower
-* case with no white space present. The value to the right of the "="
-* should be a suitable textual representation of the value to be assigned
-* and this will be interpreted according to the attribute's data type.
-* White space surrounding the value is only significant for string
-* attributes.
-
-* Parameters:
-* this
-* Pointer to the FluxFrame.
-* setting
-* Pointer to a null terminated string specifying the new attribute
-* value.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This protected method is intended to be invoked by the Object astSet
-* method and makes additional attributes accessible to it.
-*/
-
-/* Local Vaiables: */
- AstFluxFrame *this; /* Pointer to the FluxFrame structure */
- double dval; /* Floating point attribute value */
- int len; /* Length of setting string */
- int nc; /* No. of characters read */
- int ulen; /* Used length of setting string */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FluxFrame structure. */
- this = (AstFluxFrame *) this_object;
-
-/* Obtain the length of the setting string. */
- len = strlen( setting );
-
-/* Obtain the used length of the setting string. */
- ulen = astChrLen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse the
- setting string and extract the attribute value (or an offset to it in the
- case of string values). In each case, use the value set in "nc" to check
- that the entire string was matched. Once a value has been obtained, use the
- appropriate method to set it. */
-
-/* SpecVal. */
-/* -------- */
- if ( nc = 0,
- ( 1 == astSscanf( setting, "specval= %lg %n", &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetSpecVal( this, dval );
-
-/* Pass any unrecognised setting to the parent method for further
- interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-}
-
-static void SetSystem( AstFrame *this_frame, AstSystemType newsys, int *status ) {
-/*
-* Name:
-* SetSystem
-
-* Purpose:
-* Set the System attribute for a FluxFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* void SetSystem( AstFrame *this_frame, AstSystemType newsys, int *status )
-
-* Class Membership:
-* FluxFrame member function (over-rides the astSetSystem protected
-* method inherited from the Frame class).
-
-* Description:
-* This function sets the System attribute for a FluxFrame.
-
-* Parameters:
-* this
-* Pointer to the FluxFrame.
-* newsys
-* The new System value to be stored.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstFluxFrame *this; /* Pointer to FluxFrame structure */
- AstSystemType oldsys; /* Original System value */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FluxFrame structure. */
- this = (AstFluxFrame *) this_frame;
-
-/* Save the original System value */
- oldsys = astGetSystem( this_frame );
-
-/* Use the parent SetSystem method to store the new System value. */
- (*parent_setsystem)( this_frame, newsys, status );
-
-/* If the system has changed... */
- if( oldsys != newsys ) {
-
-/* Changing the System value will in general require the Units to change
- as well. If the user has previously specified the units to be used with
- the new system, then re-instate them (they are stored in the "usedunits"
- array in the FluxFrame structure). Otherwise, clear the units so that
- the default units will eb used with the new System. */
- if( (int) newsys < this->nuunits && this->usedunits &&
- this->usedunits[ (int) newsys ] ) {
- (*parent_setunit)( this_frame, 0, this->usedunits[ (int) newsys ], status );
- } else {
- (*parent_clearunit)( this_frame, 0, status );
- }
-
-/* Also, clear all attributes which have system-specific defaults. */
- astClearLabel( this_frame, 0 );
- astClearSymbol( this_frame, 0 );
- astClearTitle( this_frame );
- }
-}
-
-static void SetUnit( AstFrame *this_frame, int axis, const char *value, int *status ) {
-/*
-* Name:
-* SetUnit
-
-* Purpose:
-* Set a pointer to the Unit string for a FluxFrame's axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* void SetUnit( AstFrame *this_frame, int axis, const char *value )
-
-* Class Membership:
-* FluxFrame member function (over-rides the astSetUnit method inherited
-* from the Frame class).
-
-* Description:
-* This function stores a pointer to the Unit string for a specified axis
-* of a FluxFrame. It also stores the string in the "usedunits" array
-* in the FluxFrame structure, in the element associated with the
-* current System.
-
-* Parameters:
-* this
-* Pointer to the FluxFrame.
-* axis
-* The number of the axis (zero-based) for which information is required.
-* unit
-* The new string to store.
-*/
-
-/* Local Variables: */
- AstFluxFrame *this; /* Pointer to the FluxFrame structure */
- AstSystemType system; /* The FluxFrame's System value */
- int i; /* Loop counter */
- int isystem; /* The FluxFrame's System value */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Use the parent SetUnit method to store the value in the Axis
- structure */
- (*parent_setunit)( this_frame, axis, value, status );
-
-/* Obtain a pointer to the FluxFrame structure. */
- this = (AstFluxFrame *) this_frame;
-
-/* Validate the axis index. */
- astValidateAxis( this, axis, "astSetUnit" );
-
-/* If the new units are appropriate for the current System, store the
- supplied value as the UsedUnit for the current System. First ensure the
- array is big enough. Free any previous value stored for the current
- system. */
- system = astGetSystem( this );
- if( UnitsOK( system, value, 0, "astSetUnit", astGetClass( this ), status ) ) {
- isystem = (int) astGetSystem( this );
- if( isystem >= this->nuunits ) {
- this->usedunits = astGrow( this->usedunits, isystem + 1,
- sizeof(char *) );
- if( astOK ) {
- for( i = this->nuunits; i < isystem + 1; i++ ) this->usedunits[ i ] = NULL;
- this->nuunits = isystem + 1;
- }
- }
-
-/* Now store a copy of the value, if it is different to the stored string. */
- if( astOK && ( !this->usedunits[ isystem ] ||
- strcmp( this->usedunits[ isystem ], value ) ) ) {
- this->usedunits[ isystem ] = astStore( this->usedunits[ isystem ],
- value, strlen( value ) + 1 );
- }
-
-/* If the new units are not appropriate for the current System, clear the
- System value. Use the parent ClearSystem function since the
- astClearSystem implemented by this class will clear the units. */
- } else {
- (*parent_clearsystem)( this_frame, status );
- }
-
-}
-
-static int SubFrame( AstFrame *target_frame, AstFrame *template,
- int result_naxes, const int *target_axes,
- const int *template_axes, AstMapping **map,
- AstFrame **result, int *status ) {
-/*
-* Name:
-* SubFrame
-
-* Purpose:
-* Select axes from a FluxFrame and convert to the new coordinate
-* system.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* int SubFrame( AstFrame *target, AstFrame *template,
-* int result_naxes, const int *target_axes,
-* const int *template_axes, AstMapping **map,
-* AstFrame **result, int *status )
-
-* Class Membership:
-* FluxFrame member function (over-rides the protected astSubFrame
-* method inherited from the Frame class).
-
-* Description:
-* This function selects a requested sub-set (or super-set) of the axes
-* from a "target" FluxFrame and creates a new Frame with copies of
-* the selected axes assembled in the requested order. It then
-* optionally overlays the attributes of a "template" Frame on to the
-* result. It returns both the resulting Frame and a Mapping that
-* describes how to convert between the coordinate systems described by
-* the target and result Frames. If necessary, this Mapping takes
-* account of any differences in the Frames' attributes due to the
-* influence of the template.
-
-* Parameters:
-* target
-* Pointer to the target FluxFrame, from which axes are to be
-* selected.
-* template
-* Pointer to the template Frame, from which new attributes for the
-* result Frame are to be obtained. Optionally, this may be NULL, in
-* which case no overlaying of template attributes will be performed.
-* result_naxes
-* Number of axes to be selected from the target Frame. This number may
-* be greater than or less than the number of axes in this Frame (or
-* equal).
-* target_axes
-* Pointer to an array of int with result_naxes elements, giving a list
-* of the (zero-based) axis indices of the axes to be selected from the
-* target FluxFrame. The order in which these are given determines
-* the order in which the axes appear in the result Frame. If any of the
-* values in this array is set to -1, the corresponding result axis will
-* not be derived from the target Frame, but will be assigned default
-* attributes instead.
-* template_axes
-* Pointer to an array of int with result_naxes elements. This should
-* contain a list of the template axes (given as zero-based axis indices)
-* with which the axes of the result Frame are to be associated. This
-* array determines which axes are used when overlaying axis-dependent
-* attributes of the template on to the result. If any element of this
-* array is set to -1, the corresponding result axis will not receive any
-* template attributes.
-*
-* If the template argument is given as NULL, this array is not used and
-* a NULL pointer may also be supplied here.
-* map
-* Address of a location to receive a pointer to the returned Mapping.
-* The forward transformation of this Mapping will describe how to
-* convert coordinates from the coordinate system described by the target
-* FluxFrame to that described by the result Frame. The inverse
-* transformation will convert in the opposite direction.
-* result
-* Address of a location to receive a pointer to the result Frame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if coordinate conversion is possible
-* between the target and the result Frame. Otherwise zero is returned and
-* *map and *result are returned as NULL (but this will not in itself
-* result in an error condition). In general, coordinate conversion should
-* always be possible if no template Frame is supplied but may not always
-* be possible otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-
-* Implementation Notes:
-* - This implementation addresses the selection of axes from a
-* FluxFrame object. This results in another object of the same class
-* only if the single FluxFrame axis is selected exactly once.
-* Otherwise, the result is a Frame class object which inherits the
-* FluxFrame's axis information (if appropriate) but none of the other
-* properties of a FluxFrame.
-* - In the event that a FluxFrame results, the returned Mapping will
-* take proper account of the relationship between the target and result
-* coordinate systems.
-* - In the event that a Frame class object results, the returned Mapping
-* will only represent a selection/permutation of axes.
-
-* Implementation Deficiencies:
-* - Any axis selection is currently permitted. Probably this should be
-* restricted so that each axis can only be selected once. The
-* astValidateAxisSelection method will do this but currently there are bugs
-* in the CmpFrame class that cause axis selections which will not pass this
-* test. Install the validation when these are fixed.
-*/
-
-/* Local Variables: */
- AstFluxFrame *target; /* Pointer to the FluxFrame structure */
- AstFluxFrame *temp; /* Pointer to copy of target FluxFrame */
- AstSystemType align_sys; /* System in which to align the FluxFrames */
- int match; /* Coordinate conversion is possible? */
- int report; /* Report errors if FluxFrames cannot be aligned? */
-
-/* Initialise the returned values. */
- *map = NULL;
- *result = NULL;
- match = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return match;
-
-/* Obtain a pointer to the target FluxFrame structure. */
- target = (AstFluxFrame *) target_frame;
-
-/* Result is a FluxFrame. */
-/* -------------------------- */
-/* Check if the result Frame is to have one axis obtained by selecting
- the single target FluxFrame axis. If so, the result will also be
- a FluxFrame. */
- if ( ( result_naxes == 1 ) && ( target_axes[ 0 ] == 0 ) ) {
-
-/* Form the result from a copy of the target. */
- *result = astCopy( target );
-
-/* Initialise a flag to indicate that MakeFluxMapping should not report
- errors if no Mapping can be created. */
- report = 0;
-
-/* If required, overlay the template attributes on to the result FluxFrame.
- Also get the system in which to align the two FluxFrames. These are the
- values from the template (if there is a template). */
- if ( template ) {
- astOverlay( template, template_axes, *result );
- if( astIsAFluxFrame( template ) ) {
- align_sys = astGetAlignSystem( template );
-
-/* Since we now know that both the template and target are FluxFrames, it
- should usually be possible to convert betwen them. If conversion is
- *not* possible then the user will probably be interested in knowing the
- reason why conversion is not possible. Therefore, indicate that
- MakeFluxMapping should report errors if no Mapping can be created. */
- report = 1;
-
- } else {
- align_sys = astGetAlignSystem( target );
- }
-
-/* If no template was supplied, align in the System of the target. */
- } else {
- align_sys = astGetSystem( target );
- }
-
-/* Generate a Mapping that takes account of changes in the coordinate system
- between the target FluxFrame and the result FluxFrame. If this Mapping can
- be generated, set "match" to indicate that coordinate conversion is
- possible. If the template is a fluxframe, report errors if a match is not
- possible. */
- match = ( MakeFluxMapping( target, (AstFluxFrame *) *result,
- align_sys, map, status ) != 0 );
-
-/* Result is not a FluxFrame. */
-/* ------------------------------ */
-/* In this case, we select axes as if the target were from the Frame
- class. However, since the resulting data will then be separated
- from their enclosing FluxFrame, default attribute values may differ
- if the methods for obtaining them were over-ridden by the FluxFrame
- class. To overcome this, we ensure that these values are explicitly
- set for the result Frame (rather than relying on their defaults). */
- } else {
-
-/* Make a temporary copy of the target FluxFrame. We will explicitly
- set the attribute values in this copy so as not to modify the original. */
- temp = astCopy( target );
-
-/* Define a macro to test if an attribute is set. If not, set it
- explicitly to its default value. */
-#define SET(attribute) \
- if ( !astTest##attribute( temp ) ) { \
- astSet##attribute( temp, astGet##attribute( temp ) ); \
- }
-
-/* Set attribute values which apply to the Frame as a whole and which
- we want to retain, but whose defaults are over-ridden by the
- FluxFrame class. */
- SET(Domain)
- SET(Title)
-
-/* Define a macro to test if an attribute is set for axis zero (the only
- axis of a FluxFrame). If not, set it explicitly to its default value. */
-#define SET_AXIS(attribute) \
- if ( !astTest##attribute( temp, 0 ) ) { \
- astSet##attribute( temp, 0, \
- astGet##attribute( temp, 0 ) ); \
- }
-
-/* Use this macro to set explicit values for all the axis attributes
- for which the FluxFrame class over-rides the default value. */
- SET_AXIS(Label)
- SET_AXIS(Symbol)
- SET_AXIS(Unit)
-
-/* Clear attributes which have an extended range of values allowed by
- this class. */
- astClearSystem( temp );
- astClearAlignSystem( temp );
-
-/* Invoke the astSubFrame method inherited from the Frame class to
- produce the result Frame by selecting the required set of axes and
- overlaying the template Frame's attributes. */
- match = (*parent_subframe)( (AstFrame *) temp, template,
- result_naxes, target_axes, template_axes,
- map, result, status );
-
-/* Delete the temporary copy of the target FluxFrame. */
- temp = astDelete( temp );
- }
-
-/* If an error occurred or no match was found, annul the returned
- objects and reset the returned result. */
- if ( !astOK || !match ) {
- if( *map ) *map = astAnnul( *map );
- if( *result ) *result = astAnnul( *result );
- match = 0;
- }
-
-/* Return the result. */
- return match;
-
-/* Undefine macros local to this function. */
-#undef SET
-#undef SET_AXIS
-}
-
-static AstSystemType SystemCode( AstFrame *this, const char *system, int *status ) {
-/*
-* Name:
-* SystemCode
-
-* Purpose:
-* Convert a string into a coordinate system type code.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* AstSystemType SystemCode( AstFrame *this, const char *system, int *status )
-
-* Class Membership:
-* FluxFrame member function (over-rides the astSystemCode method
-* inherited from the Frame class).
-
-* Description:
-* This function converts a string used for the external
-* description of a coordinate system into a FluxFrame
-* coordinate system type code (System attribute value). It is the
-* inverse of the astSystemString function.
-
-* Parameters:
-* this
-* The Frame.
-* system
-* Pointer to a constant null-terminated string containing the
-* external description of the sky coordinate system.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The System type code.
-
-* Notes:
-* - A value of AST__BADSYSTEM is returned if the sky coordinate
-* system description was not recognised. This does not produce an
-* error.
-* - A value of AST__BADSYSTEM is also returned if this function
-* is invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- AstSystemType result; /* Result value to return */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Match the "system" string against each possibility and assign the
- result. */
- if ( astChrMatch( "FLXDN", system ) ) {
- result = AST__FLUXDEN;
-
- } else if ( astChrMatch( "FLXDNW", system ) ) {
- result = AST__FLUXDENW;
-
- }else if ( astChrMatch( "SFCBR", system ) ) {
- result = AST__SBRIGHT;
-
- } else if ( astChrMatch( "SRCBR", system ) ) {
- result = AST__SBRIGHTW;
-
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *SystemLabel( AstSystemType system, int *status ) {
-/*
-* Name:
-* SystemLabel
-
-* Purpose:
-* Return a label for a coordinate system type code.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* const char *SystemLabel( AstSystemType system, int *status )
-
-* Class Membership:
-* FluxFrame member function.
-
-* Description:
-* This function converts a FluxFrame coordinate system type code
-* (System attribute value) into a descriptive string for human readers.
-
-* Parameters:
-* system
-* The coordinate system type code.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a constant null-terminated string containing the
-* textual equivalent of the type code supplied.
-
-* Notes:
-* - A NULL pointer value is returned if the sky coordinate system
-* code was not recognised. This does not produce an error.
-* - A NULL pointer value is also returned if this function is
-* invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- const char *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Match the "system" value against each possibility and convert to a
- string pointer. */
- switch ( system ) {
-
- case AST__FLUXDEN:
- result = "flux density";
- break;
-
- case AST__FLUXDENW:
- result = "flux wavelength density";
- break;
-
- case AST__SBRIGHT:
- result = "surface brightness";
- break;
-
- case AST__SBRIGHTW:
- result = "surface brightness (per wavelength)";
- break;
-
- }
-
-/* Return the result pointer. */
- return result;
-}
-
-static const char *SystemString( AstFrame *this, AstSystemType system, int *status ) {
-/*
-* Name:
-* SystemString
-
-* Purpose:
-* Convert a coordinate system type code into a string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* const char *SystemString( AstFrame *this, AstSystemType system, int *status )
-
-* Class Membership:
-* FluxFrame member function (over-rides the astSystemString method
-* inherited from the Frame class).
-
-* Description:
-* This function converts a FluxFrame coordinate system type code
-* (System attribute value) into a string suitable for use as an
-* external representation of the coordinate system type.
-
-* Parameters:
-* this
-* The Frame.
-* system
-* The coordinate system type code.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a constant null-terminated string containing the
-* textual equivalent of the type code supplied.
-
-* Notes:
-* - A NULL pointer value is returned if the coordinate system
-* code was not recognised. This does not produce an error.
-* - A NULL pointer value is also returned if this function is
-* invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
- return FluxSystemString( system, status );
-}
-
-static int TestActiveUnit( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* TestActiveUnit
-
-* Purpose:
-* Test the ActiveUnit flag for a FluxFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* int TestActiveUnit( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* FluxFrame member function (over-rides the astTestActiveUnit protected
-* method inherited from the Frame class).
-
-* Description:
-* This function test the value of the ActiveUnit flag for a FluxFrame,
-* which is always "unset".
-
-* Parameters:
-* this
-* Pointer to the FluxFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The result of the test (0).
-
-*/
- return 0;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a FluxFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* FluxFrame member function (over-rides the astTestAttrib protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a FluxFrame's attributes.
-
-* Parameters:
-* this
-* Pointer to the FluxFrame.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - This function uses one-based axis numbering so that it is
-* suitable for external (public) use.
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFluxFrame *this; /* Pointer to the FluxFrame structure */
- int len; /* Length of attrib string */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the FluxFrame structure. */
- this = (AstFluxFrame *) this_object;
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* SpecVal. */
-/* -------- */
- if ( !strcmp( attrib, "specval" ) ) {
- result = astTestSpecVal( this );
-
-/* If the attribute is not recognised, pass it on to the parent method
- for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static int UnitsOK( AstSystemType system, const char *units, int report,
- const char *method, const char *class, int *status ) {
-/*
-* Name:
-* UnitsOK
-
-* Purpose:
-* Check if a units string is appropriate for the current System.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* int UnitsOK( AstSystemType system, const char *units, int report,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* FluxFrame member function
-
-* Description:
-* This function returns a non-zero value if the supplied units string
-* can be mapped to the defaultunits for the current System in the
-* supplied FluxFrame.
-
-* Parameters:
-* system
-* The system type to check.
-* unit
-* The units string to check.
-* report
-* Should an error be reported if the units and system are
-* inconsistent?
-* method
-* String holding a method name to be used in error messages.
-* class
-* String holding a class name to be used in error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returns Value:
-* Non-zero if the units string can be used to describe the current
-* flux System. Zero otherwise.
-
-*/
-
-/* Local Variables: */
- AstMapping *map;
- int result;
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Get the Mapping from the default units for the supplied system to the
- supplied Units. */
- map = astUnitMapper( DefUnit( system, method, class, status ), units, NULL, NULL );
-
-/* If a Mapping was found succesfully, annul it and return non-zero.
- Otherwise return zero. */
- if( map ) {
- result = 1;
- map = astAnnul( map );
-
- } else {
- result = 0;
-
-/* Report an error if required. */
- if( report && astOK ) {
- astError( AST__BADUN, "%s(%s): The units (%s) and system (%s) "
- "within the supplied %s are inconsistent.", status, method,
- class, units, FluxSystemString( system, status ), class );
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static int ValidateSystem( AstFrame *this, AstSystemType system, const char *method, int *status ) {
-/*
-*
-* Name:
-* ValidateSystem
-
-* Purpose:
-* Validate a value for a Frame's System attribute.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* int ValidateSystem( AstFrame *this, AstSystemType system,
-* const char *method, int *status )
-
-* Class Membership:
-* FluxFrame member function (over-rides the astValidateSystem method
-* inherited from the Frame class).
-
-* Description:
-* This function checks the validity of the supplied system value.
-* If the value is valid, it is returned unchanged. Otherwise, an
-* error is reported and a value of AST__BADSYSTEM is returned.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* system
-* The system value to be checked.
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function
-* to validate an axis index. This method name is used solely
-* for constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The validated system value.
-
-* Notes:
-* - A value of AST__BADSYSTEM will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstSystemType result; /* Validated system value */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If the value is out of bounds, report an error. */
- if ( system < FIRST_SYSTEM || system > LAST_SYSTEM ) {
- astError( AST__AXIIN, "%s(%s): Bad value (%d) given for the System "
- "or AlignSystem attribute of a %s.", status, method,
- astGetClass( this ), (int) system, astGetClass( this ) );
-
-/* Otherwise, return the supplied value. */
- } else {
- result = system;
- }
-
-/* Return the result. */
- return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/*
-*att++
-* Name:
-* SpecVal
-
-* Purpose:
-* The spectral position at which flux values are measured.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute specifies the spectral position (frequency, wavelength,
-* etc.), at which the values described by the FluxFrame are measured.
-* It is used when determining the Mapping between between FluxFrames.
-*
-* The default value and spectral system used for this attribute are
-* both specified when the FluxFrame is created.
-
-* Applicability:
-* FluxFrame
-* All FluxFrames have this attribute.
-
-*att--
-*/
-astMAKE_CLEAR(FluxFrame,SpecVal,specval,AST__BAD)
-astMAKE_GET(FluxFrame,SpecVal,double,AST__BAD,((this->specval!=AST__BAD)?this->specval:this->defspecval))
-astMAKE_SET(FluxFrame,SpecVal,double,specval,value)
-astMAKE_TEST(FluxFrame,SpecVal,( this->specval != AST__BAD ))
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for FluxFrame objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for FluxFrame objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstFluxFrame *in; /* Pointer to input FluxFrame */
- AstFluxFrame *out; /* Pointer to output FluxFrame */
- char *usedunit; /* Pointer to an element of usedunits array */
- int i; /* Loop count */
- int nused; /* Size of "usedunits" array */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output FluxFrames. */
- in = (AstFluxFrame *) objin;
- out = (AstFluxFrame *) objout;
-
-/* Nullify the pointers stored in the output object since these will
- currently be pointing at the input data (since the output is a simple
- byte-for-byte copy of the input). Otherwise, the input data could be
- freed by accidient if the output object is deleted due to an error
- occuring in this function. */
- out->usedunits = NULL;
- out->specframe = NULL;
-
-/* Store the last used units in the output SpecMap. */
- if( in && in->usedunits ) {
- nused = in->nuunits;
- out->usedunits = astMalloc( nused*sizeof( char * ) );
- if( out->usedunits ) {
- for( i = 0; i < nused; i++ ) {
- usedunit = in->usedunits[ i ];
- if( usedunit ) {
- out->usedunits[ i ] = astStore( NULL, usedunit,
- strlen( usedunit ) + 1 );
- } else {
- out->usedunits[ i ] = NULL;
- }
- }
- }
- }
-
-/* Copy the SpecFrame */
- if( in->specframe ) out->specframe = astCopy( in->specframe );
-
-/* If an error has occurred, free the output resources. */
- if( !astOK ) Delete( (AstObject *) out, status );
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for FluxFrame objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for FluxFrame objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstFluxFrame *this;
- int i;
-
-/* Release the memory referred to in the FluxFrame structure. */
- this = (AstFluxFrame *) obj;
- if( this && this->usedunits ) {
- for( i = 0; i < this->nuunits; i++ ) {
- this->usedunits[ i ] = astFree( this->usedunits[ i ] );
- }
- this->usedunits = astFree( this->usedunits );
- }
-
-/* Annulthe SpecFrame. */
- if( this->specframe ) this->specframe = astAnnul( this->specframe );
-
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for FluxFrame objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the FluxFrame class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the FluxFrame whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstFluxFrame *this; /* Pointer to the FluxFrame structure */
- char buff[ 20 ]; /* Buffer for item name */
- char comm[ 50 ]; /* Buffer for comment */
- double dval; /* Double value */
- int i; /* Loop count */
- int j; /* Loop count */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FluxFrame structure. */
- this = (AstFluxFrame *) this_object;
-
-/* Write out values representing the instance variables for the
- FluxFrame class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* SpecVal. */
-/* -------- */
- set = TestSpecVal( this, status );
- dval = set ? GetSpecVal( this, status ) : astGetSpecVal( this );
- if( dval != AST__BAD ) {
- astWriteDouble( channel, "SpcVl", set, 0, dval, "Spectral position" );
- }
-
-/* The SpecFrame */
-/* ------------- */
- if( this->specframe ) {
- astWriteObject( channel, "SpcFr", 1, 0, this->specframe, "SpcVl coord system" );
- }
-
-/* Default SpecVal. */
-/* ---------------- */
- if( this->defspecval != AST__BAD ) {
- astWriteDouble( channel, "DfSpc", 1, 0, this->defspecval, "Default spectral position" );
- }
-
-/* UsedUnits */
-/* --------- */
- if( this->usedunits ) {
- for( i = 0; i < this->nuunits; i++ ) {
- if( this->usedunits[ i ] ) {
- sprintf( buff, "U%s", astSystemString( this, (AstSystemType) i ));
- for( j = 2; j < strlen( buff ); j++ ) buff[ j ] = tolower( buff[ j ] );
- sprintf( comm, "Preferred units for %s", SystemLabel( (AstSystemType) i, status ) );
- astWriteString( channel, buff, 1, 0, this->usedunits[ i ], comm );
- }
- }
- }
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAFluxFrame and astCheckFluxFrame functions using the
- macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(FluxFrame,Frame)
-astMAKE_CHECK(FluxFrame)
-
-AstFluxFrame *astFluxFrame_( double specval, void *specfrm_void,
- const char *options, int *status, ...) {
-/*
-*+
-* Name:
-* astFluxFrame
-
-* Purpose:
-* Create a FluxFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* AstFluxFrame *astFluxFrame( double specval, AstSpecFrame *specfrm,
-* const char *options, ..., int *status )
-
-* Class Membership:
-* FluxFrame constructor.
-
-* Description:
-* This function creates a new FluxFrame and optionally initialises its
-* attributes.
-
-* Parameters:
-* specval
-* The spectral value to which the flux values refer, given in the
-* spectral coordinate system specified by "specfrm". The value
-* supplied for the "specval" parameter becomes the default value for
-* the SpecVal attribute.
-* specfrm
-* A pointer to a SpecFrame describing the spectral coordinate system
-* in which the "specval" parameter is given. A deep copy of this object
-* is taken, so any subsequent changes to the SpecFrame using the
-* supplied pointer will have no effect on the new FluxFrame.
-* options
-* Pointer to a null terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new FluxFrame. The syntax used is the same as for the
-* astSet method and may include "printf" format specifiers identified
-* by "%" symbols in the normal way.
-* status
-* Pointer to the inherited status variable.
-* ...
-* If the "options" string contains "%" format specifiers, then an
-* optional list of arguments may follow it in order to supply values to
-* be substituted for these specifiers. The rules for supplying these
-* are identical to those for the astSet method (and for the C "printf"
-* function).
-
-* Returned Value:
-* A pointer to the new FluxFrame.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-
-* Implementation Notes:
-* - This function implements the basic FluxFrame constructor which
-* is available via the protected interface to the FluxFrame class.
-* A public interface is provided by the astFluxFrameId_ function.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMapping *um; /* Mapping from default to actual units */
- AstFluxFrame *new; /* Pointer to new FluxFrame */
- AstSpecFrame *sfrm; /* Pointer to SpecFrame */
- AstSystemType s; /* System */
- const char *u; /* Units string */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the SpecFrame structures provided. */
- sfrm = specfrm_void ? astCheckSpecFrame( specfrm_void ) : NULL;
-
-/* Initialise the FluxFrame, allocating memory and initialising the virtual
- function table as well if necessary. */
- new = astInitFluxFrame( NULL, sizeof( AstFluxFrame ), !class_init,
- &class_vtab, "FluxFrame", specval, sfrm );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new FluxFrame's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* Check the Units are appropriate for the System. */
- u = astGetUnit( new, 0 );
- s = astGetSystem( new );
- um = astUnitMapper( DefUnit( s, "astFluxFrame", "FluxFrame", status ),
- u, NULL, NULL );
- if( um ) {
- um = astAnnul( um );
- } else {
- astError( AST__BADUN, "astFluxFrame: Inappropriate units (%s) "
- "specified for a %s axis.", status, u, SystemLabel( s, status ) );
- }
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new FluxFrame. */
- return new;
-}
-
-AstFluxFrame *astInitFluxFrame_( void *mem, size_t size, int init,
- AstFluxFrameVtab *vtab, const char *name,
- double specval, AstSpecFrame *specfrm, int *status ) {
-/*
-*+
-* Name:
-* astInitFluxFrame
-
-* Purpose:
-* Initialise a FluxFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* AstFluxFrame *astInitFluxFrame( void *mem, size_t size, int init,
-* AstFrameVtab *vtab, const char *name,
-* double specval, AstSpecFrame *specfrm)
-
-* Class Membership:
-* FluxFrame initialiser.
-
-* Description:
-* This function is provided for use by class implementations to
-* initialise a new FluxFrame object. It allocates memory (if
-* necessary) to accommodate the FluxFrame plus any additional data
-* associated with the derived class. It then initialises a
-* FluxFrame structure at the start of this memory. If the "init"
-* flag is set, it also initialises the contents of a virtual function
-* table for a FluxFrame at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the FluxFrame is to be
-* created. This must be of sufficient size to accommodate the
-* FluxFrame data (sizeof(FluxFrame)) plus any data used by
-* the derived class. If a value of NULL is given, this function
-* will allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the FluxFrame (plus derived
-* class data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also stored
-* in the FluxFrame structure, so a valid value must be supplied
-* even if not required for allocating memory.
-* init
-* A logical flag indicating if the FluxFrame's virtual function
-* table is to be initialised. If this value is non-zero, the
-* virtual function table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new FluxFrame.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object belongs
-* (it is this pointer value that will subsequently be returned by
-* the astGetClass method).
-* specval
-* The spectral value to which the flux values refer, given in the
-* spectral coordinate system specified by "specfrm". The value
-* supplied for the "specval" parameter becomes the default value for
-* the SpecVal attribute. May be AST__BAD.
-* specfrm
-* A pointer to a SpecFrame describing the spectral coordinate system
-* in which the "specval" parameter is given. A deep copy of this object
-* is taken, so any subsequent changes to the SpecFrame using the
-* supplied pointer will have no effect on the new FluxFrame. Should
-* be NULL if "specval" is AST__BAD.
-
-* Returned Value:
-* A pointer to the new FluxFrame.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstFluxFrame *new; /* Pointer to the new FluxFrame */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitFluxFrameVtab( vtab, name );
-
-/* Initialise a 1D Frame structure (the parent class) as the first component
- within the FluxFrame structure, allocating memory if necessary. */
- new = (AstFluxFrame *) astInitFrame( mem, size, 0,
- (AstFrameVtab *) vtab, name, 1 );
-
- if ( astOK ) {
-
-/* Initialise the FluxFrame data. */
-/* ----------------------------- */
-/* Initialise all attributes to their "undefined" values. */
- new->specval = AST__BAD;
- new->defspecval = specval;
- new->specframe = specfrm ? astCopy( specfrm ) : NULL;
- new->nuunits = 0;
- new->usedunits = NULL;
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
-
- }
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstFluxFrame *astLoadFluxFrame_( void *mem, size_t size, AstFluxFrameVtab *vtab,
- const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadFluxFrame
-
-* Purpose:
-* Load a FluxFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "fluxframe.h"
-* AstFluxFrame *astLoadFluxFrame( void *mem, size_t size, AstFluxFrameVtab *vtab,
-* const char *name, AstChannel *channel )
-
-* Class Membership:
-* FluxFrame loader.
-
-* Description:
-* This function is provided to load a new FluxFrame using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* FluxFrame structure in this memory, using data read from the
-* input Channel.
-
-* Parameters:
-* mem
-* A pointer to the memory into which the FluxFrame is to be
-* loaded. This must be of sufficient size to accommodate the
-* FluxFrame data (sizeof(FluxFrame)) plus any data used by
-* derived classes. If a value of NULL is given, this function
-* will allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the FluxFrame (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the FluxFrame structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstFluxFrame) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new FluxFrame. If this is NULL, a pointer
-* to the (static) virtual function table for the FluxFrame class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "FluxFrame" is used instead.
-
-* Returned Value:
-* A pointer to the new FluxFrame.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFluxFrame *new; /* Pointer to the new FluxFrame */
- char buff[ 20 ]; /* Buffer for item name */
- char *sval; /* Pointer to string value */
- int i; /* Loop count */
- int j; /* Get a pointer to the thread specific global data structure. */
-
-/* Loop count */
- int sys; /* System value */
-
- astGET_GLOBALS(channel);
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this FluxFrame. In this case the
- FluxFrame belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstFluxFrame );
- vtab = &class_vtab;
- name = "FluxFrame";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitFluxFrameVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built FluxFrame. */
- new = astLoadFrame( mem, size, (AstFrameVtab *) vtab, name,
- channel );
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "FluxFrame" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* Default SpecVal */
-/* --------------- */
- new->defspecval = astReadDouble( channel, "dfspc", AST__BAD );
-
-/* SpecFrame */
-/* ---------- */
- new->specframe = astReadObject( channel, "spcfr", NULL );
-
-/* SpecVal */
-/* ------- */
- new->specval = astReadDouble( channel, "spcvl", AST__BAD );
- if ( TestSpecVal( new, status ) ) SetSpecVal( new, new->specval, status );
-
-/* UsedUnits */
-/* --------- */
- new->nuunits = 0;
- new->usedunits = NULL;
- for( sys = FIRST_SYSTEM; sys <= LAST_SYSTEM; sys++ ) {
- sprintf( buff, "u%s", astSystemString( new, (AstSystemType) sys ));
- for( j = 0; j < strlen( buff ); j++ ) buff[ j ] = tolower( buff[ j ] );
- sval = astReadString( channel, buff, NULL );
- if( sval ) {
- if( (int) sys >= new->nuunits ) {
- new->usedunits = astGrow( new->usedunits, sys + 1,
- sizeof(char *) );
- if( astOK ) {
- for( i = new->nuunits; i < sys + 1; i++ ) new->usedunits[ i ] = NULL;
- new->nuunits = sys + 1;
- }
- } else {
- new->usedunits[ sys ] = astFree( new->usedunits[ sys ] );
- }
- if( astOK ) {
- new->usedunits[ sys ] = astStore( new->usedunits[ sys ],
- sval, strlen( sval ) + 1 );
- }
- sval = astFree( sval );
- }
- }
-
-/* If an error occurred, clean up by deleting the new FluxFrame. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new FluxFrame pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-AstSystemType astGetDensitySystem_( AstFluxFrame *this, int *status ){
- if ( !astOK ) return AST__BADSYSTEM;
- return (**astMEMBER(this,FluxFrame,GetDensitySystem))(this, status );
-}
-
-const char *astGetDensityUnit_( AstFluxFrame *this, int *status ){
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,FluxFrame,GetDensityUnit))(this, status );
-}
-
-
-/* Special public interface functions. */
-/* =================================== */
-/* These provide the public interface to certain special functions
- whose public interface cannot be handled using macros (such as
- astINVOKE) alone. In general, they are named after the
- corresponding protected version of the function, but with "Id"
- appended to the name. */
-
-/* Public Interface Function Prototypes. */
-/* ------------------------------------- */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstFluxFrame *astFluxFrameId_( double, void *, const char *, ... );
-
-/* Special interface function implementations. */
-/* ------------------------------------------- */
-AstFluxFrame *astFluxFrameId_( double specval, void *specfrm_void,
- const char *options, ... ) {
-/*
-*++
-* Name:
-c astFluxFrame
-f AST_FLUXFRAME
-
-* Purpose:
-* Create a FluxFrame.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "fluxframe.h"
-c AstFluxFrame *astFluxFrame( double specval, AstSpecFrame *specfrm,
-c const char *options, ... )
-f RESULT = AST_FLUXFRAME( SPECVAL, SPECFRM, OPTIONS, STATUS )
-
-* Class Membership:
-* FluxFrame constructor.
-
-* Description:
-* This function creates a new FluxFrame and optionally initialises
-* its attributes.
-*
-* A FluxFrame is a specialised form of one-dimensional Frame which
-* represents various systems used to represent the signal level in an
-* observation. The particular coordinate system to be used is specified
-* by setting the FluxFrame's System attribute qualified, as necessary, by
-* other attributes such as the units, etc (see the description of the
-* System attribute for details).
-*
-* All flux values are assumed to be measured at the same frequency or
-* wavelength (as given by the SpecVal attribute). Thus this class is
-* more appropriate for use with images rather than spectra.
-
-* Parameters:
-c specval
-f SPECVAL = DOUBLE PRECISION (Given)
-* The spectral value to which the flux values refer, given in the
-* spectral coordinate system specified by
-c "specfrm". The value supplied for the "specval"
-f SPECFRM. The value supplied for the SPECVAL
-* parameter becomes the default value for the SpecVal attribute.
-* A value of AST__BAD may be supplied if the spectral position is
-* unknown, but this may result in it not being possible for the
-c astConvert
-f AST_CONVERT
-* function to determine a Mapping between the new FluxFrame and
-* some other FluxFrame.
-c specfrm
-f SPECFRM = INTEGER (Given)
-* A pointer to a SpecFrame describing the spectral coordinate system
-* in which the
-c "specval"
-f SPECVAL
-* parameter is given. A deep copy of this object is taken, so any
-* subsequent changes to the SpecFrame using the supplied pointer will
-* have no effect on the new FluxFrame.
-c A NULL pointer can be supplied if AST__BAD is supplied for "specval".
-f AST__NULL can be supplied if AST__BAD is supplied for SPECVAL.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new FluxFrame. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-c If no initialisation is required, a zero-length string may be
-c supplied.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new FluxFrame. The syntax used is identical to that for the
-f AST_SET routine. If no initialisation is required, a blank
-f value may be supplied.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astFluxFrame()
-f AST_FLUXFRAME = INTEGER
-* A pointer to the new FluxFrame.
-
-* Notes:
-* - When conversion between two FluxFrames is requested (as when
-c supplying FluxFrames to astConvert),
-f supplying FluxFrames AST_CONVERT),
-* account will be taken of the nature of the flux coordinate systems
-* they represent, together with any qualifying attribute values, including
-* the AlignSystem attribute. The results will therefore fully reflect the
-* relationship between positions measured in the two systems. In addition,
-* any difference in the Unit attributes of the two systems will also be
-* taken into account.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-
-* Implementation Notes:
-* - This function implements the external (public) interface to
-* the astFluxFrame constructor function. It returns an ID value
-* (instead of a true C pointer) to external users, and must be
-* provided because astFluxFrame_ has a variable argument list which
-* cannot be encapsulated in a macro (where this conversion would
-* otherwise occur).
-* - The variable argument list also prevents this function from
-* invoking astFluxFrame_ directly, so it must be a
-* re-implementation of it in all respects, except for the final
-* conversion of the result to an ID value.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMapping *um; /* Mapping from default to actual units */
- AstFluxFrame *new; /* Pointer to new FluxFrame */
- AstSpecFrame *sfrm; /* Pointer to SpecFrame */
- AstSystemType s; /* System */
- const char *u; /* Units string */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the SpecFrame structures provided. */
- sfrm = specfrm_void ? astCheckSpecFrame( astMakePointer( specfrm_void ) ) : NULL;
-
-/* Initialise the FluxFrame, allocating memory and initialising the virtual
- function table as well if necessary. */
- new = astInitFluxFrame( NULL, sizeof( AstFluxFrame ), !class_init,
- &class_vtab, "FluxFrame", specval, sfrm );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new FluxFrame's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* Check the Units are appropriate for the System. */
- u = astGetUnit( new, 0 );
- s = astGetSystem( new );
- um = astUnitMapper( DefUnit( s, "astFluxFrame", "FluxFrame", status ),
- u, NULL, NULL );
- if( um ) {
- um = astAnnul( um );
- } else {
- astError( AST__BADUN, "astFluxFrame: Inappropriate units (%s) "
- "specified for a %s axis.", status, u, SystemLabel( s, status ) );
- }
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new FluxFrame. */
- return astMakeId( new );
-}
-
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/fluxframe.h b/ast-5.3-1/fluxframe.h
deleted file mode 100644
index 749a273..0000000
--- a/ast-5.3-1/fluxframe.h
+++ /dev/null
@@ -1,263 +0,0 @@
-#if !defined( FLUXFRAME_INCLUDED ) /* Include this file only once */
-#define FLUXFRAME_INCLUDED
-/*
-*+
-* Name:
-* fluxframe.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the FluxFrame class.
-
-* Invocation:
-* #include "fluxframe.h"
-
-* Description:
-* This include file defines the interface to the FluxFrame class
-* and provides the type definitions, function prototypes and
-* macros, etc. needed to use this class.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 1-DEC-2004 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h" /* Base Object class */
-#include "frame.h" /* Parent Frame class */
-#include "specframe.h" /* Spectral coordinate systems */
-
-/* Macros. */
-/* ======= */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-
-#if defined(astCLASS) /* Protected */
-
-/* Values used to represent different System attribute values. */
-#define AST__FLUXDEN 1
-#define AST__FLUXDENW 2
-#define AST__SBRIGHT 3
-#define AST__SBRIGHTW 4
-
-/* Define constants used to size global arrays in this module. */
-#define AST__FLUXFRAME_GETATTRIB_BUFF_LEN 50
-#define AST__FLUXFRAME_GETLABEL_BUFF_LEN 200
-#define AST__FLUXFRAME_GETSYMBOL_BUFF_LEN 20
-#define AST__FLUXFRAME_GETTITLE_BUFF_LEN 200
-
-#endif
-
-/* Type Definitions. */
-/* ================= */
-
-/* FluxFrame structure. */
-/* ------------------- */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstFluxFrame {
-
-/* Attributes inherited from the parent class. */
- AstFrame frame; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- double specval; /* Spectral position */
- double defspecval; /* Default spectral position */
- AstSpecFrame *specframe; /* SpecFrame describing specval & defspecval */
- int nuunits; /* Size of usedunits array */
- char **usedunits; /* Last used units for each system */
-} AstFluxFrame;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all objects in the
- class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstFluxFrameVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstFrameVtab frame_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
- AstSystemType (* GetDensitySystem)( AstFluxFrame *, int * );
- const char *(* GetDensityUnit)( AstFluxFrame *, int * );
-
- double (* GetSpecVal)( AstFluxFrame *, int * );
- int (* TestSpecVal)( AstFluxFrame *, int * );
- void (* ClearSpecVal)( AstFluxFrame *, int * );
- void (* SetSpecVal)( AstFluxFrame *, double, int * );
-
-} AstFluxFrameVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstFluxFrameGlobals {
- AstFluxFrameVtab Class_Vtab;
- int Class_Init;
- char GetAttrib_Buff[ AST__FLUXFRAME_GETATTRIB_BUFF_LEN + 1 ];
- char GetLabel_Buff[ AST__FLUXFRAME_GETLABEL_BUFF_LEN + 1 ];
- char GetSymbol_Buff[ AST__FLUXFRAME_GETSYMBOL_BUFF_LEN + 1 ];
- char GetTitle_Buff[ AST__FLUXFRAME_GETTITLE_BUFF_LEN + 1 ];
-} AstFluxFrameGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(FluxFrame) /* Check class membership */
-astPROTO_ISA(FluxFrame) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected */
-AstFluxFrame *astFluxFrame_( double, void *, const char *, int *, ...);
-#else
-AstFluxFrame *astFluxFrameId_( double, void *, const char *, ... );
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstFluxFrame *astInitFluxFrame_( void *, size_t, int,
- AstFluxFrameVtab *,
- const char *, double, AstSpecFrame *, int * );
-
-/* Vtab initialiser. */
-void astInitFluxFrameVtab_( AstFluxFrameVtab *, const char *, int * );
-
-/* Loader. */
-AstFluxFrame *astLoadFluxFrame_( void *, size_t,
- AstFluxFrameVtab *,
- const char *, AstChannel *channel, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitFluxFrameGlobals_( AstFluxFrameGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-
-#if defined(astCLASS) /* Protected */
-
-AstSystemType astGetDensitySystem_( AstFluxFrame *, int * );
-const char *astGetDensityUnit_( AstFluxFrame *, int * );
-
-double astGetSpecVal_( AstFluxFrame *, int * );
-int astTestSpecVal_( AstFluxFrame *, int * );
-void astClearSpecVal_( AstFluxFrame *, int * );
-void astSetSpecVal_( AstFluxFrame *, double, int * );
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckFluxFrame(this) astINVOKE_CHECK(FluxFrame,this,0)
-#define astVerifyFluxFrame(this) astINVOKE_CHECK(FluxFrame,this,1)
-
-/* Test class membership. */
-#define astIsAFluxFrame(this) astINVOKE_ISA(FluxFrame,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected */
-#define astFluxFrame astINVOKE(F,astFluxFrame_)
-#else
-#define astFluxFrame astINVOKE(F,astFluxFrameId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitFluxFrame(mem,size,init,vtab,name,specval,specfrm) \
-astINVOKE(O,astInitFluxFrame_(mem,size,init,vtab,name,specval,astCheckSpecFrame(specfrm),STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitFluxFrameVtab(vtab,name) astINVOKE(V,astInitFluxFrameVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadFluxFrame(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadFluxFrame_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-
-/* None. */
-
-/* Interfaces to protected member functions. */
-/* ----------------------------------------- */
-/* Here we make use of astCheckFluxFrame to validate FluxFrame pointers
- before use. This provides a contextual error report if a pointer to
- the wrong sort of object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-
-#define astGetDensitySystem(this) astINVOKE(V,astGetDensitySystem_(astCheckFluxFrame(this),STATUS_PTR))
-#define astGetDensityUnit(this) astINVOKE(V,astGetDensityUnit_(astCheckFluxFrame(this),STATUS_PTR))
-
-#define astGetSpecVal(this) astINVOKE(V,astGetSpecVal_(astCheckFluxFrame(this),STATUS_PTR))
-#define astTestSpecVal(this) astINVOKE(V,astTestSpecVal_(astCheckFluxFrame(this),STATUS_PTR))
-#define astClearSpecVal(this) astINVOKE(V,astClearSpecVal_(astCheckFluxFrame(this),STATUS_PTR))
-#define astSetSpecVal(this,value) astINVOKE(V,astSetSpecVal_(astCheckFluxFrame(this),value,STATUS_PTR))
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/fmapping.c b/ast-5.3-1/fmapping.c
deleted file mode 100644
index 70a1c28..0000000
--- a/ast-5.3-1/fmapping.c
+++ /dev/null
@@ -1,730 +0,0 @@
-/*
-*+
-* Name:
-* fmapping.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST Mapping class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the Mapping class.
-
-* Routines Defined:
-* AST_DECOMPOSE
-* AST_INVERT
-* AST_ISAMAPPING
-* AST_LINEARMAPPING
-* AST_REBIN<X>
-* AST_REBINSEQ<X>
-* AST_MAPBOX
-* AST_MAPSPLIT
-* AST_RATE
-* AST_REMOVEREGIONS
-* AST_RESAMPLE<X>
-* AST_SIMPLIFY
-* AST_TRAN1
-* AST_TRAN2
-* AST_TRANGRID
-* AST_TRANN
-* AST_RATE
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 11-JUL-1996 (RFWS):
-* Original version.
-* 13-DEC-1996 (RFWS)
-* Added AST_SIMPLIFY.
-* 28-MAY-1998 (RFWS):
-* Added AST_MAPBOX.
-* 12-NOV-1998 (RFWS):
-* Added AST_RESAMPLE<X>.
-* 22-NOV-2000 (DSB):
-* Pass the "flags" argument by reference instead of by value in the
-* MAKE_AST_RESAMPLE_UINTERP macro.
-* 9-JAN-2001 (DSB):
-* Changed in and out arguments for TranN from type "double (*)[]"
-* to "double *".
-* 26-SEP-2001 (DSB):
-* Added AST_DECOMPOSE.
-* 16-JUL-2003 (DSB):
-* Added AST_RATE.
-* 30-JUN-2005 (DSB):
-* Added AST_REBIN<X>.
-* 1-SEP-2005 (DSB):
-* Added AST_REBINSEQ<X>.
-* 8-MAR-2006 (DSB):
-* Added AST_TRANGRID.
-* 5-MAY-2009 (DSB):
-* Added AST_REMOVEREGIONS.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "mapping.h" /* C interface to the Mapping class */
-
-/* Module Variables. */
-/* ================= */
-/* Pointer to user-supplied (FORTRAN 77) interpolation function for
- use by AST_RESAMPLE<X>. */
-static void (* ast_resample_FINTERP)();
-
-/* Interpolation function interface. */
-/* ================================= */
-/* These functions are associated with allowing FORTRAN 77
- implementations of interpolation functions to be passed to
- AST_RESAMPLE<X> via the FORTRAN 77 interface and then to be invoked
- when necessary by the C code in the main implementation of
- astResample<X>. */
-
-/* Define a macro which defines an interface function called
- ast_resample_uinterp<X> for a specific data type.
-
- The resulting function has a suitable interface to allow it to be
- passed as an interpolation function to the C interface of
- astResample<X> in the case where the "interp" parameter is set to
- AST__UINTERP. In turn, it invokes the equivalent user-supplied
- FORTRAN 77 interpolation function, a pointer to which should
- previously have been stored in the static variable
- "ast_resample_FINTERP". */
-#define MAKE_AST_RESAMPLE_UINTERP(X,Xtype,Ftype) \
-static void ast_resample_uinterp##X( int ndim, \
- const int lbnd[], const int ubnd[], \
- const Xtype in[], const Xtype in_var[], \
- int npoint, const int offset[], \
- const double *const coords[], \
- const double params[], int flags, \
- Xtype badval, \
- Xtype *out, Xtype *out_var, \
- int *nbad ) { \
- DECLARE_INTEGER(STATUS); \
- int *status; \
-\
-/* Get a pointer to the inherited staus value. */ \
- status = astGetStatusPtr; \
-\
-/* Obtain the C status and then invoke the FORTRAN 77 interpolation \
- function via the stored pointer. Note that the "coords" array we \
- pass to FORTRAN has to be a contiguous 2-d array, so we must \
- de-reference one level of pointer compared to the C case. */ \
- STATUS = astStatus; \
- ( *ast_resample_FINTERP )( INTEGER_ARG(&ndim), \
- INTEGER_ARRAY_ARG(lbnd), \
- INTEGER_ARRAY_ARG(ubnd), \
- Ftype##_ARRAY_ARG(in), \
- Ftype##_ARRAY_ARG(in_var), \
- INTEGER_ARG(&npoint), \
- INTEGER_ARRAY_ARG(offset), \
- DOUBLE_ARRAY_ARG(coords[ 0 ]), \
- DOUBLE_ARRAY_ARG(params), \
- INTEGER_ARG(&flags), \
- Ftype##_ARG(&badval), \
- Ftype##_ARRAY_ARG(out), \
- Ftype##_ARRAY_ARG(out_var), \
- INTEGER_ARG(nbad), \
- INTEGER_ARG(&STATUS) ); \
-\
-/* Set the C status to the returned FORTRAN 77 status. */ \
- astSetStatus( STATUS ); \
-}
-
-/* Invoke the above macro to define an interface function for each
- required data type. */
-MAKE_AST_RESAMPLE_UINTERP(D,double,DOUBLE)
-MAKE_AST_RESAMPLE_UINTERP(F,float,REAL)
-MAKE_AST_RESAMPLE_UINTERP(I,int,INTEGER)
-MAKE_AST_RESAMPLE_UINTERP(UI,unsigned int,INTEGER)
-MAKE_AST_RESAMPLE_UINTERP(S,short int,WORD)
-MAKE_AST_RESAMPLE_UINTERP(US,unsigned short int,UWORD)
-MAKE_AST_RESAMPLE_UINTERP(B,signed char,BYTE)
-MAKE_AST_RESAMPLE_UINTERP(UB,unsigned char,UBYTE)
-
-/* Undefine the macro. */
-#undef MAKE_AST_RESAMPLE_UINTERP
-
-/* Define a function called ast_resample_ukern1 which has a suitable
- interface to allow it to be passed as an interpolation function to
- the C interface of astResample<X> in the case where the "interp"
- parameter is set to AST__UKERN1. In turn, it invokes the equivalent
- user-supplied FORTRAN 77 interpolation function, a pointer to which
- should previously have been stored in the static variable
- "ast_resample_FINTERP". */
-static void ast_resample_ukern1( double offset, const double params[],
- int flags, double *value ) {
- DECLARE_INTEGER(STATUS);
- int *status;
-
-/* Obtain the C status and then invoke the FORTRAN 77 interpolation
- function via the stored pointer. */
- status = astGetStatusPtr;
- STATUS = astStatus;
- ( *ast_resample_FINTERP )( DOUBLE_ARG(&offset),
- DOUBLE_ARRAY_ARG(params),
- INTEGER_ARG(&flags),
- DOUBLE_ARG(value),
- INTEGER_ARG(&STATUS) );
-
-/* Set the C status to the returned FORTRAN 77 status. */
- astSetStatus( STATUS );
-}
-
-/* FORTRAN interface functions. */
-/* ============================ */
-/* These functions implement the remainder of the FORTRAN interface. */
-
-F77_SUBROUTINE(ast_decompose)( INTEGER(THIS),
- INTEGER(MAP1),
- INTEGER(MAP2),
- LOGICAL(SERIES),
- INTEGER(INVERT1),
- INTEGER(INVERT2),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(MAP1)
- GENPTR_INTEGER(MAP2)
- GENPTR_LOGICAL(SERIES)
- GENPTR_INTEGER(INVERT1)
- GENPTR_INTEGER(INVERT2)
- AstMapping *map1;
- AstMapping *map2;
- int series;
-
- astAt( "AST_DECOMPOSE", NULL, 0 );
- astWatchSTATUS(
- astDecompose( astI2P( *THIS ), &map1, &map2, &series, INVERT1, INVERT2 );
- *MAP1 = astP2I( map1 );
- *MAP2 = astP2I( map2 );
- *SERIES = ( series )?F77_TRUE:F77_FALSE;
- )
-}
-
-F77_SUBROUTINE(ast_invert)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
-
- astAt( "AST_INVERT", NULL, 0 );
- astWatchSTATUS(
- astInvert( astI2P( *THIS ) );
- )
-}
-
-F77_LOGICAL_FUNCTION(ast_isamapping)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAMAPPING", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAMapping( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_linearapprox)( INTEGER(THIS),
- DOUBLE_ARRAY(LBND),
- DOUBLE_ARRAY(UBND),
- DOUBLE(TOL),
- DOUBLE_ARRAY(FIT),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_DOUBLE_ARRAY(LBND)
- GENPTR_DOUBLE_ARRAY(UBND)
- GENPTR_DOUBLE(TOL)
- GENPTR_DOUBLE_ARRAY(FIT)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_LINEARAPPROX", NULL, 0 );
- astWatchSTATUS(
- RESULT = astLinearApprox( astI2P( *THIS ), LBND, UBND, *TOL, FIT );
- )
- return RESULT;
-}
-
-F77_SUBROUTINE(ast_mapbox)( INTEGER(THIS),
- DOUBLE_ARRAY(LBND_IN),
- DOUBLE_ARRAY(UBND_IN),
- LOGICAL(FORWARD),
- INTEGER(COORD_OUT),
- DOUBLE(LBND_OUT),
- DOUBLE(UBND_OUT),
- DOUBLE_ARRAY(XL),
- DOUBLE_ARRAY(XU),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_DOUBLE_ARRAY(LBND_IN)
- GENPTR_DOUBLE_ARRAY(UBND_IN)
- GENPTR_LOGICAL(FORWARD)
- GENPTR_INTEGER(COORD_OUT)
- GENPTR_DOUBLE(LBND_OUT)
- GENPTR_DOUBLE(UBND_OUT)
- GENPTR_DOUBLE_ARRAY(XL)
- GENPTR_DOUBLE_ARRAY(XU)
- double lbnd_out;
- double ubnd_out;
-
- astAt( "AST_MAPBOX", NULL, 0 );
- astWatchSTATUS(
- astMapBox( astI2P( *THIS ), LBND_IN, UBND_IN, F77_ISTRUE( *FORWARD ),
- *COORD_OUT, &lbnd_out, &ubnd_out, XL, XU );
- *LBND_OUT = lbnd_out;
- *UBND_OUT = ubnd_out;
- )
-}
-
-/* AST_RESAMPLE<X> requires a function for each possible data type, so
- define it via a macro. */
-#define MAKE_AST_RESAMPLE(f,F,Ftype,X,Xtype) \
-F77_INTEGER_FUNCTION(ast_resample##f)( INTEGER(THIS), \
- INTEGER(NDIM_IN), \
- INTEGER_ARRAY(LBND_IN), \
- INTEGER_ARRAY(UBND_IN), \
- Ftype##_ARRAY(IN), \
- Ftype##_ARRAY(IN_VAR), \
- INTEGER(INTERP), \
- void (* FINTERP)(), \
- DOUBLE_ARRAY(PARAMS), \
- INTEGER(FLAGS), \
- DOUBLE(TOL), \
- INTEGER(MAXPIX), \
- Ftype(BADVAL), \
- INTEGER(NDIM_OUT), \
- INTEGER_ARRAY(LBND_OUT), \
- INTEGER_ARRAY(UBND_OUT), \
- INTEGER_ARRAY(LBND), \
- INTEGER_ARRAY(UBND), \
- Ftype##_ARRAY(OUT), \
- Ftype##_ARRAY(OUT_VAR), \
- INTEGER(STATUS) ) { \
- GENPTR_INTEGER(THIS) \
- GENPTR_INTEGER(NDIM_IN) \
- GENPTR_INTEGER_ARRAY(LBND_IN) \
- GENPTR_INTEGER_ARRAY(UBND_IN) \
- GENPTR_##Ftype##_ARRAY(IN) \
- GENPTR_##Ftype##_ARRAY(IN_VAR) \
- GENPTR_INTEGER(INTERP) \
- GENPTR_DOUBLE_ARRAY(PARAMS) \
- GENPTR_INTEGER(FLAGS) \
- GENPTR_DOUBLE(TOL) \
- GENPTR_INTEGER(MAXPIX) \
- GENPTR_##Ftype(BADVAL) \
- GENPTR_INTEGER(NDIM_OUT) \
- GENPTR_INTEGER_ARRAY(LBND_OUT) \
- GENPTR_INTEGER_ARRAY(UBND_OUT) \
- GENPTR_INTEGER_ARRAY(LBND) \
- GENPTR_INTEGER_ARRAY(UBND) \
- GENPTR_##Ftype##_ARRAY(OUT) \
- GENPTR_##Ftype##_ARRAY(OUT_VAR) \
- GENPTR_INTEGER(STATUS) \
-\
- void (* finterp)(); \
- Xtype *out_var; \
- const Xtype *in_var; \
- F77_INTEGER_TYPE RESULT; \
-\
- astAt( "AST_RESAMPLE"#F, NULL, 0 ); \
- astWatchSTATUS( \
-\
-/* If *INTERP is set to a value that requires a user-supplied \
- interpolation function, then store a pointer to the supplied \
- FORTRAN 77 version of this function and use the appropriate C \
- wrapper function (defined above) to invoke it. */ \
- if ( *INTERP == AST__UINTERP ) { \
- ast_resample_FINTERP = FINTERP; \
- finterp = (void (*)()) ast_resample_uinterp##X; \
- } else if ( *INTERP == AST__UKERN1 ) { \
- ast_resample_FINTERP = FINTERP; \
- finterp = (void (*)()) ast_resample_ukern1; \
- } else { \
- ast_resample_FINTERP = NULL; \
- finterp = NULL; \
- } \
-\
-/* If the AST__USEVAR flag is set, use the input and output variance \
- arrays, otherwise pass NULL pointers. */ \
- in_var = out_var = NULL; \
- if ( AST__USEVAR & *FLAGS ) { \
- in_var = (const Xtype *) IN_VAR; \
- out_var = (Xtype *) OUT_VAR; \
- } \
- RESULT = astResample##X( astI2P( *THIS ), *NDIM_IN, \
- LBND_IN, UBND_IN, (const Xtype *) IN, in_var, \
- *INTERP, finterp, PARAMS, *FLAGS, \
- *TOL, *MAXPIX, *BADVAL, \
- *NDIM_OUT, LBND_OUT, UBND_OUT, \
- LBND, UBND, (Xtype *) OUT, out_var ); \
- ) \
- return RESULT; \
-}
-
-/* Invoke the above macro to define a function for each data
- type. Include synonyms for some functions. */
-MAKE_AST_RESAMPLE(d,D,DOUBLE,D,double)
-MAKE_AST_RESAMPLE(r,R,REAL,F,float)
-MAKE_AST_RESAMPLE(i,I,INTEGER,I,int)
-MAKE_AST_RESAMPLE(ui,UI,INTEGER,UI,unsigned int)
-MAKE_AST_RESAMPLE(s,S,WORD,S,short int)
-MAKE_AST_RESAMPLE(us,US,UWORD,US,unsigned short int)
-MAKE_AST_RESAMPLE(w,W,WORD,S,short int)
-MAKE_AST_RESAMPLE(uw,UW,UWORD,US,unsigned short int)
-MAKE_AST_RESAMPLE(b,B,BYTE,B,signed char)
-MAKE_AST_RESAMPLE(ub,UB,UBYTE,UB,unsigned char)
-#undef MAKE_AST_RESAMPLE
-
-/* AST_REBIN<X> requires a function for each possible data type, so
- define it via a macro. */
-#define MAKE_AST_REBIN(f,F,Ftype,X,Xtype) \
-F77_SUBROUTINE(ast_rebin##f)( INTEGER(THIS), \
- DOUBLE(WLIM), \
- INTEGER(NDIM_IN), \
- INTEGER_ARRAY(LBND_IN), \
- INTEGER_ARRAY(UBND_IN), \
- Ftype##_ARRAY(IN), \
- Ftype##_ARRAY(IN_VAR), \
- INTEGER(INTERP), \
- DOUBLE_ARRAY(PARAMS), \
- INTEGER(FLAGS), \
- DOUBLE(TOL), \
- INTEGER(MAXPIX), \
- Ftype(BADVAL), \
- INTEGER(NDIM_OUT), \
- INTEGER_ARRAY(LBND_OUT), \
- INTEGER_ARRAY(UBND_OUT), \
- INTEGER_ARRAY(LBND), \
- INTEGER_ARRAY(UBND), \
- Ftype##_ARRAY(OUT), \
- Ftype##_ARRAY(OUT_VAR), \
- INTEGER(STATUS) ) { \
- GENPTR_INTEGER(THIS) \
- GENPTR_DOUBLE(WLIM) \
- GENPTR_INTEGER(NDIM_IN) \
- GENPTR_INTEGER_ARRAY(LBND_IN) \
- GENPTR_INTEGER_ARRAY(UBND_IN) \
- GENPTR_##Ftype##_ARRAY(IN) \
- GENPTR_##Ftype##_ARRAY(IN_VAR) \
- GENPTR_INTEGER(INTERP) \
- GENPTR_DOUBLE_ARRAY(PARAMS) \
- GENPTR_INTEGER(FLAGS) \
- GENPTR_DOUBLE(TOL) \
- GENPTR_INTEGER(MAXPIX) \
- GENPTR_##Ftype(BADVAL) \
- GENPTR_INTEGER(NDIM_OUT) \
- GENPTR_INTEGER_ARRAY(LBND_OUT) \
- GENPTR_INTEGER_ARRAY(UBND_OUT) \
- GENPTR_INTEGER_ARRAY(LBND) \
- GENPTR_INTEGER_ARRAY(UBND) \
- GENPTR_##Ftype##_ARRAY(OUT) \
- GENPTR_##Ftype##_ARRAY(OUT_VAR) \
- GENPTR_INTEGER(STATUS) \
-\
- Xtype *out_var; \
- const Xtype *in_var; \
-\
- astAt( "AST_REBIN"#F, NULL, 0 ); \
- astWatchSTATUS( \
-\
-/* If the AST__USEVAR flag is set, use the input and output variance \
- arrays, otherwise pass NULL pointers. */ \
- in_var = out_var = NULL; \
- if ( AST__USEVAR & *FLAGS ) { \
- in_var = (const Xtype *) IN_VAR; \
- out_var = (Xtype *) OUT_VAR; \
- } \
- astRebin##X( astI2P( *THIS ), *WLIM, *NDIM_IN, \
- LBND_IN, UBND_IN, (const Xtype *) IN, in_var, \
- *INTERP, PARAMS, *FLAGS, \
- *TOL, *MAXPIX, *BADVAL, \
- *NDIM_OUT, LBND_OUT, UBND_OUT, \
- LBND, UBND, (Xtype *) OUT, out_var ); \
- ) \
-}
-
-/* Invoke the above macro to define a function for each data
- type. Include synonyms for some functions. */
-MAKE_AST_REBIN(d,D,DOUBLE,D,double)
-MAKE_AST_REBIN(r,R,REAL,F,float)
-MAKE_AST_REBIN(i,I,INTEGER,I,int)
-#undef MAKE_AST_REBIN
-
-/* AST_REBINSEQ<X> requires a function for each possible data type, so
- define it via a macro. */
-#define MAKE_AST_REBINSEQ(f,F,Ftype,X,Xtype) \
-F77_SUBROUTINE(ast_rebinseq##f)( INTEGER(THIS), \
- DOUBLE(WLIM), \
- INTEGER(NDIM_IN), \
- INTEGER_ARRAY(LBND_IN), \
- INTEGER_ARRAY(UBND_IN), \
- Ftype##_ARRAY(IN), \
- Ftype##_ARRAY(IN_VAR), \
- INTEGER(INTERP), \
- DOUBLE_ARRAY(PARAMS), \
- INTEGER(FLAGS), \
- DOUBLE(TOL), \
- INTEGER(MAXPIX), \
- Ftype(BADVAL), \
- INTEGER(NDIM_OUT), \
- INTEGER_ARRAY(LBND_OUT), \
- INTEGER_ARRAY(UBND_OUT), \
- INTEGER_ARRAY(LBND), \
- INTEGER_ARRAY(UBND), \
- Ftype##_ARRAY(OUT), \
- Ftype##_ARRAY(OUT_VAR), \
- DOUBLE_ARRAY(WEIGHTS), \
- INTEGER(NUSED), \
- INTEGER(STATUS) ) { \
- GENPTR_INTEGER(THIS) \
- GENPTR_DOUBLE(WLIM) \
- GENPTR_INTEGER(NDIM_IN) \
- GENPTR_INTEGER_ARRAY(LBND_IN) \
- GENPTR_INTEGER_ARRAY(UBND_IN) \
- GENPTR_##Ftype##_ARRAY(IN) \
- GENPTR_##Ftype##_ARRAY(IN_VAR) \
- GENPTR_INTEGER(INTERP) \
- GENPTR_DOUBLE_ARRAY(PARAMS) \
- GENPTR_INTEGER(FLAGS) \
- GENPTR_DOUBLE(TOL) \
- GENPTR_INTEGER(MAXPIX) \
- GENPTR_##Ftype(BADVAL) \
- GENPTR_INTEGER(NDIM_OUT) \
- GENPTR_INTEGER_ARRAY(LBND_OUT) \
- GENPTR_INTEGER_ARRAY(UBND_OUT) \
- GENPTR_INTEGER_ARRAY(LBND) \
- GENPTR_INTEGER_ARRAY(UBND) \
- GENPTR_##Ftype##_ARRAY(OUT) \
- GENPTR_##Ftype##_ARRAY(OUT_VAR) \
- GENPTR_DOUBLE_ARRAY(WEIGHTS) \
- GENPTR_INTEGER(NUSED) \
- GENPTR_INTEGER(STATUS) \
-\
- Xtype *out_var; \
- const Xtype *in_var; \
-\
- astAt( "AST_REBINSEQ"#F, NULL, 0 ); \
- astWatchSTATUS( \
-\
-/* If the AST__USEVAR flag is set, use the input and output variance \
- arrays, otherwise pass NULL pointers. */ \
- in_var = out_var = NULL; \
- if ( AST__USEVAR & *FLAGS ) { \
- in_var = (const Xtype *) IN_VAR; \
- out_var = (Xtype *) OUT_VAR; \
- } \
-\
-/* If the AST__GENVAR flag is set, use the output variance \
- arrays, otherwise pass NULL pointers. */ \
- if ( AST__GENVAR & *FLAGS ) { \
- in_var = NULL; \
- out_var = (Xtype *) OUT_VAR; \
- } \
-\
- astRebinSeq##X( astI2P( *THIS ), *WLIM, *NDIM_IN, \
- LBND_IN, UBND_IN, (const Xtype *) IN, in_var, \
- *INTERP, PARAMS, *FLAGS, \
- *TOL, *MAXPIX, *BADVAL, \
- *NDIM_OUT, LBND_OUT, UBND_OUT, \
- LBND, UBND, (Xtype *) OUT, out_var, WEIGHTS, NUSED ); \
- ) \
-}
-
-/* Invoke the above macro to define a function for each data
- type. Include synonyms for some functions. */
-MAKE_AST_REBINSEQ(d,D,DOUBLE,D,double)
-MAKE_AST_REBINSEQ(r,R,REAL,F,float)
-MAKE_AST_REBINSEQ(i,I,INTEGER,I,int)
-#undef MAKE_AST_REBINSEQ
-
-F77_INTEGER_FUNCTION(ast_removeregions)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_INTEGER_TYPE(RESULT);
-
- astAt( "AST_REMOVEREGIONS", NULL, 0 );
- astWatchSTATUS(
- RESULT = astP2I( astRemoveRegions( astI2P( *THIS ) ) );
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_simplify)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_INTEGER_TYPE(RESULT);
-
- astAt( "AST_SIMPLIFY", NULL, 0 );
- astWatchSTATUS(
- RESULT = astP2I( astSimplify( astI2P( *THIS ) ) );
- )
- return RESULT;
-}
-
-F77_SUBROUTINE(ast_tran1)( INTEGER(THIS),
- INTEGER(NPOINT),
- DOUBLE(XIN),
- LOGICAL(FORWARD),
- DOUBLE(XOUT),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(NPOINT)
- GENPTR_DOUBLE(XIN)
- GENPTR_LOGICAL(FORWARD)
- GENPTR_DOUBLE(XOUT)
-
- astAt( "AST_TRAN1", NULL, 0 );
- astWatchSTATUS(
- astTran1( astI2P( *THIS ), *NPOINT, XIN, F77_ISTRUE( *FORWARD ), XOUT );
- )
-}
-
-F77_SUBROUTINE(ast_tran2)( INTEGER(THIS),
- INTEGER(NPOINT),
- DOUBLE(XIN),
- DOUBLE(YIN),
- LOGICAL(FORWARD),
- DOUBLE(XOUT),
- DOUBLE(YOUT),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(NPOINT)
- GENPTR_DOUBLE(XIN)
- GENPTR_DOUBLE(YIN)
- GENPTR_LOGICAL(FORWARD)
- GENPTR_DOUBLE(XOUT)
- GENPTR_DOUBLE(YOUT)
-
- astAt( "AST_TRAN2", NULL, 0 );
- astWatchSTATUS(
- astTran2( astI2P( *THIS ), *NPOINT, XIN, YIN,
- F77_ISTRUE( *FORWARD ), XOUT, YOUT );
- )
-}
-
-F77_SUBROUTINE(ast_trangrid)( INTEGER(THIS),
- INTEGER(NCOORD_IN),
- INTEGER_ARRAY(LBND),
- INTEGER_ARRAY(UBND),
- DOUBLE(TOL),
- INTEGER(MAXPIX),
- LOGICAL(FORWARD),
- INTEGER(NCOORD_OUT),
- INTEGER(OUTDIM),
- DOUBLE_ARRAY(OUT),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(NCOORD_IN)
- GENPTR_INTEGER_ARRAY(LBND)
- GENPTR_INTEGER_ARRAY(UBND)
- GENPTR_DOUBLE(TOL)
- GENPTR_INTEGER(MAXPIX)
- GENPTR_LOGICAL(FORWARD)
- GENPTR_INTEGER(NCOORD_OUT)
- GENPTR_INTEGER(OUTDIM)
- GENPTR_DOUBLE_ARRAY(OUT)
-
- astAt( "AST_TRANGRID", NULL, 0 );
- astWatchSTATUS(
- astTranGrid( astI2P( *THIS ), *NCOORD_IN, LBND, UBND, *TOL, *MAXPIX,
- F77_ISTRUE( *FORWARD ), *NCOORD_OUT, *OUTDIM, OUT );
- )
-}
-
-F77_SUBROUTINE(ast_trann)( INTEGER(THIS),
- INTEGER(NPOINT),
- INTEGER(NCOORD_IN),
- INTEGER(INDIM),
- DOUBLE_ARRAY(IN),
- LOGICAL(FORWARD),
- INTEGER(NCOORD_OUT),
- INTEGER(OUTDIM),
- DOUBLE_ARRAY(OUT),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(NPOINT)
- GENPTR_INTEGER(NCOORD_IN)
- GENPTR_INTEGER(INDIM)
- GENPTR_DOUBLE_ARRAY(IN)
- GENPTR_LOGICAL(FORWARD)
- GENPTR_INTEGER(NCOORD_OUT)
- GENPTR_INTEGER(OUTDIM)
- GENPTR_DOUBLE_ARRAY(OUT)
-
- astAt( "AST_TRANN", NULL, 0 );
- astWatchSTATUS(
- astTranN( astI2P( *THIS ), *NPOINT, *NCOORD_IN, *INDIM,
- (const double *)IN, F77_ISTRUE( *FORWARD ),
- *NCOORD_OUT, *OUTDIM, OUT );
- )
-}
-
-F77_DOUBLE_FUNCTION(ast_rate)( INTEGER(THIS),
- DOUBLE_ARRAY(AT),
- INTEGER(AX1),
- INTEGER(AX2),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(AX1)
- GENPTR_INTEGER(AX2)
- GENPTR_DOUBLE_ARRAY(AT)
- F77_DOUBLE_TYPE(RESULT);
-
- astAt( "AST_RATE", NULL, 0 );
- astWatchSTATUS(
- RESULT = astRate( astI2P( *THIS ), AT, *AX1, *AX2 );
- )
- return RESULT;
-}
-
-
-F77_SUBROUTINE(ast_mapsplit)( INTEGER(THIS),
- INTEGER(NIN),
- INTEGER_ARRAY(IN),
- INTEGER_ARRAY(OUT),
- INTEGER(MAP),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(NIN)
- GENPTR_INTEGER_ARRAY(IN)
- GENPTR_INTEGER_ARRAY(OUT)
- GENPTR_INTEGER(MAP)
- AstMapping *map;
-
- astAt( "AST_MAPSPLIT", NULL, 0 );
- astWatchSTATUS(
- astMapSplit( astI2P( *THIS ), *NIN, IN, OUT, &map );
- *MAP = astP2I( map );
- )
-}
-
diff --git a/ast-5.3-1/fmathmap.c b/ast-5.3-1/fmathmap.c
deleted file mode 100644
index eb21043..0000000
--- a/ast-5.3-1/fmathmap.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-*+
-* Name:
-* fmathmap.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST MathMap class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the MathMap class.
-
-* Routines Defined:
-* AST_ISAMATHMAP
-* AST_MATHMAP
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 3-SEP-1999 (RFWS):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "mathmap.h" /* C interface to the MathMap class */
-
-F77_LOGICAL_FUNCTION(ast_isamathmap)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAMATHMAP", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAMathMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_mathmap)( INTEGER(NIN),
- INTEGER(NOUT),
- INTEGER(NFWD),
- CHARACTER_ARRAY(FWD),
- INTEGER(NINV),
- CHARACTER_ARRAY(INV),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(FWD)
- TRAIL(INV)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(NIN)
- GENPTR_INTEGER(NOUT)
- GENPTR_INTEGER(NFWD)
- GENPTR_CHARACTER_ARRAY(FWD)
- GENPTR_INTEGER(NINV)
- GENPTR_CHARACTER_ARRAY(INV)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char **fwd;
- char **inv;
- char *options;
- int i;
-
- astAt( "AST_MATHMAP", NULL, 0 );
- astWatchSTATUS(
- fwd = astStringArray( FWD, *NFWD, FWD_length );
- inv = astStringArray( INV, *NINV, INV_length );
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astMathMap( *NIN, *NOUT,
- *NFWD, (const char **) fwd,
- *NINV, (const char **) inv,
- "%s", options ) );
- astFree( options );
- astFree( inv );
- astFree( fwd );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fmatrixmap.c b/ast-5.3-1/fmatrixmap.c
deleted file mode 100644
index fd33760..0000000
--- a/ast-5.3-1/fmatrixmap.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
-*+
-* Name:
-* fmatrixmap.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST MatrixMap class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the MatrixMap class.
-
-* Routines Defined:
-* AST_ISAMATRIXMAP
-* AST_MATRIXMAP
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-
-* History:
-* 14-NOV-1996 (DSB):
-* Original version.
-* 3-JUN-1997 (DSB):
-* AST_MTRROT and AST_MTRMULT removed.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "matrixmap.h" /* C interface to the MatrixMap class */
-
-F77_LOGICAL_FUNCTION(ast_isamatrixmap)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAMATRIXMAP", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAMatrixMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_matrixmap)( INTEGER(NIN),
- INTEGER(NOUT),
- INTEGER(FORM),
- DOUBLE_ARRAY(MATRIX),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(NIN)
- GENPTR_INTEGER(NOUT)
- GENPTR_INTEGER(FORM)
- GENPTR_DOUBLE_ARRAY(MATRIX)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_MATRIXMAP", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astMatrixMap( *NIN, *NOUT, *FORM, MATRIX,
- "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fnormmap.c b/ast-5.3-1/fnormmap.c
deleted file mode 100644
index 2deafef..0000000
--- a/ast-5.3-1/fnormmap.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
-*+
-* Name:
-* fnormmap.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST NormMap class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the NormMap class.
-
-* Routines Defined:
-* AST_ISANORMMAP
-* AST_NORMMAP
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S.Berry (Starlink)
-
-* History:
-* 11-JUL-2004 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "normmap.h" /* C interface to the NormMap class */
-
-F77_LOGICAL_FUNCTION(ast_isanormmap)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astWatchSTATUS(
- astAt( "AST_ISANORMMAP", NULL, 0 );
- RESULT = astIsANormMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_normmap)( INTEGER(FRAME),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(FRAME)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- int i;
- char *options;
-
- astAt( "AST_NORMMAP", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astNormMap( astI2P( *FRAME ), "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fnullregion.c b/ast-5.3-1/fnullregion.c
deleted file mode 100644
index 9193bcc..0000000
--- a/ast-5.3-1/fnullregion.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-*+
-* Name:
-* fnullregion.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST NullRegion class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the NullRegion class.
-
-* Routines Defined:
-* AST_ISANULLREGION
-* AST_NULLREGION
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 12-OCT-2004 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "nullregion.h" /* C interface to the NullRegion class */
-
-
-F77_LOGICAL_FUNCTION(ast_isanullregion)( INTEGER(THIS), INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISANULLREGION", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsANullRegion( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_nullregion)( INTEGER(FRAME),
- INTEGER(UNC),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(FRAME)
- GENPTR_INTEGER(UNC)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_NULLREGION", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
-
- RESULT = astP2I( astNullRegion( astI2P( *FRAME ), astI2P( *UNC ), "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fobject.c b/ast-5.3-1/fobject.c
deleted file mode 100644
index 1145426..0000000
--- a/ast-5.3-1/fobject.c
+++ /dev/null
@@ -1,594 +0,0 @@
-/*
-*+
-* Name:
-* fobject.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST Object class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the Object class.
-
-* Routines Defined:
-* AST_ANNUL
-* AST_BEGIN
-* AST_CLEAR
-* AST_CLONE
-* AST_COPY
-* AST_DELETE
-* AST_END
-* AST_ESCAPES
-* AST_EXEMPT
-* AST_EXPORT
-* AST_GET(C,D,I,L,R)
-* AST_ISAOBJECT
-* AST_NULL
-* AST_SET
-* AST_SET(C,D,I,L,R)
-* AST_SHOW
-* AST_VERSION
-* AST_LISTISSUED (only if macro DEBUG is defined)
-* AST_SETWATCHID (only if macro DEBUG is defined)
-* AST_TUNE
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 20-JUN-1996 (RFWS):
-* Original version.
-* 9-SEP-1996 (RFWS):
-* Added AST_SHOW.
-* 11-DEC-1996 (RFWS):
-* Added AST_NULL.
-* 14-JUL-1997 (RFWS):
-* Add AST_EXEMPT function.
-* 30-APR-2003 (DSB):
-* Add AST_VERSION function.
-* 7-FEB-2004 (DSB):
-* Add AST_ESCAPES function.
-* 27-JAN-2005 (DSB):
-* Added AST_LISTISSUED and AST_SETWATCHID so that DEBUG facilities
-* can be used from fortran.
-* 7-FEB-2006 (DSB):
-* Added AST_TUNE.
-* 1-MAR-2006 (DSB):
-* Replace astSetPermMap within DEBUG blocks by astBeginPM/astEndPM.
-*-
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-
-/* Configuration results. */
-/* ---------------------- */
-#include <config.h>
-
-/* AST headers */
-/* ----------- */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "object.h" /* C interface to the Object class */
-
-F77_SUBROUTINE(ast_annul)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
-
- astAt( "AST_ANNUL", NULL, 0 );
- astWatchSTATUS(
- *THIS = astP2I( astAnnul( astI2P( *THIS ) ) );
- )
-}
-
-F77_SUBROUTINE(ast_begin)( INTEGER(STATUS) ) {
-
- astAt( "AST_BEGIN", NULL, 0 );
- astWatchSTATUS(
- int dummy = *status; /* Avoid "unused variable 'status'" messages */
- *status = dummy;
- astBegin;
- )
-}
-
-F77_SUBROUTINE(ast_clear)( INTEGER(THIS),
- CHARACTER(ATTRIB),
- INTEGER(STATUS)
- TRAIL(ATTRIB) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(ATTRIB)
- char *attrib;
-
- astAt( "AST_CLEAR", NULL, 0 );
- astWatchSTATUS(
- attrib = astString( ATTRIB, ATTRIB_length );
- astClear( astI2P( *THIS ), attrib );
- astFree( attrib );
- )
-}
-
-F77_INTEGER_FUNCTION(ast_clone)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_INTEGER_TYPE(RESULT);
-
- astAt( "AST_CLONE", NULL, 0 );
- astWatchSTATUS(
- RESULT = astP2I( astClone( astI2P( *THIS ) ) );
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_version)( ) {
- int status_value = 0;
- int *STATUS = &status_value;
- int *status = &status_value;
- astAt( "AST_VERSION", NULL, 0 );
- return astVersion;
-}
-
-F77_INTEGER_FUNCTION(ast_escapes)( INTEGER(NEWVAL),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(NEWVAL)
- F77_INTEGER_TYPE(RESULT);
-
- astAt( "AST_ESCAPES", NULL, 0 );
- astWatchSTATUS(
- RESULT = astEscapes( *NEWVAL );
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_copy)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_INTEGER_TYPE(RESULT);
-
- astAt( "AST_COPY", NULL, 0 );
- astWatchSTATUS(
- RESULT = astP2I( astCopy( astI2P( *THIS ) ) );
- )
- return RESULT;
-}
-
-F77_SUBROUTINE(ast_delete)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
-
- astAt( "AST_DELETE", NULL, 0 );
- astWatchSTATUS(
- *THIS = astP2I( astDelete( astI2P( *THIS ) ) );
- )
-}
-
-F77_SUBROUTINE(ast_end)( INTEGER(STATUS) ) {
-
- astAt( "AST_END", NULL, 0 );
- astWatchSTATUS(
- astEnd;
- )
-}
-
-F77_SUBROUTINE(ast_exempt)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
-
- astAt( "AST_EXEMPT", NULL, 0 );
- astWatchSTATUS(
- astExempt( astI2P( *THIS ) );
- )
-}
-
-F77_SUBROUTINE(ast_export)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
-
- astAt( "AST_EXPORT", NULL, 0 );
- astWatchSTATUS(
- astExport( astI2P( *THIS ) );
- )
-}
-
-#define MAKE_GETX(name,code,TYPE,CODE,type) \
-F77_##TYPE##_FUNCTION(ast_get##code)( INTEGER(THIS), \
- CHARACTER(ATTRIB), \
- INTEGER(STATUS) \
- TRAIL(ATTRIB) ) { \
- GENPTR_INTEGER(THIS) \
- GENPTR_CHARACTER(ATTRIB) \
- F77_##TYPE##_TYPE(RESULT); \
- char *attrib; \
-\
- astAt( name, NULL, 0 ); \
- astWatchSTATUS( \
- attrib = astString( ATTRIB, ATTRIB_length ); \
- RESULT = astGet##CODE( astI2P( *THIS ), attrib ); \
- astFree( attrib ); \
- ) \
- return RESULT; \
-}
-
-MAKE_GETX("AST_GETD",d,DOUBLE,D,double)
-MAKE_GETX("AST_GETI",i,INTEGER,L,long)
-MAKE_GETX("AST_GETR",r,REAL,D,double)
-
-/* NO_CHAR_FUNCTION indicates that the f77.h method of returning a
- character result doesn't work, so add an extra argument instead and
- wrap this function up in a normal FORTRAN 77 function (in the file
- object.f). */
-#if NO_CHAR_FUNCTION
-F77_SUBROUTINE(ast_getc_a)( CHARACTER(RESULT),
-#else
-F77_SUBROUTINE(ast_getc)( CHARACTER_RETURN_VALUE(RESULT),
-#endif
- INTEGER(THIS),
- CHARACTER(ATTRIB),
- INTEGER(STATUS)
-#if NO_CHAR_FUNCTION
- TRAIL(RESULT)
-#endif
- TRAIL(ATTRIB) ) {
- GENPTR_CHARACTER(RESULT)
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(ATTRIB)
- char *attrib;
- const char *result;
- int i;
-
- astAt( "AST_GETC", NULL, 0 );
- astWatchSTATUS(
- attrib = astString( ATTRIB, ATTRIB_length );
- result = astGetC( astI2P( *THIS ), attrib );
- i = 0;
- if ( astOK ) { /* Copy result */
- for ( ; result[ i ] && i < RESULT_length; i++ ) {
- RESULT[ i ] = result[ i ];
- }
- }
- while ( i < RESULT_length ) RESULT[ i++ ] = ' '; /* Pad with blanks */
- astFree( attrib );
- )
-}
-
-F77_LOGICAL_FUNCTION(ast_getl)( INTEGER(THIS),
- CHARACTER(ATTRIB),
- INTEGER(STATUS)
- TRAIL(ATTRIB) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(ATTRIB)
- F77_LOGICAL_TYPE(RESULT);
- char *attrib;
-
- astAt( "AST_GETL", NULL, 0 );
- astWatchSTATUS(
- attrib = astString( ATTRIB, ATTRIB_length );
- RESULT = astGetL( astI2P( *THIS ), attrib ) ? F77_TRUE : F77_FALSE;
- astFree( attrib );
- )
- return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_isaobject)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAOBJECT", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAObject( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_SUBROUTINE(ast_null)( void ) {}
-
-/* Omit the C variable length argument list here. */
-F77_SUBROUTINE(ast_set)( INTEGER(THIS),
- CHARACTER(SETTING),
- INTEGER(STATUS)
- TRAIL(SETTING) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(SETTING)
- char *setting;
- int i;
-
- astAt( "AST_SET", NULL, 0 );
- astWatchSTATUS(
- setting = astString( SETTING, SETTING_length );
-
-/* Change ',' to '\n' (which is what astSet normally does to its second
- argument internally to separate the fields). This then allows "setting"
- to be provided as an additional string value to be formatted using "%s".
- This avoids interpretation of its contents (e.g. '%') as C format
- specifiers. */
- if ( astOK ) {
- for ( i = 0; setting[ i ]; i++ ) {
- if ( setting[ i ] == ',' ) setting[ i ] = '\n';
- }
- }
- astSet( astI2P( *THIS ), "%s", setting );
- astFree( setting );
- )
-}
-
-#define MAKE_SETX(name,code,TYPE,CODE,type) \
-F77_SUBROUTINE(ast_set##code)( INTEGER(THIS), \
- CHARACTER(ATTRIB), \
- TYPE(VALUE), \
- INTEGER(STATUS) \
- TRAIL(ATTRIB) ) { \
- GENPTR_INTEGER(THIS) \
- GENPTR_CHARACTER(ATTRIB) \
- GENPTR_##TYPE(VALUE) \
- char *attrib; \
-\
- astAt( name, NULL, 0 ); \
- astWatchSTATUS( \
- attrib = astString( ATTRIB, ATTRIB_length ); \
- astSet##CODE( astI2P( *THIS ), attrib, *VALUE ); \
- astFree( attrib ); \
- ) \
-}
-
-MAKE_SETX("AST_SETD",d,DOUBLE,D,double)
-MAKE_SETX("AST_SETR",r,REAL,D,double)
-MAKE_SETX("AST_SETI",i,INTEGER,L,long)
-
-F77_SUBROUTINE(ast_setc)( INTEGER(THIS),
- CHARACTER(ATTRIB),
- CHARACTER(VALUE),
- INTEGER(STATUS)
- TRAIL(ATTRIB)
- TRAIL(VALUE) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(ATTRIB)
- GENPTR_CHARACTER(VALUE)
- char *attrib, *value;
-
- astAt( "AST_SETC", NULL, 0 );
- astWatchSTATUS(
- attrib = astString( ATTRIB, ATTRIB_length );
- value = astString( VALUE, VALUE_length );
- astSetC( astI2P( *THIS ), attrib, value );
- astFree( attrib );
- astFree( value );
- )
-}
-
-F77_SUBROUTINE(ast_setl)( INTEGER(THIS),
- CHARACTER(ATTRIB),
- LOGICAL(VALUE),
- INTEGER(STATUS)
- TRAIL(ATTRIB) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(ATTRIB)
- GENPTR_LOGICAL(VALUE)
- char *attrib;
-
- astAt( "AST_SETL", NULL, 0 );
- astWatchSTATUS(
- attrib = astString( ATTRIB, ATTRIB_length );
- astSetI( astI2P( *THIS ), attrib, F77_ISTRUE( *VALUE ) ? 1 : 0 );
- astFree( attrib );
- )
-}
-
-F77_SUBROUTINE(ast_show)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
-
- astAt( "AST_SHOW", NULL, 0 );
- astWatchSTATUS(
- astShow( astI2P( *THIS ) );
- )
-}
-
-F77_LOGICAL_FUNCTION(ast_test)( INTEGER(THIS),
- CHARACTER(ATTRIB),
- INTEGER(STATUS)
- TRAIL(ATTRIB) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(ATTRIB)
- F77_LOGICAL_TYPE(RESULT);
- char *attrib;
-
- astAt( "AST_TEST", NULL, 0 );
- astWatchSTATUS(
- attrib = astString( ATTRIB, ATTRIB_length );
- RESULT = astTest( astI2P( *THIS ), attrib ) ? F77_TRUE : F77_FALSE;
- astFree( attrib );
- )
- return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_same)( INTEGER(THIS),
- INTEGER(THAT),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(THAT)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_SAME", NULL, 0 );
- astWatchSTATUS(
- RESULT = astSame( astI2P( *THIS ), astI2P( *THAT ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-
-#ifdef MEM_DEBUG
-
-F77_SUBROUTINE(ast_beginpm)( void ) {
- int status = 0;
- astBeginPM_( &status );
-}
-
-F77_SUBROUTINE(ast_endpm)( void ) {
- int status = 0;
- astEndPM_( &status );
-}
-
-F77_SUBROUTINE(ast_activememory)( CHARACTER(TEXT)
- TRAIL(TEXT) ) {
- GENPTR_CHARACTER(TEXT)
- char *text;
- int status_value;
- int *status = &status_value;
- *status = 0;
- astBeginPM;
- text = astString( TEXT, TEXT_length );
- astEndPM;
- astActiveMemory( text );
- astFree( text );
-}
-
-F77_SUBROUTINE(ast_watchmemory)( INTEGER(ID) ) {
- GENPTR_INTEGER(ID)
- astWatchMemory( *ID );
-}
-
-F77_SUBROUTINE(ast_flushmemory)( INTEGER(LEAK) ) {
- GENPTR_INTEGER(LEAK)
- int status = 0;
- astFlushMemory_( *LEAK, &status );
-}
-
-#else
-
-F77_SUBROUTINE(ast_activememory)( CHARACTER(TEXT)
- TRAIL(TEXT) ) {
- GENPTR_CHARACTER(TEXT)
-}
-
-F77_SUBROUTINE(ast_watchmemory)( INTEGER(ID) ) {
- GENPTR_INTEGER(ID)
-}
-
-F77_SUBROUTINE(ast_flushmemory)( INTEGER(LEAK) ) {
- GENPTR_INTEGER(LEAK)
-}
-
-F77_SUBROUTINE(ast_beginpm)( void ) {
-}
-
-F77_SUBROUTINE(ast_endpm)( void ) {
-}
-
-
-
-
-#endif
-
-
-F77_INTEGER_FUNCTION(ast_tune)( CHARACTER(NAME),
- INTEGER(VALUE),
- INTEGER(STATUS)
- TRAIL(NAME) ) {
- GENPTR_INTEGER(VALUE)
- GENPTR_CHARACTER(NAME)
- F77_INTEGER_TYPE(RESULT);
- char *name;
-
- astAt( "AST_TUNE", NULL, 0 );
- astWatchSTATUS(
- name = astString( NAME, NAME_length );
- RESULT = astTune( name, *VALUE );
- name = astFree( name );
- )
- return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_chrsub)( CHARACTER(TEST),
- CHARACTER(PATTERN),
- CHARACTER(RESULT),
- INTEGER(STATUS)
- TRAIL(TEST)
- TRAIL(PATTERN)
- TRAIL(RESULT) ) {
- GENPTR_CHARACTER(TEST)
- GENPTR_CHARACTER(PATTERN)
- GENPTR_CHARACTER(RESULT)
- F77_LOGICAL_TYPE(MATCH);
-
- char *test, *pattern, *result;
- int i;
-
- astAt( "AST_CHRSUB", NULL, 0 );
- astWatchSTATUS(
- test = astString( TEST, TEST_length );
- pattern = astString( PATTERN, PATTERN_length );
-
- if( pattern ) {
- test[ astChrLen( test ) ] = 0;
- pattern[ astChrLen( pattern ) ] = 0;
- }
-
- result = astChrSub( test, pattern, NULL, 0 );
-
- i = 0;
- if( result ) {
- MATCH = F77_TRUE;
- for ( ; result[ i ] && i < RESULT_length; i++ ) {
- RESULT[ i ] = result[ i ];
- }
- result = astFree( result );
- } else {
- MATCH = F77_FALSE;
- }
- while ( i < RESULT_length ) RESULT[ i++ ] = ' '; /* Pad with blanks */
-
- test = astFree( test );
- pattern = astFree( pattern );
- )
- return MATCH;
-}
-
-
-F77_LOGICAL_FUNCTION(ast_equal)( INTEGER(THIS),
- INTEGER(THAT),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(THAT)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_EQUAL", NULL, 0 );
- astWatchSTATUS(
- RESULT = astEqual( astI2P( *THIS ), astI2P( *THAT ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-
-
diff --git a/ast-5.3-1/fpcdmap.c b/ast-5.3-1/fpcdmap.c
deleted file mode 100644
index 9fd5659..0000000
--- a/ast-5.3-1/fpcdmap.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
-*+
-* Name:
-* fpcdmap.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST PcdMap class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the PcdMap class.
-
-* Routines Defined:
-* AST_ISAPCDMAP
-* AST_PCDMAP
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 19-MAY-1999 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "pcdmap.h" /* C interface to the PcdMap class */
-
-F77_LOGICAL_FUNCTION(ast_isapcdmap)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAPCDMAP", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAPcdMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_pcdmap)( DOUBLE(DISCO),
- DOUBLE_ARRAY(PCDCEN),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_DOUBLE(DISCO)
- GENPTR_DOUBLE_ARRAY(PCDCEN)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_PCDMAP", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astPcdMap( *DISCO, PCDCEN, "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fpermmap.c b/ast-5.3-1/fpermmap.c
deleted file mode 100644
index a7a3d49..0000000
--- a/ast-5.3-1/fpermmap.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
-*+
-* Name:
-* fpermmap.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST PermMap class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the PermMap class.
-
-* Routines Defined:
-* AST_ISAPERMMAP
-* AST_PERMMAP
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 26-SEP-1996 (RFWS):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "permmap.h" /* C interface to the PermMap class */
-
-F77_LOGICAL_FUNCTION(ast_isapermmap)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAPERMMAP", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAPermMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_permmap)( INTEGER(NIN),
- INTEGER_ARRAY(INPERM),
- INTEGER(NOUT),
- INTEGER_ARRAY(OUTPERM),
- DOUBLE_ARRAY(CONSTANT),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(NIN)
- GENPTR_INTEGER_ARRAY(INPERM)
- GENPTR_INTEGER(NOUT)
- GENPTR_INTEGER_ARRAY(OUTPERM)
- GENPTR_DOUBLE_ARRAY(CONSTANT)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- int i;
- char *options;
-
- astAt( "AST_PERMMAP", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astPermMap( *NIN, INPERM, *NOUT, OUTPERM, CONSTANT,
- "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fplot.c b/ast-5.3-1/fplot.c
deleted file mode 100644
index 912655b..0000000
--- a/ast-5.3-1/fplot.c
+++ /dev/null
@@ -1,627 +0,0 @@
-/*
-*+
-* Name:
-* fplot.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST Plot class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the Plot class.
-
-* Routines Defined:
-* AST_BORDER
-* AST_BOUNDINGBOX
-* AST_CLIP
-* AST_CURVE
-* AST_GENCURVE
-* AST_GRID
-* AST_GRIDLINE
-* AST_ISAPLOT
-* AST_MARK
-* AST_PLOT
-* AST_POLYCURVE
-* AST_TEXT
-* AST_GRFSET
-* AST_GRFPUSH
-* AST_GRFPOP
-* AST_STRIPESCAPES
-* AST_GETGRFCONTEXT
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2007 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-
-* History:
-* 23-OCT-1996 (DSB):
-* Original version.
-* 14-NOV-1996 (DSB):
-* Method names shortened. CrvBreak removed.
-* 21-NOV-1996 (DSB):
-* Method names changed, CLIP argument NBND removed.
-* 18-DEC-1996 (DSB):
-* Argument UP changed to single precision and NCOORD removed
-* in AST_TEXT.
-* 11-AUG-1998 (DSB):
-* Added AST_POLYCURVE.
-* 9-JAN-2001 (DSB):
-* Change argument "in" for astMark and astPolyCurve from type
-* "const double (*)[]" to "const double *".
-* 13-JUN-2001 (DSB):
-* Modified to add support for astGenCurve, astGrfSet, astGrfPop,
-* astGrfPush and EXTERNAL grf functions.
-* 14-AUG-2002 (DSB):
-* Added AST_BOUNDINGBOX.
-* 8-JAN-2003 (DSB):
-* Include "string.h".
-* 10-JUL-2006 (DSB):
-* Add AST_STRIPESCAPES
-* 21-JUN-2007 (DSB):
-* - Avoid use of protected astGetGrfContext function.
-* - Change data type of GrfContext from integer to AST Object pointer.
-* 29-JUN-2007 (DSB):
-* Added astGetGrfCOntext and removed astSetGrfContext.
-* 30-AUG-2007 (DSB):
-* Use astGrfConID to get the identifier for the graphics context
-* KeyMap.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-#define MXSTRLEN 80 /* String length at which truncation starts
- within pgqtxt and pgptxt. */
-/* Header files. */
-/* ============= */
-#include "string.h"
-#include "ast_err.h" /* AST error codes */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "plot.h" /* C interface to the Plot class */
-#include "grf.h" /* Low-level graphics interface */
-
-/* Prototypes for external functions. */
-/* ================================== */
-/* This is the null function defined by the FORTRAN interface in
-fobject.c. */
-F77_SUBROUTINE(ast_null)( void );
-
-static int FGAttrWrapper( AstPlot *, int, double, double *, int );
-static int FGFlushWrapper( AstPlot * );
-static int FGLineWrapper( AstPlot *, int, const float *, const float * );
-static int FGMarkWrapper( AstPlot *, int, const float *, const float *, int );
-static int FGTextWrapper( AstPlot *, const char *, float, float, const char *, float, float );
-static int FGTxExtWrapper( AstPlot *, const char *, float, float, const char *, float, float, float *, float * );
-static int FGCapWrapper( AstPlot *, int, int );
-static int FGQchWrapper( AstPlot *, float *, float * );
-static int FGScalesWrapper( AstPlot *, float *, float * );
-
-F77_LOGICAL_FUNCTION(ast_isaplot)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAPLOT", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAPlot( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_plot)( INTEGER(FRAME),
- REAL_ARRAY(GRAPHBOX),
- DOUBLE_ARRAY(BASEBOX),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(FRAME)
- GENPTR_REAL_ARRAY(GRAPHBOX)
- GENPTR_DOUBLE_ARRAY(BASEBOX)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_PLOT", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astPlot( astI2P( *FRAME ), GRAPHBOX, BASEBOX,
- "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_border)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_BORDER", NULL, 0 );
- astWatchSTATUS(
- RESULT = astBorder( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_SUBROUTINE(ast_boundingbox)( INTEGER(THIS),
- REAL_ARRAY(LBND),
- REAL_ARRAY(UBND),
- INTEGER(STATUS) ){
- GENPTR_INTEGER(THIS)
- GENPTR_REAL_ARRAY(LBND)
- GENPTR_REAL_ARRAY(UBND)
-
- astAt( "AST_BOUNDINGBOX", NULL, 0 );
- astWatchSTATUS(
- astBoundingBox( astI2P( *THIS ), LBND, UBND );
- )
-}
-
-F77_SUBROUTINE(ast_clip)( INTEGER(THIS),
- INTEGER(IFRAME),
- DOUBLE_ARRAY(LBND),
- DOUBLE_ARRAY(UBND),
- INTEGER(STATUS) ){
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(IFRAME)
- GENPTR_DOUBLE_ARRAY(LBND)
- GENPTR_DOUBLE_ARRAY(UBND)
-
- astAt( "AST_CLIP", NULL, 0 );
- astWatchSTATUS(
- astClip( astI2P( *THIS ), *IFRAME, LBND, UBND );
- )
-}
-
-F77_SUBROUTINE(ast_gridline)( INTEGER(THIS),
- INTEGER(AXIS),
- DOUBLE_ARRAY(START),
- DOUBLE(LENGTH),
- INTEGER(STATUS) ){
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(AXIS)
- GENPTR_DOUBLE_ARRAY(START)
- GENPTR_DOUBLE(LENGTH)
-
- astAt( "AST_GRIDLINE", NULL, 0 );
- astWatchSTATUS(
- astGridLine( astI2P( *THIS ), *AXIS, START, *LENGTH );
- )
-}
-
-F77_SUBROUTINE(ast_curve)( INTEGER(THIS),
- DOUBLE_ARRAY(START),
- DOUBLE_ARRAY(FINISH),
- INTEGER(STATUS) ){
- GENPTR_INTEGER(THIS)
- GENPTR_DOUBLE_ARRAY(START)
- GENPTR_DOUBLE_ARRAY(FINISH)
-
- astAt( "AST_CURVE", NULL, 0 );
- astWatchSTATUS(
- astCurve( astI2P( *THIS ), START, FINISH );
- )
-}
-
-F77_SUBROUTINE(ast_grid)( INTEGER(THIS),
- INTEGER(STATUS) ){
- GENPTR_INTEGER(THIS)
-
- astAt( "AST_GRID", NULL, 0 );
- astWatchSTATUS(
- astGrid( astI2P( *THIS ) );
- )
-}
-
-F77_SUBROUTINE(ast_mark)( INTEGER(THIS),
- INTEGER(NMARK),
- INTEGER(NCOORD),
- INTEGER(INDIM),
- DOUBLE_ARRAY(IN),
- INTEGER(TYPE),
- INTEGER(STATUS) ){
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(NMARK)
- GENPTR_INTEGER(NCOORD)
- GENPTR_INTEGER(INDIM)
- GENPTR_DOUBLE_ARRAY(IN)
- GENPTR_INTEGER(TYPE)
-
- astAt( "AST_MARK", NULL, 0 );
- astWatchSTATUS(
- astMark( astI2P( *THIS ), *NMARK, *NCOORD, *INDIM,
- (const double *)IN, *TYPE );
- )
-}
-
-F77_SUBROUTINE(ast_polycurve)( INTEGER(THIS),
- INTEGER(NPOINT),
- INTEGER(NCOORD),
- INTEGER(INDIM),
- DOUBLE_ARRAY(IN),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(NPOINT)
- GENPTR_INTEGER(NCOORD)
- GENPTR_INTEGER(INDIM)
- GENPTR_DOUBLE_ARRAY(IN)
-
- astAt( "AST_POLYCURVE", NULL, 0 );
- astWatchSTATUS(
- astPolyCurve( astI2P( *THIS ), *NPOINT, *NCOORD, *INDIM,
- (const double *)IN );
- )
-}
-
-F77_SUBROUTINE(ast_gencurve)( INTEGER(THIS),
- INTEGER(MAP),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(MAP)
-
- astAt( "AST_GENCURVE", NULL, 0 );
- astWatchSTATUS(
- astGenCurve( astI2P( *THIS ), astI2P( *MAP ) );
- )
-}
-
-F77_SUBROUTINE(ast_text)( INTEGER(THIS),
- CHARACTER(TEXT),
- DOUBLE_ARRAY(POS),
- REAL_ARRAY(UP),
- CHARACTER(JUST),
- INTEGER(STATUS)
- TRAIL(TEXT)
- TRAIL(JUST) ){
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(TEXT)
- GENPTR_DOUBLE_ARRAY(POS)
- GENPTR_REAL_ARRAY(UP)
- GENPTR_CHARACTER(JUST)
- char *text, *just;
-
- astAt( "AST_TEXT", NULL, 0 );
- astWatchSTATUS(
- text = astString( TEXT, TEXT_length );
- just = astString( JUST, JUST_length );
- astText( astI2P( *THIS ), text, POS, UP, just );
- (void) astFree( (void *) text );
- (void) astFree( (void *) just );
- )
-}
-
-F77_SUBROUTINE(ast_grfpush)( INTEGER(THIS), INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- astAt( "AST_GRFPUSH", NULL, 0 );
- astWatchSTATUS(
- astGrfPush( astI2P( *THIS ) );
- )
-}
-
-F77_SUBROUTINE(ast_grfpop)( INTEGER(THIS), INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- astAt( "AST_GRFPOP", NULL, 0 );
- astWatchSTATUS(
- astGrfPop( astI2P( *THIS ) );
- )
-}
-
-F77_SUBROUTINE(ast_grfset)( INTEGER(THIS), CHARACTER(NAME),
- AstGrfFun FUN, INTEGER(STATUS)
- TRAIL(NAME) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(NAME)
- char *name;
- AstGrfFun fun;
- const char *class; /* Object class */
- const char *method; /* Current method */
- int ifun; /* Index into grf function list */
- AstGrfWrap wrapper; /* Wrapper function for C Grf routine*/
-
- method = "AST_GRFSET";
- class = "Plot";
-
- astAt( method, NULL, 0 );
- astWatchSTATUS(
-
-/* Set the function pointer to NULL if a pointer to
- the null routine AST_NULL has been supplied. */
- fun = FUN;
- if ( fun == (AstGrfFun) F77_EXTERNAL_NAME(ast_null) ) {
- fun = NULL;
- }
-
- name = astString( NAME, NAME_length );
- astGrfSet( astI2P( *THIS ), name, fun );
-
- ifun = astGrfFunID( name, method, class );
-
- if( ifun == AST__GATTR ) {
- wrapper = (AstGrfWrap) FGAttrWrapper;
-
- } else if( ifun == AST__GFLUSH ) {
- wrapper = (AstGrfWrap) FGFlushWrapper;
-
- } else if( ifun == AST__GLINE ) {
- wrapper = (AstGrfWrap) FGLineWrapper;
-
- } else if( ifun == AST__GMARK ) {
- wrapper = (AstGrfWrap) FGMarkWrapper;
-
- } else if( ifun == AST__GTEXT ) {
- wrapper = (AstGrfWrap) FGTextWrapper;
-
- } else if( ifun == AST__GCAP ) {
- wrapper = (AstGrfWrap) FGCapWrapper;
-
- } else if( ifun == AST__GTXEXT ) {
- wrapper = (AstGrfWrap) FGTxExtWrapper;
-
- } else if( ifun == AST__GQCH ) {
- wrapper = (AstGrfWrap) FGQchWrapper;
-
- } else if( ifun == AST__GSCALES ) {
- wrapper = (AstGrfWrap) FGScalesWrapper;
-
- } else {
- wrapper = (AstGrfWrap) FGFlushWrapper;
- if( astOK ) astError( AST__INTER, "%s(%s): AST internal programming "
- "error - Grf function id %d not yet supported.", status,
- method, class, ifun );
- }
- astGrfWrapper( astI2P( *THIS ), name, wrapper );
- )
-}
-
-static int FGAttrWrapper( AstPlot *this, int attr, double value,
- double *old_value, int prim ) {
- DECLARE_DOUBLE(OLDVAL);
- int ret;
- F77_INTEGER_TYPE(GRFCON);
- int *status = astGetStatusPtr;
-
- if ( !astOK ) return 0;
-
- GRFCON = astP2I( astGrfConID( this ) );
- ret = ( *(int (*)( INTEGER(grfcon), INTEGER(attr), DOUBLE(value),
- DOUBLE(old_value), INTEGER(prim) ))
- this->grffun[ AST__GATTR ])( INTEGER_ARG(&GRFCON),
- INTEGER_ARG(&attr),
- DOUBLE_ARG(&value),
- DOUBLE_ARG(&OLDVAL),
- INTEGER_ARG(&prim) );
- if( old_value ) *old_value = OLDVAL;
- return ret;
-}
-
-static int FGFlushWrapper( AstPlot *this ) {
- F77_INTEGER_TYPE(GRFCON);
- int *status = astGetStatusPtr;
- if ( !astOK ) return 0;
- GRFCON = astP2I( astGrfConID( this ) );
- return ( *(int (*)(INTEGER(grfcon))) this->grffun[ AST__GFLUSH ])(INTEGER_ARG(&GRFCON));
-}
-
-static int FGLineWrapper( AstPlot *this, int n, const float *x,
- const float *y ) {
- F77_INTEGER_TYPE(GRFCON);
- int *status = astGetStatusPtr;
- if ( !astOK ) return 0;
- GRFCON = astP2I( astGrfConID( this ) );
- return ( *(int (*)( INTEGER(grfcon), INTEGER(n), REAL_ARRAY(x), REAL_ARRAY(y) ))
- this->grffun[ AST__GLINE ])( INTEGER_ARG(&GRFCON),
- INTEGER_ARG(&n),
- REAL_ARRAY_ARG(x),
- REAL_ARRAY_ARG(y) );
-}
-
-static int FGMarkWrapper( AstPlot *this, int n, const float *x,
- const float *y, int type ) {
- F77_INTEGER_TYPE(GRFCON);
- int *status = astGetStatusPtr;
- if ( !astOK ) return 0;
- GRFCON = astP2I( astGrfConID( this ) );
- return ( *(int (*)( INTEGER(grfcon), INTEGER(n), REAL_ARRAY(x), REAL_ARRAY(y),
- INTEGER(type) ))
- this->grffun[ AST__GMARK ])( INTEGER_ARG(&GRFCON),
- INTEGER_ARG(&n),
- REAL_ARRAY_ARG(x),
- REAL_ARRAY_ARG(y),
- INTEGER_ARG(&type) );
-}
-
-static int FGTextWrapper( AstPlot *this, const char *text, float x, float y,
- const char *just, float upx, float upy ) {
-
- DECLARE_CHARACTER(LTEXT,MXSTRLEN);
- DECLARE_CHARACTER(LJUST,MXSTRLEN);
- int ftext_length;
- int fjust_length;
-
- F77_INTEGER_TYPE(GRFCON);
- int *status = astGetStatusPtr;
- if ( !astOK ) return 0;
- GRFCON = astP2I( astGrfConID( this ) );
-
- ftext_length = strlen( text );
- if( ftext_length > LTEXT_length ) ftext_length = LTEXT_length;
- astStringExport( text, LTEXT, ftext_length );
-
- fjust_length = strlen( just );
- if( fjust_length > LJUST_length ) fjust_length = LJUST_length;
- astStringExport( just, LJUST, fjust_length );
-
- return ( *(int (*)( INTEGER(grfcon), CHARACTER(LTEXT), REAL(x), REAL(y),
- CHARACTER(LJUST), REAL(upx), REAL(upy)
- TRAIL(ftext) TRAIL(fjust) ) )
- this->grffun[ AST__GTEXT ])(
- INTEGER_ARG(&GRFCON),
- CHARACTER_ARG(LTEXT),
- REAL_ARG(&x),
- REAL_ARG(&y),
- CHARACTER_ARG(LJUST),
- REAL_ARG(&upx),
- REAL_ARG(&upy)
- TRAIL_ARG(ftext)
- TRAIL_ARG(fjust) );
-}
-
-static int FGCapWrapper( AstPlot *this, int cap, int value ) {
- F77_INTEGER_TYPE(GRFCON);
- int *status = astGetStatusPtr;
- if ( !astOK ) return 0;
- GRFCON = astP2I( astGrfConID( this ) );
- return ( *(int (*)( INTEGER(grfcon), INTEGER(cap), INTEGER(value) ) )
- this->grffun[ AST__GCAP ])(
- INTEGER_ARG(&GRFCON),
- INTEGER_ARG(&cap),
- INTEGER_ARG(&value) );
-}
-
-static int FGTxExtWrapper( AstPlot *this, const char *text, float x, float y,
- const char *just, float upx, float upy, float *xb,
- float *yb ) {
- DECLARE_CHARACTER(LTEXT,MXSTRLEN);
- DECLARE_CHARACTER(LJUST,MXSTRLEN);
- int ftext_length;
- int fjust_length;
-
- F77_INTEGER_TYPE(GRFCON);
- int *status = astGetStatusPtr;
- if ( !astOK ) return 0;
- GRFCON = astP2I( astGrfConID( this ) );
-
- ftext_length = strlen( text );
- if( ftext_length > LTEXT_length ) ftext_length = LTEXT_length;
- astStringExport( text, LTEXT, ftext_length );
-
- fjust_length = strlen( just );
- if( fjust_length > LJUST_length ) fjust_length = LJUST_length;
- astStringExport( just, LJUST, fjust_length );
-
- return ( *(int (*)( INTEGER(grfcon), CHARACTER(LTEXT), REAL(x), REAL(y),
- CHARACTER(LJUST), REAL(upx), REAL(upy),
- REAL_ARRAY(xb), REAL_ARRAY(yb) TRAIL(ftext)
- TRAIL(fjust) ) )
- this->grffun[ AST__GTXEXT ])(
- INTEGER_ARG(&GRFCON),
- CHARACTER_ARG(LTEXT),
- REAL_ARG(&x),
- REAL_ARG(&y),
- CHARACTER_ARG(LJUST),
- REAL_ARG(&upx),
- REAL_ARG(&upy),
- REAL_ARRAY_ARG(xb),
- REAL_ARRAY_ARG(yb)
- TRAIL_ARG(ftext)
- TRAIL_ARG(fjust) );
-}
-
-static int FGQchWrapper( AstPlot *this, float *chv, float *chh ) {
- F77_INTEGER_TYPE(GRFCON);
- int *status = astGetStatusPtr;
- if ( !astOK ) return 0;
- GRFCON = astP2I( astGrfConID( this ) );
- return ( *(int (*)( INTEGER(grfcon), REAL(chv), REAL(chh) ) )
- this->grffun[ AST__GQCH ])( INTEGER_ARG(&GRFCON), REAL_ARG(chv), REAL_ARG(chh) );
-}
-
-static int FGScalesWrapper( AstPlot *this, float *alpha, float *beta ) {
- F77_INTEGER_TYPE(GRFCON);
- int *status = astGetStatusPtr;
- if ( !astOK ) return 0;
- GRFCON = astP2I( astGrfConID( this ) );
- return ( *(int (*)( INTEGER(grfcon), REAL(alpha), REAL(beta) ) )
- this->grffun[ AST__GSCALES ])( INTEGER_ARG(&GRFCON), REAL_ARG(alpha), REAL_ARG(beta) );
-}
-
-
-/* NO_CHAR_FUNCTION indicates that the f77.h method of returning a
- character result doesn't work, so add an extra argument instead and
- wrap this function up in a normal FORTRAN 77 function (in the file
- plot.f). */
-#if NO_CHAR_FUNCTION
-F77_SUBROUTINE(ast_stripescapes_a)( CHARACTER(RESULT),
-#else
-F77_SUBROUTINE(ast_stripescapes)( CHARACTER_RETURN_VALUE(RESULT),
-#endif
- CHARACTER(TEXT),
- INTEGER(STATUS)
-#if NO_CHAR_FUNCTION
- TRAIL(RESULT)
-#endif
- TRAIL(TEXT) ) {
- GENPTR_CHARACTER(RESULT)
- GENPTR_CHARACTER(TEXT)
- char *text;
- const char *result;
- int i;
-
- astAt( "AST_STRIPESCAPES", NULL, 0 );
- astWatchSTATUS(
- text = astString( TEXT, TEXT_length );
- result = astStripEscapes( text );
- i = 0;
- if ( astOK ) { /* Copy result */
- for ( ; result[ i ] && i < RESULT_length; i++ ) {
- RESULT[ i ] = result[ i ];
- }
- }
- while ( i < RESULT_length ) RESULT[ i++ ] = ' '; /* Pad with blanks */
- astFree( text );
- )
-}
-
-F77_LOGICAL_FUNCTION(ast_getgrfcontext)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_INTEGER_TYPE(RESULT);
-
- astAt( "AST_GETGRFCONTEXT", NULL, 0 );
- astWatchSTATUS(
- RESULT = astP2I( astGetGrfContext( astI2P( *THIS ) ) );
- )
- return RESULT;
-}
-
-
-
-
diff --git a/ast-5.3-1/fplot3d.c b/ast-5.3-1/fplot3d.c
deleted file mode 100644
index effc64b..0000000
--- a/ast-5.3-1/fplot3d.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-*+
-* Name:
-* fplot3d.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST Plot3D class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the Plot3D class.
-
-* Routines Defined:
-* AST_ISAPLOT3D
-* AST_PLOT3D
-
-* Copyright:
-* Copyright (C) 2007 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 6-JUN-2007 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "plot3d.h" /* C interface to the Plot3D class */
-
-F77_LOGICAL_FUNCTION(ast_isaplot3d)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAPLOT3D", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAPlot3D( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_plot3d)( INTEGER(FRAME),
- REAL_ARRAY(GRAPHBOX),
- DOUBLE_ARRAY(BASEBOX),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(FRAME)
- GENPTR_REAL_ARRAY(GRAPHBOX)
- GENPTR_DOUBLE_ARRAY(BASEBOX)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_PLOT3D", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astPlot3D( astI2P( *FRAME ), GRAPHBOX, BASEBOX,
- "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
-
diff --git a/ast-5.3-1/fpointlist.c b/ast-5.3-1/fpointlist.c
deleted file mode 100644
index c20878d..0000000
--- a/ast-5.3-1/fpointlist.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-*+
-* Name:
-* fpointlist.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST PointList class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the PointList class.
-
-* Routines Defined:
-* AST_ISAPOINTLIST
-* AST_POINTLIST
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 23-AUG-2004 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "pointlist.h" /* C interface to the PointList class */
-
-F77_LOGICAL_FUNCTION(ast_isapointlist)( INTEGER(THIS), INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAPOINTLIST", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAPointList( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_pointlist)( INTEGER(FRAME),
- INTEGER(NPNT),
- INTEGER(COORD),
- INTEGER(INDIM),
- DOUBLE_ARRAY(POINTS),
- INTEGER(UNC),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(FRAME)
- GENPTR_INTEGER(NPNT)
- GENPTR_INTEGER(COORD)
- GENPTR_INTEGER(INDIM)
- GENPTR_DOUBLE_ARRAY(POINTS)
- GENPTR_INTEGER(UNC)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_POINTLIST", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
-
- RESULT = astP2I( astPointList( astI2P( *FRAME ), *NPNT, *COORD,
- *INDIM, POINTS, astI2P( *UNC ), "%s",
- options ) );
- astFree( options );
- )
- return RESULT;
-}
-
-
-
-
diff --git a/ast-5.3-1/fpolygon.c b/ast-5.3-1/fpolygon.c
deleted file mode 100644
index 5cbcab8..0000000
--- a/ast-5.3-1/fpolygon.c
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
-*+
-* Name:
-* fpolygon.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST Polygon class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the Polygon class.
-
-* Routines Defined:
-* AST_ISAPOLYGON
-* AST_POLYGON
-* AST_DOWNSIZE
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2009 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 27-OCT-2004 (DSB):
-* Original version.
-* 28-MAY-2009 (DSB):
-* Added AST_DOWNSIZE.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "polygon.h" /* C interface to the Polygon class */
-
-F77_LOGICAL_FUNCTION(ast_isapolygon)( INTEGER(THIS), INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAPOLYGON", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAPolygon( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_polygon)( INTEGER(FRAME),
- INTEGER(NPNT),
- INTEGER(INDIM),
- DOUBLE_ARRAY(POINTS),
- INTEGER(UNC),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(FRAME)
- GENPTR_INTEGER(NPNT)
- GENPTR_INTEGER(INDIM)
- GENPTR_DOUBLE_ARRAY(POINTS)
- GENPTR_INTEGER(UNC)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_POLYGON", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
-
- RESULT = astP2I( astPolygon( astI2P( *FRAME ), *NPNT, *INDIM, POINTS,
- astI2P( *UNC ), "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_downsize)( INTEGER(THIS),
- DOUBLE(MAXERR),
- INTEGER(MAXVERT),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_DOUBLE(MAXERR)
- GENPTR_INTEGER(MAXVERT)
- F77_INTEGER_TYPE(RESULT);
-
- astAt( "AST_DOWNSIZE", NULL, 0 );
- astWatchSTATUS(
- RESULT = astP2I( astDownsize( astI2P( *THIS ), *MAXERR, *MAXVERT ) );
- )
- return RESULT;
-}
-
-
-/* AST_OUTLINE<X> requires a function for each possible data type, so
- define it via a macro. */
-#define MAKE_AST_OUTLINE(f,F,Ftype,X,Xtype) \
-F77_INTEGER_FUNCTION(ast_outline##f)( Ftype(VALUE), \
- INTEGER(OPER), \
- Ftype##_ARRAY(ARRAY), \
- INTEGER_ARRAY(LBND), \
- INTEGER_ARRAY(UBND), \
- DOUBLE(MAXERR), \
- INTEGER(MAXVERT), \
- INTEGER_ARRAY(INSIDE), \
- LOGICAL(STARPIX), \
- INTEGER(STATUS) ) { \
- GENPTR_##Ftype(VALUE) \
- GENPTR_INTEGER(OPER) \
- GENPTR_##Ftype##_ARRAY(ARRAY) \
- GENPTR_INTEGER_ARRAY(LBND) \
- GENPTR_INTEGER_ARRAY(UBND) \
- GENPTR_DOUBLE(MAXERR) \
- GENPTR_INTEGER(MAXVERT) \
- GENPTR_INTEGER_ARRAY(INSIDE) \
- GENPTR_LOGICAL(STARPIX) \
- GENPTR_INTEGER(STATUS) \
-\
- F77_INTEGER_TYPE RESULT; \
-\
- astAt( "AST_OUTLINE"#F, NULL, 0 ); \
- astWatchSTATUS( \
- RESULT = astP2I( astOutline##X( *VALUE, *OPER, (Xtype *) ARRAY, LBND, \
- UBND, *MAXERR, *MAXVERT, INSIDE, \
- F77_ISTRUE( *STARPIX ) ? 1 : 0 ) ); \
- ) \
- return RESULT; \
-}
-
-/* Invoke the above macro to define a function for each data
- type. Include synonyms for some functions. */
-MAKE_AST_OUTLINE(d,D,DOUBLE,D,double)
-MAKE_AST_OUTLINE(r,R,REAL,F,float)
-MAKE_AST_OUTLINE(i,I,INTEGER,I,int)
-MAKE_AST_OUTLINE(ui,UI,INTEGER,UI,unsigned int)
-MAKE_AST_OUTLINE(s,S,WORD,S,short int)
-MAKE_AST_OUTLINE(us,US,UWORD,US,unsigned short int)
-MAKE_AST_OUTLINE(w,W,WORD,S,short int)
-MAKE_AST_OUTLINE(uw,UW,UWORD,US,unsigned short int)
-MAKE_AST_OUTLINE(b,B,BYTE,B,signed char)
-MAKE_AST_OUTLINE(ub,UB,UBYTE,UB,unsigned char)
-#undef MAKE_AST_OUTLINE
-
-
diff --git a/ast-5.3-1/fpolymap.c b/ast-5.3-1/fpolymap.c
deleted file mode 100644
index a37fe7b..0000000
--- a/ast-5.3-1/fpolymap.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
-*+
-* Name:
-* fpolymap.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST PolyMap class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the PolyMap class.
-
-* Routines Defined:
-* AST_ISAPOLYMAP
-* AST_POLYMAP
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-
-* History:
-* 27-SEP-2003 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "polymap.h" /* C interface to the PolyMap class */
-
-F77_LOGICAL_FUNCTION(ast_isapolymap)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAPOLYMAP", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAPolyMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_polymap)( INTEGER(NIN),
- INTEGER(NOUT),
- INTEGER(NCOEFF_F),
- DOUBLE_ARRAY(COEFF_F),
- INTEGER(NCOEFF_I),
- DOUBLE_ARRAY(COEFF_I),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(NIN)
- GENPTR_INTEGER(NOUT)
- GENPTR_INTEGER(NCOEFF_F)
- GENPTR_DOUBLE_ARRAY(COEFF_F)
- GENPTR_INTEGER(NCOEFF_I)
- GENPTR_DOUBLE_ARRAY(COEFF_I)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_POLYMAP", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astPolyMap( *NIN, *NOUT, *NCOEFF_F, COEFF_F, *NCOEFF_I,
- COEFF_I, "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fprism.c b/ast-5.3-1/fprism.c
deleted file mode 100644
index 3253276..0000000
--- a/ast-5.3-1/fprism.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
-*+
-* Name:
-* fprism.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST Prism class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the Prism class.
-
-* Routines Defined:
-* AST_ISAPRISM
-* AST_PRISM
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 10-JAN-2004 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "prism.h" /* C interface to the Prism class */
-
-
-F77_LOGICAL_FUNCTION(ast_isaprism)( INTEGER(THIS), INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAPRISM", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAPrism( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_prism)( INTEGER(REG1),
- INTEGER(REG2),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(REG1)
- GENPTR_INTEGER(REG2)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_PRISM", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
-
- RESULT = astP2I( astPrism( astI2P( *REG1 ), astI2P( *REG2 ),
- "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/frame.c b/ast-5.3-1/frame.c
deleted file mode 100644
index af71a94..0000000
--- a/ast-5.3-1/frame.c
+++ /dev/null
@@ -1,15149 +0,0 @@
-/*
-*class++
-* Name:
-* Frame
-
-* Purpose:
-* Coordinate system description.
-
-* Constructor Function:
-c astFrame
-f AST_FRAME
-
-* Description:
-* This class is used to represent coordinate systems. It does this
-* in rather the same way that a frame around a graph describes the
-* coordinate space in which data are plotted. Consequently, a
-* Frame has a Title (string) attribute, which describes the
-* coordinate space, and contains axes which in turn hold
-* information such as Label and Units strings which are used for
-* labelling (e.g.) graphical output. In general, however, the
-* number of axes is not restricted to two.
-*
-* Functions are available for converting Frame coordinate values
-* into a form suitable for display, and also for calculating
-* distances and offsets between positions within the Frame.
-*
-* Frames may also contain knowledge of how to transform to and
-* from related coordinate systems.
-
-* Inheritance:
-* The Frame class inherits from the Mapping class.
-
-* Attributes:
-* In addition to those attributes common to all Mappings, every
-* Frame also has the following attributes (if the Frame has only one
-* axis, the axis specifier can be omited from the following attribute
-* names):
-*
-* - AlignSystem: Coordinate system used to align Frames
-* - Bottom(axis): Lowest axis value to display
-* - Digits/Digits(axis): Number of digits of precision
-* - Direction(axis): Display axis in conventional direction?
-* - Domain: Coordinate system domain
-* - Dut1: Difference between the UT1 and UTC timescale
-* - Epoch: Epoch of observation
-* - Format(axis): Format specification for axis values
-* - Label(axis): Axis label
-* - MatchEnd: Match trailing axes?
-* - MaxAxes: Maximum number of Frame axes to match
-* - MinAxes: Minimum number of Frame axes to match
-* - Naxes: Number of Frame axes
-* - NormUnit(axis): Normalised axis physical units
-* - ObsAlt: Geodetic altitude of observer
-* - ObsLat: Geodetic latitude of observer
-* - ObsLon: Geodetic longitude of observer
-* - Permute: Permute axis order?
-* - PreserveAxes: Preserve axes?
-* - Symbol(axis): Axis symbol
-* - System: Coordinate system used to describe the domain
-* - Title: Frame title
-* - Top(axis): Highest axis value to display
-* - Unit(axis): Axis physical units
-
-* Functions:
-c In addition to those functions applicable to all Mappings, the
-c following functions may also be applied to all Frames:
-f In addition to those routines applicable to all Mappings, the
-f following routines may also be applied to all Frames:
-*
-c - astAngle: Calculate the angle subtended by two points at a third point
-c - astAxAngle: Find the angle from an axis, to a line through two points
-c - astAxDistance: Calculate the distance between two axis values
-c - astAxOffset: Calculate an offset along an axis
-c - astConvert: Determine how to convert between two coordinate systems
-c - astDistance: Calculate the distance between two points in a Frame
-c - astFindFrame: Find a coordinate system with specified characteristics
-c - astFormat: Format a coordinate value for a Frame axis
-c - astGetActiveUnit: Determines how the Unit attribute will be used
-c - astIntersect: Find the intersection between two geodesic curves
-c - astMatchAxes: Find any corresponding axes in two Frames
-c - astNorm: Normalise a set of Frame coordinates
-c - astOffset: Calculate an offset along a geodesic curve
-c - astOffset2: Calculate an offset along a geodesic curve in a 2D Frame
-c - astPermAxes: Permute the order of a Frame's axes
-c - astPickAxes: Create a new Frame by picking axes from an existing one
-c - astResolve: Resolve a vector into two orthogonal components
-c - astSetActiveUnit: Specify how the Unit attribute should be used
-c - astUnformat: Read a formatted coordinate value for a Frame axis
-f - AST_ANGLE: Find the angle subtended by two points at a third point
-f - AST_AXANGLE: Find the angle from an axis, to a line through two points
-f - AST_AXDISTANCE: Calculate the distance between two axis values
-f - AST_AXOFFSET: Calculate an offset along an axis
-f - AST_CONVERT: Determine how to convert between two coordinate systems
-f - AST_DISTANCE: Calculate the distance between two points in a Frame
-f - AST_FINDFRAME: Find a coordinate system with specified characteristics
-f - AST_FORMAT: Format a coordinate value for a Frame axis
-f - AST_GETACTIVEUNIT: Determines how the Unit attribute will be used
-f - AST_INTERSECT: Find the intersection between two geodesic curves
-f - AST_MATCHAXES: Find any corresponding axes in two Frames
-f - AST_NORM: Normalise a set of Frame coordinates
-f - AST_OFFSET: Calculate an offset along a geodesic curve
-f - AST_OFFSET2: Calculate an offset along a geodesic curve in a 2D Frame
-f - AST_PERMAXES: Permute the order of a Frame's axes
-f - AST_PICKAXES: Create a new Frame by picking axes from an existing one
-f - AST_RESOLVE: Resolve a vector into two orthogonal components
-f - AST_SETACTIVEUNIT: Specify how the Unit attribute should be used
-f - AST_UNFORMAT: Read a formatted coordinate value for a Frame axis
-
-* Notes:
-* - When used as a Mapping, a Frame implements a unit (null)
-* transformation in both the forward and inverse directions
-* (equivalent to a UnitMap). The Nin and Nout attribute values are
-* both equal to the number of Frame axes.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: B.S. Berry (Starlink)
-
-* History:
-* 1-MAR-1996 (RFWS):
-* Original version.
-* 4-JUN-1996 (RFWS):
-* Added the CleanDomain function to fold all Domain strings to
-* upper case and remove white space.
-* 12-JUL-1996 (RFWS):
-* Over-ride the astReportPoints method to provide
-* Frame-specific formatting.
-* 11-SEP-1996 (RFWS):
-* Added astGap (written by DSB).
-* 10-JUN-1997 (RFWS):
-* Re-implemented astConvert and astFindFrame.
-* 1-SEP-1997 (RFWS):
-* Added missing return statement in astAbbrev_.
-* 14-NOV-1997 (RFWS):
-* Fixed wrong amount of memory allocated in ValidateAxisSelection.
-* 20-NOV-1997 (RFWS):
-* Updated astConvert prologue.
-* 22-DEC-1997 (RFWS):
-* Updated astConvert prologue again.
-* 15-FEB-1998 (RFWS):
-* Added astUnformat.
-* 2-MAR-1999 (RFWS);
-* Fixed missing STATUS arguments in examples for AST_FINDFRAME
-* prologue.
-* 18-JUL-1999 (RFWS):
-* Fixed memory leak in ConvertX.
-* 21-JUN-2001 (DSB):
-* Added methods astAngle and astOffset2.
-* 29-AUG-2001 (DSB):
-* Added methods astAxDistance and astAxOffset.
-* 4-SEP-2001 (DSB):
-* Added method astResolve.
-* 9-SEP-2001 (DSB):
-* Added method astBear.
-* 21-SEP-2001 (DSB):
-* Replaced astBear with astAxAngle.
-* 10-OCT-2002 (DSB):
-* Added Top and Bottom.
-* 15-NOV-2002 (DSB):
-* Moved the System and Epoch attributes from the SkyFrame class to
-* this class. Added virtual method astValidateSystem, astSystemString,
-* astSystemCode. Added attribute AlignSystem.
-* 17-DEC-2002 (DSB):
-* Added the GetActiveUnit, TestActiveUnit and SetActiveUnit functions.
-* 8-JAN-2003 (DSB):
-* Changed private InitVtab method to protected astInitFrameVtab
-* method.
-* 15-SEP-2003 (DSB):
-* Allow Frame attribute names to include an axis specifier within
-* GetAttrib, SetAttrib, TestAttrib and ClearAttrib (eg "Domain(1)"
-* is now accepted as equivalent to "Domain").
-* 24-JAN-2004 (DSB):
-* o Added astFields.
-* o Added argument "fmt" to Abbrev.
-* 24-MAR-2004 (DSB):
-* Add protected function astIsUnitFrame.
-* 7-SEP-2004 (DSB):
-* Modified SetUnit to exclude any trailing spaces
-* 8-SEP-2004 (DSB):
-* - Added astResolvePoints.
-* - Override astEqual.
-* 29-NOV-2004 (DSB):
-* - Set/Get/Test/ClearAttrib: Allow axis specifier to be omitted from
-* axis attribute names if the Frame only has one axis.
-* 2-FEB-2005 (DSB):
-* - Avoid using astStore to allocate more storage than is supplied
-* in the "data" pointer. This can cause access violations since
-* astStore will then read beyond the end of the "data" area.
-* 17-FEB-2005 (DSB):
-* - Change use of ActiveUnit flag so that both target and template
-* Frames must have active units in order for the Mapping to take
-* account of differences in units. Previously, the test was based
-* on the template Frame alone.
-* 23-MAR-2005 (DSB):
-* - GetActiveUnit: Always return zero if the Frame contains any
-* SkyAxes.
-* 5-APR-2005 (DSB):
-* Correct error checking in Clear/Get/Set/TestAttrib.
-* 12-MAY-2005 (DSB):
-* Added astNormBox method.
-* 16-JUN-2005 (DSB):
-* Added documentation for the TimeFrame class.
-* 12-AUG-2005 (DSB):
-* Added ObsLat and ObsLon attributes.
-* 1-MAR-2006 (DSB):
-* Replace astSetPermMap within DEBUG blocks by astBeginPM/astEndPM.
-* 15-MAY-2006 (DSB):
-* Remove unused global variable parent_equal.
-* 26-JUN-2006 (DSB):
-* Document the use of the Direction attribute by the Plot class.
-* 30-JUN-2006 (DSB):
-* Allow astAbbrev to have a null "str1" value.
-* 16-AUG-2006 (DSB):
-* Correct "Class Applicability" to "Applicability".
-* 5-OCT-2006 (DSB):
-* Increase the number of digits used when formating a ObsLon or
-* ObsLat value in GetAttrib.
-* 14-OCT-2006 (DSB):
-* - Add Dut1 attribute
-* 26-JAN-2007 (DSB):
-* Fix bug in NewUnit that causes segvio when changing axis symbols
-* to accomodate changes in units.
-* 17-MAY-2007 (DSB):
-* Added read-only attribute NormUnit.
-* 21-MAY-2007 (DSB):
-* Use rather than ignore the value returned by astTestAxisDigits in
-* TestAttrib.
-* 25-JUN-2007 (DSB):
-* Documentation typos.
-* 26-NOV-2007 (DSB):
-* In Clear/Get/Set/TestAttrib, include any appropriate axis index in
-* the attribute name when attempting to get the attribute value from
-* the primary frame
-* 17-NOV-2008 (DSB):
-* Correct parent class in invocation of astMAKE_ISA.
-* 14-JAN-2009 (DSB):
-* Added astIntersect.
-* 18-MAR-2009 (DSB):
-* Fixed bug in LineCrossing.
-* 18-JUN-2000 (DSB):
-* Added ObsAlt attribute.
-* 28-SEP-2009 (DSB):
-* Added astMatchAxes method.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS Frame
-
-/* Define numerical constants for use in this module. */
-#define LABEL_BUFF_LEN 100 /* Max length of default axis Label string */
-#define SYMBOL_BUFF_LEN 50 /* Max length of default axis Symbol string */
-#define TITLE_BUFF_LEN 100 /* Max length of default title string */
-#define GETATTRIB_BUFF_LEN 50 /* Max length of string returned by GetAttrib */
-#define ASTFMTDECIMALYR_BUFF_LEN 50 /* Max length of string returned by GetAttrib */
-#define ASTFORMATID_MAX_STRINGS 50 /* Number of string values buffer by astFormatID*/
-
-
-/* Define the first and last acceptable System values. */
-#define FIRST_SYSTEM AST__CART
-#define LAST_SYSTEM AST__CART
-
-/* Define macros to implement methods for accessing axis attributes. */
-/*
-* Name:
-* MAKE_CLEAR
-
-* Purpose:
-* Implement a method to clear an attribute value for a Frame axis.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "frame.h"
-* MAKE_CLEAR(attribute)
-
-* Class Membership:
-* Defined by the Frame class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Clear<Attribute>( AstFrame *this, int axis )
-*
-* and an external interface function of the form:
-*
-* void astClear<Attribute>_( AstFrame *this, int axis )
-*
-* which implement a method for clearing an attribute value for a specified
-* axis of a Frame.
-
-* Parameters:
-* attribute
-* The name of the attribute to be cleared, as it appears in the
-* function name (e.g. Label in "astClearLabel").
-
-* Notes:
-* - This macro assumes the existence of a method of the form:
-*
-* void astClearAxis<Attribute>( AstAxis *this )
-*
-* which clears the required attribute for an Axis object.
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attribute) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attribute( AstFrame *this, int axis, int *status ) { \
- AstAxis *ax; /* Pointer to Axis object */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Validate the axis index and obtain a pointer to the required Axis. */ \
- (void) astValidateAxis( this, axis, "astClear" #attribute ); \
- ax = astGetAxis( this, axis ); \
-\
-/* Clear the Axis attribute. */ \
- astClearAxis##attribute( ax ); \
-\
-/* Annul the Axis pointer. */ \
- ax = astAnnul( ax ); \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astClear##attribute##_( AstFrame *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
- (**astMEMBER(this,Frame,Clear##attribute))( this, axis, status ); \
-}
-
-/*
-* Name:
-* MAKE_GET
-
-* Purpose:
-* Implement a method to get an attribute value for a Frame axis.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-# #include "frame.h"
-* MAKE_GET(attribute,type,bad_value,default,assign_default)
-
-* Class Membership:
-* Defined by the Frame class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static <Type> Get<Attribute>( AstFrame *this, int axis )
-*
-* and an external interface function of the form:
-*
-* Type astGet<Attribute>_( AstFrame *this, int axis )
-*
-* which implement a method for getting an attribute value for a specified
-* axis of a Frame.
-
-* Parameters:
-* attribute
-* The name of the attribute whose value is to be obtained, as
-* it appears in the function name (e.g. Label in
-* "astGetLabel").
-* type
-* The C type of the attribute.
-* bad_value
-* A constant value to return if the global error status is set, or if
-* the function fails.
-* default
-* A boolean (int) constant that indicates whether a new default value
-* should be returned by the method if the requested attribute has not
-* been set for the axis. If this value is zero, the axis default will
-* be used instead.
-* assign_default
-* An expression that evaluates to the new default value to be assigned.
-* This value is ignored if "default" is zero, but a valid (e.g.
-* constant) value should nevertheless be supplied.
-
-* Notes:
-* - This macro assumes the existence of a method of the form:
-*
-* <Type> astGetAxis<Attribute>( AstAxis *this )
-*
-* which gets the required attribute for an Axis object.
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*/
-
-/* Define the macro. */
-#define MAKE_GET(attribute,type,bad_value,default,assign_default) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static type Get##attribute( AstFrame *this, int axis, int *status ) { \
- AstAxis *ax; /* Pointer to Axis object */ \
- int digits_set; /* Axis Digits attribute set? */ \
- int old_axis; /* Original (un-permuted) axis index */ \
- type result; /* Result to be returned */ \
-\
-/* Initialise. */ \
- result = (bad_value); \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* Validate and permute the axis index and obtain a pointer to the required \
- Axis. */ \
- old_axis = axis; \
- axis = astValidateAxis( this, axis, "astGet" #attribute ); \
- ax = astGetAxis( this, old_axis ); \
-\
-/* Since the Axis is "managed" by the enclosing Frame, we next test if any \
- Axis attributes which may affect the result are undefined (i.e. have not \
- been explicitly set). If so, we over-ride them, giving them temporary \
- values dictated by the Frame. Only the Digits attribute is relevant \
- here. */ \
- digits_set = astTestAxisDigits( ax ); \
- if ( !digits_set ) astSetAxisDigits( ax, astGetDigits( this ) ); \
-\
-/* If the default value is to be over-ridden, test if the Axis attribute has \
- been set. Then, if required, obtain the attribute value from the Axis. */ \
- if ( !(default) || astTestAxis##attribute( ax ) ) { \
- result = astGetAxis##attribute( ax ); \
-\
-/* If required, assign the new default value. */ \
- } else { \
- result = (assign_default); \
- } \
-\
-/* Clear Axis attributes which were temporarily over-ridden above and annul \
- the Axis pointer. */ \
- if ( !digits_set ) astClearAxisDigits( ax ); \
- ax = astAnnul( ax ); \
-\
-/* If an error occurred, clear the result value. */ \
- if ( !astOK ) result = (bad_value); \
-\
-/* Return the result. */ \
- return result; \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-type astGet##attribute##_( AstFrame *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return (bad_value); \
-\
-/* Invoke the required method via the virtual function table. */ \
- return (**astMEMBER(this,Frame,Get##attribute))( this, axis, status ); \
-}
-
-/*
-* Name:
-* MAKE_SET
-
-* Purpose:
-* Implement a method to set an attribute value for a Frame axis.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "frame.h"
-* MAKE_SET(attribute,type)
-
-* Class Membership:
-* Defined by the Frame class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Set<Attribute>( AstFrame *this, int axis, <Type> value )
-*
-* and an external interface function of the form:
-*
-* void astSet<Attribute>_( AstFrame *this, int axis, <Type> value )
-*
-* which implement a method for setting an attribute value for a specified
-* axis of a Frame.
-
-* Parameters:
-* attribute
-* The name of the attribute to be set, as it appears in the
-* function name (e.g. Label in "astSetLabel").
-* type
-* The C type of the attribute.
-
-* Notes:
-* - This macro assumes the existence of a method of the form:
-*
-* void astSetAxis<Attribute>( AstAxis *this, <Type> value )
-*
-* which sets the required attribute for an Axis object.
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attribute,type) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attribute( AstFrame *this, int axis, type value, int *status ) { \
- AstAxis *ax; /* Pointer to Axis object */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Validate the axis index and obtain a pointer to the required Axis. */ \
- (void) astValidateAxis( this, axis, "astSet" #attribute ); \
- ax = astGetAxis( this, axis ); \
-\
-/* Set the Axis attribute value. */ \
- astSetAxis##attribute( ax, value ); \
-\
-/* Annul the Axis pointer. */ \
- ax = astAnnul( ax ); \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astSet##attribute##_( AstFrame *this, int axis, type value, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
- (**astMEMBER(this,Frame,Set##attribute))( this, axis, value, status ); \
-}
-
-/*
-* Name:
-* MAKE_TEST
-
-* Purpose:
-* Implement a method to test if an attribute has been set for a Frame axis.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "frame.h"
-* MAKE_TEST(attribute)
-
-* Class Membership:
-* Defined by the Frame class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static int Test<Attribute>( AstFrame *this, int axis )
-*
-* and an external interface function of the form:
-*
-* int astTest<Attribute>_( AstFrame *this, int axis )
-*
-* which implement a method for testing if an attribute has been set for a
-* specified axis of a Frame.
-
-* Parameters:
-* attribute
-* The name of the attribute to be tested, as it appears in the
-* function name (e.g. Label in "astTestLabel").
-
-* Notes:
-* - This macro assumes the existence of a method of the form:
-*
-* void astTestAxis<Attribute>( AstAxis *this )
-*
-* which tests the required attribute for an Axis object.
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*/
-
-/* Define the macro. */
-#define MAKE_TEST(attribute) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static int Test##attribute( AstFrame *this, int axis, int *status ) { \
- AstAxis *ax; /* Pointer to Axis object */ \
- int result; /* Value to be returned */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return 0; \
-\
-/* Validate the axis index and obtain a pointer to the required Axis. */ \
- (void) astValidateAxis( this, axis, "astTest" #attribute ); \
- ax = astGetAxis( this, axis ); \
-\
-/* Test if the attribute has been set. */ \
- result = astTestAxis##attribute( ax ); \
-\
-/* Annul the Axis pointer. */ \
- ax = astAnnul( ax ); \
-\
-/* If an error occurred, clear the result value. */ \
- if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
- return result; \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-int astTest##attribute##_( AstFrame *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return 0; \
-\
-/* Invoke the required method via the virtual function table. */ \
- return (**astMEMBER(this,Frame,Test##attribute))( this, axis, status ); \
-}
-
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-#include "pointset.h" /* Sets of points */
-#include "unitmap.h" /* Unit Mapping */
-#include "permmap.h" /* Coordinate permutation Mapping */
-#include "cmpmap.h" /* Compound Mappings */
-#include "axis.h" /* Coordinate Axis */
-#include "skyaxis.h" /* Sky coordinate axes */
-#include "skyframe.h" /* Celestial coordinate frames */
-#include "channel.h" /* I/O channels */
-#include "frame.h" /* Interface definition for this class */
-#include "frameset.h" /* Collections of Frames */
-#include "cmpframe.h" /* Compound Frames */
-#include "pal.h" /* SLALIB library interface */
-#include "unit.h" /* Units identification and mapping */
-#include "globals.h" /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <limits.h>
-#include <math.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static void (* parent_cleanattribs)( AstObject *, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Define a variable to hold a SkyFrame which will be used for formatting
- and unformatting ObsLat and ObsLon values. */
-static AstSkyFrame *skyframe;
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->GetAttrib_Buff[ 0 ] = 0; \
- globals->AstFormatID_Init = 0; \
- globals->AstFormatID_Istr = 0; \
- globals->Label_Buff[ 0 ] = 0; \
- globals->Symbol_Buff[ 0 ] = 0; \
- globals->Title_Buff[ 0 ] = 0; \
- globals->AstFmtDecimalYr_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Frame)
-
-#define class_init astGLOBAL(Frame,Class_Init)
-#define class_vtab astGLOBAL(Frame,Class_Vtab)
-#define getattrib_buff astGLOBAL(Frame,GetAttrib_Buff)
-#define astformatid_strings astGLOBAL(Frame,AstFormatID_Strings)
-#define astformatid_istr astGLOBAL(Frame,AstFormatID_Istr)
-#define astformatid_init astGLOBAL(Frame,AstFormatID_Init)
-#define label_buff astGLOBAL(Frame,Label_Buff)
-#define symbol_buff astGLOBAL(Frame,Symbol_Buff)
-#define title_buff astGLOBAL(Frame,Title_Buff)
-#define astfmtdecimalyr_buff astGLOBAL(Frame,AstFmtDecimalYr_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-/* Buffer returned by GetAttrib. */
-static char getattrib_buff[ GETATTRIB_BUFF_LEN + 1 ];
-
-/* Strings returned by astFormatID */
-static char *astformatid_strings[ ASTFORMATID_MAX_STRINGS ];
-
-/* Offset of next string in "AstFormatID_Strings" */
-static int astformatid_istr;
-
-/* "AstFormatID_Strings" array initialised? */
-static int astformatid_init;
-
-/* Default Label string buffer */
-static char label_buff[ LABEL_BUFF_LEN + 1 ];
-
-/* Default Symbol buffer */
-static char symbol_buff[ SYMBOL_BUFF_LEN + 1 ];
-
-/* Default Title string buffer */
-static char title_buff[ TITLE_BUFF_LEN + 1 ];
-
-/* Buffer for result string */
-static char astfmtdecimalyr_buff[ ASTFMTDECIMALYR_BUFF_LEN + 1 ];
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstFrameVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstAxis *GetAxis( AstFrame *, int, int * );
-static AstFrame *PickAxes( AstFrame *, int, const int[], AstMapping **, int * );
-static AstFrameSet *Convert( AstFrame *, AstFrame *, const char *, int * );
-static AstFrameSet *ConvertX( AstFrame *, AstFrame *, const char *, int * );
-static AstFrameSet *FindFrame( AstFrame *, AstFrame *, const char *, int * );
-static void MatchAxes( AstFrame *, AstFrame *, int *, int * );
-static void MatchAxesX( AstFrame *, AstFrame *, int *, int * );
-static AstLineDef *LineDef( AstFrame *, const double[2], const double[2], int * );
-static AstPointSet *ResolvePoints( AstFrame *, const double [], const double [], AstPointSet *, AstPointSet *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static char *CleanDomain( char *, int * );
-static const char *Abbrev( AstFrame *, int, const char *, const char *, const char *, int * );
-static const char *Format( AstFrame *, int, double, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static const char *GetDefaultLabel( int, int * );
-static const char *GetDefaultSymbol( AstFrame *, int, int * );
-static const char *GetDefaultTitle( AstFrame *, int * );
-static const char *GetDomain( AstFrame *, int * );
-static const char *GetFormat( AstFrame *, int, int * );
-static const char *GetLabel( AstFrame *, int, int * );
-static const char *GetNormUnit( AstFrame *, int, int * );
-static const char *GetSymbol( AstFrame *, int, int * );
-static const char *GetTitle( AstFrame *, int * );
-static const char *GetUnit( AstFrame *, int, int * );
-static const int *GetPerm( AstFrame *, int * );
-static double Angle( AstFrame *, const double[], const double[], const double[], int * );
-static double AxAngle( AstFrame *, const double[], const double[], int, int * );
-static double AxDistance( AstFrame *, int, double, double, int * );
-static double AxOffset( AstFrame *, int, double, double, int * );
-static double Distance( AstFrame *, const double[], const double[], int * );
-static double Gap( AstFrame *, int, double, int *, int * );
-static double Offset2( AstFrame *, const double[2], double, double, double[2], int * );
-static int AxIn( AstFrame *, int, double, double, double, int, int * );
-static int ConsistentMaxAxes( AstFrame *, int, int * );
-static int ConsistentMinAxes( AstFrame *, int, int * );
-static int DefaultMaxAxes( AstFrame *, int * );
-static int DefaultMinAxes( AstFrame *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int Fields( AstFrame *, int, const char *, const char *, int, char **, int *, double *, int * );
-static int GetDigits( AstFrame *, int * );
-static int GetDirection( AstFrame *, int, int * );
-static int GetIsLinear( AstMapping *, int * );
-static int GetIsSimple( AstMapping *, int * );
-static int LineContains( AstFrame *, AstLineDef *, int, double *, int * );
-static int LineCrossing( AstFrame *, AstLineDef *, AstLineDef *, double **, int * );
-static void CleanAttribs( AstObject *, int * );
-static void LineOffset( AstFrame *, AstLineDef *, double, double, double[2], int * );
-
-static double GetTop( AstFrame *, int, int * );
-static int TestTop( AstFrame *, int, int * );
-static void ClearTop( AstFrame *, int, int * );
-static void SetTop( AstFrame *, int, double, int * );
-
-static double GetBottom( AstFrame *, int, int * );
-static int TestBottom( AstFrame *, int, int * );
-static void ClearBottom( AstFrame *, int, int * );
-static void SetBottom( AstFrame *, int, double, int * );
-
-static AstSystemType GetSystem( AstFrame *, int * );
-static int TestSystem( AstFrame *, int * );
-static void ClearSystem( AstFrame *, int * );
-static void SetSystem( AstFrame *, AstSystemType, int * );
-
-static AstSystemType GetAlignSystem( AstFrame *, int * );
-static int TestAlignSystem( AstFrame *, int * );
-static void ClearAlignSystem( AstFrame *, int * );
-static void SetAlignSystem( AstFrame *, AstSystemType, int * );
-
-static double GetEpoch( AstFrame *, int * );
-static int TestEpoch( AstFrame *, int * );
-static void ClearEpoch( AstFrame *, int * );
-static void SetEpoch( AstFrame *, double, int * );
-
-static double GetObsLat( AstFrame *, int * );
-static int TestObsLat( AstFrame *, int * );
-static void ClearObsLat( AstFrame *, int * );
-static void SetObsLat( AstFrame *, double, int * );
-
-static double GetObsLon( AstFrame *, int * );
-static int TestObsLon( AstFrame *, int * );
-static void ClearObsLon( AstFrame *, int * );
-static void SetObsLon( AstFrame *, double, int * );
-
-static double GetObsAlt( AstFrame *, int * );
-static int TestObsAlt( AstFrame *, int * );
-static void ClearObsAlt( AstFrame *, int * );
-static void SetObsAlt( AstFrame *, double, int * );
-
-static double GetDut1( AstFrame *, int * );
-static int TestDut1( AstFrame *, int * );
-static void ClearDut1( AstFrame *, int * );
-static void SetDut1( AstFrame *, double, int * );
-
-static int GetActiveUnit( AstFrame *, int * );
-static int TestActiveUnit( AstFrame *, int * );
-static void SetActiveUnit( AstFrame *, int, int * );
-
-static int GetFrameFlags( AstFrame *, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-static int GetMatchEnd( AstFrame *, int * );
-static int GetMaxAxes( AstFrame *, int * );
-static int GetMinAxes( AstFrame *, int * );
-static int GetNaxes( AstFrame *, int * );
-static int GetNin( AstMapping *, int * );
-static int GetNout( AstMapping *, int * );
-static int GetPermute( AstFrame *, int * );
-static int GetPreserveAxes( AstFrame *, int * );
-static int Match( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int SubFrame( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestDigits( AstFrame *, int * );
-static int TestDirection( AstFrame *, int, int * );
-static int TestDomain( AstFrame *, int * );
-static int TestFormat( AstFrame *, int, int * );
-static int TestLabel( AstFrame *, int, int * );
-static int TestMatchEnd( AstFrame *, int * );
-static int TestMaxAxes( AstFrame *, int * );
-static int TestMinAxes( AstFrame *, int * );
-static int TestPermute( AstFrame *, int * );
-static int TestPreserveAxes( AstFrame *, int * );
-static int TestSymbol( AstFrame *, int, int * );
-static int TestTitle( AstFrame *, int * );
-static int TestUnit( AstFrame *, int, int * );
-static int IsUnitFrame( AstFrame *, int * );
-static int Unformat( AstFrame *, int, const char *, double *, int * );
-static int ValidateAxis( AstFrame *, int, const char *, int * );
-static AstSystemType ValidateSystem( AstFrame *, AstSystemType, const char *, int * );
-static AstSystemType SystemCode( AstFrame *, const char *, int * );
-static const char *SystemString( AstFrame *, AstSystemType, int * );
-static void AddUnderscores( char *, int * );
-static void CheckPerm( AstFrame *, const int *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void ClearDigits( AstFrame *, int * );
-static void ClearDirection( AstFrame *, int, int * );
-static void ClearDomain( AstFrame *, int * );
-static void ClearFormat( AstFrame *, int, int * );
-static void ClearLabel( AstFrame *, int, int * );
-static void ClearMatchEnd( AstFrame *, int * );
-static void ClearMaxAxes( AstFrame *, int * );
-static void ClearMinAxes( AstFrame *, int * );
-static void ClearPermute( AstFrame *, int * );
-static void ClearPreserveAxes( AstFrame *, int * );
-static void ClearSymbol( AstFrame *, int, int * );
-static void ClearTitle( AstFrame *, int * );
-static void ClearUnit( AstFrame *, int, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void Intersect( AstFrame *, const double[2], const double[2], const double[2], const double[2], double[2], int * );
-static void Norm( AstFrame *, double[], int * );
-static void NormBox( AstFrame *, double[], double[], AstMapping *, int * );
-static void Offset( AstFrame *, const double[], const double[], double, double[], int * );
-static void Overlay( AstFrame *, const int *, AstFrame *, int * );
-static void PermAxes( AstFrame *, const int[], int * );
-static void PrimaryFrame( AstFrame *, int, AstFrame **, int *, int * );
-static void ReportPoints( AstMapping *, int, AstPointSet *, AstPointSet *, int * );
-static void Resolve( AstFrame *, const double [], const double [], const double [], double [], double *, double *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetAxis( AstFrame *, int, AstAxis *, int * );
-static void SetDigits( AstFrame *, int, int * );
-static void SetDirection( AstFrame *, int, int, int * );
-static void SetDomain( AstFrame *, const char *, int * );
-static void SetFormat( AstFrame *, int, const char *, int * );
-static void SetFrameFlags( AstFrame *, int, int * );
-static void SetLabel( AstFrame *, int, const char *, int * );
-static void SetMatchEnd( AstFrame *, int, int * );
-static void SetMaxAxes( AstFrame *, int, int * );
-static void SetMinAxes( AstFrame *, int, int * );
-static void SetPermute( AstFrame *, int, int * );
-static void SetPreserveAxes( AstFrame *, int, int * );
-static void SetSymbol( AstFrame *, int, const char *, int * );
-static void SetTitle( AstFrame *, const char *, int * );
-static void SetUnit( AstFrame *, int, const char *, int * );
-static void NewUnit( AstAxis *, const char *, const char *, const char *, const char *, int * );
-static void ValidateAxisSelection( AstFrame *, int, const int *, const char *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Member functions. */
-/* ================= */
-static const char *Abbrev( AstFrame *this, int axis, const char *fmt,
- const char *str1, const char *str2, int *status ) {
-/*
-*+
-* Name:
-* astAbbrev
-
-* Purpose:
-* Abbreviate a formatted Frame axis value by skipping leading fields.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* const char *astAbbrev( AstFrame *this, int axis, const char *fmt,
-* const char *str1, const char *str2 )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function compares two Frame axis values that have been
-* formatted (using astFormat) and determines if they have any
-* redundant leading fields (i.e. leading fields in common which
-* can be suppressed when tabulating the values or plotting them on
-* the axis of a graph).
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* axis
-* The number of the Frame axis for which the values have been
-* formatted (axis numbering starts at zero for the first axis).
-* fmt
-* Pointer to a constant null-terminated string containing the
-* format specification used to format the two values.
-* str1
-* Pointer to a constant null-terminated string containing the
-* first formatted value. If this is null, the returned pointer
-* points to the start of the final field in str2.
-* str2
-* Pointer to a constant null-terminated string containing the
-* second formatted value.
-
-* Returned Value:
-* A pointer into the "str2" string which locates the first
-* character in the first field that differs between the two
-* formatted values.
-*
-* If the two values have no leading fields in common, the returned
-* value will point at the start of string "str2". If the two
-* values are equal, it will point at the terminating null at the
-* end of this string.
-
-* Notes:
-* - This function assumes that the format specification used was
-* the same when both values were formatted and that they both
-* apply to the same Frame axis.
-* - A pointer to the start of "str2" will be returned if this
-* function is invoked with the global error status set, or if it
-* should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstAxis *ax; /* Pointer to Axis object */
- const char *result; /* Result pointer to return */
-
-/* Initialise. */
- result = str2;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Validate the axis index and obtain a pointer to the required
- Axis. */
- (void) astValidateAxis( this, axis, "astAbbrev" );
- ax = astGetAxis( this, axis );
-
-/* Invoke the Axis astAxisAbbrev method to perform the processing. */
- result = astAxisAbbrev( ax, fmt, str1, str2 );
-
-/* Annul the Axis pointer. */
- ax = astAnnul( ax );
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) result = str2;
-
-/* Return the result. */
- return result;
-}
-
-static void AddUnderscores( char *string, int *status ) {
-/*
-* Name:
-* AddUnderscores
-
-* Purpose:
-* Add underscores to a string in place of white space.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frame.h"
-* void AddUnderscores( char *string, int *status )
-
-* Class Membership:
-* Frame member function.
-
-* Description:
-* This function changes all white space characters in a string into
-* the underscore character '_'.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* string
-* Pointer to the null terminated string to be processed.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables. */
- int i; /* Loop counter for characters */
-
-/* Inspect each character in the string. */
- for ( i = 0; string[ i ]; i++ ) {
-
-/* If it is a white space character, replace it with an underscore. */
- if ( isspace( string[ i ] ) ) string[ i ] = '_';
- }
-}
-
-static double Angle( AstFrame *this, const double a[],
- const double b[], const double c[], int *status ) {
-/*
-*++
-* Name:
-c astAngle
-f AST_ANGLE
-
-* Purpose:
-* Calculate the angle subtended by two points at a third point.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "frame.h"
-c double astAngle( AstFrame *this, const double a[], const double b[],
-c const double c[] )
-f RESULT = AST_ANGLE( THIS, A, B, C, STATUS )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-c This function
-f This routine
-* finds the angle at point B between the line joining points A and B,
-* and the line joining points C and B. These lines will in fact be
-* geodesic curves appropriate to the Frame in use. For instance, in
-* SkyFrame, they will be great circles.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Frame.
-c a
-f A( * ) = DOUBLE PRECISION (Given)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* (Naxes attribute) containing the coordinates of the first point.
-c b
-f B( * ) = DOUBLE PRECISION (Given)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* (Naxes attribute) containing the coordinates of the second point.
-c c
-f C( * ) = DOUBLE PRECISION (Given)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* (Naxes attribute) containing the coordinates of the third point.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astAngle
-f AST_ANGLE = DOUBLE PRECISION
-* The angle in radians, from the line AB to the line CB. If the
-* Frame is 2-dimensional, it will be in the range $\pm \pi$,
-* and positive rotation is in the same sense as rotation from
-* the positive direction of axis 2 to the positive direction of
-* axis 1. If the Frame has more than 2 axes, a positive value will
-* always be returned in the range zero to $\pi$.
-
-* Notes:
-* - A value of AST__BAD will also be returned if points A and B are
-* co-incident, or if points B and C are co-incident.
-* - A value of AST__BAD will also be returned if this function is
-c invoked with the AST error status set, or if it should fail for
-f invoked with STATUS set to an error value, or if it should fail for
-* any reason.
-*--
-*/
-
-/* Local Variables: */
- double *ab; /* Pointer to vector AB */
- double *cb; /* Pointer to vector CB */
- double cos; /* cosine of required angle */
- double anga; /* Angle from +ve Y to the line BA */
- double angc; /* Angle from +ve Y to the line BC */
- double result; /* Result value to return */
- double sla; /* Squared length of vector AB */
- double slc; /* Squared length of vector CB */
- double sp; /* Scalar product of AB and CB */
- int axis; /* Axis index */
- int naxes; /* Number of Frame axes */
- int ok; /* Supplied points OK? */
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Assume everything is ok */
- ok = 1;
-
-/* Obtain the number of Frame axes. */
- naxes = astGetNaxes( this );
-
-/* Obtain workspace. */
- ab = (double *) astMalloc( sizeof(double)*naxes );
- cb = (double *) astMalloc( sizeof(double)*naxes );
-
-/* Check all positions are good, and form the vectors from b to a, and
- from b to c. Also find the squared length of each vector. */
- if( astOK ) {
- sla = 0.0;
- slc = 0.0;
- for( axis = 0; axis < naxes; axis++ ) {
- if( a[ axis ] == AST__BAD || b[ axis ] == AST__BAD ||
- c[ axis ] == AST__BAD ) {
- ok = 0;
- break;
- } else {
- ab[ axis ] = a[ axis ] - b[ axis ];
- cb[ axis ] = c[ axis ] - b[ axis ];
- sla += ( ab[ axis ] )*( ab[ axis ] );
- slc += ( cb[ axis ] )*( cb[ axis ] );
- }
- }
-
-/* Check that neither of the vectors have zero length. */
- if( sla == 0 || slc == 0 ) ok = 0;
-
-/* Only proceed if these checks were passed. */
- if ( ok ) {
-
-/* Deal first with 2-dimensional Frames. */
- if( naxes == 2 ) {
-
-/* Find the angle from +ve Y to the line BA. */
- anga = atan2( ab[ 0 ], ab[ 1 ] );
-
-/* Find the angle from +ve Y to the line BC. */
- angc = atan2( cb[ 0 ], cb[ 1 ] );
-
-/* Find the difference, folded into the range +/- PI. */
- result = palSlaDrange( angc - anga );
-
-/* Now deal with Frames with more than 2 axes. */
- } else {
-
-/* Form the scalar product of the two vectors. */
- sp = 0.0;
- for( axis = 0; axis < naxes; axis++ ) {
- sp += ab[ axis ]*cb[ axis ];
- }
-
-/* Derive the required angle from the normalized scalar product. */
- cos = sp/sqrt( sla*slc );
- if( cos > 1.0 ) {
- cos = 1.0;
- } else if( cos < -1.0 ) {
- cos = -1.0;
- }
- result =acos( cos );
- }
- }
- }
-
-/* Free the work space. */
- ab = (double *) astFree( (void *) ab );
- cb = (double *) astFree( (void *) cb );
-
-/* Return the result. */
- return result;
-}
-
-static double AxAngle( AstFrame *this, const double a[], const double b[], int axis, int *status ) {
-/*
-*++
-* Name:
-c astAxAngle
-f AST_AXANGLE
-
-* Purpose:
-* Returns the angle from an axis, to a line through two points.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "frame.h"
-c double astAxAngle( AstFrame *this, const double a[], const double b[], int axis )
-f RESULT = AST_AXANGLE( THIS, A, B, AXIS, STATUS )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-c This function
-f This routine
-* finds the angle, as seen from point A, between the positive
-* direction of a specified axis, and the geodesic curve joining point
-* A to point B.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Frame.
-c a
-f A( * ) = DOUBLE PRECISION (Given)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* (Naxes attribute) containing the coordinates of the first point.
-c b
-f B( * ) = DOUBLE PRECISION (Given)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* (Naxes attribute) containing the coordinates of the second point.
-c axis
-f AXIS = INTEGER (Given)
-* The number of the Frame axis from which the angle is to be
-* measured (axis numbering starts at 1 for the first axis).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astAxAngle
-f AST_AXANGLE = DOUBLE PRECISION
-* The angle in radians, from the positive direction of the
-* specified axis, to the line AB. If the Frame is 2-dimensional,
-* it will be in the range [-PI/2,+PI/2], and positive rotation is in
-* the same sense as rotation from the positive direction of axis 2
-* to the positive direction of axis 1. If the Frame has more than 2
-* axes, a positive value will always be returned in the range zero
-* to PI.
-
-* Notes:
-c - The geodesic curve used by this function is the path of
-f - The geodesic curve used by this routine is the path of
-* shortest distance between two points, as defined by the
-c astDistance function.
-f AST_DISTANCE function.
-* - This function will return "bad" coordinate values (AST__BAD)
-* if any of the input coordinates has this value, or if the require
-* position angle is undefined.
-*--
-*/
-
-/* Local Variables: */
- double *aa; /* Pointer to third point */
- double ab; /* Absolute value of component */
- double mxab; /* Largest absolute value of component */
- double result; /* The returned value */
- int iaxis; /* Axis index */
- int naxes; /* Number of Frame axes */
- int ok; /* Are values ok to use? */
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis - 1, "astAxAngle" );
-
-/* Obtain the number of Frame axes. */
- naxes = astGetNaxes( this );
-
-/* Obtain workspace. */
- aa = (double *) astMalloc( sizeof(double)*naxes );
-
-/* Create a position which is offset slightly from point A in the
- positive direction of the specified axis. Also get the largest absolute
- value of any component of the vector AB. */
- if( astOK ) {
- ok = 1;
- mxab = 0.0;
-
- for( iaxis = 0; iaxis < naxes; iaxis++ ) {
- if( a[ iaxis ] != AST__BAD && b[ iaxis ] != AST__BAD ) {
- aa[ iaxis ] = a[ iaxis ];
- ab = fabs( a[ iaxis ] - b[ iaxis ] );
- if( ab > mxab ) mxab = ab;
- } else {
- ok = 0;
- break;
- }
- }
-
- if( ok ) {
-
- if( a[ axis - 1 ] != 0.0 ) {
- aa[ axis - 1 ] += 10000.0*DBL_EPSILON*fabs( a[ axis - 1 ] );
-
- } else if( b[ axis - 1 ] != 0.0 ) {
- aa[ axis - 1 ] = 10000.0*DBL_EPSILON*fabs( b[ iaxis - 1 ] );
-
- } else if( mxab != 0.0 ) {
- aa[ axis - 1 ] = 10000.0*DBL_EPSILON*mxab;
-
- } else {
- aa[ axis - 1 ] = 1.0;
- }
-
-/* Use astAngle to get the required angle. */
- result = astAngle( this, aa, a, b );
- }
- }
-
-/* Free the workspace. */
- aa = (double *) astFree( (void *) aa );
-
-/* Return the result. */
- return result;
-
-}
-
-static double AxDistance( AstFrame *this, int axis, double v1, double v2, int *status ) {
-/*
-*++
-* Name:
-c astAxDistance
-f AST_AXDISTANCE
-
-* Purpose:
-* Find the distance between two axis values.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "frame.h"
-c double astAxDistance( AstFrame *this, int axis, double v1, double v2 )
-f RESULT = AST_AXDISTANCE( THIS, AXIS, V1, V2, STATUS )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-c This function returns a signed value representing the axis increment
-f This routine returns a signed value representing the axis increment
-* from axis value v1 to axis value v2.
-*
-* For a simple Frame, this is a trivial operation returning the
-* difference between the two axis values. But for other derived classes
-* of Frame (such as a SkyFrame) this is not the case.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Frame.
-c axis
-f AXIS = INTEGER (Given)
-* The index of the axis to which the supplied values refer. The
-* first axis has index 1.
-c v1
-f V1 = DOUBLE PRECISION (Given)
-* The first axis value.
-c v2
-f V2 = DOUBLE PRECISION (Given)
-* The second axis value.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astAxDistance
-f AST_AXDISTANCE = DOUBLE PRECISION
-* The distance from the first to the second axis value.
-
-* Notes:
-* - This function will return a "bad" result value (AST__BAD) if
-* any of the input values has this value.
-* - A "bad" value will also be returned if this function is
-c invoked with the AST error status set, or if it should fail for
-f invoked with STATUS set to an error value, or if it should fail for
-* any reason.
-*--
-
-* Implementation Deficiencies;
-* - The protected interface for this function uses 1-based axis
-* numbering (like the public interface), rather than the more usual
-* zero-based system used by all other protected interfaces. There is
-* no real reason for this, and it should be changed at some time.
-
-*/
-
-/* Local Variables: */
- AstAxis *ax; /* Pointer to Axis object */
- double result; /* The returned answer */
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Validate the axis index and obtain a pointer to the required Axis. */
- (void) astValidateAxis( this, axis - 1, "astAxDistance" );
- ax = astGetAxis( this, axis - 1 );
-
-/* Use the AxisDistance method associated with the Axis. */
- if( astOK ) result = astAxisDistance( ax, v1, v2 );
-
-/* Annul the Axis pointer. */
- ax = astAnnul( ax );
-
-/* Return the result. */
- return result;
-
-}
-
-static int AxIn( AstFrame *this, int axis, double lo, double hi, double val,
- int closed, int *status ){
-/*
-*+
-* Name:
-* astAxIn
-
-* Purpose:
-* Test if an axis value lies within a given interval.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* int astAxIn( AstFrame *this, int axis, double lo, double hi, double val,
-* int closed )
-
-* Class Membership:
-* Frame member function.
-
-* Description:
-* This function returns non-zero if a given axis values lies within a
-* given axis interval.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* axis
-* The index of the axis. The first axis has index 0.
-* lo
-* The lower axis limit of the interval.
-* hi
-* The upper axis limit of the interval.
-* val
-* The axis value to be tested.
-* closed
-* If non-zero, then the lo and hi axis values are themselves
-* considered to be within the interval. Otherwise they are outside.
-
-* Returned Value:
-* Non-zero if the test value is inside the interval.
-
-* Applicability:
-* Frame
-* Uses simple Euclidean test
-* SkyFrame
-* All angles which are numerically between "lo" and "hi" are within
-* the interval. Angle outside this range are also within the interval
-* if they can be brought into the range by addition or subtraction
-* of a multiple of 2.PI.
-*-
-*/
-
-/* Local Variables: */
- AstAxis *ax; /* Pointer to Axis object */
- int result; /* Returned value */
-
-/* For speed, omit the astOK check and axis validation (since this is
- protected code, AST should get it right). Obtain a pointer to the
- required Axis. */
- ax = astGetAxis( this, axis );
-
-/* Use the AxisIn method associated with the Axis. */
- result = ax ? astAxisIn( ax, lo, hi, val, closed ) : 0;
-
-/* Annul the Axis pointer. */
- ax = astAnnul( ax );
-
-/* Return the result. */
- return result;
-}
-
-static double AxOffset( AstFrame *this, int axis, double v1, double dist, int *status ) {
-/*
-*++
-* Name:
-c astAxOffset
-f AST_AXOFFSET
-
-* Purpose:
-* Add an increment onto a supplied axis value.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "frame.h"
-c double astAxOffset( AstFrame *this, int axis, double v1, double dist )
-f RESULT = AST_AXOFFSET( THIS, AXIS, V1, DIST, STATUS )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-c This function returns an axis value formed by adding a signed axis
-f This routine returns an axis value formed by adding a signed axis
-* increment onto a supplied axis value.
-*
-* For a simple Frame, this is a trivial operation returning the
-* sum of the two supplied values. But for other derived classes
-* of Frame (such as a SkyFrame) this is not the case.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Frame.
-c axis
-f AXIS = INTEGER (Given)
-* The index of the axis to which the supplied values refer. The
-* first axis has index 1.
-c v1
-f V1 = DOUBLE PRECISION (Given)
-* The original axis value.
-c dist
-f DIST = DOUBLE PRECISION (Given)
-* The axis increment to add to the original axis value.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astAxOffset
-f AST_AXOFFSET = DOUBLE PRECISION
-* The incremented axis value.
-
-* Notes:
-* - This function will return a "bad" result value (AST__BAD) if
-* any of the input values has this value.
-* - A "bad" value will also be returned if this function is
-c invoked with the AST error status set, or if it should fail for
-f invoked with STATUS set to an error value, or if it should fail for
-* any reason.
-*--
-*/
-
-/* Local Variables: */
- AstAxis *ax; /* Pointer to Axis object */
- double result; /* The returned answer */
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Validate the axis index and obtain a pointer to the required Axis. */
- (void) astValidateAxis( this, axis - 1, "astAxOffset" );
- ax = astGetAxis( this, axis - 1 );
-
-/* Use the AxisOffset method associated with the Axis. */
- if( astOK ) result = astAxisOffset( ax, v1, dist );
-
-/* Annul the Axis pointer. */
- ax = astAnnul( ax );
-
-/* Return the result. */
- return result;
-
-}
-
-static void CheckPerm( AstFrame *this, const int *perm, const char *method, int *status ) {
-/*
-*+
-* Name:
-* astCheckPerm
-
-* Purpose:
-* Check that an array contains a valid permutation.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* void astCheckPerm( AstFrame *this, const int *perm, const char *method )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function checks the validity of a permutation array that
-* will be used to permute the order of a Frame's axes. If the
-* permutation specified by the array is not valid, an error is
-* reported and the global error status is set. Otherwise, the
-* function returns without further action.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* perm
-* Pointer to an array of integers with the same number of
-* elements as there are axes in the Frame. For each axis, the
-* corresponding integer gives the (zero based) axis index to be
-* used to identify the information for that axis (using the
-* un-permuted axis numbering). To be valid, the integers in
-* this array should therefore all lie in the range zero to
-* (naxes-1) inclusive, where "naxes" is the number of Frame
-* axes, and each value should occur exactly once.
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function
-* to validate a permutation array. This method name is used
-* solely for constructing error messages.
-
-* Notes:
-* - Error messages issued by this function refer to the external
-* (public) numbering system used for axes (which is one-based),
-* whereas zero-based axis indices are used internally.
-*-
-*/
-
-/* Local Variables: */
- int *there; /* Pointer to temporary array */
- int axis; /* Loop counter for axes */
- int naxes; /* Number of Frame axes */
- int valid; /* Permutation array is valid? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Initialise. */
- valid = 1;
-
-/* Obtain the number of Frame axes and allocate a temporary array of integers
- with the same number of elements. */
- naxes = astGetNaxes( this );
- there = astMalloc( sizeof( int ) * (size_t) naxes );
- if ( astOK ) {
-
-/* Initialise the temporary array to zero. */
- for ( axis = 0; axis < naxes; axis++ ) there[ axis ] = 0;
-
-/* Scan the permutation array, checking that each permuted axis index it
- contains is within the correct range. Note an error and quit checking
- if an invalid value is found. */
- for ( axis = 0; axis < naxes; axis++ ) {
- if ( ( perm[ axis ] < 0 ) || ( perm[ axis ] >= naxes ) ) {
- valid = 0;
- break;
-
-/* Use the temporary array to count how many times each valid axis index
- occurs. */
- } else {
- there[ perm[ axis ] ]++;
- }
- }
-
-/* If all the axis indices were within range, check to ensure that each value
- occurred only once. */
- if ( valid ) {
- for ( axis = 0; axis < naxes; axis++ ) {
-
-/* Note an error and quit checking if any value did not occur exactly once. */
- if ( there[ axis ] != 1 ) {
- valid = 0;
- break;
- }
- }
- }
- }
-
-/* Free the temporary array. */
- there = astFree( there );
-
-/* If an invalid permutation was detected and no other error has
- occurred, then report an error (note we convert to one-based axis
- numbering in the error message). */
- if ( !valid && astOK ) {
- astError( AST__PRMIN, "%s(%s): Invalid axis permutation array.", status,
- method, astGetClass( this ) );
- astError( AST__PRMIN, "Each axis index should lie in the range 1 to %d "
- "and should occur only once.", status, naxes );
- }
-}
-
-static void CleanAttribs( AstObject *this_object, int *status ) {
-/*
-* Name:
-* CleanAttribs
-
-* Purpose:
-* Clear any invalid set attribute values.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frame.h"
-* void CleanAttribs( AstObject *this_object, int *status )
-
-* Class Membership:
-* Frame member function (over-rides the protected astCleanAttribs
-* method inherited from the Object class).
-
-* Description:
-* This function clears any attributes that are currently set to
-* invalid values in thr supplied object.
-
-* Parameters:
-* this
-* Pointer to the Object to be cleaned.
-
-*/
-
-/* Local Variables; */
- AstAxis *ax;
- AstFrame *this;
- int i;
- int nax;
- int reporting;
-
-/* Check inherited status */
- if( !astOK ) return;
-
-/* Get a pointer to the Frame structure. */
- this = (AstFrame *) this_object;
-
-/* Defer error reporting, as required by the astCLEAN_ATTRIB macro. */
- reporting = astReporting( 0 );
-
-/* Clean attributes in any Objects contained within "this". */
- nax = astGetNaxes( this );
- for( i = 0; i < nax; i++ ) {
- ax = astGetAxis( this, i );
- astCleanAttribs( ax );
- ax = astAnnul( ax );
- }
-
-/* Clean attributes of this class. */
- astCLEAN_ATTRIB(System)
- astCLEAN_ATTRIB(AlignSystem)
-
-/* Re-establish error reporting. */
- astReporting( reporting );
-
-/* Invoke the method inherited form the parent to clean attributes
- defined by the parent class. */
- (*parent_cleanattribs)( this_object, status );
-}
-
-static char *CleanDomain( char *domain, int *status ) {
-/*
-* Name:
-* CleanDomain
-
-* Purpose:
-* Clean a Domain string and convert to upper case.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frame.h"
-* char *CleanDomain( char *domain, int *status )
-
-* Class Membership:
-* Frame member function.
-
-* Description:
-* This function removes all white space from a string and converts
-* other characters to upper case. It is intended for cleaning up
-* values supplied for the Domain attribute of a Frame.
-
-* Parameters:
-* domain
-* Pointer to the null terminated Domain string to be modified.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The pointer value "domain" is always returned (even under error
-* conditions).
-*/
-
-/* Local Variables: */
- int i; /* Loop counter for characters */
- int j; /* Good character count */
-
-/* Check the global error status. */
- if ( !astOK ) return domain;
-
-/* Eliminate white space characters and convert the rest to upper
- case. */
- for ( i = j = 0; domain[ i ]; i++ ) {
- if ( !isspace( domain[ i ] ) ) domain[ j++ ] = toupper( domain[ i ] );
- }
- domain[ j ] = '\0';
-
-/* Return the string pointer. */
- return domain;
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frame.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Frame member function (over-rides the astClearAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* Frame, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function uses one-based axis numbering so that it is
-* suitable for external (public) use.
-*/
-
-/* Local Variables: */
- AstAxis *ax; /* Pointer to Axis */
- AstFrame *pfrm; /* Pointer to primary Frame containing axis */
- AstFrame *this; /* Pointer to the Frame structure */
- char pfrm_attrib[ 100 ]; /* Primary Frame attribute */
- char *axis_attrib; /* Pointer to axis attribute name */
- const char *old_attrib; /* Pointer to supplied attribute name string */
- int axis; /* Frame axis number */
- int axis_nc; /* No. characters in axis attribute name */
- int free_axis_attrib; /* Should axis_attrib be freed? */
- int has_axis; /* Does attrib name include axis specifier? */
- int len; /* Length of attrib string */
- int nc; /* No. characters read by astSscanf */
- int oldrep; /* Original error reporting state */
- int paxis; /* Axis index within primary frame */
- int used; /* Could the setting string be used? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Frame structure. */
- this = (AstFrame *) this_object;
-
-/* Set a flag indicating if the attribute name includes an axis
- specifier. */
- has_axis = ( strchr( attrib, '(' ) != NULL );
-
-/* A flag indicating that we do not need to free the axis_attrib memory. */
- free_axis_attrib = 0;
-
-/* Initialise things to avoid compiler warnings. */
- axis_attrib = NULL;
- old_attrib = NULL;
-
-/* Jump back to here if we are trying the same attribute but with an explicit
- axis "(1)" added to the end of the name. */
-L1:
-
-/* Obtain the length of the "attrib" string. */
- len = strlen( attrib );
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* Digits. */
-/* ------- */
- if ( !strcmp( attrib, "digits" ) ) {
- astClearDigits( this );
-
-/* Digits(axis). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "digits(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
-
-/* There is no function to clear the Digits attribute for an axis
- directly, so obtain a pointer to the Axis and use this to clear the
- attribute. */
- (void) astValidateAxis( this, axis - 1, "astClearDigits(axis)" );
- ax = astGetAxis( this, axis - 1 );
- astClearAxisDigits( ax );
- ax = astAnnul( ax );
-
-/* Direction(axis). */
-/* ---------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "direction(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearDirection( this, axis - 1 );
-
-/* Epoch. */
-/* ------ */
- } else if ( !strcmp( attrib, "epoch" ) ) {
- astClearEpoch( this );
-
-/* Top(axis). */
-/* ---------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "top(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearTop( this, axis - 1 );
-
-/* Bottom(axis). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "bottom(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearBottom( this, axis - 1 );
-
-/* Domain. */
-/* ------- */
- } else if ( !strcmp( attrib, "domain" ) ) {
- astClearDomain( this );
-
-/* Format(axis). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "format(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearFormat( this, axis - 1 );
-
-/* Label(axis). */
-/* ------------ */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "label(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearLabel( this, axis - 1 );
-
-/* MatchEnd. */
-/* --------- */
- } else if ( !strcmp( attrib, "matchend" ) ) {
- astClearMatchEnd( this );
-
-/* MaxAxes. */
-/* -------- */
- } else if ( !strcmp( attrib, "maxaxes" ) ) {
- astClearMaxAxes( this );
-
-/* MinAxes. */
-/* -------- */
- } else if ( !strcmp( attrib, "minaxes" ) ) {
- astClearMinAxes( this );
-
-/* Permute. */
-/* -------- */
- } else if ( !strcmp( attrib, "permute" ) ) {
- astClearPermute( this );
-
-/* PreserveAxes. */
-/* ------------- */
- } else if ( !strcmp( attrib, "preserveaxes" ) ) {
- astClearPreserveAxes( this );
-
-/* Symbol(axis). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "symbol(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearSymbol( this, axis - 1 );
-
-/* System. */
-/* ------- */
- } else if ( !strcmp( attrib, "system" ) ) {
- astClearSystem( this );
-
-/* AlignSystem. */
-/* ------------ */
- } else if ( !strcmp( attrib, "alignsystem" ) ) {
- astClearAlignSystem( this );
-
-/* Title. */
-/* ------ */
- } else if ( !strcmp( attrib, "title" ) ) {
- astClearTitle( this );
-
-/* Unit(axis). */
-/* ----------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "unit(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearUnit( this, axis - 1 );
-
-/* ObsLat. */
-/* ------- */
- } else if ( !strcmp( attrib, "obslat" ) ) {
- astClearObsLat( this );
-
-/* ObsLon. */
-/* ------- */
- } else if ( !strcmp( attrib, "obslon" ) ) {
- astClearObsLon( this );
-
-/* ObsAlt. */
-/* ------- */
- } else if ( !strcmp( attrib, "obsalt" ) ) {
- astClearObsAlt( this );
-
-/* Dut1 */
-/* --- */
- } else if ( !strcmp( attrib, "dut1" ) ) {
- astClearDut1( this );
-
-/* Read-only attributes. */
-/* --------------------- */
-/* Test if the attribute name matches any of the read-only attributes
- of this class. If it does, then report an error. */
- } else if ( !strcmp( attrib, "naxes" ) ||
- !strncmp( attrib, "normunit", 8 ) ) {
- astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
- "value for a %s.", status, attrib, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Other axis attributes. */
-/* ---------------------- */
-/* If the attribute was not identified above, but appears to refer to
- a Frame axis, then it may refer to an Axis object of a derived type
- (which has additional attributes not recognised here). */
- } else if( !free_axis_attrib && ( nc = 0,
- ( 1 == astSscanf( attrib, "%*[^()]%n(%d)%n",
- &axis_nc, &axis, &nc ) )
- && ( nc >= len ) ) ) {
-
-/* Validate the axis index and extract the attribute name. */
- (void) astValidateAxis( this, axis - 1, "astClear" );
- axis_attrib = astString( attrib, axis_nc );
-
-/* Obtain a pointer to the Axis object. */
- ax = astGetAxis( this, axis - 1 );
- if( astOK ) {
-
-/* Assume that we will be able to use the attribute name. */
- used = 1;
-
-/* Temporarily switch off error reporting so that if the following attempt
- to access the axis attribute fails, we can try to interpret the
- attribute name as an attribute of the primary Frame containing the
- specified axis. Any errors reported in this context will simply be
- ignored, in particularly they are not deferred for later delivery. */
- oldrep = astReporting( 0 );
-
-/* Use the Axis astClearAttrib method to clear the attribute value. */
- astClearAttrib( ax, axis_attrib );
-
-/* If the above call failed with a status of AST__BADAT, indicating that
- the attribute name was not recognised, clear the status so that we can
- try to interpret the attribute name as an attribute of the primary Frame
- containing the specified axis. */
- if( astStatus == AST__BADAT ) {
- astClearStatus;
-
-/* Find the primary Frame containing the specified axis. */
- astPrimaryFrame( this, axis - 1, &pfrm, &paxis );
-
-/* Only attempt to use the primary Frame if it is not the same as "this"
- - otherwise we could end up in an infinite loop. */
- if( pfrm != this ) {
-
-/* Modify the attribute name to refer to the axis numbering of the
- primary frame. */
- sprintf( pfrm_attrib, "%s(%d)", axis_attrib, paxis + 1 );
-
-/* Attempt to clear the attribute as an attribute of the primary Frame. */
- astClearAttrib( pfrm, pfrm_attrib );
-
-/* If this failed, clear the status and indicate that we have not managed to
- use the attribute name. */
- if( !astOK ) {
- astClearStatus;
- used = 0;
- }
-
- } else {
- used = 0;
- }
-
-/* If not found attempt to clear the attribute value in the Axis, omitting
- the axis index. */
- if( ! used ) {
- astClearAttrib( pfrm, axis_attrib );
- if( !astOK ) {
- astClearStatus;
- } else {
- used = 1;
- }
- }
-
-/* Annul the primary Frame pointer. */
- pfrm = astAnnul( pfrm );
- }
-
-/* Re-instate the original error reporting state. */
- astReporting( oldrep );
-
-/* If we could not use the attribute name, attempt to clear the axis
- attribute again, this time retaining the error report. This is done
- to ensure the user gets an appropriate error message. */
- if( !used ) astClearAttrib( ax, axis_attrib );
- }
-
-/* Annul the Axis pointer and free the memory holding the attribute
- name. */
- ax = astAnnul( ax );
- axis_attrib = astFree( axis_attrib );
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute is still not recognised, and the Frame has only 1 axis,
- and the attribute name does not already include an axis specifier, try
- again after appending "(1)" to the end of the attribute name. */
- } else if( !has_axis && astGetNaxes( this ) == 1 ) {
-
-/* Take a copy of the supplied name, allowing 3 extra characters for the
- axis specifier "(1)". */
- axis_attrib = astMalloc( len + 4 );
- if( axis_attrib ) memcpy( axis_attrib, attrib, len );
-
-/* Indicate we should free the axis_attrib memory. */
- free_axis_attrib = 1;
-
-/* Add in the axis specifier. */
- strcpy( axis_attrib + len, "(1)" );
-
-/* Use the new attribute name instead of the supplied name. */
- old_attrib = attrib;
- attrib = axis_attrib;
-
-/* Indicate the attribute name now has an axis specifier. */
- has_axis = 1;
-
-/* Jump back to try interpreting the new attribute name. */
- goto L1;
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute name is still not recognised, pass it on to the parent
- method for further interpretation. First re-instate the original attrib
- name string if it was changed above. */
- } else {
- if( free_axis_attrib ) {
- attrib = old_attrib;
- axis_attrib = astFree( axis_attrib );
- }
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static void ClearUnit( AstFrame *this, int axis, int *status ) {
-/*
-* Name:
-* ClearUnit
-
-* Purpose:
-* Clear the Unit attribute of a Frame.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* void ClearUnit( AstFrame *this, int axis, int *status )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function clears the Unit value for an axis of a Frame.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* axis
-* The number of the axis (zero-based) for which the Unit value is to
-* be cleared.
-* unit
-* The new value to be set.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void.
-*/
-
-/* Local Variables: */
- AstAxis *ax; /* Pointer to Axis object */
- const char *units; /* Pointer to units string */
- char *old_units; /* Pointer to copy of original units */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis, "astSetUnit" );
-
-/* Do nothing more if the attribute is already cleared. */
- if( astTestUnit( this, axis ) ) {
-
-/* Obtain a pointer to the required Axis. */
- ax = astGetAxis( this, axis );
-
-/* Save a copy of the old units. */
- units = astGetAxisUnit( ax );
- old_units = astStore( NULL, units, strlen( units ) + 1 );
-
-/* Clear the Axis Unit attribute value, and then get a pointer to the
- new default Units string. */
- astClearAxisUnit( ax );
- units = astGetUnit( this, axis );
-
-/* The new unit may require the Label and/or Symbol to be changed, but
- only if the Frames ActiveUnit flag is set. */
- if( astGetActiveUnit( this ) ) NewUnit( ax, old_units, units,
- "astSetUnit", astGetClass( this ), status );
-
-/* Free resources. */
- old_units = astFree( old_units );
-
-/* Annul the Axis pointer. */
- ax = astAnnul( ax );
- }
-}
-
-static int ConsistentMaxAxes( AstFrame *this, int value, int *status ) {
-/*
-* Name:
-* ConsistentMaxAxes
-
-* Purpose:
-* Ensure a consistent value when setting the MaxAxes attribute.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frame.h"
-* int ConsistentMaxAxes( AstFrame *this, int value, int *status )
-
-* Class Membership:
-* Frame member function.
-
-* Description:
-* This function accepts a value which is to be set for a Frame's MaxAxes
-* attribute and returns an appropriately adjusted value to be assigned
-* to the Frame structure's max_axes component. If necessary, the Frame's
-* MinAxes attribute is adjusted to remain consistent with the new MaxAxes
-* value (but note that the MaxAxes value itself is not assigned by this
-* function).
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* value
-* The new value being set for the MaxAxes attribute.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The value to be assigned to the max_axes component.
-
-* Notes:
-* - A value of -INT_MAX will be returned if this function is
-* invoked with the global error status set, or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- int result; /* Result to be returned */
-
-/* Check the global error status. */
- if ( !astOK ) return -INT_MAX;
-
-/* Ensure that the result value isn't negative. */
- result = ( value >= 0 ) ? value : 0;
-
-/* Check if the MinAxes attribute is set. If not, its default value will be
- consistent with the MaxAxes value (the DefaultMinAxes function ensures
- this). Otherwise, obtain its value to check for consistency. */
- if ( astTestMinAxes( this ) ) {
-
-/* If necessary, set a new MinAxes value to prevent it exceeding the MaxAxes
- value about to be returned. */
- if ( astGetMinAxes( this ) > result ) astSetMinAxes( this, result );
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = -INT_MAX;
-
-/* Return the result. */
- return result;
-}
-
-static int ConsistentMinAxes( AstFrame *this, int value, int *status ) {
-/*
-* Name:
-* ConsistentMinAxes
-
-* Purpose:
-* Ensure a consistent value when setting the MinAxes attribute.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frame.h"
-* int ConsistentMinAxes( AstFrame *this, int value, int *status )
-
-* Class Membership:
-* Frame member function.
-
-* Description:
-* This function accepts a value which is to be set for a Frame's MinAxes
-* attribute and returns an appropriately adjusted value to be assigned
-* to the Frame structure's min_axes component. If necessary, the Frame's
-* MaxAxes attribute is adjusted to remain consistent with the new MinAxes
-* value (but note that the MinAxes value itself is not assigned by this
-* function).
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* value
-* The new value being set for the MinAxes attribute.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The value to be assigned to the min_axes component.
-
-* Notes:
-* - A value of -INT_MAX will be returned if this function is
-* invoked with the global error status set, or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- int result; /* Result to be returned */
-
-/* Check the global error status. */
- if ( !astOK ) return -INT_MAX;
-
-/* Ensure that the result value isn't negative. */
- result = ( value >= 0 ) ? value : 0;
-
-/* Check if the MaxAxes attribute is set. If not, its default value will be
- consistent with the MinAxes value (the DefaultMaxAxes function ensures
- this). Otherwise, obtain its value to check for consistency. */
- if ( astTestMaxAxes( this ) ) {
-
-/* If necessary, set a new MaxAxes value to prevent it being less than the
- MinAxes value about to be returned. */
- if ( astGetMaxAxes( this ) < result ) astSetMaxAxes( this, result );
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = -INT_MAX;
-
-/* Return the result. */
- return result;
-}
-
-static AstFrameSet *Convert( AstFrame *from, AstFrame *to,
- const char *domainlist, int *status ) {
-/*
-*++
-* Name:
-c astConvert
-f AST_CONVERT
-
-* Purpose:
-* Determine how to convert between two coordinate systems.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "frame.h"
-c AstFrameSet *astConvert( AstFrame *from, AstFrame *to,
-c const char *domainlist )
-f RESULT = AST_CONVERT( FROM, TO, DOMAINLIST, STATUS )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function compares two Frames and determines whether it is
-* possible to convert between the coordinate systems which they
-* represent. If conversion is possible, it returns a FrameSet
-* which describes the conversion and which may be used (as a
-* Mapping) to transform coordinate values in either direction.
-*
-* The same function may also be used to determine how to convert
-* between two FrameSets (or between a Frame and a FrameSet, or
-* vice versa). This mode is intended for use when (for example)
-* two images have been calibrated by attaching a FrameSet to each.
-c astConvert might then be used to search for a
-f AST_CONVERT might then be used to search for a
-* celestial coordinate system that both images have in common, and
-* the result could then be used to convert between the pixel
-* coordinates of both images -- having effectively used their
-* celestial coordinate systems to align them.
-*
-* When using FrameSets, there may be more than one possible
-* intermediate coordinate system in which to perform the
-* conversion (for instance, two FrameSets might both have
-* celestial coordinates, detector coordinates, pixel coordinates,
-* etc.). A comma-separated list of coordinate system domains may
-* therefore be given which defines a priority order to use when
-* selecting the intermediate coordinate system. The path used for
-* conversion must go via an intermediate coordinate system whose
-* Domain attribute matches one of the domains given. If conversion
-* cannot be achieved using the first domain, the next one is
-* considered, and so on, until success is achieved.
-
-* Parameters:
-c from
-f FROM = INTEGER (Given)
-* Pointer to a Frame which represents the "source" coordinate
-* system. This is the coordinate system in which you already
-* have coordinates available.
-*
-* If a FrameSet is given, its current Frame (as determined by
-* its Current attribute) is taken to describe the source
-* coordinate system. Note that the Base attribute of this
-* FrameSet may be modified by this function to indicate which
-* intermediate coordinate system was used (see under
-* "FrameSets" in the "Applicability" section for details).
-c to
-f TO = INTEGER (Given)
-* Pointer to a Frame which represents the "destination"
-* coordinate system. This is the coordinate system into which
-* you wish to convert your coordinates.
-*
-* If a FrameSet is given, its current Frame (as determined by
-* its Current attribute) is taken to describe the destination
-* coordinate system. Note that the Base attribute of this
-* FrameSet may be modified by this function to indicate which
-* intermediate coordinate system was used (see under
-* "FrameSets" in the "Applicability" section for details).
-c domainlist
-f DOMAINLIST = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated character string containing a
-f A character string containing a
-* comma-separated list of Frame domains. This may be used to
-* define a priority order for the different intermediate
-* coordinate systems that might be used to perform the
-* conversion.
-*
-* The function will first try to obtain a conversion by making
-* use only of an intermediate coordinate system whose Domain
-* attribute matches the first domain in this list. If this
-* fails, the second domain in the list will be used, and so on,
-* until conversion is achieved. A blank domain (e.g. two
-* consecutive commas) indicates that all coordinate systems
-* should be considered, regardless of their domains.
-*
-* This list is case-insensitive and all white space is ignored.
-* If you do not wish to restrict the domain in this way,
-c you should supply an empty string. This is normally
-f you should supply a blank string. This is normally
-* appropriate if either of the source or destination coordinate
-* systems are described by Frames (rather than FrameSets),
-* since there is then usually only one possible choice of
-* intermediate coordinate system.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astConvert()
-f AST_CONVERT = INTEGER
-* If the requested coordinate conversion is possible, the
-* function returns a pointer to a FrameSet which describes the
-* conversion. Otherwise, a null Object pointer (AST__NULL) is
-* returned without error.
-*
-* If a FrameSet is returned, it will contain two Frames. Frame
-* number 1 (its base Frame) will describe the source coordinate
-c system, corresponding to the "from" parameter. Frame number 2
-f system, corresponding to the FROM argument. Frame number 2
-* (its current Frame) will describe the destination coordinate
-c system, corresponding to the "to" parameter. The Mapping
-f system, corresponding to the TO argument. The Mapping
-* which inter-relates these two Frames will perform the
-* required conversion between their respective coordinate
-* systems.
-*
-* Note that a FrameSet may be used both as a Mapping and as a
-* Frame. If the result is used as a Mapping (e.g. with
-c astTran2), then it provides a means of converting coordinates
-f AST_TRAN2), then it provides a means of converting coordinates
-* from the source to the destination coordinate system (or
-* vice versa if its inverse transformation is selected). If it
-* is used as a Frame, its attributes will describe the
-* destination coordinate system.
-
-* Applicability:
-* DSBSpecFrame
-* If the AlignSideBand attribute is non-zero, alignment occurs in the
-* upper sideband expressed within the spectral system and standard of
-* rest given by attributes AlignSystem and AlignStdOfRest. If
-* AlignSideBand is zero, the two DSBSpecFrames are aligned as if
-* they were simple SpecFrames (i.e. the SideBand is ignored).
-* Frame
-* This function applies to all Frames. Alignment occurs within the
-* coordinate system given by attribute AlignSystem.
-* FrameSet
-c If either of the "from" or "to" parameters is a pointer to a
-f If either of the FROM or TO arguments is a pointer to a
-c FrameSet, then astConvert will attempt to convert from the
-f FrameSet, then AST_CONVERT will attempt to convert from the
-c coordinate system described by the current Frame of the "from"
-f coordinate system described by the current Frame of the FROM
-c FrameSet to that described by the current Frame of the "to"
-f FrameSet to that described by the current Frame of the TO
-* FrameSet.
-*
-* To achieve this, it will consider all of the Frames within
-* each FrameSet as a possible way of reaching an intermediate
-* coordinate system that can be used for the conversion. There
-* is then the possibility that more than one conversion path
-* may exist and, unless the choice is sufficiently restricted
-c by the "domainlist" string, the sequence in which the Frames
-f by the DOMAINLIST string, the sequence in which the Frames
-* are considered can be important. In this case, the search
-* for a conversion path proceeds as follows:
-c - Each field in the "domainlist" string is considered in turn.
-f - Each field in the DOMAINLIST string is considered in turn.
-* - The Frames within each FrameSet are considered in a
-* specific order: (1) the base Frame is always considered
-* first, (2) after this come all the other Frames in
-* Frame-index order (but omitting the base and current Frames),
-* (3) the current Frame is always considered last. However, if
-* either FrameSet's Invert attribute is set to a non-zero value
-* (so that the FrameSet is inverted), then its Frames are
-* considered in reverse order. (Note that this still means that
-* the base Frame is considered first and the current Frame
-* last, because the Invert value will also cause these Frames
-* to swap places.)
-* - All source Frames are first considered (in the appropriate
-* order) for conversion to the first destination Frame. If no
-* suitable intermediate coordinate system emerges, they are
-* then considered again for conversion to the second
-* destination Frame (in the appropriate order), and so on.
-* - Generally, the first suitable intermediate coordinate
-* system found is used. However, the overall Mapping between
-* the source and destination coordinate systems is also
-* examined. Preference is given to cases where both the
-* forward and inverse transformations are defined (as indicated
-* by the TranForward and TranInverse attributes). If only one
-* transformation is defined, the forward one is preferred.
-* - If the domain of the intermediate coordinate system matches
-c the current "domainlist" field, the conversion path is
-f the current DOMAINLIST field, the conversion path is
-c accepted. Otherwise, the next "domainlist" field is considered
-f accepted. Otherwise, the next DOMAINLIST field is considered
-* and the process repeated.
-*
-* If conversion is possible, the Base attributes of the two
-* FrameSets will be modified on exit to identify the Frames
-* used to access the intermediate coordinate system which was
-* finally accepted.
-*
-* Note that it is possible to force a particular Frame within a
-* FrameSet to be used as the basis for the intermediate
-* coordinate system, if it is suitable, by (a) focussing
-* attention on
-c it by specifying its domain in the "domainlist" string, or (b)
-f it by specifying its domain in the DOMAINLIST string, or (b)
-* making it the base Frame, since this is always considered
-* first.
-* SpecFrame
-* Alignment occurs within the spectral system and standard of rest
-* given by attributes AlignSystem and AlignStdOfRest.
-* TimeFrame
-* Alignment occurs within the time system and time scale given by
-* attributes AlignSystem and AlignTimeScale.
-
-* Examples:
-c cvt = astConvert( a, b, "" );
-f CVT = AST_CONVERT( A, B, ' ', STATUS )
-* Attempts to convert between the coordinate systems represented
-c by "a" and "b" (assumed to be Frames). If successful, a FrameSet
-f by A and B (assumed to be Frames). If successful, a FrameSet
-c is returned via the "cvt" pointer which may be used to apply the
-f is returned via the CVT pointer which may be used to apply the
-c conversion to sets of coordinates (e.g. using astTran2).
-f conversion to sets of coordinates (e.g. using AST_TRAN2).
-c cvt = astConvert( astSkyFrame(""), astSkyFrame("Equinox=2005"), "" );
-f CVT = AST_CONVERT( AST_SKYFRAME( ' ', STATUS ), AST_SKYFRAME( 'Equinox=2005', STATUS ), ' ', STATUS )
-* Creates a FrameSet which describes precession in the default
-* FK5 celestial coordinate system between equinoxes J2000 (also
-c the default) and J2005. The returned "cvt" pointer may then
-f the default) and J2005. The returned CVT pointer may then
-c be passed to astTran2 to apply this precession correction to
-f be passed to AST_TRAN2 to apply this precession correction to
-* any number of coordinate values given in radians.
-*
-* Note that the returned FrameSet also contains information
-* about how to format coordinate values. This means that
-* setting its Report attribute to 1 is a simple way to obtain
-* printed output (formatted in sexagesimal notation) to show
-* the coordinate values before and after conversion.
-c cvt = astConvert( a, b, "sky,detector," );
-f CVT = AST_CONVERT( A, B, 'SKY,DETECTOR,', STATUS )
-* Attempts to convert between the coordinate systems
-c represented by the current Frames of "a" and "b"
-f represented by the current Frames of A and B
-* (now assumed to be FrameSets), via the intermediate "SKY"
-* coordinate system. This, by default, is the Domain
-* associated with a celestial coordinate system represented by
-* a SkyFrame.
-*
-* If this fails (for example, because either FrameSet lacks
-* celestial coordinate information), then the user-defined
-* "DETECTOR" coordinate system is used instead. If this also
-* fails, then all other possible ways of achieving conversion
-* are considered before giving up.
-*
-c The returned pointer "cvt" indicates whether conversion was
-f The returned pointer CVT indicates whether conversion was
-* possible and will have the value AST__NULL if it was not. If
-c conversion was possible, "cvt" will point at a new FrameSet
-f conversion was possible, CVT will point at a new FrameSet
-* describing the conversion.
-*
-* The Base attributes of the two FrameSets
-c will be set by astConvert to indicate which of their Frames was
-f will be set by AST_CONVERT to indicate which of their Frames was
-* used for the intermediate coordinate system. This means that
-* you can subsequently determine which coordinate system was
-* used by enquiring the Domain attribute of either base Frame.
-
-* Notes:
-* - The Mapping represented by the returned FrameSet results in
-* alignment taking place in the coordinate system specified by the
-c AlignSystem attribute of the "to" Frame. See the description of the
-f AlignSystem attribute of the TO Frame. See the description of the
-* AlignSystem attribute for further details.
-* - When aligning (say) two images, which have been calibrated by
-* attaching FrameSets to them, it is usually necessary to convert
-* between the base Frames (representing "native" pixel
-* coordinates) of both FrameSets. This may be achieved by
-* inverting the FrameSets (e.g. using astInvert) so as to
-* interchange their base and current Frames before using
-* astConvert.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-
-* Implementation Notes:
-* This function is simply a wrap-up for the protected astConvertX
-* method which performs the required processing but swaps the order
-* of the first two arguments. This is a trick to allow the
-* astConvert method to be over-ridden by derived classes on the
-* basis of the class of either of the first two arguments.
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Invoke the "astConvertX" method with the first two arguments
- swapped. */
- return astConvertX( to, from, domainlist );
-}
-
-static AstFrameSet *ConvertX( AstFrame *to, AstFrame *from,
- const char *domainlist, int *status ) {
-/*
-*+
-* Name:
-* astConvertX
-
-* Purpose:
-* Determine how to convert between two coordinate systems.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* AstFrameSet *astConvertX( AstFrame *to, AstFrame *from,
-* const char *domainlist )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function performs the processing for the public astConvert
-* method and has exactly the same interface except that the order
-* of the first two arguments is swapped. This is a trick to allow
-* the astConvert method to be over-ridden by derived classes on
-* the basis of the class of either of its first two arguments.
-*
-* See the astConvert method for details of the interface.
-*-
-
-* Implementation Deficiencies:
-* - This function's job is basically to negotiate with two Frames
-* to try and find a mutually agreeable coordinate system for
-* conversion. Ideally, it should be able to juggle the number of
-* axes, etc. to do this. At present, however, the implementation
-* is much simpler. This is adequate for the Frame classes which
-* exist at the time of writing, but the implementation may need
-* beefing up in future.
-* - One likely problem is with attributes which default in both
-* the source and destination Frames. This means they also default
-* in the common coordinate system. If these default values were to
-* differ when matching different target Frames, however, we would
-* be in trouble, because the common coordinate system would not
-* then be remaining constant. The longer-term solution to this is
-* probably to provide some mechanism to "fix" all attribute values
-* for a Frame, by taking any attributes that are un-set and
-* explicitly setting a firm value (equal to the default) so they
-* cannot then change.
-*/
-
-/* Local Variables: */
- AstFrameSet *result; /* Pointer to Mapping to be returned */
- AstFrame *ftmp; /* Pointer to returned Frame */
- AstMapping **map1_address; /* Location of first Mapping pointer */
- AstMapping **map2_address; /* Location of second Mapping pointer */
- AstMapping *common0; /* Initial common coordinate system */
- AstMapping *common1; /* Improved common coordinate system */
- AstMapping *common2; /* Final common coordinate system */
- AstMapping *frame1; /* Pointer to Frame for first match */
- AstMapping *frame2; /* Pointer to Frame for second match */
- AstMapping *from_map; /* Pointer to "from" Mapping */
- AstMapping *map; /* Pointer to conversion Mapping */
- AstMapping *result_map; /* Pointer to result Mapping */
- AstMapping *tmp; /* Temporary Mapping pointer */
- AstMapping *to_map; /* Pointer to "to" Mapping */
- char *domain; /* Pointer to result domain */
- char *domain_end; /* Pointer to null at end of domain */
- char *domainlist_copy; /* Pointer to copy of domainlist */
- int *axes1; /* Pointer to axis assignments */
- int *axes2; /* Pointer to axis assignments */
- int best_score; /* Score assigned to best match */
- int icom; /* Common coordinate system loop counter */
- int match1; /* First match succeeded? */
- int match2; /* Second match succeeded? */
- int match; /* Overall match found? */
- int perfect; /* Perfect match found? */
- int score; /* Score assigned to match */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Further initialisation. */
- result_map = NULL;
-
-/* Make a temporary copy of the domains list. */
- domainlist_copy = astStore( NULL, domainlist,
- strlen( domainlist ) + (size_t) 1 );
- if ( astOK ) {
-
-/* Loop to inspect each comma-separated field in the domains list
- until an error occurs, all the domains are used up, or a match is
- found. */
- domain = domainlist_copy;
- match = 0;
- while ( astOK && domain && !match ) {
-
-/* Change the comma at the end of each field to a null to terminate
- the domain. Then convert the domain to upper case and eliminate
- white space. */
- if ( ( domain_end = strchr( domain, ',' ) ) ) *domain_end = '\0';
- CleanDomain( domain, status );
-
-/* For any given domain, we will ignore imperfect matches in favour of
- better ones by assigning a score to each match. Initialise the best
- score value for the current domain. */
- best_score = -1;
-
-/* Loop to consider both the "to" and "from" Frames in turn as the
- basis of a possible common coordinate system. Quit looping early if
- an error occurs or a perfect match is found. */
- perfect = 0;
- for ( icom = 0; astOK && !perfect && ( icom <= 1 ); icom++ ) {
-
-/* Make a copy of the Frame representing the initial guess at a common
- coordinate system. We will use this to probe the other
- Frame. Ensure that axes are not preserved (so that we convert to
- the common axis number/order). */
- common0 = astCopy( icom ? from : to );
- astSetPreserveAxes( common0, 0 );
-
-/* Also, if the current domain is not blank, set the Domain attribute (so
- we will only find coordinate systems which match the current
- "domainlist" field). */
- if ( *domain ) astSetDomain( common0, domain );
-
-/* Obtain a pointer to the other Frame. */
- frame1 = astClone( icom ? to : from );
-
-/* Set the address at which to store the resulting Mapping pointer. */
- map1_address = icom ? &to_map : &from_map;
-
-/* See if conversion from "frame1" to the common coordinate system is
- possible. If successful, this results in a new approximation
- ("common1") to the possible common coordinate system. */
- match1 = astMatch( common0, frame1, &axes1, &axes2,
- map1_address, &ftmp );
- common1 = (AstMapping *) ftmp;
-
-/* If successful, free memory allocated for the axis association
- arrays, which are not needed. */
- if ( astOK && match1 ) {
- axes1 = astFree( axes1 );
- axes2 = astFree( axes2 );
-
-/* Using the improved approximation to the common coordinate system,
- now test if conversion from the alternative Frame "frame2" is
- possible. */
- frame2 = astClone( icom ? from : to );
- map2_address = icom ? &from_map : &to_map;
- astSetPreserveAxes( common1, 0 );
- match2 = astMatch( common1, frame2, &axes1, &axes2,
- map2_address, &ftmp );
- common2 = (AstMapping *) ftmp;
-
-/* If successful, free memory allocated for the axis association
- arrays, which are not needed. */
- if ( astOK && match2 ) {
- axes1 = astFree( axes1 );
- axes2 = astFree( axes2 );
-
-/* Invert the "to" Mapping and concatenate the two Mappings to
- describe the conversion between the "from" and "to" Frames. Then
- simplify the result. */
- astInvert( to_map );
- tmp = (AstMapping *) astCmpMap( from_map, to_map, 1, "", status );
- map = astSimplify( tmp );
- tmp = astAnnul( tmp );
-
-/* Assign a score that favours Mappings with both transformations
- available over those with only one, and Mappings with only a
- forward transformation over those with only an inverse
- transformation. */
- score = ( astGetTranForward( map ) ? 2 : 0 ) +
- ( astGetTranInverse( map ) ? 1 : 0 );
-
-/* If the new score is better than the previous one (or is the first
- one), note that we have a possible match. */
- if ( astOK && ( score > best_score ) ) {
- match = 1;
-
-/* Update the best score and note if it indicates a perfect match (in
- which case we can stop searching at this point). */
- best_score = score;
- perfect = ( best_score >= 3 );
-
-/* Annul any previous result Mapping pointer and replace it with this
- better one. */
- if ( result_map ) result_map = astAnnul( result_map );
- result_map = astClone( map );
- }
-
-/* Annul pointers to all the intermediate Objects. */
- map = astAnnul( map );
- common2 = astAnnul( common2 );
- *map2_address = astAnnul( *map2_address );
- }
- frame2 = astAnnul( frame2 );
- common1 = astAnnul( common1 );
- *map1_address = astAnnul( *map1_address );
- }
- frame1 = astAnnul( frame1 );
- common0 = astAnnul( common0 );
- }
-
-/* Go on to consider the next field in the domains list. */
- domain = domain_end ? domain_end + 1 : NULL;
- }
- }
-
-/* Free the domain list copy. */
- domainlist_copy = astFree( domainlist_copy );
-
-/* If returning a result, build the result FrameSet. Then annul the
- result Mapping pointer. */
- if ( result_map ) {
- result = astFrameSet( from, "", status );
- astAddFrame( result, AST__BASE, result_map, to );
- result_map = astAnnul( result_map );
- }
-
-/* If an error occurred, annul the result FrameSet pointer. */
- if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static int DefaultMaxAxes( AstFrame *this, int *status ) {
-/*
-* Name:
-* DefaultMaxAxes
-
-* Purpose:
-* Obtain the MaxAxes attribute from a Frame structure, with defaulting.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frame.h"
-* int DefaultMaxAxes( AstFrame *this, int *status )
-
-* Class Membership:
-* Frame member function.
-
-* Description:
-* This function inspects the max_axes component of a Frame structure and
-* derives a value for the MaxAxes attribute. If the component's value
-* indicates that the attribute has not been set, a suitable default is
-* returned which is consistent with the state of the Frames's MinAxes
-* attribute.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The value to be used for the MaxAxes attribute.
-*/
-
-/* Local Variables. */
- int result; /* Result to be returned */
- int min_axes; /* Value of MinAxes attribute */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* If the Frame's max_axes component is set, return its value. */
- if ( this->max_axes != -INT_MAX ) {
- result = this->max_axes;
-
-/* Otherwise, the preferred default value is the number of Frame axes. */
- } else {
- result = astGetNaxes( this );
-
-/* Before returning this value, check if the MinAxes attribute is set. If it
- is, obtain its value. */
- if ( astTestMinAxes( this ) ) {
- min_axes = astGetMinAxes( this );
-
-/* If necessary, increase the MaxAxes default value so that it is not less than
- MinAxes. */
- if ( result < min_axes ) result = min_axes;
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static int DefaultMinAxes( AstFrame *this, int *status ) {
-/*
-* Name:
-* DefaultMinAxes
-
-* Purpose:
-* Obtain the MinAxes attribute from a Frame structure, with defaulting.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frame.h"
-* int DefaultMinAxes( AstFrame *this, int *status )
-
-* Class Membership:
-* Frame member function.
-
-* Description:
-* This function inspects the min_axes component of a Frame structure and
-* derives a value for the MinAxes attribute. If the component's value
-* indicates that the attribute has not been set, a suitable default is
-* returned which is consistent with the state of the Frames's MaxAxes
-* attribute.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The value to be used for the MinAxes attribute.
-*/
-
-/* Local Variables: */
- int result; /* Result to be returned */
- int max_axes; /* Value of MaxAxes attribute */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* If the Frame's min_axes component is set, return its value. */
- if ( this->min_axes != -INT_MAX ) {
- result = this->min_axes;
-
-/* Otherwise, the preferred default value is the number of Frame axes. */
- } else {
- result = astGetNaxes( this );
-
-/* Before returning this value, check if the MaxAxes attribute is set. If it
- is, obtain its value. */
- if ( astTestMaxAxes( this ) ) {
- max_axes = astGetMaxAxes( this );
-
-/* If necessary, reduce the MinAxes default value so that it does not exceed
- MaxAxes. */
- if ( result > max_axes ) result = max_axes;
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static double Distance( AstFrame *this,
- const double point1[], const double point2[], int *status ) {
-/*
-*++
-* Name:
-c astDistance
-f AST_DISTANCE
-
-* Purpose:
-* Calculate the distance between two points in a Frame.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "frame.h"
-c double astDistance( AstFrame *this,
-c const double point1[], const double point2[] )
-f RESULT = AST_DISTANCE( THIS, POINT1, POINT2, STATUS )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function finds the distance between two points whose Frame
-* coordinates are given. The distance calculated is that along
-* the geodesic curve that joins the two points.
-*
-* For example, in a basic Frame, the distance calculated will be
-* the Cartesian distance along the straight line joining the two
-* points. For a more specialised Frame describing a sky coordinate
-* system, however, it would be the distance along the great circle
-* passing through two sky positions.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Frame.
-c point1
-f POINT1( * ) = DOUBLE PRECISION (Given)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* (Naxes attribute) containing the coordinates of the first point.
-c point2
-f POINT2( * ) = DOUBLE PRECISION (Given)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* containing the coordinates of the second point.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astDistance
-f AST_DISTANCE = DOUBLE PRECISION
-* The distance between the two points.
-
-* Notes:
-* - This function will return a "bad" result value (AST__BAD) if
-* any of the input coordinates has this value.
-* - A "bad" value will also be returned if this function is
-c invoked with the AST error status set, or if it should fail for
-f invoked with STATUS set to an error value, or if it should fail for
-* any reason.
-*--
-*/
-
-/* Local Variables: */
- double delta; /* Separation along an axis */
- double result; /* Result value to return */
- int axis; /* Loop counter for axes */
- int naxes; /* Number of Frame axes */
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain the number of Frame axes. */
- naxes = astGetNaxes( this );
- if ( astOK ) {
-
-/* Loop to determine the Cartesian distance between the points. */
- result = 0.0;
- for ( axis = 0; axis < naxes; axis++ ) {
-
-/* If any of the coordinates supplied is bad, set the distance to be
- bad and quit looping. */
- if ( ( point1[ axis ] == AST__BAD ) ||
- ( point2[ axis ] == AST__BAD ) ) {
- result = AST__BAD;
- break;
-
-/* Otherwise, accumulate the sum of squared separations along each
- axis. */
- } else {
- delta = point1[ axis ] - point2[ axis ];
- result += ( delta * delta );
- }
- }
-
-/* Take the square root to find the distance (if valid). */
- if ( result != AST__BAD ) result = sqrt( result );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two Frames are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frame.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* Frame member function (over-rides the astEqual protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two Frames are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Frame.
-* that
-* Pointer to the second Frame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the Frames are equivalent, zero otherwise.
-
-* Notes:
-* - The two Frames are considered equivalent if the Mapping between
-* them is a UnitMap.
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFrame *that; /* Pointer to the second Frame structure */
- AstFrame *this; /* Pointer to the first Frame structure */
- AstFrameSet *fs; /* FrameSet connecting the two Frames */
- AstMapping *map1; /* Mapping connecting the two Frames */
- AstMapping *map2; /* Simplified mapping connecting two Frames */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Checks that the second object is of the same class as the first . */
- if( !strcmp( astGetClass( this_object ), astGetClass( that_object ) ) ){
-
-/* Obtain pointers to the two Frame structures. */
- this = (AstFrame *) this_object;
- that = (AstFrame *) that_object;
-
-/* Get the Mapping between them, and see if it is a UnitMap. */
- fs = astConvert( that, this, "" );
- if( fs ) {
- map1 = astGetMapping( fs, AST__BASE, AST__CURRENT );
- map2 = astSimplify( map1 );
- result = astIsAUnitMap( map2 );
- map1 = astAnnul( map1 );
- map2 = astAnnul( map2 );
- fs = astAnnul( fs );
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static int Fields( AstFrame *this, int axis, const char *fmt,
- const char *str, int maxfld, char **fields,
- int *nc, double *val, int *status ) {
-/*
-*+
-* Name:
-* astFields
-
-* Purpose:
-* Identify numerical fields within a formatted Axis value.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* int astFields( AstFrame *this, int axis, const char *fmt,
-* const char *str, int maxfld, char **fields,
-* int *nc, double *val )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function identifies the numerical fields within a Frame axis
-* value that has been formatted using astAxisFormat. It assumes that
-* the value was formatted using the supplied format string. It also
-* returns the equivalent floating point value.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* axis
-* The number of the Frame axis for which the values have been
-* formatted (axis numbering starts at zero for the first axis).
-* fmt
-* Pointer to a constant null-terminated string containing the
-* format used when creating "str".
-* str
-* Pointer to a constant null-terminated string containing the
-* formatted value.
-* maxfld
-* The maximum number of fields to identify within "str".
-* fields
-* A pointer to an array of at least "maxfld" character pointers.
-* Each element is returned holding a pointer to the start of the
-* corresponding field in "str" (in the order in which they occur
-* within "str"), or NULL if no corresponding field can be found.
-* nc
-* A pointer to an array of at least "maxfld" integers. Each
-* element is returned holding the number of characters in the
-* corresponding field, or zero if no corresponding field can be
-* found.
-* val
-* Pointer to a location at which to store the value
-* equivalent to the returned field values. If this is NULL,
-* it is ignored.
-
-* Returned Value:
-* The number of fields succesfully identified and returned.
-
-* Notes:
-* - Leading and trailing spaces are ignored.
-* - If the formatted value is not consistent with the supplied format
-* string, then a value of zero will be returned, "fields" will be
-* returned holding NULLs, "nc" will be returned holding zeros, and
-* "val" is returned holding VAL__BAD.
-* - Fields are counted from the start of the formatted string. If the
-* string contains more than "maxfld" fields, then trailing fields are
-* ignored.
-* - If this function is invoked with the global error status set, or
-* if it should fail for any reason, then a value of zero will be returned
-* as the function value, and "fields", "nc" and "val" will be returned
-* holding their supplied values
-*-
-*/
-
-/* Local Variables: */
- AstAxis *ax; /* Pointer to Axis object */
- int result; /* Result field count to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Validate the axis index and obtain a pointer to the required
- Axis. */
- (void) astValidateAxis( this, axis, "astFields" );
- ax = astGetAxis( this, axis );
-
-/* Invoke the Axis astAxisFields method to perform the processing. */
- result = astAxisFields( ax, fmt, str, maxfld, fields, nc, val );
-
-/* Annul the Axis pointer. */
- ax = astAnnul( ax );
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static AstFrameSet *FindFrame( AstFrame *target, AstFrame *template,
- const char *domainlist, int *status ) {
-/*
-*++
-* Name:
-c astFindFrame
-f AST_FINDFRAME
-
-* Purpose:
-* Find a coordinate system with specified characteristics.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "frame.h"
-c AstFrameSet *astFindFrame( AstFrame *target, AstFrame *template,
-c const char *domainlist )
-f RESULT = AST_FINDFRAME( TARGET, TEMPLATE, DOMAINLIST, STATUS )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function uses a "template" Frame to search another Frame
-* (or FrameSet) to identify a coordinate system which has a
-* specified set of characteristics. If a suitable coordinate
-* system can be found, the function returns a pointer to a
-* FrameSet which describes the required coordinate system and how
-* to convert coordinates to and from it.
-*
-* This function is provided to help answer general questions about
-* coordinate systems, such as typically arise when coordinate
-* information is imported into a program as part of an initially
-* unknown dataset. For example:
-* - Is there a wavelength scale?
-* - Is there a 2-dimensional coordinate system?
-* - Is there a celestial coordinate system?
-* - Can I plot the data in ecliptic coordinates?
-*
-* You can also use this function as a means of reconciling a
-* user's preference for a particular coordinate system (for
-* example, what type of axes to draw) with what is actually
-* possible given the coordinate information available.
-*
-* To perform a search, you supply a "target" Frame (or FrameSet)
-* which represents the set of coordinate systems to be searched.
-* If a basic Frame is given as the target, this set of coordinate
-* systems consists of the one described by this Frame, plus all
-* other "virtual" coordinate systems which can potentially be
-* reached from it by applying built-in conversions (for example,
-* any of the celestial coordinate conversions known to the AST
-* library would constitute a "built-in" conversion). If a FrameSet
-* is given as the target, the set of coordinate systems to be
-* searched consists of the union of those represented by all the
-* individual Frames within it.
-*
-* To select from this large set of possible coordinate systems,
-* you supply a "template" Frame which is an instance of the type
-* of Frame you are looking for. Effectively, you then ask the
-* function to "find a coordinate system that looks like this".
-*
-* You can make your request more or less specific by setting
-* attribute values for the template Frame. If a particular
-* attribute is set in the template, then the function will only
-* find coordinate systems which have exactly the same value for
-* that attribute. If you leave a template attribute un-set,
-* however, then the function has discretion about the value the
-* attribute should have in any coordinate system it finds. The
-* attribute will then take its value from one of the actual
-* (rather than virtual) coordinate systems in the target. If the
-* target is a FrameSet, its Current attribute will be modified to
-* indicate which of its Frames was used for this purpose.
-*
-* The result of this process is a coordinate system represented by
-* a hybrid Frame which acquires some attributes from the template
-* (but only if they were set) and the remainder from the
-* target. This represents the "best compromise" between what you
-* asked for and what was available. A Mapping is then generated
-* which converts from the target coordinate system to this hybrid
-* one, and the returned FrameSet encapsulates all of this
-* information.
-
-* Parameters:
-c target
-f TARGET = INTEGER (Given)
-* Pointer to the target Frame (or FrameSet).
-*
-* Note that if a FrameSet is supplied (and a suitable
-* coordinate system is found), then its Current attribute will
-* be modified to indicate which Frame was used to obtain
-* attribute values which were not specified by the template.
-* This Frame will, in some sense, represent the "closest"
-* non-virtual coordinate system to the one you requested.
-c template
-f TEMPLATE = INTEGER (Given)
-* Pointer to the template Frame, which should be an instance of
-* the type of Frame you wish to find. If you wanted to find a
-* Frame describing a celestial coordinate system, for example,
-* then you might use a SkyFrame here. See the "Examples"
-* section for more ideas.
-c domainlist
-f DOMAINLIST = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated character string containing a
-f A character string containing a
-* comma-separated list of Frame domains. This may be used to
-* establish a priority order for the different types of
-* coordinate system that might be found.
-*
-* The function will first try to find a suitable coordinate
-* system whose Domain attribute equals the first domain in this
-* list. If this fails, the second domain in the list will be
-* used, and so on, until a result is obtained. A blank domain
-* (e.g. two consecutive commas) indicates that any coordinate
-* system is acceptable (subject to the template) regardless of
-* its domain.
-*
-* This list is case-insensitive and all white space is ignored.
-* If you do not wish to restrict the domain in this way,
-c you should supply an empty string.
-f you should supply a blank string.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astFindFrame()
-f AST_FINDFRAME = INTEGER
-* If the search is successful, the function returns a pointer
-* to a FrameSet which contains the Frame found and a
-* description of how to convert to (and from) the coordinate
-* system it represents. Otherwise, a null Object pointer
-* (AST__NULL) is returned without error.
-*
-* If a FrameSet is returned, it will contain two Frames. Frame
-* number 1 (its base Frame) represents the target coordinate
-* system and will be the same as the (base Frame of the)
-* target. Frame number 2 (its current Frame) will be a Frame
-* representing the coordinate system which the function
-* found. The Mapping which inter-relates these two Frames will
-* describe how to convert between their respective coordinate
-* systems.
-*
-* Note that a FrameSet may be used both as a Mapping and as a
-* Frame. If the result is used as a Mapping (e.g. with
-* astTran2), then it provides a means of converting coordinates
-* from the target coordinate system into the new coordinate
-* system that was found (and vice versa if its inverse
-* transformation is selected). If it is used as a Frame, its
-* attributes will describe the new coordinate system.
-
-* Applicability:
-* Frame
-* This function applies to all Frames.
-* FrameSet
-* If the target is a FrameSet, the possibility exists that
-* several of the Frames within it might be matched by the
-* template. Unless the choice is sufficiently restricted by
-c the "domainlist" string, the sequence in which Frames are
-f the DOMAINLIST string, the sequence in which Frames are
-* searched can then become important. In this case, the search
-* proceeds as follows:
-c - Each field in the "domainlist" string is considered in turn.
-f - Each field in the DOMAINLIST string is considered in turn.
-* - An attempt is made to match the template to each of the
-* target's Frames in the order: (1) the current Frame, (2) the
-* base Frame, (3) each remaining Frame in the order of being
-* added to the target FrameSet.
-* - Generally, the first match found is used. However, the
-* Mapping between the target coordinate system and the
-* resulting Frame is also examined. Preference is given to
-* cases where both the forward and inverse transformations are
-* defined (as indicated by the TranForward and TranInverse
-* attributes). If only one transformation is defined, the
-* forward one is preferred.
-* - If a match is found and the domain of the resulting Frame also
-c matches the current "domainlist" field, it is
-f matches the current DOMAINLIST field, it is
-c accepted. Otherwise, the next "domainlist" field is considered
-f accepted. Otherwise, the next DOMAINLIST field is considered
-* and the process repeated.
-*
-* If a suitable coordinate system is found, the Current
-* attribute of the target FrameSet will be modified on exit to
-* identify the Frame whose match with the target was eventually
-* accepted.
-
-* Examples:
-c result = astFindFrame( target, astFrame( 3, "" ), "" );
-f RESULT = AST_FINDFRAME( TARGET, AST_FRAME( 3, ' ', STATUS ), ' ', STATUS )
-* Searches for a 3-dimensional coordinate system in the target
-* Frame (or FrameSet). No attributes have been set in the
-c template Frame (created by astFrame), so no restriction has
-f template Frame (created by AST_FRAME), so no restriction has
-* been placed on the required coordinate system, other than
-* that it should have 3 dimensions. The first suitable Frame
-c found will be returned as part of the "result" FrameSet.
-f found will be returned as part of the RESULT FrameSet.
-c result = astFindFrame( target, astSkyFrame( "" ), "" );
-f RESULT = AST_FINDFRAME( TARGET, AST_SKYFRAME( ' ', STATUS ), ' ', STATUS )
-* Searches for a celestial coordinate system in the target
-* Frame (or FrameSet). The type of celestial coordinate system
-c is unspecified, so astFindFrame will return the first one
-f is unspecified, so AST_FINDFRAME will return the first one
-c found as part of the "result" FrameSet. If the target is
-f found as part of the RESULT FrameSet. If the target is
-* a FrameSet, then its Current attribute will be updated to
-* identify the Frame that was used.
-*
-* If no celestial coordinate system can be found, a value of
-* AST__NULL will be returned without error.
-c result = astFindFrame( target, astSkyFrame( "MaxAxes=100" ), "" );
-f RESULT = AST_FINDFRAME( TARGET, AST_SKYFRAME( 'MaxAxes=100', STATUS ), ' ', STATUS )
-* This is like the last example, except that in the event of the
-* target being a CmpFrame, the component Frames encapsulated by the
-* CmpFrame will be searched for a SkyFrame. If found, the returned
-* Mapping will included a PermMap which selects the required axes
-* from the target CmpFrame.
-*
-* This is acomplished by setting the MaxAxes attribute of the
-* template SkyFrame to a large number (larger than or equal to the
-* number of axes in the target CmpFrame). This allows the SkyFrame
-* to be used as a match for Frames containing from 2 to 100 axes.
-c result = astFindFrame( target, astSkyFrame( "System=FK5" ), "" );
-f RESULT = AST_FINDFRAME( TARGET, AST_SKYFRAME( 'System=FK5', STATUS ), ' ', STATUS )
-* Searches for an equatorial (FK5) coordinate system in the
-* target. The Equinox value for the coordinate system has not
-* been specified, so will be obtained from the target. If the
-* target is a FrameSet, its Current attribute will be updated
-* to indicate which SkyFrame was used to obtain this value.
-c result = astFindFrame( target, astFrame( 2, "" ), "sky,pixel," );
-f RESULT = AST_FINDFRAME( TARGET, AST_FRAME( 2, ' ', STATUS ), 'SKY,PIXEL,', STATUS )
-* Searches for a 2-dimensional coordinate system in the
-* target. Initially, a search is made for a suitable coordinate
-* system whose Domain attribute has the value "SKY". If this
-* search fails, a search is then made for one with the domain
-* "PIXEL". If this also fails, then any 2-dimensional
-c coordinate system is returned as part of the "result"
-f coordinate system is returned as part of the RESULT
-* FrameSet.
-*
-* Only if no 2-dimensional coordinate systems can be reached by
-* applying built-in conversions to any of the Frames in the
-* target will a value of AST__NULL be returned.
-c result = astFindFrame( target, astFrame( 1, "Domain=WAVELENGTH" ), "" );
-f RESULT = AST_FINDFRAME( TARGET, AST_FRAME( 1, 'Domain=WAVELENGTH', STATUS ), ' ', STATUS )
-* Searches for any 1-dimensional coordinate system in the
-* target which has the domain "WAVELENGTH".
-c result = astFindFrame( target, astFrame( 1, "" ), "wavelength" );
-f RESULT = AST_FINDFRAME( TARGET, AST_FRAME( 1, ' ', STATUS ), 'WAVELENGTH', STATUS )
-* This example has exactly the same effect as that above. It
-* illustrates the equivalence of the template's Domain attribute
-c and the fields in the "domainlist" string.
-f and the fields in the DOMAINLIST string.
-c result = astFindFrame( target, astFrame( 1, "MaxAxes=3" ), "" );
-f RESULT = AST_FINDFRAME( TARGET, AST_FRAME( 1, 'MaxAxes=3', STATUS ), ' ', STATUS )
-* This is a more advanced example which will search for any
-* coordinate system in the target having 1, 2 or 3
-c dimensions. The Frame returned (as part of the "result"
-f dimensions. The Frame returned (as part of the RESULT
-* FrameSet) will always be 1-dimensional, but will be related
-* to the coordinate system that was found by a suitable Mapping
-* (e.g. a PermMap) which simply extracts the first axis.
-*
-* If we had wanted a Frame representing the actual (1, 2 or
-* 3-dimensional) coordinate system found, we could set the
-* PreserveAxes attribute to a non-zero value in the template.
-c result = astFindFrame( target, astSkyFrame( "Permute=0" ), "" );
-f RESULT = AST_FINDFRAME( TARGET, AST_SKYFRAME( 'Permute=0', STATUS ), ' ', STATUS )
-* Searches for any celestial coordinate system in the target,
-* but only finds one if its axes are in the conventional
-* (longitude,latitude) order and have not been permuted
-c (e.g. with astPermAxes).
-f (e.g. with AST_PERMAXES).
-
-* Notes:
-* - The Mapping represented by the returned FrameSet results in
-* alignment taking place in the coordinate system specified by the
-c AlignSystem attribute of the "template" Frame. See the description
-f AlignSystem attribute of the TEMPLATE Frame. See the description
-* of the AlignSystem attribute for further details.
-* - Beware of setting the Domain attribute of the template and then
-c using a "domainlist" string which does not include the template's domain
-f using a DOMAINLIST string which does not include the template's domain
-* (or a blank field). If you do so, no coordinate system will be
-* found.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-
-* More on Using Templates:
-* A Frame (describing a coordinate system) will be found by this
-* function if (a) it is "matched" by the template you supply, and
-c (b) the value of its Domain attribute appears in the "domainlist"
-f (b) the value of its Domain attribute appears in the DOMAINLIST
-* string (except that a blank field in this string permits any
-* domain). A successful match by the template depends on a number
-* of criteria, as outlined below:
-* - In general, a template will only match another Frame which
-* belongs to the same class as the template, or to a derived (more
-* specialised) class. For example, a SkyFrame template will match
-* any other SkyFrame, but will not match a basic
-* Frame. Conversely, a basic Frame template will match any class
-* of Frame.
-* - The exception to this is that a Frame of any class can be used to
-* match a CmpFrame, if that CmpFrame contains a Frame of the same
-* class as the template. Note however, the MaxAxes and MinAxes
-* attributes of the template must be set to suitable values to allow
-* it to match the CmpFrame. That is, the MinAxes attribute must be
-* less than or equal to the number of axes in the target, and the MaxAxes
-* attribute must be greater than or equal to the number of axes in
-* the target.
-* - If using a CmpFrame as a template frame, the MinAxes and MaxAxes
-* for the template are determined by the MinAxes and MaxAxes values of
-* the component Frames within the template. So if you want a template
-* CmpFrame to be able to match Frames with different numbers of axes,
-* then you must set the MaxAxes and/or MinAxes attributes in the component
-* template Frames, before combining them together into the template
-* CmpFrame.
-* - If a template has a value set for any of its main attributes, then
-* it will only match Frames which have an identical value for that
-* attribute (or which can be transformed, using a built-in
-* conversion, so that they have the required value for that
-* attribute). If any attribute in the template is un-set, however,
-* then Frames are matched regardless of the value they may have
-* for that attribute. You may therefore make a template more or
-* less specific by choosing the attributes for which you set
-* values. This requirement does not apply to 'descriptive' attributes
-* such as titles, labels, symbols, etc.
-* - An important application of this principle involves the Domain
-* attribute. Setting the Domain attribute of the template has the
-* effect of restricting the search to a particular type of Frame
-* (with the domain you specify). Conversely, if the Domain
-* attribute is not set in the template, then the domain of the
-* Frame found is not relevant, so all Frames are searched. Note
-* that the
-c "domainlist" string provides an alternative way of restricting the
-f DOMAINLIST string provides an alternative way of restricting the
-* search in the same manner, but is a more convenient interface if
-* you wish to search automatically for another domain if the first
-* search fails.
-* - Normally, a template will only match a Frame which has the
-* same number of axes as itself. However, for some classes of
-* template, this default behaviour may be changed by means of the
-* MinAxes, MaxAxes and MatchEnd attributes. In addition, the
-* behaviour of a template may be influenced by its Permute and
-* PreserveAxes attributes, which control whether it matches Frames
-* whose axes have been permuted, and whether this permutation is
-* retained in the Frame which is returned (as opposed to returning
-* the axes in the order specified in the template, which is the
-* default behaviour). You should consult the descriptions of these
-* attributes for details of this more advanced use of templates.
-*--
-*/
-
-/* Local Variables: */
- AstFrame *frame; /* Pointer to result Frame */
- AstFrameSet *result; /* Pointer to result FrameSet */
- AstMapping *map; /* Pointer to result Mapping */
- AstMapping *tmp; /* Temporary Mapping pointer */
- char *domain_copy; /* Pointer to copy of result domain */
- char *domainlist_copy; /* Pointer to copy of domains list */
- const char *domain; /* Pointer to result Domain value */
- int *target_axes; /* Pointer to target axis assignments */
- int *template_axes; /* Pointer to template axis assignments */
- int i; /* Loop counter for characters */
- int j; /* Character index */
- int match; /* Template matched target? */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Allocate space to store a copy of the domains list, with added
- commas. */
- domainlist_copy = astMalloc( strlen( domainlist ) + (size_t) 3 );
- if ( astOK ) {
-
-/* Make a copy of the domains list, with an extra comma added at each
- end. Also remove all white space and convert to upper case. */
- domainlist_copy[ 0 ] = ',';
- for ( i = 0, j = 1; domainlist[ i ]; i++ ) {
- if ( !isspace( domainlist[ i ] ) ) {
- domainlist_copy[ j++ ] = toupper( domainlist[ i ] );
- }
- }
- domainlist_copy[ j++ ] = ',';
- domainlist_copy[ j ] = '\0';
-
-/* Invoke the protected astMatch method associated with the template
- Frame. This matches the template to the target and returns
- information about how to convert between the target and the Frame
- it found (if any). */
- match = astMatch( template, target,
- &template_axes, &target_axes, &map, &frame );
-
-/* If successful, obtain a pointer to the Domain string of the result
- Frame. Allocate space for a copy of this string, with added
- commas. */
- if ( match && astOK ) {
- domain = astGetDomain( frame );
- if ( astOK ) {
- domain_copy = astMalloc( strlen( domain ) + (size_t) 3 );
- if ( astOK ) {
-
-/* Make a copy of the domain, adding an extra comma at each end. */
- domain_copy[ 0 ] = ',';
- for ( i = 0, j = 1; domain[ i ]; i++ ) {
- domain_copy[ j++ ] = domain[ i ];
- }
- domain_copy[ j++ ] = ',';
- domain_copy[ j ] = '\0';
-
-/* Test if the domain appears in the domains list (with added
- commas). If not, test if a blank domain (which permits the result
- Frame to have any Domain) appears instead. */
- if ( strstr( domainlist_copy, domain_copy ) ||
- strstr( domainlist_copy, ",," ) ) {
-
-/* If the result Frame is acceptable, simplify the result Mapping. */
- tmp = astSimplify( map );
- map = astAnnul( map );
- map = tmp;
-
-/* Build the result FrameSet. */
- result = astFrameSet( target, "", status );
- astAddFrame( result, AST__BASE, map, frame );
- }
- }
-
-/* Free the copy of the result domain. */
- domain_copy = astFree( domain_copy );
- }
-
-/* Free space and annul pointers allocated by astMatch. */
- template_axes = astFree( template_axes );
- target_axes = astFree( target_axes );
- map = astAnnul( map );
- frame = astAnnul( frame );
- }
- }
-
-/* Free the copy of the domains list. */
- domainlist_copy = astFree( domainlist_copy );
-
-/* If an error occurred, annul any result pointer. */
- if ( !astOK && result ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-const char *astFmtDecimalYr_( double year, int digits, int *status ) {
-/*
-*+
-* Name:
-* astFmtDecimalYr
-
-* Purpose:
-* Format an epoch expressed in years as a decimal string.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "frame.h"
-* const char *astFmtDecimalYr( double year, int digits )
-
-* Class Membership:
-* Frame member function.
-
-* Description:
-* This function formats an epoch expressed in years as a decimal string
-* and returns a pointer to the result. It is intended for formatting
-* Frame Epoch values, etc, for display.
-
-* Parameters:
-* year
-* The epoch to be formatted.
-* digits
-* The number of digits of precision required.
-
-* Returned Value:
-* Pointer to a null terminated string containing the formatted value.
-
-* Notes:
-* - The result string is stored in static memory and may be
-* over-written by a subsequent invocation of this function.
-* - A NULL pointer is returned if this function is invoked with
-* the global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- const char *result; /* Pointer value to return */
- int nc; /* Number of characters in buffer */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(NULL);
-
-/* Limit the precision to what is meaningful. */
- digits = ( digits > DBL_DIG ) ? DBL_DIG : digits;
-
-/* Format the year value. Use "g" format to avoid buffer overflow and
- to get useful diagnostic output if a silly value is given. */
- nc = sprintf( astfmtdecimalyr_buff, "%#.*g", digits, year );
-
-/* Set the result value. */
- result = astfmtdecimalyr_buff;
-
-/* Loop to remove redundant zeros from the end of the result. */
- while ( astfmtdecimalyr_buff[ --nc ] == '0' ) astfmtdecimalyr_buff[ nc ] = '\0';
-
-/* If the last character is now a decimal point, put back one zero. */
- if ( astfmtdecimalyr_buff[ nc ] == '.' ) {
- astfmtdecimalyr_buff[ ++nc ] = '0';
- astfmtdecimalyr_buff[ ++nc ] = '\0';
- }
-
-/* Return the result. */
- return astfmtdecimalyr_buff;
-}
-
-static const char *Format( AstFrame *this, int axis, double value, int *status ) {
-/*
-*+
-* Name:
-* astFormat
-
-* Purpose:
-* Format a coordinate value for a Frame axis.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* const char *astFormat( AstFrame *this, int axis, double value )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function returns a pointer to a string containing the
-* formatted (character) version of a coordinate value for a Frame
-* axis. The formatting applied is determined by the Frame's
-* attributes and, in particular, by any Format attribute string
-* that has been set for the axis. A suitable default format will
-* be applied if necessary.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* axis
-* The number of the Frame axis for which formatting is to be
-* performed (axis numbering starts at zero for the first axis).
-* value
-* The coordinate value to be formatted.
-
-* Returned Value:
-* A pointer to a null-terminated string containing the formatted
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the Frame, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the Frame. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-
-* Implementation Notes:
-* - This function implements the basic astFormat method available
-* via the protected interface to the Frame class. The public
-* interface to this method is provided by the astFormatId_
-* function.
-*/
-
-/* Local Variables: */
- AstAxis *ax; /* Pointer to Axis object */
- const char *result; /* Pointer value to return */
- int digits_set; /* Axis Digits attribute set? */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Validate the axis index and obtain a pointer to the required Axis. */
- (void) astValidateAxis( this, axis, "astFormat" );
- ax = astGetAxis( this, axis );
-
-/* Test if any Axis attributes which may affect the result are undefined (i.e.
- have not been explicitly set). If so, we over-ride them, giving them
- temporary values dictated by the Frame. Only the Digits attribute is
- relevant here. */
- digits_set = astTestAxisDigits( ax );
- if ( !digits_set ) astSetAxisDigits( ax, astGetDigits( this ) );
-
-/* Format the value. */
- result = astAxisFormat( ax, value );
-
-/* Clear any Axis attributes that were temporarily over-ridden. */
- if ( !digits_set ) astClearAxisDigits( ax );
-
-/* Annul the Axis pointer. */
- ax = astAnnul( ax );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-static double Gap( AstFrame *this, int axis, double gap, int *ntick, int *status ) {
-/*
-*+
-* Name:
-* astGap
-
-* Purpose:
-* Find a "nice" gap for tabulating Frame axis values.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* double astGap( AstFrame *this, int axis, double gap, int *ntick )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function returns a gap size which produces a nicely spaced
-* series of formatted values for a Frame axis, the returned gap
-* size being as close as possible to the supplied target gap
-* size. It also returns a convenient number of divisions into
-* which the gap can be divided.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* axis
-* The number of the axis (zero-based) for which a gap is to be found.
-* gap
-* The target gap size.
-* ntick
-* Address of an int in which to return a convenient number of
-* divisions into which the gap can be divided.
-
-* Returned Value:
-* The nice gap size.
-
-* Notes:
-* - A value of zero is returned if the target gap size is zero.
-* - A negative gap size is returned if the supplied gap size is negative.
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstAxis *ax; /* Pointer to Axis object */
- double result; /* The nice gap value */
-
-/* Check the global error status. */
- if ( !astOK ) return 0.0;
-
-/* Validate the axis index and obtain a pointer to the required
- Axis. */
- (void) astValidateAxis( this, axis, "astGap" );
- ax = astGetAxis( this, axis );
-
-/* Find the gap. */
- result = astAxisGap( ax, gap, ntick );
-
-/* Annul the Axis pointer. */
- ax = astAnnul( ax );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0.0;
-
-/* Return the result. */
- return result;
-}
-
-static int GetActiveUnit( AstFrame *this, int *status ){
-/*
-*++
-* Name:
-c astGetActiveUnit
-f AST_GETACTIVEUNIT
-
-* Purpose:
-* Determines how the Unit attribute will be used.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "frame.h"
-c int astGetActiveUnit( AstFrame *this )
-f RESULT = AST_GETACTIVEUNIT( THIS, STATUS )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-c This function
-f This routine
-* returns the current value of the ActiveUnit flag for a Frame. See
-c the description of the astSetActiveUnit function
-f the description of the AST_SETACTIVEUNIT routine
-* for a description of the ActiveUnit flag.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Frame.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astGetActiveUnit
-f AST_GETACTIVEUNIT = LOGICAL
-* The current value of the ActiveUnit flag.
-
-* Notes:
-c - A zero value will be returned if this function is
-c invoked with the AST error status set, or if it should fail for
-f - A value of .FALSE. will be returned if this function is
-f invoked with STATUS set to an error value, or if it should fail for
-* any reason.
-*--
-*/
-
-/* Local Variables: */
- AstAxis *ax; /* Pointer to axis structure */
- int i; /* Index of axis in Frame */
- int has_skyaxis; /* Does Frame contain any SkyAxes? */
- int nax; /* Number of axes in Frame */
- int result; /* The returned value */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* See if the Frame contains a SkyAxis. */
- has_skyaxis = 0;
- nax = astGetNaxes( this );
- for( i = 0; i < nax; i++ ) {
- ax = astGetAxis( this, i );
- if( astIsASkyAxis( ax ) ) has_skyaxis = 1;
- ax = astAnnul( ax );
- }
-
-/* If the Frame contains a SkyAxis the ActiveUnit flag is always zero. */
- if( !has_skyaxis ) {
-
-/* Otherwise, get the value from the Frame. If it has not yet been assigned a
- value return the value zero. */
- result = this->active_unit;
- if( result == -INT_MAX ) result = 0;
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frame.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Frame member function (over-rides the protected astGetAttrib
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a Frame, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - This function uses one-based axis numbering so that it is
-* suitable for external (public) use.
-* - The returned string pointer may point at memory allocated
-* within the Frame, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the Frame. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstAxis *ax; /* Pointer to Axis */
- AstFrame *pfrm; /* Pointer to primary Frame containing axis */
- AstFrame *this; /* Pointer to the Frame structure */
- AstSystemType system; /* System code */
- char pfrm_attrib[ 100 ]; /* Primary Frame attribute */
- char *axis_attrib; /* Pointer to axis attribute name */
- const char *old_attrib; /* Pointer to supplied attribute name string */
- const char *result; /* Pointer value to return */
- double dval; /* Double attibute value */
- double epoch; /* Epoch attribute value (as MJD) */
- int axis; /* Frame axis number */
- int axis_nc; /* No. characters in axis attribute name */
- int digits; /* Digits attribute value */
- int direction; /* Direction attribute value */
- int free_axis_attrib; /* Should axis_attrib be freed? */
- int has_axis; /* Does attrib name include axis specifier? */
- int len; /* Length of attrib string */
- int match_end; /* MatchEnd attribute value */
- int max_axes; /* MaxAxes attribute value */
- int min_axes; /* MinAxes attribute value */
- int naxes; /* Naxes attribute value */
- int nc; /* No. characters read by astSscanf */
- int oldrep; /* Original error reporting state */
- int paxis; /* Axis index within primary frame */
- int permute; /* Permute attribute value */
- int preserve_axes; /* PreserveAxes attribute value */
- int used; /* Could the setting string be used? */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the Frame structure. */
- this = (AstFrame *) this_object;
-
-/* Set a flag indicating if the attribute name includes an axis
- specifier. */
- has_axis = ( strchr( attrib, '(' ) != NULL );
-
-/* A flag indicating that we do not need to free the axis_attrib memory. */
- free_axis_attrib = 0;
-
-/* Initialise things to avoid compiler warnings. */
- axis_attrib = NULL;
- old_attrib = NULL;
-
-/* Jump back to here if we are trying the same attribute but with an explicit
- axis "(1)" added to the end of the name. */
-L1:
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Save the number of axes in the Frame for later use. */
- naxes = astGetNaxes( this );
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null-terminated string in an appropriate
- format. Set "result" to point at the result string. */
-
-/* Digits. */
-/* ------- */
- if ( !strcmp( attrib, "digits" ) ) {
- digits = astGetDigits( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", digits );
- result = getattrib_buff;
- }
-
-/* Digits(axis). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "digits(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
-
-/* There is no function to obtain the Digits attribute value for an
- axis directly, so obtain a pointer to the Axis and use this to
- obtain the value. Use the Frame's Digits attribute instead if the
- Axis attribute value is not set. */
- (void) astValidateAxis( this, axis - 1, "astGetDigits(axis)" );
- ax = astGetAxis( this, axis - 1 );
- if ( astTestAxisDigits( ax ) ) {
- digits = astGetAxisDigits( ax );
- } else {
- digits = astGetDigits( this );
- }
- ax = astAnnul( ax );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", digits );
- result = getattrib_buff;
- }
-
-
-/* Direction(axis). */
-/* ---------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "direction(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- direction = astGetDirection( this, axis - 1 );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", direction );
- result = getattrib_buff;
- }
-
-/* Epoch. */
-/* ------ */
- } else if ( !strcmp( attrib, "epoch" ) ) {
- epoch = astGetEpoch( this );
- if ( astOK ) {
-
-/* Format the Epoch as decimal years. Use a Besselian epoch if it will
- be less than 1984.0, otherwise use a Julian epoch. */
- result = astFmtDecimalYr( ( epoch < palSlaEpj2d( 1984.0 ) ) ?
- palSlaEpb( epoch ) : palSlaEpj( epoch ), DBL_DIG );
- }
-
-/* Top(axis). */
-/* ---------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "top(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- dval = astGetTop( this, axis -1 );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* Bottom(axis). */
-/* ---------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "bottom(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- dval = astGetBottom( this, axis -1 );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* Domain. */
-/* ------- */
- } else if ( !strcmp( attrib, "domain" ) ) {
- result = astGetDomain( this );
-
-/* Format(axis). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "format(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astGetFormat( this, axis - 1 );
-
-/* Label(axis). */
-/* ------------ */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "label(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astGetLabel( this, axis - 1 );
-
-/* MatchEnd. */
-/* --------- */
- } else if ( !strcmp( attrib, "matchend" ) ) {
- match_end = astGetMatchEnd( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", match_end );
- result = getattrib_buff;
- }
-
-/* MaxAxes. */
-/* -------- */
- } else if ( !strcmp( attrib, "maxaxes" ) ) {
- max_axes = astGetMaxAxes( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", max_axes );
- result = getattrib_buff;
- }
-
-/* MinAxes. */
-/* -------- */
- } else if ( !strcmp( attrib, "minaxes" ) ) {
- min_axes = astGetMinAxes( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", min_axes );
- result = getattrib_buff;
- }
-
-/* Naxes. */
-/* -----_ */
- } else if ( !strcmp( attrib, "naxes" ) ) {
- (void) sprintf( getattrib_buff, "%d", naxes );
- result = getattrib_buff;
-
-/* Permute. */
-/* -------- */
- } else if ( !strcmp( attrib, "permute" ) ) {
- permute = astGetPermute( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", permute );
- result = getattrib_buff;
- }
-
-/* PreserveAxes. */
-/* ------------- */
- } else if ( !strcmp( attrib, "preserveaxes" ) ) {
- preserve_axes = astGetPreserveAxes( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", preserve_axes );
- result = getattrib_buff;
- }
-
-/* Symbol(axis). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "symbol(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astGetSymbol( this, axis - 1 );
-
-/* AlignSystem. */
-/* ------------ */
-/* Obtain the AlignSystem code and convert to a string. */
- } else if ( !strcmp( attrib, "alignsystem" ) ) {
- system = astGetAlignSystem( this );
- if ( astOK ) {
- result = astSystemString( this, system );
-
-/* Report an error if the value was not recognised. */
- if ( !result ) {
- astError( AST__SCSIN,
- "astGetAttrib(%s): Corrupt %s contains invalid "
- "AlignSystem identification code (%d).", status,
- astGetClass( this ), astGetClass( this ), (int) system );
- }
- }
-
-/* System. */
-/* ------- */
-/* Obtain the System code and convert to a string. */
- } else if ( !strcmp( attrib, "system" ) ) {
- system = astGetSystem( this );
- if ( astOK ) {
- result = astSystemString( this, system );
-
-/* Report an error if the value was not recognised. */
- if ( !result ) {
- astError( AST__SCSIN,
- "astGetAttrib(%s): Corrupt %s contains invalid "
- "System identification code (%d).", status,
- astGetClass( this ), astGetClass( this ), (int) system );
- }
- }
-
-/* Title. */
-/* ------ */
- } else if ( !strcmp( attrib, "title" ) ) {
- result = astGetTitle( this );
-
-/* Unit(axis). */
-/* ----------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "unit(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astGetUnit( this, axis - 1 );
-
-/* NormUnit(axis). */
-/* --------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "normunit(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astGetNormUnit( this, axis - 1 );
-
-/* ObsLat. */
-/* ------- */
- } else if ( !strcmp( attrib, "obslat" ) ) {
- dval = astGetObsLat( this );
- if ( astOK ) {
-
-/* If not already created, create an FK5 J2000 SkyFrame which will be used
- for formatting and unformatting ObsLon and ObsLat values. */
- if( !skyframe ) {
- astBeginPM;
- skyframe = astSkyFrame("system=FK5,equinox=J2000,format(2)=dms.2", status );
- astEndPM;
- }
-
-/* Display absolute value preceeded by "N" or "S" as appropriate. */
- if( dval < 0 ) {
- (void) sprintf( getattrib_buff, "S%s", astFormat( skyframe, 1, -dval ) );
- } else {
- (void) sprintf( getattrib_buff, "N%s", astFormat( skyframe, 1, dval ) );
- }
- result = getattrib_buff;
- }
-
-/* ObsLon. */
-/* ------- */
- } else if ( !strcmp( attrib, "obslon" ) ) {
- dval = astGetObsLon( this );
- if ( astOK ) {
-
-/* Put into range +/- PI. */
- dval = palSlaDrange( dval );
-
-/* If not already created, create an FK5 J2000 SkyFrame which will be used
- for formatting and unformatting ObsLon and ObsLat values. */
- if( !skyframe ) {
- astBeginPM;
- skyframe = astSkyFrame( "system=FK5,equinox=J2000,format(2)=dms.2", status );
- astEndPM;
- }
-
-/* Display absolute value preceeded by "E" or "W" as appropriate. */
- if( dval < 0 ) {
- (void) sprintf( getattrib_buff, "W%s", astFormat( skyframe, 1, -dval ) );
- } else {
- (void) sprintf( getattrib_buff, "E%s", astFormat( skyframe, 1, dval ) );
- }
- result = getattrib_buff;
-
- }
-
-/* ObsAlt. */
-/* ------- */
- } else if ( !strcmp( attrib, "obsalt" ) ) {
- dval = astGetObsAlt( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* Dut1. */
-/* ---- */
- } else if ( !strcmp( attrib, "dut1" ) ) {
- dval = astGetDut1( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* Other axis attributes. */
-/* ---------------------- */
-/* If the attribute was not identified above, but appears to refer to
- a Frame axis, then it may refer to an Axis object of a derived type
- (which has additional attributes not recognised here). */
- } else if ( !free_axis_attrib && ( nc = 0,
- ( 1 == astSscanf( attrib, "%*[^()]%n(%d)%n",
- &axis_nc, &axis, &nc ) )
- && ( nc >= len ) ) ) {
-
-/* Validate the axis index and extract the attribute name. */
- (void) astValidateAxis( this, axis - 1, "astGet" );
- axis_attrib = astString( attrib, axis_nc );
-
-/* Obtain a pointer to the Axis object. */
- ax = astGetAxis( this, axis - 1 );
- if( astOK ) {
-
-/* Assume that we will be able to use the attribute name. */
- used = 1;
-
-/* Temporarily switch off error reporting so that if the following attempt
- to access the axis attribute fails, we can try to interpret the
- attribute name as an attribute of the primary Frame containing the
- specified axis. Any errors reported in this context will simply be
- ignored, in particularly they are not deferred for later delivery. */
- oldrep = astReporting( 0 );
-
-/* Use the Axis astGetAttrib method to obtain the result. */
- result = astGetAttrib( ax, axis_attrib );
-
-/* If the above call failed with a status of AST__BADAT, indicating that
- the attribute name was not recognised, clear the status so that we can
- try to interpret the attribute name as an attribute of the primary Frame
- containing the specified axis. */
- if( astStatus == AST__BADAT ) {
- astClearStatus;
-
-/* Find the primary Frame containing the specified axis. */
- astPrimaryFrame( this, axis - 1, &pfrm, &paxis );
-
-/* Only attempt to use the primary Frame if it is not the same as "this"
- - otherwise we could end up in an infinite loop. */
- if( pfrm != this ) {
-
-/* Modify the attribute name to refer to the axis numbering of the
- primary frame. */
- sprintf( pfrm_attrib, "%s(%d)", axis_attrib, paxis + 1 );
-
-/* Attempt to use the Axis astGetAttrib method to obtain the result. */
- result = astGetAttrib( pfrm, pfrm_attrib );
-
-/* If this failed, clear the status and indicate that we have not managed to
- use the attribute name. */
- if( !astOK ) {
- astClearStatus;
- used = 0;
- }
-
- } else {
- used = 0;
- }
-
-/* If not found attempt to get the attribute value from the Axis, omitting
- the axis index. */
- if( ! used ) {
- result = astGetAttrib( pfrm, axis_attrib );
- if( !astOK ) {
- astClearStatus;
- } else {
- used = 1;
- }
- }
-
-/* Annul the primary Frame pointer. */
- pfrm = astAnnul( pfrm );
- }
-
-/* Re-instate the original error reporting state. */
- astReporting( oldrep );
-
-/* If we could not use the attribute name, attempt to get the axis
- attribute again, this time retaining the error report. This is done
- to ensure the user gets an appropriate error message. */
- if( !used ) result = astGetAttrib( ax, axis_attrib );
- }
-
-/* Annul the Axis pointer and free the memory holding the attribute
- name. */
- ax = astAnnul( ax );
- axis_attrib = astFree( axis_attrib );
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute is still not recognised, and the Frame has only 1 axis,
- and the attribute name does not already include an axis specifier, try
- again after appending "(1)" to the end of the attribute name. */
- } else if( !has_axis && naxes == 1 ) {
-
-/* Take a copy of the supplied name, allowing 3 extra characters for the
- axis specifier "(1)". */
- axis_attrib = astMalloc( len + 4 );
- if( axis_attrib ) memcpy( axis_attrib, attrib, len );
-
-/* Indicate we should free the axis_attrib memory. */
- free_axis_attrib = 1;
-
-/* Add in the axis specifier. */
- strcpy( axis_attrib + len, "(1)" );
-
-/* Use the new attribute name instead of the supplied name. */
- old_attrib = attrib;
- attrib = axis_attrib;
-
-/* Indicate the attribute name now has an axis specifier. */
- has_axis = 1;
-
-/* Jump back to try interpreting the new attribute name. */
- goto L1;
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute name is still not recognised, pass it on to the parent
- method for further interpretation. First re-instate the original attrib
- name string if it was changed above. */
- } else {
- if( free_axis_attrib ) {
- attrib = old_attrib;
- axis_attrib = astFree( axis_attrib );
- }
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstAxis *GetAxis( AstFrame *this, int axis, int *status ) {
-/*
-*+
-* Name:
-* astGetAxis
-
-* Purpose:
-* Obtain a pointer to a specified Axis from a Frame.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* AstAxis *astGetAxis( AstFrame *this, int axis )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function returns a pointer to the Axis object associated
-* with one of the axes of a Frame. This object describes the
-* quantity which is represented along that axis.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* axis
-* The number of the axis (zero-based) for which an Axis pointer is
-* required.
-
-* Returned Value:
-* A pointer to the requested Axis object.
-
-* Notes:
-* - The reference count of the requested Axis object will be
-* incremented by one to reflect the additional pointer returned by
-* this function.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstAxis *result; /* Pointer to Axis */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise. */
- result = NULL;
-
-/* Validate and permute the axis index. */
- axis = astValidateAxis( this, axis, "astGetAxis" );
-
-/* If OK, clone the required Axis pointer. */
- if ( astOK ) result = astClone( this->axis[ axis ] );
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetDefaultLabel( int axis, int *status ) {
-/*
-* Name:
-* GetDefaultLabel
-
-* Purpose:
-* Return a pointer to a default axis Label string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frame.h"
-* const char *GetDefaultLabel( int axis, int *status )
-
-* Class Membership:
-* Frame member function
-
-* Description:
-* This function returns a pointer to a string holding a default axis
-* Label value.
-
-* Parameters:
-* axis
-* Zero based axis index.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a static null-terminated string containing the attribute
-* value.
-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(NULL);
-
-/* Format the axis index, putting the string in a global buffer. */
- (void) sprintf( label_buff, "Axis %d", axis + 1 );
-
-/* Return a pointer to the global buffer. */
- return label_buff;
-}
-
-static const char *GetDefaultSymbol( AstFrame *this, int axis, int *status ) {
-/*
-* Name:
-* GetDefaultSymbol
-
-* Purpose:
-* Return a pointer to a default axis Symbol string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frame.h"
-* const char *GetDefaultSymbol( AstFrame *this, int axis, int *status )
-
-* Class Membership:
-* Frame member function
-
-* Description:
-* This function returns a pointer to a string holding a default axis
-* Symbol value.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* axis
-* Zero based axis index.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a static null-terminated string containing the attribute
-* value.
-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Note we use "sprintf" once to determine how many characters are
- produced by the "%d" format string and then limit the number of
- characters used from the Domain string in the second invocation of
- "sprintf" so that the total length of the default Symbol string
- does not exceed SYMBOL_BUFF_LEN characters. */
- (void) sprintf( symbol_buff, "%.*s%d",
- SYMBOL_BUFF_LEN - sprintf( symbol_buff, "%d", axis + 1 ),
- astTestDomain( this ) ? astGetDomain( this ) : "x",
- axis + 1 );
-
-/* Use the AddUnderscores function to replace any white space in the Symbol
- string with underscore characters. */
- AddUnderscores( symbol_buff, status );
-
-/* Return a pointer to the global buffer. */
- return symbol_buff;
-}
-
-static const char *GetDefaultTitle( AstFrame *this, int *status ) {
-/*
-* Name:
-* GetDefaultTitle
-
-* Purpose:
-* Return a pointer to a default Title string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frame.h"
-* const char *GetDefaultTitle( AstFrame *this, int *status )
-
-* Class Membership:
-* Frame member function
-
-* Description:
-* This function returns a pointer to a string holding a default Title value.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a static null-terminated string containing the attribute
-* value.
-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Create the Title value and put it in the global buffer. */
- (void) sprintf( title_buff, "%d-d coordinate system", astGetNaxes( this ) );
-
-/* Return a pointer to the global buffer. */
- return title_buff;
-}
-
-static int GetFrameFlags( AstFrame *this, int *status ){
-/*
-*+
-* Name:
-* astGetFrameFlags
-
-* Purpose:
-* Return the bit mask of flags associated with a Frame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "frame.h"
-* int *astGetFrameFlags( astFrame *this )
-
-* Class Membership:
-* Frame virtual function.
-
-* Description:
-* This function returns a bit mask holding the current set of flags
-* associated with a Frame. See astSetFrameFlags for details of these
-* flags.
-
-* Parameters:
-* this
-* The Frame.
-
-* Returned Value:
-* The bit mask.
-
-* Notes:
-* - Zero is returned if this function is invoked with
-* the global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Return the result. */
- return this->flags;
-}
-
-static int GetIsLinear( AstMapping *this_mapping, int *status ){
-/*
-* Name:
-* GetIsLinear
-
-* Purpose:
-* Return the value of the IsLinear attribute for a Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void GetIsLinear( AstMapping *this, int *status )
-
-* Class Membership:
-* Frame member function (over-rides the protected astGetIsLinear
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns the value of the IsLinear attribute for a
-* Frame, which is always one because a Frame is treated like a UnitMap.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* status
-* Pointer to the inherited status variable.
-*/
- return 1;
-}
-
-static int GetIsSimple( AstMapping *this_mapping, int *status ){
-/*
-* Name:
-* GetIsSimple
-
-* Purpose:
-* Return the value of the IsSimple attribute for a Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void GetIsSimple( AstMapping *this, int *status )
-
-* Class Membership:
-* Frame member function (over-rides the protected astGetIsSimple
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns the value of the IsSimple attribute for a
-* Frame, which is always zero because Frames are not immutable (unlike
-* non-Frame Mappings).
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* status
-* Pointer to the inherited status variable.
-*/
- return 0;
-}
-
-static int GetNaxes( AstFrame *this, int *status ) {
-/*
-*+
-* Name:
-* astGetNaxes
-
-* Purpose:
-* Determine how many axes a Frame has.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* int astGetNaxes( AstFrame *this )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function returns the number of axes for a Frame.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-
-* Returned Value:
-* The number of Frame axes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Return the number of Frame axes. */
- return this->naxes;
-}
-
-static int GetNin( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* GetNin
-
-* Purpose:
-* Get the number of input coordinates for a Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frame.h"
-* int GetNin( AstMapping *this, int *status )
-
-* Class Membership:
-* Frame member function (over-rides the astGetNin method inherited
-* from the Mapping class).
-
-* Description:
-* This function returns the number of input coordinate values
-* required per point by a Frame, when used as a Mapping (i.e. the
-* number of dimensions of the space in which input points reside).
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Number of coordinate values required.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *this; /* Pointer to Frame structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the Frame structure. */
- this = (AstFrame *) this_mapping;
-
-/* Return the number of Frame axes. */
- result = astGetNaxes( this );
-
-/* Return the result. */
- return result;
-}
-
-static int GetNout( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* GetNout
-
-* Purpose:
-* Get the number of output coordinates for a Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frame.h"
-* int GetNout( AstMapping *this, int *status )
-
-* Class Membership:
-* Frame member function (over-rides the astGetNout method
-* inherited from the Mapping class).
-
-* Description:
-* This function returns the number of output coordinate values
-* generated per point by a Frame, when used as a Mapping (i.e. the
-* number of dimensions of the space in which output points
-* reside).
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Number of coordinate values generated.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *this; /* Pointer to Frame structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the Frame structure. */
- this = (AstFrame *) this_mapping;
-
-/* Return the number of Frame axes. */
- result = astGetNaxes( this );
-
-/* Return the result. */
- return result;
-}
-
-static const int *GetPerm( AstFrame *this, int *status ) {
-/*
-*+
-* Name:
-* astGetPerm
-
-* Purpose:
-* Access the axis permutation array for a Frame.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* const int *astGetPerm( AstFrame *this )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function returns a pointer to the axis permutation array
-* for a Frame. This array constitutes a lookup-table that converts
-* between an axis number supplied externally and the corresponding
-* index in the Frame's internal axis arrays.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-
-* Returned Value:
-* Pointer to the Frame's axis permutation array (a constant array
-* of int). Each element of this contains the (zero-based)
-* internal axis index to be used in place of the external index
-* which is used to address the permutation array. If the Frame has
-* zero axes, this pointer will be NULL.
-
-* Notes:
-* - This protected method is provided to assist class
-* implementations which need to implement axis-dependent
-* extensions to Frame methods, and which therefore need to know
-* how a Frames's external axis index is converted for internal
-* use.
-* - The pointer returned by this function gives direct access to
-* data internal to the Frame object. It remains valid only so long
-* as the Frame exists. The permutation array contents may be
-* modified by other functions which operate on the Frame and this
-* may render the returned pointer invalid.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Return a pointer to the axis permutation array. */
- return this->perm;
-}
-
-void astInitFrameVtab_( AstFrameVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitFrameVtab
-
-* Purpose:
-* Initialise a virtual function table for a Frame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "frame.h"
-* void astInitFrameVtab( AstFrameVtab *vtab, const char *name )
-
-* Class Membership:
-* Frame vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the Frame class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAFrame ) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
- vtab->Abbrev = Abbrev;
- vtab->CheckPerm = CheckPerm;
- vtab->ClearDigits = ClearDigits;
- vtab->ClearDirection = ClearDirection;
- vtab->ClearDomain = ClearDomain;
- vtab->ClearFormat = ClearFormat;
- vtab->ClearLabel = ClearLabel;
- vtab->ClearMatchEnd = ClearMatchEnd;
- vtab->ClearMaxAxes = ClearMaxAxes;
- vtab->ClearMinAxes = ClearMinAxes;
- vtab->ClearPermute = ClearPermute;
- vtab->ClearPreserveAxes = ClearPreserveAxes;
- vtab->ClearSymbol = ClearSymbol;
- vtab->ClearTitle = ClearTitle;
- vtab->ClearUnit = ClearUnit;
- vtab->Convert = Convert;
- vtab->ConvertX = ConvertX;
- vtab->Angle = Angle;
- vtab->Distance = Distance;
- vtab->Fields = Fields;
- vtab->FindFrame = FindFrame;
- vtab->MatchAxes = MatchAxes;
- vtab->MatchAxesX = MatchAxesX;
- vtab->Format = Format;
- vtab->Gap = Gap;
- vtab->GetAxis = GetAxis;
- vtab->GetDigits = GetDigits;
- vtab->GetDirection = GetDirection;
- vtab->GetDomain = GetDomain;
- vtab->GetFormat = GetFormat;
- vtab->GetLabel = GetLabel;
- vtab->GetMatchEnd = GetMatchEnd;
- vtab->GetMaxAxes = GetMaxAxes;
- vtab->GetMinAxes = GetMinAxes;
- vtab->GetNaxes = GetNaxes;
- vtab->GetPerm = GetPerm;
- vtab->GetPermute = GetPermute;
- vtab->GetPreserveAxes = GetPreserveAxes;
- vtab->GetSymbol = GetSymbol;
- vtab->GetTitle = GetTitle;
- vtab->GetUnit = GetUnit;
- vtab->GetNormUnit = GetNormUnit;
- vtab->Intersect = Intersect;
- vtab->IsUnitFrame = IsUnitFrame;
- vtab->Match = Match;
- vtab->Norm = Norm;
- vtab->NormBox = NormBox;
- vtab->AxDistance = AxDistance;
- vtab->AxOffset = AxOffset;
- vtab->AxIn = AxIn;
- vtab->AxAngle = AxAngle;
- vtab->Offset = Offset;
- vtab->Offset2 = Offset2;
- vtab->Resolve = Resolve;
- vtab->ResolvePoints = ResolvePoints;
- vtab->LineDef = LineDef;
- vtab->LineContains = LineContains;
- vtab->LineCrossing = LineCrossing;
- vtab->LineOffset = LineOffset;
- vtab->Overlay = Overlay;
- vtab->PermAxes = PermAxes;
- vtab->PickAxes = PickAxes;
- vtab->PrimaryFrame = PrimaryFrame;
- vtab->SetAxis = SetAxis;
- vtab->SetDigits = SetDigits;
- vtab->SetDirection = SetDirection;
- vtab->SetDomain = SetDomain;
- vtab->SetFormat = SetFormat;
- vtab->SetLabel = SetLabel;
- vtab->SetMatchEnd = SetMatchEnd;
- vtab->SetMaxAxes = SetMaxAxes;
- vtab->SetMinAxes = SetMinAxes;
- vtab->SetPermute = SetPermute;
- vtab->SetPreserveAxes = SetPreserveAxes;
- vtab->SetSymbol = SetSymbol;
- vtab->SetTitle = SetTitle;
- vtab->SetUnit = SetUnit;
- vtab->SubFrame = SubFrame;
- vtab->TestDigits = TestDigits;
- vtab->TestDirection = TestDirection;
- vtab->TestDomain = TestDomain;
- vtab->TestFormat = TestFormat;
- vtab->TestLabel = TestLabel;
- vtab->TestMatchEnd = TestMatchEnd;
- vtab->TestMaxAxes = TestMaxAxes;
- vtab->TestMinAxes = TestMinAxes;
- vtab->TestPermute = TestPermute;
- vtab->TestPreserveAxes = TestPreserveAxes;
- vtab->TestSymbol = TestSymbol;
- vtab->TestTitle = TestTitle;
- vtab->TestUnit = TestUnit;
- vtab->Unformat = Unformat;
- vtab->ValidateAxis = ValidateAxis;
- vtab->ValidateAxisSelection = ValidateAxisSelection;
- vtab->ValidateSystem = ValidateSystem;
- vtab->SystemString = SystemString;
- vtab->SystemCode = SystemCode;
-
- vtab->GetFrameFlags = GetFrameFlags;
- vtab->SetFrameFlags = SetFrameFlags;
-
- vtab->TestActiveUnit = TestActiveUnit;
- vtab->GetActiveUnit = GetActiveUnit;
- vtab->SetActiveUnit = SetActiveUnit;
-
- vtab->ClearSystem = ClearSystem;
- vtab->GetSystem = GetSystem;
- vtab->SetSystem = SetSystem;
- vtab->TestSystem = TestSystem;
-
- vtab->ClearAlignSystem = ClearAlignSystem;
- vtab->GetAlignSystem = GetAlignSystem;
- vtab->SetAlignSystem = SetAlignSystem;
- vtab->TestAlignSystem = TestAlignSystem;
-
- vtab->ClearTop = ClearTop;
- vtab->GetTop = GetTop;
- vtab->SetTop = SetTop;
- vtab->TestTop = TestTop;
-
- vtab->ClearBottom = ClearBottom;
- vtab->GetBottom = GetBottom;
- vtab->SetBottom = SetBottom;
- vtab->TestBottom = TestBottom;
-
- vtab->ClearEpoch = ClearEpoch;
- vtab->GetEpoch = GetEpoch;
- vtab->SetEpoch = SetEpoch;
- vtab->TestEpoch = TestEpoch;
-
- vtab->ClearObsLat = ClearObsLat;
- vtab->TestObsLat = TestObsLat;
- vtab->GetObsLat = GetObsLat;
- vtab->SetObsLat = SetObsLat;
-
- vtab->ClearObsLon = ClearObsLon;
- vtab->TestObsLon = TestObsLon;
- vtab->GetObsLon = GetObsLon;
- vtab->SetObsLon = SetObsLon;
-
- vtab->ClearObsAlt = ClearObsAlt;
- vtab->TestObsAlt = TestObsAlt;
- vtab->GetObsAlt = GetObsAlt;
- vtab->SetObsAlt = SetObsAlt;
-
- vtab->ClearDut1 = ClearDut1;
- vtab->GetDut1 = GetDut1;
- vtab->SetDut1 = SetDut1;
- vtab->TestDut1 = TestDut1;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
- parent_cleanattribs = object->CleanAttribs;
- object->CleanAttribs = CleanAttribs;
-
-#if defined(THREAD_SAFE)
- parent_managelock = object->ManageLock;
- object->ManageLock = ManageLock;
-#endif
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- mapping = (AstMappingVtab *) vtab;
-
- object->Equal = Equal;
- mapping->GetIsLinear = GetIsLinear;
- mapping->GetIsSimple = GetIsSimple;
- mapping->GetNin = GetNin;
- mapping->GetNout = GetNout;
- mapping->ReportPoints = ReportPoints;
- mapping->Transform = Transform;
- mapping->MapSplit = MapSplit;
-
-/* Declare the copy constructor, destructor and class dump
- function. */
- astSetCopy( vtab, Copy );
- astSetDelete( vtab, Delete );
- astSetDump( vtab, Dump, "Frame", "Coordinate system description" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static void Intersect( AstFrame *this, const double a1[2],
- const double a2[2], const double b1[2],
- const double b2[2], double cross[2],
- int *status ) {
-/*
-*++
-* Name:
-c astIntersect
-f AST_INTERSECT
-
-* Purpose:
-* Find the point of intersection between two geodesic curves.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "frame.h"
-c void astIntersect( AstFrame *this, const double a1[2],
-c const double a2[2], const double b1[2],
-c const double b2[2], double cross[2] )
-f CALL AST_INTERSECT( THIS, A1, A2, B1, B2, CROSS, STATUS )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-c This function
-f This routine
-* finds the coordinate values at the point of intersection between
-* two geodesic curves. Each curve is specified by two points on
-* the curve. It can only be used with 2-dimensional Frames.
-*
-* For example, in a basic Frame, it will find the point of
-* intersection between two straight lines. But for a SkyFrame it
-* will find an intersection of two great circles.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Frame.
-c a1
-f A1( 2 ) = DOUBLE PRECISION (Given)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* (Naxes attribute). This should contain the coordinates of the
-* first point on the first geodesic curve.
-c a2
-f A2( 2 ) = DOUBLE PRECISION (Given)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* (Naxes attribute). This should contain the coordinates of a
-* second point on the first geodesic curve. It should not be
-* co-incident with the first point.
-c b1
-f B1( 2 ) = DOUBLE PRECISION (Given)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* (Naxes attribute). This should contain the coordinates of the
-* first point on the second geodesic curve.
-c b2
-f B2( 2 ) = DOUBLE PRECISION (Given)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* (Naxes attribute). This should contain the coordinates of a
-* second point on the second geodesic curve. It should not be
-* co-incident with the first point.
-c cross
-f CROSS( 2 ) = DOUBLE PRECISION (Returned)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* in which the coordinates of the required intersection will
-* be returned.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - For SkyFrames each curve will be a great circle, and in general
-* each pair of curves will intersect at two diametrically opposite
-* points on the sky. The returned position is the one which is
-* closest to point
-c "a1".
-f A1.
-* - This function will return "bad" coordinate values (AST__BAD)
-* if any of the input coordinates has this value, or if the two
-* points defining either geodesic are co-incident, or if the two
-* curves do not intersect.
-c - The geodesic curve used by this function is the path of
-f - The geodesic curve used by this routine is the path of
-* shortest distance between two points, as defined by the
-c astDistance function.
-f AST_DISTANCE function.
-* - An error will be reported if the Frame is not 2-dimensional.
-*--
-*/
-
-/* Local Variables: */
- double ca; /* Y axis intercept of line a */
- double cb; /* Y axis intercept of line b */
- double dxa; /* X range spanned by line a */
- double dxb; /* X range spanned by line b */
- double ma; /* Gradient of line a */
- double mb; /* Gradient of line b */
- int naxes; /* Number of Frame axes */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Initialize bad values. */
- cross[ 0 ] = AST__BAD;
- cross[ 1 ] = AST__BAD;
-
-/* Determine the number of Frame axes. */
- naxes = astGetNaxes( this );
-
-/* Report an error if the Frame is not 2 dimensional. */
- if( naxes != 2 && astOK ) {
- astError( AST__NAXIN, "astIntersect(%s): Invalid number of Frame axes (%d)."
- " astIntersect can only be used with 2 dimensonal Frames.", status,
- astGetClass( this ), naxes );
- }
-
-/* Check that all supplied values are OK. */
- if ( ( a1[ 0 ] != AST__BAD ) && ( a1[ 1 ] != AST__BAD ) &&
- ( a2[ 0 ] != AST__BAD ) && ( a2[ 1 ] != AST__BAD ) &&
- ( b1[ 0 ] != AST__BAD ) && ( b1[ 1 ] != AST__BAD ) &&
- ( b2[ 0 ] != AST__BAD ) && ( b2[ 1 ] != AST__BAD ) ) {
-
-/* Find the x increments spanned by the two lines. */
-
-/* Check the first line is not vertical. */
- dxa = a2[ 0 ] - a1[ 0 ];
- dxb = b2[ 0 ] - b1[ 0 ];
- if( dxa != 0.0 ) {
-
-/* Find the gradient and Y axis intercept of the first line. */
- ma = ( a2[ 1 ] - a1[ 1 ] )/dxa;
- ca = a1[ 1 ] - a1[ 0 ]*ma;
-
-/* Check the second line is not vertical. */
- if( dxb != 0.0 ) {
-
-/* Find the gradient and Y axis intercept of the second line. */
- mb = ( b2[ 1 ] - b1[ 1 ] )/dxb;
- cb = b1[ 1 ] - b1[ 0 ]*mb;
-
-/* Check the lines are not parallel. */
- if( ma != mb ) {
-
-/* Find the intersection of the two lines. */
- cross[ 0 ] = ( cb -ca )/( ma - mb );
- cross[ 1 ] = ( ( ma + mb )*cross[ 0 ] + ca + cb )/2;
- }
-
-/* If the second line is vertical but the first is not. */
- } else if( b1[ 1 ] != b2[ 1 ] ){
- cross[ 0 ] = b1[ 0 ];
- cross[ 1 ] = ma*b1[ 0 ] + ca;
- }
-
-/* First line is vertical but second is not. */
- } else if( dxb != 0.0 && a1[ 1 ] != a2[ 1 ] ){
-
-/* Find the gradient and Y axis intercept of the second line. */
- mb = ( b2[ 1 ] - b1[ 1 ] )/dxb;
- cb = b1[ 1 ] - b1[ 0 ]*mb;
-
-/* Find the intercection. */
- cross[ 0 ] = a1[ 0 ];
- cross[ 1 ] = mb*a1[ 0 ] + cb;
- }
- }
-}
-
-static int IsUnitFrame( AstFrame *this, int *status ){
-/*
-*+
-* Name:
-* astIsUnitFrame
-
-* Purpose:
-* Is this Frame equivalent to a UnitMap?
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* int astIsUnitFrame( AstFrame *this )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function returns a flag indicating if the supplied Frame is
-* equivalent to a UnitMap when treated as a Mapping (note, the Frame
-* class inherits from Mapping and therefore every Frame is also a Mapping).
-
-* Parameters:
-* this
-* Pointer to the Frame.
-
-* Returned Value:
-* A non-zero value is returned if the supplied Frame is equivalent to
-* a UnitMap when treated as a Mapping.
-
-*-
-*/
-
-/* Check the local error status. */
- if( !astOK ) return 0;
-
-/* The base Frame class is always equivalent to a UnitMap. */
- return 1;
-}
-
-static int LineContains( AstFrame *this, AstLineDef *l, int def, double *point, int *status ) {
-/*
-*+
-* Name:
-* astLineContains
-
-* Purpose:
-* Determine if a line contains a point.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* int astLineContains( AstFrame *this, AstLineDef *l, int def, double *point )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function determines if the supplied point is on the supplied
-* line within the supplied Frame. The start point of the line is
-* considered to be within the line, but the end point is not. The tests
-* are that the point of closest approach of the line to the point should
-* be between the start and end, and that the distance from the point to
-* the point of closest aproach should be less than 1.0E-7 of the length
-* of the line.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* l
-* Pointer to the structure defining the line.
-* def
-* Should be set non-zero if the "point" array was created by a
-* call to astLineCrossing (in which case it may contain extra
-* information following the axis values),and zero otherwise.
-* point
-* Point to an array containing the axis values of the point to be
-* tested, possibly followed by extra cached information (see "def").
-
-* Returned Value:
-* A non-zero value is returned if the line contains the point.
-
-* Notes:
-* - The pointer supplied for "l" should have been created using the
-* astLineDef method. These structures contained cached information about
-* the lines which improve the efficiency of this method when many
-* repeated calls are made. An error will be reported if the structure
-* does not refer to the Frame specified by "this".
-* - Zero will be returned if this function is invoked with the global
-* error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- int result;
- double dx, dy, p;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Check that the line refers to the supplied Frame. */
- if( l->frame != this ) {
- astError( AST__INTER, "astLineContains(%s): The supplied line does "
- "not relate to the supplied %s (AST internal programming "
- "error).", status, astGetClass( this ), astGetClass( this ) );
-
-/* If the point is good, find the offsets from the start of the line. */
- } else if( point[ 0 ] != AST__BAD && point[ 1 ] != AST__BAD ) {
- dx = point[ 0 ] - l->start[ 0 ];
- dy = point[ 1 ] - l->start[ 1 ];
-
-/* Check the nearest point on the line is between the start and end.
- Exclude the end point. */
- p = dx*l->dir[ 0 ] + dy*l->dir[ 1 ];
- if( p >= 0.0 && p < l->length ) {
-
-/* Check the distance from the point to the nearest point on the line is not
- further than 1.0E-7 of the length of the line. */
- if( fabs( dx*l->q[ 0 ] + dy*l->q[ 1 ] ) <= 1.0E-7*l->length ) {
- result = 1;
- }
- }
- }
-
-/* Return zero if an error occurred. */
- if( !astOK ) result = 0;
-
-/* Return a pointer to the output structure. */
- return result;
-}
-
-static int LineCrossing( AstFrame *this, AstLineDef *l1, AstLineDef *l2,
- double **cross, int *status ) {
-/*
-*+
-* Name:
-* astLineCrossing
-
-* Purpose:
-* Determine if two lines cross.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* int astLineCrossing( AstFrame *this, AstLineDef *l1, AstLineDef *l2,
-* double **cross )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function determines if the two suplied line segments cross,
-* and if so returns the axis values at the point where they cross.
-* A flag is also returned indicating if the crossing point occurs
-* within the length of both line segments, or outside one or both of
-* the line segments.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* l1
-* Pointer to the structure defining the first line.
-* l2
-* Pointer to the structure defining the second line.
-* cross
-* Pointer to a location at which to put a pointer to a dynamically
-* alocated array containing the axis values at the crossing. If
-* NULL is supplied no such array is returned. Otherwise, the returned
-* array should be freed using astFree when no longer needed. If the
-* lines are parallel (i.e. do not cross) then AST__BAD is returned for
-* all axis values. Note usable axis values are returned even if the
-* lines cross outside the segment defined by the start and end points
-* of the lines. The order of axes in the returned array will take
-* account of the current axis permutation array if appropriate. Note,
-* sub-classes such as SkyFrame may append extra values to the end
-* of the basic frame axis values. A NULL pointer is returned if an
-* error occurs.
-
-* Returned Value:
-* A non-zero value is returned if the lines cross at a point which is
-* within the [start,end) segment of the lines that are flagged as
-* finite (if a line is marked as infinite any crossing is assumed to
-* be within the bounds of the line). If the crossing point is outside
-* this segment on either (inifinte) line, or if the lines are parallel,
-* zero is returned. Note, the start point is considered to be inside
-* the length of the segment, but the end point is outside.
-
-* Notes:
-* - The pointers supplied for "l1" and "l2" should have been created
-* using the astLineDef method. These structures contained cached
-* information about the lines which improve the efficiency of this method
-* when many repeated calls are made. An error will be reported if
-* either structure does not refer to the Frame specified by "this".
-* - Zero will be returned if this function is invoked with the global
-* error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- double *crossing; /* Returned array */
- double den; /* Denominator */
- double dx; /* Offset in start X values */
- double dy; /* Offset in start Y values */
- double t1; /* Distance from start of line 1 to crossing */
- double t2; /* Distance from start of line 2 to crossing */
- int result; /* Returned value */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Initialise. */
- result = 0;
- crossing = astMalloc( sizeof(double)*2 );
-
-/* Check that both lines refer to the supplied Frame. */
- if( l1->frame != this ) {
- astError( AST__INTER, "astLineCrossing(%s): First supplied line does "
- "not relate to the supplied %s (AST internal programming "
- "error).", status, astGetClass( this ), astGetClass( this ) );
-
- } else if( l2->frame != this ) {
- astError( AST__INTER, "astLineCrossing(%s): Second supplied line does "
- "not relate to the supplied %s (AST internal programming "
- "error).", status, astGetClass( this ), astGetClass( this ) );
-
- } else if( crossing ){
-
-/* Each of the lines can be represented as "p = start + t.v" where start is
- the start position, v is the unit vector pointing from start to end,
- and t is the scalar distance from the start position. So to find the
- intersection put "start1 + t1.v1 = start2 + t2.v2" and solve for t1
- and t2. */
- den = (l1->dir[ 0 ])*(l2->dir[ 1 ]) - (l2->dir[ 0 ])*(l1->dir[ 1 ]);
- if( den != 0.0 ) {
- dx = l2->start[ 0 ] - l1->start[ 0 ];
- dy = l2->start[ 1 ] - l1->start[ 1 ];
- t1 = ( l2->dir[ 1 ]*dx - l2->dir[ 0 ]*dy )/den;
- t2 = ( l1->dir[ 1 ]*dx - l1->dir[ 0 ]*dy )/den;
-
-/* Store the crossing point, using the smaller t value to redue error. */
- if( fabs( t1 ) < fabs( t2 ) ) {
- crossing[ 0 ] = l1->start[ 0 ] + t1*l1->dir[ 0 ];
- crossing[ 1 ] = l1->start[ 1 ] + t1*l1->dir[ 1 ];
- } else {
- crossing[ 0 ] = l2->start[ 0 ] + t2*l2->dir[ 0 ];
- crossing[ 1 ] = l2->start[ 1 ] + t2*l2->dir[ 1 ];
- }
-
-/* See if the intersection is within the length of both lines (excluding
- the end points). If a line is flagged as infinite, set the "t" parameter
- to zero to make it look like the crossing is within the line. */
- if( l1->infinite ) t1 = 0.0;
- if( l2->infinite ) t2 = 0.0;
-
- if( t1 >= 0.0 && t1 < l1->length &&
- t2 >= 0.0 && t2 < l2->length ) result = 1;
-
- } else {
- crossing[ 0 ] = AST__BAD;
- crossing[ 1 ] = AST__BAD;
- }
- }
-
-/* Return zero if an error occurred. */
- if( !astOK ) {
- crossing = astFree( crossing );
- result = 0;
- }
-
-/* Return the crossing pointer. */
- if( cross ) {
- *cross = crossing;
- } else if( crossing ){
- crossing = astFree( crossing );
- }
-
-/* Return a pointer to the output structure. */
- return result;
-}
-
-static AstLineDef *LineDef( AstFrame *this, const double start[2],
- const double end[2], int *status ) {
-/*
-*+
-* Name:
-* astLineDef
-
-* Purpose:
-* Creates a structure describing a line segment in a 2D Frame.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* AstLineDef *astLineDef( AstFrame *this, const double start[2],
-* const double end[2] )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function creates a structure containing information describing a
-* given line segment within the supplied 2D Frame. This may include
-* information which allows other methods such as astLineCrossing to
-* function more efficiently. Thus the returned structure acts as a
-* cache to store intermediate values used by these other methods.
-
-* Parameters:
-* this
-* Pointer to the Frame. Must have 2 axes.
-* start
-* An array of 2 doubles marking the start of the line segment.
-* end
-* An array of 2 doubles marking the end of the line segment.
-
-* Returned Value:
-* Pointer to the memory structure containing the description of the
-* line. This structure should be freed using astFree when no longer
-* needed. A NULL pointer is returned (without error) if any of the
-* supplied axis values are AST__BAD.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstLineDef *result; /* Pointer to output structure */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Check the Frame has 2 axes. */
- if( astGetNaxes( this ) != 2 ) {
- astError( AST__INTER, "astLineDef(%s): The supplied %s is not 2 "
- "dimensional (internal AST proramming error).", status,
- astGetClass( this ), astGetClass( this ) );
- }
-
-/* Check the axis values are good */
- if( start[ 0 ] != AST__BAD && start[ 1 ] != AST__BAD &&
- end[ 0 ] != AST__BAD && end[ 1 ] != AST__BAD ) {
-
-/* Allocate memory for the returned structure. */
- result = astMalloc( sizeof( AstLineDef ) );
- if( result ) {
-
-/* Store the supplied axis values in the returned structure. */
- result->start[ 0 ] = start[ 0 ];
- result->start[ 1 ] = start[ 1 ];
- result->end[ 0 ] = end[ 0 ];
- result->end[ 1 ] = end[ 1 ];
-
-/* Store the length of the line segment. */
- result->length = astDistance( this, start, end );
-
-/* Store a unit vector pointing from the start to the end. */
- if( result->length > 0.0 ) {
- result->dir[ 0 ] = ( end[ 0 ] - start[ 0 ] )/result->length;
- result->dir[ 1 ] = ( end[ 1 ] - start[ 1 ] )/result->length;
- } else {
- result->dir[ 0 ] = 1.0;
- result->dir[ 1 ] = 0.0;
- }
-
-/* Store a unit vector perpendicular to the line, such that the vector
- points to the left, as vewied from the observer, when moving from the
- start to the end of the line. */
- result->q[ 0 ] = -result->dir[ 1 ];
- result->q[ 1 ] = result->dir[ 0 ];
-
-/* Store a pointer to the defining Frame. */
- result->frame = this;
-
-/* Indicate that the line is considered to be terminated at the start and
- end points. */
- result->infinite = 0;
- }
- }
-
-/* Free the returned pointer if an error occurred. */
- if( !astOK ) result = astFree( result );
-
-/* Return a pointer to the output structure. */
- return result;
-}
-
-static void LineOffset( AstFrame *this, AstLineDef *line, double par,
- double prp, double point[2], int *status ){
-/*
-*+
-* Name:
-* astLineOffset
-
-* Purpose:
-* Find a position close to a line.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* void LineOffset( AstFrame *this, AstLineDef *line, double par,
-* double prp, double point[2] )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function returns a position formed by moving a given distance along
-* the supplied line, and then a given distance away from the supplied line.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* line
-* Pointer to the structure defining the line.
-* par
-* The distance to move along the line from the start towards the end.
-* prp
-* The distance to move at right angles to the line. Positive
-* values result in movement to the left of the line, as seen from
-* the observer, when moving from start towards the end.
-
-* Notes:
-* - The pointer supplied for "line" should have been created using the
-* astLineDef method. This structure contains cached information about the
-* line which improves the efficiency of this method when many repeated
-* calls are made. An error will be reported if the structure does not
-* refer to the Frame specified by "this".
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Check that the line refers to the supplied Frame. */
- if( line->frame != this ) {
- astError( AST__INTER, "astLineOffset(%s): The supplied line does "
- "not relate to the supplied %s (AST internal programming "
- "error).", status, astGetClass( this ), astGetClass( this ) );
-
-/* This implementation uses simple flat geometry. */
- } else {
- point[ 0 ] = line->start[ 0 ] + par*line->dir[ 0 ] + prp*line->q[ 0 ];
- point[ 1 ] = line->start[ 1 ] + par*line->dir[ 1 ] + prp*line->q[ 1 ];
- }
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra,
- AstObject **fail, int *status ) {
-/*
-* Name:
-* ManageLock
-
-* Purpose:
-* Manage the thread lock on an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *ManageLock( AstObject *this, int mode, int extra,
-* AstObject **fail, int *status )
-
-* Class Membership:
-* CmpMap member function (over-rides the astManageLock protected
-* method inherited from the parent class).
-
-* Description:
-* This function manages the thread lock on the supplied Object. The
-* lock can be locked, unlocked or checked by this function as
-* deteremined by parameter "mode". See astLock for details of the way
-* these locks are used.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* mode
-* An integer flag indicating what the function should do:
-*
-* AST__LOCK: Lock the Object for exclusive use by the calling
-* thread. The "extra" value indicates what should be done if the
-* Object is already locked (wait or report an error - see astLock).
-*
-* AST__UNLOCK: Unlock the Object for use by other threads.
-*
-* AST__CHECKLOCK: Check that the object is locked for use by the
-* calling thread (report an error if not).
-* extra
-* Extra mode-specific information.
-* fail
-* If a non-zero function value is returned, a pointer to the
-* Object that caused the failure is returned at "*fail". This may
-* be "this" or it may be an Object contained within "this". Note,
-* the Object's reference count is not incremented, and so the
-* returned pointer should not be annulled. A NULL pointer is
-* returned if this function returns a value of zero.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A local status value:
-* 0 - Success
-* 1 - Could not lock or unlock the object because it was already
-* locked by another thread.
-* 2 - Failed to lock a POSIX mutex
-* 3 - Failed to unlock a POSIX mutex
-* 4 - Bad "mode" value supplied.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-*/
-
-/* Local Variables: */
- AstFrame *this; /* Pointer to Frame structure */
- int i; /* Loop count */
- int result; /* Returned status value */
-
-/* Initialise */
- result = 0;
-
-/* Check the supplied pointer is not NULL. */
- if( !this_object ) return result;
-
-/* Obtain a pointers to the Frame structure. */
- this = (AstFrame *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
- if( !result ) result = (*parent_managelock)( this_object, mode, extra,
- fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
- the supplied Object. */
- for( i = 0; i < this->naxes; i++ ) {
- if( !result ) result = astManageLock( this->axis[ i ], mode, extra,
- fail );
- }
-
- return result;
-
-}
-#endif
-
-static int *MapSplit( AstMapping *this_map, int nin, const int *in, AstMapping **map, int *status ){
-/*
-* Name:
-* MapSplit
-
-* Purpose:
-* Create a Mapping representing a subset of the inputs of an existing
-* Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frame.h"
-* int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status )
-
-* Class Membership:
-* Frame method (over-rides the protected astMapSplit method
-* inherited from the Mapping class).
-
-* Description:
-* This function creates a new Mapping by picking specified inputs from
-* an existing Frame. This is only possible if the specified inputs
-* correspond to some subset of the Frame outputs. That is, there
-* must exist a subset of the Frame outputs for which each output
-* depends only on the selected Frame inputs, and not on any of the
-* inputs which have not been selected. If this condition is not met
-* by the supplied Frame, then a NULL Mapping is returned.
-
-* Parameters:
-* this
-* Pointer to the Frame to be split (the Frame is not actually
-* modified by this function).
-* nin
-* The number of inputs to pick from "this".
-* in
-* Pointer to an array of indices (zero based) for the inputs which
-* are to be picked. This array should have "nin" elements. If "Nin"
-* is the number of inputs of the supplied Frame, then each element
-* should have a value in the range zero to Nin-1.
-* map
-* Address of a location at which to return a pointer to the new
-* Mapping. This Mapping will have "nin" inputs (the number of
-* outputs may be different to "nin"). A NULL pointer will be
-* returned if the supplied Frame has no subset of outputs which
-* depend only on the selected inputs.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated array of ints. The number of
-* elements in this array will equal the number of outputs for the
-* returned Mapping. Each element will hold the index of the
-* corresponding output in the supplied Frame. The array should be
-* freed using astFree when no longer needed. A NULL pointer will
-* be returned if no output Mapping can be created.
-
-* Notes:
-* - If this function is invoked with the global error status set,
-* or if it should fail for any reason, then NULL values will be
-* returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
- int *result; /* Returned pointer */
-
-/* Initialise */
- result = NULL;
- *map = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Pick the selected axes from the Frame. */
- *map = (AstMapping *) astPickAxes( (AstFrame *) this_map, nin, in, NULL );
-
-/* Return a copy of the supplied axis array.*/
- result = astStore( NULL, in, sizeof( int )*(size_t) nin );
-
-/* Free returned resources if an error has occurred. */
- if( !astOK ) {
- result = astFree( result );
- *map = astAnnul( *map );
- }
-
-/* Return the list of output indices. */
- return result;
-}
-
-static int Match( AstFrame *template, AstFrame *target,
- int **template_axes, int **target_axes,
- AstMapping **map, AstFrame **result, int *status ) {
-/*
-*+
-* Name:
-* astMatch
-
-* Purpose:
-* Determine if conversion is possible between two coordinate systems.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* int astMatch( AstFrame *template, AstFrame *target,
-* int **template_axes, int **target_axes,
-* AstMapping **map, AstFrame **result )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function matches a "template" frame to a "target" frame and
-* determines whether it is possible to convert coordinates between
-* them. If it is, a mapping that performs the transformation is
-* returned along with a new Frame that describes the coordinate
-* system that results when this mapping is applied to the "target"
-* coordinate system. In addition, information is returned to allow
-* the axes in this "result" Frame to be associated with the
-* corresponding axes in the "target" and "template" Frames from
-* which they are derived.
-
-* Parameters:
-* template
-* Pointer to the template Frame. This describes the coordinate
-* system (or set of possible coordinate systems) into which we
-* wish to convert our coordinates.
-* target
-* Pointer to the target Frame. This describes the coordinate
-* system in which we already have coordinates.
-* template_axes
-* Address of a location where a pointer to int will be returned
-* if the requested coordinate conversion is possible. This
-* pointer will point at a dynamically allocated array of
-* integers with one element for each axis of the "result" Frame
-* (see below). It must be freed by the caller (using astFree)
-* when no longer required.
-*
-* For each axis in the result Frame, the corresponding element
-* of this array will return the (zero-based) index of the
-* template Frame axis from which it is derived. If it is not
-* derived from any template frame axis, a value of -1 will be
-* returned instead.
-* target_axes
-* Address of a location where a pointer to int will be returned
-* if the requested coordinate conversion is possible. This
-* pointer will point at a dynamically allocated array of
-* integers with one element for each axis of the "result" Frame
-* (see below). It must be freed by the caller (using astFree)
-* when no longer required.
-*
-* For each axis in the result Frame, the corresponding element
-* of this array will return the (zero-based) index of the
-* target Frame axis from which it is derived. If it is not
-* derived from any target Frame axis, a value of -1 will be
-* returned instead.
-* map
-* Address of a location where a pointer to a new Mapping will
-* be returned if the requested coordinate conversion is
-* possible. If returned, the forward transformation of this
-* Mapping may be used to convert coordinates between the
-* "target" Frame and the "result" Frame (see below) and the
-* inverse transformation will convert in the opposite
-* direction.
-* result
-* Address of a location where a pointer to a new Frame will be
-* returned if the requested coordinate conversion is
-* possible. If returned, this Frame describes the coordinate
-* system that results from applying the returned Mapping
-* (above) to the "target" coordinate system. In general, this
-* Frame will combine attributes from (and will therefore be
-* more specific than) both the target and the template
-* Frames. In particular, when the template allows the
-* possibility of transformaing to any one of a set of
-* alternative coordinate systems, the "result" Frame will
-* indicate which of the alternatives was used.
-
-* Returned Value:
-* A non-zero value is returned if the requested coordinate
-* conversion is possible. Otherwise zero is returned (this will
-* not in itself result in an error condition).
-
-* Notes:
-* - By default, the "result" frame will have its number of axes
-* and axis order determined by the "template" Frame. However, if
-* the PreserveAxes attribute of the template frame is non-zero,
-* then the axis count and axis order of the "target" frame will be
-* used instead.
-* - The template_axes and target_axes arrays are provided so that
-* if the caller needs to permute the target and/or template axes
-* before invoking this function, it is possible to deduce how the
-* result axes should be permuted so as to correspond with the
-* original template/target axis order.
-* - For result axes that do not correspond with a template and/or
-* target axis (where a value of -1 is returned in the
-* template_axes and/or target_axes arrays), the caller has no
-* clear way of knowing where these axes should appear in any
-* permuted order. In this case, the relative position of these
-* axes within the result Frame (with respect to axes that do have
-* template/target axis associations) will be used to convey this
-* information. Such axes should be taken to be associated either
-* with the next preceding or following axis (depending on the
-* AST__MATCHEND flag of the template frame) which does have an
-* association.
-* - If the result Frame has zero axes, then NULL pointer values
-* will be returned for *template_axes and *target_axes.
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-
-* Implementation Notes:
-* This implementation addresses the matching of a Frame class
-* object to other types of Frames (i.e. the target may be from a
-* derived class). A Frame will match any other type of Frame with
-* an acceptable number of axes but will not distinguish axis order
-* (i.e. it will match the axes in whatever order they are
-* given). If the template Frame has a value set for its Domain
-* attribute, then it will only match another Frame with the same
-* Domain.
-*/
-
-/* Local Variables: */
- char *template_domain; /* Pointer to copy of template domain */
- const char *ptr; /* Pointer to domain string */
- const char *target_domain; /* Pointer to target domain string */
- int match; /* Template matches target? */
- int match_end; /* Match final axes of target? */
- int max_axes; /* Maximum acceptable number of axes */
- int min_axes; /* Minimum acceptable nu,ber of axes */
- int preserve_axes; /* Preserve target axes? */
- int result_axis; /* Loop counter for result axes */
- int result_naxes; /* Number of result axes */
- int target_naxes; /* Number of target axes */
- int template_naxes; /* Number of template axes */
-
-/* Initialise the returned values. */
- *template_axes = NULL;
- *target_axes = NULL;
- *map = NULL;
- *result = NULL;
- match = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return match;
-
-/* The first requirement for a match is that the target object is a Frame. This
- is already known to be true, as it forms part of the argument validation
- for this function. */
-
-/* The second requirement is that the number of target axes is acceptable.
- Obtain the number of target axes and the minimum and maximum number of axes
- that the template will match. */
- target_naxes = astGetNaxes( target );
- min_axes = astGetMinAxes( template );
- max_axes = astGetMaxAxes( template );
-
-/* Test if the number of target axes is acceptable. */
- if ( astOK ) {
- match = ( ( target_naxes >= min_axes ) && ( target_naxes <= max_axes ) );
- }
-
-/* The third requirement is that if the template has its Domain
- attribute defined, then the target must also have the same Domain
- (although it need not be set - the default will do). First check if
- the template has a domain. */
- if ( astOK && match ) {
- if ( astTestDomain( template ) ) {
-
-/* Obtain a pointer to the template domain. Then allocate memory and
- make a copy of it (this is necessary as we will next inquire the
- domain of the target and may over-write the buffer holding the
- template's domain). */
- ptr = astGetDomain( template );
- if ( astOK ) {
- template_domain = astStore( NULL, ptr,
- strlen( ptr ) + (size_t) 1 );
-
-/* Obtain a pointer to the target domain. */
- target_domain = astGetDomain( target );
-
-/* Compare the domain strings for equality. Then free the memory
- allocated above. */
- match = astOK && !strcmp( template_domain, target_domain );
- template_domain = astFree( template_domain );
- }
- }
- }
-
-/* If the template matches, obtain the values of the template's PreserveAxes
- and MatchEnd attributes and determine the number of template axes. */
- if ( astOK && match ) {
- preserve_axes = astGetPreserveAxes( template );
- match_end = astGetMatchEnd( template );
- template_naxes = astGetNaxes( template );
-
-/* If the PreserveAxes attribute is non-zero, the target axes should be
- preserved, so the number of result axes equals the number of target axes.
- Otherwise the number of template axes is used. */
- result_naxes = preserve_axes ? target_naxes : template_naxes;
-
-/* Allocate memory for the arrays of axis associations to be returned. */
- *template_axes = astMalloc( sizeof( int ) * (size_t) result_naxes );
- *target_axes = astMalloc( sizeof( int ) * (size_t) result_naxes );
- if ( astOK ) {
-
-/* Loop through each of the result axes. */
- for ( result_axis = 0; result_axis < result_naxes; result_axis++ ) {
-
-/* Set up the axis associations. By default, associate the first result axis
- with the first template/target axis. */
- (*template_axes)[ result_axis ] = result_axis;
- (*target_axes)[ result_axis ] = result_axis;
-
-/* However, if the MatchEnd attribute is non-zero, associate the last result
- axis with the last template/target axis (this only makes a difference if
- there is a difference in the number of axes). */
- if ( match_end ) {
- (*template_axes)[ result_axis ] +=
- template_naxes - result_naxes;
- (*target_axes)[ result_axis ] += target_naxes - result_naxes;
- }
-
-/* If any of the associations would be with a template/target axis that doesn't
- exist, then use an axis index of -1 for the association instead. */
- if ( ( (*template_axes)[ result_axis ] < 0 ) ||
- ( (*template_axes)[ result_axis ] >= template_naxes ) ) {
- (*template_axes)[ result_axis ] = -1;
- }
- if ( ( (*target_axes)[ result_axis ] < 0 ) ||
- ( (*target_axes)[ result_axis ] >= target_naxes ) ) {
- (*target_axes)[ result_axis ] = -1;
- }
- }
-
-/* Use the target's astSubFrame method to select the required axes from it,
- overlaying the template's attributes on to the resulting Frame. This process
- also generates the required Mapping between the target and result Frames. */
- match = astSubFrame( target, template,
- result_naxes, *target_axes, *template_axes,
- map, result );
- }
- }
-
-/* If an error occurred, free any allocated memory and reset the result. */
- if ( !astOK || !match ) {
- *template_axes = astFree( *template_axes );
- *target_axes = astFree( *target_axes );
- match = 0;
- }
-
-/* Return the result. */
- return match;
-}
-
-static void MatchAxes( AstFrame *frm1, AstFrame *frm2, int *axes,
- int *status ) {
-/*
-*++
-* Name:
-c astMatchAxes
-f AST_MATCHAXES
-
-* Purpose:
-* Find any corresponding axes in two Frames.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "frame.h"
-c void astMatchAxes( AstFrame *frm1, AstFrame *frm2, int *axes )
-f CALL AST_MATCHAXES( FRM1, FRM2, AXES, STATUS )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function looks for corresponding axes within two supplied
-* Frames. An array of integers is returned that contains an element
-* for each axis in the second supplied Frame. An element in this array
-* will be set to zero if the associated axis within the second Frame
-* has no corresponding axis within the first Frame. Otherwise, it
-* will be set to the index (a non-zero positive integer) of the
-* corresponding axis within the first supplied Frame.
-
-* Parameters:
-c frm1
-f FRM1 = INTEGER (Given)
-* Pointer to the first Frame.
-c frm2
-f FRM2 = INTEGER (Given)
-* Pointer to the second Frame.
-c axes
-f AXES = INTEGER( * ) (Returned)
-c Pointer to an
-f An
-* integer array in which to return the indices of the axes (within
-* the first Frame) that correspond to each axis within the second
-* Frame. Axis indices start at 1. A value of zero will be stored
-* in the returned array for each axis in the second Frame that has
-* no corresponding axis in the first Frame.
-*
-* The number of elements in this array must be greater than or
-* equal to the number of axes in the second Frame.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Applicability:
-* Frame
-* This function applies to all Frames.
-
-* Notes:
-* - Corresponding axes are identified by the fact that a Mapping can
-* be found between them using
-c astFindFrame or astConvert.
-f AST_FINDFRAME or AST_CONVERT.
-* Thus, "corresponding axes" are not necessarily identical. For
-* instance, SkyFrame axes in two Frames will match even if they
-* describe different celestial coordinate systems
-*--
-
-* Implementation Notes:
-* This function is simply a wrap-up for the protected astMatchAxesX
-* method which performs the required processing but swaps the order
-* of the first two arguments. This is a trick to allow the
-* astMatchAxes method to be over-ridden by derived classes on the
-* basis of the class of either of the first two arguments.
-*
-* In practice, each class that represents an encapsulated Frame (e.g.
-* FrameSet, Region, etc) should over-ride this method, extracting a
-* Frame from the supplied "frm1" pointer, and then invoking
-* astMatchAxesX.
-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Invoke the "astMatchAxesX" method with the first two arguments
- swapped. */
- astMatchAxesX( frm2, frm1, axes );
-}
-
-static void MatchAxesX( AstFrame *frm2, AstFrame *frm1, int *axes,
- int *status ) {
-/*
-*+
-* Name:
-* astMatchAxesX
-
-* Purpose:
-* Find any corresponding axes in two Frames.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* void astMatchAxesX( AstFrame *frm2, AstFrame *frm1, int *axes )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function performs the processing for the public astMatchAxes
-* method and has exactly the same interface except that the order
-* of the first two arguments is swapped. This is a trick to allow
-* the astMatchAxes method to be over-ridden by derived classes on
-* the basis of the class of either of its first two arguments.
-*
-* See the astMatchAxes method for details of the interface.
-*-
-*/
-
-/* Local Variables: */
- AstFrame *pfrm;
- AstFrame *resfrm;
- AstMapping *resmap;
- int *frm1_axes;
- int *pfrm_axes;
- int ifirst;
- int max_axes;
- int min_axes;
- int nax2;
- int pax;
- int preserve_axes;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Temporarily ensure that the PreserveAxes attribute is non-zero in
- the second supplied Frame. This means thte result Frame returned by
- astMatch below will have the axis count and order of the target Frame
- (i.e. "pfrm"). */
- if( astTestPreserveAxes( frm1 ) ) {
- preserve_axes = astGetPreserveAxes( frm1 ) ? 1 : 0;
- } else {
- preserve_axes = -1;
- }
- astSetPreserveAxes( frm1, 1 );
-
-/* Temporarily ensure that the MaxAxes and MinAxes attributes in the
- second supplied Frame are set so the Frame can be used as a template
- in astMatch for matching any number of axes. */
- if( astTestMaxAxes( frm1 ) ) {
- max_axes = astGetMaxAxes( frm1 );
- } else {
- max_axes = -1;
- }
- astSetMaxAxes( frm1, 10000 );
-
- if( astTestMinAxes( frm1 ) ) {
- min_axes = astGetMinAxes( frm1 );
- } else {
- min_axes = -1;
- }
- astSetMinAxes( frm1, 1 );
-
-/* Get the number of axes in the frm2 Frame. */
- nax2 = astGetNaxes( frm2 );
-
-/* Loop round the axes in the frm2 Frame. */
- for( ifirst = 0; ifirst < nax2; ifirst++ ) {
-
-/* Identify the primary Frame defining the current axis in the frm2
- Frame. */
- astPrimaryFrame( frm2, ifirst, &pfrm, &pax );
-
-/* Attempt to find a sub-frame within the frm1 Frame that corresponds to
- this primary Frame. */
- if( astMatch( frm1, pfrm, &frm1_axes, &pfrm_axes, &resmap, &resfrm ) ) {
-
-/* Store the one-based index within "frm1" of the corresponding axis. */
- axes[ ifirst ] = frm1_axes[ pax ] + 1;
-
-/* Free resources */
- frm1_axes = astFree( frm1_axes );
- pfrm_axes = astFree( pfrm_axes );
- resmap = astAnnul( resmap );
- resfrm = astAnnul( resfrm );
-
-/* If no corresponding axis was found store zero in the returned array. */
- } else {
- axes[ ifirst ] = 0;
- }
-
-/* Free resouces. */
- pfrm = astAnnul( pfrm );
- }
-
-/* Re-instate the original attribute values in the frm1 Frame. */
- if( preserve_axes == -1 ) {
- astClearPreserveAxes( frm1 );
- } else {
- astSetPreserveAxes( frm1, preserve_axes );
- }
-
- if( max_axes == -1 ) {
- astClearMaxAxes( frm1 );
- } else {
- astSetMaxAxes( frm1, max_axes );
- }
-
- if( min_axes == -1 ) {
- astClearMinAxes( frm1 );
- } else {
- astSetMinAxes( frm1, min_axes );
- }
-}
-
-static void NewUnit( AstAxis *ax, const char *old_units, const char *new_units,
- const char *method, const char *class, int *status ) {
-/*
-* Name:
-* NewUnit
-
-* Purpose:
-* Modify an Axis Label and Symbol to reflect a new Unit value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frame.h"
-* void NewUnit( AstAxis *ax, const char *old_units, const char *new_units,
-* const char *method, const char *class )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function modifies the Label and Symbol attributes of an Axis
-* to reflect a new Unit value. This function should only be called if
-* the ActiveUnit flag of the parent Frame is non-zero (this is not
-* checked within this function).
-*
-* If the axis has a set label, then we may be able to modify it to
-* correctly describe the axis in the supplied new units. For instance,
-* if the original units were "Hz", the original label was "frequency",
-* and the new units are "log(Hz)", then the label is modified to become
-* "log( frequency )".
-*
-* The Axis Format attribute is cleared if the supplied units are
-* different to the old units (because any set format is probably not
-* going to be appropriate for a new system of units.
-
-* Parameters:
-* ax
-* Pointer to the Axis.
-* old_units
-* The original units value.
-* new_units
-* The new units value.
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function
-* to validate an axis selection. This method name is used
-* solely for constructing error messages.
-* class
-* Pointer to a constant null-terminated character string
-* containing the name of the class upon which this function
-* was invoked. This is used solely for constructing error messages.
-
-* Returned Value:
-* void.
-*/
-
-/* Local Variables: */
- AstMapping *map; /* Pointer to units Mapping */
- char *new_lab; /* Pointer to new axis label */
- char *new_sym; /* Pointer to new axis symbol */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Check that the axis label is set. We relay on sub-classes to return
- appropriate default labels if the label is not set. */
- if( astTestAxisLabel( ax ) ) {
-
-/* See if it is possible to map the old units into the new units.
- If it is, then a Mapping is returned together with an appropriately
- modified label. */
- map = astUnitMapper( old_units, new_units, astGetAxisLabel( ax ),
- &new_lab );
-
-/* If succesfull, annul the Mapping (which we do not need), and store the
- modified label in the Axis, finally freeing the memory used to hold
- the modified label. */
- if( map ) {
- map = astAnnul( map );
- if( new_lab ) {
- astSetAxisLabel( ax, new_lab );
- new_lab = astFree( new_lab );
- }
- }
- }
-
-/* Do the same for the axis symbol. */
- if( astTestAxisSymbol( ax ) ) {
- map = astUnitMapper( old_units, new_units, astGetAxisSymbol( ax ),
- &new_sym );
- if( map ) {
- map = astAnnul( map );
- if( new_sym ) {
- astSetAxisSymbol( ax, new_sym );
- new_sym = astFree( new_sym );
- }
- }
- }
-
-/* If succesful, clear the axis format if the new and old units are
- different. */
- if( astOK ) {
- if( strcmp( old_units, new_units ) ) astClearAxisFormat( ax );
- }
-
-}
-
-static void Norm( AstFrame *this, double value[], int *status ) {
-/*
-*++
-* Name:
-c astNorm
-f AST_NORM
-
-* Purpose:
-* Normalise a set of Frame coordinates.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "frame.h"
-c void astNorm( AstFrame *this, double value[] )
-f CALL AST_NORM( THIS, VALUE, STATUS )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-c This function normalises a set of Frame coordinate values which
-f This routine normalises a set of Frame coordinate values which
-* might be unsuitable for display (e.g. may lie outside the
-* expected range) into a set of acceptable values suitable for
-* display.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Frame.
-c value
-f VALUE( * ) = DOUBLE PRECISION (Given and Returned)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* (Naxes attribute). Initially, this should contain a set of
-* coordinate values representing a point in the space which the
-* Frame describes. If these values lie outside the expected
-* range for the Frame, they will be replaced with more
-* acceptable (normalised) values. Otherwise, they will be
-* returned unchanged.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - For some classes of Frame, whose coordinate values are not
-* constrained, this function will never modify the values
-* supplied. However, for Frames whose axes represent cyclic
-* quantities (such as angles or positions on the sky), coordinates
-* will typically be wrapped into an appropriate standard range,
-* such as zero to 2*pi.
-* - The NormMap class is a Mapping which can be used to normalise a
-* set of points using the
-c astNorm function
-f AST_NORM routine
-* of a specified Frame.
-* - It is intended to be possible to put any set of coordinates
-* into a form suitable for display by using this function to
-* normalise them, followed by appropriate formatting
-c (using astFormat).
-f (using AST_FORMAT).
-*--
-*/
-
-/* Local Variables: */
- AstAxis *ax; /* Pointer to Axis object */
- int axis; /* Loop counter for axes */
- int naxes; /* Number of Frame axes */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain the number of Frame axes. */
- naxes = astGetNaxes( this );
-
-/* Loop to process the coordinate for each axis in turn. */
- for ( axis = 0; axis < naxes; axis++ ) {
-
-/* Obtain a pointer to the relevant Frame Axis. */
- ax = astGetAxis( this, axis );
-
-/* Normalise the coordinate for this axis. */
- astAxisNorm( ax, value + axis );
-
-/* Annul the pointer to the Axis. */
- ax = astAnnul( ax );
-
-/* Quit looping if an error occurs. */
- if ( !astOK ) break;
- }
-}
-
-static void NormBox( AstFrame *this, double lbnd[], double ubnd[],
- AstMapping *reg, int *status ) {
-/*
-*+
-* Name:
-* astNormBox
-
-* Purpose:
-* Extend a box to include effect of any singularities in the Frame.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* void astNormBox( AstFrame *this, double lbnd[], double ubnd[],
-* AstMapping *reg )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function modifies a supplied box to include the effect of any
-* singularities in the co-ordinate system represented by the Frame.
-* For a normal Cartesian coordinate system, the box will be returned
-* unchanged. Other classes of Frame may do other things. For instance,
-* a SkyFrame will check to see if the box contains either the north
-* or south pole and extend the box appropriately.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* lbnd
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). Initially, this should contain a set of
-* lower axis bounds for the box. They will be modified on exit
-* to include the effect of any singularities within the box.
-* ubnd
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). Initially, this should contain a set of
-* upper axis bounds for the box. They will be modified on exit
-* to include the effect of any singularities within the box.
-* reg
-* A Mapping which should be used to test if any singular points are
-* inside or outside the box. The Mapping should leave an input
-* position unchanged if the point is inside the box, and should
-* set all bad if the point is outside the box.
-*-
-*/
-
-/* This base class returns the box limits unchanged. */
-}
-
-static double Offset2( AstFrame *this, const double point1[2], double angle,
- double offset, double point2[2], int *status ){
-/*
-*++
-* Name:
-c astOffset2
-f AST_OFFSET2
-
-* Purpose:
-* Calculate an offset along a geodesic curve in a 2D Frame.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "frame.h"
-c double astOffset2( AstFrame *this, const double point1[2], double angle,
-c double offset, double point2[2] );
-f RESULT = AST_OFFSET2( THIS, POINT1, ANGLE, OFFSET, POINT2, STATUS )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-c This function finds the Frame coordinate values of a point which
-f This routine finds the Frame coordinate values of a point which
-* is offset a specified distance along the geodesic curve at a
-* given angle from a specified starting point. It can only be
-* used with 2-dimensional Frames.
-*
-* For example, in a basic Frame, this offset will be along the
-* straight line joining two points. For a more specialised Frame
-* describing a sky coordinate system, however, it would be along
-* the great circle passing through two sky positions.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Frame.
-c point1
-f POINT1( * ) = DOUBLE PRECISION (Given)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* (Naxes attribute). This should contain the coordinates of the
-* point marking the start of the geodesic curve.
-c angle
-f ANGLE = DOUBLE PRECISION (Given)
-* The angle (in radians) from the positive direction of the second
-* axis, to the direction of the required position, as seen from
-* the starting position. Positive rotation is in the sense of
-* rotation from the positive direction of axis 2 to the positive
-* direction of axis 1.
-c offset
-f OFFSET = DOUBLE PRECISION
-* The required offset from the first point along the geodesic
-* curve. If this is positive, it will be in the direction of the
-* given angle. If it is negative, it will be in the opposite
-* direction.
-c point2
-f POINT2( * ) = DOUBLE PRECISION (Returned)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* in which the coordinates of the required point will be returned.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astOffset2
-f AST_OFFSET2 = DOUBLE PRECISION
-* The direction of the geodesic curve at the end point. That is, the
-* angle (in radians) between the positive direction of the second
-* axis and the continuation of the geodesic curve at the requested
-* end point. Positive rotation is in the sense of rotation from
-* the positive direction of axis 2 to the positive direction of axis
-* 1.
-
-* Notes:
-c - The geodesic curve used by this function is the path of
-f - The geodesic curve used by this routine is the path of
-* shortest distance between two points, as defined by the
-c astDistance function.
-f AST_DISTANCE function.
-* - An error will be reported if the Frame is not 2-dimensional.
-* - This function will return "bad" coordinate values (AST__BAD)
-* if any of the input coordinates has this value.
-*--
-*/
-
-/* Local Variables: */
- int naxes; /* Number of Frame axes */
- double result; /* Returned value */
-
-/* Check the global error status. */
- result = AST__BAD;
- if ( !astOK ) return result;
-
-/* Initialize bad values. */
- point2[ 0 ] = AST__BAD;
- point2[ 1 ] = AST__BAD;
-
-/* Determine the number of Frame axes. */
- naxes = astGetNaxes( this );
-
-/* Report an error if the Frame is not 2 dimensional. */
- if( naxes != 2 && astOK ) {
- astError( AST__NAXIN, "astOffset2(%s): Invalid number of Frame axes (%d)."
- " astOffset2 can only be used with 2 dimensonal Frames.", status,
- astGetClass( this ), naxes );
- }
-
-/* Check the supplied values. */
- if ( astOK && point1[ 0 ] != AST__BAD && point1[ 1 ] != AST__BAD &&
- angle != AST__BAD && offset != AST__BAD ) {
-
-/* Store the results. */
- point2[ 0 ] = point1[ 0 ] + sin( angle )*offset;
- point2[ 1 ] = point1[ 1 ] + cos( angle )*offset;
-
-/* The position angle of the curve does not vary in cartesian coordinates */
- result = angle;
-
- }
-
-/* Return the result. */
- return result;
-
-}
-
-static void Offset( AstFrame *this, const double point1[],
- const double point2[], double offset, double point3[], int *status ) {
-/*
-*++
-* Name:
-c astOffset
-f AST_OFFSET
-
-* Purpose:
-* Calculate an offset along a geodesic curve.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "frame.h"
-c void astOffset( AstFrame *this,
-c const double point1[], const double point2[],
-c double offset, double point3[] )
-f CALL AST_OFFSET( THIS, POINT1, POINT2, OFFSET, POINT3, STATUS )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-c This function finds the Frame coordinate values of a point which
-f This routine finds the Frame coordinate values of a point which
-* is offset a specified distance along the geodesic curve between
-* two other points.
-*
-* For example, in a basic Frame, this offset will be along the
-* straight line joining two points. For a more specialised Frame
-* describing a sky coordinate system, however, it would be along
-* the great circle passing through two sky positions.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Frame.
-c point1
-f POINT1( * ) = DOUBLE PRECISION (Given)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* (Naxes attribute). This should contain the coordinates of the
-* point marking the start of the geodesic curve.
-c point2
-f POINT2( * ) = DOUBLE PRECISION (Given)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis.
-* This should contain the coordinates of the point marking the
-* end of the geodesic curve.
-c offset
-f OFFSET = DOUBLE PRECISION
-* The required offset from the first point along the geodesic
-* curve. If this is positive, it will be towards the second
-* point. If it is negative, it will be in the opposite
-* direction. This offset need not imply a position lying
-* between the two points given, as the curve will be
-* extrapolated if necessary.
-c point3
-f POINT3( * ) = DOUBLE PRECISION (Returned)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* in which the coordinates of the required point will be returned.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-c - The geodesic curve used by this function is the path of
-f - The geodesic curve used by this routine is the path of
-* shortest distance between two points, as defined by the
-c astDistance function.
-f AST_DISTANCE function.
-* - This function will return "bad" coordinate values (AST__BAD)
-* if any of the input coordinates has this value.
-* - "Bad" coordinate values will also be returned if the two
-* points supplied are coincident (or otherwise fail to uniquely
-* specify a geodesic curve) but the requested offset is non-zero.
-*--
-*/
-
-/* Local Variables: */
- double delta; /* Displacement along axis */
- double dist; /* Distance between points */
- double fract; /* Fraction of distance required */
- int axis; /* Loop counter for axes */
- int naxes; /* Number of Frame axes */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Determine the number of Frame axes. */
- naxes = astGetNaxes( this );
- if ( astOK ) {
-
-/* Loop to determine the Cartesian distance between points 1 and 2. */
- dist = 0.0;
- for ( axis = 0; axis < naxes; axis++ ) {
-
-/* If any of the coordinates supplied is bad, set the distance to be
- bad and quit looping. */
- if ( ( point1[ axis ] == AST__BAD ) ||
- ( point2[ axis ] == AST__BAD ) ) {
- dist = AST__BAD;
- break;
-
-/* Otherwise, accumulate the sum of squared displacements along each
- axis. */
- } else {
- delta = point1[ axis ] - point2[ axis ];
- dist += ( delta * delta );
- }
- }
-
-/* Take the square root to find the distance (if valid). */
- if ( dist != AST__BAD ) dist = sqrt( dist );
-
-/* If the distance between the points cannot be found, or the distance
- is zero but the required offset is non-zero, then set the result
- coordinates to be bad. */
- if ( ( dist == AST__BAD ) ||
- ( ( dist == 0.0 ) && ( offset != 0.0 ) ) ) {
- for ( axis = 0; axis < naxes; axis++ ) {
- point3[ axis ] = AST__BAD;
- }
-
-/* Otherwise, calculate what fraction of the distance between the
- points we need to move, and apply this fraction of the displacement
- along each axis. */
- } else {
- fract = ( dist == 0.0 ) ? 0.0 : offset / dist;
- for ( axis = 0; axis < naxes; axis++ ) {
- point3[ axis ] = point1[ axis ] +
- fract * ( point2[ axis ] - point1[ axis ] );
- }
- }
- }
-}
-
-static void Overlay( AstFrame *template, const int *template_axes,
- AstFrame *result, int *status ) {
-/*
-*+
-* Name:
-* astOverlay
-
-* Purpose:
-* Overlay the attributes of a template Frame on to another Frame.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* void astOverlay( AstFrame *template, const int *template_axes,
-* AstFrame *result )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function overlays attributes of one Frame (the "template") on to
-* another Frame, so as to over-ride selected attributes of that second
-* Frame. Normally only those attributes which have been specifically set
-* in the template will be transferred. This implements a form of
-* defaulting, in which a Frame acquires attributes from the template, but
-* retains its original attributes (as the default) if new values have not
-* previously been explicitly set in the template.
-
-* Parameters:
-* template
-* Pointer to the template Frame, for which values should have been
-* explicitly set for any attribute which is to be transferred.
-* template_axes
-* Pointer to an array of int, with one element for each axis of the
-* "result" Frame (see below). For each axis in the result frame, the
-* corresponding element of this array should contain the (zero-based)
-* index of the template axis to which it corresponds. This array is used
-* to establish from which template axis any axis-dependent attributes
-* should be obtained.
-*
-* If any axis in the result Frame is not associated with a template
-* axis, the corresponding element of this array should be set to -1.
-*
-* If a NULL pointer is supplied, the template and result axis
-* indicies are assumed to be identical.
-* result
-* Pointer to the Frame which is to receive the new attribute values.
-*-
-*/
-
-/* Local Variables: */
- AstAxis *result_ax; /* Pointer to result Axis object */
- AstAxis *template_ax; /* Pointer to template Axis object */
- AstSystemType sys; /* System value */
- int result_axis; /* Loop counter for result Frame axes */
- int result_naxes; /* Number of result Frame axes */
- int template_axis; /* Index of template Frame axis */
- int template_naxes; /* Number of template Frame axes */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Define a macro that tests whether an attribute is set in the template and,
- if so, transfers its value to the target. */
-#define OVERLAY(attribute) \
- if ( astTest##attribute( template ) ) { \
- astSet##attribute( result, astGet##attribute( template ) ); \
- }
-
-/* Use the macro to transfer each Frame attribute in turn. */
- OVERLAY(Dut1);
- OVERLAY(Digits);
- OVERLAY(Domain);
- OVERLAY(Epoch);
- OVERLAY(Title);
- OVERLAY(ObsLat)
- OVERLAY(ObsLon)
- OVERLAY(ObsAlt)
-
-/* Transfer the ActiveUnit flag. */
- astSetActiveUnit( result, astGetActiveUnit( template ) );
-
-/* Only overlay the System and AlignSystem attribute if the values are
- valid for the result class. */
- if( astTestSystem( template ) ) {
- sys = astGetSystem( template );
- if( astValidateSystem( result, sys, "astOverlay" ) ) {
- astSetSystem( result, sys );
- }
- }
-
- if( astTestAlignSystem( template ) ) {
- sys = astGetAlignSystem( template );
- if( astValidateSystem( result, sys, "astOverlay" ) ) {
- astSetAlignSystem( result, sys );
- }
- }
-
-/* Now transfer attributes associated with individual axes. Obtain the number
- of axes in the template and result Frames. */
- template_naxes = astGetNaxes( template );
- result_naxes = astGetNaxes( result );
- if ( astOK ) {
-
-/* Loop through all the axes in the result Frame and determine to which
- template axis each one corresponds. Check that the resulting axis index is
- valid. If not, then the axis will not receive new attributes. */
- for ( result_axis = 0; result_axis < result_naxes; result_axis++ ) {
- template_axis = template_axes ? template_axes[ result_axis ] : result_axis;
- if ( ( template_axis >= 0 ) && ( template_axis < template_naxes ) ) {
-
-/* Obtain pointers to the relevant Axis objects of each Frame and use the
- astAxisOverlay method of the template Axis to overlay attributes on to
- the result Axis. Annul the Axis pointers afterwards. */
- template_ax = astGetAxis( template, template_axis );
- result_ax = astGetAxis( result, result_axis );
- astAxisOverlay( template_ax, result_ax );
- template_ax = astAnnul( template_ax );
- result_ax = astAnnul( result_ax );
-
-/* Quit looping if an error occurs. */
- if ( !astOK ) break;
- }
- }
- }
-
-/* Undefine macros local to this function. */
-#undef OVERLAY
-}
-
-static void PermAxes( AstFrame *this, const int perm[], int *status ) {
-/*
-*+
-* Name:
-* astPermAxes
-
-* Purpose:
-* Permute the order of a Frame's axes.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* void astPermAxes( AstFrame *this, const int perm[] )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function permutes the order in which a Frame's axes occur.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* perm
-* An array of int (with one element for each axis of the Frame)
-* which lists the axes in their new order. Each element of this
-* array should be a (zero-based) axis index identifying the
-* axes according to their old (un-permuted) order.
-
-* Notes:
-* - Only genuine permutations of the axis order are permitted, so
-* each axis must be referenced exactly once in the "perm" array.
-* - If more than one axis permutation is applied to a Frame, the
-* effects are cumulative.
-*-
-
-* Implementation Notes:
-* - This function implements the basic astPermAxes method which is
-* available via the protected interface to the Frame class. A
-* public interface to this method is provided by the
-* astPermAxesId_ function.
-*/
-
-/* Local Variables: */
- int *old; /* Pointer to copy of old permutation array */
- int axis; /* Loop counter for Frame axes */
- int naxes; /* Number of Frame axes */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Validate the permutation array, to check that it describes a genuine
- permutation. */
- astCheckPerm( this, perm, "astPermAxes" );
-
-/* Obtain the number of Frame axes. */
- naxes = astGetNaxes( this );
-
-/* Allocate memory and use it to store a copy of the old permutation array for
- the Frame. */
- old = astStore( NULL, this->perm, sizeof( int ) * (size_t) naxes );
-
-/* Apply the new axis permutation cumulatively to the old one and store the
- result in the Frame. */
- if ( astOK ) {
- for ( axis = 0; axis < naxes; axis++ ) {
- this->perm[ axis ] = old[ perm[ axis ] ];
- }
- }
-
-/* Free the temporary copy of the old array. */
- old = astFree( old );
-}
-
-static AstFrame *PickAxes( AstFrame *this, int naxes, const int axes[],
- AstMapping **map, int *status ) {
-/*
-*+
-* Name:
-* astPickAxes
-
-* Purpose:
-* Create a new Frame by picking axes from an existing one.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* AstFrame *PickAxes( AstFrame *this, int naxes, const int axes[],
-* AstMapping **map )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function creates a new Frame whose axes are copies of axes
-* picked from an existing Frame. Other Frame attributes are also
-* copied to the new Frame. Zero or more of the original axes may
-* be picked in any order, but each can be used only
-* once. Additional axes (with default characteristics) may be
-* included in the new Frame if required.
-*
-* Optionally, a Mapping that converts between the original Frame's
-* axes and those of the new Frame may also be returned.
-
-* Parameters:
-* this
-* Pointer to the original Frame.
-* naxes
-* The number of axes required in the new Frame.
-* axes
-* Pointer to an array of int with naxes elements. This should
-* contain (zero based) axis indices specifying the axes which
-* are to be included in the new Frame, in the order
-* required. Each axis index may occur only once.
-*
-* If additional (default) axes are also to be included, the
-* corresponding elements of this array should be set to -1.
-* map
-* Address of a location to receive a pointer to a new
-* Mapping. This will be a PermMap (or a UnitMap as a special
-* case) that describes the axis permutation that has taken
-* place between the original and new Frames. The forward
-* transformation will convert from the original Frame's axes to
-* the new one's, and vice versa.
-*
-* If this Mapping is not required, a NULL value may be supplied
-* for this parameter.
-
-* Returned Value:
-* Pointer to the new Frame.
-
-* Notes:
-* - The class of object returned may differ from that of the
-* original Frame, depending on which axes are selected. For
-* example, if a single axis is picked from a SkyFrame (which
-* always has two axes), the resulting Frame cannot be a valid
-* SkyFrame, so will revert to the parent class (Frame) instead.
-* - The new Frame contains a deep copy of all the data selected
-* from the original Frame. Modifying the new Frame will therefore
-* not affect the original one.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-
-* Implementation Notes:
-* - This function implements the basic astPickAxes method
-* available via the protected interface to the Frame class. The
-* public interface to this method is provided by the
-* astPickAxesId_ function.
-*/
-
-/* Local Variables: */
- AstFrame *frame; /* Pointer to Frame to be returned */
- AstMapping *mapping; /* Pointer to Mapping to be returned */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the returned pointers. */
- frame = NULL;
- if ( map ) *map = NULL;
-
-/* Check that a valid set of axes is being selected . */
- astValidateAxisSelection( this, naxes, axes, "astPickAxes" );
-
-/* Create the required new Frame by selecting the axes. This also returns a
- Mapping which transforms between the original Frame and the new one. */
- astSubFrame( this, NULL, naxes, axes, NULL, &mapping, &frame );
- if ( astOK ) {
-
-/* Return the Mapping pointer if required. */
- if ( map ) {
- *map = mapping;
-
-/* Otherwise annul the Mapping. If an error occurs, also annul the Frame. */
- } else {
- mapping = astAnnul( mapping );
- if ( !astOK ) frame = astAnnul( frame );
- }
- }
-
-/* Return the pointer to the new Frame. */
- return frame;
-}
-
-static void PrimaryFrame( AstFrame *this, int axis1,
- AstFrame **frame, int *axis2, int *status ) {
-/*
-*+
-* Name:
-* astPrimaryFrame
-
-* Purpose:
-* Uniquely identify a primary Frame and one of its axes.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* void astPrimaryFrame( AstFrame *this, int axis1, AstFrame **frame,
-* int *axis2 )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function returns information about the underlying (primary) Frame
-* corresponding to a specified axis, when given what may be a compound
-* Frame composed of more than one simpler one.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* axis1
-* An axis index (zero-based) identifying the Frame axis for which
-* information is required.
-* frame
-* Address of a location to receive a pointer to the underlying (primary)
-* frame to which the requested axis belongs (i.e. this will not be a
-* compound Frame).
-* axis2
-* Pointer to an int which is to receive the (zero-based) axis
-* index within "frame" which identifies the axis being referred
-* to, using the axis order that applied when the primary Frame
-* was originally constructed (i.e. this function undoes all
-* subsequent axis pemutations and the effects of combining
-* Frames, in order to reveal the original underlying axis
-* order).
-
-* Notes:
-* - This protected method is provided so that class implementations can
-* distinguish the axes of frames from one another (e.g. can distinguish
-* a longitude axis as being different from a latitide axis) even after
-* their order has been permuted and they have been combined with axes from
-* other Frames.
-* - The reference count of the primary Frame will be incremented by one to
-* reflect the new pointer returned.
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Initialise the returned values. */
- *frame = NULL;
- *axis2 = 0;
-
-/* Validate and permute the axis index supplied. */
- axis1 = astValidateAxis( this, axis1, "astPrimaryFrame" );
-
-/* Since "this" is a primary Frame (i.e. is not compound), simply clone a
- pointer to it. */
- if ( astOK ) *frame = astClone( this );
-
-/* Return the permuted axis index, which refers to the original axis order. */
- if ( astOK ) *axis2 = axis1;
-}
-
-double astReadDateTime_( const char *value, int *status ) {
-/*
-*+
-* Name:
-* astReadDateTime
-
-* Purpose:
-* Read a date/time string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frame.h"
-* double astReadDateTime( const char *value )
-
-* Class Membership:
-* Frame member function.
-
-* Description:
-* This function reads a date/time string in a variety of formats and
-* returns the resulting time as a Modified Julian Date. If the string
-* cannot be interpreted as a date/time or contains invalid values, an
-* error is reported.
-
-* Parameters:
-* value
-* Pointer to a null terminated string containing the value to be read.
-
-* Returned Value:
-* The time as a Modified Julian date.
-
-* Date/Time Formats:
-* The date/time formats supported by this function are listed below. These
-* are interpreted in a case-insensitive manner and the function is
-* generally flexible about the presence of additional white space and the
-* use of alternative field delimiters.
-*
-* Besselian Epoch
-* Expressed in decimal years, with or without decimal places
-* ("B1950" or "B1976.13", for example).
-* Julian Epoch
-* Expressed in decimal years, with or without decimal places
-* ("J2000" or "J2100.9", for example).
-* Year
-* Decimal years, with or without decimal places ("1996.8" for example).
-* Such values are interpreted as a Besselian epoch (see above) if less
-* than 1984.0 and as a Julian epoch otherwise.
-* Julian Date
-* With or without decimal places ("JD 2454321.9" for example).
-* Modified Julian Date
-* With or without decimal places ("MJD 54321.4" for example).
-* Gregorian Calendar Date
-* With the month expressed as an integer or 3-character
-* abbreviation, and with optional decimal places to represent a
-* fraction of a day ("1996-10-2" or "1996-Oct-2.6" for
-* example). If no fractional part of a day is given, the time
-* refers to the start of the day (zero hours).
-* Gregorian Date and Time
-* Any calendar date (as above) but with a fraction of a day expressed
-* as hours, minutes and seconds ("1996-Oct-2 12:13:56.985" for example).
-* The date and time can be separated by a space or by a "T" (as used
-* by ISO8601).
-
-* Notes:
-* - The date/time value is interpreted as a calendar date and time, not
-* linked to any particular time system. Thus, interpretation of hours,
-* minutes and seconds is done in the obvious manner assuming 86400 seconds
-* in a day. No allowance for is made, for instance, for leap seconds or for
-* the varying length of a second in some time systems.
-* - A value of AST__BAD is returned if this function is invoked with the
-* global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Local Vaiables: */
- char cmonth[ 4 ]; /* Buffer for name of month */
- char sep1[ 2 ]; /* Year/month separator string */
- char sep2[ 2 ]; /* Month/day separator string */
- char sep3[ 2 ]; /* Hour/minute separator string */
- char sep4[ 2 ]; /* Minute/second separator string */
- char *cc; /* Pointer to copy of remaining text */
- const char *v; /* Pointer into value string */
- const char *p; /* Pointer to date/time separator */
- double day; /* Day number plus fraction of whole day */
- double epoch; /* Epoch stored as decimal years */
- double hms; /* Hours, min & sec as fraction of a day */
- double jd; /* Julian Date */
- double mjd; /* Modified Julian Date */
- double result; /* Result to be returned */
- double sec; /* Seconds and fractions of a second */
- int hour; /* Number of hours */
- int iday; /* Number of whole days */
- int l; /* Length of string remaining */
- int len; /* Length of string */
- int match; /* Date/time string has correct form? */
- int minute; /* Number of minutes */
- int month; /* Number of months */
- int nc; /* Number of characters read from string */
- int stat; /* Status return from SLALIB functions */
- int year; /* Number of years */
-
-/* Check the global error status. */
- if ( !astOK ) return AST__BAD;
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Obtain the length of the input string. */
- len = (int) strlen( value );
-
-/* Attempt to read the string using each recognised format in turn. */
-
-/* Besselian epoch in decimal years (e.g. "B1950.0"). */
-/* ================================================== */
- if ( nc = 0,
- ( 1 == astSscanf( value, " %*1[Bb] %lf %n", &epoch, &nc ) )
- && ( nc >= len ) ) {
-
-/* Convert to Modified Julian Date. */
- result = palSlaEpb2d( epoch );
-
-/* Julian epoch in decimal years (e.g. "J2000.0"). */
-/* =============================================== */
- } else if ( nc = 0,
- ( 1 == astSscanf( value, " %*1[Jj] %lf %n", &epoch, &nc ) )
- && ( nc >= len ) ) {
-
-/* Convert to Modified Julian Date. */
- result = palSlaEpj2d( epoch );
-
-/* Decimal years (e.g. "1976.2"). */
-/* ============================== */
- } else if ( nc = 0,
- ( 1 == astSscanf( value, " %lf %n", &epoch, &nc ) )
- && ( nc >= len ) ) {
-
-/* Convert to Modified Julian Date, treating the epoch as Julian or Besselian
- depending on whether it is 1984.0 or later. */
- result = ( epoch < 1984.0 ) ? palSlaEpb2d( epoch ) : palSlaEpj2d( epoch );
-
-/* Modified Julian Date (e.g. "MJD 54321.0"). */
-/* ============================================ */
- } else if ( nc = 0,
- ( 1 == astSscanf( value, " %*1[Mm] %*1[Jj] %*1[Dd] %lf %n",
- &mjd, &nc ) ) && ( nc >= len ) ) {
-
-/* Use the result directly. */
- result = mjd;
-
-/* Julian Date (e.g. "JD 2454321.5"). */
-/* ==================================== */
- } else if ( nc = 0,
- ( 1 == astSscanf( value, " %*1[Jj] %*1[Dd] %lf %n",
- &jd, &nc ) ) && ( nc >= len ) ) {
-
-/* Convert to Modified Julian Date. */
- result = jd - 2400000.5;
-
-/* Gregorian calendar date (e.g. "1996-10-2" or "1996-Oct-2"). */
-/* =========================================================== */
-/* This format also allows day fractions expressed as decimal days, e.g:
-
- "1996-Oct-2.5001"
-
- or as hours, minutes and seconds, e.g:
-
- "1996-Oct-2 12:14:30.52"
-
- Various alternative field delimiters are also allowed. */
- } else {
-
-/* Note that the method used to parse this format relies heavily on
- conditional execution controlled by "&&" and "||" operators. Initialise
- the variables used. */
- v = value;
- l = len;
- *cmonth = '\0';
- year = month = iday = hour = minute = 0;
- day = sec = 0.0;
-
-/* Identify the year and month. */
-/* ---------------------------- */
-/* Try to match an initial " 1996 - 10 -" or " 1996 10 " or similar. */
- match =
- ( nc = 0, ( 4 == astSscanf( v, " %d %1[:/-] %2d %1[:/-]%n",
- &year, sep1, &month, sep2, &nc ) ) );
- match = match ||
- ( nc = 0, ( 4 == astSscanf( v, " %d%1[ ] %2d%1[ ]%n",
- &year, sep1, &month, sep2, &nc ) ) );
-
-/* If that failed, allow " 1996 - Oct -" or " 1996 Oct " or similar. */
- match = match ||
- ( nc = 0, ( 4 == astSscanf( v,
- " %d %1[:/-] %3[ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "abcdefghijklmnopqrstuvwxyz] %1[:/-]%n",
- &year, sep1, cmonth, sep2, &nc ) ) );
- match = match ||
- ( nc = 0, ( 4 == astSscanf( v,
- " %d%1[ ] %3[ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "abcdefghijklmnopqrstuvwxyz]%1[ ]%n",
- &year, sep1, cmonth, sep2, &nc ) ) );
-
-/* Alternative field separators are permitted above, but ensure that
- they are both the same. */
- match = match && ( *sep1 == *sep2 );
-
-/* Identify the day and fraction of day. */
-/*-------------------------------------- */
-/* If the above matched correctly, modify the string pointer "v" to
- the next character to be interpreted and decrement the remaining
- string length. */
- if ( match ) {
- v += nc;
- l -= nc;
-
-/* ISO8601 format uses the litter T as a delimiter between the date and time.
- If there is a T in the remaining string, take a copy and change the T to
- a space. */
- p = strchr( v, 'T' );
- if( p ) {
- cc = astStore( NULL, v, l + 1 );
- cc[ p - v ] = ' ';
- v = cc;
- } else {
- cc = NULL;
- }
-
-/* We now try to match the following characters but without reading
- any values. This is done to ensure the string has the correct form
- (e.g. exclude "-" signs and exponents in numbers, which are
- otherwise hard to detect). */
-
-/* Try to match " 12.3456 " or similar. */
- match =
- ( nc = 0, ( 0 == astSscanf( v, " %*2[0123456789].%*[0123456789] %n",
- &nc ) )
- && ( nc == l ) );
-
-/* If that failed, then try to match " 12. " or similar. */
- match = match ||
- ( nc = 0, ( 0 == astSscanf( v, " %*2[0123456789]. %n", &nc ) )
- && ( nc == l ) );
-
-/* If that also failed, then try to match just " 12 " or similar. */
- match = match ||
- ( nc = 0, ( 0 == astSscanf( v, " %*2[0123456789] %n", &nc ) )
- && ( nc == l ) );
-
-/* If any of the above patterns matched, now read the data (the day number)
- as a double value. */
- if ( match ) {
- match = ( nc = 0, ( 1 == astSscanf( v, " %lf %n", &day, &nc ) )
- && ( nc == l ) );
-
-/* If none of the above matched, then look to see if the day fraction has been
- given in hours, minutes and seconds by trying to match " 12 03 : 45 :" or
- " 12 13 45 " or similar. */
- } else {
- match =
- ( nc = 0, ( 5 == astSscanf( v,
- " %2d%*1[ ] %2d %1[:/-] %2d %1[:/-]%n",
- &iday, &hour, sep3, &minute, sep4,
- &nc ) ) );
- match = match ||
- ( nc = 0, ( 5 == astSscanf( v, " %2d%*1[ ] %2d%1[ ] %2d%1[ ]%n",
- &iday, &hour, sep3, &minute, sep4,
- &nc ) ) );
-
-/* Alternative field separators are permitted above, but ensure that
- they are both the same. */
- match = match && ( *sep3 == *sep4 );
-
-/* If the day number was read as an integer, convert it to double. */
- if ( match ) day = (double) iday;
-
-/* If no match, see if we can get a match without a trailing seconds field. */
- if( !match ) {
- match =
- ( nc = 0, ( 4 == astSscanf( v,
- " %2d%*1[ ] %2d %1[:/-] %2d %n",
- &iday, &hour, sep3, &minute, &nc ) &&
- ( nc == l ) ) );
- match = match ||
- ( nc = 0, ( 4 == astSscanf( v, " %2d%*1[ ] %2d%1[ ] %2d %n",
- &iday, &hour, sep3, &minute, &nc ) &&
- ( nc == l ) ) );
-
-/* If the day number was read as an integer, convert it to double. */
- if ( match ) day = (double) iday;
-
-/* Otherwise, identify the seconds field. */
-/* -------------------------------------- */
-/* If hours and minutes fields have been matched, now look for the
- final seconds (and fractions of seconds) field. This is similar to
- the day/fraction field (see earlier) in that we first check that it
- has the correct form before reading its value. */
-
-/* Adjust the string pointer and remaining string length. */
- } else {
- v += nc;
- l -= nc;
-
-/* Try to match " 12.3456 " or similar. */
- match =
- ( nc = 0, ( 0 == astSscanf( v,
- " %*2[0123456789].%*[0123456789] %n",
- &nc ) )
- && ( nc == l ) );
-
-/* If that failed, then try to match " 12. " or similar. */
- match = match ||
- ( nc = 0, ( 0 == astSscanf( v, " %*2[0123456789]. %n", &nc ) )
- && ( nc == l ) );
-
-/* If that also failed, then try to match just " 12 " or similar. */
- match = match ||
- ( nc = 0, ( 0 == astSscanf( v, " %*2[0123456789] %n", &nc ) )
- && ( nc == l ) );
-
-/* If any of the above patterns matched, now read the data (the number of
- seconds) as a double value. */
- if ( match ) {
- match = ( nc = 0, ( 1 == astSscanf( v, " %lf %n", &sec, &nc ) )
- && ( nc == l ) );
- }
- }
- }
-
-/* Free resources */
- if( cc ) cc = astFree( cc );
-
- }
-
-/* Interpret the values that were read. */
-/* ------------------------------------ */
-/* We execute this if all of the above text matching was successful,
- transferred the required number of data values, and consumed the
- entire input string. */
- if ( match ) {
-
-/* See if the month was given as a character string (e.g. "Oct") instead of
- a number. If so, define local variables for use in converting it. */
- if ( *cmonth ) {
- char lcmonth[ 4 ]; /* Lower case copy of month string */
- const char *ptr; /* Pointer result from look up */
- const char *table = /* Month look up table */
- "jan feb mar apr may jun jul aug sep oct nov dec";
- int i; /* Loop counter for characters */
-
-/* Convert the month string to lower case. */
- for ( i = 0; cmonth[ i ]; i++ ) {
- lcmonth[ i ] = tolower( cmonth[ i ] );
- }
- lcmonth[ i ] = '\0';
-
-/* Look the month up in the table of months and generate the required month
- number. */
- if ( ( ptr = strstr( table, lcmonth ) ) ) {
- month = 1 + ( ptr - table ) / 4;
-
-/* If the lookup failed, report an error. */
- } else {
- astError( AST__DTERR, "Month value \"%s\" is invalid.", status,
- cmonth );
- }
- }
-
-/* If OK, extract the integral day number and convert years, months and days
- to a Modified Julian Date. */
- if ( astOK ) {
- iday = (int) day;
- palSlaCaldj( year, month, iday, &mjd, &stat );
-
-/* Examine the return status from the conversion and report an appropriate
- error if necessary. */
- switch ( stat ) {
- case 1:
- astError( AST__DTERR, "Year value (%d) is invalid.", status, year );
- break;
- case 2:
- astError( AST__DTERR, "Month value (%d) is invalid.", status, month );
- break;
- case 3:
- astError( AST__DTERR, "Day value (%.*g) is invalid.", status, DBL_DIG,
- day );
- break;
-
-/* If conversion to MJD was successful, add any fractional part of a day to the
- result. */
- default:
- mjd += ( day - (double) iday );
-
-/* Convert hours, minutes and seconds to a fraction of a day (this will give
- zero if none of these quantities was supplied). */
- palSlaDtf2d( hour, minute, sec, &hms, &stat );
-
-/* Examine the return status from the conversion and report an appropriate
- error if necessary. */
- switch ( stat ) {
- case 1:
- astError( AST__DTERR, "Hour value (%d) is invalid.", status, hour );
- break;
- case 2:
- astError( AST__DTERR, "Minute value (%d) is invalid.", status,
- minute );
- break;
- case 3:
- astError( AST__DTERR, "Seconds value (%.*g) is invalid.", status,
- DBL_DIG, sec );
- break;
-
-/* Add the fraction of a day derived from hours, minutes and seconds fields to
- the result. */
- default:
- mjd += hms;
- break;
- }
- break;
- }
-
-/* Return the result, if no error occurred. */
- if ( astOK ) result = mjd;
- }
-
-/* If none of the supported date/time formats matched, then report an error. */
- } else {
- astError( AST__DTERR, "Date/time does not have the correct form." , status);
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static void ReportPoints( AstMapping *this_mapping, int forward,
- AstPointSet *in_points, AstPointSet *out_points, int *status ) {
-/*
-* Name:
-* ReportPoints
-
-* Purpose:
-* Report the effect of transforming a set of points using a Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void ReportPoints( AstMapping *this, int forward,
-* AstPointSet *in_points, AstPointSet *out_points, int *status )
-
-* Class Membership:
-* Frame member function (over-rides the protected astReportPoints
-* method inherited from the Mapping class).
-
-* Description:
-* This function reports the coordinates of a set of points before
-* and after being transformed by a Frame, by writing them to
-* standard output.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* forward
-* A non-zero value indicates that the Frame's forward
-* coordinate transformation has been applied, while a zero
-* value indicates the inverse transformation.
-* in_points
-* Pointer to a PointSet which is associated with the
-* coordinates of a set of points before the Frame was applied.
-* out_points
-* Pointer to a PointSet which is associated with the
-* coordinates of the same set of points after the Frame has
-* been applied.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstFrame *this; /* Pointer to the Frame structure */
- double **ptr_in; /* Pointer to array of input data pointers */
- double **ptr_out; /* Pointer to array of output data pointers */
- int coord; /* Loop counter for coordinates */
- int ncoord_in; /* Number of input coordinates per point */
- int ncoord_out; /* Number of output coordinates per point */
- int npoint; /* Number of points to report */
- int npoint_in; /* Number of input points */
- int npoint_out; /* Number of output points */
- int point; /* Loop counter for points */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Frame structure. */
- this = (AstFrame *) this_mapping;
-
-/* Obtain the numbers of points and coordinates associated with each
- PointSet. */
- npoint_in = astGetNpoint( in_points );
- npoint_out = astGetNpoint( out_points );
- ncoord_in = astGetNcoord( in_points );
- ncoord_out = astGetNcoord( out_points );
-
-/* Obtain the pointers that give access to the coordinate data
- associated with each PointSet. */
- ptr_in = astGetPoints( in_points );
- ptr_out = astGetPoints( out_points );
-
-/* In the event that both PointSets don't contain equal numbers of
- points (this shouldn't actually happen), simply use the minimum
- number. */
- npoint = ( npoint_in < npoint_out ) ? npoint_in : npoint_out;
-
-/* Loop to report the effect of the transformation on each point in
- turn. */
- for ( point = 0; point < npoint; point++ ) {
-
-/* Report the input coordinates (in parentheses and separated by
- commas). Format each value for display using the Frame's astFormat
- method. */
- printf( "(" );
- for ( coord = 0; coord < ncoord_in; coord++ ) {
- printf( "%s%s", coord ? ", " : "",
- astFormat( this, coord, ptr_in[ coord ][ point ] ) );
- }
-
-/* Similarly report the output coordinates. */
- printf( ") --> (" );
- for ( coord = 0; coord < ncoord_out; coord++ ) {
- printf( "%s%s", coord ? ", " : "",
- astFormat( this, coord, ptr_out[ coord ][ point ] ) );
- }
- printf( ")\n" );
- }
-}
-
-static void Resolve( AstFrame *this, const double point1[],
- const double point2[], const double point3[],
- double point4[], double *d1, double *d2, int *status ){
-/*
-*++
-* Name:
-c astResolve
-f AST_RESOLVE
-
-* Purpose:
-* Resolve a vector into two orthogonal components
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "frame.h"
-c void astResolve( AstFrame *this, const double point1[],
-c const double point2[], const double point3[],
-c double point4[], double *d1, double *d2 );
-f CALL AST_RESOLVE( THIS, POINT1, POINT2, POINT3, POINT4, D1, D2,
-f STATUS )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-c This function resolves a vector into two perpendicular components.
-f This routine resolves a vector into two perpendicular components.
-* The vector from point 1 to point 2 is used as the basis vector.
-* The vector from point 1 to point 3 is resolved into components
-* parallel and perpendicular to this basis vector. The lengths of the
-* two components are returned, together with the position of closest
-* aproach of the basis vector to point 3.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Frame.
-c point1
-f POINT1( * ) = DOUBLE PRECISION (Given)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* (Naxes attribute). This marks the start of the basis vector,
-* and of the vector to be resolved.
-c point2
-f POINT2( * ) = DOUBLE PRECISION (Given)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* (Naxes attribute). This marks the end of the basis vector.
-c point3
-f POINT3( * ) = DOUBLE PRECISION (Given)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* (Naxes attribute). This marks the end of the vector to be
-* resolved.
-c point4
-f POINT4( * ) = DOUBLE PRECISION (Returned)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* in which the coordinates of the point of closest approach of the
-* basis vector to point 3 will be returned.
-c d1
-f D1 = DOUBLE PRECISION (Returned)
-c The address of a location at which to return the distance from
-f The distance from
-* point 1 to point 4 (that is, the length of the component parallel
-* to the basis vector). Positive values are in the same sense as
-* movement from point 1 to point 2.
-c d2
-f D2 = DOUBLE PRECISION (Returned)
-c The address of a location at which to return the distance from
-f The distance from
-* point 4 to point 3 (that is, the length of the component
-* perpendicular to the basis vector). The value is always positive.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-c - Each vector used in this function is the path of
-f - Each vector used in this routine is the path of
-* shortest distance between two points, as defined by the
-c astDistance function.
-f AST_DISTANCE function.
-* - This function will return "bad" coordinate values (AST__BAD)
-* if any of the input coordinates has this value, or if the required
-* output values are undefined.
-*--
-*/
-
-/* Local Variables: */
- double bv; /* Length of basis vector */
- double c; /* Component length */
- double dp; /* Dot product */
- int axis; /* Loop counter for axes */
- int naxes; /* Number of Frame axes */
- int ok; /* OK to proceed? */
-
-/* Check the global error status. */
- *d1 = AST__BAD;
- *d2 = AST__BAD;
- if ( !astOK ) return;
-
-/* Determine the number of Frame axes. */
- naxes = astGetNaxes( this );
-
-/* Initialize bad values, and check if the supplied vectors are good. */
- ok = 1;
- for( axis = 0; axis < naxes; axis++ ){
- point4[ axis ] = AST__BAD;
- if( point1[ axis ] == AST__BAD ||
- point2[ axis ] == AST__BAD ||
- point3[ axis ] == AST__BAD ) ok = 0;
- }
-
-/* Check the supplied values. */
- if ( ok ) {
-
-/* Find the dot product of the basis vector with the vector joining point 1
- and point 3. At the same time form the squared length of the basis
- vector. */
- dp = 0.0;
- bv = 0.0;
- for( axis = 0; axis < naxes; axis++ ){
- c = point2[ axis ] - point1[ axis ];
- dp += c * ( point3[ axis ] - point1[ axis ] );
- bv += c * c;
- }
-
-/* Check the basis vector does not have zero length, and convert the
- squared length into a length. */
- if( bv > 0.0 ) {
- bv = sqrt( bv );
-
-/* The dot product is the required distance d1 multiplied by the length
- of the basis vector. Form the distance d1. */
- *d1 = dp/bv;
-
-/* Offset away from point 1 towards point 2 by a distance of d1. */
- for( axis = 0; axis < naxes; axis++ ){
- point4[ axis ] = point1[ axis ] +
- (*d1/bv)*( point2[ axis ] - point1[ axis ] );
- }
-
-/* Finally, form the required length d2. */
- *d2 = 0.0;
- for( axis = 0; axis < naxes; axis++ ){
- c = ( point3[ axis ] - point4[ axis ] );
- *d2 += c*c;
- }
- *d2 = sqrt( *d2 );
-
- }
- }
-
- return;
-
-}
-
-static AstPointSet *ResolvePoints( AstFrame *this, const double point1[],
- const double point2[], AstPointSet *in,
- AstPointSet *out, int *status ) {
-/*
-*+
-* Name:
-* astResolvePoints
-
-* Purpose:
-* Resolve a set of vectors into orthogonal components
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* AstPointSet *astResolvePoints( AstFrame *this, const double point1[],
-* const double point2[], AstPointSet *in,
-* AstPointSet *out )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function takes a Frame and a set of vectors encapsulated
-* in a PointSet, and resolves each one into two orthogonal components,
-* returning these two components in another PointSet.
-*
-* This is exactly the same as the public astResolve method, except
-* that this method allows many vectors to be processed in a single call,
-* thus reducing the computational cost of overheads of many
-* individual calls to astResolve.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* point1
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). This marks the start of the basis vector,
-* and of the vectors to be resolved.
-* point2
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). This marks the end of the basis vector.
-* in
-* Pointer to the PointSet holding the ends of the vectors to be
-* resolved.
-* out
-* Pointer to a PointSet which will hold the length of the two
-* resolved components. A NULL value may also be given, in which
-* case a new PointSet will be created by this function.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet. The first axis will
-* hold the lengths of the vector components parallel to the basis vector.
-* These values will be signed (positive values are in the same sense as
-* movement from point 1 to point 2. The second axis will hold the lengths
-* of the vector components perpendicular to the basis vector. These
-* values will be signed only if the Frame is 2-dimensional, in which
-* case a positive value indicates that rotation from the basis vector
-* to the tested vector is in the same sense as rotation from the first
-* to the second axis of the Frame.
-
-* Notes:
-* - The number of coordinate values per point in the input
-* PointSet must match the number of axes in the supplied Frame.
-* - If an output PointSet is supplied, it must have space for
-* sufficient number of points and 2 coordinate values per point.
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-* - We assume flat geometry throughout this function. Other classes,
-* (e.g. SkyFrame) will override this method using more appropriate
-* geometry.
-*-
-*/
-
-/* Local Variables: */
- AstPointSet *result; /* Pointer to output PointSet */
- double **ptr_in; /* Pointers to input axis values */
- double **ptr_out; /* Pointers to returned axis values */
- double *basisv; /* Pointer to array holding basis vector */
- double *d1; /* Pointer to next parallel component value */
- double *d2; /* Pointer to next perpendicular component value */
- double *ip; /* Pointer to next input axis value */
- double bv; /* Length of basis vector */
- double c; /* Constant value */
- double d; /* Component length */
- double dp; /* Dot product */
- double x1; /* First axis of basis vector */
- double x2; /* First axis of test vector */
- double y1; /* Second axis of basis vector */
- double y2; /* Second axis of test vector */
- int axis; /* Loop counter for axes */
- int ipoint; /* Index of next point */
- int nax; /* Number of Frame axes */
- int ncoord_in; /* Number of input PointSet coordinates */
- int ncoord_out; /* Number of coordinates in output PointSet */
- int npoint; /* Number of points to transform */
- int npoint_out; /* Number of points in output PointSet */
- int ok; /* OK to proceed? */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain the number of axes in the Frame. */
- nax = astGetNaxes( this );
-
-/* Obtain the number of input vectors to resolve and the number of coordinate
- values per vector. */
- npoint = astGetNpoint( in );
- ncoord_in = astGetNcoord( in );
-
-/* If OK, check that the number of input coordinates matches the number
- required by the Frame. Report an error if these numbers do not match. */
- if ( astOK && ( ncoord_in != nax ) ) {
- astError( AST__NCPIN, "astResolvePoints(%s): Bad number of coordinate "
- "values (%d) in input %s.", status, astGetClass( this ), ncoord_in,
- astGetClass( in ) );
- astError( AST__NCPIN, "The %s given requires %d coordinate value(s) for "
- "each input point.", status, astGetClass( this ), nax );
- }
-
-/* If still OK, and a non-NULL pointer has been given for the output PointSet,
- then obtain the number of points and number of coordinates per point for
- this PointSet. */
- if ( astOK && out ) {
- npoint_out = astGetNpoint( out );
- ncoord_out = astGetNcoord( out );
-
-/* Check that the dimensions of this PointSet are adequate to accommodate the
- output coordinate values and report an error if they are not. */
- if ( astOK ) {
- if ( npoint_out < npoint ) {
- astError( AST__NOPTS, "astResolvePoints(%s): Too few points (%d) in "
- "output %s.", status, astGetClass( this ), npoint_out,
- astGetClass( out ) );
- astError( AST__NOPTS, "The %s needs space to hold %d transformed "
- "point(s).", status, astGetClass( this ), npoint );
- } else if ( ncoord_out < 2 ) {
- astError( AST__NOCTS, "astResolvePoints(%s): Too few coordinate "
- "values per point (%d) in output %s.", status,
- astGetClass( this ), ncoord_out, astGetClass( out ) );
- astError( AST__NOCTS, "The %s supplied needs space to store 2 "
- "coordinate value(s) per transformed point.", status,
- astGetClass( this ) );
- }
- }
- }
-
-/* If all the validation stages are passed successfully, and a NULL output
- pointer was given, then create a new PointSet to encapsulate the output
- coordinate data. */
- if ( astOK ) {
- if ( !out ) {
- result = astPointSet( npoint, 2, "", status );
-
-/* Otherwise, use the PointSet supplied. */
- } else {
- result = out;
- }
- }
-
-/* Get pointers to the input and output axis values */
- ptr_in = astGetPoints( in );
- ptr_out = astGetPoints( result );
-
-/* Store points to the first two axis arrays in the returned PointSet. */
- d1 = ptr_out[ 0 ];
- d2 = ptr_out[ 1 ];
-
-/* Allocate work space. */
- basisv = astMalloc( sizeof( double )*(size_t) nax );
-
-/* If the Frame has only one axis, then the supplied basic vector is
- irrelevant - the returned perpendicular distances are always zero and
- the returned parallel distances are just the distances from point1
- to each input point. */
- if( nax < 2 && basisv ) {
- ip = ptr_in[ 0 ];
- for( ipoint = 0; ipoint < npoint; ipoint++, d1++, d2++, ip++ ) {
- *d1 = astAxDistance( this, 1, point1[0], *ip );
- *d2 = 0.0;
- }
-
-/* Now deal with Frames which have 2 or more axes */
- } else if( basisv ){
-
-/* Check if the supplied positions defining the basis vector are good.
- Store the basis vector, and get its squared length. */
- ok = 1;
- bv = 0.0;
- for( axis = 0; axis < nax; axis++ ){
- if( point1[ axis ] == AST__BAD ||
- point2[ axis ] == AST__BAD ) {
- ok = 0;
- break;
- } else {
- basisv[ axis ] = point2[ axis ] - point1[ axis ];
- bv += basisv[ axis ]*basisv[ axis ];
- }
- }
-
-/* Check the basis vector does not have zero length, and convert the
- squared length into a length. */
- if( ok && bv > 0.0 ) {
- bv = sqrt( bv );
- } else {
- ok = 0;
- }
-
-/* Store points to the first two axis arrays in the returned PointSet. */
- d1 = ptr_out[ 0 ];
- d2 = ptr_out[ 1 ];
-
-/* Check supplied values can be used */
- if( ok ) {
-
-/* Loop round each supplied vector. */
- for( ipoint = 0; ipoint < npoint; ipoint++, d1++, d2++ ) {
-
-/* Find the dot product of the basis vector with the vector joining point 1
- and the end of the current vector. */
- ok = 1;
- dp = 0.0;
- for( axis = 0; axis < nax; axis++ ){
- d = ptr_in[ axis ][ ipoint ] - point1[ axis ];
- if( d != AST__BAD ) {
- dp += basisv[ axis ] * d;
- } else {
- ok = 0;
- break;
- }
- }
-
-/* If this input position is good... */
- if( ok ) {
-
-/* The dot product is the required parallel component length multiplied by the
- length of the basis vector. Form the distance d1. */
- *d1 = dp/bv;
-
-/* Offset away from point 1 towards point 2 by a distance of d1, and form the
- required length d2. */
- c = *d1/bv;
- if( nax > 2 ) {
- *d2 = 0.0;
- for( axis = 0; axis < nax; axis++ ){
- d = ptr_in[ axis ][ ipoint ] -
- ( point1[ axis ] + c*basisv[ axis ] );
- *d2 += d*d;
- }
- *d2 = sqrt( *d2 );
-
-/* If the Frame is 2 dimensional, we can give a sign the the perpendicular
- component. */
- } else {
- x1 = c*basisv[ 0 ];
- y1 = c*basisv[ 1 ];
- x2 = ptr_in[ 0 ][ ipoint ] - ( point1[ 0 ] + x1 );
- y2 = ptr_in[ 1 ][ ipoint ] - ( point1[ 1 ] + y1 );
- *d2 = sqrt( x2*x2 + y2*y2 );
- if( x1*y2 - x2*y1 < 0.0 ) *d2 = -(*d2);
- }
-
-/* If this input vector is bad, put bad values in the output */
- } else {
- *d1 = AST__BAD;
- *d2 = AST__BAD;
- }
- }
-
-/* If supplied values cannot be used, fill the returned PointSet with bad
- values */
- } else {
- for( ipoint = 0; ipoint < npoint; ipoint++, d1++, d2++ ) {
- *d1 = AST__BAD;
- *d2 = AST__BAD;
- }
- }
- }
-
-/* Free resources */
- basisv = astFree( basisv );
-
-/* Annul the returned PointSet if an error occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-static void SetActiveUnit( AstFrame *this, int value, int *status ){
-/*
-*++
-* Name:
-c astSetActiveUnit
-f AST_SETACTIVEUNIT
-
-* Purpose:
-* Specify how the Unit attribute should be used.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "frame.h"
-c void astSetActiveUnit( AstFrame *this, int value )
-f CALL AST_SETACTIVEUNIT( THIS, VALUE, STATUS )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-c This function
-f This routine
-* sets the current value of the ActiveUnit flag for a Frame, which
-* controls how the Frame behaves when it is used (by
-c astFindFrame or astConvert)
-f AST_FINDFRAME or AST_CONVERT)
-* to match another Frame. If the ActiveUnit flag is set in both
-* template and target Frames then the returned Mapping takes into account
-* any differences in axis units. The default value for simple Frames is
-* zero, which preserves the behaviour of versions of AST prior to
-* version 2.0.
-*
-* If the ActiveUnit flag of either Frame is
-c zero,
-f .FALSE.,
-* then the Mapping will ignore any difference in the Unit attributes of
-* corresponding template and target axes. In this mode, the Unit
-* attributes are purely descriptive commentary for the benefit of
-* human readers and do not influence the Mappings between Frames.
-* This is the behaviour which all Frames had in older version of AST,
-* prior to the introduction of this attribute.
-*
-* If the ActiveUnit flag of both Frames is
-c non-zero,
-f .TRUE.,
-* then the Mapping from template to target will take account of any
-* difference in the axis Unit attributes, where-ever possible. For
-* instance, if corresponding target and template axes have Unit strings of
-* "km" and "m", then the FrameSet class will use a ZoomMap to connect
-* them which introduces a scaling of 1000. If no Mapping can be found
-* between the corresponding units string, then an error is reported.
-* In this mode, it is assumed that values of the Unit attribute conform
-* to the syntax for units strings described in the FITS WCS Paper I
-* "Representations of world coordinates in FITS" (Greisen & Calabretta).
-* Particularly, any of the named unit symbols, functions, operators or
-* standard multiplier prefixes listed within that paper can be used within
-* a units string. A units string may contain symbols for unit which are
-* not listed in the FITS paper, but transformation to any other units
-* will then not be possible (except to units which depend only on the
-* same unknown units - thus "flops" can be transformed to "Mflops"
-* even though "flops" is not a standard FITS unit symbol).
-*
-* A range of common non-standard variations of unit names and multiplier
-* prefixes are also allowed, such as adding an "s" to the end of Angstrom,
-* using a lower case "a" at the start of "angstrom", "micron" instead of
-* "um", "sec" instead of "s", etc.
-*
-c If the ActiveUnit flag is non-zero, setting a new Unit value for an
-f If the ActiveUnit flag is .TRUE., setting a new Unit value for an
-* axis may also change its Label and Symbol attributes. For instance, if
-* an axis has Unit "Hz" and Label "frequency", then changing its Unit to
-* "log(Hz)" will change its Label to "log( frequency )". In addition,
-* the Axis Format attribute will be cleared when-ever a new value
-* is assigned to the Unit attribute.
-*
-c Note, if a non-zero value is set for the ActiveUnit flag, then changing a
-f Note, if a .TRUE. value is set for the ActiveUnit flag, then changing a
-* Unit value for the current Frame within a FrameSet will result in the
-* Frame being re-mapped (that is, the Mappings which define the
-* relationships between Frames within the FrameSet will be modified to
-* take into account the change in Units).
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Frame.
-c value
-f VALUE = LOGICAL (Given)
-* The new value to use.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Applicability:
-* SkyFrame
-c The ActiveUnit flag for a SkyFrame is always 0 (any value
-c supplied using this function is ignored).
-f The ActiveUnit flag for a SkyFrame is always .FALSE. (any value
-f supplied using this routine is ignored).
-* SpecFrame
-c The ActiveUnit flag for a SpecFrame is always 1 (any value
-c supplied using this function is ignored).
-f The ActiveUnit flag for a SpecFrame is always .TRUE. (any value
-f supplied using this routine is ignored).
-* FluxFrame
-c The ActiveUnit flag for a FluxFrame is always 1 (any value
-c supplied using this function is ignored).
-f The ActiveUnit flag for a FluxFrame is always .TRUE. (any value
-f supplied using this routine is ignored).
-* CmpFrame
-c The default ActiveUnit flag for a CmpFrame is 1 if both of the
-c component Frames are using active units, and zero otherwise. When
-f The default ActiveUnit flag for a CmpFrame is .TRUE. if both of the
-f component Frames are using active units, and .FALSE. otherwise. When
-* a new value is set for the ActiveUnit flag, the flag value
-* is propagated to the component Frames. This change will be
-* reflected through all references to the component Frames, not
-* just those encapsulated within the CmpFrame.
-* Region:
-* Regions always use active units if possible.
-
-* Notes:
-* - The ActiveUnit flag resembles a Frame attribute, except that it
-* cannot be tested or cleared, and it cannot be accessed using the
-c generic astGet<X> and astSet<X> functions.
-f generic AST_GET<X> and AST_SET<X> routines.
-c - The astGetActiveUnit function can be used to retrieve the current
-f - The AST_GETACTIVEUNIT routine can be used to retrieve the current
-* value of the ActiveUnit flag.
-
-*--
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Store a value of 1 for the Frame component if the supplied value is
- non-zero. */
- this->active_unit = ( value ) ? 1 : 0;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frame.h"
-* void SetAttrib( AstObject *this, const char *setting, int *status )
-
-* Class Membership:
-* Frame member function (over-rides the astSetAttrib method inherited
-* from the Mapping class).
-
-* Description:
-* This function assigns an attribute value for a Frame, the
-* attribute and its value being specified by means of a string of
-* the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in
-* lower case with no white space present. The value to the right
-* of the "=" should be a suitable textual representation of the
-* value to be assigned and this will be interpreted according to
-* the attribute's data type. White space surrounding the value is
-* only significant for string attributes.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* setting
-* Pointer to a null terminated string specifying the new attribute
-* value.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function uses one-based axis numbering so that it is
-* suitable for external (public) use.
-*/
-
-/* Local Vaiables: */
- AstAxis *ax; /* Pointer to Axis */
- AstFrame *pfrm; /* Pointer to primary Frame containing axis */
- AstFrame *this; /* Pointer to the Frame structure */
- AstSystemType system_code; /* System code */
- char pfrm_attrib[ 100 ]; /* Primary Frame attribute */
- char *pfrm_setting; /* Primary Frame attribute */
- char *axis_setting; /* Pointer to axis attribute setting string */
- const char *equals; /* Pointer to equals sign */
- const char *old_setting; /* Pointer to supplied setting string */
- const char *op; /* Pointer to opening parenthesis */
- double dval; /* Double attibute value */
- double mjd; /* Epoch as a Modified Julian Date */
- int axis; /* Index for the Frame axis */
- int axis_nc; /* No. characters in axis attribute name */
- int axis_value; /* Offset of value to be assigned to axis */
- int digits; /* Number of digits of precision */
- int direction; /* Axis direction flag */
- int domain; /* Offset of Domain string */
- int epoch; /* Offset of Epoch string */
- int format; /* Offset of axis Format string */
- int free_axis_setting; /* Should axis_setting be freed? */
- int has_axis; /* Does setting include an axis specifier? */
- int ival; /* Integer attribute value */
- int label; /* Offset of axis Label string */
- int len; /* Length of setting string */
- int match_end; /* Match final axes of target? */
- int max_axes; /* Maximum number of axes matched */
- int min_axes; /* Minimum number of axes matched */
- int nc; /* Number of characters read by astSscanf */
- int off2; /* Modified offset of attribute value */
- int off; /* Offset of attribute value */
- int oldrep; /* Original error reporting state */
- int paxis; /* Axis index within primary frame */
- int permute; /* Permute axes in order to match? */
- int preserve_axes; /* Preserve matched target axes? */
- int sign; /* Sign of longitude value */
- int symbol; /* Offset of axis Symbol string */
- int system; /* Offset of System string */
- int title; /* Offset of Title string */
- int unit; /* Offset of axis Unit string */
- int used; /* Could the setting string be used? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Frame structure. */
- this = (AstFrame *) this_object;
-
-/* Find the offset to the first equal sign in the setting string. */
- equals = strchr( setting, '=' );
-
-/* Set a flag indicating if the attribute name includes an axis
- specifier. */
- op = strchr( setting, '(' );
- has_axis = ( !op || op > equals ) ? 0 : 1;
-
-/* A flag indicating that we do not need to free the axis_setting memory. */
- free_axis_setting = 0;
-
-/* Initialise things to avoid compiler warnings. */
- axis_setting = NULL;
- old_setting = NULL;
-
-/* Jump back to here if we are trying the same attribute setting but with
- an explicit axis "(1)" added to the attribute name. */
-L1:
-
-/* Obtain the length of the setting string. */
- len = strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse the
- setting string and extract the attribute value (or an offset to it in the
- case of string values). In each case, use the value set in "nc" to check
- that the entire string was matched. Once a value has been obtained, use the
- appropriate method to set it. */
-
-/* Digits. */
-/* ------- */
- if ( nc = 0,
- ( 1 == astSscanf( setting, "digits= %d %n", &digits, &nc ) )
- && ( nc >= len ) ) {
- astSetDigits( this, digits );
-
-/* Digits(axis). */
-/* ------------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "digits(%d)= %d %n",
- &axis, &digits, &nc ) )
- && ( nc >= len ) ) {
-
-/* There is no function to set the Digits attribute value for an axis
- directly, so obtain a pointer to the Axis and use this to set the
- attribute. */
- (void) astValidateAxis( this, axis - 1, "astSetDigits(axis)" );
- ax = astGetAxis( this, axis - 1 );
- astSetAxisDigits( ax, digits );
- ax = astAnnul( ax );
-
-/* Direction(axis). */
-/* ---------------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "direction(%d)= %d %n",
- &axis, &direction, &nc ) )
- && ( nc >= len ) ) {
- astSetDirection( this, axis - 1, direction );
-
-/* Epoch. */
-/* ------ */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "epoch=%n%*[^\n]%n", &epoch, &nc ) )
- && ( nc >= len ) ) {
-
-/* Convert the Epoch value to a Modified Julian Date before use. */
- mjd = astReadDateTime( setting + epoch );
- if ( astOK ) {
- astSetEpoch( this, mjd );
-
-/* Report contextual information if the conversion failed. */
- } else {
- astError( AST__ATTIN, "astSetAttrib(%s): Invalid epoch value "
- "\"%s\" given for coordinate system.", status,
- astGetClass( this ), setting + epoch );
- }
-
-/* Top(axis). */
-/* ---------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "top(%d)= %lg %n",
- &axis, &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetTop( this, axis - 1, dval );
-
-/* Bottom(axis). */
-/* ------------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "bottom(%d)= %lg %n",
- &axis, &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetBottom( this, axis - 1, dval );
-
-/* Domain. */
-/* ------- */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "domain=%n%*[^\n]%n", &domain, &nc ) )
- && ( nc >= len ) ) {
- astSetDomain( this, setting + domain );
-
-/* Format(axis). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "format(%d)=%n%*[^\n]%n",
- &axis, &format, &nc ) )
- && ( nc >= len ) ) {
- astSetFormat( this, axis - 1, setting + format );
-
-/* Label(axis). */
-/* ------------ */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "label(%d)=%n%*[^\n]%n",
- &axis, &label, &nc ) )
- && ( nc >= len ) ) {
- astSetLabel( this, axis - 1, setting + label );
-
-/* MatchEnd. */
-/* --------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "matchend= %d %n", &match_end, &nc ) )
- && ( nc >= len ) ) {
- astSetMatchEnd( this, match_end );
-
-/* MaxAxes. */
-/* -------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "maxaxes= %d %n", &max_axes, &nc ) )
- && ( nc >= len ) ) {
- astSetMaxAxes( this, max_axes );
-
-/* MinAxes. */
-/* -------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "minaxes= %d %n", &min_axes, &nc ) )
- && ( nc >= len ) ) {
- astSetMinAxes( this, min_axes );
-
-/* Permute. */
-/* -------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "permute= %d %n", &permute, &nc ) )
- && ( nc >= len ) ) {
- astSetPermute( this, permute );
-
-/* PreserveAxes. */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "preserveaxes= %d %n",
- &preserve_axes, &nc ) )
- && ( nc >= len ) ) {
- astSetPreserveAxes( this, preserve_axes );
-
-/* Symbol(axis). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "symbol(%d)=%n%*[^\n]%n",
- &axis, &symbol, &nc ) )
- && ( nc >= len ) ) {
- astSetSymbol( this, axis - 1, setting + symbol );
-
-/* AlignSystem. */
-/* ------------ */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "alignsystem= %n%*s %n", &system, &nc ) )
- && ( nc >= len ) ) {
-
-/* Convert the string to a System code before use. */
- system_code = astSystemCode( this, system + setting );
- if ( system_code != AST__BADSYSTEM ) {
- astSetAlignSystem( this, system_code );
-
-/* Report an error if the string value wasn't recognised. */
- } else {
- astError( AST__ATTIN,
- "astSetAttrib(%s): Invalid AlignSystem description \"%s\".", status,
- astGetClass( this ), system + setting );
- }
-
-/* System. */
-/* ------- */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "system= %n%*s %n", &system, &nc ) )
- && ( nc >= len ) ) {
-
-/* Convert the string to a System code before use. */
- system_code = astSystemCode( this, system + setting );
- if ( system_code != AST__BADSYSTEM ) {
- astSetSystem( this, system_code );
-
-/* Report an error if the string value wasn't recognised. */
- } else {
- astError( AST__ATTIN,
- "astSetAttrib(%s): Invalid System description \"%s\".", status,
- astGetClass( this ), system + setting );
- }
-
-/* Title. */
-/* ------ */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "title=%n%*[^\n]%n", &title, &nc ) )
- && ( nc >= len ) ) {
- astSetTitle( this, setting + title );
-
-/* Unit(axis). */
-/* ----------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "unit(%d)=%n%*[^\n]%n",
- &axis, &unit, &nc ) )
- & ( nc >= len ) ) {
- astSetUnit( this, axis - 1, setting + unit );
-
-/* ObsLat. */
-/* ------- */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "obslat=%n%*s %n", &off, &nc ) )
- && ( nc >= 7 ) ) {
-
-/* If the first character in the value string is "N" or "S", remember the
- sign of the value and skip over the sign character. Default is north
- (+ve). */
- off2 = off;
- if( setting[ off ] == 'N' || setting[ off ] == 'n' ) {
- off2++;
- sign = +1;
- } else if( setting[ off ] == 'S' || setting[ off ] == 's' ) {
- off2++;
- sign = -1;
- } else {
- sign = +1;
- }
-
-/* If not already created, create an FK5 J2000 SkyFrame which will be used
- for formatting and unformatting ObsLon and ObsLat values. */
- if( !skyframe ) {
- astBeginPM;
- skyframe = astSkyFrame( "system=FK5,equinox=J2000,format(2)=dms.2", status );
- astEndPM;
- }
-
-/* Convert the string to a radians value before use. */
- ival = astUnformat( skyframe, 1, setting + off2, &dval );
- if ( ival == astChrLen( setting ) - off2 ) {
- astSetObsLat( this, dval*sign );
-
-/* Report an error if the string value wasn't recognised. */
- } else {
- astError( AST__ATTIN, "astSetAttrib(%s): Invalid value for "
- "ObsLat (observers latitude) \"%s\".", status, astGetClass( this ),
- setting + off );
- }
-
-/* ObsLon. */
-/* ------- */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "obslon=%n%*s %n", &off, &nc ) )
- && ( nc >= 7 ) ) {
-
-/* If the first character in the value string is "E" or "W", remember the
- sign of the value and skip over the sign character. Default is east
- (+ve). */
- off2 = off;
- if( setting[ off ] == 'E' || setting[ off ] == 'e' ) {
- off2++;
- sign = +1;
- } else if( setting[ off ] == 'W' || setting[ off ] == 'w' ) {
- off2++;
- sign = -1;
- } else {
- sign = +1;
- }
-
-/* If not already created, create an FK5 J2000 SkyFrame which will be used
- for formatting and unformatting ObsLon and ObsLat values. */
- if( !skyframe ) {
- astBeginPM;
- skyframe = astSkyFrame( "system=FK5,equinox=J2000,format(2)=dms.2", status );
- astEndPM;
- }
-
-/* Convert the string to a radians value before use. */
- ival = astUnformat( skyframe, 1, setting + off2, &dval );
- if ( ival == astChrLen( setting ) - off2 ) {
- astSetObsLon( this, dval*sign );
-
-/* Report an error if the string value wasn't recognised. */
- } else {
- astError( AST__ATTIN, "astSetAttrib(%s): Invalid value for "
- "ObsLon (observers longitude) \"%s\".", status, astGetClass( this ),
- setting + off );
- }
-
-/* ObsAlt. */
-/* ------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "obsalt= %lg %n", &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetObsAlt( this, dval );
-
-/* Dut1. */
-/* ---- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "dut1= %lg %n", &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetDut1( this, dval );
-
-
-/* Read-only attributes. */
-/* --------------------- */
-/* Define a macro to see if the setting string matches any of the
- read-only attributes of this class. */
-#define MATCH(attrib) \
- ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
- ( nc >= len ) )
-
-/* Use this macro to report an error if a read-only attribute has been
- specified. */
- } else if ( MATCH( "naxes" ) ||
- !strncmp( setting, "normunit", 8 ) ) {
- astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.", status,
- setting, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Other axis attributes. */
-/* ---------------------- */
-/* If the attribute was not identified above, but appears to refer to
- a Frame axis, then it may refer to an Axis object of a derived type
- (which has additional attributes not recognised here). */
- } else if ( !free_axis_setting && ( nc = 0,
- ( 1 == astSscanf( setting, "%*[^()]%n(%d)%n=%*[^\n]%n",
- &axis_nc, &axis, &axis_value, &nc ) )
- && ( nc >= len ) ) ) {
-
-/* Validate the axis index and copy the attribute setting string. */
- (void) astValidateAxis( this, axis - 1, "astSet" );
- axis_setting = astString( setting, len );
- if ( astOK ) {
-
-/* Over-write the axis index in the copy with the value to be
- assigned. */
- (void) strcpy( axis_setting + axis_nc, setting + axis_value );
-
-/* Obtain a pointer to the Axis object. */
- ax = astGetAxis( this, axis - 1 );
- if( astOK ) {
-
-/* Assume that we will be able to use the setting. */
- used = 1;
-
-/* Temporarily switch off error reporting so that if the following attempt
- to access the axis attribute fails, we can try to interpret the
- attribute name as an attribute of the primary Frame containing the
- specified axis. Any errors reported in this context will simply be
- ignored, in particularly they are not deferred for later delivery. */
- oldrep = astReporting( 0 );
-
-/* Use the Axis astSetAttrib method
- to set the value. */
- astSetAttrib( ax, axis_setting );
-
-/* If the above call failed with a status of AST__BADAT, indicating that
- the attribute name was not recognised, clear the status so that we can
- try to interpret the attribute name as an attribute of the primary Frame
- containing the specified axis. */
- if( astStatus == AST__BADAT ) {
- astClearStatus;
-
-/* Find the primary Frame containing the specified axis. */
- astPrimaryFrame( this, axis - 1, &pfrm, &paxis );
-
-/* Only attempt to use the primary Frame if it is not the same as "this"
- - otherwise we could end up in an infinite loop. */
- if( pfrm != this ) {
-
-/* Modify the attribute name to refer to the axis numbering of the
- primary frame. */
- sprintf( pfrm_attrib, "%.*s(%d)", axis_nc, setting, paxis + 1 );
-
-/* Create a setting string in which the attribute name refers to the axis
- numbering of the primary frame. */
- pfrm_setting = NULL;
- nc = 0;
- pfrm_setting = astAppendString( pfrm_setting, &nc, pfrm_attrib );
- pfrm_setting = astAppendString( pfrm_setting, &nc, setting + axis_value );
-
-/* Attempt to set the attribute within the primary Frame. */
- astSetAttrib( pfrm, pfrm_setting );
-
-/* Free the memory. */
- pfrm_setting = astFree( pfrm_setting );
-
-/* If this failed, clear the status and indicate that we have not managed to
- use the attribute setting. */
- if( !astOK ) {
- astClearStatus;
- used = 0;
- }
-
- } else {
- used = 0;
- }
-
-/* If not found attempt to set the attribute value in the Axis, omitting
- the axis index. */
- if( ! used ) {
- astSetAttrib( pfrm, axis_setting );
- if( !astOK ) {
- astClearStatus;
- } else {
- used = 1;
- }
- }
-
-/* Free the setting string, and annul the primary Frame pointer. */
- pfrm = astAnnul( pfrm );
- }
-
-/* Re-instate the original error reporting state. */
- astReporting( oldrep );
-
-/* If we could not use the setting, attempt to set the axis attribute again,
- this time retaining the error report. This is done to ensure the user
- gets an appropriate error message. */
- if( !used ) astSetAttrib( ax, axis_setting );
- }
-
-/* Annul the Axis pointer and free the memory holding the attribute
- setting. */
- ax = astAnnul( ax );
- }
- axis_setting = astFree( axis_setting );
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute is still not recognised, and the Frame has only 1 axis,
- and the attribute name does not already include an axis specifier, try
- again after appending "(1)" to the end of the attribute name. */
- } else if( !has_axis && astGetNaxes( this ) == 1 && equals ) {
-
-/* Take a copy of the supplied setting, allowing 3 extra characters for the
- axis specifier "(1)". */
- axis_setting = astMalloc( len + 4 );
- if( axis_setting ) memcpy( axis_setting, setting, len );
-
-/* Indicate we should free the axis_setting memory. */
- free_axis_setting = 1;
-
-/* Add in the axis specifier. */
- strcpy( axis_setting + ( equals - setting ), "(1)" );
-
-/* Add in the equals sign and attribute value. */
- strcpy( axis_setting + ( equals - setting ) + 3, equals );
-
-/* Use the new setting instead of the supplied setting. */
- old_setting = setting;
- setting = axis_setting;
-
-/* Indicate the setting now has an axis specifier. */
- has_axis = 1;
-
-/* Jump back to try interpreting the new setting string. */
- goto L1;
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. First re-instate the original setting
- string if it was changed above. */
- } else {
- if( free_axis_setting ) {
- setting = old_setting;
- axis_setting = astFree( axis_setting );
- free_axis_setting = 0;
- }
- (*parent_setattrib)( this_object, setting, status );
- }
-
- if( free_axis_setting ) axis_setting = astFree( axis_setting );
-
-/* Undefine macros local to this function. */
-#undef MATCH
-}
-
-static void SetAxis( AstFrame *this, int axis, AstAxis *newaxis, int *status ) {
-/*
-*+
-* Name:
-* astSetAxis
-
-* Purpose:
-* Set a new Axis for a Frame.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* void astSetAxis( AstFrame *this, int axis, AstAxis *newaxis )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function allows a new Axis object to be associated with one
-* of the axes of a Frame, replacing the previous one. Each Axis
-* object contains a description of the quantity represented along
-* one of the Frame's axes, so this function allows this
-* description to be exchanged for another one.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* axis
-* The index (zero-based) of the axis whose associated Axis object is to
-* be replaced.
-* newaxis
-* Pointer to the new Axis object.
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Validate and permute the axis index supplied. */
- axis = astValidateAxis( this, axis, "astSetAxis" );
-
-/* If OK, annul the Frame's pointer to the old Axis object and clone a pointer
- to the new one to replace it. */
- if ( astOK ) {
- this->axis[ axis ] = astAnnul( this->axis[ axis ] );
- this->axis[ axis ] = astClone( newaxis );
- }
-}
-
-static void SetFrameFlags( AstFrame *this, int flags, int *status ){
-/*
-*+
-* Name:
-* astSetFrameFlags
-
-* Purpose:
-* Store a new bit mask of flags in a Frame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "frame.h"
-* void astSetFrameFlags( astFrame *this, int flags )
-
-* Class Membership:
-* Frame member function.
-
-* Description:
-* This function stores a new set of flags in a Frame. The flags can
-* be retrieved using astGetFrameFlags.
-
-* Parameters:
-* this
-* The Frame.
-* flags
-* A bit mask holding the flags. Currently, the following bits are
-* used:
-*
-* 0 - Used to indicate if the Frame is currently involved in an
-* attempt to restore the integrity of a FrameSet following
-* changes to the attribute values of the Frame.
-
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Assign the new bit mask. */
- this->flags = flags;
-}
-
-static void SetUnit( AstFrame *this, int axis, const char *unit, int *status ) {
-/*
-* Name:
-* SetUnit
-
-* Purpose:
-* Set a value for the Unit attribute of a Frame.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* void SetUnit( AstFrame *this, int axis, const char *unit, int *status )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function sets the Unit value for a Frame.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* axis
-* The number of the axis (zero-based) for which the Unit value is to
-* be set.
-* unit
-* The new value to be set.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void.
-*/
-
-/* Local Variables: */
- AstAxis *ax; /* Pointer to Axis object */
- char *c; /* Copy of supplied string */
- const char *oldunit; /* Pointer to old units string */
- int l; /* Used length of supplied string */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a copy of the supplied string which excludes trailing spaces. */
- l = astChrLen( unit );
- c = astStore( NULL, unit, (size_t) (l + 1) );
- if( astOK ) {
- c[ l ] = 0;
-
-/* Validate the axis index and obtain a pointer to the required Axis. */
- (void) astValidateAxis( this, axis, "astSetUnit" );
- ax = astGetAxis( this, axis );
-
-/* The new unit may require the Label and/or Symbol to be changed, but
- only if the Frames ActiveUnit flag is set. */
- if( astGetActiveUnit( this ) ) {
-
-/* Get the existing Axis unit, using the astGetUnit method (rather than
- astGetAxisUnit) in order to get any default value in the case where
- the Unit attribute is not set. */
- oldunit = astGetUnit( this, axis );
-
-/* Assign the new Unit value. This modifies labels and/or Symbols if
- necessary. */
- NewUnit( ax, oldunit, c, "astSetUnit", astGetClass( this ), status );
- }
-
-/* Set the Axis Unit attribute value. */
- astSetAxisUnit( ax, c );
-
-/* Annul the Axis pointer. */
- ax = astAnnul( ax );
- }
-
-/* Free the string copy */
- c = astFree( c );
-
-}
-
-static int SubFrame( AstFrame *target, AstFrame *template,
- int result_naxes, const int *target_axes,
- const int *template_axes, AstMapping **map,
- AstFrame **result, int *status ) {
-/*
-*+
-* Name:
-* astSubFrame
-
-* Purpose:
-* Select axes from a Frame and convert to the new coordinate system.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* int astSubFrame( AstFrame *target, AstFrame *template,
-* int result_naxes, const int *target_axes,
-* const int *template_axes, AstMapping **map,
-* AstFrame **result )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function selects a requested sub-set (or super-set) of the axes from
-* a "target" Frame and creates a new Frame with copies of the selected
-* axes assembled in the requested order. It then optionally overlays the
-* attributes of a "template" Frame on to the result. It returns both the
-* resulting Frame and a Mapping that describes how to convert between the
-* coordinate systems described by the target and result Frames. If
-* necessary, this Mapping takes account of any differences in the Frames'
-* attributes due to the influence of the template.
-
-* Parameters:
-* target
-* Pointer to the target Frame, from which axes are to be selected.
-* template
-* Pointer to the template Frame, from which new attributes for the
-* result Frame are to be obtained. Optionally, this may be NULL, in
-* which case no overlaying of template attributes will be performed.
-* result_naxes
-* Number of axes to be selected from the target Frame. This number may
-* be greater than or less than the number of axes in this Frame (or
-* equal).
-* target_axes
-* Pointer to an array of int with result_naxes elements, giving a list
-* of the (zero-based) axis indices of the axes to be selected from the
-* target Frame. The order in which these are given determines the order
-* in which the axes appear in the result Frame. If any of the values in
-* this array is set to -1, the corresponding result axis will not be
-* derived from the target Frame, but will be assigned default attributes
-* instead.
-* template_axes
-* Pointer to an array of int with result_naxes elements. This should
-* contain a list of the template axes (given as zero-based axis indices)
-* with which the axes of the result Frame are to be associated. This
-* array determines which axes are used when overlaying axis-dependent
-* attributes of the template on to the result. If any element of this
-* array is set to -1, the corresponding result axis will not receive any
-* template attributes.
-*
-* If the template argument is given as NULL, this array is not used and
-* a NULL pointer may also be supplied here.
-* map
-* Address of a location to receive a pointer to the returned Mapping.
-* The forward transformation of this Mapping will describe how to
-* convert coordinates from the coordinate system described by the target
-* Frame to that described by the result Frame. The inverse
-* transformation will convert in the opposite direction.
-* result
-* Address of a location to receive a pointer to the result Frame.
-
-* Returned Value:
-* A non-zero value is returned if coordinate conversion is
-* possible between the target and the result Frame. Otherwise zero
-* is returned and *map and *result are returned as NULL (but this
-* will not in itself result in an error condition). In general,
-* coordinate conversion should always be possible if no template
-* Frame is supplied but may not always be possible otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-
-* Implementation Deficiencies:
-* - Any axis selection is currently permitted. Probably this
-* should be restricted so that each axis can only be selected
-* once. The astValidateAxisSelection method will do this but
-* currently there are bugs in the CmpFrame class that cause axis
-* selections which will not pass this test. Install the validation
-* when these are fixed.
-*-
-
-* Implementation Notes:
-* - This implementation addresses the selection of axes from a
-* Frame class object. This simply results in another object of the
-* same class and a Mapping which describes an axis permutation (or
-* a unit Mapping as a special case). Changes of Frame attributes
-* have no significance for coordinate values in this class, so do
-* not affect the Mapping returned.
-*/
-
-/* Local Variables: */
- AstAxis *newaxis; /* Pointer to new Axis object */
- AstFrame *tempframe; /* Pointer to temporary Frame */
- AstMapping *aumap; /* A units Mapping for a single axis */
- AstMapping *numap; /* The new total units Mapping */
- AstMapping *umap; /* The total units Mapping */
- int *inperm; /* Pointer to permutation array */
- int *outperm; /* Pointer to permutation array */
- int match; /* Coordinate conversion possible? */
- int result_axis; /* Result Frame axis index */
- int target_axis; /* Target Frame axis index */
- int target_naxes; /* Number of target Frame axes */
- int unit; /* Unit Mapping appropriate? */
- int uunit; /* Is the "umap" Mapping a UnitMap? */
-
-/* Initialise the returned values. */
- *map = NULL;
- *result = NULL;
- match = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return match;
-
-/* Obtain the number of target Frame axes. */
- target_naxes = astGetNaxes( target );
-
-/* Ensure we do not attempt to use a negative number of result axes. */
- if ( result_naxes < 0 ) result_naxes = 0;
-
-/* Create a temporary new Frame with the required number of axes. This will
- have a default Axis object associated with each of its axes. We will
- replace these where necessary with copies of the actual Axis objects we
- require. */
- tempframe = astFrame( result_naxes, "", status );
-
-/* Allocate memory to store two permutation arrays. These will be used to
- construct the Mapping that relates the target and result Frames. */
- inperm = astMalloc( sizeof( int ) * (size_t) target_naxes );
- outperm = astMalloc( sizeof( int ) * (size_t) result_naxes );
- if ( astOK ) {
-
-/* Initialise the array that associates each target axis with the corresponding
- result axis (filling it with the value -1 initially signifies no
- associations). */
- for ( target_axis = 0; target_axis < target_naxes; target_axis++ ) {
- inperm[ target_axis ] = -1;
- }
-
-/* Loop through each axis in the result Frame and obtain the index of the axis
- in the target Frame from which it is to be derived. */
- for ( result_axis = 0; result_axis < result_naxes; result_axis++ ) {
- target_axis = target_axes[ result_axis ];
-
-/* Check if the resulting axis index is valid. If not, this result axis is not
- to be derived from any target axis, and it will therefore be left with its
- default attributes. Make an entry in the appropriate permutation array to
- indicate that this result axis is unassociated. */
- if ( ( target_axis < 0 ) || ( target_axis >= target_naxes ) ) {
- outperm[ result_axis ] = -1;
-
-/* Otherwise, obtain a pointer to the target Axis object and modify the
- temporary Frame so that its axis is associated with the same Axis object.
- Annul the Axis pointer afterwards. */
- } else {
- newaxis = astGetAxis( target, target_axis );
- astSetAxis( tempframe, result_axis, newaxis );
- newaxis = astAnnul( newaxis );
-
-/* Update both permutation arrays to record the association between the target
- and result axes. */
- outperm[ result_axis ] = target_axis;
- inperm[ target_axis ] = result_axis;
- }
-
-/* Quit looping if an error occurs. */
- if ( !astOK ) break;
- }
-
-/* So far, we have only modified pointers in the temporary Frame to refer to
- the target Frame's Axis objects. Since we will next modify these objects'
- attributes, we must make a deep copy of the entire temporary Frame so that
- we do not modify the target's axes. This copy now becomes our result Frame.
- Annul the temporary one. */
- if ( astOK ) {
- *result = astCopy( tempframe );
- tempframe = astAnnul( tempframe );
-
-/* Invoke the target "astOverlay" method to overlay any remaining
- attributes from the target Frame which are not associated with
- individual axes (e.g. the Frame's Title and Domain). */
- astOverlay( target, target_axes, *result );
-
-/* If a template Frame was supplied, also invoke its astOverlay method to
- overlay its attributes on the result Frame. (Note that in this particular
- case this has no effect other than transferring attributes. In general,
- however, i.e. in derived classes, this process is vital to determining the
- mapping below, whose main purpose is to convert between the target and
- result Frames. These will have different attributes as a result of the
- influence that the template has here.) */
- if ( template ) astOverlay( template, template_axes, *result );
-
-/* We will next generate the Mapping that relates the target and result
- Frames. If appropriate this should be a unit Mapping (UnitMap), so test if
- the number of axes in both Frames is equal. */
- unit = ( target_naxes == result_naxes );
-
-/* If so, check the contents of one of the permutation arrays to see if all
- result axes are associated with the corresponding target axis (the converse
- then also follows). If not, note this fact and quit checking. */
- if ( unit ) {
- for ( result_axis = 0; result_axis < result_naxes;
- result_axis++ ) {
- if ( outperm[ result_axis ] != result_axis ) {
- unit = 0;
- break;
- }
- }
- }
-
-/* If a unit Mapping is appropriate, then construct it. */
- if ( unit ) {
- *map = (AstMapping *) astUnitMap( result_naxes, "", status );
-
-/* Otherwise, construct a Mapping describing the axis permutation we have
- produced. */
- } else {
- *map = (AstMapping *) astPermMap( target_naxes, inperm,
- result_naxes, outperm, NULL,
- "", status );
- }
-
-/* Note that coordinate conversion is possible. */
- match = 1;
-
-/* If the ActiveUnit flag in both template and result Frame is non-zero, we
- now modify the Mapping to take account of any differences in the Units
- attributes of the target and results Frames. */
- if( template && astGetActiveUnit( template ) &&
- astGetActiveUnit( *result ) ) {
-
-/* Loop round the axes of the results Frame, accumulating a parallel CmpMap
- ("umap") in which each Mapping is the 1-D Mapping which transforms the
- Units of the corresponding target axis into the Units of the results
- axis. */
- umap = NULL;
- uunit = 1;
- for( result_axis = 0; result_axis < result_naxes; result_axis++ ) {
-
-/* Find the index of the corresponding target axis. */
- if( unit ) {
- target_axis = result_axis;
- } else {
- target_axis = outperm[ result_axis ];
- }
-
-/* Get the Unit string for both axes, and attempt to find a Mapping which
- transforms values in the target units into the corresponding value in the
- results units. If this results axis does not have a corresponding
- target axis, then indicate that no units mapping can be found. */
- if( target_axis > -1 ) {
- aumap = astUnitMapper( astGetUnit( target, target_axis ),
- astGetUnit( *result, result_axis ),
- NULL, NULL );
- } else {
- aumap = NULL;
- }
-
-/* If no Mapping could be found, annull the Mapping and leave the loop.
- Otherwise, see if the Mapping is a UnitMap. If not, set a flag to indicate
- that we have at least one non-unit map. */
- if( !aumap ) {
- if( umap ) umap = astAnnul( umap );
- match = 0;
- break;
- } else {
- if( !astIsAUnitMap( aumap ) ) uunit = 0;
- }
-
-/* Add this Mapping into the parallel CmpMap. */
- if( umap ) {
- numap = (AstMapping *) astCmpMap( umap, aumap, 0, "", status );
- umap = astAnnul( umap );
- aumap = astAnnul( aumap );
- umap = numap;
- } else {
- umap = aumap;
- }
- }
-
-/* If the resulting CmpMap is not just a UnitMap, add it in series with
- the current results mapping, and then simplify it. */
- if( !uunit && umap ) {
- numap = (AstMapping *) astCmpMap( *map, umap, 1, "", status );
- (void) astAnnul( *map );
- *map = numap;
- }
-
-/* Annul the CmpMap containing the units Mappings. */
- if( umap ) umap = astAnnul( umap );
-
-/* If the units could not bve matched annul the returned mapping. */
- if( !match && *map ) *map = astAnnul( *map );
- }
- }
- }
-
-/* Free the memory used for the permutation arrays. */
- inperm = astFree( inperm );
- outperm = astFree( outperm );
-
-/* If an error occurred, annul the returned objects and reset the returned
- value. */
- if ( !astOK ) {
- *map = astAnnul( *map );
- *result = astAnnul( *result );
- match = 0;
- }
-
-/* Return the result. */
- return match;
-}
-
-static AstSystemType SystemCode( AstFrame *this, const char *system, int *status ) {
-/*
-*+
-* Name:
-* astSystemCode
-
-* Purpose:
-* Convert a string into a coordinate system type code.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* AstSystemType SystemCode( AstFrame *this, const char *system )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function converts a string used for the external description of
-* a coordinate system into a Frame coordinate system type code (System
-* attribute value). It is the inverse of the astSystemString function.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* system
-* Pointer to a constant null-terminated string containing the
-* external description of the coordinate system.
-
-* Returned Value:
-* The System type code.
-
-* Notes:
-* - A value of AST__BADSYSTEM is returned if the coordinate system
-* description was not recognised. This does not produce an error.
-* - A value of AST__BADSYSTEM is also returned if this function
-* is invoked with the global error status set or if it should fail
-* for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstSystemType result; /* Result value to return */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Match the "system" string against each possibility and assign the
- result. The basic Frame class only supports a single system
- "Cartesian". */
- if ( astChrMatch( "Cartesian", system ) ) {
- result = AST__CART;
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *SystemString( AstFrame *this, AstSystemType system, int *status ) {
-/*
-*+
-* Name:
-* astSystemString
-
-* Purpose:
-* Convert a coordinate system type code into a string.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* const char *astSystemString( AstFrame *this, AstSystemType system )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function converts a Frame coordinate system type code
-* (System attribute value) into a string suitable for use as an
-* external representation of the coordinate system type.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* system
-* The coordinate system type code.
-
-* Returned Value:
-* Pointer to a constant null-terminated string containing the
-* textual equivalent of the type code supplied.
-
-* Notes:
-* - A NULL pointer value is returned if the coordinate system
-* code was not recognised. This does not produce an error.
-* - A NULL pointer value is also returned if this function is
-* invoked with the global error status set or if it should fail
-* for any reason.
-*-
-*/
-
-/* Local Variables: */
- const char *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Match the "system" value against each possibility and convert to a
- string pointer. (Where possible, return the same string as would be
- used in the FITS WCS representation of the coordinate system). A basic
- Frame only allows a single System value, "Cartesian". */
- switch ( system ) {
- case AST__CART:
- result = "Cartesian";
- break;
- }
-
-/* Return the result pointer. */
- return result;
-
-}
-
-static int TestActiveUnit( AstFrame *this, int *status ){
-/*
-*+
-* Name:
-* astTestActiveUnit
-
-* Purpose:
-* Determines if the ActiveUnit flag is set.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* int astTestActiveUnit( AstFrame *this )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function tests the current value of the ActiveUnit flag for a
-* Frame. See the description of the astSetActiveUnit function for a
-* description of the ActiveUnit flag.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-
-* Returned Value:
-* Non-zero if the flag has been set. Zero otherwise.
-
-* Notes:
-* - A zero value will be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*--
-*/
-
-/* Local Variables: */
- int result; /* The returned value */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Return the result. */
- return ( this->active_unit != -INT_MAX );
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frame.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Frame member function (over-rides the astTestAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a Frame's attributes.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - This function uses one-based axis numbering so that it is
-* suitable for external (public) use.
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstAxis *ax; /* Pointer to Axis */
- AstFrame *pfrm; /* Pointer to primary Frame containing axis */
- AstFrame *this; /* Pointer to the Frame structure */
- char pfrm_attrib[ 100 ]; /* Primary Frame attribute */
- char *axis_attrib; /* Pointer to axis attribute name */
- const char *old_attrib; /* Pointer to supplied attribute name string */
- int axis; /* Frame axis number */
- int axis_nc; /* No. characters in axis attribute name */
- int free_axis_attrib; /* Should axis_attrib be freed? */
- int has_axis; /* Does attrib name include axis specifier? */
- int len; /* Length of attrib string */
- int nc; /* No. characters read by astSscanf */
- int oldrep; /* Original error reporting state */
- int paxis; /* Axis index within primary frame */
- int result; /* Result value to return */
- int used; /* Could the setting string be used? */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the Frame structure. */
- this = (AstFrame *) this_object;
-
-/* Set a flag indicating if the attribute name includes an axis
- specifier. */
- has_axis = ( strchr( attrib, '(' ) != NULL );
-
-/* A flag indicating that we do not need to free the axis_attrib memory. */
- free_axis_attrib = 0;
-
-/* Initialise things to avoid compiler warnings. */
- axis_attrib = NULL;
- old_attrib = NULL;
-
-/* Jump back to here if we are trying the same attribute but with an explicit
- axis "(1)" added to the end of the name. */
-L1:
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* Digits. */
-/* ------- */
- if ( !strcmp( attrib, "digits" ) ) {
- result = astTestDigits( this );
-
-/* Digits(axis). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "digits(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
-
-/* There is no function to test the Digits attribute for an axis
- directly, so obtain a pointer to the Axis and use this to test the
- attribute. */
- (void) astValidateAxis( this, axis - 1, "astTestDigits(axis)" );
- ax = astGetAxis( this, axis - 1 );
- result = astTestAxisDigits( ax );
- ax = astAnnul( ax );
-
-/* Direction(axis). */
-/* ---------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "direction(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestDirection( this, axis - 1 );
-
-/* Epoch. */
-/* ------ */
- } else if ( !strcmp( attrib, "epoch" ) ) {
- result = astTestEpoch( this );
-
-/* Bottom(axis). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "bottom(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestBottom( this, axis - 1 );
-
-/* Top(axis). */
-/* ---------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "top(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestTop( this, axis - 1 );
-
-/* Domain. */
-/* ------- */
- } else if ( !strcmp( attrib, "domain" ) ) {
- result = astTestDomain( this );
-
-/* Format(axis). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "format(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestFormat( this, axis - 1 );
-
-/* Label(axis). */
-/* ------------ */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "label(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestLabel( this, axis - 1 );
-
-/* MatchEnd. */
-/* --------- */
- } else if ( !strcmp( attrib, "matchend" ) ) {
- result = astTestMatchEnd( this );
-
-/* MaxAxes. */
-/* -------- */
- } else if ( !strcmp( attrib, "maxaxes" ) ) {
- result = astTestMaxAxes( this );
-
-/* MinAxes. */
-/* -------- */
- } else if ( !strcmp( attrib, "minaxes" ) ) {
- result = astTestMinAxes( this );
-
-/* Permute. */
-/* -------- */
- } else if ( !strcmp( attrib, "permute" ) ) {
- result = astTestPermute( this );
-
-/* PreserveAxes. */
-/* ------------- */
- } else if ( !strcmp( attrib, "preserveaxes" ) ) {
- result = astTestPreserveAxes( this );
-
-/* Symbol(axis). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "symbol(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestSymbol( this, axis - 1 );
-
-/* AlignSystem. */
-/* ------------ */
- } else if ( !strcmp( attrib, "alignsystem" ) ) {
- result = astTestAlignSystem( this );
-
-/* System. */
-/* ------- */
- } else if ( !strcmp( attrib, "system" ) ) {
- result = astTestSystem( this );
-
-/* Title. */
-/* ------ */
- } else if ( !strcmp( attrib, "title" ) ) {
- result = astTestTitle( this );
-
-/* Unit(axis). */
-/* ----------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "unit(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestUnit( this, axis - 1 );
-
-/* ObsLat. */
-/* ------- */
- } else if ( !strcmp( attrib, "obslat" ) ) {
- result = astTestObsLat( this );
-
-/* ObsLon. */
-/* ------- */
- } else if ( !strcmp( attrib, "obslon" ) ) {
- result = astTestObsLon( this );
-
-/* ObsAlt. */
-/* ------- */
- } else if ( !strcmp( attrib, "obsalt" ) ) {
- result = astTestObsAlt( this );
-
-/* Dut1. */
-/* ---- */
- } else if ( !strcmp( attrib, "dut1" ) ) {
- result = astTestDut1( this );
-
-/* Read-only attributes. */
-/* --------------------- */
-/* Test if the attribute name matches any of the read-only attributes
- of this class. If it does, then return zero. */
- } else if ( !strcmp( attrib, "naxes" ) ||
- !strncmp( attrib, "normunit", 8 ) ) {
- result = 0;
-
-/* Other axis attributes. */
-/* ---------------------- */
-/* If the attribute was not identified above, but appears to refer to
- a Frame axis, then it may refer to an Axis object of a derived type
- (which has additional attributes not recognised here). */
- } else if ( !free_axis_attrib && ( nc = 0,
- ( 1 == astSscanf( attrib, "%*[^()]%n(%d)%n",
- &axis_nc, &axis, &nc ) )
- && ( nc >= len ) ) ) {
-
-/* Validate the axis index and extract the attribute name. */
- (void) astValidateAxis( this, axis - 1, "astTest" );
- axis_attrib = astString( attrib, axis_nc );
-
-/* Obtain a pointer to the Axis object. */
- ax = astGetAxis( this, axis - 1 );
- if( astOK ) {
-
-/* Assume that we will be able to use the attribute name. */
- used = 1;
-
-/* Temporarily switch off error reporting so that if the following attempt
- to access the axis attribute fails, we can try to interpret the
- attribute name as an attribute of the primary Frame containing the
- specified axis. Any errors reported in this context will simply be
- ignored, in particularly they are not deferred for later delivery. */
- oldrep = astReporting( 0 );
-
-/* Use the Axis astTestAttrib method to test the attribute value. */
- result = astTestAttrib( ax, axis_attrib );
-
-/* If the above call failed with a status of AST__BADAT, indicating that
- the attribute name was not recognised, clear the status so that we can
- try to interpret the attribute name as an attribute of the primary Frame
- containing the specified axis. */
- if( astStatus == AST__BADAT ) {
- astClearStatus;
-
-/* Find the primary Frame containing the specified axis. */
- astPrimaryFrame( this, axis - 1, &pfrm, &paxis );
-
-/* Only attempt to use the primary Frame if it is not the same as "this"
- - otherwise we could end up in an infinite loop. */
- if( pfrm != this ) {
-
-/* Modify the attribute name to refer to the axis numbering of the
- primary frame. */
- sprintf( pfrm_attrib, "%s(%d)", axis_attrib, paxis + 1 );
-
-/* Attempt to test the attribute as an attribute of the primary Frame. */
- result = astTestAttrib( pfrm, pfrm_attrib );
-
-/* If this failed, clear the status and indicate that we have not managed to
- use the attribute name. */
- if( !astOK ) {
- astClearStatus;
- used = 0;
- }
-
- } else {
- used = 0;
- }
-
-/* If not found attempt to test the attribute value in the Axis, omitting
- the axis index. */
- if( ! used ) {
- result = astTestAttrib( pfrm, axis_attrib );
- if( !astOK ) {
- astClearStatus;
- } else {
- used = 1;
- }
- }
-
-/* Annul the primary Frame pointer. */
- pfrm = astAnnul( pfrm );
- }
-
-/* Re-instate the original error reporting state. */
- astReporting( oldrep );
-
-/* If we could not use the attribute name, attempt to test the axis
- attribute again, this time retaining the error report. This is done
- to ensure the user gets an appropriate error message. */
- if( !used ) result = astTestAttrib( ax, axis_attrib );
- }
-
-/* Annul the Axis pointer and free the memory holding the attribute
- name. */
- ax = astAnnul( ax );
- axis_attrib = astFree( axis_attrib );
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute is still not recognised, and the Frame has only 1 axis,
- and the attribute name does not already include an axis specifier, try
- again after appending "(1)" to the end of the attribute name. */
- } else if( !has_axis && astGetNaxes( this ) == 1 ) {
-
-/* Take a copy of the supplied name, allowing 3 extra characters for the
- axis specifier "(1)". */
- axis_attrib = astMalloc( len + 4 );
- if( axis_attrib ) memcpy( axis_attrib, attrib, len );
-
-/* Indicate we should free the axis_attrib memory. */
- free_axis_attrib = 1;
-
-/* Add in the axis specifier. */
- strcpy( axis_attrib + len, "(1)" );
-
-/* Use the new attribute name instead of the supplied name. */
- old_attrib = attrib;
- attrib = axis_attrib;
-
-/* Indicate the attribute name now has an axis specifier. */
- has_axis = 1;
-
-/* Jump back to try interpreting the new attribute name. */
- goto L1;
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute name is still not recognised, pass it on to the parent
- method for further interpretation. First re-instate the original attrib
- name string if it was changed above. */
- } else {
- if( free_axis_attrib ) {
- attrib = old_attrib;
- axis_attrib = astFree( axis_attrib );
- }
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Use a Frame to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frame.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* Frame member function (over-rides the astTransform method inherited
-* from the Mapping class).
-
-* Description:
-* This function takes a Frame and a set of points encapsulated in a
-* PointSet and transforms the points so as to perform the identity
-* transformation (i.e. simply copies the coordinate values).
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation. In this case, both transformations are equivalent.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of coordinates for the Frame being applied. This number
-* will be equal to the number of Frame axes.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstFrame *this; /* Pointer to the Frame structure */
- AstPointSet *result; /* Pointer value to be returned */
- AstUnitMap *unitmap; /* Pointer to temporary UnitMap */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the Frame structure. */
- this = (AstFrame *) this_mapping;
-
-/* Create a unit Mapping with one coordinate for each Frame axis. */
- unitmap = astUnitMap( astGetNaxes( this ), "", status );
-
-/* Use the Mapping to transform (i.e. copy) the coordinate values. */
- result = astTransform( unitmap, in, forward, out );
-
-/* Annul the Mapping. */
- unitmap = astAnnul( unitmap );
-
-/* If an error occurred and a new PointSet may have been created, then annul
- the result. In any case, ensure that a NULL pointer is returned. */
- if ( !astOK ) {
- if ( !out ) result = astAnnul( result );
- result = NULL;
- }
-
-/* Return the result pointer. */
- return result;
-}
-
-static int Unformat( AstFrame *this, int axis, const char *string,
- double *value, int *status ) {
-/*
-*+
-* Name:
-* astUnformat
-
-* Purpose:
-* Read a formatted coordinate value for a Frame axis.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* int astUnformat( AstFrame *this, int axis, const char *string,
-* double *value )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function reads a formatted coordinate value for a Frame
-* axis (supplied as a string) and returns the equivalent numerical
-* value as a double. It also returns the number of characters read
-* from the string.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* axis
-* The number of the Frame axis for which the coordinate value
-* is to be read (axis numbering starts at zero for the first
-* axis).
-* string
-* Pointer to a constant null-terminated string containing the
-* formatted coordinate value.
-* value
-* Pointer to a double in which the coordinate value read will be
-* returned.
-
-* Returned Value:
-* The number of characters read from the string to obtain the
-* coordinate value.
-
-* Notes:
-* - Any white space at the beginning of the string will be
-* skipped, as also will any trailing white space following the
-* coordinate value read. The function's return value will reflect
-* this.
-* - A function value of zero (and no coordinate value) will be
-* returned, without error, if the string supplied does not contain
-* a suitably formatted value.
-* - The string "<bad>" is recognised as a special case and will
-* generate the value AST__BAD, without error. The test for this
-* string is case-insensitive and permits embedded white space.
-* - A function result of zero will be returned and no coordinate
-* value will be returned via the "value" pointer if this function
-* is invoked with the global error status set, or if it should
-* fail for any reason.
-*-
-
-* Implementation Notes:
-* - This function implements the basic astUnformat method
-* available via the protected interface to the Frame class. The
-* public interface to this method is provided by the
-* astUnformatId_ function.
-*/
-
-/* Local Variables: */
- AstAxis *ax; /* Pointer to Axis object */
- const char *label; /* Pointer to axis label string */
- double coord; /* Coordinate value read */
- int digits_set; /* Axis Digits attribute set? */
- int nc; /* Number of characters read */
- int status_value; /* AST error status */
-
-/* Initialise. */
- nc = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return nc;
-
-/* Validate the axis index and obtain a pointer to the required Axis. */
- (void) astValidateAxis( this, axis, "astUnformat" );
- ax = astGetAxis( this, axis );
-
-/* Test if any Axis attributes which may affect the result are
- undefined (i.e. have not been explicitly set). If so, we over-ride
- them, giving them temporary values dictated by the Frame. Only the
- Digits attribute is potentially relevant here. */
- digits_set = astTestAxisDigits( ax );
- if ( !digits_set ) astSetAxisDigits( ax, astGetDigits( this ) );
-
-/* Read the coordinate value. */
- if ( astOK ) {
- nc = astAxisUnformat( ax, string, &coord );
-
-/* If an error occurred, save and temporarily clear the global error
- status while the axis Label string is obtained. Then restore the
- original error status value afterwards. */
- if ( !astOK ) {
- status_value = astStatus;
- astClearStatus;
- label = astGetLabel( this, axis );
- astSetStatus( status_value );
-
-/* Report a contextual error message containing the axis label. */
- astError( status_value, "%s(%s): Unable to read \"%s\" value.", status,
- "astUnformat", astGetClass( this ), label );
- }
- }
-
-/* Clear any Axis attributes that were temporarily over-ridden. */
- if ( !digits_set ) astClearAxisDigits( ax );
-
-/* Annul the Axis pointer. */
- ax = astAnnul( ax );
-
-/* If an error occurred, clear the count of characters read. */
- if ( !astOK ) {
- nc = 0;
-
-/* Otherwise, if characters were read, return the coordinate value. */
- } else if ( nc ) {
- *value = coord;
- }
-
-/* Return the number of characters read. */
- return nc;
-}
-
-static int ValidateAxis( AstFrame *this, int axis, const char *method, int *status ) {
-/*
-*+
-* Name:
-* astValidateAxis
-
-* Purpose:
-* Validate and permute a Frame's axis index.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* int astValidateAxis( AstFrame *this, int axis, const char *method )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function checks the validity of an index (zero-based) which
-* is to be used to address one of the coordinate axes of a
-* Frame. If the index is valid, it is permuted using the axis
-* permutation array associated with the Frame and the (zero-based)
-* permuted axis index is returned. This gives the location of the
-* required axis information within the Frame's internal arrays. If
-* the axis index supplied is not valid, an error is reported and
-* the global error status is set.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* axis
-* The axis index (zero-based) to be checked. To be valid, it
-* must lie between zero and (naxes-1) inclusive, where "naxes"
-* is the number of coordinate axes associated with the Frame.
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function
-* to validate an axis index. This method name is used solely
-* for constructing error messages.
-
-* Returned Value:
-* The permuted axis index.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-* - Error messages issued by this function refer to the external
-* (public) numbering system used for axes (which is one-based),
-* whereas zero-based axis indices are used internally.
-*-
-*/
-
-/* Local Variables: */
- const int *perm; /* Pointer to axis permutation array */
- int naxes; /* Number of Frame axes */
- int result; /* Permuted axis index */
-
-/* Initialise. */
- result = 0;
-
-/* Determine the number of Frame axes. */
- naxes = astGetNaxes( this );
- if ( astOK ) {
-
-/* If the Frame has no axes, report an error (note we convert to
- one-based axis numbering in the error message). */
- if ( naxes == 0 ) {
- astError( AST__AXIIN, "%s(%s): Invalid attempt to use an axis index "
- "(%d) for a %s which has no axes.", status, method,
- astGetClass( this ), axis + 1, astGetClass( this ) );
-
-/* Otherwise, check the axis index for validity and report an error if
- it is not valid (again, use one-based axis numbering). */
- } else if ( ( axis < 0 ) || ( axis >= naxes ) ) {
- astError( AST__AXIIN, "%s(%s): Axis index (%d) invalid - it should "
- "be in the range 1 to %d.", status, method, astGetClass( this ),
- axis + 1, naxes );
-
-/* If the axis index was valid, obtain the axis permutation array and
- use this to generate the permuted axis value. */
- } else {
- perm = astGetPerm( this );
- if( perm ) result = perm[ axis ];
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static void ValidateAxisSelection( AstFrame *this, int naxes, const int *axes,
- const char *method, int *status ) {
-/*
-*+
-* Name:
-* astValidateAxisSelection
-
-* Purpose:
-* Check that a set of axes selected from a Frame is valid.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* void astValidateAxisSelection( AstFrame *this, int naxes,
-* const int *axes, const char *method )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function checks the validity of an array of (zero-based)
-* axis indices that specify a set of axes to be selected from a
-* Frame. To be valid, no axis should be selected more than
-* once. In assessing this, any axis indices that do not refer to
-* valid Frame axes (e.g. are set to -1) are ignored.
-*
-* If the axis selection is valid, this function returns without further
-* action. Otherwise, an error is reported and the global error status is
-* set.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* naxes
-* The number of axes to be selected (may be zero).
-* axes
-* Pointer to an array of int with naxes elements that contains the
-* (zero based) axis indices to be checked.
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function
-* to validate an axis selection. This method name is used
-* solely for constructing error messages.
-*-
-*/
-
-/* Local Variables: */
- int *count; /* Pointer to temporary array of counts */
- int axis; /* Loop counter for selected axes */
- int frame_axis; /* Loop counter for Frame axes */
- int frame_naxes; /* Number of Frame axes */
- int valid; /* Axis selection valid? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Check to see if no axes have been selected. If so, there is nothing to
- do. */
- if ( naxes ) {
-
-/* Initialise. */
- valid = 1;
-
-/* Obtain the number of Frame axes and allocate an array of int with
- one element for each Frame axis. This will store a count of the
- number of times each axis is selected. */
- frame_naxes = astGetNaxes( this );
- count = astMalloc( sizeof( int ) * (size_t) frame_naxes );
- if ( astOK ) {
-
-/* Initialise the array of counts to zero. */
- for ( frame_axis = 0; frame_axis < frame_naxes; frame_axis++ ) {
- count[ frame_axis ] = 0;
- }
-
-/* Loop through each selected axis. */
- for ( axis = 0; axis < naxes; axis++ ) {
- frame_axis = axes[ axis ];
-
-/* Check if the selected axis index is valid for the Frame. If so, increment
- the selection count for that Frame axis. */
- if ( ( frame_axis >= 0 ) && ( frame_axis < frame_naxes ) ) {
- count[ frame_axis ]++;
- }
- }
-
-/* Loop through the count array and check that no Frame axis was selected
- more than once. If it was, clear the "valid" flag and quit checking. */
- for ( frame_axis = 0; frame_axis < frame_naxes; frame_axis++ ) {
- if ( count[ frame_axis ] > 1 ) {
- valid = 0;
- break;
- }
- }
- }
-
-/* Free the temporary count array. */
- count = astFree( count );
-
-/* If no error has occurred, but the axis selection is not valid, then report
- an error. */
- if ( astOK && !valid ) {
- astError( AST__SELIN, "%s(%s): Invalid axis selection - each axis "
- "may be selected only once.", status, method, astGetClass( this ) );
- }
- }
-}
-
-static int ValidateSystem( AstFrame *this, AstSystemType system, const char *method, int *status ) {
-/*
-*+
-* Name:
-* astValidateSystem
-
-* Purpose:
-* Validate a value for a Frame's System attribute.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* int astValidateSystem( AstFrame *this, AstSystemType system,
-* const char *method )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function checks the validity of the supplied system value.
-* If the value is valid, it is returned unchanged. Otherwise, an
-* error is reported and a value of AST__BADSYSTEM is returned.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* system
-* The system value to be checked.
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function
-* to validate an axis index. This method name is used solely
-* for constructing error messages.
-
-* Returned Value:
-* The validated system value.
-
-* Notes:
-* - A value of AST_BADSYSTEM will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstSystemType result; /* Validated system value */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If the value is out of bounds, report an error. */
- if ( system < FIRST_SYSTEM || system > LAST_SYSTEM ) {
- astError( AST__AXIIN, "%s(%s): Bad value (%d) given for the System "
- "or AlignSystem attribute of a %s.", status, method,
- astGetClass( this ), (int) system, astGetClass( this ) );
-
-/* Otherwise, return the supplied value. */
- } else {
- result = system;
- }
-
-/* Return the result. */
- return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- the axes of a Frame using the private macros defined for this
- purpose at the start of this file. */
-
-/*
-*att++
-* Name:
-* Naxes
-
-* Purpose:
-* Number of Frame axes.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer, read-only.
-
-* Description:
-* This is a read-only attribute giving the number of axes in a
-* Frame (i.e. the number of dimensions of the coordinate space
-* which the Frame describes). This value is determined when the
-* Frame is created.
-
-* Applicability:
-* Frame
-* All Frames have this attribute.
-* FrameSet
-* The Naxes attribute of a FrameSet is the same as that of its
-* current Frame (as specified by the Current attribute).
-* CmpFrame
-* The Naxes attribute of a CmpFrame is equal to the sum of the
-* Naxes values of its two component Frames.
-*att--
-*/
-
-
-/*
-*att++
-* Name:
-* Direction(axis)
-
-* Purpose:
-* Display axis in conventional direction?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute is a boolean value which suggests how the axes of
-* a Frame should be displayed (e.g.) in graphical output. By
-* default, it has the value one, indicating that they should be
-* shown in the conventional sense (increasing left to right for an
-* abscissa, and bottom to top for an ordinate). If set to zero,
-* this attribute indicates that the direction should be reversed,
-* as would often be done for an astronomical magnitude or a right
-* ascension axis.
-
-* Applicability:
-* Frame
-* The default Direction value supplied by the Frame class is 1,
-* indicating that all axes should be displayed in the
-* conventional direction.
-* SkyFrame
-* The SkyFrame class re-defines the default Direction value to
-* suggest that certain axes (e.g. right ascension) should be
-* plotted in reverse when appropriate.
-* FrameSet
-* The Direction attribute of a FrameSet axis is the same as
-* that of its current Frame (as specified by the Current
-* attribute).
-* Plot
-* The Direction attribute of the base Frame in a Plot is set to
-* indicate the sense of the two graphics axes, as implied by the
-* graphics bounding box supplied when the Plot was created.
-
-* Notes:
-* - When specifying this attribute by name, it should be
-* subscripted with the number of the Frame axis to which it
-* applies.
-* - The Direction attribute does not directly affect the behaviour
-* of the AST library. Instead, it serves as a hint to applications
-* programs about the orientation in which they may wish to display
-* any data associated with the Frame. Applications are free to
-* ignore this hint if they wish.
-*att--
-*/
-/* This simply provides an interface to the Axis methods for accessing
- the Direction flag. */
-MAKE_CLEAR(Direction)
-MAKE_GET(Direction,int,0,0,0)
-MAKE_SET(Direction,int)
-MAKE_TEST(Direction)
-
-/*
-*att++
-* Name:
-* Dut1
-
-* Purpose:
-* The UT1-UTC correction.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute is used when calculating the Local Apparent Sidereal
-* Time corresponding to SkyFrame's Epoch value (used when converting
-* positions to or from the "AzEl" system). It should be set to the
-* difference, in seconds, between the UT1 and UTC timescales at the
-* moment in time represented by the SkyFrame's Epoch attribute. The
-* value to use is unpredictable and depends on changes in the earth's
-* rotation speed. Values for UT1-UTC can be obtained from the
-* International Earth Rotation and Reference Systems Service
-* (IERS) at http://www.iers.org/.
-*
-* Currently, the correction is always less than 1 second. This is
-* ensured by the occasional introduction of leap seconds into the UTC
-* timescale. Therefore no great error will usually result if no value
-* is assigned to this attribute (in which case a default value of
-* zero is used). However, it is possible that a decision may be taken
-* at some time in the future to abandon the introduction of leap
-* seconds, in which case the DUT correction could grow to significant
-* sizes.
-
-* Applicability:
-* Frame
-* All Frames have this attribute.
-
-*att--
-*/
-/* The UT1-UTC correction, in seconds. Has a value of AST__BAD when not set
- yielding a default value of 0.0. */
-astMAKE_CLEAR(Frame,Dut1,dut1,AST__BAD)
-astMAKE_GET(Frame,Dut1,double,0.0,(this->dut1 == AST__BAD ? 0.0 : this->dut1))
-astMAKE_SET(Frame,Dut1,double,dut1,value)
-astMAKE_TEST(Frame,Dut1,( this->dut1 != AST__BAD ))
-
-
-
-/*
-*att++
-* Name:
-* Epoch
-
-* Purpose:
-* Epoch of observation.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute is used to qualify the coordinate systems described by
-* a Frame, by giving the moment in time when the coordinates are known
-* to be correct. Often, this will be the date of observation, and is
-* important in cases where coordinates systems move with respect to each
-* other over the course of time.
-*
-* The Epoch attribute is stored as a Modified Julian Date, but
-* when setting its value it may be given in a variety of
-* formats. See the "Input Formats" section (below) for details.
-* Strictly, the Epoch value should be supplied in the TDB timescale,
-* but for some purposes (for instance, for converting sky positions
-* between different types of equatorial system) the timescale is not
-* significant, and UTC may be used.
-
-* Input Formats:
-* The formats accepted when setting an Epoch value are listed
-* below. They are all case-insensitive and are generally tolerant
-* of extra white space and alternative field delimiters:
-*
-* - Besselian Epoch: Expressed in decimal years, with or without
-* decimal places ("B1950" or "B1976.13" for example).
-*
-* - Julian Epoch: Expressed in decimal years, with or without
-* decimal places ("J2000" or "J2100.9" for example).
-*
-* - Year: Decimal years, with or without decimal places ("1996.8"
-* for example). Such values are interpreted as a Besselian epoch
-* (see above) if less than 1984.0 and as a Julian epoch otherwise.
-*
-* - Julian Date: With or without decimal places ("JD 2454321.9" for
-* example).
-*
-* - Modified Julian Date: With or without decimal places
-* ("MJD 54321.4" for example).
-*
-* - Gregorian Calendar Date: With the month expressed either as an
-* integer or a 3-character abbreviation, and with optional decimal
-* places to represent a fraction of a day ("1996-10-2" or
-* "1996-Oct-2.6" for example). If no fractional part of a day is
-* given, the time refers to the start of the day (zero hours).
-*
-* - Gregorian Date and Time: Any calendar date (as above) but with
-* a fraction of a day expressed as hours, minutes and seconds
-* ("1996-Oct-2 12:13:56.985" for example). The date and time can be
-* separated by a space or by a "T" (as used by ISO8601 format).
-
-* Output Format:
-* When enquiring Epoch values, the format used is the "Year"
-* format described under "Input Formats". This is a value in
-* decimal years which will be a Besselian epoch if less than
-* 1984.0 and a Julian epoch otherwise. By omitting any character
-* prefix, this format allows the Epoch value to be obtained as
-* either a character string or a floating point value.
-
-* Applicability:
-* Frame
-* All Frames have this attribute. The basic Frame class provides
-* a default of J2000.0 (Julian) but makes no use of the Epoch value.
-* This is because the Frame class does not distinguish between
-* different Cartesian coordinate systems (see the System attribute).
-* CmpFrame
-* The default Epoch value for a CmpFrame is selected as follows;
-* if the Epoch attribute has been set in the first component Frame
-* then the Epoch value from the first component Frame is used as
-* the default for the CmpFrame. Otherwise, if the Epoch attribute has
-* been set in the second component Frame then the Epoch value from the
-* second component Frame is used as the default for the CmpFrame.
-* Otherwise, the default Epoch value from the first component
-* Frame is used as the default for the CmpFrame. When the Epoch
-* attribute of a CmpFrame is set or cleared, it is also set or
-* cleared in the two component Frames.
-* FrameSet
-* The Epoch attribute of a FrameSet is the same as that of its current
-* Frame (as specified by the Current attribute).
-* SkyFrame
-* The coordinates of sources within a SkyFrame can changed with time
-* for various reasons, including: (i) changing aberration of light
-* caused by the observer's velocity (e.g. due to the Earth's motion
-* around the Sun), (ii) changing gravitational deflection by the Sun
-* due to changes in the observer's position with time, (iii) fictitious
-* motion due to rotation of non-inertial coordinate systems (e.g. the
-* old FK4 system), and (iv) proper motion of the source itself (although
-* this last effect is not handled by the SkyFrame class because it
-* affects individual sources rather than the coordinate system as
-* a whole).
-*
-* The default Epoch value in a SkyFrame is B1950.0 (Besselian) for the
-* old FK4-based coordinate systems (see the System attribute) and
-* J2000.0 (Julian) for all others.
-*
-* Care must be taken to distinguish the Epoch value, which relates to
-* motion (or apparent motion) of the source, from the superficially
-* similar Equinox value. The latter is used to qualify a coordinate
-* system which is itself in motion in a (notionally) predictable way
-* as a result of being referred to a slowly moving reference plane
-* (e.g. the equator).
-*
-* See the description of the System attribute for details of which
-* qualifying attributes apply to each celestial coordinate system.
-* TimeFrame
-* A TimeFrame describes a general time axis and so cannot be completely
-* characterised by a single Epoch value. For this reason the TimeFrame
-* class makes no use of the Epoch attribute. However, user code can
-* still make use of the attribute if necessary to represent a "typical"
-* time spanned by the TimeFrame. The default Epoch value for a TimeFrame
-* will be the TDB equivalent of the current value of the TimeFrame's
-* TimeOrigin attribute. If no value has been set for TimeOrigin,
-* then the default Epoch value is J2000.0.
-
-
-The coordinates of sources within a SkyFrame can changed with time
-*att--
-*/
-/* Clear the Epoch value by setting it to AST__BAD. */
-astMAKE_CLEAR(Frame,Epoch,epoch,AST__BAD)
-
-/* Provide a default value of J2000.0 setting. */
-astMAKE_GET(Frame,Epoch,double,AST__BAD,(
- ( this->epoch != AST__BAD ) ? this->epoch : palSlaEpj2d( 2000.0 )))
-
-/* Allow any Epoch value to be set. */
-astMAKE_SET(Frame,Epoch,double,epoch,value)
-
-/* An Epoch value is set if it is not equal to AST__BAD. */
-astMAKE_TEST(Frame,Epoch,( this->epoch != AST__BAD ))
-
-/*
-*att++
-* Name:
-* Top(axis)
-
-* Purpose:
-* Highest axis value to display
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute gives the highest axis value to be displayed (for
-c instance, by the astGrid method).
-f instance, by the AST_GRID method).
-
-* Applicability:
-* Frame
-* The default supplied by the Frame class is to display all axis
-* values, without any limit.
-* SkyFrame
-* The SkyFrame class re-defines the default Top value to +90 degrees
-* for latitude axes, and 180 degrees for co-latitude axes. The
-* default for longitude axes is to display all axis values.
-
-* Notes:
-* - When specifying this attribute by name, it should be
-* subscripted with the number of the Frame axis to which it
-* applies.
-*att--
-*/
-/* This simply provides an interface to the Axis methods for accessing
- the Top value. */
-MAKE_CLEAR(Top)
-MAKE_GET(Top,double,DBL_MAX,0,DBL_MAX)
-MAKE_SET(Top,double)
-MAKE_TEST(Top)
-
-/*
-*att++
-* Name:
-* Bottom(axis)
-
-* Purpose:
-* Lowest axis value to display
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute gives the lowest axis value to be displayed (for
-c instance, by the astGrid method).
-f instance, by the AST_GRID method).
-
-* Applicability:
-* Frame
-* The default supplied by the Frame class is to display all axis
-* values, without any limit.
-* SkyFrame
-* The SkyFrame class re-defines the default Bottom value to -90 degrees
-* for latitude axes, and 0 degrees for co-latitude axes. The
-* default for longitude axes is to display all axis values.
-
-* Notes:
-* - When specifying this attribute by name, it should be
-* subscripted with the number of the Frame axis to which it
-* applies.
-*att--
-*/
-/* This simply provides an interface to the Axis methods for accessing
- the Bottom value. */
-MAKE_CLEAR(Bottom)
-MAKE_GET(Bottom,double,-DBL_MAX,0,-DBL_MAX)
-MAKE_SET(Bottom,double)
-MAKE_TEST(Bottom)
-
-/*
-*att++
-* Name:
-* Format(axis)
-
-* Purpose:
-* Format specification for axis values.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute specifies the format to be used when displaying
-* coordinate values associated with a particular Frame axis
-* (i.e. to convert values from binary to character form). It is
-c interpreted by the astFormat function and determines the
-f interpreted by the AST_FORMAT function and determines the
-* formatting which it applies.
-*
-* If no Format value is set for a Frame axis, a default value is
-* supplied instead. This is based on the value of the Digits, or
-* Digits(axis), attribute and is chosen so that it displays the
-* requested number of digits of precision.
-
-* Applicability:
-* Frame
-* The Frame class interprets this attribute as a format
-* specification string to be passed to the C "printf" function
-* (e.g. "%1.7G") in order to format a single coordinate value
-* (supplied as a double precision number).
-c
-c When supplying a value for this attribute, beware that the
-c "%" character may be interpreted directly as a format
-c specification by some printf-like functions (such as
-c astSet). You may need to double it (i.e. use "%%") to avoid
-c this.
-* SkyFrame
-* The SkyFrame class re-defines the syntax and default value of
-* the Format string to allow the formatting of sexagesimal
-* values as appropriate for the particular celestial coordinate
-* system being represented. The syntax of SkyFrame Format
-* strings is described (below) in the "SkyFrame Formats"
-* section.
-* FrameSet
-* The Format attribute of a FrameSet axis is the same as that
-* of its current Frame (as specified by the Current
-* attribute). Note that the syntax of the Format string is also
-* determined by the current Frame.
-* TimeFrame
-* The TimeFrame class extends the syntax of the Format string to
-* allow the formatting of TimeFrame axis values as Gregorian calendar
-* dates and times. The syntax of TimeFrame Format strings is described
-* (below) in the "TimeFrame Formats" section.
-
-* SkyFrame Formats:
-* The Format string supplied for a SkyFrame should contain zero or
-* more of the following characters. These may occur in any order,
-* but the following is recommended for clarity:
-*
-* - "+": Indicates that a plus sign should be prefixed to positive
-* values. By default, no plus sign is used.
-*
-* - "z": Indicates that leading zeros should be prefixed to the
-* value so that the first field is of constant width, as would be
-* required in a fixed-width table (leading zeros are always
-* prefixed to any fields that follow). By default, no leading
-* zeros are added.
-*
-* - "i": Use the standard ISO field separator (a colon) between
-* fields. This is the default behaviour.
-*
-* - "b": Use a blank to separate fields.
-*
-* - "l": Use a letter ("h"/"d", "m" or "s" as appropriate) to
-* separate fields.
-*
-* - "g": Use a letter and symbols to separate fields ("h"/"d", "m" or "s",
-* etc, as appropriate), but include escape sequences in the formatted
-* value so that the Plot class will draw the separators as small
-* super-scripts.
-*
-* - "d": Include a degrees field. Expressing the angle purely in
-* degrees is also the default if none of "h", "m", "s" or "t" are
-* given.
-*
-* - "h": Express the angle as a time and include an hours field
-* (where 24 hours correspond to 360 degrees). Expressing the angle
-* purely in hours is also the default if "t" is given without
-* either "m" or "s".
-*
-* - "m": Include a minutes field. By default this is not included.
-*
-* - "s": Include a seconds field. By default this is not included.
-* This request is ignored if "d" or "h" is given, unless a minutes
-* field is also included.
-*
-* - "t": Express the angle as a time (where 24 hours correspond to
-* 360 degrees). This option is ignored if either "d" or "h" is
-* given and is intended for use where the value is to be expressed
-* purely in minutes and/or seconds of time (with no hours
-* field). If "t" is given without "d", "h", "m" or "s" being
-* present, then it is equivalent to "h".
-*
-* - ".": Indicates that decimal places are to be given for the
-* final field in the formatted string (whichever field this
-* is). The "." should be followed immediately by an unsigned
-* integer which gives the number of decimal places required, or by an
-* asterisk. If an asterisk is supplied, a default number of decimal
-* places is used which is based on the value of the Digits
-* attribute.
-*
-* All of the above format specifiers are case-insensitive. If
-* several characters make conflicting requests (e.g. if both "i"
-* and "b" appear), then the character occurring last takes
-* precedence, except that "d" and "h" always override "t".
-*
-* If the format string starts with a percentage sign (%), then the
-* whole format string is assumed to conform to the syntax defined by
-* the Frame class, and the axis values is formated as a decimal
-* radians value.
-
-* TimeFrame Formats:
-* The Format string supplied for a TimeFrame should either use the
-* syntax defined by the base Frame class (i.e. a C "printf" format
-* string), or the extended "iso" syntax described below (the default
-* value is inherited from the Frame class):
-*
-* - C "printf" syntax: If the Format string is a C "printf" format
-* description such as "%1.7G", the TimeFrame axis value will be
-* formatted without change as a floating point value using this format.
-* The formatted string will thus represent an offset from the zero point
-* specified by the TimeFrame's TimeOrigin attribute, measured in
-* units given by the TimeFrame's Unit attribute.
-*
-* - "iso" syntax: This is used to format a TimeFrame axis value as a
-* Gregorian date followed by an optional time of day. If the Format
-* value commences with the string "iso" then the TimeFrame axis value
-* will be converted to an absolute MJD, including the addition of the
-* current TimeOrigin value, and then formatted as a Gregorian date
-* using the format "yyyy-mm-dd". Optionally, the Format value may
-* include an integer precision following the "iso" specification (e.g.
-* "iso.2"), in which case the time of day will be appended to the
-* formatted date (if no time of day is included, the date field is
-* rounded to the nearest day). The integer value in the Format string
-* indicates the number of decimal places to use in the seconds field. For
-* instance, a Format value of "iso.0" produces a time of day of the form
-* "hh:mm:ss", and a Format value of "iso.2" produces a time of day of the
-* form "hh:mm:ss.ss". The date and time fields will be separated by a
-* space unless 'T' is appended to the end of string, in which case
-* the letter T (upper case) will be used as the separator. The value of
-* the Digits attribute is ignored when using this "iso" format.
-
-* Notes:
-* - When specifying this attribute by name, it should be
-* subscripted with the number of the Frame axis to which it
-* applies.
-*att--
-*/
-/* This simply provides an interface to the Axis methods for accessing
- the Format string. */
-MAKE_CLEAR(Format)
-MAKE_GET(Format,const char *,NULL,0,0)
-MAKE_SET(Format,const char *)
-MAKE_TEST(Format)
-
-/*
-*att++
-* Name:
-* Label(axis)
-
-* Purpose:
-* Axis label.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute specifies a label to be attached to each axis of
-* a Frame when it is represented (e.g.) in graphical output.
-*
-* If a Label value has not been set for a Frame axis, then a
-* suitable default is supplied.
-
-* Applicability:
-* Frame
-* The default supplied by the Frame class is the string "Axis
-* <n>", where <n> is 1, 2, etc. for each successive axis.
-* SkyFrame
-* The SkyFrame class re-defines the default Label value
-* (e.g. to "Right ascension" or "Galactic latitude") as
-* appropriate for the particular celestial coordinate system
-* being represented.
-* TimeFrame
-* The TimeFrame class re-defines the default Label value as
-* appropriate for the particular time system being represented.
-* FrameSet
-* The Label attribute of a FrameSet axis is the same as that of
-* its current Frame (as specified by the Current attribute).
-
-* Notes:
-* - Axis labels are intended purely for interpretation by human
-* readers and not by software.
-* - When specifying this attribute by name, it should be
-* subscripted with the number of the Frame axis to which it
-* applies.
-*att--
-*/
-/* This provides an interface to the Axis methods for accessing the
- Label string, but provides an alternative default Label based on
- the axis number. This default string is written to the static
- "label_buff" buffer and a pointer to this is returned if
- required. */
-MAKE_CLEAR(Label)
-MAKE_GET(Label,const char *,NULL,1,GetDefaultLabel( axis, status ))
-MAKE_SET(Label,const char *)
-MAKE_TEST(Label)
-
-/*
-*att++
-* Name:
-* Symbol(axis)
-
-* Purpose:
-* Axis symbol.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute specifies a short-form symbol to be used to
-* represent coordinate values for a particular axis of a
-* Frame. This might be used (e.g.) in algebraic expressions where
-* a full description of the axis would be inappropriate. Examples
-* include "RA" and "Dec" (for Right Ascension and Declination).
-*
-* If a Symbol value has not been set for a Frame axis, then a
-* suitable default is supplied.
-
-* Applicability:
-* Frame
-* The default Symbol value supplied by the Frame class is the
-* string "<Domain><n>", where <n> is 1, 2, etc. for successive
-* axes, and <Domain> is the value of the Frame's Domain
-* attribute (truncated if necessary so that the final string
-* does not exceed 15 characters). If no Domain value has been
-* set, "x" is used as the <Domain> value in constructing this
-* default string.
-* SkyFrame
-* The SkyFrame class re-defines the default Symbol value
-* (e.g. to "RA" or "Dec") as appropriate for the particular
-* celestial coordinate system being represented.
-* TimeFrame
-* The TimeFrame class re-defines the default Symbol value as
-* appropriate for the particular time system being represented.
-* FrameSet
-* The Symbol attribute of a FrameSet axis is the same as that
-* of its current Frame (as specified by the Current attribute).
-
-* Notes:
-* - When specifying this attribute by name, it should be
-* subscripted with the number of the Frame axis to which it
-* applies.
-*att--
-*/
-/* This provides an interface to the Axis methods for accessing the
- Symbol string, but provides an alternative default Symbol based on
- the axis number and the Frame's Domain (if defined, otherwise "x"
- is used). This default string is written to the static
- "symbol_buff" buffer and a pointer to this is returned if
- required. */
-MAKE_CLEAR(Symbol)
-MAKE_GET(Symbol,const char *,NULL,1,GetDefaultSymbol( this, axis, status ) )
-MAKE_SET(Symbol,const char *)
-MAKE_TEST(Symbol)
-
-/*
-*att++
-* Name:
-* Unit(axis)
-
-* Purpose:
-* Axis physical units.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute contains a textual representation of the physical
-* units used to represent coordinate values on a particular axis
-c of a Frame. The astSetActiveUnit function controls how the Unit values
-f of a Frame. The AST_SETACTIVEUNIT routine controls how the Unit values
-* are used.
-
-* Applicability:
-* Frame
-* The default supplied by the Frame class is an empty string.
-* SkyFrame
-* The SkyFrame class re-defines the default Unit value (e.g. to
-* "hh:mm:ss.sss") to describe the character string returned by
-c the astFormat function when formatting coordinate values.
-f the AST_FORMAT function when formatting coordinate values.
-* SpecFrame
-* The SpecFrame class re-defines the default Unit value so that it
-* is appropriate for the current System value. See the System
-* attribute for details. An error will be reported if an attempt
-* is made to use an inappropriate Unit.
-* TimeFrame
-* The TimeFrame class re-defines the default Unit value so that it
-* is appropriate for the current System value. See the System
-* attribute for details. An error will be reported if an attempt
-* is made to use an inappropriate Unit (e.g. "km").
-* FrameSet
-* The Unit attribute of a FrameSet axis is the same as that of
-* its current Frame (as specified by the Current attribute).
-
-* Notes:
-* - When specifying this attribute by name, it should be
-* subscripted with the number of the Frame axis to which it
-* applies.
-*att--
-*/
-/* This simply provides an interface to the Axis methods for accessing
- the Unit string. */
-MAKE_GET(Unit,const char *,NULL,0,0)
-MAKE_TEST(Unit)
-
-/*
-*att++
-* Name:
-* NormUnit(axis)
-
-* Purpose:
-* Normalised Axis physical units.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String, read-only.
-
-* Description:
-* The value of this read-only attribute is derived from the current
-* value of the Unit attribute. It will represent an equivalent system
-* of units to the Unit attribute, but will potentially be simplified.
-* For instance, if Unit is set to "s*(m/s)", the NormUnit value will
-* be "m". If no simplification can be performed, the value of the
-* NormUnit attribute will equal that of the Unit attribute.
-
-* Applicability:
-* Frame
-* All Frames have this attribute.
-
-* Notes:
-* - When specifying this attribute by name, it should be
-* subscripted with the number of the Frame axis to which it
-* applies.
-*att--
-*/
-/* This simply provides an interface to the Axis methods for accessing
- the Unit string. */
-MAKE_GET(NormUnit,const char *,NULL,0,0)
-
-/* Implement member functions to access the attributes associated with
- the Frame as a whole using the macros defined for this purpose in
- the "object.h" file. */
-
-/*
-*att++
-* Name:
-* Digits/Digits(axis)
-
-* Purpose:
-* Number of digits of precision.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer.
-
-* Description:
-* This attribute specifies how many digits of precision are
-* required by default when a coordinate value is formatted for a
-c Frame axis (e.g. using astFormat). Its value may be set either
-f Frame axis (e.g. using AST_FORMAT). Its value may be set either
-* for a Frame as a whole, or (by subscripting the attribute name
-* with the number of an axis) for each axis individually. Any
-* value set for an individual axis will over-ride the value for
-* the Frame as a whole.
-*
-* Note that the Digits value acts only as a means of determining a
-* default Format string. Its effects are over-ridden if a Format
-* string is set explicitly for an axis. However, if the Format
-* attribute specifies the precision using the string ".*", then
-* the Digits attribute is used to determine the number of decimal
-* places to produce.
-
-* Applicability:
-* Frame
-* The default Digits value supplied by the Frame class is 7. If
-* a value less than 1 is supplied, then 1 is used instead.
-* FrameSet
-* The Digits attribute of a FrameSet (or one of its axes) is
-* the same as that of its current Frame (as specified by the
-* Current attribute).
-* Plot
-* The default Digits value used by the Plot class when drawing
-* annotated axis labels is the smallest value which results in all
-* adjacent labels being distinct.
-* TimeFrame
-* The Digits attribute is ignored when a TimeFrame formats a value
-* as a date and time string (see the Format attribute).
-*att--
-*/
-/* Clear the Digits value by setting it to -INT_MAX. */
-astMAKE_CLEAR(Frame,Digits,digits,-INT_MAX)
-
-/* Supply a default of 7 digits if no value has been set. */
-astMAKE_GET(Frame,Digits,int,0,( ( this->digits != -INT_MAX ) ? this->digits :
- 7 ))
-
-/* Constrain the Digits value being set to be at least 1. */
-astMAKE_SET(Frame,Digits,int,digits,( value > 1 ? value : 1 ))
-
-/* The Digits value is set if it is not -INT_MAX. */
-astMAKE_TEST(Frame,Digits,( this->digits != -INT_MAX ))
-
-/*
-*att++
-* Name:
-* MatchEnd
-
-* Purpose:
-* Match trailing axes?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute is a boolean value which controls how a Frame
-c behaves when it is used (by astFindFrame) as a template to match
-f behaves when it is used (by AST_FINDFRAME) as a template to match
-* another (target) Frame. It applies only in the case where a
-* match occurs between template and target Frames with different
-* numbers of axes.
-*
-* If the MatchEnd value of the template Frame is zero, then the
-* axes which occur first in the target Frame will be matched and
-* any trailing axes (in either the target or template) will be
-* disregarded. If it is non-zero, the final axes in each Frame
-* will be matched and any un-matched leading axes will be
-* disregarded instead.
-
-* Applicability:
-* Frame
-* The default MatchEnd value for a Frame is zero, so that
-* trailing axes are disregarded.
-* FrameSet
-* The MatchEnd attribute of a FrameSet is the same as that of
-* its current Frame (as specified by the Current attribute).
-*att--
-*/
-/* Clear the MatchEnd value by setting it to -INT_MAX. */
-astMAKE_CLEAR(Frame,MatchEnd,match_end,-INT_MAX)
-
-/* Supply a default of 0 if no MatchEnd value has been set. */
-astMAKE_GET(Frame,MatchEnd,int,0,( ( this->match_end != -INT_MAX ) ?
- this->match_end : 0 ))
-
-/* Set a MatchEnd value of 1 if any non-zero value is supplied. */
-astMAKE_SET(Frame,MatchEnd,int,match_end,( value != 0 ))
-
-/* The MatchEnd value is set if it is not -INT_MAX. */
-astMAKE_TEST(Frame,MatchEnd,( this->match_end != -INT_MAX ))
-
-/*
-*att++
-* Name:
-* MaxAxes
-
-* Purpose:
-* Maximum number of Frame axes to match.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer.
-
-* Description:
-* This attribute controls how a Frame behaves when it is used (by
-c astFindFrame) as a template to match another (target) Frame. It
-f AST_FINDFRAME) as a template to match another (target) Frame. It
-* specifies the maximum number of axes that the target Frame may
-* have in order to match the template.
-*
-* Normally, this value will equal the number of Frame axes, so
-* that a template Frame will only match another Frame with the
-* same number of axes as itself. By setting a different value,
-* however, the matching process may be used to identify Frames
-* with specified numbers of axes.
-
-* Applicability:
-* Frame
-* The default MaxAxes value for a Frame is equal to the number
-* of Frame axes (Naxes attribute).
-* CmpFrame
-* The MaxAxes attribute of a CmpFrame defaults to a large number
-* (1000000) which is much larger than any likely number of axes in
-* a Frame. Combined with the MinAxes default of zero (for a
-* CmpFrame), this means that the default behaviour for a CmpFrame
-* is to match any target Frame that consists of a subset of the
-* axes in the template CmpFrame. To change this so that a CmpFrame
-* will only match Frames that have the same number of axes, you
-* should set the CmpFrame MaxAxes and MinAxes attributes to the
-* number of axes in the CmpFrame.
-* FrameSet
-* The MaxAxes attribute of a FrameSet is the same as that of
-* its current Frame (as specified by the Current attribute).
-
-* Notes:
-* - When setting a MaxAxes value, the value of the MinAxes
-* attribute may also be silently changed so that it remains
-* consistent with (i.e. does not exceed) the new value. The
-* default MaxAxes value may also be reduced to remain consistent
-* with the MinAxes value.
-* - If a template Frame is used to match a target with a different
-* number of axes, the MatchEnd attribute of the template is used
-* to determine how the individual axes of each Frame should match.
-*att--
-*/
-/* Clear the MaxAxes value by setting it to -INT_MAX. */
-astMAKE_CLEAR(Frame,MaxAxes,max_axes,-INT_MAX)
-
-/* Use the DefaultMaxAxes and ConsistentMaxAxes functions (defined earlier) for
- the Get and Set operations to ensure that MinAxes and MaxAxes values remain
- consistent. */
-astMAKE_GET(Frame,MaxAxes,int,0,DefaultMaxAxes( this, status ))
-astMAKE_SET(Frame,MaxAxes,int,max_axes,ConsistentMaxAxes( this, value, status ))
-
-/* The MaxAxes value is set if it is not -INT_MAX. */
-astMAKE_TEST(Frame,MaxAxes,( this->max_axes != -INT_MAX ))
-
-/*
-*att++
-* Name:
-* MinAxes
-
-* Purpose:
-* Minimum number of Frame axes to match.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer.
-
-* Description:
-* This attribute controls how a Frame behaves when it is used (by
-c astFindFrame) as a template to match another (target) Frame. It
-f AST_FINDFRAME) as a template to match another (target) Frame. It
-* specifies the minimum number of axes that the target Frame may
-* have in order to match the template.
-*
-* Normally, this value will equal the number of Frame axes, so
-* that a template Frame will only match another Frame with the
-* same number of axes as itself. By setting a different value,
-* however, the matching process may be used to identify Frames
-* with specified numbers of axes.
-
-* Applicability:
-* Frame
-* The default MinAxes value for a Frame is equal to the number
-* of Frame axes (Naxes attribute).
-* CmpFrame
-* The MinAxes attribute of a CmpFrame defaults to zero. Combined
-* with the MaxAxes default of 1000000 (for a CmpFrame), this means
-* that the default behaviour for a CmpFrame is to match any target
-* Frame that consists of a subset of the axes in the template
-* CmpFrame. To change this so that a CmpFrame will only match Frames
-* that have the same number of axes, you should set the CmpFrame
-* MinAxes and MaxAxes attributes to the number of axes in the CmpFrame.
-* FrameSet
-* The MinAxes attribute of a FrameSet is the same as that of
-* its current Frame (as specified by the Current attribute).
-
-* Notes:
-* - When setting a MinAxes value, the value of the MaxAxes
-* attribute may also be silently changed so that it remains
-* consistent with (i.e. is not less than) the new value. The
-* default MinAxes value may also be reduced to remain consistent
-* with the MaxAxes value.
-* - If a template Frame is used to match a target with a different
-* number of axes, the MatchEnd attribute of the template is used
-* to determine how the individual axes of each Frame should match.
-*att--
-*/
-/* Clear the MinAxes value by setting it to -INT_MAX. */
-astMAKE_CLEAR(Frame,MinAxes,min_axes,-INT_MAX)
-
-/* Use the DefaultMinAxes and ConsistentMinAxes functions (defined earlier) for
- the Get and Set operations to ensure that MinAxes and MaxAxes values remain
- consistent. */
-astMAKE_GET(Frame,MinAxes,int,0,DefaultMinAxes( this, status ))
-astMAKE_SET(Frame,MinAxes,int,min_axes,ConsistentMinAxes( this, value, status ))
-
-/* The MinAxes value is set if it is not -INT_MAX. */
-astMAKE_TEST(Frame,MinAxes,( this->min_axes != -INT_MAX ))
-
-/*
-*att++
-* Name:
-* Domain
-
-* Purpose:
-* Coordinate system domain.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute contains a string which identifies the physical
-* domain of the coordinate system that a Frame describes.
-*
-* The Domain attribute also controls how a Frame behaves when it is
-c used (by astFindFrame) as a template to match another (target)
-f used (by AST_FINDFRAME) as a template to match another (target)
-* Frame. It does this by specifying the Domain that the target
-* Frame should have in order to match the template. If the Domain
-* value in the template Frame is set, then only targets with the
-* same Domain value will be matched. If the template's Domain
-* value is not set, however, then the target's Domain will be
-* ignored.
-
-* Applicability:
-* Frame
-* The default Domain value supplied by the Frame class is an
-* empty string.
-* SkyFrame
-* The SkyFrame class re-defines the default Domain value to be
-* "SKY".
-* CmpFrame
-* The CmpFrame class re-defines the default Domain value to be
-* of the form "<dom1>-<dom2>", where <dom1> and <dom2> are the
-* Domains of the two component Frames. If both these Domains are
-* blank, then the string "CMP" is used as the default Domain name.
-* FrameSet
-* The Domain attribute of a FrameSet is the same as that of its
-* current Frame (as specified by the Current attribute).
-* SpecFrame
-* The SpecFrame class re-defines the default Domain value to be
-* "SPECTRUM".
-* DSBSpecFrame
-* The DSBSpecFrame class re-defines the default Domain value to be
-* "DSBSPECTRUM".
-* FluxFrame
-* The FluxFrame class re-defines the default Domain value to be
-* "FLUX".
-* SpecFluxFrame
-* The FluxFrame class re-defines the default Domain value to be
-* "SPECTRUM-FLUX".
-* TimeFrame
-* The TimeFrame class re-defines the default Domain value to be
-* "TIME".
-
-* Notes:
-* - All Domain values are converted to upper case and white space
-* is removed before use.
-*att--
-*/
-/* Clear the Domain value by freeing the allocated memory and
- assigning a NULL pointer. */
-astMAKE_CLEAR(Frame,Domain,domain,astFree( this->domain ))
-
-/* If the Domain value is not set, supply a default in the form of a
- pointer to the constant string "". */
-astMAKE_GET(Frame,Domain,const char *,NULL,( this->domain ? this->domain :
- "" ))
-
-/* Set a Domain value by freeing any previously allocated memory,
- allocating new memory, storing the string, removing white space,
- converting to upper case and saving the pointer to the cleaned
- copy. */
-astMAKE_SET(Frame,Domain,const char *,domain,CleanDomain(
- astStore( this->domain,
- value, strlen( value ) + (size_t) 1 ), status ))
-
-/* The Domain value is set if the pointer to it is not NULL. */
-astMAKE_TEST(Frame,Domain,( this->domain != NULL ))
-
-/*
-*att++
-* Name:
-* Permute
-
-* Purpose:
-* Permute axis order?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute is a boolean value which controls how a Frame
-c behaves when it is used (by astFindFrame) as a template to match
-f behaves when it is used (by AST_FINDFRAME) as a template to match
-* another (target) Frame. It specifies whether the axis order of
-* the target Frame may be permuted in order to obtain a match.
-*
-* If the template's Permute value is zero, it will match a target
-* only if it can do so without changing the order of its
-* axes. Otherwise, it will attempt to permute the target's axes as
-* necessary.
-*
-* The default value is 1, so that axis permutation will be attempted.
-
-* Applicability:
-* Frame
-* All Frames have this attribute. However, the Frame class
-* effectively ignores this attribute and behaves as if it has
-* the value 1. This is because the axes of a basic Frame are
-* not distinguishable and will always match any other Frame
-* whatever their order.
-* SkyFrame
-* Unlike a basic Frame, the SkyFrame class makes use of this
-* attribute.
-* FrameSet
-* The Permute attribute of a FrameSet is the same as that of
-* its current Frame (as specified by the Current attribute).
-*att--
-*/
-/* Clear the Permute value by setting it to -INT_MAX. */
-astMAKE_CLEAR(Frame,Permute,permute,-INT_MAX)
-
-/* Supply a default of 1 if no Permute value has been set. */
-astMAKE_GET(Frame,Permute,int,0,( ( this->permute != -INT_MAX ) ?
- this->permute : 1 ))
-
-/* Set a Permute value of 1 if any non-zero value is supplied. */
-astMAKE_SET(Frame,Permute,int,permute,( value != 0 ))
-
-/* The Permute value is set if it is not -INT_MAX. */
-astMAKE_TEST(Frame,Permute,( this->permute != -INT_MAX ))
-
-/*
-*att++
-* Name:
-* PreserveAxes
-
-* Purpose:
-* Preserve axes?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute controls how a Frame behaves when it is used (by
-c astFindFrame) as a template to match another (target) Frame. It
-f AST_FINDFRAME) as a template to match another (target) Frame. It
-* determines which axes appear (and in what order) in the "result"
-* Frame produced.
-*
-* If PreserveAxes is zero in the template Frame, then the result
-* Frame will have the same number (and order) of axes as the
-* template. If it is non-zero, however, the axes of the target
-* Frame will be preserved, so that the result Frame will have the
-* same number (and order) of axes as the target.
-*
-* The default value is zero, so that target axes are not preserved
-* and the result Frame resembles the template.
-
-* Applicability:
-* Frame
-* All Frames have this attribute.
-* FrameSet
-* The PreserveAxes attribute of a FrameSet is the same as that
-* of its current Frame (as specified by the Current attribute).
-*att--
-*/
-/* Clear the PreserveAxes value by setting it to -INT_MAX. */
-astMAKE_CLEAR(Frame,PreserveAxes,preserve_axes,-INT_MAX)
-
-/* Supply a default of 0 if no PreserveAxes value has been set. */
-astMAKE_GET(Frame,PreserveAxes,int,0,( ( this->preserve_axes != -INT_MAX ) ?
- this->preserve_axes : 0 ))
-
-/* Set a PreserveAxes value of 1 if any non-zero value is supplied. */
-astMAKE_SET(Frame,PreserveAxes,int,preserve_axes,( value != 0 ))
-
-/* The PreserveAxes value is set if it is not -INT_MAX. */
-astMAKE_TEST(Frame,PreserveAxes,( this->preserve_axes != -INT_MAX ))
-
-/*
-*att++
-* Name:
-* AlignSystem
-
-* Purpose:
-* Coordinate system in which to align the Frame.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute controls how a Frame behaves when it is used (by
-c astFindFrame or astConvert) as a template to match another (target)
-f AST_FINDFRAME or AST_CONVERT) as a template to match another (target)
-* Frame. It identifies the coordinate system in which the two Frames
-* will be aligned by the match.
-*
-* The values which may be assigned to this attribute, and its default
-* value, depend on the class of Frame and are described in the
-* "Applicability" section below. In general, the AlignSystem attribute
-* will accept any of the values which may be assigned to the System
-* attribute.
-*
-c The Mapping returned by AST_FINDFRAME or AST_CONVERT will use the
-f The Mapping returned by astFindFrame or astConvert will use the
-* coordinate system specified by the AlignSystem attribute as an
-* intermediate coordinate system. The total returned Mapping will first
-* map positions from the first Frame into this intermediate coordinate
-* system, using the attributes of the first Frame. It will then map
-* these positions from the intermediate coordinate system into the
-* second Frame, using the attributes of the second Frame.
-
-* Applicability:
-* Frame
-* The AlignSystem attribute for a basic Frame always equals "Cartesian",
-* and may not be altered.
-* CmpFrame
-* The AlignSystem attribute for a CmpFrame always equals "Compound",
-* and may not be altered.
-* FrameSet
-* The AlignSystem attribute of a FrameSet is the same as that of its
-* current Frame (as specified by the Current attribute).
-* SkyFrame
-* The default AlignSystem attribute for a SkyFrame is "ICRS".
-* SpecFrame
-* The default AlignSystem attribute for a SpecFrame is "Wave"
-* (wavelength).
-* TimeFrame
-* The default AlignSystem attribute for a TimeFrame is "MJD".
-*att--
-*/
-/* Clear the AlignSystem value by setting it to AST__BADSYSTEM. */
-astMAKE_CLEAR(Frame,AlignSystem,alignsystem,AST__BADSYSTEM)
-
-/* Provide a default AlignSystem of AST__CART. */
-astMAKE_GET(Frame,AlignSystem,AstSystemType,AST__BADSYSTEM,(
- ( this->alignsystem == AST__BADSYSTEM ) ? AST__CART : this->alignsystem ) )
-
-/* Validate the AlignSystem value being set and retain the original if the
- supplied value is not recognized. */
-astMAKE_SET(Frame,AlignSystem,AstSystemType,alignsystem,(
- (astValidateSystem( this, value, "astSetAlignSystem" ) != AST__BADSYSTEM) ?
- value : this->alignsystem ))
-
-/* The AlignSystem value is set if it is not AST__BADSYSTEM. */
-astMAKE_TEST(Frame,AlignSystem,( this->alignsystem != AST__BADSYSTEM ))
-
-/*
-*att++
-* Name:
-* System
-
-* Purpose:
-* Coordinate system used to describe positions within the domain
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* In general it is possible for positions within a given physical
-* domain to be described using one of several different coordinate
-* systems. For instance, the SkyFrame class can use galactic
-* coordinates, equatorial coordinates, etc, to describe positions on
-* the sky. As another example, the SpecFrame class can use frequency,
-* wavelength, velocity, etc, to describe a position within an
-* electromagnetic spectrum. The System attribute identifies the particular
-* coordinate system represented by a Frame. Each class of Frame
-* defines a set of acceptable values for this attribute, as listed
-* below (all are case insensitive). Where more than one alternative
-* System value is shown, the first of will be returned when an
-* enquiry is made.
-
-* Applicability:
-* Frame
-* The System attribute for a basic Frame always equals "Cartesian",
-* and may not be altered.
-* CmpFrame
-* The System attribute for a CmpFrame always equals "Compound",
-* and may not be altered. In addition, the CmpFrame class allows
-* the System attribute to be referenced for a component Frame by
-* including the index of an axis within the required component
-* Frame. For instance, "System(3)" refers to the System attribute
-* of the component Frame which includes axis 3 of the CmpFrame.
-* FrameSet
-* The System attribute of a FrameSet is the same as that of its
-* current Frame (as specified by the Current attribute).
-* SkyFrame
-* The SkyFrame class supports the following System values and
-* associated celestial coordinate systems:
-*
-* - "AZEL": Horizon coordinates. The longitude axis is azimuth
-* such that geographic north has an azimuth of zero and geographic
-* east has an azimuth of +PI/2 radians. The zenith has elevation
-* +PI/2. When converting to and from other celestial coordinate
-* systems, no corrections are applied for atmospheric refraction
-* or polar motion (however, a correction for diurnal aberattion is
-* applied). Note, unlike most other
-* celestial coordinate systems, this system is right handed. Also,
-* unlike other SkyFrame systems, the AzEl system is sensitive to
-* the timescale in which the Epoch value is supplied. This is
-* because of the gross diurnal rotation which this system undergoes,
-* causing a small change in time to translate to a large rotation.
-* When converting to or from an AzEl system, the Epoch value for
-* both source and destination SkyFrames should be supplied in the
-* TDB timescale. The difference between TDB and TT is between 1
-* and 2 milliseconds, and so a TT value can usually be supplied in
-* place of a TDB value. The TT timescale is related to TAI via
-* TT = TAI + 32.184 seconds.
-*
-* - "ECLIPTIC": Ecliptic coordinates (IAU 1980), referred to the
-* ecliptic and mean equinox specified by the qualifying Equinox
-* value.
-*
-* - "FK4": The old FK4 (barycentric) equatorial coordinate system,
-* which should be qualified by an Equinox value. The underlying
-* model on which this is based is non-inertial and rotates slowly
-* with time, so for accurate work FK4 coordinate systems should
-* also be qualified by an Epoch value.
-*
-* - "FK4-NO-E" or "FK4_NO_E": The old FK4 (barycentric) equatorial
-* system but without the "E-terms of aberration" (e.g. some radio
-* catalogues). This coordinate system should also be qualified by
-* both an Equinox and an Epoch value.
-*
-* - "FK5" or "EQUATORIAL": The modern FK5 (barycentric) equatorial
-* coordinate system. This should be qualified by an Equinox value.
-*
-* - "GALACTIC": Galactic coordinates (IAU 1958).
-*
-* - "GAPPT", "GEOCENTRIC" or "APPARENT": The geocentric apparent
-* equatorial coordinate system, which gives the apparent positions
-* of sources relative to the true plane of the Earth's equator and
-* the equinox (the coordinate origin) at a time specified by the
-* qualifying Epoch value. (Note that no Equinox is needed to
-* qualify this coordinate system because no model "mean equinox"
-* is involved.) These coordinates give the apparent right
-* ascension and declination of a source for a specified date of
-* observation, and therefore form an approximate basis for
-* pointing a telescope. Note, however, that they are applicable to
-* a fictitious observer at the Earth's centre, and therefore
-* ignore such effects as atmospheric refraction and the (normally
-* much smaller) aberration of light due to the rotational velocity
-* of the Earth's surface. Geocentric apparent coordinates are
-* derived from the standard FK5 (J2000.0) barycentric coordinates
-* by taking account of the gravitational deflection of light by
-* the Sun (usually small), the aberration of light caused by the
-* motion of the Earth's centre with respect to the barycentre
-* (larger), and the precession and nutation of the Earth's spin
-* axis (normally larger still).
-*
-* - "HELIOECLIPTIC": Ecliptic coordinates (IAU 1980), referred to the
-* ecliptic and mean equinox of J2000.0, in which an offset is added to
-* the longitude value which results in the centre of the sun being at
-* zero longitude at the date given by the Epoch attribute. Attempts to
-* set a value for the Equinox attribute will be ignored, since this
-* system is always referred to J2000.0.
-*
-* - "ICRS": The Internation Celestial Reference System, realised
-* through the Hipparcos catalogue. Whilst not an equatorial system
-* by definition, the ICRS is very close to the FK5 (J2000) system
-* and is usually treated as an equatorial system. The distinction
-* between ICRS and FK5 (J2000) only becomes important when accuracies
-* of 50 milli-arcseconds or better are required. ICRS need not be
-* qualified by an Equinox value.
-*
-* - "J2000": An equatorial coordinate system based on the mean
-* dynamical equator and equinox of the J2000 epoch. The dynamical
-* equator and equinox differ slightly from those used by the FK5
-* model, and so a "J2000" SkyFrame will differ slightly from an
-* "FK5(Equinox=J2000)" SkyFrame. The J2000 System need not be
-* qualified by an Equinox value
-*
-* - "SUPERGALACTIC": De Vaucouleurs Supergalactic coordinates.
-*
-* - "UNKNOWN": Any other general spherical coordinate system. No
-* Mapping can be created between a pair of SkyFrames if either of the
-* SkyFrames has System set to "Unknown".
-*
-* Currently, the default System value is "ICRS". However, this
-* default may change in future as new astrometric standards
-* evolve. The intention is to track the most modern appropriate
-* standard. For this reason, you should use the default only if
-* this is what you intend (and can tolerate any associated slight
-* change in future). If you intend to use the ICRS system
-* indefinitely, then you should specify it explicitly.
-* SpecFrame
-* The SpecFrame class supports the following System values and
-* associated spectral coordinate systems (the default is "WAVE" -
-* wavelength). They are all defined in FITS-WCS paper III:
-*
-* - "FREQ": Frequency (GHz)
-* - "ENER" or "ENERGY": Energy (J)
-* - "WAVN" or "WAVENUM": Wave-number (1/m)
-* - "WAVE" or "WAVELEN": Vacuum wave-length (Angstrom)
-* - "AWAV" or "AIRWAVE": Wave-length in air (Angstrom)
-* - "VRAD" or "VRADIO": Radio velocity (km/s)
-* - "VOPT" or "VOPTICAL": Optical velocity (km/s)
-* - "ZOPT" or "REDSHIFT": Redshift (dimensionless)
-* - "BETA": Beta factor (dimensionless)
-* - "VELO" or "VREL": Apparent radial ("relativistic") velocity (km/s)
-*
-* The default value for the Unit attribute for each system is shown
-* in parentheses. Note that the default value for the ActiveUnit flag
-c is non-zero
-f is .TRUE.
-* for a SpecFrame, meaning that changes to the Unit attribute for
-* a SpecFrame will result in the SpecFrame being re-mapped within
-* its enclosing FrameSet in order to reflect the change in units
-c (see astSetActiveUnit function for further information).
-f (see AST_SETACTIVEUNIT routine for further information).
-* TimeFrame
-* The TimeFrame class supports the following System values and
-* associated coordinate systems (the default is "MJD"):
-*
-* - "MJD": Modified Julian Date (d)
-* - "JD": Julian Date (d)
-* - "JEPOCH": Julian epoch (yr)
-* - "BEPOCH": Besselian (yr)
-*
-* The default value for the Unit attribute for each system is shown
-* in parentheses. Strictly, these systems should not allow changes
-* to be made to the units. For instance, the usual definition of
-* "MJD" and "JD" include the statement that the values will be in
-* units of days. However, AST does allow the use of other units
-* with all the above supported systems (except BEPOCH), on the
-* understanding that conversion to the "correct" units involves
-* nothing more than a simple scaling (1 yr = 365.25 d, 1 d = 24 h,
-* 1 h = 60 min, 1 min = 60 s). Besselian epoch values are defined
-* in terms of tropical years of 365.2422 days, rather than the
-* usual Julian year of 365.25 days. Therefore, to avoid any
-* confusion, the Unit attribute is automatically cleared to "yr" when
-* a System value of BEPOCH System is selected, and an error is
-* reported if any attempt is subsequently made to change the Unit
-* attribute.
-*
-* Note that the default value for the ActiveUnit flag
-c is non-zero
-f is .TRUE.
-* for a TimeFrame, meaning that changes to the Unit attribute for
-* a TimeFrame will result in the TimeFrame being re-mapped within
-* its enclosing FrameSet in order to reflect the change in units
-c (see astSetActiveUnit function for further information).
-f (see AST_SETACTIVEUNIT routine for further information).
-* FluxFrame
-* The FluxFrame class supports the following System values and
-* associated systems for measuring observed value:
-*
-* - "FLXDN": Flux per unit frequency (W/m^2/Hz)
-* - "FLXDNW": Flux per unit wavelength (W/m^2/Angstrom)
-* - "SFCBR": Surface brightness in frequency units (W/m^2/Hz/arcmin**2)
-* - "SFCBRW": Surface brightness in wavelength units (W/m^2/Angstrom/arcmin**2)
-*
-* The above lists specified the default units for each System. If an
-* explicit value is set for the Unit attribute but no value is set
-* for System, then the default System value is determined by the Unit
-* string (if the units are not appropriate for describing any of the
-* supported Systems then an error will be reported when an attempt is
-* made to access the System value). If no value has been specified for
-* either Unit or System, then System=FLXDN and Unit=W/m^2/Hz are
-* used.
-*att--
-*/
-/* Clear the System value by setting it to AST__BADSYSTEM. */
-astMAKE_CLEAR(Frame,System,system,AST__BADSYSTEM)
-
-/* Provide a default coordinate system of AST__CART. */
-astMAKE_GET(Frame,System,AstSystemType,AST__BADSYSTEM,(
- ( this->system == AST__BADSYSTEM ) ? AST__CART : this->system ) )
-
-/* Validate the System value being set and retain the original if the
- supplied value is not recognized. */
-astMAKE_SET(Frame,System,AstSystemType,system,(
- (astValidateSystem( this, value, "astSetSystem" ) != AST__BADSYSTEM) ?
- value : this->system ))
-
-/* The System value is set if it is not AST__BADSYSTEM. */
-astMAKE_TEST(Frame,System,( this->system != AST__BADSYSTEM ))
-
-/*
-*att++
-* Name:
-* Title
-
-* Purpose:
-* Frame title.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute holds a string which is used as a title in (e.g.)
-* graphical output to describe the coordinate system which a Frame
-* represents. Examples might be "Detector Coordinates" or
-* "Galactic Coordinates".
-*
-* If a Title value has not been set for a Frame, then a suitable
-* default is supplied, depending on the class of the Frame.
-
-* Applicability:
-* Frame
-* The default supplied by the Frame class is "<n>-d coordinate
-* system", where <n> is the number of Frame axes (Naxes
-* attribute).
-* CmpFrame
-* The CmpFrame class re-defines the default Title value to be
-* "<n>-d compound coordinate system", where <n> is the number
-* of CmpFrame axes (Naxes attribute).
-* FrameSet
-* The Title attribute of a FrameSet is the same as that of its
-* current Frame (as specified by the Current attribute).
-
-* Notes:
-* - A Frame's Title is intended purely for interpretation by human
-* readers and not by software.
-*att--
-*/
-/* Clear the Title value by freeing the allocated memory and assigning
- a NULL pointer. */
-astMAKE_CLEAR(Frame,Title,title,astFree( this->title ))
-
-/* If the Title value is not set, write a default based on the number of Frame
- axes into the static "title_buff" buffer, and return a pointer to this
- buffer. */
-astMAKE_GET(Frame,Title,const char *,NULL,( this->title ?
- this->title : GetDefaultTitle( this, status ) ))
-
-/* Set a Title value by freeing any previously allocated memory, allocating
- new memory, storing the string and saving the pointer to the copy. */
-astMAKE_SET(Frame,Title,const char *,title,astStore( this->title, value,
- strlen( value ) + (size_t) 1 ))
-
-/* The Title value is set if the pointer to it is not NULL. */
-astMAKE_TEST(Frame,Title,( this->title != NULL ))
-
-/*
-*att++
-* Name:
-* ObsLat
-
-* Purpose:
-* The geodetic latitude of the observer
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute specifies the geodetic latitude of the observer, in
-* degrees, relative to the IAU 1976 reference ellipsoid. The basic Frame
-* class makes no use of this attribute, but specialised subclasses of
-* Frame may use it. For instance, the SpecFrame, SkyFrame and TimeFrame
-* classes use it. The default value is zero.
-*
-* The value is stored internally in radians, but is converted to and
-* from a degrees string for access. Some example input formats are:
-* "22:19:23.2", "22 19 23.2", "22:19.387", "22.32311", "N22.32311",
-* "-45.6", "S45.6". As indicated, the sign of the latitude can
-* optionally be indicated using characters "N" and "S" in place of the
-* usual "+" and "-". When converting the stored value to a string, the
-* format "[s]dd:mm:ss.ss" is used, when "[s]" is "N" or "S".
-
-* Applicability:
-* Frame
-* All Frames have this attribute.
-* SpecFrame
-* Together with the ObsLon, Epoch, RefRA and RefDec attributes,
-* it defines the Doppler shift introduced by the observers diurnal
-* motion around the earths axis, which is needed when converting to
-* or from the topocentric standard of rest. The maximum velocity
-* error which can be caused by an incorrect value is 0.5 km/s. The
-* default value for the attribute is zero.
-* TimeFrame
-* Together with the ObsLon attribute, it is used when converting
-* between certain time scales (TDB, TCB, LMST, LAST)
-
-*att--
-*/
-/* The geodetic latitude of the observer (radians). Clear the ObsLat value by
- setting it to AST__BAD, returning zero as the default value. Any value is
- acceptable. */
-astMAKE_CLEAR(Frame,ObsLat,obslat,AST__BAD)
-astMAKE_GET(Frame,ObsLat,double,0.0,((this->obslat!=AST__BAD)?this->obslat:0.0))
-astMAKE_SET(Frame,ObsLat,double,obslat,value)
-astMAKE_TEST(Frame,ObsLat,(this->obslat!=AST__BAD))
-
-
-/*
-*att++
-* Name:
-* ObsAlt
-
-* Purpose:
-* The geodetic altitude of the observer
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute specifies the geodetic altitude of the observer, in
-* metres, relative to the IAU 1976 reference ellipsoid. The basic Frame
-* class makes no use of this attribute, but specialised subclasses of
-* Frame may use it. For instance, the SpecFrame, SkyFrame and TimeFrame
-* classes use it. The default value is zero.
-
-* Applicability:
-* Frame
-* All Frames have this attribute.
-* SpecFrame
-* Together with the ObsLon, Epoch, RefRA and RefDec attributes,
-* it defines the Doppler shift introduced by the observers diurnal
-* motion around the earths axis, which is needed when converting to
-* or from the topocentric standard of rest. The maximum velocity
-* error which can be caused by an incorrect value is 0.5 km/s. The
-* default value for the attribute is zero.
-* TimeFrame
-* Together with the ObsLon attribute, it is used when converting
-* between certain time scales (TDB, TCB, LMST, LAST)
-
-*att--
-*/
-/* The geodetic altitude of the observer (metres). Clear the ObsAlt value by
- setting it to AST__BAD, returning zero as the default value. Any value is
- acceptable. */
-astMAKE_CLEAR(Frame,ObsAlt,obsalt,AST__BAD)
-astMAKE_GET(Frame,ObsAlt,double,0.0,((this->obsalt!=AST__BAD)?this->obsalt:0.0))
-astMAKE_SET(Frame,ObsAlt,double,obsalt,value)
-astMAKE_TEST(Frame,ObsAlt,(this->obsalt!=AST__BAD))
-
-
-/*
-*att++
-* Name:
-* ObsLon
-
-* Purpose:
-* The geodetic longitude of the observer
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute specifies the geodetic (or equivalently, geocentric)
-* longitude of the observer, in degrees, measured positive eastwards.
-* See also attribute ObsLat. The basic Frame class makes no use of this
-* attribute, but specialised subclasses of Frame may use it. For instance,
-* the SpecFrame, SkyFrame and TimeFrame classes use it. The default value
-* is zero.
-*
-* The value is stored internally in radians, but is converted to and
-* from a degrees string for access. Some example input formats are:
-* "155:19:23.2", "155 19 23.2", "155:19.387", "155.32311", "E155.32311",
-* "-204.67689", "W204.67689". As indicated, the sign of the longitude can
-* optionally be indicated using characters "E" and "W" in place of the
-* usual "+" and "-". When converting the stored value to a string, the
-* format "[s]ddd:mm:ss.ss" is used, when "[s]" is "E" or "W" and the
-* numerical value is chosen to be less than 180 degrees.
-
-* Applicability:
-* Frame
-* All Frames have this attribute.
-* SpecFrame
-* Together with the ObsLon, Epoch, RefRA and RefDec attributes,
-* it defines the Doppler shift introduced by the observers diurnal
-* motion around the earths axis, which is needed when converting to
-* or from the topocentric standard of rest. The maximum velocity
-* error which can be caused by an incorrect value is 0.5 km/s. The
-* default value for the attribute is zero.
-* TimeFrame
-* Together with the ObsLon attribute, it is used when converting
-* between certain time scales (TDB, TCB, LMST, LAST)
-
-*att--
-*/
-/* The geodetic longitude of the observer (radians). Clear the ObsLon value by
- setting it to AST__BAD, returning zero as the default value. Any value is
- acceptable. */
-astMAKE_CLEAR(Frame,ObsLon,obslon,AST__BAD)
-astMAKE_GET(Frame,ObsLon,double,0.0,((this->obslon!=AST__BAD)?this->obslon:0.0))
-astMAKE_SET(Frame,ObsLon,double,obslon,value)
-astMAKE_TEST(Frame,ObsLon,(this->obslon!=AST__BAD))
-
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for Frame objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for Frame objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstFrame *in; /* Pointer to input Frame */
- AstFrame *out; /* Pointer to output Frame */
- int axis; /* Loop counter for axes */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Frames. */
- in = (AstFrame *) objin;
- out = (AstFrame *) objout;
-
-/* For safety, first clear any references to the input memory from
- the output Frame. */
- out->axis = NULL;
- out->domain = NULL;
- out->perm = NULL;
- out->title = NULL;
-
-/* If necessary, allocate memory in the output Frame and store a copy of the
- input Title and Domain strings. */
- if ( in->title ) out->title = astStore( NULL, in->title,
- strlen( in->title ) + (size_t) 1 );
- if ( in->domain ) out->domain = astStore( NULL, in->domain,
- strlen( in->domain ) +
- (size_t) 1 );
-
-/* Allocate memory to hold the output Frame's Axis object pointers and its axis
- permutation array. */
- out->axis = astMalloc( sizeof( AstAxis * ) * (size_t) in->naxes );
- out->perm = astMalloc( sizeof( int ) * (size_t) in->naxes );
-
-/* Make a copy of each of the input Frame's Axis objects, storing the pointer
- to each new Axis in the memory just allocated. Also copy the axis
- permutation array. */
- if ( astOK ) {
- for ( axis = 0; axis < in->naxes; axis++ ) {
- out->axis[ axis ] = astCopy( in->axis[ axis ] );
- out->perm[ axis ] = in->perm[ axis ];
- }
-
-/* If an error occurred while copying the Axis objects, then loop through the
- resulting array of pointers and make sure that all of them are properly
- annulled. */
- if ( !astOK ) {
- for ( axis = 0; axis < in->naxes; axis++ ) {
- out->axis[ axis ] = astAnnul( out->axis[ axis ] );
- }
- }
- }
-
-/* If an error occurred, free any allocated memory. */
- if ( !astOK ) {
- out->axis = astFree( out->axis );
- out->domain = astFree( out->domain );
- out->perm = astFree( out->perm );
- out->title = astFree( out->title );
- }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for Frame objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for Frame objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstFrame *this; /* Pointer to Frame */
- int axis; /* Loop counter for Frame axes */
-
-/* Obtain a pointer to the Frame structure. */
- this = (AstFrame *) obj;
-
-/* Free the memory used for the Title and Domain strings if necessary. */
- this->title = astFree( this->title );
- this->domain = astFree( this->domain );
-
-/* If memory has been allocated to store pointers to the Frame's Axis objects,
- annul each of these pointers and then free the memory. */
- if ( this->axis ) {
- for ( axis = 0; axis < this->naxes; axis++ ) {
- this->axis[ axis ] = astAnnul( this->axis[ axis ] );
- }
- this->axis = astFree( this->axis );
- }
-
-/* Free memory used for the axis permutation array if necessary. */
- this->perm = astFree( this->perm );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for Frame objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the Frame class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the Frame whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define COMMENT_LEN 150 /* Maximum length of a comment string */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstAxis *ax; /* Pointer to Axis */
- AstFrame *cfrm; /* Pointer to FrameSet's current Frame */
- AstFrame *this; /* Pointer to the Frame structure */
- AstSystemType system; /* System code */
- char comment[ COMMENT_LEN + 1 ]; /* Buffer for comment strings */
- char key[ KEY_LEN + 1 ]; /* Buffer for keywords */
- const char *sval; /* Pointer to string value */
- const char *lab; /* Pointer to unit label */
- const int *perm; /* Pointer to axis permutation array */
- double dval; /* Double attibute value */
- int *invperm; /* Pointer to inverse permutation array */
- int axis; /* Loop counter for Frame axes */
- int bessyr; /* Format as Besselian years (else Julian) */
- int digits_set; /* Digits set explicitly for any axis? */
- int full; /* Full attribute value */
- int full_set; /* Full attribute set? */
- int helpful; /* Helpful to show value even if not set? */
- int isFrame; /* Is this a simple Frame? */
- int ival; /* Integer value */
- int naxes; /* Number of Frame axes */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Frame structure. */
- this = (AstFrame *) this_object;
-
-/* Determine the number of Frame axes and a pointer to the Frame's
- axis permutation array (using methods, to allow for any over-ride
- by a derived class). */
- naxes = astGetNaxes( this );
- perm = astGetPerm( this );
-
-/* Some default attribute values are not helpful for a simple Frame. Note
- if this is a simple Frame, or if it is a FrameSet with a simple Frame
- as its current Frame., or if it is a CmpFrame. */
- if( !strcmp( astGetClass( this ), "Frame" ) ) {
- isFrame = 1;
- } else if( astIsAFrameSet( this ) ) {
- cfrm = astGetFrame( (AstFrameSet *) this, AST__CURRENT );
- isFrame = !strcmp( astGetClass( cfrm ), "Frame" );
- cfrm = astAnnul( cfrm );
- } else if( astIsACmpFrame( this ) ) {
- isFrame = 1;
- } else {
- isFrame = 0;
- }
-
-/* Allocate memory to hold an inverse axis permutation array and
- generate this array from the forward permutation values. This will
- be used to determine which axis should be enquired about (using
- possibly over-ridden methods) to obtain data to correspond with a
- particular internal value (i.e. instance variable) relating to an
- axis. This step is needed so that the effect of any axis
- permutation can be un-done before values are written out, as output
- values are written by this function in un-permuted order. */
- invperm = astMalloc( sizeof( int ) * (size_t) naxes );
- if ( astOK ) {
- for ( axis = 0; axis < naxes; axis++ ) invperm[ perm[ axis ] ] = axis;
-
-/* Write out values representing the instance variables for the Frame
- class. Accompany these with appropriate comment strings, possibly
- depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* Title. */
-/* ------ */
- set = TestTitle( this, status );
- sval = set ? GetTitle( this, status ) : astGetTitle( this );
- astWriteString( channel, "Title", set, 1, sval,
- "Title of coordinate system" );
-
-/* Naxes. */
-/* ------ */
- set = ( this->naxes != 0 );
- ival = set ? this->naxes : naxes;
- astWriteInt( channel, "Naxes", set, 1, ival,
- "Number of coordinate axes" );
-
-/* Domain. */
-/* ------- */
- set = TestDomain( this, status );
- sval = set ? GetDomain( this, status ) : astGetDomain( this );
-
-/* Don't show an un-set Domain value if it is blank. */
- helpful = ( sval && *sval );
- astWriteString( channel, "Domain", set, helpful, sval,
- "Coordinate system domain" );
-
-/* Epoch. */
-/* ------ */
- set = TestEpoch( this, status );
- dval = set ? GetEpoch( this, status ) : astGetEpoch( this );
-
-/* Convert MJD to Besselian or Julian years, depending on the value. */
- bessyr = ( dval < palSlaEpj2d( 1984.0 ) );
- dval = bessyr ? palSlaEpb( dval ) : palSlaEpj( dval );
- astWriteDouble( channel, "Epoch", set, !isFrame, dval,
- bessyr ? "Besselian epoch of observation" :
- "Julian epoch of observation" );
-
-/* Label. */
-/* ------ */
-/* This, and some other, attributes are stored internally by the
- Frame's Axis objects, but are "re-packaged" by the Frame class to
- appear as Frame attributes. We treat them here like Frame
- attributes that are "un-set". There is a Label value for each Frame
- axis. */
- for ( axis = 0; axis < naxes; axis++ ) {
-
-/* The inverse axis permutation array is used to obtain the axis index
- for astGetLabel. This reverses the effect of the Frame's axis
- permutation array and yields a default value appropriate to the
- axis with internal index "axis". */
- sval = astGetLabel( this, invperm[ axis ] );
-
-/* Create keyword and comment strings appropriate to each axis
- (converting to 1-based axis numbering) and write out the Label
- values. */
- (void) sprintf( key, "Lbl%d", axis + 1 );
- (void) sprintf( comment, "Label for axis %d", axis + 1 );
- astWriteString( channel, key, 0, 1, sval, comment );
- }
-
-/* Symbol. */
-/* ------- */
-/* There is a Symbol value for each Frame axis. These are handled in
- the same way as the Label values. */
- for ( axis = 0; axis < naxes; axis++ ) {
- sval = astGetSymbol( this, invperm[ axis ] );
- (void) sprintf( key, "Sym%d", axis + 1 );
- (void) sprintf( comment, "Symbol for axis %d", axis + 1 );
- astWriteString( channel, key, 0, 0, sval, comment );
- }
-
-/* System. */
-/* ------- */
- set = TestSystem( this, status );
- system = set ? GetSystem( this, status ) : astGetSystem( this );
-
-/* If set, convert explicitly to a string for the external representation. */
- if ( set ) {
- if ( astOK ) {
- sval = astSystemString( this, system );
-
-/* Report an error if the System value was not recognised. */
- if ( !sval ) {
- astError( AST__SCSIN,
- "astWrite(%s): Corrupt %s contains invalid "
- "System identification code (%d).", status,
- astGetClass( channel ), astGetClass( this ),
- (int) system );
- }
- }
-
-/* If not set, use astGetAttrib which returns a string value using
- (possibly over-ridden) methods. */
- } else {
- sval = astGetAttrib( this_object, "system" );
- }
-
-/* Write out the value. */
- astWriteString( channel, "System", set, !isFrame, sval,
- "Coordinate system type" );
-
-/* AlignSystem. */
-/* ------------ */
- set = TestAlignSystem( this, status );
- system = set ? GetAlignSystem( this, status ) : astGetAlignSystem( this );
-
-/* If set, convert explicitly to a string for the external representation. */
- if ( set ) {
- if ( astOK ) {
- sval = astSystemString( this, system );
-
-/* Report an error if the AlignSystem value was not recognised. */
- if ( !sval ) {
- astError( AST__SCSIN,
- "astWrite(%s): Corrupt %s contains invalid "
- "AlignSystem identification code (%d).", status,
- astGetClass( channel ), astGetClass( this ),
- (int) system );
- }
- }
-
-/* If not set, use astGetAttrib which returns a string value using
- (possibly over-ridden) methods. */
- } else {
- sval = astGetAttrib( this_object, "alignsystem" );
- }
-
-/* Write out the value. */
- astWriteString( channel, "AlSys", set, 0, sval,
- "Alignment coordinate system" );
-
-/* Unit. */
-/* ----- */
-/* There is a Unit value for each axis. */
- for ( axis = 0; axis < naxes; axis++ ) {
- sval = astGetUnit( this, invperm[ axis ] );
-
-/* Get any label associated with the unit string. */
- lab = astUnitLabel( sval );
-
-/* Construct a comment including the above label (but only if it is not
- the same as the unit string) . */
- if( lab && strcmp( lab, sval ) ) {
- (void) sprintf( comment, "Units for axis %d (%s)", axis + 1, lab );
- } else {
- (void) sprintf( comment, "Units for axis %d", axis + 1 );
- }
-
-/* Show the Unit value if it is not blank. */
- helpful = ( sval && *sval );
- (void) sprintf( key, "Uni%d", axis + 1 );
- astWriteString( channel, key, 0, helpful, sval, comment );
- }
-
-/* Digits. */
-/* ------- */
-/* There is a Digits value for each axis... */
- digits_set = 0;
- for ( axis = 0; axis < naxes; axis++ ) {
-
-/* Obtain the axis Digits value, using the Frame's Digits value as a
- default. */
- ax = astGetAxis( this, invperm[ axis ] );
- set = astTestAxisDigits( ax );
- ival = set ? astGetAxisDigits( ax ) : astGetDigits( this );
- ax = astAnnul( ax );
-
-/* Show the value if it is set for the axis (i.e. if it differs from
- the default for the whole Frame) and note if any such value is
- set. */
- helpful = set;
- if ( set ) digits_set = 1;
- (void) sprintf( key, "Dig%d", axis + 1 );
- (void) sprintf( comment, "Individual precision for axis %d",
- axis + 1 );
- astWriteInt( channel, key, 0, helpful, ival, comment );
- }
-
-/* There is also a Digits value for the Frame as a whole... */
- set = TestDigits( this, status );
-
-/* Show the value (even if not set) if an explicit Digits value has
- been set for any axis (above). */
- helpful = digits_set;
- ival = set ? GetDigits( this, status ) : astGetDigits( this );
- astWriteInt( channel, "Digits", set, helpful, ival,
- "Default formatting precision" );
-
-/* Format. */
-/* ------- */
-/* There is a Format value for each axis. */
- for ( axis = 0; axis < naxes; axis++ ) {
- sval = astGetFormat( this, invperm[ axis ] );
-
-/* Show the Format value if the Digits value is set for an individual
- axis. */
- ax = astGetAxis( this, invperm[ axis ] );
- helpful = astTestAxisDigits( ax );
- ax = astAnnul( ax );
- (void) sprintf( key, "Fmt%d", axis + 1 );
- (void) sprintf( comment, "Format specifier for axis %d", axis + 1 );
- astWriteString( channel, key, 0, helpful, sval, comment );
- }
-
-/* Direction. */
-/* ---------- */
-/* There is a Direction value for each axis. */
- for ( axis = 0; axis < naxes; axis++ ) {
- ival = astGetDirection( this, invperm[ axis ] );
-
-/* Show the value if it is zero. */
- helpful = ( ival == 0 );
- (void) sprintf( key, "Dir%d", axis + 1 );
- (void) sprintf( comment,
- ival ? "Plot axis %d in conventional direction" :
- "Plot axis %d in reverse direction",
- axis + 1 );
- astWriteInt( channel, key, 0, helpful, ival, comment );
- }
-
-/* Bottom. */
-/* ------- */
-/* There is a Bottom value for each axis. */
- for ( axis = 0; axis < naxes; axis++ ) {
- dval = astGetBottom( this, invperm[ axis ] );
-
-/* Show the value if it is zero. */
- helpful = ( dval != -DBL_MAX );
- (void) sprintf( key, "Bot%d", axis + 1 );
- astWriteDouble( channel, key, 0, helpful, dval, "Lowest legal axis value");
- }
-
-/* Top. */
-/* ------- */
-/* There is a Top value for each axis. */
- for ( axis = 0; axis < naxes; axis++ ) {
- dval = astGetTop( this, invperm[ axis ] );
-
-/* Show the value if it is zero. */
- helpful = ( dval != DBL_MAX );
- (void) sprintf( key, "Top%d", axis + 1 );
- astWriteDouble( channel, key, 0, helpful, dval, "Highest legal axis value");
- }
-
-/* PreserveAxes. */
-/* ------------- */
- set = TestPreserveAxes( this, status );
- ival = set ? GetPreserveAxes( this, status ) : astGetPreserveAxes( this );
- astWriteInt( channel, "Presrv", set, 0, ival,
- ival ? "Preserve target axes" :
- "Don't preserve target axes" );
-
-/* Permute. */
-/* -------- */
- set = TestPermute( this, status );
- ival = set ? GetPermute( this, status ) : astGetPermute( this );
- astWriteInt( channel, "Permut", set, 0, ival,
- ival ? "Axes may be permuted to match" :
- "Axes may not be permuted match" );
-
-/* MinAxes. */
-/* -------- */
- set = TestMinAxes( this, status );
- ival = set ? GetMinAxes( this, status ) : astGetMinAxes( this );
- astWriteInt( channel, "MinAx", set, 0, ival,
- "Minimum number of axes to match" );
-
-/* MaxAxes. */
-/* -------- */
- set = TestMaxAxes( this, status );
- ival = set ? GetMaxAxes( this, status ) : astGetMaxAxes( this );
- astWriteInt( channel, "MaxAx", set, 0, ival,
- "Maximum number of axes to match" );
-
-/* MatchEnd. */
-/* --------- */
- set = TestMatchEnd( this, status );
- ival = set ? GetMatchEnd( this, status ) : astGetMatchEnd( this );
- astWriteInt( channel, "MchEnd", set, 0, ival,
- ival ? "Match final target axes" :
- "Match initial target axes" );
-
-/* ObsLat. */
-/* ------- */
- set = TestObsLat( this, status );
- dval = set ? GetObsLat( this, status ) : astGetObsLat( this );
- astWriteDouble( channel, "ObsLat", set, 0, dval, "Observers geodetic latitude (rads)" );
-
-/* ObsLon. */
-/* ------- */
- set = TestObsLon( this, status );
- dval = set ? GetObsLon( this, status ) : astGetObsLon( this );
- astWriteDouble( channel, "ObsLon", set, 0, dval, "Observers geodetic longitude (rads)" );
-
-/* ObsAlt. */
-/* ------- */
- set = TestObsAlt( this, status );
- dval = set ? GetObsAlt( this, status ) : astGetObsAlt( this );
- astWriteDouble( channel, "ObsAlt", set, 0, dval, "Observers geodetic altitude (metres)" );
-
-/* Dut1*/
-/* ---- */
- set = TestDut1( this, status );
- dval = set ? GetDut1( this, status ) : astGetDut1( this );
- astWriteDouble( channel, "Dut1", set, 0, dval, "UT1-UTC in seconds" );
-
-
-/* ActiveUnit. */
-/* ----------- */
- if( astTestActiveUnit( this ) ) {
- ival = astGetActiveUnit( this );
- astWriteInt( channel, "ActUnt", 1, 0, ival,
- ival ? "Unit strings affects alignment" :
- "Unit strings do not affect alignment" );
- }
-
-/* Axis permutation array. */
-/* ----------------------- */
-/* Write out the axis permutation array value for each axis,
- converting to 1-based axis numbering. */
- for ( axis = 0; axis < this->naxes; axis++ ) {
- set = ( this->perm[ axis ] != axis );
- ival = this->perm[ axis ] + 1;
-
-/* Create a keyword and comment appropriate to the axis. */
- (void) sprintf( key, "Prm%d", axis + 1 );
- if ( set ) {
- (void) sprintf( comment,
- "Axis %d permuted to use internal axis %d",
- axis + 1, ival );
- } else {
- (void) sprintf( comment, "Axis %d not permuted", axis + 1 );
- }
- astWriteInt( channel, key, set, 0, ival, comment );
- }
-
-/* Axis Objects. */
-/* ------------- */
-/* Temporarily set the Channel's Full attribute to -1 (unless it is +1
- to start with), remembering the original setting. This prevents any
- unnecessary "un-set" Axis values being output that would otherwise
- simply duplicate the Frame's attributes which have already been
- written. "Set" Axis values are still written, however (and all
- values are written if Full is set to 1). */
- full_set = astTestFull( channel );
- full = astGetFull( channel );
- if ( full <= 0 ) astSetFull( channel, -1 );
-
-/* Handle each axis in turn. */
- for ( axis = 0; axis < this->naxes; axis++ ) {
-
-/* Create a keyword and comment appropriate to the axis (converting to
- 1-based axis numbering). */
- (void) sprintf( key, "Ax%d", axis + 1 );
- (void) sprintf( comment, "Axis number %d", axis + 1 );
-
-/* Write out the axis Object description. */
- astWriteObject( channel, key, 1, 0, this->axis[ axis ], comment );
- }
-
-/* Restore the Channel's original Full attribute setting. */
- if ( full_set ) {
- astSetFull( channel, full );
- } else {
- astClearFull( channel );
- }
-
-/* Free the inverse axis permutation array. */
- invperm = astFree( invperm );
- }
-
-/* Undefine macros local to this function. */
-#undef COMMENT_LEN
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAFrame and astCheckFrame functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(Frame,Mapping)
-astMAKE_CHECK(Frame)
-
-AstFrame *astFrame_( int naxes, const char *options, int *status, ...) {
-/*
-*+
-* Name:
-* astFrame
-
-* Purpose:
-* Create a Frame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "frame.h"
-* AstFrame *astFrame( int naxes, const char *options, int *status, ... )
-
-* Class Membership:
-* Frame constructor.
-
-* Description:
-* This function creates a new Frame and optionally initialises its
-* attributes.
-
-* Parameters:
-* naxes
-* The number of Frame axes.
-* options
-* Pointer to a null terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new Frame. The syntax used is the same as
-* for the astSet method and may include "printf" format
-* specifiers identified by "%" symbols in the normal way.
-* status
-* Pointer to the inherited status variable.
-* ...
-* If the "options" string contains "%" format specifiers, then
-* an optional list of arguments may follow it in order to
-* supply values to be substituted for these specifiers. The
-* rules for supplying these are identical to those for the
-* astSet method (and for the C "printf" function).
-
-* Returned Value:
-* A pointer to the new Frame.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-
-* Implementation Notes:
-* - This function implements the basic Frame constructor which is
-* available via the protected interface to the Frame class. A
-* public interface is provided by the astFrameId_ function.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *new; /* Pointer to new Frame */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the Frame, allocating memory and initialising the virtual
- function table as well if necessary. */
- new = astInitFrame( NULL, sizeof( AstFrame ), !class_init, &class_vtab,
- "Frame", naxes );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new Frame's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new Frame. */
- return new;
-}
-
-AstFrame *astInitFrame_( void *mem, size_t size, int init,
- AstFrameVtab *vtab, const char *name,
- int naxes, int *status ) {
-/*
-*+
-* Name:
-* astInitFrame
-
-* Purpose:
-* Initialise a Frame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "frame.h"
-* AstFrame *astInitFrame( void *mem, size_t size, int init,
-* AstFrameVtab *vtab, const char *name,
-* int naxes )
-
-* Class Membership:
-* Frame initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new Frame object. It allocates memory (if necessary) to accommodate
-* the Frame plus any additional data associated with the derived class.
-* It then initialises a Frame structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a Frame at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the Frame is to be created. This
-* must be of sufficient size to accommodate the Frame data
-* (sizeof(Frame)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the Frame (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the Frame
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the Frame's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new Frame.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-* naxes
-* The number of Frame axes.
-
-* Returned Value:
-* A pointer to the new Frame.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstFrame *new; /* Pointer to new Frame */
- int axis; /* Loop counter for Frame axes */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitFrameVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Check the number of axes for validity, reporting an error if necessary. */
- if ( naxes < 0 ) {
- astError( AST__NAXIN, "astInitFrame(%s): Number of axes (%d) is "
- "invalid - this number should not be negative.", status, name, naxes );
-
-/* Initialise a Mapping structure (the parent class) as the first
- component within the Frame structure, allocating memory if
- necessary. Set the number of input/output coordinates to zero (the
- astGetNin and astGetNout methods are over-ridden by the Frame class
- to provide values for these that are equal to the number of Frame
- axes). */
- } else {
- new = (AstFrame *) astInitMapping( mem, size, 0,
- (AstMappingVtab *) vtab, name,
- 0, 0, 1, 1 );
-
- if ( astOK ) {
-
-/* Initialise the Frame data. */
-/* ----------------------------- */
-/* Set the number of Frame axes. */
- new->naxes = naxes;
-
-/* Initialise all attributes to their "undefined" values. */
- new->digits = -INT_MAX;
- new->domain = NULL;
- new->epoch = AST__BAD;
- new->match_end = -INT_MAX;
- new->max_axes = -INT_MAX;
- new->min_axes = -INT_MAX;
- new->permute = -INT_MAX;
- new->preserve_axes = -INT_MAX;
- new->title = NULL;
- new->system = AST__BADSYSTEM;
- new->alignsystem = AST__BADSYSTEM;
- new->active_unit = -INT_MAX;
- new->obsalt = AST__BAD;
- new->obslat = AST__BAD;
- new->obslon = AST__BAD;
- new->dut1 = AST__BAD;
- new->flags = 0;
-
-/* Allocate memory to store pointers to the Frame's Axis objects and to store
- its axis permutation array. */
- new->axis = astMalloc( sizeof( AstAxis * ) * (size_t) naxes );
- new->perm = astMalloc( sizeof( int ) * (size_t) naxes );
-
-/* Create a new Axis object to describe each axis of the Frame and store the
- resulting pointers in the memory allocated above. Also initialise the
- axis permutation array so that the axes appear in their natural order. */
- if ( astOK ) {
- for ( axis = 0; axis < naxes; axis++ ) {
- new->axis[ axis ] = astAxis( "", status );
- new->perm[ axis ] = axis;
- }
-
-/* If an error occurred while creating the Axis objects, scan through the array
- of pointers to them again to ensure that they are all correctly annulled. */
- if ( !astOK ) {
- for ( axis = 0; axis < naxes; axis++ ) {
- new->axis[ axis ] = astAnnul( new->axis[ axis ] );
- }
- }
- }
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstFrame *astLoadFrame_( void *mem, size_t size,
- AstFrameVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadFrame
-
-* Purpose:
-* Load a Frame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "frame.h"
-* AstFrame *astLoadFrame( void *mem, size_t size,
-* AstFrameVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* Frame loader.
-
-* Description:
-* This function is provided to load a new Frame using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* Frame structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a Frame at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the Frame is to be loaded.
-* This must be of sufficient size to accommodate the Frame data
-* (sizeof(Frame)) plus any data used by derived classes. If a
-* value of NULL is given, this function will allocate the
-* memory itself using the "size" parameter to determine its
-* size.
-* size
-* The amount of memory used by the Frame (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the Frame structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstFrame) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new Frame. If this is NULL, a pointer to
-* the (static) virtual function table for the Frame class is
-* used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "Frame" is used instead.
-
-* Returned Value:
-* A pointer to the new Frame.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Constants: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstFrame *new; /* Pointer to the new Frame */
- char *sval; /* Pointer to string value */
- char key[ KEY_LEN + 1 ]; /* Buffer for keywords */
- double dval; /* DOuble attribute value */
- int axis; /* Loop counter for axes */
- int ival; /* Integer value */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this Frame. In this case the
- Frame belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstFrame );
- vtab = &class_vtab;
- name = "Frame";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitFrameVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built Frame. */
- new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Assign values for transient components that are not included in the
- Frame dump */
- new->flags = 0;
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "Frame" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* Naxes. */
-/* ------ */
-/* Obtain the number of Frame axes and allocate memory for the arrays
- which hold axis information. */
- new->naxes = astReadInt( channel, "naxes", 0 );
- if ( new->naxes < 0 ) new->naxes = 0;
- new->perm = astMalloc( sizeof( int ) * (size_t) new->naxes );
- new->axis = astMalloc( sizeof( AstAxis * ) * (size_t) new->naxes );
-
-/* If an error occurred, ensure that any allocated memory is freed. */
- if ( !astOK ) {
- new->perm = astFree( new->perm );
- new->axis = astFree( new->axis );
-
-/* Otherwise, initialise the array of Axis pointers. */
- } else {
- for ( axis = 0; axis < new->naxes; axis++ ) new->axis[ axis ] = NULL;
-
-/* Now obtain those input values which are required for each axis... */
- for ( axis = 0; axis < new->naxes; axis++ ) {
-
-/* Axis object. */
-/* ------------ */
-/* This must be read first, so that it can hold the other axis values
- obtained below. */
-
-/* Create a keyword appropriate to this axis. */
- (void) sprintf( key, "ax%d", axis + 1 );
-
-/* Read the Axis object. If none was read, provide a default Axis
- instead. */
- new->axis[ axis ] = astReadObject( channel, key, NULL );
- if ( !new->axis[ axis ] ) new->axis[ axis ] = astAxis( "", status );
-
-/* Label. */
-/* ------ */
-/* Read the Label string for each axis. If a value is obtained, use
- it to set the Label attribute for the axis. Free the memory holding
- the string when no longer needed. */
- (void) sprintf( key, "lbl%d", axis + 1 );
- sval = astReadString( channel, key, NULL );
- if ( sval ) {
- astSetAxisLabel( new->axis[ axis ], sval );
- sval = astFree( sval );
- }
-
-/* Symbol. */
-/* ------- */
- (void) sprintf( key, "sym%d", axis + 1 );
- sval = astReadString( channel, key, NULL );
- if ( sval ) {
- astSetAxisSymbol( new->axis[ axis ], sval );
- sval = astFree( sval );
- }
-
-/* Format. */
-/* ------- */
- (void) sprintf( key, "fmt%d", axis + 1 );
- sval = astReadString( channel, key, NULL );
- if ( sval ) {
- astSetAxisFormat( new->axis[ axis ], sval );
- sval = astFree( sval );
- }
-
-/* Unit. */
-/* ----- */
- (void) sprintf( key, "uni%d", axis + 1 );
- sval = astReadString( channel, key, NULL );
- if ( sval ) {
- astSetAxisUnit( new->axis[ axis ], sval );
- sval = astFree( sval );
- }
-
-/* Direction. */
-/* ---------- */
- (void) sprintf( key, "dir%d", axis + 1 );
- ival = astReadInt( channel, key, -INT_MAX );
- if ( ival != -INT_MAX ) {
- astSetAxisDirection( new->axis[ axis ], ival );
- }
-
-/* Top. */
-/*----- */
- (void) sprintf( key, "top%d", axis + 1 );
- dval = astReadDouble( channel, key, AST__BAD );
- if ( dval != AST__BAD ) {
- astSetAxisTop( new->axis[ axis ], dval );
- }
-
-/* Bottom. */
-/*----- -- */
- (void) sprintf( key, "bot%d", axis + 1 );
- dval = astReadDouble( channel, key, AST__BAD );
- if ( dval != AST__BAD ) {
- astSetAxisBottom( new->axis[ axis ], dval );
- }
-
-/* Digits. */
-/* ------- */
- (void) sprintf( key, "dig%d", axis + 1 );
- ival = astReadInt( channel, key, -INT_MAX );
- if ( ival != -INT_MAX ) {
- astSetAxisDigits( new->axis[ axis ], ival );
- }
-
-/* Axis permutation array. */
-/* ----------------------- */
-/* Convert from 1-based to zero-based axis numbering at this
- point. The default is the "un-permuted" value. */
- sprintf( key, "prm%d", axis + 1 );
- new->perm[ axis ] = astReadInt( channel, key, axis + 1 ) - 1;
-
-/* Quit looping if an error occurs. */
- if ( !astOK ) break;
- }
-
-/* The remaining values are not associated with particular axes... */
-
-/* Title. */
-/* ------ */
- new->title = astReadString( channel, "title", NULL );
-
-/* Domain. */
-/* ------- */
- new->domain = astReadString( channel, "domain", NULL );
-
-/* Epoch. */
-/* ------ */
-/* Interpret this as Besselian or Julian depending on its value. */
- new->epoch = astReadDouble( channel, "epoch", AST__BAD );
- if ( TestEpoch( new, status ) ) {
- SetEpoch( new, ( new->epoch < 1984.0 ) ? palSlaEpb2d( new->epoch ) :
- palSlaEpj2d( new->epoch ), status );
- }
-
-/* Digits. */
-/* ------- */
-/* This is the value that applies to the Frame as a whole. */
- new->digits = astReadInt( channel, "digits", -INT_MAX );
- if ( TestDigits( new, status ) ) SetDigits( new, new->digits, status );
-
-/* PreserveAxes. */
-/* ------------- */
- new->preserve_axes = astReadInt( channel, "presrv", -INT_MAX );
- if ( TestPreserveAxes( new, status ) ) {
- SetPreserveAxes( new, new->preserve_axes, status );
- }
-
-/* Permute. */
-/* -------- */
- new->permute = astReadInt( channel, "permut", -INT_MAX );
- if ( TestPermute( new, status ) ) SetPermute( new, new->permute, status );
-
-/* MinAxes. */
-/* -------- */
- new->min_axes = astReadInt( channel, "minax", -INT_MAX );
- if ( TestMinAxes( new, status ) ) SetMinAxes( new, new->min_axes, status );
-
-/* MaxAxes. */
-/* -------- */
- new->max_axes = astReadInt( channel, "maxax", -INT_MAX );
- if ( TestMaxAxes( new, status ) ) SetMaxAxes( new, new->max_axes, status );
-
-/* MatchEnd. */
-/* --------- */
- new->match_end = astReadInt( channel, "mchend", -INT_MAX );
- if ( TestMatchEnd( new, status ) ) SetMatchEnd( new, new->match_end, status );
-
-/* ObsLat. */
-/* ------- */
- new->obslat = astReadDouble( channel, "obslat", AST__BAD );
- if ( TestObsLat( new, status ) ) SetObsLat( new, new->obslat, status );
-
-/* ObsLon. */
-/* ------- */
- new->obslon = astReadDouble( channel, "obslon", AST__BAD );
- if ( TestObsLon( new, status ) ) SetObsLon( new, new->obslon, status );
-
-/* ObsAlt. */
-/* ------- */
- new->obsalt = astReadDouble( channel, "obsalt", AST__BAD );
- if ( TestObsAlt( new, status ) ) SetObsAlt( new, new->obsalt, status );
-
-/* Dut1. */
-/* ---- */
- new->dut1 = astReadDouble( channel, "dut1", AST__BAD );
- if ( TestDut1( new, status ) ) SetDut1( new, new->dut1, status );
-
-/* ActiveUnit. */
-/* ----------- */
- new->active_unit = astReadInt( channel, "actunt", -INT_MAX );
- if ( TestActiveUnit( new, status ) ) SetActiveUnit( new, new->active_unit, status );
-
-/* System. */
-/* ------- */
-/* Set the default and read the external representation as a string. */
- new->system = AST__BADSYSTEM;
- sval = astReadString( channel, "system", NULL );
-
-/* If a value was read, convert from a string to a System code. */
- if ( sval ) {
- if ( astOK ) {
- new->system = astSystemCode( new, sval );
-
-/* Report an error if the value wasn't recognised. */
- if ( new->system == AST__BADSYSTEM ) {
- astError( AST__ATTIN,
- "astRead(%s): Invalid System description "
- "\"%s\".", status, astGetClass( channel ), sval );
- }
- }
-
-/* Free the string value. */
- sval = astFree( sval );
- }
-
-/* AlignSystem. */
-/* ------------ */
-/* Set the default and read the external representation as a string. */
- new->alignsystem = AST__BADSYSTEM;
- sval = astReadString( channel, "alsys", NULL );
-
-/* If a value was read, convert from a string to a System code. */
- if ( sval ) {
- if ( astOK ) {
- new->alignsystem = astSystemCode( new, sval );
-
-/* Report an error if the value wasn't recognised. */
- if ( new->alignsystem == AST__BADSYSTEM ) {
- astError( AST__ATTIN,
- "astRead(%s): Invalid AlignSystem description "
- "\"%s\".", status, astGetClass( channel ), sval );
- }
- }
-
-/* Free the string value. */
- sval = astFree( sval );
- }
- }
-
-/* If an error occurred, clean up by deleting the new Frame. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new Frame pointer. */
- return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-const char *astAbbrev_( AstFrame *this, int axis, const char *fmt,
- const char *str1, const char *str2, int *status ) {
- if ( !astOK ) return str2;
- return (**astMEMBER(this,Frame,Abbrev))( this, axis, fmt, str1, str2, status );
-}
-int astFields_( AstFrame *this, int axis, const char *fmt,
- const char *str, int maxfld, char **fields,
- int *nc, double *val, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Frame,Fields))( this, axis, fmt, str, maxfld, fields, nc, val, status );
-}
-void astCheckPerm_( AstFrame *this, const int *perm, const char *method, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Frame,CheckPerm))( this, perm, method, status );
-}
-
-AstPointSet *astResolvePoints_( AstFrame *this, const double point1[],
- const double point2[], AstPointSet *in,
- AstPointSet *out, int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Frame,ResolvePoints))( this, point1, point2, in, out, status );
-}
-AstLineDef *astLineDef_( AstFrame *this, const double start[2],
- const double end[2], int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Frame,LineDef))( this, start, end, status );
-}
-int astLineCrossing_( AstFrame *this, AstLineDef *l1, AstLineDef *l2,
- double **cross, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Frame,LineCrossing))( this, l1, l2, cross, status );
-}
-void astLineOffset_( AstFrame *this, AstLineDef *line, double par, double prp,
- double point[2], int *status ){
- if ( !astOK ) return;
- (**astMEMBER(this,Frame,LineOffset))( this, line, par, prp, point, status );
-}
-int astLineContains_( AstFrame *this, AstLineDef *l, int def, double *point, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Frame,LineContains))( this, l, def, point, status );
-}
-AstFrameSet *astConvert_( AstFrame *from, AstFrame *to,
- const char *domainlist, int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(from,Frame,Convert))( from, to, domainlist, status );
-}
-AstFrameSet *astConvertX_( AstFrame *to, AstFrame *from,
- const char *domainlist, int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(to,Frame,ConvertX))( to, from, domainlist, status );
-}
-double astAngle_( AstFrame *this, const double a[], const double b[],
- const double c[], int *status ) {
- if ( !astOK ) return AST__BAD;
- return (**astMEMBER(this,Frame,Angle))( this, a, b, c, status );
-}
-int astGetActiveUnit_( AstFrame *this, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Frame,GetActiveUnit))( this, status );
-}
-int astTestActiveUnit_( AstFrame *this, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Frame,TestActiveUnit))( this, status );
-}
-void astSetActiveUnit_( AstFrame *this, int value, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Frame,SetActiveUnit))( this, value, status );
-}
-double astDistance_( AstFrame *this,
- const double point1[], const double point2[], int *status ) {
- if ( !astOK ) return AST__BAD;
- return (**astMEMBER(this,Frame,Distance))( this, point1, point2, status );
-}
-AstFrameSet *astFindFrame_( AstFrame *target, AstFrame *template,
- const char *domainlist, int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(target,Frame,FindFrame))( target, template, domainlist, status );
-}
-void astMatchAxes_( AstFrame *frm1, AstFrame *frm2, int *axes, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(frm1,Frame,MatchAxes))( frm1, frm2, axes, status );
-}
-void astMatchAxesX_( AstFrame *frm2, AstFrame *frm1, int *axes, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(frm2,Frame,MatchAxesX))( frm2, frm1, axes, status );
-}
-const char *astFormat_( AstFrame *this, int axis, double value, int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Frame,Format))( this, axis, value, status );
-}
-double astGap_( AstFrame *this, int axis, double gap, int *ntick, int *status ) {
- if ( !astOK ) return 0.0;
- return (**astMEMBER(this,Frame,Gap))( this, axis, gap, ntick, status );
-}
-AstAxis *astGetAxis_( AstFrame *this, int axis, int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Frame,GetAxis))( this, axis, status );
-}
-int astGetNaxes_( AstFrame *this, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Frame,GetNaxes))( this, status );
-}
-const int *astGetPerm_( AstFrame *this, int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Frame,GetPerm))( this, status );
-}
-
-
-int astMatch_( AstFrame *this, AstFrame *target,
- int **template_axes, int **target_axes,
- AstMapping **map, AstFrame **result, int *status ) {
-
- AstFrame *super_this;
- const char *dom;
- int match;
-
- if ( !astOK ) return 0;
-
- match = (**astMEMBER(this,Frame,Match))( this, target,
- template_axes, target_axes,
- map, result, status );
-
-/* If the template ("this") could not be used to probe the target, it may
- be because the template class is a more specialised form of the target
- class. E.g. a SkyFrame cannot directly be used to probe a Frame, but a
- Frame *can* be used to probe a SkyFrame. This means (for instance),
- that a basic Frame with Domain FRED cannot be aligned (using astConvert)
- with a CmpFrame with Domain FRED. This sort of alignment is often
- useful, so we try now to use the supplied template to probe a modified
- form of the target that has been cast into the same class as the
- template. This is only possible if the template class is a sub-class of
- the target class. Attempt to do the cast. */
- if( ! match ) {
- super_this = (AstFrame *) astCast( this, target );
-
-/* If the cast was possible, fix the template Domain since the parent
- class may provide a different default Domain, and then invoke the Match
- method appropriate to the new template class (i.e. the target class). */
- if( super_this ) {
- if( astTestDomain( target ) ) {
- dom = astGetDomain( this );
- if( astChrLen( dom ) > 0 ) astSetDomain( super_this, dom );
- }
- match = (**astMEMBER(super_this,Frame,Match))( super_this, target,
- template_axes,
- target_axes, map,
- result, status );
- super_this = astAnnul( super_this );
- }
- }
-
- return match;
-}
-
-
-int astIsUnitFrame_( AstFrame *this, int *status ){
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Frame,IsUnitFrame))( this, status );
-}
-void astNorm_( AstFrame *this, double value[], int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Frame,Norm))( this, value, status );
-}
-void astNormBox_( AstFrame *this, double lbnd[], double ubnd[], AstMapping *reg, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Frame,NormBox))( this, lbnd, ubnd, reg, status );
-}
-double astAxDistance_( AstFrame *this, int axis, double v1, double v2, int *status ) {
- if ( !astOK ) return AST__BAD;
- return (**astMEMBER(this,Frame,AxDistance))( this, axis, v1, v2, status );
-}
-double astAxOffset_( AstFrame *this, int axis, double v1, double dist, int *status ) {
- if ( !astOK ) return AST__BAD;
- return (**astMEMBER(this,Frame,AxOffset))( this, axis, v1, dist, status );
-}
-void astOffset_( AstFrame *this, const double point1[], const double point2[],
- double offset, double point3[], int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Frame,Offset))( this, point1, point2, offset, point3, status );
-}
-double astAxAngle_( AstFrame *this, const double a[2], const double b[2],
- int axis, int *status ) {
- if ( !astOK ) return AST__BAD;
- return (**astMEMBER(this,Frame,AxAngle))( this, a, b, axis, status );
-}
-double astOffset2_( AstFrame *this, const double point1[2], double angle,
- double offset, double point2[2], int *status ) {
- if ( !astOK ) return AST__BAD;
- return (**astMEMBER(this,Frame,Offset2))( this, point1, angle, offset, point2, status );
-}
-void astIntersect_( AstFrame *this, const double a1[2],
- const double a2[2], const double b1[2],
- const double b2[2], double cross[2],
- int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Frame,Intersect))( this, a1, a2, b1, b2, cross, status );
-}
-void astOverlay_( AstFrame *template, const int *template_axes,
- AstFrame *result, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(template,Frame,Overlay))( template, template_axes, result, status );
-}
-void astPermAxes_( AstFrame *this, const int perm[], int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Frame,PermAxes))( this, perm, status );
-}
-AstFrame *astPickAxes_( AstFrame *this, int naxes, const int axes[],
- AstMapping **map, int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Frame,PickAxes))( this, naxes, axes, map, status );
-}
-void astPrimaryFrame_( AstFrame *this, int axis1,
- AstFrame **frame, int *axis2, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Frame,PrimaryFrame))( this, axis1, frame, axis2, status );
-}
-void astResolve_( AstFrame *this, const double point1[], const double point2[],
- const double point3[], double point4[], double *d1,
- double *d2, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Frame,Resolve))( this, point1, point2, point3, point4, d1, d2, status );
-}
-void astSetAxis_( AstFrame *this, int axis, AstAxis *newaxis, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Frame,SetAxis))( this, axis, newaxis, status );
-}
-void astSetUnit_( AstFrame *this, int axis, const char *value, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Frame,SetUnit))( this, axis, value, status );
-}
-void astClearUnit_( AstFrame *this, int axis, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Frame,ClearUnit))( this, axis, status );
-}
-int astSubFrame_( AstFrame *target, AstFrame *template, int result_naxes,
- const int *target_axes, const int *template_axes,
- AstMapping **map, AstFrame **result, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(target,Frame,SubFrame))( target, template, result_naxes,
- target_axes, template_axes,
- map, result, status );
-}
-int astUnformat_( AstFrame *this, int axis, const char *string,
- double *value, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Frame,Unformat))( this, axis, string, value, status );
-}
-int astValidateAxis_( AstFrame *this, int axis, const char *method, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Frame,ValidateAxis))( this, axis, method, status );
-}
-void astValidateAxisSelection_( AstFrame *this, int naxes, const int *axes,
- const char *method, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Frame,ValidateAxisSelection))( this, naxes, axes,
- method, status );
-}
-AstSystemType astValidateSystem_( AstFrame *this, AstSystemType system, const char *method, int *status ) {
- if ( !astOK ) return AST__BADSYSTEM;
- return (**astMEMBER(this,Frame,ValidateSystem))( this, system, method, status );
-}
-AstSystemType astSystemCode_( AstFrame *this, const char *system, int *status ) {
- if ( !astOK ) return AST__BADSYSTEM;
- return (**astMEMBER(this,Frame,SystemCode))( this, system, status );
-}
-const char *astSystemString_( AstFrame *this, AstSystemType system, int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Frame,SystemString))( this, system, status );
-}
-int astAxIn_( AstFrame *this, int axis, double lo, double hi, double val,
- int closed, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Frame,AxIn))( this, axis, lo, hi, val, closed, status );
-}
-int astGetFrameFlags_( AstFrame *this, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Frame,GetFrameFlags))( this, status );
-}
-void astSetFrameFlags_( AstFrame *this, int value, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Frame,SetFrameFlags))( this, value, status );
-}
-
-
-/* Special public interface functions. */
-/* =================================== */
-/* These provide the public interface to certain special functions
- whose public interface cannot be handled using macros (such as
- astINVOKE) alone. In general, they are named after the
- corresponding protected version of the function, but with "Id"
- appended to the name. */
-
-/* Public Interface Function Prototypes. */
-/* ------------------------------------- */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstFrame *PickAxesId_( AstFrame *, int, const int[], AstMapping **, int * );
-AstFrame *astFrameId_( int, const char *, ... );
-const char *astFormatId_( AstFrame *, int, double, int * );
-int astUnformatId_( AstFrame *, int, const char *, double *, int * );
-void astPermAxesId_( AstFrame *, const int[], int * );
-
-/* Special interface function implementations. */
-/* ------------------------------------------- */
-const char *astFormatId_( AstFrame *this, int axis, double value, int *status ) {
-/*
-*++
-* Name:
-c astFormat
-f AST_FORMAT
-
-* Purpose:
-* Format a coordinate value for a Frame axis.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "frame.h"
-c const char *astFormat( AstFrame *this, int axis, double value )
-f RESULT = AST_FORMAT( THIS, AXIS, VALUE, STATUS )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-c This function returns a pointer to a string containing the
-f This function returns a character string containing the
-* formatted (character) version of a coordinate value for a Frame
-* axis. The formatting applied is determined by the Frame's
-* attributes and, in particular, by any Format attribute string
-* that has been set for the axis. A suitable default format (based
-* on the Digits attribute value) will be applied if necessary.
-
-* Parameters:
-c this
-f THIS = INTEGER (given)
-* Pointer to the Frame.
-c axis
-f AXIS = INTEGER (Given)
-* The number of the Frame axis for which formatting is to be
-* performed (axis numbering starts at 1 for the first axis).
-c value
-f VALUE = DOUBLE PRECISION (Given)
-* The coordinate value to be formatted.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astFormat()
-c A pointer to a null-terminated string containing the formatted
-c value.
-f AST_FORMAT = CHARACTER * ( AST__SZCHR )
-f The formatted value.
-
-* Notes:
-c - The returned pointer is guaranteed to remain valid and the
-c string to which it points will not be over-written for a total
-c of 50 successive invocations of this function. After this, the
-c memory containing the string may be re-used, so a copy of the
-c string should be made if it is needed for longer than this.
-c - A formatted value may be converted back into a numerical (double)
-c value using astUnformat.
-f - A formatted value may be converted back into a numerical
-f (double precision) value using AST_UNFORMAT.
-c - A NULL pointer will be returned if this function is invoked
-c with the AST error status set, or if it should fail for any
-c reason.
-f - A blank string will be returned if this function is invoked
-f with STATUS set to an error value, or if it should fail for any
-f reason.
-*--
-
-* Implementation Notes:
-* This function implements the public interface for the astFormat
-* method. It is identical to astFormat_ except that:
-*
-* - The axis index is decremented by 1 before use. This allows the
-* public interface to use 1-based axis numbers (whereas internally
-* axis numbers are zero-based).
-*
-* - The returned string value is buffered in dynamically allocated
-* memory so that it will remain valid for a guaranteed number of
-* function invocations.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Thread-specific global data */
- const char *fvalue; /* Pointer to formatted value */
- const char *result; /* Pointer value to return */
- int i; /* Loop counter for initialisation */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to Thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* If the "astformatid_strings" array has not been initialised, fill it with NULL
- pointers. */
- if ( !astformatid_init ) {
- astformatid_init = 1;
- for ( i = 0; i < ASTFORMATID_MAX_STRINGS; i++ ) astformatid_strings[ i ] = NULL;
- }
-
-/* Invoke the normal astFormat_ function to obtain a pointer to the
- required formatted value, adjusting the axis index to become
- zero-based. */
- fvalue = astFormat( this, axis - 1, value );
-
-/* If OK, store a copy of the resulting string in dynamically allocated memory,
- putting a pointer to the copy into the next element of the "astformatid_strings"
- array. (This process also de-allocates any previously allocated memory pointed
- at by this "astformatid_strings" element, so the earlier string is effectively
- replaced by the new one.) */
- if ( astOK ) {
- astBeginPM;
- astformatid_strings[ astformatid_istr ] = astStore( astformatid_strings[ astformatid_istr ], fvalue,
- strlen( fvalue ) + (size_t) 1 );
- astEndPM;
-
-/* If OK, return a pointer to the copy and increment "astformatid_istr" to use
- the next element of "astformatid_strings" on the next invocation. Recycle
- "astformatid_istr" to zero when all elements have been used. */
- if ( astOK ) {
- result = astformatid_strings[ astformatid_istr++ ];
- if ( astformatid_istr == ( ASTFORMATID_MAX_STRINGS - 1 ) ) astformatid_istr = 0;
- }
- }
-
-/* Return the result. */
- return result;
-
-}
-
-AstFrame *astFrameId_( int naxes, const char *options, ... ) {
-/*
-*++
-* Name:
-c astFrame
-f AST_FRAME
-
-* Purpose:
-* Create a Frame.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "frame.h"
-c AstFrame *astFrame( int naxes, const char *options, ... )
-f RESULT = AST_FRAME( NAXES, OPTIONS, STATUS )
-
-* Class Membership:
-* Frame constructor.
-
-* Description:
-* This function creates a new Frame and optionally initialises its
-* attributes.
-*
-* A Frame is used to represent a coordinate system. It does this
-* in rather the same way that a frame around a graph describes the
-* coordinate space in which data are plotted. Consequently, a
-* Frame has a Title (string) attribute, which describes the
-* coordinate space, and contains axes which in turn hold
-* information such as Label and Units strings which are used for
-* labelling (e.g.) graphical output. In general, however, the
-* number of axes is not restricted to two.
-*
-* Functions are available for converting Frame coordinate values
-* into a form suitable for display, and also for calculating
-* distances and offsets between positions within the Frame.
-*
-* Frames may also contain knowledge of how to transform to and
-* from related coordinate systems.
-
-* Parameters:
-c naxes
-f NAXES = INTEGER (Given)
-* The number of Frame axes (i.e. the number of dimensions of
-* the coordinate space which the Frame describes).
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new Frame. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-c If no initialisation is required, a zero-length string may be
-c supplied.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new Frame. The syntax used is identical to that for the
-f AST_SET routine. If no initialisation is required, a blank
-f value may be supplied.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astFrame()
-f AST_FRAME = INTEGER
-* A pointer to the new Frame.
-
-* Examples:
-c frame = astFrame( 2, "Title=Energy Spectrum: Plot %d", n );
-c Creates a new 2-dimensional Frame and initialises its Title
-c attribute to the string "Energy Spectrum: Plot <n>", where
-c <n> takes the value of the int variable "n".
-c frame = astFrame( 2, "Label(1)=Energy, Label(2)=Response" );
-c Creates a new 2-dimensional Frame and initialises its axis
-c Label attributes to suitable string values.
-f FRAME = AST_FRAME( 2, 'Title=Energy Spectrum', STATUS );
-f Creates a new 2-dimensional Frame and initialises its Title
-f attribute to the string "Energy Spectrum".
-f FRAME = AST_FRAME( 2, 'Label(1)=Energy, Label(2)=Response', STATUS );
-f Creates a new 2-dimensional Frame and initialises its axis
-f Label attributes to suitable string values.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-
-* Implementation Notes:
-* - This function implements the external (public) interface to
-* the astFrame constructor function. It returns an ID value
-* (instead of a true C pointer) to external users, and must be
-* provided because astFrame_ has a variable argument list which
-* cannot be encapsulated in a macro (where this conversion would
-* otherwise occur).
-* - The variable argument list also prevents this function from
-* invoking astFrame_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *new; /* Pointer to new Frame */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the Frame, allocating memory and initialising the virtual
- function table as well if necessary. */
- new = astInitFrame( NULL, sizeof( AstFrame ), !class_init, &class_vtab,
- "Frame", naxes );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new Frame's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new Frame. */
- return astMakeId( new );
-}
-
-void astPermAxesId_( AstFrame *this, const int perm[], int *status ) {
-/*
-*++
-* Name:
-c astPermAxes
-f AST_PERMAXES
-
-* Purpose:
-* Permute the axis order in a Frame.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "frame.h"
-c void astPermAxes( AstFrame *this, const int perm[] )
-f CALL AST_PERMAXES( THIS, PERM, STATUS )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-c This function permutes the order in which a Frame's axes occur.
-f This routine permutes the order in which a Frame's axes occur.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Frame.
-c perm
-f PERM( * ) = INTEGER (Given)
-* An array with one element for each axis of the Frame (Naxes
-* attribute). This should list the axes in their new order,
-* using the original axis numbering (which starts at 1 for the
-* first axis).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - Only genuine permutations of the axis order are permitted, so
-c each axis must be referenced exactly once in the "perm" array.
-f each axis must be referenced exactly once in the PERM array.
-* - If successive axis permutations are applied to a Frame, then
-* the effects are cumulative.
-*--
-
-* Implementation Notes:
-* This function implements the public interface for the
-* astPermAxes method. It is identical to astPermAxes_ except that
-* the axis numbers in the "perm" array are decremented by 1 before
-* use. This is to allow the public interface to use one-based axis
-* numbering (internally, zero-based axis numbering is used).
-*/
-
-/* Local Variables: */
- int *perm1; /* Pointer to modified perm array */
- int axis; /* Loop counter for Frame axes */
- int naxes; /* Number of Frame axes */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain the number of Frame axes. */
- naxes = astGetNaxes( this );
-
-/* Allocate an array to hold a modified version of the "perm"
- array. */
- perm1 = astMalloc( sizeof( int ) * (size_t) naxes );
- if ( astOK ) {
-
-/* Make a modified copy of the "perm" array by subtracting one from
- each element. This allows the public interface to use one-based
- axis numbering, whereas all internal code is zero-based. */
- for ( axis = 0; axis < naxes; axis++ ) perm1[ axis ] = perm[ axis ] - 1;
-
-/* Invoke the normal astPermAxes_ function to permute the Frame's axes. */
- astPermAxes( this, perm1 );
- }
-
-/* Free the temporary array. */
- perm1 = astFree( perm1 );
-}
-
-AstFrame *astPickAxesId_( AstFrame *this, int naxes, const int axes[],
- AstMapping **map, int *status ) {
-/*
-*++
-* Name:
-c astPickAxes
-f AST_PICKAXES
-
-* Purpose:
-* Create a new Frame by picking axes from an existing one.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "frame.h"
-c AstFrame *astPickAxes( AstFrame *this, int naxes, const int axes[],
-c AstMapping **map )
-f RESULT = AST_PICKAXES( THIS, NAXES, AXES, MAP, STATUS )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function creates a new Frame whose axes are copied from an
-* existing Frame along with other Frame attributes, such as its
-* Title. Any number (zero or more) of the original Frame's axes
-* may be copied, in any order, and additional axes with default
-* attributes may also be included in the new Frame.
-*
-c Optionally, a Mapping that converts between the coordinate
-f A Mapping that converts between the coordinate
-* systems described by the two Frames will also be returned.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the original Frame.
-c naxes
-f NAXES = INTEGER (Given)
-* The number of axes required in the new Frame.
-c axes
-f AXES( NAXES ) = INTEGER (Given)
-c An array, with "naxes" elements, which lists the axes to be
-f An array which lists the axes to be
-* copied. These should be given in the order required in the
-* new Frame, using the axis numbering in the original Frame
-* (which starts at 1 for the first axis). Axes may be selected
-* in any order, but each may only be used once. If additional
-* (default) axes are also to be included, the corresponding
-* elements of this array should be set to zero.
-c map
-f MAP = INTEGER (Returned)
-c Address of a location in which to return a pointer to a new
-f A pointer to a new
-* Mapping. This will be a PermMap (or a UnitMap as a special
-* case) that describes the axis permutation that has taken
-* place between the original and new Frames. The Mapping's
-* forward transformation will convert coordinates from the
-* original Frame into the new one, and vice versa.
-c
-c If this Mapping is not required, a NULL value may be supplied
-c for this parameter.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astPickAxes()
-f AST_PICKAXES = INTEGER
-* A pointer to the new Frame.
-
-* Applicability:
-* Frame
-* This function applies to all Frames. The class of Frame returned
-* may differ from that of the original Frame, depending on which
-* axes are selected. For example, if a single axis is picked from a
-* SkyFrame (which must always have two axes) then the resulting
-* Frame cannot be a valid SkyFrame, so will revert to the parent
-* class (Frame) instead.
-* FrameSet
-* Using this function on a FrameSet is identical to using it on
-* the current Frame in the FrameSet. The returned Frame will not
-* be a FrameSet.
-* Region
-* If this function is used on a Region, an attempt is made to
-* retain the bounds information on the selected axes. If
-* succesful, the returned Frame will be a Region of some class.
-* Otherwise, the returned Frame is obtained by calling this
-* function on the Frame represented by the supplied Region (the
-* returned Frame will then not be a Region). In order to be
-* succesful, the selected axes in the Region must be independent
-* of the others. For instance, a Box can be split in this way but
-* a Circle cannot. Another requirement for success is that no
-* default axes are added (that is, the
-c "axes"
-f AXES
-* array must not contain any zero values.
-
-* Notes:
-c - The new Frame will contain a "deep" copy (c.f. astCopy) of all
-f - The new Frame will contain a "deep" copy (c.f. AST_COPY) of all
-* the data selected from the original Frame. Modifying any aspect
-* of the new Frame will therefore not affect the original one.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-
-* Implementation Notes:
-* This function implements the public interface for the
-* astPickAxes method. It is identical to astPickAxes_ except for
-* the following:
-*
-* - The axis numbers in the "axes" array are decremented by 1 before
-* use. This is to allow the public interface to use one-based axis
-* numbering (internally, zero-based axis numbering is used).
-*
-* - An ID value is returned via the "map" parameter (if used)
-* instead of a true C pointer. This is required because this
-* conversion cannot be performed by the macro that invokes the
-* function.
-*/
-
-/* Local Variables: */
- AstFrame *result; /* Pointer to result Frame */
- int *axes1; /* Pointer to modified axes array */
- int axis; /* Loop counter for axes */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Allocate an array to hold a modified version of the "axes" array
- (check that "naxes" is valid first - if not, this error will be
- reported by astPickAxes_ below). */
- axes1 = ( naxes >= 0 ) ? astMalloc( sizeof( int ) * (size_t) naxes ) :
- NULL;
- if ( astOK ) {
-
-/* Make a modified copy of the "axes" array by subtracting one from
- each element. This allows the public interface to use one-based
- axis numbering, whereas all internal code is zero-based. */
- for ( axis = 0; axis < naxes; axis++ ) axes1[ axis ] = axes[ axis ] - 1;
-
-/* Invoke the normal astPickAxes_ function to select the required axes. */
- result = astPickAxes( this, naxes, axes1, map );
- }
-
-/* Free the temporary array. */
- axes1 = astFree( axes1 );
-
-/* If required, return an ID value for the Mapping. */
- if ( map ) *map = astMakeId( *map );
-
-/* Return the result. */
- return result;
-}
-
-int astUnformatId_( AstFrame *this, int axis, const char *string,
- double *value, int *status ) {
-/*
-*++
-* Name:
-c astUnformat
-f AST_UNFORMAT
-
-* Purpose:
-* Read a formatted coordinate value for a Frame axis.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "frame.h"
-c int astUnformat( AstFrame *this, int axis, const char *string,
-c double *value )
-f RESULT = AST_UNFORMAT( THIS, AXIS, STRING, VALUE, STATUS )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-c This function reads a formatted coordinate value (given as a
-c character string) for a Frame axis and returns the equivalent
-c numerical (double) value. It also returns the number of
-c characters read from the string.
-f This function reads a formatted coordinate value (given as a
-f character string) for a Frame axis and returns the equivalent
-f numerical (double precision) value. It also returns the number
-f of characters read from the string.
-*
-c The principle use of this function is in decoding user-supplied
-c input which contains formatted coordinate values. Free-format
-c input is supported as far as possible. If input is ambiguous, it
-c is interpreted with reference to the Frame's attributes (in
-c particular, the Format string associated with the Frame's
-c axis). This function is, in essence, the inverse of astFormat.
-f The principle use of this function is in decoding user-supplied
-f input which contains formatted coordinate values. Free-format
-f input is supported as far as possible. If input is ambiguous, it
-f is interpreted with reference to the Frame's attributes (in
-f particular, the Format string associated with the Frame's
-f axis). This function is, in essence, the inverse of AST_FORMAT.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Frame.
-c axis
-f AXIS = INTEGER (Given)
-* The number of the Frame axis for which a coordinate value is to
-* be read (axis numbering starts at 1 for the first axis).
-c string
-f STRING = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated character string containing the
-c formatted coordinate value.
-f A character string containing the formatted coordinate value.
-* This string may contain additional information following the
-* value to be read, in which case reading stops at the first
-* character which cannot be interpreted as part of the value.
-* Any white space before or after the value is discarded.
-c value
-f VALUE = DOUBLE PRECISION (Returned)
-c Pointer to a double in which the coordinate value read will be
-c returned.
-f The coordinate value read.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astUnformat()
-f AST_UNFORMAT = INTEGER
-* The number of characters read from the string in order to
-* obtain the coordinate value. This will include any white
-* space which occurs before or after the value.
-
-* Applicability:
-* Frame
-* This function applies to all Frames. See the "Frame Input
-* Format" section below for details of the input formats
-* accepted by a basic Frame.
-* SkyFrame
-* The SkyFrame class re-defines the input format to be suitable
-* for representing angles and times, with the resulting
-* coordinate value returned in radians. See the "SkyFrame
-* Input Format" section below for details of the formats
-* accepted.
-* FrameSet
-* The input formats accepted by a FrameSet are determined by
-* its current Frame (as specified by the Current attribute).
-
-* Frame Input Format
-* The input format accepted for a basic Frame axis is as follows:
-* - An optional sign, followed by:
-* - A sequence of one or more digits possibly containing a decimal point,
-* followed by:
-* - An optional exponent field.
-* - The exponent field, if present, consists of "E" or "e"
-* followed by a possibly signed integer.
-*
-* Examples of acceptable Frame input formats include:
-* - 99
-* - 1.25
-* - -1.6
-* - 1E8
-* - -.99e-17
-* - <bad>
-
-* SkyFrame Input Format
-* The input format accepted for a SkyFrame axis is as follows:
-* - An optional sign, followed by between one and three fields
-* representing either degrees, arc-minutes, arc-seconds or hours,
-* minutes, seconds (e.g. "-12 42 03").
-* - Each field should consist of a sequence of one or more digits,
-* which may include leading zeros. At most one field may contain a
-* decimal point, in which case it is taken to be the final field
-* (e.g. decimal degrees might be given as "124.707", while degrees
-* and decimal arc-minutes might be given as "-13 33.8").
-* - The first field given may take any value, allowing angles and
-* times outside the conventional ranges to be
-* represented. However, subsequent fields must have values of less
-* than 60 (e.g. "720 45 31" is valid, whereas "11 45 61" is not).
-* - Fields may be separated by white space or by ":" (colon), but
-* the choice of separator must be used consistently throughout the
-* value. Additional white space may be present around fields and
-* separators (e.g. "- 2: 04 : 7.1").
-* - The following field identification characters may be used as
-* separators to replace either of those above (or may be appended
-* to the final field), in order to identify the field to which
-* they are appended: "d"---degrees; "h"---hours; "m"---minutes of
-* arc or time; "s"---seconds of arc or time; "'" (single
-* quote)---minutes of arc; """ (double quote)---seconds of arc.
-* Either lower or upper case may be used. Fields must be given in
-* order of decreasing significance (e.g. "-11D 3' 14.4"" or
-* "22h14m11.2s").
-* - The presence of any of the field identification characters
-* "d", "'" (single quote) or """ (double quote) indicates that the
-* value is to be interpreted as an angle. Conversely, the presence
-* of "h" indicates that it is to be interpreted as a time (with 24
-* hours corresponding to 360 degrees). Incompatible angle/time
-* identification characters may not be mixed (e.g. "10h14'3"" is
-* not valid). The remaining field identification characters and
-* separators do not specify a preference for an angle or a time
-* and may be used with either.
-c - If no preference for an angle or a time is expressed anywhere
-c within the value, it is interpreted as an angle if the Format
-c attribute string associated with the SkyFrame axis generates an
-c angle and as a time otherwise. This ensures that values produced
-c by astFormat are correctly interpreted by astUnformat.
-f - If no preference for an angle or a time is expressed anywhere
-f within the value, it is interpreted as an angle if the Format
-f attribute string associated with the SkyFrame axis generates an
-f angle and as a time otherwise. This ensures that values produced
-f by AST_FORMAT are correctly interpreted by AST_UNFORMAT.
-* - Fields may be omitted, in which case they default to zero. The
-* remaining fields may be identified by using appropriate field
-* identification characters (see above) and/or by adding extra
-* colon separators (e.g. "-05m13s" is equivalent to "-:05:13"). If
-* a field is not identified explicitly, it is assumed that
-* adjacent fields have been given, after taking account of any
-* extra separator characters (e.g. "14:25.4s" specifies minutes
-* and seconds, while "14::25.4s" specifies degrees and seconds).
-c - If fields are omitted in such a way that the remaining ones
-c cannot be identified uniquely (e.g. "01:02"), then the first
-c field (either given explicitly or implied by an extra leading
-c colon separator) is taken to be the most significant field that
-c astFormat would produce when formatting a value (using the
-c Format attribute associated with the SkyFrame axis). By
-c default, this means that the first field will normally be
-c interpreted as degrees or hours. However, if this does not
-c result in consistent field identification, then the last field
-c (either given explicitly or implied by an extra trailing colon
-c separator) is taken to to be the least significant field that
-c astFormat would produce.
-f - If fields are omitted in such a way that the remaining ones
-f cannot be identified uniquely (e.g. "01:02"), then the first
-f field (either given explicitly or implied by an extra leading
-f colon separator) is taken to be the most significant field that
-f AST_FORMAT would produce when formatting a value (using the
-f Format attribute associated with the SkyFrame axis). By
-f default, this means that the first field will normally be
-f interpreted as degrees or hours. However, if this does not
-f result in consistent field identification, then the last field
-f (either given explicitly or implied by an extra trailing colon
-f separator) is taken to to be the least significant field that
-f AST_FORMAT would produce.
-*
-c This final convention is intended to ensure that values formatted
-c by astFormat which contain less than three fields will be
-c correctly interpreted if read back using astUnformat, even if
-c they do not contain field identification characters.
-f This final convention is intended to ensure that values formatted
-f by AST_FORMAT which contain less than three fields will be
-f correctly interpreted if read back using AST_UNFORMAT, even if
-f they do not contain field identification characters.
-*
-* Examples of acceptable SkyFrame input formats (with
-* interpretation in parentheses) include:
-* - -14d 13m 22.2s (-14d 13' 22.2")
-* - + 12:34:56.7 (12d 34' 56.7" or 12h 34m 56.7s)
-* - 001 : 02 : 03.4 (1d 02' 03.4" or 1h 02m 03.4s)
-* - 22h 30 (22h 30m 00s)
-* - 136::10" (136d 00' 10" or 136h 00m 10s)
-* - -14M 27S (-0d 14' 27" or -0h 14m 27s)
-* - -:14: (-0d 14' 00" or -0h 14m 00s)
-* - -::4.1 (-0d 00' 04.1" or -0h 00m 04.1s)
-* - .9" (0d 00' 00.9")
-* - d12m (0d 12' 00")
-* - H 12:22.3s (0h 12m 22.3s)
-* - <bad> (AST__BAD)
-*
-* Where alternative interpretations are shown, the choice of angle or
-* time depends on the associated Format(axis) attribute.
-
-* Notes:
-* - A function value of zero (and no coordinate value) will be
-* returned, without error, if the string supplied does not contain
-* a suitably formatted value.
-c - Beware that it is possible for a formatting error part-way
-c through an input string to terminate input before it has been
-c completely read, but to yield a coordinate value that appears
-c valid. For example, if a user types "1.5r6" instead of "1.5e6",
-c the "r" will terminate input, giving an incorrect coordinate
-c value of 1.5. It is therefore most important to check the return
-c value of this function to ensure that the correct number of
-c characters have been read.
-f - Beware that it is possible for a formatting error part-way
-f through an input string to terminate input before it has been
-f completely read, but to yield a coordinate value that appears
-f valid. For example, if a user types "1.5R6" instead of "1.5E6",
-f the "R" will terminate input, giving an incorrect coordinate
-f value of 1.5. It is therefore most important to check the return
-f value of this function to ensure that the correct number of
-f characters have been read.
-* - An error will result if a value is read which appears to have
-* the correct format, but which cannot be converted into a valid
-* coordinate value (for instance, because the value of one or more
-* of its fields is invalid).
-* - The string "<bad>" is recognised as a special case and will
-* yield the coordinate value AST__BAD without error. The test for
-* this string is case-insensitive and also permits embedded white
-* space.
-c - A function result of zero will be returned and no coordinate
-c value will be returned via the "value" pointer if this function
-c is invoked with the AST error status set, or if it should fail
-c for any reason.
-f - A function result of zero will be returned and no coordinate
-f value will be returned via the VALUE argument if this function
-f is invoked with the AST error status set, or if it should fail
-f for any reason.
-*--
-
-* Implementation Notes:
-* This function implements the public interface for the
-* astUnformat method. It is identical to astUnformat_ except that:
-*
-* - The axis index is decremented by 1 before use. This allows the
-* public interface to use 1-based axis numbers (whereas internally
-* axis numbers are zero-based).
-*/
-
-/* Invoke the normal astUnformat_ function, adjusting the axis index
- to become zero-based. */
- return astUnformat( this, axis - 1, string, value );
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/frame.h b/ast-5.3-1/frame.h
deleted file mode 100644
index 40375f6..0000000
--- a/ast-5.3-1/frame.h
+++ /dev/null
@@ -1,1404 +0,0 @@
-#if !defined( FRAME_INCLUDED ) /* Include this file only once */
-#define FRAME_INCLUDED
-/*
-*+
-* Name:
-* frame.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the Frame class.
-
-* Invocation:
-* #include "frame.h"
-
-* Description:
-* This include file defines the interface to the Frame class and
-* provides the type definitions, function prototypes and macros, etc.
-* needed to use this class.
-*
-* A Frame object encapsulates information about a coordinate
-* system, including its axes. It may also act as a "template" to
-* be matched against another Frame object. This process determines
-* whether it is possible to perform a coordinate transformation
-* between the two coordinates systems they describe.
-
-* Inheritance:
-* The Frame class inherits from the Mapping class.
-
-* Attributes Over-Ridden:
-* Nin (integer, readonly)
-* The Frame class sets this value to be equal to the number of
-* Frame axes.
-* Nout (integer, readonly)
-* The Frame class sets this value to be equal to the number of
-* Frame axes.
-
-* New Attributes Defined:
-* AlignSystem (string)
-* This attribute takes a value to identify the coordinate system
-* in which the Frame should be aligned with other Frames.
-* Digits [or Digits(axis)] (integer)
-* Specifies how many digits of precision are required by
-* default when a coordinate value for a Frame is formatted
-* (e.g. using the astFormat method). The Digits value acts as a
-* default only and is over-ridden if a Format string is
-* specified for an axis explicitly.
-*
-* The default Digits value for a Frame is 7. This attribute
-* normally applies to all the Frame's axes, but reference may
-* be made to a particular axis by adding an axis subscript
-* (e.g. Digits(1)). If a value is set for an individual axis,
-* it will over-ride the Digits value for the Frame as a whole
-* when formatting values for that axis.
-* Direction(axis) (integer)
-* A boolean value which specifies how coordinate values for
-* each Frame axis should be displayed (e.g. in graphs). By
-* default, it has the value one, indicating that they should be
-* shown in the conventional sense (i.e. increasing left to
-* right for an abscissa and bottom to top for an ordinate). If
-* set to zero, this attribute indicates that the direction
-* should be reversed (as would often be done for an
-* astronomical magnitude or a right ascension axis, for
-* example).
-* Epoch (double)
-* This value is used to qualify coordinate systems by
-* giving the moment in time when the coordinates are known to
-* be correct. Often, this will be the date of observation.
-* Format(axis) (string)
-* Specifies the format to be used to display coordinate values
-* for each Frame axis (i.e. to convert them from binary to
-* character form). The interpretation of this string (e.g. by
-* derived classes) is left to the astFormat method which, in
-* turn will invoke the astAxisFormat for the Axis object that
-* describes each axis. By default, the Frame class supplies an
-* Axis class object for each axis and this will interpret this
-* parameter as a C "printf" format string which should be
-* capable of formatting a single coordinate value stored as a
-* double (e.g. "%1.7G"). If no Format string is set, the
-* default format is based on the value of the Digits attribute.
-* Label(axis) (string)
-* Specifies the label to be attached to each Frame axis when it
-* is represented in (e.g.) a graph. It is intended purely for
-* interpretation by human readers and not by software. The
-* default supplied by the Frame class is the string "Axis <n>",
-* where <n> is 1, 2, etc. for each successive axis.
-* MatchEnd (integer)
-* A boolean value that controls how a Frame behaves when used
-* as a template to match another Frame. If it is zero and a
-* template Frame matches a target frame which has a different
-* number of axes, then the axes wich occur first in the target
-* frame will be matched and any trailing axes in either the
-* target or template will be discarded (if necessary). If it is
-* non-zero, however, the last axes in each frame will be
-* matched and any un-matched leading axes will be discarded
-* instead. The default value supplied by the Frame class is
-* zero.
-* MaxAxes (integer)
-* Specifies the maximum number of axes in a target Frame that
-* can be matched when using the Frame as a template. Normally,
-* by default, this value is equal to the number of Frame axes,
-* so that a Frame will only match another Frame with the same
-* number of axes as itself. By setting a different value,
-* however, Frames with different numbers of axes may be matched
-* (the MatchEnd attribute then determines which of the
-* individual axes are matched).
-*
-* When setting this value, the value of the MinAxes attribute
-* may be silently changed so that it remains consistent with
-* (i.e. does not exceed) the new value. The default value may
-* also be reduced if necessary to remain consistent with the
-* MinAxes value.
-* MinAxes (integer)
-* Specifies the minimum number of axes in a target Frame that
-* can be matched when using the Frame as a template. Normally,
-* by default, this value is equal to the number of Frame axes,
-* so that a Frame will only match another Frame with the same
-* number of axes as itself. By setting a different value,
-* however, Frames with different numbers of axes may be matched
-* (the MatchEnd attribute then determines which of the
-* individual axes are matched).
-*
-* When setting this value, the value of the MaxAxes attribute
-* may be silently changed so that it remains consistent with
-* (i.e. is not less than) the new value. The default value may
-* also be reduced if necessary to remain consistent with the
-* MaxAxes value.
-* Domain (string)
-* A string which may be used to identify the physical domain to
-* which a Frame applies and used as an additional key when
-* matching a target Frame with a template. If the Domain
-* attribute in the template Frame is set, then only target
-* frames with the same Domain value will be matched. If a
-* Domain is not set in the template Frame, the target Frame's
-* Domain value will be ignored and has no effect on
-* matching. The default value supplied by the Frame class is an
-* empty string. Domain values are automatically converted to
-* upper case and all white space is removed before use.
-* Naxes (integer)
-* A read-only attribute that gives the number of axes in a
-* Frame (i.e. the number of dimensions of the space which the
-* Frame describes). This value is determined when the Frame is
-* created.
-* Permute (integer)
-* A boolean value which specifies whether the axis order of a
-* target Frame may be permuted in order to obtain a match with
-* a template. If this value is set to zero in the template
-* Frame, it will only match a target if it can do so without
-* changing the order of its axes. The default value supplied by
-* the Frame class is 1 (i.e. allow axis permutations).
-* PreserveAxes (integer)
-* A boolean value which determines how the "result" Frame is
-* produced whan a target frame is matched by a template. If
-* this value is zero in the template Frame, then the result
-* Frame will have the same number of axes as the template. If
-* it is non-zero, however, the axes of the target Frame will be
-* preserved, so that the result Frame will have the same number
-* of axes as the target. The default supplied by the Frame
-* class is zero (i.e. target axes are not preserved).
-*
-* The main use for this attribute is when the MaxAxes and/or
-* MinAxes attributes have been set to search for a Frame which
-* may have a different number of axes from the template. For
-* example, if a 2-dimensional template Frame matches a
-* 3-dimensional target Frame, then by default the result is
-* 2-dimensional and the last axis (normally) will be
-* discarded. However, if the template's PreserveAxes value is
-* non-zero, the result will instead be 3-dimensional to
-* correspond with the target Frame.
-* Symbol(axis) (string)
-* Specifies the symbol to be used to represent coordinate
-* values for each Frame axis in "short form", such as in
-* algebraic expressions where a full description of the axis
-* would be inappropriate. Examples include "RA" and "Dec" (for
-* Right Ascension and Declination).
-*
-* The default supplied by the Frame class is the string
-* "<Domain><n>", where <n> is 1, 2, etc. for successive axes,
-* and <Domain> is the value of the Frame's Domain attribute
-* (with any white space replaced by underscores and truncated
-* if necessary so that the final string does not exceed 15
-* characters). If no Domain value has been set, "x" is used as
-* the <Domain> value in constructing this default string.
-* System (string)
-* This attribute takes a value to identify the coordinate system
-* used to describe positions within the domain of the Frame.
-* Title (string)
-* Specifies a string to be used as a title on (e.g.) graphs to
-* describe the coordinate system which the Frame
-* represents. Examples would be "Detector Coordinates" or
-* "Galactic Coordinates". This string is intended solely for
-* interpretation by human readers and not by software. The
-* default supplied by the Frame class is "<n>-D Coordinate
-* System", where <n> is the number of Frame axes.
-* Unit(axis) (string)
-* Describes the units used to represent coordinate values on
-* each Frame axis. The default supplied by the Frame class is
-* an empty string.
-
-* Methods Over-Ridden:
-* Public:
-* astGetNin
-* Get the number of input coordinates for a Frame.
-* astGetNout
-* Get the number of output coordinates for a Frame.
-* astTransform
-* Use a Frame to transform a set of points.
-
-* Protected:
-* astClearAttrib
-* Clear an attribute value for a Frame.
-* astGetAttrib
-* Get an attribute value for a Frame.
-* astReportPoints
-* Report the effect of transforming a set of points using a Frame.
-* astSetAttrib
-* Set an attribute value for a Frame.
-* astTestAttrib
-* Test if an attribute value has been set for a Frame.
-
-* New Methods Defined:
-* Public:
-* astAngle
-* Calculate the angle between three points.
-* astAxAngle
-* Find the angle from an axis to a line through two points.
-* astAxDistance
-* Calculate the distance between two axis values
-* astAxOffset
-* Calculate an offset along an axis
-* astConvert
-* Determine how to convert between two coordinate systems.
-* astDistance
-* Calculate the distance between two points.
-* astFindFrame
-* Find a coordinate system with specified characteristics
-* astFormat
-* Format a coordinate value for a Frame axis.
-* astNorm
-* Normalise a set of Frame coordinates.
-* astOffset
-* Calculate an offset along a geodesic curve.
-* astOffset2
-* Calculate an offset along a geodesic curve for a 2D Frame.
-* astPermAxes
-* Permute the order of a Frame's axes.
-* astPickAxes
-* Create a new Frame by picking axes from an existing one.
-* astResolve
-* Resolve a vector into two orthogonal components.
-* astUnformat
-* Read a formatted coordinate value for a Frame axis.
-
-* Protected:
-* astAbbrev
-* Abbreviate a formatted Frame axis value by skipping
-* leading fields.
-* astCheckPerm
-* Check that an array contains a valid permutation.
-* astClearDigits
-* Clear the Digits attribute for a Frame.
-* astClearDirection
-* Clear the Direction attribute for a Frame axis.
-* astClearDomain
-* Clear the Domain attribute for a Frame.
-* astClearFormat
-* Clear the Format attribute for a Frame axis.
-* astClearLabel
-* Clear the Label attribute for a Frame axis.
-* astClearMatchEnd
-* Clear the MatchEnd attribute for a Frame.
-* astClearMaxAxes
-* Clear the MaxAxes attribute for a Frame.
-* astClearMinAxes
-* Clear the MinAxes attribute for a Frame.
-* astClearPermute
-* Clear the Permute attribute for a Frame.
-* astClearPreserveAxes
-* Clear the PreserveAxes attribute for a Frame.
-* astClearSymbol
-* Clear the Symbol attribute for a Frame axis.
-* astClearSystem
-* Clear the value of the System attribute for a Frame.
-* astClearTitle
-* Clear the Title attribute for a Frame.
-* astClearUnit
-* Clear the Unit attribute for a Frame axis.
-* astConvertX
-* Determine how to convert between two coordinate systems.
-* astFields
-* Identify the fields within a formatted Frame axis value.
-* astGap
-* Find a "nice" gap for tabulating Frame axis values.
-* astGetAxis
-* Obtain a pointer to a specified Axis from a Frame.
-* astGetDigits
-* Get the value of the Digits attribute for a Frame.
-* astGetDirection
-* Get the value of the Direction attribute for a Frame axis.
-* astGetDomain
-* Get a pointer to the Domain attribute for a Frame.
-* astGetFormat
-* Get a pointer to the Format attribute for a Frame axis.
-* astGetLabel
-* Get a pointer to the Label attribute for a Frame axis.
-* astGetMatchEnd
-* Get the value of the MatchEnd attribute for a Frame.
-* astGetMaxAxes
-* Get the value of the MaxAxes attribute for a Frame.
-* astGetMinAxes
-* Get the value of the MinAxes attribute for a Frame.
-* astGetNaxes
-* Determine how many axes a Frame has.
-* astGetPerm
-* Access the axis permutation array for a Frame.
-* astGetPermute
-* Get the value of the Permute attribute for a Frame.
-* astGetPreserveAxes
-* Get the value of the PreserveAxes attribute for a Frame.
-* astGetSymbol
-* Get a pointer to the Symbol attribute for a Frame axis.
-* astGetSystem
-* Get the value of the System attribute for a Frame.
-* astGetTitle
-* Get a pointer to the Title attribute for a Frame.
-* astGetUnit
-* Get a pointer to the Unit attribute for a Frame axis.
-* astIsUnitFrame
-* Returns a flag indicating if a Frame is equivalent to a UnitMap.
-* astMatch
-* Determine if conversion is possible between two coordinate systems.
-* astOverlay
-* Overlay the attributes of a template Frame on to another Frame.
-* astPrimaryFrame
-* Uniquely identify a primary Frame and one of its axes.
-* astResolvePoints
-* Resolve many vectors into two orthogonal components.
-* astSetAxis
-* Set a new Axis for a Frame.
-* astSetDigits
-* Set the value of the Digits attribute for a Frame.
-* astSetDirection
-* Set the value of the Direction attribute for a Frame axis.
-* astSetDomain
-* Set the value of the Domain attribute for a Frame.
-* astSetFormat
-* Set the value of the Format attribute for a Frame axis.
-* astSetLabel
-* Set the value of the Label attribute for a Frame axis.
-* astSetMatchEnd
-* Set the value of the MatchEnd attribute for a Frame.
-* astSetMaxAxes
-* Set the value of the MaxAxes attribute for a Frame.
-* astSetMinAxes
-* Set the value of the MinAxes attribute for a Frame.
-* astSetPermute
-* Set the value of the Permute attribute for a Frame.
-* astSetPreserveAxes
-* Set the value of the PreserveAxes attribute for a Frame.
-* astSetSymbol
-* Set the value of the Symbol attribute for a Frame axis.
-* astSetSystem
-* Set the value of the System attribute for a Frame.
-* astSetTitle
-* Set the value of the Title attribute for a Frame.
-* astSetUnit
-* Set the value of the Unit attribute for a Frame axis.
-* astSubFrame
-* Select axes from a Frame and convert to the new coordinate system.
-* astTestDigits
-* Test whether a value has been set for the Digits attribute of a
-* Frame.
-* astTestDirection
-* Test whether a value has been set for the Direction attribute of a
-* Frame axis.
-* astTestDomain
-* Test whether a value has been set for the Domain attribute of a
-* Frame.
-* astTestFormat
-* Test whether a value has been set for the Format attribute of a
-* Frame axis.
-* astTestLabel
-* Test whether a value has been set for the Label attribute of a
-* Frame axis.
-* astTestMatchEnd
-* Test whether a value has been set for the MatchEnd attribute of a
-* Frame.
-* astTestMaxAxes
-* Test whether a value has been set for the MaxAxes attribute of a
-* Frame.
-* astTestMinAxes
-* Test whether a value has been set for the MinAxes attribute of a
-* Frame.
-* astTestPermute
-* Test whether a value has been set for the Permute attribute of a
-* Frame.
-* astTestPreserveAxes
-* Test whether a value has been set for the PreserveAxes attribute of
-* a Frame.
-* astTestSymbol
-* Test whether a value has been set for the Symbol attribute of a
-* Frame axis.
-* astTestSystem
-* Test whether a value has been set for the System attribute of a
-* Frame.
-* astTestTitle
-* Test whether a value has been set for the Title attribute of a
-* Frame.
-* astTestUnit
-* Test whether a value has been set for the Unit attribute of a Frame
-* axis.
-* astValidateAxis
-* Validate and permute a Frame's axis index.
-* astValidateAxisSelection
-* Check that a set of axes selected from a Frame is valid.
-* astValidateSystem
-* Validate a Frame's System attribute.
-* astSystemString
-* Return a string representation of a System code.
-* astSystemCode
-* Return a code for a string representation of a System value
-
-* Other Class Functions:
-* Public:
-* astFrame
-* Create a Frame.
-* astIsAFrame
-* Test class membership.
-
-* Protected:
-* astCheckFrame
-* Validate class membership.
-* astInitFrame
-* Initialise a Frame.
-* astInitFrameVtab
-* Initialise the virtual function table for the Frame class.
-* astLoadFrame
-* Load a Frame.
-
-* Macros:
-* Public:
-* None.
-
-* Protected:
-* AST__BADSYSTEM
-* A "bad" (undefined) value for the System attribute.
-
-* Type Definitions:
-* Public:
-* AstFrame
-* Frame object type.
-
-* Protected:
-* AstFrameVtab
-* Frame virtual function table type.
-* AstSystemType
-* Enumerated type used for the System attribute.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: B.S. Berry (Starlink)
-
-* History:
-* 1-MAR-1996 (RFWS):
-* Original version.
-* 25-APR-1996 (RFWS):
-* Tidied up, etc.
-* 11-SEP-1996 (RFWS):
-* Added astGap (written by DSB).
-* 10-JUN-1997 (RFWS):
-* Revised astConvert and added astFindFrame.
-* 15-FEB-1998 (RFWS):
-* Added astUnformat.
-* 21-JUN-2001 (DSB):
-* Added astAngle and astOffset2.
-* 29-AUG-2001 (DSB):
-* Added astAxDistance and astAxOffset.
-* 4-SEP-2001 (DSB):
-* Added astResolve.
-* 9-SEP-2001 (DSB):
-* Added astBear.
-* 21-SEP-2001 (DSB):
-* Replace astBear with astAxAngle.
-* 15-NOV-2002 (DSB):
-* Moved System and Epoch attributes from SkyFrame into this class.
-* Added AlignSystem attribute.
-* 8-JAN-2003 (DSB):
-* Added protected astInitFrameVtab method.
-* 24-JAN-2004 (DSB):
-* o Added astFields.
-* o Added argument "fmt" to astAbbrev.
-* 24-JUN-2004 (DSB):
-* Remove unused entry "void (* SetMatchRange)( AstFrame *, int, int );"
-* from AstFrameVtab structure.
-* 9-NOV-2004 (DSB):
-* Added protected astIsAUnitFrame method.
-* 12-AUG-2005 (DSB):
-* Added ObsLat and ObsLon attributes.
-* 14-OCT-2006 (DSB):
-* Added dut1 to the Frame structure.
-* Added Dut1 accessor methods.
-* 17-MAY-2007 (DSB):
-* Added NormUnit attribute.
-* 14-JAN-2009 (DSB):
-* Added astIntersect method.
-* 18-JUN-2009 (DSB):
-* Added ObsAlt attribute.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h" /* Base Object class */
-#include "axis.h" /* Coordinate Axis class */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#include <stddef.h>
-
-/* Macros. */
-/* ------- */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* A bad value for the System attribute. */
-#define AST__BADSYSTEM -1
-
-/* The legal System values recognized by this class of Frame. */
-#define AST__CART 0
-
-/* Flag bitmasks for use with astSetFrameFlags. */
-# define AST__INTFLAG 1 /* FrameSet integrity is currently being restored */
-
-/* Define constants used to size global arrays in this module. */
-#define AST__FRAME_LABEL_BUFF_LEN 100 /* Max length of default axis Label string */
-#define AST__FRAME_SYMBOL_BUFF_LEN 50 /* Max length of default axis Symbol string */
-#define AST__FRAME_TITLE_BUFF_LEN 100 /* Max length of default title string */
-#define AST__FRAME_GETATTRIB_BUFF_LEN 50 /* Max length of string returned by GetAttrib */
-#define AST__FRAME_ASTFMTDECIMALYR_BUFF_LEN 50 /* Max length of string returned by GetAttrib */
-#define AST__FRAME_ASTFORMATID_MAX_STRINGS 50 /* Number of string values buffer by astFormatID*/
-
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* Integer type used to store the System attribute values. */
-typedef int AstSystemType;
-
-/* Frame structure. */
-/* ------------------- */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstFrame {
-
-/* Attributes inherited from the parent class. */
- AstMapping mapping; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- AstAxis **axis; /* Pointer to array of Axis objects */
- char *domain; /* Pointer to Domain string */
- char *title; /* Pointer to Title string */
- double epoch; /* Epoch as Modified Julian Date */
- double obslat; /* Geodetic latitude of observer */
- double obslon; /* Geodetic longitude of observer */
- double obsalt; /* Height above reference spheroid (geodetic, metres) */
- double dut1; /* UT1-UTC in seconds */
- int *perm; /* Pointer to axis permutation array */
- int digits; /* Default digits of precision */
- int match_end; /* Match final axes of target? */
- int active_unit; /* Use Unit when aligning Frames? */
- int max_axes; /* Minimum no. axes matched */
- int min_axes; /* Max. no. axes matched */
- int naxes; /* Number of axes */
- int permute; /* Permute axes in order to match? */
- int preserve_axes; /* Preserve target axes? */
- AstSystemType system; /* Code identifying coordinate system */
- AstSystemType alignsystem; /* Code for Alignment coordinate system */
- int flags; /* Bit mask containing various protected flags */
-} AstFrame;
-
-/* Cached Line structure. */
-/* ---------------------- */
-/* This structure contains information describing a line segment within a
- 2D Frame. It is used by other classes to store intermediate cached values
- relating to the line in order to speed up repeated operations on the
- line. */
-
-typedef struct AstLineDef {
- AstFrame *frame; /* Pointer to Frame in which the line is defined */
- double length; /* Line length */
- int infinite; /* Disregard the start and end of the line? */
- double start[2]; /* Frame axis values at line start */
- double end[2]; /* Frame axis values at line end */
- double dir[2]; /* Unit vector defining line direction */
- double q[2]; /* Unit vector perpendicular to line */
-} AstLineDef;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* The virtual function table makes a forward reference to the
- AstFrameSet structure which is not defined until "frameset.h" is
- included (below). Hence make a preliminary definition available
- now. */
-struct AstFrameSet;
-
-/* This table contains all information that is the same for all objects in the
- class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstFrameVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstMappingVtab mapping; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- AstAxis *(* GetAxis)( AstFrame *, int, int * );
- AstFrame *(* PickAxes)( AstFrame *, int, const int[], AstMapping **, int * );
- AstLineDef *(* LineDef)( AstFrame *, const double[2], const double[2], int * );
- AstPointSet *(* ResolvePoints)( AstFrame *, const double [], const double [], AstPointSet *, AstPointSet *, int * );
- const char *(* Abbrev)( AstFrame *, int, const char *, const char *, const char *, int * );
- const char *(* Format)( AstFrame *, int, double, int * );
- const char *(* GetDomain)( AstFrame *, int * );
- const char *(* GetFormat)( AstFrame *, int, int * );
- const char *(* GetLabel)( AstFrame *, int, int * );
- const char *(* GetSymbol)( AstFrame *, int, int * );
- const char *(* GetTitle)( AstFrame *, int * );
- const char *(* GetNormUnit)( AstFrame *, int, int * );
- const char *(* GetUnit)( AstFrame *, int, int * );
- const int *(* GetPerm)( AstFrame *, int * );
- double (* Angle)( AstFrame *, const double[], const double[], const double[], int * );
- double (* Distance)( AstFrame *, const double[], const double[], int * );
- double (* Gap)( AstFrame *, int, double, int *, int * );
- int (* Fields)( AstFrame *, int, const char *, const char *, int, char **, int *, double *, int * );
- double (* AxDistance)( AstFrame *, int, double, double, int * );
- double (* AxOffset)( AstFrame *, int, double, double, int * );
- int (* AxIn)( AstFrame *, int, double, double, double, int, int * );
- int (* GetDigits)( AstFrame *, int * );
- int (* GetDirection)( AstFrame *, int, int * );
- int (* GetMatchEnd)( AstFrame *, int * );
- int (* GetMaxAxes)( AstFrame *, int * );
- int (* GetMinAxes)( AstFrame *, int * );
- int (* GetNaxes)( AstFrame *, int * );
- int (* GetPermute)( AstFrame *, int * );
- int (* GetPreserveAxes)( AstFrame *, int * );
- int (* IsUnitFrame)( AstFrame *, int * );
- int (* LineCrossing)( AstFrame *, AstLineDef *, AstLineDef *, double **, int * );
- int (* LineContains)( AstFrame *, AstLineDef *, int, double *, int * );
- int (* Match)( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
- int (* SubFrame)( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
- int (* TestDigits)( AstFrame *, int * );
- int (* TestDirection)( AstFrame *, int, int * );
- int (* TestDomain)( AstFrame *, int * );
- int (* TestFormat)( AstFrame *, int, int * );
- int (* TestLabel)( AstFrame *, int, int * );
- int (* TestMatchEnd)( AstFrame *, int * );
- int (* TestMaxAxes)( AstFrame *, int * );
- int (* TestMinAxes)( AstFrame *, int * );
- int (* TestPermute)( AstFrame *, int * );
- int (* TestPreserveAxes)( AstFrame *, int * );
- int (* TestSymbol)( AstFrame *, int, int * );
- int (* TestTitle)( AstFrame *, int * );
- int (* TestUnit)( AstFrame *, int, int * );
- int (* Unformat)( AstFrame *, int, const char *, double *, int * );
- int (* ValidateAxis)( AstFrame *, int, const char *, int * );
- AstSystemType (* ValidateSystem)( AstFrame *, AstSystemType, const char *, int * );
- AstSystemType (* SystemCode)( AstFrame *, const char *, int * );
- const char *(* SystemString)( AstFrame *, AstSystemType, int * );
- struct AstFrameSet *(* Convert)( AstFrame *, AstFrame *, const char *, int * );
- struct AstFrameSet *(* ConvertX)( AstFrame *, AstFrame *, const char *, int * );
- struct AstFrameSet *(* FindFrame)( AstFrame *, AstFrame *, const char *, int * );
- void (* MatchAxes)( AstFrame *, AstFrame *, int[], int * );
- void (* MatchAxesX)( AstFrame *, AstFrame *, int[], int * );
- void (* CheckPerm)( AstFrame *, const int *, const char *, int * );
- void (* ClearDigits)( AstFrame *, int * );
- void (* ClearDirection)( AstFrame *, int, int * );
- void (* ClearDomain)( AstFrame *, int * );
- void (* ClearFormat)( AstFrame *, int, int * );
- void (* ClearLabel)( AstFrame *, int, int * );
- void (* ClearMatchEnd)( AstFrame *, int * );
- void (* ClearMaxAxes)( AstFrame *, int * );
- void (* ClearMinAxes)( AstFrame *, int * );
- void (* ClearPermute)( AstFrame *, int * );
- void (* ClearPreserveAxes)( AstFrame *, int * );
- void (* ClearSymbol)( AstFrame *, int, int * );
- void (* ClearTitle)( AstFrame *, int * );
- void (* ClearUnit)( AstFrame *, int, int * );
- void (* Intersect)( AstFrame *, const double[2], const double[2], const double[2], const double[2], double[2], int * );
- void (* Norm)( AstFrame *, double[], int * );
- void (* NormBox)( AstFrame *, double *, double *, AstMapping *, int * );
- void (* Offset)( AstFrame *, const double[], const double[], double, double[], int * );
- double (* AxAngle)( AstFrame *, const double[2], const double[2], int, int * );
- double (* Offset2)( AstFrame *, const double[2], double, double, double[2], int * );
- void (* Overlay)( AstFrame *, const int *, AstFrame *, int * );
- void (* PermAxes)( AstFrame *, const int[], int * );
- void (* PrimaryFrame)( AstFrame *, int, AstFrame **, int *, int * );
- void (* Resolve)( AstFrame *, const double [], const double [], const double [], double [], double *, double *, int * );
- void (* SetAxis)( AstFrame *, int, AstAxis *, int * );
- void (* SetDigits)( AstFrame *, int, int * );
- void (* SetDirection)( AstFrame *, int, int, int * );
- void (* SetDomain)( AstFrame *, const char *, int * );
- void (* SetFormat)( AstFrame *, int, const char *, int * );
- void (* SetLabel)( AstFrame *, int, const char *, int * );
- void (* SetMatchEnd)( AstFrame *, int, int * );
- void (* SetMaxAxes)( AstFrame *, int, int * );
- void (* SetMinAxes)( AstFrame *, int, int * );
- void (* SetPermute)( AstFrame *, int, int * );
- void (* SetPreserveAxes)( AstFrame *, int, int * );
- void (* SetSymbol)( AstFrame *, int, const char *, int * );
- void (* SetTitle)( AstFrame *, const char *, int * );
- void (* SetUnit)( AstFrame *, int, const char *, int * );
- void (* ValidateAxisSelection)( AstFrame *, int, const int *, const char *, int * );
- void (* LineOffset)( AstFrame *, AstLineDef *, double, double, double[2], int * );
-
- double (* GetTop)( AstFrame *, int, int * );
- int (* TestTop)( AstFrame *, int, int * );
- void (* ClearTop)( AstFrame *, int, int * );
- void (* SetTop)( AstFrame *, int, double, int * );
-
- double (* GetBottom)( AstFrame *, int, int * );
- int (* TestBottom)( AstFrame *, int, int * );
- void (* ClearBottom)( AstFrame *, int, int * );
- void (* SetBottom)( AstFrame *, int, double, int * );
-
- AstSystemType (* GetSystem)( AstFrame *, int * );
- int (* TestSystem)( AstFrame *, int * );
- void (* ClearSystem)( AstFrame *, int * );
- void (* SetSystem)( AstFrame *, AstSystemType, int * );
-
- AstSystemType (* GetAlignSystem)( AstFrame *, int * );
- int (* TestAlignSystem)( AstFrame *, int * );
- void (* ClearAlignSystem)( AstFrame *, int * );
- void (* SetAlignSystem)( AstFrame *, AstSystemType, int * );
-
- double (* GetEpoch)( AstFrame *, int * );
- int (* TestEpoch)( AstFrame *, int * );
- void (* ClearEpoch)( AstFrame *, int * );
- void (* SetEpoch)( AstFrame *, double, int * );
-
- int (* TestActiveUnit)( AstFrame *, int * );
- int (* GetActiveUnit)( AstFrame *, int * );
- void (* SetActiveUnit)( AstFrame *, int, int * );
-
- double (* GetObsLon)( AstFrame *, int * );
- int (* TestObsLon)( AstFrame *, int * );
- void (* ClearObsLon)( AstFrame *, int * );
- void (* SetObsLon)( AstFrame *, double, int * );
-
- double (* GetObsLat)( AstFrame *, int * );
- int (* TestObsLat)( AstFrame *, int * );
- void (* ClearObsLat)( AstFrame *, int * );
- void (* SetObsLat)( AstFrame *, double, int * );
-
- double (* GetObsAlt)( AstFrame *, int * );
- int (* TestObsAlt)( AstFrame *, int * );
- void (* ClearObsAlt)( AstFrame *, int * );
- void (* SetObsAlt)( AstFrame *, double, int * );
-
- double (* GetDut1)( AstFrame *, int * );
- int (* TestDut1)( AstFrame *, int * );
- void (* ClearDut1)( AstFrame *, int * );
- void (* SetDut1)( AstFrame *, double, int * );
-
- void (* SetFrameFlags)( AstFrame *, int, int * );
- int (* GetFrameFlags)( AstFrame *, int * );
-
-} AstFrameVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstFrameGlobals {
- AstFrameVtab Class_Vtab;
- int Class_Init;
- char GetAttrib_Buff[ AST__FRAME_GETATTRIB_BUFF_LEN + 1 ];
- char *AstFormatID_Strings[ AST__FRAME_ASTFORMATID_MAX_STRINGS ];
- int AstFormatID_Istr;
- int AstFormatID_Init;
- char Label_Buff[ AST__FRAME_LABEL_BUFF_LEN + 1 ];
- char Symbol_Buff[ AST__FRAME_SYMBOL_BUFF_LEN + 1 ];
- char Title_Buff[ AST__FRAME_TITLE_BUFF_LEN + 1 ];
- char AstFmtDecimalYr_Buff[ AST__FRAME_ASTFMTDECIMALYR_BUFF_LEN + 1 ];
-} AstFrameGlobals;
-
-#endif
-#endif
-
-/* More include files. */
-/* =================== */
-/* The interface to the FrameSet class must be included here (after
- the type definitions for the Frame class) because "frameset.h"
- itself includes this file ("frame.h"), although "frameset.h" refers
- to the AstFrameSet structure above. This seems a little strange at
- first, but is simply analogous to making a forward reference to a
- structure type when recursively defining a normal C structure
- (except that here the definitions happen to be in separate include
- files). */
-#include "frameset.h"
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Frame) /* Check class membership */
-astPROTO_ISA(Frame) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected */
-AstFrame *astFrame_( int, const char *, int *, ...);
-#else
-AstFrame *astFrameId_( int, const char *, ... )__attribute__((format(printf,2,3)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstFrame *astInitFrame_( void *, size_t, int, AstFrameVtab *, const char *,
- int, int * );
-
-/* Vtab initialiser. */
-void astInitFrameVtab_( AstFrameVtab *, const char *, int * );
-
-/* Loader. */
-AstFrame *astLoadFrame_( void *, size_t, AstFrameVtab *,
- const char *, AstChannel *channel, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitFrameGlobals_( AstFrameGlobals * );
-#endif
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-AstFrameSet *astConvert_( AstFrame *, AstFrame *, const char *, int * );
-AstFrameSet *astFindFrame_( AstFrame *, AstFrame *, const char *, int * );
-double astAngle_( AstFrame *, const double[], const double[], const double[], int * );
-double astAxAngle_( AstFrame *, const double[2], const double[2], int, int * );
-double astAxDistance_( AstFrame *, int, double, double, int * );
-double astAxOffset_( AstFrame *, int, double, double, int * );
-double astDistance_( AstFrame *, const double[], const double[], int * );
-double astOffset2_( AstFrame *, const double[2], double, double, double[2], int * );
-int astGetActiveUnit_( AstFrame *, int * );
-void astIntersect_( AstFrame *, const double[2], const double[2], const double[2], const double[2], double[2], int * );
-void astMatchAxes_( AstFrame *, AstFrame *, int[], int * );
-void astNorm_( AstFrame *, double[], int * );
-void astOffset_( AstFrame *, const double[], const double[], double, double[], int * );
-void astResolve_( AstFrame *, const double [], const double [], const double [], double [], double *, double *, int * );
-void astSetActiveUnit_( AstFrame *, int, int * );
-
-#if defined(astCLASS) /* Protected */
-void astNormBox_( AstFrame *, double *, double *, AstMapping *, int * );
-AstFrame *astPickAxes_( AstFrame *, int, const int[], AstMapping **, int * );
-const char *astFormat_( AstFrame *, int, double, int * );
-int astUnformat_( AstFrame *, int, const char *, double *, int * );
-void astPermAxes_( AstFrame *, const int[], int * );
-#else
-AstFrame *astPickAxesId_( AstFrame *, int, const int[], AstMapping **, int * );
-const char *astFormatId_( AstFrame *, int, double, int * );
-int astUnformatId_( AstFrame *, int, const char *, double *, int * );
-void astPermAxesId_( AstFrame *, const int[], int * );
-#endif
-
-#if defined(astCLASS) /* Protected */
-int astAxIn_( AstFrame *, int, double, double, double, int, int * );
-AstAxis * astGetAxis_( AstFrame *, int, int * );
-AstFrameSet *astConvertX_( AstFrame *, AstFrame *, const char *, int * );
-void astMatchAxesX_( AstFrame *, AstFrame *, int[], int * );
-AstLineDef *astLineDef_( AstFrame *, const double[2], const double[2], int * );
-AstPointSet *astResolvePoints_( AstFrame *, const double [], const double [], AstPointSet *, AstPointSet *, int * );
-const char *astAbbrev_( AstFrame *, int, const char *, const char *, const char *, int * );
-const char *astGetDomain_( AstFrame *, int * );
-const char *astGetFormat_( AstFrame *, int, int * );
-const char *astGetLabel_( AstFrame *, int, int * );
-const char *astGetSymbol_( AstFrame *, int, int * );
-const char *astGetTitle_( AstFrame *, int * );
-const char *astGetUnit_( AstFrame *, int, int * );
-const char *astGetNormUnit_( AstFrame *, int, int * );
-const int *astGetPerm_( AstFrame *, int * );
-double astGap_( AstFrame *, int, double, int *, int * );
-int astFields_( AstFrame *, int, const char *, const char *, int, char **, int *, double *, int * );
-int astGetDigits_( AstFrame *, int * );
-int astGetDirection_( AstFrame *, int, int * );
-int astGetMatchEnd_( AstFrame *, int * );
-int astGetMaxAxes_( AstFrame *, int * );
-int astGetMinAxes_( AstFrame *, int * );
-int astGetNaxes_( AstFrame *, int * );
-int astGetPermute_( AstFrame *, int * );
-int astGetPreserveAxes_( AstFrame *, int * );
-int astIsUnitFrame_( AstFrame *, int * );
-int astLineCrossing_( AstFrame *, AstLineDef *, AstLineDef *, double **, int * );
-int astLineContains_( AstFrame *, AstLineDef *, int, double *, int * );
-int astMatch_( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-int astSubFrame_( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-int astTestDigits_( AstFrame *, int * );
-int astTestDirection_( AstFrame *, int, int * );
-int astTestDomain_( AstFrame *, int * );
-int astTestFormat_( AstFrame *, int, int * );
-int astTestLabel_( AstFrame *, int, int * );
-int astTestMatchEnd_( AstFrame *, int * );
-int astTestMaxAxes_( AstFrame *, int * );
-int astTestMinAxes_( AstFrame *, int * );
-int astTestPermute_( AstFrame *, int * );
-int astTestPreserveAxes_( AstFrame *, int * );
-int astTestSymbol_( AstFrame *, int, int * );
-int astTestTitle_( AstFrame *, int * );
-int astTestUnit_( AstFrame *, int, int * );
-int astValidateAxis_( AstFrame *, int, const char *, int * );
-AstSystemType astValidateSystem_( AstFrame *, AstSystemType, const char *, int * );
-AstSystemType astSystemCode_( AstFrame *, const char *, int * );
-const char *astSystemString_( AstFrame *, AstSystemType, int * );
-void astCheckPerm_( AstFrame *, const int *, const char *, int * );
-void astClearDigits_( AstFrame *, int * );
-void astClearDirection_( AstFrame *, int, int * );
-void astClearDomain_( AstFrame *, int * );
-void astClearFormat_( AstFrame *, int, int * );
-void astClearLabel_( AstFrame *, int, int * );
-void astClearMatchEnd_( AstFrame *, int * );
-void astClearMaxAxes_( AstFrame *, int * );
-void astClearMinAxes_( AstFrame *, int * );
-void astClearPermute_( AstFrame *, int * );
-void astClearPreserveAxes_( AstFrame *, int * );
-void astClearSymbol_( AstFrame *, int, int * );
-void astClearTitle_( AstFrame *, int * );
-void astClearUnit_( AstFrame *, int, int * );
-void astOverlay_( AstFrame *, const int *, AstFrame *, int * );
-void astPrimaryFrame_( AstFrame *, int, AstFrame **, int *, int * );
-void astSetAxis_( AstFrame *, int, AstAxis *, int * );
-void astSetDigits_( AstFrame *, int, int * );
-void astSetDirection_( AstFrame *, int, int, int * );
-void astSetDomain_( AstFrame *, const char *, int * );
-void astSetFormat_( AstFrame *, int, const char *, int * );
-void astSetLabel_( AstFrame *, int, const char *, int * );
-void astSetMatchEnd_( AstFrame *, int, int * );
-void astSetMaxAxes_( AstFrame *, int, int * );
-void astSetMinAxes_( AstFrame *, int, int * );
-void astSetPermute_( AstFrame *, int, int * );
-void astSetPreserveAxes_( AstFrame *, int, int * );
-void astSetSymbol_( AstFrame *, int, const char *, int * );
-void astSetTitle_( AstFrame *, const char *, int * );
-void astSetUnit_( AstFrame *, int, const char *, int * );
-void astValidateAxisSelection_( AstFrame *, int, const int *, const char *, int * );
-double astReadDateTime_( const char *, int * );
-const char *astFmtDecimalYr_( double, int, int * );
-void astLineOffset_( AstFrame *, AstLineDef *, double, double, double[2], int * );
-
-double astGetTop_( AstFrame *, int, int * );
-int astTestTop_( AstFrame *, int, int * );
-void astClearTop_( AstFrame *, int, int * );
-void astSetTop_( AstFrame *, int, double, int * );
-
-double astGetBottom_( AstFrame *, int, int * );
-int astTestBottom_( AstFrame *, int, int * );
-void astClearBottom_( AstFrame *, int, int * );
-void astSetBottom_( AstFrame *, int, double, int * );
-
-AstSystemType astGetSystem_( AstFrame *, int * );
-int astTestSystem_( AstFrame *, int * );
-void astClearSystem_( AstFrame *, int * );
-void astSetSystem_( AstFrame *, AstSystemType, int * );
-
-AstSystemType astGetAlignSystem_( AstFrame *, int * );
-int astTestAlignSystem_( AstFrame *, int * );
-void astClearAlignSystem_( AstFrame *, int * );
-void astSetAlignSystem_( AstFrame *, AstSystemType, int * );
-
-double astGetEpoch_( AstFrame *, int * );
-int astTestEpoch_( AstFrame *, int * );
-void astClearEpoch_( AstFrame *, int * );
-void astSetEpoch_( AstFrame *, double, int * );
-
-double astGetObsLon_( AstFrame *, int * );
-int astTestObsLon_( AstFrame *, int * );
-void astClearObsLon_( AstFrame *, int * );
-void astSetObsLon_( AstFrame *, double, int * );
-
-double astGetObsLat_( AstFrame *, int * );
-int astTestObsLat_( AstFrame *, int * );
-void astClearObsLat_( AstFrame *, int * );
-void astSetObsLat_( AstFrame *, double, int * );
-
-double astGetObsAlt_( AstFrame *, int * );
-int astTestObsAlt_( AstFrame *, int * );
-void astClearObsAlt_( AstFrame *, int * );
-void astSetObsAlt_( AstFrame *, double, int * );
-
-double astGetDut1_( AstFrame *, int * );
-int astTestDut1_( AstFrame *, int * );
-void astClearDut1_( AstFrame *, int * );
-void astSetDut1_( AstFrame *, double, int * );
-
-int astTestActiveUnit_( AstFrame *, int * );
-
-void astSetFrameFlags_( AstFrame *, int, int * );
-int astGetFrameFlags_( AstFrame *, int * );
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class to make
- them easier to invoke (e.g. to avoid type mis-matches when passing pointers
- to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them to
- validate their own arguments. We must use a cast when passing object
- pointers (so that they can accept objects from derived classes). */
-
-/* Check class membership. */
-#define astCheckFrame(this) astINVOKE_CHECK(Frame,this,0)
-#define astVerifyFrame(this) astINVOKE_CHECK(Frame,this,1)
-
-/* Test class membership. */
-#define astIsAFrame(this) astINVOKE_ISA(Frame,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected */
-#define astFrame astINVOKE(F,astFrame_)
-#else
-#define astFrame astINVOKE(F,astFrameId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitFrame(mem,size,init,vtab,name,naxes) \
-astINVOKE(O,astInitFrame_(mem,size,init,vtab,name,naxes,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitFrameVtab(vtab,name) astINVOKE(V,astInitFrameVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadFrame(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadFrame_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckFrame to validate Frame pointers before
- use. This provides a contextual error report if a pointer to the
- wrong sort of Object is supplied. */
-#define astConvert(from,to,domainlist) \
-astINVOKE(O,astConvert_(astCheckFrame(from),astCheckFrame(to),domainlist,STATUS_PTR))
-#define astAngle(this,a,b,c) \
-astINVOKE(V,astAngle_(astCheckFrame(this),a,b,c,STATUS_PTR))
-#define astDistance(this,point1,point2) \
-astINVOKE(V,astDistance_(astCheckFrame(this),point1,point2,STATUS_PTR))
-#define astFindFrame(target,template,domainlist) \
-astINVOKE(O,astFindFrame_(astCheckFrame(target),astCheckFrame(template),domainlist,STATUS_PTR))
-#define astMatchAxes(frm1,frm2,axes) \
-astINVOKE(V,astMatchAxes_(astCheckFrame(frm1),astCheckFrame(frm2),axes,STATUS_PTR))
-#define astNorm(this,value) \
-astINVOKE(V,astNorm_(astCheckFrame(this),value,STATUS_PTR))
-#define astAxDistance(this,axis,v1,v2) \
-astINVOKE(V,astAxDistance_(astCheckFrame(this),axis,v1,v2,STATUS_PTR))
-#define astAxOffset(this,axis,v1,dist) \
-astINVOKE(V,astAxOffset_(astCheckFrame(this),axis,v1,dist,STATUS_PTR))
-#define astOffset(this,point1,point2,offset,point3) \
-astINVOKE(V,astOffset_(astCheckFrame(this),point1,point2,offset,point3,STATUS_PTR))
-#define astAxAngle(this,a,b,axis) \
-astINVOKE(V,astAxAngle_(astCheckFrame(this),a,b,axis,STATUS_PTR))
-#define astIntersect(this,a1,a2,b1,b2,cross) \
-astINVOKE(V,astIntersect_(astCheckFrame(this),a1,a2,b1,b2,cross,STATUS_PTR))
-#define astOffset2(this,point1,angle,offset,point2) \
-astINVOKE(V,astOffset2_(astCheckFrame(this),point1,angle,offset,point2,STATUS_PTR))
-#define astResolve(this,point1,point2,point3,point4,d1,d2) \
-astINVOKE(V,astResolve_(astCheckFrame(this),point1,point2,point3,point4,d1,d2,STATUS_PTR))
-#define astGetActiveUnit(this) \
-astINVOKE(V,astGetActiveUnit_(astCheckFrame(this),STATUS_PTR))
-#define astSetActiveUnit(this,value) \
-astINVOKE(V,astSetActiveUnit_(astCheckFrame(this),value,STATUS_PTR))
-
-#if defined(astCLASS) /* Protected */
-#define astNormBox(this,lbnd,ubnd,reg) \
-astINVOKE(V,astNormBox_(astCheckFrame(this),lbnd,ubnd,astCheckMapping(reg),STATUS_PTR))
-#define astFormat(this,axis,value) \
-astINVOKE(V,astFormat_(astCheckFrame(this),axis,value,STATUS_PTR))
-#define astPermAxes(this,perm) \
-astINVOKE(V,astPermAxes_(astCheckFrame(this),perm,STATUS_PTR))
-#define astPickAxes(this,naxes,axes,map) \
-astINVOKE(O,astPickAxes_(astCheckFrame(this),naxes,axes,(AstMapping **)(map),STATUS_PTR))
-#define astUnformat(this,axis,string,value) \
-astINVOKE(V,astUnformat_(astCheckFrame(this),axis,string,value,STATUS_PTR))
-#else
-#define astFormat(this,axis,value) \
-astINVOKE(V,astFormatId_(astCheckFrame(this),axis,value,STATUS_PTR))
-#define astPermAxes(this,perm) \
-astINVOKE(V,astPermAxesId_(astCheckFrame(this),perm,STATUS_PTR))
-#define astPickAxes(this,naxes,axes,map) \
-astINVOKE(O,astPickAxesId_(astCheckFrame(this),naxes,axes,(AstMapping **)(map),STATUS_PTR))
-#define astUnformat(this,axis,string,value) \
-astINVOKE(V,astUnformatId_(astCheckFrame(this),axis,string,value,STATUS_PTR))
-#endif
-
-#if defined(astCLASS) /* Protected */
-#define astAxIn(this,axis,lo,hi,val,closed) \
-astINVOKE(V,astAxIn_(astCheckFrame(this),axis,lo,hi,val,closed,STATUS_PTR))
-#define astAbbrev(this,axis,fmt,str1,str2) \
-astINVOKE(V,astAbbrev_(astCheckFrame(this),axis,fmt,str1,str2,STATUS_PTR))
-#define astFields(this,axis,fmt,str,maxfld,fields,nc,val) \
-astINVOKE(V,astFields_(astCheckFrame(this),axis,fmt,str,maxfld,fields,nc,val,STATUS_PTR))
-#define astCheckPerm(this,perm,method) \
-astINVOKE(V,astCheckPerm_(astCheckFrame(this),perm,method,STATUS_PTR))
-#define astResolvePoints(this,p1,p2,in,out) \
-astINVOKE(O,astResolvePoints_(astCheckFrame(this),p1,p2,astCheckPointSet(in),((out)?astCheckPointSet(out):NULL),STATUS_PTR))
-#define astLineDef(this,p1,p2) \
-astINVOKE(V,astLineDef_(astCheckFrame(this),p1,p2,STATUS_PTR))
-#define astLineOffset(this,line,par,prp,point) \
-astINVOKE(V,astLineOffset_(astCheckFrame(this),line,par,prp,point,STATUS_PTR))
-#define astLineCrossing(this,l1,l2,cross) \
-astINVOKE(V,astLineCrossing_(astCheckFrame(this),l1,l2,cross,STATUS_PTR))
-#define astLineContains(this,l,def,point) \
-astINVOKE(V,astLineContains_(astCheckFrame(this),l,def,point,STATUS_PTR))
-#define astClearDigits(this) \
-astINVOKE(V,astClearDigits_(astCheckFrame(this),STATUS_PTR))
-#define astClearDirection(this,axis) \
-astINVOKE(V,astClearDirection_(astCheckFrame(this),axis,STATUS_PTR))
-#define astClearDomain(this) \
-astINVOKE(V,astClearDomain_(astCheckFrame(this),STATUS_PTR))
-#define astClearFormat(this,axis) \
-astINVOKE(V,astClearFormat_(astCheckFrame(this),axis,STATUS_PTR))
-#define astClearLabel(this,axis) \
-astINVOKE(V,astClearLabel_(astCheckFrame(this),axis,STATUS_PTR))
-#define astClearMatchEnd(this) \
-astINVOKE(V,astClearMatchEnd_(astCheckFrame(this),STATUS_PTR))
-#define astClearMaxAxes(this) \
-astINVOKE(V,astClearMaxAxes_(astCheckFrame(this),STATUS_PTR))
-#define astClearMinAxes(this) \
-astINVOKE(V,astClearMinAxes_(astCheckFrame(this),STATUS_PTR))
-#define astClearPermute(this) \
-astINVOKE(V,astClearPermute_(astCheckFrame(this),STATUS_PTR))
-#define astClearPreserveAxes(this) \
-astINVOKE(V,astClearPreserveAxes_(astCheckFrame(this),STATUS_PTR))
-#define astClearSymbol(this,axis) \
-astINVOKE(V,astClearSymbol_(astCheckFrame(this),axis,STATUS_PTR))
-#define astClearTitle(this) \
-astINVOKE(V,astClearTitle_(astCheckFrame(this),STATUS_PTR))
-#define astClearUnit(this,axis) \
-astINVOKE(V,astClearUnit_(astCheckFrame(this),axis,STATUS_PTR))
-#define astConvertX(to,from,domainlist) \
-astINVOKE(O,astConvertX_(astCheckFrame(to),astCheckFrame(from),domainlist,STATUS_PTR))
-#define astGap(this,axis,gap,ntick) \
-astINVOKE(V,astGap_(astCheckFrame(this),axis,gap,ntick,STATUS_PTR))
-#define astGetAxis(this,axis) \
-astINVOKE(O,astGetAxis_(astCheckFrame(this),axis,STATUS_PTR))
-#define astGetDigits(this) \
-astINVOKE(V,astGetDigits_(astCheckFrame(this),STATUS_PTR))
-#define astGetDirection(this,axis) \
-astINVOKE(V,astGetDirection_(astCheckFrame(this),axis,STATUS_PTR))
-#define astGetDomain(this) \
-astINVOKE(V,astGetDomain_(astCheckFrame(this),STATUS_PTR))
-#define astGetFormat(this,axis) \
-astINVOKE(V,astGetFormat_(astCheckFrame(this),axis,STATUS_PTR))
-#define astGetLabel(this,axis) \
-astINVOKE(V,astGetLabel_(astCheckFrame(this),axis,STATUS_PTR))
-#define astGetMatchEnd(this) \
-astINVOKE(V,astGetMatchEnd_(astCheckFrame(this),STATUS_PTR))
-#define astGetMaxAxes(this) \
-astINVOKE(V,astGetMaxAxes_(astCheckFrame(this),STATUS_PTR))
-#define astGetMinAxes(this) \
-astINVOKE(V,astGetMinAxes_(astCheckFrame(this),STATUS_PTR))
-#define astGetNaxes(this) \
-astINVOKE(V,astGetNaxes_(astCheckFrame(this),STATUS_PTR))
-#define astGetPerm(this) \
-astINVOKE(V,astGetPerm_(astCheckFrame(this),STATUS_PTR))
-#define astGetPermute(this) \
-astINVOKE(V,astGetPermute_(astCheckFrame(this),STATUS_PTR))
-#define astGetPreserveAxes(this) \
-astINVOKE(V,astGetPreserveAxes_(astCheckFrame(this),STATUS_PTR))
-#define astGetSymbol(this,axis) \
-astINVOKE(V,astGetSymbol_(astCheckFrame(this),axis,STATUS_PTR))
-#define astGetTitle(this) \
-astINVOKE(V,astGetTitle_(astCheckFrame(this),STATUS_PTR))
-#define astGetUnit(this,axis) \
-astINVOKE(V,astGetUnit_(astCheckFrame(this),axis,STATUS_PTR))
-#define astGetNormUnit(this,axis) \
-astINVOKE(V,astGetNormUnit_(astCheckFrame(this),axis,STATUS_PTR))
-#define astMatch(template,target,template_axes,target_axes,map,result) \
-astINVOKE(V,astMatch_(astCheckFrame(template),astCheckFrame(target),template_axes,target_axes,(AstMapping **)(map),(AstFrame **)(result),STATUS_PTR))
-#define astIsUnitFrame(this) \
-astINVOKE(V,astIsUnitFrame_(astCheckFrame(this),STATUS_PTR))
-#define astOverlay(template,template_axes,result) \
-astINVOKE(V,astOverlay_(astCheckFrame(template),template_axes,astCheckFrame(result),STATUS_PTR))
-#define astPrimaryFrame(this,axis1,frame,axis2) \
-astINVOKE(V,astPrimaryFrame_(astCheckFrame(this),axis1,(AstFrame **)(frame),axis2,STATUS_PTR))
-#define astSetAxis(this,axis,newaxis) \
-astINVOKE(V,astSetAxis_(astCheckFrame(this),axis,astCheckAxis(newaxis),STATUS_PTR))
-#define astSetDigits(this,digits) \
-astINVOKE(V,astSetDigits_(astCheckFrame(this),digits,STATUS_PTR))
-#define astSetDirection(this,axis,direction) \
-astINVOKE(V,astSetDirection_(astCheckFrame(this),axis,direction,STATUS_PTR))
-#define astSetDomain(this,domain) \
-astINVOKE(V,astSetDomain_(astCheckFrame(this),domain,STATUS_PTR))
-#define astSetFormat(this,axis,format) \
-astINVOKE(V,astSetFormat_(astCheckFrame(this),axis,format,STATUS_PTR))
-#define astSetLabel(this,axis,label) \
-astINVOKE(V,astSetLabel_(astCheckFrame(this),axis,label,STATUS_PTR))
-#define astSetMatchEnd(this,value) \
-astINVOKE(V,astSetMatchEnd_(astCheckFrame(this),value,STATUS_PTR))
-#define astSetMaxAxes(this,value) \
-astINVOKE(V,astSetMaxAxes_(astCheckFrame(this),value,STATUS_PTR))
-#define astSetMinAxes(this,value) \
-astINVOKE(V,astSetMinAxes_(astCheckFrame(this),value,STATUS_PTR))
-#define astSetPermute(this,value) \
-astINVOKE(V,astSetPermute_(astCheckFrame(this),value,STATUS_PTR))
-#define astSetPreserveAxes(this,value) \
-astINVOKE(V,astSetPreserveAxes_(astCheckFrame(this),value,STATUS_PTR))
-#define astSetSymbol(this,axis,symbol) \
-astINVOKE(V,astSetSymbol_(astCheckFrame(this),axis,symbol,STATUS_PTR))
-#define astSetTitle(this,title) \
-astINVOKE(V,astSetTitle_(astCheckFrame(this),title,STATUS_PTR))
-#define astSetUnit(this,axis,unit) \
-astINVOKE(V,astSetUnit_(astCheckFrame(this),axis,unit,STATUS_PTR))
-#define astSubFrame(target,template,result_naxes,target_axes,template_axes,map,result) \
-astINVOKE(V,astSubFrame_(astCheckFrame(target),template?astCheckFrame(template):NULL,result_naxes,target_axes,template_axes,(AstMapping **)(map),(AstFrame **)(result),STATUS_PTR))
-#define astTestDigits(this) \
-astINVOKE(V,astTestDigits_(astCheckFrame(this),STATUS_PTR))
-#define astTestDirection(this,axis) \
-astINVOKE(V,astTestDirection_(astCheckFrame(this),axis,STATUS_PTR))
-#define astTestDomain(this) \
-astINVOKE(V,astTestDomain_(astCheckFrame(this),STATUS_PTR))
-#define astTestFormat(this,axis) \
-astINVOKE(V,astTestFormat_(astCheckFrame(this),axis,STATUS_PTR))
-#define astTestLabel(this,axis) \
-astINVOKE(V,astTestLabel_(astCheckFrame(this),axis,STATUS_PTR))
-#define astTestMatchEnd(this) \
-astINVOKE(V,astTestMatchEnd_(astCheckFrame(this),STATUS_PTR))
-#define astTestMaxAxes(this) \
-astINVOKE(V,astTestMaxAxes_(astCheckFrame(this),STATUS_PTR))
-#define astTestMinAxes(this) \
-astINVOKE(V,astTestMinAxes_(astCheckFrame(this),STATUS_PTR))
-#define astTestPermute(this) \
-astINVOKE(V,astTestPermute_(astCheckFrame(this),STATUS_PTR))
-#define astTestPreserveAxes(this) \
-astINVOKE(V,astTestPreserveAxes_(astCheckFrame(this),STATUS_PTR))
-#define astTestSymbol(this,axis) \
-astINVOKE(V,astTestSymbol_(astCheckFrame(this),axis,STATUS_PTR))
-#define astTestTitle(this) \
-astINVOKE(V,astTestTitle_(astCheckFrame(this),STATUS_PTR))
-#define astTestUnit(this,axis) \
-astINVOKE(V,astTestUnit_(astCheckFrame(this),axis,STATUS_PTR))
-#define astValidateAxis(this,axis,method) \
-astINVOKE(V,astValidateAxis_(astCheckFrame(this),axis,method,STATUS_PTR))
-#define astValidateAxisSelection(this,naxes,axes,method) \
-astINVOKE(V,astValidateAxisSelection_(astCheckFrame(this),naxes,axes,method,STATUS_PTR))
-
-#define astMatchAxesX(frm2,frm1,axes) \
-astINVOKE(V,astMatchAxesX_(astCheckFrame(frm2),astCheckFrame(frm1),axes,STATUS_PTR))
-
-#define astFmtDecimalYr(year,digits) astFmtDecimalYr_(year,digits,STATUS_PTR)
-#define astReadDateTime(value) astReadDateTime_(value,STATUS_PTR)
-
-#define astValidateSystem(this,system,method) \
-astINVOKE(V,astValidateSystem_(astCheckFrame(this),system,method,STATUS_PTR))
-#define astSystemString(this,system) \
-astINVOKE(V,astSystemString_(astCheckFrame(this),system,STATUS_PTR))
-#define astSystemCode(this,system) \
-astINVOKE(V,astSystemCode_(astCheckFrame(this),system,STATUS_PTR))
-
-#define astClearTop(this,axis) \
-astINVOKE(V,astClearTop_(astCheckFrame(this),axis,STATUS_PTR))
-#define astGetTop(this,axis) \
-astINVOKE(V,astGetTop_(astCheckFrame(this),axis,STATUS_PTR))
-#define astSetTop(this,axis,value) \
-astINVOKE(V,astSetTop_(astCheckFrame(this),axis,value,STATUS_PTR))
-#define astTestTop(this,axis) \
-astINVOKE(V,astTestTop_(astCheckFrame(this),axis,STATUS_PTR))
-
-#define astClearBottom(this,axis) \
-astINVOKE(V,astClearBottom_(astCheckFrame(this),axis,STATUS_PTR))
-#define astGetBottom(this,axis) \
-astINVOKE(V,astGetBottom_(astCheckFrame(this),axis,STATUS_PTR))
-#define astSetBottom(this,axis,value) \
-astINVOKE(V,astSetBottom_(astCheckFrame(this),axis,value,STATUS_PTR))
-#define astTestBottom(this,axis) \
-astINVOKE(V,astTestBottom_(astCheckFrame(this),axis,STATUS_PTR))
-
-#define astClearSystem(this) \
-astINVOKE(V,astClearSystem_(astCheckFrame(this),STATUS_PTR))
-#define astGetSystem(this) \
-astINVOKE(V,astGetSystem_(astCheckFrame(this),STATUS_PTR))
-#define astSetSystem(this,value) \
-astINVOKE(V,astSetSystem_(astCheckFrame(this),value,STATUS_PTR))
-#define astTestSystem(this) \
-astINVOKE(V,astTestSystem_(astCheckFrame(this),STATUS_PTR))
-
-#define astClearAlignSystem(this) \
-astINVOKE(V,astClearAlignSystem_(astCheckFrame(this),STATUS_PTR))
-#define astGetAlignSystem(this) \
-astINVOKE(V,astGetAlignSystem_(astCheckFrame(this),STATUS_PTR))
-#define astSetAlignSystem(this,value) \
-astINVOKE(V,astSetAlignSystem_(astCheckFrame(this),value,STATUS_PTR))
-#define astTestAlignSystem(this) \
-astINVOKE(V,astTestAlignSystem_(astCheckFrame(this),STATUS_PTR))
-
-#define astClearEpoch(this) \
-astINVOKE(V,astClearEpoch_(astCheckFrame(this),STATUS_PTR))
-#define astGetEpoch(this) \
-astINVOKE(V,astGetEpoch_(astCheckFrame(this),STATUS_PTR))
-#define astSetEpoch(this,value) \
-astINVOKE(V,astSetEpoch_(astCheckFrame(this),value,STATUS_PTR))
-#define astTestEpoch(this) \
-astINVOKE(V,astTestEpoch_(astCheckFrame(this),STATUS_PTR))
-
-#define astGetObsLon(this) \
-astINVOKE(V,astGetObsLon_(astCheckFrame(this),STATUS_PTR))
-#define astTestObsLon(this) \
-astINVOKE(V,astTestObsLon_(astCheckFrame(this),STATUS_PTR))
-#define astClearObsLon(this) \
-astINVOKE(V,astClearObsLon_(astCheckFrame(this),STATUS_PTR))
-#define astSetObsLon(this,value) \
-astINVOKE(V,astSetObsLon_(astCheckFrame(this),value,STATUS_PTR))
-
-#define astGetObsLat(this) \
-astINVOKE(V,astGetObsLat_(astCheckFrame(this),STATUS_PTR))
-#define astTestObsLat(this) \
-astINVOKE(V,astTestObsLat_(astCheckFrame(this),STATUS_PTR))
-#define astClearObsLat(this) \
-astINVOKE(V,astClearObsLat_(astCheckFrame(this),STATUS_PTR))
-#define astSetObsLat(this,value) \
-astINVOKE(V,astSetObsLat_(astCheckFrame(this),value,STATUS_PTR))
-
-#define astGetObsAlt(this) \
-astINVOKE(V,astGetObsAlt_(astCheckFrame(this),STATUS_PTR))
-#define astTestObsAlt(this) \
-astINVOKE(V,astTestObsAlt_(astCheckFrame(this),STATUS_PTR))
-#define astClearObsAlt(this) \
-astINVOKE(V,astClearObsAlt_(astCheckFrame(this),STATUS_PTR))
-#define astSetObsAlt(this,value) \
-astINVOKE(V,astSetObsAlt_(astCheckFrame(this),value,STATUS_PTR))
-
-#define astClearDut1(this) \
-astINVOKE(V,astClearDut1_(astCheckFrame(this),STATUS_PTR))
-#define astGetDut1(this) \
-astINVOKE(V,astGetDut1_(astCheckFrame(this),STATUS_PTR))
-#define astSetDut1(this,value) \
-astINVOKE(V,astSetDut1_(astCheckFrame(this),value,STATUS_PTR))
-#define astTestDut1(this) \
-astINVOKE(V,astTestDut1_(astCheckFrame(this),STATUS_PTR))
-
-#define astTestActiveUnit(this) \
-astINVOKE(V,astTestActiveUnit_(astCheckFrame(this),STATUS_PTR))
-
-#define astSetFrameFlags(this,flags) \
-astINVOKE(V,astSetFrameFlags_(astCheckFrame(this),flags,STATUS_PTR))
-#define astGetFrameFlags(this) \
-astINVOKE(V,astGetFrameFlags_(astCheckFrame(this),STATUS_PTR))
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/frameset.c b/ast-5.3-1/frameset.c
deleted file mode 100644
index 1e7efcb..0000000
--- a/ast-5.3-1/frameset.c
+++ /dev/null
@@ -1,11408 +0,0 @@
-/*
-*class++
-* Name:
-* FrameSet
-
-* Purpose:
-* Set of inter-related coordinate systems.
-
-* Constructor Function:
-c astFrameSet
-f AST_FRAMESET
-
-* Description:
-* A FrameSet consists of a set of one or more Frames (which
-* describe coordinate systems), connected together by Mappings
-* (which describe how the coordinate systems are inter-related). A
-* FrameSet makes it possible to obtain a Mapping between any pair
-* of these Frames (i.e. to convert between any of the coordinate
-* systems which it describes). The individual Frames are
-* identified within the FrameSet by an integer index, with Frames
-* being numbered consecutively from one as they are added to the
-* FrameSet.
-*
-* Every FrameSet has a "base" Frame and a "current" Frame (which
-* are allowed to be the same). Any of the Frames may be nominated
-* to hold these positions, and the choice is determined by the
-* values of the FrameSet's Base and Current attributes, which hold
-* the indices of the relevant Frames. By default, the first Frame
-* added to a FrameSet is its base Frame, and the last one added is
-* its current Frame.
-*
-* The base Frame describes the "native" coordinate system of
-* whatever the FrameSet is used to calibrate (e.g. the pixel
-* coordinates of an image) and the current Frame describes the
-* "apparent" coordinate system in which it should be viewed
-* (e.g. displayed, etc.). Any further Frames represent a library
-* of alternative coordinate systems, which may be selected by
-* making them current.
-*
-* When a FrameSet is used in a context that requires a Frame,
-* (e.g. obtaining its Title value, or number of axes), the current
-* Frame is used. A FrameSet may therefore be used in place of its
-* current Frame in most situations.
-*
-* When a FrameSet is used in a context that requires a Mapping,
-* the Mapping used is the one between its base Frame and its
-* current Frame. Thus, a FrameSet may be used to convert "native"
-* coordinates into "apparent" ones, and vice versa. Like any
-c Mapping, a FrameSet may also be inverted (see astInvert), which
-f Mapping, a FrameSet may also be inverted (see AST_INVERT), which
-* has the effect of interchanging its base and current Frames and
-* hence of reversing the Mapping between them.
-*
-* Regions may be added into a FrameSet (since a Region is a type of
-* Frame), either explicitly or as components within CmpFrames. In this
-* case the Mapping between a pair of Frames within a FrameSet will
-* include the effects of the clipping produced by any Regions included
-* in the path between the Frames.
-
-* Inheritance:
-* The FrameSet class inherits from the Frame class.
-
-* Attributes:
-* In addition to those attributes common to all Frames, every
-* FrameSet also has the following attributes:
-*
-* - Base: FrameSet base Frame index
-* - Current: FrameSet current Frame index
-* - Nframe: Number of Frames in a FrameSet
-*
-* Every FrameSet also inherits any further attributes that belong
-* to its current Frame, regardless of that Frame's class. (For
-* example, the Equinox attribute, defined by the SkyFrame class, is
-* inherited by any FrameSet which has a SkyFrame as its current
-* Frame.) The set of attributes belonging to a FrameSet may therefore
-* change when a new current Frame is selected.
-
-* Functions:
-c In addition to those functions applicable to all Frames, the
-c following functions may also be applied to all FrameSets:
-f In addition to those routines applicable to all Frames, the
-f following routines may also be applied to all FrameSets:
-*
-c - astAddFrame: Add a Frame to a FrameSet to define a new coordinate
-c system
-c - astGetFrame: Obtain a pointer to a specified Frame in a FrameSet
-c - astGetMapping: Obtain a Mapping between two Frames in a FrameSet
-c - astRemapFrame: Modify a Frame's relationship to the other Frames in a
-c FrameSet
-c - astRemoveFrame: Remove a Frame from a FrameSet
-f - AST_ADDFRAME: Add a Frame to a FrameSet to define a new coordinate
-f system
-f - AST_GETFRAME: Obtain a pointer to a specified Frame in a FrameSet
-f - AST_GETMAPPING: Obtain a Mapping between two Frames in a FrameSet
-f - AST_REMAPFRAME: Modify a Frame's relationship to the other Frames in a
-f FrameSet
-f - AST_REMOVEFRAME: Remove a Frame from a FrameSet
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 16-FEB-1996 (RFWS):
-* Original version.
-* 5-JUN-1996 (RFWS):
-* Tidied up, etc.
-* 2-JUL-1996 (RFWS):
-* Fixed bug in astRemoveFrame which caused the base/current
-* Frame index to be wrong.
-* 12-JUL-1996 (RFWS):
-* Over-ride the astReportPoints method to provide
-* Frame-specific formatting.
-* 12-AUG-1996 (RFWS):
-* Upgraded to provide a public interface, plus improvements to
-* astAlign and the handling of nodes as Frames are
-* added/removed.
-* 11-SEP-1996 (RFWS):
-* Added Gap.
-* 25-SEP-1996 (RFWS):
-* Added I/O facilities.
-* 30-MAY-1997 (RFWS):
-* Add special treatment for the ID attribute (which is not
-* derived from the current Frame).
-* 10-JUN-1997 (RFWS):
-* Rationalised the astConvert implementation.
-* 11-JUN-1997 (RFWS):
-* Added the FindFrame implementation.
-* 27-JUN-1997 (RFWS):
-* Fixed bug which caused certain Mapping attributes to be
-* handled by the current Frame instead of by the member
-* functions defined by this class.
-* 3-JUL-1997 (RFWS):
-* Fixed bug: failing to extend the invert array in
-* astRemapFrame.
-* 10-JUL-1997 (RFWS):
-* Over-ride the astSimplify method.
-* 14-NOV-1997 (RFWS):
-* Fixed error in loop implementing search over domains in
-* FindFrame.
-* 20-NOV-1997 (RFWS):
-* Fixed bug in default Base and Current attribute values when a
-* FrameSet has been inverted.
-* 20-NOV-1997 (RFWS):
-* Modified astConvert to use the current Frame of the "to"
-* FrameSet as the destination coordinate system (instead of the
-* base Frame) and to modify its Base attribute instead of its
-* Current attribute.
-* 22-DEC-1997 (RFWS):
-* Further modified astConvert to convert from the Current Frame
-* of the "from" FrameSet and to modify its Base
-* attribute. Frame search order also reversed if the Invert
-* attribute is non-zero for either FrameSet.
-* 19-JAN-1998 (RFWS):
-* Installed the TidyNodes function.
-* 20-JAN-1998 (RFWS):
-* Implemented preservation of FrameSet integrity when attribute
-* values associated with the current Frame are modified.
-* 24-FEB-1998 (RFWS):
-* Added the ForceCopy function to allow integrity to be preserved
-* when there are multiple references to the same Frame.
-* 25-FEB-1998 (RFWS):
-* Over-ride the astUnformat method.
-* 24-MAR-1998 (RFWS):
-* Fixed unterminated comment causing problems in CombineMaps.
-* 6-APR-1998 (RFWS):
-* Fixed another unterminated comment in CombineMaps.
-* 27-MAY-1998 (RFWS):
-* Fixed bug: failure to record new invert flag value after
-* simplifying a CmpMap in TidyNodes.
-* 17-DEC-2002 (DSB):
-* Override accessors for Frame attributes Top, Bottom, Epoch,
-* System, AlignSystem and ActiveUnit.
-* 8-JAN-2003 (DSB):
-* Changed private InitVtab method to protected astInitFrameSetVtab
-* method.
-* 24-JAN-2004 (DSB):
-* o Override the astFields method.
-* o Add argument "fmt" to Abbrev.
-* 23-MAR-2004 (DSB):
-* Modified astGetMapping and Span to include the clipping effect of
-* any Regions in the path between the two supplied Frames.
-* 24-AUG-2004 (DSB):
-* - Override various methods inherited from Frame (astAngle,
-* astAxAngle, astAxDistance, astAxOffset, astCheckPerm, astOffset2,
-* astResolve, astSystemCode, astSystemString, astValidateSystem,
-* astValidateAxisSelection). These should have been overridden a
-* long time ago!
-* 8-SEP-2004 (DSB):
-* Override astResolvePoints.
-* 12-MAY-2005 (DSB):
-* Override astNormBox method.
-* 12-AUG-2005 (DSB):
-* Override ObsLat and ObsLon accessor methods.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 15-MAY-2006 (DSB):
-* Override astEqual.
-* 30-JUN-2006 (DSB):
-* Allow astAbbrev to have a null "str1" value.
-* 22-JUN-2007 (DSB):
-* Modify VSet to avoid using the args va_list twice since the
-* first use (by the parent VSet function) invalidates the va_list
-* causing a segvio to be generated by the second use (when
-* formatting an error message).
-* 11-JAN-2008 (DSB):
-* Override the astRate method.
-* 17-NOV-2008 (DSB):
-* Correct parent class in invocation of astMAKE_ISA.
-* 14-JAN-2009 (DSB):
-* Override the astIntersect method.
-* 18-JUN-2009 (DSB):
-* Override ObsAlt accessor methods.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS FrameSet
-
-/*
-* Name:
-* MAKE_CLEAR
-
-* Purpose:
-* Define a function to clear an attribute value for a FrameSet.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "frameset.h"
-* MAKE_CLEAR(attribute)
-
-* Class Membership:
-* Defined by the FrameSet class.
-
-* Description:
-* This macro expands to an implementation of a private member function
-* of the form:
-*
-* static void Clear<Attribute>( AstFrame *this )
-*
-* that clears the value of a specified attribute for the current Frame
-* of a FrameSet (this). This function is intended to over-ride the
-* astClear<Attribute> method inherited from the Frame class.
-
-* Parameters:
-* attribute
-* Name of the attribute, as it appears in the function name.
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attribute) \
-static void Clear##attribute( AstFrame *this_frame, int *status ) { \
-\
-/* Local Variables: */ \
- AstFrame *fr; /* Pointer to current Frame */ \
- AstFrameSet *this; /* Pointer to the FrameSet structure */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Obtain a pointer to the FrameSet structure. */ \
- this = (AstFrameSet *) this_frame; \
-\
-/* Obtain a pointer to the current Frame and invoke its astClear<Attribute> \
- method. Annul the Frame pointer afterwards. */ \
- fr = astGetFrame( this, AST__CURRENT ); \
- astClear##attribute( fr ); \
- fr = astAnnul( fr ); \
-}
-
-/*
-* Name:
-* MAKE_CLEAR_AXIS
-
-* Purpose:
-* Define a function to clear an attribute value for a FrameSet axis.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "frameset.h"
-* MAKE_CLEAR_AXIS(attribute)
-
-* Class Membership:
-* Defined by the FrameSet class.
-
-* Description:
-* This macro expands to an implementation of a private member function
-* of the form:
-*
-* static void Clear<Attribute>( AstFrame *this, int axis )
-*
-* that clears the value of a specified attribute for an axis of
-* the current Frame of a FrameSet (this). This function is
-* intended to over-ride the astClear<Attribute> method inherited
-* from the Frame class.
-
-* Parameters:
-* attribute
-* Name of the attribute, as it appears in the function name.
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR_AXIS(attribute) \
-static void Clear##attribute( AstFrame *this_frame, int axis, int *status ) { \
-\
-/* Local Variables: */ \
- AstFrame *fr; /* Pointer to current Frame */ \
- AstFrameSet *this; /* Pointer to the FrameSet structure */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Obtain a pointer to the FrameSet structure. */ \
- this = (AstFrameSet *) this_frame; \
-\
-/* Validate the axis index supplied. */ \
- (void) astValidateAxis( this, axis, "astClear" #attribute ); \
-\
-/* Obtain a pointer to the FrameSet's current Frame and invoke its \
- astClear<Attribute> method. Annul the Frame pointer afterwards. */ \
- fr = astGetFrame( this, AST__CURRENT ); \
- astClear##attribute( fr, axis ); \
- fr = astAnnul( fr ); \
-}
-
-/*
-* Name:
-* MAKE_GET
-
-* Purpose:
-* Define a function to get an attribute value for a FrameSet.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "frameset.h"
-* MAKE_GET(attribute,type)
-
-* Class Membership:
-* Defined by the FrameSet class.
-
-* Description:
-* This macro expands to an implementation of a private member function
-* of the form:
-*
-* static <type> Get<Attribute>( AstFrame *this )
-*
-* that gets the value of a specified attribute for the current Frame
-* of a FrameSet (this). This function is intended to over-ride the
-* astGet<Attribute> method inherited from the Frame class.
-
-* Parameters:
-* attribute
-* Name of the attribute, as it appears in the function name.
-* type
-* The C type of the attribute.
-*/
-
-/* Define the macro. */
-#define MAKE_GET(attribute,type) \
-static type Get##attribute( AstFrame *this_frame, int *status ) { \
-\
-/* Local Variables: */ \
- AstFrame *fr; /* Pointer to current Frame */ \
- AstFrameSet *this; /* Pointer to the FrameSet structure */ \
- type result; /* Value to return */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return (type) 0; \
-\
-/* Obtain a pointer to the FrameSet structure. */ \
- this = (AstFrameSet *) this_frame; \
-\
-/* Obtain a pointer to the current Frame and invoke its \
- astGet<Attribute> method. Annul the Frame pointer afterwards. */ \
- fr = astGetFrame( this, AST__CURRENT ); \
- result = astGet##attribute( fr ); \
- fr = astAnnul( fr ); \
-\
-/* If an error occurred, clear the result value. */ \
- if ( !astOK ) result = (type) 0; \
-\
-/* Return the result. */ \
- return result; \
-}
-
-/*
-* Name:
-* MAKE_GET_AXIS
-
-* Purpose:
-* Define a function to get an attribute value for a FrameSet axis.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "frameset.h"
-* MAKE_GET_AXIS(attribute,type)
-
-* Class Membership:
-* Defined by the FrameSet class.
-
-* Description:
-* This macro expands to an implementation of a private member function
-* of the form:
-*
-* static <type> Get<Attribute>( AstFrame *this, int axis )
-*
-* that gets the value of a specified attribute for an axis of the
-* current Frame of a FrameSet (this). This function is intended to
-* over-ride the astGet<Attribute> method inherited from the Frame
-* class.
-
-* Parameters:
-* attribute
-* Name of the attribute, as it appears in the function name.
-* type
-* The C type of the attribute.
-*/
-
-/* Define the macro. */
-#define MAKE_GET_AXIS(attribute,type) \
-static type Get##attribute( AstFrame *this_frame, int axis, int *status ) { \
-\
-/* Local Variables: */ \
- AstFrame *fr; /* Pointer to current Frame */ \
- AstFrameSet *this; /* Pointer to the FrameSet structure */ \
- type result; /* Value to return */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return (type) 0; \
-\
-/* Obtain a pointer to the FrameSet structure. */ \
- this = (AstFrameSet *) this_frame; \
-\
-/* Validate the axis index supplied. */ \
- (void) astValidateAxis( this, axis, "astGet" #attribute ); \
-\
-/* Obtain a pointer to the FrameSet's current Frame and invoke its \
- astGet<Attribute> method. Annul the Frame pointer afterwards. */ \
- fr = astGetFrame( this, AST__CURRENT ); \
- result = astGet##attribute( fr, axis ); \
- fr = astAnnul( fr ); \
-\
-/* If an error occurred, clear the result value. */ \
- if ( !astOK ) result = (type) 0; \
-\
-/* Return the result. */ \
- return result; \
-}
-
-/*
-* Name:
-* MAKE_SET
-
-* Purpose:
-* Define a function to set an attribute value for a FrameSet.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "frameset.h"
-* MAKE_SET(attribute,type)
-
-* Class Membership:
-* Defined by the FrameSet class.
-
-* Description:
-* This macro expands to an implementation of a private member function
-* of the form:
-*
-* static void Set<Attribute>( AstFrame *this, <type> value )
-*
-* that sets the value of a specified attribute for the current Frame
-* of a FrameSet (this). This function is intended to over-ride the
-* astSet<Attribute> method inherited from the Frame class.
-
-* Parameters:
-* attribute
-* Name of the attribute, as it appears in the function name.
-* type
-* The C type of the attribute.
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attribute,type) \
-static void Set##attribute( AstFrame *this_frame, type value, int *status ) { \
-\
-/* Local Variables: */ \
- AstFrame *fr; /* Pointer to current Frame */ \
- AstFrameSet *this; /* Pointer to the FrameSet structure */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Obtain a pointer to the FrameSet structure. */ \
- this = (AstFrameSet *) this_frame; \
-\
-/* Obtain a pointer to the FrameSet's current Frame and invoke its \
- astSet<Attribute> method. Annul the Frame pointer afterwards. */ \
- fr = astGetFrame( this, AST__CURRENT ); \
- astSet##attribute( fr, value ); \
- fr = astAnnul( fr ); \
-}
-
-/*
-* Name:
-* MAKE_SET_AXIS
-
-* Purpose:
-* Define a function to set an attribute value for a FrameSet axis.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "frameset.h"
-* MAKE_SET_AXIS(attribute,type)
-
-* Class Membership:
-* Defined by the FrameSet class.
-
-* Description:
-* This macro expands to an implementation of a private member function
-* of the form:
-*
-* static void Set<Attribute>( AstFrame *this, int axis, <type> value )
-*
-* that sets the value of a specified attribute for an axis of the
-* current Frame of a FrameSet (this). This function is intended to
-* over-ride the astSet<Attribute> method inherited from the Frame
-* class.
-
-* Parameters:
-* attribute
-* Name of the attribute, as it appears in the function name.
-* type
-* The C type of the attribute.
-*/
-
-/* Define the macro. */
-#define MAKE_SET_AXIS(attribute,type) \
-static void Set##attribute( AstFrame *this_frame, int axis, type value, int *status ) { \
-\
-/* Local Variables: */ \
- AstFrame *fr; /* Pointer to current Frame */ \
- AstFrameSet *this; /* Pointer to the FrameSet structure */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Obtain a pointer to the FrameSet structure. */ \
- this = (AstFrameSet *) this_frame; \
-\
-/* Validate the axis index supplied. */ \
- (void) astValidateAxis( this, axis, "astSet" #attribute ); \
-\
-/* Obtain a pointer to the FrameSet's current Frame and invoke its \
- astSet<Attribute> method. Annul the Frame pointer afterwards. */ \
- fr = astGetFrame( this, AST__CURRENT ); \
- astSet##attribute( fr, axis, value ); \
- fr = astAnnul( fr ); \
-}
-
-/*
-* Name:
-* MAKE_TEST
-
-* Purpose:
-* Define a function to test if an attribute value is set for a FrameSet.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "frameset.h"
-* MAKE_TEST(attribute)
-
-* Class Membership:
-* Defined by the FrameSet class.
-
-* Description:
-* This macro expands to an implementation of a private member function
-* of the form:
-*
-* static int Test<Attribute>( AstFrame *this )
-*
-* that returns a boolean result (0 or 1) to indicate if the value
-* of a specified attribute for the current Frame of a FrameSet
-* (this) is set. This function is intended to over-ride the
-* astTest<Attribute> method inherited from the Frame class.
-
-* Parameters:
-* attribute
-* Name of the attribute, as it appears in the function name.
-*/
-
-/* Define the macro. */
-#define MAKE_TEST(attribute) \
-static int Test##attribute( AstFrame *this_frame, int *status ) { \
-\
-/* Local Variables: */ \
- AstFrame *fr; /* Pointer to current Frame */ \
- AstFrameSet *this; /* Pointer to FrameSet structure */ \
- int result; /* Result to return */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return 0; \
-\
-/* Obtain a pointer to the FrameSet structure. */ \
- this = (AstFrameSet *) this_frame; \
-\
-/* Obtain a pointer to the FrameSet's current Frame and invoke its \
- astTest<Attribute> method. Annul the Frame pointer afterwards. */ \
- fr = astGetFrame( this, AST__CURRENT ); \
- result = astTest##attribute( fr ); \
- fr = astAnnul( fr ); \
-\
-/* If an error occurred, clear the result value. */ \
- if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
- return result; \
-}
-
-/*
-* Name:
-* MAKE_TEST_AXIS
-
-* Purpose:
-* Define a function to test if an attribute value is set for a FrameSet
-* axis.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "frameset.h"
-* MAKE_TEST_AXIS(attribute)
-
-* Class Membership:
-* Defined by the FrameSet class.
-
-* Description:
-* This macro expands to an implementation of a private member function
-* of the form:
-*
-* static int Test<Attribute>( AstFrame *this, int axis )
-*
-* that returns a boolean result (0 or 1) to indicate if the value
-* of a specified attribute for an axis of the current Frame of a
-* FrameSet (this) is set. This function is intended to over-ride
-* the astTest<Attribute> method inherited from the Frame class.
-
-* Parameters:
-* attribute
-* Name of the attribute, as it appears in the function name.
-*/
-
-/* Define the macro. */
-#define MAKE_TEST_AXIS(attribute) \
-static int Test##attribute( AstFrame *this_frame, int axis, int *status ) { \
-\
-/* Local Variables: */ \
- AstFrame *fr; /* Pointer to current Frame */ \
- AstFrameSet *this; /* Pointer to the FrameSet structure */ \
- int result; /* Value to return */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return 0; \
-\
-/* Obtain a pointer to the FrameSet structure. */ \
- this = (AstFrameSet *) this_frame; \
-\
-/* Validate the axis index supplied. */ \
- (void) astValidateAxis( this, axis, "astTest" #attribute ); \
-\
-/* Obtain a pointer to the FrameSet's current Frame and invoke its \
- astTest<Attribute> method. Annul the Frame pointer afterwards. */ \
- fr = astGetFrame( this, AST__CURRENT ); \
- result = astTest##attribute( fr, axis ); \
- fr = astAnnul( fr ); \
-\
-/* If an error occurred, clear the result value. */ \
- if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
- return result; \
-}
-
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "mapping.h" /* Coordinate Mappings */
-#include "unitmap.h" /* Unit Mappings */
-#include "permmap.h" /* Coordinate permutation Mappings */
-#include "cmpmap.h" /* Compound Mappings */
-#include "frame.h" /* Parent Frame class */
-#include "frameset.h" /* Interface definition for this class */
-#include "globals.h" /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <limits.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static void (* parent_clear)( AstObject *, const char *, int * );
-static int (* parent_getusedefs)( AstObject *, int * );
-static void (* parent_vset)( AstObject *, const char *, char **, va_list, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->GetAttrib_Buff[ 0 ] = 0; \
- globals->Integrity_Frame = NULL; \
- globals->Integrity_Method = ""; \
- globals->Integrity_Lost = 0; \
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(FrameSet)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(FrameSet,Class_Init)
-#define class_vtab astGLOBAL(FrameSet,Class_Vtab)
-#define getattrib_buff astGLOBAL(FrameSet,GetAttrib_Buff)
-#define integrity_frame astGLOBAL(FrameSet,Integrity_Frame)
-#define integrity_method astGLOBAL(FrameSet,Integrity_Method)
-#define integrity_lost astGLOBAL(FrameSet,Integrity_Lost)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-/* Buffer returned by GetAttrib. */
-static char getattrib_buff[ 51 ];
-
-/* Variables associated with preserving FrameSet integrity. */
-static AstFrame *integrity_frame = NULL; /* Pointer to copy of current Frame */
-static const char *integrity_method = ""; /* Name of method being used */
-static int integrity_lost = 0; /* Current Frame modified? */
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstFrameSetVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static int GetObjSize( AstObject *, int * );
-static AstAxis *GetAxis( AstFrame *, int, int * );
-static AstFrame *GetFrame( AstFrameSet *, int, int * );
-static AstFrame *PickAxes( AstFrame *, int, const int[], AstMapping **, int * );
-static AstFrameSet *Convert( AstFrame *, AstFrame *, const char *, int * );
-static AstFrameSet *ConvertX( AstFrame *, AstFrame *, const char *, int * );
-static AstFrameSet *FindFrame( AstFrame *, AstFrame *, const char *, int * );
-static AstMapping *CombineMaps( AstMapping *, int, AstMapping *, int, int, int * );
-static AstMapping *GetMapping( AstFrameSet *, int, int, int * );
-static AstMapping *RemoveRegions( AstMapping *, int * );
-static AstMapping *Simplify( AstMapping *, int * );
-static AstObject *Cast( AstObject *, AstObject *, int * );
-static AstPointSet *ResolvePoints( AstFrame *, const double [], const double [], AstPointSet *, AstPointSet *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *Abbrev( AstFrame *, int, const char *, const char *, const char *, int * );
-static const char *Format( AstFrame *, int, double, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static const char *GetDomain( AstFrame *, int * );
-static const char *GetFormat( AstFrame *, int, int * );
-static const char *GetLabel( AstFrame *, int, int * );
-static const char *GetSymbol( AstFrame *, int, int * );
-static const char *GetTitle( AstFrame *, int * );
-static const char *GetUnit( AstFrame *, int, int * );
-static const int *GetPerm( AstFrame *, int * );
-static double Angle( AstFrame *, const double[], const double[], const double[], int * );
-static double AxAngle( AstFrame *, const double[], const double[], int, int * );
-static double AxDistance( AstFrame *, int, double, double, int * );
-static double AxOffset( AstFrame *, int, double, double, int * );
-static double Offset2( AstFrame *, const double[2], double, double, double[2], int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static AstSystemType ValidateSystem( AstFrame *, AstSystemType, const char *, int * );
-static AstSystemType SystemCode( AstFrame *, const char *, int * );
-static const char *SystemString( AstFrame *, AstSystemType, int * );
-static void CheckPerm( AstFrame *, const int *, const char *, int * );
-static void Resolve( AstFrame *, const double [], const double [], const double [], double [], double *, double *, int * );
-static void ValidateAxisSelection( AstFrame *, int, const int *, const char *, int * );
-static AstLineDef *LineDef( AstFrame *, const double[2], const double[2], int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int LineCrossing( AstFrame *, AstLineDef *, AstLineDef *, double **, int * );
-static int LineContains( AstFrame *, AstLineDef *, int, double *, int * );
-static void LineOffset( AstFrame *, AstLineDef *, double, double, double[2], int * );
-
-static double Distance( AstFrame *, const double[], const double[], int * );
-static double Gap( AstFrame *, int, double, int *, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-static int Fields( AstFrame *, int, const char *, const char *, int, char **, int *, double *, int * );
-static int ForceCopy( AstFrameSet *, int, int * );
-static int GetBase( AstFrameSet *, int * );
-static int GetCurrent( AstFrameSet *, int * );
-static int GetDigits( AstFrame *, int * );
-static int GetDirection( AstFrame *, int, int * );
-static int GetActiveUnit( AstFrame *, int * );
-static int GetIsLinear( AstMapping *, int * );
-static int GetMatchEnd( AstFrame *, int * );
-static int GetMaxAxes( AstFrame *, int * );
-static int GetMinAxes( AstFrame *, int * );
-static int GetNaxes( AstFrame *, int * );
-static int GetNframe( AstFrameSet *, int * );
-static int GetNin( AstMapping *, int * );
-static int GetNout( AstMapping *, int * );
-static int GetPermute( AstFrame *, int * );
-static int GetPreserveAxes( AstFrame *, int * );
-static int GetTranForward( AstMapping *, int * );
-static int GetTranInverse( AstMapping *, int * );
-static int IsUnitFrame( AstFrame *, int * );
-static int Match( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int Span( AstFrameSet *, AstFrame **, int, int, int, AstMapping **, int *, int * );
-static int SubFrame( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestBase( AstFrameSet *, int * );
-static int TestCurrent( AstFrameSet *, int * );
-static int TestDigits( AstFrame *, int * );
-static int TestDirection( AstFrame *, int, int * );
-static int TestDomain( AstFrame *, int * );
-static int TestFormat( AstFrame *, int, int * );
-static int TestLabel( AstFrame *, int, int * );
-static int TestActiveUnit( AstFrame *, int * );
-static int TestMatchEnd( AstFrame *, int * );
-static int TestMaxAxes( AstFrame *, int * );
-static int TestMinAxes( AstFrame *, int * );
-static int TestPermute( AstFrame *, int * );
-static int TestPreserveAxes( AstFrame *, int * );
-static int TestSymbol( AstFrame *, int, int * );
-static int TestTitle( AstFrame *, int * );
-static int TestUnit( AstFrame *, int, int * );
-static int Unformat( AstFrame *, int, const char *, double *, int * );
-static int ValidateAxis( AstFrame *, int, const char *, int * );
-static int ValidateFrameIndex( AstFrameSet *, int, const char *, int * );
-static void AddFrame( AstFrameSet *, int, AstMapping *, AstFrame *, int * );
-static void AppendAxes( AstFrameSet *, AstFrame *, int * );
-static void Clear( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void ClearBase( AstFrameSet *, int * );
-static void ClearCurrent( AstFrameSet *, int * );
-static void ClearDigits( AstFrame *, int * );
-static void ClearDirection( AstFrame *, int, int * );
-static void ClearDomain( AstFrame *, int * );
-static void ClearFormat( AstFrame *, int, int * );
-static void ClearLabel( AstFrame *, int, int * );
-static void ClearMatchEnd( AstFrame *, int * );
-static void ClearMaxAxes( AstFrame *, int * );
-static void ClearMinAxes( AstFrame *, int * );
-static void ClearPermute( AstFrame *, int * );
-static void ClearPreserveAxes( AstFrame *, int * );
-static void ClearSymbol( AstFrame *, int, int * );
-static void ClearTitle( AstFrame *, int * );
-static void ClearUnit( AstFrame *, int, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void Intersect( AstFrame *, const double[2], const double[2], const double[2], const double[2], double[2], int * );
-static void MatchAxes( AstFrame *, AstFrame *, int *, int * );
-static void MatchAxesX( AstFrame *, AstFrame *, int *, int * );
-static void Norm( AstFrame *, double[], int * );
-static void NormBox( AstFrame *, double[], double[], AstMapping *, int * );
-static void Offset( AstFrame *, const double[], const double[], double, double[], int * );
-static void Overlay( AstFrame *, const int *, AstFrame *, int * );
-static void PermAxes( AstFrame *, const int[], int * );
-static void PrimaryFrame( AstFrame *, int, AstFrame **, int *, int * );
-static void RecordIntegrity( AstFrameSet *, int * );
-static void RemapFrame( AstFrameSet *, int, AstMapping *, int * );
-static void RemoveFrame( AstFrameSet *, int, int * );
-static void ReportPoints( AstMapping *, int, AstPointSet *, AstPointSet *, int * );
-static void RestoreIntegrity( AstFrameSet *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetAxis( AstFrame *, int, AstAxis *, int * );
-static void SetBase( AstFrameSet *, int, int * );
-static void SetCurrent( AstFrameSet *, int, int * );
-static void SetDigits( AstFrame *, int, int * );
-static void SetDirection( AstFrame *, int, int, int * );
-static void SetDomain( AstFrame *, const char *, int * );
-static void SetFormat( AstFrame *, int, const char *, int * );
-static void SetLabel( AstFrame *, int, const char *, int * );
-static void SetActiveUnit( AstFrame *, int, int * );
-static void SetMatchEnd( AstFrame *, int, int * );
-static void SetMaxAxes( AstFrame *, int, int * );
-static void SetMinAxes( AstFrame *, int, int * );
-static void SetPermute( AstFrame *, int, int * );
-static void SetPreserveAxes( AstFrame *, int, int * );
-static void SetSymbol( AstFrame *, int, const char *, int * );
-static void SetTitle( AstFrame *, const char *, int * );
-static void SetUnit( AstFrame *, int, const char *, int * );
-static void TidyNodes( AstFrameSet *, int * );
-static void VSet( AstObject *, const char *, char **, va_list, int * );
-
-static double GetBottom( AstFrame *, int, int * );
-static int TestBottom( AstFrame *, int, int * );
-static void ClearBottom( AstFrame *, int, int * );
-static void SetBottom( AstFrame *, int, double, int * );
-
-static double GetTop( AstFrame *, int, int * );
-static int TestTop( AstFrame *, int, int * );
-static void ClearTop( AstFrame *, int, int * );
-static void SetTop( AstFrame *, int, double, int * );
-
-static double GetEpoch( AstFrame *, int * );
-static int TestEpoch( AstFrame *, int * );
-static void ClearEpoch( AstFrame *, int * );
-static void SetEpoch( AstFrame *, double, int * );
-
-static double GetObsAlt( AstFrame *, int * );
-static int TestObsAlt( AstFrame *, int * );
-static void ClearObsAlt( AstFrame *, int * );
-static void SetObsAlt( AstFrame *, double, int * );
-
-static double GetObsLat( AstFrame *, int * );
-static int TestObsLat( AstFrame *, int * );
-static void ClearObsLat( AstFrame *, int * );
-static void SetObsLat( AstFrame *, double, int * );
-
-static double GetObsLon( AstFrame *, int * );
-static int TestObsLon( AstFrame *, int * );
-static void ClearObsLon( AstFrame *, int * );
-static void SetObsLon( AstFrame *, double, int * );
-
-static int GetUseDefs( AstObject *, int * );
-
-static AstSystemType GetSystem( AstFrame *, int * );
-static int TestSystem( AstFrame *, int * );
-static void ClearSystem( AstFrame *, int * );
-static void SetSystem( AstFrame *, AstSystemType, int * );
-
-static AstSystemType GetAlignSystem( AstFrame *, int * );
-static int TestAlignSystem( AstFrame *, int * );
-static void ClearAlignSystem( AstFrame *, int * );
-static void SetAlignSystem( AstFrame *, AstSystemType, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Member functions. */
-/* ================= */
-static const char *Abbrev( AstFrame *this_frame, int axis, const char *fmt,
- const char *str1, const char *str2, int *status ) {
-/*
-* Name:
-* Abbrev
-
-* Purpose:
-* Abbreviate a formatted FrameSet axis value by skipping leading fields.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* const char *Abbrev( AstFrame *this, int axis, const char *fmt,
-* const char *str1, const char *str2, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astAbbrev
-* method inherited from the Frame class).
-
-* Description:
-* This function compares two FrameSet axis values that have been
-* formatted (using astFormat) and determines if they have any
-* redundant leading fields (i.e. leading fields in common which
-* can be suppressed when tabulating the values or plotting them on
-* the axis of a graph).
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* axis
-* The number of the FrameSet axis for which the values have
-* been formatted (axis numbering starts at zero for the first
-* axis).
-* fmt
-* Pointer to a constant null-terminated string containing the
-* format specification used to format the two values.
-* str1
-* Pointer to a constant null-terminated string containing the
-* first formatted value. If this is null, the returned pointer
-* points to the start of the final field in str2.
-* str2
-* Pointer to a constant null-terminated string containing the
-* second formatted value.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer into the "str2" string which locates the first
-* character in the first field that differs between the two
-* formatted values.
-*
-* If the two values have no leading fields in common, the returned
-* value will point at the start of string "str2". If the two
-* values are equal, it will point at the terminating null at the
-* end of this string.
-
-* Notes:
-* - This function assumes that the format specification used was
-* the same when both values were formatted and that they both
-* apply to the same FrameSet axis.
-* - A pointer to the start of "str2" will be returned if this
-* function is invoked with the global error status set, or if it
-* should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- const char *result; /* Pointer value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return str2;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis, "astAbbrev" );
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
- Frame's astAbbrev method to perform the processing. Annul the Frame
- pointer afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- result = astAbbrev( fr, axis, fmt, str1, str2 );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result. */
- if ( !astOK ) result = str2;
-
-/* Return the result. */
- return result;
-}
-
-static void AddFrame( AstFrameSet *this, int iframe, AstMapping *map,
- AstFrame *frame, int *status ) {
-/*
-*++
-* Name:
-c astAddFrame
-f AST_ADDFRAME
-
-* Purpose:
-* Add a Frame to a FrameSet to define a new coordinate system.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "frameset.h"
-c void astAddFrame( AstFrameSet *this, int iframe, AstMapping *map,
-c AstFrame *frame )
-f CALL AST_ADDFRAME( THIS, IFRAME, MAP, FRAME, STATUS )
-
-* Class Membership:
-* FrameSet method.
-
-* Description:
-c This function adds a new Frame and an associated Mapping to a
-f This routine adds a new Frame and an associated Mapping to a
-* FrameSet so as to define a new coordinate system, derived from
-* one which already exists within the FrameSet. The new Frame then
-* becomes the FrameSet's current Frame.
-*
-c This function
-f This routine
-* may also be used to merge two FrameSets, or to append extra axes
-* to every Frame in a FrameSet.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the FrameSet.
-c iframe
-f IFRAME = INTEGER (Given)
-* The index of the Frame within the FrameSet which describes
-* the coordinate system upon which the new one is to be based.
-* This value should lie in the range from 1 to the number of
-* Frames already in the FrameSet (as given by its Nframe
-* attribute). As a special case, AST__ALLFRAMES may be supplied,
-* in which case the axes defined by the supplied Frame are appended
-* to every Frame in the FrameSet (see the Notes section for details).
-c map
-f MAP = INTEGER (Given)
-* Pointer to a Mapping which describes how to convert
-* coordinates from the old coordinate system (described by the
-c Frame with index "iframe") into coordinates in the new
-f Frame with index IFRAME) into coordinates in the new
-* system. The Mapping's forward transformation should perform
-* this conversion, and its inverse transformation should
-* convert in the opposite direction. The supplied Mapping is ignored
-c if parameter "iframe"is equal to AST__ALLFRAMES.
-f if parameter IFRAME is equal to AST__ALLFRAMES.
-c frame
-f FRAME = INTEGER (Given)
-* Pointer to a Frame that describes the new coordinate system.
-* Any class of Frame may be supplied (including Regions and
-* FrameSets).
-*
-c This function may also be used to merge two FrameSets by
-c supplying a pointer to a second FrameSet for this parameter
-f This routine may also be used to merge two FrameSets by
-f supplying a pointer to a second FrameSet for this argument
-* (see the Notes section for details).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - A value of AST__BASE or AST__CURRENT may be given for the
-c "iframe" parameter to specify the base Frame or the current
-f IFRAME argument to specify the base Frame or the current
-* Frame respectively.
-c - This function sets the value of the Current attribute for the
-f - This routine sets the value of the Current attribute for the
-* FrameSet so that the new Frame subsequently becomes the current
-* Frame.
-* - The number of input coordinate values accepted by the supplied
-* Mapping (its Nin attribute) must match the number of axes in the
-c Frame identified by the "iframe" parameter. Similarly, the
-f Frame identified by the IFRAME argument. Similarly, the
-* number of output coordinate values generated by this Mapping
-* (its Nout attribute) must match the number of axes in the new
-* Frame.
-* - As a special case, if a pointer to a FrameSet is given for the
-c "frame" parameter, this is treated as a request to merge a pair of
-f FRAME argument, this is treated as a request to merge a pair of
-* FrameSets. This is done by appending all the new Frames (in the
-c "frame" FrameSet) to the original FrameSet, while preserving
-f FRAME FrameSet) to the original FrameSet, while preserving
-* their order and retaining all the inter-relationships
-* (i.e. Mappings) between them. The two sets of Frames are
-* inter-related within the merged FrameSet by using the Mapping
-* supplied. This should convert between the Frame identified by
-c the "iframe" parameter (in the original FrameSet) and the current
-c Frame of the "frame" FrameSet. This latter Frame becomes the
-f the IFRAME argument (in the original FrameSet) and the current
-f Frame of the FRAME FrameSet. This latter Frame becomes the
-* current Frame in the merged FrameSet.
-* - As another special case, if a value of AST__ALLFRAMES is supplied
-* for parameter
-c "iframe",
-f IFRAME,
-* then the supplied Mapping is ignored, and the axes defined by the
-* supplied Frame are appended to each Frame in the FrameSet. In detail,
-* each Frame in the FrameSet is replaced by a CmpFrame containing the
-* original Frame and the Frame specified by parameter
-c "frame".
-f FRAME.
-* In addition, each Mapping in the FrameSet is replaced by a CmpMap
-* containing the original Mapping and a UnitMap in parallel. The Nin and
-* Nout attributes of the UnitMap are set equal to the number of axes
-* in the supplied Frame. Each new CmpMap is simplified using
-c astSimplify
-f AST_SIMPLIFY
-* before being stored in the FrameSet.
-
-
-
-*--
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to Frame identified by "iframe" */
- AstFrameSet *frameset; /* Pointer to new FrameSet (if given) */
- AstMapping *inode_map; /* Temporarily saved Mapping pointer */
- AstMapping *next_map; /* Temporarily saved Mapping pointer */
- int current; /* Current Frame index in merged FrameSet */
- int current_node; /* Node number for current Frame */
- int ifr; /* Loop counter for Frames */
- int inode; /* Loop counter for nodes */
- int inode_invert; /* Temporarily saved invert flag value */
- int inode_link; /* Temporarily saved link value */
- int naxes; /* Number of Frame axes */
- int ncoord; /* Number of Mapping coordinates per point */
- int next; /* Number of next node in path */
- int next_invert; /* Temporarily saved invert flag value */
- int next_link; /* Temporarily saved link value */
- int nframe; /* Number of Frames in merged FrameSet */
- int nnode; /* Number of nodes in merged FrameSet */
- int node_zero; /* Location of "node zero" after merging */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* First handle cases where we are appending axes to the existing
- Frames in a FrameSet. */
- if( iframe == AST__ALLFRAMES ) {
- AppendAxes( this, frame, status );
- return;
- }
-
-/* Now handle cases where we are adding a new Frame into the FrameSet.
- Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- inode_map = NULL;
- next_map = NULL;
- inode_invert = 0;
- next = 0;
- next_invert = 0;
- next_link = 0;
-
-/* Validate and translate the Frame index supplied. */
- iframe = astValidateFrameIndex( this, iframe, "astAddFrame" );
-
-/* Obtain a pointer to the Frame from which the new coordinate system
- will be derived and determine how many axes it has. Annul the Frame
- pointer afterwards. */
- if ( astOK ) {
- fr = astGetFrame( this, iframe );
- naxes = astGetNaxes( fr );
- fr = astAnnul( fr );
-
-/* Obtain the number of input coordinate values per point for the
- Mapping supplied and check that this matches the number of axes
- obtained above. Report an error if it does not. */
- ncoord = astGetNin( map );
- if ( astOK && ( naxes != ncoord ) ) {
- astError( AST__NCPIN, "astAddFrame(%s): Bad number of %s input "
- "coordinate values (%d).", status, astGetClass( this ),
- astGetClass( map ), ncoord );
- astError( AST__NCPIN, "The %s given should accept %d coordinate "
- "value%s for each input point.", status, astGetClass( map ), naxes,
- ( naxes == 1 ) ? "" : "s" );
- }
- }
-
-/* Similarly, obtain the number of output coordinate values per point
- for the Mapping and check that this equals the number of axes for
- the Frame supplied. Report an error if necessary. */
- if ( astOK ) {
- ncoord = astGetNout( map );
- naxes = astGetNaxes( frame );
- if ( astOK && ( ncoord != naxes ) ) {
- astError( AST__NCPIN, "astAddFrame(%s): Bad number of %s output "
- "coordinate values (%d).", status, astGetClass( this ),
- astGetClass( map ), ncoord );
- astError( AST__NCPIN, "The %s given should generate %d "
- "coordinate value%s for each output point.", status,
- astGetClass( map ), naxes, ( naxes == 1 ) ? "" : "s" );
- }
- }
-
-/* Normal Frame supplied. */
-/* ====================== */
-/* Check that the Frame supplied is not a FrameSet (handling a
- FrameSet is a special case which is addressed later). */
- if ( !astIsAFrameSet( frame ) && astOK ) {
-
-/* Increase the size of the FrameSet's arrays to accommodate one new
- Frame. */
- this->frame = astGrow( this->frame, this->nframe + 1,
- sizeof( AstFrame * ) );
- this->node = astGrow( this->node, this->nframe + 1, sizeof( int ) );
- this->map = astGrow( this->map, this->nnode, sizeof( AstMapping * ) );
- this->link = astGrow( this->link, this->nnode, sizeof( int ) );
- this->invert = astGrow( this->invert, this->nnode, sizeof( int ) );
- if ( astOK ) {
-
-/* Clone pointers to the Frame and Mapping supplied and store these pointers
- in the FrameSet arrays. */
- this->frame[ this->nframe ] = astClone( frame );
- this->map[ this->nnode - 1 ] = astClone( map );
-
-/* Associate the Frame with the Mapping via the "node" array. */
- this->node[ this->nframe ] = this->nnode;
-
-/* Add a "link" value which identifies the node from which the new
- node is derived and store the current value of the Invert attribute
- for the Mapping. */
- this->link[ this->nnode - 1 ] = this->node[ iframe - 1 ];
- this->invert[ this->nnode - 1 ] = astGetInvert( map );
-
-/* If successful, increment the FrameSet's Frame and node counts and
- set the Current attribute so that the new Frame becomes the current
- Frame. */
- if ( astOK ) {
- this->nframe++;
- this->nnode++;
- astSetCurrent( this, this->nframe );
-
-/* If an error occurred while filling the FrameSet's arrays, clear any values
- that may have been added, annulling any cloned pointers. */
- } else {
- this->frame[ this->nframe ] =
- astAnnul( this->frame[ this->nframe ] );
- this->node[ this->nframe ] = -1;
- this->map[ this->nnode - 1 ] =
- astAnnul( this->map[ this->nnode - 1 ] );
- this->link[ this->nnode - 1 ] = -1;
- }
- }
-
-/* FrameSet supplied. */
-/* ================== */
-/* If the Frame supplied is a FrameSet, we handle this as a special
- case by merging the two FrameSets (so that the final result
- contains references to all the Frames from both FrameSets). */
- } else if ( astOK ) {
-
-/* Obtain a pointer to the FrameSet structure containing the new Frame
- references and calculate how many Frames and nodes the combined
- FrameSet will contain. */
- frameset = (AstFrameSet *) frame;
- nframe = this->nframe + frameset->nframe;
- nnode = this->nnode + frameset->nnode;
-
-/* Extend the original FrameSet's arrays to accommodate the new Frames
- and nodes. */
- this->frame = astGrow( this->frame, nframe, sizeof( AstFrame * ) );
- this->node = astGrow( this->node, nframe, sizeof( int ) );
- this->map = astGrow( this->map, nnode - 1, sizeof( AstMapping * ) );
- this->link = astGrow( this->link, nnode - 1, sizeof( int ) );
- this->invert = astGrow( this->invert, nnode - 1, sizeof( int ) );
-
-/* If OK, loop to transfer the new Frame data into the new array
- elements, cloning each Frame pointer. Increment each "node" value
- to allow for the new node numbering which will apply when the new
- node data is appended to the new arrays. */
- if ( astOK ) {
- for ( ifr = 1; ifr <= frameset->nframe; ifr++ ) {
- this->frame[ this->nframe + ifr - 1 ] =
- astClone( frameset->frame[ ifr - 1 ] );
- this->node[ this->nframe + ifr - 1 ] =
- frameset->node[ ifr - 1 ] + this->nnode;
- }
-
-/* Similarly, transfer the new node data, cloning each Mapping
- pointer. Increment each "link" value to allow for the new node
- numbering. */
- for ( inode = 1; inode < frameset->nnode; inode++ ) {
- this->map[ this->nnode + inode - 1 ] =
- astClone( frameset->map[ inode - 1 ] );
- this->link[ this->nnode + inode - 1 ] =
- frameset->link[ inode - 1 ] + this->nnode;
- this->invert[ this->nnode + inode - 1 ] =
- frameset->invert[ inode - 1 ];
- }
-
-/* In transferring the node data (above), we left an empty array
- element which will later be filled with data corresponding to node
- zero in the new FrameSet (there are no data to be copied for this
- node). Initialise the data for this element to null values. */
- this->map[ this->nnode - 1 ] = NULL;
- this->link[ this->nnode - 1 ] = -1;
- this->invert[ this->nnode - 1 ] = -1;
-
-/* Determine which is the current Frame in the new FrameSet and
- convert this into the corresponding Frame number in the combined
- one. */
- current = astGetCurrent( frameset ) + this->nframe;
-
-/* We must now form a new link between this Frame and Frame "iframe"
- (using the Mapping supplied) in order to inter-relate the Frames
- from the two FrameSets. However, this cannot be done immediately
- because in general the node corresponding to Frame "current" will
- already have a link pointing to another node. Moreover, the node
- which was originally node zero (in the new FrameSet) still has
- no data in our merged FrameSet.
-
- To overcome this, we must re-structure the links within the
- transferred data. We do this by starting at the node corresponding
- to Frame "current" and working back through each link until the
- original node zero is reached. At each step along this path, we
- reverse the direction of the link. This involves shifting the
- associated data by one step along the path, so that it becomes
- associated with the next node. This results in the final
- (initialised-to-null) node acquiring some data, and the starting
- node being left free to receive our new link.
-
- We compensate for reversing the links by reversing the sense of the
- "invert" flag associated with each Mapping along the path, so that
- the overall structure of the FrameSet is unchanged. */
-
-/* Identify the starting node (the one corresponding to Frame
- "current"). */
- if ( astOK ) {
- current_node = this->node[ current - 1 ];
-
-/* Obtain the value which a "link" element will now have if it
- originally identified node zero in the new FrameSet. We will use
- this value to detect the end of the path. */
- node_zero = this->nnode;
-
-/* If we are not already at "node zero", save the data for the current
- node. */
- if ( current_node != node_zero ) {
- inode_map = this->map[ current_node - 1 ];
- inode_link = this->link[ current_node - 1 ];
- inode_invert = this->invert[ current_node - 1 ];
-
-/* Reset the node's data to null values (pending setting up the new
- link using the Mapping supplied). */
- this->map[ current_node - 1 ] = NULL;
- this->link[ current_node - 1 ] = -1;
- this->invert[ current_node - 1 ] = -1;
-
-/* Identify the next node in the path. */
- next = inode_link;
- }
-
-/* Follow the path until "node zero" is reached. */
- inode = current_node;
- while( inode != node_zero ) {
-
-/* If the next node on the path is not "node zero", save its data
- (because we are about to write over it). */
- if ( next != node_zero ) {
- next_map = this->map[ next - 1 ];
- next_link = this->link[ next - 1 ];
- next_invert = this->invert[ next - 1 ];
- }
-
-/* Reverse the link from the current node to the "next" node. This
- involves transferring the "map" and "invert" values to the "next"
- node and inverting the sense of the latter to compensate. Make the
- "next" node point back to the current one. */
- this->map[ next - 1 ] = inode_map;
- this->link[ next - 1 ] = inode;
- this->invert[ next - 1 ] = !inode_invert;
-
-/* Move on to consider the next node. */
- inode = next;
-
-/* If we have not reached "node zero" yet, transfer the node data we
- saved above into the variables from which it will be transferred to
- the following node on the next pass through this loop. */
- if ( inode != node_zero ) {
- inode_map = next_map;
- inode_link = next_link;
- inode_invert = next_invert;
-
-/* Identify the node that follows the next one. */
- next = inode_link;
- }
- }
-
-/* Once the necessary links have been re-structured, establish the new
- link that inter-relates the Frames from the two FrameSets. */
- this->map[ current_node - 1 ] = astClone( map );
- this->link[ current_node - 1 ] = this->node[ iframe - 1 ];
- this->invert[ current_node - 1 ] = astGetInvert( map );
- }
-
-/* If successful, update the Frame and node counts and make the
- appropriate Frame current. */
- if ( astOK ) {
- this->nframe = nframe;
- this->nnode = nnode;
- astSetCurrent( this, current );
-
-/* If an error occurred, loop through all the new Frame and node array
- elements and clear them, ensuring that any remaining Object
- pointers are annulled. */
- } else {
- for ( ifr = 1; ifr <= frameset->nframe; ifr++ ) {
- this->frame[ this->nframe + ifr - 1 ] =
- astAnnul( this->frame[ this->nframe + ifr - 1 ] );
- this->node[ this->nframe + ifr - 1 ] = -1;
- }
- for ( inode = 0; inode < frameset->nnode; inode++ ) {
- this->map[ this->nnode + inode - 1 ] =
- astAnnul( this->map[ this->nnode + inode - 1 ] );
- this->link[ this->nnode + inode - 1 ] = -1;
- this->invert[ this->nnode + inode - 1 ] = -1;
- }
- }
- }
- }
-}
-
-static double Angle( AstFrame *this_frame, const double a[],
- const double b[], const double c[], int *status ) {
-/*
-* Name:
-* Angle
-
-* Purpose:
-* Calculate the angle subtended by two points at a third point.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* double Angle( AstFrame *this, const double a[], const double b[],
-* const double c[], int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astAngle
-* method inherited from the Frame class).
-
-* Description:
-* This function finds the angle at point B between the line joining points
-* A and B, and the line joining points C and B. These lines will in fact be
-* geodesic curves appropriate to the Frame in use. For instance, in
-* SkyFrame, they will be great circles.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* a
-* An array of double, with one element for each Frame axis
-* (Naxes attribute) containing the coordinates of the first point.
-* b
-* An array of double, with one element for each Frame axis
-* (Naxes attribute) containing the coordinates of the second point.
-* c
-* An array of double, with one element for each Frame axis
-* (Naxes attribute) containing the coordinates of the third point.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* astAngle
-* The angle in radians, from the line AB to the line CB. If the
-* Frame is 2-dimensional, it will be in the range $\pm \pi$,
-* and positive rotation is in the same sense as rotation from
-* the positive direction of axis 2 to the positive direction of
-* axis 1. If the Frame has more than 2 axes, a positive value will
-* always be returned in the range zero to $\pi$.
-
-* Notes:
-* - A value of AST__BAD will also be returned if points A and B are
-* co-incident, or if points B and C are co-incident.
-* - A value of AST__BAD will also be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- double result; /* Value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
- Frame's astAngle method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- result = astAngle( fr, a, b, c );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result. */
- if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
- return result;
-}
-
-static void AppendAxes( AstFrameSet *this, AstFrame *frame, int *status ) {
-/*
-* Name:
-* AppendAxes
-
-* Purpose:
-* Append axes to every Frame in a FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* void AppendAxes( AstFrameSet *this, AstFrame *frame, int *status )
-
-* Class Membership:
-* FrameSet member function
-
-* Description:
-* This function replaces every Frame in the FrameSet with a CmpFrame
-* holding the original Frame and the supplied Frame. It also replaces
-* every Mapping in the FrameSet with a parallel CmpMap holding the
-* original Mapping and a UnitMap. The Nin and Nout attributes of every
-* UnitMap are equal to the number of axes in the supplied Frame. Each
-* CmpMap is simplified before being stored in the FrameSet.
-
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* frame
-* Pointer to a Frame holding the new axes to add to every Frame in
-* the FrameSet.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstCmpFrame *frm; /* Pointer to new Frame */
- AstCmpMap *map; /* UnitMap to new Mapping */
- AstUnitMap *umap; /* UnitMap to feed the new axes */
- int iframe; /* Frame index */
- int imap; /* Mapping index */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Loop round every Frame in the FrameSet. */
- for ( iframe = 0; iframe < this->nframe; iframe++ ) {
-
-/* Create a CmpFrame holding the original Frame and the new Frame. */
- frm = astCmpFrame( this->frame[ iframe ], frame, " ", status );
-
-/* Annul the original Frame pointer and store the new CmpFrame pointer. */
- (void) astAnnul( this->frame[ iframe ] );
- this->frame[ iframe ] = (AstFrame *) frm;
- }
-
-/* Create a UnitMap with the number of inputs and outputs equal to the
- number of axes in the supplied Frame. */
- umap = astUnitMap( astGetNaxes( frame ), " ", status );
-
-/* Loop round every Mapping in the FrameSet. */
- for ( imap = 0; imap < this->nnode - 1; imap++ ) {
-
-/* Crate a parallel CmpMap holding the original Mapping and the UnitMap. */
- map = astCmpMap( this->map[ imap ], umap, 0, " ", status );
-
-/* Annul the original Mapping pointer. */
- (void) astAnnul( this->map[ imap ] );
-
-/* Simplify the new Mapping, and store it in the FrameSet. */
- this->map[ imap ] = astSimplify( map );
-
-/* Annul the un-simplified Mapping pointer. */
- map = astAnnul( map );
- }
-
-/* Annul the UnitMap pointer. */
- umap = astAnnul( umap );
-}
-
-static double AxAngle( AstFrame *this_frame, const double a[], const double b[], int axis, int *status ) {
-/*
-* Name:
-* AxAngle
-
-* Purpose:
-* Returns the angle from an axis, to a line through two points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* double AxAngle( AstFrame *this, const double a[], const double b[], int axis, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astAxAngle
-* method inherited from the Frame class).
-
-* Description:
-* This function finds the angle, as seen from point A, between the positive
-* direction of a specified axis, and the geodesic curve joining point
-* A to point B.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* a
-* An array of double, with one element for each Frame axis
-* (Naxes attribute) containing the coordinates of the first point.
-* b
-* An array of double, with one element for each Frame axis
-* (Naxes attribute) containing the coordinates of the second point.
-* axis
-* The number of the Frame axis from which the angle is to be
-* measured (one-based).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The angle in radians, from the positive direction of the
-* specified axis, to the line AB. If the Frame is 2-dimensional,
-* it will be in the range $\pm \pi$, and positive rotation is in
-* the same sense as rotation from the positive direction of axis 2
-* to the positive direction of axis 1. If the Frame has more than 2
-* axes, a positive value will always be returned in the range zero
-* to $\pi$.
-
-* Notes:
-* - The geodesic curve used by this function is the path of
-* shortest distance between two points, as defined by the
-* astDistance function.
-* - This function will return "bad" coordinate values (AST__BAD)
-* if any of the input coordinates has this value, or if the require
-* position angle is undefined.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- double result; /* Value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis - 1, "astAxAngle" );
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke the
- astAxAngle method for this Frame. Annul the Frame pointer
- afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- result = astAxAngle( fr, a, b, axis );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
- return result;
-}
-
-static double AxDistance( AstFrame *this_frame, int axis, double v1, double v2, int *status ) {
-/*
-* Name:
-* AxDistance
-
-* Purpose:
-* Find the distance between two axis values.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* double AxDistance( AstFrame *this, int axis, double v1, double v2, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astAxDistance
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a signed value representing the axis increment
-* from axis value v1 to axis value v2.
-*
-* For a simple Frame, this is a trivial operation returning the
-* difference between the two axis values. But for other derived classes
-* of Frame (such as a SkyFrame) this is not the case.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* axis
-* The index of the axis to which the supplied values refer. The
-* first axis has index 1.
-* v1
-* The first axis value.
-* v2
-* The second axis value.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The distance between the two axis values.
-
-* Notes:
-* - This function will return a "bad" result value (AST__BAD) if
-* any of the input vaues has this value.
-* - A "bad" value will also be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- double result; /* Value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis - 1, "astAxDistance" );
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke the
- astAxDistance method for this Frame. Annul the Frame pointer
- afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- result = astAxDistance( fr, axis, v1, v2 );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
- return result;
-}
-
-static double AxOffset( AstFrame *this_frame, int axis, double v1, double dist, int *status ) {
-/*
-* Name:
-* AxOffset
-
-* Purpose:
-* Add an increment onto a supplied axis value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* double AxOffset( AstFrame *this, int axis, double v1, double dist, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astAxOffset
-* method inherited from the Frame class).
-
-* Description:
-* This function returns an axis value formed by adding a signed axis
-* increment onto a supplied axis value.
-*
-* For a simple Frame, this is a trivial operation returning the
-* sum of the two supplied values. But for other derived classes
-* of Frame (such as a SkyFrame) this is not the case.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* axis
-* The index of the axis to which the supplied values refer. The
-* first axis has index 1.
-* v1
-* The original axis value.
-* dist
-* The axis increment to add to the original axis value.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The incremented axis value.
-
-* Notes:
-* - This function will return a "bad" result value (AST__BAD) if
-* any of the input vaues has this value.
-* - A "bad" value will also be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- double result; /* Value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis - 1, "astAxOffset" );
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke the
- astAxOffset method for this Frame. Annul the Frame pointer
- afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- result = astAxOffset( fr, axis, v1, dist );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
- return result;
-}
-
-static AstObject *Cast( AstObject *this_object, AstObject *obj, int *status ) {
-/*
-* Name:
-* Cast
-
-* Purpose:
-* Cast an Object into an instance of a sub-class.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* AstObject *Cast( AstObject *this, AstObject *obj, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astCast
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a deep copy of an ancestral component of the
-* supplied object. The required class of the ancestral component is
-* specified by another object. Specifically, if "this" and "new" are
-* of the same class, a copy of "this" is returned. If "this" is an
-* instance of a subclass of "obj", then a copy of the component
-* of "this" that matches the class of "obj" is returned. Otherwise,
-* a NULL pointer is returned without error.
-
-* Parameters:
-* this
-* Pointer to the Object to be cast.
-* obj
-* Pointer to an Object that defines the class of the returned Object.
-* The returned Object will be of the same class as "obj".
-
-* Returned Value:
-* A pointer to the new Object. NULL if "this" is not a sub-class of
-* "obj", or if an error occurs.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables; */
- AstFrame *cfrm;
- AstObject *new;
- astDECLARE_GLOBALS
- int generation_gap;
-
-/* Initialise */
- new = NULL;
-
-/* Check inherited status */
- if( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* See how many steps up the class inheritance ladder it is from "obj"
- to this class (FrameSet). A positive value is returned if FrameSet
- is a sub-class of "obj". A negative value is returned if "obj" is
- a sub-class of FrameSet. Zero is returned if "obj" is a FrameSet.
- AST__COUSIN is returned if "obj" is not on the same line of descent
- as FrameSet. */
- generation_gap = astClassCompare( (AstObjectVtab *) &class_vtab,
- astVTAB( obj ) );
-
-/* If "obj" is a FrameSet or a sub-class of FrameSet, we can cast by
- truncating the vtab for "this" so that it matches the vtab of "obJ",
- and then taking a deep copy of "this". */
- if( generation_gap <= 0 && generation_gap != AST__COUSIN ) {
- new = astCastCopy( this_object, obj );
-
-/* If "obj" is not a FrameSet or a sub-class of FrameSet (e.g. a Frame or
- some sub-class of Frame), we attempt to cast the current Frame into
- the class indicated by "obj". */
- } else {
- cfrm = astGetFrame( (AstFrameSet *) this_object, AST__CURRENT );
- new = astCast( cfrm, obj );
- cfrm = astAnnul( cfrm );
- }
-
-/* Return the new pointer. */
- return new;
-}
-
-static void CheckPerm( AstFrame *this_frame, const int *perm, const char *method, int *status ) {
-/*
-* Name:
-* CheckPerm
-
-* Purpose:
-* Check that an array contains a valid permutation.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* void CheckPerm( AstFrame *this, const int *perm, const char *method, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astCheckPerm
-* method inherited from the Frame class).
-
-* Description:
-* This function checks the validity of a permutation array that
-* will be used to permute the order of a Frame's axes. If the
-* permutation specified by the array is not valid, an error is
-* reported and the global error status is set. Otherwise, the
-* function returns without further action.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* perm
-* Pointer to an array of integers with the same number of
-* elements as there are axes in the Frame. For each axis, the
-* corresponding integer gives the (zero based) axis index to be
-* used to identify the information for that axis (using the
-* un-permuted axis numbering). To be valid, the integers in
-* this array should therefore all lie in the range zero to
-* (naxes-1) inclusive, where "naxes" is the number of Frame
-* axes, and each value should occur exactly once.
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function
-* to validate a permutation array. This method name is used
-* solely for constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - Error messages issued by this function refer to the external
-* (public) numbering system used for axes (which is one-based),
-* whereas zero-based axis indices are used internally.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
- Frame's astCheckPerm method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- astCheckPerm( fr, perm, method );
- fr = astAnnul( fr );
-
-}
-
-static void Clear( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* Clear
-
-* Purpose:
-* Clear attribute values for a FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* void Clear( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the public astClear method
-* inherited from the Object class).
-
-* Description:
-* This function clears the values of a specified set of attributes
-* for a FrameSet. Clearing an attribute cancels any value that has
-* previously been explicitly set for it, so that the standard
-* default attribute value will subsequently be used instead. This
-* also causes the astTest function to return the value zero for
-* the attribute, indicating that no value has been set.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* attrib
-* Pointer to a null-terminated character string containing a
-* comma-separated list of the names of the attributes to be
-* cleared.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function preserves the integrity of the FrameSet (if
-* possible) by appropriately remapping its current Frame to take
-* account of its changed attribute values.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstFrame *save_frame; /* Saved pointer to integrity Frame */
- AstFrameSet *this; /* Pointer to FrameSet structure */
- const char *save_method; /* Saved pointer to method name */
- int ok; /* Status OK? */
- int save_lost; /* Saved integrity modified flag */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_object;
-
-/* To allow this function to be invoked recursively, we first save any
- existing FrameSet integrity information in local variables. */
- save_frame = integrity_frame;
- save_lost= integrity_lost;
- save_method = integrity_method;
-
-/* Set the name of the method being used (for use in error
- messages). */
- integrity_method = "astClear";
-
-/* Record the initial integrity state of the FrameSet. */
- RecordIntegrity( this, status );
-
-/* Invoke the parent astClear method to clear the FrameSet's attribute
- values and note if this succeeds. */
- (*parent_clear)( this_object, attrib, status );
- ok = astOK;
-
-/* Restore the FrameSet's integrity. */
- RestoreIntegrity( this, status );
-
-/* If integrity could not be restored, then add contextual error
- information. */
- if ( !astOK && ok ) {
- astError( astStatus, "Unable to accommodate clearing the \"%s\" "
- "attribute(s).", status, attrib );
- }
-
-/* Restore any saved FrameSet integrity information. */
- integrity_frame = save_frame;
- integrity_lost = save_lost;
- integrity_method = save_method;
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* void ClearAttrib( AstObject *this, const char *attrib )
-
-* Class Membership:
-* FrameSet member function (over-rides the astClearAttrib protected
-* method inherited from the Frame class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* FrameSet, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_object);
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* We first handle attributes that apply to the FrameSet as a whole
- (rather than to the current Frame). */
-
-/* Base. */
-/* ----- */
- if ( !strcmp( attrib, "base" ) ) {
- astClearBase( this );
-
-/* Current. */
-/* -------- */
-/* Since this determines the choice of current Frame, we must restore
- the integrity state of the FrameSet before changing this attribute
- and record the new integrity state afterwards. */
- } else if ( !strcmp( attrib, "current" ) ) {
- RestoreIntegrity( this, status );
- astClearCurrent( this );
- RecordIntegrity( this, status );
-
-/* ID. */
-/* --- */
- } else if ( !strcmp( attrib, "id" ) ) {
- astClearID( this );
-
-/* Invert. */
-/* ------- */
-/* Since this affects the choice of current Frame, we must restore the
- integrity state of the FrameSet before changing this attribute and
- record the new integrity state afterwards. */
- } else if ( !strcmp( attrib, "invert" ) ) {
- RestoreIntegrity( this, status );
- astClearInvert( this );
- RecordIntegrity( this, status );
-
-/* Report. */
-/* ------- */
- } else if ( !strcmp( attrib, "report" ) ) {
- astClearReport( this );
-
-/* If the name was not recognised, test if it matches any of the
- read-only attributes of this class. If it does, then report an
- error. */
- } else if ( !strcmp( attrib, "class" ) ||
- !strcmp( attrib, "nframe" ) ||
- !strcmp( attrib, "nin" ) ||
- !strcmp( attrib, "nobject" ) ||
- !strcmp( attrib, "nout" ) ||
- !strcmp( attrib, "refcount" ) ||
- !strcmp( attrib, "tranforward" ) ||
- !strcmp( attrib, "traninverse" ) ) {
- astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
- "value for a %s.", status, attrib, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Pass unrecognised attributes on to the FrameSet's current Frame for
- further interpretation. */
- } else {
-
-/* Force a copy to be made of the current Frame, if needed, to make it
- independent of other Frames within the FrameSet. */
- (void) ForceCopy( this, AST__CURRENT, status );
-
-/* Obtain a pointer to the current Frame and invoke its astClearAttrib
- method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- astClearAttrib( fr, attrib );
- fr = astAnnul( fr );
-
-/* Note that the current Frame has been modified. */
- integrity_lost = 1;
- }
-}
-
-static void ClearBase( AstFrameSet *this, int *status ) {
-/*
-*+
-* Name:
-* astClearBase
-
-* Purpose:
-* Clear the value of the Base attribute of a FrameSet.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frameset.h"
-* void astClearBase( AstFrameSet *this )
-
-* Class Membership:
-* FrameSet method.
-
-* Description:
-* This function clears the value of the Base attribute of a
-* FrameSet. This value is an index that identifies the base Frame
-* for the FrameSet.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-*-
-*/
-
-/* Local Variables: */
- int invert; /* FrameSet is inverted? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Determine if the FrameSet has been inverted. */
- invert = astGetInvert( this );
-
-/* If it has not been inverted, clear the base Frame index, otherwise
- clear the current Frame index instead. */
- if ( astOK ) *( invert ? &this->current : &this->base ) = -INT_MAX;
-}
-
-static void ClearCurrent( AstFrameSet *this, int *status ) {
-/*
-*+
-* Name:
-* astClearCurrent
-
-* Purpose:
-* Clear the value of the Current attribute for a FrameSet.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "frameset.h"
-* int astClearCurrent( AstFrameSet *this )
-
-* Class Membership:
-* FrameSet method.
-
-* Description:
-* This function clears the value of the Current attribute for a
-* FrameSet. This attribute is an index that identifies the current
-* Frame for the FrameSet.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-*-
-*/
-
-/* Local Variables: */
- int invert; /* FrameSet is inverted? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Determine if the FrameSet has been inverted. */
- invert = astGetInvert( this );
-
-/* If it has not been inverted, clear the current frame index,
- otherwise clear the base Frame index instead. */
- if ( astOK ) *( invert ? &this->base : &this->current ) = -INT_MAX;
-}
-
-static AstMapping *CombineMaps( AstMapping *mapping1, int invert1,
- AstMapping *mapping2, int invert2,
- int series, int *status ) {
-/*
-* Name:
-* CombineMaps
-
-* Purpose:
-* Combine two Mappings with specified Invert flags into a CmpMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* AstMapping *CombineMaps( AstMapping *mapping1, int invert1,
-* AstMapping *mapping2, int invert2,
-* int series )
-
-* Class Membership:
-* FrameSet member function.
-
-* Description:
-* This function combines two Mappings into a CmpMap (compound
-* Mapping) as if their Invert flags were set to specified values
-* when the CmpMap is created. However, the individual Mappings are
-* returned with their Invert flag values unchanged from their
-* original state.
-
-* Parameters:
-* mapping1
-* Pointer to the first Mapping.
-* invert1
-* The (boolean) Invert flag value required for the first Mapping.
-* mapping2
-* Pointer to the second Mapping.
-* invert2
-* The (boolean) Invert flag value required for the second Mapping.
-* series
-* Whether the Mappings are to be combined in series (as opposed to
-* in parallel).
-
-* Returned Value:
-* A pointer to the resulting compound Mapping (a CmpMap).
-
-* Notes:
-* - This function is a wrap-up for the astCmpMap constructor and
-* temporarily assigns the required Invert flag values while
-* creating the required CmpMap. However, it also takes account of
-* the possibility that the two Mapping pointers supplied may point
-* at the same Mapping.
-* - A null Object pointer (AST__NULL) will be returned if this
-* function is invoked with the AST error status set, or if it
-* should fail for any reason.
-*/
-
-/* Local Variables: */
- AstMapping *map1; /* First temporary Mapping pointer */
- AstMapping *map2; /* Second temporary Mapping pointer */
- AstMapping *result; /* Pointer to result Mapping */
- int copy; /* Copy needed? */
- int inv1; /* First original Invert flag value */
- int inv2; /* Second original Invert flag value */
- int set1; /* First Invert flag originally set? */
- int set2; /* Second Invert flag originally set? */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Limit incoming values to 0 or 1. */
- invert1 = ( invert1 != 0 );
- invert2 = ( invert2 != 0 );
-
-/* Obtain the Invert flag values for each Mapping. */
- inv1 = astGetInvert( mapping1 );
- inv2 = astGetInvert( mapping2 );
-
-/* Also determine if these values are explicitly set. */
- set1 = astTestInvert( mapping1 );
- set2 = astTestInvert( mapping2 );
-
-/* If both Mappings are actually the same but we need different Invert
- flag values to be set, then this can only be achieved by making a
- copy. Note if this is necessary. */
- copy = ( ( mapping1 == mapping2 ) && ( invert1 != invert2 ) );
-
-/* Clone the first Mapping pointer. Do likewise for the second but
- make a copy instead if necessary. */
- map1 = astClone( mapping1 );
- map2 = copy ? astCopy( mapping2 ) : astClone( mapping2 );
-
-/* If the Invert value for the first Mapping needs changing, make the
- change. */
- if ( invert1 != inv1 ) {
- if ( invert1 ) {
- astSetInvert( map1, 1 );
- } else {
- astClearInvert( map1 );
- }
- }
-
-/* Similarly, change the Invert flag for the second Mapping if
- necessary. */
- if ( invert2 != inv2 ) {
- if ( invert2 ) {
- astSetInvert( map2, 1 );
- } else {
- astClearInvert( map2 );
- }
- }
-
-/* Combine the two Mappings into a CmpMap. */
- result = (AstMapping *) astCmpMap( map1, map2, series, "", status );
-
-/* If the first Mapping's Invert value was changed, restore it to its
- original state. */
- if ( invert1 != inv1 ) {
- if ( set1 ) {
- astSetInvert( map1, inv1 );
- } else {
- astClearInvert( map1 );
- }
- }
-
-/* Similarly, restore the second Mapping's Invert value if
- necessary. This step is not needed, however, if a copy was made. */
- if ( ( invert2 != inv2 ) && !copy ) {
- if ( set2 ) {
- astSetInvert( map2, inv2 );
- } else {
- astClearInvert( map2 );
- }
- }
-
-/* Annul the temporary Mapping pointers. */
- map1 = astAnnul( map1 );
- map2 = astAnnul( map2 );
-
-/* If an error occurred, then annul the result pointer. */
- if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static AstFrameSet *Convert( AstFrame *from, AstFrame *to,
- const char *domainlist, int *status ) {
-/*
-* Name:
-* Convert
-
-* Purpose:
-* Determine how to convert between two coordinate systems.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* AstFrameSet *Convert( AstFrame *from, AstFrame *to,
-* const char *domainlist, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the public astConvert
-* method inherited fromm the Frame class).
-
-* Description:
-* This function compares two FrameSets and determines whether it
-* is possible to convert between the coordinate systems which
-* their current Frames represent. If conversion is possible, it
-* returns a FrameSet which describes the conversion and which may
-* be used (as a Mapping) to transform coordinate values in either
-* direction.
-*
-* If conversion is possible, the Base attributes of both FrameSets
-* will be modified on exit to identify the Frames which were used
-* as the intermediate coordinate system.
-
-* Parameters:
-* from
-* Pointer to a FrameSet whose current Frame represents the
-* "source" coordinate system. Note that the Base attribute of
-* the FrameSet may be modified by this function.
-* to
-* Pointer to a FrameSet whose current Frame represents the
-* "destination" coordinate system. Note that the Base
-* attribute of the FrameSet may be modified by this function.
-* domainlist
-* Pointer to a null-terminated character string containing a
-* comma-separated list of Frame domains. This may be used to
-* define a priority order for the different intermediate
-* coordinate systems that might be used to perform the
-* conversion.
-*
-* The function will first try to obtain a conversion by making
-* use only of intermediate Frames whose Domain attribute
-* matches the first domain in this list. If this fails, the
-* second domain in the list will be used, and so on, until
-* conversion is achieved. A blank domain (e.g. two consecutive
-* commas) indicates that all Frames should be considered,
-* regardless of their Domain attributes. The list is
-* case-insensitive and all white space is ignored.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If the requested coordinate conversion is possible, the
-* function returns a pointer to a FrameSet which describes the
-* conversion. Otherwise, a null Object pointer (AST__NULL) is
-* returned without error.
-*
-* If a FrameSet is returned, it will contain two Frames. Frame
-* number 1 (its base Frame) will describe the source coordinate
-* system, corresponding to the "from" parameter. Frame number 2
-* (its current Frame) will describe the destination coordinate
-* system, corresponding to the "to" parameter. The Mapping
-* which inter-relates these Frames will perform the required
-* conversion between the two coordinate systems.
-
-* Notes:
-* - Either of the "from" and "to" pointers may identify a basic
-* Frame instead of a FrameSet, in which case the function behaves
-* as if it were a FrameSet containing only a single Frame.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-
-* Implementation Notes:
-* - This function is simply a wrap-up for the ConvertX function
-* which performs the required processing but swaps the order of the
-* first two arguments. This is a trick to allow the astConvert
-* method to be over-ridden by derived classes on the basis of the
-* class of either of the first two arguments.
-*/
-
-/* Check the inherited status. */
- if ( !astOK ) return NULL;
-
-/* Invoke the private "ConvertX" member function with the first two
- arguments swapped. */
- return ConvertX( to, from, domainlist, status );
-}
-
-static AstFrameSet *ConvertX( AstFrame *to, AstFrame *from,
- const char *domainlist, int *status ) {
-/*
-* Name:
-* ConvertX
-
-* Purpose:
-* Determine how to convert between two coordinate systems.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* AstFrameSet *ConvertX( AstFrame *to, AstFrame *from,
-* const char *domainlist )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected "astConvertX"
-* method inherited from the Frame class).
-
-* Description:
-* This function performs the processing for the public astConvert
-* method (as inherited from the Frame class and over-ridden by the
-* FrameSet class) and has exactly the same interface except that
-* the order of the first two arguments is swapped. This is a trick
-* to allow the astConvert method to be over-ridden by derived
-* classes on the basis of the class of either of its first two
-* arguments.
-*
-* See the astConvert method for details of the interface.
-*/
-
-/* Local Variables: */
- AstFrame *from_frame; /* Pointer to "from" Frame */
- AstFrame *to_frame; /* Pointer to "to" Frame */
- AstFrameSet *cvt; /* Pointer to conversion FrameSet */
- AstFrameSet *result; /* Pointer to FrameSet to be returned */
- AstMapping *from_map; /* Pointer to "from" Mapping */
- AstMapping *map; /* Pointer to conversion Mapping */
- AstMapping *result_map; /* Pointer to result Mapping */
- AstMapping *tmp; /* Temporary Mapping pointer */
- AstMapping *to_map; /* Pointer to "to" Mapping */
- char *domain; /* Pointer to individual domain string */
- char *domain_end; /* Pointer to final null of domain string */
- char *domainlist_copy; /* Pointer to copy of domains list */
- int *from_order; /* List of Frame indices in search order */
- int *to_order; /* List of Frame indices in search order */
- int best_score; /* Score from best match */
- int from_base; /* Index of "from" base Frame */
- int from_current; /* Index of "from" current Frame */
- int from_index; /* Index of "from" Frame */
- int from_isframe; /* "from" is a Frame (not a FrameSet)? */
- int from_nframe; /* Number of "from" Frames */
- int from_number; /* Loop counter for "from" Frames */
- int iframe_from; /* Index of best "from" Frame */
- int iframe_to; /* Index of best "to" Frame */
- int match; /* Possible match found? */
- int n; /* Count of Frames */
- int perfect; /* Perfect match found? */
- int score; /* Score from latest match */
- int to_base; /* Index of "to" base Frame */
- int to_current; /* Index of "to" current Frame */
- int to_index; /* Index of "to" Frame */
- int to_isframe; /* "to" is a Frame (not a FrameSet)? */
- int to_nframe; /* Number of "to" Frames */
- int to_number; /* Loop counter for "to" Frames */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- result_map = NULL;
- iframe_from = 0;
- iframe_to = 0;
-
-/* Determine the number of Frames in "from" and the indices of its
- base and current Frames. Use values of 1 if "from" is a Frame and
- not a FrameSet. */
- from_isframe = !astIsAFrameSet( from );
- from_nframe = from_isframe ? 1 : astGetNframe( from );
- from_base = from_isframe ? 1 : astGetBase( from );
- from_current = from_isframe ? 1 : astGetCurrent( from );
-
-/* Obtain similar values for "to". */
- to_isframe = !astIsAFrameSet( to );
- to_nframe = to_isframe ? 1 : astGetNframe( to );
- to_base = to_isframe ? 1 : astGetBase( to );
- to_current = to_isframe ? 1 : astGetCurrent( to );
-
-/* Allocate memory for arrays which will hold the indices of "from"
- and "to" Frames. */
- from_order = astMalloc( sizeof( int ) * (size_t) from_nframe );
- to_order = astMalloc( sizeof( int ) * (size_t) to_nframe );
-
-/* Make a temporary copy of the domains list. */
- domainlist_copy = astStore( NULL, domainlist,
- strlen( domainlist ) + (size_t) 1 );
- if ( astOK ) {
-
-/* Fill the "from_order" array with the indices of all the Frames in
- "from", in the order in which they will be used for searching. Use
- the base Frame first. */
- n = 0;
- from_order[ n++ ] = from_base;
-
-/* Then add all the "from" Frames in the appropriate order, omitting
- the base and current Frames. */
- if ( !astGetInvert( from ) ) {
- for ( from_index = 1; from_index <= from_nframe; from_index++ ) {
- if ( ( from_index != from_base ) &&
- ( from_index != from_current ) ) {
- from_order[ n++ ] = from_index;
- }
- }
- } else {
- for ( from_index = from_nframe; from_index >= 1; from_index-- ) {
- if ( ( from_index != from_base ) &&
- ( from_index != from_current ) ) {
- from_order[ n++ ] = from_index;
- }
- }
- }
-
-/* Finish with the current Frame, if different from the base Frame. */
- if ( from_current != from_base ) from_order[ n++ ] = from_current;
-
-/* Repeat this process for the "to" Frame. */
- n = 0;
- to_order[ n++ ] = to_base;
- if ( !astGetInvert( to ) ) {
- for ( to_index = 1; to_index <= to_nframe; to_index++ ) {
- if ( ( to_index != to_base ) && ( to_index != to_current ) ) {
- to_order[ n++ ] = to_index;
- }
- }
- } else {
- for ( to_index = to_nframe; to_index >= 1; to_index-- ) {
- if ( ( to_index != to_base ) && ( to_index != to_current ) ) {
- to_order[ n++ ] = to_index;
- }
- }
- }
- if ( to_current != to_base ) to_order[ n++ ] = to_current;
-
-/* Loop to inspect each comma-separated field in the domains list
- until an error occurs, all the domains are used up, or a match is
- found. */
- domain = domainlist_copy;
- match = 0;
- while ( astOK && domain && !match ) {
-
-/* Change the comma at the end of each field to a null to terminate
- the domain. */
- if ( ( domain_end = strchr( domain, ',' ) ) ) *domain_end = '\0';
-
-/* For any given domain, we will ignore imperfect matches in favour of
- better ones by assigning a score to each match. Initialise the best
- score value for the current domain. */
- best_score = -1;
-
-/* Loop through each Frame in "to". Quit looping early if an error
- occurs or a perfect match is found. */
- perfect = 0;
- for ( to_number = 0;
- astOK && !perfect && ( to_number < to_nframe );
- to_number++ ) {
-
-/* Permute the "to" Frame number into a Frame index to implement the
- required search order, and obtain a pointer to the required "to"
- Frame. */
- to_index = to_order[ to_number ];
- to_frame = to_isframe ? astClone( to ) :
- astGetFrame( to, to_index );
-
-/* Loop through each Frame in "from". Quit looping early if an error
- occurs or a perfect match is found. */
- for ( from_number = 0;
- astOK && !perfect && ( from_number < from_nframe );
- from_number++ ) {
-
-/* Permute the "from" Frame number into a Frame index to implement the
- required search order, and obtain a pointer to the required "from"
- Frame. */
- from_index = from_order[ from_number ];
- from_frame = from_isframe ? astClone( from ) :
- astGetFrame( from, from_index );
-
-/* Attempt to obtain a FrameSet which describes the conversion between
- the selected "from" and "to" Frames and test if successful. If so,
- we have a potential route to construct the overall Mapping we
- want. */
- cvt = astConvert( from_frame, to_frame, domain );
- if ( astOK && cvt ) {
-
-/* Extract the required Mapping from the returned FrameSet. */
- map = astGetMapping( cvt, AST__BASE, AST__CURRENT );
-
-/* If necessary, prefix the Mapping between the "from" current Frame
- and the individual "from" Frame we have selected. */
- if ( from_index != from_current ) {
- from_map = astGetMapping( from, AST__CURRENT,
- from_index );
- tmp = (AstMapping *) astCmpMap( from_map, map, 1, "", status );
- from_map = astAnnul( from_map );
- map = astAnnul( map );
- map = tmp;
- }
-
-/* Similarly, if necessary, append the Mapping between the selected
- "to" Frame and the "to" current Frame. */
- if ( to_index != to_current ) {
- to_map = astGetMapping( to, to_index, AST__CURRENT );
- tmp = (AstMapping *) astCmpMap( map, to_map, 1, "", status );
- to_map = astAnnul( to_map );
- map = astAnnul( map );
- map = tmp;
- }
-
-/* Simplify the resulting overall Mapping (this is done here because
- it may sometimes affect the attribute values used to assign a score
- below). */
- tmp = astSimplify( map );
- map = astAnnul( map );
- map = tmp;
-
-/* Assign a score that favours Mappings with both transformations
- available over those with only one, and Mappings with only a
- forward transformation over those with only an inverse
- transformation. */
- score = ( astGetTranForward( map ) ? 2 : 0 ) +
- ( astGetTranInverse( map ) ? 1 : 0 );
-
-/* If the new score is better than the previous one (or is the first
- one), note that we have a possible match. */
- if ( astOK && ( score > best_score ) ) {
- match = 1;
-
-/* Update the best score and note if it indicates a perfect match (in
- which case we can stop searching at this point). */
- best_score = score;
- perfect = ( best_score >= 3 );
-
-/* Annul any previous result Mapping pointer and replace it with this
- better one. */
- if ( result_map ) result_map = astAnnul( result_map );
- result_map = astClone( map );
-
-/* Note which "from" and "to" Frames were used. */
- iframe_from = from_index;
- iframe_to = to_index;
- }
-
-/* Annul pointers to the intermediate Objects. */
- map = astAnnul( map );
- cvt = astAnnul( cvt );
- }
- from_frame = astAnnul( from_frame );
- }
- to_frame = astAnnul( to_frame );
- }
-
-/* Go on to consider the next field in the domains list. */
- domain = domain_end ? domain_end + 1 : NULL;
- }
- }
-
-/* Free the memory allocated for temporary arrays. */
- domainlist_copy = astFree( domainlist_copy );
- from_order = astFree( from_order );
- to_order = astFree( to_order );
-
-/* If a result is being returned, then obtain a pointer to the current
- "from" Frame and use it to start constructing the result
- FrameSet. */
- if ( result_map ) {
- from_frame = from_isframe ? astClone( from ) :
- astGetFrame( from, AST__CURRENT );
- result = astFrameSet( from_frame, "", status );
- from_frame = astAnnul( from_frame );
-
-/* Similarly. obtain a pointer to the current "to" frame and add it to
- the result FrameSet (related to the base Frame by the result
- Mapping). */
- to_frame = to_isframe ? astClone( to ) :
- astGetFrame( to, AST__CURRENT );
- astAddFrame( result, AST__BASE, result_map, to_frame );
- to_frame = astAnnul( to_frame );
-
-/* Annul the result Mapping pointer. */
- result_map = astAnnul( result_map );
- }
-
-/* If successful, and a FrameSet is being returned, then set the base
- Frames of "from" and "to" (if they are FrameSets) to indicate the
- route used to generate the result Mapping. */
- if ( astOK && result ) {
- if ( !from_isframe ) astSetBase( from, iframe_from );
- if ( !to_isframe ) astSetBase( to, iframe_to );
- }
-
-/* If an error occurred, annul the returned FrameSet pointer. */
- if ( !astOK && result ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static double Distance( AstFrame *this_frame,
- const double point1[], const double point2[], int *status ) {
-/*
-* Name:
-* Distance
-
-* Purpose:
-* Calculate the distance between two points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* double Distance( AstFrame *this,
-* const double point1[], const double point2[], int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astDistance
-* method inherited from the Frame class).
-
-* Description:
-* This function finds the distance between two points whose
-* FrameSet coordinates are given. The distance calculated is that
-* along the geodesic curve that joins the two points.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* point1
-* An array of double, with one element for each FrameSet axis
-* containing the coordinates of the first point.
-* point2
-* An array of double, with one element for each FrameSet axis
-* containing the coordinates of the second point.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The distance between the two points.
-
-* Notes:
-* - This function will return a "bad" result value (AST__BAD) if
-* any of the input coordinates has this value.
-* - A "bad" value will also be returned if this function is
-* invoked with the AST error status set or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- double result; /* Value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
- Frame's astDistance method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- result = astDistance( fr, point1, point2 );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result. */
- if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
- return result;
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two FrameSets are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the astEqual protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two FrameSets are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first FrameSet.
-* that
-* Pointer to the second FrameSet.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the FrameSets are equivalent, zero otherwise.
-
-* Notes:
-* - The two FrameSets are considered equivalent if all the encapsulated
-* Frames are equal and all the encapsulated Mappings are equal.
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFrameSet *that; /* Pointer to the second FrameSet structure */
- AstFrameSet *this; /* Pointer to the first FrameSet structure */
- int i; /* Loop index */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Checks that the second object is of the same class as the first . */
- if( !strcmp( astGetClass( this_object ), astGetClass( that_object ) ) ){
-
-/* Obtain pointers to the two FrameSet structures. */
- this = (AstFrameSet *) this_object;
- that = (AstFrameSet *) that_object;
-
-/* Check the number of nodes and frames are equal. Also check the indices
- of the base and current Frames are equal */
- if( this->nframe == that->nframe &&
- this->nnode == that->nnode &&
- this->base == that->base &&
- this->current == that->current ) {
-
-/* Check the Frames and nodes are equal. */
- result = 1;
- for ( i = 0; i < this->nframe; i++ ) {
- if( !astEqual( this->frame[ i ], that->frame[ i ] ) ||
- this->node[ i ] != that->node[ i ] ){
- result = 0;
- break;
- }
- }
-
-/* Check the Mappings, links and invert flags are equal. */
- if( result ) {
- for ( i = 0; i < this->nnode - 1; i++ ) {
- if( astEqual( this->map[ i ], that->map[ i ] ) ||
- this->link[ i ] != that->link[ i ] ||
- this->invert[ i ] != that->invert[ i ] ) {
- result = 0;
- break;
- }
- }
- }
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static int Fields( AstFrame *this_frame, int axis, const char *fmt,
- const char *str, int maxfld, char **fields,
- int *nc, double *val, int *status ) {
-/*
-*+
-* Name:
-* astFields
-
-* Purpose:
-* Identify numerical fields within a formatted FrameSet axis value.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frameset.h"
-* int astFields( AstFrame *this, int axis, const char *fmt,
-* const char *str, int maxfld, char **fields,
-* int *nc, double *val )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astFields
-* method inherited from the Frame class).
-
-* Description:
-* This function identifies the numerical fields within a FrameSet axis
-* value that has been formatted using astAxisFormat. It assumes that
-* the value was formatted using the supplied format string. It also
-* returns the equivalent floating point value.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* axis
-* The number of the FrameSet axis for which the values have been
-* formatted (axis numbering starts at zero for the first axis).
-* fmt
-* Pointer to a constant null-terminated string containing the
-* format used when creating "str".
-* str
-* Pointer to a constant null-terminated string containing the
-* formatted value.
-* maxfld
-* The maximum number of fields to identify within "str".
-* fields
-* A pointer to an array of at least "maxfld" character pointers.
-* Each element is returned holding a pointer to the start of the
-* corresponding field in "str" (in the order in which they occur
-* within "str"), or NULL if no corresponding field can be found.
-* nc
-* A pointer to an array of at least "maxfld" integers. Each
-* element is returned holding the number of characters in the
-* corresponding field, or zero if no corresponding field can be
-* found.
-* val
-* Pointer to a location at which to store the value
-* equivalent to the returned field values. If this is NULL,
-* it is ignored.
-
-* Returned Value:
-* The number of fields succesfully identified and returned.
-
-* Notes:
-* - Leading and trailing spaces are ignored.
-* - If the formatted value is not consistent with the supplied format
-* string, then a value of zero will be returned, "fields" will be
-* returned holding NULLs, "nc" will be returned holding zeros, and
-* "val" is returned holding VAL__BAD.
-* - Fields are counted from the start of the formatted string. If the
-* string contains more than "maxfld" fields, then trailing fields are
-* ignored.
-* - If this function is invoked with the global error status set, or
-* if it should fail for any reason, then a value of zero will be returned
-* as the function value, and "fields", "nc" and "val" will be returned
-* holding their supplied values
-*-
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- int result; /* Result field count to return */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis, "astFields" );
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
- Frame's astFields method to perform the processing. Annul the Frame
- pointer afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- result = astFields( fr, axis, fmt, str, maxfld, fields, nc, val );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result. */
- if ( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static AstFrameSet *FindFrame( AstFrame *target_frame, AstFrame *template,
- const char *domainlist, int *status ) {
-/*
-* Name:
-* FindFrame
-
-* Purpose:
-* Find a coordinate system with specified characteristics.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* AstFrameSet *FindFrame( AstFrame *target, AstFrame *template,
-* const char *domainlist, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the astFindFrame method
-* inherited from the Frame class).
-
-* Description:
-* This function uses a "template" Frame to search a FrameSet to
-* identify a coordinate system which has a specified set of
-* characteristics. If a suitable coordinate system can be found,
-* the function returns a pointer to a FrameSet which describes the
-* required coordinate system and how to convert coordinates to and
-* from it.
-
-* Parameters:
-* target
-* Pointer to the target FrameSet. Note that if a suitable
-* coordinate system is found, then the FrameSet's Current
-* attribute will be modified to indicate which Frame was used
-* to obtain attribute values which were not specified by the
-* template.
-* template
-* Pointer to the template Frame, which should be an instance of
-* the type of Frame you wish to find.
-* domainlist
-* Pointer to a null-terminated character string containing a
-* comma-separated list of Frame domains. This may be used to
-* establish a priority order for the different types of
-* coordinate system that might be found.
-*
-* The function will first try to find a suitable coordinate
-* system whose Domain attribute equals the first domain in this
-* list. If this fails, the second domain in the list will be
-* used, and so on, until a result is obtained. A blank domain
-* (e.g. two consecutive commas) indicates that any coordinate
-* system is acceptable (subject to the template) regardless of
-* its domain.
-*
-* This list is case-insensitive and all white space is ignored.
-* If you do not wish to restrict the domain in this way, you
-* should supply an empty string.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If the search is successful, the function returns a pointer to a
-* FrameSet which contains the Frame found and a description of how
-* to convert to (and from) the coordinate system it
-* represents. Otherwise, a null Object pointer (AST__NULL) is
-* returned without error.
-*
-* If a FrameSet is returned, it will contain two Frames. Frame
-* number 1 (its base Frame) represents the target coordinate
-* system and will be the same as the (base Frame of the)
-* target. Frame number 2 (its current Frame) will be a Frame
-* representing the coordinate system which the function found. The
-* Mapping which inter-relates these two Frames will describe how
-* to convert between their respective coordinate systems.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-* function is invoked with the AST error status set, or if it
-* should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFrame *base_frame; /* Pointer to target base Frame */
- AstFrame *frame; /* Pointer to result Frame */
- AstFrame *selected_frame; /* Pointer to selected target Frame */
- AstFrameSet *found; /* FrameSet pointer (result of search) */
- AstFrameSet *result; /* Pointer to result FrameSet */
- AstFrameSet *target; /* Pointer to target FrameSet structure */
- AstMapping *map; /* Pointer to result Mapping */
- AstMapping *prefix; /* Pointer to prefix Mapping */
- AstMapping *tmp; /* Temporary Mapping pointer */
- char *domain; /* Pointer to individual domain field */
- char *domain_end; /* Pointer to null at end of domain */
- char *domainlist_copy; /* Pointer to copy of domains list */
- int *target_order; /* Array of indices defining search order */
- int match; /* Match obtained? */
- int n; /* Count of target_order elements */
- int target_base; /* Index of target base Frame */
- int target_current; /* Index of target current Frame */
- int target_index; /* Index of selected target Frame */
- int target_nframe; /* Number of Frames in target FrameSet */
- int target_number; /* Loop index for search */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- target_index = 0;
-
-/* Obtain a pointer to the target FrameSet structure. */
- target = (AstFrameSet *) target_frame;
-
-/* Determine the number of Frames in the target FrameSet and the
- indices of the current and base Frames. */
- target_nframe = astGetNframe( target );
- target_current = astGetCurrent( target );
- target_base = astGetBase( target );
-
-/* Allocate an array to hold a list of all the target Frame indices. */
- target_order = astMalloc( sizeof( int ) * (size_t) target_nframe );
-
-/* Make a temporary copy of the domains list. */
- domainlist_copy = astStore( NULL, domainlist,
- strlen( domainlist ) + (size_t) 1 );
- if ( astOK ) {
-
-/* Form a list of the indices of all the Frames in the target in the
- order they will be searched for a match. Add the current Frame
- index first. */
- n = 0;
- target_order[ n++ ] = target_current;
-
-/* Follow this by the base Frame index, if different. */
- if ( target_base != target_current ) target_order[ n++ ] = target_base;
-
-/* Then add all the remaining target Frame indices. */
- for ( target_index = 1; target_index <= target_nframe; target_index++ ) {
- if ( ( target_index != target_current ) &&
- ( target_index != target_base ) ) {
- target_order[ n++ ] = target_index;
- }
- }
-
-/* Loop to inspect each comma-separated field in the domains list
- until an error occurs, all the domains are used up, or a match is
- found. */
- domain = domainlist_copy;
- match = 0;
- while ( astOK && domain && !match ) {
-
-/* Change the comma at the end of each field to a null to terminate
- the domain. */
- if ( ( domain_end = strchr( domain, ',' ) ) ) *domain_end = '\0';
-
-/* Loop to try and match each target Frame in turn, in the order
- identified above. Quit the loop early if an error occurs or a match
- is found. */
- for ( target_number = 0;
- astOK && !match && ( target_number < target_nframe );
- target_number++ ) {
-
-/* Permute the target Frame number into a Frame index to implement the
- required search order. Then obtain a pointer to the selected target
- Frame. */
- target_index = target_order[ target_number ];
- selected_frame = astGetFrame( target, target_index );
-
-/* Search the target Frame using the template supplied, together with
- the current domain. */
- found = astFindFrame( selected_frame, template, domain );
-
-/* Note if a match is found, and extract pointers to the conversion
- Mapping and the result Frame from the FrameSet produced. */
- if ( astOK && found ) {
- match = 1;
- map = astGetMapping( found, AST__BASE, AST__CURRENT );
- frame = astGetFrame( found, AST__CURRENT );
-
-/* Obtain a pointer to the Mapping between the target base Frame and
- the selected target Frame, and prefix this Mapping to the one
- obtained above. */
- prefix = astGetMapping( target, AST__BASE, target_index );
- tmp = (AstMapping *) astCmpMap( prefix, map, 1, "", status );
- prefix = astAnnul( prefix );
- map = astAnnul( map );
- map = tmp;
-
-/* Simplify the resulting Mapping. */
- tmp = astSimplify( map );
- map = astAnnul( map );
- map = tmp;
-
-/* Obtain a pointer to the target base Frame, and use this to start
- building the result FrameSet. */
- base_frame = astGetFrame( target, AST__BASE );
- result = astFrameSet( base_frame, "", status );
- base_frame = astAnnul( base_frame );
-
-/* Add the result Frame, which is related to the base Frame by the
- result Mapping. */
- astAddFrame( result, AST__BASE, map, frame );
-
-/* Annul pointers to all intermediate Objects. */
- map = astAnnul( map );
- frame = astAnnul( frame );
- found = astAnnul( found );
- }
- selected_frame = astAnnul( selected_frame );
- }
-
-/* Go on to consider the next field in the domains list. */
- domain = domain_end ? domain_end + 1 : NULL;
- }
- }
-
-/* Free the temporary arrays. */
- target_order = astFree( target_order );
- domainlist_copy = astFree( domainlist_copy );
-
-/* If a result is being returned, set the current Frame of the target
- to indicate where the result Frame was found. */
- if ( astOK && result ) astSetCurrent( target, target_index );
-
-/* If an error occurred, annul any result FrameSet pointer. */
- if ( !astOK && result ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static int ForceCopy( AstFrameSet *this, int iframe, int *status ) {
-/*
-* Name:
-* ForceCopy
-
-* Purpose:
-* Force a copy to be made of a Frame, if necessary.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* int ForceCopy( AstFrameSet *this, int iframe, int *status )
-
-* Class Membership:
-* FrameSet member function.
-
-* Description:
-* This function examines a Frame within a FrameSet, identified by its
-* Frame index. If the same Frame is found to be referenced a second time
-* within the FrameSet, then the original reference is replaced with an
-* independent copy of the Frame.
-*
-* This process supports the preservation of FrameSet integrity in cases
-* where the same Frame is referenced more than once. After using this
-* function, the nominated Frame's attributes may be modified without
-* danger of affecting other parts of the FrameSet.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* iframe
-* The index of the Frame to be examined.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a copy of the nominated Frame was made, otherwise zero.
-
-* Notes:
-* - Using this function a second time on the same Frame will have no
-* effect, since the first usage will make the Frame independent of any
-* other Frames within the FrameSet.
-* - A value of zero will be returned if this function is invoked with
-* the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstFrame *frame; /* Pointer to Frame */
- AstFrame *tmp; /* Temporary Frame pointer */
- int ifr; /* Loop counter for Frames */
- int result; /* Value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Validate and translate the Frame index supplied. */
- iframe = astValidateFrameIndex( this, iframe, integrity_method );
-
-/* If OK, obtain the corresponding Frame pointer (don't clone it). */
- if ( astOK ) {
- frame = this->frame[ iframe - 1 ];
-
-/* Loop to inspect each Frame in the FrameSet. */
- for ( ifr = 1; ifr <= this->nframe; ifr++ ) {
-
-/* If the same Frame is referenced anywhere else, then make a copy of it. */
- if ( ( ifr != iframe ) && ( this->frame[ ifr - 1 ] == frame ) ) {
- tmp = astCopy( frame );
-
-/* If successful, replace the original reference to the Frame with a pointer
- to this copy and annul the original pointer. */
- if ( astOK ) {
- this->frame[ iframe - 1 ] = tmp;
- frame = astAnnul( frame );
-
-/* Set the returned result. */
- if ( astOK ) result = 1;
- }
-
-/* Quit looping once a copy has been made. */
- break;
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *Format( AstFrame *this_frame, int axis, double value, int *status ) {
-/*
-* Name:
-* Format
-
-* Purpose:
-* Format a coordinate value for a FrameSet axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* const char *Format( AstFrame *this, int axis, double value, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the astFormat method
-* inherited from the Frame class).
-
-* Description:
-* This function returns a pointer to a string containing the
-* formatted (character) version of a coordinate value for a
-* FrameSet axis. The formatting applied is that specified by a
-* previous invocation of the astSetFormat method. A suitable
-* default format is applied if necessary.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* axis
-* The number of the axis (zero-based) for which formatting is
-* to be performed.
-* value
-* The coordinate value to be formatted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a null-terminated string containing the formatted
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the FrameSet object, or at static memory. The contents of
-* the string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or deletion
-* of the FrameSet. A copy of the string should therefore be made
-* if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- const char *result; /* Pointer value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis, "astFormat" );
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke the
- astFormat method for this Frame. Annul the Frame pointer
- afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- result = astFormat( fr, axis, value );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-static double Gap( AstFrame *this_frame, int axis, double gap, int *ntick, int *status ) {
-/*
-* Name:
-* Gap
-
-* Purpose:
-* Find a "nice" gap for tabulating FrameSet axis values.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* double Gap( AstFrame *this, int axis, double gap, int *ntick, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astGap method
-* inherited from the Frame class).
-
-* Description:
-* This function returns a gap size which produces a nicely spaced
-* series of formatted values for a FrameSet axis, the returned gap
-* size being as close as possible to the supplied target gap
-* size. It also returns a convenient number of divisions into
-* which the gap can be divided.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* axis
-* The number of the axis (zero-based) for which a gap is to be found.
-* gap
-* The target gap size.
-* ntick
-* Address of an int in which to return a convenient number of
-* divisions into which the gap can be divided.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The nice gap size.
-
-* Notes:
-* - A value of zero is returned if the target gap size is zero.
-* - A negative gap size is returned if the supplied gap size is negative.
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- double result; /* Gap value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return 0.0;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis, "astGap" );
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
- Frame's astGap method to obtain the required gap value. Annul the
- Frame pointer afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- result = astGap( fr, axis, gap, ntick );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result. */
- if ( !astOK ) result = 0.0;
-
-/* Return the result. */
- return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied FrameSet,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFrameSet *this; /* Pointer to FrameSet structure */
- int result; /* Result value to return */
- int iframe; /* Loop counter for Frames */
- int inode; /* Loop counter for nodes */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the FrameSet structure. */
- this = (AstFrameSet *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
-
- for ( iframe = 0; iframe < this->nframe; iframe++ ) {
- result += astGetObjSize( this->frame[ iframe ] );
- }
-
- for ( inode = 0; inode < this->nnode - 1; inode++ ) {
- result += astGetObjSize( this->map[ inode ] );
- }
-
- result += astTSizeOf( this->frame );
- result += astTSizeOf( this->node );
- result += astTSizeOf( this->map );
- result += astTSizeOf( this->link );
- result += astTSizeOf( this->invert );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astGetAttrib
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a FrameSet, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the FrameSet, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the FrameSet. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- const char *result; /* Pointer value to return */
- int base; /* Base attribute value */
- int current; /* Current attribute value */
- int invert; /* Invert attribute value */
- int nframe; /* Nframe attribute value */
- int nin; /* Nin attribute value */
- int nobject; /* Nobject attribute value */
- int nout; /* Nout attribute value */
- int ref_count; /* RefCount attribute value */
- int report; /* Report attribute value */
- int tranforward; /* TranForward attribute value */
- int traninverse; /* TranInverse attribute value */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null-terminated string in an appropriate
- format. Set "result" to point at the result string. */
-
-/* We first handle attributes that apply to the FrameSet as a whole
- (rather than to the current Frame). */
-
-/* Base. */
-/* ----- */
- if ( !strcmp( attrib, "base" ) ) {
- base = astGetBase( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", base );
- result = getattrib_buff;
- }
-
-/* Class. */
-/* ------ */
- } else if ( !strcmp( attrib, "class" ) ) {
- result = astGetClass( this );
-
-/* Current. */
-/* -------- */
- } else if ( !strcmp( attrib, "current" ) ) {
- current = astGetCurrent( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", current );
- result = getattrib_buff;
- }
-
-/* ID. */
-/* --- */
- } else if ( !strcmp( attrib, "id" ) ) {
- result = astGetID( this );
-
-/* Invert. */
-/* ------- */
- } else if ( !strcmp( attrib, "invert" ) ) {
- invert = astGetInvert( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", invert );
- result = getattrib_buff;
- }
-
-/* Nframe. */
-/* ------- */
- } else if ( !strcmp( attrib, "nframe" ) ) {
- nframe = astGetNframe( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", nframe );
- result = getattrib_buff;
- }
-
-/* Nin. */
-/* ---- */
- } else if ( !strcmp( attrib, "nin" ) ) {
- nin = astGetNin( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", nin );
- result = getattrib_buff;
- }
-
-/* Nobject. */
-/* -------- */
- } else if ( !strcmp( attrib, "nobject" ) ) {
- nobject = astGetNobject( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", nobject );
- result = getattrib_buff;
- }
-
-/* Nout. */
-/* ----- */
- } else if ( !strcmp( attrib, "nout" ) ) {
- nout = astGetNout( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", nout );
- result = getattrib_buff;
- }
-
-/* RefCount. */
-/* --------- */
- } else if ( !strcmp( attrib, "refcount" ) ) {
- ref_count = astGetRefCount( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ref_count );
- result = getattrib_buff;
- }
-
-/* Report. */
-/* ------- */
- } else if ( !strcmp( attrib, "report" ) ) {
- report = astGetReport( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", report );
- result = getattrib_buff;
- }
-
-/* TranForward. */
-/* ------------ */
- } else if ( !strcmp( attrib, "tranforward" ) ) {
- tranforward = astGetTranForward( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", tranforward );
- result = getattrib_buff;
- }
-
-/* TranInverse. */
-/* ------------ */
- } else if ( !strcmp( attrib, "traninverse" ) ) {
- traninverse = astGetTranInverse( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", traninverse );
- result = getattrib_buff;
- }
-
-/* Pass unrecognised attributes on to the FrameSet's current Frame for
- further interpretation. */
- } else {
-
-/* Obtain a pointer to the current Frame and invoke its astGetAttrib
- method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- result = astGetAttrib( fr, attrib );
- fr = astAnnul( fr );
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-static AstAxis *GetAxis( AstFrame *this_frame, int axis, int *status ) {
-/*
-* Name:
-* GetAxis
-
-* Purpose:
-* Obtain a pointer to a specified Axis from a FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* AstAxis *GetAxis( AstFrame *this, int axis, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the astGetAxis method
-* inherited from the Frame class).
-
-* Description:
-* This function returns a pointer to the Axis object associated
-* with one of the axes of the current Frame of a FrameSet. This
-* object describes the quantity which is represented along that
-* axis.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* axis
-* The number of the axis (zero-based) for which an Axis pointer
-* is required.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the requested Axis object.
-
-* Notes:
-* - The reference count of the requested Axis object will be
-* incremented by one to reflect the additional pointer returned by
-* this function.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstAxis *result; /* Pointer to Axis */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis, "astGetAxis" );
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
- Frame's astGetAxis method to obtain the required Axis
- pointer. Annul the Frame pointer afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- result = astGetAxis( fr, axis );
- fr = astAnnul( fr );
-
-/* If an error occurred, annul the result. */
- if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static int GetBase( AstFrameSet *this, int *status ) {
-/*
-*+
-* Name:
-* astGetBase
-
-* Purpose:
-* Obtain the value of the Base attribute for a FrameSet.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frameset.h"
-* int astGetBase( AstFrameSet *this )
-
-* Class Membership:
-* FrameSet method.
-
-* Description:
-* This function returns the value of the Base attribute for a
-* FrameSet. This value is an index that identifies the base Frame
-* in the FrameSet.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-
-* Returned Value:
-* The Base attribute value.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- int invert; /* FrameSet is inverted? */
- int result; /* Value to return */
-
-/* Initialise */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Determine if the FrameSet has been inverted. */
- invert = astGetInvert( this );
-
-/* If it has not been inverted, return the base Frame index, otherwise
- return the index of the current Frame instead. Provide defaults if
- necessary. */
- if ( astOK ) {
- if ( !invert ) {
- result = ( this->base != -INT_MAX ) ? this->base : 1;
- } else {
- result = ( this->current != -INT_MAX ) ? this->current :
- astGetNframe( this );
- }
- }
-
-/* If an error occurred, clear the result. */
- if ( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static int GetCurrent( AstFrameSet *this, int *status ) {
-/*
-*+
-* Name:
-* astGetCurrent
-
-* Purpose:
-* Obtain the value of the Current attribute for a FrameSet.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "frameset.h"
-* int astGetCurrent( AstFrameSet *this )
-
-* Class Membership:
-* FrameSet method.
-
-* Description:
-* This function returns the value of the Current attribute for a
-* FrameSet. This attribute is an index that identifies the
-* current Frame in a FrameSet.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-
-* Returned Value:
-* Value of the Current attribute.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- int invert; /* FrameSet is inverted? */
- int result; /* Value to return */
-
-/* Initialise */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Determine if the FrameSet has been inverted. */
- invert = astGetInvert( this );
-
-/* If it has not been inverted, return the current Frame index,
- otherwise return the index of the base Frame instead. Provide
- defaults if necessary. */
- if ( astOK ) {
- if ( !invert ) {
- result = ( this->current != -INT_MAX ) ? this->current :
- astGetNframe( this );
- } else {
- result = ( this->base != -INT_MAX ) ? this->base : 1;
- }
- }
-
-/* If an error occurred, clear the result. */
- if ( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static AstFrame *GetFrame( AstFrameSet *this, int iframe, int *status ) {
-/*
-*++
-* Name:
-c astGetFrame
-f AST_GETFRAME
-
-* Purpose:
-* Obtain a pointer to a specified Frame in a FrameSet.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "frameset.h"
-c AstFrame *astGetFrame( AstFrameSet *this, int iframe )
-f RESULT = AST_GETFRAME( THIS, IFRAME, STATUS )
-
-* Class Membership:
-* FrameSet method.
-
-* Description:
-* This function returns a pointer to a specified Frame in a
-* FrameSet.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the FrameSet.
-c iframe
-f IFRAME = INTEGER (Given)
-* The index of the required Frame within the FrameSet. This
-* value should lie in the range from 1 to the number of Frames
-* in the FrameSet (as given by its Nframe attribute).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astGetFrame()
-f AST_GETFRAME = INTEGER
-* A pointer to the requested Frame.
-
-* Notes:
-* - A value of AST__BASE or AST__CURRENT may be given for the
-c "iframe" parameter to specify the base Frame or the current
-f IFRAME argument to specify the base Frame or the current
-* Frame respectively.
-* - This function increments the RefCount attribute of the
-* selected Frame by one.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
- AstFrame *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Validate and translate the Frame index supplied. */
- iframe = astValidateFrameIndex( this, iframe, "astGetFrame" );
-
-/* If OK, clone a pointer to the requested Frame. */
- if ( astOK ) result = astClone( this->frame[ iframe - 1 ] );
-
-/* Return the result. */
- return result;
-}
-
-static int GetIsLinear( AstMapping *this_mapping, int *status ){
-/*
-* Name:
-* GetIsLinear
-
-* Purpose:
-* Return the value of the IsLinear attribute for a FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void GetIsLinear( AstMapping *this, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astGetIsLinear
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns the value of the IsLinear attribute for a
-* FrameSet, which is the IsLinear value of he base->current Mapping.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* status
-* Pointer to the inherited status variable.
-*/
-/* Local Variables: */
- AstMapping *map;
- int result;
-
-/* Check global status */
- if( !astOK ) return 0;
-
-/* Get the Mapping. */
- map = astGetMapping( (AstFrameSet *) this_mapping, AST__BASE,
- AST__CURRENT );
-
-/* Get its IsLinear attribute value. */
- result = astGetIsLinear( map );
-
-/* Free the Mapping. */
- map = astAnnul( map );
-
-/* Return the result. */
- return result;
-}
-
-static AstMapping *GetMapping( AstFrameSet *this, int iframe1, int iframe2, int *status ) {
-/*
-*++
-* Name:
-c astGetMapping
-f AST_GETMAPPING
-
-* Purpose:
-* Obtain a Mapping that converts between two Frames in a FrameSet.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "frameset.h"
-c AstMapping *astGetMapping( AstFrameSet *this, int iframe1, int iframe2 )
-f RESULT = AST_GETMAPPING( THIS, IFRAME1, IFRAME2, STATUS )
-
-* Class Membership:
-* FrameSet method.
-
-* Description:
-* This function returns a pointer to a Mapping that will convert
-* coordinates between the coordinate systems represented by two
-* Frames in a FrameSet.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the FrameSet.
-c iframe1
-f IFRAME1 = INTEGER (Given)
-* The index of the first Frame in the FrameSet. This Frame describes
-* the coordinate system for the "input" end of the Mapping.
-c iframe2
-f IFRAME2 = INTEGER (Given)
-* The index of the second Frame in the FrameSet. This Frame
-* describes the coordinate system for the "output" end of the
-* Mapping.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astGetMapping()
-f AST_GETMAPPING = INTEGER
-* Pointer to a Mapping whose forward transformation converts
-* coordinates from the first coordinate system to the second
-* one, and whose inverse transformation converts coordinates in
-* the opposite direction.
-
-* Notes:
-* - The returned Mapping will include the clipping effect of any
-* Regions which occur on the path between the two supplied Frames
-* (this includes the two supplied Frames themselves).
-c - The values given for the "iframe1" and "iframe2" parameters
-f - The values given for the IFRAME1 and IFRAME2 arguments
-* should lie in the range from 1 to the number of Frames in the
-* FrameSet (as given by its Nframe attribute). A value of
-* AST__BASE or AST__CURRENT may also be given to identify the
-* FrameSet's base Frame or current Frame respectively. It is
-c permissible for both these parameters to have the same value, in
-f permissible for both these arguments to have the same value, in
-* which case a unit Mapping (UnitMap) is returned.
-* - It should always be possible to generate the Mapping
-* requested, but this does necessarily guarantee that it will be
-* able to perform the required coordinate conversion. If
-* necessary, the TranForward and TranInverse attributes of the
-* returned Mapping should be inspected to determine if the
-* required transformation is available.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Temporary pointer to Frame */
- AstFrame **frames; /* Pointer to array of Frames */
- AstMapping **path; /* Pointer to array of conversion Mappings */
- AstMapping *copy; /* Pointer to copy of Mapping */
- AstMapping *result; /* Result pointer to be returned */
- AstMapping *tmp; /* Temporary pointer for joining Mappings */
- int *forward; /* Pointer to array of Mapping directions */
- int ipath; /* Loop counter for conversion path steps */
- int iframe; /* Frame index */
- int inode; /* Node index */
- int npath; /* Number of steps in conversion path */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Validate and translate the Frame indices supplied. */
- iframe1 = astValidateFrameIndex( this, iframe1, "astGetMapping" );
- iframe2 = astValidateFrameIndex( this, iframe2, "astGetMapping" );
-
-/* Allocate memory to hold an array of Mapping pointers and associated
- direction flags - a maximum of one element for each Mapping and one
- for each Frame in the FrameSet. */
- path = astMalloc( sizeof( AstMapping * ) * (size_t) ( this->nnode - 1 +
- this->nframe ) );
- forward = astMalloc( sizeof( int ) * (size_t) ( this->nnode - 1 +
- this->nframe ) );
-
-/* Allocate memory to hold a list of the Frame pointers (if any) associated
- with each node. */
- frames = astMalloc( sizeof( AstFrame * ) * (size_t) ( this->nnode ) );
-
-/* If OK, set up an array of Frame pointers indexed by node index. If a
- node has no associated Frame store a NULL pointer. This is needed so
- that we can find Frame pointers quickly within the Span function. Note,
- we simply copy the pointers rather than cloning them, so they do not
- need to be annulled when finished with. */
- if ( astOK ) {
- for( inode = 0; inode < this->nnode; inode++ ) frames[ inode ] = NULL;
- for( iframe = 0; iframe < this->nframe; iframe++ ) {
- frames[ this->node[ iframe ] ] = this->frame[ iframe ];
- }
-
-/* Obtain the Mapping pointers and direction flags needed to convert
- coordinates between the nodes associated with the two specified
- Frames. */
- npath = Span( this, frames, this->node[ iframe1 - 1 ],
- this->node[ iframe2 - 1 ], -1, path, forward, status ) - 1;
-
-/* If this failed, it indicates a corrupt FrameSet object, so report
- an error. */
- if ( npath < 0 ) {
- astError( AST__FRSIN, "astGetMapping(%s): Invalid or corrupt "
- "%s - could not find conversion path between Frames "
- "%d and %d.", status, astGetClass( this ), astGetClass( this ),
- iframe1, iframe2 );
-
-/* If the conversion path is of zero length (i.e. the two Frames are
- the same) then we will return a Mapping which is equivalent to the
- Frame. Most classes of Frame are equivalent to a UnitMap. However, we do
- not hard-wire this equivalence since some classes of Frame (e.g. Regions
- or CmpFrames containing Regions) do not correspond to a UnitMap. Instead
- we use the astIsUnitFrame method on the Frame to determine if the
- Frame is equivalent to a UnitMap.Is os, create a suitable UnitMap. If
- not, return the Frame itself (a form of Mapping). */
- } else if ( npath == 0 ) {
- fr = astGetFrame( this, iframe1 );
- if( astIsUnitFrame( fr ) ){
- result = (AstMapping *) astUnitMap( astGetNaxes( fr ), "", status );
- } else {
- result = (AstMapping *) astClone( fr );
- }
- fr = astAnnul( fr );
-
-/* If the conversion path involves at least one non-trivial Mapping,
- make a copy of the first Mapping, inverting the copy if
- necessary. */
- } else {
- result = astCopy( path[ 0 ] );
- if ( !forward[ 0 ] ) astInvert( result );
-
-/* Now loop to concatenate any further Mappings. First make a copy of
- each additional Mapping and invert the copy if necessary. */
- for ( ipath = 1; ipath < npath; ipath++ ) {
- copy = astCopy( path[ ipath ] );
- if ( !forward[ ipath ] ) astInvert( copy );
-
-/* Concatenate the copy with the result so far, then annul the pointer
- to the copy and save the pointer to the new result. */
- tmp = (AstMapping *) astCmpMap( result, copy, 1, "", status );
- result = astAnnul( result );
- copy = astAnnul( copy );
- result = tmp;
- }
- }
- }
-
-/* Free the memory allocated for the conversion path information. */
- path = astFree( path );
- forward = astFree( forward );
- frames = astFree( frames );
-
-/* If an error occurred, annul the returned Mapping. */
- if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static int GetNaxes( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetNaxes
-
-* Purpose:
-* Determine how many axes a FrameSet has.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* int GetNaxes( AstFrame *this, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the astGetNaxes method
-* inherited from the Frame class).
-
-* Description:
-* This function returns the number of axes for a FrameSet. This is equal
-* to the number of axes in its current Frame.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The number of FrameSet axes (zero or more).
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- int result; /* Result to be returned */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame. */
- fr = astGetFrame( this, AST__CURRENT );
-
-/* Obtain the number of axes in this Frame. */
- result = astGetNaxes( fr );
-
-/* Annul the current Frame pointer. */
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static int GetNframe( AstFrameSet *this, int *status ) {
-/*
-*+
-* Name:
-* astGetNframe
-
-* Purpose:
-* Determine the number of Frames in a FrameSet.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frameset.h"
-* int astGetNframe( AstFrameSet *this )
-
-* Class Membership:
-* FrameSet method.
-
-* Description:
-* This function returns the number of Frames in a FrameSet.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-
-* Returned Value:
-* The number of Frames in the FrameSet (always 1 or more).
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Return the Frame count. */
- return this->nframe;
-}
-
-static int GetNin( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* GetNin
-
-* Purpose:
-* Get the number of input coordinates for a FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* int GetNin( AstMapping *this, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the astGetNin method
-* inherited from the Frame class).
-
-* Description:
-* This function returns the number of input coordinate values
-* required per point by a FrameSet when used to transform a set of
-* points (i.e. the number of dimensions of the space in which the
-* input points reside).
-*
-* The value returned is equal to the number of axes in the
-* FrameSet's base Frame.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Number of coordinate values required.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to base Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- int result; /* Result to be returned */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_mapping;
-
-/* Obtain a pointer to the FrameSet's base Frame. */
- fr = astGetFrame( this, AST__BASE );
-
-/* Obtain the number of axes in this Frame. */
- result = astGetNaxes( fr );
-
-/* Annul the base Frame pointer. */
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static int GetNout( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* GetNout
-
-* Purpose:
-* Get the number of output coordinates for a FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* int GetNout( AstMapping *this, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the astGetNout method
-* inherited from the Frame class).
-
-* Description:
-* This function returns the number of output coordinate values
-* generated per point by a FrameSet when used to transform a set
-* of points (i.e. the number of dimensions of the space in which
-* the output points reside).
-*
-* The value returned is equal to the number of axes in the
-* FrameSet's current Frame.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Number of coordinate values generated.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Return the number of axes in the FrameSet's current Frame. */
- return GetNaxes( (AstFrame *) this_mapping, status );
-}
-
-static const int *GetPerm( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetPerm
-
-* Purpose:
-* Access the axis permutation array for the current Frame of a FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* const int *GetPerm( AstFrame *this, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the astGetPerm protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a pointer to the axis permutation array
-* for the current Frame of a FrameSet. This array constitutes a
-* lookup-table that converts between an axis number supplied
-* externally and the corresponding index in the Frame's internal
-* axis arrays.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the current Frame's axis permutation array (a
-* constant array of int). Each element of this contains the
-* (zero-based) internal axis index to be used in place of the
-* external index which is used to address the permutation
-* array. If the current Frame has zero axes, this pointer will be
-* NULL.
-
-* Notes:
-* - The pointer returned by this function gives direct access to
-* data internal to the Frame object. It remains valid only so long
-* as the Frame exists. The permutation array contents may be
-* modified by other functions which operate on the Frame and this
-* may render the returned pointer invalid.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to FrameSet structure */
- const int *result; /* Result pointer value */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and then obtain a
- pointer to its axis permutation array. Annul the Frame pointer
- afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- result = astGetPerm( fr );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-static int GetTranForward( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* GetTranForward
-
-* Purpose:
-* Determine if a FrameSet defines a forward coordinate transformation.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* int GetTranForward( AstMapping *this )
-
-* Class Membership:
-* Frameset member function (over-rides the astGetTranForward
-* protected method inherited from the Frame class).
-
-* Description:
-* This function returns a value indicating whether a FrameSet is
-* able to perform a coordinate transformation in the "forward"
-* direction.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-
-* Returned Value:
-* Zero if the forward coordinate transformation is not defined, or
-* 1 if it is.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- AstMapping *map; /* Pointer to base->current Mapping */
- int result; /* Result to be returned */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_mapping;
-
-/* Obtain the Mapping between the base and current Frames in the
- FrameSet (note this takes account of whether the FrameSet has been
- inverted). */
- map = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Determine whether the required transformation is defined. */
- result = astGetTranForward( map );
-
-/* Annul the Mapping pointer. */
- map = astAnnul( map );
-
-/* If an error occurred, clear the returned result. */
- if ( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static int GetTranInverse( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* GetTranInverse
-
-* Purpose:
-* Determine if a FrameSet defines an inverse coordinate transformation.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* int GetTranInverse( AstMapping *this )
-
-* Class Membership:
-* Frameset member function (over-rides the astGetTranInverse
-* protected method inherited from the Frame class).
-
-* Description:
-* This function returns a value indicating whether a FrameSet is
-* able to perform a coordinate transformation in the "inverse"
-* direction.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-
-* Returned Value:
-* Zero if the inverse coordinate transformation is not defined, or
-* 1 if it is.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- AstMapping *map; /* Pointer to base->current Mapping */
- int result; /* Result to be returned */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_mapping;
-
-/* Obtain the Mapping between the base and current Frames in the
- FrameSet (note this takes account of whether the FrameSet has been
- inverted). */
- map = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Determine whether the required transformation is defined. */
- result = astGetTranInverse( map );
-
-/* Annul the Mapping pointer. */
- map = astAnnul( map );
-
-/* If an error occurred, clear the returned result. */
- if ( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static int GetUseDefs( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetUseDefs
-
-* Purpose:
-* Get the value of the UseDefs attribute for a FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* int GetUseDefs( AstObject *this_object, int *status ) {
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astGetUseDefs
-* method inherited from the Frame class).
-
-* Description:
-* This function returns the value of the UseDefs attribute for a FrameSet,
-* supplying a suitable default.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - The USeDefs value.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- int result; /* Value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_object;
-
-/* If the UseDefs value for the FrameSet has been set explicitly, use the
- Get method inherited from the parent Frame class to get its value> */
- if( astTestUseDefs( this ) ) {
- result = (*parent_getusedefs)( this_object, status );
-
-/* Otherwise, supply a default value equal to the UseDefs value of the
- current Frame. */
- } else {
- fr = astGetFrame( this, AST__CURRENT );
- result = astGetUseDefs( fr );
- fr = astAnnul( fr );
- }
-
-/* Return the result. */
- return result;
-}
-
-void astInitFrameSetVtab_( AstFrameSetVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitFrameSetVtab
-
-* Purpose:
-* Initialise a virtual function table for a FrameSet.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "frameset.h"
-* void astInitFrameSetVtab( AstFrameSetVtab *vtab, const char *name )
-
-* Class Membership:
-* FrameSet vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the FrameSet class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrameVtab *frame; /* Pointer to Frame component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitFrameVtab( (AstFrameVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAFrameSet) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstFrameVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
- vtab->AddFrame = AddFrame;
- vtab->ClearBase = ClearBase;
- vtab->ClearCurrent = ClearCurrent;
- vtab->GetBase = GetBase;
- vtab->GetCurrent = GetCurrent;
- vtab->GetFrame = GetFrame;
- vtab->GetMapping = GetMapping;
- vtab->GetNframe = GetNframe;
- vtab->RemapFrame = RemapFrame;
- vtab->RemoveFrame = RemoveFrame;
- vtab->SetBase = SetBase;
- vtab->SetCurrent = SetCurrent;
- vtab->TestBase = TestBase;
- vtab->TestCurrent = TestCurrent;
- vtab->ValidateFrameIndex = ValidateFrameIndex;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
-
- parent_clear = object->Clear;
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
- object->Clear = Clear;
-
- parent_vset = object->VSet;
- object->VSet = VSet;
-
- parent_getusedefs = object->GetUseDefs;
- object->GetUseDefs = GetUseDefs;
-
-#if defined(THREAD_SAFE)
- parent_managelock = object->ManageLock;
- object->ManageLock = ManageLock;
-#endif
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- mapping = (AstMappingVtab *) vtab;
- frame = (AstFrameVtab *) vtab;
-
- object->ClearAttrib = ClearAttrib;
- object->GetAttrib = GetAttrib;
- object->SetAttrib = SetAttrib;
- object->TestAttrib = TestAttrib;
-
- object->GetUseDefs = GetUseDefs;
- object->Equal = Equal;
- object->Cast = Cast;
-
- mapping->GetIsLinear = GetIsLinear;
- mapping->GetNin = GetNin;
- mapping->GetNout = GetNout;
- mapping->GetTranForward = GetTranForward;
- mapping->GetTranInverse = GetTranInverse;
- mapping->Rate = Rate;
- mapping->ReportPoints = ReportPoints;
- mapping->RemoveRegions = RemoveRegions;
- mapping->Simplify = Simplify;
- mapping->Transform = Transform;
- mapping->MapSplit = MapSplit;
-
- frame->Abbrev = Abbrev;
- frame->Angle = Angle;
- frame->AxAngle = AxAngle;
- frame->AxDistance = AxDistance;
- frame->AxOffset = AxOffset;
- frame->CheckPerm = CheckPerm;
- frame->ClearDigits = ClearDigits;
- frame->ClearDirection = ClearDirection;
- frame->ClearDomain = ClearDomain;
- frame->ClearFormat = ClearFormat;
- frame->ClearLabel = ClearLabel;
- frame->ClearMatchEnd = ClearMatchEnd;
- frame->ClearMaxAxes = ClearMaxAxes;
- frame->ClearMinAxes = ClearMinAxes;
- frame->ClearPermute = ClearPermute;
- frame->ClearPreserveAxes = ClearPreserveAxes;
- frame->ClearSymbol = ClearSymbol;
- frame->ClearTitle = ClearTitle;
- frame->ClearUnit = ClearUnit;
- frame->Convert = Convert;
- frame->ConvertX = ConvertX;
- frame->Distance = Distance;
- frame->Fields = Fields;
- frame->FindFrame = FindFrame;
- frame->Format = Format;
- frame->Gap = Gap;
- frame->GetAxis = GetAxis;
- frame->GetDigits = GetDigits;
- frame->GetDirection = GetDirection;
- frame->GetDomain = GetDomain;
- frame->GetFormat = GetFormat;
- frame->GetLabel = GetLabel;
- frame->GetMatchEnd = GetMatchEnd;
- frame->GetMaxAxes = GetMaxAxes;
- frame->GetMinAxes = GetMinAxes;
- frame->GetNaxes = GetNaxes;
- frame->GetPerm = GetPerm;
- frame->GetPermute = GetPermute;
- frame->GetPreserveAxes = GetPreserveAxes;
- frame->GetSymbol = GetSymbol;
- frame->GetTitle = GetTitle;
- frame->GetUnit = GetUnit;
- frame->Intersect = Intersect;
- frame->IsUnitFrame = IsUnitFrame;
- frame->Match = Match;
- frame->MatchAxes = MatchAxes;
- frame->MatchAxesX = MatchAxesX;
- frame->Norm = Norm;
- frame->NormBox = NormBox;
- frame->Offset = Offset;
- frame->Offset2 = Offset2;
- frame->Overlay = Overlay;
- frame->PermAxes = PermAxes;
- frame->PickAxes = PickAxes;
- frame->PrimaryFrame = PrimaryFrame;
- frame->Resolve = Resolve;
- frame->ResolvePoints = ResolvePoints;
- frame->SetAxis = SetAxis;
- frame->SetDigits = SetDigits;
- frame->SetDirection = SetDirection;
- frame->SetDomain = SetDomain;
- frame->SetFormat = SetFormat;
- frame->SetLabel = SetLabel;
- frame->SetMatchEnd = SetMatchEnd;
- frame->SetMaxAxes = SetMaxAxes;
- frame->SetMinAxes = SetMinAxes;
- frame->SetPermute = SetPermute;
- frame->SetPreserveAxes = SetPreserveAxes;
- frame->SetSymbol = SetSymbol;
- frame->SetTitle = SetTitle;
- frame->SetUnit = SetUnit;
- frame->SubFrame = SubFrame;
- frame->SystemCode = SystemCode;
- frame->SystemString = SystemString;
- frame->TestDigits = TestDigits;
- frame->TestDirection = TestDirection;
- frame->TestDomain = TestDomain;
- frame->TestFormat = TestFormat;
- frame->TestLabel = TestLabel;
- frame->TestMatchEnd = TestMatchEnd;
- frame->TestMaxAxes = TestMaxAxes;
- frame->TestMinAxes = TestMinAxes;
- frame->TestPermute = TestPermute;
- frame->TestPreserveAxes = TestPreserveAxes;
- frame->TestSymbol = TestSymbol;
- frame->TestTitle = TestTitle;
- frame->TestUnit = TestUnit;
- frame->Unformat = Unformat;
- frame->ValidateAxis = ValidateAxis;
- frame->ValidateAxisSelection = ValidateAxisSelection;
- frame->ValidateSystem = ValidateSystem;
- frame->LineDef = LineDef;
- frame->LineContains = LineContains;
- frame->LineCrossing = LineCrossing;
- frame->LineOffset = LineOffset;
-
- frame->GetActiveUnit = GetActiveUnit;
- frame->SetActiveUnit = SetActiveUnit;
- frame->TestActiveUnit = TestActiveUnit;
-
- frame->GetTop = GetTop;
- frame->SetTop = SetTop;
- frame->TestTop = TestTop;
- frame->ClearTop = ClearTop;
-
- frame->GetBottom = GetBottom;
- frame->SetBottom = SetBottom;
- frame->TestBottom = TestBottom;
- frame->ClearBottom = ClearBottom;
-
- frame->GetEpoch = GetEpoch;
- frame->SetEpoch = SetEpoch;
- frame->TestEpoch = TestEpoch;
- frame->ClearEpoch = ClearEpoch;
-
- frame->GetSystem = GetSystem;
- frame->SetSystem = SetSystem;
- frame->TestSystem = TestSystem;
- frame->ClearSystem = ClearSystem;
-
- frame->GetAlignSystem = GetAlignSystem;
- frame->SetAlignSystem = SetAlignSystem;
- frame->TestAlignSystem = TestAlignSystem;
- frame->ClearAlignSystem = ClearAlignSystem;
-
- frame->ClearObsLat = ClearObsLat;
- frame->TestObsLat = TestObsLat;
- frame->GetObsLat = GetObsLat;
- frame->SetObsLat = SetObsLat;
-
- frame->ClearObsAlt = ClearObsAlt;
- frame->TestObsAlt = TestObsAlt;
- frame->GetObsAlt = GetObsAlt;
- frame->SetObsAlt = SetObsAlt;
-
- frame->ClearObsLon = ClearObsLon;
- frame->TestObsLon = TestObsLon;
- frame->GetObsLon = GetObsLon;
- frame->SetObsLon = SetObsLon;
-
-/* Declare the copy constructor, destructor and class dump
- functions. */
- astSetDelete( vtab, Delete );
- astSetCopy( vtab, Copy );
- astSetDump( vtab, Dump, "FrameSet",
- "Set of inter-related coordinate systems" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static void Intersect( AstFrame *this_frame, const double a1[2],
- const double a2[2], const double b1[2],
- const double b2[2], double cross[2],
- int *status ) {
-/*
-* Name:
-* Intersect
-
-* Purpose:
-* Find the point of intersection between two geodesic curves.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* void Intersect( AstFrame *this_frame, const double a1[2],
-* const double a2[2], const double b1[2],
-* const double b2[2], double cross[2],
-* int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the astIntersect method
-* inherited from the Frame class).
-
-* Description:
-* This function finds the coordinate values at the point of
-* intersection between two geodesic curves. Each curve is specified
-* by two points on the curve.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* a1
-* An array of double, with one element for each Frame axis.
-* This should contain the coordinates of a point on the first
-* geodesic curve.
-* a2
-* An array of double, with one element for each Frame axis.
-* This should contain the coordinates of a second point on the
-* first geodesic curve.
-* b1
-* An array of double, with one element for each Frame axis.
-* This should contain the coordinates of a point on the second
-* geodesic curve.
-* b2
-* An array of double, with one element for each Frame axis.
-* This should contain the coordinates of a second point on
-* the second geodesic curve.
-* cross
-* An array of double, with one element for each Frame axis
-* in which the coordinates of the required intersection
-* point will be returned. These will be AST__BAD if the curves do
-* not intersect.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The geodesic curve used by this function is the path of
-* shortest distance between two points, as defined by the
-* astDistance function.
-* - This function will return "bad" coordinate values (AST__BAD)
-* if any of the input coordinates has this value.
-* - For SkyFrames each curve will be a great circle, and in general
-* each pair of curves will intersect at two diametrically opposite
-* points on the sky. The returned position is the one which is
-* closest to point "a1".
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke the
- astIntersect method for this Frame. Annul the Frame pointer
- afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- astIntersect( fr, a1, a2, b1, b2, cross );
- fr = astAnnul( fr );
-
-}
-
-static int IsUnitFrame( AstFrame *this_frame, int *status ){
-/*
-* Name:
-* IsUnitFrame
-
-* Purpose:
-* Is this Frame equivalent to a UnitMap?
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* int IsUnitFrame( AstFrame *this, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astIsUnitFrame
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a flag indicating if the supplied Frame is
-* equivalent to a UnitMap when treated as a Mapping (note, the Frame
-* class inherits from Mapping and therefore every Frame is also a Mapping).
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if the supplied Frame is equivalent to
-* a UnitMap when treated as a Mapping.
-
-*-
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to FrameSet's current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- int result; /* Result to be returned */
-
-/* Initialise the returned value. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame. */
- fr = astGetFrame( this, AST__CURRENT );
-
-/* Invoke the astIsUnitFrame method for this Frame. */
- result = astIsUnitFrame( fr );
-
-/* Annul the Frame pointer. */
- fr = astAnnul( fr );
-
-/* If an error occurred, clean up by clearing the returned result. */
- if ( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static int LineContains( AstFrame *this_frame, AstLineDef *l, int def, double *point, int *status ) {
-/*
-* Name:
-* LineContains
-
-* Purpose:
-* Determine if a line contains a point.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* int LineContains( AstFrame *this, AstLineDef *l, int def, double *point, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astLineContains
-* method inherited from the Frame class).
-
-* Description:
-* This function determines if the supplied point is on the supplied
-* line within the supplied Frame.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* l
-* Pointer to the structure defining the line.
-* def
-* Should be set non-zero if the "point" array was created by a
-* call to astLineCrossing (in which case it may contain extra
-* information following the axis values),and zero otherwise.
-* point
-* Point to an array containing the axis values of the point to be
-* tested, possibly followed by extra cached information (see "def").
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if the line contains the point.
-
-* Notes:
-* - The pointer supplied for "l" should have been created using the
-* astLineDef method. These structures contained cached information about
-* the lines which improve the efficiency of this method when many
-* repeated calls are made. An error will be reported if the structure
-* does not refer to the Frame specified by "this".
-* - Zero will be returned if this function is invoked with the global
-* error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- int result; /* Returned value */
-
-/* Initialise */
- result =0;
-
-/* Obtain a pointer to the FrameSet's current Frame and then invoke the
- method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( (AstFrameSet *) this_frame, AST__CURRENT );
- result = astLineContains( fr, l, def, point );
- fr = astAnnul( fr );
-
-/* Return the result. */
- return result;
-}
-
-static int LineCrossing( AstFrame *this_frame, AstLineDef *l1, AstLineDef *l2,
- double **cross, int *status ) {
-/*
-* Name:
-* LineCrossing
-
-* Purpose:
-* Determine if two lines cross.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* int LineCrossing( AstFrame *this, AstLineDef *l1, AstLineDef *l2,
-* double **cross, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astLineCrossing
-* method inherited from the Frame class).
-
-* Description:
-* This function determines if the two suplied line segments cross,
-* and if so returns the axis values at the point where they cross.
-* A flag is also returned indicating if the crossing point occurs
-* within the length of both line segments, or outside one or both of
-* the line segments.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* l1
-* Pointer to the structure defining the first line.
-* l2
-* Pointer to the structure defining the second line.
-* cross
-* Pointer to a location at which to put a pointer to a dynamically
-* alocated array containing the axis values at the crossing. If
-* NULL is supplied no such array is returned. Otherwise, the returned
-* array should be freed using astFree when no longer needed. If the
-* lines are parallel (i.e. do not cross) then AST__BAD is returned for
-* all axis values. Note usable axis values are returned even if the
-* lines cross outside the segment defined by the start and end points
-* of the lines. The order of axes in the returned array will take
-* account of the current axis permutation array if appropriate. Note,
-* sub-classes such as SkyFrame may append extra values to the end
-* of the basic frame axis values. A NULL pointer is returned if an
-* error occurs.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if the lines cross at a point which is
-* within the [start,end) segment of both lines. If the crossing point
-* is outside this segment on either line, or if the lines are parallel,
-* zero is returned. Note, the start point is considered to be inside
-* the length of the segment, but the end point is outside.
-
-* Notes:
-* - The pointers supplied for "l1" and "l2" should have been created
-* using the astLineDef method. These structures contained cached
-* information about the lines which improve the efficiency of this method
-* when many repeated calls are made. An error will be reported if
-* either structure does not refer to the Frame specified by "this".
-* - Zero will be returned if this function is invoked with the global
-* error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- int result; /* Returned value */
-
-/* Initialise */
- result =0;
-
-/* Obtain a pointer to the FrameSet's current Frame and then invoke the
- method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( (AstFrameSet *) this_frame, AST__CURRENT );
- result = astLineCrossing( fr, l1, l2, cross );
- fr = astAnnul( fr );
-
-/* Return the result. */
- return result;
-}
-
-static AstLineDef *LineDef( AstFrame *this_frame, const double start[2],
- const double end[2], int *status ) {
-/*
-* Name:
-* LineDef
-
-* Purpose:
-* Creates a structure describing a line segment in a 2D Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* AstLineDef *LineDef( AstFrame *this, const double start[2],
-* const double end[2], int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astLineDef
-* method inherited from the Frame class).
-
-* Description:
-* This function creates a structure containing information describing a
-* given line segment within the supplied 2D Frame. This may include
-* information which allows other methods such as astLineCrossing to
-* function more efficiently. Thus the returned structure acts as a
-* cache to store intermediate values used by these other methods.
-
-* Parameters:
-* this
-* Pointer to the Frame. Must have 2 axes.
-* start
-* An array of 2 doubles marking the start of the line segment.
-* end
-* An array of 2 doubles marking the end of the line segment.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the memory structure containing the description of the
-* line. This structure should be freed using astFree when no longer
-* needed. A NULL pointer is returned (without error) if any of the
-* supplied axis values are AST__BAD.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstLineDef *result; /* Returned value */
-
-/* Initialise */
- result = NULL;
-
-/* Obtain a pointer to the FrameSet's current Frame and then invoke the
- method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( (AstFrameSet *) this_frame, AST__CURRENT );
- result = astLineDef( fr, start, end );
- fr = astAnnul( fr );
-
-/* Return the result. */
- return result;
-}
-
-static void LineOffset( AstFrame *this_frame, AstLineDef *line, double par,
- double prp, double point[2], int *status ){
-/*
-* Name:
-* LineOffset
-
-* Purpose:
-* Find a position close to a line.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frame.h"
-* void LineOffset( AstFrame *this, AstLineDef *line, double par,
-* double prp, double point[2], int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astLineOffset
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a position formed by moving a given distance along
-* the supplied line, and then a given distance away from the supplied line.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* line
-* Pointer to the structure defining the line.
-* par
-* The distance to move along the line from the start towards the end.
-* prp
-* The distance to move at right angles to the line. Positive
-* values result in movement to the left of the line, as seen from
-* the observer, when moving from start towards the end.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The pointer supplied for "line" should have been created using the
-* astLineDef method. This structure contains cached information about the
-* line which improves the efficiency of this method when many repeated
-* calls are made. An error will be reported if the structure does not
-* refer to the Frame specified by "this".
-*/
-
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
-
-/* Obtain a pointer to the FrameSet's current Frame and then invoke the
- method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( (AstFrameSet *) this_frame, AST__CURRENT );
- astLineOffset( fr, line, par, prp, point );
- fr = astAnnul( fr );
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra,
- AstObject **fail, int *status ) {
-/*
-* Name:
-* ManageLock
-
-* Purpose:
-* Manage the thread lock on an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *ManageLock( AstObject *this, int mode, int extra,
-* AstObject **fail, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the astManageLock protected
-* method inherited from the parent class).
-
-* Description:
-* This function manages the thread lock on the supplied Object. The
-* lock can be locked, unlocked or checked by this function as
-* deteremined by parameter "mode". See astLock for details of the way
-* these locks are used.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* mode
-* An integer flag indicating what the function should do:
-*
-* AST__LOCK: Lock the Object for exclusive use by the calling
-* thread. The "extra" value indicates what should be done if the
-* Object is already locked (wait or report an error - see astLock).
-*
-* AST__UNLOCK: Unlock the Object for use by other threads.
-*
-* AST__CHECKLOCK: Check that the object is locked for use by the
-* calling thread (report an error if not).
-* extra
-* Extra mode-specific information.
-* fail
-* If a non-zero function value is returned, a pointer to the
-* Object that caused the failure is returned at "*fail". This may
-* be "this" or it may be an Object contained within "this". Note,
-* the Object's reference count is not incremented, and so the
-* returned pointer should not be annulled. A NULL pointer is
-* returned if this function returns a value of zero.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A local status value:
-* 0 - Success
-* 1 - Could not lock or unlock the object because it was already
-* locked by another thread.
-* 2 - Failed to lock a POSIX mutex
-* 3 - Failed to unlock a POSIX mutex
-* 4 - Bad "mode" value supplied.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-*/
-
-/* Local Variables: */
- AstFrameSet *this; /* Pointer to FrameSet structure */
- int i; /* Loop count */
- int result; /* Returned status value */
-
-/* Initialise */
- result = 0;
-
-/* Check the supplied pointer is not NULL. */
- if( !this_object ) return result;
-
-/* Obtain a pointers to the FrameSet structure. */
- this = (AstFrameSet *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
- if( !result ) result = (*parent_managelock)( this_object, mode, extra,
- fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
- the supplied Object. */
- for( i = 0; i < this->nframe; i++ ) {
- if( !result ) result = astManageLock( this->frame[ i ], mode,
- extra, fail );
- }
-
- for ( i = 0; i < this->nnode - 1; i++ ) {
- if( !result ) result = astManageLock( this->map[ i ], mode, extra,
- fail );
- }
-
- return result;
-
-}
-#endif
-
-static int *MapSplit( AstMapping *this_map, int nin, const int *in, AstMapping **map, int *status ){
-/*
-* Name:
-* MapSplit
-
-* Purpose:
-* Create a Mapping representing a subset of the inputs of an existing
-* FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status )
-
-* Class Membership:
-* FrameSet method (over-rides the protected astMapSplit method
-* inherited from the Mapping class).
-
-* Description:
-* This function creates a new Mapping by picking specified inputs from
-* an existing FrameSet. This is only possible if the specified inputs
-* correspond to some subset of the FrameSet outputs. That is, there
-* must exist a subset of the FrameSet outputs for which each output
-* depends only on the selected FrameSet inputs, and not on any of the
-* inputs which have not been selected. If this condition is not met
-* by the supplied FrameSet, then a NULL Mapping is returned.
-
-* Parameters:
-* this
-* Pointer to the FrameSet to be split (the FrameSet is not actually
-* modified by this function).
-* nin
-* The number of inputs to pick from "this".
-* in
-* Pointer to an array of indices (zero based) for the inputs which
-* are to be picked. This array should have "nin" elements. If "Nin"
-* is the number of inputs of the supplied FrameSet, then each element
-* should have a value in the range zero to Nin-1.
-* map
-* Address of a location at which to return a pointer to the new
-* Mapping. This Mapping will have "nin" inputs (the number of
-* outputs may be different to "nin"). A NULL pointer will be
-* returned if the supplied FrameSet has no subset of outputs which
-* depend only on the selected inputs.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated array of ints. The number of
-* elements in this array will equal the number of outputs for the
-* returned Mapping. Each element will hold the index of the
-* corresponding output in the supplied FrameSet. The array should be
-* freed using astFree when no longer needed. A NULL pointer will
-* be returned if no output Mapping can be created.
-
-* Notes:
-* - If this function is invoked with the global error status set,
-* or if it should fail for any reason, then NULL values will be
-* returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
- AstMapping *bcmap; /* Base->current Mapping */
- int *result; /* Returned pointer */
-
-/* Initialise */
- result = NULL;
- *map = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get the Mapping from base to current Frame and try to split it. */
- bcmap = astGetMapping( (AstFrameSet *) this_map, AST__BASE, AST__CURRENT );
- result = astMapSplit( bcmap, nin, in, map );
- bcmap = astAnnul( bcmap );
-
-/* Free returned resources if an error has occurred. */
- if( !astOK ) {
- result = astFree( result );
- *map = astAnnul( *map );
- }
-
-/* Return the list of output indices. */
- return result;
-}
-
-static int Match( AstFrame *this_frame, AstFrame *target,
- int **template_axes, int **target_axes,
- AstMapping **map, AstFrame **result, int *status ) {
-/*
-* Name:
-* Match
-
-* Purpose:
-* Determine if conversion is possible between two coordinate systems.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* int Match( AstFrame *template, AstFrame *target,
-* int **template_axes, int **target_axes,
-* AstMapping **map, AstFrame **result, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astMatch
-* method inherited from the Frame class).
-
-* Description:
-* This function matches the current Frame of a "template" FrameSet
-* to a "target" frame and determines whether it is possible to
-* convert coordinates between them. If it is, a Mapping that
-* performs the transformation is returned along with a new Frame
-* that describes the coordinate system that results when this
-* Mapping is applied to the current Frame of the target
-* FrameSet. In addition, information is returned to allow the axes
-* in this "result" Frame to be associated with the corresponding
-* axes in the target and template Frames from which they are
-* derived.
-
-* Parameters:
-* template
-* Pointer to the template FrameSet, whose current Frame
-* describes the coordinate system (or set of possible
-* coordinate systems) into which we wish to convert our
-* coordinates.
-* target
-* Pointer to the target Frame. This describes the coordinate
-* system in which we already have coordinates.
-* template_axes
-* Address of a location where a pointer to int will be returned
-* if the requested coordinate conversion is possible. This
-* pointer will point at a dynamically allocated array of
-* integers with one element for each axis of the "result" Frame
-* (see below). It must be freed by the caller (using astFree)
-* when no longer required.
-*
-* For each axis in the result Frame, the corresponding element
-* of this array will return the index of the axis in the
-* template FrameSet's current Frame from which it is
-* derived. If it is not derived from any template FrameSet
-* axis, a value of -1 will be returned instead.
-* target_axes
-* Address of a location where a pointer to int will be returned
-* if the requested coordinate conversion is possible. This
-* pointer will point at a dynamically allocated array of
-* integers with one element for each axis of the "result" Frame
-* (see below). It must be freed by the caller (using astFree)
-* when no longer required.
-*
-* For each axis in the result Frame, the corresponding element
-* of this array will return the index of the target Frame axis
-* from which it is derived. If it is not derived from any
-* target Frame axis, a value of -1 will be returned instead.
-* map
-* Address of a location where a pointer to a new Mapping will
-* be returned if the requested coordinate conversion is
-* possible. If returned, the forward transformation of this
-* Mapping may be used to convert coordinates between the target
-* Frame and the result Frame (see below) and the inverse
-* transformation will convert in the opposite direction.
-* result
-* Address of a location where a pointer to a new Frame will be
-* returned if the requested coordinate conversion is
-* possible. If returned, this Frame describes the coordinate
-* system that results from applying the returned Mapping
-* (above) to the "target" coordinate system. In general, this
-* Frame will combine attributes from (and will therefore be
-* more specific than) both the target Frame and the current
-* Frame of the template FrameSet. In particular, when the
-* template allows the possibility of transformaing to any one
-* of a set of alternative coordinate systems, the "result"
-* Frame will indicate which of the alternatives was used.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if the requested coordinate
-* conversion is possible. Otherwise zero is returned (this will
-* not in itself result in an error condition).
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to FrameSet's current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- int match; /* Result to be returned */
-
-/* Initialise the returned values. */
- *template_axes = NULL;
- *target_axes = NULL;
- *map = NULL;
- *result = NULL;
- match = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return match;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame. */
- fr = astGetFrame( this, AST__CURRENT );
-
-/* Invoke the astMatch method for this Frame. */
- match =astMatch( fr, target, template_axes, target_axes, map, result );
-
-/* Annul the Frame pointer. */
- fr = astAnnul( fr );
-
-/* If an error occurred, clean up by freeing any allocated memory,
- annulling returned objects and clearing the returned result. */
- if ( !astOK ) {
- *template_axes = astFree( *template_axes );
- *target_axes = astFree( *target_axes );
- *map = astAnnul( *map );
- *result = astAnnul( *result );
- match = 0;
- }
-
-/* Return the result. */
- return match;
-}
-
-static void MatchAxes( AstFrame *frm1_frame, AstFrame *frm2, int *axes,
- int *status ) {
-/*
-* Name:
-* MatchAxes
-
-* Purpose:
-* Find any corresponding axes in two Frames.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* void MatchAxes( AstFrame *frm1, AstFrame *frm2, int *axes )
-* int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astMatchAxes
-* method inherited from the Frame class).
-
-* Description:
-* This function looks for corresponding axes within two supplied
-* Frames. An array of integers is returned that contains an element
-* for each axis in the second supplied Frame. An element in this array
-* will be set to zero if the associated axis within the second Frame
-* has no corresponding axis within the first Frame. Otherwise, it
-* will be set to the index (a non-zero positive integer) of the
-* corresponding axis within the first supplied Frame.
-
-* Parameters:
-* frm1
-* Pointer to the first Frame.
-* frm2
-* Pointer to the second Frame.
-* axes
-* Pointer to an
-* integer array in which to return the indices of the axes (within
-* the second Frame) that correspond to each axis within the first
-* Frame. Axis indices start at 1. A value of zero will be stored
-* in the returned array for each axis in the first Frame that has
-* no corresponding axis in the second Frame.
-*
-* The number of elements in this array must be greater than or
-* equal to the number of axes in the first Frame.
-* status
-* Pointer to inherited status value.
-
-* Notes:
-* - Corresponding axes are identified by the fact that a Mapping
-* can be found between them using astFindFrame or astConvert. Thus,
-* "corresponding axes" are not necessarily identical. For instance,
-* SkyFrame axes in two Frames will match even if they describe
-* different celestial coordinate systems
-*/
-
-/* Local Variables: */
- AstFrame *frm1;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the current Frame in the FrameSet. */
- frm1 = astGetFrame( (AstFrameSet *) frm1_frame, AST__CURRENT );
-
-/* Invoke the astMatchAxesX on the second Frame. */
- astMatchAxesX( frm2, frm1, axes );
-
-/* Free resources */
- frm1 = astAnnul( frm1 );
-}
-
-static void MatchAxesX( AstFrame *frm2_frame, AstFrame *frm1, int *axes,
- int *status ) {
-/*
-* Name:
-* MatchAxesX
-
-* Purpose:
-* Find any corresponding axes in two Frames.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* void MatchAxesX( AstFrame *frm2, AstFrame *frm1, int *axes )
-* int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astMatchAxesX
-* method inherited from the Frame class).
-
-* This function looks for corresponding axes within two supplied
-* Frames. An array of integers is returned that contains an element
-* for each axis in the second supplied Frame. An element in this array
-* will be set to zero if the associated axis within the second Frame
-* has no corresponding axis within the first Frame. Otherwise, it
-* will be set to the index (a non-zero positive integer) of the
-* corresponding axis within the first supplied Frame.
-
-* Parameters:
-* frm2
-* Pointer to the second Frame.
-* frm1
-* Pointer to the first Frame.
-* axes
-* Pointer to an integer array in which to return the indices of
-* the axes (within the first Frame) that correspond to each axis
-* within the second Frame. Axis indices start at 1. A value of zero
-* will be stored in the returned array for each axis in the second
-* Frame that has no corresponding axis in the first Frame.
-*
-* The number of elements in this array must be greater than or
-* equal to the number of axes in the second Frame.
-* status
-* Pointer to inherited status value.
-
-* Notes:
-* - Corresponding axes are identified by the fact that a Mapping
-* can be found between them using astFindFrame or astConvert. Thus,
-* "corresponding axes" are not necessarily identical. For instance,
-* SkyFrame axes in two Frames will match even if they describe
-* different celestial coordinate systems
-*/
-
-/* Local Variables: */
- AstFrame *frm2;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the current Frame in the FrameSet. */
- frm2 = astGetFrame( (AstFrameSet *) frm2_frame, AST__CURRENT );
-
-/* Invoke the astMatchAxesX on the current Frame. */
- astMatchAxesX( frm2, frm1, axes );
-
-/* Free resources */
- frm2 = astAnnul( frm2 );
-}
-
-static void Norm( AstFrame *this_frame, double value[], int *status ) {
-/*
-* Name:
-* Norm
-
-* Purpose:
-* Normalise a set of FrameSet coordinates.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* void Norm( AstAxis *this, double value[], int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the astNorm method
-* inherited from the Frame class).
-
-* Description:
-* This function converts a set of coordinate values for the
-* current Frame of a FrameSet, which might potentially be
-* unsuitable for display to a user (for instance, may lie outside
-* the expected range of values) into a set of acceptable
-* alternative values suitable for display.
-*
-* Typically, for Frames whose axes represent cyclic values (such
-* as angles or positions on the sky), this function wraps an
-* arbitrary set of coordinates, so that they lie within the first
-* cycle (say zero to 2*pi or -pi/2 to +pi/2). For Frames with
-* ordinary linear axes, without constraints, this function will
-* typically return the original coordinate values unchanged.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* value
-* An array of double, with one element for each FrameSet axis.
-* This should contain the initial set of coordinate values,
-* which will be modified in place.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to the current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
- Frame's astNorm method to obtain the new values. Annul the Frame
- pointer afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- astNorm( fr, value );
- fr = astAnnul( fr );
-}
-
-static void NormBox( AstFrame *this_frame, double lbnd[], double ubnd[],
- AstMapping *reg, int *status ) {
-/*
-* Name:
-* NormBox
-
-* Purpose:
-* Extend a box to include effect of any singularities in the Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* void astNormBox( AstFrame *this, double lbnd[], double ubnd[],
-* AstMapping *reg, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the astNormBox method inherited
-* from the Frame class).
-
-* Description:
-* This function modifies a supplied box to include the effect of any
-* singularities in the co-ordinate system represented by the Frame.
-* For a normal Cartesian coordinate system, the box will be returned
-* unchanged. Other classes of Frame may do other things. For instance,
-* a SkyFrame will check to see if the box contains either the north
-* or south pole and extend the box appropriately.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* lbnd
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). Initially, this should contain a set of
-* lower axis bounds for the box. They will be modified on exit
-* to include the effect of any singularities within the box.
-* ubnd
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). Initially, this should contain a set of
-* upper axis bounds for the box. They will be modified on exit
-* to include the effect of any singularities within the box.
-* reg
-* A Mapping which should be used to test if any singular points are
-* inside or outside the box. The Mapping should leave an input
-* position unchanged if the point is inside the box, and should
-* set all bad if the point is outside the box.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to the current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
- Frame's astNormBox method to obtain the new values. Annul the Frame
- pointer afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- astNormBox( fr, lbnd, ubnd, reg );
- fr = astAnnul( fr );
-}
-
-static void Offset( AstFrame *this_frame, const double point1[],
- const double point2[], double offset, double point3[], int *status ) {
-/*
-* Name:
-* Offset
-
-* Purpose:
-* Calculate an offset along a geodesic curve.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-* #include "frameset.h"
-* void Offset( AstFrame *this,
-* const double point1[], const double point2[],
-* double offset, double point3[], int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astOffset
-* method inherited from the Frame class).
-
-* Description:
-* This function finds the FrameSet coordinate values of a point
-* which is offset a specified distance along the geodesic curve
-* between two other points.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* point1
-* An array of double, with one element for each FrameSet axis.
-* This should contain the coordinates of the point marking the
-* start of the geodesic curve.
-* point2
-* An array of double, with one element for each FrameSet axis
-* This should contain the coordinates of the point marking the
-* end of the geodesic curve.
-* offset
-* The required offset from the first point along the geodesic
-* curve. If this is positive, it will be towards the second
-* point. If it is negative, it will be in the opposite
-* direction. This offset need not imply a position lying
-* between the two points given, as the curve will be
-* extrapolated if necessary.
-* point3
-* An array of double, with one element for each FrameSet axis
-* in which the coordinates of the required point will be
-* returned.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The geodesic curve used by this function is the path of
-* shortest distance between two points, as defined by the
-* astDistance function.
-* - This function will return "bad" coordinate values (AST__BAD)
-* if any of the input coordinates has this value.
-* - "Bad" coordinate values will also be returned if the two
-* points supplied are coincident (or otherwise fail to uniquely
-* specify a geodesic curve) but the requested offset is non-zero.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
- Frame's astOffset method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- astOffset( fr, point1, point2, offset, point3 );
- fr = astAnnul( fr );
-}
-
-static double Offset2( AstFrame *this_frame, const double point1[2],
- double angle, double offset, double point2[2], int *status ){
-/*
-* Name:
-* Offset2
-
-* Purpose:
-* Calculate an offset along a geodesic curve in a 2D Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* double Offset2( AstFrame *this, const double point1[2], double angle,
-* double offset, double point2[2], int *status );
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astOffset2
-* method inherited from the Frame class).
-
-* Description:
-* This function finds the Frame coordinate values of a point which
-* is offset a specified distance along the geodesic curve at a
-* given angle from a specified starting point. It can only be
-* used with 2-dimensional Frames.
-*
-* For example, in a basic Frame, this offset will be along the
-* straight line joining two points. For a more specialised Frame
-* describing a sky coordinate system, however, it would be along
-* the great circle passing through two sky positions.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* point1
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). This should contain the coordinates of the
-* point marking the start of the geodesic curve.
-* angle
-* The angle (in radians) from the positive direction of the second
-* axis, to the direction of the required position, as seen from
-* the starting position. Positive rotation is in the sense of
-* rotation from the positive direction of axis 2 to the positive
-* direction of axis 1.
-* offset
-* The required offset from the first point along the geodesic
-* curve. If this is positive, it will be in the direction of the
-* given angle. If it is negative, it will be in the opposite
-* direction.
-* point2
-* An array of double, with one element for each Frame axis
-* in which the coordinates of the required point will be returned.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The direction of the geodesic curve at the end point. That is, the
-* angle (in radians) between the positive direction of the second
-* axis and the continuation of the geodesic curve at the requested
-* end point. Positive rotation is in the sense of rotation from
-* the positive direction of axis 2 to the positive direction of axis 1.
-
-* Notes:
-* - The geodesic curve used by this function is the path of
-* shortest distance between two points, as defined by the
-* astDistance function.
-* - An error will be reported if the Frame is not 2-dimensional.
-* - This function will return "bad" coordinate values (AST__BAD)
-* if any of the input coordinates has this value.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- double result; /* Value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke the
- astOffset2 method for this Frame. Annul the Frame pointer afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- result = astOffset2( fr, point1, angle, offset, point2 );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
- return result;
-}
-
-static void Overlay( AstFrame *template_frame, const int *template_axes,
- AstFrame *result, int *status ) {
-/*
-* Name:
-* Overlay
-
-* Purpose:
-* Overlay the attributes of a template FrameSet on to another Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* void Overlay( AstFrame *template, const int *template_axes,
-* AstFrame *result, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astOverlay
-* method inherited from the Frame class).
-
-* Description:
-* This function overlays attributes from the current Frame of a
-* FrameSet on to another Frame, so as to over-ride selected
-* attributes of that second Frame. Normally only those attributes
-* which have been specifically set in the template will be
-* transferred. This implements a form of defaulting, in which a
-* Frame acquires attributes from the template, but retains its
-* original attributes (as the default) if new values have not
-* previously been explicitly set in the template.
-
-* Parameters:
-* template
-* Pointer to the template FrameSet, for whose current Frame
-* values should have been explicitly set for any attribute
-* which is to be transferred.
-* template_axes
-* Pointer to an array of int, with one element for each axis of
-* the "result" Frame (see below). For each axis in the result
-* frame, the corresponding element of this array should contain
-* the (zero-based) index of the axis in the current Frame of
-* the template FrameSet to which it corresponds. This array is
-* used to establish from which template Frame axis any
-* axis-dependent attributes should be obtained.
-*
-* If any axis in the result Frame is not associated with a
-* template Frame axis, the corresponding element of this array
-* should be set to -1.
-*
-* If a NULL pointer is supplied, the template and result axis
-* indicies are assumed to be identical.
-* result
-* Pointer to the Frame which is to receive the new attribute values.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *template; /* Pointer to the FrameSet structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
- template = (AstFrameSet *) template_frame;
-
-/* Obtain a pointer to the current Frame and invoke its astOverlay
- method to overlay its attributes. Annul the Frame pointer
- afterwards. */
- fr = astGetFrame( template, AST__CURRENT );
- astOverlay( fr, template_axes, result );
- fr = astAnnul( fr );
-}
-
-static void PermAxes( AstFrame *this_frame, const int perm[], int *status ) {
-/*
-* Name:
-* PermAxes
-
-* Purpose:
-* Permute the order of a FrameSet's axes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* void PermAxes( AstFrame *this, const int perm[], int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the astPermAxes method
-* inherited from the Frame class).
-
-* Description:
-* This function permutes the order in which the axes in the
-* current Frame of a FrameSet occur.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* perm
-* An array of int (with one element for each axis of the
-* FrameSet's current Frame) which lists the axes in their new
-* order. Each element of this array should be a (zero-based)
-* axis index identifying the axes according to their old
-* (un-permuted) order.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - Only genuine permutations of the axis order are permitted, so
-* each axis must be referenced exactly once in the "perm" array.
-* - If more than one axis permutation is applied to the same Frame
-* in a FrameSet, the effects are cumulative.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- AstPermMap *map; /* Pointer to axis permutation Mapping */
- int *invperm; /* Pointer to inverse permutation array */
- int axis; /* Loop counter for axes */
- int naxes; /* Number of FrameSet axes */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Validate the permutation array, to check that it describes a
- genuine permutation. */
- astCheckPerm( this, perm, "astPermAxes" );
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
- Frame's astPermAxes method to permute its axes. Annul the Frame
- pointer afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- astPermAxes( fr, perm );
- fr = astAnnul( fr );
-
-/* Obtain the number of axes in the FrameSet's current Frame and allocate
- memory to hold an inverse permutation array. */
- naxes = astGetNaxes( this );
- invperm = astMalloc( sizeof( int ) * (size_t) naxes );
-
-/* Fill the inverse permutation array with values that will invert the
- axis permutation supplied. */
- if ( astOK ) {
- for ( axis = 0; axis < naxes; axis++ ) invperm[ perm[ axis ] ] = axis;
-
-/* Create a PermMap that will permute coordinate values in the same way as
- the current Frame's axes have been permuted. */
- map = astPermMap( naxes, invperm, naxes, perm, NULL, "", status );
-
-/* Modify the Frame's relationship to the rest of the Frames in the
- FrameSet so that the correct coordinate values remain associated
- with the permuted axes. */
- astRemapFrame( this, AST__CURRENT, map );
-
-/* Annul the PermMap and free the inverse permutation array. */
- map = astAnnul( map );
- }
- invperm = astFree( invperm );
-}
-
-static AstFrame *PickAxes( AstFrame *this_frame, int naxes, const int axes[],
- AstMapping **map, int *status ) {
-/*
-* Name:
-* PickAxes
-
-* Purpose:
-* Create a new Frame by picking axes from a FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* AstFrame *PickAxes( AstFrame *this, int naxes, const int axes[],
-* AstMapping **map, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the astPickAxes protected
-* method inherited from the Frame class).
-
-* Description:
-* This function creates a new Frame whose axes are copies of axes
-* picked from the current Frame of an existing FrameSet. Other
-* Frame attributes are also copied from this current Frame to the
-* new Frame. Zero or more of the original axes may be picked in
-* any order, but each can be used only once. Additional axes (with
-* default characteristics) may be included in the new Frame if
-* required.
-*
-* Optionally, a Mapping that converts between the original Frame's
-* axes and those of the new Frame may also be returned.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* naxes
-* The number of axes required in the new Frame.
-* axes
-* Pointer to an array of int with naxes elements. This should
-* contain (zero based) axis indices specifying the axes which
-* are to be included in the new Frame, in the order
-* required. Each axis index may occur only once.
-*
-* If additional (default) axes are also to be included, the
-* corresponding elements of this array should be set to -1.
-* map
-* Address of a location to receive a pointer to a new
-* Mapping. This will be a PermMap (or a UnitMap as a special
-* case) that describes the axis permutation that has taken
-* place between the current Frame of the FrameSet and the new
-* Frame. The forward transformation will convert from the
-* original FrameSet's axes to the new one's, and vice versa.
-*
-* If this Mapping is not required, a NULL value may be supplied
-* for this parameter.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the new Frame.
-
-* Notes:
-* - The class of object returned may differ from that of the
-* original current Frame, depending on which axes are
-* selected. For example, if a single axis is picked from a
-* SkyFrame (which always has two axes), the resulting Frame cannot
-* be a valid SkyFrame, so will revert to the parent class (Frame)
-* instead.
-* - The new Frame contains a deep copy of all the data selected
-* from the original current Frame. Modifying the new Frame will
-* therefore not affect the FrameSet or the Frames it contains.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrame *frame; /* Pointer to Frame to be returned */
- AstFrameSet *this; /* Pointer to FrameSet structure */
-
-/* Initialise the returned pointers. */
- if ( map ) *map = NULL;
- frame = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return frame;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Check that a valid set of axes is being selected . */
- astValidateAxisSelection( this, naxes, axes, "astPickAxes" );
-
-/* Obtain a pointer to the FrameSet's current Frame and use its
- astPickAxes method to obtain the required new Frame and
- Mapping. Annul the current Frame pointer afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- frame = astPickAxes( fr, naxes, axes, map );
- fr = astAnnul( fr );
-
-/* If an error occurred, annul the Mapping pointer (if requested) and
- the new Frame pointer. */
- if ( !astOK ) {
- if ( map ) *map = astAnnul( *map );
- frame = astAnnul( frame );
- }
-
-/* Return the pointer to the new Frame. */
- return frame;
-}
-
-static void PrimaryFrame( AstFrame *this_frame, int axis1,
- AstFrame **frame, int *axis2, int *status ) {
-/*
-* Name:
-* PrimaryFrame
-
-* Purpose:
-* Uniquely identify a primary Frame and one of its axes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* void PrimaryFrame( AstFrame *this, int axis1, AstFrame **frame,
-* int *axis2, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected
-* astPrimaryFrame method inherited from the Frame class).
-
-* Description:
-* This function returns information about the underlying (primary)
-* Frame corresponding to a specified axis of the current Frame of
-* a FrameSet, when this current Frame may be a compound Frame
-* composed of more than one simpler one.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* axis1
-* An axis index (zero-based) identifying the axis of the
-* FrameSet's current Frame for which information is required.
-* frame
-* Address of a location to receive a pointer to the underlying
-* (primary) frame to which the requested axis belongs
-* (i.e. this will not be a compound Frame).
-* axis2
-* Pointer to an int which is to receive the axis index within
-* "frame" which identifies the axis being referred to, using
-* the axis order that applied when the primary Frame was
-* originally constructed (i.e. this function undoes all
-* subsequent axis pemutations and the effects of combining
-* Frames, in order to reveal the original underlying axis
-* order).
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This protected method is provided so that class
-* implementations can distinguish the axes of Frames from one
-* another (e.g. can distinguish a longitude axis as being
-* different from a latitide axis) even after their order has been
-* permuted and they have been combined with axes from other
-* Frames.
-* - The reference count of the primary Frame will be incremented
-* by one to reflect the new pointer returned.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
-
-/* Initialise the returned values. */
- *frame = NULL;
- *axis2 = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Validate the axis index supplied. */
- (void) astValidateAxis( this, axis1, "astPrimaryFrame" );
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke its
- astPrimaryFrame method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- astPrimaryFrame( fr, axis1, frame, axis2 );
- fr = astAnnul( fr );
-
-/* If an error occurred, annul the returned object and clear the
- returned axis value. */
- if ( !astOK ) {
- *frame = astAnnul( *frame );
- *axis2 = 0;
- }
-}
-
-static double Rate( AstMapping *this_mapping, double *at, int ax1, int ax2, int *status ){
-/*
-* Name:
-* Rate
-
-* Purpose:
-* Calculate the rate of change of a Mapping output.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the astRate method
-* inherited from the Frame class).
-
-* This function evaluates the rate of change of a specified output of
-* the supplied Mapping with respect to a specified input, at a
-* specified input position.
-*
-* The result is estimated by interpolating the function using a
-* fourth order polynomial in the neighbourhood of the specified
-* position. The size of the neighbourhood used is chosen to minimise
-* the RMS residual per unit length between the interpolating
-* polynomial and the supplied Mapping function.
-
-* Parameters:
-* this
-* Pointer to the Mapping to be applied.
-* at
-* The address of an array holding the axis values at the position
-* at which the rate of change is to be evaluated. The number of
-* elements in this array should equal the number of inputs to the
-* Mapping.
-* ax1
-* The index of the Mapping output for which the rate of change is to
-* be found (output numbering starts at 0 for the first output).
-* ax2
-* The index of the Mapping input which is to be varied in order to
-* find the rate of change (input numbering starts at 0 for the first
-* input).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* astRate()
-* The rate of change of Mapping output "ax1" with respect to input
-* "ax2", evaluated at "at", or AST__BAD if the value cannot be
-* calculated.
-
-* Notes:
-* - A value of AST__BAD will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- AstMapping *map; /* Pointer to the base->current Mapping */
- double result; /* Returned rate of change */
-
-/* Check the global error status. */
- if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_mapping;
-
-/* Obtain the Mapping between the base and current Frames in the
- FrameSet (note this takes account of whether the FrameSet has been
- inverted). */
- map = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Invoke the astRate method on the Mapping. */
- result = astRate( map, at, ax1, ax2 );
-
-/* Annul the Mapping pointer. */
- map = astAnnul( map );
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-static void RecordIntegrity( AstFrameSet *this, int *status ) {
-/*
-*+
-* Name:
-* RecordIntegrity
-
-* Purpose:
-* Record the current integrity state of a FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* void RecordIntegrity( AstFrameSet *this, int *status )
-
-* Class Membership:
-* FrameSet member function.
-
-* Description:
-* This function makes a record of the current integrity state of a
-* FrameSet by taking a copy of its current Frame (it stores a
-* pointer to this copy in a static variable). If the current Frame
-* is subsequently modified, the RestoreIntegrity function can then
-* attempt to restore the FrameSet's integrity to this recorded
-* state by appropriately remapping its current Frame.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-*-
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstFrame *current; /* Pointer to current Frame */
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Initialise the record of the FrameSet's integrity. */
- integrity_frame = NULL;
- integrity_lost = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet's current Frame. */
- current = astGetFrame( this, AST__CURRENT );
-
-/* Make a copy of this Frame, storing its pointer. */
- integrity_frame = astCopy( current );
-
-/* Annul the current Frame pointer. */
- current = astAnnul( current );
-}
-
-static void RemapFrame( AstFrameSet *this, int iframe, AstMapping *map, int *status ) {
-/*
-*++
-* Name:
-c astRemapFrame
-f AST_REMAPFRAME
-
-* Purpose:
-* Modify a Frame's relationship to other Frames in a FrameSet.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "frameset.h"
-c void astRemapFrame( AstFrameSet *this, int iframe, AstMapping *map )
-f CALL AST_REMAPFRAME( THIS, IFRAME, MAP, STATUS )
-
-* Class Membership:
-* FrameSet method.
-
-* Description:
-c This function modifies the relationship (i.e. Mapping) between a
-f This routine modifies the relationship (i.e. Mapping) between a
-* specified Frame in a FrameSet and the other Frames in that
-* FrameSet.
-*
-* Typically, this might be required if the FrameSet has been used
-* to calibrate (say) an image, and that image is re-binned. The
-* Frame describing the image will then have undergone a coordinate
-* transformation, and this should be communicated to the associated
-c FrameSet using this function.
-f FrameSet using this routine.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the FrameSet.
-c iframe
-f IFRAME = INTEGER (Given)
-* The index within the FrameSet of the Frame to be modified.
-* This value should lie in the range from 1 to the number of
-* Frames in the FrameSet (as given by its Nframe attribute).
-c map
-f MAP = INTEGER (Given)
-* Pointer to a Mapping whose forward transformation converts
-* coordinate values from the original coordinate system
-* described by the Frame to the new one, and whose inverse
-* transformation converts in the opposite direction.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - A value of AST__BASE or AST__CURRENT may be given for the
-c "iframe" parameter to specify the base Frame or the current
-f IFRAME argument to specify the base Frame or the current
-* Frame respectively.
-* - The relationship between the selected Frame and any other
-c Frame within the FrameSet will be modified by this function,
-f Frame within the FrameSet will be modified by this routine,
-* but the relationship between all other Frames in the FrameSet
-* remains unchanged.
-* - The number of input coordinate values accepted by the Mapping
-* (its Nin attribute) and the number of output coordinate values
-* generated (its Nout attribute) must be equal and must match the
-* number of axes in the Frame being modified.
-* - If a simple change of axis order is required, then the
-c astPermAxes function may provide a more straightforward method
-f AST_PERMAXES routine may provide a more straightforward method
-* of making the required changes to the FrameSet.
-c - This function cannot be used to change the number of Frame
-f - This routine cannot be used to change the number of Frame
-* axes. To achieve this, a new Frame must be added to the FrameSet
-c (astAddFrame) and the original one removed if necessary
-c (astRemoveFrame).
-f (AST_ADDFRAME) and the original one removed if necessary
-f (AST_REMOVEFRAME).
-*--
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to Frame */
- int naxes; /* Number of Frame axes */
- int nin; /* Number of Mapping input coordinates */
- int nout; /* Number of Mapping output coordinates */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Validate and translate the Frame index supplied. */
- iframe = astValidateFrameIndex( this, iframe, "astRemapFrame" );
-
-/* Obtain the number of input and output coordinates per point for the
- Mapping supplied. */
- nin = astGetNin( map );
- nout = astGetNout( map );
-
-/* Obtain a pointer to the specified Frame and determine how many axes
- it has. Annul the Frame pointer afterwards. */
- fr = astGetFrame( this, iframe );
- naxes = astGetNaxes( fr );
- fr = astAnnul( fr );
-
-/* Check that the number of input coordinates matches the number of
- Frame axes and report an error if necessary. */
- if ( astOK ) {
- if ( nin != naxes ) {
- astError( AST__NCPIN, "astRemapFrame(%s): Bad number of %s input "
- "coordinate values (%d).", status, astGetClass( this ),
- astGetClass( map ), nin );
- astError( AST__NCPIN, "The %s given should accept %d coordinate "
- "value%s for each input point.", status, astGetClass( map ), naxes,
- ( naxes == 1 ) ? "" : "s" );
-
-/* Similarly, check that the number of output coordinates matches the
- number of Frame axes. */
- } else if ( nout != naxes ) {
- astError( AST__NCPIN, "astRemapFrame(%s): Bad number of %s output "
- "coordinate values (%d).", status, astGetClass( this ),
- astGetClass( map ), nout );
- astError( AST__NCPIN, "The %s given should generate %d "
- "coordinate value%s for each output point.", status,
- astGetClass( map ), naxes, ( naxes == 1 ) ? "" : "s" );
- }
- }
-
-/* If there is more than one Frame present in the FrameSet, extend the
- FrameSet arrays to hold a new node. */
- if ( astOK && ( this->nframe > 1 ) ) {
- this->map = astGrow( this->map, this->nnode, sizeof( AstMapping * ) );
- this->link = astGrow( this->link, this->nnode, sizeof( int ) );
- this->invert = astGrow( this->invert, this->nnode, sizeof( int ) );
-
-/* Clone and store a pointer to the Mapping. */
- if ( astOK ) {
- this->map[ this->nnode - 1 ] = astClone( map );
-
-/* Add a new "link" element showing that the new node is derived from
- that of the old Frame and store the current value of the Invert
- attribute for the Mapping. */
- this->link[ this->nnode - 1 ] = this->node[ iframe - 1 ];
- this->invert[ this->nnode - 1 ] = astGetInvert( map );
-
-/* Increment the node count and associate the modified Frame with the
- new node. */
- if ( astOK ) {
- this->nnode++;
- this->node[ iframe - 1 ] = this->nnode - 1;
-
-/* Tidy the resulting set of nodes, because the node originally
- referenced by the Frame may no longer be needed. This also
- simplifies any compound Mapping which may result if this node is
- removed. */
- TidyNodes( this, status );
- }
- }
- }
-}
-
-static void RemoveFrame( AstFrameSet *this, int iframe, int *status ) {
-/*
-*++
-* Name:
-c astRemoveFrame
-f AST_REMOVEFRAME
-
-* Purpose:
-* Remove a Frame from a FrameSet.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "frameset.h"
-c void astRemoveFrame( AstFrameSet *this, int iframe )
-f CALL AST_REMOVEFRAME( THIS, IFRAME, STATUS )
-
-* Class Membership:
-* FrameSet method.
-
-* Description:
-c This function removes a Frame from a FrameSet. All other Frames
-f This routine removes a Frame from a FrameSet. All other Frames
-* in the FrameSet have their indices re-numbered from one (if
-* necessary), but are otherwise unchanged.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the FrameSet.
-c iframe
-f IFRAME = INTEGER (Given)
-* The index within the FrameSet of the Frame to be removed.
-* This value should lie in the range from 1 to the number of
-* Frames in the FrameSet (as given by its Nframe attribute).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - Removing a Frame from a FrameSet does not affect the
-* relationship between other Frames in the FrameSet, even if they
-* originally depended on the Frame being removed.
-* - The number of Frames in a FrameSet cannot be reduced to zero.
-* An error will result if an attempt is made to remove the only
-* remaining Frame.
-* - A value of AST__BASE or AST__CURRENT may be given for the
-c "iframe" parameter to specify the base Frame or the current
-f IFRAME argument to specify the base Frame or the current
-* Frame respectively.
-* - If a FrameSet's base or current Frame is removed, the Base or
-* Current attribute (respectively) of the FrameSet will have its
-* value cleared, so that another Frame will then assume its role
-* by default.
-* - If any other Frame is removed, the base and current Frames
-* will remain the same. To ensure this, the Base and/or Current
-* attributes of the FrameSet will be changed, if necessary, to
-* reflect any change in the indices of these Frames.
-*--
-*/
-
-/* Local Variables: */
- int ifr; /* Loop counter for Frames */
- int ii; /* Base/current Frame index */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Validate and translate the Frame index supplied. */
- iframe = astValidateFrameIndex( this, iframe, "astRemoveFrame" );
- if ( astOK ) {
-
-/* Reject any attempt to remove the final Frame from the FrameSet. */
- if ( this->nframe == 1 ) {
- astError( AST__REMIN, "astRemoveFrame(%s): Invalid attempt to "
- "remove the only Frame in a %s.", status, astGetClass( this ),
- astGetClass( this ) );
-
-/* If OK, annul the pointer to the selected Frame. */
- } else {
- this->frame[ iframe - 1 ] = astAnnul( this->frame[ iframe - 1 ] );
-
-/* Loop to move all subsequent Frame pointers down in the FrameSet's
- "frame" array to close the resulting gap. Also move the associated
- "node" array contents in the same way. */
- for ( ifr = iframe; ifr < this->nframe; ifr++ ) {
- this->frame[ ifr - 1 ] = this->frame[ ifr ];
- this->node[ ifr - 1 ] = this->node[ ifr ];
- }
- this->frame[ this->nframe - 1 ] = NULL;
- this->node[ this->nframe - 1 ] = -1;
-
-/* Decrement the Frame count. */
- this->nframe--;
-
-/* Tidy the nodes in the FrameSet. */
- TidyNodes( this, status );
-
-/* If the Base attribute is set and the removed Frame was the base
- Frame, then clear the attribute value so that a new base Frame will
- be selected by default. */
- if ( astTestBase( this ) ) {
- ii = astGetBase( this );
- if ( iframe == ii ) {
- astClearBase( this );
-
-/* If the index of the removed Frame is smaller than the base Frame
- index, then decrement the Base attribute so that the same base
- Frame will be used in future. */
- } else if ( iframe < ii ) {
- astSetBase( this, ii - 1 );
- }
- }
-
-/* Repeat the above procedure for the current Frame. */
- if ( astTestCurrent( this ) ) {
- ii = astGetCurrent( this );
- if ( iframe == ii ) {
- astClearCurrent( this );
- } else if ( iframe < ii ) {
- astSetCurrent( this, ii - 1 );
- }
- }
- }
- }
-}
-
-static AstMapping *RemoveRegions( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* RemoveRegions
-
-* Purpose:
-* Remove any Regions from a Mapping.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* AstMapping *RemoveRegions( AstMapping *this, int *status )
-
-* Class Membership:
-* FrameSet method (over-rides the astRemoveRegions method inherited
-* from the Mapping class).
-
-* Description:
-* This function searches the supplied Mapping (which may be a
-* compound Mapping such as a FrameSet) for any component Mappings
-* that are instances of the AST Region class. It then creates a new
-* Mapping from which all Regions have been removed. If a Region
-* cannot simply be removed (for instance, if it is a component of a
-* parallel FrameSet), then it is replaced with an equivalent UnitMap
-* in the returned Mapping.
-*
-* The implementation provided by the FrameSet class invokes the
-* astRemoveRegions method on all the component Frames and Mappings,
-* and joins the results together into a new FrameSet.
-
-* Parameters:
-* this
-* Pointer to the original Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the modified mapping.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstFrame **newfrms; /* Array of new Frames */
- AstFrameSet *new; /* Pointer to new FrameSet */
- AstFrameSet *this; /* Pointer to FrameSet structure */
- AstMapping **newmaps; /* Array of new Mappings */
- AstMapping *result; /* Result pointer to return */
- int changed; /* Has any mapping been changed? */
- int i; /* Loop count */
- int nax; /* Number of Frame axes */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the FrameSet. */
- this = (AstFrameSet *) this_mapping;
-
-/* Allocate arrays to hold the modified Mapping and Frame pointers. */
- newmaps = astMalloc( sizeof( AstMapping *)*( this->nnode - 1 ) );
- newfrms = astMalloc( sizeof( AstFrame *)*( this->nframe ) );
- if( astOK ) {
-
-/* Invoke the astRemoveRegions method on all the component Mappings. */
- changed = 0;
- for( i = 0; i < this->nnode - 1; i++ ) {
- newmaps[ i ] = astRemoveRegions( this->map[ i ] );
-
-/* Note if any Mapping was changed. */
- if( newmaps[ i ] != this->map[ i ] ) {
- changed = 1;
-
-/* The implementation of the astRemoveRegions method provided by the
- Region class returns a Frame rather than a UnitMap. But we need
- Mappings here, not Frames. So if the new Mapping is a Frame, replace
- it with an equivalent UnitMap. */
- if( astIsAFrame( newmaps[ i ] ) ) {
- nax = astGetNin( newmaps[ i ] );
- (void) astAnnul( newmaps[ i ] );
- newmaps[ i ] = (AstMapping *) astUnitMap( nax, " ", status );
- }
- }
- }
-
-/* Invoke the astRemoveRegions method on all the component Frames. */
- for( i = 0; i < this->nframe; i++ ) {
- newfrms[ i ] = astRemoveRegions( this->frame[ i ] );
-
-/* Note if any Frame was changed. */
- if( newfrms[ i ] != this->frame[ i ] ) changed = 1;
- }
-
-/* If no component was modified, just return a clone of the supplied
- pointer. */
- if( ! changed ) {
- result = astClone( this );
-
-/* Otherwise, we need to create a new FrameSet to return. We take a deep
- copy of the supplied FrameSet and then modify the Mappings and Frames
- so that we retain any extra information in the supplied FrameSet. */
- } else {
- new = astCopy( this );
-
- for( i = 0; i < this->nnode - 1; i++ ) {
- (void) astAnnul( new->map[ i ] );
- new->map[ i ] = astClone( newmaps[ i ] );
- }
-
- for( i = 0; i < this->nframe; i++ ) {
- (void) astAnnul( new->frame[ i ] );
- new->frame[ i ] = astClone( newfrms[ i ] );
- }
-
- result = (AstMapping *) new;
- }
-
-/* Free resources. */
- for( i = 0; i < this->nnode - 1; i++ ) {
- newmaps[ i ] = astAnnul( newmaps[ i ] );
- }
-
- for( i = 0; i < this->nframe; i++ ) {
- newfrms[ i ] = astAnnul( newfrms[ i ] );
- }
-
- }
-
- newfrms = astFree( newfrms );
- newmaps = astFree( newmaps );
-
-/* Annul the returned Mapping if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static void ReportPoints( AstMapping *this_mapping, int forward,
- AstPointSet *in_points, AstPointSet *out_points, int *status ) {
-/*
-* Name:
-* ReportPoints
-
-* Purpose:
-* Report the effect of transforming a set of points using a FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void ReportPoints( AstMapping *this, int forward,
-* AstPointSet *in_points, AstPointSet *out_points, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astReportPoints
-* method inherited from the Frame class).
-
-* Description:
-* This function reports the coordinates of a set of points before
-* and after being transformed by a FrameSet, by writing them to
-* standard output.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* forward
-* A non-zero value indicates that the FrameSet's forward
-* coordinate transformation has been applied, while a zero
-* value indicates the inverse transformation.
-* in_points
-* Pointer to a PointSet which is associated with the
-* coordinates of a set of points before the FrameSet was
-* applied.
-* out_points
-* Pointer to a PointSet which is associated with the
-* coordinates of the same set of points after the FrameSet has
-* been applied.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstFrame *base_frame; /* Pointer to current Frame */
- AstFrame *current_frame; /* Pointer to base Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- double **ptr_in; /* Pointer to array of input data pointers */
- double **ptr_out; /* Pointer to array of output data pointers */
- int coord; /* Loop counter for coordinates */
- int ncoord_in; /* Number of input coordinates per point */
- int ncoord_out; /* Number of output coordinates per point */
- int npoint; /* Number of points to report */
- int npoint_in; /* Number of input points */
- int npoint_out; /* Number of output points */
- int point; /* Loop counter for points */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_mapping;
-
-/* Obtain the numbers of points and coordinates associated with each
- PointSet. */
- npoint_in = astGetNpoint( in_points );
- npoint_out = astGetNpoint( out_points );
- ncoord_in = astGetNcoord( in_points );
- ncoord_out = astGetNcoord( out_points );
-
-/* Obtain the pointers that give access to the coordinate data
- associated with each PointSet. */
- ptr_in = astGetPoints( in_points );
- ptr_out = astGetPoints( out_points );
-
-/* In the event that both PointSets don't contain equal numbers of
- points (this shouldn't actually happen), simply use the minimum
- number. */
- npoint = ( npoint_in < npoint_out ) ? npoint_in : npoint_out;
-
-/* Obtain pointers to the FrameSet's base and current Frames. */
- base_frame = astGetFrame( this, AST__BASE );
- current_frame = astGetFrame( this, AST__CURRENT );
-
-/* Loop to report the effect of the transformation on each point in
- turn. */
- if ( astOK ) {
- for ( point = 0; point < npoint; point++ ) {
-
-/* Report the input coordinates (in parentheses and separated by
- commas). Format each value for display using the appropriate
- Frame's astFormat method. */
- printf( "(" );
- for ( coord = 0; coord < ncoord_in; coord++ ) {
- printf( "%s%s", coord ? ", " : "",
- astFormat( forward ? base_frame : current_frame,
- coord, ptr_in[ coord ][ point ] ) );
- }
-
-/* Similarly report the output coordinates, this time formatting
- values using the other Frame's astFormat method. */
- printf( ") --> (" );
- for ( coord = 0; coord < ncoord_out; coord++ ) {
- printf( "%s%s", coord ? ", " : "",
- astFormat( forward ? current_frame : base_frame,
- coord, ptr_out[ coord ][ point ] ) );
- }
- printf( ")\n" );
- }
- }
-
-/* Annul the Frame pointers. */
- base_frame = astAnnul( base_frame );
- current_frame = astAnnul( current_frame );
-}
-
-static void Resolve( AstFrame *this_frame, const double point1[],
- const double point2[], const double point3[],
- double point4[], double *d1, double *d2, int *status ){
-/*
-* Name:
-* Resolve
-
-* Purpose:
-* Resolve a vector into two orthogonal components
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* void Resolve( AstFrame *this, const double point1[],
-* const double point2[], const double point3[],
-* double point4[], double *d1, double *d2, int *status );
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astResolve
-* method inherited from the Frame class).
-
-* Description:
-* This function resolves a vector into two perpendicular components.
-* The vector from point 1 to point 2 is used as the basis vector.
-* The vector from point 1 to point 3 is resolved into components
-* parallel and perpendicular to this basis vector. The lengths of the
-* two components are returned, together with the position of closest
-* aproach of the basis vector to point 3.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* point1
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). This marks the start of the basis vector,
-* and of the vector to be resolved.
-* point2
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). This marks the end of the basis vector.
-* point3
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). This marks the end of the vector to be
-* resolved.
-* point4
-* An array of double, with one element for each Frame axis
-* in which the coordinates of the point of closest approach of the
-* basis vector to point 3 will be returned.
-* d1
-* The address of a location at which to return the distance from
-* point 1 to point 4 (that is, the length of the component parallel
-* to the basis vector). Positive values are in the same sense as
-* movement from point 1 to point 2.
-* d2
-* The address of a location at which to return the distance from
-* point 4 to point 3 (that is, the length of the component
-* perpendicular to the basis vector). The value is always positive.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - Each vector used in this function is the path of
-* shortest distance between two points, as defined by the
-* astDistance function.
-* - This function will return "bad" coordinate values (AST__BAD)
-* if any of the input coordinates has this value, or if the required
-* output values are undefined.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
- Frame's astResolve method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- astResolve( fr, point1, point2, point3, point4, d1, d2 );
- fr = astAnnul( fr );
-
-}
-
-static AstPointSet *ResolvePoints( AstFrame *this_frame, const double point1[],
- const double point2[], AstPointSet *in,
- AstPointSet *out, int *status ) {
-/*
-* Name:
-* ResolvePoints
-
-* Purpose:
-* Resolve a set of vectors into orthogonal components
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* AstPointSet *astResolvePoints( AstFrame *this, const double point1[],
-* const double point2[], AstPointSet *in,
-* AstPointSet *out )
-
-* Class Membership:
-* FrameSet member function (over-rides the astResolvePoints method
-* inherited from the Frame class).
-
-* Description:
-* This function takes a Frame and a set of vectors encapsulated
-* in a PointSet, and resolves each one into two orthogonal components,
-* returning these two components in another PointSet.
-*
-* This is exactly the same as the public astResolve method, except
-* that this method allows many vectors to be processed in a single call,
-* thus reducing the computational cost of overheads of many
-* individual calls to astResolve.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* point1
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). This marks the start of the basis vector,
-* and of the vectors to be resolved.
-* point2
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). This marks the end of the basis vector.
-* in
-* Pointer to the PointSet holding the ends of the vectors to be
-* resolved.
-* out
-* Pointer to a PointSet which will hold the length of the two
-* resolved components. A NULL value may also be given, in which
-* case a new PointSet will be created by this function.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet. The first axis will
-* hold the lengths of the vector components parallel to the basis vector.
-* These values will be signed (positive values are in the same sense as
-* movement from point 1 to point 2. The second axis will hold the lengths
-* of the vector components perpendicular to the basis vector. These
-* values will always be positive.
-
-* Notes:
-* - The number of coordinate values per point in the input
-* PointSet must match the number of axes in the supplied Frame.
-* - If an output PointSet is supplied, it must have space for
-* sufficient number of points and 2 coordinate values per point.
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstPointSet *result; /* Pointer to output PointSet */
- AstFrameSet *this; /* Pointer to FrameSet structure */
- AstFrame *fr; /* Pointer to current Frame */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
- Frame's astResolvePoints method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- result = astResolvePoints( this, point1, point2, in, out );
- fr = astAnnul( fr );
-
-/* Return a pointer to the output PointSet. */
- return result;
-
-}
-
-static void RestoreIntegrity( AstFrameSet *this, int *status ) {
-/*
-*+
-* Name:
-* RestoreIntegrity
-
-* Purpose:
-* Restore a previous integrity state for a FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* void RestoreIntegrity( AstFrameSet *this )
-
-* Class Membership:
-* FrameSet member function.
-
-* Description:
-* This function restores a FrameSet to a previous integrity state,
-* as recorded (in static variables) by a previous invocation of
-* the RecordIntegrity function. It does this by appropriately
-* remapping the FrameSet's current Frame, if this appears
-* necessary.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-
-* Notes:
-* - The previous record of the FrameSet's integrity state (as
-* recorded by RecordIntegrity) is deleted by this function, even
-* if it is invoked with the global error status set.
-* - An error will result if the previous integrity state cannot be
-* restored.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstFrame *current; /* Pointer to current Frame */
- AstFrameSet *cvt; /* Pointer to conversion FrameSet */
- AstMapping *map; /* Pointer to conversion Mapping */
- int flags; /* Flags associated with current frame */
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Check that a previous record of the FrameSet's integrity state has
- been made. Do not modify the FrameSet if it appears that the
- previous integrity state has not been lost (i.e. that the current
- Frame has not been modified), nor if there is only one Frame
- present. Check the global error status. */
- if ( integrity_frame && integrity_lost && ( astGetNframe( this ) > 1 ) &&
- astOK ) {
-
-/* Obtain a pointer to the current Frame. */
- current = astGetFrame( this, AST__CURRENT );
-
-/* Since we need to obtain a conversion between the recorded copy of
- this Frame and the current one, we must match their Domain
- attributes (otherwise conversion cannot be performed). Do this by
- changing the recorded copy as necessary. */
- if ( astTestDomain( current ) ) {
- astSetDomain( integrity_frame, astGetDomain( current ) );
- } else {
- astClearDomain( integrity_frame );
- }
-
-/* Temporarily set both Frames AST__INTFLAG flag to indicate that the
- following call to astConvert is part of the process of restoring a
- FrameSet's integrity. Some classes of Frame (e.g. DSBSpecFrames) may
- choose to return a different Mapping in this case. */
- astSetFrameFlags( integrity_frame, astGetFrameFlags( integrity_frame )
- | AST__INTFLAG );
- flags = astGetFrameFlags( current );
- astSetFrameFlags( current, flags | AST__INTFLAG );
-
-/* Obtain the required conversion FrameSet, restore the original frame
- flags and annul the current Frame pointer. */
- cvt = astConvert( integrity_frame, current, "" );
- astSetFrameFlags( current, flags );
- current = astAnnul( current );
-
-/* If no conversion could be found, then the FrameSet's integrity
- state cannot be restored, so report an error. */
- if ( !cvt ) {
- if( astOK ) {
- astError( AST__ILOST, "%s(%s): Cannot maintain %s integrity.", status,
- integrity_method, astGetClass( this ),
- astGetClass( this ) );
- }
-
-/* Otherwise, obtain a pointer to the conversion Mapping. */
- } else {
- map = astGetMapping( cvt, AST__BASE, AST__CURRENT );
-
-/* If the Mapping is not a UnitMap (i.e. a null Mapping), then use it
- to remap the FrameSet's current Frame. */
- if ( strcmp( astGetClass( map ), "UnitMap" ) ) {
- astRemapFrame( this, AST__CURRENT, map );
- }
-
-/* Annul the conversion Mapping and Frameset pointers. */
- map = astAnnul( map );
- cvt = astAnnul( cvt );
- }
- }
-
-/* Delete the recorded integrity information by annulling the original
- copy of the current Frame (thus deleting it) and resetting the
- associated modification flag. */
- if ( integrity_frame ) integrity_frame = astAnnul( integrity_frame );
- integrity_lost = 0;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* void SetAttrib( AstObject *this, const char *setting, int *status )
-
-* Class Membership:
-* FrameSet member function (extends the astSetAttrib method
-* inherited from the Frame class).
-
-* Description:
-* This function assigns an attribute value for a FrameSet, the
-* attribute and its value being specified by means of a string of
-* the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in
-* lower case with no white space present. The value to the right
-* of the "=" should be a suitable textual representation of the
-* value to be assigned and this will be interpreted according to
-* the attribute's data type. White space surrounding the value is
-* only significant for string attributes.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* setting
-* Pointer to a null terminated string specifying the new
-* attribute value.
-* status
-* Pointer to the inherited status variable.
-
-* Attributes:
-* The set of attribute values is not fixed and is determined by
-* the current Frame. In addition, the FrameSet class defines the
-* following attributes:
-*
-* Base (integer)
-* Current (integer)
-
-* Notes:
-* - This protected method is intended to be invoked by the Object
-* astSet method and makes additional attributes accessible to it.
-* - All attribute settings passed to this function are simply
-* passed on to the corresponding method for the FrameSet's current
-* Frame.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- int base; /* Base attribute value */
- int base_off; /* Offset of Base value string */
- int current; /* Current attribute value */
- int current_off; /* Offset of Current value string */
- int id; /* Offset of ID string */
- int invert; /* Invert attribute value */
- int len; /* Length of setting string */
- int nc; /* Number of characters read by astSscanf */
- int report; /* Report attribute value */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_object;
-
-/* Obtain the length of the setting string. */
- len = strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse the
- setting string and extract the attribute value (or an offset to it in the
- case of string values). In each case, use the value set in "nc" to check
- that the entire string was matched. Once a value has been obtained, use the
- appropriate method to set it. */
-
-/* We first handle attributes that apply to the FrameSet as a whole
- (rather than to the current Frame). */
-
-/* Base. */
-/* ----- */
-/* Read as an integer. */
- if ( nc = 0,
- ( 1 == astSscanf( setting, "base= %d %n", &base, &nc ) )
- && ( nc >= len ) ) {
- astSetBase( this, base );
-
-/* Also allow a string. */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "base= %n%*s %n", &base_off, &nc ) )
- && ( nc >= len ) ) {
-
-/* Check for "AST__CURRENT" or "Current". */
- if ( astChrMatch( "AST__CURRENT", setting + base_off ) ||
- astChrMatch( "Current", setting + base_off ) ) {
- astSetBase( this, AST__CURRENT );
-
-/* Check for "AST__BASE" or "Base" (possible, although not very
- useful). */
- } else if ( astChrMatch( "AST__BASE", setting + base_off ) ||
- astChrMatch( "Base", setting + base_off ) ) {
-
-/* Report an error if the value wasn't recognised. */
- } else {
- astError( AST__ATTIN, "astSetAttrib(%s): Invalid index value for "
- "Base Frame \"%s\".", status,
- astGetClass( this ), setting + base_off );
- }
-
-/* Current. */
-/* -------- */
-/* Since this determines the choice of current Frame, we must restore
- the integrity state of the FrameSet before changing this attribute
- and record the new integrity state afterwards. */
-
-/* Read as an integer. */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "current= %d %n", ¤t, &nc ) )
- && ( nc >= len ) ) {
- RestoreIntegrity( this, status );
- astSetCurrent( this, current );
- RecordIntegrity( this, status );
-
-/* Also allow a string. */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "current= %n%*s %n",
- ¤t_off, &nc ) )
- && ( nc >= len ) ) {
-
-/* Check for "AST__BASE" or "Base". */
- if ( astChrMatch( "AST__BASE", setting + current_off ) ||
- astChrMatch( "Base", setting + current_off ) ) {
- RestoreIntegrity( this, status );
- astSetCurrent( this, AST__BASE );
- RecordIntegrity( this, status );
-
-/* Check for "AST__CURRENT" or "Current" (possible, although not very
- useful). */
- } else if ( astChrMatch( "AST__CURRENT", setting + current_off ) ||
- astChrMatch( "Current", setting + current_off ) ) {
-
-/* Report an error if the value wasn't recognised. */
- } else {
- astError( AST__ATTIN, "astSetAttrib(%s): Invalid index value for "
- "Current Frame \"%s\".", status,
- astGetClass( this ), setting + current_off );
- }
-
-/* ID. */
-/* --- */
- } else if ( nc = 0, ( 0 == astSscanf( setting, "id=%n%*[^\n]%n", &id, &nc ) )
- && ( nc >= len ) ) {
- astSetID( this, setting + id );
-
-/* Invert. */
-/* ------- */
-/* Since this affects the choice of current Frame, we must restore the
- integrity state of the FrameSet before changing this attribute and
- record the new integrity state afterwards. */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "invert= %d %n", &invert, &nc ) )
- && ( nc >= len ) ) {
- RestoreIntegrity( this, status );
- astSetInvert( this, invert );
- RecordIntegrity( this, status );
-
-/* Report. */
-/* ------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "report= %d %n", &report, &nc ) )
- && ( nc >= len ) ) {
- astSetReport( this, report );
-
-/* Define a macro to see if the setting string matches any of the
- read-only attributes of this class. */
-#define MATCH(attrib) \
- ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
- ( nc >= len ) )
-
-/* If the attribute was not recognised, use this macro to report an error
- if a read-only attribute has been specified. */
- } else if ( MATCH( "class" ) ||
- MATCH( "nframe" ) ||
- MATCH( "nin" ) ||
- MATCH( "nobject" ) ||
- MATCH( "nout" ) ||
- MATCH( "refcount" ) ||
- MATCH( "tranforward" ) ||
- MATCH( "traninverse" ) ) {
- astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.", status,
- setting, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Pass unrecognised settings on to the FrameSet's current Frame for
- further interpretation. */
- } else {
-
-/* Force a copy to be made of the current Frame, if needed, to make it
- independent of other Frames within the FrameSet. */
- (void) ForceCopy( this, AST__CURRENT, status );
-
-/* Obtain a pointer to the current Frame and invoke its astSetAttrib
- method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- astSetAttrib( fr, setting );
- fr = astAnnul( fr );
-
-/* Note that the current Frame has been modified. */
- integrity_lost = 1;
- }
-
-/* Undefine macros local to this function. */
-#undef MATCH
-}
-
-static void SetAxis( AstFrame *this_frame, int axis, AstAxis *newaxis, int *status ) {
-/*
-* Name:
-* SetAxis
-
-* Purpose:
-* Set a new Axis for a FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* void SetAxis( AstFrame *this, int axis, AstAxis *newaxis, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the astSetAxis method
-* inherited from the Frame class).
-
-* Description:
-* This function allows a new Axis object to be associated with one
-* of the axes of the current Frame in a FrameSet, replacing the
-* previous one. Each Axis object contains a description of the
-* quantity represented along one of the Frame's axes, so this
-* function allows this description to be exchanged for another
-* one.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* axis
-* The index (zero-based) of the axis whose associated Axis
-* object is to be replaced.
-* newaxis
-* Pointer to the new Axis object.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Validate the axis index supplied. */
- (void) astValidateAxis( this, axis, "astSetAxis" );
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
- Frame's astSetAxis method to assign the new Axis object. Annul the
- Frame pointer afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- astSetAxis( fr, axis, newaxis );
- fr = astAnnul( fr );
-}
-
-static void SetBase( AstFrameSet *this, int iframe, int *status ) {
-/*
-*+
-* Name:
-* astSetBase
-
-* Purpose:
-* Set a value for the Base attribute of a FrameSet.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frameset.h"
-* void astSetBase( AstFrameSet *this, int iframe )
-
-* Class Membership:
-* FrameSet method.
-
-* Description:
-* This function sets a value for the Base attribute of a FrameSet. This
-* value is an index that identifies the base Frame for the FrameSet.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* iframe
-* Value to be set for the Base attribute.
-
-* Notes:
-* - A value of AST__BASE or AST__CURRENT may be given for the
-* "iframe" parameter to identify the base Frame or the current
-* Frame respectively.
-*-
-*/
-
-/* Local Variables: */
- int invert; /* FrameSet is inverted? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Validate and translate the Frame index supplied. */
- iframe = astValidateFrameIndex( this, iframe, "astSetBase" );
-
-/* Determine if the FrameSet has been inverted. */
- invert = astGetInvert( this );
-
-/* If it has not been inverted, set the base Frame index, otherwise
- set the current Frame index instead. */
- if ( astOK ) *( invert ? &this->current : &this->base ) = iframe;
-}
-
-static void SetCurrent( AstFrameSet *this, int iframe, int *status ) {
-/*
-*+
-* Name:
-* astSetCurrent
-
-* Purpose:
-* Set a value for the Current attribute of a FrameSet.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "frameset.h"
-* int astSetCurrent( AstFrameSet *this, int iframe )
-
-* Class Membership:
-* FrameSet method.
-
-* Description:
-* This function sets a value for the Current attribute of a
-* FrameSet. This attribute is an index that identifies the current
-* Frame for the FrameSet.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* iframe
-* Value to be set for the Current attribute.
-
-* Notes:
-* - A value of AST__BASE or AST__CURRENT may be given for the
-* "iframe" parameter to identify the base Frame or the current
-* Frame respectively.
-*-
-*/
-
-/* Local Variables: */
- int invert; /* FrameSet is inverted? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Validate and translate the Frame index supplied. */
- iframe = astValidateFrameIndex( this, iframe, "astSetCurrent" );
-
-/* Determine if the FrameSet has been inverted. */
- invert = astGetInvert( this );
-
-/* If it has not been inverted, set the current frame index, otherwise
- set the base Frame index instead. */
- if ( astOK ) *( invert ? &this->base : &this->current ) = iframe;
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* Simplify
-
-* Purpose:
-* Simplify the Mappings in a FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* AstMapping *Simplify( AstMapping *this, int *status )
-
-* Class Membership:
-* FrameSet method (over-rides the astSimplify method inherited
-* from the Frame class).
-
-* Description:
-* This function simplifies the Mappings in a FrameSet to eliminate
-* redundant computational steps, or to merge separate steps which
-* can be performed more efficiently in a single operation.
-
-* Parameters:
-* this
-* Pointer to the original FrameSet.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A new pointer to the (possibly simplified) FrameSet. If
-* simplification was not possible, this will be a cloned pointer
-* to the original FrameSet.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstFrameSet *new; /* Pointer to new (simpler?) FrameSet */
- AstFrameSet *this; /* Pointer to original FrameSet structure */
- AstMapping *map; /* Pointer to Mapping */
- AstMapping *result; /* Result pointer to return */
- AstMapping *tmp; /* Temporary Mapping pointer */
- int inode; /* Loop counter for FrameSet nodes */
- int inv; /* Mapping Invert attribute value */
- int invert; /* Invert flag value */
- int set; /* Invert attribute set? */
- int simpler; /* Simplification achieved? */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_mapping;
-
-/* Make a copy of the FrameSet, since we may alter it (this is a deep
- copy, which is a minor limitation of the current implementation). */
- new = astCopy( this );
-
-/* Loop to examine each of the Mappings between the Frames in the
- copy. */
- simpler = 0;
- for ( inode = 1; astOK && ( inode < new->nnode ); inode++ ) {
-
-/* Obtain the Mapping pointer and associated invert flag. */
- map = new->map[ inode - 1 ];
- invert = new->invert[ inode - 1 ];
-
-/* Determine if the Mapping's Invert attribute is set, and obtain its
- value. */
- set = astTestInvert( map );
- inv = astGetInvert( map );
-
-/* If necessary, set the required value for the Invert attribute. */
- if ( inv != invert ) astSetInvert( map, invert );
-
-/* Simplify the Mapping. */
- tmp = astSimplify( map );
-
-/* If necessary, restore the original state of the Mapping's Invert
- attribute. */
- if ( inv != invert ) {
- if ( set ) {
- astSetInvert( map, inv );
- } else {
- astClearInvert( map );
- }
- }
-
-/* Test if simplification was performed. */
- if ( astOK ) {
- if ( tmp != map ) {
-
-/* If so, annul the original Mapping pointer and substitute the new
- one. Also set a new invert flag to accompany it. */
- (void) astAnnul( new->map[ inode - 1 ] );
- new->map[ inode - 1 ] = astClone( tmp );
- new->invert[ inode - 1 ] = astGetInvert( tmp );
-
-/* Note if any Mapping within the FrameSet is simplified. */
- simpler = 1;
- }
- }
-
-/* Annul the pointer to the simplified Mapping. */
- tmp = astAnnul( tmp );
- }
-
-/* If simplification was possible, clone a pointer to the new
- FrameSet. Otherwise clone a pointer to the original one. */
- if ( astOK ) result = astClone( simpler ? new : this );
-
-/* Annul the new FrameSet pointer. */
- new = astAnnul( new );
-
-/* If an error occurred, annul the returned pointer. */
- if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static int Span( AstFrameSet *this, AstFrame **frames, int inode1, int inode2,
- int avoid, AstMapping **map, int *forward, int *status ) {
-/*
-* Name:
-* Span
-
-* Purpose:
-* Find a path between two nodes in a FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* int Span( AstFrameSet *this, AstFrame **frames, int inode1, int inode2,
-* int avoid, AstMapping **map, int *forward, int *status )
-
-* Class Membership:
-* FrameSet member function.
-
-* Description:
-* This function searches a FrameSet to identify a path between two
-* specified nodes. It returns an array of pointers to each Mapping
-* in the path, along with direction information, so that an
-* overall Mapping between the two nodes can be constructed.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* frames
-* Pointer to an array of Frame pointers, indexed by node index.
-* Nodes which have no associated Frame will have a NULL pointer
-* stored in this array.
-* inode1
-* Zero based index of the starting node.
-* inode2
-* Zero based index of the ending node.
-* avoid
-* Zero based index which identifies a node which is to be
-* avoided (i.e. the initial step in the path should not be via
-* this node). This value is required because the function
-* invokes itself recursively; it provides a mechanism to
-* prevent searches proceeding back down paths that have already
-* been searched. External callers should provide a value of -1,
-* which indicates that all possible paths should initially be
-* explored.
-* map
-* Pointer to the start of an array that will be filled with a
-* series of pointers to Mappings which must be applied in turn
-* in order to transform between the two Frames. External
-* callers should ensure that this array contains at least as many
-* elements as there are Mappings and Frames in the FrameSet (one less
-* than the number of nodes plus the number of Frames).
-*
-* Note that the pointers are simply copies of addresses from
-* the FrameSet's "map" array. They are not cloned, so should
-* not be annulled by the caller.
-* forward
-* Pointer to the start of an array of int that will be filled
-* with boolean flags (0 or 1) to indicate whether the forward
-* (as opposed to the inverse) transformation should be used for
-* each Mapping returned in order to effect the transformation
-* between the starting and ending nodes. This array should be the
-* same size as the "map" array.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The function returns one more than the number of Mappings
-* required to perform the transformation, or zero if it was not
-* possible to find a path between the two nodes.
-
-* Notes:
-* - If a node has an associated Frame, the Frame usually represents a
-* UnitMap and so can be ignored. The exception is if the Frame is
-* actually a Region (or a CmpFrame containing a Region), in which case
-* it represents a Mapping which returns bad values if the input position
-* is outside the region. This form of Mapping should not be ignored, and
-* so the returned list of Mappings includes the effect of any Frames
-* along the path which are not equivalent to a UnitMap. This
-* equivalence is determined by invoking the astSimplify method on the
-* Frame.
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-* - On the assumption that the FrameSet has been consistently
-* constructed, there should be exactly one path between any pair
-* of its nodes. It should not, therefore, ever fail to find a
-* path except when invoked recursively to explore a subset of the
-* FrameSet's nodes (this should not be visible to an external
-* caller). Failure to find a path does not in itself result in an
-* error condition.
-*/
-
-/* Local Variables: */
- AstFrame *frame; /* Pointer to Frame associated with inode1 */
- int fwd; /* Forward Mapping identified? */
- int inode; /* Loop counter for nodes */
- int inv; /* Inverse Mapping identified? */
- int invert; /* Original Mapping Invert value */
- int nextra; /* No. of extra Mappings to add to path */
- int result; /* Count of mappings (to be returned) */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* See if the two nodes are the same. */
- result = ( inode1 == inode2 );
-
-/* If so, we need to consider the Mapping represented by any Frame
- associated with the node. Most classes of Frames are equivalent to a
- UnitMap and so can be ignored. But some (e.g. the Region class) are not
- equivalent to a UnitMap and so needs to be included in the returned
- Mapping list. */
- if( result ) {
- result = 1;
-
-/* If inode1 is associated with a Frame, which is not equivalent to a
- UnitMap, add the Frame as the first Mapping into the returned list. The
- "forward" value is irrelevant since the forward and inverse transformations
- of Frames are the same. */
- frame = frames[ inode1 ];
- if( frame ) {
- if( !astIsUnitFrame( frame ) ) {
- result++;
- *map = (AstMapping *) frame;
- *forward = 1;
- }
- }
-
-/* If the nodes are different, we now attempt to find the next step in
- the path between them. Loop through all available nodes looking for
- the next one to transform to (i.e. one that is directly related by
- a Mapping to our starting node). */
- } else {
- for ( inode = 0; inode < this->nnode; inode++ ) {
-
-/* Do not consider node "avoid". This prevents us re-tracing our steps
- backwards when this function is invoked recursively. */
- if ( inode != avoid ) {
-
-/* Test if inode is derived from inode1 (if so, the Mapping associated
- with inode will convert from inode1 to inode when applied in the
- forward direction). */
- fwd = ( inode > 0 ) && ( this->link[ inode - 1 ] == inode1 );
-
-/* Test if inode1 is derived from inode (if so, the Mapping associated
- with inode1 will convert from inode1 to inode when applied in the
- inverse direction). */
- inv = ( inode1 > 0 ) && ( this->link[ inode1 - 1 ] == inode );
-
-/* If the nodes are directly related, we try to find a path from inode to
- inode2 without going back through inode1. */
- if ( fwd || inv ) {
-
-/* If node1 is associated with a Frame, we need to include the Frame
- as a Mapping in the returned list unless the Frame is equivalent to a
- UnitMap. Note the number of slots to be reserved for node1 when we call
- Span recursively below. */
- nextra = 1;
- frame = frames[ inode1 ];
- if( frame && !astIsUnitFrame( frame ) ) nextra = 2;
-
-/* Invoke this function recursively to try and find a path from inode
- to inode2 without going back through inode1. If this is possible, a
- non-zero result will be returned. Store the returned Mappings and
- direction information in the arrays supplied, but leave extra space to
- insert information about the Mapping between nodes inode1 and inode. */
- result = Span( this, frames, inode, inode2, inode1,
- map + nextra, forward + nextra, status );
-
-/* If a path was found, increment the Mapping count to account for the
- one that transforms between nodes inode1 and inode and insert
- information for this Mapping into the output arrays. */
- if ( result ) {
- result++;
- nextra--;
- map[ nextra ] = this->map[ ( fwd ? inode : inode1 ) - 1 ];
- forward[ nextra ] = fwd;
-
-/* Obtain the original value of the Invert attribute for the Mapping
- between nodes inode1 and inode (recorded when the Mapping was first
- added to the FrameSet). Test if this value has now changed. If so,
- some external code has inverted the Mapping via another pointer, so
- invert the returned direction information to compensate for
- this. */
- invert = this->invert[ ( fwd ? inode : inode1 ) - 1 ];
- if ( invert != astGetInvert( map[ nextra ] ) ) {
- forward[ nextra ] = !forward[ nextra ];
- }
-
-/* If inode1 is associated with a non-unit Frame Mapping, add the Frame
- Mapping in as the first Mapping in the returned list. The "forward" value
- is irrelevant since the forward and inverse transformations of Frames
- are the same. */
- if( nextra ) {
- result++;
- *map = (AstMapping *) frame;
- *forward = 1;
- }
-
-/* Quit searching once a path has been found. */
- break;
- }
- }
- }
- }
- }
-
-/* Return the result, which is one more than the number of mappings
- found (i.e. steps in the path), or zero if no path was found (this
- should only occur when invoked recursively to explore an
- unsuccessful sub-path). */
- return result;
-}
-
-static int SubFrame( AstFrame *this_frame, AstFrame *template,
- int result_naxes,
- const int *target_axes, const int *template_axes,
- AstMapping **map, AstFrame **result, int *status ) {
-/*
-* Name:
-* SubFrame
-
-* Purpose:
-* Select axes from a FrameSet and convert to the new coordinate system.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* int SubFrame( AstFrame *target, AstFrame *template, int result_naxes,
-* const int *target_axes, const int *template_axes,
-* AstMapping **map, AstFrame **result, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astSubFrame
-* method inherited from the Frame class).
-
-* Description:
-* This function selects a requested sub-set (or super-set) of the
-* axes from the current Frame of a "target" FrameSet and creates a
-* new Frame with copies of the selected axes assembled in the
-* requested order. It then optionally overlays the attributes of a
-* "template" Frame on to the result. It returns both the resulting
-* Frame and a Mapping that describes how to convert between the
-* coordinate systems described by the current Frame of the target
-* FrameSet and the result Frame. If necessary, this Mapping takes
-* account of any differences in the Frames' attributes due to the
-* influence of the template.
-
-* Parameters:
-* target
-* Pointer to the target FrameSet, from whose current Frame the
-* axes are to be selected.
-* template
-* Pointer to the template Frame, from which new attributes for
-* the result Frame are to be obtained. Optionally, this may be
-* NULL, in which case no overlaying of template attributes will
-* be performed.
-* result_naxes
-* Number of axes to be selected from the target FrameSet. This
-* number may be greater than or less than the number of axes in
-* the FrameSet's current Frame (or equal).
-* target_axes
-* Pointer to an array of int with result_naxes elements, giving
-* a list of the (zero-based) axis indices of the axes to be
-* selected from the current Frame of the target FrameSet. The
-* order in which these are given determines the order in which
-* the axes appear in the result Frame. If any of the values in
-* this array is set to -1, the corresponding result axis will
-* not be derived from the target FrameSet, but will be assigned
-* default attributes instead.
-* template_axes
-* Pointer to an array of int with result_naxes elements. This
-* should contain a list of the template axes (given as
-* zero-based axis indices) with which the axes of the result
-* Frame are to be associated. This array determines which axes
-* are used when overlaying axis-dependent attributes of the
-* template on to the result. If any element of this array is
-* set to -1, the corresponding result axis will not receive any
-* template attributes.
-*
-* If the template argument is given as NULL, this array is not
-* used and a NULL pointer may also be supplied here.
-* map
-* Address of a location to receive a pointer to the returned
-* Mapping. The forward transformation of this Mapping will
-* describe how to convert coordinates from the coordinate
-* system described by the current Frame of the target FrameSet
-* to that described by the result Frame. The inverse
-* transformation will convert in the opposite direction.
-* result
-* Address of a location to receive a pointer to the result Frame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if coordinate conversion is
-* possible between the current Frame of the target FrameSet and
-* the result Frame. Otherwise zero is returned and *map and
-* *result are returned as NULL (but this will not in itself result
-* in an error condition). In general, coordinate conversion should
-* always be possible if no template Frame is supplied but may not
-* always be possible otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to FrameSet's current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- int match; /* Result to be returned */
-
-/* Initialise. */
- *map = NULL;
- *result = NULL;
- match = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return match;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame. */
- fr = astGetFrame( this, AST__CURRENT );
-
-/* Invoke the astSubFrame method for this Frame. */
- match = astSubFrame( fr, template, result_naxes, target_axes, template_axes,
- map, result );
-
-/* Annul the Frame pointer. */
- fr = astAnnul( fr );
-
-/* If an error occurred, clean up by annulling any returned objects and clear
- the returned result. */
- if ( !astOK ) {
- *map = astAnnul( *map );
- *result = astAnnul( *result );
- match = 0;
- }
-
-/* Return the result. */
- return match;
-}
-
-static AstSystemType SystemCode( AstFrame *this_frame, const char *system, int *status ) {
-/*
-* Name:
-* SystemCode
-
-* Purpose:
-* Convert a string into a coordinate system type code.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* AstSystemType SystemCode( AstFrame *this, const char *system, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astSystemCode
-* method inherited from the Frame class).
-
-* Description:
-* This function converts a string used for the external description of
-* a coordinate system into a Frame coordinate system type code (System
-* attribute value). It is the inverse of the astSystemString function.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* system
-* Pointer to a constant null-terminated string containing the
-* external description of the coordinate system.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The System type code.
-
-* Notes:
-* - A value of AST__BADSYSTEM is returned if the coordinate system
-* description was not recognised. This does not produce an error.
-* - A value of AST__BADSYSTEM is also returned if this function
-* is invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- AstSystemType result; /* Result value to return */
- AstFrame *fr; /* Pointer to FrameSet's current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke the
- astSystemCode method for this Frame. Annul the Frame pointer afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- result = astSystemCode( fr, system );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = AST__BADSYSTEM;
-
-/* Return the result. */
- return result;
-}
-
-static const char *SystemString( AstFrame *this_frame, AstSystemType system, int *status ) {
-/*
-* Name:
-* SystemString
-
-* Purpose:
-* Convert a coordinate system type code into a string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* const char *SystemString( AstFrame *this, AstSystemType system, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astSystemString
-* method inherited from the Frame class).
-
-* Description:
-* This function converts a Frame coordinate system type code
-* (System attribute value) into a string suitable for use as an
-* external representation of the coordinate system type.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* system
-* The coordinate system type code.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a constant null-terminated string containing the
-* textual equivalent of the type code supplied.
-
-* Notes:
-* - A NULL pointer value is returned if the coordinate system
-* code was not recognised. This does not produce an error.
-* - A NULL pointer value is also returned if this function is
-* invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to FrameSet's current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- const char *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke the
- astSystemString method for this Frame. Annul the Frame pointer
- afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- result = astSystemString( fr, system );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = NULL;
-
-/* Return the result pointer. */
- return result;
-
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the astTestAttrib protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a FrameSet's attributes.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* We first handle attributes that apply to the FrameSet as a whole
- (rather than to the current Frame). */
-
-/* Base. */
-/* ----- */
- if ( !strcmp( attrib, "base" ) ) {
- result = astTestBase( this );
-
-/* Current. */
-/* -------- */
- } else if ( !strcmp( attrib, "current" ) ) {
- result = astTestCurrent( this );
-
-/* ID. */
-/* --- */
- } else if ( !strcmp( attrib, "id" ) ) {
- result = astTestID( this );
-
-/* Invert. */
-/* ------- */
- } else if ( !strcmp( attrib, "invert" ) ) {
- result = astTestInvert( this );
-
-/* Report. */
-/* ------- */
- } else if ( !strcmp( attrib, "report" ) ) {
- result = astTestReport( this );
-
-/* If the name is not recognised, test if it matches any of the
- read-only attributes of this class. If it does, then return
- zero. */
- } else if ( !strcmp( attrib, "class" ) ||
- !strcmp( attrib, "nframe" ) ||
- !strcmp( attrib, "nin" ) ||
- !strcmp( attrib, "nobject" ) ||
- !strcmp( attrib, "nout" ) ||
- !strcmp( attrib, "refcount" ) ||
- !strcmp( attrib, "tranforward" ) ||
- !strcmp( attrib, "traninverse" ) ) {
- result = 0;
-
-/* Pass unrecognised attributes on to the FrameSet's current Frame for
- further interpretation. */
- } else {
-
-/* Obtain a pointer to the current Frame and invoke its astTestAttrib
- method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- result = astTestAttrib( fr, attrib );
- fr = astAnnul( fr );
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static int TestBase( AstFrameSet *this, int *status ) {
-/*
-*+
-* Name:
-* astTestBase
-
-* Purpose:
-* Determine if a value has been set for the Base attribute of a FrameSet.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frameset.h"
-* int astTestBase( AstFrameSet *this )
-
-* Class Membership:
-* FrameSet method.
-
-* Description:
-* This function returns a boolean result to indicate if a value
-* has been set for the Base attribute of a FrameSet. This
-* attribute is an index that identifies the base Frame in the
-* FrameSet.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-
-* Returned Value:
-* Zero or 1, depending on whether a value has been set.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- int invert; /* FrameSet is inverted? */
- int result; /* Value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Determine if the FrameSet has been inverted. */
- invert = astGetInvert( this );
-
-/* If it has not been inverted, test the base Frame index, otherwise
- test the index of the current Frame instead. */
- if ( astOK ) {
- if ( !invert ) {
- result = ( this->base != -INT_MAX );
- } else {
- result = ( this->current != -INT_MAX );
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static int TestCurrent( AstFrameSet *this, int *status ) {
-/*
-*+
-* Name:
-* astTestCurrent
-
-* Purpose:
-* Test if a value has been set for the Current attribute of a FrameSet.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "frameset.h"
-* int astTestCurrent( AstFrameSet *this )
-
-* Class Membership:
-* FrameSet method.
-
-* Description:
-* This function returns a boolean result to indicate whether a
-* value has been set for the Current attribute of a FrameSet.
-* This attribute is an index that identifies the current Frame in
-* a FrameSet.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-
-* Returned Value:
-* Zero or 1, depending on whether a value has been set.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- int invert; /* FrameSet is inverted? */
- int result; /* Value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Determine if the FrameSet has been inverted. */
- invert = astGetInvert( this );
-
-/* If it has not been inverted, test the current Frame index,
- otherwise test the index of the base Frame instead. */
- if ( astOK ) {
- if ( !invert ) {
- result = ( this->current != -INT_MAX );
- } else {
- result = ( this->base != -INT_MAX );
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static void TidyNodes( AstFrameSet *this, int *status ) {
-/*
-* Name:
-* TidyNodes
-
-* Purpose:
-* Tidy the nodes in a FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* void TidyNodes( AstFrameSet *this, int *status )
-
-* Class Membership:
-* FrameSet member function.
-
-* Description:
-* This function tidies the nodes in a FrameSet, removing any that
-* are unnecessary or represent dead-ends. It should be used after
-* any changes have been made to a FrameSet that may have reduced
-* the number of references to any of its nodes (either by Frames
-* or by other nodes).
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstMapping *newmap; /* Pointer to simplified Mapping */
- AstMapping *tmpmap; /* Pointer to new compound Mapping */
- int ifr; /* Loop counter for Frames */
- int inode; /* Loop counter for nodes */
- int last_link[ 2 ]; /* Last nodes to reference via "link" array */
- int link_ref; /* Number of "link" array references */
- int needed; /* Node still required? */
- int next; /* Node which references the removed one */
- int remove; /* Node to be removed */
- int suspect; /* Loop counter for testing nodes */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Loop to search for unnecessary nodes until no more are found. */
- needed = 0;
- while ( !needed ) {
-
-/* Inspect each node (including node zero, which does not actually
- have a Mapping associated with it) to see how many times it is
- referenced. */
- for ( suspect = 0; suspect < this->nnode; suspect++ ) {
- link_ref = 0;
-
-/* Test for at least one reference from within the "node" array which
- associates Frames with particular nodes. */
- for ( ifr = 1; ifr <= this->nframe; ifr++ ) {
- if ( ( needed = ( this->node[ ifr - 1 ] == suspect ) ) ) break;
- }
-
-/* If no references were found above, look for references in the
- "link" array that inter-connects all the nodes. */
- if ( !needed ) {
- for ( inode = 1; inode < this->nnode; inode ++ ) {
- if ( this->link[ inode - 1 ] == suspect ) {
-
-/* Node zero must be retained if it has more than two links
- referencing it, while other nodes only require more than one. */
- if ( ( needed = ( link_ref >= ( suspect ? 1 : 2 ) ) ) ) break;
-
-/* Remember (up to) the first two nodes which reference the current one. */
- last_link[ link_ref++ ] = inode;
- }
- }
- }
-
-/* If there were insufficient references to retain this node, we must
- now decide why it should be removed. */
- if ( !needed ) {
-
-/* If there is no Frame associated with a node and there are less than
- two links to it (for node zero), or less then one link (for other
- nodes), then the there is no route to anything else via this node.
- It is a dead-end. */
- if ( link_ref < ( suspect ? 1 : 2 ) ) {
-
-/* To tidy up, we remove the affected node or, for node zero, the
- remaining one that references it. Annul the Mapping associated with
- the node being removed. */
- remove = suspect ? suspect : last_link[ 0 ];
- this->map[ remove - 1 ] = astAnnul( this->map[ remove - 1 ] );
-
-/* If an unnecessary node is not a dead-end, then it is a redundant
- node which simply joins two Mappings. */
- } else {
-
-/* To tidy up, we remove the affected node or, for node zero, the
- first one that references it. */
- remove = suspect ? suspect : last_link[ 0 ];
-
-/* We then produce a compound Mapping which spans the gap by
- concatenating the Mappings associated with the node being removed
- and the remaining one which references it. For node zero, the first
- of these Mappings must be inverted because there are no out-going
- Mappings from node zero. */
- next = suspect ? last_link[ 0 ] : last_link[ 1 ];
- tmpmap = CombineMaps( this->map[ remove - 1 ],
- this->invert[ remove - 1 ] != !suspect,
- this->map[ next - 1 ],
- this->invert[ next - 1 ], 1, status );
-
-/* Simplify this compound Mapping. */
- newmap = astSimplify( tmpmap );
- tmpmap = astAnnul( tmpmap );
-
-/* Annul the individual Mapping pointers. */
- this->map[ remove - 1 ] = astAnnul( this->map[ remove - 1 ] );
- this->map[ next - 1 ] = astAnnul( this->map[ next - 1 ] );
-
-/* Install the new compound Mapping and its Invert flag. */
- this->map[ next - 1 ] = newmap;
- this->invert[ next - 1 ] = astGetInvert( newmap );
-
-/* Transfer the "link" value from the removed node to the one which
- takes its place. */
- this->link[ next - 1 ] = this->link[ remove - 1 ];
- }
-
-/* Loop to move all subsequent node data down in the "map", "invert"
- and "link" arrays to close the gap where a node has been
- removed. */
- for ( inode = remove; inode < this->nnode - 1; inode ++ ) {
- this->map [ inode - 1 ] = this->map[ inode ];
- this->link [ inode - 1 ] = this->link[ inode ];
- this->invert[ inode - 1 ] = this->invert[ inode ];
- }
- this->map[ this->nnode - 2 ] = NULL;
- this->link[ this->nnode - 2 ] = -1;
- this->invert[ this->nnode - 2 ] = -1;
-
-/* Decrement the node count. */
- this->nnode--;
-
-/* Loop to adjust each entry in the "node" array for the change in
- node numbering, re-directing references to the removed node towards
- the new node zero. */
- for ( ifr = 1; ifr <= this->nframe; ifr++ ) {
- if ( this->node[ ifr - 1 ] > remove ) {
- this->node[ ifr - 1 ]--;
- } else if ( this->node[ ifr - 1 ] == remove ) {
- this->node[ ifr - 1 ] = 0;
- }
- }
-
-/* Similarly adjust each entry in the "link" array. */
- for ( inode = 1; inode < this->nnode; inode++ ) {
- if ( this->link[ inode - 1 ] > remove ) {
- this->link[ inode - 1 ]--;
- } else if ( this->link[ inode - 1 ] == remove ) {
- this->link[ inode - 1 ] = 0;
- }
- }
-
-/* Once a node has been removed, other nodes (perhaps already tested)
- may no longer be needed, so quit the testing loop and start testing
- again with node zero. The process terminates when no more
- unnecessary nodes can be found. */
- break;
- }
- }
- }
-}
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the astTransform method
-* inherited from the Frame class).
-
-* Description:
-* This function takes a FrameSet and a set of points encapsulated
-* in a PointSet, and applies either the forward or inverse
-* coordinate transformation (if defined by the FrameSet) to the
-* points. The forward transformation converts between the
-* FrameSet's base Frame and its current Frame, while the inverse
-* transformation converts in the opposite direction.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - An error will result if the FrameSet supplied does not define
-* the requested coordinate transformation (either forward or
-* inverse).
-* - The number of coordinate values per point in the input
-* PointSet must match the number of input coordinates for the
-* FrameSet being applied (or number of output coordinates if the
-* inverse transformation is requested). This will be equal to the
-* number of axes in the FrameSet's base Frame (or the current
-* Frame for the inverse transformation).
-* - If an output PointSet is supplied, it must have space for
-* sufficient number of points and coordinate values per point to
-* accommodate the result (e.g. the number of FrameSet output
-* coordinates, or number of input coordinates if the inverse
-* transformation is requested). Any excess space will be ignored.
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- AstMapping *map; /* Pointer to the base->current Mapping */
- AstPointSet *result; /* Pointer value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_mapping;
-
-/* Obtain the Mapping between the base and current Frames in the
- FrameSet (note this takes account of whether the FrameSet has been
- inverted). */
- map = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Apply the Mapping to the input PointSet. */
- result = astTransform( map, in, forward, out );
-
-/* Annul the Mapping pointer. */
- map = astAnnul( map );
-
-/* If an error has occurred and a new PointSet may have been created, then
- clean up by annulling it. In any case, ensure that a NULL result is
- returned.*/
- if ( !astOK ) {
- if ( !out ) result = astAnnul( result );
- result = NULL;
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-static int Unformat( AstFrame *this_frame, int axis, const char *string,
- double *value, int *status ) {
-/*
-* Name:
-* Unformat
-
-* Purpose:
-* Read a formatted coordinate value for a FrameSet axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* int Unformat( AstFrame *this, int axis, const char *string,
-* double *value, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the public astUnformat
-* method inherited from the Frame class).
-
-* Description:
-* This function reads a formatted coordinate value for a FrameSet
-* axis (supplied as a string) and returns the equivalent numerical
-* value as a double. It also returns the number of characters read
-* from the string.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* axis
-* The number of the FrameSet axis for which the coordinate
-* value is to be read (axis numbering starts at zero for the
-* first axis).
-* string
-* Pointer to a constant null-terminated string containing the
-* formatted coordinate value.
-* value
-* Pointer to a double in which the coordinate value read will be
-* returned.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The number of characters read from the string to obtain the
-* coordinate value.
-
-* Notes:
-* - Any white space at the beginning of the string will be
-* skipped, as also will any trailing white space following the
-* coordinate value read. The function's return value will reflect
-* this.
-* - A function value of zero (and no coordinate value) will be
-* returned, without error, if the string supplied does not contain
-* a suitably formatted value.
-* - The string "<bad>" is recognised as a special case and will
-* generate the value AST__BAD, without error. The test for this
-* string is case-insensitive and permits embedded white space.
-* - A function result of zero will be returned and no coordinate
-* value will be returned via the "value" pointer if this function
-* is invoked with the global error status set, or if it should
-* fail for any reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- double coord; /* Coordinate value read */
- int nc; /* Number of characters read */
-
-/* Initialise. */
- nc = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return nc;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis, "astUnformat" );
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke the
- astUnformat method for this Frame. Annul the Frame pointer
- afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- nc = astUnformat( fr, axis, string, &coord );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the number of characters read. */
- if ( !astOK ) {
- nc = 0;
-
-/* Otherwise, if characters were read, return the coordinate value. */
- } else if ( nc ) {
- *value = coord;
- }
-
-/* Return the number of characters read. */
- return nc;
-}
-
-static int ValidateAxis( AstFrame *this_frame, int axis, const char *method, int *status ) {
-/*
-* Name:
-* ValidateAxis
-
-* Purpose:
-* Validate and permute a FrameSet's axis index.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* int ValidateAxis( AstFrame *this, int axis, const char *method, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected
-* astValidateAxis method inherited from the Frame class).
-
-* Description:
-* This function checks the validity of an index (zero-based) which
-* is to be used to address one of the coordinate axes of the
-* current Frame in a FrameSet. If the index is valid, it is
-* permuted using the axis permutation array associated with the
-* FrameSet's current Frame and the (zero-based) permuted axis
-* index is returned. This gives the index the axis had when the
-* Frame was first created. If the axis index supplied is not
-* valid, an error is reported and the global error status is set.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* axis
-* The axis index (zero-based) to be checked. To be valid, it
-* must lie between zero and (naxes-1) inclusive, where "naxes"
-* is the number of coordinate axes associated with the
-* FrameSet's current Frame.
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function
-* to validate an axis index. This method name is used solely
-* for constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The permuted axis index.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- int naxes; /* Number of FrameSet axes */
- int result; /* Permuted axis index */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Determine the number of FrameSet axes. */
- naxes = astGetNaxes( this );
- if ( astOK ) {
-
-/* If the FrameSet has no axes, report an error (convert to 1-based
- axis numbering for the benefit of the public interface). */
- if ( naxes == 0 ) {
- astError( AST__AXIIN, "%s(%s): Invalid attempt to use an axis index "
- "(%d) for a %s which has no axes.", status, method,
- astGetClass( this ), axis + 1, astGetClass( this ) );
-
-/* Otherwise, check the axis index for validity and report an error if
- it is not valid (again, convert to 1-based axis numbering). */
- } else if ( ( axis < 0 ) || ( axis >= naxes ) ) {
- astError( AST__AXIIN, "%s(%s): Axis index (%d) invalid - it should "
- "be in the range 1 to %d.", status, method, astGetClass( this ),
- axis + 1, naxes );
-
-/* If the axis index was valid, obtain a pointer to the FrameSet's
- current Frame and invoke this Frame's astValidateAxis method to
- obtain the permuted axis index. Annul the Frame pointer
- afterwards. */
- } else {
- fr = astGetFrame( this, AST__CURRENT );
- result = astValidateAxis( fr, axis, "astValidateAxis" );
- fr = astAnnul( fr );
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static void ValidateAxisSelection( AstFrame *this_frame, int naxes,
- const int *axes, const char *method, int *status ) {
-/*
-* Name:
-* ValidateAxisSelection
-
-* Purpose:
-* Check that a set of axes selected from a Frame is valid.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* void ValidateAxisSelection( AstFrame *this, int naxes,
-* const int *axes, const char *method, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astValidateAxisSelection
-* method inherited from the Frame class).
-
-* Description:
-* This function checks the validity of an array of (zero-based)
-* axis indices that specify a set of axes to be selected from a
-* Frame. To be valid, no axis should be selected more than
-* once. In assessing this, any axis indices that do not refer to
-* valid Frame axes (e.g. are set to -1) are ignored.
-*
-* If the axis selection is valid, this function returns without further
-* action. Otherwise, an error is reported and the global error status is
-* set.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* naxes
-* The number of axes to be selected (may be zero).
-* axes
-* Pointer to an array of int with naxes elements that contains the
-* (zero based) axis indices to be checked.
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function
-* to validate an axis selection. This method name is used
-* solely for constructing error messages.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
- Frame's astValidateAxisSelection method. Annul the Frame pointer
- afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- astValidateAxisSelection( fr, naxes, axes, method );
- fr = astAnnul( fr );
-
-}
-
-static int ValidateFrameIndex( AstFrameSet *this, int iframe,
- const char *method, int *status ) {
-/*
-*+
-* Name:
-* astValidateFrameIndex
-
-* Purpose:
-* Validate a FrameSet Frame index number.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frameset.h"
-* int astValidateFrameIndex( AstFrameSet *this, int iframe,
-* const char *method )
-
-* Class Membership:
-* FrameSet method.
-
-* Description:
-* This function checks a (one-based) FrameSet Frame index for
-* validity. If it is not valid, an error is reported. Otherwise,
-* the function returns the Frame index value, having translated
-* the special values AST__CURRENT and AST__BASE into valid Frame
-* indices if necessary.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* iframe
-* The Frame index. To be valid this should lie in the range 1
-* to the number of Frames in the FrameSet. In addition, the
-* values AST__CURRENT and AST__BASE may be given to indicate
-* the "current" and "base" Frames. These values will be
-* translated into the acceptable range.
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function
-* to validate a Frame index. This method name is used solely
-* for constructing error messages.
-
-* Returned Value:
-* The validated (one-based) Frame index.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason
-* (e.g. if the Frame index is invalid).
-*-
-*/
-
-/* Local Variables: */
- int nframe; /* Number of Frames */
- int result; /* Returned index value */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Check if the base or current Frame was specified and retrieve the
- required Frame index from the FrameSet. */
- if ( iframe == AST__BASE ) {
- result = astGetBase( this );
- } else if ( iframe == AST__CURRENT ) {
- result = astGetCurrent( this );
-
-/* Otherwise, determine how many Frames there are in the FrameSet. */
- } else {
- nframe = astGetNframe( this );
- if ( astOK ) {
-
-/* Check that the supplied index is within range and report an error
- if it is not. */
- if ( ( iframe < 1 ) || ( iframe > nframe ) ) {
- astError( AST__FRMIN, "%s(%s): Invalid Frame index (%d) given.", status,
- method, astGetClass( this ), iframe );
- astError( AST__FRMIN, "This value should be in the range 1 to "
- "%d (or AST__CURRENT or AST__BASE).", status, nframe );
-
-/* If OK, return the validated index value. */
- } else {
- result = iframe;
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static int ValidateSystem( AstFrame *this_frame, AstSystemType system, const char *method, int *status ) {
-/*
-* Name:
-* ValidateSystem
-
-* Purpose:
-* Validate a value for a Frame's System attribute.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* int ValidateSystem( AstFrame *this, AstSystemType system,
-* const char *method, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astValidateSystem
-* method inherited from the Frame class).
-
-* Description:
-* This function checks the validity of the supplied system value.
-* If the value is valid, it is returned unchanged. Otherwise, an
-* error is reported and a value of AST__BADSYSTEM is returned.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* system
-* The system value to be checked.
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function
-* to validate an axis index. This method name is used solely
-* for constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The validated system value.
-
-* Notes:
-* - A value of AST_BADSYSTEM will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstSystemType result; /* Validated system value */
- AstFrame *fr; /* Pointer to FrameSet's current Frame */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke the
- astValidateSystem method for this Frame. Annul the Frame pointer
- afterwards. */
- fr = astGetFrame( this, AST__CURRENT );
- result = astValidateSystem( this, system, method );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = AST__BADSYSTEM;
-
-/* Return the result. */
- return result;
-}
-
-static void VSet( AstObject *this_object, const char *settings,
- char **text, va_list args, int *status ) {
-/*
-* Name:
-* VSet
-
-* Purpose:
-* Set values for a FrameSet's attributes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* void VSet( AstObject *this, const char *settings, char **text,
-* va_list args, int *status )
-
-* Class Membership:
-* FrameSet member function (over-rides the protected astVSet
-* method inherited from the Object class).
-
-* Description:
-* This function assigns a set of attribute values for a FrameSet,
-* the attributes and their values being specified by means of a
-* string containing a comma-separated list of the form:
-*
-* "attribute1 = value1, attribute2 = value2, ... "
-*
-* Here, "attribute" specifies an attribute name and the value to
-* the right of each "=" sign should be a suitable textual
-* representation of the value to be assigned to that
-* attribute. This will be interpreted according to the attribute's
-* data type.
-*
-* The string supplied may also contain "printf"-style format
-* specifiers identified by a "%" sign in the usual way. If
-* present, these will be substituted by values supplied as
-* optional arguments (as a va_list variable argument list), using
-* the normal "printf" rules, before the string is used.
-
-* Parameters:
-* this
-* Pointer to the FrameSet.
-* settings
-* Pointer to a null-terminated string containing a
-* comma-separated list of attribute settings.
-* text
-* Pointer to a location at which to return a pointer to dynamic
-* memory holding a copy of the expanded setting string. This memory
-* should be freed using astFree when no longer needed. If a NULL
-* pointer is supplied, no string is created.
-* args
-* The variable argument list which contains values to be
-* substituted for any "printf"-style format specifiers that
-* appear in the "settings" string.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function preserves the integrity of the FrameSet (if
-* possible) by appropriately remapping its current Frame to take
-* account of its changed attribute values.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstFrame *save_frame; /* Saved pointer to integrity Frame */
- AstFrameSet *this; /* Pointer to FrameSet structure */
- char *fulltext; /* Pointer to expanded text string */
- const char *save_method; /* Saved pointer to method name */
- int len; /* Length of settings string */
- int ok; /* Status OK? */
- int save_lost; /* Saved integrity modified flag */
-
-/* Initialise */
- if( text ) *text = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_object);
-
-/* Obtain the length of the "settings" string and test it is not
- zero. If it is, there is nothing more to do. */
- len = (int) strlen( settings );
- if ( len != 0 ) {
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_object;
-
-/* This function may be invoked recursively (because astConvert,
- below, constructs a FrameSet and may require that its attributes be
- set). To allow this, we first save any existing FrameSet integrity
- information in local variables. */
- save_frame = integrity_frame;
- save_lost = integrity_lost;
- save_method = integrity_method;
-
-/* Set the name of the method being used (for use in error
- messages). */
- integrity_method = "astSet";
-
-/* Record the initial integrity state of the FrameSet. */
- RecordIntegrity( this, status );
-
-/* Invoke the parent astVSet method to set the FrameSet's attribute
- values and note if this succeeds. */
- (*parent_vset)( this_object, settings, &fulltext, args, status );
- ok = astOK;
-
-/* Restore the FrameSet's integrity. */
- RestoreIntegrity( this, status );
-
-/* If integrity could not be restored, then add contextual error
- information. */
- if ( !astOK && ok ) {
-
-/* Display the message. */
- astError( astStatus, "Unable to accommodate the attribute setting "
- "\"%s\".", status, fulltext );
- }
-
-/* Restore any saved FrameSet integrity information. */
- integrity_frame = save_frame;
- integrity_lost = save_lost;
- integrity_method = save_method;
-
-/* If the full text of the setting string is not needed, free it.
- Otherwise return it. */
- if( text ) {
- *text = fulltext;
- } else {
- fulltext = astFree( fulltext );
- }
- }
-}
-
-/* FrameSet Attributes. */
-/* -------------------- */
-/*
-*att++
-* Name:
-* Base
-
-* Purpose:
-* FrameSet base Frame index.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer.
-
-* Description:
-* This attribute gives the index of the Frame which is to be
-* regarded as the "base" Frame within a FrameSet. The default is
-* the first Frame added to the FrameSet when it is created (this
-* Frame always has an index of 1).
-
-* Applicability:
-* FrameSet
-* All FrameSets have this attribute.
-
-* Notes:
-* - Inverting a FrameSet (inverting the boolean sense of its
-c Invert attribute, with the astInvert function for example) will
-f Invert attribute, with the AST_INVERT routine for example) will
-* interchange the values of its Base and Current attributes.
-*att--
-*/
-
-/*
-*att++
-* Name:
-* Current
-
-* Purpose:
-* FrameSet current Frame index.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer.
-
-* Description:
-* This attribute gives the index of the Frame which is to be
-* regarded as the "current" Frame within a FrameSet. The default
-* is the most recent Frame added to the FrameSet (this Frame
-* always has an index equal to the FrameSet's Nframe attribute).
-
-* Applicability:
-* FrameSet
-* All FrameSets have this attribute.
-
-* Notes:
-* - Inverting a FrameSet (inverting the boolean sense of its
-c Invert attribute, with the astInvert function for example) will
-f Invert attribute, with the AST_INVERT routine for example) will
-* interchange the values of its Base and Current attributes.
-*att--
-*/
-
-/*
-*att++
-* Name:
-* Nframe
-
-* Purpose:
-* Number of Frames in a FrameSet.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer, read-only.
-
-* Description:
-* This attrbute gives the number of Frames in a FrameSet. This
-* value will change as Frames are added or removed, but will
-* always be at least one.
-
-* Applicability:
-* FrameSet
-* All FrameSets have this attribute.
-*att--
-*/
-
-/* Access to attributes of the current Frame. */
-/* ------------------------------------------ */
-/* Use the macros defined at the start of this file to implement
- private member functions that give access to the attributes of the
- current Frame of a FrameSet and its axes. These functions over-ride
- the attribute access methods inherited from the Frame class. */
-
-/* Clear, Get, Set and Test axis-independent Frame attributes. */
-MAKE_CLEAR(Digits)
-MAKE_CLEAR(Domain)
-MAKE_CLEAR(MatchEnd)
-MAKE_CLEAR(MaxAxes)
-MAKE_CLEAR(MinAxes)
-MAKE_CLEAR(Permute)
-MAKE_CLEAR(PreserveAxes)
-MAKE_CLEAR(Title)
-
-MAKE_GET(Digits,int)
-MAKE_GET(Domain,const char *)
-MAKE_GET(MatchEnd,int)
-MAKE_GET(MaxAxes,int)
-MAKE_GET(MinAxes,int)
-MAKE_GET(Permute,int)
-MAKE_GET(PreserveAxes,int)
-MAKE_GET(Title,const char *)
-MAKE_SET(Digits,int)
-MAKE_SET(Domain,const char *)
-MAKE_SET(MatchEnd,int)
-MAKE_SET(MaxAxes,int)
-MAKE_SET(MinAxes,int)
-MAKE_SET(Permute,int)
-MAKE_SET(PreserveAxes,int)
-MAKE_SET(Title,const char *)
-MAKE_TEST(Digits)
-MAKE_TEST(Domain)
-MAKE_TEST(MatchEnd)
-MAKE_TEST(MaxAxes)
-MAKE_TEST(MinAxes)
-MAKE_TEST(Permute)
-MAKE_TEST(PreserveAxes)
-MAKE_TEST(Title)
-
-MAKE_GET(ActiveUnit,int)
-MAKE_SET(ActiveUnit,int)
-MAKE_TEST(ActiveUnit)
-
-MAKE_GET(System,AstSystemType)
-MAKE_SET(System,AstSystemType)
-MAKE_TEST(System)
-MAKE_CLEAR(System)
-
-MAKE_GET(AlignSystem,AstSystemType)
-MAKE_SET(AlignSystem,AstSystemType)
-MAKE_TEST(AlignSystem)
-MAKE_CLEAR(AlignSystem)
-
-MAKE_GET(Epoch,double)
-MAKE_SET(Epoch,double)
-MAKE_TEST(Epoch)
-MAKE_CLEAR(Epoch)
-
-MAKE_GET(ObsLon,double)
-MAKE_SET(ObsLon,double)
-MAKE_TEST(ObsLon)
-MAKE_CLEAR(ObsLon)
-
-MAKE_GET(ObsLat,double)
-MAKE_SET(ObsLat,double)
-MAKE_TEST(ObsLat)
-MAKE_CLEAR(ObsLat)
-
-MAKE_GET(ObsAlt,double)
-MAKE_SET(ObsAlt,double)
-MAKE_TEST(ObsAlt)
-MAKE_CLEAR(ObsAlt)
-
-/* Clear, Get, Set and Test axis-dependent Frame attributes. */
-MAKE_CLEAR_AXIS(Direction)
-MAKE_CLEAR_AXIS(Format)
-MAKE_CLEAR_AXIS(Label)
-MAKE_CLEAR_AXIS(Symbol)
-MAKE_CLEAR_AXIS(Unit)
-MAKE_GET_AXIS(Direction,int)
-MAKE_GET_AXIS(Format,const char *)
-MAKE_GET_AXIS(Label,const char *)
-MAKE_GET_AXIS(Symbol,const char *)
-MAKE_GET_AXIS(Unit,const char *)
-MAKE_SET_AXIS(Direction,int)
-MAKE_SET_AXIS(Format,const char *)
-MAKE_SET_AXIS(Label,const char *)
-MAKE_SET_AXIS(Symbol,const char *)
-MAKE_SET_AXIS(Unit,const char *)
-MAKE_TEST_AXIS(Direction)
-MAKE_TEST_AXIS(Format)
-MAKE_TEST_AXIS(Label)
-MAKE_TEST_AXIS(Symbol)
-MAKE_TEST_AXIS(Unit)
-
-MAKE_GET_AXIS(Bottom,double)
-MAKE_SET_AXIS(Bottom,double)
-MAKE_TEST_AXIS(Bottom)
-MAKE_CLEAR_AXIS(Bottom)
-
-MAKE_GET_AXIS(Top,double)
-MAKE_SET_AXIS(Top,double)
-MAKE_TEST_AXIS(Top)
-MAKE_CLEAR_AXIS(Top)
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for FrameSet objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for FrameSet objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstFrameSet *in; /* Pointer to input FrameSet */
- AstFrameSet *out; /* Pointer to output FrameSet */
- int iframe; /* Loop counter for Frames */
- int inode; /* Loop counter for nodes */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output FrameSets. */
- in = (AstFrameSet *) objin;
- out = (AstFrameSet *) objout;
-
-/* For safety, first clear any references to the input memory from
- the output FrameSet. */
- out->frame = NULL;
- out->node = NULL;
- out->map = NULL;
- out->link = NULL;
- out->invert = NULL;
-
-/* Allocate memory in the output FrameSet to store the Frame and node
- information and copy scalar information across. */
- out->frame = astMalloc( sizeof( AstFrame * ) * (size_t) in->nframe );
- out->node = astStore( NULL, in->node, sizeof( int ) *
- (size_t) in->nframe );
- out->map = astMalloc( sizeof( AstMapping * ) * (size_t) ( in->nnode - 1 ) );
- out->link = astStore( NULL, in->link, sizeof( int ) *
- (size_t) ( in->nnode - 1 ) );
- out->invert = astStore( NULL, in->invert, sizeof( int ) *
- (size_t) ( in->nnode - 1 ) );
-
-/* If OK, make copies of each input Frame and Mapping and store the
- resulting pointers in the output FrameSet. */
- if ( astOK ) {
- for ( iframe = 0; iframe < in->nframe; iframe++ ) {
- out->frame[ iframe ] = astCopy( in->frame[ iframe ] );
- }
- for ( inode = 0; inode < in->nnode - 1; inode++ ) {
- out->map[ inode ] = astCopy( in->map[ inode ] );
- }
-
-/* If an error occurred while copying any of these objects, clean up
- by looping through the arrays of pointers again and annulling them
- all. */
- if ( !astOK ) {
- for ( iframe = 0; iframe < in->nframe; iframe++ ) {
- out->frame[ iframe ] = astAnnul( out->frame[ iframe ] );
- }
- for ( inode = 0; inode < in->nnode - 1; inode++ ) {
- out->map[ inode ] = astAnnul( out->map[ inode ] );
- }
- }
- }
-
-/* If an error occurred, clean up by freeing all memory allocated above. */
- if ( !astOK ) {
- out->frame = astFree( out->frame );
- out->node = astFree( out->node );
- out->map = astFree( out->map );
- out->link = astFree( out->link );
- out->invert = astFree( out->invert );
- }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for FrameSet objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for FrameSet objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstFrameSet *this; /* Pointer to FrameSet */
- int iframe; /* Loop counter for Frames */
- int inode; /* Loop counter for nodes */
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) obj;
-
-/* Annul all Frame pointers and clear the node numbers associated with
- them. */
- for ( iframe = 0; iframe < this->nframe; iframe++ ) {
- this->frame[ iframe ] = astAnnul( this->frame[ iframe ] );
- this->node[ iframe ] = 0;
- }
-
-/* Annul all Mapping pointers and clear the links between pairs of
- nodes and the associated Mapping Invert information. */
- for ( inode = 0; inode < this->nnode - 1; inode++ ) {
- this->map[ inode ] = astAnnul( this->map[ inode ] );
- this->link[ inode ] = 0;
- this->invert[ inode ] = 0;
- }
-
-/* Free all allocated memory. */
- this->frame = astFree( this->frame );
- this->node = astFree( this->node );
- this->map = astFree( this->map );
- this->link = astFree( this->link );
- this->invert = astFree( this->invert );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for FrameSet objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the FrameSet class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the FrameSet whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define COMMENT_LEN 150 /* Maximum length of a comment string */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstFrameSet *this; /* Pointer to the FrameSet structure */
- char comment[ COMMENT_LEN + 1 ]; /* Buffer for comment string */
- char key[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- int ifr; /* Loop counter for Frames */
- int inode; /* Loop counter for nodes */
- int invert; /* Invert attribute value */
- int ival; /* Integer value */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstFrameSet *) this_object;
-
-/* Determine if the FrameSet is inverted. This is required so that the
- effects of inversion can be un-done to obtain information about the
- "true" Base and Current Frames. (The values written are "internal"
- values that are not affected by the Invert setting.) */
- invert = astGetInvert( this );
-
-/* Write out values representing the instance variables for the
- FrameSet class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* Nframe. */
-/* ------- */
- set = ( this->nframe != 0 );
- ival = set ? this->nframe : astGetNframe( this );
- astWriteInt( channel, "Nframe", set, 1, ival,
- "Number of Frames in FrameSet" );
-
-/* Base. */
-/* ----- */
- set = ( this->base != -INT_MAX );
- ival = set ? this->base : ( !invert ? astGetBase( this ) :
- astGetCurrent( this ) );
- astWriteInt( channel, "Base", set, 1, ival, "Index of base Frame" );
-
-/* Current. */
-/* -------- */
- set = ( this->current != -INT_MAX );
- ival = set ? this->current : ( !invert ? astGetCurrent( this ) :
- astGetBase( this ) );
- astWriteInt( channel, "Currnt", set, 1, ival, "Index of current Frame" );
-
-/* Number of nodes. */
-/* ---------------- */
- ival = this->nnode;
- set = ( ival != this->nframe );
- astWriteInt( channel, "Nnode", set, 0, ival,
- "Number of nodes in FrameSet" );
-
-/* Node index for each Frame. */
-/* -------------------------- */
-/* There is a node value for each Frame in the FrameSet. */
- for ( ifr = 1; ifr <= this->nframe; ifr++ ) {
-
-/* Convert node numbering to start at 1 for the external
- representation. Regard a node number as "set" if it differs from
- the Frame number. */
- ival = this->node[ ifr - 1 ] + 1;
- set = ( ival != ifr );
-
-/* Create a suitable keyword and comment. */
- (void) sprintf( key, "Nod%d", ifr );
- (void) sprintf( comment,
- "Frame %d is associated with node %d", ifr, ival );
-
-/* Write out the value. */
- astWriteInt( channel, key, set, 0, ival, comment );
- }
-
-/* Links between nodes. */
-/* -------------------- */
-/* Each node in the FrameSet (except the first) has a link to another
- node from which it is derived. */
- for ( inode = 1; inode < this->nnode; inode++ ) {
-
-/* Convert node numbering to start at 1 (as above). */
- ival = this->link[ inode - 1 ] + 1;
- (void) sprintf( key, "Lnk%d", inode + 1 );
- (void) sprintf( comment,
- "Node %d is derived from node %d", inode + 1, ival );
- astWriteInt( channel, key, 1, 0, ival, comment );
-
-/* Inversion flags. */
-/* ---------------- */
-/* Each node with a link has a value which the Invert attribute of the
- associated Mapping should have when the transformation from the
- parent node to the node in question is required. */
- ival = this->invert[ inode - 1 ];
-
-/* Regard the value as set only if the Mapping's inverse
- transformation is required. */
- set = ( ival != 0 );
- (void) sprintf( key, "Inv%d", inode + 1 );
- astWriteInt( channel, key, set, 0, ival,
- ival ? "The inverse mapping is used" :
- "The forward mapping is used" );
- }
-
-/* Frame objects. */
-/* -------------- */
-/* Output an Object description for each Frame in the FrameSet. */
- for ( ifr = 1; ifr <= this->nframe; ifr++ ) {
- (void) sprintf( key, "Frm%d", ifr );
- (void) sprintf( comment, "Frame number %d", ifr );
- astWriteObject( channel, key, 1, 1, this->frame[ ifr - 1 ],
- comment );
- }
-
-/* Mapping objects. */
-/* ---------------- */
-/* Output an Object description for each Mapping in the FrameSet. */
- for ( inode = 1; inode < this->nnode; inode++ ) {
- (void) sprintf( key, "Map%d", inode + 1 );
- (void) sprintf( comment, "Mapping between nodes %d and %d",
- this->link[ inode - 1 ] + 1, inode + 1 );
- astWriteObject( channel, key, 1, 1, this->map[ inode - 1 ], comment );
- }
-
-/* Undefine macros local to this function. */
-#undef COMMENT_LEN
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAFrameSet and astCheckFrameSet functions using
- the macros defined for this purpose in the "object.h" header
- file. */
-astMAKE_ISA(FrameSet,Frame)
-astMAKE_CHECK(FrameSet)
-
-AstFrameSet *astFrameSet_( void *frame_void, const char *options, int *status, ...) {
-/*
-*+
-* Name:
-* astFrameSet
-
-* Purpose:
-* Create a FrameSet.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "frameset.h"
-* AstFrameSet *astFrameSet( AstFrame *frame, const char *options, int *status, ... )
-
-* Class Membership:
-* FrameSet constructor.
-
-* Description:
-* This function creates a new FrameSet and optionally initialises
-* its attributes.
-
-* Parameters:
-* frame
-* Pointer to the initial Frame. If this is not a FrameSet, the
-* new FrameSet will be initialised to contain this Frame alone.
-*
-* If it is a FrameSet, the new FrameSet will be initialised to
-* contain the same Frames (and Mappings) and to have the same
-* attribute values as the one supplied. This is similar to
-* making a copy, except that the Frames (and Mappings)
-* contained in the original FrameSet are not themselves copied,
-* but are shared by both FrameSets.
-* options
-* Pointer to a null terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new FrameSet. The syntax used is the same as
-* for the astSet method and may include "printf" format
-* specifiers identified by "%" symbols in the normal way.
-* status
-* Pointer to the inherited status variable.
-* ...
-* If the "options" string contains "%" format specifiers, then
-* an optional list of arguments may follow it in order to
-* supply values to be substituted for these specifiers. The
-* rules for supplying these are identical to those for the
-* astSet method (and for the C "printf" function).
-
-* Returned Value:
-* A pointer to the new FrameSet.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-
-* Implementation Notes:
-* - This function implements the basic FrameSet constructor which
-* is available via the protected interface to the FrameSet class.
-* A public interface is provided by the astFrameSetId_ function.
-* - Because this function has a variable argument list, it is
-* invoked by a macro that evaluates to a function pointer (not a
-* function invocation) and no checking or casting of arguments is
-* performed before the function is invoked. Because of this, the
-* "frame" parameter is of type (void *) and is converted and
-* validated within the function itself.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *frame; /* Pointer to Frame structure */
- AstFrameSet *new; /* Pointer to new FrameSet */
- va_list args; /* Variable argument list */
-
-/* Initialise. */
- new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return new;
-
-/* Obtain and validate a pointer to the Frame structure provided. */
- frame = astCheckFrame( frame_void );
- if ( astOK ) {
-
-/* Initialise the FrameSet, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitFrameSet( NULL, sizeof( AstFrameSet ), !class_init,
- &class_vtab, "FrameSet", frame );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- FrameSet's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return a pointer to the new FrameSet. */
- return new;
-}
-
-AstFrameSet *astInitFrameSet_( void *mem, size_t size, int init,
- AstFrameSetVtab *vtab, const char *name,
- AstFrame *frame, int *status ) {
-/*
-*+
-* Name:
-* astInitFrameSet
-
-* Purpose:
-* Initialise a FrameSet.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "frameset.h"
-* AstFrameSet *astInitFrameSet( void *mem, size_t size, int init,
-* AstFrameSetVtab *vtab, const char *name,
-* AstFrame *frame )
-
-* Class Membership:
-* FrameSet initialiser.
-
-* Description:
-* This function is provided for use by class implementations to
-* initialise a new FrameSet object. It allocates memory (if
-* necessary) to accommodate the FrameSet plus any additional data
-* associated with the derived class. It then initialises a
-* FrameSet structure at the start of this memory. If the "init"
-* flag is set, it also initialises the contents of a virtual
-* function table for a FrameSet at the start of the memory passed
-* via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the FrameSet is to be
-* created. This must be of sufficient size to accommodate the
-* FrameSet data (sizeof(FrameSet)) plus any data used by the
-* derived class. If a value of NULL is given, this function
-* will allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the FrameSet (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the FrameSet structure, so a valid value must be
-* supplied even if not required for allocating memory.
-* init
-* A logical flag indicating if the FrameSet's virtual function
-* table is to be initialised. If this value is non-zero, the
-* virtual function table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new FrameSet.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-* frame
-* Pointer to the initial Frame (or FrameSet).
-
-* Returned Value:
-* A pointer to the new FrameSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstFrameSet *new; /* Pointer to new FrameSet */
- AstFrameSet *old; /* Pointer to original FrameSet */
- int iframe; /* Loop counter for Frames */
- int inode; /* Loop counter for nodes */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitFrameSetVtab( vtab, name );
-
-/* Initialise a Frame structure (the parent class) as the first
- component within the FrameSet structure, allocating memory if
- necessary. Give this Frame zero axes, as all axis information for
- the FrameSet will be derived from the Frames it contains. */
- new = (AstFrameSet *) astInitFrame( mem, size, 0,
- (AstFrameVtab *) vtab, name, 0 );
-
- if ( astOK ) {
-
-/* Initialise the FrameSet data. */
-/* ----------------------------- */
-
-/* Normal Frame supplied. */
-/* ---------------------- */
-/* Check that the Frame supplied is not a FrameSet (initialising using
- a FrameSet is a special case which is handled below). If not, we
- initialise the new FrameSet to refer to a single Frame. */
- if ( !astIsAFrameSet( frame ) && astOK ) {
-
-/* Allocate memory for the arrays of Frame information. */
- new->frame = astMalloc( sizeof( AstFrame * ) );
- new->node = astMalloc( sizeof( int ) );
-
-/* The node arrays are not required until at least two Frames are
- present. */
- new->map = NULL;
- new->link = NULL;
- new->invert = NULL;
-
-/* If OK, initialise these arrays, thus adding the Frame to the
- FrameSet. */
- if ( astOK ) {
- new->frame[ 0 ] = astClone( frame );
- new->node[ 0 ] = 0;
- new->nframe = 1;
- new->nnode = 1;
-
-/* Initialise the FrameSet attributes to their undefined states. */
- new->base = -INT_MAX;
- new->current = -INT_MAX;
- }
-
-/* FrameSet supplied. */
-/* ------------------ */
-/* If a FrameSet was supplied, we will initialise the new FrameSet to
- refer to the same Frame and Mapping information (this is similar to
- making a copy, except that we clone all the pointers, instead of
- copying the Objects they refer to). */
- } else if ( astOK ) {
-
-/* Obtain a pointer to the original FrameSet structure. */
- old = (AstFrameSet *) frame;
-
-/* Allocate memory in the new FrameSet to store the Frame and node
- information and copy any scalar information across. */
- new->frame = astMalloc( sizeof( AstFrame * ) * (size_t) old->nframe );
- new->node = astStore( NULL, old->node,
- sizeof( int ) * (size_t) old->nframe );
- new->map = astMalloc( sizeof( AstMapping * ) *
- (size_t) ( old->nnode - 1 ) );
- new->link = astStore( NULL, old->link,
- sizeof( int ) * (size_t) ( old->nnode - 1 ) );
- new->invert = astStore( NULL, old->invert,
- sizeof( int ) * (size_t) ( old->nnode - 1 ) );
-
-/* If OK, clone the pointer to each Frame and Mapping referenced by
- the original FrameSet and store the resulting pointers in the new
- FrameSet. */
- if ( astOK ) {
- for ( iframe = 0; iframe < old->nframe; iframe++ ) {
- new->frame[ iframe ] = astClone( old->frame[ iframe ] );
- }
- for ( inode = 0; inode < old->nnode - 1; inode++ ) {
- new->map[ inode ] = astClone( old->map[ inode ] );
- }
-
-/* If an error occurred while cloning any of these pointers, clean up
- by looping through the arrays of cloned pointers again and
- annulling them all. */
- if ( !astOK ) {
- for ( iframe = 0; iframe < old->nframe; iframe++ ) {
- new->frame[ iframe ] = astAnnul( new->frame[ iframe ] );
- }
- for ( inode = 0; inode < old->nnode - 1; inode++ ) {
- new->map[ inode ] = astAnnul( new->map[ inode ] );
- }
- }
- }
-
-/* If an error occurred, clean up by freeing all memory allocated
- above. */
- if ( !astOK ) {
- new->frame = astFree( new->frame );
- new->node = astFree( new->node );
- new->map = astFree( new->map );
- new->link = astFree( new->link );
- new->invert = astFree( new->invert );
- }
-
-/* Copy the Frame and node counts across. */
- new->nframe = old->nframe;
- new->nnode = old->nnode;
-
-/* Copy the other FrameSet attributes across. */
- new->base = old->base;
- new->current = old->current;
-
-/* Transfer any other inherited attribute values that relate to the
- FrameSet itself (rather than the enclosed Frames). */
- if ( astTestInvert( old ) ) astSetInvert( new, astGetInvert( old ) );
- }
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new object. */
- return new;
-
-/* Undefine macros local to this function. */
-#undef TRANSFER
-}
-
-AstFrameSet *astLoadFrameSet_( void *mem, size_t size,
- AstFrameSetVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadFrameSet
-
-* Purpose:
-* Load a FrameSet.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "frameset.h"
-* AstFrameSet *astLoadFrameSet( void *mem, size_t size,
-* AstFrameSetVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* FrameSet loader.
-
-* Description:
-* This function is provided to load a new FrameSet using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* FrameSet structure in this memory, using data read from the
-* input Channel.
-
-* Parameters:
-* mem
-* A pointer to the memory into which the FrameSet is to be
-* loaded. This must be of sufficient size to accommodate the
-* FrameSet data (sizeof(FrameSet)) plus any data used by
-* derived classes. If a value of NULL is given, this function
-* will allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the FrameSet (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the FrameSet structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstFrameSet) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new FrameSet. If this is NULL, a pointer
-* to the (static) virtual function table for the FrameSet class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "FrameSet" is used instead.
-
-* Returned Value:
-* A pointer to the new FrameSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Constants: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstFrameSet *new; /* Pointer to the new FrameSet */
- char key[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- int ifr; /* Get a pointer to the thread specific global data structure. */
-
-/* Loop counter for Frames */
- int inode; /* Loop counter for nodes */
-
- astGET_GLOBALS(channel);
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this FrameSet. In this case the
- FrameSet belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstFrameSet );
- vtab = &class_vtab;
- name = "FrameSet";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitFrameSetVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built FrameSet. */
- new = astLoadFrame( mem, size, (AstFrameVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "FrameSet" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* Nframe. */
-/* ------- */
- new->nframe = astReadInt( channel, "nframe", 1 );
- if ( new->nframe < 0 ) new->nframe = 1;
-
-/* Number of nodes. */
-/* ---------------- */
- new->nnode = astReadInt( channel, "nnode", new->nframe );
- if ( new->nnode < 1 ) new->nnode = 1;
-
-/* Allocate memory to hold Frame and node information. */
- new->frame = astMalloc( sizeof( AstFrame *) * (size_t) new->nframe );
- new->node = astMalloc( sizeof( int ) * (size_t) new->nframe );
- new->link = astMalloc( sizeof( int ) * (size_t) ( new->nnode - 1 ) );
- new->invert = astMalloc( sizeof( int ) * (size_t) ( new->nnode - 1 ) );
- new->map = astMalloc( sizeof( AstMapping * ) *
- (size_t) ( new->nnode - 1 ) );
-
-/* If an error occurs, ensure that all allocated memory is freed. */
- if ( !astOK ) {
- new->frame = astFree( new->frame );
- new->node = astFree( new->node );
- new->link = astFree( new->link );
- new->invert = astFree( new->invert );
- new->map = astFree( new->map );
-
-/* Otherwise, initialise the arrays which will hold Object pointers. */
- } else {
- for ( ifr = 1; ifr <= new->nframe; ifr++ ) {
- new->frame[ ifr - 1 ] = NULL;
- }
- for ( inode = 1; inode < new->nnode; inode++ ) {
- new->map[ inode - 1 ] = NULL;
- }
-
-/* Read Frame data... */
- for ( ifr = 1; ifr <= new->nframe; ifr++ ) {
-
-/* Frame objects. */
-/* -------------- */
-/* Create the required keyword and then read the Frame. */
- (void) sprintf( key, "frm%d", ifr );
- new->frame[ ifr - 1 ] = astReadObject( channel, key, NULL );
-
-/* Node index for each Frame. */
-/* -------------------------- */
- (void) sprintf( key, "nod%d", ifr );
- new->node[ ifr - 1 ] = astReadInt( channel, key, ifr ) - 1;
- }
-
-/* Read node data... */
- for ( inode = 1; inode < new->nnode; inode++ ) {
-
-/* Links between nodes. */
-/* -------------------- */
- (void) sprintf( key, "lnk%d", inode + 1 );
- new->link[ inode - 1 ] = astReadInt( channel, key, 0 ) - 1;
-
-/* Inversion flags. */
-/* ---------------- */
- (void) sprintf( key, "inv%d", inode + 1 );
- new->invert[ inode - 1 ] = astReadInt( channel, key, 0 );
-
-/* Mapping objects. */
-/* ---------------- */
- (void) sprintf( key, "map%d", inode + 1 );
- new->map[ inode - 1 ] = astReadObject( channel, key, NULL );
- }
-
-/* Read remaining data... */
-
-/* Base. */
-/* ----- */
- new->base = astReadInt( channel, "base", -INT_MAX );
- if ( new->base < 1 ) new->base = -INT_MAX;
-
-/* Current. */
-/* -------- */
- new->current = astReadInt( channel, "currnt", -INT_MAX );
- if ( new->base < 1 ) new->base = -INT_MAX;
- }
-
-/* If an error occurred, clean up by deleting the new FrameSet. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new FrameSet pointer. */
- return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-void astAddFrame_( AstFrameSet *this, int iframe, AstMapping *map,
- AstFrame *frame, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,FrameSet,AddFrame))( this, iframe, map, frame, status );
-}
-void astClearBase_( AstFrameSet *this, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,FrameSet,ClearBase))( this, status );
-}
-void astClearCurrent_( AstFrameSet *this, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,FrameSet,ClearCurrent))( this, status );
-}
-int astGetBase_( AstFrameSet *this, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,FrameSet,GetBase))( this, status );
-}
-int astGetCurrent_( AstFrameSet *this, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,FrameSet,GetCurrent))( this, status );
-}
-AstFrame *astGetFrame_( AstFrameSet *this, int iframe, int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,FrameSet,GetFrame))( this, iframe, status );
-}
-AstMapping *astGetMapping_( AstFrameSet *this, int iframe1, int iframe2, int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,FrameSet,GetMapping))( this, iframe1, iframe2, status );
-}
-int astGetNframe_( AstFrameSet *this, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,FrameSet,GetNframe))( this, status );
-}
-void astRemapFrame_( AstFrameSet *this, int iframe, AstMapping *map, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,FrameSet,RemapFrame))( this, iframe, map, status );
-}
-void astRemoveFrame_( AstFrameSet *this, int iframe, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,FrameSet,RemoveFrame))( this, iframe, status );
-}
-void astSetBase_( AstFrameSet *this, int ibase, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,FrameSet,SetBase))( this, ibase, status );
-}
-void astSetCurrent_( AstFrameSet *this, int icurrent, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,FrameSet,SetCurrent))( this, icurrent, status );
-}
-int astTestBase_( AstFrameSet *this, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,FrameSet,TestBase))( this, status );
-}
-int astTestCurrent_( AstFrameSet *this, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,FrameSet,TestCurrent))( this, status );
-}
-int astValidateFrameIndex_( AstFrameSet *this, int iframe,
- const char *method, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,FrameSet,ValidateFrameIndex))( this, iframe,
- method, status );
-}
-
-/* Special public interface functions. */
-/* =================================== */
-/* These provide the public interface to certain special functions
- whose public interface cannot be handled using macros (such as
- astINVOKE) alone. In general, they are named after the
- corresponding protected version of the function, but with "Id"
- appended to the name. */
-
-/* Public Interface Function Prototypes. */
-/* ------------------------------------- */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstFrameSet *astFrameSetId_( void *, const char *, ... );
-
-/* Special interface function implementations. */
-/* ------------------------------------------- */
-AstFrameSet *astFrameSetId_( void *frame_void, const char *options, ... ) {
-/*
-*++
-* Name:
-c astFrameSet
-f AST_FRAMESET
-
-* Purpose:
-* Create a FrameSet.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "frameset.h"
-c AstFrameSet *astFrameSet( AstFrame *frame, const char *options, ... )
-f RESULT = AST_FRAMESET( FRAME, OPTIONS, STATUS )
-
-* Class Membership:
-* FrameSet constructor.
-
-* Description:
-* This function creates a new FrameSet and optionally initialises
-* its attributes.
-*
-* A FrameSet consists of a set of one or more Frames (which
-* describe coordinate systems), connected together by Mappings
-* (which describe how the coordinate systems are inter-related). A
-* FrameSet makes it possible to obtain a Mapping between any pair
-* of these Frames (i.e. to convert between any of the coordinate
-* systems which it describes). The individual Frames are
-* identified within the FrameSet by an integer index, with Frames
-* being numbered consecutively from one as they are added to the
-* FrameSet.
-*
-* Every FrameSet has a "base" Frame and a "current" Frame (which
-* are allowed to be the same). Any of the Frames may be nominated
-* to hold these positions, and the choice is determined by the
-* values of the FrameSet's Base and Current attributes, which hold
-* the indices of the relevant Frames. By default, the first Frame
-* added to a FrameSet is its base Frame, and the last one added is
-* its current Frame.
-*
-* The base Frame describes the "native" coordinate system of
-* whatever the FrameSet is used to calibrate (e.g. the pixel
-* coordinates of an image) and the current Frame describes the
-* "apparent" coordinate system in which it should be viewed
-* (e.g. displayed, etc.). Any further Frames represent a library
-* of alternative coordinate systems, which may be selected by
-* making them current.
-*
-* When a FrameSet is used in a context that requires a Frame,
-* (e.g. obtaining its Title value, or number of axes), the current
-* Frame is used. A FrameSet may therefore be used in place of its
-* current Frame in most situations.
-*
-* When a FrameSet is used in a context that requires a Mapping,
-* the Mapping used is the one between its base Frame and its
-* current Frame. Thus, a FrameSet may be used to convert "native"
-* coordinates into "apparent" ones, and vice versa. Like any
-c Mapping, a FrameSet may also be inverted (see astInvert), which
-f Mapping, a FrameSet may also be inverted (see AST_INVERT), which
-* has the effect of interchanging its base and current Frames and
-* hence of reversing the Mapping between them.
-*
-* Regions may be added into a FrameSet (since a Region is a type of
-* Frame), either explicitly or as components within CmpFrames. In this
-* case the Mapping between a pair of Frames within a FrameSet will
-* include the effects of the clipping produced by any Regions included
-* in the path between the Frames.
-
-* Parameters:
-c frame
-f FRAME = INTEGER (Given)
-* Pointer to the first Frame to be inserted into the
-* FrameSet. This initially becomes both the base and the
-* current Frame. (Further Frames may be added using the
-c astAddFrame function.)
-f AST_ADDFRAME routine.)
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new FrameSet. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-c If no initialisation is required, a zero-length string may be
-c supplied.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new FrameSet. The syntax used is identical to that for the
-f AST_SET routine. If no initialisation is required, a blank
-f value may be supplied.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astFrameSet()
-f AST_FRAMESET
-* A pointer to the new FrameSet.
-
-* Notes:
-c - If a pointer to an existing FrameSet is given for the "frame"
-c parameter, then the new FrameSet will (as a special case) be
-f - If a pointer to an existing FrameSet is given for the FRAME
-f argument, then the new FrameSet will (as a special case) be
-* initialised to contain the same Frames and Mappings, and to have
-* the same attribute values, as the one supplied. This process is
-c similar to making a copy of a FrameSet (see astCopy), except
-f similar to making a copy of a FrameSet (see AST_COPY), except
-* that the Frames and Mappings contained in the original are not
-* themselves copied, but are shared by both FrameSets.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-
-* Implementation Notes:
-* - This function implements the external (public) interface to
-* the astFrameSet constructor function. It returns an ID value
-* (instead of a true C pointer) to external users, and must be
-* provided because astFrameSet_ has a variable argument list which
-* cannot be encapsulated in a macro (where this conversion would
-* otherwise occur).
-* - Because no checking or casting of arguments is performed
-* before the function is invoked, the "frame" parameter is of type
-* (void *) and is converted from an ID value to a pointer and
-* validated within the function itself.
-* - The variable argument list also prevents this function from
-* invoking astFrameSet_ directly, so it must be a
-* re-implementation of it in all respects, except for the
-* conversions between IDs and pointers on input/output of Objects.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *frame; /* Pointer to Frame structure */
- AstFrameSet *new; /* Pointer to new FrameSet */
- va_list args; /* Variable argument list */
-
- int *status;
-
-/* Initialise. */
- new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return new;
-
-/* Obtain the Frame pointer from the ID supplied and validate the
- pointer to ensure it identifies a valid Frame. */
- frame = astVerifyFrame( astMakePointer( frame_void ) );
- if ( astOK ) {
-
-/* Initialise the FrameSet, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitFrameSet( NULL, sizeof( AstFrameSet ), !class_init,
- &class_vtab, "FrameSet", frame );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- FrameSet's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return an ID value for the new FrameSet. */
- return astMakeId( new );
-}
-
-
-
-
-
diff --git a/ast-5.3-1/frameset.h b/ast-5.3-1/frameset.h
deleted file mode 100644
index 7c8da13..0000000
--- a/ast-5.3-1/frameset.h
+++ /dev/null
@@ -1,677 +0,0 @@
-/*
-*+
-* Name:
-* frameset.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the FrameSet class.
-
-* Invocation:
-* #include "frameset.h"
-
-* Description:
-* This include file defines the interface to the FrameSet class and
-* provides the type definitions, function prototypes and macros, etc.
-* needed to use this class.
-*
-* A FrameSet consists of a set of one or more Frames, which are
-* inter-related by Mappings in such a way that it is possible to
-* obtain a Mapping between any pair of the Frames. The Frames are
-* identified by an integer index, with Frames being numbered
-* consecutively from one as they are added to the FrameSet.
-*
-* At any time, there is a "base" Frame and a "current" Frame
-* (which are allowed to be the same). Any of the Frames may be
-* nominated to hold these positions, and the choice is determined
-* by the values of the FrameSet's Base and Current attributes
-* which hold the indices of the relevant Frames. By default, the
-* first Frame added to a FrameSet is its base Frame, and the last
-* one added is its current Frame.
-*
-* The base Frame describes the "native" coordinate system of
-* whatever the FrameSet is used to calibrate (e.g. the pixel
-* coordinates of an image) and the current Frame describes the
-* "apparent" coordinate system in which it should be viewed
-* (e.g. displayed, etc.). The other Frames represent alternative
-* coordinate systems which may be selected by making them current.
-*
-* When Frame methods are invoked on a FrameSet (e.g. to obtain a
-* Title value or to determine the number of axes), they are
-* applied to the current Frame. Thus, a FrameSet may be used in
-* place of its current Frame in most situations.
-*
-* When Mapping methods are invoked on a FrameSet, the Mapping used
-* is the one between its base Frame and its current Frame. Thus, a
-* FrameSet may be used to convert "native" coordinates into
-* "apparent" ones, and vice versa. A FrameSet may also be
-* inverted, which has the effect of interchanging its base and
-* current Frames (and hence of reversing the Mapping between
-* them).
-*
-* The FrameSet class also defines methods of its own, which are
-* used to manage the Frames and Mappings that it contains and to
-* convert between coordinate systems described by different
-* FrameSets.
-
-* Inheritance:
-* The FrameSet class inherits from the Frame class.
-
-* Attributes Over-Ridden:
-* Digits (integer)
-* Direction(axis) (integer)
-* Domain (string)
-* Format(axis) (string)
-* Label(axis) (string)
-* MatchEnd (integer)
-* MaxAxes (integer)
-* MinAxes (integer)
-* Naxes (integer)
-* Permute (integer)
-* PreserveAxes (integer)
-* Symbol(axis) (string)
-* Title (string)
-* Unit(axis) (string)
-* The FrameSet acquires all of these attributes from its
-* current Frame, so their meanings, values and defaults are
-* determined by this Frame and may change if a different
-* current Frame is selected.
-* Nin (integer)
-* Nout (integer)
-* TranForward (integer)
-* TranInverse (integer)
-* The FrameSet interprets all of these as applying to the
-* Mapping that converts coordinates between its base Frame and
-* its current Frame, so their values may change if a different
-* base or current Frame is selected.
-* Invert (integer)
-* Report (integer)
-* The FrameSet interprets these as applying to the Mapping that
-* converts coordinates between its base Frame and its current
-* Frame, but their values are not affected by selecing a
-* different base or current Frame.
-
-* New Attributes Defined:
-* Base (integer)
-* The (one-based) index of the Frame which is to be regarded as
-* the base Frame in the FrameSet. By default, this is the first
-* Frame added to the FrameSet (i.e. when it was created),
-* unless the Frameset has been inverted, in which case it is
-* the last Frame added. Inverting a FrameSet interchanges the
-* values of its Base and Current attributes.
-* Current (integer)
-* The (one-based) index of the Frame which is to be regarded as
-* the current Frame in the FrameSet. By default, this is the
-* last Frame added to the FrameSet, unless the Frameset has
-* been inverted, in which case it is the first Frame added
-* (i.e. when the FrameSet was created). Inverting a FrameSet
-* interchanges the values of its Base and Current attributes.
-* Nframe (integer)
-* A read-only value giving the number of Frames in a
-* FrameSet. This value will change as Frames are added or
-* removed.
-
-* Methods Over-Ridden:
-* Public:
-* astClear
-* Clear attribute values for a FrameSet.
-* astConvert
-* Determine how to convert between two coordinate systems.
-* astDistance
-* Calculate the distance between two points.
-* astFindFrame
-* Find a coordinate system with specified characteristics
-* astFormat
-* Format a coordinate value for a FrameSet axis.
-* astGetAxis
-* Obtain a pointer to a specified Axis from a FrameSet.
-* astGetNaxes
-* Determine how many axes a FrameSet has.
-* astGetNin
-* Get the number of input coordinates for a FrameSet.
-* astGetNout
-* Get the number of output coordinates for a FrameSet.
-* astNorm
-* Normalise a set of FrameSet coordinates.
-* astOffset
-* Calculate an offset along a geodesic curve.
-* astPermAxes
-* Permute the order of a FrameSet's axes.
-* astPickAxes
-* Create a new Frame by picking axes from a FrameSet.
-* astSetAxis
-* Set a new Axis for a FrameSet.
-* astSimplify
-* Simplify the Mappings in a FrameSet.
-* astTransform
-* Transform a set of points.
-* astUnformat
-* Read a formatted coordinate value for a FrameSet axis.
-*
-* Protected:
-* astAbbrev
-* Abbreviate a formatted FrameSet axis value by skipping leading
-* fields.
-* astClearDigits
-* Clear the value of the Digits attribute for a FrameSet.
-* astClearDirection
-* Clear the value of the Direction attribute for a FrameSet axis.
-* astClearDomain
-* Clear the value of the Domain attribute for a FrameSet.
-* astClearFormat
-* Clear the value of the Format attribute for a FrameSet axis.
-* astClearLabel
-* Clear the value of the Label attribute for a FrameSet axis.
-* astClearMatchEnd
-* Clear the value of the MatchEnd attribute for a FrameSet.
-* astClearMaxAxes
-* Clear the value of the MaxAxes attribute for a FrameSet.
-* astClearMinAxes
-* Clear the value of the MinAxes attribute for a FrameSet.
-* astClearPermute
-* Clear the value of the Permute attribute for a FrameSet.
-* astClearPreserveAxes
-* Clear the value of the PreserveAxes attribute for a FrameSet.
-* astClearSymbol
-* Clear the value of the Symbol attribute for a FrameSet axis.
-* astClearTitle
-* Clear the value of the Title attribute for a FrameSet.
-* astClearUnit
-* Clear the value of the Unit attribute for a FrameSet axis.
-* astConvertX
-* Determine how to convert between two coordinate systems.
-* astGap
-* Find a "nice" gap for tabulating FrameSet axis values.
-* astGetDigits
-* Get the value of the Digits attribute for a FrameSet.
-* astGetDirection
-* Get the value of the Direction attribute for a FrameSet axis.
-* astGetDomain
-* Get the value of the Domain attribute for a FrameSet.
-* astGetFormat
-* Get the value of the Format attribute for a FrameSet axis.
-* astGetLabel
-* Get the value of the Label attribute for a FrameSet axis.
-* astGetMatchEnd
-* Get the value of the MatchEnd attribute for a FrameSet.
-* astGetMaxAxes
-* Get the value of the MaxAxes attribute for a FrameSet.
-* astGetMinAxes
-* Get the value of the MinAxes attribute for a FrameSet.
-* astGetPerm
-* Access the axis permutation array for the current Frame of
-* a FrameSet.
-* astGetPermute
-* Get the value of the Permute attribute for a FrameSet.
-* astGetPreserveAxes
-* Get the value of the PreserveAxes attribute for a FrameSet.
-* astGetSymbol
-* Get the value of the Symbol attribute for a FrameSet axis.
-* astGetTitle
-* Get the value of the Title attribute for a FrameSet.
-* astGetTranForward
-* Determine if a Mapping can perform a "forward" coordinate
-* transformation.
-* astGetTranInverse
-* Determine if a Mapping can perform an "inverse" coordinate
-* transformation.
-* astGetUnit
-* Get the value of the Unit attribute for a FrameSet axis.
-* astMatch
-* Determine if conversion is possible between two coordinate systems.
-* astOverlay
-* Overlay the attributes of a template FrameSet on to another Frame.
-* astPrimaryFrame
-* Uniquely identify a primary Frame and one of its axes.
-* astReportPoints
-* Report the effect of transforming a set of points using a FrameSet.
-* astSetAttrib
-* Set an attribute value for a FrameSet.
-* astSetDigits
-* Set the value of the Digits attribute for a FrameSet.
-* astSetDirection
-* Set the value of the Direction attribute for a FrameSet axis.
-* astSetDomain
-* Set the value of the Domain attribute for a FrameSet.
-* astSetFormat
-* Set the value of the Format attribute for a FrameSet axis.
-* astSetLabel
-* Set the value of the Label attribute for a FrameSet axis.
-* astSetMatchEnd
-* Set the value of the MatchEnd attribute for a FrameSet.
-* astSetMaxAxes
-* Set the value of the MaxAxes attribute for a FrameSet.
-* astSetMinAxes
-* Set the value of the MinAxes attribute for a FrameSet.
-* astSetPermute
-* Set the value of the Permute attribute for a FrameSet.
-* astSetPreserveAxes
-* Set the value of the PreserveAxes attribute for a FrameSet.
-* astSetSymbol
-* Set the value of the Symbol attribute for a FrameSet axis.
-* astSetTitle
-* Set the value of the Title attribute for a FrameSet.
-* astSetUnit
-* Set the value of the Unit attribute for a FrameSet axis.
-* astSubFrame
-* Select axes from a FrameSet and convert to the new coordinate
-* system.
-* astTestDigits
-* Test if a value has been set for the Digits attribute of a
-* FrameSet.
-* astTestDirection
-* Test if a value has been set for the Direction attribute of a
-* FrameSet axis.
-* astTestDomain
-* Test if a value has been set for the Domain attribute of a
-* FrameSet.
-* astTestFormat
-* Test if a value has been set for the Format attribute of a
-* FrameSet axis.
-* astTestLabel
-* Test if a value has been set for the Label attribute of a
-* FrameSet axis.
-* astTestMatchEnd
-* Test if a value has been set for the MatchEnd attribute of a
-* FrameSet.
-* astTestMaxAxes
-* Test if a value has been set for the MaxAxes attribute of a
-* FrameSet.
-* astTestMinAxes
-* Test if a value has been set for the MinAxes attribute of a
-* FrameSet.
-* astTestPermute
-* Test if a value has been set for the Permute attribute of a
-* FrameSet.
-* astTestPreserveAxes
-* Test if a value has been set for the PreserveAxes attribute of a
-* FrameSet.
-* astTestSymbol
-* Test if a value has been set for the Symbol attribute of a
-* FrameSet axis.
-* astTestTitle
-* Test if a value has been set for the Title attribute of a FrameSet.
-* astTestUnit
-* Test if a value has been set for the Unit attribute of a FrameSet
-* axis.
-* astValidateAxis
-* Validate and permute a FrameSet's axis index.
-* astVSet
-* Set values for a FrameSet's attributes.
-
-* New Methods Defined:
-* Public:
-* astAddFrame
-* Add a Frame to a FrameSet to define a new coordinate system.
-* astGetFrame
-* Obtain a pointer to a specified Frame in a FrameSet.
-* astGetMapping
-* Obtain a Mapping between two Frames in a FrameSet.
-* astRemapFrame
-* Modify a Frame's relationshp to the other Frames in a FrameSet.
-* astRemoveFrame
-* Remove a Frame from a FrameSet.
-*
-* Protected:
-* astClearBase
-* Clear the value of the Base attribute for a FrameSet.
-* astClearCurrent
-* Clear the value of the Current attribute for a FrameSet.
-* astGetBase
-* Obtain the value of the Base attribute for a FrameSet.
-* astGetCurrent
-* Obtain the value of the Current attribute for a FrameSet.
-* astGetNframe
-* Determine the number of Frames in a FrameSet.
-* astSetBase
-* Set the value of the Base attribute for a FrameSet.
-* astSetCurrent
-* Set the value of the Current attribute for a FrameSet.
-* astTestBase
-* Test if a value has been set for the Base attribute of a FrameSet.
-* astTestCurrent
-* Test if a value has been set for the Current attribute of a
-* FrameSet.
-* astValidateFrameIndex
-* Validate a FrameSet Frame index number.
-
-* Other Class Functions:
-* Public:
-* astFrameSet
-* Create a FrameSet.
-* astIsAFrameSet
-* Test class membership.
-*
-* Protected:
-* astCheckFrameSet
-* Validate class membership.
-* astInitFrameSet
-* Initialise a FrameSet.
-* astInitFrameSetVtab
-* Initialise the virtual function table for the FrameSet class.
-* astLoadFrameSet
-* Load a FrameSet.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstFrameSet
-* FrameSet object type.
-
-* Protected:
-* AstFrameSetVtab
-* FrameSet virtual function table type.
-
-* Macros:
-* Public:
-* AST__BASE
-* Expands to a constant int that may be used as a Frame index to
-* refer to a FrameSet's base Frame.
-* AST__CURRENT
-* Expands to a constant int that may be used as a Frame index to
-* refer to a FrameSet's current Frame.
-* AST__NOFRAME
-* Expands to a constant int that is guaranteed not to be valid when
-* used as a Frame index for a FrameSet.
-*
-* Protected:
-* None.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 16-FEB-1996 (RFWS):
-* Original version.
-* 5-JUN-1996 (RFWS):
-* Tidied up, etc.
-* 12-AUG-1996 (RFWS):
-* Added support for the public interface.
-* 25-SEP-1996 (RFWS):
-* Added I/O facilities.
-* 20-JAN-1998 (RFWS):
-* Implemented preservation of FrameSet integrity when attribute
-* values associated with the current Frame are modified.
-* 25-FEB-1998 (RFWS):
-* Over-ride the astUnformat method.
-* 8-JAN-2003 (DSB):
-* Added protected astInitFrameSetVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "frame.h" /* Parent Frame class */
-
-/* Note that the usual setting of the FRAMESET_INCLUDED flag, which
- prevents this file being included more than once, must be deferred
- until after including the "frame.h" file. This is because "frame.h"
- needs to include the present interface definition (as a form of
- "forward reference") in order to have access to FrameSets
- itself. */
-#if !defined( FRAMESET_INCLUDED )
-#define FRAMESET_INCLUDED
-
-/* Macros. */
-/* ======= */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-#define AST__BASE (0) /* Identify base Frame */
-#define AST__CURRENT (-1) /* Identify current Frame */
-#define AST__NOFRAME (-99) /* An invalid Frame index */
-#define AST__ALLFRAMES (-199) /* A value representing all Frames */
-
-/* Type Definitions. */
-/* ================= */
-/* FrameSet structure. */
-/* ------------------- */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstFrameSet {
-
-/* Attributes inherited from the parent class. */
- AstFrame parent; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- AstFrame **frame; /* Array of Frame pointers */
- AstMapping **map; /* Array of Mapping pointers */
- int *invert; /* Array of Mapping Invert values */
- int *link; /* Parent node index for each node */
- int *node; /* Index of node associated with Frame */
- int base; /* Index of base Frame */
- int current; /* Index of current Frame */
- int nframe; /* Number of Frames */
- int nnode; /* Number of nodes */
-} AstFrameSet;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all objects in the
- class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstFrameSetVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstFrameVtab frame_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- AstFrame *(* GetFrame)( AstFrameSet *, int, int * );
- AstMapping *(* GetMapping)( AstFrameSet *, int, int, int * );
- int (* GetBase)( AstFrameSet *, int * );
- int (* GetCurrent)( AstFrameSet *, int * );
- int (* GetNframe)( AstFrameSet *, int * );
- int (* TestBase)( AstFrameSet *, int * );
- int (* TestCurrent)( AstFrameSet *, int * );
- int (* ValidateFrameIndex)( AstFrameSet *, int, const char *, int * );
- void (* AddFrame)( AstFrameSet *, int, AstMapping *, AstFrame *, int * );
- void (* ClearBase)( AstFrameSet *, int * );
- void (* ClearCurrent)( AstFrameSet *, int * );
- void (* RemapFrame)( AstFrameSet *, int, AstMapping *, int * );
- void (* RemoveFrame)( AstFrameSet *, int, int * );
- void (* SetBase)( AstFrameSet *, int, int * );
- void (* SetCurrent)( AstFrameSet *, int, int * );
-} AstFrameSetVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstFrameSetGlobals {
- AstFrameSetVtab Class_Vtab;
- int Class_Init;
- char GetAttrib_Buff[ 51 ];
- AstFrame *Integrity_Frame;
- const char *Integrity_Method;
- int Integrity_Lost;
-} AstFrameSetGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(FrameSet) /* Check class membership */
-astPROTO_ISA(FrameSet) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected */
-AstFrameSet *astFrameSet_( void *, const char *, int *, ...);
-#else
-AstFrameSet *astFrameSetId_( void *, const char *, ... )__attribute__((format(printf,2,3)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstFrameSet *astInitFrameSet_( void *, size_t, int, AstFrameSetVtab *,
- const char *, AstFrame *, int * );
-
-/* Vtab initialiser. */
-void astInitFrameSetVtab_( AstFrameSetVtab *, const char *, int * );
-
-/* Loader. */
-AstFrameSet *astLoadFrameSet_( void *, size_t, AstFrameSetVtab *,
- const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitFrameSetGlobals_( AstFrameSetGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-AstFrame *astGetFrame_( AstFrameSet *, int, int * );
-AstMapping *astGetMapping_( AstFrameSet *, int, int, int * );
-void astAddFrame_( AstFrameSet *, int , AstMapping *, AstFrame *, int * );
-void astRemapFrame_( AstFrameSet *, int, AstMapping *, int * );
-void astRemoveFrame_( AstFrameSet *, int, int * );
-
-#if defined(astCLASS) /* Protected */
-int astGetBase_( AstFrameSet *, int * );
-int astGetCurrent_( AstFrameSet *, int * );
-int astGetNframe_( AstFrameSet *, int * );
-int astTestBase_( AstFrameSet *, int * );
-int astTestCurrent_( AstFrameSet *, int * );
-int astValidateFrameIndex_( AstFrameSet *, int, const char *, int * );
-void astClearBase_( AstFrameSet *, int * );
-void astClearCurrent_( AstFrameSet *, int * );
-void astSetBase_( AstFrameSet *, int, int * );
-void astSetCurrent_( AstFrameSet *, int, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class to make
- them easier to invoke (e.g. to avoid type mis-matches when passing pointers
- to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them to
- validate their own arguments. We must use a cast when passing object
- pointers (so that they can accept objects from derived classes). */
-
-/* Check class membership. */
-#define astCheckFrameSet(this) astINVOKE_CHECK(FrameSet,this,0)
-#define astVerifyFrameSet(this) astINVOKE_CHECK(FrameSet,this,1)
-
-/* Test class membership. */
-#define astIsAFrameSet(this) astINVOKE_ISA(FrameSet,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected */
-#define astFrameSet astINVOKE(F,astFrameSet_)
-#else
-#define astFrameSet astINVOKE(F,astFrameSetId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitFrameSet(mem,size,init,vtab,name,frame) \
-astINVOKE(O,astInitFrameSet_(mem,size,init,vtab,name,astCheckFrame(frame),STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitFrameSetVtab(vtab,name) astINVOKE(V,astInitFrameSetVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadFrameSet(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadFrameSet_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckFrameSet to validate FrameSet pointers before
- use. This provides a contextual error report if a pointer to the wrong sort
- of object is supplied. */
-#define astAddFrame(this,iframe,map,frame) \
-astINVOKE(V,astAddFrame_(astCheckFrameSet(this),iframe,(((iframe)!=AST__ALLFRAMES)?astCheckMapping(map):NULL),astCheckFrame(frame),STATUS_PTR))
-#define astGetFrame(this,iframe) \
-astINVOKE(O,astGetFrame_(astCheckFrameSet(this),iframe,STATUS_PTR))
-#define astGetMapping(this,iframe1,iframe2) \
-astINVOKE(O,astGetMapping_(astCheckFrameSet(this),iframe1,iframe2,STATUS_PTR))
-#define astRemapFrame(this,iframe,map) \
-astINVOKE(V,astRemapFrame_(astCheckFrameSet(this),iframe,astCheckMapping(map),STATUS_PTR))
-#define astRemoveFrame(this,iframe) \
-astINVOKE(V,astRemoveFrame_(astCheckFrameSet(this),iframe,STATUS_PTR))
-
-/* Interfaces to protected member functions. */
-/* ----------------------------------------- */
-#if defined(astCLASS) /* Protected */
-#define astClearBase(this) \
-astINVOKE(V,astClearBase_(astCheckFrameSet(this),STATUS_PTR))
-#define astClearCurrent(this) \
-astINVOKE(V,astClearCurrent_(astCheckFrameSet(this),STATUS_PTR))
-#define astGetBase(this) \
-astINVOKE(V,astGetBase_(astCheckFrameSet(this),STATUS_PTR))
-#define astGetCurrent(this) \
-astINVOKE(V,astGetCurrent_(astCheckFrameSet(this),STATUS_PTR))
-#define astGetNframe(this) \
-astINVOKE(V,astGetNframe_(astCheckFrameSet(this),STATUS_PTR))
-#define astSetBase(this,ibase) \
-astINVOKE(V,astSetBase_(astCheckFrameSet(this),ibase,STATUS_PTR))
-#define astSetCurrent(this,icurrent) \
-astINVOKE(V,astSetCurrent_(astCheckFrameSet(this),icurrent,STATUS_PTR))
-#define astTestBase(this) \
-astINVOKE(V,astTestBase_(astCheckFrameSet(this),STATUS_PTR))
-#define astTestCurrent(this) \
-astINVOKE(V,astTestCurrent_(astCheckFrameSet(this),STATUS_PTR))
-#define astValidateFrameIndex(this,iframe,method) \
-astINVOKE(V,astValidateFrameIndex_(astCheckFrameSet(this),iframe,method,STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/fratemap.c b/ast-5.3-1/fratemap.c
deleted file mode 100644
index 1efdc27..0000000
--- a/ast-5.3-1/fratemap.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
-*+
-* Name:
-* fratemap.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST RateMap class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the RateMap class.
-
-* Routines Defined:
-* AST_ISARATEMAP
-* AST_RATEMAP
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S.Berry (Starlink)
-
-* History:
-* 10-FEB-2004 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "ratemap.h" /* C interface to the RateMap class */
-
-F77_LOGICAL_FUNCTION(ast_isaratemap)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astWatchSTATUS(
- astAt( "AST_ISARATEMAP", NULL, 0 );
- RESULT = astIsARateMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_ratemap)( INTEGER(MAP),
- INTEGER(AX1),
- INTEGER(AX2),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(MAP)
- GENPTR_INTEGER(AX1)
- GENPTR_INTEGER(AX2)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- int i;
- char *options;
-
- astAt( "AST_RATEMAP", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astRateMap( astI2P( *MAP ), *AX1, *AX2,
- "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fregion.c b/ast-5.3-1/fregion.c
deleted file mode 100644
index 49bc85f..0000000
--- a/ast-5.3-1/fregion.c
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
-*+
-* Name:
-* fregion.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST Region class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the Region class.
-
-* Routines Defined:
-* AST_NEGATE
-* AST_ISAREGION
-* AST_MAPREGION
-* AST_GETREGIONBOUNDS
-* AST_GETREGIONFRAME
-* AST_OVERLAP
-* AST_SETUNC
-* AST_GETUNC
-* AST_SHOWMESH
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 22-MAR-2004 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory management facilities */
-#include "region.h" /* C interface to the Region class */
-
-/* FORTRAN interface functions. */
-/* ============================ */
-/* These functions implement the remainder of the FORTRAN interface. */
-
-F77_SUBROUTINE(ast_negate)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
-
- astAt( "AST_NEGATE", NULL, 0 );
- astWatchSTATUS(
- astNegate( astI2P( *THIS ) );
- )
-}
-
-F77_SUBROUTINE(ast_setunc)( INTEGER(THIS),
- INTEGER(UNC),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(UNC)
-
- astAt( "AST_SETUNC", NULL, 0 );
- astWatchSTATUS(
- astSetUnc( astI2P( *THIS ), astI2P( *UNC ) );
- )
-}
-
-F77_LOGICAL_FUNCTION(ast_isaregion)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAREGION", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsARegion( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_getregionframe)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_INTEGER_TYPE(RESULT);
-
- astAt( "AST_GETREGIONFRAME", NULL, 0 );
- astWatchSTATUS(
- RESULT = astP2I( astGetRegionFrame( astI2P( *THIS ) ) );
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_getunc)( INTEGER(THIS),
- LOGICAL(DEF),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_LOGICAL(DEF)
- F77_INTEGER_TYPE(RESULT);
-
- astAt( "AST_GETUNC", NULL, 0 );
- astWatchSTATUS(
- RESULT = astP2I( astGetUnc( astI2P( *THIS ), F77_ISTRUE( *DEF ) ? 1 : 0 ) );
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_mapregion)( INTEGER(REG),
- INTEGER(MAP),
- INTEGER(FRM),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(REG)
- GENPTR_INTEGER(MAP)
- GENPTR_INTEGER(FRM)
- F77_INTEGER_TYPE(RESULT);
-
- astAt( "AST_MAPREGION", NULL, 0 );
- astWatchSTATUS(
- RESULT = astP2I( astMapRegion( astI2P( *REG ), astI2P( *MAP ),
- astI2P( *FRM ) ) );
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_overlap)( INTEGER(THIS),
- INTEGER(THAT),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(THAT)
- F77_INTEGER_TYPE(RESULT);
-
- astAt( "AST_OVERLAP", NULL, 0 );
- astWatchSTATUS(
- RESULT = astOverlap( astI2P( *THIS ), astI2P( *THAT ) );
- )
- return RESULT;
-}
-
-/* AST_MASK<X> requires a function for each possible data type, so
- define it via a macro. */
-#define MAKE_AST_MASK(f,F,Ftype,X,Xtype) \
-F77_INTEGER_FUNCTION(ast_mask##f)( INTEGER(THIS), \
- INTEGER(MAP), \
- LOGICAL(INSIDE), \
- INTEGER(NDIM), \
- INTEGER_ARRAY(LBND), \
- INTEGER_ARRAY(UBND), \
- Ftype##_ARRAY(IN), \
- Ftype(VAL), \
- INTEGER(STATUS) ) { \
- GENPTR_INTEGER(THIS) \
- GENPTR_INTEGER(MAP) \
- GENPTR_LOGICAL(INSIDE) \
- GENPTR_INTEGER(NDIM) \
- GENPTR_INTEGER_ARRAY(LBND) \
- GENPTR_INTEGER_ARRAY(UBND) \
- GENPTR_##Ftype##_ARRAY(IN) \
- GENPTR_##Ftype(VAL) \
- GENPTR_INTEGER(STATUS) \
-\
- F77_INTEGER_TYPE RESULT; \
-\
- astAt( "AST_MASK"#F, NULL, 0 ); \
- astWatchSTATUS( \
-\
- RESULT = astMask##X( astI2P( *THIS ), astI2P( *MAP ), \
- F77_ISTRUE( *INSIDE ) ? 1 : 0, *NDIM, \
- LBND, UBND, (Xtype *) IN, *VAL ); \
- ) \
- return RESULT; \
-}
-
-/* Invoke the above macro to define a function for each data
- type. Include synonyms for some functions. */
-MAKE_AST_MASK(d,D,DOUBLE,D,double)
-MAKE_AST_MASK(r,R,REAL,F,float)
-MAKE_AST_MASK(i,I,INTEGER,I,int)
-MAKE_AST_MASK(ui,UI,INTEGER,UI,unsigned int)
-MAKE_AST_MASK(s,S,WORD,S,short int)
-MAKE_AST_MASK(us,US,UWORD,US,unsigned short int)
-MAKE_AST_MASK(w,W,WORD,S,short int)
-MAKE_AST_MASK(uw,UW,UWORD,US,unsigned short int)
-MAKE_AST_MASK(b,B,BYTE,B,signed char)
-MAKE_AST_MASK(ub,UB,UBYTE,UB,unsigned char)
-#undef MAKE_AST_MASK
-
-F77_SUBROUTINE(ast_getregionbounds)( INTEGER(THIS),
- DOUBLE(LBND),
- DOUBLE(UBND),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_DOUBLE(XOUT)
- GENPTR_DOUBLE(YOUT)
-
- astAt( "AST_GETREGIONBOUNDS", NULL, 0 );
- astWatchSTATUS(
- astGetRegionBounds( astI2P( *THIS ), LBND, UBND );
- )
-}
-
-F77_SUBROUTINE(ast_showmesh)( INTEGER(THIS),
- LOGICAL(FORMAT),
- CHARACTER(TTL),
- INTEGER(STATUS)
- TRAIL(TTL) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_LOGICAL(FORMAT)
- GENPTR_CHARACTER(TTL)
- char *ttl;
-
- astAt( "AST_SHOWMESH", NULL, 0 );
- astWatchSTATUS(
- ttl = astString( TTL, TTL_length );
- astShowMesh( astI2P( *THIS ), F77_ISTRUE( *FORMAT ) ? 1 : 0, ttl );
- ttl = astFree( ttl );
- )
-}
-
-
-
diff --git a/ast-5.3-1/fselectormap.c b/ast-5.3-1/fselectormap.c
deleted file mode 100644
index 04dad9f..0000000
--- a/ast-5.3-1/fselectormap.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
-*+
-* Name:
-* fselectormap.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST SelectorMap class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the SelectorMap class.
-
-* Routines Defined:
-* AST_ISASELECTORMAP
-* AST_SELECTORMAP
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S.Berry (Starlink)
-
-* History:
-* 14-MAR-2006 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "selectormap.h" /* C interface to the SelectorMap class */
-
-F77_LOGICAL_FUNCTION(ast_isaselectormap)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astWatchSTATUS(
- astAt( "AST_ISASELECTORMAP", NULL, 0 );
- RESULT = astIsASelectorMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_selectormap)( INTEGER(NREG),
- INTEGER_ARRAY(REGS),
- DOUBLE(BADVAL),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(NREG)
- GENPTR_INTEGER_ARRAY(REGS)
- GENPTR_DOUBLE(BADVAL)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- int i;
- char *options;
- AstObject **regs;
-
- astAt( "AST_SELECTORMAP", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
- regs = astMalloc( sizeof(AstObject *) * (*NREG) );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
-
- for ( i = 0; i < *NREG; i++ ) {
- regs[ i ] = astI2P( REGS[ i ] );
- }
- }
-
-
- RESULT = astP2I( astSelectorMap( *NREG, (void **) regs, *BADVAL, "%s",
- options ) );
- astFree( regs );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fshiftmap.c b/ast-5.3-1/fshiftmap.c
deleted file mode 100644
index e43b07e..0000000
--- a/ast-5.3-1/fshiftmap.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
-*+
-* Name:
-* fshiftmap.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST ShiftMap class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the ShiftMap class.
-
-* Routines Defined:
-* AST_ISASHIFTMAP
-* AST_SHIFTMAP
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-
-* History:
-* 18-AUG-2003 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "shiftmap.h" /* C interface to the ShiftMap class */
-
-F77_LOGICAL_FUNCTION(ast_isashiftmap)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISASHIFTMAP", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAShiftMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_shiftmap)( INTEGER(NAXES),
- DOUBLE(SHIFT),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(NAXES)
- GENPTR_DOUBLE(SHIFT)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_SHIFTMAP", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astShiftMap( *NAXES, SHIFT, "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fskyframe.c b/ast-5.3-1/fskyframe.c
deleted file mode 100644
index cb9f17f..0000000
--- a/ast-5.3-1/fskyframe.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-*+
-* Name:
-* fskyframe.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST SkyFrame class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the SkyFrame class.
-
-* Routines Defined:
-* AST_ISASKYFRAME
-* AST_SKYFRAME
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 23-JUL-1996 (RFWS):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "skyframe.h" /* C interface to the SkyFrame class */
-
-F77_LOGICAL_FUNCTION(ast_isaskyframe)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISASKYFRAME", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsASkyFrame( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_skyframe)( CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- int i;
- char *options;
-
- astAt( "AST_SKYFRAME", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astSkyFrame( "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fslamap.c b/ast-5.3-1/fslamap.c
deleted file mode 100644
index 3ee0d62..0000000
--- a/ast-5.3-1/fslamap.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
-*+
-* Name:
-* fslamap.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST SlaMap class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the SlaMap class.
-
-* Routines Defined:
-* AST_ISASLAMAP
-* AST_SLAADD
-* AST_SLAMAP
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 28-MAY-1997 (RFWS):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "slamap.h" /* C interface to the SlaMap class */
-
-F77_LOGICAL_FUNCTION(ast_isaslamap)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISASLAMAP", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsASlaMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_SUBROUTINE(ast_slaadd)( INTEGER(THIS),
- CHARACTER(CVT),
- DOUBLE_ARRAY(ARGS),
- INTEGER(STATUS)
- TRAIL(CVT) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(CVT)
- GENPTR_DOUBLE_ARRAY(ARGS)
- char *cvt;
-
- astAt( "AST_SLAADD", NULL, 0 );
- astWatchSTATUS(
- cvt = astString( CVT, CVT_length );
- astSlaAdd( astI2P( *THIS ), cvt, ARGS );
- astFree( cvt );
- )
-}
-
-F77_INTEGER_FUNCTION(ast_slamap)( INTEGER(FLAGS),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(FLAGS)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- int i;
- char *options;
-
- astAt( "AST_SLAMAP", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astSlaMap( *FLAGS, "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fspecfluxframe.c b/ast-5.3-1/fspecfluxframe.c
deleted file mode 100644
index 6f89c5c..0000000
--- a/ast-5.3-1/fspecfluxframe.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-*+
-* Name:
-* fspecfluxframe.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST SpecFluxFrame class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the SpecFluxFrame class.
-
-* Routines Defined:
-* AST_SPECFLUXFRAME
-* AST_ISASPECFLUXFRAME
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 8-DEC-2004 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "specfluxframe.h" /* C interface to the SpecFluxFrame class */
-
-F77_LOGICAL_FUNCTION(ast_isaspecfluxframe)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISASPECFLUXFRAME", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsASpecFluxFrame( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_specfluxframe)( INTEGER(FRAME1),
- INTEGER(FRAME2),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(FRAME1)
- GENPTR_INTEGER(FRAME2)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- int i;
- char *options;
-
- astAt( "AST_SPECFLUXFRAME", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astSpecFluxFrame( astI2P( *FRAME1 ), astI2P( *FRAME2 ),
- "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fspecframe.c b/ast-5.3-1/fspecframe.c
deleted file mode 100644
index b8a86ef..0000000
--- a/ast-5.3-1/fspecframe.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
-*+
-* Name:
-* fspecframe.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST SpecFrame class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the SpecFrame class.
-
-* Routines Defined:
-* AST_ISASPECFRAME
-* AST_SPECFRAME
-* AST_SETREFPOS
-* AST_GETREFPOS
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 20-NOV-2002 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "specframe.h" /* C interface to the SpecFrame class */
-
-F77_LOGICAL_FUNCTION(ast_isaspecframe)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISASPECFRAME", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsASpecFrame( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_specframe)( CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- int i;
- char *options;
-
- astAt( "AST_SPECFRAME", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astSpecFrame( "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
-
-F77_SUBROUTINE(ast_getrefpos)( INTEGER(THIS),
- INTEGER(FRM),
- DOUBLE(LON),
- DOUBLE(LAT),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(FRM)
- GENPTR_DOUBLE(LON)
- GENPTR_DOUBLE(LAT)
-
- astAt( "AST_GETREFPOS", NULL, 0 );
- astWatchSTATUS(
- astGetRefPos( astI2P( *THIS ), astI2P( *FRM ), LON, LAT );
- )
-}
-
-F77_SUBROUTINE(ast_setrefpos)( INTEGER(THIS),
- INTEGER(FRM),
- DOUBLE(LON),
- DOUBLE(LAT),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(FRM)
- GENPTR_DOUBLE(LON)
- GENPTR_DOUBLE(LAT)
-
- astAt( "AST_SETREFPOS", NULL, 0 );
- astWatchSTATUS(
- astSetRefPos( astI2P( *THIS ), astI2P( *FRM ), *LON, *LAT );
- )
-}
-
diff --git a/ast-5.3-1/fspecmap.c b/ast-5.3-1/fspecmap.c
deleted file mode 100644
index eaf4da4..0000000
--- a/ast-5.3-1/fspecmap.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-*+
-* Name:
-* fspecmap.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST SpecMap class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the SpecMap class.
-
-* Routines Defined:
-* AST_ISASPECMAP
-* AST_SPECADD
-* AST_SPECMAP
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 11-NOV-2002 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "specmap.h" /* C interface to the SpecMap class */
-
-F77_LOGICAL_FUNCTION(ast_isaspecmap)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISASPECMAP", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsASpecMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_SUBROUTINE(ast_specadd)( INTEGER(THIS),
- CHARACTER(CVT),
- DOUBLE_ARRAY(ARGS),
- INTEGER(STATUS)
- TRAIL(CVT) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(CVT)
- GENPTR_DOUBLE_ARRAY(ARGS)
- char *cvt;
-
- astAt( "AST_SPECADD", NULL, 0 );
- astWatchSTATUS(
- cvt = astString( CVT, CVT_length );
- astSpecAdd( astI2P( *THIS ), cvt, ARGS );
- astFree( cvt );
- )
-}
-
-F77_INTEGER_FUNCTION(ast_specmap)( INTEGER(NIN),
- INTEGER(FLAGS),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(NIN)
- GENPTR_INTEGER(FLAGS)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- int i;
- char *options;
-
- astAt( "AST_SPECMAP", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astSpecMap( *NIN, *FLAGS, "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fsphmap.c b/ast-5.3-1/fsphmap.c
deleted file mode 100644
index 218fe4f..0000000
--- a/ast-5.3-1/fsphmap.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-*+
-* Name:
-* fsphmap.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST SphMap class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the SphMap class.
-
-* Routines Defined:
-* AST_ISASPHMAP
-* AST_SPHMAP
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-
-* History:
-* 25-OCT-1996 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "sphmap.h" /* C interface to the SphMap class */
-
-F77_LOGICAL_FUNCTION(ast_isasphmap)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISASPHMAP", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsASphMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_sphmap)( CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_SPHMAP", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astSphMap( "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fstc.c b/ast-5.3-1/fstc.c
deleted file mode 100644
index f6d2052..0000000
--- a/ast-5.3-1/fstc.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-*+
-* Name:
-* fstc.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST Stc class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the Stc class.
-
-* Routines Defined:
-* AST_ISASTC
-* AST_GETSTCREGION
-* AST_GETSTCCOORD
-* AST_GETSTCNCOORD
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 22-NOV-2004 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "stc.h" /* C interface to the Stc class */
-
-
-F77_INTEGER_FUNCTION(ast_getstcncoord)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_INTEGER_TYPE(RESULT);
-
- astAt( "AST_GETSTCNCOORD", NULL, 0 );
- astWatchSTATUS(
- RESULT = astGetStcNCoord( astI2P( *THIS ) );
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_getstccoord)( INTEGER(THIS),
- INTEGER(ICOORD),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_INTEGER(ICOORD)
- F77_INTEGER_TYPE(RESULT);
-
- astAt( "AST_GETSTCCOORD", NULL, 0 );
- astWatchSTATUS(
- RESULT = astP2I( astGetStcCoord( astI2P( *THIS ), *ICOORD ) );
- )
- return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_isastc)( INTEGER(THIS), INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISASTC", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAStc( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_getstcregion)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_INTEGER_TYPE(RESULT);
-
- astAt( "AST_GETSTCREGION", NULL, 0 );
- astWatchSTATUS(
- RESULT = astP2I( astGetStcRegion( astI2P( *THIS ) ) );
- )
- return RESULT;
-}
-
-
diff --git a/ast-5.3-1/fstccatalogentrylocation.c b/ast-5.3-1/fstccatalogentrylocation.c
deleted file mode 100644
index e180d51..0000000
--- a/ast-5.3-1/fstccatalogentrylocation.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-*+
-* Name:
-* fstccatalogentrylocation.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST StcCatalogEntryLocation class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the StcCatalogEntryLocation class.
-
-* Routines Defined:
-* AST_ISASTCCATALOGENTRYLOCATION
-* AST_STCCATALOGENTRYLOCATION
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 22-NOV-2004 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "stccatalogentrylocation.h" /* C interface to the StcCatalogEntryLocation class */
-
-
-F77_LOGICAL_FUNCTION(ast_isastccatalogentrylocation)( INTEGER(THIS), INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISASTCCATALOGENTRYLOCATION", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAStcCatalogEntryLocation( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_stccatalogentrylocation)( INTEGER(REG),
- INTEGER(NCOORDS),
- INTEGER_ARRAY(COORDS),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(REG)
- GENPTR_INTEGER(NCOORDS)
- GENPTR_CHARACTER(OPTIONS)
- GENPTR_INTEGER_ARRAY(COORDS)
- AstKeyMap **coords;
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_STCCATALOGENTRYLOCATION", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
-
-/* Convert supplied integers to pointers. */
- coords = astMalloc( sizeof( AstKeyMap * )*(size_t)( *NCOORDS ));
- if( astOK ) {
- for( i = 0; i < *NCOORDS; i++ ) {
- coords[ i ] = (AstKeyMap *) astMakePointer( astI2P( COORDS[ i ] ));
- }
- }
-
- RESULT = astP2I( astStcCatalogEntryLocation( astI2P( *REG ), *NCOORDS,
- coords, "%s", options ) );
- astFree( coords );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fstcobsdatalocation.c b/ast-5.3-1/fstcobsdatalocation.c
deleted file mode 100644
index 4115ab8..0000000
--- a/ast-5.3-1/fstcobsdatalocation.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-*+
-* Name:
-* fstcobsdatalocation.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST StcObsDataLocation class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the StcObsDataLocation class.
-
-* Routines Defined:
-* AST_ISASTCOBSDATALOCATION
-* AST_STCOBSDATALOCATION
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 22-NOV-2004 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "stcobsdatalocation.h" /* C interface to the StcObsDataLocation class */
-
-
-F77_LOGICAL_FUNCTION(ast_isastcobsdatalocation)( INTEGER(THIS), INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISASTCOBSDATALOCATION", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAStcObsDataLocation( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_stcobsdatalocation)( INTEGER(REG),
- INTEGER(NCOORDS),
- INTEGER_ARRAY(COORDS),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(REG)
- GENPTR_INTEGER(NCOORDS)
- GENPTR_CHARACTER(OPTIONS)
- GENPTR_INTEGER_ARRAY(COORDS)
- AstKeyMap **coords;
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_STCOBSDATALOCATION", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
-
-/* Convert supplied integers to pointers. */
- coords = astMalloc( sizeof( AstKeyMap * )*(size_t)( *NCOORDS ));
- if( astOK ) {
- for( i = 0; i < *NCOORDS; i++ ) {
- coords[ i ] = (AstKeyMap *) astMakePointer( astI2P( COORDS[ i ] ));
- }
- }
-
- RESULT = astP2I( astStcObsDataLocation( astI2P( *REG ), *NCOORDS,
- coords, "%s", options ) );
- astFree( coords );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fstcresourceprofile.c b/ast-5.3-1/fstcresourceprofile.c
deleted file mode 100644
index 5534127..0000000
--- a/ast-5.3-1/fstcresourceprofile.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-*+
-* Name:
-* fstcresourceprofile.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST StcResourceProfile class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the StcResourceProfile class.
-
-* Routines Defined:
-* AST_ISASTCRESOURCEPROFILE
-* AST_STCRESOURCEPROFILE
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 22-NOV-2004 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "object.h" /* Basic AST Object management functions */
-#include "stcresourceprofile.h" /* C interface to the StcResourceProfile class */
-
-
-F77_LOGICAL_FUNCTION(ast_isastcresourceprofile)( INTEGER(THIS), INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISASTCRESOURCEPROFILE", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAStcResourceProfile( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_stcresourceprofile)( INTEGER(REG),
- INTEGER(NCOORDS),
- INTEGER_ARRAY(COORDS),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(REG)
- GENPTR_INTEGER(NCOORDS)
- GENPTR_CHARACTER(OPTIONS)
- GENPTR_INTEGER_ARRAY(COORDS)
- AstKeyMap **coords;
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_STCRESOURCEPROFILE", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
-
-/* Convert supplied integers to pointers. */
- coords = astMalloc( sizeof( AstKeyMap * )*(size_t)( *NCOORDS ));
- if( astOK ) {
- for( i = 0; i < *NCOORDS; i++ ) {
- coords[ i ] = (AstKeyMap *) astMakePointer( astI2P( COORDS[ i ] ));
- }
- }
-
- RESULT = astP2I( astStcResourceProfile( astI2P( *REG ), *NCOORDS,
- coords, "%s", options ) );
- astFree( coords );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fstcschan.c b/ast-5.3-1/fstcschan.c
deleted file mode 100644
index c90bf50..0000000
--- a/ast-5.3-1/fstcschan.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
-*+
-* Name:
-* fstcschan.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST StcsChan class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the StcsChan class.
-
-* Routines Defined:
-* AST_STCSCHAN
-* AST_ISASTCSCHAN
-
-* Copyright:
-* Copyright (C) 2008 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (JAC,UCLan)
-
-* History:
-* 18-DEC-2008 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "channel.h" /* Provides wrapper functions */
-#include "stcschan.h" /* C interface to the StcsChan class */
-
-#include <stddef.h>
-
-/* Prototypes for external functions. */
-/* ================================== */
-/* This is the null function defined by the FORTRAN interface in fobject.c. */
-F77_SUBROUTINE(ast_null)( void );
-
-/* FORTRAN interface functions. */
-/* ============================ */
-/* These functions implement the remainder of the FORTRAN interface. */
-F77_INTEGER_FUNCTION(ast_stcschan)( void (* SOURCE)(),
- void (* SINK)(),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- const char *(* source)( void );
- int i;
- void (* sink)( const char * );
-
- astAt( "AST_STCSCHAN", NULL, 0 );
- astWatchSTATUS(
-
-/* Set the source and sink function pointers to NULL if a pointer to
- the null routine AST_NULL has been supplied. */
- source = (const char *(*)( void )) SOURCE;
- if ( source == (const char *(*)( void )) F77_EXTERNAL_NAME(ast_null) ) {
- source = NULL;
- }
- sink = (void (*)( const char * )) SINK;
- if ( sink == (void (*)( const char * )) F77_EXTERNAL_NAME(ast_null) ) {
- sink = NULL;
- }
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astStcsChanFor( source, astSourceWrap, sink, astSinkWrap,
- "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_isastcschan)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISASTCSCHAN", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAStcsChan( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-
-
-
-
diff --git a/ast-5.3-1/fstcsearchlocation.c b/ast-5.3-1/fstcsearchlocation.c
deleted file mode 100644
index 91e996a..0000000
--- a/ast-5.3-1/fstcsearchlocation.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-*+
-* Name:
-* fstcsearchlocation.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST StcSearchLocation class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the StcSearchLocation class.
-
-* Routines Defined:
-* AST_ISASTCSEARCHLOCATION
-* AST_STCSEARCHLOCATION
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 22-NOV-2004 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "stcsearchlocation.h" /* C interface to the StcSearchLocation class */
-
-
-F77_LOGICAL_FUNCTION(ast_isastcsearchlocation)( INTEGER(THIS), INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISASTCSEARCHLOCATION", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAStcSearchLocation( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_stcsearchlocation)( INTEGER(REG),
- INTEGER(NCOORDS),
- INTEGER_ARRAY(COORDS),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(REG)
- GENPTR_INTEGER(NCOORDS)
- GENPTR_CHARACTER(OPTIONS)
- GENPTR_INTEGER_ARRAY(COORDS)
- AstKeyMap **coords;
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_STCSEARCHLOCATION", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
-
-/* Convert supplied integers to pointers. */
- coords = astMalloc( sizeof( AstKeyMap * )*(size_t)( *NCOORDS ));
- if( astOK ) {
- for( i = 0; i < *NCOORDS; i++ ) {
- coords[ i ] = (AstKeyMap *) astMakePointer( astI2P( COORDS[ i ] ));
- }
- }
-
- RESULT = astP2I( astStcSearchLocation( astI2P( *REG ), *NCOORDS,
- coords, "%s", options ) );
- astFree( coords );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fswitchmap.c b/ast-5.3-1/fswitchmap.c
deleted file mode 100644
index 35ad728..0000000
--- a/ast-5.3-1/fswitchmap.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-*+
-* Name:
-* fswitchmap.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST SwitchMap class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the SwitchMap class.
-
-* Routines Defined:
-* AST_ISASWITCHMAP
-* AST_SWITCHMAP
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S.Berry (Starlink)
-
-* History:
-* 13-MAR-2006 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "switchmap.h" /* C interface to the SwitchMap class */
-
-F77_LOGICAL_FUNCTION(ast_isaswitchmap)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astWatchSTATUS(
- astAt( "AST_ISASWITCHMAP", NULL, 0 );
- RESULT = astIsASwitchMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_switchmap)( INTEGER(FSMAP),
- INTEGER(ISMAP),
- INTEGER(NROUTE),
- INTEGER_ARRAY(ROUTEMAPS),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(FSMAP)
- GENPTR_INTEGER(ISMAP)
- GENPTR_INTEGER(NROUTE)
- GENPTR_INTEGER_ARRAY(ROUTEMAPS)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- int i;
- char *options;
- AstObject **routemaps;
-
- astAt( "AST_SWITCHMAP", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
- routemaps = astMalloc( sizeof(AstObject *) * (*NROUTE) );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
-
- for ( i = 0; i < *NROUTE; i++ ) {
- routemaps[ i ] = astI2P( ROUTEMAPS[ i ] );
- }
- }
-
-
- RESULT = astP2I( astSwitchMap( astI2P( *FSMAP ), astI2P( *ISMAP ),
- *NROUTE, (void **) routemaps, "%s",
- options ) );
- astFree( routemaps );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/ftimeframe.c b/ast-5.3-1/ftimeframe.c
deleted file mode 100644
index 90bfb7a..0000000
--- a/ast-5.3-1/ftimeframe.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
-*+
-* Name:
-* ftimeframe.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST TimeFrame class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the TimeFrame class.
-
-* Routines Defined:
-* AST_ISATIMEFRAME
-* AST_TIMEFRAME
-* AST_CURRENTTIME
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* NG: Norman Gray (Starlink)
-
-* History:
-* 02-AUG-2003 (NG):
-* Original version, heavily based on fspecframe.c.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "timeframe.h" /* C interface to the TimeFrame class */
-
-F77_LOGICAL_FUNCTION(ast_isatimeframe)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISATIMEFRAME", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsATimeFrame( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_timeframe)( CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- int i;
- char *options;
-
- astAt( "AST_TIMEFRAME", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astTimeFrame( "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
-
-F77_DOUBLE_FUNCTION(ast_currenttime)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_DOUBLE_TYPE(RESULT);
-
- astAt( "AST_CURRENTTIME", NULL, 0 );
- astWatchSTATUS(
- RESULT = astCurrentTime( astI2P( *THIS ) );
- )
- return RESULT;
-}
-
-
diff --git a/ast-5.3-1/ftimemap.c b/ast-5.3-1/ftimemap.c
deleted file mode 100644
index 53bb092..0000000
--- a/ast-5.3-1/ftimemap.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
-*+
-* Name:
-* ftimemap.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST TimeMap class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the TimeMap class.
-
-* Routines Defined:
-* AST_ISATIMEMAP
-* AST_TIMEADD
-* AST_TIMEMAP
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* NG: Norman Gray (Starlink)
-
-* History:
-* 08-Sep-2003 (NG):
-* Original version (heavily based on fspecmap.c)
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "timemap.h" /* C interface to the TimeMap class */
-
-F77_LOGICAL_FUNCTION(ast_isatimemap)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISATIMEMAP", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsATimeMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_SUBROUTINE(ast_timeadd)( INTEGER(THIS),
- CHARACTER(CVT),
- DOUBLE_ARRAY(ARGS),
- INTEGER(STATUS)
- TRAIL(CVT) ) {
- GENPTR_INTEGER(THIS)
- GENPTR_CHARACTER(CVT)
- GENPTR_DOUBLE_ARRAY(ARGS)
- char *cvt;
-
- astAt( "AST_TIMEADD", NULL, 0 );
- astWatchSTATUS(
- cvt = astString( CVT, CVT_length );
- astTimeAdd( astI2P( *THIS ), cvt, ARGS );
- astFree( cvt );
- )
-}
-
-F77_INTEGER_FUNCTION(ast_timemap)( INTEGER(FLAGS),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(FLAGS)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- int i;
- char *options;
-
- astAt( "AST_TIMEMAP", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astTimeMap( *FLAGS, "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/ftranmap.c b/ast-5.3-1/ftranmap.c
deleted file mode 100644
index d6029e1..0000000
--- a/ast-5.3-1/ftranmap.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-*+
-* Name:
-* ftranmap.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST TranMap class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the TranMap class.
-
-* Routines Defined:
-* AST_ISATRANMAP
-* AST_TRANMAP
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S.Berry (Starlink)
-
-* History:
-* 10-FEB-2004 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "tranmap.h" /* C interface to the TranMap class */
-
-F77_LOGICAL_FUNCTION(ast_isatranmap)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astWatchSTATUS(
- astAt( "AST_ISATRANMAP", NULL, 0 );
- RESULT = astIsATranMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_tranmap)( INTEGER(MAP1),
- INTEGER(MAP2),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(MAP1)
- GENPTR_INTEGER(MAP2)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- int i;
- char *options;
-
- astAt( "AST_TRANMAP", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astTranMap( astI2P( *MAP1 ), astI2P( *MAP2 ),
- "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/funitmap.c b/ast-5.3-1/funitmap.c
deleted file mode 100644
index fc92cc6..0000000
--- a/ast-5.3-1/funitmap.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
-*+
-* Name:
-* funitmap.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST UnitMap class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the UnitMap class.
-
-* Routines Defined:
-* AST_ISAUNITMAP
-* AST_UNITMAP
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 25-SEP-1996 (RFWS):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "unitmap.h" /* C interface to the UnitMap class */
-
-F77_LOGICAL_FUNCTION(ast_isaunitmap)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAUNITMAP", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAUnitMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_unitmap)( INTEGER(NCOORD),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(NCOORD)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_UNITMAP", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astUnitMap( *NCOORD, "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fwcsmap.c b/ast-5.3-1/fwcsmap.c
deleted file mode 100644
index 2a6504f..0000000
--- a/ast-5.3-1/fwcsmap.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
-*+
-* Name:
-* fwcsmap.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST WcsMap class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the WcsMap class.
-
-* Routines Defined:
-* AST_ISAWCSMAP
-* AST_WCSMAP
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-
-* History:
-* 18-NOV-1996 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "wcsmap.h" /* C interface to the WcsMap class */
-
-F77_LOGICAL_FUNCTION(ast_isawcsmap)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAWCSMAP", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAWcsMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_wcsmap)( INTEGER(NAXES),
- INTEGER(TYPE),
- INTEGER(LONAX),
- INTEGER(LATAX),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(NAXES)
- GENPTR_INTEGER(TYPE)
- GENPTR_INTEGER(LONAX)
- GENPTR_INTEGER(LATAX)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_WCSMAP", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astWcsMap( *NAXES, *TYPE, *LONAX, *LATAX,
- "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fwinmap.c b/ast-5.3-1/fwinmap.c
deleted file mode 100644
index 728ca9e..0000000
--- a/ast-5.3-1/fwinmap.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
-*+
-* Name:
-* fwinmap.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST WinMap class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the WinMap class.
-
-* Routines Defined:
-* AST_ISAWINMAP
-* AST_WINMAP
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-
-* History:
-* 23-OCT-1996 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "winmap.h" /* C interface to the WinMap class */
-
-F77_LOGICAL_FUNCTION(ast_isawinmap)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAWINMAP", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAWinMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_winmap)( INTEGER(NAXES),
- DOUBLE(C1_IN),
- DOUBLE(C2_IN),
- DOUBLE(C1_OUT),
- DOUBLE(C2_OUT),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(NAXES)
- GENPTR_DOUBLE(C1_IN)
- GENPTR_DOUBLE(C2_IN)
- GENPTR_DOUBLE(C1_OUT)
- GENPTR_DOUBLE(C2_OUT)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_WINMAP", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astWinMap( *NAXES, C1_IN, C2_IN, C1_OUT, C2_OUT,
- "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/fxmlchan.c b/ast-5.3-1/fxmlchan.c
deleted file mode 100644
index 9809771..0000000
--- a/ast-5.3-1/fxmlchan.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
-*+
-* Name:
-* fxmlchan.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST XmlChan class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the XmlChan class.
-
-* Routines Defined:
-* AST_XMLCHAN
-* AST_ISAXMLCHAN
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 21-OCT-2003 (DSB):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "channel.h" /* Provides wrapper functions */
-#include "xmlchan.h" /* C interface to the XmlChan class */
-
-#include <stddef.h>
-
-/* Prototypes for external functions. */
-/* ================================== */
-/* This is the null function defined by the FORTRAN interface in fobject.c. */
-F77_SUBROUTINE(ast_null)( void );
-
-/* FORTRAN interface functions. */
-/* ============================ */
-/* These functions implement the remainder of the FORTRAN interface. */
-F77_INTEGER_FUNCTION(ast_xmlchan)( void (* SOURCE)(),
- void (* SINK)(),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- const char *(* source)( void );
- int i;
- void (* sink)( const char * );
-
- astAt( "AST_XMLCHAN", NULL, 0 );
- astWatchSTATUS(
-
-/* Set the source and sink function pointers to NULL if a pointer to
- the null routine AST_NULL has been supplied. */
- source = (const char *(*)( void )) SOURCE;
- if ( source == (const char *(*)( void )) F77_EXTERNAL_NAME(ast_null) ) {
- source = NULL;
- }
- sink = (void (*)( const char * )) SINK;
- if ( sink == (void (*)( const char * )) F77_EXTERNAL_NAME(ast_null) ) {
- sink = NULL;
- }
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astXmlChanFor( source, astSourceWrap, sink, astSinkWrap,
- "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_isaxmlchan)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAXMLCHAN", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAXmlChan( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-
-
-
diff --git a/ast-5.3-1/fzoommap.c b/ast-5.3-1/fzoommap.c
deleted file mode 100644
index 568144b..0000000
--- a/ast-5.3-1/fzoommap.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
-*+
-* Name:
-* fzoommap.c
-
-* Purpose:
-* Define a FORTRAN 77 interface to the AST ZoomMap class.
-
-* Type of Module:
-* C source file.
-
-* Description:
-* This file defines FORTRAN 77-callable C functions which provide
-* a public FORTRAN 77 interface to the ZoomMap class.
-
-* Routines Defined:
-* AST_ISAZOOMMAP
-* AST_ZOOMMAP
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 18-JUL-1996 (RFWS):
-* Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
- AST C functions from reporting the file and line number where the
- error occurred (since these would refer to this file, they would
- not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* F77 <-> C support functions/macros */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory handling facilities */
-#include "zoommap.h" /* C interface to the ZoomMap class */
-
-F77_LOGICAL_FUNCTION(ast_isazoommap)( INTEGER(THIS),
- INTEGER(STATUS) ) {
- GENPTR_INTEGER(THIS)
- F77_LOGICAL_TYPE(RESULT);
-
- astAt( "AST_ISAZOOMMAP", NULL, 0 );
- astWatchSTATUS(
- RESULT = astIsAZoomMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
- )
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_zoommap)( INTEGER(NAXES),
- DOUBLE(ZOOM),
- CHARACTER(OPTIONS),
- INTEGER(STATUS)
- TRAIL(OPTIONS) ) {
- GENPTR_INTEGER(NAXES)
- GENPTR_DOUBLE(ZOOM)
- GENPTR_CHARACTER(OPTIONS)
- F77_INTEGER_TYPE(RESULT);
- char *options;
- int i;
-
- astAt( "AST_ZOOMMAP", NULL, 0 );
- astWatchSTATUS(
- options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
- if ( astOK ) {
- for ( i = 0; options[ i ]; i++ ) {
- if ( options[ i ] == ',' ) options[ i ] = '\n';
- }
- }
- RESULT = astP2I( astZoomMap( *NAXES, *ZOOM, "%s", options ) );
- astFree( options );
- )
- return RESULT;
-}
diff --git a/ast-5.3-1/globals.c b/ast-5.3-1/globals.c
deleted file mode 100644
index 8cf24ef..0000000
--- a/ast-5.3-1/globals.c
+++ /dev/null
@@ -1,247 +0,0 @@
-#if defined( THREAD_SAFE )
-
-#define astCLASS
-
-#include "globals.h"
-#include "error.h"
-#include <pthread.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-/* Configuration results. */
-/* ---------------------- */
-#include <config.h>
-
-/* Select the appropriate memory management functions. These will be the
- system's malloc, free and realloc unless AST was configured with the
- "--with-starmem" option, in which case they will be the starmem
- malloc, free and realloc. */
-#ifdef HAVE_STAR_MEM_H
-# include <star/mem.h>
-# define MALLOC starMalloc
-# define FREE starFree
-# define REALLOC starRealloc
-#else
-# define MALLOC malloc
-# define FREE free
-# define REALLOC realloc
-#endif
-
-/* Module variables */
-/* ================ */
-
-/* A count of the number of thread-specific data structures created so
- far. Create a mutex to serialise access to this static variable. */
-static int nthread = 0;
-static pthread_mutex_t nthread_mutex = PTHREAD_MUTEX_INITIALIZER;
-
-/* External variables visible throughout AST */
-/* ========================================= */
-
-/* Set a flag indicating that the thread-specific data key has not yet
- been created. */
-pthread_once_t starlink_ast_globals_initialised = PTHREAD_ONCE_INIT;
-
-/* Declare the pthreads key that will be associated with the thread-specific
- data for each thread. */
-pthread_key_t starlink_ast_globals_key;
-
-/* Declare the pthreads key that will be associated with the thread-specific
- status value for each thread. */
-pthread_key_t starlink_ast_status_key;
-
-
-/* Function definitions: */
-/* ===================== */
-
-
-void astGlobalsCreateKey_( void ) {
-/*
-*+
-* Name:
-* astGlobalsCreateKey_
-
-* Purpose:
-* Create the thread specific data key used for accessing global data.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "globals.h"
-* astGlobalsCreateKey_()
-
-* Description:
-* This function creates the thread-specific data key. It is called
-* once only by the pthread_once function, which is invoked via the
-* astGET_GLOBALS(this) macro by each AST function that requires access to
-* global data.
-
-* Returned Value:
-* Zero for success.
-
-*-
-*/
-
-/* Create the key used to access thread-specific global data values.
- Report an error if it fails. */
- if( pthread_key_create( &starlink_ast_globals_key, NULL ) ) {
- fprintf( stderr, "ast: Failed to create Thread-Specific Data key" );
-
-/* If succesful, create the key used to access the thread-specific status
- value. Report an error if it fails. */
- } else if( pthread_key_create( &starlink_ast_status_key, NULL ) ) {
- fprintf( stderr, "ast: Failed to create Thread-Specific Status key" );
-
- }
-
-}
-
-AstGlobals *astGlobalsInit_( void ) {
-/*
-*+
-* Name:
-* astGlobalsInit
-
-* Purpose:
-* Create and initialise a structure holding thread-specific global
-* data values.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "globals.h"
-* AstGlobals *astGlobalsInit;
-
-* Description:
-* This function allocates memory to hold thread-specific global data
-* for use throughout AST, and initialises it.
-
-* Returned Value:
-* Pointer to the structure holding global data values for the
-* currently executing thread.
-
-*-
-*/
-
-/* Local Variables: */
- AstGlobals *globals;
- AstStatusBlock *status;
-
-/* Allocate memory to hold the global data values for the currently
- executing thread. Use malloc rather than astMalloc (the AST memory
- module uses global data managed by this module and so using astMalloc
- could put us into an infinite loop). */
- globals = MALLOC( sizeof( AstGlobals ) );
-
- if ( !globals ){
- fprintf( stderr, "ast: Failed to allocate memory to hold AST "
- "global data values" );
-
-/* Initialise the global data values. */
- } else {
-
-/* Each thread has a unique integer identifier. */
- pthread_mutex_lock( &nthread_mutex );
- globals->thread_identifier = nthread++;
- pthread_mutex_unlock( &nthread_mutex );
-
-#define INIT(class) astInit##class##Globals_( &(globals->class) );
- INIT( Error );
- INIT( Memory );
- INIT( Object );
- INIT( Axis );
- INIT( Mapping );
- INIT( Frame );
- INIT( Channel );
- INIT( CmpMap );
- INIT( KeyMap );
- INIT( FitsChan );
- INIT( CmpFrame );
- INIT( DSBSpecFrame );
- INIT( FrameSet );
- INIT( LutMap );
- INIT( MathMap );
- INIT( PcdMap );
- INIT( PointSet );
- INIT( SkyAxis );
- INIT( SkyFrame );
- INIT( SlaMap );
- INIT( SpecFrame );
- INIT( SphMap );
- INIT( TimeFrame );
- INIT( WcsMap );
- INIT( ZoomMap );
- INIT( FluxFrame );
- INIT( SpecFluxFrame );
- INIT( GrismMap );
- INIT( IntraMap );
- INIT( Plot );
- INIT( Plot3D );
- INIT( Region );
- INIT( Xml );
- INIT( XmlChan );
- INIT( Box );
- INIT( Circle );
- INIT( CmpRegion );
- INIT( DssMap );
- INIT( Ellipse );
- INIT( Interval );
- INIT( MatrixMap );
- INIT( NormMap );
- INIT( NullRegion );
- INIT( PermMap );
- INIT( PointList );
- INIT( PolyMap );
- INIT( Polygon );
- INIT( Prism );
- INIT( RateMap );
- INIT( SelectorMap );
- INIT( ShiftMap );
- INIT( SpecMap );
- INIT( Stc );
- INIT( StcCatalogEntryLocation );
- INIT( StcObsDataLocation );
- INIT( SwitchMap );
- INIT( TimeMap );
- INIT( TranMap );
- INIT( UnitMap );
- INIT( WinMap );
- INIT( StcResourceProfile );
- INIT( StcSearchLocation );
- INIT( StcsChan );
-#undef INIT
-
-/* Save the pointer as the value of the starlink_ast_globals_key
- thread-specific data key. */
- if( pthread_setspecific( starlink_ast_globals_key, globals ) ) {
- fprintf( stderr, "ast: Failed to store Thread-Specific Data pointer." );
-
-/* We also take this opportunity to allocate and initialise the
- thread-specific status value. */
- } else {
- status = MALLOC( sizeof( AstStatusBlock ) );
- if( status ) {
- status->internal_status = 0;
- status->status_ptr = &( status->internal_status );
-
-/* If succesful, store the pointer to this memory as the value of the
- status key for the currently executing thread. Report an error if
- this fails. */
- if( pthread_setspecific( starlink_ast_status_key, status ) ) {
- fprintf( stderr, "ast: Failed to store Thread-Specific Status pointer." );
- }
-
- } else {
- fprintf( stderr, "ast: Failed to allocate memory for Thread-Specific Status pointer." );
- }
- }
- }
-
-/* Return a pointer to the data structure holding the global data values. */
- return globals;
-}
-
-#endif
-
diff --git a/ast-5.3-1/globals.h b/ast-5.3-1/globals.h
deleted file mode 100644
index 2897b1b..0000000
--- a/ast-5.3-1/globals.h
+++ /dev/null
@@ -1,239 +0,0 @@
-#if !defined( GLOBALS_INCLUDED ) /* Include this file only once */
-#define GLOBALS_INCLUDED 1
-
-/* If thread-safety is required... */
-#if defined( THREAD_SAFE ) && ( defined( astCLASS ) || defined( astFORTRAN77) )
-
-/* Include files: */
-/* ============== */
-
-/* AST includes */
-#include "axis.h"
-#include "box.h"
-#include "channel.h"
-#include "circle.h"
-#include "cmpframe.h"
-#include "cmpmap.h"
-#include "cmpregion.h"
-#include "dsbspecframe.h"
-#include "dssmap.h"
-#include "ellipse.h"
-#include "error.h"
-#include "fitschan.h"
-#include "fluxframe.h"
-#include "frame.h"
-#include "frameset.h"
-#include "grismmap.h"
-#include "interval.h"
-#include "intramap.h"
-#include "keymap.h"
-#include "lutmap.h"
-#include "mapping.h"
-#include "mathmap.h"
-#include "matrixmap.h"
-#include "memory.h"
-#include "normmap.h"
-#include "nullregion.h"
-#include "object.h"
-#include "pcdmap.h"
-#include "permmap.h"
-#include "plot.h"
-#include "plot3d.h"
-#include "pointlist.h"
-#include "pointset.h"
-#include "polygon.h"
-#include "polymap.h"
-#include "prism.h"
-#include "ratemap.h"
-#include "region.h"
-#include "selectormap.h"
-#include "shiftmap.h"
-#include "skyaxis.h"
-#include "skyframe.h"
-#include "slamap.h"
-#include "specfluxframe.h"
-#include "specframe.h"
-#include "specmap.h"
-#include "sphmap.h"
-#include "stc.h"
-#include "stccatalogentrylocation.h"
-#include "stcobsdatalocation.h"
-#include "stcresourceprofile.h"
-#include "stcsearchlocation.h"
-#include "stcschan.h"
-#include "switchmap.h"
-#include "timeframe.h"
-#include "timemap.h"
-#include "tranmap.h"
-#include "unitmap.h"
-#include "wcsmap.h"
-#include "winmap.h"
-#include "xml.h"
-#include "xmlchan.h"
-#include "zoommap.h"
-
-
-
-/* System includes */
-#include <pthread.h>
-
-/* Macros */
-/* ====== */
-
-/* The name of the variable used to access thread-specific global data */
-#define AST__GLOBALS ast_globals
-
-/* Defines a macro that gives access to a specific global data item. */
-#define astGLOBAL(class,name) (AST__GLOBALS->class.name)
-
-
-/* Declares the pointer for the structure holding thread-specific values
- for AST global data. */
-#define astDECLARE_GLOBALS AstGlobals *AST__GLOBALS;
-
-
-/* A macro that should be invoked in each function that refers to a
- global data item. The "This" parameter should be a pointer to an
- Object, or NULL. It ensures the thread-specific data key has been
- created. It also allocates and initialises memory to hold the global
- data. */
-#define astGET_GLOBALS(This) \
-\
-/* If the supplied Object pointer contains a pointer to the thread-specific \
- data structure, return it. */ \
- if( This && ((AstObject *)This)->globals ) { \
- AST__GLOBALS = ((AstObject *)This)->globals; \
-\
-/* Otherwise, ensure that the thread specific data key has been created. */ \
- } else if( pthread_once( &starlink_ast_globals_initialised, \
- astGlobalsCreateKey_ ) ) { \
- AST__GLOBALS = NULL; \
- fprintf( stderr, "Starlink AST package initialisation failed." ); \
-\
-/* If the current thread does not yet have a structure to hold \
- thread-specific global data, create one now (initialising its \
- contents) and associate it with the thread speciifc data key. */ \
- } else if( ( AST__GLOBALS = \
- pthread_getspecific( starlink_ast_globals_key ) ) == NULL ) { \
- AST__GLOBALS = astGlobalsInit_(); \
- if( pthread_setspecific( starlink_ast_globals_key, AST__GLOBALS ) ) { \
- fprintf( stderr, "Starlink AST failed to store Thread-Specific " \
- "Data pointer." ); \
- } \
- }
-
-
-/* A macro that expands to the value of a unique integer identifier for
- the calling thread. */
-#define AST__THREAD_ID (AST__GLOBALS->thread_identifier) \
-
-
-#define astMAKE_INITGLOBALS(class) \
-\
-void astInit##class##Globals_( Ast##class##Globals *globals ){ \
- GLOBAL_inits \
-}
-
-/* Type definitions */
-/* ================ */
-
-typedef struct AstGlobals {
- int thread_identifier;
- AstMemoryGlobals Memory;
- AstErrorGlobals Error;
- AstObjectGlobals Object;
- AstAxisGlobals Axis;
- AstMappingGlobals Mapping;
- AstFrameGlobals Frame;
- AstChannelGlobals Channel;
- AstCmpMapGlobals CmpMap;
- AstKeyMapGlobals KeyMap;
- AstFitsChanGlobals FitsChan;
- AstCmpFrameGlobals CmpFrame;
- AstDSBSpecFrameGlobals DSBSpecFrame;
- AstFrameSetGlobals FrameSet;
- AstLutMapGlobals LutMap;
- AstMathMapGlobals MathMap;
- AstPcdMapGlobals PcdMap;
- AstPointSetGlobals PointSet;
- AstSkyAxisGlobals SkyAxis;
- AstSkyFrameGlobals SkyFrame;
- AstSlaMapGlobals SlaMap;
- AstSpecFrameGlobals SpecFrame;
- AstSphMapGlobals SphMap;
- AstTimeFrameGlobals TimeFrame;
- AstWcsMapGlobals WcsMap;
- AstZoomMapGlobals ZoomMap;
- AstFluxFrameGlobals FluxFrame;
- AstSpecFluxFrameGlobals SpecFluxFrame;
- AstGrismMapGlobals GrismMap;
- AstIntraMapGlobals IntraMap;
- AstPlotGlobals Plot;
- AstPlot3DGlobals Plot3D;
- AstRegionGlobals Region;
- AstBoxGlobals Box;
- AstXmlGlobals Xml;
- AstXmlChanGlobals XmlChan;
- AstCircleGlobals Circle;
- AstCmpRegionGlobals CmpRegion;
- AstDssMapGlobals DssMap;
- AstEllipseGlobals Ellipse;
- AstIntervalGlobals Interval;
- AstMatrixMapGlobals MatrixMap;
- AstNormMapGlobals NormMap;
- AstNullRegionGlobals NullRegion;
- AstPermMapGlobals PermMap;
- AstPointListGlobals PointList;
- AstPolyMapGlobals PolyMap;
- AstPolygonGlobals Polygon;
- AstPrismGlobals Prism;
- AstRateMapGlobals RateMap;
- AstSelectorMapGlobals SelectorMap;
- AstShiftMapGlobals ShiftMap;
- AstSpecMapGlobals SpecMap;
- AstStcGlobals Stc;
- AstStcCatalogEntryLocationGlobals StcCatalogEntryLocation;
- AstStcObsDataLocationGlobals StcObsDataLocation;
- AstSwitchMapGlobals SwitchMap;
- AstTimeMapGlobals TimeMap;
- AstTranMapGlobals TranMap;
- AstUnitMapGlobals UnitMap;
- AstWinMapGlobals WinMap;
- AstStcResourceProfileGlobals StcResourceProfile;
- AstStcSearchLocationGlobals StcSearchLocation;
- AstStcsChanGlobals StcsChan;
-} AstGlobals;
-
-
-/* Externally declared variables */
-/* ============================= */
-
-
-/* The pthreads key that is associated with the thread-specific data for
- each thread. Declared in global.c. */
-extern pthread_key_t starlink_ast_globals_key;
-
-/* The pthreads key that is associated with the thread-specific status
- value for each thread. Declared in global.c. */
-extern pthread_key_t starlink_ast_status_key;
-
-/* This is a flag indicating that the thread-specific data key has not yet
- been created. Declared in globals.c. */
-extern pthread_once_t starlink_ast_globals_initialised;
-
-/* Function Prototypes: */
-/* ==================== */
-
-void astGlobalsCreateKey_( void );
-AstGlobals *astGlobalsInit_( void );
-
-
-/* If thread-safety is not required, define some null macros. */
-#else
-
-#define astDECLARE_GLOBALS
-#define astGET_GLOBALS(This)
-#define astINIT_GLOBALS
-
-#endif
-#endif
diff --git a/ast-5.3-1/grf.h b/ast-5.3-1/grf.h
deleted file mode 100644
index 978108b..0000000
--- a/ast-5.3-1/grf.h
+++ /dev/null
@@ -1,108 +0,0 @@
-#if !defined( GRF_INCLUDED ) /* Include this file only once */
-#define GRF_INCLUDED
-/*
-*+
-* Name:
-* grf.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the grf module
-
-* Invocation:
-* #include "grf.h"
-
-* Description:
-* This include file defines the interface to the grf module and
-* provides the type definitions, function prototypes and macros, etc.
-* needed to use this module.
-
-* Inheritance:
-* The grf module is not a class and does not inherit.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 27-JUN-1996 (DSB):
-* Original version.
-* 25-OCT-1996 (DSB):
-* Primatives macros defined, extra parameter added to astGAttr.
-* 17-FEB-2006 (DSB):
-* Added GRF__ESH and GRF__ESG.
-*-
-*/
-
-/* Constant Values. */
-/* ================ */
-/* Values identifying different graphics attributes. */
-#define GRF__STYLE 0
-#define GRF__WIDTH 1
-#define GRF__SIZE 2
-#define GRF__FONT 3
-#define GRF__COLOUR 4
-
-/* Values identifying different graphics primatives. */
-#define GRF__TEXT 0
-#define GRF__LINE 1
-#define GRF__MARK 2
-
-/* The number of different graphics attributes */
-#define GRF__NATTR 5
-
-/* Values identifying capabilities */
-#define GRF__ESC 0
-#define GRF__MJUST 1
-#define GRF__SCALES 2
-
-/* Values identifying types of graphics escape sequence */
-#define GRF__ESPER 1
-#define GRF__ESSUP 2
-#define GRF__ESSUB 3
-#define GRF__ESGAP 4
-#define GRF__ESBAC 5
-#define GRF__ESSIZ 6
-#define GRF__ESWID 7
-#define GRF__ESFON 8
-#define GRF__ESCOL 9
-#define GRF__ESSTY 10
-#define GRF__ESPOP 11
-#define GRF__ESPSH 12
-#define GRF__ESH 13
-#define GRF__ESG 14
-
-/* Function prototypes. */
-/* ==================== */
-int astGAttr( int, double, double *, int );
-int astGScales( float *, float * );
-int astGFlush( void );
-int astGLine( int, const float *, const float * );
-int astGMark( int, const float *, const float *, int );
-int astGQch( float *, float * );
-int astGText( const char *, float, float, const char *, float, float );
-int astGTxExt( const char *, float, float, const char *, float, float, float *, float * );
-int astGCap( int, int );
-
-#endif
diff --git a/ast-5.3-1/grf3d.c b/ast-5.3-1/grf3d.c
deleted file mode 100644
index e9a7650..0000000
--- a/ast-5.3-1/grf3d.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
-* Name:
-* grf3d.c
-
-* Purpose:
-* Implement the grf3D interface if no graphics system is available.
-
-* Description:
-* This file implements the low level 3D graphics functions required
-* by the rest of AST. These implementations simply report an error
-* when called.
-
-* Inheritance:
-* This module is not a class and does not inherit.
-
-* Copyright:
-* Copyright (C) 2007 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (JACH - UCLan)
-
-* History:
-* 20-JUN-2007 (DSB):
-* Original version.
-*/
-
-/* Header files */
-/* ============ */
-#include "grf3d.h" /* Declare the functions in this module */
-#include "error.h" /* AST error reporting facilities */
-#include "ast_err.h" /* AST error codes */
-
-/* Function Prototypes */
-/* =================== */
-static void Report( const char * );
-
-/* Function definitions */
-/* ==================== */
-int astG3DCap( int cap, int value ){
- return 0;
-}
-
-int astG3DFlush( void ){
- Report( "astG3DFlush");
- return 0;
-}
-
-int astG3DLine( int n, float *x, float *y, float *z ){
- Report( "astG3DLine" );
- return 0;
-}
-
-int astG3DQch( float *ch ){
- Report( "astG3DQch" );
- return 0;
-}
-
-int astG3DMark( int n, float *x, float *y, float *z, int type, float norm[3] ){
- Report( "astG3DMark" );
- return 0;
-}
-
-int astG3DText( const char *text, float ref[3], const char *just,
- float up[3], float norm[3] ){
- Report( "astG3DText" );
- return 0;
-}
-
-int astG3DTxExt( const char *text, float ref[3], const char *just,
- float up[3], float norm[3], float *xb, float *yb,
- float *zb, float bl[3] ){
- Report( "astG3DTxExt" );
- return 0;
-}
-
-int astG3DAttr( int attr, double value, double *old_value, int prim ){
- Report( "astG3DAttr" );
- return 0;
-}
-
-static void Report( const char *name ){
- astError( AST__GRFER, "%s: No graphics facilities are available.", name );
- astError( AST__GRFER, "Re-link using an option such as '-pgplot' with "
- "the ast_link script." );
-}
diff --git a/ast-5.3-1/grf3d.h b/ast-5.3-1/grf3d.h
deleted file mode 100644
index f9e2495..0000000
--- a/ast-5.3-1/grf3d.h
+++ /dev/null
@@ -1,69 +0,0 @@
-#if !defined( GRF3D_INCLUDED ) /* Include this file only once */
-#define GRF3D_INCLUDED
-/*
-*+
-* Name:
-* grf3d.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the grf3d module
-
-* Invocation:
-* #include "grf3d.h"
-
-* Description:
-* This include file defines the interface to the grf3d module and
-* provides the type definitions, function prototypes and macros, etc.
-* needed to use this module.
-
-* Inheritance:
-* The grf3d module is not a class and does not inherit.
-
-* Copyright:
-* Copyright (C) 2007 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (JACH - UCLan)
-
-* History:
-* 20-JUN-2007 (DSB):
-* Original version.
-*-
-*/
-
-/* Include the 2D grf header file in order to inherit the GRF__ macros. */
-#include "grf.h"
-
-/* Function prototypes. */
-/* ==================== */
-int astG3DAttr( int, double, double *, int );
-int astG3DCap( int, int );
-int astG3DFlush( void );
-int astG3DLine( int, float *, float *, float * );
-int astG3DMark( int, float *, float *, float *, int, float[3] );
-int astG3DQch( float * );
-int astG3DText( const char *, float[3], const char *, float[3], float[3] );
-int astG3DTxExt( const char *, float[3], const char *, float[3], float[3], float *, float *, float *, float[3] );
-
-
-#endif
diff --git a/ast-5.3-1/grf3d_pgplot.c b/ast-5.3-1/grf3d_pgplot.c
deleted file mode 100644
index 8057b50..0000000
--- a/ast-5.3-1/grf3d_pgplot.c
+++ /dev/null
@@ -1,3196 +0,0 @@
-/*
-* Name:
-* grf3d_pgplot.c
-
-* Purpose:
-* Implement the grf3d interface using the PGPLOT graphics system.
-
-* Description:
-* This file implements the low level 3D graphics functions required
-* by the rest of AST, by calling suitable PGPLOT functions (the
-* FORTRAN PGPLOT interface is used).
-*
-* This file can be used as a template for the development of
-* similar implementations based on other graphics systems.
-*
-* Unlike world coordinates used by the 2D grf interface, the 3D world
-* coordinates used by the grf3D interface are assume to be equally scaled
-* (that is, they are assumed to have the same units). Therefore this
-* module has no equivalent to the astGScales function defined by the
-* 2D grf interface.
-
-* Copyright:
-* Copyright (C) 2007 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 20-JUN-2007 (DSB):
-* Original version.
-*/
-
-
-/* Macros */
-/* ====== */
-#define MXDEV 16 /* Max no of concurrent PGPLOT devices */
-#define MXSTRLEN 80 /* Max PGPLOT string length */
-#define CAMERA_OK 123456789 /* Flags that a Camera has been initialised */
-#define TWOPI 6.28318530718 /* 2*PI */
-#define MXSIDE 32 /* Max no of sides in a marker polygon */
-
-
-/* Header files. */
-/* ============= */
-/* AST header files */
-#include "grf3d.h" /* The grf3D interface definition */
-#include "pg3d.h" /* Other public functions in this module */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* C to FORTRAN interface functions */
-#include "memory.h" /* Memory allocation facilities */
-#include "error.h" /* Error reporting facilities */
-#include "pointset.h" /* Defines AST__BAD */
-#include "ast_err.h" /* AST error codes */
-
-/* System header files */
-#include <string.h>
-#include <math.h>
-#include <float.h>
-#include <limits.h>
-#include <stdio.h>
-
-
-/* Type definitions. */
-/* ================= */
-/* Structure defining the position and orientation of the camera in 3D
- world coords. This is specific to the PGPLOT implementation. Other
- implementations need not include any equivalent to this structure. */
-typedef struct camera {
- float eye_vector[3];
- float target_vector[3];
- float up_vector[3];
- float w2c_matrix[9];
- float screen_distance;
- int ok_flag;
-} Camera;
-
-
-/* Module variables. */
-/* ================= */
-/* One camera structure for each PGPLOT device identifier. PGPLOT allows
- a maximum of 8 concurrent devices at the moment. Make the array twice
- this size to allow for some future expansion in PGPLOT. Again, this is
- specific to the PGPLOT implementation of the grf3D interface. */
-static Camera cameras[ MXDEV ];
-
-/* Function templates. */
-/* =================== */
-/* Templates for functions that are private to this module. */
-static Camera *getCamera( int );
-static float getCharHeight( void );
-static int Polygon( int, float *, float *, float *, float[3], float[3], float[3], float[3] );
-static int Text( int *, int, float[3], const char *, float[3], float[3], float[3] );
-static int TextCam( Camera *, float[3], float[3], float[3], float[3] );
-static int TxExt( int *, int, float[3], const char *, float[3], float[3], float[3], float *, float *, float *, float[3] );
-static int getTextAxes( float[3], float[3], float[3], const char *, float[3], float[3], float[3], char[3] );
-static int transform( Camera *, int, float *, float *, float *, float *, float * );
-static int vectorNorm( float * );
-static float vectorModulus( float * );
-static void getSymbolList( const char *, int, int *, int * );
-static void vectorProduct( float *, float *, float * );
-static float dotProduct( float *, float * );
-static void vectorSub( float *, float *, float * );
-
-/* Templates for private functions that wrap PGPLOT Fortran routines. */
-static void ccgrsyds( int *, int *, const char *, int, int );
-static void ccgrsymk( int, int, int * );
-static void ccgrsyxd( int, int *, int * );
-static void ccpgline( int, float[], float[] );
-static void ccpgpoly( int, float[], float[] );
-static void ccpgqcf( int * );
-static void ccpgqcf(int *);
-static void ccpgqch( float * );
-static void ccpgqci( int * );
-static void ccpgqclp( int * );
-static void ccpgqid( int * );
-static void ccpgqls( int * );
-static void ccpgqlw( int * );
-static void ccpgqvsz( int, float *, float *, float *, float * );
-static void ccpgqwin( float *, float *, float *, float * );
-static void ccpgscf( int );
-static void ccpgsch( float );
-static void ccpgsci( int );
-static void ccpgsclp( int );
-static void ccpgsls( int );
-static void ccpgslw( int );
-static void ccpgswin( float, float, float, float );
-static void ccpgupdt( void );
-
-
-/* Templates for Fortran PGPLOT routines needed by this module. */
-F77_SUBROUTINE(grsyds)( INTEGER_ARRAY(list), INTEGER(nlist), CHARACTER(text), INTEGER(font) TRAIL(text) );
-F77_SUBROUTINE(grsymk)( INTEGER(type), INTEGER(font), INTEGER(symbol) );
-F77_SUBROUTINE(grsyxd)( INTEGER(symbol), INTEGER_ARRAY(xygrid), INTEGER(unused) );
-F77_SUBROUTINE(pgline)( INTEGER(N), REAL_ARRAY(X), REAL_ARRAY(Y) );
-F77_SUBROUTINE(pgpoly)( INTEGER(N), REAL_ARRAY(X), REAL_ARRAY(Y) );
-F77_SUBROUTINE(pgqcf)( INTEGER(ival) );
-F77_SUBROUTINE(pgqch)( REAL(rval) );
-F77_SUBROUTINE(pgqci)( INTEGER(ival) );
-F77_SUBROUTINE(pgqclp)( INTEGER(clip) );
-F77_SUBROUTINE(pgqid)( INTEGER(id) );
-F77_SUBROUTINE(pgqls)( INTEGER(ival) );
-F77_SUBROUTINE(pgqlw)( INTEGER(ival) );
-F77_SUBROUTINE(pgqvsz)( INTEGER(units), REAL(x1), REAL(x2), REAL(y1), REAL(y2) );
-F77_SUBROUTINE(pgqwin)( REAL(wx1), REAL(wx2), REAL(wy1), REAL(wy2) );
-F77_SUBROUTINE(pgscf)( INTEGER(ival) );
-F77_SUBROUTINE(pgsch)( REAL(rval) );
-F77_SUBROUTINE(pgsci)( INTEGER(ival) );
-F77_SUBROUTINE(pgsclp)( INTEGER(clip) );
-F77_SUBROUTINE(pgsls)( INTEGER(ival) );
-F77_SUBROUTINE(pgslw)( INTEGER(ival) );
-F77_SUBROUTINE(pgswin)( REAL(X1), REAL(X2), REAL(Y1), REAL(Y2) );
-F77_SUBROUTINE(pgupdt)( void );
-
-
-/* Public functions defined by the grf3D interface. */
-/* ================================================ */
-/* All implementations of the grf3d interface must provide implementations
- of all the functions in this block. The corresponding templates are in
- grf3d.h */
-
-
-int astG3DAttr( int attr, double value, double *old_value, int prim ){
-/*
-*+
-* Name:
-* astG3DAttr
-
-* Purpose:
-* Enquire or set a 3D graphics attribute value.
-
-* Synopsis:
-* #include "grf3d.h"
-* int int astG3DAttr( int attr, double value, double *old_value, int prim )
-
-* Description:
-* This function returns the current value of a specified 3D graphics
-* attribute, and optionally establishes a new value. The supplied
-* value is converted to an integer value if necessary before use.
-
-* Parameters:
-* attr
-* An integer value identifying the required attribute. The
-* following symbolic values are defined in grf3d.h:
-*
-* GRF__STYLE - Line style.
-* GRF__WIDTH - Line width.
-* GRF__SIZE - Character and marker size scale factor.
-* GRF__FONT - Character font.
-* GRF__COLOUR - Colour index.
-* value
-* A new value to store for the attribute. If this is AST__BAD
-* no value is stored.
-* old_value
-* A pointer to a double in which to return the attribute value.
-* If this is NULL, no value is returned.
-* prim
-* The sort of graphics primitive to be drawn with the new attribute.
-* Identified by the following values defined in grf.h:
-* GRF__LINE
-* GRF__MARK
-* GRF__TEXT
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-* Notes:
-
-*-
-*/
-
- int ival;
- float rval, dx, dy, deflw, x1, x2, y1, y2;
-
-/* If required retrieve the current line style, and set a new line style. */
- if( attr == GRF__STYLE ){
- ccpgqls( &ival );
- if( old_value ) *old_value = (double) ival;
-
- if( value != AST__BAD ){
- ival = (int) ( value + 0.5 );
- if( value < 0.0 ) ival -= 1;
-
- ival = ( ival - 1 ) % 5;
- ival += ( ival < 0 ) ? 6 : 1;
-
- ccpgsls( ival );
- }
-
-/* If required retrieve the current line width, and set a new line width.
- Line width is stored in Plot as a scale factor (1.0 for the default line
- width which is a fixed fraction of the diagonal of the view surface), but
- pgplot stores it in units of 0.005 of an inch. */
- } else if( attr == GRF__WIDTH ){
-
-/* Get the bounds of the view surface in inches. */
- ccpgqvsz( 1, &x1, &x2, &y1, &y2 );
-
-/* Find the default line width in inches (i.e. 0.0005 of the length
- of the view surface diagonal). */
- dx = ( x1 - x2 );
- dy = ( y1 - y2 );
- deflw = 0.0005*sqrt( (double )( dx*dx + dy*dy ) );
-
-/* Get the current pgplot line width in units of 0.005 of an inch. */
- ccpgqlw( &ival );
-
-/* If required, return the factor by which this exceeds the default line
- width found above. */
- if( old_value ) *old_value = (double)( ival )/( 200.0 * deflw );
-
-/* If a new line width has been provided, the pgplot line width needs to
- be set to the corresponding absolute value. */
- if( value != AST__BAD ){
- ival = (int) ( 200.0*value*deflw );
- if( ival < 1 ) {
- ival = 1;
- } else if( ival > 201 ){
- ival = 201;
- }
- ccpgslw( ival );
- }
-
-/* If required retrieve the current character size, and set a new size.
- The attribute value should be a factor by which to multiply the
- default character size. */
- } else if( attr == GRF__SIZE ){
- ccpgqch( &rval );
- if( old_value ) *old_value = (double) rval;
-
- if( value != AST__BAD ){
- ccpgsch( (float) value );
- }
-
-/* If required retrieve the current character font, and set a new font. */
- } else if( attr == GRF__FONT ){
- ccpgqcf( &ival );
- if( old_value ) *old_value = (double) ival;
-
- if( value != AST__BAD ){
- ival = (int) ( value + 0.5 );
- if( value < 0.0 ) ival -= 1;
-
- ival = ( ival - 1 ) % 4;
- ival += ( ival < 0 ) ? 5 : 1;
- ccpgscf( ival );
- }
-
-/* If required retrieve the current colour index, and set a new colour
- index. */
- } else if( attr == GRF__COLOUR ){
- ccpgqci( &ival );
- if( old_value ) *old_value = (double) ival;
-
- if( value != AST__BAD ){
- ival = (int) ( value + 0.5 );
- if( ival < 0 ) ival = 1;
- ccpgsci( ival );
- }
-
-/* Give an error message for any other attribute value. */
- } else {
- astError( AST__GRFER, "astG3DAttr: Unknown graphics attribute '%d' "
- "requested.", attr );
- return 0;
- }
-
-/* Return. */
- return 1;
-}
-
-int astG3DCap( int cap, int value ){
-/*
-*+
-* Name:
-* astG3DCap
-
-* Purpose:
-* Indicate if this grf3d module has a given capability.
-
-* Synopsis:
-* #include "grf3d.h"
-* int astG3DCap( int cap, int value )
-
-* Description:
-* This function is called by the AST Plot class to determine if the
-* grf3d module has a given capability, as indicated by the "cap"
-* argument.
-
-* Parameters:
-* cap
-* The capability being inquired about. This will be one of the
-* following constants defined in grf3d.h:
-*
-* GRF3D__ESC: This function should return a non-zero value if the
-* astG3DText and astG3DTxExt functions can recognise and interpret
-* graphics escape sequences within the supplied string. These
-* escape sequences are described below. Zero should be returned
-* if escape sequences cannot be interpreted (in which case the
-* Plot class will interpret them itself if needed). The supplied
-* "value" argument should be ignored only if escape sequences cannot
-* be interpreted by astG3DText and astG3DTxExt. Otherwise, "value"
-* indicates whether astG3DText and astG3DTxExt should interpret escape
-* sequences in subsequent calls. If "value" is non-zero then
-* escape sequences should be interpreted by astG3DText and
-* astG3DTxExt. Otherwise, they should be drawn as literal text.
-
-* Returned Value:
-* The return value, as described above. Zero should be returned if
-* the supplied capability is not recognised.
-
-* Escape Sequences:
-* Escape sequences are introduced into the text string by a percent
-* "%" character. The following escape sequences are currently recognised
-* ("..." represents a string of one or more decimal digits):
-*
-* %% - Print a literal "%" character (type GRF__ESPER ).
-*
-* %^...+ - Draw subsequent characters as super-scripts. The digits
-* "..." give the distance from the base-line of "normal"
-* text to the base-line of the super-script text, scaled
-* so that a value of "100" corresponds to the height of
-* "normal" text (type GRF__ESSUP ).
-* %^+ - Draw subsequent characters with the normal base-line.
-*
-* %v...+ - Draw subsequent characters as sub-scripts. The digits
-* "..." give the distance from the base-line of "normal"
-* text to the base-line of the sub-script text, scaled
-* so that a value of "100" corresponds to the height of
-* "normal" text (type GRF__ESSUB ).
-*
-* %v+ - Draw subsequent characters with the normal base-line
-* (equivalent to %^+).
-*
-* %>...+ - Leave a gap before drawing subsequent characters.
-* The digits "..." give the size of the gap, scaled
-* so that a value of "100" corresponds to the height of
-* "normal" text (type GRF__ESGAP ).
-*
-* %<...+ - Move backwards before drawing subsequent characters.
-* The digits "..." give the size of the movement, scaled
-* so that a value of "100" corresponds to the height of
-* "normal" text (type GRF_ESBAC).
-*
-* %s...+ - Change the Size attribute for subsequent characters. The
-* digits "..." give the new Size as a fraction of the
-* "normal" Size, scaled so that a value of "100" corresponds
-* to 1.0 (type GRF__ESSIZ ).
-*
-* %s+ - Reset the Size attribute to its "normal" value.
-*
-* %w...+ - Change the Width attribute for subsequent characters. The
-* digits "..." give the new width as a fraction of the
-* "normal" Width, scaled so that a value of "100" corresponds
-* to 1.0 (type GRF__ESWID ).
-*
-* %w+ - Reset the Size attribute to its "normal" value.
-*
-* %f...+ - Change the Font attribute for subsequent characters. The
-* digits "..." give the new Font value (type GRF__ESFON ).
-*
-* %f+ - Reset the Font attribute to its "normal" value.
-*
-* %c...+ - Change the Colour attribute for subsequent characters. The
-* digits "..." give the new Colour value (type GRF__ESCOL ).
-*
-* %c+ - Reset the Colour attribute to its "normal" value.
-*
-* %t...+ - Change the Style attribute for subsequent characters. The
-* digits "..." give the new Style value (type GRF__ESSTY ).
-*
-* %t+ - Reset the Style attribute to its "normal" value.
-*
-* %- - Push the current graphics attribute values onto the top of
-* the stack - see "%+" (type GRF__ESPSH).
-*
-* %+ - Pop attributes values of the top the stack - see "%-". If
-* the stack is empty, "normal" attribute values are restored
-* (type GRF__ESPOP).
-*
-* The astFindEscape function (in libast.a) can be used to locate escape
-* sequences within a text string. It has the following signature:
-*
-* #include "plot.h"
-* int astFindEscape( const char *text, int *type, int *value, int *nc )
-*
-* Parameters:
-* text
-* Pointer to the string to be checked.
-* type
-* Pointer to a location at which to return the type of escape
-* sequence. Each type is identified by a symbolic constant defined
-* in grf.h and is indicated in the above section. The returned value
-* is undefined if the supplied text does not begin with an escape
-* sequence.
-* value
-* Pointer to a lcation at which to return the integer value
-* associated with the escape sequence. All usable values will be
-* positive. Zero is returned if the escape sequence has no associated
-* integer. A value of -1 indicates that the attribute identified by
-* "type" should be reset to its "normal" value (as established using
-* the astG3DAttr function, etc). The returned value is undefined if
-* the supplied text does not begin with an escape sequence.
-* nc
-* Pointer to a location at which to return the number of
-* characters read by this call. If the text starts with an escape
-* sequence, the returned value will be the number of characters in
-* the escape sequence. Otherwise, the returned value will be the
-* number of characters prior to the first escape sequence, or the
-* length of the supplied text if no escape sequence is found.
-
-* Returned Value:
-* A non-zero value is returned if the supplied text starts with a
-* graphics escape sequence, and zero is returned otherwise.
-
-*-
-*/
-
- return 0;
-}
-
-int astG3DFlush( void ){
-/*
-*+
-* Name:
-* astG3DFlush
-
-* Purpose:
-* Flush all pending graphics to the output device.
-
-* Synopsis:
-* #include "grf3d.h"
-* int astG3DFlush( void )
-
-* Description:
-* This function ensures that the display device is up-to-date,
-* by flushing any pending graphics to the output device.
-
-* Parameters:
-* None.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-*-
-*/
-
- ccpgupdt();
- return 1;
-}
-
-int astG3DLine( int n, float *x, float *y, float *z ){
-/*
-*+
-* Name:
-* astG3DLine
-
-* Purpose:
-* Draw a polyline (i.e. a set of connected lines).
-
-* Synopsis:
-* #include "grf3d.h"
-* int astG3DLine( int n, float *x, float *y, float *z )
-
-* Description:
-* This function displays lines joining the given positions.
-
-* Parameters:
-* n
-* The number of positions to be joined together.
-* x
-* A pointer to an array holding the "n" x values.
-* y
-* A pointer to an array holding the "n" y values.
-* z
-* A pointer to an array holding the "n" z values.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-* Notes:
-* - A camera must have been established prior to calling this
-* function using either astG3DSetCamera or astG3DAutoCamera.
-* - Nothing is done if "n" is less than 2, or if a NULL pointer is
-* given for either "x", "y" or "z".
-
-*-
-*/
-
-/* Local Variables: */
- int clip;
- int result = 0;
- float *h, *r;
-
-/* Do nothing if we have less than 2 points, but do not indicate an error. */
- if( n < 2 ){
- result = 1;
-
-/* Check the pointers. */
- } else if( x && y && z ) {
-
-/* Save the current clipping flag, and ensure clipping is off. */
- ccpgqclp( &clip );
- ccpgsclp( 0 );
-
-/* Allocate work space for the 2D world coordinate positions. */
- h = astMalloc( sizeof( float )*(size_t) n );
- r = astMalloc( sizeof( float )*(size_t) n );
- if( astOK ) {
-
-/* Convert the supplied points from 3D world coordinates to 2D world
- (i.e. screen) coordinates. If succesful, plot the lines. */
- if( transform( NULL, n, x, y, z, h, r ) ) {
- ccpgline( n, (float *) h, (float *) r );
- result = 1;
- }
- }
-
-/* Free work space. */
- h = astFree( h );
- r = astFree( r );
-
-/* Re-instate original clipping flag. */
- ccpgsclp( clip );
-
- }
- return result;
-}
-
-int astG3DMark( int n, float *x, float *y, float *z, int type,
- float norm[3] ){
-/*
-*+
-* Name:
-* astG3DMark
-
-* Purpose:
-* Draw a set of markers.
-
-* Synopsis:
-* #include "grf.h"
-* int astG3DMark( int n, float *x, float *y, float *z, int type,
-* float norm[3] )
-
-* Description:
-* This function draws markers centred at the given positions, on a
-* plane with a specified normal vector.
-
-* Parameters:
-* n
-* The number of markers to draw.
-* x
-* A pointer to an array holding the "n" x values.
-* y
-* A pointer to an array holding the "n" y values.
-* z
-* A pointer to an array holding the "n" z values.
-* type
-* An integer which can be used to indicate the type of marker symbol
-* required. See the description of routine PGPT in the PGPLOT manual.
-* norm
-* The (x,y,z) components of a vector that is normal to the plane
-* containing the marker. The given vector passes through the marker
-* from the back to the front. If all components of this vector are
-* zero, then a normal vector pointing from the position of the
-* first marker towards the camera eye is used.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-* Notes:
-* - Nothing is done if "n" is less than 1, or if a NULL pointer is
-* given for "x", "y" or "z".
-
-*-
-*/
-
-/* local Variables: */
- char just[3];
- float ref[3];
- float up[3];
- float tx[3], ty[3], tz[3];
- float vx[ MXSIDE ], vy[ MXSIDE ], vz[ MXSIDE ];
- float ch, ang, dang;
- int clip;
- int font;
- int i;
- int nlist;
- int symnum;
- int ns;
-
-/* Return if any of the coordinate pointers is NULL. */
- if( !x || !y || !z ) return 1;
-
-/* Initialise */
- ns = 0;
-
-/* Unless the "norm" vector is parallel to the z axis, we use an up vector
- that is parallel to the z axis. Otherwise we use an up vector paralle
- to the x axis. */
- if( norm[ 0 ] != 0.0 || norm[ 1 ] != 0.0 ) {
- up[ 0 ] = 0.0;
- up[ 1 ] = 0.0;
- up[ 2 ] = 1.0;
- } else {
- up[ 0 ] = 1.0;
- up[ 1 ] = 0.0;
- up[ 2 ] = 0.0;
- }
-
-/* Create unit vectors along the three axes of the text plane
- coordinate system. */
- ref[ 0 ] = x[ 0 ];
- ref[ 1 ] = y[ 0 ];
- ref[ 2 ] = z[ 0 ];
- if( !getTextAxes( ref, up, norm, "CC", tx, ty, tz, just ) ) return 0;
-
-/* Calculate the pgplot symbol number for the given marker type. */
- if( type > 0 ) {
- if( type > 127 ) {
- symnum = type;
- } else {
- ccpgqcf( &font );
- ccgrsymk( type, font, &symnum );
- }
-
- } else if( type > -3 ) {
- getSymbolList( ".", 1, &symnum, &nlist );
-
-/* Regular polygons - create an array of text plane coordinates for the
- vertices of the polygon. */
- } else {
- symnum = type;
-
-/* Get the character height in world coordinate units. A PGPLOT
- character height of 1.0 corresponds to 1/40 of the 2D window height. */
- ch = getCharHeight();
-
-/* Limit the number of sides that can be produced. */
- ns = -type;
- if( ns > MXSIDE ) ns = MXSIDE;
-
-/* Calculate the angle subtended by each edge of the polygon. */
- dang = TWOPI/ns;
- ang = 0.0;
-
-/* Loop round each vertex. */
- for( i = 0; i < ns; i++ ) {
- vx[ i ] = ch*sin( ang );
- vy[ i ] = ch*cos( ang );
- vz[ i ] = 0.0;
- ang += dang;
- }
- }
-
-/* Save the current clipping flag, and ensure clipping is off. */
- ccpgqclp( &clip );
- ccpgsclp( 0 );
-
-/* Draw each marker in turn. */
- for( i = 0; i < n; i++ ) {
-
-/* Store the centre world coords */
- ref[ 0 ] = x[ i ];
- ref[ 1 ] = y[ i ];
- ref[ 2 ] = z[ i ];
-
-/* Draw the symbol, and return if anything goes wrong. */
- if( symnum >= 0 ) {
- if( !Text( &symnum, 1, ref, "CC", tx, ty, tz ) ) return 0;
-
- } else {
- if( !Polygon( ns, vx, vy, vz, ref, tx, ty, tz ) ) return 0;
-
- }
-
- }
-
-/* Re-instate original clipping flag. */
- ccpgsclp( clip );
-
-/* If we arrive here we have been succesful, so return a non-zero value. */
- return 1;
-}
-
-int astG3DQch( float *ch ){
-/*
-*+
-* Name:
-* astG3DQch
-
-* Purpose:
-* Return the character height in world coordinates.
-
-* Synopsis:
-* #include "grf3d.h"
-* int astG3DQch( float *ch )
-
-* Description:
-* This function returns the height of characters drawn using astG3DText.
-
-* Parameters:
-* ch
-* A pointer to the double which is to receive the height of
-* characters drawn with astG3DText.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-* Notes:
-* - Since the 3D world coordinate axes are assumed to be equally
-* scaled, the height of text in world coordinate units is independent
-* of the orientation of the text. Therefore, this function returns
-* only one height value, unlike the equivalent 2D astGQch function
-* that returns two heights.
-*-
-*/
- *ch = getCharHeight();
- return 1;
-}
-
-int astG3DText( const char *text, float ref[3], const char *just, float up[3],
- float norm[3] ){
-/*
-*+
-* Name:
-* astG3DText
-
-* Purpose:
-* Draw a character string.
-
-* Synopsis:
-* #include "grf3d.h"
-* int astG3DText( const char *text, float ref[3], const char *just,
-* float up[3], float norm[3] )
-
-* Description:
-* This function displays a character string at a given position
-* on a given plane in 3D world coords, using a specified
-* justification and up-vector.
-
-* Parameters:
-* text
-* Pointer to a null-terminated character string to be displayed.
-* ref
-* The reference (x,y,z) coordinates.
-* just
-* A character string which specifies the location within the
-* text string which is to be placed at the reference position
-* given by x and y. The first character may be 'T' for "top",
-* 'C' for "centre", or 'B' for "bottom", and specifies the
-* vertical location of the reference position. Note, "bottom"
-* corresponds to the base-line of normal text. Some characters
-* (eg "y", "g", "p", etc) descend below the base-line. The second
-* character may be 'L' for "left", 'C' for "centre", or 'R'
-* for "right", and specifies the horizontal location of the
-* reference position. If the string has less than 2 characters
-* then 'C' is used for the missing characters.
-* up
-* The (x,y,z) up-vector for the text. The actual up vector used is
-* the projection of the supplied vector onto the plane specified by
-* "norm".
-* norm
-* The (x,y,z) components of a vector that is normal to the plane
-* containing the text. The given vector passes through the text
-* from the back to the front. If all components of this vector are
-* zero, then a normal vector pointing towards the camera eye is used.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-* Notes:
-* - This routine does not recognise PGPLOT escape sequences.
-* - A NULL value for "just" causes a value of "CC" to be used.
-*-
-*/
-
-/* Local Constants: */
-#define MXLEN 256
-
-/* Local Variables: */
- char newjust[3];
- float tx[3], ty[3], tz[3];
- int list[ MXLEN ];
- int nlist;
-
-/* Convert the supplied string into a list of PGPLOT symbol numbers */
- getSymbolList( text, MXLEN, &nlist, list );
-
-/* Create unit vectors along the three axes of the text plane
- coordinate system. */
- if( !getTextAxes( ref, up, norm, just, tx, ty, tz, newjust ) ) return 0;
-
-/* Draw the text. */
- return Text( list, nlist, ref, newjust, tx, ty, tz );
-
-/* Clear local constants. */
-#undef MXLEN
-}
-
-int astG3DTxExt( const char *text, float ref[3], const char *just,
- float up[3], float norm[3], float *xb, float *yb,
- float *zb, float bl[3] ){
-/*
-*+
-* Name:
-* astG3DTxExt
-
-* Purpose:
-* Get the extent of a character string.
-
-* Synopsis:
-* #include "grf3d.h"
-* int astG3DTxExt( const char *text, float ref[3], const char *just,
-* float up[3], float norm[3], float *xb, float *yb,
-* float *zb, float bl[3] )
-
-* Description:
-* This function returns the corners of a box which would enclose the
-* supplied character string if it were displayed using astG3DText.
-*
-* The returned box INCLUDES any leading or trailing spaces.
-
-* Parameters:
-* text
-* Pointer to a null-terminated character string to be displayed.
-* ref
-* The reference (x,y,z) coordinates.
-* just
-* A character string which specifies the location within the
-* text string which is to be placed at the reference position
-* given by x and y. The first character may be 'T' for "top",
-* 'C' for "centre", 'B' for "baseline", or "M" for "bottom", and
-* specifies the vertical location of the reference position. Note,
-* "baseline" corresponds to the base-line of normal text. Some
-* characters (eg "y", "g", "p", etc) descend below the base-line,
-* and so "M" and "B" will produce different effects for such
-* characters. The second character may be 'L' for "left", 'C' for
-* "centre", or 'R' for "right", and specifies the horizontal
-* location of the reference position. If the string has less than
-* 2 characters then 'C' is used for the missing characters.
-* up
-* The (x,y,z) up-vector for the text. The actual up vector used is
-* the projection of the supplied vector onto the plane specified by
-* "norm".
-* norm
-* The (x,y,z) components of a vector that is normal to the plane
-* containing the text. The given vector passes through the text
-* from the back to the front. If all components of this vector are
-* zero, then a normal vector pointing towards the camera eye is used.
-* xb
-* An array of 4 elements in which to return the x coordinate of
-* each corner of the bounding box.
-* yb
-* An array of 4 elements in which to return the y coordinate of
-* each corner of the bounding box.
-* zb
-* An array of 4 elements in which to return the z coordinate of
-* each corner of the bounding box.
-* bl
-* The 3D world coordinates at the left hand end of the text
-* baseline.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-* Notes:
-* - The order of the corners is anti-clockwise starting at the
-* bottom left when viewing the text normally (i.e. face on).
-* - This routine does not recognise PGPLOT escape sequences.
-* - A NULL value for "just" causes a value of "CC" to be used.
-*-
-*/
-
-/* Local Constants: */
-#define MXLEN 256
-
-/* Local Variables: */
- char newjust[3];
- int i;
- int list[ MXLEN ];
- int nlist;
- float tx[3], ty[3], tz[3];
-
-/* Initialise the returned values to indicate no box available. */
- for( i = 0; i < 4; i++ ){
- xb[ i ] = 0.0;
- yb[ i ] = 0.0;
- zb[ i ] = 0.0;
- }
-
-/* Convert the supplied string into a list of symbol numbers */
- getSymbolList( text, MXLEN, &nlist, list );
-
-/* Create unit vectors along the three axes of the text plane
- coordinate system. */
- if( !getTextAxes( ref, up, norm, just, tx, ty, tz, newjust ) ) return 0;
-
-/* Find the bounding box of this list of symbols. */
- return TxExt( list, nlist, ref, newjust, tx, ty, tz, xb, yb, zb, bl );
-
-/* Clear local constants. */
-#undef MXLEN
-}
-
-
-/* Public functions specific to this PGPLOT implementation. */
-/* ======================================================== */
-/* Other implementations of the grf3d interface can ignore the following
- functions. They provide control of the 3D view. */
-
-int PG3DSetCamera( float eye[3], float target[3], float up[3], float screen ){
-/*
-*+
-* Name:
-* PG3DSetCamera
-
-* Purpose:
-* Store new camera settings for the current PGPLOT device.
-
-* Synopsis:
-* #include "grf3d.h"
-* int PG3DSetCamera( float eye[3], float target[3], float up[3],
-* float screen )
-
-* Description:
-* This function stores new camera settings for the current PGPLOT
-* device.
-*
-* A "camera" describes the projection of the 3D world coordinate
-* space onto a 2D "screen". This screen corresponds to the 2D viewing
-* surface used by PGPLOT. The 2D window used by PGPLOT (as set by
-* PGSWIN, etc) defines the bounds of the screen area that is visible
-* in the PGPLOT viewport.
-*
-* The 3D world coordinate axes (x,y,z) are such that if "z" is
-* vertically upwards and "x" points to the right, then "y" goes
-* out of the paper away from you. All 3 axes are assume to have equal
-* scale.
-*
-* A camera defines a second set of 3D axes (called "(u,v,w)") with
-* origin at the 3D world coordinates given by "eye":
-*
-* - the "w" axis points towards the position given by "target"
-* - the "v" axis is perpendicular to the "w" axis and is in the plane
-* spanned by the "w" axis and the supplied "up" vector
-* - the "u" axis is perpendicular to both "w" and "v" and points to
-* the left when looking from the eye along the w axis with the v
-* axis upwards
-*
-* Thus the "v" axis is parallel to "vertically up" on the 2D screen,
-* "u" is parallel to "horizontally to the left", and "w" is
-* perpendicular to the screen, pointing towards the target.
-*
-* The screen is a plane perpendicular to the "w" axis, at the "w" axis
-* value given by "screen". A 2D cartesian coordinate system (h,r) is
-* defined on the screen, with origin at the point where the "w" axis
-* intersects the screen. The "h" (horizontal) axis is parallel to the
-* "u" axis but points in the opposite direction (to the left), and the
-* "r" (vertical) axis is parallel to the "v" axis. The (h,r) system is
-* taken to be the same as the PGPLOT 2D world coordinate system, and
-* PGSWIN can therefore be used to specify the rectangular area on the
-* screen that is mapped onto the PGPLOT viewport.
-*
-* It is assumed that all axes (x,y,z), (u,v,w) and (h,r) are measured
-* in the same units.
-
-* Parameters:
-* eye
-* The position vector of the camera's "eye", in 3D world coordinates.
-* target
-* The position vector of a point in 3D world coordinates that is
-* at the centre of the camera's view. In other words, the camera is
-* looking towards this point. Zero will be returned if the target
-* is the same position as the eye.
-* up
-* A vector in 3D world coordinates that will appear vertically
-* upwards when projected onto the screen. Zero will be returned if
-* the up vector has zero length or is parallel to the line joining
-* the eye and the target.
-* screen
-* The distance from the camera's eye to the projection screen. If
-* this is zero, then an orthographic projection is used.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-* Notes:
-* - Zero is returned if no PGPLOT device has been opened prior to
-* calling this function.
-*-
-*/
-
-/* Local Variables: */
- Camera *cam;
- float *u, *v, *w;
- int result = 0;
-
-/* Get a pointer to the Camera structure for the current PGPLOT device.
- Return without action if no PGPLOT device is open. */
- cam = getCamera( 0 );
- if( cam ) {
- result = 1;
-
-/* Store the supplied values in the camera. */
- memcpy( cam->target_vector, target, 3*sizeof( float ) );
- memcpy( cam->eye_vector, eye, 3*sizeof( float ) );
- cam->screen_distance = screen;
-
-/* Get pointers to the three rows of the w2c_matrix. This is a 3x3 matrix that
- rotates vectors in the (x,y,z) system into vectors in the (u,v,w)
- system. Each row in the matrix is a unit vector along the u, v or w
- axes. */
- u = cam->w2c_matrix;
- v = u + 3;
- w = v + 3;
-
-/* The "w" axis points form the eye to the target, so get the vector from
- the eye to the target and normalise it. */
- vectorSub( target, eye, w );
- if( ! vectorNorm( w ) ) result = 0;
-
-/* The "v" vector is in the plane spanned by the "w" axis and the "up"
- vector. Get the normal to this plane, storing the result temporarily
- in the "u" vector. . */
- vectorProduct( w, up, u );
-
-/* The "v" vector is normal to the vector found above and is also normal
- to the "w" axis. Get this vector and normalise it. */
- vectorProduct( u, w, v );
- if( ! vectorNorm( v ) ) result = 0;
-
-/* The "u" vector is perpendicualr to both the "w" and "v" vectors. */
- vectorProduct( v, w, u );
- if( ! vectorNorm( u ) ) result = 0;
-
-/* Use "v" as the stored up vector (the supplied "up" vector is not
- necesarily the same as "v"). */
- memcpy( cam->up_vector, v, 3*sizeof( float ) );
-
-/* Se a flag that indicates that the Camera is usable. */
- cam->ok_flag = result ? CAMERA_OK : CAMERA_OK/2;
- }
-
- return result;
-}
-
-int PG3DSetEye( float eye[3] ){
-/*
-*+
-* Name:
-* PG3DSetEye
-
-* Purpose:
-* Store a new camera eye position for the current PGPLOT device.
-
-* Synopsis:
-* #include "grf3d.h"
-* int PG3DSetEye( float eye[3] )
-
-* Description:
-* This function modifies the camera eye position for the current
-* PGPLOT device. Other camera settings are left unchanged. See
-* PG3DSetCamera for more details.
-
-* Parameters:
-* eye
-* The position vector of the camera's "eye", in 3D world coordinates.
-* Zero is returned if the new eye position is the same as the
-* existing camera target position.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-* Notes:
-* - Zero is returned if no PGPLOT device has been opened prior to
-* calling this function.
-* - This function can only be called to modify an existing Camera.
-* Consequently it returns zero if a camera has not already been set
-* for the current PGPLOT device by calling PG3DSetCamera.
-*-
-*/
-
-/* Local Variables: */
- Camera *cam;
- int result = 0;
-
-/* Get a pointer to the Camera structure for the current PGPLOT device.
- Return without action if no PGPLOT device is open. */
- cam = getCamera( 1 );
- if( cam ) {
-
-/* If so, modify the camera values, using the supplied eye position but
- retaining the other camera settings. */
- result = PG3DSetCamera( eye, cam->target_vector, cam->up_vector,
- cam->screen_distance );
- }
-
- return result;
-}
-
-int PG3DRotateEye( int dir, float angle ){
-/*
-*+
-* Name:
-* PG3DRotateEye
-
-* Purpose:
-* Move the eye on a great circle around the current target position.
-
-* Synopsis:
-* #include "grf3d.h"
-* int PG3DRotateEye( int dir, float angle )
-
-* Description:
-* This function modifies the camera eye position for the current
-* PGPLOT device. Other camera settings are left unchanged. See
-* PG3DSetCamera for more details.
-*
-* The eye is moved by a gven distance along an arc of a great circle
-* centred on the current target position. The target position itself
-* is left unchanged.
-
-* Parameters:
-* dir
-* The direction in which to move the eye position:
-* 1 - Move eye upwards
-* 2 - Move eye downwards
-* 3 - Move eye left
-* 4 - Move eye right
-* angle
-* The arc-distance, in degrees, by which to move the eye.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-* Notes:
-* - Zero is returned if no PGPLOT device has been opened prior to
-* calling this function.
-* - This function can only be called to modify an existing Camera.
-* Consequently it returns zero if a camera has not already been set
-* for the current PGPLOT device by calling PG3DSetCamera.
-*-
-*/
-
-/* Local Variables: */
- Camera *cam;
- int result = 0;
- int i;
- float e[3], f[3], emod, neweye[3], sina, cosa;
-
-/* Get a pointer to the Camera structure for the current PGPLOT device.
- Return without action if no PGPLOT device is open. */
- cam = getCamera( 1 );
- if( cam ) {
-
-/* Get the cos and sine of the supplied angle. */
- cosa = cos( angle*TWOPI/360 );
- sina = sin( angle*TWOPI/360 );
-
-/* Get the vector from the target to the eye, get its modulus. */
- vectorSub( cam->eye_vector, cam->target_vector, e );
- emod = vectorModulus( e );
-
-/* If we are moving the eye upwards, find the new eye position. */
- if( dir == 1 ) {
- for( i = 0; i < 3; i++ ) {
- neweye[ i ] = e[ i ]*cosa + emod*cam->up_vector[ i ]*sina +
- cam->target_vector[ i ];
- }
-
-/* If we are moving the eye downwards, find the new eye position. */
- } else if( dir == 2 ) {
- for( i = 0; i < 3; i++ ) {
- neweye[ i ] = e[ i ]*cosa - emod*cam->up_vector[ i ]*sina +
- cam->target_vector[ i ];
- }
-
-/* If we are moving the eye left or right we need a vector in the plane
- of rotation that is at right angles to "e", and points to the right
- of the eye. */
- } else {
- vectorProduct( cam->up_vector, e, f );
- vectorNorm( f );
-
-/* Get the new eye position. */
- if( dir == 3 ) {
- for( i = 0; i < 3; i++ ) {
- neweye[ i ] = e[ i ]*cosa - emod*f[ i ]*sina + cam->target_vector[ i ];
- }
-
- } else {
- for( i = 0; i < 3; i++ ) {
- neweye[ i ] = e[ i ]*cosa + emod*f[ i ]*sina + cam->target_vector[ i ];
- }
- }
- }
-
-/* Modify the camera eye vector, retaining the other camera settings. */
- result = PG3DSetCamera( neweye, cam->target_vector, cam->up_vector,
- cam->screen_distance );
- }
-
- return result;
-}
-
-int PG3DForward( float distance ){
-/*
-*+
-* Name:
-* PG3DForward
-
-* Purpose:
-* Move the eye forward towards the target.
-
-* Synopsis:
-* #include "grf3d.h"
-* int PG3DForward( float distance )
-
-* Description:
-* This function modifies the camera eye position for the current
-* PGPLOT device. Other camera settings are left unchanged. See
-* PG3DSetCamera for more details.
-*
-* The eye is moved forward by a given distance towards the target
-* point, and the target point is also moved forward so that the
-* distance between eye and target remains unchanged.
-
-* Parameters:
-* distance
-* The distance to move the eye and target, given as a fraction of
-* the distance between the eye and the target.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-* Notes:
-* - Zero is returned if no PGPLOT device has been opened prior to
-* calling this function.
-* - This function can only be called to modify an existing Camera.
-* Consequently it returns zero if a camera has not already been set
-* for the current PGPLOT device by calling PG3DSetCamera.
-*-
-*/
-
-/* Local Variables: */
- Camera *cam;
- int result = 0;
- int i;
- float e[3], newtarg[3], neweye[3];
-
-/* Get a pointer to the Camera structure for the current PGPLOT device.
- Return without action if no PGPLOT device is open. */
- cam = getCamera( 1 );
- if( cam ) {
-
-/* Get the vector from the eye to the target. */
- vectorSub( cam->target_vector, cam->eye_vector, e );
-
-/* Find the new eye and target positions. */
- for( i = 0; i < 3; i++ ){
- neweye[ i ] = cam->eye_vector[ i ] + e[ i ]*distance;
- newtarg[ i ] = cam->target_vector[ i ] + e[ i ]*distance;
- }
-
-/* Modify the camera eye and target vectors, retaining the other camera
- settings. */
- result = PG3DSetCamera( neweye, newtarg, cam->up_vector,
- cam->screen_distance );
- }
-
- return result;
-}
-
-
-int PG3DFindNearest( int n, float *x, float *y, float *z, int *iclose ){
-/*
-*+
-* Name:
-* PG3DForward
-
-* Purpose:
-* Find the closest point to the eye.
-
-* Synopsis:
-* #include "grf3d.h"
-* int PG3DFindNearest( int n, float *x, float *y, float *z, int *iclose )
-
-* Description:
-* This function checks every supplied point and returns the index of
-* the point that is closest to the eye.
-
-* Parameters:
-* n
-* The number of points to check.
-* x
-* Pointer to an array of "n" X values.
-* y
-* Pointer to an array of "n" Y values.
-* z
-* Pointer to an array of "n" Z values.
-* iclose
-* Pointer to an int in which to return the index of hte nearest
-* point.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-* Notes:
-* - Zero is returned if no PGPLOT device has been opened prior to
-* calling this function.
-*-
-*/
-
-/* Local Variables: */
- Camera *cam;
- int result = 0;
- int i;
- float c[3], v[3];
- float d;
- float dmin;
-
- *iclose = 0;
-
-/* Get a pointer to the Camera structure for the current PGPLOT device.
- Return without action if no PGPLOT device is open. */
- cam = getCamera( 1 );
- if( cam ) {
- result = 1;
-
-/* Loop through all the supplied positions. */
- dmin = FLT_MAX;
- for( i = 0; i < n; i++ ) {
-
-/* Get the required distance. */
- v[ 0 ] = x[ i ];
- v[ 1 ] = y[ i ];
- v[ 2 ] = z[ i ];
- vectorSub( v, cam->eye_vector, c );
- d = vectorModulus( c );
-
-/* If this is the smallest distance so far, remember it. */
- if( d < dmin ) {
- dmin = d;
- *iclose = i;
- }
- }
- }
-
- return result;
-}
-
-
-int PG3DSetTarget( float target[3] ){
-/*
-*+
-* Name:
-* PG3DSetTarget
-
-* Purpose:
-* Store a new camera target position for the current PGPLOT device.
-
-* Synopsis:
-* #include "grf3d.h"
-* int PG3DSetTarget( float target[3] )
-
-* Description:
-* This function modifies the camera target position for the current
-* PGPLOT device. Other camera settings are left unchanged. See
-* PG3DSetCamera for more details.
-
-* Parameters:
-* target
-* The position vector of the camera's "target", in 3D world coordinates.
-* Zero is returned if the new target position is the same as the
-* existing camera eye position.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-* Notes:
-* - Zero is returned if no PGPLOT device has been opened prior to
-* calling this function.
-* - This function can only be called to modify an existing Camera.
-* Consequently it returns zero if a camera has not already been set
-* for the current PGPLOT device by calling PG3DSetCamera.
-*-
-*/
-
-/* Local Variables: */
- Camera *cam;
- int result = 0;
-
-/* Get a pointer to the Camera structure for the current PGPLOT device.
- Return without action if no PGPLOT device is open. */
- cam = getCamera( 1 );
- if( cam ) {
-
-/* If so, modify the camera values, using the supplied target position but
- retaining the other camera settings. */
- result = PG3DSetCamera( cam->eye_vector, target, cam->up_vector,
- cam->screen_distance );
- }
-
- return result;
-}
-
-
-int PG3DSetUp( float up[3] ){
-/*
-*+
-* Name:
-* PG3DSetUp
-
-* Purpose:
-* Store a new camera up vector for the current PGPLOT device.
-
-* Synopsis:
-* #include "grf3d.h"
-* int PG3DSetUp( float up[3] )
-
-* Description:
-* This function modifies the camera up vector for the current
-* PGPLOT device. Other camera settings are left unchanged. See
-* PG3DSetCamera for more details.
-
-* Parameters:
-* up
-* The new up vector, in 3D world coordinates. Zero is returned if
-* the new up vector is parallel to the line joining the eye and
-* the target positions.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-* Notes:
-* - Zero is returned if no PGPLOT device has been opened prior to
-* calling this function.
-* - This function can only be called to modify an existing Camera.
-* Consequently it returns zero if a camera has not already been set
-* for the current PGPLOT device by calling PG3DSetCamera.
-*-
-*/
-
-/* Local Variables: */
- Camera *cam;
- int result = 0;
-
-/* Get a pointer to the Camera structure for the current PGPLOT device.
- Return without action if no PGPLOT device is open. */
- cam = getCamera( 1 );
- if( cam ) {
-
-/* If so, modify the camera values, using the supplied up vector but
- retaining the other camera settings. */
- result = PG3DSetCamera( cam->eye_vector, cam->target_vector, up,
- cam->screen_distance );
- }
-
- return result;
-}
-
-
-int PG3DSetScreen( float screen ){
-/*
-*+
-* Name:
-* PG3DSetScreen
-
-* Purpose:
-* Store a new camera screen distance for the current PGPLOT device.
-
-* Synopsis:
-* #include "grf3d.h"
-* int PG3DSetScreen( float screen )
-
-* Description:
-* This function modifies the camera screen distance for the current
-* PGPLOT device. Other camera settings are left unchanged. See
-* PG3DSetCamera for more details.
-
-* Parameters:
-* screen
-* The distance from the camera's eye to the projection screen in
-* 3D world coordinate units. If this is zero, then an orthographic
-* projection is used.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-* Notes:
-* - Zero is returned if no PGPLOT device has been opened prior to
-* calling this function.
-* - This function can only be called to modify an existing Camera.
-* Consequently it returns zero if a camera has not already been set
-* for the current PGPLOT device by calling PG3DSetCamera.
-*-
-*/
-
-/* Local Variables: */
- Camera *cam;
- int result = 0;
-
-/* Get a pointer to the Camera structure for the current PGPLOT device.
- Return without action if no PGPLOT device is open. */
- cam = getCamera( 1 );
- if( cam ) {
-
-/* If so, modify the camera values, using the supplied screen distance but
- retaining the other camera settings. */
- result = PG3DSetCamera( cam->eye_vector, cam->target_vector,
- cam->up_vector, screen );
- }
-
- return result;
-}
-
-int PG3DAutoCamera( float lbnd[3], float ubnd[3] ){
-/*
-*+
-* Name:
-* PG3DAutoCamera
-
-* Purpose:
-* Set up a default camera to view a given box of 3D world coords.
-
-* Synopsis:
-* #include "grf3d.h"
-* int PG3DAutoCamera( float lbnd[3], float ubnd[3] )
-
-* Description:
-* This function sets up the camera and the 2D PGPLOT window for the
-* current device so that it produces a default view of a specified
-* volume of 3D world coordinate space.
-
-* Parameters:
-* lbnd
-* The lower bounds of the volume of 3D world coordinates that
-* is to be visible using the camera and 2D PGPLOT window.
-* ubnd
-* The upper bounds of the volume of 3D world coordinates that
-* is to be visible using the camera and 2D PGPLOT window.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-* Notes:
-* - Zero is returned if no PGPLOT device has been opened prior to
-* calling this function.
-*-
-*/
-
-/* Local Variables: */
- float target[3], eye[3], up[3], screen, dx, dy, dz, hlo, hhi, rlo, rhi;
- float x[8], y[8], z[8], h[8], r[8];
- Camera *cam;
- int result = 0;
- int i;
-
-/* Get a pointer to the Camera structure for the current PGPLOT device.
- Return without action if no PGPLOT device is open. */
- cam = getCamera( 0 );
- if( cam ) {
-
-/* The target position (i.e. the position towards which the camera is
- looking) is the middle of the volume. */
- target[ 0 ] = 0.5*( lbnd[ 0 ] + ubnd[ 0 ] );
- target[ 1 ] = 0.5*( lbnd[ 1 ] + ubnd[ 1 ] );
- target[ 2 ] = 0.5*( lbnd[ 2 ] + ubnd[ 2 ] );
-
-/* The eye is slightly offset from a corner view. */
- eye[ 0 ] = 0.85*ubnd[ 0 ] + 0.15*lbnd[ 0 ];
- eye[ 1 ] = 0.75*ubnd[ 1 ] + 0.25*lbnd[ 1 ];
- eye[ 2 ] = 0.75*ubnd[ 2 ] + 0.25*lbnd[ 2 ];
-
-/* The eye is seven times the size of the box away from the box centre. */
- eye[ 0 ] = 7*(eye[ 0 ] - target[ 0 ] ) + target[ 0 ];
- eye[ 1 ] = 7*(eye[ 1 ] - target[ 1 ] ) + target[ 1 ];
- eye[ 2 ] = 7*(eye[ 2 ] - target[ 2 ] ) + target[ 2 ];
-
-/* The up vector is paralle to the Z axis. */
- up[ 0 ] = 0.0;
- up[ 1 ] = 0.0;
- up[ 2 ] = 1.0;
-
-/* The screen is at the centre of the box. */
- dx = eye[ 0 ] - target[ 0 ];
- dy = eye[ 1 ] - target[ 1 ];
- dz = eye[ 2 ] - target[ 2 ];
- screen = sqrtf( dx*dx + dy*dy + dz*dz );
-
-/* Set the camera. */
- if( PG3DSetCamera( eye, target, up, screen ) ) {
-
-/* Get the 3D World coords at the corners of the volume. */
- x[ 0 ] = ubnd[ 0 ];
- x[ 1 ] = ubnd[ 0 ];
- x[ 2 ] = lbnd[ 0 ];
- x[ 3 ] = lbnd[ 0 ];
- x[ 4 ] = ubnd[ 0 ];
- x[ 5 ] = ubnd[ 0 ];
- x[ 6 ] = lbnd[ 0 ];
- x[ 7 ] = lbnd[ 0 ];
-
- y[ 0 ] = lbnd[ 1 ];
- y[ 1 ] = ubnd[ 1 ];
- y[ 2 ] = ubnd[ 1 ];
- y[ 3 ] = lbnd[ 1 ];
- y[ 4 ] = lbnd[ 1 ];
- y[ 5 ] = ubnd[ 1 ];
- y[ 6 ] = ubnd[ 1 ];
- y[ 7 ] = lbnd[ 1 ];
-
- z[ 0 ] = lbnd[ 2 ];
- z[ 1 ] = lbnd[ 2 ];
- z[ 2 ] = lbnd[ 2 ];
- z[ 3 ] = lbnd[ 2 ];
- z[ 4 ] = ubnd[ 2 ];
- z[ 5 ] = ubnd[ 2 ];
- z[ 6 ] = ubnd[ 2 ];
- z[ 7 ] = ubnd[ 2 ];
-
-/* Transform these into screen coordinates. */
- if( transform( cam, 8, x, y, z, h, r ) ) {
-
-/* Find the bounds in h and r of the projection of the volume. */
- hlo = FLT_MAX;
- hhi = -FLT_MAX;
- rlo = FLT_MAX;
- rhi = -FLT_MAX;
-
- for( i = 0; i < 8; i++ ) {
- if( h[ i ] < hlo ) hlo = h[ i ];
- if( h[ i ] > hhi ) hhi = h[ i ];
- if( r[ i ] < rlo ) rlo = r[ i ];
- if( r[ i ] > rhi ) rhi = r[ i ];
- }
-
-/* Extend these bounds by 5% at each end */
- dx = 0.05*( hhi - hlo );
- hhi += dx;
- hlo -= dx;
-
- dy = 0.05*( rhi - rlo );
- rhi += dy;
- rlo -= dy;
-
-/* If the box has non-zero area, set it as the 2D PGPLOT window, and
- indicate success. */
- if( rlo < rhi && hlo < hhi ) {
- ccpgswin( hlo, hhi, rlo, rhi );
- result = 1;
- }
- }
- }
- }
- return result;
-}
-
-
-
-
-
-/* Private functions for this module */
-/* ================================= */
-
-static int TextCam( Camera *textcam, float ref[3], float tx[3], float ty[3],
- float tz[3] ){
-/*
-* Name:
-* TextCam
-
-* Purpose:
-* Create a Camera that converts 3D text plane coordinates into 2D world
-* coordinates.
-
-* Synopsis:
-* #include "grf3d.h"
-* int TextCam( Camera *textcam, float ref[3], float tx[3], float ty[3],
-* float tz[3] )
-
-* Description:
-* This function initialises the contents of a supplied Camera
-* structure so that the Camera describes the transformation from 3D
-* "text plane" coordinates to 2D PGPLOT world coordinates. The text
-* plane coordinate system is defined by three vectors along its x, y
-* and z axes, and an origin position.
-*
-* Text plane coordinates describe a plane upon which 2D graphics such
-* as text is drawn. The X axis is parallel to the text base line, the
-* Y axis is the text up vector, and the Z axis is perpendicular to
-* the text, passing from the back of the text to the front of the text.
-
-* Parameters:
-* textcam
-* The Camera structure which is to be modified.
-* ref
-* The (x,y,z) coordinates at the text plane origin.
-* tx
-* A unit vector (expressed in 3D world coords) along the text plane
-* X axis. This is parallel to the text base line.
-* ty
-* A unit vector (expressed in 3D world coords) along the text plane
-* Y axis. This is parallel to the projectionof ht eup vector on to
-* the text plane.
-* tz
-* A unit vector (expressed in 3D world coords) along the text plane
-* Z axis. This is perpendicular to the text plane, passing from
-* the back of the text to the front of the text.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-*/
-
-
-/* Local Variables: */
- Camera *cam;
- float dx, dy, dz;
- int i;
- float a, b, c;
-
-/* Get the Camera for the current device identifier. Abort if no camera
- is available. This camera describes the transformation from 3D world
- coordinates (x,y,z) to 2D world coordinates (screen coordinates) (h,r). */
- cam = getCamera( 1 );
- if( !cam ) return 0;
-
-/* Create a Camera structure that describes the transformation from
- text plane coordinates to 2D world coords, putting the origin of text
- plane coordinates at the given reference position. */
- dx = cam->eye_vector[ 0 ] - ref[ 0 ];
- dy = cam->eye_vector[ 1 ] - ref[ 1 ];
- dz = cam->eye_vector[ 2 ] - ref[ 2 ];
-
- textcam->eye_vector[ 0 ] = tx[ 0 ]*dx + tx[ 1 ]*dy + tx[ 2 ]*dz;
- textcam->eye_vector[ 1 ] = ty[ 0 ]*dx + ty[ 1 ]*dy + ty[ 2 ]*dz;
- textcam->eye_vector[ 2 ] = tz[ 0 ]*dx + tz[ 1 ]*dy + tz[ 2 ]*dz;
-
- for( i = 0; i < 8; i += 3 ) {
- a = cam->w2c_matrix[ i ];
- b = cam->w2c_matrix[ i + 1 ];
- c = cam->w2c_matrix[ i + 2 ];
- textcam->w2c_matrix[ i ] = a*tx[ 0 ] + b*tx[ 1 ] + c*tx[ 2 ];
- textcam->w2c_matrix[ i + 1 ] = a*ty[ 0 ] + b*ty[ 1 ] + c*ty[ 2 ];
- textcam->w2c_matrix[ i + 2 ] = a*tz[ 0 ] + b*tz[ 1 ] + c*tz[ 2 ];
- }
-
- textcam->screen_distance = cam->screen_distance;
- textcam->ok_flag = CAMERA_OK;
-
- return 1;
-}
-
-static int Polygon( int nside, float *vx, float *vy, float *vz, float ref[3],
- float tx[3], float ty[3], float tz[3] ){
-/*
-* Name:
-* Polygon
-
-* Purpose:
-* Draw a regular polygon.
-
-* Synopsis:
-* #include "grf3d.h"
-* int Polygon( int nside, float *vx, float *vy, float *vz, float ref[3],
-* float tx[3], float ty[3], float tz[3] )
-
-* Description:
-* This function draws a polygon centred at a given position on a
-* given plane in 3D world coords, using a specified up-vector. The
-* polygon vertices are specified in text plane coordinates via vx,
-* vy and vz.
-
-* Parameters:
-* nside
-* Number of sides for the polygon. Numbers higher than 32 are
-* treated as 32.
-* vx
-* Pointer to an array of "nside" text plane X axis values.
-* vy
-* Pointer to an array of "nside" text plane Y axis values.
-* vz
-* Pointer to an array of "nside" text plane Z axis values.
-* ref
-* The (x,y,z) coordinates at the polygon centre.
-* tx
-* A unit vector (expressed in 3D world coords) along the text plane
-* X axis. This is parallel to the text base line.
-* ty
-* A unit vector (expressed in 3D world coords) along the text plane
-* Y axis. This is parallel to the projectionof ht eup vector on to
-* the text plane.
-* tz
-* A unit vector (expressed in 3D world coords) along the text plane
-* Z axis. This is perpendicular to the text plane, passing from
-* the back of the text to the front of the text.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-*/
-
-
-/* Local Variables: */
- Camera *cam;
- Camera newcam;
- float h[ MXSIDE ], r[ MXSIDE ];
-
-/* Get the Camera for the current device identifier. Abort if no camera
- is available. */
- cam = getCamera( 1 );
- if( !cam ) return 0;
-
-/* Check the number of points. */
- if( nside > MXSIDE) return 0;
-
-/* Create a Camera structure that describes the transformation from
- text plane coordinates to 2D world coords, putting the origin of text
- plane coordinates at the given reference position. */
- if( !TextCam( &newcam, ref, tx, ty, tz ) ) return 0;
-
-/* Transform the given text plane coordinates into 2D world coordinates. */
- if( !transform( &newcam, nside, vx, vy, vz, h, r ) ) return 0;
-
-/* Draw the polygon. */
- ccpgpoly( nside, h, r );
-
-/* If we get here we have succeeded so return a non-zero value. */
- return 1;
-}
-
-static int Text( int *list, int nlist, float ref[3], const char *just,
- float tx[3], float ty[3], float tz[3] ){
-/*
-* Name:
-* Text
-
-* Purpose:
-* Draw a character string.
-
-* Synopsis:
-* #include "grf3d.h"
-* int Text( int *list, int nlist, float ref[3], const char *just,
-* float tx[3], float ty[3], float tz[3] )
-
-* Description:
-* This function displays a symbol list at a given position on a given
-* plane in 3D world coords, using a specified justification and up-vector.
-
-* Parameters:
-* list
-* Pointer to an array of pgplot symbol values.
-* nlist
-* Length of the "list" array.
-* ref
-* The reference (x,y,z) coordinates.
-* just
-* A character string which specifies the location within the
-* text string which is to be placed at the reference position
-* given by x and y. The first character may be 'T' for "top",
-* 'C' for "centre", or 'B' for "bottom", and specifies the
-* vertical location of the reference position. Note, "bottom"
-* corresponds to the base-line of normal text. Some characters
-* (eg "y", "g", "p", etc) descend below the base-line. The second
-* character may be 'L' for "left", 'C' for "centre", or 'R'
-* for "right", and specifies the horizontal location of the
-* reference position. If the string has less than 2 characters
-* then 'C' is used for the missing characters.
-* tx
-* A unit vector (expressed in 3D world coords) along the text plane
-* X axis. This is parallel to the text base line.
-* ty
-* A unit vector (expressed in 3D world coords) along the text plane
-* Y axis. This is parallel to the projection of the up vector on to
-* the text plane.
-* tz
-* A unit vector (expressed in 3D world coords) along the text plane
-* Z axis. This is perpendicular to the text plane, passing from
-* the back of the text to the front of the text.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-* Notes:
-* - This routine does not recognise PGPLOT escape sequences.
-* - A NULL value for "just" causes a value of "CC" to be used.
-*/
-
-/* Local Constants: */
-#define MXLEN 256
-
-/* Local Variables: */
- Camera *cam;
- Camera newcam;
- float ch;
- float tm, txc, tyc;
- float txleft, tybase;
- float xt[ 150 ], yt[ 150 ], zt[ 150 ], h[ 150 ], r[ 150 ];
- float xb[3], yb[3], zb[3], bl[3];
- int clip;
- int i;
- int j;
- int k;
- int unused;
- int xygrid[ 300 ];
-
-/* If there is nothing to plot return without error. */
- if( nlist == 0 ) return 1;
-
-/* Find the 3D world coordinates at the left hand end of the text
- baseline. */
- if( !TxExt( list, nlist, ref, just, tx, ty, tz, xb, yb, zb, bl ) ) return 0;
-
-/* Get the Camera for the current device identifier. Abort if no camera
- is available. */
- if( ! (cam = getCamera( 1 ) ) ) return 0;
-
-/* Create a Camera structure that describes the transformation from
- text plane coordinates to 2D world coords. */
- if( !TextCam( &newcam, ref, tx, ty, tz ) ) return 0;
-
-/* Save the current clipping flag, and ensure clipping is off. */
- ccpgqclp( &clip );
- ccpgsclp( 0 );
-
-/* Calculate the text plane X coord of the left hand edge of the first
- character. */
- txleft = tx[ 0 ]*( bl[ 0 ] - ref[ 0 ] ) +
- tx[ 1 ]*( bl[ 1 ] - ref[ 1 ] ) +
- tx[ 2 ]*( bl[ 2 ] - ref[ 2 ] );
-
-/* Calculate the text plane Y coord at the text baseline. */
- tybase = ty[ 0 ]*( bl[ 0 ] - ref[ 0 ] ) +
- ty[ 1 ]*( bl[ 1 ] - ref[ 1 ] ) +
- ty[ 2 ]*( bl[ 2 ] - ref[ 2 ] );
-
-/* Get the character height in world coordinate units. A PGPLOT
- character height of 1.0 corresponds to 1/40 of the 2D window height. */
- ch = getCharHeight();
-
-/* Get the polylines that correspond to the first symbol. */
- ccgrsyxd( list[ 0 ], xygrid, &unused );
-
-/* Create a linear transformation that maps the font grid coordinate
- system used by grsyxd onto text plane coordinates. This transformation
- will be different for each character in the string. The initial
- transformation set up now is appropriate for the first character. The
- mapping is:
-
- Text_x = txc + tm*Font_x
- Text_y = tyc + tm*Font_y
-
-*/
- tm = ch/( xygrid[ 2 ] - xygrid[ 1 ] );
- tyc = tybase - tm*xygrid[ 1 ];
- txc = txleft - tm*xygrid[ 3 ];
-
-/* Loop round each symbol. */
- for( i = 0; i < nlist; i++ ) {
-
-/* Loop round each polyline that forms a segment of the character */
- k = 5;
- while( 1 ) {
-
-/* Map the polyline vertices into text plane coordinates. */
- j = 0;
- while( j < 150 ){
- if( xygrid[ k ] != -64 ) {
- xt[ j ] = txc + tm*xygrid[ k++ ];
- yt[ j ] = tyc + tm*xygrid[ k++ ];
- zt[ j++ ] = 0.0;
- } else {
- break;
- }
- }
-
-/* Map the text plane coordinates into 2D world coordinates. */
- if( j > 0 ) {
- (void) transform( &newcam, j, xt, yt, zt, h, r );
-
-/* Draw the polyline. */
- ccpgline( j, h, r );
- }
-
-/* If this is the last segment in the character, pass on to the next
- character. */
- if( xygrid[ k + 1 ] == -64 ) break;
-
-/* Otherwise, skip over the end markers in the xygrid array, and go on to
- plot the next polyline segment. */
- k += 2;
- }
-
-/* If this is not the last symbol... */
- if( i != nlist - 1 ) {
-
-/* Set the text x value at which to place the left edge of the next
- character. This is the right hand edge of the character just drawn. */
- txleft += tm*( xygrid[ 4 ] - xygrid[ 3 ] );
-
-/* Get the polylines that correspond to the next symbol. */
- ccgrsyxd( list[ i + 1 ], xygrid, &unused );
-
-/* Modify the transformation from font grid coords to text plane coords
- so that it is appropriate for the next character in the string. */
- txc = txleft - tm*xygrid[ 3 ];
- }
-
-/* Next symbol. */
- }
-
-/* Re-instate original clipping flag. */
- ccpgsclp( clip );
-
-/* If we arrive here, we have been successful, so return a non-zero
- value. */
- return 1;
-
-/* Clear local constants. */
-#undef MXLEN
-}
-
-static int TxExt( int *list, int nlist, float ref[3], const char *just,
- float tx[3], float ty[3], float tz[3], float *xb, float *yb,
- float *zb, float bl[3] ){
-/*
-* Name:
-* TxExt
-
-* Purpose:
-* Get the extent of a character string.
-
-* Synopsis:
-* #include "grf3d.h"
-* int TxExt( int *list, int nlist, float ref[3], const char *just,
-* float tx[3], float ty[3], float tz[3], float *xb, float *yb,
-* float *zb, float bl[3] )
-
-* Description:
-* This function returns the corners of a box which would enclose the
-* supplied symbol list if it were displayed using Text.
-*
-* The returned box includes any leading or trailing spaces.
-
-* Parameters:
-* list
-* Pointer to an array of pgplot symbol numbers.
-* nlist
-* The length of the "list" array.
-* ref
-* The reference (x,y,z) coordinates.
-* just
-* A character string which specifies the location within the
-* text string which is to be placed at the reference position
-* given by x and y. The first character may be 'T' for "top",
-* 'C' for "centre", 'B' for "baseline", or "M" for "bottom", and
-* specifies the vertical location of the reference position. Note,
-* "baseline" corresponds to the base-line of normal text. Some
-* characters (eg "y", "g", "p", etc) descend below the base-line,
-* and so "M" and "B" will produce different effects for such
-* characters. The second character may be 'L' for "left", 'C' for
-* "centre", or 'R' for "right", and specifies the horizontal
-* location of the reference position. If the string has less than
-* 2 characters then 'C' is used for the missing characters.
-* tx
-* A unit vector (expressed in 3D world coords) along the text plane
-* X axis. This is parallel to the text base line.
-* ty
-* A unit vector (expressed in 3D world coords) along the text plane
-* Y axis. This is parallel to the projectionof ht eup vector on to
-* the text plane.
-* tz
-* A unit vector (expressed in 3D world coords) along the text plane
-* Z axis. This is perpendicular to the text plane, passing from
-* the back of the text to the front of the text.
-* xb
-* An array of 4 elements in which to return the x coordinate of
-* each corner of the bounding box.
-* yb
-* An array of 4 elements in which to return the y coordinate of
-* each corner of the bounding box.
-* zb
-* An array of 4 elements in which to return the z coordinate of
-* each corner of the bounding box.
-* bl
-* The 3D world coordinates at the left hand end of the text
-* baseline.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-* Notes:
-* - The order of the corners is anti-clockwise starting at the
-* bottom left when viewing the text normally (i.e. face on).
-* - This routine does not recognise PGPLOT escape sequences.
-* - A NULL value for "just" causes a value of "CC" to be used.
-*/
-
-/* Local Constants: */
-#define MXLEN 256
-
-/* Local Variables: */
- float ch;
- float txlo, txhi, tylo, tyhi, tyzero;
- float tm;
- float w;
- int i;
- int unused;
- int xygrid[ 300 ];
- int gylo, gyhi, width;
-
-/* Initialise the returned values to indicate no box available. */
- for( i = 0; i < 4; i++ ){
- xb[ i ] = 0.0;
- yb[ i ] = 0.0;
- zb[ i ] = 0.0;
- }
-
-/* If there is nothing to plot return without error. */
- if( nlist == 0 ) return 1;
-
-/* We now find the bounding box of the text in "text plane coordinates".
- These are (tx,ty,tz) axes that span the plane upon which the text is
- writtens. The origin of (tx,ty,tz) is at the supplied 3D reference
- position, the X axis increases along the text baseline, and Y axis
- increases along the text up vector, and Z increases from the back
- of the text to the front of the text (all are measured in 3D world
- coord units). We first find the bounds of the text in these text plane
- coordinates, assuming that the bottom left of the text baseline is
- placed at the given reference position (i.e. at the origiin of text
- plane coordinates). */
-
-/* Get the character height in world coordinate units. A PGPLOT
- character height of 1.0 corresponds to 1/40 of the 2D window height. */
- ch = getCharHeight();
-
-/* Initialise the Y bounds of the text bounding box in grid coords. */
- gylo = INT_MAX;
- gyhi = -INT_MAX;
-
-/* Initialise things. */
- width = 0;
- tm = 1.0;
-
-/* Loop round each symbol. */
- for( i = 0; i < nlist; i++ ) {
-
-/* Get the polylines that correspond to this symbol. */
- ccgrsyxd( list[ i ], xygrid, &unused );
-
-/* If this is the first symbol, set the scaling factor that converts
- grid units to text plane units. */
- if( i == 0 ) tm = ch/( xygrid[ 2 ] - xygrid[ 1 ] );
-
-/* Note the highest and lowest y grid value. */
- w = xygrid[ 2 ] - xygrid[ 1 ];
- if( w > gyhi ) gyhi = w;
-
- w = xygrid[ 0 ] - xygrid[ 1 ];
- if( w < gylo ) gylo = w;
-
-/* Increment the total width of the string in grid units. */
- width += xygrid[ 4 ] - xygrid[ 3 ];
- }
-
-/* Set up the bounding box in text plane coordinates. */
- txlo = 0.0;
- txhi = width*tm;
- tylo = gylo*tm;
- tyhi = gyhi*tm;
- tyzero = 0.0;
-
-/* Adjust the text plane bounding box to take account of the specified
- text justification. The above process implicitly assumed a
- justifiation of "BL". */
- if( !just || just[ 0 ] == 'C' || just[ 0 ] == 0 ){
- w = 0.5*( tyhi + tylo );
- tylo -= w;
- tyhi -= w;
- tyzero -= w;
-
- } else if( just[ 0 ] == 'T' ){
- w = tyhi;
- tylo -= w;
- tyhi -= w;
- tyzero -= w;
-
- } else if( just[ 0 ] == 'M' ){
- w = -tylo;
- tylo += w;
- tyhi += w;
- tyzero += w;
-
- } else if( just[ 0 ] != 'B' ) {
- astError( AST__GRFER, "astG3DTxExt: Justification string '%s' "
- "is invalid.", just );
- return 0;
- }
-
- if( !just || just[ 1 ] == 'C' || just[ 1 ] == 0 ){
- w = 0.5*( txhi + txlo );
- txlo -= w;
- txhi -= w;
-
- } else if( just[ 1 ] == 'R' ){
- w = txhi;
- txlo -= w;
- txhi -= w;
-
- } else if( just[ 1 ] == 'L' ){
- w = txlo;
- txlo -= w;
- txhi -= w;
-
- } else {
- astError( AST__GRFER, "astG3DTxExt: Justification string '%s' "
- "is invalid.", just );
- return 0;
- }
-
-/* Use the supplied text plane axis vectors to transform the corners of
- the text plane bounding box into 3D world coordinates. */
- xb[ 0 ] = tx[ 0 ]*txlo + ty[ 0 ]*tylo + ref[ 0 ];
- yb[ 0 ] = tx[ 1 ]*txlo + ty[ 1 ]*tylo + ref[ 1 ];
- zb[ 0 ] = tx[ 2 ]*txlo + ty[ 2 ]*tylo + ref[ 2 ];
-
- xb[ 1 ] = tx[ 0 ]*txhi + ty[ 0 ]*tylo + ref[ 0 ];
- yb[ 1 ] = tx[ 1 ]*txhi + ty[ 1 ]*tylo + ref[ 1 ];
- zb[ 1 ] = tx[ 2 ]*txhi + ty[ 2 ]*tylo + ref[ 2 ];
-
- xb[ 2 ] = tx[ 0 ]*txhi + ty[ 0 ]*tyhi + ref[ 0 ];
- yb[ 2 ] = tx[ 1 ]*txhi + ty[ 1 ]*tyhi + ref[ 1 ];
- zb[ 2 ] = tx[ 2 ]*txhi + ty[ 2 ]*tyhi + ref[ 2 ];
-
- xb[ 3 ] = tx[ 0 ]*txlo + ty[ 0 ]*tyhi + ref[ 0 ];
- yb[ 3 ] = tx[ 1 ]*txlo + ty[ 1 ]*tyhi + ref[ 1 ];
- zb[ 3 ] = tx[ 2 ]*txlo + ty[ 2 ]*tyhi + ref[ 2 ];
-
-/* Also transform the text plane coordinates at the bottom left of the
- text baseline into 3D world coordinates. */
- bl[ 0 ] = tx[ 0 ]*txlo + ty[ 0 ]*tyzero + ref[ 0 ];
- bl[ 1 ] = tx[ 1 ]*txlo + ty[ 1 ]*tyzero + ref[ 1 ];
- bl[ 2 ] = tx[ 2 ]*txlo + ty[ 2 ]*tyzero + ref[ 2 ];
-
-/* If we get here, we have been succesful, so return a non-zero value. */
- return 1;
-
-/* Clear local constants. */
-#undef MXLEN
-}
-
-static float getCharHeight( void ){
-/*
-* Name:
-* getCharHeight
-
-* Purpose:
-* Get the current text height setting.
-
-* Synopsis:
-* #include "grf3d.h"
-* float getCharHeight( void )
-
-* Description:
-* This function returns the PGPLOT character height, scaled into
-* world coordinate units.
-
-* Returned Value:
-* The character height, in world coordinate units.
-
-*/
-
-/* Local Variables: */
- float wx1, wx2, wy1, wy2;
- float ch;
-
-/* Get the bounds of the PGPLTO 2D window. */
- ccpgqwin( &wx1, &wx2, &wy1, &wy2 );
-
-/* Get the normalised PGPLOT character height. */
- ccpgqch( &ch );
-
-/* A PGPLOT character height of 1.0 corresponds to 1/40 of the 2D window
- height. Scale the normalised character height into world coordinate
- units, and return it. */
- return ch*fabs( wy1 - wy2 )/40.0;
-
-}
-
-static int getTextAxes( float ref[3], float up[3], float norm[3],
- const char *just, float tx[3], float ty[3],
- float tz[3], char newjust[3] ){
-/*
-* Name:
-* getTextAxes
-
-* Purpose:
-* Get unit vectors along the text plane coordinate axes.
-
-* Synopsis:
-* #include "grf3d.h"
-* int getTextAxes( float ref[3], float up[3], float norm[3],
-* const char *just, float tx[3], float ty[3],
-* float tz[3], char newjust[3] )
-
-* Description:
-* This function returns three unit vectors that define the axes of a
-* 3D Cartesian coordinate system known as "text plane coordinates".
-* These axes span the plane upon which text (or other graphics) is to
-* be written. The origin is at the supplied 3D reference position, the
-* X axis increases along the text baseline, and Y axis increases along
-* the text up vector, and Z increases from the back of the text to the
-* front of the text (all are measured in 3D world coord units).
-*
-* The returned vectors are reversed if this will result in text
-* appearing more "normal" (i.e. viewed from the front rather than
-* the back, and viewed upright rather thna upside down). If the
-* vectors are reversed, the justification string is also changed so
-* that the text occupies the requested area on the screen.
-
-* Parameters:
-* ref
-* The reference (x,y,z) coordinates.
-* up
-* The (x,y,z) up-vector for the text. The actual up vector used is
-* the projection of the supplied vector onto the plane specified by
-* "norm".
-* norm
-* The (x,y,z) components of a vector that is normal to the plane
-* containing the text. The given vector passes through the text
-* from the back to the front. If all components of this vector are
-* zero, then a normal vector pointing towards the camera eye is used.
-* just
-* The requested text justification, as supplied to astG3DText.
-* tx
-* A unit vector along the text plane X axis.
-* ty
-* A unit vector along the text plane X axis.
-* tz
-* A unit vector along the text plane X axis.
-* newjust
-* The text justification to use.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-*/
-
-/* Local Variables: */
- Camera *cam;
- float eye[3];
-
-/* Initialise the returned justification to equal the supplied
- justification, supplying defaults if required. . */
- if( just ) {
- strncpy( newjust, just, 2 );
- if( !newjust[ 0 ] ) newjust[ 0 ] = 'C';
- if( !newjust[ 1 ] ) newjust[ 1 ] = 'C';
- newjust[ 2 ] = 0;
- } else {
- strcpy( newjust, "CC" );
- }
-
-/* Get the Camera for the current device identifier. Abort if no camera
- is available. */
- if( !( cam = getCamera( 1 ) ) ) return 0;
-
-/* Calculate the vector from the reference position to the eye, and store
- it in "eye". */
- vectorSub( cam->eye_vector, ref, eye );
-
-/* Create unit vectors along the three axes of the text plane coordinate
- system. These unit vectors are represented in terms of the 3D world
- coordinate axes. The text Z axis is parallel to the supplied "norm"
- vector. */
- tz[ 0 ] = norm[ 0 ];
- tz[ 1 ] = norm[ 1 ];
- tz[ 2 ] = norm[ 2 ];
-
-/* Attempt to normalise the "tz" vector. If it has zero length, use the
- offset from the reference point to the eye. */
- if( ! vectorNorm( tz ) ){
-
-/* Use the "eye" vector calculated above as the text plane Z axis. */
- tz[ 0 ] = eye[ 0 ];
- tz[ 1 ] = eye[ 1 ];
- tz[ 2 ] = eye[ 2 ];
- }
-
-/* Find vectors along the text plane x and y axes. */
- vectorProduct( up, tz, tx );
- vectorProduct( tz, tx, ty );
-
-/* Normalise the three text plane axis vectors. If any vector has zero
- length, abort. */
- if( !vectorNorm( tx ) || !vectorNorm( ty ) || !vectorNorm( tz ) ) return 0;
-
-/* We now reverse text plane vectors if this will help ther text to be
- viewed "normally" on the screen. If the existing vectors cause the
- text to be viewed from the back rather than the front, reverse the tx
- and tz vectors so that he text is viewed from the front. */
- if( dotProduct( tz, eye ) < 0.0 ) {
- tz[ 0 ] = -tz[ 0 ];
- tz[ 1 ] = -tz[ 1 ];
- tz[ 2 ] = -tz[ 2 ];
- tx[ 0 ] = -tx[ 0 ];
- tx[ 1 ] = -tx[ 1 ];
- tx[ 2 ] = -tx[ 2 ];
-
-/* The text will have spun around the up vector (i.e. the ty axis), so
- modify the horizontal justification so that thex text occupies the same
- area on the screen. */
- if( newjust[ 1 ] == 'L' ) {
- newjust[ 1 ] = 'R';
- } else if( newjust[ 1 ] == 'R' ) {
- newjust[ 1 ] = 'L';
- }
- }
-
-/* If the existing vectors cause the text to be viewed upside down, reverse
- the tx and ty vectors so that he text is viewed right way up. */
- if( dotProduct( ty, cam->up_vector ) < 0.0 ) {
- ty[ 0 ] = -ty[ 0 ];
- ty[ 1 ] = -ty[ 1 ];
- ty[ 2 ] = -ty[ 2 ];
- tx[ 0 ] = -tx[ 0 ];
- tx[ 1 ] = -tx[ 1 ];
- tx[ 2 ] = -tx[ 2 ];
-
-/* The text will have spun around the tz vector (i.e. the viewing vector),
- so modify both vertical and horizontal justification so that the text
- occupies the same area on the screen. */
- if( newjust[ 0 ] == 'B' || newjust[ 0 ] == 'M' ) {
- newjust[ 0 ] = 'T';
- } else if( newjust[ 0 ] == 'T' ) {
- newjust[ 0 ] = 'M';
- }
-
- if( newjust[ 1 ] == 'L' ) {
- newjust[ 1 ] = 'R';
- } else if( newjust[ 1 ] == 'R' ) {
- newjust[ 1 ] = 'L';
- }
- }
-
-/* If we arraive here we have been succesful, so return a non-zero value. */
- return 1;
-}
-
-static void getSymbolList( const char *text, int mxlen, int *nlist, int *list ){
-/*
-* Name:
-* getSymbolList
-
-* Purpose:
-* Get the extent of a character string.
-
-* Synopsis:
-* #include "grf3d.h"
-* void getSymbolList( const char *text, int mxlen, int *nlist, int *list )
-
-* Description:
-* This function converts a supplied text string into a list of PGPLOT
-* symbol numbers for the current PGPLOT font.
-
-* Parameters:
-* text
-* Pointer to a null-terminated character string.
-* mxlen
-* The length of the "list" array.
-* nlist
-* Pointer to an integer in which to place the number of symbol
-* values stored in the "list" array. This will be returned equal
-* to zero if there are no non-blank characters in the supplied
-* string. If there is one or more non-blank characters in "text",
-* then the returned list will include any trailing spaces.
-* list
-* Pointer to an array in which to return the symbol numbers. The
-* array should be at least "mxlen" elements long.
-*/
-
-
-/* Local Variables: */
- int font;
- int tlen;
-
-/* Assume we have no symbols. */
- *nlist = 0;
-
-/* Check there is something to plot. */
- if( astChrLen( text ) > 0 ) {
-
-/* Find the length of text that can be displayed. */
- tlen = strlen( text );
- if( tlen > mxlen ) tlen = mxlen;
-
-/* Get the current PGPLOT font. */
- ccpgqcf( &font );
-
-/* Convert the supplied string into a list of symbol numbers */
- ccgrsyds( list, nlist, text, tlen, font );
- }
-}
-
-static Camera *getCamera( int check ){
-/*
-*+
-* Name:
-* getCamera
-
-* Purpose:
-* Return a pointer to the Camera structure for the current PGPLOT
-* device.
-
-* Synopsis:
-* #include "grf3d.h"
-* Camera getCamera( int check )
-
-* Description:
-* This function returns a pointer to a static structure that defines the
-* position and orientation of the camera in 3D world coords. It can
-* be used to transform positions from 3D world coordinates (x,y,z) to
-* 2D screen coordinates (h,r).
-
-* Parameters:
-* check
-* If non-zero, a check will be made that the Camera has been
-* initialised, and NULL will be returned if the Camera has not
-* been initialsied. If "check" is zero, a pointer to the Camera
-* is returned even if it has not been initialised.
-
-* Returned Value:
-* Pointer to the Camera, or NULL if an error occurs.
-*-
-*/
-
-/* Local Variables: */
- int id;
- Camera *cam = NULL;
-
-/* Get the pgplot current device identifier. Return NULL if no device is
- currently open. */
- ccpgqid( &id );
- if( id > 0 && id <= MXDEV ) {
-
-/* Get a pointer to the required Camera structure. */
- cam = cameras + id - 1;
-
-/* If required, check that the structure has been initialised. */
- if( check && cam->ok_flag != CAMERA_OK ) cam = NULL;
- }
-
- return cam;
-}
-
-static int transform( Camera *cam, int n, float *x, float *y, float *z,
- float *h, float *r ){
-/*
-*+
-* Name:
-* transform
-
-* Purpose:
-* Transform positions from 3D world coords to 2D screen cooords.
-
-* Synopsis:
-* #include "grf3d.h"
-* int transform( Camera *cam, int n, float *x, float *y, float *z,
-* float *h, float *r )
-
-* Description:
-* This function transforms a set of positions from 3D world
-* coordinates (x,y,z) to 2D screen coordinates (h,r), using the
-* supplied camera.
-
-* Parameters:
-* cam
-* Pointer to a structure descibing the projection from 3D world
-* coords to 2D screen coords. If NULL, the camera for the current
-* PGPLOT device is used.
-* n
-* The number of positions to transform.
-* x
-* An array of "n" values for the "x" axis of the 3D world
-* coordinate system.
-* y
-* An array of "n" values for the "y" axis of the 3D world
-* coordinate system.
-* z
-* An array of "n" values for the "z" axis of the 3D world
-* coordinate system.
-* h
-* An array to receive the "n" values for the "h" axis of the 2D
-* screen coordinate system.
-* r
-* An array to receive the "n" values for the "r" axis of the 2D
-* screen coordinate system.
-
-* Returned Value:
-* Zero if an error occurs. One otherwise.
-
-*-
-*/
-
-/* Local Variables: */
- float dx, dy, dz, u, v, w, f;
- int i;
- int result = 0;
-
-/* If no camera was supplied use the camera for the current PGPLOT
- device. */
- if( ! cam ) cam = getCamera( 0 );
-
-/* Check we now have a usable camera */
- if( cam && cam->ok_flag == CAMERA_OK ) {
- result = 1;
-
-/* Loop round each position. */
- for( i = 0; i < n; i++ ) {
-
-/* Offset from supplied position to the camera eye. */
- dx = x[ i ] - (cam->eye_vector)[ 0 ];
- dy = y[ i ] - (cam->eye_vector)[ 1 ];
- dz = z[ i ] - (cam->eye_vector)[ 2 ];
-
-/* Get the representation of this vector in the (u,v,w) system. */
- u = (cam->w2c_matrix)[ 0 ]*dx +
- (cam->w2c_matrix)[ 1 ]*dy +
- (cam->w2c_matrix)[ 2 ]*dz;
-
- v = (cam->w2c_matrix)[ 3 ]*dx +
- (cam->w2c_matrix)[ 4 ]*dy +
- (cam->w2c_matrix)[ 5 ]*dz;
-
- w = (cam->w2c_matrix)[ 6 ]*dx +
- (cam->w2c_matrix)[ 7 ]*dy +
- (cam->w2c_matrix)[ 8 ]*dz;
-
-/* Find the screen coords, using either a tangent plane or an
- orothograhic projection. */
- if( cam->screen_distance != 0.0 ) {
- if( w != 0.0 ) {
- f = cam->screen_distance/w;
- h[ i ] = -f*u;
- r[ i ] = f*v;
- } else {
- h[ i ] = FLT_MAX;
- r[ i ] = FLT_MAX;
- }
- } else {
- h[ i ] = -u;
- r[ i ] = v;
- }
-
- }
- }
- return result;
-}
-
-
-/* Dot product of a pair of 3-vectors "a" and "b". */
-static float dotProduct( float *a, float *b ){
- return a[ 0 ]*b[ 0 ] + a[ 1 ]*b[ 1 ] + a[ 2 ]*b[ 2 ];
-}
-
-/* Vector product of a pair of 3-vectors "a" and "b". */
-static void vectorProduct( float *a, float *b, float *c ){
- c[ 0 ] = a[ 1 ]*b[ 2 ] - a[ 2 ]*b[ 1 ];
- c[ 1 ] = a[ 2 ]*b[ 0 ] - a[ 0 ]*b[ 2 ];
- c[ 2 ] = a[ 0 ]*b[ 1 ] - a[ 1 ]*b[ 0 ];
-}
-
-/* Vector from "b" to "a" (i.e. a minus b) . */
-static void vectorSub( float *a, float *b, float *c ){
- c[ 0 ] = a[ 0 ] - b[ 0 ];
- c[ 1 ] = a[ 1 ] - b[ 1 ];
- c[ 2 ] = a[ 2 ] - b[ 2 ];
-}
-
-/* Normalises a vector to a unit length. Returns zero if the vector has
- zero length, and 1 otherwise. */
-static int vectorNorm( float *a ){
- float d;
- d = vectorModulus( a );
- if( d > 0.0 ) {
- a[ 0 ] /= d;
- a[ 1 ] /= d;
- a[ 2 ] /= d;
- return 1;
- } else {
- return 0;
- }
-}
-
-/* Return the length of a vector. */
-static float vectorModulus( float *a ){
- return sqrtf( a[ 0 ]*a[ 0 ] + a[ 1 ]*a[ 1 ] + a[ 2 ]*a[ 2 ] );
-}
-
-
-
-
-
-
-
-/* PGPLOT interface functions */
-/* ========================== */
-static void ccpgqclp(int *clip){
- F77_INTEGER_TYPE CLIP;
- F77_CALL(pgqclp)( INTEGER_ARG(&CLIP) );
- *clip = (int) CLIP;
-}
-
-static void ccpgsclp(int clip){
- F77_INTEGER_TYPE CLIP;
- CLIP = (F77_INTEGER_TYPE) clip;
- F77_CALL(pgsclp)( INTEGER_ARG(&CLIP) );
-}
-
-static void ccpgqid(int *id){
- F77_INTEGER_TYPE ID;
- F77_CALL(pgqid)( INTEGER_ARG(&ID) );
- *id = (int) ID;
-}
-
-
-static void ccpgswin(float x1, float x2, float y1, float y2){
- F77_REAL_TYPE X1;
- F77_REAL_TYPE X2;
- F77_REAL_TYPE Y1;
- F77_REAL_TYPE Y2;
-
- X1 = x1;
- X2 = x2;
- Y1 = y1;
- Y2 = y2;
-
- F77_CALL(pgswin)( REAL_ARG(&X1), REAL_ARG(&X2), REAL_ARG(&Y1),
- REAL_ARG(&Y2) );
-}
-
-static void ccpgline(int n, float xpts[], float ypts[] ){
- F77_INTEGER_TYPE N;
- F77_REAL_TYPE *XX;
- F77_REAL_TYPE *YY;
- int i;
-
- XX = (F77_REAL_TYPE *) astMalloc( sizeof( F77_REAL_TYPE )*(size_t) n );
- YY = (F77_REAL_TYPE *) astMalloc( sizeof( F77_REAL_TYPE )*(size_t) n );
-
- if( astOK ){
-
- for( i = 0; i < n; i++ ){
- XX[ i ] = (F77_REAL_TYPE) xpts[ i ];
- YY[ i ] = (F77_REAL_TYPE) ypts[ i ];
- }
-
- N = (F77_INTEGER_TYPE) n;
-
- F77_CALL(pgline)( INTEGER_ARG(&N), REAL_ARRAY_ARG(XX),
- REAL_ARRAY_ARG(YY) );
-
- XX = (F77_REAL_TYPE *) astFree( (void *) XX );
- YY = (F77_REAL_TYPE *) astFree( (void *) YY );
- }
-}
-
-static void ccpgpoly(int n, float xpts[], float ypts[] ){
- F77_INTEGER_TYPE N;
- F77_REAL_TYPE *XX;
- F77_REAL_TYPE *YY;
- int i;
-
- XX = (F77_REAL_TYPE *) astMalloc( sizeof( F77_REAL_TYPE )*(size_t) n );
- YY = (F77_REAL_TYPE *) astMalloc( sizeof( F77_REAL_TYPE )*(size_t) n );
-
- if( astOK ){
-
- for( i = 0; i < n; i++ ){
- XX[ i ] = (F77_REAL_TYPE) xpts[ i ];
- YY[ i ] = (F77_REAL_TYPE) ypts[ i ];
- }
-
- N = (F77_INTEGER_TYPE) n;
-
- F77_CALL(pgpoly)( INTEGER_ARG(&N), REAL_ARRAY_ARG(XX),
- REAL_ARRAY_ARG(YY) );
-
- XX = (F77_REAL_TYPE *) astFree( (void *) XX );
- YY = (F77_REAL_TYPE *) astFree( (void *) YY );
- }
-}
-
-static void ccpgqwin(float *x1, float *x2, float *y1, float *y2){
- F77_REAL_TYPE X1;
- F77_REAL_TYPE X2;
- F77_REAL_TYPE Y1;
- F77_REAL_TYPE Y2;
-
- F77_CALL(pgqwin)( REAL_ARG(&X1), REAL_ARG(&X2), REAL_ARG(&Y1),
- REAL_ARG(&Y2) );
- *x1 = (float) X1;
- *x2 = (float) X2;
- *y1 = (float) Y1;
- *y2 = (float) Y2;
-}
-
-static void ccpgqch(float *ch){
- F77_REAL_TYPE CH;
- F77_CALL(pgqch)( REAL_ARG(&CH) );
- *ch = (float) CH;
-}
-
-static void ccpgqcf(int *cf){
- F77_INTEGER_TYPE CF;
- F77_CALL(pgqcf)( INTEGER_ARG(&CF) );
- *cf = (int) CF;
-}
-
-static void ccgrsyds( int *list, int *nlist, const char *text, int tlen,
- int font ){
- F77_INTEGER_TYPE *LIST;
- F77_INTEGER_TYPE NLIST;
- DECLARE_CHARACTER(LTEXT,MXSTRLEN);
- F77_INTEGER_TYPE FONT;
- int ftext_length;
- int i;
-
- ftext_length = tlen;
- if( ftext_length > LTEXT_length ) ftext_length = LTEXT_length;
- astStringExport( text, LTEXT, ftext_length );
-
- LIST = (F77_INTEGER_TYPE *) astMalloc( sizeof( F77_INTEGER_TYPE )*(size_t) ftext_length );
-
- if( astOK ){
-
- FONT = (F77_INTEGER_TYPE) font;
-
- F77_CALL(grsyds)( INTEGER_ARRAY_ARG(LIST), INTEGER_ARG(&NLIST),
- CHARACTER_ARG(LTEXT), INTEGER_ARG(&FONT)
- TRAIL_ARG(ftext) );
-
- *nlist = (int) NLIST;
- for( i = 0; i < ftext_length; i++ ){
- list[ i ] = (int) LIST[ i ];
- }
-
- LIST = (F77_INTEGER_TYPE *) astFree( (void *) LIST );
- }
-}
-
-static void ccgrsymk( int type, int font, int *symbol ){
- F77_INTEGER_TYPE TYPE;
- F77_INTEGER_TYPE FONT;
- F77_INTEGER_TYPE SYMBOL;
-
- TYPE = (F77_INTEGER_TYPE) type;
- FONT = (F77_INTEGER_TYPE) font;
- F77_CALL(grsymk)( INTEGER_ARG(&TYPE), INTEGER_ARG(&FONT),
- INTEGER_ARG(&SYMBOL) );
- *symbol = (int) SYMBOL;
-}
-
-
-static void ccgrsyxd( int symbol, int *xygrid, int *unused ){
- F77_INTEGER_TYPE SYMBOL;
- DECLARE_INTEGER_ARRAY(XYGRID,300);
- F77_LOGICAL_TYPE UNUSED;
- int i;
-
- SYMBOL = (F77_INTEGER_TYPE) symbol;
- F77_CALL(grsyxd)( INTEGER_ARG(&SYMBOL), INTEGER_ARRAY_ARG(XYGRID),
- LOGICAL_ARG(&UNUSED) );
-
- *unused = ( UNUSED == F77_TRUE );
- for( i = 0; i < 5; i++ ) xygrid[ i ] = (int) XYGRID[ i ];
- for( ; i < 300; i++ ){
- xygrid[ i ] = (int) XYGRID[ i ];
- i++;
- if( ( xygrid[ i ] = (int) XYGRID[ i ] ) == -64 ) break;
- }
-}
-
-static void ccpgupdt( void ){
- F77_CALL(pgupdt)();
-}
-
-static void ccpgqci(int *ci){
- F77_INTEGER_TYPE CI;
- F77_CALL(pgqci)( INTEGER_ARG(&CI) );
- *ci = (int) CI;
-}
-
-static void ccpgqls(int *ls){
- F77_INTEGER_TYPE LS;
- F77_CALL(pgqls)( INTEGER_ARG(&LS) );
- *ls = (int) LS;
-}
-
-static void ccpgqlw(int *lw){
- F77_INTEGER_TYPE LW;
- F77_CALL(pgqlw)( INTEGER_ARG(&LW) );
- *lw = (int) LW;
-}
-
-static void ccpgscf(int cf){
- F77_INTEGER_TYPE CF;
- CF = (F77_INTEGER_TYPE) cf;
- F77_CALL(pgscf)( INTEGER_ARG(&CF) );
-}
-
-static void ccpgsch(float ch){
- F77_REAL_TYPE CH;
- CH = (F77_REAL_TYPE) ch;
- F77_CALL(pgsch)( REAL_ARG(&CH) );
-}
-
-static void ccpgsci(int ci){
- F77_INTEGER_TYPE CI;
- CI = (F77_INTEGER_TYPE) ci;
- F77_CALL(pgsci)( INTEGER_ARG(&ci) );
-}
-
-static void ccpgsls(int ls){
- F77_INTEGER_TYPE LS;
- LS = (F77_INTEGER_TYPE) ls;
- F77_CALL(pgsls)( INTEGER_ARG(&LS) );
-}
-
-static void ccpgslw(int lw){
- F77_INTEGER_TYPE LW;
- LW = (F77_INTEGER_TYPE) lw;
- F77_CALL(pgslw)( INTEGER_ARG(&LW) );
-}
-
-static void ccpgqvsz(int units, float *x1, float *x2, float *y1, float *y2){
- F77_INTEGER_TYPE UNITS;
- F77_REAL_TYPE X1;
- F77_REAL_TYPE X2;
- F77_REAL_TYPE Y1;
- F77_REAL_TYPE Y2;
-
- UNITS = (F77_INTEGER_TYPE) units;
- F77_CALL(pgqvsz)( INTEGER_ARG(&UNITS), REAL_ARG(&X1), REAL_ARG(&X2),
- REAL_ARG(&Y1), REAL_ARG(&Y2) );
- *x1 = (float) X1;
- *x2 = (float) X2;
- *y1 = (float) Y1;
- *y2 = (float) Y2;
-}
-
-
-
-/* Fortran interfaces for public functions in this module. */
-/* ======================================================= */
-
-
-F77_LOGICAL_FUNCTION(pg3d_findnearest)( INTEGER(N),
- REAL_ARRAY(X),
- REAL_ARRAY(Y),
- REAL_ARRAY(Z),
- INTEGER(ICLOSE) ){
- GENPTR_INTEGER(N)
- GENPTR_REAL_ARRAY(X)
- GENPTR_REAL_ARRAY(Y)
- GENPTR_REAL_ARRAY(Z)
- GENPTR_INTEGER(ICLOSE)
- return PG3DFindNearest( *N, X, Y, Z, ICLOSE ) ? F77_TRUE : F77_FALSE;
-}
-
-
-
-F77_LOGICAL_FUNCTION(pg3d_setcamera)( REAL_ARRAY(EYE),
- REAL_ARRAY(TARGET),
- REAL_ARRAY(UP),
- REAL(SCREEN) ){
- GENPTR_REAL_ARRAY(EYE)
- GENPTR_REAL_ARRAY(TARGET)
- GENPTR_REAL_ARRAY(UP)
- GENPTR_REAL(SCREEN)
- return PG3DSetCamera( EYE, TARGET, UP, *SCREEN ) ? F77_TRUE : F77_FALSE;
-}
-
-
-F77_LOGICAL_FUNCTION(pg3d_autocamera)( REAL_ARRAY(LBND),
- REAL_ARRAY(UBND) ){
- GENPTR_REAL_ARRAY(LBND)
- GENPTR_REAL_ARRAY(UBND)
- return PG3DAutoCamera( LBND, UBND ) ? F77_TRUE : F77_FALSE;
-}
-
-F77_LOGICAL_FUNCTION(pg3d_seteye)( REAL_ARRAY(EYE) ){
- GENPTR_REAL_ARRAY(EYE)
- return PG3DSetEye( EYE ) ? F77_TRUE : F77_FALSE;
-}
-
-F77_LOGICAL_FUNCTION(pg3d_setup)( REAL_ARRAY(UP) ){
- GENPTR_REAL_ARRAY(UP)
- return PG3DSetUp( UP ) ? F77_TRUE : F77_FALSE;
-}
-
-F77_LOGICAL_FUNCTION(pg3d_rotateeye)( INTEGER(DIR), REAL(ANGLE) ){
- GENPTR_INTEGER(DIR)
- GENPTR_REAL(ANGLE)
- return PG3DRotateEye( *DIR, *ANGLE ) ? F77_TRUE : F77_FALSE;
-}
-
-F77_LOGICAL_FUNCTION(pg3d_forward)( REAL(DISTANCE) ){
- GENPTR_REAL(DISTANCE)
- return PG3DForward( *DISTANCE ) ? F77_TRUE : F77_FALSE;
-}
-
-F77_LOGICAL_FUNCTION(ast_g3dmark)( INTEGER(N),
- REAL_ARRAY(X),
- REAL_ARRAY(Y),
- REAL_ARRAY(Z),
- INTEGER(TYPE),
- REAL_ARRAY(NORM)){
- GENPTR_INTEGER(N)
- GENPTR_REAL_ARRAY(X)
- GENPTR_REAL_ARRAY(Y)
- GENPTR_REAL_ARRAY(Z)
- GENPTR_INTEGER(TYPE)
- GENPTR_REAL_ARRAY(NORM)
- return astG3DMark( *N, X, Y, Z, *TYPE, NORM ) ? F77_TRUE : F77_FALSE;
-
-}
-
-F77_LOGICAL_FUNCTION(ast_g3dline)( INTEGER(N),
- REAL_ARRAY(X),
- REAL_ARRAY(Y),
- REAL_ARRAY(Z) ){
- GENPTR_INTEGER(N)
- GENPTR_REAL_ARRAY(X)
- GENPTR_REAL_ARRAY(Y)
- GENPTR_REAL_ARRAY(Z)
- return astG3DLine( *N, X, Y, Z ) ? F77_TRUE : F77_FALSE;
-
-}
-
-
-F77_INTEGER_FUNCTION(ast_g3dtext)( CHARACTER(TEXT),
- REAL_ARRAY(REF),
- CHARACTER(JUST),
- REAL_ARRAY(UP),
- REAL_ARRAY(NORM)
- TRAIL(TEXT)
- TRAIL(JUST) ){
- GENPTR_CHARACTER(TEXT)
- GENPTR_REAL_ARRAY(REF)
- GENPTR_CHARACTER(JUST)
- GENPTR_REAL_ARRAY(UP)
- GENPTR_REAL_ARRAY(NORM)
- F77_INTEGER_TYPE(RESULT);
- char *text, *just, *p;
-
- text = astString( TEXT, TEXT_length );
- just = astString( JUST, JUST_length );
-
-/* Ignore trailing spaces in the text */
- p = text + TEXT_length;
- while( !*p || *p == ' ' ) *(p--) = 0;
-
- if( astOK ) {
- RESULT = (F77_INTEGER_TYPE) astG3DText( text, REF, just, UP, NORM );
- } else {
- RESULT = 0;
- }
-
- (void) astFree( text );
- (void) astFree( just );
-
- return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_g3dtxext)( CHARACTER(TEXT),
- REAL_ARRAY(REF),
- CHARACTER(JUST),
- REAL_ARRAY(UP),
- REAL_ARRAY(NORM),
- REAL_ARRAY(XB),
- REAL_ARRAY(YB),
- REAL_ARRAY(ZB),
- REAL_ARRAY(BL)
- TRAIL(TEXT)
- TRAIL(JUST) ){
- GENPTR_CHARACTER(TEXT)
- GENPTR_REAL_ARRAY(REF)
- GENPTR_CHARACTER(JUST)
- GENPTR_REAL_ARRAY(UP)
- GENPTR_REAL_ARRAY(NORM)
- GENPTR_REAL_ARRAY(XB)
- GENPTR_REAL_ARRAY(YB)
- GENPTR_REAL_ARRAY(ZB)
- GENPTR_REAL_ARRAY(BL)
- F77_INTEGER_TYPE(RESULT);
- char *text, *just, *p;
-
- text = astString( TEXT, TEXT_length );
- just = astString( JUST, JUST_length );
-
-/* Ignore trailing spaces in the text */
- p = text + TEXT_length;
- while( !*p || *p == ' ' ) *(p--) = 0;
-
- if( astOK ) {
- RESULT = (F77_INTEGER_TYPE) astG3DTxExt( text, REF, just, UP, NORM,
- XB, YB, ZB, BL );
- } else {
- RESULT = 0;
- }
-
- (void) astFree( text );
- (void) astFree( just );
-
- return RESULT;
-}
-
-
diff --git a/ast-5.3-1/grf_2.0.c b/ast-5.3-1/grf_2.0.c
deleted file mode 100644
index 4e1ec1b..0000000
--- a/ast-5.3-1/grf_2.0.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-* Name:
-* grf_2.0.c
-
-* Purpose:
-* Implement the grf module required by AST V2.0 if no graphics system
-* is available.
-
-* Description:
-* This file implements the low level graphics functions required
-* by the rest of AST V2.0, by reporting errors when called.
-
-* Inheritance:
-* This module is not a class and does not inherit.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 23-OCT-1996 (DSB):
-* Original version.
-* 13-NOV-1996 (DSB):
-* Modified to issue error messages using astError instead of printf.
-* 23-NOV-2004 (DSB):
-* Renamed from grf_null.c
-*/
-
-/* Header files */
-/* ============ */
-#include "grf.h" /* Declare the functions in this module */
-#include "error.h" /* AST error reporting facilities */
-#include "ast_err.h" /* AST error codes */
-
-/* Function Prototypes */
-/* =================== */
-static void Report( const char * );
-
-/* Function definitions */
-/* ==================== */
-int astGFlush( void ){
- Report( "astGFlush");
- return 0;
-}
-
-int astGLine( int n, const float *x, const float *y ){
- Report( "astGLine" );
- return 0;
-}
-
-int astGQch( float *chv, float *chh ){
- Report( "astGQch" );
- return 0;
-}
-
-int astGMark( int n, const float *x, const float *y, int type ){
- Report( "astGMark" );
- return 0;
-}
-
-int astGText( const char *text, float x, float y, const char *just,
- float upx, float upy ){
- Report( "astGText" );
- return 0;
-}
-
-int astGTxExt( const char *text, float x, float y, const char *just,
- float upx, float upy, float *xb, float *yb ){
- Report( "astGTxExt" );
- return 0;
-}
-
-int astGAttr( int attr, double value, double *old_value, int prim ){
- Report( "astGAttr" );
- return 0;
-}
-
-static void Report( const char *name ){
- astError( AST__GRFER, "%s: No graphics facilities are available.", name );
- astError( AST__GRFER, "Re-link using an option such as '-pgplot' with "
- "the ast_link script." );
-}
diff --git a/ast-5.3-1/grf_3.2.c b/ast-5.3-1/grf_3.2.c
deleted file mode 100644
index 5b9ded2..0000000
--- a/ast-5.3-1/grf_3.2.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
-* Name:
-* grf_3.2.c
-
-* Purpose:
-* Implement the grf module required by AST V3.2 if no graphics system
-* is available.
-
-* Description:
-* This file implements the low level graphics functions required
-* by the rest of AST V3.2, except for those already defined in
-* grf_2.0.c (i.e. those needed by AST V2.0). These implementations
-* simply report an error when called.
-
-* Inheritance:
-* This module is not a class and does not inherit.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 23-NOV-2004 (DSB):
-* Original version.
-*/
-
-/* Header files */
-/* ============ */
-#include "grf.h" /* Declare the functions in this module */
-#include "error.h" /* AST error reporting facilities */
-#include "ast_err.h" /* AST error codes */
-
-/* Function Prototypes */
-/* =================== */
-static void Report( const char * );
-
-/* Function definitions */
-/* ==================== */
-int astGScales( float *alpha, float *beta ){
- Report( "astGScales" );
- return 0;
-}
-
-int astGCap( int cap, int value ){
- return 0;
-}
-
-static void Report( const char *name ){
- astError( AST__GRFER, "%s: The graphics facilities implement by %s "
- "(introduced at AST V3.2) are needed but are unavailable.",
- name, name );
- astError( AST__GRFER, "Re-link using a suitable option such as '-pgplot' "
- "with the ast_link script, or add an implementation of this "
- "function to your 'grf' module." );
-}
diff --git a/ast-5.3-1/grf_pgplot.c b/ast-5.3-1/grf_pgplot.c
deleted file mode 100644
index 37e9549..0000000
--- a/ast-5.3-1/grf_pgplot.c
+++ /dev/null
@@ -1,1411 +0,0 @@
-/*
-* Name:
-* grf_pgplot.c
-
-* Purpose:
-* Implement the grf module using the PGPLOT graphics system.
-
-* Description:
-* This file implements the low level graphics functions required
-* by the rest of AST, by calling suitable PGPLOT functions (the
-* FORTRAN PGPLOT interface is used).
-*
-* This file can be used as a template for the development of
-* similar modules to support alternative graphics systems.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 27-JUN-1996 (DSB):
-* Original version.
-* 13-NOV-1996 (DSB):
-* Use C wrappers for PGPLOT functions.
-* 15-NOV-1996 (RFWS):
-* Merged the C interface to PGPLOT into this file so that the
-* interface functions can be static.
-* 7-OCT-1997 (DSB):
-* Corrected astGText and astGTxExt, by including a check for
-* reversed axes. Previously, the up-vector was used as supplied
-* even if the axes had been reversed.
-* 15-OCT-1997 (DSB):
-* o Corrected astGText and astGTxExt to take account of non-equal
-* scales on the two axes.
-* o Modified astGTxExt so that it includes any leading or trailing
-* spaces in the returned box.
-* o Added astGAxScale.
-* 28-OCT-1998 (DSB):
-* o Changed interpretation of the Width attribute from inches, to
-* a multiple of a small line width.
-* o Wrapper for pgplot F77 subroutine PGQVSZ added.
-* 30-JAN-2004 (DSB):
-* o Added GCap
-* o Renamed GAxScale as GScales
-*/
-
-/* Macros */
-/* ====== */
-#define MXSTRLEN 80 /* String length at which truncation starts
- within pgqtxt and pgptxt. */
-
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-#include "f77.h" /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h" /* C to FORTRAN interface functions */
-#include "pointset.h" /* Defines AST__BAD */
-#include "memory.h" /* Memory allocation facilities */
-#include "error.h" /* Error reporting facilities */
-#include "grf.h" /* Interface to this module */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <string.h>
-
-/* Constants. */
-/* ========== */
-#define R2D 57.29578 /* Radians to degrees factor */
-
-/* Function Prototypes. */
-/* ==================== */
-/* These define a local C interface to the PGPLOT library. */
-static void ccpgline(int n, float xpts[], float ypts[] );
-static void ccpgpt(int n, float xpts[], float ypts[], int symbol);
-static void ccpgptxt(float x, float y, float angle, float fjust, char *text );
-static void ccpgqcf(int *cf);
-static void ccpgqch(float *ch);
-static void ccpgqci(int *ci);
-static void ccpglen(int units, char *text, float *xl, float *yl);
-static void ccpgqcs(int units, float *xch, float *ych);
-static void ccpgqls(int *ls);
-static void ccpgqlw(int *lw);
-static void ccpgqtbg(int *tbci);
-static void ccpgqtxt(float x, float y, float angle, float fjust, char *text, float xbox[], float ybox[]);
-static void ccpgqvp(int units, float *x1, float *x2, float *y1, float *y2);
-static void ccpgqvsz(int units, float *x1, float *x2, float *y1, float *y2);
-static void ccpgqwin(float *x1, float *x2, float *y1, float *y2);
-static void ccpgscf(int cf);
-static void ccpgsch(float ch);
-static void ccpgsci(int ci);
-static void ccpgsls(int ls);
-static void ccpgslw(int lw);
-static void ccpgstbg(int tbci);
-static void ccpgupdt( void );
-
-/* These describe the native Fortran interface to the PGPLOT library. The
- macros used come from the "f77.h" include file. */
-F77_SUBROUTINE(pgline)( INTEGER(n), REAL_ARRAY(x), REAL_ARRAY(y) );
-F77_SUBROUTINE(pgpt)( INTEGER(n), REAL_ARRAY(x), REAL_ARRAY(y), INTEGER(TYPE) );
-F77_SUBROUTINE(pgptxt)( REAL(x), REAL(y), REAL(angle), REAL(fjust), CHARACTER(text) TRAIL(text) );
-F77_SUBROUTINE(pgqcf)( INTEGER(ival) );
-F77_SUBROUTINE(pgqch)( REAL(rval) );
-F77_SUBROUTINE(pgqci)( INTEGER(ival) );
-F77_SUBROUTINE(pgqcs)( INTEGER(units), REAL(chv), REAL(chh) );
-F77_SUBROUTINE(pglen)( INTEGER(units), CHARACTER(text), REAL(xl), REAL(yl) TRAIL(text) );
-F77_SUBROUTINE(pgqls)( INTEGER(ival) );
-F77_SUBROUTINE(pgqlw)( INTEGER(ival) );
-F77_SUBROUTINE(pgqtbg)( INTEGER(tbg) );
-F77_SUBROUTINE(pgqtxt)( REAL(x), REAL(y), REAL(angle), REAL(fjust), CHARACTER(text), REAL_ARRAY(xbox), REAL_ARRAY(ybox) TRAIL(text) );
-F77_SUBROUTINE(pgqvp)( INTEGER(units), REAL(vx1), REAL(vx2), REAL(vy1), REAL(vy2) );
-F77_SUBROUTINE(pgqvsz)( INTEGER(units), REAL(x1), REAL(x2), REAL(y1), REAL(y2) );
-F77_SUBROUTINE(pgqwin)( REAL(wx1), REAL(wx2), REAL(wy1), REAL(wy2) );
-F77_SUBROUTINE(pgscf)( INTEGER(ival) );
-F77_SUBROUTINE(pgsch)( REAL(rval) );
-F77_SUBROUTINE(pgsci)( INTEGER(ival) );
-F77_SUBROUTINE(pgsls)( INTEGER(ival) );
-F77_SUBROUTINE(pgslw)( INTEGER(ival) );
-F77_SUBROUTINE(pgstbg)( INTEGER(tbg) );
-F77_SUBROUTINE(pgupdt)( );
-
-/* Externally visible functions. */
-/* ============================= */
-/* These implement the "grf" interface in terms of the local C interface
- to PGPLOT. */
-int astGFlush( void ){
-/*
-*+
-* Name:
-* astGFlush
-
-* Purpose:
-* Flush all pending graphics to the output device.
-
-* Synopsis:
-* #include "grf.h"
-* int astGFlush( void )
-
-* Description:
-* This function ensures that the display device is up-to-date,
-* by flushing any pending graphics to the output device.
-
-* Parameters:
-* None.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-*-
-*/
-
- ccpgupdt();
- return 1;
-}
-
-int astGCap( int cap, int value ){
-/*
-*+
-* Name:
-* astGCap
-
-* Purpose:
-* Indicate if this grf module has a given capability.
-
-* Synopsis:
-* #include "grf.h"
-* int astGCap( int cap, int value )
-
-* Description:
-* This function is called by the AST Plot class to determine if the
-* grf module has a given capability, as indicated by the "cap"
-* argument.
-
-* Parameters:
-* cap
-* The capability being inquired about. This will be one of the
-* following constants defined in grf.h:
-*
-* GRF__SCALES: This function should return a non-zero value if
-* it implements the astGScales function, and zero otherwise. The
-* supplied "value" argument should be ignored.
-*
-* GRF__MJUST: This function should return a non-zero value if
-* the astGText and astGTxExt functions recognise "M" as a
-* character in the justification string. If the first character of
-* a justification string is "M", then the text should be justified
-* with the given reference point at the bottom of the bounding box.
-* This is different to "B" justification, which requests that the
-* reference point be put on the baseline of the text, since some
-* characters hang down below the baseline. If the astGText or
-* astGTxExt function cannot differentiate between "M" and "B",
-* then this function should return zero, in which case "M"
-* justification will never be requested by Plot. The supplied
-* "value" argument should be ignored.
-*
-* GRF__ESC: This function should return a non-zero value if the
-* astGText and astGTxExt functions can recognise and interpret
-* graphics escape sequences within the supplied string. These
-* escape sequences are described below. Zero should be returned
-* if escape sequences cannot be interpreted (in which case the
-* Plot class will interpret them itself if needed). The supplied
-* "value" argument should be ignored only if escape sequences cannot
-* be interpreted by astGText and astGTxExt. Otherwise, "value"
-* indicates whether astGText and astGTxExt should interpret escape
-* sequences in subsequent calls. If "value" is non-zero then
-* escape sequences should be interpreted by astGText and
-* astGTxExt. Otherwise, they should be drawn as literal text.
-
-* Returned Value:
-* The return value, as described above. Zero should be returned if
-* the supplied capability is not recognised.
-
-* Escape Sequences:
-* Escape sequences are introduced into the text string by a percent
-* "%" character. The following escape sequences are currently recognised
-* ("..." represents a string of one or more decimal digits):
-*
-* %% - Print a literal "%" character (type GRF__ESPER ).
-*
-* %^...+ - Draw subsequent characters as super-scripts. The digits
-* "..." give the distance from the base-line of "normal"
-* text to the base-line of the super-script text, scaled
-* so that a value of "100" corresponds to the height of
-* "normal" text (type GRF__ESSUP ).
-* %^+ - Draw subsequent characters with the normal base-line.
-*
-* %v...+ - Draw subsequent characters as sub-scripts. The digits
-* "..." give the distance from the base-line of "normal"
-* text to the base-line of the sub-script text, scaled
-* so that a value of "100" corresponds to the height of
-* "normal" text (type GRF__ESSUB ).
-*
-* %v+ - Draw subsequent characters with the normal base-line
-* (equivalent to %^+).
-*
-* %>...+ - Leave a gap before drawing subsequent characters.
-* The digits "..." give the size of the gap, scaled
-* so that a value of "100" corresponds to the height of
-* "normal" text (type GRF__ESGAP ).
-*
-* %<...+ - Move backwards before drawing subsequent characters.
-* The digits "..." give the size of the movement, scaled
-* so that a value of "100" corresponds to the height of
-* "normal" text (type GRF_ESBAC).
-*
-* %s...+ - Change the Size attribute for subsequent characters. The
-* digits "..." give the new Size as a fraction of the
-* "normal" Size, scaled so that a value of "100" corresponds
-* to 1.0 (type GRF__ESSIZ ).
-*
-* %s+ - Reset the Size attribute to its "normal" value.
-*
-* %w...+ - Change the Width attribute for subsequent characters. The
-* digits "..." give the new width as a fraction of the
-* "normal" Width, scaled so that a value of "100" corresponds
-* to 1.0 (type GRF__ESWID ).
-*
-* %w+ - Reset the Size attribute to its "normal" value.
-*
-* %f...+ - Change the Font attribute for subsequent characters. The
-* digits "..." give the new Font value (type GRF__ESFON ).
-*
-* %f+ - Reset the Font attribute to its "normal" value.
-*
-* %c...+ - Change the Colour attribute for subsequent characters. The
-* digits "..." give the new Colour value (type GRF__ESCOL ).
-*
-* %c+ - Reset the Colour attribute to its "normal" value.
-*
-* %t...+ - Change the Style attribute for subsequent characters. The
-* digits "..." give the new Style value (type GRF__ESSTY ).
-*
-* %t+ - Reset the Style attribute to its "normal" value.
-*
-* %- - Push the current graphics attribute values onto the top of
-* the stack - see "%+" (type GRF__ESPSH).
-*
-* %+ - Pop attributes values of the top the stack - see "%-". If
-* the stack is empty, "normal" attribute values are restored
-* (type GRF__ESPOP).
-*
-* The astFindEscape function (in libast.a) can be used to locate escape
-* sequences within a text string. It has the following signature:
-*
-* #include "plot.h"
-* int astFindEscape( const char *text, int *type, int *value, int *nc )
-*
-* Parameters:
-* text
-* Pointer to the string to be checked.
-* type
-* Pointer to a location at which to return the type of escape
-* sequence. Each type is identified by a symbolic constant defined
-* in grf.h and is indicated in the above section. The returned value
-* is undefined if the supplied text does not begin with an escape
-* sequence.
-* value
-* Pointer to a lcation at which to return the integer value
-* associated with the escape sequence. All usable values will be
-* positive. Zero is returned if the escape sequence has no associated
-* integer. A value of -1 indicates that the attribute identified by
-* "type" should be reset to its "normal" value (as established using
-* the astGAttr function, etc). The returned value is undefined if
-* the supplied text does not begin with an escape sequence.
-* nc
-* Pointer to a location at which to return the number of
-* characters read by this call. If the text starts with an escape
-* sequence, the returned value will be the number of characters in
-* the escape sequence. Otherwise, the returned value will be the
-* number of characters prior to the first escape sequence, or the
-* length of the supplied text if no escape sequence is found.
-
-* Returned Value:
-* A non-zero value is returned if the supplied text starts with a
-* graphics escape sequence, and zero is returned otherwise.
-
-*-
-*/
-
- int result = 0;
- if( cap == GRF__SCALES ) result = 1;
- return result;
-}
-
-int astGLine( int n, const float *x, const float *y ){
-/*
-*+
-* Name:
-* astGLine
-
-* Purpose:
-* Draw a polyline (i.e. a set of connected lines).
-
-* Synopsis:
-* #include "grf.h"
-* int astGLine( int n, const float *x, const float *y )
-
-* Description:
-* This function displays lines joining the given positions.
-
-* Parameters:
-* n
-* The number of positions to be joined together.
-* x
-* A pointer to an array holding the "n" x values.
-* y
-* A pointer to an array holding the "n" y values.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-* Notes:
-* - Nothing is done if "n" is less than 2, or if a NULL pointer is
-* given for either "x" or "y".
-
-*-
-*/
-
- if( n > 1 && x && y ) ccpgline( n, (float *) x, (float *) y );
- return 1;
-}
-
-int astGMark( int n, const float *x, const float *y, int type ){
-/*
-*+
-* Name:
-* astGMark
-
-* Purpose:
-* Draw a set of markers.
-
-* Synopsis:
-* #include "grf.h"
-* int astGMark( int n, const float *x, const float *y, int type )
-
-* Description:
-* This function displays markers at the given positions.
-
-* Parameters:
-* n
-* The number of markers to draw.
-* x
-* A pointer to an array holding the "n" x values.
-* y
-* A pointer to an array holding the "n" y values.
-* type
-* An integer which can be used to indicate the type of marker symbol
-* required.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-* Notes:
-* - Nothing is done if "n" is less than 1, or if a NULL pointer is
-* given for either "x" or "y".
-
-*-
-*/
-
- if( n > 0 && x && y ) ccpgpt( n, (float *) x, (float *) y, type );
- return 1;
-}
-
-int astGText( const char *text, float x, float y, const char *just,
- float upx, float upy ){
-/*
-*+
-* Name:
-* astGText
-
-* Purpose:
-* Draw a character string.
-
-* Synopsis:
-* #include "grf.h"
-* int astGText( const char *text, float x, float y, const char *just,
-* float upx, float upy )
-
-* Description:
-* This function displays a character string at a given position
-* using a specified justification and up-vector.
-
-* Parameters:
-* text
-* Pointer to a null-terminated character string to be displayed.
-* x
-* The reference x coordinate.
-* y
-* The reference y coordinate.
-* just
-* A character string which specifies the location within the
-* text string which is to be placed at the reference position
-* given by x and y. The first character may be 'T' for "top",
-* 'C' for "centre", or 'B' for "bottom", and specifies the
-* vertical location of the reference position. Note, "bottom"
-* corresponds to the base-line of normal text. Some characters
-* (eg "y", "g", "p", etc) descend below the base-line. The second
-* character may be 'L' for "left", 'C' for "centre", or 'R'
-* for "right", and specifies the horizontal location of the
-* reference position. If the string has less than 2 characters
-* then 'C' is used for the missing characters.
-* upx
-* The x component of the up-vector for the text, in graphics world
-* coordinates. If necessary the supplied value should be negated
-* to ensure that positive values always refer to displacements from
-* left to right on the screen.
-* upy
-* The y component of the up-vector for the text, in graphics world
-* coordinates. If necessary the supplied value should be negated
-* to ensure that positive values always refer to displacements from
-* bottom to top on the screen.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-* Notes:
-* - Any graphics within the rotated box enclosing the text are erased.
-* - A NULL value for "just" causes a value of "CC" to be used.
-* - Both "upx" and "upy" being zero causes an error.
-* - Any unrecognised character in "just" causes an error.
-*-
-*/
-
-/* Local Variables: */
- char lj[ 2 ];
- float uplen, xbox[ 4 ], ybox[ 4 ];
- float angle, fjust, hu, test, alpha, beta;
- int i, tbg;
-
-/* Check that there is something to draw. */
- if( text && text[ 0 ] != 0 ){
-
-/* Fill in any missing parts of the justification string. */
- if( just ){
- if( just[ 0 ] == 'T' || just[ 0 ] == 'C' || just[ 0 ] == 'B' ){
- lj[ 0 ] = just[ 0 ];
- } else {
- astError( AST__GRFER, "astGText: Justification string '%s' is "
- "invalid.", just );
- return 0;
- }
-
- if( just[ 1 ] == 'L' || just[ 1 ] == 'C' || just[ 1 ] == 'R' ){
- lj[ 1 ] = just[ 1 ];
- } else {
- astError( AST__GRFER, "astGText: Justification string '%s' "
- "is invalid.", just );
- return 0;
- }
-
- } else {
- lj[ 0 ] = 'C';
- lj[ 1 ] = 'C';
- }
-
-/* Find the conversion factors between increment in world coordinate axes,
- and the corresponding increments in millimetres ( Xmm = alpha*Xworld,
- Ymm = beta*Yworld ). */
- if( !astGScales( &alpha, &beta ) ) return 0;
-
-/* If either axis is reversed, reverse the supplied up-vector components
- so that they refer to the world-coordinates axes. */
- if( alpha < 0.0 ) upx = -upx;
- if( beta < 0.0 ) upy = -upy;
-
-/* Get the angle between the text base-line and horizontal. */
- angle = atan2( -(double) upx*alpha, (double) upy*beta )*R2D;
-
-/* Get the fractional horizontal justification as needed by PGPLOT. */
- if( lj[ 1 ] == 'L' ) {
- fjust = 0.0;
- } else if( lj[ 1 ] == 'R' ) {
- fjust = 1.0;
- } else {
- fjust = 0.5;
- }
-
-/* Unless the requested justification is "Bottom", we need to adjust
- the supplied reference position before we use it with PGPLOT because
- PGPLOT assumes "Bottom" justification. */
- if( lj[0] != 'B' ) {
-
-/* Get the bounding box of the string. Note, only the size of the box is
- significant here, not its position. Also note, leading and trailing
- spaces are not included in the bounding box. */
- ccpgqtxt( x, y, angle, fjust, (char *) text, xbox, ybox );
-
-/* Normalise the up-vector in world coordinates. */
- uplen = sqrt( (double) (upx*upx + upy*upy) );
- if( uplen > 0.0 ){
- upx /= uplen;
- upy /= uplen;
- } else {
- astError( AST__GRFER, "astGText: Zero length up-vector supplied.");
- return 0;
- }
-
-/* Find the height of the text above the base-line. Note, the PGPLOT
- manual is not clear about the order of the corners returned by
- pgqtxt, so we have to find the largest distance between
- the corners in the direction of the supplied up-vector. */
- hu = 0.0;
- for( i = 0; i < 4; i++ ){
- test = upx*( xbox[ i ] - x ) + upy*( ybox[ i ] - y );
- if( test > hu ) hu = test;
- }
-
-/* Adjust the vertical position of the reference point, since PGPLOT
- requires it to be at the bottom of the text. */
- if( lj[ 0 ] == 'T' ){
- x -= upx*hu;
- y -= upy*hu;
- } else if( lj[ 0 ] == 'C' ){
- x -= 0.5*upx*hu;
- y -= 0.5*upy*hu;
- }
- }
-
-/* Display the text, erasing any graphics. */
- ccpgqtbg( &tbg );
- ccpgstbg( 0 );
- ccpgptxt( x, y, angle, fjust, (char *) text );
- ccpgstbg( tbg );
- }
-
-/* Return. */
- return 1;
-}
-
-int astGScales( float *alpha, float *beta ){
-/*
-*+
-* Name:
-* astGScales
-
-* Purpose:
-* Get the axis scales.
-
-* Synopsis:
-* #include "grf.h"
-* int astGScales( float *alpha, float *beta )
-
-* Description:
-* This function returns two values (one for each axis) which scale
-* increments on the corresponding axis into a "normal" coordinate
-* system in which:
-* 1 - The axes have equal scale in terms of (for instance)
-* millimetres per unit distance.
-* 2 - X values increase from left to right.
-* 3 - Y values increase from bottom to top.
-
-* Parameters:
-* alpha
-* A pointer to the location at which to return the scale for the
-* X axis (i.e. Xnorm = alpha*Xworld).
-* beta
-* A pointer to the location at which to return the scale for the
-* Y axis (i.e. Ynorm = beta*Yworld).
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-*-
-*/
-
-/* Local Variables: */
- float nx1, nx2, ny1, ny2, wx1, wx2, wy1, wy2;
- int ret;
-
-/* Find the conversion factors between increment in world coordinate axes,
- and the corresponding increments in millimetres ( Xmm = alpha*Xworld,
- Ymm = beta*Yworld ). */
- ccpgqvp( 2, &nx1, &nx2, &ny1, &ny2 );
- ccpgqwin( &wx1, &wx2, &wy1, &wy2 );
-
- if( wx2 != wx1 && wy2 != wy1 &&
- nx2 != nx1 && ny2 != ny1 ) {
- *alpha= ( nx2 - nx1 ) / ( wx2 - wx1 );
- *beta = ( ny2 - ny1 ) / ( wy2 - wy1 );
- ret = 1;
- } else {
- astError( AST__GRFER, "astGScales: The graphics window or viewport has zero size." );
- ret = 0;
- }
-
- return ret;
-}
-
-int astGTxExt( const char *text, float x, float y, const char *just,
- float upx, float upy, float *xb, float *yb ){
-/*
-*+
-* Name:
-* astGTxExt
-
-* Purpose:
-* Get the extent of a character string.
-
-* Synopsis:
-* #include "grf.h"
-* int astGTxExt( const char *text, float x, float y, const char *just,
-* float upx, float upy, float *xb, float *yb )
-
-* Description:
-* This function returns the corners of a box which would enclose the
-* supplied character string if it were displayed using astGText.
-*
-* The returned box INCLUDES any leading or trailing spaces.
-
-* Parameters:
-* text
-* Pointer to a null-terminated character string to be displayed.
-* x
-* The reference x coordinate.
-* y
-* The reference y coordinate.
-* just
-* A character string which specifies the location within the
-* text string which is to be placed at the reference position
-* given by x and y. The first character may be 'T' for "top",
-* 'C' for "centre", or 'B' for "bottom", and specifies the
-* vertical location of the reference position. Note, "bottom"
-* corresponds to the base-line of normal text. Some characters
-* (eg "y", "g", "p", etc) descend below the base-line. The second
-* character may be 'L' for "left", 'C' for "centre", or 'R'
-* for "right", and specifies the horizontal location of the
-* reference position. If the string has less than 2 characters
-* then 'C' is used for the missing characters.
-* upx
-* The x component of the up-vector for the text, in graphics world
-* coordinates. If necessary the supplied value should be negated
-* to ensure that positive values always refer to displacements from
-* left to right on the screen.
-* upy
-* The y component of the up-vector for the text, in graphics world
-* coordinates. If necessary the supplied value should be negated
-* to ensure that positive values always refer to displacements from
-* bottom to top on the screen.
-* xb
-* An array of 4 elements in which to return the x coordinate of
-* each corner of the bounding box.
-* yb
-* An array of 4 elements in which to return the y coordinate of
-* each corner of the bounding box.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-* Notes:
-* - The order of the corners is anti-clockwise (in world coordinates)
-* starting at the bottom left.
-* - A NULL value for "just" causes a value of "CC" to be used.
-* - Both "upx" and "upy" being zero causes an error.
-* - Any unrecognised character in "just" causes an error.
-* - Zero is returned for all bounds of the box if an error occurs.
-
-*-
-*/
-
-/* Local Variables: */
- char lj[ 2 ];
- float udx, udy, vdx, vdy, vx, vy, uplen, xbox[ 4 ],
- ybox[ 4 ], uxu, uyu, uxd, uyd, ux, uy;
- float angle, width, test, xl, yl;
- float alpha, beta, xc, yc, hu, hd, a, b;
- int i;
-
-/* Initialise the returned values to indicate no box available. */
- for( i = 0; i < 4; i++ ){
- xb[ i ] = 0.0;
- yb[ i ] = 0.0;
- }
-
-/* Check that there is something to draw. */
- if( text && text[ 0 ] != 0 ){
-
-/* Fill in any missing parts of the justification string. */
- if( just ){
- if( just[ 0 ] == 'T' || just[ 0 ] == 'C' || just[ 0 ] == 'B' ){
- lj[ 0 ] = just[ 0 ];
- } else {
- astError( AST__GRFER, "astGTxExt: Justification string '%s' is "
- "invalid.", just );
- return 0;
- }
-
- if( just[ 1 ] == 'L' || just[ 1 ] == 'C' || just[ 1 ] == 'R' ){
- lj[ 1 ] = just[ 1 ];
- } else {
- astError( AST__GRFER, "astGTxExt: Justification string '%s' is "
- "invalid.", just );
- return 0;
- }
-
- } else {
- lj[ 0 ] = 'C';
- lj[ 1 ] = 'C';
- }
-
-/* Find the conversion factors between increment in world coordinate axes,
- and the corresponding increments in millimetres ( Xmm = alpha*Xworld,
- Ymm = beta*Yworld ). */
- if( !astGScales( &alpha, &beta ) ) return 0;
-
-/* If either axis is reversed, reverse the supplied up-vector components
- so that they refer to the world-coordinates axes. */
- if( alpha < 0.0 ) upx = -upx;
- if( beta < 0.0 ) upy = -upy;
-
-/* Convert the up-vector into millimetres. */
- ux = alpha*upx;
- uy = beta*upy;
-
-/* Normalise the up-vector to a length of 1 millimetre. */
- uplen = sqrt( (double) (ux*ux + uy*uy) );
- if( uplen > 0.0 ){
- ux /= uplen;
- uy /= uplen;
- } else {
- astError( AST__GRFER, "astGText: Zero length up-vector supplied.");
- return 0;
- }
-
-/* Form the base-line vector by rotating the up-vector by 90 degrees
- clockwise. */
- vx = uy;
- vy = -ux;
-
-/* Get the angle between the text base-line and horizontal. */
- angle = atan2( (double) vy, (double) vx )*R2D;
-
-/* Get the bounding box of the string drawn with its bottom left corner
- at the origin. */
- ccpgqtxt( 0.0, 0.0, angle, 0.0, (char *) text, xbox, ybox );
-
-/* Convert the returned bounding box world coordinates into millimetres. */
- for( i = 0; i < 4; i++ ){
- xbox[ i ] *= alpha;
- ybox[ i ] *= beta;
- }
-
-/* Find the height of the bounding box, in millimetres. Note,
- the PGPLOT manual is not clear about the order of the corners
- returned by pgqtxt, so we have to find the largest distance between
- the corners in the direction of the supplied up-vector. The reference
- point is on the text base-line which is not usually at the bottom of
- the bounding box (some letters - like "y" - extend below the base-line).
- Find the distance from the base-line to the top (hu) and bottom (hd)
- of the bounding box. */
- hu = -FLT_MAX;
- hd = FLT_MAX;
- for( i = 0; i < 4; i++ ){
- test = ux*xbox[ i ] + uy*ybox[ i ];
- if( test > hu ) hu = test;
- if( test < hd ) hd = test;
- }
-
-/* Get an up and a down vector scaled to the height/depth of the
- bounding box above/below the text base-line . */
- uxu = ux*hu;
- uyu = uy*hu;
- uxd = ux*hd;
- uyd = uy*hd;
-
-/* The bounding box returned by pgqtxt does not include any leading or
- trailing spaces. We need to include such spaces in the returned box.
- To do this we get the length of the text string in millimetres
- using pglen instead of using the bounding box returned by pgqtxt. */
- ccpglen( 2, (char *) text, &xl, &yl );
-
-/* The abolute width of the string in millimetres may depend on the
- up-vector. The values returned by pglen are for horizontal and
- vertical text. Find the width using the supplied up-vector. */
- a = uy*xl;
- b = ux*yl;
- width = sqrt( a*a + b*b );
-
-/* The pglen function returns a value which is slightly smaller than
- the area cleared to hold the text when written using pgptxt. Increase
- the text width so that it is about equal to the area cleared. */
- width += 0.2*hu;
-
-/* Scale the base-line vector so that its length is equal to the width
- of the bounding box (including spaces). */
- vx *= width;
- vy *= width;
-
-/* Convert the base-line vector back into world coordinates. */
- vx /= alpha;
- vy /= beta;
-
-/* Convert the up and down vectors into world coordinates. */
- uxu /= alpha;
- uyu /= beta;
- uxd /= alpha;
- uyd /= beta;
-
-/* Find the coordinates at the centre of the bounding box in world
- coordinates. */
- xc = x;
- yc = y;
-
- if( lj[0] == 'B' ) {
- xc += 0.5*uxu;
- yc += 0.5*uyu;
- } else if( lj[0] == 'T' ) {
- xc -= 0.5*uxu;
- yc -= 0.5*uyu;
- }
-
- if( lj[1] == 'L' ) {
- xc += 0.5*vx;
- yc += 0.5*vy;
- } else if( lj[1] == 'R' ) {
- xc -= 0.5*vx;
- yc -= 0.5*vy;
- }
-
-/* Get the corners of the bounding box. */
- vdx = 0.5*vx;
- vdy = 0.5*vy;
- udx = 0.5*uxu;
- udy = 0.5*uyu;
-
-/* Bottom left corner... */
- xb[ 0 ] = xc - vdx - udx + uxd;
- yb[ 0 ] = yc - vdy - udy + uyd;
-
-/* Bottom right corner... */
- xb[ 1 ] = xc + vdx - udx + uxd;
- yb[ 1 ] = yc + vdy - udy + uyd;
-
-/* Top right corner... */
- xb[ 2 ] = xc + vdx + udx;
- yb[ 2 ] = yc + vdy + udy;
-
-/* Top left corner... */
- xb[ 3 ] = xc - vdx + udx;
- yb[ 3 ] = yc - vdy + udy;
-
- }
-
-/* Return. */
- return 1;
-}
-
-int astGQch( float *chv, float *chh ){
-/*
-*+
-* Name:
-* astGQch
-
-* Purpose:
-* Return the character height in world coordinates.
-
-* Synopsis:
-* #include "grf.h"
-* int astGQch( float *chv, float *chh )
-
-* Description:
-* This function returns the heights of characters drawn vertically and
-* horizontally in world coordinates.
-
-* Parameters:
-* chv
-* A pointer to the double which is to receive the height of
-* characters drawn with a vertical baseline . This will be an
-* increment in the X axis.
-* chh
-* A pointer to the double which is to receive the height of
-* characters drawn with a horizontal baseline. This will be an
-* increment in the Y axis.
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-*-
-*/
-
-/* Local Variables: */
- float vx1,vx2,vy1,vy2,wx1,wx2,wy1,wy2;
-
-/* Get the character height in normalised device coordinates */
- ccpgqcs( 0, chv, chh );
-
-/* Get the bounds of the PGPLOT viewport in normalised device
- coordinates. */
- ccpgqvp( 0, &vx1, &vx2, &vy1, &vy2 );
-
-/* Get the bounds of the PGPLOT window in world coordinates. */
- ccpgqwin( &wx1, &wx2, &wy1, &wy2 );
-
-/* Convert the text height from normalised device coordinates into world
- coordinates for vertical text. Print an error message if the viewport
- has zero size. */
- if( vx1 != vx2 ){
- *chv *= ( wx2 - wx1 )/( vx2 - vx1 );
-
- } else {
- astError( AST__GRFER, "astGQch: The graphics viewport has zero size "
- "in the X direction.");
- return 0;
- }
-
-/* Convert the text height from normalised device coordinates into world
- coordinates for horizontal text. Print an error message if the viewport
- has zero size. */
- if( vy1 != vy2 ){
- *chh *= ( wy2 - wy1 )/( vy2 - vy1 );
- } else {
- astError( AST__GRFER, "astGQch: The graphics viewport has zero size "
- "in the Y direction.");
- return 0;
- }
-
-/* Return. */
- return 1;
-}
-
-int astGAttr( int attr, double value, double *old_value, int prim ){
-/*
-*+
-* Name:
-* astGAttr
-
-* Purpose:
-* Enquire or set a graphics attribute value.
-
-* Synopsis:
-* #include "grf.h"
-* int int astGAttr( int attr, double value, double *old_value, int prim )
-
-* Description:
-* This function returns the current value of a specified graphics
-* attribute, and optionally establishes a new value. The supplied
-* value is converted to an integer value if necessary before use.
-
-* Parameters:
-* attr
-* An integer value identifying the required attribute. The
-* following symbolic values are defined in grf.h:
-*
-* GRF__STYLE - Line style.
-* GRF__WIDTH - Line width.
-* GRF__SIZE - Character and marker size scale factor.
-* GRF__FONT - Character font.
-* GRF__COLOUR - Colour index.
-* value
-* A new value to store for the attribute. If this is AST__BAD
-* no value is stored.
-* old_value
-* A pointer to a double in which to return the attribute value.
-* If this is NULL, no value is returned.
-* prim
-* The sort of graphics primitive to be drawn with the new attribute.
-* Identified by the following values defined in grf.h:
-* GRF__LINE
-* GRF__MARK
-* GRF__TEXT
-
-* Returned Value:
-* A value of 0 is returned if an error occurs, and 1 is returned
-* otherwise.
-
-* Notes:
-
-*-
-*/
-
- int ival;
- float rval, dx, dy, deflw, x1, x2, y1, y2;
-
-/* If required retrieve the current line style, and set a new line style. */
- if( attr == GRF__STYLE ){
- ccpgqls( &ival );
- if( old_value ) *old_value = (double) ival;
-
- if( value != AST__BAD ){
- ival = (int) ( value + 0.5 );
- if( value < 0.0 ) ival -= 1;
-
- ival = ( ival - 1 ) % 5;
- ival += ( ival < 0 ) ? 6 : 1;
-
- ccpgsls( ival );
- }
-
-/* If required retrieve the current line width, and set a new line width.
- Line width is stored in Plot as a scale factor (1.0 for the default line
- width which is a fixed fraction of the diagonal of the view surface), but
- pgplot stores it in units of 0.005 of an inch. */
- } else if( attr == GRF__WIDTH ){
-
-/* Get the bounds of the view surface in inches. */
- ccpgqvsz( 1, &x1, &x2, &y1, &y2 );
-
-/* Find the default line width in inches (i.e. 0.0005 of the length
- of the view surface diagonal). */
- dx = ( x1 - x2 );
- dy = ( y1 - y2 );
- deflw = 0.0005*sqrt( (double )( dx*dx + dy*dy ) );
-
-/* Get the current pgplot line width in units of 0.005 of an inch. */
- ccpgqlw( &ival );
-
-/* If required, return the factor by which this exceeds the default line
- width found above. */
- if( old_value ) *old_value = (double)( ival )/( 200.0 * deflw );
-
-/* If a new line width has been provided, the pgplot line width needs to
- be set to the corresponding absolute value. */
- if( value != AST__BAD ){
- ival = (int) ( 200.0*value*deflw );
- if( ival < 1 ) {
- ival = 1;
- } else if( ival > 201 ){
- ival = 201;
- }
- ccpgslw( ival );
- }
-
-/* If required retrieve the current character size, and set a new size.
- The attribute value should be a factor by which to multiply the
- default character size. */
- } else if( attr == GRF__SIZE ){
- ccpgqch( &rval );
- if( old_value ) *old_value = (double) rval;
-
- if( value != AST__BAD ){
- ccpgsch( (float) value );
- }
-
-/* If required retrieve the current character font, and set a new font. */
- } else if( attr == GRF__FONT ){
- ccpgqcf( &ival );
- if( old_value ) *old_value = (double) ival;
-
- if( value != AST__BAD ){
- ival = (int) ( value + 0.5 );
- if( value < 0.0 ) ival -= 1;
-
- ival = ( ival - 1 ) % 4;
- ival += ( ival < 0 ) ? 5 : 1;
- ccpgscf( ival );
- }
-
-/* If required retrieve the current colour index, and set a new colour
- index. */
- } else if( attr == GRF__COLOUR ){
- ccpgqci( &ival );
- if( old_value ) *old_value = (double) ival;
-
- if( value != AST__BAD ){
- ival = (int) ( value + 0.5 );
- if( ival < 0 ) ival = 1;
- ccpgsci( ival );
- }
-
-/* Give an error message for any other attribute value. */
- } else {
- astError( AST__GRFER, "astGAttr: Unknown graphics attribute '%d' "
- "requested.", attr );
- return 0;
- }
-
-/* Return. */
- return 1;
-}
-
-/* Local Functions. */
-/* ================ */
-/* These implement the local C interface to PGPLOT in terms of its
- native Fortran interface. Only those PGPLOT functions used within
- this module are included. */
-static void ccpgline(int n, float xpts[], float ypts[] ){
- F77_INTEGER_TYPE N;
- F77_REAL_TYPE *XX;
- F77_REAL_TYPE *YY;
- int i;
-
- XX = (F77_REAL_TYPE *) astMalloc( sizeof( F77_REAL_TYPE )*(size_t) n );
- YY = (F77_REAL_TYPE *) astMalloc( sizeof( F77_REAL_TYPE )*(size_t) n );
-
- if( astOK ){
-
- for( i = 0; i < n; i++ ){
- XX[ i ] = (F77_REAL_TYPE) xpts[ i ];
- YY[ i ] = (F77_REAL_TYPE) ypts[ i ];
- }
-
- N = (F77_INTEGER_TYPE) n;
-
- F77_CALL(pgline)( INTEGER_ARG(&N), REAL_ARRAY_ARG(XX),
- REAL_ARRAY_ARG(YY) );
-
- XX = (F77_REAL_TYPE *) astFree( (void *) XX );
- YY = (F77_REAL_TYPE *) astFree( (void *) YY );
- }
-}
-
-static void ccpgpt(int n, float xpts[], float ypts[], int symbol){
- F77_INTEGER_TYPE N;
- F77_REAL_TYPE *XX;
- F77_REAL_TYPE *YY;
- F77_INTEGER_TYPE SYMBOL;
- int i;
-
- XX = (F77_REAL_TYPE *) astMalloc( sizeof( F77_REAL_TYPE )*(size_t) n );
- YY = (F77_REAL_TYPE *) astMalloc( sizeof( F77_REAL_TYPE )*(size_t) n );
-
- if( astOK ){
-
- for( i = 0; i < n; i++ ){
- XX[ i ] = (F77_REAL_TYPE) xpts[ i ];
- YY[ i ] = (F77_REAL_TYPE) ypts[ i ];
- }
-
- N = (F77_INTEGER_TYPE) n;
- SYMBOL = (F77_INTEGER_TYPE) symbol;
-
-
- F77_CALL(pgpt)( INTEGER_ARG(&N), REAL_ARRAY_ARG(XX),
- REAL_ARRAY_ARG(YY), INTEGER_ARG(&SYMBOL) );
-
- XX = (F77_REAL_TYPE *) astFree( (void *) XX );
- YY = (F77_REAL_TYPE *) astFree( (void *) YY );
- }
-}
-
-static void ccpgptxt(float x, float y, float angle, float fjust, char *text ){
- F77_REAL_TYPE X;
- F77_REAL_TYPE Y;
- F77_REAL_TYPE ANGLE;
- F77_REAL_TYPE FJUST;
- DECLARE_CHARACTER(LTEXT,MXSTRLEN);
- int ftext_length;
-
- X = (F77_REAL_TYPE) x;
- Y = (F77_REAL_TYPE) y;
- ANGLE = (F77_REAL_TYPE) angle;
- FJUST = (F77_REAL_TYPE) fjust;
-
- ftext_length = strlen( text );
- if( ftext_length > LTEXT_length ) ftext_length = LTEXT_length;
- astStringExport( text, LTEXT, ftext_length );
-
- F77_CALL(pgptxt)( REAL_ARG(&X), REAL_ARG(&Y), REAL_ARG(&ANGLE),
- REAL_ARG(&FJUST), CHARACTER_ARG(LTEXT)
- TRAIL_ARG(ftext) );
-}
-
-static void ccpgqtxt(float x, float y, float angle, float fjust, char *text,
- float xbox[], float ybox[]){
- F77_REAL_TYPE X;
- F77_REAL_TYPE Y;
- F77_REAL_TYPE ANGLE;
- F77_REAL_TYPE FJUST;
- DECLARE_CHARACTER(LTEXT,MXSTRLEN);
- F77_REAL_TYPE XBOX[ 4 ];
- F77_REAL_TYPE YBOX[ 4 ];
- int i;
- int ftext_length;
-
- X = (F77_REAL_TYPE) x;
- Y = (F77_REAL_TYPE) y;
- ANGLE = (F77_REAL_TYPE) angle;
- FJUST = (F77_REAL_TYPE) fjust;
-
- ftext_length = strlen( text );
- if( ftext_length > LTEXT_length ) ftext_length = LTEXT_length;
- astStringExport( text, LTEXT, ftext_length );
-
- F77_CALL(pgqtxt)( REAL_ARG(&X), REAL_ARG(&Y), REAL_ARG(&ANGLE),
- REAL_ARG(&FJUST), CHARACTER_ARG(LTEXT),
- REAL_ARRAY_ARG(XBOX), REAL_ARRAY_ARG(YBOX)
- TRAIL_ARG(ftext) );
-
- for( i = 0; i < 4; i++ ){
- xbox[ i ] = (float) XBOX[ i ];
- ybox[ i ] = (float) YBOX[ i ];
- }
-
-}
-
-static void ccpgqtbg(int *tbci){
- F77_INTEGER_TYPE TBCI;
- F77_CALL(pgqtbg)( INTEGER_ARG(&TBCI) );
- *tbci = (int) TBCI;
-}
-
-static void ccpgstbg(int tbci){
- F77_INTEGER_TYPE TBCI;
- TBCI = (F77_INTEGER_TYPE) tbci;
- F77_CALL(pgstbg)( INTEGER_ARG(&TBCI) );
-}
-
-static void ccpgqcs(int units, float *xch, float *ych){
- F77_INTEGER_TYPE UNITS;
- F77_REAL_TYPE XCH;
- F77_REAL_TYPE YCH;
- UNITS = (F77_INTEGER_TYPE) units;
-
- F77_CALL(pgqcs)( INTEGER_ARG(&UNITS), REAL_ARG(&XCH), REAL_ARG(&YCH) );
-
- *xch = (float) XCH;
- *ych = (float) YCH;
-}
-
-static void ccpglen(int units, char *text, float *xl, float *yl ){
- F77_INTEGER_TYPE UNITS;
- F77_REAL_TYPE XL;
- F77_REAL_TYPE YL;
- DECLARE_CHARACTER(LTEXT,MXSTRLEN);
- int ftext_length;
-
- UNITS = (F77_INTEGER_TYPE) units;
-
-
- ftext_length = strlen( text );
- if( ftext_length > LTEXT_length ) ftext_length = LTEXT_length;
- astStringExport( text, LTEXT, ftext_length );
-
- F77_CALL(pglen)( INTEGER_ARG(&UNITS), CHARACTER_ARG(LTEXT),
- REAL_ARG(&XL), REAL_ARG(&YL) TRAIL_ARG(ftext) );
-
- *xl = (float) XL;
- *yl = (float) YL;
-}
-
-static void ccpgqvp(int units, float *x1, float *x2, float *y1, float *y2){
- F77_INTEGER_TYPE UNITS;
- F77_REAL_TYPE X1;
- F77_REAL_TYPE X2;
- F77_REAL_TYPE Y1;
- F77_REAL_TYPE Y2;
-
- UNITS = (F77_INTEGER_TYPE) units;
- F77_CALL(pgqvp)( INTEGER_ARG(&UNITS), REAL_ARG(&X1), REAL_ARG(&X2),
- REAL_ARG(&Y1), REAL_ARG(&Y2) );
- *x1 = (float) X1;
- *x2 = (float) X2;
- *y1 = (float) Y1;
- *y2 = (float) Y2;
-}
-
-static void ccpgqvsz(int units, float *x1, float *x2, float *y1, float *y2){
- F77_INTEGER_TYPE UNITS;
- F77_REAL_TYPE X1;
- F77_REAL_TYPE X2;
- F77_REAL_TYPE Y1;
- F77_REAL_TYPE Y2;
-
- UNITS = (F77_INTEGER_TYPE) units;
- F77_CALL(pgqvsz)( INTEGER_ARG(&UNITS), REAL_ARG(&X1), REAL_ARG(&X2),
- REAL_ARG(&Y1), REAL_ARG(&Y2) );
- *x1 = (float) X1;
- *x2 = (float) X2;
- *y1 = (float) Y1;
- *y2 = (float) Y2;
-}
-
-static void ccpgqwin(float *x1, float *x2, float *y1, float *y2){
- F77_REAL_TYPE X1;
- F77_REAL_TYPE X2;
- F77_REAL_TYPE Y1;
- F77_REAL_TYPE Y2;
-
- F77_CALL(pgqwin)( REAL_ARG(&X1), REAL_ARG(&X2), REAL_ARG(&Y1),
- REAL_ARG(&Y2) );
- *x1 = (float) X1;
- *x2 = (float) X2;
- *y1 = (float) Y1;
- *y2 = (float) Y2;
-}
-
-static void ccpgqls(int *ls){
- F77_INTEGER_TYPE LS;
- F77_CALL(pgqls)( INTEGER_ARG(&LS) );
- *ls = (int) LS;
-}
-
-static void ccpgsls(int ls){
- F77_INTEGER_TYPE LS;
- LS = (F77_INTEGER_TYPE) ls;
- F77_CALL(pgsls)( INTEGER_ARG(&LS) );
-}
-
-static void ccpgqlw(int *lw){
- F77_INTEGER_TYPE LW;
- F77_CALL(pgqlw)( INTEGER_ARG(&LW) );
- *lw = (int) LW;
-}
-
-static void ccpgslw(int lw){
- F77_INTEGER_TYPE LW;
- LW = (F77_INTEGER_TYPE) lw;
- F77_CALL(pgslw)( INTEGER_ARG(&LW) );
-}
-
-static void ccpgqch(float *ch){
- F77_REAL_TYPE CH;
- F77_CALL(pgqch)( REAL_ARG(&CH) );
- *ch = (float) CH;
-}
-
-static void ccpgsch(float ch){
- F77_REAL_TYPE CH;
- CH = (F77_REAL_TYPE) ch;
- F77_CALL(pgsch)( REAL_ARG(&CH) );
-}
-
-static void ccpgqcf(int *cf){
- F77_INTEGER_TYPE CF;
- F77_CALL(pgqcf)( INTEGER_ARG(&CF) );
- *cf = (int) CF;
-}
-
-static void ccpgscf(int cf){
- F77_INTEGER_TYPE CF;
- CF = (F77_INTEGER_TYPE) cf;
- F77_CALL(pgscf)( INTEGER_ARG(&CF) );
-}
-
-static void ccpgqci(int *ci){
- F77_INTEGER_TYPE CI;
- F77_CALL(pgqci)( INTEGER_ARG(&CI) );
- *ci = (int) CI;
-}
-
-static void ccpgsci(int ci){
- F77_INTEGER_TYPE CI;
- CI = (F77_INTEGER_TYPE) ci;
- F77_CALL(pgsci)( INTEGER_ARG(&ci) );
-}
-
-static void ccpgupdt( void ){
- F77_CALL(pgupdt)();
-}
diff --git a/ast-5.3-1/grismmap.c b/ast-5.3-1/grismmap.c
deleted file mode 100644
index a9c3ba0..0000000
--- a/ast-5.3-1/grismmap.c
+++ /dev/null
@@ -1,2526 +0,0 @@
-/*
-*class++
-* Name:
-* GrismMap
-
-* Purpose:
-* Transform 1-dimensional coordinates using a grism dispersion equation.
-
-* Constructor Function:
-c astGrismMap
-f AST_GRISMMAP
-
-* Description:
-* A GrismMap is a specialised form of Mapping which transforms
-* 1-dimensional coordinates using the spectral dispersion equation
-* described in FITS-WCS paper III "Representation of spectral
-* coordinates in FITS". This describes the dispersion produced by
-* gratings, prisms and grisms.
-*
-* When initially created, the forward transformation of a GrismMap
-* transforms input "grism parameter" values into output wavelength
-* values. The "grism parameter" is a dimensionless value which is
-* linearly related to position on the detector. It is defined in FITS-WCS
-* paper III as "the offset on the detector from the point of intersection
-* of the camera axis, measured in units of the effective local length".
-* The units in which wavelength values are expected or returned is
-* determined by the values supplied for the GrismWaveR, GrismNRP and
-* GrismG attribute: whatever units are used for these attributes will
-* also be used for the wavelength values.
-
-* Inheritance:
-* The GrismMap class inherits from the Mapping class.
-
-* Attributes:
-* In addition to those attributes common to all Mappings, every
-* GrismMap also has the following attributes:
-*
-* - GrismNR: The refractive index at the reference wavelength
-* - GrismNRP: Rate of change of refractive index with wavelength
-* - GrismWaveR: The reference wavelength
-* - GrismAlpha: The angle of incidence of the incoming light
-* - GrismG: The grating ruling density
-* - GrismM: The interference order
-* - GrismEps: The angle between the normal and the dispersion plane
-* - GrismTheta: Angle between normal to detector plane and reference ray
-
-* Functions:
-c The GrismMap class does not define any new functions beyond those
-f The GrismMap class does not define any new routines beyond those
-* which are applicable to all Mappings.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 18-JUN-2003 (DSB):
-* Original version.
-* 10-MAY-2006 (DSB):
-* Override astEqual.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS GrismMap
-
-
-/*
-* Name:
-* MAKE_CLEAR
-
-* Purpose:
-* Implement a method to clear an attribute value for a GrismMap.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "grismmap.h"
-* MAKE_CLEAR(class,attribute,component,assign)
-
-* Class Membership:
-* Defined by the GrismMap class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Clear<Attribute>( AstGrismMap *this )
-*
-* and an external interface function of the form:
-*
-* void astClear<Attribute>_( AstGrismMap *this )
-*
-* which implement a method for clearing a specified attribute value for
-* a class. The derived constants stored in the GrismMap structure are
-* updated after the attribute has been cleared.
-
-* Parameters:
-* class
-* The name (not the type) of the class to which the attribute belongs.
-* attribute
-* The name of the attribute to be cleared, as it appears in the function
-* name (e.g. Label in "astClearLabel").
-* component
-* The name of the class structure component that holds the attribute
-* value.
-* assign
-* An expression that evaluates to the value to assign to the component
-* to clear its value.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(class,attribute,component,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attribute( Ast##class *this, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Assign the "clear" value. */ \
- this->component = (assign); \
-\
-/* Update the derived constants. */ \
- UpdateConstants( this, status ); \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astClear##attribute##_( Ast##class *this, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
- (**astMEMBER(this,class,Clear##attribute))( this, status ); \
-}
-
-/*
-* Name:
-* MAKE_SET
-
-* Purpose:
-* Implement a method to set an attribute value for a GrismMap.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "grismmap.h"
-* astMAKE_SET(class,attribute,type,component,assign)
-
-* Class Membership:
-* Defined by the GrismMap class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Set<Attribute>( AstGrismMap *this, <Type> value )
-*
-* and an external interface function of the form:
-*
-* void astSet<Attribute>_( AstGrismMap *this, <Type> value )
-*
-* which implement a method for setting a specified attribute value for a
-* GrismMap. The derived constants stored in the GrismMap structure are
-* updated after the attribute has been cleared.
-
-* Parameters:
-* class
-* The name (not the type) of the class to which the attribute belongs.
-* attribute
-* The name of the attribute to be set, as it appears in the function
-* name (e.g. Label in "astSetLabel").
-* type
-* The C type of the attribute.
-* component
-* The name of the class structure component that holds the attribute
-* value.
-* assign
-* An expression that evaluates to the value to be assigned to the
-* component.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave
-* any white space around the macro arguments.
-*/
-
-/* Define the macro. */
-#define MAKE_SET(class,attribute,type,component,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attribute( Ast##class *this, type value, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Store the new value in the structure component. */ \
- this->component = (assign); \
-\
-/* Update the derived constants. */ \
- UpdateConstants( this, status ); \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astSet##attribute##_( Ast##class *this, type value, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
- (**astMEMBER(this,class,Set##attribute))( this, value, status ); \
-}
-
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory management facilities */
-#include "globals.h" /* Thread-safe global data access */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-#include "unitmap.h" /* Unit Mappings */
-#include "channel.h" /* I/O channels */
-#include "zoommap.h" /* ZoomMap interface */
-#include "winmap.h" /* WinMap interface */
-#include "grismmap.h" /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <limits.h>
-#include <string.h>
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macros to check for equality of floating point values. We cannot
- compare bad values directory because of the danger of floating point
- exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->GetAttrib_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(GrismMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(GrismMap,Class_Init)
-#define class_vtab astGLOBAL(GrismMap,Class_Vtab)
-#define getattrib_buff astGLOBAL(GrismMap,GetAttrib_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-static char getattrib_buff[ 101 ];
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstGrismMapVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstGrismMap *astGrismMapId_( const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static AstMapping *CanMerge( AstMapping *, int, AstMapping *, int, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void UpdateConstants( AstGrismMap *, int * );
-
-static double GetGrismNR( AstGrismMap *, int * );
-static int TestGrismNR( AstGrismMap *, int * );
-static void ClearGrismNR( AstGrismMap *, int * );
-static void SetGrismNR( AstGrismMap *, double, int * );
-
-static double GetGrismNRP( AstGrismMap *, int * );
-static int TestGrismNRP( AstGrismMap *, int * );
-static void ClearGrismNRP( AstGrismMap *, int * );
-static void SetGrismNRP( AstGrismMap *, double, int * );
-
-static double GetGrismWaveR( AstGrismMap *, int * );
-static int TestGrismWaveR( AstGrismMap *, int * );
-static void ClearGrismWaveR( AstGrismMap *, int * );
-static void SetGrismWaveR( AstGrismMap *, double, int * );
-
-static double GetGrismAlpha( AstGrismMap *, int * );
-static int TestGrismAlpha( AstGrismMap *, int * );
-static void ClearGrismAlpha( AstGrismMap *, int * );
-static void SetGrismAlpha( AstGrismMap *, double, int * );
-
-static double GetGrismG( AstGrismMap *, int * );
-static int TestGrismG( AstGrismMap *, int * );
-static void ClearGrismG( AstGrismMap *, int * );
-static void SetGrismG( AstGrismMap *, double, int * );
-
-static int GetGrismM( AstGrismMap *, int * );
-static int TestGrismM( AstGrismMap *, int * );
-static void ClearGrismM( AstGrismMap *, int * );
-static void SetGrismM( AstGrismMap *, int, int * );
-
-static double GetGrismEps( AstGrismMap *, int * );
-static int TestGrismEps( AstGrismMap *, int * );
-static void ClearGrismEps( AstGrismMap *, int * );
-static void SetGrismEps( AstGrismMap *, double, int * );
-
-static double GetGrismTheta( AstGrismMap *, int * );
-static int TestGrismTheta( AstGrismMap *, int * );
-static void ClearGrismTheta( AstGrismMap *, int * );
-static void SetGrismTheta( AstGrismMap *, double, int * );
-
-/* Member functions. */
-/* ================= */
-static AstMapping *CanMerge( AstMapping *map1, int inv1, AstMapping *map2,
- int inv2, int *status ){
-/*
-*
-* Name:
-* CanMerge
-
-* Purpose:
-* Checks if two GrismMaps can be merged.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "grismmap.h"
-* AstMapping *CanMerge( AstMapping *map1, int inv1, AstMapping *map2,
-* int inv2, int *status )
-
-* Class Membership:
-* GrismMap internal utility function.
-
-* Description:
-* This function checks the two supplied Mappings to see if they can
-* be merged into a single Mapping. One of the two Mappings should be
-* a GrismMap. If they can be merged, the Merged Mapping is returned
-* as the function value. Otherwise NULL is returned.
-
-* Parameters:
-* map1
-* A pointer to the first mapping.
-* map2
-* A pointer to the second mapping.
-* inv1
-* The invert flag to use with the first mapping.
-* inv2
-* The invert flag to use with the second mapping.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the merged Mapping if the supplied Mappings can be merged,
-* NULL otherwise.
-
-*/
-
-/* Local Variables: */
- AstGrismMap *gmap2; /* Pointer to second GrismMap */
- AstGrismMap *gmap; /* Pointer to first GrismMap */
- AstMapping *ret; /* Returned merged Mapping */
- double g; /* The value of the GrismG attribute */
- double nrp; /* The value of the GrismNRP attribute */
- double waver; /* The value of the GrismWaveR attribute */
- double z; /* Wavelength scaling */
- int invert_result; /* Is "ret" the inverse of the required Mapping? */
-
-/* Initialise the returned value. */
- ret = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return ret;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- gmap = NULL;
- invert_result = 0;
-
-/* Initialise the zoom factor of the adjacent ZoomMap to indicate
- that we have not yet found an adjacent ZoomMap. */
- z = AST__BAD;
-
-/* If the first Mapping is a GrismMap... */
- if( !strcmp( "GrismMap", astGetClass( map1 ) ) ) {
- gmap = (AstGrismMap *) map1;
-
-/* If the second Mapping is also a GrismMap, they can be merged into a
- UnitMap if one GrismMap is the inverse of the other. */
- if( !strcmp( "GrismMap", astGetClass( map2 ) ) ) {
- gmap2 = (AstGrismMap *) map2;
-
-/* Check that the two GrismMaps have the same attribute values. */
- if( EQUAL( astGetGrismNR( gmap ), astGetGrismNR( gmap2 )) &&
- EQUAL( astGetGrismNRP( gmap ), astGetGrismNRP( gmap2 )) &&
- EQUAL( astGetGrismWaveR( gmap ), astGetGrismWaveR( gmap2 )) &&
- EQUAL( astGetGrismAlpha( gmap ), astGetGrismAlpha( gmap2 )) &&
- EQUAL( astGetGrismG( gmap ), astGetGrismG( gmap2 )) &&
- EQUAL( astGetGrismM( gmap ), astGetGrismM( gmap2 )) &&
- EQUAL( astGetGrismEps( gmap ), astGetGrismEps( gmap2 )) &&
- EQUAL( astGetGrismTheta( gmap ), astGetGrismTheta( gmap2 )) ){
-
-/* If so, check that the GrismMaps are applied in opposite senses. If so
- we can cancel the two GrismMaps, so return a UnitMap. */
- if( inv1 != inv2 ) ret = (AstMapping *) astUnitMap( 1, "", status );
- }
-
-/* If the first Mapping is a GrismMap but the second one is not... */
- } else {
-
-/* We can merge the GrismMap with the second Mapping if the GrismMap has
- not been inverted (i.e. if the wavelength output produced by the
- GrismMap is fed as input to the second Mapping), and if the second
- Mapping is a ZoomMap. */
- if( !inv1 ) {
-
-/* Indicate that any merged Mapping to be created later will not need to
- be inverted. */
- invert_result = 0;
-
-/* See if the second Mapping is a ZoomMap, and if so, get the zoom
- factor. If the Invert attribute in the ZoomMap is not set to the
- required value, invert the zoom factor. This gives us the required
- *forward* transformation. */
- if( !strcmp( "ZoomMap", astGetClass( map2 ) ) ) {
- z = astGetZoom( (AstZoomMap *) map2 );
- if( astGetInvert( map2 ) != inv2 && z != 0.0 ) z = 1.0/z;
- }
- }
- }
-
-/* If the first Mapping is not a GrismMap, but the second one is... */
- } else if( !strcmp( "GrismMap", astGetClass( map2 ) ) ) {
- gmap = (AstGrismMap *) map2;
-
-/* We can merge the GrismMap with the first Mapping if the GrismMap has
- been inverted (i.e. if the wavelength output produced by the first
- Mapping is fed as input to the inverted GrismMap), and if the first
- Mapping is a ZoomMap. */
- if( inv2 ) {
-
-/* It is easier to consider pairs of Mappings in which an un-inverted
- GrismMap is followed by a ZoomMap (as in the above case). For this
- reason, we invert the Mappings here, so that the merged Mapping created
- later will be in the inverse of the required Mapping. Indicate that the
- merged Mapping will therefore need to be inverted before being returned. */
- invert_result = 1;
-
-/* See if the first Mapping is a ZoomMap. If so, get the zoom factor. If the
- Invert attribute in the ZoomMap is not set to the opposite of the required
- value, invert the zoom factor. This gives us the required *inverse*
- transformation. */
- if( !strcmp( "ZoomMap", astGetClass( map1 ) ) ) {
- z = astGetZoom( (AstZoomMap *) map1 );
- if( astGetInvert( map1 ) == inv1 && z != 0.0 ) z = 1.0/z;
- }
- }
- }
-
-/* If required, produce the merged Mapping by merging the forward
- GrismMap with the following ZoomMap (and then invert the
- resulting Mapping if it is in the wrong direction). */
- if( !ret && z != AST__BAD && z != 0.0 ) {
-
-/* Ensure we have a forward GrismMap. */
- ret = astCopy( gmap );
- astSetInvert( ret, 0 );
-
-/* Get the required GrismMap attribute values. */
- g = astGetGrismG( ret );
- nrp = astGetGrismNRP( ret );
- waver = astGetGrismWaveR( ret );
-
-/* The above code ensures that z is the zoom factor from the wavelength
- produced by the forward GrismMap to the final (modified) wavelength units.
- Set the new GrismMap attribute values. GrismG, GrismNRP and GrismWaveR have
- units of length and are scaled to represent new length units using the
- zoom factor found above. */
- g /= z;
- nrp /= z;
- waver *= z;
-
- astSetGrismG( ret, g );
- astSetGrismNRP( ret, nrp );
- astSetGrismWaveR( ret, waver );
-
-/* If required invert this GrismMap. */
- if( invert_result ) astInvert( ret );
-
- }
-
-/* Return the answer. */
- return ret;
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a GrismMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "grismmap.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* GrismMap member function (over-rides the astClearAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* GrismMap, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the GrismMap.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstGrismMap *this; /* Pointer to the GrismMap structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the GrismMap structure. */
- this = (AstGrismMap *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
- if ( !strcmp( attrib, "grismnr" ) ) {
- astClearGrismNR( this );
-
- } else if ( !strcmp( attrib, "grismnrp" ) ) {
- astClearGrismNRP( this );
-
- } else if ( !strcmp( attrib, "grismwaver" ) ) {
- astClearGrismWaveR( this );
-
- } else if ( !strcmp( attrib, "grismalpha" ) ) {
- astClearGrismAlpha( this );
-
- } else if ( !strcmp( attrib, "grismg" ) ) {
- astClearGrismG( this );
-
- } else if ( !strcmp( attrib, "grismm" ) ) {
- astClearGrismM( this );
-
- } else if ( !strcmp( attrib, "grismeps" ) ) {
- astClearGrismEps( this );
-
- } else if ( !strcmp( attrib, "grismtheta" ) ) {
- astClearGrismTheta( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two GrismMaps are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "grismmap.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* GrismMap member function (over-rides the astEqual protected
-* method inherited from the astMapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two GrismMaps are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Object (a GrismMap).
-* that
-* Pointer to the second Object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the GrismMaps are equivalent, zero otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstGrismMap *that;
- AstGrismMap *this;
- int nin;
- int nout;
- int result;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain pointers to the two GrismMap structures. */
- this = (AstGrismMap *) this_object;
- that = (AstGrismMap *) that_object;
-
-/* Check the second object is a GrismMap. We know the first is a
- GrismMap since we have arrived at this implementation of the virtual
- function. */
- if( astIsAGrismMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
- nin = astGetNin( this );
- nout = astGetNout( this );
- if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two GrismMaps differ, it may still be possible
- for them to be equivalent. First compare the GrismMaps if their Invert
- flags are the same. In this case all the attributes of the two GrismMaps
- must be identical. */
- if( astGetInvert( this ) == astGetInvert( that ) ) {
-
- if( astEQUAL( this->nr, that->nr ) &&
- astEQUAL( this->nrp, that->nrp ) &&
- astEQUAL( this->waver, that->waver ) &&
- astEQUAL( this->alpha, that->alpha ) &&
- astEQUAL( this->g, that->g ) &&
- astEQUAL( this->m, that->m ) &&
- astEQUAL( this->eps, that->eps ) &&
- astEQUAL( this->theta, that->theta ) &&
- astEQUAL( this->k1, that->k1 ) &&
- astEQUAL( this->k2, that->k2 ) &&
- astEQUAL( this->k3, that->k3 ) ) {
- result = 1;
- }
-
-/* If the Invert flags for the two GrismMaps differ, the attributes of the two
- GrismMaps must be inversely related to each other. */
- } else {
-
-/* In the specific case of a GrismMap, Invert flags must be equal. */
- result = 0;
-
- }
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a GrismMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "grismmap.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* GrismMap member function (over-rides the protected astGetAttrib
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a GrismMap, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the GrismMap.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the GrismMap, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the GrismMap. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstGrismMap *this; /* Pointer to the GrismMap structure */
- const char *result; /* Pointer value to return */
- double dval; /* Attribute value */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the GrismMap structure. */
- this = (AstGrismMap *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null-terminated string in an appropriate
- format. Set "result" to point at the result string. */
-
- if ( !strcmp( attrib, "grismnr" ) ) {
- dval = astGetGrismNR( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
- } else if ( !strcmp( attrib, "grismnrp" ) ) {
- dval = astGetGrismNRP( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
- } else if ( !strcmp( attrib, "grismwaver" ) ) {
- dval = astGetGrismWaveR( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
- } else if ( !strcmp( attrib, "grismalpha" ) ) {
- dval = astGetGrismAlpha( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
- } else if ( !strcmp( attrib, "grismg" ) ) {
- dval = astGetGrismG( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
- } else if ( !strcmp( attrib, "grismm" ) ) {
- dval = astGetGrismM( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
- } else if ( !strcmp( attrib, "grismeps" ) ) {
- dval = astGetGrismEps( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
- } else if ( !strcmp( attrib, "grismtheta" ) ) {
- dval = astGetGrismTheta( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-}
-
-void astInitGrismMapVtab_( AstGrismMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitGrismMapVtab
-
-* Purpose:
-* Initialise a virtual function table for a GrismMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "grismmap.h"
-* void astInitGrismMapVtab( AstGrismMapVtab *vtab, const char *name )
-
-* Class Membership:
-* GrismMap vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the GrismMap class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAGrismMap) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
- vtab->ClearGrismNR = ClearGrismNR;
- vtab->GetGrismNR = GetGrismNR;
- vtab->SetGrismNR = SetGrismNR;
- vtab->TestGrismNR = TestGrismNR;
-
- vtab->ClearGrismNRP = ClearGrismNRP;
- vtab->GetGrismNRP = GetGrismNRP;
- vtab->SetGrismNRP = SetGrismNRP;
- vtab->TestGrismNRP = TestGrismNRP;
-
- vtab->ClearGrismWaveR = ClearGrismWaveR;
- vtab->GetGrismWaveR = GetGrismWaveR;
- vtab->SetGrismWaveR = SetGrismWaveR;
- vtab->TestGrismWaveR = TestGrismWaveR;
-
- vtab->ClearGrismAlpha = ClearGrismAlpha;
- vtab->GetGrismAlpha = GetGrismAlpha;
- vtab->SetGrismAlpha = SetGrismAlpha;
- vtab->TestGrismAlpha = TestGrismAlpha;
-
- vtab->ClearGrismG = ClearGrismG;
- vtab->GetGrismG = GetGrismG;
- vtab->SetGrismG = SetGrismG;
- vtab->TestGrismG = TestGrismG;
-
- vtab->ClearGrismM = ClearGrismM;
- vtab->GetGrismM = GetGrismM;
- vtab->SetGrismM = SetGrismM;
- vtab->TestGrismM = TestGrismM;
-
- vtab->ClearGrismEps = ClearGrismEps;
- vtab->GetGrismEps = GetGrismEps;
- vtab->SetGrismEps = SetGrismEps;
- vtab->TestGrismEps = TestGrismEps;
-
- vtab->ClearGrismTheta = ClearGrismTheta;
- vtab->GetGrismTheta = GetGrismTheta;
- vtab->SetGrismTheta = SetGrismTheta;
- vtab->TestGrismTheta = TestGrismTheta;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- object->Equal = Equal;
- mapping->MapMerge = MapMerge;
-
-/* Declare the class dump, copy and delete functions.*/
- astSetDump( vtab, Dump, "GrismMap",
- "Map 1-d coordinates using a spectral disperser" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a GrismMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "grismmap.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* GrismMap method (over-rides the protected astMapMerge method
-* inherited from the Mapping class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated GrismMap in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated GrismMap with a Mapping which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated GrismMap which is to be merged with
-* its neighbours. This should be a cloned copy of the GrismMap
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* GrismMap it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated GrismMap resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstMapping *merged_map; /* Merger of two Mappings */
- AstMapping *neighbour; /* Pointer to neighbouring Mapping */
- const char *class1; /* Pointer to first Mapping class string */
- const char *class2; /* Pointer to second Mapping class string */
- int i1; /* Lower index of the two GrismMaps being merged */
- int i2; /* Upper index of the two GrismMaps being merged */
- int i; /* Mapping index */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = -1;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- i1 = -1;
- i2 = -1;
-
-/* See if the GrismMap can be merged with the Mappings on either side of it
- in the list. This can only be done in series for a GrismMap. */
-/* ===================================================================== */
- if( series ) {
-
-/* Store the classes of the neighbouring Mappings in the list. */
- class1 = ( where > 0 ) ? astGetClass( ( *map_list )[ where - 1 ] ) : NULL;
- class2 = ( where < *nmap - 1 ) ? astGetClass( ( *map_list )[ where + 1 ] ) : NULL;
-
-/* Set a flag indicating that we have not yet found a neighbour with which
- the GrismMap can be merged. */
- merged_map = NULL;
-
-/* First check the lower neighbour (if any). */
- if( where > 0 ) {
- i1 = where - 1;
- i2 = where;
- neighbour = ( *map_list )[ i1 ];
- merged_map = CanMerge( ( *map_list )[ i1 ], (* invert_list)[ i1 ],
- ( *map_list )[ i2 ], (* invert_list)[ i2 ], status );
- }
-
-/* If the GrismMap can not be merged with its lower neighbour, check its
- upper neighbour (if any) in the same way. */
- if( !merged_map && where < *nmap - 1 ) {
- i1 = where;
- i2 = where + 1;
- neighbour = ( *map_list )[ i2 ];
- merged_map = CanMerge( ( *map_list )[ i1 ], (* invert_list)[ i1 ],
- ( *map_list )[ i2 ], (* invert_list)[ i2 ], status );
- }
-
-/* If either neighbour has passed these checks, replace the pair of
- Mappings which have been merged with the single merged Mapping returned
- above. */
- if( merged_map ) {
-
-/* Annul the two Mappings. */
- (void) astAnnul( ( *map_list )[ i1 ] );
- (void) astAnnul( ( *map_list )[ i2 ] );
-
-/* Store a pointer for the merged Mapping in place of the first of the
- two replaced Mappings. */
- ( *map_list )[ i1 ] = merged_map;
- ( *invert_list )[ i1 ] = astGetInvert( merged_map );
-
-/* Shuffle down the remaining Mappings to fill the hole left by the
- second of the replaced Mappings. */
- for ( i = i2 + 1; i < *nmap; i++ ) {
- ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
- ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
- }
-
-/* Clear the vacated element at the end. */
- ( *map_list )[ *nmap - 1 ] = NULL;
- ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
- modified element. */
- (*nmap)--;
- result = i1;
-
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a GrismMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "grismmap.h"
-* void SetAttrib( AstObject *this, const char *setting )
-
-* Class Membership:
-* GrismMap member function (over-rides the astSetAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function assigns an attribute value for a GrismMap, the
-* attribute and its value being specified by means of a string of
-* the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in
-* lower case with no white space present. The value to the right
-* of the "=" should be a suitable textual representation of the
-* value to be assigned and this will be interpreted according to
-* the attribute's data type. White space surrounding the value is
-* only significant for string attributes.
-
-* Parameters:
-* this
-* Pointer to the GrismMap.
-* setting
-* Pointer to a null-terminated string specifying the new attribute
-* value.
-*/
-
-/* Local Variables: */
- AstGrismMap *this; /* Pointer to the GrismMap structure */
- double dval; /* Attribute value */
- int len; /* Length of setting string */
- int nc; /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the GrismMap structure. */
- this = (AstGrismMap *) this_object;
-
-/* Obtain the length of the setting string. */
- len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
- the setting string and extract the attribute value (or an offset to
- it in the case of string values). In each case, use the value set
- in "nc" to check that the entire string was matched. Once a value
- has been obtained, use the appropriate method to set it. */
-
- if ( nc = 0, ( 1 == astSscanf( setting, "grismnr= %lf %n", &dval, &nc ) ) && ( nc >= len ) ) {
- astSetGrismNR( this, dval );
-
- } else if ( nc = 0, ( 1 == astSscanf( setting, "grismnrp= %lf %n", &dval, &nc ) ) && ( nc >= len ) ) {
- astSetGrismNRP( this, dval );
-
- } else if ( nc = 0, ( 1 == astSscanf( setting, "grismwaver= %lf %n", &dval, &nc ) ) && ( nc >= len ) ) {
- astSetGrismWaveR( this, dval );
-
- } else if ( nc = 0, ( 1 == astSscanf( setting, "grismalpha= %lf %n", &dval, &nc ) ) && ( nc >= len ) ) {
- astSetGrismAlpha( this, dval );
-
- } else if ( nc = 0, ( 1 == astSscanf( setting, "grismg= %lf %n", &dval, &nc ) ) && ( nc >= len ) ) {
- astSetGrismG( this, dval );
-
- } else if ( nc = 0, ( 1 == astSscanf( setting, "grismm= %lf %n", &dval, &nc ) ) && ( nc >= len ) ) {
- astSetGrismM( this, dval );
-
- } else if ( nc = 0, ( 1 == astSscanf( setting, "grismeps= %lf %n", &dval, &nc ) ) && ( nc >= len ) ) {
- astSetGrismEps( this, dval );
-
- } else if ( nc = 0, ( 1 == astSscanf( setting, "grismtheta= %lf %n", &dval, &nc ) ) && ( nc >= len ) ) {
- astSetGrismTheta( this, dval );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a GrismMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "grismmap.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* GrismMap member function (over-rides the astTestAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a GrismMap's attributes.
-
-* Parameters:
-* this
-* Pointer to the GrismMap.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstGrismMap *this; /* Pointer to the GrismMap structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the GrismMap structure. */
- this = (AstGrismMap *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
- if ( !strcmp( attrib, "grismnr" ) ) {
- result = astTestGrismNR( this );
-
- } else if ( !strcmp( attrib, "grismnrp" ) ) {
- result = astTestGrismNRP( this );
-
- } else if ( !strcmp( attrib, "grismwaver" ) ) {
- result = astTestGrismWaveR( this );
-
- } else if ( !strcmp( attrib, "grismalpha" ) ) {
- result = astTestGrismAlpha( this );
-
- } else if ( !strcmp( attrib, "grismg" ) ) {
- result = astTestGrismG( this );
-
- } else if ( !strcmp( attrib, "grismm" ) ) {
- result = astTestGrismM( this );
-
- } else if ( !strcmp( attrib, "grismeps" ) ) {
- result = astTestGrismEps( this );
-
- } else if ( !strcmp( attrib, "grismtheta" ) ) {
- result = astTestGrismTheta( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a GrismMap to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "grismmap.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* GrismMap member function (over-rides the astTransform protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function takes a GrismMap and a set of points encapsulated
-* in a PointSet and transforms the points so as to apply the
-* forward or inverse dispersal equation.
-
-* Parameters:
-* this
-* Pointer to the GrismMap.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate
-* transformation should be applied, while a zero value requests
-* the inverse transformation.
-* out
-* Pointer to a PointSet which will hold the transformed
-* (output) coordinate values. A NULL value may also be given,
-* in which case a new PointSet will be created by this
-* function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-* - The number of coordinate values per point in the input
-* PointSet must equal 1.
-* - If an output PointSet is supplied, it must have space for
-* sufficient number of points (with 1 coordinate value per point)
-* to accommodate the result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstGrismMap *map; /* Pointer to GrismMap to be applied */
- AstPointSet *result; /* Pointer to output PointSet */
- double **ptr_in; /* Pointer to input coordinate data */
- double **ptr_out; /* Pointer to output coordinate data */
- double sinbeta; /* Sin( beta ) (see FITS-WCS paper III) */
- double value_in; /* Input coordinate value */
- int npoint; /* Number of points */
- int point; /* Loop counter for points */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the GrismMap. */
- map = (AstGrismMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform
- member function inherited from the parent Mapping class. This
- function validates all arguments and generates an output PointSet
- if necessary, but does not actually transform any coordinate
- values. */
- result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points from the input PointSet and obtain
- pointers for accessing the input and output coordinate values. */
- npoint = astGetNpoint( in );
- ptr_in = astGetPoints( in );
- ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse mapping,
- according to the direction specified and whether the mapping has
- been inverted. */
- if ( astGetInvert( map ) ) forward = !forward;
-
-/* If any of the parameters are undefined fill the output with bad
- values (if possible). */
- if( map->k1 == AST__BAD || map->k2 == AST__BAD || map->k3 == AST__BAD ) {
- if( astOK ) {
- for ( point = 0; point < npoint; point++ ) {
- ptr_out[ 0 ][ point ] = AST__BAD;
- }
- }
-
-/* Otherwise... */
- } else {
-
-/* Forward transformation. */
-/* ----------------------- */
- if ( forward ) {
-
-/* Loop to transform each input point. */
- for ( point = 0; point < npoint; point++ ) {
-
-/* Extract the input grism parameter value. */
- value_in = ptr_in[ 0 ][ point ];
-
-/* Check for bad input coordinates and generate a bad result if necessary. */
- if( value_in == AST__BAD || map->k2 == 0.0 ) {
- ptr_out[ 0 ][ point ] = AST__BAD;
-
-/* Otherwise, apply the algorithm described in FITS-WCS paper III. */
- } else {
- ptr_out[ 0 ][ point ] = ( map->k1 + sin( atan( value_in ) + map->k3 ) )/map->k2;
- }
- }
-
-/* Inverse transformation. */
-/* ----------------------- */
- } else {
-
-/* Loop to transform each input point. */
- for ( point = 0; point < npoint; point++ ) {
-
-/* Extract the input wavelength value. */
- value_in = ptr_in[ 0 ][ point ];
-
-/* Check for bad input coordinates and generate a bad result if necessary. */
- if ( value_in == AST__BAD ) {
- ptr_out[ 0 ][ point ] = AST__BAD;
-
-/* Otherwise, apply the algorithm described in FITS-WCS paper III. */
- } else {
- sinbeta = map->k2*value_in - map->k1;
- if( sinbeta < -1.0 || sinbeta > 1.0 ) {
- ptr_out[ 0 ][ point ] = AST__BAD;
- } else {
- ptr_out[ 0 ][ point ] = tan( asin( sinbeta ) - map->k3 );
- }
- }
- }
- }
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-
-static void UpdateConstants( AstGrismMap *this, int *status ){
-/*
-* Name:
-* UpdateConstants
-
-* Purpose:
-* Re-calculate the constants used within the transformation.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "grismmap.h"
-* void UpdateConstants( AstGrismMap *this, int *status )
-
-* Class Membership:
-* GrismMap member function
-
-* Description:
-* This function re-calculates the constants used within the
-* transformation on the basis of the current values of the
-* GrismMap attributes. It should be called whenever a new value is
-* set for an attribute, or an attribute is cleared.
-
-* Parameters:
-* this
-* Pointer to the GrismMap.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- double alpha; /* The current vaue of the GrismAlpha attribute */
- double coseps; /* cos( eps ) */
- double sinalpha; /* sin( alpha ) */
- double eps; /* The current vaue of the GrismEps attribute */
- double g; /* The current vaue of the GrismG attribute */
- double nr; /* The current vaue of the GrismNR attribute */
- double nrp; /* The current vaue of the GrismNRP attribute */
- double sinbeta_r; /* sin( beta_r ) */
- double theta; /* The current vaue of the GrismTheta attribute */
- double wave_r; /* The current vaue of the GrismWaveR attribute */
- int m; /* The current vaue of the GrismM attribute */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get the current attribute values. */
- nr = astGetGrismNR( this );
- nrp = astGetGrismNRP( this );
- wave_r = astGetGrismWaveR( this );
- alpha = astGetGrismAlpha( this );
- g = astGetGrismG( this );
- m = astGetGrismM( this );
- eps = astGetGrismEps( this );
- theta = astGetGrismTheta( this );
-
-/* Re-calculate the constants. */
- coseps = cos( eps );
- sinalpha = sin( alpha );
-
- this->k1 = sinalpha*( nr - nrp*wave_r );
-
- if( coseps != 0.0 ) {
- this->k2 = ( g*m/coseps ) - nrp*sinalpha;
-
- sinbeta_r = g*m*wave_r/coseps - nr*sinalpha;
- if( sinbeta_r < -1.0 || sinbeta_r > 1.0 ) {
- this->k3 = AST__BAD;
- } else {
- this->k3 = asin( sinbeta_r ) + theta;
- }
-
- } else {
- this->k2 = AST__BAD;
- this->k3 = AST__BAD;
- }
-
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/*
-*att++
-* Name:
-* GrismNR
-
-* Purpose:
-* The refractive index at the reference wavelength.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Double precision.
-
-* Description:
-* This attribute holds refractive index of the grism material at the
-* reference wavelength (given by attribute GrismWaveR). The default
-* value is 1.0.
-
-* Applicability:
-* GrismMap
-* All GrismMaps have this attribute.
-
-*att--
-*/
-MAKE_CLEAR(GrismMap,GrismNR,nr,(AST__BAD))
-astMAKE_GET(GrismMap,GrismNR,double,1.0,( ( this->nr == AST__BAD ) ?
- 1.0 : this->nr ))
-MAKE_SET(GrismMap,GrismNR,double,nr,(value) )
-astMAKE_TEST(GrismMap,GrismNR,( this->nr != AST__BAD ))
-
-/*
-*att++
-* Name:
-* GrismNRP
-
-* Purpose:
-* The rate of change of refractive index with wavelength.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Double precision.
-
-* Description:
-* This attribute holds the rate of change of the refractive index of the
-* grism material with respect to wavelength at the reference wavelength
-* (given by attribute GrismWaveR). The default value is 0.0 (the
-* appropriate value for a pure grating disperser with no prism). The
-* units of this attribute should be consistent with those of attributes
-* GrismWaveR and GrismG.
-
-* Applicability:
-* GrismMap
-* All GrismMaps have this attribute.
-
-*att--
-*/
-MAKE_CLEAR(GrismMap,GrismNRP,nrp,(AST__BAD))
-astMAKE_GET(GrismMap,GrismNRP,double,0.0,( ( this->nrp == AST__BAD ) ?
- 0.0 : this->nrp ))
-MAKE_SET(GrismMap,GrismNRP,double,nrp,(value) )
-astMAKE_TEST(GrismMap,GrismNRP,( this->nrp != AST__BAD ))
-
-/*
-*att++
-* Name:
-* GrismWaveR
-
-* Purpose:
-* The reference wavelength.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Double precision.
-
-* Description:
-* This attribute holds reference wavelength. The default value is
-* 5000 (Angstrom). The units of this attribute should be consistent with
-* those of attributes GrismNRP and GrismG.
-
-* Applicability:
-* GrismMap
-* All GrismMaps have this attribute.
-
-*att--
-*/
-MAKE_CLEAR(GrismMap,GrismWaveR,waver,(AST__BAD))
-astMAKE_GET(GrismMap,GrismWaveR,double,5000.0,( ( this->waver == AST__BAD ) ?
- 5000.0 : this->waver ))
-MAKE_SET(GrismMap,GrismWaveR,double,waver,(value) )
-astMAKE_TEST(GrismMap,GrismWaveR,( this->waver != AST__BAD ))
-
-/*
-*att++
-* Name:
-* GrismAlpha
-
-* Purpose:
-* The angle of incidence of the incoming light on the grating surface.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Double precision.
-
-* Description:
-* This attribute holds the angle between the incoming light and the
-* normal to the grating surface, in radians. The default value is 0.
-
-* Applicability:
-* GrismMap
-* All GrismMaps have this attribute.
-
-*att--
-*/
-MAKE_CLEAR(GrismMap,GrismAlpha,alpha,(AST__BAD))
-astMAKE_GET(GrismMap,GrismAlpha,double,0.0,( ( this->alpha == AST__BAD ) ?
- 0.0 : this->alpha ))
-MAKE_SET(GrismMap,GrismAlpha,double,alpha,(value) )
-astMAKE_TEST(GrismMap,GrismAlpha,( this->alpha != AST__BAD ))
-
-/*
-*att++
-* Name:
-* GrismG
-
-* Purpose:
-* The grating ruling density.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Double precision.
-
-* Description:
-* This attribute holds the number of grating rulings per unit length.
-* The unit of length used should be consistent with the units used
-* for attributes GrismWaveR and GrismNRP. The default value is 0.0.
-* (the appropriate value for a pure prism disperser with no grating).
-
-* Applicability:
-* GrismMap
-* All GrismMaps have this attribute.
-
-*att--
-*/
-MAKE_CLEAR(GrismMap,GrismG,g,(AST__BAD))
-astMAKE_GET(GrismMap,GrismG,double,0.0,( ( this->g == AST__BAD ) ?
- 0.0 : this->g ))
-MAKE_SET(GrismMap,GrismG,double,g,(value) )
-astMAKE_TEST(GrismMap,GrismG,( this->g != AST__BAD ))
-
-/*
-*att++
-* Name:
-* GrismM
-
-* Purpose:
-* The interference order
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer.
-
-* Description:
-* This attribute holds the interference order being considered.
-* The default value is 0.
-
-* Applicability:
-* GrismMap
-* All GrismMaps have this attribute.
-
-*att--
-*/
-MAKE_CLEAR(GrismMap,GrismM,m,(INT_MAX))
-astMAKE_GET(GrismMap,GrismM,int,0,( ( this->m == INT_MAX ) ?
- 0 : this->m ))
-MAKE_SET(GrismMap,GrismM,int,m,(value) )
-astMAKE_TEST(GrismMap,GrismM,( this->m != INT_MAX ))
-
-/*
-*att++
-* Name:
-* GrismEps
-
-* Purpose:
-* The angle between the normal and the dispersion plane.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Double precision.
-
-* Description:
-* This attribute holds the angle (in radians) between the normal to
-* the grating or exit prism face, and the dispersion plane. The
-* dispersion plane is the plane spanned by the incoming and outgoing
-* ray. The default value is 0.0.
-
-* Applicability:
-* GrismMap
-* All GrismMaps have this attribute.
-
-*att--
-*/
-MAKE_CLEAR(GrismMap,GrismEps,eps,(AST__BAD))
-astMAKE_GET(GrismMap,GrismEps,double,0.0,( ( this->eps == AST__BAD ) ?
- 0.0 : this->eps ))
-MAKE_SET(GrismMap,GrismEps,double,eps,(value) )
-astMAKE_TEST(GrismMap,GrismEps,( this->eps != AST__BAD ))
-
-/*
-*att++
-* Name:
-* GrismTheta
-
-* Purpose:
-* Angle between normal to detector plane and reference ray.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Double precision.
-
-* Description:
-* This attribute gives the angle of incidence of light of the
-* reference wavelength (given by attribute GrismWaveR) onto the
-* detector. Specifically, it holds the angle (in radians) between
-* the normal to the detector plane and an incident ray at the reference
-* wavelength. The default value is 0.0.
-
-* Applicability:
-* GrismMap
-* All GrismMaps have this attribute.
-
-*att--
-*/
-MAKE_CLEAR(GrismMap,GrismTheta,theta,(AST__BAD))
-astMAKE_GET(GrismMap,GrismTheta,double,0.0,( ( this->theta == AST__BAD ) ?
- 0.0 : this->theta ))
-MAKE_SET(GrismMap,GrismTheta,double,theta,(value) )
-astMAKE_TEST(GrismMap,GrismTheta,( this->theta != AST__BAD ))
-
-/* Copy constructor. */
-/* ----------------- */
-/* No copy constructor is needed, as a byte-by-byte copy suffices. */
-
-/* Destructor. */
-/* ----------- */
-/* No destructor is needed as no memory, etc. needs freeing. */
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for GrismMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the GrismMap class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the GrismMap whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstGrismMap *this; /* Pointer to the GrismMap structure */
- double dval; /* Double value */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the GrismMap structure. */
- this = (AstGrismMap *) this_object;
-
-/* Write out values representing the instance variables for the
- GrismMap class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
- set = TestGrismNR( this, status );
- dval = set ? GetGrismNR( this, status ) : astGetGrismNR( this );
- astWriteDouble( channel, "GrmNR", set, 1, dval, "Refractive index at the ref. wavelength" );
-
- set = TestGrismNRP( this, status );
- dval = set ? GetGrismNRP( this, status ) : astGetGrismNRP( this );
- astWriteDouble( channel, "GrmNRP", set, 1, dval, "Rate of change of refractive index" );
-
- set = TestGrismWaveR( this, status );
- dval = set ? GetGrismWaveR( this, status ) : astGetGrismWaveR( this );
- astWriteDouble( channel, "GrmWR", set, 1, dval, "Ref. wavelength" );
-
- set = TestGrismAlpha( this, status );
- dval = set ? GetGrismAlpha( this, status ) : astGetGrismAlpha( this );
- astWriteDouble( channel, "GrmAlp", set, 1, dval, "Angle of incidence of incoming light" );
-
- set = TestGrismG( this, status );
- dval = set ? GetGrismG( this, status ) : astGetGrismG( this );
- astWriteDouble( channel, "GrmG", set, 1, dval, "Grating ruling density" );
-
- set = TestGrismM( this, status );
- dval = set ? GetGrismM( this, status ) : astGetGrismM( this );
- astWriteDouble( channel, "GrmM", set, 1, dval, "The interference order" );
-
- set = TestGrismEps( this, status );
- dval = set ? GetGrismEps( this, status ) : astGetGrismEps( this );
- astWriteDouble( channel, "GrmEps", set, 1, dval, "Angle between grating normal and dispersion plane" );
-
- set = TestGrismTheta( this, status );
- dval = set ? GetGrismTheta( this, status ) : astGetGrismTheta( this );
- astWriteDouble( channel, "GrmTh", set, 1, dval, "Angle between detector normal and reference ray" );
-
-}
-
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAGrismMap and astCheckGrismMap functions using the
- macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(GrismMap,Mapping)
-astMAKE_CHECK(GrismMap)
-
-AstGrismMap *astGrismMap_( const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astGrismMap
-f AST_GRISMMAP
-
-* Purpose:
-* Create a GrismMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "grismmap.h"
-c AstGrismMap *astGrismMap( const char *options, ... )
-f RESULT = AST_GRISMMAP( OPTIONS, STATUS )
-
-* Class Membership:
-* GrismMap constructor.
-
-* Description:
-* This function creates a new GrismMap and optionally initialises
-* its attributes.
-*
-* A GrismMap is a specialised form of Mapping which transforms
-* 1-dimensional coordinates using the spectral dispersion equation
-* described in FITS-WCS paper III "Representation of spectral
-* coordinates in FITS". This describes the dispersion produced by
-* gratings, prisms and grisms.
-*
-* When initially created, the forward transformation of a GrismMap
-* transforms input "grism parameter" values into output wavelength
-* values. The "grism parameter" is a dimensionless value which is
-* linearly related to position on the detector. It is defined in FITS-WCS
-* paper III as "the offset on the detector from the point of intersection
-* of the camera axis, measured in units of the effective local length".
-* The units in which wavelength values are expected or returned is
-* determined by the values supplied for the GrismWaveR, GrismNRP and
-* GrismG attribute: whatever units are used for these attributes will
-* also be used for the wavelength values.
-
-* Parameters:
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new GrismMap. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new GrismMap. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astGrismMap()
-f AST_GRISMMAP = INTEGER
-* A pointer to the new GrismMap.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstGrismMap *new; /* Pointer to new GrismMap */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the GrismMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitGrismMap( NULL, sizeof( AstGrismMap ), !class_init,
- &class_vtab, "GrismMap" );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- GrismMap's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new GrismMap. */
- return new;
-}
-
-AstGrismMap *astGrismMapId_( const char *options, ... ) {
-/*
-* Name:
-* astGrismMapId_
-
-* Purpose:
-* Create a GrismMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "grismmap.h"
-* AstGrismMap *astGrismMapId( const char *options, int *status, ... )
-
-* Class Membership:
-* GrismMap constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astGrismMap constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astGrismMap_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astGrismMap_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astGrismMap_.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The ID value associated with the new GrismMap.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstGrismMap *new; /* Pointer to new GrismMap */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the GrismMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitGrismMap( NULL, sizeof( AstGrismMap ), !class_init,
- &class_vtab, "GrismMap" );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new GrismMap's
- attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new GrismMap. */
- return astMakeId( new );
-}
-
-AstGrismMap *astInitGrismMap_( void *mem, size_t size, int init,
- AstGrismMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitGrismMap
-
-* Purpose:
-* Initialise a GrismMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "grismmap.h"
-* AstGrismMap *astInitGrismMap( void *mem, size_t size, int init,
-* AstGrismMapVtab *vtab, const char *name )
-
-* Class Membership:
-* GrismMap initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new GrismMap object. It allocates memory (if necessary) to accommodate
-* the GrismMap plus any additional data associated with the derived class.
-* It then initialises a GrismMap structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a GrismMap at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the GrismMap is to be initialised.
-* This must be of sufficient size to accommodate the GrismMap data
-* (sizeof(GrismMap)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the GrismMap (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the GrismMap
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the GrismMap's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new GrismMap.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-
-* Returned Value:
-* A pointer to the new GrismMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstGrismMap *new; /* Pointer to new GrismMap */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitGrismMapVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Initialise a Mapping structure (the parent class) as the first component
- within the GrismMap structure, allocating memory if necessary. Specify that
- the Mapping should be defined in both the forward and inverse directions. */
- new = (AstGrismMap *) astInitMapping( mem, size, 0,
- (AstMappingVtab *) vtab, name,
- 1, 1, 1, 1 );
- if ( astOK ) {
-
-/* Initialise the GrismMap data. */
-/* ---------------------------- */
- new->nr = AST__BAD;
- new->nrp = AST__BAD;
- new->waver = AST__BAD;
- new->alpha = AST__BAD;
- new->g = AST__BAD;
- new->m = INT_MAX;
- new->eps = AST__BAD;
- new->theta = AST__BAD;
-
-/* Set up the other required derived constants. */
- UpdateConstants( new, status );
-
-/* If an error occurred, clean up by deleting the new GrismMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new GrismMap. */
- return new;
-}
-
-AstGrismMap *astLoadGrismMap_( void *mem, size_t size,
- AstGrismMapVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadGrismMap
-
-* Purpose:
-* Load a GrismMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "grismmap.h"
-* AstGrismMap *astLoadGrismMap( void *mem, size_t size,
-* AstGrismMapVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* GrismMap loader.
-
-* Description:
-* This function is provided to load a new GrismMap using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* GrismMap structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a GrismMap at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the GrismMap is to be
-* loaded. This must be of sufficient size to accommodate the
-* GrismMap data (sizeof(GrismMap)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the GrismMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the GrismMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstGrismMap) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new GrismMap. If this is NULL, a pointer
-* to the (static) virtual function table for the GrismMap class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "GrismMap" is used instead.
-
-* Returned Value:
-* A pointer to the new GrismMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Constants: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstGrismMap *new; /* Pointer to the new GrismMap */
-
-/* Initialise. */
- new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this GrismMap. In this case the
- GrismMap belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstGrismMap );
- vtab = &class_vtab;
- name = "GrismMap";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitGrismMapVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built GrismMap. */
- new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "GrismMap" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
- new->nr = astReadDouble( channel, "grmnr", AST__BAD );
- if ( TestGrismNR( new, status ) ) SetGrismNR( new, new->nr, status );
-
- new->nrp = astReadDouble( channel, "grmnrp", AST__BAD );
- if ( TestGrismNRP( new, status ) ) SetGrismNRP( new, new->nrp, status );
-
- new->waver = astReadDouble( channel, "grmwr", AST__BAD );
- if ( TestGrismWaveR( new, status ) ) SetGrismWaveR( new, new->waver, status );
-
- new->alpha = astReadDouble( channel, "grmalp", AST__BAD );
- if ( TestGrismAlpha( new, status ) ) SetGrismAlpha( new, new->alpha, status );
-
- new->g = astReadDouble( channel, "grmg", AST__BAD );
- if ( TestGrismG( new, status ) ) SetGrismG( new, new->g, status );
-
- new->m = astReadInt( channel, "grmm", INT_MAX );
- if ( TestGrismM( new, status ) ) SetGrismM( new, new->m, status );
-
- new->eps = astReadDouble( channel, "grmeps", AST__BAD );
- if ( TestGrismEps( new, status ) ) SetGrismEps( new, new->eps, status );
-
- new->theta = astReadDouble( channel, "grmth", AST__BAD );
- if ( TestGrismTheta( new, status ) ) SetGrismTheta( new, new->theta, status );
-
-/* Set up the other required derived constants. */
- UpdateConstants( new, status );
- }
-
-/* If an error occurred, clean up by deleting the new GrismMap. */
- if ( !astOK ) new = astDelete( new );
-
-/* Return the new GrismMap pointer. */
- return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions
- defined by this class. Each simply checks the global error status
- and then locates and executes the appropriate member function,
- using the function pointer stored in the object's virtual function
- table (this pointer is located using the astMEMBER macro defined in
- "object.h").
-
- Note that the member function may not be the one defined here, as
- it may have been over-ridden by a derived class. However, it should
- still have the same interface. */
-
-
-
-
-
diff --git a/ast-5.3-1/grismmap.h b/ast-5.3-1/grismmap.h
deleted file mode 100644
index 51fc804..0000000
--- a/ast-5.3-1/grismmap.h
+++ /dev/null
@@ -1,353 +0,0 @@
-#if !defined( GRISMMAP_INCLUDED ) /* Include this file only once */
-#define GRISMMAP_INCLUDED
-/*
-*+
-* Name:
-* grismmap.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the GrismMap class.
-
-* Invocation:
-* #include "grismmap.h"
-
-* Description:
-* This include file defines the interface to the GrismMap class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The GrismMap class implements Mappings which perform a "zoom"
-* transformation by multiplying all coordinate values by the same
-* scale factor (the inverse transformation is performed by
-* dividing by this scale factor).
-
-* Inheritance:
-* The GrismMap class inherits from the Mapping class.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 8-JUL-2003 (DSB):
-* Initial version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* GrismMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstGrismMap {
-
-/* Attributes inherited from the parent class. */
- AstMapping mapping; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- double nr;
- double nrp;
- double waver;
- double alpha;
- double g;
- double m;
- double eps;
- double theta;
- double k1;
- double k2;
- double k3;
-
-} AstGrismMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstGrismMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstMappingVtab mapping_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- double (* GetGrismNR)( AstGrismMap *, int * );
- int (* TestGrismNR)( AstGrismMap *, int * );
- void (* ClearGrismNR)( AstGrismMap *, int * );
- void (* SetGrismNR)( AstGrismMap *, double, int * );
-
- double (* GetGrismNRP)( AstGrismMap *, int * );
- int (* TestGrismNRP)( AstGrismMap *, int * );
- void (* ClearGrismNRP)( AstGrismMap *, int * );
- void (* SetGrismNRP)( AstGrismMap *, double, int * );
-
- double (* GetGrismWaveR)( AstGrismMap *, int * );
- int (* TestGrismWaveR)( AstGrismMap *, int * );
- void (* ClearGrismWaveR)( AstGrismMap *, int * );
- void (* SetGrismWaveR)( AstGrismMap *, double, int * );
-
- double (* GetGrismAlpha)( AstGrismMap *, int * );
- int (* TestGrismAlpha)( AstGrismMap *, int * );
- void (* ClearGrismAlpha)( AstGrismMap *, int * );
- void (* SetGrismAlpha)( AstGrismMap *, double, int * );
-
- double (* GetGrismG)( AstGrismMap *, int * );
- int (* TestGrismG)( AstGrismMap *, int * );
- void (* ClearGrismG)( AstGrismMap *, int * );
- void (* SetGrismG)( AstGrismMap *, double, int * );
-
- int (* GetGrismM)( AstGrismMap *, int * );
- int (* TestGrismM)( AstGrismMap *, int * );
- void (* ClearGrismM)( AstGrismMap *, int * );
- void (* SetGrismM)( AstGrismMap *, int, int * );
-
- double (* GetGrismEps)( AstGrismMap *, int * );
- int (* TestGrismEps)( AstGrismMap *, int * );
- void (* ClearGrismEps)( AstGrismMap *, int * );
- void (* SetGrismEps)( AstGrismMap *, double, int * );
-
- double (* GetGrismTheta)( AstGrismMap *, int * );
- int (* TestGrismTheta)( AstGrismMap *, int * );
- void (* ClearGrismTheta)( AstGrismMap *, int * );
- void (* SetGrismTheta)( AstGrismMap *, double, int * );
-
-} AstGrismMapVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstGrismMapGlobals {
- AstGrismMapVtab Class_Vtab;
- int Class_Init;
- char GetAttrib_Buff[ 101 ];
-} AstGrismMapGlobals;
-
-#endif
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(GrismMap) /* Check class membership */
-astPROTO_ISA(GrismMap) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstGrismMap *astGrismMap_( const char *, int *, ...);
-#else
-AstGrismMap *astGrismMapId_( const char *, ... )__attribute__((format(printf,1,2)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstGrismMap *astInitGrismMap_( void *, size_t, int, AstGrismMapVtab *,
- const char *, int * );
-
-/* Vtab initialiser. */
-void astInitGrismMapVtab_( AstGrismMapVtab *, const char *, int * );
-
-/* Loader. */
-AstGrismMap *astLoadGrismMap_( void *, size_t, AstGrismMapVtab *,
- const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitGrismMapGlobals_( AstGrismMapGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS) /* Protected */
-
- double astGetGrismNR_( AstGrismMap *, int * );
- int astTestGrismNR_( AstGrismMap *, int * );
- void astClearGrismNR_( AstGrismMap *, int * );
- void astSetGrismNR_( AstGrismMap *, double, int * );
-
- double astGetGrismNRP_( AstGrismMap *, int * );
- int astTestGrismNRP_( AstGrismMap *, int * );
- void astClearGrismNRP_( AstGrismMap *, int * );
- void astSetGrismNRP_( AstGrismMap *, double, int * );
-
- double astGetGrismWaveR_( AstGrismMap *, int * );
- int astTestGrismWaveR_( AstGrismMap *, int * );
- void astClearGrismWaveR_( AstGrismMap *, int * );
- void astSetGrismWaveR_( AstGrismMap *, double, int * );
-
- double astGetGrismAlpha_( AstGrismMap *, int * );
- int astTestGrismAlpha_( AstGrismMap *, int * );
- void astClearGrismAlpha_( AstGrismMap *, int * );
- void astSetGrismAlpha_( AstGrismMap *, double, int * );
-
- double astGetGrismG_( AstGrismMap *, int * );
- int astTestGrismG_( AstGrismMap *, int * );
- void astClearGrismG_( AstGrismMap *, int * );
- void astSetGrismG_( AstGrismMap *, double, int * );
-
- int astGetGrismM_( AstGrismMap *, int * );
- int astTestGrismM_( AstGrismMap *, int * );
- void astClearGrismM_( AstGrismMap *, int * );
- void astSetGrismM_( AstGrismMap *, int, int * );
-
- double astGetGrismEps_( AstGrismMap *, int * );
- int astTestGrismEps_( AstGrismMap *, int * );
- void astClearGrismEps_( AstGrismMap *, int * );
- void astSetGrismEps_( AstGrismMap *, double, int * );
-
- double astGetGrismTheta_( AstGrismMap *, int * );
- int astTestGrismTheta_( AstGrismMap *, int * );
- void astClearGrismTheta_( AstGrismMap *, int * );
- void astSetGrismTheta_( AstGrismMap *, double, int * );
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckGrismMap(this) astINVOKE_CHECK(GrismMap,this,0)
-#define astVerifyGrismMap(this) astINVOKE_CHECK(GrismMap,this,1)
-
-/* Test class membership. */
-#define astIsAGrismMap(this) astINVOKE_ISA(GrismMap,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astGrismMap astINVOKE(F,astGrismMap_)
-#else
-#define astGrismMap astINVOKE(F,astGrismMapId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitGrismMap(mem,size,init,vtab,name) \
-astINVOKE(O,astInitGrismMap_(mem,size,init,vtab,name,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitGrismMapVtab(vtab,name) astINVOKE(V,astInitGrismMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadGrismMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadGrismMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckGrismMap to validate GrismMap pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-
-#define astGetGrismNR(this) astINVOKE(V,astGetGrismNR_(astCheckGrismMap(this),STATUS_PTR))
-#define astTestGrismNR(this) astINVOKE(V,astTestGrismNR_(astCheckGrismMap(this),STATUS_PTR))
-#define astClearGrismNR(this) astINVOKE(V,astClearGrismNR_(astCheckGrismMap(this),STATUS_PTR))
-#define astSetGrismNR(this,value) astINVOKE(V,astSetGrismNR_(astCheckGrismMap(this),value,STATUS_PTR))
-
-#define astGetGrismNRP(this) astINVOKE(V,astGetGrismNRP_(astCheckGrismMap(this),STATUS_PTR))
-#define astTestGrismNRP(this) astINVOKE(V,astTestGrismNRP_(astCheckGrismMap(this),STATUS_PTR))
-#define astClearGrismNRP(this) astINVOKE(V,astClearGrismNRP_(astCheckGrismMap(this),STATUS_PTR))
-#define astSetGrismNRP(this,value) astINVOKE(V,astSetGrismNRP_(astCheckGrismMap(this),value,STATUS_PTR))
-
-#define astGetGrismWaveR(this) astINVOKE(V,astGetGrismWaveR_(astCheckGrismMap(this),STATUS_PTR))
-#define astTestGrismWaveR(this) astINVOKE(V,astTestGrismWaveR_(astCheckGrismMap(this),STATUS_PTR))
-#define astClearGrismWaveR(this) astINVOKE(V,astClearGrismWaveR_(astCheckGrismMap(this),STATUS_PTR))
-#define astSetGrismWaveR(this,value) astINVOKE(V,astSetGrismWaveR_(astCheckGrismMap(this),value,STATUS_PTR))
-
-#define astGetGrismAlpha(this) astINVOKE(V,astGetGrismAlpha_(astCheckGrismMap(this),STATUS_PTR))
-#define astTestGrismAlpha(this) astINVOKE(V,astTestGrismAlpha_(astCheckGrismMap(this),STATUS_PTR))
-#define astClearGrismAlpha(this) astINVOKE(V,astClearGrismAlpha_(astCheckGrismMap(this),STATUS_PTR))
-#define astSetGrismAlpha(this,value) astINVOKE(V,astSetGrismAlpha_(astCheckGrismMap(this),value,STATUS_PTR))
-
-#define astGetGrismG(this) astINVOKE(V,astGetGrismG_(astCheckGrismMap(this),STATUS_PTR))
-#define astTestGrismG(this) astINVOKE(V,astTestGrismG_(astCheckGrismMap(this),STATUS_PTR))
-#define astClearGrismG(this) astINVOKE(V,astClearGrismG_(astCheckGrismMap(this),STATUS_PTR))
-#define astSetGrismG(this,value) astINVOKE(V,astSetGrismG_(astCheckGrismMap(this),value,STATUS_PTR))
-
-#define astGetGrismM(this) astINVOKE(V,astGetGrismM_(astCheckGrismMap(this),STATUS_PTR))
-#define astTestGrismM(this) astINVOKE(V,astTestGrismM_(astCheckGrismMap(this),STATUS_PTR))
-#define astClearGrismM(this) astINVOKE(V,astClearGrismM_(astCheckGrismMap(this),STATUS_PTR))
-#define astSetGrismM(this,value) astINVOKE(V,astSetGrismM_(astCheckGrismMap(this),value,STATUS_PTR))
-
-#define astGetGrismEps(this) astINVOKE(V,astGetGrismEps_(astCheckGrismMap(this),STATUS_PTR))
-#define astTestGrismEps(this) astINVOKE(V,astTestGrismEps_(astCheckGrismMap(this),STATUS_PTR))
-#define astClearGrismEps(this) astINVOKE(V,astClearGrismEps_(astCheckGrismMap(this),STATUS_PTR))
-#define astSetGrismEps(this,value) astINVOKE(V,astSetGrismEps_(astCheckGrismMap(this),value,STATUS_PTR))
-
-#define astGetGrismTheta(this) astINVOKE(V,astGetGrismTheta_(astCheckGrismMap(this),STATUS_PTR))
-#define astTestGrismTheta(this) astINVOKE(V,astTestGrismTheta_(astCheckGrismMap(this),STATUS_PTR))
-#define astClearGrismTheta(this) astINVOKE(V,astClearGrismTheta_(astCheckGrismMap(this),STATUS_PTR))
-#define astSetGrismTheta(this,value) astINVOKE(V,astSetGrismTheta_(astCheckGrismMap(this),value,STATUS_PTR))
-
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/install-sh b/ast-5.3-1/install-sh
deleted file mode 100755
index 4d4a951..0000000
--- a/ast-5.3-1/install-sh
+++ /dev/null
@@ -1,323 +0,0 @@
-#!/bin/sh
-# install - install a program, script, or datafile
-
-scriptversion=2005-05-14.22
-
-# This originates from X11R5 (mit/util/scripts/install.sh), which was
-# later released in X11R6 (xc/config/util/install.sh) with the
-# following copyright and license.
-#
-# Copyright (C) 1994 X Consortium
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
-# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# Except as contained in this notice, the name of the X Consortium shall not
-# be used in advertising or otherwise to promote the sale, use or other deal-
-# ings in this Software without prior written authorization from the X Consor-
-# tium.
-#
-#
-# FSF changes to this file are in the public domain.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch. It can only install one file at a time, a restriction
-# shared with many OS's install programs.
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-chmodcmd="$chmodprog 0755"
-chowncmd=
-chgrpcmd=
-stripcmd=
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=
-dst=
-dir_arg=
-dstarg=
-no_target_directory=
-
-usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
- or: $0 [OPTION]... SRCFILES... DIRECTORY
- or: $0 [OPTION]... -t DIRECTORY SRCFILES...
- or: $0 [OPTION]... -d DIRECTORIES...
-
-In the 1st form, copy SRCFILE to DSTFILE.
-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-In the 4th, create DIRECTORIES.
-
-Options:
--c (ignored)
--d create directories instead of installing files.
--g GROUP $chgrpprog installed files to GROUP.
--m MODE $chmodprog installed files to MODE.
--o USER $chownprog installed files to USER.
--s $stripprog installed files.
--t DIRECTORY install into DIRECTORY.
--T report an error if DSTFILE is a directory.
---help display this help and exit.
---version display version info and exit.
-
-Environment variables override the default commands:
- CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
-"
-
-while test -n "$1"; do
- case $1 in
- -c) shift
- continue;;
-
- -d) dir_arg=true
- shift
- continue;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift
- shift
- continue;;
-
- --help) echo "$usage"; exit $?;;
-
- -m) chmodcmd="$chmodprog $2"
- shift
- shift
- continue;;
-
- -o) chowncmd="$chownprog $2"
- shift
- shift
- continue;;
-
- -s) stripcmd=$stripprog
- shift
- continue;;
-
- -t) dstarg=$2
- shift
- shift
- continue;;
-
- -T) no_target_directory=true
- shift
- continue;;
-
- --version) echo "$0 $scriptversion"; exit $?;;
-
- *) # When -d is used, all remaining arguments are directories to create.
- # When -t is used, the destination is already specified.
- test -n "$dir_arg$dstarg" && break
- # Otherwise, the last argument is the destination. Remove it from $@.
- for arg
- do
- if test -n "$dstarg"; then
- # $@ is not empty: it contains at least $arg.
- set fnord "$@" "$dstarg"
- shift # fnord
- fi
- shift # arg
- dstarg=$arg
- done
- break;;
- esac
-done
-
-if test -z "$1"; then
- if test -z "$dir_arg"; then
- echo "$0: no input file specified." >&2
- exit 1
- fi
- # It's OK to call `install-sh -d' without argument.
- # This can happen when creating conditional directories.
- exit 0
-fi
-
-for src
-do
- # Protect names starting with `-'.
- case $src in
- -*) src=./$src ;;
- esac
-
- if test -n "$dir_arg"; then
- dst=$src
- src=
-
- if test -d "$dst"; then
- mkdircmd=:
- chmodcmd=
- else
- mkdircmd=$mkdirprog
- fi
- else
- # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
- # might cause directories to be created, which would be especially bad
- # if $src (and thus $dsttmp) contains '*'.
- if test ! -f "$src" && test ! -d "$src"; then
- echo "$0: $src does not exist." >&2
- exit 1
- fi
-
- if test -z "$dstarg"; then
- echo "$0: no destination specified." >&2
- exit 1
- fi
-
- dst=$dstarg
- # Protect names starting with `-'.
- case $dst in
- -*) dst=./$dst ;;
- esac
-
- # If destination is a directory, append the input filename; won't work
- # if double slashes aren't ignored.
- if test -d "$dst"; then
- if test -n "$no_target_directory"; then
- echo "$0: $dstarg: Is a directory" >&2
- exit 1
- fi
- dst=$dst/`basename "$src"`
- fi
- fi
-
- # This sed command emulates the dirname command.
- dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
-
- # Make sure that the destination directory exists.
-
- # Skip lots of stat calls in the usual case.
- if test ! -d "$dstdir"; then
- defaultIFS='
- '
- IFS="${IFS-$defaultIFS}"
-
- oIFS=$IFS
- # Some sh's can't handle IFS=/ for some reason.
- IFS='%'
- set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
- shift
- IFS=$oIFS
-
- pathcomp=
-
- while test $# -ne 0 ; do
- pathcomp=$pathcomp$1
- shift
- if test ! -d "$pathcomp"; then
- $mkdirprog "$pathcomp"
- # mkdir can fail with a `File exist' error in case several
- # install-sh are creating the directory concurrently. This
- # is OK.
- test -d "$pathcomp" || exit
- fi
- pathcomp=$pathcomp/
- done
- fi
-
- if test -n "$dir_arg"; then
- $doit $mkdircmd "$dst" \
- && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
- && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
- && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
- && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
-
- else
- dstfile=`basename "$dst"`
-
- # Make a couple of temp file names in the proper directory.
- dsttmp=$dstdir/_inst.$$_
- rmtmp=$dstdir/_rm.$$_
-
- # Trap to clean up those temp files at exit.
- trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
- trap '(exit $?); exit' 1 2 13 15
-
- # Copy the file name to the temp name.
- $doit $cpprog "$src" "$dsttmp" &&
-
- # and set any options; do chmod last to preserve setuid bits.
- #
- # If any of these fail, we abort the whole thing. If we want to
- # ignore errors from any of these, just make sure not to ignore
- # errors from the above "$doit $cpprog $src $dsttmp" command.
- #
- { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
- && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
- && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
- && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
-
- # Now rename the file to the real destination.
- { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
- || {
- # The rename failed, perhaps because mv can't rename something else
- # to itself, or perhaps because mv is so ancient that it does not
- # support -f.
-
- # Now remove or move aside any old file at destination location.
- # We try this two ways since rm can't unlink itself on some
- # systems and the destination file might be busy for other
- # reasons. In this case, the final cleanup might fail but the new
- # file should still install successfully.
- {
- if test -f "$dstdir/$dstfile"; then
- $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
- || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
- || {
- echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
- (exit 1); exit 1
- }
- else
- :
- fi
- } &&
-
- # Now rename the file to the real destination.
- $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
- }
- }
- fi || { (exit 1); exit 1; }
-done
-
-# The final little trick to "correctly" pass the exit status to the exit trap.
-{
- (exit 0); exit 0
-}
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/ast-5.3-1/interval.c b/ast-5.3-1/interval.c
deleted file mode 100644
index 812e260..0000000
--- a/ast-5.3-1/interval.c
+++ /dev/null
@@ -1,4676 +0,0 @@
-/*
-*class++
-* Name:
-* Interval
-
-* Purpose:
-* A region representing an interval on one or more axes of a Frame.
-
-* Constructor Function:
-c astInterval
-f AST_INTERVAL
-
-* Description:
-* The Interval class implements a Region which represents upper
-* and/or lower limits on one or more axes of a Frame. For a point to
-* be within the region represented by the Interval, the point must
-* satisfy all the restrictions placed on all the axes. The point is
-* outside the region if it fails to satisfy any one of the restrictions.
-* Each axis may have either an upper limit, a lower limit, both or
-* neither. If both limits are supplied but are in reverse order (so
-* that the lower limit is greater than the upper limit), then the
-* interval is an excluded interval, rather than an included interval.
-*
-* Note, The Interval class makes no allowances for cyclic nature of
-* some coordinate systems (such as SkyFrame coordinates). A Box
-* should usually be used in these cases since this requires the user
-* to think about suitable upper and lower limits,
-
-* Inheritance:
-* The Interval class inherits from the Region class.
-
-* Attributes:
-* The Interval class does not define any new attributes beyond
-* those which are applicable to all Regions.
-
-* Functions:
-c The Interval class does not define any new functions beyond those
-f The Interval class does not define any new routines beyond those
-* which are applicable to all Regions.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 29-OCT-2004 (DSB):
-* Original version.
-* 19-APR-2006 (DSB):
-* Negate the cached equivalent Box if the Interval has been negated.
-* 28-MAY-2007 (DSB):
-* Re-implemented BndBaseMesh.
-* 20-JAN-2009 (DSB):
-* Over-ride astRegBasePick.
-* 26-JAN-2009 (DSB):
-* Over-ride astMapMerge.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS Interval
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
- compare bad values directory because of the danger of floating point
- exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==(bb))?1:(((aa)==AST__BAD||(bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E9*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "region.h" /* Abstract coordinate regions (parent class) */
-#include "channel.h" /* I/O channels */
-#include "box.h" /* Box Regions */
-#include "nullregion.h" /* Null Regions */
-#include "wcsmap.h" /* Definitons of AST__DPI etc */
-#include "interval.h" /* Interface definition for this class */
-#include "ellipse.h" /* Interface definition for ellipse class */
-#include "mapping.h" /* Position mappings */
-#include "unitmap.h" /* Unit Mappings */
-#include "cmpmap.h" /* Compound Mappings */
-#include "cmpframe.h" /* Compound Frames */
-#include "prism.h" /* Prism regions */
-#include "pointlist.h" /* Lists of points in a Frame */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstMapping *(* parent_simplify)( AstMapping *, int * );
-static int (* parent_overlap)( AstRegion *, AstRegion *, int * );
-static void (* parent_setregfs)( AstRegion *, AstFrame *, int * );
-static void (* parent_setunc)( AstRegion *, AstRegion *, int * );
-static void (* parent_resetcache)( AstRegion *, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Interval)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Interval,Class_Init)
-#define class_vtab astGLOBAL(Interval,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstIntervalVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstInterval *astIntervalId_( void *, const double[], const double[], void *, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstBox *Cache( AstInterval *, int * );
-static AstMapping *Simplify( AstMapping *, int * );
-static AstPointSet *BndBaseMesh( AstRegion *, double *, double *, int * );
-static AstPointSet *RegBaseMesh( AstRegion *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstRegion *RegBasePick( AstRegion *this, int, const int *, int * );
-static AstRegion *GetDefUnc( AstRegion *, int * );
-static AstRegion *MergeInterval( AstInterval *, AstRegion *, int, int * );
-static double *RegCentre( AstRegion *this, double *, double **, int, int, int * );
-static int *OneToOne( AstMapping *, int * );
-static int GetBounded( AstRegion *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int Overlap( AstRegion *, AstRegion *, int * );
-static int RegPins( AstRegion *, AstPointSet *, AstRegion *, int **, int * );
-static int RegTrace( AstRegion *, int, double *, double **, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void IntervalPoints( AstInterval *, double *, double *, int *);
-static void RegBaseBox( AstRegion *this, double *, double *, int * );
-static void ResetCache( AstRegion *this, int * );
-static void SetRegFS( AstRegion *, AstFrame *, int * );
-static void SetUnc( AstRegion *, AstRegion *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Member functions. */
-/* ================= */
-
-static AstPointSet *BndBaseMesh( AstRegion *this, double *lbnd, double *ubnd, int *status ){
-/*
-* Name:
-* BndBaseMesh
-
-* Purpose:
-* Return a PointSet containing points spread around part of the boundary
-* of a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "interval.h"
-* AstPointSet *BndBaseMesh( AstRegion *this, double *lbnd, double *ubnd, int *status )
-
-* Class Membership:
-* Interval method (over-rides the astBndBaseMesh method inherited from
-* the Region class).
-
-* Description:
-* This function returns a PointSet containing a set of points on the
-* boundary of the intersection between the supplied Region and the
-* supplied box. The points refer to the base Frame of the
-* encapsulated FrameSet. If the boundary of the supplied Region does
-* not intersect the supplied box, then a PointSet containing a single
-* bad point is returned.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* lbnd
-* Pointer to an array holding the lower limits of the axis values
-* within the required box.
-* ubnd
-* Pointer to an array holding the upper limits of the axis values
-* within the required box.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the PointSet. The axis values in this PointSet will have
-* associated accuracies derived from the uncertainties which were
-* supplied when the Region was created.
-*
-* If the Region does not intersect the supplied box, the returned
-* PointSet will contain a single point with a value of AST__BAD on
-* every axis.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-*/
-
-/* Local Variables: */
- AstBox *box;
- AstFrame *bfrm;
- AstInterval *this_interval;
- AstMapping *map;
- AstPointSet *result;
- double *lbndb;
- double *ubndb;
- double **ptr;
- int closed;
- int i;
- int nbase;
-
-/* Initialise */
- result = NULL;
-
-/* Check the local error status. */
- if ( !astOK ) return result;
-
-/* Store a pointer to the interval. */
- this_interval = (AstInterval *) this;
-
-/* If the Interval is effectively a Box, invoke the astBndBaseMesh
- function on the equivalent Box. A pointer to the equivalent Box will
- be stored in the Interval structure. */
- box = Cache( (AstInterval *) this, status );
- if( box ) {
- result = astBndBaseMesh( box, lbnd, ubnd );
-
-/* If the Interval is not equivalent to a Box (i.e. if one or more bounds
- are missing)... */
- } else {
-
-/* Find the base frame box that just encloses the supplied current Frame
- box. */
- map = astGetMapping( this->frameset, AST__CURRENT, AST__BASE );
- nbase = astGetNout( map );
- lbndb = astMalloc( sizeof(double)*nbase );
- ubndb = astMalloc( sizeof(double)*nbase );
- if( astOK ) {
- for( i = 0; i < nbase; i++ ) {
- astMapBox( map, lbnd, ubnd, 1, i, lbndb + i, ubndb + i,
- NULL, NULL );
- }
-
-/* Create a Box that is like this Interval except that missing bounds are
- inherited from the supplied limits. Check that the resulting box is
- closed. */
- closed = 1;
- for( i = 0; i < nbase; i++ ) {
- if( this_interval->ubnd[ i ] != DBL_MAX ) ubndb[ i ] = this_interval->ubnd[ i ];
- if( this_interval->lbnd[ i ] != -DBL_MAX ) lbndb[ i ] = this_interval->lbnd[ i ];
- if( lbndb[ i ] > ubndb[ i ] ) closed = 0;
- }
-
-/* Cannot create the required mesh if the box is not closed. */
- if( closed ) {
-
-/* Create the Box. */
- bfrm = astGetFrame( this->frameset, AST__BASE );
- box = astBox( bfrm, 1, lbndb, ubndb, NULL, "", status );
-
-/* Create the required mesh. */
- result = astRegBaseMesh( box );
-
-/* Free resources */
- bfrm = astAnnul( bfrm );
- box = astAnnul( box );
-
-/* If the boundary of the supplied Region does not intersect the box,
- return a PointSet containing a single bad position. */
- } else {
- result = astPointSet( 1, nbase, "", status );
- ptr = astGetPoints( result );
- if( astOK ) {
- for( i = 0; i < nbase; i++ ) ptr[ i ][ 0 ] = AST__BAD;
- }
- }
- }
-
-/* Free resources. */
- map = astAnnul( map );
- lbndb = astFree( lbndb );
- ubndb = astFree( ubndb );
- }
-
-/* Return NULL if an error occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the required pointer. */
- return result;
-}
-
-static AstBox *Cache( AstInterval *this, int *status ){
-/*
-* Name:
-* Cache
-
-* Purpose:
-* Calculate intermediate values and cache them in the Interval structure.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "interval.h"
-* AstBox *Cache( AstInterval *this, int *status )
-
-* Class Membership:
-* Interval member function
-
-* Description:
-* This function uses the PointSet stored in the parent Region to calculate
-* some intermediate values which are useful in other methods. These
-* values are stored within the Interval structure.
-
-* Parameters:
-* this
-* Pointer to the Interval.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If the Interval is equivalent to a Box, then a pointer to the
-* equivalent Box is returned. This is a copy of the pointer stored in
-* the Interval structure and should not be annulled.
-
-*/
-
-/* Local Variables: */
- AstBox *bbox; /* Equivalent base Box */
- AstFrame *bfrm; /* Interval base Frame */
- AstFrame *cfrm; /* Interval current Frame */
- AstRegion *map; /* Interval base->current Mapping */
- AstRegion *reg; /* Pointer to this Region structure */
- AstRegion *unc; /* Pointer to uncertainty Region */
- double **ptr; /* Pointer to data holding all axis limits */
- double *lbnd; /* Pointer to array of lower axis limits */
- double *ubnd; /* Pointer to array of upper axis limits */
- int i; /* Axis index */
- int isBox; /* Is this Interval equivalent to a Box? */
- int nc; /* Number of base Frame axes */
- int neg; /* Is the equivalent Box negated? */
-
-/* Check the global error status. Also return if the cached information
- is up to date (i.e. not stale). */
- if( !this->stale || !astOK ) return this->box;
-
-/* Get a pointer to the Region structure */
- reg = (AstRegion *) this;
-
-/* The Interval structure contains a pointer to an equivalent Box
- structure. This Box structure is created below if the Interval is
- equivalent to a Box. Annul any previous box. */
- if( this->box ) this->box = astAnnul( this->box );
-
-/* Get the number of axes in the base Frame of the FrameSet encapsulated
- by the parent Region structure. */
- nc = astGetNin( reg->frameset );
-
-/* Get a pointer to the array holding the axis limits held in the PointSet
- encapsulated in the parent Region structure. */
- ptr = astGetPoints( reg->points );
-
-/* Allocate memory to hold the limits organised per point rather than per
- axis. */
- lbnd = astMalloc( sizeof( double )*(size_t)nc );
- ubnd = astMalloc( sizeof( double )*(size_t)nc );
-
-/* Check these pointers can be used safely. */
- if( ubnd ) {
-
-/* See if the Interval is effectively a (possibly negated) Box. Assume it
- is to begin with. */
- isBox = 1;
-
-/* Initialisation to prevent compiler warnings. */
- neg = 0;
-
-/* Check the limits on every axis. */
- for( i = 0; i < nc; i++ ) {
-
-/* Copy the axis limits into the allocated arrays (these are needed by the
- Box constructor later on). */
- lbnd[ i ] = ptr[ i ][ 0 ];
- ubnd[ i ] = ptr[ i ][ 1 ];
-
-/* The Interval is not a Box if any axis limit is missing. In this case
- use -DBL_MAX or +DBL_MAX as the limit to be stored in the Interval
- structure. */
- if( lbnd[ i ] == AST__BAD ) lbnd[ i ] = -DBL_MAX;
- if( fabs( lbnd[ i ] ) == DBL_MAX ) isBox = 0;
-
- if( ubnd[ i ] == AST__BAD ) ubnd[ i ] = DBL_MAX;
- if( fabs( ubnd[ i ] ) == DBL_MAX ) isBox = 0;
-
-/* If this is the first axis, note if the axis interval is included or
- excluded. This is determined by whether the "lower limit" is greater
- than or less than the "upper limit". If the axis interval is excluded
- (lower limit greater than upper limit), then any equivalent Box will be
- a negated Box (i.e. will represent the outside of a box rather than
- the inside). */
- if( i == 0 ){
- neg = ( lbnd[ i ] > ubnd[ i ] );
-
-/* The Interval is not a Box if the limits for this axis are not the same
- way round as those of the first axis. */
- } else {
-
- if( neg ) {
- if( lbnd[ i ] < ubnd[ i ] ) isBox = 0;
- } else {
- if( lbnd[ i ] > ubnd[ i ] ) isBox = 0;
- }
-
- }
- }
-
-/* If the Interval is effectively an unnegated Box, create the equivalent Box,
- and store a pointer to it in the Interval structure. */
- if( isBox && !neg ) {
- bfrm = astGetFrame( reg->frameset, AST__BASE );
- cfrm = astGetFrame( reg->frameset, AST__CURRENT );
- map = astGetMapping( reg->frameset, AST__BASE, AST__CURRENT );
- unc = astTestUnc( reg ) ? astGetUncFrm( reg, AST__BASE ) : NULL;
-
- bbox = astBox( bfrm, 1, lbnd, ubnd, unc, "", status );
- if( astIsAUnitMap( map ) ){
- this->box = astClone( bbox );
- } else {
- this->box = astMapRegion( bbox, map, cfrm );
- }
-
- if( unc ) unc = astAnnul( unc );
- cfrm = astAnnul( cfrm );
- bfrm = astAnnul( bfrm );
- map = astAnnul( map );
- bbox = astAnnul( bbox );
-
-/* If the supplied Interval has been negated, negate the equivalent Box. */
- if( astGetNegated( this ) ) astNegate( this->box );
-
-/* If the supplied Interval is closed, ensure the equivalent Box is closed. */
- astSetClosed( this->box, astGetClosed( this ) );
- }
-
-/* Store the axis limits in the Interval structure. */
- if( this->lbnd ) astFree( this->lbnd );
- if( this->ubnd ) astFree( this->ubnd );
- this->lbnd = lbnd;
- this->ubnd = ubnd;
- }
-
-/* Indicate the cached information is no longer stale, and return a
- pointer to any equivalent Box. */
- this->stale = 0;
- return this->box;
-}
-
-static int GetBounded( AstRegion *this, int *status ) {
-/*
-* Name:
-* GetBounded
-
-* Purpose:
-* Is the Region bounded?
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "interval.h"
-* int GetBounded( AstRegion *this, int *status )
-
-* Class Membership:
-* Interval method (over-rides the astGetBounded method inherited from
-* the Region class).
-
-* Description:
-* This function returns a flag indicating if the Region is bounded.
-* The implementation provided by the base Region class is suitable
-* for Region sub-classes representing the inside of a single closed
-* curve (e.g. Circle, Interval, Box, etc). Other sub-classes (such as
-* CmpRegion, PointList, etc ) may need to provide their own
-* implementations.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the Region is bounded. Zero otherwise.
-
-*/
-
-/* Local Variables: */
- int result; /* Returned result */
-
-/* Initialise */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* The unnegated Interval is bounded only if there is an equivalent Box
- structure stored in the Interval structure. */
- if( Cache( (AstInterval *) this, status ) ) result = 1;
-
-/* Return the required pointer. */
- return result;
-}
-
-static AstRegion *GetDefUnc( AstRegion *this_region, int *status ) {
-/*
-* Name:
-* GetDefUnc
-
-* Purpose:
-* Obtain a pointer to the default uncertainty Region for a given Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "interval.h"
-* AstRegion *GetDefUnc( AstRegion *this, int *status )
-
-* Class Membership:
-* Interval member function (over-rides the astGetDefUnc protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a pointer to a Region which represents the
-* default uncertainty associated with a position on the boundary of the
-* given Region. The returned Region refers to the base Frame within the
-* FrameSet encapsulated by the supplied Region.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the Region. This should be annulled (using astAnnul)
-* when no longer needed.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstBox *box; /* Pointer to equivalent Box */
- AstFrame *bfrm; /* Base Frame of supplied Region */
- AstInterval *this; /* Pointer to Interval structure */
- AstRegion *result; /* Returned pointer */
- double *lbnd; /* Ptr. to array holding axis lower bounds */
- double *ubnd; /* Ptr. to array holding axis upper bounds */
- double c; /* Central axis value */
- double hw; /* Half width of uncertainty interval */
- int i; /* Axis index */
- int nax; /* Number of base Frame axes */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the Interval structure. */
- this = (AstInterval *) this_region;
-
-/* If this Interval is equivalent to a Box, get the default uncertainty
- for the equivalent Box and return it. */
- box = Cache( this, status );
- if( box ) {
- result = astGetDefUnc( box );
-
-/* Otherwise, we use a box covering 1.0E-6 of each axis interval, centred on
- the origin. */
- } else {
-
-/* Get a pointer to the base Frame. */
- bfrm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Get the number of base Frame axes. */
- nax = astGetNaxes( bfrm );
-
-/* Allocate arrays to hold the bounds of the uncertainty Box. */
- lbnd = astMalloc( sizeof( double)*(size_t) nax );
- ubnd = astMalloc( sizeof( double)*(size_t) nax );
- if( astOK ) {
-
-/* Ensure cached information (e.g.bounds) is up to date. */
- Cache( this, status );
-
-/* Do each axis in turn */
- for( i = 0; i < nax; i++ ) {
-
-/* If this axis has both limits, use 1.0E-6 of the difference between the
- limits. */
- if( this->lbnd[ i ] != -DBL_MAX &&
- this->ubnd[ i ] != DBL_MAX ) {
- hw = fabs( 0.5E-6*( this->ubnd[ i ] - this->lbnd[ i ] ) );
- c = 0.5*( this->ubnd[ i ] + this->lbnd[ i ] );
- if( hw == 0.0 ) hw = c*0.5E-6;
- ubnd[ i ] = c + hw;
- lbnd[ i ] = c - hw;
-
-/* Otherwise use zero. */
- } else {
- ubnd[ i ] = 0.0;
- lbnd[ i ] = 0.0;
- }
- }
-
-/* Create the Box. */
- result = (AstRegion *) astBox( bfrm, 1, lbnd, ubnd, NULL, "", status );
- }
-
-/* Free resources. */
- lbnd = astFree( lbnd );
- ubnd = astFree( ubnd );
- bfrm = astAnnul( bfrm );
- }
-
-/* Return NULL if an error occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the required pointer. */
- return result;
-}
-
-void astInitIntervalVtab_( AstIntervalVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitIntervalVtab
-
-* Purpose:
-* Initialise a virtual function table for a Interval.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "interval.h"
-* void astInitIntervalVtab( AstIntervalVtab *vtab, const char *name )
-
-* Class Membership:
-* Interval vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the Interval class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
- AstRegionVtab *region; /* Pointer to Region component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitRegionVtab( (AstRegionVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAInterval) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstRegionVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
- vtab->IntervalPoints = IntervalPoints;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
- region = (AstRegionVtab *) vtab;
-
-#if defined(THREAD_SAFE)
- parent_managelock = object->ManageLock;
- object->ManageLock = ManageLock;
-#endif
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
- parent_simplify = mapping->Simplify;
- mapping->Simplify = Simplify;
-
- parent_overlap = region->Overlap;
- region->Overlap = Overlap;
-
- parent_setregfs = region->SetRegFS;
- region->SetRegFS = SetRegFS;
-
- parent_resetcache = region->ResetCache;
- region->ResetCache = ResetCache;
-
- parent_setunc = region->SetUnc;
- region->SetUnc = SetUnc;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- mapping->MapMerge = MapMerge;
-
- region->RegCentre = RegCentre;
- region->GetBounded = GetBounded;
- region->GetDefUnc = GetDefUnc;
- region->RegPins = RegPins;
- region->RegTrace = RegTrace;
- region->RegBaseMesh = RegBaseMesh;
- region->BndBaseMesh = BndBaseMesh;
- region->RegBaseBox = RegBaseBox;
- region->RegBasePick = RegBasePick;
-
-/* Declare the copy constructor, destructor and class dump
- functions. */
- astSetDelete( vtab, Delete );
- astSetCopy( vtab, Copy );
- astSetDump( vtab, Dump, "Interval", "Axis intervals" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-void IntervalPoints( AstInterval *this, double *lbnd, double *ubnd,
- int *status) {
-/*
-*+
-* Name:
-* astIntervalPoints
-
-* Purpose:
-* Return the defining points of a Interval.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "box.h"
-* astIntervalPoints( AstInterval *this, double *lbnd, double *ubnd )
-
-* Class Membership:
-* Region virtual function.
-
-* Description:
-* This function returns the axis values at the points defining the
-* supplied Interval.
-
-* Parameters:
-* this
-* Pointer to the Interval.
-* lbnd
-* A pointer to an array in which to return the "lbnd" values
-* supplied when the Interval was constructed. These are in the
-* base Frame of the encapsilated FrameSet.
-* ubnd
-* A pointer to an array in which to return the "ubnd" values
-* supplied when the Interval was constructed. These are in the
-* base Frame of the encapsilated FrameSet.
-
-* Notes:
-* - It is assumed that the length of the supplied arrays is at least
-* equal to the number of axes in the base frame of the encapsulated
-* FrameSet.
-*-
-*/
-
-/* Local Variables: */
- AstPointSet *pset;
- double **ptr;
- int nc;
- int i;
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* Get a pointer to the PointSet holding the points defining the Interval. */
- pset = ((AstRegion *) this)->points;
-
-/* Get a pointer to the PointSet's data arrays. */
- ptr = astGetPoints( pset );
-
-/* See how many axes each point in the PointSet has. */
- nc = astGetNcoord( pset );
-
-/* Copy the axis values from the PointSet into the supplied arrays. */
- for( i = 0; i < nc; i++ ) {
- lbnd[ i ] = ptr[ i ] [ 0 ];
- ubnd[ i ] = ptr[ i ] [ 1 ];
- }
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra,
- AstObject **fail, int *status ) {
-/*
-* Name:
-* ManageLock
-
-* Purpose:
-* Manage the thread lock on an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *ManageLock( AstObject *this, int mode, int extra,
-* AstObject **fail, int *status )
-
-* Class Membership:
-* Interval member function (over-rides the astManageLock protected
-* method inherited from the parent class).
-
-* Description:
-* This function manages the thread lock on the supplied Object. The
-* lock can be locked, unlocked or checked by this function as
-* deteremined by parameter "mode". See astLock for details of the way
-* these locks are used.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* mode
-* An integer flag indicating what the function should do:
-*
-* AST__LOCK: Lock the Object for exclusive use by the calling
-* thread. The "extra" value indicates what should be done if the
-* Object is already locked (wait or report an error - see astLock).
-*
-* AST__UNLOCK: Unlock the Object for use by other threads.
-*
-* AST__CHECKLOCK: Check that the object is locked for use by the
-* calling thread (report an error if not).
-* extra
-* Extra mode-specific information.
-* fail
-* If a non-zero function value is returned, a pointer to the
-* Object that caused the failure is returned at "*fail". This may
-* be "this" or it may be an Object contained within "this". Note,
-* the Object's reference count is not incremented, and so the
-* returned pointer should not be annulled. A NULL pointer is
-* returned if this function returns a value of zero.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A local status value:
-* 0 - Success
-* 1 - Could not lock or unlock the object because it was already
-* locked by another thread.
-* 2 - Failed to lock a POSIX mutex
-* 3 - Failed to unlock a POSIX mutex
-* 4 - Bad "mode" value supplied.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-*/
-
-/* Local Variables: */
- AstInterval *this; /* Pointer to Interval structure */
- int result; /* Returned status value */
-
-/* Initialise */
- result = 0;
-
-/* Check the supplied pointer is not NULL. */
- if( !this_object ) return result;
-
-/* Obtain a pointers to the Interval structure. */
- this = (AstInterval *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
- if( !result ) result = (*parent_managelock)( this_object, mode, extra,
- fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
- the supplied Object. */
- if( !result ) result = astManageLock( this->box, mode, extra, fail );
-
- return result;
-
-}
-#endif
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a Interval.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* Interval method (over-rides the protected astMapMerge method
-* inherited from the Region class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated Interval in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated Interval with a Mapping which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated Interval which is to be merged with
-* its neighbours. This should be a cloned copy of the Interval
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* Interval it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated Interval resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstInterval *oldint; /* Pointer to supplied Interval */
- AstMapping *map; /* Pointer to adjacent Mapping */
- AstMapping *new; /* Simplified or merged Region */
- int i1; /* Index of first Mapping merged */
- int i; /* Loop counter */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = -1;
- i1 = -1;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the Interval. */
- oldint = (AstInterval *) this;
-
-/* First of all, see if the Interval can be replaced by a simpler Region,
- without reference to the neighbouring Regions in the list. */
-/* =====================================================================*/
-
-/* Try to simplify the Interval. If the pointer value has changed, we assume
- some simplification took place. */
- new = astSimplify( oldint );
- if( new != (AstMapping *) oldint ) {
-
-/* Annul the Interval pointer in the list and replace it with the new Region
- pointer, and indicate that the forward transformation of the returned
- Region should be used (not really needed but keeps things clean). */
- (void) astAnnul( ( *map_list )[ where ] );
- ( *map_list )[ where ] = new;
- ( *invert_list )[ where ] = 0;
-
-/* Return the index of the first modified element. */
- result = where;
-
-/* If the Interval itself could not be simplified, see if it can be merged
- with the Regions on either side of it in the list. We can only merge
- in parallel. */
-/* =====================================================================*/
- } else if( ! series ){
- new = astAnnul( new );
-
-/* Attempt to merge the Interval with its lower neighbour (if any). */
- if( where > 0 ) {
- i1 = where - 1;
- map = ( *map_list )[ where - 1 ];
- if( astIsARegion( map ) ) {
- new = (AstMapping *) MergeInterval( oldint, (AstRegion *) map,
- 0, status );
- }
- }
-
-/* If this did not produced a merged Region, attempt to merge the Interval
- with its upper neighbour (if any). */
- if( !new && where < *nmap - 1 ) {
- i1 = where;
- map = ( *map_list )[ where + 1 ];
- if( astIsARegion( map ) ) {
- new = (AstMapping *) MergeInterval( oldint, (AstRegion *) map,
- 1, status );
- }
- }
-
-/* If succesfull... */
- if( new ){
-
-/* Annul the first of the two Mappings, and replace it with the merged
- Region. Also clear the invert flag. */
- (void) astAnnul( ( *map_list )[ i1 ] );
- ( *map_list )[ i1 ] = new;
- ( *invert_list )[ i1 ] = 0;
-
-/* Annul the second of the two Mappings, and shuffle down the rest of the
- list to fill the gap. */
- (void) astAnnul( ( *map_list )[ i1 + 1 ] );
- for ( i = i1 + 2; i < *nmap; i++ ) {
- ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
- ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
- }
-
-/* Clear the vacated element at the end. */
- ( *map_list )[ *nmap - 1 ] = NULL;
- ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
- modified element. */
- ( *nmap )--;
- result = i1;
- }
-
- } else {
- new = astAnnul( new );
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstRegion *MergeInterval( AstInterval *this, AstRegion *reg,
- int intfirst, int *status ) {
-/*
-* Name:
-* MergeInterval
-
-* Purpose:
-* Attempt to merge a Interval with another Region to form a Region of
-* higher dimensionality.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "box.h"
-* AstRegion *MergeInterval( AstInterval *this, AstRegion *reg,
-* int intfirst, int *status )
-
-* Class Membership:
-* Interval member function.
-
-* Description:
-* This function attempts to combine the supplied Regions together
-* into a Region of higher dimensionality.
-
-* Parameters:
-* this
-* Pointer to a Interval.
-* reg
-* Pointer to another Region.
-* intfirst
-* If non-zero, then the Interval axes are put first in the new Region.
-* Otherwise, the other Region's axes are put first.
-* status
-* Pointer to the inherited status value.
-
-* Returned Value:
-* A pointer to a new region, or NULL if the supplied Regions could
-* not be merged.
-*/
-
-/* Local Variables: */
- AstFrame *bfrm; /* Pointer to base Frame for "result" */
- AstFrame *cfrm; /* Pointer to current Frame for "result" */
- AstFrame *frm_reg; /* Pointer to Frame from "reg" */
- AstFrame *frm_this; /* Pointer to Frame from "this" */
- AstMapping *bcmap; /* Base->current Mapping for "result" */
- AstMapping *map_reg; /* Base->current Mapping from "reg" */
- AstMapping *map_this; /* Base->current Mapping from "this" */
- AstMapping *sbunc; /* Simplified uncertainty */
- AstPointSet *pset_new; /* PointSet holding PointList axis values for new */
- AstPointSet *pset_reg; /* PointSet holding PointList axis values for reg */
- AstRegion *bunc; /* Base Frame uncertainty Region */
- AstRegion *new; /* Pointer to new Interval in base Frame */
- AstRegion *result; /* Pointer to returned Interval in current Frame */
- AstRegion *unc_reg; /* Current Frame uncertainty Region from "reg" */
- AstRegion *unc_this; /* Current Frame uncertainty Region from "this" */
- double **ptr_new; /* Pointers to arrays holding new axis values */
- double **ptr_reg; /* Pointers to arrays holding reg axis values */
- double *centre; /* Array to hold Interval centre axis values */
- double *corner; /* Array to hold Interval corner axis values */
- double *lbnd; /* Array to hold lower axis bounds */
- double *lbnd_unc; /* Array to hold uncertainty lower bounds */
- double *p; /* Pointer to next input value */
- double *q; /* Pointer to next output value */
- double *ubnd; /* Array to hold upper axis bounds */
- double *ubnd_unc; /* Array to hold uncertainty upper bounds */
- double fac_reg; /* Ratio of used to default MeshSize for "reg" */
- double fac_this; /* Ratio of used to default MeshSize for "this" */
- double temp; /* Temporary storage */
- int i; /* Loop count */
- int j; /* Loop count */
- int msz_reg; /* Original MeshSize for "reg" */
- int msz_reg_set; /* Was MeshSize originally set for "reg"? */
- int msz_this; /* Original MeshSize for "this" */
- int msz_this_set; /* Was MeshSize originally set for "this"? */
- int nax; /* Number of axes in "result" */
- int nax_reg; /* Number of axes in "reg" */
- int nax_this; /* Number of axes in "this" */
- int neg_reg; /* Negated attribute value for other supplied Region */
- int neg_this; /* Negated attribute value for supplied Interval */
- int npnt; /* Number of points in PointList */
- int ok; /* Can supplied Regions be merged? */
-
-/* Initialise */
- result = NULL;
- lbnd = NULL;
- ubnd = NULL;
-
-/* Check the local error status. */
- if ( !astOK ) return result;
-
-/* Get the Closed attributes of the two Regions. They must be the same in
- each Region if we are to merge the Regions. In addition, in order to
- merge, either both Regions must have a defined uncertainty, or neither
- Region must have a defined Uncertainty. */
- if( astGetClosed( this ) == astGetClosed( reg ) &&
- astTestUnc( this ) == astTestUnc( reg ) ) {
-
-/* Get the Nagated attributes of the two Regions. */
- neg_this = astGetNegated( this );
- neg_reg = astGetNegated( reg );
-
-/* Get the number of axes in the two supplied Regions. */
- nax_reg = astGetNaxes( reg );
- nax_this = astGetNaxes( this );
-
-/* If the Regions can be combined, get the number of axes the
- combination will have. */
- nax = nax_reg + nax_this;
-
-/* Get the base Frames from the two Region FrameSets, and combine them
- into a single CmpFrame that will be used to create any new Region. */
- frm_this = astGetFrame( ((AstRegion *) this)->frameset, AST__BASE );
- frm_reg = astGetFrame( reg->frameset, AST__BASE );
-
- if( intfirst ) {
- bfrm = (AstFrame *) astCmpFrame( frm_this, frm_reg, "", status );
- } else {
- bfrm = (AstFrame *) astCmpFrame( frm_reg, frm_this, "", status );
- }
-
- frm_this = astAnnul( frm_this );
- frm_reg = astAnnul( frm_reg );
-
-/* Indicate we do not yet have a merged Region. */
- new = NULL;
-
-/* First attempt to merge with another Interval. The result will be an
- Interval. Both Intervals must be un-negated. */
- if( astIsAInterval( reg ) && !neg_this && !neg_reg ) {
-
-/* Allocate memory to store the bounds of the returned Interval. */
- lbnd = astMalloc( sizeof( double )*(size_t) nax );
- ubnd = astMalloc( sizeof( double )*(size_t) nax );
-
-/* Copy the limits from the supplied Intervals into the above arrays,
- in the requested order. */
- if( intfirst ) {
- astIntervalPoints( this, lbnd, ubnd );
- astIntervalPoints( reg, lbnd + nax_this, ubnd + nax_this );
- } else {
- astIntervalPoints( reg, lbnd, ubnd );
- astIntervalPoints( this, lbnd + nax_reg, ubnd + nax_reg );
- }
-
-/* Create the new Interval, initially with no uncertainty. */
- new = (AstRegion *) astInterval( bfrm, lbnd, ubnd, NULL, "",
- status );
-
-/* Free resources .*/
- lbnd = astFree( lbnd );
- ubnd = astFree( ubnd );
-
-/* Now attempt to merge with a Box. The result will be an Interval. Both
- Regions must be un-negated. */
- } else if( astIsABox( reg ) && !neg_this && !neg_reg ) {
-
-/* Allocate memory to store the bounds of the returned Interval. */
- lbnd = astMalloc( sizeof( double )*(size_t) nax );
- ubnd = astMalloc( sizeof( double )*(size_t) nax );
-
-/* Get the bounds from the Interval and add them into the above arrays. */
- if( intfirst ) {
- astIntervalPoints( this, lbnd, ubnd );
- } else {
- astIntervalPoints( this, lbnd + nax_reg, ubnd + nax_reg );
- }
-
-/* Copy the centre and corner from the supplied Box into the required part
- of the above arrays. */
- if( intfirst ) {
- centre = lbnd + nax_this;
- corner = ubnd + nax_this;
- } else {
- centre = lbnd;
- corner = ubnd;
- }
- astBoxPoints( reg, centre, corner );
-
-/* Convert these centre and corner positions into upper and lower bounds. */
- if( astOK ) {
- for( i = 0; i < nax_reg; i++ ) {
- centre[ i ] = 2*centre[ i ] - corner[ i ];
- if( centre[ i ] > corner[ i ] ) {
- temp = centre[ i ];
- centre[ i ] = corner[ i ];
- corner[ i ] = temp;
- }
- }
- }
-
-/* Create the new Interval, initially with no uncertainty. */
- new = (AstRegion *) astInterval( bfrm, lbnd, ubnd, NULL, "",
- status );
-
-/* Free resources .*/
- lbnd = astFree( lbnd );
- ubnd = astFree( ubnd );
-
-/* Now attempt to merge with a NullRegion. The result will be an Interval.
- The NullRegion must be negated and the Interval must not. */
- } else if( astIsANullRegion( reg ) && !neg_this && neg_reg ) {
-
-/* Allocate memory to store the bounds of the returned Interval. */
- lbnd = astMalloc( sizeof( double )*(size_t) nax );
- ubnd = astMalloc( sizeof( double )*(size_t) nax );
-
-/* Copy the limits from the supplied Interval into the above arrays.
- Store bad values for the other axes indicating they are unbounded. */
- if( intfirst ) {
- astIntervalPoints( this, lbnd, ubnd );
- for( i = nax_this; i < nax; i++ ) {
- lbnd[ i ] = AST__BAD;
- ubnd[ i ] = AST__BAD;
- }
- } else {
- for( i = 0; i < nax_reg; i++ ) {
- lbnd[ i ] = AST__BAD;
- ubnd[ i ] = AST__BAD;
- }
- astIntervalPoints( this, lbnd + nax_reg, ubnd + nax_reg );
- }
-
-/* Create the new Interval, initially with no uncertainty. */
- new = (AstRegion *) astInterval( bfrm, lbnd, ubnd, NULL, "",
- status );
-
-/* Free resources .*/
- lbnd = astFree( lbnd );
- ubnd = astFree( ubnd );
-
-/* Now attempt to merge with a PointList. The result will be a PointList.
- Both Regions must be un-negated. */
- } else if( astIsAPointList( reg ) && !neg_this && !neg_reg ) {
-
-/* We can only do this if the Interval has zero width on each axis (i.e.
- represents a point). Get the Interval bounds. */
- lbnd = astMalloc( sizeof( double )*(size_t) nax_this );
- ubnd = astMalloc( sizeof( double )*(size_t) nax_this );
- astRegBaseBox( this, lbnd, ubnd );
-
-/* Get the size of the Interval's uncertainty region. */
- lbnd_unc = astMalloc( sizeof( double )*(size_t) nax_this );
- ubnd_unc = astMalloc( sizeof( double )*(size_t) nax_this );
- bunc = astGetUncFrm( this, AST__BASE );
- astGetRegionBounds( bunc, lbnd, ubnd );
-
-/* Set "ok" to zero if the Interval does not have zero width on any axis. Here
- "zero width" means a width less than half the uncertainty on the axis.
- We also replace the lower bound values in the "lbnd" array by the central
- values in the Interval. */
- if( astOK ) {
- ok = 1;
- for( i = 0; i < nax_this; i++ ) {
- if( fabs( lbnd[ i ] - lbnd[ i ] ) >
- 0.25*fabs( ubnd_unc[ i ] - lbnd_unc[ i ] ) ) {
- ok = 0;
- break;
- } else {
- lbnd[ i ] = 0.5*( lbnd[ i ] + ubnd[ i ] );
- }
- }
-
-/* If the Interval is a point, we go on to create a new PointList. */
- if( ok ) {
-
-/* Get a PointSet holding the axis values in the supplied PointList data.
- Also get the number of points in the PointSet and pointers to the arrays
- holding the axis values. */
- astPointListPoints( reg, &pset_reg );
- npnt = astGetNpoint( pset_reg );
- ptr_reg = astGetPoints( pset_reg );
-
-/* Create a new PointSet with room for the same number of points, but
- with the extra required axes. Get pointers to its axis arrays. */
- pset_new = astPointSet( npnt, nax, "", status );
- ptr_new = astGetPoints( pset_new );
-
-/* Copy the PointList axis values into the new PointSet, and then include
- the extra axis values defined by the Interval to each point. */
- if( astOK ) {
-
- for( j = 0; j < nax_reg; j++ ) {
- p = ptr_reg[ j ];
- q = ptr_new[ intfirst ? nax_this + j : j ];
- for( i = 0; i < npnt; i++ ) *(q++) = *(p++);
- }
-
- for( j = 0; j < nax_this; j++ ) {
- p = lbnd + j;
- q = ptr_new[ intfirst ? j : nax_reg + j ];
- for( i = 0; i < npnt; i++ ) *(q++) = *p;
- }
-
-/* Create the new PointList, initially with no uncertainty. */
- new = (AstRegion *) astPointList( bfrm, pset_new, NULL,
- "", status );
- }
-
-/* Free resources .*/
- pset_new = astAnnul( pset_new );
- pset_reg = astAnnul( pset_reg );
- }
- }
- lbnd = astFree( lbnd );
- ubnd = astFree( ubnd );
- lbnd_unc = astFree( lbnd_unc );
- ubnd_unc = astFree( ubnd_unc );
- bunc = astAnnul( bunc );
-
- }
-
-/* If a new Region was created above, propagate remaining attributes of
- the supplied Region to it. */
- if( new ) {
- astRegOverlay( new, this, 1 );
-
-/* The above Prism constructors create the Prism with the correct value
- for the Nagated attribute (i.e. zero). Ensure the above call to
- astRegOverlay has not changed this. */
- astClearNegated( new );
-
-/* If both the supplied Regions have uncertainty, assign the new Region an
- uncertainty. */
- if( astTestUnc( this ) && astTestUnc( reg ) ) {
-
-/* Get the uncertainties from the two supplied Regions. */
- unc_this = astGetUncFrm( this, AST__BASE );
- unc_reg = astGetUncFrm( reg, AST__BASE );
-
-/* Combine them into a single Region (a Prism), in the correct order. */
- if( intfirst ) {
- bunc = (AstRegion *) astPrism( unc_this, unc_reg, "", status );
- } else {
- bunc = (AstRegion *) astPrism( unc_reg, unc_this, "", status );
- }
-
-/* Attempt to simplify the Prism. */
- sbunc = astSimplify( bunc );
-
-/* Use the simplified Prism as the uncertainty for the returned Region. */
- astSetUnc( new, sbunc );
-
-/* Free resources. */
- sbunc = astAnnul( sbunc );
- bunc = astAnnul( bunc );
- unc_reg = astAnnul( unc_reg );
- unc_this = astAnnul( unc_this );
- }
-
-/* Get the current Frames from the two Region FrameSets, and combine them
- into a single CmpFrame. */
- frm_this = astGetFrame( ((AstRegion *) this)->frameset, AST__CURRENT );
- frm_reg = astGetFrame( reg->frameset, AST__CURRENT );
-
- if( intfirst ) {
- cfrm = (AstFrame *) astCmpFrame( frm_this, frm_reg, "", status );
- } else {
- cfrm = (AstFrame *) astCmpFrame( frm_reg, frm_this, "", status );
- }
-
-/* Get the base -> current Mappings from the two Region FrameSets, and
- combine them into a single parallel CmpMap that connects bfrm and cfrm. */
- map_this = astGetMapping( ((AstRegion *) this)->frameset, AST__BASE,
- AST__CURRENT );
- map_reg = astGetMapping( reg->frameset, AST__BASE, AST__CURRENT );
-
- if( intfirst ) {
- bcmap = (AstMapping *) astCmpMap( map_this, map_reg, 0, "",
- status );
- } else {
- bcmap = (AstMapping *) astCmpMap( map_reg, map_this, 0, "",
- status );
- }
-
-/* Map the new Region into the new current Frame. */
- result = astMapRegion( new, bcmap, cfrm );
-
-/* The filling factor in the returned is the product of the filling
- factors for the two supplied Regions. */
- if( astTestFillFactor( reg ) || astTestFillFactor( this ) ) {
- astSetFillFactor( result, astGetFillFactor( reg )*
- astGetFillFactor( this ) );
- }
-
-/* If the MeshSize value is set in either supplied Region, set a value
- for the returned Region which scales the default value by the
- product of the scaling factors for the two supplied Regions. First see
- if either MeshSize value is set. */
- msz_this_set = astTestMeshSize( this );
- msz_reg_set = astTestMeshSize( reg );
- if( msz_this_set || msz_reg_set ) {
-
-/* If so, get the two MeshSize values (one of which may be a default
- value), and then clear them so that the default value will be returned
- in future. */
- msz_this = astGetMeshSize( this );
- msz_reg = astGetMeshSize( reg );
- astClearMeshSize( this );
- astClearMeshSize( reg );
-
-/* Get the ratio of the used MeshSize to the default MeshSize for both
- Regions. */
- fac_this = (double)msz_this/(double)astGetMeshSize( this );
- fac_reg = (double)msz_reg/(double)astGetMeshSize( reg );
-
-/* The MeshSize of the returned Returned is the default value scaled by
- the product of the two ratios found above. */
- astSetMeshSize( result, fac_this*fac_reg*astGetMeshSize( result ) );
-
-/* Re-instate the original MeshSize values for the supplied Regions (if
- set) */
- if( msz_this_set ) astSetMeshSize( this, msz_this );
- if( msz_reg_set ) astSetMeshSize( reg, msz_reg );
- }
-
-/* Free remaining resources */
- frm_this = astAnnul( frm_this );
- frm_reg = astAnnul( frm_reg );
- map_this = astAnnul( map_this );
- map_reg = astAnnul( map_reg );
- bcmap = astAnnul( bcmap );
- new = astAnnul( new );
- cfrm = astAnnul( cfrm );
- }
- bfrm = astAnnul( bfrm );
-
- }
-
-/* If an error has occurred, annul the returned pointer. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static int *OneToOne( AstMapping *map, int *status ){
-/*
-* Name:
-* OneToOne
-
-* Purpose:
-* Does each output of the supplied Mapping depend on only one input?
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "interval.h"
-* int OneToOne( AstMapping *map, int *status )
-
-* Class Membership:
-* Interval method
-
-* Description:
-* This function returns a flag indicating if the Mapping is 1-to-1.
-* That is, if each output depends only on one input.
-
-* Parameters:
-* map
-* Pointer to the Mapping.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If the Mapping is 1-to-1, a pointer to an array of ints is returned
-* (NULL is returned otherwise). There is one int for each output of
-* the supplied Mapping. The value of each int is the index of the
-* corresponding input which feeds the output. The array should be
-* freed using astFree when no longer needed.
-
-*/
-
-/* Local Variables: */
- int *result;
- const char *class;
- int nout;
- int i;
- int *tt;
- AstMapping *tmap;
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get the number of outputs for the Mapping. */
- nout = astGetNout( map );
-
-/* The Mapping cannot be 1-to-1 if the number of inputs is different.*/
- if( astGetNin( map ) == nout ) {
-
-/* Allocate an output array on the assumption that the Mapping is 1-to-1. */
- result = astMalloc( sizeof( int )*(size_t) nout );
- if( result ) {
-
-/* Check known specal cases for speed. */
- class = astGetClass( map );
- if( !strcmp( class, "WinMap" ) ||
- !strcmp( class, "ZoomMap" ) ||
- !strcmp( class, "UnitMap" ) ||
- !strcmp( class, "ShiftMap" ) ){
-
-/* Each output is fed by the corresponding input for these classes of
- Mapping. */
- for( i = 0; i < nout; i++ ) result[ i ] = i;
-
-/* Now do the general case. */
- } else {
-
-/* Loop round each input axis. */
- for( i = 0; i < nout; i++ ) {
-
-/* Use astMapSplit to see if this input corresponds to a single output. */
- tt = astMapSplit( map, 1, &i, &tmap );
-
-/* If not, annul the returned array and break. */
- if( !tmap ) {
- result = astFree( result );
- break;
-
-/* If so, store the index of the corresponding input in the returned
- array and free resources. */
- } else {
- result[ tt[ 0 ] ] = i;
- tt = astFree( tt );
- if( astGetNout( tmap ) != 1 ) result = astFree( result );
- tmap = astAnnul( tmap );
- if( !result ) break;
- }
- }
- }
- }
- }
-
-/* Return the result */
- return result;
-}
-
-static int Overlap( AstRegion *this, AstRegion *that, int *status ){
-/*
-* Name:
-* Overlap
-
-* Purpose:
-* Test if two regions overlap each other.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "interval.h"
-* int Overlap( AstRegion *this, AstRegion *that, int *status )
-
-* Class Membership:
-* Interval member function (over-rides the astOverlap method inherited
-* from the Region class).
-
-* Description:
-* This function returns an integer value indicating if the two
-* supplied Regions overlap. The two Regions are converted to a commnon
-* coordinate system before performing the check. If this conversion is
-* not possible (for instance because the two Regions represent areas in
-* different domains), then the check cannot be performed and a zero value
-* is returned to indicate this.
-
-* Parameters:
-* this
-* Pointer to the first Region.
-* that
-* Pointer to the second Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* astOverlap()
-* A value indicating if there is any overlap between the two Regions.
-* Possible values are:
-*
-* 0 - The check could not be performed because the second Region
-* could not be mapped into the coordinate system of the first
-* Region.
-*
-* 1 - There is no overlap between the two Regions.
-*
-* 2 - The first Region is completely inside the second Region.
-*
-* 3 - The second Region is completely inside the first Region.
-*
-* 4 - There is partial overlap between the two Regions.
-*
-* 5 - The Regions are identical.
-*
-* 6 - The second Region is the negation of the first Region.
-
-* Notes:
-* - The returned values 5 and 6 do not check the value of the Closed
-* attribute in the two Regions.
-* - A value of zero will be returned if this function is invoked with the
-* AST error status set, or if it should fail for any reason.
-
-*/
-
-/* Local Variables: */
- AstFrame *frm;
- AstFrameSet *fs;
- AstMapping *map;
- AstMapping *map1;
- AstMapping *map2;
- AstMapping *map3;
- AstMapping *smap;
- AstMapping *tmap;
- AstPointSet *pset_that;
- AstRegion *unc_temp;
- AstRegion *unc_that;
- AstRegion *unc_this;
- double **ptr_that;
- double **ptr_thato;
- double **ptr_this;
- double *lbndu_that;
- double *lbndu_this;
- double *ubndu_that;
- double *ubndu_this;
- double err;
- double err_that;
- double err_this;
- double lb_that;
- double lb_this;
- double tmp;
- double ub_that;
- double ub_this;
- int *outperm;
- int ic;
- int inc_that;
- int inc_this;
- int lb_equal;
- int nc;
- int neg_that;
- int neg_this;
- int ov;
- int result;
- int ub_equal;
-
- static int newResult[ 5 ][ 5 ] = { { 1, 1, 1, 1, 1},
- { 1, 2, 4, 4, 2},
- { 1, 4, 3, 4, 3},
- { 1, 4, 4, 4, 4},
- { 1, 2, 3, 4, 5} };
-
-/* Initialise */
- result = 0;
-
-/* Check the inherited status. */
- if ( !astOK ) return result;
-
-/* If both Regions are Intervals, we provide a specialised implementation.
- The implementation in the parent Region class assumes that at least one of
- the two Regions can be represented using a finite mesh of points on the
- boundary which is not the case with Intervals. The implementation in this
- class sees if the Mapping between the base Frames of the Intervals allows
- the axis limits to be transferred from one Frame ot the other. */
- if( astIsAInterval( this ) && astIsAInterval( that ) ) {
-
-/* Get a FrameSet which connects the Frame represented by the second Interval
- to the Frame represented by the first Interval. Check that the conection is
- defined. */
- fs = astConvert( that, this, "" );
- if( fs ) {
-
-/* Get a pointer to the Mapping from base to current Frame in the second
- Interval */
- map1 = astGetMapping( that->frameset, AST__BASE, AST__CURRENT );
-
-/* Get the Mapping from the current Frame of the second Interval to the
- current Frame of the first Interval. */
- map2 = astGetMapping( fs, AST__BASE, AST__CURRENT );
-
-/* Get a pointer to the Mapping from current to base Frame in the first
- Interval. */
- map3 = astGetMapping( this->frameset, AST__CURRENT, AST__BASE );
-
-/* Combine these Mappings to get the Mapping from the base Frame of the
- second Interval to the base Frame of the first Interval. */
- tmap = (AstMapping *) astCmpMap( map1, map2, 1, "", status );
- map = (AstMapping *) astCmpMap( tmap, map3, 1, "", status );
-
-/* Simplify this Mapping. */
- smap = astSimplify( map );
-
-/* We can only proceed if each output of the simplified Mapping depends
- on only one input. Test this. */
- outperm = OneToOne( smap, status );
- if( outperm ){
-
-/* Get the uncertainty Regions for both Intervals, expressed in the base
- Frames of the Intervals. */
- unc_this = astGetUncFrm( this, AST__BASE );
- unc_temp = astGetUncFrm( that, AST__BASE );
-
-/* Map the uncertainty Region for the second Interval from the base Frame
- of the second Interval into the base Frame of the first Interval. */
- frm = astGetFrame( this->frameset, AST__BASE );
- unc_that = astMapRegion( unc_temp, smap, frm );
-
-/* Get the bounding boxes of the two uncertainty Regions in the base
- Frame of the first Interval. */
- nc = astGetNaxes( frm );
- lbndu_this = astMalloc( sizeof( double )*(size_t)nc );
- ubndu_this = astMalloc( sizeof( double )*(size_t)nc );
- astGetRegionBounds( unc_this, lbndu_this, ubndu_this );
-
- lbndu_that = astMalloc( sizeof( double )*(size_t)nc );
- ubndu_that = astMalloc( sizeof( double )*(size_t)nc );
- astGetRegionBounds( unc_that, lbndu_that, ubndu_that );
-
-/* Transform the PointSet holding the limits for the second Interval into
- the Frame of the first Interval. */
- pset_that = astTransform( smap, that->points, 1, NULL );
-
-/* Get pointers for accesing the limits of the two Intervals, expressed
- in a common Frame (the base Frame of the first Interval). */
- ptr_that = astGetPoints( pset_that );
- ptr_thato = astGetPoints( that->points );
- ptr_this = astGetPoints( this->points );
- if( astOK ) {
-
-/* Check the limits on each base Frame axis in turn. */
- for( ic = 0; ic < nc; ic++ ) {
-
-/* Get the widths of the two uncertainty boxes on this axis. */
- err_this = ubndu_this[ ic ] - lbndu_this[ ic ];
- err_that = ubndu_that[ ic ] - lbndu_that[ ic ];
-
-/* Add this together in quadrature to get the tolerance for two values on
- the current axis to be considered equal. */
- err = sqrt( err_that*err_that + err_this*err_this );
-
-/* Get the limits on this axis from both Intervals. */
- lb_this = ptr_this[ ic ][ 0 ];
- ub_this = ptr_this[ ic ][ 1 ];
- lb_that = ptr_that[ ic ][ 0 ];
- ub_that = ptr_that[ ic ][ 1 ];
-
-/* The limits for "that" have been mapped, which may have resulted in
- them being swapped. We need to unswap them in this case to prevent the
- swapping being used as an indication of a desire to use an excluded
- interval rather than an included interval. */
- if( lb_that != AST__BAD && ub_that != AST__BAD ) {
- if( ptr_thato[ ic ][ 0 ] < ptr_thato[ ic ][ 1 ] ) {
- if( lb_that > ub_that ) {
- tmp = lb_that;
- lb_that = ub_that;
- ub_that = tmp;
- }
- } else {
- if( lb_that < ub_that ) {
- tmp = lb_that;
- lb_that = ub_that;
- ub_that = tmp;
- }
- }
- }
-
-/* If the regions are not closed, reduce the limits by the smallest
- amount possible. */
- if( !astGetClosed( that ) ) {
- if( lb_that != AST__BAD && lb_that < DBL_MAX )
- lb_that += DBL_EPSILON*fabs(lb_that);
- if( ub_that != AST__BAD && ub_that > -DBL_MAX )
- ub_that -= DBL_EPSILON*fabs(ub_that);
- }
- if( !astGetClosed( this ) ) {
- if( lb_this != AST__BAD && lb_this < DBL_MAX )
- lb_this += DBL_EPSILON*fabs(lb_this);
- if( ub_this != AST__BAD && ub_this > -DBL_MAX )
- ub_this -= DBL_EPSILON*fabs(ub_this);
- }
-
-/* Replace any missing limits with suitable extreme values */
- if( lb_this == AST__BAD ) lb_this = -DBL_MAX;
- if( ub_this == AST__BAD ) ub_this = DBL_MAX;
- if( lb_that == AST__BAD ) lb_that = -DBL_MAX;
- if( ub_that == AST__BAD ) ub_that = DBL_MAX;
-
-/* If the bounds are the wrong way round (indicating an excluded rather
- than an included axis range), swap them. Also set a flag indicating if
- the limits define an included or excluded range. */
- inc_this = ( lb_this <= ub_this );
- if( !inc_this ) {
- tmp = lb_this;
- lb_this = ub_this;
- ub_this = tmp;
- }
-
- inc_that = ( lb_that <= ub_that );
- if( !inc_that ) {
- tmp = lb_that;
- lb_that = ub_that;
- ub_that = tmp;
- }
-
-
-/* Are the lower limits from the two Intervals effectively equal? Take care
- about DBL_MAX values causing overflow. */
- lb_equal = EQUAL( lb_this, lb_that );
-
- if( !lb_equal && fabs(lb_this) != DBL_MAX &&
- fabs(lb_that) != DBL_MAX ) {
- lb_equal = ( fabs( lb_this - lb_that) <= err );
- }
-
-/* Are the upper limits from the two Intervals effectively equal? */
- ub_equal = EQUAL( ub_this, ub_that );
- if( !ub_equal && fabs(ub_this) != DBL_MAX &&
- fabs(ub_that) != DBL_MAX ) {
- ub_equal = ( fabs( ub_this - ub_that) <= err );
- }
-
-
-
-/* If both the limits on this axis are effectively equal for the two Intervals,
- set "ov" to 5 if both Interval ranges are inclusive or both are exclusive,
- and set "ov" to 6 if one Interval range is exclusive and the other is
- inclusive. */
- if( lb_equal && ub_equal ) {
- ov = ( inc_this == inc_that ) ? 5 : 6;
-
-/* See if the limits on this axis indicate overlap for the two Intervals. "ov"
- is set to 1 if there is no overlap, 2 if the first Interval range is
- completely inside the second Interval range, 3 if the second Interval
- range is completely inside the first Interval range, and 4 if there is
- partial overlap between the Interval ranges. */
- } else if( inc_this ) {
- if( inc_that ) {
- if( lb_that <= lb_this && ub_that >= ub_this ) {
- ov = 2;
- } else if( lb_that >= lb_this && ub_that <= ub_this ) {
- ov = 3;
- } else if( ub_that >= lb_this && lb_that <= ub_this ) {
- ov = 4;
- } else {
- ov = 1;
- }
-
- } else {
-
- if( lb_that <= lb_this && ub_that >= ub_this ) {
- ov = 1;
- } else if( lb_that >= ub_this || ub_that <= lb_this ) {
- ov = 2;
- } else if( lb_this == -DBL_MAX && ub_this == DBL_MAX ) {
- ov = 3;
- } else {
- ov = 4;
- }
- }
-
- } else {
-
- if( inc_that ) {
- if( lb_this <= lb_that && ub_this >= ub_that ) {
- ov = 1;
- } else if( lb_this >= ub_that || ub_this <= lb_that ) {
- ov = 3;
- } else if( lb_that == -DBL_MAX && ub_that == DBL_MAX ) {
- ov = 2;
- } else {
- ov = 4;
- }
-
- } else {
- ov = 4;
- }
- }
-
-/* The returned value is initialised on the basis of the first axis
- overlap. */
- if( ic == 0 ) {
- result = ov;
-
-/* For subsequent axes, combine the old result value with the new ov value
- to get the new result value. */
- } else {
- result = newResult[ result - 1 ][ ov - 1 ];
- }
-
-/* If we now know there is no overlap, there is no point in checking any
- remaining axes. */
- if( result == 1 ) break;
-
- }
-
-/* The above logic assumed that neither of the Intervals has been negated.
- Decide on the value to return, taking into account whether either of
- the Intervals has been negated. */
- neg_this = astGetNegated( this );
- neg_that = astGetNegated( that );
-
- if( result == 1 ) {
- if( neg_this ) {
- result = neg_that ? 4 : 3;
- } else if( neg_that ){
- result = 2;
- }
-
- } else if( result == 2) {
- if( neg_this ) {
- result = neg_that ? 3 : 4;
- } else if( neg_that ){
- result = 1;
- }
-
- } else if( result == 3) {
- if( neg_this ) {
- result = neg_that ? 2 : 1;
- } else if( neg_that ){
- result = 4;
- }
-
- } else if( result == 4) {
- result = 4;
-
- } else if( result == 5) {
- if( neg_this ) {
- result = neg_that ? 5 : 6;
- } else if( neg_that ){
- result = 6;
- }
- }
- }
-
-/* Free resources. */
- pset_that = astAnnul( pset_that );
- unc_this = astAnnul( unc_this );
- unc_that = astAnnul( unc_that );
- unc_temp = astAnnul( unc_temp );
- frm = astAnnul( frm );
- lbndu_this = astFree( lbndu_this );
- ubndu_this = astFree( ubndu_this );
- lbndu_that = astFree( lbndu_that );
- ubndu_that = astFree( ubndu_that );
- outperm = astFree( outperm );
- }
-
- smap = astAnnul( smap );
- map = astAnnul( map );
- tmap = astAnnul( tmap );
- map3 = astAnnul( map3 );
- map2 = astAnnul( map2 );
- map1 = astAnnul( map1 );
- fs = astAnnul( fs );
- }
- }
-
-/* If overlap could not be determined using the above implementation, try
- using the implementation inherited from the parent Region class. */
- if( !result ) result = (*parent_overlap)( this, that, status );
-
-/* If not OK, return zero. */
- if( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static void RegBaseBox( AstRegion *this_region, double *lbnd, double *ubnd, int *status ){
-/*
-* Name:
-* RegBaseBox
-
-* Purpose:
-* Returns the bounding box of an un-negated Region in the base Frame of
-* the encapsulated FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "interval.h"
-* void RegBaseBox( AstRegion *this, double *lbnd, double *ubnd, int *status )
-
-* Class Membership:
-* Interval member function (over-rides the astRegBaseBox protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns the upper and lower axis bounds of a Region in
-* the base Frame of the encapsulated FrameSet, assuming the Region
-* has not been negated. That is, the value of the Negated attribute
-* is ignored.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* lbnd
-* Pointer to an array in which to return the lower axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-* ubnd
-* Pointer to an array in which to return the upper axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstInterval *this;
- int nax;
- int i;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the Interval structure */
- this = (AstInterval *) this_region;
-
-/* Ensure the cached bounds are up to date. */
- Cache( this, status );
-
-/* Copy the cached bounds into the supplied arrays. */
- nax = astGetNin( this_region->frameset );
- for( i = 0; i < nax; i++ ) {
- lbnd[ i ] = this->lbnd[ i ];
- ubnd[ i ] = this->ubnd[ i ];
- }
-}
-
-static AstPointSet *RegBaseMesh( AstRegion *this_region, int *status ){
-/*
-* Name:
-* RegBaseMesh
-
-* Purpose:
-* Return a PointSet containing a mesh of points on the boundary of a
-* Region in its base Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "interval.h"
-* AstPointSet *astRegBaseMesh( AstRegion *this, int *status )
-
-* Class Membership:
-* Interval member function (over-rides the astRegBaseMesh protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a PointSet containing a mesh of points on the
-* boundary of the Region. The points refer to the base Frame of
-* the encapsulated FrameSet.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the PointSet. The axis values in this PointSet will have
-* associated accuracies derived from the accuracies which were
-* supplied when the Region was created.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-
-*/
-
-/* Local Variables: */
- AstBox *box; /* The equivalent Box */
- AstPointSet *result; /* Returned pointer */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If the Interval is effectively a Box, invoke the astRegBaseMesh
- function on the equivalent Box. A pointer to the equivalent Box will
- be stored in the Interval structure. */
- box = Cache( (AstInterval *) this_region, status );
- if( box ) {
- result = astRegBaseMesh( box );
-
-/* If the Interval is not equivalent to a Box, report an error. */
- } else {
- astError( AST__INTER, "astRegBaseMesh(%s): The %s given is "
- "unbounded and therefore no boundary mesh can be "
- "produced (internal AST programming error).", status,
- astGetClass( this_region ), astGetClass( this_region ) );
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-static AstRegion *RegBasePick( AstRegion *this_region, int naxes,
- const int *axes, int *status ){
-/*
-* Name:
-* RegBasePick
-
-* Purpose:
-* Return a Region formed by picking selected base Frame axes from the
-* supplied Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "interval.h"
-* AstRegion *RegBasePick( AstRegion *this, int naxes, const int *axes,
-* int *status )
-
-* Class Membership:
-* Interval member function (over-rides the astRegBasePick protected
-* method inherited from the Region class).
-
-* Description:
-* This function attempts to return a Region that is spanned by selected
-* axes from the base Frame of the encapsulated FrameSet of the supplied
-* Region. This may or may not be possible, depending on the class of
-* Region. If it is not possible a NULL pointer is returned.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* naxes
-* The number of base Frame axes to select.
-* axes
-* An array holding the zero-based indices of the base Frame axes
-* that are to be selected.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the Region, or NULL if no region can be formed.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFrame *bfrm; /* The base Frame in the supplied Region */
- AstFrame *frm; /* The base Frame in the returned Region */
- AstPointSet *pset; /* Holds axis values defining the supplied Region */
- AstRegion *bunc; /* The uncertainty in the supplied Region */
- AstRegion *result; /* Returned Region */
- AstRegion *unc; /* The uncertainty in the returned Region */
- double **ptr; /* Holds axis values defining the supplied Region */
- double *lbnd; /* Base Frm lower bound axis values */
- double *ubnd; /* Base Frm upper bound axis values */
- int i; /* Index of axis within returned Region */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the base Frame of the encapsulated FrameSet. */
- bfrm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Create a Frame by picking the selected axes from the base Frame of the
- encapsulated FrameSet. */
- frm = astPickAxes( bfrm, naxes, axes, NULL );
-
-/* Get the uncertainty Region (if any) within the base Frame of the supplied
- Region, and select the required axes from it. If the resulting Object
- is not a Region, annul it so that the returned Region will have no
- uncertainty. */
- if( astTestUnc( this_region ) ) {
- bunc = astGetUncFrm( this_region, AST__BASE );
- unc = astPickAxes( bunc, naxes, axes, NULL );
- bunc = astAnnul( bunc );
-
- if( ! astIsARegion( unc ) ) unc = astAnnul( unc );
-
- } else {
- unc = NULL;
- }
-
-/* Get pointers to the coordinate data in the parent Region structure. */
- pset = this_region->points;
- ptr = astGetPoints( pset );
-
-/* Get space to hold the limits of the Interval in the new Frame. */
- lbnd = astMalloc( sizeof( *lbnd )*naxes );
- ubnd = astMalloc( sizeof( *ubnd )*naxes );
-
-/* Check pointers can be used safely. */
- if( astOK ) {
-
-/* Copy the limits for the selected axes into the arrays allocated above. */
- for( i = 0; i < naxes; i++ ) {
- lbnd[ i ] = ptr[ axes[ i ] ][ 0 ];
- ubnd[ i ] = ptr[ axes[ i ] ][ 1 ];
- }
-
-/* Create the new Interval. */
- result = (AstRegion *) astInterval( frm, lbnd, ubnd, unc, "", status );
-
- }
-
-/* Free resources */
- frm = astAnnul( frm );
- bfrm = astAnnul( bfrm );
- if( unc ) unc = astAnnul( unc );
- lbnd = astFree( lbnd );
- ubnd = astFree( ubnd );
-
-/* Return a NULL pointer if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static double *RegCentre( AstRegion *this_region, double *cen, double **ptr,
- int index, int ifrm, int *status ){
-/*
-* Name:
-* RegCentre
-
-* Purpose:
-* Re-centre a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "interval.h"
-* double *RegCentre( AstRegion *this, double *cen, double **ptr,
-* int index, int ifrm, int *status )
-
-* Class Membership:
-* Interval member function (over-rides the astRegCentre protected
-* method inherited from the Region class).
-
-* Description:
-* This function shifts the centre of the supplied Region to a
-* specified position, or returns the current centre of the Region.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* cen
-* Pointer to an array of axis values, giving the new centre.
-* Supply a NULL value for this in order to use "ptr" and "index" to
-* specify the new centre.
-* ptr
-* Pointer to an array of points, one for each axis in the Region.
-* Each pointer locates an array of axis values. This is the format
-* returned by the PointSet method astGetPoints. Only used if "cen"
-* is NULL.
-* index
-* The index of the point within the arrays identified by "ptr" at
-* which is stored the coords for the new centre position. Only used
-* if "cen" is NULL.
-* ifrm
-* Should be AST__BASE or AST__CURRENT. Indicates whether the centre
-* position is supplied and returned in the base or current Frame of
-* the FrameSet encapsulated within "this".
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If both "cen" and "ptr" are NULL then a pointer to a newly
-* allocated dynamic array is returned which contains the centre
-* coords of the Region. This array should be freed using astFree when
-* no longer needed. If either of "ptr" or "cen" is not NULL, then a
-* NULL pointer is returned.
-
-* Notes:
-* - Some Region sub-classes do not have a centre. Such classes will report
-* an AST__INTER error code if this method is called with either "ptr" or
-* "cen" not NULL. If "ptr" and "cen" are both NULL, then no error is
-* reported if this method is invoked on a Region of an unsuitable class,
-* but NULL is always returned.
-
-*/
-
-/* Local Variables: */
- AstInterval *this; /* Pointer to Interval structure */
- AstBox *box; /* Pointer to equivalent Box structure */
- double **bptr; /* Data pointers for Region PointSet */
- double *lbnd; /* Pointer to new lower bound values */
- double *ubnd; /* Pointer to new upper bound values */
- double *result; /* Returned pointer */
- int i; /* Coordinate index */
- int nax; /* Number of axes */
-
-/* Initialise */
- result = NULL;
-
-/* Check the local error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the Interval structure. */
- this = (AstInterval *) this_region;
-
-/* The Interval can only be re-centred if it is effectively a Box. */
- box = Cache( (AstInterval *) this_region, status );
- if( box ) {
-
-/* If the centre is being changed... */
- if( cen || ptr ) {
-
-/* Set the new centre in the equivalent box. */
- astRegCentre( box, cen, ptr, index, ifrm );
-
-/* Get the new base Frame bounds from the Box. */
- nax = astGetNin( this_region->frameset );
- lbnd = astMalloc( sizeof( double )*nax );
- ubnd = astMalloc( sizeof( double )*nax );
- astRegBaseBox( box, lbnd, ubnd );
-
-/* Store these bounds in the Interval structure. */
- bptr = astGetPoints( this_region->points );
- if( astOK ) {
- for( i = 0; i < nax; i++ ) {
- bptr[ i ][ 0 ] = lbnd[ i ];
- bptr[ i ][ 1 ] = ubnd[ i ];
- }
- }
-
-/* Free resources. */
- lbnd = astFree( lbnd );
- ubnd = astFree( ubnd );
-
-/* If the centre is not being changed, just invoke the method on the
- equivalent box. */
- } else {
- result = astRegCentre( box, NULL, NULL, 0, AST__BASE );
- }
-
-/* If the Interval is not equivalent to a Box, report an error */
- } else {
- astError( AST__REGCN, "astRegCentre(%s): The supplied %s is not a "
- "closed Interval and so cannot be re-centred.", status,
- astGetClass( this ), astGetClass( this ) );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int RegPins( AstRegion *this_region, AstPointSet *pset, AstRegion *unc,
- int **mask, int *status ){
-/*
-* Name:
-* RegPins
-
-* Purpose:
-* Check if a set of points fall on the boundary of a given Interval.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "interval.h"
-* int RegPins( AstRegion *this, AstPointSet *pset, AstRegion *unc,
-* int **mask, int *status )
-
-* Class Membership:
-* Interval member function (over-rides the astRegPins protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a flag indicating if the supplied set of
-* points all fall on the boundary of the given Interval.
-*
-* Some tolerance is allowed, as specified by the uncertainty Region
-* stored in the supplied Interval "this", and the supplied uncertainty
-* Region "unc" which describes the uncertainty of the supplied points.
-
-* Parameters:
-* this
-* Pointer to the Interval.
-* pset
-* Pointer to the PointSet. The points are assumed to refer to the
-* base Frame of the FrameSet encapsulated by "this".
-* unc
-* Pointer to a Region representing the uncertainties in the points
-* given by "pset". The Region is assumed to represent the base Frame
-* of the FrameSet encapsulated by "this". Zero uncertainity is assumed
-* if NULL is supplied.
-* mask
-* Pointer to location at which to return a pointer to a newly
-* allocated dynamic array of ints. The number of elements in this
-* array is equal to the value of the Npoint attribute of "pset".
-* Each element in the returned array is set to 1 if the
-* corresponding position in "pset" is on the boundary of the Region
-* and is set to zero otherwise. A NULL value may be supplied
-* in which case no array is created. If created, the array should
-* be freed using astFree when no longer needed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the points all fall on the boundary of the given
-* Region, to within the tolerance specified. Zero otherwise.
-
-*/
-
-/* Local variables: */
- AstBox *box; /* The equivalent Box */
- AstInterval *large_int; /* Interval slightly larger than "this" */
- AstInterval *small_int; /* Interval slightly smaller than "this" */
- AstInterval *this; /* Pointer to the Interval structure. */
- AstFrame *frm; /* Base Frame in supplied Interval */
- AstPointSet *ps1; /* Points masked by larger Interval */
- AstPointSet *ps2; /* Points masked by larger and smaller Intervals */
- AstRegion *tunc; /* Uncertainity Region from "this" */
- double **ptr; /* Pointer to axis values in "ps2" */
- double *large_lbnd; /* Lower bounds of larger interval */
- double *large_ubnd; /* Upper bounds of larger interval */
- double *lbnd_tunc; /* Lower bounds of "this" uncertainty Region */
- double *lbnd_unc; /* Lower bounds of supplied uncertainty Region */
- double *p; /* Pointer to next axis value */
- double *small_lbnd; /* Lower bounds of smaller interval */
- double *small_ubnd; /* Upper bounds of smaller interval */
- double *ubnd_tunc; /* Upper bounds of "this" uncertainty Region */
- double *ubnd_unc; /* Upper bounds of supplied uncertainty Region */
- double *wid; /* Widths of "this" border */
- double lb; /* Lower bound */
- double ub; /* Upper bound */
- double t; /* Swap space */
- double w; /* Width */
- int i; /* Axis index */
- int j; /* Point index */
- int nc; /* No. of axes in Interval base frame */
- int np; /* No. of supplied points */
- int result; /* Returned flag */
-
-/* Initialise */
- result = 0;
- if( mask ) *mask = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return result;
-
-/* Get a pointer to the Interval structure. */
- this = (AstInterval *) this_region;
-
-/* If the Interval is effectively a Box, invoke the astRegPins function on
- the equivalent Box. A pointer to the equivalent Box will be stored in the
- Interval structure. */
- box = Cache( this, status );
- if( box ) return astRegPins( box, pset, unc, mask );
-
-/* Arrive here only if the Interval is not equivalent to a box (i.e. has
- at least one infinite boundary). Get the number of base Frame axes in the
- Interval, and check the supplied PointSet has the same number of axis
- values per point. */
- frm = astGetFrame( this_region->frameset, AST__BASE );
- nc = astGetNaxes( frm );
- if( astGetNcoord( pset ) != nc && astOK ) {
- astError( AST__INTER, "astRegPins(%s): Illegal number of axis "
- "values per point (%d) in the supplied PointSet - should be "
- "%d (internal AST programming error).", status, astGetClass( this ),
- astGetNcoord( pset ), nc );
- }
-
-/* Get the number of axes in the uncertainty Region and check it is the
- same as above. */
- if( unc && astGetNaxes( unc ) != nc && astOK ) {
- astError( AST__INTER, "astRegPins(%s): Illegal number of axes (%d) "
- "in the supplied uncertainty Region - should be "
- "%d (internal AST programming error).", status, astGetClass( this ),
- astGetNaxes( unc ), nc );
- }
-
-/* We now find the maximum distance on each axis that a point can be from
- the boundary of the Interval for it still to be considered to be on the
- boundary. First get the Region which defines the uncertainty within the
- Interval being checked (in its base Frame), and get its bounding box. */
- tunc = astGetUncFrm( this, AST__BASE );
- lbnd_tunc = astMalloc( sizeof( double )*(size_t) nc );
- ubnd_tunc = astMalloc( sizeof( double )*(size_t) nc );
- astGetRegionBounds( tunc, lbnd_tunc, ubnd_tunc );
-
-/* Also get the Region which defines the uncertainty of the supplied points
- and get its bounding box. */
- if( unc ) {
- lbnd_unc = astMalloc( sizeof( double )*(size_t) nc );
- ubnd_unc = astMalloc( sizeof( double )*(size_t) nc );
- astGetRegionBounds( unc, lbnd_unc, ubnd_unc );
- } else {
- lbnd_unc = NULL;
- ubnd_unc = NULL;
- }
-
-/* The required border width for each axis is half of the total width of
- the two bounding boxes. Use a zero sized box "unc" if no box was supplied. */
- wid = astMalloc( sizeof( double )*(size_t) nc );
- large_lbnd = astMalloc( sizeof( double )*(size_t) nc );
- large_ubnd = astMalloc( sizeof( double )*(size_t) nc );
- small_lbnd = astMalloc( sizeof( double )*(size_t) nc );
- small_ubnd = astMalloc( sizeof( double )*(size_t) nc );
- if( small_ubnd ) {
- if( unc ) {
- for( i = 0; i < nc; i++ ) {
- wid[ i ] = 0.5*( fabs( astAxDistance( frm, i + 1, lbnd_tunc[ i ],
- ubnd_tunc[ i ] ) )
- + fabs( astAxDistance( frm, i + 1, lbnd_unc[ i ],
- ubnd_unc[ i ] ) ) );
- }
- } else {
- for( i = 0; i < nc; i++ ) {
- wid[ i ] = 0.5*fabs( astAxDistance( frm, i + 1, lbnd_tunc[ i ],
- ubnd_tunc[ i ] ) );
- }
- }
-
-/* Create two new Intervals, one of which is larger than "this" by the widths
- found above, and the other of which is smaller than "this" by the widths
- found above. */
- for( i = 0; i < nc; i++ ) {
- lb = this->lbnd[ i ];
- ub = this->ubnd[ i ];
- if( lb > ub ) {
- t = ub;
- ub = lb;
- lb = t;
- }
-
- w = fabs( wid[ i ] );
- if( lb != -DBL_MAX ){
- large_lbnd[ i ] = lb - w;
- small_lbnd[ i ] = lb + w;
- } else {
- large_lbnd[ i ] = AST__BAD;
- small_lbnd[ i ] = AST__BAD;
- }
-
- if( ub != DBL_MAX ){
- large_ubnd[ i ] = ub + w;
- small_ubnd[ i ] = ub - w;
- } else {
- large_ubnd[ i ] = AST__BAD;
- small_ubnd[ i ] = AST__BAD;
- }
-
- if( small_lbnd[ i ] > small_ubnd[ i ] ) {
- small_lbnd[ i ] = small_ubnd[ i ];
- }
- }
-
- large_int = astInterval( frm, large_lbnd, large_ubnd, NULL, "", status );
- small_int = astInterval( frm, small_lbnd, small_ubnd, NULL, "", status );
-
-/* Negate the smaller interval.*/
- astNegate( small_int );
-
-/* Points are on the boundary of "this" if they are inside both the large
- interval and the negated small interval. First transform the supplied
- PointSet using the large interval, then transform them using the negated
- smaller Interval. */
- ps1 = astTransform( large_int, pset, 1, NULL );
- ps2 = astTransform( small_int, ps1, 1, NULL );
-
-/* Get a point to the resulting axis values, and the number of axis
- values per axis. */
- ptr = astGetPoints( ps2 );
- np = astGetNpoint( ps2 );
-
-/* If a mask array is to be returned, create one. */
- if( mask ) {
- *mask = astMalloc( sizeof(int)*(size_t) np );
-
-/* Check all the resulting points, setting mask values for all of them. */
- if( astOK ) {
-
-/* Initialise the mask elements on the basis of the first axis values */
- result = 1;
- p = ptr[ 0 ];
- for( j = 0; j < np; j++ ) {
- if( *(p++) == AST__BAD ) {
- result = 0;
- (*mask)[ j ] = 0;
- } else {
- (*mask)[ j ] = 1;
- }
- }
-
-/* Now check for bad values on other axes. */
- for( i = 1; i < nc; i++ ) {
- p = ptr[ i ];
- for( j = 0; j < np; j++ ) {
- if( *(p++) == AST__BAD ) {
- result = 0;
- (*mask)[ j ] = 0;
- }
- }
- }
- }
-
-/* If no output mask is to be made, we can break out of the check as soon
- as the first bad value is found. */
- } else if( astOK ) {
- result = 1;
- for( i = 0; i < nc && result; i++ ) {
- p = ptr[ i ];
- for( j = 0; j < np; j++ ) {
- if( *(p++) == AST__BAD ) {
- result = 0;
- break;
- }
- }
- }
- }
-
-/* Free resources. */
- large_int = astAnnul( large_int );
- small_int = astAnnul( small_int );
- ps1 = astAnnul( ps1 );
- ps2 = astAnnul( ps2 );
- }
-
- tunc = astAnnul( tunc );
- frm = astAnnul( frm );
- lbnd_tunc = astFree( lbnd_tunc );
- ubnd_tunc = astFree( ubnd_tunc );
- if( unc ) lbnd_unc = astFree( lbnd_unc );
- if( unc ) ubnd_unc = astFree( ubnd_unc );
- wid = astFree( wid );
- large_lbnd = astFree( large_lbnd );
- large_ubnd = astFree( large_ubnd );
- small_lbnd = astFree( small_lbnd );
- small_ubnd = astFree( small_ubnd );
-
-/* If an error has occurred, return zero. */
- if( !astOK ) {
- result = 0;
- if( mask ) *mask = astAnnul( *mask );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int RegTrace( AstRegion *this_region, int n, double *dist, double **ptr,
- int *status ){
-/*
-*+
-* Name:
-* RegTrace
-
-* Purpose:
-* Return requested positions on the boundary of a 2D Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "interval.h"
-* int astTraceRegion( AstRegion *this, int n, double *dist, double **ptr );
-
-* Class Membership:
-* Interval member function (overrides the astTraceRegion method
-* inherited from the parent Region class).
-
-* Description:
-* This function returns positions on the boundary of the supplied
-* Region, if possible. The required positions are indicated by a
-* supplied list of scalar parameter values in the range zero to one.
-* Zero corresponds to some arbitrary starting point on the boundary,
-* and one corresponds to the end (which for a closed region will be
-* the same place as the start).
-
-* Parameters:
-* this
-* Pointer to the Region.
-* n
-* The number of positions to return. If this is zero, the function
-* returns without action (but the returned function value still
-* indicates if the method is supported or not).
-* dist
-* Pointer to an array of "n" scalar parameter values in the range
-* 0 to 1.0.
-* ptr
-* A pointer to an array of pointers. The number of elements in
-* this array should equal tthe number of axes in the Frame spanned
-* by the Region. Each element of the array should be a pointer to
-* an array of "n" doubles, in which to return the "n" values for
-* the corresponding axis. The contents of the arrays are unchanged
-* if the supplied Region belongs to a class that does not
-* implement this method.
-
-* Returned Value:
-* Non-zero if the astTraceRegion method is implemented by the class
-* of Region supplied, and zero if not.
-
-*-
-*/
-
-/* Local Variables; */
- AstBox *box;
- int result;
-
-/* Initialise */
- result = 0;
-
-/* Check inherited status. */
- if( ! astOK ) return result;
-
-/* If the Interval is effectively a Box, invoke the astRegTrace function on
- the equivalent Box. A pointer to the equivalent Box will be stored in the
- Interval structure. */
- box = Cache( (AstInterval *) this_region, status );
- if( box ) result = astRegTrace( box, n, dist, ptr );
-
-/* Return the result. */
- return result;
-}
-
-
-
-static void ResetCache( AstRegion *this, int *status ){
-/*
-* Name:
-* ResetCache
-
-* Purpose:
-* Clear cached information within the supplied Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "interval.h"
-* void ResetCache( AstRegion *this, int *status )
-
-* Class Membership:
-* Region member function (overrides the astResetCache method
-* inherited from the parent Region class).
-
-* Description:
-* This function clears cached information from the supplied Region
-* structure.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-*/
- if( this ) {
- ( (AstInterval *) this )->stale = 1;
- (*parent_resetcache)( this, status );
- }
-}
-
-static void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status ) {
-/*
-* Name:
-* SetRegFS
-
-* Purpose:
-* Stores a new FrameSet in a Region
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "interval.h"
-* void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status )
-
-* Class Membership:
-* Interval method (over-rides the astSetRegFS method inherited from
-* the Region class).
-
-* Description:
-* This function creates a new FrameSet and stores it in the supplied
-* Region. The new FrameSet contains two copies of the supplied
-* Frame, connected by a UnitMap.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* frm
-* The Frame to use.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Invoke the parent method to store the FrameSet in the parent Region
- structure. */
- (* parent_setregfs)( this_region, frm, status );
-
-/* Indicate that the cached intermediate information is now stale and
- should be recreated when next needed. */
- astResetCache( this_region );
-}
-
-static void SetUnc( AstRegion *this, AstRegion *unc, int *status ){
-/*
-* Name:
-* SetUnc
-
-* Purpose:
-* Store uncertainty information in a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "interval.h"
-* void SetUnc( AstRegion *this, AstRegion *unc, int *status )
-
-* Class Membership:
-* Interval method (over-rides the astSetUnc method inherited from the
-* Region class).
-
-* Description:
-* Each Region (of any class) can have an "uncertainty" which specifies
-* the uncertainties associated with the boundary of the Region. This
-* information is supplied in the form of a second Region. The uncertainty
-* in any point on the boundary of a Region is found by shifting the
-* associated "uncertainty" Region so that it is centred at the boundary
-* point being considered. The area covered by the shifted uncertainty
-* Region then represents the uncertainty in the boundary position.
-* The uncertainty is assumed to be the same for all points.
-*
-* The uncertainty is usually specified when the Region is created, but
-* this function allows it to be changed at any time.
-
-* Parameters:
-* this
-* Pointer to the Region which is to be assigned a new uncertainty.
-* unc
-* Pointer to the new uncertainty Region. This must be either a Box,
-* a Circle or an Ellipse. A deep copy of the supplied Region will be
-* taken, so subsequent changes to the uncertainty Region using the
-* supplied pointer will have no effect on the Region "this".
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* Invoke the astSetUnc method inherited from the parent Region class. */
- (*parent_setunc)( this, unc, status );
-
-/* Indicate that the cached intermediate information is now stale and
- should be recreated when next needed. */
- astResetCache( this );
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* Simplify
-
-* Purpose:
-* Simplify the Mapping represented by a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "interval.h"
-* AstMapping *Simplify( AstMapping *this, int *status )
-
-* Class Membership:
-* Interval method (over-rides the astSimplify method inherited
-* from the Region class).
-
-* Description:
-* This function invokes the parent Region Simplify method, and then
-* performs any further region-specific simplification.
-*
-* If the Mapping from base to current Frame is not a UnitMap, this
-* will include attempting to fit a new Region to the boundary defined
-* in the current Frame.
-
-* Parameters:
-* this
-* Pointer to the original Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the simplified Region. A cloned pointer to the
-* supplied Region will be returned if no simplication could be
-* performed.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstBox *box2; /* Box used to determine 1-to-1 axis correspondance */
- AstBox *box; /* Box used to determine 1-to-1 axis correspondance */
- AstInterval *this_interval;/* Pointer to Interval structure */
- AstMapping *bfrm; /* Pointer to base Frame in supplied Interval */
- AstMapping *cfrm; /* Pointer to current Frame in supplied Interval */
- AstMapping *map; /* Base -> current Mapping after parent simplification */
- AstMapping *result; /* Result pointer to return */
- AstPointSet *pset2; /* PointSet containing current Frame test points */
- AstPointSet *pset3; /* PointSet containing base Frame test points */
- AstPointSet *psetb; /* PointSet holding base positions */
- AstPointSet *psetc; /* PointSet holding current positions */
- AstRegion *new; /* Pointer to Region simplfied by parent class */
- AstRegion *sreg; /* Pointer to simplified Box */
- AstRegion *this; /* Pointer to supplied Region structure */
- AstRegion *unc; /* Pointer to uncertainty Region */
- double **ptr2; /* Pointer axis values in "pset2" */
- double **ptr3; /* Pointer axis values in "pset3" */
- double **ptr; /* Pointer to base Frame values defining Interval */
- double **ptrb; /* Pointer to "psetb" axis values */
- double **sptr; /* Pointer to simplified Interval bounds */
- double *lbnd; /* Pointer to array of base Frame lower bounds */
- double *slbnd; /* Pointer to array of current Frame lower bounds */
- double *subnd; /* Pointer to array of current Frame upper bounds */
- double *ubnd; /* Pointer to array of base Frame upper bounds */
- double d; /* Distance between axis values */
- double lb; /* Lower bound on axis values */
- double lwid; /* Axis width below the Interval lower limit */
- double maxd; /* Maximum currenrt Frame axis offset between test points */
- double tmp; /* Temporary storage for swapping variable values */
- double ub; /* Upperbound on axis values */
- double uwid; /* Axis width above the Interval upper limit */
- int bax; /* Base Frame axis index corresponding to "ic" */
- int ic; /* Axis index */
- int jc; /* Axis index */
- int nc; /* No. of base Frame axis values per point */
- int simpler; /* Has some simplication taken place? */
- int snc; /* No. of current Frame axis values per point */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the supplied Region structure. */
- this = (AstRegion *) this_mapping;
-
-/* Get a pointer to the supplied Interval structure. */
- this_interval = (AstInterval *) this;
-
-/* If this Interval is equivalent to a Box, use the astTransform method of
- the equivalent Box. */
- box = Cache( this_interval, status );
- if( box ) {
- result = astSimplify( box );
-
-/* Otherwise, we use a new implementation appropriate for unbounded
- intervals. */
- } else {
-
-/* Invoke the parent Simplify method inherited from the Region class. This
- will simplify the encapsulated FrameSet and uncertainty Region. */
- new = (AstRegion *) (*parent_simplify)( this_mapping, status );
- if( new ) {
-
-/* Note if any simplification took place. This is assumed to be the case
- if the pointer returned by the above call is different to the supplied
- pointer. */
- simpler = ( new != this );
-
-/* If the Mapping from base to current Frame is not a UnitMap, we attempt
- to simplify the Interval by re-defining it within its current Frame. */
- map = astGetMapping( new->frameset, AST__BASE, AST__CURRENT );
- if( !astIsAUnitMap( map ) ){
-
-/* Take a copy of the Interval bounds (defined in the base Frame of the
- Intervals FrameSet) and replace any missing limits with arbitrary
- non-BAD values. This will give us a complete set of bounds defining a
- box within the base Frame of the Interval. */
- ptr = astGetPoints( new->points );
- nc = astGetNcoord( new->points );
-
- lbnd = astMalloc( sizeof( double )*(size_t) nc );
- ubnd = astMalloc( sizeof( double )*(size_t) nc );
-
- if( astOK ) {
- for( ic = 0; ic < nc; ic++ ) {
- lbnd[ ic ] = ptr[ ic ][ 0 ];
- ubnd[ ic ] = ptr[ ic ][ 1 ];
-
-/* Ensure we have a good upper bound for this axis. */
- if( ubnd[ ic ] == AST__BAD ) {
- if( lbnd[ ic ] == AST__BAD ) {
- ubnd[ ic ] = 1.0;
-
- } else if( lbnd[ ic ] > 0.0 ) {
- ubnd[ ic ] = lbnd[ ic ]*1.01;
-
- } else if( lbnd[ ic ] < 0.0 ) {
- ubnd[ ic ] = lbnd[ ic ]*0.99;
-
- } else {
- ubnd[ ic ] = 1.0;
- }
- }
-
-/* Ensure we have a good lower bound for this axis. */
- if( lbnd[ ic ] == AST__BAD ) {
- if( ubnd[ ic ] > 0.0 ) {
- lbnd[ ic ] = ubnd[ ic ]*0.99;
-
- } else if( ubnd[ ic ] < 0.0 ) {
- lbnd[ ic ] = ubnd[ ic ]*1.01;
-
- } else {
- lbnd[ ic ] = 1.0;
- }
- }
- }
- }
-
-/* Transform the box corners found above into the current frame and then back
- into the base Frame, and ensure that the box encloses both the original
- and the new bounds. PermMaps with fewer outputs than inputs can cause the
- resulting base Frame positions to differ significantly from the original. */
- psetb =astPointSet( 2, nc,"", status );
- ptrb =astGetPoints( psetb );
- if( astOK ) {
- for( ic = 0; ic < nc; ic++ ) {
- ptrb[ ic ][ 0 ] = lbnd[ ic ];
- ptrb[ ic ][ 1 ] = ubnd[ ic ];
- }
- }
- psetc = astTransform( map, psetb, 1, NULL );
- (void) astTransform( map, psetc, 0, psetb );
- if( astOK ) {
- for( ic = 0; ic < nc; ic++ ) {
- lb = ptrb[ ic ][ 0 ];
- if( lb != AST__BAD ) {
- if( lb < lbnd[ ic ] ) lbnd[ ic ] = lb;
- if( lb > ubnd[ ic ] ) ubnd[ ic ] = lb;
- }
- ub = ptrb[ ic ][ 1 ];
- if( ub != AST__BAD ) {
- if( ub < lbnd[ ic ] ) lbnd[ ic ] = ub;
- if( ub > ubnd[ ic ] ) ubnd[ ic ] = ub;
- }
- }
- }
- psetb = astAnnul( psetb );
- psetc = astAnnul( psetc );
-
-/* Limit this box to not exceed the limits imposed by the Interval.*/
- Cache( this_interval, status );
- for( ic = 0; ic < nc; ic++ ) {
- lb = this_interval->lbnd[ ic ] ;
- ub = this_interval->ubnd[ ic ] ;
- if( lb <= ub ) {
- if( lbnd[ ic ] < lb ) {
- lbnd[ ic ] = lb;
- } else if( lbnd[ ic ] > ub ) {
- lbnd[ ic ] = ub;
- }
- if( ubnd[ ic ] < lb ) {
- ubnd[ ic ] = lb;
- } else if( ubnd[ ic ] > ub ) {
- ubnd[ ic ] = ub;
- }
- } else {
- lwid = lb - lbnd[ ic ];
- uwid = ubnd[ ic ] - ub;
- if( lwid > uwid ) {
- if( lbnd[ ic ] > lb ) lbnd[ ic ] = lb;
- if( ubnd[ ic ] > lb ) ubnd[ ic ] = lb;
- } else {
- if( lbnd[ ic ] < ub ) lbnd[ ic ] = ub;
- if( ubnd[ ic ] < ub ) ubnd[ ic ] = ub;
- }
- }
-
-/* Ensure the bounds are not equal */
- if( lbnd[ ic ] == 0.0 && ubnd[ ic ] == 0.0 ) {
- ubnd[ ic ] = 1.0;
-
- } else if( EQUAL( lbnd[ ic ], ubnd[ ic ] ) ) {
- ubnd[ ic ] = MAX( ubnd[ ic ], lbnd[ ic ] )*( 1.0E6*DBL_EPSILON );
- }
- }
-
-/* Create a new Box representing the box found above. */
- bfrm = astGetFrame( new->frameset, AST__BASE );
- unc = astTestUnc( new ) ? astGetUncFrm( new, AST__BASE ) : NULL;
- box = astBox( bfrm, 1, lbnd, ubnd, unc, "", status );
- if( unc ) unc = astAnnul( unc );
-
-/* Modify this Box so that it has the same current Frame as this Interval. */
- cfrm = astGetFrame( new->frameset, AST__CURRENT );
- box2 = astMapRegion( box, map, cfrm );
-
-/* Try simplifying the Box. */
- sreg = (AstRegion *) astSimplify( box2 );
-
-/* Only proceed if the Box was simplified */
- if( sreg != (AstRegion *) box2 ) {
-
-/* If the simplified Box is a NullRegion return it. */
- if( astIsANullRegion( sreg ) ) {
- (void) astAnnul( new );
- new = astClone( sreg );
- simpler = 1;
-
-/* If the simplified Box is a Box or an Interval... */
- } else if( astIsABox( sreg ) || astIsAInterval( sreg ) ) {
-
-/* Get the bounds of the simplified Box. We assume that the base and
- current Frames in the simplified Box are the same. */
- snc = astGetNin( sreg->frameset );
- slbnd = astMalloc( sizeof( double )*(size_t)snc );
- subnd = astMalloc( sizeof( double )*(size_t)snc );
- if( astIsAInterval( sreg ) ) {
- sptr = astGetPoints( sreg->points );
- if( astOK ) {
- for( ic = 0; ic < snc; ic++ ) {
- slbnd[ ic ] = sptr[ ic ][ 0 ];
- subnd[ ic ] = sptr[ ic ][ 1 ];
- }
- }
- } else {
- astRegBaseBox( sreg, slbnd, subnd );
- }
-
-/* Now create a PointSet containing one point for each axis in the
- current (or equivalently, base ) Frame of the simplified Box, plus an
- extra point. */
- pset2 = astPointSet( snc + 1, snc, "", status );
- ptr2 = astGetPoints( pset2 );
-
-/* Put the lower bounds of the simplified Box into the first point in
- this PointSet. The remaining points are displaced from this first point
- along each axis in turn. The length of each displacement is determined
- by the length of the box on the axis. */
- if( astOK ) {
- for( ic = 0; ic < snc; ic++ ) {
- for( jc = 0; jc < snc + 1; jc++ ) {
- ptr2[ ic ][ jc ] = slbnd[ ic ];
- }
- ptr2[ ic ][ ic + 1 ] = subnd[ ic ];
- }
- }
-
-/* Transform this PointSet into the base Frame of this Interval using the
- inverse of the base->current Mapping. */
- pset3 = astTransform( map, pset2, 0, NULL );
- ptr3 = astGetPoints( pset3 );
- if( astOK ) {
-
-/* Now consider each axis of the Interval's current Frame (i.e. each base
- Frame axis in the simplified Box). */
- for( ic = 0; ic < snc; ic++ ) {
-
-/* Given that the Box simplified succesfully, we know that there is a one
- to one connection between the axes of the base and current Frame in this
- Interval, but we do not yet know which base Frame axis corresponds to
- which current Frame axis (and the number of base and current Frame axes
- need not be equal). We have two points on a line parallel to current
- Frame axis number "ic" (points zero and "ic+1" in "pset2"). Look at the
- corresponding base Frame positions (in "pset3), and see which base Frame
- axis they are parallel to. We look for the largest base Frame axis
- increment (this allows small non-zero displacements to occur on the
- other axes due to rounding errors). */
- maxd = -DBL_MAX;
- bax = -1;
- for( jc = 0; jc < nc; jc++ ) {
- d = fabs( astAxDistance( bfrm, jc + 1, ptr3[ jc ][ 0 ],
- ptr3[ jc ][ ic + 1 ] ) );
- if( d != AST__BAD && d > maxd ) {
- maxd = d;
- bax = jc;
- }
- }
-
-/* If the largest base Frame axis increment is zero, it must mean that
- the current Frame axis is not present in the base Frame. The only
- plausable cause of this is if the base->current Mapping contains a
- PermMap which introduces an extra axis, in which case the axis will
- have a fixed value (any other Mapping arrangement would have prevented
- the Box from simplifying). Therefore, set upper and lower limits for
- this axis to the same value. */
- if( maxd <= 0.0 ) {
- if( slbnd[ ic ] == AST__BAD ||
- subnd[ ic ] == AST__BAD ) {
- slbnd[ ic ] = AST__BAD;
- } else {
- slbnd[ ic ] = 0.5*( slbnd[ ic ] + subnd[ ic ] );
- }
- subnd[ ic ] = slbnd[ ic ];
-
-/* If we have found a base Frame axis which corresponds to the current
- Frame axis "ic", then look to see which limits are specified for the
- base Frame axis, and transfer missing limits to the current Frame. */
- } else {
- if( ptr[ bax ][ 0 ] == AST__BAD ) slbnd[ ic ] = AST__BAD;
- if( ptr[ bax ][ 1 ] == AST__BAD ) subnd[ ic ] = AST__BAD;
-
-/* If the original limits were equal, ensure the new limits are equal
- (the code above modified the upper limit to ensure it was different to
- the lower limit). */
- if( ptr[ bax ][ 1 ] == ptr[ bax ][ 0 ] ) {
- subnd[ ic ] = slbnd[ ic ];
-
-/* If the original interval was an inclusion (ubnd > lbnd), ensure the new
- interval is also an inclusion by swapping the limits if required. */
- } else if( ptr[ bax ][ 1 ] > ptr[ bax ][ 0 ] ) {
- if( subnd[ ic ] < slbnd[ ic ] ) {
- tmp = subnd[ ic ];
- subnd[ ic ] = slbnd[ ic ];
- slbnd[ ic ] = tmp;
- }
-
-/* If the original interval was an exclusion (ubnd < lbnd), ensure the new
- interval is also an exlusion by swapping the limits if required. */
- } else if( ptr[ bax ][ 1 ] < ptr[ bax ][ 0 ] ) {
- if( subnd[ ic ] > slbnd[ ic ] ) {
- tmp = subnd[ ic ];
- subnd[ ic ] = slbnd[ ic ];
- slbnd[ ic ] = tmp;
- }
- }
- }
- }
-
-/* Create the simplified Interval from the current Frame limits found
- above, and use it in place of the original. */
- unc = astTestUnc( new ) ? astGetUncFrm( new, AST__CURRENT ) : NULL;
- (void) astAnnul( new );
- new = (AstRegion *) astInterval( cfrm, slbnd, subnd, unc, "", status );
- if( unc ) unc = astAnnul( unc );
- simpler = 1;
- }
-
-/* Free resources */
- pset2 = astAnnul( pset2 );
- pset3 = astAnnul( pset3 );
- slbnd = astFree( slbnd );
- subnd = astFree( subnd );
- }
- }
-
-/* Free resources */
- bfrm = astAnnul( bfrm );
- cfrm = astAnnul( cfrm );
- box = astAnnul( box );
- box2 = astAnnul( box2 );
- sreg = astAnnul( sreg );
- lbnd = astFree( lbnd );
- ubnd = astFree( ubnd );
- }
-
-/* Free resources */
- map = astAnnul( map );
-
-/* If any simplification could be performed, copy Region attributes from
- the supplied Region to the returned Region, and return a pointer to it.
- If the supplied Region had no uncertainty, ensure the returned Region
- has no uncertainty. Otherwise, return a clone of the supplied pointer. */
- if( simpler ){
- astRegOverlay( new, this, 1 );
- result = (AstMapping *) new;
- } else {
- new = astAnnul( new );
- result = astClone( this );
- }
- }
- }
-
-/* If an error occurred, annul the returned pointer. */
- if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a Interval to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "interval.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* Interval member function (over-rides the astTransform protected
-* method inherited from the Region class).
-
-* Description:
-* This function takes a Interval and a set of points encapsulated in a
-* PointSet and transforms the points by setting axis values to
-* AST__BAD for all points which are outside the region. Points inside
-* the region are copied unchanged from input to output.
-
-* Parameters:
-* this
-* Pointer to the Interval.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - The forward and inverse transformations are identical for a
-* Region.
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of axes in the Frame represented by the Interval.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstBox *box; /* Pointer to equivalent Box */
- AstInterval *this; /* Pointer to Interval structure */
- AstPointSet *pset_tmp; /* Pointer to PointSet holding base Frame positions*/
- AstPointSet *result; /* Pointer to output PointSet */
- AstRegion *reg; /* Pointer to Region structure */
- AstRegion *unc; /* Uncertainty Region */
- double **ptr_lims; /* Pointer to limits array */
- double **ptr_out; /* Pointer to output coordinate data */
- double **ptr_tmp; /* Pointer to base Frame coordinate data */
- double *lbnd_unc; /* Lower bounds of uncertainty Region */
- double *ubnd_unc; /* Upper bounds of uncertainty Region */
- double lb; /* Base Frame axis lower bound */
- double p; /* Input base Frame axis value */
- double ub; /* Base Frame axis upper bound */
- double wid; /* Half width of uncertainy Region */
- int coord; /* Zero-based index for coordinates */
- int ncoord_out; /* No. of coordinates per output point */
- int ncoord_tmp; /* No. of coordinates per base Frame point */
- int neg; /* Has the Region been negated? */
- int npoint; /* No. of points */
- int pass; /* Does this point pass the axis test? */
- int point; /* Loop counter for points */
- int setbad; /* Set the output point bad? */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain pointers to the Region and to the Interval. */
- reg = (AstRegion *) this_mapping;
- this = (AstInterval *) this_mapping;
-
-/* If this Interval is equivalent to a Box, use the astTransform method of
- the equivalent Box. */
- box = Cache( this, status );
- if( box ) {
- result = astTransform( box, in, forward, out );
-
-/* Otherwise, we use a new implementation appropriate for unbounded
- intervals. */
- } else {
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Region class. This function validates
- all arguments and generates an output PointSet if necessary,
- containing a copy of the input PointSet. */
- result = (*parent_transform)( this_mapping, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- calculations needed to generate the output coordinate values. */
-
-/* First use the encapsulated FrameSet to transform the supplied positions
- from the current Frame in the encapsulated FrameSet (the Frame
- represented by the Region), to the base Frame (the Frame in which the
- Region is defined). This call also returns a pointer to the base Frame
- of the encapsulated FrameSet. Note, the returned pointer may be a
- clone of the "in" pointer, and so we must be carefull not to modify the
- contents of the returned PointSet. */
- pset_tmp = astRegTransform( reg, in, 0, NULL, NULL );
-
-/* Determine the numbers of points and coordinates per point from the base
- Frame PointSet and obtain pointers for accessing the base Frame and output
- coordinate values. */
- npoint = astGetNpoint( pset_tmp );
- ncoord_tmp = astGetNcoord( pset_tmp );
- ptr_tmp = astGetPoints( pset_tmp );
- ncoord_out = astGetNcoord( result );
- ptr_out = astGetPoints( result );
-
-/* Get a pointer to the array of axis limits */
- ptr_lims = astGetPoints( reg->points );
-
-/* See if the Region is negated. */
- neg = astGetNegated( reg );
-
-/* Indicate we have not yet got the bounding box of the uncertainty
- Region. */
- lbnd_unc = NULL;
- ubnd_unc = NULL;
- unc = NULL;
-
-/* Perform coordinate arithmetic. */
- if ( astOK ) {
-
-/* First deal with closed unnegated Intervals. */
-/* ------------------------------------------- */
- if( astGetClosed( reg ) ) {
- if( !neg ) {
-
-/* Loop round each point. */
- for ( point = 0; point < npoint; point++ ) {
-
-/* Assume this point is inside the Region. We change this flag when we find
- the first axis for which the point does not pass the axis test. */
- setbad = 0;
-
-/* Loop round each base Frame axis */
- Cache( this, status );
- for ( coord = 0; coord < ncoord_tmp; coord++ ) {
- p = ptr_tmp[ coord ][ point ];
- lb = (this->lbnd)[ coord ];
- ub = (this->ubnd)[ coord ];
-
-/* If the limits are equal separate them slightly to give some tolerance. */
- if( lb == ub ) {
-
-/* If not yet done so, get the bounding box of the uncertainty Region in the
- base Frame of the Interval */
- if( !unc ) {
- unc = astGetUncFrm( reg, AST__BASE );
- lbnd_unc = astMalloc( sizeof( double)*(size_t) ncoord_tmp );
- ubnd_unc = astMalloc( sizeof( double)*(size_t) ncoord_tmp );
- astGetRegionBounds( unc, lbnd_unc, ubnd_unc );
- }
-
-/* Set the gap between the limits to be equal to the uincertainty on this
- axis. */
- if( astOK ) {
- wid = 0.5*( ubnd_unc[ coord ] - lbnd_unc[ coord ] );
- lb -= wid;
- ub += wid;
- }
- }
-
-/* Bad input points should always be bad in the output. */
- if( p == AST__BAD ) {
- setbad = 1;
- break;
-
-/* Does the current axis value pass the limits test for this axis? */
- } else if( lb <= ub ) {
- pass = ( lb <= p && p <= ub );
- } else {
- pass = ( p <= ub || lb <= p );
- }
-
-/* If this point does not pass the test for this axis, then indicate that
- we should set the resulting output point bad and break since we now have
- a definite value for the inside/outside flag. */
- if( !pass ) {
- setbad = 1;
- break;
- }
- }
-
-/* Set the axis values bad for this output point if required. */
- if( setbad ) {
- for ( coord = 0; coord < ncoord_out; coord++ ) {
- ptr_out[ coord ][ point ] = AST__BAD;
- }
- }
- }
-
-/* Now deal with closed negated Intervals. */
-/* --------------------------------------- */
- } else {
-
-/* Loop round each point. */
- for ( point = 0; point < npoint; point++ ) {
-
-/* Assume this point is outside the negated Region (i.e. inside the
- unnegated Region). We change this flag when we find the first axis for
- which the point passes the axis test. */
- setbad = 1;
-
-/* Loop round each base Frame axis */
- Cache( this, status );
- for ( coord = 0; coord < ncoord_tmp; coord++ ) {
- p = ptr_tmp[ coord ][ point ];
- lb = (this->lbnd)[ coord ];
- ub = (this->ubnd)[ coord ];
-
-/* Bad input points should always be bad in the output. */
- if( p == AST__BAD ) {
- setbad = 1;
- break;
-
-/* Does the current axis value pass the limits test for this axis? */
- } else if( lb <= ub ) {
- pass = ( p <= lb || ub <= p );
- } else {
- pass = ( ub <= p && p <= lb );
- }
-
-/* If this point passes the test for this axis, then indicate that we should
- not set the resulting output point bad and break since we now have a
- definite value for the inside/outside flag. */
- if( pass ) {
- setbad = 0;
- break;
- }
- }
-
-/* Set the axis values bad for this output point if required. */
- if( setbad ) {
- for ( coord = 0; coord < ncoord_out; coord++ ) {
- ptr_out[ coord ][ point ] = AST__BAD;
- }
- }
- }
- }
-
-/* Now deal with open unnegated Intervals. */
-/* --------------------------------------- */
- } else {
- if( !neg ) {
-
-/* Loop round each point. */
- for ( point = 0; point < npoint; point++ ) {
-
-/* Assume this point is inside the Region. We change this flag when we find
- the first axis for which the point does not pass the axis test. */
- setbad = 0;
-
-/* Loop round each base Frame axis */
- Cache( this, status );
- for ( coord = 0; coord < ncoord_tmp; coord++ ) {
- p = ptr_tmp[ coord ][ point ];
- lb = (this->lbnd)[ coord ];
- ub = (this->ubnd)[ coord ];
-
-/* Bad input points should always be bad in the output. */
- if( p == AST__BAD ) {
- setbad = 1;
- break;
-
-/* Does the current axis value pass the limits test for this axis? */
- } else if( lb <= ub ) {
- pass = ( lb < p && p < ub );
- } else {
- pass = ( p < ub || lb < p );
- }
-
-/* If this point does not pass the test for this axis, then indicate that
- we should set the resulting output point bad and break since we now have
- a definite value for the inside/outside flag. */
- if( !pass ) {
- setbad = 1;
- break;
- }
- }
-
-/* Set the axis values bad for this output point if required. */
- if( setbad ) {
- for ( coord = 0; coord < ncoord_out; coord++ ) {
- ptr_out[ coord ][ point ] = AST__BAD;
- }
- }
- }
-
-/* Now deal with open negated Intervals. */
-/* ------------------------------------- */
- } else {
-
-/* Loop round each point. */
- for ( point = 0; point < npoint; point++ ) {
-
-/* Assume this point is outside the negated Region (i.e. inside the
- unnegated Region). We change this flag when we find the first axis for
- which the point passes the axis test. */
- setbad = 1;
-
-/* Loop round each base Frame axis */
- Cache( this, status );
- for ( coord = 0; coord < ncoord_tmp; coord++ ) {
- p = ptr_tmp[ coord ][ point ];
- lb = (this->lbnd)[ coord ];
- ub = (this->ubnd)[ coord ];
-
-/* If the limits are equal separate them slightly to give some tolerance. */
- if( lb == ub ) {
-
-/* If not yet done so, get the bounding box of the uncertainty Region in the
- base Frame of the Interval */
- if( !unc ) {
- unc = astGetUncFrm( reg, AST__BASE );
- lbnd_unc = astMalloc( sizeof( double)*(size_t) ncoord_tmp );
- ubnd_unc = astMalloc( sizeof( double)*(size_t) ncoord_tmp );
- astGetRegionBounds( unc, lbnd_unc, ubnd_unc );
- }
-
-/* Set the gap between the limits to be equal to the uincertainty on this
- axis. */
- if( astOK ) {
- wid = 0.5*( ubnd_unc[ coord ] - lbnd_unc[ coord ] );
- lb -= wid;
- ub += wid;
- }
- }
-
-/* Bad input points should always be bad in the output. */
- if( p == AST__BAD ) {
- setbad = 1;
- break;
-
-/* Does the current axis value pass the limits test for this axis? */
- } else if( lb <= ub ) {
- pass = ( p < lb || ub < p );
- } else {
- pass = ( ub < p && p < lb );
- }
-
-/* If this point passes the test for this axis, then indicate that we should
- not set the resulting output point bad and break since we now have a
- definite value for the inside/outside flag. */
- if( pass ) {
- setbad = 0;
- break;
- }
- }
-
-/* Set the axis values bad for this output point if required. */
- if( setbad ) {
- for ( coord = 0; coord < ncoord_out; coord++ ) {
- ptr_out[ coord ][ point ] = AST__BAD;
- }
- }
- }
- }
- }
- }
-
-/* Free resources */
- pset_tmp = astAnnul( pset_tmp );
- if( lbnd_unc ) lbnd_unc = astFree( lbnd_unc );
- if( ubnd_unc ) ubnd_unc = astFree( ubnd_unc );
- if( unc ) unc = astAnnul( unc );
- }
-
-/* Annul the result if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for Interval objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for Region objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstInterval *in; /* Pointer to input Interval */
- AstInterval *out; /* Pointer to output Interval */
- size_t nb; /* Number of bytes in limits array */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Intervals. */
- in = (AstInterval *) objin;
- out = (AstInterval *) objout;
-
-/* For safety, first clear any references to the input memory from
- the output Interval. */
- out->box = NULL;
- out->lbnd = NULL;
- out->ubnd = NULL;
-
-/* Note the number of bytes in each limits array */
- nb = sizeof( double )*(size_t) astGetNin( ((AstRegion *) in)->frameset );
-
-/* Copy dynamic memory contents */
- if( in->box ) out->box = astCopy( in->box );
- out->lbnd = astStore( NULL, in->lbnd, nb );
- out->ubnd = astStore( NULL, in->ubnd, nb );
-}
-
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for Interval objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for Interval objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstInterval *this; /* Pointer to Interval */
-
-/* Obtain a pointer to the Interval structure. */
- this = (AstInterval *) obj;
-
-/* Annul all resources. */
- if( this->box ) this->box = astAnnul( this->box );
- this->lbnd = astFree( this->lbnd );
- this->ubnd = astFree( this->ubnd );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for Interval objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the Interval class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the Interval whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstInterval *this; /* Pointer to the Interval structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Interval structure. */
- this = (AstInterval *) this_object;
-
-/* Write out values representing the instance variables for the
- Interval class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* There are no values to write, so return without further action. */
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAInterval and astCheckInterval functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(Interval,Region)
-astMAKE_CHECK(Interval)
-
-AstInterval *astInterval_( void *frame_void, const double lbnd[],
- const double ubnd[], AstRegion *unc,
- const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astInterval
-f AST_INTERVAL
-
-* Purpose:
-* Create a Interval.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "interval.h"
-c AstInterval *astInterval( AstFrame *frame, const double lbnd[],
-c const double ubnd[], AstRegion *unc,
-c const char *options, ... )
-f RESULT = AST_INTERVAL( FRAME, LBND, UBND, UNC, OPTIONS, STATUS )
-
-* Class Membership:
-* Interval constructor.
-
-* Description:
-* This function creates a new Interval and optionally initialises its
-* attributes.
-*
-* A Interval is a Region which represents upper and/or lower limits on
-* one or more axes of a Frame. For a point to be within the region
-* represented by the Interval, the point must satisfy all the
-* restrictions placed on all the axes. The point is outside the region
-* if it fails to satisfy any one of the restrictions. Each axis may have
-* either an upper limit, a lower limit, both or neither. If both limits
-* are supplied but are in reverse order (so that the lower limit is
-* greater than the upper limit), then the interval is an excluded
-* interval, rather than an included interval.
-*
-* At least one axis limit must be supplied.
-*
-* Note, The Interval class makes no allowances for cyclic nature of
-* some coordinate systems (such as SkyFrame coordinates). A Box
-* should usually be used in these cases since this requires the user
-* to think about suitable upper and lower limits,
-
-* Parameters:
-c frame
-f FRAME = INTEGER (Given)
-* A pointer to the Frame in which the region is defined. A deep
-* copy is taken of the supplied Frame. This means that any
-* subsequent changes made to the Frame using the supplied pointer
-* will have no effect the Region.
-c lbnd
-f LBND( * ) = DOUBLE PRECISION (Given)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* (Naxes attribute) containing the lower limits on each axis.
-* Set a value to AST__BAD to indicate that the axis has no lower
-* limit.
-c ubnd
-f UBND( * ) = DOUBLE PRECISION (Given)
-c An array of double, with one element for each Frame axis
-f An array with one element for each Frame axis
-* (Naxes attribute) containing the upper limits on each axis.
-* Set a value to AST__BAD to indicate that the axis has no upper
-* limit.
-c unc
-f UNC = INTEGER (Given)
-* An optional pointer to an existing Region which specifies the
-* uncertainties associated with the boundary of the Box being created.
-* The uncertainty in any point on the boundary of the Box is found by
-* shifting the supplied "uncertainty" Region so that it is centred at
-* the boundary point being considered. The area covered by the
-* shifted uncertainty Region then represents the uncertainty in the
-* boundary position. The uncertainty is assumed to be the same for
-* all points.
-*
-* If supplied, the uncertainty Region must be of a class for which
-* all instances are centro-symetric (e.g. Box, Circle, Ellipse, etc.)
-* or be a Prism containing centro-symetric component Regions. A deep
-* copy of the supplied Region will be taken, so subsequent changes to
-* the uncertainty Region using the supplied pointer will have no
-* effect on the created Box. Alternatively,
-f a null Object pointer (AST__NULL)
-c a NULL Object pointer
-* may be supplied, in which case a default uncertainty is used
-* equivalent to a box 1.0E-6 of the size of the Box being created.
-*
-* The uncertainty Region has two uses: 1) when the
-c astOverlap
-f AST_OVERLAP
-* function compares two Regions for equality the uncertainty
-* Region is used to determine the tolerance on the comparison, and 2)
-* when a Region is mapped into a different coordinate system and
-* subsequently simplified (using
-c astSimplify),
-f AST_SIMPLIFY),
-* the uncertainties are used to determine if the transformed boundary
-* can be accurately represented by a specific shape of Region.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new Interval. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new Interval. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astInterval()
-f AST_INTERVAL = INTEGER
-* A pointer to the new Interval.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-
-* Status Handling:
-* The protected interface to this function includes an extra
-* parameter at the end of the parameter list descirbed above. This
-* parameter is a pointer to the integer inherited status
-* variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *frame; /* Pointer to Frame structure */
- AstInterval *new; /* Pointer to new Interval */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the supplied Frame structure. */
- frame = astCheckFrame( frame_void );
-
-/* Initialise the Interval, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitInterval( NULL, sizeof( AstInterval ), !class_init,
- &class_vtab, "Interval", frame, lbnd, ubnd, unc );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new Interval's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new Interval. */
- return new;
-}
-
-AstInterval *astIntervalId_( void *frame_void, const double lbnd[],
- const double ubnd[], void *unc_void,
- const char *options, ... ) {
-/*
-* Name:
-* astIntervalId_
-
-* Purpose:
-* Create a Interval.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "interval.h"
-* AstInterval *astIntervalId_( AstFrame *frame, const double lbnd[],
-* const double ubnd[], AstRegion *unc,
-* const char *options, ... )
-
-* Class Membership:
-* Interval constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astInterval constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astInterval_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astInterval_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astInterval_.
-
-* Returned Value:
-* The ID value associated with the new Interval.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *frame; /* Pointer to Frame structure */
- AstInterval *new; /* Pointer to new Interval */
- AstRegion *unc; /* Pointer to Region structure */
- va_list args; /* Variable argument list */
-
- int *status; /* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a Frame pointer from the supplied ID and validate the
- pointer to ensure it identifies a valid Frame. */
- frame = astVerifyFrame( astMakePointer( frame_void ) );
-
-/* Obtain a Region pointer from the supplied "unc" ID and validate the
- pointer to ensure it identifies a valid Region . */
- unc = unc_void ? astCheckRegion( astMakePointer( unc_void ) ) : NULL;
-
-/* Initialise the Interval, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitInterval( NULL, sizeof( AstInterval ), !class_init, &class_vtab,
- "Interval", frame, lbnd, ubnd, unc );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new Interval's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new Interval. */
- return astMakeId( new );
-}
-
-AstInterval *astInitInterval_( void *mem, size_t size, int init, AstIntervalVtab *vtab,
- const char *name, AstFrame *frame,
- const double lbnd[], const double ubnd[],
- AstRegion *unc, int *status ) {
-/*
-*+
-* Name:
-* astInitInterval
-
-* Purpose:
-* Initialise a Interval.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "interval.h"
-* AstInterval *astInitInterval( void *mem, size_t size, int init, AstIntervalVtab *vtab,
-* const char *name, AstFrame *frame,
-* const double lbnd[], const double ubnd[],
-* AstRegion *unc )
-
-* Class Membership:
-* Interval initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new Interval object. It allocates memory (if necessary) to accommodate
-* the Interval plus any additional data associated with the derived class.
-* It then initialises a Interval structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a Interval at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the Interval is to be initialised.
-* This must be of sufficient size to accommodate the Interval data
-* (sizeof(Interval)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the Interval (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the Interval
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the Interval's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new Interval.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-* frame
-* A pointer to the Frame in which the region is defined.
-* lbnd
-* An array of double, with one element for each Frame axis
-* (Naxes attribute) containing the lower limits on each axis.
-* Set a value to AST__BAD to indicate that the axis has no lower
-* limit. Upper and ower limits can be reversed to create an
-* excluded interval rather than an included interval.
-* ubnd
-* An array of double, with one element for each Frame axis
-* (Naxes attribute) containing the upper limits on each axis.
-* Set a value to AST__BAD to indicate that the axis has no upper
-* limit.
-* unc
-* A pointer to a Region which specifies the uncertainty in the
-* supplied positions (all points on the boundary of the new Interval
-* being initialised are assumed to have the same uncertainty). A NULL
-* pointer can be supplied, in which case default uncertainties equal to
-* 1.0E-6 of the dimensions of the new Interval's bounding box are used.
-* If an uncertainty Region is supplied, it must be either a Box, a
-* Circle or an Ellipse, and its encapsulated Frame must be related
-* to the Frame supplied for parameter "frame" (i.e. astConvert
-* should be able to find a Mapping between them). Two positions
-* the "frame" Frame are considered to be co-incident if their
-* uncertainty Regions overlap. The centre of the supplied
-* uncertainty Region is immaterial since it will be re-centred on the
-* point being tested before use. A deep copy is taken of the supplied
-* Region.
-
-* Returned Value:
-* A pointer to the new Interval.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstInterval *new; /* Pointer to new Interval */
- AstPointSet *pset; /* PointSet to pass to Region initialiser */
- double **ptr; /* Pointer to coords data in pset */
- int i; /* Axis index */
- int nc; /* No. of axes */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitIntervalVtab( &class_vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Get the number of axis values required for each position. */
- nc = astGetNaxes( frame );
-
-/* Create a PointSet to hold the upper and lower bounds, and get pointers to
- the data arrays. */
- pset = astPointSet( 2, nc, "", status );
- ptr = astGetPoints( pset );
- if( astOK ) {
-
-/* Copy the limits into the PointSet. */
- for( i = 0; i < nc; i++ ) {
- ptr[ i ][ 0 ] = lbnd[ i ];
- ptr[ i ][ 1 ] = ubnd[ i ];
- }
-
-/* Initialise a Region structure (the parent class) as the first component
- within the Interval structure, allocating memory if necessary. */
- new = (AstInterval *) astInitRegion( mem, size, 0, (AstRegionVtab *) vtab,
- name, frame, pset, unc );
-
- if ( astOK ) {
-
-/* Initialise the Interval data. */
-/* ----------------------------- */
- new->lbnd = NULL;
- new->ubnd = NULL;
- new->box = NULL;
- new->stale = 1;
-
-/* If an error occurred, clean up by deleting the new Interval. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Free resources. */
- pset = astAnnul( pset );
-
-/* Return a pointer to the new Interval. */
- return new;
-}
-
-AstInterval *astLoadInterval_( void *mem, size_t size, AstIntervalVtab *vtab,
- const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadInterval
-
-* Purpose:
-* Load a Interval.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "interval.h"
-* AstInterval *astLoadInterval( void *mem, size_t size, AstIntervalVtab *vtab,
-* const char *name, AstChannel *channel )
-
-* Class Membership:
-* Interval loader.
-
-* Description:
-* This function is provided to load a new Interval using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* Interval structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a Interval at the start of the memory
-* passed via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory into which the Interval is to be
-* loaded. This must be of sufficient size to accommodate the
-* Interval data (sizeof(Interval)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the Interval (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the Interval structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstInterval) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new Interval. If this is NULL, a pointer
-* to the (static) virtual function table for the Interval class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "Interval" is used instead.
-
-* Returned Value:
-* A pointer to the new Interval.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstInterval *new; /* Pointer to the new Interval */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this Interval. In this case the
- Interval belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstInterval );
- vtab = &class_vtab;
- name = "Interval";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitIntervalVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built Interval. */
- new = astLoadRegion( mem, size, (AstRegionVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "Interval" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* There are no values to read. */
-/* ---------------------------- */
- new->lbnd = NULL;
- new->ubnd = NULL;
- new->box = NULL;
- new->stale = 1;
-
-/* If an error occurred, clean up by deleting the new Interval. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new Interval pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-void astIntervalPoints_( AstInterval *this, double *lbnd, double *ubnd,
- int *status) {
- if ( !astOK ) return;
- (**astMEMBER(this,Interval,IntervalPoints))( this, lbnd, ubnd, status );
- return;
-}
-
-
-
-
-
-
diff --git a/ast-5.3-1/interval.h b/ast-5.3-1/interval.h
deleted file mode 100644
index c581f34..0000000
--- a/ast-5.3-1/interval.h
+++ /dev/null
@@ -1,236 +0,0 @@
-#if !defined( INTERVAL_INCLUDED ) /* Include this file only once */
-#define INTERVAL_INCLUDED
-/*
-*+
-* Name:
-* interval.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the Interval class.
-
-* Invocation:
-* #include "interval.h"
-
-* Description:
-* This include file defines the interface to the Interval class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The Interval class implement a Region which represents a simple interval
-* on each axis of the encapsulated Frame
-
-* Inheritance:
-* The Interval class inherits from the Region class.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 1-NOV-2004 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "region.h" /* Coordinate regions (parent class) */
-#include "box.h" /* Closed box regions */
-
-#if defined(astCLASS) /* Protected */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* Interval structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstInterval {
-
-/* Attributes inherited from the parent class. */
- AstRegion region; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- double *lbnd; /* Lower limits */
- double *ubnd; /* Lower limits */
- AstBox *box; /* Equivalent Box */
- int stale; /* Is cached information stale? */
-
-} AstInterval;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstIntervalVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstRegionVtab region_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- void (* IntervalPoints)( AstInterval *, double *, double *, int *);
-
-} AstIntervalVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstIntervalGlobals {
- AstIntervalVtab Class_Vtab;
- int Class_Init;
-} AstIntervalGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitIntervalGlobals_( AstIntervalGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Interval) /* Check class membership */
-astPROTO_ISA(Interval) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstInterval *astInterval_( void *, const double[], const double[], AstRegion *, const char *, int *, ...);
-#else
-AstInterval *astIntervalId_( void *, const double[], const double[], AstRegion *, const char *, ... )__attribute__((format(printf,5,6)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstInterval *astInitInterval_( void *, size_t, int, AstIntervalVtab *,
- const char *, AstFrame *, const double[],
- const double[], AstRegion *, int * );
-
-/* Vtab initialiser. */
-void astInitIntervalVtab_( AstIntervalVtab *, const char *, int * );
-
-/* Loader. */
-AstInterval *astLoadInterval_( void *, size_t, AstIntervalVtab *,
- const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS) /* Protected */
-void astIntervalPoints_( AstInterval *, double *, double *, int *);
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckInterval(this) astINVOKE_CHECK(Interval,this,0)
-#define astVerifyInterval(this) astINVOKE_CHECK(Interval,this,1)
-
-/* Test class membership. */
-#define astIsAInterval(this) astINVOKE_ISA(Interval,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astInterval astINVOKE(F,astInterval_)
-#else
-#define astInterval astINVOKE(F,astIntervalId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitInterval(mem,size,init,vtab,name,frame,lbnd,ubnd,unc) \
-astINVOKE(O,astInitInterval_(mem,size,init,vtab,name,frame,lbnd,ubnd,unc,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitIntervalVtab(vtab,name) astINVOKE(V,astInitIntervalVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadInterval(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadInterval_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckInterval to validate Interval pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-#define astIntervalPoints(this,lbnd,ubnd) astINVOKE(V,astIntervalPoints_(astCheckInterval(this),lbnd,ubnd,STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/intramap.c b/ast-5.3-1/intramap.c
deleted file mode 100644
index 1e88252..0000000
--- a/ast-5.3-1/intramap.c
+++ /dev/null
@@ -1,2942 +0,0 @@
-/*
-*class++
-* Name:
-* IntraMap
-
-* Purpose:
-c Map points using a private transformation function.
-f Map points using a private transformation routine.
-
-* Constructor Function:
-c astIntraMap (also see astIntraReg)
-f AST_INTRAMAP (also see AST_INTRAREG)
-
-* Description:
-c The IntraMap class provides a specialised form of Mapping which
-c encapsulates a privately-defined coordinate transformation
-c other AST Mapping. This allows you to create Mappings that
-c perform any conceivable coordinate transformation.
-f The IntraMap class provides a specialised form of Mapping which
-f encapsulates a privately-defined coordinate transformation
-f routine (e.g. written in Fortran) so that it may be used like
-f any other AST Mapping. This allows you to create Mappings that
-f perform any conceivable coordinate transformation.
-*
-* However, an IntraMap is intended for use within a single program
-* or a private suite of software, where all programs have access
-* to the same coordinate transformation functions (i.e. can be
-* linked against them). IntraMaps should not normally be stored in
-* datasets which may be exported for processing by other software,
-* since that software will not have the necessary transformation
-* functions available, resulting in an error.
-*
-c You must register any coordinate transformation functions to be
-c used using astIntraReg before creating an IntraMap.
-f You must register any coordinate transformation functions to be
-f used using AST_INTRAREG before creating an IntraMap.
-
-* Inheritance:
-* The IntraMap class inherits from the Mapping class.
-
-* Attributes:
-* In addition to those attributes common to all Mappings, every
-* IntraMap also has the following attributes:
-*
-* - IntraFlag: IntraMap identification string
-
-* Functions:
-c The IntraMap class does not define any new functions beyond those
-f The IntraMap class does not define any new routines beyond those
-* which are applicable to all Mappings.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 16-MAR-1998 (RFWS):
-* Original version.
-* 15-SEP-1999 (RFWS):
-* Added a "this" pointer to the external transformation function
-* used by an IntraMap.
-* 20-JUN-2001 (DSB):
-* Add an "astClone" call to prevent the pointer for "this" being
-* annulled at the end of the Transform method.
-* 8-JAN-2003 (DSB):
-* Changed private InitVtab method to protected astInitIntraMapVtab
-* method.
-* 7-DEC-2005 (DSB):
-* Free memory allocated by calls to astReadString.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 1-MAR-2006 (DSB):
-* Replace astSetPermMap within DEBUG blocks by astBeginPM/astEndPM.
-* 10-MAY-2006 (DSB):
-* Override astEqual.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS IntraMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "globals.h" /* Thread-safe global data access */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-#include "channel.h" /* I/O channels */
-#include "unitmap.h" /* Unit (identity) Mappings */
-#include "intramap.h" /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Pointer to array of transformation function data. */
-static AstIntraMapTranData *tran_data = NULL;
-
-/* Number of transformation functions registered. */
-static int tran_nfun = 0;
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are used or extended by this
- class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_getnin)( AstMapping *, int * );
-static int (* parent_getnout)( AstMapping *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(IntraMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(IntraMap,Class_Init)
-#define class_vtab astGLOBAL(IntraMap,Class_Vtab)
-
-
-/* A mutex used to serialise invocations of the IntraReg function (the
- only function allowed to modify the contents of the static tran_data
- array). */
-static pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX1 pthread_mutex_lock( &mutex1 );
-#define UNLOCK_MUTEX1 pthread_mutex_unlock( &mutex1 );
-
-/* A mutex used to serialise invocations of extrnal transformation
- functions (which may not be thread-safe). */
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX2 pthread_mutex_lock( &mutex2 );
-#define UNLOCK_MUTEX2 pthread_mutex_unlock( &mutex2 );
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstIntraMapVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#define LOCK_MUTEX1
-#define UNLOCK_MUTEX1
-
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstIntraMap *astIntraMapId_( const char *, int, int, const char *, ... );
-void astIntraRegFor_( const char *, int, int, void (* tran)( AstMapping *, int, int, const double *[], int, int, double *[] ), void (* tran_wrap)( void (*)( AstMapping *, int, int, const double *[], int, int, double *[] ), AstMapping *, int, int, const double *[], int, int, double *[], int * ), unsigned int, const char *, const char *, const char *, int * );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static char *CleanName( const char *, const char *, int * );
-static int GetObjSize( AstObject *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static const char *GetIntraFlag( AstIntraMap *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestIntraFlag( AstIntraMap *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void ClearIntraFlag( AstIntraMap *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static void IntraReg( const char *, int, int, void (*)( AstMapping *, int, int, const double *[], int, int, double *[] ), void (*)( void (*)( AstMapping *, int, int, const double *[], int, int, double *[] ), AstMapping *, int, int, const double *[], int, int, double *[], int * ), unsigned int, const char *, const char *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetIntraFlag( AstIntraMap *, const char *, int * );
-static void TranWrap( void (*)( AstMapping *, int, int, const double *[], int, int, double *[] ), AstMapping *, int, int, const double *[], int, int, double *[], int * );
-
-/* Member functions. */
-/* ================= */
-static char *CleanName( const char *name, const char *caller, int *status ) {
-/*
-* Name:
-* CleanName
-
-* Purpose:
-* Clean (and validate) a transformation function name.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "intramap.h"
-* char *CleanName( const char *name, const char *caller, int *status )
-
-* Class Membership:
-* IntraMap member function.
-
-* Description:
-* This function cleans a transformation function name by removing
-* all white space. It returns a copy of the cleaned name held in
-* dynamically allocated memory. If the name is entirely blank, an
-* error is reported.
-
-* Parameters:
-* name
-* Pointer to a null-terminated string containing the name to be
-* cleaned.
-* caller
-* Pointer to a null-terminated string containing the name of
-* the calling function. This is only used to construct error
-* messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a dynamically-allocated null-terminated string
-* containing the cleaned name. A NULL pointer is returned if the
-* name was entirely blank.
-
-* Notes:
-* - The memory holding the returned string should be deallocated
-* (using astFree) when no longer required.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- char *result; /* Pointer to result string */
- int i; /* Loop counter for input characters */
- int len; /* Length of name */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Determine the number of non-blank characters in the name supplied. */
- len = 0;
- for ( i = 0; name[ i ]; i++ ) if ( !isspace( (int) name[ i ] ) ) len++;
-
-/* If the name is entirely blank, then report an error. */
- if ( !len ) {
- astError( AST__ITFNI, "%s: Invalid blank transformation function name "
- "given.", status, caller );
-
-/* Otherwise, allocate memory to hold the cleaned name. */
- } else {
- result = astMalloc( (size_t) ( len + 1 ) );
-
-/* If OK, make a copy of the name with white space removed. */
- if ( astOK ) {
- len = 0;
- for ( i = 0; name[ i ]; i++ ) {
- if ( !isspace( (int) name[ i ] ) ) result[ len++ ] = name[ i ];
- }
-
-/* Terminate the result string. */
- result[ len ] = '\0';
- }
- }
-
-/* Return the result pointer. */
- return result;
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for an IntraMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "intramap.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* IntraMap member function (over-rides the astClearAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function clears the value of a specified attribute for an
-* IntraMap, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the IntraMap.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstIntraMap *this; /* Pointer to the IntraMap structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the IntraMap structure. */
- this = (AstIntraMap *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* IntraFlag. */
-/* ---------- */
- if ( !strcmp( attrib, "intraflag" ) ) {
- astClearIntraFlag( this );
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute is not recognised, pass it on to the parent method
- for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two IntraMaps are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "intramap.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* IntraMap member function (over-rides the astEqual protected
-* method inherited from the astMapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two IntraMaps are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Object (a IntraMap).
-* that
-* Pointer to the second Object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the IntraMaps are equivalent, zero otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstIntraMap *that;
- AstIntraMap *this;
- int nin;
- int nout;
- int result;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain pointers to the two IntraMap structures. */
- this = (AstIntraMap *) this_object;
- that = (AstIntraMap *) that_object;
-
-/* Check the second object is a IntraMap. We know the first is a
- IntraMap since we have arrived at this implementation of the virtual
- function. */
- if( astIsAIntraMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
- nin = astGetNin( this );
- nout = astGetNout( this );
- if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two IntraMaps differ, it may still be possible
- for them to be equivalent. First compare the IntraMaps if their Invert
- flags are the same. In this case all the attributes of the two IntraMaps
- must be identical. */
- if( astGetInvert( this ) == astGetInvert( that ) ) {
-
- if( this->ifun == that->ifun &&
- this->intraflag && that->intraflag &&
- !strcmp( this->intraflag, that->intraflag ) ) {
- result = 1;
- }
-
-/* If the Invert flags for the two IntraMaps differ, the attributes of the two
- IntraMaps must be inversely related to each other. */
- } else {
-
-/* In the specific case of a IntraMap, Invert flags must be equal. */
- result = 0;
-
- }
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "intramap.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* IntraMap member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied IntraMap,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the IntraMap.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstIntraMap *this; /* Pointer to IntraMap structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the IntraMap structure. */
- this = (AstIntraMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
- result += astTSizeOf( this->intraflag );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for an IntraMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "intramap.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* IntraMap member function (over-rides the protected astGetAttrib
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a IntraMap, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the IntraMap.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the IntraMap, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the IntraMap. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstIntraMap *this; /* Pointer to the IntraMap structure */
- const char *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the IntraMap structure. */
- this = (AstIntraMap *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "buff" as a null-terminated string in an appropriate
- format. Set "result" to point at the result string. */
-
-/* IntraFlag. */
-/* ---------- */
- if ( !strcmp( attrib, "intraflag" ) ) {
- result = astGetIntraFlag( this );
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-}
-
-void astInitIntraMapVtab_( AstIntraMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitIntraMapVtab
-
-* Purpose:
-* Initialise a virtual function table for an IntraMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "intramap.h"
-* void astInitIntraMapVtab( AstIntraMapVtab *vtab, const char *name )
-
-* Class Membership:
-* IntraMap vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the IntraMap class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAIntraMap) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
- vtab->ClearIntraFlag = ClearIntraFlag;
- vtab->GetIntraFlag = GetIntraFlag;
- vtab->SetIntraFlag = SetIntraFlag;
- vtab->TestIntraFlag = TestIntraFlag;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- object->Equal = Equal;
- mapping->MapMerge = MapMerge;
-
-/* Store pointers to inherited methods that will be invoked explicitly
- by this class. */
- parent_getnin = mapping->GetNin;
- parent_getnout = mapping->GetNout;
-
-/* Declare the copy constructor, destructor and class dump
- function. */
- astSetCopy( vtab, Copy );
- astSetDelete( vtab, Delete );
- astSetDump( vtab, Dump, "IntraMap",
- "Map points using a private transformation function" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static void IntraReg( const char *name, int nin, int nout,
- void (* tran)( AstMapping *, int, int, const double *[],
- int, int, double *[] ),
- void (* tran_wrap)( void (*)( AstMapping *, int, int,
- const double *[], int, int,
- double *[] ),
- AstMapping *, int, int,
- const double *[], int, int,
- double *[], int * ),
- unsigned int flags,
- const char *purpose, const char *author,
- const char *contact, int *status ) {
-/*
-* Name:
-* IntraReg
-
-* Purpose:
-* Register a transformation function for use by an IntraMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "intramap.h"
-* void IntraReg( const char *name, int nin, int nout,
-* void (* tran)( AstMapping *, int, int, const double *[],
-* int, int, double *[] ),
-* void (* tran_wrap)( void (*)( AstMapping *, int, int,
-* const double *[], int, int,
-* double *[] ),
-* AstMapping *, int, int,
-* const double *[], int, int,
-* double *[], int * ),
-* unsigned int flags,
-* const char *purpose, const char *author,
-* const char *contact, int *status )
-
-* Class Membership:
-* IntraMap member function.
-
-* Description:
-* This function registers a transformation function which will
-* later be used by an IntraMap and associates it with a name. It
-* also stores related information which will be required by the
-* IntraMap.
-
-* Parameters:
-* name
-* Pointer to a null-terminated string containing the name to be
-* used to identify the transformation function. This string is
-* case sensitive. All white space is removed before use.
-* nin
-* The number of input coordinates per point (or AST__ANY if any
-* number are allowed).
-* nout
-* The number of output coordinates per point (or AST__ANY if
-* any number are allowed).
-* tran
-* Pointer to the transformation function to be registered.
-* This may have any form of interface, which need not be known
-* to the implementation of the IntraMap class. Instead, the
-* method of invoking the transformation function should be
-* encapsulated in the "tran_wrap" function (below).
-* tran_wrap
-* Pointer to a wrapper function appropriate to the transformation
-* function (above). This wrapper function should have the same
-* interface as astTranP (from the Mapping class), except that it takes
-* a pointer to a function like "tran" as an additional first argument.
-* The purpose of this wrapper is to invoke the transformation function
-* via the pointer supplied, to pass it the necessary information
-* derived from the remainder of its arguments, and then to return the
-* results.
-* flags
-* This argument may be used to supply a set of flags which
-* control the behaviour of any IntraMap which uses the
-* registered transformation function. See the public interface
-* for astIntraReg for details.
-* purpose
-* Pointer to a null-terminated string containing a short (one
-* line) textual comment to describe the purpose of the
-* transformation function.
-* author
-* Pointer to a null-terminated string containing the name of
-* the author of the transformation function.
-* contact
-* Pointer to a null-terminated string containing contact
-* details for the author of the function (e.g. an e-mail or WWW
-* address).
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- char *clname; /* Pointer to cleaned name string */
- int found; /* Transformation function found? */
- int ifun; /* Loop counter for function information */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* This function modifies the global static tran_data array, so we use a
- mutex to ensure that only one thread can run this function at any one
- time. */
- LOCK_MUTEX1;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Indicate that subsequent memory allocations may never be freed (other
- than by any AST exit handler). */
- astBeginPM;
-
-/* Clean (and validate) the name supplied. */
- clname = CleanName( name, "astIntraReg", status );
-
-/* If OK, also validate the numbers of input and output
- coordinates. Report an error if necessary. */
- if ( astOK ) {
- if ( ( nin < 0 ) && ( nin != AST__ANY ) ) {
- astError( AST__BADNI, "astIntraReg(%s): Bad number of input "
- "coordinates (%d).", status, clname, nin );
- astError( AST__BADNI, "This number should be zero or more (or "
- "AST__ANY)." , status);
-
- } else if ( ( nout < 0 ) && ( nout != AST__ANY ) ) {
- astError( AST__BADNO, "astIntraReg(%s): Bad number of output "
- "coordinates (%d).", status, clname, nout );
- astError( AST__BADNO, "This number should be zero or more (or "
- "AST__ANY)." , status);
- }
- }
-
-/* Search the array of transformation function data to see if a
- function with the same name has already been registered. */
- if ( astOK ) {
- found = 0;
- for ( ifun = 0; ifun < tran_nfun; ifun++ ) {
- if ( ( found = !strcmp( clname, tran_data[ ifun ].name ) ) ) break;
- }
-
-/* If so, then check that the information supplied this time is
- identical to that supplied before. If any discrepancy is found,
- report an error. */
- if ( found ) {
- if ( ( nin != tran_data[ ifun ].nin ) ||
- ( nout != tran_data[ ifun ].nout ) ||
- ( tran != tran_data[ ifun ].tran ) ||
- ( tran_wrap != tran_data[ ifun ].tran_wrap ) ||
- ( flags != tran_data[ ifun ].flags ) ||
- strcmp( purpose, tran_data[ ifun ].purpose ) ||
- strcmp( author, tran_data[ ifun ].author ) ||
- strcmp( contact, tran_data[ ifun ].contact ) ) {
- astError( AST__MRITF, "astIntraReg: Invalid attempt to register "
- "the transformation function name \"%s\" "
- "multiple times.", status, clname );
- }
-
-/* If this is a new function, extend the array of transformation
- function data to accommodate it. */
- } else {
-
- tran_data = astGrow( tran_data, tran_nfun + 1, sizeof( AstIntraMapTranData ) );
-
-/* Store the information supplied. */
- if ( astOK ) {
- tran_data[ tran_nfun ].name = clname;
- tran_data[ tran_nfun ].nin = nin;
- tran_data[ tran_nfun ].nout = nout;
- tran_data[ tran_nfun ].tran = tran;
- tran_data[ tran_nfun ].tran_wrap = tran_wrap;
- tran_data[ tran_nfun ].flags = flags;
- tran_data[ tran_nfun ].purpose =
- astStore( NULL, purpose, strlen( purpose ) + (size_t) 1 );
- tran_data[ tran_nfun ].author =
- astStore( NULL, author, strlen( author ) + (size_t) 1 );
- tran_data[ tran_nfun ].contact =
- astStore( NULL, contact, strlen( contact ) + (size_t) 1 );
-
-/* If successful, increment the count of transformation functions
- registered. */
- if ( astOK ) {
- tran_nfun++;
-
-/* If an error occurred, free any memory that was allocated. */
- } else {
- tran_data[ tran_nfun ].name = NULL;
- tran_data[ tran_nfun ].purpose =
- astFree( tran_data[ tran_nfun ].purpose );
- tran_data[ tran_nfun ].author =
- astFree( tran_data[ tran_nfun ].author );
- tran_data[ tran_nfun ].contact =
- astFree( tran_data[ tran_nfun ].contact );
- }
- }
- }
- }
-
-/* If an error occurred, free the memory holding the cleaned function
- name. */
- if ( !astOK ) clname = astFree( clname );
-
-/* Mark the end of the section in which memory allocations may never be
- freed (other than by any AST exit handler). */
- astEndPM;
-
-/* Unlock the mutex that ensures that only one thread can run this function
- at any one time. */
- UNLOCK_MUTEX1;
-
-}
-
-void astIntraReg_( const char *name, int nin, int nout,
- void (* tran)( AstMapping *, int, int, const double *[],
- int, int, double *[] ),
- unsigned int flags, const char *purpose, const char *author,
- const char *contact, int *status ) {
-/*
-*++
-* Name:
-c astIntraReg
-f AST_INTRAREG
-
-* Purpose:
-c Register a transformation function for use by an IntraMap.
-f Register a transformation routine for use by an IntraMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "intramap.h"
-c astIntraReg( const char *name, int nin, int nout,
-c void (* tran)( AstMapping *, int, int, const double *[],
-c int, int, double *[] ),
-c unsigned int flags, const char *purpose, const char *author,
-c const char *contact )
-f CALL AST_INTRAREG( NAME, NIN, NOUT, TRAN, FLAGS, PURPOSE, AUTHOR,
-f CONTACT, STATUS )
-
-* Class Membership:
-* IntraMap member function.
-
-* Description:
-c This function registers a privately-defined coordinate
-c transformation function written in C so that it may be used to
-c create an IntraMap. An IntraMap is a specialised form of Mapping
-c which encapsulates the C function so that it may be used like
-c any other AST Mapping. This allows you to create Mappings that
-c perform any conceivable coordinate transformation.
-f This function registers a privately-defined coordinate
-f transformation routine written in Fortran so that it may be used
-f to create an IntraMap. An IntraMap is a specialised form of
-f Mapping which encapsulates the Fortran routine so that it may be
-f used like any other AST Mapping. This allows you to create
-f Mappings that perform any conceivable coordinate transformation.
-*
-c Registration of relevant transformation functions is required
-c before using the astIntraMap constructor function to create an
-c IntraMap or reading an external representation of an IntraMap
-c from a Channel.
-f Registration of relevant transformation routines is required
-f before using the AST_INTRAMAP constructor function to create an
-f IntraMap or reading an external representation of an IntraMap
-f from a Channel.
-
-* Parameters:
-c name
-f NAME = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing a unique name
-c to be associated with the transformation function in order to
-c identify it. This name is case sensitive. All white space
-c will be removed before use.
-f A character string containing a unique name to be associated
-f with the transformation routine in order to identify it. This
-f name is case sensitive. All white space will be removed
-f before use.
-c nin
-f NIN = INTEGER (Given)
-c The number of input coordinates accepted by the
-c transformation function (i.e. the number of dimensions of the
-c space in which the input points reside). A value of AST__ANY
-c may be given if the function is able to accommodate a
-c variable number of input coordinates.
-f The number of input coordinates accepted by the
-f transformation routine (i.e. the number of dimensions of the
-f space in which the input points reside). A value of AST__ANY
-f may be given if the routine is able to accommodate a variable
-f number of input coordinates.
-c nout
-f NOUT = INTEGER (Given)
-c The number of output coordinates produced by the
-c transformation function (i.e. the number of dimensions of the
-c space in which the output points reside). A value of AST__ANY
-c may be given if the function is able to produce a variable
-c number of output coordinates.
-f The number of output coordinates produced by the
-f transformation routine (i.e. the number of dimensions of the
-f space in which the output points reside). A value of AST__ANY
-f may be given if the routine is able to produce a variable
-f number of output coordinates.
-c tran
-f TRAN = SUBROUTINE (Given)
-c Pointer to the transformation function to be registered.
-c This function should perform whatever coordinate
-c transformations are required and should have an interface
-c like astTranP (q.v.).
-f The transformation routine to be registered. This routine
-f should perform whatever coordinate transformations are
-f required and should have an interface like AST_TRANN (q.v.).
-f
-f This transformation routine must also appear in an EXTERNAL
-f statement in the routine which calls AST_INTRAREG.
-c flags
-f FLAGS = INTEGER (Given)
-c This value may be used to supply a set of flags which
-c describe the transformation function and which may affect the
-c behaviour of any IntraMap which uses it. Often, a value of
-c zero will be given here, but you may also supply the bitwise
-c OR of a set of flags as described in the "Transformation
-c Flags" section (below).
-f This value may be used to supply a set of flags which
-f describe the transformation routine and which may affect the
-f behaviour of any IntraMap which uses it. Often, a value of
-f zero will be given here, but you may also supply the sum of a
-f set of flags as described in the "Transformation Flags"
-f section (below).
-c purpose
-f PURPOSE = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing a short (one
-c line) textual comment to describe the purpose of the
-c transformation function.
-f A character string containing a short (one line) textual
-f comment to describe the purpose of the transformation
-f routine.
-c author
-f AUTHOR = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing the name of
-c the author of the transformation function.
-f A character string containing the name of the author of the
-f transformation routine.
-c contact
-f CONTACT = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing contact
-c details for the author of the transformation function
-c (e.g. an e-mail or WWW address). If any IntraMap which uses
-c this transformation function is exported as part of a dataset
-c to an external user who does not have access to the function,
-c then these contact details should allow them to obtain the
-c necessary code.
-f A character string containing contact details for the author
-f of the transformation routine (e.g. an e-mail or WWW
-f address). If any IntraMap which uses this transformation
-f routine is exported as part of a dataset to an external user
-f who does not have access to the routine, then these contact
-f details should allow them to obtain the necessary code.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-c - Beware that an external representation of an IntraMap (created
-c by writing it to a Channel) will not include the coordinate
-c transformation function which it uses, so will only refer to the
-c function by its name (as assigned using astIntraReg).
-c Consequently, the external representation cannot be utilised by
-c another program unless that program has also registered the same
-c transformation function with the same name using an identical
-c invocation of astIntraReg. If no such registration has been
-c performed, then attempting to read the external representation
-c will result in an error.
-f - Beware that an external representation of an IntraMap (created
-f by writing it to a Channel) will not include the coordinate
-f transformation routine which it uses, so will only refer to the
-f routine by its name (as assigned using AST_INTRAREG).
-f Consequently, the external representation cannot be utilised by
-f another program unless that program has also registered the same
-f transformation routine with the same name using an identical
-f invocation of AST_INTRAREG. If no such registration has been
-f performed, then attempting to read the external representation
-f will result in an error.
-c - You may use astIntraReg to register a transformation function
-c with the same name more than once, but only if the arguments
-c supplied are identical on each occasion (i.e there is no way of
-c changing things once a function has been successfully registered
-c under a given name, and attempting to do so will result in an
-c error). This feature simply allows registration to be performed
-c independently, but consistently, at several places within your
-c program, without having to check whether it has already been
-c done.
-f - You may use AST_INTRAREG to register a transformation routine
-f with the same name more than once, but only if the arguments
-f supplied are identical on each occasion (i.e there is no way of
-f changing things once a routine has been successfully registered
-f under a given name, and attempting to do so will result in an
-f error). This feature simply allows registration to be performed
-f independently, but consistently, at several places within your
-f program, without having to check whether it has already been
-f done.
-c - If an error occurs in the transformation function, this may be
-c indicated by setting the AST error status to an error value
-c (using astSetStatus) before it returns. This will immediately
-c terminate the current AST operation. The error value AST__ITFER
-c is available for this purpose, but other values may also be used
-c (e.g. if you wish to distinguish different types of error).
-f - If an error occurs in the transformation routine, this may be
-f indicated by setting its STATUS argument to an error value
-f before it returns. This will immediately terminate the current
-f AST operation. The error value AST__ITFER is available for this
-f purpose, but other values may also be used (e.g. if you wish to
-f distinguish different types of error). The AST__ITFER error
-f value is defined in the AST_ERR include file.
-
-* Transformation Flags:
-c The following flags are defined in the ``ast.h'' header file and
-c allow you to provide further information about the nature of the
-c transformation function. Having selected the set of flags which
-c apply, you should supply the bitwise OR of their values as the
-c ``flags'' argument to astIntraReg.
-f The following flags are defined in the AST_PAR include file and
-f allow you to provide further information about the nature of the
-f transformation routine. Having selected the set of flags which
-f apply, you should supply the sum of their values as the FLAGS
-f argument to AST_INTRAREG.
-
-c - AST__NOFWD: If this flag is set, it indicates that the
-c transformation function does not implement a forward coordinate
-c transformation. In this case, any IntraMap which uses it will
-c have a TranForward attribute value of zero and the
-c transformation function itself will not be invoked with its
-c ``forward'' argument set to a non-zero value. By default, it is
-c assumed that a forward transformation is provided.
-f - AST__NOFWD: If this flag is set, it indicates that the
-f transformation routine does not implement a forward coordinate
-f transformation. In this case, any IntraMap which uses it will
-f have a TranForward attribute value of zero and the
-f transformation routine itself will not be called with its
-f FORWARD argument set to .TRUE.. By default, it is assumed that a
-f forward transformation is provided.
-c - AST__NOINV: If this flag is set, it indicates that the
-c transformation function does not implement an inverse coordinate
-c transformation. In this case, any IntraMap which uses it will
-c have a TranInverse attribute value of zero and the
-c transformation function itself will not be invoked with its
-c ``forward'' argument set to zero. By default, it is assumed
-c that an inverse transformation is provided.
-f - AST__NOINV: If this flag is set, it indicates that the
-f transformation routine does not implement an inverse coordinate
-f transformation. In this case, any IntraMap which uses it will
-f have a TranInverse attribute value of zero and the
-f transformation routine itself will not be called with its
-f FORWARD argument set to .FALSE.. By default, it is assumed that
-f an inverse transformation is provided.
-c - AST__SIMPFI: You may set this flag if applying the
-c transformation function's forward coordinate transformation,
-c followed immediately by the matching inverse transformation,
-c should always restore the original set of coordinates. It
-c indicates that AST may replace such a sequence of operations by
-c an identity Mapping (a UnitMap) if it is encountered while
-c simplifying a compound Mapping (e.g. using astSimplify). It is
-c not necessary that both transformations have actually been
-c implemented.
-f - AST__SIMPFI: You may set this flag if applying the
-f transformation routine's forward coordinate transformation,
-f followed immediately by the matching inverse transformation,
-f should always restore the original set of coordinates. It
-f indicates that AST may replace such a sequence of operations by
-f an identity Mapping (a UnitMap) if it is encountered while
-f simplifying a compound Mapping (e.g. using AST_SIMPLIFY). It is
-f not necessary that both transformations have actually been
-f implemented.
-c - AST__SIMPIF: You may set this flag if applying the
-c transformation function's inverse coordinate transformation,
-c followed immediately by the matching forward transformation,
-c should always restore the original set of coordinates. It
-c indicates that AST may replace such a sequence of operations by
-c an identity Mapping (a UnitMap) if it is encountered while
-c simplifying a compound Mapping (e.g. using astSimplify). It is
-c not necessary that both transformations have actually been
-c implemented.
-f - AST__SIMPIF: You may set this flag if applying the
-f transformation routine's inverse coordinate transformation,
-f followed immediately by the matching forward transformation,
-f should always restore the original set of coordinates. It
-f indicates that AST may replace such a sequence of operations by
-f an identity Mapping (a UnitMap) if it is encountered while
-f simplifying a compound Mapping (e.g. using AST_SIMPLIFY). It is
-f not necessary that both transformations have actually been
-f implemented.
-*--
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Register the transformation function together with the appropriate
- wrapper function for the C language. */
- IntraReg( name, nin, nout, tran, TranWrap, flags, purpose, author,
- contact, status );
-}
-
-void astIntraRegFor_( const char *name, int nin, int nout,
- void (* tran)( AstMapping *, int, int, const double *[],
- int, int, double *[] ),
- void (* tran_wrap)( void (*)( AstMapping *, int, int,
- const double *[], int, int,
- double *[] ),
- AstMapping *, int, int,
- const double *[], int, int,
- double *[], int * ),
- unsigned int flags, const char *purpose,
- const char *author, const char *contact, int *status ) {
-/*
-*+
-* Name:
-* astIntraRegFor
-
-* Purpose:
-* Register a foreign language transformation function for an IntraMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-* #include "intramap.h"
-* void astIntraRegFor( const char *name, int nin, int nout,
-* void (* tran)( AstMapping *, int, int,
-* const double *[], int, int,
-* double *[] ),
-* void (* tran_wrap)( void (*)( AstMapping *, int,
-* int, const double *[],
-* int, int,
-* double *[] ),
-* AstMapping *, int, int,
-* const double *[], int, int,
-* double *[], int * ),
-* unsigned int flags, const char *purpose,
-* const char *author, const char *contact )
-
-* Class Membership:
-* IntraMap member function.
-
-* Description:
-* This function registers a transformation function provided by a
-* foreign language interface which will later be used by an
-* IntraMap, and associates it with a name. It also stores related
-* information which will be required by the IntraMap.
-
-* Parameters:
-* name
-* Pointer to a null-terminated string containing the name to be
-* used to identify the transformation function. This string is
-* case sensitive. All white space is removed before use.
-* nin
-* The number of input coordinates per point (or AST__ANY if any
-* number are allowed).
-* nout
-* The number of output coordinates per point (or AST__ANY if
-* any number are allowed).
-* tran
-* Pointer to the foreign language transformation function to be
-* registered. This may have any form of interface, which need
-* not be known to the implementation of the IntraMap
-* class. Instead, the method of invoking the transformation
-* function should be encapsulated in the "tran_wrap" function
-* (below).
-* tran_wrap
-* Pointer to a wrapper function appropriate to the foreign
-* language interface. This wrapper function should have the
-* same interface as astTranP (from the Mapping class), except
-* that it takes a pointer to a function like "tran" as an additional
-* first argument. The purpose of this wrapper is to invoke the
-* transformation function via the pointer supplied, to pass it the
-* necessary information derived from the remainder of its arguments,
-* and then to return the results.
-* flags
-* This argument may be used to supply a set of flags which
-* control the behaviour of any IntraMap which uses the
-* registered transformation function. See the description of
-* astIntraReg for details.
-* purpose
-* Pointer to a null-terminated string containing a short (one
-* line) textual comment to describe the purpose of the
-* transformation function.
-* author
-* Pointer to a null-terminated string containing the name of
-* the author of the transformation function.
-* contact
-* Pointer to a null-terminated string containing contact
-* details for the author of the transformation function
-* (e.g. an e-mail address or URL). If any IntraMap using this
-* transformation function is exported as part of a dataset to
-* an external user who does not have access to the function,
-* then these contact details should allow them to obtain the
-* necessary code.
-
-* Notes:
-* - This function is only available through the public interface
-* to the IntraMap class (not the protected interface) and is
-* intended solely for use in implementing foreign language
-* interfaces to this class.
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Register the transformation function together with the appropriate
- wrapper function for the foreign language interface. */
- IntraReg( name, nin, nout, tran, tran_wrap, flags, purpose, author,
- contact, status );
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing an IntraMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "intramap.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* IntraMap method (over-rides the protected astMapMerge method
-* inherited from the Mapping class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated IntraMap in the sequence with its
-* neighbours, so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated IntraMap with one which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated IntraMap which is to be merged with
-* its neighbours. This should be a cloned copy of the IntraMap
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* IntraMap it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated IntraMap resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstIntraMap *intramap1; /* Pointer to first IntraMap */
- AstIntraMap *intramap2; /* Pointer to second IntraMap */
- AstMapping *new; /* Pointer to replacement Mapping */
- const char *class; /* Pointer to Mapping class string */
- int imap1; /* Index of first IntraMap */
- int imap2; /* Index of second IntraMap */
- int imap; /* Loop counter for Mappings */
- int invert1; /* Invert flag value (1st IntraMap) */
- int invert2; /* Invert flag value (2nd IntraMap) */
- int nin1; /* No. input coordinates (1st IntraMap) */
- int nout2; /* No. output coordinates (2nd IntraMap) */
- int result; /* Result value to return */
- int simpler; /* Mappings simplified? */
-
-/* Initialise the returned result. */
- result = -1;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* Further initialisation. */
- new = NULL;
- simpler = 0;
- nin1 = -1;
-
-/* We will only handle the case of IntraMaps in series and will
- consider merging the nominated IntraMap with the Mapping which
- follows it. Check that there is such a Mapping. */
- if ( series && ( ( where + 1 ) < *nmap ) ) {
-
-/* Obtain the indices of the two potential IntraMaps to be merged and
- a pointer to the first one. */
- imap1 = where;
- imap2 = where + 1;
- intramap1 = (AstIntraMap *) ( *map_list )[ imap1 ];
-
-/* Obtain the Class string of the second Mapping and determine if it
- is an IntraMap. */
- class = astGetClass( ( *map_list )[ imap2 ] );
- if ( astOK && !strcmp( class, "IntraMap" ) ) {
-
-/* Obtain a pointer to the second IntraMap. */
- intramap2 = (AstIntraMap *) ( *map_list )[ imap2 ];
-
-/* Check that the two IntraMaps use the same transformation function
- and have the same IntraFlag string (if set). */
- if ( ( intramap1->ifun == intramap2->ifun ) &&
- !strcmp( intramap1->intraflag ? intramap1->intraflag : "",
- intramap2->intraflag ? intramap2->intraflag : "" ) ) {
-
-/* Determine the number of input coordinates that the first IntraMap
- would have if its Invert attribute were set to the value of the
- associated invert flag. Take account of the current Invert
- attribute in obtaining this value. */
- invert1 = ( *invert_list )[ imap1 ];
- if ( astGetInvert( intramap1 ) ) {
- nin1 = invert1 ? astGetNin( intramap1 ) :
- astGetNout( intramap1 );
- } else {
- nin1 = invert1 ? astGetNout( intramap1 ) :
- astGetNin( intramap1 );
- }
-
-/* Similarly, determine the number of output coordinates that the
- second IntraMap would have. */
- invert2 = ( *invert_list )[ imap2 ];
- if ( astGetInvert( intramap2 ) ) {
- nout2 = invert2 ? astGetNout( intramap2 ) :
- astGetNin( intramap2 );
- } else {
- nout2 = invert2 ? astGetNin( intramap2 ) :
- astGetNout( intramap2 );
- }
-
-/* Check that the effect of applying the two IntraMaps will be to
- preserve the number of coordinates. */
- if ( astOK && ( nin1 == nout2 ) ) {
-
-/* If so, check if the first transformation function is applied in the
- forward direction and the second in the inverse direction. If so,
- note if this configuration can be simplified. */
- if ( !invert1 && invert2 ) {
- simpler = tran_data[ intramap1->ifun ].flags & AST__SIMPFI;
-
-/* Similarly, if the first transformation function is applied in the
- inverse direction and the second in the forward direction, then
- note if this configuration can be simplified. */
- } else if ( invert1 && !invert2 ) {
- simpler = tran_data[ intramap1->ifun ].flags & AST__SIMPIF;
- }
- }
- }
- }
-
-/* If the two IntraMaps can be simplified, create a UnitMap to replace
- them. */
- if ( simpler ) {
- new = (AstMapping *) astUnitMap( nin1, "", status );
-
-/* Annul the pointers to the IntraMaps. */
- if ( astOK ) {
- ( *map_list )[ imap1 ] = astAnnul( ( *map_list )[ imap1 ] );
- ( *map_list )[ imap2 ] = astAnnul( ( *map_list )[ imap2 ] );
-
-/* Insert the pointer to the replacement Mapping and initialise its
- invert flag. */
- ( *map_list )[ imap1 ] = new;
- ( *invert_list )[ imap1 ] = 0;
-
-/* Loop to close the resulting gap by moving subsequent elements down
- in the arrays. */
- for ( imap = imap2 + 1; imap < *nmap; imap++ ) {
- ( *map_list )[ imap - 1 ] = ( *map_list )[ imap ];
- ( *invert_list )[ imap - 1 ] = ( *invert_list )[ imap ];
- }
-
-/* Clear the vacated elements at the end. */
- ( *map_list )[ *nmap - 1 ] = NULL;
- ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
- modified element. */
- ( *nmap )--;
- result = imap1;
- }
- }
- }
-
-/* If an error occurred, clear the returned result. */
- if ( !astOK ) result = -1;
-
-/* Return the result. */
- return result;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for an IntraMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "intramap.h"
-* void SetAttrib( AstObject *this, const char *setting, int *status )
-
-* Class Membership:
-* IntraMap member function (over-rides the astSetAttrib method inherited
-* from the Mapping class).
-
-* Description:
-* This function assigns an attribute value for a IntraMap, the
-* attribute and its value being specified by means of a string of
-* the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in
-* lower case with no white space present. The value to the right
-* of the "=" should be a suitable textual representation of the
-* value to be assigned and this will be interpreted according to
-* the attribute's data type. White space surrounding the value is
-* only significant for string attributes.
-
-* Parameters:
-* this
-* Pointer to the IntraMap.
-* setting
-* Pointer to a null terminated string specifying the new attribute
-* value.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Vaiables: */
- AstIntraMap *this; /* Pointer to the IntraMap structure */
- int intraflag; /* Offset of IntraFlag value in string */
- int len; /* Length of setting string */
- int nc; /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the IntraMap structure. */
- this = (AstIntraMap *) this_object;
-
-/* Obtain the length of the setting string. */
- len = strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse the
- setting string and extract the attribute value (or an offset to it in the
- case of string values). In each case, use the value set in "nc" to check
- that the entire string was matched. Once a value has been obtained, use the
- appropriate method to set it. */
-
-/* IntraFlag. */
-/* ---------- */
- if ( nc = 0,
- ( 0 == astSscanf( setting, "intraflag=%n%*[^\n]%n", &intraflag, &nc ) )
- && ( nc >= len ) ) {
- astSetIntraFlag( this, setting + intraflag );
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute is not recognised, pass it on to the parent method
- for further interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for an IntraMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "intramap.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* IntraMap member function (over-rides the astTestAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a IntraMap's attributes.
-
-* Parameters:
-* this
-* Pointer to the IntraMap.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstIntraMap *this; /* Pointer to the IntraMap structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the IntraMap structure. */
- this = (AstIntraMap *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* IntraFlag. */
-/* ---------- */
- if ( !strcmp( attrib, "intraflag" ) ) {
- result = astTestIntraFlag( this );
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute is not recognised, pass it on to the parent method
- for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply an IntraMap to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "intramap.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* IntraMap member function (over-rides the astTransform protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function takes a IntraMap and a set of points encapsulated
-* in a PointSet and transforms the points using the transformation
-* function associated with the IntraMap.
-
-* Parameters:
-* this
-* Pointer to the IntraMap.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate
-* transformation should be applied, while a zero value requests
-* the inverse transformation.
-* out
-* Pointer to a PointSet which will hold the transformed
-* (output) coordinate values. A NULL value may also be given,
-* in which case a new PointSet will be created by this
-* function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-* - The number of coordinate values per point in the input
-* PointSet must match the number of coordinates for the IntraMap
-* being applied.
-* - If an output PointSet is supplied, it must have space for
-* sufficient number of points and coordinate values per point to
-* accommodate the result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstIntraMap *this; /* Pointer to IntraMap structure */
- AstMapping *id; /* Public ID for the IntraMap supplied */
- AstPointSet *result; /* Pointer to output PointSet */
- const double **ptr_in; /* Pointer to input coordinate data */
- double **ptr_out; /* Pointer to output coordinate data */
- int ncoord_in; /* Number of coordinates per input point */
- int ncoord_out; /* Number of coordinates per output point */
- int npoint; /* Number of points */
- int ok; /* AST status OK? */
- int status_value; /* AST status value */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this_mapping);
-
-/* Obtain a pointer to the IntraMap structure. */
- this = (AstIntraMap *) this_mapping;
-
-/* Apply the parent mapping using the stored pointer to the Transform
- member function inherited from the parent Mapping class. This
- function validates all arguments and generates an output PointSet
- if necessary, but does not actually transform any coordinate
- values. */
- result = (*parent_transform)( this_mapping, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the
- input and output PointSets and obtain pointers for accessing the
- input and output coordinate values. */
- npoint = astGetNpoint( in );
- ncoord_in = astGetNcoord( in );
- ncoord_out = astGetNcoord( result );
- ptr_in = (const double **) astGetPoints( in );
- ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse transformation,
- according to the direction specified and whether the Mapping has
- been inverted. */
- if ( astGetInvert( this ) ) forward = !forward;
-
-/* Obtain a public (external) ID for the IntraMap. This will be
- required (instead of a true C pointer) by the transformation function,
- since it is user-written. Clone the IntraMap pointer so that the call
- to astAnnulID later on does not annul the IntraMap pointer. */
- id = (AstMapping *) astMakeId( astClone( this ) );
-
-/* Locate the transformation function data associated with the
- IntraMap and use the wrapper function to invoke the transformation
- function itself. */
- if ( ( ok = astOK ) ) {
- LOCK_MUTEX2;
- ( *tran_data[ this->ifun ].tran_wrap )( tran_data[ this->ifun ].tran,
- id, npoint, ncoord_in, ptr_in,
- forward, ncoord_out, ptr_out,
- status );
- UNLOCK_MUTEX2;
-
-/* If an error occurred, report a contextual error message. To ensure
- that the location of the error appears in the message, we first clear
- the global status (which makes the error system think this is the
- first report). */
- if ( !( ok = astOK ) ) {
- status_value = astStatus;
- astClearStatus;
- astError( status_value,
- "astTransform(%s): Error signalled by \"%s\" "
- "transformation function.", status,
- astGetClass( this ), tran_data[ this->ifun ].name );
- }
- }
-
-/* Annul the external identifier. */
- id = astMakeId( astAnnulId( id ) );
-
-/* If an error occurred here, but earlier steps were successful, then
- something has happened to the external ID, so report a contextual
- error message. */
- if ( !astOK && ok ) {
- astError( astStatus,
- "astTransform(%s): %s pointer corrupted by \"%s\" "
- "transformation function.", status,
- astGetClass( this ), astGetClass( this ),
- tran_data[ this->ifun ].name );
- }
-
-/* If an error occurred, clear the returned pointer. If a new output
- PointSet has been created, then delete it. */
- if ( !astOK ) {
- result = ( result == out ) ? NULL : astDelete( result );
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-static void TranWrap( void (* tran)( AstMapping *, int, int, const double *[],
- int, int, double *[] ),
- AstMapping *this, int npoint, int ncoord_in,
- const double *ptr_in[], int forward, int ncoord_out,
- double *ptr_out[], int *status ) {
-/*
-* Name:
-* TranWrap
-
-* Purpose:
-* Wrapper function to invoke a C transformation function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void TranWrap( void (* tran)( AstMapping *, int, int, const double *[],
-* int, int, double *[] ),
-* AstMapping *this, int npoint, int ncoord_in,
-* const double *ptr_in[], int forward, int ncoord_out,
-* double *ptr_out[], int *status )
-
-* Class Membership:
-* IntraMap member function.
-
-* Description:
-* This function invokes a C implementation of a transformation
-* function (which resembles the astTranP function from the Mapping
-* class).
-*
-* This wrapper is essentially a dummy function for the C language.
-* It may be replaced by alternative versions for foreign language
-* interfaces, thus allowing transformation functions supplied by
-* those languages to be invoked without knowledge of their
-* interfaces.
-
-* Parameters:
-* tran
-* Pointer to the transformation function to be invoked. This
-* should resemble astTranP (but with the first argument
-* omitted).
-* this
-* An external Mapping ID associated with the internal (true C) pointer
-* for the IntraMap whose transformation is being evaluated.
-* npoint
-* The number of points to be transformed.
-* ncoord_in
-* The number of coordinates being supplied for each input point
-* (i.e. the number of dimensions of the space in which the
-* input points reside).
-* ptr_in
-* An array of pointers to double, with "ncoord_in"
-* elements. Element "ptr_in[coord]" should point at the first
-* element of an array of double (with "npoint" elements) which
-* contain the values of coordinate number "coord" for each
-* input (untransformed) point. The value of coordinate number
-* "coord" for input point number "point" is therefore given by
-* "ptr_in[coord][point]".
-* forward
-* A non-zero value indicates that the forward coordinate
-* transformation is to be applied, while a zero value indicates
-* that the inverse transformation should be used.
-* ncoord_out
-* The number of coordinates being generated for each output
-* point (i.e. the number of dimensions of the space in which
-* the output points reside). This need not be the same as
-* "ncoord_in".
-* ptr_out
-* An array of pointers to double, with "ncoord_out"
-* elements. Element "ptr_out[coord]" should point at the first
-* element of an array of double (with "npoint" elements) into
-* which the values of coordinate number "coord" for each output
-* (transformed) point will be written. The value of coordinate
-* number "coord" for output point number "point" will therefore
-* be found in "ptr_out[coord][point]".
-* status
-* Pointer to the inherited status value.
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Invoke the transformation function. */
- ( *tran )( this, npoint, ncoord_in, ptr_in, forward, ncoord_out, ptr_out );
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/*
-*att++
-* Name:
-* IntraFlag
-
-* Purpose:
-* IntraMap identification string.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-c This attribute allows an IntraMap to be flagged so that it is
-c distinguishable from other IntraMaps. The transformation function
-c associated with the IntraMap may then enquire the value of this
-c attribute and adapt the transformation it provides according to the
-c particular IntraMap involved.
-f This attribute allows an IntraMap to be flagged so that it is
-f distinguishable from other IntraMaps. The transformation routine
-f associated with the IntraMap may then enquire the value of this
-f attribute and adapt the transformation it provides according to the
-f particular IntraMap involved.
-*
-c Although this is a string attribute, it may often be useful to store
-c numerical values here, encoded as a character string, and to use these
-c as data within the transformation function. Note, however, that this
-c mechanism is not suitable for transferring large amounts of data (more
-c than about 1000 characters) to an IntraMap. For that purpose, global
-c variables are recommended, although the IntraFlag value can be used to
-c supplement this approach. The default IntraFlag value is an empty
-c string.
-f Although this is a string attribute, it may often be useful to store
-f numerical values here, encoded as a character string, and to use these
-f as data within the transformation routine. Note, however, that this
-f mechanism is not suitable for transferring large amounts of data (more
-f than about 1000 characters) to an IntraMap. For that purpose, global
-f variables are recommended, although the IntraFlag value can be used to
-f supplement this approach. The default IntraFlag value is an empty
-f string.
-
-* Applicability:
-* IntraMap
-* All IntraMaps have this attribute.
-
-* Notes:
-c - A pair of IntraMaps whose transformations may potentially cancel
-c cannot be simplified to produce a UnitMap (e.g. using astSimplify)
-c unless they have the same IntraFlag values. The test for equality is
-c case-sensitive.
-f - A pair of IntraMaps whose transformations may potentially cancel
-f cannot be simplified to produce a UnitMap (e.g. using AST_SIMPLIFY)
-f unless they have the same IntraFlag values. The test for equality is
-f case-sensitive.
-*att--
-*/
-
-/* Clear the IntraFlag value by freeing the allocated memory and
- assigning a NULL pointer. */
-astMAKE_CLEAR(IntraMap,IntraFlag,intraflag,astFree( this->intraflag ))
-
-/* Return a pointer to the IntraFlag value. */
-astMAKE_GET(IntraMap,IntraFlag,const char *,NULL,this->intraflag)
-
-/* Set a IntraFlag value by freeing any previously allocated memory,
- allocating new memory, storing the string and saving the pointer to
- the copy. */
-astMAKE_SET(IntraMap,IntraFlag,const char *,intraflag,astStore(
- this->intraflag, value,
- strlen( value ) +
- (size_t) 1 ))
-
-/* The IntraFlag value is set if the pointer to it is not NULL. */
-astMAKE_TEST(IntraMap,IntraFlag,( this->intraflag != NULL ))
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for IntraMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for IntraMap objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstIntraMap *in; /* Pointer to input IntraMap */
- AstIntraMap *out; /* Pointer to output IntraMap */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output IntraMaps. */
- in = (AstIntraMap *) objin;
- out = (AstIntraMap *) objout;
-
-/* For safety, first clear any references to the input memory from
- the output IntraMap. */
- out->intraflag = NULL;
-
-/* If necessary, allocate memory in the output IntraMap and store a
- copy of the input IntraFlag string. */
- if ( in->intraflag ) out->intraflag = astStore( NULL, in->intraflag,
- strlen( in->intraflag ) +
- (size_t) 1 );
-
-/* If an error occurred, free any allocated memory. */
- if ( !astOK ) {
- out->intraflag = astFree( out->intraflag );
- }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for IntraMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for IntraMap objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstIntraMap *this; /* Pointer to IntraMap */
-
-/* Obtain a pointer to the IntraMap structure. */
- this = (AstIntraMap *) obj;
-
-/* Free the memory used for the IntraFlag string if necessary. */
- this->intraflag = astFree( this->intraflag );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for IntraMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the IntraMap class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the IntraMap whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstIntraMap *this; /* Pointer to the IntraMap structure */
- const char *sval; /* Pointer to string value */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the IntraMap structure. */
- this = (AstIntraMap *) this_object;
-
-/* Write out values representing the instance variables for the
- IntraMap class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* Transformation function name. */
-/* ----------------------------- */
- astWriteString( channel, "Fname", 1, 1, tran_data[ this->ifun ].name,
- "Name of transformation function" );
-
-/* IntraFlag string. */
-/* ----------------- */
- set = TestIntraFlag( this, status );
- sval = set ? GetIntraFlag( this, status ) : astGetIntraFlag( this );
- astWriteString( channel, "Iflag", set, 0, sval,
- "IntraMap identification string" );
-
-/* Purpose string. */
-/* --------------- */
- astWriteString( channel, "Purp", 1, 1, tran_data[ this->ifun ].purpose,
- "Purpose of function" );
-
-/* Author's name. */
-/* -------------- */
- astWriteString( channel, "Auth", 1, 1, tran_data[ this->ifun ].author,
- "Author's name" );
-
-/* Contact details. */
-/* ---------------- */
- astWriteString( channel, "Cntact", 1, 1, tran_data[ this->ifun ].contact,
- "Contact address" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAIntraMap and astCheckIntraMap functions using the
- macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(IntraMap,Mapping)
-astMAKE_CHECK(IntraMap)
-
-AstIntraMap *astIntraMap_( const char *name, int nin, int nout,
- const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astIntraMap
-f AST_INTRAMAP
-
-* Purpose:
-* Create an IntraMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "intramap.h"
-c AstIntraMap *astIntraMap( const char *name, int nin, int nout,
-c const char *options, ... )
-f RESULT = AST_INTRAMAP( NAME, NIN, NOUT, OPTIONS, STATUS )
-
-* Class Membership:
-* IntraMap constructor.
-
-* Description:
-* This function creates a new IntraMap and optionally initialises
-* its attributes.
-*
-c An IntraMap is a specialised form of Mapping which encapsulates
-c a privately-defined coordinate transformation function
-c (e.g. written in C) so that it may be used like any other AST
-c Mapping. This allows you to create Mappings that perform any
-c conceivable coordinate transformation.
-f An IntraMap is a specialised form of Mapping which encapsulates
-f a privately-defined coordinate transformation routine
-f (e.g. written in Fortran) so that it may be used like any other
-f AST Mapping. This allows you to create Mappings that perform any
-f conceivable coordinate transformation.
-*
-* However, an IntraMap is intended for use within a single program
-* or a private suite of software, where all programs have access
-* to the same coordinate transformation functions (i.e. can be
-* linked against them). IntraMaps should not normally be stored in
-* datasets which may be exported for processing by other software,
-* since that software will not have the necessary transformation
-* functions available, resulting in an error.
-*
-c You must register any coordinate transformation functions to be
-c used using astIntraReg before creating an IntraMap.
-f You must register any coordinate transformation functions to be
-f used using AST_INTRAREG before creating an IntraMap.
-
-* Parameters:
-c name
-f NAME = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing the name of
-c the transformation function to use (which should previously
-c have been registered using astIntraReg). This name is case
-c sensitive. All white space will be removed before use.
-f A character string containing the name of the transformation
-f routine to use (which should previously have been registered
-f using AST_INTRAREG). This name is case sensitive. All white
-f space will be removed before use.
-c nin
-f NIN = INTEGER (Given)
-c The number of input coordinates. This must be compatible with
-c the number of input coordinates accepted by the
-c transformation function (as specified when this function was
-c registered using astIntraReg).
-f The number of input coordinates. This must be compatible with
-f the number of input coordinates accepted by the
-f transformation routine (as specified when this routine was
-f registered using AST_INTRAREG).
-c nout
-f NOUT = INTEGER (Given)
-c The number of output coordinates. This must be compatible
-c with the number of output coordinates produced by the
-c transformation function (as specified when this function was
-c registered using astIntraReg).
-f The number of output coordinates. This must be compatible
-f with the number of output coordinates produced by the
-f transformation routine (as specified when this routine was
-f registered using AST_INTRAREG).
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new IntraMap. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new IntraMap. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astIntraMap()
-f AST_INTRAMAP = INTEGER
-* A pointer to the new IntraMap.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstIntraMap *new; /* Pointer to new IntraMap */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the IntraMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitIntraMap( NULL, sizeof( AstIntraMap ), !class_init,
- &class_vtab, "IntraMap", name, nin, nout );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- IntraMap's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new IntraMap. */
- return new;
-}
-
-AstIntraMap *astIntraMapId_( const char *name, int nin, int nout,
- const char *options, ... ) {
-/*
-* Name:
-* astIntraMapId_
-
-* Purpose:
-* Create an IntraMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "intramap.h"
-* AstIntraMap *astIntraMapId_( const char *name, int nin, int nout,
-* const char *options, ... )
-
-* Class Membership:
-* IntraMap constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astIntraMap constructor function. It returns an ID value
-* (instead of a true C pointer) to external users, and must be
-* provided because astIntraMap_ has a variable argument list which
-* cannot be encapsulated in a macro (where this conversion would
-* otherwise occur).
-*
-* The variable argument list also prevents this function from
-* invoking astIntraMap_ directly, so it must be a
-* re-implementation of it in all respects, except for the final
-* conversion of the result to an ID value.
-
-* Parameters:
-* As for astIntraMap_.
-
-* Returned Value:
-* The ID value associated with the new IntraMap.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstIntraMap *new; /* Pointer to new IntraMap */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the IntraMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitIntraMap( NULL, sizeof( AstIntraMap ), !class_init,
- &class_vtab, "IntraMap", name, nin, nout );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- IntraMap's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new IntraMap. */
- return astMakeId( new );
-}
-
-
-AstIntraMap *astInitIntraMap_( void *mem, size_t size, int init,
- AstIntraMapVtab *vtab, const char *name,
- const char *fname, int nin, int nout, int *status ) {
-/*
-*+
-* Name:
-* astInitIntraMap
-
-* Purpose:
-* Initialise an IntraMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "intramap.h"
-* AstIntraMap *astInitIntraMap( void *mem, size_t size, int init,
-* AstIntraMapVtab *vtab, const char *name,
-* const char *fname, int nin, int nout )
-
-* Class Membership:
-* IntraMap initialiser.
-
-* Description:
-* This function is provided for use by class implementations to
-* initialise a new IntraMap object. It allocates memory (if
-* necessary) to accommodate the IntraMap plus any additional data
-* associated with the derived class. It then initialises a
-* IntraMap structure at the start of this memory. If the "init"
-* flag is set, it also initialises the contents of a virtual
-* function table for a IntraMap at the start of the memory passed
-* via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the IntraMap is to be
-* initialised. This must be of sufficient size to accommodate
-* the IntraMap data (sizeof(IntraMap)) plus any data used by
-* the derived class. If a value of NULL is given, this function
-* will allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the IntraMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the IntraMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-* init
-* A logical flag indicating if the IntraMap's virtual function
-* table is to be initialised. If this value is non-zero, the
-* virtual function table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new IntraMap.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-* fname
-* Pointer to a null-terminated string containing the name of
-* the transformation function to be used, as previously
-* registered using astIntraReg.
-* nin
-* The number of input coordinates.
-* nout
-* The number of output coordinates.
-
-* Returned Value:
-* A pointer to the new IntraMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstIntraMap *new; /* Pointer to new IntraMap */
- char *clname; /* Cleaned transformation function name */
- int found; /* Transformation function name found? */
- int ifun; /* Loop counter for registered functions */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- found = 0;
- ifun = 0;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitIntraMapVtab( vtab, name );
-
-/* Clean (and validate) the transformation function name supplied. */
- clname = CleanName( fname, "astIntraMap", status );
-
-/* Search for a registered transformation function name which matches. */
- if ( astOK ) {
- found = 0;
- for ( ifun = 0; ifun < tran_nfun; ifun++ ) {
- if ( ( found = !strcmp( clname, tran_data[ ifun ].name ) ) ) break;
- }
- }
-
-/* Free the memory containing the cleaned name string. */
- clname = astFree( clname );
-
-/* If no match was found, then report an error. */
- if ( astOK ) {
- if ( !found ) {
- astError( AST__URITF, "astInitIntraMap(%s): The transformation "
- "function \"%s\" has not been registered using "
- "astIntraReg.", status, name, clname );
-
-/* Check that the number of input coordinates is compatible with the
- number used by the transformation function (as specified when it
- was registered). Report an error if necessary. */
- } else {
- if ( ( nin != tran_data[ ifun ].nin ) &&
- ( tran_data[ ifun ].nin != AST__ANY ) ) {
- astError( AST__BADNI, "astInitIntraMap(%s): Number of input "
- "coordinates (%d) does not match the number "
- "used by the \"%s\" transformation function "
- "(%d).", status, name, nin, tran_data[ ifun ].name,
- tran_data[ ifun ].nin );
-
-/* Similarly check the number of output coordinates. */
- } else if ( ( nout != tran_data[ ifun ].nout ) &&
- ( tran_data[ ifun ].nout != AST__ANY ) ) {
- astError( AST__BADNO, "astInitIntraMap(%s): Number of output "
- "coordinates (%d) does not match the number "
- "used by the \"%s\" transformation function "
- "(%d).", status, name, nout, tran_data[ ifun ].name,
- tran_data[ ifun ].nout );
-
-/* If OK, initialise a Mapping structure (the parent class) as the
- first component within the IntraMap structure, allocating memory if
- necessary (note that this also provides further checks on the
- validity of "nin" and "nout"). Specify whether the forward and
- inverse transformations are defined. */
- } else {
- new = (AstIntraMap *) astInitMapping( mem, size, 0,
- (AstMappingVtab *) vtab, name, nin, nout,
- ( ( tran_data[ ifun ].flags & AST__NOFWD ) == 0 ),
- ( ( tran_data[ ifun ].flags & AST__NOINV ) == 0 ) );
-
- if ( astOK ) {
-
-/* Initialise the IntraMap data. */
-/* ---------------------------- */
-/* Initialise the IntraFlag string pointer. */
- new->intraflag = NULL;
-
-/* Store the index used to access the transformation function data. */
- new->ifun = ifun;
-
-/* If an error occurred, clean up by deleting the new IntraMap. */
- if ( !astOK ) new = astDelete( new );
- }
- }
- }
- }
-
-/* Return a pointer to the new IntraMap. */
- return new;
-}
-
-AstIntraMap *astLoadIntraMap_( void *mem, size_t size,
- AstIntraMapVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadIntraMap
-
-* Purpose:
-* Load an IntraMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "intramap.h"
-* AstIntraMap *astLoadIntraMap( void *mem, size_t size,
-* AstIntraMapVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* IntraMap loader.
-
-* Description:
-* This function is provided to load a new IntraMap using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* IntraMap structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for an IntraMap at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the IntraMap is to be
-* loaded. This must be of sufficient size to accommodate the
-* IntraMap data (sizeof(IntraMap)) plus any data used by
-* derived classes. If a value of NULL is given, this function
-* will allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the IntraMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the IntraMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstIntraMap) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new IntraMap. If this is NULL, a pointer
-* to the (static) virtual function table for the IntraMap class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "IntraMap" is used instead.
-
-* Returned Value:
-* A pointer to the new IntraMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstIntraMap *new; /* Pointer to the new IntraMap */
- char *author; /* Pointer to author's name string */
- char *contact; /* Pointer to contact details string */
- char *fname; /* Pointer to transformation function name */
- char *purpose; /* Pointer to purpose comment string */
- int found; /* Function name found? */
- int ifun; /* Loop counter for registered functions */
- int nin; /* Number of IntraMap input coordinates */
- int nout; /* Number of IntraMap output coordinates */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this IntraMap. In this case the
- IntraMap belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstIntraMap );
- vtab = &class_vtab;
- name = "IntraMap";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitIntraMapVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built IntraMap. */
- new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "IntraMap" );
-
-/* Now read each individual data item from this list. */
-
-/* Transformation function name. */
-/* ----------------------------- */
- fname = astReadString( channel, "fname", "" );
-
-/* IntraFlag string. */
-/* ----------------- */
- new->intraflag = astReadString( channel, "iflag", NULL );
-
-/* Purpose string. */
-/* --------------- */
- purpose = astReadString( channel, "purp", "" );
-
-/* Author's name. */
-/* -------------- */
- author = astReadString( channel, "auth", "" );
-
-/* Contact details. */
-/* ---------------- */
- contact = astReadString( channel, "cntact", "" );
-
-/* If OK, search the array of transformation function data to see if
- the required transformation function has been registered. */
- if ( astOK ) {
- found = 0;
- for ( ifun = 0; ifun < tran_nfun; ifun++ ) {
- if ( ( found = !strcmp( fname, tran_data[ ifun ].name ) ) ) break;
- }
-
-/* If the transformation function has not been registered, report an
- error explaining how to obtain it from the author and register
- it. */
- if ( !found ) {
- astError( AST__URITF, "astLoadIntraMap(%s): An IntraMap was read "
- "which uses an unknown transformation "
- "function.", status, astGetClass( channel ) );
- astError( AST__URITF, "This is a private extension to the AST "
- "library: to handle it, you must obtain the "
- "source code from its author." , status);
- astError( AST__URITF, "You can then register it with AST in your "
- "software by calling astIntraReg (see "
- "SUN/211)." , status);
- astError( AST__URITF, " " , status);
- astError( AST__URITF, " Function name: \"%s\".", status, fname );
- astError( AST__URITF, " Purpose: \"%s\".", status, purpose );
- astError( AST__URITF, " Author: \"%s\".", status, author );
- astError( AST__URITF, " Contact address: \"%s\".", status, contact );
- astError( AST__URITF, " " , status);
-
-/* Obtain the numbers of input and output coordinates for the
- IntraMap. Use parent methods for this, since if any derived class
- has overridden these methods it may depend on data that have not
- yet been loaded. */
- } else {
- nin = ( *parent_getnin )( (AstMapping *) new, status );
- nout = ( *parent_getnout )( (AstMapping *) new, status );
- if ( astOK ) {
-
-/* Check that the numbers of coordinates are compatible with the
- numbers used by the transformation function, as specified when it
- was registered. */
- if ( ( nin != tran_data[ ifun ].nin ) &&
- ( tran_data[ ifun ].nin != AST__ANY ) ) {
- astError( AST__BADNI, "astLoadIntraMap(%s): The number of "
- "input coordinates for the IntraMap "
- "read (%d) does not match the number "
- "used by the registered \"%s\" "
- "transformation function (%d).", status,
- astGetClass( channel ), nin,
- tran_data[ ifun ].name,
- tran_data[ ifun ].nin );
- } else if ( ( nout != tran_data[ ifun ].nout ) &&
- ( tran_data[ ifun ].nout != AST__ANY ) ) {
- astError( AST__BADNO, "astLoadIntraMap(%s): The number of "
- "output coordinates for the IntraMap "
- "read (%d) does not match the number "
- "used by the registered \"%s\" "
- "transformation function (%d).", status,
- astGetClass( channel ), nout,
- tran_data[ ifun ].name,
- tran_data[ ifun ].nout );
-
-/* If OK, store the index used to access the transformation function
- data. */
- } else {
- new->ifun = ifun;
- }
- }
- }
- }
-
-/* Free strings allocated by astReadString. */
- fname = astFree( fname );
- purpose = astFree( purpose );
- author = astFree( author );
- contact = astFree( contact );
-
-/* If an error occurred, clean up by deleting the new IntraMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new IntraMap pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-
-
-
-
diff --git a/ast-5.3-1/intramap.h b/ast-5.3-1/intramap.h
deleted file mode 100644
index 29f2186..0000000
--- a/ast-5.3-1/intramap.h
+++ /dev/null
@@ -1,344 +0,0 @@
-#if !defined( INTRAMAP_INCLUDED ) /* Include this file only once */
-#define INTRAMAP_INCLUDED
-/*
-*+
-* Name:
-* intramap.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the IntraMap class.
-
-* Invocation:
-* #include "intramap.h"
-
-* Description:
-* This include file defines the interface to the IntraMap class
-* and provides the type definitions, function prototypes and
-* macros, etc. needed to use this class.
-*
-* The IntraMap class implements Mappings which transform
-* coordinates using a privately-defined transformation function
-* (e.g. written in C).
-
-* Inheritance:
-* The IntraMap class inherits from the Mapping class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* IntraFlag
-* IntraMap identification string.
-
-* Methods Over-Ridden:
-* Public:
-* None.
-*
-* Protected:
-* astMapMerge
-* Simplify a sequence of Mappings containing an IntraMap.
-* astTransform
-* Transform a set of points using an IntraMap.
-
-* New Methods Defined:
-* Public:
-* None.
-*
-* Protected:
-* astClearIntraFlag
-* Clear the IntraFlag attribute for an IntraMap.
-* astGetIntraFlag
-* Get the value of the IntraFlag attribute for an IntraMap.
-* astSetIntraFlag
-* Set the value of the IntraFlag attribute for an IntraMap.
-* astTestIntraFlag
-* Test whether a value has been set for the IntraFlag attribute of
-* an IntraMap.
-
-* Other Class Functions:
-* Public:
-* astIntraMap
-* Create an IntraMap.
-* astIntraReg
-* Register a transformation function for use by an IntraMap.
-* astIsAIntraMap
-* Test class membership.
-*
-* Protected:
-* astCheckIntraMap
-* Validate class membership.
-* astInitIntraMap
-* Initialise an IntraMap.
-* astLoadIntraMap
-* Load an IntraMap.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstIntraMap
-* IntraMap object type.
-*
-* Protected:
-* AstIntraMapVtab
-* IntraMap virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 24-MAR-1998 (RFWS):
-* Original version.
-* 16-SEP-1999 (RFWS):
-* Added the IntraFlag attribute and added a Mapping pointer as a new
-* first argument to transformation functions.
-* 8-JAN-2003 (DSB):
-* Added protected astInitIntraMapVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macro Definitions. */
-/* ================== */
-#define AST__NOFWD (1U) /* No forward transformation defined */
-#define AST__NOINV (2U) /* No inverse transformation defined */
-#define AST__SIMPFI (4U) /* Forward-inverse may be simplified */
-#define AST__SIMPIF (8U) /* Inverse-forward may be simplified */
-
-#define AST__ANY (-66) /* Allow any number of input/output coords */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* IntraMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstIntraMap {
-
-/* Attributes inherited from the parent class. */
- AstMapping mapping; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- char *intraflag; /* Pointer to identification string */
- int ifun; /* Transformation function index */
-} AstIntraMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstIntraMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstMappingVtab mapping_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- const char *(* GetIntraFlag)( AstIntraMap *, int * );
- int (* TestIntraFlag)( AstIntraMap *, int * );
- void (* ClearIntraFlag)( AstIntraMap *, int * );
- void (* SetIntraFlag)( AstIntraMap *, const char *, int * );
-} AstIntraMapVtab;
-
-
-/* Structure to hold data for transformation functions. */
-typedef struct AstIntraMapTranData {
- void (* tran)( AstMapping *, int, int, const double *[], int, int, double *[] );
- /* Pointer to transformation function */
- void (* tran_wrap)( void (*)( AstMapping *, int, int, const double *[], int, int, double *[] ), AstMapping *, int, int, const double *[], int, int, double *[], int * );
- /* Pointer to wrapper function */
- char *author; /* Author's name */
- char *contact; /* Contact details (e.g. e-mail address) */
- char *name; /* Function name (assigned by caller) */
- char *purpose; /* Comment string describing purpose */
- int nin; /* Number of input coordinates per point */
- int nout; /* Number of output coordinates per point */
- unsigned int flags; /* Flags to describe function behaviour */
-} AstIntraMapTranData;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstIntraMapGlobals {
- AstIntraMapVtab Class_Vtab;
- int Class_Init;
-} AstIntraMapGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(IntraMap) /* Check class membership */
-astPROTO_ISA(IntraMap) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstIntraMap *astIntraMap_( const char *, int, int, const char *, int *, ...);
-#else
-AstIntraMap *astIntraMapId_( const char *, int, int, const char *, ... )__attribute__((format(printf,4,5)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstIntraMap *astInitIntraMap_( void *, size_t, int, AstIntraMapVtab *,
- const char *, const char *, int, int, int * );
-
-/* Vtab initialiser. */
-void astInitIntraMapVtab_( AstIntraMapVtab *, const char *, int * );
-
-/* Loader. */
-AstIntraMap *astLoadIntraMap_( void *, size_t, AstIntraMapVtab *,
- const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitIntraMapGlobals_( AstIntraMapGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-void astIntraReg_( const char *, int, int, void (*)( AstMapping *, int, int, const double *[], int, int, double *[] ), unsigned int, const char *, const char *, const char *, int * );
-
-#if defined(astCLASS) /* Protected */
-const char *astGetIntraFlag_( AstIntraMap *, int * );
-int astTestIntraFlag_( AstIntraMap *, int * );
-void astClearIntraFlag_( AstIntraMap *, int * );
-void astSetIntraFlag_( AstIntraMap *, const char *, int * );
-
-#else /* Public only */
-void astIntraRegFor_( const char *, int, int, void (*)( AstMapping *, int, int, const double *[], int, int, double *[] ), void (*)( void (*)( AstMapping *, int, int, const double *[], int, int, double *[]), AstMapping *, int, int, const double *[], int, int, double *[], int * ), unsigned int, const char *, const char *, const char *, int * );
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckIntraMap(this) astINVOKE_CHECK(IntraMap,this,0)
-#define astVerifyIntraMap(this) astINVOKE_CHECK(IntraMap,this,1)
-
-/* Test class membership. */
-#define astIsAIntraMap(this) astINVOKE_ISA(IntraMap,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astIntraMap astINVOKE(F,astIntraMap_)
-#else
-#define astIntraMap astINVOKE(F,astIntraMapId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitIntraMap(mem,size,init,vtab,name,fname,nin,nout) \
-astINVOKE(O,astInitIntraMap_(mem,size,init,vtab,name,fname,nin,nout,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitIntraMapVtab(vtab,name) astINVOKE(V,astInitIntraMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadIntraMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadIntraMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckIntraMap to validate IntraMap pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#define astIntraReg(name,nin,nout,tran,flags,purpose,author,contact) \
-astIntraReg_(name,nin,nout,tran,flags,purpose,author,contact,STATUS_PTR)
-
-#if defined(astCLASS) /* Protected */
-#define astClearIntraFlag(this) \
-astINVOKE(V,astClearIntraFlag_(astCheckIntraMap(this),STATUS_PTR))
-#define astGetIntraFlag(this) \
-astINVOKE(V,astGetIntraFlag_(astCheckIntraMap(this),STATUS_PTR))
-#define astSetIntraFlag(this,value) \
-astINVOKE(V,astSetIntraFlag_(astCheckIntraMap(this),value,STATUS_PTR))
-#define astTestIntraFlag(this) \
-astINVOKE(V,astTestIntraFlag_(astCheckIntraMap(this),STATUS_PTR))
-
-#else /* Public only */
-#define astIntraRegFor(name,nin,nout,tran,tran_wrap,flags,purpose,author,contact) \
-astIntraRegFor_(name,nin,nout,tran,tran_wrap,flags,purpose,author,contact,STATUS_PTR)
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/keymap.c b/ast-5.3-1/keymap.c
deleted file mode 100644
index d369afd..0000000
--- a/ast-5.3-1/keymap.c
+++ /dev/null
@@ -1,6914 +0,0 @@
-/*
-*class++
-* Name:
-* KeyMap
-
-* Purpose:
-* Store a set of key/value pairs.
-
-* Constructor Function:
-c astKeyMap
-f AST_KEYMAP
-
-* Description:
-* The KeyMap class is used to store a set of values with associated keys
-* which identify the values. The keys are strings (case-sensitive,
-* trailing spaces are ignored), and the data type of the values can be
-* integer, floating point,
-c void pointer,
-* character string or AST Object pointer. Each
-* value can be a scalar or a one-dimensional vector. A KeyMap is
-* conceptually similar to a Mapping in that a KeyMap transforms an
-* input into an output - the input is the key, and the output is the
-* value associated with the key. However, this is only a conceptual
-* similarity, and it should be noted that the KeyMap class inherits from
-* the Object class rather than the Mapping class. The methods of the
-* Mapping class cannot be used with a KeyMap.
-
-* Inheritance:
-* The KeyMap class inherits from the Object class.
-
-* Attributes:
-* In addition to those attributes common to all Objects, every
-* KeyMap also has the following attributes:
-*
-* - KeyError: Report an error if the requested key does not exist?
-* - SizeGuess: The expected size of the KeyMap.
-
-* Functions:
-c In addition to those functions applicable to all Objects, the
-c following functions may also be applied to all KeyMaps:
-f In addition to those routines applicable to all Objects, the
-f following routines may also be applied to all KeyMaps:
-*
-c - astMapGet0<X>: Get a named scalar entry from a KeyMap
-c - astMapGet1<X>: Get a named vector entry from a KeyMap
-c - astMapGetElem<X>: Get an element of a named vector entry from a KeyMap
-c - astMapHasKey: Does the KeyMap contain a named entry?
-c - astMapKey: Return the key name at a given index in the KeyMap
-c - astMapLenC: Get the length of a named character entry in a KeyMap
-c - astMapLength: Get the length of a named entry in a KeyMap
-c - astMapPut0<X>: Add a new scalar entry to a KeyMap
-c - astMapPut1<X>: Add a new vector entry to a KeyMap
-c - astMapRemove: Removed a named entry from a KeyMap
-c - astMapSize: Get the number of entries in a KeyMap
-c - astMapType: Return the data type of a named entry in a map.
-f - AST_MAPGET0<X>: Get a named scalar entry from a KeyMap
-f - AST_MAPGET1<X>: Get a named vector entry from a KeyMap
-f - AST_MAPGETELEM<X>: Get an element of a named vector entry from a KeyMap
-f - AST_MAPHASKEY: Does the KeyMap contain a named entry?
-f - AST_MAPKEY: Return the key name at a given index in the KeyMap
-f - AST_MAPLENC: Get the length of a named character entry in a KeyMap
-f - AST_MAPLENGTH: Get the length of a named entry in a KeyMap
-f - AST_MAPPUT0<X>: Add a new scalar entry to a KeyMap
-f - AST_MAPPUT1<X>: Add a new vector entry to a KeyMap
-f - AST_MAPREMOVE: Removed a named entry from a KeyMap
-f - AST_MAPSIZE: Get the number of entries in a KeyMap
-f - AST_MAPTYPE: Return the data type of a named entry in a map.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2008 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: B.S. Berry (Starlink)
-
-* History:
-* 12-NOV-2004 (DSB):
-* Original version.
-* 5-JAN-2005 (DSB):
-* Added astMapLenC method.
-* 17-JAN-2005 (DSB):
-* Remove "void *" arithmetic.
-* 25-JAN-2005 (DSB):
-* Added more DEBUG blocks
-* 30-SEP-2005 (DSB):
-* Allow an integer to be read from a formatted floating point value.
-* 6-DEC-2005 (DSB):
-* Remove astMapGet0C stuff from description of astMapGet1C.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 1-MAR-2006 (DSB):
-* Replace astSetPermMap within DEBUG blocks by astBeginPM/astEndPM.
-* 5-JUN-2006 (DSB):
-* Added support for single precision entries.
-* 30-NOV-2007 (DSB):
-* Added SizeGuess attribute.
-* 4-DEC-2007 (DSB):
-* Allow size of hash table to grow dynamically as more entries are
-* added to the KeyMap.
-* 5-DEC-2007 (DSB):
-* Ensure mapsize is always a power of 2.
-* 6-DEC-2007 (DSB):
-* - Define the minium table size rather than the default SizeGuess
-* value, and derive the default SizeGuess value from the minimum
-* table size.
-* - Use "&" rather than "%" to get the hash table index from the
-* full width hash value (& may be faster than %).
-* 7-MAR-2008 (DSB):
-* Added support for pointer ("P") entries.
-* 31-MAR-2009 (DSB):
-* Remove rounding errors from formatted double values.
-* 27-APR-2009 (DSB):
-* Added astMapGetElem<X>.
-* 1-SEP-2009 (DSB):
-* Added KeyError attribute.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS KeyMap
-
-/* Minimum size for the hash table. */
-#define MIN_TABLE_SIZE 16
-
-/* The maximum number of entries per element of the hash table. If this
- value is exceeded the hash table will be doubled in size. */
-#define MAX_ENTRIES_PER_TABLE_ENTRY 10
-
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory management facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* For AST__BAD */
-#include "channel.h" /* I/O channels */
-#include "keymap.h" /* Interface definition for this class */
-#include "globals.h" /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <limits.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Type Definitions */
-/* ================ */
-
-/* This structure is a AstMapEntry holding a scalar int */
-typedef struct Entry0I {
- struct AstMapEntry entry; /* The parent Entry information */
- int value; /* The integer value */
-} Entry0I;
-
-/* This structure is a AstMapEntry holding a scalar double */
-typedef struct Entry0D {
- struct AstMapEntry entry; /* The parent Entry information */
- double value; /* The floating point value */
-} Entry0D;
-
-/* This structure is a AstMapEntry holding a scalar float */
-typedef struct Entry0F {
- struct AstMapEntry entry; /* The parent Entry information */
- float value; /* The floating point value */
-} Entry0F;
-
-/* This structure is a AstMapEntry holding a scalar string */
-typedef struct Entry0C {
- struct AstMapEntry entry; /* The parent Entry information */
- const char *value; /* The string pointer */
-} Entry0C;
-
-/* This structure is a AstMapEntry holding a scalar AST Object */
-typedef struct Entry0A {
- struct AstMapEntry entry; /* The parent Entry information */
- AstObject *value; /* The Object pointer */
-} Entry0A;
-
-/* This structure is a AstMapEntry holding a scalar void pointer */
-typedef struct Entry0P {
- struct AstMapEntry entry; /* The parent Entry information */
- void *value; /* The pointer */
-} Entry0P;
-
-/* This structure is a AstMapEntry holding a 1D array of ints */
-typedef struct Entry1I {
- struct AstMapEntry entry; /* The parent Entry information */
- int *value; /* The integer values */
-} Entry1I;
-
-/* This structure is a AstMapEntry holding a 1D array of doubles */
-typedef struct Entry1D {
- struct AstMapEntry entry; /* The parent Entry information */
- double *value; /* The floating point values */
-} Entry1D;
-
-/* This structure is a AstMapEntry holding a 1D array of floats */
-typedef struct Entry1F {
- struct AstMapEntry entry; /* The parent Entry information */
- float *value; /* The floating point values */
-} Entry1F;
-
-/* This structure is a AstMapEntry holding a 1D array of strings */
-typedef struct Entry1C {
- struct AstMapEntry entry; /* The parent Entry information */
- const char **value; /* The string pointers */
-} Entry1C;
-
-/* This structure is a AstMapEntry holding a 1D array of AST Objects */
-typedef struct Entry1A {
- struct AstMapEntry entry; /* The parent Entry information */
- AstObject **value; /* The Object pointers */
-} Entry1A;
-
-/* This structure is a AstMapEntry holding a 1D array of void pointers. */
-typedef struct Entry1P {
- struct AstMapEntry entry; /* The parent Entry information */
- void **value; /* The pointers */
-} Entry1P;
-
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->GetAttrib_Buff[ 0 ] = 0; \
- globals->ConvertValue_Init = 0; \
- globals->ConvertValue_Istr = 0; \
- globals->ConvertValue_Buff[ 0 ] = 0; \
- globals->MapKey_Init = 0; \
- globals->MapKey_Istr = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(KeyMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(KeyMap,Class_Init)
-#define class_vtab astGLOBAL(KeyMap,Class_Vtab)
-#define getattrib_buff astGLOBAL(KeyMap,GetAttrib_Buff)
-#define convertvalue_strings astGLOBAL(KeyMap,ConvertValue_Strings)
-#define convertvalue_istr astGLOBAL(KeyMap,ConvertValue_Istr)
-#define convertvalue_init astGLOBAL(KeyMap,ConvertValue_Init)
-#define convertvalue_buff astGLOBAL(KeyMap,ConvertValue_Buff)
-#define mapkey_strings astGLOBAL(KeyMap,MapKey_Strings)
-#define mapkey_istr astGLOBAL(KeyMap,MapKey_Istr)
-#define mapkey_init astGLOBAL(KeyMap,MapKey_Init)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-/* Buffer returned by GetAttrib. */ \
-static char getattrib_buff[ AST__KEYMAP_GETATTRIB_BUFF_LEN + 1 ];
-
-/* Strings returned by ConvertValue */ \
-static char *convertvalue_strings[ AST__KEYMAP_CONVERTVALUE_MAX_STRINGS ];
-
-/* Offset of next string in "ConvertValue_Strings" */ \
-static int convertvalue_istr;
-
-/* "ConvertValue_Strings" array initialised? */ \
-static int convertvalue_init;
-
-/* ConvertValue string buffer */ \
-static char convertvalue_buff[ AST__KEYMAP_CONVERTVALUE_BUFF_LEN + 1 ];
-
-/* Strings returned by MapKey */ \
-static char *mapkey_strings[ AST__KEYMAP_MAPKEY_MAX_STRINGS ];
-
-/* Offset of next string in "MapKey_Strings" */ \
-static int mapkey_istr;
-
-/* "MapKey_Strings" array initialised? */ \
-static int mapkey_init;
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstKeyMapVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstKeyMap *astKeyMapId_( const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMapEntry *AddTableEntry( AstKeyMap *, int, AstMapEntry *, int * );
-static AstMapEntry *CopyMapEntry( AstMapEntry *, int * );
-static AstMapEntry *FreeMapEntry( AstMapEntry *, int * );
-static AstMapEntry *SearchTableEntry( AstKeyMap *, int, const char *, int * );
-static const char *GetKey( AstKeyMap *, int index, int * );
-static const char *MapKey( AstKeyMap *, int index, int * );
-static int ConvertValue( void *, int, void *, int, int * );
-static int GetObjSize( AstObject *, int * );
-static int HashFun( const char *, int, unsigned long *, int * );
-static int KeyCmp( const char *, const char *, int * );
-static int MapGet0P( AstKeyMap *, const char *, void **, int * );
-static int MapGet0A( AstKeyMap *, const char *, AstObject **, int * );
-static int MapGet0C( AstKeyMap *, const char *, const char **, int * );
-static int MapGet0D( AstKeyMap *, const char *, double *, int * );
-static int MapGet0F( AstKeyMap *, const char *, float *, int * );
-static int MapGet0I( AstKeyMap *, const char *, int *, int * );
-static int MapGet1A( AstKeyMap *, const char *, int, int *, AstObject **, int * );
-static int MapGet1P( AstKeyMap *, const char *, int, int *, void **, int * );
-static int MapGet1C( AstKeyMap *, const char *, int, int, int *, char *, int * );
-static int MapGet1D( AstKeyMap *, const char *, int, int *, double *, int * );
-static int MapGet1F( AstKeyMap *, const char *, int, int *, float *, int * );
-static int MapGet1I( AstKeyMap *, const char *, int, int *, int *, int * );
-static int MapGetElemA( AstKeyMap *, const char *, int, AstObject **, int * );
-static int MapGetElemP( AstKeyMap *, const char *, int, void **, int * );
-static int MapGetElemC( AstKeyMap *, const char *, int, int, char *, int * );
-static int MapGetElemD( AstKeyMap *, const char *, int, double *, int * );
-static int MapGetElemF( AstKeyMap *, const char *, int, float *, int * );
-static int MapGetElemI( AstKeyMap *, const char *, int, int *, int * );
-static int MapHasKey( AstKeyMap *, const char *, int * );
-static int MapLenC( AstKeyMap *, const char *, int * );
-static int MapLength( AstKeyMap *, const char *, int * );
-static int MapSize( AstKeyMap *, int * );
-static int MapType( AstKeyMap *, const char *, int * );
-static size_t SizeOfEntry( AstMapEntry *, int * );
-static void CheckCircle( AstKeyMap *, AstObject *, const char *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void CopyTableEntry( AstKeyMap *, AstKeyMap *, int, int * );
-static void Delete( AstObject *, int * );
-static void DoubleTableSize( AstKeyMap *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void DumpEntry( AstMapEntry *, AstChannel *, int, int * );
-static void FreeTableEntry( AstKeyMap *, int itab, int * );
-static void MapPut0A( AstKeyMap *, const char *, AstObject *, const char *, int * );
-static void MapPut0P( AstKeyMap *, const char *, void *, const char *, int * );
-static void MapPut0C( AstKeyMap *, const char *, const char *, const char *, int * );
-static void MapPut0D( AstKeyMap *, const char *, double, const char *, int * );
-static void MapPut0F( AstKeyMap *, const char *, float, const char *, int * );
-static void MapPut0I( AstKeyMap *, const char *, int, const char *, int * );
-static void MapPut1P( AstKeyMap *, const char *, int, void *const [], const char *, int * );
-static void MapPut1A( AstKeyMap *, const char *, int, AstObject *const [], const char *, int * );
-static void MapPut1C( AstKeyMap *, const char *, int, const char *const [], const char *, int * );
-static void MapPut1D( AstKeyMap *, const char *, int, const double *, const char *, int * );
-static void MapPut1F( AstKeyMap *, const char *, int, const float *, const char *, int * );
-static void MapPut1I( AstKeyMap *, const char *, int, const int *, const char *, int * );
-static void MapRemove( AstKeyMap *, const char *, int * );
-static void NewTable( AstKeyMap *, int, int * );
-static void RemoveTableEntry( AstKeyMap *, int, const char *, int * );
-
-static const char *GetAttrib( AstObject *, const char *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-
-static int GetSizeGuess( AstKeyMap *, int * );
-static int TestSizeGuess( AstKeyMap *, int * );
-static void ClearSizeGuess( AstKeyMap *, int * );
-static void SetSizeGuess( AstKeyMap *, int, int * );
-
-static int GetKeyError( AstKeyMap *, int * );
-static int TestKeyError( AstKeyMap *, int * );
-static void ClearKeyError( AstKeyMap *, int * );
-static void SetKeyError( AstKeyMap *, int, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Member functions. */
-/* ================= */
-static AstMapEntry *AddTableEntry( AstKeyMap *this, int itab, AstMapEntry *entry, int *status ){
-/*
-* Name:
-* AddTableEntry
-
-* Purpose:
-* Add an new entry to a linked-list of KeyMap entries.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "keymap.h"
-* AstMapEntry *AddTableEntry( AstKeyMap *this, int itab, AstMapEntry *entry, int *status )
-
-* Class Membership:
-* KeyMap member function.
-
-* Description:
-* This function adds the supplied MapEntry to the head of the linked
-* list of MapEntries stored at the specified entry of the hash table.
-* If this results in the linked list having too many entries, then a
-* new larger hash table is allocated and the entries in the existing
-* table are moved into the new table.
-
-* Parameters:
-* this
-* Pointer to the KeyMap.
-* itab
-* Index of the hash table element to be searched.
-* entry
-* Pointer to the MapEntry to be added.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A NULL pointer.
-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Put a pointer to the MapEntry which is currently at the head of the
- linked list in the "next" component of the supplied MapEntry. */
- entry->next = this->table[ itab ];
-
-/* Store the supplied MapEntry pointer in the requested element of the
- hash table. */
- this->table[ itab ] = entry;
-
-/* Increment the length of linked list. */
- this->nentry[ itab ]++;
-
-/* If the population of this table entry is now too large, duble the size
- of the table, moving the table entries to appropriate places in the
- new larger table. */
- if( this->nentry[ itab ] > MAX_ENTRIES_PER_TABLE_ENTRY ) {
- DoubleTableSize( this, status );
- }
-
-/* Return a NULL pointer. */
- return NULL;
-}
-
-static void CheckCircle( AstKeyMap *this, AstObject *obj, const char *method, int *status ) {
-/*
-* Name:
-* CheckCircle
-
-* Purpose:
-* Check for circular dependencies between KeyMaps.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "keymap.h"
-* void CheckCircle( AstKeyMap *this, AstObject *obj, const char *method, int *status )
-
-* Class Membership:
-* KeyMap member function.
-
-* Description:
-* This function checks that the given AstObject is not a KeyMap which
-* contains "this". If it is, an error is reported.
-
-* Parameters:
-* this
-* The KeyMap pointer.
-* obj
-* Pointer to the AstObject to be inserted into the KeyMap, or NULL.
-* method
-* Name of method to include in error messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstKeyMap *keymap; /* The KeyMap being added to "this" */
- AstObject **vec; /* Pointer to list of AstObject pointers */
- const char *key; /* The i'th key within second KeyMap */
- int i; /* Index of entry within second KeyMap */
- int j; /* Index within the vector of values */
- int len; /* No. of AST pointers stored in the entry */
- int nkey; /* No. of entries in the second KeyMap */
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Return if the AstObject is not a KeyMap. */
- if( obj && astIsAKeyMap( obj ) ) {
- keymap = (AstKeyMap *) obj;
-
-/* Loop through all the entries in the KeyMap looking for AstObject
- entries. */
- nkey = astMapSize( keymap );
- for( i = 0; i < nkey && astOK; i++ ) {
- key = astMapKey( keymap, i );
- if( astMapType( keymap, key ) == AST__OBJECTTYPE ) {
-
-/* Find the number of AstObject pointers stored in this entry, and
- allocate memory to store a copy of the every pointer. */
- len = astMapLength( keymap, key );
- vec = astMalloc( sizeof( AstObject *) * len );
- if( vec ) {
-
-/* Extract pointers to the AstObjects at this entry, and loop round them. */
- astMapGet1A( keymap, key, len, &len, vec );
- for( j = 0; j < len; j++ ) {
-
-/* If this entry is a KeyMap, we need to check if is the same as "this"
- or contains "this". */
- if( astIsAKeyMap( vec[ j ] ) ) {
-
-/* If it is the same as "this", report an error. */
- if( vec[ j ] == (AstObject *) this ) {
- astError( AST__KYCIR, "%s(%s): Cannot add a KeyMap "
- "into another KeyMap because the first "
- "KeyMap contains the second KeyMap.", status,
- method, astGetClass( this ) );
- break;
-
-/* Otherwise, see if it contains "this". */
- } else {
- CheckCircle( this, vec[ j ], method, status );
- }
- }
-
-/* Free resources. */
- vec[ j ] = astAnnul( vec[ j ] );
- }
- vec = astFree( vec );
- }
- }
- }
- }
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a KeyMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "keymap.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* KeyMap member function (over-rides the astClearAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* KeyMap, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the KeyMap.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstKeyMap *this; /* Pointer to the KeyMap structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the KeyMap structure. */
- this = (AstKeyMap *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* SizeGuess. */
-/* ---------- */
- if ( !strcmp( attrib, "sizeguess" ) ) {
- astClearSizeGuess( this );
-
-/* KeyError. */
-/* --------- */
- } else if ( !strcmp( attrib, "keyerror" ) ) {
- astClearKeyError( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static void ClearSizeGuess( AstKeyMap *this, int *status ) {
-/*
-*+
-* Name:
-* astClearSizeGuess
-
-* Purpose:
-* Clear the value of the SizeGuess attribute for a KeyMap.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "keymap.h"
-* void astClearSizeGuess( AstKeyMap *this )
-
-* Class Membership:
-* KeyMap method.
-
-* Description:
-* This function clears the value of the SizeGuess attribute for a
-* KeyMap. It reports an error if the KeyMap contains any entries.
-
-* Parameters:
-* this
-* Pointer to the KeyMap.
-
-*-
-*/
-
-/* Local Variables: */
- int empty; /* Is the KeyMap empty? */
- int itab; /* Index into hash table */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* See if the KeyMap is empty. */
- empty = 1;
- for( itab = 0; itab < this->mapsize; itab++ ) {
- if( this->nentry[ itab ] > 0 ) {
- empty = 0;
- break;
- }
- }
-
-/* If not report an error. */
- if( !empty ) {
- astError( AST__NOWRT, "astClearAttrib(KeyMap): Illegal attempt to "
- "clear the SizeGuess attribute of a non-empty KeyMap." , status);
-
-/* Otherwise, store the "cleared" value and change the size of the hash
- table. */
- } else {
- this->sizeguess = INT_MAX;
- NewTable( this, MIN_TABLE_SIZE, status );
- }
-}
-
-static int ConvertValue( void *raw, int raw_type, void *out, int out_type, int *status ) {
-/*
-* Name:
-* ConvertValue
-
-* Purpose:
-* Convert a value from one KeyMap data type to another.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "keymap.h"
-* int ConvertValue( void *raw, int raw_type, void *out, int out_type, int *status )
-
-* Class Membership:
-* KeyMap member function.
-
-* Description:
-* This function converts a supplied value from one KeyMap data type to
-* another, if possible.
-
-* Parameters:
-* raw
-* Pointer to input value.
-* raw_type
-* The data type of the input value.
-* out
-* Pointer to the location at which to store the output value. This
-* may be NULL, in which case the conversion is still performed if
-* possible, but the result of the conversion is thrown away.
-* out_type
-* The data type of the output value.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the conversion was performed succesfully, otherwise zero.
-* In the case of the output type being AST__STRINGTYPE, the returned
-* non-zero value will be the length of the formatted string (not including
-* the terminating null character). This value will be returned correctly
-* even if "out" is NULL.
-
-* Notes:
-* - Zero will be returned if this function is invoked with the global
-* error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstObject *aval; /* AstObject pointer value */
- const char *cval; /* Pointer to string value */
- const char *cvalue; /* Pointer to output string value */
- double dval; /* Double precision value */
- float fval; /* Single precision value */
- int ival; /* Integer value */
- int i; /* Loop count */
- int n1; /* Number of characters at reduced precision */
- int n2; /* Number of characters at full precision */
- int nc; /* Number of characters read from string */
- int nval; /* Number of values read from string */
- int result; /* Returned flag */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status and the supplied pointers. */
- if( !astOK || !raw ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(NULL);
-
-/* If the "convertvalue_strings" array has not been initialised, fill it with
- NULL pointers. */
- if( !convertvalue_init ) {
- convertvalue_init = 1;
- for( i = 0; i < AST__KEYMAP_CONVERTVALUE_MAX_STRINGS; i++ ) convertvalue_strings[ i ] = NULL;
- }
-
-/* Assume conversion is possible */
- result = 1;
- cvalue = NULL;
-
-/* Consider conversion from "int". */
- if( raw_type == AST__INTTYPE ) {
- ival = *( (int *) raw );
-
-/* Consider conversion to "int". */
- if( out_type == AST__INTTYPE ) {
- if( out ) *( (int *) out ) = ival;
-
-/* Consider conversion to "float". */
- } else if( out_type == AST__FLOATTYPE ) {
- if( out ) *( (float *) out ) = (float) ival;
-
-/* Consider conversion to "double". */
- } else if( out_type == AST__DOUBLETYPE ) {
- if( out ) *( (double *) out ) = (double) ival;
-
-/* Consider conversion to "const char *". */
- } else if( out_type == AST__STRINGTYPE ) {
- (void) sprintf( convertvalue_buff, "%d", ival );
- cvalue = convertvalue_buff;
-
-/* Consider conversion to "AstObject *". */
- } else if( out_type == AST__OBJECTTYPE ) {
- result = 0;
-
-/* Consider conversion to "void *". */
- } else if( out_type == AST__POINTERTYPE ) {
- result = 0;
-
-/* Report an error if the data type is unknown. */
- } else {
- result = 0;
- astError( AST__INTER, "ConvertValue(KeyMap): Illegal map entry data "
- "type %d encountered (internal AST programming error).", status,
- out_type );
- }
-
-/* Consider conversion from "double". */
- } else if( raw_type == AST__DOUBLETYPE ) {
- dval = *( (double *) raw );
-
-/* Consider conversion to "int". */
- if( out_type == AST__INTTYPE ) {
- if( out ) *( (int *) out ) = (int)( dval + 0.5 );
-
-/* Consider conversion to "double". */
- } else if( out_type == AST__DOUBLETYPE ) {
- if( out ) *( (double *) out ) = dval;
-
-/* Consider conversion to "float". */
- } else if( out_type == AST__FLOATTYPE ) {
- if( out ) *( (float *) out ) = (float) dval;
-
-/* Consider conversion to "const char *". If reducing the number of
- decimal places by two produces a saving of 10 or more characters,
- assume the least significant two characters are rounding error. */
- } else if( out_type == AST__STRINGTYPE ) {
- n1 = sprintf( convertvalue_buff, "%.*g", DBL_DIG - 2, dval );
- n2 = sprintf( convertvalue_buff, "%.*g", DBL_DIG, dval );
- if( n2 - n1 > 9 ) {
- (void) sprintf( convertvalue_buff, "%.*g", DBL_DIG - 2, dval );
- }
- cvalue = convertvalue_buff;
-
-/* Consider conversion to "AstObject *". */
- } else if( out_type == AST__OBJECTTYPE ) {
- result = 0;
-
-/* Consider conversion to "void *". */
- } else if( out_type == AST__POINTERTYPE ) {
- result = 0;
-
-/* Report an error if the data type is unknown. */
- } else {
- result = 0;
- astError( AST__INTER, "ConvertValue(KeyMap): Illegal map entry data "
- "type %d encountered (internal AST programming error).", status,
- out_type );
- }
-
-/* Consider conversion from "float". */
- } else if( raw_type == AST__FLOATTYPE ) {
- fval = *( (float *) raw );
-
-/* Consider conversion to "int". */
- if( out_type == AST__INTTYPE ) {
- if( out ) *( (int *) out ) = (int)( fval + 0.5 );
-
-/* Consider conversion to "double". */
- } else if( out_type == AST__DOUBLETYPE ) {
- if( out ) *( (double *) out ) = (double) fval;
-
-/* Consider conversion to "float". */
- } else if( out_type == AST__FLOATTYPE ) {
- if( out ) *( (float *) out ) = fval;
-
-/* Consider conversion to "const char *". */
- } else if( out_type == AST__STRINGTYPE ) {
- (void) sprintf( convertvalue_buff, "%.*g", FLT_DIG, fval );
- cvalue = convertvalue_buff;
-
-/* Consider conversion to "AstObject *". */
- } else if( out_type == AST__OBJECTTYPE ) {
- result = 0;
-
-/* Consider conversion to "void *". */
- } else if( out_type == AST__POINTERTYPE ) {
- result = 0;
-
-/* Report an error if the data type is unknown. */
- } else {
- result = 0;
- astError( AST__INTER, "ConvertValue(KeyMap): Illegal map entry data "
- "type %d encountered (internal AST programming error).", status,
- out_type );
- }
-
-/* Consider conversion from "const char *". */
- } else if( raw_type == AST__STRINGTYPE ) {
- cval = *( (const char **) raw );
-
-/* Consider conversion to "int". */
- if( out_type == AST__INTTYPE ) {
- nc = 0;
- nval = astSscanf( cval, " %d %n", &ival, &nc );
- if( ( nval == 1 ) && ( nc >= (int) strlen( cval ) ) ) {
- if( out ) *( (int *) out ) = ival;
- } else {
- nc = 0;
- nval = astSscanf( cval, " %lf %n", &dval, &nc );
- if( ( nval == 1 ) && ( nc >= (int) strlen( cval ) ) ) {
- if( out ) *( (int *) out ) = (int) ( dval + 0.5 );
- } else {
- result = 0;
- }
- }
-
-/* Consider conversion to "double". */
- } else if( out_type == AST__DOUBLETYPE ) {
- nc = 0;
- nval = astSscanf( cval, " %lf %n", &dval, &nc );
- if( ( nval == 1 ) && ( nc >= (int) strlen( cval ) ) ) {
- if( out ) *( (double *) out ) = dval;
- } else {
- result = 0;
- }
-
-/* Consider conversion to "float". */
- } else if( out_type == AST__FLOATTYPE ) {
- nc = 0;
- nval = astSscanf( cval, " %f %n", &fval, &nc );
- if( ( nval == 1 ) && ( nc >= (int) strlen( cval ) ) ) {
- if( out ) *( (float *) out ) = fval;
- } else {
- result = 0;
- }
-
-/* Consider conversion to "const char *". */
- } else if( out_type == AST__STRINGTYPE ) {
- cvalue = cval;
-
-/* Consider conversion to "AstObject *". */
- } else if( out_type == AST__OBJECTTYPE ) {
- result = 0;
-
-/* Consider conversion to "void *". */
- } else if( out_type == AST__POINTERTYPE ) {
- result = 0;
-
-/* Report an error if the data type is unknown. */
- } else {
- result = 0;
- astError( AST__INTER, "ConvertValue(KeyMap): Illegal map entry data "
- "type %d encountered (internal AST programming error).", status,
- out_type );
- }
-
-/* Consider conversion from "AstObject *". */
- } else if( raw_type == AST__OBJECTTYPE ) {
-
-/* Consider conversion to "int". */
- if( out_type == AST__INTTYPE ) {
- result = 0;
-
-/* Consider conversion to "double". */
- } else if( out_type == AST__DOUBLETYPE ) {
- result = 0;
-
-/* Consider conversion to "float". */
- } else if( out_type == AST__FLOATTYPE ) {
- result = 0;
-
-/* Consider conversion to "const char *". */
- } else if( out_type == AST__STRINGTYPE ) {
- result = 0;
-
-/* Consider conversion to "AstObject *". */
- } else if( out_type == AST__OBJECTTYPE ) {
- aval = *( (AstObject **) raw );
- if( out ) *( (AstObject **) out ) = aval ? astClone( aval ) : NULL;
-
-/* Consider conversion to "void *". */
- } else if( out_type == AST__POINTERTYPE ) {
- result = 0;
-
-/* Report an error if the data type is unknown. */
- } else {
- result = 0;
- astError( AST__INTER, "ConvertValue(KeyMap): Illegal map entry data "
- "type %d encountered (internal AST programming error).", status,
- out_type );
- }
-
-/* Consider conversion from "void *". */
- } else if( raw_type == AST__POINTERTYPE ) {
-
-/* Consider conversion to "int". */
- if( out_type == AST__INTTYPE ) {
- result = 0;
-
-/* Consider conversion to "double". */
- } else if( out_type == AST__DOUBLETYPE ) {
- result = 0;
-
-/* Consider conversion to "float". */
- } else if( out_type == AST__FLOATTYPE ) {
- result = 0;
-
-/* Consider conversion to "const char *". */
- } else if( out_type == AST__STRINGTYPE ) {
- result = 0;
-
-/* Consider conversion to "AstObject *". */
- } else if( out_type == AST__OBJECTTYPE ) {
- result = 0;
-
-/* Consider conversion to "void *". */
- } else if( out_type == AST__POINTERTYPE ) {
- if( out ) *( (void **) out ) = *( (void **) raw );
-
-/* Report an error if the data type is unknown. */
- } else {
- result = 0;
- astError( AST__INTER, "ConvertValue(KeyMap): Illegal map entry data "
- "type %d encountered (internal AST programming error).", status,
- out_type );
- }
-
-/* Report an error if the data type is unknown. */
- } else {
- result = 0;
- astError( AST__INTER, "ConvertValue(KeyMap): Illegal map entry data "
- "type %d encountered (internal AST programming error).", status,
- raw_type );
- }
-
-/* If the output is a string, store a copy of the resulting string in
- dynamically allocated memory, putting a pointer to the copy into the next
- element of the "convertvalue_strings" array. (This process also de-allocates
- any previously allocated memory pointed at by this "convertvalue_strings"
- element, so the earlier string is effectively replaced by the new
- one.) */
- if( out_type == AST__STRINGTYPE && astOK && result && cvalue ) {
- result = strlen( cvalue );
-
- astBeginPM;
- convertvalue_strings[ convertvalue_istr ] = astStore( convertvalue_strings[ convertvalue_istr ], cvalue,
- (size_t) ( result + 1 ) );
- astEndPM;
-
-/* If OK, return a pointer to the copy and increment "convertvalue_istr" to use the
- next element of "convertvalue_strings" on the next invocation. Recycle "convertvalue_istr" to
- zero when all elements have been used. */
- if ( astOK ) {
- if( out ) *( (const char **) out ) = convertvalue_strings[ convertvalue_istr++ ];
- if( convertvalue_istr == ( AST__KEYMAP_CONVERTVALUE_MAX_STRINGS - 1 ) ) convertvalue_istr = 0;
- }
- }
-
-/* If an error has occurred, return zero. */
- if( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-
-static AstMapEntry *CopyMapEntry( AstMapEntry *in, int *status ){
-/*
-* Name:
-* CopyMapEntry
-
-* Purpose:
-* Produces a copy of the supplied KeyMap entry.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "keymap.h"
-* AstMapEntry *CopyMapEntry( AstMapEntry *in, int *status )
-
-* Class Membership:
-* KeyMap member function.
-
-* Description:
-* This function creates a deep copy of the supplied KeyMap entry.
-
-* Parameters:
-* in
-* Pointer to the MapEntry to be copied. NULL may be supplied in
-* which case NULL will be returned.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the new copy. The link to the next MapEntry in the
-* linked list is set NULL in the returned copy.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstMapEntry *result; /* Returned pointer */
- AstObject **alist; /* Pointer to list of AST object pointers */
- AstObject *obj; /* Pointer to AstObject value */
- const char **slist; /* Pointer to list of text pointers */
- const char *text; /* Pointer to text string */
- int i; /* Loop count */
- int nel; /* No. of values in entry vector (0 => scalar) */
- int type; /* Entry data type */
- size_t size; /* Size of Entry structure */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status and the supplied pointer. */
- if ( !astOK || !in ) return result;
-
-/* Get the size, data type and length of the MapEntry. */
- size = SizeOfEntry( in, status );
- nel = in->nel;
- type = in->type;
-
-/* Do a byte-for-byte copy of the supplied MapEntry. */
- result = astStore( NULL, in, size );
-
-/* Copy or nullify pointers in the AstMapEntry structure. */
- result->next = NULL;
- text = in->key;
- result->key = text ? astStore( NULL, text, strlen( text ) + 1 ) : NULL;
- text = in->comment;
- result->comment = text ? astStore( NULL, text, strlen( text ) + 1 ) : NULL;
-
-/* First deal with string entries. */
- if( type == AST__STRINGTYPE ) {
-
-/* Scalar valued entries... */
- if( nel == 0 ) {
-
-/* Take a copy of the single string in the input entry. */
- text = ( (Entry0C *) in )->value;
- ( (Entry0C *) result )->value = text ? astStore( NULL, text,
- strlen( text ) + 1 ) : NULL;
-/* Vector valued entries... */
- } else {
-
-/* Allocate an array to store the string pointers. */
- slist = astMalloc( sizeof(char *)*(size_t)nel );
- ( (Entry1C *) result )->value = slist;
-
-/* Copy the strings. */
- if( slist ) {
- for( i = 0; i < nel; i++ ) {
- text = ( (Entry1C *) in )->value[ i ];
- slist[ i ] = text ? astStore( NULL, text, strlen( text ) + 1 ) : NULL;
- }
- }
- }
-
-/* Similarly deal with AST Object entries. */
- } else if( type == AST__OBJECTTYPE ) {
- if( nel == 0 ) {
- obj = ( (Entry0A *) in )->value;
- ( (Entry0A *) result )->value = obj ? astCopy( obj ) : NULL;
- } else {
- alist = astMalloc( sizeof(AstObject *)*(size_t)nel );
- ( (Entry1A *) result )->value = alist;
- if( alist ) {
- for( i = 0; i < nel; i++ ) {
- obj = ( (Entry1A *) in )->value[ i ];
- alist[ i ] = obj ? astCopy( obj ) : NULL;
- }
- }
- }
-
-/* Now deal with integer entries. Scalar entries do not need any further
- action. If this is a vector entry copy the values array. */
- } else if( type == AST__INTTYPE ) {
- if( nel > 0 ) {
- ( (Entry1I *) result )->value = astStore( NULL,
- ( (Entry1I *) in )->value,
- sizeof( int )*(size_t)nel );
- }
-
-/* Similarly deal with floating point entries. */
- } else if( type == AST__DOUBLETYPE ) {
- if( nel > 0 ) {
- ( (Entry1D *) result )->value = astStore( NULL,
- ( (Entry1D *) in )->value,
- sizeof( double )*(size_t)nel );
- }
-
- } else if( type == AST__FLOATTYPE ) {
- if( nel > 0 ) {
- ( (Entry1F *) result )->value = astStore( NULL,
- ( (Entry1F *) in )->value,
- sizeof( float )*(size_t)nel );
- }
-
-/* Similarly deal with void pointer entries. */
- } else if( type == AST__POINTERTYPE ) {
- if( nel > 0 ) {
- ( (Entry1P *) result )->value = astStore( NULL,
- ( (Entry1P *) in )->value,
- sizeof( void * )*(size_t)nel );
- }
-
-/* Report an error if the data type is unknown. */
- } else {
- astError( AST__INTER, "CopyMapEntry(KeyMap): Illegal map entry data "
- "type %d encountered (internal AST programming error).", status,
- type );
- }
-
-/* If an error has occurred, attempt to delete the returned MapEntry. */
- if( !astOK ) result = FreeMapEntry( result, status );
-
-/* Return the result. */
- return result;
-}
-
-static void CopyTableEntry( AstKeyMap *in, AstKeyMap *out, int itab, int *status ){
-/*
-* Name:
-* CopyTableEntry
-
-* Purpose:
-* Produces a deep copy of a hash table element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "keymap.h"
-* void CopyTableEntry( AstKeyMap *in, AstKeyMap *out, int itab, int *status )
-
-* Class Membership:
-* KeyMap member function.
-
-* Description:
-* This function creates a deep copy of the linked-list of KeyMap entries
-* stored in the specified element of the input KeyMaps hash table.
-
-* Parameters:
-* in
-* Pointer to the input KeyMap.
-* out
-* Pointer to the output KeyMap.
-* itab
-* Index of the hash table element to be copied.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstMapEntry **link; /* Address to store foward link */
- AstMapEntry *next; /* Pointer to next Entry to copy */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* The "link" variable holds the address of the location at which the
- pointer to the next copied MapEntry should be stored. Initialise this to
- be the address of the required element of the output hash table. */
- link = &( out->table[ itab ] );
-
-/* The "next" variable holds the address of the next MapEntry to be
- copied. Initialise this to the MapEntry at the head of the linked list
- associated with the specified index of the input KeyMaps hash table. */
- next = in->table[ itab ];
-
-/* If the hash table element is empty, store a null pointer and pass on. */
- if( !next ) {
- out->table[ itab ] = NULL;
-
-/* Otherwise copy the liked list. */
- } else {
-
-/* Loop round until we have copied all entries. */
- while( next && astOK ) {
-
-/* Copy the next entry, storing the resulting pointer at the position
- indicated by "link". */
- *link = CopyMapEntry( next, status );
-
-/* Update "link" and "next" */
- next = next->next;
- link = &( (*link)->next );
- }
- }
-
-/* Set the number of entries in the output to be the same as the input. */
- out->nentry[ itab ] = in->nentry[ itab ];
-
-/* If an error has occurred, attempt to delete the returned MapEntry. */
- if( !astOK ) FreeTableEntry( out, itab, status );
-}
-
-static void DoubleTableSize( AstKeyMap *this, int *status ) {
-/*
-* Name:
-* DoubleTableSize
-
-* Purpose:
-* Double the size of the hash table in a KeyMap
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "keymap.h"
-* void DoubleTableSize( AstKeyMap *this, int *status )
-
-* Class Membership:
-* KeyMap member function.
-
-* Description:
-* This function creates a new hash table which has twice as many
-* elements as the current hash table, and moves all the entries out
-* of the old table into the new table (at their new positions).
-
-* Parameters:
-* this
-* The KeyMap pointer.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstMapEntry **newtable;
- AstMapEntry *next;
- AstMapEntry *new_next;
- int *newnentry;
- int bitmask;
- int i;
- int newi;
- int newmapsize;
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Determine the new hash table size. Since mapsize starts out as a power
- of 2 (ensured by the NewTable function), the new mapsize will also be
- a power of 2. Also, create a bit mask that can be used to zero the
- upper bits in a full width hash value. */
- newmapsize = 2*this->mapsize;
- bitmask = newmapsize - 1;
-
-/* Create the new arrays, leaving the old arrays intact for the moment. */
- newtable = astMalloc( newmapsize*sizeof( AstMapEntry * ) );
- newnentry = astMalloc( newmapsize*sizeof( int ) );
- if( astOK ) {
-
-/* Initialise the new table. */
- for( i = 0; i < newmapsize; i++ ) {
- newtable[ i ] = NULL;
- newnentry[ i ] = 0;
- }
-
-/* Loop round each of the existing table entries. */
- for( i = 0; i < this->mapsize; i++ ) {
-
-/* The "next" variable holds the address of the next MapEntry to be
- moved. Initialise this to the MapEntry at the head of the linked list
- associated with the specified index of the input KeyMaps hash table. */
- next = this->table[ i ];
-
-/* Loop round until we have moved all entries. */
- while( next && astOK ) {
-
-/* Find the index within the new table at which to store this entry. */
- newi = ( next->hash & bitmask );
-
-/* Save the pointer to the next entry following the current one in the
- linked list. */
- new_next = next->next;
-
-/* Put a pointer to the MapEntry which is currently at the head of the
- linked list in the "next" component of the current MapEntry. */
- next->next = newtable[ newi ];
-
-/* Store the supplied MapEntry pointer in the requested element of the
- hash table. */
- newtable[ newi ] = next;
-
-/* Increment the length of linked list. */
- newnentry[ newi ]++;
-
-/* Use the pointer to the next map entry to be moved. */
- next = new_next;
- }
- }
- }
-
-/* If OK, delete the existing table and use the new table */
- if( astOK ) {
- this->mapsize = newmapsize;
-
- (void) astFree( this->table );
- this->table = newtable;
-
- (void) astFree( this->nentry );
- this->nentry = newnentry;
-
-/* If not OK, delete the new table. */
- } else {
- newtable = astFree( newtable );
- newnentry = astFree( newnentry );
- }
-}
-
-static void DumpEntry( AstMapEntry *entry, AstChannel *channel, int nentry, int *status ) {
-/*
-* Name:
-* DumpEntry
-
-* Purpose:
-* Dump a single AstMapEntry to a Channel.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void DumpEntry( AstMapEntry *entry, AstChannel *channel, int nentry )
-
-* Description:
-* This function dumps the supplied MapEntry to the supplied Channel.
-
-* Parameters:
-* entry
-* Pointer to the MapEntry whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* nentry
-* The integer index value to use when describing the MapEntry in
-* the dump.
-*/
-
-/* Local Variables: */
- char buff[20]; /* Buffer for item names */
- const char *com; /* Pointer to comment string */
- int index; /* Index into vector valued entry */
- int nel; /* Number of elements in value */
- int type; /* Entry data type */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Dump the entry key. */
- (void) sprintf( buff, "Key%d", nentry );
- astWriteString( channel, buff, 1, 1, entry->key, "Item name" );
-
-/* Dump the comment if not blank. */
- if( entry->comment && *(entry->comment) ) {
- (void) sprintf( buff, "Com%d", nentry );
- astWriteString( channel, buff, 1, 1, entry->comment, "Item comment" );
- }
-
-/* Get the data type and the length of the Entry. */
- type = entry->type;
- nel = entry->nel;
-
-/* Dump the entry data type. */
- if( type == AST__STRINGTYPE ) {
- com = "Item data type (string)";
-
- } else if( type == AST__OBJECTTYPE ) {
- com = "Item data type (AST Object)";
-
- } else if( type == AST__INTTYPE ) {
- com = "Item data type (int)";
-
- } else if( type == AST__DOUBLETYPE ) {
- com = "Item data type (double)";
-
- } else if( type == AST__FLOATTYPE ) {
- com = "Item data type (float)";
-
- } else if( type == AST__POINTERTYPE ) {
- com = "Item data type (pointer)";
-
- } else {
- com = "";
- astError( AST__INTER, "DumpEntry(KeyMap): Illegal map entry data "
- "type %d encountered (internal AST programming error).", status,
- type );
- }
- (void) sprintf( buff, "Typ%d", nentry );
- astWriteInt( channel, buff, 1, 1, entry->type, com );
-
-/* Dump the vector length */
- if( entry->nel > 0 ) {
- (void) sprintf( buff, "Nel%d", nentry );
- astWriteInt( channel, buff, 1, 1, entry->nel, "Vector length" );
- }
-
-/* First deal with integer entries. */
- if( type == AST__INTTYPE ) {
- if( entry->nel == 0 ) {
- (void) sprintf( buff, "Val%d", nentry );
- astWriteInt( channel, buff, 1, 1, ((Entry0I *)entry)->value, "Item value" );
- } else {
- com = "Item values";
- for( index = 0; index < nel; index++ ){
- (void) sprintf( buff, "V%d_%d", nentry, index + 1 );
- astWriteInt( channel, buff, 1, 1, ((Entry1I *)entry)->value[ index ], com );
- com = "";
- }
- }
-
-/* Similarly deal with floating point entries. */
- } else if( type == AST__DOUBLETYPE ) {
- if( entry->nel == 0 ) {
- if( ((Entry0D *)entry)->value != AST__BAD ) {
- (void) sprintf( buff, "Val%d", nentry );
- astWriteDouble( channel, buff, 1, 1, ((Entry0D *)entry)->value, "Item value" );
- }
- } else {
- com = "Item values";
- for( index = 0; index < nel; index++ ){
- if( ((Entry1D *)entry)->value[ index ] != AST__BAD ) {
- (void) sprintf( buff, "V%d_%d", nentry, index + 1 );
- astWriteDouble( channel, buff, 1, 1, ((Entry1D *)entry)->value[ index ], com );
- com = "";
- }
- }
- }
-
-/* Similarly deal with single precision floating point entries. */
- } else if( type == AST__FLOATTYPE ) {
- if( entry->nel == 0 ) {
- (void) sprintf( buff, "Val%d", nentry );
- astWriteDouble( channel, buff, 1, 1, (double) ((Entry0F *)entry)->value, "Item value" );
- } else {
- com = "Item values";
- for( index = 0; index < nel; index++ ){
- (void) sprintf( buff, "V%d_%d", nentry, index + 1 );
- astWriteDouble( channel, buff, 1, 1, (double) ((Entry1F *)entry)->value[ index ], com );
- com = "";
- }
- }
-
-/* Do the same for string values. */
- } else if( type == AST__STRINGTYPE ) {
- if( entry->nel == 0 ) {
- (void) sprintf( buff, "Val%d", nentry );
- astWriteString( channel, buff, 1, 1, ((Entry0C *)entry)->value, "Item value" );
- } else {
- com = "Item values";
- for( index = 0; index < nel; index++ ){
- (void) sprintf( buff, "V%d_%d", nentry, index + 1 );
- astWriteString( channel, buff, 1, 1, ((Entry1C *)entry)->value[ index ], com );
- com = "";
- }
- }
-
-/* Do the same for Object values. */
- } else if( type == AST__OBJECTTYPE ) {
- if( entry->nel == 0 ) {
- if( ((Entry0A *)entry)->value ) {
- (void) sprintf( buff, "Val%d", nentry );
- astWriteObject( channel, buff, 1, 1, ((Entry0A *)entry)->value, "Item value" );
- }
- } else {
- com = "Item values";
- for( index = 0; index < nel; index++ ){
- if( ((Entry1A *)entry)->value[ index ] ) {
- (void) sprintf( buff, "V%d_%d", nentry, index + 1 );
- astWriteObject( channel, buff, 1, 1, ((Entry1A *)entry)->value[ index ], com );
- com = "";
- }
- }
- }
-
-/* Void pointer values cannot be dumped. */
- } else if( type == AST__POINTERTYPE ) {
- astError( AST__INTER, "DumpEntry(KeyMap): Cannot dump KeyMaps in "
- "which the values are arbitrary C pointers (possible "
- "programming error)." , status);
-
-/* Report an error if the data type is unknown. */
- } else if( astOK ) {
- astError( AST__INTER, "DumpEntry(KeyMap): Illegal map entry data "
- "type %d encountered (internal AST programming error).", status,
- type );
- }
-}
-
-static AstMapEntry *FreeMapEntry( AstMapEntry *in, int *status ){
-/*
-* Name:
-* FreeMapEntry
-
-* Purpose:
-* Frees the supplied KeyMap entry.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "keymap.h"
-* AstMapEntry *FreeMapEntry( AstMapEntry *in, int *status )
-
-* Class Membership:
-* KeyMap member function.
-
-* Description:
-* This function frees resources used by the supplied MapEntry, then
-* frees the MapEntry structure itself and returns a NULL pointer.
-
-* Parameters:
-* in
-* Pointer to the MapEntry to be freed. NULL may be supplied in
-* which the function returns without action.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A NULL pointer.
-
-* Notes:
-* - It is the callers responsibility to ensure that any other MapEntry
-* which refers to the supplied MapEntry (e.g. through the "next" link
-* in the MapEntry structure) is modified to take account of the
-* freeing of the supplied MapEntry.
-* - This function attempts to execute even if it is invoked with the
-* global error status set.
-*/
-
-/* Local Variables: */
- AstObject **alist; /* Pointer to list of AST object pointers */
- AstObject *obj; /* Pointer to AST object */
- const char **slist; /* Pointer to list of text pointers */
- int i; /* Loop count */
- int nel; /* No. of values in entry vector (0 => scalar) */
- int type; /* Entry data type */
-
-/* Check the supplied pointer. */
- if( !in ) return NULL;
-
-/* Get the data type and length of the MapEntry. */
- nel = in->nel;
- type = in->type;
-
-/* First deal with string entries. */
- if( type == AST__STRINGTYPE ) {
-
-/* For scalar valued entries, free the single string in the input entry. */
- if( nel == 0 ) {
- ( (Entry0C *) in )->value = (const char *) astFree( ( void *) ( (Entry0C *) in )->value );
-
-/* For vector valued entries, free the strings, then free the array storing
- the string pointers. */
- } else {
- slist = ( (Entry1C *) in )->value;
- if( slist ) {
- for( i = 0; i < nel; i++ ) slist[ i ] = astFree( (void *) slist[ i ] );
- ( (Entry1C *) in )->value = astFree( (void *) slist );
- }
- }
-
-/* Similarly deal with AST Object entries. */
- } else if( type == AST__OBJECTTYPE ) {
- if( nel == 0 ) {
- obj = ( (Entry0A *) in )->value;
- if( obj ) ( (Entry0A *) in )->value = astAnnul( obj );
- } else {
- alist = ( (Entry1A *) in )->value;
- if( alist ) {
- for( i = 0; i < nel; i++ ) {
- if( alist[ i ] ) alist[ i ] = astAnnul( alist[ i ] );
- }
- ( (Entry1A *) in )->value = astFree( alist );
- }
- }
-
-/* Now deal with integer entries. Scalar entries do not need any further
- action. If this is a vector entry free the values array. */
- } else if( type == AST__INTTYPE ) {
- if( nel > 0 ) ( (Entry1I *) in )->value = astFree( ( (Entry1I *) in )->value );
-
-/* Similarly deal with void * pointer entries. */
- } else if( type == AST__POINTERTYPE ) {
- if( nel > 0 ) ( (Entry1P *) in )->value = astFree( ( (Entry1P *) in )->value );
-
-/* Similarly deal with floating point entries. */
- } else if( type == AST__DOUBLETYPE ) {
- if( nel > 0 ) ( (Entry1D *) in )->value = astFree( ( (Entry1D *) in )->value );
-
-/* Similarly deal with single precision floating point entries. */
- } else if( type == AST__FLOATTYPE ) {
- if( nel > 0 ) ( (Entry1F *) in )->value = astFree( ( (Entry1F *) in )->value );
-
-/* Report an error if the data type is unknown. */
- } else {
- astError( AST__INTER, "FreeMapEntry(KeyMap): Illegal map entry data "
- "type %d encountered (internal AST programming error).", status,
- type );
- }
-
-/* Free or nullify pointers in the AstMapEntry structure. */
- in->next = NULL;
- in->key = astFree( (void *) in->key );
- in->comment = astFree( (void *) in->comment );
-
-/* Free the complete AstMapEntry structure. */
- astFree( in );
-
-/* Return a NULL pointer. */
- return NULL;
-}
-
-static void FreeTableEntry( AstKeyMap *this, int itab, int *status ){
-/*
-* Name:
-* FreeTableEntry
-
-* Purpose:
-* Frees the linked list of KeyMap entries stored in a given element of
-* the hash table.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "keymap.h"
-* void FreeTableEntry( AstKeyMap *this, int itab, int *status )
-
-* Class Membership:
-* KeyMap member function.
-
-* Description:
-* This function frees resources used by all the MapEntries in the
-* linked list associated with the specified element of the hash table
-* of the supplied KeyMap.
-
-* Parameters:
-* this
-* Pointer to the KeyMap
-* itab
-* Index of the hash table element to free.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function attempts to execute even if it is invoked with the
-* global error status set.
-*/
-
-/* Local Variables: */
- AstMapEntry *link; /* Pointer the next but one MapEntry to be freed */
- AstMapEntry *next; /* Pointer the next MapEntry to be freed */
-
-/* Check it is safe to proceed. */
- if( this && itab >= 0 && itab < this->mapsize ) {
-
-/* Store a pointer to the MapEntry which is to be freed next. */
- next = this->table[ itab ];
-
-/* Loop round freeing all MapEntries in the linked list. */
- while( next ) {
-
-/* Store a pointer to the MapEntry which will be freed after this one. */
- link = next->next;
-
-/* Free this MapEntry */
- FreeMapEntry( next, status );
-
-/* Set up the next MapEntry to be freed. */
- next = link;
- }
-
-/* Store a NULL pointer in the table element. */
- this->table[ itab ] = NULL;
-
-/* Sets the number of entries in this hash table element to zero. */
- this->nentry[ itab ] = 0;
- }
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a KeyMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "keymap.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* KeyMap member function (over-rides the protected astGetAttrib
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a KeyMap, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the KeyMap.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the KeyMap, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the KeyMap. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstKeyMap *this; /* Pointer to the KeyMap structure */
- const char *result; /* Pointer value to return */
- int ival; /* Attribute value */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the KeyMap structure. */
- this = (AstKeyMap *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null-terminated string in an appropriate
- format. Set "result" to point at the result string. */
-
-/* SizeGuess. */
-/* ---------- */
- if ( !strcmp( attrib, "sizeguess" ) ) {
- ival = astGetSizeGuess( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* KeyError. */
-/* --------- */
- } else if ( !strcmp( attrib, "keyerror" ) ) {
- ival = astGetKeyError( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "keymap.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* KeyMap member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied KeyMap,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the KeyMap.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstKeyMap *this; /* Pointer to KeyMap structure */
- AstMapEntry *next; /* Pointer the next MapEntry */
- AstObject **alist; /* Pointer to list of AST object pointers */
- AstObject *obj; /* Pointer to AST object */
- const char **slist; /* Pointer to list of text pointers */
- int i; /* Loop count */
- int itab; /* Table entry index */
- int nel; /* No. of values in entry vector (0 => scalar) */
- int result; /* Result value to return */
- int type; /* Entry data type */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the KeyMap structure. */
- this = (AstKeyMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
-
- for( itab = 0; itab < this->mapsize; itab++ ) {
- next = this->table[ itab ];
- while( next ) {
- nel = next->nel;
- type = next->type;
-
- if( type == AST__STRINGTYPE ) {
-
- if( nel == 0 ) {
- result += astTSizeOf( ( void *) ( (Entry0C *) next )->value );
-
- } else {
- slist = ( (Entry1C *) next )->value;
- if( slist ) {
- for( i = 0; i < nel; i++ ) result += astTSizeOf( (void *) slist[ i ] );
- result += astTSizeOf( (void *) slist );
- }
- }
-
- } else if( type == AST__OBJECTTYPE ) {
- if( nel == 0 ) {
- obj = ( (Entry0A *) next )->value;
- result += astGetObjSize( obj );
- } else {
- alist = ( (Entry1A *) next )->value;
- if( alist ) {
- for( i = 0; i < nel; i++ ) {
- result += astGetObjSize( alist[ i ] );
- }
- result += astTSizeOf( alist );
- }
- }
-
- } else if( type == AST__POINTERTYPE ) {
- if( nel > 0 ) result += astTSizeOf( ( (Entry1P *) next )->value );
-
- } else if( type == AST__INTTYPE ) {
- if( nel > 0 ) result += astTSizeOf( ( (Entry1I *) next )->value );
-
- } else if( type == AST__DOUBLETYPE ) {
- if( nel > 0 ) result += astTSizeOf( ( (Entry1D *) next )->value );
-
- } else if( type == AST__FLOATTYPE ) {
- if( nel > 0 ) result += astTSizeOf( ( (Entry1F *) next )->value );
-
- } else {
- astError( AST__INTER, "astGetObjSize(KeyMap): Illegal map entry data "
- "type %d encountered (internal AST programming error).", status,
- type );
- }
-
- result += astTSizeOf( (void *) next->key );
- result += astTSizeOf( (void *) next->comment );
- result += astTSizeOf( next );
-
- next = next->next;
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static const char *GetKey( AstKeyMap *this, int index, int *status ) {
-/*
-* Name:
-* GetKey
-
-* Purpose:
-* Get the key at a given index within the KeyMap.
-
-* Type:
-* Private member function.
-
-* Synopsis:
-* #include "keymap.h"
-* const char *GetKey( AstKeyMap *this, int index, int *status )
-
-* Class Membership:
-* KeyMap method.
-
-* Description:
-* This function returns a string holding the key for the entry with
-* the given index within the KeyMap.
-
-* Parameters:
-* this
-* Pointer to the KeyMap.
-* index
-* The index into the KeyMap. The first entry has index zero, and the last
-* has index "size-1", where "size" is the value returned by the
-* astMapSize function. An error is reported if the supplied index is
-* out of bounds.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a null-terminated string containing the key.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the AST error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstMapEntry *entry; /* Pointer to the entry */
- const char *result; /* Pointer value to return */
- int ifirst; /* Index of first entry in this table element */
- int ilast; /* Index of last entry in this table element */
- int istep; /* Entry count */
- int itab; /* Index into hash table */
- int nstep; /* No. of entries to skip */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Loop round each entry in the hash table. */
- ilast = -1;
- for( itab = 0; itab < this->mapsize; itab++ ) {
-
-/* Find the index of the first and the last Entry in the linked list associated
- with this element of the hash table. */
- ifirst = ilast + 1;
- ilast += this->nentry[ itab ];
-
-/* Pass on if we have not yet reached the element containing the required
- key. */
- if( ilast >= index ) {
-
-/* Find how many steps we need to proceed down the linked list to reach
- the required index. */
- nstep = index - ifirst;
-
-/* Make this many steps down the linked list.*/
- entry = this->table[ itab ];
- for( istep = 0; entry && istep < nstep; istep++ ) entry = entry->next;
-
-/* Return a pointer to the key string, and break out of the loop. */
- if( entry ) result = entry->key;
- break;
-
- }
- }
-
-/* Report an error if the element was not found. */
- if( !result && astOK ) {
- astError( AST__MPIND, "astMapKey(%s): Cannot find element "
- "%d (zero-based) of the %s.", status, astGetClass( this ),
- index, astGetClass( this ) );
- }
-
-/* Return the result.*/
- return result;
-}
-
-static int GetSizeGuess( AstKeyMap *this, int *status ) {
-/*
-*+
-* Name:
-* astGetSizeGuess
-
-* Purpose:
-* Get the value of the SizeGuess attribute for a KeyMap.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "keymap.h"
-* int astGetSizeGuess( AstKeyMap *this )
-
-* Class Membership:
-* KeyMap method.
-
-* Description:
-* This function returns the value of the SizeGuess attribute for a
-* KeyMap.
-
-* Parameters:
-* this
-* Pointer to the KeyMap.
-
-* Returned Value:
-* The value of the SizeGuess attribute.
-
-* Notes:
-* - A value of zero is returned if this function is invoked with the
-* global error status set.
-
-*-
-*/
-
-/* Local Variables: */
- int result; /* Returned value */
-
-/* Initialise */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Return the attribute value using a default if not set. */
- return ( this->sizeguess == INT_MAX ) ?
- MIN_TABLE_SIZE*MAX_ENTRIES_PER_TABLE_ENTRY : this->sizeguess;
-}
-
-static int HashFun( const char *key, int bitmask, unsigned long *hash, int *status ){
-/*
-* Name:
-* HashFun
-
-* Purpose:
-* Returns an integer hash code for a string
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "keymap.h"
-* int HashFun( const char *key, int bitmask, int *hash, int *status )
-
-* Class Membership:
-* KeyMap member function.
-
-* Description:
-* This function returns an integer hash code for the supplied string,
-* This is the value that isused as the index into the hash table for
-* the specified key.
-
-* Parameters:
-* key
-* Pointer to the string. Trailing spaces are ignored.
-* bitmask
-* A bit mask that is used to zero the upper bits of a full width
-* hash value in order to produce the required array index. This
-* should be one less than the length of the hash table.
-* hash
-* Pointer to a location at which to put the full width hash value.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* An integer in the range zero to ( mapsize - 1 ).
-
-* Notes:
-* - A value of zero is returned if this function is invoked with the
-* global error status set.
-*/
-
-/* Local Variables: */
- int c;
-
-/* Check the local error status. */
- if ( !astOK ) return 0;
-
-/* djb2: This hash function was first reported by Dan Bernstein many years
- ago in comp.lang.c Each through the "hile" loop corresponds to
- "hash = hash*33 + c ". Ignore spaces so that trailing spaces used to
- pad F77 character variables will be ignored. */
- *hash = 5381;
- while( (c = *key++) ) {
- if( c != ' ' ) {
- *hash = ((*hash << 5) + *hash) + c;
- }
- }
- return ( *hash & bitmask );
-}
-
-void astInitKeyMapVtab_( AstKeyMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitKeyMapVtab
-
-* Purpose:
-* Initialise a virtual function table for a KeyMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "keymap.h"
-* void astInitKeyMapVtab( AstKeyMapVtab *vtab, const char *name )
-
-* Class Membership:
-* KeyMap vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the KeyMap class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitObjectVtab( (AstObjectVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAKeyMap) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstObjectVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
-
- vtab->MapGet0P = MapGet0P;
- vtab->MapGet0A = MapGet0A;
- vtab->MapGet0C = MapGet0C;
- vtab->MapGet0D = MapGet0D;
- vtab->MapGet0F = MapGet0F;
- vtab->MapGet0I = MapGet0I;
- vtab->MapGet1P = MapGet1P;
- vtab->MapGet1A = MapGet1A;
- vtab->MapGet1C = MapGet1C;
- vtab->MapGet1D = MapGet1D;
- vtab->MapGet1F = MapGet1F;
- vtab->MapGet1I = MapGet1I;
- vtab->MapGetElemP = MapGetElemP;
- vtab->MapGetElemA = MapGetElemA;
- vtab->MapGetElemC = MapGetElemC;
- vtab->MapGetElemD = MapGetElemD;
- vtab->MapGetElemF = MapGetElemF;
- vtab->MapGetElemI = MapGetElemI;
- vtab->MapPut0A = MapPut0A;
- vtab->MapPut0P = MapPut0P;
- vtab->MapPut0C = MapPut0C;
- vtab->MapPut0D = MapPut0D;
- vtab->MapPut0F = MapPut0F;
- vtab->MapPut0I = MapPut0I;
- vtab->MapPut1P = MapPut1P;
- vtab->MapPut1A = MapPut1A;
- vtab->MapPut1C = MapPut1C;
- vtab->MapPut1D = MapPut1D;
- vtab->MapPut1F = MapPut1F;
- vtab->MapPut1I = MapPut1I;
- vtab->MapRemove = MapRemove;
- vtab->MapSize = MapSize;
- vtab->MapLenC = MapLenC;
- vtab->MapLength = MapLength;
- vtab->MapType = MapType;
- vtab->MapHasKey = MapHasKey;
- vtab->MapKey = MapKey;
-
- vtab->ClearSizeGuess = ClearSizeGuess;
- vtab->SetSizeGuess = SetSizeGuess;
- vtab->GetSizeGuess = GetSizeGuess;
- vtab->TestSizeGuess = TestSizeGuess;
-
- vtab->ClearKeyError = ClearKeyError;
- vtab->SetKeyError = SetKeyError;
- vtab->GetKeyError = GetKeyError;
- vtab->TestKeyError = TestKeyError;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
-#if defined(THREAD_SAFE)
- parent_managelock = object->ManageLock;
- object->ManageLock = ManageLock;
-#endif
-
-/* Declare the destructor, copy constructor and dump function. */
- astSetDelete( vtab, Delete );
- astSetCopy( vtab, Copy );
- astSetDump( vtab, Dump, "KeyMap", "Map of key/value pairs" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static int KeyCmp( const char *key1, const char *key2, int *status ) {
-/*
-* Name:
-* KeyCmp
-
-* Purpose:
-* Compares keys for equality.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "keymap.h"
-* int KeyCmp( const char *key1, const char *key2, int *status )
-
-* Class Membership:
-* KeyMap member function.
-
-* Description:
-* This function compares two strings. It is like strcmp except that it
-* ignores trailing spaces.
-
-* Parameters:
-* key1
-* Pointer to first string.
-* key2
-* Pointer to second string.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the keys differ. Zero if they are identical (except for
-* trailing spaces).
-
-* Notes:
-* - Zero will be returned if this function is invoked with the global
-* error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- const char *k1; /* Pointer to next "key1" character */
- const char *k2; /* Pointer to next "key2" character */
- int result; /* Returned flag */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Get pointers to the first characters to differ, or to the first null
- character, which ever comes first. */
- k1 = key1;
- k2 = key2;
- while( *k1 && ( *k1 == *k2 ) ) {
- k1++;
- k2++;
- }
-
-/* If both characters are null, the strings are identical. If neither is null,
- the string definitely differ. If one is null, we need to check if the
- other one only has spaces to the end of the string. */
- if( *k1 ) {
- if( *k2 ) {
- result = 1;
- } else {
- while( *k1 == ' ' ) k1++;
- result = ( *k1 == 0 ) ? 0 : 1;
- }
- } else {
- if( *k2 ) {
- while( *k2 == ' ' ) k2++;
- result = ( *k2 == 0 ) ? 0 : 1;
- } else {
- result = 0;
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra,
- AstObject **fail, int *status ) {
-/*
-* Name:
-* ManageLock
-
-* Purpose:
-* Manage the thread lock on an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *ManageLock( AstObject *this, int mode, int extra,
-* AstObject **fail, int *status )
-
-* Class Membership:
-* KeyMap member function (over-rides the astManageLock protected
-* method inherited from the parent class).
-
-* Description:
-* This function manages the thread lock on the supplied Object. The
-* lock can be locked, unlocked or checked by this function as
-* deteremined by parameter "mode". See astLock for details of the way
-* these locks are used.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* mode
-* An integer flag indicating what the function should do:
-*
-* AST__LOCK: Lock the Object for exclusive use by the calling
-* thread. The "extra" value indicates what should be done if the
-* Object is already locked (wait or report an error - see astLock).
-*
-* AST__UNLOCK: Unlock the Object for use by other threads.
-*
-* AST__CHECKLOCK: Check that the object is locked for use by the
-* calling thread (report an error if not).
-* extra
-* Extra mode-specific information.
-* fail
-* If a non-zero function value is returned, a pointer to the
-* Object that caused the failure is returned at "*fail". This may
-* be "this" or it may be an Object contained within "this". Note,
-* the Object's reference count is not incremented, and so the
-* returned pointer should not be annulled. A NULL pointer is
-* returned if this function returns a value of zero.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A local status value:
-* 0 - Success
-* 1 - Could not lock or unlock the object because it was already
-* locked by another thread.
-* 2 - Failed to lock a POSIX mutex
-* 3 - Failed to unlock a POSIX mutex
-* 4 - Bad "mode" value supplied.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-*/
-
-/* Local Variables: */
- AstKeyMap *this; /* Pointer to KeyMap structure */
- AstMapEntry *next; /* Pointer the next MapEntry */
- AstObject **alist; /* Pointer to list of AST object pointers */
- AstObject *obj; /* Pointer to AST object */
- int i; /* Loop count */
- int itab; /* Table entry index */
- int nel; /* No. of values in entry vector (0 => scalar) */
- int result; /* Returned status value */
-
-/* Initialise */
- result = 0;
-
-/* Check the supplied pointer is not NULL. */
- if( !this_object ) return result;
-
-/* Obtain a pointers to the KeyMap structure. */
- this = (AstKeyMap *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
- if( !result ) result = (*parent_managelock)( this_object, mode, extra,
- fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
- the supplied Object. */
- for( itab = 0; itab < this->mapsize; itab++ ) {
- next = this->table[ itab ];
- while( next ) {
- if( next->type == AST__OBJECTTYPE ) {
- nel = next->nel;
- if( nel == 0 ) {
- obj = ( (Entry0A *) next )->value;
- if( !result ) result = astManageLock( obj, mode, extra, fail );
- } else {
- alist = ( (Entry1A *) next )->value;
- if( alist ) {
- for( i = 0; i < nel; i++ ) {
- if( !result ) result = astManageLock( alist[ i ], mode,
- extra, fail );
- }
- }
- }
- }
- next = next->next;
- }
- }
-
- return result;
-
-}
-#endif
-
-static const char *MapKey( AstKeyMap *this, int index, int *status ) {
-/*
-*++
-* Name:
-c astMapKey
-f AST_MAPKEY
-
-* Purpose:
-* Get the key at a given index within the KeyMap.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "keymap.h"
-c const char *astMapKey( AstKeyMap *this, int index )
-f RESULT = AST_MAPKEY( THIS, INDEX, STATUS )
-
-* Class Membership:
-* KeyMap method.
-
-* Description:
-* This function returns a string holding the key for the entry with
-* the given index within the KeyMap.
-*
-* This function is intended primarily as a means of iterating round all
-* the elements in a KeyMap. For this purpose, the number of entries in
-* the KeyMap should first be found using
-c astMapSize
-f AST_MAPSIZE
-* and this function should then be called in a loop, with the index
-* value going from
-c zero to one less than the size of the KeyMap.
-f one to the size of the KeyMap.
-* The index associated with a given entry is not, in general, related to
-* the order in which the entries are added to the KeyMap, and may change
-* if other entries are added to or removed from the KeyMap.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the KeyMap.
-c index
-f INDEX = INTEGER (Given)
-* The index into the KeyMap. The first entry has index
-c zero, and the last has index "size-1", where "size" is the value
-c returned by the astMapSize function.
-f one, and the last has index SIZE, the value returned by the
-f AST_MAPSIZE function.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astMapKey()
-c A pointer to a null-terminated string containing the key.
-f AST_MAPKEY = CHARACTER * ( AST__SZCHR )
-f The key value.
-
-* Notes:
-c - The returned pointer is guaranteed to remain valid and the
-c string to which it points will not be over-written for a total
-c of 50 successive invocations of this function. After this, the
-c memory containing the string may be re-used, so a copy of the
-c string should be made if it is needed for longer than this.
-c - A NULL pointer will be returned if this function is invoked
-c with the AST error status set, or if it should fail for any
-c reason.
-f - A blank string will be returned if this function is invoked
-f with STATUS set to an error value, or if it should fail for any
-f reason.
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- const char *result; /* Pointer value to return */
- const char *value; /* Pointer to key value */
- int i; /* Loop counter for initialisation */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* If the "mapkey_strings" array has not been initialised, fill it with
- NULL pointers. */
- if ( !mapkey_init ) {
- mapkey_init = 1;
- for ( i = 0; i < AST__KEYMAP_MAPKEY_MAX_STRINGS; i++ ) mapkey_strings[ i ] = NULL;
- }
-
-/* Obtain a pointer to the required key value. */
- value = GetKey( this, index, status );
-
-/* If OK, store a copy of the resulting string in dynamically
- allocated memory, putting a pointer to the copy into the next
- element of the "mapkey_strings" array. (This process also de-allocates
- any previously allocated memory pointed at by this "mapkey_strings"
- element, so the earlier string is effectively replaced by the new
- one.) */
- if ( astOK ) {
- astBeginPM;
- mapkey_strings[ mapkey_istr ] = astStore( mapkey_strings[ mapkey_istr ], value,
- strlen( value ) + (size_t) 1 );
- astEndPM;
-
-/* If OK, return a pointer to the copy and increment "mapkey_istr" to use the
- next element of "mapkey_strings" on the next invocation. Recycle "mapkey_istr" to
- zero when all elements have been used. */
- if ( astOK ) {
- result = mapkey_strings[ mapkey_istr++ ];
- if ( mapkey_istr == ( AST__KEYMAP_MAPKEY_MAX_STRINGS - 1 ) ) mapkey_istr = 0;
- }
- }
-
-/* Return the result. */
- return result;
-
-}
-
-/*
-*++
-* Name:
-c astMapPut0<X>
-f AST_MAPPUT0<X>
-
-* Purpose:
-* Add a scalar value to a KeyMap.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "ast.h"
-c void astMapPut0<X>( AstKeyMap *this, const char *key, <X>type value,
-c const char *comment );
-f CALL AST_MAPPUT0<X>( THIS, KEY, VALUE, COMMENT, STATUS )
-
-* Class Membership:
-* KeyMap method.
-
-* Description:
-c This is a set of functions
-f This is a set of routine
-* for adding scalar values to a KeyMap. You should use a
-c function
-f routine
-* which matches the data type of the data you wish to add to the KeyMap
-* by replacing <X> in the generic
-c function name astMapPut0<X>
-f routine name AST_MAPPUT0<X>
-* by an appropriate 1-character type code (see the "Data Type Codes"
-* section below for the code appropriate to each supported data type).
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the KeyMap in which to store the supplied value.
-c key
-f KEY = CHARACTER * ( * ) (Given)
-* A character string to be stored with the value, which can later
-* be used to identify the value. Trailing spaces are ignored.
-c value
-f VALUE = <X>type (Given)
-* The value to be stored. The data type of this value should match the
-* 1-character type code appended to the
-c function name (e.g. if you are using astMapPut0A, the type of this
-c value should be "pointer to AstObject").
-f routine name (e.g. if you are using AST_MAPPUT0A, the type of this
-f value should be "integer pointer for an AstObject").
-c comment
-f COMMENT = CHARACTER * ( * ) (Given)
-f A comment string to be stored with the value.
-c A pointer to a null-terminated comment string to be stored with the
-c value. A NULL pointer may be supplied, in which case no comment is
-c stored.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - Key names are case sensitive, and white space is considered
-* significant.
-* - If the supplied key is already in use in the KeyMap, the new value
-* will replace the old value.
-* - If the stored value is an AST Object pointer, the Object's reference
-* count is incremented by this call. Any subsequent changes made to
-* the Object using the returned pointer will be reflected in any
-* any other active pointers for the Object, including any obtained
-* later using
-c astMapget0A.
-f AST_MAPGET0A.
-* The reference count for the Object will be decremented when the
-* KeyMap is destroyed, or the entry is removed or over-written with a
-* different pointer.
-
-* Data Type Codes:
-* To select the appropriate
-c function, you should replace <X> in the generic function name astMapPut0<X>
-f routine, you should replace <X> in the generic routine name AST_MAPPUT0<X>
-* with a 1-character data type code, so as to match the data type <X>type
-* of the data you are processing, as follows:
-c - D: double
-c - F: float
-c - I: int
-c - C: "const" pointer to null terminated character string
-c - A: Pointer to AstObject
-c - P: Generic "void *" pointer
-f - D: DOUBLE PRECISION
-f - R: REAL
-f - I: INTEGER
-f - C: CHARACTER
-f - A: INTEGER used to identify an AstObject
-*
-c For example, astMapPut0D would be used to store a "double" value,
-c while astMapPut0I would be used to store an "int", etc.
-f For example, AST_MAPPUT0D would be used to store a DOUBLE PRECISION value,
-f while AST_MAPPUT0I would be used to store an INTEGER, etc.
-c
-c Note that KeyMaps containing generic "void *" pointers cannot be
-c written out using astShow or astWrite. An error will be reported if
-c this is attempted.
-*--
-*/
-/* Define a macro to implement the function for a specific data type. */
-#define MAKE_MAPPUT0(X,Xtype,Itype,ValExp) \
-static void MapPut0##X( AstKeyMap *this, const char *key, Xtype value, \
- const char *comment, int *status ) { \
-\
-/* Local Variables: */ \
- AstMapEntry *mapentry; /* Pointer to parent MapEntry structure */ \
- Entry0##X *entry; /* Structure holding the data for the new Entry */ \
- char *p; /* Pointer to next key character */ \
- int itab; /* Index of hash table element to use */ \
- int keylen; /* Length of supplied key string */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Perform any necessary checks on the supplied value to be stored. */ \
- CHECK_##X \
-\
-/* Allocate memory for the new MapEntry. */ \
- entry = astMalloc( sizeof( Entry0##X ) ); \
- if( astOK ) { \
-\
-/* Initialise pointers in the new structure.*/ \
- mapentry = (AstMapEntry *) entry; \
- mapentry->next = NULL; \
- mapentry->key = NULL; \
- mapentry->hash = 0; \
- mapentry->comment = NULL; \
-\
-/* Now store the new values. */ \
- keylen = strlen( key ); \
- mapentry->key = astStore( NULL, key, keylen + 1 ); \
- if( comment ) mapentry->comment = astStore( NULL, comment, strlen( comment ) + 1 ); \
- mapentry->type = Itype; \
- mapentry->nel = 0; \
- entry->value = ValExp; \
-\
-/* Terminate the key string to exclude any trailing spaces. */ \
- if( astOK ) { \
- p = (char *) mapentry->key + keylen; \
- while( --p >= mapentry->key ) { \
- if( *p == ' ' ) { \
- *p = 0; \
- } else { \
- break; \
- } \
- } \
- } \
-\
-/* Use the hash function to determine the element of the hash table in \
- which to store the new entry. */ \
- itab = HashFun( mapentry->key, this->mapsize - 1, &(mapentry->hash), status ); \
-\
-/* Remove any existing entry with the given key from the table element. */ \
- RemoveTableEntry( this, itab, mapentry->key, status ); \
-\
-/* If all has gone OK, store the new entry at the head of the linked list \
- associated with the selected table entry. */ \
- if( astOK ) { \
- mapentry = AddTableEntry( this, itab, mapentry, status ); \
-\
-/* If anything went wrong, try to delete the new entry. */ \
- } else { \
- mapentry = FreeMapEntry( mapentry, status ); \
- } \
- } \
-}
-
-/* Define macros which perform any necessary checks on the supplied value
- to be stored. For Object entries, check that we are not adding a KeyMap
- which already contains "this". This avoids circular dependencies.
- Other types do not need any checks. */
-#define CHECK_A CheckCircle( this, value, "astMapPut0A", status );
-#define CHECK_I
-#define CHECK_D
-#define CHECK_F
-#define CHECK_C
-#define CHECK_P
-
-/* Expand the above macro to generate a function for each required
- data type. */
-MAKE_MAPPUT0(I,int,AST__INTTYPE,value)
-MAKE_MAPPUT0(D,double,AST__DOUBLETYPE,value)
-MAKE_MAPPUT0(F,float,AST__FLOATTYPE,value)
-MAKE_MAPPUT0(C,const char *,AST__STRINGTYPE,astStore(NULL,value,strlen(value)+1))
-MAKE_MAPPUT0(A,AstObject *,AST__OBJECTTYPE,(value?astClone(value):NULL))
-MAKE_MAPPUT0(P,void *,AST__POINTERTYPE,value)
-
-/* Undefine the macro. */
-#undef MAKE_MAPPUT0
-#undef CHECK_A
-#undef CHECK_I
-#undef CHECK_D
-#undef CHECK_F
-#undef CHECK_C
-#undef CHECK_P
-
-/*
-*++
-* Name:
-c astMapPut1<X>
-f AST_MAPPUT1<X>
-
-* Purpose:
-* Add a vector value to a KeyMap.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "ast.h"
-c void astMapPut1<X>( AstKeyMap *this, const char *key, int size,
-c const <X>type value[], const char *comment );
-f CALL AST_MAPPUT1<X>( THIS, KEY, SIZE, VALUE, COMMENT, STATUS )
-
-* Class Membership:
-* KeyMap method.
-
-* Description:
-c This is a set of functions
-f This is a set of routine
-* for adding vector values to a KeyMap. You should use a
-c function
-f routine
-* which matches the data type of the data you wish to add to the KeyMap
-* by replacing <X> in the generic
-c function name astMapPut1<X>
-f routine name AST_MAPPUT1<X>
-* by an appropriate 1-character type code (see the "Data Type Codes"
-* section below for the code appropriate to each supported data type).
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the KeyMap in which to store the supplied values.
-c key
-f KEY = CHARACTER * ( * ) (Given)
-* A character string to be stored with the values, which can later
-* be used to identify the values. Trailing spaces are ignored.
-c size
-f SIZE = INTEGER (Given)
-* The number of elements in the supplied array of values.
-c value
-f VALUE( * ) = <X>type (Given)
-* The array of values to be stored. The data type of this value should
-* match the 1-character type code appended to the
-c function name (e.g. if you are using astMapPut1A, the type of this
-c value should be "array of pointers to AstObject").
-f routine name (e.g. if you are using AST_MAPPUT1A, the type of this
-f value should be "integer pointer for an AstObject)".
-c comment
-f COMMENT = CHARACTER * ( * ) (Given)
-f A comment string to be stored with the values.
-c A pointer to a null-terminated comment string to be stored with the
-c values. A NULL pointer may be supplied, in which case no comment is
-c stored.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - If the supplied key is already in use in the KeyMap, the new values
-* will replace the old values.
-* - Key names are case sensitive, and white space is considered
-* significant.
-
-* Data Type Codes:
-* To select the appropriate
-c function, you should replace <X> in the generic function name astMapPut1<X>
-f routine, you should replace <X> in the generic routine name AST_MAPPUT1<X>
-* with a 1-character data type code, so as to match the data type <X>type
-* of the data you are processing, as follows:
-c - D: double
-c - F: float
-c - I: int
-c - C: "const" pointer to null terminated character string
-c - A: Pointer to AstObject
-c - P: Generic "void *" pointer
-f - D: DOUBLE PRECISION
-f - R: REAL
-f - I: INTEGER
-f - C: CHARACTER
-f - A: INTEGER used to identify an AstObject
-*
-c For example, astMapPut1D would be used to store "double" values,
-c while astMapPut1I would be used to store "int", etc.
-f For example, AST_MAPPUT1D would be used to store DOUBLE PRECISION values,
-f while AST_MAPPUT1I would be used to store INTEGER, etc.
-c
-c Note that KeyMaps containing generic "void *" pointers cannot be
-c written out using astShow or astWrite. An error will be reported if
-c this is attempted.
-*--
-*/
-/* Define a macro to implement the function for a specific data type. */
-#define MAKE_MAPPUT1(X,Xtype,Itype,ValExp) \
-static void MapPut1##X( AstKeyMap *this, const char *key, int size, \
- Xtype value[], const char *comment, \
- int *status ) { \
-\
-/* Local Variables: */ \
- AstMapEntry *mapentry; /* Pointer to parent MapEntry structure */ \
- Entry1##X *entry; /* Structure holding the data for the new Entry */ \
- char *p; /* Pointer to next key character */ \
- int itab; /* Index of hash table element to use */ \
- int i; /* Loop count */ \
- int keylen; /* Length of supplied key string */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Perform any necessary checks on the supplied value to be stored. */ \
- CHECK_##X \
-\
-/* Allocate memory for the new MapEntry. */ \
- entry = astMalloc( sizeof( Entry1##X ) ); \
- if( astOK ) { \
-\
-/* Initialise pointers in the new structure.*/ \
- mapentry = (AstMapEntry *) entry; \
- mapentry->next = NULL; \
- mapentry->hash = 0; \
- mapentry->key = NULL; \
- mapentry->comment = NULL; \
-\
-/* Now store the new values. */ \
- keylen = strlen( key ); \
- mapentry->key = astStore( NULL, key, keylen + 1 ); \
- if( comment ) mapentry->comment = astStore( NULL, comment, strlen( comment ) + 1 ); \
- mapentry->type = Itype; \
- mapentry->nel = size; \
- entry->value = astMalloc( sizeof( Xtype )*(size_t)size ); \
-\
- if( astOK ) { \
- for( i = 0; i < size; i++ ) { \
- entry->value[ i ] = ValExp; \
- } \
-\
-/* Terminate the key string to exclude any trailing spaces. */ \
- p = (char *) mapentry->key + keylen; \
- while( --p >= mapentry->key ) { \
- if( *p == ' ' ) { \
- *p = 0; \
- } else { \
- break; \
- } \
- } \
- } \
-\
-/* Use the hash function to determine the element of the hash table in \
- which to store the new entry. */ \
- itab = HashFun( mapentry->key, this->mapsize - 1, &(mapentry->hash), status ); \
-\
-/* Remove any existing entry with the given key from the table element. */ \
- RemoveTableEntry( this, itab, mapentry->key, status ); \
-\
-/* If all has gone OK, store the new entry at the head of the linked list \
- associated with the selected table entry. */ \
- if( astOK ) { \
- mapentry = AddTableEntry( this, itab, mapentry, status ); \
-\
-/* If anything went wrong, try to delete the new entry. */ \
- } else { \
- mapentry = FreeMapEntry( mapentry, status ); \
- } \
- } \
-}
-
-/* Define macros which perform any necessary checks on the supplied values
- to be stored. For Object entries, check that we are not adding a KeyMap
- which already contains "this". This avoids circular dependencies.
- Other types do not need any checks. */
-#define CHECK_A \
-for( i = 0; i < size; i++ ) { \
- CheckCircle( this, value[ i ], "astMapPut1A", status ); \
-}
-#define CHECK_I
-#define CHECK_D
-#define CHECK_F
-#define CHECK_C
-#define CHECK_P
-
-/* Expand the above macro to generate a function for each required
- data type. */
-MAKE_MAPPUT1(D,const double,AST__DOUBLETYPE,value[i])
-MAKE_MAPPUT1(F,const float,AST__FLOATTYPE,value[i])
-MAKE_MAPPUT1(I,const int,AST__INTTYPE,value[i])
-MAKE_MAPPUT1(C,const char *const,AST__STRINGTYPE,astStore(NULL,value[i],strlen(value[i])+1))
-MAKE_MAPPUT1(A,AstObject *const,AST__OBJECTTYPE,(value[i]?astClone(value[i]):NULL))
-MAKE_MAPPUT1(P,void *const,AST__POINTERTYPE,value[i])
-
-/* Undefine the macro. */
-#undef MAKE_MAPPUT1
-#undef CHECK_A
-#undef CHECK_I
-#undef CHECK_D
-#undef CHECK_F
-#undef CHECK_C
-#undef CHECK_P
-
-void astMapPut1AId_( AstKeyMap *this, const char *key, int size,
- AstObject *const value[], const char *comment,
- int *status ) {
-/*
-* Name:
-* astMapPut1AId_
-
-* Purpose:
-* Add a vector of AstObject pointers to a KeyMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "ast.h"
-* void astMapPut1A( AstKeyMap *this, const char *key, int size,
-* AstObject *const value[], const char *comment )
-
-* Class Membership:
-* KeyMap method.
-
-* Description:
-* This is the public implementation of the astMapPut1A function
-* It is identical to astMapPut1A_ except that ID values are supplied
-* via the "value" parameter instead of a true C pointers.
-
-* Parameters:
-* (see astMapPut1<X>)
-
-*/
-
-/* Local Variables: */
- AstObject *op; /* Object pointer */
- AstMapEntry *mapentry; /* Pointer to parent MapEntry structure */
- Entry1A *entry; /* Structure holding the data for the new Entry */
- char *p; /* Pointer to next key character */
- int itab; /* Index of hash table element to use */
- int i; /* Loop count */
- int keylen; /* Length of supplied key string */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Allocate memory for the new MapEntry. */
- entry = astMalloc( sizeof( Entry1A ) );
- if( astOK ) {
-
-/* Initialise pointers in the new structure.*/
- mapentry = (AstMapEntry *) entry;
- mapentry->next = NULL;
- mapentry->hash = 0;
- mapentry->key = NULL;
- mapentry->comment = NULL;
-
-/* Now store the new values. */
- keylen = strlen( key );
- mapentry->key = astStore( NULL, key, keylen + 1 );
- if( comment ) mapentry->comment = astStore( NULL, comment, strlen( comment ) + 1 );
- mapentry->type = AST__OBJECTTYPE;
- mapentry->nel = size;
- entry->value = astMalloc( sizeof( AstObject * )*(size_t)size );
-
- if( astOK ) {
- for( i = 0; i < size; i++ ) {
- op = value[ i ] ? astMakePointer( value[ i ] ) : NULL;
- entry->value[ i ] = op ? astClone( op ) : NULL;
- }
-
-/* Terminate the key string to exclude any trailing spaces. */ \
- p = (char *) mapentry->key + keylen;
- while( --p >= mapentry->key ) {
- if( *p == ' ' ) {
- *p = 0;
- } else {
- break;
- }
- }
- }
-
-/* Use the hash function to determine the element of the hash table in
- which to store the new entry. */
- itab = HashFun( mapentry->key, this->mapsize - 1, &(mapentry->hash), status );
-
-/* Remove any existing entry with the given key from the table element. */
- RemoveTableEntry( this, itab, mapentry->key, status );
-
-/* If all has gone OK, store the new entry at the head of the linked list
- associated with the selected table entry. */
- if( astOK ) {
- mapentry = AddTableEntry( this, itab, mapentry, status );
-
-/* If anything went wrong, try to delete the new entry. */
- } else {
- mapentry = FreeMapEntry( mapentry, status );
- }
- }
-}
-
-/*
-*++
-* Name:
-c astMapGet0<X>
-f AST_MAPGET0<X>
-
-* Purpose:
-* Get a scalar value from a KeyMap.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "ast.h"
-c int astMapGet0<X>( AstKeyMap *this, const char *key, <X>type *value );
-f RESULT = AST_MAPGET0<X>( THIS, KEY, VALUE, STATUS )
-
-f RESULT = AST_MAPGET0C( THIS, KEY, VALUE, L, STATUS )
-
-* Class Membership:
-* KeyMap method.
-
-* Description:
-* This is a set of functions for retrieving a scalar value from a KeyMap.
-* You should replace <X> in the generic function name
-c astMapGet0<X>
-f AST_MAPGET0<X>
-* by an appropriate 1-character type code (see the "Data Type Codes"
-* section below for the code appropriate to each supported data type).
-* The stored value is converted to the data type indiced by <X>
-* before being returned (an error is reported if it is not possible to
-* convert the stored value to the requested data type).
-f Note, the version of this function which returns character strings,
-f AST_MAPGET0C, has an extra parameter in which is returned the number
-f of characters written into the supplied CHARACTER variable.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the KeyMap.
-c key
-f KEY = CHARACTER * ( * ) (Given)
-* The character string identifying the value to be retrieved. Trailing
-* spaces are ignored.
-c value
-f VALUE = <X>type (Returned)
-c A pointer to a buffer in which to return the requested value.
-f The requested value.
-* If the requested key is not found, then the contents of the
-* buffer on entry to this function will be unchanged on exit.
-c For pointer types ("A" and "C"), the buffer should be a suitable
-c pointer, and the address of this pointer should be supplied as the
-c "value" parameter.
-f L = INTEGER (Returned)
-f This parameter is only present in the interface for the AST_MAPGET0C
-f function. It is returned holding the number of characters
-f written into the CHARACTER variable supplied for parameter VALUE.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astMapGet0<X>()
-f AST_MAPGET0<X> = LOGICAL
-f A flag which is set to
-c a non-zero value
-f .TRUE.
-* if the requested key name was found, and is set to
-c zero
-f .FALSE.
-* otherwise.
-
-* Notes:
-* - No error is reported if the requested key cannot be found in the
-* given KeyMap, but a
-c zero
-f .FALSE.
-* value will be returned as the function value. The supplied buffer
-* will be returned unchanged.
-* - Key names are case sensitive, and white space is considered
-* significant.
-* - If the stored value is a vector value, then the first value in
-* the vector will be returned.
-c - A string pointer returned by astMapGet0C is guaranteed to remain valid
-c and the string to which it points will not be over-written for a
-c total of 50 successive invocations of this function. After this,
-c the memory containing the string may be re-used, so a copy of
-c the string should be made if it is needed for longer than this.
-* - If the returned value is an AST Object pointer, the Object's reference
-* count is incremented by this call. Any subsequent changes made to
-* the Object using the returned pointer will be reflected in any
-* any other active pointers for the Object. The returned pointer
-* should be annulled using
-c astAnnul
-f AST_ANNUL
-* when it is no longer needed.
-
-* Data Type Codes:
-* To select the appropriate
-c function, you should replace <X> in the generic function name astMapGet0<X>
-f routine, you should replace <X> in the generic routine name AST_MAPGET0<X>
-* with a 1-character data type code, so as to match the data type <X>type
-* of the data you are processing, as follows:
-c - F: float
-c - D: double
-c - I: int
-c - C: "const" pointer to null terminated character string
-c - A: Pointer to AstObject
-c - P: Generic "void *" pointer
-f - D: DOUBLE PRECISION
-f - R: REAL
-f - I: INTEGER
-f - C: CHARACTER
-f - A: INTEGER used to identify an AstObject
-*
-c For example, astMapGet0D would be used to get a "double" value,
-c while astMapGet0I would be used to get an "int", etc.
-f For example, AST_MAPGET0D would be used to get a DOUBLE PRECISION value,
-f while AST_MAPGET0I would be used to get an INTEGER, etc.
-*--
-*/
-/* Define a macro to implement the function for a specific data type. */
-#define MAKE_MAPGET0(X,Xtype,Itype) \
-static int MapGet0##X( AstKeyMap *this, const char *key, Xtype *value, int *status ) { \
-\
-/* Local Variables: */ \
- AstMapEntry *mapentry; /* Pointer to parent MapEntry structure */ \
- int itab; /* Index of hash table element to use */ \
- int result; /* Returned flag */ \
- int raw_type; /* Data type of stored value */ \
- unsigned long hash; /* Full width hash value */ \
- void *raw; /* Pointer to stored value */ \
-\
-/* Initialise */ \
- result = 0; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* Use the hash function to determine the element of the hash table in \
- which the key will be stored. */ \
- itab = HashFun( key, this->mapsize - 1, &hash, status ); \
-\
-/* Search the relevent table entry for the required MapEntry. */ \
- mapentry = SearchTableEntry( this, itab, key, status ); \
-\
-/* Skip rest if the key was not found. */ \
- if( mapentry ) { \
-\
-/* Get the address of the raw value, and its data type. */ \
- raw_type = mapentry->type; \
- if( raw_type == AST__INTTYPE ){ \
- if( mapentry->nel == 0 ) { \
- raw = &( ((Entry0I *)mapentry)->value ); \
- } else { \
- raw = ((Entry1I *)mapentry)->value; \
- } \
-\
- } else if( raw_type == AST__DOUBLETYPE ){ \
- if( mapentry->nel == 0 ) { \
- raw = &( ((Entry0D *)mapentry)->value ); \
- } else { \
- raw = ((Entry1D *)mapentry)->value; \
- } \
-\
- } else if( raw_type == AST__FLOATTYPE ){ \
- if( mapentry->nel == 0 ) { \
- raw = &( ((Entry0F *)mapentry)->value ); \
- } else { \
- raw = ((Entry1F *)mapentry)->value; \
- } \
-\
- } else if( raw_type == AST__POINTERTYPE ){ \
- if( mapentry->nel == 0 ) { \
- raw = &( ((Entry0P *)mapentry)->value ); \
- } else { \
- raw = ((Entry1P *)mapentry)->value; \
- } \
-\
- } else if( raw_type == AST__STRINGTYPE ){ \
- if( mapentry->nel == 0 ) { \
- raw = &( ((Entry0C *)mapentry)->value ); \
- } else { \
- raw = ((Entry1C *)mapentry)->value; \
- } \
-\
- } else if( raw_type == AST__OBJECTTYPE ){ \
- if( mapentry->nel == 0 ) { \
- raw = &( ((Entry0A *)mapentry)->value ); \
- } else { \
- raw = ((Entry1A *)mapentry)->value; \
- } \
-\
- } else { \
- raw = NULL; \
- astError( AST__INTER, "astMapGet0<X>(KeyMap): Illegal map entry data " \
- "type %d encountered (internal AST programming error).", status, \
- raw_type ); \
- } \
-\
-/* Convert the value, storing the result the supplied buffer. Report an \
- error if conversion is not possible. */ \
- if( !ConvertValue( raw, raw_type, value, Itype, status ) && astOK ){ \
- astError( AST__MPGER, "astMapGet0" #X "(%s): The value of KeyMap key " \
- "\"%s\" cannot be read using the requested data " \
- "type.", status,astGetClass( this ), key ); \
- } else { \
- result = 1; \
- } \
-\
-/* If the KeyError attribute is non-zero, report an error if the key is not \
- found */ \
- } else if( astGetKeyError( this ) && astOK ) { \
- astError( AST__MPKER, "astMapGet0" #X "(%s): No value was found for " \
- "%s in the supplied KeyMap.", status, astGetClass( this ), \
- key ); \
- } \
-\
-/* If an error occurred, return zero. */ \
- if( !astOK ) result = 0; \
-\
-/* Return the result.*/ \
- return result; \
-}
-
-/* Expand the above macro to generate a function for each required
- data type. */
-MAKE_MAPGET0(I,int,AST__INTTYPE)
-MAKE_MAPGET0(D,double,AST__DOUBLETYPE)
-MAKE_MAPGET0(F,float,AST__FLOATTYPE)
-MAKE_MAPGET0(C,const char *,AST__STRINGTYPE)
-MAKE_MAPGET0(A,AstObject *,AST__OBJECTTYPE)
-MAKE_MAPGET0(P,void *,AST__POINTERTYPE)
-
-/* Undefine the macro. */
-#undef MAKE_MAPGET0
-
-int astMapGet0AId_( AstKeyMap *this, const char *key, AstObject **value, int *status ) {
-/*
-* Name:
-* astMapGet0AId_
-
-* Purpose:
-* Get a scalar AstObject pointer from a KeyMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "ast.h"
-* int astMapGet0A( AstKeyMap *this, const char *key, AstObject **value )
-
-* Class Membership:
-* KeyMap method.
-
-* Description:
-* This is the public implementation of the astMapGet0A function
-* It is identical to astMapGet0A_ except that an ID value is returned
-* via the "value" parameter instead of a true C pointer. This is required
-* because this conversion cannot be performed by the macro that invokes
-* the function.
-
-* Parameters:
-* (see astMapGet0<X>)
-
-*/
-
-/* Local Variables: */
- AstMapEntry *mapentry; /* Pointer to parent MapEntry structure */
- int itab; /* Index of hash table element to use */
- int result; /* Returned flag */
- int raw_type; /* Data type of stored value */
- unsigned long hash; /* Full width hash value */
- void *raw; /* Pointer to stored value */
-
-/* Initialise */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Use the hash function to determine the element of the hash table in
- which the key will be stored. */
- itab = HashFun( key, this->mapsize - 1, &hash, status );
-
-/* Search the relevent table entry for the required MapEntry. */
- mapentry = SearchTableEntry( this, itab, key, status );
-
-/* Skip rest if the key was not found. */
- if( mapentry ) {
-
-/* Get the address of the raw value, and its data type. */
- raw_type = mapentry->type;
- if( raw_type == AST__INTTYPE ){
- if( mapentry->nel == 0 ) {
- raw = &( ((Entry0I *)mapentry)->value );
- } else {
- raw = ((Entry1I *)mapentry)->value;
- }
-
- } else if( raw_type == AST__POINTERTYPE ){
- if( mapentry->nel == 0 ) {
- raw = &( ((Entry0P *)mapentry)->value );
- } else {
- raw = ((Entry1P *)mapentry)->value;
- }
-
- } else if( raw_type == AST__DOUBLETYPE ){
- if( mapentry->nel == 0 ) {
- raw = &( ((Entry0D *)mapentry)->value );
- } else {
- raw = ((Entry1D *)mapentry)->value;
- }
-
- } else if( raw_type == AST__FLOATTYPE ){
- if( mapentry->nel == 0 ) {
- raw = &( ((Entry0F *)mapentry)->value );
- } else {
- raw = ((Entry1F *)mapentry)->value;
- }
-
- } else if( raw_type == AST__STRINGTYPE ){
- if( mapentry->nel == 0 ) {
- raw = &( ((Entry0C *)mapentry)->value );
- } else {
- raw = ((Entry1C *)mapentry)->value;
- }
-
- } else if( raw_type == AST__OBJECTTYPE ){
- if( mapentry->nel == 0 ) {
- raw = &( ((Entry0A *)mapentry)->value );
- } else {
- raw = ((Entry1A *)mapentry)->value;
- }
-
- } else {
- raw = NULL;
- astError( AST__INTER, "astMapGet0<X>(KeyMap): Illegal map entry data "
- "type %d encountered (internal AST programming error).", status,
- raw_type );
- }
-
-/* Convert the value, storing the result the supplied buffer. Report an
- error if conversion is not possible. */
- if( !ConvertValue( raw, raw_type, value, AST__OBJECTTYPE, status ) && astOK ){
- astError( AST__MPGER, "astMapGet0A(%s): The value of KeyMap key "
- "\"%s\" cannot be read using the requested data "
- "type.", status, astGetClass( this ), key );
- } else {
- result = 1;
- }
-
-/* If the KeyError attribute is non-zero, report an error if the key is not
- found */
- } else if( astGetKeyError( this ) && astOK ) {
- astError( AST__MPKER, "astMapGet0A(%s): No value was found for "
- "%s in the supplied KeyMap.", status, astGetClass( this ),
- key );
- }
-
-/* If required, return an ID value for the Object. */
- if( result && *value ) *value = astMakeId( *value );
-
-/* Return the result.*/
- return result;
-}
-
-/*
-*++
-* Name:
-c astMapGet1<X>
-f AST_MAPGET1<X>
-
-* Purpose:
-* Get a vector value from a KeyMap.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "ast.h"
-c int astMapGet1<X>( AstKeyMap *this, const char *key, int mxval,
-c int *nval, <X>type *value )
-c int astMapGet1C( AstKeyMap *this, const char *key, int l, int mxval,
-c int *nval, const char *value )
-f RESULT = AST_MAPGET1<X>( THIS, KEY, MXVAL, NVAL, VALUE, STATUS )
-
-* Class Membership:
-* KeyMap method.
-
-* Description:
-* This is a set of functions for retrieving a vector value from a KeyMap.
-* You should replace <X> in the generic function name
-c astMapGet1<X>
-f AST_MAPGET1<X>
-* by an appropriate 1-character type code (see the "Data Type Codes"
-* section below for the code appropriate to each supported data type).
-* The stored value is converted to the data type indiced by <X>
-* before being returned (an error is reported if it is not possible to
-* convert the stored value to the requested data type).
-c Note, the astMapGet1C function has an extra parameter "l" which
-c specifies the maximum length of each string to be stored in the
-c "value" buffer (see the "astMapGet1C" section below).
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the KeyMap.
-c key
-f KEY = CHARACTER * ( * ) (Given)
-* The character string identifying the value to be retrieved. Trailing
-* spaces are ignored.
-c mxval
-f MXVAL = INTEGER (Given)
-* The number of elements in the
-c "value" array.
-f VALUE array.
-c nval
-f NVAL = INTEGER (Returned)
-c The address of an integer in which to put the
-f The
-* number of elements stored in the
-c "value" array.
-* Any unused elements of the array are left unchanged.
-c value
-f VALUE( MXVAL ) = <X>type (Returned)
-c A pointer to an array in which to return the requested values.
-f The requested values.
-* If the requested key is not found, then the contents of the
-* buffer on entry to this function will be unchanged on exit.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astMapGet1<X>()
-f AST_MAPGET1<X> = LOGICAL
-f A flag which is set to
-c a non-zero value
-f .TRUE.
-* if the requested key name was found, and is set to
-c zero
-f .FALSE.
-* otherwise.
-
-* Notes:
-* - No error is reported if the requested key cannot be found in the
-* given KeyMap, but a
-c zero
-f .FALSE.
-* value will be returned as the function value. The supplied array
-* will be returned unchanged.
-* - Key names are case sensitive, and white space is considered
-* significant.
-* - If the stored value is a scalar value, then the value will be
-* returned in the first element of the supplied array, and
-c "nval"
-f NVAL
-* will be returned set to 1.
-
-c astMapGet1C:
-c The "value" buffer supplied to the astMapGet1C function should be a
-c pointer to a character array with "mxval*l" elements, where "l" is
-c the maximum length of a string to be returned. The value of "l"
-c should be supplied as an extra parameter following "key" when
-c invoking astMapGet1C, and should include space for a terminating
-c null character.
-
-* Data Type Codes:
-* To select the appropriate
-c function, you should replace <X> in the generic function name astMapGet1<X>
-f routine, you should replace <X> in the generic routine name AST_MAPGET1<X>
-* with a 1-character data type code, so as to match the data type <X>type
-* of the data you are processing, as follows:
-c - D: double
-c - F: float
-c - I: int
-c - C: "const" pointer to null terminated character string
-c - A: Pointer to AstObject
-c - P: Generic "void *" pointer
-f - D: DOUBLE PRECISION
-f - R: REAL
-f - I: INTEGER
-f - C: CHARACTER
-f - A: INTEGER used to identify an AstObject
-*
-c For example, astMapGet1D would be used to get "double" values, while
-c astMapGet1I would be used to get "int" values, etc. For D or I, the
-c supplied "value" parameter should be a pointer to an array of doubles
-c or ints, with "mxval" elements. For C, the supplied "value" parameter
-c should be a pointer to a character string with "mxval*l" elements.
-c For A, the supplied "value" parameter should be a pointer to an
-c array of AstObject pointers.
-f For example, AST_MAPGET1D would be used to get DOUBLE PRECISION values,
-f while AST_MAPGET1I would be used to get INTEGER values, etc.
-
-*--
-*/
-/* Define a macro to implement the function for a specific data type
-(excluding "C" since that needs an extra parameter). */
-#define MAKE_MAPGET1(X,Xtype,Itype) \
-static int MapGet1##X( AstKeyMap *this, const char *key, int mxval, int *nval, Xtype *value, int *status ) { \
-\
-/* Local Variables: */ \
- AstMapEntry *mapentry; /* Pointer to parent MapEntry structure */ \
- int i; /* Element index */ \
- int itab; /* Index of hash table element to use */ \
- int nel; /* Number of elements in raw vector */ \
- int result; /* Returned flag */ \
- int raw_type; /* Data type of stored value */ \
- size_t raw_size; /* Size of a single raw value */ \
- unsigned long hash; /* Full width hash value */ \
- void *raw; /* Pointer to stored value */ \
-\
-/* Initialise */ \
- result = 0; \
- *nval = 0; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* Use the hash function to determine the element of the hash table in \
- which the key will be stored. */ \
- itab = HashFun( key, this->mapsize - 1, &hash, status ); \
-\
-/* Search the relevent table entry for the required MapEntry. */ \
- mapentry = SearchTableEntry( this, itab, key, status ); \
-\
-/* Skip rest if the key was not found. */ \
- if( mapentry ) { \
- result = 1; \
-\
-/* Get the address of the first raw value, and its data type. Also get \
- the size of each element of the vector. */ \
- nel = mapentry->nel; \
- raw_type = mapentry->type; \
- if( raw_type == AST__INTTYPE ){ \
- raw_size = sizeof( int ); \
- if( nel == 0 ) { \
- raw = &( ((Entry0I *)mapentry)->value ); \
- } else { \
- raw = ((Entry1I *)mapentry)->value; \
- } \
-\
- } else if( raw_type == AST__DOUBLETYPE ){ \
- raw_size = sizeof( double ); \
- if( nel == 0 ) { \
- raw = &( ((Entry0D *)mapentry)->value ); \
- } else { \
- raw = ((Entry1D *)mapentry)->value; \
- } \
-\
- } else if( raw_type == AST__POINTERTYPE ){ \
- raw_size = sizeof( void * ); \
- if( nel == 0 ) { \
- raw = &( ((Entry0P *)mapentry)->value ); \
- } else { \
- raw = ((Entry1P *)mapentry)->value; \
- } \
-\
- } else if( raw_type == AST__FLOATTYPE ){ \
- raw_size = sizeof( float ); \
- if( nel == 0 ) { \
- raw = &( ((Entry0F *)mapentry)->value ); \
- } else { \
- raw = ((Entry1F *)mapentry)->value; \
- } \
-\
- } else if( raw_type == AST__STRINGTYPE ){ \
- raw_size = sizeof( const char * ); \
- if( nel == 0 ) { \
- raw = &( ((Entry0C *)mapentry)->value ); \
- } else { \
- raw = ((Entry1C *)mapentry)->value; \
- } \
-\
- } else if( raw_type == AST__OBJECTTYPE ){ \
- raw_size = sizeof( AstObject * ); \
- if( nel == 0 ) { \
- raw = &( ((Entry0A *)mapentry)->value ); \
- } else { \
- raw = ((Entry1A *)mapentry)->value; \
- } \
-\
- } else { \
- raw_size = 0; \
- raw = NULL; \
- astError( AST__INTER, "astMapGet1<X>(KeyMap): Illegal map entry data " \
- "type %d encountered (internal AST programming error).", status, \
- raw_type ); \
- } \
-\
-/* Treat scalars as single-value vectors. */ \
- if( nel == 0 ) nel = 1; \
-\
-/* Ensure no more than "mxval" values are returned. */ \
- if( nel > mxval ) nel = mxval; \
-\
-/* Return the number of values stored in the buffer. */ \
- *nval = nel; \
-\
-/* Loop round all values in the vector. */ \
- for( i = 0; i < nel && astOK; i++ ) { \
-\
-/* Convert the value, storing the result in the supplied buffer. Report an \
- error if conversion is not possible. */ \
- if( !ConvertValue( raw, raw_type, value + i, Itype, status ) && astOK ){ \
- astError( AST__MPGER, "astMapGet1" #X "(%s): The value of " \
- "element %d of KeyMap key \"%s\" cannot be read using " \
- "the requested data type.", status,astGetClass( this ), i + 1, key ); \
- } \
-\
-/* Increment the pointers to the next raw value. */ \
- raw = (char *) raw + raw_size; \
- } \
-\
-/* If the KeyError attribute is non-zero, report an error if the key is not \
- found */ \
- } else if( astGetKeyError( this ) && astOK ) { \
- astError( AST__MPKER, "astMapGet1" #X "(%s): No value was found for " \
- "%s in the supplied KeyMap.", status, astGetClass( this ), \
- key ); \
- } \
-\
-/* If an error occurred,return zero. */ \
- if( !astOK ) result = 0; \
-\
-/* Return the result.*/ \
- return result; \
-}
-
-/* Expand the above macro to generate a function for each required
- data type (except C which is done differently). */
-MAKE_MAPGET1(I,int,AST__INTTYPE)
-MAKE_MAPGET1(D,double,AST__DOUBLETYPE)
-MAKE_MAPGET1(F,float,AST__FLOATTYPE)
-MAKE_MAPGET1(A,AstObject *,AST__OBJECTTYPE)
-MAKE_MAPGET1(P,void *,AST__POINTERTYPE)
-
-/* Undefine the macro. */
-#undef MAKE_MAPGET1
-
-
-static int MapGet1C( AstKeyMap *this, const char *key, int l, int mxval,
- int *nval, char *value, int *status ) {
-/*
-* Name:
-* MapGet1C
-
-* Purpose:
-* Get a vector value from a KeyMap.
-
-* Type:
-* Private member function.
-
-* Synopsis:
-* #include "ast.h"
-* int MapGet1C( AstKeyMap *this, const char *key, int l, int mxval,
-* int *nval, char *value, int *status )
-
-* Class Membership:
-* KeyMap method.
-
-* Description:
-* This is the implementation of astMapGet1<X> for <X> = "C". We
-* cannot use the MAKE_MAPGET1 macro for this because the string
-* version of this function has an extra parameter giving the maximum
-* length of each string which can be stored in the supplied buffer.
-
-* Parameters:
-* (see astMapGet1<X>)
-*/
-
-/* Local Variables: */
- AstMapEntry *mapentry; /* Pointer to parent MapEntry structure */
- char *val; /* Pointer to next buffer element */
- const char *cvalue; /* Pointer to converted string */
- int i; /* Element index */
- int itab; /* Index of hash table element to use */
- int nel; /* Number of elements in raw vector */
- int raw_type; /* Data type of stored value */
- int result; /* Returned flag */
- size_t raw_size; /* Size of a single raw value */
- unsigned long hash; /* Full width hash value */
- void *raw; /* Pointer to stored value */
-
-/* Initialise */
- result = 0;
- *nval = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Use the hash function to determine the element of the hash table in
- which the key will be stored. */
- itab = HashFun( key, this->mapsize - 1, &hash, status );
-
-/* Search the relevent table entry for the required MapEntry. */
- mapentry = SearchTableEntry( this, itab, key, status );
-
-/* Skip rest if the key was not found. */
- if( mapentry ) {
- result = 1;
-
-/* Get the address of the first raw value, and its data type. Also get
- the size of each element of the vector. */
- nel = mapentry->nel;
- raw_type = mapentry->type;
- if( raw_type == AST__INTTYPE ){
- raw_size = sizeof( int );
- if( nel == 0 ) {
- raw = &( ((Entry0I *)mapentry)->value );
- } else {
- raw = ((Entry1I *)mapentry)->value;
- }
-
- } else if( raw_type == AST__POINTERTYPE ){
- raw_size = sizeof( void * );
- if( nel == 0 ) {
- raw = &( ((Entry0P *)mapentry)->value );
- } else {
- raw = ((Entry1P *)mapentry)->value;
- }
-
- } else if( raw_type == AST__DOUBLETYPE ){
- raw_size = sizeof( double );
- if( nel == 0 ) {
- raw = &( ((Entry0D *)mapentry)->value );
- } else {
- raw = ((Entry1D *)mapentry)->value;
- }
-
- } else if( raw_type == AST__FLOATTYPE ){
- raw_size = sizeof( float );
- if( nel == 0 ) {
- raw = &( ((Entry0F *)mapentry)->value );
- } else {
- raw = ((Entry1F *)mapentry)->value;
- }
-
- } else if( raw_type == AST__STRINGTYPE ){
- raw_size = sizeof( const char * );
- if( nel == 0 ) {
- raw = &( ((Entry0C *)mapentry)->value );
- } else {
- raw = ((Entry1C *)mapentry)->value;
- }
-
- } else if( raw_type == AST__OBJECTTYPE ){
- raw_size = sizeof( AstObject * );
- if( nel == 0 ) {
- raw = &( ((Entry0A *)mapentry)->value );
- } else {
- raw = ((Entry1A *)mapentry)->value;
- }
-
- } else {
- raw_size = 0;
- raw = NULL;
- astError( AST__INTER, "astMapGet1C(KeyMap): Illegal map entry data "
- "type %d encountered (internal AST programming error).", status,
- raw_type );
- }
-
-/* Treat scalars as single-value vectors. */
- if( nel == 0 ) nel = 1;
-
-/* Ensure no more than "mxval" values are returned. */
- if( nel > mxval ) nel = mxval;
-
-/* Return the number of values stored in the buffer. */
- *nval = nel;
-
-/* Loop round all values in the vector. */
- val = value;
- for( i = 0; i < nel && astOK; i++ ) {
-
-/* Convert the value, storing the result in the supplied buffer. Report an
- error if conversion is not possible. */
- if( !ConvertValue( raw, raw_type, &cvalue, AST__STRINGTYPE, status ) && astOK ){
- astError( AST__MPGER, "astMapGet1C(%s): The value of "
- "element %d of KeyMap key \"%s\" cannot be read using "
- "the requested data type.", status,astGetClass( this ), i + 1, key );
-
-/* If succesful, copy the string into the supplied buffer, or as much of
- it as will fit. Leave room for a trailing null character. */
- } else {
- strncpy( val, cvalue, l - 1 );
- val[ l - 1 ] = 0;
- }
-
-/* Increment the pointers to the next raw value and the next buffer
- location. */
- raw = (char *) raw + raw_size;
- val += l;
- }
-
-/* If the KeyError attribute is non-zero, report an error if the key is not
- found */
- } else if( astGetKeyError( this ) && astOK ) {
- astError( AST__MPKER, "astMapGet1C(%s): No value was found for "
- "%s in the supplied KeyMap.", status, astGetClass( this ),
- key );
- }
-
-/* If an error occurred,return zero. */
- if( !astOK ) result = 0;
-
-/* Return the result.*/
- return result;
-}
-
-int astMapGet1AId_( AstKeyMap *this, const char *key, int mxval, int *nval,
- AstObject **value, int *status ) {
-/*
-* Name:
-* astMapGet1AId_
-
-* Purpose:
-* Get a vector of AstObject pointers from a KeyMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "ast.h"
-* int astMapGet1A( AstKeyMap *this, const char *key, int mxval, int *nval,
-* AstObject **value )
-
-* Class Membership:
-* KeyMap method.
-
-* Description:
-* This is the public implementation of the astMapGet1A function
-* It is identical to astMapGet1A_ except that ID values are returned
-* via the "value" parameter instead of a true C pointers. This is required
-* because this conversion cannot be performed by the macro that invokes
-* the function.
-
-* Parameters:
-* (see astMapGet1<X>)
-
-*/
-
-/* Local Variables: */
- AstMapEntry *mapentry; /* Pointer to parent MapEntry structure */
- AstObject *avalue; /* Pointer to AstObject */
- int i; /* Element index */
- int itab; /* Index of hash table element to use */
- int nel; /* Number of elements in raw vector */
- int raw_type; /* Data type of stored value */
- int result; /* Returned flag */
- size_t raw_size; /* Size of a single raw value */
- unsigned long hash; /* Full width hash value */
- void *raw; /* Pointer to stored value */
-
-/* Initialise */
- result = 0;
- *nval = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Use the hash function to determine the element of the hash table in
- which the key will be stored. */
- itab = HashFun( key, this->mapsize - 1, &hash, status );
-
-/* Search the relevent table entry for the required MapEntry. */
- mapentry = SearchTableEntry( this, itab, key, status );
-
-/* Skip rest if the key was not found. */
- if( mapentry ) {
- result = 1;
-
-/* Get the address of the first raw value, and its data type. Also get
- the size of each element of the vector. */
- nel = mapentry->nel;
- raw_type = mapentry->type;
- if( raw_type == AST__INTTYPE ){
- raw_size = sizeof( int );
- if( nel == 0 ) {
- raw = &( ((Entry0I *)mapentry)->value );
- } else {
- raw = ((Entry1I *)mapentry)->value;
- }
-
- } else if( raw_type == AST__DOUBLETYPE ){
- raw_size = sizeof( double );
- if( nel == 0 ) {
- raw = &( ((Entry0D *)mapentry)->value );
- } else {
- raw = ((Entry1D *)mapentry)->value;
- }
-
- } else if( raw_type == AST__POINTERTYPE ){
- raw_size = sizeof( void * );
- if( nel == 0 ) {
- raw = &( ((Entry0P *)mapentry)->value );
- } else {
- raw = ((Entry1P *)mapentry)->value;
- }
-
- } else if( raw_type == AST__FLOATTYPE ){
- raw_size = sizeof( float );
- if( nel == 0 ) {
- raw = &( ((Entry0F *)mapentry)->value );
- } else {
- raw = ((Entry1F *)mapentry)->value;
- }
-
- } else if( raw_type == AST__STRINGTYPE ){
- raw_size = sizeof( const char * );
- if( nel == 0 ) {
- raw = &( ((Entry0C *)mapentry)->value );
- } else {
- raw = ((Entry1C *)mapentry)->value;
- }
-
- } else if( raw_type == AST__OBJECTTYPE ){
- raw_size = sizeof( AstObject * );
- if( nel == 0 ) {
- raw = &( ((Entry0A *)mapentry)->value );
- } else {
- raw = ((Entry1A *)mapentry)->value;
- }
-
- } else {
- raw_size = 0;
- raw = NULL;
- astError( AST__INTER, "astMapGet1A(KeyMap): Illegal map entry data "
- "type %d encountered (internal AST programming error).",
- status, raw_type );
- }
-
-/* Treat scalars as single-value vectors. */
- if( nel == 0 ) nel = 1;
-
-/* Ensure no more than "mxval" values are returned. */
- if( nel > mxval ) nel = mxval;
-
-/* Return the number of values stored in the buffer. */
- *nval = nel;
-
-/* Loop round all values in the vector. */
- for( i = 0; i < nel && astOK; i++ ) {
-
-/* Convert the value, storing the result in the supplied buffer. Report an
- error if conversion is not possible. */
- if( !ConvertValue( raw, raw_type, &avalue, AST__OBJECTTYPE, status ) && astOK ){
- astError( AST__MPGER, "astMapGet1A(%s): The value of "
- "element %d of KeyMap key \"%s\" cannot be read using "
- "the requested data type.", status, astGetClass( this ),
- i + 1, key );
-
-/* If succesful, return an ID value for the Object. */
- } else {
- value[ i ] = avalue ? astMakeId( avalue ) : NULL;
- }
-
-/* Increment the pointers to the next raw value. */
- raw = (char *) raw + raw_size;
- }
-
-/* If the KeyError attribute is non-zero, report an error if the key is not
- found */
- } else if( astGetKeyError( this ) && astOK ) {
- astError( AST__MPKER, "astMapGet1A(%s): No value was found for "
- "%s in the supplied KeyMap.", status, astGetClass( this ),
- key );
- }
-
-/* If an error occurred,return zero. */
- if( !astOK ) result = 0;
-
-/* Return the result.*/
- return result;
-}
-
-/*
-*++
-* Name:
-c astMapGetElem<X>
-f AST_MAPGETELEM<X>
-
-* Purpose:
-* Get a single element of a vector value from a KeyMap.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "ast.h"
-c int astMapGetElem<X>( AstKeyMap *this, const char *key, int elem,
-c <X>type *value )
-c int astMapGetElemC( AstKeyMap *this, const char *key, int l, int elem,
-c const char *value )
-f RESULT = AST_MAPGETELEM<X>( THIS, KEY, ELEM, VALUE, STATUS )
-
-* Class Membership:
-* KeyMap method.
-
-* Description:
-* This is a set of functions for retrieving a single element of a vector
-* value from a KeyMap. You should replace <X> in the generic function name
-c astMapGetElem<X>
-f AST_MAPGETELEM<X>
-* by an appropriate 1-character type code (see the "Data Type Codes"
-* section below for the code appropriate to each supported data type).
-* The stored value is converted to the data type indiced by <X>
-* before being returned (an error is reported if it is not possible to
-* convert the stored value to the requested data type).
-c Note, the astMapGetElemC function has an extra parameter "l" which
-c specifies the maximum length of the string to be stored in the
-c "value" buffer (see the "astMapGetElemC" section below).
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the KeyMap.
-c key
-f KEY = CHARACTER * ( * ) (Given)
-* The character string identifying the value to be retrieved. Trailing
-* spaces are ignored.
-c elem
-f ELEM = INTEGER (Given)
-* The index of the required vector element, starting at
-c zero.
-f one.
-* An error will be reported if the value is outside the range of
-* the vector.
-c value
-f VALUE = <X>type (Returned)
-c A pointer to a buffer in which to return the requested value.
-f The requested value.
-* If the requested key is not found, then the contents of the
-* buffer on entry to this function will be unchanged on exit.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astMapGetElem<X>()
-f AST_MAPGETELEM<X> = LOGICAL
-f A flag which is set to
-c a non-zero value
-f .TRUE.
-* if the requested key name was found, and is set to
-c zero
-f .FALSE.
-* otherwise.
-
-* Notes:
-* - No error is reported if the requested key cannot be found in the
-* given KeyMap, but a
-c zero
-f .FALSE.
-* value will be returned as the function value.
-* - Key names are case sensitive, and white space is considered
-* significant.
-
-c astMapGetElemC:
-c The "value" buffer supplied to the astMapGetElemC function should be a
-c pointer to a character array with "l" elements, where "l" is the
-c maximum length of the string to be returned. The value of "l"
-c should be supplied as an extra parameter following "key" when
-c invoking astMapGetElemC, and should include space for a terminating
-c null character.
-
-* Data Type Codes:
-* To select the appropriate
-c function, you should replace <X> in the generic function name
-c astMapGetElem<X>
-f routine, you should replace <X> in the generic routine name
-f AST_MAPGETELEM<X>
-* with a 1-character data type code, so as to match the data type <X>type
-* of the data you are processing, as follows:
-c - D: double
-c - F: float
-c - I: int
-c - C: "const" pointer to null terminated character string
-c - A: Pointer to AstObject
-c - P: Generic "void *" pointer
-f - D: DOUBLE PRECISION
-f - R: REAL
-f - I: INTEGER
-f - C: CHARACTER
-f - A: INTEGER used to identify an AstObject
-*
-c For example, astMapGetElemD would be used to get a "double" value, while
-c astMapGetElemI would be used to get an "int" value, etc. For D or I, the
-c supplied "value" parameter should be a pointer to a double or int. For
-c C, the supplied "value" parameter should be a pointer to a character
-c string with "l" elements. For A, the supplied "value" parameter should
-c be a pointer to an AstObject pointer.
-f For example, AST_MAPGETELEMD would be used to get a DOUBLE PRECISION
-f value, while AST_MAPGETELEMI would be used to get an INTEGER value, etc.
-
-*--
-*/
-/* Define a macro to implement the function for a specific data type
-(excluding "C" since that needs an extra parameter). */
-#define MAKE_MAPGETELEM(X,Xtype,Itype) \
-static int MapGetElem##X( AstKeyMap *this, const char *key, int elem, \
- Xtype *value, int *status ) { \
-\
-/* Local Variables: */ \
- AstMapEntry *mapentry; /* Pointer to parent MapEntry structure */ \
- int itab; /* Index of hash table element to use */ \
- int nel; /* Number of elements in raw vector */ \
- int result; /* Returned flag */ \
- int raw_type; /* Data type of stored value */ \
- size_t raw_size; /* Size of a single raw value */ \
- unsigned long hash; /* Full width hash value */ \
- void *raw; /* Pointer to stored value */ \
-\
-/* Initialise */ \
- result = 0; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* Use the hash function to determine the element of the hash table in \
- which the key will be stored. */ \
- itab = HashFun( key, this->mapsize - 1, &hash, status ); \
-\
-/* Search the relevent table entry for the required MapEntry. */ \
- mapentry = SearchTableEntry( this, itab, key, status ); \
-\
-/* Skip rest if the key was not found. */ \
- if( mapentry ) { \
- result = 1; \
-\
-/* Get the address of the first raw value, and its data type. Also get \
- the size of each element of the vector. */ \
- nel = mapentry->nel; \
- raw_type = mapentry->type; \
- if( raw_type == AST__INTTYPE ){ \
- raw_size = sizeof( int ); \
- if( nel == 0 ) { \
- raw = &( ((Entry0I *)mapentry)->value ); \
- } else { \
- raw = ((Entry1I *)mapentry)->value; \
- } \
-\
- } else if( raw_type == AST__DOUBLETYPE ){ \
- raw_size = sizeof( double ); \
- if( nel == 0 ) { \
- raw = &( ((Entry0D *)mapentry)->value ); \
- } else { \
- raw = ((Entry1D *)mapentry)->value; \
- } \
-\
- } else if( raw_type == AST__POINTERTYPE ){ \
- raw_size = sizeof( void * ); \
- if( nel == 0 ) { \
- raw = &( ((Entry0P *)mapentry)->value ); \
- } else { \
- raw = ((Entry1P *)mapentry)->value; \
- } \
-\
- } else if( raw_type == AST__FLOATTYPE ){ \
- raw_size = sizeof( float ); \
- if( nel == 0 ) { \
- raw = &( ((Entry0F *)mapentry)->value ); \
- } else { \
- raw = ((Entry1F *)mapentry)->value; \
- } \
-\
- } else if( raw_type == AST__STRINGTYPE ){ \
- raw_size = sizeof( const char * ); \
- if( nel == 0 ) { \
- raw = &( ((Entry0C *)mapentry)->value ); \
- } else { \
- raw = ((Entry1C *)mapentry)->value; \
- } \
-\
- } else if( raw_type == AST__OBJECTTYPE ){ \
- raw_size = sizeof( AstObject * ); \
- if( nel == 0 ) { \
- raw = &( ((Entry0A *)mapentry)->value ); \
- } else { \
- raw = ((Entry1A *)mapentry)->value; \
- } \
-\
- } else { \
- raw_size = 0; \
- raw = NULL; \
- astError( AST__INTER, "astMapGetElem<X>(KeyMap): Illegal map entry " \
- "data type %d encountered (internal AST programming " \
- "error).", status, raw_type ); \
- } \
-\
-/* Treat scalars as single-value vectors. */ \
- if( nel == 0 ) nel = 1; \
-\
-/* Ensure the requested element is within the bounds of the vector */ \
- if( elem >= nel || elem < 0 ) { \
- if( astOK ) { \
- astError( AST__MPVIN, "astMapGetElem<X>(KeyMap): Illegal " \
- "zero-based vector index %d supplied for KeyMap " \
- "entry '%s' - the vector has %d elements.", status, \
- elem, key, nel ); \
- } \
-\
-/* Get a pointer to the requested raw value. */ \
- } else { \
- raw = (char *) raw + elem*raw_size; \
-\
-/* Convert the requested value, storing the result in the supplied buffer. \
- Report an error if conversion is not possible. */ \
- if( !ConvertValue( raw, raw_type, value, Itype, status ) && astOK ){ \
- astError( AST__MPGER, "astMapGetElem" #X "(%s): The value of " \
- "element %d of KeyMap key \"%s\" cannot be read using " \
- "the requested data type.", status, astGetClass( this ), \
- elem + 1, key ); \
- } \
- } \
-\
-/* If the KeyError attribute is non-zero, report an error if the key is not \
- found */ \
- } else if( astGetKeyError( this ) && astOK ) { \
- astError( AST__MPKER, "astMapGetElem" #X "(%s): No value was found for " \
- "%s in the supplied KeyMap.", status, astGetClass( this ), \
- key ); \
- } \
-\
-/* If an error occurred,return zero. */ \
- if( !astOK ) result = 0; \
-\
-/* Return the result.*/ \
- return result; \
-}
-
-/* Expand the above macro to generate a function for each required
- data type (except C which is done differently). */
-MAKE_MAPGETELEM(I,int,AST__INTTYPE)
-MAKE_MAPGETELEM(D,double,AST__DOUBLETYPE)
-MAKE_MAPGETELEM(F,float,AST__FLOATTYPE)
-MAKE_MAPGETELEM(A,AstObject *,AST__OBJECTTYPE)
-MAKE_MAPGETELEM(P,void *,AST__POINTERTYPE)
-
-/* Undefine the macro. */
-#undef MAKE_MAPGETELEM
-
-
-static int MapGetElemC( AstKeyMap *this, const char *key, int l, int elem,
- char *value, int *status ) {
-/*
-* Name:
-* MapGetElemC
-
-* Purpose:
-* Get a single element of a vector value from a KeyMap.
-
-* Type:
-* Private member function.
-
-* Synopsis:
-* #include "ast.h"
-* int MapGetElemC( AstKeyMap *this, const char *key, int l, int elem,
-* char *value, int *status )
-
-* Class Membership:
-* KeyMap method.
-
-* Description:
-* This is the implementation of astMapGetElem<X> for <X> = "C". We
-* cannot use the MAKE_MAPGETELEM macro for this because the string
-* version of this function has an extra parameter giving the maximum
-* length of each string which can be stored in the supplied buffer.
-
-* Parameters:
-* (see astMapGetElem<X>)
-*/
-
-/* Local Variables: */
- AstMapEntry *mapentry; /* Pointer to parent MapEntry structure */
- const char *cvalue; /* Pointer to converted string */
- int itab; /* Index of hash table element to use */
- int nel; /* Number of elements in raw vector */
- int raw_type; /* Data type of stored value */
- int result; /* Returned flag */
- size_t raw_size; /* Size of a single raw value */
- unsigned long hash; /* Full width hash value */
- void *raw; /* Pointer to stored value */
-
-/* Initialise */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Use the hash function to determine the element of the hash table in
- which the key will be stored. */
- itab = HashFun( key, this->mapsize - 1, &hash, status );
-
-/* Search the relevent table entry for the required MapEntry. */
- mapentry = SearchTableEntry( this, itab, key, status );
-
-/* Skip rest if the key was not found. */
- if( mapentry ) {
- result = 1;
-
-/* Get the address of the first raw value, and its data type. Also get
- the size of each element of the vector. */
- nel = mapentry->nel;
- raw_type = mapentry->type;
- if( raw_type == AST__INTTYPE ){
- raw_size = sizeof( int );
- if( nel == 0 ) {
- raw = &( ((Entry0I *)mapentry)->value );
- } else {
- raw = ((Entry1I *)mapentry)->value;
- }
-
- } else if( raw_type == AST__POINTERTYPE ){
- raw_size = sizeof( void * );
- if( nel == 0 ) {
- raw = &( ((Entry0P *)mapentry)->value );
- } else {
- raw = ((Entry1P *)mapentry)->value;
- }
-
- } else if( raw_type == AST__DOUBLETYPE ){
- raw_size = sizeof( double );
- if( nel == 0 ) {
- raw = &( ((Entry0D *)mapentry)->value );
- } else {
- raw = ((Entry1D *)mapentry)->value;
- }
-
- } else if( raw_type == AST__FLOATTYPE ){
- raw_size = sizeof( float );
- if( nel == 0 ) {
- raw = &( ((Entry0F *)mapentry)->value );
- } else {
- raw = ((Entry1F *)mapentry)->value;
- }
-
- } else if( raw_type == AST__STRINGTYPE ){
- raw_size = sizeof( const char * );
- if( nel == 0 ) {
- raw = &( ((Entry0C *)mapentry)->value );
- } else {
- raw = ((Entry1C *)mapentry)->value;
- }
-
- } else if( raw_type == AST__OBJECTTYPE ){
- raw_size = sizeof( AstObject * );
- if( nel == 0 ) {
- raw = &( ((Entry0A *)mapentry)->value );
- } else {
- raw = ((Entry1A *)mapentry)->value;
- }
-
- } else {
- raw_size = 0;
- raw = NULL;
- astError( AST__INTER, "astMapGetElemC(KeyMap): Illegal map entry data "
- "type %d encountered (internal AST programming error).", status,
- raw_type );
- }
-
-/* Treat scalars as single-value vectors. */
- if( nel == 0 ) nel = 1;
-
-/* Ensure the requested element is within the bounds of the vector */
- if( elem >= nel || elem < 0 ) {
- if( astOK ) {
- astError( AST__MPVIN, "astMapGetElemC(KeyMap): Illegal vector "
- "index %d supplied for KeyMap entry '%s' - should be "
- "in the range 1 to %d.", status, elem + 1, key, nel + 1 );
- }
-
-/* Get a pointer to the requested raw value. */
- } else {
- raw = (char *) raw + elem*raw_size;
-
-/* Convert the value, storing the result in the supplied buffer. Report an
- error if conversion is not possible. */
- if( !ConvertValue( raw, raw_type, &cvalue, AST__STRINGTYPE, status ) && astOK ){
- astError( AST__MPGER, "astMapGetElemC(%s): The value of "
- "element %d of KeyMap key \"%s\" cannot be read using "
- "the requested data type.", status,astGetClass( this ),
- elem + 1, key );
-
-/* If succesful, copy the string into the supplied buffer, or as much of
- it as will fit. Leave room for a trailing null character. */
- } else {
- strncpy( value, cvalue, l - 1 );
- value[ l - 1 ] = 0;
- }
- }
-
-/* If the KeyError attribute is non-zero, report an error if the key is not
- found */
- } else if( astGetKeyError( this ) && astOK ) {
- astError( AST__MPKER, "astMapGetElemC(%s): No value was found for "
- "%s in the supplied KeyMap.", status, astGetClass( this ),
- key );
- }
-
-/* If an error occurred,return zero. */
- if( !astOK ) result = 0;
-
-/* Return the result.*/
- return result;
-}
-
-int astMapGetElemAId_( AstKeyMap *this, const char *key, int elem,
- AstObject **value, int *status ) {
-/*
-* Name:
-* astMapGetElemAId_
-
-* Purpose:
-* Get a single element of a vector of AstObject pointers from a KeyMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "ast.h"
-* int astMapGetElemA( AstKeyMap *this, const char *key, int elem,
-* AstObject **value )
-
-* Class Membership:
-* KeyMap method.
-
-* Description:
-* This is the public implementation of the astMapGetElemA function
-* It is identical to astMapGetElemA_ except that an ID value is returned
-* via the "value" parameter instead of a true C pointer. This is required
-* because this conversion cannot be performed by the macro that invokes
-* the function.
-
-* Parameters:
-* (see astMapGet1<X>)
-
-*/
-
-/* Local Variables: */
- AstMapEntry *mapentry; /* Pointer to parent MapEntry structure */
- AstObject *avalue; /* Pointer to AstObject */
- int itab; /* Index of hash table element to use */
- int nel; /* Number of elements in raw vector */
- int raw_type; /* Data type of stored value */
- int result; /* Returned flag */
- size_t raw_size; /* Size of a single raw value */
- unsigned long hash; /* Full width hash value */
- void *raw; /* Pointer to stored value */
-
-/* Initialise */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Use the hash function to determine the element of the hash table in
- which the key will be stored. */
- itab = HashFun( key, this->mapsize - 1, &hash, status );
-
-/* Search the relevent table entry for the required MapEntry. */
- mapentry = SearchTableEntry( this, itab, key, status );
-
-/* Skip rest if the key was not found. */
- if( mapentry ) {
- result = 1;
-
-/* Get the address of the first raw value, and its data type. Also get
- the size of each element of the vector. */
- nel = mapentry->nel;
- raw_type = mapentry->type;
- if( raw_type == AST__INTTYPE ){
- raw_size = sizeof( int );
- if( nel == 0 ) {
- raw = &( ((Entry0I *)mapentry)->value );
- } else {
- raw = ((Entry1I *)mapentry)->value;
- }
-
- } else if( raw_type == AST__DOUBLETYPE ){
- raw_size = sizeof( double );
- if( nel == 0 ) {
- raw = &( ((Entry0D *)mapentry)->value );
- } else {
- raw = ((Entry1D *)mapentry)->value;
- }
-
- } else if( raw_type == AST__POINTERTYPE ){
- raw_size = sizeof( void * );
- if( nel == 0 ) {
- raw = &( ((Entry0P *)mapentry)->value );
- } else {
- raw = ((Entry1P *)mapentry)->value;
- }
-
- } else if( raw_type == AST__FLOATTYPE ){
- raw_size = sizeof( float );
- if( nel == 0 ) {
- raw = &( ((Entry0F *)mapentry)->value );
- } else {
- raw = ((Entry1F *)mapentry)->value;
- }
-
- } else if( raw_type == AST__STRINGTYPE ){
- raw_size = sizeof( const char * );
- if( nel == 0 ) {
- raw = &( ((Entry0C *)mapentry)->value );
- } else {
- raw = ((Entry1C *)mapentry)->value;
- }
-
- } else if( raw_type == AST__OBJECTTYPE ){
- raw_size = sizeof( AstObject * );
- if( nel == 0 ) {
- raw = &( ((Entry0A *)mapentry)->value );
- } else {
- raw = ((Entry1A *)mapentry)->value;
- }
-
- } else {
- raw_size = 0;
- raw = NULL;
- astError( AST__INTER, "astMapGetElemA(KeyMap): Illegal map entry data "
- "type %d encountered (internal AST programming error).", status,
- raw_type );
- }
-
-/* Treat scalars as single-value vectors. */
- if( nel == 0 ) nel = 1;
-
-/* Ensure the requested element is within the bounds of the vector */
- if( elem >= nel || elem < 0 ) {
- if( astOK ) {
- astError( AST__MPVIN, "astMapGetElemA(KeyMap): Illegal vector "
- "index %d supplied for KeyMap entry '%s' - should be "
- "in the range 1 to %d.", status, elem + 1, key, nel + 1 );
- }
-
-/* Get a pointer to the requested raw value. */
- } else {
- raw = (char *) raw + elem*raw_size;
-
-/* Convert the value, storing the result in the supplied buffer. Report an
- error if conversion is not possible. */
- if( !ConvertValue( raw, raw_type, &avalue, AST__OBJECTTYPE, status ) && astOK ){
- astError( AST__MPGER, "astMapGetElemA(%s): The value of "
- "element %d of KeyMap key \"%s\" cannot be read using "
- "the requested data type.", status,astGetClass( this ),
- elem + 1, key );
-
-/* If succesful, return an ID value for the Object. */
- } else {
- *value = avalue ? astMakeId( avalue ) : NULL;
- }
- }
-
-/* If the KeyError attribute is non-zero, report an error if the key is not
- found */
- } else if( astGetKeyError( this ) && astOK ) {
- astError( AST__MPKER, "astMapGetElemA(%s): No value was found for "
- "%s in the supplied KeyMap.", status, astGetClass( this ),
- key );
- }
-
-/* If an error occurred,return zero. */
- if( !astOK ) result = 0;
-
-/* Return the result.*/
- return result;
-}
-
-static int MapHasKey( AstKeyMap *this, const char *key, int *status ) {
-/*
-*++
-* Name:
-c astMapHasKey
-f AST_MAPHASKEY
-
-* Purpose:
-* Check if an entry with a given key exists in a KeyMap.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "keymap.h"
-c int astMapHasKey( AstKeyMap *this, const char *key )
-f RESULT = AST_MAPHASKEY( THIS, KEY, STATUS )
-
-* Class Membership:
-* KeyMap method.
-
-* Description:
-* This function returns a flag indicating if the KeyMap contains an
-* entry with the given key.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the KeyMap.
-c key
-f KEY = CHARACTER * ( * ) (Given)
-* The character string identifying the KeyMap entry. Trailing spaces are
-* ignored.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astMapHasKey()
-f AST_MAPHASKEY = LOGICAL
-c Non-zero if the key was found, and zero otherwise.
-f .TRUE. if the key was found, and .FALSE. otherwise.
-
-* Notes:
-* - A function value of
-c zero
-f .FALSE.
-* will be returned if an error has already occurred, or if this
-* function should fail for any reason.
-
-*--
-*/
-
-/* Local Variables: */
- AstMapEntry *mapentry; /* Pointer to entry in linked list */
- int itab; /* Index of hash table element to use */
- int result; /* Returned value */
- unsigned long hash; /* Full width hash value */
-
-/* Initialise */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Use the hash function to determine the element of the hash table in
- which the key will be stored. */
- itab = HashFun( key, this->mapsize - 1, &hash, status );
-
-/* Search the relevent table entry for the required MapEntry. */
- mapentry = SearchTableEntry( this, itab, key, status );
-
-/* Set a non-zero return value if the key was found. */
- if( mapentry ) result = 1;
-
-/* If an error has occurred, return zero. */
- if( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-
-}
-
-static void MapRemove( AstKeyMap *this, const char *key, int *status ) {
-/*
-*++
-* Name:
-c astMapRemove
-f AST_MAPREMOVE
-
-* Purpose:
-* Removed a named entry from a KeyMap.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "keymap.h"
-c void astMapRemove( AstKeyMap *this, const char *key )
-f CALL AST_MAPREMOVE( THIS, KEY, STATUS )
-
-* Class Membership:
-* KeyMap method.
-
-* Description:
-c This function
-f This routine
-* removes a named entry from a KeyMap. It returns without action if the
-* KeyMap does not contain the specified key.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the KeyMap.
-c key
-f KEY = CHARACTER * ( * ) (Given)
-* The character string identifying the value to be retrieved. Trailing
-* spaces are ignored.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-*--
-*/
-
-/* Local Variables: */
- int itab; /* Index of hash table element to use */
- unsigned long hash; /* Full width hash value */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Use the hash function to determine the element of the hash table in
- which the key will be stored. */
- itab = HashFun( key, this->mapsize - 1, &hash, status );
-
-/* Search the relevent table entry for the required MapEntry and remove it. */
- RemoveTableEntry( this, itab, key, status );
-
-}
-
-static int MapSize( AstKeyMap *this, int *status ) {
-/*
-*++
-* Name:
-c astMapSize
-f AST_MAPSIZE
-
-* Purpose:
-* Get the number of entries in a KeyMap.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "keymap.h"
-c int astMapSize( AstKeyMap *this )
-f RESULT = AST_MAPSIZE( THIS, STATUS )
-
-* Class Membership:
-* KeyMap method.
-
-* Description:
-* This function returns the number of entries in a KeyMap.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the KeyMap.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astMapSize()
-f AST_MAPSIZE = INTEGER
-* The number of entries in the KeyMap.
-
-* Notes:
-* - A function value of zero will be returned if an error has already
-* occurred, or if this function should fail for any reason.
-
-*--
-*/
-
-/* Local Variables: */
- int itab; /* Index of hash table element to use */
- int result; /* Returned value */
-
-/* Initialise */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Add up the number of entries in all elements of the hash table. */
- for( itab = 0; itab < this->mapsize; itab++ ) result += this->nentry[ itab ];
-
-/* Return the result. */
- return result;
-
-}
-
-static int MapLenC( AstKeyMap *this, const char *key, int *status ) {
-/*
-*++
-* Name:
-c astMapLenC
-f AST_MAPLENC
-
-* Purpose:
-* Get the number of characters in a character entry in a KeyMap.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "keymap.h"
-c int astMapLenC( AstKeyMap *this, const char *key )
-f RESULT = AST_MAPLENC( THIS, KEY, STATUS )
-
-* Class Membership:
-* KeyMap method.
-
-* Description:
-* This function returns the minimum length which a character variable
-* which must have in order to be able to store a specified entry in
-* the supplied KeyMap. If the named entry is a vector entry, then the
-* returned value is the length of the longest element of the vector
-* value.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the KeyMap.
-c key
-f KEY = CHARACTER * ( * ) (Given)
-* The character string identifying the KeyMap entry. Trailing
-* spaces are ignored.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astMapLenC()
-f AST_MAPLENC = INTEGER
-* The length (i.e. number of characters) of the longest formatted
-* value associated with the named entry.
-c This does not include the trailing null character.
-
-* Notes:
-* - A function value of zero will be returned without error if the
-* named entry cannot be formatted as a character string.
-* - A function value of zero will be returned if an error has already
-* occurred, or if this function should fail for any reason.
-
-*--
-*/
-
-/* Local Variables: */
- AstMapEntry *mapentry; /* Pointer to parent MapEntry structure */
- int i; /* Element index */
- int itab; /* Index of hash table element to use */
- int l; /* Length of formatted vector element */
- int nel; /* Number of elements in raw vector */
- int raw_type; /* Data type of stored value */
- int result; /* Returned value */
- size_t raw_size; /* Size of a single raw value */
- unsigned long hash; /* Full width hash value */
- void *raw; /* Pointer to stored value */
-
-/* Initialise */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Use the hash function to determine the element of the hash table in
- which the key will be stored. */
- itab = HashFun( key, this->mapsize - 1, &hash, status );
-
-/* Search the relevent table entry for the required MapEntry. */
- mapentry = SearchTableEntry( this, itab, key, status );
-
-/* Skip rest if the key was not found. */
- if( mapentry ) {
-
-/* Get the address of the first raw value, and its data type. Also get
- the size of each element of the vector. */
- nel = mapentry->nel;
- raw_type = mapentry->type;
- if( raw_type == AST__INTTYPE ){
- raw_size = sizeof( int );
- if( nel == 0 ) {
- raw = &( ((Entry0I *)mapentry)->value );
- } else {
- raw = ((Entry1I *)mapentry)->value;
- }
-
- } else if( raw_type == AST__POINTERTYPE ){
- raw_size = sizeof( void * );
- if( nel == 0 ) {
- raw = &( ((Entry0P *)mapentry)->value );
- } else {
- raw = ((Entry1P *)mapentry)->value;
- }
-
- } else if( raw_type == AST__DOUBLETYPE ){
- raw_size = sizeof( double );
- if( nel == 0 ) {
- raw = &( ((Entry0D *)mapentry)->value );
- } else {
- raw = ((Entry1D *)mapentry)->value;
- }
-
- } else if( raw_type == AST__FLOATTYPE ){
- raw_size = sizeof( float );
- if( nel == 0 ) {
- raw = &( ((Entry0F *)mapentry)->value );
- } else {
- raw = ((Entry1F *)mapentry)->value;
- }
-
- } else if( raw_type == AST__STRINGTYPE ){
- raw_size = sizeof( const char * );
- if( nel == 0 ) {
- raw = &( ((Entry0C *)mapentry)->value );
- } else {
- raw = ((Entry1C *)mapentry)->value;
- }
-
- } else if( raw_type == AST__OBJECTTYPE ){
- raw_size = sizeof( AstObject * );
- if( nel == 0 ) {
- raw = &( ((Entry0A *)mapentry)->value );
- } else {
- raw = ((Entry1A *)mapentry)->value;
- }
-
- } else {
- raw_size = 0;
- raw = NULL;
- astError( AST__INTER, "astMapLenC(KeyMap): Illegal map entry data "
- "type %d encountered (internal AST programming error).", status,
- raw_type );
- }
-
-/* Treat scalars as single-value vectors. */
- if( nel == 0 ) nel = 1;
-
-/* Initialise the maximum length of any formatted value in the entry. */
- result= 0;
-
-/* Loop round all values in the vector. */
- for( i = 0; i < nel && astOK; i++ ) {
-
-/* Go through the motions of formatting the value. We do not actually
- need the formatted string (just its length) so we provide a NULL pointer
- for the output buffer. The entry is ignored if it cannot be formatted. */
- l = ConvertValue( raw, raw_type, NULL, AST__STRINGTYPE, status );
- if( l > result ) result = l;
-
-/* Increment the pointer to the next raw value. */
- raw = (char *) raw + raw_size;
- }
- }
-
-/* If an error has occurred, return zero. */
- if( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-
-}
-
-static int MapLength( AstKeyMap *this, const char *key, int *status ) {
-/*
-*++
-* Name:
-c astMapLength
-f AST_MAPLENGTH
-
-* Purpose:
-* Get the vector length of an entry in a KeyMap.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "keymap.h"
-c int astMapLength( AstKeyMap *this, const char *key )
-f RESULT = AST_MAPLENGTH( THIS, KEY, STATUS )
-
-* Class Membership:
-* KeyMap method.
-
-* Description:
-* This function returns the vector length of a named entry in a KeyMap,
-* (that is, how many values are associated with the entry).
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the KeyMap.
-c key
-f KEY = CHARACTER * ( * ) (Given)
-* The character string identifying the KeyMap entry. Trailing
-* spaces are ignored.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astMapLength()
-f AST_MAPLENGTH = INTEGER
-* The length of the entry. One for a scalar, greater than one for
-* a vector. A value of zero is returned if the KeyMap does not
-* contain the named entry.
-
-* Notes:
-* - A function value of zero will be returned if an error has already
-* occurred, or if this function should fail for any reason.
-
-*--
-*/
-
-/* Local Variables: */
- AstMapEntry *mapentry; /* Pointer to entry in linked list */
- int itab; /* Index of hash table element to use */
- int result; /* Returned value */
- unsigned long hash; /* Full width hash value */
-
-/* Initialise */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Use the hash function to determine the element of the hash table in
- which the key will be stored. */
- itab = HashFun( key, this->mapsize - 1, &hash, status );
-
-/* Search the relevent table entry for the required MapEntry. */
- mapentry = SearchTableEntry( this, itab, key, status );
-
-/* Skip rest if the key was not found. */
- if( mapentry ) {
-
-/* Store the netry length */
- result = mapentry->nel;
-
-/* Return 1 for a scalar. */
- if( result == 0 ) result = 1;
-
- }
-
-/* If an error has occurred, return zero. */
- if( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-
-}
-
-static int MapType( AstKeyMap *this, const char *key, int *status ) {
-/*
-*++
-* Name:
-c astMapType
-f AST_MAPTYPE
-
-* Purpose:
-* Get the data type of an entry in a KeyMap.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "keymap.h"
-c int astMapType( AstKeyMap *this, const char *key )
-f RESULT = AST_MAPTYPE( THIS, KEY, STATUS )
-
-* Class Membership:
-* KeyMap method.
-
-* Description:
-* This function returns a value indicating the data type of a
-* named entry in a KeyMap. This is the data type which was used when the
-* entry was added to the KeyMap.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the KeyMap.
-c key
-f KEY = CHARACTER * ( * ) (Given)
-* The character string identifying the KeyMap entry. Trailing
-* spaces are ignored.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astMapType()
-f AST_MAPTYPE = INTEGER
-* One of AST__INTTYPE (for integer), AST__DOUBLETYPE (for double
-* precision floating point), AST__FLOATTYPE (for single
-* precision floating point), AST__STRINGTYPE (for character string)
-* or AST__OBJECTTYPE (for AST Object pointer). AST__BADTYPE is
-* returned if the supplied key is not found in the KeyMap.
-
-* Notes:
-* - A function value of AST__BADTYPE will be returned if an error has
-* already occurred, or if this function should fail for any reason.
-
-*--
-*/
-
-/* Local Variables: */
- AstMapEntry *mapentry; /* Pointer to entry in linked list */
- int itab; /* Index of hash table element to use */
- int result; /* Returned value */
- unsigned long hash; /* Full width hash value */
-
-/* Initialise */
- result = AST__BADTYPE;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Use the hash function to determine the element of the hash table in
- which the key will be stored. */
- itab = HashFun( key, this->mapsize - 1, &hash, status );
-
-/* Search the relevent table entry for the required MapEntry. */
- mapentry = SearchTableEntry( this, itab, key, status );
-
-/* Store the type if found. */
- if( mapentry ) result = mapentry->type;
-
-/* If an error has occurred, return zero. */
- if( !astOK ) result = AST__BADTYPE;
-
-/* Return the result. */
- return result;
-
-}
-
-static void NewTable( AstKeyMap *this, int size, int *status ){
-/*
-* Name:
-* NewTable
-
-* Purpose:
-* Create a new hash table.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "keymap.h"
-* void NewTable( AstKeyMap *this, int size, int *status )
-
-* Class Membership:
-* KeyMap member function.
-
-* Description:
-* This function removes any existing hash table and allocates memory
-* for a new one of the specified size (except that the supplied size
-* is modified to be the next higher power of 2). The table is
-* initialised to indicate that it is empty.
-
-* Parameters:
-* this
-* Pointer to the KeyMap.
-* size
-* The reuqired size of the hash table.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- int i;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Ensure the table size is at least MIN_TABLE_SIZE and is a power of 2. */
- if( size <= MIN_TABLE_SIZE ) {
- size = MIN_TABLE_SIZE;
- } else {
- size = (int) ( 0.5 + pow( 2.0, ceil( log( size )/log( 2.0 ) ) ) );
- }
-
-/* Remove any existing entries. */
- for( i = 0; i < this->mapsize; i++ ) FreeTableEntry( this, i, status );
-
-/* Do nothing more if the table size is not changing. */
- if( size != this->mapsize ) {
-
-/* Modify the size of the existing table. */
- this->mapsize = size;
- this->table = astGrow( this->table, size, sizeof( AstMapEntry * ) );
- this->nentry = astGrow( this->nentry, size, sizeof( int ) );
-
-/* Initialise the new table. */
- if( astOK ) {
- for( i = 0; i < size; i++ ) {
- this->table[ i ] = NULL;
- this->nentry[ i ] = 0;
- }
- }
- }
-}
-
-static void RemoveTableEntry( AstKeyMap *this, int itab, const char *key, int *status ){
-/*
-* Name:
-* RemoveTableEntry
-
-* Purpose:
-* Remove an entry from a linked-list of KeyMap entries.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "keymap.h"
-* void RemoveTableEntry( AstKeyMap *this, int itab, const char *key, int *status )
-
-* Class Membership:
-* KeyMap member function.
-
-* Description:
-* This function removes any entries with the specified key from the
-* linked-list of entries stored at the specified entry of the hash
-* table. If the supplied key is not found in the list, the function
-* returns without action.
-
-* Parameters:
-* this
-* Pointer to the KeyMap.
-* itab
-* Index of the hash table element to be searched.
-* key
-* The key string to be searched for. Trailing spaces are ignored.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstMapEntry **link; /* Address to store foward link */
- AstMapEntry *next; /* Pointer to next Entry to copy */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* The "next" variable holds the address of the next MapEntry to be
- checked. Initialise this to the MapEntry at the head of the linked
- list associated with the supplied element of he hash table. */
- next = this->table[ itab ];
-
-/* The "link" variable holds the address of the location at which the
- pointer to the MapEntry following the removed MapEntry should be stored.
- Initialise this to be the adress of the hash table element. */
- link = &( this->table[ itab ] );
-
-/* Loop round until we have checked all entries. */
- while( next && astOK ) {
-
-/* If the key for the current entry macthes the supplied key... */
- if( !KeyCmp( next->key, key, status ) ) {
-
-/* Store a pointer to the next MapEntry in the list, replacing the
- original pointer to the MapEntry which is being deleted. */
- *link = next->next;
-
-/* Free this MapEntry */
- FreeMapEntry( next, status );
-
-/* Decrement the number of entries in the linked list. */
- this->nentry[ itab ]--;
-
-/* Set up the next MapEntry to be freed. */
- next = *link;
-
-/* If the key for the current entry does not match the supplied key... */
- } else {
-
-/* Update the address at which to store the pointer to the next MapEntry
- in the list. */
- link = &(next->next);
-
-/* Update the address of the next MapEntry in the list. */
- next = next->next;
- }
- }
-}
-
-static AstMapEntry *SearchTableEntry( AstKeyMap *this, int itab, const char *key, int *status ){
-/*
-* Name:
-* SearchTableEntry
-
-* Purpose:
-* Search an element of a has table for a given key.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "keymap.h"
-* AstMapEntry *SearchTableEntry( AstKeyMap *this, int itab, const char *key, int *status )
-
-* Class Membership:
-* KeyMap member function.
-
-* Description:
-* This function searches the specified element of the KeyMaps hash table
-* until an element is found which has a key matching the supplied key.
-* The address of this entry is returned. If no suitable entry is found,
-* then NULL is returned.
-
-* Parameters:
-* this
-* Pointer to the KeyMap.
-* itab
-* The index of the hash table to be searched.
-* key
-* The key string to be searched for. Trailing spaces are ignored.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The address of the first MapEntry in the linked list which refers
-* to the given key, or NULL if the key is not found.
-
-*/
-
-/* Local Variables: */
- AstMapEntry *next; /* Pointer to next Entry to check */
- AstMapEntry *result; /* Returned pointer */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* The "next" variable holds the address of the next MapEntry to be
- checked. Initialise this to the supplied MapEntry. */
- next = this->table[ itab ];
-
-/* Loop round until we have checked all entries. */
- while( next ) {
-
-/* If the key for the current entry matches the supplied key, store the
- MapEntry pointer and break. */
- if( !KeyCmp( next->key, key, status ) ) {
- result = next;
- break;
- }
-
-/* Update the address of the next MapEntry in the list. */
- next = next->next;
-
- }
-
-/* Return the result. */
- return result;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a KeyMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "keymap.h"
-* void SetAttrib( AstObject *this, const char *setting )
-
-* Class Membership:
-* KeyMap member function (over-rides the astSetAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function assigns an attribute value for a KeyMap, the
-* attribute and its value being specified by means of a string of
-* the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in
-* lower case with no white space present. The value to the right
-* of the "=" should be a suitable textual representation of the
-* value to be assigned and this will be interpreted according to
-* the attribute's data type. White space surrounding the value is
-* only significant for string attributes.
-
-* Parameters:
-* this
-* Pointer to the KeyMap.
-* setting
-* Pointer to a null-terminated string specifying the new attribute
-* value.
-*/
-
-/* Local Variables: */
- AstKeyMap *this; /* Pointer to the KeyMap structure */
- int ival; /* Attribute value */
- int len; /* Length of setting string */
- int nc; /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the KeyMap structure. */
- this = (AstKeyMap *) this_object;
-
-/* Obtain the length of the setting string. */
- len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
- the setting string and extract the attribute value (or an offset to
- it in the case of string values). In each case, use the value set
- in "nc" to check that the entire string was matched. Once a value
- has been obtained, use the appropriate method to set it. */
-
-/* SizeGuess. */
-/* ---------- */
- if ( nc = 0,
- ( 1 == astSscanf( setting, "sizeguess= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetSizeGuess( this, ival );
-
-
-/* KeyError. */
-/* --------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "keyerror= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetKeyError( this, ival );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-}
-
-static void SetSizeGuess( AstKeyMap *this, int sizeguess, int *status ) {
-/*
-*+
-* Name:
-* astSetSizeGuess
-
-* Purpose:
-* Set the value of the SizeGuess attribute for a KeyMap.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "keymap.h"
-* void astSetSizeGuess( AstKeyMap *this, int sizeguess )
-
-* Class Membership:
-* KeyMap method.
-
-* Description:
-* This function sets a new value for the SizeGuess attribute of a
-* KeyMap. It reports an error if the KeyMap contains any entries.
-
-* Parameters:
-* this
-* Pointer to the KeyMap.
-* sizeguess
-* The new attribute value.
-
-*-
-*/
-
-/* Local Variables: */
- int empty; /* Is the KeyMap empty? */
- int itab; /* Index into hash table */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* See if the KeyMap is empty. */
- empty = 1;
- for( itab = 0; itab < this->mapsize; itab++ ) {
- if( this->nentry[ itab ] > 0 ) {
- empty = 0;
- break;
- }
- }
-
-/* If not report an error. */
- if( !empty ) {
- astError( AST__NOWRT, "astSetAttrib(KeyMap): Illegal attempt to "
- "change the SizeGuess attribute of a non-empty KeyMap." , status);
-
-/* Otherwise, store the new value and change the size of the hash
- table. */
- } else {
- this->sizeguess = sizeguess;
- NewTable( this, sizeguess/MAX_ENTRIES_PER_TABLE_ENTRY, status );
- }
-}
-
-static size_t SizeOfEntry( AstMapEntry *entry, int *status ){
-/*
-* Name:
-* SizeOfEntry
-
-* Purpose:
-* Return the size of the supplied MapEntry structure.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "keymap.h"
-* size_t SizeOfEntry( AstMapEntry *entry, int *status )
-
-* Class Membership:
-* KeyMap member function.
-
-* Description:
-* This function returns the size of the supplied MapEntry structure.
-
-* Parameters:
-* entry
-* Pointer to the MapEntry.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The size of the MapEntry structure. This does not include the size
-* of any data for which pointers are stored in the MapEntry structure.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- size_t result; /* Returned value */
- int nel; /* Entry length */
- int type; /* Data type */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status and the supplied pointer. */
- if ( !astOK || !entry ) return result;
-
-/* Get the data type and length of the MapEntry. */
- type = entry->type;
- nel = entry->nel;
-
-/* Deal with each type. */
- if( type == AST__STRINGTYPE ) {
- result = ( nel == 0 ) ? sizeof( Entry0C ) : sizeof( Entry1C );
-
- } else if( type == AST__OBJECTTYPE ) {
- result = ( nel == 0 ) ? sizeof( Entry0A ) : sizeof( Entry1A );
-
- } else if( type == AST__INTTYPE ) {
- result = ( nel == 0 ) ? sizeof( Entry0I ) : sizeof( Entry1I );
-
- } else if( type == AST__POINTERTYPE ) {
- result = ( nel == 0 ) ? sizeof( Entry0P ) : sizeof( Entry1P );
-
- } else if( type == AST__DOUBLETYPE ) {
- result = ( nel == 0 ) ? sizeof( Entry0D ) : sizeof( Entry1D );
-
- } else if( type == AST__FLOATTYPE ) {
- result = ( nel == 0 ) ? sizeof( Entry0F ) : sizeof( Entry1F );
-
-/* Report an error if the data type is unknown. */
- } else {
- astError( AST__INTER, "SizeOfEntry(KeyMap): Illegal map entry data "
- "type %d encountered (internal AST programming error).", status,
- type );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a KeyMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "keymap.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* KeyMap member function (over-rides the astTestAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a KeyMap's attributes.
-
-* Parameters:
-* this
-* Pointer to the KeyMap.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstKeyMap *this; /* Pointer to the KeyMap structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the KeyMap structure. */
- this = (AstKeyMap *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* SizeGuess. */
-/* ---------- */
- if ( !strcmp( attrib, "sizeguess" ) ) {
- result = astTestSizeGuess( this );
-
-/* KeyError. */
-/* --------- */
- } else if ( !strcmp( attrib, "keyerror" ) ) {
- result = astTestKeyError( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static int TestSizeGuess( AstKeyMap *this, int *status ) {
-/*
-*+
-* Name:
-* astTestSizeGuess
-
-* Purpose:
-* Test the value of the SizeGuess attribute for a KeyMap.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "keymap.h"
-* int astTestSizeGuess( AstKeyMap *this )
-
-* Class Membership:
-* KeyMap method.
-
-* Description:
-* This function returns a non-zero value if the SizeGuess attribute
-* has been set in a KeyMap.
-
-* Parameters:
-* this
-* Pointer to the KeyMap.
-
-* Returned Value:
-* Non-zero if the SizeGuess attribute is set.
-
-* Notes:
-* - A value of zero is returned if this function is invoked with the
-* global error status set.
-
-*-
-*/
-
-/* Local Variables: */
- int result; /* Returned value */
-
-/* Initialise */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Return non-zero if the attribute is still set to its "not set" value. */
- return ( this->sizeguess != INT_MAX );
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-
-/*
-*att++
-* Name:
-* SizeGuess
-
-* Purpose:
-* The expected size of the KeyMap.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer.
-
-* Description:
-* This is attribute gives an estimate of the number of entries that
-* will be stored in the KeyMap. It is used to tune the internal
-* properties of the KeyMap for speed and efficiency. A larger value
-* will result in faster access at the expense of increased memory
-* requirements. However if the SizeGuess value is much larger than
-* the actual size of the KeyMap, then there will be little, if any,
-* speed gained by making the SizeGuess even larger. The default value
-* is 300.
-*
-* The value of this attribute can only be changed if the KeyMap is
-* empty. Its value can be set conveniently when creating the KeyMap.
-* An error will be reported if an attempt is made to set or clear the
-* attribute when the KeyMap contains any entries.
-
-* Applicability:
-* KeyMap
-* All KeyMaps have this attribute.
-*att--
-*/
-
-/*
-*att++
-* Name:
-* KeyError
-
-* Purpose:
-* Report an error when getting the value of a non-existant KeyMap entry?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute is a boolean value which controls how the
-c astMapGet...
-f AST_MAPGET...
-* functions behave if the requested key is not found in the KeyMap.
-* If KeyError is zero (the default), then these functions will return
-c zero
-f .FALSE.
-* but no error will be reported. If KeyError is non-zero, then the
-* same values are returned but an error is also reported.
-
-* Applicability:
-* KeyMap
-* All KeyMaps have this attribute.
-*att--
-*/
-astMAKE_CLEAR(KeyMap,KeyError,keyerror,-INT_MAX)
-astMAKE_GET(KeyMap,KeyError,int,0,( ( this->keyerror != -INT_MAX ) ?
- this->keyerror : 0 ))
-astMAKE_SET(KeyMap,KeyError,int,keyerror,( value != 0 ))
-astMAKE_TEST(KeyMap,KeyError,( this->keyerror != -INT_MAX ))
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for KeyMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for KeyMap objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstKeyMap *in; /* Pointer to input KeyMap */
- AstKeyMap *out; /* Pointer to output KeyMap */
- int i; /* Index into hash table */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output KeyMap structures. */
- in = (AstKeyMap *) objin;
- out = (AstKeyMap *) objout;
-
-/* For safety, first clear any references to the input memory from
- the output KeyMap. */
- out->table = NULL;
- out->nentry = NULL;
-
-/* Make copies of the table entries. */
- out->table = astMalloc( sizeof( AstMapEntry * )*( out->mapsize ) );
- out->nentry = astMalloc( sizeof( int )*( out->mapsize ) );
-
- for( i = 0; i < out->mapsize; i++ ) CopyTableEntry( in, out, i, status );
-
-/* If an error occurred, clean up by freeing all memory allocated above. */
- if ( !astOK ) {
- for( i = 0; i < out->mapsize; i++ ) FreeTableEntry( out, i, status );
- out->table = astFree( out->table );
- out->nentry = astFree( out->nentry );
- }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for KeyMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for KeyMap objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstKeyMap *this; /* Pointer to the KeyMap structure */
- int i; /* Loop count */
-
-/* Obtain a pointer to the KeyMap structure. */
- this = (AstKeyMap *) obj;
-
-/* Free all allocated memory. */
- for( i = 0; i < this->mapsize; i++ ) FreeTableEntry( this, i, status );
-
-/* Free memory used to hold tables. */
- this->table = astFree( this->table );
- this->nentry = astFree( this->nentry );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for KeyMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the KeyMap class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the KeyMap whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstKeyMap *this; /* Pointer to the KeyMap structure */
- AstMapEntry *next; /* Pointer to the next AstMapEntry to dump */
- int i; /* Index into hash table */
- int nentry; /* Number of entries dumped so far */
- int set; /* Is attribute set? */
- int ival; /* Attribute value */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the KeyMap structure. */
- this = (AstKeyMap *) this_object;
-
-/* Initialise the number of KeyMap entries dumped so far. */
- nentry = 0;
-
-/* SizeGuess. */
-/* ---------- */
- set = TestSizeGuess( this, status );
- ival = set ? GetSizeGuess( this, status ) : astGetSizeGuess( this );
- astWriteInt( channel, "SzGss", set, 0, ival, "Guess at KeyMap size" );
-
-/* KeyError. */
-/* --------- */
- set = TestKeyError( this, status );
- ival = set ? GetKeyError( this, status ) : astGetKeyError( this );
- astWriteInt( channel, "KyErr", set, 0, ival, "Report non-existant keys?" );
-
-/* MapSize. */
-/* -------- */
- astWriteInt( channel, "MapSz", 1, 1, this->mapsize, "Size of hash table" );
-
-/* Loop round each entry in the hash table. */
- for( i = 0; i < this->mapsize; i++ ) {
-
-/* Get a pointer to the next KeyMap entry to dump. */
- next = this->table[ i ];
-
-/* Loop round dumping all KeyMap entries in this element of the hash table. */
- while( next && astOK ) {
- DumpEntry( next, channel, ++nentry, status );
-
-/* Get a pointer to the next entry to dump. */
- next = next->next;
-
- }
- }
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAKeyMap and astCheckKeyMap functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(KeyMap,Object)
-astMAKE_CHECK(KeyMap)
-
-AstKeyMap *astKeyMap_( const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astKeyMap
-f AST_KEYMAP
-
-* Purpose:
-* Create a KeyMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "keymap.h"
-c AstKeyMap *astKeyMap( const char *options, ... )
-f RESULT = AST_KEYMAP( OPTIONS, STATUS )
-
-* Class Membership:
-* KeyMap constructor.
-
-* Description:
-* This function creates a new empty KeyMap and optionally initialises its
-* attributes. Entries can then be added to the KeyMap using the
-c astMapPut0<X> and astMapPut1<X> functions.
-f AST_MAPPUT0<X> and AST_MAPPUT1<X> functions.
-*
-* The KeyMap class is used to store a set of values with associated keys
-* which identify the values. The keys are strings (case-sensitive,
-* trailing spaces are ignored), and the data type of the values can be
-* integer, floating point, character string or AST Object pointer. Each
-* value can be a scalar or a one-dimensional vector. A KeyMap is
-* conceptually similar to a Mapping in that a KeyMap transforms an
-* input into an output - the input is the key, and the output is the
-* value associated with the key. However, this is only a conceptual
-* similarity, and it should be noted that the KeyMap class inherits from
-* the Object class rather than the Mapping class. The methods of the
-* Mapping class cannot be used with a KeyMap.
-
-* Parameters:
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new KeyMap. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new KeyMap. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astKeyMap()
-f AST_MAP = INTEGER
-* A pointer to the new KeyMap.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-
-* Status Handling:
-* The protected interface to this function includes an extra
-* parameter at the end of the parameter list descirbed above. This
-* parameter is a pointer to the integer inherited status
-* variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstKeyMap *new; /* Pointer to new KeyMap */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the KeyMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitKeyMap( NULL, sizeof( AstKeyMap ), !class_init, &class_vtab, "KeyMap" );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new KeyMap's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new KeyMap. */
- return new;
-}
-
-AstKeyMap *astKeyMapId_( const char *options, ... ) {
-/*
-* Name:
-* astKeyMapId_
-
-* Purpose:
-* Create a KeyMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "keymap.h"
-* AstKeyMap *astKeyMapId_( const char *options, ... )
-
-* Class Membership:
-* KeyMap constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astKeyMap constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astKeyMap_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astKeyMap_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astKeyMap_.
-
-* Returned Value:
-* The ID value associated with the new KeyMap.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstKeyMap *new; /* Pointer to new KeyMap */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the KeyMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitKeyMap( NULL, sizeof( AstKeyMap ), !class_init, &class_vtab, "KeyMap" );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new KeyMap's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new KeyMap. */
- return astMakeId( new );
-}
-
-AstKeyMap *astInitKeyMap_( void *mem, size_t size, int init, AstKeyMapVtab *vtab,
- const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitKeyMap
-
-* Purpose:
-* Initialise a KeyMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "keymap.h"
-* AstKeyMap *astInitKeyMap( void *mem, size_t size, int init, AstKeyMapVtab *vtab,
-* const char *name )
-
-* Class Membership:
-* KeyMap initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new KeyMap object. It allocates memory (if necessary) to accommodate
-* the KeyMap plus any additional data associated with the derived class.
-* It then initialises a KeyMap structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a KeyMap at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the KeyMap is to be created. This
-* must be of sufficient size to accommodate the KeyMap data
-* (sizeof(KeyMap)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the KeyMap (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the KeyMap
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the KeyMap's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new KeyMap.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astClass
-* method).
-
-* Returned Value:
-* A pointer to the new KeyMap.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstKeyMap *new; /* Pointer to the new KeyMap */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitKeyMapVtab( vtab, name );
-
-/* Initialise an Object structure (the parent class) as the first component
- within the KeyMap structure, allocating memory if necessary. */
- new = (AstKeyMap *) astInitObject( mem, size, 0, (AstObjectVtab *) vtab,
- name );
-
- if ( astOK ) {
-
-/* Initialise the KeyMap data. */
-/* ---------------------------- */
-/* Initialise all attributes to their "undefined" values. */
- new->sizeguess = INT_MAX;
- new->mapsize = 0;
- new->table = NULL;
- new->nentry = NULL;
- new->keyerror = -INT_MAX;
-
- NewTable( new, MIN_TABLE_SIZE, status );
-
-/* If an error occurred, clean up by deleting the new KeyMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new KeyMap. */
- return new;
-}
-
-AstKeyMap *astLoadKeyMap_( void *mem, size_t size, AstKeyMapVtab *vtab,
- const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadKeyMap
-
-* Purpose:
-* Load a KeyMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "keymap.h"
-* AstKeyMap *astLoadKeyMap( void *mem, size_t size, AstKeyMapVtab *vtab,
-* const char *name, AstChannel *channel )
-
-* Class Membership:
-* KeyMap loader.
-
-* Description:
-* This function is provided to load a new KeyMap using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* KeyMap structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a KeyMap at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the KeyMap is to be
-* loaded. This must be of sufficient size to accommodate the
-* KeyMap data (sizeof(KeyMap)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the KeyMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the KeyMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstKeyMap) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new KeyMap. If this is NULL, a pointer
-* to the (static) virtual function table for the KeyMap class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "KeyMap" is used instead.
-
-* Returned Value:
-* A pointer to the new KeyMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstKeyMap *new; /* Pointer to the new KeyMap */
- AstObject **alist; /* Pointer to vector of entry values */
- AstObject *aval; /* AST Object value for an entry */
- char buff[ 30 ]; /* Buffer for key names */
- char *key; /* Pointer to key string for an entry */
- char *com; /* Pointer to comment string for an entry */
- const char **slist; /* Pointer to vector of entry values */
- char *sval; /* String value for an entry */
- double *dlist; /* Pointer to vector of entry values */
- float *flist; /* Pointer to vector of entry values */
- double dval; /* Floating point value for an entry */
- int *ilist; /* Pointer to vector of entry values */
- int index; /* Index of next array element in a vector entry */
- int ival; /* Integer value for an entry */
- int nel; /* Vector length */
- int nentry; /* Number of KeyMap entries read so far */
- int mapsize; /* Size for new hash table */
- int type; /* Data type for an entry */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this KeyMap. In this case the
- KeyMap belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstKeyMap );
- vtab = &class_vtab;
- name = "KeyMap";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitKeyMapVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built KeyMap. */
- new = astLoadObject( mem, size, (AstObjectVtab *) vtab, name, channel );
-
- if ( astOK ) {
-
-/* Inidicate the KeyMap is empty. */
- new->mapsize = 0;
- new->table = NULL;
- new->nentry = NULL;
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "KeyMap" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* SizeGuess. */
-/* ---------- */
- new->sizeguess = astReadInt( channel, "szgss", INT_MAX );
- if ( TestSizeGuess( new, status ) ) SetSizeGuess( new, new->sizeguess, status );
-
-/* KeyError. */
-/* --------- */
- new->keyerror = astReadInt( channel, "kyerr", -INT_MAX );
- if ( TestKeyError( new, status ) ) SetKeyError( new, new->keyerror, status );
-
-/* MapSize. */
-/* -------- */
- mapsize = astReadInt( channel, "mapsz", MIN_TABLE_SIZE );
- NewTable( new, mapsize, status );
-
-/* Entries... */
-/* ---------- */
-
-/* Initialise the index of the next AstMapEntry to be read. */
- nentry = 0;
-
-/* Read Entries until no more are found */
- while( astOK ) {
- nentry++;
-
-/* Get the entry key. */
- (void) sprintf( buff, "key%d", nentry );
- key = astReadString( channel, buff, NULL );
-
-/* We have finished reading entries if no key was found. */
- if( !key ) break;
-
-/* Get the entry comment. */
- (void) sprintf( buff, "com%d", nentry );
- com = astReadString( channel, buff, NULL );
-
-/* Get the entry data type. */
- (void) sprintf( buff, "typ%d", nentry );
- type = astReadInt( channel, buff, AST__BADTYPE );
-
- if( type == AST__BADTYPE && astOK ) {
- astError( AST__BDFTS, "astLoadKeyMap(%s): No data type code found "
- "whilst reading a %s.", status, name, name );
-
- }
-
-/* Get the vector length. */
- (void) sprintf( buff, "nel%d", nentry );
- nel = astReadInt( channel, buff, 0 );
-
-/* First deal with integer entries. */
- if( type == AST__INTTYPE ) {
-
-/* For scalar entries, use "val<nentry>" to get the value then create a new
- entry and add it to the KeyMap. */
- if( nel == 0 ) {
- (void) sprintf( buff, "val%d", nentry );
- ival = astReadInt( channel, buff, 0 );
- astMapPut0I( new, key, ival, com );
-
-/* If we must have an array of values... */
- } else {
-
-/* Create an array to hold the values. */
- ilist = astMalloc( sizeof(int)*nel );
-
-/* Loop round reading values. */
- for( index = 0; astOK && index < nel; index++ ) {
- (void) sprintf( buff, "v%d_%d", nentry, index + 1 );
- ilist[ index ] = astReadInt( channel, buff, 0 );
- }
-
-/* Create the KeyMap entry. */
- astMapPut1I( new, key, nel, ilist, com );
-
-/* Free resources. */
- ilist = astFree( ilist );
- }
-
-/* Do the same for double values. */
- } else if( type == AST__DOUBLETYPE ) {
- if( nel == 0 ) {
- (void) sprintf( buff, "val%d", nentry );
- dval = astReadDouble( channel, buff, AST__BAD );
- astMapPut0D( new, key, dval, com );
- } else {
- dlist = astMalloc( sizeof(double)*nel );
- for( index = 0; astOK && index < nel; index++ ) {
- (void) sprintf( buff, "v%d_%d", nentry, index + 1 );
- dlist[ index ] = astReadDouble( channel, buff, AST__BAD );
- }
- astMapPut1D( new, key, nel, dlist, com );
- dlist = astFree( dlist );
- }
-
-/* Do the same for float values. */
- } else if( type == AST__FLOATTYPE ) {
- if( nel == 0 ) {
- (void) sprintf( buff, "val%d", nentry );
- dval = astReadDouble( channel, buff, 0.0 );
- astMapPut0F( new, key, (float) dval, com );
- } else {
- flist = astMalloc( sizeof(float)*nel );
- for( index = 0; astOK && index < nel; index++ ) {
- (void) sprintf( buff, "v%d_%d", nentry, index + 1 );
- flist[ index ] = (float) astReadDouble( channel, buff, 0.0 );
- }
- astMapPut1F( new, key, nel, flist, com );
- flist = astFree( flist );
- }
-
-/* Do the same for string values. */
- } else if( type == AST__STRINGTYPE ) {
- if( nel == 0 ) {
- (void) sprintf( buff, "val%d", nentry );
- sval = astReadString( channel, buff, "" );
- astMapPut0C( new, key, sval, com );
- sval = astFree( sval );
- } else {
- slist = astMalloc( sizeof(const char *)*nel );
- for( index = 0; astOK && index < nel; index++ ) {
- (void) sprintf( buff, "v%d_%d", nentry, index + 1 );
- slist[ index ] = astReadString( channel, buff, "" );
- }
- astMapPut1C( new, key, nel, slist, com );
- for( index = 0; astOK && index < nel; index++ ) {
- slist[ index ] = astFree( (void *) slist[ index ] );
- }
- slist = astFree( slist );
- }
-
-/* Do the same for object values. */
- } else if( type == AST__OBJECTTYPE ) {
- if( nel == 0 ) {
- (void) sprintf( buff, "val%d", nentry );
- aval = astReadObject( channel, buff, NULL );
- astMapPut0A( new, key, aval, com );
- if( aval ) aval = astAnnul( aval );
- } else {
- alist = astMalloc( sizeof(AstObject *)*nel );
- for( index = 0; astOK && index < nel; index++ ) {
- (void) sprintf( buff, "v%d_%d", nentry, index + 1 );
- alist[ index ] = astReadObject( channel, buff, NULL );
- }
- astMapPut1A( new, key, nel, alist, com );
- for( index = 0; astOK && index < nel; index++ ) {
- if( alist[ index ] ) alist[ index ] = astAnnul( alist[ index ] );
- }
- alist = astFree( alist );
- }
-
-/* Report an error if the data type is unknown. */
- } else if( astOK ) {
- astError( AST__BDFTS, "astLoadKeyMap(%s): Unknown data type code "
- "(%d) encountered whilst reading a %s.", status, name, type,
- name );
- }
-
-/* Free resources. */
- key = astFree( key );
- if( com ) com = astFree( com );
-
- }
-
-/* If an error occurred, clean up by deleting the new KeyMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new KeyMap pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-#define MAKE_MAPPUT0_(X,Xtype) \
-void astMapPut0##X##_( AstKeyMap *this, const char *key, Xtype value, \
- const char *comment, int *status ){ \
- if ( !astOK ) return; \
- (**astMEMBER(this,KeyMap,MapPut0##X))(this,key,value,comment, status ); \
-}
-MAKE_MAPPUT0_(D,double)
-MAKE_MAPPUT0_(F,float)
-MAKE_MAPPUT0_(I,int)
-MAKE_MAPPUT0_(C,const char *)
-MAKE_MAPPUT0_(A,AstObject *)
-MAKE_MAPPUT0_(P,void *)
-#undef MAKE_MAPPUT0_
-
-#define MAKE_MAPPUT1_(X,Xtype) \
-void astMapPut1##X##_( AstKeyMap *this, const char *key, int size, \
- Xtype value[], const char *comment, \
- int *status ){ \
- if ( !astOK ) return; \
- (**astMEMBER(this,KeyMap,MapPut1##X))(this,key,size,value,comment, status ); \
-}
-MAKE_MAPPUT1_(D,const double)
-MAKE_MAPPUT1_(F,const float)
-MAKE_MAPPUT1_(I,const int)
-MAKE_MAPPUT1_(C,const char *const)
-MAKE_MAPPUT1_(A,AstObject *const)
-MAKE_MAPPUT1_(P,void *const)
-#undef MAKE_MAPPUT1_
-
-#define MAKE_MAPGET0_(X,Xtype) \
-int astMapGet0##X##_( AstKeyMap *this, const char *key, Xtype *value, int *status ){ \
- if ( !astOK ) return 0; \
- return (**astMEMBER(this,KeyMap,MapGet0##X))(this,key,value, status ); \
-}
-MAKE_MAPGET0_(D,double)
-MAKE_MAPGET0_(F,float)
-MAKE_MAPGET0_(I,int)
-MAKE_MAPGET0_(C,const char *)
-MAKE_MAPGET0_(A,AstObject *)
-MAKE_MAPGET0_(P,void *)
-#undef MAKE_MAPGET0_
-
-
-#define MAKE_MAPGET1_(X,Xtype) \
-int astMapGet1##X##_( AstKeyMap *this, const char *key, int mxval, int *nval, \
- Xtype *value, int *status ){ \
- if ( !astOK ) return 0; \
- return (**astMEMBER(this,KeyMap,MapGet1##X))(this,key,mxval,nval,value,status); \
-}
-MAKE_MAPGET1_(D,double)
-MAKE_MAPGET1_(F,float)
-MAKE_MAPGET1_(I,int)
-MAKE_MAPGET1_(A,AstObject *)
-MAKE_MAPGET1_(P,void *)
-#undef MAKE_MAPGET1_
-
-#define MAKE_MAPGETELEM_(X,Xtype) \
-int astMapGetElem##X##_( AstKeyMap *this, const char *key, int elem, \
- Xtype *value, int *status ){ \
- if ( !astOK ) return 0; \
- return (**astMEMBER(this,KeyMap,MapGetElem##X))(this,key,elem,value,status); \
-}
-MAKE_MAPGETELEM_(D,double)
-MAKE_MAPGETELEM_(F,float)
-MAKE_MAPGETELEM_(I,int)
-MAKE_MAPGETELEM_(A,AstObject *)
-MAKE_MAPGETELEM_(P,void *)
-#undef MAKE_MAPGETELEM_
-
-int astMapGet1C_( AstKeyMap *this, const char *key, int l, int mxval, int *nval,
- char *value, int *status ){
- if ( !astOK ) return 0;
- return (**astMEMBER(this,KeyMap,MapGet1C))(this,key,l,mxval,nval,value,status);
-}
-
-int astMapGetElemC_( AstKeyMap *this, const char *key, int l, int elem,
- char *value, int *status ){
- if ( !astOK ) return 0;
- return (**astMEMBER(this,KeyMap,MapGetElemC))(this,key,l,elem,value,status);
-}
-
-void astMapRemove_( AstKeyMap *this, const char *key, int *status ){
- if ( !astOK ) return;
- (**astMEMBER(this,KeyMap,MapRemove))(this,key, status );
-}
-int astMapSize_( AstKeyMap *this, int *status ){
- if ( !astOK ) return 0;
- return (**astMEMBER(this,KeyMap,MapSize))(this, status );
-}
-int astMapLenC_( AstKeyMap *this, const char *key, int *status ){
- if ( !astOK ) return 0;
- return (**astMEMBER(this,KeyMap,MapLenC))(this,key, status );
-}
-int astMapLength_( AstKeyMap *this, const char *key, int *status ){
- if ( !astOK ) return 0;
- return (**astMEMBER(this,KeyMap,MapLength))(this,key, status );
-}
-int astMapType_( AstKeyMap *this, const char *key, int *status ){
- if ( !astOK ) return 0;
- return (**astMEMBER(this,KeyMap,MapType))(this,key, status );
-}
-int astMapHasKey_( AstKeyMap *this, const char *key, int *status ){
- if ( !astOK ) return 0;
- return (**astMEMBER(this,KeyMap,MapHasKey))(this,key, status );
-}
-const char *astMapKey_( AstKeyMap *this, int index, int *status ){
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,KeyMap,MapKey))(this,index, status );
-}
-int astGetSizeGuess_( AstKeyMap *this, int *status ){
- if( !astOK ) return 0;
- return (**astMEMBER(this,KeyMap,GetSizeGuess))(this, status );
-}
-int astTestSizeGuess_( AstKeyMap *this, int *status ){
- if( !astOK ) return 0;
- return (**astMEMBER(this,KeyMap,TestSizeGuess))(this, status );
-}
-void astClearSizeGuess_( AstKeyMap *this, int *status ){
- if( !astOK ) return;
- (**astMEMBER(this,KeyMap,ClearSizeGuess))(this, status );
-}
-void astSetSizeGuess_( AstKeyMap *this, int sizeguess, int *status ){
- if( !astOK ) return;
- (**astMEMBER(this,KeyMap,SetSizeGuess))(this,sizeguess, status );
-}
-
-
-
-
-
diff --git a/ast-5.3-1/keymap.h b/ast-5.3-1/keymap.h
deleted file mode 100644
index 246748c..0000000
--- a/ast-5.3-1/keymap.h
+++ /dev/null
@@ -1,415 +0,0 @@
-#if !defined( KEYMAP_INCLUDED ) /* Include this file only once */
-#define KEYMAP_INCLUDED
-/*
-*+
-* Name:
-* keymap.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the KeyMap class.
-
-* Invocation:
-* #include "keymap.h"
-
-* Description:
-* This include file defines the interface to the KeyMap class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The KeyMap class extends the Object class to represent a set of
-* key/value pairs. Keys are strings, and values can be integer,
-* floating point, string or Object - scalar of vector.
-
-* Inheritance:
-* The KeyMap class inherits from the Object class.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 13-NOV-2004 (DSB):
-* Original version.
-* 5-JUN-2006 (DSB):
-* Added support for single precision entries.
-* 7-MAR-2008 (DSB):
-* Added support for pointer ("P") entries.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h" /* Coordinate objects (parent class) */
-
-/* C header files. */
-/* --------------- */
-
-/* Macros */
-/* ====== */
-/* Data type constants: */
-#define AST__BADTYPE 0
-#define AST__INTTYPE 1
-#define AST__DOUBLETYPE 2
-#define AST__STRINGTYPE 3
-#define AST__OBJECTTYPE 4
-#define AST__FLOATTYPE 5
-#define AST__POINTERTYPE 6
-
-/* Define constants used to size global arrays in this module. */
-#define AST__KEYMAP_GETATTRIB_BUFF_LEN 50 /* Max length of string returned by GetAttrib */
-#define AST__KEYMAP_CONVERTVALUE_MAX_STRINGS 50 /* Number of string values to buffer in ConvertValue */
-#define AST__KEYMAP_CONVERTVALUE_BUFF_LEN 50 /* Max. characters in result buffer for ConvertValue */
-#define AST__KEYMAP_MAPKEY_MAX_STRINGS 50 /* Number of string values to buffer in MapKey */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-
-/* This structure contains information describing a single generic entry in
- a KeyMap. This structure is extended by other structures to hold data of
- specific data types. */
-
-typedef struct AstMapEntry {
- struct AstMapEntry *next; /* Pointer to next structure in list. */
- const char *key; /* The name used to identify the entry */
- unsigned long hash; /* The full width hash value */
- int type; /* Data type. */
- int nel; /* 0 => scalar, >0 => array with "nel" elements */
- const char *comment; /* Pointer to a comment for the entry */
-} AstMapEntry;
-
-/* KeyMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstKeyMap {
-
-/* Attributes inherited from the parent class. */
- AstObject object; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- int sizeguess; /* Guess at KeyMap size */
- AstMapEntry **table; /* Hash table containing pointers to
- the KeyMap entries */
- int *nentry; /* No. of Entries in each table element */
- int mapsize; /* Length of table */
- int keyerror; /* Report error if no key? */
-} AstKeyMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstKeyMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstObjectVtab object_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- void (* MapPut0I)( AstKeyMap *, const char *, int, const char *, int * );
- void (* MapPut0D)( AstKeyMap *, const char *, double, const char *, int * );
- void (* MapPut0F)( AstKeyMap *, const char *, float, const char *, int * );
- void (* MapPut0C)( AstKeyMap *, const char *, const char *, const char *, int * );
- void (* MapPut0A)( AstKeyMap *, const char *, AstObject *, const char *, int * );
- void (* MapPut0P)( AstKeyMap *, const char *, void *, const char *, int * );
- void (* MapPut1I)( AstKeyMap *, const char *, int, const int[], const char *, int * );
- void (* MapPut1D)( AstKeyMap *, const char *, int, const double[], const char *, int * );
- void (* MapPut1F)( AstKeyMap *, const char *, int, const float[], const char *, int * );
- void (* MapPut1C)( AstKeyMap *, const char *, int, const char *const [], const char *, int * );
- void (* MapPut1A)( AstKeyMap *, const char *, int, AstObject *const [], const char *, int * );
- void (* MapPut1P)( AstKeyMap *, const char *, int, void *const [], const char *, int * );
- int (* MapGet0I)( AstKeyMap *, const char *, int *, int * );
- int (* MapGet0D)( AstKeyMap *, const char *, double *, int * );
- int (* MapGet0F)( AstKeyMap *, const char *, float *, int * );
- int (* MapGet0C)( AstKeyMap *, const char *, const char **, int * );
- int (* MapGet0A)( AstKeyMap *, const char *, AstObject **, int * );
- int (* MapGet0P)( AstKeyMap *, const char *, void **, int * );
- int (* MapGet1A)( AstKeyMap *, const char *, int, int *, AstObject **, int * );
- int (* MapGet1P)( AstKeyMap *, const char *, int, int *, void **, int * );
- int (* MapGet1C)( AstKeyMap *, const char *, int, int, int *, char *, int * );
- int (* MapGet1D)( AstKeyMap *, const char *, int, int *, double *, int * );
- int (* MapGet1F)( AstKeyMap *, const char *, int, int *, float *, int * );
- int (* MapGet1I)( AstKeyMap *, const char *, int, int *, int *, int * );
- int (* MapGetElemA)( AstKeyMap *, const char *, int, AstObject **, int * );
- int (* MapGetElemP)( AstKeyMap *, const char *, int, void **, int * );
- int (* MapGetElemC)( AstKeyMap *, const char *, int, int, char *, int * );
- int (* MapGetElemD)( AstKeyMap *, const char *, int, double *, int * );
- int (* MapGetElemF)( AstKeyMap *, const char *, int, float *, int * );
- int (* MapGetElemI)( AstKeyMap *, const char *, int, int *, int * );
- void (* MapRemove)( AstKeyMap *, const char *, int * );
- int (* MapSize)( AstKeyMap *, int * );
- int (* MapLength)( AstKeyMap *, const char *, int * );
- int (* MapLenC)( AstKeyMap *, const char *, int * );
- int (* MapType)( AstKeyMap *, const char *, int * );
- int (* MapHasKey)( AstKeyMap *, const char *, int * );
- const char *(* MapKey)( AstKeyMap *, int, int * );
-
- int (* GetSizeGuess)( AstKeyMap *, int * );
- int (* TestSizeGuess)( AstKeyMap *, int * );
- void (* SetSizeGuess)( AstKeyMap *, int, int * );
- void (* ClearSizeGuess)( AstKeyMap *, int * );
-
- int (* GetKeyError)( AstKeyMap *, int * );
- int (* TestKeyError)( AstKeyMap *, int * );
- void (* ClearKeyError)( AstKeyMap *, int * );
- void (* SetKeyError)( AstKeyMap *, int, int * );
-
-} AstKeyMapVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstKeyMapGlobals {
- AstKeyMapVtab Class_Vtab;
- int Class_Init;
- char GetAttrib_Buff[ AST__KEYMAP_GETATTRIB_BUFF_LEN + 1 ];
- char *ConvertValue_Strings[ AST__KEYMAP_CONVERTVALUE_MAX_STRINGS ];
- int ConvertValue_Istr;
- int ConvertValue_Init;
- char ConvertValue_Buff[ AST__KEYMAP_CONVERTVALUE_BUFF_LEN + 1 ];
- char *MapKey_Strings[ AST__KEYMAP_MAPKEY_MAX_STRINGS ];
- int MapKey_Istr;
- int MapKey_Init;
-} AstKeyMapGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(KeyMap) /* Check class membership */
-astPROTO_ISA(KeyMap) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstKeyMap *astKeyMap_( const char *, int *, ...);
-#else
-AstKeyMap *astKeyMapId_( const char *, ... )__attribute__((format(printf,1,2)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstKeyMap *astInitKeyMap_( void *, size_t, int, AstKeyMapVtab *, const char *, int * );
-
-/* Vtab initialiser. */
-void astInitKeyMapVtab_( AstKeyMapVtab *, const char *, int * );
-
-/* Loader. */
-AstKeyMap *astLoadKeyMap_( void *, size_t, AstKeyMapVtab *, const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitKeyMapGlobals_( AstKeyMapGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-
-#if defined(astCLASS) /* Protected */
-int astMapGet0A_( AstKeyMap *, const char *, AstObject **, int * );
-int astMapGet1A_( AstKeyMap *, const char *, int, int *, AstObject **, int * );
-void astMapPut1A_( AstKeyMap *, const char *, int, AstObject *const [], const char *, int * );
-int astMapGetElemA_( AstKeyMap *, const char *, int, AstObject **, int * );
-#else
-int astMapGet0AId_( AstKeyMap *, const char *, AstObject **, int * );
-int astMapGet1AId_( AstKeyMap *, const char *, int, int *, AstObject **, int * );
-void astMapPut1AId_( AstKeyMap *, const char *, int, AstObject *const [], const char *, int * );
-int astMapGetElemAId_( AstKeyMap *, const char *, int, AstObject **, int * );
-#endif
-
-const char *astMapKey_( AstKeyMap *, int, int * );
-int astMapGet0C_( AstKeyMap *, const char *, const char **, int * );
-int astMapGet0D_( AstKeyMap *, const char *, double *, int * );
-int astMapGet0F_( AstKeyMap *, const char *, float *, int * );
-int astMapGet0I_( AstKeyMap *, const char *, int *, int * );
-int astMapGet1C_( AstKeyMap *, const char *, int, int, int *, char *, int * );
-int astMapGet1D_( AstKeyMap *, const char *, int, int *, double *, int * );
-int astMapGet1F_( AstKeyMap *, const char *, int, int *, float *, int * );
-int astMapGet1I_( AstKeyMap *, const char *, int, int *, int *, int * );
-int astMapGetElemC_( AstKeyMap *, const char *, int, int, char *, int * );
-int astMapGetElemD_( AstKeyMap *, const char *, int, double *, int * );
-int astMapGetElemF_( AstKeyMap *, const char *, int, float *, int * );
-int astMapGetElemI_( AstKeyMap *, const char *, int, int *, int * );
-int astMapHasKey_( AstKeyMap *, const char *, int * );
-int astMapLength_( AstKeyMap *, const char *, int * );
-int astMapLenC_( AstKeyMap *, const char *, int * );
-int astMapSize_( AstKeyMap *, int * );
-int astMapType_( AstKeyMap *, const char *, int * );
-void astMapPut0A_( AstKeyMap *, const char *, AstObject *, const char *, int * );
-void astMapPut0C_( AstKeyMap *, const char *, const char *, const char *, int * );
-void astMapPut0D_( AstKeyMap *, const char *, double, const char *, int * );
-void astMapPut0F_( AstKeyMap *, const char *, float, const char *, int * );
-void astMapPut0I_( AstKeyMap *, const char *, int, const char *, int * );
-void astMapPut1C_( AstKeyMap *, const char *, int, const char *const [], const char *, int * );
-void astMapPut1D_( AstKeyMap *, const char *, int, const double *, const char *, int * );
-void astMapPut1F_( AstKeyMap *, const char *, int, const float *, const char *, int * );
-void astMapPut1I_( AstKeyMap *, const char *, int, const int *, const char *, int * );
-void astMapRemove_( AstKeyMap *, const char *, int * );
-int astMapGet0P_( AstKeyMap *, const char *, void **, int * );
-int astMapGet1P_( AstKeyMap *, const char *, int, int *, void **, int * );
-int astMapGetElemP_( AstKeyMap *, const char *, int, void **, int * );
-void astMapPut0P_( AstKeyMap *, const char *, void *, const char *, int * );
-void astMapPut1P_( AstKeyMap *, const char *, int, void *const [], const char *, int * );
-
-#if defined(astCLASS) /* Protected */
-int astGetSizeGuess_( AstKeyMap *, int * );
-int astTestSizeGuess_( AstKeyMap *, int * );
-void astSetSizeGuess_( AstKeyMap *, int, int * );
-void astClearSizeGuess_( AstKeyMap *, int * );
-
-int astGetKeyError_( AstKeyMap *, int * );
-int astTestKeyError_( AstKeyMap *, int * );
-void astSetKeyError_( AstKeyMap *, int, int * );
-void astClearKeyError_( AstKeyMap *, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckKeyMap(this) astINVOKE_CHECK(KeyMap,this,0)
-#define astVerifyKeyMap(this) astINVOKE_CHECK(KeyMap,this,1)
-
-/* Test class membership. */
-#define astIsAKeyMap(this) astINVOKE_ISA(KeyMap,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astKeyMap astINVOKE(F,astKeyMap_)
-#else
-#define astKeyMap astINVOKE(F,astKeyMapId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitKeyMap(mem,size,init,vtab,name) astINVOKE(O,astInitKeyMap_(mem,size,init,vtab,name,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitKeyMapVtab(vtab,name) astINVOKE(V,astInitKeyMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadKeyMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadKeyMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckKeyMap to validate KeyMap pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-#define astMapPut0I(this,key,value,comment) astINVOKE(V,astMapPut0I_(astCheckKeyMap(this),key,value,comment,STATUS_PTR))
-#define astMapPut0D(this,key,value,comment) astINVOKE(V,astMapPut0D_(astCheckKeyMap(this),key,value,comment,STATUS_PTR))
-#define astMapPut0F(this,key,value,comment) astINVOKE(V,astMapPut0F_(astCheckKeyMap(this),key,value,comment,STATUS_PTR))
-#define astMapPut0C(this,key,value,comment) astINVOKE(V,astMapPut0C_(astCheckKeyMap(this),key,value,comment,STATUS_PTR))
-#define astMapPut0A(this,key,value,comment) astINVOKE(V,astMapPut0A_(astCheckKeyMap(this),key,astCheckObject(value),comment,STATUS_PTR))
-#define astMapPut0P(this,key,value,comment) astINVOKE(V,astMapPut0P_(astCheckKeyMap(this),key,value,comment,STATUS_PTR))
-#define astMapPut1I(this,key,size,value,comment) astINVOKE(V,astMapPut1I_(astCheckKeyMap(this),key,size,value,comment,STATUS_PTR))
-#define astMapPut1D(this,key,size,value,comment) astINVOKE(V,astMapPut1D_(astCheckKeyMap(this),key,size,value,comment,STATUS_PTR))
-#define astMapPut1F(this,key,size,value,comment) astINVOKE(V,astMapPut1F_(astCheckKeyMap(this),key,size,value,comment,STATUS_PTR))
-#define astMapPut1C(this,key,size,value,comment) astINVOKE(V,astMapPut1C_(astCheckKeyMap(this),key,size,value,comment,STATUS_PTR))
-#define astMapGet0I(this,key,value) astINVOKE(V,astMapGet0I_(astCheckKeyMap(this),key,value,STATUS_PTR))
-#define astMapGet0D(this,key,value) astINVOKE(V,astMapGet0D_(astCheckKeyMap(this),key,value,STATUS_PTR))
-#define astMapGet0F(this,key,value) astINVOKE(V,astMapGet0F_(astCheckKeyMap(this),key,value,STATUS_PTR))
-#define astMapGet0C(this,key,value) astINVOKE(V,astMapGet0C_(astCheckKeyMap(this),key,value,STATUS_PTR))
-#define astMapGet1I(this,key,mxval,nval,value) astINVOKE(V,astMapGet1I_(astCheckKeyMap(this),key,mxval,nval,value,STATUS_PTR))
-#define astMapGet1D(this,key,mxval,nval,value) astINVOKE(V,astMapGet1D_(astCheckKeyMap(this),key,mxval,nval,value,STATUS_PTR))
-#define astMapGet1F(this,key,mxval,nval,value) astINVOKE(V,astMapGet1F_(astCheckKeyMap(this),key,mxval,nval,value,STATUS_PTR))
-#define astMapGet1C(this,key,l,mxval,nval,value) astINVOKE(V,astMapGet1C_(astCheckKeyMap(this),key,l,mxval,nval,value,STATUS_PTR))
-#define astMapGetElemI(this,key,elem,value) astINVOKE(V,astMapGetElemI_(astCheckKeyMap(this),key,elem,value,STATUS_PTR))
-#define astMapGetElemD(this,key,elem,value) astINVOKE(V,astMapGetElemD_(astCheckKeyMap(this),key,elem,value,STATUS_PTR))
-#define astMapGetElemF(this,key,elem,value) astINVOKE(V,astMapGetElemF_(astCheckKeyMap(this),key,elem,value,STATUS_PTR))
-#define astMapGetElemC(this,key,l,elem,value) astINVOKE(V,astMapGetElemC_(astCheckKeyMap(this),key,l,elem,value,STATUS_PTR))
-#define astMapRemove(this,key) astINVOKE(V,astMapRemove_(astCheckKeyMap(this),key,STATUS_PTR))
-#define astMapSize(this) astINVOKE(V,astMapSize_(astCheckKeyMap(this),STATUS_PTR))
-#define astMapLength(this,key) astINVOKE(V,astMapLength_(astCheckKeyMap(this),key,STATUS_PTR))
-#define astMapLenC(this,key) astINVOKE(V,astMapLenC_(astCheckKeyMap(this),key,STATUS_PTR))
-#define astMapHasKey(this,key) astINVOKE(V,astMapHasKey_(astCheckKeyMap(this),key,STATUS_PTR))
-#define astMapKey(this,index) astINVOKE(V,astMapKey_(astCheckKeyMap(this),index,STATUS_PTR))
-#define astMapType(this,key) astINVOKE(V,astMapType_(astCheckKeyMap(this),key,STATUS_PTR))
-#define astMapGet0P(this,key,value) astINVOKE(V,astMapGet0P_(astCheckKeyMap(this),key,value,STATUS_PTR))
-#define astMapGet1P(this,key,mxval,nval,value) astINVOKE(V,astMapGet1P_(astCheckKeyMap(this),key,mxval,nval,value,STATUS_PTR))
-#define astMapPut1P(this,key,size,value,comment) astINVOKE(V,astMapPut1P_(astCheckKeyMap(this),key,size,value,comment,STATUS_PTR))
-#define astMapGetElemP(this,key,elem,value) astINVOKE(V,astMapGetElemP_(astCheckKeyMap(this),key,elem,value,STATUS_PTR))
-
-#if defined(astCLASS) /* Protected */
-#define astMapGet0A(this,key,value) astINVOKE(V,astMapGet0A_(astCheckKeyMap(this),key,(AstObject **)(value),STATUS_PTR))
-#define astMapGet1A(this,key,mxval,nval,value) astINVOKE(V,astMapGet1A_(astCheckKeyMap(this),key,mxval,nval,(AstObject **)(value),STATUS_PTR))
-#define astMapPut1A(this,key,size,value,comment) astINVOKE(V,astMapPut1A_(astCheckKeyMap(this),key,size,value,comment,STATUS_PTR))
-#define astMapGetElemA(this,key,elem,value) astINVOKE(V,astMapGetElemA_(astCheckKeyMap(this),key,elem,(AstObject **)(value),STATUS_PTR))
-
-#define astClearSizeGuess(this) \
-astINVOKE(V,astClearSizeGuess_(astCheckKeyMap(this),STATUS_PTR))
-#define astGetSizeGuess(this) \
-astINVOKE(V,astGetSizeGuess_(astCheckKeyMap(this),STATUS_PTR))
-#define astSetSizeGuess(this,sizeguess) \
-astINVOKE(V,astSetSizeGuess_(astCheckKeyMap(this),sizeguess,STATUS_PTR))
-#define astTestSizeGuess(this) \
-astINVOKE(V,astTestSizeGuess_(astCheckKeyMap(this),STATUS_PTR))
-
-#define astClearKeyError(this) \
-astINVOKE(V,astClearKeyError_(astCheckKeyMap(this),STATUS_PTR))
-#define astGetKeyError(this) \
-astINVOKE(V,astGetKeyError_(astCheckKeyMap(this),STATUS_PTR))
-#define astSetKeyError(this,keyerror) \
-astINVOKE(V,astSetKeyError_(astCheckKeyMap(this),keyerror,STATUS_PTR))
-#define astTestKeyError(this) \
-astINVOKE(V,astTestKeyError_(astCheckKeyMap(this),STATUS_PTR))
-
-#else
-#define astMapGet0A(this,key,value) astINVOKE(V,astMapGet0AId_(astCheckKeyMap(this),key,(AstObject **)(value),STATUS_PTR))
-#define astMapGet1A(this,key,mxval,nval,value) astINVOKE(V,astMapGet1AId_(astCheckKeyMap(this),key,mxval,nval,(AstObject **)(value),STATUS_PTR))
-#define astMapPut1A(this,key,size,value,comment) astINVOKE(V,astMapPut1AId_(astCheckKeyMap(this),key,size,value,comment,STATUS_PTR))
-#define astMapGetElemA(this,key,elem,value) astINVOKE(V,astMapGetElemAId_(astCheckKeyMap(this),key,elem,(AstObject **)(value),STATUS_PTR))
-#endif
-
-#endif
-
diff --git a/ast-5.3-1/loader.c b/ast-5.3-1/loader.c
deleted file mode 100644
index 85d253a..0000000
--- a/ast-5.3-1/loader.c
+++ /dev/null
@@ -1,188 +0,0 @@
-#define astCLASS
-#include "axis.h"
-#include "box.h"
-#include "channel.h"
-#include "circle.h"
-#include "cmpframe.h"
-#include "cmpmap.h"
-#include "cmpregion.h"
-#include "dsbspecframe.h"
-#include "dssmap.h"
-#include "ellipse.h"
-#include "fitschan.h"
-#include "fluxframe.h"
-#include "timeframe.h"
-#include "timemap.h"
-#include "frame.h"
-#include "frameset.h"
-#include "grismmap.h"
-#include "interval.h"
-#include "intramap.h"
-#include "keymap.h"
-#include "loader.h"
-#include "lutmap.h"
-#include "mapping.h"
-#include "mathmap.h"
-#include "matrixmap.h"
-#include "nullregion.h"
-#include "object.h"
-#include "pcdmap.h"
-#include "permmap.h"
-#include "plot.h"
-#include "plot3d.h"
-#include "pointlist.h"
-#include "pointset.h"
-#include "polygon.h"
-#include "polymap.h"
-#include "prism.h"
-#include "normmap.h"
-#include "ratemap.h"
-#include "region.h"
-#include "shiftmap.h"
-#include "skyaxis.h"
-#include "skyframe.h"
-#include "slamap.h"
-#include "specfluxframe.h"
-#include "specframe.h"
-#include "specmap.h"
-#include "sphmap.h"
-#include "tranmap.h"
-#include "selectormap.h"
-#include "switchmap.h"
-#include "unitmap.h"
-#include "wcsmap.h"
-#include "winmap.h"
-#include "xmlchan.h"
-#include "zoommap.h"
-#include "stc.h"
-#include "stcresourceprofile.h"
-#include "stcsearchlocation.h"
-#include "stccatalogentrylocation.h"
-#include "stcobsdatalocation.h"
-#include "stcschan.h"
-
-#include "error.h"
-#include "ast_err.h"
-#include <stddef.h>
-#include <string.h>
-
-/*
-*+
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 18-NOV-1997 (RFWS):
-* Original version.
-* 18-MAR-1998 (RFWS):
-* Added the IntraMap class.
-* 3-JUN-1999 (RFWS):
-* Added the PcdMap class.
-* 17-AUG-1999 (RFWS):
-* Added the MathMap class.
-* 8-JAN-2003 (DSB):
-* Added the SpecMap and SpecFrame classes.
-* 15-JUL-2003 (DSB):
-* Added the GrsimMap class.
-* 6-FEB-2009 (DSB):
-* Added the StcsChan class.
-*-
-*/
-
-AstLoaderType *astGetLoader( const char *class, int *status ) {
- if ( !astOK ) return NULL;
-
-#define LOAD(name) \
-if ( !strcmp( class, #name ) ) return (AstLoaderType *) astLoad##name##_
-
- LOAD(Axis);
- LOAD(Box);
- LOAD(Channel);
- LOAD(Circle);
- LOAD(CmpFrame);
- LOAD(CmpMap);
- LOAD(CmpRegion);
- LOAD(DSBSpecFrame);
- LOAD(DssMap);
- LOAD(Ellipse);
- LOAD(FitsChan);
- LOAD(FluxFrame);
- LOAD(Frame);
- LOAD(FrameSet);
- LOAD(GrismMap);
- LOAD(Interval);
- LOAD(IntraMap);
- LOAD(KeyMap);
- LOAD(LutMap);
- LOAD(Mapping);
- LOAD(MathMap);
- LOAD(MatrixMap);
- LOAD(NullRegion);
- LOAD(Object);
- LOAD(PcdMap);
- LOAD(PermMap);
- LOAD(Plot);
- LOAD(Plot3D);
- LOAD(PointList);
- LOAD(PointSet);
- LOAD(PolyMap);
- LOAD(Polygon);
- LOAD(Prism);
- LOAD(NormMap);
- LOAD(RateMap);
- LOAD(Region);
- LOAD(ShiftMap);
- LOAD(SkyAxis);
- LOAD(SkyFrame);
- LOAD(SlaMap);
- LOAD(SpecFluxFrame);
- LOAD(SpecFrame);
- LOAD(SpecMap);
- LOAD(SphMap);
- LOAD(SelectorMap);
- LOAD(SwitchMap);
- LOAD(TimeFrame);
- LOAD(TimeMap);
- LOAD(TranMap);
- LOAD(UnitMap);
- LOAD(WcsMap);
- LOAD(WinMap);
- LOAD(XmlChan);
- LOAD(ZoomMap);
-
- LOAD(StcsChan);
- LOAD(Stc);
- LOAD(StcResourceProfile);
- LOAD(StcSearchLocation);
- LOAD(StcCatalogEntryLocation);
- LOAD(StcObsDataLocation);
-
- astError( AST__OCLUK, "astGetLoader: Object of unknown class \"%s\" cannot "
- "be loaded.", status, class );
- return NULL;
-#undef LOAD
-}
-
-
-
diff --git a/ast-5.3-1/loader.h b/ast-5.3-1/loader.h
deleted file mode 100644
index 65fd405..0000000
--- a/ast-5.3-1/loader.h
+++ /dev/null
@@ -1,49 +0,0 @@
-#if !defined( LOADER_INCLUDED ) /* Include this file only once */
-#define LOADER_INCLUDED
-/*
-*+
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 18-NOV-1997 (RFWS):
-* Original version.
-*-
-*/
-
-#include "object.h"
-#include "channel.h"
-
-#if defined(astCLASS) /* Protected */
-
-typedef AstObject *(AstLoaderType)( void *, size_t, AstObjectVtab *,
- const char *, AstChannel *, int * );
-
-AstLoaderType *astGetLoader( const char *, int * );
-
-#endif
-#endif
-
-
-
diff --git a/ast-5.3-1/ltmain.sh b/ast-5.3-1/ltmain.sh
deleted file mode 100644
index 57fea5a..0000000
--- a/ast-5.3-1/ltmain.sh
+++ /dev/null
@@ -1,6500 +0,0 @@
-# ltmain.sh - Provide generalized library-building support services.
-# NOTE: Changing this file will not affect anything until you rerun configure.
-#
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005
-# Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-basename="s,^.*/,,g"
-
-# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
-# is ksh but when the shell is invoked as "sh" and the current value of
-# the _XPG environment variable is not equal to 1 (one), the special
-# positional parameter $0, within a function call, is the name of the
-# function.
-progpath="$0"
-
-# The name of this program:
-progname=`echo "$progpath" | $SED $basename`
-modename="$progname"
-
-# Global variables:
-EXIT_SUCCESS=0
-EXIT_FAILURE=1
-
-PROGRAM=ltmain.sh
-PACKAGE=libtool
-VERSION=1.5.18
-TIMESTAMP=" (1.1.1.4 2005/07/21 14:39:23)"
-
-# See if we are running on zsh, and set the options which allow our
-# commands through without removal of \ escapes.
-if test -n "${ZSH_VERSION+set}" ; then
- setopt NO_GLOB_SUBST
-fi
-
-# Check that we have a working $echo.
-if test "X$1" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
-elif test "X$1" = X--fallback-echo; then
- # Avoid inline document here, it may be left over
- :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
- # Yippee, $echo works!
- :
-else
- # Restart under the correct shell, and then maybe $echo will work.
- exec $SHELL "$progpath" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
- # used as fallback echo
- shift
- cat <<EOF
-$*
-EOF
- exit $EXIT_SUCCESS
-fi
-
-default_mode=
-help="Try \`$progname --help' for more information."
-magic="%%%MAGIC variable%%%"
-mkdir="mkdir"
-mv="mv -f"
-rm="rm -f"
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed="${SED}"' -e 1s/^X//'
-sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
-# test EBCDIC or ASCII
-case `echo A|tr A '\301'` in
- A) # EBCDIC based system
- SP2NL="tr '\100' '\n'"
- NL2SP="tr '\r\n' '\100\100'"
- ;;
- *) # Assume ASCII based system
- SP2NL="tr '\040' '\012'"
- NL2SP="tr '\015\012' '\040\040'"
- ;;
-esac
-
-# NLS nuisances.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
-# We save the old values to restore during execute mode.
-if test "${LC_ALL+set}" = set; then
- save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
-fi
-if test "${LANG+set}" = set; then
- save_LANG="$LANG"; LANG=C; export LANG
-fi
-
-# Make sure IFS has a sensible default
-lt_nl='
-'
-IFS=" $lt_nl"
-
-if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
- $echo "$modename: not configured to build any kind of library" 1>&2
- $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
- exit $EXIT_FAILURE
-fi
-
-# Global variables.
-mode=$default_mode
-nonopt=
-prev=
-prevopt=
-run=
-show="$echo"
-show_help=
-execute_dlfiles=
-lo2o="s/\\.lo\$/.${objext}/"
-o2lo="s/\\.${objext}\$/.lo/"
-quote_scanset='[[~#^*{};<>?'"'"' ]'
-
-#####################################
-# Shell function definitions:
-# This seems to be the best place for them
-
-# func_win32_libid arg
-# return the library type of file 'arg'
-#
-# Need a lot of goo to handle *both* DLLs and import libs
-# Has to be a shell function in order to 'eat' the argument
-# that is supplied when $file_magic_command is called.
-func_win32_libid ()
-{
- win32_libid_type="unknown"
- win32_fileres=`file -L $1 2>/dev/null`
- case $win32_fileres in
- *ar\ archive\ import\ library*) # definitely import
- win32_libid_type="x86 archive import"
- ;;
- *ar\ archive*) # could be an import, or static
- if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \
- $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
- win32_nmres=`eval $NM -f posix -A $1 | \
- sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'`
- if test "X$win32_nmres" = "Ximport" ; then
- win32_libid_type="x86 archive import"
- else
- win32_libid_type="x86 archive static"
- fi
- fi
- ;;
- *DLL*)
- win32_libid_type="x86 DLL"
- ;;
- *executable*) # but shell scripts are "executable" too...
- case $win32_fileres in
- *MS\ Windows\ PE\ Intel*)
- win32_libid_type="x86 DLL"
- ;;
- esac
- ;;
- esac
- $echo $win32_libid_type
-}
-
-
-# func_infer_tag arg
-# Infer tagged configuration to use if any are available and
-# if one wasn't chosen via the "--tag" command line option.
-# Only attempt this if the compiler in the base compile
-# command doesn't match the default compiler.
-# arg is usually of the form 'gcc ...'
-func_infer_tag ()
-{
- if test -n "$available_tags" && test -z "$tagname"; then
- CC_quoted=
- for arg in $CC; do
- case $arg in
- *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
- arg="\"$arg\""
- ;;
- esac
- CC_quoted="$CC_quoted $arg"
- done
- case $@ in
- # Blanks in the command may have been stripped by the calling shell,
- # but not from the CC environment variable when configure was run.
- " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;;
- # Blanks at the start of $base_compile will cause this to fail
- # if we don't check for them as well.
- *)
- for z in $available_tags; do
- if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
- # Evaluate the configuration.
- eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
- CC_quoted=
- for arg in $CC; do
- # Double-quote args containing other shell metacharacters.
- case $arg in
- *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
- arg="\"$arg\""
- ;;
- esac
- CC_quoted="$CC_quoted $arg"
- done
- case "$@ " in
- " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*)
- # The compiler in the base compile command matches
- # the one in the tagged configuration.
- # Assume this is the tagged configuration we want.
- tagname=$z
- break
- ;;
- esac
- fi
- done
- # If $tagname still isn't set, then no tagged configuration
- # was found and let the user know that the "--tag" command
- # line option must be used.
- if test -z "$tagname"; then
- $echo "$modename: unable to infer tagged configuration"
- $echo "$modename: specify a tag with \`--tag'" 1>&2
- exit $EXIT_FAILURE
-# else
-# $echo "$modename: using $tagname tagged configuration"
- fi
- ;;
- esac
- fi
-}
-
-
-# func_extract_an_archive dir oldlib
-func_extract_an_archive ()
-{
- f_ex_an_ar_dir="$1"; shift
- f_ex_an_ar_oldlib="$1"
-
- $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)"
- $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $?
- if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
- :
- else
- $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2
- exit $EXIT_FAILURE
- fi
-}
-
-# func_extract_archives gentop oldlib ...
-func_extract_archives ()
-{
- my_gentop="$1"; shift
- my_oldlibs=${1+"$@"}
- my_oldobjs=""
- my_xlib=""
- my_xabs=""
- my_xdir=""
- my_status=""
-
- $show "${rm}r $my_gentop"
- $run ${rm}r "$my_gentop"
- $show "$mkdir $my_gentop"
- $run $mkdir "$my_gentop"
- my_status=$?
- if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then
- exit $my_status
- fi
-
- for my_xlib in $my_oldlibs; do
- # Extract the objects.
- case $my_xlib in
- [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
- *) my_xabs=`pwd`"/$my_xlib" ;;
- esac
- my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'`
- my_xdir="$my_gentop/$my_xlib"
-
- $show "${rm}r $my_xdir"
- $run ${rm}r "$my_xdir"
- $show "$mkdir $my_xdir"
- $run $mkdir "$my_xdir"
- status=$?
- if test "$status" -ne 0 && test ! -d "$my_xdir"; then
- exit $status
- fi
- case $host in
- *-darwin*)
- $show "Extracting $my_xabs"
- # Do not bother doing anything if just a dry run
- if test -z "$run"; then
- darwin_orig_dir=`pwd`
- cd $my_xdir || exit $?
- darwin_archive=$my_xabs
- darwin_curdir=`pwd`
- darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'`
- darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null`
- if test -n "$darwin_arches"; then
- darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'`
- darwin_arch=
- $show "$darwin_base_archive has multiple architectures $darwin_arches"
- for darwin_arch in $darwin_arches ; do
- mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
- lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
- cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
- func_extract_an_archive "`pwd`" "${darwin_base_archive}"
- cd "$darwin_curdir"
- $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
- done # $darwin_arches
- ## Okay now we have a bunch of thin objects, gotta fatten them up :)
- darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP`
- darwin_file=
- darwin_files=
- for darwin_file in $darwin_filelist; do
- darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
- lipo -create -output "$darwin_file" $darwin_files
- done # $darwin_filelist
- ${rm}r unfat-$$
- cd "$darwin_orig_dir"
- else
- cd "$darwin_orig_dir"
- func_extract_an_archive "$my_xdir" "$my_xabs"
- fi # $darwin_arches
- fi # $run
- ;;
- *)
- func_extract_an_archive "$my_xdir" "$my_xabs"
- ;;
- esac
- my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
- done
- func_extract_archives_result="$my_oldobjs"
-}
-# End of Shell function definitions
-#####################################
-
-# Darwin sucks
-eval std_shrext=\"$shrext_cmds\"
-
-# Parse our command line options once, thoroughly.
-while test "$#" -gt 0
-do
- arg="$1"
- shift
-
- case $arg in
- -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
- *) optarg= ;;
- esac
-
- # If the previous option needs an argument, assign it.
- if test -n "$prev"; then
- case $prev in
- execute_dlfiles)
- execute_dlfiles="$execute_dlfiles $arg"
- ;;
- tag)
- tagname="$arg"
- preserve_args="${preserve_args}=$arg"
-
- # Check whether tagname contains only valid characters
- case $tagname in
- *[!-_A-Za-z0-9,/]*)
- $echo "$progname: invalid tag name: $tagname" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
-
- case $tagname in
- CC)
- # Don't test for the "default" C tag, as we know, it's there, but
- # not specially marked.
- ;;
- *)
- if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then
- taglist="$taglist $tagname"
- # Evaluate the configuration.
- eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`"
- else
- $echo "$progname: ignoring unknown tag $tagname" 1>&2
- fi
- ;;
- esac
- ;;
- *)
- eval "$prev=\$arg"
- ;;
- esac
-
- prev=
- prevopt=
- continue
- fi
-
- # Have we seen a non-optional argument yet?
- case $arg in
- --help)
- show_help=yes
- ;;
-
- --version)
- $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
- $echo
- $echo "Copyright (C) 2005 Free Software Foundation, Inc."
- $echo "This is free software; see the source for copying conditions. There is NO"
- $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
- exit $?
- ;;
-
- --config)
- ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath
- # Now print the configurations for the tags.
- for tagname in $taglist; do
- ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath"
- done
- exit $?
- ;;
-
- --debug)
- $echo "$progname: enabling shell trace mode"
- set -x
- preserve_args="$preserve_args $arg"
- ;;
-
- --dry-run | -n)
- run=:
- ;;
-
- --features)
- $echo "host: $host"
- if test "$build_libtool_libs" = yes; then
- $echo "enable shared libraries"
- else
- $echo "disable shared libraries"
- fi
- if test "$build_old_libs" = yes; then
- $echo "enable static libraries"
- else
- $echo "disable static libraries"
- fi
- exit $?
- ;;
-
- --finish) mode="finish" ;;
-
- --mode) prevopt="--mode" prev=mode ;;
- --mode=*) mode="$optarg" ;;
-
- --preserve-dup-deps) duplicate_deps="yes" ;;
-
- --quiet | --silent)
- show=:
- preserve_args="$preserve_args $arg"
- ;;
-
- --tag) prevopt="--tag" prev=tag ;;
- --tag=*)
- set tag "$optarg" ${1+"$@"}
- shift
- prev=tag
- preserve_args="$preserve_args --tag"
- ;;
-
- -dlopen)
- prevopt="-dlopen"
- prev=execute_dlfiles
- ;;
-
- -*)
- $echo "$modename: unrecognized option \`$arg'" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- ;;
-
- *)
- nonopt="$arg"
- break
- ;;
- esac
-done
-
-if test -n "$prevopt"; then
- $echo "$modename: option \`$prevopt' requires an argument" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
-fi
-
-# If this variable is set in any of the actions, the command in it
-# will be execed at the end. This prevents here-documents from being
-# left over by shells.
-exec_cmd=
-
-if test -z "$show_help"; then
-
- # Infer the operation mode.
- if test -z "$mode"; then
- $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2
- $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2
- case $nonopt in
- *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*)
- mode=link
- for arg
- do
- case $arg in
- -c)
- mode=compile
- break
- ;;
- esac
- done
- ;;
- *db | *dbx | *strace | *truss)
- mode=execute
- ;;
- *install*|cp|mv)
- mode=install
- ;;
- *rm)
- mode=uninstall
- ;;
- *)
- # If we have no mode, but dlfiles were specified, then do execute mode.
- test -n "$execute_dlfiles" && mode=execute
-
- # Just use the default operation mode.
- if test -z "$mode"; then
- if test -n "$nonopt"; then
- $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
- else
- $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
- fi
- fi
- ;;
- esac
- fi
-
- # Only execute mode is allowed to have -dlopen flags.
- if test -n "$execute_dlfiles" && test "$mode" != execute; then
- $echo "$modename: unrecognized option \`-dlopen'" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- # Change the help message to a mode-specific one.
- generic_help="$help"
- help="Try \`$modename --help --mode=$mode' for more information."
-
- # These modes are in order of execution frequency so that they run quickly.
- case $mode in
- # libtool compile mode
- compile)
- modename="$modename: compile"
- # Get the compilation command and the source file.
- base_compile=
- srcfile="$nonopt" # always keep a non-empty value in "srcfile"
- suppress_opt=yes
- suppress_output=
- arg_mode=normal
- libobj=
- later=
-
- for arg
- do
- case "$arg_mode" in
- arg )
- # do not "continue". Instead, add this to base_compile
- lastarg="$arg"
- arg_mode=normal
- ;;
-
- target )
- libobj="$arg"
- arg_mode=normal
- continue
- ;;
-
- normal )
- # Accept any command-line options.
- case $arg in
- -o)
- if test -n "$libobj" ; then
- $echo "$modename: you cannot specify \`-o' more than once" 1>&2
- exit $EXIT_FAILURE
- fi
- arg_mode=target
- continue
- ;;
-
- -static | -prefer-pic | -prefer-non-pic)
- later="$later $arg"
- continue
- ;;
-
- -no-suppress)
- suppress_opt=no
- continue
- ;;
-
- -Xcompiler)
- arg_mode=arg # the next one goes into the "base_compile" arg list
- continue # The current "srcfile" will either be retained or
- ;; # replaced later. I would guess that would be a bug.
-
- -Wc,*)
- args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
- lastarg=
- save_ifs="$IFS"; IFS=','
- for arg in $args; do
- IFS="$save_ifs"
-
- # Double-quote args containing other shell metacharacters.
- # Many Bourne shells cannot handle close brackets correctly
- # in scan sets, so we specify it separately.
- case $arg in
- *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
- arg="\"$arg\""
- ;;
- esac
- lastarg="$lastarg $arg"
- done
- IFS="$save_ifs"
- lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
-
- # Add the arguments to base_compile.
- base_compile="$base_compile $lastarg"
- continue
- ;;
-
- * )
- # Accept the current argument as the source file.
- # The previous "srcfile" becomes the current argument.
- #
- lastarg="$srcfile"
- srcfile="$arg"
- ;;
- esac # case $arg
- ;;
- esac # case $arg_mode
-
- # Aesthetically quote the previous argument.
- lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
-
- case $lastarg in
- # Double-quote args containing other shell metacharacters.
- # Many Bourne shells cannot handle close brackets correctly
- # in scan sets, and some SunOS ksh mistreat backslash-escaping
- # in scan sets (worked around with variable expansion),
- # and furthermore cannot handle '|' '&' '(' ')' in scan sets
- # at all, so we specify them separately.
- *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
- lastarg="\"$lastarg\""
- ;;
- esac
-
- base_compile="$base_compile $lastarg"
- done # for arg
-
- case $arg_mode in
- arg)
- $echo "$modename: you must specify an argument for -Xcompile"
- exit $EXIT_FAILURE
- ;;
- target)
- $echo "$modename: you must specify a target with \`-o'" 1>&2
- exit $EXIT_FAILURE
- ;;
- *)
- # Get the name of the library object.
- [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
- ;;
- esac
-
- # Recognize several different file suffixes.
- # If the user specifies -o file.o, it is replaced with file.lo
- xform='[cCFSifmso]'
- case $libobj in
- *.ada) xform=ada ;;
- *.adb) xform=adb ;;
- *.ads) xform=ads ;;
- *.asm) xform=asm ;;
- *.c++) xform=c++ ;;
- *.cc) xform=cc ;;
- *.ii) xform=ii ;;
- *.class) xform=class ;;
- *.cpp) xform=cpp ;;
- *.cxx) xform=cxx ;;
- *.f90) xform=f90 ;;
- *.for) xform=for ;;
- *.java) xform=java ;;
- esac
-
- libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
-
- case $libobj in
- *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
- *)
- $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
-
- func_infer_tag $base_compile
-
- for arg in $later; do
- case $arg in
- -static)
- build_old_libs=yes
- continue
- ;;
-
- -prefer-pic)
- pic_mode=yes
- continue
- ;;
-
- -prefer-non-pic)
- pic_mode=no
- continue
- ;;
- esac
- done
-
- qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"`
- case $qlibobj in
- *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
- qlibobj="$qlibobj" ;;
- esac
- if test "X$libobj" != "X$qlibobj"; then
- $echo "$modename: libobj name \`$libobj' may not contain shell special characters."
- exit $EXIT_FAILURE
- fi
- objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
- xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$obj"; then
- xdir=
- else
- xdir=$xdir/
- fi
- lobj=${xdir}$objdir/$objname
-
- if test -z "$base_compile"; then
- $echo "$modename: you must specify a compilation command" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- # Delete any leftover library objects.
- if test "$build_old_libs" = yes; then
- removelist="$obj $lobj $libobj ${libobj}T"
- else
- removelist="$lobj $libobj ${libobj}T"
- fi
-
- $run $rm $removelist
- trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
-
- # On Cygwin there's no "real" PIC flag so we must build both object types
- case $host_os in
- cygwin* | mingw* | pw32* | os2*)
- pic_mode=default
- ;;
- esac
- if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
- # non-PIC code in shared libraries is not supported
- pic_mode=default
- fi
-
- # Calculate the filename of the output object if compiler does
- # not support -o with -c
- if test "$compiler_c_o" = no; then
- output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
- lockfile="$output_obj.lock"
- removelist="$removelist $output_obj $lockfile"
- trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
- else
- output_obj=
- need_locks=no
- lockfile=
- fi
-
- # Lock this critical section if it is needed
- # We use this script file to make the link, it avoids creating a new file
- if test "$need_locks" = yes; then
- until $run ln "$progpath" "$lockfile" 2>/dev/null; do
- $show "Waiting for $lockfile to be removed"
- sleep 2
- done
- elif test "$need_locks" = warn; then
- if test -f "$lockfile"; then
- $echo "\
-*** ERROR, $lockfile exists and contains:
-`cat $lockfile 2>/dev/null`
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together. If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
- $run $rm $removelist
- exit $EXIT_FAILURE
- fi
- $echo "$srcfile" > "$lockfile"
- fi
-
- if test -n "$fix_srcfile_path"; then
- eval srcfile=\"$fix_srcfile_path\"
- fi
- qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"`
- case $qsrcfile in
- *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
- qsrcfile="\"$qsrcfile\"" ;;
- esac
-
- $run $rm "$libobj" "${libobj}T"
-
- # Create a libtool object file (analogous to a ".la" file),
- # but don't create it if we're doing a dry run.
- test -z "$run" && cat > ${libobj}T <<EOF
-# $libobj - a libtool object file
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-EOF
-
- # Only build a PIC object if we are building libtool libraries.
- if test "$build_libtool_libs" = yes; then
- # Without this assignment, base_compile gets emptied.
- fbsd_hideous_sh_bug=$base_compile
-
- if test "$pic_mode" != no; then
- command="$base_compile $qsrcfile $pic_flag"
- else
- # Don't build PIC code
- command="$base_compile $qsrcfile"
- fi
-
- if test ! -d "${xdir}$objdir"; then
- $show "$mkdir ${xdir}$objdir"
- $run $mkdir ${xdir}$objdir
- status=$?
- if test "$status" -ne 0 && test ! -d "${xdir}$objdir"; then
- exit $status
- fi
- fi
-
- if test -z "$output_obj"; then
- # Place PIC objects in $objdir
- command="$command -o $lobj"
- fi
-
- $run $rm "$lobj" "$output_obj"
-
- $show "$command"
- if $run eval "$command"; then :
- else
- test -n "$output_obj" && $run $rm $removelist
- exit $EXIT_FAILURE
- fi
-
- if test "$need_locks" = warn &&
- test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
- $echo "\
-*** ERROR, $lockfile contains:
-`cat $lockfile 2>/dev/null`
-
-but it should contain:
-$srcfile
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together. If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
- $run $rm $removelist
- exit $EXIT_FAILURE
- fi
-
- # Just move the object if needed, then go on to compile the next one
- if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
- $show "$mv $output_obj $lobj"
- if $run $mv $output_obj $lobj; then :
- else
- error=$?
- $run $rm $removelist
- exit $error
- fi
- fi
-
- # Append the name of the PIC object to the libtool object file.
- test -z "$run" && cat >> ${libobj}T <<EOF
-pic_object='$objdir/$objname'
-
-EOF
-
- # Allow error messages only from the first compilation.
- if test "$suppress_opt" = yes; then
- suppress_output=' >/dev/null 2>&1'
- fi
- else
- # No PIC object so indicate it doesn't exist in the libtool
- # object file.
- test -z "$run" && cat >> ${libobj}T <<EOF
-pic_object=none
-
-EOF
- fi
-
- # Only build a position-dependent object if we build old libraries.
- if test "$build_old_libs" = yes; then
- if test "$pic_mode" != yes; then
- # Don't build PIC code
- command="$base_compile $qsrcfile"
- else
- command="$base_compile $qsrcfile $pic_flag"
- fi
- if test "$compiler_c_o" = yes; then
- command="$command -o $obj"
- fi
-
- # Suppress compiler output if we already did a PIC compilation.
- command="$command$suppress_output"
- $run $rm "$obj" "$output_obj"
- $show "$command"
- if $run eval "$command"; then :
- else
- $run $rm $removelist
- exit $EXIT_FAILURE
- fi
-
- if test "$need_locks" = warn &&
- test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
- $echo "\
-*** ERROR, $lockfile contains:
-`cat $lockfile 2>/dev/null`
-
-but it should contain:
-$srcfile
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together. If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
- $run $rm $removelist
- exit $EXIT_FAILURE
- fi
-
- # Just move the object if needed
- if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
- $show "$mv $output_obj $obj"
- if $run $mv $output_obj $obj; then :
- else
- error=$?
- $run $rm $removelist
- exit $error
- fi
- fi
-
- # Append the name of the non-PIC object the libtool object file.
- # Only append if the libtool object file exists.
- test -z "$run" && cat >> ${libobj}T <<EOF
-# Name of the non-PIC object.
-non_pic_object='$objname'
-
-EOF
- else
- # Append the name of the non-PIC object the libtool object file.
- # Only append if the libtool object file exists.
- test -z "$run" && cat >> ${libobj}T <<EOF
-# Name of the non-PIC object.
-non_pic_object=none
-
-EOF
- fi
-
- $run $mv "${libobj}T" "${libobj}"
-
- # Unlock the critical section if it was locked
- if test "$need_locks" != no; then
- $run $rm "$lockfile"
- fi
-
- exit $EXIT_SUCCESS
- ;;
-
- # libtool link mode
- link | relink)
- modename="$modename: link"
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
- # It is impossible to link a dll without this setting, and
- # we shouldn't force the makefile maintainer to figure out
- # which system we are compiling for in order to pass an extra
- # flag for every libtool invocation.
- # allow_undefined=no
-
- # FIXME: Unfortunately, there are problems with the above when trying
- # to make a dll which has undefined symbols, in which case not
- # even a static library is built. For now, we need to specify
- # -no-undefined on the libtool link line when we can be certain
- # that all symbols are satisfied, otherwise we get a static library.
- allow_undefined=yes
- ;;
- *)
- allow_undefined=yes
- ;;
- esac
- libtool_args="$nonopt"
- base_compile="$nonopt $@"
- compile_command="$nonopt"
- finalize_command="$nonopt"
-
- compile_rpath=
- finalize_rpath=
- compile_shlibpath=
- finalize_shlibpath=
- convenience=
- old_convenience=
- deplibs=
- old_deplibs=
- compiler_flags=
- linker_flags=
- dllsearchpath=
- lib_search_path=`pwd`
- inst_prefix_dir=
-
- avoid_version=no
- dlfiles=
- dlprefiles=
- dlself=no
- export_dynamic=no
- export_symbols=
- export_symbols_regex=
- generated=
- libobjs=
- ltlibs=
- module=no
- no_install=no
- objs=
- non_pic_objects=
- precious_files_regex=
- prefer_static_libs=no
- preload=no
- prev=
- prevarg=
- release=
- rpath=
- xrpath=
- perm_rpath=
- temp_rpath=
- thread_safe=no
- vinfo=
- vinfo_number=no
-
- func_infer_tag $base_compile
-
- # We need to know -static, to get the right output filenames.
- for arg
- do
- case $arg in
- -all-static | -static)
- if test "X$arg" = "X-all-static"; then
- if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
- $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
- fi
- if test -n "$link_static_flag"; then
- dlopen_self=$dlopen_self_static
- fi
- else
- if test -z "$pic_flag" && test -n "$link_static_flag"; then
- dlopen_self=$dlopen_self_static
- fi
- fi
- build_libtool_libs=no
- build_old_libs=yes
- prefer_static_libs=yes
- break
- ;;
- esac
- done
-
- # See if our shared archives depend on static archives.
- test -n "$old_archive_from_new_cmds" && build_old_libs=yes
-
- # Go through the arguments, transforming them on the way.
- while test "$#" -gt 0; do
- arg="$1"
- shift
- case $arg in
- *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
- qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
- ;;
- *) qarg=$arg ;;
- esac
- libtool_args="$libtool_args $qarg"
-
- # If the previous option needs an argument, assign it.
- if test -n "$prev"; then
- case $prev in
- output)
- compile_command="$compile_command @OUTPUT@"
- finalize_command="$finalize_command @OUTPUT@"
- ;;
- esac
-
- case $prev in
- dlfiles|dlprefiles)
- if test "$preload" = no; then
- # Add the symbol object into the linking commands.
- compile_command="$compile_command @SYMFILE@"
- finalize_command="$finalize_command @SYMFILE@"
- preload=yes
- fi
- case $arg in
- *.la | *.lo) ;; # We handle these cases below.
- force)
- if test "$dlself" = no; then
- dlself=needless
- export_dynamic=yes
- fi
- prev=
- continue
- ;;
- self)
- if test "$prev" = dlprefiles; then
- dlself=yes
- elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
- dlself=yes
- else
- dlself=needless
- export_dynamic=yes
- fi
- prev=
- continue
- ;;
- *)
- if test "$prev" = dlfiles; then
- dlfiles="$dlfiles $arg"
- else
- dlprefiles="$dlprefiles $arg"
- fi
- prev=
- continue
- ;;
- esac
- ;;
- expsyms)
- export_symbols="$arg"
- if test ! -f "$arg"; then
- $echo "$modename: symbol file \`$arg' does not exist"
- exit $EXIT_FAILURE
- fi
- prev=
- continue
- ;;
- expsyms_regex)
- export_symbols_regex="$arg"
- prev=
- continue
- ;;
- inst_prefix)
- inst_prefix_dir="$arg"
- prev=
- continue
- ;;
- precious_regex)
- precious_files_regex="$arg"
- prev=
- continue
- ;;
- release)
- release="-$arg"
- prev=
- continue
- ;;
- objectlist)
- if test -f "$arg"; then
- save_arg=$arg
- moreargs=
- for fil in `cat $save_arg`
- do
-# moreargs="$moreargs $fil"
- arg=$fil
- # A libtool-controlled object.
-
- # Check to see that this really is a libtool object.
- if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- pic_object=
- non_pic_object=
-
- # Read the .lo file
- # If there is no directory component, then add one.
- case $arg in
- */* | *\\*) . $arg ;;
- *) . ./$arg ;;
- esac
-
- if test -z "$pic_object" || \
- test -z "$non_pic_object" ||
- test "$pic_object" = none && \
- test "$non_pic_object" = none; then
- $echo "$modename: cannot find name of object for \`$arg'" 1>&2
- exit $EXIT_FAILURE
- fi
-
- # Extract subdirectory from the argument.
- xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$arg"; then
- xdir=
- else
- xdir="$xdir/"
- fi
-
- if test "$pic_object" != none; then
- # Prepend the subdirectory the object is found in.
- pic_object="$xdir$pic_object"
-
- if test "$prev" = dlfiles; then
- if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
- dlfiles="$dlfiles $pic_object"
- prev=
- continue
- else
- # If libtool objects are unsupported, then we need to preload.
- prev=dlprefiles
- fi
- fi
-
- # CHECK ME: I think I busted this. -Ossama
- if test "$prev" = dlprefiles; then
- # Preload the old-style object.
- dlprefiles="$dlprefiles $pic_object"
- prev=
- fi
-
- # A PIC object.
- libobjs="$libobjs $pic_object"
- arg="$pic_object"
- fi
-
- # Non-PIC object.
- if test "$non_pic_object" != none; then
- # Prepend the subdirectory the object is found in.
- non_pic_object="$xdir$non_pic_object"
-
- # A standard non-PIC object
- non_pic_objects="$non_pic_objects $non_pic_object"
- if test -z "$pic_object" || test "$pic_object" = none ; then
- arg="$non_pic_object"
- fi
- fi
- else
- # Only an error if not doing a dry-run.
- if test -z "$run"; then
- $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
- exit $EXIT_FAILURE
- else
- # Dry-run case.
-
- # Extract subdirectory from the argument.
- xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$arg"; then
- xdir=
- else
- xdir="$xdir/"
- fi
-
- pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
- non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
- libobjs="$libobjs $pic_object"
- non_pic_objects="$non_pic_objects $non_pic_object"
- fi
- fi
- done
- else
- $echo "$modename: link input file \`$save_arg' does not exist"
- exit $EXIT_FAILURE
- fi
- arg=$save_arg
- prev=
- continue
- ;;
- rpath | xrpath)
- # We need an absolute path.
- case $arg in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- $echo "$modename: only absolute run-paths are allowed" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
- if test "$prev" = rpath; then
- case "$rpath " in
- *" $arg "*) ;;
- *) rpath="$rpath $arg" ;;
- esac
- else
- case "$xrpath " in
- *" $arg "*) ;;
- *) xrpath="$xrpath $arg" ;;
- esac
- fi
- prev=
- continue
- ;;
- xcompiler)
- compiler_flags="$compiler_flags $qarg"
- prev=
- compile_command="$compile_command $qarg"
- finalize_command="$finalize_command $qarg"
- continue
- ;;
- xlinker)
- linker_flags="$linker_flags $qarg"
- compiler_flags="$compiler_flags $wl$qarg"
- prev=
- compile_command="$compile_command $wl$qarg"
- finalize_command="$finalize_command $wl$qarg"
- continue
- ;;
- xcclinker)
- linker_flags="$linker_flags $qarg"
- compiler_flags="$compiler_flags $qarg"
- prev=
- compile_command="$compile_command $qarg"
- finalize_command="$finalize_command $qarg"
- continue
- ;;
- shrext)
- shrext_cmds="$arg"
- prev=
- continue
- ;;
- darwin_framework)
- compiler_flags="$compiler_flags $arg"
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- prev=
- continue
- ;;
- *)
- eval "$prev=\"\$arg\""
- prev=
- continue
- ;;
- esac
- fi # test -n "$prev"
-
- prevarg="$arg"
-
- case $arg in
- -all-static)
- if test -n "$link_static_flag"; then
- compile_command="$compile_command $link_static_flag"
- finalize_command="$finalize_command $link_static_flag"
- fi
- continue
- ;;
-
- -allow-undefined)
- # FIXME: remove this flag sometime in the future.
- $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
- continue
- ;;
-
- -avoid-version)
- avoid_version=yes
- continue
- ;;
-
- -dlopen)
- prev=dlfiles
- continue
- ;;
-
- -dlpreopen)
- prev=dlprefiles
- continue
- ;;
-
- -export-dynamic)
- export_dynamic=yes
- continue
- ;;
-
- -export-symbols | -export-symbols-regex)
- if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
- $echo "$modename: more than one -exported-symbols argument is not allowed"
- exit $EXIT_FAILURE
- fi
- if test "X$arg" = "X-export-symbols"; then
- prev=expsyms
- else
- prev=expsyms_regex
- fi
- continue
- ;;
-
- -framework)
- prev=darwin_framework
- compiler_flags="$compiler_flags $arg"
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- continue
- ;;
-
- -inst-prefix-dir)
- prev=inst_prefix
- continue
- ;;
-
- # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
- # so, if we see these flags be careful not to treat them like -L
- -L[A-Z][A-Z]*:*)
- case $with_gcc/$host in
- no/*-*-irix* | /*-*-irix*)
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- ;;
- esac
- continue
- ;;
-
- -L*)
- dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
- # We need an absolute path.
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- absdir=`cd "$dir" && pwd`
- if test -z "$absdir"; then
- $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
- exit $EXIT_FAILURE
- fi
- dir="$absdir"
- ;;
- esac
- case "$deplibs " in
- *" -L$dir "*) ;;
- *)
- deplibs="$deplibs -L$dir"
- lib_search_path="$lib_search_path $dir"
- ;;
- esac
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
- case :$dllsearchpath: in
- *":$dir:"*) ;;
- *) dllsearchpath="$dllsearchpath:$dir";;
- esac
- ;;
- esac
- continue
- ;;
-
- -l*)
- if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
- case $host in
- *-*-cygwin* | *-*-pw32* | *-*-beos*)
- # These systems don't actually have a C or math library (as such)
- continue
- ;;
- *-*-mingw* | *-*-os2*)
- # These systems don't actually have a C library (as such)
- test "X$arg" = "X-lc" && continue
- ;;
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
- # Do not include libc due to us having libc/libc_r.
- test "X$arg" = "X-lc" && continue
- ;;
- *-*-rhapsody* | *-*-darwin1.[012])
- # Rhapsody C and math libraries are in the System framework
- deplibs="$deplibs -framework System"
- continue
- esac
- elif test "X$arg" = "X-lc_r"; then
- case $host in
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
- # Do not include libc_r directly, use -pthread flag.
- continue
- ;;
- esac
- fi
- deplibs="$deplibs $arg"
- continue
- ;;
-
- # Tru64 UNIX uses -model [arg] to determine the layout of C++
- # classes, name mangling, and exception handling.
- -model)
- compile_command="$compile_command $arg"
- compiler_flags="$compiler_flags $arg"
- finalize_command="$finalize_command $arg"
- prev=xcompiler
- continue
- ;;
-
- -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
- compiler_flags="$compiler_flags $arg"
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- continue
- ;;
-
- -module)
- module=yes
- continue
- ;;
-
- # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
- # -r[0-9][0-9]* specifies the processor on the SGI compiler
- # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
- # +DA*, +DD* enable 64-bit mode on the HP compiler
- # -q* pass through compiler args for the IBM compiler
- # -m* pass through architecture-specific compiler args for GCC
- -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*)
-
- # Unknown arguments in both finalize_command and compile_command need
- # to be aesthetically quoted because they are evaled later.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
- arg="\"$arg\""
- ;;
- esac
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- if test "$with_gcc" = "yes" ; then
- compiler_flags="$compiler_flags $arg"
- fi
- continue
- ;;
-
- -shrext)
- prev=shrext
- continue
- ;;
-
- -no-fast-install)
- fast_install=no
- continue
- ;;
-
- -no-install)
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
- # The PATH hackery in wrapper scripts is required on Windows
- # in order for the loader to find any dlls it needs.
- $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
- $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
- fast_install=no
- ;;
- *) no_install=yes ;;
- esac
- continue
- ;;
-
- -no-undefined)
- allow_undefined=no
- continue
- ;;
-
- -objectlist)
- prev=objectlist
- continue
- ;;
-
- -o) prev=output ;;
-
- -precious-files-regex)
- prev=precious_regex
- continue
- ;;
-
- -release)
- prev=release
- continue
- ;;
-
- -rpath)
- prev=rpath
- continue
- ;;
-
- -R)
- prev=xrpath
- continue
- ;;
-
- -R*)
- dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
- # We need an absolute path.
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- $echo "$modename: only absolute run-paths are allowed" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
- case "$xrpath " in
- *" $dir "*) ;;
- *) xrpath="$xrpath $dir" ;;
- esac
- continue
- ;;
-
- -static)
- # The effects of -static are defined in a previous loop.
- # We used to do the same as -all-static on platforms that
- # didn't have a PIC flag, but the assumption that the effects
- # would be equivalent was wrong. It would break on at least
- # Digital Unix and AIX.
- continue
- ;;
-
- -thread-safe)
- thread_safe=yes
- continue
- ;;
-
- -version-info)
- prev=vinfo
- continue
- ;;
- -version-number)
- prev=vinfo
- vinfo_number=yes
- continue
- ;;
-
- -Wc,*)
- args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
- arg=
- save_ifs="$IFS"; IFS=','
- for flag in $args; do
- IFS="$save_ifs"
- case $flag in
- *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
- flag="\"$flag\""
- ;;
- esac
- arg="$arg $wl$flag"
- compiler_flags="$compiler_flags $flag"
- done
- IFS="$save_ifs"
- arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
- ;;
-
- -Wl,*)
- args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
- arg=
- save_ifs="$IFS"; IFS=','
- for flag in $args; do
- IFS="$save_ifs"
- case $flag in
- *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
- flag="\"$flag\""
- ;;
- esac
- arg="$arg $wl$flag"
- compiler_flags="$compiler_flags $wl$flag"
- linker_flags="$linker_flags $flag"
- done
- IFS="$save_ifs"
- arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
- ;;
-
- -Xcompiler)
- prev=xcompiler
- continue
- ;;
-
- -Xlinker)
- prev=xlinker
- continue
- ;;
-
- -XCClinker)
- prev=xcclinker
- continue
- ;;
-
- # Some other compiler flag.
- -* | +*)
- # Unknown arguments in both finalize_command and compile_command need
- # to be aesthetically quoted because they are evaled later.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
- arg="\"$arg\""
- ;;
- esac
- ;;
-
- *.$objext)
- # A standard object.
- objs="$objs $arg"
- ;;
-
- *.lo)
- # A libtool-controlled object.
-
- # Check to see that this really is a libtool object.
- if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- pic_object=
- non_pic_object=
-
- # Read the .lo file
- # If there is no directory component, then add one.
- case $arg in
- */* | *\\*) . $arg ;;
- *) . ./$arg ;;
- esac
-
- if test -z "$pic_object" || \
- test -z "$non_pic_object" ||
- test "$pic_object" = none && \
- test "$non_pic_object" = none; then
- $echo "$modename: cannot find name of object for \`$arg'" 1>&2
- exit $EXIT_FAILURE
- fi
-
- # Extract subdirectory from the argument.
- xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$arg"; then
- xdir=
- else
- xdir="$xdir/"
- fi
-
- if test "$pic_object" != none; then
- # Prepend the subdirectory the object is found in.
- pic_object="$xdir$pic_object"
-
- if test "$prev" = dlfiles; then
- if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
- dlfiles="$dlfiles $pic_object"
- prev=
- continue
- else
- # If libtool objects are unsupported, then we need to preload.
- prev=dlprefiles
- fi
- fi
-
- # CHECK ME: I think I busted this. -Ossama
- if test "$prev" = dlprefiles; then
- # Preload the old-style object.
- dlprefiles="$dlprefiles $pic_object"
- prev=
- fi
-
- # A PIC object.
- libobjs="$libobjs $pic_object"
- arg="$pic_object"
- fi
-
- # Non-PIC object.
- if test "$non_pic_object" != none; then
- # Prepend the subdirectory the object is found in.
- non_pic_object="$xdir$non_pic_object"
-
- # A standard non-PIC object
- non_pic_objects="$non_pic_objects $non_pic_object"
- if test -z "$pic_object" || test "$pic_object" = none ; then
- arg="$non_pic_object"
- fi
- fi
- else
- # Only an error if not doing a dry-run.
- if test -z "$run"; then
- $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
- exit $EXIT_FAILURE
- else
- # Dry-run case.
-
- # Extract subdirectory from the argument.
- xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$arg"; then
- xdir=
- else
- xdir="$xdir/"
- fi
-
- pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
- non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
- libobjs="$libobjs $pic_object"
- non_pic_objects="$non_pic_objects $non_pic_object"
- fi
- fi
- ;;
-
- *.$libext)
- # An archive.
- deplibs="$deplibs $arg"
- old_deplibs="$old_deplibs $arg"
- continue
- ;;
-
- *.la)
- # A libtool-controlled library.
-
- if test "$prev" = dlfiles; then
- # This library was specified with -dlopen.
- dlfiles="$dlfiles $arg"
- prev=
- elif test "$prev" = dlprefiles; then
- # The library was specified with -dlpreopen.
- dlprefiles="$dlprefiles $arg"
- prev=
- else
- deplibs="$deplibs $arg"
- fi
- continue
- ;;
-
- # Some other compiler argument.
- *)
- # Unknown arguments in both finalize_command and compile_command need
- # to be aesthetically quoted because they are evaled later.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
- arg="\"$arg\""
- ;;
- esac
- ;;
- esac # arg
-
- # Now actually substitute the argument into the commands.
- if test -n "$arg"; then
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- fi
- done # argument parsing loop
-
- if test -n "$prev"; then
- $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
- eval arg=\"$export_dynamic_flag_spec\"
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- fi
-
- oldlibs=
- # calculate the name of the file, without its directory
- outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
- libobjs_save="$libobjs"
-
- if test -n "$shlibpath_var"; then
- # get the directories listed in $shlibpath_var
- eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
- else
- shlib_search_path=
- fi
- eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
- eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
-
- output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$output_objdir" = "X$output"; then
- output_objdir="$objdir"
- else
- output_objdir="$output_objdir/$objdir"
- fi
- # Create the object directory.
- if test ! -d "$output_objdir"; then
- $show "$mkdir $output_objdir"
- $run $mkdir $output_objdir
- status=$?
- if test "$status" -ne 0 && test ! -d "$output_objdir"; then
- exit $status
- fi
- fi
-
- # Determine the type of output
- case $output in
- "")
- $echo "$modename: you must specify an output file" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- ;;
- *.$libext) linkmode=oldlib ;;
- *.lo | *.$objext) linkmode=obj ;;
- *.la) linkmode=lib ;;
- *) linkmode=prog ;; # Anything else should be a program.
- esac
-
- case $host in
- *cygwin* | *mingw* | *pw32*)
- # don't eliminate duplications in $postdeps and $predeps
- duplicate_compiler_generated_deps=yes
- ;;
- *)
- duplicate_compiler_generated_deps=$duplicate_deps
- ;;
- esac
- specialdeplibs=
-
- libs=
- # Find all interdependent deplibs by searching for libraries
- # that are linked more than once (e.g. -la -lb -la)
- for deplib in $deplibs; do
- if test "X$duplicate_deps" = "Xyes" ; then
- case "$libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
- esac
- fi
- libs="$libs $deplib"
- done
-
- if test "$linkmode" = lib; then
- libs="$predeps $libs $compiler_lib_search_path $postdeps"
-
- # Compute libraries that are listed more than once in $predeps
- # $postdeps and mark them as special (i.e., whose duplicates are
- # not to be eliminated).
- pre_post_deps=
- if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then
- for pre_post_dep in $predeps $postdeps; do
- case "$pre_post_deps " in
- *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
- esac
- pre_post_deps="$pre_post_deps $pre_post_dep"
- done
- fi
- pre_post_deps=
- fi
-
- deplibs=
- newdependency_libs=
- newlib_search_path=
- need_relink=no # whether we're linking any uninstalled libtool libraries
- notinst_deplibs= # not-installed libtool libraries
- notinst_path= # paths that contain not-installed libtool libraries
- case $linkmode in
- lib)
- passes="conv link"
- for file in $dlfiles $dlprefiles; do
- case $file in
- *.la) ;;
- *)
- $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
- done
- ;;
- prog)
- compile_deplibs=
- finalize_deplibs=
- alldeplibs=no
- newdlfiles=
- newdlprefiles=
- passes="conv scan dlopen dlpreopen link"
- ;;
- *) passes="conv"
- ;;
- esac
- for pass in $passes; do
- if test "$linkmode,$pass" = "lib,link" ||
- test "$linkmode,$pass" = "prog,scan"; then
- libs="$deplibs"
- deplibs=
- fi
- if test "$linkmode" = prog; then
- case $pass in
- dlopen) libs="$dlfiles" ;;
- dlpreopen) libs="$dlprefiles" ;;
- link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
- esac
- fi
- if test "$pass" = dlopen; then
- # Collect dlpreopened libraries
- save_deplibs="$deplibs"
- deplibs=
- fi
- for deplib in $libs; do
- lib=
- found=no
- case $deplib in
- -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
- if test "$linkmode,$pass" = "prog,link"; then
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- else
- compiler_flags="$compiler_flags $deplib"
- fi
- continue
- ;;
- -l*)
- if test "$linkmode" != lib && test "$linkmode" != prog; then
- $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2
- continue
- fi
- name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
- for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
- for search_ext in .la $std_shrext .so .a; do
- # Search the libtool library
- lib="$searchdir/lib${name}${search_ext}"
- if test -f "$lib"; then
- if test "$search_ext" = ".la"; then
- found=yes
- else
- found=no
- fi
- break 2
- fi
- done
- done
- if test "$found" != yes; then
- # deplib doesn't seem to be a libtool library
- if test "$linkmode,$pass" = "prog,link"; then
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- else
- deplibs="$deplib $deplibs"
- test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
- fi
- continue
- else # deplib is a libtool library
- # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
- # We need to do some special things here, and not later.
- if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
- case " $predeps $postdeps " in
- *" $deplib "*)
- if (${SED} -e '2q' $lib |
- grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- library_names=
- old_library=
- case $lib in
- */* | *\\*) . $lib ;;
- *) . ./$lib ;;
- esac
- for l in $old_library $library_names; do
- ll="$l"
- done
- if test "X$ll" = "X$old_library" ; then # only static version available
- found=no
- ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
- test "X$ladir" = "X$lib" && ladir="."
- lib=$ladir/$old_library
- if test "$linkmode,$pass" = "prog,link"; then
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- else
- deplibs="$deplib $deplibs"
- test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
- fi
- continue
- fi
- fi
- ;;
- *) ;;
- esac
- fi
- fi
- ;; # -l
- -L*)
- case $linkmode in
- lib)
- deplibs="$deplib $deplibs"
- test "$pass" = conv && continue
- newdependency_libs="$deplib $newdependency_libs"
- newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
- ;;
- prog)
- if test "$pass" = conv; then
- deplibs="$deplib $deplibs"
- continue
- fi
- if test "$pass" = scan; then
- deplibs="$deplib $deplibs"
- else
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- fi
- newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
- ;;
- *)
- $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2
- ;;
- esac # linkmode
- continue
- ;; # -L
- -R*)
- if test "$pass" = link; then
- dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
- # Make sure the xrpath contains only unique directories.
- case "$xrpath " in
- *" $dir "*) ;;
- *) xrpath="$xrpath $dir" ;;
- esac
- fi
- deplibs="$deplib $deplibs"
- continue
- ;;
- *.la) lib="$deplib" ;;
- *.$libext)
- if test "$pass" = conv; then
- deplibs="$deplib $deplibs"
- continue
- fi
- case $linkmode in
- lib)
- valid_a_lib=no
- case $deplibs_check_method in
- match_pattern*)
- set dummy $deplibs_check_method
- match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
- if eval $echo \"$deplib\" 2>/dev/null \
- | $SED 10q \
- | $EGREP "$match_pattern_regex" > /dev/null; then
- valid_a_lib=yes
- fi
- ;;
- pass_all)
- valid_a_lib=yes
- ;;
- esac
- if test "$valid_a_lib" != yes; then
- $echo
- $echo "*** Warning: Trying to link with static lib archive $deplib."
- $echo "*** I have the capability to make that library automatically link in when"
- $echo "*** you link to this library. But I can only do this if you have a"
- $echo "*** shared version of the library, which you do not appear to have"
- $echo "*** because the file extensions .$libext of this argument makes me believe"
- $echo "*** that it is just a static archive that I should not used here."
- else
- $echo
- $echo "*** Warning: Linking the shared library $output against the"
- $echo "*** static library $deplib is not portable!"
- deplibs="$deplib $deplibs"
- fi
- continue
- ;;
- prog)
- if test "$pass" != link; then
- deplibs="$deplib $deplibs"
- else
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- fi
- continue
- ;;
- esac # linkmode
- ;; # *.$libext
- *.lo | *.$objext)
- if test "$pass" = conv; then
- deplibs="$deplib $deplibs"
- elif test "$linkmode" = prog; then
- if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
- # If there is no dlopen support or we're linking statically,
- # we need to preload.
- newdlprefiles="$newdlprefiles $deplib"
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- else
- newdlfiles="$newdlfiles $deplib"
- fi
- fi
- continue
- ;;
- %DEPLIBS%)
- alldeplibs=yes
- continue
- ;;
- esac # case $deplib
- if test "$found" = yes || test -f "$lib"; then :
- else
- $echo "$modename: cannot find the library \`$lib'" 1>&2
- exit $EXIT_FAILURE
- fi
-
- # Check to see that this really is a libtool archive.
- if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- else
- $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- exit $EXIT_FAILURE
- fi
-
- ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
- test "X$ladir" = "X$lib" && ladir="."
-
- dlname=
- dlopen=
- dlpreopen=
- libdir=
- library_names=
- old_library=
- # If the library was installed with an old release of libtool,
- # it will not redefine variables installed, or shouldnotlink
- installed=yes
- shouldnotlink=no
- avoidtemprpath=
-
-
- # Read the .la file
- case $lib in
- */* | *\\*) . $lib ;;
- *) . ./$lib ;;
- esac
-
- if test "$linkmode,$pass" = "lib,link" ||
- test "$linkmode,$pass" = "prog,scan" ||
- { test "$linkmode" != prog && test "$linkmode" != lib; }; then
- test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
- test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
- fi
-
- if test "$pass" = conv; then
- # Only check for convenience libraries
- deplibs="$lib $deplibs"
- if test -z "$libdir"; then
- if test -z "$old_library"; then
- $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
- exit $EXIT_FAILURE
- fi
- # It is a libtool convenience library, so add in its objects.
- convenience="$convenience $ladir/$objdir/$old_library"
- old_convenience="$old_convenience $ladir/$objdir/$old_library"
- tmp_libs=
- for deplib in $dependency_libs; do
- deplibs="$deplib $deplibs"
- if test "X$duplicate_deps" = "Xyes" ; then
- case "$tmp_libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
- esac
- fi
- tmp_libs="$tmp_libs $deplib"
- done
- elif test "$linkmode" != prog && test "$linkmode" != lib; then
- $echo "$modename: \`$lib' is not a convenience library" 1>&2
- exit $EXIT_FAILURE
- fi
- continue
- fi # $pass = conv
-
-
- # Get the name of the library we link against.
- linklib=
- for l in $old_library $library_names; do
- linklib="$l"
- done
- if test -z "$linklib"; then
- $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
- exit $EXIT_FAILURE
- fi
-
- # This library was specified with -dlopen.
- if test "$pass" = dlopen; then
- if test -z "$libdir"; then
- $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
- exit $EXIT_FAILURE
- fi
- if test -z "$dlname" ||
- test "$dlopen_support" != yes ||
- test "$build_libtool_libs" = no; then
- # If there is no dlname, no dlopen support or we're linking
- # statically, we need to preload. We also need to preload any
- # dependent libraries so libltdl's deplib preloader doesn't
- # bomb out in the load deplibs phase.
- dlprefiles="$dlprefiles $lib $dependency_libs"
- else
- newdlfiles="$newdlfiles $lib"
- fi
- continue
- fi # $pass = dlopen
-
- # We need an absolute path.
- case $ladir in
- [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
- *)
- abs_ladir=`cd "$ladir" && pwd`
- if test -z "$abs_ladir"; then
- $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
- $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
- abs_ladir="$ladir"
- fi
- ;;
- esac
- laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
-
- # Find the relevant object directory and library name.
- if test "X$installed" = Xyes; then
- if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
- $echo "$modename: warning: library \`$lib' was moved." 1>&2
- dir="$ladir"
- absdir="$abs_ladir"
- libdir="$abs_ladir"
- else
- dir="$libdir"
- absdir="$libdir"
- fi
- test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
- else
- if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
- dir="$ladir"
- absdir="$abs_ladir"
- # Remove this search path later
- notinst_path="$notinst_path $abs_ladir"
- else
- dir="$ladir/$objdir"
- absdir="$abs_ladir/$objdir"
- # Remove this search path later
- notinst_path="$notinst_path $abs_ladir"
- fi
- fi # $installed = yes
- name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
-
- # This library was specified with -dlpreopen.
- if test "$pass" = dlpreopen; then
- if test -z "$libdir"; then
- $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
- exit $EXIT_FAILURE
- fi
- # Prefer using a static library (so that no silly _DYNAMIC symbols
- # are required to link).
- if test -n "$old_library"; then
- newdlprefiles="$newdlprefiles $dir/$old_library"
- # Otherwise, use the dlname, so that lt_dlopen finds it.
- elif test -n "$dlname"; then
- newdlprefiles="$newdlprefiles $dir/$dlname"
- else
- newdlprefiles="$newdlprefiles $dir/$linklib"
- fi
- fi # $pass = dlpreopen
-
- if test -z "$libdir"; then
- # Link the convenience library
- if test "$linkmode" = lib; then
- deplibs="$dir/$old_library $deplibs"
- elif test "$linkmode,$pass" = "prog,link"; then
- compile_deplibs="$dir/$old_library $compile_deplibs"
- finalize_deplibs="$dir/$old_library $finalize_deplibs"
- else
- deplibs="$lib $deplibs" # used for prog,scan pass
- fi
- continue
- fi
-
-
- if test "$linkmode" = prog && test "$pass" != link; then
- newlib_search_path="$newlib_search_path $ladir"
- deplibs="$lib $deplibs"
-
- linkalldeplibs=no
- if test "$link_all_deplibs" != no || test -z "$library_names" ||
- test "$build_libtool_libs" = no; then
- linkalldeplibs=yes
- fi
-
- tmp_libs=
- for deplib in $dependency_libs; do
- case $deplib in
- -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
- esac
- # Need to link against all dependency_libs?
- if test "$linkalldeplibs" = yes; then
- deplibs="$deplib $deplibs"
- else
- # Need to hardcode shared library paths
- # or/and link against static libraries
- newdependency_libs="$deplib $newdependency_libs"
- fi
- if test "X$duplicate_deps" = "Xyes" ; then
- case "$tmp_libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
- esac
- fi
- tmp_libs="$tmp_libs $deplib"
- done # for deplib
- continue
- fi # $linkmode = prog...
-
- if test "$linkmode,$pass" = "prog,link"; then
- if test -n "$library_names" &&
- { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
- # We need to hardcode the library path
- if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
- # Make sure the rpath contains only unique directories.
- case "$temp_rpath " in
- *" $dir "*) ;;
- *" $absdir "*) ;;
- *) temp_rpath="$temp_rpath $dir" ;;
- esac
- fi
-
- # Hardcode the library path.
- # Skip directories that are in the system default run-time
- # search path.
- case " $sys_lib_dlsearch_path " in
- *" $absdir "*) ;;
- *)
- case "$compile_rpath " in
- *" $absdir "*) ;;
- *) compile_rpath="$compile_rpath $absdir"
- esac
- ;;
- esac
- case " $sys_lib_dlsearch_path " in
- *" $libdir "*) ;;
- *)
- case "$finalize_rpath " in
- *" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir"
- esac
- ;;
- esac
- fi # $linkmode,$pass = prog,link...
-
- if test "$alldeplibs" = yes &&
- { test "$deplibs_check_method" = pass_all ||
- { test "$build_libtool_libs" = yes &&
- test -n "$library_names"; }; }; then
- # We only need to search for static libraries
- continue
- fi
- fi
-
- link_static=no # Whether the deplib will be linked statically
- if test -n "$library_names" &&
- { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
- if test "$installed" = no; then
- notinst_deplibs="$notinst_deplibs $lib"
- need_relink=yes
- fi
- # This is a shared library
-
- # Warn about portability, can't link against -module's on
- # some systems (darwin)
- if test "$shouldnotlink" = yes && test "$pass" = link ; then
- $echo
- if test "$linkmode" = prog; then
- $echo "*** Warning: Linking the executable $output against the loadable module"
- else
- $echo "*** Warning: Linking the shared library $output against the loadable module"
- fi
- $echo "*** $linklib is not portable!"
- fi
- if test "$linkmode" = lib &&
- test "$hardcode_into_libs" = yes; then
- # Hardcode the library path.
- # Skip directories that are in the system default run-time
- # search path.
- case " $sys_lib_dlsearch_path " in
- *" $absdir "*) ;;
- *)
- case "$compile_rpath " in
- *" $absdir "*) ;;
- *) compile_rpath="$compile_rpath $absdir"
- esac
- ;;
- esac
- case " $sys_lib_dlsearch_path " in
- *" $libdir "*) ;;
- *)
- case "$finalize_rpath " in
- *" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir"
- esac
- ;;
- esac
- fi
-
- if test -n "$old_archive_from_expsyms_cmds"; then
- # figure out the soname
- set dummy $library_names
- realname="$2"
- shift; shift
- libname=`eval \\$echo \"$libname_spec\"`
- # use dlname if we got it. it's perfectly good, no?
- if test -n "$dlname"; then
- soname="$dlname"
- elif test -n "$soname_spec"; then
- # bleh windows
- case $host in
- *cygwin* | mingw*)
- major=`expr $current - $age`
- versuffix="-$major"
- ;;
- esac
- eval soname=\"$soname_spec\"
- else
- soname="$realname"
- fi
-
- # Make a new name for the extract_expsyms_cmds to use
- soroot="$soname"
- soname=`$echo $soroot | ${SED} -e 's/^.*\///'`
- newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a"
-
- # If the library has no export list, then create one now
- if test -f "$output_objdir/$soname-def"; then :
- else
- $show "extracting exported symbol list from \`$soname'"
- save_ifs="$IFS"; IFS='~'
- cmds=$extract_expsyms_cmds
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- fi
-
- # Create $newlib
- if test -f "$output_objdir/$newlib"; then :; else
- $show "generating import library for \`$soname'"
- save_ifs="$IFS"; IFS='~'
- cmds=$old_archive_from_expsyms_cmds
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- fi
- # make sure the library variables are pointing to the new library
- dir=$output_objdir
- linklib=$newlib
- fi # test -n "$old_archive_from_expsyms_cmds"
-
- if test "$linkmode" = prog || test "$mode" != relink; then
- add_shlibpath=
- add_dir=
- add=
- lib_linked=yes
- case $hardcode_action in
- immediate | unsupported)
- if test "$hardcode_direct" = no; then
- add="$dir/$linklib"
- case $host in
- *-*-sco3.2v5* ) add_dir="-L$dir" ;;
- *-*-darwin* )
- # if the lib is a module then we can not link against
- # it, someone is ignoring the new warnings I added
- if /usr/bin/file -L $add 2> /dev/null | $EGREP "bundle" >/dev/null ; then
- $echo "** Warning, lib $linklib is a module, not a shared library"
- if test -z "$old_library" ; then
- $echo
- $echo "** And there doesn't seem to be a static archive available"
- $echo "** The link will probably fail, sorry"
- else
- add="$dir/$old_library"
- fi
- fi
- esac
- elif test "$hardcode_minus_L" = no; then
- case $host in
- *-*-sunos*) add_shlibpath="$dir" ;;
- esac
- add_dir="-L$dir"
- add="-l$name"
- elif test "$hardcode_shlibpath_var" = no; then
- add_shlibpath="$dir"
- add="-l$name"
- else
- lib_linked=no
- fi
- ;;
- relink)
- if test "$hardcode_direct" = yes; then
- add="$dir/$linklib"
- elif test "$hardcode_minus_L" = yes; then
- add_dir="-L$dir"
- # Try looking first in the location we're being installed to.
- if test -n "$inst_prefix_dir"; then
- case "$libdir" in
- [\\/]*)
- add_dir="$add_dir -L$inst_prefix_dir$libdir"
- ;;
- esac
- fi
- add="-l$name"
- elif test "$hardcode_shlibpath_var" = yes; then
- add_shlibpath="$dir"
- add="-l$name"
- else
- lib_linked=no
- fi
- ;;
- *) lib_linked=no ;;
- esac
-
- if test "$lib_linked" != yes; then
- $echo "$modename: configuration error: unsupported hardcode properties"
- exit $EXIT_FAILURE
- fi
-
- if test -n "$add_shlibpath"; then
- case :$compile_shlibpath: in
- *":$add_shlibpath:"*) ;;
- *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
- esac
- fi
- if test "$linkmode" = prog; then
- test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
- test -n "$add" && compile_deplibs="$add $compile_deplibs"
- else
- test -n "$add_dir" && deplibs="$add_dir $deplibs"
- test -n "$add" && deplibs="$add $deplibs"
- if test "$hardcode_direct" != yes && \
- test "$hardcode_minus_L" != yes && \
- test "$hardcode_shlibpath_var" = yes; then
- case :$finalize_shlibpath: in
- *":$libdir:"*) ;;
- *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
- esac
- fi
- fi
- fi
-
- if test "$linkmode" = prog || test "$mode" = relink; then
- add_shlibpath=
- add_dir=
- add=
- # Finalize command for both is simple: just hardcode it.
- if test "$hardcode_direct" = yes; then
- add="$libdir/$linklib"
- elif test "$hardcode_minus_L" = yes; then
- add_dir="-L$libdir"
- add="-l$name"
- elif test "$hardcode_shlibpath_var" = yes; then
- case :$finalize_shlibpath: in
- *":$libdir:"*) ;;
- *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
- esac
- add="-l$name"
- elif test "$hardcode_automatic" = yes; then
- if test -n "$inst_prefix_dir" &&
- test -f "$inst_prefix_dir$libdir/$linklib" ; then
- add="$inst_prefix_dir$libdir/$linklib"
- else
- add="$libdir/$linklib"
- fi
- else
- # We cannot seem to hardcode it, guess we'll fake it.
- add_dir="-L$libdir"
- # Try looking first in the location we're being installed to.
- if test -n "$inst_prefix_dir"; then
- case "$libdir" in
- [\\/]*)
- add_dir="$add_dir -L$inst_prefix_dir$libdir"
- ;;
- esac
- fi
- add="-l$name"
- fi
-
- if test "$linkmode" = prog; then
- test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
- test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
- else
- test -n "$add_dir" && deplibs="$add_dir $deplibs"
- test -n "$add" && deplibs="$add $deplibs"
- fi
- fi
- elif test "$linkmode" = prog; then
- # Here we assume that one of hardcode_direct or hardcode_minus_L
- # is not unsupported. This is valid on all known static and
- # shared platforms.
- if test "$hardcode_direct" != unsupported; then
- test -n "$old_library" && linklib="$old_library"
- compile_deplibs="$dir/$linklib $compile_deplibs"
- finalize_deplibs="$dir/$linklib $finalize_deplibs"
- else
- compile_deplibs="-l$name -L$dir $compile_deplibs"
- finalize_deplibs="-l$name -L$dir $finalize_deplibs"
- fi
- elif test "$build_libtool_libs" = yes; then
- # Not a shared library
- if test "$deplibs_check_method" != pass_all; then
- # We're trying link a shared library against a static one
- # but the system doesn't support it.
-
- # Just print a warning and add the library to dependency_libs so
- # that the program can be linked against the static library.
- $echo
- $echo "*** Warning: This system can not link to static lib archive $lib."
- $echo "*** I have the capability to make that library automatically link in when"
- $echo "*** you link to this library. But I can only do this if you have a"
- $echo "*** shared version of the library, which you do not appear to have."
- if test "$module" = yes; then
- $echo "*** But as you try to build a module library, libtool will still create "
- $echo "*** a static module, that should work as long as the dlopening application"
- $echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
- if test -z "$global_symbol_pipe"; then
- $echo
- $echo "*** However, this would only work if libtool was able to extract symbol"
- $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
- $echo "*** not find such a program. So, this module is probably useless."
- $echo "*** \`nm' from GNU binutils and a full rebuild may help."
- fi
- if test "$build_old_libs" = no; then
- build_libtool_libs=module
- build_old_libs=yes
- else
- build_libtool_libs=no
- fi
- fi
- else
- convenience="$convenience $dir/$old_library"
- old_convenience="$old_convenience $dir/$old_library"
- deplibs="$dir/$old_library $deplibs"
- link_static=yes
- fi
- fi # link shared/static library?
-
- if test "$linkmode" = lib; then
- if test -n "$dependency_libs" &&
- { test "$hardcode_into_libs" != yes ||
- test "$build_old_libs" = yes ||
- test "$link_static" = yes; }; then
- # Extract -R from dependency_libs
- temp_deplibs=
- for libdir in $dependency_libs; do
- case $libdir in
- -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
- case " $xrpath " in
- *" $temp_xrpath "*) ;;
- *) xrpath="$xrpath $temp_xrpath";;
- esac;;
- *) temp_deplibs="$temp_deplibs $libdir";;
- esac
- done
- dependency_libs="$temp_deplibs"
- fi
-
- newlib_search_path="$newlib_search_path $absdir"
- # Link against this library
- test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
- # ... and its dependency_libs
- tmp_libs=
- for deplib in $dependency_libs; do
- newdependency_libs="$deplib $newdependency_libs"
- if test "X$duplicate_deps" = "Xyes" ; then
- case "$tmp_libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
- esac
- fi
- tmp_libs="$tmp_libs $deplib"
- done
-
- if test "$link_all_deplibs" != no; then
- # Add the search paths of all dependency libraries
- for deplib in $dependency_libs; do
- case $deplib in
- -L*) path="$deplib" ;;
- *.la)
- dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
- test "X$dir" = "X$deplib" && dir="."
- # We need an absolute path.
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
- *)
- absdir=`cd "$dir" && pwd`
- if test -z "$absdir"; then
- $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
- absdir="$dir"
- fi
- ;;
- esac
- if grep "^installed=no" $deplib > /dev/null; then
- path="$absdir/$objdir"
- else
- eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
- if test -z "$libdir"; then
- $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
- exit $EXIT_FAILURE
- fi
- if test "$absdir" != "$libdir"; then
- $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
- fi
- path="$absdir"
- fi
- depdepl=
- case $host in
- *-*-darwin*)
- # we do not want to link against static libs,
- # but need to link against shared
- eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
- if test -n "$deplibrary_names" ; then
- for tmp in $deplibrary_names ; do
- depdepl=$tmp
- done
- if test -f "$path/$depdepl" ; then
- depdepl="$path/$depdepl"
- fi
- # do not add paths which are already there
- case " $newlib_search_path " in
- *" $path "*) ;;
- *) newlib_search_path="$newlib_search_path $path";;
- esac
- fi
- path=""
- ;;
- *)
- path="-L$path"
- ;;
- esac
- ;;
- -l*)
- case $host in
- *-*-darwin*)
- # Again, we only want to link against shared libraries
- eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"`
- for tmp in $newlib_search_path ; do
- if test -f "$tmp/lib$tmp_libs.dylib" ; then
- eval depdepl="$tmp/lib$tmp_libs.dylib"
- break
- fi
- done
- path=""
- ;;
- *) continue ;;
- esac
- ;;
- *) continue ;;
- esac
- case " $deplibs " in
- *" $path "*) ;;
- *) deplibs="$path $deplibs" ;;
- esac
- case " $deplibs " in
- *" $depdepl "*) ;;
- *) deplibs="$depdepl $deplibs" ;;
- esac
- done
- fi # link_all_deplibs != no
- fi # linkmode = lib
- done # for deplib in $libs
- dependency_libs="$newdependency_libs"
- if test "$pass" = dlpreopen; then
- # Link the dlpreopened libraries before other libraries
- for deplib in $save_deplibs; do
- deplibs="$deplib $deplibs"
- done
- fi
- if test "$pass" != dlopen; then
- if test "$pass" != conv; then
- # Make sure lib_search_path contains only unique directories.
- lib_search_path=
- for dir in $newlib_search_path; do
- case "$lib_search_path " in
- *" $dir "*) ;;
- *) lib_search_path="$lib_search_path $dir" ;;
- esac
- done
- newlib_search_path=
- fi
-
- if test "$linkmode,$pass" != "prog,link"; then
- vars="deplibs"
- else
- vars="compile_deplibs finalize_deplibs"
- fi
- for var in $vars dependency_libs; do
- # Add libraries to $var in reverse order
- eval tmp_libs=\"\$$var\"
- new_libs=
- for deplib in $tmp_libs; do
- # FIXME: Pedantically, this is the right thing to do, so
- # that some nasty dependency loop isn't accidentally
- # broken:
- #new_libs="$deplib $new_libs"
- # Pragmatically, this seems to cause very few problems in
- # practice:
- case $deplib in
- -L*) new_libs="$deplib $new_libs" ;;
- -R*) ;;
- *)
- # And here is the reason: when a library appears more
- # than once as an explicit dependence of a library, or
- # is implicitly linked in more than once by the
- # compiler, it is considered special, and multiple
- # occurrences thereof are not removed. Compare this
- # with having the same library being listed as a
- # dependency of multiple other libraries: in this case,
- # we know (pedantically, we assume) the library does not
- # need to be listed more than once, so we keep only the
- # last copy. This is not always right, but it is rare
- # enough that we require users that really mean to play
- # such unportable linking tricks to link the library
- # using -Wl,-lname, so that libtool does not consider it
- # for duplicate removal.
- case " $specialdeplibs " in
- *" $deplib "*) new_libs="$deplib $new_libs" ;;
- *)
- case " $new_libs " in
- *" $deplib "*) ;;
- *) new_libs="$deplib $new_libs" ;;
- esac
- ;;
- esac
- ;;
- esac
- done
- tmp_libs=
- for deplib in $new_libs; do
- case $deplib in
- -L*)
- case " $tmp_libs " in
- *" $deplib "*) ;;
- *) tmp_libs="$tmp_libs $deplib" ;;
- esac
- ;;
- *) tmp_libs="$tmp_libs $deplib" ;;
- esac
- done
- eval $var=\"$tmp_libs\"
- done # for var
- fi
- # Last step: remove runtime libs from dependency_libs
- # (they stay in deplibs)
- tmp_libs=
- for i in $dependency_libs ; do
- case " $predeps $postdeps $compiler_lib_search_path " in
- *" $i "*)
- i=""
- ;;
- esac
- if test -n "$i" ; then
- tmp_libs="$tmp_libs $i"
- fi
- done
- dependency_libs=$tmp_libs
- done # for pass
- if test "$linkmode" = prog; then
- dlfiles="$newdlfiles"
- dlprefiles="$newdlprefiles"
- fi
-
- case $linkmode in
- oldlib)
- if test -n "$deplibs"; then
- $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
- fi
-
- if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
- fi
-
- if test -n "$rpath"; then
- $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
- fi
-
- if test -n "$xrpath"; then
- $echo "$modename: warning: \`-R' is ignored for archives" 1>&2
- fi
-
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2
- fi
-
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for archives" 1>&2
- fi
-
- if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
- $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
- fi
-
- # Now set the variables for building old libraries.
- build_libtool_libs=no
- oldlibs="$output"
- objs="$objs$old_deplibs"
- ;;
-
- lib)
- # Make sure we only generate libraries of the form `libNAME.la'.
- case $outputname in
- lib*)
- name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
- eval shared_ext=\"$shrext_cmds\"
- eval libname=\"$libname_spec\"
- ;;
- *)
- if test "$module" = no; then
- $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
- if test "$need_lib_prefix" != no; then
- # Add the "lib" prefix for modules if required
- name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
- eval shared_ext=\"$shrext_cmds\"
- eval libname=\"$libname_spec\"
- else
- libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
- fi
- ;;
- esac
-
- if test -n "$objs"; then
- if test "$deplibs_check_method" != pass_all; then
- $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
- exit $EXIT_FAILURE
- else
- $echo
- $echo "*** Warning: Linking the shared library $output against the non-libtool"
- $echo "*** objects $objs is not portable!"
- libobjs="$libobjs $objs"
- fi
- fi
-
- if test "$dlself" != no; then
- $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
- fi
-
- set dummy $rpath
- if test "$#" -gt 2; then
- $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
- fi
- install_libdir="$2"
-
- oldlibs=
- if test -z "$rpath"; then
- if test "$build_libtool_libs" = yes; then
- # Building a libtool convenience library.
- # Some compilers have problems with a `.al' extension so
- # convenience libraries should have the same extension an
- # archive normally would.
- oldlibs="$output_objdir/$libname.$libext $oldlibs"
- build_libtool_libs=convenience
- build_old_libs=yes
- fi
-
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2
- fi
-
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
- fi
- else
-
- # Parse the version information argument.
- save_ifs="$IFS"; IFS=':'
- set dummy $vinfo 0 0 0
- IFS="$save_ifs"
-
- if test -n "$8"; then
- $echo "$modename: too many parameters to \`-version-info'" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- # convert absolute version numbers to libtool ages
- # this retains compatibility with .la files and attempts
- # to make the code below a bit more comprehensible
-
- case $vinfo_number in
- yes)
- number_major="$2"
- number_minor="$3"
- number_revision="$4"
- #
- # There are really only two kinds -- those that
- # use the current revision as the major version
- # and those that subtract age and use age as
- # a minor version. But, then there is irix
- # which has an extra 1 added just for fun
- #
- case $version_type in
- darwin|linux|osf|windows)
- current=`expr $number_major + $number_minor`
- age="$number_minor"
- revision="$number_revision"
- ;;
- freebsd-aout|freebsd-elf|sunos)
- current="$number_major"
- revision="$number_minor"
- age="0"
- ;;
- irix|nonstopux)
- current=`expr $number_major + $number_minor - 1`
- age="$number_minor"
- revision="$number_minor"
- ;;
- esac
- ;;
- no)
- current="$2"
- revision="$3"
- age="$4"
- ;;
- esac
-
- # Check that each of the things are valid numbers.
- case $current in
- 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
- *)
- $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
-
- case $revision in
- 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
- *)
- $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
-
- case $age in
- 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
- *)
- $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
-
- if test "$age" -gt "$current"; then
- $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit $EXIT_FAILURE
- fi
-
- # Calculate the version variables.
- major=
- versuffix=
- verstring=
- case $version_type in
- none) ;;
-
- darwin)
- # Like Linux, but with the current version available in
- # verstring for coding it into the library header
- major=.`expr $current - $age`
- versuffix="$major.$age.$revision"
- # Darwin ld doesn't like 0 for these options...
- minor_current=`expr $current + 1`
- verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
- ;;
-
- freebsd-aout)
- major=".$current"
- versuffix=".$current.$revision";
- ;;
-
- freebsd-elf)
- major=".$current"
- versuffix=".$current";
- ;;
-
- irix | nonstopux)
- major=`expr $current - $age + 1`
-
- case $version_type in
- nonstopux) verstring_prefix=nonstopux ;;
- *) verstring_prefix=sgi ;;
- esac
- verstring="$verstring_prefix$major.$revision"
-
- # Add in all the interfaces that we are compatible with.
- loop=$revision
- while test "$loop" -ne 0; do
- iface=`expr $revision - $loop`
- loop=`expr $loop - 1`
- verstring="$verstring_prefix$major.$iface:$verstring"
- done
-
- # Before this point, $major must not contain `.'.
- major=.$major
- versuffix="$major.$revision"
- ;;
-
- linux)
- major=.`expr $current - $age`
- versuffix="$major.$age.$revision"
- ;;
-
- osf)
- major=.`expr $current - $age`
- versuffix=".$current.$age.$revision"
- verstring="$current.$age.$revision"
-
- # Add in all the interfaces that we are compatible with.
- loop=$age
- while test "$loop" -ne 0; do
- iface=`expr $current - $loop`
- loop=`expr $loop - 1`
- verstring="$verstring:${iface}.0"
- done
-
- # Make executables depend on our current version.
- verstring="$verstring:${current}.0"
- ;;
-
- sunos)
- major=".$current"
- versuffix=".$current.$revision"
- ;;
-
- windows)
- # Use '-' rather than '.', since we only want one
- # extension on DOS 8.3 filesystems.
- major=`expr $current - $age`
- versuffix="-$major"
- ;;
-
- *)
- $echo "$modename: unknown library version type \`$version_type'" 1>&2
- $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
-
- # Clear the version info if we defaulted, and they specified a release.
- if test -z "$vinfo" && test -n "$release"; then
- major=
- case $version_type in
- darwin)
- # we can't check for "0.0" in archive_cmds due to quoting
- # problems, so we reset it completely
- verstring=
- ;;
- *)
- verstring="0.0"
- ;;
- esac
- if test "$need_version" = no; then
- versuffix=
- else
- versuffix=".0.0"
- fi
- fi
-
- # Remove version info from name if versioning should be avoided
- if test "$avoid_version" = yes && test "$need_version" = no; then
- major=
- versuffix=
- verstring=""
- fi
-
- # Check to see if the archive will have undefined symbols.
- if test "$allow_undefined" = yes; then
- if test "$allow_undefined_flag" = unsupported; then
- $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
- build_libtool_libs=no
- build_old_libs=yes
- fi
- else
- # Don't allow undefined symbols.
- allow_undefined_flag="$no_undefined_flag"
- fi
- fi
-
- if test "$mode" != relink; then
- # Remove our outputs, but don't remove object files since they
- # may have been created when compiling PIC objects.
- removelist=
- tempremovelist=`$echo "$output_objdir/*"`
- for p in $tempremovelist; do
- case $p in
- *.$objext)
- ;;
- $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
- if test "X$precious_files_regex" != "X"; then
- if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
- then
- continue
- fi
- fi
- removelist="$removelist $p"
- ;;
- *) ;;
- esac
- done
- if test -n "$removelist"; then
- $show "${rm}r $removelist"
- $run ${rm}r $removelist
- fi
- fi
-
- # Now set the variables for building old libraries.
- if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
- oldlibs="$oldlibs $output_objdir/$libname.$libext"
-
- # Transform .lo files to .o files.
- oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
- fi
-
- # Eliminate all temporary directories.
- for path in $notinst_path; do
- lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'`
- deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'`
- dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'`
- done
-
- if test -n "$xrpath"; then
- # If the user specified any rpath flags, then add them.
- temp_xrpath=
- for libdir in $xrpath; do
- temp_xrpath="$temp_xrpath -R$libdir"
- case "$finalize_rpath " in
- *" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir" ;;
- esac
- done
- if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
- dependency_libs="$temp_xrpath $dependency_libs"
- fi
- fi
-
- # Make sure dlfiles contains only unique files that won't be dlpreopened
- old_dlfiles="$dlfiles"
- dlfiles=
- for lib in $old_dlfiles; do
- case " $dlprefiles $dlfiles " in
- *" $lib "*) ;;
- *) dlfiles="$dlfiles $lib" ;;
- esac
- done
-
- # Make sure dlprefiles contains only unique files
- old_dlprefiles="$dlprefiles"
- dlprefiles=
- for lib in $old_dlprefiles; do
- case "$dlprefiles " in
- *" $lib "*) ;;
- *) dlprefiles="$dlprefiles $lib" ;;
- esac
- done
-
- if test "$build_libtool_libs" = yes; then
- if test -n "$rpath"; then
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
- # these systems don't actually have a c library (as such)!
- ;;
- *-*-rhapsody* | *-*-darwin1.[012])
- # Rhapsody C library is in the System framework
- deplibs="$deplibs -framework System"
- ;;
- *-*-netbsd*)
- # Don't link with libc until the a.out ld.so is fixed.
- ;;
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
- # Do not include libc due to us having libc/libc_r.
- test "X$arg" = "X-lc" && continue
- ;;
- *)
- # Add libc to deplibs on all other systems if necessary.
- if test "$build_libtool_need_lc" = "yes"; then
- deplibs="$deplibs -lc"
- fi
- ;;
- esac
- fi
-
- # Transform deplibs into only deplibs that can be linked in shared.
- name_save=$name
- libname_save=$libname
- release_save=$release
- versuffix_save=$versuffix
- major_save=$major
- # I'm not sure if I'm treating the release correctly. I think
- # release should show up in the -l (ie -lgmp5) so we don't want to
- # add it in twice. Is that correct?
- release=""
- versuffix=""
- major=""
- newdeplibs=
- droppeddeps=no
- case $deplibs_check_method in
- pass_all)
- # Don't check for shared/static. Everything works.
- # This might be a little naive. We might want to check
- # whether the library exists or not. But this is on
- # osf3 & osf4 and I'm not really sure... Just
- # implementing what was already the behavior.
- newdeplibs=$deplibs
- ;;
- test_compile)
- # This code stresses the "libraries are programs" paradigm to its
- # limits. Maybe even breaks it. We compile a program, linking it
- # against the deplibs as a proxy for the library. Then we can check
- # whether they linked in statically or dynamically with ldd.
- $rm conftest.c
- cat > conftest.c <<EOF
- int main() { return 0; }
-EOF
- $rm conftest
- $LTCC -o conftest conftest.c $deplibs
- if test "$?" -eq 0 ; then
- ldd_output=`ldd conftest`
- for i in $deplibs; do
- name="`expr $i : '-l\(.*\)'`"
- # If $name is empty we are operating on a -L argument.
- if test "$name" != "" && test "$name" -ne "0"; then
- if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
- case " $predeps $postdeps " in
- *" $i "*)
- newdeplibs="$newdeplibs $i"
- i=""
- ;;
- esac
- fi
- if test -n "$i" ; then
- libname=`eval \\$echo \"$libname_spec\"`
- deplib_matches=`eval \\$echo \"$library_names_spec\"`
- set dummy $deplib_matches
- deplib_match=$2
- if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
- newdeplibs="$newdeplibs $i"
- else
- droppeddeps=yes
- $echo
- $echo "*** Warning: dynamic linker does not accept needed library $i."
- $echo "*** I have the capability to make that library automatically link in when"
- $echo "*** you link to this library. But I can only do this if you have a"
- $echo "*** shared version of the library, which I believe you do not have"
- $echo "*** because a test_compile did reveal that the linker did not use it for"
- $echo "*** its dynamic dependency list that programs get resolved with at runtime."
- fi
- fi
- else
- newdeplibs="$newdeplibs $i"
- fi
- done
- else
- # Error occurred in the first compile. Let's try to salvage
- # the situation: Compile a separate program for each library.
- for i in $deplibs; do
- name="`expr $i : '-l\(.*\)'`"
- # If $name is empty we are operating on a -L argument.
- if test "$name" != "" && test "$name" != "0"; then
- $rm conftest
- $LTCC -o conftest conftest.c $i
- # Did it work?
- if test "$?" -eq 0 ; then
- ldd_output=`ldd conftest`
- if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
- case " $predeps $postdeps " in
- *" $i "*)
- newdeplibs="$newdeplibs $i"
- i=""
- ;;
- esac
- fi
- if test -n "$i" ; then
- libname=`eval \\$echo \"$libname_spec\"`
- deplib_matches=`eval \\$echo \"$library_names_spec\"`
- set dummy $deplib_matches
- deplib_match=$2
- if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
- newdeplibs="$newdeplibs $i"
- else
- droppeddeps=yes
- $echo
- $echo "*** Warning: dynamic linker does not accept needed library $i."
- $echo "*** I have the capability to make that library automatically link in when"
- $echo "*** you link to this library. But I can only do this if you have a"
- $echo "*** shared version of the library, which you do not appear to have"
- $echo "*** because a test_compile did reveal that the linker did not use this one"
- $echo "*** as a dynamic dependency that programs can get resolved with at runtime."
- fi
- fi
- else
- droppeddeps=yes
- $echo
- $echo "*** Warning! Library $i is needed by this library but I was not able to"
- $echo "*** make it link in! You will probably need to install it or some"
- $echo "*** library that it depends on before this library will be fully"
- $echo "*** functional. Installing it before continuing would be even better."
- fi
- else
- newdeplibs="$newdeplibs $i"
- fi
- done
- fi
- ;;
- file_magic*)
- set dummy $deplibs_check_method
- file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
- for a_deplib in $deplibs; do
- name="`expr $a_deplib : '-l\(.*\)'`"
- # If $name is empty we are operating on a -L argument.
- if test "$name" != "" && test "$name" != "0"; then
- if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
- case " $predeps $postdeps " in
- *" $a_deplib "*)
- newdeplibs="$newdeplibs $a_deplib"
- a_deplib=""
- ;;
- esac
- fi
- if test -n "$a_deplib" ; then
- libname=`eval \\$echo \"$libname_spec\"`
- for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
- potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
- for potent_lib in $potential_libs; do
- # Follow soft links.
- if ls -lLd "$potent_lib" 2>/dev/null \
- | grep " -> " >/dev/null; then
- continue
- fi
- # The statement above tries to avoid entering an
- # endless loop below, in case of cyclic links.
- # We might still enter an endless loop, since a link
- # loop can be closed while we follow links,
- # but so what?
- potlib="$potent_lib"
- while test -h "$potlib" 2>/dev/null; do
- potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
- case $potliblink in
- [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
- *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
- esac
- done
- if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
- | ${SED} 10q \
- | $EGREP "$file_magic_regex" > /dev/null; then
- newdeplibs="$newdeplibs $a_deplib"
- a_deplib=""
- break 2
- fi
- done
- done
- fi
- if test -n "$a_deplib" ; then
- droppeddeps=yes
- $echo
- $echo "*** Warning: linker path does not have real file for library $a_deplib."
- $echo "*** I have the capability to make that library automatically link in when"
- $echo "*** you link to this library. But I can only do this if you have a"
- $echo "*** shared version of the library, which you do not appear to have"
- $echo "*** because I did check the linker path looking for a file starting"
- if test -z "$potlib" ; then
- $echo "*** with $libname but no candidates were found. (...for file magic test)"
- else
- $echo "*** with $libname and none of the candidates passed a file format test"
- $echo "*** using a file magic. Last file checked: $potlib"
- fi
- fi
- else
- # Add a -L argument.
- newdeplibs="$newdeplibs $a_deplib"
- fi
- done # Gone through all deplibs.
- ;;
- match_pattern*)
- set dummy $deplibs_check_method
- match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
- for a_deplib in $deplibs; do
- name="`expr $a_deplib : '-l\(.*\)'`"
- # If $name is empty we are operating on a -L argument.
- if test -n "$name" && test "$name" != "0"; then
- if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
- case " $predeps $postdeps " in
- *" $a_deplib "*)
- newdeplibs="$newdeplibs $a_deplib"
- a_deplib=""
- ;;
- esac
- fi
- if test -n "$a_deplib" ; then
- libname=`eval \\$echo \"$libname_spec\"`
- for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
- potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
- for potent_lib in $potential_libs; do
- potlib="$potent_lib" # see symlink-check above in file_magic test
- if eval $echo \"$potent_lib\" 2>/dev/null \
- | ${SED} 10q \
- | $EGREP "$match_pattern_regex" > /dev/null; then
- newdeplibs="$newdeplibs $a_deplib"
- a_deplib=""
- break 2
- fi
- done
- done
- fi
- if test -n "$a_deplib" ; then
- droppeddeps=yes
- $echo
- $echo "*** Warning: linker path does not have real file for library $a_deplib."
- $echo "*** I have the capability to make that library automatically link in when"
- $echo "*** you link to this library. But I can only do this if you have a"
- $echo "*** shared version of the library, which you do not appear to have"
- $echo "*** because I did check the linker path looking for a file starting"
- if test -z "$potlib" ; then
- $echo "*** with $libname but no candidates were found. (...for regex pattern test)"
- else
- $echo "*** with $libname and none of the candidates passed a file format test"
- $echo "*** using a regex pattern. Last file checked: $potlib"
- fi
- fi
- else
- # Add a -L argument.
- newdeplibs="$newdeplibs $a_deplib"
- fi
- done # Gone through all deplibs.
- ;;
- none | unknown | *)
- newdeplibs=""
- tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
- -e 's/ -[LR][^ ]*//g'`
- if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
- for i in $predeps $postdeps ; do
- # can't use Xsed below, because $i might contain '/'
- tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"`
- done
- fi
- if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \
- | grep . >/dev/null; then
- $echo
- if test "X$deplibs_check_method" = "Xnone"; then
- $echo "*** Warning: inter-library dependencies are not supported in this platform."
- else
- $echo "*** Warning: inter-library dependencies are not known to be supported."
- fi
- $echo "*** All declared inter-library dependencies are being dropped."
- droppeddeps=yes
- fi
- ;;
- esac
- versuffix=$versuffix_save
- major=$major_save
- release=$release_save
- libname=$libname_save
- name=$name_save
-
- case $host in
- *-*-rhapsody* | *-*-darwin1.[012])
- # On Rhapsody replace the C library is the System framework
- newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
- ;;
- esac
-
- if test "$droppeddeps" = yes; then
- if test "$module" = yes; then
- $echo
- $echo "*** Warning: libtool could not satisfy all declared inter-library"
- $echo "*** dependencies of module $libname. Therefore, libtool will create"
- $echo "*** a static module, that should work as long as the dlopening"
- $echo "*** application is linked with the -dlopen flag."
- if test -z "$global_symbol_pipe"; then
- $echo
- $echo "*** However, this would only work if libtool was able to extract symbol"
- $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
- $echo "*** not find such a program. So, this module is probably useless."
- $echo "*** \`nm' from GNU binutils and a full rebuild may help."
- fi
- if test "$build_old_libs" = no; then
- oldlibs="$output_objdir/$libname.$libext"
- build_libtool_libs=module
- build_old_libs=yes
- else
- build_libtool_libs=no
- fi
- else
- $echo "*** The inter-library dependencies that have been dropped here will be"
- $echo "*** automatically added whenever a program is linked with this library"
- $echo "*** or is declared to -dlopen it."
-
- if test "$allow_undefined" = no; then
- $echo
- $echo "*** Since this library must not contain undefined symbols,"
- $echo "*** because either the platform does not support them or"
- $echo "*** it was explicitly requested with -no-undefined,"
- $echo "*** libtool will only create a static version of it."
- if test "$build_old_libs" = no; then
- oldlibs="$output_objdir/$libname.$libext"
- build_libtool_libs=module
- build_old_libs=yes
- else
- build_libtool_libs=no
- fi
- fi
- fi
- fi
- # Done checking deplibs!
- deplibs=$newdeplibs
- fi
-
- # All the library-specific variables (install_libdir is set above).
- library_names=
- old_library=
- dlname=
-
- # Test again, we may have decided not to build it any more
- if test "$build_libtool_libs" = yes; then
- if test "$hardcode_into_libs" = yes; then
- # Hardcode the library paths
- hardcode_libdirs=
- dep_rpath=
- rpath="$finalize_rpath"
- test "$mode" != relink && rpath="$compile_rpath$rpath"
- for libdir in $rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs="$libdir"
- else
- # Just accumulate the unique libdirs.
- case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
- *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- ;;
- *)
- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
- ;;
- esac
- fi
- else
- eval flag=\"$hardcode_libdir_flag_spec\"
- dep_rpath="$dep_rpath $flag"
- fi
- elif test -n "$runpath_var"; then
- case "$perm_rpath " in
- *" $libdir "*) ;;
- *) perm_rpath="$perm_rpath $libdir" ;;
- esac
- fi
- done
- # Substitute the hardcoded libdirs into the rpath.
- if test -n "$hardcode_libdir_separator" &&
- test -n "$hardcode_libdirs"; then
- libdir="$hardcode_libdirs"
- if test -n "$hardcode_libdir_flag_spec_ld"; then
- eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
- else
- eval dep_rpath=\"$hardcode_libdir_flag_spec\"
- fi
- fi
- if test -n "$runpath_var" && test -n "$perm_rpath"; then
- # We should set the runpath_var.
- rpath=
- for dir in $perm_rpath; do
- rpath="$rpath$dir:"
- done
- eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
- fi
- test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
- fi
-
- shlibpath="$finalize_shlibpath"
- test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
- if test -n "$shlibpath"; then
- eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
- fi
-
- # Get the real and link names of the library.
- eval shared_ext=\"$shrext_cmds\"
- eval library_names=\"$library_names_spec\"
- set dummy $library_names
- realname="$2"
- shift; shift
-
- if test -n "$soname_spec"; then
- eval soname=\"$soname_spec\"
- else
- soname="$realname"
- fi
- if test -z "$dlname"; then
- dlname=$soname
- fi
-
- lib="$output_objdir/$realname"
- for link
- do
- linknames="$linknames $link"
- done
-
- # Use standard objects if they are pic
- test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-
- # Prepare the list of exported symbols
- if test -z "$export_symbols"; then
- if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
- $show "generating symbol list for \`$libname.la'"
- export_symbols="$output_objdir/$libname.exp"
- $run $rm $export_symbols
- cmds=$export_symbols_cmds
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- if len=`expr "X$cmd" : ".*"` &&
- test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
- $show "$cmd"
- $run eval "$cmd" || exit $?
- skipped_export=false
- else
- # The command line is too long to execute in one step.
- $show "using reloadable object file for export list..."
- skipped_export=:
- fi
- done
- IFS="$save_ifs"
- if test -n "$export_symbols_regex"; then
- $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
- $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
- $show "$mv \"${export_symbols}T\" \"$export_symbols\""
- $run eval '$mv "${export_symbols}T" "$export_symbols"'
- fi
- fi
- fi
-
- if test -n "$export_symbols" && test -n "$include_expsyms"; then
- $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
- fi
-
- tmp_deplibs=
- for test_deplib in $deplibs; do
- case " $convenience " in
- *" $test_deplib "*) ;;
- *)
- tmp_deplibs="$tmp_deplibs $test_deplib"
- ;;
- esac
- done
- deplibs="$tmp_deplibs"
-
- if test -n "$convenience"; then
- if test -n "$whole_archive_flag_spec"; then
- save_libobjs=$libobjs
- eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
- else
- gentop="$output_objdir/${outputname}x"
- generated="$generated $gentop"
-
- func_extract_archives $gentop $convenience
- libobjs="$libobjs $func_extract_archives_result"
- fi
- fi
-
- if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
- eval flag=\"$thread_safe_flag_spec\"
- linker_flags="$linker_flags $flag"
- fi
-
- # Make a backup of the uninstalled library when relinking
- if test "$mode" = relink; then
- $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
- fi
-
- # Do each of the archive commands.
- if test "$module" = yes && test -n "$module_cmds" ; then
- if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
- eval test_cmds=\"$module_expsym_cmds\"
- cmds=$module_expsym_cmds
- else
- eval test_cmds=\"$module_cmds\"
- cmds=$module_cmds
- fi
- else
- if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
- eval test_cmds=\"$archive_expsym_cmds\"
- cmds=$archive_expsym_cmds
- else
- eval test_cmds=\"$archive_cmds\"
- cmds=$archive_cmds
- fi
- fi
-
- if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*"` &&
- test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
- :
- else
- # The command line is too long to link in one step, link piecewise.
- $echo "creating reloadable object files..."
-
- # Save the value of $output and $libobjs because we want to
- # use them later. If we have whole_archive_flag_spec, we
- # want to use save_libobjs as it was before
- # whole_archive_flag_spec was expanded, because we can't
- # assume the linker understands whole_archive_flag_spec.
- # This may have to be revisited, in case too many
- # convenience libraries get linked in and end up exceeding
- # the spec.
- if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
- save_libobjs=$libobjs
- fi
- save_output=$output
- output_la=`$echo "X$output" | $Xsed -e "$basename"`
-
- # Clear the reloadable object creation command queue and
- # initialize k to one.
- test_cmds=
- concat_cmds=
- objlist=
- delfiles=
- last_robj=
- k=1
- output=$output_objdir/$output_la-${k}.$objext
- # Loop over the list of objects to be linked.
- for obj in $save_libobjs
- do
- eval test_cmds=\"$reload_cmds $objlist $last_robj\"
- if test "X$objlist" = X ||
- { len=`expr "X$test_cmds" : ".*"` &&
- test "$len" -le "$max_cmd_len"; }; then
- objlist="$objlist $obj"
- else
- # The command $test_cmds is almost too long, add a
- # command to the queue.
- if test "$k" -eq 1 ; then
- # The first file doesn't have a previous command to add.
- eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
- else
- # All subsequent reloadable object files will link in
- # the last one created.
- eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
- fi
- last_robj=$output_objdir/$output_la-${k}.$objext
- k=`expr $k + 1`
- output=$output_objdir/$output_la-${k}.$objext
- objlist=$obj
- len=1
- fi
- done
- # Handle the remaining objects by creating one last
- # reloadable object file. All subsequent reloadable object
- # files will link in the last one created.
- test -z "$concat_cmds" || concat_cmds=$concat_cmds~
- eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
-
- if ${skipped_export-false}; then
- $show "generating symbol list for \`$libname.la'"
- export_symbols="$output_objdir/$libname.exp"
- $run $rm $export_symbols
- libobjs=$output
- # Append the command to create the export file.
- eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\"
- fi
-
- # Set up a command to remove the reloadable object files
- # after they are used.
- i=0
- while test "$i" -lt "$k"
- do
- i=`expr $i + 1`
- delfiles="$delfiles $output_objdir/$output_la-${i}.$objext"
- done
-
- $echo "creating a temporary reloadable object file: $output"
-
- # Loop through the commands generated above and execute them.
- save_ifs="$IFS"; IFS='~'
- for cmd in $concat_cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
-
- libobjs=$output
- # Restore the value of output.
- output=$save_output
-
- if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
- eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
- fi
- # Expand the library linking commands again to reset the
- # value of $libobjs for piecewise linking.
-
- # Do each of the archive commands.
- if test "$module" = yes && test -n "$module_cmds" ; then
- if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
- cmds=$module_expsym_cmds
- else
- cmds=$module_cmds
- fi
- else
- if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
- cmds=$archive_expsym_cmds
- else
- cmds=$archive_cmds
- fi
- fi
-
- # Append the command to remove the reloadable object files
- # to the just-reset $cmds.
- eval cmds=\"\$cmds~\$rm $delfiles\"
- fi
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
-
- # Restore the uninstalled library and exit
- if test "$mode" = relink; then
- $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
- exit $EXIT_SUCCESS
- fi
-
- # Create links to the real library.
- for linkname in $linknames; do
- if test "$realname" != "$linkname"; then
- $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
- $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
- fi
- done
-
- # If -module or -export-dynamic was specified, set the dlname.
- if test "$module" = yes || test "$export_dynamic" = yes; then
- # On all known operating systems, these are identical.
- dlname="$soname"
- fi
- fi
- ;;
-
- obj)
- if test -n "$deplibs"; then
- $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
- fi
-
- if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
- fi
-
- if test -n "$rpath"; then
- $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
- fi
-
- if test -n "$xrpath"; then
- $echo "$modename: warning: \`-R' is ignored for objects" 1>&2
- fi
-
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
- fi
-
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for objects" 1>&2
- fi
-
- case $output in
- *.lo)
- if test -n "$objs$old_deplibs"; then
- $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
- exit $EXIT_FAILURE
- fi
- libobj="$output"
- obj=`$echo "X$output" | $Xsed -e "$lo2o"`
- ;;
- *)
- libobj=
- obj="$output"
- ;;
- esac
-
- # Delete the old objects.
- $run $rm $obj $libobj
-
- # Objects from convenience libraries. This assumes
- # single-version convenience libraries. Whenever we create
- # different ones for PIC/non-PIC, this we'll have to duplicate
- # the extraction.
- reload_conv_objs=
- gentop=
- # reload_cmds runs $LD directly, so let us get rid of
- # -Wl from whole_archive_flag_spec
- wl=
-
- if test -n "$convenience"; then
- if test -n "$whole_archive_flag_spec"; then
- eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
- else
- gentop="$output_objdir/${obj}x"
- generated="$generated $gentop"
-
- func_extract_archives $gentop $convenience
- reload_conv_objs="$reload_objs $func_extract_archives_result"
- fi
- fi
-
- # Create the old-style object.
- reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
-
- output="$obj"
- cmds=$reload_cmds
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
-
- # Exit if we aren't doing a library object file.
- if test -z "$libobj"; then
- if test -n "$gentop"; then
- $show "${rm}r $gentop"
- $run ${rm}r $gentop
- fi
-
- exit $EXIT_SUCCESS
- fi
-
- if test "$build_libtool_libs" != yes; then
- if test -n "$gentop"; then
- $show "${rm}r $gentop"
- $run ${rm}r $gentop
- fi
-
- # Create an invalid libtool object if no PIC, so that we don't
- # accidentally link it into a program.
- # $show "echo timestamp > $libobj"
- # $run eval "echo timestamp > $libobj" || exit $?
- exit $EXIT_SUCCESS
- fi
-
- if test -n "$pic_flag" || test "$pic_mode" != default; then
- # Only do commands if we really have different PIC objects.
- reload_objs="$libobjs $reload_conv_objs"
- output="$libobj"
- cmds=$reload_cmds
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- fi
-
- if test -n "$gentop"; then
- $show "${rm}r $gentop"
- $run ${rm}r $gentop
- fi
-
- exit $EXIT_SUCCESS
- ;;
-
- prog)
- case $host in
- *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
- esac
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
- fi
-
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for programs" 1>&2
- fi
-
- if test "$preload" = yes; then
- if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
- test "$dlopen_self_static" = unknown; then
- $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
- fi
- fi
-
- case $host in
- *-*-rhapsody* | *-*-darwin1.[012])
- # On Rhapsody replace the C library is the System framework
- compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
- finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
- ;;
- esac
-
- case $host in
- *darwin*)
- # Don't allow lazy linking, it breaks C++ global constructors
- if test "$tagname" = CXX ; then
- compile_command="$compile_command ${wl}-bind_at_load"
- finalize_command="$finalize_command ${wl}-bind_at_load"
- fi
- ;;
- esac
-
- compile_command="$compile_command $compile_deplibs"
- finalize_command="$finalize_command $finalize_deplibs"
-
- if test -n "$rpath$xrpath"; then
- # If the user specified any rpath flags, then add them.
- for libdir in $rpath $xrpath; do
- # This is the magic to use -rpath.
- case "$finalize_rpath " in
- *" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir" ;;
- esac
- done
- fi
-
- # Now hardcode the library paths
- rpath=
- hardcode_libdirs=
- for libdir in $compile_rpath $finalize_rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs="$libdir"
- else
- # Just accumulate the unique libdirs.
- case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
- *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- ;;
- *)
- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
- ;;
- esac
- fi
- else
- eval flag=\"$hardcode_libdir_flag_spec\"
- rpath="$rpath $flag"
- fi
- elif test -n "$runpath_var"; then
- case "$perm_rpath " in
- *" $libdir "*) ;;
- *) perm_rpath="$perm_rpath $libdir" ;;
- esac
- fi
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
- case :$dllsearchpath: in
- *":$libdir:"*) ;;
- *) dllsearchpath="$dllsearchpath:$libdir";;
- esac
- ;;
- esac
- done
- # Substitute the hardcoded libdirs into the rpath.
- if test -n "$hardcode_libdir_separator" &&
- test -n "$hardcode_libdirs"; then
- libdir="$hardcode_libdirs"
- eval rpath=\" $hardcode_libdir_flag_spec\"
- fi
- compile_rpath="$rpath"
-
- rpath=
- hardcode_libdirs=
- for libdir in $finalize_rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs="$libdir"
- else
- # Just accumulate the unique libdirs.
- case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
- *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- ;;
- *)
- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
- ;;
- esac
- fi
- else
- eval flag=\"$hardcode_libdir_flag_spec\"
- rpath="$rpath $flag"
- fi
- elif test -n "$runpath_var"; then
- case "$finalize_perm_rpath " in
- *" $libdir "*) ;;
- *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
- esac
- fi
- done
- # Substitute the hardcoded libdirs into the rpath.
- if test -n "$hardcode_libdir_separator" &&
- test -n "$hardcode_libdirs"; then
- libdir="$hardcode_libdirs"
- eval rpath=\" $hardcode_libdir_flag_spec\"
- fi
- finalize_rpath="$rpath"
-
- if test -n "$libobjs" && test "$build_old_libs" = yes; then
- # Transform all the library objects into standard objects.
- compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- fi
-
- dlsyms=
- if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- if test -n "$NM" && test -n "$global_symbol_pipe"; then
- dlsyms="${outputname}S.c"
- else
- $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
- fi
- fi
-
- if test -n "$dlsyms"; then
- case $dlsyms in
- "") ;;
- *.c)
- # Discover the nlist of each of the dlfiles.
- nlist="$output_objdir/${outputname}.nm"
-
- $show "$rm $nlist ${nlist}S ${nlist}T"
- $run $rm "$nlist" "${nlist}S" "${nlist}T"
-
- # Parse the name list into a source file.
- $show "creating $output_objdir/$dlsyms"
-
- test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
-/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
-/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
-
-#ifdef __cplusplus
-extern \"C\" {
-#endif
-
-/* Prevent the only kind of declaration conflicts we can make. */
-#define lt_preloaded_symbols some_other_symbol
-
-/* External symbol declarations for the compiler. */\
-"
-
- if test "$dlself" = yes; then
- $show "generating symbol list for \`$output'"
-
- test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
-
- # Add our own program objects to the symbol list.
- progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- for arg in $progfiles; do
- $show "extracting global C symbols from \`$arg'"
- $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
- done
-
- if test -n "$exclude_expsyms"; then
- $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
- $run eval '$mv "$nlist"T "$nlist"'
- fi
-
- if test -n "$export_symbols_regex"; then
- $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
- $run eval '$mv "$nlist"T "$nlist"'
- fi
-
- # Prepare the list of exported symbols
- if test -z "$export_symbols"; then
- export_symbols="$output_objdir/$outputname.exp"
- $run $rm $export_symbols
- $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
- else
- $run eval "${SED} -e 's/\([ ][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
- $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
- $run eval 'mv "$nlist"T "$nlist"'
- fi
- fi
-
- for arg in $dlprefiles; do
- $show "extracting global C symbols from \`$arg'"
- name=`$echo "$arg" | ${SED} -e 's%^.*/%%'`
- $run eval '$echo ": $name " >> "$nlist"'
- $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
- done
-
- if test -z "$run"; then
- # Make sure we have at least an empty file.
- test -f "$nlist" || : > "$nlist"
-
- if test -n "$exclude_expsyms"; then
- $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
- $mv "$nlist"T "$nlist"
- fi
-
- # Try sorting and uniquifying the output.
- if grep -v "^: " < "$nlist" |
- if sort -k 3 </dev/null >/dev/null 2>&1; then
- sort -k 3
- else
- sort +2
- fi |
- uniq > "$nlist"S; then
- :
- else
- grep -v "^: " < "$nlist" > "$nlist"S
- fi
-
- if test -f "$nlist"S; then
- eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
- else
- $echo '/* NONE */' >> "$output_objdir/$dlsyms"
- fi
-
- $echo >> "$output_objdir/$dlsyms" "\
-
-#undef lt_preloaded_symbols
-
-#if defined (__STDC__) && __STDC__
-# define lt_ptr void *
-#else
-# define lt_ptr char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-"
-
- case $host in
- *cygwin* | *mingw* )
- $echo >> "$output_objdir/$dlsyms" "\
-/* DATA imports from DLLs on WIN32 can't be const, because
- runtime relocations are performed -- see ld's documentation
- on pseudo-relocs */
-struct {
-"
- ;;
- * )
- $echo >> "$output_objdir/$dlsyms" "\
-const struct {
-"
- ;;
- esac
-
-
- $echo >> "$output_objdir/$dlsyms" "\
- const char *name;
- lt_ptr address;
-}
-lt_preloaded_symbols[] =
-{\
-"
-
- eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms"
-
- $echo >> "$output_objdir/$dlsyms" "\
- {0, (lt_ptr) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
- return lt_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif\
-"
- fi
-
- pic_flag_for_symtable=
- case $host in
- # compiling the symbol table file with pic_flag works around
- # a FreeBSD bug that causes programs to crash when -lm is
- # linked before any other PIC object. But we must not use
- # pic_flag when linking with -static. The problem exists in
- # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
- *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
- case "$compile_command " in
- *" -static "*) ;;
- *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";;
- esac;;
- *-*-hpux*)
- case "$compile_command " in
- *" -static "*) ;;
- *) pic_flag_for_symtable=" $pic_flag";;
- esac
- esac
-
- # Now compile the dynamic symbol file.
- $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
- $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
-
- # Clean up the generated files.
- $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
- $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
-
- # Transform the symbol file into the correct name.
- compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
- finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
- ;;
- *)
- $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
- else
- # We keep going just in case the user didn't refer to
- # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
- # really was required.
-
- # Nullify the symbol file.
- compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
- finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
- fi
-
- if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
- # Replace the output file specification.
- compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
- link_command="$compile_command$compile_rpath"
-
- # We have no uninstalled library dependencies, so finalize right now.
- $show "$link_command"
- $run eval "$link_command"
- status=$?
-
- # Delete the generated files.
- if test -n "$dlsyms"; then
- $show "$rm $output_objdir/${outputname}S.${objext}"
- $run $rm "$output_objdir/${outputname}S.${objext}"
- fi
-
- exit $status
- fi
-
- if test -n "$shlibpath_var"; then
- # We should set the shlibpath_var
- rpath=
- for dir in $temp_rpath; do
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*)
- # Absolute path.
- rpath="$rpath$dir:"
- ;;
- *)
- # Relative path: add a thisdir entry.
- rpath="$rpath\$thisdir/$dir:"
- ;;
- esac
- done
- temp_rpath="$rpath"
- fi
-
- if test -n "$compile_shlibpath$finalize_shlibpath"; then
- compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
- fi
- if test -n "$finalize_shlibpath"; then
- finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
- fi
-
- compile_var=
- finalize_var=
- if test -n "$runpath_var"; then
- if test -n "$perm_rpath"; then
- # We should set the runpath_var.
- rpath=
- for dir in $perm_rpath; do
- rpath="$rpath$dir:"
- done
- compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
- fi
- if test -n "$finalize_perm_rpath"; then
- # We should set the runpath_var.
- rpath=
- for dir in $finalize_perm_rpath; do
- rpath="$rpath$dir:"
- done
- finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
- fi
- fi
-
- if test "$no_install" = yes; then
- # We don't need to create a wrapper script.
- link_command="$compile_var$compile_command$compile_rpath"
- # Replace the output file specification.
- link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
- # Delete the old output file.
- $run $rm $output
- # Link the executable and exit
- $show "$link_command"
- $run eval "$link_command" || exit $?
- exit $EXIT_SUCCESS
- fi
-
- if test "$hardcode_action" = relink; then
- # Fast installation is not supported
- link_command="$compile_var$compile_command$compile_rpath"
- relink_command="$finalize_var$finalize_command$finalize_rpath"
-
- $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
- $echo "$modename: \`$output' will be relinked during installation" 1>&2
- else
- if test "$fast_install" != no; then
- link_command="$finalize_var$compile_command$finalize_rpath"
- if test "$fast_install" = yes; then
- relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
- else
- # fast_install is set to needless
- relink_command=
- fi
- else
- link_command="$compile_var$compile_command$compile_rpath"
- relink_command="$finalize_var$finalize_command$finalize_rpath"
- fi
- fi
-
- # Replace the output file specification.
- link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
-
- # Delete the old output files.
- $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
-
- $show "$link_command"
- $run eval "$link_command" || exit $?
-
- # Now create the wrapper script.
- $show "creating $output"
-
- # Quote the relink command for shipping.
- if test -n "$relink_command"; then
- # Preserve any variables that may affect compiler behavior
- for var in $variables_saved_for_relink; do
- if eval test -z \"\${$var+set}\"; then
- relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
- elif eval var_value=\$$var; test -z "$var_value"; then
- relink_command="$var=; export $var; $relink_command"
- else
- var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
- relink_command="$var=\"$var_value\"; export $var; $relink_command"
- fi
- done
- relink_command="(cd `pwd`; $relink_command)"
- relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
- fi
-
- # Quote $echo for shipping.
- if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then
- case $progpath in
- [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
- *) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
- esac
- qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
- else
- qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
- fi
-
- # Only actually do things if our run command is non-null.
- if test -z "$run"; then
- # win32 will think the script is a binary if it has
- # a .exe suffix, so we strip it off here.
- case $output in
- *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;;
- esac
- # test for cygwin because mv fails w/o .exe extensions
- case $host in
- *cygwin*)
- exeext=.exe
- outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;;
- *) exeext= ;;
- esac
- case $host in
- *cygwin* | *mingw* )
- cwrappersource=`$echo ${objdir}/lt-${outputname}.c`
- cwrapper=`$echo ${output}.exe`
- $rm $cwrappersource $cwrapper
- trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
-
- cat > $cwrappersource <<EOF
-
-/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
- Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-
- The $output program cannot be directly executed until all the libtool
- libraries that it depends on are installed.
-
- This wrapper executable should never be moved out of the build directory.
- If it is, it will not operate correctly.
-
- Currently, it simply execs the wrapper *script* "/bin/sh $output",
- but could eventually absorb all of the scripts functionality and
- exec $objdir/$outputname directly.
-*/
-EOF
- cat >> $cwrappersource<<"EOF"
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <malloc.h>
-#include <stdarg.h>
-#include <assert.h>
-
-#if defined(PATH_MAX)
-# define LT_PATHMAX PATH_MAX
-#elif defined(MAXPATHLEN)
-# define LT_PATHMAX MAXPATHLEN
-#else
-# define LT_PATHMAX 1024
-#endif
-
-#ifndef DIR_SEPARATOR
-#define DIR_SEPARATOR '/'
-#endif
-
-#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
- defined (__OS2__)
-#define HAVE_DOS_BASED_FILE_SYSTEM
-#ifndef DIR_SEPARATOR_2
-#define DIR_SEPARATOR_2 '\\'
-#endif
-#endif
-
-#ifndef DIR_SEPARATOR_2
-# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
-#else /* DIR_SEPARATOR_2 */
-# define IS_DIR_SEPARATOR(ch) \
- (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
-#endif /* DIR_SEPARATOR_2 */
-
-#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
-#define XFREE(stale) do { \
- if (stale) { free ((void *) stale); stale = 0; } \
-} while (0)
-
-const char *program_name = NULL;
-
-void * xmalloc (size_t num);
-char * xstrdup (const char *string);
-char * basename (const char *name);
-char * fnqualify(const char *path);
-char * strendzap(char *str, const char *pat);
-void lt_fatal (const char *message, ...);
-
-int
-main (int argc, char *argv[])
-{
- char **newargz;
- int i;
-
- program_name = (char *) xstrdup ((char *) basename (argv[0]));
- newargz = XMALLOC(char *, argc+2);
-EOF
-
- cat >> $cwrappersource <<EOF
- newargz[0] = "$SHELL";
-EOF
-
- cat >> $cwrappersource <<"EOF"
- newargz[1] = fnqualify(argv[0]);
- /* we know the script has the same name, without the .exe */
- /* so make sure newargz[1] doesn't end in .exe */
- strendzap(newargz[1],".exe");
- for (i = 1; i < argc; i++)
- newargz[i+1] = xstrdup(argv[i]);
- newargz[argc+1] = NULL;
-EOF
-
- cat >> $cwrappersource <<EOF
- execv("$SHELL",newargz);
-EOF
-
- cat >> $cwrappersource <<"EOF"
-}
-
-void *
-xmalloc (size_t num)
-{
- void * p = (void *) malloc (num);
- if (!p)
- lt_fatal ("Memory exhausted");
-
- return p;
-}
-
-char *
-xstrdup (const char *string)
-{
- return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL
-;
-}
-
-char *
-basename (const char *name)
-{
- const char *base;
-
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
- /* Skip over the disk name in MSDOS pathnames. */
- if (isalpha (name[0]) && name[1] == ':')
- name += 2;
-#endif
-
- for (base = name; *name; name++)
- if (IS_DIR_SEPARATOR (*name))
- base = name + 1;
- return (char *) base;
-}
-
-char *
-fnqualify(const char *path)
-{
- size_t size;
- char *p;
- char tmp[LT_PATHMAX + 1];
-
- assert(path != NULL);
-
- /* Is it qualified already? */
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
- if (isalpha (path[0]) && path[1] == ':')
- return xstrdup (path);
-#endif
- if (IS_DIR_SEPARATOR (path[0]))
- return xstrdup (path);
-
- /* prepend the current directory */
- /* doesn't handle '~' */
- if (getcwd (tmp, LT_PATHMAX) == NULL)
- lt_fatal ("getcwd failed");
- size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */
- p = XMALLOC(char, size);
- sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path);
- return p;
-}
-
-char *
-strendzap(char *str, const char *pat)
-{
- size_t len, patlen;
-
- assert(str != NULL);
- assert(pat != NULL);
-
- len = strlen(str);
- patlen = strlen(pat);
-
- if (patlen <= len)
- {
- str += len - patlen;
- if (strcmp(str, pat) == 0)
- *str = '\0';
- }
- return str;
-}
-
-static void
-lt_error_core (int exit_status, const char * mode,
- const char * message, va_list ap)
-{
- fprintf (stderr, "%s: %s: ", program_name, mode);
- vfprintf (stderr, message, ap);
- fprintf (stderr, ".\n");
-
- if (exit_status >= 0)
- exit (exit_status);
-}
-
-void
-lt_fatal (const char *message, ...)
-{
- va_list ap;
- va_start (ap, message);
- lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
- va_end (ap);
-}
-EOF
- # we should really use a build-platform specific compiler
- # here, but OTOH, the wrappers (shell script and this C one)
- # are only useful if you want to execute the "real" binary.
- # Since the "real" binary is built for $host, then this
- # wrapper might as well be built for $host, too.
- $run $LTCC -s -o $cwrapper $cwrappersource
- ;;
- esac
- $rm $output
- trap "$rm $output; exit $EXIT_FAILURE" 1 2 15
-
- $echo > $output "\
-#! $SHELL
-
-# $output - temporary wrapper script for $objdir/$outputname
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# The $output program cannot be directly executed until all the libtool
-# libraries that it depends on are installed.
-#
-# This wrapper script should never be moved out of the build directory.
-# If it is, it will not operate correctly.
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='${SED} -e 1s/^X//'
-sed_quote_subst='$sed_quote_subst'
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-relink_command=\"$relink_command\"
-
-# This environment variable determines our operation mode.
-if test \"\$libtool_install_magic\" = \"$magic\"; then
- # install mode needs the following variable:
- notinst_deplibs='$notinst_deplibs'
-else
- # When we are sourced in execute mode, \$file and \$echo are already set.
- if test \"\$libtool_execute_magic\" != \"$magic\"; then
- echo=\"$qecho\"
- file=\"\$0\"
- # Make sure echo works.
- if test \"X\$1\" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
- elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
- # Yippee, \$echo works!
- :
- else
- # Restart under the correct shell, and then maybe \$echo will work.
- exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
- fi
- fi\
-"
- $echo >> $output "\
-
- # Find the directory that this script lives in.
- thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
- test \"x\$thisdir\" = \"x\$file\" && thisdir=.
-
- # Follow symbolic links until we get to the real thisdir.
- file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
- while test -n \"\$file\"; do
- destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
-
- # If there was a directory component, then change thisdir.
- if test \"x\$destdir\" != \"x\$file\"; then
- case \"\$destdir\" in
- [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
- *) thisdir=\"\$thisdir/\$destdir\" ;;
- esac
- fi
-
- file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
- file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
- done
-
- # Try to get the absolute directory name.
- absdir=\`cd \"\$thisdir\" && pwd\`
- test -n \"\$absdir\" && thisdir=\"\$absdir\"
-"
-
- if test "$fast_install" = yes; then
- $echo >> $output "\
- program=lt-'$outputname'$exeext
- progdir=\"\$thisdir/$objdir\"
-
- if test ! -f \"\$progdir/\$program\" || \\
- { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
- test \"X\$file\" != \"X\$progdir/\$program\"; }; then
-
- file=\"\$\$-\$program\"
-
- if test ! -d \"\$progdir\"; then
- $mkdir \"\$progdir\"
- else
- $rm \"\$progdir/\$file\"
- fi"
-
- $echo >> $output "\
-
- # relink executable if necessary
- if test -n \"\$relink_command\"; then
- if relink_command_output=\`eval \$relink_command 2>&1\`; then :
- else
- $echo \"\$relink_command_output\" >&2
- $rm \"\$progdir/\$file\"
- exit $EXIT_FAILURE
- fi
- fi
-
- $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
- { $rm \"\$progdir/\$program\";
- $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
- $rm \"\$progdir/\$file\"
- fi"
- else
- $echo >> $output "\
- program='$outputname'
- progdir=\"\$thisdir/$objdir\"
-"
- fi
-
- $echo >> $output "\
-
- if test -f \"\$progdir/\$program\"; then"
-
- # Export our shlibpath_var if we have one.
- if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
- $echo >> $output "\
- # Add our own library path to $shlibpath_var
- $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
-
- # Some systems cannot cope with colon-terminated $shlibpath_var
- # The second colon is a workaround for a bug in BeOS R4 sed
- $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
-
- export $shlibpath_var
-"
- fi
-
- # fixup the dll searchpath if we need to.
- if test -n "$dllsearchpath"; then
- $echo >> $output "\
- # Add the dll search path components to the executable PATH
- PATH=$dllsearchpath:\$PATH
-"
- fi
-
- $echo >> $output "\
- if test \"\$libtool_execute_magic\" != \"$magic\"; then
- # Run the actual program with our arguments.
-"
- case $host in
- # Backslashes separate directories on plain windows
- *-*-mingw | *-*-os2*)
- $echo >> $output "\
- exec \$progdir\\\\\$program \${1+\"\$@\"}
-"
- ;;
-
- *)
- $echo >> $output "\
- exec \$progdir/\$program \${1+\"\$@\"}
-"
- ;;
- esac
- $echo >> $output "\
- \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
- exit $EXIT_FAILURE
- fi
- else
- # The program doesn't exist.
- \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
- \$echo \"This script is just a wrapper for \$program.\" 1>&2
- $echo \"See the $PACKAGE documentation for more information.\" 1>&2
- exit $EXIT_FAILURE
- fi
-fi\
-"
- chmod +x $output
- fi
- exit $EXIT_SUCCESS
- ;;
- esac
-
- # See if we need to build an old-fashioned archive.
- for oldlib in $oldlibs; do
-
- if test "$build_libtool_libs" = convenience; then
- oldobjs="$libobjs_save"
- addlibs="$convenience"
- build_libtool_libs=no
- else
- if test "$build_libtool_libs" = module; then
- oldobjs="$libobjs_save"
- build_libtool_libs=no
- else
- oldobjs="$old_deplibs $non_pic_objects"
- fi
- addlibs="$old_convenience"
- fi
-
- if test -n "$addlibs"; then
- gentop="$output_objdir/${outputname}x"
- generated="$generated $gentop"
-
- func_extract_archives $gentop $addlibs
- oldobjs="$oldobjs $func_extract_archives_result"
- fi
-
- # Do each command in the archive commands.
- if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
- cmds=$old_archive_from_new_cmds
- else
- # POSIX demands no paths to be encoded in archives. We have
- # to avoid creating archives with duplicate basenames if we
- # might have to extract them afterwards, e.g., when creating a
- # static archive out of a convenience library, or when linking
- # the entirety of a libtool archive into another (currently
- # not supported by libtool).
- if (for obj in $oldobjs
- do
- $echo "X$obj" | $Xsed -e 's%^.*/%%'
- done | sort | sort -uc >/dev/null 2>&1); then
- :
- else
- $echo "copying selected object files to avoid basename conflicts..."
-
- if test -z "$gentop"; then
- gentop="$output_objdir/${outputname}x"
- generated="$generated $gentop"
-
- $show "${rm}r $gentop"
- $run ${rm}r "$gentop"
- $show "$mkdir $gentop"
- $run $mkdir "$gentop"
- status=$?
- if test "$status" -ne 0 && test ! -d "$gentop"; then
- exit $status
- fi
- fi
-
- save_oldobjs=$oldobjs
- oldobjs=
- counter=1
- for obj in $save_oldobjs
- do
- objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
- case " $oldobjs " in
- " ") oldobjs=$obj ;;
- *[\ /]"$objbase "*)
- while :; do
- # Make sure we don't pick an alternate name that also
- # overlaps.
- newobj=lt$counter-$objbase
- counter=`expr $counter + 1`
- case " $oldobjs " in
- *[\ /]"$newobj "*) ;;
- *) if test ! -f "$gentop/$newobj"; then break; fi ;;
- esac
- done
- $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
- $run ln "$obj" "$gentop/$newobj" ||
- $run cp "$obj" "$gentop/$newobj"
- oldobjs="$oldobjs $gentop/$newobj"
- ;;
- *) oldobjs="$oldobjs $obj" ;;
- esac
- done
- fi
-
- eval cmds=\"$old_archive_cmds\"
-
- if len=`expr "X$cmds" : ".*"` &&
- test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
- cmds=$old_archive_cmds
- else
- # the command line is too long to link in one step, link in parts
- $echo "using piecewise archive linking..."
- save_RANLIB=$RANLIB
- RANLIB=:
- objlist=
- concat_cmds=
- save_oldobjs=$oldobjs
-
- # Is there a better way of finding the last object in the list?
- for obj in $save_oldobjs
- do
- last_oldobj=$obj
- done
- for obj in $save_oldobjs
- do
- oldobjs="$objlist $obj"
- objlist="$objlist $obj"
- eval test_cmds=\"$old_archive_cmds\"
- if len=`expr "X$test_cmds" : ".*"` &&
- test "$len" -le "$max_cmd_len"; then
- :
- else
- # the above command should be used before it gets too long
- oldobjs=$objlist
- if test "$obj" = "$last_oldobj" ; then
- RANLIB=$save_RANLIB
- fi
- test -z "$concat_cmds" || concat_cmds=$concat_cmds~
- eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
- objlist=
- fi
- done
- RANLIB=$save_RANLIB
- oldobjs=$objlist
- if test "X$oldobjs" = "X" ; then
- eval cmds=\"\$concat_cmds\"
- else
- eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
- fi
- fi
- fi
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- eval cmd=\"$cmd\"
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- done
-
- if test -n "$generated"; then
- $show "${rm}r$generated"
- $run ${rm}r$generated
- fi
-
- # Now create the libtool archive.
- case $output in
- *.la)
- old_library=
- test "$build_old_libs" = yes && old_library="$libname.$libext"
- $show "creating $output"
-
- # Preserve any variables that may affect compiler behavior
- for var in $variables_saved_for_relink; do
- if eval test -z \"\${$var+set}\"; then
- relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
- elif eval var_value=\$$var; test -z "$var_value"; then
- relink_command="$var=; export $var; $relink_command"
- else
- var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
- relink_command="$var=\"$var_value\"; export $var; $relink_command"
- fi
- done
- # Quote the link command for shipping.
- relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
- relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
- if test "$hardcode_automatic" = yes ; then
- relink_command=
- fi
-
-
- # Only create the output if not a dry run.
- if test -z "$run"; then
- for installed in no yes; do
- if test "$installed" = yes; then
- if test -z "$install_libdir"; then
- break
- fi
- output="$output_objdir/$outputname"i
- # Replace all uninstalled libtool libraries with the installed ones
- newdependency_libs=
- for deplib in $dependency_libs; do
- case $deplib in
- *.la)
- name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
- eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
- if test -z "$libdir"; then
- $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
- exit $EXIT_FAILURE
- fi
- newdependency_libs="$newdependency_libs $libdir/$name"
- ;;
- *) newdependency_libs="$newdependency_libs $deplib" ;;
- esac
- done
- dependency_libs="$newdependency_libs"
- newdlfiles=
- for lib in $dlfiles; do
- name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
- eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
- if test -z "$libdir"; then
- $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- exit $EXIT_FAILURE
- fi
- newdlfiles="$newdlfiles $libdir/$name"
- done
- dlfiles="$newdlfiles"
- newdlprefiles=
- for lib in $dlprefiles; do
- name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
- eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
- if test -z "$libdir"; then
- $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- exit $EXIT_FAILURE
- fi
- newdlprefiles="$newdlprefiles $libdir/$name"
- done
- dlprefiles="$newdlprefiles"
- else
- newdlfiles=
- for lib in $dlfiles; do
- case $lib in
- [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
- *) abs=`pwd`"/$lib" ;;
- esac
- newdlfiles="$newdlfiles $abs"
- done
- dlfiles="$newdlfiles"
- newdlprefiles=
- for lib in $dlprefiles; do
- case $lib in
- [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
- *) abs=`pwd`"/$lib" ;;
- esac
- newdlprefiles="$newdlprefiles $abs"
- done
- dlprefiles="$newdlprefiles"
- fi
- $rm $output
- # place dlname in correct position for cygwin
- tdlname=$dlname
- case $host,$output,$installed,$module,$dlname in
- *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
- esac
- $echo > $output "\
-# $outputname - a libtool library file
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# The name that we can dlopen(3).
-dlname='$tdlname'
-
-# Names of this library.
-library_names='$library_names'
-
-# The name of the static archive.
-old_library='$old_library'
-
-# Libraries that this one depends upon.
-dependency_libs='$dependency_libs'
-
-# Version information for $libname.
-current=$current
-age=$age
-revision=$revision
-
-# Is this an already installed library?
-installed=$installed
-
-# Should we warn about portability when linking against -modules?
-shouldnotlink=$module
-
-# Files to dlopen/dlpreopen
-dlopen='$dlfiles'
-dlpreopen='$dlprefiles'
-
-# Directory that this library needs to be installed in:
-libdir='$install_libdir'"
- if test "$installed" = no && test "$need_relink" = yes; then
- $echo >> $output "\
-relink_command=\"$relink_command\""
- fi
- done
- fi
-
- # Do a symbolic link so that the libtool archive can be found in
- # LD_LIBRARY_PATH before the program is installed.
- $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
- $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
- ;;
- esac
- exit $EXIT_SUCCESS
- ;;
-
- # libtool install mode
- install)
- modename="$modename: install"
-
- # There may be an optional sh(1) argument at the beginning of
- # install_prog (especially on Windows NT).
- if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
- # Allow the use of GNU shtool's install command.
- $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
- # Aesthetically quote it.
- arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
- arg="\"$arg\""
- ;;
- esac
- install_prog="$arg "
- arg="$1"
- shift
- else
- install_prog=
- arg="$nonopt"
- fi
-
- # The real first argument should be the name of the installation program.
- # Aesthetically quote it.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
- arg="\"$arg\""
- ;;
- esac
- install_prog="$install_prog$arg"
-
- # We need to accept at least all the BSD install flags.
- dest=
- files=
- opts=
- prev=
- install_type=
- isdir=no
- stripme=
- for arg
- do
- if test -n "$dest"; then
- files="$files $dest"
- dest="$arg"
- continue
- fi
-
- case $arg in
- -d) isdir=yes ;;
- -f) prev="-f" ;;
- -g) prev="-g" ;;
- -m) prev="-m" ;;
- -o) prev="-o" ;;
- -s)
- stripme=" -s"
- continue
- ;;
- -*) ;;
-
- *)
- # If the previous option needed an argument, then skip it.
- if test -n "$prev"; then
- prev=
- else
- dest="$arg"
- continue
- fi
- ;;
- esac
-
- # Aesthetically quote the argument.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
- arg="\"$arg\""
- ;;
- esac
- install_prog="$install_prog $arg"
- done
-
- if test -z "$install_prog"; then
- $echo "$modename: you must specify an install program" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- if test -n "$prev"; then
- $echo "$modename: the \`$prev' option requires an argument" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- if test -z "$files"; then
- if test -z "$dest"; then
- $echo "$modename: no file or destination specified" 1>&2
- else
- $echo "$modename: you must specify a destination" 1>&2
- fi
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- # Strip any trailing slash from the destination.
- dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
-
- # Check to see that the destination is a directory.
- test -d "$dest" && isdir=yes
- if test "$isdir" = yes; then
- destdir="$dest"
- destname=
- else
- destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
- test "X$destdir" = "X$dest" && destdir=.
- destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
-
- # Not a directory, so check to see that there is only one file specified.
- set dummy $files
- if test "$#" -gt 2; then
- $echo "$modename: \`$dest' is not a directory" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
- fi
- case $destdir in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- for file in $files; do
- case $file in
- *.lo) ;;
- *)
- $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
- done
- ;;
- esac
-
- # This variable tells wrapper scripts just to set variables rather
- # than running their programs.
- libtool_install_magic="$magic"
-
- staticlibs=
- future_libdirs=
- current_libdirs=
- for file in $files; do
-
- # Do each installation.
- case $file in
- *.$libext)
- # Do the static libraries later.
- staticlibs="$staticlibs $file"
- ;;
-
- *.la)
- # Check to see that this really is a libtool archive.
- if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- else
- $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- library_names=
- old_library=
- relink_command=
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Add the libdir to current_libdirs if it is the destination.
- if test "X$destdir" = "X$libdir"; then
- case "$current_libdirs " in
- *" $libdir "*) ;;
- *) current_libdirs="$current_libdirs $libdir" ;;
- esac
- else
- # Note the libdir as a future libdir.
- case "$future_libdirs " in
- *" $libdir "*) ;;
- *) future_libdirs="$future_libdirs $libdir" ;;
- esac
- fi
-
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
- test "X$dir" = "X$file/" && dir=
- dir="$dir$objdir"
-
- if test -n "$relink_command"; then
- # Determine the prefix the user has applied to our future dir.
- inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"`
-
- # Don't allow the user to place us outside of our expected
- # location b/c this prevents finding dependent libraries that
- # are installed to the same prefix.
- # At present, this check doesn't affect windows .dll's that
- # are installed into $libdir/../bin (currently, that works fine)
- # but it's something to keep an eye on.
- if test "$inst_prefix_dir" = "$destdir"; then
- $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
- exit $EXIT_FAILURE
- fi
-
- if test -n "$inst_prefix_dir"; then
- # Stick the inst_prefix_dir data into the link command.
- relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
- else
- relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
- fi
-
- $echo "$modename: warning: relinking \`$file'" 1>&2
- $show "$relink_command"
- if $run eval "$relink_command"; then :
- else
- $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
- exit $EXIT_FAILURE
- fi
- fi
-
- # See the names of the shared library.
- set dummy $library_names
- if test -n "$2"; then
- realname="$2"
- shift
- shift
-
- srcname="$realname"
- test -n "$relink_command" && srcname="$realname"T
-
- # Install the shared library and build the symlinks.
- $show "$install_prog $dir/$srcname $destdir/$realname"
- $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
- if test -n "$stripme" && test -n "$striplib"; then
- $show "$striplib $destdir/$realname"
- $run eval "$striplib $destdir/$realname" || exit $?
- fi
-
- if test "$#" -gt 0; then
- # Delete the old symlinks, and create new ones.
- for linkname
- do
- if test "$linkname" != "$realname"; then
- $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
- $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
- fi
- done
- fi
-
- # Do each command in the postinstall commands.
- lib="$destdir/$realname"
- cmds=$postinstall_cmds
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- fi
-
- # Install the pseudo-library for information purposes.
- name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- instname="$dir/$name"i
- $show "$install_prog $instname $destdir/$name"
- $run eval "$install_prog $instname $destdir/$name" || exit $?
-
- # Maybe install the static library, too.
- test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
- ;;
-
- *.lo)
- # Install (i.e. copy) a libtool object.
-
- # Figure out destination file name, if it wasn't already specified.
- if test -n "$destname"; then
- destfile="$destdir/$destname"
- else
- destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- destfile="$destdir/$destfile"
- fi
-
- # Deduce the name of the destination old-style object file.
- case $destfile in
- *.lo)
- staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
- ;;
- *.$objext)
- staticdest="$destfile"
- destfile=
- ;;
- *)
- $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
-
- # Install the libtool object if requested.
- if test -n "$destfile"; then
- $show "$install_prog $file $destfile"
- $run eval "$install_prog $file $destfile" || exit $?
- fi
-
- # Install the old object if enabled.
- if test "$build_old_libs" = yes; then
- # Deduce the name of the old-style object file.
- staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
-
- $show "$install_prog $staticobj $staticdest"
- $run eval "$install_prog \$staticobj \$staticdest" || exit $?
- fi
- exit $EXIT_SUCCESS
- ;;
-
- *)
- # Figure out destination file name, if it wasn't already specified.
- if test -n "$destname"; then
- destfile="$destdir/$destname"
- else
- destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- destfile="$destdir/$destfile"
- fi
-
- # If the file is missing, and there is a .exe on the end, strip it
- # because it is most likely a libtool script we actually want to
- # install
- stripped_ext=""
- case $file in
- *.exe)
- if test ! -f "$file"; then
- file=`$echo $file|${SED} 's,.exe$,,'`
- stripped_ext=".exe"
- fi
- ;;
- esac
-
- # Do a test to see if this is really a libtool program.
- case $host in
- *cygwin*|*mingw*)
- wrapper=`$echo $file | ${SED} -e 's,.exe$,,'`
- ;;
- *)
- wrapper=$file
- ;;
- esac
- if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then
- notinst_deplibs=
- relink_command=
-
- # To insure that "foo" is sourced, and not "foo.exe",
- # finese the cygwin/MSYS system by explicitly sourcing "foo."
- # which disallows the automatic-append-.exe behavior.
- case $build in
- *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
- *) wrapperdot=${wrapper} ;;
- esac
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . ${wrapperdot} ;;
- *) . ./${wrapperdot} ;;
- esac
-
- # Check the variables that should have been set.
- if test -z "$notinst_deplibs"; then
- $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2
- exit $EXIT_FAILURE
- fi
-
- finalize=yes
- for lib in $notinst_deplibs; do
- # Check to see that each library is installed.
- libdir=
- if test -f "$lib"; then
- # If there is no directory component, then add one.
- case $lib in
- */* | *\\*) . $lib ;;
- *) . ./$lib ;;
- esac
- fi
- libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
- if test -n "$libdir" && test ! -f "$libfile"; then
- $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
- finalize=no
- fi
- done
-
- relink_command=
- # To insure that "foo" is sourced, and not "foo.exe",
- # finese the cygwin/MSYS system by explicitly sourcing "foo."
- # which disallows the automatic-append-.exe behavior.
- case $build in
- *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
- *) wrapperdot=${wrapper} ;;
- esac
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . ${wrapperdot} ;;
- *) . ./${wrapperdot} ;;
- esac
-
- outputname=
- if test "$fast_install" = no && test -n "$relink_command"; then
- if test "$finalize" = yes && test -z "$run"; then
- tmpdir="/tmp"
- test -n "$TMPDIR" && tmpdir="$TMPDIR"
- tmpdir="$tmpdir/libtool-$$"
- save_umask=`umask`
- umask 0077
- if $mkdir "$tmpdir"; then
- umask $save_umask
- else
- umask $save_umask
- $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
- continue
- fi
- file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'`
- outputname="$tmpdir/$file"
- # Replace the output file specification.
- relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
-
- $show "$relink_command"
- if $run eval "$relink_command"; then :
- else
- $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
- ${rm}r "$tmpdir"
- continue
- fi
- file="$outputname"
- else
- $echo "$modename: warning: cannot relink \`$file'" 1>&2
- fi
- else
- # Install the binary that we compiled earlier.
- file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
- fi
- fi
-
- # remove .exe since cygwin /usr/bin/install will append another
- # one anyways
- case $install_prog,$host in
- */usr/bin/install*,*cygwin*)
- case $file:$destfile in
- *.exe:*.exe)
- # this is ok
- ;;
- *.exe:*)
- destfile=$destfile.exe
- ;;
- *:*.exe)
- destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'`
- ;;
- esac
- ;;
- esac
- $show "$install_prog$stripme $file $destfile"
- $run eval "$install_prog\$stripme \$file \$destfile" || exit $?
- test -n "$outputname" && ${rm}r "$tmpdir"
- ;;
- esac
- done
-
- for file in $staticlibs; do
- name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-
- # Set up the ranlib parameters.
- oldlib="$destdir/$name"
-
- $show "$install_prog $file $oldlib"
- $run eval "$install_prog \$file \$oldlib" || exit $?
-
- if test -n "$stripme" && test -n "$old_striplib"; then
- $show "$old_striplib $oldlib"
- $run eval "$old_striplib $oldlib" || exit $?
- fi
-
- # Do each command in the postinstall commands.
- cmds=$old_postinstall_cmds
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- done
-
- if test -n "$future_libdirs"; then
- $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
- fi
-
- if test -n "$current_libdirs"; then
- # Maybe just do a dry run.
- test -n "$run" && current_libdirs=" -n$current_libdirs"
- exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
- else
- exit $EXIT_SUCCESS
- fi
- ;;
-
- # libtool finish mode
- finish)
- modename="$modename: finish"
- libdirs="$nonopt"
- admincmds=
-
- if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
- for dir
- do
- libdirs="$libdirs $dir"
- done
-
- for libdir in $libdirs; do
- if test -n "$finish_cmds"; then
- # Do each command in the finish commands.
- cmds=$finish_cmds
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd" || admincmds="$admincmds
- $cmd"
- done
- IFS="$save_ifs"
- fi
- if test -n "$finish_eval"; then
- # Do the single finish_eval.
- eval cmds=\"$finish_eval\"
- $run eval "$cmds" || admincmds="$admincmds
- $cmds"
- fi
- done
- fi
-
- # Exit here if they wanted silent mode.
- test "$show" = : && exit $EXIT_SUCCESS
-
- $echo "----------------------------------------------------------------------"
- $echo "Libraries have been installed in:"
- for libdir in $libdirs; do
- $echo " $libdir"
- done
- $echo
- $echo "If you ever happen to want to link against installed libraries"
- $echo "in a given directory, LIBDIR, you must either use libtool, and"
- $echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
- $echo "flag during linking and do at least one of the following:"
- if test -n "$shlibpath_var"; then
- $echo " - add LIBDIR to the \`$shlibpath_var' environment variable"
- $echo " during execution"
- fi
- if test -n "$runpath_var"; then
- $echo " - add LIBDIR to the \`$runpath_var' environment variable"
- $echo " during linking"
- fi
- if test -n "$hardcode_libdir_flag_spec"; then
- libdir=LIBDIR
- eval flag=\"$hardcode_libdir_flag_spec\"
-
- $echo " - use the \`$flag' linker flag"
- fi
- if test -n "$admincmds"; then
- $echo " - have your system administrator run these commands:$admincmds"
- fi
- if test -f /etc/ld.so.conf; then
- $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
- fi
- $echo
- $echo "See any operating system documentation about shared libraries for"
- $echo "more information, such as the ld(1) and ld.so(8) manual pages."
- $echo "----------------------------------------------------------------------"
- exit $EXIT_SUCCESS
- ;;
-
- # libtool execute mode
- execute)
- modename="$modename: execute"
-
- # The first argument is the command name.
- cmd="$nonopt"
- if test -z "$cmd"; then
- $echo "$modename: you must specify a COMMAND" 1>&2
- $echo "$help"
- exit $EXIT_FAILURE
- fi
-
- # Handle -dlopen flags immediately.
- for file in $execute_dlfiles; do
- if test ! -f "$file"; then
- $echo "$modename: \`$file' is not a file" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- dir=
- case $file in
- *.la)
- # Check to see that this really is a libtool archive.
- if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- else
- $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- # Read the libtool library.
- dlname=
- library_names=
-
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Skip this library if it cannot be dlopened.
- if test -z "$dlname"; then
- # Warn if it was a shared library.
- test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
- continue
- fi
-
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- test "X$dir" = "X$file" && dir=.
-
- if test -f "$dir/$objdir/$dlname"; then
- dir="$dir/$objdir"
- else
- $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
- exit $EXIT_FAILURE
- fi
- ;;
-
- *.lo)
- # Just add the directory containing the .lo file.
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- test "X$dir" = "X$file" && dir=.
- ;;
-
- *)
- $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
- continue
- ;;
- esac
-
- # Get the absolute pathname.
- absdir=`cd "$dir" && pwd`
- test -n "$absdir" && dir="$absdir"
-
- # Now add the directory to shlibpath_var.
- if eval "test -z \"\$$shlibpath_var\""; then
- eval "$shlibpath_var=\"\$dir\""
- else
- eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
- fi
- done
-
- # This variable tells wrapper scripts just to set shlibpath_var
- # rather than running their programs.
- libtool_execute_magic="$magic"
-
- # Check if any of the arguments is a wrapper script.
- args=
- for file
- do
- case $file in
- -*) ;;
- *)
- # Do a test to see if this is really a libtool program.
- if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Transform arg to wrapped name.
- file="$progdir/$program"
- fi
- ;;
- esac
- # Quote arguments (to preserve shell metacharacters).
- file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
- args="$args \"$file\""
- done
-
- if test -z "$run"; then
- if test -n "$shlibpath_var"; then
- # Export the shlibpath_var.
- eval "export $shlibpath_var"
- fi
-
- # Restore saved environment variables
- if test "${save_LC_ALL+set}" = set; then
- LC_ALL="$save_LC_ALL"; export LC_ALL
- fi
- if test "${save_LANG+set}" = set; then
- LANG="$save_LANG"; export LANG
- fi
-
- # Now prepare to actually exec the command.
- exec_cmd="\$cmd$args"
- else
- # Display what would be done.
- if test -n "$shlibpath_var"; then
- eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
- $echo "export $shlibpath_var"
- fi
- $echo "$cmd$args"
- exit $EXIT_SUCCESS
- fi
- ;;
-
- # libtool clean and uninstall mode
- clean | uninstall)
- modename="$modename: $mode"
- rm="$nonopt"
- files=
- rmforce=
- exit_status=0
-
- # This variable tells wrapper scripts just to set variables rather
- # than running their programs.
- libtool_install_magic="$magic"
-
- for arg
- do
- case $arg in
- -f) rm="$rm $arg"; rmforce=yes ;;
- -*) rm="$rm $arg" ;;
- *) files="$files $arg" ;;
- esac
- done
-
- if test -z "$rm"; then
- $echo "$modename: you must specify an RM program" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- rmdirs=
-
- origobjdir="$objdir"
- for file in $files; do
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$dir" = "X$file"; then
- dir=.
- objdir="$origobjdir"
- else
- objdir="$dir/$origobjdir"
- fi
- name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- test "$mode" = uninstall && objdir="$dir"
-
- # Remember objdir for removal later, being careful to avoid duplicates
- if test "$mode" = clean; then
- case " $rmdirs " in
- *" $objdir "*) ;;
- *) rmdirs="$rmdirs $objdir" ;;
- esac
- fi
-
- # Don't error if the file doesn't exist and rm -f was used.
- if (test -L "$file") >/dev/null 2>&1 \
- || (test -h "$file") >/dev/null 2>&1 \
- || test -f "$file"; then
- :
- elif test -d "$file"; then
- exit_status=1
- continue
- elif test "$rmforce" = yes; then
- continue
- fi
-
- rmfiles="$file"
-
- case $name in
- *.la)
- # Possibly a libtool archive, so verify it.
- if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- . $dir/$name
-
- # Delete the libtool libraries and symlinks.
- for n in $library_names; do
- rmfiles="$rmfiles $objdir/$n"
- done
- test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
- test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
-
- if test "$mode" = uninstall; then
- if test -n "$library_names"; then
- # Do each command in the postuninstall commands.
- cmds=$postuninstall_cmds
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd"
- if test "$?" -ne 0 && test "$rmforce" != yes; then
- exit_status=1
- fi
- done
- IFS="$save_ifs"
- fi
-
- if test -n "$old_library"; then
- # Do each command in the old_postuninstall commands.
- cmds=$old_postuninstall_cmds
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd"
- if test "$?" -ne 0 && test "$rmforce" != yes; then
- exit_status=1
- fi
- done
- IFS="$save_ifs"
- fi
- # FIXME: should reinstall the best remaining shared library.
- fi
- fi
- ;;
-
- *.lo)
- # Possibly a libtool object, so verify it.
- if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-
- # Read the .lo file
- . $dir/$name
-
- # Add PIC object to the list of files to remove.
- if test -n "$pic_object" \
- && test "$pic_object" != none; then
- rmfiles="$rmfiles $dir/$pic_object"
- fi
-
- # Add non-PIC object to the list of files to remove.
- if test -n "$non_pic_object" \
- && test "$non_pic_object" != none; then
- rmfiles="$rmfiles $dir/$non_pic_object"
- fi
- fi
- ;;
-
- *)
- if test "$mode" = clean ; then
- noexename=$name
- case $file in
- *.exe)
- file=`$echo $file|${SED} 's,.exe$,,'`
- noexename=`$echo $name|${SED} 's,.exe$,,'`
- # $file with .exe has already been added to rmfiles,
- # add $file without .exe
- rmfiles="$rmfiles $file"
- ;;
- esac
- # Do a test to see if this is a libtool program.
- if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- relink_command=
- . $dir/$noexename
-
- # note $name still contains .exe if it was in $file originally
- # as does the version of $file that was added into $rmfiles
- rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
- if test "$fast_install" = yes && test -n "$relink_command"; then
- rmfiles="$rmfiles $objdir/lt-$name"
- fi
- if test "X$noexename" != "X$name" ; then
- rmfiles="$rmfiles $objdir/lt-${noexename}.c"
- fi
- fi
- fi
- ;;
- esac
- $show "$rm $rmfiles"
- $run $rm $rmfiles || exit_status=1
- done
- objdir="$origobjdir"
-
- # Try to remove the ${objdir}s in the directories where we deleted files
- for dir in $rmdirs; do
- if test -d "$dir"; then
- $show "rmdir $dir"
- $run rmdir $dir >/dev/null 2>&1
- fi
- done
-
- exit $exit_status
- ;;
-
- "")
- $echo "$modename: you must specify a MODE" 1>&2
- $echo "$generic_help" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
-
- if test -z "$exec_cmd"; then
- $echo "$modename: invalid operation mode \`$mode'" 1>&2
- $echo "$generic_help" 1>&2
- exit $EXIT_FAILURE
- fi
-fi # test -z "$show_help"
-
-if test -n "$exec_cmd"; then
- eval exec $exec_cmd
- exit $EXIT_FAILURE
-fi
-
-# We need to display help for each of the modes.
-case $mode in
-"") $echo \
-"Usage: $modename [OPTION]... [MODE-ARG]...
-
-Provide generalized library-building support services.
-
- --config show all configuration variables
- --debug enable verbose shell tracing
--n, --dry-run display commands without modifying any files
- --features display basic configuration information and exit
- --finish same as \`--mode=finish'
- --help display this help message and exit
- --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS]
- --quiet same as \`--silent'
- --silent don't print informational messages
- --tag=TAG use configuration variables from tag TAG
- --version print version information
-
-MODE must be one of the following:
-
- clean remove files from the build directory
- compile compile a source file into a libtool object
- execute automatically set library path, then run a program
- finish complete the installation of libtool libraries
- install install libraries or executables
- link create a library or an executable
- uninstall remove libraries from an installed directory
-
-MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for
-a more detailed description of MODE.
-
-Report bugs to <bug-libtool at gnu.org>."
- exit $EXIT_SUCCESS
- ;;
-
-clean)
- $echo \
-"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
-
-Remove files from the build directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
-to RM.
-
-If FILE is a libtool library, object or program, all the files associated
-with it are deleted. Otherwise, only FILE itself is deleted using RM."
- ;;
-
-compile)
- $echo \
-"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
-
-Compile a source file into a libtool library object.
-
-This mode accepts the following additional options:
-
- -o OUTPUT-FILE set the output file name to OUTPUT-FILE
- -prefer-pic try to building PIC objects only
- -prefer-non-pic try to building non-PIC objects only
- -static always build a \`.o' file suitable for static linking
-
-COMPILE-COMMAND is a command to be used in creating a \`standard' object file
-from the given SOURCEFILE.
-
-The output file name is determined by removing the directory component from
-SOURCEFILE, then substituting the C source code suffix \`.c' with the
-library object suffix, \`.lo'."
- ;;
-
-execute)
- $echo \
-"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
-
-Automatically set library path, then run a program.
-
-This mode accepts the following additional options:
-
- -dlopen FILE add the directory containing FILE to the library path
-
-This mode sets the library path environment variable according to \`-dlopen'
-flags.
-
-If any of the ARGS are libtool executable wrappers, then they are translated
-into their corresponding uninstalled binary, and any of their required library
-directories are added to the library path.
-
-Then, COMMAND is executed, with ARGS as arguments."
- ;;
-
-finish)
- $echo \
-"Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
-
-Complete the installation of libtool libraries.
-
-Each LIBDIR is a directory that contains libtool libraries.
-
-The commands that this mode executes may require superuser privileges. Use
-the \`--dry-run' option if you just want to see what would be executed."
- ;;
-
-install)
- $echo \
-"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
-
-Install executables or libraries.
-
-INSTALL-COMMAND is the installation command. The first component should be
-either the \`install' or \`cp' program.
-
-The rest of the components are interpreted as arguments to that command (only
-BSD-compatible install options are recognized)."
- ;;
-
-link)
- $echo \
-"Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
-
-Link object files or libraries together to form another library, or to
-create an executable program.
-
-LINK-COMMAND is a command using the C compiler that you would use to create
-a program from several object files.
-
-The following components of LINK-COMMAND are treated specially:
-
- -all-static do not do any dynamic linking at all
- -avoid-version do not add a version suffix if possible
- -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime
- -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
- -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
- -export-symbols SYMFILE
- try to export only the symbols listed in SYMFILE
- -export-symbols-regex REGEX
- try to export only the symbols matching REGEX
- -LLIBDIR search LIBDIR for required installed libraries
- -lNAME OUTPUT-FILE requires the installed library libNAME
- -module build a library that can dlopened
- -no-fast-install disable the fast-install mode
- -no-install link a not-installable executable
- -no-undefined declare that a library does not refer to external symbols
- -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
- -objectlist FILE Use a list of object files found in FILE to specify objects
- -precious-files-regex REGEX
- don't remove output files matching REGEX
- -release RELEASE specify package release information
- -rpath LIBDIR the created library will eventually be installed in LIBDIR
- -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
- -static do not do any dynamic linking of libtool libraries
- -version-info CURRENT[:REVISION[:AGE]]
- specify library version info [each variable defaults to 0]
-
-All other options (arguments beginning with \`-') are ignored.
-
-Every other argument is treated as a filename. Files ending in \`.la' are
-treated as uninstalled libtool libraries, other files are standard or library
-object files.
-
-If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
-only library objects (\`.lo' files) may be specified, and \`-rpath' is
-required, except when creating a convenience library.
-
-If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
-using \`ar' and \`ranlib', or on Windows using \`lib'.
-
-If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
-is created, otherwise an executable program is created."
- ;;
-
-uninstall)
- $echo \
-"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
-
-Remove libraries from an installation directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
-to RM.
-
-If FILE is a libtool library, all the files associated with it are deleted.
-Otherwise, only FILE itself is deleted using RM."
- ;;
-
-*)
- $echo "$modename: invalid operation mode \`$mode'" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- ;;
-esac
-
-$echo
-$echo "Try \`$modename --help' for more information about other modes."
-
-exit $?
-
-# The TAGs below are defined such that we never get into a situation
-# in which we disable both kinds of libraries. Given conflicting
-# choices, we go for a static library, that is the most portable,
-# since we can't tell whether shared libraries were disabled because
-# the user asked for that or because the platform doesn't support
-# them. This is particularly important on AIX, because we don't
-# support having both static and shared libraries enabled at the same
-# time on that platform, so we default to a shared-only configuration.
-# If a disable-shared tag is given, we'll fallback to a static-only
-# configuration. But we'll never go from static-only to shared-only.
-
-# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
-build_libtool_libs=no
-build_old_libs=yes
-# ### END LIBTOOL TAG CONFIG: disable-shared
-
-# ### BEGIN LIBTOOL TAG CONFIG: disable-static
-build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac`
-# ### END LIBTOOL TAG CONFIG: disable-static
-
-# Local Variables:
-# mode:shell-script
-# sh-indentation:2
-# End:
diff --git a/ast-5.3-1/lutmap.c b/ast-5.3-1/lutmap.c
deleted file mode 100644
index 328563f..0000000
--- a/ast-5.3-1/lutmap.c
+++ /dev/null
@@ -1,2190 +0,0 @@
-/*
-*class++
-* Name:
-* LutMap
-
-* Purpose:
-* Transform 1-dimensional coordinates using a lookup table.
-
-* Constructor Function:
-c astLutMap
-f AST_LUTMAP
-
-* Description:
-* A LutMap is a specialised form of Mapping which transforms
-* 1-dimensional coordinates by using linear interpolation in a
-* lookup table.
-*
-* Each input coordinate value is first scaled to give the index of
-* an entry in the table by subtracting a starting value (the input
-* coordinate corresponding to the first table entry) and dividing
-* by an increment (the difference in input coordinate value
-* between adjacent table entries).
-*
-* The resulting index will usually contain a fractional part, so
-* the output coordinate value is then generated by interpolating
-* linearly between the appropriate entries in the table. If the
-* index lies outside the range of the table, linear extrapolation
-* is used based on the two nearest entries (i.e. the two entries
-* at the start or end of the table, as appropriate). If either of the
-* entries used for the interplation has a value of AST__BAD, then the
-* interpolated value is returned as AST__BAD.
-*
-* If the lookup table entries increase or decrease monotonically (and
-* if the table contains no AST__BAD values), then the inverse
-* transformation may also be performed.
-
-* Inheritance:
-* The LutMap class inherits from the Mapping class.
-
-* Attributes:
-* In addition to those attributes common to all Mappings, every
-* LutMap also has the following attributes:
-*
-* - LutInterp: The interpolation method to use between table entries.
-
-* Functions:
-c The LutMap class does not define any new functions beyond those
-f The LutMap class does not define any new routines beyond those
-* which are applicable to all Mappings.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2007 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: David S. Berry (JAC, UCLan)
-
-* History:
-* 8-JUL-1997 (RFWS):
-* Original version.
-* 10-JUL-1997 (RFWS):
-* Added the MapMerge function.
-* 8-JAN-2003 (DSB):
-* Changed private InitVtab method to protected astInitLutMapVtab
-* method.
-* 12-JAN-2004 (DSB):
-* Check for AST__BAD values in the supplied lut array.
-* 17-MAR-2006 (DSB):
-* - MapMerge changed so that a LutMap will cancel with its own
-* inverse.
-* - Added attribute LutInterp
-* 10-MAY-2006 (DSB):
-* Override astEqual.
-* 4-OCT-2006 (DSB):
-* - Correct "mintick" to "lutinterp" in SetAttrib.
-* - Do not include bad values in the dumped LUT array.
-* 8-NOV-2007 (DSB):
-* - Take account of the requested invert flag when comparing two
-* neighbouring LutMaps for equality in MapMerge.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS LutMap
-
-#define LINEAR 0
-#define NEAR 1
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory management facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-#include "winmap.h" /* Linear mappings between windows */
-#include "channel.h" /* I/O channels */
-#include "unitmap.h" /* Unit mappings */
-#include "lutmap.h" /* Interface definition for this class */
-#include "globals.h" /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <limits.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->GetAttrib_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(LutMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(LutMap,Class_Init)
-#define class_vtab astGLOBAL(LutMap,Class_Vtab)
-#define getattrib_buff astGLOBAL(LutMap,GetAttrib_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-static char getattrib_buff[ 101 ];
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstLutMapVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstLutMap *astLutMapId_( int, const double [], double, double, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static int GetLinear( AstMapping *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-
-static const char *GetAttrib( AstObject *, const char *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-
-static int GetLutInterp( AstLutMap *, int * );
-static int TestLutInterp( AstLutMap *, int * );
-static void ClearLutInterp( AstLutMap *, int * );
-static void SetLutInterp( AstLutMap *, int, int * );
-
-/* Member functions. */
-/* ================= */
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a LutMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "lutmap.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* LutMap member function (over-rides the astClearAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* LutMap, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the LutMap.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstLutMap *this; /* Pointer to the LutMap structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the LutMap structure. */
- this = (AstLutMap *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* LutInterp. */
-/* ---------- */
- if ( !strcmp( attrib, "lutinterp" ) ) {
- astClearLutInterp( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two LutMaps are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "lutmap.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* LutMap member function (over-rides the astEqual protected
-* method inherited from the astMapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two LutMaps are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Object (a LutMap).
-* that
-* Pointer to the second Object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the LutMaps are equivalent, zero otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstLutMap *that;
- AstLutMap *this;
- int i;
- int nin;
- int nout;
- int result;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain pointers to the two LutMap structures. */
- this = (AstLutMap *) this_object;
- that = (AstLutMap *) that_object;
-
-/* Check the second object is a LutMap. We know the first is a
- LutMap since we have arrived at this implementation of the virtual
- function. */
- if( astIsALutMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
- nin = astGetNin( this );
- nout = astGetNout( this );
- if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two LutMaps differ, it may still be possible
- for them to be equivalent. First compare the LutMaps if their Invert
- flags are the same. In this case all the attributes of the two LutMaps
- must be identical. */
- if( astGetInvert( this ) == astGetInvert( that ) ) {
-
- if( astEQUAL( this->start, that->start ) &&
- astEQUAL( this->inc, that->inc ) &&
- this->nlut == that->nlut &&
- this->lutinterp == that->lutinterp ){
-
- result = 1;
- for( i = 0; i < this->nlut; i++ ) {
- if( !astEQUAL( (this->lut)[ i ], (that->lut)[ i ] ) ) {
- result = 0;
- break;
- }
- }
- }
-
-/* If the Invert flags for the two LutMaps differ, the attributes of the two
- LutMaps must be inversely related to each other. */
- } else {
-
-/* In the specific case of a LutMap, Invert flags must be equal. */
- result = 0;
- }
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a LutMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "lutmap.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* LutMap member function (over-rides the protected astGetAttrib
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a LutMap, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the LutMap.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the LutMap, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the LutMap. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstLutMap *this; /* Pointer to the LutMap structure */
- const char *result; /* Pointer value to return */
- int lutinterp; /* LutInterp attribute value */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the LutMap structure. */
- this = (AstLutMap *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null-terminated string in an appropriate
- format. Set "result" to point at the result string. */
-
-/* LutInterp. */
-/* ---------- */
- if ( !strcmp( attrib, "lutinterp" ) ) {
- lutinterp = astGetLutInterp( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", lutinterp );
- result = getattrib_buff;
- }
-
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-
-}
-
-static int GetLinear( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* GetLinear
-
-* Purpose:
-* Determine if a LutMap implements a linear coordinate transformation.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "lutmap.h"
-* int GetLinear( AstMapping *this, int *status )
-
-* Class Membership:
-* LutMap member function.
-
-* Description:
-* This function returns a boolean value to indicate if the LutMap
-* supplied is equivalent to a linear coordinate
-* transformation. This will be the case if the lookup table
-* elements increase or decrease linearly.
-
-* Parameters:
-* this
-* Pointer to the LutMap.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstLutMap *this; /* Pointer to the LutMap structure */
- double *lut; /* Pointer to the lookup table */
- double fract; /* Fractional position within table */
- double hi; /* Largest value */
- double interp; /* Interpolated value */
- double lo; /* Smallest value */
- double tol1; /* First tolerance estimate */
- double tol2; /* Second tolerance estimate */
- double tol; /* Tolerance value used */
- int ilut; /* Loop counter for table elements */
- int linear; /* Result to be returned */
- int nlut; /* Number of lookup table elements */
-
-/* Initialise. */
- linear = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return linear;
-
-/* Obtain a pointer to the LutMap structure. */
- this = (AstLutMap *) this_mapping;
-
-/* Nearest neighbour LutMaps are not considered to be linear because of
- the discontinuities at the start and end of the table. */
- if( astGetLutInterp( this ) != NEAR ) {
-
-/* Obtain the lookup table details. */
- lut = this->lut;
- nlut = this->nlut;
-
-/* Loop to identify the largest and smallest values in the lookup
- table. */
- lo = DBL_MAX;
- hi = -DBL_MAX;
- for ( ilut = 0; ilut < nlut; ilut++ ) {
- if ( lut[ ilut ] > hi ) hi = lut[ ilut ];
- if ( lut[ ilut ] < lo ) lo = lut[ ilut ];
- }
-
-/* Check if the values are all the same (this makes the LutMap
- linear, although it will have no inverse). */
- linear = ( hi == lo );
- if ( !linear ) {
-
-/* Form a tolerance estimate based on the overall range of values in
- the lookup table. */
- tol1 = fabs( hi - lo ) * DBL_EPSILON;
-
-/* Now loop to inspect all the lookup table elements except the first
- and last. */
- linear = 1;
- for ( ilut = 1; ilut < ( nlut - 1 ); ilut++ ) {
-
-/* Calculate the fractional position of the current element within the
- table. */
- fract = ( (double) ilut ) / ( (double) ( nlut - 1 ) );
-
-/* Calculate the value it should have if the table is linear by
- interpolating between the first and last values. */
- interp = lut[ 0 ] * ( 1.0 - fract ) + lut[ nlut - 1 ] * fract;
-
-/* Form a second tolerance estimate from this interpolated
- value. Select whichever tolerance estimate is larger (this avoids
- problems when values are near zero). */
- tol2 = fabs( interp ) * DBL_EPSILON;
- tol = ( tol1 > tol2 ) ? tol1 : tol2;
-
-/* Test for linearity within a small multiple of the tolerance. */
- linear = ( fabs( lut[ ilut ] - interp ) <= ( 2.0 * tol ) );
- if ( !linear ) break;
- }
- }
- }
-
-/* Return the result. */
- return linear;
-}
-
-void astInitLutMapVtab_( AstLutMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitLutMapVtab
-
-* Purpose:
-* Initialise a virtual function table for a LutMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "lutmap.h"
-* void astInitLutMapVtab( AstLutMapVtab *vtab, const char *name )
-
-* Class Membership:
-* LutMap vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the LutMap class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsALutMap) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
- vtab->ClearLutInterp = ClearLutInterp;
- vtab->GetLutInterp = GetLutInterp;
- vtab->SetLutInterp = SetLutInterp;
- vtab->TestLutInterp = TestLutInterp;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- object->Equal = Equal;
- mapping->MapMerge = MapMerge;
-
-/* Declare the class dump, copy and delete functions.*/
- astSetDump( vtab, Dump, "LutMap",
- "Map 1-d coordinates using a lookup table" );
- astSetCopy( (AstObjectVtab *) vtab, Copy );
- astSetDelete( (AstObjectVtab *) vtab, Delete );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a LutMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* LutMap method (over-rides the protected astMapMerge method
-* inherited from the Mapping class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated LutMap in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated LutMap with one which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated LutMap which is to be merged with
-* its neighbours. This should be a cloned copy of the LutMap
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* LutMap it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated LutMap resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstLutMap *map; /* Pointer to LutMap */
- AstLutMap *neb; /* Pointer to neighbouring LutMap */
- AstMapping *new; /* Pointer to replacement Mapping */
- double a1; /* First input coordinate value */
- double a2; /* Second input coordinate value */
- double b1; /* First output coordinate value */
- double b2; /* Second output coordinate value */
- int equal; /* Are LutMaps equal? */
- int i; /* Mapping index */
- int ilo; /* Index of lower LutMap */
- int invneb; /* Should the neigbour be used inverted? */
- int old_inv; /* Original Invert value for neigbour */
- int result; /* Result value to return */
- int simpler; /* Mapping simplified? */
-
-/* Initialise the returned result. */
- result = -1;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the nominated LutMap. */
- map = (AstLutMap *) ( *map_list )[ where ];
-
-/* See if the LutMap is linear. If so, it can probably be
- simplified. */
- simpler = GetLinear( (AstMapping *) map, status );
- if ( simpler ) {
-
-/* Obtain the range of input values corresponding to the first and
- last lookup table elements. */
- a1 = map->start;
- a2 = map->start + map->inc * ( map->nlut - 1 );
-
-/* Obtain the corresponding range of output values and check these
- values are not the same. */
- b1 = map->lut[ 0 ];
- b2 = map->lut[ map->nlut - 1 ];
- if ( b1 != b2 ) {
-
-/* Create a new WinMap that implements an equivalent linear Mapping,
- allowing for the invert flag associated with the LutMap. */
- if ( !( *invert_list )[ where ] ) {
- new = (AstMapping *) astWinMap( 1, &a1, &a2, &b1, &b2, "", status );
- } else {
- new = (AstMapping *) astWinMap( 1, &b1, &b2, &a1, &a2, "", status );
- }
-
-/* If OK, annul the original LutMap pointer and substitute the new
- one. Also clear the associated invert flag. */
- if ( astOK ) {
- (void) astAnnul( ( *map_list )[ where ] );
- ( *map_list )[ where ] = new;
- ( *invert_list )[ where ] = 0;
-
-/* Assign the result value. */
- result = where;
- }
- }
-
-/* Otherwise, see if the LutMap is in series with its own inverse. If so
- the pair of LutMaps can be replaced by a UnitMap. */
- } else if( series ) {
-
-/* Is the higher neighbour a LutMap? If so get a pointer to it, and
- note the index of the lower of the two adjacent LutMaps. */
- if( where < ( *nmap - 1 ) &&
- astIsALutMap( ( *map_list )[ where + 1 ] ) ){
- neb = (AstLutMap *) ( *map_list )[ where + 1 ];
- invneb = ( *invert_list )[ where + 1 ];
- ilo = where;
-
-/* If not, is the lower neighbour a LutMap? If so get a pointer to it,
- and note the index of the lower of the two adjacent LutMaps. */
- } else if( where > 0 &&
- astIsALutMap( ( *map_list )[ where - 1 ] ) ){
- neb = (AstLutMap *) ( *map_list )[ where - 1 ];
- invneb = ( *invert_list )[ where - 1 ];
- ilo = where - 1;
-
- } else {
- neb = NULL;
- }
-
-/* If a neighbouring LutMap was found, we can replace the pair by a
- UnitMap if the two LutMaps are equal but have opposite values for
- their Invert flags. Temporarily invert the neighbour, then compare
- the two LutMaps for equality, then re-invert the neighbour. */
- if( neb ) {
- old_inv = astGetInvert( neb );
- astSetInvert( neb, invneb );
- astInvert( neb );
- equal = astEqual( map, neb );
- astSetInvert( neb, old_inv );
-
-/* If the two LutMaps are equal but opposite, annul the first of the two
- Mappings, and replace it with a UnitMap. Also set the invert flag. */
- if( equal ) {
- new = (AstMapping *) astUnitMap( 1, "", status );
- (void) astAnnul( ( *map_list )[ ilo ] );
- ( *map_list )[ ilo ] = new;
- ( *invert_list )[ ilo ] = 0;
-
-/* Annul the second of the two Mappings, and shuffle down the rest of the
- list to fill the gap. */
- (void) astAnnul( ( *map_list )[ ilo + 1 ] );
- for ( i = ilo + 2; i < *nmap; i++ ) {
- ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
- ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
- }
-
-/* Clear the vacated element at the end. */
- ( *map_list )[ *nmap - 1 ] = NULL;
- ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
- modified element. */
- ( *nmap )--;
- result = where;
- }
- }
- }
-
-/* If an error occurred, clear the returned result. */
- if ( !astOK ) result = -1;
-
-/* Return the result. */
- return result;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a LutMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "lutmap.h"
-* void SetAttrib( AstObject *this, const char *setting )
-
-* Class Membership:
-* LutMap member function (over-rides the astSetAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function assigns an attribute value for a LutMap, the
-* attribute and its value being specified by means of a string of
-* the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in
-* lower case with no white space present. The value to the right
-* of the "=" should be a suitable textual representation of the
-* value to be assigned and this will be interpreted according to
-* the attribute's data type. White space surrounding the value is
-* only significant for string attributes.
-
-* Parameters:
-* this
-* Pointer to the LutMap.
-* setting
-* Pointer to a null-terminated string specifying the new attribute
-* value.
-*/
-
-/* Local Variables: */
- AstLutMap *this; /* Pointer to the LutMap structure */
- int lutinterp; /* LutInterp attribute value */
- int len; /* Length of setting string */
- int nc; /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the LutMap structure. */
- this = (AstLutMap *) this_object;
-
-/* Obtain the length of the setting string. */
- len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
- the setting string and extract the attribute value (or an offset to
- it in the case of string values). In each case, use the value set
- in "nc" to check that the entire string was matched. Once a value
- has been obtained, use the appropriate method to set it. */
-
-/* LutInterp. */
-/* ---------- */
- if ( nc = 0,
- ( 1 == astSscanf( setting, "lutinterp= %d %n", &lutinterp, &nc ) )
- && ( nc >= len ) ) {
- astSetLutInterp( this, lutinterp );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a LutMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "lutmap.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* LutMap member function (over-rides the astTestAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a LutMap's attributes.
-
-* Parameters:
-* this
-* Pointer to the LutMap.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstLutMap *this; /* Pointer to the LutMap structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the LutMap structure. */
- this = (AstLutMap *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* LutInterp. */
-/* ---------- */
- if ( !strcmp( attrib, "lutinterp" ) ) {
- result = astTestLutInterp( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a LutMap to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "lutmap.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* LutMap member function (over-rides the astTransform protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function takes a LutMap and a set of points encapsulated
-* in a PointSet and transforms the points so as to apply the
-* lookup table transformation.
-
-* Parameters:
-* this
-* Pointer to the LutMap.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate
-* transformation should be applied, while a zero value requests
-* the inverse transformation.
-* out
-* Pointer to a PointSet which will hold the transformed
-* (output) coordinate values. A NULL value may also be given,
-* in which case a new PointSet will be created by this
-* function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-* - The number of coordinate values per point in the input
-* PointSet must equal 1.
-* - If an output PointSet is supplied, it must have space for
-* sufficient number of points (with 1 coordinate value per point)
-* to accommodate the result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstLutMap *map; /* Pointer to LutMap to be applied */
- AstPointSet *result; /* Pointer to output PointSet */
- double **ptr_in; /* Pointer to input coordinate data */
- double **ptr_out; /* Pointer to output coordinate data */
- double *lut; /* Pointer to LUT */
- double d1; /* Offset to I1 value */
- double d2; /* Offset to I2 value */
- double fract; /* Fractional interpolation distance */
- double scale; /* Normalising scale factor */
- double value_in; /* Input coordinate value */
- double value_out; /* Output coordinate value */
- double x; /* Value normalised to LUT increment */
- double xi; /* Integer value of "x" */
- int i1; /* Lower adjacent LUT index */
- int i2; /* Upper adjacent LUT index */
- int i; /* New LUT index */
- int ix; /* "x" converted to an int */
- int near; /* Perform nearest neighbour interpolation? */
- int nlut; /* Number of LUT entries */
- int npoint; /* Number of points */
- int point; /* Loop counter for points */
- int up; /* LUT values are increasing? */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the LutMap. */
- map = (AstLutMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform
- member function inherited from the parent Mapping class. This
- function validates all arguments and generates an output PointSet
- if necessary, but does not actually transform any coordinate
- values. */
- result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points from the input PointSet and obtain
- pointers for accessing the input and output coordinate values. */
- npoint = astGetNpoint( in );
- ptr_in = astGetPoints( in );
- ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse mapping,
- according to the direction specified and whether the mapping has
- been inverted. */
- if ( astGetInvert( map ) ) forward = !forward;
-
-/* Obtain lookup table details. */
- lut = map->lut;
- nlut = map->nlut;
- near = ( astGetLutInterp( map ) == NEAR );
-
-/* Forward transformation. */
-/* ----------------------- */
- if( astOK ){
- if ( forward ) {
-
-/* Calculate the scale factor required. */
- scale = 1.0 / map->inc;
-
-/* Loop to transform each input point. */
- for ( point = 0; point < npoint; point++ ) {
-
-/* Extract the input coordinate value. */
- value_in = ptr_in[ 0 ][ point ];
-
-/* First check if this is the same value as we transformed last. If
- so, re-use the last result. */
- if ( value_in == map->last_fwd_in ) {
- value_out = map->last_fwd_out;
-
-/* Check for bad input coordinates and generate a bad result if
- necessary. */
- } else if ( value_in == AST__BAD ) {
- value_out = AST__BAD;
-
-/* For nearest-neighbour interpolation, return the value of the lookup table
- entry corresponding to the input coordinate. */
- } else if( near ){
- x = ( value_in - map->start ) * scale;
- xi = floor( x + 0.5 );
- ix = (int) xi;
- if ( ix < 0 || ix >= nlut ) {
- value_out = AST__BAD;
- } else {
- value_out = lut[ ix ];
- }
-
-/* Otherwise, (for linear interpolation) identify the lookup table entry
- corresponding to the input coordinate. */
- } else {
- x = ( value_in - map->start ) * scale;
- xi = floor( x );
- ix = (int) xi;
-
-/* If the input value lies below the first lookup table entry,
- extrapolate using the first two table values. */
- if ( ix < 0 ) {
- if( lut[ 0 ] != AST__BAD && lut[ 1 ] != AST__BAD ) {
- value_out = lut[ 0 ] + x * ( lut[ 1 ] - lut[ 0 ] );
- } else {
- value_out = AST__BAD;
- }
-
-/* If the input value lies above the last lookup table entry (or equals
- it), extrapolate using the last two table values. */
- } else if ( ix >= ( nlut - 1 ) ) {
- if( lut[ nlut - 1 ] != AST__BAD &&
- lut[ nlut - 2 ] != AST__BAD ) {
- value_out = lut[ nlut - 1 ] +
- ( x - (double) ( nlut - 1 ) ) *
- ( lut[ nlut - 1 ] - lut[ nlut - 2 ] );
- } else {
- value_out = AST__BAD;
- }
-
-/* Otherwise, interpolate between the adjacent entries. */
- } else {
- if( lut[ ix ] != AST__BAD &&
- lut[ ix + 1 ] != AST__BAD ) {
- fract = x - xi;
- value_out = lut[ ix ] * ( 1.0 - fract ) +
- lut[ ix + 1 ] * fract;
- } else {
- value_out = AST__BAD;
- }
- }
- }
-
-/* Assign the output coordinate value. */
- ptr_out[ 0 ][ point ] = value_out;
-
-/* Retain the input and output coordinate values for possible re-use
- in future. */
- map->last_fwd_in = value_in;
- map->last_fwd_out = value_out;
- }
-
-/* Inverse transformation. */
-/* ----------------------- */
- } else {
-
-/* Loop to transform each input point. */
- for ( point = 0; point < npoint; point++ ) {
-
-/* Extract the input coordinate value. */
- value_in = ptr_in[ 0 ][ point ];
-
-/* First check if this is the same value as we transformed last. If
- so, re-use the last result. */
- if ( value_in == map->last_inv_in ) {
- value_out = map->last_inv_out;
-
-/* Check for bad input coordinates and generate a bad result if
- necessary. */
- } else if ( value_in == AST__BAD ) {
- value_out = AST__BAD;
-
-/* Otherwise, determine if the lookup table's elements are increasing
- or decreasing. (Note the inverse transformation will not be
- defined, so will not be attempted, unless all the table entries are
- monotonically increasing or decreasing.) */
- } else {
- up = ( lut[ nlut - 1 ] > lut[ 0 ] );
-
-/* Perform a binary search to identify two adjacent lookup table
- elements whose values bracket the input coordinate value. */
- i1 = -1;
- i2 = nlut;
- while ( i2 > ( i1 + 1 ) ) {
- i = ( i1 + i2 ) / 2;
- *( ( ( value_in >= lut[ i ] ) == up ) ? &i1 : &i2 ) = i;
- }
-
-/* Nearest neighbour interpolation: return the closest of i1 or i2. Return
- AST__BAD if the supplied value is less than either or greater than
- either. */
- if( near ) {
- d1 = lut[ i1 ] - value_in;
- d2 = lut[ i2 ] - value_in;
- if( ( d1 > 0.0 && d2 > 0.0 ) ||
- ( d1 < 0.0 && d2 < 0.0 ) ) {
- value_out = AST__BAD;
-
- } else if( fabs( d1 ) < fabs( d2 ) ){
- value_out = i1;
- } else {
- value_out = i2;
- }
-
-/* Linear interpolation... */
- } else {
-
-/* We are interested in the lower bracketing table element. If
- necessary, restrict this element's index to lie within the
- table. This causes extrapolation to occur (instead of
- interpolation) if the input value actually lies outside the range
- of the lookup table. */
- if ( i1 < 0 ) i1 = 0;
- if ( i1 > ( nlut - 2 ) ) i1 = nlut - 2;
-
-/* Interpolate (or extrapolate) to derive the output coordinate
- value. */
- value_out = map->start + map->inc *
- ( (double) i1 + ( ( value_in - lut[ i1 ] ) /
- ( lut[ i1 + 1 ] - lut[ i1 ] ) ) );
- }
- }
-
-/* Assign the output coordinate value. */
- ptr_out[ 0 ][ point ] = value_out;
-
-/* Retain the input and output coordinate values for possible re-use
- in future. */
- map->last_inv_in = value_in;
- map->last_inv_out = value_out;
- }
- }
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/*
-*att++
-* Name:
-* LutInterp
-
-* Purpose:
-* Look-up table interpolation method.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer.
-
-* Description:
-* This attribute indicates the method to be used when finding the
-* output value of a LutMap for an input value part way between two
-* table entries. If it is set to 0 (the default) then linear
-* interpolation is used. Otherwise, nearest neighbour interpolation
-* is used.
-*
-* Using nearest neighbour interpolation causes AST__BAD to be returned
-* for any point which falls outside the bounds of the table. Linear
-* interpolation results in an extrapolated value being returned based
-* on the two end entries in the table.
-
-* Applicability:
-* LutMap
-* All LutMaps have this attribute.
-
-*att--
-*/
-astMAKE_CLEAR(LutMap,LutInterp,lutinterp,-INT_MAX)
-astMAKE_GET(LutMap,LutInterp,int,LINEAR,( ( this->lutinterp == -INT_MAX ) ?
- LINEAR : this->lutinterp ))
-astMAKE_SET(LutMap,LutInterp,int,lutinterp,(( value == LINEAR ) ? LINEAR : NEAR ))
-astMAKE_TEST(LutMap,LutInterp,( this->lutinterp != -INT_MAX ))
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for LutMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for LutMap objects.
-
-* Parameters:
-* objin
-* Pointer to the LutMap to be copied.
-* objout
-* Pointer to the LutMap being constructed.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstLutMap *out; /* Pointer to output LutMap */
- AstLutMap *in; /* Pointer to input LutMap */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the input and output LutMaps. */
- in= (AstLutMap *) objin;
- out = (AstLutMap *) objout;
-
-/* Allocate memory and store a copy of the lookup table data. */
- out->lut = astStore( NULL, in->lut,
- sizeof( double ) * (size_t) in->nlut );
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for LutMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for LutMap objects.
-
-* Parameters:
-* obj
-* Pointer to the LutMap to be deleted.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstLutMap *this; /* Pointer to LutMap */
-
-/* Obtain a pointer to the LutMap structure. */
- this = (AstLutMap *) obj;
-
-/* Free the memory holding the lookup table. */
- if ( this->lut ) this->lut = astFree( this->lut );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for LutMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the LutMap class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the LutMap whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstLutMap *this; /* Pointer to the LutMap structure */
- char buff[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- int ilut; /* Loop counter for table elements */
- int ival; /* Integer value */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the LutMap structure. */
- this = (AstLutMap *) this_object;
-
-/* Write out values representing the instance variables for the LutMap
- class. Accompany these with appropriate comment strings, possibly
- depending on the values being written. */
-
-/* Number of lookup table elements. */
- astWriteInt( channel, "Nlut", 1, 1, this->nlut,
- "Number of lookup table elements" );
-
-/* Input coordinate at first element centre. */
- astWriteDouble( channel, "Start", ( this->start != 0.0 ), 1, this->start,
- "Input value at first element" );
-
-/* Element spacing. */
- astWriteDouble( channel, "Incr", ( this->inc != 1.0 ), 1, this->inc,
- "Input value increment between elements" );
-
-/* Interpolation method */
- set = TestLutInterp( this, status );
- ival = set ? GetLutInterp( this, status ) : astGetLutInterp( this );
- astWriteInt( channel, "LutInt", set, 1, ival, "Interpolation method" );
-
-/* Lookup table contents. */
- for ( ilut = 0; ilut < this->nlut; ilut++ ) {
- if( this->lut[ ilut ] != AST__BAD ) {
- (void) sprintf( buff, "L%d", ilut + 1 );
- astWriteDouble( channel, buff, 1, 1, this->lut[ ilut ],
- ilut ? "" : "Lookup table elements..." );
- }
- }
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsALutMap and astCheckLutMap functions using the
- macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(LutMap,Mapping)
-astMAKE_CHECK(LutMap)
-
-AstLutMap *astLutMap_( int nlut, const double lut[],
- double start, double inc,
- const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astLutMap
-f AST_LUTMAP
-
-* Purpose:
-* Create a LutMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "lutmap.h"
-c AstLutMap *astLutMap( int nlut, const double lut[],
-c double start, double inc,
-c const char *options, ... )
-f RESULT = AST_LUTMAP( NLUT, LUT, START, INC, OPTIONS, STATUS )
-
-* Class Membership:
-* LutMap constructor.
-
-* Description:
-* This function creates a new LutMap and optionally initialises
-* its attributes.
-*
-* A LutMap is a specialised form of Mapping which transforms
-* 1-dimensional coordinates by using linear interpolation in a
-* lookup table. Each input coordinate value is first scaled to
-* give the index of an entry in the table by subtracting a
-* starting value (the input coordinate corresponding to the first
-* table entry) and dividing by an increment (the difference in
-* input coordinate value between adjacent table entries).
-*
-* The resulting index will usually contain a fractional part, so
-* the output coordinate value is then generated by interpolating
-* linearly between the appropriate entries in the table. If the
-* index lies outside the range of the table, linear extrapolation
-* is used based on the two nearest entries (i.e. the two entries
-* at the start or end of the table, as appropriate).
-*
-* If the lookup table entries increase or decrease monotonically,
-* then the inverse transformation may also be performed.
-
-* Parameters:
-c nlut
-f NLUT = INTEGER (Given)
-* The number of entries in the lookup table. This value must be
-* at least 2.
-c lut
-f LUT( NLUT ) = DOUBLE PRECISION (Given)
-c An array containing the "nlut"
-f An array containing the
-* lookup table entries.
-c start
-f START = DOUBLE PRECISION (Given)
-* The input coordinate value which corresponds to the first lookup
-* table entry.
-c inc
-f INC = DOUBLE PRECISION (Given)
-* The lookup table spacing (the increment in input coordinate
-* value between successive lookup table entries). This value
-* may be positive or negative, but must not be zero.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new LutMap. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new LutMap. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astLutMap()
-f AST_LUTMAP = INTEGER
-* A pointer to the new LutMap.
-
-* Notes:
-* - If the entries in the lookup table either increase or decrease
-* monotonically, then the new LutMap's TranInverse attribute will
-* have a value of one, indicating that the inverse transformation
-* can be performed. Otherwise, it will have a value of zero, so
-* that any attempt to use the inverse transformation will result
-* in an error.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-
-* Status Handling:
-* The protected interface to this function includes an extra
-* parameter at the end of the parameter list descirbed above. This
-* parameter is a pointer to the integer inherited status
-* variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstLutMap *new; /* Pointer to new LutMap */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the LutMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitLutMap( NULL, sizeof( AstLutMap ), !class_init, &class_vtab,
- "LutMap", nlut, lut, start, inc );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- LutMap's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new LutMap. */
- return new;
-}
-
-AstLutMap *astLutMapId_( int nlut, const double lut[],
- double start, double inc,
- const char *options, ... ) {
-/*
-* Name:
-* astLutMapId_
-
-* Purpose:
-* Create a LutMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "lutmap.h"
-* AstLutMap *astLutMapId( int nlut, const double lut[],
-* double start, double inc,
-* const char *options, ... )
-
-* Class Membership:
-* LutMap constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astLutMap constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astLutMap_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astLutMap_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astLutMap_.
-
-* Returned Value:
-* The ID value associated with the new LutMap.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstLutMap *new; /* Pointer to new LutMap */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the LutMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitLutMap( NULL, sizeof( AstLutMap ), !class_init, &class_vtab,
- "LutMap", nlut, lut, start, inc );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new LutMap's
- attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new LutMap. */
- return astMakeId( new );
-}
-
-AstLutMap *astInitLutMap_( void *mem, size_t size, int init,
- AstLutMapVtab *vtab, const char *name,
- int nlut, const double lut[],
- double start, double inc, int *status ) {
-/*
-*+
-* Name:
-* astInitLutMap
-
-* Purpose:
-* Initialise a LutMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "lutmap.h"
-* AstLutMap *astInitLutMap( void *mem, size_t size, int init,
-* AstLutMapVtab *vtab, const char *name,
-* int nlut, const double lut[],
-* double start, double inc )
-
-* Class Membership:
-* LutMap initialiser.
-
-* Description:
-* This function is provided for use by class implementations to
-* initialise a new LutMap object. It allocates memory (if
-* necessary) to accommodate the LutMap plus any additional data
-* associated with the derived class. It then initialises a LutMap
-* structure at the start of this memory. If the "init" flag is
-* set, it also initialises the contents of a virtual function
-* table for a LutMap at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the LutMap is to be
-* initialised. This must be of sufficient size to accommodate
-* the LutMap data (sizeof(LutMap)) plus any data used by the
-* derived class. If a value of NULL is given, this function
-* will allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the LutMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the LutMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-* init
-* A logical flag indicating if the LutMap's virtual function
-* table is to be initialised. If this value is non-zero, the
-* virtual function table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new LutMap.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-* nlut
-* The number of elements in the lookup table. This value must
-* be at least 2.
-* lut
-* An array containing the "nlut" lookup table elements.
-* start
-* The input coordinate value which corresponds with the first
-* lookup table element.
-* inc
-* The lookup table element spacing (i.e. the increment in input
-* coordinate value between successive lookup table elements).
-
-* Returned Value:
-* A pointer to the new LutMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstLutMap *new; /* Pointer to new LutMap */
- double *p; /* Pointer to next lut element */
- int down; /* Values are decreasing? */
- int ilut; /* Loop counter for LUT elements */
- int monotonic; /* LUT elements distinct and monotonic? */
- int up; /* Values are increasing? */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global status. */
- if ( !astOK ) return new;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitLutMapVtab( vtab, name );
-
-/* Check that the number of lookup table elements is valid. */
- if ( nlut < 2 ) {
- astError( AST__LUTIN, "astInitLutMap(%s): Invalid number of lookup "
- "table elements (%d).", status, name, nlut );
- astError( AST__LUTIN, "This value should be at least 2." , status);
-
-/* Also check that the input value increment is not zero. */
- } else if ( inc == 0.0 ) {
- astError( AST__LUTII, "astInitLutMap(%s): An input value increment of "
- "zero between lookup table elements is not allowed.", status, name );
-
-/* Determine if the element values are all good, distinct and increase
- or decrease monotonically. We can only implement the inverse
- transformation if this is so. Use the astISBAD macro to include NaNs
- in the checking as well as AST__BAD values. */
- } else {
- if( astISBAD(lut[ 0 ]) ) {
- monotonic = 0;
-
- } else {
- up = ( lut[ nlut - 1 ] > lut[ 0 ] );
- down = ( lut[ nlut - 1 ] < lut[ 0 ] );
- monotonic = up || down;
- if ( monotonic ) {
- for ( ilut = 0; ilut < ( nlut - 1 ); ilut++ ) {
- if( astISBAD(lut[ ilut + 1 ]) ) {
- monotonic = 0;
- } else {
- monotonic = up ? ( lut[ ilut + 1 ] > lut[ ilut ] ) :
- ( lut[ ilut + 1 ] < lut[ ilut ] );
- }
- if ( !monotonic ) break;
- }
- }
- }
-
-/* Initialise a Mapping structure (the parent class) as the first
- component within the LutMap structure, allocating memory if
- necessary. Specify that the Mapping should be defined in the
- forward direction, and conditionally in the inverse direction. */
- new = (AstLutMap *) astInitMapping( mem, size, 0,
- (AstMappingVtab *) vtab, name,
- 1, 1, 1, monotonic );
-
- if ( astOK ) {
-
-/* Initialise the LutMap data. */
-/* ---------------------------- */
- new->nlut = nlut;
- new->start = start;
- new->inc = inc;
- new->lutinterp = LINEAR;
-
-/* Allocate memory and store the lookup table. */
- new->lut = astStore( NULL, lut, sizeof( double ) * (size_t) nlut );
-
-/* Replace an NaN values by AST__BAD */
- p = new->lut;
- for ( ilut = 0; ilut < nlut; ilut++, p++ ) {
- if( astISNAN(*p) ) *p = AST__BAD;
- }
-
-/* Initialise the retained input and output coordinate values. */
- new->last_fwd_in = AST__BAD;
- new->last_fwd_out = AST__BAD;
- new->last_inv_in = AST__BAD;
- new->last_inv_out = AST__BAD;
- }
-
-/* If an error occurred, clean up by deleting the new LutMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new LutMap. */
- return new;
-}
-
-AstLutMap *astLoadLutMap_( void *mem, size_t size,
- AstLutMapVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadLutMap
-
-* Purpose:
-* Load a LutMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "lutmap.h"
-* AstLutMap *astLoadLutMap( void *mem, size_t size,
-* AstLutMapVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* LutMap loader.
-
-* Description:
-* This function is provided to load a new LutMap using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* LutMap structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a LutMap at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the LutMap is to be
-* loaded. This must be of sufficient size to accommodate the
-* LutMap data (sizeof(LutMap)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the LutMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the LutMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstLutMap) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new LutMap. If this is NULL, a pointer
-* to the (static) virtual function table for the LutMap class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "LutMap" is used instead.
-
-* Returned Value:
-* A pointer to the new LutMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Constants: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstLutMap *new; /* Pointer to the new LutMap */
- char buff[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- int ilut; /* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* Loop counter for table elements */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this LutMap. In this case the
- LutMap belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstLutMap );
- vtab = &class_vtab;
- name = "LutMap";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitLutMapVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built LutMap. */
- new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "LutMap" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* Number of lookup table elements. */
- new->nlut = astReadInt( channel, "nlut", 2 );
-
-/* Starting input coordinate value. */
- new->start = astReadDouble( channel, "start", 0.0 );
-
-/* Input coordinate value increment. */
- new->inc = astReadDouble( channel, "incr", 1.0 );
-
-/* Interpolation method */
- new->lutinterp = astReadInt( channel, "lutint", LINEAR );
- if ( TestLutInterp( new, status ) ) SetLutInterp( new, new->lutinterp, status );
-
-/* Allocate memory to hold the lookup table elements. */
- new->lut = astMalloc( sizeof( double ) * (size_t) new->nlut );
-
-/* If OK, loop to read each element. */
- if ( astOK ) {
- for ( ilut = 0; ilut < new->nlut; ilut++ ) {
- (void) sprintf( buff, "l%d", ilut + 1 );
- new->lut[ ilut ] = astReadDouble( channel, buff, AST__BAD );
- }
-
-/* Initialise the retained input and output coordinate values. */
- new->last_fwd_in = AST__BAD;
- new->last_fwd_out = AST__BAD;
- new->last_inv_in = AST__BAD;
- new->last_inv_out = AST__BAD;
- }
- }
-
-/* If an error occurred, clean up by deleting the new LutMap. */
- if ( !astOK ) new = astDelete( new );
-
-/* Return the new LutMap pointer. */
- return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions
- defined by this class. Each simply checks the global error status
- and then locates and executes the appropriate member function,
- using the function pointer stored in the object's virtual function
- table (this pointer is located using the astMEMBER macro defined in
- "object.h").
-
- Note that the member function may not be the one defined here, as
- it may have been over-ridden by a derived class. However, it should
- still have the same interface. */
-
-
-
-
-
diff --git a/ast-5.3-1/lutmap.h b/ast-5.3-1/lutmap.h
deleted file mode 100644
index 7473709..0000000
--- a/ast-5.3-1/lutmap.h
+++ /dev/null
@@ -1,306 +0,0 @@
-#if !defined( LUTMAP_INCLUDED ) /* Include this file only once */
-#define LUTMAP_INCLUDED
-/*
-*+
-* Name:
-* lutmap.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the LutMap class.
-
-* Invocation:
-* #include "lutmap.h"
-
-* Description:
-* This include file defines the interface to the LutMap class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The LutMap class implements Mappings which transform
-* 1-dimensional coordinates using linear interpolation in a lookup
-* table.
-
-* Inheritance:
-* The LutMap class inherits from the Mapping class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* None.
-
-* Methods Over-Ridden:
-* Public:
-* None.
-*
-* Protected:
-* astMapMerge
-* Simplify a sequence of Mappings.
-* astTransform
-* Apply a LutMap to transform a set of points.
-
-* New Methods Defined:
-* Public:
-* None.
-*
-* Protected:
-* None.
-
-* Other Class Functions:
-* Public:
-* astIsALutMap
-* Test class membership.
-* astLutMap
-* Create a LutMap.
-*
-* Protected:
-* astCheckLutMap
-* Validate class membership.
-* astInitLutMap
-* Initialise a LutMap.
-* astInitLutMapVtab
-* Initialise the virtual function table for the LutMap class.
-* astLoadLutMap
-* Load a LutMap.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstLutMap
-* LutMap object type.
-*
-* Protected:
-* AstLutMapVtab
-* LutMap virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 8-JUL-1997 (RFWS):
-* Original version.
-* 8-JAN-2003 (DSB):
-* Added protected astInitLutMapVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* LutMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each
- object in the class (e.g. its instance variables). */
-typedef struct AstLutMap {
-
-/* Attributes inherited from the parent class. */
- AstMapping mapping; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- double *lut; /* Pointer to lookup table */
- double start; /* Input value for first table entry */
- double inc; /* Input increment between table entries */
- double last_fwd_in; /* Last input value (forward transfm.) */
- double last_fwd_out; /* Last output value (forward transfm.) */
- double last_inv_in; /* Last input value (inverse transfm.) */
- double last_inv_out; /* Last output value (inverse transfm.) */
- int nlut; /* Number of table entries */
- int lutinterp; /* Interpolation method */
-} AstLutMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstLutMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstMappingVtab mapping_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- int (*GetLutInterp)( AstLutMap *, int * );
- int (* TestLutInterp)( AstLutMap *, int * );
- void (* ClearLutInterp)( AstLutMap *, int * );
- void (* SetLutInterp)( AstLutMap *, int, int * );
-
-} AstLutMapVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstLutMapGlobals {
- AstLutMapVtab Class_Vtab;
- int Class_Init;
- char GetAttrib_Buff[ 101 ];
-} AstLutMapGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(LutMap) /* Check class membership */
-astPROTO_ISA(LutMap) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstLutMap *astLutMap_( int, const double [], double, double, const char *, int *, ...);
-#else
-AstLutMap *astLutMapId_( int, const double [], double, double, const char *, ... )__attribute__((format(printf,5,6)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstLutMap *astInitLutMap_( void *, size_t, int, AstLutMapVtab *, const char *, int, const double *, double, double, int * );
-
-/* Vtab initialiser. */
-void astInitLutMapVtab_( AstLutMapVtab *, const char *, int * );
-
-/* Loader. */
-AstLutMap *astLoadLutMap_( void *, size_t, AstLutMapVtab *, const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitLutMapGlobals_( AstLutMapGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS) /* Protected */
- int astGetLutInterp_( AstLutMap *, int * );
- int astTestLutInterp_( AstLutMap *, int * );
- void astClearLutInterp_( AstLutMap *, int * );
- void astSetLutInterp_( AstLutMap *, int, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckLutMap(this) astINVOKE_CHECK(LutMap,this,0)
-#define astVerifyLutMap(this) astINVOKE_CHECK(LutMap,this,1)
-
-/* Test class membership. */
-#define astIsALutMap(this) astINVOKE_ISA(LutMap,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astLutMap astINVOKE(F,astLutMap_)
-#else
-#define astLutMap astINVOKE(F,astLutMapId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define \
-astInitLutMap(mem,size,init,vtab,name,nlut,lut,start,inc) \
-astINVOKE(O,astInitLutMap_(mem,size,init,vtab,name,nlut,lut,start,inc,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitLutMapVtab(vtab,name) astINVOKE(V,astInitLutMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadLutMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadLutMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckLutMap to validate LutMap pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-#if defined(astCLASS) /* Protected */
-#define astClearLutInterp(this) \
- astINVOKE(V,astClearLutInterp_(astCheckLutMap(this),STATUS_PTR))
-#define astGetLutInterp(this) \
- astINVOKE(V,astGetLutInterp_(astCheckLutMap(this),STATUS_PTR))
-#define astSetLutInterp(this,value) \
- astINVOKE(V,astSetLutInterp_(astCheckLutMap(this),value,STATUS_PTR))
-#define astTestLutInterp(this) \
- astINVOKE(V,astTestLutInterp_(astCheckLutMap(this),STATUS_PTR))
-#endif
-
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/makeh b/ast-5.3-1/makeh
deleted file mode 100644
index 50b3995..0000000
--- a/ast-5.3-1/makeh
+++ /dev/null
@@ -1,285 +0,0 @@
-#!/usr/bin/perl
-#+
-# Name:
-# makeh
-
-# Purpose:
-# Generate the contents of the "ast.h" header file.
-
-# Type:
-# Perl script.
-
-# Invocation:
-# makeh file_list
-
-# Description:
-# This script processes private header files used within the AST library
-# in order to extract the public information they contain. This information
-# is produced in a form suitable for use in the public "ast.h" header file,
-# which defines the public interface to the library.
-
-# Parameters:
-# file_list
-# A space-separated list of the private AST header files whose public
-# information is to be extracted.
-
-# Result:
-# The contents of the "ast.h" header file are written to standard output.
-
-# Notes:
-# - This script is specific to the AST library and contains some knowledge
-# of the input file contents.
-
-# History:
-# 10-JAN-2005 (DSB):
-# Added second argument (mode) to the mkdir invocation which creates
-# the temporary directory.
-# 2-MAR-2006 (DSB):
-# Check for "config.h" as well as <config.h>
-#-
-
-( $#ARGV >= 0 ) || Usage();
-
-# Test whether we need to include config.h in the result.
-$need_config_h = 0;
-
-# Location of source files (makefile variable $(srcdir)).
-# This is most typically '.', but can be different.
-$srcdir = '.';
-
-while ( $ARGV[0] =~ /^-/ ) {
- if ( $ARGV[0] eq '-s' ) {
- shift @ARGV;
- ( $#ARGV >= 0 ) || Usage();
- $srcdir = $ARGV[0];
- shift @ARGV;
- } else {
- Usage();
- }
-}
-
-# Create a scratch directory.
-$tmpdir='/tmp/makeh.tmp';
-unless ( -d $tmpdir && -w $tmpdir ) {
- if ( -e $tmpdir ) {
- die "Temp $tmpdir exists, but is unwritable or is not a directory\n";
- }
- mkdir $tmpdir, 0777 ||
- die "Failed to create temporary directory $tmpdir\n";
-}
-
-# Open each input file.
-foreach $file ( @ARGV ) {
- protect_copy_file( $file );
-}
-
-
-# Open a pipe to a scipt (in the current directory) which runs the C
-# preprocessor and direct its output to a scratch file.
-open( CC, '| ./ast_cpp >/tmp/ast.h' ) ||
- die "Can't open pipe to C preprocessor (cpp)";
-
-if ( $need_config_h ) {
-# Include this directory's config.h, unescaped, in the output. We
-# need to pay attention to the values in this file, but don't want
-# them unexpanded in the final ast.h.
- chomp($cwd = `pwd`);
- print(CC "#include \"$cwd/config.h\"\n");
-}
-
-# Before including each file, write an underlined heading in the form of
-# C comments (with comment characters suitably protected so that they will
-# be passed unchanged by cpp).
-foreach $file ( @ARGV ) {
- $comment = $file;
- $comment =~ s|^.*/||;
- $comment =~ s|.h$||;
- print( CC "/_* " . $comment . ". *_/\n" );
- $comment =~ s/./=/g;
- print( CC "/_* " . $comment . "= *_/\n" );
-
-# Write #include "xxx.h" lines to cpp so that it includes (and
-# preprocesses) each of the temporary files created above in turn.
- $tmp_file = $file;
- $tmp_file =~ s|^.*/||;
- printf(CC "#include \"%s/%s\"\n", $tmpdir, $tmp_file);
-};
-
-# Close the pipe to cpp.
-close( CC ) || die "C preprocessor (cpp) error";
-
-# Remove the temporary directory and the files it contains.
-print( stderr `rm -r $tmpdir` );
-
-# Write the output preamble.
-print(
-'#if !defined(AST_INCLUDED)
-#define AST_INCLUDED
-/*
-*+
-* Name:
-* ast.h
-
-* Purpose:
-* Define the public C interface to the AST library.
-
-* Language:
-* ANSI C
-
-* Type of Module:
-* C header file.
-
-* Description:
-* This file defines the public C interface to the AST library. It contains
-* all the type definitions, function prototypes, macro definitions, etc.
-* needed to use the library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (STARLINK)
-* RFWS: R.F. Warren-Smith (STARLINK)
-* {enter_new_authors_here}
-
-* History:
-* ' );
-
-# Add the current date at this point.
-( $sec, $min, $hour, $mday, $mon, $year ) = localtime;
-print( $mday, '-',
- ( 'JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN',
- 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC' )[ $mon ], '-',
- ( $year > 95 ? 1900 : 2000 ) + $year );
-
-print( ' (makeh):
-* Original version, generated automatically from the internal header
-* files by the "makeh" script.
-* {enter_changes_here}
-*-
-*/
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-' );
-
-# Open the scratch file created above and read it.
-$space = 0;
-open( TEMP, '</tmp/ast.h' );
-while( <TEMP> ) {
-
-# Remove the underscores from the protected lines and macros.
- s/^_#include(\s)/#include$1/;
- s/^_#define(\s)/#define$1/;
- s/___LINE__/__LINE__/g;
- s/___FILE__/__FILE__/g;
-
-# Also un-protect protected comments.
- s|/_\*|/*|g;
- s|\*_/|*/|g;
-
-# Convert multiple blank lines (cpp creates lots of these) into single blank
-# lines.
- if ( /^\s*$/ ) {
- $space = 1;
- } else {
-
-# Remove additional unwanted lines that cpp creates.
- if ( ! /^# \d+/ ) {
- if ( $space ) { print( "\n" ) };
- $space = 0;
-
-# Output the lines we want to keep.
- print;
- }
- }
-}
-
-# Write closing output lines.
-print(
-'
-#endif
-' );
-
-# Close and remove the scratch file.
-close( TEMP );
-unlink '/tmp/ast.h';
-
-
-sub protect_copy_file {
- my $file = shift;
-
- open( INCLUDE, "$srcdir/$file" )
- || die "Can't open input file " . $srcdir/$file;
-
-# Open an output file with the same name in the temporary directory.
- $tmp_file = $file;
- $tmp_file =~ s|^.*/||;
- open( TEMP, ">$tmpdir/$tmp_file" );
-
-# Read the input file and detect "#include <...>" lines, extracting the name
-# of the header file being included.
-line: while ( <INCLUDE> ) {
-# Omit any config.h includes, and note that we saw this
- if (/^\s*\#\s*include\s+<config.h>/ ||
- /^\s*\#\s*include\s+"config.h"/) {
- $need_config_h = 1;
- next line;
- }
-
- if ( ( $header ) = /^\#include\s+<(.+)>/ ) {
-
-# If this system header file has already been included, ignore it and go on to
-# the next input line.
- next line if $done{ $header }++;
-
-# Otherwise, protect the #include with an underscore to prevent the file
-# actually being included.
- s/^/_/;
- }
-
-# Also protect "#define ..." lines, to prevent macro substitution being
-# performed by the C preprocessor. Do not do this to lines of the form
-# "#define XXX_INCLUDED" because these are still needed to determine which
-# AST header files get included.
- if ( /^\#define\s/ ) {
- if ( ! /^\#define\s+\w*_INCLUDED/ ) { s/^/_/ };
- }
-
-# Similarly add underscores to protect standard C macros.
- s/__LINE__/___LINE__/g;
- s/__FILE__/___FILE__/g;
-
-# Write the modified include file.
- print( TEMP );
- }
-
-# Close each file when done.
- close( INCLUDE );
- close( TEMP );
-}
-
-sub Usage {
- print STDERR "$0 [-s srcdir] file...\n";
- exit (1);
-}
diff --git a/ast-5.3-1/mapping.c b/ast-5.3-1/mapping.c
deleted file mode 100644
index 3836f37..0000000
--- a/ast-5.3-1/mapping.c
+++ /dev/null
@@ -1,23574 +0,0 @@
-/*
-*class++
-* Name:
-* Mapping
-
-* Purpose:
-* Inter-relate two coordinate systems.
-
-* Constructor Function:
-* None.
-
-* Description:
-* This class provides the basic facilities for transforming a set
-* of coordinates (representing "input" points) to give a new set
-* of coordinates (representing "output" points). It is used to
-* describe the relationship which exists between two different
-* coordinate systems and to implement operations which make use of
-* this (such as transforming coordinates and resampling grids of
-* data). However, the Mapping class does not have a constructor
-* function of its own, as it is simply a container class for a
-* family of specialised Mappings which implement particular types
-* of coordinate transformation.
-
-* Inheritance:
-* The Mapping class inherits from the Object class.
-
-* Attributes:
-* In addition to those attributes common to all Objects, every
-* Mapping also has the following attributes:
-*
-* - Invert: Mapping inversion flag
-* - IsLinear: Is the Mapping linear?
-* - IsSimple: Has the Mapping been simplified?
-* - Nin: Number of input coordinates for a Mapping
-* - Nout: Number of output coordinates for a Mapping
-* - Report: Report transformed coordinates?
-* - TranForward: Forward transformation defined?
-* - TranInverse: Inverse transformation defined?
-
-* Functions:
-c In addition to those functions applicable to all Objects, the
-c following functions may also be applied to all Mappings:
-f In addition to those routines applicable to all Objects, the
-f following routines may also be applied to all Mappings:
-*
-c - astDecompose: Decompose a Mapping into two component Mappings
-c - astTranGrid: Transform a grid of positions
-c - astInvert: Invert a Mapping
-c - astLinearApprox: Calculate a linear approximation to a Mapping
-c - astMapBox: Find a bounding box for a Mapping
-c - astMapSplit: Split a Mapping up into parallel component Mappings
-c - astRate: Calculate the rate of change of a Mapping output
-c - astRebin<X>: Rebin a region of a data grid
-f - astRebinSeq<X>: Rebin a region of a sequence of data grids
-c - astResample<X>: Resample a region of a data grid
-c - astRemoveRegions: Remove any Regions from a Mapping
-c - astSimplify: Simplify a Mapping
-c - astTran1: Transform 1-dimensional coordinates
-c - astTran2: Transform 2-dimensional coordinates
-c - astTranN: Transform N-dimensional coordinates
-c - astTranP: Transform N-dimensional coordinates held in separate arrays
-f - AST_DECOMPOSE: Decompose a Mapping into two component Mappings
-f - AST_TRANGRID: Transform a grid of positions
-f - AST_INVERT: Invert a Mapping
-f - AST_LINEARAPPROX: Calculate a linear approximation to a Mapping
-f - AST_MAPBOX: Find a bounding box for a Mapping
-f - AST_MAPSPLIT: Split a Mapping up into parallel component Mappings
-f - AST_RATE: Calculate the rate of change of a Mapping output
-f - AST_REBIN<X>: Rebin a region of a data grid
-f - AST_REBINSEQ<X>: Rebin a region of a sequence of data grids
-f - AST_REMOVEREGIONS: Remove any Regions from a Mapping
-f - AST_RESAMPLE<X>: Resample a region of a data grid
-f - AST_SIMPLIFY: Simplify a Mapping
-f - AST_TRAN1: Transform 1-dimensional coordinates
-f - AST_TRAN2: Transform 2-dimensional coordinates
-f - AST_TRANN: Transform N-dimensional coordinates
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* MBT: Mark Taylor (Starlink)
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 1-FEB-1996 (RFWS):
-* Original version.
-* 29-FEB-1996 (RFWS):
-* Minor improvements to error messages.
-* 15-JUL-1996 (RFWS):
-* Support external interface.
-* 13-DEC-1996 (RFWS):
-* Added the astMapMerge method.
-* 13-DEC-1996 (RFWS):
-* Added the astSimplify method.
-* 27-MAY-1997 (RFWS):
-* Improved the astSimplify method to use astMapMerge to
-* simplify a single Mapping where possible.
-* 29-MAY-1998 (RFWS):
-* Added the MapBox method.
-* 13-NOV-1998 (RFWS):
-* Made default MapBox convergence accuracy larger (i.e. less
-* accurate).
-* 10-DEC-1998 (RFWS):
-* First useful implementation of astResample<X>.
-* 16-AUG-1999 (RFWS):
-* Fixed bug in SpecialBounds - wrong number of coordinates being used
-* when checking for bad output coordinate values.
-* 17-AUG-1999 (RFWS):
-* Improved the convergence security of MapBox (return to older but
-* less efficient setting).
-* 24-NOV-2000 (MBT):
-* Fixed bug (function being invoked as wrong type) in AST__UINTERP
-* scheme, and added new AST__BLOCKAVE scheme, in astResample<X>.
-* 9-JAN-2001 (DSB):
-* Changed in and out arguments for TranN from type "double (*)[]"
-* to "double *".
-* 8-JAN-2003 (DSB):
-* Changed private InitVtab method to protected astInitMappingVtab
-* method.
-* 10-JUL-2003 (DSB):
-* Added method astRate.
-* 2-SEP-2004 (DSB):
-* Free resources before leaving astRate.
-* 31-AUG-2004 (DSB):
-* Make the LinearApprox function protected rather than private,
-* rename it to astLinearApprox, and make the bounds parameters of
-* type double rather than int. Also, correct the size of the fit
-* coefficient array (was "(nin+1)*nout", now is "(nout+1)*nin").
-* Also correct the index of the first gradient coefficient from
-* "fit+nout" to "fit+nin". These errors have probably never been
-* noticed because they make no difference if nin=nout, which is
-* usually the case.
-* 6-SEP-2004 (DSB):
-* Make astRate more robust by adding checks for unusal conditions.
-* 20-SEP-2004 (DSB):
-* Make the LinearApprox function public and change its interface
-* to be more appropriate for public use. This involved swapping the
-* direction of the fit (the original astLinearApprox fitted the
-* inverse transformation, but the public version now fits the forwrd
-* transformation).
-* 4-OCT-2004 (DSB):
-* Modify astMapList to return flag indicating presence of inverted
-* CmpMaps in supplied Mapping.
-* 9-NOV-2004 (DSB):
-* Override astEqual method.
-* 6-DEC-2004 (DSB):
-* Remove the second derivative estimate from the astRate function
-* since CmpMap has trouble calculating it.
-* 17-DEC-2004 (DSB):
-* Added astMapSplit
-* 22-APR-2005 (DSB):
-* Modified SpecialBounds to handle cases where some irrelevant
-* output always produces bad values (e.g. a PermMap may do this).
-* 30-JUN-2005 (DSB):
-* Added astRebin.
-* 7-JUL-2005 (DSB):
-* Make MapSplit public rather than protected.
-* 11-AUG-2005 (DSB):
-* Added the AST__CONSERVEFLUX flag (used by astResampleX).
-* 17-AUG-2005 (DSB):
-* Added the AST__SOMBCOS kernel.
-* 31-AUG-2005 (DSB):
-* Added astRebinSeq.
-* 9-SEP-2005 (DSB):
-* Corrected axis indices returned by public interface for astMapSplit.
-* 31-JAN-2006 (DSB):
-* Added IsSimple attribute.
-* 2-FEB-2006 (DSB):
-* Corrections to prologue of astLinearApprox.
-* 16-FEB-2006 (DSB):
-* Some speed optimisations to rebinning code.
-* 2-MAR-2006 (DSB):
-* Use HAVE_LONG_DOUBLE in place of AST_LONG_DOUBLE
-* 7-MAR-2006 (DSB):
-* Added astTranGrid.
-* 14-MAR-2006 (DSB):
-* - The constructor no longer reports an error if the resulting
-* Mapping cannot transform points in either direction. This is
-* because it may be possible to simplify such a Mapping and the
-* simplified Mapping may have defined transformations. E.g. if a
-* Mapping which has only a forward transformation is combined in
-* series with its own inverse, the combination CmpMap will simplify
-* to a UnitMap (usually).
-* - Reset the "issimple" flag when the Invert flag is changed.
-* 9-MAY-2006 (DSB):
-* Correct upper bounds for idim in RebinWithblocking. Also, remove
-* the single precision "F" instantiation of the MAKE_REBINSEQ macro.
-* Also correct the "nout = astGetNin" line in the MAKE_REBINSEQ
-* macro to "nout = astGetNout".
-* 12-MAY-2006 (DSB):
-* Modify SpecialBounds to include points slightly inside the
-* corners. This is because some Mappings may have singularies at
-* the the edges.
-* 17-MAY-2006 (DSB):
-* Correct the "nout = astGetNin" line in the MAKE_RESAMPLE
-* and MAKE_REBIN macros to "nout = astGetNout".
-* 7-JUL-2006 (DSB):
-* Change -CHAR_MAX value (used as a "not set" value for boolean
-* attributes) to +CHAR_MAX, since some compilers do not allow
-* chars to have negative values.
-* 23-AUG-2006 (DSB):
-* Change the Equal function so that it reports an error when
-* called, rather than using astSimplify to determine if two Mappings
-* are equal. All concrete Mapping classes should now provide
-* their own implementation of astEqual, avoiding the use of
-* astSimplify. This is so that astSimplify can use astEqual safely
-* (i.e. without danger of entering an infinite loop).
-* 24-NOV-2006 (DSB):
-* Allow astRebinSeq to be called with a NULL pointer for the input
-* data array.
-* 14-MAR-2007 (DSB):
-* Modify astRebinSeq to allow input variances to be used as weights.
-* 19-MAR-2007 (DSB):
-* Fix bug in LINEAR_2D macro that caused bad input pixel values to be
-* treated as good.
-* 16-APR-2007 (DSB):
-* Account for reduction in number of degrees of freedom when
-* calculating output variances on the basis of spread of input values in
-* astReinSeq.
-* 28-APR-2007 (DSB):
-* Correct code within Rebin... and Resample... functions that provides
-* optimal handling for 1- and 2- dimensional mappings. Previously, the
-* check for whether or not to use these optimisations was based only on
-* the dimensionality of either input (Rebin) or output (Resample). This
-* could cause the optimised code to be used at inappropriate times,
-* leading to an incorrect effective Mapping between input and output. The
-* checks now check both input and output dimensionality in all cases.
-* 3-MAY-2007 (DSB):
-* An extra parameter ("nused") has been added to astRebinSeq, and
-* all the rebinning stuff has been modified to keep "nused" up to date.
-* This is needed to correct a fault in the generation of GENVAR
-* variances.
-* 12-DEC-2007 (DSB):
-* Some rebinning kernels (e.g. SINCSINC) have negative values and
-* can result in overall negative output weights. Therefore do not
-* set output pixels with negative weights bad.
-* 6-MAR-2008 (DSB):
-* Add an option for astResample to leave unchanged any output pixels
-* for which an interpolated value cannot be obtained. This is
-* controlled by the new AST__NOBAD flag.
-* 7-MAY-2008 (DSB):
-* Clarified meaning of AST__GENVAR, AST__USEVAR and AST__VARWGT flags
-* in astRebinSeq.
-* 9-MAY-2008 (DSB):
-* Prevent memory over-run in RebinSeq<X>.
-* 5-MAY-2009 (DSB):
-* Added astRemoveRegions.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to the header
- files that define class interfaces that they should make "protected"
- symbols available. */
-#define astCLASS Mapping
-
-/* Define numerical constants for use in thie module. */
-#define GETATTRIB_BUFF_LEN 50
-#define FUNPN_MAX_CACHE 5
-
-/* Include files. */
-/* ============== */
-
-/* Configuration results */
-/* ---------------------- */
-#include "config.h"
-
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "channel.h" /* I/O channels */
-#include "mapping.h" /* Interface definition for this class */
-#include "cmpmap.h" /* Compund Mappings */
-#include "unitmap.h" /* Unit Mappings */
-#include "permmap.h" /* Axis permutations */
-#include "pal.h" /* SLALIB interface */
-#include "globals.h" /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <limits.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Module type definitions. */
-/* ======================== */
-/* Enum to represent the data type when resampling a grid of data. */
-typedef enum DataType {
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
- TYPE_LD,
-#endif
- TYPE_D,
- TYPE_F,
- TYPE_L,
- TYPE_UL,
- TYPE_I,
- TYPE_UI,
- TYPE_S,
- TYPE_US,
- TYPE_B,
- TYPE_UB
-} DataType;
-
-/* Data structure to hold information about a Mapping for use by
- optimisation algorithms. */
-typedef struct MapData {
- AstMapping *mapping; /* Pointer to the Mapping */
- AstPointSet *pset_in; /* Pointer to input PointSet */
- AstPointSet *pset_out; /* Pointer to output PointSet */
- double *lbnd; /* Pointer to lower constraints on input */
- double *ubnd; /* Pointer to upper constraints on input */
- double **ptr_in; /* Pointer to input PointSet coordinates */
- double **ptr_out; /* Pointer to output PointSet coordinates */
- int coord; /* Index of output coordinate to optimise */
- int forward; /* Use forward transformation? */
- int negate; /* Negate the output value? */
- int nin; /* Number of input coordinates per point */
- int nout; /* Number of output coordinates per point */
-} MapData;
-
-/* Data structure describing a polynomial function */
-#define RATE_ORDER 4 /* The order of polynial used to evalue function derivatives */
-typedef struct PN {
- int order; /* The order; zero=constant, 1=linear, 2=quadratic */
- double coeff[ RATE_ORDER + 1 ]; /* The coefficients of the polynomail */
- double xlo; /* The lower x limit covered by the polynomial */
- double xhi; /* The upper x limit covered by the polynomial */
- double y0; /* The y offset to be added to the polynomial value */
- int too_small; /* Dynamic range of function value over h is
- close to zero */
-} PN;
-
-/* Convert from floating point to floating point or integer */
-#define CONV(IntType,val) ( ( IntType ) ? (int) ( (val) + (((val)>0)?0.5:-0.5) ) : (val) )
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static int (* parent_equal)( AstObject *, AstObject *, int * );
-
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->GetAttrib_Buff[ 0 ] = 0; \
- globals->Unsimplified_Mapping = NULL; \
- globals->Rate_Disabled = 0;
-
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Mapping)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Mapping,Class_Init)
-#define class_vtab astGLOBAL(Mapping,Class_Vtab)
-#define getattrib_buff astGLOBAL(Mapping,GetAttrib_Buff)
-#define unsimplified_mapping astGLOBAL(Mapping,Unsimplified_Mapping)
-#define rate_disabled astGLOBAL(Mapping,Rate_Disabled)
-#define funpn_pset1_cache astGLOBAL(Mapping,FunPN_Pset1_Cache)
-#define funpn_pset2_cache astGLOBAL(Mapping,FunPN_Pset2_Cache)
-#define funpn_next_slot astGLOBAL(Mapping,FunPN_Next_Slot)
-#define funpn_pset_size astGLOBAL(Mapping,FunPN_Pset_Size)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-/* Buffer returned by GetAttrib. */
-static char getattrib_buff[ GETATTRIB_BUFF_LEN + 1 ];
-
-/* Pointer to origin (unsimplified) Mapping, only used for reporting
- error messages. */
-static AstMapping *unsimplified_mapping = NULL;
-
-/* A flag which indicates if the astRate method should be disabled in
- order to improve algorithm speed in cases where the rate value is not
- significant. If astRate is disabled then it always returns a constant
- value of 1.0. */
-static int rate_disabled = 0;
-
-/* static values used in function "FunPN". */
-static AstPointSet *funpn_pset1_cache[ FUNPN_MAX_CACHE ];
-static AstPointSet *funpn_pset2_cache[ FUNPN_MAX_CACHE ];
-static int funpn_next_slot;
-static int funpn_pset_size[ FUNPN_MAX_CACHE ];
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstMappingVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* Prototypes for private member functions. */
-/* ======================================== */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-static void InterpolateBlockAverageLD( int, const int[], const int[], const long double [], const long double [], int, const int[], const double *const[], const double[], int, long double, long double *, long double *, int * );
-static int InterpolateKernel1LD( AstMapping *, int, const int *, const int *, const long double *, const long double *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), void (*)( double, const double *, int, double *), int, const double *, int, long double, long double *, long double *, int * );
-static int InterpolateLinearLD( int, const int *, const int *, const long double *, const long double *, int, const int *, const double *const *, int, long double, long double *, long double *, int * );
-static int InterpolateNearestLD( int, const int *, const int *, const long double *, const long double *, int, const int *, const double *const *, int, long double, long double *, long double *, int * );
-static void SpreadKernel1LD( AstMapping *, int, const int *, const int *, const long double *, const long double *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), int, const double *, int, long double, int, long double *, long double *, double *, int *, int * );
-static void SpreadLinearLD( int, const int *, const int *, const long double *, const long double *, int, const int *, const double *const *, int, long double, int, long double *, long double *, double *, int *, int * );
-static void SpreadNearestLD( int, const int *, const int *, const long double *, const long double *, int, const int *, const double *const *, int, long double, int, long double *, long double *, double *, int *, int * );
-static int ResampleLD( AstMapping *, int, const int [], const int [], const long double [], const long double [], int, void (*)(), const double [], int, double, int, long double, int, const int [], const int [], const int [], const int [], long double [], long double [], int * );
-static void RebinLD( AstMapping *, double, int, const int [], const int [], const long double [], const long double [], int, const double [], int, double, int, long double, int, const int [], const int [], const int [], const int [], long double [], long double [], int * );
-static void RebinSeqLD( AstMapping *, double, int, const int [], const int [], const long double [], const long double [], int, const double [], int, double, int, long double, int, const int [], const int [], const int [], const int [], long double [], long double [], double [], int *, int * );
-static void ConserveFluxLD( double, int, const int *, long double, long double *, long double *, int * );
-#endif
-
-static AstMapping *RemoveRegions( AstMapping *, int * );
-static AstMapping *Simplify( AstMapping *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static PN *FitPN( AstMapping *, double *, int, int, double, double, double *, int * );
-static PN *InterpPN( int, double *, double *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static double EvaluateDPN( PN *, double, int * );
-static double EvaluatePN( PN *, double, int * );
-static double J1Bessel( double, int * );
-static double LocalMaximum( const MapData *, double, double, double [], int * );
-static double MapFunction( const MapData *, const double [], int *, int * );
-static double MatrixDet( int, const double *, int * );
-static double MaxD( double, double, int * );
-static double NewVertex( const MapData *, int, double, double [], double [], int *, double [], int * );
-static double Random( long int *, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static double UphillSimplex( const MapData *, double, int, const double [], double [], double *, int *, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetInvert( AstMapping *, int * );
-static int GetIsSimple( AstMapping *, int * );
-static int GetNin( AstMapping *, int * );
-static int GetNout( AstMapping *, int * );
-static int GetReport( AstMapping *, int * );
-static int GetIsLinear( AstMapping *, int * );
-static int GetTranForward( AstMapping *, int * );
-static int GetTranInverse( AstMapping *, int * );
-static int InterpolateKernel1B( AstMapping *, int, const int *, const int *, const signed char *, const signed char *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), void (*)( double, const double *, int, double * ), int, const double *, int, signed char, signed char *, signed char *, int * );
-static int InterpolateKernel1D( AstMapping *, int, const int *, const int *, const double *, const double *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), void (*)( double, const double *, int, double * ), int, const double *, int, double, double *, double *, int * );
-static int InterpolateKernel1F( AstMapping *, int, const int *, const int *, const float *, const float *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), void (*)( double, const double *, int, double * ), int, const double *, int, float, float *, float *, int * );
-static int InterpolateKernel1I( AstMapping *, int, const int *, const int *, const int *, const int *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), void (*)( double, const double *, int, double * ), int, const double *, int, int, int *, int *, int * );
-static int InterpolateKernel1L( AstMapping *, int, const int *, const int *, const long int *, const long int *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), void (*)( double, const double *, int, double * ), int, const double *, int, long int, long int *, long int *, int * );
-static int InterpolateKernel1S( AstMapping *, int, const int *, const int *, const short int *, const short int *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), void (*)( double, const double *, int, double * ), int, const double *, int, short int, short int *, short int *, int * );
-static int InterpolateKernel1UB( AstMapping *, int, const int *, const int *, const unsigned char *, const unsigned char *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), void (*)( double, const double *, int, double * ), int, const double *, int, unsigned char, unsigned char *, unsigned char *, int * );
-static int InterpolateKernel1UI( AstMapping *, int, const int *, const int *, const unsigned int *, const unsigned int *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), void (*)( double, const double *, int, double * ), int, const double *, int, unsigned int, unsigned int *, unsigned int *, int * );
-static int InterpolateKernel1UL( AstMapping *, int, const int *, const int *, const unsigned long int *, const unsigned long int *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), void (*)( double, const double *, int, double * ), int, const double *, int, unsigned long int, unsigned long int *, unsigned long int *, int * );
-static int InterpolateKernel1US( AstMapping *, int, const int *, const int *, const unsigned short int *, const unsigned short int *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), void (*)( double, const double *, int, double * ), int, const double *, int, unsigned short int, unsigned short int *, unsigned short int *, int * );
-static int InterpolateLinearB( int, const int *, const int *, const signed char *, const signed char *, int, const int *, const double *const *, int, signed char, signed char *, signed char *, int * );
-static int InterpolateLinearD( int, const int *, const int *, const double *, const double *, int, const int *, const double *const *, int, double, double *, double *, int * );
-static int InterpolateLinearF( int, const int *, const int *, const float *, const float *, int, const int *, const double *const *, int, float, float *, float *, int * );
-static int InterpolateLinearI( int, const int *, const int *, const int *, const int *, int, const int *, const double *const *, int, int, int *, int *, int * );
-static int InterpolateLinearL( int, const int *, const int *, const long int *, const long int *, int, const int *, const double *const *, int, long int, long int *, long int *, int * );
-static int InterpolateLinearS( int, const int *, const int *, const short int *, const short int *, int, const int *, const double *const *, int, short int, short int *, short int *, int * );
-static int InterpolateLinearUB( int, const int *, const int *, const unsigned char *, const unsigned char *, int, const int *, const double *const *, int, unsigned char, unsigned char *, unsigned char *, int * );
-static int InterpolateLinearUI( int, const int *, const int *, const unsigned int *, const unsigned int *, int, const int *, const double *const *, int, unsigned int, unsigned int *, unsigned int *, int * );
-static int InterpolateLinearUL( int, const int *, const int *, const unsigned long int *, const unsigned long int *, int, const int *, const double *const *, int, unsigned long int, unsigned long int *, unsigned long int *, int * );
-static int InterpolateLinearUS( int, const int *, const int *, const unsigned short int *, const unsigned short int *, int, const int *, const double *const *, int, unsigned short int, unsigned short int *, unsigned short int *, int * );
-static int InterpolateNearestB( int, const int *, const int *, const signed char *, const signed char *, int, const int *, const double *const *, int, signed char, signed char *, signed char *, int * );
-static int InterpolateNearestD( int, const int *, const int *, const double *, const double *, int, const int *, const double *const *, int, double, double *, double *, int * );
-static int InterpolateNearestF( int, const int *, const int *, const float *, const float *, int, const int *, const double *const *, int, float, float *, float *, int * );
-static int InterpolateNearestI( int, const int *, const int *, const int *, const int *, int, const int *, const double *const *, int, int, int *, int *, int * );
-static int InterpolateNearestL( int, const int *, const int *, const long int *, const long int *, int, const int *, const double *const *, int, long int, long int *, long int *, int * );
-static int InterpolateNearestS( int, const int *, const int *, const short int *, const short int *, int, const int *, const double *const *, int, short int, short int *, short int *, int * );
-static int InterpolateNearestUB( int, const int *, const int *, const unsigned char *, const unsigned char *, int, const int *, const double *const *, int, unsigned char, unsigned char *, unsigned char *, int * );
-static int InterpolateNearestUI( int, const int *, const int *, const unsigned int *, const unsigned int *, int, const int *, const double *const *, int, unsigned int, unsigned int *, unsigned int *, int * );
-static int InterpolateNearestUL( int, const int *, const int *, const unsigned long int *, const unsigned long int *, int, const int *, const double *const *, int, unsigned long int, unsigned long int *, unsigned long int *, int * );
-static int InterpolateNearestUS( int, const int *, const int *, const unsigned short int *, const unsigned short int *, int, const int *, const double *const *, int, unsigned short int, unsigned short int *, unsigned short int *, int * );
-static int LinearApprox( AstMapping *, const double *, const double *, double, double *, int * );
-static int MapList( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int MaxI( int, int, int * );
-static int MinI( int, int, int * );
-static int ResampleAdaptively( AstMapping *, int, const int *, const int *, const void *, const void *, DataType, int, void (*)(), const double *, int, double, int, const void *, int, const int *, const int *, const int *, const int *, void *, void *, int * );
-static int ResampleB( AstMapping *, int, const int [], const int [], const signed char [], const signed char [], int, void (*)(), const double [], int, double, int, signed char, int, const int [], const int [], const int [], const int [], signed char [], signed char [], int * );
-static int ResampleD( AstMapping *, int, const int [], const int [], const double [], const double [], int, void (*)(), const double [], int, double, int, double, int, const int [], const int [], const int [], const int [], double [], double [], int * );
-static int ResampleF( AstMapping *, int, const int [], const int [], const float [], const float [], int, void (*)(), const double [], int, double, int, float, int, const int [], const int [], const int [], const int [], float [], float [], int * );
-static int ResampleI( AstMapping *, int, const int [], const int [], const int [], const int [], int, void (*)(), const double [], int, double, int, int, int, const int [], const int [], const int [], const int [], int [], int [], int * );
-static int ResampleL( AstMapping *, int, const int [], const int [], const long int [], const long int [], int, void (*)(), const double [], int, double, int, long int, int, const int [], const int [], const int [], const int [], long int [], long int [], int * );
-static int ResampleS( AstMapping *, int, const int [], const int [], const short int [], const short int [], int, void (*)(), const double [], int, double, int, short int, int, const int [], const int [], const int [], const int [], short int [], short int [], int * );
-static int ResampleSection( AstMapping *, const double *, int, const int *, const int *, const void *, const void *, DataType, int, void (*)(), const double *, double, int, const void *, int, const int *, const int *, const int *, const int *, void *, void *, int * );
-static int ResampleUB( AstMapping *, int, const int [], const int [], const unsigned char [], const unsigned char [], int, void (*)(), const double [], int, double, int, unsigned char, int, const int [], const int [], const int [], const int [], unsigned char [], unsigned char [], int * );
-static int ResampleUI( AstMapping *, int, const int [], const int [], const unsigned int [], const unsigned int [], int, void (*)(), const double [], int, double, int, unsigned int, int, const int [], const int [], const int [], const int [], unsigned int [], unsigned int [], int * );
-static int ResampleUL( AstMapping *, int, const int [], const int [], const unsigned long int [], const unsigned long int [], int, void (*)(), const double [], int, double, int, unsigned long int, int, const int [], const int [], const int [], const int [], unsigned long int [], unsigned long int [], int * );
-static int ResampleUS( AstMapping *, int, const int [], const int [], const unsigned short int [], const unsigned short int [], int, void (*)(), const double [], int, double, int, unsigned short int, int, const int [], const int [], const int [], const int [], unsigned short int [], unsigned short int [], int * );
-static int ResampleWithBlocking( AstMapping *, const double *, int, const int *, const int *, const void *, const void *, DataType, int, void (*)(), const double *, int, const void *, int, const int *, const int *, const int *, const int *, void *, void *, int * );
-static int SpecialBounds( const MapData *, double *, double *, double [], double [], int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestInvert( AstMapping *, int * );
-static int TestReport( AstMapping *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void ClearInvert( AstMapping *, int * );
-static void ClearReport( AstMapping *, int * );
-static void CombinePN( PN *, PN *, int * );
-static void ConserveFluxB( double, int, const int *, signed char, signed char *, signed char *, int * );
-static void ConserveFluxD( double, int, const int *, double, double *, double *, int * );
-static void ConserveFluxF( double, int, const int *, float, float *, float *, int * );
-static void ConserveFluxI( double, int, const int *, int, int *, int *, int * );
-static void ConserveFluxL( double, int, const int *, long int, long int *, long int *, int * );
-static void ConserveFluxS( double, int, const int *, short int, short int *, short int *, int * );
-static void ConserveFluxUB( double, int, const int *, unsigned char, unsigned char *, unsigned char *, int * );
-static void ConserveFluxUI( double, int, const int *, unsigned int, unsigned int *, unsigned int *, int * );
-static void ConserveFluxUL( double, int, const int *, unsigned long int, unsigned long int *, unsigned long int *, int * );
-static void ConserveFluxUS( double, int, const int *, unsigned short int, unsigned short int *, unsigned short int *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Decompose( AstMapping *, AstMapping **, AstMapping **, int *, int *, int *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void FunPN( AstMapping *, double *, int, int, int, double *, double *, int * );
-static void Gauss( double, const double [], int, double *, int * );
-static void GlobalBounds( MapData *, double *, double *, double [], double [], int * );
-static void InterpolateBlockAverageB( int, const int[], const int[], const signed char [], const signed char [], int, const int[], const double *const[], const double[], int, signed char, signed char *, signed char *, int * );
-static void InterpolateBlockAverageD( int, const int[], const int[], const double [], const double [], int, const int[], const double *const[], const double[], int, double, double *, double *, int * );
-static void InterpolateBlockAverageF( int, const int[], const int[], const float [], const float [], int, const int[], const double *const[], const double[], int, float, float *, float *, int * );
-static void InterpolateBlockAverageI( int, const int[], const int[], const int [], const int [], int, const int[], const double *const[], const double[], int, int, int *, int *, int * );
-static void InterpolateBlockAverageL( int, const int[], const int[], const long int [], const long int [], int, const int[], const double *const[], const double[], int, long int, long int *, long int *, int * );
-static void InterpolateBlockAverageS( int, const int[], const int[], const short int [], const short int [], int, const int[], const double *const[], const double[], int, short int, short int *, short int *, int * );
-static void InterpolateBlockAverageUB( int, const int[], const int[], const unsigned char [], const unsigned char [], int, const int[], const double *const[], const double[], int, unsigned char, unsigned char *, unsigned char *, int * );
-static void InterpolateBlockAverageUI( int, const int[], const int[], const unsigned int [], const unsigned int [], int, const int[], const double *const[], const double[], int, unsigned int, unsigned int *, unsigned int *, int * );
-static void InterpolateBlockAverageUL( int, const int[], const int[], const unsigned long int [], const unsigned long int [], int, const int[], const double *const[], const double[], int, unsigned long int, unsigned long int *, unsigned long int *, int * );
-static void InterpolateBlockAverageUS( int, const int[], const int[], const unsigned short int [], const unsigned short int [], int, const int[], const double *const[], const double[], int, unsigned short int, unsigned short int *, unsigned short int *, int * );
-static void Invert( AstMapping *, int * );
-static void MapBox( AstMapping *, const double [], const double [], int, int, double *, double *, double [], double [], int * );
-static void RebinAdaptively( AstMapping *, int, const int *, const int *, const void *, const void *, DataType, int, const double *, int, double, int, const void *, int, const int *, const int *, const int *, const int *, int, void *, void *, double *, int *, int * );
-static void RebinD( AstMapping *, double, int, const int [], const int [], const double [], const double [], int, const double [], int, double, int, double, int, const int [], const int [], const int [], const int [], double [], double [], int * );
-static void RebinF( AstMapping *, double, int, const int [], const int [], const float [], const float [], int, const double [], int, double, int, float, int, const int [], const int [], const int [], const int [], float [], float [], int * );
-static void RebinI( AstMapping *, double, int, const int [], const int [], const int [], const int [], int, const double [], int, double, int, int, int, const int [], const int [], const int [], const int [], int [], int [], int * );
-static void RebinSeqD( AstMapping *, double, int, const int [], const int [], const double [], const double [], int, const double [], int, double, int, double, int, const int [], const int [], const int [], const int [], double [], double [], double [], int *, int * );
-static void RebinSeqF( AstMapping *, double, int, const int [], const int [], const float [], const float [], int, const double [], int, double, int, float, int, const int [], const int [], const int [], const int [], float [], float [], double [], int *, int * );
-static void RebinSeqI( AstMapping *, double, int, const int [], const int [], const int [], const int [], int, const double [], int, double, int, int, int, const int [], const int [], const int [], const int [], int [], int [], double [], int *, int * );
-static void RebinSection( AstMapping *, const double *, int, const int *, const int *, const void *, const void *, DataType, int, const double *, int, const void *, int, const int *, const int *, const int *, const int *, int, void *, void *, double *, int *, int * );
-static void RebinWithBlocking( AstMapping *, const double *, int, const int *, const int *, const void *, const void *, DataType, int, const double *, int, const void *, int, const int *, const int *, const int *, const int *, int, void *, void *, double *, int *, int * );
-static void ReportPoints( AstMapping *, int, AstPointSet *, AstPointSet *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetInvert( AstMapping *, int, int * );
-static void SetReport( AstMapping *, int, int * );
-static void Sinc( double, const double [], int, double *, int * );
-static void SincCos( double, const double [], int, double *, int * );
-static void SincGauss( double, const double [], int, double *, int * );
-static void SincSinc( double, const double [], int, double *, int * );
-static void Somb( double, const double [], int, double *, int * );
-static void SombCos( double, const double [], int, double *, int * );
-static void SpreadKernel1D( AstMapping *, int, const int *, const int *, const double *, const double *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), int, const double *, int, double, int, double *, double *, double *, int *, int * );
-static void SpreadKernel1F( AstMapping *, int, const int *, const int *, const float *, const float *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), int, const double *, int, float, int, float *, float *, double *, int *, int * );
-static void SpreadKernel1I( AstMapping *, int, const int *, const int *, const int *, const int *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), int, const double *, int, int, int, int *, int *, double *, int *, int * );
-static void SpreadLinearD( int, const int *, const int *, const double *, const double *, int, const int *, const double *const *, int, double, int, double *, double *, double *, int *, int * );
-static void SpreadLinearF( int, const int *, const int *, const float *, const float *, int, const int *, const double *const *, int, float, int, float *, float *, double *, int *, int * );
-static void SpreadLinearI( int, const int *, const int *, const int *, const int *, int, const int *, const double *const *, int, int, int, int *, int *, double *, int *, int * );
-static void SpreadNearestD( int, const int *, const int *, const double *, const double *, int, const int *, const double *const *, int, double, int, double *, double *, double *, int *, int * );
-static void SpreadNearestF( int, const int *, const int *, const float *, const float *, int, const int *, const double *const *, int, float, int, float *, float *, double *, int *, int * );
-static void SpreadNearestI( int, const int *, const int *, const int *, const int *, int, const int *, const double *const *, int, int, int, int *, int *, double *, int *, int * );
-static void Tran1( AstMapping *, int, const double [], int, double [], int * );
-static void Tran2( AstMapping *, int, const double [], const double [], int, double [], double [], int * );
-static void TranGrid( AstMapping *, int, const int[], const int[], double, int, int, int, int, double *, int * );
-static void TranGridAdaptively( AstMapping *, int, const int[], const int[], const int[], const int[], double, int, int, double *[], int * );
-static void TranGridSection( AstMapping *, const double *, int, const int *, const int *, const int *, const int *, int, double *[], int * );
-static void TranGridWithBlocking( AstMapping *, const double *, int, const int *, const int *, const int *, const int *, int, double *[], int * );
-static void TranN( AstMapping *, int, int, int, const double *, int, int, int, double *, int * );
-static void TranP( AstMapping *, int, int, const double *[], int, int, double *[], int * );
-static void ValidateMapping( AstMapping *, int, int, int, int, const char *, int * );
-
-
-
-/* Member functions. */
-/* ================= */
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a Mapping.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Mapping member function (over-rides the astClearAttrib protected
-* method inherited from the Object class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* Mapping, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the Mapping.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstMapping *this; /* Pointer to the Mapping structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Mapping structure. */
- this = (AstMapping *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* Invert. */
-/* ------- */
- if ( !strcmp( attrib, "invert" ) ) {
- astClearInvert( this );
-
-/* Report. */
-/* ------- */
- } else if ( !strcmp( attrib, "report" ) ) {
- astClearReport( this );
-
-/* If the name was not recognised, test if it matches any of the
- read-only attributes of this class. If it does, then report an
- error. */
- } else if ( !strcmp( attrib, "nin" ) ||
- !strcmp( attrib, "nout" ) ||
- !strcmp( attrib, "issimple" ) ||
- !strcmp( attrib, "islinear" ) ||
- !strcmp( attrib, "tranforward" ) ||
- !strcmp( attrib, "traninverse" ) ) {
- astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
- "value for a %s.", status, attrib, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static void CombinePN( PN *lo, PN *hi, int *status ) {
-/*
-* Name:
-* CombinePN
-
-* Purpose:
-* Combine polynomials "lo" and "hi", both of order N, into a polynomial
-* of order N+1.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void CombinePN( PN *lo, PN *hi, int *status )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function combines polynomials "lo" and "hi", both of order N,
-* into a polynomial of order N+1, and return the new polynomial in
-* "lo". It is used to implemtn Neville's algorithm for finding an
-* interpolating polynomial. See:
-*
-* http://mathworld.wolfram.com/NevillesAlgorithm.html
-
-* Parameters:
-* lo
-* A polynomial covering the lower x interval. Returned holding the
-* combined higher-order polynomial.
-* hi
-* A polynomial covering the higher x interval. Unchanged on exit.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- int n, k;
- double f, xlo, xhi, cc[ RATE_ORDER + 1 ];
-
-/* Check the global error status */
- if ( !astOK ) return;
-
- n = lo->order;
- xlo = lo->xlo;
- xhi = hi->xhi;
-
- f = 1.0/( xlo - xhi );
-
- cc[ 0 ] = f*(- xhi*( lo->coeff[0]) + xlo*( hi->coeff[ 0 ] ) );
- for( k = 1; k <= n; k++ ) {
- cc[ k ] = f*( ( lo->coeff[ k - 1 ] ) - xhi*( lo->coeff[ k ] )
- -( hi->coeff[ k - 1 ] ) + xlo*( hi->coeff[ k ] ) );
- }
-
- cc[ n + 1 ] = f*( lo->coeff[ n ] - hi->coeff[ n ] );
-
- lo->order = n + 1;
- lo->xlo = xlo;
- lo->xhi = xhi;
- for( k = 0; k < n+2; k++ ) lo->coeff[ k ] = cc[ k ];
-
-}
-
-/*
-* Name:
-* ConserveFlux<X>
-
-* Purpose:
-* Scale the output data and variance values produced by ResampleSection
-* by the given flux conservation factor.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void ConserveFlux<X>( double factor, int npoint, const int *offset,
-* <Xtype> badval, <Xtype> *out,
-* <Xtype> *out_var )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This is a set of functions which scale the supplied resampled data
-* values by the given flux conservation factor. It also scales any
-* variances by the square of the factor.
-
-* Parameters:
-* factor
-* The flux conservation factor. This should be the ratio of the
-* output pixel size to the input pixel size, in the locality of
-* the supplied data values.
-* npoint
-* The number of points at which the input grid was resampled.
-* offset
-* Pointer to an array of integers with "npoint" elements. For
-* each output point, this array should contain the zero-based
-* offset in the output array(s) (i.e. the "out" and,
-* optionally, the "out_var" arrays) at which the resampled
-* output value(s) is stored.
-* badval
-* This parameter specifies the value which is used to identify
-* bad data and/or variance values in the output array(s).
-* out
-* Pointer to an array in which the resampled data is supplied. Note
-* that details of how the output grid maps on to this array
-* (e.g. the storage order, number of dimensions, etc.) is
-* arbitrary and is specified entirely by means of the "offset"
-* array. The "out" array should therefore contain sufficient
-* elements to accommodate the "offset" values supplied. There
-* is no requirement that all elements of the "out" array should
-* be assigned values, and any which are not addressed by the
-* contents of the "offset" array will be left unchanged.
-* out_var
-* An optional pointer to an array with the same data type and
-* size as the "out" array, in which variance estimates for
-* the resampled values are supplied. If no output variance estimates
-* are available, a NULL pointer should be given.
-
-* Notes:
-* - There is a separate function for each numerical type of
-* gridded data, distinguished by replacing the <X> in the function
-* name by the appropriate 1- or 2-character suffix.
-*/
-/* Define a macro to implement the function for a specific data
- type. */
-#define MAKE_CONSERVEFLUX(X,Xtype) \
-static void ConserveFlux##X( double factor, int npoint, const int *offset, \
- Xtype badval, Xtype *out, Xtype *out_var, int *status ) { \
-\
-/* Local Variables: */ \
- int off_out; /* Pixel offset into output array */ \
- int point; /* Loop counter for output points */ \
-\
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
- for ( point = 0; point < npoint; point++ ) { \
- off_out = offset[ point ]; \
- if( out[ off_out ] != badval ) out[ off_out ] *= factor; \
- } \
-\
- if( out_var ) { \
- factor *= factor; \
- for ( point = 0; point < npoint; point++ ) { \
- off_out = offset[ point ]; \
- if( out_var[ off_out ] != badval ) out_var[ off_out ] *= factor; \
- } \
- } \
-}
-
-
-/* Expand the macro above to generate a function for each required
- data type. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-MAKE_CONSERVEFLUX(LD,long double)
-#endif
-MAKE_CONSERVEFLUX(D,double)
-MAKE_CONSERVEFLUX(F,float)
-MAKE_CONSERVEFLUX(L,long int)
-MAKE_CONSERVEFLUX(I,int)
-MAKE_CONSERVEFLUX(S,short int)
-MAKE_CONSERVEFLUX(B,signed char)
-MAKE_CONSERVEFLUX(UL,unsigned long int)
-MAKE_CONSERVEFLUX(UI,unsigned int)
-MAKE_CONSERVEFLUX(US,unsigned short int)
-MAKE_CONSERVEFLUX(UB,unsigned char)
-
-/* Undefine the macros used above. */
-#undef MAKE_CONSERVEFLUX
-
-static void Decompose( AstMapping *this, AstMapping **map1, AstMapping **map2,
- int *series, int *invert1, int *invert2, int *status ) {
-/*
-*+
-* Name:
-* astDecompose
-
-* Purpose:
-* Decompose a Mapping into two component Mappings.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "mapping.h"
-* void astDecompose( AstMapping *this, AstMapping **map1,
-* AstMapping **map2, int *series, int *invert1,
-* int *invert2 )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-* This function returns pointers to two Mappings which, when applied
-* either in series or parallel, are equivalent to the supplied Mapping.
-*
-* Since the Frame class inherits from the Mapping class, Frames can
-* be considered as special types of Mappings and so this method can
-* be used to decompose CmpMaps, CmpFrames, CmpRegions or Prisms.
-
-* Parameters:
-* this
-* Pointer to the Mapping.
-* map1
-* Address of a location to receive a pointer to first component
-* Mapping.
-* map2
-* Address of a location to receive a pointer to second component
-* Mapping.
-* series
-* Address of a location to receive a value indicating if the
-* component Mappings are applied in series or parallel. A non-zero
-* value means that the supplied Mapping is equivalent to applying map1
-* followed by map2 in series. A zero value means that the supplied
-* Mapping is equivalent to applying map1 to the lower numbered axes
-* and map2 to the higher numbered axes, in parallel.
-* invert1
-* The value of the Invert attribute to be used with map1.
-* invert2
-* The value of the Invert attribute to be used with map2.
-
-* Applicability:
-* CmpMap
-* If the supplied Mapping is a CmpMap, then map1 and map2 will be
-* returned holding pointers to the component Mappings used to
-* create the CmpMap, either in series or parallel.
-* Mapping
-* For any class of Mapping other than a CmpMap, map1 will be
-* returned holding a clone of the supplied Mapping pointer, and map2
-* will be returned holding a NULL pointer.
-* CmpFrame
-* If the supplied Mapping is a CmpFrame, then map1 and map2 will be
-* returned holding pointers to the component Frames used to
-* create the CmpFrame. The component Frames are considered to be in
-* applied in parallel.
-* Frame
-* For any class of Frame other than a CmpFrame, map1 will be
-* returned holding a clone of the supplied Frame pointer, and map2
-* will be returned holding a NULL pointer.
-
-* Notes:
-* - Any changes made to the component Mappings using the returned
-* pointers will be reflected in the supplied Mapping.
-* - The returned Invert values should be used in preference to the
-* current values of the Invert attribute in map1 and map2. This is
-* because the attributes may have changed value since the Mappings
-* were combined.
-
-* Implementation Notes:
-* - This function implements the basic astDecompose method
-* available via the protected interface to the Frame class. The
-* public interface to this method is provided by the
-* astDecomposeId_ function.
-
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* The basic Mapping class returns a clone of the supplied Mapping as
- map1 and a NULL pointer as map2. */
- if( map1 ) *map1 = astClone( this );
- if( map2 ) *map2 = NULL;
- if( series ) *series = 1;
- if( invert1 ) *invert1 = astGetInvert( this );
- if( invert2 ) *invert2 = 0;
-}
-
-int astRateState_( int disabled, int *status ) {
-/*
-*+
-* Name:
-* astRateState
-
-* Purpose:
-* Control whether the astRate method is disabled or not.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "mapping.h"
-* int astRateState( int disabled )
-
-* Class Membership:
-* Mapping member function
-
-* Description:
-* Some algorithms which use use the astRate method do not actually need
-* to know what the Rate value is. For instance, when the Plot class draws
-* a border it evaluates the GRAPHICS->Current Mapping hundreds of time.
-* If the Mapping includes a RateMap then this can be very very slow
-* (depending on how the astRate method is implemented). In fact the
-* border drawing algorithm onlyneeds to know if the result is bad or
-* not - the actual value produced by the Mappign does not matter.
-*
-* Such algorithms can be speeded up by forcing the astRate method to
-* return a constant value rather than actually doing the numerical
-* differentiation. This can be accomplised by calling this method prior
-* to implementing the algorithm. It should be called at the end in
-* order to re-instate the original disabled flag.
-
-* Parameters:
-* disabled
-* The new value for the astRate disabled flag.
-
-* Returned Value:
-* The original value of the astRate disabled flag.
-
-*-
-*/
- astDECLARE_GLOBALS
- int result;
- astGET_GLOBALS(NULL);
-
- result = rate_disabled;
- rate_disabled = disabled;
- return result;
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two Mappings are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* Mapping member function (over-rides the astEqual protected
-* method inherited from the Object class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two Mappings are equivalent.
-*
-* The implementation provided by this class (the base Mapping class)
-* simply reports an error when called, since all concrete Mapping
-* subclasses should provide their own implementation.
-*
-* Note, sub-class implementations should not use astSimplify (e.g.
-* combining the two Mapping and then simplifying it), since the
-* astSimplify method for certain classes (e.g. CmpMap) may use
-* astEqual. Consequently, if astEqual called astSimplify, there would
-* be possibilities for infinite loops.
-
-* Parameters:
-* this
-* Pointer to the first Object (a Mapping).
-* that
-* Pointer to the second Object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the Frames are equivalent, zero otherwise.
-
-* Notes:
-* - The two Mappings are considered equivalent if the combination of
-* the first in series with the inverse of the second simplifies to a
-* UnitMap.
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Invoke the Equal method inherited from the parent Object class. This checks
- that the Objects are both of the same class (amongst other things). */
- if( (*parent_equal)( this_object, that_object, status ) ) {
-
-/* Report an error since the concrete sub-class should have over-riden
- this method. */
- astError( AST__INTER, "astEqual(Mapping): The %s class does "
- "not override the abstract astEqual method inherited "
- "from the base Mapping class (internal AST programming "
- "error).", status, astGetClass( this_object ) );
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static void FunPN( AstMapping *map, double *at, int ax1, int ax2,
- int n, double *x, double *y, int *status ) {
-/*
-* Name:
-* FunPN
-
-* Purpose:
-* Find the value of the function currently being differentiated by the
-* astRate method.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void FunPN( AstMapping *map, double *at, int ax1, int ax2,
-* int n, double *x, double *y, int *status )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-* This is a service function for the astRate method. It evaluates the
-* function being differentiated at specified axis values.
-*
-* This function uses static resources in order to avoid the overhead
-* of creating new PointSets each time this function is called. These
-* static resources which must be initialised before the first invocation
-* with a given Mapping, and must be released after the final invocation.
-* See "ax1".
-
-* Parameters:
-* map
-* Pointer to a Mapping which yields the value of the function at x.
-* The Mapping may have any number of inputs and outputs; the specific
-* output representing the function value, f, is specified by ax1 and
-* the specific input representing the argument, x, is specified by ax2.
-* at
-* A pointer to an array holding axis values at the position at which
-* the function is to be evaluated. The number of values supplied
-* must equal the number of inputs to the Mapping. The value supplied
-* for axis "ax2" is ignored (the value of "x" is used for axis "ax2").
-* ax1
-* The zero-based index of the Mapping output which is to be
-* differentiated. Set this to -1 to allocate, or -2 to release,
-* the static resources used by this function.
-* ax2
-* The zero-based index of the Mapping input which is to be varied.
-* n
-* The number of elements in the "x" and "y" arrays. This should not
-* be greater than 2*RATE_ORDER.
-* x
-* The value of the Mapping input specified by ax2 at which the
-* function is to be evaluated. If "ax2" is set to -1, then the
-* supplied value is used as flag indicating if the static resources
-* used by this function should be initialised (if x >= 0 ) or
-* freed (if x < 0).
-* y
-* An array in which to return the function values at the positions
-* given in "x".
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS
- AstPointSet *pset1;
- AstPointSet *pset2;
- double **ptr1;
- double **ptr2;
- double *oldx;
- double *oldy;
- double *p;
- double xx;
- int i;
- int k;
- int nin;
- int nout;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(map);
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- pset2 = NULL;
-
-/* If required, initialise things. */
- if( ax1 == -1 ) {
- for( i = 0; i < FUNPN_MAX_CACHE; i++ ) {
- funpn_pset_size[ i ] = 0;
- funpn_pset1_cache[ i ] = NULL;
- funpn_pset2_cache[ i ] = NULL;
- }
- funpn_next_slot = 0;
-
-/* If required, clean up. */
- } else if( ax1 == -2 ) {
- for( i = 0; i < FUNPN_MAX_CACHE; i++ ) {
- funpn_pset_size[ i ] = 0;
- if( funpn_pset1_cache[ i ] ) funpn_pset1_cache[ i ] = astAnnul( funpn_pset1_cache[ i ] );
- if( funpn_pset2_cache[ i ] ) funpn_pset2_cache[ i ] = astAnnul( funpn_pset2_cache[ i ] );
- }
- funpn_next_slot = 0;
-
-/* Otherwise do the transformations. */
- } else {
-
-/* See if we have already created PointSets of the correct size. */
- pset1 = NULL;
- for( i = 0; i < FUNPN_MAX_CACHE; i++ ) {
- if( funpn_pset_size[ i ] == n ) {
- pset1 = funpn_pset1_cache[ i ];
- pset2 = funpn_pset2_cache[ i ];
- break;
- }
- }
-
-/* If we have not, create new PointSets now. */
- if( pset1 == NULL ) {
- nin = astGetNin( map );
- pset1 = astPointSet( n, nin, "", status );
- ptr1 = astGetPoints( pset1 );
-
- nout = astGetNout( map );
- pset2 = astPointSet( n, nout, "", status );
- ptr2 = astGetPoints( pset2 );
-
-/* Store the input position in the input PointSet. */
- for( i = 0; i < nin; i++ ) {
- xx = at[ i ];
- p = ptr1[ i ];
- for( k = 0; k < n; k++, p++ ) *p = xx;
- }
-
-/* Add these new PointSets to the cache, removing any existing
- PointSets. */
- if( funpn_pset_size[ funpn_next_slot ] > 0 ) {
- (void) astAnnul( funpn_pset1_cache[ funpn_next_slot ] );
- (void) astAnnul( funpn_pset2_cache[ funpn_next_slot ] );
- }
- funpn_pset1_cache[ funpn_next_slot ] = pset1;
- funpn_pset2_cache[ funpn_next_slot ] = pset2;
- funpn_pset_size[ funpn_next_slot ] = n;
- if( ++funpn_next_slot == FUNPN_MAX_CACHE ) funpn_next_slot = 0;
-
-/* If existing PointSets were found, get there data arrays. */
- } else {
- ptr1 = astGetPoints( pset1 );
- ptr2 = astGetPoints( pset2 );
- }
-
-/* Store the input X values in the input PointSet data array. */
- oldx = ptr1[ ax2 ];
- ptr1[ ax2 ] = x;
-
-/* Store the output Y values in the output PointSet data array. */
- oldy = ptr2[ ax1 ];
- ptr2[ ax1 ] = y;
-
-/* Transform the positions. */
- (void) astTransform( map, pset1, 1, pset2 );
-
-/* Re-instate the original arrays in the PointSets. */
- ptr1[ ax2 ] = oldx;
- ptr2[ ax1 ] = oldy;
-
- }
-}
-
-static double EvaluateDPN( PN *pn, double x, int *status ) {
-/*
-* Name:
-* EvaluateDPN
-
-* Purpose:
-* Evaluate the gradient of a polynomial at a given x value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* double EvaluateDPN( PN *pn, double x, int *status )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-* This function evaluates the gradient of the supplied polynomial
-* at the supplied x value.
-
-* Parameters:
-* pn
-* Pointer to the structure describing the polynomial.
-* x
-* The x value at which to evaluate the polynomial gradient.
-* status
-* Pointer to the inherited status variable.
-
-* Returns:
-* The polynomial gradient value.
-*/
-
-/* Local Variables: */
- int n, i;
- double ret;
-
-/* Initialise */
- ret = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK || !pn ) return ret;
-
- n = pn->order;
-
- ret = n*pn->coeff[ n ];
- for( i = n - 1; i > 0; i-- ) {
- ret = i*pn->coeff[ i ] + ret*x;
- }
-
- return ret;
-
-}
-
-static double EvaluatePN( PN *pn, double x, int *status ) {
-/*
-* Name:
-* EvaluatePN
-
-* Purpose:
-* Evaluate a polynomial at a given x value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* static double EvaluatePN( PN *pn, double x, int *status ) {
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-* This function evaluates the supplied polynomial at the supplied x
-* value.
-
-* Parameters:
-* pn
-* Pointer to the structure descirbing the polynomial.
-* x
-* The x value at which to evaluate the polynomial.
-* status
-* Pointer to the inherited status variable.
-
-* Returns:
-* The polynomial value.
-*/
-
-/* Local Variables: */
- int n, i;
- double ret;
-
-/* Initialise */
- ret = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK || !pn ) return ret;
-
- n = pn->order;
- ret = pn->coeff[ n ];
- for( i = n - 1; i >= 0; i-- ) {
- ret = pn->coeff[ i ] + ret*x;
- }
-
- return ret;
-
-}
-
-static PN *FitPN( AstMapping *map, double *at, int ax1, int ax2, double x0,
- double h, double *rms, int *status ){
-/*
-* Name:
-* FitPN
-
-* Purpose:
-* Fit a polynomial to the function being differentiated and return
-* the RMS residual.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* PN *FitPN( AstMapping *map, double *at, int ax1, int ax2, double x0,
-* double h, double *rms, int *status )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-* This function finds a polynomial which interpolates a set of evenly
-* spaced samples of the function being differentiated by the astRate
-* method. The coefficients of this polynomial are returned, together
-* with the RMS residual between the polynomial and the function at points
-* mid way between the interpolating points.
-
-* Parameters:
-* map
-* Pointer to a Mapping which yields the value of the function at x.
-* The Mapping may have any number of inputs and outputs; the specific
-* output representing the function value, f, is specified by ax1 and
-* the specific input representing the argument, x, is specified by ax2.
-* at
-* A pointer to an array holding axis values at the position at which
-* the function is to be evaluated. The number of values supplied
-* must equal the number of inputs to the Mapping. The value supplied
-* for axis "ax2" is ignored (the value of "x" is used for axis "ax2").
-* ax1
-* The zero-based index of the Mapping output which is to be
-* differentiated. Set this to -1 to allocate, or -2 to release,
-* the static resources used by this function.
-* ax2
-* The zero-based index of the Mapping input which is to be varied.
-* x0
-* The central axis value at which the function is to be evaluated.
-* h
-* The interval over which the fitting is to be performed.
-* rms
-* A pointer to a location at which to return the RMS residual
-* between the returned polynomial and the function, estimated at
-* points mid way between the interpolating points. May be NULL.
-* status
-* Pointer to the inherited status variable.
-
-* Returns:
-* The PN structure holding the polynomial coefficients, etc, or NULL
-* if no polynomial can be fitted. The independant variable of the
-* polynomial is (x-x0) and the dependant variable is (y(x)-y(x0)).
-* The value of y(x0) is stored in the returned PN structure. The
-* memory used to store the polynomial should be freed using astFree
-* when no longer needed.
-*/
-
-/* Local Variables: */
- double x[ RATE_ORDER + 2 ], y[ RATE_ORDER + 2 ], dh, off, s2, e, mean,
- max, min;
- PN *ret;
- int i0, i, n;
-
-/* Initialise */
- ret = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return ret;
-
-/* Store the x values at (RATE_ORDER+1) evenly spaced points over the interval
- "h" centred on "x0". */
- i0 = RATE_ORDER/2;
- dh = h/RATE_ORDER;
-
- for( i = 0; i <= RATE_ORDER; i++ ) {
- x[ i ] = x0 + ( i - i0 )*dh;
- }
-
-/* Get the function values at these positions. */
- FunPN( map, at, ax1, ax2, RATE_ORDER + 1, x, y, status );
-
-/* Get the mean, max and min function value. */
- mean = max = min = y[ 0 ];
- if( mean == AST__BAD ) return NULL;
- for( i = 1; i <= RATE_ORDER; i++ ) {
-
- if( y[ i ] == AST__BAD ) return NULL;
-
- mean += y[ i ];
-
- if( y[ i ] > max ) {
- max = y[ i ];
-
- } else if( y[ i ] < min ) {
- min = y[ i ];
-
- }
- }
-
-/* Convert the x values into x offsets from "x0", and convert the y
- values into y offsets from the central y value. */
- off = y[ i0 ];
- if( off == AST__BAD ) return NULL;
- for( i = 0; i <= RATE_ORDER; i++ ) {
- if( y[ i ] == AST__BAD ) {
- return NULL;
- } else {
- y[ i ] -= off;
- x[ i ] -= x0;
- }
- }
-
-/* Find the polynomial which interpolates these points. */
- ret = InterpPN( RATE_ORDER + 1, x, y, status );
- if( ret ) {
- ret->y0 = off;
-
-/* Indicate if the dynamic range of the function values is clsoe to zero. */
- ret->too_small = ( max - min <= 1.0E-6*fabs( mean )/( RATE_ORDER + 1 ) );
-
-/* If required, find the rms error between the polynomial and the
- function at points mid-way between the interpolating points. */
- if( rms ) {
-
-/* Store the x values at which to evaluate the function. These are the
- points mid way between the interpolating points (plus one beyond each
- end). */
- dh *= 0.5;
- for( i = 0; i <= RATE_ORDER; i++ ) {
- x[ i ] += x0 - dh;
- }
- x[ RATE_ORDER + 1 ] = x[ RATE_ORDER ] + 2*dh;
-
-/* Evaluate the function at these positions. */
- FunPN( map, at, ax1, ax2, RATE_ORDER + 2, x, y, status );
-
-/* Loop round evaluating the polynomial fit and incrementing the sum of
- the squared residuals. */
- s2 = 0.0;
- n = 0;
- for( i = 0; i <= RATE_ORDER + 1; i++ ) {
- if( y[ i ] != AST__BAD ) {
- e = EvaluatePN( ret, x[ i ] - x0, status ) + off - y[ i ];
- s2 += e*e;
- n++;
- }
- }
-
-/* Evaluate the rms residual. */
- if( n > 1 ) {
- *rms = sqrt( s2/( RATE_ORDER + 2 ) );
- } else {
- *rms = AST__BAD;
- }
- }
- }
-
- return ret;
-
-}
-
-static void Gauss( double offset, const double params[], int flags,
- double *value, int *status ) {
-/*
-* Name:
-* Gauss
-
-* Purpose:
-* 1-dimensional Gaussian spreading kernel.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void Gauss( double offset, const double params[], int flags,
-* double *value, int *status )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function calculates the value of a 1-dimensional sub-pixel
-* spreading kernel. The function used is exp(-k*x*x).
-
-* Parameters:
-* offset
-* The offset of a pixel from the central output point, measured
-* in pixels.
-* params
-* The first element of this array should give a value for "k"
-* in the exp(-k*x*x) term.
-* flags
-* Not used.
-* value
-* Pointer to a double to receive the calculated kernel value.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function does not perform error checking and does not
-* generate errors.
-*/
-
-/* Calculate the result. */
- *value = exp( -params[ 0 ] * offset * offset );
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a Mapping.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Mapping member function (over-rides the protected astGetAttrib
-* method inherited from the Object class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a Mapping, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the Mapping.
-* attrib
-* Pointer to a null terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a null terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the Mapping, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the Mapping. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMapping *this; /* Pointer to the Mapping structure */
- const char *result; /* Pointer value to return */
- int invert; /* Invert attribute value */
- int islinear; /* IsLinear attribute value */
- int issimple; /* IsSimple attribute value */
- int nin; /* Nin attribute value */
- int nout; /* Nout attribute value */
- int report; /* Report attribute value */
- int tran_forward; /* TranForward attribute value */
- int tran_inverse; /* TranInverse attribute value */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the Mapping structure. */
- this = (AstMapping *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null terminated string in an appropriate
- format. Set "result" to point at the result string. */
-
-/* Invert. */
-/* ------- */
- if ( !strcmp( attrib, "invert" ) ) {
- invert = astGetInvert( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", invert );
- result = getattrib_buff;
- }
-
-/* IsLinear. */
-/* --------- */
- } else if ( !strcmp( attrib, "islinear" ) ) {
- islinear = astGetIsLinear( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", islinear );
- result = getattrib_buff;
- }
-
-/* IsSimple. */
-/* --------- */
- } else if ( !strcmp( attrib, "issimple" ) ) {
- issimple = astGetIsSimple( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", issimple );
- result = getattrib_buff;
- }
-
-/* Nin. */
-/* ---- */
- } else if ( !strcmp( attrib, "nin" ) ) {
- nin = astGetNin( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", nin );
- result = getattrib_buff;
- }
-
-/* Nout. */
-/* ----- */
- } else if ( !strcmp( attrib, "nout" ) ) {
- nout = astGetNout( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", nout );
- result = getattrib_buff;
- }
-
-/* Report. */
-/* ------- */
- } else if ( !strcmp( attrib, "report" ) ) {
- report = astGetReport( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", report );
- result = getattrib_buff;
- }
-
-/* TranForward. */
-/* ------------ */
- } else if ( !strcmp( attrib, "tranforward" ) ) {
- tran_forward = astGetTranForward( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", tran_forward );
- result = getattrib_buff;
- }
-
-/* TranInverse. */
-/* ------------ */
- } else if ( !strcmp( attrib, "traninverse" ) ) {
- tran_inverse = astGetTranInverse( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", tran_inverse );
- result = getattrib_buff;
- }
-
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int GetIsLinear( AstMapping *this, int *status ) {
-/*
-*+
-* Name:
-* astGetIsLinear
-
-* Purpose:
-* Determine if a Mapping is an instance of a linear Mapping class.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "mapping.h"
-* int astGetIsLinear( AstMapping *this )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-* This function returns a value indicating whether a Mapping is
-* a member of a class of linear Mappings. The base Mapping class
-* returns a value of zero. Linear Mapping classes should over-ride
-* this function to return a non-zero value.
-
-* Parameters:
-* this
-* Pointer to the Mapping.
-
-* Returned Value:
-* One if the Mapping is a member of a linear Mapping class. Zero
-* otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
- return 0;
-}
-
-static int GetNin( AstMapping *this, int *status ) {
-/*
-*+
-* Name:
-* astGetNin
-
-* Purpose:
-* Get the number of input coordinates for a Mapping.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "mapping.h"
-* int astGetNin( AstMapping *this )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-* This function returns the number of input coordinate values
-* required per point by a Mapping (i.e. the number of dimensions
-* of the space in which input points reside).
-
-* Parameters:
-* this
-* Pointer to the Mapping.
-
-* Returned Value:
-* Number of coordinate values required.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- int invert; /* Invert attribute value */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Determine if the Mapping has been inverted. */
- invert = astGetInvert( this );
-
-/* Obtain the Nin value. */
- if ( astOK ) result = invert ? this->nout : this->nin;
-
-/* Return the result. */
- return result;
-}
-
-static int GetNout( AstMapping *this, int *status ) {
-/*
-*+
-* Name:
-* astGetNout
-
-* Purpose:
-* Get the number of output coordinates for a Mapping.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "mapping.h"
-* int astGetNout( AstMapping *this )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-* This function returns the number of output coordinate values
-* generated per point by a Mapping (i.e. the number of dimensions
-* of the space in which output points reside).
-
-* Parameters:
-* this
-* Pointer to the Mapping.
-
-* Returned Value:
-* Number of coordinate values generated.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- int invert; /* Invert attribute value */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Determine if the Mapping has been inverted. */
- invert = astGetInvert( this );
-
-/* Obtain the Nout value. */
- if ( astOK ) result = invert ? this->nin : this->nout;
-
-/* Return the result. */
- return result;
-}
-
-static int GetTranForward( AstMapping *this, int *status ) {
-/*
-*+
-* Name:
-* astGetTranForward
-
-* Purpose:
-* Determine if a Mapping defines a forward coordinate transformation.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "mapping.h"
-* int astGetTranForward( AstMapping *this )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-* This function returns a value indicating whether a Mapping is
-* able to perform a coordinate transformation in the "forward"
-* direction.
-
-* Parameters:
-* this
-* Pointer to the Mapping.
-
-* Returned Value:
-* Zero if the forward coordinate transformation is not defined, or
-* 1 if it is.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- int invert; /* Mapping inverted? */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Determine if the Mapping has been inverted. */
- invert = astGetInvert( this );
-
-/* If OK, obtain the result. */
- if ( astOK ) result = invert ? this->tran_inverse : this->tran_forward;
-
-/* Return the result. */
- return result;
-}
-
-static int GetTranInverse( AstMapping *this, int *status ) {
-/*
-*+
-* Name:
-* astGetTranInverse
-
-* Purpose:
-* Determine if a Mapping defines an inverse coordinate transformation.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "mapping.h"
-* int astGetTranInverse( AstMapping *this )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-* This function returns a value indicating whether a Mapping is
-* able to perform a coordinate transformation in the "inverse"
-* direction.
-
-* Parameters:
-* this
-* Pointer to the Mapping.
-
-* Returned Value:
-* Zero if the inverse coordinate transformation is not defined, or
-* 1 if it is.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- int invert; /* Mapping inverted? */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Determine if the Mapping has been inverted. */
- invert = astGetInvert( this );
-
-/* If OK, obtain the result. */
- if ( astOK ) result = invert ? this->tran_forward : this->tran_inverse;
-
-/* Return the result. */
- return result;
-}
-
-static void GlobalBounds( MapData *mapdata, double *lbnd, double *ubnd,
- double xl[], double xu[], int *status ) {
-/*
-* Name:
-* GlobalBounds
-
-* Purpose:
-* Estimate global coordinate bounds for a Mapping.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void GlobalBounds( MapData *mapdata, double *lbnd, double *ubnd,
-* double xl[], double xu[], int *status );
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function estimates the global lower and upper bounds of a
-* Mapping function within a constrained region of its input
-* coordinate space. It uses a robust global optimisation algorithm
-* based on the selection of pseudo-random starting positions,
-* followed by the location of local minima and maxima using the
-* downhill (or uphill) simplex method. The algorithm will cope
-* with the case where there are several competing minima (or
-* maxima) with nearly equal values. It attempts to locate the
-* global bounds to full machine precision when possible.
-
-* Parameters:
-* mapdata
-* Pointer to a MapData structure describing the Mapping
-* function, its coordinate constraints, etc.
-* lbnd
-* Pointer to a double. On entry, this should contain a
-* previously-obtained upper limit on the global lower bound, or
-* AST__BAD if no such limit is available. On exit, it will be
-* updated with a new estimate of the global lower bound, if a
-* better one has been found.
-* ubnd
-* Pointer to a double. On entry, this should contain a
-* previously-obtained lower limit on the global upper bound, or
-* AST__BAD if no such limit is available. On exit, it will be
-* updated with a new estimate of the global upper bound, if a
-* better one has been found.
-* xl
-* Pointer to an array of double, with one element for each
-* input coordinate. On entry, if *lbnd is not equal to AST__OK,
-* this should contain the input coordinates of a point at which
-* the Mapping function takes the value *lbnd. On exit, this
-* function returns the position of a (not necessarily unique)
-* input point at which the Mapping function takes the value of
-* the new global lower bound. This array is not altered if an
-* improved estimate of the global lower bound cannot be found.
-* xu
-* Pointer to an array of double, with one element for each
-* input coordinate. On entry, if *ubnd is not equal to AST__OK,
-* this should contain the input coordinates of a point at which
-* the Mapping function takes the value *ubnd. On exit, this
-* function returns the position of a (not necessarily unique)
-* input point at which the Mapping function takes the value of
-* the new global upper bound. This array is not altered if an
-* improved estimate of the global upper bound cannot be found.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The efficiency of this function will usually be improved if
-* previously-obtained estimates of the extrema and their locations
-* are provided.
-* - The values returned via "lbnd", "ubnd", "xl" and "xu" will be
-* set to the value AST__BAD if this function should fail for any
-* reason. Their initial values on entry will not be altered if the
-* function is invoked with the global error status set.
-*/
-
-/* Local Constants: */
- const double default_acc = 3.0e-5; /* Default convergence accuracy */
- const int maxiter = 10000; /* Maximum number of iterations */
- const int minsame = 5; /* Minimum no. consistent extrema required */
- const int nbatch = 32; /* No. function samples obtained per batch */
-
-/* Local Variables: */
- AstPointSet *pset_in; /* Input PointSet for batch transformation */
- AstPointSet *pset_out; /* Output PointSet for batch transformation */
- double **ptr_in; /* Pointer to batch input coordinates */
- double **ptr_out; /* Pointer to batch output coordinates */
- double *active_hi; /* Estimated upper limits of active region */
- double *active_lo; /* Estimated lower limits of active region */
- double *sample_hi; /* Upper limits of sampled region */
- double *sample_lo; /* Lower limits of sampled region */
- double *sample_width; /* Nominal widths of sampled region */
- double *x; /* Pointer to array of coordinates */
- double acc; /* Convergence accuracy for finding maximum */
- double active_width; /* Estimated width of active region */
- double new_max; /* Value of new local maximum */
- double new_min; /* Value of new local minimum */
- double oversize; /* Over-size factor for sampled region */
- double random; /* Pseudo-random number */
- int bad; /* Transformed position is bad? */
- int batch; /* Next element to use in position batch */
- int coord; /* Loop counter for coordinates */
- int done_max; /* Satisfactory global maximum found? */
- int done_min; /* Satisfactory global minimum found? */
- int iter; /* Loop counter for iterations */
- int ncall; /* Number of Mapping function calls (junk) */
- int ncoord; /* Number of coordinates in search space */
- int nmax; /* Number of local maxima found */
- int nmin; /* Number of local minima found */
- int nsame_max; /* Number of equivalent local maxima found */
- int nsame_min; /* Number of equivalent local minima found */
- long int seed = 1776655449; /* Arbitrary pseudo-random number seed */
-
-/* Check the global error status */
- if ( !astOK ) return;
-
-/* Initialise. */
- done_max = 0;
- done_min = 0;
- ncall = 0;
- nmax = 0;
- nmin = 0;
- nsame_max = 0;
- nsame_min = 0;
- pset_in = NULL;
- pset_out = NULL;
- ptr_in = NULL;
- ptr_out = NULL;
- oversize = 0;
- bad = 0;
-
-/* Extract the number of input coordinates for the Mapping function
- and allocate workspace. */
- ncoord = mapdata->nin;
- active_hi = astMalloc( sizeof( double ) * (size_t) ncoord );
- active_lo = astMalloc( sizeof( double ) * (size_t) ncoord );
- sample_hi = astMalloc( sizeof( double ) * (size_t) ncoord );
- sample_lo = astMalloc( sizeof( double ) * (size_t) ncoord );
- sample_width = astMalloc( sizeof( double ) * (size_t) ncoord );
- x = astMalloc( sizeof( double ) * (size_t) ncoord );
- if ( astOK ) {
-
-/* Calculate the factor by which the size of the region we sample will
- exceed the size of the Mapping function's active region (the region
- where the transformed coordinates are non-bad) in each
- dimension. This is chosen so that the volume ratio will be 2. */
- oversize = pow( 2.0, 1.0 / (double) ncoord );
-
-/* Initialise the limits of the active region to unknown. */
- for ( coord = 0; coord < ncoord; coord++ ) {
- active_lo[ coord ] = DBL_MAX;;
- active_hi[ coord ] = -DBL_MAX;
-
-/* Initialise the nominal widths of the sampled region to be the
- actual widths of the search region times the over-size factor. */
- sample_width[ coord ] = ( mapdata->ubnd[ coord ] -
- mapdata->lbnd[ coord ] ) * oversize;
-
-/* Initialise the sampled region to match the search region. */
- sample_lo[ coord ] = mapdata->lbnd[ coord ];
- sample_hi[ coord ] = mapdata->ubnd[ coord ];
- }
-
-/* Set up position buffer. */
-/* ======================= */
-/* Create two PointSets to act as buffers to hold a complete batch of
- input and output coordinates. Obtain pointers to their coordinate
- arrays. */
- pset_in = astPointSet( nbatch, ncoord, "", status );
- pset_out = astPointSet( nbatch, mapdata->nout, "", status );
- ptr_in = astGetPoints( pset_in );
- ptr_out = astGetPoints( pset_out );
-
-/* Initialise the next element to be used in the position buffer to
- indicate that the buffer is initially empty. */
- batch = nbatch;
- }
-
-/* Define a macro to fill the position buffer with a set of
- pseudo-random positions and to transform them. */
-#define FILL_POSITION_BUFFER {\
-\
-/* We first generate a suitable volume over which to distribute the\
- batch of pseudo-random positions. Initially, this will be the\
- entire search volume, but if we find that the only non-bad\
- transformed coordinates we obtain are restricted to a small\
- sub-region of this input volume, then we reduce the sampled volume\
- so as to concentrate more on the active region. */\
-\
-/* Loop through each input coordinate, checking that at least one\
- non-bad transformed point has been obtained. If not, we do not\
- adjust the sampled volume, as we do not yet know where the active\
- region lies. */\
- for ( coord = 0; coord < ncoord; coord++ ) {\
- if ( active_hi[ coord ] >= active_lo[ coord ] ) {\
-\
-/* Estimate the width of the active region from the range of input\
- coordinates that have so far produced non-bad transformed\
- coordinates. */\
- active_width = active_hi[ coord ] - active_lo[ coord ];\
-\
-/* If the current width of the sampled volume exceeds this estimate by\
- more than the required factor, then reduce the width of the sampled\
- volume. The rate of reduction is set so that the volume of the\
- sampled region can halve with every fourth batch of positions. */\
- if ( ( active_width * oversize ) < sample_width[ coord ] ) {\
- sample_width[ coord ] /= pow( oversize, 0.25 );\
-\
-/* If the width of the sampled volume does not exceed that of the\
- known active region by the required factor, then adjust it so that\
- it does. Note that we must continue to sample some points outside\
- the known active region in case we have missed any (in which case\
- the sampled region will expand again to include them). */\
- } else if ( ( active_width * oversize ) > sample_width[ coord ] ) {\
- sample_width[ coord ] = active_width * oversize;\
- }\
-\
-/* Calculate the lower and upper bounds on the sampled volume, using\
- the new width calculated above and centring it on the active\
- region, as currently known. */\
- sample_lo[ coord ] = ( active_lo[ coord ] + active_hi[ coord ] -\
- sample_width[ coord ] ) * 0.5;\
- sample_hi[ coord ] = ( active_lo[ coord ] + active_hi[ coord ] +\
- sample_width[ coord ] ) * 0.5;\
-\
-/* Ensure that the sampled region does not extend beyond the original\
- search region. */\
- if ( sample_lo[ coord ] < mapdata->lbnd[ coord ] ) {\
- sample_lo[ coord ] = mapdata->lbnd[ coord ];\
- }\
- if ( sample_hi[ coord ] > mapdata->ubnd[ coord ] ) {\
- sample_hi[ coord ] = mapdata->ubnd[ coord ];\
- }\
- }\
- }\
-\
-/* Having determined the size of the sampled volume, create a batch of\
- pseudo-random positions uniformly distributed within it. */\
- for ( batch = 0; batch < nbatch; batch++ ) {\
- for ( coord = 0; coord < ncoord; coord++ ) {\
- random = Random( &seed, status );\
- ptr_in[ coord ][ batch ] = sample_lo[ coord ] * random +\
- sample_hi[ coord ] * ( 1.0 - random );\
- }\
- }\
-\
-/* Transform these positions. We process them in a single batch in\
- order to minimise the overheads in doing this. */\
- (void) astTransform( mapdata->mapping, pset_in, mapdata->forward,\
- pset_out );\
-\
-/* Indicate that the position buffer is now full. */\
- batch = 0;\
-}
-
-/* Fill the position buffer using the above macro. (Note that because
- we do not yet have an estimate of the size of the active region,
- this does not change the sampled region size from our earlier
- initialised values. */
- FILL_POSITION_BUFFER;
-
-/* Iterate. */
-/* ======== */
-/* Loop to perform up to "maxiter" iterations to estimate the global
- minimum and maximum. */
- for ( iter = 0; astOK && ( iter < maxiter ); iter++ ) {
-
-/* Determine the search accuracy. */
-/* ============================== */
-/* Decide the accuracy to which local extrema should be found. The
- intention here is to optimise performance, especially where one
- extremum lies near zero and so could potentially be found to
- unnecessarily high precision. If we make a mis-assumption (the code
- below is not fool-proof), we will slow things down for this
- iteration, but the error will be corrected in future iterations
- once better estimates are available. */
-
-/* If we have no current estimate of either global extremum, we assume
- the values we eventually obtain will be of order unity and required
- to the default accuracy. */
- acc = default_acc;
-
-/* If we already have an estimate of both global extrema, we set the
- accuracy level so that the difference between them will be known to
- the default accuracy. */
- if ( ( *lbnd != AST__BAD ) && ( *ubnd != AST__BAD ) ) {
- acc = fabs( *ubnd - *lbnd ) * default_acc;
-
-/* If we have an estimate of only one global extremum, we assume that
- the difference between the two global extrema will eventually be of
- the same order as the estimate we currently have, so long as this
- is not less than unity. */
- } else if ( *lbnd != AST__BAD ) {
- if ( fabs( *lbnd ) > 1.0 ) acc = fabs( *lbnd) * default_acc;
- } else if ( *ubnd != AST__BAD ) {
- if ( fabs( *ubnd ) > 1.0 ) acc = fabs( *ubnd) * default_acc;
- }
-
-/* Search for a new local minimum. */
-/* =============================== */
-/* If we are still searching for the global minimum, then obtain a set
- of starting coordinates from which to find a new local minimum. */
- if ( !done_min ) {
-
-/* On the first iteration, start searching at the position where the
- best estimate of the global minimum (if any) has previously been
- found. We know that this produces non-bad transformed
- coordinates. */
- bad = 0;
- if ( !iter && ( *lbnd != AST__BAD ) ) {
- for ( coord = 0; coord < ncoord; coord++ ) {
- x[ coord ] = xl[ coord ];
- }
-
-/* Otherwise, if no estimate of the global minimum is available, then
- start searching at the position where the best estimate of the
- global maximum (if any) has been found. This may be a long way from
- a local minimum, but at least it will yield a non-bad value for the
- Mapping function, so some sort of estimate of the global minimum
- will be obtained. This is important in cases where finding the
- active region of the function is the main problem. Note that this
- condition can only occur once, since the global minimum will have
- an estimate on the next iteration. */
- } else if ( ( *lbnd == AST__BAD ) && ( *ubnd != AST__BAD ) ) {
- for ( coord = 0; coord < ncoord; coord++ ) {
- x[ coord ] = xu[ coord ];
- }
-
-/* Having exhausted the above possibilities, we use pseudo-random
- starting positions which are uniformly distributed throughout the
- search volume. First check to see if the buffer containing such
- positions is empty and refill it if necessary. */
- } else {
- if ( batch >= nbatch ) FILL_POSITION_BUFFER;
-
-/* Test the next available set of output (transformed) coordinates in
- the position buffer to see if they are bad. */
- if ( astOK ) {
- for ( coord = 0; coord < mapdata->nout; coord++ ) {
- bad = ( ptr_out[ coord ][ batch ] == AST__BAD );
- if ( bad ) break;
- }
-
-/* If not, we have a good starting position for finding a local
- minimum, so extract the corresponding input coordinates. */
- if ( !bad ) {
- for ( coord = 0; coord < ncoord; coord++ ) {
- x[ coord ] = ptr_in[ coord ][ batch ];
- }
- }
-
-/* Increment the position buffer location. */
- batch++;
- }
- }
-
-/* If we do not have a good starting position, we can't do anything
- more on this iteration. A new position will be obtained and tested
- on the next iteration and this (we hope) will eventually identify a
- suitable starting point. */
- if ( astOK && !bad ) {
-
-/* Form estimates of the lower and upper limits of the active region
- from the starting positions used. */
- for ( coord = 0; coord < ncoord; coord++ ) {
- if ( x[ coord ] < active_lo[ coord ] ) {
- active_lo[ coord ] = x[ coord ];
- }
- if ( x[ coord ] > active_hi[ coord ] ) {
- active_hi[ coord ] = x[ coord ];
- }
- }
-
-/* Indicate that the Mapping function should be negated (because we
- want a local minimum) and then search for a local maximum in this
- negated function. If the result is non-bad (as it should always be,
- barring an error), then negate it to obtain the value of the local
- minimum found. */
- mapdata->negate = 1;
- new_min = LocalMaximum( mapdata, acc, 0.01, x, status );
- if ( new_min != AST__BAD ) {
- new_min = -new_min;
-
-/* Update the estimates of the lower and upper bounds of the active
- region to take account of where the minimum was found. */
- for ( coord = 0; coord < ncoord; coord++ ) {
- if ( x[ coord ] < active_lo[ coord ] ) {
- active_lo[ coord ] = x[ coord ];
- }
- if ( x[ coord ] > active_hi[ coord ] ) {
- active_hi[ coord ] = x[ coord ];
- }
- }
-
-/* Count the number of times we successfully locate a local minimum
- (ignoring the fact they might all be the same one). */
- nmin++;
-
-/* Update the global minimum. */
-/* ========================== */
-/* If this is the first estimate of the global minimum, then set to
- one the count of the number of consecutive iterations where this
- estimate remains unchanged. Store the minimum value and its
- position. */
- if ( *lbnd == AST__BAD ) {
- nsame_min = 1;
- *lbnd = new_min;
- for ( coord = 0; coord < ncoord; coord++ ) {
- xl[ coord ] = x[ coord ];
- }
-
-/* Otherwise, test if this local minimum is lower than the previous
- estimate of the global minimum. If so, then reset the count of
- unchanged estimates of the global mimimum to one if the difference
- exceeds the accuracy with which the minimum was found (i.e. if we
- have found a significantly different minimum). Otherwise, just
- increment this count (because we have found the same minimum but by
- chance with slightly improved accuracy). Store the new minimum and
- its position. */
- } else if ( new_min < *lbnd ) {
- nsame_min = ( ( *lbnd - new_min ) > acc ) ? 1 :
- nsame_min + 1;
- *lbnd = new_min;
- for ( coord = 0; coord < ncoord; coord++ ) {
- xl[ coord ] = x[ coord ];
- }
-
-/* If the latest local minimum is no improvement on previous estimates
- of the global minimum, then increment the count of unchanged
- estimates of the global mimimum, but do not save the new one. */
- } else {
- nsame_min++;
- }
-
-/* Determine if a satisfactory estimate of the global minimum has been
- obtained. It has if the number of consecutive local minima which
- have not significantly improved the estimate is at least equal to
- "minsame", and at least 30% of the total number of local minima
- found. */
- if ( ( nsame_min >= minsame ) &&
- ( nsame_min >= (int) ( 0.3f * (float) nmin + 0.5f ) ) ) {
- done_min = 1;
- }
- }
- }
- }
-
-/* Search for a new local maximum. */
-/* =============================== */
-/* Now repeat all of the above to find a new local maximum which
- estimates the global maximum. */
- if ( !done_max ) {
-
-/* Choose a suitable starting position, based on one already available
- if appropriate. */
- if ( !iter && ( *ubnd != AST__BAD ) ) {
- for ( coord = 0; coord < ncoord; coord++ ) {
- x[ coord ] = xu[ coord ];
- }
-
- } else if ( ( *ubnd == AST__BAD ) && ( *lbnd != AST__BAD ) ) {
- for ( coord = 0; coord < ncoord; coord++ ) {
- x[ coord ] = xl[ coord ];
- }
-
-/* Otherwise use a pseudo-random position, refilling the position
- buffer if necessary. Check if the transformed coordinates are
- bad. */
- } else {
- if ( batch >= nbatch ) FILL_POSITION_BUFFER;
- if ( astOK ) {
- for ( coord = 0; coord < mapdata->nout; coord++ ) {
- bad = ( ptr_out[ coord ][ batch ] == AST__BAD );
- if ( bad ) break;
- }
- if ( !bad ) {
- for ( coord = 0; coord < ncoord; coord++ ) {
- x[ coord ] = ptr_in[ coord ][ batch ];
- }
- }
- batch++;
- }
- }
-
-/* If the coordinates are OK, update the active region limits. */
- if ( astOK && !bad ) {
- for ( coord = 0; coord < ncoord; coord++ ) {
- if ( x[ coord ] < active_lo[ coord ] ) {
- active_lo[ coord ] = x[ coord ];
- }
- if ( x[ coord ] > active_hi[ coord ] ) {
- active_hi[ coord ] = x[ coord ];
- }
- }
-
-/* Find a local maximum in the Mapping function. */
- mapdata->negate = 0;
- new_max = LocalMaximum( mapdata, acc, 0.01, x, status );
- if ( new_max != AST__BAD ) {
-
-/* Use the result to further update the active region limits. */
- for ( coord = 0; coord < ncoord; coord++ ) {
- if ( x[ coord ] < active_lo[ coord ] ) {
- active_lo[ coord ] = x[ coord ];
- }
- if ( x[ coord ] > active_hi[ coord ] ) {
- active_hi[ coord ] = x[ coord ];
- }
- }
-
-/* Count the number of local maxima found. */
- nmax++;
-
-/* Update the estimate of the global maximum. */
- if ( *ubnd == AST__BAD ) {
- nsame_max = 1;
- *ubnd = new_max;
- for ( coord = 0; coord < ncoord; coord++ ) {
- xu[ coord ] = x[ coord ];
- }
-
- } else if ( new_max > *ubnd ) {
- nsame_max = ( ( new_max - *ubnd ) > acc ) ? 1 :
- nsame_max + 1;
- *ubnd = new_max;
- for ( coord = 0; coord < ncoord; coord++ ) {
- xu[ coord ] = x[ coord ];
- }
-
- } else {
- nsame_max++;
- }
-
-/* Test for a satisfactory global maximum estimate. */
- if ( ( nsame_max >= minsame ) &&
- ( nsame_max >= (int) ( 0.3f * (float) nmax + 0.5 ) ) ) {
- done_max = 1;
- }
- }
- }
- }
-
-/* Quit iterating once both the global minimum and the global maximum
- have been found. */
- if ( done_min && done_max ) break;
- }
-
-/* Free workspace. */
- active_hi = astFree( active_hi );
- active_lo = astFree( active_lo );
- sample_hi = astFree( sample_hi );
- sample_lo = astFree( sample_lo );
- sample_width = astFree( sample_width );
- x = astFree( x );
-
-/* Annul temporary PointSets. */
- pset_in = astAnnul( pset_in );
- pset_out = astAnnul( pset_out );
-
-/* If the global minimum has been found, attempt to polish the result
- to machine precision by requesting that it be found with an
- accuracy tolerance of zero (subject to the maximum number of
- iterations that LocalMaximum will perform,). */
- if ( astOK ) {
- if ( *lbnd != AST__BAD ) {
- mapdata->negate = 1;
- *lbnd = LocalMaximum( mapdata, 0.0, sqrt( DBL_EPSILON ), xl, status );
- if ( *lbnd != AST__BAD ) *lbnd = - *lbnd;
- }
-
-/* Similarly polish the estimate of the global maximum. */
- if ( *ubnd != AST__BAD ) {
- mapdata->negate = 0;
- *ubnd = LocalMaximum( mapdata, 0.0, sqrt( DBL_EPSILON ), xu, status );
- }
-
-/* If either extremum could not be found, then report an error. */
- if ( ( *lbnd == AST__BAD ) || ( *ubnd == AST__BAD ) ) {
- astError( AST__MBBNF, "astMapBox(%s): No valid output coordinates "
- "(after %d test points).", status, astGetClass( mapdata->mapping ),
- 2 * maxiter );
- }
-
-/* If an error occurred, then return bad extremum values and
- coordinates. */
- if ( !astOK ) {
- *lbnd = AST__BAD;
- *ubnd = AST__BAD;
- for ( coord = 0; coord < ncoord; coord++ ) {
- xl[ coord ] = AST__BAD;
- xu[ coord ] = AST__BAD;
- }
- }
- }
-
-/* Undefine macros local to this function. */
-#undef FILL_POSITION_BUFFER
-}
-
-void astInitMappingVtab_( AstMappingVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitMappingVtab
-
-* Purpose:
-* Initialise a virtual function table for a Mapping.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "mapping.h"
-* void astInitMappingVtab( AstMappingVtab *vtab, const char *name )
-
-* Class Membership:
-* Mapping vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the Mapping class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitObjectVtab( (AstObjectVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAMapping) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstObjectVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
- vtab->ResampleLD = ResampleLD;
- vtab->RebinLD = RebinLD;
- vtab->RebinSeqLD = RebinSeqLD;
-#endif
- vtab->ClearInvert = ClearInvert;
- vtab->ClearReport = ClearReport;
- vtab->Decompose = Decompose;
- vtab->GetInvert = GetInvert;
- vtab->GetIsLinear = GetIsLinear;
- vtab->GetIsSimple = GetIsSimple;
- vtab->GetNin = GetNin;
- vtab->GetNout = GetNout;
- vtab->GetReport = GetReport;
- vtab->GetTranForward = GetTranForward;
- vtab->GetTranInverse = GetTranInverse;
- vtab->Invert = Invert;
- vtab->LinearApprox = LinearApprox;
- vtab->MapBox = MapBox;
- vtab->MapList = MapList;
- vtab->MapMerge = MapMerge;
- vtab->MapSplit = MapSplit;
- vtab->Rate = Rate;
- vtab->ReportPoints = ReportPoints;
- vtab->RebinD = RebinD;
- vtab->RebinF = RebinF;
- vtab->RebinI = RebinI;
- vtab->RebinSeqD = RebinSeqD;
- vtab->RebinSeqF = RebinSeqF;
- vtab->RebinSeqI = RebinSeqI;
- vtab->RemoveRegions = RemoveRegions;
- vtab->ResampleB = ResampleB;
- vtab->ResampleD = ResampleD;
- vtab->ResampleF = ResampleF;
- vtab->ResampleI = ResampleI;
- vtab->ResampleL = ResampleL;
- vtab->ResampleS = ResampleS;
- vtab->ResampleUB = ResampleUB;
- vtab->ResampleUI = ResampleUI;
- vtab->ResampleUL = ResampleUL;
- vtab->ResampleUS = ResampleUS;
- vtab->SetInvert = SetInvert;
- vtab->SetReport = SetReport;
- vtab->Simplify = Simplify;
- vtab->TestInvert = TestInvert;
- vtab->TestReport = TestReport;
- vtab->Tran1 = Tran1;
- vtab->Tran2 = Tran2;
- vtab->TranGrid = TranGrid;
- vtab->TranN = TranN;
- vtab->TranP = TranP;
- vtab->Transform = Transform;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
- parent_equal = object->Equal;
- object->Equal = Equal;
-
-/* Declare the destructor, copy constructor and dump function. */
- astSetDelete( vtab, Delete );
- astSetCopy( vtab, Copy );
- astSetDump( vtab, Dump, "Mapping", "Mapping between coordinate systems" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-/*
-* Name:
-* InterpolateKernel1<X>
-
-* Purpose:
-* Resample a data grid, using a 1-d interpolation kernel.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int InterpolateKernel1<X>( AstMapping *this, int ndim_in,
-* const int *lbnd_in, const int *ubnd_in,
-* const <Xtype> *in, const <Xtype> *in_var,
-* int npoint, const int *offset,
-* const double *const *coords,
-* void (* kernel)( double, const double [], int,
-* double *, int * ),
-* void (* fkernel)( double, const double [], int,
-* double * ),
-* int neighb, const double *params, int flags,
-* <Xtype> badval,
-* <Xtype> *out, <Xtype> *out_var )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This is a set of functions which resample a rectangular input
-* grid of data (and, optionally, associated statistical variance
-* values) so as to place them into a new output grid. Each output
-* grid point may be mapped on to a position in the input grid in
-* an arbitrary way. The input and output grids may have any number
-* of dimensions, not necessarily equal.
-*
-* Where the positions given do not correspond with a pixel centre
-* in the input grid, interpolation is performed using a weighted
-* sum of the surrounding pixel values. The weights are determined
-* by a separable kernel which is the product of a 1-dimensional
-* kernel function evaluated along each input dimension. A pointer
-* should be supplied to the 1-dimensional kernel function to be
-* used.
-
-* Parameters:
-* this
-* Pointer to the Mapping being used in the resampling operation
-* (this is only used for constructing error messages).
-* ndim_in
-* The number of dimensions in the input grid. This should be at
-* least one.
-* lbnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the first
-* pixel in the input grid along each dimension.
-* ubnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the last
-* pixel in the input grid along each dimension.
-*
-* Note that "lbnd_in" and "ubnd_in" together define the shape
-* and size of the input grid, its extent along a particular
-* (i'th) dimension being ubnd_in[i]-lbnd_in[i]+1 (assuming "i"
-* is zero-based). They also define the input grid's coordinate
-* system, with each pixel being of unit extent along each
-* dimension with integral coordinate values at its centre.
-* in
-* Pointer to the array of data to be resampled (with an element
-* for each pixel in the input grid). The numerical type of
-* these data should match the function used, as given by the
-* suffix on the function name. The storage order should be such
-* that the index of the first grid dimension varies most
-* rapidly and that of the final dimension least rapidly
-* (i.e. Fortran array storage order).
-* in_var
-* An optional pointer to a second array of positive numerical
-* values (with the same size and type as the "in" array), which
-* represent estimates of the statistical variance associated
-* with each element of the "in" array. If this second array is
-* given (along with the corresponding "out_var" array), then
-* estimates of the variance of the resampled data will also be
-* returned.
-*
-* If no variance estimates are required, a NULL pointer should
-* be given.
-* npoint
-* The number of points at which the input grid is to be
-* resampled.
-* offset
-* Pointer to an array of integers with "npoint" elements. For
-* each output point, this array should contain the zero-based
-* offset in the output array(s) (i.e. the "out" and,
-* optionally, the "out_var" arrays) at which the resampled
-* output value(s) should be stored.
-* coords
-* An array of pointers to double, with "ndim_in"
-* elements. Element "coords[coord]" should point at the first
-* element of an array of double (with "npoint" elements) which
-* contains the values of coordinate number "coord" for each
-* interpolation point. The value of coordinate number "coord"
-* for interpolation point number "point" is therefore given by
-* "coords[coord][point]" (assuming both indices to be
-* zero-based). If any point has a coordinate value of AST__BAD
-* associated with it, then the corresponding output data (and
-* variance) will be set to the value given by "badval" (unles the
-* AST__NOBAD flag is specified).
-* kernel
-* Pointer to the 1-dimensional kernel function to be used.
-* fkernel
-* Pointer to the 1-dimensional kernel function to be used with no
-* trailing status argument. This is only used if "kernel" is NULL.
-* neighb
-* The number of neighbouring pixels in each dimension (on each
-* side of the interpolation position) which are to contribute
-* to the interpolated value. This value should be at least 1.
-* params
-* Pointer to an optional array of parameter values to be passed
-* to the interpolation kernel function. If no parameters are
-* required by this function, then a NULL pointer may be
-* supplied.
-* flags
-* The bitwise OR of a set of flag values which provide
-* additional control over the resampling operation.
-* badval
-* If the AST__USEBAD flag is set in the "flags" value (above),
-* this parameter specifies the value which is used to identify
-* bad data and/or variance values in the input array(s). Its
-* numerical type must match that of the "in" (and "in_var")
-* arrays. Unles the AST__NOBAD flag is specified in "flags", the
-* same value will also be used to flag any output array elements
-* for which resampled values could not be obtained. The output
-* arrays(s) may be flagged with this value whether or not the
-* AST__USEBAD flag is set (the function return value indicates
-* whether any such values have been produced).
-* out
-* Pointer to an array with the same data type as the "in"
-* array, into which the resampled data will be returned. Note
-* that details of how the output grid maps on to this array
-* (e.g. the storage order, number of dimensions, etc.) is
-* arbitrary and is specified entirely by means of the "offset"
-* array. The "out" array should therefore contain sufficient
-* elements to accommodate the "offset" values supplied. There
-* is no requirement that all elements of the "out" array should
-* be assigned values, and any which are not addressed by the
-* contents of the "offset" array will be left unchanged.
-* out_var
-* An optional pointer to an array with the same data type and
-* size as the "out" array, into which variance estimates for
-* the resampled values may be returned. This array will only be
-* used if the "in_var" array has been given. It is addressed in
-* exactly the same way (via the "offset" array) as the "out"
-* array. The values returned are estimates of the statistical
-* variance of the corresponding values in the "out" array, on
-* the assumption that all errors in input grid values (in the
-* "in" array) are statistically independent and that their
-* variance estimates (in the "in_var" array) may simply be
-* summed (with appropriate weighting factors).
-*
-* If no output variance estimates are required, a NULL pointer
-* should be given.
-
-* Returned Value:
-* The number of output grid points for which no valid output value
-* could be obtained.
-
-* Notes:
-* - There is a separate function for each numerical type of
-* gridded data, distinguished by replacing the <X> in the function
-* name by the appropriate 1- or 2-character suffix.
-* - A value of zero will be returned if any of these functions is
-* invoked with the global error status set, or if it should fail
-* for any reason.
-*/
-/* Define macros to implement the function for a specific data
- type. */
-#define MAKE_INTERPOLATE_KERNEL1(X,Xtype,Xfloating,Xfloattype,Xsigned) \
-static int InterpolateKernel1##X( AstMapping *this, int ndim_in, \
- const int *lbnd_in, const int *ubnd_in, \
- const Xtype *in, const Xtype *in_var, \
- int npoint, const int *offset, \
- const double *const *coords, \
- void (* kernel)( double, const double [], \
- int, double *, int * ), \
- void (* fkernel)( double, const double [], \
- int, double * ), \
- int neighb, const double *params, \
- int flags, Xtype badval, \
- Xtype *out, Xtype *out_var, int *status ) { \
-\
-/* Local Variables: */ \
- astDECLARE_GLOBALS /* Thread-specific data */ \
- Xfloattype hi_lim; /* Upper limit on output values */ \
- Xfloattype lo_lim; /* Lower limit on output values */ \
- Xfloattype sum; /* Weighted sum of pixel data values */ \
- Xfloattype sum_var; /* Weighted sum of pixel variance values */ \
- Xfloattype val; /* Data value to be assigned to output */ \
- Xfloattype val_var; /* Variance to be assigned to output */ \
- Xfloattype wtsum; /* Sum of weight values */ \
- Xfloattype wtsum_sq; /* Square of sum of weights */ \
- Xtype var; /* Variance value */ \
- double **wtptr; /* Pointer to array of weight pointers */ \
- double **wtptr_last; /* Array of highest weight pointer values */ \
- double *kval; /* Pointer to array of kernel values */ \
- double *wtprod; /* Accumulated weight value array pointer */ \
- double *xn_max; /* Pointer to upper limits array (n-d) */ \
- double *xn_min; /* Pointer to lower limits array (n-d) */ \
- double pixwt; /* Weight to apply to individual pixel */ \
- double wt_y; /* Value of y-dependent pixel weight */ \
- double x; /* x coordinate value */ \
- double xmax; /* x upper limit */ \
- double xmin; /* x lower limit */ \
- double xn; /* Coordinate value (n-d) */ \
- double y; /* y coordinate value */ \
- double ymax; /* y upper limit */ \
- double ymin; /* y lower limit */ \
- int *hi; /* Pointer to array of upper indices */ \
- int *lo; /* Pointer to array of lower indices */ \
- int *stride; /* Pointer to array of dimension strides */ \
- int bad; /* Output pixel bad? */ \
- int bad_var; /* Output variance bad? */ \
- int done; /* All pixel indices done? */ \
- int hi_x; /* Upper pixel index (x dimension) */ \
- int hi_y; /* Upper pixel index (y dimension) */ \
- int idim; /* Loop counter for dimensions */ \
- int ii; /* Loop counter for dimensions */ \
- int ix; /* Pixel index in input grid x dimension */ \
- int ixn; /* Pixel index in input grid (n-d) */ \
- int iy; /* Pixel index in input grid y dimension */ \
- int kerror; /* Error signalled by kernel function? */ \
- int lo_x; /* Lower pixel index (x dimension) */ \
- int lo_y; /* Lower pixel index (y dimension) */ \
- int nobad; /* Was the AST__NOBAD flag set? */ \
- int off1; /* Input pixel offset due to y index */ \
- int off_in; /* Offset to input pixel */ \
- int off_out; /* Offset to output pixel */ \
- int pixel; /* Offset to input pixel containing point */ \
- int point; /* Loop counter for output points */ \
- int result; /* Result value to return */ \
- int s; /* Temporary variable for strides */ \
- int usebad; /* Use "bad" input pixel values? */ \
- int usevar; /* Process variance array? */ \
- int ystride; /* Stride along input grid y dimension */ \
-\
-/* Initialise. */ \
- result = 0; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* Get a pointer to a structure holding thread-specific global data values */ \
- astGET_GLOBALS(this); \
-\
-/* Further initialisation. */ \
- kerror = 0; \
- sum_var = 0; \
- val = 0; \
- val_var = 0; \
- wtsum = 0; \
- bad = 0; \
- bad_var = 0; \
- sum = 0.0; \
-\
-/* Determine if we are processing bad pixels or variances. */ \
- nobad = flags & AST__NOBAD; \
- usebad = flags & AST__USEBAD; \
- usevar = in_var && out_var; \
-\
-/* Set up limits for checking output values to ensure that they do not \
- overflow the range of the data type being used. */ \
- lo_lim = LO_##X; \
- hi_lim = HI_##X; \
-\
-/* Handle the 1-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
- if ( ndim_in == 1 ) { \
-\
-/* Calculate the coordinate limits of the input grid. */ \
- xmin = (double) lbnd_in[ 0 ] - 0.5; \
- xmax = (double) ubnd_in[ 0 ] + 0.5; \
-\
-/* Identify four cases, according to whether bad pixels and/or \
- variances are being processed. In each case, loop through all the \
- output points to (a) assemble the input data needed to form the \
- interpolated value, and (b) calculate the result and assign it to \
- the output arrays(s). In each case we assign constant values (0 or \
- 1) to the "Usebad" and "Usevar" flags so that code for handling bad \
- pixels and variances can be eliminated when not required. */ \
- if ( nobad ) { \
- if ( usebad ) { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,1,1) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,0,1) \
- } \
- } \
- } else { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,1,1) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,0,1) \
- } \
- } \
- } \
-\
-/* Four more cases as above, but this time with the AST__NOBAD flag \
- un-set. */ \
- } else { \
- if ( usebad ) { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,1,0) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,0,0) \
- } \
- } \
- } else { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,1,0) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,0,0) \
- } \
- } \
- } \
- } \
-\
-/* Exit point on error in kernel function */ \
- Kernel_Error_1d: ; \
-\
-/* Handle the 2-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
- } else if ( ndim_in == 2 ) { \
-\
-/* Allocate workspace. */ \
- kval = astMalloc( sizeof( double ) * (size_t) ( 2 * neighb ) ); \
- if ( astOK ) { \
-\
-/* Calculate the stride along the y dimension of the input grid. */ \
- ystride = ubnd_in[ 0 ] - lbnd_in[ 0 ] + 1; \
-\
-/* Calculate the coordinate limits of the input grid in each \
- dimension. */ \
- xmin = (double) lbnd_in[ 0 ] - 0.5; \
- xmax = (double) ubnd_in[ 0 ] + 0.5; \
- ymin = (double) lbnd_in[ 1 ] - 0.5; \
- ymax = (double) ubnd_in[ 1 ] + 0.5; \
-\
-/* Identify four cases, according to whether bad pixels and/or \
- variances are being processed. In each case, loop through all the \
- output points to (a) assemble the input data needed to form the \
- interpolated value, and (b) calculate the result and assign it to \
- the output arrays(s). In each case we assign constant values (0 or \
- 1) to the "Usebad" and "Usevar" flags so that code for handling bad \
- pixels and variances can be eliminated when not required. */ \
- if ( nobad ) { \
- if ( usebad ) { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,1,1) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,0,1) \
- } \
- } \
- } else { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,1,1) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,0,1) \
- } \
- } \
- } \
-\
-/* Another four cases, as above, but this time without the AST__NOBAD \
- flag. */ \
- } else { \
- if ( usebad ) { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,1,0) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,0,0) \
- } \
- } \
- } else { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,1,0) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,0,0) \
- } \
- } \
- } \
- } \
-\
-/* Exit point on error in kernel function */ \
- Kernel_Error_2d: ; \
- } \
-\
-/* Free the workspace. */ \
- kval = astFree( kval ); \
-\
-/* Handle other numbers of dimensions. */ \
-/* ----------------------------------- */ \
- } else { \
-\
-/* Allocate workspace. */ \
- hi = astMalloc( sizeof( int ) * (size_t) ndim_in ); \
- lo = astMalloc( sizeof( int ) * (size_t) ndim_in ); \
- stride = astMalloc( sizeof( int ) * (size_t) ndim_in ); \
- xn_max = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
- xn_min = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
- kval = astMalloc( sizeof( double ) * (size_t) \
- ( 2 * neighb * ndim_in ) ); \
- wtprod = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
- wtptr = astMalloc( sizeof( double * ) * (size_t) ndim_in ); \
- wtptr_last = astMalloc( sizeof( double * ) * (size_t) ndim_in ); \
- if ( astOK ) { \
-\
-/* Calculate the stride along each dimension of the input grid. */ \
- for ( s = 1, idim = 0; idim < ndim_in; idim++ ) { \
- stride[ idim ] = s; \
- s *= ubnd_in[ idim ] - lbnd_in[ idim ] + 1; \
-\
-/* Calculate the coordinate limits of the input grid in each \
- dimension. */ \
- xn_min[ idim ] = (double) lbnd_in[ idim ] - 0.5; \
- xn_max[ idim ] = (double) ubnd_in[ idim ] + 0.5; \
- } \
-\
-/* Identify four cases, according to whether bad pixels and/or \
- variances are being processed. In each case, loop through all the \
- output points to (a) assemble the input data needed to form the \
- interpolated value, and (b) calculate the result and assign it to \
- the output arrays(s). In each case we assign constant values (0 or \
- 1) to the "Usebad" and "Usevar" flags so that code for handling bad \
- pixels and variances can be eliminated when not required. */ \
- if( nobad ) { \
- if ( usebad ) { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,1,1) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,0,1) \
- } \
- } \
- } else { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,1,1) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,0,1) \
- } \
- } \
- } \
-\
-/* Another 4 cases as above, but this time with the AST__NOBAD flag \
- un-set. */ \
- } else { \
- if ( usebad ) { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,1,0) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,0,0) \
- } \
- } \
- } else { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,1,0) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,0,0) \
- } \
- } \
- } \
- } \
-\
-/* Exit point on error in kernel function */ \
- Kernel_Error_Nd: ;\
- } \
-\
-/* Free the workspace. */ \
- hi = astFree( hi ); \
- lo = astFree( lo ); \
- stride = astFree( stride ); \
- xn_max = astFree( xn_max ); \
- xn_min = astFree( xn_min ); \
- kval = astFree( kval ); \
- wtprod = astFree( wtprod ); \
- wtptr = astFree( wtptr ); \
- wtptr_last = astFree( wtptr_last ); \
- } \
-\
-/* If an error occurred in the kernel function, then report a \
- contextual error message. */ \
- if ( kerror ) { \
- astError( astStatus, "astResample"#X"(%s): Error signalled by " \
- "user-supplied 1-d interpolation kernel.", status, \
- astGetClass( unsimplified_mapping ) ); \
- } \
-\
-/* If an error has occurred, clear the returned result. */ \
- if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
- return result; \
-}
-
-/* This subsidiary macro assembles the input data needed in
- preparation for forming the interpolated value in the 1-dimensional
- case. */
-#define ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,Usebad,Usevar) \
-\
-/* Obtain the x coordinate of the current point and test if it lies \
- outside the input grid, or is bad. */ \
- x = coords[ 0 ][ point ]; \
- bad = ( x < xmin ) || ( x >= xmax ) || ( x == AST__BAD ); \
- if ( !bad ) { \
-\
-/* If input bad pixels must be detected, then obtain the offset along \
- the input grid x dimension of the input pixel which contains the \
- current coordinate, and calculate this pixel's offset from the \
- start of the input array. */ \
- if ( Usebad ) { \
- pixel = (int) floor( x + 0.5 ) - lbnd_in[ 0 ]; \
-\
-/* Test if the pixel is bad. */ \
- bad = ( in[ pixel ] == badval ); \
- } \
-\
-/* If OK, calculate the lowest and highest indices (in the x \
- dimension) of the region of neighbouring pixels that will \
- contribute to the interpolated result. Constrain these values to \
- lie within the input grid. */ \
- if ( !bad ) { \
- ix = (int) floor( x ); \
- lo_x = MaxI( ix - neighb + 1, lbnd_in[ 0 ], status ); \
- hi_x = MinI( ix + neighb, ubnd_in[ 0 ], status ); \
-\
-/* Initialise sums for forming the interpolated result. */ \
- sum = (Xfloattype) 0.0; \
- wtsum = (Xfloattype) 0.0; \
- if ( Usevar ) { \
- sum_var = (Xfloattype) 0.0; \
- bad_var = 0; \
- } \
-\
-/* Loop to inspect all the contributing pixels, calculating the offset \
- of each pixel from the start of the input array. */ \
- off_in = lo_x - lbnd_in[ 0 ]; \
- for ( ix = lo_x; ix <= hi_x; ix++, off_in++ ) { \
-\
-/* If necessary, test if the input pixel is bad. If not, calculate its \
- weight by evaluating the kernel function. */ \
- if ( !( Usebad ) || ( in[ off_in ] != badval ) ) { \
- if( kernel ) { \
- ( *kernel )( (double) ix - x, params, flags, &pixwt, status ); \
- } else { \
- ( *fkernel )( (double) ix - x, params, flags, &pixwt ); \
- } \
-\
-/* Check for errors arising in the kernel function. */ \
- if ( !astOK ) { \
- kerror = 1; \
- goto Kernel_Error_1d; \
- } \
-\
-/* Form the weighted sums required for finding the interpolated \
- value. */ \
- sum += ( (Xfloattype) pixwt ) * ( (Xfloattype) in[ off_in ] ); \
- wtsum += (Xfloattype) pixwt; \
-\
-/* If a variance estimate is required and it still seems possible to \
- obtain one, then obtain the variance value associated with the \
- current input pixel. */ \
- if ( Usevar ) { \
- if ( !( ( Xsigned ) || ( Usebad ) ) || !bad_var ) { \
- var = in_var[ off_in ]; \
-\
-/* If necessary, test if this value is bad (if the data type is \
- signed, also check that it is not negative). */ \
- if ( Usebad ) bad_var = ( var == badval ); \
- CHECK_FOR_NEGATIVE_VARIANCE(Xtype) \
-\
-/* If any bad input variance value is obtained, we cannot generate a \
- valid output variance estimate. Otherwise, form the sum needed to \
- calculate this estimate. */ \
- if ( !( ( Xsigned ) || ( Usebad ) ) || !bad_var ) { \
- sum_var += ( (Xfloattype) ( pixwt * pixwt ) ) * \
- ( (Xfloattype) var ); \
- } \
- } \
- } \
- } \
- } \
- } \
- }
-
-/* This subsidiary macro assembles the input data needed in
- preparation for forming the interpolated value in the 2-dimensional
- case. */
-#define ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,Usebad,Usevar) \
-\
-/* Obtain the x coordinate of the current point and test if it lies \
- outside the input grid, or is bad. */ \
- x = coords[ 0 ][ point ]; \
- bad = ( x < xmin ) || ( x >= xmax ) || ( x == AST__BAD ); \
- if ( !bad ) { \
-\
-/* If not, then similarly obtain and test the y coordinate. */ \
- y = coords[ 1 ][ point ]; \
- bad = ( y < ymin ) || ( y >= ymax ) || ( y == AST__BAD ); \
- if ( !bad ) { \
-\
-/* If input bad pixels must be detected, then obtain the offsets along \
- each input grid dimension of the input pixel which contains the \
- current coordinates, and calculate this pixel's offset from the \
- start of the input array. */ \
- if ( Usebad ) { \
- ix = (int) floor( x + 0.5 ); \
- iy = (int) floor( y + 0.5 ); \
- pixel = ix - lbnd_in[ 0 ] + ystride * ( iy - lbnd_in[ 1 ] ); \
-\
-/* Test if the pixel is bad. */ \
- bad = ( in[ pixel ] == badval ); \
- } \
-\
-/* If OK, calculate the lowest and highest indices (in each dimension) \
- of the region of neighbouring pixels that will contribute to the \
- interpolated result. Constrain these values to lie within the input \
- grid. */ \
- if ( !bad ) { \
- ix = (int) floor( x ); \
- lo_x = MaxI( ix - neighb + 1, lbnd_in[ 0 ], status ); \
- hi_x = MinI( ix + neighb, ubnd_in[ 0 ], status ); \
- iy = (int) floor( y ); \
- lo_y = MaxI( iy - neighb + 1, lbnd_in[ 1 ], status ); \
- hi_y = MinI( iy + neighb, ubnd_in[ 1 ], status ); \
-\
-/* Loop to evaluate the kernel function along the x dimension, storing \
- the resulting values. The function's argument is the offset of the \
- contributing pixel (along this dimension) from the input \
- position. */ \
- for ( ix = lo_x; ix <= hi_x; ix++ ) { \
- if( kernel ) { \
- ( *kernel )( (double) ix - x, params, flags, \
- kval + ix - lo_x, status ); \
- } else { \
- ( *fkernel )( (double) ix - x, params, flags, \
- kval + ix - lo_x ); \
- } \
-\
-/* Check for errors arising in the kernel function. */ \
- if ( !astOK ) { \
- kerror = 1; \
- goto Kernel_Error_2d; \
- } \
- } \
-\
-/* Initialise sums for forming the interpolated result. */ \
- sum = (Xfloattype) 0.0; \
- wtsum = (Xfloattype) 0.0; \
- if ( Usevar ) { \
- sum_var = (Xfloattype) 0.0; \
- bad_var = 0; \
- } \
-\
-/* Loop over the y index to inspect all the contributing pixels, while \
- keeping track of their offset within the input array. Evaluate the \
- kernel function for each y index value. */ \
- off1 = lo_x - lbnd_in[ 0 ] + ystride * ( lo_y - lbnd_in[ 1 ] ); \
- for ( iy = lo_y; iy <= hi_y; iy++, off1 += ystride ) { \
- if( kernel ) { \
- ( *kernel )( (double) iy - y, params, flags, &wt_y, status ); \
- } else { \
- ( *fkernel )( (double) iy - y, params, flags, &wt_y ); \
- } \
-\
-/* Check for errors arising in the kernel function. */ \
- if ( !astOK ) { \
- kerror = 1; \
- goto Kernel_Error_2d; \
- } \
-\
-/* Loop over the x index, calculating the pixel offset in the input \
- array. */ \
- off_in = off1; \
- for ( ix = lo_x; ix <= hi_x; ix++, off_in++ ) { \
-\
-/* If necessary, test if the input pixel is bad. If not, calculate its \
- weight as the product of the kernel function's value for the x and \
- y dimensions. */ \
- if ( !( Usebad ) || ( in[ off_in ] != badval ) ) { \
- pixwt = kval[ ix - lo_x ] * wt_y; \
-\
-/* Form the weighted sums required for finding the interpolated \
- value. */ \
- sum += ( (Xfloattype) pixwt ) * \
- ( (Xfloattype) in[ off_in ] ); \
- wtsum += (Xfloattype) pixwt; \
-\
-/* If a variance estimate is required and it still seems possible to \
- obtain one, then obtain the variance value associated with the \
- current input pixel. */ \
- if ( Usevar ) { \
- if ( !( ( Xsigned ) || ( Usebad ) ) || !bad_var ) { \
- var = in_var[ off_in ]; \
-\
-/* If necessary, test if this value is bad (if the data type is \
- signed, also check that it is not negative). */ \
- if ( Usebad ) bad_var = ( var == badval ); \
- CHECK_FOR_NEGATIVE_VARIANCE(Xtype) \
-\
-/* If any bad input variance value is obtained, we cannot generate a \
- valid output variance estimate. Otherwise, form the sum needed to \
- calculate this estimate. */ \
- if ( !( ( Xsigned ) || ( Usebad ) ) || \
- !bad_var ) { \
- sum_var += ( (Xfloattype) ( pixwt * pixwt ) ) * \
- ( (Xfloattype) var ); \
- } \
- } \
- } \
- } \
- } \
- } \
- } \
- } \
- }
-
-/* This subsidiary macro assembles the input data needed in
- preparation for forming the interpolated value in the n-dimensional
- case. */
-#define ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,Usebad,Usevar) \
-\
-/* Initialise offsets into the input array. Then loop to obtain each \
- coordinate associated with the current output point. */ \
- pixel = 0; \
- off_in = 0; \
- for ( idim = 0; idim < ndim_in; idim++ ) { \
- xn = coords[ idim ][ point ]; \
-\
-/* Test if the coordinate lies outside the input grid, or is bad. If \
- either is true, the corresponding output pixel value will be bad, \
- so give up on this point. */ \
- bad = ( xn < xn_min[ idim ] ) || ( xn >= xn_max[ idim ] ) || \
- ( xn == AST__BAD ); \
- if ( bad ) break; \
-\
-/* If input bad pixels must be detected, then obtain the index along \
- the current input grid dimension of the pixel which contains this \
- coordinate and accumulate the pixel's offset from the start of the \
- input array. */ \
- if ( Usebad ) { \
- pixel += stride[ idim ] * \
- ( (int) floor( xn + 0.5 ) - lbnd_in[ idim ] ); \
- } \
-\
-/* Calculate the lowest and highest indices (in the current dimension) \
- of the region of neighbouring pixels that will contribute to the \
- interpolated result. Constrain these values to lie within the input \
- grid. */ \
- ixn = (int) floor( xn ); \
- lo[ idim ] = MaxI( ixn - neighb + 1, lbnd_in[ idim ], status ); \
- hi[ idim ] = MinI( ixn + neighb, ubnd_in[ idim ], status ); \
-\
-/* Accumulate the offset (from the start of the input array) of the \
- contributing pixel which has the lowest index in each dimension. */ \
- off_in += stride[ idim ] * ( lo[ idim ] - lbnd_in[ idim ] ); \
- } \
-\
-/* Once the input pixel which contains the required coordinates has \
- been identified, test if it is bad, if necessary. */ \
- if ( Usebad ) bad = bad || ( in[ pixel ] == badval ); \
-\
-/* If OK, loop to evaluate the kernel function which will be used to \
- weight the contributions from surrounding pixels. */ \
- if ( !bad ) { \
- for ( idim = 0; idim < ndim_in; idim++ ) { \
-\
-/* Set up an array of pointers to locate kernel values (stored in the \
- "kval" array) for each dimension. Initially, each of these pointers \
- locates the first weight value which applies to the contributing \
- pixel with the lowest index in each dimension. */ \
- wtptr[ idim ] = kval + ( 2 * neighb * idim ); \
-\
-/* Also set up pointers to the last weight value in each dimension. */ \
- wtptr_last[ idim ] = wtptr[ idim ] + ( hi[ idim ] - lo[ idim ] ); \
-\
-/* Loop to evaluate the kernel function along each dimension, storing \
- the resulting values. The function's argument is the offset of the \
- contributing pixel (along the relevant dimension) from the input \
- point. */ \
- xn = coords[ idim ][ point ]; \
- for ( ixn = lo[ idim ]; ixn <= hi[ idim ]; ixn++ ) { \
- if( kernel ) { \
- ( *kernel )( (double) ixn - xn, params, flags, \
- wtptr[ idim ] + ixn - lo[ idim ], status ); \
- } else { \
- ( *fkernel )( (double) ixn - xn, params, flags, \
- wtptr[ idim ] + ixn - lo[ idim ] ); \
- } \
-\
-/* Check for errors arising in the kernel function. */ \
- if ( !astOK ) { \
- kerror = 1; \
- goto Kernel_Error_Nd; \
- } \
- } \
- } \
-\
-/* Initialise, and loop over the neighbouring input pixels to obtain \
- an interpolated value. */ \
- sum = (Xfloattype) 0.0; \
- wtsum = (Xfloattype) 0.0; \
- if ( Usevar ) { \
- sum_var = (Xfloattype) 0.0; \
- bad_var = 0; \
- } \
- idim = ndim_in - 1; \
- wtprod[ idim ] = 1.0; \
- done = 0; \
- do { \
-\
-/* Each contributing pixel is weighted by the product of the kernel \
- weight factors evaluated along each input dimension. However, since \
- we typically only change the index of one dimension at a time, we \
- can avoid forming this product repeatedly by retaining an array of \
- accumulated products for all higher dimensions. We need then only \
- update the lower elements in this array, corresponding to those \
- dimensions whose index has changed. We do this here, "idim" being \
- the index of the most significant dimension to have changed. Note \
- that on the first pass, all dimensions are considered changed, \
- causing this array to be initialised. */ \
- for ( ii = idim; ii >= 1; ii-- ) { \
- wtprod[ ii - 1 ] = wtprod[ ii ] * *( wtptr[ ii ] ); \
- } \
-\
-/* If necessary, test each pixel which may contribute to the result to \
- see if it is bad. If not, obtain its weight from the accumulated \
- product of weights. Also multiply by the weight for dimension zero, \
- which is not included in the "wtprod" array). */ \
- if ( !( Usebad ) || ( in[ off_in ] != badval ) ) { \
- pixwt = wtprod[ 0 ] * *( wtptr[ 0 ] ); \
-\
-/* Form the weighted sums required for finding the interpolated \
- value. */ \
- sum += ( (Xfloattype) pixwt ) * ( (Xfloattype) in[ off_in ] ); \
- wtsum += (Xfloattype) pixwt; \
-\
-/* If a variance estimate is required and it still seems possible to \
- obtain one, then obtain the variance value associated with the \
- current input pixel. */ \
- if ( Usevar ) { \
- if ( !( ( Xsigned ) || ( Usebad ) ) || !bad_var ) { \
- var = in_var[ off_in ]; \
-\
-/* If necessary, test if this value is bad (if the data type is \
- signed, also check that it is not negative). */ \
- if ( Usebad ) bad_var = ( var == badval ); \
- CHECK_FOR_NEGATIVE_VARIANCE(Xtype) \
-\
-/* If any bad input variance value is obtained, we cannot generate a \
- valid output variance estimate. Otherwise, form the sum needed to \
- calculate this estimate. */ \
- if ( !( ( Xsigned ) || ( Usebad ) ) || !bad_var ) { \
- sum_var += ( (Xfloattype) ( pixwt * pixwt ) ) * \
- ( (Xfloattype) var ); \
- } \
- } \
- } \
- } \
-\
-/* Now update the weight value pointers and pixel offset to refer to \
- the next input pixel to be considered. */ \
- idim = 0; \
- do { \
-\
-/* The first input dimension whose weight value pointer has not yet \
- reached its final value has this pointer incremented, and the pixel \
- offset into the input array is updated accordingly. */ \
- if ( wtptr[ idim ] != wtptr_last[ idim ] ) { \
- wtptr[ idim ]++; \
- off_in += stride[ idim ]; \
- break; \
-\
-/* Any earlier dimensions (which have reached the final pointer value) \
- have this pointer returned to its lowest value. Again, the pixel \
- offset into the input image is updated accordingly. */ \
- } else { \
- wtptr[ idim ] -= ( hi[ idim ] - lo[ idim ] ); \
- off_in -= stride[ idim ] * \
- ( hi[ idim ] - lo[ idim ] ); \
- done = ( ++idim == ndim_in ); \
- } \
- } while ( !done ); \
- } while ( !done ); \
- }
-
-/* This subsidiary macro calculates the interpolated output value (and
- variance) from the sums over contributing pixels, checks the
- results for validity, and assigns them to the output array(s). */
-#define CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Usebad,Usevar,Nobad) \
-\
-/* If the output data value has not yet been flagged as bad, then \
- check that an interpolated value can actually be produced. First \
- check that the sum of weights is not zero. */ \
- if ( !bad ) { \
- bad = ( wtsum == (Xfloattype) 0.0 ); \
-\
-/* If OK, calculate the interpolated value. Then, if the output data \
- type is not floating point, check that this value will not overflow \
- the available output range. */ \
- if ( !bad ) { \
- val = sum / wtsum; \
- if ( !( Xfloating ) ) { \
- bad = ( val <= lo_lim ) || ( val >= hi_lim ); \
- } \
- } \
-\
-/* If no interpolated data value can be produced, then no associated \
- variance will be required either. */ \
- if ( ( Usevar ) && bad ) bad_var = 1; \
- } \
-\
-/* Now perform similar checks on the output variance value (if \
- required). This time we check that the square of the sum of \
- weights is not zero (since this might underflow before the sum of \
- weights). Again we also check to prevent the result overflowing the \
- output data type. */ \
- if ( ( Usevar ) && !bad_var ) { \
- wtsum_sq = wtsum * wtsum; \
- bad_var = ( wtsum_sq == (Xfloattype) 0.0 ); \
- if ( !bad_var ) { \
- val_var = sum_var / wtsum_sq; \
- if ( !( Xfloating ) ) { \
- bad_var = ( val_var <= lo_lim ) || ( val_var >= hi_lim ); \
- } \
- } \
- } \
-\
-/* Obtain the pixel offset into the output array. */ \
- off_out = offset[ point ]; \
-\
-/* Assign a bad output value (and variance) if required and count it. */ \
- if ( bad ) { \
- if( !Nobad ) { \
- out[ off_out ] = badval; \
- if ( Usevar ) out_var[ off_out ] = badval; \
- } \
- result++; \
-\
-/* Otherwise, assign the interpolated value. If the output data type \
- is floating point, the result can be stored directly, otherwise we \
- must round to the nearest integer. */ \
- } else { \
- if ( Xfloating ) { \
- out[ off_out ] = (Xtype) val; \
- } else { \
- out[ off_out ] = (Xtype) ( val + ( ( val >= (Xfloattype) 0.0 ) ? \
- ( (Xfloattype) 0.5 ) : \
- ( (Xfloattype) -0.5 ) ) ); \
- } \
-\
-/* If a variance estimate is required but none can be obtained, then \
- store a bad output variance value and count it. */ \
- if ( Usevar ) { \
- if ( bad_var ) { \
- if( !Nobad ) { \
- out_var[ off_out ] = badval; \
- } \
- result++; \
-\
-/* Otherwise, store the variance estimate, rounding to the nearest \
- integer if necessary. */ \
- } else { \
- if ( Xfloating ) { \
- out_var[ off_out ] = (Xtype) val_var; \
- } else { \
- out_var[ off_out ] = (Xtype) ( val_var + \
- ( ( val_var >= (Xfloattype) 0.0 ) ? \
- ( (Xfloattype) 0.5 ) : \
- ( (Xfloattype) -0.5 ) ) ); \
- } \
- } \
- } \
- }
-
-/* These subsidiary macros define limits for range checking of results
- before conversion to the final data type. For each data type code
- <X>, HI_<X> gives the least positive floating point value which
- just overflows that data type towards plus infinity, while LO_<X>
- gives the least negative floating point value which just overflows
- that data type towards minus infinity. Thus, a floating point value
- must satisfy LO<flt_value<HI if overflow is not to occur when it is
- converted to that data type.
-
- The data type of each limit should be that of the smallest
- precision floating point type which will accommodate the full range
- of values that the target type may take. */
-
-/* If <X> is a floating point type, the limits are not actually used,
- but must be present to permit error-free compilation. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-#define HI_LD ( 0.0L )
-#define LO_LD ( 0.0L )
-#endif
-#define HI_D ( 0.0 )
-#define LO_D ( 0.0 )
-#define HI_F ( 0.0f )
-#define LO_F ( 0.0f )
-
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-#define HI_L ( 0.5L + (long double) LONG_MAX )
-#define LO_L ( -0.5L + (long double) LONG_MIN )
-#define HI_UL ( 0.5L + (long double) ULONG_MAX )
-#define LO_UL ( -0.5L )
-#else
-#define HI_L ( 0.5 + (double) LONG_MAX )
-#define LO_L ( -0.5 + (double) LONG_MIN )
-#define HI_UL ( 0.5 + (double) ULONG_MAX )
-#define LO_UL ( -0.5 )
-#endif
-#define HI_I ( 0.5 + (double) INT_MAX )
-#define LO_I ( -0.5 + (double) INT_MIN )
-#define HI_UI ( 0.5 + (double) UINT_MAX )
-#define LO_UI ( -0.5 )
-#define HI_S ( 0.5f + (float) SHRT_MAX )
-#define LO_S ( -0.5f + (float) SHRT_MIN )
-#define HI_US ( 0.5f + (float) USHRT_MAX )
-#define LO_US ( -0.5f )
-#define HI_B ( 0.5f + (float) SCHAR_MAX )
-#define LO_B ( -0.5f + (float) SCHAR_MIN )
-#define HI_UB ( 0.5f + (float) UCHAR_MAX )
-#define LO_UB ( -0.5f )
-
-/* This subsidiary macro tests for negative variance values. This
- check is required only for signed data types. */
-#define CHECK_FOR_NEGATIVE_VARIANCE(Xtype) \
- bad_var = bad_var || ( var < ( (Xtype) 0 ) );
-
-/* Expand the main macro above to generate a function for each
- required signed data type. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-MAKE_INTERPOLATE_KERNEL1(LD,long double,1,long double,1)
-MAKE_INTERPOLATE_KERNEL1(L,long int,0,long double,1)
-#else
-MAKE_INTERPOLATE_KERNEL1(L,long int,0,double,1)
-#endif
-MAKE_INTERPOLATE_KERNEL1(D,double,1,double,1)
-MAKE_INTERPOLATE_KERNEL1(F,float,1,float,1)
-MAKE_INTERPOLATE_KERNEL1(I,int,0,double,1)
-MAKE_INTERPOLATE_KERNEL1(S,short int,0,float,1)
-MAKE_INTERPOLATE_KERNEL1(B,signed char,0,float,1)
-
-/* Re-define the macro for testing for negative variances to do
- nothing. */
-#undef CHECK_FOR_NEGATIVE_VARIANCE
-#define CHECK_FOR_NEGATIVE_VARIANCE(Xtype)
-
-/* Expand the main macro above to generate a function for each
- required unsigned data type. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-MAKE_INTERPOLATE_KERNEL1(UL,unsigned long int,0,long double,0)
-#else
-MAKE_INTERPOLATE_KERNEL1(UL,unsigned long int,0,double,0)
-#endif
-MAKE_INTERPOLATE_KERNEL1(UI,unsigned int,0,double,0)
-MAKE_INTERPOLATE_KERNEL1(US,unsigned short int,0,float,0)
-MAKE_INTERPOLATE_KERNEL1(UB,unsigned char,0,float,0)
-
-/* Undefine the macros used above. */
-#undef CHECK_FOR_NEGATIVE_VARIANCE
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-#undef HI_LD
-#undef LO_LD
-#endif
-#undef HI_D
-#undef LO_D
-#undef HI_F
-#undef LO_F
-#undef HI_L
-#undef LO_L
-#undef HI_UL
-#undef LO_UL
-#undef HI_I
-#undef LO_I
-#undef HI_UI
-#undef LO_UI
-#undef HI_S
-#undef LO_S
-#undef HI_US
-#undef LO_US
-#undef HI_B
-#undef LO_B
-#undef HI_UB
-#undef LO_UB
-#undef CALC_AND_ASSIGN_OUTPUT
-#undef ASSEMBLE_INPUT_ND
-#undef ASSEMBLE_INPUT_2D
-#undef ASSEMBLE_INPUT_1D
-#undef MAKE_INTERPOLATE_KERNEL1
-
-/*
-* Name:
-* InterpolateLinear<X>
-
-* Purpose:
-* Resample a data grid, using the linear interpolation scheme.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int InterpolateLinear<X>( int ndim_in,
-* const int *lbnd_in, const int *ubnd_in,
-* const <Xtype> *in, const <Xtype> *in_var,
-* int npoint, const int *offset,
-* const double *const *coords,
-* int flags, <Xtype> badval,
-* <Xtype> *out, <Xtype> *out_var )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This is a set of functions which resample a rectangular input
-* grid of data (and, optionally, associated statistical variance
-* values) so as to place them into a new output grid. Each output
-* grid point may be mapped on to a position in the input grid in
-* an arbitrary way. Where the positions given do not correspond
-* with a pixel centre in the input grid, the interpolation scheme
-* used is linear interpolation between the centres of the nearest
-* neighbouring pixels in each dimension (there are 2 nearest
-* neighbours in 1 dimension, 4 in 2 dimensions, 8 in 3 dimensions,
-* etc.).
-
-* Parameters:
-* ndim_in
-* The number of dimensions in the input grid. This should be at
-* least one.
-* lbnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the first
-* pixel in the input grid along each dimension.
-* ubnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the last
-* pixel in the input grid along each dimension.
-*
-* Note that "lbnd_in" and "ubnd_in" together define the shape
-* and size of the input grid, its extent along a particular
-* (i'th) dimension being ubnd_in[i]-lbnd_in[i]+1 (assuming "i"
-* is zero-based). They also define the input grid's coordinate
-* system, with each pixel being of unit extent along each
-* dimension with integral coordinate values at its centre.
-* in
-* Pointer to the array of data to be resampled (with an element
-* for each pixel in the input grid). The numerical type of
-* these data should match the function used, as given by the
-* suffix on the function name. The storage order should be such
-* that the index of the first grid dimension varies most
-* rapidly and that of the final dimension least rapidly
-* (i.e. Fortran array storage order).
-* in_var
-* An optional pointer to a second array of positive numerical
-* values (with the same size and type as the "in" array), which
-* represent estimates of the statistical variance associated
-* with each element of the "in" array. If this second array is
-* given (along with the corresponding "out_var" array), then
-* estimates of the variance of the resampled data will also be
-* returned.
-*
-* If no variance estimates are required, a NULL pointer should
-* be given.
-* npoint
-* The number of points at which the input grid is to be
-* resampled.
-* offset
-* Pointer to an array of integers with "npoint" elements. For
-* each output point, this array should contain the zero-based
-* offset in the output array(s) (i.e. the "out" and,
-* optionally, the "out_var" arrays) at which the resampled
-* output value(s) should be stored.
-* coords
-* An array of pointers to double, with "ndim_in"
-* elements. Element "coords[coord]" should point at the first
-* element of an array of double (with "npoint" elements) which
-* contains the values of coordinate number "coord" for each
-* interpolation point. The value of coordinate number "coord"
-* for interpolation point number "point" is therefore given by
-* "coords[coord][point]" (assuming both indices to be
-* zero-based). If any point has a coordinate value of AST__BAD
-* associated with it, then the corresponding output data (and
-* variance) will be set to the value given by "badval" (unles the
-* AST__NOBAD flag is specified).
-* flags
-* The bitwise OR of a set of flag values which control the
-* operation of the function. Currently, only the flag
-* AST__USEBAD is significant and indicates whether there are
-* "bad" (i.e. missing) data in the input array(s) which must be
-* recognised and propagated to the output array(s). If this
-* flag is not set, all input values are treated literally.
-* badval
-* If the AST__USEBAD flag is set in the "flags" value (above),
-* this parameter specifies the value which is used to identify
-* bad data and/or variance values in the input array(s). Its
-* numerical type must match that of the "in" (and "in_var")
-* arrays. Unles the AST__NOBAD flag is specified in "flags", the
-* same value will also be used to flag any output array elements
-* for which resampled values could not be obtained. The output
-* arrays(s) may be flagged with this value whether or not the
-* AST__USEBAD flag is set (the function return value indicates
-* whether any such values have been produced).
-* out
-* Pointer to an array with the same data type as the "in"
-* array, into which the resampled data will be returned. Note
-* that details of how the output grid maps on to this array
-* (e.g. the storage order, number of dimensions, etc.) is
-* arbitrary and is specified entirely by means of the "offset"
-* array. The "out" array should therefore contain sufficient
-* elements to accommodate the "offset" values supplied. There
-* is no requirement that all elements of the "out" array should
-* be assigned values, and any which are not addressed by the
-* contents of the "offset" array will be left unchanged.
-* out_var
-* An optional pointer to an array with the same data type and
-* size as the "out" array, into which variance estimates for
-* the resampled values may be returned. This array will only be
-* used if the "in_var" array has been given. It is addressed in
-* exactly the same way (via the "offset" array) as the "out"
-* array. The values returned are estimates of the statistical
-* variance of the corresponding values in the "out" array, on
-* the assumption that all errors in input grid values (in the
-* "in" array) are statistically independent and that their
-* variance estimates (in the "in_var" array) may simply be
-* summed (with appropriate weighting factors).
-*
-* If no output variance estimates are required, a NULL pointer
-* should be given.
-
-* Returned Value:
-* The number of output grid points to which a data value (or a
-* variance value if relevant) equal to "badval" has been assigned
-* because no valid output value could be obtained.
-
-* Notes:
-* - There is a separate function for each numerical type of
-* gridded data, distinguished by replacing the <X> in the function
-* name by the appropriate 1- or 2-character suffix.
-* - A value of zero will be returned if any of these functions is
-* invoked with the global error status set, or if it should fail
-* for any reason.
-*/
-/* Define macros to implement the function for a specific data
- type. */
-#define MAKE_INTERPOLATE_LINEAR(X,Xtype,Xfloating,Xfloattype,Xsigned) \
-static int InterpolateLinear##X( int ndim_in, \
- const int *lbnd_in, const int *ubnd_in, \
- const Xtype *in, const Xtype *in_var, \
- int npoint, const int *offset, \
- const double *const *coords, \
- int flags, Xtype badval, \
- Xtype *out, Xtype *out_var, int *status ) { \
-\
-/* Local Variables: */ \
- Xfloattype sum; /* Weighted sum of pixel data values */ \
- Xfloattype sum_var; /* Weighted sum of pixel variance values */ \
- Xfloattype val; /* Value to be asigned to output pixel */ \
- Xfloattype wtsum; /* Sum of weight values */ \
- Xtype var; /* Variance value */ \
- double *frac_hi; /* Pointer to array of weights */ \
- double *frac_lo; /* Pointer to array of weights */ \
- double *wt; /* Pointer to array of weights */ \
- double *wtprod; /* Array of accumulated weights pointer */ \
- double *xn_max; /* Pointer to upper limits array (n-d) */ \
- double *xn_min; /* Pointer to lower limits array (n-d) */ \
- double frac_hi_x; /* Pixel weight (x dimension) */ \
- double frac_hi_y; /* Pixel weight (y dimension) */ \
- double frac_lo_x; /* Pixel weight (x dimension) */ \
- double frac_lo_y; /* Pixel weight (y dimension) */ \
- double pixwt; /* Weight to apply to individual pixel */ \
- double x; /* x coordinate value */ \
- double xmax; /* x upper limit */ \
- double xmin; /* x lower limit */ \
- double xn; /* Coordinate value (n-d) */ \
- double y; /* y coordinate value */ \
- double ymax; /* y upper limit */ \
- double ymin; /* y lower limit */ \
- int *dim; /* Pointer to array of pixel indices */ \
- int *hi; /* Pointer to array of upper indices */ \
- int *lo; /* Pointer to array of lower indices */ \
- int *stride; /* Pointer to array of dimension strides */ \
- int bad; /* Output pixel bad? */ \
- int bad_var; /* Output variance bad? */ \
- int done; /* All pixel indices done? */ \
- int hi_x; /* Upper pixel index (x dimension) */ \
- int hi_y; /* Upper pixel index (y dimension) */ \
- int idim; /* Loop counter for dimensions */ \
- int ii; /* Loop counter for weights */ \
- int ix; /* Pixel index in input grid x dimension */ \
- int ixn; /* Pixel index (n-d) */ \
- int iy; /* Pixel index in input grid y dimension */ \
- int lo_x; /* Lower pixel index (x dimension) */ \
- int lo_y; /* Lower pixel index (y dimension) */ \
- int nobad; /* Was the AST__NOBAD flag set? */ \
- int off_in; /* Offset to input pixel */ \
- int off_lo; /* Offset to "first" input pixel */ \
- int off_out; /* Offset to output pixel */ \
- int pixel; /* Offset to input pixel containing point */ \
- int point; /* Loop counter for output points */ \
- int result; /* Result value to return */ \
- int s; /* Temporary variable for strides */ \
- int usebad; /* Use "bad" input pixel values? */ \
- int usevar; /* Process variance array? */ \
- int ystride; /* Stride along input grid y dimension */ \
-\
-/* Initialise. */ \
- result = 0; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* Initialise variables to avoid "used of uninitialised variable" \
- messages from dumb compilers. */ \
- sum = 0; \
- sum_var = 0; \
- wtsum = 0; \
- bad = 0; \
- bad_var = 0; \
-\
-/* Determine if we are processing bad pixels or variances. */ \
- nobad = flags & AST__NOBAD; \
- usebad = flags & AST__USEBAD; \
- usevar = in_var && out_var; \
-\
-/* Handle the 1-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
- if ( ndim_in == 1 ) { \
-\
-/* Calculate the coordinate limits of the input grid. */ \
- xmin = (double) lbnd_in[ 0 ] - 0.5; \
- xmax = (double) ubnd_in[ 0 ] + 0.5; \
-\
-/* Identify four cases, according to whether bad pixels and/or \
- variances are being processed. In each case, loop through all the \
- output points to (a) assemble the input data needed to form the \
- interpolated value, and (b) calculate the result and assign it to \
- the output arrays(s). In each case we assign constant values (0 or \
- 1) to the "Usebad" and "Usevar" flags so that code for handling bad \
- pixels and variances can be eliminated when not required. */ \
- if ( nobad ) { \
- if ( usebad ) { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
- 1,1,1) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
- 1,0,1) \
- } \
- } \
- } else { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
- 0,1,1) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
- 0,0,1) \
- } \
- } \
- } \
-\
-/* Four more cases as above, but this time with the AST__NOBAD flag \
- un-set. */ \
- } else { \
- if ( usebad ) { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
- 1,1,0) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
- 1,0,0) \
- } \
- } \
- } else { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
- 0,1,0) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
- 0,0,0) \
- } \
- } \
- } \
- } \
-\
-/* Handle the 2-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
- } else if ( ndim_in == 2 ) { \
-\
-/* Calculate the stride along the y dimension of the input grid. */ \
- ystride = ubnd_in[ 0 ] - lbnd_in[ 0 ] + 1; \
-\
-/* Calculate the coordinate limits of the input grid in each \
- dimension. */ \
- xmin = (double) lbnd_in[ 0 ] - 0.5; \
- xmax = (double) ubnd_in[ 0 ] + 0.5; \
- ymin = (double) lbnd_in[ 1 ] - 0.5; \
- ymax = (double) ubnd_in[ 1 ] + 0.5; \
-\
-/* Identify four cases, according to whether bad pixels and/or \
- variances are being processed. In each case, loop through all the \
- output points to (a) assemble the input data needed to form the \
- interpolated value, and (b) calculate the result and assign it to \
- the output arrays(s). In each case we assign constant values (0 or \
- 1) to the "Usebad" and "Usevar" flags so that code for handling bad \
- pixels and variances can be eliminated when not required. */ \
- if ( nobad ) { \
- if ( usebad ) { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
- 1,1,1) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
- 1,0,1) \
- } \
- } \
- } else { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
- 0,1,1) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
- 0,0,1) \
- } \
- } \
- } \
-\
-/* Four more case as above, but without the AST__NOBAD flag. */ \
- } else { \
- if ( usebad ) { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
- 1,1,0) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
- 1,0,0) \
- } \
- } \
- } else { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
- 0,1,0) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
- 0,0,0) \
- } \
- } \
- } \
- } \
-\
-/* Handle other numbers of dimensions. */ \
-/* ----------------------------------- */ \
- } else { \
-\
-/* Allocate workspace. */ \
- dim = astMalloc( sizeof( int ) * (size_t) ndim_in ); \
- frac_hi = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
- frac_lo = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
- hi = astMalloc( sizeof( int ) * (size_t) ndim_in ); \
- lo = astMalloc( sizeof( int ) * (size_t) ndim_in ); \
- stride = astMalloc( sizeof( int ) * (size_t) ndim_in ); \
- wt = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
- wtprod = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
- xn_max = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
- xn_min = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
- if ( astOK ) { \
-\
-/* Calculate the stride along each dimension of the input grid. */ \
- for ( s = 1, idim = 0; idim < ndim_in; idim++ ) { \
- stride[ idim ] = s; \
- s *= ubnd_in[ idim ] - lbnd_in[ idim ] + 1; \
-\
-/* Calculate the coordinate limits of the input grid in each \
- dimension. */ \
- xn_min[ idim ] = (double) lbnd_in[ idim ] - 0.5; \
- xn_max[ idim ] = (double) ubnd_in[ idim ] + 0.5; \
- } \
-\
-/* Identify four cases, according to whether bad pixels and/or \
- variances are being processed. In each case, loop through all the \
- output points to (a) assemble the input data needed to form the \
- interpolated value, and (b) calculate the result and assign it to \
- the output arrays(s). In each case we assign constant values (0 or \
- 1) to the "Usebad" and "Usevar" flags so that code for handling bad \
- pixels and variances can be eliminated when not required. */ \
- if ( nobad ) { \
- if ( usebad ) { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype, \
- Xsigned,1,1,1) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype, \
- Xsigned,1,0,1) \
- } \
- } \
- } else { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype, \
- Xsigned,0,1,1) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype, \
- Xsigned,0,0,1) \
- } \
- } \
- } \
-\
-/* Four more case as above, but without the AST__NOBAD flag. */ \
- } else { \
- if ( usebad ) { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype, \
- Xsigned,1,1,0) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype, \
- Xsigned,1,0,0) \
- } \
- } \
- } else { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype, \
- Xsigned,0,1,0) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype, \
- Xsigned,0,0,0) \
- } \
- } \
- } \
- } \
- } \
-\
-/* Free the workspace. */ \
- dim = astFree( dim ); \
- frac_hi = astFree( frac_hi ); \
- frac_lo = astFree( frac_lo ); \
- hi = astFree( hi ); \
- lo = astFree( lo ); \
- stride = astFree( stride ); \
- wt = astFree( wt ); \
- wtprod = astFree( wtprod ); \
- xn_max = astFree( xn_max ); \
- xn_min = astFree( xn_min ); \
- } \
-\
-/* If an error has occurred, clear the returned result. */ \
- if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
- return result; \
-}
-
-/* This subsidiary macro assembles the input data needed in
- preparation for forming the interpolated value in the 1-dimensional
- case. */
-#define ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,Usebad,Usevar) \
-\
-/* Obtain the x coordinate of the current point and test if it lies \
- outside the input grid. Also test if it is bad. */ \
- x = coords[ 0 ][ point ]; \
- bad = ( x < xmin ) || ( x >= xmax ) || ( x == AST__BAD ); \
- if ( !bad ) { \
-\
-/* If input bad pixels must be detected, then obtain the offset along \
- the input grid x dimension of the input pixel which contains the \
- current coordinate and calculate this pixel's offset from the start \
- of the input array. */ \
- if ( Usebad ) { \
- pixel = (int) floor( x + 0.5 ) - lbnd_in[ 0 ]; \
-\
-/* Test if the pixel is bad. */ \
- bad = ( in[ pixel ] == badval ); \
- } \
-\
-/* If OK, obtain the indices along the input grid x dimension of the \
- two adjacent pixels which will contribute to the interpolated \
- result. Also obtain the fractional weight to be applied to each of \
- these pixels. */ \
- if ( !bad ) { \
- lo_x = (int) floor( x ); \
- hi_x = lo_x + 1; \
- frac_lo_x = (double) hi_x - x; \
- frac_hi_x = 1.0 - frac_lo_x; \
-\
-/* Obtain the offset within the input array of the first pixel to be \
- used for interpolation (the one with the smaller index). */ \
- off_lo = lo_x - lbnd_in[ 0 ]; \
-\
-/* Initialise sums for forming the interpolated result. */ \
- sum = (Xfloattype) 0.0; \
- wtsum = (Xfloattype) 0.0; \
- if ( Usevar ) { \
- sum_var = (Xfloattype) 0.0; \
- if ( ( Xsigned ) || ( Usebad ) ) bad_var = 0; \
- } \
-\
-/* For each of the two pixels which may contribute to the result, \
- test if the pixel index lies within the input grid. Where it does, \
- accumulate the sums required for forming the interpolated \
- result. In each case, we supply the pixel's offset within the input \
- array and the weight to be applied to it. */ \
- if ( lo_x >= lbnd_in[ 0 ] ) { \
- FORM_LINEAR_INTERPOLATION_SUM(off_lo,frac_lo_x,Xtype, \
- Xfloattype,Xsigned,Usebad,Usevar) \
- } \
- if ( hi_x <= ubnd_in[ 0 ] ) { \
- FORM_LINEAR_INTERPOLATION_SUM(off_lo + 1,frac_hi_x,Xtype, \
- Xfloattype,Xsigned,Usebad,Usevar) \
- } \
- } \
- }
-
-/* This subsidiary macro assembles the input data needed in
- preparation for forming the interpolated value in the 2-dimensional
- case. */
-#define ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,Usebad,Usevar) \
-\
-/* Obtain the x coordinate of the current point and test if it lies \
- outside the input grid. Also test if it is bad. */ \
- x = coords[ 0 ][ point ]; \
- bad = ( x < xmin ) || ( x >= xmax ) || ( x == AST__BAD ); \
- if ( !bad ) { \
-\
-/* If OK, then similarly obtain and test the y coordinate. */ \
- y = coords[ 1 ][ point ]; \
- bad = ( y < ymin ) || ( y >= ymax ) || ( y == AST__BAD ); \
- if ( !bad ) { \
-\
-/* If input bad pixels must be detected, then obtain the offsets along \
- each input grid dimension of the input pixel which contains the \
- current coordinates. */ \
- if ( Usebad ) { \
- ix = (int) floor( x + 0.5 ); \
- iy = (int) floor( y + 0.5 ); \
-\
-/* Calculate this pixel's offset from the start of the input array. */ \
- pixel = ix - lbnd_in[ 0 ] + ystride * ( iy - lbnd_in[ 1 ] ); \
-\
-/* Test if the pixel is bad. */ \
- bad = ( in[ pixel ] == badval ); \
- } \
-\
-/* If OK, obtain the indices along the input grid x dimension of the \
- two adjacent pixels which will contribute to the interpolated \
- result. Also obtain the fractional weight to be applied to each of \
- these pixels. */ \
- if ( !bad ) { \
- lo_x = (int) floor( x ); \
- hi_x = lo_x + 1; \
- frac_lo_x = (double) hi_x - x; \
- frac_hi_x = 1.0 - frac_lo_x; \
-\
-/* Repeat this process for the y dimension. */ \
- lo_y = (int) floor( y ); \
- hi_y = lo_y + 1; \
- frac_lo_y = (double) hi_y - y; \
- frac_hi_y = 1.0 - frac_lo_y; \
-\
-/* Obtain the offset within the input array of the first pixel to be \
- used for interpolation (the one with the smaller index along both \
- dimensions). */ \
- off_lo = lo_x - lbnd_in[ 0 ] + ystride * ( lo_y - lbnd_in[ 1 ] ); \
-\
-/* Initialise sums for forming the interpolated result. */ \
- sum = (Xfloattype) 0.0; \
- wtsum = (Xfloattype) 0.0; \
- if ( Usevar ) { \
- sum_var = (Xfloattype) 0.0; \
- if ( ( Xsigned ) || ( Usebad ) ) bad_var = 0; \
- } \
-\
-/* For each of the four pixels which may contribute to the result, \
- test if the pixel indices lie within the input grid. Where they do, \
- accumulate the sums required for forming the interpolated \
- result. In each case, we supply the pixel's offset within the input \
- array and the weight to be applied to it. */ \
- if ( lo_y >= lbnd_in[ 1 ] ) { \
- if ( lo_x >= lbnd_in[ 0 ] ) { \
- FORM_LINEAR_INTERPOLATION_SUM(off_lo, \
- frac_lo_x * frac_lo_y,Xtype, \
- Xfloattype, Xsigned, \
- Usebad,Usevar) \
- } \
- if ( hi_x <= ubnd_in[ 0 ] ) { \
- FORM_LINEAR_INTERPOLATION_SUM(off_lo + 1, \
- frac_hi_x * frac_lo_y,Xtype, \
- Xfloattype,Xsigned, \
- Usebad,Usevar) \
- } \
- } \
- if ( hi_y <= ubnd_in[ 1 ] ) { \
- if ( lo_x >= lbnd_in[ 0 ] ) { \
- FORM_LINEAR_INTERPOLATION_SUM(off_lo + ystride, \
- frac_lo_x * frac_hi_y,Xtype, \
- Xfloattype,Xsigned, \
- Usebad,Usevar) \
- } \
- if ( hi_x <= ubnd_in[ 0 ] ) { \
- FORM_LINEAR_INTERPOLATION_SUM(off_lo + ystride + 1, \
- frac_hi_x * frac_hi_y,Xtype, \
- Xfloattype,Xsigned, \
- Usebad,Usevar) \
- } \
- } \
- } \
- } \
- }
-
-/* This subsidiary macro assembles the input data needed in
- preparation for forming the interpolated value in the n-dimensional
- case. */
-#define ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,Usebad,Usevar) \
-\
-/* Initialise offsets into the input array. Then loop to obtain each
- coordinate associated with the current output point. */ \
- off_in = 0; \
- if ( Usebad ) pixel = 0; \
- for ( idim = 0; idim < ndim_in; idim++ ) { \
- xn = coords[ idim ][ point ]; \
-\
-/* Test if the coordinate lies outside the input grid. Also test if \
- it is bad. If either is true, the corresponding output pixel value \
- will be bad, so give up on this point. */ \
- bad = ( xn < xn_min[ idim ] ) || ( xn >= xn_max[ idim ] ) || \
- ( xn == AST__BAD ); \
- if ( bad ) break; \
-\
-/* If input bad pixels must be detected, obtain the index along the \
- current input grid dimension of the pixel which contains this \
- coordinate and accumulate the pixel's offset from the start of the \
- input array. */ \
- if ( Usebad ) { \
- pixel += stride[ idim ] * \
- ( (int) floor( xn + 0.5 ) - lbnd_in[ idim ] ); \
- } \
-\
-/* Obtain the indices along the current dimension of the input grid of \
- the two (usually adjacent) pixels which will contribute to the \
- output value. If necessary, however, restrict each index to ensure \
- it does not lie outside the input grid. Also calculate the \
- fractional weight to be given to each pixel in order to interpolate \
- linearly between them. */ \
- ixn = (int) floor( xn ); \
- lo[ idim ] = MaxI( ixn, lbnd_in[ idim ], status ); \
- hi[ idim ] = MinI( ixn + 1, ubnd_in[ idim ], status ); \
- frac_lo[ idim ] = 1.0 - fabs( xn - (double) lo[ idim ] ); \
- frac_hi[ idim ] = 1.0 - fabs( xn - (double) hi[ idim ] ); \
-\
-/* Store the lower index involved in interpolation along each \
- dimension and accumulate the offset from the start of the input \
- array of the pixel which has these indices. */ \
- dim[ idim ] = lo[ idim ]; \
- off_in += stride[ idim ] * ( lo[ idim ] - lbnd_in[ idim ] ); \
-\
-/* Also store the fractional weight associated with the lower pixel \
- along each dimension. */ \
- wt[ idim ] = frac_lo[ idim ]; \
- } \
-\
-/* If the input pixel which contains the required coordinates has \
- been identified, test if it is bad. */ \
- if ( Usebad ) bad = bad || ( in[ pixel ] == badval ); \
-\
-/* If OK, initialise and loop over adjacent input pixels to obtain an \
- interpolated value. */ \
- if ( !bad ) { \
- sum = (Xfloattype) 0.0; \
- wtsum = (Xfloattype) 0.0; \
- if ( Usevar ) { \
- sum_var = (Xfloattype) 0.0; \
- if ( ( Xsigned ) || ( Usebad ) ) bad_var = 0; \
- } \
- idim = ndim_in - 1; \
- wtprod[ idim ] = 1.0; \
- done = 0; \
- do { \
-\
-/* Each contributing pixel is weighted by the product of the weights \
- which account for the displacement of its centre from the required \
- position along each dimension. However, since we typically only \
- change the index of one dimension at a time, we can avoid forming \
- this product repeatedly by retaining an array of accumulated weight \
- products for all higher dimensions. We need then only update the \
- lower elements in this array, corresponding to those dimensions \
- whose index has changed. We do this here, "idim" being the index of \
- the most significant dimension to have changed. Note that on the \
- first pass, all dimensions are considered changed, causing this \
- array to be initialised. */ \
- for ( ii = idim; ii >= 1; ii-- ) { \
- wtprod[ ii - 1 ] = wtprod[ ii ] * wt[ ii ]; \
- } \
-\
-/* Accumulate the sums required for forming the interpolated \
- result. We supply the pixel's offset within the input array and the \
- weight to be applied to it. The pixel weight is formed by including \
- the weight factor for dimension zero, since this is not included in \
- the "wtprod" array. */ \
- FORM_LINEAR_INTERPOLATION_SUM(off_in,wtprod[ 0 ] * wt[ 0 ], \
- Xtype,Xfloattype,Xsigned, \
- Usebad,Usevar) \
-\
-/* Now update the indices, offset and weight factors to refer to the \
- next input pixel to be considered. */ \
- idim = 0; \
- do { \
-\
-/* The first input dimension which still refers to the pixel with the \
- lower of the two possible indices is switched to refer to the other \
- pixel (with the higher index). The offset into the input array and \
- the fractional weight factor for this dimension are also updated \
- accordingly. */ \
- if ( dim[ idim ] != hi[ idim ] ) { \
- dim[ idim ] = hi[ idim ]; \
- off_in += stride[ idim ]; \
- wt[ idim ] = frac_hi[ idim ]; \
- break; \
-\
-/* Any earlier dimensions (referring to the higher index) are switched \
- back to the lower index, if not already there, before going on to \
- consider the next dimension. (This process is the same as \
- incrementing a binary number and propagating overflows up through \
- successive digits, except that dimensions where the "lo" and "hi" \
- values are the same can only take one value.) The process stops at \
- the first attempt to return the final dimension to the lower \
- index. */ \
- } else { \
- if ( dim[ idim ] != lo[ idim ] ) { \
- dim[ idim ] = lo[ idim ]; \
- off_in -= stride[ idim ]; \
- wt[ idim ] = frac_lo[ idim ]; \
- } \
- done = ( ++idim == ndim_in ); \
- } \
- } while ( !done ); \
- } while ( !done ); \
- }
-
-/* This subsidiary macro adds the contribution from a specified input
- pixel to the accumulated sums for forming the linearly interpolated
- value. */
-#define FORM_LINEAR_INTERPOLATION_SUM(off,wt,Xtype,Xfloattype,Xsigned, \
- Usebad,Usevar) \
-\
-/* Obtain the offset of the input pixel to use. */ \
- off_in = ( off ); \
-\
-/* If necessary, test if this pixel is bad. If not, then obtain the \
- weight to apply to it. */ \
- if ( !( Usebad ) || ( in[ off_in ] != badval ) ) { \
- pixwt = ( wt ); \
-\
-/* Increment the weighted sum of pixel values and the sum of weights. */ \
- sum += ( (Xfloattype) in[ off_in ] ) * ( (Xfloattype) pixwt ); \
- wtsum += (Xfloattype) pixwt; \
-\
-/* If an output variance estimate is to be generated, and it still \
- seems possible to produce one, then obtain the input variance \
- value. */ \
- if ( Usevar ) { \
- if ( !( ( Xsigned ) || ( Usebad ) ) || !bad_var ) { \
- var = in_var[ off_in ]; \
-\
-/* Test if the variance value is bad (if the data type is signed, also \
- check that it is not negative). */ \
- if ( Usebad ) bad_var = ( var == badval ); \
- CHECK_FOR_NEGATIVE_VARIANCE(Xtype) \
-\
-/* If OK, increment the weighted sum of variance values. */ \
- if ( !( ( Xsigned ) || ( Usebad ) ) || !bad_var ) { \
- sum_var += ( (Xfloattype) ( pixwt * pixwt ) ) * \
- ( (Xfloattype) var ); \
- } \
- } \
- } \
- }
-
-/* This subsidiary macro calculates the interpolated output value (and
- variance) from the sums over contributing pixels and assigns them
- to the output array(s). */
-#define CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
- Usebad,Usevar,Nobad) \
-\
-/* Obtain the pixel offset into the output array. */ \
- off_out = offset[ point ]; \
-\
-/* Assign a bad output value (and variance) if required and count it. */ \
- if ( bad ) { \
- if( !Nobad ) { \
- out[ off_out ] = badval; \
- if ( Usevar ) out_var[ off_out ] = badval; \
- } \
- result++; \
-\
-/* Otherwise, calculate the interpolated value. If the output data \
- type is floating point, this result can be stored directly, \
- otherwise we must round to the nearest integer. */ \
- } else { \
- val = sum / wtsum; \
- if ( Xfloating ) { \
- out[ off_out ] = (Xtype) val; \
- } else { \
- out[ off_out ] = (Xtype) ( val + ( ( val >= (Xfloattype) 0.0 ) ? \
- ( (Xfloattype) 0.5 ) : \
- ( (Xfloattype) -0.5 ) ) ); \
- } \
-\
-/* If a variance estimate is required but none can be obtained, then \
- store a bad output variance value and count it. */ \
- if ( Usevar ) { \
- if ( ( ( Xsigned ) || ( Usebad ) ) && bad_var ) { \
- if( !Nobad ) out_var[ off_out ] = badval; \
- result++; \
-\
-/* Otherwise, calculate the variance estimate and store it, rounding \
- to the nearest integer if necessary. */ \
- } else { \
- val = sum_var / ( wtsum * wtsum ); \
- if ( Xfloating ) { \
- out_var[ off_out ] = (Xtype) val; \
- } else { \
- out_var[ off_out ] = (Xtype) ( val + \
- ( ( val >= (Xfloattype) 0.0 ) ? \
- ( (Xfloattype) 0.5 ) : \
- ( (Xfloattype) -0.5 ) ) ); \
- } \
- } \
- } \
- }
-
-/* This subsidiary macro tests for negative variance values in the
- macros above. This check is required only for signed data types. */
-#define CHECK_FOR_NEGATIVE_VARIANCE(Xtype) \
- bad_var = bad_var || ( var < ( (Xtype) 0 ) );
-
-/* Expand the main macro above to generate a function for each
- required signed data type. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-MAKE_INTERPOLATE_LINEAR(LD,long double,1,long double,1)
-MAKE_INTERPOLATE_LINEAR(L,long int,0,long double,1)
-#else
-MAKE_INTERPOLATE_LINEAR(L,long int,0,double,1)
-#endif
-MAKE_INTERPOLATE_LINEAR(D,double,1,double,1)
-MAKE_INTERPOLATE_LINEAR(F,float,1,float,1)
-MAKE_INTERPOLATE_LINEAR(I,int,0,double,1)
-MAKE_INTERPOLATE_LINEAR(S,short int,0,float,1)
-MAKE_INTERPOLATE_LINEAR(B,signed char,0,float,1)
-
-/* Re-define the macro for testing for negative variances to do
- nothing. */
-#undef CHECK_FOR_NEGATIVE_VARIANCE
-#define CHECK_FOR_NEGATIVE_VARIANCE(Xtype)
-
-/* Expand the main macro above to generate a function for each
- required unsigned data type. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-MAKE_INTERPOLATE_LINEAR(UL,unsigned long int,0,long double,0)
-#else
-MAKE_INTERPOLATE_LINEAR(UL,unsigned long int,0,double,0)
-#endif
-MAKE_INTERPOLATE_LINEAR(UI,unsigned int,0,double,0)
-MAKE_INTERPOLATE_LINEAR(US,unsigned short int,0,float,0)
-MAKE_INTERPOLATE_LINEAR(UB,unsigned char,0,float,0)
-
-/* Undefine the macros uxsed above. */
-#undef CHECK_FOR_NEGATIVE_VARIANCE
-#undef CALC_AND_ASSIGN_OUTPUT
-#undef FORM_LINEAR_INTERPOLATION_SUM
-#undef ASSEMBLE_INPUT_ND
-#undef ASSEMBLE_INPUT_2D
-#undef ASSEMBLE_INPUT_1D
-#undef MAKE_INTERPOLATE_LINEAR
-
-/*
-* Name:
-* InterpolateNearest<X>
-
-* Purpose:
-* Resample a data grid, using the nearest-pixel interpolation scheme.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int InterpolateNearest<X>( int ndim_in,
-* const int *lbnd_in, const int *ubnd_in,
-* const <Xtype> *in, const <Xtype> *in_var,
-* int npoint, const int *offset,
-* const double *const *coords,
-* int flags, <Xtype> badval,
-* <Xtype> *out, <Xtype> *out_var )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This is a set of functions which resample a rectangular input
-* grid of data (and, optionally, associated statistical variance
-* values) so as to place them into a new output grid. Each output
-* grid point may be mapped on to a position in the input grid in
-* an arbitrary way. Where the positions given do not correspond
-* with a pixel centre in the input grid, the interpolation scheme
-* used is simply to select the nearest pixel (i.e. the one whose
-* bounds contain the supplied position).
-
-* Parameters:
-* ndim_in
-* The number of dimensions in the input grid. This should be at
-* least one.
-* lbnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the first
-* pixel in the input grid along each dimension.
-* ubnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the last
-* pixel in the input grid along each dimension.
-*
-* Note that "lbnd_in" and "ubnd_in" together define the shape
-* and size of the input grid, its extent along a particular
-* (i'th) dimension being ubnd_in[i]-lbnd_in[i]+1 (assuming "i"
-* is zero-based). They also define the input grid's coordinate
-* system, with each pixel being of unit extent along each
-* dimension with integral coordinate values at its centre.
-* in
-* Pointer to the array of data to be resampled (with an element
-* for each pixel in the input grid). The numerical type of
-* these data should match the function used, as given by the
-* suffix on the function name. The storage order should be such
-* that the index of the first grid dimension varies most
-* rapidly and that of the final dimension least rapidly
-* (i.e. Fortran array storage order).
-* in_var
-* An optional pointer to a second array of positive numerical
-* values (with the same size and type as the "in" array), which
-* represent estimates of the statistical variance associated
-* with each element of the "in" array. If this second array is
-* given (along with the corresponding "out_var" array), then
-* estimates of the variance of the resampled data will also be
-* returned.
-*
-* If no variance estimates are required, a NULL pointer should
-* be given.
-* npoint
-* The number of points at which the input grid is to be
-* resampled.
-* offset
-* Pointer to an array of integers with "npoint" elements. For
-* each output point, this array should contain the zero-based
-* offset in the output array(s) (i.e. the "out" and,
-* optionally, the "out_var" arrays) at which the resampled
-* output value(s) should be stored.
-* coords
-* An array of pointers to double, with "ndim_in"
-* elements. Element "coords[coord]" should point at the first
-* element of an array of double (with "npoint" elements) which
-* contains the values of coordinate number "coord" for each
-* interpolation point. The value of coordinate number "coord"
-* for interpolation point number "point" is therefore given by
-* "coords[coord][point]" (assuming both indices to be
-* zero-based). If any point has a coordinate value of AST__BAD
-* associated with it, then the corresponding output data (and
-* variance) will be set to the value given by "badval" (unles the
-* AST__NOBAD flag is specified).
-* flags
-* The bitwise OR of a set of flag values which control the
-* operation of the function. Currently, only the flag
-* AST__USEBAD is significant and indicates whether there are
-* "bad" (i.e. missing) data in the input array(s) which must be
-* recognised and propagated to the output array(s). If this
-* flag is not set, all input values are treated literally.
-* badval
-* If the AST__USEBAD flag is set in the "flags" value (above),
-* this parameter specifies the value which is used to identify
-* bad data and/or variance values in the input array(s). Its
-* numerical type must match that of the "in" (and "in_var")
-* arrays. Unles the AST__NOBAD flag is specified in "flags", the
-* same value will also be used to flag any output array elements
-* for which resampled values could not be obtained. The output
-* arrays(s) may be flagged with this value whether or not the
-* AST__USEBAD flag is set (the function return value indicates
-* whether any such values have been produced).
-* out
-* Pointer to an array with the same data type as the "in"
-* array, into which the resampled data will be returned. Note
-* that details of how the output grid maps on to this array
-* (e.g. the storage order, number of dimensions, etc.) is
-* arbitrary and is specified entirely by means of the "offset"
-* array. The "out" array should therefore contain sufficient
-* elements to accommodate the "offset" values supplied. There
-* is no requirement that all elements of the "out" array should
-* be assigned values, and any which are not addressed by the
-* contents of the "offset" array will be left unchanged.
-* out_var
-* An optional pointer to an array with the same data type and
-* size as the "out" array, into which variance estimates for
-* the resampled values may be returned. This array will only be
-* used if the "in_var" array has been given. It is addressed in
-* exactly the same way (via the "offset" array) as the "out"
-* array. The values returned are estimates of the statistical
-* variance of the corresponding values in the "out" array, on
-* the assumption that all errors in input grid values (in the
-* "in" array) are statistically independent and that their
-* variance estimates (in the "in_var" array) may simply be
-* summed (with appropriate weighting factors).
-*
-* If no output variance estimates are required, a NULL pointer
-* should be given.
-
-* Returned Value:
-* The number of output grid points to which a data value (or a
-* variance value if relevant) equal to "badval" has been assigned
-* because no valid output value could be obtained.
-
-* Notes:
-* - There is a separate function for each numerical type of
-* gridded data, distinguished by replacing the <X> in the function
-* name by the appropriate 1- or 2-character suffix.
-* - A value of zero will be returned if any of these functions is
-* invoked with the global error status set, or if it should fail
-* for any reason.
-*/
-/* Define a macro to implement the function for a specific data
- type. */
-#define MAKE_INTERPOLATE_NEAREST(X,Xtype,Xsigned) \
-static int InterpolateNearest##X( int ndim_in, \
- const int *lbnd_in, const int *ubnd_in, \
- const Xtype *in, const Xtype *in_var, \
- int npoint, const int *offset, \
- const double *const *coords, \
- int flags, Xtype badval, \
- Xtype *out, Xtype *out_var, int *status ) { \
-\
-/* Local Variables: */ \
- Xtype var; /* Variance value */ \
- double *xn_max; /* Pointer to upper limits array (n-d) */ \
- double *xn_min; /* Pointer to lower limits array (n-d) */ \
- double x; /* x coordinate value */ \
- double xmax; /* x upper limit */ \
- double xmin; /* x lower limit */ \
- double xn; /* Coordinate value (n-d) */ \
- double y; /* y coordinate value */ \
- double ymax; /* y upper limit */ \
- double ymin; /* y lower limit */ \
- int *stride; /* Pointer to array of dimension strides */ \
- int bad; /* Output pixel bad? */ \
- int idim; /* Loop counter for dimensions */ \
- int ix; /* Number of pixels offset in x direction */ \
- int ixn; /* Number of pixels offset (n-d) */ \
- int iy; /* Number of pixels offset in y direction */ \
- int nobad; /* Was the AST__NOBAD flag set? */ \
- int off_in; /* Pixel offset into input array */ \
- int off_out; /* Pixel offset into output array */ \
- int point; /* Loop counter for output points */ \
- int result; /* Returned result value */ \
- int s; /* Temporary variable for strides */ \
- int usebad; /* Use "bad" input pixel values? */ \
- int usevar; /* Process variance array? */ \
- int ystride; /* Stride along input grid y direction */ \
-\
-/* Initialise. */ \
- result = 0; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* Initialise variables to avoid "used of uninitialised variable" \
- messages from dumb compilers. */ \
- bad = 0; \
- off_in = 0; \
-\
-/* Determine if we are processing bad pixels or variances. */ \
- nobad = flags & AST__NOBAD; \
- usebad = flags & AST__USEBAD; \
- usevar = in_var && out_var; \
-\
-/* Handle the 1-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
- if ( ndim_in == 1 ) { \
-\
-/* Calculate the coordinate limits of the input array. */ \
- xmin = (double) lbnd_in[ 0 ] - 0.5; \
- xmax = (double) ubnd_in[ 0 ] + 0.5; \
-\
-/* Identify four cases, according to whether bad pixels and/or \
- variances are being processed. In each case, loop through all the \
- output points to (a) assemble the input data needed to form the \
- interpolated value, and (b) calculate the result and assign it to \
- the output arrays(s). In each case we assign constant values (0 or \
- 1) to the "Usebad" and "Usevar" flags so that code for handling bad \
- pixels and variances can be eliminated when not required. */ \
- if ( nobad ) { \
- if ( usebad ) { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,1,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,1,1,1) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,1,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,1,0,1) \
- } \
- } \
- } else { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,0,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,0,1,1) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,0,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,0,0,1) \
- } \
- } \
- } \
-\
-/* Four more cases as above, but without the AST__NOBAD flag. */ \
- } else { \
- if ( usebad ) { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,1,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,1,1,0) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,1,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,1,0,0) \
- } \
- } \
- } else { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,0,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,0,1,0) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,0,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,0,0,0) \
- } \
- } \
- } \
- } \
-\
-/* Handle the 2-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
- } else if ( ndim_in == 2 ) { \
-\
-/* Calculate the stride along the y dimension of the input grid. */ \
- ystride = ubnd_in[ 0 ] - lbnd_in[ 0 ] + 1; \
-\
-/* Calculate the coordinate limits of the input array in each \
- dimension. */ \
- xmin = (double) lbnd_in[ 0 ] - 0.5; \
- xmax = (double) ubnd_in[ 0 ] + 0.5; \
- ymin = (double) lbnd_in[ 1 ] - 0.5; \
- ymax = (double) ubnd_in[ 1 ] + 0.5; \
-\
-/* Identify four cases, according to whether bad pixels and/or \
- variances are being processed. In each case, loop through all the \
- output points to (a) assemble the input data needed to form the \
- interpolated value, and (b) calculate the result and assign it to \
- the output arrays(s). In each case we assign constant values (0 or \
- 1) to the "Usebad" and "Usevar" flags so that code for handling bad \
- pixels and variances can be eliminated when not required. */ \
- if ( nobad ) { \
- if ( usebad ) { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,1,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,1,1,1) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,1,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,1,0,1) \
- } \
- } \
- } else { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,0,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,0,1,1) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,0,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,0,0,1) \
- } \
- } \
- } \
-\
-/* Four more cases as above, but without the AST__NOBAD flag. */ \
- } else { \
- if ( usebad ) { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,1,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,1,1,0) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,1,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,1,0,0) \
- } \
- } \
- } else { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,0,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,0,1,0) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,0,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,0,0,0) \
- } \
- } \
- } \
- } \
-\
-/* Handle other numbers of dimensions. */ \
-/* ----------------------------------- */ \
- } else { \
-\
-/* Allocate workspace. */ \
- stride = astMalloc( sizeof( int ) * (size_t) ndim_in ); \
- xn_max = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
- xn_min = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
- if ( astOK ) { \
-\
-/* Calculate the stride along each dimension of the input grid. */ \
- for ( s = 1, idim = 0; idim < ndim_in; idim++ ) { \
- stride[ idim ] = s; \
- s *= ubnd_in[ idim ] - lbnd_in[ idim ] + 1; \
-\
-/* Calculate the coordinate limits of the input grid in each \
- dimension. */ \
- xn_min[ idim ] = (double) lbnd_in[ idim ] - 0.5; \
- xn_max[ idim ] = (double) ubnd_in[ idim ] + 0.5; \
- } \
-\
-/* Identify four cases, according to whether bad pixels and/or \
- variances are being processed. In each case, loop through all the \
- output points to (a) assemble the input data needed to form the \
- interpolated value, and (b) calculate the result and assign it to \
- the output arrays(s). In each case we assign constant values (0 or \
- 1) to the "Usebad" and "Usevar" flags so that code for handling bad \
- pixels and variances can be eliminated when not required. */ \
- if ( nobad ) { \
- if ( usebad ) { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,1,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,1,1,1) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,1,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,1,0,1) \
- } \
- } \
- } else { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,0,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,0,1,1) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,0,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,0,0,1) \
- } \
- } \
- } \
-\
-/* Another 4 cases as above, but without the AST__NOBAD flag. */ \
- } else { \
- if ( usebad ) { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,1,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,1,1,0) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,1,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,1,0,0) \
- } \
- } \
- } else { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,0,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,0,1,0) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,0,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,0,0,0) \
- } \
- } \
- } \
- } \
- } \
-\
-/* Free the workspace. */ \
- stride = astFree( stride ); \
- xn_max = astFree( xn_max ); \
- xn_min = astFree( xn_min ); \
- } \
-\
-/* If an error has occurred, clear the returned result. */ \
- if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
- return result; \
-}
-
-/* This subsidiary macro assembles the input data needed in
- preparation for forming the interpolated value in the 1-dimensional
- case. */
-#define ASSEMBLE_INPUT_1D(X,Xtype,Usebad,Usevar) \
-\
-/* Obtain the x coordinate of the current point and test if it lies \
- outside the input grid, or is bad. */ \
- x = coords[ 0 ][ point ]; \
- bad = ( x < xmin ) || ( x >= xmax ) || ( x == AST__BAD ); \
- if ( !bad ) { \
-\
-/* If not, then obtain the offset within the input grid of the pixel \
- which contains the current point. */ \
- off_in = (int) floor( x + 0.5 ) - lbnd_in[ 0 ]; \
-\
-/* If necessary, test if the input pixel is bad. */ \
- if ( Usebad ) bad = ( in[ off_in ] == badval ); \
- }
-
-/* This subsidiary macro assembles the input data needed in
- preparation for forming the interpolated value in the 2-dimensional
- case. */
-#define ASSEMBLE_INPUT_2D(X,Xtype,Usebad,Usevar) \
-\
-/* Obtain the x coordinate of the current point and test if it lies \
- outside the input grid, or is bad. */ \
- x = coords[ 0 ][ point ]; \
- bad = ( x < xmin ) || ( x >= xmax ) || ( x == AST__BAD ); \
- if ( !bad ) { \
-\
-/* If not, then similarly obtain and test the y coordinate. */ \
- y = coords[ 1 ][ point ]; \
- bad = ( y < ymin ) || ( y >= ymax ) || ( y == AST__BAD ); \
- if ( !bad ) { \
-\
-/* Obtain the offsets along each input grid dimension of the input \
- pixel which contains the current point. */ \
- ix = (int) floor( x + 0.5 ) - lbnd_in[ 0 ]; \
- iy = (int) floor( y + 0.5 ) - lbnd_in[ 1 ]; \
-\
-/* Calculate this pixel's offset from the start of the input array. */ \
- off_in = ix + ystride * iy; \
-\
-/* If necessary, test if the input pixel is bad. */ \
- if ( Usebad ) bad = ( in[ off_in ] == badval ); \
- } \
- }
-
-/* This subsidiary macro assembles the input data needed in
- preparation for forming the interpolated value in the n-dimensional
- case. */
-#define ASSEMBLE_INPUT_ND(X,Xtype,Usebad,Usevar) \
-\
-/* Initialise the offset into the input array. Then loop to obtain \
- each coordinate associated with the current output point. */ \
- off_in = 0; \
- for ( idim = 0; idim < ndim_in; idim++ ) { \
- xn = coords[ idim ][ point ]; \
-\
-/* Test if the coordinate lies outside the input grid, or is bad. If \
- either is true, the corresponding output pixel value will be bad, \
- so give up on this point. */ \
- bad = ( xn < xn_min[ idim ] ) || ( xn >= xn_max[ idim ] ) || \
- ( xn == AST__BAD ); \
- if ( bad ) break; \
-\
-/* Obtain the offset along the current input grid dimension of the \
- input pixel which contains the current point. */ \
- ixn = (int) floor( xn + 0.5 ) - lbnd_in[ idim ]; \
-\
-/* Accumulate this pixel's offset from the start of the input \
- array. */ \
- off_in += ixn * stride[ idim ]; \
- } \
-\
-/* Once the required input pixel has been located, test if it is \
- bad, if necessary. */ \
- if ( Usebad ) bad = bad || ( in[ off_in ] == badval );
-
-/* This subsidiary macro assigns the output value (and variance) to
- the output array(s). */
-#define CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,Usebad,Usevar,Nobad) \
-\
-/* Obtain the pixel offset into the output array. */ \
- off_out = offset[ point ]; \
-\
-/* If the input data value is bad, assign a bad output value (and \
- variance, if required) and count it. */ \
- if ( bad ) { \
- if( !Nobad ) { \
- out[ off_out ] = badval; \
- if ( Usevar ) out_var[ off_out ] = badval; \
- } \
- result++; \
-\
-/* Otherwise, assign the value obtained from the input grid. */ \
- } else { \
- out[ off_out ] = in[ off_in ]; \
-\
-/* If required, obtain the associated variance value. If necessary, \
- test if it is bad (if the data type is signed, also check that it \
- is not negative). */ \
- if ( Usevar ) { \
- var = in_var[ off_in ]; \
- if ( Usebad ) bad = ( var == badval ); \
- CHECK_FOR_NEGATIVE_VARIANCE(Xtype) \
-\
-/* If the variance value can be bad, and is, then store a bad value in \
- the output array and count it. Otherwise, store the variance \
- value. */ \
- if ( ( ( Xsigned ) || ( Usebad ) ) && bad ) { \
- if( !Nobad ) out_var[ off_out ] = badval; \
- result++; \
- } else { \
- out_var[ off_out ] = var; \
- } \
- } \
- }
-
-/* This subsidiary macro tests for negative variance values in the
- macros above. This check is required only for signed data
- types. */
-#define CHECK_FOR_NEGATIVE_VARIANCE(Xtype) \
- bad = bad || ( var < ( (Xtype) 0 ) );
-
-/* Expand the main macro above to generate a function for each
- required signed data type. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-MAKE_INTERPOLATE_NEAREST(LD,long double,1)
-#endif
-MAKE_INTERPOLATE_NEAREST(D,double,1)
-MAKE_INTERPOLATE_NEAREST(F,float,1)
-MAKE_INTERPOLATE_NEAREST(L,long int,1)
-MAKE_INTERPOLATE_NEAREST(I,int,1)
-MAKE_INTERPOLATE_NEAREST(S,short int,1)
-MAKE_INTERPOLATE_NEAREST(B,signed char,1)
-
-/* Re-define the macro for testing for negative variances to do
- nothing. */
-#undef CHECK_FOR_NEGATIVE_VARIANCE
-#define CHECK_FOR_NEGATIVE_VARIANCE(Xtype)
-
-/* Expand the main macro above to generate a function for each
- required unsigned data type. */
-MAKE_INTERPOLATE_NEAREST(UL,unsigned long int,0)
-MAKE_INTERPOLATE_NEAREST(UI,unsigned int,0)
-MAKE_INTERPOLATE_NEAREST(US,unsigned short int,0)
-MAKE_INTERPOLATE_NEAREST(UB,unsigned char,0)
-
-/* Undefine the macros used above. */
-#undef CHECK_FOR_NEGATIVE_VARIANCE
-#undef CALC_AND_ASSIGN_OUTPUT
-#undef ASSEMBLE_INPUT_ND
-#undef ASSEMBLE_INPUT_2D
-#undef ASSEMBLE_INPUT_1D
-#undef MAKE_INTERPOLATE_NEAREST
-
-/*
-* Name:
-* InterpolateBlockAverage<X>
-
-* Purpose:
-* Resample a data grid, using multidimensional block averaging.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void InterpolateBlockAverage<X>( int ndim_in,
-* const int lbnd_in[],
-* const int ubnd_in[],
-* const <Xtype> in[],
-* const <Xtype> in_var[],
-* int npoint, const int offset[],
-* const double *const coords[],
-* const double params[], int flags,
-* <Xtype> badval, <Xtype> *out,
-* <Xtype> *out_var, int *nbad )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This is a set of functions which resample a rectangular input
-* grid of data (and, optionally, associated statistical variance
-* values) so as to place them into a new output grid. To generate
-* an output grid pixel, a block average is taken over an ndim-
-* dimensional hypercube of pixels in the input grid. If variances
-* are being used then the input pixels will be weighted according
-* to the reciprocals of the corresponding variance values, and
-* input pixels without a valid variance will be ignored;
-* otherwise an unweighted average will be taken over
-* all non-bad pixels in the cube. The size of the cube over which
-* the average is taken is determined by the first element of the
-* params array.
-*
-* This "interpolation" scheme is appropriate where an input grid
-* is to be resampled onto a much coarser output grid.
-
-* Parameters:
-* ndim_in
-* The number of dimensions in the input grid. This should be at
-* least one.
-* lbnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the first
-* pixel in the input grid along each dimension.
-* ubnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the last
-* pixel in the input grid along each dimension.
-*
-* Note that "lbnd_in" and "ubnd_in" together define the shape
-* and size of the input grid, its extent along a particular
-* (i'th) dimension being ubnd_in[i]-lbnd_in[i]+1 (assuming "i"
-* is zero-based). They also define the input grid's coordinate
-* system, with each pixel being of unit extent along each
-* dimension with integral coordinate values at its centre.
-* in
-* Pointer to the array of data to be resampled (with an element
-* for each pixel in the input grid). The numerical type of
-* these data should match the function used, as given by the
-* suffix on the function name. The storage order should be such
-* that the index of the first grid dimension varies most
-* rapidly and that of the final dimension least rapidly
-* (i.e. Fortran array storage order).
-* in_var
-* An optional pointer to a second array of positive numerical
-* values (with the same size and type as the "in" array), which
-* represent estimates of the statistical variance associated
-* with each element of the "in" array. If this second array is
-* given (along with the corresponding "out_var" array), then
-* estimates of the variance of the resampled data will also be
-* returned.
-*
-* If no variance estimates are required, a NULL pointer should
-* be given.
-* npoint
-* The number of points at which the input grid is to be
-* resampled.
-* offset
-* Pointer to an array of integers with "npoint" elements. For
-* each output point, this array should contain the zero-based
-* offset in the output array(s) (i.e. the "out" and,
-* optionally, the "out_var" arrays) at which the resampled
-* output value(s) should be stored.
-* coords
-* An array of pointers to double, with "ndim_in"
-* elements. Element "coords[coord]" should point at the first
-* element of an array of double (with "npoint" elements) which
-* contains the values of coordinate number "coord" for each
-* interpolation point. The value of coordinate number "coord"
-* for interpolation point number "point" is therefore given by
-* "coords[coord][point]" (assuming both indices to be
-* zero-based). If any point has a coordinate value of AST__BAD
-* associated with it, then the corresponding output data (and
-* variance) will be set to the value given by "badval" (unles the
-* AST__NOBAD flag is specified).
-* params
-* A pointer to an array of doubles giving further information
-* about how the resampling is to proceed. Only the first
-* element is significant; the nearest integer to this gives
-* the number of pixels on either side of the central input
-* grid pixel to use in each dimension. Therefore
-* (1 + 2*params[0])**ndim_in pixels will be averaged over to
-* generate each output pixel.
-* flags
-* The bitwise OR of a set of flag values which control the
-* operation of the function. Currently, only the flag
-* AST__USEBAD is significant and indicates whether there are
-* "bad" (i.e. missing) data in the input array(s) which must be
-* recognised and propagated to the output array(s). If this
-* flag is not set, all input values are treated literally.
-* badval
-* If the AST__USEBAD flag is set in the "flags" value (above),
-* this parameter specifies the value which is used to identify
-* bad data and/or variance values in the input array(s). Its
-* numerical type must match that of the "in" (and "in_var")
-* arrays. Unles the AST__NOBAD flag is specified in "flags", the
-* same value will also be used to flag any output array elements
-* for which resampled values could not be obtained. The output
-* arrays(s) may be flagged with this value whether or not the
-* AST__USEBAD flag is set (the function return value indicates
-* whether any such values have been produced).
-* out
-* Pointer to an array with the same data type as the "in"
-* array, into which the resampled data will be returned. Note
-* that details of how the output grid maps on to this array
-* (e.g. the storage order, number of dimensions, etc.) is
-* arbitrary and is specified entirely by means of the "offset"
-* array. The "out" array should therefore contain sufficient
-* elements to accommodate the "offset" values supplied. There
-* is no requirement that all elements of the "out" array should
-* be assigned values, and any which are not addressed by the
-* contents of the "offset" array will be left unchanged.
-* out_var
-* An optional pointer to an array with the same data type and
-* size as the "out" array, into which variance estimates for
-* the resampled values may be returned. This array will only be
-* used if the "in_var" array has been given. It is addressed in
-* exactly the same way (via the "offset" array) as the "out"
-* array. The values returned are estimates of the statistical
-* variance of the corresponding values in the "out" array, on
-* the assumption that all errors in input grid values (in the
-* "in" array) are statistically independent and that their
-* variance estimates (in the "in_var" array) may simply be
-* summed (with appropriate weighting factors).
-*
-* If no output variance estimates are required, a NULL pointer
-* should be given.
-* nbad
-* Pointer to an int in which to return the number of
-* interpolation points at which an output data value (and/or a
-* variance value if relevant) equal to "badval" has been
-* assigned because no valid interpolated value could be
-* obtained. The maximum value that will be returned is
-* "npoint" and the minimum is zero (indicating that all output
-* values were successfully obtained).
-
-* Notes:
-* - There is a separate function for each numerical type of
-* gridded data, distinguished by replacing the <X> in the function
-* name by the appropriate 1- or 2-character suffix.
-*/
-/* Define a macro to implement the function for a specific data
- type. */
-#define MAKE_INTERPOLATE_BLOCKAVE(X,Xtype,Xfloating,Xfloattype,Xsigned) \
-static void InterpolateBlockAverage##X( int ndim_in, \
- const int lbnd_in[], \
- const int ubnd_in[], \
- const Xtype in[], \
- const Xtype in_var[], \
- int npoint, const int offset[], \
- const double *const coords[], \
- const double params[], int flags, \
- Xtype badval, Xtype *out, \
- Xtype *out_var, int *nbad ) { \
-\
-/* Local Variables: */ \
- Xfloattype hi_lim; /* Upper limit on output values */ \
- Xfloattype lo_lim; /* Lower limit on output values */ \
- Xfloattype pixwt; /* Weight to apply to individual pixel */ \
- Xfloattype sum; /* Weighted sum of pixel data values */ \
- Xfloattype sum_var; /* Weighted sum of pixel variance values */ \
- Xfloattype val; /* Data value to be assigned to output */ \
- Xfloattype val_var; /* Variance to be assigned to output */ \
- Xfloattype wtsum; /* Sum of weight values */ \
- Xfloattype wtsum_sq; /* Square of sum of weights */ \
- Xtype var; /* Variance value */ \
- double *xn_max; /* Pointer to upper limits array (n-d) */ \
- double *xn_min; /* Pointer to lower limits array (n-d) */ \
- double x; /* x coordinate value */ \
- double xn; /* Coordinate value (n-d) */ \
- double y; /* y coordinate value */ \
- int *hi; /* Pointer to array of upper indices */ \
- int *ixm; /* Pointer to array of current indices */ \
- int *lo; /* Pointer to array of lower indices */ \
- int *status; /* Pointer to inherited status value */ \
- int *stride; /* Pointer to array of dimension strides */ \
- int bad; /* Output pixel bad? */ \
- int bad_var; /* Output variance bad? */ \
- int done; /* All pixel indices done? */ \
- int hi_x; /* Upper pixel index (x dimension) */ \
- int hi_y; /* Upper pixel index (y dimension) */ \
- int idim; /* Loop counter for dimensions */ \
- int ix; /* Pixel index in input grid x dimension */ \
- int ixn; /* Pixel index in input grid (n-d) */ \
- int iy; /* Pixel index in input grid y dimension */ \
- int lo_x; /* Lower pixel index (x dimension) */ \
- int lo_y; /* Lower pixel index (y dimension) */ \
- int neighb; /* Number of adjacent pixels on each side */ \
- int nobad; /* Was the AST__NOBAD flag set? */ \
- int off1; /* Input pixel offset due to y index */ \
- int off_in; /* Offset to input pixel */ \
- int off_out; /* Offset to output pixel */ \
- int point; /* Loop counter for output points */ \
- int s; /* Temporary variable for strides */ \
- int usebad; /* Use "bad" input pixel values? */ \
- int usevar; /* Process variance array? */ \
- int ystride; /* Stride along input grid y dimension */ \
-\
-/* Initialise. */ \
- *nbad = 0; \
-\
-/* Get a pointer to the inherited status argument. */ \
- status = astGetStatusPtr; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Initialise variables to avoid "used of uninitialised variable" \
- messages from dumb compilers. */ \
- val = 0; \
- val_var = 0; \
- sum_var = 0; \
- wtsum = 0; \
- bad = 0; \
- bad_var = 0; \
-\
-/* Determine if we are processing bad pixels or variances. */ \
- nobad = flags & AST__NOBAD; \
- usebad = flags & AST__USEBAD; \
- usevar = in_var && out_var; \
-\
-/* Set the number of pixels each side of central pixel to use. */ \
- neighb = (int) floor( params[ 0 ] + 0.5 ); \
-\
-/* Set up limits for checking output values to ensure that they do not \
- overflow the range of the data type being used. */ \
- lo_lim = LO_##X; \
- hi_lim = HI_##X; \
-\
-/* Handle the 1-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
- if ( ndim_in == 1 ) { \
-\
-/* Identify four cases, according to whether bad pixels and/or \
- variances are being processed. In each case, loop through all the \
- output points to (a) assemble the input data needed to form the \
- interpolated value, and (b) calculate the result and assign it to \
- the output arrays(s). In each case we assign constant values (0 or \
- 1) to the "Usebad" and "Usevar" flags so that code for handling bad \
- pixels and variances can be eliminated when not required. */ \
- if ( nobad ) { \
- if ( usebad ) { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,1,1) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,0,1) \
- } \
- } \
- } else { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,1,1) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,0,1) \
- } \
- } \
- } \
-\
-/* Another 4 cases as above, but without the AST__NOBAD flag. */ \
- } else { \
- if ( usebad ) { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,1,0) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,0,0) \
- } \
- } \
- } else { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,1,0) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,0,0) \
- } \
- } \
- } \
- } \
-\
-/* Handle the 2-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
- } else if ( ndim_in == 2 ) { \
-\
-/* Calculate the stride along the y dimension of the input grid. */ \
- ystride = ubnd_in[ 0 ] - lbnd_in[ 0 ] + 1; \
-\
-/* Identify four cases, according to whether bad pixels and/or \
- variances are being processed. In each case, loop through all the \
- output points to (a) assemble the input data needed to form the \
- interpolated value, and (b) calculate the result and assign it to \
- the output arrays(s). In each case we assign constant values (0 or \
- 1) to the "Usebad" and "Usevar" flags so that code for handling bad \
- pixels and variances can be eliminated when not required. */ \
- if ( nobad ) { \
- if ( usebad ) { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,1,1) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,0,1) \
- } \
- } \
- } else { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,1,1) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,0,1) \
- } \
- } \
- } \
-\
-/* Another 4 cases as above, but without the AST__NOBAD flag. */ \
- } else { \
- if ( usebad ) { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,1,0) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,0,0) \
- } \
- } \
- } else { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,1,0) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,0,0) \
- } \
- } \
- } \
- } \
-\
-/* Handle other numbers of dimensions. */ \
-/* ----------------------------------- */ \
- } else { \
-\
-/* Allocate workspace. */ \
- hi = astMalloc( sizeof( int ) * (size_t) ndim_in ); \
- lo = astMalloc( sizeof( int ) * (size_t) ndim_in ); \
- stride = astMalloc( sizeof( int ) * (size_t) ndim_in ); \
- ixm = astMalloc( sizeof( int ) * (size_t) ndim_in ); \
- xn_max = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
- xn_min = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
- if ( astOK ) { \
-\
-/* Calculate the stride along each dimension of the input grid. */ \
- for ( s = 1, idim = 0; idim < ndim_in; idim++ ) { \
- stride[ idim ] = s; \
- s *= ubnd_in[ idim ] - lbnd_in[ idim ] + 1; \
-\
-/* Calculate the coordinate limits of the input grid in each \
- dimension. */ \
- xn_min[ idim ] = (double) lbnd_in[ idim ] - 0.5; \
- xn_max[ idim ] = (double) ubnd_in[ idim ] + 0.5; \
- } \
-\
-/* Identify four cases, according to whether bad pixels and/or \
- variances are being processed. In each case, loop through all the \
- output points to (a) assemble the input data needed to form the \
- interpolated value, and (b) calculate the result and assign it to \
- the output arrays(s). In each case we assign constant values (0 or \
- 1) to the "Usebad" and "Usevar" flags so that code for handling bad \
- pixels and variances can be eliminated when not required. */ \
- if ( nobad ) { \
- if ( usebad ) { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,1,1) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,0,1) \
- } \
- } \
- } else { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,1,1) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,0,1) \
- } \
- } \
- } \
-\
-/* Another 4 cases as above, but this time without the AST__NOBAD flag. */ \
- } else { \
- if ( usebad ) { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,1,0) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,0,0) \
- } \
- } \
- } else { \
- if ( usevar ) { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,1,0) \
- } \
- } else { \
- for ( point = 0; point < npoint; point++ ) { \
- ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
- CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,0,0) \
- } \
- } \
- } \
- } \
- } \
-\
-/* Free the workspace. */ \
- hi = astFree( hi ); \
- lo = astFree( lo ); \
- stride = astFree( stride ); \
- ixm = astFree( ixm ); \
- xn_max = astFree( xn_max ); \
- xn_min = astFree( xn_min ); \
- } \
-\
-/* If an error has occurred, clear the returned result. */ \
- if ( !astOK ) *nbad = 0; \
-\
-/* Return. */ \
-}
-
-/* This subsidiary macro assembles the input data needed in
- preparation for forming the interpolated value in the 1-dimensional
- case. */
-#define ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,Usebad,Usevar) \
-\
-/* Obtain the x coordinate of the current point and test if it is bad. */ \
- x = coords[ 0 ][ point ]; \
- bad = ( x == AST__BAD ); \
-\
-/* Note we do not need to check here whether the pixel in this position is \
- bad; if any pixels in the cube are good we can form an average. */ \
-\
-/* If OK, calculate the lowest and highest indices (in the x \
- dimension) of the region of neighbouring pixels that will \
- contribute to the interpolated result. Constrain these values to \
- lie within the input grid. */ \
- if ( !bad ) { \
- ix = (int) floor( x ); \
- lo_x = MaxI( ix - neighb + 1, lbnd_in[ 0 ], status ); \
- hi_x = MinI( ix + neighb, ubnd_in[ 0 ], status ); \
-\
-/* Initialise sums for forming the interpolated result. */ \
- sum = (Xfloattype) 0.0; \
- wtsum = (Xfloattype) 0.0; \
- if ( Usevar ) { \
- sum_var = (Xfloattype) 0.0; \
- bad_var = 0; \
- } \
-\
-/* Loop to inspect all the contributing pixels, calculating the offset \
- of each pixel from the start of the input array. */ \
- off_in = lo_x - lbnd_in[ 0 ]; \
- for ( ix = lo_x; ix <= hi_x; ix++, off_in++ ) { \
-\
-/* If necessary, test if the input pixel is bad. */ \
- if ( !( Usebad ) || ( in[ off_in ] != badval ) ) { \
-\
-/* If we are using variances, then check that the variance is valid; \
- if it is invalid then ignore this pixel altogether. */ \
- if ( Usevar ) { \
- var = in_var[ off_in ]; \
- if ( Usebad ) bad_var = ( var == badval ); \
- CHECK_FOR_NEGATIVE_VARIANCE(Xtype) \
-\
-/* If variance is valid then accumulate suitably weighted values into \
- the totals. */ \
- if ( !( ( Xsigned ) || ( Usebad ) ) || !bad_var ) { \
- pixwt = (Xfloattype) 1.0 / var; \
- sum += pixwt * ( (Xfloattype) in[ off_in ] ); \
- wtsum += pixwt; \
- sum_var += pixwt; \
- } \
-\
-/* If we are not using variances, then accumulate values into the \
- totals with a weighting of unity. */ \
- } else { \
- sum += (Xfloattype) in[ off_in ]; \
- wtsum++; \
- } \
- } \
- } \
- }
-
-/* This subsidiary macro assembles the input data needed in
- preparation for forming the interpolated value in the 2-dimensional
- case. */
-#define ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,Usebad,Usevar) \
-\
-/* Obtain the x coordinate of the current point and test if it is bad. */ \
- x = coords[ 0 ][ point ]; \
- bad = ( x == AST__BAD ); \
- if ( !bad ) { \
-\
-/* If not, then similarly obtain and test the y coordinate. */ \
- y = coords[ 1 ][ point ]; \
- bad = ( y == AST__BAD ); \
-\
-/* Note we do not need to check here whether the pixel in this position is \
- bad; if any pixels in the cube are good we can form an average. */ \
-\
-/* If OK, calculate the lowest and highest indices (in each dimension) \
- of the region of neighbouring pixels that will contribute to the \
- interpolated result. Constrain these values to lie within the input \
- grid. */ \
- if ( !bad ) { \
- ix = (int) floor( x ); \
- lo_x = MaxI( ix - neighb + 1, lbnd_in[ 0 ], status ); \
- hi_x = MinI( ix + neighb, ubnd_in[ 0 ], status ); \
- iy = (int) floor( y ); \
- lo_y = MaxI( iy - neighb + 1, lbnd_in[ 1 ], status ); \
- hi_y = MinI( iy + neighb, ubnd_in[ 1 ], status ); \
-\
-/* Initialise sums for forming the interpolated result. */ \
- sum = (Xfloattype) 0.0; \
- wtsum = (Xfloattype) 0.0; \
- if ( Usevar ) { \
- sum_var = (Xfloattype) 0.0; \
- bad_var = 0; \
- } \
-\
-/* Loop to inspect all the contributing pixels, calculating the offset \
- of each pixel from the start of the input array. */ \
- off1 = lo_x - lbnd_in[ 0 ] + ystride * ( lo_y - lbnd_in[ 1 ] ); \
- for ( iy = lo_y; iy <= hi_y; iy++, off1 += ystride ) { \
- off_in = off1; \
- for ( ix = lo_x; ix <= hi_x; ix++, off_in++ ) { \
-\
-/* If necessary, test if the input pixel is bad. */ \
- if ( !( Usebad ) || ( in[ off_in ] != badval ) ) { \
-\
-/* If we are using variances, then check that the variance is valid; \
- if it is invalid then ignore this pixel altogether. */ \
- if ( Usevar ) { \
- var = in_var[ off_in ]; \
- if ( Usebad ) bad_var = ( var == badval ); \
- CHECK_FOR_NEGATIVE_VARIANCE(Xtype) \
-\
-/* If variance is valid then accumulate suitably weighted values into \
- the totals. */ \
- if ( !( ( Xsigned ) || ( Usebad ) ) || !bad_var ) { \
- pixwt = (Xfloattype) 1.0 / var; \
- sum += pixwt * ( (Xfloattype) in[ off_in ] ); \
- wtsum += pixwt; \
- sum_var += pixwt; \
- } \
-\
-/* If we are not using variances, then accumulate values into the \
- totals with a weighting of unity. */ \
- } else { \
- sum += (Xfloattype) in[ off_in ]; \
- wtsum++; \
- } \
- } \
- } \
- } \
- } \
- }
-
-/* This subsidiary macro assembles the input data needed in
- preparation for forming the interpolated value in the n-dimensional
- case. */
-#define ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,Usebad,Usevar) \
-\
-/* Initialise offsets into the input array. then loop to obtain each \
- coordinate associated with the current output poitn. */ \
- off_in = 0; \
- for ( idim = 0; idim < ndim_in; idim++ ) { \
- xn = coords[ idim ][ point ]; \
-\
-/* Test if the coordinate is bad. If so give up on this point. */ \
- bad = ( xn == AST__BAD ); \
- if ( bad ) break; \
-\
-/* Calculate the lowest and highest indices (in the current dimension) \
- of the region of neighbouring pixels that will contribute to the \
- interpolated result. Constrain these values to lie within the input \
- grid. */ \
- ixn = (int) floor( xn ); \
- lo[ idim ] = MaxI( ixn - neighb + 1, lbnd_in[ idim ], status ); \
- hi[ idim ] = MinI( ixn + neighb, ubnd_in[ idim ], status ); \
-\
-/* If the cube has a zero dimension then no data can come from it. */ \
- bad = ( lo[ idim ] > hi[ idim ] ); \
- if ( bad ) break; \
-\
-/* Accumulate the offset (from the start of the input array) of the \
- contributing pixel which has the lowest index in each dimension. */ \
- off_in += stride[ idim ] * ( lo[ idim ] - lbnd_in[ idim ] ); \
-\
-/* Initialise an array to keep track of the current position in the \
- input cube. */ \
- ixm[ idim ] = lo[ idim ]; \
- } \
-\
-/* Note we do not need to check here whether the pixel in this position is \
- bad; if any pixels in the cube are good we can form an average. */ \
-\
-/* If OK, initialise sums for forming the interpolated result. */ \
- if ( !bad ) { \
- sum = (Xfloattype) 0.0; \
- wtsum= (Xfloattype) 0.0; \
- if ( Usevar ) { \
- sum_var = (Xfloattype) 0.0; \
- bad_var = 0; \
- } \
-\
-/* Loop to inspect all the contributing pixels, calculating the offset \
- of each pixel from the start of the input array. */ \
- do { \
-\
-/* If necessary, test if the input pixel is bad. */ \
- if ( !( Usebad ) || ( in[ off_in ] != badval ) ) { \
-\
-/* If we are using variances, then check that the variance is valid; \
- if it is invalid then ignore this pixel altogether. */ \
- if ( Usevar ) { \
- var = in_var[ off_in ]; \
- if ( Usebad ) bad_var = ( var == badval ); \
- CHECK_FOR_NEGATIVE_VARIANCE(Xtype) \
-\
-/* If variance is valid then accumulate suitably weighted values into \
- the totals. */ \
- if ( !( ( Xsigned ) || ( Usebad ) ) || !bad_var ) { \
- pixwt = (Xfloattype) 1.0 / var; \
- sum += pixwt * ( (Xfloattype) in[ off_in ] ); \
- wtsum += pixwt; \
- sum_var += pixwt; \
- } \
-\
-/* If we are not using variances, then accumulate values into the \
- totals with a weighting of unity. */ \
- } else { \
- sum += (Xfloattype) in[ off_in ]; \
- wtsum++; \
- } \
- } \
-\
-/* Locate the next pixel in the input cube; try incrementing the lowest \
- dimension index first, if that rolls over increment the next \
- dimension index, and so on. */ \
- for ( idim = 0; idim < ndim_in; idim++ ) { \
- if ( ixm[ idim ] < hi[ idim ] ) { \
- off_in += stride[ idim ]; \
- ixm[ idim ]++; \
- break; \
- } else { \
- off_in -= stride[ idim ] * ( hi[ idim ] - lo[ idim ] ); \
- ixm[ idim ] = lo[ idim ]; \
- } \
- } \
-\
-/* If the highest dimension index has rolled over, we have done all \
- the pixels in the cube. */ \
- done = ( idim == ndim_in ); \
- } while ( !done ); \
- }
-
-/* This subsidiary macro calculates the interpolated output value (and
- variance) from the sums over contributing pixels, checks the
- results for validity, and assigns them to the output array(s). */
-#define CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Usebad,Usevar,Nobad) \
-\
-/* If the output data value has not yet been flagged as bad, then \
- check that an interpolated value can actually be produced. First \
- check that the sum of weights is not zero. */ \
- if ( !bad ) { \
- bad = ( wtsum == (Xfloattype) 0.0 ); \
-\
-/* If OK, calculate the interpolated value. Then, if the output data \
- type is not floating point, check that this value will not overflow \
- the available output range. */ \
- if ( !bad ) { \
- val = sum / wtsum; \
- if ( !( Xfloating ) ) { \
- bad = ( val <= lo_lim ) || ( val >= hi_lim ); \
- } \
- } \
-\
-/* If no interpolated data value can be produced, then no associated \
- variance will be required either. */ \
- if ( ( Usevar ) && bad ) bad_var = 1; \
- } \
-\
-/* Now perform similar checks on the output variance value (if \
- required). This time we check that the square of the sum of \
- weights is not zero (since this might underflow before the sum of \
- weights). Again we also check to prevent the result overflowing the \
- output data type. */ \
- if ( ( Usevar ) && !bad_var ) { \
- wtsum_sq = wtsum * wtsum; \
- bad_var = ( wtsum_sq == (Xfloattype) 0.0 ); \
- if ( !bad_var ) { \
- val_var = sum_var / wtsum_sq; \
- if ( !( Xfloating ) ) { \
- bad_var = ( val_var <= lo_lim ) || ( val_var >= hi_lim ); \
- } \
- } \
- } \
-\
-/* Obtain the pixel offset into the output array. */ \
- off_out = offset[ point ]; \
-\
-/* Assign a bad output value (and variance) if required and count it. */ \
- if ( bad ) { \
- if( !Nobad ) { \
- out[ off_out ] = badval; \
- if ( Usevar ) out_var[ off_out ] = badval; \
- } \
- (*nbad)++; \
-\
-/* Otherwise, assign the interpolated value. If the output data type \
- is floating point, the result can be stored directly, otherwise we \
- must round to the nearest integer. */ \
- } else { \
- if ( Xfloating ) { \
- out[ off_out ] = (Xtype) val; \
- } else { \
- out[ off_out ] = (Xtype) ( val + ( ( val >= (Xfloattype) 0.0 ) ? \
- ( (Xfloattype) 0.5 ) : \
- ( (Xfloattype) -0.5 ) ) ); \
- } \
-\
-/* If a variance estimate is required but none can be obtained, then \
- store a bad output variance value and count it. */ \
- if ( Usevar ) { \
- if ( bad_var ) { \
- if( !Nobad ) out_var[ off_out ] = badval; \
- (*nbad)++; \
-\
-/* Otherwise, store the variance estimate, rounding to the nearest \
- integer if necessary. */ \
- } else { \
- if ( Xfloating ) { \
- out_var[ off_out ] = (Xtype) val_var; \
- } else { \
- out_var[ off_out ] = (Xtype) ( val_var + \
- ( ( val_var >= (Xfloattype) 0.0 ) ? \
- ( (Xfloattype) 0.5 ) : \
- ( (Xfloattype) -0.5 ) ) ); \
- } \
- } \
- } \
- }
-
-/* These subsidiary macros define limits for range checking of results
- before conversion to the final data type. For each data type code
- <X>, HI_<X> gives the least positive floating point value which
- just overflows that data type towards plus infinity, while LO_<X>
- gives the least negative floating point value which just overflows
- that data type towards minus infinity. Thus, a floating point value
- must satisfy LO<flt_value<HI if overflow is not to occur when it is
- converted to that data type.
-
- The data type of each limit should be that of the smallest
- precision floating point type which will accommodate the full range
- of values that the target type may take. */
-
-/* If <X> is a floating point type, the limits are not actually used,
- but must be present to permit error-free compilation. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-#define HI_LD ( 0.0L )
-#define LO_LD ( 0.0L )
-#endif
-#define HI_D ( 0.0 )
-#define LO_D ( 0.0 )
-#define HI_F ( 0.0f )
-#define LO_F ( 0.0f )
-
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-#define HI_L ( 0.5L + (long double) LONG_MAX )
-#define LO_L ( -0.5L + (long double) LONG_MIN )
-#define HI_UL ( 0.5L + (long double) ULONG_MAX )
-#define LO_UL ( -0.5L )
-#else
-#define HI_L ( 0.5 + (double) LONG_MAX )
-#define LO_L ( -0.5 + (double) LONG_MIN )
-#define HI_UL ( 0.5 + (double) ULONG_MAX )
-#define LO_UL ( -0.5 )
-#endif
-#define HI_I ( 0.5 + (double) INT_MAX )
-#define LO_I ( -0.5 + (double) INT_MIN )
-#define HI_UI ( 0.5 + (double) UINT_MAX )
-#define LO_UI ( -0.5 )
-#define HI_S ( 0.5f + (float) SHRT_MAX )
-#define LO_S ( -0.5f + (float) SHRT_MIN )
-#define HI_US ( 0.5f + (float) USHRT_MAX )
-#define LO_US ( -0.5f )
-#define HI_B ( 0.5f + (float) SCHAR_MAX )
-#define LO_B ( -0.5f + (float) SCHAR_MIN )
-#define HI_UB ( 0.5f + (float) UCHAR_MAX )
-#define LO_UB ( -0.5f )
-
-/* This subsidiary macro tests for negative variance values. This
- check is required only for signed data types. */
-#define CHECK_FOR_NEGATIVE_VARIANCE(Xtype) \
- bad_var = bad_var || ( var < ( (Xtype) 0 ) );
-
-/* Expand the main macro above to generate a function for each
- required signed data type. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-MAKE_INTERPOLATE_BLOCKAVE(LD,long double,1,long double,1)
-MAKE_INTERPOLATE_BLOCKAVE(L,long int,0,long double,1)
-#else
-MAKE_INTERPOLATE_BLOCKAVE(L,long int,0,double,1)
-#endif
-MAKE_INTERPOLATE_BLOCKAVE(D,double,1,double,1)
-MAKE_INTERPOLATE_BLOCKAVE(F,float,1,float,1)
-MAKE_INTERPOLATE_BLOCKAVE(I,int,0,double,1)
-MAKE_INTERPOLATE_BLOCKAVE(S,short int,0,float,1)
-MAKE_INTERPOLATE_BLOCKAVE(B,signed char,0,float,1)
-
-/* Re-define the macro for testing for negative variances to do
- nothing. */
-#undef CHECK_FOR_NEGATIVE_VARIANCE
-#define CHECK_FOR_NEGATIVE_VARIANCE(Xtype)
-
-/* Expand the main macro above to generate a function for each
- required unsigned data type. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-MAKE_INTERPOLATE_BLOCKAVE(UL,unsigned long int,0,long double,0)
-#else
-MAKE_INTERPOLATE_BLOCKAVE(UL,unsigned long int,0,double,0)
-#endif
-MAKE_INTERPOLATE_BLOCKAVE(UI,unsigned int,0,double,0)
-MAKE_INTERPOLATE_BLOCKAVE(US,unsigned short int,0,float,0)
-MAKE_INTERPOLATE_BLOCKAVE(UB,unsigned char,0,float,0)
-
-/* Undefine the macros used above. */
-#undef CHECK_FOR_NEGATIVE_VARIANCE
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-#undef HI_LD
-#undef LO_LD
-#endif
-#undef HI_D
-#undef LO_D
-#undef HI_F
-#undef LO_F
-#undef HI_L
-#undef LO_L
-#undef HI_UL
-#undef LO_UL
-#undef HI_I
-#undef LO_I
-#undef HI_UI
-#undef LO_UI
-#undef HI_S
-#undef LO_S
-#undef HI_US
-#undef LO_US
-#undef HI_B
-#undef LO_B
-#undef HI_UB
-#undef LO_UB
-#undef CALC_AND_ASSIGN_OUTPUT
-#undef ASSEMBLE_INPUT_ND
-#undef ASSEMBLE_INPUT_2D
-#undef ASSEMBLE_INPUT_1D
-#undef MAKE_INTERPOLATE_BLOCKAVE
-
-
-static PN *InterpPN( int np, double *x, double *y, int *status ) {
-/*
-* Name:
-* InterpPN
-
-* Purpose:
-* Find a polynomial which interpolates the given points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* PN *InterpPN( int np, double *x, double *y, int *status )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function finds the coefficients of a polynomial which
-* interpolates the supplied positions. The order of the returned
-* polynomial is one less than the the number of supplied points
-* (thus if 2 points are supplied, the polynomial will be of order
-* 1 - a straight line).
-
-* Parameters:
-* np
-* The number of points supplied in arrays x and y. This must be no
-* more than (RATE_ORDER+1).
-* x
-* Pointer to a an array of "np" x values. Note the values in this
-* array must increase monotonically.
-* y
-* Pointer to a an array of "np" y values.
-* status
-* Pointer to the inherited status variable.
-
-* Returned:
-* Pointer to a structure describing the polynomial, or NULL if no
-* polynomial could be found. The memory used to store the polynomial
-* should be freed using astFree when no longer needed.
-
-*/
-
-/* Local Variables: */
- int i, k;
- PN *pn[ RATE_ORDER + 1 ], *ret;
-
-/* Initialise. */
- ret = NULL;
-
-/* Check the global error status */
- if ( !astOK ) return ret;
-
-/* Check supplied points are good. */
- if( np > RATE_ORDER + 1 ) return NULL;
- for( i = 0; i < np; i++ ) {
- if( x[ i ] == AST__BAD || y[ i ] == AST__BAD ) return NULL;
- }
-
-/* Produce polynomials of order zero. */
- for( i = 0; i < np; i++ ) {
- pn[ i ] = astMalloc( sizeof( PN ) );
- if( !astOK ) return NULL;
- pn[ i ]->order = 0;
- pn[ i ]->coeff[ 0 ] = y[ i ];
- pn[ i ]->xlo = x[ i ];
- pn[ i ]->xhi = x[ i ];
- }
-
-/* Produce polynomials of order "k", from the polynomials of order "k-1".
- This uses Neville's method (see:
-
- http://mathworld.wolfram.com/NevillesAlgorithm.html
-
-*/
- for( k = 1; k < np; k++ ) {
- for( i = 0; i < np - k; i++ ) {
- CombinePN( pn[i], pn[i+1], status );
- }
- }
-
- for( i = 1; i < np; i++ ) pn[ i ] = astFree( pn[ i ] );
-
-/* If any of the coefficients could not be found return NULL. */
- ret = pn[ 0 ];
- for( i = 0; i < np; i++ ) {
- if( astISNAN( ret->coeff[ i ] ) ) {
- ret = astFree( ret );
- break;
- }
- }
-
- return ret;
-}
-
-
-static void Invert( AstMapping *this, int *status ) {
-/*
-*++
-* Name:
-c astInvert
-f AST_INVERT
-
-* Purpose:
-* Invert a Mapping.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "mapping.h"
-c void astInvert( AstMapping *this )
-f CALL AST_INVERT( THIS, STATUS )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-c This function inverts a Mapping by reversing the boolean sense
-f This routine inverts a Mapping by reversing the boolean sense
-* of its Invert attribute. If this attribute is zero (the
-* default), the Mapping will transform coordinates in the way
-* specified when it was created. If it is non-zero, the input and
-* output coordinates will be inter-changed so that the direction
-* of the Mapping is reversed. This will cause it to display the
-* inverse of its original behaviour.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Mapping.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-*--
-*/
-
-/* Local Variables: */
- int invert; /* New Invert attribute value */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Determine the new Invert attribute value. */
- invert = !astGetInvert( this );
-
-/* Clear the old value. */
- astClearInvert( this );
-
-/* If the resulting default value is not the one required, then set a
- new value explicitly. */
- if ( astGetInvert( this ) != invert ) astSetInvert( this, invert );
-}
-
-static double J1Bessel( double x, int *status ) {
-/*
-* Name:
-* J1Bessel
-
-* Purpose:
-* Calculates the first-order Bessel function of the first kind.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* double J1Bessel( double x, int *status )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function calculates the value of the first-order Bessel function
-* of the first kind.
-
-* Parameters:
-* x
-* The argument for J1.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The calculated J1(x) value.
-
-* Notes:
-* - The algorithm is taken from the SCUBA routine SCULIB_BESSJ1, by
-* J.Lightfoot.
-* - This function does not perform error checking and does not
-* generate errors.
-*/
-
-/* Local Variables: */
- static double p1 = 1.0;
- static double p2 = 0.183105E-2;
- static double p3 = -0.3516396496E-4;
- static double p4 = 0.2457520174E-5;
- static double p5 = -0.240337019E-6;
-
- static double q1 = 0.04687499995;
- static double q2 = -0.2002690873E-3;
- static double q3 = 0.8449199096E-5;
- static double q4 = -0.88228987E-6;
- static double q5 = 0.105787412E-6;
-
- static double r1 = 72362614232.0;
- static double r2 = -7895059235.0;
- static double r3 = 242396853.1;
- static double r4 = -2972611.439;
- static double r5 = 15704.48260;
- static double r6 = -30.16036606;
-
- static double s1 = 144725228442.0;
- static double s2 = 2300535178.0;
- static double s3 = 18583304.74;
- static double s4 = 99447.43394;
- static double s5 = 376.9991397;
- static double s6 = 1.0;
-
- double ax;
- double xx;
- double z;
- double y;
- double value;
- int s;
-
-/* Calculate the value */
- ax = fabs( x );
- if( ax < 8.0 ) {
- y = x*x;
- value = x*( r1 + y*( r2 + y*( r3 + y*( r4 + y*( r5 + y*r6 ) ) ) ) ) /
- ( s1 + y*( s2 + y*( s3 + y*( s4 + y*( s5 + y*s6 ) ) ) ) );
- } else {
- s = ( x >= 0.0 ) ? 1 : -1;
- z = 8.0 / ax;
- y = z*z;
- xx = ax - 2.356194491;
- value = sqrt ( 0.636619772/ax )*( cos( xx )*( p1 + y*( p2 + y*
- ( p3 + y*( p4 + y*p5 ) ) ) )-z*sin( xx )*( q1 + y*( q2 + y*( q3 + y*
- ( q4 + y*q5 ) ) ) ) )*s;
- }
-
- return value;
-
-}
-
-static int LinearApprox( AstMapping *this, const double *lbnd,
- const double *ubnd, double tol, double *fit, int *status ) {
-/*
-*++
-* Name:
-c astLinearApprox
-f AST_LINEARAPPROX
-
-* Purpose:
-* Obtain a linear approximation to a Mapping, if appropriate.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "mapping.h"
-c int astLinearApprox( AstMapping *this, const double *lbnd,
-c const double *ubnd, double tol, double *fit )
-f RESULT = AST_LINEARAPPROX( THIS, LBND, UBND, TOL, FIT, STATUS )
-
-* Class Membership:
-* Mapping function.
-
-* Description:
-* This function tests the forward coordinate transformation
-* implemented by a Mapping over a given range of input coordinates. If
-* the transformation is found to be linear to a specified level of
-* accuracy, then an array of fit coefficients is returned. These
-* may be used to implement a linear approximation to the Mapping's
-* forward transformation within the specified range of output coordinates.
-* If the transformation is not sufficiently linear, no coefficients
-* are returned.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Mapping.
-c lbnd
-f LBND( * ) = DOUBLE PRECISION (Given)
-c Pointer to an array of doubles
-f An array
-* containing the lower bounds of a box defined within the input
-* coordinate system of the Mapping. The number of elements in this
-* array should equal the value of the Mapping's Nin attribute. This
-* box should specify the region over which linearity is required.
-c ubnd
-f UBND( * ) = DOUBLE PRECISION (Given)
-c Pointer to an array of doubles
-f An array
-* containing the upper bounds of the box specifying the region over
-* which linearity is required.
-c tol
-f TOL = DOUBLE PRECISION (Given)
-* The maximum permitted deviation from linearity, expressed as
-* a positive Cartesian displacement in the output coordinate
-* space of the Mapping. If a linear fit to the forward
-* transformation of the Mapping deviates from the true transformation
-* by more than this amount at any point which is tested, then no fit
-* coefficients will be returned.
-c fit
-f FIT( * ) = DOUBLE PRECISION (Returned)
-c Pointer to an array of doubles
-f An array
-* in which to return the co-efficients of the linear
-* approximation to the specified transformation. This array should
-* have at least "( Nin + 1 ) * Nout", elements. The first Nout elements
-* hold the constant offsets for the transformation outputs. The
-* remaining elements hold the gradients. So if the Mapping has 2 inputs
-* and 3 outputs the linear approximation to the forward transformation
-* is:
-*
-c X_out = fit[0] + fit[3]*X_in + fit[4]*Y_in
-f X_out = fit(1) + fit(4)*X_in + fit(5)*Y_in
-*
-c Y_out = fit[1] + fit[5]*X_in + fit[6]*Y_in
-f Y_out = fit(2) + fit(6)*X_in + fit(7)*Y_in
-*
-c Z_out = fit[2] + fit[7]*X_in + fit[8]*Y_in
-f Z_out = fit(3) + fit(8)*X_in + fit(9)*Y_in
-*
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astLinearApprox()
-f AST_LINEARAPPROX = LOGICAL
-* If the forward transformation is sufficiently linear,
-c a non-zero value is returned. Otherwise zero is returned
-f .TRUE is returned. Otherwise .FALSE. is returned
-* and the fit co-efficients are set to AST__BAD.
-
-* Notes:
-* - This function fits the Mapping's forward transformation. To fit
-* the inverse transformation, the Mapping should be inverted using
-c astInvert
-f AST_INVERT
-* before invoking this function.
-c - A value of zero
-f - A value of .FALSE.
-* will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*--
-
-* Implementation Deficiencies:
-* Sub-classes which implement linear mappings should probably
-* over-ride this function to get better accuracy and faster execution,
-* but currently they do not.
-
-*/
-
-/* Local Variables: */
- AstPointSet *pset_in_f; /* PointSet for input fitting points */
- AstPointSet *pset_in_t; /* PointSet for input test points */
- AstPointSet *pset_out_f; /* PointSet for output fitting points */
- AstPointSet *pset_out_t; /* PointSet for output test points */
- double **ptr_in_f; /* Input coordinate array pointers */
- double **ptr_in_t; /* Input coordinate array pointers */
- double **ptr_out_f; /* Output coordinate array pointers */
- double **ptr_out_t; /* Output coordinate array pointers */
- double *grad; /* Pointer to matrix of gradients */
- double *zero; /* Pointer to array of zero point values */
- double diff; /* Difference in coordinate values */
- double err; /* Sum of squared error */
- double frac; /* Fraction of input coordinate range */
- double in1; /* Input coordinate value */
- double in2; /* Input coordinate value */
- double indiff; /* Difference in input coordinate values */
- double out1; /* Output coordinate value */
- double out2; /* Output coordinate value */
- double x0; /* Coordinate of grid centre */
- double y; /* Output coordinate (transformed) */
- double yfit; /* Coordinate resulting from fit */
- double z; /* Sum for calculating zero points */
- int *vertex; /* Pointer to flag array for vertices */
- int coord_in; /* Loop counter for input coordinates */
- int coord_out; /* Loop counter for output coordinates. */
- int done; /* All vertices visited? */
- int face1; /* Index of first face coordinates */
- int face2; /* Index of second face coordinates */
- int face; /* Loop counter for faces */
- int ii; /* Index into gradient matrix */
- int linear; /* Mapping is linear? */
- int nc; /* Number of coeffs in fit */
- int ndim_in; /* Number of Mapping inputs */
- int ndim_out; /* Number of Mapping outputs */
- int npoint; /* Number of test points required */
- int point; /* Counter for points */
- int result; /* Returned flag */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Further initialisation. */
- linear = 1;
- grad = NULL;
- zero = NULL;
-
-/* Get the number of Mapping output and inputs. */
- ndim_in = astGetNin( this );
- ndim_out = astGetNout( this );
-
-/* Store the number of coefficients in the fit.*/
- nc = ( ndim_in + 1 ) * ndim_out;
-
-/* Create a PointSet to hold input coordinates and obtain a pointer
- to its coordinate arrays. */
- pset_in_f = astPointSet( 2 * ndim_in, ndim_in, "", status );
- ptr_in_f = astGetPoints( pset_in_f );
- if ( astOK ) {
-
-/* Set up and transform an initial set of points. */
-/* ---------------------------------------------- */
-/* Loop to set up input coordinates at the centre of each face of the
- input grid, storing them in the PointSet created above. */
- point = 0;
- for ( face = 0; face < ( 2 * ndim_in ); face++ ) {
- for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
- ptr_in_f[ coord_in ][ point ] =
- 0.5 * ( lbnd[ coord_in ] + ubnd[ coord_in ] );
- }
- ptr_in_f[ face / 2 ][ point ] = ( face % 2 ) ?
- ubnd[ face / 2 ] : lbnd[ face / 2 ];
- point++;
- }
- }
-
-/* Transform these coordinates into the output grid's coordinate system
- and obtain an array of pointers to the resulting coordinate
- data. */
- pset_out_f = astTransform( this, pset_in_f, 1, NULL );
- ptr_out_f = astGetPoints( pset_out_f );
- if ( astOK ) {
-
-/* Fit a linear approximation to the points. */
-/* ----------------------------------------- */
-/* Obtain pointers to the locations in the fit coefficients array
- where the gradients and zero points should be stored. */
- grad = fit + ndim_out;
- zero = fit;
-
-/* On the assumption that the transformation applied above is
- approximately linear, loop to determine the matrix of gradients and
- the zero points which describe it. */
- ii = 0;
- for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
- z = 0.0;
- for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
-
-/* Find the indices of opposite faces in each input dimension. */
- face1 = 2 * coord_in;
- face2 = face1 + 1;
-
-/* Obtain the input and output coordinates at these face centres. */
- in1 = ptr_in_f[ coord_in ][ face1 ];
- in2 = ptr_in_f[ coord_in ][ face2 ];
- out1 = ptr_out_f[ coord_out ][ face1 ];
- out2 = ptr_out_f[ coord_out ][ face2 ];
-
-/* Check whether any transformed coordinates are bad. If so, the
- transformation cannot be linear, so give up trying to fit it. */
- if ( ( out1 == AST__BAD ) || ( out2 == AST__BAD ) ) {
- linear = 0;
- break;
- }
-
-/* If possible, determine the gradient along this dimension, storing
- it in the appropriate element of the gradient matrix. */
- indiff = in2 - in1;
- if ( indiff != 0.0 ) {
- grad[ ii++ ] = ( out2 - out1 ) / indiff;
- } else {
- grad[ ii++ ] = 0.0;
- }
-
-/* Accumulate the sum used to determine the zero point. */
- z += ( out1 + out2 );
- }
-
-/* Also quit the outer loop if a linear fit cannot be obtained. */
- if ( !linear ) break;
-
-/* Determine the average zero point from all dimensions. */
- zero[ coord_out ] = z / (double) ( 2 * ndim_in );
- }
-
-/* If a linear fit was obtained, its zero points will be appropriate
- to an input coordinate system with an origin at the centre of the
- input grid (we assume this to simplify the calculations above). To
- correct for this, we transform the actual input coordinates of the
- grid's centre through the matrix of gradients and subtract the
- resulting coordinates from the zero point values. The zero points
- are then correct for the actual output and input coordinate systems
- we are using. */
- if ( linear ) {
- ii = 0;
- for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
- for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
- x0 = 0.5 * ( lbnd[ coord_in ] + ubnd[ coord_in ] );
- zero[ coord_out ] -= grad[ ii++ ] * x0;
- }
- }
- }
- }
-
-/* Annul the pointers to the PointSets used above. */
- pset_out_f = astAnnul( pset_out_f );
- pset_in_f = astAnnul( pset_in_f );
-
-/* Calculate the number of test points required. */
-/* --------------------------------------------- */
-/* If we have obtained a linear fit above, it will (by construction)
- be exact at the centre of each face of the input grid. However, it
- may not fit anywhere else. We therefore set up some test points to
- determine if it is an adequate approximation elsewhere. */
- if ( astOK && linear ) {
-
-/* Calculate the number of test points required to place one at each
- vertex of the grid. */
- npoint = 1;
- for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
- npoint *= 2;
- }
-
-/* Now calculate the total number of test points required, also
- allowing one at the centre, one at half the distance to each face,
- and one at half the distance to each vertex. */
- npoint = 1 + 2 * ( ndim_in + npoint );
-
-/* Set up test points in the input coordinate system. */
-/* --------------------------------------------------- */
-/* Create a PointSet to hold the test coordinates and obtain an array
- of pointers to its coordinate data. */
- pset_in_t = astPointSet( npoint, ndim_in, "", status );
- ptr_in_t = astGetPoints( pset_in_t );
- if ( astOK ) {
-
-/* If the input array is 1-dimensional, the face and vertex positions
- calculated below will co-incide. Therefore, we simply distribute
- the required number of test points uniformly throughout the input
- coordinate range (avoiding the end-points, where the fit has been
- obtained). The coordinates are stored in the PointSet created
- above. */
- if ( ndim_in == 1 ) {
- for ( point = 0; point < npoint; point++ ) {
- frac = ( (double) ( point + 1 ) ) / (double) ( npoint + 1 );
- ptr_in_t[ 0 ][ point ] = ( 1.0 - frac ) * lbnd[ 0 ] +
- frac * ubnd[ 0 ];
- }
-
-/* Otherwise, generate one point at the grid centre. */
- } else {
- point = 0;
- for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
- ptr_in_t[ coord_in ][ point ] =
- 0.5 * ( lbnd[ coord_in ] + ubnd[ coord_in ] );
- }
- point++;
-
-/* Similarly generate a point half way between the grid centre and the
- centre of each face. */
- for ( face = 0; face < ( 2 * ndim_in ); face++ ) {
- for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
- ptr_in_t[ coord_in ][ point ] =
- 0.5 * ( lbnd[ coord_in ] + ubnd[ coord_in ] );
- }
- ptr_in_t[ face / 2 ][ point ] =
- 0.5 * ( ( ( ( face % 2 ) ? ubnd[ face / 2 ] :
- lbnd[ face / 2 ] ) ) +
- ptr_in_t[ face / 2 ][ 0 ] );
- point++;
- }
-
-/* Allocate workspace and initialise flags for identifying the
- vertices. */
- vertex = astMalloc( sizeof( int ) * (size_t) ndim_in );
- if ( astOK ) {
- for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
- vertex[ coord_in ] = 0;
- }
-
-/* Now loop to visit each input grid vertex. */
- done = 0;
- do {
-
-/* Generate a test point at each vertex. */
- for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
- ptr_in_t[ coord_in ][ point ] = vertex[ coord_in ] ?
- ubnd[ coord_in ] :
- lbnd[ coord_in ];
-
-/* Also place one half way between the grid centre and each vertex. */
- ptr_in_t[ coord_in ][ point + 1 ] =
- 0.5 * ( ptr_in_t[ coord_in ][ point ] +
- ptr_in_t[ coord_in ][ 0 ] );
- }
- point += 2;
-
-/* Now update the array of vertex flags to identify the next vertex. */
- coord_in = 0;
- do {
-
-/* The least significant dimension which does not have its upper bound
- as one of the vertex coordinates is changed to use its upper bound
- in the next vertex. */
- if ( !vertex[ coord_in ] ) {
- vertex[ coord_in ] = 1;
- break;
-
-/* Any less significant dimensions whose upper bounds are already
- being used are changed to use their lower bounds in the next
- vertex. */
- } else {
- vertex[ coord_in ] = 0;
-
-/* All vertices have been visited when the most significant dimension
- is changed back to using its lower bound. */
- done = ( ++coord_in == ndim_in );
- }
- } while ( !done );
- } while ( !done );
- }
-
-/* Free the workspace used for vertex flags. */
- vertex = astFree( vertex );
- }
-
-/* Transform the test points. */
-/* -------------------------- */
-/* Use the Mapping to transform the test points into the output grid's
- coordinate system, obtaining a pointer to the resulting arrays of
- output coordinates. */
- pset_out_t = astTransform( this, pset_in_t, 1, NULL );
- ptr_out_t = astGetPoints( pset_out_t );
-
-/* Test the linear fit for accuracy. */
-/* --------------------------------- */
-/* If OK so far, then loop to use this fit to transform each test
- point and compare the result with the result of applying the
- Mapping. */
- if ( astOK ) {
- for ( point = 0; point < npoint; point++ ) {
-
-/* Initialise the fitting error for the current point. */
- err = 0.0;
-
-/* Obtain each output coordinate (produced by using the Mapping) in
- turn and check that it is not bad. If it is, then the
- transformation is not linear, so give up testing the fit. */
- ii = 0;
- for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
- y = ptr_out_t[ coord_out ][ point ];
- if ( y == AST__BAD ) {
- linear = 0;
- break;
- }
-
-/* Apply the fitted transformation to the input coordinates to obtain
- the approximate output coordinate value. */
- yfit = zero[ coord_out ];
- for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
- yfit += grad[ ii++ ] * ptr_in_t[ coord_in ][ point ];
- }
-
-/* Form the sum of squared differences between the Mapping's
- transformation and the fit. */
- diff = ( y - yfit );
- err += diff * diff;
- }
-
-/* Quit the outer loop if the Mapping is found to be non-linear. */
- if ( !linear ) break;
-
-/* Test if the Cartesian distance between the true output coordinate
- and the approximate one exceeds the accuracy tolerance. If this
- happens for any test point, we declare the Mapping non-linear and
- give up. */
- if ( sqrt( err ) > tol ) {
- linear = 0;
- break;
- }
- }
- }
-
-/* Annul the pointers to the PointSets used above. */
- pset_out_t = astAnnul( pset_out_t );
- }
- pset_in_t = astAnnul( pset_in_t );
- }
-
-/* If an error occurred, or the Mapping was found to be non-linear,
- then set the coefficients to AST_BAD. Otherwise, set the returned flag
- to indicate that the fit was succesful. */
- if ( !astOK || !linear ) {
- for( ii = 0; ii < nc; ii++ ) fit[ ii ] = AST__BAD;
- } else {
- result = 1;
- }
-
-/* Return the result. */
- return result;
-}
-
-static double LocalMaximum( const MapData *mapdata, double acc, double fract,
- double x[], int *status ) {
-/*
-* Name:
-* LocalMaximum
-
-* Purpose:
-* Find a local maximum in a Mapping function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* double LocalMaximum( const MapData *mapdata, double acc, double fract,
-* double x[], int *status );
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function finds a local maximum in the Mapping function
-* supplied. It employs the modified simplex method (as
-* implemented by UphillSimplex), but repeatedly re-starts the
-* simplex algorithm and tests for convergence of successive
-* maxima, so as to further improve robustness on difficult
-* problems.
-
-* Parameters:
-* mapdata
-* Pointer to a MapData structure describing the Mapping
-* function, its coordinate constraints, etc.
-* acc
-* The required accuracy with which the maximum is to be found.
-* fract
-* A value between 0.0 and 1.0 which determines the initial step
-* length along each coordinate axis. It should be given as a
-* fraction of the difference between the upper and lower
-* constraint values for each axis (as specified in the
-* "mapdata" structure).
-* x
-* Pointer to an array of double containing the coordinates of
-* an initial estimate of the position of the maximum. On exit,
-* this will be updated to contain the best estimate of the
-* maximum's position, as found by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The best estimate of the Mapping function's maximum value.
-
-* Notes:
-* - A value of AST__BAD will be returned, and no useful
-* information about a solution will be produced, if this function
-* is invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Constants: */
- const int maxcall = 1500; /* Maximum number of function evaluations */
- const int maxiter = 5; /* Maximum number of iterations */
-
-/* Local Variables: */
- double *dx; /* Pointer to array of step lengths */
- double err; /* Simplex error estimate */
- double maximum; /* Simplex maximum value */
- double middle; /* Middle coordinate between bounds */
- double result; /* Result value to return */
- int coord; /* Loop counter for coordinates */
- int done; /* Iterations complete? */
- int iter; /* Loop counter for iterations */
- int ncall; /* Number of function calls (junk) */
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Further initialise to avoid compiler warnings. */
- err = 0.0;
-
-/* Allocate workspace. */
- dx = astMalloc( sizeof( double ) * (size_t) mapdata->nin );
-
-/* Perform iterations to repeatedly identify a local maximum. */
- for ( iter = 0; astOK && ( iter < maxiter ); iter++ ) {
-
-/* Set up initial step lengths along each coordinate axis, adjusting
- their signs to avoid placing points outside the coordinate
- constraints (i.e. step away from the closer boundary on each
- axis). */
- for ( coord = 0; coord < mapdata->nin; coord++ ) {
- middle = 0.5 * ( mapdata->lbnd[ coord ] + mapdata->ubnd[ coord ] );
- dx[ coord ] = fract * ( mapdata->ubnd[ coord ] -
- mapdata->lbnd[ coord ] );
- if ( x[ coord ] > middle ) dx[ coord ] = -dx[ coord ];
- }
-
-/* Find an approximation to a local maximum using the simplex method
- and check for errors. */
- maximum = UphillSimplex( mapdata, acc, maxcall, dx, x, &err, &ncall, status );
- if ( astOK ) {
-
-/* Use this maximum value if no previous maximum has been found. */
- if ( result == AST__BAD ) {
- result = maximum;
-
-/* Otherwise use it only if it improves on the previous maximum. */
- } else if ( maximum >= result ) {
-
-/* We iterate, re-starting the simplex algorithm from its previous
- best position so as to guard against premature false
- convergence. Iterations continue until the improvement in the
- maximum is no greater than the required accuracy (and the simplex
- algorithm itself has converged to the required accuracy). Note when
- iterations should cease. */
- done = ( ( ( maximum - result ) <= acc ) && ( err <= acc ) );
-
-/* Store the best maximum and quit iterating if appropriate. */
- result = maximum;
- if ( done ) break;
- }
-
-/* Otherwise, decrement the initial step size for the next iteration. */
- fract /= 1000.0;
- }
- }
-
-/* Free the workspace. */
- dx = astFree( dx );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = AST__BAD;
-
-/* return the result. */
- return result;
-}
-
-static void MapBox( AstMapping *this,
- const double lbnd_in[], const double ubnd_in[],
- int forward, int coord_out,
- double *lbnd_out, double *ubnd_out,
- double xl[], double xu[], int *status ) {
-/*
-*+
-* Name:
-* astMapBox
-
-* Purpose:
-* Find a bounding box for a Mapping.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "mapping.h"
-* void astMapBox( AstMapping *this,
-* const double lbnd_in[], const double ubnd_in[],
-* int forward, int coord_out,
-* double *lbnd_out, double *ubnd_out,
-* double xl[], double xu[] );
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-* This function allows you to find the "bounding box" which just
-* encloses another box after it has been transformed by a Mapping
-* (using either its forward or inverse transformation). A typical
-* use might be to calculate the size which an image would have
-* after being transformed by the Mapping.
-*
-* The function works on one dimension at a time. When supplied
-* with the lower and upper bounds of a rectangular region (box) of
-* input coordinate space, it finds the lowest and highest values
-* taken by a nominated output coordinate within that
-* region. Optionally, it also returns the input coordinates where
-* these bounding values are attained. It should be used repeatedly
-* if the extent of the bounding box is required in more than one
-* dimension.
-
-* Parameters:
-* this
-* Pointer to the Mapping.
-* lbnd_in
-* Pointer to an array of double, with one element for each
-* Mapping input coordinate. This should contain the lower bound
-* of the input box in each dimension.
-* ubnd_in
-* Pointer to an array of double, with one element for each
-* Mapping input coordinate. This should contain the upper bound
-* of the input box in each dimension.
-*
-* Note that it is permissible for the lower bound to exceed the
-* corresponding upper bound, as the values will simply be
-* swapped before use.
-* forward
-* If this value is non-zero, then the Mapping's forward
-* transformation will be used to transform the input
-* box. Otherwise, its inverse transformation will be used.
-*
-* (If the inverse transformation is selected, then references
-* to "input" and "output" coordinates in this description
-* should be transposed. For example, the size of the "lbnd_in"
-* and "ubnd_in" arrays should match the number of output
-* coordinates, as given by the Mapping's Nout attribute.)
-* coord_out
-* The (zero-based) index of the output coordinate for which the
-* lower and upper bounds are required.
-* lbnd_out
-* Pointer to a double in which to return the lowest value taken
-* by the nominated output coordinate within the specified
-* region of input coordinate space.
-* ubnd_out
-* Pointer to a double in which to return the highest value
-* taken by the nominated output coordinate within the specified
-* region of input coordinate space.
-* xl
-* An optional pointer to an array of double, with one element
-* for each Mapping input coordinate. If given, this array will
-* be filled with the coordinates of an input point (although
-* not necessarily a unique one) for which the nominated output
-* coordinate takes the lower bound value returned in
-* "*lbnd_out".
-*
-* If these coordinates are not required, a NULL pointer may be
-* supplied.
-* xu
-* An optional pointer to an array of double, with one element
-* for each Mapping input coordinate. If given, this array will
-* be filled with the coordinates of an input point (although
-* not necessarily a unique one) for which the nominated output
-* coordinate takes the upper bound value returned in
-* "*ubnd_out".
-*
-* If these coordinates are not required, a NULL pointer may be
-* supplied.
-
-* Notes:
-* - Any input points which are transformed by the Mapping to give
-* output coordinates containing the value AST__BAD are regarded as
-* invalid and are ignored, They will make no contribution to
-* determining the output bounds, even although the nominated
-* output coordinate might still have a valid value at such points.
-* - An error will occur if the required output bounds cannot be
-* found. Typically, this might occur if all the input points which
-* the function considers turn out to be invalid (see above). The
-* number of points considered before generating such an error is
-* quite large, however, so this is unlikely to occur by accident
-* unless valid points are restricted to a very small subset of the
-* input coordinate space.
-* - The values returned via "lbnd_out", "ubnd_out", "xl" and "xu"
-* will be set to the value AST__BAD if this function should fail
-* for any reason. Their initial values on entry will not be
-* altered if the function is invoked with the global error status
-* set.
-*-
-
-* Implementation Notes:
-* - This function implements the basic astMapBox method available
-* via the protected interface to the Mapping class. The public
-* interface to this method is provided by the astMapBoxId_
-* function.
-*/
-
-/* Local Variables: */
- MapData mapdata; /* Structure to describe Mapping function */
- double *x_l; /* Pointer to coordinate workspace */
- double *x_u; /* Pointer to coordinate workspace */
- double lbnd; /* Required lower bound */
- double ubnd; /* Required upper bound */
- int coord; /* Loop counter for coordinates. */
- int nin; /* Effective number of input coordinates */
- int nout; /* Effective number of output coordinates */
- int refine; /* Can bounds be refined? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Initialisation to avoid compiler warnings. */
- lbnd = AST__BAD;
- ubnd = AST__BAD;
-
-/* Obtain the effective numbers of input and output coordinates for
- the Mapping, taking account of which transformation is to be
- used. */
- nin = forward ? astGetNin( this ) : astGetNout( this );
- nout = forward ? astGetNout( this ) : astGetNin( this );
-
-/* Check that the output coordinate index supplied is valid and report
- an error if it is not. Use public (one-based) coordinate numbering
- in the error message. */
- if ( astOK ) {
- if ( ( coord_out < 0 ) || ( coord_out >= nout ) ) {
- astError( AST__BADCI, "astMapBox(%s): Output coordinate index (%d) "
- "invalid - it should be in the range 1 to %d.", status,
- astGetClass( this ), coord_out + 1, nout );
- }
- }
-
-/* Initialise a MapData structure to describe the Mapping function
- whose limits are to be found. Since it may be evaluated many
- times, we attempt to simplify the Mapping supplied. */
- if ( astOK ) {
- mapdata.mapping = astSimplify( this );
-
-/* Store the number of input/output coordinates and the index of the
- output coordinate in which we are interested. */
- mapdata.nin = nin;
- mapdata.nout = nout;
- mapdata.coord = coord_out;
-
-/* Note which Mapping transformation is being used. */
- mapdata.forward = forward;
-
-/* Store pointers to arrays which will contain the input coordinate
- bounds. */
- mapdata.lbnd = astMalloc( sizeof( double ) * (size_t) nin );
- mapdata.ubnd = astMalloc( sizeof( double ) * (size_t) nin );
-
-/* Create PointSets for passing coordinate data to and from the
- Mapping. */
- mapdata.pset_in = astPointSet( 1, nin, "", status );
- mapdata.pset_out = astPointSet( 1, nout, "", status );
-
-/* Obtain pointers to these PointSets' coordinate arrays. */
- mapdata.ptr_in = astGetPoints( mapdata.pset_in );
- mapdata.ptr_out = astGetPoints( mapdata.pset_out );
-
-/* Allocate workspace for the returned input coordinates. */
- x_l = astMalloc( sizeof( double ) * (size_t) nin );
- x_u = astMalloc( sizeof( double ) * (size_t) nin );
- if ( astOK ) {
-
-/* Initialise the output bounds and corresponding input coordinates to
- "unknown". */
- for ( coord = 0; coord < nin; coord++ ) {
- x_l[ coord ] = AST__BAD;
- x_u[ coord ] = AST__BAD;
-
-/* Initialise the input bounds, ensuring they are the correct way
- around (if not already supplied this way). */
- mapdata.lbnd[ coord ] = ( lbnd_in[ coord ] < ubnd_in[ coord ] ) ?
- lbnd_in[ coord ] : ubnd_in[ coord ];
- mapdata.ubnd[ coord ] = ( ubnd_in[ coord ] > lbnd_in[ coord ] ) ?
- ubnd_in[ coord ] : lbnd_in[ coord ];
- }
-
-/* First examine a set of special input points to obtain an initial
- estimate of the required output bounds. Do this only so long as the
- number of points involved is not excessive. */
- if ( nin <= 12 ) {
- refine = SpecialBounds( &mapdata, &lbnd, &ubnd, x_l, x_u, status );
- } else {
- refine = 1;
- }
-
-/* Then attempt to refine this estimate using a global search
- algorithm. */
- if( refine ) GlobalBounds( &mapdata, &lbnd, &ubnd, x_l, x_u, status );
-
-/* If an error occurred, generate a contextual error message. */
- if ( !astOK ) {
- astError( astStatus, "Unable to find a bounding box for a %s.", status,
- astGetClass( this ) );
- }
- }
-
-/* Return the output bounds and, if required, the input coordinate
- values which correspond with them. */
- if ( astOK ) {
- *lbnd_out = lbnd;
- *ubnd_out = ubnd;
- for ( coord = 0; coord < nin; coord++ ) {
- if ( xl ) xl[ coord ] = x_l[ coord ];
- if ( xu ) xu[ coord ] = x_u[ coord ];
- }
- }
-
-/* Annul the simplified Mapping pointer and the temporary
- PointSets. Also free the workspace. */
- mapdata.mapping = astAnnul( mapdata.mapping );
- mapdata.lbnd = astFree( mapdata.lbnd );
- mapdata.ubnd = astFree( mapdata.ubnd );
- mapdata.pset_in = astAnnul( mapdata.pset_in );
- mapdata.pset_out = astAnnul( mapdata.pset_out );
- x_l = astFree( x_l );
- x_u = astFree( x_u );
- }
-
-/* If an error occurred, then return bad bounds values and
- coordinates. */
- if ( !astOK ) {
- *lbnd_out = AST__BAD;
- *ubnd_out = AST__BAD;
- for ( coord = 0; coord < nin; coord++ ) {
- if ( xl ) xl[ coord ] = AST__BAD;
- if ( xu ) xu[ coord ] = AST__BAD;
- }
- }
-}
-
-static double MapFunction( const MapData *mapdata, const double in[],
- int *ncall, int *status ) {
-/*
-* Name:
-* MapFunction
-
-* Purpose:
-* Return the value of a selected transformed coordinate.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* double MapFunction( const MapData *mapdata, const double in[],
-* int *ncall, int *status );
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function takes a set of input coordinates and applies a
-* Mapping's coordinate transformation to them. It then returns the
-* value of one of the transformed coordinates.
-*
-* It is provided for use by optimisation functions (e.g. those
-* used for finding bounding boxes). The Mapping to be used and
-* associated parameters (such as constraints on the range of input
-* coordinates and the index of the output coordinate to be
-* returned) are supplied in a MapData structure. The value
-* returned will be negated if the "negate" component of this
-* structure is non-zero.
-*
-* The value AST__BAD will be returned by this function if the
-* input coordinates lie outside the constrained range given in
-* the MapData structure, or if any of the transformed output
-* coordinates is bad.
-
-* Parameters:
-* mapdata
-* Pointer to a MapData structure which describes the Mapping to
-* be used.
-* in
-* A double array containing the input coordinates of a single point.
-* ncall
-* Pointer to an int containing a count of the number of times
-* the Mapping's coordinate transformation has been used. This
-* value will be updated to reflect any use made by this
-* function. Normally, this means incrementing the value by 1,
-* but this will be omitted if the input coordinates supplied
-* are outside the constrained range so that no transformation
-* is performed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The selected output coordinate value, or AST__BAD, as appropriate.
-
-* Notes:
-* - A value of AST__BAD will be returned if this function is
-* invoked with the global error status set, or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- double result; /* Result to be returned */
- int bad; /* Output coordinates invalid? */
- int coord_in; /* Loop counter for input coordinates */
- int coord_out; /* Loop counter for output coordinates */
- int outside; /* Input point outside bounds? */
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* See if the input point lies outside the required bounds. */
- outside = 0;
- for ( coord_in = 0; coord_in < mapdata->nin; coord_in++ ) {
- if ( ( in[ coord_in ] < mapdata->lbnd[ coord_in ] ) ||
- ( in[ coord_in ] > mapdata->ubnd[ coord_in ] ) ) {
- outside = 1;
- break;
- }
-
-/* Also store the input coordinates in the memory associated with the
- Mapping's input PointSet. */
- mapdata->ptr_in[ coord_in ][ 0 ] = in[ coord_in ];
- }
-
-/* If the input coordinates are within bounds, transform them, using the
- PointSets identified in the "mapdata" structure. */
- if ( !outside ) {
- (void) astTransform( mapdata->mapping, mapdata->pset_in,
- mapdata->forward, mapdata->pset_out );
-
-/* Increment the number of calls to astTransform and check the error
- status. */
- ( *ncall )++;
- if ( astOK ) {
-
-/* If OK, test if any of the output coordinates is bad. */
- bad = 0;
- for ( coord_out = 0; coord_out < mapdata->nout; coord_out++ ) {
- if ( mapdata->ptr_out[ coord_out ][ 0 ] == AST__BAD ) {
- bad = 1;
- break;
- }
- }
-
-/* If not, then extract the required output coordinate, negating it if
- necessary. */
- if ( !bad ) {
- result = mapdata->ptr_out[ mapdata->coord ][ 0 ];
- if ( mapdata->negate ) result = -result;
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static int MapList( AstMapping *this, int series, int invert, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*+
-* Name:
-* astMapList
-
-* Purpose:
-* Decompose a Mapping into a sequence of simpler Mappings.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "mapping.h"
-* int astMapList( AstMapping *this, int series, int invert, int *nmap,
-* AstMapping ***map_list, int **invert_list )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-* This function decomposes a Mapping (which, in derived classes,
-* may be a compound Mapping) into a sequence of simpler Mappings
-* which may be applied in sequence to achieve the same effect. The
-* Mapping is decomposed as far as possible, but it is not
-* guaranteed that this will necessarily yield any more than one
-* Mapping, which may actually be the original one supplied.
-*
-* This function is provided to support both the simplification of
-* compound Mappings, and the analysis of Mapping structure so that
-* particular forms can be recognised.
-
-* Parameters:
-* this
-* Pointer to the Mapping to be decomposed (the Mapping is not
-* actually modified by this function).
-* series
-* If this value is non-zero, an attempt will be made to
-* decompose the Mapping into a sequence of equivalent Mappings
-* which can be applied in series (i.e. one after the other). If
-* it is zero, the decomposition will instead yield Mappings
-* which can be applied in parallel (i.e. on successive sub-sets
-* of the input/output coordinates).
-* invert
-* The value to which the Mapping's Invert attribute is to be
-* (notionally) set before performing the
-* decomposition. Normally, the value supplied here will be the
-* actual Invert value obtained from the Mapping (e.g. using
-* astGetInvert). Sometimes, however, when a Mapping is
-* encapsulated within another structure, that structure may
-* retain an Invert value (in order to prevent external
-* interference) which should be used instead.
-*
-* Note that the actual Invert value of the Mapping supplied is
-* not used (or modified) by this function.
-* nmap
-* The address of an int which holds a count of the number of
-* individual Mappings in the decomposition. On entry, this
-* should count the number of Mappings already in the
-* "*map_list" array (below). On exit, it is updated to include
-* any new Mappings appended by this function.
-* map_list
-* Address of a pointer to an array of Mapping pointers. On
-* entry, this array pointer should either be NULL (if no
-* Mappings have yet been obtained) or should point at a
-* dynamically allocated array containing Mapping pointers
-* ("*nmap" in number) which have been obtained from a previous
-* invocation of this function.
-*
-* On exit, the dynamic array will be enlarged to contain any
-* new Mapping pointers that result from the decomposition
-* requested. These pointers will be appended to any previously
-* present, and the array pointer will be updated as necessary
-* to refer to the enlarged array (any space released by the
-* original array will be freed automatically).
-*
-* The new Mapping pointers returned will identify a sequence of
-* Mappings which, when applied in order, will perform a forward
-* transformation equivalent to that of the original Mapping
-* (after its Invert flag has first been set to the value
-* requested above). The Mappings should be applied in series or
-* in parallel according to the type of decomposition requested.
-*
-* All the Mapping pointers returned by this function should be
-* annulled by the caller, using astAnnul, when no longer
-* required. The dynamic array holding these pointers should
-* also be freed, using astFree.
-* invert_list
-* Address of a pointer to an array of int. On entry, this array
-* pointer should either be NULL (if no Mappings have yet been
-* obtained) or should point at a dynamically allocated array
-* containing Invert attribute values ("*nmap" in number) which
-* have been obtained from a previous invocation of this
-* function.
-*
-* On exit, the dynamic array will be enlarged to contain any
-* new Invert attribute values that result from the
-* decomposition requested. These values will be appended to any
-* previously present, and the array pointer will be updated as
-* necessary to refer to the enlarged array (any space released
-* by the original array will be freed automatically).
-*
-* The new Invert values returned identify the values which must
-* be assigned to the Invert attributes of the corresponding
-* Mappings (whose pointers are in the "*map_list" array) before
-* they are applied. Note that these values may differ from the
-* actual Invert attribute values of these Mappings, which are
-* not relevant.
-*
-* The dynamic array holding these values should be freed by the
-* caller, using astFree, when no longer required.
-
-* Returned Value:
-* A non-zero value is returned if the supplied Mapping contained any
-* inverted CmpMaps.
-
-* Notes:
-* - It is unspecified to what extent the original Mapping and the
-* individual (decomposed) Mappings are
-* inter-dependent. Consequently, the individual Mappings cannot be
-* modified without risking modification of the original.
-* - If this function is invoked with the global error status set,
-* or if it should fail for any reason, then the *nmap value, the
-* list of Mapping pointers and the list of Invert values will all
-* be returned unchanged.
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Since we are dealing with a basic Mapping, only one new Mapping
- pointer will be returned. Extend the dynamic arrays to accommodate
- this Mapping. */
- *map_list = astGrow( *map_list, *nmap + 1, sizeof( AstMapping * ) );
- *invert_list = astGrow( *invert_list, *nmap + 1, sizeof( int ) );
- if ( astOK ) {
-
-/* Return the invert flag value for the Mapping and a clone of the
- Mapping pointer. */
- ( *invert_list )[ *nmap ] = ( invert != 0 );
- ( *map_list )[ *nmap ] = astClone( this );
-
-/* If OK, return the new Mapping count. */
- if ( astOK ) ( *nmap )++;
- }
-
- return 0;
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*+
-* Name:
-* astMapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "mapping.h"
-* int astMapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated Mapping in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated Mapping with one which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated Mapping which is to be merged with
-* its neighbours. This should be a cloned copy of the Mapping
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* Mapping it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated Mapping resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* This is the default method which is inherited by all Mappings which
- do not explicitly provide their own simplification method. Return
- -1 to indicate that no simplification is provided. */
- return -1;
-}
-
-static int *MapSplit( AstMapping *this, int nin, const int *in,
- AstMapping **map, int *status ){
-/*
-*+
-* Name:
-* astMapSplit
-
-* Purpose:
-* Create a Mapping representing a subset of the inputs of an existing
-* Mapping.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "mapping.h"
-* int *astMapSplit( AstMapping *this, int nin, const int *in,
-* AstMapping **map )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-* This function creates a new Mapping by picking specified inputs from
-* an existing Mapping. This is only possible if the specified inputs
-* correspond to some subset of the Mapping outputs. That is, there
-* must exist a subset of the Mapping outputs for which each output
-* depends only on the selected Mapping inputs, and not on any of the
-* inputs which have not been selected. Also, any output which is not in
-* this subset must not depend on any of the selected inputs. If these
-* conditions are not met by the supplied Mapping, then a NULL Mapping
-* is returned.
-
-* Parameters:
-* this
-* Pointer to the Mapping to be split (the Mapping is not
-* actually modified by this function).
-* nin
-* The number of inputs to pick from "this".
-* in
-* Pointer to an array of indices (zero based) for the inputs which
-* are to be picked. This array should have "nin" elements. If "Nin"
-* is the number of inputs of the supplied Mapping, then each element
-* should have a value in the range zero to Nin-1.
-* map
-* Address of a location at which to return a pointer to the new
-* Mapping. This Mapping will have "nin" inputs (the number of
-* outputs may be differetn to "nin"). A NULL pointer will be
-* returned if the supplied Mapping has no subset of outputs which
-* depend only on the selected inputs.
-
-* Returned Value:
-* A pointer to a dynamically allocated array of ints. The number of
-* elements in this array will equal the number of outputs for the
-* returned Mapping. Each element will hold the index of the
-* corresponding output in the supplied Mapping. The array should be
-* freed using astFree when no longer needed. A NULL pointer will
-* be returned if no output Mapping can be created.
-
-* Notes:
-* - If this function is invoked with the global error status set,
-* or if it should fail for any reason, then NULL values will be
-* returned as the function value and for the "map" pointer.
-*-
-
-* Implementation Notes:
-* - This function implements the basic astMapSplit method available
-* via the protected interface to the Mapping class. The public
-* interface to this method is provided by the astMapSplitId_
-* function.
-*/
-
-/* Local Variables: */
- AstCmpMap *rmap; /* Unsimplified result mapping */
- AstPermMap *pm; /* PermMap which rearranges the inputs */
- int *outperm; /* PermMap output axis permutation array */
- int *result; /* Pointer to returned array */
- int iin; /* Input index */
- int iout; /* Output index */
- int mapnin; /* Number of Mapping inputs */
- int nout; /* No of outputs */
- int ok; /* Can the supplied "in" array be used? */
- int perm; /* Are the inputs permuted? */
-
-/* Initialise */
- result = NULL;
- *map = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Verify the input axis indices.*/
- mapnin = astGetNin( this );
- for( iin = 0; iin < nin; iin++ ){
- if( in[ iin ] < 0 || in[ iin ] >= mapnin ) {
- astError( AST__AXIIN, "astMapSplit(%s): One of the supplied Mapping "
- "input indices has value %d which is invalid; it should "
- "be in the range 1 to %d.", status, astGetClass( this ),
- in[ iin ] + 1, mapnin );
- break;
- }
- }
-
-/* Since we are dealing with a basic Mapping, we can only create the
- required output Mapping if all inputs are being selected. */
- if( nin == mapnin ) {
-
-/* The inputs may have been selected in a different order to that in
- which they occur in the supplied Mapping. We therefore create a
- PermMap which rearranges the inputs into the order they have in the
- supplied Mapping. The supplied "in" array can act as the PermMap's
- "inperm" array. Allocate memory for the "outperm" array. */
- outperm = astMalloc( sizeof(int)*(size_t) nin );
- if( astOK ) {
-
-/* Store the input index for each output in the outperm array and check that
- each input has been selected once and only once. Also set a flag
- indicating if a PermMap is needed. */
- perm = 0;
- ok = 1;
- for( iout = 0; iout < nin; iout++ ) outperm[ iout ] = -1;
- for( iin = 0; iin < nin; iin++ ) {
- iout = in[ iin ];
- if( outperm[ iout ] != -1 ) {
- ok = 0;
- break;
- } else {
- outperm[ iout ] = iin;
- }
- }
- for( iout = 0; iout < nin; iout++ ) {
- if( outperm[ iout ] == -1 ) {
- ok = 0;
- break;
- } else if( outperm[ iout ] != iout ) {
- perm = 1;
- }
- }
- if( ok ) {
-
-/* Allocate the array to hold the returned output indices. */
- nout = astGetNout( this );
- result = astMalloc( sizeof(int)*(size_t) nout );
- if( astOK ) {
-
-/* The outputs are copied from the supplied Mapping. */
- for( iout = 0; iout < nout; iout++ ) result[ iout ] = iout;
-
-/* If the inputs are to be permuted, create the PermMap. */
- if( perm ) {
- pm = astPermMap( nin, in, nin, outperm, NULL, "", status );
-
-/* The returned Mapping is a series CmpMap containing this PermMap
- followed by the supplied Mapping. */
- rmap = astCmpMap( pm, this, 1, "", status );
- *map = astSimplify( rmap );
- rmap = astAnnul( rmap );
-
-/* Annul the PermMap pointer. */
- pm = astAnnul( pm );
-
-/* If no input permutation is needed, the resturned Mapping is just the
- supplied Mapping. */
- } else {
- *map = astClone( this );
- }
- }
- }
-
-/* Free resources. */
- outperm = astFree( outperm );
- }
- }
-
-/* Free resources if an error has occurred. */
- if( !astOK ) {
- result = astFree( result );
- *map = astAnnul( *map );
- }
-
-/* Return the list of output indices. */
- return result;
-}
-
-static double MatrixDet( int ndim, const double *matrix, int *status ){
-/*
-* Name:
-* MatrixDet
-
-* Purpose:
-* Return the determinant of a square matrix.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* double MatrixDet( int ndim, const double *matrix, int *status )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function returns the determinant of the supplied square matrix.
-
-* Parameters:
-* ndim
-* The number of rows and columns in the matrix.
-* matrix
-* The matrix element values. The first row of "ndim" elements
-* should be supplied first, followed by the second row, etc.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The determinant.
-*/
-
-/* Local Variables: */
- double result;
- double *a;
- double *y;
- int *iw;
- int i;
- int jf;
-
-/* Initialise */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
- if( ndim == 1 ) {
- result = matrix[ 0 ];
-
- } else if( ndim == 2 ) {
- result = matrix[ 0 ]*matrix[ 3 ] - matrix[ 1 ]*matrix[ 2 ];
-
- } else {
- a = astStore( NULL, matrix, sizeof( double )*(size_t) (ndim*ndim) );
- iw = astMalloc( sizeof( int )*(size_t) ndim );
- y = astMalloc( sizeof( double )*(size_t) ndim );
- if( y ) {
- for( i = 0; i < ndim; i++ ) y[ i ] = 1.0;
- palSlaDmat( ndim, a, y, &result, &jf, iw );
- }
- y = astFree( y );
- iw = astFree( iw );
- a = astFree( a );
- }
-
- return result;
-}
-
-static double MaxD( double a, double b, int *status ) {
-/*
-* Name:
-* MaxD
-
-* Purpose:
-* Return the maximum of two double values.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* double MaxD( double a, double b, int *status )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function returns the maximum of two double values.
-
-* Parameters:
-* a
-* The first value.
-* b
-* The second value.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The maximum.
-*/
-
-/* Return the larger value. */
- return ( a > b ) ? a : b;
-}
-
-static int MaxI( int a, int b, int *status ) {
-/*
-* Name:
-* MaxI
-
-* Purpose:
-* Return the maximum of two integer values.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MaxI( int a, int b, int *status )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function returns the maximum of two integer values.
-
-* Parameters:
-* a
-* The first value.
-* b
-* The second value.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The maximum.
-*/
-
-/* Return the larger value. */
- return ( a > b ) ? a : b;
-}
-
-static int MinI( int a, int b, int *status ) {
-/*
-* Name:
-* MinI
-
-* Purpose:
-* Return the minimum of two integer values.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MinI( int a, int b, int *status )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function returns the minimum of two integer values.
-
-* Parameters:
-* a
-* The first value.
-* b
-* The second value.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The minimum.
-*/
-
-/* Return the smaller value. */
- return ( a < b ) ? a : b;
-}
-
-static double NewVertex( const MapData *mapdata, int lo, double scale,
- double x[], double f[], int *ncall, double xnew[], int *status ) {
-/*
-* Name:
-* NewVertex
-
-* Purpose:
-* Locate a new vertex for a simplex.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* double NewVertex( const MapData *mapdata, int lo, double scale,
-* double x[], double f[], int *ncall, double xnew[], int *status );
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function is provided for use during optimisation of a
-* Mapping function using the simplex method. It generates the
-* coordinates of a new simplex vertex and evaluates the Mapping
-* function at that point. If the function's value is better then
-* (i.e. larger than) the value at the previously worst vertex,
-* then it is used to replace that vertex.
-
-* Parameters:
-* mapdata
-* Pointer to a MapData structure which describes the Mapping
-* function to be used.
-* lo
-* The (zero-based) index of the simplex vertex which initially
-* has the worst (lowest) value.
-* scale
-* The scale factor to be used to generate the new vertex. The
-* distance of the worst vertex from the centre of the face
-* opposite it is scaled by this factor to give the new vertex
-* position. Negative factors result in reflection through this
-* opposite face.
-* x
-* An array of double containing the coordinates of the vertices
-* of the simplex. The coordinates of the first vertex are
-* stored first, then those of the second vertex, etc. This
-* array will be updated by this function if the new vertex is
-* used to replace an existing one.
-* f
-* An array of double containing the Mapping function values at
-* each vertex of the simplex. This array will be updated by
-* this function if the new vertex is used to replace an
-* existing one.
-* ncall
-* Pointer to an int containing a count of the number of times
-* the Mapping function has been invoked. This value will be
-* updated to reflect the actions of this function.
-* xnew
-* An array of double with one element for each input coordinate
-* of the Mapping function. This is used as workspace.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Mapping function value at the new vertex. This value is
-* returned whether or not the new vertex replaces an existing one.
-
-* Notes:
-* - A value of AST__BAD will be returned by this function if it is
-* invoked with the global error status set, or if it should fail
-* for any reason.
-* - A value of AST__BAD will also be returned if the new vertex
-* lies outside the constrained range of input coordinates
-* associated with the Mapping function (as specified in the
-* MapData structure supplied) or if any of the transformed output
-* coordinates produced by the underlying Mapping is bad. In either
-* case the new vertex will not be used to replace an existing one.
-*/
-
-/* Local Variables: */
- double fnew; /* Function value at new vertex */
- double xface; /* Coordinate of centre of magnification */
- int coord; /* Loop counter for coordinates */
- int ncoord; /* Number of coordinates */
- int nvertex; /* Number of simplex vertices */
- int vertex; /* Loop counter for vertices */
-
-/* Initialise. */
- fnew = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return fnew;
-
-/* Obtain the number of Mapping input coordinates from the MapData
- structure and calculate the number of simplex vertices. */
- ncoord = mapdata->nin;
- nvertex = ncoord + 1;
-
-/* Loop to obtain each coordinate of the new vertex. */
- for ( coord = 0; coord < ncoord; coord++ ) {
-
-/* Loop over all vertices except the lowest one and average their
- coordinates. This gives the coordinate of the centre of the face
- opposite the lowest vertex, which will act as the centre of
- magnification. */
- xface = 0.0;
- for ( vertex = 0; vertex < nvertex; vertex++ ) {
- if ( vertex != lo ) {
-
-/* Divide each coordinate by the number of vertices as the sum is
- accumulated in order to minimise the risk of overflow. */
- xface += x[ vertex * ncoord + coord ] /
- ( (double ) ( nvertex - 1 ) );
- }
- }
-
-/* Magnify the lowest vertex's distance from this point by the
- required factor to give the coordinates of the new vertex. */
- xnew[ coord ] = xface + ( x[ lo * ncoord + coord ] - xface ) * scale;
- }
-
-/* Evaluate the Mapping function at the new vertex. */
- fnew = MapFunction( mapdata, xnew, ncall, status );
-
-/* If the result is not bad and exceeds the previous value at the
- lowest vertex, then replace the lowest vertex with this new one. */
- if ( astOK && ( fnew != AST__BAD ) && ( fnew > f[ lo ] ) ) {
- for ( coord = 0; coord < ncoord; coord++ ) {
- x[ lo * ncoord + coord ] = xnew[ coord ];
- }
- f[ lo ] = fnew;
- }
-
-/* Return the value at the new vertex. */
- return fnew;
-}
-
-static double Random( long int *seed, int *status ) {
-/*
-* Name:
-* Random
-
-* Purpose:
-* Return a pseudo-random value in the range 0 to 1.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* double Random( long int *seed, int *status );
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function returns a pseudo-random double value from a PDF
-* uniformly distributed in the range 0 to 1. It also updates a
-* seed value so that a sequence of pseudo-random values may be
-* obtained with successive invocations.
-
-* Parameters:
-* seed
-* Pointer to a long int which should initially contain a
-* non-zero seed value. This will be updated with a new seed
-* which may be supplied on the next invocation in order to
-* obtain a different pseudo-random value.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The pseudo-random value.
-*/
-
-/* Local Variables: */
- long int i; /* Temporary storage */
-
-/* This a basic random number generator using constants given in
- Numerical Recipes (Press et al.). */
- i = *seed / 127773;
- *seed = ( *seed - i * 127773 ) * 16807 - i * 2836;
- if ( *seed < 0 ) *seed += 2147483647;
-
-/* Return the result as a double value in the range 0 to 1. */
- return ( (double) ( *seed - 1 ) ) / (double) 2147483646;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-*+
-* Name:
-* astRate
-
-* Purpose:
-* Calculate the rate of change of a Mapping output.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "mapping.h"
-* result = astRate( AstMapping *this, double *at, int ax1, int ax2 )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-* This function evaluates the rate of change of a specified output of
-* the supplied Mapping with respect to a specified input, at a
-* specified input position.
-*
-* The result is estimated by interpolating the function using a
-* fourth order polynomial in the neighbourhood of the specified
-* position. The size of the neighbourhood used is chosen to minimise
-* the RMS residual per unit length between the interpolating
-* polynomial and the supplied Mapping function.
-
-* Parameters:
-* this
-* Pointer to the Mapping to be applied.
-* at
-* The address of an array holding the axis values at the position
-* at which the rate of change is to be evaluated. The number of
-* elements in this array should equal the number of inputs to the
-* Mapping.
-* ax1
-* The index of the Mapping output for which the rate of change is to
-* be found (output numbering starts at 0 for the first output).
-* ax2
-* The index of the Mapping input which is to be varied in order to
-* find the rate of change (input numbering starts at 0 for the first
-* input).
-
-* Returned Value:
-* astRate()
-* The rate of change of Mapping output "ax1" with respect to input
-* "ax2", evaluated at "at", or AST__BAD if the value cannot be
-* calculated.
-
-* Notes:
-* - A value of AST__BAD will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-
-* Implementation Notes:
-* - This function implements the basic astRate method available
-* via the protected interface to the Mapping class. The public
-* interface to this method is provided by the astRateId_
-* function.
-*/
-
-/* Local Variables: */
-#define MXY 100
- double x0, h, s1, s2, sp, r, dh, ed2, ret, rms, h0, x[MXY], y[MXY];
- int ntry, nin, nout, i, ixy, fitted, fitok;
- PN *fit;
-
-/* Initialise */
- ret = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return ret;
-
-/* Allocate resources */
- FunPN( NULL, NULL, -1, 0, 0, NULL, NULL, status );
-
-/* Obtain the numbers of input and output coordinates for the Mapping. */
- nin = astGetNin( this );
- nout = astGetNout( this );
-
-/* Validate the output index. */
- if ( astOK && ( ax1 < 0 || ax1 >= nout ) ) {
- astError( AST__AXIIN, "astRate(%s): The supplied Mapping output "
- "index (%d) is invalid; it should be in the range 1 to %d.", status,
- astGetClass( this ), ax1 + 1, nout );
- }
-
-/* Validate the input index. */
- if ( astOK && ( ax2 < 0 || ax2 >= nin ) ) {
- astError( AST__AXIIN, "astRate(%s): The supplied Mapping input "
- "index (%d) is invalid; it should be in the range 1 to %d.", status,
- astGetClass( this ), ax2 + 1, nin );
- }
-
-/* Check the Mapping has a forward transformation. */
- if ( astOK && !astGetTranForward( this ) ) {
- astError( AST__NODEF, "astRate(%s): The supplied Mapping does not "
- "have a defined forward transformation.", status,
- astGetClass( this ) );
- }
-
-/* Save the central value on the Mapping input which is to be varied. */
- x0 = at[ ax2 ];
-
-/* If it is bad, return bad values. */
- if( astOK && x0 != AST__BAD ) {
-
-/* The required derivative is estimated by fitting a polynomial to the
- function over a small range of length "h" centred on the supplied value
- "x0", and then finding the derivative of this fitting polynomial at "x0".
- The bulk of the problem lies in choosing a suitable value for the
- length "h". If "h" is too large, the function is not well fitted by a
- polynomial and so the returned value is inaccurate. If "h" is too small,
- then the returned value is dominated by rounding errors and so is again
- inaccurate. The process tries a series of different values for "h". The
- initial estimate is formed as a fixed small fraction of the supplied
- "x0", or 1.0 if "x0" is zero. */
- h = ( x0 != 0.0 ) ? DBL_EPSILON*1.0E10*x0 : 1.0;
-
-/* We next find a more reliable estimate based on the probable accuracy
- of the calculated function values and the rate of change of the
- derivative of the function in the region of "x0". Find a polynomial fit
- to the function over this initial interval. The independant variable
- of this fit is (x-x0) and the dependant variable is (y(x)-y(x0). If
- this fails, repeat up to ten times with a larger "h" value. */
- fit = FitPN( this, at, ax1, ax2, x0, h, NULL, status );
- ntry = 0;
- while( ( !fit || fit->too_small ) && ntry++ < 10 ) {
- (void) astFree( fit );
- h *= 1000;
- fit = FitPN( this, at, ax1, ax2, x0, h, NULL, status );
- }
- if( !fit ) return AST__BAD;
-
-/* We need an estimate of how much the derivative may typically change
- over this interval. The more the derivative changes, the smaller we
- should make "h" in order to produce a good fit to the polynomial.
- Calculate the rate of change of the polynomial (i.e the derivative
- estimate) at a set of 5 evenly spaced points over the interval "h"
- and then find the standard deviation of the derivative estimates
- divided by the interval size. At the same time form an estimate of
- the RMS polynomial value over the step ("sp"). */
- s1 = 0.0;
- s2 = 0.0;
- sp = 0.0;
- dh = h/4.0;
- for( i = -(RATE_ORDER/2); i < (RATE_ORDER+1)/2; i++ ) {
- r = EvaluateDPN( fit, i*dh, status );
- s1 += r;
- s2 += r*r;
- r = EvaluatePN( fit, i*dh, status ) + fit->y0;
- sp += r*r;
- }
- s2 /= RATE_ORDER;
- s1 /= RATE_ORDER;
- ed2 = s2 - s1*s1;
- if( ed2 > 0 ) {
- ed2 = sqrt( ed2 )/h;
- } else {
- ed2 = 0.0;
- }
- sp = sqrt( sp/RATE_ORDER );
-
- fit = astFree( fit );
-
-/* If the derivative estimate does not change significantly over the interval,
- return it. */
- if( ed2 <= 1.0E-10*fabs( s1/h ) ) {
- ret = s1;
-
- } else {
-
-/* Otherwise, we find a better estimate for the step size by assuming a
- fixed relative error in the function value, and a second derivative
- based on the "ed2" value found above. The total error in the
- derivative estimate is assumed to be of the form:
-
- (a/h)**2 + (d2*h)**2
-
- where "a" is the accuracy with which the function can be evaluated
- (assumed to be 1.0E5*DBL_EPSILON*sp) and d2 is the second derivative.
- The value of "h" below is the value which minimises the above
- total error expression. */
-
- h = sqrt( fabs( 1.0E5*DBL_EPSILON*sp/ed2 ) );
-
-/* It turns out that the error in the derivative (i.e. the residual
- between the true derivative value and the derivative of the fitting
- polynomial at the "x0" value), is generally equal to the RMS error
- between the fitting polynomial and the function value, divided by the
- step size. This error is high for very small step sizes because of
- rounding error and is also high for large step sizes becase the function
- is not well fitted by a polynomial. In between there is a minimum
- which corresponds to the optimal step size. It also turns out that the
- error in the derivative is a monotonic increasing function for step
- sizes above the optimal step size. We find the optimal step size by
- working our way down this monotonic function, in powers of ten, until
- the first increase in error is encountered.
-
- Starting at the step size found above, note log10( normalised rms error of
- fit ) at increasing step sizes until the rms error exceeds the 0.2 of
- the rms function value. Each new step size is a factor 10 times the previous
- step size. Once the step size is so large rgat we cannot fit the
- polynomial, break out of the loop. */
- h0 = h;
- ixy = 0;
- rms = 0.1*sp - 1;
- fitted = 0;
- fitok = 1;
- while( rms < 0.2*sp && ixy < MXY && ( !fitted || fitok ) ) {
- fit = FitPN( this, at, ax1, ax2, x0, h0, &rms, status );
- if( fit ) {
- fitted = 1;
- fitok = 1;
-
-/* If we come across an exact fit, use it to determine the returned
- values and break. */
- if( rms == 0.0 ) {
- ret = fit->coeff[ 1 ];
- fit = astFree( fit );
- break;
-
- } else {
- if( fit->coeff[ 1 ] != 0.0 ) {
- y[ ixy ] = log10( rms/( h0*fabs( fit->coeff[ 1 ] ) ) );
- } else {
- y[ ixy ] = AST__BAD;
- }
- fit = astFree( fit );
- }
- } else {
- fitok = 0;
- y[ ixy ] = AST__BAD;
- }
- x[ ixy ] = ixy;
- ixy++;
- h0 *= 10.0;
- }
-
-/* If we found a step size which gave zero rms error, use it. Otherwise, run
- down from the largest step size to the smallest looking for the first step
- size at which the error increases rather than decreasing. */
- if( ret == AST__BAD ) {
- h0 = AST__BAD;
- ixy--;
- while( --ixy > 0 ){
- if( y[ ixy - 1 ] != AST__BAD &&
- y[ ixy ] != AST__BAD &&
- y[ ixy + 1 ] != AST__BAD ) {
- if( y[ ixy - 1 ] > y[ ixy ] ) {
- h0 = x[ ixy ];
-
- x[ 0 ] = x[ ixy - 1 ];
- x[ 1 ] = x[ ixy ];
- x[ 2 ] = x[ ixy + 1 ];
-
- y[ 0 ] = y[ ixy - 1 ];
- y[ 1 ] = y[ ixy ];
- y[ 2 ] = y[ ixy + 1 ];
-
- break;
- }
- }
- }
-
-/* If no minimum could be found in the above loop, continue decreasing
- the step size below the value set above until a minimum is found. */
- if( h0 == AST__BAD ) {
- h0 = h;
- ixy = 0;
- while( y[ 0 ] < y[ 1 ] ) {
-
- h0 *= 0.1;
- ixy--;
- fit = FitPN( this, at, ax1, ax2, x0, h0, &rms, status );
- if( fit ) {
- x[ 2 ] = x[ 1 ];
- x[ 1 ] = x[ 0 ];
- y[ 2 ] = y[ 1 ];
- y[ 1 ] = y[ 0 ];
-
- if( rms == 0.0 ) {
- ret = fit->coeff[ 1 ];
- fit = astFree( fit );
- break;
-
- } else if( fit->coeff[ 1 ] != 0.0 ) {
- x[ 0 ] = ixy;
- y[ 0 ] = log10( rms/( h0*fabs( fit->coeff[ 1 ] ) ) );
-
- } else {
- h0 *= 10.0;
- x[ 0 ] = AST__BAD;
- break;
- }
- fit = astFree( fit );
- } else {
- h0 *= 10.0;
- x[ 0 ] = AST__BAD;
- break;
- }
- }
- }
-
-/* If we have found a error which is lower than either of its
- neighbouring errors, fit a quadratic through the three points and find
- the power of ten which correspnds to the minimum of the function. */
- if( ret == AST__BAD ) {
- if( x[ 0 ] != AST__BAD ) {
- fit = InterpPN( 3, x, y, status );
- if( fit ){
- if( fit->coeff[ 2 ] > 0.0 ) {
- h0 = h*pow( 10.0, -0.5*fit->coeff[ 1 ]/fit->coeff[ 2 ] );
- }
- fit = astFree( fit );
- }
- }
-
-/* Use the best estimate of h to calculate the returned derivatives. */
- fit = FitPN( this, at, ax1, ax2, x0, h0, &rms, status );
- if( fit ) {
- ret = fit->coeff[ 1 ];
- fit = astFree( fit );
- }
- }
- }
- }
- }
-
-/* Free resources */
- FunPN( NULL, NULL, -2, 0, 0, NULL, NULL, status );
-
-/* Return the result. */
- return ret;
-#undef MXY
-}
-
-/*
-*++
-* Name:
-c astRebin<X>
-f AST_REBIN<X>
-
-* Purpose:
-* Rebin a region of a data grid.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "mapping.h"
-c void astRebin<X>( AstMapping *this, double wlim, int ndim_in,
-c const int lbnd_in[], const int ubnd_in[],
-c const <Xtype> in[], const <Xtype> in_var[],
-c int spread, const double params[], int flags,
-c double tol, int maxpix,
-c <Xtype> badval, int ndim_out,
-c const int lbnd_out[], const int ubnd_out[],
-c const int lbnd[], const int ubnd[],
-c <Xtype> out[], <Xtype> out_var[] );
-f CALL AST_REBIN<X>( THIS, WLIM, NDIM_IN, LBND_IN, UBND_IN, IN, IN_VAR,
-f SPREAD, PARAMS, FLAGS,
-f TOL, MAXPIX, BADVAL,
-f NDIM_OUT, LBND_OUT, UBND_OUT,
-f LBND, UBND, OUT, OUT_VAR, STATUS )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-* This is a set of functions for rebinning gridded data (e.g. an
-* image) under the control of a geometrical transformation, which
-* is specified by a Mapping. The functions operate on a pair of
-* data grids (input and output), each of which may have any number
-* of dimensions. Rebinning may be restricted to a specified
-* region of the input grid. An associated grid of error estimates
-* associated with the input data may also be supplied (in the form
-* of variance values), so as to produce error estimates for the
-* rebined output data. Propagation of missing data (bad pixels)
-* is supported.
-*
-* Note, if you will be rebining a sequence of input arrays and then
-* co-adding them into a single array, the alternative
-c astRebinSeq<X> functions
-f AST_REBINSEQ<X> routines
-* will in general be more efficient.
-*
-* You should use a rebinning function which matches the numerical
-* type of the data you are processing by replacing <X> in
-c the generic function name astRebin<X> by an appropriate 1- or
-f the generic function name AST_REBIN<X> by an appropriate 1- or
-* 2-character type code. For example, if you are rebinning data
-c with type "float", you should use the function astRebinF (see
-f with type REAL, you should use the function AST_REBINR (see
-* the "Data Type Codes" section below for the codes appropriate to
-* other numerical types).
-*
-* Rebinning of the grid of input data is performed by transforming
-* the coordinates of the centre of each input grid element (or pixel)
-* into the coordinate system of the output grid. The input pixel
-* value is then divided up and assigned to the output pixels in the
-* neighbourhood of the central output coordinates. A choice of
-* schemes are provided for determining how each input pixel value is
-* divided up between the output pixels. In general, each output pixel
-* may be assigned values from more than one input pixel. All
-* contributions to a given output pixel are summed to produce the
-* final output pixel value. Output pixels can be set to the supplied
-* bad value if they receive contributions from an insufficient number
-* of input pixels. This is controlled by the
-c "wlim" parameter.
-f WLIM argument.
-*
-* Input pixel coordinates are transformed into the coordinate
-* system of the output grid using the forward transformation of the
-* Mapping which is supplied. This means that geometrical features
-* in the input data are subjected to the Mapping's forward
-* transformation as they are transferred from the input to the
-* output grid.
-*
-* In practice, transforming the coordinates of every pixel of a
-* large data grid can be time-consuming, especially if the Mapping
-* involves complicated functions, such as sky projections. To
-* improve performance, it is therefore possible to approximate
-* non-linear Mappings by a set of linear transformations which are
-* applied piece-wise to separate sub-regions of the data. This
-* approximation process is applied automatically by an adaptive
-* algorithm, under control of an accuracy criterion which
-* expresses the maximum tolerable geometrical distortion which may
-* be introduced, as a fraction of a pixel.
-*
-* This algorithm first attempts to approximate the Mapping with a
-* linear transformation applied over the whole region of the
-* input grid which is being used. If this proves to be
-* insufficiently accurate, the input region is sub-divided into
-* two along its largest dimension and the process is repeated
-* within each of the resulting sub-regions. This process of
-* sub-division continues until a sufficiently good linear
-* approximation is found, or the region to which it is being
-* applied becomes too small (in which case the original Mapping is
-* used directly).
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to a Mapping, whose forward transformation will be
-* used to transform the coordinates of pixels in the input
-* grid into the coordinate system of the output grid.
-*
-* The number of input coordinates used by this Mapping (as
-* given by its Nin attribute) should match the number of input
-c grid dimensions given by the value of "ndim_in"
-f grid dimensions given by the value of NDIM_IN
-* below. Similarly, the number of output coordinates (Nout
-* attribute) should match the number of output grid dimensions
-c given by "ndim_out".
-f given by NDIM_OUT.
-c wlim
-f WLIM = DOUBLE PRECISION (Given)
-* Gives the required number of input pixel values which must contribute
-* to an output pixel in order for the output pixel value to be
-* considered valid. If the sum of the input pixel weights contributing
-* to an output pixel is less than the supplied
-c "wlim"
-f WLIM
-* value, then the output pixel value is returned set to the
-* supplied bad value.
-c ndim_in
-f NDIM_IN = INTEGER (Given)
-* The number of dimensions in the input grid. This should be at
-* least one.
-c lbnd_in
-f LBND_IN( NDIM_IN ) = INTEGER (Given)
-c Pointer to an array of integers, with "ndim_in" elements,
-f An array
-* containing the coordinates of the centre of the first pixel
-* in the input grid along each dimension.
-c ubnd_in
-f UBND_IN( NDIM_IN ) = INTEGER (Given)
-c Pointer to an array of integers, with "ndim_in" elements,
-f An array
-* containing the coordinates of the centre of the last pixel in
-* the input grid along each dimension.
-*
-c Note that "lbnd_in" and "ubnd_in" together define the shape
-f Note that LBND_IN and UBND_IN together define the shape
-* and size of the input grid, its extent along a particular
-c (j'th) dimension being ubnd_in[j]-lbnd_in[j]+1 (assuming the
-c index "j" to be zero-based). They also define
-f (J'th) dimension being UBND_IN(J)-LBND_IN(J)+1. They also define
-* the input grid's coordinate system, each pixel having unit
-* extent along each dimension with integral coordinate values
-* at its centre.
-c in
-f IN( * ) = <Xtype> (Given)
-c Pointer to an array, with one element for each pixel in the
-f An array, with one element for each pixel in the
-* input grid, containing the input data to be rebined. The
-* numerical type of this array should match the 1- or
-* 2-character type code appended to the function name (e.g. if
-c you are using astRebinF, the type of each array element
-c should be "float").
-f you are using AST_REBINR, the type of each array element
-f should be REAL).
-*
-* The storage order of data within this array should be such
-* that the index of the first grid dimension varies most
-* rapidly and that of the final dimension least rapidly
-c (i.e. Fortran array indexing is used).
-f (i.e. normal Fortran array storage order).
-c in_var
-f IN_VAR( * ) = <Xtype> (Given)
-c An optional pointer to a second array with the same size and
-c type as the "in" array. If given, this should contain a set
-c of non-negative values which represent estimates of the
-c statistical variance associated with each element of the "in"
-c array. If this array is supplied (together with the
-c corresponding "out_var" array), then estimates of the
-c variance of the rebined output data will be calculated.
-c
-c If no input variance estimates are being provided, a NULL
-c pointer should be given.
-f An optional second array with the same size and type as the
-f IN array. If the AST__USEVAR flag is set via the FLAGS
-f argument (below), this array should contain a set of
-f non-negative values which represent estimates of the
-f statistical variance associated with each element of the IN
-f array. Estimates of the variance of the rebined output data
-f will then be calculated.
-f
-f If the AST__USEVAR flag is not set, no input variance
-f estimates are required and this array will not be used. A
-f dummy (e.g. one-element) array may then be supplied.
-c spread
-f SPREAD = INTEGER (Given)
-c This parameter specifies the scheme to be used for dividing
-f This argument specifies the scheme to be used for dividing
-* each input data value up amongst the corresponding output pixels.
-* It may be used to select
-* from a set of pre-defined schemes by supplying one of the
-* values described in the "Pixel Spreading Schemes"
-* section below. If a value of zero is supplied, then the
-* default linear spreading scheme is used (equivalent to
-* supplying the value AST__LINEAR).
-c params
-f PARAMS( * ) = DOUBLE PRECISION (Given)
-c An optional pointer to an array of double which should contain
-f An optional array which should contain
-* any additional parameter values required by the pixel
-* spreading scheme. If such parameters are required, this
-* will be noted in the "Pixel Spreading Schemes"
-* section below.
-*
-c If no additional parameters are required, this array is not
-c used and a NULL pointer may be given.
-f If no additional parameters are required, this array is not
-f used. A dummy (e.g. one-element) array may then be supplied.
-c flags
-f FLAGS = INTEGER (Given)
-c The bitwise OR of a set of flag values which may be used to
-f The sum of a set of flag values which may be used to
-* provide additional control over the rebinning operation. See
-* the "Control Flags" section below for a description of the
-* options available. If no flag values are to be set, a value
-* of zero should be given.
-c tol
-f TOL = DOUBLE PRECISION (Given)
-* The maximum tolerable geometrical distortion which may be
-* introduced as a result of approximating non-linear Mappings
-* by a set of piece-wise linear transformations. This should be
-* expressed as a displacement in pixels in the output grid's
-* coordinate system.
-*
-* If piece-wise linear approximation is not required, a value
-* of zero may be given. This will ensure that the Mapping is
-* used without any approximation, but may increase execution
-* time.
-*
-* If the value is too high, discontinuities between the linear
-* approximations used in adjacent panel will be higher, and may
-* cause the edges of the panel to be visible when viewing the output
-* image at high contrast. If this is a problem, reduce the
-* tolerance value used.
-c maxpix
-f MAXPIX = INTEGER (Given)
-* A value which specifies an initial scale size (in pixels) for
-* the adaptive algorithm which approximates non-linear Mappings
-* with piece-wise linear transformations. Normally, this should
-* be a large value (larger than any dimension of the region of
-* the input grid being used). In this case, a first attempt to
-* approximate the Mapping by a linear transformation will be
-* made over the entire input region.
-*
-* If a smaller value is used, the input region will first be
-c divided into sub-regions whose size does not exceed "maxpix"
-f divided into sub-regions whose size does not exceed MAXPIX
-* pixels in any dimension. Only at this point will attempts at
-* approximation commence.
-*
-* This value may occasionally be useful in preventing false
-* convergence of the adaptive algorithm in cases where the
-* Mapping appears approximately linear on large scales, but has
-* irregularities (e.g. holes) on smaller scales. A value of,
-* say, 50 to 100 pixels can also be employed as a safeguard in
-* general-purpose software, since the effect on performance is
-* minimal.
-*
-* If too small a value is given, it will have the effect of
-* inhibiting linear approximation altogether (equivalent to
-c setting "tol" to zero). Although this may degrade
-f setting TOL to zero). Although this may degrade
-* performance, accurate results will still be obtained.
-c badval
-f BADVAL = <Xtype> (Given)
-* This argument should have the same type as the elements of
-c the "in" array. It specifies the value used to flag missing
-f the IN array. It specifies the value used to flag missing
-* data (bad pixels) in the input and output arrays.
-*
-c If the AST__USEBAD flag is set via the "flags" parameter,
-f If the AST__USEBAD flag is set via the FLAGS argument,
-c then this value is used to test for bad pixels in the "in"
-c (and "in_var") array(s).
-f then this value is used to test for bad pixels in the IN
-f (and IN_VAR) array(s).
-*
-* In all cases, this value is also used to flag any output
-c elements in the "out" (and "out_var") array(s) for which
-f elements in the OUT (and OUT_VAR) array(s) for which
-* rebined values could not be obtained (see the "Propagation
-* of Missing Data" section below for details of the
-* circumstances under which this may occur).
-c ndim_out
-f NDIM_OUT = INTEGER (Given)
-* The number of dimensions in the output grid. This should be
-* at least one. It need not necessarily be equal to the number
-* of dimensions in the input grid.
-c lbnd_out
-f LBND_OUT( NDIM_OUT ) = INTEGER (Given)
-c Pointer to an array of integers, with "ndim_out" elements,
-f An array
-* containing the coordinates of the centre of the first pixel
-* in the output grid along each dimension.
-c ubnd_out
-f UBND_OUT( NDIM_OUT ) = INTEGER (Given)
-c Pointer to an array of integers, with "ndim_out" elements,
-f An array
-* containing the coordinates of the centre of the last pixel in
-* the output grid along each dimension.
-*
-c Note that "lbnd_out" and "ubnd_out" together define the
-f Note that LBND_OUT and UBND_OUT together define the
-* shape, size and coordinate system of the output grid in the
-c same way as "lbnd_in" and "ubnd_in" define the shape, size
-f same way as LBND_IN and UBND_IN define the shape, size
-* and coordinate system of the input grid.
-c lbnd
-f LBND( NDIM_IN ) = INTEGER (Given)
-c Pointer to an array of integers, with "ndim_in" elements,
-f An array
-* containing the coordinates of the first pixel in the region
-* of the input grid which is to be included in the rebined output
-* array.
-c ubnd
-f UBND( NDIM_IN ) = INTEGER (Given)
-c Pointer to an array of integers, with "ndim_in" elements,
-f An array
-* containing the coordinates of the last pixel in the region of
-* the input grid which is to be included in the rebined output
-* array.
-*
-c Note that "lbnd" and "ubnd" together define the shape and
-f Note that LBND and UBND together define the shape and
-* position of a (hyper-)rectangular region of the input grid
-* which is to be included in the rebined output array. This region
-* should lie wholly within the extent of the input grid (as
-c defined by the "lbnd_in" and "ubnd_in" arrays). Regions of
-f defined by the LBND_IN and UBND_IN arrays). Regions of
-* the input grid lying outside this region will not be used.
-c out
-f OUT( * ) = <Xtype> (Returned)
-c Pointer to an array, with one element for each pixel in the
-f An array, with one element for each pixel in the
-* output grid, in which the rebined data values will be
-* returned. The numerical type of this array should match that
-c of the "in" array, and the data storage order should be such
-f of the IN array, and the data storage order should be such
-* that the index of the first grid dimension varies most
-* rapidly and that of the final dimension least rapidly
-c (i.e. Fortran array indexing is used).
-f (i.e. normal Fortran array storage order).
-c out_var
-f OUT_VAR( * ) = <Xtype> (Returned)
-c An optional pointer to an array with the same type and size
-c as the "out" array. If given, this array will be used to
-c return variance estimates for the rebined data values. This
-c array will only be used if the "in_var" array has also been
-c supplied.
-f An optional array with the same type and size as the OUT
-f array. If the AST__USEVAR flag is set via the FLAGS argument,
-f this array will be used to return variance estimates for the
-f rebined data values.
-*
-* The output variance values will be calculated on the
-* assumption that errors on the input data values are
-* statistically independent and that their variance estimates
-* may simply be summed (with appropriate weighting factors)
-* when several input pixels contribute to an output data
-* value. If this assumption is not valid, then the output error
-* estimates may be biased. In addition, note that the
-* statistical errors on neighbouring output data values (as
-* well as the estimates of those errors) may often be
-* correlated, even if the above assumption about the input data
-* is correct, because of the pixel spreading schemes
-* employed.
-*
-c If no output variance estimates are required, a NULL pointer
-c should be given.
-f If the AST__USEVAR flag is not set, no output variance
-f estimates will be calculated and this array will not be
-f used. A dummy (e.g. one-element) array may then be supplied.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Data Type Codes:
-* To select the appropriate rebinning function, you should
-c replace <X> in the generic function name astRebin<X> with a
-f replace <X> in the generic function name AST_REBIN<X> with a
-* 1- or 2-character data type code, so as to match the numerical
-* type <Xtype> of the data you are processing, as follows:
-c - D: double
-c - F: float
-c - I: int
-f - D: DOUBLE PRECISION
-f - R: REAL
-f - I: INTEGER
-*
-c For example, astRebinD would be used to process "double"
-c data, while astRebinI would be used to process "int"
-c data, etc.
-f For example, AST_REBIND would be used to process DOUBLE
-f PRECISION data, while AST_REBINI would be used to process
-f integer data (stored in an INTEGER array), etc.
-*
-* Note that, unlike
-c astResample<X>, the astRebin<X>
-f AST_RESAMPLE<X>, the AST_REBIN<X>
-* set of functions does not yet support unsigned integer data types
-* or integers of different sizes.
-
-* Pixel Spreading Schemes:
-* The pixel spreading scheme specifies the Point Spread Function (PSF)
-* applied to each input pixel value as it is copied into the output
-* array. It can be thought of as the inverse of the sub-pixel
-* interpolation schemes used by the
-c astResample<X>
-f AST_RESAMPLE<X>
-* group of functions. That is, in a sub-pixel interpolation scheme the
-* kernel specifies the weight to assign to each input pixel when
-* forming the weighted mean of the input pixels, whereas the kernel in a
-* pixel spreading scheme specifies the fraction of the input data value
-* which is to be assigned to each output pixel. As for interpolation, the
-* choice of suitable pixel spreading scheme involves stricking a balance
-* between schemes which tend to degrade sharp features in the data by
-* smoothing them, and those which attempt to preserve sharp features but
-* which often tend to introduce unwanted artifacts. See the
-c astResample<X>
-f AST_RESAMPLE<X>
-* documentation for further discussion.
-*
-* The binning algorithm used has the ability to introduce artifacts
-* not seen when using a resampling algorithm. Particularly, when
-* viewing the output image at high contrast, systems of curves lines
-* covering the entire image may be visible. These are caused by a
-* beating effect between the input pixel positions and the output pixels
-* position, and their nature and strength depend critically upon the
-* nature of the Mapping and the spreading function being used. In
-* general, the nearest neighbour spreading function demonstrates this
-* effect more clearly than the other functions, and for this reason
-* should be used with caution.
-*
-* The following values (defined in the
-c "ast.h" header file)
-f AST_PAR include file)
-* may be assigned to the
-c "spread"
-f SPREAD
-* parameter. See the
-c astResample<X>
-f AST_RESAMPLE<X>
-* documentation for details of these schemes including the use of the
-c "fspread" and "params" parameters:
-f FSPREAD and PARAMS arguments:
-*
-* - AST__NEAREST
-* - AST__LINEAR
-* - AST__SINC
-* - AST__SINCSINC
-* - AST__SINCCOS
-* - AST__SINCGAUSS
-* - AST__SOMBCOS
-*
-* In addition, the following schemes can be used with
-f AST_REBIN<X> but not with AST_RESAMPLE<X>:
-c astRebin<X> but not with astResample<X>:
-*
-* - AST__GAUSS: This scheme uses a kernel of the form exp(-k*x*x), with k
-* a positive constant determined by the full-width at half-maximum (FWHM).
-* The FWHM should be supplied in units of output pixels by means of the
-c "params[1]"
-f PARAMS(2)
-* value and should be at least 0.1. The
-c "params[0]"
-f PARAMS(1)
-* value should be used to specify at what point the Gaussian is truncated
-* to zero. This should be given as a number of output pixels on either
-* side of the central output point in each dimension (the nearest integer
-* value is used).
-
-* Control Flags:
-c The following flags are defined in the "ast.h" header file and
-f The following flags are defined in the AST_PAR include file and
-* may be used to provide additional control over the rebinning
-* process. Having selected a set of flags, you should supply the
-c bitwise OR of their values via the "flags" parameter:
-f sum of their values via the FLAGS argument:
-*
-* - AST__USEBAD: Indicates that there may be bad pixels in the
-* input array(s) which must be recognised by comparing with the
-c value given for "badval" and propagated to the output array(s).
-f value given for BADVAL and propagated to the output array(s).
-* If this flag is not set, all input values are treated literally
-c and the "badval" value is only used for flagging output array
-f and the BADVAL value is only used for flagging output array
-* values.
-f - AST__USEVAR: Indicates that variance information should be
-f processed in order to provide estimates of the statistical error
-f associated with the rebined values. If this flag is not set,
-f no variance processing will occur and the IN_VAR and OUT_VAR
-f arrays will not be used. (Note that this flag is only available
-f in the Fortran interface to AST.)
-
-* Propagation of Missing Data:
-* Instances of missing data (bad pixels) in the output grid are
-c identified by occurrences of the "badval" value in the "out"
-f identified by occurrences of the BADVAL value in the OUT
-* array. These are produced if the sum of the weights of the
-* contributing input pixels is less than
-c "wlim".
-f WLIM.
-*
-* An input pixel is considered bad (and is consequently ignored) if
-* its
-c data value is equal to "badval" and the AST__USEBAD flag is
-c set via the "flags" parameter.
-f data value is equal to BADVAL and the AST__USEBAD flag is
-f set via the FLAGS argument.
-*
-* In addition, associated output variance estimates (if
-c calculated) may be declared bad and flagged with the "badval"
-c value in the "out_var" array for similar reasons.
-f calculated) may be declared bad and flagged with the BADVAL
-f value in the OUT_VAR array for similar reasons.
-*--
-*/
-/* Define a macro to implement the function for a specific data
- type. */
-#define MAKE_REBIN(X,Xtype,IntType) \
-static void Rebin##X( AstMapping *this, double wlim, int ndim_in, \
- const int lbnd_in[], const int ubnd_in[], \
- const Xtype in[], const Xtype in_var[], \
- int spread, const double params[], int flags, \
- double tol, int maxpix, Xtype badval, \
- int ndim_out, const int lbnd_out[], \
- const int ubnd_out[], const int lbnd[], \
- const int ubnd[], Xtype out[], Xtype out_var[], int *status ) { \
-\
-/* Local Variables: */ \
- astDECLARE_GLOBALS /* Thread-specific data */ \
- AstMapping *simple; /* Pointer to simplified Mapping */ \
- Xtype *d; /* Pointer to next output data value */ \
- Xtype *v; /* Pointer to next output variance value */ \
- double *w; /* Pointer to next weight value */ \
- double *work; /* Pointer to weight array */ \
- int idim; /* Loop counter for coordinate dimensions */ \
- int ipix_out; /* Index into output array */ \
- int nin; /* Number of Mapping input coordinates */ \
- int nout; /* Number of Mapping output coordinates */ \
- int npix; /* Number of pixels in input region */ \
- int npix_out; /* Number of pixels in output array */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Get a pointer to a structure holding thread-specific global data values */ \
- astGET_GLOBALS(this); \
-\
-/* Obtain values for the Nin and Nout attributes of the Mapping. */ \
- nin = astGetNin( this ); \
- nout = astGetNout( this ); \
-\
-/* If OK, check that the number of input grid dimensions matches the \
- number required by the Mapping and is at least 1. Report an error \
- if necessary. */ \
- if ( astOK && ( ( ndim_in != nin ) || ( ndim_in < 1 ) ) ) { \
- astError( AST__NGDIN, "astRebin"#X"(%s): Bad number of input grid " \
- "dimensions (%d).", status, astGetClass( this ), ndim_in ); \
- if ( ndim_in != nin ) { \
- astError( AST__NGDIN, "The %s given requires %d coordinate value%s " \
- "to specify an input position.", status, \
- astGetClass( this ), nin, ( nin == 1 ) ? "" : "s" ); \
- } \
- } \
-\
-/* If OK, also check that the number of output grid dimensions matches \
- the number required by the Mapping and is at least 1. Report an \
- error if necessary. */ \
- if ( astOK && ( ( ndim_out != nout ) || ( ndim_out < 1 ) ) ) { \
- astError( AST__NGDIN, "astRebin"#X"(%s): Bad number of output grid " \
- "dimensions (%d).", status, astGetClass( this ), ndim_out ); \
- if ( ndim_out != nout ) { \
- astError( AST__NGDIN, "The %s given generates %s%d coordinate " \
- "value%s for each output position.", status, astGetClass( this ), \
- ( nout < ndim_out ) ? "only " : "", nout, \
- ( nout == 1 ) ? "" : "s" ); \
- } \
- } \
-\
-/* Check that the lower and upper bounds of the input grid are \
- consistent. Report an error if any pair is not. */ \
- if ( astOK ) { \
- for ( idim = 0; idim < ndim_in; idim++ ) { \
- if ( lbnd_in[ idim ] > ubnd_in[ idim ] ) { \
- astError( AST__GBDIN, "astRebin"#X"(%s): Lower bound of " \
- "input grid (%d) exceeds corresponding upper bound " \
- "(%d).", status, astGetClass( this ), \
- lbnd_in[ idim ], ubnd_in[ idim ] ); \
- astError( AST__GBDIN, "Error in input dimension %d.", status, \
- idim + 1 ); \
- break; \
- } \
- } \
- } \
-\
-/* Check that the positional accuracy tolerance supplied is valid and \
- report an error if necessary. */ \
- if ( astOK && ( tol < 0.0 ) ) { \
- astError( AST__PATIN, "astRebin"#X"(%s): Invalid positional " \
- "accuracy tolerance (%.*g pixel).", status, \
- astGetClass( this ), DBL_DIG, tol ); \
- astError( AST__PATIN, "This value should not be less than zero." , status); \
- } \
-\
-/* Check that the initial scale size in pixels supplied is valid and \
- report an error if necessary. */ \
- if ( astOK && ( maxpix < 0 ) ) { \
- astError( AST__SSPIN, "astRebin"#X"(%s): Invalid initial scale " \
- "size in pixels (%d).", status, astGetClass( this ), maxpix ); \
- astError( AST__SSPIN, "This value should not be less than zero." , status); \
- } \
-\
-/* Check that the lower and upper bounds of the output grid are \
- consistent. Report an error if any pair is not. */ \
- if ( astOK ) { \
- for ( idim = 0; idim < ndim_out; idim++ ) { \
- if ( lbnd_out[ idim ] > ubnd_out[ idim ] ) { \
- astError( AST__GBDIN, "astRebin"#X"(%s): Lower bound of " \
- "output grid (%d) exceeds corresponding upper bound " \
- "(%d).", status, astGetClass( this ), \
- lbnd_out[ idim ], ubnd_out[ idim ] ); \
- astError( AST__GBDIN, "Error in output dimension %d.", status, \
- idim + 1 ); \
- break; \
- } \
- } \
- } \
-\
-/* Similarly check the bounds of the input region. */ \
- if ( astOK ) { \
- for ( idim = 0; idim < ndim_out; idim++ ) { \
- if ( lbnd[ idim ] > ubnd[ idim ] ) { \
- astError( AST__GBDIN, "astRebin"#X"(%s): Lower bound of " \
- "input region (%d) exceeds corresponding upper " \
- "bound (%d).", status, astGetClass( this ), \
- lbnd[ idim ], ubnd[ idim ] ); \
-\
-/* Also check that the input region lies wholly within the input \
- grid. */ \
- } else if ( lbnd[ idim ] < lbnd_in[ idim ] ) { \
- astError( AST__GBDIN, "astRebin"#X"(%s): Lower bound of " \
- "input region (%d) is less than corresponding " \
- "bound of input grid (%d).", status, astGetClass( this ), \
- lbnd[ idim ], lbnd_in[ idim ] ); \
- } else if ( ubnd[ idim ] > ubnd_in[ idim ] ) { \
- astError( AST__GBDIN, "astRebin"#X"(%s): Upper bound of " \
- "input region (%d) exceeds corresponding " \
- "bound of input grid (%d).", status, astGetClass( this ), \
- ubnd[ idim ], ubnd_in[ idim ] ); \
- } \
-\
-/* Say which dimension produced the error. */ \
- if ( !astOK ) { \
- astError( AST__GBDIN, "Error in output dimension %d.", status, \
- idim + 1 ); \
- break; \
- } \
- } \
- } \
-\
-/* If OK, loop to determine how many input pixels are to be binned. */ \
- simple = NULL; \
- npix = 1; \
- npix_out = 1; \
- unsimplified_mapping = this; \
- if ( astOK ) { \
- for ( idim = 0; idim < ndim_in; idim++ ) { \
- npix *= ubnd[ idim ] - lbnd[ idim ] + 1; \
- } \
-\
-/* Loop to determine how many pixels the output array contains. */ \
- for ( idim = 0; idim < ndim_out; idim++ ) { \
- npix_out *= ubnd_out[ idim ] - lbnd_out[ idim ] + 1; \
- } \
-\
-/* If there are sufficient pixels to make it worthwhile, simplify the \
- Mapping supplied to improve performance. Otherwise, just clone the \
- Mapping pointer. Note we have already saved a pointer to the original \
- Mapping so that lower-level functions can use it if they need to report \
- an error. */ \
- if ( npix > 1024 ) { \
- simple = astSimplify( this ); \
- } else { \
- simple = astClone( this ); \
- } \
- } \
-\
-/* Report an error if the forward transformation of this simplified \
- Mapping is not defined. */ \
- if ( !astGetTranForward( simple ) && astOK ) { \
- astError( AST__TRNND, "astRebin"#X"(%s): An forward coordinate " \
- "transformation is not defined by the %s supplied.", status, \
- astGetClass( unsimplified_mapping ), \
- astGetClass( unsimplified_mapping ) ); \
- } \
-\
-/* If required, allocate work array to hold the sum of the weights \
- contributing to each output pixel, and initialise it to zero. */ \
- if( wlim > 0.0 ) { \
- work = astMalloc( sizeof( double )*(size_t) npix_out ); \
- if( work ) { \
- w = work; \
- for( ipix_out = 0; ipix_out < npix_out; ipix_out++ ) *(w++) = 0.0; \
- } \
- } else { \
- work = NULL; \
- } \
-\
-/* Initialise the output arrays to hold zeros. */ \
- d = out; \
- if( out_var ) { \
- v = out_var; \
- for( ipix_out = 0; ipix_out < npix_out; ipix_out++, d++, v++ ) { \
- *d = 0; \
- *v = 0; \
- } \
- } else { \
- for( ipix_out = 0; ipix_out < npix_out; ipix_out++, d++ ) { \
- *d = 0; \
- } \
- } \
-\
-/* Perform the rebinning. Note that we pass all gridded data, the \
- spread function and the bad pixel value by means of pointer \
- types that obscure the underlying data type. This is to avoid \
- having to replicate functions unnecessarily for each data \
- type. However, we also pass an argument that identifies the data \
- type we have obscured. */ \
- RebinAdaptively( simple, ndim_in, lbnd_in, ubnd_in, \
- (const void *) in, (const void *) in_var, \
- TYPE_##X, spread, \
- params, flags, tol, maxpix, \
- (const void *) &badval, \
- ndim_out, lbnd_out, ubnd_out, \
- lbnd, ubnd, npix_out, \
- (void *) out, (void *) out_var, work, NULL, status ); \
-\
-/* If required set output pixels bad if they have a total weight less \
- than "wlim". */ \
- if( work ) { \
- w = work; \
- d = out; \
- if( out_var ) { \
- v = out_var; \
- for( ipix_out = 0; ipix_out < npix_out; ipix_out++, d++, w++, v++ ) { \
- if( fabs( *w ) < wlim ) { \
- *d = badval; \
- *v = badval; \
- } \
- } \
- } else { \
- for( ipix_out = 0; ipix_out < npix_out; ipix_out++, d++, w++ ) { \
- if( fabs( *w ) < wlim ) *d = badval; \
- } \
- } \
-\
-/* Free the work array. */ \
- work = astFree( work ); \
- } \
-\
-/* Annul the pointer to the simplified/cloned Mapping. */ \
- simple = astAnnul( simple ); \
-\
-}
-
-/* Expand the above macro to generate a function for each required
- data type. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-MAKE_REBIN(LD,long double,0)
-#endif
-MAKE_REBIN(D,double,0)
-MAKE_REBIN(F,float,0)
-MAKE_REBIN(I,int,1)
-
-/* Undefine the macro. */
-#undef MAKE_REBIN
-
-static void RebinAdaptively( AstMapping *this, int ndim_in,
- const int *lbnd_in, const int *ubnd_in,
- const void *in, const void *in_var,
- DataType type, int spread,
- const double *params, int flags, double tol,
- int maxpix, const void *badval_ptr,
- int ndim_out, const int *lbnd_out,
- const int *ubnd_out, const int *lbnd,
- const int *ubnd, int npix_out, void *out,
- void *out_var, double *work, int *nused, int *status ){
-/*
-* Name:
-* RebinAdaptively
-
-* Purpose:
-* Rebin a section of a data grid adaptively.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void RebinAdaptively( AstMapping *this, int ndim_in,
-* const int *lbnd_in, const int *ubnd_in,
-* const void *in, const void *in_var,
-* DataType type, int spread,
-* const double *params, int flags, double tol,
-* int maxpix, const void *badval_ptr,
-* int ndim_out, const int *lbnd_out,
-* const int *ubnd_out, const int *lbnd,
-* const int *ubnd, int npix_out, void *out,
-* void *out_var, double *work, int *nused, int *status )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function rebins a specified section of a rectangular grid of
-* data (with any number of dimensions) into another rectangular grid
-* (with a possibly different number of dimensions). The coordinate
-* transformation used to convert input pixel coordinates into positions
-* in the output grid is given by the forward transformation of the
-* Mapping which is supplied. Any pixel spreading scheme may be specified
-* for distributing the flux of an input pixel amongst the output
-* pixels.
-*
-* This function is very similar to RebinWithBlocking and RebinSection
-* which lie below it in the calling hierarchy. However, this function
-* also attempts to adapt to the Mapping supplied and to sub-divide the
-* section being rebinned into smaller sections within which a linear
-* approximation to the Mapping may be used. This reduces the number of
-* Mapping evaluations, thereby improving efficiency particularly when
-* complicated Mappings are involved.
-
-* Parameters:
-* this
-* Pointer to a Mapping, whose forward transformation may be
-* used to transform the coordinates of pixels in the input
-* grid into associated positions in the output grid.
-*
-* The number of input coordintes for the Mapping (Nin
-* attribute) should match the value of "ndim_in" (below), and
-* the number of output coordinates (Nout attribute) should
-* match the value of "ndim_out".
-* ndim_in
-* The number of dimensions in the input grid. This should be at
-* least one.
-* lbnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the first
-* pixel in the input data grid along each dimension.
-* ubnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the last
-* pixel in the input data grid along each dimension.
-*
-* Note that "lbnd_in" and "ubnd_in" together define the shape
-* and size of the input data grid, its extent along a
-* particular (i'th) dimension being (ubnd_in[i] - lbnd_in[i] +
-* 1). They also define the input grid's coordinate system, with
-* each pixel being of unit extent along each dimension with
-* integral coordinate values at its centre.
-* in
-* Pointer to the input array of data to be rebinned (with one
-* element for each pixel in the input grid). The numerical type
-* of these data should match the "type" value (below). The
-* storage order should be such that the coordinate of the first
-* dimension varies most rapidly and that of the final dimension
-* least rapidly (i.e. Fortran array storage order is used).
-* in_var
-* An optional pointer to a second array of positive numerical
-* values (with the same size and data type as the "in" array),
-* which represent estimates of the statistical variance
-* associated with each element of the "in" array. If this
-* second array is given (along with the corresponding "out_var"
-* array), then estimates of the variance of the rebinned data
-* will also be returned.
-*
-* If no variance estimates are required, a NULL pointer should
-* be given.
-* type
-* A value taken from the "DataType" enum, which specifies the
-* data type of the input and output arrays containing the
-* gridded data (and variance) values.
-* spread
-* A value selected from a set of pre-defined macros to identify
-* which pixel spread function should be used.
-* params
-* Pointer to an optional array of parameters that may be passed
-* to the pixel spread algorithm, if required. If no parameters
-* are required, a NULL pointer should be supplied.
-* flags
-* The bitwise OR of a set of flag values which provide additional
-* control over the resampling operation.
-* tol
-* The maximum permitted positional error in transforming input
-* pixel positions into the output grid in order to rebin
-* it. This should be expressed as a displacement in pixels in
-* the output grid's coordinate system. If the Mapping's forward
-* transformation can be approximated by piecewise linear functions
-* to this accuracy, then such functions may be used instead of the
-* Mapping in order to improve performance. Otherwise, every input
-* pixel position will be transformed individually using the Mapping.
-*
-* If linear approximation is not required, a "tol" value of
-* zero may be given. This will ensure that the Mapping is used
-* without any approximation.
-* maxpix
-* A value which specifies the largest scale size on which to
-* search for non-linearities in the Mapping supplied. This
-* value should be expressed as a number of pixels in the input
-* grid. The function will break the input section specified
-* into smaller sub-sections (if necessary), each no larger than
-* "maxpix" pixels in any dimension, before it attempts to
-* approximate the Mapping by a linear function over each
-* sub-section.
-*
-* If the value given is larger than the largest dimension of
-* the input section (the normal recommendation), the function
-* will initially search for non-linearity on a scale determined
-* by the size of the input section. This is almost always
-* satisfactory. Very occasionally, however, a Mapping may
-* appear linear on this scale but nevertheless have smaller
-* irregularities (e.g. "holes") in it. In such cases, "maxpix"
-* may be set to a suitably smaller value so as to ensure this
-* non-linearity is not overlooked. Typically, a value of 50 to
-* 100 pixels might be suitable and should have little effect on
-* performance.
-*
-* If too small a value is given, however, it will have the
-* effect of preventing linear approximation occurring at all
-* (equivalent to setting "tol" to zero). Although this may
-* degrade performance, accurate results will still be obtained.
-* badval_ptr
-* If the AST__USEBAD flag is set (above), this parameter is a
-* pointer to a value which is used to identify bad data and/or
-* variance values in the input array(s). The referenced value's
-* data type must match that of the "in" (and "in_var")
-* arrays. The same value will also be used to flag any output
-* array elements for which rebinned values could not be
-* obtained. The output arrays(s) may be flagged with this
-* value whether or not the AST__USEBAD flag is set (the
-* function return value indicates whether any such values have
-* been produced).
-* ndim_out
-* The number of dimensions in the output grid. This should be
-* at least one.
-* lbnd_out
-* Pointer to an array of integers, with "ndim_out" elements.
-* This should give the coordinates of the centre of the first
-* pixel in the output data grid along each dimension.
-* ubnd_out
-* Pointer to an array of integers, with "ndim_out" elements.
-* This should give the coordinates of the centre of the last
-* pixel in the output data grid along each dimension.
-*
-* Note that "lbnd_out" and "ubnd_out" together define the shape
-* and size of the output data grid in the same way as "lbnd_in"
-* and "ubnd_in" define the shape and size of the input grid
-* (see above).
-* lbnd
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the first pixel in the
-* section of the input data grid which is to be rebinned.
-* ubnd
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the last pixel in the
-* section of the input data grid which is to be rebinned.
-*
-* Note that "lbnd" and "ubnd" define the shape and position of
-* the section of the input grid which is to be rebinned. This section
-* should lie wholly within the extent of the input grid (as defined
-* by the "lbnd_out" and "ubnd_out" arrays). Regions of the input
-* grid lying outside this section will be ignored.
-* npix_out
-* The number of pixels in the output array.
-* out
-* Pointer to an array with the same data type as the "in"
-* array, into which the rebinned data will be returned. The
-* storage order should be such that the coordinate of the first
-* dimension varies most rapidly and that of the final dimension
-* least rapidly (i.e. Fortran array storage order is used).
-* out_var
-* An optional pointer to an array with the same data type and
-* size as the "out" array, into which variance estimates for
-* the rebinned values may be returned. This array will only be
-* used if the "in_var" array has been given.
-*
-* If no output variance estimates are required, a NULL pointer
-* should be given.
-* work
-* An optional pointer to a double array with the same size as
-* the "out" array. The contents of this array (if supplied) are
-* incremented by the accumulated weights assigned to each output pixel.
-* If no accumulated weights are required, a NULL pointer should be
-* given.
-* nused
-* An optional pointer to an int which will be incremented by the
-* number of input values pasted into the output array. Ignored if NULL.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- double *flbnd; /* Array holding floating point lower bounds */
- double *fubnd; /* Array holding floating point upper bounds */
- double *linear_fit; /* Pointer to array of fit coefficients */
- int *hi; /* Pointer to array of section upper bounds */
- int *lo; /* Pointer to array of section lower bounds */
- int coord_in; /* Loop counter for input coordinates */
- int dim; /* Output section dimension size */
- int dimx; /* Dimension with maximum section extent */
- int divide; /* Sub-divide the output section? */
- int i; /* Loop count */
- int isLinear; /* Is the transformation linear? */
- int mxdim; /* Largest output section dimension size */
- int npix; /* Number of pixels in output section */
- int npoint; /* Number of points for obtaining a fit */
- int nvertex; /* Number of vertices of output section */
- int toobig; /* Section too big (must sub-divide)? */
- int toosmall; /* Section too small to sub-divide? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Further initialisation. */
- npix = 1;
- mxdim = 0;
- dimx = 1;
- nvertex = 1;
-
-/* Loop through the input grid dimensions. */
- for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
-
-/* Obtain the extent in each dimension of the input section which is
- to be rebinned, and calculate the total number of pixels it contains. */
- dim = ubnd[ coord_in ] - lbnd[ coord_in ] + 1;
- npix *= dim;
-
-/* Find the maximum dimension size of this input section and note which
- dimension has this size. */
- if ( dim > mxdim ) {
- mxdim = dim;
- dimx = coord_in;
- }
-
-/* Calculate how many vertices the output section has. */
- nvertex *= 2;
- }
-
-/* Calculate how many sample points will be needed (by the astLinearApprox
- function) to obtain a linear fit to the Mapping's forward transformation. */
- npoint = 1 + 4 * ndim_in + 2 * nvertex;
-
-/* If the number of pixels in the input section is not at least 4
- times this number, we will probably not save significant time by
- attempting to obtain a linear fit, so note that the input section
- is too small. */
- toosmall = ( npix < ( 4 * npoint ) );
-
-/* Note if the maximum dimension of the input section exceeds the
- user-supplied scale factor. */
- toobig = ( maxpix < mxdim );
-
-/* Assume the Mapping is significantly non-linear before deciding
- whether to sub-divide the output section. */
- linear_fit = NULL;
-
-/* If the output section is too small to be worth obtaining a linear
- fit, or if the accuracy tolerance is zero, we will not
- sub-divide. This means that the Mapping will be used to transform
- each pixel's coordinates and no linear approximation will be
- used. */
- if ( toosmall || ( tol == 0.0 ) ) {
- divide = 0;
-
-/* Otherwise, if the largest input section dimension exceeds the
- scale length given, we will sub-divide. This offers the possibility
- of obtaining a linear approximation to the Mapping over a reduced
- range of input coordinates (which will be handled by a recursive
- invocation of this function). */
- } else if ( toobig ) {
- divide = 1;
-
-/* If neither of the above apply, then attempt to fit a linear
- approximation to the Mapping's forward transformation over the
- range of coordinates covered by the input section. We need to
- temporarily copy the integer bounds into floating point arrays to
- use astLinearApprox. */
- } else {
-
-/* Allocate memory for floating point bounds and for the coefficient array */
- flbnd = astMalloc( sizeof( double )*(size_t) ndim_in );
- fubnd = astMalloc( sizeof( double )*(size_t) ndim_in );
- linear_fit = astMalloc( sizeof( double )*
- (size_t) ( ndim_out*( ndim_in + 1 ) ) );
- if( astOK ) {
-
-/* Copy the bounds into these arrays */
- for( i = 0; i < ndim_in; i++ ) {
- flbnd[ i ] = (double) lbnd[ i ];
- fubnd[ i ] = (double) ubnd[ i ];
- }
-
-/* Get the linear approximation to the forward transformation. */
- isLinear = astLinearApprox( this, flbnd, fubnd, tol, linear_fit );
-
-/* Free the coeff array if the inverse transformation is not linear. */
- if( !isLinear ) linear_fit = astFree( linear_fit );
-
- } else {
- linear_fit = astFree( linear_fit );
- }
-
-/* Free resources */
- flbnd = astFree( flbnd );
- fubnd = astFree( fubnd );
-
-/* If a linear fit was obtained, we will use it and therefore do not
- wish to sub-divide further. Otherwise, we sub-divide in the hope
- that this may result in a linear fit next time. */
- divide = !linear_fit;
- }
-
-/* If no sub-division is required, perform rebinning (in a
- memory-efficient manner, since the section we are rebinning might
- still be very large). This will use the linear fit, if obtained
- above. */
- if ( astOK ) {
- if ( !divide ) {
- RebinWithBlocking( this, linear_fit, ndim_in, lbnd_in, ubnd_in,
- in, in_var, type, spread, params, flags,
- badval_ptr, ndim_out, lbnd_out, ubnd_out, lbnd,
- ubnd, npix_out, out, out_var, work, nused, status );
-
-/* Otherwise, allocate workspace to perform the sub-division. */
- } else {
- lo = astMalloc( sizeof( int ) * (size_t) ndim_in );
- hi = astMalloc( sizeof( int ) * (size_t) ndim_in );
- if ( astOK ) {
-
-/* Initialise the bounds of a new input section to match the original
- input section. */
- for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
- lo[ coord_in ] = lbnd[ coord_in ];
- hi[ coord_in ] = ubnd[ coord_in ];
- }
-
-/* Replace the upper bound of the section's largest dimension with the
- mid-point of the section along this dimension, rounded downwards. */
- hi[ dimx ] =
- (int) floor( 0.5 * (double) ( lbnd[ dimx ] + ubnd[ dimx ] ) );
-
-/* Rebin the resulting smaller section using a recursive invocation
- of this function. */
- RebinAdaptively( this, ndim_in, lbnd_in, ubnd_in, in, in_var,
- type, spread, params, flags, tol, maxpix,
- badval_ptr, ndim_out, lbnd_out, ubnd_out,
- lo, hi, npix_out, out, out_var, work, nused, status );
-
-/* Now set up a second section which covers the remaining half of the
- original input section. */
- lo[ dimx ] = hi[ dimx ] + 1;
- hi[ dimx ] = ubnd[ dimx ];
-
-/* If this section contains pixels, resample it in the same way,
- summing the returned values. */
- if ( lo[ dimx ] <= hi[ dimx ] ) {
- RebinAdaptively( this, ndim_in, lbnd_in, ubnd_in, in, in_var,
- type, spread, params, flags, tol, maxpix,
- badval_ptr, ndim_out, lbnd_out, ubnd_out,
- lo, hi, npix_out, out, out_var, work, nused, status );
- }
- }
-
-/* Free the workspace. */
- lo = astFree( lo );
- hi = astFree( hi );
- }
- }
-
-/* If coefficients for a linear fit were obtained, then free the space
- they occupy. */
- if ( linear_fit ) linear_fit = astFree( linear_fit );
-}
-
-static void RebinSection( AstMapping *this, const double *linear_fit,
- int ndim_in, const int *lbnd_in, const int *ubnd_in,
- const void *in, const void *in_var, DataType type,
- int spread, const double *params, int flags,
- const void *badval_ptr, int ndim_out,
- const int *lbnd_out, const int *ubnd_out,
- const int *lbnd, const int *ubnd, int npix_out,
- void *out, void *out_var, double *work,
- int *nused, int *status ) {
-/*
-* Name:
-* RebinSection
-
-* Purpose:
-* Rebin a section of a data grid.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void RebinSection( AstMapping *this, const double *linear_fit,
-* int ndim_in, const int *lbnd_in, const int *ubnd_in,
-* const void *in, const void *in_var, DataType type,
-* int spread, const double *params, int flags,
-* const void *badval_ptr, int ndim_out,
-* const int *lbnd_out, const int *ubnd_out,
-* const int *lbnd, const int *ubnd, int npix_out,
-* void *out, void *out_var, double *work,
-* int *nused )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function rebins a specified section of a rectangular grid of
-* data (with any number of dimensions) into another rectangular grid
-* (with a possibly different number of dimensions). The coordinate
-* transformation used to convert input pixel coordinates into positions
-* in the output grid is given by the forward transformation of the
-* Mapping which is supplied or, alternatively, by a linear approximation
-* fitted to a Mapping's forward transformation. Any pixel spreading scheme
-* may be specified for distributing the flux of an input pixel amongst
-* the output pixels.
-
-* Parameters:
-* this
-* Pointer to a Mapping, whose forward transformation may be
-* used to transform the coordinates of pixels in the input
-* grid into associated positions in the output grid.
-*
-* The number of input coordintes for the Mapping (Nin
-* attribute) should match the value of "ndim_in" (below), and
-* the number of output coordinates (Nout attribute) should
-* match the value of "ndim_out".
-* linear_fit
-* Pointer to an optional array of double which contains the
-* coefficients of a linear fit which approximates the above
-* Mapping's forward coordinate transformation. If this is
-* supplied, it will be used in preference to the above Mapping
-* when transforming coordinates. This may be used to enhance
-* performance in cases where evaluation of the Mapping's
-* forward transformation is expensive. If no linear fit is
-* available, a NULL pointer should be supplied.
-*
-* The way in which the fit coefficients are stored in this
-* array and the number of array elements are as defined by the
-* astLinearApprox function.
-* ndim_in
-* The number of dimensions in the input grid. This should be at
-* least one.
-* lbnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the first
-* pixel in the input data grid along each dimension.
-* ubnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the last
-* pixel in the input data grid along each dimension.
-*
-* Note that "lbnd_in" and "ubnd_in" together define the shape
-* and size of the input data grid, its extent along a
-* particular (i'th) dimension being (ubnd_in[i] - lbnd_in[i] +
-* 1). They also define the input grid's coordinate system, with
-* each pixel being of unit extent along each dimension with
-* integral coordinate values at its centre.
-* in
-* Pointer to the input array of data to be rebinned (with one
-* element for each pixel in the input grid). The numerical type
-* of these data should match the "type" value (below). The
-* storage order should be such that the coordinate of the first
-* dimension varies most rapidly and that of the final dimension
-* least rapidly (i.e. Fortran array storage order is used).
-* in_var
-* An optional pointer to a second array of positive numerical
-* values (with the same size and data type as the "in" array),
-* which represent estimates of the statistical variance
-* associated with each element of the "in" array. If this
-* second array is given (along with the corresponding "out_var"
-* array), then estimates of the variance of the rebinned data
-* will also be returned.
-*
-* If no variance estimates are required, a NULL pointer should
-* be given.
-* type
-* A value taken from the "DataType" enum, which specifies the
-* data type of the input and output arrays containing the
-* gridded data (and variance) values.
-* spread
-* A value selected from a set of pre-defined macros to identify
-* which pixel spread function should be used.
-* params
-* Pointer to an optional array of parameters that may be passed
-* to the pixel spread algorithm, if required. If no parameters
-* are required, a NULL pointer should be supplied.
-* flags
-* The bitwise OR of a set of flag values which provide additional
-* control over the resampling operation.
-* badval_ptr
-* If the AST__USEBAD flag is set (above), this parameter is a
-* pointer to a value which is used to identify bad data and/or
-* variance values in the input array(s). The referenced value's
-* data type must match that of the "in" (and "in_var")
-* arrays. The same value will also be used to flag any output
-* array elements for which rebinned values could not be
-* obtained. The output arrays(s) may be flagged with this
-* value whether or not the AST__USEBAD flag is set (the
-* function return value indicates whether any such values have
-* been produced).
-* ndim_out
-* The number of dimensions in the output grid. This should be
-* at least one.
-* lbnd_out
-* Pointer to an array of integers, with "ndim_out" elements.
-* This should give the coordinates of the centre of the first
-* pixel in the output data grid along each dimension.
-* ubnd_out
-* Pointer to an array of integers, with "ndim_out" elements.
-* This should give the coordinates of the centre of the last
-* pixel in the output data grid along each dimension.
-*
-* Note that "lbnd_out" and "ubnd_out" together define the shape
-* and size of the output data grid in the same way as "lbnd_in"
-* and "ubnd_in" define the shape and size of the input grid
-* (see above).
-* lbnd
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the first pixel in the
-* section of the input data grid which is to be rebinned.
-* ubnd
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the last pixel in the
-* section of the input data grid which is to be rebinned.
-*
-* Note that "lbnd" and "ubnd" define the shape and position of
-* the section of the input grid which is to be rebinned. This section
-* should lie wholly within the extent of the input grid (as defined
-* by the "lbnd_out" and "ubnd_out" arrays). Regions of the input
-* grid lying outside this section will be ignored.
-* npix_out
-* The number of pixels in the output array.
-* out
-* Pointer to an array with the same data type as the "in"
-* array, into which the rebinned data will be returned. The
-* storage order should be such that the coordinate of the first
-* dimension varies most rapidly and that of the final dimension
-* least rapidly (i.e. Fortran array storage order is used).
-* out_var
-* An optional pointer to an array with the same data type and
-* size as the "out" array, into which variance estimates for
-* the rebinned values may be returned. This array will only be
-* used if the "in_var" array has been given.
-*
-* If no output variance estimates are required, a NULL pointer
-* should be given.
-* work
-* An optional pointer to a double array with the same size as
-* the "out" array. The contents of this array (if supplied) are
-* incremented by the accumulated weights assigned to each output pixel.
-* If no accumulated weights are required, a NULL pointer should be
-* given.
-* nused
-* An optional pointer to an int which will be incremented by the
-* number of input values pasted into the output array. Ignored if NULL.
-
-* Notes:
-* - This function does not take steps to limit memory usage if the
-* grids supplied are large. To resample large grids in a more
-* memory-efficient way, the ResampleWithBlocking function should
-* be used.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Thread-specific data */
- AstPointSet *pset_in; /* Input PointSet for transformation */
- AstPointSet *pset_out; /* Output PointSet for transformation */
- const double *grad; /* Pointer to gradient matrix of linear fit */
- const double *zero; /* Pointer to zero point array of fit */
- double **ptr_in; /* Pointer to input PointSet coordinates */
- double **ptr_out; /* Pointer to output PointSet coordinates */
- double *accum; /* Pointer to array of accumulated sums */
- double x1; /* Interim x coordinate value */
- double xx1; /* Initial x coordinate value */
- double y1; /* Interim y coordinate value */
- double yy1; /* Initial y coordinate value */
- int *dim; /* Pointer to array of output pixel indices */
- int *offset; /* Pointer to array of output pixel offsets */
- int *stride; /* Pointer to array of output grid strides */
- int coord_in; /* Loop counter for input dimensions */
- int coord_out; /* Loop counter for output dimensions */
- int done; /* All pixel indices done? */
- int i1; /* Interim offset into "accum" array */
- int i2; /* Final offset into "accum" array */
- int idim; /* Loop counter for dimensions */
- int ix; /* Loop counter for output x coordinate */
- int iy; /* Loop counter for output y coordinate */
- int neighb; /* Number of neighbouring pixels */
- int npoint; /* Number of output points (pixels) */
- int off1; /* Interim pixel offset into output array */
- int off2; /* Interim pixel offset into output array */
- int off; /* Final pixel offset into output array */
- int point; /* Counter for output points (pixels ) */
- int s; /* Temporary variable for strides */
- const double *par; /* Pointer to parameter array */
- double fwhm; /* Full width half max. of gaussian */
- double lpar[ 1 ]; /* Local parameter array */
- void (* kernel)( double, const double [], int, double *, int * ); /* Kernel fn. */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to a structure holding thread-specific global data values */
- astGET_GLOBALS(this);
-
-/* Further initialisation. */
- pset_in = NULL;
- ptr_in = NULL;
- ptr_out = NULL;
- pset_out = NULL;
- neighb = 0;
- kernel = NULL;
-
-/* Calculate the number of input points, as given by the product of
- the input grid dimensions. */
- for ( npoint = 1, coord_in = 0; coord_in < ndim_in; coord_in++ ) {
- npoint *= ubnd[ coord_in ] - lbnd[ coord_in ] + 1;
- }
-
-/* Allocate workspace. */
- offset = astMalloc( sizeof( int ) * (size_t) npoint );
- stride = astMalloc( sizeof( int ) * (size_t) ndim_in );
- if ( astOK ) {
-
-/* Calculate the stride for each input grid dimension. */
- off = 0;
- s = 1;
- for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
- stride[ coord_in ] = s;
- s *= ubnd_in[ coord_in ] - lbnd_in[ coord_in ] + 1;
- }
-
-/* A linear fit to the Mapping is available. */
-/* ========================================= */
- if ( linear_fit ) {
-
-/* If a linear fit to the Mapping has been provided, then obtain
- pointers to the array of gradients and zero-points comprising the
- fit. */
- grad = linear_fit + ndim_out;
- zero = linear_fit;
-
-/* Create a PointSet to hold the output grid coordinates and obtain an
- array of pointers to its coordinate data. */
- pset_out = astPointSet( npoint, ndim_out, "", status );
- ptr_out = astGetPoints( pset_out );
- if ( astOK ) {
-
-/* Initialise the count of input points. */
- point = 0;
-
-/* Handle the 1-dimensional case optimally. */
-/* ---------------------------------------- */
- if ( ( ndim_in == 1 ) && ( ndim_out == 1 ) ) {
-
-/* Loop through the pixels of the input grid and transform their x
- coordinates into the output grid's coordinate system using the
- linear fit supplied. Store the results in the PointSet created
- above. */
- off = lbnd[ 0 ] - lbnd_in[ 0 ];
- xx1 = zero[ 0 ] + grad[ 0 ] * (double) lbnd[ 0 ];
-
- for ( ix = lbnd[ 0 ]; ix <= ubnd[ 0 ]; ix++ ) {
- ptr_out[ 0 ][ point ] = xx1;
- xx1 += grad[ 0 ];
- offset[ point++ ] = off++;
- }
-
-/* Handle the 2-dimensional case optimally. */
-/* ---------------------------------------- */
- } else if ( ( ndim_in == 2 ) && ( ndim_out == 2 ) ) {
-
-/* Loop through the range of y coordinates in the input grid and
- calculate interim values of the output coordinates using the linear
- fit supplied. */
- x1 = zero[ 0 ] + grad[ 1 ] * (double) ( lbnd[ 1 ] - 1 );
- y1 = zero[ 1 ] + grad[ 3 ] * (double) ( lbnd[ 1 ] - 1 );
- off1 = stride[ 1 ] * ( lbnd[ 1 ] - lbnd_in[ 1 ] - 1 ) - lbnd_in[ 0 ];
- for ( iy = lbnd[ 1 ]; iy <= ubnd[ 1 ]; iy++ ) {
- x1 += grad[ 1 ];
- y1 += grad[ 3 ];
-
-/* Also calculate an interim pixel offset into the input array. */
- off1 += stride[ 1 ];
-
-/* Now loop through the range of input x coordinates and calculate
- the final values of the input coordinates, storing the results in
- the PointSet created above. */
- xx1 = x1 + grad[ 0 ] * (double) lbnd[ 0 ];
- yy1 = y1 + grad[ 2 ] * (double) lbnd[ 0 ];
- off = off1 + lbnd[ 0 ];
- for ( ix = lbnd[ 0 ]; ix <= ubnd[ 0 ]; ix++ ) {
- ptr_out[ 0 ][ point ] = xx1;
- xx1 += grad[ 0 ];
- ptr_out[ 1 ][ point ] = yy1;
- yy1 += grad[ 2 ];
-
-/* Also calculate final pixel offsets into the input array. */
- offset[ point++ ] = off++;
- }
- }
-
-/* Handle other numbers of dimensions. */
-/* ----------------------------------- */
- } else {
-
-/* Allocate workspace. */
- accum = astMalloc( sizeof( double ) *
- (size_t) ( ndim_in * ndim_out ) );
- dim = astMalloc( sizeof( int ) * (size_t) ndim_in );
- if ( astOK ) {
-
-/* Initialise an array of pixel indices for the input grid which refer to the
- first pixel which we will rebin. Also calculate the offset of this pixel
- within the input array. */
- off = 0;
- for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
- dim[ coord_in ] = lbnd[ coord_in ];
- off += stride[ coord_in ] *
- ( dim[ coord_in ] - lbnd_in[ coord_in ] );
- }
-
-/* To calculate each output grid coordinate we must perform a matrix
- multiply on the input grid coordinates (using the gradient matrix)
- and then add the zero points. However, since we will usually only
- be altering one input coordinate at a time (the least
- significant), we can avoid the full matrix multiply by accumulating
- partial sums for the most significant input coordinates and only
- altering those sums which need to change each time. The zero points
- never change, so we first fill the "most significant" end of the
- "accum" array with these. */
- for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
- accum[ ( coord_out + 1 ) * ndim_in - 1 ] =
- zero[ coord_out ];
- }
- coord_in = ndim_in - 1;
-
-/* Now loop to process each input pixel. */
- for ( done = 0; !done; point++ ) {
-
-/* To generate the output coordinate that corresponds to the current
- input pixel, we work down from the most significant dimension
- whose index has changed since the previous pixel we considered
- (given by "coord_in"). For each affected dimension, we accumulate
- in "accum" the matrix sum (including the zero point) for that
- dimension and all higher input dimensions. We must accumulate a
- separate set of sums for each output coordinate we wish to
- produce. (Note that for the first pixel we process, all dimensions
- are considered "changed", so we start by initialising the whole
- "accum" array.) */
- for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
-/*
- ptr_out[ coord_out ][ point ] = zero[ coord_out ];
- for ( idim = 0; idim < ndim_in; idim++ ) {
- ptr_out[ coord_out ][ point ] +=
- grad[ idim + coord_out*ndim_in ] *
- dim[ idim ];
- }
-*/
-
- i1 = coord_out * ndim_in;
- for ( idim = coord_in; idim >= 1; idim-- ) {
- i2 = i1 + idim;
- accum[ i2 - 1 ] = accum[ i2 ] +
- dim[ idim ] * grad[ i2 ];
- }
-
-/* The output coordinate for each dimension is given by the accumulated
- sum for input dimension zero (giving the sum over all input
- dimensions). We do not store this in the "accum" array, but assign
- the result directly to the coordinate array of the PointSet created
- earlier. */
- ptr_out[ coord_out ][ point ] = accum[ i1 ] +
- dim[ 0 ] * grad[ i1 ];
- }
-
-/* Store the offset of the current pixel in the input array. */
- offset[ point ] = off;
-
-/* Now update the array of pixel indices to refer to the next input pixel. */
- coord_in = 0;
- do {
-
-/* The least significant index which currently has less than its maximum
- value is incremented by one. The offset into the input array is updated
- accordingly. */
- if ( dim[ coord_in ] < ubnd[ coord_in ] ) {
- dim[ coord_in ]++;
- off += stride[ coord_in ];
- break;
-
-/* Any less significant indices which have reached their maximum value
- are returned to their minimum value and the input pixel offset is
- decremented appropriately. */
- } else {
- dim[ coord_in ] = lbnd[ coord_in ];
- off -= stride[ coord_in ] *
- ( ubnd[ coord_in ] - lbnd[ coord_in ] );
-
-/* All the output pixels have been processed once the most significant
- pixel index has been returned to its minimum value. */
- done = ( ++coord_in == ndim_in );
- }
- } while ( !done );
- }
- }
-
-/* Free the workspace. */
- accum = astFree( accum );
- dim = astFree( dim );
- }
- }
-
-/* No linear fit to the Mapping is available. */
-/* ========================================== */
- } else {
-
-/* Create a PointSet to hold the coordinates of the input pixels and
- obtain a pointer to its coordinate data. */
- pset_in = astPointSet( npoint, ndim_in, "", status );
- ptr_in = astGetPoints( pset_in );
- if ( astOK ) {
-
-/* Initialise the count of input points. */
- point = 0;
-
-/* Handle the 1-dimensional case optimally. */
-/* ---------------------------------------- */
- if ( ndim_in == 1 && ndim_out == 1 ) {
-
-/* Loop through the required range of input x coordinates, assigning
- the coordinate values to the PointSet created above. Also store a
- pixel offset into the input array. */
- for ( ix = lbnd[ 0 ]; ix <= ubnd[ 0 ]; ix++ ) {
- ptr_in[ 0 ][ point ] = (double) ix;
- offset[ point++ ] = ix - lbnd_in[ 0 ];
- }
-
-/* Handle the 2-dimensional case optimally. */
-/* ---------------------------------------- */
- } else if ( ndim_in == 2 && ndim_out == 2) {
-
-/* Loop through the required range of input y coordinates,
- calculating an interim pixel offset into the input array. */
- off1 = stride[ 1 ] * ( lbnd[ 1 ] - lbnd_in[ 1 ] - 1 )
- - lbnd_in[ 0 ];
- for ( iy = lbnd[ 1 ]; iy <= ubnd[ 1 ]; iy++ ) {
- off1 += stride[ 1 ];
-
-/* Loop through the required range of input x coordinates, assigning
- the coordinate values to the PointSet created above. Also store a
- final pixel offset into the input array. */
- off2 = off1 + lbnd[ 0 ];
- for ( ix = lbnd[ 0 ]; ix <= ubnd[ 0 ]; ix++ ) {
- ptr_in[ 0 ][ point ] = (double) ix;
- ptr_in[ 1 ][ point ] = (double) iy;
- offset[ point++ ] = off2++;
- }
- }
-
-/* Handle other numbers of dimensions. */
-/* ----------------------------------- */
- } else {
-
-/* Allocate workspace. */
- dim = astMalloc( sizeof( int ) * (size_t) ndim_in );
- if ( astOK ) {
-
-/* Initialise an array of pixel indices for the input grid which
- refer to the first pixel to be rebinned. Also calculate the offset
- of this pixel within the input array. */
- off = 0;
- for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
- dim[ coord_in ] = lbnd[ coord_in ];
- off += stride[ coord_in ] *
- ( dim[ coord_in ] - lbnd_in[ coord_in ] );
- }
-
-/* Loop to generate the coordinates of each input pixel. */
- for ( done = 0; !done; point++ ) {
-
-/* Copy each pixel's coordinates into the PointSet created above. */
- for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
- ptr_in[ coord_in ][ point ] =
- (double) dim[ coord_in ];
- }
-
-/* Store the offset of the pixel in the input array. */
- offset[ point ] = off;
-
-/* Now update the array of pixel indices to refer to the next input
- pixel. */
- coord_in = 0;
- do {
-
-/* The least significant index which currently has less than its
- maximum value is incremented by one. The offset into the input
- array is updated accordingly. */
- if ( dim[ coord_in ] < ubnd[ coord_in ] ) {
- dim[ coord_in ]++;
- off += stride[ coord_in ];
- break;
-
-/* Any less significant indices which have reached their maximum value
- are returned to their minimum value and the input pixel offset is
- decremented appropriately. */
- } else {
- dim[ coord_in ] = lbnd[ coord_in ];
- off -= stride[ coord_in ] *
- ( ubnd[ coord_in ] - lbnd[ coord_in ] );
-
-/* All the input pixels have been processed once the most significant
- pixel index has been returned to its minimum value. */
- done = ( ++coord_in == ndim_in );
- }
- } while ( !done );
- }
- }
-
-/* Free the workspace. */
- dim = astFree( dim );
- }
-
-/* When all the input pixel coordinates have been generated, use the
- Mapping's forward transformation to generate the output coordinates
- from them. Obtain an array of pointers to the resulting coordinate
- data. */
- pset_out = astTransform( this, pset_in, 1, NULL );
- ptr_out = astGetPoints( pset_out );
- }
-
-/* Annul the PointSet containing the input coordinates. */
- pset_in = astAnnul( pset_in );
- }
- }
-
-
-/* Rebin the input grid. */
-/* ------------------------ */
- if( astOK ) {
-
-/* Identify the pixel spreading scheme to be used. */
-/* Nearest pixel. */
-/* -------------- */
- switch ( spread ) {
- case AST__NEAREST:
-
-/* Define a macro to use a "case" statement to invoke the
- nearest-pixel spreading function appropriate to a given data
- type. */
-#define CASE_NEAREST(X,Xtype) \
- case ( TYPE_##X ): \
- SpreadNearest##X( ndim_out, lbnd_out, ubnd_out, \
- (Xtype *) in, (Xtype *) in_var, \
- npoint, offset, \
- (const double *const *) ptr_out, \
- flags, *( (Xtype *) badval_ptr ), \
- npix_out, (Xtype *) out, \
- (Xtype *) out_var, work, nused, status ); \
- break;
-
-/* Use the above macro to invoke the appropriate function. */
- switch ( type ) {
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
- CASE_NEAREST(LD,long double)
-#endif
- CASE_NEAREST(D,double)
- CASE_NEAREST(F,float)
- CASE_NEAREST(I,int)
-
- case ( TYPE_L ): break;
- case ( TYPE_B ): break;
- case ( TYPE_S ): break;
- case ( TYPE_UL ): break;
- case ( TYPE_UI ): break;
- case ( TYPE_US ): break;
- case ( TYPE_UB ): break;
- }
- break;
-
-/* Undefine the macro. */
-#undef CASE_NEAREST
-
-/* Linear spreading. */
-/* ----------------- */
-/* Note this is also the default if zero is given. */
- case AST__LINEAR:
- case 0:
-
-/* Define a macro to use a "case" statement to invoke the linear
- spreading function appropriate to a given data type. */
-#define CASE_LINEAR(X,Xtype) \
- case ( TYPE_##X ): \
- SpreadLinear##X( ndim_out, lbnd_out, ubnd_out,\
- (Xtype *) in, (Xtype *) in_var, \
- npoint, offset, \
- (const double *const *) ptr_out, \
- flags, *( (Xtype *) badval_ptr ), \
- npix_out, (Xtype *) out, \
- (Xtype *) out_var, work, nused, status ); \
- break;
-
-/* Use the above macro to invoke the appropriate function. */
- switch ( type ) {
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
- CASE_LINEAR(LD,long double)
-#endif
- CASE_LINEAR(D,double)
- CASE_LINEAR(F,float)
- CASE_LINEAR(I,int)
-
- case ( TYPE_L ): break;
- case ( TYPE_B ): break;
- case ( TYPE_S ): break;
- case ( TYPE_UL ): break;
- case ( TYPE_UI ): break;
- case ( TYPE_US ): break;
- case ( TYPE_UB ): break;
- }
- break;
-
-/* Undefine the macro. */
-#undef CASE_LINEAR
-
-/* Spreading using a 1-d kernel. */
-/* ----------------------------- */
- case AST__SINC:
- case AST__SINCCOS:
- case AST__SINCGAUSS:
- case AST__GAUSS:
- case AST__SINCSINC:
- case AST__SOMB:
- case AST__SOMBCOS:
-
-/* Obtain a pointer to the appropriate 1-d kernel function (either
- internal or user-defined) and set up any parameters it may
- require. */
- par = NULL;
- switch ( spread ) {
-
-/* sinc(pi*x) */
-/* ---------- */
-/* Assign the kernel function. */
- case AST__SINC:
- kernel = Sinc;
-
-/* Calculate the number of neighbouring pixels to use. */
- neighb = (int) floor( params[ 0 ] + 0.5 );
- if ( neighb <= 0 ) {
- neighb = 2;
- } else {
- neighb = MaxI( 1, neighb, status );
- }
- break;
-
-/* somb(pi*x) */
-/* ---------- */
-/* Assign the kernel function. */
- case AST__SOMB:
- kernel = Somb;
-
-/* Calculate the number of neighbouring pixels to use. */
- neighb = (int) floor( params[ 0 ] + 0.5 );
- if ( neighb <= 0 ) {
- neighb = 2;
- } else {
- neighb = MaxI( 1, neighb, status );
- }
- break;
-
-/* sinc(pi*x)*cos(k*pi*x) */
-/* ---------------------- */
-/* Assign the kernel function. */
- case AST__SINCCOS:
- kernel = SincCos;
-
-/* Store the required value of "k" in a local parameter array and pass
- this array to the kernel function. */
- lpar[ 0 ] = 0.5 / MaxD( 1.0, params[ 1 ], status );
- par = lpar;
-
-/* Obtain the number of neighbouring pixels to use. If this is zero or
- less, the number will be calculated automatically below. */
- neighb = (int) floor( params[ 0 ] + 0.5 );
- if ( neighb <= 0 ) neighb = INT_MAX;
-
-/* Calculate the maximum number of neighbouring pixels required by the
- width of the kernel, and use this value if preferable. */
- neighb = MinI( neighb,
- (int) ceil( MaxD( 1.0, params[ 1 ], status ) ), status );
- break;
-
-/* sinc(pi*x)*exp(-k*x*x) */
-/* ---------------------- */
-/* Assign the kernel function. */
- case AST__SINCGAUSS:
- kernel = SincGauss;
-
-/* Constrain the full width half maximum of the gaussian factor. */
- fwhm = MaxD( 0.1, params[ 1 ], status );
-
-/* Store the required value of "k" in a local parameter array and pass
- this array to the kernel function. */
- lpar[ 0 ] = 4.0 * log( 2.0 ) / ( fwhm * fwhm );
- par = lpar;
-
-/* Obtain the number of neighbouring pixels to use. If this is zero or
- less, use the number of neighbouring pixels required by the width
- of the kernel (out to where the gaussian term falls to 1% of its
- peak value). */
- neighb = (int) floor( params[ 0 ] + 0.5 );
- if ( neighb <= 0 ) neighb = (int) ceil( sqrt( -log( 0.01 ) /
- lpar[ 0 ] ) );
- break;
-
-/* exp(-k*x*x) */
-/* ----------- */
-/* Assign the kernel function. */
- case AST__GAUSS:
- kernel = Gauss;
-
-/* Constrain the full width half maximum of the gaussian. */
- fwhm = MaxD( 0.1, params[ 1 ], status );
-
-/* Store the required value of "k" in a local parameter array and pass
- this array to the kernel function. */
- lpar[ 0 ] = 4.0 * log( 2.0 ) / ( fwhm * fwhm );
- par = lpar;
-
-/* Obtain the number of neighbouring pixels to use. If this is zero or
- less, use the number of neighbouring pixels required by the width
- of the kernel (out to where the gaussian term falls to 1% of its
- peak value). */
- neighb = (int) floor( params[ 0 ] + 0.5 );
- if ( neighb <= 0 ) neighb = (int) ceil( sqrt( -log( 0.01 ) /
- lpar[ 0 ] ) );
- break;
-
-/* somb(pi*x)*cos(k*pi*x) */
-/* ---------------------- */
-/* Assign the kernel function. */
- case AST__SOMBCOS:
- kernel = SombCos;
-
-/* Store the required value of "k" in a local parameter array and pass
- this array to the kernel function. */
- lpar[ 0 ] = 0.5 / MaxD( 1.0, params[ 1 ], status );
- par = lpar;
-
-/* Obtain the number of neighbouring pixels to use. If this is zero or
- less, the number will be calculated automatically below. */
- neighb = (int) floor( params[ 0 ] + 0.5 );
- if ( neighb <= 0 ) neighb = INT_MAX;
-
-/* Calculate the maximum number of neighbouring pixels required by the
- width of the kernel, and use this value if preferable. */
- neighb = MinI( neighb,
- (int) ceil( MaxD( 1.0, params[ 1 ], status ) ), status );
- break;
-
-/* sinc(pi*x)*sinc(k*pi*x) */
-/* ----------------------- */
-/* Assign the kernel function. */
- case AST__SINCSINC:
- kernel = SincSinc;
-
-/* Store the required value of "k" in a local parameter array and pass
- this array to the kernel function. */
- lpar[ 0 ] = 0.5 / MaxD( 1.0, params[ 1 ], status );
- par = lpar;
-
-/* Obtain the number of neighbouring pixels to use. If this is zero or
- less, the number will be calculated automatically below. */
- neighb = (int) floor( params[ 0 ] + 0.5 );
- if ( neighb <= 0 ) neighb = INT_MAX;
-
-/* Calculate the maximum number of neighbouring pixels required by the
- width of the kernel, and use this value if preferable. */
- neighb = MinI( neighb,
- (int) ceil( MaxD( 1.0, params[ 1 ], status ) ), status );
- break;
- }
-
-/* Define a macro to use a "case" statement to invoke the 1-d kernel
- interpolation function appropriate to a given data type, passing it
- the pointer to the kernel function obtained above. */
-#define CASE_KERNEL1(X,Xtype) \
- case ( TYPE_##X ): \
- SpreadKernel1##X( this, ndim_out, lbnd_out, ubnd_out, \
- (Xtype *) in, (Xtype *) in_var, \
- npoint, offset, \
- (const double *const *) ptr_out, \
- kernel, neighb, par, flags, \
- *( (Xtype *) badval_ptr ), \
- npix_out, (Xtype *) out, \
- (Xtype *) out_var, work, nused, status ); \
- break;
-
-/* Use the above macro to invoke the appropriate function. */
- switch ( type ) {
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
- CASE_KERNEL1(LD,long double)
-#endif
- CASE_KERNEL1(D,double)
- CASE_KERNEL1(F,float)
- CASE_KERNEL1(I,int)
-
- case ( TYPE_L ): break;
- case ( TYPE_B ): break;
- case ( TYPE_S ): break;
- case ( TYPE_UL ): break;
- case ( TYPE_UI ): break;
- case ( TYPE_US ): break;
- case ( TYPE_UB ): break;
- }
- break;
-
-/* Undefine the macro. */
-#undef CASE_KERNEL1
-
-/* Error: invalid pixel spreading scheme specified. */
-/* ------------------------------------------------ */
- default:
-
-/* Define a macro to report an error message appropriate to a given
- data type. */
-#define CASE_ERROR(X) \
- case TYPE_##X: \
- astError( AST__SISIN, "astRebin"#X"(%s): Invalid " \
- "pixel spreading scheme (%d) specified.", status, \
- astGetClass( unsimplified_mapping ), spread ); \
- break;
-
-/* Use the above macro to report an appropriate error message. */
- switch ( type ) {
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
- CASE_ERROR(LD)
-#endif
- CASE_ERROR(D)
- CASE_ERROR(F)
- CASE_ERROR(I)
-
- case ( TYPE_L ): break;
- case ( TYPE_B ): break;
- case ( TYPE_S ): break;
- case ( TYPE_UL ): break;
- case ( TYPE_UI ): break;
- case ( TYPE_US ): break;
- case ( TYPE_UB ): break;
- }
- break;
-
-/* Undefine the macro. */
-#undef CASE_ERROR
- }
- }
-
-/* Annul the PointSet used to hold output coordinates. */
- pset_out = astAnnul( pset_out );
-
-/* Free the workspace. */
- offset = astFree( offset );
- stride = astFree( stride );
-}
-
-/*
-*++
-* Name:
-c astRebinSeq<X>
-f AST_REBINSEQ<X>
-
-* Purpose:
-* Rebin a region of a sequence of data grids.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "mapping.h"
-c void astRebinSeq<X>( AstMapping *this, double wlim, int ndim_in,
-c const int lbnd_in[], const int ubnd_in[],
-c const <Xtype> in[], const <Xtype> in_var[],
-c int spread, const double params[], int flags,
-c double tol, int maxpix, <Xtype> badval,
-c int ndim_out, const int lbnd_out[],
-c const int ubnd_out[], const int lbnd[],
-c const int ubnd[], <Xtype> out[], <Xtype> out_var[],
-c double weights[], int *nused );
-f CALL AST_REBINSEQ<X>( THIS, WLIM, NDIM_IN, LBND_IN, UBND_IN, IN, IN_VAR,
-f SPREAD, PARAMS, FLAGS, TOL, MAXPIX, BADVAL,
-f NDIM_OUT, LBND_OUT, UBND_OUT, LBND, UBND, OUT,
-f OUT_VAR, WEIGHTS, NUSED, STATUS )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-* This set of
-c functions is identical to astRebin<X>
-f routines is identical to AST_REBIN<X>
-* except that the rebinned input data is added into the supplied
-* output arrays, rather than simply over-writing the contents of the
-* output arrays. Thus, by calling this
-c function
-f routine
-* repeatedly, a sequence of input arrays can be rebinned and accumulated
-* into a single output array, effectively forming a mosaic of the
-* input data arrays.
-*
-* In addition, the weights associated with each output pixel are
-* returned. The weight of an output pixel indicates the number of input
-* pixels which have been accumulated in that output pixel. If the entire
-* value of an input pixel is assigned to a single output pixel, then the
-* weight of that output pixel is incremented by one. If some fraction of
-* the value of an input pixel is assigned to an output pixel, then the
-* weight of that output pixel is incremented by the fraction used.
-*
-* The start of a new sequence is indicated by specifying the
-* AST__REBININIT flag via the
-c "flags" parameter.
-f FLAGS argument.
-* This causes the supplied arrays to be filled with zeros before the
-* rebinned input data is added into them. Subsequenct invocations
-* within the same sequence should omit the AST__REBININIT flag.
-*
-* The last call in a sequence is indicated by specifying the AST__REBINEND
-* flag. This causes the output data and variance arrays to be normalised
-* before being returned. This normalisation consists of dividing the data
-* array by the weights array, and can eliminate artifacts which may be
-* introduced into the rebinned data as a consequence of aliasing between
-* the input and output grids. However, it can also result in small changes to
-* the total pixel value in any given area of the output array. In addition to
-* normalisation of the output data values, any output variances are also
-* appropriately normalised, and any output data values with weight less
-* than
-c "wlim" are set to "badval".
-f WLIM are set to BADVAL.
-*
-* Output variances can be generated in two ways; by rebinning the supplied
-* input variances with appropriate weights, or by finding the spread of
-* input data values contributing to each output pixel (see the AST__GENVAR
-* and AST__USEVAR flags).
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to a Mapping, whose forward transformation will be
-* used to transform the coordinates of pixels in the input
-* grid into the coordinate system of the output grid.
-*
-* The number of input coordinates used by this Mapping (as
-* given by its Nin attribute) should match the number of input
-c grid dimensions given by the value of "ndim_in"
-f grid dimensions given by the value of NDIM_IN
-* below. Similarly, the number of output coordinates (Nout
-* attribute) should match the number of output grid dimensions
-c given by "ndim_out".
-f given by NDIM_OUT.
-c If "in" is NULL, the Mapping will not be used, but a valid
-c Mapping must still be supplied.
-c wlim
-f WLIM = DOUBLE PRECISION (Given)
-* This value is only used if the AST__REBINEND flag is specified
-* via the
-c "flags" parameter.
-f FLAGS argument.
-* It gives the required number of input pixel values which must
-* contribute to an output pixel (i.e. the output pixel weight) in
-* order for the output pixel value to be considered valid. If the sum
-* of the input pixel weights contributing to an output pixel is less
-* than the supplied
-c "wlim"
-f WLIM
-* value, then the output pixel value is returned set to the
-* supplied bad value. If the supplied value is less than 1.0E-10
-* then 1.0E-10 is used instead.
-c ndim_in
-f NDIM_IN = INTEGER (Given)
-* The number of dimensions in the input grid. This should be at
-* least one.
-c Not used if "in" is NULL.
-c lbnd_in
-f LBND_IN( NDIM_IN ) = INTEGER (Given)
-c Pointer to an array of integers, with "ndim_in" elements,
-f An array
-* containing the coordinates of the centre of the first pixel
-* in the input grid along each dimension.
-c Not used if "in" is NULL.
-c ubnd_in
-f UBND_IN( NDIM_IN ) = INTEGER (Given)
-c Pointer to an array of integers, with "ndim_in" elements,
-f An array
-* containing the coordinates of the centre of the last pixel in
-* the input grid along each dimension.
-*
-c Note that "lbnd_in" and "ubnd_in" together define the shape
-f Note that LBND_IN and UBND_IN together define the shape
-* and size of the input grid, its extent along a particular
-c (j'th) dimension being ubnd_in[j]-lbnd_in[j]+1 (assuming the
-c index "j" to be zero-based). They also define
-f (J'th) dimension being UBND_IN(J)-LBND_IN(J)+1. They also define
-* the input grid's coordinate system, each pixel having unit
-* extent along each dimension with integral coordinate values
-* at its centre.
-c Not used if "in" is NULL.
-c in
-f IN( * ) = <Xtype> (Given)
-c Pointer to an array, with one element for each pixel in the
-f An array, with one element for each pixel in the
-* input grid, containing the input data to be rebined. The
-* numerical type of this array should match the 1- or
-* 2-character type code appended to the function name (e.g. if
-c you are using astRebinSeqF, the type of each array element
-c should be "float").
-f you are using AST_REBINSEQR, the type of each array element
-f should be REAL).
-*
-* The storage order of data within this array should be such
-* that the index of the first grid dimension varies most
-* rapidly and that of the final dimension least rapidly
-c (i.e. Fortran array indexing is used).
-f (i.e. normal Fortran array storage order).
-c If a NULL pointer is supplied for "in", then no data is added to
-c the output arrays, but any initialisation or normalisation
-c requested by "flags" is still performed.
-c in_var
-f IN_VAR( * ) = <Xtype> (Given)
-* An optional
-c pointer to a
-* second array with the same size and type as the
-c "in"
-f IN
-* array. If given, this should contain a set of non-negative values
-* which represent estimates of the statistical variance associated
-* with each element of the
-c "in"
-f IN
-* array.
-* If neither the AST__USEVAR nor the AST__VARWGT flag is set, no
-* input variance estimates are required and this
-f array
-c pointer
-* will not be used.
-f A dummy (e.g. one-element) array
-c A NULL pointer
-* may then be supplied.
-c spread
-f SPREAD = INTEGER (Given)
-c This parameter specifies the scheme to be used for dividing
-f This argument specifies the scheme to be used for dividing
-* each input data value up amongst the corresponding output pixels.
-* It may be used to select
-* from a set of pre-defined schemes by supplying one of the
-* values described in the "Pixel Spreading Schemes"
-* section in the description of the
-c astRebin<X> functions.
-f AST_REBIN<X> routines.
-* If a value of zero is supplied, then the default linear spreading
-* scheme is used (equivalent to supplying the value AST__LINEAR).
-c Not used if "in" is NULL.
-c params
-f PARAMS( * ) = DOUBLE PRECISION (Given)
-c An optional pointer to an array of double which should contain
-f An optional array which should contain
-* any additional parameter values required by the pixel
-* spreading scheme. If such parameters are required, this
-* will be noted in the "Pixel Spreading Schemes" section in the
-* description of the
-c astRebin<X> functions.
-f AST_REBIN<X> routines.
-*
-c If no additional parameters are required, this array is not
-c used and a NULL pointer may be given.
-f If no additional parameters are required, this array is not
-f used. A dummy (e.g. one-element) array may then be supplied.
-c Not used if "in" is NULL.
-c flags
-f FLAGS = INTEGER (Given)
-c The bitwise OR of a set of flag values which may be used to
-f The sum of a set of flag values which may be used to
-* provide additional control over the rebinning operation. See
-* the "Control Flags" section below for a description of the
-* options available. If no flag values are to be set, a value
-* of zero should be given.
-c tol
-f TOL = DOUBLE PRECISION (Given)
-* The maximum tolerable geometrical distortion which may be
-* introduced as a result of approximating non-linear Mappings
-* by a set of piece-wise linear transformations. This should be
-* expressed as a displacement in pixels in the output grid's
-* coordinate system.
-*
-* If piece-wise linear approximation is not required, a value
-* of zero may be given. This will ensure that the Mapping is
-* used without any approximation, but may increase execution
-* time.
-*
-* If the value is too high, discontinuities between the linear
-* approximations used in adjacent panel will be higher, and may
-* cause the edges of the panel to be visible when viewing the output
-* image at high contrast. If this is a problem, reduce the
-* tolerance value used.
-c Not used if "in" is NULL.
-c maxpix
-f MAXPIX = INTEGER (Given)
-* A value which specifies an initial scale size (in pixels) for
-* the adaptive algorithm which approximates non-linear Mappings
-* with piece-wise linear transformations. Normally, this should
-* be a large value (larger than any dimension of the region of
-* the input grid being used). In this case, a first attempt to
-* approximate the Mapping by a linear transformation will be
-* made over the entire input region.
-*
-* If a smaller value is used, the input region will first be
-c divided into sub-regions whose size does not exceed "maxpix"
-f divided into sub-regions whose size does not exceed MAXPIX
-* pixels in any dimension. Only at this point will attempts at
-* approximation commence.
-*
-* This value may occasionally be useful in preventing false
-* convergence of the adaptive algorithm in cases where the
-* Mapping appears approximately linear on large scales, but has
-* irregularities (e.g. holes) on smaller scales. A value of,
-* say, 50 to 100 pixels can also be employed as a safeguard in
-* general-purpose software, since the effect on performance is
-* minimal.
-*
-* If too small a value is given, it will have the effect of
-* inhibiting linear approximation altogether (equivalent to
-c setting "tol" to zero). Although this may degrade
-f setting TOL to zero). Although this may degrade
-* performance, accurate results will still be obtained.
-c Not used if "in" is NULL.
-c badval
-f BADVAL = <Xtype> (Given)
-* This argument should have the same type as the elements of
-c the "in" array. It specifies the value used to flag missing
-f the IN array. It specifies the value used to flag missing
-* data (bad pixels) in the input and output arrays.
-*
-c If the AST__USEBAD flag is set via the "flags" parameter,
-f If the AST__USEBAD flag is set via the FLAGS argument,
-c then this value is used to test for bad pixels in the "in"
-c (and "in_var") array(s).
-f then this value is used to test for bad pixels in the IN
-f (and IN_VAR) array(s).
-*
-* In all cases, this value is also used to flag any output
-c elements in the "out" (and "out_var") array(s) for which
-f elements in the OUT (and OUT_VAR) array(s) for which
-* rebined values could not be obtained (see the "Propagation
-* of Missing Data" section below for details of the
-* circumstances under which this may occur).
-c ndim_out
-f NDIM_OUT = INTEGER (Given)
-* The number of dimensions in the output grid. This should be
-* at least one. It need not necessarily be equal to the number
-* of dimensions in the input grid.
-c lbnd_out
-f LBND_OUT( NDIM_OUT ) = INTEGER (Given)
-c Pointer to an array of integers, with "ndim_out" elements,
-f An array
-* containing the coordinates of the centre of the first pixel
-* in the output grid along each dimension.
-c ubnd_out
-f UBND_OUT( NDIM_OUT ) = INTEGER (Given)
-c Pointer to an array of integers, with "ndim_out" elements,
-f An array
-* containing the coordinates of the centre of the last pixel in
-* the output grid along each dimension.
-*
-c Note that "lbnd_out" and "ubnd_out" together define the
-f Note that LBND_OUT and UBND_OUT together define the
-* shape, size and coordinate system of the output grid in the
-c same way as "lbnd_in" and "ubnd_in" define the shape, size
-f same way as LBND_IN and UBND_IN define the shape, size
-* and coordinate system of the input grid.
-c lbnd
-f LBND( NDIM_IN ) = INTEGER (Given)
-c Pointer to an array of integers, with "ndim_in" elements,
-f An array
-* containing the coordinates of the first pixel in the region
-* of the input grid which is to be included in the rebined output
-* array.
-c Not used if "in" is NULL.
-c ubnd
-f UBND( NDIM_IN ) = INTEGER (Given)
-c Pointer to an array of integers, with "ndim_in" elements,
-f An array
-* containing the coordinates of the last pixel in the region of
-* the input grid which is to be included in the rebined output
-* array.
-*
-c Note that "lbnd" and "ubnd" together define the shape and
-f Note that LBND and UBND together define the shape and
-* position of a (hyper-)rectangular region of the input grid
-* which is to be included in the rebined output array. This region
-* should lie wholly within the extent of the input grid (as
-c defined by the "lbnd_in" and "ubnd_in" arrays). Regions of
-f defined by the LBND_IN and UBND_IN arrays). Regions of
-* the input grid lying outside this region will not be used.
-c Not used if "in" is NULL.
-c out
-f OUT( * ) = <Xtype> (Given and Returned)
-c Pointer to an array, with one element for each pixel in the
-f An array, with one element for each pixel in the
-* output grid. The rebined data values will be added into the
-* original contents of this array. The numerical type of this array
-* should match that of the
-c "in" array, and the data storage order should be such
-f IN array, and the data storage order should be such
-* that the index of the first grid dimension varies most
-* rapidly and that of the final dimension least rapidly
-c (i.e. Fortran array indexing is used).
-f (i.e. normal Fortran array storage order).
-c out_var
-f OUT_VAR( * ) = <Xtype> (Given and Returned)
-* A
-c pointer to an
-* array with the same type and size as the
-c "out"
-f OUT
-* array. This
-c pointer
-f array
-* will only be used if the AST__USEVAR or AST__GENVAR flag is set
-f via the FLAGS argument,
-f via the "flags" parameter,
-* in which case variance estimates for the rebined data values will
-* be added into the array. If neither the AST__USEVAR flag nor the
-* AST__GENVAR flag is set, no output variance estimates will be
-* calculated and this
-c pointer
-f array
-* will not be used. A
-c NULL pointer
-f dummy (e.g. one-element) array
-* may then be supplied.
-c weights
-f WEIGHTS( * ) = DOUBLE PRECISION (Given and Returned)
-c Pointer to an array of double,
-f An array
-* with one or two elements for each pixel in the output grid,
-* depending on whether or not the AST__GENVAR flag has been supplied
-* via the
-c "flags" parameter.
-f FLAGS parameter.
-* If AST__GENVAR has not been specified then the array should have
-* one element for each output pixel, and it will be used to
-* accumulate the weight associated with each output pixel.
-* If AST__GENVAR has been specified then the array should have
-* two elements for each output pixel. The first half of the array
-* is again used to accumulate the weight associated with each output
-* pixel, and the second half is used to accumulate the square of
-* the weights. In each half, the data storage order should be such that
-* the index of the first grid dimension varies most rapidly and that of
-* the final dimension least rapidly
-c (i.e. Fortran array indexing is used).
-f (i.e. normal Fortran array storage order).
-c nused
-f NUSED = INTEGER (Given and Returned)
-c A pointer to an int containing the
-f The
-* number of input data values that have been added into the output
-* array so far. The supplied value is incremented on exit by the
-* number of input values used. The value is initially set to zero
-* if the AST__REBININIT flag is set in
-c "flags".
-f FLAGS.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Data Type Codes:
-* To select the appropriate rebinning function, you should
-c replace <X> in the generic function name astRebinSeq<X> with a
-f replace <X> in the generic function name AST_REBINSEQ<X> with a
-* 1- or 2-character data type code, so as to match the numerical
-* type <Xtype> of the data you are processing, as follows:
-c - D: double
-c - F: float
-c - I: int
-f - D: DOUBLE PRECISION
-f - R: REAL
-f - I: INTEGER
-*
-c For example, astRebinSeqD would be used to process "double"
-c data, while astRebinSeqI would be used to process "int"
-c data, etc.
-f For example, AST_REBIND would be used to process DOUBLE
-f PRECISION data, while AST_REBINI would be used to process
-f integer data (stored in an INTEGER array), etc.
-*
-* Note that, unlike
-c astResample<X>, the astRebinSeq<X>
-f AST_RESAMPLE<X>, the AST_REBINSEQ<X>
-* set of functions does not yet support unsigned integer data types
-* or integers of different sizes.
-
-* Control Flags:
-c The following flags are defined in the "ast.h" header file and
-f The following flags are defined in the AST_PAR include file and
-* may be used to provide additional control over the rebinning
-* process. Having selected a set of flags, you should supply the
-c bitwise OR of their values via the "flags" parameter:
-f sum of their values via the FLAGS argument:
-*
-* - AST__REBININIT: Used to mark the first call in a sequence. It indicates
-* that the supplied
-c "out", "out_var" and "weights"
-f OUT, OUT_VAR and WEIGHTS
-* arrays should be filled with zeros (thus over-writing any supplied
-* values) before adding the rebinned input data into them. This flag
-* should be used when rebinning the first input array in a sequence.
-* - AST__REBINEND: Used to mark the last call in a sequence. It causes
-* each value in the
-c "out" and "out_var"
-f OUT and OUT_VAR
-* arrays to be divided by a normalisation factor before being
-* returned. The normalisation factor for each output data value is just the
-* corresponding value from the weights array. The normalisation factor
-* for each output variance value is the square of the data value
-* normalisation factor. It also causes output data values to be set
-* bad if the corresponding weight is less than the value supplied for
-c parameter "wlim".
-f argument WLIM.
-* It also causes any temporary values stored in the output variance array
-* (see flag AST__GENVAR below) to be converted into usable variance values.
-* - AST__USEBAD: Indicates that there may be bad pixels in the
-* input array(s) which must be recognised by comparing with the
-c value given for "badval" and propagated to the output array(s).
-f value given for BADVAL and propagated to the output array(s).
-* If this flag is not set, all input values are treated literally
-c and the "badval" value is only used for flagging output array
-f and the BADVAL value is only used for flagging output array
-* values.
-* - AST__USEVAR: Indicates that output variance estimates should be
-* created by rebinning the supplied input variance estimates. An
-* error will be reported if both this flag and the AST__GENVAR flag
-* are supplied.
-* - AST__GENVAR: Indicates that output variance estimates should be
-* created based on the spread of input data values contributing to each
-* output pixel. An error will be reported if both this flag and the
-* AST__USEVAR flag are supplied. If the AST__GENVAR flag is specified,
-* the supplied output variance array is first used as a work array to
-* accumulate the temporary values needed to generate the output
-* variances. When the sequence ends (as indicated by the
-* AST__REBINEND flag), the contents of the output variance array are
-* converted into the required variance estimates. If the generation of
-* such output variances is required, this flag should be used on every
-* invocation of this
-c function
-f routine
-* within a sequence, and any supplied input variances will have no effect
-* on the output variances (although input variances will still be used
-* to weight the input data if the AST__VARWGT flag is also supplied).
-* - AST__VARWGT: Indicates that the input data should be weighted by
-* the reciprocal of the input variances. Otherwise, all input data are
-* given equal weight. If this flag is specified, the calculation of the
-* output variances (if any) is modified to take account of the
-* varying weights assigned to the input data values.
-
-* Propagation of Missing Data:
-* Instances of missing data (bad pixels) in the output grid are
-c identified by occurrences of the "badval" value in the "out"
-f identified by occurrences of the BADVAL value in the OUT
-* array. These are only produced if the AST__REBINEND flag is
-* specified and a pixel has zero weight.
-*
-* An input pixel is considered bad (and is consequently ignored) if
-* its
-c data value is equal to "badval" and the AST__USEBAD flag is
-c set via the "flags" parameter.
-f data value is equal to BADVAL and the AST__USEBAD flag is
-f set via the FLAGS argument.
-*
-* In addition, associated output variance estimates (if
-c calculated) may be declared bad and flagged with the "badval"
-c value in the "out_var" array for similar reasons.
-f calculated) may be declared bad and flagged with the BADVAL
-f value in the OUT_VAR array for similar reasons.
-*--
-*/
-/* Define a macro to implement the function for a specific data
- type. */
-#define MAKE_REBINSEQ(X,Xtype,IntType) \
-static void RebinSeq##X( AstMapping *this, double wlim, int ndim_in, \
- const int lbnd_in[], const int ubnd_in[], \
- const Xtype in[], const Xtype in_var[], \
- int spread, const double params[], int flags, \
- double tol, int maxpix, Xtype badval, \
- int ndim_out, const int lbnd_out[], \
- const int ubnd_out[], const int lbnd[], \
- const int ubnd[], Xtype out[], Xtype out_var[], \
- double weights[], int *nused, int *status ) { \
-\
-/* Local Variables: */ \
- astDECLARE_GLOBALS /* Thread-specific data */ \
- AstMapping *simple; /* Pointer to simplified Mapping */ \
- Xtype *d; /* Pointer to next output data value */ \
- Xtype *v; /* Pointer to next output variance value */ \
- double *w; /* Pointer to next weight value */ \
- double a; /* Weighted mean of input values */ \
- double mwpip; /* Mean weight per input pixel */ \
- double nn; /* Effective no. of i/p pixels combined */ \
- double sw; /* Sum of weights at output pixel */ \
- int i; /* Loop counter for output pixels */ \
- int idim; /* Loop counter for coordinate dimensions */ \
- int ipix_out; /* Index into output array */ \
- int nin; /* Number of Mapping input coordinates */ \
- int nout; /* Number of Mapping output coordinates */ \
- int npix; /* Number of pixels in input region */ \
- int npix_out; /* Number of pixels in output array */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Get a pointer to a structure holding thread-specific global data values */ \
- astGET_GLOBALS(this); \
-\
-/* Loop to determine how many pixels the output array contains. */ \
- npix_out = 1; \
- for ( idim = 0; idim < ndim_out; idim++ ) { \
- npix_out *= ubnd_out[ idim ] - lbnd_out[ idim ] + 1; \
- } \
-\
-/* If no input data was supplied, jump to the normalisation section. */ \
- simple = NULL; \
- if( in ) { \
-\
-/* Ensure any supplied "in_var" pointer is ignored if no input variances are \
- needed. */ \
- if( !( flags & AST__USEVAR ) && !( flags & AST__VARWGT ) ) { \
- in_var = NULL; \
- } \
-\
-/* Ensure any supplied "out_var" pointer is ignored if no output variances \
- being created. */ \
- if( !( flags & AST__USEVAR ) && !( flags & AST__GENVAR ) ) { \
- out_var = NULL; \
- } \
-\
-/* Obtain values for the Nin and Nout attributes of the Mapping. */ \
- nin = astGetNin( this ); \
- nout = astGetNout( this ); \
-\
-/* If OK, check that the number of input grid dimensions matches the \
- number required by the Mapping and is at least 1. Report an error \
- if necessary. */ \
- if ( astOK && ( ( ndim_in != nin ) || ( ndim_in < 1 ) ) ) { \
- astError( AST__NGDIN, "astRebinSeq"#X"(%s): Bad number of input grid " \
- "dimensions (%d).", status, astGetClass( this ), ndim_in ); \
- if ( ndim_in != nin ) { \
- astError( AST__NGDIN, "The %s given requires %d coordinate value%s " \
- "to specify an input position.", status, \
- astGetClass( this ), nin, ( nin == 1 ) ? "" : "s" ); \
- } \
- } \
-\
-/* If OK, also check that the number of output grid dimensions matches \
- the number required by the Mapping and is at least 1. Report an \
- error if necessary. */ \
- if ( astOK && ( ( ndim_out != nout ) || ( ndim_out < 1 ) ) ) { \
- astError( AST__NGDIN, "astRebinSeq"#X"(%s): Bad number of output grid " \
- "dimensions (%d).", status, astGetClass( this ), ndim_out ); \
- if ( ndim_out != nout ) { \
- astError( AST__NGDIN, "The %s given generates %s%d coordinate " \
- "value%s for each output position.", status, astGetClass( this ), \
- ( nout < ndim_out ) ? "only " : "", nout, \
- ( nout == 1 ) ? "" : "s" ); \
- } \
- } \
-\
-/* Check that the lower and upper bounds of the input grid are \
- consistent. Report an error if any pair is not. */ \
- if ( astOK ) { \
- for ( idim = 0; idim < ndim_in; idim++ ) { \
- if ( lbnd_in[ idim ] > ubnd_in[ idim ] ) { \
- astError( AST__GBDIN, "astRebinSeq"#X"(%s): Lower bound of " \
- "input grid (%d) exceeds corresponding upper bound " \
- "(%d).", status, astGetClass( this ), \
- lbnd_in[ idim ], ubnd_in[ idim ] ); \
- astError( AST__GBDIN, "Error in input dimension %d.", status, \
- idim + 1 ); \
- break; \
- } \
- } \
- } \
-\
-/* Check that the positional accuracy tolerance supplied is valid and \
- report an error if necessary. */ \
- if ( astOK && ( tol < 0.0 ) ) { \
- astError( AST__PATIN, "astRebinSeq"#X"(%s): Invalid positional " \
- "accuracy tolerance (%.*g pixel).", status, \
- astGetClass( this ), DBL_DIG, tol ); \
- astError( AST__PATIN, "This value should not be less than zero." , status); \
- } \
-\
-/* Check that the initial scale size in pixels supplied is valid and \
- report an error if necessary. */ \
- if ( astOK && ( maxpix < 0 ) ) { \
- astError( AST__SSPIN, "astRebinSeq"#X"(%s): Invalid initial scale " \
- "size in pixels (%d).", status, astGetClass( this ), maxpix ); \
- astError( AST__SSPIN, "This value should not be less than zero." , status); \
- } \
-\
-/* Check that the lower and upper bounds of the output grid are \
- consistent. Report an error if any pair is not. */ \
- if ( astOK ) { \
- for ( idim = 0; idim < ndim_out; idim++ ) { \
- if ( lbnd_out[ idim ] > ubnd_out[ idim ] ) { \
- astError( AST__GBDIN, "astRebinSeq"#X"(%s): Lower bound of " \
- "output grid (%d) exceeds corresponding upper bound " \
- "(%d).", status, astGetClass( this ), \
- lbnd_out[ idim ], ubnd_out[ idim ] ); \
- astError( AST__GBDIN, "Error in output dimension %d.", status, \
- idim + 1 ); \
- break; \
- } \
- } \
- } \
-\
-/* Similarly check the bounds of the input region. */ \
- if ( astOK ) { \
- for ( idim = 0; idim < ndim_in; idim++ ) { \
- if ( lbnd[ idim ] > ubnd[ idim ] ) { \
- astError( AST__GBDIN, "astRebinSeq"#X"(%s): Lower bound of " \
- "input region (%d) exceeds corresponding upper " \
- "bound (%d).", status, astGetClass( this ), \
- lbnd[ idim ], ubnd[ idim ] ); \
-\
-/* Also check that the input region lies wholly within the input \
- grid. */ \
- } else if ( lbnd[ idim ] < lbnd_in[ idim ] ) { \
- astError( AST__GBDIN, "astRebinSeq"#X"(%s): Lower bound of " \
- "input region (%d) is less than corresponding " \
- "bound of input grid (%d).", status, astGetClass( this ), \
- lbnd[ idim ], lbnd_in[ idim ] ); \
- } else if ( ubnd[ idim ] > ubnd_in[ idim ] ) { \
- astError( AST__GBDIN, "astRebinSeq"#X"(%s): Upper bound of " \
- "input region (%d) exceeds corresponding " \
- "bound of input grid (%d).", status, astGetClass( this ), \
- ubnd[ idim ], ubnd_in[ idim ] ); \
- } \
-\
-/* Say which dimension produced the error. */ \
- if ( !astOK ) { \
- astError( AST__GBDIN, "Error in output dimension %d.", status, \
- idim + 1 ); \
- break; \
- } \
- } \
- } \
-\
-/* Check that only one of AST__USEVAR and ASR__GENVAR has been supplied. */ \
- if( ( flags & AST__USEVAR ) && ( flags & AST__GENVAR ) ) { \
- if( astOK ) { \
- astError( AST__BDPAR, "astRebinSeq"#X"(%s): Incompatible flags " \
- "AST__GENVAR and AST__USEVAR have been specified " \
- "together (programming error).", status, astGetClass( this ) ); \
- } \
- } \
-\
-/* If AST__USEVAR or AST_VARWGT has been specified, check we have an \
- input variance array. */ \
- if( !in_var && astOK ) { \
- if( ( flags & AST__USEVAR ) ) { \
- astError( AST__BDPAR, "astRebinSeq"#X"(%s): The AST__USEVAR flag " \
- "was specified but no input variance array was supplied " \
- "(programming error).", status, astGetClass( this ) ); \
- } else if( ( flags & AST__VARWGT ) ) { \
- astError( AST__BDPAR, "astRebinSeq"#X"(%s): The AST__VARWGT flag " \
- "was specified but no input variance array was supplied " \
- "(programming error).", status, astGetClass( this ) ); \
- } \
- } \
-\
-/* If AST__USEVAR or AST_GENVAR has been specified, check we have an \
- output variance array. */ \
- if( !out_var && astOK ) { \
- if( ( flags & AST__USEVAR ) ) { \
- astError( AST__BDPAR, "astRebinSeq"#X"(%s): The AST__USEVAR flag " \
- "was specified but no output variance array was supplied " \
- "(programming error).", status, astGetClass( this ) ); \
- } else if( ( flags & AST__GENVAR ) ) { \
- astError( AST__BDPAR, "astRebinSeq"#X"(%s): The AST__GENVAR flag " \
- "was specified but no output variance array was supplied " \
- "(programming error).", status, astGetClass( this ) ); \
- } \
- } \
-\
-/* If OK, loop to determine how many input pixels are to be binned. */ \
- npix = 1; \
- unsimplified_mapping = this; \
- if ( astOK ) { \
- for ( idim = 0; idim < ndim_in; idim++ ) { \
- npix *= ubnd[ idim ] - lbnd[ idim ] + 1; \
- } \
-\
-/* If there are sufficient pixels to make it worthwhile, simplify the \
- Mapping supplied to improve performance. Otherwise, just clone the \
- Mapping pointer. Note we have already saved a pointer to the original \
- Mapping so that lower-level functions can use it if they need to report \
- an error. */ \
- if ( npix > 1024 ) { \
- simple = astSimplify( this ); \
- } else { \
- simple = astClone( this ); \
- } \
- } \
-\
-/* Report an error if the forward transformation of this simplified \
- Mapping is not defined. */ \
- if ( !astGetTranForward( simple ) && astOK ) { \
- astError( AST__TRNND, "astRebinSeq"#X"(%s): An forward coordinate " \
- "transformation is not defined by the %s supplied.", status, \
- astGetClass( unsimplified_mapping ), \
- astGetClass( unsimplified_mapping ) ); \
- } \
-\
-/* If required, initialise the output arrays to hold zeros. */ \
- if( flags & AST__REBININIT ) { \
- w = weights; \
- d = out; \
- if( out_var ) { \
- v = out_var; \
- for( ipix_out = 0; ipix_out < npix_out; ipix_out++, d++, v++, w++ ) { \
- *d = 0; \
- *v = 0; \
- *w = 0; \
- } \
- } else { \
- for( ipix_out = 0; ipix_out < npix_out; ipix_out++, d++, w++ ) { \
- *d = 0; \
- *w = 0; \
- } \
- } \
- if( flags & AST__GENVAR ) { \
- w = weights + npix_out; \
- for( ipix_out = 0; ipix_out < npix_out; ipix_out++, w++ ) *w = 0; \
- } \
- } \
-\
-/* Perform the rebinning. Note that we pass all gridded data, the \
- spread function and the bad pixel value by means of pointer \
- types that obscure the underlying data type. This is to avoid \
- having to replicate functions unnecessarily for each data \
- type. However, we also pass an argument that identifies the data \
- type we have obscured. */ \
- RebinAdaptively( simple, ndim_in, lbnd_in, ubnd_in, \
- (const void *) in, (const void *) in_var, \
- TYPE_##X, spread, \
- params, flags, tol, maxpix, \
- (const void *) &badval, \
- ndim_out, lbnd_out, ubnd_out, \
- lbnd, ubnd, npix_out, \
- (void *) out, (void *) out_var, weights, nused, status ); \
-\
-/* Annul the pointer to the simplified/cloned Mapping. */ \
- simple = astAnnul( simple ); \
-\
- } \
-\
-/* If required, finalise the sequence. */ \
- if( flags & AST__REBINEND ) { \
-\
-/* Ensure "wlim" is not zero. */ \
- if( wlim < 1.0E-10 ) wlim = 1.0E-10; \
-\
-/* If required create the output variances from the spread of the input \
- data values.*/ \
- if( flags & AST__GENVAR ) { \
-\
-/* Find the average weight per input pixel, if we do not already know it \
- to be 1.0. */ \
- if( flags & AST__VARWGT ) { \
- sw = 0.0; \
- for( i = 0; i < npix_out; i++ ) { \
- sw += weights[ i ]; \
- } \
- mwpip = sw/( *nused ); \
-\
- } else { \
- mwpip = 1.0; \
- } \
-\
-/* Calculate the variance. We apply a factor that accounts for the \
- reduction in the number of degrees of freedom when finding the \
- variance. This factor is based on the number of input values included \
- in each output value, and is taken to be the output weight dividided \
- by the mean weight per input pixel. */ \
- for( i = 0; i < npix_out; i++ ) { \
- sw = weights[ i ]; \
- nn = sw/mwpip; \
- if( nn > 2.0 && fabs( sw ) >= wlim ) { \
- a = out[ i ]/sw; \
- out_var[ i ] = ( out_var[ i ]/sw - a*a )*weights[ i + npix_out ]; \
- if( out_var[ i ] < 0.0 ) { \
- out_var[ i ] = badval; \
- } else { \
- out_var[ i ] *= nn/( nn - 1.0 ); \
- } \
- } else { \
- out_var[ i ] = badval; \
- } \
- } \
- } \
-\
-/* Normalise the returned data and variance arrays. */ \
- for( i = 0; i < npix_out; i++ ) { \
- if( fabs( weights[ i ] ) >= wlim && out[ i ] != badval ) { \
- out[ i ] /= weights[ i ]; \
- } else { \
- out[ i ] = badval; \
- } \
- } \
- if( out_var ) { \
- for( i = 0; i < npix_out; i++ ) { \
- if( fabs( weights[ i ] ) >= wlim && out_var[ i ] != badval ) { \
- out_var[ i ] /= ( weights[ i ]*weights[ i ] ); \
- } else { \
- out_var[ i ] = badval; \
- } \
- } \
- } \
- } \
-}
-
-/* Expand the above macro to generate a function for each required
- data type. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-MAKE_REBINSEQ(LD,long double,0)
-#endif
-MAKE_REBINSEQ(D,double,0)
-MAKE_REBINSEQ(F,float,0)
-MAKE_REBINSEQ(I,int,1)
-
-/* Undefine the macro. */
-#undef MAKE_REBIN
-
-static void RebinWithBlocking( AstMapping *this, const double *linear_fit,
- int ndim_in, const int *lbnd_in,
- const int *ubnd_in, const void *in,
- const void *in_var, DataType type, int spread,
- const double *params, int flags,
- const void *badval_ptr, int ndim_out,
- const int *lbnd_out, const int *ubnd_out,
- const int *lbnd, const int *ubnd, int npix_out,
- void *out, void *out_var, double *work,
- int *nused, int *status ) {
-/*
-* Name:
-* RebinWithBlocking
-
-* Purpose:
-* Rebin a section of a data grid in a memory-efficient way.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void RebinWithBlocking( AstMapping *this, const double *linear_fit,
-* int ndim_in, const int *lbnd_in,
-* const int *ubnd_in, const void *in,
-* const void *in_var, DataType type, int spread,
-* const double *params, int flags,
-* const void *badval_ptr, int ndim_out,
-* const int *lbnd_out, const int *ubnd_out,
-* const int *lbnd, const int *ubnd, int npix_out,
-* void *out, void *out_var, double *work,
-* int *nused )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function rebins a specified section of a rectangular grid of
-* data (with any number of dimensions) into another rectangular grid
-* (with a possibly different number of dimensions). The coordinate
-* transformation used to convert input pixel coordinates into positions
-* in the output grid is given by the forward transformation of the
-* Mapping which is supplied. Any pixel spreading scheme may be specified
-* for distributing the flux of an input pixel amongst the output
-* pixels.
-*
-* This function is very similar to RebinSection, except that in
-* order to limit memory usage and to ensure locality of reference,
-* it divides the input grid up into "blocks" which have a limited
-* extent along each input dimension. Each block, which will not
-* contain more than a pre-determined maximum number of pixels, is
-* then passed to RebinSection for resampling.
-
-* Parameters:
-* this
-* Pointer to a Mapping, whose forward transformation may be
-* used to transform the coordinates of pixels in the input
-* grid into associated positions in the output grid.
-*
-* The number of input coordintes for the Mapping (Nin
-* attribute) should match the value of "ndim_in" (below), and
-* the number of output coordinates (Nout attribute) should
-* match the value of "ndim_out".
-* linear_fit
-* Pointer to an optional array of double which contains the
-* coefficients of a linear fit which approximates the above
-* Mapping's forward coordinate transformation. If this is
-* supplied, it will be used in preference to the above Mapping
-* when transforming coordinates. This may be used to enhance
-* performance in cases where evaluation of the Mapping's
-* forward transformation is expensive. If no linear fit is
-* available, a NULL pointer should be supplied.
-*
-* The way in which the fit coefficients are stored in this
-* array and the number of array elements are as defined by the
-* astLinearApprox function.
-* ndim_in
-* The number of dimensions in the input grid. This should be at
-* least one.
-* lbnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the first
-* pixel in the input data grid along each dimension.
-* ubnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the last
-* pixel in the input data grid along each dimension.
-*
-* Note that "lbnd_in" and "ubnd_in" together define the shape
-* and size of the input data grid, its extent along a
-* particular (i'th) dimension being (ubnd_in[i] - lbnd_in[i] +
-* 1). They also define the input grid's coordinate system, with
-* each pixel being of unit extent along each dimension with
-* integral coordinate values at its centre.
-* in
-* Pointer to the input array of data to be rebinned (with one
-* element for each pixel in the input grid). The numerical type
-* of these data should match the "type" value (below). The
-* storage order should be such that the coordinate of the first
-* dimension varies most rapidly and that of the final dimension
-* least rapidly (i.e. Fortran array storage order is used).
-* in_var
-* An optional pointer to a second array of positive numerical
-* values (with the same size and data type as the "in" array),
-* which represent estimates of the statistical variance
-* associated with each element of the "in" array. If this
-* second array is given (along with the corresponding "out_var"
-* array), then estimates of the variance of the rebinned data
-* will also be returned.
-*
-* If no variance estimates are required, a NULL pointer should
-* be given.
-* type
-* A value taken from the "DataType" enum, which specifies the
-* data type of the input and output arrays containing the
-* gridded data (and variance) values.
-* spread
-* A value selected from a set of pre-defined macros to identify
-* which pixel spread function should be used.
-* params
-* Pointer to an optional array of parameters that may be passed
-* to the pixel spread algorithm, if required. If no parameters
-* are required, a NULL pointer should be supplied.
-* flags
-* The bitwise OR of a set of flag values which provide additional
-* control over the resampling operation.
-* badval_ptr
-* If the AST__USEBAD flag is set (above), this parameter is a
-* pointer to a value which is used to identify bad data and/or
-* variance values in the input array(s). The referenced value's
-* data type must match that of the "in" (and "in_var")
-* arrays. The same value will also be used to flag any output
-* array elements for which rebinned values could not be
-* obtained. The output arrays(s) may be flagged with this
-* value whether or not the AST__USEBAD flag is set (the
-* function return value indicates whether any such values have
-* been produced).
-* ndim_out
-* The number of dimensions in the output grid. This should be
-* at least one.
-* lbnd_out
-* Pointer to an array of integers, with "ndim_out" elements.
-* This should give the coordinates of the centre of the first
-* pixel in the output data grid along each dimension.
-* ubnd_out
-* Pointer to an array of integers, with "ndim_out" elements.
-* This should give the coordinates of the centre of the last
-* pixel in the output data grid along each dimension.
-*
-* Note that "lbnd_out" and "ubnd_out" together define the shape
-* and size of the output data grid in the same way as "lbnd_in"
-* and "ubnd_in" define the shape and size of the input grid
-* (see above).
-* lbnd
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the first pixel in the
-* section of the input data grid which is to be rebinned.
-* ubnd
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the last pixel in the
-* section of the input data grid which is to be rebinned.
-*
-* Note that "lbnd" and "ubnd" define the shape and position of
-* the section of the input grid which is to be rebinned. This section
-* should lie wholly within the extent of the input grid (as defined
-* by the "lbnd_out" and "ubnd_out" arrays). Regions of the input
-* grid lying outside this section will be ignored.
-* npix_out
-* The number of pixels in the output array.
-* out
-* Pointer to an array with the same data type as the "in"
-* array, into which the rebinned data will be returned. The
-* storage order should be such that the coordinate of the first
-* dimension varies most rapidly and that of the final dimension
-* least rapidly (i.e. Fortran array storage order is used).
-* out_var
-* An optional pointer to an array with the same data type and
-* size as the "out" array, into which variance estimates for
-* the rebinned values may be returned. This array will only be
-* used if the "in_var" array has been given.
-*
-* If no output variance estimates are required, a NULL pointer
-* should be given.
-* work
-* An optional pointer to a double array with the same size as
-* the "out" array. The contents of this array (if supplied) are
-* incremented by the accumulated weights assigned to each output pixel.
-* If no accumulated weights are required, a NULL pointer should be
-* given.
-* nused
-* An optional pointer to an int which will be incremented by the
-* number of input values pasted into the output array. Ignored if NULL.
-
-*/
-
-/* Local Constants: */
- const int mxpix = 2 * 1024; /* Maximum number of pixels in a block (this
- relatively small number seems to give best
- performance) */
-
-/* Local Variables: */
- int *dim_block; /* Pointer to array of block dimensions */
- int *lbnd_block; /* Pointer to block lower bound array */
- int *ubnd_block; /* Pointer to block upper bound array */
- int dim; /* Dimension size */
- int done; /* All blocks rebinned? */
- int hilim; /* Upper limit on maximum block dimension */
- int idim; /* Loop counter for dimensions */
- int lolim; /* Lower limit on maximum block dimension */
- int mxdim_block; /* Maximum block dimension */
- int npix; /* Number of pixels in block */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Allocate workspace. */
- lbnd_block = astMalloc( sizeof( int ) * (size_t) ndim_in );
- ubnd_block = astMalloc( sizeof( int ) * (size_t) ndim_in );
- dim_block = astMalloc( sizeof( int ) * (size_t) ndim_in );
- if ( astOK ) {
-
-/* Find the optimum block size. */
-/* ---------------------------- */
-/* We first need to find the maximum extent which a block of input
- pixels may have in each dimension. We determine this by taking the
- input grid extent in each dimension and then limiting the maximum
- dimension size until the resulting number of pixels is sufficiently
- small. This approach allows the block shape to approximate (or
- match) the input grid shape when appropriate. */
-
-/* First loop to calculate the total number of input pixels and the
- maximum input dimension size. */
- npix = 1;
- mxdim_block = 0;
- for ( idim = 0; idim < ndim_in; idim++ ) {
- dim = ubnd[ idim ] - lbnd[ idim ] + 1;
- npix *= dim;
- if ( mxdim_block < dim ) mxdim_block = dim;
- }
-
-/* If the number of input pixels is too large for a single block, we
- perform iterations to determine the optimum upper limit on a
- block's dimension size. Initialise the limits on this result. */
- if ( npix > mxpix ) {
- lolim = 1;
- hilim = mxdim_block;
-
-/* Loop to perform a binary chop, searching for the best result until
- the lower and upper limits on the result converge to adjacent
- values. */
- while ( ( hilim - lolim ) > 1 ) {
-
-/* Form a new estimate from the mid-point of the previous limits. */
- mxdim_block = ( hilim + lolim ) / 2;
-
-/* See how many pixels a block contains if its maximum dimension is
- limited to this new value. */
- for ( npix = 1, idim = 0; idim < ndim_in; idim++ ) {
- dim = ubnd[ idim ] - lbnd[ idim ] + 1;
- npix *= ( dim < mxdim_block ) ? dim : mxdim_block;
- }
-
-/* Update the appropriate limit, according to whether the number of
- pixels is too large or too small. */
- *( ( npix <= mxpix ) ? &lolim : &hilim ) = mxdim_block;
- }
-
-/* When iterations have converged, obtain the maximum limit on the
- dimension size of a block which results in no more than the maximum
- allowed number of pixels per block. However, ensure that all block
- dimensions are at least 2. */
- mxdim_block = lolim;
- }
- if ( mxdim_block < 2 ) mxdim_block = 2;
-
-/* Calculate the block dimensions by applying this limit to the output
- grid dimensions. */
- for ( idim = 0; idim < ndim_in; idim++ ) {
- dim = ubnd[ idim ] - lbnd[ idim ] + 1;
- dim_block[ idim ] = ( dim < mxdim_block ) ? dim : mxdim_block;
-
-/* Also initialise the lower and upper bounds of the first block of
- output grid pixels to be rebinned, ensuring that this does not
- extend outside the grid itself. */
- lbnd_block[ idim ] = lbnd[ idim ];
- ubnd_block[ idim ] = MinI( lbnd[ idim ] + dim_block[ idim ] - 1,
- ubnd[ idim ], status );
- }
-
-/* Rebin each block of input pixels. */
-/* --------------------------------- */
-/* Loop to generate the extent of each block of input pixels and to
- resample them. */
- done = 0;
- while ( !done && astOK ) {
-
-/* Rebin the current block, accumulating the sum of bad pixels produced. */
- RebinSection( this, linear_fit, ndim_in, lbnd_in, ubnd_in, in,
- in_var, type, spread, params, flags, badval_ptr,
- ndim_out, lbnd_out, ubnd_out, lbnd_block, ubnd_block,
- npix_out, out, out_var, work, nused, status );
-
-/* Update the block extent to identify the next block of input pixels. */
- idim = 0;
- do {
-
-/* We find the least significant dimension where the upper bound of
- the block has not yet reached the upper bound of the region of the
- input grid which we are rebinning. The block's position is then
- incremented by one block extent along this dimension, checking that
- the resulting extent does not go outside the region being rebinned. */
- if ( ubnd_block[ idim ] < ubnd[ idim ] ) {
- lbnd_block[ idim ] = MinI( lbnd_block[ idim ] +
- dim_block[ idim ], ubnd[ idim ], status );
- ubnd_block[ idim ] = MinI( lbnd_block[ idim ] +
- dim_block[ idim ] - 1,
- ubnd[ idim ], status );
- break;
-
-/* If any less significant dimensions are found where the upper bound
- of the block has reached its maximum value, we reset the block to
- its lowest position. */
- } else {
- lbnd_block[ idim ] = lbnd[ idim ];
- ubnd_block[ idim ] = MinI( lbnd[ idim ] + dim_block[ idim ] - 1,
- ubnd[ idim ], status );
-
-/* All the blocks have been processed once the position along the most
- significant dimension has been reset. */
- done = ( ++idim == ndim_in );
- }
- } while ( !done );
- }
- }
-
-/* Free the workspace. */
- lbnd_block = astFree( lbnd_block );
- ubnd_block = astFree( ubnd_block );
- dim_block = astFree( dim_block );
-}
-
-static AstMapping *RemoveRegions( AstMapping *this, int *status ) {
-/*
-*++
-* Name:
-c astRemoveRegions
-f AST_REMOVEREGIONS
-
-* Purpose:
-* Remove any Regions from a Mapping.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "mapping.h"
-c AstMapping *astRemoveRegions( AstMapping *this )
-f RESULT = AST_REMOVEREGIONS( THIS, STATUS )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-* This function searches the suppliedMapping (which may be a
-* compound Mapping such as a CmpMap) for any component Mappings
-* that are instances of the AST Region class. It then creates a new
-* Mapping from which all Regions have been removed. If a Region
-* cannot simply be removed (for instance, if it is a component of a
-* parallel CmpMap), then it is replaced with an equivalent UnitMap
-* in the returned Mapping.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the original Mapping.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astRemoveRegions()
-f AST_REMOVEREGIONS = INTEGER
-* A new pointer to the (possibly modified) Mapping.
-
-* Applicability:
-* CmpFrame
-* If the supplied Mapping is a CmpFrame, any component Frames that
-* are instances of the Region class are replaced by the equivalent
-* Frame.
-* FrameSet
-* If the supplied Mapping is a FrameSet, the returned Mapping
-* will be a copy of the supplied FrameSet in which Regions have
-* been removed from all the inter-Frame Mappings, and any Frames
-* which are instances of the Region class are repalced by the
-* equivalent Frame.
-* Mapping
-* This function applies to all Mappings.
-* Region
-* If the supplied Mapping is a Region, the returned Mapping will
-* be the equivalent Frame.
-
-* Notes:
-* - This function can safely be applied even to Mappings which
-* contain no Regions. If no Regions are found, it
-c behaves exactly like astClone and returns a pointer to the
-f behaves exactly like AST_CLONE and returns a pointer to the
-* original Mapping.
-* - The Mapping returned by this function may not be independent
-* of the original (even if some Regions were removed), and
-* modifying it may therefore result in indirect modification of
-* the original. If a completely independent result is required, a
-c copy should be made using astCopy.
-f copy should be made using AST_COPY.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-*/
-
-/* This base iplementation just returns a clone of the supplied Mapping
- pointer. Sub-classes should override it as necessary. */
- return astClone( this );
-}
-
-static void ReportPoints( AstMapping *this, int forward,
- AstPointSet *in_points, AstPointSet *out_points, int *status ) {
-/*
-*+
-* Name:
-* astReportPoints
-
-* Purpose:
-* Report the effect of transforming a set of points using a Mapping.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "mapping.h"
-* void astReportPoints( AstMapping *this, int forward,
-* AstPointSet *in_points, AstPointSet *out_points )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-* This function reports the coordinates of a set of points before
-* and after being transformed by a Mapping, by writing them to
-* standard output.
-
-* Parameters:
-* this
-* Pointer to the Mapping.
-* forward
-* A non-zero value indicates that the Mapping's forward
-* coordinate transformation has been applied, while a zero
-* value indicates the inverse transformation.
-* in_points
-* Pointer to a PointSet which is associated with the
-* coordinates of a set of points before the Mapping was
-* applied.
-* out_points
-* Pointer to a PointSet which is associated with the
-* coordinates of the same set of points after the Mapping has
-* been applied.
-
-* Notes:
-* - This method is provided as a development and debugging aid to
-* be invoked when coordinates are transformed by public Mapping
-* methods and under control of the "Report" Mapping attribute.
-* - Derived clases may over-ride this method in order to change
-* the way in which coordinates are formatted, etc.
-*-
-*/
-
-/* Local Variables: */
- double **ptr_in; /* Pointer to array of input data pointers */
- double **ptr_out; /* Pointer to array of output data pointers */
- int coord; /* Loop counter for coordinates */
- int ncoord_in; /* Number of input coordinates per point */
- int ncoord_out; /* Number of output coordinates per point */
- int npoint; /* Number of points to report */
- int npoint_in; /* Number of input points */
- int npoint_out; /* Number of output points */
- int point; /* Loop counter for points */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain the numbers of points and coordinates associated with each
- PointSet. */
- npoint_in = astGetNpoint( in_points );
- npoint_out = astGetNpoint( out_points );
- ncoord_in = astGetNcoord( in_points );
- ncoord_out = astGetNcoord( out_points );
-
-/* Obtain the pointers that give access to the coordinate data
- associated with each PointSet. */
- ptr_in = astGetPoints( in_points );
- ptr_out = astGetPoints( out_points );
-
-/* In the event that both PointSets don't contain equal numbers of
- points (this shouldn't actually happen), simply use the minimum
- number. */
- npoint = ( npoint_in < npoint_out ) ? npoint_in : npoint_out;
-
-/* Loop to report the effect of the Mapping on each point in turn. */
- for ( point = 0; point < npoint; point++ ) {
-
-/* Report the input coordinates (in parentheses and separated by
- commas). Replace coordinate values of AST__BAD with the string
- "<bad>" to indicate missing values. */
- printf( "(" );
- for ( coord = 0; coord < ncoord_in; coord++ ) {
- if ( ptr_in[ coord ][ point ] == AST__BAD ) {
- printf( "%s<bad>", coord ? ", " : "" );
- } else {
- printf( "%s%.*g", coord ? ", " : "",
- DBL_DIG, ptr_in[ coord ][ point ] );
- }
- }
-
-/* Similarly report the output coordinates. */
- printf( ") --> (" );
- for ( coord = 0; coord < ncoord_out; coord++ ) {
- if ( ptr_out[ coord ][ point ] == AST__BAD ) {
- printf( "%s<bad>", coord ? ", " : "" );
- } else {
- printf( "%s%.*g", coord ? ", " : "",
- DBL_DIG, ptr_out[ coord ][ point ] );
- }
- }
- printf( ")\n" );
- }
-}
-
-/*
-*++
-* Name:
-c astResample<X>
-f AST_RESAMPLE<X>
-
-* Purpose:
-* Resample a region of a data grid.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "mapping.h"
-c int astResample<X>( AstMapping *this, int ndim_in,
-c const int lbnd_in[], const int ubnd_in[],
-c const <Xtype> in[], const <Xtype> in_var[],
-c int interp, void (* finterp)(),
-c const double params[], int flags,
-c double tol, int maxpix,
-c <Xtype> badval, int ndim_out,
-c const int lbnd_out[], const int ubnd_out[],
-c const int lbnd[], const int ubnd[],
-c <Xtype> out[], <Xtype> out_var[] );
-f RESULT = AST_RESAMPLE<X>( THIS, NDIM_IN, LBND_IN, UBND_IN, IN, IN_VAR,
-f INTERP, FINTERP, PARAMS, FLAGS,
-f TOL, MAXPIX, BADVAL,
-f NDIM_OUT, LBND_OUT, UBND_OUT,
-f LBND, UBND, OUT, OUT_VAR, STATUS )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-* This is a set of functions for resampling gridded data (e.g. an
-* image) under the control of a geometrical transformation, which
-* is specified by a Mapping. The functions operate on a pair of
-* data grids (input and output), each of which may have any number
-* of dimensions. Resampling may be restricted to a specified
-* region of the output grid. An associated grid of error estimates
-* associated with the input data may also be supplied (in the form
-* of variance values), so as to produce error estimates for the
-* resampled output data. Propagation of missing data (bad pixels)
-* is supported.
-*
-* You should use a resampling function which matches the numerical
-* type of the data you are processing by replacing <X> in
-c the generic function name astResample<X> by an appropriate 1- or
-f the generic function name AST_RESAMPLE<X> by an appropriate 1- or
-* 2-character type code. For example, if you are resampling data
-c with type "float", you should use the function astResampleF (see
-f with type REAL, you should use the function AST_RESAMPLER (see
-* the "Data Type Codes" section below for the codes appropriate to
-* other numerical types).
-*
-* Resampling of the grid of input data is performed by
-* transforming the coordinates of the centre of each output grid
-* element (or pixel) into the coordinate system of the input grid.
-* Since the resulting coordinates will not, in general, coincide
-* with the centre of an input pixel, sub-pixel interpolation is
-* performed between the neighbouring input pixels. This produces a
-* resampled value which is then assigned to the output pixel. A
-* choice of sub-pixel interpolation schemes is provided, but you
-* may also implement your own.
-*
-* This algorithm samples the input data value, it does not integrate
-* it. Thus total data value in the input image will not, in general,
-* be conserved. However, an option is provided (see the "Control Flags"
-* section below) which can produce approximate flux conservation by
-* scaling the output values using the ratio of the output pixel size
-* to the input pixel size. However, if accurate flux conservation is
-* important to you, consder using the
-c astRebin<X> or astRebinSeq<X> family of functions
-f AST_REBIN<X> or AST_REBINSEQ<X> family of routines
-* instead.
-*
-* Output pixel coordinates are transformed into the coordinate
-* system of the input grid using the inverse transformation of the
-* Mapping which is supplied. This means that geometrical features
-* in the input data are subjected to the Mapping's forward
-* transformation as they are transferred from the input to the
-* output grid (although the Mapping's forward transformation is
-* not explicitly used).
-*
-* In practice, transforming the coordinates of every pixel of a
-* large data grid can be time-consuming, especially if the Mapping
-* involves complicated functions, such as sky projections. To
-* improve performance, it is therefore possible to approximate
-* non-linear Mappings by a set of linear transformations which are
-* applied piece-wise to separate sub-regions of the data. This
-* approximation process is applied automatically by an adaptive
-* algorithm, under control of an accuracy criterion which
-* expresses the maximum tolerable geometrical distortion which may
-* be introduced, as a fraction of a pixel.
-*
-* This algorithm first attempts to approximate the Mapping with a
-* linear transformation applied over the whole region of the
-* output grid which is being used. If this proves to be
-* insufficiently accurate, the output region is sub-divided into
-* two along its largest dimension and the process is repeated
-* within each of the resulting sub-regions. This process of
-* sub-division continues until a sufficiently good linear
-* approximation is found, or the region to which it is being
-* applied becomes too small (in which case the original Mapping is
-* used directly).
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to a Mapping, whose inverse transformation will be
-* used to transform the coordinates of pixels in the output
-* grid into the coordinate system of the input grid. This
-* yields the positions which are used to obtain resampled
-* values by sub-pixel interpolation within the input grid.
-*
-* The number of input coordinates used by this Mapping (as
-* given by its Nin attribute) should match the number of input
-c grid dimensions given by the value of "ndim_in"
-f grid dimensions given by the value of NDIM_IN
-* below. Similarly, the number of output coordinates (Nout
-* attribute) should match the number of output grid dimensions
-c given by "ndim_out".
-f given by NDIM_OUT.
-c ndim_in
-f NDIM_IN = INTEGER (Given)
-* The number of dimensions in the input grid. This should be at
-* least one.
-c lbnd_in
-f LBND_IN( NDIM_IN ) = INTEGER (Given)
-c Pointer to an array of integers, with "ndim_in" elements,
-f An array
-* containing the coordinates of the centre of the first pixel
-* in the input grid along each dimension.
-c ubnd_in
-f UBND_IN( NDIM_IN ) = INTEGER (Given)
-c Pointer to an array of integers, with "ndim_in" elements,
-f An array
-* containing the coordinates of the centre of the last pixel in
-* the input grid along each dimension.
-*
-c Note that "lbnd_in" and "ubnd_in" together define the shape
-f Note that LBND_IN and UBND_IN together define the shape
-* and size of the input grid, its extent along a particular
-c (j'th) dimension being ubnd_in[j]-lbnd_in[j]+1 (assuming the
-c index "j" to be zero-based). They also define
-f (J'th) dimension being UBND_IN(J)-LBND_IN(J)+1. They also define
-* the input grid's coordinate system, each pixel having unit
-* extent along each dimension with integral coordinate values
-* at its centre.
-c in
-f IN( * ) = <Xtype> (Given)
-c Pointer to an array, with one element for each pixel in the
-f An array, with one element for each pixel in the
-* input grid, containing the input data to be resampled. The
-* numerical type of this array should match the 1- or
-* 2-character type code appended to the function name (e.g. if
-c you are using astResampleF, the type of each array element
-c should be "float").
-f you are using AST_RESAMPLER, the type of each array element
-f should be REAL).
-*
-* The storage order of data within this array should be such
-* that the index of the first grid dimension varies most
-* rapidly and that of the final dimension least rapidly
-c (i.e. Fortran array indexing is used).
-f (i.e. normal Fortran array storage order).
-c in_var
-f IN_VAR( * ) = <Xtype> (Given)
-c An optional pointer to a second array with the same size and
-c type as the "in" array. If given, this should contain a set
-c of non-negative values which represent estimates of the
-c statistical variance associated with each element of the "in"
-c array. If this array is supplied (together with the
-c corresponding "out_var" array), then estimates of the
-c variance of the resampled output data will be calculated.
-c
-c If no input variance estimates are being provided, a NULL
-c pointer should be given.
-f An optional second array with the same size and type as the
-f IN array. If the AST__USEVAR flag is set via the FLAGS
-f argument (below), this array should contain a set of
-f non-negative values which represent estimates of the
-f statistical variance associated with each element of the IN
-f array. Estimates of the variance of the resampled output data
-f will then be calculated.
-f
-f If the AST__USEVAR flag is not set, no input variance
-f estimates are required and this array will not be used. A
-f dummy (e.g. one-element) array may then be supplied.
-c interp
-f INTERP = INTEGER (Given)
-c This parameter specifies the scheme to be used for sub-pixel
-f This argument specifies the scheme to be used for sub-pixel
-* interpolation within the input grid. It may be used to select
-* from a set of pre-defined schemes by supplying one of the
-* values described in the "Sub-Pixel Interpolation Schemes"
-* section below. If a value of zero is supplied, then the
-* default linear interpolation scheme is used (equivalent to
-* supplying the value AST__LINEAR).
-*
-* Alternatively, you may supply a value which indicates that
-c you will provide your own function to perform sub-pixel
-c interpolation by means of the "finterp " parameter. Again, see
-f you will provide your own routine to perform sub-pixel
-f interpolation by means of the FINTERP argument. Again, see
-* the "Sub-Pixel Interpolation Schemes" section below for
-* details.
-c finterp
-f FINTERP = SUBROUTINE (Given)
-c If the value given for the "interp" parameter indicates that
-c you will provide your own function for sub-pixel
-c interpolation, then a pointer to that function should be
-c given here. For details of the interface which the function
-c should have (several are possible, depending on the value of
-c "interp"), see the "Sub-Pixel Interpolation Schemes" section
-c below.
-f If the value given for the INTERP argument indicates that you
-f will provide your own routine for sub-pixel interpolation,
-f then the name of that routine should be given here (the name
-f should also appear in a Fortran EXTERNAL statement in the
-f routine which invokes AST_RESAMPLE<X>). For details of the
-f interface which the routine should have (several are
-f possible, depending on the value of INTERP), see the
-f "Sub-Pixel Interpolation Schemes" section below.
-*
-c If the "interp" parameter has any other value, corresponding
-c to one of the pre-defined interpolation schemes, then this
-c function will not be used and you may supply a NULL pointer.
-f If the INTERP argument has any other value, corresponding to
-f one of the pre-defined interpolation schemes, then this
-f routine will not be used and you may supply the null routine
-f AST_NULL here (note only one underscore). No EXTERNAL
-f statement is required for this routine, so long as the AST_PAR
-f include file has been used.
-c params
-f PARAMS( * ) = DOUBLE PRECISION (Given)
-c An optional pointer to an array of double which should contain
-f An optional array which should contain
-* any additional parameter values required by the sub-pixel
-* interpolation scheme. If such parameters are required, this
-* will be noted in the "Sub-Pixel Interpolation Schemes"
-c section below (you may also use this array to pass values
-c to your own interpolation function).
-f section below (you may also use this array to pass values
-f to your own interpolation routine).
-*
-c If no additional parameters are required, this array is not
-c used and a NULL pointer may be given.
-f If no additional parameters are required, this array is not
-f used. A dummy (e.g. one-element) array may then be supplied.
-c flags
-f FLAGS = INTEGER (Given)
-c The bitwise OR of a set of flag values which may be used to
-f The sum of a set of flag values which may be used to
-* provide additional control over the resampling operation. See
-* the "Control Flags" section below for a description of the
-* options available. If no flag values are to be set, a value
-* of zero should be given.
-c tol
-f TOL = DOUBLE PRECISION (Given)
-* The maximum tolerable geometrical distortion which may be
-* introduced as a result of approximating non-linear Mappings
-* by a set of piece-wise linear transformations. This should be
-* expressed as a displacement in pixels in the input grid's
-* coordinate system.
-*
-* If piece-wise linear approximation is not required, a value
-* of zero may be given. This will ensure that the Mapping is
-* used without any approximation, but may increase execution
-* time.
-c maxpix
-f MAXPIX = INTEGER (Given)
-* A value which specifies an initial scale size (in pixels) for
-* the adaptive algorithm which approximates non-linear Mappings
-* with piece-wise linear transformations. Normally, this should
-* be a large value (larger than any dimension of the region of
-* the output grid being used). In this case, a first attempt to
-* approximate the Mapping by a linear transformation will be
-* made over the entire output region.
-*
-* If a smaller value is used, the output region will first be
-c divided into sub-regions whose size does not exceed "maxpix"
-f divided into sub-regions whose size does not exceed MAXPIX
-* pixels in any dimension. Only at this point will attempts at
-* approximation commence.
-*
-* This value may occasionally be useful in preventing false
-* convergence of the adaptive algorithm in cases where the
-* Mapping appears approximately linear on large scales, but has
-* irregularities (e.g. holes) on smaller scales. A value of,
-* say, 50 to 100 pixels can also be employed as a safeguard in
-* general-purpose software, since the effect on performance is
-* minimal.
-*
-* If too small a value is given, it will have the effect of
-* inhibiting linear approximation altogether (equivalent to
-c setting "tol" to zero). Although this may degrade
-f setting TOL to zero). Although this may degrade
-* performance, accurate results will still be obtained.
-c badval
-f BADVAL = <Xtype> (Given)
-* This argument should have the same type as the elements of
-c the "in" array. It specifies the value used to flag missing
-f the IN array. It specifies the value used to flag missing
-* data (bad pixels) in the input and output arrays.
-*
-c If the AST__USEBAD flag is set via the "flags" parameter,
-f If the AST__USEBAD flag is set via the FLAGS argument,
-c then this value is used to test for bad pixels in the "in"
-c (and "in_var") array(s).
-f then this value is used to test for bad pixels in the IN
-f (and IN_VAR) array(s).
-*
-c Unless the AST__NOBAD flag is set via the "flags" parameter,
-f Unless the AST__NOBAD flag is set via the FLAGS argument,
-* this value is also used to flag any output
-c elements in the "out" (and "out_var") array(s) for which
-f elements in the OUT (and OUT_VAR) array(s) for which
-* resampled values could not be obtained (see the "Propagation
-* of Missing Data" section below for details of the
-c circumstances under which this may occur). The astResample<X>
-f circumstances under which this may occur). The AST_RESAMPLE<X>
-* function return value indicates whether any such values have
-* been produced. If the AST__NOBAD flag is set. then output array
-* elements for which no resampled value could be obtained are
-* left set to the value they had on entry to this function.
-c ndim_out
-f NDIM_OUT = INTEGER (Given)
-* The number of dimensions in the output grid. This should be
-* at least one. It need not necessarily be equal to the number
-* of dimensions in the input grid.
-c lbnd_out
-f LBND_OUT( NDIM_OUT ) = INTEGER (Given)
-c Pointer to an array of integers, with "ndim_out" elements,
-f An array
-* containing the coordinates of the centre of the first pixel
-* in the output grid along each dimension.
-c ubnd_out
-f UBND_OUT( NDIM_OUT ) = INTEGER (Given)
-c Pointer to an array of integers, with "ndim_out" elements,
-f An array
-* containing the coordinates of the centre of the last pixel in
-* the output grid along each dimension.
-*
-c Note that "lbnd_out" and "ubnd_out" together define the
-f Note that LBND_OUT and UBND_OUT together define the
-* shape, size and coordinate system of the output grid in the
-c same way as "lbnd_in" and "ubnd_in" define the shape, size
-f same way as LBND_IN and UBND_IN define the shape, size
-* and coordinate system of the input grid.
-c lbnd
-f LBND( NDIM_OUT ) = INTEGER (Given)
-c Pointer to an array of integers, with "ndim_out" elements,
-f An array
-* containing the coordinates of the first pixel in the region
-* of the output grid for which a resampled value is to be
-* calculated.
-c ubnd
-f UBND( NDIM_OUT ) = INTEGER (Given)
-c Pointer to an array of integers, with "ndim_out" elements,
-f An array
-* containing the coordinates of the last pixel in the region of
-* the output grid for which a resampled value is to be
-* calculated.
-*
-c Note that "lbnd" and "ubnd" together define the shape and
-f Note that LBND and UBND together define the shape and
-* position of a (hyper-)rectangular region of the output grid
-* for which resampled values should be produced. This region
-* should lie wholly within the extent of the output grid (as
-c defined by the "lbnd_out" and "ubnd_out" arrays). Regions of
-f defined by the LBND_OUT and UBND_OUT arrays). Regions of
-* the output grid lying outside this region will not be
-* modified.
-c out
-f OUT( * ) = <Xtype> (Returned)
-c Pointer to an array, with one element for each pixel in the
-f An array, with one element for each pixel in the
-* output grid, into which the resampled data values will be
-* returned. The numerical type of this array should match that
-c of the "in" array, and the data storage order should be such
-f of the IN array, and the data storage order should be such
-* that the index of the first grid dimension varies most
-* rapidly and that of the final dimension least rapidly
-c (i.e. Fortran array indexing is used).
-f (i.e. normal Fortran array storage order).
-c out_var
-f OUT_VAR( * ) = <Xtype> (Returned)
-c An optional pointer to an array with the same type and size
-c as the "out" array. If given, this array will be used to
-c return variance estimates for the resampled data values. This
-c array will only be used if the "in_var" array has also been
-c supplied.
-f An optional array with the same type and size as the OUT
-f array. If the AST__USEVAR flag is set via the FLAGS argument,
-f this array will be used to return variance estimates for the
-f resampled data values.
-*
-* The output variance values will be calculated on the
-* assumption that errors on the input data values are
-* statistically independent and that their variance estimates
-* may simply be summed (with appropriate weighting factors)
-* when several input pixels contribute to an output data
-* value. If this assumption is not valid, then the output error
-* estimates may be biased. In addition, note that the
-* statistical errors on neighbouring output data values (as
-* well as the estimates of those errors) may often be
-* correlated, even if the above assumption about the input data
-* is correct, because of the sub-pixel interpolation schemes
-* employed.
-*
-c If no output variance estimates are required, a NULL pointer
-c should be given.
-f If the AST__USEVAR flag is not set, no output variance
-f estimates will be calculated and this array will not be
-f used. A dummy (e.g. one-element) array may then be supplied.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astResample<X>()
-f AST_RESAMPLE<X> = INTEGER
-* The number of output pixels for which no valid resampled value
-* could be obtained. Thus, in the absence of any error, a returned
-* value of zero indicates that all the required output pixels
-* received valid resampled data values (and variances). See the
-c "badval" and "flags" parameters.
-f BADVAL and FLAGS arguments.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-
-* Data Type Codes:
-* To select the appropriate resampling function, you should
-c replace <X> in the generic function name astResample<X> with a
-f replace <X> in the generic function name AST_RESAMPLE<X> with a
-* 1- or 2-character data type code, so as to match the numerical
-* type <Xtype> of the data you are processing, as follows:
-c - D: double
-c - F: float
-c - L: long int
-c - UL: unsigned long int
-c - I: int
-c - UI: unsigned int
-c - S: short int
-c - US: unsigned short int
-c - B: byte (signed char)
-c - UB: unsigned byte (unsigned char)
-f - D: DOUBLE PRECISION
-f - R: REAL
-f - I: INTEGER
-f - UI: INTEGER (treated as unsigned)
-f - S: INTEGER*2 (short integer)
-f - US: INTEGER*2 (short integer, treated as unsigned)
-f - B: BYTE (treated as signed)
-f - UB: BYTE (treated as unsigned)
-*
-c For example, astResampleD would be used to process "double"
-c data, while astResampleS would be used to process "short int"
-c data, etc.
-f For example, AST_RESAMPLED would be used to process DOUBLE
-f PRECISION data, while AST_RESAMPLES would be used to process
-f short integer data (stored in an INTEGER*2 array), etc.
-f
-f For compatibility with other Starlink facilities, the codes W
-f and UW are provided as synonyms for S and US respectively (but
-f only in the Fortran interface to AST).
-
-* Sub-Pixel Interpolation Schemes:
-* There is no such thing as a perfect sub-pixel interpolation
-* scheme and, in practice, all resampling will result in some
-* degradation of gridded data. A range of schemes is therefore
-* provided, from which you can choose the one which best suits
-* your needs.
-*
-* In general, a balance must be struck between schemes which tend
-* to degrade sharp features in the data by smoothing them, and
-* those which attempt to preserve sharp features. The latter will
-* often tend to introduce unwanted oscillations, typically visible
-* as "ringing" around sharp features and edges, especially if the
-* data are under-sampled (i.e. if the sharpest features are less
-* than about two pixels across). In practice, a good interpolation
-* scheme is likely to be a compromise and may exhibit some aspects
-* of both these features.
-*
-* For under-sampled data, some interpolation schemes may appear to
-* preserve data resolution because they transform single input
-* pixels into single output pixels, rather than spreading their
-* data between several output pixels. While this may look
-* better cosmetically, it can result in a geometrical shift of
-* sharp features in the data. You should beware of this if you
-* plan to use such features (e.g.) for image alignment.
-*
-* The following are two easy-to-use sub-pixel interpolation
-* schemes which are generally applicable. They are selected by
-c supplying the appropriate value (defined in the "ast.h" header
-c file) via the "interp" parameter. In these cases, the "finterp"
-c and "params" parameters are not used:
-f supplying the appropriate value (defined in the AST_PAR include
-f file) via the INTERP argument. In these cases, the FINTERP
-f and PARAMS arguments are not used:
-*
-* - AST__NEAREST: This is the simplest possible scheme, in which
-* the value of the input pixel with the nearest centre to the
-* interpolation point is used. This is very quick to execute and
-* will preserve single-pixel features in the data, but may
-* displace them by up to half their width along each dimension. It
-* often gives a good cosmetic result, so is useful for quick-look
-* processing, but is unsuitable if accurate geometrical
-* transformation is required.
-* - AST__LINEAR: This is the default scheme, which uses linear
-* interpolation between the nearest neighbouring pixels in the
-* input grid (there are two neighbours in one dimension, four
-* neighbours in two dimensions, eight in three dimensions,
-* etc.). It is superior to the nearest-pixel scheme (above) in not
-* displacing features in the data, yet it still executes fairly
-* rapidly. It is generally a safe choice if you do not have any
-* particular reason to favour another scheme, since it cannot
-* introduce oscillations. However, it does introduce some spatial
-* smoothing which varies according to the distance of the
-* interpolation point from the neighbouring pixels. This can
-* degrade the shape of sharp features in the data in a
-* position-dependent way. It may also show in the output variance
-* grid (if used) as a pattern of stripes or fringes.
-*
-* An alternative set of interpolation schemes is based on forming
-* the interpolated value from the weighted sum of a set of
-* surrounding pixel values (not necessarily just the nearest
-* neighbours). This approach has its origins in the theory of
-* digital filtering, in which interpolated values are obtained by
-* conceptually passing the sampled data (represented by a grid of
-* delta functions) through a linear filter which implements a
-* convolution. Because the convolution kernel is continuous, the
-* convolution yields a continuous function which may then be
-* evaluated at fractional pixel positions. The (possibly
-* multi-dimensional) kernel is usually regarded as "separable" and
-* formed from the product of a set of identical 1-dimensional
-* kernel functions, evaluated along each dimension. Different
-* interpolation schemes are then distinguished by the choice of
-* this 1-dimensional interpolation kernel. The number of
-* surrounding pixels which contribute to the result may also be
-* varied.
-*
-* From a practical standpoint, it is useful to divide the weighted
-* sum of pixel values by the sum of the weights when determining
-* the interpolated value. Strictly, this means that a true
-* convolution is no longer being performed. However, the
-* distinction is rarely important in practice because (for
-* slightly subtle reasons) the sum of weights is always
-* approximately constant for good interpolation kernels. The
-* advantage of this technique, which is used here, is that it can
-* easily accommodate missing data and tends to minimise unwanted
-* oscillations at the edges of the data grid.
-*
-* In the following schemes, which are based on a 1-dimensional
-c interpolation kernel, the first element of the "params" array
-f interpolation kernel, the first element of the PARAMS array
-* should be used to specify how many pixels are to contribute to the
-* interpolated result on either side of the interpolation point in
-* each dimension (the nearest integer value is used). Execution time
-* increases rapidly with this number. Typically, a value of 2 is
-* appropriate and the minimum value used will be 1 (i.e. two pixels
-* altogether, one on either side of the interpolation point).
-c A value of zero or less may be given for "params[0]"
-f A value of zero or less may be given for PARAMS(1)
-* to indicate that a suitable number of pixels should be calculated
-* automatically.
-*
-c In each of these cases, the "finterp" parameter is not used:
-f In each of these cases, the FINTERP argument is not used:
-*
-* - AST__SINC: This scheme uses a sinc(pi*x) kernel, where x is the
-* pixel offset from the interpolation point and sinc(z)=sin(z)/z. This
-* sometimes features as an "optimal" interpolation kernel in books on
-* image processing. Its supposed optimality depends on the assumption
-* that the data are band-limited (i.e. have no spatial frequencies above
-* a certain value) and are adequately sampled. In practice, astronomical
-* data rarely meet these requirements. In addition, high spatial
-* frequencies are often present due (e.g.) to image defects and cosmic
-* ray events. Consequently, substantial ringing can be experienced with
-* this kernel. The kernel also decays slowly with distance, so that
-* many surrounding pixels are required, leading to poor performance.
-* Abruptly truncating it, by using only a few neighbouring pixels,
-c improves performance and may reduce ringing (if "params[0]" is set to
-f improves performance and may reduce ringing (if PARAMS(1) is set to
-* zero, then only two pixels will be used on either side). However, a
-* more gradual truncation, as implemented by other kernels, is generally
-* to be preferred. This kernel is provided mainly so that you can
-* convince yourself not to use it!
-* - AST__SINCSINC: This scheme uses an improved kernel, of the form
-* sinc(pi*x).sinc(k*pi*x), with k a constant, out to the point where
-* sinc(k*pi*x) goes to zero, and zero beyond. The second sinc() factor
-* provides an "envelope" which gradually rolls off the normal sinc(pi*x)
-* kernel at large offsets. The width of this envelope is specified by
-* giving the number of pixels offset at which it goes to zero by means
-c of the "params[1]" value, which should be at least 1.0 (in addition,
-c setting "params[0]" to zero will select the number of contributing
-f of the PARAMS(2) value, which should be at least 1.0 (in addition,
-f setting PARAMS(1) to zero will select the number of contributing
-* pixels so as to utilise the full width of the kernel, out to where it
-c reaches zero). The case given by "params[0]=2, params[1]=2" is typically
-f reaches zero). The case given by PARAMS(1)=2, PARAMS(2)=2 is typically
-* a good choice and is sometimes known as the Lanczos kernel. This is a
-* valuable general-purpose interpolation scheme, intermediate in its
-* visual effect on images between the AST__NEAREST and AST__LINEAR
-* schemes. Although the kernel is slightly oscillatory, ringing is
-* adequately suppressed if the data are well sampled.
-* - AST__SINCCOS: This scheme uses a kernel of the form
-* sinc(pi*x).cos(k*pi*x), with k a constant, out to the point where
-* cos(k*pi*x) goes to zero, and zero beyond. As above, the cos() factor
-* provides an envelope which gradually rolls off the sinc() kernel
-* at large offsets. The width of this envelope is specified by giving
-* the number of pixels offset at which it goes to zero by means
-c of the "params[1]" value, which should be at least 1.0 (in addition,
-c setting "params[0]" to zero will select the number of contributing
-f of the PARAMS(2) value, which should be at least 1.0 (in addition,
-f setting PARAMS(1) to zero will select the number of contributing
-* pixels so as to utilise the full width of the kernel, out to where it
-* reaches zero). This scheme gives similar results to the
-* AST__SINCSINC scheme, which it resembles.
-* - AST__SINCGAUSS: This scheme uses a kernel of the form
-* sinc(pi*x).exp(-k*x*x), with k a positive constant. Here, the sinc()
-* kernel is rolled off using a Gaussian envelope which is specified by
-c giving its full-width at half-maximum (FWHM) by means of the "params[1]"
-c value, which should be at least 0.1 (in addition, setting "params[0]"
-f giving its full-width at half-maximum (FWHM) by means of the PARAMS(2)
-f value, which should be at least 0.1 (in addition, setting PARAMS(1)
-* to zero will select the number of contributing pixels so as to utilise
-* the width of the kernel out to where the envelope declines to 1% of its
-* maximum value). On astronomical images and spectra, good results are
-* often obtained by approximately matching the FWHM of the
-c envelope function, given by "params[1]", to the point spread function
-f envelope function, given by PARAMS(2), to the point spread function
-* of the input data. However, there does not seem to be any theoretical
-* reason for this.
-* - AST__SOMB: This scheme uses a somb(pi*x) kernel (a "sombrero"
-* function), where x is the pixel offset from the interpolation point
-* and somb(z)=2*J1(z)/z (J1 is a Bessel function of the first kind of
-* order 1). It is similar to the AST__SINC kernel, and has the same
-* parameter usage.
-* - AST__SOMBCOS: This scheme uses a kernel of the form
-* somb(pi*x).cos(k*pi*x), with k a constant, out to the point where
-* cos(k*pi*x) goes to zero, and zero beyond. It is similar to the
-* AST__SINCCOS kernel, and has the same parameter usage.
-*
-* In addition, the following schemes are provided which are not based
-* on a 1-dimensional kernel:
-*
-* - AST__BLOCKAVE: This scheme simply takes an average of all the
-* pixels on the input grid in a cube centred on the interpolation
-* point. The number of pixels in the cube is determined by the
-c value of the first element of the "params" array, which gives
-f value of the first element of the PARAMS array, which gives
-* the number of pixels in each dimension on either side of the
-c central point. Hence a block of (2 * params[0])^ndim_in
-f central point. Hence a block of (2 * PARAMS(1))**NDIM_IN
-* pixels in the input grid will be examined to determine the
-* value of the output pixel. If the variance is not being used
-c (var_in or var_out = NULL) then all valid pixels in this cube
-f (USEVAR = .FALSE.) then all valid pixels in this cube
-* will be averaged in to the result with equal weight.
-* If variances are being used, then each input pixel will be
-* weighted proportionally to the reciprocal of its variance; any
-* pixel without a valid variance will be discarded. This scheme
-* is suitable where the output grid is much coarser than the
-* input grid; if the ratio of pixel sizes is R then a suitable
-c value of params[0] may be R/2.
-f value of PARAMS(1) may be R/2.
-*
-c Finally, supplying the following values for "interp" allows you
-c to implement your own sub-pixel interpolation scheme by means of
-c your own function. You should supply a pointer to this function
-c via the "finterp" parameter:
-f Finally, supplying the following values for INTERP allows you to
-f implement your own sub-pixel interpolation scheme by means of
-f your own routine. You should supply the name of this routine via
-f the FINTERP argument:
-*
-c - AST__UKERN1: In this scheme, you supply a function to evaluate
-c your own 1-dimensional interpolation kernel, which is then used
-c to perform sub-pixel interpolation (as described above). The
-c function you supply should have the same interface as the
-c fictitious astUkern1 function (q.v.). In addition, a value
-c should be given via "params[0]" to specify the number of
-c neighbouring pixels which are to contribute to each interpolated
-c value (in the same way as for the pre-defined interpolation
-c schemes described above). Other elements of the "params" array
-c are available to pass values to your interpolation function.
-f - AST__UKERN1: In this scheme, you supply a routine to evaluate
-f your own 1-dimensional interpolation kernel, which is then used
-f to perform sub-pixel interpolation (as described above). The
-f routine you supply should have the same interface as the
-f fictitious AST_UKERN1 routine (q.v.). In addition, a value
-f should be given via PARAMS(1) to specify the number of
-f neighbouring pixels which are to contribute to each interpolated
-f value (in the same way as for the pre-defined interpolation
-f schemes described above). Other elements of the PARAMS array
-f are available to pass values to your interpolation routine.
-*
-c - AST__UINTERP: This is a completely general scheme, in which
-c your interpolation function has access to all of the input
-c data. This allows you to implement any interpolation algorithm
-c you choose, which could (for example) be non-linear, or
-c adaptive. In this case, the astResample<X> functions play no
-c role in the sub-pixel interpolation process and simply handle
-c the geometrical transformation of coordinates and other
-c housekeeping. The function you supply should have the same
-c interface as the fictitious astUinterp function (q.v.). In this
-c case, the "params" parameter is not used by astResample<X>, but
-c is available to pass values to your interpolation function.
-f - AST__UINTERP: This is a completely general scheme, in which
-f your interpolation routine has access to all of the input
-f data. This allows you to implement any interpolation algorithm
-f you choose, which could (for example) be non-linear, or
-f adaptive. In this case, the AST_RESAMPLE<X> functions play no
-f role in the sub-pixel interpolation process and simply handle
-f the geometrical transformation of coordinates and other
-f housekeeping. The routine you supply should have the same
-f interface as the fictitious AST_UINTERP routine (q.v.). In this
-f case, the PARAMS argument is not used by AST_RESAMPLE<X>, but
-f is available to pass values to your interpolation routine.
-
-* Control Flags:
-c The following flags are defined in the "ast.h" header file and
-f The following flags are defined in the AST_PAR include file and
-* may be used to provide additional control over the resampling
-* process. Having selected a set of flags, you should supply the
-c bitwise OR of their values via the "flags" parameter:
-f sum of their values via the FLAGS argument:
-*
-* - AST__NOBAD: Indicates that any output array elements for which no
-* resampled value could be obtained should be left set to the value
-* they had on entry to this function. If this flag is not supplied,
-* such output array elements are set to the value supplied for
-c parameter "badval". Note, this flag cannot be used in conjunction
-f argument BADVAL. Note, this flag cannot be used in conjunction
-* with the AST__CONSERVEFLUX flag (an error will be reported if both
-* flags are specified).
-* - AST__URESAMP1, 2, 3 & 4: A set of four flags which are
-* reserved for your own use. They may be used to pass private
-c information to any sub-pixel interpolation function which you
-f information to any sub-pixel interpolation routine which you
-* implement yourself. They are ignored by all the pre-defined
-* interpolation schemes.
-* - AST__USEBAD: Indicates that there may be bad pixels in the
-* input array(s) which must be recognised by comparing with the
-c value given for "badval" and propagated to the output array(s).
-f value given for BADVAL and propagated to the output array(s).
-* If this flag is not set, all input values are treated literally
-c and the "badval" value is only used for flagging output array
-f and the BADVAL value is only used for flagging output array
-* values.
-f - AST__USEVAR: Indicates that variance information should be
-f processed in order to provide estimates of the statistical error
-f associated with the resampled values. If this flag is not set,
-f no variance processing will occur and the IN_VAR and OUT_VAR
-f arrays will not be used. (Note that this flag is only available
-f in the Fortran interface to AST.)
-* - AST__CONSERVEFLUX: Indicates that the output pixel values should
-* be scaled in such a way as to preserve (approximately) the total data
-* value in a feature on the sky. Without this flag, each output pixel
-* value represents an instantaneous sample of the input data values at
-* the corresponding input position. This is appropriate if the input
-* data represents the spatial density of some quantity (e.g. surface
-* brightness in Janskys per square arc-second) because the output
-* pixel values will have the same normalisation and units as the
-* input pixel values. However, if the input data values represent
-* flux (or some other physical quantity) per pixel, then the
-* AST__CONSERVEFLUX flag could be used. This causes each output
-* pixel value to be scaled by the ratio of the output pixel size to
-* the input pixel size.
-*
-* This flag can only be used if the Mapping is succesfully approximated
-* by one or more linear transformations. Thus an error will be reported
-* if it used when the
-c "tol" parameter
-f TOL argument
-* is set to zero (which stops the use of linear approximations), or
-* if the Mapping is too non-linear to be approximated by a piece-wise
-* linear transformation. The ratio of output to input pixel size is
-* evaluated once for each panel of the piece-wise linear approximation to
-* the Mapping, and is assumed to be constant for all output pixels in the
-* panel. The scaling factors for adjacent panels will in general
-* differ slightly, and so the joints between panels may be visible when
-* viewing the output image at high contrast. If this is a problem,
-* reduce the value of the
-c "tol" parameter
-f TOL argument
-* until the difference between adjacent panels is sufficiently small
-* to be insignificant.
-*
-* Note, this flag cannot be used in conjunction with the AST__NOBAD
-* flag (an error will be reported if both flags are specified).
-*
-* Flux conservation can only be approximate when using a resampling
-* algorithm. For accurate flux conservation use the
-c astRebin<X> or astRebinSeq<X> function
-f AST_REBIN<X> or AST_REBINSEQ<X> routine
-* instead.
-
-* Propagation of Missing Data:
-* Unless the AST__NOBAD flag is specified, instances of missing data
-* (bad pixels) in the output grid are
-c identified by occurrences of the "badval" value in the "out"
-f identified by occurrences of the BADVAL value in the OUT
-* array. These may be produced if any of the following happen:
-*
-* - The input position (the transformed position of the output
-* pixel's centre) lies outside the boundary of the grid of input
-* pixels.
-* - The input position lies inside the boundary of a bad input
-* pixel. In this context, an input pixel is considered bad if its
-c data value is equal to "badval" and the AST__USEBAD flag is
-c set via the "flags" parameter.
-f data value is equal to BADVAL and the AST__USEBAD flag is
-f set via the FLAGS argument.
-* (Positions which have half-integral coordinate values, and
-* therefore lie on a pixel boundary, are regarded as lying within
-* the pixel with the larger, i.e. more positive, index.)
-* - The set of neighbouring input pixels (excluding those which
-* are bad) is unsuitable for calculating an interpolated
-* value. Whether this is true may depend on the sub-pixel
-* interpolation scheme in use.
-* - The interpolated value lies outside the range which can be
-c represented using the data type of the "out" array.
-f represented using the data type of the OUT array.
-*
-* In addition, associated output variance estimates (if
-c calculated) may be declared bad and flagged with the "badval"
-c value in the "out_var" array under any of the following
-f calculated) may be declared bad and flagged with the BADVAL
-f value in the OUT_VAR array under any of the following
-* circumstances:
-*
-c - The associated resampled data value (in the "out" array) is bad.
-f - The associated resampled data value (in the OUT array) is bad.
-* - The set of neighbouring input pixels which contributed to the
-* output data value do not all have valid variance estimates
-* associated with them. In this context, an input variance
-* estimate may be regarded as bad either because it has the value
-c "badval" (and the AST__USEBAD flag is set), or because it is
-f BADVAL (and the AST__USEBAD flag is set), or because it is
-* negative.
-* - The set of neighbouring input pixels for which valid variance
-* values are available is unsuitable for calculating an overall
-* variance value. Whether this is true may depend on the sub-pixel
-* interpolation scheme in use.
-* - The variance value lies outside the range which can be
-c represented using the data type of the "out_var" array.
-f represented using the data type of the OUT_VAR array.
-*
-* If the AST__NOBAD flag is specified via
-c parameter "flags",
-f argument FLAGS,
-* then output array elements that would otherwise be set to
-c "badval"
-f BADVAL
-* are instead left holding the value they had on entry to this
-* function. The number of such array elements is returned as
-* the function value.
-*--
-*/
-/* Define a macro to implement the function for a specific data
- type. */
-#define MAKE_RESAMPLE(X,Xtype) \
-static int Resample##X( AstMapping *this, int ndim_in, \
- const int lbnd_in[], const int ubnd_in[], \
- const Xtype in[], const Xtype in_var[], \
- int interp, void (* finterp)(), \
- const double params[], int flags, double tol, \
- int maxpix, Xtype badval, \
- int ndim_out, const int lbnd_out[], \
- const int ubnd_out[], const int lbnd[], \
- const int ubnd[], Xtype out[], Xtype out_var[], int *status ) { \
-\
-/* Local Variables: */ \
- astDECLARE_GLOBALS /* Thread-specific data */ \
- AstMapping *simple; /* Pointer to simplified Mapping */ \
- int idim; /* Loop counter for coordinate dimensions */ \
- int nin; /* Number of Mapping input coordinates */ \
- int nout; /* Number of Mapping output coordinates */ \
- int npix; /* Number of pixels in output region */ \
- int result; /* Result value to return */ \
-\
-/* Initialise. */ \
- result = 0; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* Get a pointer to a structure holding thread-specific global data values */ \
- astGET_GLOBALS(this); \
-\
-/* Obtain values for the Nin and Nout attributes of the Mapping. */ \
- nin = astGetNin( this ); \
- nout = astGetNout( this ); \
-\
-/* If OK, check that the number of input grid dimensions matches the \
- number required by the Mapping and is at least 1. Report an error \
- if necessary. */ \
- if ( astOK && ( ( ndim_in != nin ) || ( ndim_in < 1 ) ) ) { \
- astError( AST__NGDIN, "astResample"#X"(%s): Bad number of input grid " \
- "dimensions (%d).", status, astGetClass( this ), ndim_in ); \
- if ( ndim_in != nin ) { \
- astError( AST__NGDIN, "The %s given requires %d coordinate value%s " \
- "to specify an input position.", status, \
- astGetClass( this ), nin, ( nin == 1 ) ? "" : "s" ); \
- } \
- } \
-\
-/* If OK, also check that the number of output grid dimensions matches \
- the number required by the Mapping and is at least 1. Report an \
- error if necessary. */ \
- if ( astOK && ( ( ndim_out != nout ) || ( ndim_out < 1 ) ) ) { \
- astError( AST__NGDIN, "astResample"#X"(%s): Bad number of output grid " \
- "dimensions (%d).", status, astGetClass( this ), ndim_out ); \
- if ( ndim_out != nout ) { \
- astError( AST__NGDIN, "The %s given generates %s%d coordinate " \
- "value%s for each output position.", status, astGetClass( this ), \
- ( nout < ndim_out ) ? "only " : "", nout, \
- ( nout == 1 ) ? "" : "s" ); \
- } \
- } \
-\
-/* Check that the lower and upper bounds of the input grid are \
- consistent. Report an error if any pair is not. */ \
- if ( astOK ) { \
- for ( idim = 0; idim < ndim_in; idim++ ) { \
- if ( lbnd_in[ idim ] > ubnd_in[ idim ] ) { \
- astError( AST__GBDIN, "astResample"#X"(%s): Lower bound of " \
- "input grid (%d) exceeds corresponding upper bound " \
- "(%d).", status, astGetClass( this ), \
- lbnd_in[ idim ], ubnd_in[ idim ] ); \
- astError( AST__GBDIN, "Error in input dimension %d.", status, \
- idim + 1 ); \
- break; \
- } \
- } \
- } \
-\
-/* Check that the positional accuracy tolerance supplied is valid and \
- report an error if necessary. */ \
- if ( astOK && ( tol < 0.0 ) ) { \
- astError( AST__PATIN, "astResample"#X"(%s): Invalid positional " \
- "accuracy tolerance (%.*g pixel).", status, \
- astGetClass( this ), DBL_DIG, tol ); \
- astError( AST__PATIN, "This value should not be less than zero." , status); \
- } \
-\
-/* Check that the initial scale size in pixels supplied is valid and \
- report an error if necessary. */ \
- if ( astOK && ( maxpix < 0 ) ) { \
- astError( AST__SSPIN, "astResample"#X"(%s): Invalid initial scale " \
- "size in pixels (%d).", status, astGetClass( this ), maxpix ); \
- astError( AST__SSPIN, "This value should not be less than zero." , status); \
- } \
-\
-/* Check that the lower and upper bounds of the output grid are \
- consistent. Report an error if any pair is not. */ \
- if ( astOK ) { \
- for ( idim = 0; idim < ndim_out; idim++ ) { \
- if ( lbnd_out[ idim ] > ubnd_out[ idim ] ) { \
- astError( AST__GBDIN, "astResample"#X"(%s): Lower bound of " \
- "output grid (%d) exceeds corresponding upper bound " \
- "(%d).", status, astGetClass( this ), \
- lbnd_out[ idim ], ubnd_out[ idim ] ); \
- astError( AST__GBDIN, "Error in output dimension %d.", status, \
- idim + 1 ); \
- break; \
- } \
- } \
- } \
-\
-/* Similarly check the bounds of the output region. */ \
- if ( astOK ) { \
- for ( idim = 0; idim < ndim_out; idim++ ) { \
- if ( lbnd[ idim ] > ubnd[ idim ] ) { \
- astError( AST__GBDIN, "astResample"#X"(%s): Lower bound of " \
- "output region (%d) exceeds corresponding upper " \
- "bound (%d).", status, astGetClass( this ), \
- lbnd[ idim ], ubnd[ idim ] ); \
-\
-/* Also check that the output region lies wholly within the output \
- grid. */ \
- } else if ( lbnd[ idim ] < lbnd_out[ idim ] ) { \
- astError( AST__GBDIN, "astResample"#X"(%s): Lower bound of " \
- "output region (%d) is less than corresponding " \
- "bound of output grid (%d).", status, astGetClass( this ), \
- lbnd[ idim ], lbnd_out[ idim ] ); \
- } else if ( ubnd[ idim ] > ubnd_out[ idim ] ) { \
- astError( AST__GBDIN, "astResample"#X"(%s): Upper bound of " \
- "output region (%d) exceeds corresponding " \
- "bound of output grid (%d).", status, astGetClass( this ), \
- ubnd[ idim ], ubnd_out[ idim ] ); \
- } \
-\
-/* Say which dimension produced the error. */ \
- if ( !astOK ) { \
- astError( AST__GBDIN, "Error in output dimension %d.", status, \
- idim + 1 ); \
- break; \
- } \
- } \
- } \
-\
-/* If we are conserving flux, check "tol" is not zero. */ \
- if( ( flags & AST__CONSERVEFLUX ) && astOK ) { \
- if( tol == 0.0 ) { \
- astError( AST__CNFLX, "astResample"#X"(%s): Flux conservation was " \
- "requested but cannot be performed because zero tolerance " \
- "was also specified.", status, astGetClass( this ) ); \
-\
-/* Also check "nin" and "nout" are equal. */ \
- } else if( nin != nout ) { \
- astError( AST__CNFLX, "astResample"#X"(%s): Flux conservation was " \
- "requested but cannot be performed because the Mapping " \
- "has different numbers of inputs and outputs.", status, \
- astGetClass( this ) ); \
- } \
- } \
-\
-/* If OK, loop to determine how many pixels require resampled values. */ \
- simple = NULL; \
- if ( astOK ) { \
- npix = 1; \
- for ( idim = 0; idim < ndim_out; idim++ ) { \
- npix *= ubnd[ idim ] - lbnd[ idim ] + 1; \
- } \
-\
-/* If there are sufficient pixels to make it worthwhile, simplify the \
- Mapping supplied to improve performance. Otherwise, just clone the \
- Mapping pointer. Note we save a pointer to the original Mapping so \
- that lower-level functions can use it if they need to report an \
- error. */ \
- unsimplified_mapping = this; \
- if ( npix > 1024 ) { \
- simple = astSimplify( this ); \
- } else { \
- simple = astClone( this ); \
- } \
- } \
-\
-/* Report an error if the inverse transformation of this simplified \
- Mapping is not defined. */ \
- if ( !astGetTranInverse( simple ) && astOK ) { \
- astError( AST__TRNND, "astResample"#X"(%s): An inverse coordinate " \
- "transformation is not defined by the %s supplied.", status, \
- astGetClass( unsimplified_mapping ), \
- astGetClass( unsimplified_mapping ) ); \
- } \
-\
-/* Perform the resampling. Note that we pass all gridded data, the \
- interpolation function and the bad pixel value by means of pointer \
- types that obscure the underlying data type. This is to avoid \
- having to replicate functions unnecessarily for each data \
- type. However, we also pass an argument that identifies the data \
- type we have obscured. */ \
- result = ResampleAdaptively( simple, ndim_in, lbnd_in, ubnd_in, \
- (const void *) in, (const void *) in_var, \
- TYPE_##X, interp, finterp, \
- params, flags, tol, maxpix, \
- (const void *) &badval, \
- ndim_out, lbnd_out, ubnd_out, \
- lbnd, ubnd, \
- (void *) out, (void *) out_var, status ); \
-\
-/* Annul the pointer to the simplified/cloned Mapping. */ \
- simple = astAnnul( simple ); \
-\
-/* If an error occurred, clear the returned result. */ \
- if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
- return result; \
-}
-
-/* Expand the above macro to generate a function for each required
- data type. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-MAKE_RESAMPLE(LD,long double)
-#endif
-MAKE_RESAMPLE(D,double)
-MAKE_RESAMPLE(F,float)
-MAKE_RESAMPLE(L,long int)
-MAKE_RESAMPLE(UL,unsigned long int)
-MAKE_RESAMPLE(I,int)
-MAKE_RESAMPLE(UI,unsigned int)
-MAKE_RESAMPLE(S,short int)
-MAKE_RESAMPLE(US,unsigned short int)
-MAKE_RESAMPLE(B,signed char)
-MAKE_RESAMPLE(UB,unsigned char)
-
-/* Undefine the macro. */
-#undef MAKE_RESAMPLE
-
-static int ResampleAdaptively( AstMapping *this, int ndim_in,
- const int *lbnd_in, const int *ubnd_in,
- const void *in, const void *in_var,
- DataType type, int interp, void (* finterp)(),
- const double *params, int flags, double tol,
- int maxpix, const void *badval_ptr,
- int ndim_out, const int *lbnd_out,
- const int *ubnd_out, const int *lbnd,
- const int *ubnd, void *out, void *out_var, int *status ) {
-/*
-* Name:
-* ResampleAdaptively
-
-* Purpose:
-* Resample a section of a data grid adaptively.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int ResampleAdaptively( AstMapping *this, int ndim_in,
-* const int *lbnd_in, const int *ubnd_in,
-* const void *in, const void *in_var,
-* DataType type, int interp, void (* finterp)(),
-* const double *params, int flags, double tol,
-* int maxpix, const void *badval_ptr,
-* int ndim_out, const int *lbnd_out,
-* const int *ubnd_out, const int *lbnd,
-* const int *ubnd, void *out, void *out_var )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function resamples a rectangular grid of data (with any
-* number of dimensions) into a specified section of another
-* rectangular grid (with a possibly different number of
-* dimensions). The coordinate transformation used to convert
-* output pixel coordinates into positions in the input grid is
-* given by the inverse transformation of the Mapping which is
-* supplied. Any pixel interpolation scheme may be specified for
-* interpolating between the pixels of the input grid.
-*
-* This function is very similar to ResampleWithBlocking and
-* ResampleSection which lie below it in the calling
-* hierarchy. However, this function also attempts to adapt to the
-* Mapping supplied and to sub-divide the section being resampled
-* into smaller sections within which a linear approximation to the
-* Mapping may be used. This reduces the number of Mapping
-* evaluations, thereby improving efficiency particularly when
-* complicated Mappings are involved.
-
-* Parameters:
-* this
-* Pointer to a Mapping, whose inverse transformation may be
-* used to transform the coordinates of pixels in the output
-* grid into associated positions in the input grid, from which
-* the output pixel values should be derived (by interpolation
-* if necessary).
-*
-* The number of input coordintes for the Mapping (Nin
-* attribute) should match the value of "ndim_in" (below), and
-* the number of output coordinates (Nout attribute) should
-* match the value of "ndim_out".
-* ndim_in
-* The number of dimensions in the input grid. This should be at
-* least one.
-* lbnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the first
-* pixel in the input data grid along each dimension.
-* ubnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the last
-* pixel in the input data grid along each dimension.
-*
-* Note that "lbnd_in" and "ubnd_in" together define the shape
-* and size of the input data grid, its extent along a
-* particular (i'th) dimension being (ubnd_in[i] - lbnd_in[i] +
-* 1). They also define the input grid's coordinate system, with
-* each pixel being of unit extent along each dimension with
-* integral coordinate values at its centre.
-* in
-* Pointer to the input array of data to be resampled (with one
-* element for each pixel in the input grid). The numerical type
-* of these data should match the "type" value (below). The
-* storage order should be such that the coordinate of the first
-* dimension varies most rapidly and that of the final dimension
-* least rapidly (i.e. Fortran array storage order is used).
-* in_var
-* An optional pointer to a second array of positive numerical
-* values (with the same size and data type as the "in" array),
-* which represent estimates of the statistical variance
-* associated with each element of the "in" array. If this
-* second array is given (along with the corresponding "out_var"
-* array), then estimates of the variance of the resampled data
-* will also be returned.
-*
-* If no variance estimates are required, a NULL pointer should
-* be given.
-* type
-* A value taken from the "DataType" enum, which specifies the
-* data type of the input and output arrays containing the
-* gridded data (and variance) values.
-* interp
-* A value selected from a set of pre-defined macros to identify
-* which sub-pixel interpolation algorithm should be used.
-* finterp
-* If "interp" is set to a value which requires a user-supplied
-* function, then a pointer to that function shoild be given
-* here. Otherwise, this value is not used and may be a NULL
-* pointer.
-* params
-* Pointer to an optional array of parameters that may be passed
-* to the interpolation algorithm, if required. If no parameters
-* are required, a NULL pointer should be supplied.
-* flags
-* The bitwise OR of a set of flag values which provide
-* additional control over the resampling operation.
-* tol
-* The maximum permitted positional error in transforming output
-* pixel positions into the input grid in order to resample
-* it. This should be expressed as a displacement in pixels in
-* the input grid's coordinate system. If the Mapping's inverse
-* transformation can be approximated by piecewise linear
-* functions to this accuracy, then such functions may be used
-* instead of the Mapping in order to improve
-* performance. Otherwise, every output pixel position will be
-* transformed individually using the Mapping.
-*
-* If linear approximation is not required, a "tol" value of
-* zero may be given. This will ensure that the Mapping is used
-* without any approximation.
-* maxpix
-* A value which specifies the largest scale size on which to
-* search for non-linearities in the Mapping supplied. This
-* value should be expressed as a number of pixels in the output
-* grid. The function will break the output section specified
-* into smaller sub-sections (if necessary), each no larger than
-* "maxpix" pixels in any dimension, before it attempts to
-* approximate the Mapping by a linear function over each
-* sub-section.
-*
-* If the value given is larger than the largest dimension of
-* the output section (the normal recommendation), the function
-* will initially search for non-linearity on a scale determined
-* by the size of the output section. This is almost always
-* satisfactory. Very occasionally, however, a Mapping may
-* appear linear on this scale but nevertheless have smaller
-* irregularities (e.g. "holes") in it. In such cases, "maxpix"
-* may be set to a suitably smaller value so as to ensure this
-* non-linearity is not overlooked. Typically, a value of 50 to
-* 100 pixels might be suitable and should have little effect on
-* performance.
-*
-* If too small a value is given, however, it will have the
-* effect of preventing linear approximation occurring at all
-* (equivalent to setting "tol" to zero). Although this may
-* degrade performance, accurate results will still be obtained.
-* badval_ptr
-* If the AST__USEBAD flag is set (above), this parameter is a
-* pointer to a value which is used to identify bad data and/or
-* variance values in the input array(s). The referenced value's
-* data type must match that of the "in" (and "in_var")
-* arrays. Unless the AST__NOBAD flag is set, the same value will
-* also be used to flag any output array elements for which
-* resampled values could not be obtained. The output arrays(s)
-* may be flagged with this value whether or not the AST__USEBAD
-* flag is set (the function return value indicates whether any
-* such values have been produced).
-* ndim_out
-* The number of dimensions in the output grid. This should be
-* at least one.
-* lbnd_out
-* Pointer to an array of integers, with "ndim_out" elements.
-* This should give the coordinates of the centre of the first
-* pixel in the output data grid along each dimension.
-* ubnd_out
-* Pointer to an array of integers, with "ndim_out" elements.
-* This should give the coordinates of the centre of the last
-* pixel in the output data grid along each dimension.
-*
-* Note that "lbnd_out" and "ubnd_out" together define the shape
-* and size of the output data grid in the same way as "lbnd_in"
-* and "ubnd_in" define the shape and size of the input grid
-* (see above).
-* lbnd
-* Pointer to an array of integers, with "ndim_out" elements.
-* This should give the coordinates of the first pixel in the
-* section of the output data grid for which a value is
-* required.
-* ubnd
-* Pointer to an array of integers, with "ndim_out" elements.
-* This should give the coordinates of the last pixel in the
-* section of the output data grid for which a value is
-* required.
-*
-* Note that "lbnd" and "ubnd" define the shape and position of
-* the section of the output grid for which resampled values are
-* required. This section should lie wholly within the extent of
-* the output grid (as defined by the "lbnd_out" and "ubnd_out"
-* arrays). Regions of the output grid lying outside this section
-* will not be modified.
-* out
-* Pointer to an array with the same data type as the "in"
-* array, into which the resampled data will be returned. The
-* storage order should be such that the coordinate of the first
-* dimension varies most rapidly and that of the final dimension
-* least rapidly (i.e. Fortran array storage order is used).
-* out_var
-* An optional pointer to an array with the same data type and
-* size as the "out" array, into which variance estimates for
-* the resampled values may be returned. This array will only be
-* used if the "in_var" array has been given.
-*
-* If no output variance estimates are required, a NULL pointer
-* should be given.
-
-* Returned Value:
-* The number of output grid points for which no valid output value
-* could be obtained.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- double *flbnd; /* Array holding floating point lower bounds */
- double *fubnd; /* Array holding floating point upper bounds */
- double *linear_fit; /* Pointer to array of fit coefficients */
- int *hi; /* Pointer to array of section upper bounds */
- int *lo; /* Pointer to array of section lower bounds */
- int coord_out; /* Loop counter for output coordinates */
- int dim; /* Output section dimension size */
- int dimx; /* Dimension with maximum section extent */
- int divide; /* Sub-divide the output section? */
- int i; /* Loop count */
- int isLinear; /* Is the transformation linear? */
- int mxdim; /* Largest output section dimension size */
- int npix; /* Number of pixels in output section */
- int npoint; /* Number of points for obtaining a fit */
- int nvertex; /* Number of vertices of output section */
- int result; /* Result value to return */
- int toobig; /* Section too big (must sub-divide)? */
- int toosmall; /* Section too small to sub-divide? */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Further initialisation. */
- npix = 1;
- mxdim = 0;
- dimx = 1;
- nvertex = 1;
-
-/* Loop through the output grid dimensions. */
- for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
-
-/* Obtain the extent in each dimension of the output section which is
- to receive resampled values, and calculate the total number of
- pixels it contains. */
- dim = ubnd[ coord_out ] - lbnd[ coord_out ] + 1;
- npix *= dim;
-
-/* Find the maximum dimension size of this output section and note
- which dimension has this size. */
- if ( dim > mxdim ) {
- mxdim = dim;
- dimx = coord_out;
- }
-
-/* Calculate how many vertices the output section has. */
- nvertex *= 2;
- }
-
-/* Calculate how many sample points will be needed (by the
- astLinearApprox function) to obtain a linear fit to the Mapping's
- inverse transformation. */
- npoint = 1 + 4 * ndim_out + 2 * nvertex;
-
-/* If the number of pixels in the output section is not at least 4
- times this number, we will probably not save significant time by
- attempting to obtain a linear fit, so note that the output section
- is too small. */
- toosmall = ( npix < ( 4 * npoint ) );
-
-/* Note if the maximum dimension of the output section exceeds the
- user-supplied scale factor. */
- toobig = ( maxpix < mxdim );
-
-/* Assume the Mapping is significantly non-linear before deciding
- whether to sub-divide the output section. */
- linear_fit = NULL;
-
-/* If the output section is too small to be worth obtaining a linear
- fit, or if the accuracy tolerance is zero, we will not
- sub-divide. This means that the Mapping will be used to transform
- each pixel's coordinates and no linear approximation will be
- used. */
- if ( toosmall || ( tol == 0.0 ) ) {
- divide = 0;
-
-/* Otherwise, if the largest output section dimension exceeds the
- scale length given, we will sub-divide. This offers the possibility
- of obtaining a linear approximation to the Mapping over a reduced
- range of output coordinates (which will be handled by a recursive
- invocation of this function). */
- } else if ( toobig ) {
- divide = 1;
-
-/* If neither of the above apply, then attempt to fit a linear
- approximation to the Mapping's inverse transformation over the
- range of coordinates covered by the output section. We need to
- temporarily copy the integer bounds into floating point arrays to
- use astLinearApprox. */
- } else {
-
-/* Allocate memory for floating point bounds and for the coefficient array */
- flbnd = astMalloc( sizeof( double )*(size_t) ndim_out );
- fubnd = astMalloc( sizeof( double )*(size_t) ndim_out );
- linear_fit = astMalloc( sizeof( double )*
- (size_t) ( ndim_in*( ndim_out + 1 ) ) );
- if( astOK ) {
-
-/* Copy the bounds into these arrays */
- for( i = 0; i < ndim_out; i++ ) {
- flbnd[ i ] = (double) lbnd[ i ];
- fubnd[ i ] = (double) ubnd[ i ];
- }
-
-/* Get the linear approximation to the inverse transformation. The
- astLinearApprox function fits the forward transformation so temporarily
- invert the Mapping in order to get a fit to the inverse transformation. */
- astInvert( this );
- isLinear = astLinearApprox( this, flbnd, fubnd, tol, linear_fit );
- astInvert( this );
-
-/* Free the coeff array if the inverse transformation is not linear. */
- if( !isLinear ) linear_fit = astFree( linear_fit );
-
- } else {
- linear_fit = astFree( linear_fit );
- }
-
-/* Free resources */
- flbnd = astFree( flbnd );
- fubnd = astFree( fubnd );
-
-/* If a linear fit was obtained, we will use it and therefore do not
- wish to sub-divide further. Otherwise, we sub-divide in the hope
- that this may result in a linear fit next time. */
- divide = !linear_fit;
- }
-
-/* If no sub-division is required, perform resampling (in a
- memory-efficient manner, since the section we are resampling might
- still be very large). This will use the linear fit, if obtained
- above. */
- if ( astOK ) {
- if ( !divide ) {
- result = ResampleWithBlocking( this, linear_fit,
- ndim_in, lbnd_in, ubnd_in,
- in, in_var, type, interp, finterp,
- params, flags, badval_ptr,
- ndim_out, lbnd_out, ubnd_out,
- lbnd, ubnd, out, out_var, status );
-
-/* Otherwise, allocate workspace to perform the sub-division. */
- } else {
- lo = astMalloc( sizeof( int ) * (size_t) ndim_out );
- hi = astMalloc( sizeof( int ) * (size_t) ndim_out );
- if ( astOK ) {
-
-/* Initialise the bounds of a new output section to match the original
- output section. */
- for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
- lo[ coord_out ] = lbnd[ coord_out ];
- hi[ coord_out ] = ubnd[ coord_out ];
- }
-
-/* Replace the upper bound of the section's largest dimension with the
- mid-point of the section along this dimension, rounded
- downwards. */
- hi[ dimx ] =
- (int) floor( 0.5 * (double) ( lbnd[ dimx ] + ubnd[ dimx ] ) );
-
-/* Resample the resulting smaller section using a recursive invocation
- of this function. */
- result = ResampleAdaptively( this, ndim_in, lbnd_in, ubnd_in,
- in, in_var, type, interp, finterp,
- params, flags, tol, maxpix,
- badval_ptr, ndim_out,
- lbnd_out, ubnd_out,
- lo, hi, out, out_var, status );
-
-/* Now set up a second section which covers the remaining half of the
- original output section. */
- lo[ dimx ] = hi[ dimx ] + 1;
- hi[ dimx ] = ubnd[ dimx ];
-
-/* If this section contains pixels, resample it in the same way,
- summing the returned values. */
- if ( lo[ dimx ] <= hi[ dimx ] ) {
- result += ResampleAdaptively( this, ndim_in, lbnd_in, ubnd_in,
- in, in_var, type, interp, finterp,
- params, flags, tol, maxpix,
- badval_ptr, ndim_out,
- lbnd_out, ubnd_out,
- lo, hi, out, out_var, status );
- }
- }
-
-/* Free the workspace. */
- lo = astFree( lo );
- hi = astFree( hi );
- }
- }
-
-/* If coefficients for a linear fit were obtained, then free the space
- they occupy. */
- if ( linear_fit ) linear_fit = astFree( linear_fit );
-
-/* If an error occurred, clear the returned result. */
- if ( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static int ResampleSection( AstMapping *this, const double *linear_fit,
- int ndim_in,
- const int *lbnd_in, const int *ubnd_in,
- const void *in, const void *in_var,
- DataType type, int interp, void (* finterp)(),
- const double *params, double factor, int flags,
- const void *badval_ptr, int ndim_out,
- const int *lbnd_out, const int *ubnd_out,
- const int *lbnd, const int *ubnd,
- void *out, void *out_var, int *status ) {
-/*
-* Name:
-* ResampleSection
-
-* Purpose:
-* Resample a section of a data grid.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int ResampleSection( AstMapping *this, const double *linear_fit,
-* int ndim_in, const int *lbnd_in, const int *ubnd_in,
-* const void *in, const void *in_var,
-* DataType type, int interp, void (* finterp)(),
-* const double *params, double factor, int flags,
-* const void *badval_ptr, int ndim_out,
-* const int *lbnd_out, const int *ubnd_out,
-* const int *lbnd, const int *ubnd,
-* void *out, void *out_var )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function resamples a rectangular grid of data (with any
-* number of dimensions) into a specified section of another
-* rectangular grid (with a possibly different number of
-* dimensions). The coordinate transformation used is given by the
-* inverse transformation of the Mapping which is supplied or,
-* alternatively, by a linear approximation fitted to a Mapping's
-* inverse transformation. Any pixel interpolation scheme may be
-* specified for interpolating between the pixels of the input
-* grid.
-
-* Parameters:
-* this
-* Pointer to a Mapping, whose inverse transformation may be
-* used to transform the coordinates of pixels in the output
-* grid into associated positions in the input grid, from which
-* the output pixel values should be derived (by interpolation
-* if necessary).
-*
-* The number of input coordintes for the Mapping (Nin
-* attribute) should match the value of "ndim_in" (below), and
-* the number of output coordinates (Nout attribute) should
-* match the value of "ndim_out".
-* linear_fit
-* Pointer to an optional array of double which contains the
-* coefficients of a linear fit which approximates the above
-* Mapping's inverse coordinate transformation. If this is
-* supplied, it will be used in preference to the above Mapping
-* when transforming coordinates. This may be used to enhance
-* performance in cases where evaluation of the Mapping's
-* inverse transformation is expensive. If no linear fit is
-* available, a NULL pointer should be supplied.
-*
-* The way in which the fit coefficients are stored in this
-* array and the number of array elements are as defined by the
-* astLinearApprox function.
-* ndim_in
-* The number of dimensions in the input grid. This should be at
-* least one.
-* lbnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the first
-* pixel in the input data grid along each dimension.
-* ubnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the last
-* pixel in the input data grid along each dimension.
-*
-* Note that "lbnd_in" and "ubnd_in" together define the shape
-* and size of the input data grid, its extent along a
-* particular (i'th) dimension being (ubnd_in[i] - lbnd_in[i] +
-* 1). They also define the input grid's coordinate system, with
-* each pixel being of unit extent along each dimension with
-* integral coordinate values at its centre.
-* in
-* Pointer to the input array of data to be resampled (with one
-* element for each pixel in the input grid). The numerical type
-* of these data should match the "type" value (below). The
-* storage order should be such that the coordinate of the first
-* dimension varies most rapidly and that of the final dimension
-* least rapidly (i.e. Fortran array storage order is used).
-* in_var
-* An optional pointer to a second array of positive numerical
-* values (with the same size and data type as the "in" array),
-* which represent estimates of the statistical variance
-* associated with each element of the "in" array. If this
-* second array is given (along with the corresponding "out_var"
-* array), then estimates of the variance of the resampled data
-* will also be returned.
-*
-* If no variance estimates are required, a NULL pointer should
-* be given.
-* type
-* A value taken from the "DataType" enum, which specifies the
-* data type of the input and output arrays containing the
-* gridded data (and variance) values.
-* interp
-* A value selected from a set of pre-defined macros to identify
-* which sub-pixel interpolation algorithm should be used.
-* finterp
-* If "interp" is set to a value which requires a user-supplied
-* function, then a pointer to that function shoild be given
-* here. Otherwise, this value is not used and may be a NULL
-* pointer.
-* params
-* Pointer to an optional array of parameters that may be passed
-* to the interpolation algorithm, if required. If no parameters
-* are required, a NULL pointer should be supplied.
-* factor
-* A factor by which to scale the resampled output data values before
-* returning them. If flux is being conserved this should be set to
-* the ratio of the output pixel size to the input pixel size in the
-* section. Otherwise it should be set to 1.0.
-* flags
-* The bitwise OR of a set of flag values which provide
-* additional control over the resampling operation.
-* badval_ptr
-* If the AST__USEBAD flag is set (above), this parameter is a
-* pointer to a value which is used to identify bad data and/or
-* variance values in the input array(s). The referenced value's
-* data type must match that of the "in" (and "in_var")
-* arrays. Unless the AST__NOBAD flag is set, the same value will
-* also be used to flag any output array elements for which
-* resampled values could not be obtained. The output arrays(s)
-* may be flagged with this value whether or not the AST__USEBAD
-* flag is set (the function return value indicates whether any
-* such values have been produced).
-* ndim_out
-* The number of dimensions in the output grid. This should be
-* at least one.
-* lbnd_out
-* Pointer to an array of integers, with "ndim_out" elements.
-* This should give the coordinates of the centre of the first
-* pixel in the output data grid along each dimension.
-* ubnd_out
-* Pointer to an array of integers, with "ndim_out" elements.
-* This should give the coordinates of the centre of the last
-* pixel in the output data grid along each dimension.
-*
-* Note that "lbnd_out" and "ubnd_out" together define the shape
-* and size of the output data grid in the same way as "lbnd_in"
-* and "ubnd_in" define the shape and size of the input grid
-* (see above).
-* lbnd
-* Pointer to an array of integers, with "ndim_out" elements.
-* This should give the coordinates of the first pixel in the
-* section of the output data grid for which a value is
-* required.
-* ubnd
-* Pointer to an array of integers, with "ndim_out" elements.
-* This should give the coordinates of the last pixel in the
-* section of the output data grid for which a value is
-* required.
-*
-* Note that "lbnd" and "ubnd" define the shape and position of
-* the section of the output grid for which resampled values are
-* required. This section should lie wholly within the extent of
-* the output grid (as defined by the "lbnd_out" and "ubnd_out"
-* arrays). Regions of the output grid lying outside this section
-* will not be modified.
-* out
-* Pointer to an array with the same data type as the "in"
-* array, into which the resampled data will be returned. The
-* storage order should be such that the coordinate of the first
-* dimension varies most rapidly and that of the final dimension
-* least rapidly (i.e. Fortran array storage order is used).
-* out_var
-* An optional pointer to an array with the same data type and
-* size as the "out" array, into which variance estimates for
-* the resampled values may be returned. This array will only be
-* used if the "in_var" array has been given.
-*
-* If no output variance estimates are required, a NULL pointer
-* should be given.
-
-* Returned Value:
-* The number of output grid points for which no valid output value
-* could be obtained.
-
-* Notes:
-* - This function does not take steps to limit memory usage if the
-* grids supplied are large. To resample large grids in a more
-* memory-efficient way, the ResampleWithBlocking function should
-* be used.
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Thread-specific data */
- AstPointSet *pset_in; /* Input PointSet for transformation */
- AstPointSet *pset_out; /* Output PointSet for transformation */
- const double *grad; /* Pointer to gradient matrix of linear fit */
- const double *par; /* Pointer to parameter array */
- const double *zero; /* Pointer to zero point array of fit */
- double **ptr_in; /* Pointer to input PointSet coordinates */
- double **ptr_out; /* Pointer to output PointSet coordinates */
- double *accum; /* Pointer to array of accumulated sums */
- double fwhm; /* Full width half max. of gaussian */
- double lpar[ 1 ]; /* Local parameter array */
- double x1; /* Interim x coordinate value */
- double y1; /* Interim y coordinate value */
- int *dim; /* Pointer to array of output pixel indices */
- int *offset; /* Pointer to array of output pixel offsets */
- int *stride; /* Pointer to array of output grid strides */
- int conserve; /* Conserve flux? */
- int coord_in; /* Loop counter for input dimensions */
- int coord_out; /* Loop counter for output dimensions */
- int done; /* All pixel indices done? */
- int i1; /* Interim offset into "accum" array */
- int i2; /* Final offset into "accum" array */
- int idim; /* Loop counter for dimensions */
- int ix; /* Loop counter for output x coordinate */
- int iy; /* Loop counter for output y coordinate */
- int nbad; /* Number of pixels assigned a bad value */
- int neighb; /* Number of neighbouring pixels */
- int npoint; /* Number of output points (pixels) */
- int off1; /* Interim pixel offset into output array */
- int off; /* Final pixel offset into output array */
- int point; /* Counter for output points (pixels ) */
- int result; /* Result value to be returned */
- int s; /* Temporary variable for strides */
- int usevar; /* Process variance array? */
- void (* gifunc)(); /* General interpolation function */
- void (* kernel)( double, const double [], int, double *, int * ); /* Kernel fn. */
- void (* fkernel)( double, const double [], int, double * ); /* User kernel fn. */
-
-/* Initialise. */
- result = 0;
-
-/* Get a pointer to a structure holding thread-specific global data values */
- astGET_GLOBALS(this);
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Further initialisation. */
- pset_in = NULL;
- ptr_in = NULL;
- neighb = 0;
- gifunc = NULL;
- kernel = NULL;
- fkernel = NULL;
-
-/* See if we are conserving flux */
- conserve = flags & AST__CONSERVEFLUX;
-
-/* If we are conserving flux, then we need some way to tell which output
- array elements have been assigned a value and which have not. If the
- AST__NOBAD flag has been specified then this is not possible to report
- an error. */
- if( ( flags & AST__NOBAD ) && conserve ) {
- astError( AST__BADFLG, "astResample: Cannot use the AST__NOBAD and "
- "AST__CONSERVEFLUX flags together (programming error)." , status);
- }
-
-/* Calculate the number of output points, as given by the product of
- the output grid dimensions. */
- for ( npoint = 1, coord_out = 0; coord_out < ndim_out; coord_out++ ) {
- npoint *= ubnd[ coord_out ] - lbnd[ coord_out ] + 1;
- }
-
-/* Allocate workspace. */
- offset = astMalloc( sizeof( int ) * (size_t) npoint );
- stride = astMalloc( sizeof( int ) * (size_t) ndim_out );
- if ( astOK ) {
-
-/* Calculate the stride for each output grid dimension. */
- off = 0;
- s = 1;
- for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
- stride[ coord_out ] = s;
- s *= ubnd_out[ coord_out ] - lbnd_out[ coord_out ] + 1;
- }
-
-/* A linear fit to the Mapping is available. */
-/* ========================================= */
- if ( linear_fit ) {
-
-/* If a linear fit to the Mapping has been provided, then obtain
- pointers to the array of gradients and zero-points comprising the
- fit. */
- grad = linear_fit + ndim_in;
- zero = linear_fit;
-
-/* Create a PointSet to hold the input grid coordinates and obtain an
- array of pointers to its coordinate data. */
- pset_in = astPointSet( npoint, ndim_in, "", status );
- ptr_in = astGetPoints( pset_in );
- if ( astOK ) {
-
-/* Initialise the count of output points. */
- point = 0;
-
-/* Handle the 1-dimensional case optimally. */
-/* ---------------------------------------- */
- if ( ( ndim_in == 1 ) && ( ndim_out == 1 ) ) {
-
-/* Loop through the pixels of the output grid and transform their x
- coordinates into the input grid's coordinate system using the
- linear fit supplied. Store the results in the PointSet created
- above. */
- for ( ix = lbnd[ 0 ]; ix <= ubnd[ 0 ]; ix++ ) {
- ptr_in[ 0 ][ point ] = zero[ 0 ] + grad[ 0 ] * (double) ix;
-
-/* Calculate the offset of each pixel within the output array. */
- offset[ point ] = ix - lbnd_out[ 0 ];
- point++;
- }
-
-/* Handle the 2-dimensional case optimally. */
-/* ---------------------------------------- */
- } else if ( ( ndim_in == 2 ) && ( ndim_out == 2 ) ) {
-
-/* Loop through the range of y coordinates in the output grid and
- calculate interim values of the input coordinates using the linear
- fit supplied. */
- for ( iy = lbnd[ 1 ]; iy <= ubnd[ 1 ]; iy++ ) {
- x1 = zero[ 0 ] + grad[ 1 ] * (double) iy;
- y1 = zero[ 1 ] + grad[ 3 ] * (double) iy;
-
-/* Also calculate an interim pixel offset into the output array. */
- off1 = stride[ 1 ] * ( iy - lbnd_out[ 1 ] ) - lbnd_out[ 0 ];
-
-/* Now loop through the range of output x coordinates and calculate
- the final values of the input coordinates, storing the results in
- the PointSet created above. */
- for ( ix = lbnd[ 0 ]; ix <= ubnd[ 0 ]; ix++ ) {
- ptr_in[ 0 ][ point ] = x1 + grad[ 0 ] * (double) ix;
- ptr_in[ 1 ][ point ] = y1 + grad[ 2 ] * (double) ix;
-
-/* Also calculate final pixel offsets into the output array. */
- offset[ point ] = off1 + ix;
- point++;
- }
- }
-
-/* Handle other numbers of dimensions. */
-/* ----------------------------------- */
- } else {
-
-/* Allocate workspace. */
- accum = astMalloc( sizeof( double ) *
- (size_t) ( ndim_in * ndim_out ) );
- dim = astMalloc( sizeof( int ) * (size_t) ndim_out );
- if ( astOK ) {
-
-/* Initialise an array of pixel indices for the output grid which
- refer to the first pixel for which we require a value. Also
- calculate the offset of this pixel within the output array. */
- off = 0;
- for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
- dim[ coord_out ] = lbnd[ coord_out ];
- off += stride[ coord_out ] *
- ( dim[ coord_out ] - lbnd_out[ coord_out ] );
- }
-
-/* To calculate each input grid coordinate we must perform a matrix
- multiply on the output grid coordinates (using the gradient matrix)
- and then add the zero points. However, since we will usually only
- be altering one output coordinate at a time (the least
- significant), we can avoid the full matrix multiply by accumulating
- partial sums for the most significant output coordinates and only
- altering those sums which need to change each time. The zero points
- never change, so we first fill the "most significant" end of the
- "accum" array with these. */
- for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
- accum[ ( coord_in + 1 ) * ndim_out - 1 ] =
- zero[ coord_in ];
- }
- coord_out = ndim_out - 1;
-
-/* Now loop to process each output pixel. */
- for ( done = 0; !done; point++ ) {
-
-/* To generate the input coordinate that corresponds to the current
- output pixel, we work down from the most significant dimension
- whose index has changed since the previous pixel we considered
- (given by "coord_out"). For each affected dimension, we accumulate
- in "accum" the matrix sum (including the zero point) for that
- dimension and all higher output dimensions. We must accumulate a
- separate set of sums for each input coordinate we wish to
- produce. (Note that for the first pixel we process, all dimensions
- are considered "changed", so we start by initialising the whole
- "accum" array.) */
- for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
- i1 = coord_in * ndim_out;
- for ( idim = coord_out; idim >= 1; idim-- ) {
- i2 = i1 + idim;
- accum[ i2 - 1 ] = accum[ i2 ] +
- dim[ idim ] * grad[ i2 ];
- }
-
-/* The input coordinate for each dimension is given by the accumulated
- sum for output dimension zero (giving the sum over all output
- dimensions). We do not store this in the "accum" array, but assign
- the result directly to the coordinate array of the PointSet created
- earlier. */
- ptr_in[ coord_in ][ point ] = accum[ i1 ] +
- dim[ 0 ] * grad[ i1 ];
- }
-
-/* Store the offset of the current pixel in the output array. */
- offset[ point ] = off;
-
-/* Now update the array of pixel indices to refer to the next output
- pixel. */
- coord_out = 0;
- do {
-
-/* The least significant index which currently has less than its
- maximum value is incremented by one. The offset into the output
- array is updated accordingly. */
- if ( dim[ coord_out ] < ubnd[ coord_out ] ) {
- dim[ coord_out ]++;
- off += stride[ coord_out ];
- break;
-
-/* Any less significant indices which have reached their maximum value
- are returned to their minimum value and the output pixel offset is
- decremented appropriately. */
- } else {
- dim[ coord_out ] = lbnd[ coord_out ];
- off -= stride[ coord_out ] *
- ( ubnd[ coord_out ] - lbnd[ coord_out ] );
-
-/* All the output pixels have been processed once the most significant
- pixel index has been returned to its minimum value. */
- done = ( ++coord_out == ndim_out );
- }
- } while ( !done );
- }
- }
-
-/* Free the workspace. */
- accum = astFree( accum );
- dim = astFree( dim );
- }
- }
-
-/* No linear fit to the Mapping is available. */
-/* ========================================== */
- } else {
-
-/* If flux conseravtion was requested, report an error, since we can only
- conserve flux if a linear approximation is available. */
- if( conserve && astOK ) {
- astError( AST__CNFLX, "astResampleSection(%s): Flux conservation "
- "was requested but cannot be performed because either the Mapping "
- "is too non-linear, or the requested tolerance is too small.", status,
- astGetClass( this ) );
- }
-
-/* Create a PointSet to hold the coordinates of the output pixels and
- obtain a pointer to its coordinate data. */
- pset_out = astPointSet( npoint, ndim_out, "", status );
- ptr_out = astGetPoints( pset_out );
- if ( astOK ) {
-
-/* Initialise the count of output points. */
- point = 0;
-
-/* Handle the 1-dimensional case optimally. */
-/* ---------------------------------------- */
- if ( ndim_out == 1 && ndim_in == 1 ) {
-
-/* Loop through the required range of output x coordinates, assigning
- the coordinate values to the PointSet created above. Also store a
- pixel offset into the output array. */
- for ( ix = lbnd[ 0 ]; ix <= ubnd[ 0 ]; ix++ ) {
- ptr_out[ 0 ][ point ] = (double) ix;
- offset[ point ] = ix - lbnd_out[ 0 ];
-
-/* Increment the count of output pixels. */
- point++;
- }
-
-/* Handle the 2-dimensional case optimally. */
-/* ---------------------------------------- */
- } else if ( ndim_out == 2 && ndim_in == 2 ) {
-
-/* Loop through the required range of output y coordinates,
- calculating an interim pixel offset into the output array. */
- for ( iy = lbnd[ 1 ]; iy <= ubnd[ 1 ]; iy++ ) {
- off1 = stride[ 1 ] * ( iy - lbnd_out[ 1 ] ) - lbnd_out[ 0 ];
-
-/* Loop through the required range of output x coordinates, assigning
- the coordinate values to the PointSet created above. Also store a
- final pixel offset into the output array. */
- for ( ix = lbnd[ 0 ]; ix <= ubnd[ 0 ]; ix++ ) {
- ptr_out[ 0 ][ point ] = (double) ix;
- ptr_out[ 1 ][ point ] = (double) iy;
- offset[ point ] = off1 + ix;
-
-/* Increment the count of output pixels. */
- point++;
- }
- }
-
-/* Handle other numbers of dimensions. */
-/* ----------------------------------- */
- } else {
-
-/* Allocate workspace. */
- dim = astMalloc( sizeof( int ) * (size_t) ndim_out );
- if ( astOK ) {
-
-/* Initialise an array of pixel indices for the output grid which
- refer to the first pixel for which we require a value. Also
- calculate the offset of this pixel within the output array. */
- off = 0;
- for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
- dim[ coord_out ] = lbnd[ coord_out ];
- off += stride[ coord_out ] *
- ( dim[ coord_out ] - lbnd_out[ coord_out ] );
- }
-
-/* Loop to generate the coordinates of each output pixel. */
- for ( done = 0; !done; point++ ) {
-
-/* Copy each pixel's coordinates into the PointSet created above. */
- for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
- ptr_out[ coord_out ][ point ] =
- (double) dim[ coord_out ];
- }
-
-/* Store the offset of the pixel in the output array. */
- offset[ point ] = off;
-
-/* Now update the array of pixel indices to refer to the next output
- pixel. */
- coord_out = 0;
- do {
-
-/* The least significant index which currently has less than its
- maximum value is incremented by one. The offset into the output
- array is updated accordingly. */
- if ( dim[ coord_out ] < ubnd[ coord_out ] ) {
- dim[ coord_out ]++;
- off += stride[ coord_out ];
- break;
-
-/* Any less significant indices which have reached their maximum value
- are returned to their minimum value and the output pixel offset is
- decremented appropriately. */
- } else {
- dim[ coord_out ] = lbnd[ coord_out ];
- off -= stride[ coord_out ] *
- ( ubnd[ coord_out ] - lbnd[ coord_out ] );
-
-/* All the output pixels have been processed once the most significant
- pixel index has been returned to its minimum value. */
- done = ( ++coord_out == ndim_out );
- }
- } while ( !done );
- }
- }
-
-/* Free the workspace. */
- dim = astFree( dim );
- }
-
-/* When all the output pixel coordinates have been generated, use the
- Mapping's inverse transformation to generate the input coordinates
- from them. Obtain an array of pointers to the resulting coordinate
- data. */
- pset_in = astTransform( this, pset_out, 0, NULL );
- ptr_in = astGetPoints( pset_in );
- }
-
-/* Annul the PointSet containing the output coordinates. */
- pset_out = astAnnul( pset_out );
- }
- }
-
-/* Resample the input grid. */
-/* ------------------------ */
-/* Determine if a variance array is to be processed. */
- usevar = ( in_var && out_var );
-
-/* If the input coordinates have been produced successfully, identify
- the input grid resampling method to be used. */
- if ( astOK ) {
-
-/* Nearest pixel. */
-/* -------------- */
- switch ( interp ) {
- case AST__NEAREST:
-
-/* Define a macro to use a "case" statement to invoke the
- nearest-pixel interpolation function appropriate to a given data
- type. */
-#define CASE_NEAREST(X,Xtype) \
- case ( TYPE_##X ): \
- result = \
- InterpolateNearest##X( ndim_in, lbnd_in, ubnd_in, \
- (Xtype *) in, (Xtype *) in_var, \
- npoint, offset, \
- (const double *const *) ptr_in, \
- flags, *( (Xtype *) badval_ptr ), \
- (Xtype *) out, (Xtype *) out_var, status ); \
- break;
-
-/* Use the above macro to invoke the appropriate function. */
- switch ( type ) {
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
- CASE_NEAREST(LD,long double)
-#endif
- CASE_NEAREST(D,double)
- CASE_NEAREST(F,float)
- CASE_NEAREST(L,long int)
- CASE_NEAREST(UL,unsigned long int)
- CASE_NEAREST(I,int)
- CASE_NEAREST(UI,unsigned int)
- CASE_NEAREST(S,short int)
- CASE_NEAREST(US,unsigned short int)
- CASE_NEAREST(B,signed char)
- CASE_NEAREST(UB,unsigned char)
- }
- break;
-
-/* Undefine the macro. */
-#undef CASE_NEAREST
-
-/* Linear interpolation. */
-/* --------------------- */
-/* Note this is also the default if zero is given. */
- case AST__LINEAR:
- case 0:
-
-/* Define a macro to use a "case" statement to invoke the linear
- interpolation function appropriate to a given data type. */
-#define CASE_LINEAR(X,Xtype) \
- case ( TYPE_##X ): \
- result = \
- InterpolateLinear##X( ndim_in, lbnd_in, ubnd_in,\
- (Xtype *) in, (Xtype *) in_var, \
- npoint, offset, \
- (const double *const *) ptr_in, \
- flags, *( (Xtype *) badval_ptr ), \
- (Xtype *) out, (Xtype *) out_var, status ); \
- break;
-
-/* Use the above macro to invoke the appropriate function. */
- switch ( type ) {
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
- CASE_LINEAR(LD,long double)
-#endif
- CASE_LINEAR(D,double)
- CASE_LINEAR(F,float)
- CASE_LINEAR(L,long int)
- CASE_LINEAR(UL,unsigned long int)
- CASE_LINEAR(I,int)
- CASE_LINEAR(UI,unsigned int)
- CASE_LINEAR(S,short int)
- CASE_LINEAR(US,unsigned short int)
- CASE_LINEAR(B,signed char)
- CASE_LINEAR(UB,unsigned char)
- }
- break;
-
-/* Undefine the macro. */
-#undef CASE_LINEAR
-
-/* Interpolation using a 1-d kernel. */
-/* --------------------------------- */
- case AST__SINC:
- case AST__SINCCOS:
- case AST__SINCGAUSS:
- case AST__SINCSINC:
- case AST__SOMB:
- case AST__SOMBCOS:
- case AST__UKERN1: /* User-supplied 1-d kernel function */
-
-/* Obtain a pointer to the appropriate 1-d kernel function (either
- internal or user-defined) and set up any parameters it may
- require. */
- par = NULL;
- switch ( interp ) {
-
-/* sinc(pi*x) interpolation. */
-/* ------------------------- */
-/* Assign the kernel function. */
- case AST__SINC:
- kernel = Sinc;
-
-/* Calculate the number of neighbouring pixels to use. */
- neighb = (int) floor( params[ 0 ] + 0.5 );
- if ( neighb <= 0 ) {
- neighb = 2;
- } else {
- neighb = MaxI( 1, neighb, status );
- }
- break;
-
-/* sinc(pi*x)*cos(k*pi*x) interpolation. */
-/* ------------------------------------- */
-/* Assign the kernel function. */
- case AST__SINCCOS:
- kernel = SincCos;
-
-/* Store the required value of "k" in a local parameter array and pass
- this array to the kernel function. */
- lpar[ 0 ] = 0.5 / MaxD( 1.0, params[ 1 ], status );
- par = lpar;
-
-/* Obtain the number of neighbouring pixels to use. If this is zero or
- less, the number will be calculated automatically below. */
- neighb = (int) floor( params[ 0 ] + 0.5 );
- if ( neighb <= 0 ) neighb = INT_MAX;
-
-/* Calculate the maximum number of neighbouring pixels required by the
- width of the kernel, and use this value if preferable. */
- neighb = MinI( neighb,
- (int) ceil( MaxD( 1.0, params[ 1 ], status ) ), status );
- break;
-
-/* somb(pi*x) interpolation. */
-/* ------------------------- */
-/* Assign the kernel function. */
- case AST__SOMB:
- kernel = Somb;
-
-/* Calculate the number of neighbouring pixels to use. */
- neighb = (int) floor( params[ 0 ] + 0.5 );
- if ( neighb <= 0 ) {
- neighb = 2;
- } else {
- neighb = MaxI( 1, neighb, status );
- }
- break;
-
-/* somb(pi*x)*cos(k*pi*x) interpolation. */
-/* ------------------------------------- */
-/* Assign the kernel function. */
- case AST__SOMBCOS:
- kernel = SombCos;
-
-/* Store the required value of "k" in a local parameter array and pass
- this array to the kernel function. */
- lpar[ 0 ] = 0.5 / MaxD( 1.0, params[ 1 ], status );
- par = lpar;
-
-/* Obtain the number of neighbouring pixels to use. If this is zero or
- less, the number will be calculated automatically below. */
- neighb = (int) floor( params[ 0 ] + 0.5 );
- if ( neighb <= 0 ) neighb = INT_MAX;
-
-/* Calculate the maximum number of neighbouring pixels required by the
- width of the kernel, and use this value if preferable. */
- neighb = MinI( neighb,
- (int) ceil( MaxD( 1.0, params[ 1 ], status ) ), status );
- break;
-
-/* sinc(pi*x)*exp(-k*x*x) interpolation. */
-/* ------------------------------------- */
-/* Assign the kernel function. */
- case AST__SINCGAUSS:
- kernel = SincGauss;
-
-/* Constrain the full width half maximum of the gaussian factor. */
- fwhm = MaxD( 0.1, params[ 1 ], status );
-
-/* Store the required value of "k" in a local parameter array and pass
- this array to the kernel function. */
- lpar[ 0 ] = 4.0 * log( 2.0 ) / ( fwhm * fwhm );
- par = lpar;
-
-/* Obtain the number of neighbouring pixels to use. If this is zero or
- less, use the number of neighbouring pixels required by the width
- of the kernel (out to where the gaussian term falls to 1% of its
- peak value). */
- neighb = (int) floor( params[ 0 ] + 0.5 );
- if ( neighb <= 0 ) neighb = (int) ceil( sqrt( -log( 0.01 ) /
- lpar[ 0 ] ) );
- break;
-
-/* sinc(pi*x)*sinc(k*pi*x) interpolation. */
-/* -------------------------------------- */
-/* Assign the kernel function. */
- case AST__SINCSINC:
- kernel = SincSinc;
-
-/* Store the required value of "k" in a local parameter array and pass
- this array to the kernel function. */
- lpar[ 0 ] = 0.5 / MaxD( 1.0, params[ 1 ], status );
- par = lpar;
-
-/* Obtain the number of neighbouring pixels to use. If this is zero or
- less, the number will be calculated automatically below. */
- neighb = (int) floor( params[ 0 ] + 0.5 );
- if ( neighb <= 0 ) neighb = INT_MAX;
-
-/* Calculate the maximum number of neighbouring pixels required by the
- width of the kernel, and use this value if preferable. */
- neighb = MinI( neighb,
- (int) ceil( MaxD( 1.0, params[ 1 ], status ) ), status );
- break;
-
-/* User-supplied kernel. */
-/* --------------------- */
-/* Assign the kernel function. */
- case AST__UKERN1:
- fkernel = (void (*)( double, const double [],
- int, double * )) finterp;
-
-/* Calculate the number of neighbouring pixels to use. */
- neighb = MaxI( 1, (int) floor( params[ 0 ] + 0.5 ), status );
-
-/* Pass a pointer to the "params" array. */
- par = params;
- break;
- }
-
-/* Define a macro to use a "case" statement to invoke the 1-d kernel
- interpolation function appropriate to a given data type, passing it
- the pointer to the kernel function obtained above. */
-#define CASE_KERNEL1(X,Xtype) \
- case ( TYPE_##X ): \
- result = \
- InterpolateKernel1##X( this, ndim_in, lbnd_in, ubnd_in, \
- (Xtype *) in, (Xtype *) in_var, \
- npoint, offset, \
- (const double *const *) ptr_in, \
- kernel, fkernel, neighb, par, flags, \
- *( (Xtype *) badval_ptr ), \
- (Xtype *) out, (Xtype *) out_var, status ); \
- break;
-
-/* Use the above macro to invoke the appropriate function. */
- switch ( type ) {
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
- CASE_KERNEL1(LD,long double)
-#endif
- CASE_KERNEL1(D,double)
- CASE_KERNEL1(F,float)
- CASE_KERNEL1(L,long int)
- CASE_KERNEL1(UL,unsigned long int)
- CASE_KERNEL1(I,int)
- CASE_KERNEL1(UI,unsigned int)
- CASE_KERNEL1(S,short int)
- CASE_KERNEL1(US,unsigned short int)
- CASE_KERNEL1(B,signed char)
- CASE_KERNEL1(UB,unsigned char)
- }
- break;
-
-/* Undefine the macro. */
-#undef CASE_KERNEL1
-
-/* General sub-pixel interpolation function. */
-/* ----------------------------------------- */
- case AST__BLOCKAVE:
- case AST__UINTERP:
-
-/* Define a macro to use a "case" statement to invoke the general
- sub-pixel interpolation function appropriate to a given type and
- the selected value of the interp variable. */
-#define CASE_GINTERP(X,Xtype) \
- case ( TYPE_##X ): \
-\
-/* Obtain a pointer to the appropriate general interpolation function \
- (either internal or user-defined) and set up any parameters it may \
- require. */ \
- switch ( interp ) { \
-\
-/* Block averaging interpolation. */ \
-/* ------------------------------ */ \
- case AST__BLOCKAVE: \
- gifunc = (void (*)()) InterpolateBlockAverage##X; \
- break; \
-\
-/* User-supplied sub-pixel interpolation function. */ \
-/* ----------------------------------------------- */ \
- case AST__UINTERP: \
- gifunc = (void (*)()) finterp; \
- break; \
- } \
-\
-/* Invoke the general interpolation function. It has to be cast to the \
- right type (i.e. a function with the correctly typed arguments) \
- to prevent default promotion (to int or double) of its arguments. \
- The cast here corresponds to the declaration of
- ast_resample_uinterp##Xtype. */ \
- ( *( (void (*)( int, const int[], const int[], \
- const Xtype[], \
- const Xtype[], \
- int, const int[], \
- const double *const[], \
- const double[], int, \
- Xtype, \
- Xtype *, \
- Xtype *, \
- int * )) \
- gifunc ) )( ndim_in, lbnd_in, ubnd_in, \
- (Xtype *) in, \
- (Xtype *) ( usevar ? in_var : NULL ), \
- npoint, offset, \
- (const double *const *) ptr_in, \
- params, flags, \
- *( (Xtype *) badval_ptr ), \
- (Xtype *) out, \
- (Xtype *) ( usevar ? out_var : NULL ), \
- &nbad ); \
- if ( astOK ) { \
- result += nbad; \
- } else { \
- astError( astStatus, "astResample"#X"(%s): Error " \
- "signalled by user-supplied sub-pixel " \
- "interpolation function.", status, \
- astGetClass( unsimplified_mapping ) ); \
- } \
- break;
-
-/* Use the above macro to invoke the function. */
- switch ( type ) {
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
- CASE_GINTERP(LD,long double)
-#endif
- CASE_GINTERP(D,double)
- CASE_GINTERP(F,float)
- CASE_GINTERP(L,long int)
- CASE_GINTERP(UL,unsigned long int)
- CASE_GINTERP(I,int)
- CASE_GINTERP(UI,unsigned int)
- CASE_GINTERP(S,short int)
- CASE_GINTERP(US,unsigned short int)
- CASE_GINTERP(B,signed char)
- CASE_GINTERP(UB,unsigned char)
- }
- break;
-
-/* Undefine the macro. */
-#undef CASE_GINTERP
-
-/* Error: invalid interpolation scheme specified. */
-/* ---------------------------------------------- */
- default:
-
-/* Define a macro to report an error message appropriate to a given
- data type. */
-#define CASE_ERROR(X) \
- case TYPE_##X: \
- astError( AST__SISIN, "astResample"#X"(%s): Invalid " \
- "sub-pixel interpolation scheme (%d) specified.", status, \
- astGetClass( unsimplified_mapping ), interp ); \
- break;
-
-/* Use the above macro to report an appropriate error message. */
- switch ( type ) {
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
- CASE_ERROR(LD)
-#endif
- CASE_ERROR(D)
- CASE_ERROR(F)
- CASE_ERROR(L)
- CASE_ERROR(UL)
- CASE_ERROR(I)
- CASE_ERROR(UI)
- CASE_ERROR(S)
- CASE_ERROR(US)
- CASE_ERROR(B)
- CASE_ERROR(UB)
- }
- break;
-
-/* Undefine the macro. */
-#undef CASE_ERROR
- }
- }
-
-/* Now scale the output values to conserve flux if required. */
- if( conserve ) {
-
-/* Define a macro to use a "case" statement to invoke the function
- appropriate to a given data type. These simply multiple the output data
- value by the factor, and the output variance by the square of the
- factor. */
-#define CASE_CONSERVE(X,Xtype) \
- case ( TYPE_##X ): \
- ConserveFlux##X( factor, npoint, offset, *( (Xtype *) badval_ptr ), \
- (Xtype *) out, \
- (Xtype *) ( usevar ? out_var : NULL ), status ); \
- break;
-
-/* Use the above macro to invoke the appropriate function. */
- switch ( type ) {
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
- CASE_CONSERVE(LD,long double)
-#endif
- CASE_CONSERVE(D,double)
- CASE_CONSERVE(F,float)
- CASE_CONSERVE(L,long int)
- CASE_CONSERVE(UL,unsigned long int)
- CASE_CONSERVE(I,int)
- CASE_CONSERVE(UI,unsigned int)
- CASE_CONSERVE(S,short int)
- CASE_CONSERVE(US,unsigned short int)
- CASE_CONSERVE(B,signed char)
- CASE_CONSERVE(UB,unsigned char)
- }
-
-/* Undefine the macro. */
-#undef CASE_CONSERVE
- }
-
-/* Annul the PointSet used to hold input coordinates. */
- pset_in = astAnnul( pset_in );
-
-/* Free the workspace. */
- offset = astFree( offset );
- stride = astFree( stride );
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static int ResampleWithBlocking( AstMapping *this, const double *linear_fit,
- int ndim_in,
- const int *lbnd_in, const int *ubnd_in,
- const void *in, const void *in_var,
- DataType type, int interp, void (* finterp)(),
- const double *params, int flags,
- const void *badval_ptr, int ndim_out,
- const int *lbnd_out, const int *ubnd_out,
- const int *lbnd, const int *ubnd,
- void *out, void *out_var, int *status ) {
-/*
-* Name:
-* ResampleWithBlocking
-
-* Purpose:
-* Resample a section of a data grid in a memory-efficient way.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int ResampleWithBlocking( AstMapping *this, const double *linear_fit,
-* int ndim_in,
-* const int *lbnd_in, const int *ubnd_in,
-* const void *in, const void *in_var,
-* DataType type, int interp, void (* finterp)(),
-* const double *params, int flags,
-* const void *badval_ptr, int ndim_out,
-* const int *lbnd_out, const int *ubnd_out,
-* const int *lbnd, const int *ubnd,
-* void *out, void *out_var, int *status )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function resamples a rectangular grid of data (with any
-* number of dimensions) into a specified section of another
-* rectangular grid (with a possibly different number of
-* dimensions). The coordinate transformation used is given by the
-* inverse transformation of the Mapping which is supplied or,
-* alternatively, by a linear approximation fitted to a Mapping's
-* inverse transformation. Any pixel interpolation scheme may be
-* specified for interpolating between the pixels of the input
-* grid.
-*
-* This function is very similar to ResampleSection, except that in
-* order to limit memory usage and to ensure locality of reference,
-* it divides the output grid up into "blocks" which have a limited
-* extent along each output dimension. Each block, which will not
-* contain more than a pre-determined maximum number of pixels, is
-* then passed to ResampleSection for resampling.
-
-* Parameters:
-* this
-* Pointer to a Mapping, whose inverse transformation may be
-* used to transform the coordinates of pixels in the output
-* grid into associated positions in the input grid, from which
-* the output pixel values should be derived (by interpolation
-* if necessary).
-*
-* The number of input coordintes for the Mapping (Nin
-* attribute) should match the value of "ndim_in" (below), and
-* the number of output coordinates (Nout attribute) should
-* match the value of "ndim_out".
-* linear_fit
-* Pointer to an optional array of double which contains the
-* coefficients of a linear fit which approximates the above
-* Mapping's inverse coordinate transformation. If this is
-* supplied, it will be used in preference to the above Mapping
-* when transforming coordinates. This may be used to enhance
-* performance in cases where evaluation of the Mapping's
-* inverse transformation is expensive. If no linear fit is
-* available, a NULL pointer should be supplied.
-*
-* The way in which the fit coefficients are stored in this
-* array and the number of array elements are as defined by the
-* astLinearApprox function.
-* ndim_in
-* The number of dimensions in the input grid. This should be at
-* least one.
-* lbnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the first
-* pixel in the input data grid along each dimension.
-* ubnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the last
-* pixel in the input data grid along each dimension.
-*
-* Note that "lbnd_in" and "ubnd_in" together define the shape
-* and size of the input data grid, its extent along a
-* particular (i'th) dimension being (ubnd_in[i] - lbnd_in[i] +
-* 1). They also define the input grid's coordinate system, with
-* each pixel being of unit extent along each dimension with
-* integral coordinate values at its centre.
-* in
-* Pointer to the input array of data to be resampled (with one
-* element for each pixel in the input grid). The numerical type
-* of these data should match the "type" value (below). The
-* storage order should be such that the coordinate of the first
-* dimension varies most rapidly and that of the final dimension
-* least rapidly (i.e. Fortran array storage order is used).
-* in_var
-* An optional pointer to a second array of positive numerical
-* values (with the same size and data type as the "in" array),
-* which represent estimates of the statistical variance
-* associated with each element of the "in" array. If this
-* second array is given (along with the corresponding "out_var"
-* array), then estimates of the variance of the resampled data
-* will also be returned.
-*
-* If no variance estimates are required, a NULL pointer should
-* be given.
-* type
-* A value taken from the "DataType" enum, which specifies the
-* data type of the input and output arrays containing the
-* gridded data (and variance) values.
-* interp
-* A value selected from a set of pre-defined macros to identify
-* which sub-pixel interpolation algorithm should be used.
-* finterp
-* If "interp" is set to a value which requires a user-supplied
-* function, then a pointer to that function shoild be given
-* here. Otherwise, this value is not used and may be a NULL
-* pointer.
-* params
-* Pointer to an optional array of parameters that may be passed
-* to the interpolation algorithm, if required. If no parameters
-* are required, a NULL pointer should be supplied.
-* flags
-* The bitwise OR of a set of flag values which provide
-* additional control over the resampling operation.
-* badval_ptr
-* If the AST__USEBAD flag is set (above), this parameter is a
-* pointer to a value which is used to identify bad data and/or
-* variance values in the input array(s). The referenced value's
-* data type must match that of the "in" (and "in_var")
-* arrays. Unless the AST__NOBAD flag is set, the same value will
-* also be used to flag any output array elements for which
-* resampled values could not be obtained. The output arrays(s)
-* may be flagged with this value whether or not the AST__USEBAD
-* flag is set (the function return value indicates whether any
-* such values have been produced).
-* ndim_out
-* The number of dimensions in the output grid. This should be
-* at least one.
-* lbnd_out
-* Pointer to an array of integers, with "ndim_out" elements.
-* This should give the coordinates of the centre of the first
-* pixel in the output data grid along each dimension.
-* ubnd_out
-* Pointer to an array of integers, with "ndim_out" elements.
-* This should give the coordinates of the centre of the last
-* pixel in the output data grid along each dimension.
-*
-* Note that "lbnd_out" and "ubnd_out" together define the shape
-* and size of the output data grid in the same way as "lbnd_in"
-* and "ubnd_in" define the shape and size of the input grid
-* (see above).
-* lbnd
-* Pointer to an array of integers, with "ndim_out" elements.
-* This should give the coordinates of the first pixel in the
-* section of the output data grid for which a value is
-* required.
-* ubnd
-* Pointer to an array of integers, with "ndim_out" elements.
-* This should give the coordinates of the last pixel in the
-* section of the output data grid for which a value is
-* required.
-*
-* Note that "lbnd" and "ubnd" define the shape and position of
-* the section of the output grid for which resampled values are
-* required. This section should lie wholly within the extent of
-* the output grid (as defined by the "lbnd_out" and "ubnd_out"
-* arrays). Regions of the output grid lying outside this section
-* will not be modified.
-* out
-* Pointer to an array with the same data type as the "in"
-* array, into which the resampled data will be returned. The
-* storage order should be such that the coordinate of the first
-* dimension varies most rapidly and that of the final dimension
-* least rapidly (i.e. Fortran array storage order is used).
-* out_var
-* An optional pointer to an array with the same data type and
-* size as the "out" array, into which variance estimates for
-* the resampled values may be returned. This array will only be
-* used if the "in_var" array has been given.
-*
-* If no output variance estimates are required, a NULL pointer
-* should be given.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The number of output grid points for which no valid output value
-* could be obtained.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Constants: */
- const int mxpix = 2 * 1024; /* Maximum number of pixels in a block (this
- relatively small number seems to give best
- performance) */
-
-/* Local Variables: */
- double factor; /* Flux conservation factor */
- int *dim_block; /* Pointer to array of block dimensions */
- int *lbnd_block; /* Pointer to block lower bound array */
- int *ubnd_block; /* Pointer to block upper bound array */
- int dim; /* Dimension size */
- int done; /* All blocks resampled? */
- int hilim; /* Upper limit on maximum block dimension */
- int idim; /* Loop counter for dimensions */
- int lolim; /* Lower limit on maximum block dimension */
- int mxdim_block; /* Maximum block dimension */
- int npix; /* Number of pixels in block */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Allocate workspace. */
- lbnd_block = astMalloc( sizeof( int ) * (size_t) ndim_out );
- ubnd_block = astMalloc( sizeof( int ) * (size_t) ndim_out );
- dim_block = astMalloc( sizeof( int ) * (size_t) ndim_out );
- if ( astOK ) {
-
-/* Find the optimum block size. */
-/* ---------------------------- */
-/* We first need to find the maximum extent which a block of output
- pixels may have in each dimension. We determine this by taking the
- output grid extent in each dimension and then limiting the maximum
- dimension size until the resulting number of pixels is sufficiently
- small. This approach allows the block shape to approximate (or
- match) the output grid shape when appropriate. */
-
-/* First loop to calculate the total number of output pixels and the
- maximum output dimension size. */
- npix = 1;
- mxdim_block = 0;
- for ( idim = 0; idim < ndim_out; idim++ ) {
- dim = ubnd[ idim ] - lbnd[ idim ] + 1;
- npix *= dim;
- if ( mxdim_block < dim ) mxdim_block = dim;
- }
-
-/* If the number of output pixels is too large for a single block, we
- perform iterations to determine the optimum upper limit on a
- block's dimension size. Initialise the limits on this result. */
- if ( npix > mxpix ) {
- lolim = 1;
- hilim = mxdim_block;
-
-/* Loop to perform a binary chop, searching for the best result until
- the lower and upper limits on the result converge to adjacent
- values. */
- while ( ( hilim - lolim ) > 1 ) {
-
-/* Form a new estimate from the mid-point of the previous limits. */
- mxdim_block = ( hilim + lolim ) / 2;
-
-/* See how many pixels a block contains if its maximum dimension is
- limited to this new value. */
- for ( npix = 1, idim = 0; idim < ndim_out ; idim++ ) {
- dim = ubnd[ idim ] - lbnd[ idim ] + 1;
- npix *= ( dim < mxdim_block ) ? dim : mxdim_block;
- }
-
-/* Update the appropriate limit, according to whether the number of
- pixels is too large or too small. */
- *( ( npix <= mxpix ) ? &lolim : &hilim ) = mxdim_block;
- }
-
-/* When iterations have converged, obtain the maximum limit on the
- dimension size of a block which results in no more than the maximum
- allowed number of pixels per block. However, ensure that all block
- dimensions are at least 2. */
- mxdim_block = lolim;
- }
- if ( mxdim_block < 2 ) mxdim_block = 2;
-
-/* Calculate the block dimensions by applying this limit to the output
- grid dimensions. */
- for ( idim = 0; idim < ndim_out ; idim++ ) {
- dim = ubnd[ idim ] - lbnd[ idim ] + 1;
- dim_block[ idim ] = ( dim < mxdim_block ) ? dim : mxdim_block;
-
-/* Also initialise the lower and upper bounds of the first block of
- output grid pixels to be resampled, ensuring that this does not
- extend outside the grid itself. */
- lbnd_block[ idim ] = lbnd[ idim ];
- ubnd_block[ idim ] = MinI( lbnd[ idim ] + dim_block[ idim ] - 1,
- ubnd[ idim ], status );
- }
-
-/* Determine the flux conservation constant if needed. */
-/* --------------------------------------------------- */
- if( ( flags & AST__CONSERVEFLUX ) && linear_fit ) {
- factor = MatrixDet( ndim_in, linear_fit + ndim_in, status );
- } else {
- factor = 1.0;
- }
-
-/* Resample each block of output pixels. */
-/* ------------------------------------- */
-/* Loop to generate the extent of each block of output pixels and to
- resample them. */
- done = 0;
- while ( !done && astOK ) {
-
-/* Resample the current block, accumulating the sum of bad pixels
- produced. */
- result += ResampleSection( this, linear_fit,
- ndim_in, lbnd_in, ubnd_in,
- in, in_var, type, interp, finterp, params,
- factor, flags, badval_ptr,
- ndim_out, lbnd_out, ubnd_out,
- lbnd_block, ubnd_block, out, out_var, status );
-
-/* Update the block extent to identify the next block of output
- pixels. */
- idim = 0;
- do {
-
-/* We find the least significant dimension where the upper bound of
- the block has not yet reached the upper bound of the region of the
- output grid which we are resampling. The block's position is then
- incremented by one block extent along this dimension, checking that
- the resulting extent does not go outside the region being
- resampled. */
- if ( ubnd_block[ idim ] < ubnd[ idim ] ) {
- lbnd_block[ idim ] = MinI( lbnd_block[ idim ] +
- dim_block[ idim ], ubnd[ idim ], status );
- ubnd_block[ idim ] = MinI( lbnd_block[ idim ] +
- dim_block[ idim ] - 1,
- ubnd[ idim ], status );
- break;
-
-/* If any less significant dimensions are found where the upper bound
- of the block has reached its maximum value, we reset the block to
- its lowest position. */
- } else {
- lbnd_block[ idim ] = lbnd[ idim ];
- ubnd_block[ idim ] = MinI( lbnd[ idim ] + dim_block[ idim ] - 1,
- ubnd[ idim ], status );
-
-/* All the blocks have been processed once the position along the most
- significant dimension has been reset. */
- done = ( ++idim == ndim_out );
- }
- } while ( !done );
- }
- }
-
-/* Free the workspace. */
- lbnd_block = astFree( lbnd_block );
- ubnd_block = astFree( ubnd_block );
- dim_block = astFree( dim_block );
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a Mapping.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void SetAttrib( AstObject *this, const char *setting )
-
-* Class Membership:
-* Mapping member function (over-rides the astSetAttrib protected
-* method inherited from the Object class).
-
-* Description:
-* This function assigns an attribute value for a Mapping, the
-* attribute and its value being specified by means of a string of
-* the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in
-* lower case with no white space present. The value to the right
-* of the "=" should be a suitable textual representation of the
-* value to be assigned and this will be interpreted according to
-* the attribute's data type. White space surrounding the value is
-* only significant for string attributes.
-
-* Parameters:
-* this
-* Pointer to the Mapping.
-* setting
-* Pointer to a null terminated string specifying the new attribute
-* value.
-*/
-
-/* Local Variables: */
- AstMapping *this; /* Pointer to the Mapping structure */
- int invert; /* Invert attribute value */
- int len; /* Length of setting string */
- int nc; /* Number of characters read by astSscanf */
- int report; /* Report attribute value */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Mapping structure. */
- this = (AstMapping *) this_object;
-
-/* Obtain the length of the setting string. */
- len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
- the setting string and extract the attribute value (or an offset to
- it in the case of string values). In each case, use the value set
- in "nc" to check that the entire string was matched. Once a value
- has been obtained, use the appropriate method to set it. */
-
-/* Invert. */
-/* ------- */
- if ( nc = 0,
- ( 1 == astSscanf( setting, "invert= %d %n", &invert, &nc ) )
- && ( nc >= len ) ) {
- astSetInvert( this, invert );
-
-/* Report. */
-/* ------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "report= %d %n", &report, &nc ) )
- && ( nc >= len ) ) {
- astSetReport( this, report );
-
-/* Define a macro to see if the setting string matches any of the
- read-only attributes of this class. */
-#define MATCH(attrib) \
- ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
- ( nc >= len ) )
-
-/* If the attribute was not recognised, use this macro to report an error
- if a read-only attribute has been specified. */
- } else if ( MATCH( "nin" ) ||
- MATCH( "nout" ) ||
- MATCH( "islinear" ) ||
- MATCH( "issimple" ) ||
- MATCH( "tranforward" ) ||
- MATCH( "traninverse" ) ) {
- astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.", status,
- setting, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-
-/* Undefine macros local to this function. */
-#undef MATCH
-}
-
-static void Sinc( double offset, const double params[], int flags,
- double *value, int *status ) {
-/*
-* Name:
-* Sinc
-
-* Purpose:
-* 1-dimensional sinc(pi*x) interpolation kernel.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void Sinc( double offset, const double params[], int flags,
-* double *value, int *status )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function calculates the value of a 1-dimensional sub-pixel
-* interpolation kernel. The function used is sinc(pi*x), where
-* sinc(z)=sin(z)/z.
-
-* Parameters:
-* offset
-* The offset of a pixel from the interpolation point, measured
-* in pixels.
-* params
-* Not used.
-* flags
-* Not used.
-* value
-* Pointer to a double to receive the calculated kernel value.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function does not perform error checking and does not
-* generate errors.
-*/
-
-/* Local Variables: */
- static double pi; /* Value of pi */
- static int init = 0; /* Initialisation flag */
-
-/* On the first invocation, initialise a local value for pi. Do this
- only once. */
- if ( !init ) {
- pi = acos( -1.0 );
- init = 1;
- }
-
-/* Scale the offset. */
- offset *= pi;
-
-/* Evaluate the function. */
- *value = ( offset != 0.0 ) ? ( sin( offset ) / offset ) : 1.0;
-}
-
-static void SincCos( double offset, const double params[], int flags,
- double *value, int *status ) {
-/*
-* Name:
-* SincCos
-
-* Purpose:
-* 1-dimensional sinc(pi*x)*cos(k*pi*x) interpolation kernel.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void SincCos( double offset, const double params[], int flags,
-* double *value, int *status )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function calculates the value of a 1-dimensional sub-pixel
-* interpolation kernel. The function used is sinc(pi*x)*cos(k*pi*x)
-* out to the point where cos(k*pi*x) = 0, and zero beyond. Here,
-* sinc(z)=sin(z)/z.
-
-* Parameters:
-* offset
-* The offset of a pixel from the interpolation point, measured
-* in pixels.
-* params
-* The first element of this array should give a value for "k"
-* in the cos(k*pi*x) term.
-* flags
-* Not used.
-* value
-* Pointer to a double to receive the calculated kernel value.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function does not perform error checking and does not
-* generate errors.
-*/
-
-/* Local Variables: */
- double offset_k; /* Scaled offset */
- static double halfpi; /* Value of pi/2 */
- static double pi; /* Value of pi */
- static int init = 0; /* Initialisation flag */
-
-/* On the first invocation, initialise local values for pi and
- pi/2. Do this only once. */
- if ( !init ) {
- pi = acos( -1.0 );
- halfpi = 0.5 * pi;
- init = 1;
- }
-
-/* Multiply the offset by pi and remove its sign. */
- offset = pi * fabs( offset );
-
-/* Find the offset scaled by the "k" factor. */
- offset_k = offset * params[ 0 ];
-
-/* If the cos(k*pi*x) term has not reached zero, calculate the
- result. */
- if ( offset_k < halfpi ) {
- *value = ( ( offset != 0.0 ) ? ( sin( offset ) / offset ) : 1.0 ) *
- cos( offset_k );
-
-/* Otherwise, the result is zero. */
- } else {
- *value = 0.0;
- }
-}
-
-static void SincGauss( double offset, const double params[], int flags,
- double *value, int *status ) {
-/*
-* Name:
-* SincGauss
-
-* Purpose:
-* 1-dimensional sinc(pi*x)*exp(-k*x*x) interpolation kernel.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void SincGauss( double offset, const double params[], int flags,
-* double *value, int *status )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function calculates the value of a 1-dimensional sub-pixel
-* interpolation kernel. The function used is sinc(pi*x)*exp(-k*x*x),
-* where sinc(z)=sin(z)/z.
-
-* Parameters:
-* offset
-* The offset of a pixel from the interpolation point, measured
-* in pixels.
-* params
-* The first element of this array should give a value for "k"
-* in the exp(-k*x*x) term.
-* flags
-* Not used.
-* value
-* Pointer to a double to receive the calculated kernel value.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function does not perform error checking and does not
-* generate errors.
-*/
-
-/* Local Variables: */
- double offset_pi; /* Offset multiplied by pi */
- static double pi; /* Value of pi */
- static int init = 0; /* Initialisation flag */
-
-/* On the first invocation, initialise a local value for pi. Do this
- only once. */
- if ( !init ) {
- pi = acos( -1.0 );
- init = 1;
- }
-
-/* Find the offset scaled by pi. */
- offset_pi = pi * offset;
-
-/* Calculate the result. */
- *value = ( ( offset_pi != 0.0 ) ? ( sin( offset_pi ) / offset_pi ) : 1.0 ) *
- exp( -params[ 0 ] * offset * offset );
-}
-
-static void SincSinc( double offset, const double params[], int flags,
- double *value, int *status ) {
-/*
-* Name:
-* SincSinc
-
-* Purpose:
-* 1-dimensional sinc(pi*x)*sinc(k*pi*x) interpolation kernel.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void SincSinc( double offset, const double params[], int flags,
-* double *value, int *status )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function calculates the value of a 1-dimensional sub-pixel
-* interpolation kernel. The function used is sinc(pi*x)*sinc(k*pi*x),
-* out to the point where sinc(k*pi*x)=0, and zero beyond. Here,
-* sinc(z)=sin(z)/z.
-
-* Parameters:
-* offset
-* The offset of a pixel from the interpolation point, measured
-* in pixels.
-* params
-* The first element of this array should give a value for "k"
-* in the sinc(k*pi*x) term.
-* flags
-* Not used.
-* value
-* Pointer to a double to receive the calculated kernel value.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function does not perform error checking and does not
-* generate errors.
-*/
-
-/* Local Variables: */
- double offset_k; /* Scaled offset */
- static double halfpi; /* Value of pi/2 */
- static double pi; /* Value of pi */
- static int init = 0; /* Initialisation flag */
-
-/* On the first invocation, initialise local values for pi and
- pi/2. Do this only once. */
- if ( !init ) {
- pi = acos( -1.0 );
- halfpi = 0.5 * pi;
- init = 1;
- }
-
-/* Multiply the offset by pi and remove its sign. */
- offset = pi * fabs( offset );
-
-/* Find the offset scaled by the "k" factor. */
- offset_k = offset * params[ 0 ];
-
-/* If the sinc(k*pi*x) term has not reached zero, calculate the
- result. */
- if ( offset_k < halfpi ) {
- *value = ( ( offset != 0.0 ) ? ( sin( offset ) / offset ) : 1.0 ) *
- ( ( offset_k != 0.0 ) ? ( sin( offset_k ) / offset_k ) : 1.0 );
-
-/* Otherwise, the result is zero. */
- } else {
- *value = 0.0;
- }
-}
-
-static AstMapping *Simplify( AstMapping *this, int *status ) {
-/*
-*++
-* Name:
-c astSimplify
-f AST_SIMPLIFY
-
-* Purpose:
-* Simplify a Mapping.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "mapping.h"
-c AstMapping *astSimplify( AstMapping *this )
-f RESULT = AST_SIMPLIFY( THIS, STATUS )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-* This function simplifies a Mapping (which may be a compound
-* Mapping such as a CmpMap) to eliminate redundant computational
-* steps, or to merge separate steps which can be performed more
-* efficiently in a single operation.
-*
-* As a simple example, a Mapping which multiplied coordinates by
-* 5, and then multiplied the result by 10, could be simplified to
-* a single step which multiplied by 50. Similarly, a Mapping which
-* multiplied by 5, and then divided by 5, could be reduced to a
-* simple copying operation.
-*
-* This function should typically be applied to Mappings which have
-* undergone substantial processing or have been formed by merging
-* other Mappings. It is of potential benefit, for example, in
-* reducing execution time if applied before using a Mapping to
-* transform a large number of coordinates.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the original Mapping.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astSimplify()
-f AST_SIMPLIFY = INTEGER
-* A new pointer to the (possibly simplified) Mapping.
-
-* Applicability:
-* Mapping
-* This function applies to all Mappings.
-* FrameSet
-* If the supplied Mapping is a FrameSet, the returned Mapping
-* will be a copy of the supplied FrameSet in which all the
-* inter-Frame Mappings have been simplified.
-
-* Notes:
-* - This function can safely be applied even to Mappings which
-* cannot be simplified. If no simplification is possible, it
-c behaves exactly like astClone and returns a pointer to the
-f behaves exactly like AST_CLONE and returns a pointer to the
-* original Mapping.
-* - The Mapping returned by this function may not be independent
-* of the original (even if simplification was possible), and
-* modifying it may therefore result in indirect modification of
-* the original. If a completely independent result is required, a
-c copy should be made using astCopy.
-f copy should be made using AST_COPY.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
- AstMapping **map_list; /* Pointer to array of Mapping pointers */
- AstMapping *map; /* Cloned pointer to nominated Mapping */
- AstMapping *result; /* Pointer to result Mapping */
- int *invert_list; /* Pointer to array of invert flags */
- int imap; /* Loop counter for Mappings */
- int modified; /* Index of first modified element */
- int nmap; /* Number of Mappings */
- int simpler; /* Simplification achieved? */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the inherited status. */
- if ( !astOK ) return result;
-
-/* Initialise dynamic arrays of Mapping pointers and associated invert
- flags. */
- nmap = 0;
- map_list = NULL;
- invert_list = NULL;
-
-/* Build a Mapping list to contain this Mapping (the list should only
- have 1 element). */
- astMapList( this, 1, astGetInvert( this ), &nmap, &map_list, &invert_list );
-
-/* Pass the list repeatedly to the "astMapMerge" method for
- simplification. */
- simpler = 0;
- while ( astOK ) {
- map = astClone( map_list[ 0 ] );
- modified = astMapMerge( map, 0, 1, &nmap, &map_list, &invert_list );
- map = astAnnul( map );
-
-/* Quit looping if the number of Mappings increases above 1, or if no
- further change occurs. Note if any simplification was achieved. */
- if ( ( nmap > 1 ) || ( modified < 0 ) ) break;
- simpler = 1;
- }
-
-/* Check whether simplification has occurred. If not, simply clone the
- original Mapping pointer. This is what will normally happen for
- Mapping classes which inherit the default (null) "astMapMerge"
- method from this class and do not define one of their own. */
- if ( astOK ) {
- if ( !simpler || ( nmap > 1 ) ) {
- result = astClone( this );
-
-/* If simplification occurred, test if the resulting Mapping has the
- Invert attribute value we want. If so, we can simply clone a
- pointer to it. */
- } else {
- if ( invert_list[ 0 ] == astGetInvert( map_list[ 0 ] ) ) {
- result = astClone( map_list[ 0 ] );
-
-/* If not, we must make a copy. */
- } else {
- result = astCopy( map_list[ 0 ] );
-
-/* Either clear the copy's Invert attribute, or set it to 1, as
- required. */
- if ( invert_list[ 0 ] ) {
- astSetInvert( result, 1 );
- } else {
- astClearInvert( result );
- }
- }
- }
- }
-
-/* Loop to annul all the pointers in the Mapping list. */
- for ( imap = 0; imap < nmap; imap++ ) {
- map_list[ imap ] = astAnnul( map_list[ imap ] );
- }
-
-/* Free the dynamic arrays. */
- map_list = astFree( map_list );
- invert_list = astFree( invert_list );
-
-/* If an error occurred, annul the returned Mapping. */
- if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static void Somb( double offset, const double params[], int flags,
- double *value, int *status ) {
-/*
-* Name:
-* Somb
-
-* Purpose:
-* 1-dimensional somb(pi*x) interpolation kernel.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void Somb( double offset, const double params[], int flags,
-* double *value, int *status )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function calculates the value of a 1-dimensional sub-pixel
-* interpolation kernel. The function used is somb(pi*x), where
-* somb(z)=2*J1(z)/z (J1 is a Bessel function of the first kind of
-* order 1).
-
-* Parameters:
-* offset
-* The offset of a pixel from the interpolation point, measured
-* in pixels.
-* params
-* Not used.
-* flags
-* Not used.
-* value
-* Pointer to a double to receive the calculated kernel value.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function does not perform error checking and does not
-* generate errors.
-*/
-
-/* Local Variables: */
- static double pi; /* Value of pi */
- static int init = 0; /* Initialisation flag */
-
-/* On the first invocation, initialise a local value for pi. Do this
- only once. */
- if ( !init ) {
- pi = acos( -1.0 );
- init = 1;
- }
-
-/* Scale the offset. */
- offset *= pi;
-
-/* Evaluate the function. */
- *value = ( offset != 0.0 ) ? ( 2.0*J1Bessel( offset, status ) / offset ) : 1.0;
-}
-
-static void SombCos( double offset, const double params[], int flags,
- double *value, int *status ) {
-/*
-* Name:
-* SombCos
-
-* Purpose:
-* 1-dimensional somb(pi*x)*cos(k*pi*x) interpolation kernel.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void SombCos( double offset, const double params[], int flags,
-* double *value, int *status )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function calculates the value of a 1-dimensional sub-pixel
-* interpolation kernel. The function used is somb(pi*x)*cos(k*pi*x)
-* out to the point where cos(k*pi*x) = 0, and zero beyond. Here,
-* somb(z)=2*J1(z)/z (J1 is a Bessel function of the first kind of
-* order 1).
-
-* Parameters:
-* offset
-* The offset of a pixel from the interpolation point, measured
-* in pixels.
-* params
-* The first element of this array should give a value for "k"
-* in the cos(k*pi*x) term.
-* flags
-* Not used.
-* value
-* Pointer to a double to receive the calculated kernel value.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function does not perform error checking and does not
-* generate errors.
-*/
-
-/* Local Variables: */
- double offset_k; /* Scaled offset */
- static double halfpi; /* Value of pi/2 */
- static double pi; /* Value of pi */
- static int init = 0; /* Initialisation flag */
-
-/* On the first invocation, initialise local values for pi and
- pi/2. Do this only once. */
- if ( !init ) {
- pi = acos( -1.0 );
- halfpi = 0.5 * pi;
- init = 1;
- }
-
-/* Multiply the offset by pi and remove its sign. */
- offset = pi * fabs( offset );
-
-/* Find the offset scaled by the "k" factor. */
- offset_k = offset * params[ 0 ];
-
-/* If the cos(k*pi*x) term has not reached zero, calculate the
- result. */
- if ( offset_k < halfpi ) {
- *value = ( ( offset != 0.0 ) ? ( J1Bessel( offset, status ) / offset ) : 1.0 ) *
- cos( offset_k );
-
-/* Otherwise, the result is zero. */
- } else {
- *value = 0.0;
- }
-}
-
-static int SpecialBounds( const MapData *mapdata, double *lbnd, double *ubnd,
- double xl[], double xu[], int *status ) {
-/*
-* Name:
-* SpecialBounds
-
-* Purpose:
-* Estimate coordinate bounds using special points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int SpecialBounds( const MapData *mapdata, double *lbnd, double *ubnd,
-* double xl[], double xu[], int *status );
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function makes a rough estimate of the lower and upper
-* bounds of a Mapping function over a constrained region of its
-* input coordinate space by transforming a set of special test
-* points. The points used lie at the corners of the constrained
-* region, at the centre of each of its faces, at its centroid, and
-* (if within the coordinate constraints) the origin.
-*
-* In many practical cases, the true extrema may actually lie at
-* one or other of these points, in which case the true bounds will
-* be found. In other cases, this function only provides an
-* approximate limit on each bound (there is no way of telling if
-* this is the case, however). In either case, having these initial
-* estimates can speed subsequent searches to find the global
-* extrema as well as making that search more secure
-
-* Parameters:
-* mapdata
-* Pointer to a MapData structure describing the Mapping
-* function, its coordinate constraints, etc.
-* lbnd
-* Pointer to a double. On entry, this should contain a
-* previously-obtained upper limit on the lower bound, or
-* AST__BAD if no such limit is available. On exit, it will be
-* updated with a new estimate of the lower bound, if a better
-* one has been found.
-* ubnd
-* Pointer to a double. On entry, this should contain a
-* previously-obtained lower limit on the upper bound, or
-* AST__BAD if no such limit is available. On exit, it will be
-* updated with a new estimate of the upper bound, if a better
-* one has been found.
-* xl
-* Pointer to an array of double, with one element for each
-* input coordinate, in which to return the position of a (not
-* necessarily unique) input point at which the lower output
-* bound is reached. This array is not altered if an improved
-* estimate of the lower bound cannot be found.
-* xu
-* Pointer to an array of double, with one element for each
-* input coordinate, in which to return the position of a (not
-* necessarily unique) input point at which the upper output
-* bound is reached. This array is not altered if an improved
-* estimate of the upper bound cannot be found.
-* status
-* Pointer to the inherited status variable.
-
-* Returned:
-* A flag indicating if the returned values can be refined.
-
-*/
-
-/* Local Variables: */
- AstPointSet *pset_in; /* PointSet for input coordinates */
- AstPointSet *pset_out; /* PointSet for output coordinates */
- double **ptr_in; /* Pointer to input coordinates */
- double **ptr_out; /* Pointer to output coordinates */
- double *sxl; /* Secondary xl values */
- double *sxu; /* Secondary xu values */
- double f; /* Output coordinate value */
- double slbnd; /* Secondary lbnd value */
- double subnd; /* Secondary lbnd value */
- int *limit; /* Workspace for lower/upper limit flags */
- int bad; /* Output coordinate bad? */
- int coord; /* Loop counter for coordinates */
- int done; /* All corners done? */
- int face; /* Loop counter for faces */
- int ic; /* Index of corner */
- int icen; /* Index of centroid point */
- int ncorner; /* Number of corners */
- int ncoord; /* Number of input coordinates */
- int npoint; /* Number of points */
- int origin; /* Origin lies within bounds? */
- int point; /* Loop counter for points */
- int result; /* Returned flag */
-
-/* Initialise */
- result = 1;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- pset_out = NULL;
-
-/* Obtain the number of coordinate axes and calculate the number of
- points required in order to place one at every corner of the
- constrained region of the coordinate space. */
- ncoord = mapdata->nin;
- for ( npoint = 1, coord = 0; coord < ncoord; coord++ ) npoint *= 2;
-
-/* Also include a second point at each corner,offset slightly from the
- corner towards the centroid */
- ncorner = npoint;
- npoint *= 2;
-
-/* Also include placing one at the centre of every face and one at the
- centroid of the constrained coordinate space. */
- npoint += 2 * ncoord + 1;
-
-/* Determine if the origin lies within the bounds. If so, include it
- as a further point. */
- origin = 1;
- for ( coord = 0; coord < ncoord; coord++ ) {
- if ( ( mapdata->lbnd[ coord ] > 0.0 ) ||
- ( mapdata->ubnd[ coord ] < 0.0 ) ) {
- origin = 0;
- break;
- }
- }
- if ( origin ) npoint++;
-
-/* Initialise secondary bounds to be the supplied primary bounds */
- slbnd = *lbnd;
- subnd = *ubnd;
-
-/* Create workspace for ssecondary xl xu values */
- sxl = astMalloc( sizeof(double)*(size_t) ncoord );
- sxu = astMalloc( sizeof(double)*(size_t) ncoord );
-
-/* Create a PointSet to hold the coordinates and obtain a pointer to
- its coordinate values. Also allocate workspace for calculating the
- corner coordinates. */
- pset_in = astPointSet( npoint, ncoord, "", status );
- ptr_in = astGetPoints( pset_in );
- limit = astMalloc( sizeof( int ) * (size_t) ncoord );
- if ( astOK ) {
-
-/* Initialise the workspace. */
- for ( coord = 0; coord < ncoord; coord++ ) limit[ coord ] = 0;
-
-/* Loop to visit every corner. */
- point = 0;
- done = 0;
- do {
-
-/* At each corner, translate the contents of the "limit" array
- (containing zeros and ones) into the lower or upper bound on the
- corresponding axis. This gives the coordinates of the corner, which
- we store in the input PointSet. */
- for ( coord = 0; coord < ncoord; coord++ ) {
- ptr_in[ coord ][ point ] = limit[ coord ] ?
- mapdata->ubnd[ coord ] :
- mapdata->lbnd[ coord ];
- }
-
-/* Increment the count of points (i.e. corners). */
- point++;
-
-/* Now update the limit array to identify the next corner. */
- coord = 0;
- do {
-
-/* Flip the first zero found to become a one. This gives a new
- corner. */
- if ( !limit[ coord ] ) {
- limit[ coord ] = 1;
- break;
-
-/* However, first flip any previous ones to become zeros and then
- examine the next element. We have processed all corners once the
- array is entirely filled with ones. */
- } else {
- limit[ coord ] = 0;
- done = ( ++coord == ncoord );
- }
- } while ( !done );
- } while ( !done );
-
-/* Once the corners have been processed, loop to consider the centre
- of each face. */
- for ( face = 0; face < ( 2 * ncoord ); face++ ) {
-
-/* First calculate the centroid value for each coordinate. Then set
- one of these coordinates to the bound where the face lies. */
- for ( coord = 0; coord < ncoord; coord++ ) {
- ptr_in[ coord ][ point ] = 0.5 * ( mapdata->lbnd[ coord ] +
- mapdata->ubnd[ coord ] );
- }
- ptr_in[ face / 2 ][ point ] = ( face % 2 ) ?
- mapdata->lbnd[ face / 2 ] :
- mapdata->ubnd[ face / 2 ];
-
-/* Increment the count of points. */
- point++;
- }
-
-/* Place a point at the centroid of the constrained coordinate
- space. */
- for ( coord = 0; coord < ncoord; coord++ ) {
- ptr_in[ coord ][ point ] = 0.5 * ( mapdata->lbnd[ coord ] +
- mapdata->ubnd[ coord ] );
- }
- icen = point++;
-
-/* Add a set of positions which are offset slightly from each corner
- towards the centroid. */
- for ( ic = 0; ic < ncorner; ic++ ) {
- for ( coord = 0; coord < ncoord; coord++ ) {
- ptr_in[ coord ][ point ] = 0.999*ptr_in[ coord ][ ic ] +
- 0.001*ptr_in[ coord ][ icen ];
- }
- point++;
- }
-
-/* Finally, add the origin, if it lies within the constraints. */
- if ( origin ) {
- for ( coord = 0; coord < ncoord; coord++ ) {
- ptr_in[ coord ][ point ] = 0.0;
- }
- }
-
-/* Once all the input coordinates have been calculated, transform them
- and obtain a pointer to the resulting coordinate values. */
- pset_out = astTransform( mapdata->mapping, pset_in, mapdata->forward,
- NULL );
- ptr_out = astGetPoints( pset_out );
- if ( astOK ) {
-
-/* Loop through each point and test if any of its transformed
- coordinates is bad. */
- for ( point = 0; point < npoint; point++ ) {
- bad = 0;
- for ( coord = 0; coord < mapdata->nout; coord++ ) {
- if ( ptr_out[ coord ][ point ] == AST__BAD ) {
- bad = 1;
- break;
- }
- }
-
-/* If so, we ignore the point. Otherwise, extract the required
- coordinate. */
- f = ptr_out[ mapdata->coord ][ point ];
- if ( !bad ) {
-
-/* Use this to update the lower and upper bounds we are seeking. If
- either bound is updated, also store the coordinates of the
- corresponding input point. */
- if ( ( *lbnd == AST__BAD ) || ( f < *lbnd ) ) {
- *lbnd = f;
- for ( coord = 0; coord < ncoord; coord++ ) {
- xl[ coord ] = ptr_in[ coord ][ point ];
- }
- }
- if ( ( *ubnd == AST__BAD ) || ( f > *ubnd ) ) {
- *ubnd = f;
- for ( coord = 0; coord < ncoord; coord++ ) {
- xu[ coord ] = ptr_in[ coord ][ point ];
- }
- }
-
-/* If this point has a bad coord value, it may still be useful if the
- required coord value is not bad. In this case, extract the required
- coordinate. */
- } else if ( f != AST__BAD ) {
-
-/* Use this to update secondary lower and upper bounds we are seeking.
- These will be returned if no primary values are found via the previous
- code block. */
- if ( ( slbnd == AST__BAD ) || ( f < slbnd ) ) {
- slbnd = f;
- for ( coord = 0; coord < ncoord; coord++ ) {
- sxl[ coord ] = ptr_in[ coord ][ point ];
- }
- }
- if ( ( subnd == AST__BAD ) || ( f > subnd ) ) {
- subnd = f;
- for ( coord = 0; coord < ncoord; coord++ ) {
- sxu[ coord ] = ptr_in[ coord ][ point ];
- }
- }
- }
- }
-
-/* If no primary values could be found, use secondary values. */
- if( *lbnd == AST__BAD && *ubnd == AST__BAD ) {
- *lbnd = slbnd;
- *ubnd = subnd;
- for ( coord = 0; coord < ncoord; coord++ ) {
- xu[ coord ] = sxu[ coord ];
- xl[ coord ] = sxl[ coord ];
- }
- result = ( slbnd == AST__BAD || subnd == AST__BAD );
- }
- }
- }
-
-/* Free workspace */
- sxl = astFree( sxl );
- sxu = astFree( sxu );
-
-/* Annul the temporary PointSets and free the workspace. */
- pset_in = astAnnul( pset_in );
- pset_out = astAnnul( pset_out );
- limit = astFree( limit );
-
- return result;
-}
-
-/*
-* Name:
-* SpreadKernel1<X>
-
-* Purpose:
-* Rebin a data grid, using a 1-d interpolation kernel.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void SpreadKernel1<X>( AstMapping *this, int ndim_out,
-* const int *lbnd_out, const int *ubnd_out,
-* const <Xtype> *in, const <Xtype> *in_var,
-* int npoint, const int *offset,
-* const double *const *coords,
-* void (* kernel)( double, const double [], int,
-* double *, int * ),
-* int neighb, const double *params, int flags,
-* <Xtype> badval, int npix_out, <Xtype> *out,
-* <Xtype> *out_var, double *work, int *nused )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This is a set of functions which rebins a rectangular region of an
-* input grid of data (and, optionally, associated statistical variance
-* values) so as to place them into a new output grid. Each input
-* grid point may be mapped on to a position in the output grid in
-* an arbitrary way. The input and output grids may have any number
-* of dimensions, not necessarily equal.
-*
-* Where the input positions given do not correspond with a pixel centre
-* in the output grid, the each input pixel value is spread out between the
-* surrounding output pixels using weights determined by a separable kernel
-* which is the product of a 1-dimensional kernel function evaluated along
-* each output dimension. A pointer should be supplied to the 1-dimensional
-* kernel function to be used.
-
-* Parameters:
-* this
-* Pointer to the Mapping being used in the rebinning operation
-* (this is only used for constructing error messages).
-* ndim_out
-* The number of dimensions in the output grid. This should be at
-* least one.
-* lbnd_out
-* Pointer to an array of integers, with "ndim_out" elements.
-* This should give the coordinates of the centre of the first
-* pixel in the output grid along each dimension.
-* ubnd_out
-* Pointer to an array of integers, with "ndim_out" elements.
-* This should give the coordinates of the centre of the last
-* pixel in the output grid along each dimension.
-*
-* Note that "lbnd_out" and "ubnd_out" together define the shape
-* and size of the output grid, its extent along a particular
-* (i'th) dimension being ubnd_out[i]-lbnd_out[i]+1 (assuming "i"
-* is zero-based). They also define the output grid's coordinate
-* system, with each pixel being of unit extent along each
-* dimension with integral coordinate values at its centre.
-* in
-* Pointer to the array of data to be rebinned. The numerical type
-* of these data should match the function used, as given by the
-* suffix on the function name. Note that details of how the input
-* grid maps on to this array (e.g. the storage order, number of
-* dimensions, etc.) is arbitrary and is specified entirely by means
-* of the "offset" array. The "in" array should therefore contain
-* sufficient elements to accommodate the "offset" values supplied.
-* There is no requirement that all elements of the "in" array
-* should be rebinned, and any which are not addressed by the
-* contents of the "offset" array will be ignored.
-* in_var
-* An optional pointer to a second array of positive numerical
-* values (with the same size and type as the "in" array), which
-* represent estimates of the statistical variance associated
-* with each element of the "in" array. If this second array is
-* given (along with the corresponding "out_var" array), then
-* estimates of the variance of the resampled data will also be
-* returned. It is addressed in exactly the same way (via the
-* "offset" array) as the "in" array.
-*
-* If no variance estimates are required, a NULL pointer should
-* be given.
-* npoint
-* The number of input points which are to be rebinned.
-* offset
-* Pointer to an array of integers with "npoint" elements. For
-* each input point, this array should contain the zero-based
-* offset in the input array(s) (i.e. the "in" and, optionally,
-* the "in_var" arrays) from which the value to be rebinned should
-* be obtained.
-* coords
-* An array of pointers to double, with "ndim_out" elements.
-* Element "coords[coord]" should point at the first element of
-* an array of double (with "npoint" elements) which contains the
-* values of coordinate number "coord" for each point being
-* rebinned. The value of coordinate number "coord" for
-* rebinning point number "point" is therefore given by
-* "coords[coord][point]" (assuming both indices are
-* zero-based). If any point has a coordinate value of AST__BAD
-* associated with it, then the corresponding input data (and
-* variance) value will be ignored.
-* kernel
-* Pointer to the 1-dimensional kernel function to be used.
-* neighb
-* The number of neighbouring pixels in each dimension (on each
-* side of the interpolation position) which are to receive
-* contributions from the input pixel value. This value should be at
-* least 1.
-* params
-* Pointer to an optional array of parameter values to be passed
-* to the kernel function. If no parameters are required by this
-* function, then a NULL pointer may be supplied.
-* flags
-* The bitwise OR of a set of flag values which control the
-* operation of the function. These are chosend from:
-*
-* - AST__USEBAD: indicates whether there are "bad" (i.e. missing) data
-* in the input array(s) which must be recognised. If this flag is not
-* set, all input values are treated literally.
-* - AST__GENVAR: Indicates that output variances should be generated
-* from the spread of values contributing to each output pixel.
-* - AST__USEVAR: Indicates that output variances should be generated
-* by rebinning the input variances.
-* - AST__VARWGT: Indicates that input variances should be used to
-* create weights for the input data values.
-*
-* Only one of AST__GENVAR and AST__USEVAR should be supplied.
-* badval
-* If the AST__USEBAD flag is set in the "flags" value (above),
-* this parameter specifies the value which is used to identify
-* bad data and/or variance values in the input array(s). Its
-* numerical type must match that of the "in" (and "in_var")
-* arrays. The same value will also be used to flag any output
-* array elements for which resampled values could not be
-* obtained. The output arrays(s) may be flagged with this
-* value whether or not the AST__USEBAD flag is set (the
-* function return value indicates whether any such values have
-* been produced).
-* npix_out
-* Number of pixels in output array.
-* out
-* Pointer to an array with the same data type as the "in"
-* array, into which the rebinned data will be returned. The
-* storage order should be such that the index of the first grid
-* dimension varies most rapidly and that of the final dimension
-* least rapidly (i.e. Fortran array storage order).
-* out_var
-* An optional pointer to an array with the same data type and
-* size as the "out" array, into which variance estimates for
-* the rebinned values may be returned. This array will only be
-* used if the "in_var" array has been given. The values returned
-* are estimates of the statistical variance of the corresponding
-* values in the "out" array, on the assumption that all errors in
-* input grid values (in the "in" array) are statistically independent
-* and that their variance estimates (in the "in_var" array) may
-* simply be summed (with appropriate weighting factors).
-*
-* If no output variance estimates are required, a NULL pointer
-* should be given.
-* work
-* A pointer to an array with the same data type and size as the "out"
-* array which is used as work space. The values in the supplied
-* array are incremented on exit by the sum of the weights used
-* with each output pixel.
-* nused
-* An optional pointer to an int which will be incremented by the
-* number of input values pasted into the output array. Ignored if NULL.
-
-* Notes:
-* - There is a separate function for each numerical type of
-* gridded data, distinguished by replacing the <X> in the function
-* name by the appropriate 1- or 2-character suffix.
-*/
-/* Define macros to implement the function for a specific data
- type. */
-#define MAKE_SPREAD_KERNEL1(X,Xtype,IntType) \
-static void SpreadKernel1##X( AstMapping *this, int ndim_out, \
- const int *lbnd_out, const int *ubnd_out, \
- const Xtype *in, const Xtype *in_var, \
- int npoint, const int *offset, \
- const double *const *coords, \
- void (* kernel)( double, const double [], \
- int, double *, int * ), \
- int neighb, const double *params, \
- int flags, Xtype badval, int npix_out, \
- Xtype *out, Xtype *out_var, double *work, \
- int *nused, int *status ) { \
-\
-/* Local Variables: */ \
- astDECLARE_GLOBALS /* Thread-specific data */ \
- Xtype in_val; /* Input pixel value */ \
- Xtype c; \
- double error; \
- double **wtptr; /* Pointer to array of weight pointers */ \
- double *filter; /* Pointer to Nd array of filter values */ \
- double *kstart; /* Pointer to next kernel value */ \
- double *kval; /* Pointer to 1d array of kernel values */ \
- double *wtprod; /* Accumulated weight value array pointer */ \
- double **wtptr_last; /* Array of highest weight pointer values */ \
- double *xnl; /* Pointer to previous ofset array (n-d) */ \
- double xxn; \
- double xxl; /* Previous X offset */ \
- double yyl; /* Previous Y offset */ \
- double pixwt; /* Weight to apply to individual pixel */ \
- double x; /* x coordinate value */ \
- double xn; /* Coordinate value (n-d) */ \
- double y; /* y coordinate value */ \
- double sum; /* Sum of all filter values */ \
- double wgt; /* Weight for input value */ \
- double xx; /* X offset */ \
- double yy; /* Y offset */ \
- double *kp; /* Pointer to next weight values */ \
- int *hi; /* Pointer to array of upper indices */ \
- int *lo; /* Pointer to array of lower indices */ \
- int *jhi; /* Pointer to array of filter upper indices */ \
- int *jlo; /* Pointer to array of filter lower indices */ \
- int *stride; /* Pointer to array of dimension strides */ \
- int bad; /* Output pixel bad? */ \
- int done; /* All pixel indices done? */ \
- int hi_ix; /* Upper output pixel index (x dimension) */ \
- int hi_iy; /* Upper output pixel index (y dimension) */ \
- int hi_jx; /* Upper filter pixel index (x dimension) */ \
- int hi_jy; /* Upper filter pixel index (y dimension) */ \
- int lo_ix; /* Lower output pixel index (x dimension) */ \
- int lo_iy; /* Lower output pixel index (y dimension) */ \
- int lo_jx; /* Lower filter pixel index (x dimension) */ \
- int lo_jy; /* Lower filter pixel index (y dimension) */ \
- int idim; /* Loop counter for dimensions */ \
- int ii; /* Loop counter for dimensions */ \
- int ix; /* Pixel index in output grid x dimension */ \
- int jx; /* Pixel index in filter grid x dimension */ \
- int ixn; /* Pixel index in input grid (n-d) */ \
- int ixn0; /* First pixel index in input grid (n-d) */ \
- int iy; /* Pixel index in output grid y dimension */ \
- int jy; /* Pixel index in filter grid y dimension */ \
- int kerror; /* Error signalled by kernel function? */ \
- int nb2; /* The total number of neighbouring pixels */ \
- int nf; /* Number of pixels in filter array */ \
- int off1; /* Input pixel offset due to y index */ \
- int off_in; /* Offset to input pixel */ \
- int off_out; /* Offset to output pixel */ \
- int point; /* Loop counter for output points */ \
- int s; /* Temporary variable for strides */ \
- int genvar; /* Generate output variances? */ \
- int usebad; /* Use "bad" input pixel values? */ \
- int usevar; /* Process variance array? */ \
- int varwgt; /* Use input variances as weights? */ \
- int ystride; /* Stride along input grid y dimension */ \
- int jxn; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Get a pointer to a structure holding thread-specific global data values */ \
- astGET_GLOBALS(this); \
-\
-/* Further initialisation. */ \
- kerror = 0; \
- sum = 0.0; \
- bad = 0; \
-\
-/* Find the total number of pixels in the filter used to spread a single \
- input pixel into the output image. */ \
- nb2 = 2*neighb; \
- nf = 1; \
- for ( idim = 0; idim < ndim_out; idim++ ) nf *= nb2; \
-\
-/* Allocate workspace to hold the filter values. */ \
- filter = astMalloc( sizeof( double ) * (size_t) nf ); \
- if ( astOK ) { \
-\
-/* Determine if we are processing bad pixels or variances. */ \
- usebad = flags & AST__USEBAD; \
- usevar = 0; \
- genvar = 0; \
- if( flags & AST__GENVAR ) { \
- genvar = out_var && work; \
- } else if( flags & AST__USEVAR ) { \
- usevar = in_var && out_var; \
- } \
- varwgt = ( flags & AST__VARWGT ) && in_var && work; \
-\
-/* Handle the 1-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
- if ( ndim_out == 1 ) { \
-\
-/* Identify eight cases, according to whether bad pixels and/or variances \
- are being processed and/or used. In each case we assign constant values \
- (0 or 1) to the "Usebad", "Usevar" and "Varwgt" flags so that code for \
- handling bad pixels and variances can be eliminated by the compiler's \
- optimisation system when not required. */ \
- if( varwgt ) { \
- if ( usebad ) { \
- if ( usevar ) { \
- KERNEL_1D(X,Xtype,1,1,0,IntType,1) \
- } else if ( genvar ) { \
- KERNEL_1D(X,Xtype,1,0,1,IntType,1) \
- } else { \
- KERNEL_1D(X,Xtype,1,0,0,IntType,1) \
- } \
- } else { \
- if ( usevar ) { \
- KERNEL_1D(X,Xtype,0,1,0,IntType,1) \
- } else if ( genvar ) { \
- KERNEL_1D(X,Xtype,0,0,1,IntType,1) \
- } else { \
- KERNEL_1D(X,Xtype,0,0,0,IntType,1) \
- } \
- } \
- } else { \
- if ( usebad ) { \
- if ( usevar ) { \
- KERNEL_1D(X,Xtype,1,1,0,IntType,0) \
- } else if ( genvar ) { \
- KERNEL_1D(X,Xtype,1,0,1,IntType,0) \
- } else { \
- KERNEL_1D(X,Xtype,1,0,0,IntType,0) \
- } \
- } else { \
- if ( usevar ) { \
- KERNEL_1D(X,Xtype,0,1,0,IntType,0) \
- } else if ( genvar ) { \
- KERNEL_1D(X,Xtype,0,0,1,IntType,0) \
- } else { \
- KERNEL_1D(X,Xtype,0,0,0,IntType,0) \
- } \
- } \
- } \
-\
-/* Exit point on error in kernel function */ \
- Kernel_SError_1d: ; \
-\
-/* Handle the 2-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
- } else if ( ndim_out == 2 ) { \
-\
-/* Calculate the stride along the y dimension of the output grid. */ \
- ystride = ubnd_out[ 0 ] - lbnd_out[ 0 ] + 1; \
-\
-/* Identify eight cases, according to whether bad pixels and/or variances \
- are being processed and/or used. In each case we assign constant values \
- (0 or 1) to the "Usebad", "Usevar" and "Varwgt" flags so that code for \
- handling bad pixels and variances can be eliminated by the compiler's \
- optimisation system when not required. */ \
- if( varwgt ) { \
- if ( usebad ) { \
- if ( usevar ) { \
- KERNEL_2D(X,Xtype,1,1,0,IntType,1) \
- } else if ( genvar ) { \
- KERNEL_2D(X,Xtype,1,0,1,IntType,1) \
- } else { \
- KERNEL_2D(X,Xtype,1,0,0,IntType,1) \
- } \
- } else { \
- if ( usevar ) { \
- KERNEL_2D(X,Xtype,0,1,0,IntType,1) \
- } else if ( genvar ) { \
- KERNEL_2D(X,Xtype,0,0,1,IntType,1) \
- } else { \
- KERNEL_2D(X,Xtype,0,0,0,IntType,1) \
- } \
- } \
- } else { \
- if ( usebad ) { \
- if ( usevar ) { \
- KERNEL_2D(X,Xtype,1,1,0,IntType,0) \
- } else if ( genvar ) { \
- KERNEL_2D(X,Xtype,1,0,1,IntType,0) \
- } else { \
- KERNEL_2D(X,Xtype,1,0,0,IntType,0) \
- } \
- } else { \
- if ( usevar ) { \
- KERNEL_2D(X,Xtype,0,1,0,IntType,0) \
- } else if ( genvar ) { \
- KERNEL_2D(X,Xtype,0,0,1,IntType,0) \
- } else { \
- KERNEL_2D(X,Xtype,0,0,0,IntType,0) \
- } \
- } \
- } \
-\
-/* Exit point on error in kernel function */ \
- Kernel_SError_2d: ; \
-\
-/* Handle other numbers of dimensions. */ \
-/* ----------------------------------- */ \
- } else { \
-\
-/* Allocate workspace. */ \
- hi = astMalloc( sizeof( int ) * (size_t) ndim_out ); \
- lo = astMalloc( sizeof( int ) * (size_t) ndim_out ); \
- jhi = astMalloc( sizeof( int ) * (size_t) ndim_out ); \
- jlo = astMalloc( sizeof( int ) * (size_t) ndim_out ); \
- stride = astMalloc( sizeof( int ) * (size_t) ndim_out ); \
- xnl = astMalloc( sizeof( double ) * (size_t) ndim_out ); \
- kval = astMalloc( sizeof( double ) * (size_t) \
- ( nb2 * ndim_out ) ); \
- wtprod = astMalloc( sizeof( double ) * (size_t) ndim_out ); \
- wtptr = astMalloc( sizeof( double * ) * (size_t) ndim_out ); \
- wtptr_last = astMalloc( sizeof( double * ) * (size_t) ndim_out ); \
- if ( astOK ) { \
-\
-/* Calculate the stride along each dimension of the output grid. */ \
- for ( s = 1, idim = 0; idim < ndim_out; idim++ ) { \
- stride[ idim ] = s; \
- s *= ubnd_out[ idim ] - lbnd_out[ idim ] + 1; \
- xnl[ idim ] = AST__BAD; \
- } \
-\
-/* Identify eight cases, according to whether bad pixels and/or variances \
- are being processed and/or used. In each case we assign constant values \
- (0 or 1) to the "Usebad", "Usevar" and "Varwgt" flags so that code for \
- handling bad pixels and variances can be eliminated by the compiler's \
- optimisation system when not required. */ \
- if( varwgt ) { \
- if ( usebad ) { \
- if ( usevar ) { \
- KERNEL_ND(X,Xtype,1,1,0,IntType,1) \
- } else if ( genvar ) { \
- KERNEL_ND(X,Xtype,1,0,1,IntType,1) \
- } else { \
- KERNEL_ND(X,Xtype,1,0,0,IntType,1) \
- } \
- } else { \
- if ( usevar ) { \
- KERNEL_ND(X,Xtype,0,1,0,IntType,1) \
- } else if ( genvar ) { \
- KERNEL_ND(X,Xtype,0,0,1,IntType,1) \
- } else { \
- KERNEL_ND(X,Xtype,0,0,0,IntType,1) \
- } \
- } \
- } else { \
- if ( usebad ) { \
- if ( usevar ) { \
- KERNEL_ND(X,Xtype,1,1,0,IntType,0) \
- } else if ( genvar ) { \
- KERNEL_ND(X,Xtype,1,0,1,IntType,0) \
- } else { \
- KERNEL_ND(X,Xtype,1,0,0,IntType,0) \
- } \
- } else { \
- if ( usevar ) { \
- KERNEL_ND(X,Xtype,0,1,0,IntType,0) \
- } else if ( genvar ) { \
- KERNEL_ND(X,Xtype,0,0,1,IntType,0) \
- } else { \
- KERNEL_ND(X,Xtype,0,0,0,IntType,0) \
- } \
- } \
- } \
-\
-/* Exit point on error in kernel function */ \
- Kernel_SError_Nd: ;\
- } \
-\
-/* Free the workspace. */ \
- hi = astFree( hi ); \
- lo = astFree( lo ); \
- jhi = astFree( jhi ); \
- jlo = astFree( jlo ); \
- stride = astFree( stride ); \
- xnl = astFree( xnl ); \
- kval = astFree( kval ); \
- wtprod = astFree( wtprod ); \
- wtptr = astFree( wtptr ); \
- wtptr_last = astFree( wtptr_last ); \
- } \
- filter = astFree( filter ); \
- }\
-\
-/* If an error occurred in the kernel function, then report a \
- contextual error message. */ \
- if ( kerror ) { \
- astError( astStatus, "astRebin"#X"(%s): Error signalled by " \
- "user-supplied 1-d interpolation kernel.", status, \
- astGetClass( unsimplified_mapping ) ); \
- } \
-\
-}
-
-
-
-
-#define KERNEL_1D(X,Xtype,Usebad,Usevar,Genvar,IntType,Varwgt) \
-\
-/* We do not yet have a previous filter position. */ \
- xxl = AST__BAD; \
-\
-/* Loop round all input points which are to be rebinned. */ \
- for( point = 0; point < npoint; point++ ) { \
-\
-/* Obtain the input data value which is to be added into the output array. */ \
- off_in = offset[ point ]; \
- in_val = in[ off_in ]; \
-\
-/* If necessary, test if the input data value or variance is bad (or zero). */ \
- if ( Usebad ) { \
- bad = ( in_val == badval ); \
- if ( Usevar || Varwgt ) { \
- bad = bad || ( in_var[ off_in ] == badval ) \
- || ( in_var[ off_in ] <= 0.0 ); \
- } \
- } else { \
- if ( Usevar || Varwgt ) { \
- bad = ( in_var[ off_in ] <= 0.0 ); \
- } else { \
- bad = 0; \
- } \
- } \
-\
-/* Obtain the x coordinate of the current point and test if it is bad. */ \
- x = coords[ 0 ][ point ]; \
- bad = bad || ( x == AST__BAD ); \
-\
-/* If OK, calculate the lowest and highest indices (in the x \
- dimension) of the region of neighbouring pixels that will \
- contribute to the interpolated result. Constrain these values to \
- lie within the output grid. */ \
- if ( !bad ) { \
- ix = (int) floor( x ) - neighb + 1; \
- lo_ix = MaxI( ix, lbnd_out[ 0 ], status ); \
- hi_ix = MinI( ix + nb2 - 1, ubnd_out[ 0 ], status ); \
-\
-/* Skip to the next input point if the current input point makes no \
- contribution to any output pixel. */ \
- if( lo_ix <= hi_ix ) { \
-\
-/* Increment the number of input pixels pasted into the output array. */ \
- if( nused ) (*nused)++; \
-\
-/* Convert these output indices to the corresponding indices \
- within a box [ 0, 2*neighb ] holding the kernel values. */ \
- lo_jx = lo_ix - ix; \
- hi_jx = hi_ix - ix; \
-\
-/* Use the kernel function to fill the work array with weights for all output \
- pixels whether or not they fall within the output array. At the same \
- time find the sum of all the factors. */ \
- xx = (double) ix - x; \
- if( xx != xxl ) { \
- xxl = xx; \
-\
- sum = 0.0; \
- for ( jx = 0; jx < nb2; jx++ ) { \
- ( *kernel )( xx, params, flags, &pixwt, status ); \
-\
-/* Check for errors arising in the kernel function. */ \
- if ( !astOK ) { \
- kerror = 1; \
- goto Kernel_SError_1d; \
- } \
-\
-/* Store the kernel factor and increment the sum of all factors. */ \
- filter[ jx ] = pixwt; \
- sum += pixwt; \
- xx += 1.0; \
- } \
-\
-/* Ensure we do not divide by zero. */ \
- if( sum == 0.0 ) sum = 1.0; \
- } \
-\
-/* If we are using the input data variances as weights, calculate the \
- total weight, incorporating the normalisation factor for the kernel. */ \
- if( Varwgt ) { \
- wgt = 1.0/(sum*in_var[ off_in ]); \
-\
-/* If we are not using input variances as weights, the weight is just the \
- kernel normalisation factor. */ \
- } else { \
- wgt = 1.0/sum; \
- } \
-\
-/* Loop round all the output pixels which receive contributions from this \
- input pixel, calculating the offset of each pixel from the start of the \
- input array. */ \
- off_out = lo_ix - lbnd_out[ 0 ]; \
- for ( jx = lo_jx; jx <= hi_jx; jx++, off_out++ ) { \
-\
-/* Retrieve the weight for the current output pixel and normalise it. */ \
- pixwt = wgt*filter[ jx ]; \
-\
-/* Update the output pixel with the required fraction of the input pixel \
- value. */ \
- c = CONV(IntType,in_val*pixwt); \
- out[ off_out ] += c; \
- if( work ) work[ off_out ] += pixwt; \
-\
- if ( Usevar ) { \
- out_var[ off_out ] += CONV(IntType,in_var[ off_in ]*pixwt*pixwt); \
- } else if ( Genvar && pixwt != 0.0 ) { \
- out_var[ off_out ] += c*c/pixwt; \
- work[ off_out + npix_out ] += pixwt*pixwt; \
- } \
-\
- } \
- } \
- } \
- }
-
-
-
-
-#define KERNEL_2D(X,Xtype,Usebad,Usevar,Genvar,IntType,Varwgt) \
-\
-/* We do not yet have a previous filter position. */ \
- xxl = AST__BAD; \
- yyl = AST__BAD; \
-\
-/* Loop round all input points which are to be rebinned. */ \
- for( point = 0; point < npoint; point++ ) { \
- error = 0.0; \
-\
-/* Obtain the input data value which is to be added into the output array. */ \
- off_in = offset[ point ]; \
- in_val = in[ off_in ]; \
-\
-/* If necessary, test if the input data value or variance is bad (or zero). */ \
- if ( Usebad ) { \
- bad = ( in_val == badval ); \
- if ( Usevar || Varwgt ) { \
- bad = bad || ( in_var[ off_in ] == badval ) \
- || ( in_var[ off_in ] <= 0.0 ); \
- } \
- } else { \
- if ( Usevar || Varwgt ) { \
- bad = ( in_var[ off_in ] <= 0.0 ); \
- } else { \
- bad = 0; \
- } \
- } \
-\
-/* Obtain the x coordinate of the current point and test if it is bad. */ \
- x = coords[ 0 ][ point ]; \
- bad = bad || ( x == AST__BAD ); \
- if ( !bad ) { \
-\
-/* Similarly obtain and test the y coordinate. */ \
- y = coords[ 1 ][ point ]; \
- bad = ( y == AST__BAD ); \
- if ( !bad ) { \
-\
-/* If OK, calculate the lowest and highest indices (in each dimension) \
- of the region of neighbouring output pixels which will receive \
- contributions from the current input pixel. Constrain these values \
- to lie within the input grid. */ \
- ix = (int) floor( x ) - neighb + 1; \
- lo_ix = MaxI( ix, lbnd_out[ 0 ], status ); \
- hi_ix = MinI( ix + nb2 - 1, ubnd_out[ 0 ], status ); \
- iy = (int) floor( y ) - neighb + 1; \
- lo_iy = MaxI( iy, lbnd_out[ 1 ], status ); \
- hi_iy = MinI( iy + nb2 - 1, ubnd_out[ 1 ], status ); \
-\
-/* Skip to the next input point if the current input point makes no \
- contribution to any output pixel. */ \
- if( lo_ix <= hi_ix && lo_iy <= hi_iy ) { \
-\
-/* Increment the number of input pixels pasted into the output array. */ \
- if( nused ) (*nused)++; \
-\
-/* Convert these output indices to the corresponding indices \
- within a box [ 0:2*neighb, 0:2*neighb ] holding the kernel values. */ \
- lo_jx = lo_ix - ix; \
- hi_jx = hi_ix - ix; \
- lo_jy = lo_iy - iy; \
- hi_jy = hi_iy - iy; \
-\
-/* Loop to evaluate the kernel function along the y dimension, storing \
- the resulting weight values in all elements of each associated row \
- in the kvar array. The function's argument is the offset of the \
- output pixel (along this dimension) from the central output \
- position. */ \
- yy = (double) iy - y; \
- xx = (double) ix - x; \
- if( xx != xxl || yy != yyl ) { \
- xxl = xx; \
- yyl = yy; \
-\
- kp = filter; \
- for ( jy = 0; jy < nb2; jy++ ) { \
- ( *kernel )( yy, params, flags, &pixwt, status ); \
-\
-/* Check for errors arising in the kernel function. */ \
- if ( !astOK ) { \
- kerror = 1; \
- goto Kernel_SError_2d; \
- } \
-\
-/* Store the kernel factor in all elements of the current row. */ \
- for( jx = 0; jx < nb2; jx++ ) *(kp++) = pixwt; \
-\
-/* Move on to the next row. */ \
- yy += 1.0; \
- } \
-\
-/* Loop to evaluate the kernel function along the x dimension, multiplying \
- the resulting weight values by the values already stored in the the \
- associated column in the kvar array. The function's argument is the \
- offset of the output pixel (along this dimension) from the central output \
- position. Also form the total data sum in the filter array. */ \
- sum = 0.0; \
- for ( jx = 0; jx < nb2; jx++ ) { \
- ( *kernel )( xx, params, flags, &pixwt, status ); \
-\
-/* Check for errors arising in the kernel function. */ \
- if ( !astOK ) { \
- kerror = 1; \
- goto Kernel_SError_2d; \
- } \
-\
-/* Multiply the kernel factor by all elements of the current column. */ \
- kp = filter + jx; \
- for( jy = 0; jy < nb2; jy++, kp += nb2 ) { \
- *kp *= pixwt; \
- sum += *kp; \
- } \
-\
-/* Move on to the next column. */ \
- xx += 1.0; \
- } \
-\
-/* Ensure we do not divide by zero. */ \
- if( sum == 0.0 ) sum = 1.0; \
- } \
-\
-/* If we are using the input data variances as weights, calculate the \
- total weight, incorporating the normalisation factor for the kernel. */ \
- if( Varwgt ) { \
- wgt = 1.0/(sum*in_var[ off_in ]); \
-\
-/* If we are not using input variances as weights, the weight is just the \
- kernel normalisation factor. */ \
- } else { \
- wgt = 1.0/sum; \
- } \
-\
-/* Find the offset into the output array at the first modified output pixel \
- in the first modified row. */ \
- off1 = lo_ix - lbnd_out[ 0 ] + ystride * ( lo_iy - lbnd_out[ 1 ] ); \
-\
-/* Loop over the affected output rows again. */ \
- for ( jy = lo_jy; jy <= hi_jy; jy++, off1 += ystride ) { \
-\
-/* Save the offset of the first output pixel to be modified in the \
- current row. */ \
- off_out = off1; \
-\
-/* Get a pointer to the first weight value which will be used. */ \
- kp = filter + lo_jx + jy*nb2; \
-\
-/* Loop over the affected output columns again. */ \
- for ( jx = lo_jx; jx <= hi_jx; jx++, off_out++, kp++ ) { \
-\
-/* Calculate the weight for this output pixel and normalise it. */ \
- pixwt = wgt*( *kp ); \
-\
-/* Update the output pixel with the required fraction of the input pixel \
- value. */ \
- c = CONV(IntType,in_val*pixwt); \
- out[ off_out ] += c; \
- if( work ) work[ off_out ] += pixwt; \
- if ( Usevar ) { \
- out_var[ off_out ] += CONV(IntType,in_var[ off_in ]*pixwt*pixwt); \
- } else if ( Genvar && pixwt != 0.0 ) { \
- out_var[ off_out ] += c*c/pixwt; \
- work[ off_out + npix_out ] += pixwt*pixwt; \
- } \
- } \
- } \
- } \
- } \
- } \
- }
-
-
-
-
-#define KERNEL_ND(X,Xtype,Usebad,Usevar,Genvar,IntType,Varwgt) \
-\
-/* We do not yet have a normalising factor */ \
- sum = AST__BAD; \
-\
-/* Loop round all input points which are to be rebinned. */ \
- for( point = 0; point < npoint; point++ ) { \
-\
-/* Obtain the input data value which is to be added into the output array. */ \
- off_in = offset[ point ]; \
- in_val = in[ off_in ]; \
-\
-/* If necessary, test if the input data value or variance is bad (or zero). */ \
- if ( Usebad ) { \
- bad = ( in_val == badval ); \
- if ( Usevar || Varwgt ) { \
- bad = bad || ( in_var[ off_in ] == badval ) \
- || ( in_var[ off_in ] <= 0.0 ); \
- } \
- } else { \
- if ( Usevar || Varwgt ) { \
- bad = ( in_var[ off_in ] <= 0.0 ); \
- } else { \
- bad = 0; \
- } \
- } \
-\
-/* Initialise offsets into the output array. Then loop to obtain each \
- coordinate associated with the current output point. Set a flag \
- indicating if any output pixel will be modified. */ \
- if( !bad ) { \
- off_out = 0; \
- for ( idim = 0; idim < ndim_out; idim++ ) { \
- xn = coords[ idim ][ point ]; \
-\
-/* Test if the coordinate is bad. If true, the corresponding output pixel \
- value will be bad, so give up on this point. */ \
- bad = ( xn == AST__BAD ); \
- if ( bad ) break; \
-\
-/* Calculate the lowest and highest indices (in the current dimension) \
- of the region of neighbouring output pixels that will be modified. \
- Constrain these values to lie within the output grid. */ \
- ixn = (int) floor( xn ); \
- ixn0 = ixn - neighb + 1; \
- lo[ idim ] = MaxI( ixn0, lbnd_out[ idim ], status ); \
- hi[ idim ] = MinI( ixn + neighb, ubnd_out[ idim ], status ); \
- jlo[ idim ] = lo[ idim ] - ixn0; \
- jhi[ idim ] = hi[ idim ] - ixn0; \
-\
-/* Check there is some overlap with the output array on this axis. */ \
- if( lo[ idim ] > hi[ idim ] ) { \
- bad = 1; \
- break; \
- } \
-\
-/* Accumulate the offset (from the start of the output array) of the \
- modified output pixel which has the lowest index in each dimension. */ \
- off_out += stride[ idim ] * ( lo[ idim ] - lbnd_out[ idim ] ); \
-\
-/* Set up an array of pointers to locate the first filter pixel (stored in the \
- "kval" array) for each dimension. */ \
- wtptr[ idim ] = kval + nb2*idim; \
- wtptr_last[ idim ] = wtptr[ idim ] + nb2 - 1; \
-\
-/* Loop to evaluate the kernel function along each dimension, storing \
- the resulting values. The function's argument is the offset of the \
- output pixel (along the relevant dimension) from the central output \
- point. */ \
- xxn = (double) ( ixn - neighb + 1 ) - xn; \
- if( xxn != xnl[ idim ] ) { \
- sum = AST__BAD; \
- xnl[ idim ] = xxn; \
- for ( jxn = 0; jxn < nb2; jxn++ ) { \
- ( *kernel )( xxn, params, flags, wtptr[ idim ] + jxn, status ); \
-\
-/* Check for errors arising in the kernel function. */ \
- if ( !astOK ) { \
- kerror = 1; \
- goto Kernel_SError_Nd; \
- } \
-\
-/* Increment the kernel position. */ \
- xxn += 1.0; \
- } \
- } \
- } \
-\
-/* If OK... */ \
- if ( !bad ) { \
-\
-/* We only need to modify the normalising factor if the weight values \
- have changed. */ \
- if( sum == AST__BAD ) { \
-\
-/* The kernel value to use for each output pixel is the product of the \
- kernel values for each individual axis at that point. To conserve \
- flux we need to make sure that the sum of these kernel products is unity. \
- So loop over the values now to find the total sum of all kernel values. */ \
- idim = ndim_out - 1; \
- wtprod[ idim ] = 1.0; \
- done = 0; \
- sum = 0; \
- do { \
-\
-/* Each modified output pixel has a weight equal to the product of the kernel \
- weight factors evaluated along each input dimension. However, since \
- we typically only change the index of one dimension at a time, we \
- can avoid forming this product repeatedly by retaining an array of \
- accumulated products for all higher dimensions. We need then only \
- update the lower elements in this array, corresponding to those \
- dimensions whose index has changed. We do this here, "idim" being \
- the index of the most significant dimension to have changed. Note \
- that on the first pass, all dimensions are considered changed, \
- causing this array to be initialised. */ \
- for ( ii = idim; ii >= 1; ii-- ) { \
- wtprod[ ii - 1 ] = wtprod[ ii ] * *( wtptr[ ii ] ); \
- } \
-\
-/* Obtain the weight of each pixel from the accumulated product of \
- weights. Also multiply by the weight for dimension zero, which is not \
- included in the "wtprod" array). Increment the sum of all weights. */ \
- sum += wtprod[ 0 ] * *( wtptr[ 0 ] ); \
-\
-/* Now update the weight value pointers and pixel offset to refer to \
- the next output pixel to be considered. */ \
- idim = 0; \
- do { \
-\
-/* The first input dimension whose weight value pointer has not yet \
- reached its final value has this pointer incremented. */ \
- if ( wtptr[ idim ] != wtptr_last[ idim ] ) { \
- wtptr[ idim ]++; \
- break; \
-\
-/* Any earlier dimensions (which have reached the final pointer value) \
- have this pointer returned to its lowest value. */ \
- } else { \
- wtptr[ idim ] -= nb2 - 1; \
- done = ( ++idim == ndim_out ); \
- } \
- } while ( !done ); \
- } while ( !done ); \
-\
-/* Ensure we do not divide by zero. */ \
- if( sum == 0.0 ) sum = 1.0; \
- } \
-\
-/* Re-initialise the weights pointers to refer to the first and last \
- filter pixels which overlaps the output array. */ \
- kstart = kval; \
- for ( idim = 0; idim < ndim_out; idim++ ) { \
- wtptr[ idim ] = kstart + jlo[ idim ]; \
- wtptr_last[ idim ] = kstart + jhi[ idim ]; \
- kstart += nb2; \
- } \
-\
-/* If we are using the input data variances as weights, calculate the \
- total weight, incorporating the normalisation factor for the kernel. */ \
- if( Varwgt ) { \
- wgt = 1.0/(sum*in_var[ off_in ]); \
-\
-/* If we are not using input variances as weights, the weight is just the \
- kernel normalisation factor. */ \
- } else { \
- wgt = 1.0/sum; \
- } \
-\
-/* Increment the number of input pixels pasted into the output array. */ \
- if( nused ) (*nused)++; \
-\
-/* Initialise, and loop over the neighbouring output pixels to divide up \
- the input pixel value between them. */ \
- idim = ndim_out - 1; \
- wtprod[ idim ] = 1.0; \
- done = 0; \
- do { \
-\
-/* Each modified output pixel has a weight equal to the product of the kernel \
- weight factors evaluated along each input dimension. However, since \
- we typically only change the index of one dimension at a time, we \
- can avoid forming this product repeatedly by retaining an array of \
- accumulated products for all higher dimensions. We need then only \
- update the lower elements in this array, corresponding to those \
- dimensions whose index has changed. We do this here, "idim" being \
- the index of the most significant dimension to have changed. Note \
- that on the first pass, all dimensions are considered changed, \
- causing this array to be initialised. */ \
- for ( ii = idim; ii >= 1; ii-- ) { \
- wtprod[ ii - 1 ] = wtprod[ ii ] * *( wtptr[ ii ] ); \
- } \
-\
-/* Obtain the weight of each pixel from the accumulated \
- product of weights. Also multiply by the weight for dimension zero, \
- which is not included in the "wtprod" array). */ \
- pixwt = ( wtprod[ 0 ] * *( wtptr[ 0 ] ) )*wgt; \
-\
-/* Update the output pixel with the required fraction of the input pixel \
- value. */ \
- c = CONV(IntType,in_val*pixwt); \
- out[ off_out ] += c; \
- if( work ) work[ off_out ] += pixwt; \
- if ( Usevar ) { \
- out_var[ off_out ] += CONV(IntType,in_var[ off_in ]*pixwt*pixwt); \
- } else if ( Genvar && pixwt != 0.0 ) { \
- out_var[ off_out ] += c*c/pixwt; \
- work[ off_out + npix_out ] += pixwt*pixwt; \
- } \
-\
-/* Now update the weight value pointers and pixel offset to refer to \
- the next output pixel to be considered. */ \
- idim = 0; \
- do { \
-\
-/* The first input dimension whose weight value pointer has not yet \
- reached its final value has this pointer incremented, and the pixel \
- offset into the input array is updated accordingly. */ \
- if ( wtptr[ idim ] != wtptr_last[ idim ] ) { \
- wtptr[ idim ]++; \
- off_out += stride[ idim ]; \
- break; \
-\
-/* Any earlier dimensions (which have reached the final pointer value) \
- have this pointer returned to its lowest value. Again, the pixel \
- offset into the input image is updated accordingly. */ \
- } else { \
- wtptr[ idim ] -= ( hi[ idim ] - lo[ idim ] ); \
- off_out -= stride[ idim ] * \
- ( hi[ idim ] - lo[ idim ] ); \
- done = ( ++idim == ndim_out ); \
- } \
- } while ( !done ); \
- } while ( !done ); \
- } \
- } \
- }
-
-
-/* Expand the main macro above to generate a function for each
- required signed data type. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-MAKE_SPREAD_KERNEL1(LD,long double,0)
-#endif
-MAKE_SPREAD_KERNEL1(D,double,0)
-MAKE_SPREAD_KERNEL1(F,float,0)
-MAKE_SPREAD_KERNEL1(I,int,1)
-
-/* Undefine the macros used above. */
-#undef KERNEL_ND
-#undef KERNEL_2D
-#undef KERNEL_1D
-#undef MAKE_SPREAD_KERNEL1
-
-/*
-* Name:
-* SpreadLinear<X>
-
-* Purpose:
-* Rebin a data grid, using the linear spreading scheme.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void SpreadLinear<X>( int ndim_out,
-* const int *lbnd_out, const int *ubnd_out,
-* const <Xtype> *in, const <Xtype> *in_var,
-* int npoint, const int *offset,
-* const double *const *coords, int flags,
-* <Xtype> badval, int npix_out, <Xtype> *out,
-* <Xtype> *out_var, double *work, int *nused )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This is a set of functions which rebins a rectangular region of an
-* input grid of data (and, optionally, associated statistical variance
-* values) so as to place them into a new output grid. Each input
-* grid point may be mapped on to a position in the output grid in
-* an arbitrary way. Where the positions given do not correspond
-* with a pixel centre in the input grid, the spreading scheme
-* used divides the input pixel value up linearly between the
-* nearest neighbouring output pixels in each dimension (there are 2
-* nearest neighbours in 1 dimension, 4 in 2 dimensions, 8 in 3
-* dimensions, etc.).
-
-* Parameters:
-* ndim_out
-* The number of dimensions in the output grid. This should be at
-* least one.
-* lbnd_out
-* Pointer to an array of integers, with "ndim_out" elements.
-* This should give the coordinates of the centre of the first
-* pixel in the output grid along each dimension.
-* ubnd_out
-* Pointer to an array of integers, with "ndim_out" elements.
-* This should give the coordinates of the centre of the last
-* pixel in the output grid along each dimension.
-*
-* Note that "lbnd_out" and "ubnd_out" together define the shape
-* and size of the output grid, its extent along a particular
-* (i'th) dimension being ubnd_out[i]-lbnd_out[i]+1 (assuming "i"
-* is zero-based). They also define the output grid's coordinate
-* system, with each pixel being of unit extent along each
-* dimension with integral coordinate values at its centre.
-* in
-* Pointer to the array of data to be rebinned. The numerical type
-* of these data should match the function used, as given by the
-* suffix on the function name. Note that details of how the input
-* grid maps on to this array (e.g. the storage order, number of
-* dimensions, etc.) is arbitrary and is specified entirely by means
-* of the "offset" array. The "in" array should therefore contain
-* sufficient elements to accommodate the "offset" values supplied.
-* There is no requirement that all elements of the "in" array
-* should be rebinned, and any which are not addressed by the
-* contents of the "offset" array will be ignored.
-* in_var
-* An optional pointer to a second array of positive numerical
-* values (with the same size and type as the "in" array), which
-* represent estimates of the statistical variance associated
-* with each element of the "in" array. If this second array is
-* given (along with the corresponding "out_var" array), then
-* estimates of the variance of the resampled data will also be
-* returned. It is addressed in exactly the same way (via the
-* "offset" array) as the "in" array.
-*
-* If no variance estimates are required, a NULL pointer should
-* be given.
-* npoint
-* The number of input points which are to be rebinned.
-* offset
-* Pointer to an array of integers with "npoint" elements. For
-* each input point, this array should contain the zero-based
-* offset in the input array(s) (i.e. the "in" and, optionally,
-* the "in_var" arrays) from which the value to be rebinned should
-* be obtained.
-* coords
-* An array of pointers to double, with "ndim_out" elements.
-* Element "coords[coord]" should point at the first element of
-* an array of double (with "npoint" elements) which contains the
-* values of coordinate number "coord" for each point being
-* rebinned. The value of coordinate number "coord" for
-* rebinning point number "point" is therefore given by
-* "coords[coord][point]" (assuming both indices are
-* zero-based). If any point has a coordinate value of AST__BAD
-* associated with it, then the corresponding input data (and
-* variance) value will be ignored.
-* The bitwise OR of a set of flag values which control the
-* operation of the function. These are chosend from:
-*
-* - AST__USEBAD: indicates whether there are "bad" (i.e. missing) data
-* in the input array(s) which must be recognised. If this flag is not
-* set, all input values are treated literally.
-* - AST__GENVAR: Indicates that any input variances are to be
-* ignored, and that the output variances should be generated from
-* the spread of values contributing to each output pixel.
-* badval
-* If the AST__USEBAD flag is set in the "flags" value (above),
-* this parameter specifies the value which is used to identify
-* bad data and/or variance values in the input array(s). Its
-* numerical type must match that of the "in" (and "in_var")
-* arrays. The same value will also be used to flag any output
-* array elements for which resampled values could not be
-* obtained. The output arrays(s) may be flagged with this
-* value whether or not the AST__USEBAD flag is set (the
-* function return value indicates whether any such values have
-* been produced).
-* npix_out
-* Number of pixels in output array.
-* out
-* Pointer to an array with the same data type as the "in"
-* array, into which the rebinned data will be returned. The
-* storage order should be such that the index of the first grid
-* dimension varies most rapidly and that of the final dimension
-* least rapidly (i.e. Fortran array storage order).
-* out_var
-* An optional pointer to an array with the same data type and
-* size as the "out" array, into which variance estimates for
-* the rebinned values may be returned. This array will only be
-* used if the "in_var" array has been given. The values returned
-* are estimates of the statistical variance of the corresponding
-* values in the "out" array, on the assumption that all errors in
-* input grid values (in the "in" array) are statistically independent
-* and that their variance estimates (in the "in_var" array) may
-* simply be summed (with appropriate weighting factors).
-*
-* If no output variance estimates are required, a NULL pointer
-* should be given.
-* work
-* An optional pointer to a double array with the same size as
-* the "out" array. The contents of this array (if supplied) are
-* incremented by the accumulated weights assigned to each output pixel.
-* If no accumulated weights are required, a NULL pointer should be
-* given.
-* nused
-* An optional pointer to an int which will be incremented by the
-* number of input values pasted into the output array. Ignored if NULL.
-
-* Notes:
-* - There is a separate function for each numerical type of
-* gridded data, distinguished by replacing the <X> in the function
-* name by the appropriate 1- or 2-character suffix.
-*/
-/* Define macros to implement the function for a specific data
- type. */
-#define MAKE_SPREAD_LINEAR(X,Xtype,IntType) \
-static void SpreadLinear##X( int ndim_out, \
- const int *lbnd_out, const int *ubnd_out, \
- const Xtype *in, const Xtype *in_var, \
- int npoint, const int *offset, \
- const double *const *coords, int flags, \
- Xtype badval, int npix_out, Xtype *out, \
- Xtype *out_var, double *work, int *nused, int *status ) { \
-\
-/* Local Variables: */ \
- Xtype c; /* Contribution to output value */ \
- Xtype in_val; /* Input value */ \
- double *frac_hi; /* Pointer to array of weights */ \
- double *frac_lo; /* Pointer to array of weights */ \
- double *wt; /* Pointer to array of weights */ \
- double *wtprod; /* Array of accumulated weights pointer */ \
- double *xn_max; /* Pointer to upper limits array (n-d) */ \
- double *xn_min; /* Pointer to lower limits array (n-d) */ \
- double f; /* Total pixel weight */ \
- double frac_hi_x; /* Pixel weight (x dimension) */ \
- double frac_hi_y; /* Pixel weight (y dimension) */ \
- double frac_lo_x; /* Pixel weight (x dimension) */ \
- double frac_lo_y; /* Pixel weight (y dimension) */ \
- double wgt; /* Weight for input value */ \
- double x; /* x coordinate value */ \
- double xmax; /* x upper limit */ \
- double xmin; /* x lower limit */ \
- double xn; /* Coordinate value (n-d) */ \
- double y; /* y coordinate value */ \
- double ymax; /* y upper limit */ \
- double ymin; /* y lower limit */ \
- int *dim; /* Pointer to array of pixel indices */ \
- int *hi; /* Pointer to array of upper indices */ \
- int *lo; /* Pointer to array of lower indices */ \
- int *stride; /* Pointer to array of dimension strides */ \
- int bad; /* Output pixel bad? */ \
- int bad_var; /* Output variance bad? */ \
- int done; /* All pixel indices done? */ \
- int genvar; /* Generate output variances? */ \
- int hi_x; /* Upper pixel index (x dimension) */ \
- int hi_y; /* Upper pixel index (y dimension) */ \
- int idim; /* Loop counter for dimensions */ \
- int ii; /* Loop counter for weights */ \
- int ixn; /* Pixel index (n-d) */ \
- int lo_x; /* Lower pixel index (x dimension) */ \
- int lo_y; /* Lower pixel index (y dimension) */ \
- int off; /* Total offset to input pixel */ \
- int off_in; /* Offset to input pixel */ \
- int off_lo; /* Offset to "first" input pixel */ \
- int off_out; /* Offset to output pixel */ \
- int point; /* Loop counter for output points */ \
- int s; /* Temporary variable for strides */ \
- int usebad; /* Use "bad" input pixel values? */ \
- int usevar; /* Process variance array? */ \
- int varwgt; /* Use input variances as weights? */ \
- int ystride; /* Stride along input grid y dimension */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Initialise variables to avoid "used of uninitialised variable" \
- messages from dumb compilers. */ \
- bad = 0; \
- bad_var = 0; \
-\
-/* Determine if we are processing bad pixels or variances. */ \
- usebad = flags & AST__USEBAD; \
- usevar = 0; \
- genvar = 0; \
- if( flags & AST__GENVAR ) { \
- genvar = out_var && work; \
- } else if( flags & AST__USEVAR ) { \
- usevar = in_var && out_var; \
- } \
- varwgt = ( flags & AST__VARWGT ) && in_var && work; \
-\
-/* Handle the 1-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
- if ( ndim_out == 1 ) { \
-\
-/* Calculate the coordinate limits of the input grid. */ \
- xmin = (double) lbnd_out[ 0 ] - 0.5; \
- xmax = (double) ubnd_out[ 0 ] + 0.5; \
-\
-/* Identify eight cases, according to whether bad pixels and/or variances \
- are being processed and/or used. In each case we assign constant values \
- (0 or 1) to the "Usebad", "Usevar" and "Varwgt" flags so that code for \
- handling bad pixels and variances can be eliminated by the compiler's \
- optimisation system when not required. */ \
- if( varwgt ) { \
- if ( usebad ) { \
- if ( usevar ) { \
- LINEAR_1D(X,Xtype,1,1,0,IntType,1) \
- } else if ( genvar ) { \
- LINEAR_1D(X,Xtype,1,0,1,IntType,1) \
- } else { \
- LINEAR_1D(X,Xtype,1,0,0,IntType,1) \
- } \
- } else { \
- if ( usevar ) { \
- LINEAR_1D(X,Xtype,0,1,0,IntType,1) \
- } else if ( genvar ) { \
- LINEAR_1D(X,Xtype,0,0,1,IntType,1) \
- } else { \
- LINEAR_1D(X,Xtype,0,0,0,IntType,1) \
- } \
- } \
- } else { \
- if ( usebad ) { \
- if ( usevar ) { \
- LINEAR_1D(X,Xtype,1,1,0,IntType,0) \
- } else if ( genvar ) { \
- LINEAR_1D(X,Xtype,1,0,1,IntType,0) \
- } else { \
- LINEAR_1D(X,Xtype,1,0,0,IntType,0) \
- } \
- } else { \
- if ( usevar ) { \
- LINEAR_1D(X,Xtype,0,1,0,IntType,0) \
- } else if ( genvar ) { \
- LINEAR_1D(X,Xtype,0,0,1,IntType,0) \
- } else { \
- LINEAR_1D(X,Xtype,0,0,0,IntType,0) \
- } \
- } \
- } \
-\
-/* Handle the 2-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
- } else if ( ndim_out == 2 ) { \
-\
-/* Calculate the stride along the y dimension of the output grid. */ \
- ystride = ubnd_out[ 0 ] - lbnd_out[ 0 ] + 1; \
-\
-/* Calculate the coordinate limits of the output grid in each \
- dimension. */ \
- xmin = (double) lbnd_out[ 0 ] - 0.5; \
- xmax = (double) ubnd_out[ 0 ] + 0.5; \
- ymin = (double) lbnd_out[ 1 ] - 0.5; \
- ymax = (double) ubnd_out[ 1 ] + 0.5; \
-\
-/* Identify eight cases, according to whether bad pixels and/or variances \
- are being processed and/or used. In each case we assign constant values \
- (0 or 1) to the "Usebad", "Usevar" and "Varwgt" flags so that code for \
- handling bad pixels and variances can be eliminated by the compiler's \
- optimisation system when not required. */ \
- if( varwgt ) { \
- if ( usebad ) { \
- if ( usevar ) { \
- LINEAR_2D(X,Xtype,1,1,0,IntType,1) \
- } else if ( genvar ) { \
- LINEAR_2D(X,Xtype,1,0,1,IntType,1) \
- } else { \
- LINEAR_2D(X,Xtype,1,0,0,IntType,1) \
- } \
- } else { \
- if ( usevar ) { \
- LINEAR_2D(X,Xtype,0,1,0,IntType,1) \
- }else if ( genvar ) { \
- LINEAR_2D(X,Xtype,0,0,1,IntType,1) \
- } else { \
- LINEAR_2D(X,Xtype,0,0,0,IntType,1) \
- } \
- } \
- } else { \
- if ( usebad ) { \
- if ( usevar ) { \
- LINEAR_2D(X,Xtype,1,1,0,IntType,0) \
- } else if ( genvar ) { \
- LINEAR_2D(X,Xtype,1,0,1,IntType,0) \
- } else { \
- LINEAR_2D(X,Xtype,1,0,0,IntType,0) \
- } \
- } else { \
- if ( usevar ) { \
- LINEAR_2D(X,Xtype,0,1,0,IntType,0) \
- }else if ( genvar ) { \
- LINEAR_2D(X,Xtype,0,0,1,IntType,0) \
- } else { \
- LINEAR_2D(X,Xtype,0,0,0,IntType,0) \
- } \
- } \
- } \
-\
-/* Handle other numbers of dimensions. */ \
-/* ----------------------------------- */ \
- } else { \
-\
-/* Allocate workspace. */ \
- dim = astMalloc( sizeof( int ) * (size_t) ndim_out ); \
- frac_hi = astMalloc( sizeof( double ) * (size_t) ndim_out ); \
- frac_lo = astMalloc( sizeof( double ) * (size_t) ndim_out ); \
- hi = astMalloc( sizeof( int ) * (size_t) ndim_out ); \
- lo = astMalloc( sizeof( int ) * (size_t) ndim_out ); \
- stride = astMalloc( sizeof( int ) * (size_t) ndim_out ); \
- wt = astMalloc( sizeof( double ) * (size_t) ndim_out ); \
- wtprod = astMalloc( sizeof( double ) * (size_t) ndim_out ); \
- xn_max = astMalloc( sizeof( double ) * (size_t) ndim_out ); \
- xn_min = astMalloc( sizeof( double ) * (size_t) ndim_out ); \
- if ( astOK ) { \
-\
-/* Calculate the stride along each dimension of the output grid. */ \
- for ( s = 1, idim = 0; idim < ndim_out; idim++ ) { \
- stride[ idim ] = s; \
- s *= ubnd_out[ idim ] - lbnd_out[ idim ] + 1; \
-\
-/* Calculate the coordinate limits of the output grid in each \
- dimension. */ \
- xn_min[ idim ] = (double) lbnd_out[ idim ] - 0.5; \
- xn_max[ idim ] = (double) ubnd_out[ idim ] + 0.5; \
- } \
-\
-/* Identify eight cases, according to whether bad pixels and/or variances \
- are being processed and/or used. In each case we assign constant values \
- (0 or 1) to the "Usebad", "Usevar" and "Varwgt" flags so that code for \
- handling bad pixels and variances can be eliminated by the compiler's \
- optimisation system when not required. */ \
- if( varwgt ) { \
- if ( usebad ) { \
- if ( usevar ) { \
- LINEAR_ND(X,Xtype,1,1,0,IntType,1) \
- } else if ( genvar ) { \
- LINEAR_ND(X,Xtype,1,0,1,IntType,1) \
- } else { \
- LINEAR_ND(X,Xtype,1,0,0,IntType,1) \
- } \
- } else { \
- if ( usevar ) { \
- LINEAR_ND(X,Xtype,0,1,0,IntType,1) \
- } else if ( genvar ) { \
- LINEAR_ND(X,Xtype,0,0,1,IntType,1) \
- } else { \
- LINEAR_ND(X,Xtype,0,0,0,IntType,1) \
- } \
- } \
- } else { \
- if ( usebad ) { \
- if ( usevar ) { \
- LINEAR_ND(X,Xtype,1,1,0,IntType,0) \
- } else if ( genvar ) { \
- LINEAR_ND(X,Xtype,1,0,1,IntType,0) \
- } else { \
- LINEAR_ND(X,Xtype,1,0,0,IntType,0) \
- } \
- } else { \
- if ( usevar ) { \
- LINEAR_ND(X,Xtype,0,1,0,IntType,0) \
- } else if ( genvar ) { \
- LINEAR_ND(X,Xtype,0,0,1,IntType,0) \
- } else { \
- LINEAR_ND(X,Xtype,0,0,0,IntType,0) \
- } \
- } \
- } \
- } \
-\
-/* Free the workspace. */ \
- dim = astFree( dim ); \
- frac_hi = astFree( frac_hi ); \
- frac_lo = astFree( frac_lo ); \
- hi = astFree( hi ); \
- lo = astFree( lo ); \
- stride = astFree( stride ); \
- wt = astFree( wt ); \
- wtprod = astFree( wtprod ); \
- xn_max = astFree( xn_max ); \
- xn_min = astFree( xn_min ); \
- } \
-\
-}
-
-
-
-
-
-
-#define LINEAR_1D(X,Xtype,Usebad,Usevar,Genvar,IntType,Varwgt) \
-\
-/* Loop round all input points which are to be rebinned. */ \
- for( point = 0; point < npoint; point++ ) { \
-\
-/* Obtain the input data value which is to be added into the output array. */ \
- off_in = offset[ point ]; \
- in_val = in[ off_in ]; \
-\
-/* If necessary, test if the input data value or variance is bad (or zero). */ \
- if ( Usebad ) { \
- bad = ( in_val == badval ); \
- if ( Usevar || Varwgt ) { \
- bad = bad || ( in_var[ off_in ] == badval ) \
- || ( in_var[ off_in ] <= 0.0 ); \
- } \
- } else { \
- if ( Usevar || Varwgt ) { \
- bad = ( in_var[ off_in ] <= 0.0 ); \
- } else { \
- bad = 0; \
- } \
- } \
-\
-/* Obtain the x coordinate of the current point and test if it lies \
- outside the output grid. Also test if it is bad. */ \
- x = coords[ 0 ][ point ]; \
- bad = bad || ( x < xmin ) || ( x >= xmax ) || ( x == AST__BAD ); \
-\
-/* If OK, obtain the indices along the output grid x dimension of the \
- two adjacent output pixels which will receive contributions from the \
- input pixel. Also obtain the fractional weight to be applied to each of \
- these pixels. */ \
- if ( !bad ) { \
- lo_x = (int) floor( x ); \
- hi_x = lo_x + 1; \
- frac_lo_x = (double) hi_x - x; \
- frac_hi_x = 1.0 - frac_lo_x; \
-\
-/* Increment the number of input pixels pasted into the output array. */ \
- if( nused ) (*nused)++; \
-\
-/* Obtain the offset within the output array of the first pixel to be \
- updated (the one with the smaller index). */ \
- off_lo = lo_x - lbnd_out[ 0 ]; \
-\
-/* If we are using the input data variances as weights, calculate the \
- weight, and scale the fractions of each input pixel by the weight. */ \
- if( Varwgt ) { \
- wgt = 1.0/in_var[ off_in ]; \
- frac_lo_x *= wgt; \
- frac_hi_x *= wgt; \
- } \
-\
-/* For each of the two pixels which may be updated, test if the pixel index \
- lies within the output grid. Where it does, update the output pixel \
- with the required fraction of the input pixel value. */ \
- if ( lo_x >= lbnd_out[ 0 ] ) { \
- c = CONV(IntType,in_val*frac_lo_x); \
- out[ off_lo ] += c; \
- if( work ) work[ off_lo ] += frac_lo_x; \
- if ( Usevar ) { \
- out_var[ off_lo ] += CONV(IntType,in_var[ off_in ]*frac_lo_x*frac_lo_x); \
- } else if ( Genvar && frac_lo_x != 0.0 ) { \
- out_var[ off_lo ] += c*c/frac_lo_x; \
- work[ off_lo + npix_out ] += frac_lo_x*frac_lo_x; \
- } \
- } \
- if ( hi_x <= ubnd_out[ 0 ] ) { \
- c = CONV(IntType,in_val*frac_hi_x); \
- out[ off_lo + 1 ] += c; \
- if( work ) work[ off_lo + 1 ] += frac_hi_x; \
- if ( Usevar ) { \
- out_var[ off_lo + 1 ] += CONV(IntType,in_var[ off_in ]*frac_hi_x*frac_hi_x); \
- } else if( Genvar && frac_hi_x != 0.0 ) { \
- out_var[ off_lo + 1 ] += c*c/frac_hi_x; \
- work[ off_lo + 1 + npix_out ] += frac_hi_x*frac_hi_x; \
- } \
- } \
- } \
- }
-
-
-
-
-#define LINEAR_2D(X,Xtype,Usebad,Usevar,Genvar,IntType,Varwgt) \
-\
-/* Loop round all input points which are to be rebinned. */ \
- for( point = 0; point < npoint; point++ ) { \
-\
-/* Obtain the input data value which is to be added into the output array. */ \
- off_in = offset[ point ]; \
- in_val = in[ off_in ]; \
-\
-/* If necessary, test if the input data value or variance is bad (or zero). */ \
- if ( Usebad ) { \
- bad = ( in_val == badval ); \
- if ( Usevar || Varwgt ) { \
- bad = bad || ( in_var[ off_in ] == badval ) \
- || ( in_var[ off_in ] <= 0.0 ); \
- } \
- } else { \
- if ( Usevar || Varwgt ) { \
- bad = ( in_var[ off_in ] <= 0.0 ); \
- } else { \
- bad = 0; \
- } \
- } \
-\
-/* Obtain the x coordinate of the current point and test if it lies \
- outside the output grid. Also test if it is bad. */ \
- y = coords[ 1 ][ point ]; \
- bad = bad || ( y < ymin ) || ( y >= ymax ) || ( y == AST__BAD ); \
- if ( !bad ) { \
-\
-/* Similarly obtain and test the y coordinate. */ \
- x = coords[ 0 ][ point ]; \
- bad = bad || ( x < xmin ) || ( x >= xmax ) || ( x == AST__BAD ); \
- if ( !bad ) { \
-\
-/* Increment the number of input pixels pasted into the output array. */ \
- if( nused ) (*nused)++; \
-\
-/* If OK, obtain the indices along the output grid x dimension of the \
- two adjacent pixels which recieve contributions from the input pixel. \
- Also obtain the fractional weight to be applied to each of \
- these pixels. */ \
- lo_x = (int) floor( x ); \
- hi_x = lo_x + 1; \
- frac_lo_x = (double) hi_x - x; \
- frac_hi_x = 1.0 - frac_lo_x; \
-\
-/* Repeat this process for the y dimension. */ \
- lo_y = (int) floor( y ); \
- hi_y = lo_y + 1; \
- frac_lo_y = (double) hi_y - y; \
- frac_hi_y = 1.0 - frac_lo_y; \
-\
-/* If we are using the input data variances as weights, calculate the \
- weight, and scale the fractions of each input pixel by the weight. \
- Since the product of two fractions is always used ot scale the input \
- data values, we use the square root of the reciprocal of the variance \
- as the weight (so that when the product of two fractions is taken, \
- the square roots multiply together to give the required 1/variance \
- weight). */ \
- if( Varwgt ) { \
- wgt = 1.0/sqrt( in_var[ off_in ] ); \
- frac_lo_x *= wgt; \
- frac_hi_x *= wgt; \
- frac_lo_y *= wgt; \
- frac_hi_y *= wgt; \
- } \
-\
-/* Obtain the offset within the output array of the first pixel to be \
- updated (the one with the smaller index along both dimensions). */ \
- off_lo = lo_x - lbnd_out[ 0 ] + ystride * ( lo_y - lbnd_out[ 1 ] ); \
-\
-/* For each of the four pixels which may be updated, test if the pixel indices \
- lie within the output grid. Where they do, update the output pixel \
- with the required fraction of the input pixel value. */ \
- if ( lo_y >= lbnd_out[ 1 ] ) { \
- if ( lo_x >= lbnd_out[ 0 ] ) { \
- f = frac_lo_x * frac_lo_y; \
- c = CONV(IntType,in_val*f); \
- out[ off_lo ] += c; \
- if( work ) work[ off_lo ] += f; \
- if ( Usevar ) { \
- out_var[ off_lo ] += CONV(IntType,in_var[ off_in ]*f*f); \
- } else if ( Genvar && f != 0.0 ) { \
- out_var[ off_lo ] += c*c/f; \
- work[ off_lo + npix_out ] += f*f; \
- } \
- } \
- if ( hi_x <= ubnd_out[ 0 ] ) { \
- f = frac_hi_x * frac_lo_y; \
- off = off_lo + 1; \
- c = CONV(IntType,in_val*f); \
- out[ off ] += c; \
- if( work ) work[ off ] += f; \
- if ( Usevar ) { \
- out_var[ off ] += CONV(IntType,in_var[ off_in ]*f*f); \
- } else if ( Genvar && f != 0.0 ) { \
- out_var[ off ] += c*c/f; \
- work[ off + npix_out ] += f*f; \
- } \
- } \
- } \
- if ( hi_y <= ubnd_out[ 1 ] ) { \
- if ( lo_x >= lbnd_out[ 0 ] ) { \
- f = frac_lo_x * frac_hi_y; \
- off = off_lo + ystride; \
- c = CONV(IntType,in_val*f); \
- out[ off ] += c; \
- if( work ) work[ off ] += f; \
- if ( Usevar ) { \
- out_var[ off ] += CONV(IntType,in_var[ off_in ]*f*f ); \
- } else if ( Genvar && f != 0.0 ) { \
- out_var[ off ] += c*c/f; \
- work[ off + npix_out ] += f*f; \
- } \
- } \
- if ( hi_x <= ubnd_out[ 0 ] ) { \
- f = frac_hi_x * frac_hi_y; \
- off = off_lo + ystride + 1; \
- c = CONV(IntType,in_val*f); \
- out[ off ] += c; \
- if( work ) work[ off ] += f; \
- if ( Usevar ) { \
- out_var[ off ] += CONV(IntType,in_var[ off_in ]*f*f); \
- } else if ( Genvar && f != 0.0 ) { \
- out_var[ off ] += c*c/f; \
- work[ off + npix_out ] += f*f; \
- } \
- } \
- } \
- } \
- } \
- }
-
-
-#define LINEAR_ND(X,Xtype,Usebad,Usevar,Genvar,IntType,Varwgt) \
-\
-/* Loop round all input points which are to be rebinned. */ \
- for( point = 0; point < npoint; point++ ) { \
-\
-/* Obtain the input data value which is to be added into the output array. */ \
- off_in = offset[ point ]; \
- in_val = in[ off_in ]; \
-\
-/* If necessary, test if the input data value or variance is bad (or zero). */ \
- if ( Usebad ) { \
- bad = ( in_val == badval ); \
- if ( Usevar || Varwgt ) { \
- bad = bad || ( in_var[ off_in ] == badval ) \
- || ( in_var[ off_in ] <= 0.0 ); \
- } \
- } else { \
- if ( Usevar || Varwgt ) { \
- bad = ( in_var[ off_in ] <= 0.0 ); \
- } else { \
- bad = 0; \
- } \
- } \
-\
-/* Initialise offsets into the output array. Then loop to obtain each \
- coordinate associated with the current output point. */ \
- if( !bad ) { \
- off_out = 0; \
- for ( idim = 0; idim < ndim_out; idim++ ) { \
- xn = coords[ idim ][ point ]; \
-\
-/* Test if the coordinate lies outside the output grid. Also test if \
- it is bad. If either is true, the corresponding output pixel value \
- will be bad, so give up on this point. */ \
- bad = ( xn < xn_min[ idim ] ) || ( xn >= xn_max[ idim ] ) || \
- ( xn == AST__BAD ); \
- if ( bad ) break; \
-\
-/* Obtain the indices along the current dimension of the output grid of \
- the two (usually adjacent) pixels which will be updated. If necessary, \
- however, restrict each index to ensure it does not lie outside the \
- input grid. Also calculate the fractional weight to be given to each \
- pixel in order to divide the input value linearly between them. */ \
- ixn = (int) floor( xn ); \
- lo[ idim ] = MaxI( ixn, lbnd_out[ idim ], status ); \
- hi[ idim ] = MinI( ixn + 1, ubnd_out[ idim ], status ); \
- frac_lo[ idim ] = 1.0 - fabs( xn - (double) lo[ idim ] ); \
- frac_hi[ idim ] = 1.0 - fabs( xn - (double) hi[ idim ] ); \
-\
-/* Store the lower index involved in spreading along each \
- dimension and accumulate the offset from the start of the output \
- array of the pixel which has these indices. */ \
- dim[ idim ] = lo[ idim ]; \
- off_out += stride[ idim ] * ( lo[ idim ] - lbnd_out[ idim ] ); \
-\
-/* Also store the fractional weight associated with the lower pixel \
- along each dimension. */ \
- wt[ idim ] = frac_lo[ idim ]; \
- } \
-\
-/* If we are using the input data variances as weights, calculate the \
- weight, and scale the fractions of each input pixel by the weight. */ \
- if( Varwgt ) { \
- wgt = pow( in_var[ off_in ], -1.0/(double)ndim_out ); \
- for ( idim = 0; idim < ndim_out; idim++ ) { \
- frac_lo[ idim ] *= wgt; \
- frac_hi[ idim ] *= wgt; \
- wt[ idim ] = frac_lo[ idim ]; \
- } \
- } \
-\
-/* If OK, increment the number of input pixels pasted into the output array. */ \
- if ( !bad ) { \
- if( nused ) (*nused)++; \
-\
-/* Loop over adjacent output pixels to divide up the input value. */ \
- idim = ndim_out - 1; \
- wtprod[ idim ] = 1.0; \
- done = 0; \
- do { \
-\
-/* Each pixel pixel to be updated has a total weight equal to the product \
- of the weights which account for the displacement of its centre from \
- the required position along each dimension. However, since we typically \
- only change the index of one dimension at a time, we can avoid forming \
- this product repeatedly by retaining an array of accumulated weight \
- products for all higher dimensions. We need then only update the \
- lower elements in this array, corresponding to those dimensions \
- whose index has changed. We do this here, "idim" being the index of \
- the most significant dimension to have changed. Note that on the \
- first pass, all dimensions are considered changed, causing this \
- array to be initialised. */ \
- for ( ii = idim; ii >= 1; ii-- ) { \
- wtprod[ ii - 1 ] = wtprod[ ii ] * wt[ ii ]; \
- } \
-\
-/* Update the relevent output pixel. The pixel weight is formed by including \
- the weight factor for dimension zero, since this is not included in \
- the "wtprod" array. */ \
- f = wtprod[ 0 ] * wt[ 0 ]; \
- c = CONV(IntType,in_val*f); \
- out[ off_out ] += c; \
- if( work ) work[ off_out ] += f; \
- if ( Usevar ) { \
- out_var[ off_out ] += CONV(IntType,in_var[ off_in ]*f*f); \
- } else if ( Genvar && f != 0.0 ) { \
- out_var[ off_out ] += c*c/f; \
- work[ off_out + npix_out ] += f*f; \
- } \
-\
-/* Now update the indices, offset and weight factors to refer to the \
- next output pixel to be updated. */ \
- idim = 0; \
- do { \
-\
-/* The first input dimension which still refers to the pixel with the \
- lower of the two possible indices is switched to refer to the other \
- pixel (with the higher index). The offset into the output array and \
- the fractional weight factor for this dimension are also updated \
- accordingly. */ \
- if ( dim[ idim ] != hi[ idim ] ) { \
- dim[ idim ] = hi[ idim ]; \
- off_out += stride[ idim ]; \
- wt[ idim ] = frac_hi[ idim ]; \
- break; \
-\
-/* Any earlier dimensions (referring to the higher index) are switched \
- back to the lower index, if not already there, before going on to \
- consider the next dimension. (This process is the same as \
- incrementing a binary number and propagating overflows up through \
- successive digits, except that dimensions where the "lo" and "hi" \
- values are the same can only take one value.) The process stops at \
- the first attempt to return the final dimension to the lower \
- index. */ \
- } else { \
- if ( dim[ idim ] != lo[ idim ] ) { \
- dim[ idim ] = lo[ idim ]; \
- off_out -= stride[ idim ]; \
- wt[ idim ] = frac_lo[ idim ]; \
- } \
- done = ( ++idim == ndim_out ); \
- } \
- } while ( !done ); \
- } while ( !done ); \
- } \
- } \
- }
-
-/* Expand the main macro above to generate a function for each
- required signed data type. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-MAKE_SPREAD_LINEAR(LD,long double,0)
-#endif
-MAKE_SPREAD_LINEAR(D,double,0)
-MAKE_SPREAD_LINEAR(F,float,0)
-MAKE_SPREAD_LINEAR(I,int,1)
-
-/* Undefine the macros used above. */
-#undef LINEAR_1D
-#undef LINEAR_2D
-#undef LINEAR_ND
-#undef MAKE_SPREAD_LINEAR
-
-/*
-* Name:
-* SpreadNearest<X>
-
-* Purpose:
-* Rebin a data grid, using the nearest-pixel spreading scheme.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void SpreadNearest<X>( int ndim_out,
-* const int *lbnd_out, const int *ubnd_out,
-* const <Xtype> *in, const <Xtype> *in_var,
-* int npoint, const int *offset,
-* const double *const *coords, int flags,
-* <Xtype> badval, int npix_out, <Xtype> *out,
-* <Xtype> *out_var, double *work, int *nused )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This is a set of functions which rebins a rectangular region of an
-* input grid of data (and, optionally, associated statistical variance
-* values) so as to place them into a new output grid. Each input
-* grid point may be mapped on to a position in the output grid in
-* an arbitrary way. Where the positions given do not correspond
-* with a pixel centre in the output grid, the spreading scheme
-* used is simply to select the nearest pixel (i.e. the one whose
-* bounds contain the supplied position).
-
-* Parameters:
-* ndim_out
-* The number of dimensions in the output grid. This should be at
-* least one.
-* lbnd_out
-* Pointer to an array of integers, with "ndim_out" elements.
-* This should give the coordinates of the centre of the first
-* pixel in the output grid along each dimension.
-* ubnd_out
-* Pointer to an array of integers, with "ndim_out" elements.
-* This should give the coordinates of the centre of the last
-* pixel in the output grid along each dimension.
-*
-* Note that "lbnd_out" and "ubnd_out" together define the shape
-* and size of the output grid, its extent along a particular
-* (i'th) dimension being ubnd_out[i]-lbnd_out[i]+1 (assuming "i"
-* is zero-based). They also define the output grid's coordinate
-* system, with each pixel being of unit extent along each
-* dimension with integral coordinate values at its centre.
-* in
-* Pointer to the array of data to be rebinned. The numerical type
-* of these data should match the function used, as given by the
-* suffix on the function name. Note that details of how the input
-* grid maps on to this array (e.g. the storage order, number of
-* dimensions, etc.) is arbitrary and is specified entirely by means
-* of the "offset" array. The "in" array should therefore contain
-* sufficient elements to accommodate the "offset" values supplied.
-* There is no requirement that all elements of the "in" array
-* should be rebinned, and any which are not addressed by the
-* contents of the "offset" array will be ignored.
-* in_var
-* An optional pointer to a second array of positive numerical
-* values (with the same size and type as the "in" array), which
-* represent estimates of the statistical variance associated
-* with each element of the "in" array. If this second array is
-* given (along with the corresponding "out_var" array), then
-* estimates of the variance of the resampled data will also be
-* returned. It is addressed in exactly the same way (via the
-* "offset" array) as the "in" array.
-*
-* If no variance estimates are required, a NULL pointer should
-* be given.
-* npoint
-* The number of input points which are to be rebinned.
-* offset
-* Pointer to an array of integers with "npoint" elements. For
-* each input point, this array should contain the zero-based
-* offset in the input array(s) (i.e. the "in" and, optionally,
-* the "in_var" arrays) from which the value to be rebinned should
-* be obtained.
-* coords
-* An array of pointers to double, with "ndim_out" elements.
-* Element "coords[coord]" should point at the first element of
-* an array of double (with "npoint" elements) which contains the
-* values of coordinate number "coord" for each point being
-* rebinned. The value of coordinate number "coord" for
-* rebinning point number "point" is therefore given by
-* "coords[coord][point]" (assuming both indices are
-* zero-based). If any point has a coordinate value of AST__BAD
-* associated with it, then the corresponding input data (and
-* variance) value will be ignored.
-* flags
-* The bitwise OR of a set of flag values which control the
-* operation of the function. These are chosend from:
-*
-* - AST__USEBAD: indicates whether there are "bad" (i.e. missing) data
-* in the input array(s) which must be recognised. If this flag is not
-* set, all input values are treated literally.
-* - AST__GENVAR: Indicates that output variances should be generated
-* from the spread of values contributing to each output pixel.
-* - AST__USEVAR: Indicates that output variances should be generated
-* by rebinning the input variances.
-* - AST__VARWGT: Indicates that input variances should be used to
-* create weights for the input data values.
-*
-* Only one of AST__GENVAR and AST__USEVAR should be supplied.
-* badval
-* If the AST__USEBAD flag is set in the "flags" value (above),
-* this parameter specifies the value which is used to identify
-* bad data and/or variance values in the input array(s). Its
-* numerical type must match that of the "in" (and "in_var")
-* arrays. The same value will also be used to flag any output
-* array elements for which resampled values could not be
-* obtained. The output arrays(s) may be flagged with this
-* value whether or not the AST__USEBAD flag is set (the
-* function return value indicates whether any such values have
-* been produced).
-* npix_out
-* Number of pixels in output array.
-* out
-* Pointer to an array with the same data type as the "in"
-* array, into which the rebinned data will be returned. The
-* storage order should be such that the index of the first grid
-* dimension varies most rapidly and that of the final dimension
-* least rapidly (i.e. Fortran array storage order).
-* out_var
-* An optional pointer to an array with the same data type and
-* size as the "out" array, into which variance estimates for
-* the rebinned values may be returned. This array will only be
-* used if the "in_var" array has been given. The values returned
-* are estimates of the statistical variance of the corresponding
-* values in the "out" array, on the assumption that all errors in
-* input grid values (in the "in" array) are statistically independent
-* and that their variance estimates (in the "in_var" array) may
-* simply be summed (with appropriate weighting factors).
-*
-* If no output variance estimates are required, a NULL pointer
-* should be given.
-* work
-* A pointer to an array with the same data type and size as the "out"
-* array which is used as work space. The values in the supplied
-* array are incremented on exit by the sum of the weights used
-* with each output pixel.
-* nused
-* An optional pointer to an int which will be incremented by the
-* number of input values pasted into the output array. Ignored if NULL.
-
-* Notes:
-* - There is a separate function for each numerical type of
-* gridded data, distinguished by replacing the <X> in the function
-* name by the appropriate 1- or 2-character suffix.
-*/
-/* Define a macro to implement the function for a specific data type. */
-#define MAKE_SPREAD_NEAREST(X,Xtype,IntType) \
-static void SpreadNearest##X( int ndim_out, \
- const int *lbnd_out, const int *ubnd_out, \
- const Xtype *in, const Xtype *in_var, \
- int npoint, const int *offset, \
- const double *const *coords, int flags, \
- Xtype badval, int npix_out, Xtype *out, \
- Xtype *out_var, double *work, int *nused, int *status ) { \
-\
-/* Local Variables: */ \
- Xtype c; /* Contribution to output value */ \
- Xtype in_val; /* Input data value */ \
- double *xn_max; /* Pointer to upper limits array (n-d) */ \
- double *xn_min; /* Pointer to lower limits array (n-d) */ \
- double cwgt; /* Product of input value and weight */ \
- double wgt; /* Weight for input value */ \
- double x; /* x coordinate value */ \
- double xmax; /* x upper limit */ \
- double xmin; /* x lower limit */ \
- double xn; /* Coordinate value (n-d) */ \
- double y; /* y coordinate value */ \
- double ymax; /* y upper limit */ \
- double ymin; /* y lower limit */ \
- int *stride; /* Pointer to array of dimension strides */ \
- int bad; /* Output pixel bad? */ \
- int genvar; /* Generate output variances? */ \
- int idim; /* Loop counter for dimensions */ \
- int ix; /* Number of pixels offset in x direction */ \
- int ixn; /* Number of pixels offset (n-d) */ \
- int iy; /* Number of pixels offset in y direction */ \
- int off_in; /* Pixel offset into input array */ \
- int off_out; /* Pixel offset into output array */ \
- int point; /* Loop counter for output points */ \
- int s; /* Temporary variable for strides */ \
- int usebad; /* Use "bad" input pixel values? */ \
- int usevar; /* Process variance array? */ \
- int varwgt; /* Use input variances as weights? */ \
- int ystride; /* Stride along input grid y direction */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Determine if we are processing bad pixels or variances. */ \
- usebad = flags & AST__USEBAD; \
- usevar = 0; \
- genvar = 0; \
- if( flags & AST__GENVAR ) { \
- genvar = out_var && work; \
- } else if( flags & AST__USEVAR ) { \
- usevar = in_var && out_var; \
- } \
- varwgt = ( flags & AST__VARWGT ) && in_var && work; \
-\
-/* Handle the 1-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
- if ( ndim_out == 1 ) { \
-\
-/* Calculate the coordinate limits of the output array. */ \
- xmin = (double) lbnd_out[ 0 ] - 0.5; \
- xmax = (double) ubnd_out[ 0 ] + 0.5; \
-\
-/* Identify eight cases, according to whether bad pixels and/or variances \
- are being processed and/or used. In each case we assign constant values \
- (0 or 1) to the "Usebad", "Usevar" and "Varwgt" flags so that code for \
- handling bad pixels and variances can be eliminated by the compiler's \
- optimisation system when not required. */ \
- if( varwgt ) { \
- if ( usebad ) { \
- if ( usevar ) { \
- NEAR_1D(X,Xtype,1,1,0,IntType,1) \
- } else if ( genvar ) { \
- NEAR_1D(X,Xtype,1,0,1,IntType,1) \
- } else { \
- NEAR_1D(X,Xtype,1,0,0,IntType,1) \
- } \
- } else { \
- if ( usevar ) { \
- NEAR_1D(X,Xtype,0,1,0,IntType,1) \
- } else if ( genvar ) { \
- NEAR_1D(X,Xtype,0,0,1,IntType,1) \
- } else { \
- NEAR_1D(X,Xtype,0,0,0,IntType,1) \
- } \
- } \
- } else { \
- if ( usebad ) { \
- if ( usevar ) { \
- NEAR_1D(X,Xtype,1,1,0,IntType,0) \
- } else if ( genvar ) { \
- NEAR_1D(X,Xtype,1,0,1,IntType,0) \
- } else { \
- NEAR_1D(X,Xtype,1,0,0,IntType,0) \
- } \
- } else { \
- if ( usevar ) { \
- NEAR_1D(X,Xtype,0,1,0,IntType,0) \
- } else if ( genvar ) { \
- NEAR_1D(X,Xtype,0,0,1,IntType,0) \
- } else { \
- NEAR_1D(X,Xtype,0,0,0,IntType,0) \
- } \
- } \
- } \
-\
-/* Handle the 2-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
- } else if ( ndim_out == 2 ) { \
-\
-/* Calculate the stride along the y dimension of the output grid. */ \
- ystride = ubnd_out[ 0 ] - lbnd_out[ 0 ] + 1; \
-\
-/* Calculate the coordinate limits of the output array in each \
- dimension. */ \
- xmin = (double) lbnd_out[ 0 ] - 0.5; \
- xmax = (double) ubnd_out[ 0 ] + 0.5; \
- ymin = (double) lbnd_out[ 1 ] - 0.5; \
- ymax = (double) ubnd_out[ 1 ] + 0.5; \
-\
-/* Identify eight cases, according to whether bad pixels and/or variances \
- are being processed and/or used. In each case we assign constant values \
- (0 or 1) to the "Usebad", "Usevar" and "Varwgt" flags so that code for \
- handling bad pixels and variances can be eliminated by the compiler's \
- optimisation system when not required. */ \
- if( varwgt ) { \
- if ( usebad ) { \
- if ( usevar ) { \
- NEAR_2D(X,Xtype,1,1,0,IntType,1) \
- } else if ( genvar ) { \
- NEAR_2D(X,Xtype,1,0,1,IntType,1) \
- } else { \
- NEAR_2D(X,Xtype,1,0,0,IntType,1) \
- } \
- } else { \
- if ( usevar ) { \
- NEAR_2D(X,Xtype,0,1,0,IntType,1) \
- } else if ( genvar ) { \
- NEAR_2D(X,Xtype,0,0,1,IntType,1) \
- } else { \
- NEAR_2D(X,Xtype,0,0,0,IntType,1) \
- } \
- } \
- } else { \
- if ( usebad ) { \
- if ( usevar ) { \
- NEAR_2D(X,Xtype,1,1,0,IntType,0) \
- } else if ( genvar ) { \
- NEAR_2D(X,Xtype,1,0,1,IntType,0) \
- } else { \
- NEAR_2D(X,Xtype,1,0,0,IntType,0) \
- } \
- } else { \
- if ( usevar ) { \
- NEAR_2D(X,Xtype,0,1,0,IntType,0) \
- } else if ( genvar ) { \
- NEAR_2D(X,Xtype,0,0,1,IntType,0) \
- } else { \
- NEAR_2D(X,Xtype,0,0,0,IntType,0) \
- } \
- } \
- } \
-\
-/* Handle other numbers of dimensions. */ \
-/* ----------------------------------- */ \
- } else { \
-\
-/* Allocate workspace. */ \
- stride = astMalloc( sizeof( int ) * (size_t) ndim_out ); \
- xn_max = astMalloc( sizeof( double ) * (size_t) ndim_out ); \
- xn_min = astMalloc( sizeof( double ) * (size_t) ndim_out ); \
- if ( astOK ) { \
-\
-/* Calculate the stride along each dimension of the output grid. */ \
- for ( s = 1, idim = 0; idim < ndim_out; idim++ ) { \
- stride[ idim ] = s; \
- s *= ubnd_out[ idim ] - lbnd_out[ idim ] + 1; \
-\
-/* Calculate the coordinate limits of the output grid in each \
- dimension. */ \
- xn_min[ idim ] = (double) lbnd_out[ idim ] - 0.5; \
- xn_max[ idim ] = (double) ubnd_out[ idim ] + 0.5; \
- } \
-\
-/* Identify eight cases, according to whether bad pixels and/or variances \
- are being processed and/or used. In each case we assign constant values \
- (0 or 1) to the "Usebad", "Usevar" and "Varwgt" flags so that code for \
- handling bad pixels and variances can be eliminated by the compiler's \
- optimisation system when not required. */ \
- if( varwgt ) { \
- if ( usebad ) { \
- if ( usevar ) { \
- NEAR_ND(X,Xtype,1,1,0,IntType,1) \
- } else if ( genvar ) { \
- NEAR_ND(X,Xtype,1,0,1,IntType,1) \
- } else { \
- NEAR_ND(X,Xtype,1,0,0,IntType,1) \
- } \
- } else { \
- if ( usevar ) { \
- NEAR_ND(X,Xtype,0,1,0,IntType,1) \
- } else if ( genvar ) { \
- NEAR_ND(X,Xtype,0,0,1,IntType,1) \
- } else { \
- NEAR_ND(X,Xtype,0,0,0,IntType,1) \
- } \
- } \
- } else { \
- if ( usebad ) { \
- if ( usevar ) { \
- NEAR_ND(X,Xtype,1,1,0,IntType,0) \
- } else if ( genvar ) { \
- NEAR_ND(X,Xtype,1,0,1,IntType,0) \
- } else { \
- NEAR_ND(X,Xtype,1,0,0,IntType,0) \
- } \
- } else { \
- if ( usevar ) { \
- NEAR_ND(X,Xtype,0,1,0,IntType,0) \
- } else if ( genvar ) { \
- NEAR_ND(X,Xtype,0,0,1,IntType,0) \
- } else { \
- NEAR_ND(X,Xtype,0,0,0,IntType,0) \
- } \
- } \
- } \
- } \
-\
-/* Free the workspace. */ \
- stride = astFree( stride ); \
- xn_max = astFree( xn_max ); \
- xn_min = astFree( xn_min ); \
- } \
-\
-}
-
-
-
-
-
-#define NEAR_1D(X,Xtype,Usebad,Usevar,Genvar,IntType,Varwgt) \
-\
-/* Loop round all input points which are to be rebinned. */ \
- for( point = 0; point < npoint; point++ ) { \
-\
-/* Obtain the input data value which is to be added into the output array. */ \
- off_in = offset[ point ]; \
- in_val = in[ off_in ]; \
-\
-/* If necessary, test if the input data value or variance is bad (or zero). */ \
- if ( Usebad ) { \
- bad = ( in_val == badval ); \
- if ( Usevar || Varwgt ) { \
- bad = bad || ( in_var[ off_in ] == badval ) \
- || ( in_var[ off_in ] <= 0.0 ); \
- } \
- } else { \
- if ( Usevar || Varwgt ) { \
- bad = ( in_var[ off_in ] <= 0.0 ); \
- } else { \
- bad = 0; \
- } \
- } \
-\
-/* Obtain the output x coordinate corresponding to the centre of the \
- current input pixel and test if it lies outside the output grid, or \
- is bad. */ \
- x = coords[ 0 ][ point ]; \
- bad = bad || ( x < xmin ) || ( x >= xmax ) || ( x == AST__BAD ); \
- if ( !bad ) { \
-\
-/* Increment the number of input pixels pasted into the output array. */ \
- if( nused ) (*nused)++; \
-\
-/* If not, then obtain the offset within the output grid of the pixel \
- which contains the current input point. */ \
- off_out = (int) floor( x + 0.5 ) - lbnd_out[ 0 ]; \
-\
-/* Note the input data value. */ \
- c = CONV(IntType,in_val); \
-\
-/* If we are using the input data variances as weights, calculate the \
- weight. */ \
- if( Varwgt ) { \
- wgt = 1.0/in_var[ off_in ]; \
-\
-/* Increment the value of this output pixel by the weighted input pixel \
- value, and increment the sum of the weights. */ \
- cwgt = c*wgt; \
- out[ off_out ] += CONV(IntType, cwgt ); \
- work[ off_out ] += wgt; \
-\
-/* If output variances are being calculated on the basis of the input \
- variances, then we also store the sum of the weights in "out_var". */ \
- if( Usevar ) { \
- out_var[ off_out ] += CONV(IntType,wgt); \
-\
-/* If output variances are being calculated on the basis of the spread of \
- input values, we need the sum of the squared weighted data values, the \
- sum of the weights (already in the first half of the "work" array), and \
- the sum of the squared weights. */ \
- } else if( Genvar ) { \
- out_var[ off_out ] += CONV(IntType,c*cwgt); \
- work[ off_out + npix_out ] += wgt*wgt; \
- } \
-\
-/* Now deal with cases where we are not using the input data varainces as \
- weights. */ \
- } else { \
-\
-/* Increment the value of this output pixel by the input pixel value, and \
- increment the sum of the weights by 1. */ \
- out[ off_out ] += c; \
- if( work ) work[ off_out ] += 1.0; \
-\
-/* If output variances are being calculated on the basis of the input \
- variances, then we increment the variance of this output pixel by the \
- variance of the input pixel. */ \
- if ( Usevar ) { \
- out_var[ off_out ] += CONV(IntType,in_var[ off_in ]); \
-\
-/* If output variances are being calculated on the basis of the spread of \
- input values, we need the sum of the squared data values, and the number \
- of values summed. */ \
- } else if( Genvar ) { \
- out_var[ off_out ] += c*c; \
- work[ off_out + npix_out ] += 1.0; \
- } \
- } \
- } \
- }
-
-
-
-
-
-
-#define NEAR_2D(X,Xtype,Usebad,Usevar,Genvar,IntType,Varwgt) \
-\
-/* Loop round all input points which are to be rebinned. */ \
- for( point = 0; point < npoint; point++ ) { \
-\
-/* Obtain the input data value which is to be added into the output array. */ \
- off_in = offset[ point ]; \
- in_val = in[ off_in ]; \
-\
-/* If necessary, test if the input data value or variance is bad (or zero). */ \
- if ( Usebad ) { \
- bad = ( in_val == badval ); \
- if ( Usevar || Varwgt ) { \
- bad = bad || ( in_var[ off_in ] == badval ) \
- || ( in_var[ off_in ] <= 0.0 ); \
- } \
- } else { \
- if ( Usevar || Varwgt ) { \
- bad = ( in_var[ off_in ] <= 0.0 ); \
- } else { \
- bad = 0; \
- } \
- } \
-\
-/* Obtain the output y coordinate corresponding to the centre of the \
- current input pixel and test if it lies outside the output grid, or \
- is bad. */ \
- y = coords[ 1 ][ point ]; \
- bad = bad || ( y < ymin ) || ( y >= ymax ) || ( y == AST__BAD ); \
- if ( !bad ) { \
-\
-/* Obtain the output x coordinate corresponding to the centre of the \
- current input pixel and test if it lies outside the output grid, or \
- is bad. */ \
- x = coords[ 0 ][ point ]; \
- bad = bad || ( x < xmin ) || ( x >= xmax ) || ( x == AST__BAD ); \
- if ( !bad ) { \
-\
-/* Increment the number of input pixels pasted into the output array. */ \
- if( nused ) (*nused)++; \
-\
-/* Obtain the offsets along each output grid dimension of the output \
- pixel which is to receive the input pixel value. */ \
- ix = (int) floor( x + 0.5 ) - lbnd_out[ 0 ]; \
- iy = (int) floor( y + 0.5 ) - lbnd_out[ 1 ]; \
-\
-/* Calculate this pixel's offset from the start of the output array. */ \
- off_out = ix + ystride * iy; \
-\
-/* Note the input data value. */ \
- c = CONV(IntType,in_val); \
-\
-/* If we are using the input data variances as weights, calculate the \
- weight. */ \
- if( Varwgt ) { \
- wgt = 1.0/in_var[ off_in ]; \
-\
-/* Increment the value of this output pixel by the weighted input pixel \
- value, and increment the sum of the weights. */ \
- cwgt = c*wgt; \
- out[ off_out ] += CONV(IntType, cwgt ); \
- work[ off_out ] += wgt; \
-\
-/* If output variances are being calculated on the basis of the input \
- variances, then we also store the sum of the weights in "out_var". */ \
- if( Usevar ) { \
- out_var[ off_out ] += CONV(IntType,wgt); \
-\
-/* If output variances are being calculated on the basis of the spread of \
- input values, we need the sum of the squared weighted data values, the \
- sum of the weights (already in the first half of the "work" array), and \
- the sum of the squared weights. */ \
- } else if( Genvar ) { \
- out_var[ off_out ] += CONV(IntType,c*cwgt); \
- work[ off_out + npix_out ] += wgt*wgt; \
- } \
-\
-/* Now deal with cases where we are not using the input data varainces as \
- weights. */ \
- } else { \
-\
-/* Increment the value of this output pixel by the value of the input pixel. */ \
- out[ off_out ] += c; \
- if( work ) work[ off_out ] += 1.0; \
-\
-/* If required, also increment the variance of this output pixel by the \
- variance of the input pixel. */ \
- if ( Usevar ) { \
- out_var[ off_out ] += CONV(IntType,in_var[ off_in ]); \
-\
-/* Alternatively, if generating output variances from the spread of \
- input values, form the required sum.*/ \
- } else if( Genvar ) { \
- out_var[ off_out ] += c*c; \
- work[ off_out + npix_out ] += 1.0; \
- } \
- } \
- } \
- } \
- }
-
-
-
-#define NEAR_ND(X,Xtype,Usebad,Usevar,Genvar,IntType,Varwgt) \
-\
-/* Loop round all input points which are to be rebinned. */ \
- for( point = 0; point < npoint; point++ ) { \
-\
-/* Obtain the input data value which is to be added into the output array. */ \
- off_in = offset[ point ]; \
- in_val = in[ off_in ]; \
-\
-/* If necessary, test if the input data value or variance is bad. */ \
- if ( Usebad ) { \
- bad = ( in_val == badval ); \
- if ( Usevar || Varwgt ) { \
- bad = bad || ( in_var[ off_in ] == badval ) \
- || ( in_var[ off_in ] <= 0.0 ); \
- } \
- } else { \
- if ( Usevar || Varwgt ) { \
- bad = ( in_var[ off_in ] <= 0.0 ); \
- } else { \
- bad = 0; \
- } \
- } \
-\
- if( !bad ) { \
-\
-/* Initialise the offset into the output array. Then loop to obtain \
- each coordinate associated with the current output point. */ \
- off_out = 0; \
- for ( idim = 0; idim < ndim_out; idim++ ) { \
- xn = coords[ idim ][ point ]; \
-\
-/* Test if the coordinate lies outside the output grid, or is bad. If \
- either is true, the corresponding input pixel value will be ignored, \
- so give up on this point. */ \
- bad = ( xn < xn_min[ idim ] ) || ( xn >= xn_max[ idim ] ) || \
- ( xn == AST__BAD ); \
- if ( bad ) { \
- break; \
- } \
-\
-/* Obtain the offset along the current output grid dimension of the \
- output pixel which is to receive the input pixel value. */ \
- ixn = (int) floor( xn + 0.5 ) - lbnd_out[ idim ]; \
-\
-/* Accumulate this pixel's offset from the start of the output array. */ \
- off_out += ixn * stride[ idim ]; \
- } \
-\
- if( !bad ) { \
-\
-/* Increment the number of input pixels pasted into the output array. */ \
- if( nused ) (*nused)++; \
-\
-/* Note the input data value. */ \
- c = CONV(IntType,in_val); \
-\
-/* If we are using the input data variances as weights, calculate the \
- weight. */ \
- if( Varwgt ) { \
- wgt = 1.0/in_var[ off_in ]; \
-\
-/* Increment the value of this output pixel by the weighted input pixel \
- value, and increment the sum of the weights. */ \
- cwgt = c*wgt; \
- out[ off_out ] += CONV(IntType, cwgt ); \
- work[ off_out ] += wgt; \
-\
-/* If output variances are being calculated on the basis of the input \
- variances, then we also store the sum of the weights in "out_var". */ \
- if( Usevar ) { \
- out_var[ off_out ] += CONV(IntType,wgt); \
-\
-/* If output variances are being calculated on the basis of the spread of \
- input values, we need the sum of the squared weighted data values, the \
- sum of the weights (already in the first half of the "work" array), and \
- the sum of the squared weights. */ \
- } else if( Genvar ) { \
- out_var[ off_out ] += CONV(IntType,c*cwgt); \
- work[ off_out + npix_out ] += wgt*wgt; \
- } \
-\
-/* Now deal with cases where we are not using the input data varainces as \
- weights. */ \
- } else { \
-\
-/* Increment the value of this output pixel by the value of the input pixel. */ \
- out[ off_out ] += c; \
- if( work ) work[ off_out ] += 1.0; \
-\
-/* If required, also increment the variance of this output pixel by the \
- variance of the input pixel. */ \
- if ( Usevar ) { \
- out_var[ off_out ] += CONV(IntType,in_var[ off_in ]); \
-\
-/* Alternatively, if generating output variances from the spread of \
- input values, form the required sum.*/ \
- } else if( Genvar ) { \
- out_var[ off_out ] += c*c; \
- work[ off_out + npix_out ] += 1.0; \
- } \
- } \
- } \
- } \
- }
-
-
-
-
-
-
-/* Expand the main macro above to generate a function for each
- required signed data type. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-MAKE_SPREAD_NEAREST(LD,long double,0)
-#endif
-
-MAKE_SPREAD_NEAREST(D,double,0)
-MAKE_SPREAD_NEAREST(F,float,0)
-MAKE_SPREAD_NEAREST(I,int,1)
-
-/* Undefine the macros used above. */
-#undef NEAR_ND
-#undef NEAR_2D
-#undef NEAR_1D
-#undef MAKE_SPREAD_NEAREST
-
-
-
-
-
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a Mapping.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Mapping member function (over-rides the astTestAttrib protected
-* method inherited from the Object class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a Mapping's attributes.
-
-* Parameters:
-* this
-* Pointer to the Mapping.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstMapping *this; /* Pointer to the Mapping structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the Mapping structure. */
- this = (AstMapping *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* Invert. */
-/* ------- */
- if ( !strcmp( attrib, "invert" ) ) {
- result = astTestInvert( this );
-
-/* Report. */
-/* ------- */
- } else if ( !strcmp( attrib, "report" ) ) {
- result = astTestReport( this );
-
-/* If the name is not recognised, test if it matches any of the
- read-only attributes of this class. If it does, then return
- zero. */
- } else if ( !strcmp( attrib, "nin" ) ||
- !strcmp( attrib, "islinear" ) ||
- !strcmp( attrib, "issimple" ) ||
- !strcmp( attrib, "nout" ) ||
- !strcmp( attrib, "tranforward" ) ||
- !strcmp( attrib, "traninverse" ) ) {
- result = 0;
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static void Tran1( AstMapping *this, int npoint, const double xin[],
- int forward, double xout[], int *status ) {
-/*
-*++
-* Name:
-c astTran1
-f AST_TRAN1
-
-* Purpose:
-* Transform 1-dimensional coordinates.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "mapping.h"
-c void astTran1( AstMapping *this, int npoint, const double xin[],
-c int forward, double xout[] )
-f CALL AST_TRAN1( THIS, NPOINT, XIN, FORWARD, XOUT, STATUS )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-c This function applies a Mapping to transform the coordinates of
-f This routine applies a Mapping to transform the coordinates of
-* a set of points in one dimension.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Mapping to be applied.
-c npoint
-f NPOINT = INTEGER (Given)
-* The number of points to be transformed.
-c xin
-f XIN( NPOINT ) = DOUBLE PRECISION (Given)
-c An array of "npoint" coordinate values for the input
-f An array of coordinate values for the input
-* (untransformed) points.
-c forward
-f FORWARD = LOGICAL (Given)
-c A non-zero value indicates that the Mapping's forward
-c coordinate transformation is to be applied, while a zero
-c value indicates that the inverse transformation should be
-c used.
-f A .TRUE. value indicates that the Mapping's forward
-f coordinate transformation is to be applied, while a .FALSE.
-f value indicates that the inverse transformation should be
-f used.
-c xout
-f XOUT( NPOINT ) = DOUBLE PRECISION (Returned)
-c An array (with "npoint" elements) into which the
-f An array into which the
-* coordinates of the output (transformed) points will be written.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - The Mapping supplied must have the value 1 for both its Nin
-* and Nout attributes.
-*--
-*/
-
-/* Local Variables: */
- AstPointSet *in_points; /* Pointer to input PointSet */
- AstPointSet *out_points; /* Pointer to output PointSet */
- const double *in_ptr[ 1 ]; /* Array of input data pointers */
- double *out_ptr[ 1 ]; /* Array of output data pointers */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Validate the Mapping and numbers of points/coordinates. */
- ValidateMapping( this, forward, npoint, 1, 1, "astTran1", status );
-
-/* Set up pointers to the input and output coordinate arrays. */
- if ( astOK ) {
- in_ptr[ 0 ] = xin;
- out_ptr[ 0 ] = xout;
-
-/* Create PointSets to describe the input and output points. */
- in_points = astPointSet( npoint, 1, "", status );
- out_points = astPointSet( npoint, 1, "", status );
-
-/* Associate the data pointers with the PointSets (note we must
- explicitly remove the "const" qualifier from the input data here,
- although they will not be modified). */
- astSetPoints( in_points, (double **) in_ptr );
- astSetPoints( out_points, out_ptr );
-
-/* Apply the required transformation to the coordinates. */
- (void) astTransform( this, in_points, forward, out_points );
-
-/* If the Mapping's Report attribute is set, report the effect the
- Mapping has had on the coordinates. */
- if ( astGetReport( this ) ) astReportPoints( this, forward,
- in_points, out_points );
-
-/* Delete the two PointSets. */
- in_points = astDelete( in_points );
- out_points = astDelete( out_points );
- }
-}
-
-static void Tran2( AstMapping *this,
- int npoint, const double xin[], const double yin[],
- int forward, double xout[], double yout[], int *status ) {
-/*
-*++
-* Name:
-c astTran2
-f AST_TRAN2
-
-* Purpose:
-* Transform 2-dimensional coordinates.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "mapping.h"
-c void astTran2( AstMapping *this,
-c int npoint, const double xin[], const double yin[],
-c int forward, double xout[], double yout[] )
-f CALL AST_TRAN2( THIS, NPOINT, XIN, YIN, FORWARD, XOUT, YOUT, STATUS )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-c This function applies a Mapping to transform the coordinates of
-f This routine applies a Mapping to transform the coordinates of
-* a set of points in two dimensions.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Mapping to be applied.
-c npoint
-f NPOINT = INTEGER (Given)
-* The number of points to be transformed.
-c xin
-f XIN( NPOINT ) = DOUBLE PRECISION (Given)
-c An array of "npoint" X-coordinate values for the input
-f An array of X-coordinate values for the input
-* (untransformed) points.
-c yin
-f YIN( NPOINT ) = DOUBLE PRECISION (Given)
-c An array of "npoint" Y-coordinate values for the input
-f An array of Y-coordinate values for the input
-* (untransformed) points.
-c forward
-f FORWARD = LOGICAL (Given)
-c A non-zero value indicates that the Mapping's forward
-c coordinate transformation is to be applied, while a zero
-c value indicates that the inverse transformation should be
-c used.
-f A .TRUE. value indicates that the Mapping's forward
-f coordinate transformation is to be applied, while a .FALSE.
-f value indicates that the inverse transformation should be
-f used.
-c xout
-f XOUT( NPOINT ) = DOUBLE PRECISION (Returned)
-c An array (with "npoint" elements) into which the
-f An array into which the
-* X-coordinates of the output (transformed) points will be written.
-c yout
-f YOUT( NPOINT ) = DOUBLE PRECISION (Returned)
-c An array (with "npoint" elements) into which the
-f An array into which the
-* Y-coordinates of the output (transformed) points will be written.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - The Mapping supplied must have the value 2 for both its Nin
-* and Nout attributes.
-*--
-*/
-
-/* Local Variables: */
- AstPointSet *in_points; /* Pointer to input PointSet */
- AstPointSet *out_points; /* Pointer to output PointSet */
- const double *in_ptr[ 2 ]; /* Array of input data pointers */
- double *out_ptr[ 2 ]; /* Array of output data pointers */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Validate the Mapping and the numbers of points/coordinates. */
- ValidateMapping( this, forward, npoint, 2, 2, "astTran2", status );
-
-/* Set up pointers to the input and output coordinate arrays. */
- if ( astOK ) {
- in_ptr[ 0 ] = xin;
- in_ptr[ 1 ] = yin;
- out_ptr[ 0 ] = xout;
- out_ptr[ 1 ] = yout;
-
-/* Create PointSets to describe the input and output points. */
- in_points = astPointSet( npoint, 2, "", status );
- out_points = astPointSet( npoint, 2, "", status );
-
-/* Associate the data pointers with the PointSets (note we must
- explicitly remove the "const" qualifier from the input data here,
- although they will not be modified). */
- astSetPoints( in_points, (double **) in_ptr );
- astSetPoints( out_points, out_ptr );
-
-/* Apply the required transformation to the coordinates. */
- (void) astTransform( this, in_points, forward, out_points );
-
-/* If the Mapping's Report attribute is set, report the effect the
- Mapping has had on the coordinates. */
- if ( astGetReport( this ) ) astReportPoints( this, forward,
- in_points, out_points );
-
-/* Delete the two PointSets. */
- in_points = astDelete( in_points );
- out_points = astDelete( out_points );
- }
-}
-
-static void TranGrid( AstMapping *this, int ncoord_in, const int lbnd[],
- const int ubnd[], double tol, int maxpix, int forward,
- int ncoord_out, int outdim, double *out, int *status ) {
-/*
-*++
-* Name:
-c astTranGrid
-f AST_TRANGRID
-
-* Purpose:
-* Transform a grid of positions
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "mapping.h"
-c void astTranGrid( AstMapping *this, int ncoord_in,
-c const int lbnd[], const int ubnd[],
-c double tol, int maxpix, int forward,
-c int ncoord_out, int outdim, double *out );
-f CALL AST_TRANGRID( THIS, NCOORD_IN, LBND, UBND, TOL, MAXPIX,
-f FORWARD, NCOORD_OUT, OUTDIM, OUT, STATUS )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-* This function uses the supplied Mapping to transforms a regular square
-* grid of points covering a specified box. It attempts to do this
-* quickly by first approximating the Mapping with a linear transformation
-* applied over the whole region of the input grid which is being used.
-* If this proves to be insufficiently accurate, the input region is
-* sub-divided into two along its largest dimension and the process is
-* repeated within each of the resulting sub-regions. This process of
-* sub-division continues until a sufficiently good linear approximation
-* is found, or the region to which it is being applied becomes too small
-* (in which case the original Mapping is used directly).
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Mapping to be applied.
-c ncoord_in
-f NCOORD_IN = INTEGER (Given)
-* The number of coordinates being supplied for each box corner
-* (i.e. the number of dimensions of the space in which the
-* input points reside).
-c lbnd
-f LBND( NCOORD_IN ) = INTEGER (Given)
-c Pointer to an array of integers, with "ncoord_in" elements,
-f An array
-* containing the coordinates of the centre of the first pixel
-* in the input grid along each dimension.
-c ubnd
-f UBND( NCOORD_IN ) = INTEGER (Given)
-c Pointer to an array of integers, with "ncoord_in" elements,
-f An array
-* containing the coordinates of the centre of the last pixel in
-* the input grid along each dimension.
-*
-c Note that "lbnd" and "ubnd" together define the shape
-f Note that LBND and UBND together define the shape
-* and size of the input grid, its extent along a particular
-c (j'th) dimension being ubnd[j]-lbnd[j]+1 (assuming the
-c index "j" to be zero-based). They also define
-f (J'th) dimension being UBND(J)-LBND(J)+1. They also define
-* the input grid's coordinate system, each pixel having unit
-* extent along each dimension with integral coordinate values
-* at its centre.
-c tol
-f TOL = DOUBLE PRECISION (Given)
-* The maximum tolerable geometrical distortion which may be
-* introduced as a result of approximating non-linear Mappings
-* by a set of piece-wise linear transformations. This should be
-* expressed as a displacement within the output coordinate system
-* of the Mapping.
-*
-* If piece-wise linear approximation is not required, a value
-* of zero may be given. This will ensure that the Mapping is
-* used without any approximation, but may increase execution
-* time.
-*
-* If the value is too high, discontinuities between the linear
-* approximations used in adjacent panel will be higher. If this
-* is a problem, reduce the tolerance value used.
-c maxpix
-f MAXPIX = INTEGER (Given)
-* A value which specifies an initial scale size (in input grid points)
-* for the adaptive algorithm which approximates non-linear Mappings
-* with piece-wise linear transformations. Normally, this should
-* be a large value (larger than any dimension of the region of
-* the input grid being used). In this case, a first attempt to
-* approximate the Mapping by a linear transformation will be
-* made over the entire input region.
-*
-* If a smaller value is used, the input region will first be
-c divided into sub-regions whose size does not exceed "maxpix"
-f divided into sub-regions whose size does not exceed MAXPIX
-* grid points in any dimension. Only at this point will attempts
-* at approximation commence.
-*
-* This value may occasionally be useful in preventing false
-* convergence of the adaptive algorithm in cases where the
-* Mapping appears approximately linear on large scales, but has
-* irregularities (e.g. holes) on smaller scales. A value of,
-* say, 50 to 100 grid points can also be employed as a safeguard
-* in general-purpose software, since the effect on performance is
-* minimal.
-*
-* If too small a value is given, it will have the effect of
-* inhibiting linear approximation altogether (equivalent to
-c setting "tol" to zero). Although this may degrade
-f setting TOL to zero). Although this may degrade
-* performance, accurate results will still be obtained.
-c forward
-f FORWARD = LOGICAL (Given)
-c A non-zero value indicates that the Mapping's forward
-c coordinate transformation is to be applied, while a zero
-c value indicates that the inverse transformation should be
-c used.
-f A .TRUE. value indicates that the Mapping's forward
-f coordinate transformation is to be applied, while a .FALSE.
-f value indicates that the inverse transformation should be
-f used.
-c ncoord_out
-f NCOORD_OUT = INTEGER (Given)
-* The number of coordinates being generated by the Mapping for
-* each output point (i.e. the number of dimensions of the
-* space in which the output points reside). This need not be
-c the same as "ncoord_in".
-f the same as NCOORD_IN.
-c outdim
-f OUTDIM = INTEGER (Given)
-c The number of elements along the second dimension of the "out"
-f The number of elements along the first dimension of the OUT
-* array (which will contain the output coordinates). The value
-* given should not be less than the number of points in the grid.
-c out
-f OUT( OUTDIM, NCOORD_OUT ) = DOUBLE PRECISION (Returned)
-c The address of the first element in a 2-dimensional array of
-c shape "[ncoord_out][outdim]", into
-c which the coordinates of the output (transformed) points will
-c be written. These will be stored such that the value of
-c coordinate number "coord" for output point number "point"
-c will be found in element "out[coord][point]".
-f An array into which the coordinates of the output
-f (transformed) points will be written. These will be stored
-f such that the value of coordinate number COORD for output
-f point number POINT will be found in element OUT(POINT,COORD).
-* The points are ordered such that the first axis of the input
-* grid changes most rapidly. For example, if the input grid is
-* 2-dimensional and extends from (2,-1) to (3,1), the output
-* points will be stored in the order (2,-1), (3, -1), (2,0), (3,0),
-* (2,1), (3,1).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-c - If the forward coordinate transformation is being applied, the
-c Mapping supplied must have the value of "ncoord_in" for its Nin
-c attribute and the value of "ncoord_out" for its Nout attribute. If
-c the inverse transformation is being applied, these values should
-c be reversed.
-f - If the forward coordinate transformation is being applied, the
-f Mapping supplied must have the value of NCOORD_IN for its Nin
-f attribute and the value of NCOORD_OUT for its Nout attribute. If
-f the inverse transformation is being applied, these values should
-f be reversed.
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Thread-specific data */
- AstMapping *simple; /* Pointer to simplified Mapping */
- double **out_ptr; /* Pointer to array of output data pointers */
- int coord; /* Loop counter for coordinates */
- int idim; /* Loop counter for coordinate dimensions */
- int npoint; /* Number of points in the grid */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to a structure holding thread-specific global data values */
- astGET_GLOBALS(this);
-
-/* Calculate the number of points in the grid, and check that the lower and
- upper bounds of the input grid are consistent. Report an error if any
- pair is not. */
- npoint = 1;
- for ( idim = 0; idim < ncoord_in; idim++ ) {
- if ( lbnd[ idim ] > ubnd[ idim ] ) {
- astError( AST__GBDIN, "astTranGrid(%s): Lower bound of "
- "input grid (%d) exceeds corresponding upper bound "
- "(%d).", status, astGetClass( this ),
- lbnd[ idim ], ubnd[ idim ] );
- astError( AST__GBDIN, "Error in input dimension %d.", status,
- idim + 1 );
- break;
- } else {
- npoint *= ubnd[ idim ] - lbnd[ idim ] + 1;
- }
- }
-
-/* Validate the mapping and numbers of points/coordinates. */
- ValidateMapping( this, forward, npoint, ncoord_in, ncoord_out,
- "astTranGrid", status );
-
-/* Check that the positional accuracy tolerance supplied is valid and
- report an error if necessary. */
- if ( astOK && ( tol < 0.0 ) ) {
- astError( AST__PATIN, "astTranGrid(%s): Invalid positional "
- "accuracy tolerance (%.*g pixel).", status,
- astGetClass( this ), DBL_DIG, tol );
- astError( AST__PATIN, "This value should not be less than zero." , status);
- }
-
-/* Check that the initial scale size in grid points supplied is valid and
- report an error if necessary. */
- if ( astOK && ( maxpix < 0 ) ) {
- astError( AST__SSPIN, "astTranGrid(%s): Invalid initial scale "
- "size in grid points (%d).", status, astGetClass( this ), maxpix );
- astError( AST__SSPIN, "This value should not be less than zero." , status);
- }
-
-/* Validate the output array dimension argument. */
- if ( astOK && ( outdim < npoint ) ) {
- astError( AST__DIMIN, "astTranGrid(%s): The output array dimension value "
- "(%d) is invalid.", status, astGetClass( this ), outdim );
- astError( AST__DIMIN, "This should not be less than the number of "
- "grid points being transformed (%d).", status, npoint );
- }
-
-/* If there are sufficient pixels to make it worthwhile, simplify the
- Mapping supplied to improve performance. Otherwise, just clone the
- Mapping pointer. Note we save a pointer to the original Mapping so
- that lower-level functions can use it if they need to report an error. */
- simple = NULL;
- unsimplified_mapping = this;
- if ( astOK ) {
- if ( npoint > 1024 ) {
- simple = astSimplify( this );
-
-/* Report an error if the required transformation of this simplified
- Mapping is not defined. */
- if( astOK ) {
- if ( forward && !astGetTranForward( simple ) ) {
- astError( AST__TRNND, "astTranGrid(%s): A forward coordinate "
- "transformation is not defined by the %s supplied.", status,
- astGetClass( unsimplified_mapping ),
- astGetClass( unsimplified_mapping ) );
- } else if ( !forward && !astGetTranInverse( simple ) ) {
- astError( AST__TRNND, "astTranGrid(%s): An inverse coordinate "
- "transformation is not defined by the %s supplied.", status,
- astGetClass( unsimplified_mapping ),
- astGetClass( unsimplified_mapping ) );
- }
- }
-
- } else {
- simple = astClone( this );
- }
-
-/* Allocate memory to hold the array of output data pointers. */
- out_ptr = astMalloc( sizeof( double * ) * (size_t) ncoord_out );
-
-/* Initialise the output data pointers to point into the "out" array. */
- if ( astOK ) {
- for ( coord = 0; coord < ncoord_out; coord++ ) {
- out_ptr[ coord ] = out + coord * outdim;
- }
-
-/* If required, temporarily invert the Mapping. */
- if( !forward ) astInvert( simple );
-
-/* Perform the transformation. */
- TranGridAdaptively( simple, ncoord_in, lbnd, ubnd, lbnd, ubnd, tol,
- maxpix, ncoord_out, out_ptr, status );
-
-/* If required, uninvert the Mapping. */
- if( !forward ) astInvert( simple );
-
- }
-
-/* Free the memory used for the data pointers. */
- out_ptr = astFree( out_ptr );
-
-/* Annul the pointer to the simplified/cloned Mapping. */
- simple = astAnnul( simple );
- }
-}
-
-static void TranGridAdaptively( AstMapping *this, int ncoord_in,
- const int *lbnd_in, const int *ubnd_in,
- const int lbnd[], const int ubnd[],
- double tol, int maxpix, int ncoord_out,
- double *out[], int *status ){
-/*
-* Name:
-* TranGridAdaptively
-
-* Purpose:
-* Transform grid positions adaptively.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void TranGridAdaptively( AstMapping *this, int ncoord_in,
-* const int *lbnd_in, const int *ubnd_in,
-* const int lbnd[], const int ubnd[],
-* double tol, int maxpix, int ncoord_out,
-* double *out[] )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function transforms grid points within a specified section of a
-* rectangular grid (with any number of dimensions) using the forward
-* transformation of the specified Mapping.
-*
-* This function is very similar to TranGridWithBlocking and TranGridSection
-* which lie below it in the calling hierarchy. However, this function
-* also attempts to adapt to the Mapping supplied and to sub-divide the
-* section being transformed into smaller sections within which a linear
-* approximation to the Mapping may be used. This reduces the number of
-* Mapping evaluations, thereby improving efficiency particularly when
-* complicated Mappings are involved.
-
-* Parameters:
-* this
-* Pointer to the Mapping to be applied. The forward transformation
-* is used.
-* ncoord_in
-* The number of coordinates being supplied for each box corner
-* (i.e. the number of dimensions of the space in which the
-* input points reside).
-* lbnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the first
-* pixel in the input grid along each dimension.
-* ubnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the last
-* pixel in the input grid along each dimension.
-*
-* Note that "lbnd_in" and "ubnd_in" together define the shape
-* and size of the whole input grid, its extent along a
-* particular (i'th) dimension being (ubnd_in[i] - lbnd_in[i] +
-* 1). They also define the input grid's coordinate system, with
-* each pixel being of unit extent along each dimension with
-* integral coordinate values at its centre.
-* lbnd
-* Pointer to an array of integers, with "ncoord_in" elements,
-* containing the coordinates of the centre of the first pixel
-* in the input grid along each dimension.
-* ubnd
-* Pointer to an array of integers, with "ncoord_in" elements,
-* containing the coordinates of the centre of the last pixel in
-* the input grid along each dimension.
-*
-* Note that "lbnd" and "ubnd" together define the shape
-* and size of the input grid, its extent along a particular
-* (j'th) dimension being ubnd[j]-lbnd[j]+1 (assuming the
-* index "j" to be zero-based). They also define
-* the input grid's coordinate system, each pixel having unit
-* extent along each dimension with integral coordinate values
-* at its centre.
-* tol
-* The maximum tolerable geometrical distortion which may be
-* introduced as a result of approximating non-linear Mappings
-* by a set of piece-wise linear transformations. This should be
-* expressed as a displacement in pixels in the output grid's
-* coordinate system.
-*
-* If piece-wise linear approximation is not required, a value
-* of zero may be given. This will ensure that the Mapping is
-* used without any approximation, but may increase execution
-* time.
-*
-* If the value is too high, discontinuities between the linear
-* approximations used in adjacent panel will be higher. If this
-* is a problem, reduce the tolerance value used.
-* maxpix
-* A value which specifies an initial scale size (in grid points)
-* for the adaptive algorithm which approximates non-linear Mappings
-* with piece-wise linear transformations. Normally, this should
-* be a large value (larger than any dimension of the region of
-* the input grid being used). In this case, a first attempt to
-* approximate the Mapping by a linear transformation will be
-* made over the entire input region.
-*
-* If a smaller value is used, the input region will first be
-* divided into sub-regions whose size does not exceed "maxpix"
-* grid points in any dimension. Only at this point will attempts
-* at approximation commence.
-*
-* This value may occasionally be useful in preventing false
-* convergence of the adaptive algorithm in cases where the
-* Mapping appears approximately linear on large scales, but has
-* irregularities (e.g. holes) on smaller scales. A value of,
-* say, 50 to 100 grid points can also be employed as a safeguard
-* in general-purpose software, since the effect on performance is
-* minimal.
-*
-* If too small a value is given, it will have the effect of
-* inhibiting linear approximation altogether (equivalent to
-* setting "tol" to zero). Although this may degrade
-* performance, accurate results will still be obtained.
-* ncoord_out
-* The number of dimensions of the space in which the output points
-* reside.
-* out
-* Pointer to an array with "ndim_out" elements. Element [i] of
-* this array is a pointer to an array in which to store the
-* transformed values for output axis "i". The points are ordered
-* such that the first axis of the input grid changes most rapidly.
-* For example, if the input grid is 2-dimensional and extends from
-* (2,-1) to (3,1), the output points will be stored in the order
-* (2,-1), (3, -1), (2,0), (3,0), (2,1), (3,1).
-
-*/
-
-/* Local Variables: */
- double *flbnd; /* Array holding floating point lower bounds */
- double *fubnd; /* Array holding floating point upper bounds */
- double *linear_fit; /* Pointer to array of fit coefficients */
- int *hi; /* Pointer to array of section upper bounds */
- int *lo; /* Pointer to array of section lower bounds */
- int coord_in; /* Loop counter for input coordinates */
- int dim; /* Output section dimension size */
- int dimx; /* Dimension with maximum section extent */
- int divide; /* Sub-divide the output section? */
- int i; /* Loop count */
- int isLinear; /* Is the transformation linear? */
- int mxdim; /* Largest output section dimension size */
- int npix; /* Number of pixels in output section */
- int npoint; /* Number of points for obtaining a fit */
- int nvertex; /* Number of vertices of output section */
- int toobig; /* Section too big (must sub-divide)? */
- int toosmall; /* Section too small to sub-divide? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Further initialisation. */
- npix = 1;
- mxdim = 0;
- dimx = 1;
- nvertex = 1;
-
-/* Loop through the input grid dimensions. */
- for ( coord_in = 0; coord_in < ncoord_in; coord_in++ ) {
-
-/* Obtain the extent in each dimension of the input section which is
- to be rebinned, and calculate the total number of pixels it contains. */
- dim = ubnd[ coord_in ] - lbnd[ coord_in ] + 1;
- npix *= dim;
-
-/* Find the maximum dimension size of this input section and note which
- dimension has this size. */
- if ( dim > mxdim ) {
- mxdim = dim;
- dimx = coord_in;
- }
-
-/* Calculate how many vertices the output section has. */
- nvertex *= 2;
- }
-
-/* Calculate how many sample points will be needed (by the astLinearApprox
- function) to obtain a linear fit to the Mapping's forward transformation. */
- npoint = 1 + 4 * ncoord_in + 2 * nvertex;
-
-/* If the number of pixels in the input section is not at least 4
- times this number, we will probably not save significant time by
- attempting to obtain a linear fit, so note that the input section
- is too small. */
- toosmall = ( npix < ( 4 * npoint ) );
-
-/* Note if the maximum dimension of the input section exceeds the
- user-supplied scale factor. */
- toobig = ( maxpix < mxdim );
-
-/* Assume the Mapping is significantly non-linear before deciding
- whether to sub-divide the output section. */
- linear_fit = NULL;
-
-/* If the output section is too small to be worth obtaining a linear
- fit, or if the accuracy tolerance is zero, we will not
- sub-divide. This means that the Mapping will be used to transform
- each pixel's coordinates and no linear approximation will be
- used. */
- if ( toosmall || ( tol == 0.0 ) ) {
- divide = 0;
-
-/* Otherwise, if the largest input section dimension exceeds the
- scale length given, we will sub-divide. This offers the possibility
- of obtaining a linear approximation to the Mapping over a reduced
- range of input coordinates (which will be handled by a recursive
- invocation of this function). */
- } else if ( toobig ) {
- divide = 1;
-
-/* If neither of the above apply, then attempt to fit a linear
- approximation to the forward transformation of the Mapping over
- the range of coordinates covered by the input section. We need to
- temporarily copy the integer bounds into floating point arrays to
- use astLinearApprox. */
- } else {
-
-/* Allocate memory for floating point bounds and for the coefficient array */
- flbnd = astMalloc( sizeof( double )*(size_t) ncoord_in );
- fubnd = astMalloc( sizeof( double )*(size_t) ncoord_in );
- linear_fit = astMalloc( sizeof( double )*
- (size_t) ( ncoord_out*( ncoord_in + 1 ) ) );
- if( astOK ) {
-
-/* Copy the bounds into these arrays */
- for( i = 0; i < ncoord_in; i++ ) {
- flbnd[ i ] = (double) lbnd[ i ];
- fubnd[ i ] = (double) ubnd[ i ];
- }
-
-/* Get the linear approximation to the forward transformation. */
- isLinear = astLinearApprox( this, flbnd, fubnd, tol, linear_fit );
-
-/* Free the coeff array if the inverse transformation is not linear. */
- if( !isLinear ) linear_fit = astFree( linear_fit );
-
- } else {
- linear_fit = astFree( linear_fit );
- }
-
-/* Free resources */
- flbnd = astFree( flbnd );
- fubnd = astFree( fubnd );
-
-/* If a linear fit was obtained, we will use it and therefore do not
- wish to sub-divide further. Otherwise, we sub-divide in the hope
- that this may result in a linear fit next time. */
- divide = !linear_fit;
- }
-
-/* If no sub-division is required, perform the transformation (in a
- memory-efficient manner, since the section we are rebinning might
- still be very large). This will use the linear fit, if obtained
- above. */
- if ( astOK ) {
- if ( !divide ) {
- TranGridWithBlocking( this, linear_fit, ncoord_in, lbnd_in,
- ubnd_in, lbnd, ubnd, ncoord_out, out, status );
-
-/* Otherwise, allocate workspace to perform the sub-division. */
- } else {
- lo = astMalloc( sizeof( int ) * (size_t) ncoord_in );
- hi = astMalloc( sizeof( int ) * (size_t) ncoord_in );
- if ( astOK ) {
-
-/* Initialise the bounds of a new input section to match the original
- input section. */
- for ( coord_in = 0; coord_in < ncoord_in; coord_in++ ) {
- lo[ coord_in ] = lbnd[ coord_in ];
- hi[ coord_in ] = ubnd[ coord_in ];
- }
-
-/* Replace the upper bound of the section's largest dimension with the
- mid-point of the section along this dimension, rounded downwards. */
- hi[ dimx ] =
- (int) floor( 0.5 * (double) ( lbnd[ dimx ] + ubnd[ dimx ] ) );
-
-/* Rebin the resulting smaller section using a recursive invocation
- of this function. */
- TranGridAdaptively( this, ncoord_in, lbnd_in, ubnd_in, lo, hi,
- tol, maxpix, ncoord_out, out, status );
-
-/* Now set up a second section which covers the remaining half of the
- original input section. */
- lo[ dimx ] = hi[ dimx ] + 1;
- hi[ dimx ] = ubnd[ dimx ];
-
-/* If this section contains pixels, transform it in the same way. */
- if ( lo[ dimx ] <= hi[ dimx ] ) {
- TranGridAdaptively( this, ncoord_in, lbnd_in, ubnd_in, lo, hi,
- tol, maxpix, ncoord_out, out, status );
- }
- }
-
-/* Free the workspace. */
- lo = astFree( lo );
- hi = astFree( hi );
- }
- }
-
-/* If coefficients for a linear fit were obtained, then free the space
- they occupy. */
- if ( linear_fit ) linear_fit = astFree( linear_fit );
-}
-
-static void TranGridSection( AstMapping *this, const double *linear_fit,
- int ndim_in, const int *lbnd_in,
- const int *ubnd_in, const int *lbnd,
- const int *ubnd, int ndim_out, double *out[], int *status ){
-/*
-* Name:
-* TranGridSection
-
-* Purpose:
-* Transform grid points within a section of a rectangular grid.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void TranGridSection( AstMapping *this, const double *linear_fit,
-* int ndim_in, const int *lbnd_in,
-* const int *ubnd_in, const int *lbnd,
-* const int *ubnd, int ndim_out, double *out[] )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function transforms grid points within a specified section of a
-* rectangular grid (with any number of dimensions) using a specified
-* Mapping or, alternatively, a linear approximation fitted to the
-* Mapping's forward transformation.
-
-* Parameters:
-* this
-* Pointer to a Mapping, whose forward transformation may be
-* used to transform the coordinates of points in the input
-* grid.
-*
-* The number of input coordintes for the Mapping (Nin
-* attribute) should match the value of "ndim_in" (below), and
-* the number of output coordinates (Nout attribute) should
-* match the value of "ndim_out".
-* linear_fit
-* Pointer to an optional array of double which contains the
-* coefficients of a linear fit which approximates the above
-* Mapping's forward coordinate transformation. If this is
-* supplied, it will be used in preference to the above Mapping
-* when transforming coordinates. This may be used to enhance
-* performance in cases where evaluation of the Mapping's
-* forward transformation is expensive. If no linear fit is
-* available, a NULL pointer should be supplied.
-*
-* The way in which the fit coefficients are stored in this
-* array and the number of array elements are as defined by the
-* astLinearApprox function.
-* ndim_in
-* The number of dimensions in the input grid. This should be at
-* least one.
-* lbnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the first
-* pixel in the input data grid along each dimension.
-* ubnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the last
-* pixel in the input data grid along each dimension.
-*
-* Note that "lbnd_in" and "ubnd_in" together define the shape
-* and size of the input data grid, its extent along a
-* particular (i'th) dimension being (ubnd_in[i] - lbnd_in[i] +
-* 1). They also define the input grid's coordinate system, with
-* each pixel being of unit extent along each dimension with
-* integral coordinate values at its centre.
-* lbnd
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the first pixel in the
-* section of the input data grid which is to be rebinned.
-* ubnd
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the last pixel in the
-* section of the input data grid which is to be rebinned.
-*
-* Note that "lbnd" and "ubnd" define the shape and position of
-* the section of the input grid which is to be rebinned. This section
-* should lie wholly within the extent of the input grid (as defined
-* by the "lbnd_out" and "ubnd_out" arrays). Regions of the input
-* grid lying outside this section will be ignored.
-* ndim_out
-* The number of dimensions in the output grid. This should be
-* at least one.
-* out
-* Pointer to an array with "ndim_out" elements. Element [i] of
-* this array is a pointer to an array in which to store the
-* transformed values for output axis "i". The points are ordered
-* such that the first axis of the input grid changes most rapidly.
-* For example, if the input grid is 2-dimensional and extends from
-* (2,-1) to (3,1), the output points will be stored in the order
-* (2,-1), (3, -1), (2,0), (3,0), (2,1), (3,1).
-
-* Notes:
-* - This function does not take steps to limit memory usage if the
-* grids supplied are large. To resample large grids in a more
-* memory-efficient way, the ResampleWithBlocking function should
-* be used.
-*/
-
-/* Local Variables: */
- AstPointSet *pset_in; /* Input PointSet for transformation */
- AstPointSet *pset_out; /* Output PointSet for transformation */
- const double *grad; /* Pointer to gradient matrix of linear fit */
- const double *zero; /* Pointer to zero point array of fit */
- double **ptr_in; /* Pointer to input PointSet coordinates */
- double **ptr_out; /* Pointer to output PointSet coordinates */
- double *accum; /* Pointer to array of accumulated sums */
- double x1; /* Interim x coordinate value */
- double xx1; /* Initial x coordinate value */
- double y1; /* Interim y coordinate value */
- double yy1; /* Initial y coordinate value */
- int *dim; /* Pointer to array of output pixel indices */
- int *offset; /* Pointer to array of output pixel offsets */
- int *stride; /* Pointer to array of output grid strides */
- int coord_in; /* Loop counter for input dimensions */
- int coord_out; /* Loop counter for output dimensions */
- int done; /* All pixel indices done? */
- int i1; /* Interim offset into "accum" array */
- int i2; /* Final offset into "accum" array */
- int idim; /* Loop counter for dimensions */
- int ix; /* Loop counter for output x coordinate */
- int iy; /* Loop counter for output y coordinate */
- int neighb; /* Number of neighbouring pixels */
- int npoint; /* Number of output points (pixels) */
- int off1; /* Interim pixel offset into output array */
- int off2; /* Interim pixel offset into output array */
- int off; /* Final pixel offset into output array */
- int point; /* Counter for output points (pixels ) */
- int s; /* Temporary variable for strides */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Further initialisation. */
- pset_in = NULL;
- ptr_in = NULL;
- ptr_out = NULL;
- pset_out = NULL;
- neighb = 0;
-
-/* Calculate the number of input points, as given by the product of
- the input grid dimensions. */
- for ( npoint = 1, coord_in = 0; coord_in < ndim_in; coord_in++ ) {
- npoint *= ubnd[ coord_in ] - lbnd[ coord_in ] + 1;
- }
-
-/* Allocate workspace. */
- offset = astMalloc( sizeof( int ) * (size_t) npoint );
- stride = astMalloc( sizeof( int ) * (size_t) ndim_in );
- if ( astOK ) {
-
-/* Calculate the stride for each input grid dimension. */
- off = 0;
- s = 1;
- for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
- stride[ coord_in ] = s;
- s *= ubnd_in[ coord_in ] - lbnd_in[ coord_in ] + 1;
- }
-
-/* A linear fit to the Mapping is available. */
-/* ========================================= */
- if ( linear_fit ) {
-
-/* If a linear fit to the Mapping has been provided, then obtain
- pointers to the array of gradients and zero-points comprising the
- fit. */
- grad = linear_fit + ndim_out;
- zero = linear_fit;
-
-/* Create a PointSet to hold the output grid coordinates and obtain an
- array of pointers to its coordinate data. */
- pset_out = astPointSet( npoint, ndim_out, "", status );
- ptr_out = astGetPoints( pset_out );
- if ( astOK ) {
-
-/* Initialise the count of input points. */
- point = 0;
-
-/* Handle the 1-dimensional case optimally. */
-/* ---------------------------------------- */
- if ( ( ndim_in == 1 ) && ( ndim_out == 1 ) ) {
-
-/* Loop through the pixels of the input grid and transform their x
- coordinates into the output grid's coordinate system using the
- linear fit supplied. Store the results in the PointSet created
- above. */
- off = lbnd[ 0 ] - lbnd_in[ 0 ];
- xx1 = zero[ 0 ] + grad[ 0 ] * (double) lbnd[ 0 ];
-
- for ( ix = lbnd[ 0 ]; ix <= ubnd[ 0 ]; ix++ ) {
- ptr_out[ 0 ][ point ] = xx1;
- xx1 += grad[ 0 ];
- offset[ point++ ] = off++;
- }
-
-/* Handle the 2-dimensional case optimally. */
-/* ---------------------------------------- */
- } else if ( ( ndim_in == 2 ) && ( ndim_out == 2 ) ) {
-
-/* Loop through the range of y coordinates in the input grid and
- calculate interim values of the output coordinates using the linear
- fit supplied. */
- x1 = zero[ 0 ] + grad[ 1 ] * (double) ( lbnd[ 1 ] - 1 );
- y1 = zero[ 1 ] + grad[ 3 ] * (double) ( lbnd[ 1 ] - 1 );
- off1 = stride[ 1 ] * ( lbnd[ 1 ] - lbnd_in[ 1 ] - 1 ) - lbnd_in[ 0 ];
- for ( iy = lbnd[ 1 ]; iy <= ubnd[ 1 ]; iy++ ) {
- x1 += grad[ 1 ];
- y1 += grad[ 3 ];
-
-/* Also calculate an interim pixel offset into the input array. */
- off1 += stride[ 1 ];
-
-/* Now loop through the range of input x coordinates and calculate
- the final values of the input coordinates, storing the results in
- the PointSet created above. */
- xx1 = x1 + grad[ 0 ] * (double) lbnd[ 0 ];
- yy1 = y1 + grad[ 2 ] * (double) lbnd[ 0 ];
- off = off1 + lbnd[ 0 ];
- for ( ix = lbnd[ 0 ]; ix <= ubnd[ 0 ]; ix++ ) {
- ptr_out[ 0 ][ point ] = xx1;
- xx1 += grad[ 0 ];
- ptr_out[ 1 ][ point ] = yy1;
- yy1 += grad[ 2 ];
-
-/* Also calculate final pixel offsets into the input array. */
- offset[ point++ ] = off++;
- }
- }
-
-/* Handle other numbers of dimensions. */
-/* ----------------------------------- */
- } else {
-
-/* Allocate workspace. */
- accum = astMalloc( sizeof( double ) *
- (size_t) ( ndim_in * ndim_out ) );
- dim = astMalloc( sizeof( int ) * (size_t) ndim_in );
- if ( astOK ) {
-
-/* Initialise an array of pixel indices for the input grid which refer to the
- first pixel which we will rebin. Also calculate the offset of this pixel
- within the input array. */
- off = 0;
- for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
- dim[ coord_in ] = lbnd[ coord_in ];
- off += stride[ coord_in ] *
- ( dim[ coord_in ] - lbnd_in[ coord_in ] );
- }
-
-/* To calculate each output grid coordinate we must perform a matrix
- multiply on the input grid coordinates (using the gradient matrix)
- and then add the zero points. However, since we will usually only
- be altering one input coordinate at a time (the least
- significant), we can avoid the full matrix multiply by accumulating
- partial sums for the most significant input coordinates and only
- altering those sums which need to change each time. The zero points
- never change, so we first fill the "most significant" end of the
- "accum" array with these. */
- for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
- accum[ ( coord_out + 1 ) * ndim_in - 1 ] =
- zero[ coord_out ];
- }
- coord_in = ndim_in - 1;
-
-/* Now loop to process each input pixel. */
- for ( done = 0; !done; point++ ) {
-
-/* To generate the output coordinate that corresponds to the current
- input pixel, we work down from the most significant dimension
- whose index has changed since the previous pixel we considered
- (given by "coord_in"). For each affected dimension, we accumulate
- in "accum" the matrix sum (including the zero point) for that
- dimension and all higher input dimensions. We must accumulate a
- separate set of sums for each output coordinate we wish to
- produce. (Note that for the first pixel we process, all dimensions
- are considered "changed", so we start by initialising the whole
- "accum" array.) */
- for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
- i1 = coord_out * ndim_in;
- for ( idim = coord_in; idim >= 1; idim-- ) {
- i2 = i1 + idim;
- accum[ i2 - 1 ] = accum[ i2 ] +
- dim[ idim ] * grad[ i2 ];
- }
-
-/* The output coordinate for each dimension is given by the accumulated
- sum for input dimension zero (giving the sum over all input
- dimensions). We do not store this in the "accum" array, but assign
- the result directly to the coordinate array of the PointSet created
- earlier. */
- ptr_out[ coord_out ][ point ] = accum[ i1 ] +
- dim[ 0 ] * grad[ i1 ];
- }
-
-/* Store the offset of the current pixel in the input array. */
- offset[ point ] = off;
-
-/* Now update the array of pixel indices to refer to the next input pixel. */
- coord_in = 0;
- do {
-
-/* The least significant index which currently has less than its maximum
- value is incremented by one. The offset into the input array is updated
- accordingly. */
- if ( dim[ coord_in ] < ubnd[ coord_in ] ) {
- dim[ coord_in ]++;
- off += stride[ coord_in ];
- break;
-
-/* Any less significant indices which have reached their maximum value
- are returned to their minimum value and the input pixel offset is
- decremented appropriately. */
- } else {
- dim[ coord_in ] = lbnd[ coord_in ];
- off -= stride[ coord_in ] *
- ( ubnd[ coord_in ] - lbnd[ coord_in ] );
-
-/* All the output pixels have been processed once the most significant
- pixel index has been returned to its minimum value. */
- done = ( ++coord_in == ndim_in );
- }
- } while ( !done );
- }
- }
-
-/* Free the workspace. */
- accum = astFree( accum );
- dim = astFree( dim );
- }
- }
-
-/* No linear fit to the Mapping is available. */
-/* ========================================== */
- } else {
-
-/* Create a PointSet to hold the coordinates of the input pixels and
- obtain a pointer to its coordinate data. */
- pset_in = astPointSet( npoint, ndim_in, "", status );
- ptr_in = astGetPoints( pset_in );
- if ( astOK ) {
-
-/* Initialise the count of input points. */
- point = 0;
-
-/* Handle the 1-dimensional case optimally. */
-/* ---------------------------------------- */
- if ( ndim_in == 1 && ndim_out == 1 ) {
-
-/* Loop through the required range of input x coordinates, assigning
- the coordinate values to the PointSet created above. Also store a
- pixel offset into the input array. */
- for ( ix = lbnd[ 0 ]; ix <= ubnd[ 0 ]; ix++ ) {
- ptr_in[ 0 ][ point ] = (double) ix;
- offset[ point++ ] = ix - lbnd_in[ 0 ];
- }
-
-/* Handle the 2-dimensional case optimally. */
-/* ---------------------------------------- */
- } else if ( ndim_in == 2 && ndim_out == 2 ) {
-
-/* Loop through the required range of input y coordinates,
- calculating an interim pixel offset into the input array. */
- off1 = stride[ 1 ] * ( lbnd[ 1 ] - lbnd_in[ 1 ] - 1 )
- - lbnd_in[ 0 ];
- for ( iy = lbnd[ 1 ]; iy <= ubnd[ 1 ]; iy++ ) {
- off1 += stride[ 1 ];
-
-/* Loop through the required range of input x coordinates, assigning
- the coordinate values to the PointSet created above. Also store a
- final pixel offset into the input array. */
- off2 = off1 + lbnd[ 0 ];
- for ( ix = lbnd[ 0 ]; ix <= ubnd[ 0 ]; ix++ ) {
- ptr_in[ 0 ][ point ] = (double) ix;
- ptr_in[ 1 ][ point ] = (double) iy;
- offset[ point++ ] = off2++;
- }
- }
-
-/* Handle other numbers of dimensions. */
-/* ----------------------------------- */
- } else {
-
-/* Allocate workspace. */
- dim = astMalloc( sizeof( int ) * (size_t) ndim_in );
- if ( astOK ) {
-
-/* Initialise an array of pixel indices for the input grid which
- refer to the first pixel to be rebinned. Also calculate the offset
- of this pixel within the input array. */
- off = 0;
- for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
- dim[ coord_in ] = lbnd[ coord_in ];
- off += stride[ coord_in ] *
- ( dim[ coord_in ] - lbnd_in[ coord_in ] );
- }
-
-/* Loop to generate the coordinates of each input pixel. */
- for ( done = 0; !done; point++ ) {
-
-/* Copy each pixel's coordinates into the PointSet created above. */
- for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
- ptr_in[ coord_in ][ point ] =
- (double) dim[ coord_in ];
- }
-
-/* Store the offset of the pixel in the input array. */
- offset[ point ] = off;
-
-/* Now update the array of pixel indices to refer to the next input
- pixel. */
- coord_in = 0;
- do {
-
-/* The least significant index which currently has less than its
- maximum value is incremented by one. The offset into the input
- array is updated accordingly. */
- if ( dim[ coord_in ] < ubnd[ coord_in ] ) {
- dim[ coord_in ]++;
- off += stride[ coord_in ];
- break;
-
-/* Any less significant indices which have reached their maximum value
- are returned to their minimum value and the input pixel offset is
- decremented appropriately. */
- } else {
- dim[ coord_in ] = lbnd[ coord_in ];
- off -= stride[ coord_in ] *
- ( ubnd[ coord_in ] - lbnd[ coord_in ] );
-
-/* All the input pixels have been processed once the most significant
- pixel index has been returned to its minimum value. */
- done = ( ++coord_in == ndim_in );
- }
- } while ( !done );
- }
- }
-
-/* Free the workspace. */
- dim = astFree( dim );
- }
-
-/* When all the input pixel coordinates have been generated, use the
- Mapping's forward transformation to generate the output coordinates
- from them. Obtain an array of pointers to the resulting coordinate
- data. */
- pset_out = astTransform( this, pset_in, 1, NULL );
- ptr_out = astGetPoints( pset_out );
- }
-
-/* Annul the PointSet containing the input coordinates. */
- pset_in = astAnnul( pset_in );
- }
- }
-
-/* Copy the output coordinates into the correct positions within the
- supplied "out" array. */
-/* ================================================================= */
- if( astOK ) {
- for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
- for ( point = 0; point < npoint; point++ ) {
- out[ coord_out ][ offset[ point ] ] = ptr_out[ coord_out ][ point ];
- }
- }
- }
-
-/* Annul the PointSet used to hold output coordinates. */
- pset_out = astAnnul( pset_out );
-
-/* Free the workspace. */
- offset = astFree( offset );
- stride = astFree( stride );
-}
-
-static void TranGridWithBlocking( AstMapping *this, const double *linear_fit,
- int ndim_in, const int *lbnd_in,
- const int *ubnd_in, const int *lbnd,
- const int *ubnd, int ndim_out,
- double *out[], int *status ){
-/*
-* Name:
-* TranGridWithBlocking
-
-* Purpose:
-* Transforms positions in a section of a grid in a memory-efficient way.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void TranGridWithBlocking( AstMapping *this, const double *linear_fit,
-* int ndim_in, const int *lbnd_in,
-* const int *ubnd_in, const int *lbnd,
-* const int *ubnd, int ndim_out,
-* double *out[], int *status )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function transforms positions within a specified section of a
-* rectangular grid (with any number of dimensions) using the forward
-* transformation of the supplied Mapping.
-*
-* This function is very similar to TranGridSection, except that in
-* order to limit memory usage and to ensure locality of reference,
-* it divides the input grid up into "blocks" which have a limited
-* extent along each input dimension. Each block, which will not
-* contain more than a pre-determined maximum number of pixels, is
-* then passed to TranGridSection for transformation.
-
-* Parameters:
-* this
-* Pointer to a Mapping, whose forward transformation may be
-* used to transform the coordinates of pixels in the input
-* grid into associated positions in the output grid.
-*
-* The number of input coordintes for the Mapping (Nin
-* attribute) should match the value of "ndim_in" (below), and
-* the number of output coordinates (Nout attribute) should
-* match the value of "ndim_out".
-* linear_fit
-* Pointer to an optional array of double which contains the
-* coefficients of a linear fit which approximates the above
-* Mapping's forward coordinate transformation. If this is
-* supplied, it will be used in preference to the above Mapping
-* when transforming coordinates. This may be used to enhance
-* performance in cases where evaluation of the Mapping's
-* forward transformation is expensive. If no linear fit is
-* available, a NULL pointer should be supplied.
-*
-* The way in which the fit coefficients are stored in this
-* array and the number of array elements are as defined by the
-* astLinearApprox function.
-* ndim_in
-* The number of dimensions in the input grid. This should be at
-* least one.
-* lbnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the first
-* pixel in the input grid along each dimension.
-* ubnd_in
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the centre of the last
-* pixel in the input grid along each dimension.
-*
-* Note that "lbnd_in" and "ubnd_in" together define the shape
-* and size of the whole input grid, its extent along a
-* particular (i'th) dimension being (ubnd_in[i] - lbnd_in[i] +
-* 1). They also define the input grid's coordinate system, with
-* each pixel being of unit extent along each dimension with
-* integral coordinate values at its centre.
-* lbnd
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the first pixel in the
-* section of the input data grid which is to be transformed.
-* ubnd
-* Pointer to an array of integers, with "ndim_in" elements.
-* This should give the coordinates of the last pixel in the
-* section of the input data grid which is to be transformed.
-*
-* Note that "lbnd" and "ubnd" define the shape and position of the
-* section of the input grid which is to be transformed.
-* ndim_out
-* The number of dimensions in the output grid. This should be
-* at least one.
-* out
-* Pointer to an array with "ndim_out" elements. Element [i] of
-* this array is a pointer to an array in which to store the
-* transformed values for output axis "i". The points are ordered
-* such that the first axis of the input grid changes most rapidly.
-* For example, if the input grid is 2-dimensional and extends from
-* (2,-1) to (3,1), the output points will be stored in the order
-* (2,-1), (3, -1), (2,0), (3,0), (2,1), (3,1).
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Constants: */
- const int mxpix = 2 * 1024; /* Maximum number of pixels in a block (this
- relatively small number seems to give best
- performance) */
-
-/* Local Variables: */
- int *dim_block; /* Pointer to array of block dimensions */
- int *lbnd_block; /* Pointer to block lower bound array */
- int *ubnd_block; /* Pointer to block upper bound array */
- int dim; /* Dimension size */
- int done; /* All blocks rebinned? */
- int hilim; /* Upper limit on maximum block dimension */
- int idim; /* Loop counter for dimensions */
- int lolim; /* Lower limit on maximum block dimension */
- int mxdim_block; /* Maximum block dimension */
- int npix; /* Number of pixels in block */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Allocate workspace. */
- lbnd_block = astMalloc( sizeof( int ) * (size_t) ndim_in );
- ubnd_block = astMalloc( sizeof( int ) * (size_t) ndim_in );
- dim_block = astMalloc( sizeof( int ) * (size_t) ndim_in );
- if ( astOK ) {
-
-/* Find the optimum block size. */
-/* ---------------------------- */
-/* We first need to find the maximum extent which a block of input
- pixels may have in each dimension. We determine this by taking the
- input grid extent in each dimension and then limiting the maximum
- dimension size until the resulting number of pixels is sufficiently
- small. This approach allows the block shape to approximate (or
- match) the input grid shape when appropriate. */
-
-/* First loop to calculate the total number of input pixels and the
- maximum input dimension size. */
- npix = 1;
- mxdim_block = 0;
- for ( idim = 0; idim < ndim_in; idim++ ) {
- dim = ubnd[ idim ] - lbnd[ idim ] + 1;
- npix *= dim;
- if ( mxdim_block < dim ) mxdim_block = dim;
- }
-
-/* If the number of input pixels is too large for a single block, we
- perform iterations to determine the optimum upper limit on a
- block's dimension size. Initialise the limits on this result. */
- if ( npix > mxpix ) {
- lolim = 1;
- hilim = mxdim_block;
-
-/* Loop to perform a binary chop, searching for the best result until
- the lower and upper limits on the result converge to adjacent
- values. */
- while ( ( hilim - lolim ) > 1 ) {
-
-/* Form a new estimate from the mid-point of the previous limits. */
- mxdim_block = ( hilim + lolim ) / 2;
-
-/* See how many pixels a block contains if its maximum dimension is
- limited to this new value. */
- for ( npix = 1, idim = 0; idim < ndim_in; idim++ ) {
- dim = ubnd[ idim ] - lbnd[ idim ] + 1;
- npix *= ( dim < mxdim_block ) ? dim : mxdim_block;
- }
-
-/* Update the appropriate limit, according to whether the number of
- pixels is too large or too small. */
- *( ( npix <= mxpix ) ? &lolim : &hilim ) = mxdim_block;
- }
-
-/* When iterations have converged, obtain the maximum limit on the
- dimension size of a block which results in no more than the maximum
- allowed number of pixels per block. However, ensure that all block
- dimensions are at least 2. */
- mxdim_block = lolim;
- }
- if ( mxdim_block < 2 ) mxdim_block = 2;
-
-/* Calculate the block dimensions by applying this limit to the output
- grid dimensions. */
- for ( idim = 0; idim < ndim_in; idim++ ) {
- dim = ubnd[ idim ] - lbnd[ idim ] + 1;
- dim_block[ idim ] = ( dim < mxdim_block ) ? dim : mxdim_block;
-
-/* Also initialise the lower and upper bounds of the first block of
- output grid pixels to be rebinned, ensuring that this does not
- extend outside the grid itself. */
- lbnd_block[ idim ] = lbnd[ idim ];
- ubnd_block[ idim ] = MinI( lbnd[ idim ] + dim_block[ idim ] - 1,
- ubnd[ idim ], status );
- }
-
-/* Transform each block of input grid positions. */
-/* --------------------------------------------- */
-/* Loop to generate the extent of each block of input grid positions and to
- transform them. */
- done = 0;
- while ( !done && astOK ) {
-
-/* Rebin the current block, accumulating the sum of bad pixels produced. */
- TranGridSection( this, linear_fit, ndim_in, lbnd_in, ubnd_in,
- lbnd_block, ubnd_block, ndim_out, out, status );
-
-/* Update the block extent to identify the next block of input pixels. */
- idim = 0;
- do {
-
-/* We find the least significant dimension where the upper bound of
- the block has not yet reached the upper bound of the region of the
- input grid which we are rebinning. The block's position is then
- incremented by one block extent along this dimension, checking that
- the resulting extent does not go outside the region being rebinned. */
- if ( ubnd_block[ idim ] < ubnd[ idim ] ) {
- lbnd_block[ idim ] = MinI( lbnd_block[ idim ] +
- dim_block[ idim ], ubnd[ idim ], status );
- ubnd_block[ idim ] = MinI( lbnd_block[ idim ] +
- dim_block[ idim ] - 1,
- ubnd[ idim ], status );
- break;
-
-/* If any less significant dimensions are found where the upper bound
- of the block has reached its maximum value, we reset the block to
- its lowest position. */
- } else {
- lbnd_block[ idim ] = lbnd[ idim ];
- ubnd_block[ idim ] = MinI( lbnd[ idim ] + dim_block[ idim ] - 1,
- ubnd[ idim ], status );
-
-/* All the blocks have been processed once the position along the most
- significant dimension has been reset. */
- done = ( ++idim == ndim_out );
- }
- } while ( !done );
- }
- }
-
-/* Free the workspace. */
- lbnd_block = astFree( lbnd_block );
- ubnd_block = astFree( ubnd_block );
- dim_block = astFree( dim_block );
-}
-
-static void TranN( AstMapping *this, int npoint,
- int ncoord_in, int indim, const double *in,
- int forward,
- int ncoord_out, int outdim, double *out, int *status ) {
-/*
-*++
-* Name:
-c astTranN
-f AST_TRANN
-
-* Purpose:
-* Transform N-dimensional coordinates.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "mapping.h"
-c void astTranN( AstMapping *this, int npoint,
-c int ncoord_in, int indim, const double *in,
-c int forward,
-c int ncoord_out, int outdim, double *out )
-f CALL AST_TRANN( THIS, NPOINT,
-f NCOORD_IN, INDIM, IN,
-f FORWARD, NCOORD_OUT, OUTDIM, OUT, STATUS )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-c This function applies a Mapping to transform the coordinates of
-f This routine applies a Mapping to transform the coordinates of
-* a set of points in an arbitrary number of dimensions. It is the
-* appropriate routine to use if the coordinates are not purely 1-
-* or 2-dimensional and are stored in a single array (which they
-* need not fill completely).
-c
-c If the coordinates are not stored in a single array, then the
-c astTranP function might be more suitable.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Mapping to be applied.
-c npoint
-f NPOINT = INTEGER (Given)
-* The number of points to be transformed.
-c ncoord_in
-f NCOORD_IN = INTEGER (Given)
-* The number of coordinates being supplied for each input point
-* (i.e. the number of dimensions of the space in which the
-* input points reside).
-c indim
-f INDIM = INTEGER (Given)
-c The number of elements along the second dimension of the "in"
-f The number of elements along the first dimension of the IN
-* array (which contains the input coordinates). This value is
-* required so that the coordinate values can be correctly
-* located if they do not entirely fill this array. The value
-c given should not be less than "npoint".
-f given should not be less than NPOINT.
-c in
-f IN( INDIM, NCOORD_IN ) = DOUBLE PRECISION (Given)
-c The address of the first element in a 2-dimensional array of
-c shape "[ncoord_in][indim]",
-c containing the coordinates of the input (untransformed)
-c points. These should be stored such that the value of
-c coordinate number "coord" for input point number "point" is
-c found in element "in[coord][point]".
-f An array containing the coordinates of the input
-f (untransformed) points. These should be stored such that the
-f value of coordinate number COORD for input point number POINT
-f is found in element IN(POINT,COORD).
-c forward
-f FORWARD = LOGICAL (Given)
-c A non-zero value indicates that the Mapping's forward
-c coordinate transformation is to be applied, while a zero
-c value indicates that the inverse transformation should be
-c used.
-f A .TRUE. value indicates that the Mapping's forward
-f coordinate transformation is to be applied, while a .FALSE.
-f value indicates that the inverse transformation should be
-f used.
-c ncoord_out
-f NCOORD_OUT = INTEGER (Given)
-* The number of coordinates being generated by the Mapping for
-* each output point (i.e. the number of dimensions of the
-* space in which the output points reside). This need not be
-c the same as "ncoord_in".
-f the same as NCOORD_IN.
-c outdim
-f OUTDIM = INTEGER (Given)
-c The number of elements along the second dimension of the "out"
-f The number of elements along the first dimension of the OUT
-* array (which will contain the output coordinates). This value
-* is required so that the coordinate values can be correctly
-* located if they will not entirely fill this array. The value
-c given should not be less than "npoint".
-f given should not be less than NPOINT.
-c out
-f OUT( OUTDIM, NCOORD_OUT ) = DOUBLE PRECISION (Returned)
-c The address of the first element in a 2-dimensional array of
-c shape "[ncoord_out][outdim]", into
-c which the coordinates of the output (transformed) points will
-c be written. These will be stored such that the value of
-c coordinate number "coord" for output point number "point"
-c will be found in element "out[coord][point]".
-f An array into which the coordinates of the output
-f (transformed) points will be written. These will be stored
-f such that the value of coordinate number COORD for output
-f point number POINT will be found in element OUT(POINT,COORD).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-c - If the forward coordinate transformation is being applied, the
-c Mapping supplied must have the value of "ncoord_in" for its Nin
-c attribute and the value of "ncoord_out" for its Nout attribute. If
-c the inverse transformation is being applied, these values should
-c be reversed.
-f - If the forward coordinate transformation is being applied, the
-f Mapping supplied must have the value of NCOORD_IN for its Nin
-f attribute and the value of NCOORD_OUT for its Nout attribute. If
-f the inverse transformation is being applied, these values should
-f be reversed.
-*--
-*/
-
-/* Local Variables: */
- AstPointSet *in_points; /* Pointer to input PointSet */
- AstPointSet *out_points; /* Pointer to output PointSet */
- const double **in_ptr; /* Pointer to array of input data pointers */
- double **out_ptr; /* Pointer to array of output data pointers */
- int coord; /* Loop counter for coordinates */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Validate the mapping and numbers of points/coordinates. */
- ValidateMapping( this, forward, npoint, ncoord_in, ncoord_out, "astTranN", status );
-
-/* Also validate the input array dimension argument. */
- if ( astOK && ( indim < npoint ) ) {
- astError( AST__DIMIN, "astTranN(%s): The input array dimension value "
- "(%d) is invalid.", status, astGetClass( this ), indim );
- astError( AST__DIMIN, "This should not be less than the number of "
- "points being transformed (%d).", status, npoint );
- }
-
-/* Similarly, validate the output array dimension argument. */
- if ( astOK && ( outdim < npoint ) ) {
- astError( AST__DIMIN, "astTranN(%s): The output array dimension value "
- "(%d) is invalid.", status, astGetClass( this ), outdim );
- astError( AST__DIMIN, "This should not be less than the number of "
- "points being transformed (%d).", status, npoint );
- }
-
-/* Allocate memory to hold the arrays of input and output data
- pointers. */
- if ( astOK ) {
- in_ptr = (const double **) astMalloc( sizeof( const double * ) *
- (size_t) ncoord_in );
- out_ptr = astMalloc( sizeof( double * ) * (size_t) ncoord_out );
-
-
-#ifdef DEBUG
- { int i, ns;
- ns = ncoord_out*outdim;
- for( i = 0; i < ns; i++ ) out[ i ] = 0.0;
- }
-#endif
-
-
-/* Initialise the input data pointers to locate the coordinate data in
- the "in" array. */
- if ( astOK ) {
- for ( coord = 0; coord < ncoord_in; coord++ ) {
- in_ptr[ coord ] = in + coord * indim;
- }
-
-/* Similarly initialise the output data pointers to point into the
- "out" array. */
- for ( coord = 0; coord < ncoord_out; coord++ ) {
- out_ptr[ coord ] = out + coord * outdim;
- }
-
-/* Create PointSets to describe the input and output points. */
- in_points = astPointSet( npoint, ncoord_in, "", status );
- out_points = astPointSet( npoint, ncoord_out, "", status );
-
-/* Associate the data pointers with the PointSets (note we must
- explicitly remove the "const" qualifier from the input data here,
- although they will not be modified). */
- astSetPoints( in_points, (double **) in_ptr );
- astSetPoints( out_points, out_ptr );
-
-/* Apply the required transformation to the coordinates. */
- (void) astTransform( this, in_points, forward, out_points );
-
-/* If the Mapping's Report attribute is set, report the effect the
- Mapping has had on the coordinates. */
- if ( astGetReport( this ) ) astReportPoints( this, forward,
- in_points, out_points );
-
-/* Delete the two PointSets. */
- in_points = astDelete( in_points );
- out_points = astDelete( out_points );
- }
-
-/* Free the memory used for the data pointers. */
- in_ptr = (const double **) astFree( (void *) in_ptr );
- out_ptr = astFree( out_ptr );
- }
-}
-
-static void TranP( AstMapping *this, int npoint,
- int ncoord_in, const double *ptr_in[],
- int forward, int ncoord_out, double *ptr_out[], int *status ) {
-/*
-c++
-* Name:
-* astTranP
-
-* Purpose:
-* Transform N-dimensional coordinates held in separate arrays.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-* #include "mapping.h"
-* void astTranP( AstMapping *this, int npoint,
-* int ncoord_in, const double *ptr_in[],
-* int forward, int ncoord_out, double *ptr_out[] )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-* This function applies a Mapping to transform the coordinates of
-* a set of points in an arbitrary number of dimensions. It is the
-* appropriate routine to use if the coordinates are not purely 1-
-* or 2-dimensional and are stored in separate arrays, since each
-* coordinate array is located by supplying a separate pointer to
-* it.
-*
-* If the coordinates are stored in a single (2-dimensional) array,
-* then the astTranN function might be more suitable.
-
-* Parameters:
-* this
-* Pointer to the Mapping to be applied.
-* npoint
-* The number of points to be transformed.
-* ncoord_in
-* The number of coordinates being supplied for each input point
-* (i.e. the number of dimensions of the space in which the
-* input points reside).
-* ptr_in
-* An array of pointers to double, with "ncoord_in"
-* elements. Element "ptr_in[coord]" should point at the first
-* element of an array of double (with "npoint" elements) which
-* contain the values of coordinate number "coord" for each
-* input (untransformed) point. The value of coordinate number
-* "coord" for input point number "point" is therefore given by
-* "ptr_in[coord][point]" (assuming both indices are
-* zero-based).
-* forward
-* A non-zero value indicates that the Mapping's forward
-* coordinate transformation is to be applied, while a zero
-* value indicates that the inverse transformation should be
-* used.
-* ncoord_out
-* The number of coordinates being generated by the Mapping for
-* each output point (i.e. the number of dimensions of the space
-* in which the output points reside). This need not be the same
-* as "ncoord_in".
-* ptr_out
-* An array of pointers to double, with "ncoord_out"
-* elements. Element "ptr_out[coord]" should point at the first
-* element of an array of double (with "npoint" elements) into
-* which the values of coordinate number "coord" for each output
-* (transformed) point will be written. The value of coordinate
-* number "coord" for output point number "point" will therefore
-* be found in "ptr_out[coord][point]".
-
-* Notes:
-* - If the forward coordinate transformation is being applied, the
-* Mapping supplied must have the value of "ncoord_in" for its Nin
-* attribute and the value of "ncoord_out" for its Nout
-* attribute. If the inverse transformation is being applied, these
-* values should be reversed.
-* - This routine is not available in the Fortran 77 interface to
-* the AST library.
-c--
-*/
-
-/* Local Variables: */
- AstPointSet *in_points; /* Pointer to input PointSet */
- AstPointSet *out_points; /* Pointer to output PointSet */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Validate the Mapping and number of points/coordinates. */
- ValidateMapping( this, forward, npoint, ncoord_in, ncoord_out, "astTranP", status );
-
-/* Create PointSets to describe the input and output points. */
- if ( astOK ) {
- in_points = astPointSet( npoint, ncoord_in, "", status );
- out_points = astPointSet( npoint, ncoord_out, "", status );
-
-/* Associate the data pointers with the PointSets (note we must
- explicitly remove the "const" qualifier from the input data here,
- although they will not be modified). */
- astSetPoints( in_points, (double **) ptr_in );
- astSetPoints( out_points, ptr_out );
-
-/* Apply the required transformation to the coordinates. */
- (void) astTransform( this, in_points, forward, out_points );
-
-/* If the Mapping's Report attribute is set, report the effect the
- Mapping has had on the coordinates. */
- if ( astGetReport( this ) ) astReportPoints( this, forward,
- in_points, out_points );
-
-/* Delete the two PointSets. */
- in_points = astDelete( in_points );
- out_points = astDelete( out_points );
- }
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-*+
-* Name:
-* astTransform
-
-* Purpose:
-* Transform a set of points.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "mapping.h"
-* AstPointSet *astTransform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-* This function takes a Mapping and a set of points encapsulated
-* in a PointSet, and applies either the forward or inverse
-* coordinate transformation (if defined by the Mapping) to the
-* points.
-
-* Parameters:
-* this
-* Pointer to the Mapping. The nature of the coordinate
-* transformation will depend on the class of Mapping
-* supplied. Note that there is no constructor for the Mapping
-* class itself, so this object should be from a derived class.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate
-* transformation should be applied, while a zero value requests
-* the inverse transformation.
-* out
-* Pointer to a PointSet which will hold the transformed
-* (output) coordinate values. A NULL value may also be given,
-* in which case a new PointSet will be created by this
-* function.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - An error will result if the Mapping supplied does not define
-* the requested coordinate transformation (either forward or
-* inverse).
-* - The number of coordinate values per point in the input
-* PointSet must match the number of input coordinates for the
-* Mapping being applied (or number of output coordinates if the
-* inverse transformation is requested).
-* - If an output PointSet is supplied, it must have space for
-* sufficient number of points and coordinate values per point to
-* accommodate the result (e.g. the number of Mapping output
-* coordinates, or number of input coordinates if the inverse
-* transformation is requested). Any excess space will be ignored.
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstPointSet *result; /* Pointer to output PointSet */
- int def; /* Coordinate transformation defined? */
- int ncoord_in; /* Number of input PointSet coordinates */
- int ncoord_out; /* Number of coordinates in output PointSet */
- int nin; /* Number of input Mapping coordinates */
- int nout; /* Number of output Mapping coordinates */
- int npoint; /* Number of points to transform */
- int npoint_out; /* Number of points in output PointSet */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise. */
- result = NULL;
-
-/* Determine if a coordinate transformation is defined for the requested
- direction. */
- def = forward ? astGetTranForward( this ) : astGetTranInverse( this );
-
-/* Report an error if the transformation is not defined. */
- if ( astOK && !def ) {
- astError( AST__TRNND, "astTransform(%s): %s coordinate transformation "
- "is not defined by the %s supplied.", status, astGetClass( this ),
- forward ? "A forward" : "An inverse", astGetClass( this ) );
- }
-
-/* Obtain the effective number of input and output coordinate values for the
- transformation to be performed, taking account of the transformation
- direction required. Note we use Mapping methods to obtain these values, as
- this will take account of whether the Mapping has been inverted. */
- nin = forward ? astGetNin( this ) : astGetNout( this );
- nout = forward ? astGetNout( this ) : astGetNin( this );
-
-/* Obtain the number of input points to transform and the number of coordinate
- values per input point. */
- npoint = astGetNpoint( in );
- ncoord_in = astGetNcoord( in );
-
-/* If OK, check that the number of input coordinates matches the number
- required by the mapping. Report an error if these numbers do not match. */
- if ( astOK && ( ncoord_in != nin ) ) {
- astError( AST__NCPIN, "astTransform(%s): Bad number of coordinate "
- "values (%d) in input %s.", status, astGetClass( this ), ncoord_in,
- astGetClass( in ) );
- astError( AST__NCPIN, "The %s given requires %d coordinate value(s) for "
- "each input point.", status, astGetClass( this ), nin );
- }
-
-/* If still OK, and a non-NULL pointer has been given for the output PointSet,
- then obtain the number of points and number of coordinates per point for
- this PointSet. */
- if ( astOK && out ) {
- npoint_out = astGetNpoint( out );
- ncoord_out = astGetNcoord( out );
-
-/* Check that the dimensions of this PointSet are adequate to accommodate the
- output coordinate values and report an error if they are not. */
- if ( astOK ) {
- if ( npoint_out < npoint ) {
- astError( AST__NOPTS, "astTransform(%s): Too few points (%d) in "
- "output %s.", status, astGetClass( this ), npoint_out,
- astGetClass( out ) );
- astError( AST__NOPTS, "The %s needs space to hold %d transformed "
- "point(s).", status, astGetClass( this ), npoint );
- } else if ( ncoord_out < nout ) {
- astError( AST__NOCTS, "astTransform(%s): Too few coordinate "
- "values per point (%d) in output %s.", status,
- astGetClass( this ), ncoord_out, astGetClass( out ) );
- astError( AST__NOCTS, "The %s supplied needs space to store %d "
- "coordinate value(s) per transformed point.", status,
- astGetClass( this ), nout );
- }
- }
- }
-
-/* If all the validation stages are passed successfully, and a NULL output
- pointer was given, then create a new PointSet to encapsulate the output
- coordinate data. */
- if ( astOK ) {
- if ( !out ) {
- result = astPointSet( npoint, nout, "", status );
-
-/* Otherwise, use the PointSet supplied. */
- } else {
- result = out;
- }
- }
-
-/* Return a pointer to the output PointSet. Note that we do not actually
- transform (or even copy) the coordinates. This is left for derived classes
- to implement. */
- return result;
-}
-
-/*
-*++
-* Name:
-c astUinterp
-f AST_UINTERP
-
-* Purpose:
-* Perform sub-pixel interpolation on a grid of data.
-
-* Type:
-* Fictitious function.
-
-* Synopsis:
-c #include "mapping.h"
-c void astUinterp( int ndim_in, const int lbnd_in[], const int ubnd_in[],
-c const <Xtype> in[], const <Xtype> in_var[],
-c int npoint, const int offset[],
-c const double *const coords[], const double params[],
-c int flags, <Xtype> badval,
-c <Xtype> out[], <Xtype> out_var[], int *nbad )
-f CALL AST_UINTERP( NDIM_IN, LBND_IN, UBND_IN, IN, IN_VAR,
-f NPOINT, OFFSET, COORDS, PARAMS, FLAGS, BADVAL,
-f OUT, OUT_VAR, NBAD, STATUS )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-c This is a fictitious function which does not actually
-c exist. Instead, this description constitutes a template so that
-c you may implement a function with this interface for yourself
-c (and give it any name you wish). A pointer to such a function
-c may be passed via the "finterp" parameter of the astResample<X>
-c functions (q.v.) in order to perform sub-pixel interpolation
-c during resampling of gridded data (you must also set the
-c "interp" parameter of astResample<X> to the value
-c AST__UINTERP). This allows you to use your own interpolation
-c algorithm in addition to those which are pre-defined.
-f This is a fictitious routine which does not actually
-f exist. Instead, this description constitutes a template so that
-f you may implement a routine with this interface for yourself
-f (and give it any name you wish). Such a routine
-f may be passed via the FINTERP argument of the AST_RESAMPLE<X>
-f functions (q.v.) in order to perform sub-pixel interpolation
-f during resampling of gridded data (you must also set the
-f INTERP argument of AST_RESAMPLE<X> to the value
-f AST__UINTERP). This allows you to use your own interpolation
-f algorithm in addition to those which are pre-defined.
-*
-c The function interpolates an input grid of data (and,
-f The routine interpolates an input grid of data (and,
-* optionally, processes associated statistical variance estimates)
-* at a specified set of points.
-
-* Parameters:
-c ndim_in
-f NDIM_IN = INTEGER (Given)
-* The number of dimensions in the input grid. This will be at
-* least one.
-c lbnd_in
-f LBND_IN( NDIM_IN ) = INTEGER (Given)
-c Pointer to an array of integers, with "ndim_in" elements,
-f An array
-* containing the coordinates of the centre of the first pixel
-* in the input grid along each dimension.
-c ubnd_in
-f UBND_IN( NDIM_IN ) = INTEGER (Given)
-c Pointer to an array of integers, with "ndim_in" elements,
-f An array
-* containing the coordinates of the centre of the last pixel in
-* the input grid along each dimension.
-*
-c Note that "lbnd_in" and "ubnd_in" together define the shape,
-f Note that LBND_IN and UBND_IN together define the shape,
-* size and coordinate system of the input grid in the same
-c way as they do in astResample<X>.
-f way as they do in AST_RESAMPLE<X>.
-c in
-f IN( * ) = <Xtype> (Given)
-c Pointer to an array, with one element for each pixel in the
-f An array, with one element for each pixel in the
-* input grid, containing the input data. This will be the same
-c array as was passed to astResample<X> via the "in" parameter.
-f array as was passed to AST_RESAMPLE<X> via the IN argument.
-* The numerical type of this array should match that of the
-* data being processed.
-c in_var
-f IN_VAR( * ) = <Xtype> (Given)
-c Pointer to an optional second array with the same size and
-c type as the "in" array. If given, this will contain the set
-c of variance values associated with the input data and will be
-c the same array as was passed to astResample<X> via the
-c "in_var" parameter.
-f An optional second array with the same size and type as the
-f IN array. This will only be given if the AST__USEVAR flag is
-f set via the FLAGS argument (below). If given, it will contain
-f the set of variance values associated with the input data and
-f will be the same array as was passed to AST_RESAMPLE<X> via
-f the IN_VAR argument.
-*
-c If no variance values are being processed, this will be a
-c NULL pointer.
-f If the AST__USEVAR flag is not set, then no variance values
-f are being processed. In this case, this array of variance
-f values may be a dummy (e.g. one-element) array and should not
-f be used.
-c npoint
-f NPOINT = INTEGER (Given)
-* The number of points at which the input grid is to be
-* interpolated. This will be at least one.
-c offset
-f OFFSET( NPOINT ) = INTEGER (Given)
-c Pointer to an array of integers with "npoint" elements. For
-c each interpolation point, this will contain the zero-based
-c index in the "out" (and "out_var") array(s) at which the
-c interpolated value (and its variance, if required) should be
-c stored. For example, the interpolated value for point number
-c "point" should be stored in "out[offset[point]]" (assuming
-c the index "point" is zero-based).
-f For each interpolation point, this array will contain the
-f offset from the start of the OUT (and OUT_VAR) array(s) at
-f which the interpolated value (and its variance, if required)
-f should be stored. For example, the interpolated value for
-f point number POINT should be stored in OUT(1+OFFSET(POINT)).
-c coords
-f COORDS( NPOINT, NDIM_IN ) = DOUBLE PRECISION (Given)
-c An array of pointers to double, with "ndim_in"
-c elements. Element "coords[coord]" will point at the first
-c element of an array of double (with "npoint" elements) which
-c contains the values of coordinate number "coord" for each
-c interpolation point. The value of coordinate number "coord"
-c for interpolation point number "point" is therefore given by
-c "coords[coord][point]" (assuming both indices are
-c zero-based).
-f A 2-dimensional array containing the coordinates of the
-f points at which interpolation should be performed. These will
-f be stored so that coordinate number COORD for interpolation
-f point number POINT is found in element COORDS(POINT,COORD).
-*
-* If any interpolation point has any of its coordinates equal
-c to the value AST__BAD (as defined in the "ast.h" header
-f to the value AST__BAD (as defined in the AST_PAR include
-* file), then the corresponding output data (and variance)
-c should either be set to the value given by "badval",
-f should either be set to the value given by BADVAL,
-* or left unchanged, depending on whether the AST__NOBAD flag is
-c specified by "flags".
-f specified by FLAGS.
-c params
-f PARAMS( * ) = DOUBLE PRECISION (Given)
-c This will be a pointer to the same array as was given via the
-c "params" parameter of astResample<X>. You may use this to
-f This will be the same array as was given via the
-f PARAMS argument of AST_RESAMPLE<X>. You may use this to
-* pass any additional parameter values required by your
-* interpolation algorithm.
-c flags
-f FLAGS = INTEGER (Given)
-c This will be the same value as was given via the "flags"
-c parameter of astResample<X>. You may test this value to
-f This will be the same value as was given via the FLAGS
-f argument of AST_RESAMPLE<X>. You may test this value to
-* provide additional control over the operation of your
-* resampling algorithm. Note that the special flag values
-* AST__URESAMP1, 2, 3 & 4 are reserved for you to use for your
-* own purposes and will not clash with other pre-defined flag
-c values (see astResample<X>).
-f values (see AST_RESAMPLE<X>).
-c badval
-f BADVAL = <Xtype> (Given)
-c This will be the same value as was given via the "badval"
-c parameter of astResample<X>, and will have the same numerical
-c type as the data being processed (i.e. as elements of the
-c "in" array). It should be used to test for bad pixels in the
-c input grid (but only if the AST__USEBAD flag is set via the
-c "flags" parameter) and (unless the AST__NOBAD flag is set in
-c "flags") for identifying bad output values in
-c the "out" (and "out_var") array(s).
-f This will be the same value as was given for the BADVAL
-f argument of AST_RESAMPLE<X>, and will have the same numerical
-f type as the data being processed (i.e. as elements of the IN
-f array). It should be used to test for bad pixels in the
-f input grid (but only if the AST__USEBAD flag is set via the
-f FLAGS argument) and (unless the AST__NOBAD flag is set in
-f FLAGS) for identifying bad output values in the OUT (and
-f OUT_VAR) array(s).
-c out
-f OUT( * ) = <Xtype> (Returned)
-c Pointer to an array with the same numerical type as the "in"
-f An array with the same numerical type as the IN
-* array, into which the interpolated data values should be
-* returned. Note that details of the storage order and number
-* of dimensions of this array are not required, since the
-c "offset" array contains all necessary information about where
-f OFFSET array contains all necessary information about where
-* each returned value should be stored.
-*
-c In general, not all elements of this array (or the "out_var"
-f In general, not all elements of this array (or the OUT_VAR
-* array below) may be used in any particular invocation of the
-c function. Those which are not used should be returned
-f routine. Those which are not used should be returned
-* unchanged.
-c out_var
-f OUT_VAR( * ) = <Xtype> (Returned)
-c Pointer to an optional array with the same type and size as
-c the "out" array, into which variance estimates for the
-c resampled values should be returned. This array will only be
-c given if the "in_var" array has also been given.
-f An optional array with the same type and size as the OUT
-f array, into which variance estimates for the resampled values
-f should be returned. This array will only be given if the
-f AST__USEVAR flag is set via the FLAGS argument.
-*
-c If given, it is addressed in exactly the same way (via the
-c "offset" array) as the "out" array. The values returned
-c should be estimates of the statistical variance of the
-c corresponding values in the "out" array, on the assumption
-c that all errors in input data values are statistically
-c independent and that their variance estimates may simply be
-c summed (with appropriate weighting factors).
-f If given, it is addressed in exactly the same way (via the
-f OFFSET array) as the OUT array. The values returned should be
-f estimates of the statistical variance of the corresponding
-f values in the OUT array, on the assumption that all errors in
-f input data values are statistically independent and that
-f their variance estimates may simply be summed (with
-f appropriate weighting factors).
-*
-c If no output variance estimates are required, a NULL pointer
-c will be given.
-f If the AST__USEVAR flag is not set, then variance values are
-f not being processed. In this case, this array may be a dummy
-f (e.g. one-element) array and should not be used.
-c nbad
-f NBAD = INTEGER (Returned)
-c Pointer to an int in which to return the number of interpolation
-c points at
-f This should return the number of interpolation points at
-* which no valid interpolated value could be obtained. The maximum
-c value that should be returned is "npoint", and the minimum is
-f value that should be returned is NPOINT, and the minimum is
-* zero (indicating that all output values were successfully
-* obtained).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - The data type <Xtype> indicates the numerical type of the data
-c being processed, as for astResample<X>.
-f being processed, as for AST_RESAMPLE<X>.
-c - This function will typically be invoked more than once for each
-c invocation of astResample<X>.
-f - This routine will typically be invoked more than once for each
-f invocation of AST_RESAMPLE<X>.
-c - If an error occurs within this function, it should use
-c astSetStatus to set the AST error status to an error value.
-c This will cause an immediate return from astResample<X>. The error
-c value AST__UINER is available for this purpose, but other values may
-c also be used (e.g. if you wish to distinguish different types of
-c error).
-f - If an error occurs within this routine, it should set the
-f STATUS argument to an error value before returning. This will
-f cause an immediate return from AST_RESAMPLE<X>. The error value
-f AST__UINER is available for this purpose, but other values may also
-f be used (e.g. if you wish to distinguish different types of error).
-f The AST__UINER error value is defined in the AST_ERR include file.
-*--
-*/
-/* Note the above is just a description to act as a template. The
- function does not actually exist. */
-
-/*
-*++
-* Name:
-c astUkern1
-f AST_UKERN1
-
-* Purpose:
-* 1-dimensional sub-pixel interpolation kernel.
-
-* Type:
-* Fictitious function.
-
-* Synopsis:
-c #include "mapping.h"
-c void astUkern1( double offset, const double params[], int flags,
-c double *value )
-f CALL AST_UKERN1( OFFSET, PARAMS, FLAGS, VALUE, STATUS )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-c This is a fictitious function which does not actually
-c exist. Instead, this description constitutes a template so that
-c you may implement a function with this interface for yourself
-c (and give it any name you wish). A pointer to such a function
-c may be passed via the "finterp" parameter of the astResample<X>
-c functions (q.v.) in order to supply a 1-dimensional
-c interpolation kernel to the algorithm which performs sub-pixel
-c interpolation during resampling of gridded data (you must also
-c set the "interp" parameter of astResample<X> to the value
-c AST__UKERN1). This allows you to use your own interpolation
-c kernel in addition to those which are pre-defined.
-f This is a fictitious routine which does not actually
-f exist. Instead, this description constitutes a template so that
-f you may implement a routine with this interface for yourself
-f (and give it any name you wish). Such a routine
-f may be passed via the FINTERP argument of the AST_RESAMPLE<X>
-f functions (q.v.) in order to supply a 1-dimensional
-f interpolation kernel to the algorithm which performs sub-pixel
-f interpolation during resampling of gridded data (you must also
-f set the INTERP argument of AST_RESAMPLE<X> to the value
-f AST__UKERN1). This allows you to use your own interpolation
-f kernel in addition to those which are pre-defined.
-*
-c The function calculates the value of a 1-dimensional sub-pixel
-f The routine calculates the value of a 1-dimensional sub-pixel
-* interpolation kernel. This determines how the weight given to
-* neighbouring pixels in calculating an interpolated value depends
-* on the pixel's offset from the interpolation point. In more than
-* one dimension, the weight assigned to a pixel is formed by
-* evaluating this 1-dimensional kernel using the offset along each
-* dimension in turn. The product of the returned values is then
-* used as the pixel weight.
-
-* Parameters:
-c offset
-f OFFSET = DOUBLE PRECISION (Given)
-* This will be the offset of the pixel from the interpolation
-* point, measured in pixels. This value may be positive or
-* negative, but for most practical interpolation schemes its
-* sign should be ignored.
-c params
-f PARAMS( * ) = DOUBLE PRECISION (Given)
-c This will be a pointer to the same array as was given via the
-c "params" parameter of astResample<X>. You may use this to
-f This will be the same array as was given via the
-f PARAMS argument of AST_RESAMPLE<X>. You may use this to
-* pass any additional parameter values required by your kernel,
-c but note that "params[0]" will already have been used to specify
-f but note that PARAMS(1) will already have been used to specify
-* the number of neighbouring pixels which contribute to the
-* interpolated value.
-c flags
-f FLAGS = INTEGER (Given)
-c This will be the same value as was given via the "flags"
-c parameter of astResample<X>. You may test this value to
-f This will be the same value as was given via the FLAGS
-f argument of AST_RESAMPLE<X>. You may test this value to
-* provide additional control over the operation of your
-c function. Note that the special flag values AST__URESAMP1, 2,
-f routine. Note that the special flag values AST__URESAMP1, 2,
-* 3 & 4 are reserved for you to use for your own purposes and
-* will not clash with other pre-defined flag
-c values (see astResample<X>).
-f values (see AST_RESAMPLE<X>).
-c value
-f VALUE = DOUBLE PRECISION (Returned)
-c Pointer to a double to receive the calculated kernel value,
-f The calculated kernel value,
-* which may be positive or negative.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - Not all functions make good interpolation kernels. In general,
-* acceptable kernels tend to be symmetrical about zero, to have a
-* positive peak (usually unity) at zero, and to evaluate to zero
-* whenever the pixel offset has any other integral value (this
-* ensures that the interpolated values pass through the original
-* data). An interpolation kernel may or may not have regions with
-* negative values. You should consult a good book on image
-* processing for more details.
-c - If an error occurs within this function, it should use
-c astSetStatus to set the AST error status to an error value.
-c This will cause an immediate return from astResample<X>. The error
-c value AST__UK1ER is available for this purpose, but other values may
-c also be used (e.g. if you wish to distinguish different types of
-c error).
-f - If an error occurs within this routine, it should set the
-f STATUS argument to an error value before returning. This will
-f cause an immediate return from AST_RESAMPLE<X>. The error value
-f AST__UK1ER is available for this purpose, but other values may also
-f be used (e.g. if you wish to distinguish different types of error).
-f The AST__UK1ER error value is defined in the AST_ERR include file.
-*--
-*/
-/* Note the above is just a description to act as a template. The
- function does not actually exist. */
-
-static double UphillSimplex( const MapData *mapdata, double acc, int maxcall,
- const double dx[], double xmax[], double *err,
- int *ncall, int *status ) {
-/*
-* Name:
-* UphillSimplex
-
-* Purpose:
-* Find a function maximum using a modification of the simplex method.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* double UphillSimplex( const MapData *mapdata, double acc, int maxcall,
-* const double dx[], double xmax[], double *err,
-* int *ncall, int *status );
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function applies a modification of the simplex method to
-* find a local maximum in the value returned by a Mapping
-* function. The modification used allows the method to cope with
-* coordinate constraints and (equivalently) regions where the
-* function returns "bad" values. The method is robust and not
-* susceptible to overflow, so is suitable for applying to Mapping
-* functions of unknown form.
-
-* Parameters:
-* mapdata
-* Pointer to a MapData structure which describes the Mapping
-* function, its coordinate constraints, etc.
-* acc
-* The accuracy required in the value of the maximum.
-* maxcall
-* The maximum number of Mapping function evaluations to use.
-* dx
-* Pointer to an array of double containing an offset along each
-* input coordinate for the Mapping function supplied. These
-* offsets will be used to construct the initial simplex
-* (i.e. they are the initial "step lengths" for each
-* coordinate) and may be positive or negative.
-* xmax
-* Pointer to an array of double which contains the coordinates
-* of an initial estimate of the location of the maximum. On
-* exit, this will be updated to contain the best estimate of
-* the location of the maximum as generated by this function.
-* err
-* Pointer to a double in which to return an estimate of the
-* error in the value of the maximum found. For normal
-* convergence, this should be no larger than "acc". However, if
-* the maximum number of Mapping function evaluations is
-* reached, the returned value may be larger than this, although
-* it should still be valid. In such cases, re-starting the
-* algorithm at the new location returned in "xmax" may be
-* advisable.
-* ncall
-* Pointer to an int in which the number of Mapping function
-* evaluations will be returned.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* An estimate of the Mapping function value at the local maximum.
-
-* Notes:
-* - The function may return before the requested accuracy has been
-* met and before all Mapping function evaluations have been
-* made. This signifies that an excessive number of function values
-* have been needed outside the coordinate constraints. This is
-* only likely if the function is unable to make progress near such
-* a constraint, in which case the algorithm should probably be
-* re-started.
-* - A value of AST__BAD will be returned if no maximum could be
-* found. This means that all the Mapping function evaluations
-* performed returned a value of AST__BAD.
-* - A value of AST__BAD will also be returned and no useful
-* information about a solution will be produced if this routine is
-* invoked with the global error status set, or if it should fail
-* for any reason.
-*/
-
-/* Local Constants: */
- const double factor = 3.0; /* Simplex contraction/expansion factor */
-
-/* Local Variables: */
- double *f; /* Pointer to array of function values */
- double *x; /* Pointer to array of vertex coordinates */
- double *xnew; /* Pointer to workspace array */
- double fnew; /* New function value */
- double fsave; /* Saved function value */
- double offset; /* Coordinate difference between vertices */
- double range; /* Range of simplex values */
- double result; /* Value to return */
- double tmp; /* Temporary store for coordinate */
- int coord; /* Loop counter for coordinates */
- int hi; /* Index of best vertex */
- int lo; /* Index of worst vertex */
- int ncalla; /* Number of function calls attempted */
- int ncoord; /* Number of function dimensions */
- int nextlo; /* Index of second worst vertex */
- int nvertex; /* Number of simplex vertices */
- int vertex; /* Loop counter for vertices */
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Further initialisation. */
- *err = DBL_MAX;
- *ncall = 0;
-
-/* Obtain the number of input coordinates for the Mapping function and
- calculate the number of simplex vertices. */
- ncoord = mapdata->nin;
- nvertex = ncoord + 1;
-
-/* Allocate workspace. */
- f = astMalloc( sizeof( double ) * (size_t) nvertex );
- x = astMalloc( sizeof( double ) * (size_t) ( ncoord * nvertex ) );
- xnew = astMalloc( sizeof( double ) * (size_t) ncoord );
- if ( astOK ) {
-
-/* Loop to set up an initial simplex. */
- for ( vertex = 0; vertex < nvertex; vertex++ ) {
- for ( coord = 0; coord < ncoord; coord++ ) {
- tmp = xmax[ coord ];
-
-/* Displace each point (except the first) the required amount along
- one of the axes to generate the coordinates of the simplex
- vertices. */
- if ( coord == ( vertex - 1 ) ) tmp += dx[ coord ];
- x[ vertex * ncoord + coord ] = tmp;
- }
-
-/* Evaluate the Mapping function at each vertex. */
- f[ vertex ] = MapFunction( mapdata, &x[ vertex * ncoord ], ncall, status );
- if ( f[ vertex ] == AST__BAD ) f[ vertex ] = -DBL_MAX;
- }
-
-/* Initialise the number of times we attempt to call the Mapping
- function (not necessarily the same as the number of times it was
- actually called, which is stored in *ncall). */
- ncalla = nvertex;
-
-/* Loop until convergence is reached or an error occurs. */
- while( astOK ) {
-
-/* Initialise the index of the lowest vertex of the simplex, the next
- lowest vertex and the highest vertex. */
- lo = ( f[ 0 ] < f[ 1 ] ) ? 0 : 1;
- nextlo = 1 - lo;
- hi = 0;
-
-/* Loop to inspect each vertex and update these values. Ensure that in
- the case of equal vertices, the first one is taken to be the
- highest. This makes the maximisation stable (so that if no better
- maximum can be found, the original position is returned rather than
- a nearby position that yields the same function value). */
- for ( vertex = 0; vertex < nvertex; vertex++ ) {
- if ( f[ vertex ] <= f[ lo ] ) {
- nextlo = lo;
- lo = vertex;
- } else if ( ( f[ vertex ] <= f[ nextlo ] ) && ( vertex != lo ) ) {
- nextlo = vertex;
- }
- if ( f[ vertex ] > f[ hi ] ) hi = vertex;
- }
-
-/* Estimate the error on the result as the difference between the
- highest and lowest simplex vertices. */
- if ( ( f[ hi ] == -DBL_MAX ) || ( f[ lo ] == -DBL_MAX ) ) {
- range = DBL_MAX;
- } else {
- range = f[ hi ] - f[ lo ];
- }
-
-/* Test for convergence. Ideally, the accuracy criterion should have
- been met. However, also quit if the maximum number of Mapping
- function evaluations has been reached, or the number of points at
- which function values have been requested reaches three times this
- limit (this latter number will typically be larger because points
- lying outside the coordinate constraints do not result in the
- Mapping function being evaluated). */
- if ( range <= fabs( acc ) ||
- ( *ncall >= maxcall ) || ( ncalla >= ( 3 * maxcall ) ) ) {
-
-/* If quitting, return the coordinates and function value at the best
- simplex vertex, and the error estimate. */
- for ( coord = 0; coord < ncoord; coord++ ) {
- xmax[ coord ] = x[ hi * ncoord + coord ];
- }
- result = ( f[ hi ] == -DBL_MAX ) ? AST__BAD : f[ hi ];
- *err = range;
- break;
- }
-
-/* If performing another iteration, first try reflecting the worst
- vertex through the opposite face of the simplex. Check for
- errors. */
- fnew = NewVertex( mapdata, lo, -1.0, x, f, ncall, xnew, status );
- ncalla++;
- if ( astOK ) {
-
-/* If this results in a point lying in a forbiddden region (either
- outside the coordinate constraints or where the Mapping function
- yields bad coordinate values), then we must make a departure from
- the standard simplex algorithm. This is because the inability to
- make forward progress in this case can cause the simplex to
- repeatedly contract about each face (except one) in turn. This
- mechanism normally results in lateral contraction as the simplex
- attempts to squeeze through a narrow gap which is impeding
- progress. However, in this case there is no gap to get through, so
- the lateral contraction can eventually make the simplex become
- degenerate (due to rounding). This prevents it from expanding
- laterally again and exploring the region adjacent to the constraint
- boundary once it has become small enough. */
- if ( fnew == AST__BAD ) {
-
-/* To overcome this, we instead contract the worst simplex vertex
- towards the best vertex (this has the cumulative effect of
- contracting the simplex without changing its shape). First find the
- offset in each coordinate between these two vertices. */
- for ( coord = 0; coord < ncoord; coord++ ) {
- offset = x[ lo * ncoord + coord ] - x[ hi * ncoord + coord ];
-
-/* Scale the offset to obtain the new coordinate. */
- x[ lo * ncoord + coord ] = x[ hi * ncoord + coord ] +
- offset / factor;
-
-/* If the distance between the two vertices has not decreased, we are
- in a region where rounding errors prevent them approaching each
- other any more closely, so simply set them equal. */
- if ( fabs( x[ lo * ncoord + coord ] -
- x[ hi * ncoord + coord ] ) >= fabs( offset ) ) {
- x[ lo * ncoord + coord ] = x[ hi * ncoord + coord ];
- }
- }
-
-/* Evaluate the Mapping function at the new vertex. */
- f[ lo ] = MapFunction( mapdata, &x[ lo * ncoord ], ncall, status );
- if ( f[ lo ] == AST__BAD ) f[ lo ] = -DBL_MAX;
- ncalla++;
-
-/* We now return to the standard simplex algorithm. If the new vertex
- is a new maximum, then see if more of the same is even better by
- trying to expand the best vertex away from the opposite face. */
- } else if ( fnew >= f[ hi ] ) {
- fnew = NewVertex( mapdata, lo, factor, x, f, ncall, xnew, status );
- ncalla++;
-
-/* Otherwise, if the new vertex was no improvement on the second
- worst, then try contracting the worst vertex towards the opposite
- face. */
- } else if ( fnew <= f[ nextlo ] ) {
- fsave = f[ lo ];
- fnew = NewVertex( mapdata, lo, 1.0 / factor, x, f, ncall, xnew, status );
- ncalla++;
-
-/* If this didn't result in any improvement, then contract the entire
- simplex towards the best vertex. Use the same approach as earlier
- to protect against rounding so that all the simplex vertices will
- eventually coalesce if this process is repeated enough times. */
- if ( astOK && ( fnew <= fsave ) ) {
- for ( vertex = 0; vertex < nvertex; vertex++ ) {
- if ( vertex != hi ) {
- for ( coord = 0; coord < ncoord; coord++ ) {
- offset = x[ vertex * ncoord + coord ] -
- x[ hi * ncoord + coord ];
- x[ vertex * ncoord + coord ] =
- x[ hi * ncoord + coord ] + offset / factor;
- if ( fabs( x[ vertex * ncoord + coord ] -
- x[ hi * ncoord + coord ] ) >=
- fabs( offset ) ) {
- x[ vertex * ncoord + coord ] =
- x[ hi * ncoord + coord ];
- }
- }
-
-/* Evaluate the Mapping function at each new vertex. */
- f[ vertex ] = MapFunction( mapdata,
- &x[ vertex * ncoord ],
- ncall, status );
- if ( f[ vertex ] == AST__BAD ) f[ vertex ] = -DBL_MAX;
- ncalla++;
- }
- }
- }
- }
- }
- }
- }
-
-/* Free workspace. */
- f = astFree( f );
- x = astFree( x );
- xnew = astFree( xnew );
-
-/* If an error occurred, clear the returned result. */
- if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
- return result;
-}
-
-static void ValidateMapping( AstMapping *this, int forward,
- int npoint, int ncoord_in, int ncoord_out,
- const char *method, int *status ) {
-/*
-* Name:
-* ValidateMapping
-
-* Purpose:
-* Validate a Mapping for use to transform coordinates.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void ValidateMapping( AstMapping *this, int forward,
-* int npoint, int ncoord_in, int ncoord_out,
-* const char *method, int *status )
-
-* Class Membership:
-* Mapping member function.
-
-* Description:
-* This function checks that a Mapping is suitable for transforming
-* a set of points. It also checks that the number of points and
-* the number of coordinate values per point is valid. If an error
-* is detected, the global error status is set and an error report
-* made. Otherwise, the function returns without further action.
-
-* Parameters:
-* this
-* Pointer to the Mapping.
-* forward
-* A non-zero value indicates that the forward coordinate
-* transformation is to be checked, while a zero value requests
-* the inverse transformation.
-* npoint
-* The number of points being transformed.
-* ncoord_in
-* The number of coordinates associated with each input point.
-* ncoord_out
-* The number of coordinates associated with each output point.
-* method
-* Pointer to a null terminated character string containing the
-* name of the method which invoked this function to validate a
-* Mapping. This is used solely for constructing error messages.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- int nin; /* Mapping Nin attribute value */
- int nout; /* Mapping Nout attribute value */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Report an error if the requested transformation is not defined. */
- if ( !( forward ? astGetTranForward( this ) : astGetTranInverse( this ) )
- && astOK ) {
- astError( AST__TRNND, "%s(%s): %s coordinate transformation "
- "is not defined by the %s supplied.", status, method,
- astGetClass( this ),
- ( forward ? "A forward" : "An inverse" ),
- astGetClass( this ) );
- }
-
-/* Obtain the effective values of the Nin and Nout attributes for the
- Mapping. */
- nin = forward ? astGetNin( this ) : astGetNout( this );
- nout = forward ? astGetNout( this ) : astGetNin( this );
-
-/* If OK, check that the number of input coordinates matches the
- number required by the Mapping. Report an error if these numbers do
- not match. */
- if ( astOK && ( ncoord_in != nin ) ) {
- astError( AST__NCPIN, "%s(%s): Bad number of input coordinate values "
- "(%d).", status, method, astGetClass( this ), ncoord_in );
- astError( AST__NCPIN, "The %s given requires %d coordinate value%s for "
- "each input point.", status, astGetClass( this ), nin,
- ( nin == 1 ) ? "" : "s" );
- }
-
-/* If OK, also check that the number of output coordinates matches the
- number required by the Mapping. Report an error if these numbers do
- not match. */
- if ( astOK && ( ncoord_out != nout ) ) {
- astError( AST__NCPIN, "%s(%s): Bad number of output coordinate values "
- "(%d).", status, method, astGetClass( this ), ncoord_out );
- astError( AST__NCPIN, "The %s given generates %s%d coordinate value%s "
- "for each output point.", status, astGetClass( this ),
- ( nout < ncoord_out ) ? "only " : "", nout,
- ( nout == 1 ) ? "" : "s" );
- }
-
-/* Check that the number of points being transformed is not negative
- and report an error if necessary. */
- if ( astOK && ( npoint < 0 ) ) {
- astError( AST__NPTIN, "%s(%s): Number of points to be transformed (%d) "
- "is invalid.", status, method, astGetClass( this ), npoint );
- }
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. */
-/*
-*att++
-* Name:
-* Invert
-
-* Purpose:
-* Mapping inversion flag.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute controls which one of a Mapping's two possible
-* coordinate transformations is considered the "forward"
-* transformation (the other being the "inverse"
-* transformation). If the attribute value is zero (the default),
-* the Mapping's behaviour will be the same as when it was first
-* created. However, if it is non-zero, its two transformations
-* will be inter-changed, so that the Mapping displays the inverse
-* of its original behaviour.
-*
-* Inverting the boolean sense of the Invert attribute will cause
-* the values of a Mapping's Nin and Nout attributes to be
-* interchanged. The values of its TranForward and TranInverse
-* attributes will also be interchanged. This operation may be
-c performed with the astInvert function.
-f performed with the AST_INVERT routine.
-
-* Applicability:
-* Mapping
-* All Mappings have this attribute.
-* UnitMap
-* The value of the Invert attribute has no effect on the
-* behaviour of a UnitMap.
-* FrameSet
-* Inverting the boolean sense of the Invert attribute for a
-* FrameSet will cause its base and current Frames (and its Base
-* and Current attributes) to be interchanged. This, in turn,
-* may affect other properties and attributes of the FrameSet
-* (such as Nin, Nout, Naxes, TranForward, TranInverse,
-* etc.). The Invert attribute of a FrameSet is not itself
-* affected by selecting a new base or current Frame.
-*att--
-*/
-/* This ia a boolean value (0 or 1) with a value of CHAR_MAX when
- undefined but yielding a default of zero. */
-astMAKE_CLEAR(Mapping,Invert,invert,CHAR_MAX)
-astMAKE_GET(Mapping,Invert,int,0,( ( this->invert == CHAR_MAX ) ?
- 0 : this->invert ))
-astMAKE_SET(Mapping,Invert,int,invert,( this->issimple=0,(value!=0) ))
-astMAKE_TEST(Mapping,Invert,( this->invert != CHAR_MAX ))
-
-/*
-*att++
-* Name:
-* IsLinear
-
-* Purpose:
-* Is the Mapping linear?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean), read-only.
-
-* Description:
-* This attribute indicates whether a Mapping is an instance of a
-* class that always represents a linear transformation. Note, some
-* Mapping classes can represent linear or non-linear transformations
-* (the MathMap class for instance). Such classes have a zero value for
-* the IsLinear attribute. Specific instances of such classes can be
-* tested for linearity using the
-* astLinearApprox function.
-* AST_LINEARAPPROX routine.
-
-* Applicability:
-* Mapping
-* All Mappings have this attribute.
-* CmpMap
-* The IsLinear value for a CmpMap is determined by the classes
-* of the encapsulated Mappings. For instance, a CmpMap that combines
-* a ZoomMap and a ShiftMap will have a non-zero value for its IsLinear
-* attribute, but a CmpMap that contains a MathMap will have a
-* value of zero for its IsLinear attribute.
-* Frame
-* The IsLinear value for a Frame is 1 (since a Frame is equivalent
-* to a UnitMap).
-* FrameSet
-* The IsLinear value for a FrameSet is obtained from the Mapping
-* from the base Frame to the current Frame.
-
-*att--
-*/
-
-/*
-*att++
-* Name:
-* IsSimple
-
-* Purpose:
-* Has the Mapping been simplified?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean), read-only.
-
-* Description:
-* This attribute indicates whether a Mapping has been simplified
-* by the
-c astSimplify
-f AST_SIMPLIFY
-* method. If the IsSimple value is non-zero, then the Mapping has
-* been simplified and so there is nothing to be gained by simplifying
-* it again. Indeed, the
-c astSimplify
-f AST_SIMPLIFY
-* method will immediately return the Mapping unchanged if the IsSimple
-* attribute indicates that the Mapping has already been simplified.
-
-* Applicability:
-* Mapping
-* All Mappings have this attribute.
-* Frame
-* All classes of Frame return zero for the IsSimple attribute.
-* This is because changes can be made to a Frame which affect the
-* Mapping represented by the Frame, and so there can be no
-* guarantee that the Mapping may not need re-simplifying. Most
-* non-Frame Mappings, on the other hand, are immutable and so when
-* they are simplified it is certain that they weill remain in a
-* simple state.
-
-*att--
-*/
-astMAKE_GET(Mapping,IsSimple,int,0,this->issimple)
-
-/*
-*att++
-* Name:
-* Nin
-
-* Purpose:
-* Number of input coordinates for a Mapping.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer, read-only.
-
-* Description:
-* This attribute gives the number of coordinate values required to
-* specify an input point for a Mapping (i.e. the number of
-* dimensions of the space in which the Mapping's input points
-* reside).
-
-* Applicability:
-* Mapping
-* All Mappings have this attribute.
-* CmpMap
-* If a CmpMap's component Mappings are joined in series, then
-* its Nin attribute is equal to the Nin attribute of the first
-* component (or to the Nout attribute of the second component
-* if the the CmpMap's Invert attribute is non-zero).
-*
-* If a CmpMap's component Mappings are joined in parallel, then
-* its Nin attribute is given by the sum of the Nin attributes
-* of each component (or to the sum of their Nout attributes if
-* the CmpMap's Invert attribute is non-zero).
-* Frame
-* The Nin attribute for a Frame is always equal to the number
-* of Frame axes (Naxes attribute).
-* FrameSet
-* The Nin attribute of a FrameSet is equal to the number of
-* axes (Naxes attribute) of its base Frame (as specified by the
-* FrameSet's Base attribute). The Nin attribute value may
-* therefore change if a new base Frame is selected.
-*att--
-*/
-
-/*
-*att++
-* Name:
-* Nout
-
-* Purpose:
-* Number of output coordinates for a Mapping.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer, read-only.
-
-* Description:
-* This attribute gives the number of coordinate values generated
-* by a Mapping to specify each output point (i.e. the number of
-* dimensions of the space in which the Mapping's output points
-* reside).
-
-* Applicability:
-* Mapping
-* All Mappings have this attribute.
-* CmpMap
-* If a CmpMap's component Mappings are joined in series, then
-* its Nout attribute is equal to the Nout attribute of the
-* second component (or to the Nin attribute of the first
-* component if the the CmpMap's Invert attribute is non-zero).
-*
-* If a CmpMap's component Mappings are joined in parallel, then
-* its Nout attribute is given by the sum of the Nout attributes
-* of each component (or to the sum of their Nin attributes if
-* the CmpMap's Invert attribute is non-zero).
-* Frame
-* The Nout attribute for a Frame is always equal to the number
-* of Frame axes (Naxes attribute).
-* FrameSet
-* The Nout attribute of a FrameSet is equal to the number of
-* FrameSet axes (Naxes attribute) which, in turn, is equal to
-* the Naxes attribute of the FrameSet's current Frame (as
-* specified by the Current attribute). The Nout attribute value
-* may therefore change if a new current Frame is selected.
-*att--
-*/
-
-/*
-*att++
-* Name:
-* Report
-
-* Purpose:
-* Report transformed coordinates?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute controls whether coordinate values are reported
-* whenever a Mapping is used to transform a set of points. If its
-* value is zero (the default), no report is made. However, if it
-* is non-zero, the coordinates of each point are reported (both
-* before and after transformation) by writing them to standard
-* output.
-*
-* This attribute is provided as an aid to debugging, and to avoid
-* having to report values explicitly in simple programs.
-
-* Applicability:
-* Mapping
-* All Mappings have this attribute.
-* CmpMap
-* When applied to a compound Mapping (CmpMap), only the Report
-* attribute of the CmpMap, and not those of its component
-* Mappings, is used. Coordinate information is never reported
-* for the component Mappings individually, only for the
-* complete CmpMap.
-* Frame
-* When applied to any Frame, the formatting capabilities of the
-c Frame (as provided by the astFormat function) will be used to
-f Frame (as provided by the AST_FORMAT function) will be used to
-* format the reported coordinates.
-* FrameSet
-* When applied to any FrameSet, the formatting capabilities of
-* the base and current Frames will be used (as above) to
-* individually format the input and output coordinates, as
-* appropriate. The Report attribute of a FrameSet is not itself
-* affected by selecting a new base or current Frame, but the
-* resulting formatting capabilities may be.
-
-* Notes:
-* - Unlike most other attributes, the value of the Report
-* attribute is not transferred when a Mapping is copied. Instead,
-* its value is undefined (and therefore defaults to zero) in any
-* copy. Similarly, it becomes undefined in any external
-c representation of a Mapping produced by the astWrite function.
-f representation of a Mapping produced by the AST_WRITE routine.
-*att--
-*/
-/* This ia a boolean value (0 or 1) with a value of CHAR_MAX when
- undefined but yielding a default of zero. */
-astMAKE_CLEAR(Mapping,Report,report,CHAR_MAX)
-astMAKE_GET(Mapping,Report,int,0,( ( this->report == CHAR_MAX ) ?
- 0 : this->report ))
-astMAKE_SET(Mapping,Report,int,report,( value != 0 ))
-astMAKE_TEST(Mapping,Report,( this->report != CHAR_MAX ))
-
-/*
-*att++
-* Name:
-* TranForward
-
-* Purpose:
-* Forward transformation defined?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean), read-only.
-
-* Description:
-* This attribute indicates whether a Mapping is able to transform
-* coordinates in the "forward" direction (i.e. converting input
-* coordinates into output coordinates). If this attribute is
-* non-zero, the forward transformation is available. Otherwise, it
-* is not.
-
-* Applicability:
-* Mapping
-* All Mappings have this attribute.
-* CmpMap
-* The TranForward attribute value for a CmpMap is given by the
-* boolean AND of the value for each component Mapping.
-* FrameSet
-* The TranForward attribute of a FrameSet applies to the
-* transformation which converts between the FrameSet's base
-* Frame and its current Frame (as specified by the Base and
-* Current attributes). This value is given by the boolean AND
-* of the TranForward values which apply to each of the
-* individual sub-Mappings required to perform this conversion.
-* The TranForward attribute value for a FrameSet may therefore
-* change if a new Base or Current Frame is selected.
-
-* Notes:
-* - An error will result if a Mapping with a TranForward value of
-* zero is used to transform coordinates in the forward direction.
-*att--
-*/
-
-/*
-*att++
-* Name:
-* TranInverse
-
-* Purpose:
-* Inverse transformation defined?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean), readonly.
-
-* Description:
-* This attribute indicates whether a Mapping is able to transform
-* coordinates in the "inverse" direction (i.e. converting output
-* coordinates back into input coordinates). If this attribute is
-* non-zero, the inverse transformation is available. Otherwise, it
-* is not.
-
-* Applicability:
-* Mapping
-* All Mappings have this attribute.
-* CmpMap
-* The TranInverse attribute value for a CmpMap is given by the
-* boolean AND of the value for each component Mapping.
-* FrameSet
-* The TranInverse attribute of a FrameSet applies to the
-* transformation which converts between the FrameSet's current
-* Frame and its base Frame (as specified by the Current and
-* Base attributes). This value is given by the boolean AND of
-* the TranInverse values which apply to each of the individual
-* sub-Mappings required to perform this conversion.
-* The TranInverse attribute value for a FrameSet may therefore
-* change if a new Base or Current Frame is selected.
-
-* Notes:
-* - An error will result if a Mapping with a TranInverse value of
-* zero is used to transform coordinates in the inverse direction.
-*att--
-*/
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for Mapping objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for Mapping objects.
-
-* Parameters:
-* objin
-* Pointer to the Mapping to be copied.
-* objout
-* Pointer to the Mapping being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This constructor exists simply to ensure that the "Report"
-* attribute is cleared in any copy made of a Mapping.
-*/
-
-/* Local Variables: */
- AstMapping *out; /* Pointer to output Mapping */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the output Mapping. */
- out = (AstMapping *) objout;
-
-/* Clear the output Report attribute. */
- out->report = CHAR_MAX;
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for Mapping objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for Mapping objects.
-
-* Parameters:
-* obj
-* Pointer to the Mapping to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This destructor does nothing and exists only to maintain a
-* one-to-one correspondence between destructors and copy
-* constructors.
-*/
-
-/* Return without action. */
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for Mapping objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the Mapping class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the Mapping whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstMapping *this; /* Pointer to the Mapping structure */
- int invert; /* Mapping inverted? */
- int ival; /* Integer value */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Mapping structure. */
- this = (AstMapping *) this_object;
-
-/* Write out values representing the instance variables for the
- Mapping class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* Determine if the Mapping is inverted. The output values
- (e.g. number of input and output coordinates) will refer to the
- Mapping ***before*** this inversion flag is applied, but we need it
- when using (e.g.) the astGetNin/astGetNout methods to determine
- which one will return the required value. */
- invert = astGetInvert( this );
-
-/* (NB. there is a subtle point here that dictates the extent to which
- this inversion flag can be used... All use of methods (such as
- astGetInvert, which might be over-ridden by derived classes) must
- be restricted to determining the values of "unset" output
- quantities only (below). This is because when re-loading the
- Mapping, the derived classes will not have been loaded at the point
- when these values are re-read - hence any value whose
- interpretation depends on these methods cannot be reliably
- recovered.) */
-
-/* Nin. */
-/* ---- */
-/* Use the instance variable directly to avoid the effect of the
- Invert attribute on the private member function. Treat zero as the
- default. */
- set = ( this->nin != 0 );
- ival = set ? this->nin : ( !invert ? astGetNin( this ) :
- astGetNout( this ) );
- astWriteInt( channel, "Nin", set, 0, ival,
- "Number of input coordinates" );
-
-/* Nout. */
-/* ----- */
-/* Use the instance variable directly. Treat zero as the default. */
- set = ( this->nout != this->nin );
- ival = set ? this->nout : ( !invert ? astGetNout( this ) :
- astGetNin( this ) );
- astWriteInt( channel, "Nout", set, 0, ival,
- "Number of output coordinates" );
-
-/* IsSimple. */
-/* --------- */
- ival = astGetIsSimple( this );
- astWriteInt( channel, "IsSimp", ival, 0, ival,
- ival ? "Mapping has been simplified" :
- "Mapping has not been simplified" );
-
-/* Invert. */
-/* ------- */
- set = TestInvert( this, status );
- ival = set ? GetInvert( this, status ) : astGetInvert( this );
- astWriteInt( channel, "Invert", set, 0, ival,
- ival ? "Mapping inverted" :
- "Mapping not inverted" );
-
-/* TranForward. */
-/* ------------ */
-/* Use the instance variable directly. Treat 1 as the default. */
- set = ( this->tran_forward == 0 );
- ival = set ? this->tran_forward : ( !invert ? astGetTranForward( this ) :
- astGetTranInverse( this ) );
- astWriteInt( channel, "Fwd", set, 0, ival,
- ival ? "Forward transformation defined" :
- "Forward transformation not defined" );
-
-/* TranInverse. */
-/* ------------ */
-/* Use the instance variable directly. Treat 1 as the default. */
- set = ( this->tran_inverse == 0 );
- ival = set ? this->tran_inverse : ( !invert ? astGetTranInverse( this ) :
- astGetTranForward( this ) );
- astWriteInt( channel, "Inv", set, 0, ival,
- ival ? "Inverse transformation defined" :
- "Inverse transformation not defined" );
-
-/* Report. */
-/* ------- */
- set = TestReport( this, status );
- ival = set ? GetReport( this, status ) : astGetReport( this );
- astWriteInt( channel, "Report", set, 0, ival,
- ival ? "Report coordinate transformations" :
- "Don't report coordinate transformations" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAMapping and astCheckMapping functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(Mapping,Object)
-astMAKE_CHECK(Mapping)
-
-AstMapping *astInitMapping_( void *mem, size_t size, int init,
- AstMappingVtab *vtab, const char *name,
- int nin, int nout,
- int tran_forward, int tran_inverse, int *status ) {
-/*
-*+
-* Name:
-* astInitMapping
-
-* Purpose:
-* Initialise a Mapping.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "mapping.h"
-* AstMapping *astInitMapping( void *mem, size_t size, int init,
-* AstMappingVtab *vtab, const char *name,
-* int nin, int nout,
-* int tran_forward, int tran_inverse )
-
-* Class Membership:
-* Mapping initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new Mapping object. It allocates memory (if necessary) to accommodate
-* the Mapping plus any additional data associated with the derived class.
-* It then initialises a Mapping structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a Mapping at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the Mapping is to be initialised.
-* This must be of sufficient size to accommodate the Mapping data
-* (sizeof(Mapping)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the Mapping (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the Mapping
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the Mapping's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new Mapping.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-* nin
-* The number of coordinate values per input point.
-* nout
-* The number of coordinate vales per output point.
-* tran_forward
-* A non-zero value indicates that the Mapping will be able to
-* transform coordinates in the forward direction. A zero value
-* indicates that it will not.
-* tran_inverse
-* A non-zero value indicates that the Mapping will be able to
-* transform coordinates in the inverse direction. A zero value
-* indicates that it will not.
-
-* Returned Value:
-* A pointer to the new Mapping.
-
-* Notes:
-* - The Mappings produced by this function implement all the basic methods
-* defined by the Mapping class. However, their astTransform method does not
-* actually perform any coordinate transformation (although it performs all
-* necessary argument validation and creates an output PointSet if
-* necessary, leaving its coordinate values undefined).
-* - This means that Mappings produced by this function are of limited use
-* on their own, but may easily be extended by a derived class simply by
-* over-riding the astTransform method to add the necessary coordinate
-* arithmetic.
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstMapping *new; /* Pointer to new Mapping */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitMappingVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Check the initialisation values for validity, reporting an error if
- necessary. */
- if ( nin < 0 ) {
- astError( AST__BADNI, "astInitMapping(%s): Bad number of input "
- "coordinates (%d).", status, name, nin );
- astError( AST__BADNI, "This number should be zero or more." , status);
- } else if ( nout < 0 ) {
- astError( AST__BADNO, "astInitMapping(%s): Bad number of output "
- "coordinates (%d).", status, name, nout );
- astError( AST__BADNI, "This number should be zero or more." , status);
- }
-
-/* Initialise an Object structure (the parent class) as the first component
- within the Mapping structure, allocating memory if necessary. */
- new = (AstMapping *) astInitObject( mem, size, 0,
- (AstObjectVtab *) vtab, name );
-
- if ( astOK ) {
-
-/* Initialise the Mapping data. */
-/* ---------------------------- */
-/* Store the numbers of input and output coordinates. */
- new->nin = nin;
- new->nout = nout;
-
-/* Store the flags indicating which coordinate transformations are
- defined (constrain these values to 0 or 1). */
- new->tran_forward = ( tran_forward != 0 );
- new->tran_inverse = ( tran_inverse != 0 );
-
-/* Initialise other attributes to their undefined values. */
- new->invert = CHAR_MAX;
- new->report = CHAR_MAX;
- new->issimple = 0;
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstMapping *astLoadMapping_( void *mem, size_t size,
- AstMappingVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadMapping
-
-* Purpose:
-* Load a Mapping.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "mapping.h"
-* AstMapping *astLoadMapping( void *mem, size_t size,
-* AstMappingVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* Mapping loader.
-
-* Description:
-* This function is provided to load a new Mapping using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* Mapping structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a Mapping at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the Mapping is to be
-* loaded. This must be of sufficient size to accommodate the
-* Mapping data (sizeof(Mapping)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the Mapping (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the Mapping structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstMapping) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new Mapping. If this is NULL, a pointer
-* to the (static) virtual function table for the Mapping class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "Mapping" is used instead.
-
-* Returned Value:
-* A pointer to the new Mapping.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMapping *new; /* Pointer to the new Mapping */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this Mapping. In this case the
- Mapping belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstMapping );
- vtab = &class_vtab;
- name = "Mapping";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitMappingVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built Mapping. */
- new = astLoadObject( mem, size, (AstObjectVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "Mapping" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* Nin. */
-/* ---- */
- new->nin = astReadInt( channel, "nin", 0 );
- if ( new->nin < 0 ) new->nin = 0;
-
-/* Nout. */
-/* ----- */
- new->nout = astReadInt( channel, "nout", new->nin );
- if ( new->nout < 0 ) new->nout = 0;
-
-/* Invert. */
-/* ------- */
- new->invert = astReadInt( channel, "invert", CHAR_MAX );
- if ( TestInvert( new, status ) ) SetInvert( new, new->invert, status );
-
-/* IsSimple. */
-/* --------- */
- new->issimple = astReadInt( channel, "issimp", 0 );
-
-/* TranForward. */
-/* ------------ */
- new->tran_forward = ( astReadInt( channel, "fwd", 1 ) != 0 );
-
-/* TranInverse. */
-/* ------------ */
- new->tran_inverse = ( astReadInt( channel, "inv", 1 ) != 0 );
-
-/* Report. */
-/* ------- */
- new->report = astReadInt( channel, "report", CHAR_MAX );
- if ( TestReport( new, status ) ) SetReport( new, new->report, status );
-
-/* If an error occurred, clean up by deleting the new Mapping. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new Mapping pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions
- defined by this class. Each simply checks the global error status
- and then locates and executes the appropriate member function,
- using the function pointer stored in the object's virtual function
- table (this pointer is located using the astMEMBER macro defined in
- "object.h").
-
- Note that the member function may not be the one defined here, as
- it may have been over-ridden by a derived class. However, it should
- still have the same interface. */
-
-void astDecompose_( AstMapping *this, AstMapping **map1, AstMapping **map2,
- int *series, int *invert1, int *invert2, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Mapping,Decompose))( this, map1, map2, series, invert1, invert2, status );
-}
-int astGetNin_( AstMapping *this, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Mapping,GetNin))( this, status );
-}
-int astGetNout_( AstMapping *this, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Mapping,GetNout))( this, status );
-}
-int astGetIsLinear_( AstMapping *this, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Mapping,GetIsLinear))( this, status );
-}
-int astGetTranForward_( AstMapping *this, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Mapping,GetTranForward))( this, status );
-}
-int astGetTranInverse_( AstMapping *this, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Mapping,GetTranInverse))( this, status );
-}
-void astInvert_( AstMapping *this, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Mapping,Invert))( this, status );
-}
-void astMapBox_( AstMapping *this,
- const double lbnd_in[], const double ubnd_in[], int forward,
- int coord_out, double *lbnd_out, double *ubnd_out,
- double xl[], double xu[], int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Mapping,MapBox))( this, lbnd_in, ubnd_in, forward,
- coord_out, lbnd_out, ubnd_out, xl, xu, status );
-}
-int astMapList_( AstMapping *this, int series, int invert, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Mapping,MapList))( this, series, invert,
- nmap, map_list, invert_list, status );
-}
-int *astMapSplit_( AstMapping *this, int nin, const int *in, AstMapping **map,
- int *status ){
- if( map ) *map = NULL;
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Mapping,MapSplit))( this, nin, in, map, status );
-}
-int astMapMerge_( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
- if ( !astOK ) return -1;
- return (**astMEMBER(this,Mapping,MapMerge))( this, where, series, nmap,
- map_list, invert_list, status );
-}
-void astReportPoints_( AstMapping *this, int forward,
- AstPointSet *in_points, AstPointSet *out_points, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Mapping,ReportPoints))( this, forward,
- in_points, out_points, status );
-}
-#define MAKE_RESAMPLE_(X,Xtype) \
-int astResample##X##_( AstMapping *this, int ndim_in, const int *lbnd_in, \
- const int *ubnd_in, const Xtype *in, \
- const Xtype *in_var, int interp, \
- void (* finterp)(), const double *params, \
- int flags, double tol, int maxpix, Xtype badval, \
- int ndim_out, \
- const int *lbnd_out, const int *ubnd_out, \
- const int *lbnd, const int *ubnd, Xtype *out, \
- Xtype *out_var, int *status ) { \
- if ( !astOK ) return 0; \
- return (**astMEMBER(this,Mapping,Resample##X))( this, ndim_in, lbnd_in, \
- ubnd_in, in, in_var, \
- interp, finterp, params, \
- flags, tol, maxpix, \
- badval, ndim_out, \
- lbnd_out, ubnd_out, \
- lbnd, ubnd, \
- out, out_var, status ); \
-}
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-MAKE_RESAMPLE_(LD,long double)
-#endif
-MAKE_RESAMPLE_(D,double)
-MAKE_RESAMPLE_(F,float)
-MAKE_RESAMPLE_(L,long int)
-MAKE_RESAMPLE_(UL,unsigned long int)
-MAKE_RESAMPLE_(I,int)
-MAKE_RESAMPLE_(UI,unsigned int)
-MAKE_RESAMPLE_(S,short int)
-MAKE_RESAMPLE_(US,unsigned short int)
-MAKE_RESAMPLE_(B,signed char)
-MAKE_RESAMPLE_(UB,unsigned char)
-#undef MAKE_RESAMPLE_
-
-#define MAKE_REBIN_(X,Xtype) \
-void astRebin##X##_( AstMapping *this, double wlim, int ndim_in, const int *lbnd_in, \
- const int *ubnd_in, const Xtype *in, \
- const Xtype *in_var, int interp, \
- const double *params, \
- int flags, double tol, int maxpix, Xtype badval, \
- int ndim_out, \
- const int *lbnd_out, const int *ubnd_out, \
- const int *lbnd, const int *ubnd, Xtype *out, \
- Xtype *out_var, int *status ) { \
- if ( !astOK ) return; \
- (**astMEMBER(this,Mapping,Rebin##X))( this, wlim, ndim_in, lbnd_in, \
- ubnd_in, in, in_var, \
- interp, params, \
- flags, tol, maxpix, \
- badval, ndim_out, \
- lbnd_out, ubnd_out, \
- lbnd, ubnd, \
- out, out_var, status ); \
-}
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-MAKE_REBIN_(LD,long double)
-#endif
-MAKE_REBIN_(D,double)
-MAKE_REBIN_(F,float)
-MAKE_REBIN_(I,int)
-#undef MAKE_REBIN_
-
-#define MAKE_REBINSEQ_(X,Xtype) \
-void astRebinSeq##X##_( AstMapping *this, double wlim, int ndim_in, const int *lbnd_in, \
- const int *ubnd_in, const Xtype *in, \
- const Xtype *in_var, int interp, \
- const double *params, \
- int flags, double tol, int maxpix, Xtype badval, \
- int ndim_out, \
- const int *lbnd_out, const int *ubnd_out, \
- const int *lbnd, const int *ubnd, Xtype *out, \
- Xtype *out_var, double *weights, int *nused, int *status ) { \
- if ( !astOK ) return; \
- (**astMEMBER(this,Mapping,RebinSeq##X))( this, wlim, ndim_in, lbnd_in, \
- ubnd_in, in, in_var, \
- interp, params, \
- flags, tol, maxpix, \
- badval, ndim_out, \
- lbnd_out, ubnd_out, \
- lbnd, ubnd, \
- out, out_var, weights, nused, status ); \
-}
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-MAKE_REBINSEQ_(LD,long double)
-#endif
-MAKE_REBINSEQ_(D,double)
-MAKE_REBINSEQ_(F,float)
-MAKE_REBINSEQ_(I,int)
-#undef MAKE_REBINSEQ_
-
-double astRate_( AstMapping *this, double *at, int ax1, int ax2, int *status ){
- astDECLARE_GLOBALS;
-
- if ( !astOK ) return AST__BAD;
-
- astGET_GLOBALS(this);
-
- if( ax1 < 0 || ax1 >= astGetNout( this ) ) {
- astError( AST__AXIIN, "astRate(%s): Invalid output index (%d) "
- "specified - should be in the range 1 to %d.", status,
- astGetClass( this ), ax1 + 1, astGetNout( this ) );
-
- } else if( ax2 < 0 || ax2 >= astGetNin( this ) ) {
- astError( AST__AXIIN, "astRate(%s): Invalid input index (%d) "
- "specified - should be in the range 1 to %d.", status,
- astGetClass( this ), ax2 + 1, astGetNin( this ) );
- }
-
- if( rate_disabled ) {
- return ( at[ ax2 ] != AST__BAD ) ? 1.0 : AST__BAD;
- } else {
- return (**astMEMBER(this,Mapping,Rate))( this, at, ax1, ax2, status );
- }
-}
-AstMapping *astRemoveRegions_( AstMapping *this, int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Mapping,RemoveRegions))( this, status );
-}
-AstMapping *astSimplify_( AstMapping *this, int *status ) {
- AstMapping *result;
- if ( !astOK ) return NULL;
- if( !astGetIsSimple( this ) ) { /* Only simplify if not already done */
- result = (**astMEMBER(this,Mapping,Simplify))( this, status );
- if( result ) result->issimple = 1;/* Indicate simplification has been done */
- } else {
- result = astClone( this );
- }
- return result;
-}
-AstPointSet *astTransform_( AstMapping *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Mapping,Transform))( this, in, forward, out, status );
-}
-void astTran1_( AstMapping *this, int npoint, const double xin[],
- int forward, double xout[], int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Mapping,Tran1))( this, npoint, xin, forward, xout, status );
-}
-void astTran2_( AstMapping *this,
- int npoint, const double xin[], const double yin[],
- int forward, double xout[], double yout[], int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Mapping,Tran2))( this, npoint, xin, yin,
- forward, xout, yout, status );
-}
-void astTranGrid_( AstMapping *this, int ncoord_in, const int lbnd[],
- const int ubnd[], double tol, int maxpix, int forward,
- int ncoord_out, int outdim, double *out, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Mapping,TranGrid))( this, ncoord_in, lbnd, ubnd, tol,
- maxpix, forward, ncoord_out, outdim,
- out, status );
-}
-void astTranN_( AstMapping *this, int npoint,
- int ncoord_in, int indim, const double *in,
- int forward, int ncoord_out, int outdim, double *out, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Mapping,TranN))( this, npoint,
- ncoord_in, indim, in,
- forward, ncoord_out, outdim, out, status );
-}
-void astTranP_( AstMapping *this, int npoint,
- int ncoord_in, const double *ptr_in[],
- int forward, int ncoord_out, double *ptr_out[], int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Mapping,TranP))( this, npoint,
- ncoord_in, ptr_in,
- forward, ncoord_out, ptr_out, status );
-}
-int astLinearApprox_( AstMapping *this, const double *lbnd,
- const double *ubnd, double tol, double *fit, int *status ){
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Mapping,LinearApprox))( this, lbnd, ubnd, tol, fit, status );
-}
-
-/* Public Interface Function Prototypes. */
-/* ------------------------------------- */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-void DecomposeId_( AstMapping *, AstMapping **, AstMapping **, int *, int *, int *, int * );
-void MapBoxId_( AstMapping *, const double [], const double [], int, int, double *, double *, double [], double [], int * );
-double astRateId_( AstMapping *, double *, int, int, int * );
-void astMapSplitId_( AstMapping *, int, const int *, int *, AstMapping **,
- int * );
-
-/* Special interface function implementations. */
-/* ------------------------------------------- */
-void astDecomposeId_( AstMapping *this, AstMapping **map1,
- AstMapping **map2, int *series, int *invert1,
- int *invert2, int *status ) {
-/*
-*++
-* Name:
-c astDecompose
-f AST_DECOMPOSE
-
-* Purpose:
-* Decompose a Mapping into two component Mappings.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "mapping.h"
-c void astDecompose( AstMapping *this, AstMapping **map1,
-c AstMapping **map2, int *series, int *invert1,
-c int *invert2 )
-f CALL AST_DECOMPOSE( THIS, MAP1, MAP2, SERIES, INVERT1, INVERT2, STATUS )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-c This function returns pointers to two Mappings which, when applied
-f This routine returns pointers to two Mappings which, when applied
-* either in series or parallel, are equivalent to the supplied Mapping.
-*
-* Since the Frame class inherits from the Mapping class, Frames can
-* be considered as special types of Mappings and so this method can
-* be used to decompose either CmpMaps or CmpFrames.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Mapping.
-c map1
-f MAP1 = INTEGER (Returned)
-c Address of a location to receive a pointer to first component
-f A pointer to first component
-* Mapping.
-c map2
-f MAP2 = INTEGER (Returned)
-c Address of a location to receive a pointer to second component
-f A pointer to second component
-* Mapping.
-c series
-f SERIES = LOGICAL (Returned)
-c Address of a location to receive a value indicating if the
-c component Mappings are applied in series or parallel. A non-zero
-c value means that the supplied Mapping is equivalent to applying map1
-c followed by map2 in series. A zero value means that the supplied
-c Mapping is equivalent to applying map1 to the lower numbered axes
-c and map2 to the higher numbered axes, in parallel.
-f Indicates if the
-f component Mappings are applied in series or parallel. A .TRUE.
-f value means that the supplied Mapping is equivalent to applying MAP1
-f followed by MAP2 in series. A zero value means that the supplied
-f Mapping is equivalent to applying MAP1 to the lower numbered axes
-f and MAP2 to the higher numbered axes, in parallel.
-c invert1
-f INVERT1 = INTEGER (Returned)
-c The value of the Invert attribute to be used with map1.
-f The value of the Invert attribute to be used with MAP1.
-c invert2
-f INVERT2 = INTEGER (Returned)
-c The value of the Invert attribute to be used with map2.
-f The value of the Invert attribute to be used with MAP2.
-
-* Applicability:
-* CmpMap
-c If the supplied Mapping is a CmpMap, then map1 and map2 will be
-f If the supplied Mapping is a CmpMap, then MAP1 and MAP2 will be
-* returned holding pointers to the component Mappings used to
-* create the CmpMap, either in series or parallel. Note, changing
-* the Invert attribute of either of the component Mappings using
-* the returned pointers will have no effect on the supplied CmpMap.
-* This is because the CmpMap remembers and uses the original settings
-* of the Invert attributes (that is, the values of the Invert
-* attributes when the CmpMap was first created). These are the
-c Invert values which are returned in invert1 and invert2.
-f Invert values which are returned in INVERT1 and INVERT2.
-* TranMap
-c If the supplied Mapping is a TranMap, then map1 and map2 will be
-f If the supplied Mapping is a TranMap, then MAP1 and MAP2 will be
-* returned holding pointers to the forward and inverse Mappings
-* represented by the TranMap (zero will be returned for
-c series).
-f SERIES).
-* Note, changing the Invert attribute of
-* either of the component Mappings using the returned pointers will
-* have no effect on the supplied TranMap. This is because the TranMap
-* remembers and uses the original settings of the Invert attributes
-* (that is, the values of the Invert attributes when the TranMap was
-* first created). These are the
-c Invert values which are returned in invert1 and invert2.
-f Invert values which are returned in INVERT1 and INVERT2.
-* Mapping
-c For any class of Mapping other than a CmpMap, map1 will be
-c returned holding a clone of the supplied Mapping pointer, and map2
-c will be returned holding a NULL pointer. Invert1 will be returned
-c holding the current value of the Invert attribute for the supplied
-c Mapping, and invert2 will be returned holding zero.
-f For any class of Mapping other than a CmpMap, MAP1 will be
-f returned holding a clone of the supplied Mapping pointer, and MAP2
-f will be returned holding AST__NULL. INVERT1 will be returned
-f holding the current value of the Invert attribute for the supplied
-f Mapping, and INVERT2 will be returned holding zero.
-* CmpFrame
-c If the supplied Mapping is a CmpFrame, then map1 and map2 will be
-f If the supplied Mapping is a CmpFrame, then MAP1 and MAP2 will be
-* returned holding pointers to the component Frames used to
-* create the CmpFrame. The component Frames are considered to be in
-* applied in parallel.
-* Frame
-c For any class of Frame other than a CmpFrame, map1 will be
-c returned holding a clone of the supplied Frame pointer, and map2
-c will be returned holding a NULL pointer.
-f For any class of Frame other than a CmpFrame, MAP1 will be
-f returned holding a clone of the supplied Frame pointer, and MAP2
-f will be returned holding AST__NULL.
-
-* Notes:
-* - The returned Invert values should be used in preference to the
-* current values of the Invert attribute in map1 and map2. This is
-* because the attributes may have changed value since the Mappings
-* were combined.
-* - Any changes made to the component Mappings using the returned
-* pointers will be reflected in the supplied Mapping.
-
-*--
-
-* Implementation Notes:
-* This function implements the public interface for the
-* astDecompose method. It is identical to astDecompose_ except for
-* the following:
-*
-* - ID values are returned via the "map1" and "map2" parameters
-* instead of true C pointers. This is required because this
-* conversion cannot be performed by the macro that invokes the
-* function.
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Invoke the normal astDecompose_ function to decompose the Mapping. */
- astDecompose( this, map1, map2, series, invert1, invert2 );
-
-/* If required, return ID values for the component Mappings. */
- if ( map1 ) *map1 = astMakeId( *map1 );
- if ( map2 ) *map2 = astMakeId( *map2 );
-
-}
-
-void astMapBoxId_( AstMapping *this,
- const double lbnd_in[], const double ubnd_in[],
- int forward, int coord_out,
- double *lbnd_out, double *ubnd_out,
- double xl[], double xu[], int *status ) {
-/*
-*++
-* Name:
-c astMapBox
-f AST_MAPBOX
-
-* Purpose:
-* Find a bounding box for a Mapping.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "mapping.h"
-c void astMapBox( AstMapping *this,
-c const double lbnd_in[], const double ubnd_in[],
-c int forward, int coord_out,
-c double *lbnd_out, double *ubnd_out,
-c double xl[], double xu[] );
-f CALL AST_MAPBOX( THIS, LBND_IN, UBND_IN, FORWARD, COORD_OUT,
-f LBND_OUT, UBND_OUT, XL, XU, STATUS )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-c This function allows you to find the "bounding box" which just
-c encloses another box after it has been transformed by a Mapping
-c (using either its forward or inverse transformation). A typical
-c use might be to calculate the size of an image after being
-c transformed by a Mapping.
-f This routine allows you to find the "bounding box" which just
-f encloses another box after it has been transformed by a Mapping
-f (using either its forward or inverse transformation). A typical
-f use might be to calculate the size of an image after being
-f transformed by a Mapping.
-*
-c The function works on one dimension at a time. When supplied
-c with the lower and upper bounds of a rectangular region (box) of
-c input coordinate space, it finds the lowest and highest values
-c taken by a nominated output coordinate within that
-c region. Optionally, it also returns the input coordinates where
-c these bounding values are attained. It should be used repeatedly
-c to obtain the extent of the bounding box in more than one
-c dimension.
-f The routine works on one dimension at a time. When supplied with
-f the lower and upper bounds of a rectangular region (box) of
-f input coordinate space, it finds the lowest and highest values
-f taken by a nominated output coordinate within that region. It
-f also returns the input coordinates where these bounding values
-f are attained. It should be used repeatedly to obtain the extent
-f of the bounding box in more than one dimension.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Mapping.
-c lbnd_in
-f LBND_IN( * ) = DOUBLE PRECISION (Given)
-c Pointer to an array of double, with one element for each
-c Mapping input coordinate. This should contain the lower bound
-c of the input box in each input dimension.
-f An array with one element for each Mapping input
-f coordinate. This should contain the lower bound of the input
-f box in each input dimension.
-c ubnd_in
-f UBND_IN( * ) = DOUBLE PRECISION (Given)
-c Pointer to an array of double, with one element for each
-c Mapping input coordinate. This should contain the upper bound
-c of the input box in each input dimension.
-f An array with one element for each Mapping input
-f coordinate. This should contain the upper bound of the input
-f box in each input dimension.
-*
-* Note that it is permissible for the upper bound to be less
-* than the corresponding lower bound, as the values will simply
-* be swapped before use.
-c forward
-f FORWARD = LOGICAL (Given)
-c If this value is non-zero, then the Mapping's forward
-c transformation will be used to transform the input
-c box. Otherwise, its inverse transformation will be used.
-f If this value is .TRUE., then the Mapping's forward
-f transformation will be used to transform the input
-f box. Otherwise, its inverse transformation will be used.
-*
-c (If the inverse transformation is selected, then references
-c to "input" and "output" coordinates in this description
-c should be transposed. For example, the size of the "lbnd_in"
-c and "ubnd_in" arrays should match the number of output
-c coordinates, as given by the Mapping's Nout
-c attribute. Similarly, the "coord_out" parameter, below,
-c should nominate one of the Mapping's input coordinates.)
-f (If the inverse transformation is selected, then references
-f to "input" and "output" coordinates in this description
-f should be transposed. For example, the size of the LBND_IN
-f and UBND_IN arrays should match the number of output
-f coordinates, as given by the Mapping's Nout attribute.
-f Similarly, the COORD_OUT argument, below, should nominate one
-f of the Mapping's input coordinates.)
-c coord_out
-f COORD_OUT = INTEGER (Given)
-* The index of the output coordinate for which the lower and
-* upper bounds are required. This value should be at least one,
-* and no larger than the number of Mapping output coordinates.
-c lbnd_out
-f LBND_OUT = DOUBLE PRECISION (Returned)
-c Pointer to a double in which to return the lowest value taken
-c by the nominated output coordinate within the specified
-c region of input coordinate space.
-f The lowest value taken by the nominated output coordinate
-f within the specified region of input coordinate space.
-c ubnd_out
-f UBND_OUT = DOUBLE PRECISION (Returned)
-c Pointer to a double in which to return the highest value
-c taken by the nominated output coordinate within the specified
-c region of input coordinate space.
-f The highest value taken by the nominated output coordinate
-f within the specified region of input coordinate space.
-c xl
-f XL( * ) = DOUBLE PRECISION (Returned)
-c An optional pointer to an array of double, with one element
-c for each Mapping input coordinate. If given, this array will
-c be filled with the coordinates of an input point (although
-c not necessarily a unique one) for which the nominated output
-c coordinate attains the lower bound value returned in
-c "*lbnd_out".
-c
-c If these coordinates are not required, a NULL pointer may be
-c supplied.
-f An array with one element for each Mapping input
-f coordinate. This will return the coordinates of an input
-f point (although not necessarily a unique one) for which the
-f nominated output coordinate attains the lower bound value
-f returned in LBND_OUT.
-c xu
-f XU( * ) = DOUBLE PRECISION (Returned)
-c An optional pointer to an array of double, with one element
-c for each Mapping input coordinate. If given, this array will
-c be filled with the coordinates of an input point (although
-c not necessarily a unique one) for which the nominated output
-c coordinate attains the upper bound value returned in
-c "*ubnd_out".
-c
-c If these coordinates are not required, a NULL pointer may be
-c supplied.
-f An array with one element for each Mapping input
-f coordinate. This will return the coordinates of an input
-f point (although not necessarily a unique one) for which the
-f nominated output coordinate attains the upper bound value
-f returned in UBND_OUT.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - Any input points which are transformed by the Mapping to give
-* output coordinates containing the value AST__BAD are regarded as
-* invalid and are ignored. They will make no contribution to
-* determining the output bounds, even although the nominated
-* output coordinate might still have a valid value at such points.
-c - An error will occur if the required output bounds cannot be
-c found. Typically, this might happen if all the input points
-c which the function considers turn out to be invalid (see
-c above). The number of points considered before generating such
-c an error is quite large, so this is unlikely to occur by
-c accident unless valid points are restricted to a very small
-c subset of the input coordinate space.
-f - An error will occur if the required output bounds cannot be
-f found. Typically, this might happen if all the input points
-f which the routine considers turn out to be invalid (see
-f above). The number of points considered before generating such
-f an error is quite large, so this is unlikely to occur by
-f accident unless valid points are restricted to a very small
-f subset of the input coordinate space.
-c - The values returned via "lbnd_out", "ubnd_out", "xl" and "xu"
-c will be set to the value AST__BAD if this function should fail
-c for any reason. Their initial values on entry will not be
-c altered if the function is invoked with the AST error status
-c set.
-f - The values returned via LBND_OUT, UBND_OUT, XL and XU will be
-f set to the value AST__BAD if this routine should fail for any
-f reason. Their initial values on entry will not be altered if the
-f routine is invoked with STATUS set to an error value.
-*--
-
-* Implementation Notes:
-* This function implements the public interface for the astMapBox
-* method. It is identical to astMapBox_ except that the nominated
-* output coordinate given in "coord_out" is decremented by one
-* before use. This is to allow the public interface to use
-* one-based coordinate numbering (internally, zero-based
-* coordinate numbering is used).
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Invoke the protected version of this function with the "coord_out"
- value decremented. */
- astMapBox( this, lbnd_in, ubnd_in, forward, coord_out - 1,
- lbnd_out, ubnd_out, xl, xu );
-}
-
-double astRateId_( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-*++
-* Name:
-c astRate
-f AST_RATE
-
-* Purpose:
-* Calculate the rate of change of a Mapping output.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "mapping.h"
-c double astRate( AstMapping *this, double *at, int ax1, int ax2 )
-f RESULT = AST_RATE( THIS, AT, AX1, AX2, STATUS )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-c This function
-f This routine
-* evaluates the rate of change of a specified output of the supplied
-* Mapping with respect to a specified input, at a specified input
-* position.
-*
-* The result is estimated by interpolating the function using a
-* fourth order polynomial in the neighbourhood of the specified
-* position. The size of the neighbourhood used is chosen to minimise
-* the RMS residual per unit length between the interpolating
-* polynomial and the supplied Mapping function. This method produces
-* good accuracy but can involve evaluating the Mapping 100 or more
-* times.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Mapping to be applied.
-c at
-f AT( * ) = DOUBLE PRECISION (Given)
-c The address of an
-f An
-* array holding the axis values at the position at which the rate
-* of change is to be evaluated. The number of elements in this
-* array should equal the number of inputs to the Mapping.
-c ax1
-f AX1 = INTEGER (Given)
-* The index of the Mapping output for which the rate of change is to
-* be found (output numbering starts at 1 for the first output).
-c ax2
-f AX2 = INTEGER (Given)
-* The index of the Mapping input which is to be varied in order to
-* find the rate of change (input numbering starts at 1 for the first
-* input).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astRate()
-f AST_RATE = DOUBLE PRECISION
-c The rate of change of Mapping output "ax1" with respect to input
-c "ax2", evaluated at "at", or AST__BAD if the value cannot be
-c calculated.
-f The rate of change of Mapping output AX1 with respect to input
-f AX2, evaluated at AT, or AST__BAD if the value cannot be
-f calculated.
-
-* Notes:
-* - A value of AST__BAD will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*--
-
-* Implementation Notes:
-* This function implements the public interface for the astRate
-* method. It is identical to astRate_ except that the nominated
-* coordinates given in "ax1" and "ax2" are decremented by one
-* before use. This is to allow the public interface to use
-* one-based coordinate numbering (internally, zero-based
-* coordinate numbering is used).
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return AST__BAD;
-
-/* Invoke the protected version of this function with the axis indices
- decremented. */
- return astRate( this, at, ax1 - 1, ax2 - 1 );
-}
-
-void astMapSplitId_( AstMapping *this, int nin, const int *in, int *out,
- AstMapping **map, int *status ){
-/*
-*++
-* Name:
-c astMapSplit
-f AST_MAPSPLIT
-
-* Purpose:
-* Split a Mapping up into parallel component Mappings.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "mapping.h"
-c void astMapSplit( AstMapping *this, int nin, const int *in, int *out,
-c AstMapping **map )
-f CALL AST_MAPSPLIT( THIS, NIN, IN, OUT, MAP, STATUS )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-c This function
-f This routine
-* creates a new Mapping which connects specified inputs within a
-* supplied Mapping to the corresponding outputs of the supplied Mapping.
-* This is only possible if the specified inputs correspond to some
-* subset of the Mapping outputs. That is, there must exist a subset of
-* the Mapping outputs for which each output depends only on the selected
-* Mapping inputs, and not on any of the inputs which have not been
-* selected. Also, any output which is not in this subset must not depend
-* on any of the selected inputs. If these conditions are not met by the
-* supplied Mapping, then
-c a NULL
-f an AST__NULL
-* Mapping pointer is returned.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Mapping to be split.
-c nin
-f NIN = INTEGER (Given)
-c The number of inputs to pick from "this".
-f The number of inputs to pick from THIS.
-c in
-f IN( NIN ) = INTEGER (Given)
-c Pointer to an
-f An
-* array holding the indices within the supplied Mapping of the inputs
-* which are to be picked from the Mapping.
-c This array should have "nin" elements.
-* If "Nin" is the number of inputs of the supplied Mapping, then each
-* element should have a value in the range 1 to Nin.
-c out
-f OUT( * ) = INTEGER (Returned)
-c Pointer to an
-f An
-* array in which to return the indices of the outputs of the supplied
-* Mapping which are fed by the picked inputs. A value of one is
-* used to refer to the first Mapping output. The supplied array should
-* have a length at least equal to the number of outputs in the
-* supplied Mapping. The number of values stored in the array on
-* exit will equal the number of outputs in the returned Mapping.
-* The i'th element in the returned array holds the index within
-* the supplied Mapping which corresponds to the i'th output of
-* the returned Mapping.
-c map
-f MAP = INTEGER (Returned)
-c Address of a location at which to return a pointer to the
-f The
-* returned Mapping. This Mapping will have
-c "nin" inputs (the number of outputs may be different to "nin"). NULL
-f NIN inputs (the number of outputs may be different to NIN). AST__NULL
-* is returned if the supplied Mapping has no subset of outputs which
-* depend only on the selected inputs.
-
-* Notes:
-* - If this
-c function
-f routine
-* is invoked with the global error status set, or if it should fail for
-* any reason, then
-c a NULL value
-f AST__NULL
-* will be returned for
-c the "map" pointer.
-f MAP.
-*--
-
-* Implementation Notes:
-* - This function implements the astMapSplit method available via the
-* public interface to the Mapping class and uses 1-based axis indices.
-* The protected interface method is provided by the astMapSplit function
-* and uses zero-based axis indices. Also, an ID value is returned for
-* "map" rather than a pointer.
-*/
-
-/* Local Variables: */
- int *in_zero; /* Pointer to array of zero-based input indices */
- int *result; /* Pointer to array of zero-based output indices*/
- int i; /* Axis index */
- int nout; /* No of outputs */
-
-/* Initialise */
- *map = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Decrement the axis indices by 1. */
- in_zero = astMalloc( sizeof( int )*(size_t) nin );
- if( in_zero ) {
- for( i = 0; i < nin; i++ ) in_zero[ i ] = in[ i ] - 1;
-
-/* Invoked the protected astMapSplit functon. */
- result = astMapSplit( this, nin, in_zero, map );
-
-/* If succesful, copy the output axes to the supplied array. */
- if( result ) {
- nout = astGetNout( *map );
- for( i = 0; i < nout; i++ ) out[ i ] = result[ i ] + 1;
-
-/* Free resurces. */
- result = astFree( result );
- }
- in_zero = astFree( in_zero );
- }
-
-/* Free the returned Mapping if an error has occurred. */
- if( !astOK ) *map = astAnnul( *map );
-
-/* Return an ID value for the Mapping. */
- *map = astMakeId( *map );
-}
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/mapping.h b/ast-5.3-1/mapping.h
deleted file mode 100644
index 985dd24..0000000
--- a/ast-5.3-1/mapping.h
+++ /dev/null
@@ -1,749 +0,0 @@
-#if !defined( MAPPING_INCLUDED ) /* Include this file only once */
-#define MAPPING_INCLUDED
-/*
-*++
-* Name:
-* mapping.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the Mapping class.
-
-* Invocation:
-* #include "mapping.h"
-
-* Description:
-* This include file defines the interface to the Mapping class and
-* provides the type definitions, function prototypes and macros, etc.
-* needed to use this class.
-*
-* The Mapping class provides basic facilities for transforming a
-* set of points to give a new set of points and for resampling
-* grids of data. However, it does not have a constructor
-* function. This is because the class only forms a template for
-* deriving new classes which themselves implement specific forms
-* of coordinate transformation. They do this by extending the
-* protected astTransform method provided by this class.
-
-* Inheritance:
-* The Mapping class inherits from the Object class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* Nin (integer)
-* A read-only attribute giving the number of input coordinate
-* values required per point by a Mapping (i.e. the number of
-* dimensions of the space in which input points reside).
-* Nout (integer)
-* A read-only attribute giving the number of output coordinate
-* values generated per point by a Mapping (i.e. the number of
-* dimensions of the space in which output points reside).
-* Invert (integer)
-* A boolean value (0 or 1) which controls which of a Mapping's
-* two possible coordinate transformations is considered the
-* "forward" transformation and which is the "inverse"
-* transformation. If this value is zero (the default), the
-* behaviour will be as defined when the Mapping was first
-* created. If it is non-zero, the transformations will be
-* inter-changed, so that the Mapping displays the inverse of
-* its original behaviour.
-*
-* Note that inverting the boolean sense of the Invert attribute
-* will cause the values of the Nin/Nout and
-* TranForward/TranInverse attributes to be interchanged.
-* Report (integer)
-* A boolean value (0 or 1) which controls whether to report
-* coordinate values when a Mapping is used to transform a set
-* of points. If this value is zero (the default), no report is
-* made. If it is non-zero, the coordinates of each point
-* (before and after transformation) are reported by writing
-* them to standard output.
-*
-* This attribute is intended as an aid to debugging and to save
-* having to report values explicitly in simple programs.
-* Unlike other attributes, the value of the Report attribute is
-* not inherited when a Mapping is copied (its value is
-* initially undefined, and therefore defaults to zero, in any
-* copy).
-* IsSimple (boolean)
-* A read-only attribute indicating if the Mapping has been
-* simpified.
-* TranForward (integer)
-* A read-only boolean value (0 or 1) which indicates whether a
-* Mapping is able to transform coordinates in the "forward"
-* direction (i.e. converting input coordinates into output
-* coordinates).
-* TranInverse (integer)
-* A read-only boolean value (0 or 1) which indicates whether a
-* Mapping is able to transform coordinates in the "inverse"
-* direction (i.e. converting output coordinates back into input
-* coordinates).
-
-* Methods Over-Ridden:
-* Public:
-* None.
-*
-* Protected:
-* astClearAttrib
-* Clear an attribute value for a Mapping.
-* astGetAttrib
-* Get an attribute value for a Mapping.
-* astSetAttrib
-* Set an attribute value for a Mapping.
-* astTestAttrib
-* Test if an attribute value has been set for a Mapping.
-
-* New Methods Defined:
-* Public:
-* astDecompose
-* Decompose a Mapping into two component Mappings.
-* astInvert
-* Invert a Mapping.
-* astLinearApprox
-* Form a linear approximation to a Mapping
-* astMapBox
-* Find a bounding box for a Mapping.
-* astRate
-* Find rate of change of a Mapping output
-* astRebin<X>
-* Rebin a region of a data grid.
-* astRebinSeq<X>
-* Rebin a region of a sequence of data grids.
-* astResample<X>
-* Resample a region of a data grid.
-* astSimplify
-* Simplify a Mapping.
-* astTran1
-* Transform 1-dimensional coordinates.
-* astTran2
-* Transform 2-dimensional coordinates.
-* astTranGrid
-* Transform an N-dimensional regular grid of positions.
-* astTranN
-* Transform N-dimensional coordinates.
-* astTranP (C only)
-* Transform N-dimensional coordinates held in separate arrays.
-*
-* Protected:
-* astClearInvert
-* Clear the Invert attribute value for a Mapping.
-* astClearReport
-* Clear the Report attribute value for a Mapping.
-* astGetInvert
-* Get the Invert attribute value for a Mapping.
-* astGetIsSimple
-* Get the IsSimple attribute.
-* astGetNin
-* Get the number of input coordinates for a Mapping.
-* astGetNout
-* Get the number of output coordinates for a Mapping.
-* astGetReport
-* Get the Report attribute value for a Mapping.
-* astGetTranForward
-* Determine if a Mapping can perform a "forward" coordinate
-* transformation.
-* astGetTranInverse
-* Determine if a Mapping can perform an "inverse" coordinate
-* transformation.
-* astMapList
-* Decompose a Mapping into a sequence of simpler Mappings.
-* astMapSplit
-* Select a subset of Mapping inputs.
-* astMapMerge
-* Simplify a sequence of Mappings.
-* astReportPoints
-* Report the effect of transforming a set of points using a Mapping.
-* astSetInvert
-* Set the Invert attribute value for a Mapping.
-* astSetReport
-* Set the Report attribute value for a Mapping.
-* astTestInvert
-* Test if an Invert attribute value has been set for a Mapping.
-* astTestReport
-* Test if an Report attribute value has been set for a Mapping.
-* astTransform
-* Transform a set of points.
-
-* Other Class Functions:
-* Public:
-* astIsAMapping
-* Test class membership.
-*
-* Protected:
-* astCheckMapping
-* Validate class membership.
-* astInitMapping
-* Initialise a Mapping.
-* astInitMappingVtab
-* Initialise the virtual function table for the Mapping class.
-* astLoadMapping
-* Load a Mapping.
-
-* Macros:
-* Public:
-* AST__BLOCKAVE
-* Block averaging interpolation.
-* AST__GAUSS
-* Use exp(-k*x*x) spreading.
-* AST__LINEAR
-* Simple linear interpolation.
-* AST__NEAREST
-* Use nearest pixel centre.
-* AST__SINC
-* Use sinc(pi*x) interpolation.
-* AST__SINCCOS
-* Use sinc(pi*x)*cos(k*pi*x) interpolation.
-* AST__SINCGAUSS
-* Use sinc(pi*x)*exp(-k*x*x) interpolation.
-* AST__SINCSINC
-* Use sinc(pi*x)*sinc(k*pi*x) interpolation.
-* AST__SOMB
-* Use somb(pi*x) interpolation.
-* AST__SOMBCOS
-* Use somb(pi*x)*cos(k*pi*x) interpolation.
-* AST__UINTERP
-* Use general user-defined sub-pixel interpolation algorithm.
-* AST__UKERN1
-* Use user-defined 1-d interpolation kernel.
-* AST__URESAMP1, 2, 3 & 4
-* Flags reserved for user-defined purposes.
-* AST__USEBAD
-* Recognise bad pixels?
-* AST__CONSERVEFLUX
-* Conserve flux in astResample?
-* AST__REBININIT
-* Initialise a new sequnece of calls to astRebinSeq<X>
-* AST__REBINEND
-* End a sequnece of calls to astRebinSeq<X>
-* AST__NOBAD
-* Leave bad output pixels unchanged in calls to astResample<X>
-* AST__USEVAR
-* Use variance arrays?
-
-* Type Definitions:
-* Public:
-* AstMapping
-* Mapping object type.
-*
-* Protected:
-* AstMappingVtab
-* Mapping virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* MBT: Mark Taylor (Starlink)
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 30-JAN-1996 (RFWS):
-* Original version.
-* 12-JUL-1996 (RFWS):
-* Updated to support the external interface plus various other
-* additions.
-* 12-DEC-1996 (RFWS):
-* Added the astMapList method.
-* 13-DEC-1996 (RFWS):
-* Added the astMapMerge method.
-* 13-DEC-1996 (RFWS):
-* Added the astSimplify method.
-* 28-MAY-1998 (RFWS):
-* Added the astMapBox method.
-* 12-NOV-1998 (RFWS):
-* Added astResample<X> and associated code.
-* 24-NOV-2000 (MBT):
-* Added AST__BLOCKAVE interpolation scheme.
-* 9-JAN-2001 (DSB):
-* Changed in and out arguments for TranN from type "double (*)[]"
-* to "double *".
-* 8-JAN-2003 (DSB):
-* Added protected astInitMappingVtab method.
-* 10-JUL-2003 (DSB):
-* Added method astRate.
-* 20-SEP-2004 (DSB):
-* Added method astLinearApprox.
-* 30-JUN-2005 (DSB):
-* Added method astRebin
-* 1-SEP-2005 (DSB):
-* Added method astRebinSeq
-* 31-JAN-2006 (DSB):
-* Added IsSimple attribute.
-* 2-MAR-2006 (DSB):
-* Use HAVE_LONG_DOUBLE in place of AST_LONG_DOUBLE
-* 8-MAR-2006 (DSB):
-* Add astTranGrid.
-* 5-MAY-2009 (DSB):
-* Add astRemoveRegions.
-*--
-*/
-
-/* Include files. */
-/* ============== */
-
-/* Configuration results */
-/* --------------------- */
-#include "config.h"
-
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "channel.h" /* I/O channels */
-
-/* C header files. */
-/* --------------- */
-#include <stddef.h>
-
-/* Macros. */
-/* ======= */
-
-/* Sizes of global arrays */
-
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-#define AST__MAPPING_GETATTRIB_BUFF_LEN 50
-#define AST__MAPPING_FUNPN_MAX_CACHE 5
-
-/* Resampling flags. */
-/* ----------------- */
-/* These macros define flag values which may be passed to
- astResample<X> (via the "flags" argument) to provide control over
- resampling operations. */
-#define AST__URESAMP1 (1) /* Flags reserved for user-defined purposes */
-#define AST__URESAMP2 (2)
-#define AST__URESAMP3 (4)
-#define AST__URESAMP4 (8)
-#define AST__USEVAR (16) /* Use variance arrays? */
-#define AST__USEBAD (32) /* Recognise bad pixels? */
-#define AST__CONSERVEFLUX (64) /* Conserve flux? */
-#define AST__REBININIT (128) /* Initialise a new sequence of calls to astRebinSeq? */
-#define AST__REBINEND (256) /* End a sequence of calls to astRebinSeq? */
-#define AST__GENVAR (512) /* Generate output variances when rebinning? */
-#define AST__VARWGT (1024) /* Use input variances as weights? */
-#define AST__NOBAD (2048) /* Leave bad output values unchanged? */
-
-/* These macros identify standard sub-pixel interpolation algorithms
- for use by astResample<X>. They are used by giving the macro's
- value for the "interp" argument. */
-#define AST__UKERN1 (1) /* User-supplied 1-d interpolation kernel */
-#if 0 /* Not yet implemented */
-#define AST__UKERNN (2) /* User-supplied n-d interpolation kernel */
-#endif
-#define AST__UINTERP (3) /* User-supplied interpolation function */
-#define AST__NEAREST (4) /* Use pixel with nearest centre */
-#define AST__LINEAR (5) /* Simple linear interpolation */
-#define AST__SINC (6) /* sinc(pi*x) interpolation */
-#define AST__SINCSINC (7) /* sinc(pi*x)*sinc(k*pi*x) interpolation */
-#define AST__SINCCOS (8) /* sinc(pi*x)*cos(k*pi*x) interpolation */
-#define AST__SINCGAUSS (9) /* sinc(pi*x)*exp(-k*x*x) interpolation */
-#define AST__BLOCKAVE (10) /* Block averaging interpolation */
-#define AST__GAUSS (11) /* exp(-k*x*x) spreading */
-#define AST__SOMB (12) /* somp(pi*x) interpolation */
-#define AST__SOMBCOS (13) /* somp(pi*x)*cos(k*pi*x) interpolation */
-
-/* Type Definitions. */
-/* ================= */
-/* Mapping structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each
- object in the class (e.g. its instance variables). */
-typedef struct AstMapping {
-
-/* Attributes inherited from the parent class. */
- AstObject object; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- char invert; /* Mapping inverted? */
- char issimple; /* Has Mapping been simplified? */
- int nin; /* Number of input coordinates */
- int nout; /* Number of output coordinates */
- char report; /* Report when converting coordinates? */
- char tran_forward; /* Forward transformation defined? */
- char tran_inverse; /* Inverse transformation defined? */
-} AstMapping;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstMappingVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstObjectVtab object_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
- int (* ResampleLD)( AstMapping *, int, const int [], const int [], const long double [], const long double [], int, void (*)(void), const double [], int, double, int, long double, int, const int [], const int [], const int [], const int [], long double [], long double [], int * );
- void (* RebinLD)( AstMapping *, double, int, const int [], const int [], const long double [], const long double [], int, const double [], int, double, int, long double, int, const int [], const int [], const int [], const int [], long double [], long double [], int * );
- void (* RebinSeqLD)( AstMapping *, double, int, const int [], const int [], const long double [], const long double [], int, const double [], int, double, int, long double, int, const int [], const int [], const int [], const int [], long double [], long double [], double [], int *, int * );
-#endif
-
- AstMapping *(* RemoveRegions)( AstMapping *, int * );
- AstMapping *(* Simplify)( AstMapping *, int * );
- AstPointSet *(* Transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
- double (* Rate)( AstMapping *, double *, int, int, int * );
- int (* GetInvert)( AstMapping *, int * );
- int (* GetIsSimple)( AstMapping *, int * );
- int (* GetNin)( AstMapping *, int * );
- int (* GetNout)( AstMapping *, int * );
- int (* GetReport)( AstMapping *, int * );
- int (* GetTranForward)( AstMapping *, int * );
- int (* GetTranInverse)( AstMapping *, int * );
- int (* GetIsLinear)( AstMapping *, int * );
- int (* LinearApprox)( AstMapping *, const double *, const double *, double, double *, int * );
- int (* MapMerge)( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
- void (* RebinD)( AstMapping *, double, int, const int [], const int [], const double [], const double [], int, const double [], int, double, int, double, int, const int [], const int [], const int [], const int [], double [], double [], int * );
- void (* RebinF)( AstMapping *, double, int, const int [], const int [], const float [], const float [], int, const double [], int, double, int, float, int, const int [], const int [], const int [], const int [], float [], float [], int * );
- void (* RebinI)( AstMapping *, double, int, const int [], const int [], const int [], const int [], int, const double [], int, double, int, int, int, const int [], const int [], const int [], const int [], int [], int [], int * );
- void (* RebinSeqD)( AstMapping *, double, int, const int [], const int [], const double [], const double [], int, const double [], int, double, int, double, int, const int [], const int [], const int [], const int [], double [], double [], double [], int *, int * );
- void (* RebinSeqF)( AstMapping *, double, int, const int [], const int [], const float [], const float [], int, const double [], int, double, int, float, int, const int [], const int [], const int [], const int [], float [], float [], double [], int *, int * );
- void (* RebinSeqI)( AstMapping *, double, int, const int [], const int [], const int [], const int [], int, const double [], int, double, int, int, int, const int [], const int [], const int [], const int [], int [], int [], double [], int *, int * );
- int (* ResampleB)( AstMapping *, int, const int [], const int [], const signed char [], const signed char [], int, void (*)(void), const double [], int, double, int, signed char, int, const int [], const int [], const int [], const int [], signed char [], signed char [], int * );
- int (* ResampleD)( AstMapping *, int, const int [], const int [], const double [], const double [], int, void (*)(void), const double [], int, double, int, double, int, const int [], const int [], const int [], const int [], double [], double [], int * );
- int (* ResampleF)( AstMapping *, int, const int [], const int [], const float [], const float [], int, void (*)(void), const double [], int, double, int, float, int, const int [], const int [], const int [], const int [], float [], float [], int * );
- int (* ResampleI)( AstMapping *, int, const int [], const int [], const int [], const int [], int, void (*)(void), const double [], int, double, int, int, int, const int [], const int [], const int [], const int [], int [], int [], int * );
- int (* ResampleL)( AstMapping *, int, const int [], const int [], const long int [], const long int [], int, void (*)(void), const double [], int, double, int, long int, int, const int [], const int [], const int [], const int [], long int [], long int [], int * );
- int (* ResampleS)( AstMapping *, int, const int [], const int [], const short int [], const short int [], int, void (*)(void), const double [], int, double, int, short int, int, const int [], const int [], const int [], const int [], short int [], short int [], int * );
- int (* ResampleUB)( AstMapping *, int, const int [], const int [], const unsigned char [], const unsigned char [], int, void (*)(void), const double [], int, double, int, unsigned char, int, const int [], const int [], const int [], const int [], unsigned char [], unsigned char [], int * );
- int (* ResampleUI)( AstMapping *, int, const int [], const int [], const unsigned int [], const unsigned int [], int, void (*)(void), const double [], int, double, int, unsigned int, int, const int [], const int [], const int [], const int [], unsigned int [], unsigned int [], int * );
- int (* ResampleUL)( AstMapping *, int, const int [], const int [], const unsigned long int [], const unsigned long int [], int, void (*)(void), const double [], int, double, int, unsigned long int, int, const int [], const int [], const int [], const int [], unsigned long int [], unsigned long int [], int * );
- int (* ResampleUS)( AstMapping *, int, const int [], const int [], const unsigned short int [], const unsigned short int [], int, void (*)(void), const double [], int, double, int, unsigned short int, int, const int [], const int [], const int [], const int [], unsigned short int [], unsigned short int [], int * );
- int (* TestInvert)( AstMapping *, int * );
- int (* TestReport)( AstMapping *, int * );
- void (* ClearInvert)( AstMapping *, int * );
- void (* ClearReport)( AstMapping *, int * );
- void (* Decompose)( AstMapping *, AstMapping **, AstMapping **, int *, int *, int *, int * );
- void (* Invert)( struct AstMapping *, int * );
- void (* MapBox)( AstMapping *, const double [], const double [], int, int, double *, double *, double [], double [], int * );
- int (* MapList)( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
- int *(* MapSplit)( AstMapping *, int, const int *, AstMapping **, int * );
- void (* ReportPoints)( AstMapping *, int, AstPointSet *, AstPointSet *, int * );
- void (* SetInvert)( AstMapping *, int, int * );
- void (* SetReport)( AstMapping *, int, int * );
- void (* Tran1)( AstMapping *, int, const double [], int, double [], int * );
- void (* Tran2)( AstMapping *, int, const double [], const double [], int, double [], double [], int * );
- void (* TranGrid)( AstMapping *, int, const int[], const int[], double, int, int, int, int, double *, int * );
- void (* TranN)( AstMapping *, int, int, int, const double *, int, int, int, double *, int * );
- void (* TranP)( AstMapping *, int, int, const double *[], int, int, double *[], int * );
-} AstMappingVtab;
-
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstMappingGlobals {
- AstMappingVtab Class_Vtab;
- int Class_Init;
- char GetAttrib_Buff[ AST__MAPPING_GETATTRIB_BUFF_LEN + 1 ];
- AstMapping *Unsimplified_Mapping;
- int Rate_Disabled;
- AstPointSet *FunPN_Pset1_Cache[ AST__MAPPING_FUNPN_MAX_CACHE ];
- AstPointSet *FunPN_Pset2_Cache[ AST__MAPPING_FUNPN_MAX_CACHE ];
- int FunPN_Next_Slot;
- int FunPN_Pset_Size[ AST__MAPPING_FUNPN_MAX_CACHE ];
-} AstMappingGlobals;
-
-#endif
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Mapping) /* Check class membership */
-astPROTO_ISA(Mapping) /* Test class membership */
-
-/* NB. There is no constructor function for this class. */
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstMapping *astInitMapping_( void *, size_t, int, AstMappingVtab *,
- const char *, int, int, int, int, int * );
-
-/* Vtab initialiser. */
-void astInitMappingVtab_( AstMappingVtab *, const char *, int * );
-
-/* Loader. */
-AstMapping *astLoadMapping_( void *, size_t, AstMappingVtab *,
- const char *, AstChannel *channel, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitMappingGlobals_( AstMappingGlobals * );
-#endif
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-int astResampleLD_( AstMapping *, int, const int [], const int [], const long double [], const long double [], int, void (*)(void), const double [], int, double, int, long double, int, const int [], const int [], const int [], const int [], long double [], long double [], int * );
-void astRebinLD_( AstMapping *, double, int, const int [], const int [], const long double [], const long double [], int, const double [], int, double, int, long double, int, const int [], const int [], const int [], const int [], long double [], long double [], int * );
-void astRebinSeqLD_( AstMapping *, double, int, const int [], const int [], const long double [], const long double [], int, const double [], int, double, int, long double, int, const int [], const int [], const int [], const int [], long double [], long double [], double [], int *, int * );
-#endif
-
-AstMapping *astRemoveRegions_( AstMapping *, int * );
-AstMapping *astSimplify_( AstMapping *, int * );
-void astRebinD_( AstMapping *, double, int, const int [], const int [], const double [], const double [], int, const double [], int, double, int, double, int, const int [], const int [], const int [], const int [], double [], double [], int * );
-void astRebinF_( AstMapping *, double, int, const int [], const int [], const float [], const float [], int, const double [], int, double, int, float, int, const int [], const int [], const int [], const int [], float [], float [], int * );
-void astRebinI_( AstMapping *, double, int, const int [], const int [], const int [], const int [], int, const double [], int, double, int, int, int, const int [], const int [], const int [], const int [], int [], int [], int * );
-void astRebinSeqD_( AstMapping *, double, int, const int [], const int [], const double [], const double [], int, const double [], int, double, int, double, int, const int [], const int [], const int [], const int [], double [], double [], double [], int *, int * );
-void astRebinSeqF_( AstMapping *, double, int, const int [], const int [], const float [], const float [], int, const double [], int, double, int, float, int, const int [], const int [], const int [], const int [], float [], float [], double [], int *, int * );
-void astRebinSeqI_( AstMapping *, double, int, const int [], const int [], const int [], const int [], int, const double [], int, double, int, int, int, const int [], const int [], const int [], const int [], int [], int [], double [], int *, int * );
-int astResampleB_( AstMapping *, int, const int [], const int [], const signed char [], const signed char [], int, void (*)(void), const double [], int, double, int, signed char, int, const int [], const int [], const int [], const int [], signed char [], signed char [], int * );
-int astResampleD_( AstMapping *, int, const int [], const int [], const double [], const double [], int, void (*)(void), const double [], int, double, int, double, int, const int [], const int [], const int [], const int [], double [], double [], int * );
-int astResampleF_( AstMapping *, int, const int [], const int [], const float [], const float [], int, void (*)(void), const double [], int, double, int, float, int, const int [], const int [], const int [], const int [], float [], float [], int * );
-int astResampleI_( AstMapping *, int, const int [], const int [], const int [], const int [], int, void (*)(void), const double [], int, double, int, int, int, const int [], const int [], const int [], const int [], int [], int [], int * );
-int astResampleL_( AstMapping *, int, const int [], const int [], const long int [], const long int [], int, void (*)(void), const double [], int, double, int, long int, int, const int [], const int [], const int [], const int [], long int [], long int [], int * );
-int astResampleS_( AstMapping *, int, const int [], const int [], const short int [], const short int [], int, void (*)(void), const double [], int, double, int, short int, int, const int [], const int [], const int [], const int [], short int [], short int [], int * );
-int astResampleUB_( AstMapping *, int, const int [], const int [], const unsigned char [], const unsigned char [], int, void (*)(void), const double [], int, double, int, unsigned char, int, const int [], const int [], const int [], const int [], unsigned char [], unsigned char [], int * );
-int astResampleUI_( AstMapping *, int, const int [], const int [], const unsigned int [], const unsigned int [], int, void (*)(void), const double [], int, double, int, unsigned int, int, const int [], const int [], const int [], const int [], unsigned int [], unsigned int [], int * );
-int astResampleUL_( AstMapping *, int, const int [], const int [], const unsigned long int [], const unsigned long int [], int, void (*)(void), const double [], int, double, int, unsigned long int, int, const int [], const int [], const int [], const int [], unsigned long int [], unsigned long int [], int * );
-int astResampleUS_( AstMapping *, int, const int [], const int [], const unsigned short int [], const unsigned short int [], int, void (*)(void), const double [], int, double, int, unsigned short int, int, const int [], const int [], const int [], const int [], unsigned short int [], unsigned short int [], int * );
-void astInvert_( AstMapping *, int * );
-int astLinearApprox_( AstMapping *, const double *, const double *, double, double *, int * );
-void astTran1_( AstMapping *, int, const double [], int, double [], int * );
-void astTran2_( AstMapping *, int, const double [], const double [], int, double [], double [], int * );
-void astTranGrid_( AstMapping *, int, const int[], const int[], double, int, int, int, int, double *, int * );
-void astTranN_( AstMapping *, int, int, int, const double *, int, int, int, double *, int * );
-void astTranP_( AstMapping *, int, int, const double *[], int, int, double *[], int * );
-
-#if defined(astCLASS) /* Protected */
-void astDecompose_( AstMapping *, AstMapping **, AstMapping **, int *, int *, int *, int * );
-void astMapBox_( AstMapping *, const double [], const double [], int, int, double *, double *, double [], double [], int * );
-double astRate_( AstMapping *, double *, int, int, int * );
-int *astMapSplit_( AstMapping *, int, const int *, AstMapping **, int * );
-#else
-void astDecomposeId_( AstMapping *, AstMapping **, AstMapping **, int *, int *, int *, int * );
-void astMapBoxId_( AstMapping *, const double [], const double [], int, int, double *, double *, double [], double [], int * );
-double astRateId_( AstMapping *, double *, int, int, int * );
-void astMapSplitId_( AstMapping *, int, const int *, int *, AstMapping **, int * );
-#endif
-
-#if defined(astCLASS) /* Protected */
-int astRateState_( int, int * );
-AstPointSet *astTransform_( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-int astGetInvert_( AstMapping *, int * );
-int astGetIsSimple_( AstMapping *, int * );
-int astGetNin_( AstMapping *, int * );
-int astGetNout_( AstMapping *, int * );
-int astGetReport_( AstMapping *, int * );
-int astGetTranForward_( AstMapping *, int * );
-int astGetTranInverse_( AstMapping *, int * );
-int astGetIsLinear_( AstMapping *, int * );
-int astMapMerge_( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-int astTestInvert_( AstMapping *, int * );
-int astTestReport_( AstMapping *, int * );
-void astClearInvert_( AstMapping *, int * );
-void astClearReport_( AstMapping *, int * );
-int astMapList_( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-void astReportPoints_( AstMapping *, int, AstPointSet *, AstPointSet *, int * );
-void astSetInvert_( AstMapping *, int, int * );
-void astSetReport_( AstMapping *, int, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class to make
- them easier to invoke (e.g. to avoid type mis-matches when passing pointers
- to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them to
- validate their own arguments. We must use a cast when passing object
- pointers (so that they can accept objects from derived classes). */
-
-/* Check class membership. */
-#define astCheckMapping(this) astINVOKE_CHECK(Mapping,this,0)
-#define astVerifyMapping(this) astINVOKE_CHECK(Mapping,this,1)
-
-/* Test class membership. */
-#define astIsAMapping(this) astINVOKE_ISA(Mapping,this)
-
-/* NB. There is no constructor function for this class. */
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitMapping(mem,size,init,vtab,name,nin,nout,tran_forward,tran_inverse) \
-astINVOKE(O,astInitMapping_(mem,size,init,vtab,name,nin,nout,tran_forward,tran_inverse,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitMappingVtab(vtab,name) astINVOKE(V,astInitMappingVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadMapping(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadMapping_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to member functions. */
-/* ------------------------------- */
-/* Here we make use of astCheckMapping (et al.) to validate Mapping
- pointers before use. This provides a contextual error report if a
- pointer to the wrong sort of object is supplied. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-#define astResampleLD(this,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astResampleLD_(astCheckMapping(this),ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astRebinLD(this,wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astRebinLD_(astCheckMapping(this),wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astRebinSeqLD(this,wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,weights,nused) \
-astINVOKE(V,astRebinSeqLD_(astCheckMapping(this),wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,weights,nused,STATUS_PTR))
-#endif
-
-#define astInvert(this) \
-astINVOKE(V,astInvert_(astCheckMapping(this),STATUS_PTR))
-#define astLinearApprox(this,lbnd,ubnd,tol,fit) \
-astINVOKE(V,astLinearApprox_(astCheckMapping(this),lbnd,ubnd,tol,fit,STATUS_PTR))
-#define astRebinD(this,wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astRebinD_(astCheckMapping(this),wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astRebinF(this,wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astRebinF_(astCheckMapping(this),wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astRebinI(this,wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astRebinI_(astCheckMapping(this),wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astRebinSeqD(this,wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,weights,nused) \
-astINVOKE(V,astRebinSeqD_(astCheckMapping(this),wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,weights,nused,STATUS_PTR))
-#define astRebinSeqF(this,wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,weights,nused) \
-astINVOKE(V,astRebinSeqF_(astCheckMapping(this),wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,weights,nused,STATUS_PTR))
-#define astRebinSeqI(this,wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,weights,nused) \
-astINVOKE(V,astRebinSeqI_(astCheckMapping(this),wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,weights,nused,STATUS_PTR))
-#define astResampleD(this,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astResampleD_(astCheckMapping(this),ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astResampleF(this,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astResampleF_(astCheckMapping(this),ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astResampleL(this,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astResampleL_(astCheckMapping(this),ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astResampleUL(this,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astResampleUL_(astCheckMapping(this),ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astResampleI(this,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astResampleI_(astCheckMapping(this),ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astResampleUI(this,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astResampleUI_(astCheckMapping(this),ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astResampleS(this,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astResampleS_(astCheckMapping(this),ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astResampleUS(this,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astResampleUS_(astCheckMapping(this),ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astResampleB(this,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astResampleB_(astCheckMapping(this),ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astResampleUB(this,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astResampleUB_(astCheckMapping(this),ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astRemoveRegions(this) astINVOKE(O,astRemoveRegions_(astCheckMapping(this),STATUS_PTR))
-#define astSimplify(this) astINVOKE(O,astSimplify_(astCheckMapping(this),STATUS_PTR))
-#define astTran1(this,npoint,xin,forward,xout) \
-astINVOKE(V,astTran1_(astCheckMapping(this),npoint,xin,forward,xout,STATUS_PTR))
-#define astTran2(this,npoint,xin,yin,forward,xout,yout) \
-astINVOKE(V,astTran2_(astCheckMapping(this),npoint,xin,yin,forward,xout,yout,STATUS_PTR))
-#define astTranGrid(this,ncoord_in,lbnd,ubnd,tol,maxpix,forward,ncoord_out,outdim,out) \
-astINVOKE(V,astTranGrid_(astCheckMapping(this),ncoord_in,lbnd,ubnd,tol,maxpix,forward,ncoord_out,outdim,out,STATUS_PTR))
-#define astTranN(this,npoint,ncoord_in,indim,in,forward,ncoord_out,outdim,out) \
-astINVOKE(V,astTranN_(astCheckMapping(this),npoint,ncoord_in,indim,in,forward,ncoord_out,outdim,out,STATUS_PTR))
-#define astTranP(this,npoint,ncoord_in,ptr_in,forward,ncoord_out,ptr_out) \
-astINVOKE(V,astTranP_(astCheckMapping(this),npoint,ncoord_in,ptr_in,forward,ncoord_out,ptr_out,STATUS_PTR))
-
-#if defined(astCLASS) /* Protected */
-#define astDecompose(this,map1,map2,series,inv1,inv2) \
-astINVOKE(V,astDecompose_(astCheckMapping(this),(AstMapping **)(map1),(AstMapping **)(map2),series,inv1,inv2,STATUS_PTR))
-#define astMapBox(this,lbnd_in,ubnd_in,forward,coord_out,lbnd_out,ubnd_out,xl,xu) \
-astINVOKE(V,astMapBox_(astCheckMapping(this),lbnd_in,ubnd_in,forward,coord_out,lbnd_out,ubnd_out,xl,xu,STATUS_PTR))
-#define astRate(this,at,ax1,ax2) \
-astINVOKE(V,astRate_(astCheckMapping(this),at,ax1,ax2,STATUS_PTR))
-#define astMapSplit(this,nin,in,map) \
-astINVOKE(V,astMapSplit_(this,nin,in,map,STATUS_PTR))
-#else
-#define astDecompose(this,map1,map2,series,inv1,inv2) \
-astINVOKE(V,astDecomposeId_(astCheckMapping(this),(AstMapping **)(map1),(AstMapping **)(map2),series,inv1,inv2,STATUS_PTR))
-#define astMapBox(this,lbnd_in,ubnd_in,forward,coord_out,lbnd_out,ubnd_out,xl,xu) \
-astINVOKE(V,astMapBoxId_(astCheckMapping(this),lbnd_in,ubnd_in,forward,coord_out,lbnd_out,ubnd_out,xl,xu,STATUS_PTR))
-#define astRate(this,at,ax1,ax2) \
-astINVOKE(V,astRateId_(astCheckMapping(this),at,ax1,ax2,STATUS_PTR))
-#define astMapSplit(this,nin,in,out,map) \
-astINVOKE(V,astMapSplitId_(astCheckMapping(this),nin,in,out,map,STATUS_PTR))
-#endif
-
-#if defined(astCLASS) /* Protected */
-#define astRateState(disabled) astRateState_(disabled,STATUS_PTR)
-#define astClearInvert(this) \
-astINVOKE(V,astClearInvert_(astCheckMapping(this),STATUS_PTR))
-#define astClearReport(this) \
-astINVOKE(V,astClearReport_(astCheckMapping(this),STATUS_PTR))
-#define astGetInvert(this) \
-astINVOKE(V,astGetInvert_(astCheckMapping(this),STATUS_PTR))
-#define astGetIsSimple(this) \
-astINVOKE(V,astGetIsSimple_(astCheckMapping(this),STATUS_PTR))
-#define astGetNin(this) \
-astINVOKE(V,astGetNin_(astCheckMapping(this),STATUS_PTR))
-#define astGetNout(this) \
-astINVOKE(V,astGetNout_(astCheckMapping(this),STATUS_PTR))
-#define astGetReport(this) \
-astINVOKE(V,astGetReport_(astCheckMapping(this),STATUS_PTR))
-#define astGetTranForward(this) \
-astINVOKE(V,astGetTranForward_(astCheckMapping(this),STATUS_PTR))
-#define astGetTranInverse(this) \
-astINVOKE(V,astGetTranInverse_(astCheckMapping(this),STATUS_PTR))
-#define astGetIsLinear(this) \
-astINVOKE(V,astGetIsLinear_(astCheckMapping(this),STATUS_PTR))
-#define astMapList(this,series,invert,nmap,map_list,invert_list) \
-astINVOKE(V,astMapList_(this,series,invert,nmap,map_list,invert_list,STATUS_PTR))
-#define astMapMerge(this,where,series,nmap,map_list,invert_list) \
-astINVOKE(V,astMapMerge_(astCheckMapping(this),where,series,nmap,map_list,invert_list,STATUS_PTR))
-#define astReportPoints(this,forward,in_points,out_points) \
-astINVOKE(V,astReportPoints_(astCheckMapping(this),forward,astCheckPointSet(in_points),astCheckPointSet(out_points),STATUS_PTR))
-#define astSetInvert(this,value) \
-astINVOKE(V,astSetInvert_(astCheckMapping(this),value,STATUS_PTR))
-#define astSetReport(this,value) \
-astINVOKE(V,astSetReport_(astCheckMapping(this),value,STATUS_PTR))
-#define astTestInvert(this) \
-astINVOKE(V,astTestInvert_(astCheckMapping(this),STATUS_PTR))
-#define astTestReport(this) \
-astINVOKE(V,astTestReport_(astCheckMapping(this),STATUS_PTR))
-
-/* Since a NULL PointSet pointer is acceptable here, we must omit the argument
- checking in that case. (But unfortunately, "out" then gets evaluated
- twice - this is unlikely to matter, but is there a better way?) */
-#define astTransform(this,in,forward,out) \
-astINVOKE(O,astTransform_(astCheckMapping(this),astCheckPointSet(in),forward,(out)?astCheckPointSet(out):NULL,STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/mathmap.c b/ast-5.3-1/mathmap.c
deleted file mode 100644
index 8b76ae0..0000000
--- a/ast-5.3-1/mathmap.c
+++ /dev/null
@@ -1,7412 +0,0 @@
-/*
-*class++
-* Name:
-* MathMap
-
-* Purpose:
-* Transform coordinates using mathematical expressions.
-
-* Constructor Function:
-c astMathMap
-f AST_MATHMAP
-
-* Description:
-c A MathMap is a Mapping which allows you to specify a set of forward
-c and/or inverse transformation functions using arithmetic operations
-c and mathematical functions similar to those available in C. The
-c MathMap interprets these functions at run-time, whenever its forward
-c or inverse transformation is required. Because the functions are not
-c compiled in the normal sense (unlike an IntraMap), they may be used to
-c describe coordinate transformations in a transportable manner. A
-c MathMap therefore provides a flexible way of defining new types of
-c Mapping whose descriptions may be stored as part of a dataset and
-c interpreted by other programs.
-f A MathMap is a Mapping which allows you to specify a set of forward
-f and/or inverse transformation functions using arithmetic operations
-f and mathematical functions similar to those available in Fortran. The
-f MathMap interprets these functions at run-time, whenever its forward
-f or inverse transformation is required. Because the functions are not
-f compiled in the normal sense (unlike an IntraMap), they may be used to
-f describe coordinate transformations in a transportable manner. A
-f MathMap therefore provides a flexible way of defining new types of
-f Mapping whose descriptions may be stored as part of a dataset and
-f interpreted by other programs.
-
-* Inheritance:
-* The MathMap class inherits from the Mapping class.
-
-* Attributes:
-* In addition to those attributes common to all Mappings, every
-* MathMap also has the following attributes:
-* - Seed: Random number seed
-* - SimpFI: Forward-inverse MathMap pairs simplify?
-* - SimpIF: Inverse-forward MathMap pairs simplify?
-
-* Functions:
-c The MathMap class does not define any new functions beyond those
-f The MathMap class does not define any new routines beyond those
-* which are applicable to all Mappings.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 3-SEP-1999 (RFWS):
-* Original version.
-* 8-JAN-2003 (DSB):
-* Changed private InitVtab method to protected astInitMathMapVtab
-* method.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 14-MAR-2006 (DSB):
-* - Add QIF function.
-* - Override astEqual method.
-* 20-NOV-2006 (DSB):
-* Re-implement the Equal method to avoid use of astSimplify.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS MathMap
-
-/* Allocate pointer array. */
-/* ----------------------- */
-/* This macro allocates an array of pointers. If successful, each element
- of the array is initialised to NULL. */
-#define MALLOC_POINTER_ARRAY(array_name,array_type,array_size) \
-\
-/* Allocate the array. */ \
- (array_name) = astMalloc( sizeof(array_type) * (size_t) (array_size) ); \
- if ( astOK ) { \
-\
-/* If successful, loop to initialise each element. */ \
- int array_index_; \
- for ( array_index_ = 0; array_index_ < (array_size); array_index_++ ) { \
- (array_name)[ array_index_ ] = NULL; \
- } \
- }
-
-/* Free pointer array. */
-/* ------------------- */
-/* This macro frees a dynamically allocated array of pointers, each of
- whose elements may point at a further dynamically allocated array
- (which is also to be freed). It also allows for the possibility of any
- of the pointers being NULL. */
-#define FREE_POINTER_ARRAY(array_name,array_size) \
-\
-/* Check that the main array pointer is not NULL. */ \
- if ( (array_name) ) { \
-\
-/* If OK, loop to free each of the sub-arrays. */ \
- int array_index_; \
- for ( array_index_ = 0; array_index_ < (array_size); array_index_++ ) { \
-\
-/* Check that each sub-array pointer is not NULL before freeing it. */ \
- if ( (array_name)[ array_index_ ] ) { \
- (array_name)[ array_index_ ] = \
- astFree( (array_name)[ array_index_ ] ); \
- } \
- } \
-\
-/* Free the main pointer array. */ \
- (array_name) = astFree( (array_name) ); \
- }
-
-/* SizeOf pointer array. */
-/* --------------------- */
-/* This macro increments "result" by the number of bytes allocated for an
- array of pointers, each of whose elements may point at a further
- dynamically allocated array (which is also to be included). It also
- allows for the possibility of any of the pointers being NULL. */
-#define SIZEOF_POINTER_ARRAY(array_name,array_size) \
-\
-/* Check that the main array pointer is not NULL. */ \
- if ( (array_name) ) { \
-\
-/* If OK, loop to measure each of the sub-arrays. */ \
- int array_index_; \
- for ( array_index_ = 0; array_index_ < (array_size); array_index_++ ) { \
-\
-/* Check that each sub-array pointer is not NULL before measuring it. */ \
- if ( (array_name)[ array_index_ ] ) { \
- result += astTSizeOf( (array_name)[ array_index_ ] ); \
- } \
- } \
-\
-/* Include the main pointer array. */ \
- result += astTSizeOf( (array_name) ); \
- }
-
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-#include "channel.h" /* I/O channels */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-#include "cmpmap.h" /* Compound Mappings */
-#include "mathmap.h" /* Interface definition for this class */
-#include "memory.h" /* Memory allocation facilities */
-#include "globals.h" /* Thread-safe global data access */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points */
-#include "unitmap.h" /* Unit Mapping */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <errno.h>
-#include <limits.h>
-#include <math.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-/* Module Variables. */
-/* ================= */
-/* This type is made obscure since it is publicly accessible (but not
- useful). Provide shorthand for use within this module. */
-typedef AstMathMapRandContext_ Rcontext;
-
-
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-/* This declaration enumerates the operation codes recognised by the
- EvaluateFunction function which evaluates arithmetic expressions. */
-typedef enum {
-
-/* User-supplied constants and variables. */
- OP_LDCON, /* Load constant */
- OP_LDVAR, /* Load variable */
-
-/* System constants. */
- OP_LDBAD, /* Load bad value (AST__BAD) */
- OP_LDDIG, /* Load # decimal digits (DBL_DIG) */
- OP_LDEPS, /* Load relative precision (DBL_EPSILON) */
- OP_LDMAX, /* Load largest value (DBL_MAX) */
- OP_LDMAX10E, /* Max. decimal exponent (DBL_MAX_10_EXP) */
- OP_LDMAXE, /* Load maximum exponent (DBL_MAX_EXP) */
- OP_LDMDIG, /* Load # mantissa digits (DBL_MANT_DIG) */
- OP_LDMIN, /* Load smallest value (DBL_MIN) */
- OP_LDMIN10E, /* Min. decimal exponent (DBL_MIN_10_EXP) */
- OP_LDMINE, /* Load minimum exponent (DBL_MIN_EXP) */
- OP_LDRAD, /* Load floating radix (FLT_RADIX) */
- OP_LDRND, /* Load rounding mode (FLT_ROUNDS) */
-
-/* Mathematical constants. */
- OP_LDE, /* Load e (base of natural logarithms) */
- OP_LDPI, /* Load pi */
-
-/* Functions with one argument. */
- OP_ABS, /* Absolute value (sign removal) */
- OP_ACOS, /* Inverse cosine (radians) */
- OP_ACOSD, /* Inverse cosine (degrees) */
- OP_ACOSH, /* Inverse hyperbolic cosine */
- OP_ACOTH, /* Inverse hyperbolic cotangent */
- OP_ACSCH, /* Inverse hyperbolic cosecant */
- OP_ASECH, /* Inverse hyperbolic secant */
- OP_ASIN, /* Inverse sine (radians) */
- OP_ASIND, /* Inverse sine (degrees) */
- OP_ASINH, /* Inverse hyperbolic sine */
- OP_ATAN, /* Inverse tangent (radians) */
- OP_ATAND, /* Inverse tangent (degrees) */
- OP_ATANH, /* Inverse hyperbolic tangent */
- OP_CEIL, /* C ceil function (round up) */
- OP_COS, /* Cosine (radians) */
- OP_COSD, /* Cosine (degrees) */
- OP_COSH, /* Hyperbolic cosine */
- OP_COTH, /* Hyperbolic cotangent */
- OP_CSCH, /* Hyperbolic cosecant */
- OP_EXP, /* Exponential function */
- OP_FLOOR, /* C floor function (round down) */
- OP_INT, /* Integer value (round towards zero) */
- OP_ISBAD, /* Test for bad value */
- OP_LOG, /* Natural logarithm */
- OP_LOG10, /* Base 10 logarithm */
- OP_NINT, /* Fortran NINT function (round to nearest) */
- OP_POISS, /* Poisson random number */
- OP_SECH, /* Hyperbolic secant */
- OP_SIN, /* Sine (radians) */
- OP_SINC, /* Sinc function [= sin(x)/x] */
- OP_SIND, /* Sine (degrees) */
- OP_SINH, /* Hyperbolic sine */
- OP_SQR, /* Square */
- OP_SQRT, /* Square root */
- OP_TAN, /* Tangent (radians) */
- OP_TAND, /* Tangent (degrees) */
- OP_TANH, /* Hyperbolic tangent */
-
-/* Functions with two arguments. */
- OP_ATAN2, /* Inverse tangent (2 arguments, radians) */
- OP_ATAN2D, /* Inverse tangent (2 arguments, degrees) */
- OP_DIM, /* Fortran DIM (positive difference) fn. */
- OP_GAUSS, /* Gaussian random number */
- OP_MOD, /* Modulus function */
- OP_POW, /* Raise to power */
- OP_RAND, /* Uniformly distributed random number */
- OP_SIGN, /* Transfer of sign function */
-
-/* Functions with three arguments. */
- OP_QIF, /* C "question mark" operator "a?b:c" */
-
-/* Functions with variable numbers of arguments. */
- OP_MAX, /* Maximum of 2 or more values */
- OP_MIN, /* Minimum of 2 or more values */
-
-/* Unary arithmetic operators. */
- OP_NEG, /* Negate (change sign) */
-
-/* Unary boolean operators. */
- OP_NOT, /* Boolean NOT */
-
-/* Binary arithmetic operators. */
- OP_ADD, /* Add */
- OP_DIV, /* Divide */
- OP_MUL, /* Multiply */
- OP_SUB, /* Subtract */
-
-/* Bit-shift operators. */
- OP_SHFTL, /* Shift bits left */
- OP_SHFTR, /* Shift bits right */
-
-/* Relational operators. */
- OP_EQ, /* Relational equal */
- OP_GE, /* Greater than or equal */
- OP_GT, /* Greater than */
- OP_LE, /* Less than or equal */
- OP_LT, /* Less than */
- OP_NE, /* Not equal */
-
-/* Bit-wise operators. */
- OP_BITAND, /* Bit-wise AND */
- OP_BITOR, /* Bit-wise OR */
- OP_BITXOR, /* Bit-wise exclusive OR */
-
-/* Binary boolean operators. */
- OP_AND, /* Boolean AND */
- OP_EQV, /* Fortran logical .EQV. operation */
- OP_OR, /* Boolean OR */
- OP_XOR, /* Boolean exclusive OR */
-
-/* Null operation. */
- OP_NULL /* Null operation */
-} Oper;
-
-/* This structure holds a description of each symbol which may appear
- in an expression. */
-typedef struct {
- const char *text; /* Symbol text as it appears in expressions */
- const int size; /* Size of symbol text */
- const int operleft; /* An operator when seen from the left? */
- const int operright; /* An operator when seen from the right? */
- const int unarynext; /* May be followed by a unary +/- ? */
- const int unaryoper; /* Is a unary +/- ? */
- const int leftpriority; /* Priority when seen from the left */
- const int rightpriority; /* Priority when seen from the right */
- const int parincrement; /* Change in parenthesis level */
- const int stackincrement; /* Change in evaluation stack size */
- const int nargs; /* Number of function arguments */
- const Oper opcode; /* Resulting operation code */
-} Symbol;
-
-/* This initialises an array of Symbol structures to hold data on all
- the supported symbols. The order is not important, but symbols are
- arranged here in approximate order of descending evaluation
- priority. The end of the array is indicated by an element with a NULL
- "text" component. */
-static const Symbol symbol[] = {
-
-/* User-supplied constants and variables. */
- { "" , 0, 0, 0, 0, 0, 19, 19, 0, 1, 0, OP_LDCON },
- { "" , 0, 0, 0, 0, 0, 19, 19, 0, 1, 0, OP_LDVAR },
-
-/* System constants. */
- { "<bad>" , 5, 0, 0, 0, 0, 19, 19, 0, 1, 0, OP_LDBAD },
- { "<dig>" , 5, 0, 0, 0, 0, 19, 19, 0, 1, 0, OP_LDDIG },
- { "<epsilon>" , 9, 0, 0, 0, 0, 19, 19, 0, 1, 0, OP_LDEPS },
- { "<mant_dig>" , 10, 0, 0, 0, 0, 19, 19, 0, 1, 0, OP_LDMDIG },
- { "<max>" , 5, 0, 0, 0, 0, 19, 19, 0, 1, 0, OP_LDMAX },
- { "<max_10_exp>", 12, 0, 0, 0, 0, 19, 19, 0, 1, 0, OP_LDMAX10E },
- { "<max_exp>" , 9, 0, 0, 0, 0, 19, 19, 0, 1, 0, OP_LDMAXE },
- { "<min>" , 5, 0, 0, 0, 0, 19, 19, 0, 1, 0, OP_LDMIN },
- { "<min_10_exp>", 12, 0, 0, 0, 0, 19, 19, 0, 1, 0, OP_LDMIN10E },
- { "<min_exp>" , 9, 0, 0, 0, 0, 19, 19, 0, 1, 0, OP_LDMINE },
- { "<radix>" , 7, 0, 0, 0, 0, 19, 19, 0, 1, 0, OP_LDRAD },
- { "<rounds>" , 8, 0, 0, 0, 0, 19, 19, 0, 1, 0, OP_LDRND },
-
-/* Mathematical constants. */
- { "<e>" , 3, 0, 0, 0, 0, 19, 19, 0, 1, 0, OP_LDE },
- { "<pi>" , 4, 0, 0, 0, 0, 19, 19, 0, 1, 0, OP_LDPI },
-
-/* Functions with one argument. */
- { "abs(" , 4, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_ABS },
- { "acos(" , 5, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_ACOS },
- { "acosd(" , 6, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_ACOSD },
- { "acosh(" , 6, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_ACOSH },
- { "acoth(" , 6, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_ACOTH },
- { "acsch(" , 6, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_ACSCH },
- { "aint(" , 5, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_INT },
- { "asech(" , 6, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_ASECH },
- { "asin(" , 5, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_ASIN },
- { "asind(" , 6, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_ASIND },
- { "asinh(" , 6, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_ASINH },
- { "atan(" , 5, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_ATAN },
- { "atand(" , 6, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_ATAND },
- { "atanh(" , 6, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_ATANH },
- { "ceil(" , 5, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_CEIL },
- { "cos(" , 4, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_COS },
- { "cosd(" , 5, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_COSD },
- { "cosh(" , 5, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_COSH },
- { "coth(" , 5, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_COTH },
- { "csch(" , 5, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_CSCH },
- { "exp(" , 4, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_EXP },
- { "fabs(" , 5, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_ABS },
- { "floor(" , 6, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_FLOOR },
- { "int(" , 4, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_INT },
- { "isbad(" , 6, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_ISBAD },
- { "log(" , 4, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_LOG },
- { "log10(" , 6, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_LOG10 },
- { "nint(" , 5, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_NINT },
- { "poisson(" , 8, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_POISS },
- { "sech(" , 5, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_SECH },
- { "sin(" , 4, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_SIN },
- { "sinc(" , 5, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_SINC },
- { "sind(" , 5, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_SIND },
- { "sinh(" , 5, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_SINH },
- { "sqr(" , 4, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_SQR },
- { "sqrt(" , 5, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_SQRT },
- { "tan(" , 4, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_TAN },
- { "tand(" , 5, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_TAND },
- { "tanh(" , 5, 0, 1, 1, 0, 19, 1, 1, 0, 1, OP_TANH },
-
-/* Functions with two arguments. */
- { "atan2(" , 6, 0, 1, 1, 0, 19, 1, 1, -1, 2, OP_ATAN2 },
- { "atan2d(" , 7, 0, 1, 1, 0, 19, 1, 1, -1, 2, OP_ATAN2D },
- { "dim(" , 4, 0, 1, 1, 0, 19, 1, 1, -1, 2, OP_DIM },
- { "fmod(" , 5, 0, 1, 1, 0, 19, 1, 1, -1, 2, OP_MOD },
- { "gauss(" , 6, 0, 1, 1, 0, 19, 1, 1, -1, 2, OP_GAUSS },
- { "mod(" , 4, 0, 1, 1, 0, 19, 1, 1, -1, 2, OP_MOD },
- { "pow(" , 4, 0, 1, 1, 0, 19, 1, 1, -1, 2, OP_POW },
- { "rand(" , 5, 0, 1, 1, 0, 19, 1, 1, -1, 2, OP_RAND },
- { "sign(" , 5, 0, 1, 1, 0, 19, 1, 1, -1, 2, OP_SIGN },
-
-/* Functions with two arguments. */
- { "qif(" , 4, 0, 1, 1, 0, 19, 1, 1, -2, 3, OP_QIF },
-
-/* Functions with variable numbers of arguments. */
- { "max(" , 4, 0, 1, 1, 0, 19, 1, 1, -1, -2, OP_MAX },
- { "min(" , 4, 0, 1, 1, 0, 19, 1, 1, -1, -2, OP_MIN },
-
-/* Parenthesised expressions. */
- { ")" , 1, 1, 0, 0, 0, 2, 19, -1, 0, 0, OP_NULL },
- { "(" , 1, 0, 1, 1, 0, 19, 1, 1, 0, 0, OP_NULL },
-
-/* Unary arithmetic operators. */
- { "+" , 1, 0, 1, 1, 1, 17, 16, 0, 0, 0, OP_NULL },
- { "-" , 1, 0, 1, 1, 1, 17, 16, 0, 0, 0, OP_NEG },
-
-/* Unary boolean operators. */
- { "!" , 1, 0, 1, 1, 0, 17, 16, 0, 0, 0, OP_NOT },
- { ".not." , 5, 0, 1, 1, 0, 17, 16, 0, 0, 0, OP_NOT },
-
-/* Binary arithmetic operators. */
- { "**" , 2, 1, 1, 1, 0, 18, 15, 0, -1, 0, OP_POW },
- { "*" , 1, 1, 1, 1, 0, 14, 14, 0, -1, 0, OP_MUL },
- { "/" , 1, 1, 1, 1, 0, 14, 14, 0, -1, 0, OP_DIV },
- { "+" , 1, 1, 1, 1, 0, 13, 13, 0, -1, 0, OP_ADD },
- { "-" , 1, 1, 1, 1, 0, 13, 13, 0, -1, 0, OP_SUB },
-
-/* Bit-shift operators. */
- { "<<" , 2, 1, 1, 1, 0, 12, 12, 0, -1, 0, OP_SHFTL },
- { ">>" , 2, 1, 1, 1, 0, 12, 12, 0, -1, 0, OP_SHFTR },
-
-/* Relational operators. */
- { "<" , 1, 1, 1, 1, 0, 11, 11, 0, -1, 0, OP_LT },
- { ".lt." , 4, 1, 1, 1, 0, 11, 11, 0, -1, 0, OP_LT },
- { "<=" , 2, 1, 1, 1, 0, 11, 11, 0, -1, 0, OP_LE },
- { ".le." , 4, 1, 1, 1, 0, 11, 11, 0, -1, 0, OP_LE },
- { ">" , 1, 1, 1, 1, 0, 11, 11, 0, -1, 0, OP_GT },
- { ".gt." , 4, 1, 1, 1, 0, 11, 11, 0, -1, 0, OP_GT },
- { ">=" , 2, 1, 1, 1, 0, 11, 11, 0, -1, 0, OP_GE },
- { ".ge." , 4, 1, 1, 1, 0, 11, 11, 0, -1, 0, OP_GE },
- { "==" , 2, 1, 1, 1, 0, 10, 10, 0, -1, 0, OP_EQ },
- { ".eq." , 4, 1, 1, 1, 0, 10, 10, 0, -1, 0, OP_EQ },
- { "!=" , 2, 1, 1, 1, 0, 10, 10, 0, -1, 0, OP_NE },
- { ".ne." , 4, 1, 1, 1, 0, 10, 10, 0, -1, 0, OP_NE },
-
-/* Bit-wise operators. */
- { "&" , 1, 1, 1, 1, 0, 9, 9, 0, -1, 0, OP_BITAND },
- { "^" , 1, 1, 1, 1, 0, 8, 8, 0, -1, 0, OP_BITXOR },
- { "|" , 1, 1, 1, 1, 0, 7, 7, 0, -1, 0, OP_BITOR },
-
-/* Binary boolean operators. */
- { "&&" , 2, 1, 1, 1, 0, 6, 6, 0, -1, 0, OP_AND },
- { ".and." , 5, 1, 1, 1, 0, 6, 6, 0, -1, 0, OP_AND },
- { "^^" , 2, 1, 1, 1, 0, 5, 5, 0, -1, 0, OP_XOR },
- { "||" , 2, 1, 1, 1, 0, 4, 4, 0, -1, 0, OP_OR },
- { ".or." , 4, 1, 1, 1, 0, 4, 4, 0, -1, 0, OP_OR },
- { ".eqv." , 5, 1, 1, 1, 0, 3, 3, 0, -1, 0, OP_EQV },
- { ".neqv." , 6, 1, 1, 1, 0, 3, 3, 0, -1, 0, OP_XOR },
- { ".xor." , 5, 1, 1, 1, 0, 3, 3, 0, -1, 0, OP_XOR },
-
-/* Separators. */
- { "," , 1, 1, 1, 1, 0, 2, 2, 0, 0, 0, OP_NULL },
-
-/* End of symbol data. */
- { NULL , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, OP_NULL }
-};
-
-/* These variables identify indices in the above array which hold
- special symbols used explicitly in the code. */
-static const int symbol_ldcon = 0; /* Load a constant */
-static const int symbol_ldvar = 1; /* Load a variable */
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->GetAttrib_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(MathMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(MathMap,Class_Init)
-#define class_vtab astGLOBAL(MathMap,Class_Vtab)
-#define getattrib_buff astGLOBAL(MathMap,GetAttrib_Buff)
-
-
-
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX2 pthread_mutex_lock( &mutex2 );
-#define UNLOCK_MUTEX2 pthread_mutex_unlock( &mutex2 );
-
-static pthread_mutex_t mutex3 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX3 pthread_mutex_lock( &mutex3 );
-#define UNLOCK_MUTEX3 pthread_mutex_unlock( &mutex3 );
-
-static pthread_mutex_t mutex4 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX4 pthread_mutex_lock( &mutex4 );
-#define UNLOCK_MUTEX4 pthread_mutex_unlock( &mutex4 );
-
-static pthread_mutex_t mutex5 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX5 pthread_mutex_lock( &mutex5 );
-#define UNLOCK_MUTEX5 pthread_mutex_unlock( &mutex5 );
-
-static pthread_mutex_t mutex6 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX6 pthread_mutex_lock( &mutex6 );
-#define UNLOCK_MUTEX6 pthread_mutex_unlock( &mutex6 );
-
-static pthread_mutex_t mutex7 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX7 pthread_mutex_lock( &mutex7 );
-#define UNLOCK_MUTEX7 pthread_mutex_unlock( &mutex7 );
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-static char getattrib_buff[ 51 ];
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstMathMapVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-
-#define LOCK_MUTEX3
-#define UNLOCK_MUTEX3
-
-#define LOCK_MUTEX4
-#define UNLOCK_MUTEX4
-
-#define LOCK_MUTEX5
-#define UNLOCK_MUTEX5
-
-#define LOCK_MUTEX6
-#define UNLOCK_MUTEX6
-
-#define LOCK_MUTEX7
-#define UNLOCK_MUTEX7
-
-#endif
-
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstMathMap *astMathMapId_( int, int, int, const char *[], int, const char *[], const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static int GetObjSize( AstObject *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static double Gauss( Rcontext *, int * );
-static double LogGamma( double, int * );
-static double Poisson( Rcontext *, double, int * );
-static double Rand( Rcontext *, int * );
-static int DefaultSeed( const Rcontext *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetSeed( AstMathMap *, int * );
-static int GetSimpFI( AstMathMap *, int * );
-static int GetSimpIF( AstMathMap *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestSeed( AstMathMap *, int * );
-static int TestSimpFI( AstMathMap *, int * );
-static int TestSimpIF( AstMathMap *, int * );
-static void CleanFunctions( int, const char *[], char ***, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void ClearSeed( AstMathMap *, int * );
-static void ClearSimpFI( AstMathMap *, int * );
-static void ClearSimpIF( AstMathMap *, int * );
-static void CompileExpression( const char *, const char *, const char *, int, const char *[], int **, double **, int *, int * );
-static void CompileMapping( const char *, const char *, int, int, int, const char *[], int, const char *[], int ***, int ***, double ***, double ***, int *, int *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void EvaluateFunction( Rcontext *, int, const double **, const int *, const double *, int, double *, int * );
-static void EvaluationSort( const double [], int, int [], int **, int *, int * );
-static void ExtractExpressions( const char *, const char *, int, const char *[], int, char ***, int * );
-static void ExtractVariables( const char *, const char *, int, const char *[], int, int, int, int, int, char ***, int * );
-static void ParseConstant( const char *, const char *, const char *, int, int *, double *, int * );
-static void ParseName( const char *, int, int *, int * );
-static void ParseVariable( const char *, const char *, const char *, int, int, const char *[], int *, int *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetSeed( AstMathMap *, int, int * );
-static void SetSimpFI( AstMathMap *, int, int * );
-static void SetSimpIF( AstMathMap *, int, int * );
-static void ValidateSymbol( const char *, const char *, const char *, int, int, int *, int **, int **, int *, double **, int * );
-
-/* Member functions. */
-/* ================= */
-static void CleanFunctions( int nfun, const char *fun[], char ***clean, int *status ) {
-/*
-* Name:
-* CleanFunctions
-
-* Purpose:
-* Make a clean copy of a set of functions.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mathmap.h"
-* void CleanFunctions( int nfun, const char *fun[], char ***clean, int *status )
-
-* Class Membership:
-* MathMap member function.
-
-* Description:
-* This function copies an array of strings, eliminating any white space
-* characters and converting to lower case. It is intended for cleaning
-* up arrays of function definitions prior to compilation. The returned
-* copy is stored in dynamically allocated memory.
-
-* Parameters:
-* nfun
-* The number of functions to be cleaned.
-* fun
-* Pointer to an array, with "nfun" elements, of pointers to null
-* terminated strings which contain each of the functions.
-* clean
-* Address in which to return a pointer to an array (with "nfun"
-* elements) of pointers to null terminated strings containing the
-* cleaned functions (i.e. this returns an array of strings).
-*
-* Both the returned array of pointers, and the strings to which they
-* point, will be dynamically allocated and should be freed by the
-* caller (using astFree) when no longer required.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - A NULL value will be returned for "*clean" if this function is
-* invoked with the global error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- char c; /* Character from function string */
- int i; /* Loop counter for characters */
- int ifun; /* Loop counter for functions */
- int nc; /* Count of non-blank characters */
-
-/* Initialise. */
- *clean = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Allocate and initialise an array to hold the returned pointers. */
- MALLOC_POINTER_ARRAY( *clean, char *, nfun )
-
-/* Loop through all the input functions. */
- if ( astOK ) {
- for ( ifun = 0; ifun < nfun; ifun++ ) {
-
-/* Count the number of non-blank characters in each function string. */
- nc = 0;
- for ( i = 0; ( c = fun[ ifun ][ i ] ); i++ ) nc += !isspace( c );
-
-/* Allocate a string long enough to hold the function with all the
- white space removed, storing its pointer in the array allocated
- earlier. Check for errors. */
- ( *clean )[ ifun ] = astMalloc( sizeof( char ) *
- (size_t) ( nc + 1 ) );
- if ( !astOK ) break;
-
-/* Loop to copy the non-blank function characters into the new
- string. */
- nc = 0;
- for ( i = 0; ( c = fun[ ifun ][ i ] ); i++ ) {
- if ( !isspace( c ) ) ( *clean )[ ifun ][ nc++ ] = tolower( c );
- }
-
-/* Null-terminate the result. */
- ( *clean )[ ifun ][ nc ] = '\0';
- }
-
-/* If an error occurred, then free the main pointer array together
- with any strings that have been allocated, resetting the output
- value. */
- if ( !astOK ) {
- FREE_POINTER_ARRAY( *clean, nfun )
- }
- }
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a MathMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mathmap.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* MathMap member function (over-rides the astClearAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* MathMap, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the MathMap.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstMathMap *this; /* Pointer to the MathMap structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the MathMap structure. */
- this = (AstMathMap *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* Seed. */
-/* ----- */
- if ( !strcmp( attrib, "seed" ) ) {
- astClearSeed( this );
-
-/* SimpFI. */
-/* ------- */
- } else if ( !strcmp( attrib, "simpfi" ) ) {
- astClearSimpFI( this );
-
-/* SimpIF. */
-/* ------- */
- } else if ( !strcmp( attrib, "simpif" ) ) {
- astClearSimpIF( this );
-
-/* If the attribute is not recognised, pass it on to the parent method
- for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static void CompileExpression( const char *method, const char *class,
- const char *exprs, int nvar, const char *var[],
- int **code, double **con, int *stacksize, int *status ) {
-/*
-* Name:
-* CompileExpression
-
-* Purpose:
-* Compile a mathematical expression.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mathmap.h"
-* void CompileExpression( const char *method, const char *class,
-* const char *exprs, int nvar, const char *var[],
-* int **code, double **con, int *stacksize )
-
-* Class Membership:
-* MathMap member function.
-
-* Description:
-* This function checks and compiles a mathematical expression. It
-* produces a sequence of operation codes (opcodes) and a set of
-* numerical constants which may subsequently be used to evaluate the
-* expression on a push-down stack.
-
-* Parameters:
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function.
-* This method name is used solely for constructing error messages.
-* class
-* Pointer to a constant null-terminated character string containing the
-* class name of the Object being processed. This name is used solely
-* for constructing error messages.
-* exprs
-* Pointer to a null-terminated string containing the expression
-* to be compiled. This is case sensitive and should contain no white
-* space.
-* nvar
-* The number of variable names defined for use in the expression.
-* var
-* An array of pointers (with "nvar" elements) to null-terminated
-* strings. Each of these should contain a variable name which may
-* appear in the expression. These strings are case sensitive and
-* should contain no white space.
-* code
-* Address of a pointer which will be set to point at a dynamically
-* allocated array of int containing the set of opcodes (cast to int)
-* produced by this function. The first element of this array will
-* contain a count of the number of opcodes which follow.
-*
-* The allocated space must be freed by the caller (using astFree) when
-* no longer required.
-* con
-* Address of a pointer which will be set to point at a dynamically
-* allocated array of double containing the set of constants
-* produced by this function (this may be NULL if no constants are
-* produced).
-*
-* The allocated space must be freed by the caller (using astFree) when
-* no longer required.
-* stacksize
-* Pointer to an int in which to return the size of the push-down stack
-* required to evaluate the expression using the returned opcodes and
-* constants.
-
-* Algorithm:
-* The function passes through the input expression searching for
-* symbols. It looks for standard symbols (arithmetic operators,
-* parentheses, function calls and delimiters) in the next part of the
-* expression to be parsed, using identification information stored in
-* the static "symbol" array. It ignores certain symbols, according to
-* whether they appear to be operators or operands. The choice depends on
-* what the previous symbol was; for instance, two operators may not
-* occur in succession. Unary +/- operators are also ignored in
-* situations where they are not permitted.
-*
-* If a standard symbol is found, it is passed to the ValidateSymbol
-* function, which keeps track of the current level of parenthesis in the
-* expression and of the number of arguments supplied to any (possibly
-* nested) function calls. This function then accepts or rejects the
-* symbol according to whether it is valid within the current context. An
-* error is reported if it is rejected.
-*
-* If the part of the expression currently being parsed did not contain a
-* standard symbol, an attempt is made to parse it first as a constant,
-* then as a variable name. If either of these succeeds, an appropriate
-* symbol number is added to the list of symbols identified so far, and a
-* value is added to the list of constants - this is either the value of
-* the constant itself, or the identification number of the variable. If
-* the expression cannot be parsed, an error is reported.
-*
-* When the entire expression has been analysed as a sequence of symbols
-* (and associated constants), the EvaluationSort function is
-* invoked. This sorts the symbols into evaluation order, which is the
-* order in which the associated operations must be performed on a
-* push-down arithmetic stack to evaluate the expression. This routine
-* also substitutes operation codes (defined in the "Oper" enum) for the
-* symbol numbers and calculates the size of evaluation stack which will
-* be required.
-
-* Notes:
-* - A value of NULL will be returned for the "*code" and "*con" pointers
-* and a value of zero will be returned for the "*stacksize" value if this
-* function is invoked with the global error status set, or if it should
-* fail for any reason.
-*/
-
-/* Local Variables: */
- double c; /* Value of parsed constant */
- int *argcount; /* Array of argument count information */
- int *opensym; /* Array of opening parenthesis information */
- int *symlist; /* Array of symbol indices */
- int found; /* Standard symbol identified? */
- int iend; /* Ending index in the expression string */
- int istart; /* Staring index in the expression string */
- int isym; /* Loop counter for symbols */
- int ivar; /* Index of variable name */
- int lpar; /* Parenthesis level */
- int ncon; /* Number of constants generated */
- int nsym; /* Number of symbols identified */
- int opernext; /* Next symbol an operator (from left)? */
- int size; /* Size of symbol matched */
- int sym; /* Index of symbol in static "symbol" array */
- int unarynext; /* Next symbol may be unary +/- ? */
-
-/* Initialise. */
- *code = NULL;
- *con = NULL;
- *stacksize = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Further initialisation. */
- argcount = NULL;
- lpar = 0;
- ncon = 0;
- nsym = 0;
- opensym = NULL;
- symlist = NULL;
- sym = 0;
- ivar = 0;
-
-/* The first symbol to be encountered must not look like an operator
- from the left. It may be a unary + or - operator. */
- opernext = 0;
- unarynext = 1;
-
-/* Search through the expression to classify each symbol which appears
- in it. Stop when there are no more input characters or an error is
- detected. */
- istart = 0;
- for ( istart = 0; astOK && exprs[ istart ]; istart = iend + 1 ) {
-
-/* Compare each of the symbols in the symbol data with the next
- section of the expression, looking for the longest symbol text which
- will match. Stop if a NULL "text" value is found, which acts as the
- end flag. */
- found = 0;
- size = 0;
- for ( isym = 0; symbol[ isym ].text; isym++ ) {
-
-/* Only consider symbols which have text associated with them and
- which look like operators or operands from the left, according to the
- setting of the "opernext" flag. Thus, if an operator or operand is
- missing from the input expression, the next symbol will not be
- identified, because it will be of the wrong type. Also exclude unary
- +/- operators if they are out of context. */
- if ( symbol[ isym ].size &&
- ( symbol[ isym ].operleft == opernext ) &&
- ( !symbol[ isym ].unaryoper || unarynext ) ) {
-
-/* Test if the text of the symbol matches the expression at the
- current position. If so, note that a match has been found. */
- if ( !strncmp( exprs + istart, symbol[ isym ].text,
- (size_t) symbol[ isym ].size ) ) {
- found = 1;
-
-/* If this symbol matches more characters than any previous symbol,
- then store the symbol's index and note its size. */
- if ( symbol[ isym ].size > size ) {
- sym = isym;
- size = symbol[ isym ].size;
-
-/* Calculate the index of the last symbol character in the expression
- string. */
- iend = istart + size - 1;
- }
- }
- }
- }
-
-/* If the symbol was identified as one of the standard symbols, then
- validate it, updating the parenthesis level and argument count
- information at the same time. */
- if ( found ) {
- ValidateSymbol( method, class, exprs, iend, sym, &lpar, &argcount,
- &opensym, &ncon, con, status );
-
-/* If it was not one of the standard symbols, then check if the next
- symbol was expected to be an operator. If so, then there is a missing
- operator, so report an error. */
- } else {
- if ( opernext ) {
- astError( AST__MIOPR,
- "%s(%s): Missing or invalid operator in the expression "
- "\"%.*s\".", status,
- method, class, istart + 1, exprs );
-
-/* If the next symbol was expected to be an operand, then it may be a
- constant, so try to parse it as one. */
- } else {
- ParseConstant( method, class, exprs, istart, &iend, &c, status );
- if ( astOK ) {
-
-/* If successful, set the symbol number to "symbol_ldcon" (load
- constant) and extend the "*con" array to accommodate a new
- constant. Check for errors. */
- if ( iend >= istart ) {
- sym = symbol_ldcon;
- *con = astGrow( *con, ncon + 1, sizeof( double ) );
- if ( astOK ) {
-
-/* Append the constant to the "*con" array. */
- ( *con )[ ncon++ ] = c;
- }
-
-/* If the symbol did not parse as a constant, then it may be a
- variable name, so try to parse it as one. */
- } else {
- ParseVariable( method, class, exprs, istart, nvar, var,
- &ivar, &iend, status );
- if ( astOK ) {
-
-/* If successful, set the symbol to "symbol_ldvar" (load variable) and
- extend the "*con" array to accommodate a new constant. Check for
- errors. */
- if ( ivar != -1 ) {
- sym = symbol_ldvar;
- *con = astGrow( *con, ncon + 1, sizeof( double ) );
- if ( astOK ) {
-
-/* Append the variable identification number as a constant to the
- "*con" array. */
- ( *con )[ ncon++ ] = (double) ivar;
- }
-
-/* If the expression did not parse as a variable name, then there is a
- missing operand in the expression, so report an error. */
- } else {
- astError( AST__MIOPA,
- "%s(%s): Missing or invalid operand in the "
- "expression \"%.*s\".", status,
- method, class, istart + 1, exprs );
- }
- }
- }
- }
- }
- }
-
-/* If there has been no error, then the next symbol in the input
- expression has been identified and is valid. */
- if ( astOK ) {
-
-/* Decide whether the next symbol should look like an operator or an
- operand from the left. This is determined by the nature of the symbol
- just identified (seen from the right) - two operands or two operators
- cannot be adjacent. */
- opernext = !symbol[ sym ].operright;
-
-/* Also decide whether the next symbol may be a unary +/- operator,
- according to the "unarynext" symbol data entry for the symbol just
- identified. */
- unarynext = symbol[ sym ].unarynext;
-
-/* Extend the "symlist" array to accommodate the symbol just
- identified. Check for errors. */
- symlist = astGrow( symlist, nsym + 1, sizeof( int ) );
- if ( astOK ) {
-
-/* Append the symbol's index to the end of this list. */
- symlist[ nsym++ ] = sym;
- }
- }
- }
-
-/* If there has been no error, check the final context after
- identifying all the symbols... */
- if ( astOK ) {
-
-/* If an operand is still expected, then there is an unsatisfied
- operator on the end of the expression, so report an error. */
- if ( !opernext ) {
- astError( AST__MIOPA,
- "%s(%s): Missing or invalid operand in the expression "
- "\"%s\".", status,
- method, class, exprs );
-
-/* If the final parenthesis level is positive, then there is a missing
- right parenthesis, so report an error. */
- } else if ( lpar > 0 ) {
- astError( AST__MRPAR,
- "%s(%s): Missing right parenthesis in the expression "
- "\"%s\".", status,
- method, class, exprs );
- }
- }
-
-/* Sort the symbols into evaluation order to produce output opcodes. */
- EvaluationSort( *con, nsym, symlist, code, stacksize, status );
-
-/* Free any memory used as workspace. */
- if ( argcount ) argcount = astFree( argcount );
- if ( opensym ) opensym = astFree( opensym );
- if ( symlist ) symlist = astFree( symlist );
-
-/* If OK, re-allocate the "*con" array to have the correct size (since
- astGrow may have over-allocated space). */
- if ( astOK && *con ) {
- *con = astRealloc( *con, sizeof( double ) * (size_t) ncon );
- }
-
-/* If an error occurred, free any allocated memory and reset the
- output values. */
- if ( !astOK ) {
- *code = astFree( *code );
- *con = astFree( *con );
- *stacksize = 0;
- }
-}
-
-static void CompileMapping( const char *method, const char *class,
- int nin, int nout,
- int nfwd, const char *fwdfun[],
- int ninv, const char *invfun[],
- int ***fwdcode, int ***invcode,
- double ***fwdcon, double ***invcon,
- int *fwdstack, int *invstack, int *status ) {
-/*
-* Name:
-* CompileMapping
-
-* Purpose:
-* Compile the transformation functions for a MathMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mathmap.h"
-* void CompileMapping( const char *method, const char *class,
-* int nin, int nout,
-* int nfwd, const char *fwdfun[],
-* int ninv, const char *invfun[],
-* int ***fwdcode, int ***invcode,
-* double ***fwdcon, double ***invcon,
-* int *fwdstack, int *invstack, int *status )
-
-* Class Membership:
-* MathMap member function.
-
-* Description:
-* This function checks and compiles the transformation functions required
-* to create a MathMap. It produces sequences of operation codes (opcodes)
-* and numerical constants which may subsequently be used to evaluate the
-* functions on a push-down stack.
-
-* Parameters:
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function.
-* This method name is used solely for constructing error messages.
-* class
-* Pointer to a constant null-terminated character string containing the
-* class name of the Object being processed. This name is used solely
-* for constructing error messages.
-* nin
-* Number of input variables for the MathMap.
-* nout
-* Number of output variables for the MathMap.
-* nfwd
-* The number of forward transformation functions being supplied.
-* This must be at least equal to "nout".
-* fwdfun
-* Pointer to an array, with "nfwd" elements, of pointers to null
-* terminated strings which contain each of the forward transformation
-* functions. These must be in lower case and should contain no white
-* space.
-* ninv
-* The number of inverse transformation functions being supplied.
-* This must be at least equal to "nin".
-* invfun
-* Pointer to an array, with "ninv" elements, of pointers to null
-* terminated strings which contain each of the inverse transformation
-* functions. These must be in lower case and should contain no white
-* space.
-* fwdcode
-* Address in which to return a pointer to an array (with "nfwd"
-* elements) of pointers to arrays of int containing the set of opcodes
-* (cast to int) for each forward transformation function. The number
-* of opcodes produced for each function is given by the first element
-* of the opcode array.
-*
-* Both the returned array of pointers, and the arrays of int to which
-* they point, will be stored in dynamically allocated memory and should
-* be freed by the caller (using astFree) when no longer required.
-*
-* If the right hand sides (including the "=" sign) of all the supplied
-* functions are absent, then this indicates an undefined transformation
-* and the returned pointer value will be NULL. An error results if
-* an "=" sign is present but no expression follows it.
-* invcode
-* Address in which to return a pointer to an array (with "ninv"
-* elements) of pointers to arrays of int containing the set of opcodes
-* (cast to int) for each inverse transformation function. The number
-* of opcodes produced for each function is given by the first element
-* of the opcode array.
-*
-* Both the returned array of pointers, and the arrays of int to which
-* they point, will be stored in dynamically allocated memory and should
-* be freed by the caller (using astFree) when no longer required.
-*
-* If the right hand sides (including the "=" sign) of all the supplied
-* functions are absent, then this indicates an undefined transformation
-* and the returned pointer value will be NULL. An error results if
-* an "=" sign is present but no expression follows it.
-* fwdcon
-* Address in which to return a pointer to an array (with "nfwd"
-* elements) of pointers to arrays of double containing the set of
-* constants for each forward transformation function.
-*
-* Both the returned array of pointers, and the arrays of double to which
-* they point, will be stored in dynamically allocated memory and should
-* be freed by the caller (using astFree) when no longer required. Note
-* that any of the pointers to the arrays of double may be NULL if no
-* constants are associated with a particular function.
-*
-* If the forward transformation is undefined, then the returned pointer
-* value will be NULL.
-* invcon
-* Address in which to return a pointer to an array (with "ninv"
-* elements) of pointers to arrays of double containing the set of
-* constants for each inverse transformation function.
-*
-* Both the returned array of pointers, and the arrays of double to which
-* they point, will be stored in dynamically allocated memory and should
-* be freed by the caller (using astFree) when no longer required. Note
-* that any of the pointers to the arrays of double may be NULL if no
-* constants are associated with a particular function.
-*
-* If the inverse transformation is undefined, then the returned pointer
-* value will be NULL.
-* fwdstack
-* Pointer to an int in which to return the size of the push-down stack
-* required to evaluate the forward transformation functions.
-* invstack
-* Pointer to an int in which to return the size of the push-down stack
-* required to evaluate the inverse transformation functions.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - A value of NULL will be returned for the "*fwdcode", "*invcode",
-* "*fwdcon" and "*invcon" pointers and a value of zero will be returned
-* for the "*fwdstack" and "*invstack" values if this function is invoked
-* with the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- char **exprs; /* Pointer to array of expressions */
- char **var; /* Pointer to array of variable names */
- const char **strings; /* Pointer to temporary array of strings */
- int ifun; /* Loop counter for functions */
- int nvar; /* Number of variables to extract */
- int stacksize; /* Required stack size */
-
-/* Initialise. */
- *fwdcode = NULL;
- *invcode = NULL;
- *fwdcon = NULL;
- *invcon = NULL;
- *fwdstack = 0;
- *invstack = 0;
- nvar = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Further initialisation. */
- exprs = NULL;
- var = NULL;
-
-/* Compile the forward transformation. */
-/* ----------------------------------- */
-/* Allocate space for an array of pointers to the functions from which
- we will extract variable names. */
- strings = astMalloc( sizeof( char * ) * (size_t) ( nin + nfwd ) );
-
-/* Fill the first elements of this array with pointers to the inverse
- transformation functions ("nin" in number) which yield the final input
- values. These will have the names of the input variables on their left
- hand sides. */
- if ( astOK ) {
- nvar = 0;
- for ( ifun = ninv - nin; ifun < ninv; ifun++ ) {
- strings[ nvar++ ] = invfun[ ifun ];
- }
-
-/* Fill the remaining elements of the array with pointers to the
- forward transformation functions. These will have the names of any
- intermediate variables plus the final output variables on their left
- hand sides. */
- for ( ifun = 0; ifun < nfwd; ifun++ ) strings[ nvar++ ] = fwdfun[ ifun ];
-
-/* Extract the variable names from the left hand sides of these
- functions and check them for validity and absence of duplication. */
- ExtractVariables( method, class, nvar, strings, nin, nout, nfwd, ninv, 1,
- &var, status );
- }
-
-/* Free the temporary array of string pointers. */
- strings = astFree( strings );
-
-/* Extract the expressions from the right hand sides of the forward
- transformation functions. */
- ExtractExpressions( method, class, nfwd, fwdfun, 1, &exprs, status );
-
-/* If OK, and the forward transformation is defined, then allocate and
- initialise space for an array of pointers to the opcodes for each
- expression and, similarly, for the constants for each expression. */
- if ( astOK && exprs ) {
- MALLOC_POINTER_ARRAY( *fwdcode, int *, nfwd )
- MALLOC_POINTER_ARRAY( *fwdcon, double *, nfwd )
-
-/* If OK, loop to compile each of the expressions, storing pointers to
- the resulting opcodes and constants in the arrays allocated above. On
- each loop, we make progressively more of the variable names in "var"
- visible to the compilation function. This ensures that each expression
- can only use variables which have been defined earlier. */
- if ( astOK ) {
- for ( ifun = 0; ifun < nfwd; ifun++ ) {
- CompileExpression( method, class, exprs[ ifun ],
- nin + ifun, (const char **) var,
- &( *fwdcode )[ ifun ], &( *fwdcon )[ ifun ],
- &stacksize, status );
-
-/* If an error occurs, then report contextual information and quit. */
- if ( !astOK ) {
- astError( astStatus,
- "Error in forward transformation function %d.", status,
- ifun + 1 );
- break;
- }
-
-/* If OK, calculate the maximum evaluation stack size required by any
- of the expressions. */
- *fwdstack = ( *fwdstack > stacksize ) ? *fwdstack : stacksize;
- }
- }
- }
-
-/* Free the memory containing the extracted expressions and variables. */
- FREE_POINTER_ARRAY( exprs, nfwd )
- FREE_POINTER_ARRAY( var, nvar )
-
-/* Compile the inverse transformation. */
-/* ----------------------------------- */
-/* Allocate space for an array of pointers to the functions from which
- we will extract variable names. */
- strings = astMalloc( sizeof( char * ) * (size_t) ( nout + ninv ) );
-
-/* Fill the first elements of this array with pointers to the forward
- transformation functions ("nout" in number) which yield the final
- output values. These will have the names of the output variables on
- their left hand sides. */
- if ( astOK ) {
- nvar = 0;
- for ( ifun = nfwd - nout; ifun < nfwd; ifun++ ) {
- strings[ nvar++ ] = fwdfun[ ifun ];
- }
-
-/* Fill the remaining elements of the array with pointers to the
- inverse transformation functions. These will have the names of any
- intermediate variables plus the final input variables on their left
- hand sides. */
- for ( ifun = 0; ifun < ninv; ifun++ ) strings[ nvar++ ] = invfun[ ifun ];
-
-/* Extract the variable names from the left hand sides of these
- functions and check them for validity and absence of duplication. */
- ExtractVariables( method, class, nvar, strings, nin, nout, nfwd, ninv, 0,
- &var, status );
- }
-
-/* Free the temporary array of string pointers. */
- strings = astFree( strings );
-
-/* Extract the expressions from the right hand sides of the inverse
- transformation functions. */
- ExtractExpressions( method, class, ninv, invfun, 0, &exprs, status );
-
-/* If OK, and the forward transformation is defined, then allocate and
- initialise space for an array of pointers to the opcodes for each
- expression and, similarly, for the constants for each expression. */
- if ( astOK && exprs ) {
- MALLOC_POINTER_ARRAY( *invcode, int *, ninv )
- MALLOC_POINTER_ARRAY( *invcon, double *, ninv )
-
-/* If OK, loop to compile each of the expressions, storing pointers to
- the resulting opcodes and constants in the arrays allocated above. On
- each loop, we make progressively more of the variable names in "var"
- visible to the compilation function. This ensures that each expression
- can only use variables which have been defined earlier. */
- if ( astOK ) {
- for ( ifun = 0; ifun < ninv; ifun++ ) {
- CompileExpression( method, class, exprs[ ifun ],
- nout + ifun, (const char **) var,
- &( *invcode )[ ifun ], &( *invcon )[ ifun ],
- &stacksize, status );
-
-/* If an error occurs, then report contextual information and quit. */
- if ( !astOK ) {
- astError( astStatus,
- "Error in inverse transformation function %d.", status,
- ifun + 1 );
- break;
- }
-
-/* If OK, calculate the maximum evaluation stack size required by any
- of the expressions. */
- *invstack = ( *invstack > stacksize ) ? *invstack : stacksize;
- }
- }
- }
-
-/* Free the memory containing the extracted expressions and variables. */
- FREE_POINTER_ARRAY( exprs, ninv )
- FREE_POINTER_ARRAY( var, nvar )
-
-/* If an error occurred, then free all remaining allocated memory and
- reset the output values. */
- if ( !astOK ) {
- FREE_POINTER_ARRAY( *fwdcode, nfwd )
- FREE_POINTER_ARRAY( *invcode, ninv )
- FREE_POINTER_ARRAY( *fwdcon, nfwd )
- FREE_POINTER_ARRAY( *invcon, ninv )
- *fwdstack = 0;
- *invstack = 0;
- }
-}
-
-static int DefaultSeed( const Rcontext *context, int *status ) {
-/*
-* Name:
-* DefaultSeed
-
-* Purpose:
-* Generate an unpredictable seed for a random number generator.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mathmap.h"
-* int DefaultSeed( Rcontext *context, int *status )
-
-* Class Membership:
-* MathMap member function.
-
-* Description:
-* On each invocation this function returns an integer value which is
-* highly unpredictable. This value may be used as a default seed for the
-* random number generator associated with a MathMap, so that it
-* generates a different sequence on each occasion.
-
-* Parameters:
-* context
-* Pointer to the random number generator context associated with
-* the MathMap.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The unpredictable integer.
-
-* Notes:
-* - This function does not perform error checking and will execute even
-* if the global error status is set.
-*/
-
-/* Local Constants: */
- const int nwarm = 5; /* Number of warm-up iterations */
- const long int a = 8121L; /* Constants for random number generator... */
- const long int c = 28411L;
- const long int m = 134456L;
-
-/* Local Variables; */
- int iwarm; /* Loop counter for warm-up iterations */
- static long init = 0; /* Local initialisation performed? */
- static long int rand; /* Local random integer */
- unsigned long int bits; /* Bit pattern for producing result */
-
-/* On the first invocation, initialise a local random number generator
- to a value derived by combining bit patterns obtained from the system
- clock and the processor time used. The result needs to be positive and
- lie in the range 0 to "m-1". */
- LOCK_MUTEX5
- if ( !init ) {
- rand = (long int) ( ( (unsigned long int) time( NULL ) ^
- (unsigned long int) clock() ) %
- (unsigned long int) m );
-
-/* These values will typically only change in their least significant
- bits between programs run successively, but by using the bit pattern
- as a seed, we ensure that these differences are rapidly propagated to
- other bits. To hasten this process, we "warm up" the local generator
- with a few iterations. This is a quick and dirty generator using
- constants from Press et al. (Numerical recipes). */
- for ( iwarm = 0; iwarm < nwarm; iwarm++ ) {
- rand = ( rand * a + c ) % m;
- }
-
-/* Note that this initialisation has been performed. */
- init = 1;
- }
- UNLOCK_MUTEX5
-
-/* Generate a new bit pattern from the system time. Apart from the
- first invocation, this will be a different time to that used above. */
- bits = (unsigned long int) time( NULL );
-
-/* Mask in a pattern derived from the CPU time used. */
- bits ^= (unsigned long int) clock();
-
-/* The system time may change quite slowly (e.g. every second), so
- also mask in the address of the random number generator context
- supplied. This makes the seed depend on which MathMap is in use. */
- bits ^= (unsigned long int) context;
-
-/* Now mask in the last random integer produced by the random number
- generator whose context has been supplied. This makes the seed depend
- on the MathMap's past use of random numbers. */
- bits ^= (unsigned long int) context->random_int;
-
-/* Finally, in order to produce different seeds when this function is
- invoked twice in rapid succession on the same object (with no
- intermediate processing), we also mask in a pseudo-random value
- generated here. Generate the next local random integer. */
- rand = ( rand * a + c ) % m;
-
-/* We then scale this value to give an integer in the range 0 to
- ULONG_MAX and mask the corresponding bit pattern into our seed. */
- bits ^= (unsigned long int) ( ( (double) rand / (double) ( m - 1UL ) ) *
- ( ( (double) ULONG_MAX + 1.0 ) *
- ( 1.0 - DBL_EPSILON ) ) );
-
-/* Return the integer value of the seed (which may involve discarding
- some unwanted bits). */
- return (int) bits;
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two MathMaps are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* MathMap member function (over-rides the astEqual protected
-* method inherited from the Object class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two MathMaps are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Object (a MathMap).
-* that
-* Pointer to the second Object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the MathMaps are equivalent, zero otherwise.
-
-* Notes:
-* - The two MathMaps are considered equivalent if the combination of
-* the first in series with the inverse of the second simplifies to a
-* UnitMap.
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstMathMap *that; /* Pointer to the second MathMap structure */
- AstMathMap *this; /* Pointer to the first MathMap structure */
- double **that_con; /* Lists of constants from "that" */
- double **this_con; /* Lists of constants from "this" */
- int **that_code; /* Lists of opcodes from "that" */
- int **this_code; /* Lists of opcodes from "this" */
- int code; /* Opcode value */
- int icode; /* Opcode index */
- int icon; /* Constant index */
- int ifun; /* Function index */
- int ncode; /* No. of opcodes for current "this" function */
- int ncode_that; /* No. of opcodes for current "that" function */
- int nin; /* Number of inputs */
- int nout; /* Number of outputs */
- int pass; /* Check fwd or inv */
- int result; /* Result value to return */
- int that_nfun; /* Number of functions from "that" */
- int this_nfun; /* Number of functions from "this" */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain pointers to the two MathMap structures. */
- this = (AstMathMap *) this_object;
- that = (AstMathMap *) that_object;
-
-/* Check the second object is a MathMap. We know the first is a
- MathMap since we have arrived at this implementation of the virtual
- function. */
- if( astIsAMathMap( that ) ) {
-
-/* Check they have the same number of inputs and outputs */
- nin = astGetNin( this );
- nout = astGetNout( this );
- if( astGetNout( that ) == nout && astGetNin( that ) == nin ) {
-
-/* Assume equality. */
- result = 1;
-
-/* The first pass through this next loop compares forward functions, and
- the second pass compares inverse functions. */
- for( pass = 0; pass < 2 && result; pass++ ) {
-
-/* On the first pass, get pointers to the lists of opcodes and constants for
- the effective forward transformations (taking into account the value
- of the Invert attribute), together with the number of such functions. */
- if( pass == 0 ) {
- if( !astGetInvert( this ) ) {
- this_code = this->fwdcode;
- this_con = this->fwdcon;
- this_nfun = this->nfwd;
- } else {
- this_code = this->invcode;
- this_con = this->invcon;
- this_nfun = this->ninv;
- }
-
- if( !astGetInvert( that ) ) {
- that_code = that->fwdcode;
- that_con = that->fwdcon;
- that_nfun = that->nfwd;
- } else {
- that_code = that->invcode;
- that_con = that->invcon;
- that_nfun = that->ninv;
- }
-
-/* On the second pass, get pointers to the lists of opcodes and constants for
- the effective inverse transformations, together with the number of such
- functions. */
- } else {
-
- if( astGetInvert( this ) ) {
- this_code = this->fwdcode;
- this_con = this->fwdcon;
- this_nfun = this->nfwd;
- } else {
- this_code = this->invcode;
- this_con = this->invcon;
- this_nfun = this->ninv;
- }
-
- if( astGetInvert( that ) ) {
- that_code = that->fwdcode;
- that_con = that->fwdcon;
- that_nfun = that->nfwd;
- } else {
- that_code = that->invcode;
- that_con = that->invcon;
- that_nfun = that->ninv;
- }
- }
-
-/* Check that "this" and "that" have the same number of functions */
- if( that_nfun != this_nfun ) result = 0;
-
-/* Loop round each function. */
- for( ifun = 0; ifun < this_nfun && result; ifun++ ) {
-
-/* The first element in the opcode array is the number of subsequent
- opcodes. Obtain and compare these counts. */
- ncode = this_code ? this_code[ ifun ][ 0 ] : 0;
- ncode_that = that_code ? that_code[ ifun ][ 0 ] : 0;
- if( ncode != ncode_that ) result = 0;
-
-/* Compare the following opcodes. Some opcodes consume constants from the
- list of constants associated with the MathMap. Compare the constants
- for such opcodes. */
- icon = 0;
- for( icode = 0; icode < ncode && result; icode++ ){
- code = this_code[ ifun ][ icode ];
- if( that_code[ ifun ][ icode ] != code ) {
- result = 0;
-
- } else if( code == OP_LDCON ||
- code == OP_LDVAR ||
- code == OP_MAX ||
- code == OP_MIN ) {
-
- if( this_con[ ifun ][ icon ] !=
- that_con[ ifun ][ icon ] ) {
- result = 0;
- } else {
- icon++;
- }
- }
- }
- }
- }
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static void EvaluateFunction( Rcontext *rcontext, int npoint,
- const double **ptr_in, const int *code,
- const double *con, int stacksize, double *out, int *status ) {
-/*
-* Name:
-* EvaluateFunction
-
-* Purpose:
-* Evaluate a compiled function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mathmap.h"
-* void EvaluateFunction( Rcontext *rcontext, int npoint,
-* const double **ptr_in, const int *code,
-* const double *con, int stacksize, double *out, int *status )
-
-* Class Membership:
-* MathMap member function.
-
-* Description:
-* This function implements a "virtual machine" which executes operations
-* on an arithmetic stack in order to evaluate transformation functions.
-* Each operation is specified by an input operation code (opcode) and
-* results in the execution of a vector operation on a stack. The final
-* result, after executing all the supplied opcodes, is returned as a
-* vector.
-*
-* This function detects arithmetic errors (such as overflow and division
-* by zero) and propagates any "bad" coordinate values, including those
-* present in the input, to the output.
-
-* Parameters:
-* npoint
-* The number of points to be transformd (i.e. the size of the vector
-* of values on which operations are to be performed).
-* ptr_in
-* Pointer to an array of pointers to arrays of double (with "npoint"
-* elements). These arrays should contain the input coordinate values,
-* such that coordinate number "coord" for point number "point" can be
-* found in "ptr_in[coord][point]".
-* code
-* Pointer to an array of int containing the set of opcodes (cast to int)
-* for the operations to be performed. The first element of this array
-* should contain a count of the number of opcodes which follow.
-* con
-* Pointer to an array of double containing the set of constants required
-* to evaluate the function (this may be NULL if no constants are
-* required).
-* stacksize
-* The size of the stack required to evaluate the expression using the
-* opcodes and constants supplied. This value should be calculated during
-* expression compilation.
-* out
-* Pointer to an array of double (with "npoint" elements) in which to
-* return the vector of result values.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
- const int bits = /* Number of bits in an unsigned long */
- sizeof( unsigned long ) * CHAR_BIT;
- const double eps = /* Smallest number subtractable from 2.0 */
- 2.0 * DBL_EPSILON;
- const double scale = /* 2.0 raised to the power "bits" */
- ldexp( 1.0, bits );
- const double scale1 = /* 2.0 raised to the power "bits-1" */
- scale * 0.5;
- const double rscale = /* Reciprocal scale factor */
- 1.0 / scale;
- const double rscale1 = /* Reciprocal initial scale factor */
- 1.0 / scale1;
- const int nblock = /* Number of blocks of bits to process */
- ( sizeof( double ) + sizeof( unsigned long ) - 1 ) /
- sizeof( unsigned long );
- const unsigned long signbit = /* Mask for extracting sign bit */
- 1UL << ( bits - 1 );
-
-/* Local Variables: */
- double **stack; /* Array of pointers to stack elements */
- double *work; /* Pointer to stack workspace */
- double *xv1; /* Pointer to first argument vector */
- double *xv2; /* Pointer to second argument vector */
- double *xv3; /* Pointer to third argument vector */
- double *xv; /* Pointer to sole argument vector */
- double *y; /* Pointer to result */
- double *yv; /* Pointer to result vector */
- double abs1; /* Absolute value (temporary variable) */
- double abs2; /* Absolute value (temporary variable) */
- double frac1; /* First (maybe normalised) fraction */
- double frac2; /* Second (maybe normalised) fraction */
- double frac; /* Sole normalised fraction */
- double newexp; /* New power of 2 exponent value */
- double ran; /* Random number */
- double result; /* Function result value */
- double unscale; /* Factor for removing scaling */
- double value; /* Value to be assigned to stack vector */
- double x1; /* First argument value */
- double x2; /* Second argument value */
- double x3; /* Third argument value */
- double x; /* Sole argument value */
- int expon1; /* First power of 2 exponent */
- int expon2; /* Second power of 2 exponent */
- int expon; /* Sole power of 2 exponent */
- int iarg; /* Loop counter for arguments */
- int iblock; /* Loop counter for blocks of bits */
- int icode; /* Opcode value */
- int icon; /* Counter for number of constants used */
- int istk; /* Loop counter for stack elements */
- int ivar; /* Input variable number */
- int narg; /* Number of function arguments */
- int ncode; /* Number of opcodes to process */
- int point; /* Loop counter for stack vector elements */
- int sign; /* Argument is non-negative? */
- int tos; /* Top of stack index */
- static double d2r; /* Degrees to radians conversion factor */
- static double log2; /* Natural logarithm of 2.0 */
- static double pi; /* Value of PI */
- static double r2d; /* Radians to degrees conversion factor */
- static double rsafe_sq; /* Reciprocal of "safe_sq" */
- static double safe_sq; /* Huge value that can safely be squared */
- static int init = 0; /* Initialisation performed? */
- unsigned long b1; /* Block of bits from first argument */
- unsigned long b2; /* Block of bits from second argument */
- unsigned long b; /* Block of bits for result */
- unsigned long neg; /* Result is negative? (sign bit) */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* If this is the first invocation of this function, then initialise
- constant values. */
- LOCK_MUTEX2
- if ( !init ) {
-
-/* Trigonometrical conversion factors. */
- pi = acos( -1.0 );
- r2d = 180.0 / pi;
- d2r = pi / 180.0;
-
-/* Natural logarithm of 2.0. */
- log2 = log( 2.0 );
-
-/* This value must be safe to square without producing overflow, yet
- large enough that adding or subtracting 1.0 from the square makes no
- difference. We also need its reciprocal. */
- safe_sq = 0.9 * sqrt( DBL_MAX );
- rsafe_sq = 1.0 / safe_sq;
-
-/* Note that initialisation has been performed. */
- init = 1;
- }
- UNLOCK_MUTEX2
-
-/* Allocate space for an array of pointers to elements of the
- workspace stack (each stack element being an array of double). */
- stack = astMalloc( sizeof( double * ) * (size_t) stacksize );
-
-/* Allocate space for the stack itself. */
- work = astMalloc( sizeof( double ) *
- (size_t) ( npoint * ( stacksize - 1 ) ) );
-
-/* If OK, then initialise the stack pointer array to identify the
- start of each vector on the stack. The first element points at the
- output array (in which the result will be accumulated), while other
- elements point at successive vectors within the workspace allocated
- above. */
- if ( astOK ) {
- stack[ 0 ] = out;
- for ( istk = 1; istk < stacksize; istk++ ) {
- stack[ istk ] = work + ( istk - 1 ) * npoint;
- }
-
-/* Define stack operations. */
-/* ======================== */
-/* We now define a set of macros for performing vector operations on
- elements of the stack. Each is in the form of a "case" block for
- execution in response to the appropriate operation code (opcode). */
-
-/* Zero-argument operation. */
-/* ------------------------ */
-/* This macro performs a zero-argument operation, which results in the
- insertion of a new vector on to the stack. */
-#define ARG_0(oper,setup,function) \
-\
-/* Test for the required opcode value. */ \
- case oper: \
-\
-/* Perform any required initialisation. */ \
- {setup;} \
-\
-/* Increment the top of stack index and obtain a pointer to the new stack \
- element (vector). */ \
- yv = stack[ ++tos ]; \
-\
-/* Loop to access each vector element, obtaining a pointer to it. */ \
- for ( point = 0; point < npoint; point++ ) { \
- y = yv + point; \
-\
-/* Perform the processing, which results in assignment to this element. */ \
- {function;} \
- } \
-\
-/* Break out of the "case" block. */ \
- break;
-
-/* One-argument operation. */
-/* ----------------------- */
-/* This macro performs a one-argument operation, which processes the
- top stack element without changing the stack size. */
-#define ARG_1(oper,function) \
-\
-/* Test for the required opcode value. */ \
- case oper: \
-\
-/* Obtain a pointer to the top stack element (vector). */ \
- xv = stack[ tos ]; \
-\
-/* Loop to access each vector element, obtaining its value and \
- checking that it is not bad. */ \
- for ( point = 0; point < npoint; point++ ) { \
- if ( ( x = xv[ point ] ) != AST__BAD ) { \
-\
-/* Also obtain a pointer to the element. */ \
- y = xv + point; \
-\
-/* Perform the processing, which uses the element's value and then \
- assigns the result to this element. */ \
- {function;} \
- } \
- } \
-\
-/* Break out of the "case" block. */ \
- break;
-
-/* One-argument boolean operation. */
-/* ------------------------------- */
-/* This macro is similar in function to ARG_1 above, except that no
- checks are made for bad argument values. It is intended for use with
- boolean functions where bad values are handled explicitly. */
-#define ARG_1B(oper,function) \
-\
-/* Test for the required opcode value. */ \
- case oper: \
-\
-/* Obtain a pointer to the top stack element (vector). */ \
- xv = stack[ tos ]; \
-\
-/* Loop to access each vector element, obtaining the argument value \
- and a pointer to the element. */ \
- for ( point = 0; point < npoint; point++ ) { \
- x = xv[ point ]; \
- y = xv + point; \
-\
-/* Perform the processing, which uses the element's value and then \
- assigns the result to this element. */ \
- {function;} \
- } \
-\
-/* Break out of the "case" block. */ \
- break;
-
-/* Two-argument operation. */
-/* ----------------------- */
-/* This macro performs a two-argument operation, which processes the
- top two stack elements and produces a single result, resulting in the
- stack size decreasing by one. In this case, we first define a macro
- without the "case" block statements present. */
-#define DO_ARG_2(function) \
-\
-/* Obtain pointers to the top two stack elements (vectors), decreasing \
- the top of stack index by one. */ \
- xv2 = stack[ tos-- ]; \
- xv1 = stack[ tos ]; \
-\
-/* Loop to access each vector element, obtaining the value of the \
- first argument and checking that it is not bad. */ \
- for ( point = 0; point < npoint; point++ ) { \
- if ( ( x1 = xv1[ point ] ) != AST__BAD ) { \
-\
-/* Also obtain a pointer to the element which is to receive the \
- result. */ \
- y = xv1 + point; \
-\
-/* Obtain the value of the second argument, again checking that it is \
- not bad. */ \
- if ( ( x2 = xv2[ point ] ) != AST__BAD ) { \
-\
-/* Perform the processing, which uses the two argument values and then \
- assigns the result to the appropriate top of stack element. */ \
- {function;} \
-\
-/* If the second argument was bad, so is the result. */ \
- } else { \
- *y = AST__BAD; \
- } \
- } \
- }
-
-/* This macro simply wraps the one above up in a "case" block. */
-#define ARG_2(oper,function) \
- case oper: \
- DO_ARG_2(function) \
- break;
-
-/* Two-argument boolean operation. */
-/* ------------------------------- */
-/* This macro is similar in function to ARG_2 above, except that no
- checks are made for bad argument values. It is intended for use with
- boolean functions where bad values are handled explicitly. */
-#define ARG_2B(oper,function) \
-\
-/* Test for the required opcode value. */ \
- case oper: \
-\
-/* Obtain pointers to the top two stack elements (vectors), decreasing \
- the top of stack index by one. */ \
- xv2 = stack[ tos-- ]; \
- xv1 = stack[ tos ]; \
-\
-/* Loop to access each vector element, obtaining the value of both \
- arguments and a pointer to the element which is to receive the \
- result. */ \
- for ( point = 0; point < npoint; point++ ) { \
- x1 = xv1[ point ]; \
- x2 = xv2[ point ]; \
- y = xv1 + point; \
-\
-/* Perform the processing, which uses the two argument values and then \
- assigns the result to the appropriate top of stack element. */ \
- {function;} \
- } \
-\
-/* Break out of the "case" block. */ \
- break;
-
-/* Three-argument boolean operation. */
-/* --------------------------------- */
-/* This macro is similar in function to ARG_2B above, except that it
- takes three values of the stack and puts one back. It performs no
- checks for bad values. */
-#define ARG_3B(oper,function) \
-\
-/* Test for the required opcode value. */ \
- case oper: \
-\
-/* Obtain pointers to the top three stack elements (vectors), decreasing \
- the top of stack index by two. */ \
- xv3 = stack[ tos-- ]; \
- xv2 = stack[ tos-- ]; \
- xv1 = stack[ tos ]; \
-\
-/* Loop to access each vector element, obtaining the value of all 3 \
- arguments and a pointer to the element which is to receive the \
- result. */ \
- for ( point = 0; point < npoint; point++ ) { \
- x1 = xv1[ point ]; \
- x2 = xv2[ point ]; \
- x3 = xv3[ point ]; \
- y = xv1 + point; \
-\
-/* Perform the processing, which uses the three argument values and then \
- assigns the result to the appropriate top of stack element. */ \
- {function;} \
- } \
-\
-/* Break out of the "case" block. */ \
- break;
-
-/* Define arithmetic operations. */
-/* ============================= */
-/* We now define macros for performing some of the arithmetic
- operations we will require in a "safe" way - i.e. trapping numerical
- problems such as overflow and invalid arguments and translating them
- into the AST__BAD value. */
-
-/* Absolute value. */
-/* --------------- */
-/* This is just shorthand. */
-#define ABS(x) ( ( (x) >= 0.0 ) ? (x) : -(x) )
-
-/* Integer part. */
-/* ------------- */
-/* This implements rounding towards zero without involving conversion
- to an integer (which could overflow). */
-#define INT(x) ( ( (x) >= 0.0 ) ? floor( (x) ) : ceil( (x) ) )
-
-/* Trap maths overflow. */
-/* -------------------- */
-/* This macro calls a C maths library function and checks for overflow
- in the result. */
-#define CATCH_MATHS_OVERFLOW(function) \
- ( \
-\
-/* Clear the "errno" value. */ \
- errno = 0, \
-\
-/* Evaluate the function. */ \
- result = (function), \
-\
-/* Check if "errno" and the returned result indicate overflow and \
- return the appropriate result. */ \
- ( ( errno == ERANGE ) && ( ABS( result ) == HUGE_VAL ) ) ? AST__BAD : \
- result \
- )
-
-/* Trap maths errors. */
-/* ------------------ */
-/* This macro is similar to the one above, except that it also checks
- for domain errors (i.e. invalid argument values). */
-#define CATCH_MATHS_ERROR(function) \
- ( \
-\
-/* Clear the "errno" value. */ \
- errno = 0, \
-\
-/* Evaluate the function. */ \
- result = (function), \
-\
-/* Check if "errno" and the returned result indicate a domain error or \
- overflow and return the appropriate result. */ \
- ( ( errno == EDOM ) || \
- ( ( errno == ERANGE ) && ( ABS( result ) == HUGE_VAL ) ) ) ? \
- AST__BAD : result \
- )
-
-/* Tri-state boolean OR. */
-/* --------------------- */
-/* This evaluates a boolean OR using tri-state logic. For example,
- "a||b" may evaluate to 1 if "a" is bad but "b" is non-zero, so that
- the normal rules of bad value propagation do not apply. */
-#define TRISTATE_OR(x1,x2) \
-\
-/* Test if the first argument is bad. */ \
- ( (x1) == AST__BAD ) ? ( \
-\
-/* If so, test the second argument. */ \
- ( ( (x2) == 0.0 ) || ( (x2) == AST__BAD ) ) ? AST__BAD : 1.0 \
- ) : ( \
-\
-/* Test if the second argument is bad. */ \
- ( (x2) == AST__BAD ) ? ( \
-\
-/* If so, test the first argument. */ \
- ( (x1) == 0.0 ) ? AST__BAD : 1.0 \
-\
-/* If neither argument is bad, use the normal OR operator. */ \
- ) : ( \
- ( (x1) != 0.0 ) || ( (x2) != 0.0 ) \
- ) \
- )
-
-/* Tri-state boolean AND. */
-/* ---------------------- */
-/* This evaluates a boolean AND using tri-state logic. */
-#define TRISTATE_AND(x1,x2) \
-\
-/* Test if the first argument is bad. */ \
- ( (x1) == AST__BAD ) ? ( \
-\
-/* If so, test the second argument. */ \
- ( (x2) != 0.0 ) ? AST__BAD : 0.0 \
- ) : ( \
-\
-/* Test if the second argument is bad. */ \
- ( (x2) == AST__BAD ) ? ( \
-\
-/* If so, test the first argument. */ \
- ( (x1) != 0.0 ) ? AST__BAD : 0.0 \
-\
-/* If neither argument is bad, use the normal AND operator. */ \
- ) : ( \
- ( (x1) != 0.0 ) && ( (x2) != 0.0 ) \
- ) \
- )
-
-/* Safe addition. */
-/* -------------- */
-/* This macro performs addition while avoiding possible overflow. */
-#define SAFE_ADD(x1,x2) ( \
-\
-/* Test if the first argument is non-negative. */ \
- ( (x1) >= 0.0 ) ? ( \
-\
-/* If so, then we can perform addition if the second argument is \
- non-positive. Otherwise, we must calculate the most positive safe \
- second argument value that can be added and test for this (the test \
- itself is safe against overflow). */ \
- ( ( (x2) <= 0.0 ) || ( ( (DBL_MAX) - (x1) ) >= (x2) ) ) ? ( \
-\
-/* Perform addition if it is safe, otherwise return AST__BAD. */ \
- (x1) + (x2) \
- ) : ( \
- AST__BAD \
- ) \
-\
-/* If the first argument is negative, then we can perform addition if \
- the second argument is non-negative. Otherwise, we must calculate the \
- most negative second argument value that can be added and test for \
- this (the test itself is safe against overflow). */ \
- ) : ( \
- ( ( (x2) >= 0.0 ) || ( ( (DBL_MAX) + (x1) ) >= -(x2) ) ) ? ( \
-\
-/* Perform addition if it is safe, otherwise return AST__BAD. */ \
- (x1) + (x2) \
- ) : ( \
- AST__BAD \
- ) \
- ) \
-)
-
-/* Safe subtraction. */
-/* ----------------- */
-/* This macro performs subtraction while avoiding possible overflow. */
-#define SAFE_SUB(x1,x2) ( \
-\
-/* Test if the first argument is non-negative. */ \
- ( (x1) >= 0.0 ) ? ( \
-\
-/* If so, then we can perform subtraction if the second argument is \
- also non-negative. Otherwise, we must calculate the most negative safe \
- second argument value that can be subtracted and test for this (the \
- test itself is safe against overflow). */ \
- ( ( (x2) >= 0.0 ) || ( ( (DBL_MAX) - (x1) ) >= -(x2) ) ) ? ( \
-\
-/* Perform subtraction if it is safe, otherwise return AST__BAD. */ \
- (x1) - (x2) \
- ) : ( \
- AST__BAD \
- ) \
-\
-/* If the first argument is negative, then we can perform subtraction \
- if the second argument is non-positive. Otherwise, we must calculate \
- the most positive second argument value that can be subtracted and \
- test for this (the test itself is safe against overflow). */ \
- ) : ( \
- ( ( (x2) <= 0.0 ) || ( ( (DBL_MAX) + (x1) ) >= (x2) ) ) ? ( \
-\
-/* Perform subtraction if it is safe, otherwise return AST__BAD. */ \
- (x1) - (x2) \
- ) : ( \
- AST__BAD \
- ) \
- ) \
-)
-
-/* Safe multiplication. */
-/* -------------------- */
-/* This macro performs multiplication while avoiding possible overflow. */
-#define SAFE_MUL(x1,x2) ( \
-\
-/* Multiplication is safe if the absolute value of either argument is \
- unity or less. Otherwise, we must use the first argument to calculate \
- the maximum absolute value that the second argument may have and test \
- for this (the test itself is safe against overflow). */ \
- ( ( ( abs1 = ABS( (x1) ) ) <= 1.0 ) || \
- ( ( abs2 = ABS( (x2) ) ) <= 1.0 ) || \
- ( ( (DBL_MAX) / abs1 ) >= abs2 ) ) ? ( \
-\
-/* Perform multiplication if it is safe, otherwise return AST__BAD. */ \
- (x1) * (x2) \
- ) : ( \
- AST__BAD \
- ) \
-)
-
-/* Safe division. */
-/* -------------- */
-/* This macro performs division while avoiding possible overflow. */
-#define SAFE_DIV(x1,x2) ( \
-\
-/* Division is unsafe if the second argument is zero. Otherwise, it is \
- safe if the abolute value of the second argument is unity or \
- more. Otherwise, we must use the second argument to calculate the \
- maximum absolute value that the first argument may have and test for \
- this (the test itself is safe against overflow). */ \
- ( ( (x2) != 0.0 ) && \
- ( ( ( abs2 = ABS( (x2) ) ) >= 1.0 ) || \
- ( ( (DBL_MAX) * abs2 ) >= ABS( (x1) ) ) ) ) ? ( \
-\
-/* Perform division if it is safe, otherwise return AST__BAD. */ \
- (x1) / (x2) \
- ) : ( \
- AST__BAD \
- ) \
-)
-
-/* Bit-shift operation. */
-/* -------------------- */
-/* This macro shifts the bits in a double value a specified number of
- places to the left, which simply corresponds to multiplying by the
- appropriate power of two. */
-#define SHIFT_BITS(x1,x2) ( \
-\
-/* Decompose the value into a normalised fraction and a power of 2. */ \
- frac = frexp( (x1), &expon ), \
-\
-/* Calculate the new power of 2 which should apply after the shift, \
- rounding towards zero to give an integer value. */ \
- newexp = INT( (x2) ) + (double) expon, \
-\
-/* If the new exponent is too negative to convert to an integer, then \
- the result must underflow to zero. */ \
- ( newexp < (double) -INT_MAX ) ? ( \
- 0.0 \
-\
-/* Otherwise, if it is too positive to convert to an integer, then the \
- result must overflow, unless the normalised fraction is zero. */ \
- ) : ( ( newexp > (double) INT_MAX ) ? ( \
- ( frac == 0.0 ) ? 0.0 : AST__BAD \
-\
-/* Otherwise, convert the new exponent to an integer and apply \
- it. Trap any overflow which may still occur. */ \
- ) : ( \
- CATCH_MATHS_OVERFLOW( ldexp( frac, (int) newexp ) ) \
- ) ) \
-)
-
-/* Two-argument bit-wise boolean operation. */
-/* ---------------------------------------- */
-/* This macro expands to code which performs a bit-wise boolean
- operation on a pair of arguments and assigns the result to the
- variable "result". It operates on floating point (double) values,
- which are regarded as if they are fixed-point binary numbers with
- negative values expressed in twos-complement notation. This means that
- it delivers the same results for integer values as the normal
- (integer) C bit-wise operations. However, it will also operate on the
- fraction bits of floating point numbers. It also offers greater
- precision (the first 53 or so significant bits of the result being
- preserved for typical IEEE floating point implementations). */
-#define BIT_OPER(oper,x1,x2) \
-\
-/* Convert each argument to a normalised fraction in the range \
- [0.5,1.0) and a power of two exponent, removing any sign \
- information. */ \
- frac1 = frexp( ABS( (x1) ), &expon1 ); \
- frac2 = frexp( ABS( (x2) ), &expon2 ); \
-\
-/* Set "expon" to be the larger of the two exponents. If the two \
- exponents are not equal, divide the fraction with the smaller exponent \
- by 2 to the power of the exponent difference. This gives both \
- fractions the same effective exponent (although one of them may no \
- longer be normalised). Note that overflow is avoided because all \
- numbers remain less than 1.0, but underflow may occur. */ \
- expon = expon1; \
- if ( expon2 > expon1 ) { \
- expon = expon2; \
- frac1 = ldexp( frac1, expon1 - expon ); \
- } else if ( expon1 > expon2 ) { \
- frac2 = ldexp( frac2, expon2 - expon ); \
- } \
-\
-/* If either of the original arguments is negative, we now subtract \
- the corresponding fraction from 2.0. If we think of the fraction as \
- represented in fixed-point binary notation, this corresponds to \
- converting negative numbers into the twos-complement form normally used \
- for integers (the sign bit being the bit with value 1) instead \
- of having a separate sign bit as for floating point numbers. \
-\
- Note that one of the fractions may have underflowed during the \
- scaling above. In that case (if the original argument was negative), \
- we must subtract the value "eps" (= 2.0 * DBL_EPSILON) from 2.0 \
- instead, so that we produce the largest number less than 2.0. In \
- twos-complement notation this represents the smallest possible \
- negative number and corresponds to extending the sign bit of the \
- original number up into more significant bits. This causes all bits to \
- be set as we require (rather than all being clear if the underflow \
- is simply ignored). */ \
- if ( (x1) < 0.0 ) frac1 = 2.0 - ( ( frac1 > eps ) ? frac1 : eps ); \
- if ( (x2) < 0.0 ) frac2 = 2.0 - ( ( frac2 > eps ) ? frac2 : eps ); \
-\
-/* We now extract the bits from the fraction values into integer \
- variables so that we may perform bit-wise operations on them. However, \
- since a double may be longer than any available integer, we may \
- have to handle several successive blocks of bits individually. */ \
-\
-/* Extract the first block of bits by scaling by the required power of \
- 2 to shift the required bits to the left of the binary point. Then \
- extract the integer part. Note that this initial shift is one bit less \
- than the number of bits in an unsigned long, because we have \
- introduced an extra sign bit. */ \
- frac1 *= scale1; \
- frac2 *= scale1; \
- b1 = (unsigned long) frac1; \
- b2 = (unsigned long) frac2; \
-\
-/* Perform the required bit-wise operation on the extracted blocks of \
- bits. */ \
- b = b1 oper b2; \
-\
-/* Extract the sign bit from this initial result. This determines \
- whether the final result bit pattern should represent a negative \
- floating point number. */ \
- neg = b & signbit; \
-\
-/* Initialise the floating point result by setting it to the integer \
- result multipled by the reciprocal of the scale factor used to shift \
- the bits above. This returns the result bits to their correct \
- significance. */ \
- unscale = rscale1; \
- result = (double) b * unscale; \
-\
-/* We now loop to extract and process further blocks of bits (if \
- present). The number of blocks is determined by the relative lengths \
- of a double and an unsigned long. In practice, some bits of the double \
- will be used by its exponent, so the last block may be incomplete and \
- will simply be padded with zeros. */ \
- for ( iblock = 1; iblock < nblock; iblock++ ) { \
-\
-/* Subtract the integer part (which has already been processed) from \
- each fraction, to leave the bits which remain to be processed. Then \
- multiply by a scale factor to shift the next set of bits to the left \
- of the binary point. This time, we use as many bits as will fit into \
- an unsigned long. */ \
- frac1 = ( frac1 - (double) b1 ) * scale; \
- frac2 = ( frac2 - (double) b2 ) * scale; \
-\
-/* Extract the integer part, which contains the required bits. */ \
- b1 = (unsigned long) frac1; \
- b2 = (unsigned long) frac2; \
-\
-/* Perform the required bit-wise operation on the extracted blocks of \
- bits. */ \
- b = b1 oper b2; \
-\
-/* Update the result floating point value by adding the new integer \
- result multiplied by a scale factor to return the bits to their \
- original significance. */ \
- unscale *= rscale; \
- result += (double) b * unscale; \
- } \
-\
-/* If the (normalised fraction) result represents a negative number, \
- then subtract 2.0 from it (equivalent to subtracting it from 2 and \
- negating the result). This converts back to using a separate sign bit \
- instead of twos-complement notation. */ \
- if ( neg ) result -= 2.0; \
-\
-/* Scale by the required power of 2 to remove the initial \
- normalisation applied and assign the result to the "result" \
- variable. */ \
- result = ldexp( result, expon )
-
-/* Gaussian random number. */
-/* ----------------------- */
-/* This macro expands to code which assigns a pseudo-random value to
- the "result" variable. The value is drawn from a Gaussian distribution
- with mean "x1" and standard deviation "ABS(x2)". */
-#define GAUSS(x1,x2) \
-\
-/* Loop until a satisfactory result is obtained. */ \
- do { \
-\
-/* Obtain a value drawn from a standard Gaussian distribution. */ \
- ran = Gauss( rcontext, status ); \
-\
-/* Multiply by "ABS(x2)", trapping possible overflow. */ \
- result = ABS( (x2) ); \
- result = SAFE_MUL( ran, result ); \
-\
-/* If OK, add "x1", again trapping possible overflow. */ \
- if ( result != AST__BAD ) result = SAFE_ADD( result, (x1) ); \
-\
-/* Continue generating values until one is found which does not cause \
- overflow. */ \
- } while ( result == AST__BAD );
-
-/* Implement the stack-based arithmetic. */
-/* ===================================== */
-/* Initialise the top of stack index and constant counter. */
- tos = -1;
- icon = 0;
-
-/* Determine the number of opcodes to be processed and loop to process
- them, executing the appropriate "case" block for each one. */
- ncode = code[ 0 ];
- for ( icode = 1; icode <= ncode; icode++ ) {
- switch ( (Oper) code[ icode ] ) {
-
-/* Ignore any null opcodes (which shouldn't occur). */
- case OP_NULL: break;
-
-/* Otherwise, perform the required vector operation on the stack... */
-
-/* User-supplied constants and variables. */
-/* -------------------------------------- */
-/* Loading a constant involves incrementing the constant count and
- assigning the next constant's value to the top of stack element. */
- ARG_0( OP_LDCON, value = con[ icon++ ], *y = value )
-
-/* Loading a variable involves obtaining the variable's index by
- consuming a constant (as above), and then copying the variable's
- values into the top of stack element. */
- ARG_0( OP_LDVAR, ivar = (int) ( con[ icon++ ] + 0.5 ),
- *y = ptr_in[ ivar ][ point ] )
-
-/* System constants. */
-/* ----------------- */
-/* Loading a "bad" value simply means assigning AST__BAD to the top of
- stack element. */
- ARG_0( OP_LDBAD, ;, *y = AST__BAD )
-
-/* The following load constants associated with the (double) floating
- point representation into the top of stack element. */
- ARG_0( OP_LDDIG, ;, *y = (double) DBL_DIG )
- ARG_0( OP_LDEPS, ;, *y = DBL_EPSILON )
- ARG_0( OP_LDMAX, ;, *y = DBL_MAX )
- ARG_0( OP_LDMAX10E, ;, *y = (double) DBL_MAX_10_EXP )
- ARG_0( OP_LDMAXE, ;, *y = (double) DBL_MAX_EXP )
- ARG_0( OP_LDMDIG, ;, *y = (double) DBL_MANT_DIG )
- ARG_0( OP_LDMIN, ;, *y = DBL_MIN )
- ARG_0( OP_LDMIN10E, ;, *y = (double) DBL_MIN_10_EXP )
- ARG_0( OP_LDMINE, ;, *y = (double) DBL_MIN_EXP )
- ARG_0( OP_LDRAD, ;, *y = (double) FLT_RADIX )
- ARG_0( OP_LDRND, ;, *y = (double) FLT_ROUNDS )
-
-/* Mathematical constants. */
-/* ----------------------- */
-/* The following load mathematical constants into the top of stack
- element. */
- ARG_0( OP_LDE, value = exp( 1.0 ), *y = value )
- ARG_0( OP_LDPI, ;, *y = pi )
-
-/* Functions with one argument. */
-/* ---------------------------- */
-/* The following simply evaluate a function of the top of stack
- element and assign the result to the same element. */
- ARG_1( OP_ABS, *y = ABS( x ) )
- ARG_1( OP_ACOS, *y = ( ABS( x ) <= 1.0 ) ?
- acos( x ) : AST__BAD )
- ARG_1( OP_ACOSD, *y = ( ABS( x ) <= 1.0 ) ?
- acos( x ) * r2d : AST__BAD )
- ARG_1( OP_ACOSH, *y = ( x < 1.0 ) ? AST__BAD :
- ( ( x > safe_sq ) ? log( x ) + log2 :
- log( x + sqrt( x * x - 1.0 ) ) ) )
- ARG_1( OP_ACOTH, *y = ( ABS( x ) <= 1.0 ) ? AST__BAD :
- 0.5 * ( log( ( x + 1.0 ) /
- ( x - 1.0 ) ) ) )
- ARG_1( OP_ACSCH, *y = ( ( x == 0.0 ) ? AST__BAD :
- ( sign = ( x >= 0.0 ), x = ABS( x ),
- ( sign ? 1.0 : -1.0 ) *
- ( ( x < rsafe_sq ) ? log2 - log( x ) :
- ( x = 1.0 / x,
- log( x + sqrt( x * x + 1.0 ) ) ) ) ) ) )
- ARG_1( OP_ASECH, *y = ( ( x <= 0 ) || ( x > 1.0 ) ) ? AST__BAD :
- ( ( x < rsafe_sq ) ? log2 - log( x ) :
- ( x = 1.0 / x,
- log( x + sqrt( x * x - 1.0 ) ) ) ) )
- ARG_1( OP_ASIN, *y = ( ABS( x ) <= 1.0 ) ?
- asin( x ) : AST__BAD )
- ARG_1( OP_ASIND, *y = ( ABS( x ) <= 1.0 ) ?
- asin( x ) * r2d : AST__BAD )
- ARG_1( OP_ASINH, *y = ( sign = ( x >= 0.0 ), x = ABS( x ),
- ( sign ? 1.0 : -1.0 ) *
- ( ( x > safe_sq ) ? log( x ) + log2 :
- log( x + sqrt( x * x + 1.0 ) ) ) ) )
- ARG_1( OP_ATAN, *y = atan( x ) )
- ARG_1( OP_ATAND, *y = atan( x ) * r2d )
- ARG_1( OP_ATANH, *y = ( ABS( x ) >= 1.0 ) ? AST__BAD :
- 0.5 * ( log( ( 1.0 + x ) /
- ( 1.0 - x ) ) ) )
- ARG_1( OP_CEIL, *y = ceil( x ) )
- ARG_1( OP_COS, *y = cos( x ) )
- ARG_1( OP_COSD, *y = cos( x * d2r ) )
- ARG_1( OP_COSH, *y = CATCH_MATHS_OVERFLOW( cosh( x ) ) )
- ARG_1( OP_COTH, *y = ( x = tanh( x ), SAFE_DIV( 1.0, x ) ) )
- ARG_1( OP_CSCH, *y = ( x = CATCH_MATHS_OVERFLOW( sinh( x ) ),
- ( x == AST__BAD ) ?
- 0.0 : SAFE_DIV( 1.0, x ) ) )
- ARG_1( OP_EXP, *y = CATCH_MATHS_OVERFLOW( exp( x ) ) )
- ARG_1( OP_FLOOR, *y = floor( x ) )
- ARG_1( OP_INT, *y = INT( x ) )
- ARG_1B( OP_ISBAD, *y = ( x == AST__BAD ) )
- ARG_1( OP_LOG, *y = ( x > 0.0 ) ? log( x ) : AST__BAD )
- ARG_1( OP_LOG10, *y = ( x > 0.0 ) ? log10( x ) : AST__BAD )
- ARG_1( OP_NINT, *y = ( x >= 0 ) ?
- floor( x + 0.5 ) : ceil( x - 0.5 ) )
- ARG_1( OP_POISS, *y = Poisson( rcontext, x, status ) )
- ARG_1( OP_SECH, *y = ( x = CATCH_MATHS_OVERFLOW( cosh( x ) ),
- ( x == AST__BAD ) ? 0.0 : 1.0 / x ) )
- ARG_1( OP_SIN, *y = sin( x ) )
- ARG_1( OP_SINC, *y = ( x == 0.0 ) ? 1.0 : sin( x ) / x )
- ARG_1( OP_SIND, *y = sin( x * d2r ) )
- ARG_1( OP_SINH, *y = CATCH_MATHS_OVERFLOW( sinh( x ) ) )
- ARG_1( OP_SQR, *y = SAFE_MUL( x, x ) )
- ARG_1( OP_SQRT, *y = ( x >= 0.0 ) ? sqrt( x ) : AST__BAD )
- ARG_1( OP_TAN, *y = CATCH_MATHS_OVERFLOW( tan( x ) ) )
- ARG_1( OP_TAND, *y = tan( x * d2r ) )
- ARG_1( OP_TANH, *y = tanh( x ) )
-
-/* Functions with two arguments. */
-/* ----------------------------- */
-/* These evaluate a function of the top two entries on the stack. */
- ARG_2( OP_ATAN2, *y = atan2( x1, x2 ) )
- ARG_2( OP_ATAN2D, *y = atan2( x1, x2 ) * r2d )
- ARG_2( OP_DIM, *y = ( x1 > x2 ) ? x1 - x2 : 0.0 )
- ARG_2( OP_GAUSS, GAUSS( x1, x2 ); *y = result )
- ARG_2( OP_MOD, *y = ( x2 != 0.0 ) ?
- fmod( x1, x2 ) : AST__BAD )
- ARG_2( OP_POW, *y = CATCH_MATHS_ERROR( pow( x1, x2 ) ) )
- ARG_2( OP_RAND, ran = Rand( rcontext, status );
- *y = x1 * ran + x2 * ( 1.0 - ran ); )
- ARG_2( OP_SIGN, *y = ( ( x1 >= 0.0 ) == ( x2 >= 0.0 ) ) ?
- x1 : -x1 )
-
-/* Functions with three arguments. */
-/* ------------------------------- */
-/* These evaluate a function of the top three entries on the stack. */
- ARG_3B( OP_QIF, *y = ( ( x1 ) ? ( x2 ) : ( x3 ) ) )
-
-
-/* Functions with variable numbers of arguments. */
-/* --------------------------------------------- */
-/* These operations take a variable number of arguments, the actual
- number being determined by consuming a constant. We then loop to
- perform a 2-argument operation on the stack (as above) the required
- number of times. */
- case OP_MAX:
- narg = (int) ( con[ icon++ ] + 0.5 );
- for ( iarg = 0; iarg < ( narg - 1 ); iarg++ ) {
- DO_ARG_2( *y = ( x1 >= x2 ) ? x1 : x2 )
- }
- break;
- case OP_MIN:
- narg = (int) ( con[ icon++ ] + 0.5 );
- for ( iarg = 0; iarg < ( narg - 1 ); iarg++ ) {
- DO_ARG_2( *y = ( x1 <= x2 ) ? x1 : x2 )
- }
- break;
-
-/* Unary arithmetic operators. */
-/* --------------------------- */
- ARG_1( OP_NEG, *y = -x )
-
-/* Unary boolean operators. */
-/* ------------------------ */
- ARG_1( OP_NOT, *y = ( x == 0.0 ) )
-
-/* Binary arithmetic operators. */
-/* ---------------------------- */
- ARG_2( OP_ADD, *y = SAFE_ADD( x1, x2 ) )
- ARG_2( OP_SUB, *y = SAFE_SUB( x1, x2 ) )
- ARG_2( OP_MUL, *y = SAFE_MUL( x1, x2 ) )
- ARG_2( OP_DIV , *y = SAFE_DIV( x1, x2 ) )
-
-/* Bit-shift operators. */
-/* -------------------- */
- ARG_2( OP_SHFTL, *y = SHIFT_BITS( x1, x2 ) )
- ARG_2( OP_SHFTR, *y = SHIFT_BITS( x1, -x2 ) )
-
-/* Relational operators. */
-/* --------------------- */
- ARG_2( OP_EQ, *y = ( x1 == x2 ) )
- ARG_2( OP_GE, *y = ( x1 >= x2 ) )
- ARG_2( OP_GT, *y = ( x1 > x2 ) )
- ARG_2( OP_LE, *y = ( x1 <= x2 ) )
- ARG_2( OP_LT, *y = ( x1 < x2 ) )
- ARG_2( OP_NE, *y = ( x1 != x2 ) )
-
-/* Bit-wise operators. */
-/* ------------------- */
- ARG_2( OP_BITOR, BIT_OPER( |, x1, x2 ); *y = result )
- ARG_2( OP_BITXOR, BIT_OPER( ^, x1, x2 ); *y = result )
- ARG_2( OP_BITAND, BIT_OPER( &, x1, x2 ); *y = result )
-
-/* Binary boolean operators. */
-/* ------------------------- */
- ARG_2B( OP_AND, *y = TRISTATE_AND( x1, x2 ) )
- ARG_2( OP_EQV, *y = ( ( x1 != 0.0 ) == ( x2 != 0.0 ) ) )
- ARG_2B( OP_OR, *y = TRISTATE_OR( x1, x2 ) )
- ARG_2( OP_XOR, *y = ( ( x1 != 0.0 ) != ( x2 != 0.0 ) ) )
- }
- }
- }
-
-/* When all opcodes have been processed, the result of the function
- evaluation will reside in the lowest stack entry - i.e. the output
- array. */
-
-/* Free the workspace arrays. */
- work = astFree( work );
- stack = astFree( stack );
-
-/* Undefine macros local to this function. */
-#undef ARG_0
-#undef ARG_1
-#undef ARG_1B
-#undef DO_ARG_2
-#undef ARG_2
-#undef ARG_2B
-#undef ABS
-#undef INT
-#undef CATCH_MATHS_OVERFLOW
-#undef CATCH_MATHS_ERROR
-#undef TRISTATE_OR
-#undef TRISTATE_AND
-#undef SAFE_ADD
-#undef SAFE_SUB
-#undef SAFE_MUL
-#undef SAFE_DIV
-#undef SHIFT_BITS
-#undef BIT_OPER
-#undef GAUSS
-}
-
-static void EvaluationSort( const double con[], int nsym, int symlist[],
- int **code, int *stacksize, int *status ) {
-/*
-* Name:
-* EvaluationSort
-
-* Purpose:
-* Perform an evaluation-order sort on parsed expression symbols.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mathmap.h"
-* void EvaluationSort( const double con[], int nsym, int symlist[],
-* int **code, int *stacksize, int *status )
-
-* Class Membership:
-* MathMap member function.
-
-* Description:
-* This function sorts a sequence of numbers representing symbols
-* identified in an expression. The symbols (i.e. the expression syntax)
-* must have been fully validated beforehand, as no validation is
-* performed here.
-*
-* The symbols are sorted into the order in which corresponding
-* operations must be performed on a push-down arithmetic stack in order
-* to evaluate the expression. Operation codes (opcodes), as defined in
-* the "Oper" enum, are then substituted for the symbol numbers.
-
-* Parameters:
-* con
-* Pointer to an array of double containing the set of constants
-* generated while parsing the expression (these are required in order
-* to determine the number of arguments associated with functions which
-* take a variable number of arguments).
-* nsym
-* The number of symbols identified while parsing the expression.
-* symlist
-* Pointer to an array of int, with "nsym" elements. On entry, this
-* should contain the indices in the static "symbol" array of the
-* symbols identified while parsing the expression. On exit, the
-* contents are undefined.
-* code
-* Address of a pointer which will be set to point at a dynamically
-* allocated array of int containing the set of opcodes (cast to int)
-* produced by this function. The first element of this array will
-* contain a count of the number of opcodes which follow.
-*
-* The allocated space must be freed by the caller (using astFree) when
-* no longer required.
-* stacksize
-* Pointer to an int in which to return the size of the push-down stack
-* required to evaluate the expression using the returned opcodes.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - A value of NULL will be returned for the "*code" pointer and a value
-* of zero will be returned for the "*stacksize" value if this function is
-* invoked with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- int flush; /* Flush parenthesised symbol sequence? */
- int icon; /* Input constant counter */
- int isym; /* Input symbol counter */
- int ncode; /* Number of opcodes generated */
- int nstack; /* Evaluation stack size */
- int push; /* Push a new symbol on to stack? */
- int sym; /* Variable for symbol number */
- int tos; /* Top of sort stack index */
-
-/* Initialise */
- *code = NULL;
- *stacksize = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Further initialisation. */
- flush = 0;
- icon = 0;
- isym = 0;
- ncode = 0;
- nstack = 0;
- tos = -1;
-
-/* Loop to generate output opcodes until the sort stack is empty and
- there are no further symbols to process, or an error is detected. */
- while ( astOK && ( ( tos > -1 ) || ( isym < nsym ) ) ) {
-
-/* Decide whether to push a symbol on to the sort stack (which
- "diverts" it so that higher-priority symbols can be output), or to pop
- the top symbol off the sort stack and send it to the output
- stream... */
-
-/* We must push a symbol on to the sort stack if the stack is
- currently empty. */
- if ( tos == -1 ) {
- push = 1;
-
-/* We must pop the top symbol off the sort stack if there are no more
- input symbols to process. */
- } else if ( isym >= nsym ) {
- push = 0;
-
-/* If the sort stack is being flushed to complete the evaluation of a
- parenthesised expression, then the top symbol (which will be the
- opening parenthesis or function call) must be popped. This is only
- done once, so reset the "flush" flag before the next loop. */
- } else if ( flush ) {
- push = 0;
- flush = 0;
-
-/* In all other circumstances, we must push a symbol on to the sort
- stack if its evaluation priority (seen from the left) is higher than
- that of the current top of stack symbol (seen from the right). This
- means it will eventually be sent to the output stream ahead of the
- current top of stack symbol. */
- } else {
- push = ( symbol[ symlist[ isym ] ].leftpriority >
- symbol[ symlist[ tos ] ].rightpriority );
- }
-
-/* If a symbol is being pushed on to the sort stack, then get the next
- input symbol which is to be used. */
- if ( push ) {
- sym = symlist[ isym++ ];
-
-/* If the symbol decreases the parenthesis level (a closing
- parenthesis), then all the sort stack entries down to the symbol which
- opened the current level of parenthesis (the matching opening
- parenthesis or function call) will already have been sent to the
- output stream as a consequence of the evaluation priority defined for
- a closing parenthesis in the symbol data. The opening parenthesis (or
- function call) must next be flushed from the sort stack, so set the
- "flush" flag which is interpreted on the next loop. Ignore the current
- symbol, which cancels with the opening parenthesis on the stack. */
- if ( symbol[ sym ].parincrement < 0 ) {
- flush = 1;
-
-/* All other symbols are pushed on to the sort stack. The stack
- occupies that region of the "symlist" array from which the input
- symbol numbers have already been extracted. */
- } else {
- symlist[ ++tos ] = sym;
- }
-
-/* If a symbol is being popped from the top of the sort stack, then
- the top of stack entry is transferred to the output stream. Obtain the
- symbol number from the stack. Increment the local constant counter if
- the associated operation will use a constant. */
- } else {
- sym = symlist[ tos-- ];
- icon += ( ( sym == symbol_ldvar ) || ( sym == symbol_ldcon ) );
-
-/* If the output symbol does not represent a "null" operation,
- increase the size of the output opcode array to accommodate it,
- checking for errors. Note that we allocate one extra array element
- (the first) which will eventually hold a count of all the opcodes
- generated. */
- if ( symbol[ sym ].opcode != OP_NULL ) {
- *code = astGrow( *code, ncode + 2, sizeof( int ) );
- if ( astOK ) {
-
-/* Append the new opcode to the end of this array. */
- ( *code )[ ++ncode ] = (int) symbol[ sym ].opcode;
-
-/* Increment/decrement the counter representing the stack size
- required for evaluation of the expression. If the symbol is a
- function with a variable number of arguments (indicated by a negative
- "nargs" entry in the symbol data table), then the change in stack size
- must be determined from the argument number stored in the constant
- table. */
- if ( symbol[ sym ].nargs >= 0 ) {
- nstack += symbol[ sym ].stackincrement;
- } else {
- nstack -= (int) ( con[ icon++ ] + 0.5 ) - 1;
- }
-
-/* Note the maximum size of the stack. */
- *stacksize = ( nstack > *stacksize ) ? nstack : *stacksize;
- }
- }
- }
- }
-
-/* If no "*code" array has been allocated, then allocate one simply to
- store the number of opcodes generated, i.e. zero (this shouldn't
- normally happen as this represents an invalid expression). */
- if ( !*code ) *code = astMalloc( sizeof( int ) );
-
-/* If no error has occurred, store the count of opcodes generated in
- the first element of the "*code" array and re-allocate the array to
- its final size (since astGrow may have over-allocated space). */
- if ( astOK ) {
- ( *code )[ 0 ] = ncode;
- *code = astRealloc( *code, sizeof( int ) * (size_t) ( ncode + 1 ) );
- }
-
-/* If an error occurred, free any memory that was allocated and reset
- the output values. */
- if ( !astOK ) {
- *code = astFree( *code );
- *stacksize = 0;
- }
-}
-
-static void ExtractExpressions( const char *method, const char *class,
- int nfun, const char *fun[], int forward,
- char ***exprs, int *status ) {
-/*
-* Name:
-* ExtractExpressions
-
-* Purpose:
-* Extract and validate expressions.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mathmap.h"
-* void ExtractExpressions( const char *method, const char *class,
-* int nfun, const char *fun[], int forward,
-* char ***exprs, int *status )
-
-* Class Membership:
-* MathMap member function.
-
-* Description:
-* This function extracts expressions from the right hand sides of a set
-* of functions. These expressions are then validated to check that they
-* are either all present, or all absent (absence indicating an undefined
-* transformation). An error is reported if anything is found to be
-* wrong.
-*
-* Note that the syntax of the expressions is not checked by this function
-* (i.e. they are not compiled).
-
-* Parameters:
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function.
-* This method name is used solely for constructing error messages.
-* class
-* Pointer to a constant null-terminated character string containing the
-* class name of the Object being processed. This name is used solely
-* for constructing error messages.
-* nfun
-* The number of functions to be analysed.
-* fun
-* Pointer to an array, with "nfun" elements, of pointers to null
-* terminated strings which contain each of the functions. These
-* strings should contain no white space.
-* forward
-* A non-zero value indicates the the MathMap's forward transformation
-* functions are being processed, while a zero value indicates processing
-* of the inverse transformation functions. This value is used solely for
-* constructing error messages.
-* exprs
-* Address in which to return a pointer to an array (with "nfun"
-* elements) of pointers to null terminated strings containing the
-* extracted expressions (i.e. this returns an array of strings).
-*
-* Both the returned array of pointers, and the strings to which they
-* point, will be stored in dynamically allocated memory and should
-* be freed by the caller (using astFree) when no longer required.
-*
-* If the right hand sides (including the "=" sign) of all the supplied
-* functions are absent, then this indicates an undefined transformation
-* and the returned pointer value will be NULL. An error results if
-* an "=" sign is present but no expression follows it.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - A NULL value will be returned for "*exprs" if this function is
-* invoked with the global error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- char *ex; /* Pointer to start of expression string */
- int ifun; /* Loop counter for functions */
- int iud; /* Index of first undefined function */
- int nud; /* Number of undefined expressions */
-
-/* Initialise. */
- *exprs = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Further initialisation. */
- nud = 0;
- iud = 0;
-
-/* Allocate and initialise memory for the returned array of pointers. */
- MALLOC_POINTER_ARRAY( *exprs, char *, nfun )
-
-/* Loop to inspect each function in turn. */
- if ( astOK ) {
- for ( ifun = 0; ifun < nfun; ifun++ ) {
-
-/* Search for the first "=" sign. */
- if ( ( ex = strchr( fun[ ifun ], '=' ) ) ) {
-
-/* If found, and there are more characters after the "=" sign, then
- find the length of the expression which follows. Allocate a string to
- hold this expression, storing its pointer in the array allocated
- above. Check for errors. */
- if ( *++ex ) {
- ( *exprs )[ ifun ] = astMalloc( strlen( ex ) + (size_t) 1 );
- if ( !astOK ) break;
-
-/* If OK, extract the expression string. */
- (void) strcpy( ( *exprs )[ ifun ], ex );
-
-/* If an "=" sign was found but there are no characters following it,
- then there is a missing right hand side to a function, so report an
- error and quit. */
- } else {
- astError( AST__NORHS,
- "%s(%s): Missing right hand side in expression: "
- "\"%s\".", status,
- method, class, fun[ ifun ] );
- astError( astStatus,
- "Error in %s transformation function %d.", status,
- forward ? "forward" : "inverse", ifun + 1 );
- break;
- }
-
-/* If no "=" sign was found, then the transformation may be undefined,
- in which case each function should only contain a variable name. Count
- the number of times this happens and record the index of the first
- instance. */
- } else {
- nud++;
- if ( nud == 1 ) iud = ifun;
- }
- }
- }
-
-/* Either all functions should have an "=" sign (in which case the
- transformation is defined), or none of them should have (in which case
- it is undefined). If some do and some don't, then report an error,
- citing the first instance of a missing "=" sign. */
- if ( astOK && ( nud != 0 ) && ( nud != nfun ) ) {
- astError( AST__NORHS,
- "%s(%s): Missing right hand side in function: \"%s\".", status,
- method, class, fun[ iud ] );
- astError( astStatus,
- "Error in %s transformation function %d.", status,
- forward ? "forward" : "inverse", iud + 1 );
- }
-
-/* If an error occurred, or all the expressions were absent, then free any
- allocated memory and reset the output value. */
- if ( !astOK || nud ) {
- FREE_POINTER_ARRAY( *exprs, nfun )
- }
-}
-
-static void ExtractVariables( const char *method, const char *class,
- int nfun, const char *fun[],
- int nin, int nout, int nfwd, int ninv,
- int forward, char ***var, int *status ) {
-/*
-* Name:
-* ExtractVariables
-
-* Purpose:
-* Extract and validate variable names.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mathmap.h"
-* void ExtractVariables( const char *method, const char *class,
-* int nfun, const char *fun[],
-* int nin, int nout, int nfwd, int ninv,
-* int forward, char ***var, int *status )
-
-* Class Membership:
-* MathMap member function.
-
-* Description:
-* This function extracts variable names from the left hand sides of a
-* set of transformation functions belonging to a MathMap. These variable
-* names are then validated to check for correct syntax and no
-* duplication. An error is reported if anything is wrong with the
-* variable names obtained.
-
-* Parameters:
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function.
-* This method name is used solely for constructing error messages.
-* class
-* Pointer to a constant null-terminated character string containing the
-* class name of the Object being processed. This name is used solely
-* for constructing error messages.
-* nfun
-* The number of functions to be analysed.
-* fun
-* Pointer to an array, with "nfun" elements, of pointers to null
-* terminated strings which contain each of the functions. These strings
-* are case sensitive and should contain no white space.
-*
-* The first elements of this array should point to the functions that
-* define the primary input/output variables (depending on direction).
-* These should be followed by any functions which define intermediate
-* variables (taken from the set of functions which transform in the
-* opposite direction to the first ones).
-* nin
-* Number of input variables for the MathMap.
-* nout
-* Number of output variables for the MathMap.
-* nfwd
-* Number of forward transformation functions for the MathMap.
-* ninv
-* Number of inverse transformation functions for the MathMap.
-* forward
-* A non-zero value indicates the the MathMap's forward transformation
-* functions are being processed, while a zero value indicates processing
-* of the inverse transformation functions. This value, together with
-* "nin", "nout", "nfwd" and "ninv" are used solely for constructing
-* error messages.
-* var
-* Address in which to return a pointer to an array (with "nfun"
-* elements) of pointers to null terminated strings containing the
-* extracted variable names (i.e. this returns an array of strings).
-*
-* Both the returned array of pointers, and the strings to which they
-* point, will be stored in dynamically allocated memory and should
-* be freed by the caller (using astFree) when no longer required.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - A NULL value will be returned for "*var" if this function is
-* invoked with the global error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- char *duser1; /* Transformation direction for function */
- char *duser2; /* Transformation direction for function */
- char c; /* Extracted character */
- int i1; /* Loop counter for detecting duplicates */
- int i2; /* Loop counter for detecting duplicates */
- int i; /* Loop counter for characters */
- int iend; /* Last character index in parsed name */
- int ifun; /* Loop counter for functions */
- int iuser1; /* Function number as known to the user */
- int iuser2; /* Function number as known to the user */
- int nc; /* Character count */
- int nextra; /* Number of intermediate functions */
- int nprimary; /* Number of primary input/output variables */
-
-/* Initialise. */
- *var = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain the number of primary input/output variables, depending on
- the direction of the coordinate transformation. */
- nprimary = ( forward ? nin : nout );
-
-/* Deterine the number of extra (intermediate) functions that come
- before these primary ones. These affect the numbering of
- transformation functions as known to the user, and must be accounted
- for when reporting error messages. */
- nextra = ( forward ? ninv - nin : nfwd - nout );
-
-/* Allocate and initialise memory for the returned array of pointers. */
- MALLOC_POINTER_ARRAY( *var, char *, nfun )
-
-/* Loop to process each function in turn. */
- if ( astOK ) {
- for ( ifun = 0; ifun < nfun; ifun++ ) {
-
-/* Count the number of characters appearing before the "=" sign (or in
- the entire string if the "=" is absent). */
- for ( nc = 0; ( c = fun[ ifun ][ nc ] ); nc++ ) if ( c == '=' ) break;
-
-/* If no characters were counted, then report an appropriate error
- message, depending on whether the function string was entirely
- blank. */
- if ( !nc ) {
- if ( c ) {
- astError( AST__MISVN,
- "%s(%s): No left hand side in expression: \"%s\".", status,
- method, class, fun[ ifun ] );
- } else {
- astError( AST__MISVN,
- "%s: Transformation function contains no variable "
- "name.", status,
- method );
- }
- break;
- }
-
-/* If OK, allocate memory to hold the output string and check for
- errors. */
- ( *var )[ ifun ] = astMalloc( sizeof( char ) * (size_t) ( nc + 1 ) ) ;
- if ( !astOK ) break;
-
-/* If OK, copy the characters before the "=" sign to the new
- string. */
- nc = 0;
- for ( i = 0; ( c = fun[ ifun ][ i ] ); i++ ) {
- if ( c == '=' ) break;
- ( *var )[ ifun ][ nc++] = c;
- }
-
-/* Null terminate the result. */
- ( *var )[ ifun ][ nc ] = '\0';
-
-/* Try to parse the contents of the extracted string as a name. */
- ParseName( ( *var )[ ifun ], 0, &iend, status );
-
-/* If unsuccessful, or if all the characters were not parsed, then we
- have an invalid variable name, so report an error and quit. */
- if ( ( iend < 0 ) || ( *var )[ ifun ][ iend + 1 ] ) {
- astError( AST__VARIN,
- "%s(%s): Variable name is invalid: \"%s\".", status,
- method, class, ( *var )[ ifun ] );
- break;
- }
- }
-
-/* If an error occurred above, then determine the function number, and
- the direction of the transformation of which it forms part, as known
- to the user. */
- if ( !astOK ) {
- if ( ifun < nprimary ) {
- iuser1 = ifun + 1 + nextra;
- duser1 = ( forward ? "inverse" : "forward" );
- } else {
- iuser1 = ifun + 1 - nprimary;
- duser1 = ( forward ? "forward" : "inverse" );
- }
-
-/* Report a contextual error message. */
- astError( astStatus,
- "Error in %s transformation function %d.", status,
- duser1, iuser1 );
- }
- }
-
-/* If there has been no error, loop to compare all the variable names
- with each other to detect duplication. */
- if ( astOK ) {
- for ( i1 = 1; i1 < nfun; i1++ ) {
- for ( i2 = 0; i2 < i1; i2++ ) {
-
-/* If a duplicate variable name is found, report an error. */
- if ( !strcmp( ( *var )[ i1 ], ( *var )[ i2 ] ) ) {
- astError( AST__DUVAR,
- "%s(%s): Duplicate definition of variable name: "
- "\"%s\".", status,
- method, class, ( *var )[ i1 ] );
-
-/* For each transformation function involved, determine the function
- number and the direction of the transformation of which it forms part,
- as known to the user. */
- if ( i1 < nprimary ) {
- iuser1 = i1 + 1 + nextra;
- duser1 = ( forward ? "inverse" : "forward" );
- } else {
- iuser1 = i1 + 1 - nprimary;
- duser1 = ( forward ? "forward" : "inverse" );
- }
- if ( i2 < nprimary ) {
- iuser2 = i2 + 1 + nextra;
- duser2 = ( forward ? "inverse" : "forward" );
- } else {
- iuser2 = i2 + 1 - nprimary;
- duser2 = ( forward ? "forward" : "inverse" );
- }
-
-/* Report a contextual error message. */
- astError( astStatus,
- "Conflict between %s function %d and %s function %d.", status,
- duser1, iuser1, duser2, iuser2 );
- break;
- }
- }
- if ( !astOK ) break;
- }
- }
-
-/* If an error occurred, free any allocated memory and reset the
- output value. */
- if ( !astOK ) {
- FREE_POINTER_ARRAY( *var, nfun )
- }
-}
-
-static double Gauss( Rcontext *context, int *status ) {
-/*
-* Name:
-* Gauss
-
-* Purpose:
-* Produce a pseudo-random sample from a standard Gaussian distribution.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mathmap.h"
-* double Gauss( Rcontext *context, int *status )
-
-* Class Membership:
-* MathMap member function.
-
-* Description:
-* On each invocation, this function returns a pseudo-random sample drawn
-* from a standard Gaussian distribution with mean zero and standard
-* deviation unity. The Box-Muller transformation method is used.
-
-* Parameters:
-* context
-* Pointer to an Rcontext structure which holds the random number
-* generator's context between invocations.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A sample from a standard Gaussian distribution.
-
-* Notes:
-* - The sequence of numbers returned is determined by the "seed"
-* value in the Rcontext structure supplied.
-* - If the seed value is changed, the "active" flag must also be cleared
-* so that this function can re-initiallise the Rcontext structure before
-* generating the next pseudo-random number. The "active" flag should
-* also be clear to force initialisation the first time an Rcontext
-* structure is used.
-* - This function does not perform error checking and does not generate
-* errors. It will execute even if the global error status is set.
-*/
-
-/* Local Variables: */
- double rsq; /* Squared radius */
- double s; /* Scale factor */
- double x; /* First result value */
- static double y; /* Second result value */
- static int ysaved = 0; /* Previously-saved value available? */
-
- LOCK_MUTEX7
-
-/* If the random number generator context is not active, then it will
- be (re)initialised on the first invocation of Rand (below). Ensure
- that any previously-saved value within this function is first
- discarded. */
- if ( !context->active ) ysaved = 0;
-
-/* If there is a previously-saved value available, then use it and
- mark it as no longer available. */
- if ( ysaved ) {
- x = y;
- ysaved = 0;
-
-/* Otherwise, loop until a suitable new pair of values has been
- obtained. */
- } else {
- while ( 1 ) {
-
-/* Loop to obtain two random values uniformly distributed inside the
- unit circle, while avoiding the origin (which maps to an infinite
- result). */
- do {
- x = 2.0 * Rand( context, status ) - 1.0;
- y = 2.0 * Rand( context, status ) - 1.0;
- rsq = x * x + y * y;
- } while ( ( rsq >= 1.0 ) || ( rsq == 0.0 ) );
-
-/* Perform the Box-Muller transformation, checking that this will not
- produce overflow (which is extremely unlikely). If overflow would
- occur, we simply repeat the above steps with a new pair of random
- numbers. */
- s = -2.0 * log( rsq );
- if ( ( DBL_MAX * rsq ) >= s ) {
- s = sqrt( s / rsq );
-
-/* Scale the original random values to give a pair of results. One will be
- returned and the second kept until next time. */
- x *= s;
- y *= s;
- break;
- }
- }
-
-/* Note that a saved value is available. */
- ysaved = 1;
- }
-
- UNLOCK_MUTEX7
-
-/* Return the current result. */
- return x;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mathmap.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* MathMap member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied MathMap,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the MathMap.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstMathMap *this; /* Pointer to MathMap structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the MathMap structure. */
- this = (AstMathMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
-
- SIZEOF_POINTER_ARRAY( this->fwdfun, this->nfwd )
- SIZEOF_POINTER_ARRAY( this->invfun, this->ninv )
- SIZEOF_POINTER_ARRAY( this->fwdcode, this->nfwd )
- SIZEOF_POINTER_ARRAY( this->invcode, this->ninv )
- SIZEOF_POINTER_ARRAY( this->fwdcon, this->nfwd )
- SIZEOF_POINTER_ARRAY( this->invcon, this->ninv )
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a MathMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mathmap.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* MathMap member function (over-rides the protected astGetAttrib
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a MathMap, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the MathMap.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the MathMap, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the MathMap. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMathMap *this; /* Pointer to the MathMap structure */
- const char *result; /* Pointer value to return */
- int ival; /* Integer attribute value */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the MathMap structure. */
- this = (AstMathMap *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null-terminated string in an appropriate
- format. Set "result" to point at the result string. */
-
-/* Seed. */
-/* ----- */
- if ( !strcmp( attrib, "seed" ) ) {
- ival = astGetSeed( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* SimpFI. */
-/* ------- */
- } else if ( !strcmp( attrib, "simpfi" ) ) {
- ival = astGetSimpFI( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* SimpIF. */
-/* ------- */
- } else if ( !strcmp( attrib, "simpif" ) ) {
- ival = astGetSimpIF( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-
-}
-
-void astInitMathMapVtab_( AstMathMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitMathMapVtab
-
-* Purpose:
-* Initialise a virtual function table for a MathMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "mathmap.h"
-* void astInitMathMapVtab( AstMathMapVtab *vtab, const char *name )
-
-* Class Membership:
-* MathMap vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the MathMap class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAMathMap) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
- vtab->ClearSeed = ClearSeed;
- vtab->ClearSimpFI = ClearSimpFI;
- vtab->ClearSimpIF = ClearSimpIF;
- vtab->GetSeed = GetSeed;
- vtab->GetSimpFI = GetSimpFI;
- vtab->GetSimpIF = GetSimpIF;
- vtab->SetSeed = SetSeed;
- vtab->SetSimpFI = SetSimpFI;
- vtab->SetSimpIF = SetSimpIF;
- vtab->TestSeed = TestSeed;
- vtab->TestSimpFI = TestSimpFI;
- vtab->TestSimpIF = TestSimpIF;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- object->Equal = Equal;
- mapping->MapMerge = MapMerge;
-
-/* Declare the copy constructor, destructor and class dump function. */
- astSetCopy( vtab, Copy );
- astSetDelete( vtab, Delete );
- astSetDump( vtab, Dump, "MathMap",
- "Transformation using mathematical functions" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static double LogGamma( double x, int *status ) {
-/*
-* Name:
-* LogGamma
-
-* Purpose:
-* Calculate the logarithm of the gamma function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mathmap.h"
-* double LogGamma( double x, int *status )
-
-* Class Membership:
-* MathMap member function.
-
-* Description:
-* This function returns the natural logarithm of the gamma function
-* for real arguments x>0. It uses the approximation of Lanczos, with
-* constants from Press et al. (Numerical Recipes), giving a maximum
-* fractional error (on the gamma function) of less than 2e-10.
-
-* Parameters:
-* x
-* The function argument, which must be greater than zero.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The natural logarithm of the gamma function with "x" as argument,
-* or AST__BAD if "x" is not greater than zero.
-
-* Notes:
-* - This function does not generate errors and does not perform error
-* reporting. It will execute even if the global error status is set.
-*/
-
-/* Local Constants: */
- const double c0 = 1.000000000190015; /* Coefficients for series sum... */
- const double c1 = 76.18009172947146;
- const double c2 = -86.50532032941677;
- const double c3 = 24.01409824083091;
- const double c4 = -1.231739572450155;
- const double c5 = 0.1208650973866179e-2;
- const double c6 = -0.5395239384953e-5;
- const double g = 5.0;
-
-/* Local Variables: */
- double result; /* Result value to return */
- double sum; /* Series sum */
- double xx; /* Denominator for summing series */
- static double root_twopi; /* sqrt( 2.0 * pi ) */
- static int init = 0; /* Initialisation performed? */
-
-/* If initialisation has not yet been performed, calculate the
- constant required below. */
- LOCK_MUTEX3
- if ( !init ) {
- root_twopi = sqrt( 2.0 * acos( -1.0 ) );
-
-/* Note that initialisation has been performed. */
- init = 1;
- }
- UNLOCK_MUTEX3
-
-/* Return a bad value if "x" is not greater than zero. */
- if ( x <= 0.0 ) {
- result = AST__BAD;
-
-/* Otherwise, form the series sum. Since we only use 6 terms, the loop
- that would normally be used has been completely unrolled here. */
- } else {
- xx = x;
- sum = c0;
- sum += c1 / ++xx;
- sum += c2 / ++xx;
- sum += c3 / ++xx;
- sum += c4 / ++xx;
- sum += c5 / ++xx;
- sum += c6 / ++xx;
-
-/* Calculate the result. */
- result = x + g + 0.5;
- result -= ( x + 0.5 ) * log( result );
- result = log( root_twopi * sum / x ) - result;
- }
-
-/* Return the result. */
- return result;
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a MathMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* MathMap method (over-rides the protected astMapMerge method
-* inherited from the Mapping class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated MathMap in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated MathMap with one which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated MathMap which is to be merged with
-* its neighbours. This should be a cloned copy of the MathMap
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* MathMap it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated MathMap resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstMapping *new; /* Pointer to replacement Mapping */
- AstMathMap *mathmap1; /* Pointer to first MathMap */
- AstMathMap *mathmap2; /* Pointer to second MathMap */
- char **fwd1; /* Pointer to first forward function array */
- char **fwd2; /* Pointer to second forward function array */
- char **inv1; /* Pointer to first inverse function array */
- char **inv2; /* Pointer to second inverse function array */
- int ifun; /* Loop counter for functions */
- int imap1; /* Index of first Mapping */
- int imap2; /* Index of second Mapping */
- int imap; /* Loop counter for Mappings */
- int invert1; /* Invert flag for first MathMap */
- int invert2; /* Invert flag for second MathMap */
- int nfwd1; /* No. forward functions for first MathMap */
- int nfwd2; /* No. forward functions for second MathMap */
- int nin1; /* Number input coords for first MathMap */
- int ninv1; /* No. inverse functions for first MathMap */
- int ninv2; /* No. inverse functions for second MathMap */
- int nout2; /* Number output coords for second MathMap */
- int result; /* Result value to return */
- int simplify; /* Mappings may simplify? */
-
-/* Initialise the returned result. */
- result = -1;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- mathmap1 = NULL;
- mathmap2 = NULL;
- imap1 = 0;
- imap2 = 0;
- invert1 = 0;
- invert2 = 0;
- nfwd1 = 0;
- nin1 = 0;
- ninv1 = 0;
-
-/* MathMaps are only worth simplifying if they occur in series. */
- simplify = series;
-
-/* If simplification appears possible, then obtain the indices of the
- nominated mapping and of the one which follows it. Check that a
- mapping exists for the second index. */
- if ( simplify ) {
- imap1 = where;
- imap2 = imap1 + 1;
- simplify = ( imap2 < *nmap );
- }
-
-/* If OK, check whether the class of both Mappings is "MathMap" (a
- MathMap can only combine with another MathMap). */
- if ( simplify ) {
- simplify = !strcmp( astGetClass( ( *map_list )[ imap1 ] ), "MathMap" );
- }
- if ( astOK && simplify ) {
- simplify = !strcmp( astGetClass( ( *map_list )[ imap2 ] ), "MathMap" );
- }
-
-/* If still OK, obtain pointers to the two MathMaps and the associated
- invert flag values. */
- if ( astOK && simplify ) {
- mathmap1 = (AstMathMap *) ( *map_list )[ imap1 ];
- mathmap2 = (AstMathMap *) ( *map_list )[ imap2 ];
- invert1 = ( *invert_list )[ imap1 ];
- invert2 = ( *invert_list )[ imap2 ];
-
-/* Depending on the invert flag values, obtain the SimpFI or SimpIF
- attribute value from each MathMap and check whether they are set so as
- to permit simplification. */
- simplify = ( ( invert1 ? astGetSimpIF( mathmap1 ) :
- astGetSimpFI( mathmap1 ) ) &&
- ( invert2 ? astGetSimpFI( mathmap2 ) :
- astGetSimpIF( mathmap2 ) ) );
- }
-
-/* If still OK, obtain the effective numbers of input coordinates for
- the first MathMap and output coordinates for the second. Take account
- of the associated invert flags and the way the Invert attribute of
- each MathMap is currently set. */
- if ( astOK && simplify ) {
- nin1 = ( invert1 == astGetInvert( mathmap1 ) ) ?
- astGetNin( mathmap1 ) : astGetNout( mathmap1 );
- nout2 = ( invert2 == astGetInvert( mathmap2 ) ) ?
- astGetNout( mathmap2 ) : astGetNin( mathmap2 );
-
-/* Simplification is only possible if these two numbers are equal
- (otherwise the the two MathMaps cannot be identical). */
- simplify = ( nin1 == nout2 );
- }
-
-/* If still OK, obtain the effective number of forward transformation
- functions for the first MathMap (allowing for the associated invert
- flag). Similarly, obtain the effective number of inverse
- transformation functions for the second MathMap. */
- if ( astOK && simplify ) {
- nfwd1 = !invert1 ? mathmap1->nfwd : mathmap1->ninv;
- ninv2 = !invert2 ? mathmap2->ninv : mathmap2->nfwd;
-
-/* Check whether these values are equal. The MathMaps cannot be
- identical if they are not. */
- simplify = ( nfwd1 == ninv2 );
- }
-
-/* As above, obtain pointers to the array of effective forward
- transformation functions for the first MathMap, and the effective
- inverse transformation functions for the second MathMap. */
- if ( astOK && simplify ) {
- fwd1 = !invert1 ? mathmap1->fwdfun : mathmap1->invfun;
- inv2 = !invert2 ? mathmap2->invfun : mathmap2->fwdfun;
-
-/* Loop to check whether these two sets of functions are
- identical. The MathMaps cannot be merged unless they are. */
- for ( ifun = 0; ifun < nfwd1; ifun++ ) {
- simplify = !strcmp( fwd1[ ifun ], inv2[ ifun ] );
- if ( !simplify ) break;
- }
- }
-
-/* If OK, repeat the above process to compare the effective inverse
- transformation functions of the first MathMap with the forward
- functions of the second one. */
- if ( astOK && simplify ) {
- ninv1 = !invert1 ? mathmap1->ninv : mathmap1->nfwd;
- nfwd2 = !invert2 ? mathmap2->nfwd : mathmap2->ninv;
- simplify = ( ninv1 == nfwd2 );
- }
- if ( astOK && simplify ) {
- inv1 = !invert1 ? mathmap1->invfun : mathmap1->fwdfun;
- fwd2 = !invert2 ? mathmap2->fwdfun : mathmap2->invfun;
- for ( ifun = 0; ifun < ninv1; ifun++ ) {
- simplify = !strcmp( inv1[ ifun ], fwd2[ ifun ] );
- if ( !simplify ) break;
- }
- }
-
-/* If the two MathMaps can be merged, create a UnitMap as a
- replacement. */
- if ( astOK && simplify ) {
- new = (AstMapping *) astUnitMap( nin1, "", status );
-
-/* If OK, annul the pointers to the original MathMaps. */
- if ( astOK ) {
- ( *map_list )[ imap1 ] = astAnnul( ( *map_list )[ imap1 ] );
- ( *map_list )[ imap2 ] = astAnnul( ( *map_list )[ imap2 ] );
-
-/* Insert the pointer to the replacement UnitMap and store the
- associated invert flag. */
- ( *map_list )[ imap1 ] = new;
- ( *invert_list )[ imap1 ] = 0;
-
-/* Loop to move the following Mapping pointers and invert flags down
- in their arrays to close the gap. */
- for ( imap = imap2 + 1; imap < *nmap; imap++ ) {
- ( *map_list )[ imap - 1 ] = ( *map_list )[ imap ];
- ( *invert_list )[ imap - 1 ] = ( *invert_list )[ imap ];
- }
-
-/* Clear the final entry in each array. */
- ( *map_list )[ *nmap - 1 ] = NULL;
- ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
- modified element. */
- ( *nmap )--;
- result = imap1;
- }
- }
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) result = -1;
-
-/* Return the result. */
- return result;
-}
-
-static void ParseConstant( const char *method, const char *class,
- const char *exprs, int istart, int *iend,
- double *con, int *status ) {
-/*
-* Name:
-* ParseConstant
-
-* Purpose:
-* Parse a constant.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mathmap.h"
-* void ParseConstant( const char *method, const char *class,
-* const char *exprs, int istart, int *iend,
-* double *con, int *status )
-
-* Class Membership:
-* MathMap member function.
-
-* Description:
-* This routine parses an expression, looking for a constant starting at
-* the character with index "istart" in the string "exprs". If it
-* identifies the constant successfully, "*con" it will return its value
-* and "*iend" will be set to the index of the final constant character
-* in "exprs".
-*
-* If the characters encountered are clearly not part of a constant (it
-* does not begin with a numeral or decimal point) the function returns
-* with "*con" set to zero and "*iend" set to -1, but without reporting
-* an error. However, if the first character appears to be a constant but
-* its syntax proves to be invalid, then an error is reported.
-*
-* The expression must be in lower case with no embedded white space.
-* The constant must not have a sign (+ or -) in front of it.
-
-* Parameters:
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function.
-* This method name is used solely for constructing error messages.
-* class
-* Pointer to a constant null-terminated character string containing the
-* class name of the Object being processed. This name is used solely
-* for constructing error messages.
-* exprs
-* Pointer to a null-terminated string containing the expression
-* to be parsed.
-* istart
-* Index of the first character in "exprs" to be considered by this
-* function.
-* iend
-* Pointer to an int in which to return the index in "exprs" of the
-* final character which forms part of the constant. If no constant is
-* found, a value of -1 is returned.
-* con
-* Pointer to a double, in which the value of the constant, if found,
-* will be returned.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- char *str; /* Pointer to temporary string */
- char c; /* Single character from the expression */
- int dpoint; /* Decimal point encountered? */
- int expon; /* Exponent character encountered? */
- int i; /* Loop counter for characters */
- int iscon; /* Character is part of the constant? */
- int n; /* Number of values read by astSscanf */
- int nc; /* Number of characters read by astSscanf */
- int numer; /* Numeral encountered in current field? */
- int sign; /* Sign encountered? */
- int valid; /* Constant syntax valid? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Initialise. */
- *con = 0.0;
- *iend = -1;
-
-/* Check if the expression starts with a numeral or a decimal point. */
- c = exprs[ istart ];
- numer = isdigit( c );
- dpoint = ( c == '.' );
-
-/* If it begins with any of these, the expression is clearly intended
- to be a constant, so any failure beyond this point will result in an
- error. Otherwise, failure to find a constant is not an error. */
- if ( numer || dpoint ) {
-
-/* Initialise remaining variables specifying the parser context. */
- expon = 0;
- sign = 0;
- valid = 1;
-
-/* Loop to increment the last constant character position until the
- following character in the expression does not look like part of the
- constant. */
- *iend = istart;
- iscon = 1;
- while ( ( c = exprs[ *iend + 1 ] ) && iscon ) {
- iscon = 0;
-
-/* It may be part of a numerical constant if it is a numeral, wherever
- it occurs. */
- if ( isdigit( c ) ) {
- numer = 1;
- iscon = 1;
-
-/* Or a decimal point, so long as it is the first one and is not in
- the exponent field. Otherwise it is invalid. */
- } else if ( c == '.' ) {
- if ( !( dpoint || expon ) ) {
- dpoint = 1;
- iscon = 1;
- } else {
- valid = 0;
- }
-
-/* Or if it is a 'd' or 'e' exponent character, so long as it is the
- first one and at least one numeral has been encountered first.
- Otherwise it is invalid. */
- } else if ( ( c == 'd' ) || ( c == 'e' ) ) {
- if ( !expon && numer ) {
- expon = 1;
- numer = 0;
- iscon = 1;
- } else {
- valid = 0;
- }
-
-/* Or if it is a sign, so long as it is in the exponent field and is
- the first sign with no previous numerals in the same field. Otherwise
- it is invalid (unless numerals have been encountered, in which case it
- marks the end of the constant). */
- } else if ( ( c == '+' ) || ( c == '-' ) ) {
- if ( expon && !sign && !numer ) {
- sign = 1;
- iscon = 1;
- } else if ( !numer ) {
- valid = 0;
- }
- }
-
-/* Increment the character count if the next character may be part of
- the constant, or if it was invalid (it will then form part of the
- error message). */
- if ( iscon || !valid ) ( *iend )++;
- }
-
-/* Finally, check that the last field contained a numeral. */
- valid = ( valid && numer );
-
-/* If the constant appears valid, allocate a temporary string to hold
- it. */
- if ( valid ) {
- str = astMalloc( (size_t) ( *iend - istart + 2 ) );
- if ( astOK ) {
-
-/* Copy the constant's characters, changing 'd' to 'e' so that
- "astSscanf" will recognise it as an exponent character. */
- for ( i = istart; i <= *iend; i++ ) {
- str[ i - istart ] = ( exprs[ i ] == 'd' ) ? 'e' : exprs[ i ];
- }
- str[ *iend - istart + 1 ] = '\0';
-
-/* Attempt to read the constant as a double, noting how many values
- are read and how many characters consumed. */
- n = astSscanf( str, "%lf%n", con, &nc );
-
-/* Check that one value was read and all the characters consumed. If
- not, then the constant's syntax is invalid. */
- if ( ( n != 1 ) || ( nc < ( *iend - istart + 1 ) ) ) valid = 0;
- }
-
-/* Free the temporary string. */
- str = astFree( str );
- }
-
-/* If the constant syntax is invalid, and no other error has occurred,
- then report an error. */
- if ( astOK && !valid ) {
- astError( AST__CONIN,
- "%s(%s): Invalid constant syntax in the expression "
- "\"%.*s\".", status,
- method, class, *iend + 1, exprs );
- }
-
-/* If an error occurred, reset the output values. */
- if ( !astOK ) {
- *iend = -1;
- *con = 0.0;
- }
- }
-}
-
-static void ParseName( const char *exprs, int istart, int *iend, int *status ) {
-/*
-* Name:
-* ParseName
-
-* Purpose:
-* Parse a name.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mathmap.h"
-* void ParseName( const char *exprs, int istart, int *iend, int *status )
-
-* Class Membership:
-* MathMap member function.
-
-* Description:
-* This routine parses an expression, looking for a name starting at the
-* character with index "istart" in the string "exprs". If it identifies
-* a name successfully, "*iend" will return the index of the final name
-* character in "exprs". A name must begin with an alphabetic character
-* and subsequently contain only alphanumeric characters or underscores.
-*
-* If the expression does not contain a name at the specified location,
-* "*iend" is set to -1. No error results.
-*
-* The expression should not contain embedded white space.
-
-* Parameters:
-* exprs
-* Pointer to a null-terminated string containing the expression
-* to be parsed.
-* istart
-* Index of the first character in "exprs" to be considered by this
-* function.
-* iend
-* Pointer to an int in which to return the index in "exprs" of the
-* final character which forms part of the name. If no name is
-* found, a value of -1 is returned.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- char c; /* Single character from expression */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Initialise. */
- *iend = -1;
-
-/* Check the first character is valid for a name (alphabetic). */
- if ( isalpha( exprs[ istart ] ) ) {
-
-/* If so, loop to inspect each subsequent character until one is found
- which is not part of a name (not alphanumeric or underscore). */
- for ( *iend = istart; ( c = exprs[ *iend + 1 ] ); ( *iend )++ ) {
- if ( !( isalnum( c ) || ( c == '_' ) ) ) break;
- }
- }
-}
-
-static void ParseVariable( const char *method, const char *class,
- const char *exprs, int istart, int nvar,
- const char *var[], int *ivar, int *iend, int *status ) {
-/*
-* Name:
-* ParseVariable
-
-* Purpose:
-* Parse a variable name.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mathmap.h"
-* void ParseVariable( const char *method, const char *class,
-* const char *exprs, int istart, int nvar,
-* const char *var[], int *ivar, int *iend, int *status )
-
-* Class Membership:
-* MathMap member function.
-
-* Description:
-* This routine parses an expression, looking for a recognised variable
-* name starting at the character with index "istart" in the string
-* "exprs". If it identifies a variable name successfully, "*ivar" will
-* return a value identifying it and "*iend" will return the index of the
-* final variable name character in "exprs". To be recognised, a name
-* must begin with an alphabetic character and subsequently contain only
-* alphanumeric characters or underscores. It must also appear in the
-* list of defined variable names supplied to this function.
-*
-* If the expression does not contain a name at the specified location,
-* "*ivar" and "*iend" are set to -1 and no error results. However, if
-* the expression contains a name but it is not in the list of defined
-* variable names supplied, then an error is reported.
-*
-* This function is case sensitive. The expression should not contain
-* embedded white space.
-
-* Parameters:
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function.
-* This method name is used solely for constructing error messages.
-* class
-* Pointer to a constant null-terminated character string containing the
-* class name of the Object being processed. This name is used solely
-* for constructing error messages.
-* exprs
-* Pointer to a null-terminated string containing the expression
-* to be parsed.
-* istart
-* Index of the first character in "exprs" to be considered by this
-* function.
-* nvar
-* The number of defined variable names.
-* var
-* An array of pointers (with "nvar" elements) to null-terminated
-* strings. Each of these should contain a variable name to be
-* recognised. These strings are case sensitive and should contain
-* no white space.
-* ivar
-* Pointer to an int in which to return the index in "vars" of the
-* variable name found. If no variable name is found, a value of -1
-* is returned.
-* iend
-* Pointer to an int in which to return the index in "exprs" of the
-* final character which forms part of the variable name. If no variable
-* name is found, a value of -1 is returned.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- int found; /* Variable name recognised? */
- int nc; /* Number of characters in variable name */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Initialise. */
- *ivar = -1;
- *iend = -1;
-
-/* Determine if the characters in the expression starting at index
- "istart" constitute a valid name. */
- ParseName( exprs, istart, iend, status );
-
-/* If so, calculate the length of the name. */
- if ( *iend >= istart ) {
- nc = *iend - istart + 1;
-
-/* Loop to compare the name with the list of variable names
- supplied. */
- found = 0;
- for ( *ivar = 0; *ivar < nvar; ( *ivar )++ ) {
- found = ( nc == (int) strlen( var[ *ivar ] ) ) &&
- !strncmp( exprs + istart, var[ *ivar ], (size_t) nc );
-
-/* Break if the name is recognised. */
- if ( found ) break;
- }
-
-/* If it was not recognised, then report an error and reset the output
- values. */
- if ( !found ) {
- astError( AST__UDVOF,
- "%s(%s): Undefined variable or function in the expression "
- "\"%.*s\".", status,
- method, class, *iend + 1, exprs );
- *ivar = -1;
- *iend = -1;
- }
- }
-}
-
-static double Poisson( Rcontext *context, double mean, int *status ) {
-/*
-* Name:
-* Poisson
-
-* Purpose:
-* Produce a pseudo-random sample from a Poisson distribution.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mathmap.h"
-* double Poisson( Rcontext *context, double mean, int *status )
-
-* Class Membership:
-* MathMap member function.
-
-* Description:
-* On each invocation, this function returns a pseudo-random sample drawn
-* from a Poisson distribution with a specified mean. A combination of
-* methods is used, depending on the value of the mean. The algorithm is
-* based on that given by Press et al. (Numerical Recipes), but
-* re-implemented and extended.
-
-* Parameters:
-* context
-* Pointer to an Rcontext structure which holds the random number
-* generator's context between invocations.
-* mean
-* The mean of the Poisson distribution, which should not be
-* negative.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A sample (which will only take integer values) from the Poisson
-* distribution, or AST__BAD if the mean supplied is negative.
-
-* Notes:
-* - The sequence of numbers returned is determined by the "seed"
-* value in the Rcontext structure supplied.
-* - If the seed value is changed, the "active" flag must also be cleared
-* so that this function can re-initiallise the Rcontext structure before
-* generating the next pseudo-random number. The "active" flag should
-* also be clear to force initialisation the first time an Rcontext
-* structure is used.
-* - This function does not perform error checking and does not generate
-* errors. It will execute even if the global error status is set.
-*/
-
-/* Local Constants: */
- const double small = 9.3; /* "Small" distribution mean value */
-
-/* Local Variables: */
- double pfract; /* Probability of accepting sample */
- double product; /* Product of random samples */
- double ran; /* Sample from Lorentzian distribution */
- double result; /* Result value to return */
- static double beta; /* Constant for forming acceptance ratio */
- static double huge; /* Large mean where std. dev. is negligible */
- static double last_mean; /* Value of "mean" on last invocation */
- static double log_mean; /* Logarithm of "mean" */
- static double pi; /* Value of pi */
- static double ranmax; /* Maximum safe value of "ran" */
- static double root_2mean; /* sqrt( 2.0 * mean ) */
- static double sqrt_point9; /* Square root of 0.9 */
- static double thresh; /* Threshold for product of samples */
- static int init = 0; /* Local initialisation performed? */
-
- LOCK_MUTEX6
-
-/* If initialisation has not yet been performed, then perform it
- now. */
- if ( !init ) {
-
-/* Initialise the mean value from the previous invocation. */
- last_mean = -1.0;
-
-/* Calculate simple constants. */
- pi = acos( -1.0 );
- sqrt_point9 = sqrt( 0.9 );
-
-/* Calculate the value of the distribution mean for which the smallest
- representable deviation from the mean permitted by the machine
- precision is one thousand standard deviations. */
- huge = pow( 1.0e3 / DBL_EPSILON, 2.0 );
-
-/* Calculate the largest value such that
- (0.9+(sqrt_point9*ranmax)*(sqrt_point9*ranmax)) doesn't overflow,
- allowing a small margin for rounding error. */
- ranmax = ( sqrt( DBL_MAX - 0.9 ) / sqrt( 0.9 ) ) *
- ( 1.0 - 4.0 * DBL_EPSILON );
-
-/* Note that initialisation has been performed. */
- init = 1;
- }
-
-/* If the distribution mean is less than zero, then return a bad
- result. */
- if ( mean < 0.0 ) {
- result = AST__BAD;
-
-/* If the mean is zero, then the result can only be zero. */
- } else if ( mean == 0.0 ) {
- result = 0.0;
-
-/* Otherwise, if the mean is sufficiently small, we can use the direct
- method of summing a series of exponentially distributed random samples
- and counting the number which occur before the mean is exceeded. This
- is equivalent to multiplying a series of uniformly distributed
- samples and counting the number which occur before the product
- becomes less then an equivalent threshold. */
- } else if ( mean <= small ) {
-
-/* If the mean has changed since the last invocation, store the new
- mean and calculate a new threshold. */
- if ( mean != last_mean ) {
- last_mean = mean;
- thresh = exp( -mean );
- }
-
-/* Initialise the product and the result. */
- product = 1.0;
- result = -1.0;
-
-/* Multiply the random samples, counting the number needed to reach
- the threshold. */
- do {
- product *= Rand( context, status );
- result += 1.0;
- } while ( product > thresh );
-
-/* Otherwise, if the distribution mean is large (but not huge), we
- must use an indirect rejection method. */
- } else if ( mean <= huge ) {
-
-/* If the mean has changed since the last invocation, then
- re-calculate the constants required below. Note that because of the
- restrictions we have placed on "mean", these calculations are safe
- against overflow. */
- if ( mean != last_mean ) {
- last_mean = mean;
- log_mean = log( mean );
- root_2mean = sqrt( 2.0 * mean );
- beta = mean * log_mean - LogGamma( mean + 1.0, status );
- }
-
-/* Loop until a suitable random sample has been generated. */
- do {
- do {
-
-/* First transform a sample from a uniform distribution to obtain a
- sample from a Lorentzian distribution. Check that the result is not so
- large as to cause overflow later. Also check for overflow in the maths
- library. If necessary, obtain a new sample. */
- do {
- errno = 0;
- ran = tan( pi * Rand( context, status ) );
- } while ( ( ran > ranmax ) ||
- ( ( errno == ERANGE ) &&
- ( ( ( ran >= 0.0 ) ? ran : -ran ) == HUGE_VAL ) ) );
-
-/* If OK, scale the sample and add a constant so that the sample's
- distribution approximates the Poisson distribution we
- require. Overflow is prevented by the check on "ran" above, together
- with the restricted value of "mean". */
- result = ran * root_2mean + mean;
-
-/* If the result is less than zero (where the Poisson distribution has
- value zero), then obtain a new sample. */
- } while ( result < 0.0 );
-
-/* Round down to an integer, so that the sample is valid for a Poisson
- distribution. */
- result = floor( result );
-
-/* Calculate the ratio between the required Poisson distribution and
- the Lorentzian from which we have sampled (the factor of 0.9 prevents
- this exceeding 1.0, and overflow is again prevented by the checks
- performed above). */
- ran *= sqrt_point9;
- pfract = ( 0.9 + ran * ran ) *
- exp( result * log_mean - LogGamma( result + 1.0, status ) - beta );
-
-/* Accept the sample with this fractional probability, otherwise
- obtain a new sample. */
- } while ( Rand( context, status ) > pfract );
-
-/* If the mean is huge, the relative standard deviation will be
- negligible compared to the machine precision. In such cases, the
- probability of getting a result that differs from the mean is
- effectively zero, so we can simply return the mean. */
- } else {
- result = mean;
- }
-
- UNLOCK_MUTEX6
-
-/* Return the result. */
- return result;
-}
-
-static double Rand( Rcontext *context, int *status ) {
-/*
-* Name:
-* Rand
-
-* Purpose:
-* Produce a uniformly distributed pseudo-random number.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mathmap.h"
-* double Rand( Rcontext *context, int *status )
-
-* Class Membership:
-* MathMap member function.
-
-* Description:
-* On each invocation, this function returns a pseudo-random number
-* uniformly distributed in the range 0.0 to 1.0 (inclusive). The
-* underlying algorithm is that used by the "ran2" function of Press et
-* al. (Numerical Recipes), which has a long period and good statistical
-* properties. This independent implementation returns double precision
-* values.
-
-* Parameters:
-* context
-* Pointer to an Rcontext structure which holds the random number
-* generator's context between invocations.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The sequence of numbers returned is determined by the "seed"
-* value in the Rcontext structure supplied.
-* - If the seed value is changed, the "active" flag must also be cleared
-* so that this function can re-initiallise the Rcontext structure before
-* generating the next pseudo-random number. The "active" flag should
-* also be clear to force initialisation the first time an Rcontext
-* structure is used.
-* - This function does not perform error checking and does not generate
-* errors. It will execute even if the global error status is set.
-*/
-
-/* Local Constants: */
- const long int a1 = 40014L; /* Random number generator constants... */
- const long int a2 = 40692L;
- const long int m1 = 2147483563L;
- const long int m2 = 2147483399L;
- const long int q1 = 53668L;
- const long int q2 = 52774L;
- const long int r1 = 12211L;
- const long int r2 = 3791L;
- const int ntab = /* Size of shuffle table */
- AST_MATHMAP_RAND_CONTEXT_NTAB_;
- const int nwarm = 8; /* Number of warm-up iterations */
-
-/* Local Variables: */
- double result; /* Result value to return */
- double scale; /* Scale factor for random integers */
- double sum; /* Sum for forming normalisation constant */
- int dbits; /* Approximate bits in double mantissa */
- int irand; /* Loop counter for random integers */
- int itab; /* Loop counter for shuffle table */
- int lbits; /* Approximate bits used by generators */
- long int seed; /* Random number seed */
- long int tmp; /* Temporary variable */
- static double norm; /* Normalisation constant */
- static double scale0; /* Scale decrement for successive integers */
- static int init = 0; /* Local initialisation performed? */
- static int nrand; /* Number of random integers to use */
-
-/* If the random number generator context is not active, then
- initialise it. */
- if ( !context->active ) {
-
-/* First, perform local initialisation for this function, if not
- already done. */
- LOCK_MUTEX4
- if ( !init ) {
-
-/* Obtain the approximate number of bits used by the random integer
- generator from the value "m1". */
- (void) frexp( (double) m1, &lbits );
-
-/* Obtain the approximate number of bits used by the mantissa of the
- double value we want to produce, allowing for the (unlikely)
- possibility that the mantissa's radix isn't 2. */
- dbits = (int) ceil( (double) DBL_MANT_DIG *
- log( (double) FLT_RADIX ) / log( 2.0 ) );
-
-/* Hence determine how many random integers we need to combine to
- produce each double value, so that all the mantissa's bits will be
- used. */
- nrand = ( dbits + lbits - 1 ) / lbits;
-
-/* Calculate the scale factor by which each successive random
- integer's contribution to the result is reduced so as to generate
- progressively less significant bits. */
- scale0 = 1.0 / (double) ( m1 - 1L );
-
-/* Loop to sum the maximum contributions from each random integer
- (assuming that each takes the largest possible value, of "m1-1",
- from which we will later subtract 1). This produces the normalisation
- factor by which the result must be scaled so as to lie between 0.0 and
- 1.0 (inclusive). */
- sum = 0.0;
- scale = 1.0;
- for ( irand = 0; irand < nrand; irand++ ) {
- scale *= scale0;
- sum += scale;
- }
- norm = 1.0 / ( sum * (double) ( m1 - 2L ) );
-
-/* Note that local initialisation has been done. */
- init = 1;
- }
- UNLOCK_MUTEX4
-
-/* Obtain the seed value, enforcing positivity. */
- seed = (long int) context->seed;
- if ( seed < 1 ) seed = seed + LONG_MAX;
- if ( seed < 1 ) seed = LONG_MAX;
-
-/* Initialise the random number generators with this seed. */
- context->rand1 = context->rand2 = seed;
-
-/* Now loop to initialise the shuffle table with an initial set of
- random values. We generate more values than required in order to "warm
- up" the generator before recording values in the table. */
- for ( itab = ntab + nwarm - 1; itab >= 0; itab-- ) {
-
-/* Repeatedly update "rand1" from the expression "(rand1*a1)%m1" while
- avoiding overflow. */
- tmp = context->rand1 / q1;
- context->rand1 = a1 * ( context->rand1 - tmp * q1 ) - tmp * r1;
- if ( context->rand1 < 0L ) context->rand1 += m1;
-
-/* After warming up, start recording values in the table. */
- if ( itab < ntab ) context->table[ itab ] = context->rand1;
- }
-
-/* Record the last entry in the table as the "previous" random
- integer. */
- context->random_int = context->table[ 0 ];
-
-/* Note the random number generator context is active. */
- context->active = 1;
- }
-
-/* Generate a random value. */
-/* ------------------------ */
-/* Initialise. */
- result = 0.0;
-
-/* Loop to generate sufficient random integers to combine into a
- double value. */
- scale = norm;
- for ( irand = 0; irand < nrand; irand++ ) {
-
-/* Update the first generator "rand1" from the expression
- "(a1*rand1)%m1" while avoiding overflow. */
- tmp = context->rand1 / q1;
- context->rand1 = a1 * ( context->rand1 - tmp * q1 ) - tmp * r1;
- if ( context->rand1 < 0L ) context->rand1 += m1;
-
-/* Similarly, update the second generator "rand2" from the expression
- "(a2*rand2)%m2". */
- tmp = context->rand2 / q2;
- context->rand2 = a2 * ( context->rand2 - tmp * q2 ) - tmp * r2;
- if ( context->rand2 < 0L ) context->rand2 += m2;
-
-/* Use the previous random integer to generate an index into the
- shuffle table. */
- itab = (int) ( context->random_int /
- ( 1L + ( m1 - 1L ) / (long int) ntab ) );
-
-/* Extract the table entry and replace it with a new random value from
- the first generator "rand1". This is the Bays-Durham shuffle. */
- context->random_int = context->table[ itab ];
- context->table[ itab ] = context->rand1;
-
-/* Combine the extracted value with the latest value from the second
- generator "rand2". */
- context->random_int -= context->rand2;
- if ( context->random_int < 1L ) context->random_int += m1 - 1L;
-
-/* Update the scale factor to apply to the resulting random integer
- and accumulate its contribution to the result. */
- scale *= scale0;
- result += scale * (double) ( context->random_int - 1L );
- }
-
-/* Return the result. */
- return result;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a MathMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mathmap.h"
-* void SetAttrib( AstObject *this, const char *setting, int *status )
-
-* Class Membership:
-* MathMap member function (extends the astSetAttrib method inherited from
-* the Mapping class).
-
-* Description:
-* This function assigns an attribute value for a MathMap, the attribute
-* and its value being specified by means of a string of the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in lower
-* case with no white space present. The value to the right of the "="
-* should be a suitable textual representation of the value to be assigned
-* and this will be interpreted according to the attribute's data type.
-* White space surrounding the value is only significant for string
-* attributes.
-
-* Parameters:
-* this
-* Pointer to the MathMap.
-* setting
-* Pointer to a null terminated string specifying the new attribute
-* value.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-*/
-
-/* Local Vaiables: */
- AstMathMap *this; /* Pointer to the MathMap structure */
- int ival; /* Integer attribute value */
- int len; /* Length of setting string */
- int nc; /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the MathMap structure. */
- this = (AstMathMap *) this_object;
-
-/* Obtain the length of the setting string. */
- len = strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse the
- setting string and extract the attribute value (or an offset to it in the
- case of string values). In each case, use the value set in "nc" to check
- that the entire string was matched. Once a value has been obtained, use the
- appropriate method to set it. */
-
-/* Seed. */
-/* ----- */
- if ( nc = 0,
- ( 1 == astSscanf( setting, "seed= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetSeed( this, ival );
-
-/* SimpFI. */
-/* ------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "simpfi= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetSimpFI( this, ival );
-
-/* SimpIF. */
-/* ------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "simpif= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetSimpIF( this, ival );
-
-/* Pass any unrecognised setting to the parent method for further
- interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a MathMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mathmap.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* MathMap member function (over-rides the astTestAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a MathMap's attributes.
-
-* Parameters:
-* this
-* Pointer to the MathMap.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstMathMap *this; /* Pointer to the MathMap structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the MathMap structure. */
- this = (AstMathMap *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* Seed. */
-/* ----- */
- if ( !strcmp( attrib, "seed" ) ) {
- result = astTestSeed( this );
-
-/* SimpFI. */
-/* ------- */
- } else if ( !strcmp( attrib, "simpfi" ) ) {
- result = astTestSimpFI( this );
-
-/* SimpIF. */
-/* ------- */
- } else if ( !strcmp( attrib, "simpif" ) ) {
- result = astTestSimpIF( this );
-
-/* If the attribute is not recognised, pass it on to the parent method
- for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *map, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a MathMap to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mathmap.h"
-* AstPointSet *Transform( AstMapping *map, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* MathMap member function (over-rides the astTransform method inherited
-* from the Mapping class).
-
-* Description:
-* This function takes a MathMap and a set of points encapsulated in a
-* PointSet and transforms the points so as to apply the required coordinate
-* transformation.
-
-* Parameters:
-* map
-* Pointer to the MathMap.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of coordinates for the MathMap being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstMathMap *this; /* Pointer to MathMap to be applied */
- AstPointSet *result; /* Pointer to output PointSet */
- double **data_ptr; /* Array of pointers to coordinate data */
- double **ptr_in; /* Pointer to input coordinate data */
- double **ptr_out; /* Pointer to output coordinate data */
- double *work; /* Workspace for intermediate results */
- int idata; /* Loop counter for data pointer elements */
- int ifun; /* Loop counter for functions */
- int ncoord_in; /* Number of coordinates per input point */
- int ncoord_out; /* Number of coordinates per output point */
- int ndata; /* Number of data pointer elements filled */
- int nfun; /* Number of functions to evaluate */
- int npoint; /* Number of points */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- work = NULL;
-
-/* Obtain a pointer to the MathMap. */
- this = (AstMathMap *) map;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Mapping class. This function validates
- all arguments and generates an output PointSet if necessary, but does not
- actually transform any coordinate values. */
- result = (*parent_transform)( map, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- transformation needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
- and output PointSets and obtain pointers for accessing the input and output
- coordinate values. */
- ncoord_in = astGetNcoord( in );
- ncoord_out = astGetNcoord( result );
- npoint = astGetNpoint( in );
- ptr_in = astGetPoints( in );
- ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse transformation, according
- to the direction specified and whether the mapping has been inverted. */
- if ( astGetInvert( this ) ) forward = !forward;
-
-/* Obtain the number of transformation functions that must be
- evaluated to perform the transformation. This will include any that
- produce intermediate results from which the final results are
- calculated. */
- nfun = forward ? this->nfwd : this->ninv;
-
-/* If intermediate results are to be calculated, then allocate
- workspace to hold them (each intermediate result being a vector of
- "npoint" double values). */
- if ( nfun > ncoord_out ) {
- work = astMalloc( sizeof( double) *
- (size_t) ( npoint * ( nfun - ncoord_out ) ) );
- }
-
-/* Also allocate space for an array to hold pointers to the input
- data, intermediate results and output data. */
- data_ptr = astMalloc( sizeof( double * ) * (size_t) ( ncoord_in + nfun ) );
-
-/* We now set up the "data_ptr" array to locate the data to be
- processed. */
- if ( astOK ) {
-
-/* The first elements of this array point at the input data
- vectors. */
- ndata = 0;
- for ( idata = 0; idata < ncoord_in; idata++ ) {
- data_ptr[ ndata++ ] = ptr_in[ idata ];
- }
-
-/* The following elements point at successive vectors within the
- workspace array (if allocated). These vectors will act first as output
- arrays for intermediate results, and then as input arrays for
- subsequent calculations which use these results. */
- for ( idata = 0; idata < ( nfun - ncoord_out ); idata++ ) {
- data_ptr[ ndata++ ] = work + ( idata * npoint );
- }
-
-/* The final elements point at the output coordinate data arrays into
- which the final results will be written. */
- for ( idata = 0; idata < ncoord_out; idata++ ) {
- data_ptr[ ndata++ ] = ptr_out[ idata ];
- }
-
-/* Perform coordinate transformation. */
-/* ---------------------------------- */
-/* Loop to evaluate each transformation function in turn. */
- for ( ifun = 0; ifun < nfun; ifun++ ) {
-
-/* Invoke the function that evaluates compiled expressions. Pass the
- appropriate code and constants arrays, depending on the direction of
- coordinate transformation, together with the required stack size. The
- output array is the vector located by successive elements of the
- "data_ptr" array (skipping the input data elements), while the
- function has access to all previous elements of the "data_ptr" array
- to locate the required input data. */
- EvaluateFunction( &this->rcontext, npoint, (const double **) data_ptr,
- forward ? this->fwdcode[ ifun ] :
- this->invcode[ ifun ],
- forward ? this->fwdcon[ ifun ] :
- this->invcon[ ifun ],
- forward ? this->fwdstack : this->invstack,
- data_ptr[ ifun + ncoord_in ], status );
- }
- }
-
-/* Free the array of data pointers and any workspace allocated for
- intermediate results. */
- data_ptr = astFree( data_ptr );
- if ( nfun > ncoord_out ) work = astFree( work );
-
-/* If an error occurred, then return a NULL pointer. If no output
- PointSet was supplied, also delete any new one that may have been
- created. */
- if ( !astOK ) {
- result = ( result == out ) ? NULL : astDelete( result );
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-static void ValidateSymbol( const char *method, const char *class,
- const char *exprs, int iend, int sym,
- int *lpar, int **argcount, int **opensym,
- int *ncon, double **con, int *status ) {
-/*
-* Name:
-* ValidateSymbol
-
-* Purpose:
-* Validate a symbol in an expression.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mathmap.h"
-* void ValidateSymbol( const char *method, const char *class,
-* const char *exprs, int iend, int sym, int *lpar,
-* int **argcount, int **opensym, int *ncon,
-* double **con, int *status )
-
-* Class Membership:
-* MathMap member function.
-
-* Description:
-* This function validates an identified standard symbol during
-* compilation of an expression. Its main task is to keep track of the
-* level of parenthesis in the expression and to count the number of
-* arguments supplied to functions at each level of parenthesis (for
-* nested function calls). On this basis it is able to interpret and
-* accept or reject symbols which represent function calls, parentheses
-* and delimiters. Other symbols are accepted automatically.
-
-* Parameters:
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function.
-* This method name is used solely for constructing error messages.
-* class
-* Pointer to a constant null-terminated character string containing the
-* class name of the Object being processed. This name is used solely
-* for constructing error messages.
-* exprs
-* Pointer to a null-terminated string containing the expression
-* being parsed. This is only used for constructing error messages.
-* iend
-* Index in "exprs" of the last character belonging to the most
-* recently identified symbol. This is only used for constructing error
-* messages.
-* sym
-* Index in the static "symbol" array of the most recently identified
-* symbol in the expression. This is the symbol to be verified.
-* lpar
-* Pointer to an int which holds the current level of parenthesis. On
-* the first invocation, this should be zero. The returned value should
-* be passed to subsequent invocations.
-* argcount
-* Address of a pointer to a dynamically allocated array of int in
-* which argument count information is maintained for each level of
-* parenthesis (e.g. for nested function calls). On the first invocation,
-* "*argcount" should be NULL. This function will allocate the required
-* space as needed and update this pointer. The returned pointer value
-* should be passed to subsequent invocations.
-*
-* The allocated space must be freed by the caller (using astFree) when
-* no longer required.
-* opensym
-* Address of a pointer to a dynamically allocated array of int, in which
-* information is maintained about the functions associated with each
-* level of parenthesis (e.g. for nested function calls). On the first
-* invocation, "*opensym" should be NULL. This function will allocate the
-* required space as needed and update this pointer. The returned pointer
-* value should be passed to subsequent invocations.
-*
-* The allocated space must be freed by the caller (using astFree) when
-* no longer required.
-* ncon
-* Pointer to an int which holds a count of the constants associated
-* with the expression (and determines the size of the "*con" array).
-* This function will update the count to reflect any new constants
-* appended to the "*con" array and the returned value should be passed
-* to subsequent invocations.
-* con
-* Address of a pointer to a dynamically allocated array of double, in
-* which the constants associated with the expression being parsed are
-* accumulated. On entry, "*con" should point at a dynamic array with
-* at least "*ncon" elements containing existing constants (or may be
-* NULL if no constants have yet been stored). This function will
-* allocate the required space as needed and update this pointer (and
-* "*ncon") appropriately. The returned pointer value should be passed
-* to subsequent invocations.
-*
-* The allocated space must be freed by the caller (using astFree) when
-* no longer required.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The dynamically allocated arrays normally returned by this function
-* will be freed and NULL pointers will be returned if this function is
-* invoked with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Check the global error status, but do not return at this point
- because dynamic arrays may require freeing. */
- if ( astOK ) {
-
-/* Check if the symbol is a comma. */
- if ( ( symbol[ sym ].text[ 0 ] == ',' ) &&
- ( symbol[ sym ].text[ 1 ] == '\0' ) ) {
-
-/* A comma is only used to delimit function arguments. If the current
- level of parenthesis is zero, or the symbol which opened the current
- level of parenthesis was not a function call (indicated by an argument
- count of zero at the current level of parenthesis), then report an
- error. */
- if ( ( *lpar <= 0 ) || ( ( *argcount )[ *lpar - 1 ] == 0 ) ) {
- astError( AST__COMIN,
- "%s(%s): Spurious comma encountered in the expression "
- "\"%.*s\".", status,
- method, class, iend + 1, exprs );
-
-/* If a comma is valid, then increment the argument count at the
- current level of parenthesis. */
- } else {
- ( *argcount )[ *lpar - 1 ]++;
- }
-
-/* If the symbol is not a comma, check if it increases the current
- level of parenthesis. */
- } else if ( symbol[ sym ].parincrement > 0 ) {
-
-/* Increase the size of the arrays which hold parenthesis level
- information and check for errors. */
- *argcount = astGrow( *argcount, *lpar + 1, sizeof( int ) );
- *opensym = astGrow( *opensym, *lpar + 1, sizeof( int ) );
- if ( astOK ) {
-
-/* Increment the level of parenthesis and initialise the argument
- count at the new level. This count is set to zero if the symbol which
- opens the parenthesis level is not a function call (indicated by a
- zero "nargs" entry in the symbol data), and it subsequently remains at
- zero. If the symbol is a function call, the argument count is
- initially set to 1 and increments whenever a comma is encountered at
- this parenthesis level. */
- ( *argcount )[ ++( *lpar ) - 1 ] = ( symbol[ sym ].nargs != 0 );
-
-/* Remember the symbol which opened this parenthesis level. */
- ( *opensym )[ *lpar - 1 ] = sym;
- }
-
-/* Check if the symbol decreases the current parenthesis level. */
- } else if ( symbol[ sym ].parincrement < 0 ) {
-
-/* Ensure that the parenthesis level is not already at zero. If it is,
- then there is a missing left parenthesis in the expression being
- compiled, so report an error. */
- if ( *lpar == 0 ) {
- astError( AST__MLPAR,
- "%s(%s): Missing left parenthesis in the expression "
- "\"%.*s\".", status,
- method, class, iend + 1, exprs );
-
-/* If the parenthesis level is valid and the symbol which opened this
- level of parenthesis was a function call with a fixed number of
- arguments (indicated by a positive "nargs" entry in the symbol data),
- then we must check the number of function arguments which have been
- encountered. */
- } else if ( symbol[ ( *opensym )[ *lpar - 1 ] ].nargs > 0 ) {
-
-/* Report an error if the number of arguments is wrong. */
- if ( ( *argcount )[ *lpar - 1 ] !=
- symbol[ ( *opensym )[ *lpar - 1 ] ].nargs ) {
- astError( AST__WRNFA,
- "%s(%s): Wrong number of function arguments in the "
- "expression \"%.*s\".", status,
- method, class, iend + 1, exprs );
-
-/* If the number of arguments is valid, decrement the parenthesis
- level. */
- } else {
- ( *lpar )--;
- }
-
-/* If the symbol which opened this level of parenthesis was a function
- call with a variable number of arguments (indicated by a negative
- "nargs" entry in the symbol data), then we must check and process the
- number of function arguments. */
- } else if ( symbol[ ( *opensym )[ *lpar - 1 ] ].nargs < 0 ) {
-
-/* Check that the minimum required number of arguments have been
- supplied. Report an error if they have not. */
- if ( ( *argcount )[ *lpar - 1 ] <
- ( -symbol[ ( *opensym )[ *lpar - 1 ] ].nargs ) ) {
- astError( AST__WRNFA,
- "%s(%s): Insufficient function arguments in the "
- "expression \"%.*s\".", status,
- method, class, iend + 1, exprs );
-
-/* If the number of arguments is valid, increase the size of the
- constants array and check for errors. */
- } else {
- *con = astGrow( *con, *ncon + 1, sizeof( double ) );
- if ( astOK ) {
-
-/* Append the argument count to the end of the array of constants and
- decrement the parenthesis level. */
- ( *con )[ ( *ncon )++ ] =
- (double) ( *argcount )[ --( *lpar ) ];
- }
- }
-
-/* Finally, if the symbol which opened this level of parenthesis was
- not a function call ("nargs" entry in the symbol data is zero), then
- decrement the parenthesis level. In this case there is no need to
- check the argument count, because it will not have been
- incremented. */
- } else {
- ( *lpar )--;
- }
- }
- }
-
-/* If an error occurred (or the global error status was set on entry),
- then reset the parenthesis level and free any memory which may have
- been allocated. */
- if ( !astOK ) {
- *lpar = 0;
- if ( *argcount ) *argcount = astFree( *argcount );
- if ( *opensym ) *opensym = astFree( *opensym );
- if ( *con ) *con = astFree( *con );
- }
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/*
-*att++
-* Name:
-* Seed
-
-* Purpose:
-* Random number seed for a MathMap.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer.
-
-* Description:
-* This attribute, which may take any integer value, determines the
-* sequence of random numbers produced by the random number functions in
-* MathMap expressions. It is set to an unpredictable default value when
-* a MathMap is created, so that by default each MathMap uses a different
-* set of random numbers.
-*
-* If required, you may set this Seed attribute to a value of your
-* choosing in order to produce repeatable behaviour from the random
-* number functions. You may also enquire the Seed value (e.g. if an
-* initially unpredictable value has been used) and then use it to
-* reproduce the resulting sequence of random numbers, either from the
-* same MathMap or from another one.
-*
-* Clearing the Seed attribute gives it a new unpredictable default
-* value.
-
-* Applicability:
-* MathMap
-* All MathMaps have this attribute.
-*att--
-*/
-/* Clear the Seed value by setting it to a new unpredictable value
- produced by DefaultSeed and clearing the "seed_set" flag in the
- MathMap's random number generator context. Also clear the "active"
- flag, so that the generator will be re-initialised to use this seed
- when it is next invoked. */
-astMAKE_CLEAR(MathMap,Seed,rcontext.seed,( this->rcontext.seed_set = 0,
- this->rcontext.active = 0,
- DefaultSeed( &this->rcontext, status ) ))
-
-/* Return the "seed" value from the random number generator
- context. */
-astMAKE_GET(MathMap,Seed,int,0,this->rcontext.seed)
-
-/* Store the new seed value in the MathMap's random number generator
- context and set the context's "seed_set" flag. Also clear the "active"
- flag, so that the generator will be re-initialised to use this seed
- when it is next invoked. */
-astMAKE_SET(MathMap,Seed,int,rcontext.seed,( this->rcontext.seed_set = 1,
- this->rcontext.active = 0,
- value ))
-
-/* Test the "seed_set" flag in the random number generator context. */
-astMAKE_TEST(MathMap,Seed,( this->rcontext.seed_set ))
-
-/*
-*att++
-* Name:
-* SimpFI
-
-* Purpose:
-* Forward-inverse MathMap pairs simplify?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-c This attribute should be set to a non-zero value if applying a
-c MathMap's forward transformation, followed immediately by the matching
-c inverse transformation will always restore the original set of
-c coordinates. It indicates that AST may replace such a sequence of
-c operations by an identity Mapping (a UnitMap) if it is encountered
-c while simplifying a compound Mapping (e.g. using astSimplify).
-f This attribute should be set to a non-zero value if applying a
-f MathMap's forward transformation, followed immediately by the matching
-f inverse transformation will always restore the original set of
-f coordinates. It indicates that AST may replace such a sequence of
-f operations by an identity Mapping (a UnitMap) if it is encountered
-f while simplifying a compound Mapping (e.g. using AST_SIMPLIFY).
-*
-* By default, the SimpFI attribute is zero, so that AST will not perform
-* this simplification unless you have set SimpFI to indicate that it is
-* safe to do so.
-
-* Applicability:
-* MathMap
-* All MathMaps have this attribute.
-
-* Notes:
-* - For simplification to occur, the two MathMaps must be in series and
-* be identical (with textually identical transformation
-* functions). Functional equivalence is not sufficient.
-* - The consent of both MathMaps is required before simplification can
-* take place. If either has a SimpFI value of zero, then simplification
-* will not occur.
-* - The SimpFI attribute controls simplification only in the case where
-* a MathMap's forward transformation is followed by the matching inverse
-* transformation. It does not apply if an inverse transformation is
-* followed by a forward transformation. This latter case is controlled
-* by the SimpIF attribute.
-c - The "forward" and "inverse" transformations referred to are those
-c defined when the MathMap is created (corresponding to the "fwd" and
-c "inv" parameters of its constructor function). If the MathMap is
-c inverted (i.e. its Invert attribute is non-zero), then the role of the
-c SimpFI and SimpIF attributes will be interchanged.
-f - The "forward" and "inverse" transformations referred to are those
-f defined when the MathMap is created (corresponding to the FWD and
-f INV arguments of its constructor function). If the MathMap is
-f inverted (i.e. its Invert attribute is non-zero), then the role of the
-f SimpFI and SimpIF attributes will be interchanged.
-*att--
-*/
-/* Clear the SimpFI value by setting it to -INT_MAX. */
-astMAKE_CLEAR(MathMap,SimpFI,simp_fi,-INT_MAX)
-
-/* Supply a default of 0 if no SimpFI value has been set. */
-astMAKE_GET(MathMap,SimpFI,int,0,( ( this->simp_fi != -INT_MAX ) ?
- this->simp_fi : 0 ))
-
-/* Set a SimpFI value of 1 if any non-zero value is supplied. */
-astMAKE_SET(MathMap,SimpFI,int,simp_fi,( value != 0 ))
-
-/* The SimpFI value is set if it is not -INT_MAX. */
-astMAKE_TEST(MathMap,SimpFI,( this->simp_fi != -INT_MAX ))
-
-/*
-*att++
-* Name:
-* SimpIF
-
-* Purpose:
-* Inverse-forward MathMap pairs simplify?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-c This attribute should be set to a non-zero value if applying a
-c MathMap's inverse transformation, followed immediately by the matching
-c forward transformation will always restore the original set of
-c coordinates. It indicates that AST may replace such a sequence of
-c operations by an identity Mapping (a UnitMap) if it is encountered
-c while simplifying a compound Mapping (e.g. using astSimplify).
-f This attribute should be set to a non-zero value if applying a
-f MathMap's inverse transformation, followed immediately by the matching
-f forward transformation will always restore the original set of
-f coordinates. It indicates that AST may replace such a sequence of
-f operations by an identity Mapping (a UnitMap) if it is encountered
-f while simplifying a compound Mapping (e.g. using AST_SIMPLIFY).
-*
-* By default, the SimpIF attribute is zero, so that AST will not perform
-* this simplification unless you have set SimpIF to indicate that it is
-* safe to do so.
-
-* Applicability:
-* MathMap
-* All MathMaps have this attribute.
-
-* Notes:
-* - For simplification to occur, the two MathMaps must be in series and
-* be identical (with textually identical transformation
-* functions). Functional equivalence is not sufficient.
-* - The consent of both MathMaps is required before simplification can
-* take place. If either has a SimpIF value of zero, then simplification
-* will not occur.
-* - The SimpIF attribute controls simplification only in the case where
-* a MathMap's inverse transformation is followed by the matching forward
-* transformation. It does not apply if a forward transformation is
-* followed by an inverse transformation. This latter case is controlled
-* by the SimpFI attribute.
-c - The "forward" and "inverse" transformations referred to are those
-c defined when the MathMap is created (corresponding to the "fwd" and
-c "inv" parameters of its constructor function). If the MathMap is
-c inverted (i.e. its Invert attribute is non-zero), then the role of the
-c SimpFI and SimpIF attributes will be interchanged.
-f - The "forward" and "inverse" transformations referred to are those
-f defined when the MathMap is created (corresponding to the FWD and
-f INV arguments of its constructor function). If the MathMap is
-f inverted (i.e. its Invert attribute is non-zero), then the role of the
-f SimpFI and SimpIF attributes will be interchanged.
-*att--
-*/
-/* Clear the SimpIF value by setting it to -INT_MAX. */
-astMAKE_CLEAR(MathMap,SimpIF,simp_if,-INT_MAX)
-
-/* Supply a default of 0 if no SimpIF value has been set. */
-astMAKE_GET(MathMap,SimpIF,int,0,( ( this->simp_if != -INT_MAX ) ?
- this->simp_if : 0 ))
-
-/* Set a SimpIF value of 1 if any non-zero value is supplied. */
-astMAKE_SET(MathMap,SimpIF,int,simp_if,( value != 0 ))
-
-/* The SimpIF value is set if it is not -INT_MAX. */
-astMAKE_TEST(MathMap,SimpIF,( this->simp_if != -INT_MAX ))
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for MathMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for MathMap objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstMathMap *in; /* Pointer to input MathMap */
- AstMathMap *out; /* Pointer to output MathMap */
- int ifun; /* Loop counter for functions */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output MathMaps. */
- in = (AstMathMap *) objin;
- out = (AstMathMap *) objout;
-
-/* For safety, first clear any references to the input memory from
- the output MathMap. */
- out->fwdfun = NULL;
- out->invfun = NULL;
- out->fwdcode = NULL;
- out->invcode = NULL;
- out->fwdcon = NULL;
- out->invcon = NULL;
-
-/* Now allocate and initialise each of the output pointer arrays
- required. */
- if ( in->fwdfun ) {
- MALLOC_POINTER_ARRAY( out->fwdfun, char *, out->nfwd )
- }
- if ( in->invfun ) {
- MALLOC_POINTER_ARRAY( out->invfun, char *, out->ninv )
- }
- if ( in->fwdcode ) {
- MALLOC_POINTER_ARRAY( out->fwdcode, int *, out->nfwd )
- }
- if ( in->invcode ) {
- MALLOC_POINTER_ARRAY( out->invcode, int *, out->ninv )
- }
- if ( in->fwdcon ) {
- MALLOC_POINTER_ARRAY( out->fwdcon, double *, out->nfwd )
- }
- if ( in->invcon ) {
- MALLOC_POINTER_ARRAY( out->invcon, double *, out->ninv )
- }
-
-/* If OK, loop to make copies of the data (where available) associated
- with each forward transformation function, storing pointers to the
- copy in the output pointer arrays allocated above. */
- if ( astOK ) {
- for ( ifun = 0; ifun < out->nfwd; ifun++ ) {
- if ( in->fwdfun && in->fwdfun[ ifun ] ) {
- out->fwdfun[ ifun ] = astStore( NULL, in->fwdfun[ ifun ],
- astSizeOf( in->fwdfun[ ifun ] ) );
- }
- if ( in->fwdcode && in->fwdcode[ ifun ] ) {
- out->fwdcode[ ifun ] = astStore( NULL, in->fwdcode[ ifun ],
- astSizeOf( in->fwdcode[ ifun ] ) );
- }
- if ( in->fwdcon && in->fwdcon[ ifun ] ) {
- out->fwdcon[ ifun ] = astStore( NULL, in->fwdcon[ ifun ],
- astSizeOf( in->fwdcon[ ifun ] ) );
- }
- if ( !astOK ) break;
- }
- }
-
-/* Repeat this process for the inverse transformation functions. */
- if ( astOK ) {
- for ( ifun = 0; ifun < out->ninv; ifun++ ) {
- if ( in->invfun && in->invfun[ ifun ] ) {
- out->invfun[ ifun ] = astStore( NULL, in->invfun[ ifun ],
- astSizeOf( in->invfun[ ifun ] ) );
- }
- if ( in->invcode && in->invcode[ ifun ] ) {
- out->invcode[ ifun ] = astStore( NULL, in->invcode[ ifun ],
- astSizeOf( in->invcode[ ifun ] ) );
- }
- if ( in->invcon && in->invcon[ ifun ] ) {
- out->invcon[ ifun ] = astStore( NULL, in->invcon[ ifun ],
- astSizeOf( in->invcon[ ifun ] ) );
- }
- if ( !astOK ) break;
- }
- }
-
-/* If an error occurred, clean up by freeing all output memory
- allocated above. */
- if ( !astOK ) {
- FREE_POINTER_ARRAY( out->fwdfun, out->nfwd )
- FREE_POINTER_ARRAY( out->invfun, out->ninv )
- FREE_POINTER_ARRAY( out->fwdcode, out->nfwd )
- FREE_POINTER_ARRAY( out->invcode, out->ninv )
- FREE_POINTER_ARRAY( out->fwdcon, out->nfwd )
- FREE_POINTER_ARRAY( out->invcon, out->ninv )
- }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for MathMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for MathMap objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstMathMap *this; /* Pointer to MathMap */
-
-/* Obtain a pointer to the MathMap structure. */
- this = (AstMathMap *) obj;
-
-/* Free all memory allocated by the MathMap. */
- FREE_POINTER_ARRAY( this->fwdfun, this->nfwd )
- FREE_POINTER_ARRAY( this->invfun, this->ninv )
- FREE_POINTER_ARRAY( this->fwdcode, this->nfwd )
- FREE_POINTER_ARRAY( this->invcode, this->ninv )
- FREE_POINTER_ARRAY( this->fwdcon, this->nfwd )
- FREE_POINTER_ARRAY( this->invcon, this->ninv )
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for MathMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the MathMap class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the MathMap whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define COMMENT_LEN 150 /* Maximum length of a comment string */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstMathMap *this; /* Pointer to the MathMap structure */
- char comment[ COMMENT_LEN + 1 ]; /* Buffer for comment strings */
- char key[ KEY_LEN + 1 ]; /* Buffer for keyword strings */
- int ifun; /* Loop counter for functions */
- int invert; /* MathMap inverted? */
- int ival; /* Integer attribute value */
- int nin; /* True number of input coordinates */
- int nout; /* True number of output coordinates */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the MathMap structure. */
- this = (AstMathMap *) this_object;
-
-/* Determine if the MathMap is inverted and obtain the "true" number
- of input and output coordinates by un-doing the effects of any
- inversion. */
- invert = astGetInvert( this );
- nin = !invert ? astGetNin( this ) : astGetNout( this );
- nout = !invert ? astGetNout( this ) : astGetNin( this );
-
-/* Write out values representing the instance variables for the
- MathMap class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* Number of forward transformation functions. */
-/* ------------------------------------------- */
-/* We regard this value as set if it differs from the number of output
- coordinates for the MathMap. */
- set = ( this->nfwd != nout );
- astWriteInt( channel, "Nfwd", set, 0, this->nfwd,
- "Number of forward transformation functions" );
-
-/* Forward transformation functions. */
-/* --------------------------------- */
-/* Loop to write out each forward transformation function, generating
- a suitable keyword and comment for each one. */
- for ( ifun = 0; ifun < this->nfwd; ifun++ ) {
- (void) sprintf( key, "Fwd%d", ifun + 1 );
- (void) sprintf( comment, "Forward function %d", ifun + 1 );
- astWriteString( channel, key, 1, 1, this->fwdfun[ ifun ], comment );
- }
-
-/* Number of inverse transformation functions. */
-/* ------------------------------------------- */
-/* We regard this value as set if it differs from the number of input
- coordinates for the MathMap. */
- set = ( this->ninv != nin );
- astWriteInt( channel, "Ninv", set, 0, this->ninv,
- "Number of inverse transformation functions" );
-
-/* Inverse transformation functions. */
-/* --------------------------------- */
-/* Similarly, loop to write out each inverse transformation
- function. */
- for ( ifun = 0; ifun < this->ninv; ifun++ ) {
- (void) sprintf( key, "Inv%d", ifun + 1 );
- (void) sprintf( comment, "Inverse function %d", ifun + 1 );
- astWriteString( channel, key, 1, 1, this->invfun[ ifun ], comment );
- }
-
-/* SimpFI. */
-/* ------- */
-/* Write out the forward-inverse simplification flag. */
- set = TestSimpFI( this, status );
- ival = set ? GetSimpFI( this, status ) : astGetSimpFI( this );
- astWriteInt( channel, "SimpFI", set, 0, ival,
- ival ? "Forward-inverse pairs may simplify" :
- "Forward-inverse pairs do not simplify" );
-
-/* SimpIF. */
-/* ------- */
-/* Write out the inverse-forward simplification flag. */
- set = TestSimpIF( this, status );
- ival = set ? GetSimpIF( this, status ) : astGetSimpIF( this );
- astWriteInt( channel, "SimpIF", set, 0, ival,
- ival ? "Inverse-forward pairs may simplify" :
- "Inverse-forward pairs do not simplify" );
-
-/* Seed. */
-/* ----- */
-/* Write out any random number seed value which is set. Prefix this with
- a separate flag which indicates if the seed has been set. */
- set = TestSeed( this, status );
- ival = set ? GetSeed( this, status ) : astGetSeed( this );
- astWriteInt( channel, "Seeded", set, 0, set,
- set? "Explicit random number seed set" :
- "No random number seed set" );
- astWriteInt( channel, "Seed", set, 0, ival,
- set ? "Random number seed value" :
- "Default random number seed used" );
-
-/* Undefine macros local to this function. */
-#undef COMMENT_LEN
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAMathMap and astCheckMathMap functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(MathMap,Mapping)
-astMAKE_CHECK(MathMap)
-
-AstMathMap *astMathMap_( int nin, int nout,
- int nfwd, const char *fwd[],
- int ninv, const char *inv[],
- const char *options, int *status, ...) {
-/*
-*+
-* Name:
-* astMathMap
-
-* Purpose:
-* Create a MathMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "mathmap.h"
-* AstMathMap *astMathMap( int nin, int nout,
-* int nfwd, const char *fwd[],
-* int ninv, const char *inv[],
-* const char *options, ..., int *status )
-
-* Class Membership:
-* MathMap constructor.
-
-* Description:
-* This function creates a new MathMap and optionally initialises its
-* attributes.
-
-* Parameters:
-* nin
-* Number of input variables for the MathMap.
-* nout
-* Number of output variables for the MathMap.
-* nfwd
-* The number of forward transformation functions being supplied.
-* This must be at least equal to "nout".
-* fwd
-* Pointer to an array, with "nfwd" elements, of pointers to null
-* terminated strings which contain each of the forward transformation
-* functions.
-* ninv
-* The number of inverse transformation functions being supplied.
-* This must be at least equal to "nin".
-* inv
-* Pointer to an array, with "ninv" elements, of pointers to null
-* terminated strings which contain each of the inverse transformation
-* functions.
-* options
-* Pointer to a null terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new MathMap. The syntax used is the same as
-* for the astSet method and may include "printf" format
-* specifiers identified by "%" symbols in the normal way.
-* status
-* Pointer to the inherited status variable.
-* ...
-* If the "options" string contains "%" format specifiers, then
-* an optional list of arguments may follow it in order to
-* supply values to be substituted for these specifiers. The
-* rules for supplying these are identical to those for the
-* astSet method (and for the C "printf" function).
-
-* Returned Value:
-* A pointer to the new MathMap.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-
-* Implementation Notes:
-* - This function implements the basic MathMap constructor which is
-* available via the protected interface to the MathMap class. A
-* public interface is provided by the astMathMapId_ function.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMathMap *new; /* Pointer to new MathMap */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the MathMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitMathMap( NULL, sizeof( AstMathMap ), !class_init, &class_vtab,
- "MathMap", nin, nout, nfwd, fwd, ninv, inv );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new MathMap's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new MathMap. */
- return new;
-}
-
-AstMathMap *astMathMapId_( int nin, int nout,
- int nfwd, const char *fwd[],
- int ninv, const char *inv[],
- const char *options, ... ) {
-/*
-*++
-* Name:
-c astMathMap
-f AST_MATHMAP
-
-* Purpose:
-* Create a MathMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "mathmap.h"
-c AstMathMap *astMathMap( int nin, int nout,
-c int nfwd, const char *fwd[],
-c int ninv, const char *inv[],
-c const char *options, ... )
-f RESULT = AST_MATHMAP( NIN, NOUT, NFWD, FWD, NINV, INV, OPTIONS, STATUS )
-
-* Class Membership:
-* MathMap constructor.
-
-* Description:
-* This function creates a new MathMap and optionally initialises its
-* attributes.
-*
-c A MathMap is a Mapping which allows you to specify a set of forward
-c and/or inverse transformation functions using arithmetic operations
-c and mathematical functions similar to those available in C. The
-c MathMap interprets these functions at run-time, whenever its forward
-c or inverse transformation is required. Because the functions are not
-c compiled in the normal sense (unlike an IntraMap), they may be used to
-c describe coordinate transformations in a transportable manner. A
-c MathMap therefore provides a flexible way of defining new types of
-c Mapping whose descriptions may be stored as part of a dataset and
-c interpreted by other programs.
-f A MathMap is a Mapping which allows you to specify a set of forward
-f and/or inverse transformation functions using arithmetic operations
-f and mathematical functions similar to those available in Fortran. The
-f MathMap interprets these functions at run-time, whenever its forward
-f or inverse transformation is required. Because the functions are not
-f compiled in the normal sense (unlike an IntraMap), they may be used to
-f describe coordinate transformations in a transportable manner. A
-f MathMap therefore provides a flexible way of defining new types of
-f Mapping whose descriptions may be stored as part of a dataset and
-f interpreted by other programs.
-
-* Parameters:
-c nin
-f NIN = INTEGER
-* Number of input variables for the MathMap. This determines the
-* value of its Nin attribute.
-c nout
-f NOUT = INTEGER
-* Number of output variables for the MathMap. This determines the
-* value of its Nout attribute.
-c nfwd
-f NFWD = INTEGER
-* The number of forward transformation functions being supplied.
-c This must be at least equal to "nout", but may be increased to
-f This must be at least equal to NOUT, but may be increased to
-* accommodate any additional expressions which define intermediate
-* variables for the forward transformation (see the "Calculating
-* Intermediate Values" section below).
-c fwd
-f FWD = CHARACTER * ( * )( NFWD )
-c An array (with "nfwd" elements) of pointers to null terminated strings
-c which contain the expressions defining the forward transformation.
-f An array which contains the expressions defining the forward
-f transformation.
-* The syntax of these expressions is described below.
-c ninv
-f NINV = INTEGER
-* The number of inverse transformation functions being supplied.
-c This must be at least equal to "nin", but may be increased to
-f This must be at least equal to NIN, but may be increased to
-* accommodate any additional expressions which define intermediate
-* variables for the inverse transformation (see the "Calculating
-* Intermediate Values" section below).
-c inv
-f INV = CHARACTER * ( * )( NINV )
-c An array (with "ninv" elements) of pointers to null terminated strings
-c which contain the expressions defining the inverse transformation.
-f An array which contains the expressions defining the inverse
-f transformation.
-* The syntax of these expressions is described below.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new MathMap. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-c If no initialisation is required, a zero-length string may be
-c supplied.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new MathMap. The syntax used is identical to that for the
-f AST_SET routine. If no initialisation is required, a blank
-f value may be supplied.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astMathMap()
-f AST_MATHMAP = INTEGER
-* A pointer to the new MathMap.
-
-* Defining Transformation Functions:
-c A MathMap's transformation functions are supplied as a set of
-c expressions in an array of character strings. Normally you would
-c supply the same number of expressions for the forward transformation,
-c via the "fwd" parameter, as there are output variables (given by the
-c MathMap's Nout attribute). For instance, if Nout is 2 you might use:
-c - "r = sqrt( x * x + y * y )"
-c - "theta = atan2( y, x )"
-c
-c which defines a transformation from Cartesian to polar
-c coordinates. Here, the variables that appear on the left of each
-c expression ("r" and "theta") provide names for the output variables
-c and those that appear on the right ("x" and "y") are references to
-c input variables.
-f A MathMap's transformation functions are supplied as a set of
-f expressions in an array of character strings. Normally you would
-f supply the same number of expressions for the forward transformation,
-f via the FWD argument, as there are output variables (given by the
-f MathMap's Nout attribute). For instance, if Nout is 2 you might use:
-f - 'R = SQRT( X * X + Y * Y )'
-f - 'THETA = ATAN2( Y, X )'
-f
-f which defines a transformation from Cartesian to polar
-f coordinates. Here, the variables that appear on the left of each
-f expression (R and THETA) provide names for the output variables and
-f those that appear on the right (X and Y) are references to input
-f variables.
-*
-c To complement this, you must also supply expressions for the inverse
-c transformation via the "inv" parameter. In this case, the number of
-c expressions given would normally match the number of MathMap input
-c coordinates (given by the Nin attribute). If Nin is 2, you might use:
-c - "x = r * cos( theta )"
-c - "y = r * sin( theta )"
-c
-c which expresses the transformation from polar to Cartesian
-c coordinates. Note that here the input variables ("x" and "y") are
-c named on the left of each expression, and the output variables ("r"
-c and "theta") are referenced on the right.
-f To complement this, you must also supply expressions for the inverse
-f transformation via the INV argument. In this case, the number of
-f expressions given would normally match the number of MathMap input
-f coordinates (given by the Nin attribute). If Nin is 2, you might use:
-f - 'X = R * COS( THETA )'
-f - 'Y = R * SIN( THETA )'
-f
-f which expresses the transformation from polar to Cartesian
-f coordinates. Note that here the input variables (X and Y) are named on
-f the left of each expression, and the output variables (R and THETA)
-f are referenced on the right.
-*
-* Normally, you cannot refer to a variable on the right of an expression
-* unless it is named on the left of an expression in the complementary
-* set of functions. Therefore both sets of functions (forward and
-* inverse) must be formulated using the same consistent set of variable
-* names. This means that if you wish to leave one of the transformations
-* undefined, you must supply dummy expressions which simply name each of
-* the output (or input) variables. For example, you might use:
-c - "x"
-c - "y"
-f - 'X'
-f - 'Y'
-*
-* for the inverse transformation above, which serves to name the input
-* variables but without defining an inverse transformation.
-
-* Calculating Intermediate Values:
-c It is sometimes useful to calculate intermediate values and then to
-c use these in the final expressions for the output (or input)
-c variables. This may be done by supplying additional expressions for
-c the forward (or inverse) transformation functions. For instance, the
-c following array of five expressions describes 2-dimensional pin-cushion
-c distortion:
-c - "r = sqrt( xin * xin + yin * yin )"
-c - "rout = r * ( 1 + 0.1 * r * r )"
-c - "theta = atan2( yin, xin )"
-c - "xout = rout * cos( theta )"
-c - "yout = rout * sin( theta )"
-f It is sometimes useful to calculate intermediate values and then to
-f use these in the final expressions for the output (or input)
-f variables. This may be done by supplying additional expressions for
-f the forward (or inverse) transformation functions. For instance, the
-f following array of five expressions describes 2-dimensional pin-cushion
-f distortion:
-f - 'R = SQRT( XIN * XIN + YIN * YIN )'
-f - 'ROUT = R * ( 1 + 0.1 * R * R )'
-f - 'THETA = ATAN2( YIN, XIN )',
-f - 'XOUT = ROUT * COS( THETA )'
-f - 'YOUT = ROUT * SIN( THETA )'
-*
-c Here, we first calculate three intermediate results ("r", "rout"
-c and "theta") and then use these to calculate the final results ("xout"
-c and "yout"). The MathMap knows that only the final two results
-c constitute values for the output variables because its Nout attribute
-c is set to 2. You may define as many intermediate variables in this
-c way as you choose. Having defined a variable, you may then refer to it
-c on the right of any subsequent expressions.
-f Here, we first calculate three intermediate results (R, ROUT
-f and THETA) and then use these to calculate the final results (XOUT
-f and YOUT). The MathMap knows that only the final two results
-f constitute values for the output variables because its Nout attribute
-f is set to 2. You may define as many intermediate variables in this
-f way as you choose. Having defined a variable, you may then refer to it
-f on the right of any subsequent expressions.
-*
-c Note that when defining the inverse transformation you may only refer
-c to the output variables "xout" and "yout". The intermediate variables
-c "r", "rout" and "theta" (above) are private to the forward
-c transformation and may not be referenced by the inverse
-c transformation. The inverse transformation may, however, define its
-c own private intermediate variables.
-f Note that when defining the inverse transformation you may only refer
-f to the output variables XOUT and YOUT. The intermediate variables R,
-f ROUT and THETA (above) are private to the forward transformation and
-f may not be referenced by the inverse transformation. The inverse
-f transformation may, however, define its own private intermediate
-f variables.
-
-* Expression Syntax:
-c The expressions given for the forward and inverse transformations
-c closely follow the syntax of the C programming language (with some
-c extensions for compatibility with Fortran). They may contain
-c references to variables and literal constants, together with
-c arithmetic, boolean, relational and bitwise operators, and function
-c invocations. A set of symbolic constants is also available. Each of
-c these is described in detail below. Parentheses may be used to
-c over-ride the normal order of evaluation. There is no built-in limit
-c to the length of expressions and they are insensitive to case or the
-c presence of additional white space.
-f The expressions given for the forward and inverse transformations
-f closely follow the syntax of Fortran (with some extensions for
-f compatibility with the C language). They may contain references to
-f variables and literal constants, together with arithmetic, logical,
-f relational and bitwise operators, and function invocations. A set of
-f symbolic constants is also available. Each of these is described in
-f detail below. Parentheses may be used to over-ride the normal order of
-f evaluation. There is no built-in limit to the length of expressions
-f and they are insensitive to case or the presence of additional white
-f space.
-
-* Variables:
-* Variable names must begin with an alphabetic character and may contain
-* only alphabetic characters, digits, and the underscore character
-* "_". There is no built-in limit to the length of variable names.
-
-* Literal Constants:
-c Literal constants, such as "0", "1", "0.007" or "2.505e-16" may appear
-c in expressions, with the decimal point and exponent being optional (a
-c "D" may also be used as an exponent character for compatibility with
-c Fortran). A unary minus "-" may be used as a prefix.
-f Literal constants, such as "0", "1", "0.007" or "2.505E-16" may appear
-f in expressions, with the decimal point and exponent being optional (a
-f "D" may also be used as an exponent character). A unary minus "-" may
-f be used as a prefix.
-
-* Arithmetic Precision:
-* All arithmetic is floating point, performed in double precision.
-
-* Propagation of Missing Data:
-* Unless indicated otherwise, if any argument of a function or operator
-* has the value AST__BAD (indicating missing data), then the result of
-* that function or operation is also AST__BAD, so that such values are
-* propagated automatically through all operations performed by MathMap
-* transformations. The special value AST__BAD can be represented in
-* expressions by the symbolic constant "<bad>".
-*
-* A <bad> result (i.e. equal to AST__BAD) is also produced in response
-* to any numerical error (such as division by zero or numerical
-* overflow), or if an invalid argument value is provided to a function
-* or operator.
-
-* Arithmetic Operators:
-* The following arithmetic operators are available:
-c - x1 + x2: Sum of "x1" and "x2".
-f - X1 + X2: Sum of X1 and X2.
-c - x1 - x2: Difference of "x1" and "x2".
-f - X1 - X2: Difference of X1 and X2.
-c - x1 * x2: Product of "x1" and "x1".
-f - X1 * X2: Product of X1 and X2.
-c - x1 / x2: Ratio of "x1" and "x2".
-f - X1 / X2: Ratio of X1 and X2.
-c - x1 ** x2: "x1" raised to the power of "x2".
-f - X1 ** X2: X1 raised to the power of X2.
-c - + x: Unary plus, has no effect on its argument.
-f - + X: Unary plus, has no effect on its argument.
-c - - x: Unary minus, negates its argument.
-f - - X: Unary minus, negates its argument.
-
-c Boolean Operators:
-f Logical Operators:
-c Boolean values are represented using zero to indicate false and
-c non-zero to indicate true. In addition, the value AST__BAD is taken to
-c mean "unknown". The values returned by boolean operators may therefore
-c be 0, 1 or AST__BAD. Where appropriate, "tri-state" logic is
-c implemented. For example, "a||b" may evaluate to 1 if "a" is non-zero,
-c even if "b" has the value AST__BAD. This is because the result of the
-c operation would not be affected by the value of "b", so long as "a" is
-c non-zero.
-f Logical values are represented using zero to indicate .FALSE. and
-f non-zero to indicate .TRUE.. In addition, the value AST__BAD is taken to
-f mean "unknown". The values returned by logical operators may therefore
-f be 0, 1 or AST__BAD. Where appropriate, "tri-state" logic is
-f implemented. For example, A.OR.B may evaluate to 1 if A is non-zero,
-f even if B has the value AST__BAD. This is because the result of the
-f operation would not be affected by the value of B, so long as A is
-f non-zero.
-*
-c The following boolean operators are available:
-f The following logical operators are available:
-c - x1 && x2: Boolean AND between "x1" and "x2", returning 1 if both "x1"
-c and "x2" are non-zero, and 0 otherwise. This operator implements
-c tri-state logic. (The synonym ".and." is also provided for compatibility
-c with Fortran.)
-f - X1 .AND. X2: Logical AND between X1 and X2, returning 1 if both X1
-f and X2 are non-zero, and 0 otherwise. This operator implements
-f tri-state logic. (The synonym "&&" is also provided for compatibility
-f with C.)
-c - x1 || x2: Boolean OR between "x1" and "x2", returning 1 if either "x1"
-c or "x2" are non-zero, and 0 otherwise. This operator implements
-c tri-state logic. (The synonym ".or." is also provided for compatibility
-c with Fortran.)
-f - X1 .OR. X2: Logical OR between X1 and X2, returning 1 if either X1
-f or X2 are non-zero, and 0 otherwise. This operator implements
-f tri-state logic. (The synonym "||" is also provided for compatibility
-f with C.)
-c - x1 ^^ x2: Boolean exclusive OR (XOR) between "x1" and "x2", returning
-c 1 if exactly one of "x1" and "x2" is non-zero, and 0 otherwise. Tri-state
-c logic is not used with this operator. (The synonyms ".neqv." and ".xor."
-c are also provided for compatibility with Fortran, although the second
-c of these is not standard.)
-f - X1 .NEQV. X2: Logical exclusive OR (XOR) between X1 and X2,
-f returning 1 if exactly one of X1 and X2 is non-zero, and 0
-f otherwise. Tri-state logic is not used with this operator. (The
-f synonym ".XOR." is also provided, although this is not standard
-f Fortran. In addition, the C-like synonym "^^" may be used, although
-f this is also not standard.)
-c - x1 .eqv. x2: This is provided only for compatibility with Fortran
-c and tests whether the boolean states of "x1" and "x2" (i.e. true/false)
-c are equal. It is the negative of the exclusive OR (XOR) function.
-c Tri-state logic is not used with this operator.
-f - X1 .EQV. X2: Tests whether the logical states of X1 and X2
-f (i.e. .TRUE./.FALSE.) are equal. It is the negative of the exclusive OR
-f (XOR) function. Tri-state logic is not used with this operator.
-c - ! x: Boolean unary NOT operation, returning 1 if "x" is zero, and
-c 0 otherwise. (The synonym ".not." is also provided for compatibility
-c with Fortran.)
-f - .NOT. X: Logical unary NOT operation, returning 1 if X is zero, and
-f 0 otherwise. (The synonym "!" is also provided for compatibility with
-f C.)
-
-* Relational Operators:
-c Relational operators return the boolean result (0 or 1) of comparing
-c the values of two floating point values for equality or inequality. The
-c value AST__BAD may also be returned if either argument is <bad>.
-f Relational operators return the logical result (0 or 1) of comparing
-f the values of two floating point values for equality or inequality. The
-f value AST__BAD may also be returned if either argument is <bad>.
-*
-* The following relational operators are available:
-c - x1 == x2: Tests whether "x1" equals "x1". (The synonym ".eq." is
-c also provided for compatibility with Fortran.)
-f - X1 .EQ. X2: Tests whether X1 equals X2. (The synonym "==" is also
-f provided for compatibility with C.)
-c - x1 != x2: Tests whether "x1" is unequal to "x2". (The synonym ".ne."
-c is also provided for compatibility with Fortran.)
-f - X1 .NE. X2: Tests whether X1 is unequal to X2. (The synonym "!=" is
-f also provided for compatibility with C.)
-c - x1 > x2: Tests whether "x1" is greater than "x2". (The synonym
-c ".gt." is also provided for compatibility with Fortran.)
-f - X1 .GT. X2: Tests whether X1 is greater than X2. (The synonym ">" is
-f also provided for compatibility with C.)
-c - x1 >= x2: Tests whether "x1" is greater than or equal to "x2". (The
-c synonym ".ge." is also provided for compatibility with Fortran.)
-f - X1 .GE. X2: Tests whether X1 is greater than or equal to X2. (The
-f synonym ">=" is also provided for compatibility with C.)
-c - x1 < x2: Tests whether "x1" is less than "x2". (The synonym ".lt."
-c is also provided for compatibility with Fortran.)
-f - X1 .LT. X2: Tests whether X1 is less than X2. (The synonym "<" is also
-f provided for compatibility with C.)
-c - x1 <= x2: Tests whether "x1" is less than or equal to "x2". (The
-c synonym ".le." is also provided for compatibility with Fortran.)
-f - X1 .LE. X2: Tests whether X1 is less than or equal to X2. (The synonym
-f "<=" is also provided for compatibility with C.)
-*
-c Note that relational operators cannot usefully be used to compare
-c values with the <bad> value (representing missing data), because the
-c result is always <bad>. The isbad() function should be used instead.
-f Note that relational operators cannot usefully be used to compare
-f values with the <bad> value (representing missing data), because the
-f result is always <bad>. The ISBAD() function should be used instead.
-f
-f Note, also, that because logical operators can operate on floating
-f point values, care must be taken to use parentheses in some cases
-f where they would not normally be required in Fortran. For example,
-f the expresssion:
-f - .NOT. A .EQ. B
-f
-f must be written:
-f - .NOT. ( A .EQ. B )
-f
-f to prevent the .NOT. operator from associating with the variable A.
-
-* Bitwise Operators:
-c The bitwise operators provided by C are often useful when operating on
-c raw data (e.g. from instruments), so they are also provided for use in
-c MathMap expressions. In this case, however, the values on which they
-c operate are floating point values rather than pure integers. In order
-c to produce results which match the pure integer case, the operands are
-c regarded as fixed point binary numbers (i.e. with the binary
-c equivalent of a decimal point) with negative numbers represented using
-c twos-complement notation. For integer values, the resulting bit
-c pattern corresponds to that of the equivalent signed integer (digits
-c to the right of the point being zero). Operations on the bits
-c representing the fractional part are also possible, however.
-f Bitwise operators are often useful when operating on raw data
-f (e.g. from instruments), so they are provided for use in MathMap
-f expressions. In this case, however, the values on which they operate
-f are floating point values rather than the more usual pure integers. In
-f order to produce results which match the pure integer case, the
-f operands are regarded as fixed point binary numbers (i.e. with the
-f binary equivalent of a decimal point) with negative numbers
-f represented using twos-complement notation. For integer values, the
-f resulting bit pattern corresponds to that of the equivalent signed
-f integer (digits to the right of the point being zero). Operations on
-f the bits representing the fractional part are also possible, however.
-*
-* The following bitwise operators are available:
-c - x1 >> x2: Rightward bit shift. The integer value of "x2" is taken
-c (rounding towards zero) and the bits representing "x1" are then
-c shifted this number of places to the right (or to the left if the
-c number of places is negative). This is equivalent to dividing "x1" by
-c the corresponding power of 2.
-f - X1 >> X2: Rightward bit shift. The integer value of X2 is taken
-f (rounding towards zero) and the bits representing X1 are then
-f shifted this number of places to the right (or to the left if the
-f number of places is negative). This is equivalent to dividing X1 by
-f the corresponding power of 2.
-c - x1 << x2: Leftward bit shift. The integer value of "x2" is taken
-c (rounding towards zero), and the bits representing "x1" are then
-c shifted this number of places to the left (or to the right if the
-c number of places is negative). This is equivalent to multiplying "x1"
-c by the corresponding power of 2.
-f - X1 << X2: Leftward bit shift. The integer value of X2 is taken
-f (rounding towards zero), and the bits representing X1 are then
-f shifted this number of places to the left (or to the right if the
-f number of places is negative). This is equivalent to multiplying X1
-f by the corresponding power of 2.
-c - x1 & x2: Bitwise AND between the bits of "x1" and those of "x2"
-c (equivalent to a boolean AND applied at each bit position in turn).
-f - X1 & X2: Bitwise AND between the bits of X1 and those of X2
-f (equivalent to a logical AND applied at each bit position in turn).
-c - x1 | x2: Bitwise OR between the bits of "x1" and those of "x2"
-c (equivalent to a boolean OR applied at each bit position in turn).
-f - X1 | X2: Bitwise OR between the bits of X1 and those of X2
-f (equivalent to a logical OR applied at each bit position in turn).
-c - x1 ^ x2: Bitwise exclusive OR (XOR) between the bits of "x1" and
-c those of "x2" (equivalent to a boolean XOR applied at each bit
-c position in turn).
-f - X1 ^ X2: Bitwise exclusive OR (XOR) between the bits of X1 and
-f those of X2 (equivalent to a logical XOR applied at each bit
-f position in turn).
-*
-c Note that no bit inversion operator ("~" in C) is provided. This is
-c because inverting the bits of a twos-complement fixed point binary
-c number is equivalent to simply negating it. This differs from the
-c pure integer case because bits to the right of the binary point are
-c also inverted. To invert only those bits to the left of the binary
-c point, use a bitwise exclusive OR with the value -1 (i.e. "x^-1").
-f Note that no bit inversion operator is provided. This is
-f because inverting the bits of a twos-complement fixed point binary
-f number is equivalent to simply negating it. This differs from the
-f pure integer case because bits to the right of the binary point are
-f also inverted. To invert only those bits to the left of the binary
-f point, use a bitwise exclusive OR with the value -1 (i.e. X^-1).
-
-* Functions:
-* The following functions are available:
-c - abs(x): Absolute value of "x" (sign removal), same as fabs(x).
-f - ABS(X): Absolute value of X (sign removal), same as FABS(X).
-c - acos(x): Inverse cosine of "x", in radians.
-f - ACOS(X): Inverse cosine of X, in radians.
-c - acosd(x): Inverse cosine of "x", in degrees.
-f - ACOSD(X): Inverse cosine of X, in degrees.
-c - acosh(x): Inverse hyperbolic cosine of "x".
-f - ACOSH(X): Inverse hyperbolic cosine of X.
-c - acoth(x): Inverse hyperbolic cotangent of "x".
-f - ACOTH(X): Inverse hyperbolic cotangent of X.
-c - acsch(x): Inverse hyperbolic cosecant of "x".
-f - ACSCH(X): Inverse hyperbolic cosecant of X.
-c - aint(x): Integer part of "x" (round towards zero), same as int(x).
-f - AINT(X): Integer part of X (round towards zero), same as INT(X).
-c - asech(x): Inverse hyperbolic secant of "x".
-f - ASECH(X): Inverse hyperbolic secant of X.
-c - asin(x): Inverse sine of "x", in radians.
-f - ASIN(X): Inverse sine of X, in radians.
-c - asind(x): Inverse sine of "x", in degrees.
-f - ASIND(X): Inverse sine of X, in degrees.
-c - asinh(x): Inverse hyperbolic sine of "x".
-f - ASINH(X): Inverse hyperbolic sine of X.
-c - atan(x): Inverse tangent of "x", in radians.
-f - ATAN(X): Inverse tangent of X, in radians.
-c - atand(x): Inverse tangent of "x", in degrees.
-f - ATAND(X): Inverse tangent of X, in degrees.
-c - atanh(x): Inverse hyperbolic tangent of "x".
-f - ATANH(X): Inverse hyperbolic tangent of X.
-c - atan2(x1, x2): Inverse tangent of "x1/x2", in radians.
-f - ATAN2(X1, X2): Inverse tangent of X1/X2, in radians.
-c - atan2d(x1, x2): Inverse tangent of "x1/x2", in degrees.
-f - ATAN2D(X1, X2): Inverse tangent of X1/X2, in degrees.
-c - ceil(x): Smallest integer value not less then "x" (round towards
-c plus infinity).
-f - CEIL(X): Smallest integer value not less then X (round towards
-f plus infinity).
-c - cos(x): Cosine of "x" in radians.
-f - COS(X): Cosine of X in radians.
-c - cosd(x): Cosine of "x" in degrees.
-f - COSD(X): Cosine of X in degrees.
-c - cosh(x): Hyperbolic cosine of "x".
-f - COSH(X): Hyperbolic cosine of X.
-c - coth(x): Hyperbolic cotangent of "x".
-f - COTH(X): Hyperbolic cotangent of X.
-c - csch(x): Hyperbolic cosecant of "x".
-f - CSCH(X): Hyperbolic cosecant of X.
-c - dim(x1, x2): Returns "x1-x2" if "x1" is greater than "x2", otherwise 0.
-f - DIM(X1, X2): Returns X1-X2 if X1 is greater than X2, otherwise 0.
-c - exp(x): Exponential function of "x".
-f - EXP(X): Exponential function of X.
-c - fabs(x): Absolute value of "x" (sign removal), same as abs(x).
-f - FABS(X): Absolute value of X (sign removal), same as ABS(X).
-c - floor(x): Largest integer not greater than "x" (round towards
-c minus infinity).
-f - FLOOR(X): Largest integer not greater than X (round towards
-f minus infinity).
-c - fmod(x1, x2): Remainder when "x1" is divided by "x2", same as
-c mod(x1, x2).
-f - FMOD(X1, X2): Remainder when X1 is divided by X2, same as
-f MOD(X1, X2).
-c - gauss(x1, x2): Random sample from a Gaussian distribution with mean
-c "x1" and standard deviation "x2".
-f - GAUSS(X1, X2): Random sample from a Gaussian distribution with mean
-f X1 and standard deviation X2.
-c - int(x): Integer part of "x" (round towards zero), same as aint(x).
-f - INT(X): Integer part of X (round towards zero), same as AINT(X).
-c - isbad(x): Returns 1 if "x" has the <bad> value (AST__BAD), otherwise 0.
-f - ISBAD(X): Returns 1 if X has the <bad> value (AST__BAD), otherwise 0.
-c - log(x): Natural logarithm of "x".
-f - LOG(X): Natural logarithm of X.
-c - log10(x): Logarithm of "x" to base 10.
-f - LOG10(X): Logarithm of X to base 10.
-c - max(x1, x2, ...): Maximum of two or more values.
-f - MAX(X1, X2, ...): Maximum of two or more values.
-c - min(x1, x2, ...): Minimum of two or more values.
-f - MIN(X1, X2, ...): Minimum of two or more values.
-c - mod(x1, x2): Remainder when "x1" is divided by "x2", same as
-c fmod(x1, x2).
-f - MOD(X1, X2): Remainder when X1 is divided by X2, same as
-f FMOD(X1, X2).
-c - nint(x): Nearest integer to "x" (round to nearest).
-f - NINT(X): Nearest integer to X (round to nearest).
-c - poisson(x): Random integer-valued sample from a Poisson
-c distribution with mean "x".
-f - POISSON(X): Random integer-valued sample from a Poisson
-f distribution with mean X.
-c - pow(x1, x2): "x1" raised to the power of "x2".
-f - POW(X1, X2): X1 raised to the power of X2.
-c - qif(x1, x2, x3): Returns "x2" if "x1" is true, and "x3" otherwise.
-f - QIF(x1, x2, x3): Returns X2 if X1 is true, and X3 otherwise.
-c - rand(x1, x2): Random sample from a uniform distribution in the
-c range "x1" to "x2" inclusive.
-f - RAND(X1, X2): Random sample from a uniform distribution in the
-f range X1 to X2 inclusive.
-c - sech(x): Hyperbolic secant of "x".
-f - SECH(X): Hyperbolic secant of X.
-c - sign(x1, x2): Absolute value of "x1" with the sign of "x2"
-c (transfer of sign).
-f - SIGN(X1, X2): Absolute value of X1 with the sign of X2
-f (transfer of sign).
-c - sin(x): Sine of "x" in radians.
-f - SIN(X): Sine of X in radians.
-c - sinc(x): Sinc function of "x" [= "sin(x)/x"].
-f - SINC(X): Sinc function of X [= SIN(X)/X].
-c - sind(x): Sine of "x" in degrees.
-f - SIND(X): Sine of X in degrees.
-c - sinh(x): Hyperbolic sine of "x".
-f - SINH(X): Hyperbolic sine of X.
-c - sqr(x): Square of "x" (= "x*x").
-f - SQR(X): Square of X (= X*X).
-c - sqrt(x): Square root of "x".
-f - SQRT(X): Square root of X.
-c - tan(x): Tangent of "x" in radians.
-f - TAN(X): Tangent of X in radians.
-c - tand(x): Tangent of "x" in degrees.
-f - TAND(X): Tangent of X in degrees.
-c - tanh(x): Hyperbolic tangent of "x".
-f - TANH(X): Hyperbolic tangent of X.
-
-* Symbolic Constants:
-* The following symbolic constants are available (the enclosing "<>"
-* brackets must be included):
-c - <bad>: The "bad" value (AST__BAD) used to flag missing data. Note
-c that you cannot usefully compare values with this constant because the
-c result is always <bad>. The isbad() function should be used instead.
-f - <bad>: The "bad" value (AST__BAD) used to flag missing data. Note
-f that you cannot usefully compare values with this constant because the
-f result is always <bad>. The ISBAD() function should be used instead.
-c - <dig>: Number of decimal digits of precision available in a
-c floating point (double) value.
-f - <dig>: Number of decimal digits of precision available in a
-f floating point (double precision) value.
-* - <e>: Base of natural logarithms.
-* - <epsilon>: Smallest positive number such that 1.0+<epsilon> is
-* distinguishable from unity.
-c - <mant_dig>: The number of base <radix> digits stored in the
-c mantissa of a floating point (double) value.
-f - <mant_dig>: The number of base <radix> digits stored in the
-f mantissa of a floating point (double precision) value.
-c - <max>: Maximum representable floating point (double) value.
-f - <max>: Maximum representable floating point (double precision) value.
-c - <max_10_exp>: Maximum integer such that 10 raised to that power
-c can be represented as a floating point (double) value.
-f - <max_10_exp>: Maximum integer such that 10 raised to that power
-f can be represented as a floating point (double precision) value.
-c - <max_exp>: Maximum integer such that <radix> raised to that
-c power minus 1 can be represented as a floating point (double) value.
-f - <max_exp>: Maximum integer such that <radix> raised to that
-f power minus 1 can be represented as a floating point (double precision)
-f value.
-c - <min>: Smallest positive number which can be represented as a
-c normalised floating point (double) value.
-f - <min>: Smallest positive number which can be represented as a
-f normalised floating point (double precision) value.
-c - <min_10_exp>: Minimum negative integer such that 10 raised to that
-c power can be represented as a normalised floating point (double) value.
-f - <min_10_exp>: Minimum negative integer such that 10 raised to that
-f power can be represented as a normalised floating point (double
-f precision) value.
-c - <min_exp>: Minimum negative integer such that <radix> raised to
-c that power minus 1 can be represented as a normalised floating point
-c (double) value.
-f - <min_exp>: Minimum negative integer such that <radix> raised to
-f that power minus 1 can be represented as a normalised floating point
-f (double precision) value.
-* - <pi>: Ratio of the circumference of a circle to its diameter.
-c - <radix>: The radix (number base) used to represent the mantissa of
-c floating point (double) values.
-f - <radix>: The radix (number base) used to represent the mantissa of
-f floating point (double precision) values.
-* - <rounds>: The mode used for rounding floating point results after
-* addition. Possible values include: -1 (indeterminate), 0 (toward
-* zero), 1 (to nearest), 2 (toward plus infinity) and 3 (toward minus
-* infinity). Other values indicate machine-dependent behaviour.
-
-* Evaluation Precedence and Associativity:
-* Items appearing in expressions are evaluated in the following order
-* (highest precedence first):
-* - Constants and variables
-* - Function arguments and parenthesised expressions
-* - Function invocations
-* - Unary + - ! .not.
-* - **
-* - * /
-* - + -
-* - << >>
-* - < .lt. <= .le. > .gt. >= .ge.
-* - == .eq. != .ne.
-* - &
-* - ^
-* - |
-* - && .and.
-* - ^^
-* - || .or
-* - .eqv. .neqv. .xor.
-*
-* All operators associate from left-to-right, except for unary +,
-* unary -, !, .not. and ** which associate from right-to-left.
-
-* Notes:
-* - The sequence of numbers produced by the random number functions
-* available within a MathMap is normally unpredictable and different for
-* each MathMap. However, this behaviour may be controlled by means of
-* the MathMap's Seed attribute.
-c - Normally, compound Mappings (CmpMaps) which involve MathMaps will
-c not be subject to simplification (e.g. using astSimplify) because AST
-c cannot know how different MathMaps will interact. However, in the
-c special case where a MathMap occurs in series with its own inverse,
-c then simplification may be possible. Whether simplification does, in
-c fact, occur under these circumstances is controlled by the MathMap's
-c SimpFI and SimpIF attributes.
-f - Normally, compound Mappings (CmpMaps) which involve MathMaps will
-f not be subject to simplification (e.g. using AST_SIMPLIFY) because AST
-f cannot know how different MathMaps will interact. However, in the
-f special case where a MathMap occurs in series with its own inverse,
-f then simplification may be possible. Whether simplification does, in
-f fact, occur under these circumstances is controlled by the MathMap's
-f SimpFI and SimpIF attributes.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-
-* Implementation Notes:
-* - This function implements the external (public) interface to
-* the astMathMap constructor function. It returns an ID value
-* (instead of a true C pointer) to external users, and must be
-* provided because astMathMap_ has a variable argument list which
-* cannot be encapsulated in a macro (where this conversion would
-* otherwise occur).
-* - The variable argument list also prevents this function from
-* invoking astMathMap_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMathMap *new; /* Pointer to new MathMap */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the MathMap, allocating memory and initialising the virtual
- function table as well if necessary. */
- new = astInitMathMap( NULL, sizeof( AstMathMap ), !class_init, &class_vtab,
- "MathMap", nin, nout, nfwd, fwd, ninv, inv );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new MathMap's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new MathMap. */
- return astMakeId( new );
-}
-
-AstMathMap *astInitMathMap_( void *mem, size_t size, int init,
- AstMathMapVtab *vtab, const char *name,
- int nin, int nout,
- int nfwd, const char *fwd[],
- int ninv, const char *inv[], int *status ) {
-/*
-*+
-* Name:
-* astInitMathMap
-
-* Purpose:
-* Initialise a MathMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "mathmap.h"
-* AstMathMap *astInitMathMap_( void *mem, size_t size, int init,
-* AstMathMapVtab *vtab, const char *name,
-* int nin, int nout,
-* int nfwd, const char *fwd[],
-* int ninv, const char *inv[] )
-
-* Class Membership:
-* MathMap initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new MathMap object. It allocates memory (if necessary) to accommodate
-* the MathMap plus any additional data associated with the derived class.
-* It then initialises a MathMap structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a MathMap at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the MathMap is to be initialised.
-* This must be of sufficient size to accommodate the MathMap data
-* (sizeof(MathMap)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the MathMap (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the MathMap
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the MathMap's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new MathMap.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the Object
-* astClass function).
-* nin
-* Number of input variables for the MathMap.
-* nout
-* Number of output variables for the MathMap.
-* nfwd
-* The number of forward transformation functions being supplied.
-* This must be at least equal to "nout".
-* fwd
-* Pointer to an array, with "nfwd" elements, of pointers to null
-* terminated strings which contain each of the forward transformation
-* functions.
-* ninv
-* The number of inverse transformation functions being supplied.
-* This must be at least equal to "nin".
-* inv
-* Pointer to an array, with "ninv" elements, of pointers to null
-* terminated strings which contain each of the inverse transformation
-* functions.
-
-* Returned Value:
-* A pointer to the new MathMap.
-
-* Notes:
-* - This function does not attempt to ensure that the forward and inverse
-* transformations performed by the resulting MathMap are consistent in any
-* way.
-* - This function makes a copy of the contents of the strings supplied.
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstMathMap *new; /* Pointer to new MathMap */
- char **fwdfun; /* Array of cleaned forward functions */
- char **invfun; /* Array of cleaned inverse functions */
- double **fwdcon; /* Constants for forward functions */
- double **invcon; /* Constants for inverse functions */
- int **fwdcode; /* Code for forward functions */
- int **invcode; /* Code for inverse functions */
- int fwdstack; /* Stack size for forward functions */
- int invstack; /* Stack size for inverse functions */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global status. */
- if ( !astOK ) return new;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitMathMapVtab( vtab, name );
-
-/* Check the numbers of input and output variables for validity,
- reporting an error if necessary. */
- if ( nin < 1 ) {
- astError( AST__BADNI,
- "astInitMathMap(%s): Bad number of input coordinates (%d).", status,
- name, nin );
- astError( AST__BADNI,
- "This number should be one or more." , status);
- } else if ( nout < 1 ) {
- astError( AST__BADNO,
- "astInitMathMap(%s): Bad number of output coordinates (%d).", status,
- name, nout );
- astError( AST__BADNI,
- "This number should be one or more." , status);
-
-/* Check that sufficient number of forward and inverse transformation
- functions have been supplied and report an error if necessary. */
- } else if ( nfwd < nout ) {
- astError( AST__INNTF,
- "astInitMathMap(%s): Too few forward transformation functions "
- "given (%d).", status,
- name, nfwd );
- astError( astStatus,
- "At least %d forward transformation functions must be "
- "supplied. ", status,
- nout );
- } else if ( ninv < nin ) {
- astError( AST__INNTF,
- "astInitMathMap(%s): Too few inverse transformation functions "
- "given (%d).", status,
- name, ninv );
- astError( astStatus,
- "At least %d inverse transformation functions must be "
- "supplied. ", status,
- nin );
-
-/* Of OK, clean the forward and inverse functions provided. This makes
- a lower-case copy with white space removed. */
- } else {
- CleanFunctions( nfwd, fwd, &fwdfun, status );
- CleanFunctions( ninv, inv, &invfun, status );
-
-/* Compile the cleaned functions. From the returned pointers (if
- successful), we can now tell which transformations (forward and/or
- inverse) are defined. */
- CompileMapping( "astInitMathMap", name, nin, nout,
- nfwd, (const char **) fwdfun,
- ninv, (const char **) invfun,
- &fwdcode, &invcode, &fwdcon, &invcon,
- &fwdstack, &invstack, status );
-
-/* Initialise a Mapping structure (the parent class) as the first
- component within the MathMap structure, allocating memory if
- necessary. Specify that the Mapping should be defined in the required
- directions. */
- new = (AstMathMap *) astInitMapping( mem, size, 0,
- (AstMappingVtab *) vtab, name,
- nin, nout,
- ( fwdcode != NULL ),
- ( invcode != NULL ) );
-
-
-/* If an error has occurred, free all the memory which may have been
- allocated by the cleaning and compilation steps above. */
- if ( !astOK ) {
- FREE_POINTER_ARRAY( fwdfun, nfwd )
- FREE_POINTER_ARRAY( invfun, ninv )
- FREE_POINTER_ARRAY( fwdcode, nfwd )
- FREE_POINTER_ARRAY( invcode, ninv )
- FREE_POINTER_ARRAY( fwdcon, nfwd )
- FREE_POINTER_ARRAY( invcon, ninv )
- }
-
-/* Initialise the MathMap data. */
-/* ---------------------------- */
-/* Store pointers to the compiled function information, together with
- other MathMap data. */
- if ( new ) {
- new->fwdfun = fwdfun;
- new->invfun = invfun;
- new->fwdcode = fwdcode;
- new->invcode = invcode;
- new->fwdcon = fwdcon;
- new->invcon = invcon;
- new->fwdstack = fwdstack;
- new->invstack = invstack;
- new->nfwd = nfwd;
- new->ninv = ninv;
- new->simp_fi = -INT_MAX;
- new->simp_if = -INT_MAX;
-
-/* Initialise the random number generator context associated with the
- MathMap, using an unpredictable default seed value. */
- new->rcontext.active = 0;
- new->rcontext.random_int = 0;
- new->rcontext.seed_set = 0;
- new->rcontext.seed = DefaultSeed( &new->rcontext, status );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstMathMap *astLoadMathMap_( void *mem, size_t size,
- AstMathMapVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadMathMap
-
-* Purpose:
-* Load a MathMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "mathmap.h"
-* AstMathMap *astLoadMathMap( void *mem, size_t size,
-* AstMathMapVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* MathMap loader.
-
-* Description:
-* This function is provided to load a new MathMap using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* MathMap structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a MathMap at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the MathMap is to be
-* loaded. This must be of sufficient size to accommodate the
-* MathMap data (sizeof(MathMap)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the MathMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the MathMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstMathMap) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new MathMap. If this is NULL, a pointer
-* to the (static) virtual function table for the MathMap class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "MathMap" is used instead.
-
-* Returned Value:
-* A pointer to the new MathMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Constants: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstMathMap *new; /* Pointer to the new MathMap */
- char key[ KEY_LEN + 1 ]; /* Buffer for keyword strings */
- int ifun; /* Loop counter for functions */
- int invert; /* Invert attribute value */
- int nin; /* True number of input coordinates */
- int nout; /* True number of output coordinates */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this MathMap. In this case the
- MathMap belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstMathMap );
- vtab = &class_vtab;
- name = "MathMap";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitMathMapVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built MathMap. */
- new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "MathMap" );
-
-/* Determine if the MathMap is inverted and obtain the "true" number
- of input and output coordinates by un-doing the effects of any
- inversion. */
- invert = astGetInvert( new );
- nin = invert ? astGetNout( new ) : astGetNin( new );
- nout = invert ? astGetNin( new ) : astGetNout( new );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* Numbers of transformation functions. */
-/* ------------------------------------ */
-/* Read the numbers of forward and inverse transformation functions,
- supplying appropriate defaults. */
- new->nfwd = astReadInt( channel, "nfwd", nout );
- new->ninv = astReadInt( channel, "ninv", nin );
- if ( astOK ) {
-
-/* Allocate memory for the MathMap's transformation function arrays. */
- MALLOC_POINTER_ARRAY( new->fwdfun, char *, new->nfwd )
- MALLOC_POINTER_ARRAY( new->invfun, char *, new->ninv )
- if ( astOK ) {
-
-/* Forward transformation functions. */
-/* --------------------------------- */
-/* Create a keyword for each forward transformation function and read
- the function's value as a string. */
- for ( ifun = 0; ifun < new->nfwd; ifun++ ) {
- (void) sprintf( key, "fwd%d", ifun + 1 );
- new->fwdfun[ ifun ] = astReadString( channel, key, "" );
- }
-
-/* Inverse transformation functions. */
-/* --------------------------------- */
-/* Repeat this process for the inverse transformation functions. */
- for ( ifun = 0; ifun < new->ninv; ifun++ ) {
- (void) sprintf( key, "inv%d", ifun + 1 );
- new->invfun[ ifun ] = astReadString( channel, key, "" );
- }
-
-/* Forward-inverse simplification flag. */
-/* ------------------------------------ */
- new->simp_fi = astReadInt( channel, "simpfi", -INT_MAX );
- if ( TestSimpFI( new, status ) ) SetSimpFI( new, new->simp_fi, status );
-
-/* Inverse-forward simplification flag. */
-/* ------------------------------------ */
- new->simp_if = astReadInt( channel, "simpif", -INT_MAX );
- if ( TestSimpIF( new, status ) ) SetSimpIF( new, new->simp_if, status );
-
-/* Random number context. */
-/* ---------------------- */
-/* Initialise the random number generator context. */
- new->rcontext.active = 0;
- new->rcontext.random_int = 0;
-
-/* Read the flag that determines if the Seed value is set, and the
- Seed value itself. */
- new->rcontext.seed_set = astReadInt( channel, "seeded", 0 );
- if ( TestSeed( new, status ) ) {
- new->rcontext.seed = astReadInt( channel, "seed", 0 );
- SetSeed( new, new->rcontext.seed, status );
-
-/* Supply an unpredictable default Seed value if necessary. */
- } else {
- new->rcontext.seed = DefaultSeed( &new->rcontext, status );
- }
-
-/* Compile the MathMap's transformation functions. */
- CompileMapping( "astLoadMathMap", name, nin, nout,
- new->nfwd, (const char **) new->fwdfun,
- new->ninv, (const char **) new->invfun,
- &new->fwdcode, &new->invcode,
- &new->fwdcon, &new->invcon,
- &new->fwdstack, &new->invstack, status );
- }
-
-/* If an error occurred, clean up by deleting the new MathMap. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return the new MathMap pointer. */
- return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-
-
-
-
diff --git a/ast-5.3-1/mathmap.h b/ast-5.3-1/mathmap.h
deleted file mode 100644
index c023069..0000000
--- a/ast-5.3-1/mathmap.h
+++ /dev/null
@@ -1,410 +0,0 @@
-#if !defined( MATHMAP_INCLUDED ) /* Include this file only once */
-#define MATHMAP_INCLUDED
-/*
-*+
-* Name:
-* mathmap.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the MathMap class.
-
-* Invocation:
-* #include "mathmap.h"
-
-* Description:
-* This include file defines the interface to the MathMap class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The MathMap class implements Mappings that are specified by a series
-* of arithmetic expressions that relate output variables to input
-* variables (and vice versa).
-
-* Inheritance:
-* The MathMap class inherits from the Mapping class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* Seed
-* Random number seed.
-* SimpFI
-* Forward-inverse MathMap pairs simplify?
-* SimpIF
-* Inverse-forward MathMap pairs simplify?
-
-* Methods Over-Ridden:
-* Public:
-* None.
-*
-* Protected:
-* astClearAttrib
-* Clear an attribute value for a Frame.
-* astGetAttrib
-* Get an attribute value for a Frame.
-* astMapMerge
-* Simplify a sequence of Mappings containing a MathMap.
-* astSetAttrib
-* Set an attribute value for a Frame.
-* astTestAttrib
-* Test if an attribute value has been set for a Frame.
-* astTransform
-* Transform a set of points.
-
-* New Methods Defined:
-* Public:
-* None.
-*
-* Protected:
-* astClearSeed
-* Clear the Seed attribute for a MathMap.
-* astClearSimpFI
-* Clear the SimpFI attribute for a MathMap.
-* astClearSimpIF
-* Clear the SimpIF attribute for a MathMap.
-* astGetSeed
-* Get the value of the Seed attribute for a MathMap.
-* astGetSimpFI
-* Get the value of the SimpFI attribute for a MathMap.
-* astGetSimpIF
-* Get the value of the SimpIF attribute for a MathMap.
-* astSetSeed
-* Set the value of the Seed attribute for a MathMap.
-* astSetSimpFI
-* Set the value of the SimpFI attribute for a MathMap.
-* astSetSimpIF
-* Set the value of the SimpIF attribute for a MathMap.
-* astTestSeed
-* Test whether a value has been set for the Seed attribute of a
-* MathMap.
-* astTestSimpFI
-* Test whether a value has been set for the SimpFI attribute of a
-* MathMap.
-* astTestSimpIF
-* Test whether a value has been set for the SimpIF attribute of a
-* MathMap.
-
-* Other Class Functions:
-* Public:
-* astIsAMathMap
-* Test class membership.
-* astMathMap
-* Create a MathMap.
-*
-* Protected:
-* astCheckMathMap
-* Validate class membership.
-* astInitMathMap
-* Initialise a MathMap.
-* astInitMathMapVtab
-* Initialise the virtual function table for the MathMap class.
-* astLoadMathMap
-* Load a MathMap.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstMathMap
-* MathMap object type.
-*
-* Protected:
-* AstMathMapVtab
-* MathMap virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 3-SEP-1999 (RFWS):
-* Original version.
-* 8-JAN-2003 (DSB):
-* Added protected astInitMathMapVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "channel.h" /* I/O channels */
-#include "pointset.h" /* Sets of points/coordinates */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros. */
-/* ======= */
-/* This value defines the size of an internal table in the AstMathMap
- data type. Since it will be publicly accessible (but of no external
- use), we give it an obscure name. */
-
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-#define AST_MATHMAP_RAND_CONTEXT_NTAB_ (32)
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* Random number generator context. */
-/* -------------------------------- */
-/* This structure holds the context for the random number generator
- used by each MathMap. This ensures that the random number sequences
- used by different MathMaps are independent, and can be independently
- controlled by setting/clearing their Seed attributes. Random numbers
- are produced by combining the output of two internal generators. */
-typedef struct AstMathMapRandContext_ {
- long int rand1; /* State of first internal generator */
- long int rand2; /* State of second internal generator */
- long int random_int; /* Last random integer produced */
- long int table[ AST_MATHMAP_RAND_CONTEXT_NTAB_ ]; /* Shuffle table */
- int active; /* Generator has been initialised? */
- int seed; /* Seed to be used during initialisation */
- int seed_set; /* Seed value set via "Seed" attribute? */
-} AstMathMapRandContext_;
-
-/* MathMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each
- object in the class (e.g. its instance variables). */
-typedef struct AstMathMap {
-
-/* Attributes inherited from the parent class. */
- AstMapping mapping; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- AstMathMapRandContext_ rcontext; /* Random number generator context */
- char **fwdfun; /* Array of forward functions */
- char **invfun; /* Array of inverse functions */
- double **fwdcon; /* Array of constants for forward functions */
- double **invcon; /* Array of constants for inverse functions */
- int **fwdcode; /* Array of opcodes for forward functions */
- int **invcode; /* Array of opcodes for inverse functions */
- int fwdstack; /* Stack size required by forward functions */
- int invstack; /* Stack size required by inverse functions */
- int nfwd; /* Number of forward functions */
- int ninv; /* Number of inverse functions */
- int simp_fi; /* Forward-inverse MathMap pairs simplify? */
- int simp_if; /* Inverse-forward MathMap pairs simplify? */
-} AstMathMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstMathMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstMappingVtab mapping_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- int (* GetSeed)( AstMathMap *, int * );
- int (* GetSimpFI)( AstMathMap *, int * );
- int (* GetSimpIF)( AstMathMap *, int * );
- int (* TestSeed)( AstMathMap *, int * );
- int (* TestSimpFI)( AstMathMap *, int * );
- int (* TestSimpIF)( AstMathMap *, int * );
- void (* ClearSeed)( AstMathMap *, int * );
- void (* ClearSimpFI)( AstMathMap *, int * );
- void (* ClearSimpIF)( AstMathMap *, int * );
- void (* SetSeed)( AstMathMap *, int, int * );
- void (* SetSimpFI)( AstMathMap *, int, int * );
- void (* SetSimpIF)( AstMathMap *, int, int * );
-} AstMathMapVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstMathMapGlobals {
- AstMathMapVtab Class_Vtab;
- int Class_Init;
- char GetAttrib_Buff[ 51 ];
-} AstMathMapGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(MathMap) /* Check class membership */
-astPROTO_ISA(MathMap) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstMathMap *astMathMap_( int, int, int, const char *[], int, const char *[],
- const char *, int *, ...);
-#else
-AstMathMap *astMathMapId_( int, int, int, const char *[], int, const char *[],
- const char *, ... )__attribute__((format(printf,7,8)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstMathMap *astInitMathMap_( void *, size_t, int, AstMathMapVtab *,
- const char *, int, int,
- int, const char *[], int, const char *[], int * );
-
-/* Vtab initialiser. */
-void astInitMathMapVtab_( AstMathMapVtab *, const char *, int * );
-
-/* Loader. */
-AstMathMap *astLoadMathMap_( void *, size_t, AstMathMapVtab *,
- const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitMathMapGlobals_( AstMathMapGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-#if defined(astCLASS) /* Protected */
-int astGetSeed_( AstMathMap *, int * );
-int astGetSimpFI_( AstMathMap *, int * );
-int astGetSimpIF_( AstMathMap *, int * );
-int astTestSeed_( AstMathMap *, int * );
-int astTestSimpFI_( AstMathMap *, int * );
-int astTestSimpIF_( AstMathMap *, int * );
-void astClearSeed_( AstMathMap *, int * );
-void astClearSimpFI_( AstMathMap *, int * );
-void astClearSimpIF_( AstMathMap *, int * );
-void astSetSeed_( AstMathMap *, int, int * );
-void astSetSimpFI_( AstMathMap *, int, int * );
-void astSetSimpIF_( AstMathMap *, int, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckMathMap(this) astINVOKE_CHECK(MathMap,this,0)
-#define astVerifyMathMap(this) astINVOKE_CHECK(MathMap,this,1)
-
-/* Test class membership. */
-#define astIsAMathMap(this) astINVOKE_ISA(MathMap,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astMathMap astINVOKE(F,astMathMap_)
-#else
-#define astMathMap astINVOKE(F,astMathMapId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitMathMap(mem,size,init,vtab,name,nin,nout,nfwd,fwd,ninv,inv) \
-astINVOKE(O,astInitMathMap_(mem,size,init,vtab,name,nin,nout,nfwd,fwd,ninv,inv,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitMathMapVtab(vtab,name) astINVOKE(V,astInitMathMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadMathMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadMathMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckMathMap to validate MathMap pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-#if defined(astCLASS) /* Protected */
-#define astClearSeed(this) \
-astINVOKE(V,astClearSeed_(astCheckMathMap(this),STATUS_PTR))
-#define astClearSimpFI(this) \
-astINVOKE(V,astClearSimpFI_(astCheckMathMap(this),STATUS_PTR))
-#define astClearSimpIF(this) \
-astINVOKE(V,astClearSimpIF_(astCheckMathMap(this),STATUS_PTR))
-#define astGetSeed(this) \
-astINVOKE(V,astGetSeed_(astCheckMathMap(this),STATUS_PTR))
-#define astGetSimpFI(this) \
-astINVOKE(V,astGetSimpFI_(astCheckMathMap(this),STATUS_PTR))
-#define astGetSimpIF(this) \
-astINVOKE(V,astGetSimpIF_(astCheckMathMap(this),STATUS_PTR))
-#define astSetSeed(this,value) \
-astINVOKE(V,astSetSeed_(astCheckMathMap(this),value,STATUS_PTR))
-#define astSetSimpFI(this,value) \
-astINVOKE(V,astSetSimpFI_(astCheckMathMap(this),value,STATUS_PTR))
-#define astSetSimpIF(this,value) \
-astINVOKE(V,astSetSimpIF_(astCheckMathMap(this),value,STATUS_PTR))
-#define astTestSeed(this) \
-astINVOKE(V,astTestSeed_(astCheckMathMap(this),STATUS_PTR))
-#define astTestSimpFI(this) \
-astINVOKE(V,astTestSimpFI_(astCheckMathMap(this),STATUS_PTR))
-#define astTestSimpIF(this) \
-astINVOKE(V,astTestSimpIF_(astCheckMathMap(this),STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/matrixmap.c b/ast-5.3-1/matrixmap.c
deleted file mode 100644
index d9b6ec5..0000000
--- a/ast-5.3-1/matrixmap.c
+++ /dev/null
@@ -1,5453 +0,0 @@
-/*
-*class++
-* Name:
-* MatrixMap
-
-* Purpose:
-* Map coordinates by multiplying by a matrix.
-
-* Constructor Function:
-c astMatrixMap
-f AST_MATRIXMAP
-
-* Description:
-* A MatrixMap is form of Mapping which performs a general linear
-* transformation. Each set of input coordinates, regarded as a
-* column-vector, are pre-multiplied by a matrix (whose elements
-* are specified when the MatrixMap is created) to give a new
-* column-vector containing the output coordinates. If appropriate,
-* the inverse transformation may also be performed.
-
-* Inheritance:
-* The MatrixMap class inherits from the Mapping class.
-
-* Attributes:
-* The MatrixMap class does not define any new attributes beyond
-* those which are applicable to all Mappings.
-
-* Functions:
-c The MatrixMap class does not define any new functions beyond those
-f The MatrixMap class does not define any new routines beyond those
-* which are applicable to all Mappings.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2009 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 9-FEB-1996 (DSB):
-* Original version.
-* 13-NOV-1996 (DSB):
-* Updated to support attributes, I/O and an external interface.
-* 3-JUN-1997 (DSB):
-* astMtrMult and astMtrRot made protected instead of public.
-* 16-JUN-1997 (RFWS):
-* Tidied public prologues.
-* 24-JUN-1997 (DSB):
-* Zero returned for coordinates which are indeterminate as a
-* result of using an inverted, non-square, diagonal matrix.
-* 10-OCT-1997 (DSB):
-* o The inverse matrix is no longer dumped by the Dump function.
-* Instead, it is re-calculated by the Load function.
-* o The description of argument "form" in astMatrixMap corrected
-* to indicate that a value of 2 produces a unit matrix.
-* o String values used to represent choices externally, instead
-* of integers.
-* 24-NOV-1997 (DSB):
-* Use of error code AST__OPT replaced by AST__RDERR.
-* 28-JAN-1998 (DSB):
-* Bug fix in astMtrMult: the matrix (forward or inverse) used for
-* the "a" MatrixMap was determined by the Invert flag of the other
-* ("this") MatrixMap.
-* 14-APR-1998 (DSB):
-* Bug fix in Dump. Previously, matrix elements with value AST__BAD
-* were explicitly written out. Now they are not written out, since
-* AST__BAD can have different values on different machines. Missing
-* elements default to AST__BAD when read back in using astLoadMatrixMap.
-* 20-APR-1998 (DSB):
-* Bug fix in astLoadMatrixMap: initialise the pointer to the inverse
-* matrix array to NULL if no inverse matrix is needed.
-* 25-AUG-1998 (DSB):
-* - Transform changed so that bad input axis values are not
-* propagated to output axes which are independant of the input axis.
-* - CompressMatrix changed to allow a tolerance of DBL_EPSILON when
-* determining if a matrix is a unit matrix, or a diagonal matrix.
-* - MapMerge changed to allow MatrixMaps to swap with PermMaps
-* in order to move the MatrixMap closer to a Mapping with which it
-* could merge.
-* 22-FEB-1999 (DSB):
-* Changed logic of MapMerge to avoid infinite looping.
-* 5-MAY-1999 (DSB):
-* More corrections to MapMerge: Cleared up errors in the use of the
-* supplied invert flags, and corrected logic for deciding which
-* neighbouring Mapping to swap with.
-* 16-JUL-1999 (DSB):
-* Fixed memory leaks in MatWin and MapMerge.
-* 8-JAN-2003 (DSB):
-* Changed private InitVtab method to protected astInitatrixMapVtab
-* method.
-* 11-SEP-2003 (DSB):
-* Increased tolerance on checks for unit matrices within
-* CompressMatrix. Now uses sqrt(DBL_EPSILON)*diag (previously was
-* DBL_EPSILON*DIAG ).
-* 10-NOV-2003 (DSB):
-* Modified functions which swap a MatrixMap with another Mapping
-* (e.g. MatSwapPerm, etc), to simplify the returned Mappings.
-* 13-JAN-2003 (DSB):
-* Modified the tolerance used by CompressMatrix when checking for
-* zero matrix elements. Old system compared each element to thre
-* size of the diagonal, but different scalings on different axes could
-* cause this to trat as zero values which should nto be treated as
-* zero.
-* 23-APR-2004 (DSB):
-* Changes to simplification algorithm.
-* 8-JUL-2004 (DSB):
-* astMtrMult - Report an error if either MatrixMap does not have a
-* defined forward transformation.
-* 1-SEP-2004 (DSB):
-* Ensure do1 and do2 are initialised before use in MapMerge.
-* 7-SEP-2005 (DSB):
-* Take account of the Invert flag when using the zoom factor from
-* a ZoomMap.
-* 14-FEB-2006 (DSB):
-* Correct row/col confusion in CompressMatrix.
-* 15-MAR-2006 (DSB):
-* Override astEqual.
-* 15-MAR-2009 (DSB):
-* MapSplit: Only create the returned Mapping if it would have some
-* outputs. Also, do not create the returned Mapping if any output
-* depends on a mixture of selected and unselected inputs.
-* 16-JUL-2009 (DSB):
-* MatPerm: Fix memory leak (mm2 was not being annulled).
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS MatrixMap
-
-/* Define identifiers for the different forms of matrix storage. */
-#define FULL 0
-#define DIAGONAL 1
-#define UNIT 2
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
-compare bad values directory because of the danger of floating point
-exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-#include "matrixmap.h" /* Interface definition for this class */
-#include "pal.h" /* SLALIB function definitions */
-#include "permmap.h"
-#include "zoommap.h"
-#include "unitmap.h"
-#include "winmap.h"
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-static const char *Form[3] = { "Full", "Diagonal", "Unit" }; /* Text values
- used to represent storage form externally */
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static int *(* parent_mapsplit)( AstMapping *, int, const int *, AstMapping **, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(MatrixMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(MatrixMap,Class_Init)
-#define class_vtab astGLOBAL(MatrixMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstMatrixMapVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstMatrixMap *astMatrixMapId_( int, int, int, const double [], const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMatrixMap *MatMat( AstMapping *, AstMapping *, int, int, int * );
-static AstMatrixMap *MatPerm( AstMatrixMap *, AstPermMap *, int, int, int, int * );
-static AstMatrixMap *MatZoom( AstMatrixMap *, AstZoomMap *, int, int, int * );
-static AstMatrixMap *MtrMult( AstMatrixMap *, AstMatrixMap *, int * );
-static AstMatrixMap *MtrRot( AstMatrixMap *, double, const double[], int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static double *InvertMatrix( int, int, int, double *, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int FindString( int, const char *[], const char *, const char *, const char *, const char *, int * );
-static int Ustrcmp( const char *, const char *, int * );
-static int GetTranForward( AstMapping *, int * );
-static int GetIsLinear( AstMapping *, int * );
-static int GetTranInverse( AstMapping *, int * );
-static int CanSwap( AstMapping *, AstMapping *, int, int, int *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int PermOK( AstMapping *, int * );
-static int ScalingRowCol( AstMatrixMap *, int, int * );
-static void CompressMatrix( AstMatrixMap *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *obj, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void ExpandMatrix( AstMatrixMap *, int * );
-static void MatWin( AstMapping **, int *, int, int * );
-static void MatPermSwap( AstMapping **, int *, int, int * );
-static void PermGet( AstPermMap *, int **, int **, double **, int * );
-static void SMtrMult( int, int, int, const double *, double *, double*, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-
-/* Member functions. */
-/* ================= */
-static int CanSwap( AstMapping *map1, AstMapping *map2, int inv1, int inv2,
- int *simpler, int *status ){
-/*
-* Name:
-* CanSwap
-
-* Purpose:
-* Determine if two Mappings could be swapped.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* int CanSwap( AstMapping *map1, AstMapping *map2, int inv1, int inv2,
-* int *simpler, int *status )
-
-* Class Membership:
-* MatrixMap member function
-
-* Description:
-* This function returns a flag indicating if the pair of supplied
-* Mappings could be replaced by an equivalent pair of Mappings from the
-* same classes as the supplied pair, but in reversed order. Each pair
-* of Mappings is considered to be compunded in series. The supplied
-* Mapings are not changed in any way.
-
-* Parameters:
-* map1
-* The Mapping to be applied first.
-* map2
-* The Mapping to be applied second.
-* inv1
-* The invert flag to use with map1. A value of zero causes the forward
-* mapping to be used, and a non-zero value causes the inverse
-* mapping to be used.
-* inv2
-* The invert flag to use with map2.
-* simpler
-* Addresss of a location at which to return a flag indicating if
-* the swapped Mappings would be intrinsically simpler than the
-* original Mappings.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* 1 if the Mappings could be swapped, 0 otherwise.
-
-* Notes:
-* - One of the supplied pair of Mappings must be a MatrixMap.
-* - A value of 0 is returned if an error has already occurred, or if
-* this function should fail for any reason.
-*/
-
-/* Local Variables: */
- AstMatrixMap *mat; /* Pointer to MatrixMap Mapping */
- AstMapping *nomat; /* Pointer to non-MatrixMap Mapping */
- const char *class1; /* Pointer to map1 class string */
- const char *class2; /* Pointer to map2 class string */
- const char *nomat_class; /* Pointer to non-MatrixMap class string */
- double *consts; /* Pointer to constants array */
- int *inperm; /* Pointer to input axis permutation array */
- int *outperm; /* Pointer to output axis permutation array */
- int i; /* Loop count */
- int invert[ 2 ]; /* Original invert flags */
- int nax; /* No. of in/out coordinates for the MatrixMap */
- int nin; /* No. of input coordinates for the PermMap */
- int nout; /* No. of output coordinates for the PermMap */
- int ret; /* Returned flag */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Initialise */
- ret = 0;
- *simpler = 0;
-
-/* Temporarily set the Invert attributes of both Mappings to the supplied
- values. */
- invert[ 0 ] = astGetInvert( map1 );
- astSetInvert( map1, inv1 );
-
- invert[ 1 ] = astGetInvert( map2 );
- astSetInvert( map2, inv2 );
-
-/* Get the classes of the two mappings. */
- class1 = astGetClass( map1 );
- class2 = astGetClass( map2 );
- if( astOK ){
-
-/* Get a pointer to the MatrixMap and non-MatrixMap Mappings. */
- if( !strcmp( class1, "MatrixMap" ) ){
- mat = (AstMatrixMap *) map1;
- nomat = map2;
- nomat_class = class2;
- } else {
- nomat = map1;
- mat = (AstMatrixMap *) map2;
- nomat_class = class1;
- }
-
-/* Get the number of input axes for the MatrixMap. */
- nax = astGetNin( mat );
-
-/* If it is a WinMap, the Mappings can be swapped. */
- if( !strcmp( nomat_class, "WinMap" ) ){
- ret = 1;
-
-/* If it is a PermMap, the Mappings can be swapped so long as:
- 1) all links between input and output axes in the PermMap are
- bi-directional. This does not preclude the existence of unconnected
- axes, which do not have links (bi-directional or otherwise).
- 2) The MatrixMap is square, and invertable.
- 3) If the permMap is applied first, then each output of the PermMap
- which is assigned a constant value must correspond to a "scaling" row
- and column in the MatrixMap. I.e. if PermMap output axis "i" is
- assigned a constant value, then row i and column i of the following
- MatrixMap must contain only zeros, EXCEPT for the diagonal term (row
- i, column i) which must be non-zero. If the Mappings are in the other
- order, then the same applies to PermMap input axes assigned a constant
- value. */
-
-/* Check the other Mapping is a PermMap, and that the MatrixMap is square
- and has an inverse. */
- } else if( !strcmp( nomat_class, "PermMap" ) &&
- nax == astGetNout( mat ) && ( mat->form == UNIT ||
- ( mat->i_matrix != NULL &&
- mat->f_matrix != NULL ) ) ) {
-
-/* Get the number of input and output coordinates for the PermMap. */
- nin = astGetNin( nomat );
- nout = astGetNout( nomat );
-
-/* We need to know the axis permutation arrays and constants array for
- the PermMap. */
- PermGet( (AstPermMap *) nomat, &outperm, &inperm, &consts, status );
- if( astOK ) {
-
-/* Indicate we can swap with the PermMap. */
- ret = 1;
-
-/* Check each output axis. If any links between axes are found which are
- not bi-directional, indicate that we cannot swap with the PermMap. */
- for( i = 0; i < nout; i++ ){
- if( outperm[ i ] >= 0 && outperm[ i ] < nin ) {
- if( inperm[ outperm[ i ] ] != i ) {
- ret = 0;
- break;
- }
- }
- }
-
-/* Check each input axis. If any links between axes are found which are
- not bi-directional, indicate that we cannot swap with the PermMap. */
- for( i = 0; i < nin; i++ ){
- if( inperm[ i ] >= 0 && inperm[ i ] < nout ) {
- if( outperm[ inperm[ i ] ] != i ) {
- ret = 0;
- break;
- }
- }
- }
-
-/* If the PermMap is suitable, check that any constant values fed from the
- PermMap into the MatrixMap (in either forward or inverse direction)
- are not changed by the MatrixMap. This requires the row and column for
- each constant axis to be zeros, ecept for a value of 1.0 on the
- diagonal. First deal with the cases where the PermMap is applied
- first, so the outputs of the PermMap are fed into the MatrixMap in the
- forward direction. */
- if( ret && ( nomat == map1 ) ) {
-
- if( nout != nax ){
- astError( AST__RDERR, "PermMap produces %d outputs, but the following"
- "MatrixMap has %d inputs\n", status, nout, nax );
- ret = 0;
- }
-
-/* Consider each output axis of the PermMap. */
- for( i = 0; i < nout && astOK ; i++ ) {
-
-/* If this PermMap output is assigned a constant... */
- if( outperm[ i ] < 0 || outperm[ i ] >= nin ) {
-
-/* Check the i'th row of the MatrixMap is all zero except for the i'th
- column which must be non-zero. If not indicate that the MatrixMap cannot
- swap with the PermMap and leave the loop. */
- if( !ScalingRowCol( mat, i, status ) ) {
- ret = 0;
- break;
- }
- }
- }
- }
-
-/* Now deal with the cases where the PermMap is applied second, so the inputs
- of the PermMap are fed into the MatrixMap in the inverse direction. */
- if( ret && ( nomat == map2 ) ) {
-
- if( nin != nax ){
- astError( AST__RDERR, "Inverse PermMap produces %d inputs, but the "
- "preceeding MatrixMap has %d outputs\n", status, nin, nax );
- ret = 0;
- }
-
-/* Consider each input axis of the PermMap. */
- for( i = 0; i < nin && astOK; i++ ){
-
-/* If this PermMap input is assigned a constant (by the inverse Mapping)... */
- if( inperm[ i ] < 0 || inperm[ i ] >= nout ) {
-
-/* Check the i'th row of the MatrixMap is all zero except for the i'th
- column which must be non-zero. If not indicate that the MatrixMap cannot
- swap with the PermMap and leave the loop. */
- if( !ScalingRowCol( mat, i, status ) ) {
- ret = 0;
- break;
- }
- }
- }
- }
-
-/* If we can swap with the PermMap, the swapped Mappings may be
- intrinsically simpler than the original mappings. */
- if( ret ) {
-
-/* If the PermMap preceeds the WinMap, this will be the case if the PermMap
- has more outputs than inputs. If the WinMap preceeds the PermMap, this
- will be the case if the PermMap has more inputs than outputs. */
- *simpler = ( nomat == map1 ) ? nout > nin : nin > nout;
- }
-
-/* Free the axis permutation and constants arrays. */
- outperm = (int *) astFree( (void *) outperm );
- inperm = (int *) astFree( (void *) inperm );
- consts = (double *) astFree( (void *) consts );
- }
- }
- }
-
-/* Re-instate the original settings of the Invert attributes for the
- supplied MatrixMaps. */
- astSetInvert( map1, invert[ 0 ] );
- astSetInvert( map2, invert[ 1 ] );
-
-/* Return the answer. */
- return astOK ? ret : 0;
-}
-
-static void CompressMatrix( AstMatrixMap *this, int *status ){
-/*
-* Name:
-* CompressMatrix
-
-* Purpose:
-* If possible, reduce the amount of storage needed to store a MatrixMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* void CompressMatrix( AstMatrixMap *this, int *status )
-
-* Class Membership:
-* MatrixMap member function.
-
-* Description:
-* The supplid MatrixMap is converted to its most compressed form
-* (i.e no element values if it is a unit matrix, diagonal elements only
-* if it is a diagonal matrix, or all elements otherwise).
-
-* Parameters:
-* this
-* A pointer to the MatrixMap to be compressed.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- double *a; /* Pointer to next element */
- double *colmax; /* Pointer to array holding column max values */
- double *fmat; /* Pointer to compressed forward matrix */
- double *rowmax; /* Pointer to array holding row max values */
- double mval; /* Matrix element value */
- int i; /* Loop count */
- int j; /* Loop count */
- int k; /* Loop count */
- int ncol; /* No. of columns in forward matrix */
- int ndiag; /* No. of diagonal elements in matrix */
- int new_form; /* Compressed storage form */
- int new_inv; /* New inverse requied? */
- int next_diag; /* Index of next diagonal element */
- int nrow; /* No. of rows in forward matrix */
-
-/* Check the global error status. */
- if ( !astOK || !this ) return;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- new_inv = 0;
-
-/* Get the dimensions of the forward matrix. */
- if( astGetInvert( this ) ){
- nrow = astGetNin( this );
- ncol = astGetNout( this );
- } else {
- ncol = astGetNin( this );
- nrow = astGetNout( this );
- }
-
-/* Store the number of diagonal elements in the matrix. This is the
- minimum of the number of rows and columns. */
- if( ncol < nrow ){
- ndiag = ncol;
- } else {
- ndiag = nrow;
- }
-
-/* If the MatrixMap is already stored in UNIT form, it cannot be compressed
- any further. */
- if( this->form == UNIT){
- return;
-
-/* Otherwise, if the MatrixMap is stored in DIAGONAL form, it could be
- compressed into a UNIT MatrixMap if all the supplied element values are
- one. */
- } else if( this->form == DIAGONAL ){
- new_form = UNIT;
- for( i = 0; i < ndiag; i++ ){
- if( !EQUAL( (this->f_matrix)[ i ], 1.0 ) ){
- new_form = DIAGONAL;
- break;
- }
- }
-
-/* If it can be compressed, change the storage form and free the arrays
- holding the diagonal element values. */
- if( new_form == UNIT ) {
- this->f_matrix = (double *) astFree( (void *)( this->f_matrix ) );
- this->i_matrix = (double *) astFree( (void *)( this->i_matrix ) );
- this->form = UNIT;
- }
-
-/* Otherwise, a full MatrixMap has been supplied, but this could be stored
- in a unit or diagonal MatrixMap if the element values are appropriate. */
- } else {
- new_form = FULL;
-
-/* Find the maximum absolute value in each column. Scale by
- sqrt(DBL_EPSILON) to be come a lower limit for non-zero values. */
- colmax = astMalloc( ncol*sizeof( double ) );
- if( colmax ) {
- for( j = 0; j < ncol; j++ ) {
- colmax[ j ] = 0.0;
- i = j;
- for( k = 0; k < nrow; k++ ) {
- mval = (this->f_matrix)[ i ];
- if( mval != AST__BAD ) {
- mval = fabs( mval );
- if( mval > colmax[ j ] ) colmax[ j ] = mval;
- }
- i += ncol;
- }
- colmax[ j ] *= sqrt( DBL_EPSILON );
- }
- }
-
-/* Find the maximum absolute value in each row. Scale by
- sqrt(DBL_EPSILON) to be come a lower limit for non-zero values. */
- rowmax = astMalloc( nrow*sizeof( double ) );
- if( rowmax ) {
- for( k = 0; k < nrow; k++ ) {
- rowmax[ k ] = 0.0;
- i = k*ncol;
- for( j = 0; j < ncol; j++ ) {
- mval = (this->f_matrix)[ i ];
- if( mval != AST__BAD ) {
- mval = fabs( mval );
- if( mval > rowmax[ k ] ) rowmax[ k ] = mval;
- }
- i++;
- }
- rowmax[ k ] *= sqrt( DBL_EPSILON );
- }
- }
-
-/* Check memory can be used */
- if( astOK ) {
-
-/* Initialise a flag indicating that the inverse matrix does not need to
- be re-calculated. */
- new_inv = 0;
-
-/* Initially assume that the forward matrix is a unit matrix. */
- new_form = UNIT;
-
-/* Store a pointer to the next matrix element. */
- a = this->f_matrix;
-
-/* Loop through all the rows in the forward matrix array. */
- for( k = 0; k < nrow; k++ ) {
-
-/* Loop through all the elements in this column. */
- for( j = 0; j < ncol; j++, a++ ) {
-
-/* If this element is bad, use full form. */
- if( *a == AST__BAD ) {
- new_form = FULL;
-
-/* Otherwise, if this is a diagonal term, check its value. If it is not one,
- then the matrix cannot be a unit matrix, but it could still be a diagonal
- matrix. */
- } else {
- if( j == k ) {
- if( *a != 1.0 && new_form == UNIT ) new_form = DIAGONAL;
-
-/* If this is not a diagonal element, and the element value is not zero,
- then the matrix is not a diagonal matrix. Allow a tolerance of
- SQRT(DBL_EPSILON) times the largest value in the same row or column as
- the current matrix element. That is, an element must be insignificant
- to both its row and its column to be considered as effectively zero.
- Replace values less than this limit with zero. */
- } else {
- mval = fabs( *a );
- if( mval <= rowmax[ k ] &&
- mval <= colmax[ j ] ) {
-
-/* If the element will change value, set a flag indicating that the inverse
- matrix needs to be re-calculated. */
- if( *a != 0.0 ) new_inv = 1;
-
-/* Ensure this element value is zero. */
- *a = 0.0;
-
- } else {
- new_form = FULL;
- }
- }
- }
- }
- }
- }
-
-/* Free memory. */
- colmax = astFree( colmax );
- rowmax = astFree( rowmax );
-
-/* If it can be compressed into a UNIT MatrixMap, change the storage form and
- free the arrays holding the element values. */
- if( new_form == UNIT ) {
- this->f_matrix = (double *) astFree( (void *)( this->f_matrix ) );
- this->i_matrix = (double *) astFree( (void *)( this->i_matrix ) );
- this->form = UNIT;
-
-/* Otherwise, if it can be compressed into a DIAGONAL MatrixMap, copy the
- diagonal elements from the full forward matrix into a newly allocated
- array, use this array to replace the forward matrix array in the MatrixMap,
- create a new inverse matrix, and change the storage form. */
- } else if( new_form == DIAGONAL ) {
- fmat = astMalloc( sizeof(double)*(size_t)ndiag );
- if( fmat ){
-
- next_diag = 0;
- for( i = 0; i < ndiag; i++ ){
- fmat[ i ] = (this->f_matrix)[ next_diag ];
- next_diag += ncol + 1;
- }
-
- (void) astFree( (void *) this->f_matrix );
- (void) astFree( (void *) this->i_matrix );
-
- this->f_matrix = fmat;
- this->i_matrix = InvertMatrix( DIAGONAL, nrow, ncol, fmat, status );
- this->form = DIAGONAL;
-
- }
-
-/* Calculate a new inverse matrix if necessary. */
- } else if( new_inv ) {
- (void) astFree( (void *) this->i_matrix );
- this->i_matrix = InvertMatrix( FULL, nrow, ncol, this->f_matrix, status );
- }
- }
-
- return;
-
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two MatrixMaps are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* MatrixMap member function (over-rides the astEqual protected
-* method inherited from the astMapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two MatrixMaps are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Object (a MatrixMap).
-* that
-* Pointer to the second Object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the MatrixMaps are equivalent, zero otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstMatrixMap *that;
- AstMatrixMap *this;
- double *that_matrix;
- double *this_matrix;
- int i;
- int nin;
- int nout;
- int result;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain pointers to the two MatrixMap structures. */
- this = (AstMatrixMap *) this_object;
- that = (AstMatrixMap *) that_object;
-
-/* Check the second object is a MatrixMap. We know the first is a
- MatrixMap since we have arrived at this implementation of the virtual
- function. */
- if( astIsAMatrixMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
- nin = astGetNin( this );
- nout = astGetNout( this );
- if( astGetNout( that ) == nout && astGetNin( that ) == nin ) {
-
-/* Assume the MatrixMaps are equivalent. */
- result = 1;
-
-/* Ensure both MatrixMaps are stored in full form. */
- ExpandMatrix( this, status );
- ExpandMatrix( that, status );
-
-/* Get pointers to the arrays holding the elements of the forward matrix
- for both MatrixMaps. */
- if( astGetInvert( this ) ) {
- this_matrix = this->i_matrix;
- } else {
- this_matrix = this->f_matrix;
- }
-
- if( astGetInvert( that ) ) {
- that_matrix = that->i_matrix;
- } else {
- that_matrix = that->f_matrix;
- }
-
-/* If either of the above arrays is not available, try to get the inverse
- matrix arrays. */
- if( !this_matrix || !that_matrix ) {
- if( astGetInvert( this ) ) {
- this_matrix = this->f_matrix;
- } else {
- this_matrix = this->i_matrix;
- }
-
- if( astGetInvert( that ) ) {
- that_matrix = that->f_matrix;
- } else {
- that_matrix = that->i_matrix;
- }
- }
-
-/* If both arrays are now available compare their elements. */
- if( this_matrix && that_matrix ) {
- result = 1;
- for( i = 0; i < nin*nout; i++ ) {
- if( !EQUAL( this_matrix[ i ], that_matrix[ i ] ) ){
- result = 0;
- break;
- }
- }
- }
-
-/* Ensure the supplied MatrixMaps are stored back in compressed form. */
- CompressMatrix( this, status );
- CompressMatrix( that, status );
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static void ExpandMatrix( AstMatrixMap *this, int *status ){
-/*
-* Name:
-* ExpandMatrix
-
-* Purpose:
-* Ensure the MatrixMap is stored in full (non-compressed) form.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* void ExpandMatrix( AstMatrixMap *this, int *status )
-
-* Class Membership:
-* MatrixMap member function.
-
-* Description:
-* If the supplid MatrixMap is stored in a compressed form (i.e no
-* element values if it is a unit matrix, diagonal elements only
-* if it is a diagonal matrix), it is expanded into a full MatrixMap
-* in which all elements are stored.
-
-* Parameters:
-* this
-* A pointer to the MatrixMap to be expanded.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- double *fmat; /* Pointer to full forward matrix */
- double *imat; /* Pointer to full inverse matrix */
- int i; /* Loop count */
- int ncol; /* No. of columns in forward matrix */
- int ndiag; /* No. of diagonal elements in matrix */
- int nrow; /* No. of rows in forward matrix */
-
-/* Check the global error status. Also return if the MatrixMap
- pointer is null. */
- if ( !astOK || !this ) return;
-
-/* Return without action if the MatrixMap is already in full form. */
- if( this->form == FULL ) return;
-
-/* Get the dimensions of the forward matrix. */
- if( astGetInvert( this ) ){
- nrow = astGetNin( this );
- ncol = astGetNout( this );
- } else {
- ncol = astGetNin( this );
- nrow = astGetNout( this );
- }
-
-/* Store the number of diagonal elements. */
- if( nrow > ncol ){
- ndiag = ncol;
- } else {
- ndiag = nrow;
- }
-
-/* Allocate arrays to hold the full forward and inverse matrices. */
- fmat = (double *) astMalloc( sizeof( double )*(size_t)( nrow*ncol ) );
- imat = (double *) astMalloc( sizeof( double )*(size_t)( nrow*ncol ) );
- if( imat && fmat ){
-
-/* Fill them both with zeros. */
- for( i = 0; i < nrow*ncol; i++ ) {
- fmat[ i ] = 0.0;
- imat[ i ] = 0.0;
- }
-
-/* If a unit MatrixMap was supplied, put ones on the diagonals. */
- if( this->form == UNIT ){
- for( i = 0; i < ndiag; i++ ) {
- fmat[ i*( ncol + 1 ) ] = 1.0;
- imat[ i*( nrow + 1 ) ] = 1.0;
- }
-
-/* If a diagonal MatrixMap was supplied, copy the diagonal terms from
- the supplied MatrixMap. */
- } else if( this->form == DIAGONAL ){
- for( i = 0; i < ndiag; i++ ) {
- fmat[ i*( ncol + 1 ) ] = (this->f_matrix)[ i ];
- imat[ i*( nrow + 1 ) ] = (this->i_matrix)[ i ];
- }
- }
-
-/* Free any existing arrays in the MatrixMap and store the new ones. */
- (void) astFree( (void *) this->f_matrix );
- (void) astFree( (void *) this->i_matrix );
-
- this->f_matrix = fmat;
- this->i_matrix = imat;
-
-/* Update the storage form. */
- this->form = FULL;
-
-/* If either of the new matrices could not be allocated, ensure that
- both have been freed. */
- } else {
- fmat = (double *) astFree( (void *) fmat );
- imat = (double *) astFree( (void *) imat );
- }
-
- return;
-
-}
-
-static int FindString( int n, const char *list[], const char *test,
- const char *text, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* FindString
-
-* Purpose:
-* Find a given string within an array of character strings.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "matrix.h"
-* int FindString( int n, const char *list[], const char *test,
-* const char *text, const char *method, const char *class, int *status )
-
-* Class Membership:
-* MatrixMap method.
-
-* Description:
-* This function identifies a supplied string within a supplied
-* array of valid strings, and returns the index of the string within
-* the array. The test option may not be abbreviated, but case is
-* insignificant.
-
-* Parameters:
-* n
-* The number of strings in the array pointed to be "list".
-* list
-* A pointer to an array of legal character strings.
-* test
-* A candidate string.
-* text
-* A string giving a description of the object, parameter,
-* attribute, etc, to which the test value refers.
-* This is only for use in constructing error messages. It should
-* start with a lower case letter.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The index of the identified string within the supplied array, starting
-* at zero.
-
-* Notes:
-* - A value of -1 is returned if an error has already occurred, or
-* if this function should fail for any reason (for instance if the
-* supplied option is not specified in the supplied list).
-
-*/
-
-/* Local Variables: */
- int ret; /* The returned index */
-
-/* Check global status. */
- if( !astOK ) return -1;
-
-/* Compare the test string with each element of the supplied list. Leave
- the loop when a match is found. */
- for( ret = 0; ret < n; ret++ ) {
- if( !Ustrcmp( test, list[ ret ], status ) ) break;
- }
-
-/* Report an error if the supplied test string does not match any element
- in the supplied list. */
- if( ret >= n ) {
- astError( AST__RDERR, "%s(%s): Illegal value '%s' supplied for %s.", status,
- method, class, test, text );
- ret = -1;
- }
-
-/* Return the answer. */
- return ret;
-}
-
-static int GetIsLinear( AstMapping *this_mapping, int *status ){
-/*
-* Name:
-* GetIsLinear
-
-* Purpose:
-* Return the value of the IsLinear attribute for a MatrixMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void GetIsLinear( AstMapping *this, int *status )
-
-* Class Membership:
-* MatrixMap member function (over-rides the protected astGetIsLinear
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns the value of the IsLinear attribute for a
-* Frame, which is always one.
-
-* Parameters:
-* this
-* Pointer to the MatrixMap.
-* status
-* Pointer to the inherited status variable.
-*/
- return 1;
-}
-
-static int Ustrcmp( const char *a, const char *b, int *status ){
-/*
-* Name:
-* Ustrncmp
-
-* Purpose:
-* A case blind version of strcmp.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* int Ustrcmp( const char *a, const char *b )
-
-* Class Membership:
-* MatrixMap member function.
-
-* Description:
-* Returns 0 if there are no differences between the two strings, and 1
-* otherwise. Comparisons are case blind.
-
-* Parameters:
-* a
-* Pointer to first string.
-* b
-* Pointer to second string.
-
-* Returned Value:
-* Zero if the strings match, otherwise one.
-
-* Notes:
-* - This function does not consider the sign of the difference between
-* the two strings, whereas "strcmp" does.
-* - This function attempts to execute even if an error has occurred.
-
-*/
-
-/* Local Variables: */
- const char *aa; /* Pointer to next "a" character */
- const char *bb; /* Pointer to next "b" character */
- int ret; /* Returned value */
-
-/* Initialise the returned value to indicate that the strings match. */
- ret = 0;
-
-/* Initialise pointers to the start of each string. */
- aa = a;
- bb = b;
-
-/* Loop round each character. */
- while( 1 ){
-
-/* We leave the loop if either of the strings has been exhausted. */
- if( !(*aa ) || !(*bb) ){
-
-/* If one of the strings has not been exhausted, indicate that the
- strings are different. */
- if( *aa || *bb ) ret = 1;
-
-/* Break out of the loop. */
- break;
-
-/* If neither string has been exhausted, convert the next characters to
- upper case and compare them, incrementing the pointers to the next
- characters at the same time. If they are different, break out of the
- loop. */
- } else {
-
- if( toupper( (int) *(aa++) ) != toupper( (int) *(bb++) ) ){
- ret = 1;
- break;
- }
-
- }
-
- }
-
-/* Return the result. */
- return ret;
-
-}
-
-void astInitMatrixMapVtab_( AstMatrixMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitMatrixMapVtab
-
-* Purpose:
-* Initialise a virtual function table for a MatrixMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* void astInitMatrixMapVtab( AstMatrixMapVtab *vtab, const char *name )
-
-* Class Membership:
-* MatrixMap vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the MatrixMap class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAMatrixMap) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
- vtab->MtrRot = MtrRot;
- vtab->MtrMult = MtrMult;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
- parent_mapsplit = mapping->MapSplit;
- mapping->MapSplit = MapSplit;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- object->Equal = Equal;
- mapping->GetIsLinear = GetIsLinear;
- mapping->GetTranForward = GetTranForward;
- mapping->GetTranInverse = GetTranInverse;
- mapping->MapMerge = MapMerge;
- mapping->Rate = Rate;
-
-/* Declare the destructor and copy constructor. */
- astSetDelete( (AstObjectVtab *) vtab, Delete );
- astSetCopy( (AstObjectVtab *) vtab, Copy );
-
-/* Declare the class dump function. */
- astSetDump( vtab, Dump, "MatrixMap", "Matrix transformation" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-
-static double *InvertMatrix( int form, int nrow, int ncol, double *matrix, int *status ){
-/*
-* Name:
-* InvertMatrix
-
-* Purpose:
-* Invert a suplied matrix.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* double *InvertMatrix( int form, int nrow, int ncol, double *matrix, int *status )
-
-* Class Membership:
-* MatrixMap member function.
-
-* Description:
-* This function returns a pointer to a matrix holding the inverse of
-* the supplied matrix, or a NULL pointer if the inverse is not defined.
-* The memory to store the inverse matrix is allocated internally, and
-* should be freed using astFree when no longer required.
-*
-* The correspondence between a full matrix and its inverse is only
-* unique if the matrix is square, and so a NULL pointer is returned if
-* the supplied matrix is not square.
-
-* Parameters:
-* form
-* The form of the MatrixMap; UNIT, DIAGONAL or FULL.
-* nrow
-* Number of rows in the supplied matrix.
-* ncol
-* Number of columns in the supplied matrix.
-* matrix
-* A pointer to the input matrix. Elements should be stored in row
-* order (i.e. (row 1,column 1 ), (row 1,column 2 )... (row 2,column 1),
-* etc).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output matrix.
-
-* Notes:
-* - A NULL pointer is returned if a unit matrix is supplied.
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - No error is reported if the inverse is not defined.
-*/
-
-/* Local Variables: */
- double det; /* Determinant of supplied matrix */
- double mval; /* Matrix element value */
- double *out; /* Pointer to returned inverse matrix */
- double *vector; /* Pointer to vector used by palSlaDmat */
- int i; /* Matrix element number */
- int *iw; /* Pointer to workspace used by palSlaDmat */
- int nel; /* No. of elements in square matrix */
- int ndiag; /* No. of diagonal elements */
- int ok; /* Zero if any bad matrix values found */
- int sing; /* Zero if matrix is not singular */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Return a NULL pointer if the input matrix is NULL. */
- if( !matrix ) return NULL;
-
-/* If a unit matrix map has been supplied, return NULL. */
- if( form == UNIT ){
- return NULL;
-
-/* If a diagonal matrix has been supplied, allocate an array to hold
- the diagonal terms of the inverse matrix. Store the reciprocal
- of the input matrix diagonal terms in it. If any of the input diagonal
- terms are zero or BAD, set the associated elements of the inverse matrix
- BAD. */
- } else if( form == DIAGONAL ){
- if( nrow > ncol ) {
- ndiag = ncol;
- } else {
- ndiag = nrow;
- }
-
- out = (double *) astMalloc( sizeof( double )*(size_t)ndiag );
-
- if( out ) {
- for( i = 0; i < ndiag; i++ ) {
- mval = matrix[ i ];
- if( mval != 0.0 && mval != AST__BAD ){
- out[ i ] = 1.0/mval;
- } else {
- out[ i ] = AST__BAD;
- }
- }
- }
-
-/* If a full matrix has been supplied, initialise the returned pointer. */
- } else {
- out = NULL;
-
-/* Check that the matrix is square. */
- if( nrow == ncol ){
-
-/* Find the number of elements in the matrix. */
- nel = nrow*ncol;
-
-/* See if there are any bad values in the matrix. */
- ok = 1;
- for ( i=0; i<nel; i++ ) {
- if ( matrix[i] == AST__BAD ) {
- ok = 0;
- break;
- }
- }
-
-/* Only continue if there are no bad matrix values. */
- if( ok ) {
-
-/* Take a copy of the supplied matrix */
- out = (double *) astStore( NULL, (void *) matrix,
- astSizeOf( (void *) matrix ) );
-
-/* The SLALIB function which inverts the matrix also applies the inverse
- matrix to a vector. We are not interested in the vector in this
- instance, but we still have to provide one for SLALIB to use. Allocate
- memory for the vector. */
- vector = (double *) astMalloc( sizeof(double)*(size_t) nrow );
-
-/* If it was allocated succesfully, fill it with zeros. */
- if( astOK ){
- for ( i=0; i<nrow; i++ ) vector[i] = 0.0;
-
-/* Obtain work space and attempt to invert the matrix using SLALIB, then
- free the work space. */
- iw = (int *) astMalloc( sizeof(int)*(size_t) nrow );
- if( astOK ) palSlaDmat( nrow, out, vector, &det, &sing, iw );
- iw = (int *) astFree( (void *) iw );
-
- }
-
-/* If the matrix could not be inverted, free the memory used to hold the
- square matrix, and return the NULL pointer. */
- if ( !astOK || sing != 0 ){
- out = (double *) astFree( (void *) out );
- }
-
-/* Free the memory used to hold the vector. */
- vector = (double *) astFree( (void *) vector );
- }
- }
- }
-
-/* Return the pointer. */
-
- return out;
-
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a MatrixMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* MatrixMap method (over-rides the protected astMapMerge method
-* inherited from the Mapping class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated MatrixMap in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated MatrixMap with a Mapping which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated MatrixMap which is to be merged with
-* its neighbours. This should be a cloned copy of the MatrixMap
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* MatrixMap it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated MatrixMap resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstMapping **maplt; /* New mappings list pointer */
- AstMapping *map2; /* Pointer to replacement Mapping */
- AstMapping *mc[2]; /* Copies of supplied Mappings to swap */
- AstMapping *smc0; /* Simplied Mapping */
- AstMapping *smc1; /* Simplied Mapping */
- AstMatrixMap *mm; /* Pointer to supplied MatrixMap */
- AstMatrixMap *newmm; /* Pointer to replacement MatrixMap */
- const char *class1; /* Pointer to first Mapping class string */
- const char *class2; /* Pointer to second Mapping class string */
- const char *nclass; /* Pointer to neighbouring Mapping class */
- double *b; /* Pointer to scale terms */
- int *invlt; /* New invert flags list pointer */
- int do1; /* Would a backward swap make a simplification? */
- int do2; /* Would a forward swap make a simplification? */
- int i1; /* Index of first MatrixMap to merge */
- int i2; /* Index of last MatrixMap to merge */
- int i; /* Loop counter */
- int ic[2]; /* Copies of supplied invert flags to swap */
- int invert; /* Should the inverted Mapping be used? */
- int neighbour; /* Index of Mapping with which to swap */
- int nin; /* Number of input coordinates for MatrixMap */
- int nmapt; /* No. of Mappings in list */
- int nout; /* Number of output coordinates for MatrixMap */
- int nstep1; /* No. of Mappings backwards to next mergable Mapping */
- int nstep2; /* No. of Mappings forward to next mergable Mapping */
- int result; /* Result value to return */
- int swaphi; /* Can MatrixMap be swapped with higher neighbour? */
- int swaplo; /* Can MatrixMap be swapped with lower neighbour? */
- int zoom; /* Can MatrixMap be replaced by a ZoomMap? */
-
-/* Initialise. */
- result = -1;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- i1 = 0;
- i2 = 0;
- neighbour = 0;
-
-/* Get the Invert attribute for the specified mapping. */
- invert = astGetInvert( ( *map_list )[ where ] );
-
-/* Get the number of input and output axes for the MatrixMap. Swap these
- if the supplied invert flag is not the same as the Invert attribute of
- the Mapping. */
- if( ( invert && !( *invert_list )[ where ] ) ||
- ( !invert && ( *invert_list )[ where ] ) ) {
- nout = astGetNin( ( *map_list )[ where ] );
- nin = astGetNout( ( *map_list )[ where ] );
-
- } else {
- nin = astGetNin( ( *map_list )[ where ] );
- nout = astGetNout( ( *map_list )[ where ] );
- }
-
-/* First of all, see if the MatrixMap can be replaced by a simpler Mapping,
- without reference to the neighbouring Mappings in the list. */
-/* ======================================================================*/
- map2 = NULL;
- mm = (AstMatrixMap *) ( *map_list )[ where ];
-
-/* If the MatrixMap is a square unit matrix, it can be replaced by a
- UnitMap. */
- if( mm->form == UNIT && nin == nout ){
- map2 = (AstMapping *) astUnitMap( nin, "", status );
-
-/* If the MatrixMap is a square diagonal matrix with equal diagonal
- terms, then it can be replaced by a ZoomMap. */
- } else if( mm->form == DIAGONAL && nin == nout &&
- mm->f_matrix && mm->i_matrix &&
- (mm->f_matrix)[ 0 ] != AST__BAD ){
- zoom = 1;
- b = mm->f_matrix + 1;
- for( i = 1; i < nin; i++ ){
- if( !EQUAL( *b, *( b - 1 ) ) ){
- zoom = 0;
- break;
- }
- b++;
- }
-
- if( zoom ){
- if( ( *invert_list )[ where ] ){
- map2 = (AstMapping *) astZoomMap( nin, (mm->i_matrix)[ 0 ], "", status );
- } else {
- map2 = (AstMapping *) astZoomMap( nin, (mm->f_matrix)[ 0 ], "", status );
- }
- }
- }
-
-/* If the MatrixMap can be replaced, annul the MatrixMap pointer in the
- list and replace it with the new Mapping pointer, and indicate that the
- forward transformation of the returned Mapping should be used. */
- if( map2 ){
- (void) astAnnul( ( *map_list )[ where ] );
- ( *map_list )[ where ] = map2;
- ( *invert_list )[ where ] = 0;
-
-/* Return the index of the first modified element. */
- result = where;
-
-/* If the MatrixMap itself could not be simplified, see if it can be merged
- with the Mappings on either side of it in the list. */
-/*==========================================================================*/
- } else {
-
-/* Store the classes of the neighbouring Mappings in the list. */
- class1 = ( where > 0 ) ? astGetClass( ( *map_list )[ where - 1 ] ) : NULL;
- class2 = ( where < *nmap - 1 ) ? astGetClass( ( *map_list )[ where + 1 ] ) : NULL;
-
-/* In series. */
-/* ========== */
- if ( series ) {
-
-/* We first look to see if the MatrixMap can be merged with one of its
- neighbours, resulting in a reduction of one in the number of Mappings
- in the list. MatrixMaps can merge directly with another MatrixMap, a
- ZoomMap, an invertable PermMap, or a UnitMap. */
- if( class1 && ( !strcmp( class1, "MatrixMap" ) ||
- !strcmp( class1, "ZoomMap" ) ||
- !strcmp( class1, "PermMap" ) ||
- !strcmp( class1, "UnitMap" ) ) ){
- nclass = class1;
- i1 = where - 1;
- i2 = where;
-
- } else if( class2 && ( !strcmp( class2, "MatrixMap" ) ||
- !strcmp( class2, "ZoomMap" ) ||
- !strcmp( class2, "PermMap" ) ||
- !strcmp( class2, "UnitMap" ) ) ){
- nclass = class2;
- i1 = where;
- i2 = where + 1;
-
- } else {
- nclass = NULL;
- }
-
-/* Only some PermMaps can be merged with (those which have consistent
- forward and inverse mappings). If this is not one of them, set nclass
- NULL to indicate this. */
- if( nclass && !strcmp( nclass, "PermMap" ) &&
- !PermOK( ( *map_list )[ (i1==where)?i2:i1 ], status ) ) nclass = NULL;
-
-/* If the MatrixMap can merge with one of its neighbours, create the merged
- Mapping. */
- if( nclass ){
-
- if( !strcmp( nclass, "MatrixMap" ) ){
- newmm = MatMat( ( *map_list )[ i1 ], ( *map_list )[ i2 ],
- ( *invert_list )[ i1 ], ( *invert_list )[ i2 ], status );
- invert = 0;
-
- } else if( !strcmp( nclass, "ZoomMap" ) ){
- if( i1 == where ){
- newmm = MatZoom( (AstMatrixMap *)( *map_list )[ i1 ],
- (AstZoomMap *)( *map_list )[ i2 ],
- ( *invert_list )[ i1 ], ( *invert_list )[ i2 ], status );
- } else {
- newmm = MatZoom( (AstMatrixMap *)( *map_list )[ i2 ],
- (AstZoomMap *)( *map_list )[ i1 ],
- ( *invert_list )[ i2 ], ( *invert_list )[ i1 ], status );
- }
- invert = 0;
-
- } else if( !strcmp( nclass, "PermMap" ) ){
- if( i1 == where ){
- newmm = MatPerm( (AstMatrixMap *)( *map_list )[ i1 ],
- (AstPermMap *)( *map_list )[ i2 ],
- ( *invert_list )[ i1 ], ( *invert_list )[ i2 ], 1, status );
- } else {
- newmm = MatPerm( (AstMatrixMap *)( *map_list )[ i2 ],
- (AstPermMap *)( *map_list )[ i1 ],
- ( *invert_list )[ i2 ], ( *invert_list )[ i1 ], 0, status );
- }
- invert = 0;
-
- } else {
- newmm = astClone( ( *map_list )[ where ] );
- invert = ( *invert_list )[ where ];
- }
-
-/* If succesfull... */
- if( astOK ){
-
-/* Annul the first of the two Mappings, and replace it with the merged
- MatrixMap. Also set the invert flag. */
- (void) astAnnul( ( *map_list )[ i1 ] );
- ( *map_list )[ i1 ] = (AstMapping *) newmm;
- ( *invert_list )[ i1 ] = invert;
-
-/* Annul the second of the two Mappings, and shuffle down the rest of the
- list to fill the gap. */
- (void) astAnnul( ( *map_list )[ i2 ] );
- for ( i = i2 + 1; i < *nmap; i++ ) {
- ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
- ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
- }
-
-/* Clear the vacated element at the end. */
- ( *map_list )[ *nmap - 1 ] = NULL;
- ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
- modified element. */
- ( *nmap )--;
- result = i1;
-
- }
-
-/* If the MatrixMap could not merge directly with either of its neighbours,
- we consider whether it would be worthwhile to swap the MatrixMap with
- either of its neighbours. This can only be done for certain classes
- of Mapping (WinMaps and some PermMaps), and will usually require both
- Mappings to be modified (unless they are commutative). The advantage of
- swapping the order of the Mappings is that it may result in the MatrixMap
- being adjacent to a Mapping with which it can merge directly on the next
- invocation of this function, thus reducing the number of Mappings
- in the list. */
- } else {
-
-/* Set a flag if we could swap the MatrixMap with its higher neighbour. "do2"
- is returned if swapping the Mappings would simplify either of the Mappings. */
- if( where + 1 < *nmap ){
- swaphi = CanSwap( ( *map_list )[ where ],
- ( *map_list )[ where + 1 ],
- ( *invert_list )[ where ],
- ( *invert_list )[ where + 1 ], &do2, status );
- } else {
- swaphi = 0;
- do2 = 0;
- }
-
-/* If so, step through each of the Mappings which follow the MatrixMap,
- looking for a Mapping with which the MatrixMap could merge directly. Stop
- when such a Mapping is found, or if a Mapping is found with which the
- MatrixMap could definitely not swap. Note the number of Mappings which
- separate the MatrixMap from the Mapping with which it could merge (if
- any). */
- nstep2 = -1;
- if( swaphi ){
- for( i2 = where + 1; i2 < *nmap; i2++ ){
-
-/* See if we can merge with this Mapping. If so, note the number of steps
- between the two Mappings and leave the loop. */
- nclass = astGetClass( ( *map_list )[ i2 ] );
- if( !strcmp( nclass, "MatrixMap" ) ||
- !strcmp( nclass, "ZoomMap" ) ||
- ( !strcmp( nclass, "PermMap" ) && PermOK( ( *map_list )[ i2 ], status ) ) ||
- !strcmp( nclass, "UnitMap" ) ) {
- nstep2 = i2 - where - 1;
- break;
- }
-
-/* If there is no chance that we can swap with this Mapping, leave the loop
- with -1 for the number of steps to indicate that no merging is possible.
- MatrixMaps can swap with WinMaps and some permmaps. */
- if( strcmp( nclass, "WinMap" ) &&
- strcmp( nclass, "PermMap" ) ) {
- break;
- }
-
- }
-
- }
-
-/* Do the same working forward from the MatrixMap towards the start of the map
- list. */
- if( where > 0 ){
- swaplo = CanSwap( ( *map_list )[ where - 1 ],
- ( *map_list )[ where ],
- ( *invert_list )[ where - 1 ],
- ( *invert_list )[ where ], &do1, status );
- } else {
- swaplo = 0;
- do1 = 0;
- }
-
- nstep1 = -1;
- if( swaplo ){
- for( i1 = where - 1; i1 >= 0; i1-- ){
-
- nclass = astGetClass( ( *map_list )[ i1 ] );
- if( !strcmp( nclass, "MatrixMap" ) ||
- ( !strcmp( nclass, "PermMap" ) && PermOK( ( *map_list )[ i1 ], status ) ) ||
- !strcmp( nclass, "ZoomMap" ) ||
- !strcmp( nclass, "UnitMap" ) ) {
- nstep1 = where - 1 - i1;
- break;
- }
-
- if( strcmp( nclass, "WinMap" ) &&
- strcmp( nclass, "PermMap" ) ) {
- break;
- }
-
- }
-
- }
-
-/* Choose which neighbour to swap with so that the MatrixMap moves towards the
- nearest Mapping with which it can merge. */
- if( do1 || (
- nstep1 != -1 && ( nstep2 == -1 || nstep2 > nstep1 ) ) ){
- nclass = class1;
- i1 = where - 1;
- i2 = where;
- neighbour = i1;
- } else if( do2 || nstep2 != -1 ){
- nclass = class2;
- i1 = where;
- i2 = where + 1;
- neighbour = i2;
- } else {
- nclass = NULL;
- }
-
-/* If there is a target Mapping in the list with which the MatrixMap could
- merge, consider replacing the supplied Mappings with swapped Mappings to
- bring the MatrixMap closer to the target Mapping. */
- if( nclass ){
-
-/* It is possible that the neighbouring Mapping with which we are about to
- swap could also merge with the target Mapping. When the neighbouring
- Mapping is reconsidered it may well swap the pair back to put itself nearer
- the target Mapping. We need to be careful not to end up in an infinite loop
- in which the pair of neighbouring Mappings are constantly swapped backwards
- and forwards as each attempts to put itself closer to the target Mapping.
- To prevent this, we only swap the pair of Mappings if the neighbouring
- Mapping could not itself merge with the target Mapping. Check to see
- if this is the case by attempting to merge the neighbouring Mapping with
- the target Mapping. */
- map2 = astClone( (*map_list)[ neighbour ] );
- nmapt = *nmap - neighbour;
- maplt = *map_list + neighbour;
- invlt = *invert_list + neighbour;
- result = astMapMerge( map2, 0, series, &nmapt, &maplt, &invlt );
- map2 = astAnnul( map2 );
-
-/* If the above call produced a change in the Mapping list, return the
- remaining number of mappings.. */
- if( result != -1 ){
- *nmap = nmapt + neighbour;
-
-/* Otherwise, if there was no change in the mapping list... */
- } else {
- if (!strcmp( nclass, "WinMap" ) ){
- MatWin( (*map_list) + i1, (*invert_list) + i1, where - i1, status );
-
- } else if( !strcmp( nclass, "PermMap" ) ){
- MatPermSwap( (*map_list) + i1, (*invert_list) + i1, where - i1, status );
- }
-
-/* Store the index of the first modified Mapping. */
- result = i1;
- }
-
-/* If there is no Mapping available for merging, it may still be
- advantageous to swap with a neighbour because the swapped Mapping may
- be simpler than the original Mappings. For instance, a PermMap may
- strip rows of the MatrixMap leaving only a UnitMap. */
- } else if( swaphi || swaplo ) {
-
-/* Try swapping with each possible neighbour in turn. */
- for( i = 0; i < 2; i++ ) {
-
-/* Set up the class and pointers for the mappings to be swapped, first
- the lower neighbour, then the upper neighbour. */
- if( i == 0 && swaplo ){
- nclass = class1;
- i1 = where - 1;
- i2 = where;
-
- } else if( i == 1 && swaphi ){
- nclass = class2;
- i1 = where;
- i2 = where + 1;
-
- } else {
- nclass = NULL;
- }
-
-/* If we have a Mapping to swap with... */
- if( nclass ) {
-
-/* Take copies of the Mapping and Invert flag arrays so we do not change
- the supplied values. */
- mc[ 0 ] = (AstMapping *) astCopy( ( (*map_list) + i1 )[0] );
- mc[ 1 ] = (AstMapping *) astCopy( ( (*map_list) + i1 )[1] );
- ic[ 0 ] = ( (*invert_list) + i1 )[0];
- ic[ 1 ] = ( (*invert_list) + i1 )[1];
-
-/* Swap these Mappings. */
- if( !strcmp( nclass, "WinMap" ) ){
- MatWin( mc, ic, where - i1, status );
- } else if( !strcmp( nclass, "PermMap" ) ){
- MatPermSwap( mc, ic, where - i1, status );
- }
-
-/* If neither of the swapped Mappings can be simplified further, then there
- is no point in swapping the Mappings, so just annul the map copies. */
- smc0 = astSimplify( mc[0] );
- smc1 = astSimplify( mc[1] );
-
- if( astGetClass( smc0 ) == astGetClass( mc[0] ) &&
- astGetClass( smc1 ) == astGetClass( mc[1] ) ) {
-
- mc[ 0 ] = (AstMapping *) astAnnul( mc[ 0 ] );
- mc[ 1 ] = (AstMapping *) astAnnul( mc[ 1 ] );
-
-/* If one or both of the swapped Mappings could be simplified, then annul
- the supplied Mappings and return the swapped mappings, storing the index
- of the first modified Mapping. */
- } else {
- (void ) astAnnul( ( (*map_list) + i1 )[0] );
- (void ) astAnnul( ( (*map_list) + i1 )[1] );
-
- ( (*map_list) + i1 )[0] = mc[ 0 ];
- ( (*map_list) + i1 )[1] = mc[ 1 ];
-
- ( (*invert_list) + i1 )[0] = ic[ 0 ];
- ( (*invert_list) + i1 )[1] = ic[ 1 ];
-
- result = i1;
- break;
- }
-
-/* Annul the simplied Mappings */
- smc0 = astAnnul( smc0 );
- smc1 = astAnnul( smc1 );
-
- }
- }
- }
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static int *MapSplit( AstMapping *this_map, int nin, const int *in, AstMapping **map, int *status ){
-/*
-* Name:
-* MapSplit
-
-* Purpose:
-* Create a Mapping representing a subset of the inputs of an existing
-* MatrixMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status )
-
-* Class Membership:
-* MatrixMap method (over-rides the protected astMapSplit method
-* inherited from the Mapping class).
-
-* Description:
-* This function creates a new Mapping by picking specified inputs from
-* an existing MatrixMap. This is only possible if the specified inputs
-* correspond to some subset of the MatrixMap outputs. That is, there
-* must exist a subset of the MatrixMap outputs for which each output
-* depends only on the selected MatrixMap inputs, and not on any of the
-* inputs which have not been selected. In addition, outputs that are
-* not in this subset must not depend on any selected inputs. If these
-* conditions are not met by the supplied MatrixMap, then a NULL Mapping
-* is returned.
-
-* Parameters:
-* this
-* Pointer to the MatrixMap to be split (the MatrixMap is not actually
-* modified by this function).
-* nin
-* The number of inputs to pick from "this".
-* in
-* Pointer to an array of indices (zero based) for the inputs which
-* are to be picked. This array should have "nin" elements. If "Nin"
-* is the number of inputs of the supplied MatrixMap, then each element
-* should have a value in the range zero to Nin-1.
-* map
-* Address of a location at which to return a pointer to the new
-* Mapping. This Mapping will have "nin" inputs (the number of
-* outputs may be different to "nin"). A NULL pointer will be
-* returned if the supplied MatrixMap has no subset of outputs which
-* depend only on the selected inputs.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated array of ints. The number of
-* elements in this array will equal the number of outputs for the
-* returned Mapping. Each element will hold the index of the
-* corresponding output in the supplied MatrixMap. The array should be
-* freed using astFree when no longer needed. A NULL pointer will
-* be returned if no output Mapping can be created.
-
-* Notes:
-* - If this function is invoked with the global error status set,
-* or if it should fail for any reason, then NULL values will be
-* returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
- AstMatrixMap *this; /* Pointer to MatrixMap structure */
- double *mat; /* Pointer to matrix for supplied MatrixMap */
- double *pmat; /* Pointer to row start in returned matrix */
- double *prow; /* Pointer to row start in supplied matrix */
- double *rmat; /* Pointer to matrix for returned MatrixMap */
- double el; /* Next element value in supplied matrix */
- int *result; /* Pointer to returned array */
- int i; /* Loop count */
- int icol; /* Column index within supplied MatrixMap */
- int iel; /* Index of next element from the input matrix */
- int irow; /* Row index within supplied MatrixMap */
- int isel; /* Does output depend on any selected inputs? */
- int ncol; /* Number of columns (inputs) in supplied MatrixMap */
- int nout; /* Number of outputs in returned MatrixMap */
- int nrow; /* Number of rows (outputs) in supplied MatrixMap */
- int ok; /* Are input indices OK? */
- int sel; /* Does any output depend on selected inputs? */
- int unsel; /* Does any output depend on unselected inputs? */
-
-/* Initialise */
- result = NULL;
- *map = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Invoke the parent astMapSplit method to see if it can do the job. */
- result = (*parent_mapsplit)( this_map, nin, in, map, status );
-
-/* If not, we provide a special implementation here. */
- if( !result ) {
-
-/* Get a pointer to the MatrixMap structure. */
- this = (AstMatrixMap *) this_map;
-
-/* Get the number of inputs and outputs. */
- ncol = astGetNin( this );
- nrow = astGetNout( this );
-
-/* Check the supplied input indices are usable. */
- ok = 1;
- for( i = 0; i < nin; i++ ) {
- if( in[ i ] < 0 || in[ i ] >= ncol ) {
- ok = 0;
- break;
- }
- }
-
- if( ok ) {
-
-/* Ensure the MatrixMap is stored in full form. */
- ExpandMatrix( this, status );
-
-/* Allocate the largest array that could be necessary to hold the
- returned array of Mapping outputs. */
- result = astMalloc( sizeof(int)*(size_t) nrow );
-
-/* Allocate the largest array that could be necessary to hold the
- matrix representing the returned MatrixMap. */
- rmat = astMalloc( sizeof(double)*(size_t) (nrow*ncol) );
-
-/* Get the matrix which defines the current forward transformation. This
- takes into account whether the MatrixMap has been inverted or not. */
- if( astGetInvert( this ) ) {
- mat = this->i_matrix;
- } else {
- mat = this->f_matrix;
- }
-
-/* We cannot create the require Mapping if the matrix is undefined. */
- if( !mat || !astOK ) {
- ok = 0;
- nout = 0;
-
-/* Otherwise, loop round all the rows in the matrix. */
- } else {
- nout = 0;
- pmat = rmat;
- iel = 0;
- for( irow = 0; irow < nrow; irow++ ) {
-
-/* Indicate that this output (i.e. row of the matrix) depends on neither
- selected nor unselected inputs as yet. */
- sel = 0;
- unsel = 0;
-
-/* Save a pointer to the first element of this row in the MatrixMap
- matrix. */
- prow = mat + iel;
-
-/* Loop round all the elements in the current row of the matrix. */
- for( icol = 0; icol < ncol; icol++ ) {
-
-/* If this element is non-zero and non-bad, then output "irow" depends on
- input "icol". */
- el = mat[ iel++ ];
- if( el != 0.0 && el != AST__BAD ) {
-
-/* Is input "icol" one of the selected inputs? */
- isel = 0;
- for( i = 0; i < nin; i++ ) {
- if( in[ i ] == icol ) {
- isel = 1;
- break;
- }
- }
-
-/* If so, note that this output depends on selected inputs. Otherwise note
- it depends on unselected inputs. */
- if( isel ) {
- sel = 1;
- } else {
- unsel = 1;
- }
- }
- }
-
-/* If this output depends only on selected inputs, we can include it in
- the returned Mapping.*/
- if( sel && !unsel ) {
-
-/* Store the index of the output within the original MatrixMap. */
- result[ nout ] = irow;
-
-/* Increment the number of outputs in the returned Mapping. */
- nout++;
-
-/* Copy the elements of the current matrix row which correspond to the
- selected inputs into the new matrix. */
- for( i = 0; i < nin; i++ ) *(pmat++) = prow[ in[ i ] ];
- }
-
-/* If this output depends on a selected input, but also depends on an
- unselected input, we cannot split the MatrixMap. */
- if( sel && unsel ) {
- ok = 0;
- break;
- }
- }
- }
-
-/* If the returned Mapping can be created, create it. */
- if( ok && nout > 0 ) {
- *map = (AstMapping *) astMatrixMap( nin, nout, 0, rmat, "", status );
-
-/* Otherwise, free the returned array. */
- } else {
- result = astFree( result );
- }
-
-/* Free resources. */
- rmat = astFree( rmat );
-
-/* Re-compress the supplied MatrixMap. */
- CompressMatrix( this, status );
- }
- }
-
-/* Free returned resources if an error has occurred. */
- if( !astOK ) {
- result = astFree( result );
- *map = astAnnul( *map );
- }
-
-/* Return the list of output indices. */
- return result;
-}
-
-static AstMatrixMap *MatMat( AstMapping *map1, AstMapping *map2, int inv1,
- int inv2, int *status ){
-/*
-* Name:
-* MatMat
-
-* Purpose:
-* Create a merged MatrixMap from two supplied MatrixMaps.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* AstMatrixMap *MatMat( AstMapping *map1, AstMapping *map2, int inv1,
-* int inv2, int *status )
-
-* Class Membership:
-* MatrixMap member function
-
-* Description:
-* This function creates a new MatrixMap which performs a mapping
-* equivalent to applying the two supplied MatrixMaps in series, in the
-* directions specified by the "invert" flags (the Invert attributes of
-* the supplied MatrixMaps are ignored).
-
-* Parameters:
-* map1
-* A pointer to the MatrixMap to apply first.
-* map2
-* A pointer to the MatrixMap to apply second.
-* inv1
-* The invert flag to use with map1. A value of zero causes the forward
-* mapping to be used, and a non-zero value causes the inverse
-* mapping to be used.
-* inv2
-* The invert flag to use with map2.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the new MatrixMap.
-
-* Notes:
-* - The forward direction of the returned MatrixMap is equivalent to the
-* combined effect of the two supplied MatrixMap, operating in the
-* directions specified by "inv1" and "inv2".
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstMatrixMap *result; /* Pointer to output MatrixMap */
- int invert[ 2 ]; /* Original invert flags */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the returned pointer. */
- result = NULL;
-
-/* Temporarily set their Invert attributes to the supplied values. */
- invert[ 0 ] = astGetInvert( map1 );
- astSetInvert( map1, inv1 );
-
- invert[ 1 ] = astGetInvert( map2 );
- astSetInvert( map2, inv2 );
-
-/* Create a new MatrixMap by multiplying them together. */
- result = astMtrMult( (AstMatrixMap *) map1, (AstMatrixMap *) map2 );
-
-/* Re-instate the original settings of the Invert attributes for the
- supplied MatrixMaps. */
- astSetInvert( map1, invert[ 0 ] );
- astSetInvert( map2, invert[ 1 ] );
-
-/* If an error has occurred, annull the returned MatrixMap. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output MatrixMap. */
- return result;
-}
-
-static AstMatrixMap *MatPerm( AstMatrixMap *mm, AstPermMap *pm, int minv,
- int pinv, int mat1, int *status ){
-/*
-* Name:
-* MatPerm
-
-* Purpose:
-* Create a MatrixMap by merging a MatrixMap and a PermMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* AstMatrixMap *MatPerm( AstMatrixMap *mm, AstPermMap *pm, int minv,
-* int pinv, int mat1, int *status )
-
-* Class Membership:
-* MatrixMap member function
-
-* Description:
-* This function creates a new MatrixMap which performs a mapping
-* equivalent to applying the two supplied Mappings in series in the
-* directions specified by the "invert" flags (the Invert attributes of
-* the supplied MatrixMaps are ignored).
-
-* Parameters:
-* mm
-* A pointer to the MatrixMap.
-* pm
-* A pointer to the PermMap.
-* minv
-* The invert flag to use with mm. A value of zero causes the forward
-* mapping to be used, and a non-zero value causes the inverse
-* mapping to be used.
-* pinv
-* The invert flag to use with pm.
-* mat1
-* If non-zero, then "mm" is applied first followed by "pm". Otherwise,
-* "pm" is applied first followed by "mm".
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the new MatrixMap.
-
-* Notes:
-* - The forward direction of the returned MatrixMap is equivalent to the
-* combined effect of the two supplied Mappings, operating in the
-* directions specified by "pinv" and "minv".
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstMatrixMap *mm2; /* Pointer to an intermediate MatrixMap */
- AstMatrixMap *result; /* Pointer to output MatrixMap */
- AstPointSet *pset1; /* Pointer to a PointSet holding unpermuted unit vectors */
- AstPointSet *pset2; /* Pointer to a PointSet holding permuted unit vectors */
- double *matrix; /* Pointer to a matrix representing the PermMap */
- double *p; /* Pointer to next matrix element */
- double **ptr1; /* Pointer to the data in pset1 */
- double **ptr2; /* Pointer to the data in pset2 */
- int i; /* Axis index */
- int j; /* Point index */
- int nax; /* No. of axes in the PermMap */
- int old_minv; /* Original setting of MatrixMap Invert attribute */
- int old_pinv; /* Original setting of PermMap Invert attribute */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the returned pointer. */
- result = NULL;
-
-/* Temporarily set the Invert attributes of both Mappings to the supplied
- values. */
- old_minv = astGetInvert( mm );
- astSetInvert( mm, minv );
-
- old_pinv = astGetInvert( pm );
- astSetInvert( pm, pinv );
-
-/* Get the number of axes in the PermMap. The PermMap will have the same
- number of input and output axes because a check has already been made on
- it to ensure that this is so (in function PermOK). */
- nax = astGetNin( pm );
-
-/* We first represent the PermMap as a MatrixMap containing elements with
- values zero or one. Each row of this matrix is obtained by transforming a
- unit vector along each axis using the inverse PermMap. Allocate memory
- to hold the matrix array, and create a PointSet holding the unit
- vectors. */
- matrix = (double *) astMalloc( sizeof( double )*(size_t)( nax*nax ) );
-
- pset1 = astPointSet( nax, nax, "", status );
- ptr1 = astGetPoints( pset1 );
-
- pset2 = astPointSet( nax, nax, "", status );
- ptr2 = astGetPoints( pset2 );
-
- if( astOK ){
- for( i = 0; i < nax; i++ ){
- for( j = 0; j < nax; j++ ) ptr1[ i ][ j ] = 0.0;
- ptr1[ i ][ i ] = 1.0;
- }
-
-/* Transform these unit vectors using the inverse PermMap. */
- (void) astTransform( pm, pset1, 0, pset2 );
-
-/* Copy the transformed vectors into the matrix array. */
- p = matrix;
- for( j = 0; j < nax; j++ ){
- for( i = 0; i < nax; i++ ) *(p++) = ptr2[ i ][ j ];
- }
-
-/* Create a MatrixMap holding this array. */
- mm2 = astMatrixMap( nax, nax, 0, matrix, "", status );
-
-/* Create a new MatrixMap equal to the product of the supplied MatrixMap
- and the MatrixMap just created from the PermMap. */
- if( mat1 ){
- result = astMtrMult( mm, mm2 );
- } else {
- result = astMtrMult( mm2, mm );
- }
-
-/* Free everything. */
- mm2 = astAnnul( mm2 ) ;
- }
-
- pset2 = astAnnul( pset2 );
- pset1 = astAnnul( pset1 );
- matrix = (double *) astFree( (void *) matrix );
-
-/* Re-instate the original settings of the Invert attribute for the
- supplied Mappings. */
- astSetInvert( mm, old_minv );
- astSetInvert( pm, old_pinv );
-
-/* If an error has occurred, annull the returned MatrixMap. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output MatrixMap. */
- return result;
-}
-
-static void MatPermSwap( AstMapping **maps, int *inverts, int imm, int *status ){
-/*
-* Name:
-* MatPermSwap
-
-* Purpose:
-* Swap a PermMap and a MatrixMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* void MatPermSwap( AstMapping **maps, int *inverts, int imm )
-
-* Class Membership:
-* WinMap member function
-
-* Description:
-* A list of two Mappings is supplied containing a PermMap and a
-* MatrixMap. These Mappings are annulled, and replaced with
-* another pair of Mappings consisting of a PermMap and a MatrixMap
-* in the opposite order. These Mappings are chosen so that their
-* combined effect is the same as the original pair of Mappings.
-
-* Parameters:
-* maps
-* A pointer to an array of two Mapping pointers.
-* inverts
-* A pointer to an array of two invert flags.
-* imm
-* The index within "maps" of the MatrixMap.
-
-* Notes:
-* - There are restictions on the sorts of PermMaps which can be
-* swapped with a MatrixMap -- see function CanSwap. It is assumed
-* that the supplied MatrixMap and PermMap satisfy these requirements.
-
-*/
-
-/* Local Variables: */
- AstMatrixMap *mm; /* Pointer to the supplied MatrixMap */
- AstMatrixMap *mmnew; /* Pointer to new MatrixMap */
- AstMatrixMap *smmnew; /* Pointer to new simplified MatrixMap */
- AstPermMap *pm; /* Pointer to the supplied PermMap */
- AstPermMap *pmnew; /* Pointer to new PermMap */
- AstPermMap *spmnew; /* Pointer to new simplified PermMap */
- double *consts; /* Pointer to constants array */
- double *matrix; /* Supplied array of matrix elements */
- double *out_el; /* Pointer to next element of new MatrixMap */
- double *out_mat; /* Matrix elements for new MatrixMap */
- double c; /* Constant */
- double matel; /* Matrix element */
- int *inperm; /* Pointer to input axis permutation array */
- int *outperm; /* Pointer to output axis permutation array */
- int col; /* Index of matrix column */
- int i; /* Axis count */
- int k; /* Axis count */
- int nin; /* No. of axes in supplied PermMap */
- int nout; /* No. of axes in returned PermMap */
- int old_pinv; /* Invert value for the supplied PermMap */
- int row; /* Index of matrix row */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- mmnew = NULL;
- pmnew = NULL;
-
-/* Store pointers to the supplied PermMap and the MatrixMap. */
- pm = (AstPermMap *) maps[ 1 - imm ];
- mm = (AstMatrixMap *) maps[ imm ];
-
-/* Temporarily set the Invert attribute of the supplied PermMap to the
- supplied value. */
- old_pinv = astGetInvert( pm );
- astSetInvert( pm, inverts[ 1 - imm ] );
-
-/* Ensure the MatrixMap is stored in full form. */
- ExpandMatrix( mm, status );
-
-/* Store a pointer to the required array of matrix elements. */
- if( inverts[ imm ] ) {
- matrix = mm->i_matrix;
- } else {
- matrix = mm->f_matrix;
- }
-
-/* Get the number of input and output axes of the PermMap. */
- nin = astGetNin( pm );
- nout = astGetNout( pm );
-
-/* Allocate memory to hold the matrix elements for the swapped MatrixMap.
- The number of rows and olumns in the new matrix must equal the number of
- input or output axes for the PermMap, depending on whether the PermMap
- or MatrixMap is applied first. */
- if( imm == 0 ) {
- out_mat = (double *) astMalloc( sizeof( double )*(size_t)( nout*nout ) );
- } else {
- out_mat = (double *) astMalloc( sizeof( double )*(size_t)( nin*nin ) );
- }
-
-/* We need to know the axis permutation arrays and constants array for
- the PermMap. */
- PermGet( pm, &outperm, &inperm, &consts, status );
- if( astOK ) {
-
-/* First deal with cases where the MatrixMap is applied first. */
- if( imm == 0 ) {
-
-/* Consider each output axis of the PermMap. */
- for( i = 0; i < nout; i++ ) {
-
-/* If this output is connected to one of the input axes... */
- row = outperm[ i ];
- if( row >= 0 && row < nin ) {
-
-/* Permute the row of the supplied matrix which feeds the corresponding
- PermMap input axis (i.e. axis outperm[k] ) using the forward PermMap.
- Store zeros for any output axes which are assigned constants. This forms
- row i of the new MatrixMap. */
- out_el = out_mat + nout*i;
- for( k = 0; k < nout; k++ ){
- col = outperm[ k ];
- if( col >= 0 && col < nin ) {
- *(out_el++) = *( matrix + nin*row + col );
- } else {
- *(out_el++) = 0.0;
- }
- }
-
-/* If this output is asigned a constant value, use a "diagonal" vector for
- row i of the new MatrixMap (i.e. all zeros except for a 1.0 in column
- i ). */
- } else {
- out_el = out_mat + nout*i;
- for( k = 0; k < nout; k++ ) {
- if( k != i ) {
- *(out_el++) = 0.0;
- } else {
- *(out_el++) = 1.0;
- }
- }
- }
- }
-
-/* Create the new MatrixMap. */
- mmnew = astMatrixMap( nout, nout, 0, out_mat, "", status );
-
-/* Any PermMap inputs which are assigned a constant value need to be
- changed now, since they will no longer be scaled by the inverse
- MatrixMap. CanSwap ensures that the inverse MatrixMap produces a
- simple scaling for constant axes, so we change the PermMap constant
- to be the constant AFTER scaling by the inverse MatrixMap.
-
- Consider each input axis of the PermMap. */
- for( i = 0; i < nin; i++ ) {
-
-/* If this input is assigned a constant value... */
- if( inperm[ i ] < 0 ) {
-
-/* Divide the supplied constant value by the corresponding diagonal term
- in the supplied MatrixMap. */
- c = consts[ -inperm[ i ] - 1 ];
- if( c != AST__BAD ) {
- matel = matrix[ i*( nin + 1 ) ];
- if( matel != 0.0 && matel != AST__BAD ) {
- consts[ -inperm[ i ] - 1 ] /= matel;
- } else {
- consts[ -inperm[ i ] - 1 ] = AST__BAD;
- }
- }
- }
- }
-
-/* Now deal with cases where the PermMap is applied first. */
- } else {
-
-/* Consider each input axis of the PermMap. */
- for( i = 0; i < nin; i++ ) {
-
-/* If this input is connected to one of the output axes... */
- row = inperm[ i ];
- if( row >= 0 && row < nout ) {
-
-/* Permute the row of the supplied matrix which feeds the corresponding
- PermMap output axis (i.e. axis inperm[k] ) using the inverse PermMap.
- Store zeros for any input axes which are assigned constants. This forms
- row i of the new MatrixMap. */
- out_el = out_mat + nin*i;
- for( k = 0; k < nin; k++ ){
- col = inperm[ k ];
- if( col >= 0 && col < nout ) {
- *(out_el++) = *( matrix + nout*row + col );
- } else {
- *(out_el++) = 0.0;
- }
- }
-
-/* If this input is asigned a constant value, use a "diagonal" vector for
- row i of the new MatrixMap (i.e. all zeros except for a 1.0 in column
- i ). */
- } else {
- out_el = out_mat + nin*i;
- for( k = 0; k < nin; k++ ) {
- if( k != i ) {
- *(out_el++) = 0.0;
- } else {
- *(out_el++) = 1.0;
- }
- }
- }
- }
-
-/* Create the new MatrixMap. */
- mmnew = astMatrixMap( nin, nin, 0, out_mat, "", status );
-
-/* Any PermMap outputs which are assigned a constant value need to be
- changed now, since they will no longer be scaled by the forward
- MatrixMap. CanSwap ensures that the forward MatrixMap produces a
- simple scaling for constant axes, so we change the PermMap constant
- to be the constant AFTER scaling by the forward MatrixMap.
-
- Consider each output axis of the PermMap. */
- for( i = 0; i < nout; i++ ) {
-
-/* If this output is assigned a constant value... */
- if( outperm[ i ] < 0 ) {
-
-/* Multiple the supplied constant value by the corresponding diagonal term in
- the supplied MatrixMap. */
- c = consts[ -outperm[ i ] - 1 ];
- if( c != AST__BAD ) {
- matel = matrix[ i*( nout + 1 ) ];
- if( matel != AST__BAD ) {
- consts[ -outperm[ i ] - 1 ] *= matel;
- } else {
- consts[ -outperm[ i ] - 1 ] = AST__BAD;
- }
- }
- }
- }
- }
-
-/* Create a new PermMap (since the constants may have changed). */
- pmnew = astPermMap( nin, inperm, nout, outperm, consts, "", status );
-
-/* Free the axis permutation and constants arrays. */
- outperm = (int *) astFree( (void *) outperm );
- inperm = (int *) astFree( (void *) inperm );
- consts = (double *) astFree( (void *) consts );
- }
-
-/* Free the memory used to hold the new matrix elements. */
- out_mat = (double *) astFree( (void *) out_mat );
-
-/* Ensure the supplied MatrixMap is stored back in compressed form. */
- CompressMatrix( mm, status );
-
-/* Re-instate the original value of the Invert attribute of the supplied
- PermMap. */
- astSetInvert( pm, old_pinv );
-
- if( astOK ) {
-
-/* Annul the supplied PermMap. */
- (void) astAnnul( pm );
-
-/* Simplify the returned Mappings. */
- spmnew = astSimplify( pmnew );
- pmnew = astAnnul( pmnew );
-
- smmnew = astSimplify( mmnew );
- mmnew = astAnnul( mmnew );
-
-/* Store a pointer to the new PermMap in place of the supplied MatrixMap. This
- PermMap should be used in its forward direction. */
- maps[ imm ] = (AstMapping *) spmnew;
- inverts[ imm ] = astGetInvert( spmnew );
-
-/* Annul the supplied matrixMap. */
- (void) astAnnul( mm );
-
-/* Store a pointer to the new MatrixMap. This MatrixMap should be used in
- its forward direction. */
- maps[ 1 - imm ] = (AstMapping *) smmnew;
- inverts[ 1 - imm ] = astGetInvert( smmnew );
- }
-
-/* Return. */
- return;
-}
-
-static void MatWin( AstMapping **maps, int *inverts, int imm, int *status ){
-/*
-* Name:
-* MatWin
-
-* Purpose:
-* Swap a WinMap and a MatrixMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* void MatWin( AstMapping **maps, int *inverts, int imm, int *status )
-
-* Class Membership:
-* WinMap member function
-
-* Description:
-* A list of two Mappings is supplied containing a WinMap and a
-* MatrixMap. These Mappings are annulled, and replaced with
-* another pair of Mappings consisting of a WinMap and a MatrixMap
-* in the opposite order. These Mappings are chosen so that their
-* combined effect is the same as the original pair of Mappings.
-* The scale factors in the returned WinMap are always unity (i.e.
-* the differences in scaling get absorbed into the returned
-* MatrixMap).
-
-* Parameters:
-* maps
-* A pointer to an array of two Mapping pointers.
-* inverts
-* A pointer to an array of two invert flags.
-* imm
-* The index within "maps" of the MatrixMap.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstMatrixMap *m1; /* Pointer to Diagonal scale factor MatrixMap */
- AstMatrixMap *m2; /* Pointer to returned MatrixMap */
- AstMatrixMap *sm2; /* Pointer to simplified returned MatrixMap */
- AstMatrixMap *mm; /* Pointer to the supplied MatrixMap */
- AstPointSet *pset1; /* Shift terms from supplied WinMap */
- AstPointSet *pset2; /* Shift terms for returned WinMap */
- AstWinMap *w1; /* Pointer to the returned WinMap */
- AstWinMap *sw1; /* Pointer to the simplified returned WinMap */
- AstWinMap *wm; /* Pointer to the supplied WinMap */
- double **ptr1; /* Pointer to pset1 data */
- double **ptr2; /* Pointer to pset2 data */
- double *a; /* Array of shift terms from supplied WinMap */
- double *aa; /* Pointer to next shift term */
- double *b; /* Array of scale terms from supplied WinMap */
- double *bb; /* Pointer to next scale term */
- int i; /* Axis count */
- int nin; /* No. of axes in supplied WinMap */
- int nout; /* No. of axes in returned WinMap */
- int old_minv; /* Invert value for the supplied MatrixMap */
- int old_winv; /* Invert value for the supplied WinMap */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Store pointers to the supplied WinMap and the MatrixMap. */
- wm = (AstWinMap *) maps[ 1 - imm ];
- mm = (AstMatrixMap *) maps[ imm ];
-
-/* Temporarily set the Invert attribute of the supplied Mappings to the
- supplied values. */
- old_winv = astGetInvert( wm );
- astSetInvert( wm, inverts[ 1 - imm ] );
-
- old_minv = astGetInvert( mm );
- astSetInvert( mm, inverts[ imm ] );
-
-/* Get copies of the shift and scale terms used by the WinMap. This
- also returns the number of axes in the WinMap. */
- nin = astWinTerms( wm, &a, &b );
-
-/* Create a diagonal MatrixMap holding the scale factors from the
- supplied WinMap. */
- m1 = astMatrixMap( nin, nin, 1, b, "", status );
-
-/* Create a PointSet holding a single position given by the shift terms
- in the supplied WinMap. */
- pset1 = astPointSet( 1, nin, "", status );
- ptr1 = astGetPoints( pset1 );
- if( astOK ){
- aa = a;
- for( i = 0; i < nin; i++ ) ptr1[ i ][ 0 ] = *(aa++);
- }
-
-/* First deal with cases when the WinMap is applied first, followed by
- the MatrixMap. */
- if( imm == 1 ){
-
-/* Multiply the diagonal matrix holding the WinMap scale factors by the
- supplied matrix. The resulting MatrixMap is the one to return in the
- map list. */
- m2 = astMtrMult( m1, mm );
-
-/* Transform the position given by the shift terms from the supplied
- WinMap using the supplied MatrixMap to get the shift terms for
- the returned WinMap. */
- pset2 = astTransform( mm, pset1, 1, NULL );
-
-/* Now deal with cases when the MatrixMap is applied first, followed by
- the WinMap. */
- } else {
-
-/* Multiply the supplied MatrixMap by the diagonal matrix holding scale
- factors from the supplied WinMap. The resulting MatrixMap is the one to
- return in the map list. */
- m2 = astMtrMult( mm, m1 );
-
-/* Transform the position given by the shift terms from the supplied
- WinMap using the inverse of the returned MatrixMap to get the shift
- terms for the returned WinMap. */
- pset2 = astTransform( m2, pset1, 0, NULL );
-
- }
-
-/* Re-instate the original value of the Invert attributes of the supplied
- Mappings. */
- astSetInvert( wm, old_winv );
- astSetInvert( mm, old_minv );
-
-/* Get pointers to the shift terms for the returned WinMap. */
- ptr2 = astGetPoints( pset2 );
-
-/* Create the returned WinMap, initially with undefined corners. The number of
- axes in the WinMap must equal the number of shift terms. */
- nout = astGetNcoord( pset2 );
- w1 = astWinMap( nout, NULL, NULL, NULL, NULL, "", status );
-
-/* If succesful, store the scale and shift terms in the WinMap. The scale
- terms are always unity. */
- if( astOK ){
- bb = w1->b;
- aa = w1->a;
- for( i = 0; i < nout; i++ ) {
- *(bb++) = 1.0;
- *(aa++) = ptr2[ i ][ 0 ];
- }
-
-/* Replace the supplied Mappings and invert flags with the ones found
- above. Remember that the order of the Mappings is now swapped */
- (void) astAnnul( maps[ 0 ] );
- (void) astAnnul( maps[ 1 ] );
-
- sw1 = astSimplify( w1 );
- w1 = astAnnul( w1 );
-
- maps[ imm ] = (AstMapping *) sw1;
- inverts[ imm ] = astGetInvert( sw1 );
-
- sm2 = astSimplify( m2 );
- m2 = astAnnul( m2 );
-
- maps[ 1 - imm ] = (AstMapping *) sm2;
- inverts[ 1 - imm ] = astGetInvert( sm2 );
-
- }
-
-/* Annul the MatrixMap and PointSet holding the scale and shift terms from the
- supplied WinMap. */
- m1 = astAnnul( m1 );
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
-
-/* Free the copies of the scale and shift terms from the supplied WinMap. */
- b = (double *) astFree( (void *) b );
- a = (double *) astFree( (void *) a );
-
-/* Return. */
- return;
-}
-
-static AstMatrixMap *MatZoom( AstMatrixMap *mm, AstZoomMap *zm, int minv,
- int zinv, int *status ){
-/*
-* Name:
-* MatZoom
-
-* Purpose:
-* Create a MatrixMap by merging a MatrixMap and a ZoomMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* AstMatrixMap *MatZoom( AstMatrixMap *mm, AstZoomMap *zm, int minv,
-* int zinv, int *status )
-
-* Class Membership:
-* MatrixMap member function
-
-* Description:
-* This function creates a new MatrixMap which performs a mapping
-* equivalent to applying the two supplied Mappings in series in the
-* directions specified by the "invert" flags (the Invert attributes of
-* the supplied MatrixMaps are ignored).
-
-* Parameters:
-* mm
-* A pointer to the MatrixMap.
-* zm
-* A pointer to the ZoomMap.
-* minv
-* The invert flag to use with mm. A value of zero causes the forward
-* mapping to be used, and a non-zero value causes the inverse
-* mapping to be used.
-* zinv
-* The invert flag to use with zm.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the new MatrixMap.
-
-* Notes:
-* - The forward direction of the returned MatrixMap is equivalent to the
-* combined effect of the two supplied Mappings, operating in the
-* directions specified by "zinv" and "minv".
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstMatrixMap *mm2; /* Pointer to intermediate MatrixMap */
- AstMatrixMap *result; /* Pointer to output MatrixMap */
- double *matrix; /* Pointer to diagonal matrix elements array */
- double zfac; /* Zoom factor */
- int i; /* Axis index */
- int nrow; /* No. of rows in the MatrixMap */
- int old_minv; /* Original setting of MatrixMap Invert attribute */
- int old_zinv; /* Original setting of ZoomMap Invert attribute */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the returned pointer. */
- result = NULL;
-
-/* Temporarily set the Invert attributes of both Mappings to the supplied
- values. */
- old_minv = astGetInvert( mm );
- astSetInvert( mm, minv );
-
- old_zinv = astGetInvert( zm );
- astSetInvert( zm, zinv );
-
-/* Get the number of rows in the MatrixMap (i.e. the number of output
- axes). */
- nrow = astGetNout( mm );
-
-/* Get the zoom factor implemented by the ZoomMap. Invert it if necessary
- since astGetZoom does not take account of the Invert setting. */
- zfac = astGetZoom( zm );
- if( zinv ) zfac = 1.0 / zfac;
-
-/* Create a diagonal matrix map in which each diagonal element is equal
- to the zoom factor. */
- matrix = (double *) astMalloc( sizeof( double )*(size_t) nrow );
- if( astOK ) {
- for( i = 0; i < nrow; i++ ) matrix[ i ] = zfac;
- }
- mm2 = astMatrixMap( nrow, nrow, 1, matrix, "", status );
- matrix = (double *) astFree( (void *) matrix );
-
-/* Create a new MatrixMap holding the product of the supplied MatrixMap
- and the diagonal MatrixMap just created. */
- result = astMtrMult( mm, mm2 );
- mm2 = astAnnul( mm2 );
-
-/* Re-instate the original settings of the Invert attribute for the
- supplied Mappings. */
- astSetInvert( mm, old_minv );
- astSetInvert( zm, old_zinv );
-
-/* If an error has occurred, annull the returned MatrixMap. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output MatrixMap. */
- return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-static AstMatrixMap *MtrMult( AstMatrixMap *this, AstMatrixMap *a, int *status ){
-/*
-*+
-* Name:
-* astMtrMult
-
-* Purpose:
-* Multiply a MatrixMap by another MatrixMap.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* AstMatrixMap *MtrMult( astMatrixMap *this, astMatrixMap *a )
-
-* Class Membership:
-* MatrixMap method
-
-* Description:
-* This function multiples the matrices given by "this" and "a", returning
-* a pointer to a new MatrixMap holding the product "a x this".
-*
-* The number of columns in the "a" matrix must match the number of
-* rows in the "this" matrix. The number of rows in the returned
-* MatrixMap is equal to the number of rows in "a", and the number of
-* columns is the same as the number of rows in "this".
-
-* Parameters:
-* this
-* Pointer to the first MatrixMap.
-* a
-* Pointer to a second MatrixMap.
-
-* Returned Value:
-* A pointer to the product MatrixMap.
-
-* Notes:
-* - An error is reported if the two MatrixMaps have incompatible
-* shapes, or if either MatrixMap does not have a defined forward
-* transformation.
-* - A null Object pointer will also be returned if this function
-* is invoked with the AST error status set, or if it should fail
-* for any reason.
-*-
-*/
-
-/* Local variables. */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMatrixMap *new; /* New MatrixMap holding the product matrix */
- double *a_matrix; /* Pointer to the forward "a" matrix */
- double *a_row; /* Pointer to start of current row in "a" */
- double a_val; /* Current element value from "a" */
- double factor; /* Diagonal matrix term */
- double *new_matrix; /* Pointer to the new forward "this" matrix */
- double *new_val; /* Pointer to current output element value */
- double sum; /* Dot product value */
- double *this_col; /* Pointer to start of current column in "this" */
- double *this_matrix; /* Pointer to the forward "this" matrix */
- double this_val; /* Current element value from "this" */
- int col; /* Current output column number */
- int i; /* Loop count */
- int minrow; /* Min. number of rows in "a" or "this" */
- int ncol_a; /* No. of columns in the "a" MatrixMap */
- int ncol_this; /* No. of columns in the "this" MatrixMap */
- int nrow_a; /* No. of rows in the "a" MatrixMap */
- int nrow_this; /* No. of rows in the "this" MatrixMap */
- int row; /* Current output row number */
-
-/* Return a NULL pointer if an error has already occurred. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialise */
- new = NULL;
-
-/* Report an error if eitherof the MatrixMaps doe snot have a defined
- forward transformation.*/
- if( !astGetTranForward( this ) ){
- astError( AST__MTRML, "astMtrMult(%s): Cannot find the product of 2 "
- "MatrixMaps- the first MatrixMap has no forward transformation.", status,
- astClass(this) );
- return NULL;
- }
-
- if( !astGetTranInverse( this ) ){
- astError( AST__MTRML, "astMtrMult(%s): Cannot find the product of 2 "
- "MatrixMaps- the second MatrixMap has no forward transformation.", status,
- astClass(this) );
- return NULL;
- }
-
-/* Report an error if the shapes of the two matrices are incompatible. */
- nrow_a = astGetNout( a );
- ncol_a = astGetNin( a );
- nrow_this = astGetNout( this );
- ncol_this = astGetNin( this );
-
- if( ncol_a != nrow_this && astOK ){
- astError( AST__MTRML, "astMtrMult(%s): Number of rows in the first "
- "MatrixMap (%d) does not equal number of columns in the "
- "second MatrixMap (%d).", status, astClass(this), nrow_this, ncol_a );
- return NULL;
- }
-
-/* Store the minimum number of rows in either matrix for later use. */
- if( nrow_a < nrow_this ){
- minrow = nrow_a;
- } else {
- minrow = nrow_this;
- }
-
-/* Ensure that "this" is stored in FULL form (i.e. with all elements
- stored explicitly, even if the matrix is a unit or diagonal matrix). */
- ExpandMatrix( this, status );
-
-/* Store pointers to the current forward matrices (taking into
- account the current states of the Mapping inversion flags ). */
- this_matrix = astGetInvert( this ) ? this->i_matrix : this->f_matrix;
- a_matrix = astGetInvert( a ) ? a->i_matrix : a->f_matrix;
-
-/* Get memory to hold the product matrix in full form. */
- new_matrix = (double *) astMalloc( sizeof( double )*
- (size_t)( nrow_a*ncol_this ) );
- if( astOK ){
-
-/* First deal with cases where the "a" MatrixMap represents a unit
- matrix. */
- if( a->form == UNIT ){
-
-/* Copy the required number of rows from "this" to "new". */
- (void) memcpy( (void *) new_matrix, (const void *) this_matrix,
- sizeof(double)*(size_t)( minrow*ncol_this ) );
-
-/* If there are insufficient rows in "this", append some zero-filled rows. */
- if( minrow < nrow_a ){
- for( i = minrow*ncol_this; i < nrow_a*ncol_this; i++ ){
- new_matrix[ i ] = 0.0;
- }
- }
-
-/* Now deal with cases where the "a" MatrixMap represents a diagonal
- matrix. */
- } else if( a->form == DIAGONAL ){
-
-/* Scale the required number of rows from "this" storing them in "new",
- and checking for bad values. */
- i = 0;
-
- for( row = 0; row < minrow; row++ ){
- factor = a_matrix[ row ];
-
- if( factor != AST__BAD ){
-
- for( col = 0; col < ncol_this; col++ ){
- this_val = this_matrix[ i ];
- if( this_val != AST__BAD ){
- new_matrix[ i ] = this_val*factor;
- } else {
- new_matrix[ i ] = AST__BAD;
- }
- i++;
- }
-
- } else {
-
- for( col = 0; col < ncol_this; col++ ){
- new_matrix[ i++ ] = AST__BAD;
- }
-
- }
- }
-
-/* If there are insufficient rows in "this", append some zero-filled rows. */
- if( minrow < nrow_a ){
- for( i = minrow*ncol_this; i < nrow_a*ncol_this; i++ ){
- new_matrix[ i ] = 0.0;
- }
- }
-
-
-/* Now deal with cases where the "a" MatrixMap represents a full, non-diagonal
- matrix. */
- } else {
-
-/* Initialise a pointer to the next element in the product matrix. */
- new_val = new_matrix;
-
-/* Get a pointer to the start of each row of the "a" matrix. */
- for( row = 0; row < nrow_a; row++ ){
- a_row = a_matrix + ncol_a*row;
-
-/* Get a pointer to the start of each column of the "this" matrix. */
- for( col = 0; col < ncol_this; col++ ){
- this_col = this_matrix + col;
-
-/* Form the dot product of the current row from "a", and the current
- column from "this", checking for bad values. */
- sum = 0.0;
- for( i = 0; i < ncol_a; i++ ){
- a_val = a_row[ i ];
- this_val = this_col[ i*ncol_this ];
- if( a_val != AST__BAD && this_val != AST__BAD ){
- sum += a_val*this_val;
- } else {
- sum = AST__BAD;
- break;
- }
- }
-
-/* Store the output matrix element value. */
- *(new_val++) = sum;
-
- }
- }
- }
-
-/* Create the new MatrixMap. */
- new = astInitMatrixMap( NULL, sizeof( AstMatrixMap ), !class_init,
- &class_vtab, "MatrixMap", ncol_this, nrow_a,
- FULL, new_matrix );
-
-/* If possible, compress the new MatrixMap by removing off-diagonal zero
- elements. */
- CompressMatrix( new, status );
-
-/* Re-compress the original "this" MatrixMap. */
- CompressMatrix( this, status );
-
- }
-
-/* Free the memory used to hold the product matrix in full form. */
- new_matrix = (double *) astFree( (void *) new_matrix );
-
- return new;
-
-}
-
-static AstMatrixMap *MtrRot( AstMatrixMap *this, double theta,
- const double axis[], int *status ){
-/*
-*+
-* Name:
-* astMtrRot
-
-* Purpose:
-* Multiply a MatrixMap by a rotation matrix.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* AstMatrixMap *astMtrRot( astMatrixMap *this, double theta,
-* const double axis[] )
-
-* Class Membership:
-* MatrixMap method.
-
-* Description:
-* This function creates a new MatrixMap which is a copy of "this",
-* rotated by a specified angle. It can only be used on MatrixMaps which
-* have either 2 or 3 output coordinates. In the 3-D case, the rotation
-* is about an arbitrary axis passing through the origin.
-
-* Parameters:
-* this
-* Pointer to the MatrixMap.
-* theta
-* The angle by which to rotate the matrix, in radians. If the matrix
-* is applied to a 2-D vector position, the resulting vector is
-* rotated clockwise about the origin (i.e. from the positive direction
-* of the second axis to the positive direction of the first axis). If
-* the vector positions are three dimensional, the rotation is clockwise
-* when looking along the vector given by "axis". Note, "theta" measures
-f when looking along the vector given by AXIS. Note, THETA measures
-* the movemement of the vectors relative to a fixed reference frame.
-* Alternatively, the reference frame can be thought of as rotating by
-* (-theta) relative to the fixed vectors.
-* axis
-* A 3-D vector specifying the axis of rotation. This parameter is
-* ignored if the output from MatrixMap is 2-dimensional.
-
-* Returned Value:
-* A pointer to the rotated MatrixMap.
-
-* Notes:
-* - A null Object pointer will also be returned if this function
-* is invoked with the AST error status set, or if it should fail
-* for any reason.
-*-
-*/
-
-/* Local variables. */
- AstMatrixMap *new; /* New MatrixMap holding the rotated matrix */
- double as,a,b,c,d,e,f,g; /* Intermediate quantities */
- double axlen; /* Length of axis vector */
- double axlen2; /* Squared length of axis vector */
- double costh; /* Cos(rotation angle) */
- double sinth; /* Sin(rotation angle) */
- double rotmat[9]; /* Rotation matrix */
- double work[3]; /* Work space for matrix multiplication */
- int ncol; /* No. of columns in the MatrixMap */
- int nrow; /* No. of rows in the MatrixMap */
-
-/* Return a NULL pointer if an error has already occurred. */
- if ( !astOK ) return NULL;
-
-/* Initialise the returned MarixMap to be a copy of the supplied MatrixMap. */
- new = astCopy( this );
-
-/* Save the cos and sin of the rotation angle for future use. */
- costh = cos( theta );
- sinth = sin( theta );
-
-/* Return without changing the MatrixMap if the rotation angle is a
- multiple of 360 degrees. */
- if ( costh == 1.0 ) return new;
-
-/* Get the dimensions of the MatrixMap. */
- nrow = astGetNout( new );
- ncol = astGetNin( new );
-
-/* First do rotation of a plane about the origin. */
- if( nrow == 2 ){
-
-/* Ensure that the MatrixMap is stored in full form rather than
- compressed form. */
- ExpandMatrix( new, status );
-
-/* Form the 2x2 forward rotation matrix. Theta is the clockwise angle
- of rotation. */
- rotmat[0] = costh;
- rotmat[1] = sinth;
- rotmat[2] = -sinth;
- rotmat[3] = costh;
-
-/* Post-multiply the current forward matrix (depending on whether or not
- the MatrixMap has been inverted) by the forward rotation matrix. */
- if( !astGetInvert( new ) ){
- SMtrMult( 1, 2, ncol, rotmat, new->f_matrix, work, status );
- } else {
- SMtrMult( 1, 2, ncol, rotmat, new->i_matrix, work, status );
- }
-
-/* Now form the 2x2 inverse rotation matrix (the diagonal elements
- don't change). */
- rotmat[1] = -sinth;
- rotmat[2] = sinth;
-
-/* Pre-multiply the current inverse matrix (depending on whether or
- not the MatrixMap has been inverted) by the inverse rotation matrix. */
- if( !astGetInvert( new ) ){
- SMtrMult( 0, ncol, 2, rotmat, new->i_matrix, work, status );
- } else {
- SMtrMult( 0, ncol, 2, rotmat, new->f_matrix, work, status );
- }
-
-/* See if the matrix can be stored as a UNIT or DIAGONAL matrix. */
- CompressMatrix( new, status );
-
-/* Now do rotation of a volume about an axis passing through the origin. */
- } else if( nrow == 3 ){
-
-/* Find the length of the axis vector. Report an error if it has zero
- length or has not been supplied. */
- if( axis ) {
- axlen2 = axis[0]*axis[0] + axis[1]*axis[1] + axis[2]*axis[2];
- } else {
- axlen2 = 0.0;
- }
- if( axlen2 <= 0.0 ) {
- astError( AST__MTRAX, "astMtrRot(%s): NULL or zero length "
- "axis vector supplied.", status, astClass(new) );
- }
- axlen = sqrt( axlen2 );
-
-/* Ensure that the MatrixMap is stored in full form rather than
- compressed form. */
- ExpandMatrix( new, status );
-
-/* Form commonly used terms in the rotation matrix. */
- as = sinth/axlen;
- a = (1.0 - costh)/axlen2;
- b = a*axis[0]*axis[1];
- c = as*axis[2];
- d = a*axis[0]*axis[2];
- e = as*axis[1];
- f = a*axis[1]*axis[2];
- g = as*axis[0];
-
-/* Form the 3x3 forward rotation matrix. Theta is the clockwise angle
- of rotation looking in the direction of the axis vector. */
- rotmat[0] = a*axis[0]*axis[0] + costh;
- rotmat[1] = b - c;
- rotmat[2] = d + e;
- rotmat[3] = b + c;
- rotmat[4] = a*axis[1]*axis[1] + costh;
- rotmat[5] = f - g;
- rotmat[6] = d - e;
- rotmat[7] = f + g;
- rotmat[8] = a*axis[2]*axis[2] + costh;
-
-/* Post-multiply the current forward matrix (depending on whether or not
- the MatrixMap has been inverted) by the forward rotation matrix. */
- if( !astGetInvert( new ) ){
- SMtrMult( 1, 3, ncol, rotmat, new->f_matrix, work, status );
- } else {
- SMtrMult( 1, 3, ncol, rotmat, new->i_matrix, work, status );
- }
-
-/* Now form the 3x3 inverse rotation matrix (the diagonal elements
- don't change). */
- rotmat[1] = b + c;
- rotmat[2] = d - e;
- rotmat[3] = b - c;
- rotmat[5] = f + g;
- rotmat[6] = d + e;
- rotmat[7] = f - g;
-
-/* Pre-multiply the current inverse matrix (depending on whether or
- not the MatrixMap has been inverted) by the inverse rotation matrix. */
- if( !astGetInvert( new ) ){
- SMtrMult( 0, ncol, 3, rotmat, new->i_matrix, work, status );
- } else {
- SMtrMult( 0, ncol, 3, rotmat, new->f_matrix, work, status );
- }
-
-/* See if the matrix can be stored as a UNIT or DIAGONAL matrix. */
- CompressMatrix( new, status );
-
-/* Report an error if the matrix is not suitable for rotation. */
- } else {
- astError( AST__MTR23, "astMtrRot(%s): Cannot rotate a %dx%d"
- " MatrixMap.", status, astClass(new), nrow, ncol );
- }
-
-/* Delete the new MatrixMap if an error has occurred. */
- if( !astOK ) new = astDelete( new );
-
- return new;
-
-}
-
-static void PermGet( AstPermMap *map, int **outperm, int **inperm,
- double **consts, int *status ){
-/*
-* Name:
-* PermGet
-
-* Purpose:
-* Get the axis permutation and constants array for a PermMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* void PermGet( AstPermMap *map, int **outperm, int **inperm,
-* double **const, int *status )
-
-* Class Membership:
-* MatrixMap member function
-
-* Description:
-* This function returns axis permutation and constants arrays which can
-* be used to create a PermMap which is equivalent to the supplied PermMap.
-
-* Parameters:
-* map
-* The PermMap.
-* outperm
-* An address at which to return a popinter to an array of ints
-* holding the output axis permutation array. The array should be
-* released using astFree when no longer needed.
-* inperm
-* An address at which to return a popinter to an array of ints
-* holding the input axis permutation array. The array should be
-* released using astFree when no longer needed.
-* consts
-* An address at which to return a popinter to an array of doubles
-* holding the constants array. The array should be released using
-* astFree when no longer needed.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - NULL pointers are returned if an error has already occurred, or if
-* this function should fail for any reason.
-*/
-
-/* Local Variables: */
- AstPointSet *pset1; /* PointSet holding input positions for PermMap */
- AstPointSet *pset2; /* PointSet holding output positions for PermMap */
- double **ptr1; /* Pointer to pset1 data */
- double **ptr2; /* Pointer to pset2 data */
- double *cnst; /* Pointer to constants array */
- double cn; /* Potential new constant value */
- double ip; /* Potential output axis index */
- double op; /* Potential input axis index */
- int *inprm; /* Pointer to input axis permutation array */
- int *outprm; /* Pointer to output axis permutation array */
- int i; /* Axis count */
- int nc; /* Number of constants stored so far */
- int nin; /* No. of input coordinates for the PermMap */
- int nout; /* No. of output coordinates for the PermMap */
-
-/* Initialise. */
- if( outperm ) *outperm = NULL;
- if( inperm ) *inperm = NULL;
- if( consts ) *consts = NULL;
-
-/* Check the global error status and the supplied pointers. */
- if ( !astOK || !outperm || !inperm || !consts ) return;
-
-/* Get the number of input and output axes for the supplied PermMap. */
- nin = astGetNin( map );
- nout = astGetNout( map );
-
-/* Allocate the memory for the returned arrays. */
- outprm = (int *) astMalloc( sizeof( int )* (size_t) nout );
- inprm = (int *) astMalloc( sizeof( int )* (size_t) nin );
- cnst = (double *) astMalloc( sizeof( double )* (size_t) ( nout + nin ) );
-
-/* Returned the pointers to these arrays.*/
- *outperm = outprm;
- *inperm = inprm;
- *consts = cnst;
-
-/* Create two PointSets, each holding two points, which can be used for
- input and output positions with the PermMap. */
- pset1 = astPointSet( 2, nin, "", status );
- pset2 = astPointSet( 2, nout, "", status );
-
-/* Set up the two input positions to be [0,1,2...] and [-1,-1,-1,...]. The
- first position is used to enumerate the axes, and the second is used to
- check for constant axis values. */
- ptr1 = astGetPoints( pset1 );
- if( astOK ){
- for( i = 0; i < nin; i++ ){
- ptr1[ i ][ 0 ] = ( double ) i;
- ptr1[ i ][ 1 ] = -1.0;
- }
- }
-
-/* Use the PermMap to transform these positions in the forward direction. */
- (void) astTransform( map, pset1, 1, pset2 );
-
-/* No constant axis valeus found yet. */
- nc = 0;
-
-/* Look at the mapped positions to determine the output axis permutation
- array. */
- ptr2 = astGetPoints( pset2 );
- if( astOK ){
-
-/* Do each output axis. */
- for( i = 0; i < nout; i++ ){
-
-/* If the output axis value is copied from an input axis value, the index
- of the appropriate input axis will be in the mapped first position. */
- op = ptr2[ i ][ 0 ];
-
-/* If the output axis value is assigned a constant value, the result of
- mapping the two different input axis values will be the same. */
- cn = ptr2[ i ][ 1 ];
- if( op == cn ) {
-
-/* We have found another constant. Store it in the constants array, and
- store the index of the constant in the output axis permutation array. */
- cnst[ nc ] = cn;
- outprm[ i ] = -( nc + 1 );
- nc++;
-
-/* If the output axis values are different, then the output axis value
- must be copied from the input axis value. */
- } else {
- outprm[ i ] = (int) ( op + 0.5 );
- }
- }
- }
-
-/* Now do the same thing to determine the input permutation array. */
- if( astOK ){
- for( i = 0; i < nout; i++ ){
- ptr2[ i ][ 0 ] = ( double ) i;
- ptr2[ i ][ 1 ] = -1.0;
- }
- }
-
- (void) astTransform( map, pset2, 0, pset1 );
-
- if( astOK ){
-
- for( i = 0; i < nin; i++ ){
-
- ip = ptr1[ i ][ 0 ];
- cn = ptr1[ i ][ 1 ];
- if( ip == cn ) {
-
- cnst[ nc ] = cn;
- inprm[ i ] = -( nc + 1 );
- nc++;
-
- } else {
- inprm[ i ] = (int) ( ip + 0.5 );
- }
- }
- }
-
-/* Annul the PointSets. */
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
-
-/* If an error has occurred, attempt to free the returned arrays. */
- if( !astOK ) {
- *outperm = (int *) astFree( (void *) *outperm );
- *inperm = (int *) astFree( (void *) *inperm );
- *consts = (double *) astFree( (void *) *consts );
- }
-
-/* Return. */
- return;
-}
-
-static int PermOK( AstMapping *pm, int *status ){
-/*
-* Name:
-* PermOK
-
-* Purpose:
-* Determine if a PermMap can be merged with a MatrixMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* int PermOK( AstMapping *pm, int *status )
-
-* Class Membership:
-* PermMap member function
-
-* Description:
-* This function returns a flag indicating if the supplied PermMap
-* could be merged with a MatrixMap. For thios to be possible, the
-* PermMap must have the same number of input and output axes, and the
-* inverse and forward mappings must be consistent.
-
-* Parameters:
-* pm
-* The PermMap.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* 1 if the PermMap can be merged, 0 otherwise.
-
-* Notes:
-* - A value of 0 is returned if an error has already occurred, or if
-* this function should fail for any reason.
-*/
-
-/* Local Variables: */
- AstPointSet *pset1; /* PointSet holding input positions for PermMap */
- AstPointSet *pset2; /* PointSet holding output positions for PermMap */
- double **ptr1; /* Pointer to pset1 data */
- int i; /* Loop count */
- int nin; /* No. of input coordinates for the PermMap */
- int nout; /* No. of output coordinates for the PermMap */
- int ret; /* Returned flag */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Initialise */
- ret = 0;
-
-/* The PermMap must have the same number of input and output coordinates. */
- nin = astGetNin( pm );
- nout = astGetNout( pm );
- if( nin == nout ){
-
-/* Create two PointSets, each holding two points, which can be used for
- the input and output positions with the PermMap. */
- pset1 = astPointSet( 2, nin, "", status );
- pset2 = astPointSet( 2, nout, "", status );
-
-/* Set up the two input positions to be [1,2,3...] and [0,-1,-2,...] */
- ptr1 = astGetPoints( pset1 );
- if( astOK ){
- for( i = 0; i < nin; i++ ){
- ptr1[ i ][ 0 ] = ( double )( i + 1 );
- ptr1[ i ][ 1 ] = ( double )( -i );
- }
-
- }
-
-/* Use the PermMap to transform these positions in the forward direction. */
- (void) astTransform( pm, pset1, 1, pset2 );
-
-/* Now transform the results back again using the inverse PermMap. */
- (void) astTransform( pm, pset2, 0, pset1 );
-
-/* See if the input positions have changed. If they have, then the PermMap
- does not have a consistent pair of transformations. If they have not,
- then the transformations must be consistent because we used two
- different input positions and only one could come out unchanged by
- chance. */
- if( astOK ){
- ret = 1;
- for( i = 0; i < nin; i++ ){
- if( ptr1[ i ][ 0 ] != ( double )( i + 1 ) ||
- ptr1[ i ][ 1 ] != ( double )( -i ) ){
- ret = 0;
- break;
- }
- }
- }
-
-/* Annul the PointSets. */
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
- }
-
-/* Return the answer. */
- return astOK ? ret : 0;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-* Name:
-* Rate
-
-* Purpose:
-* Calculate the rate of change of a Mapping output.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-* Class Membership:
-* MatrixMap member function (overrides the astRate method inherited
-* from the Mapping class ).
-
-* Description:
-* This function returns the rate of change of a specified output of
-* the supplied Mapping with respect to a specified input, at a
-* specified input position.
-
-* Parameters:
-* this
-* Pointer to the Mapping to be applied.
-* at
-* The address of an array holding the axis values at the position
-* at which the rate of change is to be evaluated. The number of
-* elements in this array should equal the number of inputs to the
-* Mapping.
-* ax1
-* The index of the Mapping output for which the rate of change is to
-* be found (output numbering starts at 0 for the first output).
-* ax2
-* The index of the Mapping input which is to be varied in order to
-* find the rate of change (input numbering starts at 0 for the first
-* input).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The rate of change of Mapping output "ax1" with respect to input
-* "ax2", evaluated at "at", or AST__BAD if the value cannot be
-* calculated.
-
-*/
-
-/* Local Variables: */
- AstMatrixMap *map;
- double *matrix;
- double result;
-
-/* Check inherited status */
- if( !astOK ) return AST__BAD;
-
-/* Get a pointer to the MatrixMap structure. */
- map = (AstMatrixMap *) this;
-
-/* Get a pointer to the array holding the required matrix elements, according
- to whether the MatrixMap has been inverted. */
- if( !astGetInvert( this ) ) {
- matrix = map->f_matrix;
- } else {
- matrix = map->i_matrix;
- }
-
-/* First deal with full MatrixMaps in which all matrix elements are stored. */
- if( map->form == FULL ){
- result = matrix[ ax1*astGetNin( this ) + ax2 ];
-
-/* For unit matrices, the rate is unity if the input and output axes are
- equal, and zero otherwise. */
- } else if( map->form == UNIT ){
- result = (ax1 == ax2 ) ? 1.0 : 0.0;
-
-/* For diagonal matrices, the rate is zero for off diagonal elements and
- the matrix array stored the on-diagonal rates. */
- } else if( ax1 == ax2 ) {
- result = matrix[ ax1 ];
-
- } else {
- result = 0.0;
- }
-
-/* Return the result. */
- return result;
-}
-
-static void SMtrMult( int post, int m, int n, const double *mat1,
- double *mat2, double *work, int *status ){
-/*
-* Name:
-* SMtrMult
-
-* Purpose:
-* Multiply a square matrix and a non-square matrix.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* void SMtrMult( int post, int m, int n, const double *mat1,
-* double *mat2, double *work, int *status )
-
-* Class Membership:
-* MatrixMap member function.
-
-* Description:
-* The matrix pointed to by "mat2" is modified by multiplying it by
-* the square matrix pointed to by "mat1". If "post" is 1, then:
-*
-* mat2 -> mat1*mat2 (mat1 is mxm and mat2 is mxn)
-*
-* If "post" is zero, then:
-*
-* mat2 -> mat2*mat1 (mat1 is nxn and mat2 is mxn)
-*
-* The restriction that "mat1" must be square is imposed so that the
-* returned matrix will have the same shape as the supplied matrix (mat1).
-
-* Parameters:
-* post
-* Specifies whether to post- or pre- multiply mat2 by mat1.
-* m
-* The number of rows in mat2.
-* n
-* The number of columns in mat2.
-* mat1
-* The multiplier matrix. It must be square of size m or n, depending
-* on "post".
-* mat2
-* The multiplicand matrix.
-* work
-* Pointer to work space containing room for m doubles (if "post"
-* is 1), or n doubles (if "post" is 0).
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - No error is reported if "mat2" is supplied NULL. In this case
-* it will also be returned NULL.
-*/
-
-/* Local Variables */
- double dot; /* Output matrix element value */
- const double *mat1_col; /* Pointer to start of current column of mat1 */
- const double *mat1_row; /* Pointer to start of current row of mat1 */
- double *mat2_col; /* Pointer to start of current column of mat2 */
- double *mat2_row; /* Pointer to start of current row of mat2 */
- double cel; /* Column element value */
- double rel; /* Row element value */
- int i; /* Index of current output row */
- int j; /* Index of current output column */
- int k; /* Dot product index */
-
-/* Do nothing if mat2 is NULL */
- if ( mat2 ){
-
-/* First deal with cases where the supplied matrix is post-multiplied
- (i.e. the returned matrix is mat1*mat2). */
- if( post ){
-
-/* Loop round each column of the output matrix, storing a pointer to
- the start of the corresponding column of mat2. */
- for( j=0; j<n; j++ ){
- mat2_col = mat2 + j;
-
-/* Loop round each row of the output matrix, storing a pointer to
- the start of the corresponding row of mat1. */
- for( i=0; i<m; i++ ){
- mat1_row = mat1 + i*m;
-
-/* Get the dot product of the corresponding row from mat1 and the
- corresponding column from mat2 and store it in the work array. */
- dot = 0.0;
- for( k=0; k<m; k++ ) {
- rel = mat1_row[ k ];
- cel = mat2_col[ k*n ];
- if( rel != AST__BAD && cel != AST__BAD ){
- dot += rel*cel;
- } else {
- dot = AST__BAD;
- break;
- }
- }
- work[ i ] = dot;
- }
-
-/* Copy the values stored in the work array to the current column of
- the output matrix. */
- for( i=0; i<m; i++ ) mat2_col[ i*n ] = work[ i ];
- }
-
-/* Now deal with cases where the supplied matrix is pre-multiplied
- (i.e. the returned matrix is mat2*mat1). */
- } else {
-
-/* Loop round each row of the output matrix, storing a pointer to
- the start of the corresponding row of mat2. */
- for( i=0; i<m; i++ ){
- mat2_row = mat2 + i*n;
-
-/* Loop round each column of the output matrix, storing a pointer to
- the start of the corresponding column of mat1. */
- for( j=0; j<n; j++ ){
- mat1_col = mat1 + j;
-
-/* Get the dot product of the corresponding row from mat2 and the
- corresponding column from mat1 and store it in the work array. */
- dot = 0.0;
- for( k=0; k<n; k++ ) {
- rel = mat2_row[ k ];
- cel = mat1_col[ k*n ];
- if( rel != AST__BAD && cel != AST__BAD ){
- dot += rel*cel;
- } else {
- dot = AST__BAD;
- break;
- }
- }
- work[ j ] = dot;
- }
-
-/* Copy the values stored in the work array to the current row of
- the output matrix. */
- for( j=0; j<n; j++ ) mat2_row[ j ] = work[ j ];
- }
- }
- }
-
- return;
-
-}
-
-static int GetTranForward( AstMapping *this, int *status ) {
-/*
-*
-* Name:
-* GetTranForward
-
-* Purpose:
-* Determine if a MatrixMap defines a forward coordinate transformation.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* int GetTranForward( AstMapping *this, int *status )
-
-* Class Membership:
-* MatrixMap member function (over-rides the astGetTranForward method
-* inherited from the Mapping class).
-
-* Description:
-* This function returns a value indicating if the MatrixMap is able
-* to perform a forward coordinate transformation.
-
-* Parameters:
-* this
-* Pointer to the MatrixMap.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero if the forward coordinate transformation is not defined, or 1 if it
-* is.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstMatrixMap *map; /* Pointer to MatrixMap to be queried */
- int invert; /* Has the mapping been inverted? */
- int result; /* The returned value */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the MatrixMap. */
- map = (AstMatrixMap *) this;
-
-/* All unit MatrixMaps are defined in both directions. */
- if( map->form == UNIT ) {
- result = 1;
-
-/* Otherwise, check that the appropriate array is defined in the
- MatrixMap. */
- } else {
-
-/* Determine if the Mapping has been inverted. */
- invert = astGetInvert( this );
-
-/* If OK, obtain the result. */
- if ( astOK ) {
-
- if( invert ){
- result = ( map->i_matrix != NULL );
- } else {
- result = ( map->f_matrix != NULL );
- }
-
- }
-
- }
-
-/* Return the result. */
- return result;
-
-}
-
-static int GetTranInverse( AstMapping *this, int *status ) {
-/*
-*
-* Name:
-* GetTranInverse
-
-* Purpose:
-* Determine if a MatrixMap defines an inverse coordinate transformation.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* int GetTranInverse( AstMapping *this, int *status )
-
-* Class Membership:
-* MatrixMap member function (over-rides the astGetTranInverse method
-* inherited from the Mapping class).
-
-* Description:
-* This function returns a value indicating if the MatrixMap is able
-* to perform an inverse coordinate transformation.
-
-* Parameters:
-* this
-* Pointer to the MatrixMap.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero if the inverse coordinate transformation is not defined, or 1 if it
-* is.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstMatrixMap *map; /* Pointer to MatrixMap to be queried */
- int invert; /* Has the mapping been inverted? */
- int result; /* The returned value */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the MatrixMap. */
- map = (AstMatrixMap *) this;
-
-/* All unit MatrixMaps are defined in both directions. */
- if( map->form == UNIT ) {
- result = 1;
-
-/* Otherwise, check that the appropriate array is defined in the
- MatrixMap. */
- } else {
-
-/* Determine if the Mapping has been inverted. */
- invert = astGetInvert( this );
-
-/* If OK, obtain the result. */
- if ( astOK ) {
-
- if( invert ){
- result = ( map->f_matrix != NULL );
- } else {
- result = ( map->i_matrix != NULL );
- }
-
- }
-
- }
-
-/* Return the result. */
- return result;
-
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a MatrixMap to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* MatrixMap member function (over-rides the astTransform protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function takes a MatrixMap and a set of points encapsulated in a
-* PointSet and transforms the points by multiplying them by the matrix.
-
-* Parameters:
-* this
-* Pointer to the MatrixMap.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of columns in the MatrixMap being applied.
-* - The number of coordinate values per point in the output PointSet will
-* equal the number of rows in the MatrixMap being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstPointSet *result; /* Pointer to output PointSet */
- AstMatrixMap *map; /* Pointer to MatrixMap to be applied */
- double diag_term; /* Current diagonal element value */
- double *indata; /* Pointer to next input data value */
- double *matrix; /* Pointer to start of matrix element array */
- double *matrix_element; /* Pointer to current matrix element value */
- double *outdata; /* Pointer to next output data value */
- double **ptr_in; /* Pointer to input coordinate data */
- double **ptr_out; /* Pointer to output coordinate data */
- double sum; /* Partial output value */
- double val; /* Data value */
- int in_coord; /* Index of output coordinate */
- int nax; /* Output axes for which input axes exist */
- int ncoord_in; /* Number of coordinates per input point */
- int ncoord_out; /* Number of coordinates per output point */
- int npoint; /* Number of points */
- int out_coord; /* Index of output coordinate */
- int point; /* Loop counter for points */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the MatrixMap. */
- map = (AstMatrixMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Mapping class. This function validates
- all arguments and generates an output PointSet if necessary, but does not
- actually transform any coordinate values. */
- result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
- and output PointSets and obtain pointers for accessing the input and
- output coordinate values. */
- ncoord_in = astGetNcoord( in );
- ncoord_out = astGetNcoord( result );
- npoint = astGetNpoint( in );
- ptr_in = astGetPoints( in );
- ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse mapping, according to the
- direction specified and whether the mapping has been inverted. */
- if ( astGetInvert( map ) ) forward = !forward;
-
-/* Get a pointer to the array holding the required matrix elements, according
- to the direction of mapping required. */
- if ( forward ) {
- matrix = map->f_matrix;
- } else {
- matrix = map->i_matrix;
- }
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
- if ( astOK ) {
-
-/* First deal with full MatrixMaps in which all matrix elements are stored. */
- if( map->form == FULL ){
-
-/* Loop to apply the matrix to each point in turn, checking for
- (and propagating) bad values in the process. The matrix elements are
- accessed sequentially in row order. The next matrix element to be
- used is identified by a pointer which is initialised to point to the
- first element of the matrix prior to processing each point. */
- for ( point = 0; point < npoint; point++ ) {
- matrix_element = matrix;
-
-/* Each output co-ordinate value is created by summing the product of the
- corresponding input co-ordinates and the elements of one row of the
- matrix. */
- for ( out_coord = 0; out_coord < ncoord_out; out_coord++ ) {
- sum = 0.0;
-
- for ( in_coord = 0; in_coord < ncoord_in; in_coord++ ) {
-
-/* Check the current input coordinate value and the current matrix element.
- If the coordinate value is bad, then the output value will also be
- bad unless the matrix element is zero. That is, a zero matrix element
- results in the input coordinate value being ignored, even if it is bad.
- This prevents bad input values being propagated to output axes which
- are independant of the bad input axis. A bad matrix element always results
- in the output value being bad. In either of these cases, break out of the
- loop, remembering to advance the pointer to the next matrix element so
- that it points to the start of the next row ready for doing the next
- output coordinate. */
- if ( ( ptr_in[ in_coord ][ point ] == AST__BAD &&
- (*matrix_element) != 0.0 ) ||
- (*matrix_element) == AST__BAD ) {
- sum = AST__BAD;
- matrix_element += ncoord_in - in_coord;
- break;
-
-/* If the input coordinate and the current matrix element are both
- valid, increment the sum by their product, and step to the next matrix
- element pointer If we arrive here with a bad input value, then the
- matrix element must be zero, in which case the running sum is left
- unchanged. */
- } else {
- if ( ptr_in[ in_coord ][ point ] != AST__BAD ) {
- sum += ptr_in[ in_coord ][ point ] * (*matrix_element);
- }
- matrix_element++;
- }
- }
-
-/* Store the output coordinate value. */
- ptr_out[ out_coord ][ point ] = sum;
-
- }
-
- }
-
-/* Now deal with unit and diagonal MatrixMaps. */
- } else {
-
-/* Find the number of output axes for which input data is available. */
- if( ncoord_in < ncoord_out ){
- nax = ncoord_in;
- } else {
- nax = ncoord_out;
- }
-
-/* For unit matrices, copy the input axes to the corresponding output axes. */
- if( map->form == UNIT ){
- for( out_coord = 0; out_coord < nax; out_coord++ ) {
- (void) memcpy( ptr_out[ out_coord ],
- (const void *) ptr_in[ out_coord ],
- sizeof( double )*(size_t)npoint );
- }
-
-/* For diagonal matrices, scale each input axis using the appropriate
- diagonal element from the matrix, and store in the output. */
- } else {
- for( out_coord = 0; out_coord < nax; out_coord++ ){
- diag_term = matrix[ out_coord ];
- outdata = ptr_out[ out_coord ];
- indata = ptr_in[ out_coord ];
-
- if( diag_term != AST__BAD ){
- for( point = 0; point < npoint; point++ ){
- val = *(indata++);
- if( val != AST__BAD ){
- *(outdata++) = diag_term*val;
- } else {
- *(outdata++) = AST__BAD;
- }
- }
-
- } else {
- for( point = 0; point < npoint; point++ ){
- *(outdata++) = AST__BAD;
- }
- }
- }
- }
-
-/* If there are any remaining output axes, fill the first one with zeros. */
- if( nax < ncoord_out ){
- outdata = ptr_out[ nax ];
- for( point = 0; point < npoint; point++ ) *(outdata++) = 0.0;
-
-/* Copy this axis to any remaining output axes. */
- outdata = ptr_out[ nax ];
- for( out_coord = nax + 1; out_coord < ncoord_out; out_coord++ ) {
- (void) memcpy( ptr_out[ out_coord ], (const void *) outdata,
- sizeof( double )*(size_t)npoint );
- }
- }
- }
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-static int ScalingRowCol( AstMatrixMap *map, int axis, int *status ){
-/*
-* Name:
-* ScalingRowCol
-
-* Purpose:
-* Determine if a given row and column of a MatrixMap are zeros
-* with a non-zero diagonal term.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* int ScalingRowCol( AstMatrixMap *map, int axis, int *status )
-
-* Class Membership:
-* MatrixMap member function
-
-* Description:
-* This function returns a flag indicating if a MatrixMap presents a
-* simple scaling for a given axis in both directions. The MatrixMap
-* must be square. A value of one is returned if every element of the
-* row and column corresponding to the given axis is zero, except for
-* the diagonal term which must be non-zero.
-
-* Parameters:
-* map
-* The MatrixMap.
-* axis
-* The zero-based index of the axis to check.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* 1 if the row/column produces a simple scaling, 0 otherwise.
-
-*/
-
-/* Local Variables: */
- double *el; /* Pointer to matrix element */
- int i; /* Element count */
- int ncol; /* No. of input coordinates */
- int nrow; /* No. of output coordinates */
- int ret; /* Returned flag */
-
-/* Initialise */
- ret = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return ret;
-
-/* If a unit or diagonal MatrixMap has been supplied, return 1. */
- if( map->form != FULL ){
- ret = 1;
-
-/* If a full matrix has been supplied... */
- } else {
-
-/* Assume the row/column gives a unit mapping. */
- ret = 1;
-
-/* Get the number of input and output axes for the MatrixMap. */
- ncol = astGetNin( map );
- nrow = astGetNout( map );
-
-/* Check that all elements of the "axis"th row are effectively zero, except
- for the "axis"th element which must be non-zero. */
- el = map->f_matrix + axis*ncol;
- for( i = 0; i < ncol; i++ ) {
- if( i == axis ) {
- if( fabs( *el ) <= DBL_EPSILON ) {
- ret = 0;
- break;
- }
- } else if( fabs( *el ) > DBL_EPSILON ) {
- ret = 0;
- break;
- }
- el++;
- }
-
-/* Check that all elements of the "axis"th column are effectively zero, except
- for the "axis"th element which must be non-zero. */
- if( ret ) {
- el = map->f_matrix + axis;
- for( i = 0; i < ncol; i++ ) {
- if( i == axis ) {
- if( fabs( *el ) <= DBL_EPSILON ) {
- ret = 0;
- break;
- }
- } else if( fabs( *el ) > DBL_EPSILON ) {
- ret = 0;
- break;
- }
- el += ncol;
- }
- }
- }
-
-/* Return the answer. */
- return astOK ? ret : 0;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for MatrixMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for MatrixMap objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - This constructor makes a deep copy, including a copy of the matrix
-* element values associated with the input MatrixMap.
-*/
-
-
-/* Local Variables: */
- AstMatrixMap *in; /* Pointer to input MatrixMap */
- AstMatrixMap *out; /* Pointer to output MatrixMap */
- int nel; /* No. of elements in the matrix */
- int nin; /* No. of input coordinates */
- int nout; /* No. of output coordinates */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output MatrixMaps. */
- in = (AstMatrixMap *) objin;
- out = (AstMatrixMap *) objout;
-
-/* Nullify the pointers stored in the output object since these will
- currently be pointing at the input data (since the output is a simple
- byte-for-byte copy of the input). Otherwise, the input data could be
- freed by accidient if the output object is deleted due to an error
- occuring in this function. */
- out->f_matrix = NULL;
- out->i_matrix = NULL;
-
-/* If the input MatrixMap is a unit mapping, then no matrix elements are
- stored with it, so do nothing in this case. */
- if( out->form != UNIT ){
-
-/* Obtain the number of stored values in the MatrixMap. This is independant of
- whether the Mapping has been inverted or not. If the MatrixMap is diagonal,
- only the diagonal terms are stored. */
- nin = astGetNin( in );
- nout = astGetNout( in );
-
- if( out->form == DIAGONAL ){
- if( nin < nout ){
- nel = nin;
- } else {
- nel = nout;
- }
-
- } else {
- nel = nin*nout;
- }
-
-/* Store the forward matrix elements in the output MatrixMap. */
- out->f_matrix = (double *) astStore( NULL, (void *) in->f_matrix,
- sizeof( double )*(size_t) nel );
-
-/* Store the inverse matrix elements (if defined) in the output
- MatrixMap. */
- if( in->i_matrix ){
- out->i_matrix = (double *) astStore( NULL, (void *) in->i_matrix,
- sizeof( double )*(size_t) nel );
- }
-
-/* If an error has occurred, free the output MatrixMap arrays. */
- if( !astOK ) {
- out->f_matrix = (double *) astFree( (void *) out->f_matrix );
- out->i_matrix = (double *) astFree( (void *) out->i_matrix );
- }
- }
-
- return;
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for MatrixMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for MatrixMap objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstMatrixMap *this; /* Pointer to MatrixMap */
-
-/* Obtain a pointer to the MatrixMap structure. */
- this = (AstMatrixMap *) obj;
-
-/* Free the arrays used to store element values for forward and inverse
- matrices. */
- this->f_matrix = (double *) astFree( (void *) this->f_matrix );
- this->i_matrix = (double *) astFree( (void *) this->i_matrix );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for MatrixMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the MatrixMap class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the MatrixMap whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstMatrixMap *this; /* Pointer to the MatrixMap structure */
- char buff[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- int el; /* Element index */
- int nel; /* No. of elements in the matrix */
- int nin; /* No. of input coords */
- int nout; /* No. of output coords */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the MatrixMap structure. */
- this = (AstMatrixMap *) this_object;
-
-/* Find the number of elements stored for each matrix. */
- nin = astGetNin( this );
- nout = astGetNout( this );
-
- if( this->form == FULL ){
- nel = nin*nout;
-
- } else if( this->form == DIAGONAL ){
- nel = MIN( nin, nout );
-
- } else {
- nel = 0;
- }
-
-/* Write out values representing the instance variables for the
- MatrixMap class. */
-
-/* The forward matrix. The inverse matrix not written out since it can be
- re-calculated when the MatrixMap is read back in. Note BAD values are
- not written out as the AST__BAD value may differ on different machines.
- If a matrix element is not found when reading the matrix back in
- again (in astLoadMatrixMap), then it is assigned a default value of
- AST__BAD. */
- if( this->f_matrix ){
- for( el = 0; el < nel; el++ ){
- if( (this->f_matrix)[ el ] != AST__BAD ) {
- (void) sprintf( buff, "M%d", el );
- astWriteDouble( channel, buff, 1, 1, (this->f_matrix)[ el ],
- "Forward matrix value" );
- }
- }
- }
-
-/* The matrix storage form. */
- astWriteString( channel, "Form", 1, 1, Form[ this->form ],
- "Matrix storage form" );
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAMatrixMap and astCheckMatrixMap functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(MatrixMap,Mapping)
-astMAKE_CHECK(MatrixMap)
-
-AstMatrixMap *astMatrixMap_( int nin, int nout, int form,
- const double matrix[], const char *options, int *status, ...){
-/*
-*++
-* Name:
-c astMatrixMap
-f AST_MATRIXMAP
-
-* Purpose:
-* Create a MatrixMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "matrixmap.h"
-c AstMatrixMap *astMatrixMap( int nin, int nout, int form,
-c const double matrix[],
-c const char *options, ... )
-f RESULT = AST_MATRIXMAP( NIN, NOUT, FORM, MATRIX, OPTIONS, STATUS )
-
-* Class Membership:
-* MatrixMap constructor.
-
-* Description:
-* This function creates a new MatrixMap and optionally initialises
-* its attributes.
-*
-* A MatrixMap is a form of Mapping which performs a general linear
-* transformation. Each set of input coordinates, regarded as a
-* column-vector, are pre-multiplied by a matrix (whose elements
-* are specified when the MatrixMap is created) to give a new
-* column-vector containing the output coordinates. If appropriate,
-* the inverse transformation may also be performed.
-
-* Parameters:
-c nin
-f NIN = INTEGER (Given)
-* The number of input coordinates, which determines the number
-* of columns in the matrix.
-c nout
-f NOUT = INTEGER (Given)
-* The number of output coordinates, which determines the number
-* of rows in the matrix.
-c form
-f FORM = INTEGER (Given)
-* An integer which indicates the form in which the matrix
-* elements will be supplied.
-*
-c A value of zero indicates that a full "nout" x "nin" matrix
-f A value of zero indicates that a full NOUT x NIN matrix
-c of values will be supplied via the "matrix" parameter
-f of values will be supplied via the MATRIX argument
-* (below). In this case, the elements should be given in row
-* order (the elements of the first row, followed by the
-* elements of the second row, etc.).
-*
-* A value of 1 indicates that only the diagonal elements of the
-* matrix will be supplied, and that all others should be
-c zero. In this case, the elements of "matrix" should contain
-f zero. In this case, the elements of MATRIX should contain
-* only the diagonal elements, stored consecutively.
-*
-* A value of 2 indicates that a "unit" matrix is required,
-* whose diagonal elements are set to unity (with all other
-c elements zero). In this case, the "matrix" parameter is
-c ignored and a NULL pointer may be supplied.
-f elements zero). In this case, the MATRIX argument is not used.
-c matrix
-f MATRIX( * ) = DOUBLE PRECISION (Given)
-* The array of matrix elements to be used, stored according to
-c the value of "form".
-f the value of FORM.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new MatrixMap. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new MatrixMap. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astMatrixMap()
-f AST_MATRIXMAP = INTEGER
-* A pointer to the new MatrixMap.
-
-* Notes:
-* - In general, a MatrixMap's forward transformation will always
-* be available (as indicated by its TranForward attribute), but
-* its inverse transformation (TranInverse attribute) will only be
-* available if the associated matrix is square and non-singular.
-* - As an exception to this, the inverse transformation is always
-* available if a unit or diagonal matrix is specified. In this
-* case, if the matrix is not square, one or more of the input
-* coordinate values may not be recoverable from a set of output
-* coordinates. Any coordinates affected in this way will simply be
-* set to the value zero.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-
-* Status Handling:
-* The protected interface to this function includes an extra
-* parameter at the end of the parameter list descirbed above. This
-* parameter is a pointer to the integer inherited status
-* variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMatrixMap *new; /* Pointer to new MatrixMap */
- va_list args; /* Variable argument list */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialise the MatrixMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitMatrixMap( NULL, sizeof( AstMatrixMap ), !class_init,
- &class_vtab, "MatrixMap", nin, nout, form, matrix);
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new MatrixMap's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new MatrixMap. */
- return new;
-}
-
-AstMatrixMap *astMatrixMapId_( int nin, int nout, int form, const double matrix[],
- const char *options, ... ) {
-/*
-* Name:
-* astMatrixMapId_
-
-* Purpose:
-* Create a MatrixMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* AstMatrixMap *astMatrixMapId_( int nin, int nout, int form,
-* const double matrix[], const char *options,
-* ... )
-
-* Class Membership:
-* MatrixMap constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astMatrixMap constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astMatrixMap_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astMatrixMap_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astMatrixMap_.
-
-* Returned Value:
-* The ID value associated with the new MatrixMap.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMatrixMap *new; /* Pointer to new MatrixMap */
- va_list args; /* Variable argument list */
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the MatrixMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitMatrixMap( NULL, sizeof( AstMatrixMap ), !class_init, &class_vtab,
- "MatrixMap", nin, nout, form, matrix );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new MatrixMap's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new MatrixMap. */
- return astMakeId( new );
-}
-
-AstMatrixMap *astInitMatrixMap_( void *mem, size_t size, int init,
- AstMatrixMapVtab *vtab, const char *name,
- int nin, int nout, int form,
- const double *matrix, int *status ) {
-/*
-*+
-* Name:
-* astInitMatrixMap
-
-* Purpose:
-* Initialise a MatrixMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* AstMatrixMap *astInitMatrixMap( void *mem, size_t size, int init,
-* AstMatrixMapVtab *vtab, const char *name,
-* int nin, int nout, int form,
-* const double *matrix )
-
-* Class Membership:
-* MatrixMap initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new MatrixMap object. It allocates memory (if necessary) to accommodate
-* the MatrixMap plus any additional data associated with the derived class.
-* It then initialises a MatrixMap structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a MatrixMap at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the MatrixMap is to be initialised.
-* This must be of sufficient size to accommodate the MatrixMap data
-* (sizeof(MatrixMap)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the MatrixMap (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the MatrixMap
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the MatrixMap's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new MatrixMap.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-* nin
-* The number of input coordinate values per point. This is the
-* same as the number of columns in the matrix.
-* nout
-* The number of output coordinate values per point. This is the
-* same as the number of rows in the matrix.
-* form
-* If "form" is 2 or larger, then a unit MatrixMap is created. In this
-* case "matrix" is ignored and can be supplied as NULL. If "form" is
-* 1, then a diagonal MatrixMap is created. In this case, the number of
-* values in "matrix" should be equal to the minimum of nin and nout,
-* and "matrix" should contain the corresponding diagonal terms, in row
-* order. If "form" is 0 or less, then a full MatrixMap is created, and
-* "matrix" should contain all nin*nout element values.
-* matrix
-* A pointer to an array of matrix element values. The values should be
-* supplied in row order. The content of this array is determined by
-* "form". If a full MatrixMap is to be created then the array starts
-* with (row 1, column 1), then comes (row 1, column 2), up to (row 1,
-* column nin), then (row 2, column 1), (row 2, column 2), and so on,
-* finishing with (row nout, column nin) ). An error is reported if a
-* NULL value is supplied unless "form" is 2 or more.
-
-* Returned Value:
-* A pointer to the new MatrixMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstMatrixMap *new; /* Pointer to new MatrixMap */
- double *fmat; /* Pointer to the forward matrix */
- double *imat; /* Pointer to the inverse matrix */
- int i; /* Loop count */
- int nel; /* No. of elements in matrix array */
- int used_form; /* Form limited to 0, 1 or 2 */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitMatrixMapVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Report an error if a NULL matrix was supplied, unless a unit MatrixMap
- has been requested. */
- if( form < 2 && !matrix ){
- astError( AST__MTRMT, "astInitMatrixMap(%s): NULL matrix supplied.", status,
- name );
-
- } else {
-
-/* Initialise a Mapping structure (the parent class) as the first component
- within the MatrixMap structure, allocating memory if necessary. Specify that
- the Mapping should be defined in both the forward and inverse directions. */
- new = (AstMatrixMap *) astInitMapping( mem, size, 0,
- (AstMappingVtab *) vtab, name,
- nin, nout, 1, 1 );
-
- if ( astOK ) {
-
-/* Initialise the MatrixMap data. */
-/* ---------------------------- */
-/* If a unit MatrixMap is being created, then no additional storage is
- required. */
- if( form > 1 ){
- nel = 0;
- used_form = UNIT;
-
-/* If a diagonal MatrixMap is being created, then memory is needed to hold
- the diagonal terms. */
- } else if( form == 1 ){
- if( nin < nout ){
- nel = nin;
- } else {
- nel = nout;
- }
- used_form = DIAGONAL;
-
-/* If a full MatrixMap is being created, then memory is needed to hold
- all the terms. */
- } else {
- nel = nin*nout ;
- used_form = FULL;
- }
-
-/* Allocate memory for the forward matrix, storing the supplied matrix
- values in it. */
- fmat = (double *) astStore( NULL, (void *) matrix,
- sizeof(double)*(size_t)nel );
-/* Replace any NaNs by AST__BAD */
- for( i = 0; i < nel; i++ ) {
- if( astISNAN(fmat[ i ]) ) fmat[ i ] = AST__BAD;
- }
-
-/* Create an inverse matrix if possible. */
- imat = InvertMatrix( used_form, nout, nin, fmat, status );
-
-/* Store the matrix arrays. */
- new->form = used_form;
- new->f_matrix = fmat;
- new->i_matrix = imat;
-
-/* Attempt to compress the MatrixMap into DIAGONAL or UNIT form. */
- CompressMatrix( new, status );
-
-/* If an error occurred, clean up by deleting the new MatrixMap. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return a pointer to the new MatrixMap. */
- return new;
-}
-
-AstMatrixMap *astLoadMatrixMap_( void *mem, size_t size,
- AstMatrixMapVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadMatrixMap
-
-* Purpose:
-* Load a MatrixMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "matrixmap.h"
-* AstMatrixMap *astLoadMatrixMap( void *mem, size_t size,
-* AstMatrixMapVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* MatrixMap loader.
-
-* Description:
-* This function is provided to load a new MatrixMap using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* MatrixMap structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a MatrixMap at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the MatrixMap is to be
-* loaded. This must be of sufficient size to accommodate the
-* MatrixMap data (sizeof(MatrixMap)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the MatrixMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the MatrixMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstMatrixMap) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new MatrixMap. If this is NULL, a pointer
-* to the (static) virtual function table for the MatrixMap class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "MatrixMap" is used instead.
-
-* Returned Value:
-* A pointer to the new MatrixMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-/* Local Variables: */
- AstMatrixMap *new; /* Pointer to the new MatrixMap */
- char buff[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- const char *form; /* String form */
- int def; /* Is the matrix defined? */
- int el; /* Element index */
- int nel; /* No. of elements in the matrix */
- int nin; /* No. of input coords */
- int nout; /* No. of output coords */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this MatrixMap. In this case the
- MatrixMap belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstMatrixMap );
- vtab = &class_vtab;
- name = "MatrixMap";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitMatrixMapVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built MatrixMap. */
- new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "MatrixMap" );
-
-/* Now obtain the Matrix storage form from this list. */
- form = astReadString( channel, "form", Form[FULL] );
- new->form = FindString( 3, Form, form, "the MatrixMap component 'Form'",
- "astRead", astGetClass( channel ), status );
- form = astFree( (void *) form );
-
-/* Find the number of elements stored for each matrix. */
- nin = astGetNin( (AstMapping *) new );
- nout = astGetNout( (AstMapping *) new );
-
- if( new->form == FULL ){
- nel = nin*nout;
-
- } else if( new->form == DIAGONAL ){
- nel = MIN( nin, nout );
-
- } else {
- nel = 0;
- }
-
-/* Allocate memory to hold the forward matrix. */
- new->f_matrix = (double *) astMalloc( sizeof(double)*(size_t)nel );
-
-/* Now read the other data items from the list and use them to
- initialise the appropriate instance variable(s) for this class. */
-
-/* The forward matrix. */
- if( new->f_matrix ){
- def = 0;
-
- for( el = 0; el < nel; el++ ){
- (void) sprintf( buff, "m%d", el );
- (new->f_matrix)[ el ] = astReadDouble( channel, buff, AST__BAD );
- if( (new->f_matrix)[ el ] != AST__BAD ) def = 1;
- }
-
-/* Store a NULL pointer if no elements of the matrix were found. */
- if( !def ) new->f_matrix = (double *) astFree( (void *) new->f_matrix );
-
- }
-
-/* Create an inverse matrix if possible, otherwise store a NULL pointer. */
- if( new->f_matrix ){
- new->i_matrix = InvertMatrix( new->form, nout, nin, new->f_matrix, status );
- } else {
- new->i_matrix = NULL;
- }
-
-/* If an error occurred, clean up by deleting the new MatrixMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new MatrixMap pointer. */
- return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-AstMatrixMap *astMtrRot_( AstMatrixMap *this, double theta,
- const double axis[], int *status ){
- if( !astOK ) return NULL;
- return (**astMEMBER(this,MatrixMap,MtrRot))( this, theta, axis, status );
-}
-
-AstMatrixMap *astMtrMult_( AstMatrixMap *this, AstMatrixMap *a, int *status ){
- if( !astOK ) return NULL;
- return (**astMEMBER(this,MatrixMap,MtrMult))( this, a, status );
-}
-
-
-
-
diff --git a/ast-5.3-1/matrixmap.h b/ast-5.3-1/matrixmap.h
deleted file mode 100644
index 24c6656..0000000
--- a/ast-5.3-1/matrixmap.h
+++ /dev/null
@@ -1,318 +0,0 @@
-#if !defined( MATRIXMAP_INCLUDED ) /* Include this file only once */
-#define MATRIXMAP_INCLUDED
-/*
-*+
-* Name:
-* matrixmap.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the MatrixMap class.
-
-* Invocation:
-* #include "matrixmap.h"
-
-* Description:
-* This include file defines the interface to the MatrixMap class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The MatrixMap class implements Mappings that transform a set of
-* coordinates by multiplying them by a matrix. The inverse transformation
-* can only be applied if the associated matrix is square and non-singular.
-
-* Inheritance:
-* The MatrixMap class inherits from the Mapping class.
-
-* Attributes Over-Ridden:
-* TranForward (integer)
-* A read-only boolean value (0 or 1) which indicates whether a
-* MatrixMap is able to transform coordinates in the "forward"
-* direction (i.e. converting input coordinates into output
-* coordinates).
-* TranInverse (integer)
-* A read-only boolean value (0 or 1) which indicates whether a
-* MatrixMap is able to transform coordinates in the "inverse"
-* direction (i.e. converting output coordinates back into input
-* coordinates).
-
-* New Attributes Defined:
-* None.
-
-* Methods Over-Ridden:
-* Public:
-* None.
-*
-* Protected:
-* astTransform
-* Apply a MatrixMap to transform a set of points.
-* astGetTranForward
-* Determine if a MatrixMap can perform a "forward" coordinate
-* transformation.
-* astGetTranInverse
-* Determine if a MatrixMap can perform an "inverse" coordinate
-* transformation.
-
-* New Methods Defined:
-* Public:
-* None.
-*
-* Protected:
-* astMtrMult
-* Multiply a MatrixMap by another MatrixMap.
-* astMtrRot
-* Rotate a MatrixMap.
-
-* Other Class Functions:
-* Public:
-* astIsAMatrixMap
-* Test class membership.
-* astMatrixMap
-* Create a MatrixMap.
-*
-* Protected:
-* astCheckMatrixMap
-* Validate class membership.
-* astInitMatrixMap
-* Initialise a MatrixMap.
-* astInitMatrixMapVtab
-* Initialise the virtual function table for the MatrixMap class.
-* astLoadMatrixMap
-* Load a MatrixMap.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstMatrixMap
-* MatrixMap object type.
-*
-* Protected:
-* AstMatrixMapVtab
-* MatrixMap virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-
-* History:
-* 12-Feb-1996 (DSB):
-* Original version.
-* 22-Feb-1996 (DSB):
-* Method "astMatrixRotate" added.
-* 5-Mar-1996 (DSB):
-* Method "astMatrixMult" added.
-* 14-NOV-1996 (DSB):
-* External interface and I/O added. Public method names shortened.
-* 3-JUN-1997 (DSB):
-* astMtrMult and astMtrRot made protected instead of public.
-* 8-JAN-2003 (DSB):
-* Added protected astInitMatrixMapVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* MatrixMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstMatrixMap {
-
-/* Attributes inherited from the parent class. */
- AstMapping mapping; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- double *f_matrix; /* Pointer to forward matrix */
- double *i_matrix; /* Pointer to inverse matrix */
- int form; /* Matrix storage form */
-
-} AstMatrixMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstMatrixMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstMappingVtab mapping_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- AstMatrixMap *(* MtrRot)( AstMatrixMap *, double, const double[], int * );
- AstMatrixMap *(* MtrMult)( AstMatrixMap *, AstMatrixMap *, int * );
-
-} AstMatrixMapVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstMatrixMapGlobals {
- AstMatrixMapVtab Class_Vtab;
- int Class_Init;
-} AstMatrixMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitMatrixMapGlobals_( AstMatrixMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(MatrixMap) /* Check class membership */
-astPROTO_ISA(MatrixMap) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstMatrixMap *astMatrixMap_( int, int, int, const double[], const char *, int *, ...);
-#else
-AstMatrixMap *astMatrixMapId_( int, int, int, const double[], const char *, ... )__attribute__((format(printf,5,6)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstMatrixMap *astInitMatrixMap_( void *, size_t, int, AstMatrixMapVtab *,
- const char *, int, int, int, const double[], int * );
-
-/* Vtab initialiser. */
-void astInitMatrixMapVtab_( AstMatrixMapVtab *, const char *, int * );
-
-/* Loader. */
-AstMatrixMap *astLoadMatrixMap_( void *, size_t, AstMatrixMapVtab *,
- const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS) /* Protected */
-AstMatrixMap *astMtrRot_( AstMatrixMap *, double, const double[], int * );
-AstMatrixMap *astMtrMult_( AstMatrixMap *, AstMatrixMap *, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckMatrixMap(this) astINVOKE_CHECK(MatrixMap,this,0)
-#define astVerifyMatrixMap(this) astINVOKE_CHECK(MatrixMap,this,1)
-
-/* Test class membership. */
-#define astIsAMatrixMap(this) astINVOKE_ISA(MatrixMap,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astMatrixMap astINVOKE(F,astMatrixMap_)
-#else
-#define astMatrixMap astINVOKE(F,astMatrixMapId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitMatrixMap(mem,size,init,vtab,name,nin,nout,form,matrix) \
-astINVOKE(O,astInitMatrixMap_(mem,size,init,vtab,name,nin,nout,form,matrix,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitMatrixMapVtab(vtab,name) astINVOKE(V,astInitMatrixMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadMatrixMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadMatrixMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckMatrixMap to validate MatrixMap pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-#define astMtrRot(this,theta,axis) \
-astINVOKE(O,astMtrRot_(astCheckMatrixMap(this),theta,axis,STATUS_PTR))
-
-#define astMtrMult(this,a) \
-astINVOKE(O,astMtrMult_(astCheckMatrixMap(this),astCheckMatrixMap(a),STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/memory.c b/ast-5.3-1/memory.c
deleted file mode 100644
index 550017a..0000000
--- a/ast-5.3-1/memory.c
+++ /dev/null
@@ -1,4699 +0,0 @@
-/*
-* Name:
-* memory.c
-
-* Purpose:
-* Implement memory allocation/deallocation functions.
-
-* Description:
-* This file implements the Memory module which is used for
-* allocating and freeing memory in the AST library. For a
-* description of the module and its interface, see the .h file of
-* the same name.
-
-* Note, it is assumed that malloc, free and realloc are thread-safe.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2009 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: D.S. Berry (Starlink)
-
-* History:
-* 2-JAN-1996 (RFWS):
-* Original version.
-* 26-JAN-1996 (RFWS):
-* Removed trailing underscores from static functions and
-* changed to use new error function interfaces.
-* 20-JUN-1996 (RFWS):
-* Added astString.
-* 15-JUL-1996 (RFWS):
-* Make IsDynamic execute under error conditions to avoid memory
-* leaks in such situations.
-* 11-SEP-1996 (RFWS):
-* Added astStringArray (original written by DSB).
-* 18-MAR-1998 (RFWS):
-* Added notes about these functions being available for writing
-* foreign language and graphics interfaces, etc.
-* 29-JAN-2002 (DSB):
-* Added astChrLen and astSscanf.
-* 15-FEB-2002 (DSB):
-* Removed use of non-ANSI vsscanf from astSscanf.
-* 15-NOV-2002 (DSB):
-* Moved ChrMatch from SkyFrame (etc) to here. Included stdio.h and
-* ctype.h.
-* 10-FEB-2003 (DSB):
-* Added facilities for detecting and tracing memory leaks. These
-* are only included if AST is compiled with the -DDEBUG flag.
-* 3-MAR-2004 (DSB):
-* Modified astSscanf to avoid use of uninitialised values
-* corresponding to "%n" fields in the format string.
-* 26-JAN-2004 (DSB):
-* Modified astRealloc to clarify the nature of the returned pointer
-* (which is not a "Memory *"). Also correct issuing and deissuing
-* of pointers in DEBUG code within astRealloc.
-* 16-FEB-2006 (DSB):
-* Convert Magic from a function to a macro for extra speed.
-* 21-FEB-2006 (DSB):
-* Convert IsDynamic from a function to a macro for extra speed.
-* 23-FEB-2006 (DSB):
-* Added the caching system for allocated but unused memory blocks,
-* controlled by AST tuning parameter MemoryCaching.
-* 2-MAR-2006 (DSB):
-* Added astFlushMemory, and renamed the memory debugging functions.
-* These are now conditionally compiled if the MEM_DEBUG macros is
-* defined (set by configuring AST with the --with-memdebug option).
-* Also modified them to take into account MemoryCaching.
-* 24-MAY-2006 (DSB):
-* Ensure that pointers to memory returned by this module are all
-* aligned on 8 byte boundaries. This fixes problems with ualigned
-* memory access that could cause bus errors on Solaris.
-* 26-MAY-2006 (DSB):
-* Cast (void *) pointers to (char *) before doing arithmetic on
-* them (changes supplied by Micah Johnson).
-* 4-DEC-2006 (DSB):
-* Fix bug in astMalloc that caused a non-null pointer to be
-* returned on error.
-* 4-JAN-2007 (DSB):
-* Move definition of astCLASS macro so that it comes before the
-* inclusion of the AST include files (which test for astCLASS).
-* 27-JUN-2007 (DSB):
-* Added astIsDynamic.
-* 24-OCT-2007 (DSB):
-* Zero the size of memory blocks stored in the Cache so that an
-* error will be reported if an attempt is made to free a memory
-* block that has already been freed.
-* 25-OCT-2007 (DSB):
-* Added astRemoveLeadingBlanks.
-* 28-FEB-2008 (DSB):
-* Added astChrSub.
-* 17-MAR-2008 (DSB):
-* Added "{nnn}" quantifier to astChrSub.
-* 27-MAR-2008 (DSB):
-* Added astChrSplitRE, and re-structured regexp functions.
-* 18-NOV-2008 (DSB):
-* In astFlushMemory, do not release permanent memory blocks as
-* they may still be needed.
-* 9-FEB-2009 (DSB):
-* Added astChr2Double.
-* 25-JUN-2009 (DSB):
-* Fix handling of escape characters in astSplitC.
-*/
-
-/* Configuration results. */
-/* ---------------------- */
-#include <config.h>
-
-/* Module Macros. */
-/* ============== */
-/* Define the astCLASS macro (even although this is not a class
- implementation) to obtain access to the protected error handling
- functions. */
-#define astCLASS memory
-
-/* The maximum number of fields within a format string allowed by astSscanf. */
-#define VMAXFLD 20
-
-/* The maximum number of nested astBeginPM/astEndPM contexts. */
-#define PM_STACK_MAXSIZE 20
-
-/* Select the appropriate memory management functions. These will be the
- system's malloc, free and realloc unless AST was configured with the
- "--with-starmem" option, in which case they will be the starmem
- malloc, free and realloc. */
-#ifdef HAVE_STAR_MEM_H
-# include <star/mem.h>
-# define MALLOC starMalloc
-# define FREE starFree
-# define REALLOC starRealloc
-#else
-# define MALLOC malloc
-# define FREE free
-# define REALLOC realloc
-#endif
-
-
-#ifdef MEM_DEBUG
-#define ISSUED "issued"
-#define FREED "freed"
-#endif
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "error.h" /* Error reporting facilities */
-#include "globals.h" /* Thread-specific global data */
-#include "memory.h" /* Interface to this module */
-#include "pointset.h" /* For AST__BAD */
-
-#ifdef MEM_DEBUG
-#include "object.h" /* For astMakePointer */
-#endif
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <errno.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <limits.h>
-
-#ifdef THREAD_SAFE
-#include <pthread.h>
-#endif
-
-#ifdef MEM_PROFILE
-#include <sys/times.h>
-#endif
-
-/* Function Macros. */
-/* =============== */
-/* These are defined as macros rather than functions to avoid the
- overhead of a function call since they are called extremely frequently. */
-
-/*
-* Name:
-* IS_DYNAMIC
-
-* Purpose:
-* Test whether a memory region has been dynamically allocated.
-
-* Type:
-* Private macro
-
-* Synopsis:
-* #include "memory.h"
-* IS_DYNAMIC( ptr, dynamic )
-
-* Description:
-* This macro takes a pointer to a region of memory and tests if
-* the memory has previously been dynamically allocated using other
-* functions from this module. It does this by checking for the
-* presence of a "magic" number in the header which precedes the
-* allocated memory. If the magic number is not present (or the
-* pointer is invalid for any other reason), an error is reported
-* and the global error status is set.
-*
-* The result of the test is written to the variable specified by "res".
-
-* Parameters:
-* ptr
-* Pointer to the start (as known to the external user) of the
-* dynamically allocated memory.
-* dynamic
-* Name of an "int" variable to recieve the result of the test.
-* If the memory was allocated dynamically, a value of 1 is
-* stored in this variable. Otherwise, zero is stored and an error
-* results.
-
-* Notes:
-* - A NULL pointer value produces an error report from this
-* function, although other functions may wish to regard a NULL
-* pointer as valid.
-* - This function attempts to execute even if the global error
-* status is set, although no further error report will be made if
-* the memory is not dynamically allocated under these
-* circumstances.
-* - The test performed by this function is not 100% secure as the
-* "magic" value could occur by accident (although this is
-* unlikely). It is mainly intended to provide security against
-* programming errors, including accidental corruption of the
-* memory header and attempts to allocate the same region of memory
-* more than once.
-*/
-
-#define IS_DYNAMIC(ptr,dynamic) \
-\
-/* Initialise. */ \
- dynamic = 0; \
-\
-/* Check that a NULL pointer has not been supplied and report an error \
- if it has (but not if the global status is already set). */ \
- if ( !ptr ) { \
- if ( astOK ) { \
- astError( AST__PTRIN, "Invalid NULL pointer (address %p).", status, ptr ); \
- } \
-\
-/* If OK, derive a pointer to the memory header that precedes the \
- allocated region of memory. */ \
- } else { \
- Memory *isdynmem; /* Pointer to memory header */ \
- isdynmem = (Memory *) ( (char *) ptr - SIZEOF_MEMORY ); \
-\
-/* Check if the "magic number" in the header is valid and report an \
- error if it is not (but not if the global status is already \
- set). */ \
- if ( isdynmem->magic != MAGIC( isdynmem, isdynmem->size ) ) { \
- if ( astOK ) { \
- astError( AST__PTRIN, \
- "Invalid pointer or corrupted memory at address %p.", status, \
- ptr ); \
- } \
-\
-/* Note if the magic number is OK. */ \
- } else { \
- dynamic = 1; \
- } \
- }
-
-
-
-/*
-* Name:
-* MAGIC
-
-* Purpose:
-* Generate a "magic number".
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "memory.h"
-* unsigned long MAGIC( void *ptr, size_t size )
-
-* Description:
-* This macro generates a "magic number" which is a function of
-* a memory address and an object size. This number may be stored
-* in a region of dynamically allocated memory to allow it to be
-* recognised as dynamically allocated by other routines, and also
-* to provide security against memory leaks, etc.
-
-* Parameters:
-* ptr
-* The memory pointer.
-* size
-* The object size.
-
-* Returned Value:
-* The function returns the magic number.
-
-* Notes:
-* This function does not perform error checking.
-*/
-
-/* Form the bit-wise exclusive OR between the memory address and the
- object size, then add 1 and invert the bits. Return the result as
- an unsigned long integer. */
-#define MAGIC(ptr,size) \
- ( ~( ( ( (unsigned long) ptr ) ^ ( (unsigned long) size ) ) + \
- ( (unsigned long) 1 ) ) )
-
-/* A macro that returns the size of the a Memory structure padded to a
- multiple of 8 bytes. */
-#define SIZEOF_MEMORY \
- ( ( sizeof_memory != 0 ) ? sizeof_memory : SizeOfMemory( status ) )
-
-
-/* Type Definitions. */
-/* ================= */
-
-#ifdef MEM_PROFILE
-
-/* Structure used to record the time spent between matching calls to
- astStartTimer and astStopTimer. */
-typedef struct AstTimer {
- int id; /* Unique integer identifier for timer */
- clock_t e0; /* Absolute elapsed time at timer start */
- clock_t u0; /* Absolute user time at timer start */
- clock_t s0; /* Absolute system time at timer start */
- clock_t et; /* Cumulative elapsed time within timer */
- clock_t ut; /* Cumulative user time within timer */
- clock_t st; /* Cumulative system time within timer */
- int nentry; /* Number of entries into the timer */
- const char *name; /* An identifying label for the timer */
- const char *file; /* Name of source file where timer was started */
- int line; /* Source file line no. where timer was started */
- struct AstTimer *parent; /* The parent enclosing timer */
- int nchild; /* Number of child timers */
- struct AstTimer **children;/* Timers that count time within this timer */
-} AstTimer;
-
-#endif
-
-/* Module Variables. */
-/* ================= */
-
-/* Extra stuff for profiling (can only be used in single threaded
- environments). */
-#ifdef MEM_PROFILE
-static AstTimer *Current_Timer = NULL;
-static int Enable_Timers = 0;
-static int Timer_Count = 0;
-#endif
-
-/* Extra stuff for debugging of memory management (tracking of leaks
- etc). */
-#ifdef MEM_DEBUG
-
-/* The identifier for the memory block which is to be tracked. */
-static int Watched_ID = -1;
-
-/* The next integer to use to identify an active memory block pointer. */
-static int Next_ID = -1;
-
-/* Indicates if future memory allocations are permanent (i.e. will not
- usually be freed explicitly by AST). */
-static int Perm_Mem = 0;
-
-/* A "first in, last out" stack of Perm_Mem values used by nested
- astBeginPM/astEndPM contexts. */
-static int PM_Stack[ PM_STACK_MAXSIZE ];
-
-/* The number of values currently in the PM_Stack array. */
-static int PM_Stack_Size = 0;
-
-/* A pointer to a double linked list holding pointers to currently active
- memory blocks (i.e. memory blocks for which a pointer has been issued
- but not yet freed). This does not include the memory blocks in the
- Cache array (these are not considered to be active). */
-static Memory *Active_List = NULL;
-
-/* Should a new ID be issued each time a cached memory block is returned
- by astMalloc? Otherwise, the same ID value is used throughtout the
- life of a memory block. */
-static int Keep_ID = 0;
-
-/* Suppress all memory use reports except for issuing and freeing? */
-static int Quiet_Use = 0;
-
-/* Report the ID of every cached block when the cache is emptied? */
-static int List_Cache = 0;
-
-#ifdef THREAD_SAFE
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_DEBUG_MUTEX pthread_mutex_lock( &mutex2 );
-#define UNLOCK_DEBUG_MUTEX pthread_mutex_unlock( &mutex2 );
-#else
-#define LOCK_DEBUG_MUTEX
-#define UNLOCK_DEBUG_MUTEX
-#endif
-
-#endif
-
-/* Define macros for accessing all items of thread-safe global data
- used by this module. */
-#ifdef THREAD_SAFE
-
-#define sizeof_memory astGLOBAL(Memory,Sizeof_Memory)
-#define cache astGLOBAL(Memory,Cache)
-#define cache_init astGLOBAL(Memory,Cache_Init)
-#define use_cache astGLOBAL(Memory,Use_Cache)
-
-/* Define the initial values for the global data for this module. */
-#define GLOBAL_inits \
- globals->Sizeof_Memory = 0; \
- globals->Cache_Init = 0; \
- globals->Use_Cache = 0; \
-
-/* Create the global initialisation function. */
-astMAKE_INITGLOBALS(Memory)
-
-/* If thread safety is not needed, declare globals at static variables. */
-/* -------------------------------------------------------------------- */
-#else
-
-/* The size of a Memory header structure, padded to a multiple of 8
- bytes. This value is initialised by the SizeOfMemory function, and
- should be accessed using the SIZEOF_MEMORY macro. */
-static size_t sizeof_memory = 0;
-
-/* A cache of allocated but currently unused memory block. This cache is
- maintained in order to avoid the overhead of continual calls to malloc to
- allocate small blocks of memory. The vast majority of memory blocks
- allocated by AST are under 200 bytes in size. Each element in this array
- stores a pointer to the header for a free (i.e. allocated but currently
- unused) memory block. The size of the memory block (not including the
- Memory header) will equal the index at which the pointer is stored within
- "cache". Each free memory block contains (in its Memory header) a pointer
- to the header for another free memory block of the same size (or a NULL
- pointer if there are no other free memory blocks of the same size). */
-static Memory *cache[ MXCSIZE + 1 ];
-
-/* Has the "cache" array been initialised? */
-static int cache_init = 0;
-
-/* Should the cache be used? */
-static int use_cache = 0;
-
-#endif
-
-/* Prototypes for Private Functions. */
-/* ================================= */
-static size_t SizeOfMemory( int * );
-static char *CheckTempStart( const char *, const char *, const char *, char *, int *, int *, int *, int *, int *, int *, int *, int * );
-static char *ChrMatcher( const char *, const char *, const char *, const char *, const char *[], int, int, int, char ***, int *, const char **, int * );
-static char *ChrSuber( const char *, const char *, const char *[], int, int, char ***, int *, const char **, int * );
-
-#ifdef MEM_DEBUG
-static void Issue( Memory *, int * );
-static void DeIssue( Memory *, int * );
-#endif
-
-#ifdef MEM_PROFILE
-static AstTimer *ReportTimer( AstTimer *, int, AstTimer **, int *, int * );
-static int CompareTimers( const void *, const void * );
-static int CompareTimers2( const void *, const void * );
-#endif
-
-/* Function implementations. */
-/* ========================= */
-char *astAppendString_( char *str1, int *nc, const char *str2, int *status ) {
-/*
-*+
-* Name:
-* astAppendString
-
-* Purpose:
-* Append a string to another string which grows dynamically.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* char *astAppendString( char *str1, int *nc, const char *str2 )
-
-* Description:
-* This function appends one string to another dynamically
-* allocated string, extending the dynamic string as necessary to
-* accommodate the new characters (plus the final null).
-
-* Parameters:
-* str1
-* Pointer to the null-terminated dynamic string, whose memory
-* has been allocated using the AST memory allocation functions
-* defined in "memory.h". If no space has yet been allocated for
-* this string, a NULL pointer may be given and fresh space will
-* be allocated by this function.
-* nc
-* Pointer to an integer containing the number of characters in
-* the dynamic string (excluding the final null). This is used
-* to save repeated searching of this string to determine its
-* length and it defines the point where the new string will be
-* appended. Its value is updated by this function to include
-* the extra characters appended.
-*
-* If "str1" is NULL, the initial value supplied for "*nc" will
-* be ignored and zero will be used.
-* str2
-* Pointer to a constant null-terminated string, a copy of which
-* is to be appended to "str1".
-
-* Returned Value:
-* A possibly new pointer to the dynamic string with the new string
-* appended (its location in memory may have to change if it has to
-* be extended, in which case the original memory is automatically
-* freed by this function). When the string is no longer required,
-* its memory should be freed using astFree.
-
-* Notes:
-* - If this function is invoked with the global error status set
-* or if it should fail for any reason, then the returned pointer
-* will be equal to "str1" and the dynamic string contents will be
-* unchanged.
-*-
-*/
-
-/* Local Variables: */
- char *result; /* Pointer value to return */
- int len; /* Length of new string */
-
-/* Initialise. */
- result = str1;
-
-/* If the first string pointer is NULL, also initialise the character
- count to zero. */
- if ( !str1 ) *nc = 0;
-
-/* Check the global error status. */
- if ( !astOK || !str2 ) return result;
-
-/* Calculate the total string length once the two strings have been
- concatenated. */
- len = *nc + (int) strlen( str2 );
-
-/* Extend the first (dynamic) string to the required length, including
- a final null. Save the resulting pointer, which will be
- returned. */
- result = astGrow( str1, len + 1, sizeof( char ) );
-
-/* If OK, append the second string and update the total character
- count. */
- if ( astOK ) {
- (void) strcpy( result + *nc, str2 );
- *nc = len;
- }
-
-/* Return the result pointer. */
- return result;
-}
-
-static char *CheckTempStart( const char *template, const char *temp,
- const char *pattern,
- char *allowed, int *ntemp, int *allow,
- int *min_nc, int *max_nc, int *start_sub,
- int *end_sub, int *greedy, int *status ){
-/*
-* Name:
-* CheckTempStart
-
-* Purpose:
-* Examine the leading field in an astChrSub template.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* char *CheckTempStart( const char *template, const char *temp,
-* const char *pattern,
-* char *allowed, int *ntemp, int *allow,
-* int *min_nc, int *max_nc, int *start_sub,
-* int *end_sub, int *greedy, int *status )
-
-* Description:
-* This function returns inforation about the leading field in a
-* template string supplied to astChrSub.
-
-* Parameters:
-* template
-* The full template string (used for error messages).
-* temp
-* Pointer to the next character to read from the template string.
-* pattern
-* Pointer to the user supplied pattern string (only used in error
-* messages).
-* allowed
-* Pointer to a buffer in which to store a string of characters
-* that the leading temeplate field will match. A NULL pointer may
-* be supplied in which case new memory will be allocated. The
-* supplied memory is expanded as necessary, and a pointer to it is
-* returned as the function value.
-* ntemp
-* Address of an int in which to return the number of characters
-* consumed from the start of "temp".
-* allow
-* Address of an int in which to return a flag which is non-zero if
-* the returned string contains characters that are allowed in the
-* test field, or zero if the returned string contains characters that
-* are disallowed in the test field.
-* min_nc
-* Address of an int in which to return the minimum number of
-* test characters that must belong to the returned set of
-* allowed characters.
-* max_nc
-* Address of an int in which to return the maximum number of
-* test characters that must belong to the returned set of
-* allowed characters.
-* start_sub
-* Address of an int in which to return a flag which is non-zero if
-* the leading template field indicates the start of a field to be
-* substituted. In this case the supplied "allowed" pointer is
-* returned without change as the function value, "Min_nc" is
-* returned as zero, and max_nc is returned as zero.
-* end_sub
-* Address of an int in which to return a flag which is non-zero if
-* the leading template field indicates the end of a field to be
-* substituted. In this case the supplied "allowed" pointer is
-* returned without change as the function value, "Min_nc" is
-* returned as zero, and limit is returned as zero.
-* greedy
-* Address of an int in which to return a flag which is non-zero if
-* the template starts with a greedy quantifier.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a (possibly newly allocated) memory area holding a
-* string of characters that the leading temeplate field will match.
-* This string should be released using astFree when no longer needed.
-* If a NULL pointyer is returned, then all characters are allowed
-* (or disallowed if "*allow" is zero).
-
-* Notes:
-* - The returned value is also stored in the module variable
-* sizeof_memory.
-*/
-
-/* Local Variables: */
- char *result;
- const char *start;
- const char *end;
-
-/* Initialise. */
- result = allowed;
- *ntemp = 0;
- *allow = 1;
- *min_nc = 0;
- *max_nc = 0;
- *start_sub = 0;
- *end_sub = 0;
- *greedy = 1;
-
-/* Check global status */
- if( !astOK ) return result;
-
-/* If the next character is an opening parenthesis, this marks the start
- of a substitution field. */
- if( *temp == '(' ) {
- *start_sub = 1;
- *ntemp = 1;
-
-/* If the next character is an closing parenthesis, this marks the end
- of a substitution field. */
- } else if( *temp == ')' ) {
- *end_sub = 1;
- *ntemp = 1;
-
-/* If the next character is an opening bracket, this marks the start of a
- field of allowed or disallowed characters. */
- } else {
- if( *temp == '[' ) {
-
-/* If the first character in the brackets is "^" this is a field of
- disallowed characters, otherwise they are allowed. */
- if( temp[ 1 ] == '^' ) {
- *allow = 0;
- start = temp + 2;
- } else {
- start = temp + 1;
- }
-
-/* Get a pointer to the closing bracket. */
- end = strchr( temp, ']' );
-
-/* Copy the intervening string into the returned string. */
- if( end ) {
- result = astStore( allowed, start, end - start + 1 );
- if( result ) result[ end - start ] = 0;
-
-/* Report an error if no closing bracket was found. */
- } else {
- astError( AST__BADSUB, "Invalid pattern matching template \"%s\": "
- "missing ']'.", status, pattern );
- }
-
-/* Indicate how many template characters have been used. */
- *ntemp = end - temp + 1;
-
-/* A single dot matches any character. */
- } else if( *temp == '.' ) {
- result = astFree( result );
- *ntemp = 1;
-
-/* Now deal with escape sequences. */
- } else if( *temp == '\\' ) {
-
-/* Digits... */
- if( temp[ 1 ] == 'd' || temp[ 1 ] == 'D' ) {
- result = astStore( allowed, "0123456789", 11 );
- result[ 10 ] = 0;
- if( temp[ 1 ] == 'D' ) *allow = 0;
-
-/* White space... */
- } else if( temp[ 1 ] == 's' || temp[ 1 ] == 'S' ) {
- result = astStore( allowed, " \n\r", 5 );
- result[ 4 ] = 0;
- if( temp[ 1 ] == 'S' ) *allow = 0;
-
-/* Word characters... */
- } else if( temp[ 1 ] == 'w' || temp[ 1 ] == 'W' ) {
- result = astStore( allowed, "abcdefghijklmnopqrstuvwxyz"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
- 64 );
- result[ 63 ] = 0;
- if( temp[ 1 ] == 'W' ) *allow = 0;
-
-/* Any other character is treated literally. */
- } else {
- result = astStore( allowed, temp + 1, 2 );
- result[ 1 ] = 0;
- }
-
-/* Set number of template characters consumed. */
- *ntemp = 2;
-
-/* Everything else must be matched literally. */
- } else {
-
- if( *temp == '*' || *temp == '?' || *temp == '+' ){
- astError( AST__BADSUB, "Invalid pattern matching template \"%s\": "
- "field starts with '%c'.", status, pattern, temp[ *ntemp ] );
- } else {
- result = astStore( allowed, temp, 2 );
- result[ 1 ] = 0;
- *ntemp = 1;
- }
-
- }
-
-/* Now see if there is any quantifier. */
- if( temp[ *ntemp ] == '*' ) {
- *min_nc = 0;
- *max_nc = INT_MAX;
- (*ntemp)++;
- if( temp[ *ntemp ] == '?' ){
- *greedy = 0;
- (*ntemp)++;
- }
-
- } else if( temp[ *ntemp ] == '+' ) {
- *min_nc = 1;
- *max_nc = INT_MAX;
- (*ntemp)++;
- if( temp[ *ntemp ] == '?' ){
- *greedy = 0;
- (*ntemp)++;
- }
-
- } else if( temp[ *ntemp ] == '?' ) {
- *min_nc = 0;
- *max_nc = 1;
- (*ntemp)++;
-
- } else {
-
-/* See if the remaining string starts with "{nnn}". If so, extract the
- "nnn" and use it as the minimum and maximum field length. */
- if( temp[ *ntemp ] == '{' ) {
-
- start = temp + *ntemp + 1;
- while( isdigit( (int) *start ) ) {
- *min_nc = 10*( *min_nc ) + (int )( ( *start ) - '0' );
- start++;
- }
-
- if( *start == '}' ) {
- *max_nc = *min_nc;
- *ntemp = start - temp + 1;
- } else {
- start = NULL;
- }
-
- } else {
- start = NULL;
- }
-
-/* If the remaining string does not start with "{nnn}", use a minimum and
- maximum field length of 1. */
- if( !start ) {
- *min_nc = 1;
- *max_nc = 1;
- }
- }
- }
-
-/* Return the string of allowed characters. */
- return result;
-}
-
-double astChr2Double_( const char *str, int *status ) {
-/*
-*+
-* Name:
-* astChr2Double
-
-* Purpose:
-* read a double value from a string.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* double astChr2Double( const char *str )
-
-* Description:
-* This function reads a double from the supplied null-terminated string,
-* ignoring leading and trailing white space. AST__BAD is ereturned
-* without error if the string is not a numerical value.
-
-* Parameters:
-* str
-* Pointer to the string.
-
-* Returned Value:
-* The double value, or AST__BAD.
-
-* Notes:
-* - A value of AST__BAD is returned if this function is invoked with
-* the global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- int nc; /* Number of characters read from the string */
- double result; /* The returned value */
-
-/* Check the global error status and supplied pointer. */
- if ( !astOK || !str ) return AST__BAD;
-
-/* Use scanf to read the floating point value. This fails if either 1) the
- string does not begin with a numerical value (in which case astSscanf
- returns zero), or 2) there are non-white characters following the
- numerical value (i nwhich case "nc" - the number of characters read from
- the string - is less than the length of the string). */
- if ( nc = 0,
- ( 1 != astSscanf( str, " %lg %n", &result, &nc ) )
- || ( nc < strlen( str ) ) ) {
- result = AST__BAD;
- }
-
-/* Return the result. */
- return result;
-}
-
-int astChrMatch_( const char *str1, const char *str2, int *status ) {
-/*
-*+
-* Name:
-* astChrMatch
-
-* Purpose:
-* Case insensitive string comparison.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* int astChrMatch( const char *str1, const char *str2 )
-
-* Description:
-* This function compares two null terminated strings for equality,
-* discounting differences in case and any trailing white space in either
-* string.
-
-* Parameters:
-* str1
-* Pointer to the first string.
-* str2
-* Pointer to the second string.
-
-* Returned Value:
-* Non-zero if the two strings match, otherwise zero.
-
-* Notes:
-* - A value of zero is returned if this function is invoked with the
-* global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- int match; /* Strings match? */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Initialise. */
- match = 1;
-
-/* Loop to compare characters in the two strings until a mis-match occurs or
- we reach the end of the longer string. */
- while ( match && ( *str1 || *str2 ) ) {
-
-/* Two characters match if (a) we are at the end of one string and the other
- string contains white space or (b) both strings contain the same character
- when converted to lower case. */
- match = ( !*str1 && isspace( *str2 ) ) ||
- ( !*str2 && isspace( *str1 ) ) ||
- ( tolower( *str1 ) == tolower( *str2 ) );
-
-/* Step through each string a character at a time until its end is reached. */
- if ( *str1 ) str1++;
- if ( *str2 ) str2++;
- }
-
-/* Return the result. */
- return match;
-}
-
-int astChrMatchN_( const char *str1, const char *str2, size_t n, int *status ) {
-/*
-*+
-* Name:
-* astChrMatchN
-
-* Purpose:
-* Case insensitive string comparison of at most N characters
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* int astChrMatchN( const char *str1, const char *str2, size_t n )
-
-* Description:
-* This function compares two null terminated strings for equality,
-* discounting differences in case and any trailing white space in either
-* string. No more than "n" characters are compared.
-
-* Parameters:
-* str1
-* Pointer to the first string.
-* str2
-* Pointer to the second string.
-* n
-* Maximum number of characters to compare.
-
-* Returned Value:
-* Non-zero if the two strings match, otherwise zero.
-
-* Notes:
-* - A value of zero is returned if this function is invoked with the
-* global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- int match; /* Strings match? */
- int nc; /* Number of characters compared so far */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Initialise. */
- match = 1;
-
-/* So far we have compared zero characters */
- nc = 0;
-
-/* Loop to compare characters in the two strings until a mis-match occurs or
- we reach the end of the longer string, or we reach the specified
- maximum number of characters. */
- while ( match && ( *str1 || *str2 ) && nc++ < n ) {
-
-/* Two characters match if (a) we are at the end of one string and the other
- string contains white space or (b) both strings contain the same character
- when converted to lower case. */
- match = ( !*str1 && isspace( *str2 ) ) ||
- ( !*str2 && isspace( *str1 ) ) ||
- ( tolower( *str1 ) == tolower( *str2 ) );
-
-/* Step through each string a character at a time until its end is reached. */
- if ( *str1 ) str1++;
- if ( *str2 ) str2++;
- }
-
-/* Return the result. */
- return match;
-}
-
-char **astChrSplit_( const char *str, int *n, int *status ) {
-/*
-*+
-* Name:
-* astChrSplit
-
-* Purpose:
-* Extract words from a supplied string.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* char **astChrSplit_( const char *str, int *n )
-
-* Description:
-* This function extracts all space-separated words form the supplied
-* string and returns them in an array of dynamically allocated strings.
-
-* Parameters:
-* str
-* Pointer to the string to be split.
-* n
-* Address of an int in which to return the number of words returned.
-
-* Returned Value:
-* A pointer to a dynamically allocated array containing "*n" elements.
-* Each element is a pointer to a dynamically allocated character
-* string containing a word extracted from the supplied string. Each
-* of these words will have no leading or trailing white space.
-
-* Notes:
-* - A NULL pointer is returned if this function is invoked with the
-* global error status set or if it should fail for any reason, or if
-* the supplied string contains no words.
-*-
-*/
-
-/* Local Variables: */
- char **result;
- char *w;
- const char *p;
- const char *ws;
- int first;
- int state;
- int wl;
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise. */
- result = NULL;
- ws = NULL;
- *n = 0;
-
-/* State 0 is "looking for the next non-white character which marks the
- start of the next word". State 1 is "looking for the next white character
- which marks the end of the current word". */
- state = 0;
-
-/* Loop through all characters in the supplied string, including the
- terminating null. */
- p = str - 1;
- first = 1;
- while( *(p++) || first ) {
- first = 0;
-
-/* If this is the terminating null or a space, and we are currently looking
- for the end of a word, allocate memory for the new word, copy the text
- in, terminate it, extend the returned array by one element, and store
- the new word in it. */
- if( !*p || isspace( *p ) ) {
- if( state == 1 ) {
- wl = p - ws;
- w = astMalloc( wl + 1 );
- if( w ) {
- strncpy( w, ws, wl );
- w[ wl ] = 0;
- result = astGrow( result, *n + 1, sizeof( char * ) );
- if( result ) result[ (*n)++ ] = w;
- }
- state = 0;
- }
-
-/* If this is non-blank character, and we are currently looking for the
- start of a word, note the address of the start of the word, and
- indicate that we are now looking for the end of a word. */
- } else {
- if( state == 0 ) {
- state = 1;
- ws = p;
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-char **astChrSplitC_( const char *str, char c, int *n, int *status ) {
-/*
-*+
-* Name:
-* astChrSplitC
-
-* Purpose:
-* Split a string using a specified character delimiter.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* char **astChrSplitC( const char *str, char c, int *n )
-
-* Description:
-* This function extracts all sub-strings separated by a given
-* character from the supplied string and returns them in an array
-* of dynamically allocated strings. The delimiter character itself
-* is not included in the returned strings.
-*
-* Delimiter characters that are preceeded by "\" are not used as
-* delimiters but are included in the returned word instead (without
-* the "\").
-
-* Parameters:
-* str
-* Pointer to the string to be split.
-* c
-* The delimiter character.
-* n
-* Address of an int in which to return the number of words returned.
-
-* Returned Value:
-* A pointer to a dynamically allocated array containing "*n" elements.
-* Each element is a pointer to a dynamically allocated character
-* string containing a word extracted from the supplied string.
-
-* Notes:
-* - A NULL pointer is returned if this function is invoked with the
-* global error status set or if it should fail for any reason, or if
-* the supplied string contains no words.
-*-
-*/
-
-/* Local Variables: */
- char **result;
- char *word;
- const char *p;
- int escaped;
- int wordlen;
-
-/* Initialise returned values. */
- *n = 0;
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* More initialisations. */
- word = NULL;
- wordlen = 0;
- escaped = 0;
-
-/* Loop through all characters in the supplied string, including the
- terminating null. */
- p = str;
- while( *p ) {
-
-/* Is this a delimiter character? */
- if( *p == c ) {
-
-/* If it is escaped, it does not mark the end of a word. Put it into the
- current output buffer instead, overwriting the escape character that
- preceeded it. */
- if( escaped ) {
- word[ wordlen - 1 ] = c;
-
-/* The next character is not escaped. */
- escaped = 0;
-
-/* If the delimiter is not escaped, terminate the current word and store
- a pointer to it in the returned array. */
- } else {
- result = astGrow( result, *n + 1, sizeof( char * ) );
- word = astGrow( word, wordlen + 1, 1 );
- if( result && word ) {
- word[ wordlen ] = 0;
- result[ (*n)++ ] = word;
- wordlen = 0;
- word = NULL;
- }
- }
-
-/* If this is not a delimitier character, store it in the returned word. */
- } else {
- word = astGrow( word, wordlen + 1, 1 );
- if( word ) word[ wordlen++ ] = *p;
-
-/* If the current character was escaped, indicate that the next character
- is not escaped. */
- if( escaped ) {
- escaped = 0;
-
-/* If this character is a unescaped backslash, set a flag indicating that the
- next character is escaped. */
- } else if( *p == '\\' ){
- escaped = 1;
- }
- }
-
-/* Move on to the next character. */
- p++;
- }
-
-/* Store the text following the final delimitier. */
- result = astGrow( result, *n + 1, sizeof( char * ) );
- word = astGrow( word, wordlen + 1, 1 );
- if( result && word ) {
- word[ wordlen ] = 0;
- result[ (*n)++ ] = word;
- }
-
-/* Return the result. */
- return result;
-}
-
-char **astChrSplitRE_( const char *str, const char *regexp, int *n,
- const char **matchend, int *status ) {
-/*
-*+
-* Name:
-* astChrSplitRE
-
-* Purpose:
-* Extract sub-strings matching a specified regular expression.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* char **astChrSplitRE( const char *str, const char *regexp, int *n,
-* const char **matchend )
-
-* Description:
-* This function compares the supplied string with the supplied
-* regular expression. If they match, each section of the test string
-* that corresponds to a parenthesised sub-string in the regular
-* expression is copied and stored in the returned array.
-
-* Parameters:
-* str
-* Pointer to the string to be split.
-* regexp
-* The regular expression. See "Template Syntax:" in the astChrSub
-* prologue. Note, this function differs from astChrSub in that any
-* equals signs (=) in the regular expression are treated literally.
-* n
-* Address of an int in which to return the number of sub-strings
-* returned.
-* matchend
-* A pointer to a location at which to return a pointer to the
-* character that follows the last character within the supplied test
-* string that matched any parenthesises sub-section of "regexp". A
-* NULL pointer is returned if no matches were found. A NULL pointer
-* may be supplied if the location of the last matching character is
-* not needed.
-
-* Returned Value:
-* A pointer to a dynamically allocated array containing "*n" elements.
-* Each element is a pointer to a dynamically allocated character
-* string containing a sub-string extracted from the supplied string.
-* The array itself, and the strings within it, should all be freed
-* using astFree when no longer needed.
-
-* Notes:
-* - If a parenthesised sub-string in the regular expression is matched
-* by more than one sub-string within the test string, then only the
-* first is returned. To return multiple matches, the regular
-* expression should include multiple copies of the parenthesised
-* sub-string (for instance, separated by ".+?" if the intervening
-* string is immaterial).
-* - A NULL pointer is returned if this function is invoked with the
-* global error status set or if it should fail for any reason, or if
-* the supplied string contains no words.
-*-
-*/
-
-/* Local Variables: */
- char **result;
- char *temp;
- int i;
-
-/* Initialise returned values. */
- *n = 0;
- result = NULL;
-
-/* Check global status */
- if( !astOK ) return result;
-
-/* Call ChrSuber to do the work, saving the matching parts of the test
- string. */
- temp = ChrSuber( str, regexp, NULL, 0, 1, &result, n, matchend, status );
- if( temp ) {
- temp = astFree( temp );
-
-/* Free all results if no match was found. */
- } else if( result ) {
- for( i = 0; i < *n; i++ ) result[ i ] = astFree( result[ i ] );
- result = astFree( result );
- *n = 0;
- }
-
-/* Return the result */
- return result;
-}
-
-char *ChrSuber( const char *test, const char *pattern, const char *subs[],
- int nsub, int ignore_equals, char ***parts, int *npart,
- const char **matchend, int *status ){
-/*
-* Name:
-* ChrSuber
-
-* Purpose:
-* Performs substitutions on a supplied string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "memory.h"
-* char *ChrSuber( const char *test, const char *pattern,
-* const char *subs[], int nsub, int ignore_equals,
-* char ***parts, int *npart, const char **matchend,
-* int *status )
-
-* Description:
-* This function performs the work for astChrSub and astChrSplitRE.
-
-* Parameters:
-* test
-* The string to be tested.
-* pattern
-* The template string. See "Template Syntax:" in the astChrSub
- prologue.
-* subs
-* An array of strings that are to replace the sections of the test
-* string that match each parenthesised sub-string in "pattern". The
-* first element of "subs" replaces the part of the test string that
-* matches the first parenthesised sub-string in the template, etc.
-*
-* If "nsub" is zero, then the "subs" pointer is ignored. In this
-* case, and if parameter "ignore_equals" is zero, substitution strings
-* may be specified by appended them to the end of the "pattern" string,
-* separated by "=" characters
-* nsub
-* The number of substitution strings supplied in array "subs".
-* ignore_equals
-* If non-zero, any equals signs in the supplied pattern are
-* treated literally, rather than being used to split the template
-* from any substitution strigs.
-* parts
-* Address of a location at which to return a pointer to an array
-* of character string pointers. The strings are the sub-sections
-* of "test" that matched the parenthesised sub-sections of
-* "template". The array will have "*npart" elements. Ignored if NULL.
-* npart
-* Address of a location at which to return the length of the
-* "parts" array. Ignored if "parts" is NULL.
-* matchend
-* A pointer to a location at which to return a pointer to the
-* character that follows the last character within the supplied test
-* string that matched any parenthesises sub-section of "regexp". A
-* NULL pointer is returned if no matches were found. A NULL pointer
-* may be supplied if the location of the last matching character is
-* not needed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated string holding the result
-* of the substitutions, or NULL if the test string does not match
-* the template string. This string should be freed using astFree
-* when no longer needed. If no substituions are specified then a
-* copy of the test string is returned if it matches the template.
-
-* Notes:
-* - A NULL pointer is returned if this function is invoked with the
-* global error status set or if it should fail for any reason, or if
-* the supplied test string does not match the template.
-
-*/
-
-/* Local Variables: */
- char **sections;
- char **temps;
- char *cptr;
- char *result;
- char *temp;
- char *template;
- int i;
- int nsec;
- int ntemp;
- size_t tlen;
-
-/* Initialise */
- result = NULL;
- if( parts ) *npart = 0;
-
-/* Check global status */
- if( !astOK ) return result;
-
-/* If required, split the total "pattern" string into sections, using
- (unescaped) "=" characters as the delimiter. The first section is the
- actual template, and each subsequent section (if any) holds a
- substitution string. */
- if( ! ignore_equals ) {
- sections = astChrSplitC( pattern, '=', &nsec );
-
-/* If equals signs are being treated literally, just take a copy of the
- supplied pattern. */
- } else {
- cptr = astStore( NULL, pattern, strlen( pattern ) + 1 );
- sections = &cptr;
- nsec = 1;
- }
-
- if( sections ) {
-
-/* If the caller did not provide any substitution strings, use the ones
- appended to the end of the pattern string (if any). */
- if( nsub == 0 ) {
- subs = (void *) ( sections + 1 );
- nsub = nsec - 1;
- }
-
-/* Split the template section into sub-sections, using (unescaped) "|"
- characters as the delimiter. Each sub-section is an alternate pattern
- matching template. */
- temps = astChrSplitC( sections[ 0 ], '|', &ntemp );
-
- } else {
- temps = 0;
- ntemp = 0;
- }
-
-/* Loop round each template until all templates have been checked or a
- match occurs.. */
- for( i = 0; i < ntemp && !result; i++ ) {
- temp = temps[ i ];
- tlen = strlen( temp );
-
-/* If the template starts with "^" or "(^", remove the "^" character.
- Otherwise insert ".*?" at the start. Allocate three extra characters
- in case we later need to add ".*?" to the end of the string. */
- if( temp[ 0 ] == '^' ) {
- template = astMalloc( tlen + 3 );
- if( template ) {
- strcpy( template, temp + 1 );
- tlen--;
- }
-
- } else if( temp[ 0 ] == '(' && temp[ 1 ] == '^') {
- template = astMalloc( tlen + 3 );
- if( template ) {
- template[ 0 ] = '(';
- strcpy( template + 1, temp + 2 );
- tlen--;
- }
-
- } else {
- template = astMalloc( tlen + 7 );
- if( template ) {
- template[ 0 ] = '.';
- template[ 1 ] = '*';
- template[ 2 ] = '?';
- strcpy( template + 3, temp );
- tlen += 3;
- }
- }
-
-/* If the pattern ends with "$" or "$)", remove the "$" character. Otherwise
- insert ".*?" at the end. */
- if( template[ tlen - 1 ] == '$' ) {
- tlen--;
-
- } else if( template[ tlen - 2 ] == '$' && template[ tlen - 1 ] == ')' ) {
- template[ tlen - 2 ] = ')';
- tlen--;
-
- } else {
- template[ tlen ] = '.';
- template[ tlen + 1 ] = '*';
- template[ tlen + 2 ] = '?';
- tlen += 3;
- }
-
-/* Ensure the string is terminated */
- template[ tlen ] = 0;
-
-/* See if the test string matches the current template. */
- result = ChrMatcher( test, test + strlen( test ), template, pattern,
- subs, nsub, 0, 1, parts, npart, matchend, status );
-
-/* Free resources. */
- template = astFree( template );
- }
-
- if( temps ) {
- for( i = 0; i < ntemp; i++ ) temps[ i ] = astFree( temps[ i ] );
- temps = astFree( temps );
- }
-
- if( sections ) {
- for( i = 0; i < nsec; i++ ) sections[ i ] = astFree( sections[ i ] );
- if( ! ignore_equals ) sections = astFree( sections );
- }
-
-/* Return a NULL pointer if an error has occurred. */
- if( !astOK ) result = astFree( result );
-
-/* Return the result */
- return result;
-}
-
-char *astChrSub_( const char *test, const char *pattern, const char *subs[],
- int nsub, int *status ){
-/*
-*+
-* Name:
-* astChrSub
-
-* Purpose:
-* Performs substitutions on a supplied string.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-c #include "memory.h"
-c char *astChrSub( const char *test, const char *pattern,
-c const char *subs[], int nsub )
-f MATCH = AST_CHRSUB( TEST, PATTERN, RESULT, STATUS )
-
-* Description:
-* This function checks a supplied test string to see if it matches a
-* supplied template. If it does, specified sub-sections of the test
-* string may optionally be replaced by supplied substitution strings.
-* The resulting string is returned.
-
-* Parameters:
-c test
-f TEST = CHARACTER * ( * ) (Given)
-* The string to be tested.
-* pattern
-f PATTERN = CHARACTER * ( * ) (Given)
-* The template string. See "Template Syntax:" below.
-* subs
-* An array of strings that are to replace the sections of the test
-* string that match each parenthesised sub-string in "pattern". The
-* first element of "subs" replaces the part of the test string that
-* matches the first parenthesised sub-string in the template, etc.
-*
-* If "nsub" is zero, then the "subs" pointer is ignored. In this
-* case, substitution strings may be specified by appended them to
-* the end of the "pattern" string, separated by "=" characters.
-* Note, if you need to include a literal "=" character in the
-* pattern, preceed it by an escape "\" character.
-* nsub
-* The number of substitution strings supplied in array "subs".
-f RESULT = CHARACTER * ( * ) (Returned)
-f Returned holding the result of the substitutions. If the test
-f string does not match the template, then a blank string is
-f returned.
-
-* Returned Value:
-* astChrSub()
-* A pointer to a dynamically allocated string holding the result
-* of the substitutions, or NULL if the test string does not match
-* the template string. This string should be freed using astFree
-* when no longer needed. If no substituions are specified then a
-* copy of the test string is returned if it matches the template.
-f AST_CHRSUB = LOGICAL
-* .TRUE. if the test string matched the supplied template, and
-* .FALSE. otherwise.
-
-* Template Syntax:
-* The template syntax is a minimal form of regular expression, The
-* quantifiers allowed are "*", "?", "+", "{n}", "*?" and "+?" (the
-* last two are non-greedy - they match the minimum length possible
-* that still gives an overall match to the template). The only
-* constraints allowed are "^" and "$". The following atoms are allowed:
-*
-* [chars]: Matches any of the specified characters.
-* [^chars]: Matches anything but the specified characters.
-* .: Matches any single character.
-* x: Matches the character x so long as x has no other significance.
-* \x: Always matches the character x (except for [dDsSwW]).
-* \d: Matches a single digit.
-* \D: Matches anything but a single digit.
-* \w: Matches any alphanumeric character, and "_".
-* \W: Matches anything but alphanumeric characters, and "_".
-* \s: Matches white space.
-* \S: Matches anything but white space.
-*
-* Note, minus signs ("-") within brackets have no special significance,
-* so ranges of characters must be specified explicitly.
-*
-* Multiple template strings can be concatenated, using the "|"
-* character to separate them. The test string is compared against
-* each one in turn until a match is found.
-*
-c Parentheses are used within each template to identify sub-strings
-c that are to be replaced by the strings supplied in "sub".
-c
-c If "nsub" is supplied as zero, then substitution strings may be
-c specified by appended them to the end of the "pattern" string,
-c separated by "=" characters. If "nsub" is not zero, then any
-c substitution strings appended to the end of "pattern" are ignored.
-f
-f Parentheses are used within each template to identify sub-strings
-f that are to be replaced by new strings. The new strings are
-f specified by appended them to the end of the "pattern" string,
-f separated by "=" characters.
-*
-c Each element of "subs"
-f Each new string
-* may contain a reference to a token of the
-* form "$1", "$2", etc. The "$1" token will be replaced by the part
-* of the test string that matched the first parenthesised sub-string
-* in "pattern". The "$2" token will be replaced by the part of the
-* test string that matched the second parenthesised sub-string in
-* "pattern", etc.
-*
-
-c Notes:
-c - A NULL pointer is returned if this function is invoked with the
-c global error status set or if it should fail for any reason, or if
-c the supplied test string does not match the template.
-
-*-
-*/
-
-/* Call ChrSuber to do the work, without saving the matching parts of the
- test string. */
- return ChrSuber( test, pattern, subs, nsub, 0, NULL, NULL, NULL, status );
-}
-
-void *astFree_( void *ptr, int *status ) {
-/*
-*+
-* Name:
-* astFree
-
-* Purpose:
-* Free previously allocated memory.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* void *astFree( void *ptr )
-
-* Description:
-* This function frees memory that has previouly been dynamically
-* allocated.
-
-* Parameters:
-* ptr
-* Pointer to previously allocated memory. An error will result
-* if the memory has not previously been allocated by another
-* function in this module. However, a NULL pointer value is
-* accepted (without error) as indicating that no memory has yet
-* been allocated, so that no action is required.
-
-* Returned Value:
-* Always NULL.
-
-* Notes:
-* - This function is documented as protected because it should not
-* be invoked by external code. However, it is available via the
-* external C interface so that it may be used when writing (e.g.)
-* foreign language or graphics interfaces.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- Memory *mem; /* Pointer to memory header */
- int isdynamic; /* Is the memory dynamically allocated? */
- size_t size; /* The usable size of the memory block */
-
-/* If needed, get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* If the incoming pointer is NULL, do nothing. Otherwise, check if it
- points at dynamically allocated memory (IsDynamic sets the global
- error status if it does not). */
- if( ptr ) {
- IS_DYNAMIC( ptr, isdynamic );
- } else {
- isdynamic = 0;
- }
- if ( isdynamic ) {
-
-/* If OK, obtain a pointer to the memory header. */
- mem = (Memory *) ( (char *) ptr - SIZEOF_MEMORY );
-
-#ifdef MEM_DEBUG
- DeIssue( mem, status );
-#endif
-
-/* If the memory block is small enough, and the cache is being used, put it
- into the cache rather than freeing it, so that it can be reused. */
- size = mem->size;
- if( use_cache && size <= MXCSIZE ) {
- mem->next = cache[ size ];
- cache[ size ] = mem;
-
-/* Set the size to zero to indicate that the memory block has been freed.
- The size of the block is implied by the Cache element it is stored in. */
- mem->size = (size_t) 0;
-
-/* Simply free other memory blocks, clearing the "magic number" and size
- values it contains. This helps prevent accidental re-use of the memory. */
- } else {
- mem->magic = (unsigned long) 0;
- mem->size = (size_t) 0;
-
-/* Free the allocated memory. */
- FREE( mem );
- }
- }
-
-/* Always return a NULL pointer. */
- return NULL;
-
-}
-
-void *astGrow_( void *ptr, int n, size_t size, int *status ) {
-/*
-*+
-* Name:
-* astGrow
-
-* Purpose:
-* Allocate memory for an adjustable array.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* void *astGrow( void *ptr, int n, size_t size )
-
-* Description:
-* This function allocates memory in which to store an array of
-* data whose eventual size is unknown. It should be invoked
-* whenever a new array size is determined and will appropriately
-* increase the amount of memory allocated when necessary. In
-* general, it will over-allocate in anticipation of future growth
-* so that the amount of memory does not need adjusting on every
-* invocation.
-
-* Parameters:
-* ptr
-* Pointer to previously allocated memory (or NULL if none has
-* yet been allocated).
-* n
-* Number of array elements to be stored (may be zero).
-* size
-* The size of each array element.
-
-* Returned Value:
-* If the memory was allocated successfully, a pointer to the start
-* of the possibly new memory region is returned (this may be the
-* same as the original pointer).
-
-* Notes:
-* - When new memory is allocated, the existing contents are preserved.
-* - This function does not free memory once it is allocated, so
-* the size allocated grows to accommodate the maximum size of the
-* array (or "high water mark"). Other memory handling routines may
-* be used to free the memory (or alter its size) if necessary.
-* - If this function is invoked with the global error status set,
-* or if it fails for any reason, the original pointer value is
-* returned and the memory contents are unchanged.
-* - This function is documented as protected because it should not
-* be invoked by external code. However, it is available via the
-* external C interface so that it may be used when writing (e.g.)
-* foreign language or graphics interfaces.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- int isdynamic; /* Is the memory dynamically allocated? */
- Memory *mem; /* Pointer to memory header */
- size_t newsize; /* New size to allocate */
- void *new; /* Result pointer */
-
-/* Check the global error status. */
- if ( !astOK ) return ptr;
-
-/* If needed, get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialise. */
- new = ptr;
-
-/* Calculate the total size of memory needed. */
- size *= (size_t) n;
-
-/* If no memory has yet been allocated, allocate exactly the amount
- required. */
- if ( !ptr ) {
- new = astMalloc( size );
-
-/* Otherwise, check that the incoming pointer identifies previously
- allocated memory. */
- } else {
- IS_DYNAMIC( ptr, isdynamic );
- if ( isdynamic ) {
-
-/* Obtain a pointer to the memory header and check if the new size
- exceeds that already allocated. */
- mem = (Memory *) ( (char *) ptr - SIZEOF_MEMORY );
- if ( mem->size < size ) {
-
-/* If so, calculate a possible new size by doubling the old
- size. Increase this further if necessary. */
- newsize = mem->size * ( (size_t) 2 );
- if ( size > newsize ) newsize = size;
-
-/* Re-allocate the memory. */
- new = astRealloc( ptr, newsize );
- }
- }
- }
-
-/* Return the result. */
- return new;
-}
-
-int astIsDynamic_( const void *ptr, int *status ) {
-/*
-*+
-* Name:
-* astIsDynamic
-
-* Purpose:
-* Returns a flag indicating if memory was allocated dynamically.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* int astIsDynamic_( const void *ptr )
-
-* Description:
-* This function takes a pointer to a region of memory and tests if
-* the memory has previously been dynamically allocated using other
-* functions from this module. It does this by checking for the
-* presence of a "magic" number in the header which precedes the
-* allocated memory. If the magic number is not present (or the
-* pointer is invalid for any other reason), zero is returned.
-* Otherwise 1 is returned.
-
-* Parameters:
-* ptr
-* Pointer to test.
-
-* Returned Value:
-* Non-zero if the memory was allocated dynamically. Zero is returned
-* if the supplied pointer is NULL.
-
-* Notes:
-* - A value of zero is returned if this function is invoked with
-* the global error status set, or if it fails for any reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- Memory *isdynmem; /* Pointer to memory header */ \
-
-/* Check the global error status and the supplied pointer. */
- if ( !astOK || ! ptr ) return 0;
-
-/* If needed, get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Derive a pointer to the memory header that precedes the
- supplied region of memory. */
- isdynmem = (Memory *) ( (char *) ptr - SIZEOF_MEMORY );
-
-/* Check if the "magic number" in the header is valid, returning non-zero
- if it is. */
- return ( isdynmem->magic == MAGIC( isdynmem, isdynmem->size ) );
-}
-
-void *astMalloc_( size_t size, int *status ) {
-/*
-*+
-* Name:
-* astMalloc
-
-* Purpose:
-* Allocate memory.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* void *astMalloc( size_t size )
-
-* Description:
-* This function allocates memory in a similar manner to the
-* standard C "malloc" function, but with improved security
-* (against memory leaks, etc.) and with error reporting. It also
-* allows zero-sized memory allocation (without error), resulting
-* in a NULL returned pointer value.
-
-* Parameters:
-* size
-* The size of the memory region required (may be zero).
-
-* Returned Value:
-* If successful, the function returns a pointer to the start of
-* the allocated memory region. If the size allocated is zero, this
-* will be a NULL pointer.
-
-* Notes:
-* - A pointer value of NULL is returned if this function is
-* invoked with the global error status set or if it fails for any
-* reason.
-* - This function is documented as protected because it should not
-* be invoked by external code. However, it is available via the
-* external C interface so that it may be used when writing (e.g.)
-* foreign language or graphics interfaces.
-*-
-*/
-
-/* Local Constants: */
-#define ERRBUF_LEN 80
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- char errbuf[ ERRBUF_LEN ]; /* Buffer for system error message */
- char *errstat; /* Pointer to system error message */
- Memory *mem; /* Pointer to space allocated by malloc */
- void *result; /* Returned pointer */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If needed, get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check that the size requested is not negative and report an error
- if it is. */
- if ( size < (size_t) 0 ) {
- astError( AST__MEMIN,
- "Invalid attempt to allocate %lu bytes of memory.", status,
- (unsigned long) size );
-
-/* Otherwise, if the size is greater than zero, either get a previously
- allocated memory block from the cache, or attempt to use malloc
- to allocate the memory, including space for the header structure. */
- } else if ( size != (size_t ) 0 ) {
-
-/* If the cache is being used and a cached memory block of the required size
- is available, remove it from the cache array and use it. */
- mem = ( size <= MXCSIZE ) ? cache[ size ] : NULL;
- if( use_cache && mem ) {
- cache[ size ] = mem->next;
- mem->next = NULL;
- mem->size = (size_t) size;
-
-/* Otherwise, allocate a new memory block using "malloc". */
- } else {
- mem = MALLOC( SIZEOF_MEMORY + size );
-
-/* Report an error if malloc failed. */
- if ( !mem ) {
-
-#if HAVE_STRERROR_R
- strerror_r( errno, errbuf, ERRBUF_LEN );
- errstat = errbuf;
-#else
- errstat = strerror( errno );
-#endif
- astError( AST__NOMEM, "malloc: %s", status, errstat );
- astError( AST__NOMEM, "Failed to allocate %lu bytes of memory.", status,
- (unsigned long) size );
-
-/* If successful, set the "magic number" in the header and also store
- the size. */
- } else {
- mem->magic = MAGIC( mem, size );
- mem->size = size;
- mem->next = NULL;
-
-#ifdef MEM_DEBUG
- mem->id = -1;
-#endif
-
- }
- }
-
-/* Do nothing more if no memory is being returned. */
- if( mem ) {
-
-#ifdef MEM_DEBUG
- Issue( mem, status );
-#endif
-
-/* Increment the memory pointer to the start of the region of
- allocated memory to be used by the caller.*/
- result = mem;
- result = (char *) result + SIZEOF_MEMORY;
- }
- }
-
-/* Return the result. */
- return result;
-}
-#undef ERRBUF_LEN
-
-static char *ChrMatcher( const char *test, const char *end, const char *template,
- const char *pattern, const char *subs[], int nsub,
- int ignore, int expdoll, char ***mres, int *mlen,
- const char **matchend, int *status ){
-/*
-* Name:
-* ChrMatcher
-
-* Purpose:
-* Performs substitutions on a supplied string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "memory.h"
-* char *ChrMatcher( const char *test, const char *end, const char *template,
-* const char *pattern, const char *subs[], int nsub,
-* int ignore, int expdoll, char ***mres, int *mlen,
-* const char **matchend, int *status )
-
-* Description:
-* This function is performs most of the work for astChrSub.
-
-* Parameters:
-* test
-* The string to be tested.
-* end
-* Pointer to the terminating null character at the end of "test".
-* template
-* The template string. See astChrSub for details.
-* pattern
-* The user supplied "pattern" string (only used for error messages).
-* subs
-* An array of strings holding the values that are to be substituted
-* into each parenthesised substring in "test".
-* nsub
-* The length of the subs arrays.
-* ignore
-* If non-zero, then no substitutions are performed, and any
-* inbalance in parentheses is ignored.
-* expdoll
-* If non-zero, then any "$1", "$2", etc, tokens in the
-* substitution fields will be repalced by the corresponding fields
-* in the test string.
-* mres
-* Address of a location at which to return a pointer to an array
-* of character string pointers. The strings are the sub-sections
-* of "test" that matched the parenthesised sub-sections of
-* "template". The array will have "*m" elements. Ignored if NULL.
-* mlen
-* Address of a location at which to return the length of the
-* returned "mres" array. Ignored if "mres" is NULL.
-* matchend
-* A pointer to a location at which to return a pointer to the
-* character that follows the last character within the supplied test
-* string that matched any parenthesises sub-section of "regexp". A
-* NULL pointer is returned if no matches were found. A NULL pointer
-* may be supplied if the location of the last matching character is
-* not needed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated string holding the result of the
-* substitutions, or NULL if the test string does not match the template
-* string. This string should be freed using astFree when no longer
-* needed.
-
-* Notes:
-* - A NULL pointer is returned if this function is invoked with the
-* global error status set or if it should fail for any reason, or if
-* the supplied test string does not match the template.
-*-
-*/
-
-/* Local Variables: */
- char **matches;
- char **newsubs;
- char **parts;
- char *allowed;
- char *r;
- char *result;
- char *sres;
- char *stest;
- char stemp[10];
- const char *aaa;
- const char *aa;
- const char *a;
- const char *b;
- int allow;
- int dollar;
- int end_sub;
- int greedy;
- int i;
- int in_sub;
- int ipart;
- int match;
- int matchlen;
- int max_na;
- int min_na;
- int na;
- int nb;
- int nmatch;
- int npart;
- int partlen;
- int reslen;
- int start_sub;
- size_t stl;
-
-/* Initialisation. */
- if( mres ) *mlen = 0;
- aaa = NULL;
- if( matchend ) *matchend = NULL;
-
-/* Check the global error status. */
- if( !astOK ) return NULL;
-
-/* more initialisation. */
- result = NULL;
- allowed = NULL;
-
-/* Get memory for a set of pointers to copies of the test sub-strings that
- fall between the sub-strings being replaced. */
- parts = astMalloc( sizeof( char *)*(size_t) ( nsub + 1 ) );
-
-/* Get memory for a set of pointers to copies of the test sub-strings that
- match the parenthesised sub-strings in the template. */
- matches = astMalloc( sizeof( char *)*(size_t) nsub );
-
-/* Initialise pointers to the next test and template characters to read. */
- a = test;
- b = template;
-
-/* Initialise the pointer to the start of the previous test character */
- aa = test;
-
-/* Assume the test string matches the template. */
- match = 1;
-
-/* The template pointer is not currently in a substitution field. */
- in_sub = 0;
-
-/* Initialise the number of substitution fields found so far. */
- npart = 0;
- nmatch = 0;
-
-/* Loop until we have reached the end of either the test or template
- string. We break out of the loop early if we find that the test string
- does not match the template string. */
- while( match && *a && *b ) {
-
-/* Examine the string at the start of the template string. This returns a
- string of allowed (or disallowed) characters that the next test character
- can match, the number of template characters consumed, the minimum number
- of test characters that must match the allowed character set, and a flag
- indicating if the number of matching test characters can exceed the
- minimum number or must be exactly equal to the minimum number. */
- allowed = CheckTempStart( template, b, pattern, allowed, &nb, &allow,
- &min_na, &max_na, &start_sub, &end_sub,
- &greedy, status );
- if( !astOK ) break;
-
-/* Increment the the pointer to the next template character. */
- b += nb;
-
-/* If the leading field in the template indicates the start of a
- substitution field, record the test string up to the current point. */
- if( start_sub ){
-
-/* Do nothing if we are ignoring substitutions. */
- if( ! ignore ){
-
-/* Store a pointer to the first test character that matches the
- substitution template. */
- aaa = a;
-
-/* Report an error and abort if we are already inside a substitution
- field */
- if( in_sub ) {
- astError( AST__BADSUB, "Invalid pattern matching template \"%s\": "
- "missing ')'.", status, pattern );
- break;
- }
-
-/* Indicate that we are now in a substitution field. */
- in_sub = 1;
-
-/* If possible, store a copy of the test string that started at the end
- of the previous substitution field and ends at the current point.
- First ensure the "parts" array is large enough since the string may
- contain more than "nsub" parenthesised sub-strings. */
- parts = astGrow( parts, npart + 1, sizeof( char * ) );
- if( parts ) {
- partlen = ( a - aa );
- parts[ npart ] = astStore( NULL, aa, partlen + 1 );
- if( parts[ npart ] ) {
- parts[ npart ][ partlen ] = 0;
- npart++;
- }
- }
- }
-
-/* If the leading field in the template indicates the end of a
- substitution field, initialise the start of the next part of the test
- string. */
- } else if( end_sub ){
-
-/* Do nothing if we are ignoring substitutions. */
- if( ! ignore ){
-
-/* Report an error and abort if we are not currently in a substitution
- field. */
- if( ! in_sub ) {
- astError( AST__BADSUB, "Invalid pattern matching template \"%s\": "
- "missing '('.", status, pattern );
- break;
- }
-
-/* We are no longer in a substitution field. */
- in_sub = 0;
-
-/* If possible, store a copy of the test string that matched the
- substitution template. */
- matches = astGrow( matches, nmatch + 1, sizeof( char * ) );
- if( matches ) {
- matchlen = ( a - aaa );
- matches[ nmatch ] = astStore( NULL, aaa, matchlen + 1 );
- if( matches[ nmatch ] ) {
- matches[ nmatch ][ matchlen ] = 0;
- nmatch++;
- if( matchend ) *matchend = a + 1;
- }
- }
-
-/* Record the start of the next test string part. */
- aa = a;
- }
-
-/* Otherwise, find how many characters at the front of the test string
- match the leading field in the template. Find the number of leading
- characters in the test string that are contained in the set of
- characters allowed by the leading field in the template. */
- } else {
- if( !allowed ) {
- na = strlen( a );
-
- } else if( allow ) {
- na = strspn( a, allowed );
-
- } else {
- na = strcspn( a, allowed );
- }
-
-/* Check that the minmum number of matching characters is available. */
- if( na < min_na ){
- match = 0;
- break;
- }
-
-/* Dont match more characters than are needed. */
- if( na > max_na ) na = max_na;
-
-/* We cannot match more characters than are available. */
- if( na < max_na ) max_na = na;
-
-/* If we have exhausted the template, match the maximum number of
- characters. */
- if( ! *b ) {
- na = max_na;
-
-/* If we still have a match, we may choose to use fewer than the max
- allowed number of test characters in order to allow the next template
- field to be matched. Don't need to do this if we have reached the end
- of the template. */
- } else if( max_na > min_na ) {
- match = 0;
-
-/* If a greedy quantifier was used, try using a decreasing number of test
- characters, starting at the maximum allowed and decreasing down to the
- minimum, until a number is found which allows the rest of the string
- to be matched. */
- if( greedy ) {
- for( na = max_na; na >= min_na; na-- ) {
- r = ChrMatcher( a + na, end, b, pattern, NULL, 0, 1, 0,
- NULL, NULL, NULL, status );
- if( r ) {
- match = 1;
- r = astFree( r );
- break;
- }
- }
-
-/* If a non-greedy quantifier was used, try using an increasing number of
- test characters, starting at the minimum allowed and increasing up to
- the maximum, until a number is found which allows the rest of the string
- to be matched. */
- } else {
- for( na = min_na; na <= max_na; na++ ) {
- r = ChrMatcher( a + na, end, b, pattern, NULL, 0, 1, 0,
- NULL, NULL, NULL, status );
- if( r ) {
- match = 1;
- r = astFree( r );
- break;
- }
- }
- }
- }
-
-/* Increment the the pointer to the next test character. */
- a += na;
- if( a > end ) a = end;
- }
- }
-
-/* If the next character in the template is a closing parenthesis, then
- we are finishing a substitution field. */
- if( match && *b == ')' ) {
-
-/*Check we are not ignoring substitutions. */
- if( ! ignore ){
-
-/* Report an error and abort if we are not currently in a substitution
- field. */
- if( ! in_sub ) {
- astError( AST__BADSUB, "Invalid pattern matching template \"%s\": "
- "missing '('.", status, pattern );
- }
-
-/* We are no longer in a substitution field. */
- in_sub = 0;
-
-/* If possible, store a copy of the test string that matched the
- substitution field. */
- matches = astGrow( matches, nmatch + 1, sizeof( char * ) );
- if( matches ) {
- matchlen = ( a - aaa );
- matches[ nmatch ] = astStore( NULL, aaa, matchlen + 1 );
- if( matches[ nmatch ] ) {
- matches[ nmatch ][ matchlen ] = 0;
- nmatch++;
- if( matchend ) *matchend = a + 1;
- }
- }
-
- aa = a;
- }
- b++;
- }
-
-/* If the test string is finished but the template string is not, see if
- the rest of the template string will match a null test string. */
- if( !*a && *b && match ) {
-
- while( *b ) {
- allowed = CheckTempStart( template, b, pattern, allowed, &nb, &allow,
- &min_na, &max_na, &start_sub, &end_sub,
- &greedy, status );
- b += nb;
- allowed = astFree( allowed );
-
- if( min_na > 0 ) {
- match = 0;
- break;
- }
- }
-
- }
-
-/* No match if either string was not used completely. */
- if( *a || *b ) match = 0;
-
-/* Report an error if we are still inside a substitution field */
- if( match && in_sub && !ignore ) {
- astError( AST__BADSUB, "Invalid pattern matching template \"%s\": "
- "missing ')'.", status, pattern );
- match = 0;
- }
-
-/* If we have a match, construct the returned string. */
- if( match && parts ) {
-
-/* Store the test string following the final substitution field. */
- parts = astGrow( parts, npart + 1, sizeof( char * ) );
- if( parts ) {
- partlen = ( a - aa );
- parts[ npart ] = astStore( NULL, aa, partlen + 1 );
- if( parts[ npart ] ) {
- parts[ npart ][ partlen ] = 0;
- npart++;
- }
- }
-
-/* If required, expand $1, $2, etc within the replacement strings. */
- if( expdoll) {
- newsubs = astMalloc( sizeof( char * )*nsub );
- if( newsubs ) {
- for( i = 0; i < nsub; i++ ) {
- stl = strlen( subs[ i ] );
- stest = astStore( NULL, subs[ i ], stl + 1 );
- for( dollar = 1; dollar <= nsub; dollar++ ) {
- sprintf( stemp, ".*($%d).*", dollar );
- sres = ChrMatcher( stest, stest + stl, stemp, stemp,
- (void *) ( matches + dollar - 1 ),
- 1, 0, 0, NULL, NULL, NULL, status );
- if( sres ) {
- (void) astFree( stest );
- stest = sres;
- }
- }
- newsubs[ i ] = stest;
- }
- }
-
- } else {
- newsubs = (char **) subs;
- }
-
-/* Concatenate the sub-strings to form the final string. */
- reslen = 0;
- for( ipart = 0; ipart < npart - 1; ipart++ ) {
- result = astAppendString( result, &reslen, parts[ ipart ] );
- if( ipart < nsub ) {
- result = astAppendString( result, &reslen, newsubs[ ipart ] );
- } else {
- result = astAppendString( result, &reslen, matches[ ipart ] );
- }
- }
- result = astAppendString( result, &reslen, parts[ ipart ] );
-
-/* Free resources. */
- if( newsubs && newsubs != (char **) subs ) {
- for( i = 0; i < nsub; i++ ) {
- newsubs[ i ] = astFree( newsubs[ i ] );
- }
- newsubs = astFree( newsubs );
- }
- }
-
- allowed = astFree( allowed );
- for( ipart = 0; ipart < npart; ipart++ ) {
- parts[ ipart ] = astFree( parts[ ipart ] );
- }
- parts = astFree( parts );
-
-/* If required, return the array holding the test sub-strings that
- matched the parenthesised template sub-strings, together with
- the length of the array. Otherwise, free the memory holding these
- strings. */
- if( mres ) {
- *mres = matches;
- *mlen = nmatch;
-
- } else if( matches ) {
- for( i = 0; i < nmatch; i++ ) {
- matches[ i ] = astFree( matches[ i ] );
- }
- matches = astFree( matches );
-
- }
-
-/* Return the result. */
- return result;
-}
-
-int astMemCaching_( int newval, int *status ){
-/*
-*+
-* Name:
-* astMemCaching
-
-* Purpose:
-* Controls whether allocated but unused memory is cached in this module.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* int astMemCaching( int newval )
-
-* Description:
-* This function sets a flag indicating if allocated but unused memory
-* should be cached or not. It also returns the original value of the
-* flag.
-*
-* If caching is switched on or off as a result of this call, then the
-* current contents of the cache are discarded.
-*
-* Note, each thread has a separate cache. Calling this function
-* affects only the currently executing thread.
-
-* Parameters:
-* newval
-* The new value for the MemoryCaching tuning parameter (see
-* astTune in objectc.c). If AST__TUNULL is supplied, the current
-* value is left unchanged.
-
-* Returned Value:
-* The original value of the MemoryCaching tuning parameter.
-
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS
- int i;
- int result;
- Memory *mem;
-
-#ifdef MEM_DEBUG
- int id_list_size;
- int *id_list;
-#endif
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* If needed, get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Store the original value of the tuning parameter. */
- result = use_cache;
-
-/* If a new value is to be set. */
- if( newval != AST__TUNULL ) {
-
-/* If the cache has been initialised, empty it. */
- if( cache_init ) {
-
-/* If we are listing the ID of every memory block in the cache, count the
- number of blocks in the cache and then allocate an array to store the ID
- values in. This is done so that we can sort them before displaying them. */
-#ifdef MEM_DEBUG
- if( List_Cache ) {
- Memory *next;
-
- id_list_size = 0;
- for( i = 0; i <= MXCSIZE; i++ ) {
- next = cache[ i ];
- while( next ) {
- id_list_size++;
- next = next->next;
- }
- }
-
- id_list = MALLOC( sizeof(int)*id_list_size );
- if( !id_list ) {
- astError( AST__INTER, "astMemCaching: Cannot allocate %lu "
- "bytes of memory", status, (unsigned long)(sizeof(int)*id_list_size) );
- }
-
- id_list_size = 0;
-
- } else {
- id_list = NULL;
- }
-#endif
-
- for( i = 0; i <= MXCSIZE; i++ ) {
- while( cache[ i ] ) {
- mem = cache[ i ];
- cache[ i ] = mem->next;
- mem->size = (size_t) i;
-
-#ifdef MEM_DEBUG
- if( id_list ) {
- id_list[ id_list_size++ ] = mem->id;
- }
-#endif
-
- FREE( mem );
- }
- }
-
-/* If we are displaying the IDs of memory blocks still in the cache, sort
- them using a bubblesort algorithm, then display them. */
-#ifdef MEM_DEBUG
- if( id_list ) {
-
- if( id_list_size == 0 ) {
- printf( "Emptying the AST memory cache - (the cache is "
- "already empty)\n" );
-
- } else {
- int sorted, j, t;
-
- sorted = 0;
- for( j = id_list_size - 2; !sorted && j >= 0; j-- ) {
- sorted = 1;
- for( i = 0; i <= j; i++ ) {
- if( id_list[ i ] > id_list[ i + 1 ] ) {
- sorted = 0;
- t = id_list[ i ];
- id_list[ i ] = id_list[ i + 1 ];
- id_list[ i + 1 ] = t;
- }
- }
- }
-
- printf( "Emptying the AST memory cache - freeing the "
- "following memory blocks: ");
- for( i = 0; i < id_list_size; i++ ) printf( "%d ", id_list[ i ] );
- printf( "\n" );
-
- }
- }
-#endif
-
-/* Otherwise, initialise the cache array to hold a NULL pointer at every
- element. */
- } else {
- for( i = 0; i <= MXCSIZE; i++ ) cache[ i ] = NULL;
- cache_init = 1;
- }
-
-/* Store the new value. */
- use_cache = newval;
-
- }
-
-/* Return the original value. */
- return result;
-}
-
-void *astRealloc_( void *ptr, size_t size, int *status ) {
-/*
-*+
-* Name:
-* astRealloc
-
-* Purpose:
-* Change the size of a dynamically allocated region of memory.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* void *astRealloc( void *ptr, size_t size )
-
-* Description:
-* This function changes the size of a dynamically allocated region
-* of memory, preserving its contents up to the minimum of the old
-* and new sizes. This may involve copying the contents to a new
-* location, so a new pointer is returned (and the old memory freed
-* if necessary).
-*
-* This function is similar to the standard C "realloc" function
-* except that it provides better security against programming
-* errors and also supports the allocation of zero-size memory
-* regions (indicated by a NULL pointer).
-
-* Parameters:
-* ptr
-* Pointer to previously allocated memory (or NULL if the
-* previous size of the allocated memory was zero).
-* size
-* New size required for the memory region. This may be zero, in
-* which case a NULL pointer is returned (no error results). It
-* should not be negative.
-
-* Returned Value:
-* If the memory was reallocated successfully, a pointer to the
-* start of the new memory region is returned (this may be the same
-* as the original pointer). If size was given as zero, a NULL
-* pointer is returned.
-
-* Notes:
-* - If this function is invoked with the error status set, or if
-* it fails for any reason, the original pointer value is returned
-* and the memory contents are unchanged. Note that this behaviour
-* differs from that of the standard C "realloc" function which
-* returns NULL if it fails.
-* - This function is documented as protected because it should not
-* be invoked by external code. However, it is available via the
-* external C interface so that it may be used when writing (e.g.)
-* foreign language or graphics interfaces.
-*-
-*/
-
-/* Local Constants: */
-#define ERRBUF_LEN 80
-
-/* Local Variables: */
- astDECLARE_GLOBALS
- char errbuf[ ERRBUF_LEN ]; /* Buffer for system error message */
- char *errstat; /* Pointer to system error message */
- int isdynamic; /* Was memory allocated dynamically? */
- void *result; /* Returned pointer */
- Memory *mem; /* Pointer to memory header */
-
-/* Check the global error status. */
- if ( !astOK ) return ptr;
-
-/* Initialise. */
- result = ptr;
-
-/* If needed, get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* If a NULL pointer was supplied, use astMalloc to allocate some new
- memory. */
- if ( !ptr ) {
- result = astMalloc( size );
-
-/* Otherwise, check that the pointer supplied points at memory
- allocated by a function in this module (IsDynamic sets the global
- error status if it does not). */
- } else {
- IS_DYNAMIC( ptr, isdynamic );
- if ( isdynamic ) {
-
-/* Check that a negative size has not been given and report an error
- if necessary. */
- if ( size < (size_t) 0 ) {
- astError( AST__MEMIN,
- "Invalid attempt to reallocate a block of memory to %ld bytes.", status,
- (long) size );
-
-/* If OK, obtain a pointer to the memory header. */
- } else {
- mem = (Memory *) ( (char *) ptr - SIZEOF_MEMORY );
-
-/* If the new size is zero, free the old memory and set a NULL return
- pointer value. */
- if ( size == (size_t) 0 ) {
- astFree( ptr );
- result = NULL;
-
-/* Otherwise, reallocate the memory. */
- } else {
-
-/* If the cache is being used, for small memory blocks, do the equivalent of
- mem = REALLOC( mem, SIZEOF_MEMORY + size );
-
- using astMalloc, astFree and memcpy explicitly in order to ensure
- that the memory blocks are cached. */
- if( use_cache && mem->size <= MXCSIZE && size <= MXCSIZE ) {
- result = astMalloc( size );
- if( result ) {
- if( mem->size < size ) {
- memcpy( result, ptr, mem->size );
- } else {
- memcpy( result, ptr, size );
- }
- astFree( ptr );
-
- } else {
- result = ptr;
- }
-
-/* For other memory blocks simply use realloc. */
- } else {
-
-#ifdef MEM_DEBUG
- DeIssue( mem, status );
-#endif
-
- mem = REALLOC( mem, SIZEOF_MEMORY + size );
-
-/* If this failed, report an error and return the original pointer
- value. */
- if ( !mem ) {
-#if HAVE_STRERROR_R
- strerror_r( errno, errbuf, ERRBUF_LEN );
- errstat = errbuf;
-#else
- errstat = strerror( errno );
-#endif
- astError( AST__NOMEM, "realloc: %s", status, errstat );
- astError( AST__NOMEM, "Failed to reallocate a block of "
- "memory to %ld bytes.", status, (long) size );
-
-/* If successful, set the new "magic" value and size in the memory
- header and obtain a pointer to the start of the region of memory to
- be used by the caller. */
- } else {
- mem->magic = MAGIC( mem, size );
- mem->size = size;
- mem->next = NULL;
-#ifdef MEM_DEBUG
- mem->id = -1;
- Issue( mem, status );
-#endif
- result = mem;
- result = (char *) result + SIZEOF_MEMORY;
- }
- }
- }
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-#undef ERRBUF_LEN
-
-void astRemoveLeadingBlanks_( char *string, int *status ) {
-/*
-*+
-* Name:
-* astRemoveLeadingBlanks
-
-* Purpose:
-* Remove any leading white space from a string.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* void astRemoveLeadingBlanks( char *string )
-
-* Description:
-* This function moves characters in the supplied string to the left
-* in order to remove any leading white space.
-
-* Parameters:
-* string
-* Pointer to the string.
-
-*-
-*/
-
-/* Local Variables: */
- char *c, *d;
-
-/* Check a string has been supplied. */
- if( string ){
-
-/* Get a pointer to the first non-white character in the string. */
- c = string;
- while( *c && isspace( *c ) ) c++;
-
-/* Do nothing more if there are no leading spaces. */
- if( c > string ) {
-
-/* Copy all characters (excluding the trailing null) to the left to
- over-write the leading spaces. */
- d = string;
- while( *c ) *(d++) = *(c++);
-
-/* Terminate the returned string. */
- *d = 0;
- }
- }
-}
-
-size_t astSizeOf_( const void *ptr, int *status ) {
-/*
-*+
-* Name:
-* astSizeOf
-
-* Purpose:
-* Determine the size of a dynamically allocated region of memory.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* size_t astSizeOf( const void *ptr )
-
-* Description:
-* This function returns the size of a region of dynamically
-* allocated memory.
-
-* Parameters:
-* ptr
-* Pointer to dynamically allocated memory (or NULL if the size
-* of the allocated memory was zero).
-
-* Returned Value:
-* The allocated size. This will be zero if a NULL pointer was
-* supplied (no error will result).
-
-* Notes:
-* - A value of zero is returned if this function is invoked with
-* the global error status set, or if it fails for any reason.
-* - This function is documented as protected because it should not
-* be invoked by external code. However, it is available via the
-* external C interface so that it may be used when writing (e.g.)
-* foreign language or graphics interfaces.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- int isdynamic; /* Was the memory allocated dynamically? */
- size_t size; /* Memory size */
-
-/* Check the global error status. */
- if ( !astOK ) return (size_t) 0;
-
-/* Initialise. */
- size = (size_t) 0;
-
-/* If needed, get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check if a non-NULL valid pointer has been given. If so, extract
- the memory size from the header which precedes it. */
- if ( ptr ){
- IS_DYNAMIC( ptr, isdynamic );
- if( isdynamic ) size = ( (Memory *) ( (char *) ptr - SIZEOF_MEMORY ) )->size;
- }
-
-/* Return the result. */
- return size;
-}
-
-static size_t SizeOfMemory( int *status ){
-/*
-* Name:
-* SizeOfMemory
-
-* Purpose:
-* Returns the size of a Memory structure, padded to an 8 byte
-* boundary.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* size_t SizeOfMemory( int *status )
-
-* Description:
-* This function returns the size of a Memory structure used to
-* store header information about any block of memory allocated by this
-* module. The returned value may be larger than the actual size of
-* the Memory structure in order to ensure that the pointer returned by
-* astMalloc etc points to an 8 byte boundary. Failure to do this can
-* result in some operating systems having problems. E.g Solaris
-* requires this alignment if the returned pointer is going to be used to
-* store doubles.
-
-* Parameters:
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The size to use for a Memory structure.
-
-* Notes:
-* - The returned value is also stored in the module variable
-* sizeof_memory.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-
-/* If needed, get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Get the basic size of a Memory structure. */
- sizeof_memory = sizeof( Memory );
-
-/* Now increase the returned value to ensure it is a multiple of 8. Mask
- off all but the last 3 bits, xor with 0x7 to get the remainder, add 1
- to make it a multiple of 8 bytes. */
- sizeof_memory += ((sizeof_memory & 0x7) ? ((sizeof_memory & 0x7) ^ 0x7) + 1 : 0);
-
-/* Return the value */
- return sizeof_memory;
-
-}
-
-size_t astTSizeOf_( const void *ptr, int *status ) {
-/*
-*+
-* Name:
-* astTSizeOf
-
-* Purpose:
-* Determine the total size of a dynamically allocated region of memory.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* size_t astTSizeOf( const void *ptr )
-
-* Description:
-* This function returns the size of a region of dynamically
-* allocated memory, including the extra memory used to store
-* the header information for the memory block (size and magic number).
-
-* Parameters:
-* ptr
-* Pointer to dynamically allocated memory (or NULL if the size
-* of the allocated memory was zero).
-
-* Returned Value:
-* The allocated size. This will be zero if a NULL pointer was
-* supplied (no error will result).
-
-* Notes:
-* - A value of zero is returned if this function is invoked with
-* the global error status set, or if it fails for any reason.
-* - This function is documented as protected because it should not
-* be invoked by external code. However, it is available via the
-* external C interface so that it may be used when writing (e.g.)
-* foreign language or graphics interfaces.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- int isdynamic; /* Was the memory allocated dynamically? */
- size_t size; /* Memory size */
-
-/* Check the global error status. */
- if ( !astOK ) return (size_t) 0;
-
-/* If needed, get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialise. */
- size = (size_t) 0;
-
-/* Check if a non-NULL valid pointer has been given. If so, extract
- the memory size from the header which precedes it. */
- if ( ptr ){
- IS_DYNAMIC( ptr, isdynamic );
- if( isdynamic ) size = SIZEOF_MEMORY +
- ( (Memory *) ( (char *) ptr - SIZEOF_MEMORY ) )->size;
- }
-
-/* Return the result. */
- return size;
-}
-
-void *astStore_( void *ptr, const void *data, size_t size, int *status ) {
-/*
-*+
-* Name:
-* astStore
-
-* Purpose:
-* Store data in dynamically allocated memory.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* void *astStore( void *ptr, const void *data, size_t size )
-
-* Description:
-* This function stores data in dynamically allocated memory,
-* allocating the memory (or adjusting the size of previously
-* allocated memory) to match the amount of data to be stored.
-
-* Parameters:
-* ptr
-* Pointer to previously allocated memory (or NULL if none has
-* yet been allocated).
-* data
-* Pointer to the start of the data to be stored. This may be
-* given as NULL if there are no data, in which case it will be
-* ignored and this function behaves like astRealloc, preserving
-* the existing memory contents.
-* size
-* The total size of the data to be stored and/or the size of
-* memory to be allocated. This may be zero, in which case the
-* data parameter is ignored, any previously-allocated memory is
-* freed and a NULL pointer is returned.
-
-* Returned Value:
-* If the data were stored successfully, a pointer to the start of
-* the possibly new memory region is returned (this may be the same
-* as the original pointer). If size was given as zero, a NULL
-* pointer is returned.
-
-* Notes:
-* - This is a convenience function for use when storing data of
-* arbitrary size in memory which is to be allocated
-* dynamically. It is appropriate when the size of the data will
-* not change frequently because the size of the memory region will
-* be adjusted to fit the data on every invocation.
-* - If this function is invoked with the error status set, or if
-* it fails for any reason, the original pointer value is returned
-* and the memory contents are unchanged.
-* - This function is documented as protected because it should not
-* be invoked by external code. However, it is available via the
-* external C interface so that it may be used when writing (e.g.)
-* foreign language or graphics interfaces.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- int valid; /* Is the memory pointer usable? */
- void *new; /* Pointer to returned memory */
-
-/* Check the global error status. */
- if ( !astOK ) return ptr;
-
-/* If needed, get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialise. */
- new = ptr;
-
-/* If the new size is zero, use astRealloc to free any previously
- allocated memory. Also re-allocate the memory if the data pointer
- is NULL (in which case we want to preserve its contents). */
- if ( ( size == (size_t) 0 ) || !data ) {
- new = astRealloc( ptr, size );
-
-/* In other cases, we do not want to preserve any memory
- contents. Check if the incoming memory pointer is valid (IsDynamic
- sets the global error status if it is not). */
- } else {
- if ( !ptr ){
- valid = 1;
- } else {
- IS_DYNAMIC( ptr, valid );
- }
- if( valid ) {
-
-/* Allocate the new memory. If successful, free the old memory (if
- necessary) and copy the data into it. */
- new = astMalloc( size );
- if ( astOK ) {
- if ( ptr ) ptr = astFree( ptr );
- (void) memcpy( new, data, size );
-
-/* If memory allocation failed, do not free the old memory but return
- a pointer to it. */
- } else {
- new = ptr;
- }
- }
- }
-
-/* Return the result. */
- return new;
-}
-
-char *astString_( const char *chars, int nchars, int *status ) {
-/*
-*+
-* Name:
-* astString
-
-* Purpose:
-* Create a C string from an array of characters.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* char *astString( const char *chars, int nchars )
-
-* Description:
-* This function allocates memory to hold a C string and fills the
-* string with the sequence of characters supplied. It then
-* terminates the string with a null character and returns a
-* pointer to its start. The memory used for the string may later
-* be de-allocated using astFree.
-*
-* This function is intended for constructing null terminated C
-* strings from arrays of characters which are not null terminated,
-* such as when importing a character argument from a Fortran 77
-* program.
-
-* Parameters:
-* chars
-* Pointer to the array of characters to be used to fill the string.
-* nchars
-* The number of characters in the array (zero or more).
-
-* Returned Value:
-* If successful, the function returns a pointer to the start of
-* the allocated string. If the number of characters is zero, a
-* zero-length string is still allocated and a pointer to it is
-* returned.
-
-* Notes:
-* - A pointer value of NULL is returned if this function is
-* invoked with the global error status set or if it fails for any
-* reason.
-* - This function is documented as protected because it should not
-* be invoked by external code. However, it is available via the
-* external C interface so that it may be used when writing (e.g.)
-* foreign language or graphics interfaces.
-*-
-*/
-
-/* Local Variables: */
- char *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Check that the number of characters in the string is valid and
- report an error if it is not. */
- if ( nchars < 0 ) {
- astError( AST__NCHIN, "astString: Invalid attempt to allocate a string "
- "with %d characters.", status, nchars);
-
-/* Allocate memory to hold the string. */
- } else {
- result = (char *) astMalloc( (size_t) ( nchars + 1 ) );
-
-/* If successful, copy the characters into the string. */
- if ( astOK && result ) {
- (void) memcpy( result, chars, (size_t) nchars );
-
-/* Terminate the string. */
- result[ nchars ] = '\0';
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-char **astStringArray_( const char *chars, int nel, int len, int *status ) {
-/*
-*+
-* Name:
-* astStringArray
-
-* Purpose:
-* Create an array of C strings from an array of characters.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* char **astStringArray( const char *chars, int nel, int len )
-
-* Description:
-* This function turns an array of fixed-length character data into
-* a dynamicllay allocated array of null-terminated C strings with
-* an index array that may be used to access them.
-*
-* The array of character data supplied is assumed to hold "nel"
-* adjacent fixed-length strings (without terminating nulls), each
-* of length "len" characters. This function allocates memory and
-* creates a null-terminated copy of each of these strings. It also
-* creates an array of "nel" pointers which point at the start of
-* each of these new strings. A pointer to this index array is
-* returned.
-*
-* The memory used is allocated in a single block and should later
-* be de-allocated using astFree.
-s
-* Parameters:
-* chars
-* Pointer to the array of input characters. The number of characters
-* in this array should be at least equal to (nel * len).
-* nel
-* The number of fixed-length strings in the input character
-* array. This may be zero but should not be negative.
-* len
-* The number of characters in each fixed-length input
-* string. This may be zero but should not be negative.
-
-* Returned Value:
-* A pointer to the start of the index array, which contains "nel"
-* pointers pointing at the start of each null-terminated output
-* string.
-*
-* The returned pointer should be passed to astFree to de-allocate
-* the memory used when it is no longer required. This will free
-* both the index array and the memory used by the strings it
-* points at.
-
-* Notes:
-* - A NULL pointer will also be returned if the value of "nel" is
-* zero, in which case no memory is allocated.
-* - A pointer value of NULL will also be returned if this function
-* is invoked with the global error status set or if it fails for
-* any reason.
-* - This function is documented as protected because it should not
-* be invoked by external code. However, it is available via the
-* external C interface so that it may be used when writing (e.g.)
-* foreign language or graphics interfaces.
-*-
-*/
-
-/* Local Variables: */
- char **result; /* Result pointer to return */
- char *out_str; /* Pointer to start of next output string */
- const char *in_str; /* Pointer to start of next input string */
- int i; /* Loop counter for array elements */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Check that the array size is valid and report an error if it is
- not. */
- if ( nel < 0 ) {
- astError( AST__NELIN,
- "astStringArray: Invalid attempt to allocate an array of "
- "%d strings.", status, nel );
-
-/* If the string length will be used, check that it is valid and
- report an error if it is not. */
- } else if ( ( nel > 0 ) && ( len < 0 ) ) {
- astError( AST__NCHIN,
- "astStringArray: Invalid attempt to allocate an "
- "array of strings with %d characters in each.", status, len );
-
-/* Allocate memory to hold the array of string pointers plus the
- string data (with terminating nulls). */
- } else {
- result = astMalloc( sizeof( char * ) * (size_t) nel +
- (size_t) ( nel * ( len + 1 ) ) );
-
-/* If successful, initialise pointers to the start of the current
- input and output strings. */
- if( astOK ){
- in_str = chars;
- out_str = (char *) ( result + nel );
-
-/* Loop to copy each string. */
- for ( i = 0; i < nel; i++ ) {
- (void) memcpy( out_str, in_str, (size_t) len );
-
-/* Terminate the output string. */
- out_str[ len ] = '\0';
-
-/* Store a pointer to the start of the output string in the array of
- character pointers. */
- result[ i ] = out_str;
-
-/* Increment the pointers to the start of the next string. */
- out_str += len + 1;
- in_str += len;
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-size_t astChrLen_( const char *string, int *status ) {
-/*
-*+
-* Name:
-* astChrLen
-
-* Purpose:
-* Determine the used length of a string.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* size_t astChrLen( const char *string )
-
-* Description:
-* This function returns the used length of a string. This excludes any
-* trailing white space or non-printable characters (such as the
-* trailing null character).
-
-* Parameters:
-* string
-* Pointer to the string.
-
-* Returned Value:
-* The number of characters in the supplied string, not including the
-* trailing newline, and any trailing white-spaces or non-printable
-* characters.
-
-*-
-*/
-
-/* Local Variables: */
- const char *c; /* Pointer to the next character to check */
- size_t ret; /* The returned string length */
-
-/* Initialise the returned string length. */
- ret = 0;
-
-/* Check a string has been supplied. */
- if( string ){
-
-/* Check each character in turn, starting with the last one. */
- ret = strlen( string );
- c = string + ret - 1;
- while( ret ){
- if( isprint( (int) *c ) && !isspace( (int) *c ) ) break;
- c--;
- ret--;
- }
- }
-
-/* Return the answer. */
- return ret;
-
-}
-
-int astSscanf_( const char *str, const char *fmt, ...) {
-/*
-*+
-* Name:
-* astSscanf
-
-* Purpose:
-* A wrapper for the ANSI sscanf function.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* int astSscanf( const char *str, const char *fmt, ...)
-
-* Description:
-* This function is a direct plug-in replacement for sscanf. It ensures ANSI
-* behaviour is available on all platforms, including those (such as
-* MacOS) on which have the native sscanf function exhibits non-ANSI
-* behaviour.
-
-* Parameters:
-* str
-* Pointer to the string to be scanned.
-* fmt
-* Pointer to the format string which defines the fields to be
-* looked for within "str".
-* ...
-* Pointers to locations at which to return the value of each
-* succesfuly converted field, in the order specified in "fmt".
-
-* Returned Value:
-* The number of fields which were succesfully read from "str".
-*-
-*/
-
-/* Local Variables: */
- char *c; /* Pointer to the next character to check */
- char *newfor; /* Pointer to modified format string */
- const char *d; /* Pointer to the next character to check */
- int *status; /* Pointer to inherited status value */
- int iptr; /* Index into ptr array */
- int lfor; /* No. of characters in format string */
- int lstr; /* No. of characters in scanned string */
- int nc; /* No. of characters read from str */
- int nfld; /* No. of counted field specifiers found so far */
- int nptr; /* Np. of pointers stored */
- int ret; /* The returned number of conversions */
- va_list args; /* Variable argument list pointer */
- void *fptr; /* The next supplied pointer */
- void *ptr[ VMAXFLD ]; /* Array of supplied pointers */
-
-/* Initialise the variable argument list pointer. */
- va_start( args, fmt );
-
-/* Get a pointer to the integer holding the inherited status value. */
- status = astGetStatusPtr;
-
-/* Initialise the returned string length. */
- ret = 0;
-
-/* Check a string and format have been supplied. */
- if( str && fmt ){
-
-/* Go through the format string, counting the number of field specifiers which
- will return a value, and storing the corresponding points in the ptr
- array. */
- nptr = 0;
- c = (char *) fmt;
- while( *c ) {
-
-/* Field specifiers are marked by a % sign. */
- if( *c == '%' ) {
-
-/* Look at the character following the % sign. Quit if the end of the string
- has been reached. */
- c++;
- if( *c ) {
-
-/* If the % sign is followed by a "*" or another "%", then there will be no
- corresponding pointer in the variable argument list "args". Ignore such
- field specifiers. */
- if( *c != '*' && *c != '%' ) {
-
-/* If possible store the corresponding pointer from the variable argument
- list supplied to this function. Report an error if there are too many. */
- if ( nptr < VMAXFLD ) {
- ptr[ nptr++ ] = va_arg( args, void *);
-
-/* If the current field specifier is "%n" the corresponding pointer
- should be a pointer to an integer. We initialise the integer to zero.
- We need to do this because sscanf does not include "%n" values in the
- returned count of succesful conversions, and so there is no sure way
- of knowing whether a value has been stored for a "%n" field, and so
- whether it is safe to use it as an index into the supplied. */
- if( *c == 'n' ) *( (int *) ptr[ nptr - 1 ] ) = 0;
-
- } else {
- astError( AST__INTER, "astSscanf: Format string "
- "'%s' contains more than %d fields "
- "(AST internal programming error).", status,
- fmt, VMAXFLD );
- break;
- }
- }
-
-/* Move on the first character following the field specifier. */
- c++;
- }
-
-/* If this is not the start of a field specifier, pass on. */
- } else {
- c++;
- }
- }
-
-/* Fill any unused pointers with NULL. */
- for( iptr = nptr; iptr < VMAXFLD; iptr++ ) ptr[iptr] = NULL;
-
-/* Get the length of the string to be scanned. */
- lstr = strlen( str );
-
-/* Get the length of the format string excluding any trailing white space. */
- lfor = astChrLen( fmt );
-
-/* Bill Joye reports that MacOS sscanf fails to return the correct number of
- characters read (using a %n conversion) if there is a space before the
- %n. So check for this. Does the format string contain " %n"? */
- c = strstr( fmt, " %n" );
- if( c && astOK ) {
-
-/* Take a copy of the supplied format string (excluding any trailing spaces). */
- newfor = (char *) astStore( NULL, (void *) fmt, (size_t) lfor + 1 );
- if( newfor ) {
-
-/* Ensure the string is terminated (in case the supplied format string
- has any trailing spaces). */
- newfor[ lfor ] = 0;
-
-/* Remove all spaces from before any %n. */
- c = strstr( (const char *) newfor, " %n" );
- while( c ) {
- while( *(c++) ) *( c - 1 ) = *c;
- c = strstr( newfor, " %n" );
- }
-
-/* Use the native sscanf with the modified format string. Note, we cannot
- use vsscanf because it is not ANSI C. Instead, we list the pointers
- explicitly. */
- ret = sscanf( str, newfor, ptr[0], ptr[1], ptr[2], ptr[3],
- ptr[4], ptr[5], ptr[6], ptr[7], ptr[8], ptr[9],
- ptr[10], ptr[11], ptr[12], ptr[13], ptr[14],
- ptr[15], ptr[16], ptr[17], ptr[18], ptr[19] );
-
-/* Now look through the original format string for conversions specifiers.
- If any %n conversions are found which are preceeded by a space, then
- correct the returned character counts to include any spaces following the
- corresponding point in the scanned string. */
- nfld = 0;
- iptr = 0;
- c = (char *) fmt;
- while( *c ) {
-
-/* Field specifiers are marked by a % sign. */
- if( *c == '%' ) {
-
-/* Look at the character following the % sign. Quit if the end of the string
- has been reached. */
- c++;
- if( *c ) {
-
-/* If the % sign is followed by a "*" or another "%", then there will be no
- corresponding pointer in the variable argument list "args". Ignore such
- field specifiers. */
- if( *c != '*' && *c != '%' ) {
-
-/* Get the supplied pointer corresponding to this field specifier. */
- fptr = ptr[ iptr++ ];
-
-/* Increment the number of matched fields required. "%n" specifiers are not
- included in the value returned by sscanf so skip over them. */
- if( *c != 'n' ) {
- nfld++;
-
-/* If the % sign is followed by a "n", and was preceeded by a space, we
- may need to correct the returned character count. */
- } else if( c > fmt + 1 && *(c-2) == ' ' ) {
-
-/* Do not correct the returned value if sscanf did not get as far as this
- field specifier before an error occurred. */
- if( ret >= nfld ) {
-
-/* Get the original character count produced by sscanf. */
- nc = *( (int *) fptr );
-
-/* For each space in "str" which follows, increment the returned count by
- one (so long as the original count is not zero or more than the length
- of the string - this is not foolproof, but I can't think of a better
- check - all uses of %n in AST initialize the supplied count to zero
- before calling sscanf so a value fo zero is a safe (ish) bet that the
- supplied string doesn't match the supplied format). */
- if( nc > 0 && nc < lstr ) {
- d = str + nc;
- while( *(d++) == ' ' ) nc++;
- *( (int *) fptr ) = nc;
- }
- }
- }
- }
-
-/* Move on the first character following the field specifier. */
- c++;
- }
-
-/* If this is not the start of a field specifier, pass on. */
- } else {
- c++;
- }
- }
-
-/* Release the temporary copy of the format string. */
- newfor = (char *) astFree( (void *) newfor );
- }
-
-/* If the format string should not trigger any known problems, use sscanf
- directly. */
- } else if( astOK ) {
- ret = sscanf( str, fmt, ptr[0], ptr[1], ptr[2], ptr[3],
- ptr[4], ptr[5], ptr[6], ptr[7], ptr[8], ptr[9],
- ptr[10], ptr[11], ptr[12], ptr[13], ptr[14],
- ptr[15], ptr[16], ptr[17], ptr[18], ptr[19] );
- }
- }
-
-/* Tidy up the argument pointer. */
- va_end( args );
-
-/* Return the answer. */
- return ret;
-
-}
-
-
-/* The next functions are used only when memory debugging is
- switched on via the MEM_DEBUG macro. They can be used for locating
- memory leaks, etc. */
-#ifdef MEM_DEBUG
-
-void astActiveMemory_( const char *label ) {
-/*
-*+
-* Name:
-* astActiveMemory
-
-* Purpose:
-* Display a list of any currently active AST memory pointers.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* astActiveMemory( const char *label )
-
-* Description:
-* This function displays a list of the identifiers for all currently
-* active AST memory chunks. The list is written to standard output
-* using "printf", preceeded by the supplied text.
-
-* Parameters:
-* label
-* A textual label to display before the memody id values (may be
-* NULL).
-
-* Notes:
-* - This function attempts to execute even if an error has occurred.
-* - Memory blocks which are not usually freed are not reported. Such
-* blocks are typically used by AST to hold internal state information.
-* They can be freed explicitly by calling astFlushMemory.
-*-
-*/
-
- Memory *next;
-
- if( label ) printf("%s: ", label );
- next = Active_List;
- if( next ) {
- while( next ) {
- if( !next->perm ) printf( "%d ", next->id );
- next = next->next;
- }
- } else {
- printf("There are currently no active AST memory blocks.");
- }
- printf("\n");
-
-}
-
-void astWatchMemory_( int id ) {
-/*
-*+
-* Name:
-* astWatchMemory
-
-* Purpose:
-* Indicate uses of the memory block with the specified identifier
-* should be reported.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* astWatchMemory( int id )
-
-* Description:
-* This function forces astMemoryAlarm to be invoked when key
-* operations are performed on a specified memory block. These key
-* operations include; allocation, freeing, copying and cloning of
-* Objects, etc.
-*
-* astMemoryAlarm reports a message when called identifying the memory
-* block and the action performed on it. When using a debugger, these
-* events can be trapped and investigated by setting a debugger
-* breakpoint in astMemoryAlarm_.
-
-* Parameters:
-* id
-* The identifier of the memory block which is to be watched.
-
-* Notes:
-* - This function attempts to execute even if an error has occurred.
-*-
-*/
- Watched_ID = id;
-}
-
-int astMemoryId_( const void *ptr, int *status ){
-/*
-*+
-* Name:
-* astMemoryId
-
-* Purpose:
-* Return the integer identifier for a memory block.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* int astMemoryId( const void *ptr )
-
-* Description:
-* This function returns the integer identifier associated with a
-* memory block allocated by function sin this module.
-
-* Parameters:
-* ptr
-* The pointer (a genuine C pointer, not an encoded object
-* identifier).
-
-* Returned Value:
-* The integer identifier. A value of -1 is returned if "ptr" is NULL.
-
-*-
-*/
- astDECLARE_GLOBALS;
- astGET_GLOBALS(NULL);
- return ptr ? ((Memory *)(ptr-SIZEOF_MEMORY))->id : -1;
-}
-
-void *astMemoryPtr_( int id ){
-/*
-*+
-* Name:
-* astMemoryPtr
-
-* Purpose:
-* Return a pointer to the memory block with a given identifier.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* void *astMemoryPtr( int id )
-
-* Description:
-* This function returns a pointer to the memory block with a given
-* identifier. NULL is returned if the given identifier is not active.
-
-* Parameters:
-* id
-* The identifier for an active memory block.
-
-* Returned Value:
-* The pointer to the memory block. NULL is returned if no active memory
-* with the given ID can be found. Note, this is always a genuine C
-* pointer (even for public Object pointers).
-
-*-
-*/
- Memory *next;
- void *ret;
-
- ret = NULL;
- next = Active_List;
- while( next ) {
- if( next->id == id ) {
- ret = next + 1;
- break;
- }
- }
-
- return ret;
-}
-
-void astMemoryAlarm_( const char *verb ){
-/*
-*+
-* Name:
-* astMemoryAlarm
-
-* Purpose:
-* Called when a watched memory ID is used.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* void astMemoryAlarm( const char *verb )
-
-* Description:
-* This function is called when a watched memory ID is used. See
-* astWatchMemory.
-
-* Parameters:
-* verb
-* Text to include in message.
-*-
-*/
-
- printf( "astMemoryAlarm: Memory id %d has been %s.\n", Watched_ID, verb );
-}
-
-void astMemoryUse_( const void *ptr, const char *verb, int *status ){
-/*
-*+
-* Name:
-* astMemoryUse
-
-* Purpose:
-* Called to report the use of a memory block pointer.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* void astMemoryUse( void *ptr, const char *verb )
-
-* Description:
-* If the supplied memory block is being watched, astMemoryAlarm is
-* called to report the use of the pointer. The reported text includes
-* the supplied "verb". A memory block can be watched by calling
-* astWatchMemory.
-
-* Parameters:
-* ptr
-* A pointer to the memory block being used. The pointer must have
-* been returned by one of the AST memory management functions (e.g.
-* astMalloc, astRealloc, etc).
-* verb
-* A verb indicating what is being done to the pointer.
-*-
-*/
-
- astDECLARE_GLOBALS;
- astGET_GLOBALS(NULL);
-
- if( ptr && astMemoryId( ptr ) == Watched_ID ) {
- if( !Quiet_Use || !strcmp( verb, ISSUED ) ||
- !strcmp( verb, FREED ) ) {
- astMemoryAlarm( verb );
- }
- }
-}
-
-int astMemoryTune_( const char *name, int value, int *status ){
-/*
-*+
-* Name:
-* astMemoryTune
-
-* Purpose:
-* Set a tuning parameter for the memory debugging functions.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* int astMemoryTune( const char *name, int value )
-
-* Description:
-* There are a few tuning parameters which control the behaviour of
-* the memory debugging functions. This function allows these tuning
-* parameters to be queried or set.
-
-* Parameters:
-* name
-* The name of the tuning parameter to query or set. Valid names are:
-*
-* "Keep_ID": A boolean flag indicating if a new ID should be issued
-* for a cached memory block each time it is returned by astMalloc?
-* Otherwise, the same ID value is used throughtout the life of a
-* memory block. Default is zero (false).
-*
-* "List_Cache": A boolean flag which if non-zero (true) causes the
-* ID of every memory block in the cache to be reported when the
-* cache is emptied by astFlushMemory.
-*
-* "Quiet_Use": A boolean flag controlling the number of reports issued
-* when a memory block is being watched (see astWatchMemory). If
-* non-zero (true), then the only events which are reported are the
-* issuing of a memory block pointer by astMalloc or astRealloc,and
-* the freeing (or caching) of a memory block by astFree. If Quiet_Use
-* is zero (the default), then additional reports are made for
-* memory blocks used to hold AST Objects whenever the Object is
-* copied, cloned, or checked.
-* value
-* The new value for the tuning parameter. If AST__TUNULL is
-* supplied, the original value is left unchanged.
-
-* Returned Value:
-* The original value of the tuning parameter.
-
-*-
-*/
-
- int result = AST__TUNULL;
-
- if( name ) {
-
- if( astChrMatch( name, "Keep_ID" ) ) {
- result = Keep_ID;
- if( value != AST__TUNULL ) Keep_ID = value;
-
- } else if( astChrMatch( name, "Quiet_Use" ) ) {
- result = Quiet_Use;
- if( value != AST__TUNULL ) Quiet_Use = value;
-
- } else if( astChrMatch( name, "List_Cache" ) ) {
- result = List_Cache;
- if( value != AST__TUNULL ) List_Cache = value;
-
- } else if( astOK ) {
- astError( AST__TUNAM, "astMemoryTune: Unknown AST memory tuning "
- "parameter specified \"%s\".", status, name );
- }
- }
-
- return result;
-}
-
-void astBeginPM_( int *status ) {
-/*
-*+
-* Name:
-* astBeginPM
-
-* Purpose:
-* Start a block of permanent memory allocations.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* astBeginPM
-
-* Description:
-* This function indicates that all memory allocations made by calls
-* to other functions in this module (e.g. astMalloc), up to the
-* astEndPM call which matches the astBeginPM call, will not usually
-* be freed explicitly. Matching astBeginPM/astEndPM calls should be
-* used to enclose all code which allocates memory which is never
-* freed explitly by AST. Such memory allocations may be freed if
-* required, using the astFlushMemory function (but note this should
-* only be done once all use of AST by an application has finished).
-*
-* Matching pairs of astBeginPM/astEndPM calls can be nested up to a
-* maximum depth of 20.
-
-*-
-*/
-
- LOCK_DEBUG_MUTEX;
-
-/* The global Perm_Mem flag indicates whether or not subsequent memory
- management functions in this module should store pointers to allocated
- blocks in the PM_List array. Push the current value of this flag
- onto a stack, and set the value to 1. */
- if( PM_Stack_Size >= PM_STACK_MAXSIZE ){
- if( astOK ) {
- astError( AST__INTER, "astBeginPM: Maximum stack size has been "
- "exceeded (internal AST programming error)." , status);
- }
-
- } else {
- PM_Stack[ PM_Stack_Size++ ] = Perm_Mem;
- Perm_Mem = 1;
- }
- UNLOCK_DEBUG_MUTEX;
-}
-
-void astEndPM_( int *status ) {
-/*
-*+
-* Name:
-* astEndPM
-
-* Purpose:
-* End a block of permanent memory allocations.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* astEndPM
-
-* Description:
-* This function indicates the end of the block of permanent memory
-* allocations started by the matching call to astBeginPM. See
-* astBeginPM for further details.
-
-*-
-*/
-
- LOCK_DEBUG_MUTEX;
-
-/* The global Perm_Mem flag indicates whether or not subsequent memory
- management functions in this module should store pointers to allocated
- blocks in the PM_List array. Pop the value from the top of this stack. */
- if( PM_Stack_Size == 0 ){
- if( astOK ) {
- astError( AST__INTER, "astEndPM: astEndPM called without "
- "matching astBeginPM (internal AST programming error)." , status);
- }
-
- } else {
- Perm_Mem = PM_Stack[ --PM_Stack_Size ];
- }
-
- UNLOCK_DEBUG_MUTEX;
-}
-
-void astFlushMemory_( int leak, int *status ) {
-/*
-*+
-* Name:
-* astFlushMemory
-
-* Purpose:
-* Free all permanent and cached memory blocks.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* astFlushMemory( int leak );
-
-* Description:
-* This function should only be called once all use of AST by an
-* application has finished. It frees any allocated but currently
-* unused memory (stored in an internal cache of unused memory
-* pointers), together with any memory used permanently to store
-* internal AST state information.
-*
-* It is not normally necessary to call this function since the memory
-* will be freed anyway by the operating system when the application
-* terminates. However, it can be called if required in order to
-* stop memory management tools such as valgrind from reporting that
-* the memory has not been freed at the end of an application.
-*
-* In addition, if "leak" is non-zero this function will also report
-* an error if any active AST memory pointers remain which have not
-* been freed (other than pointers for the cached and permanent
-* memory described above). Leakage of active memory blocks can be
-* investigated using astActiveMemory and astWatchMemory.
-
-* Parameters:
-* leak
-* Should an error be reported if any non-permanent memory blocks
-* are found to be active?
-
-*-
-*/
-
-/* Local Variables: */
- Memory *next;
- int nact;
- int istat;
-
-/* Empty the cache. */
- astMemCaching( astMemCaching( AST__TUNULL ) );
-
-/* Free and count all non-permanent memory blocks. */
- nact = 0;
- next = Active_List;
- while( Active_List ) {
- next = Active_List->next;
- if( !Active_List->perm ) {
- nact++;
- FREE( Active_List );
- }
- Active_List = next;
- }
-
-/* Report an error if any active pointers remained. if an error has
- already occurred, use the existing status value. */
- if( nact && leak ){
-
- if( astOK ) {
- istat = AST__INTER;
- } else {
- istat = astStatus;
- }
- astError( istat, "astFlushMemory: %d AST memory blocks have not "
- "been released (programming error).", status, nact );
-
- } else {
- printf("astFlushMemory: All AST memory blocks were released correctly.\n" );
- }
-}
-
-static void Issue( Memory *mem, int *status ) {
-/*
-* Name:
-* Issue
-
-* Purpose:
-* Indicate that a pointer to a memory block has been issued.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "memory.h"
-* void Issue( Memeory *mem, int *status );
-
-* Description:
-* Initialises the extra debug items in the Memory header, and adds the
-* Memory structure to the list of active memory blocks.
-
-* Parameters:
-* mem
-* Pointer to the Memory structure.
-* status
-* Pointer to the inherited status value.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS;
-
-/* Return if no pointer was supplied. */
- if( !mem ) return;
-
- LOCK_DEBUG_MUTEX;
- astGET_GLOBALS(NULL);
-
-/* Store a unique identifier for this pointer. Unless global Keep_ID is
- non-zero, a new identifier is used each time the pointer becomes active
- (i.e. each time it is remove from the cache or malloced). */
- if( !Keep_ID || mem->id < 0 ) mem->id = ++Next_ID;
-
-/* Indicate if this is a permanent memory block (i.e. it will usually not
- be freed by AST). */
- mem->perm = Perm_Mem;
-
-/* Add it to the double linked list of active pointers. */
- mem->next = Active_List;
- mem->prev = NULL;
- if( Active_List ) Active_List->prev = mem;
- Active_List = mem;
-
-/* Report that the pointer is being issued. */
- astMemoryUse( (void *) mem + SIZEOF_MEMORY, ISSUED );
-
- UNLOCK_DEBUG_MUTEX;
-}
-
-static void DeIssue( Memory *mem, int *status ) {
-/*
-* Name:
-* DeIssue
-
-* Purpose:
-* Indicate that a pointer to a memory block has been freed.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "memory.h"
-* void DeIssue( Memeory *mem, int *status );
-
-* Description:
-* Initialises the extra debug items in the Memory header, and adds the
-* Memory structure to the list of active memory blocks.
-
-* Parameters:
-* mem
-* Pointer to the Memory structure.
-* status
-* Pointer to the inherited status value.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS;
- Memory *next;
- Memory *prev;
-
-/* Return if no pointer was supplied. */
- if( !mem ) return;
-
- LOCK_DEBUG_MUTEX;
- astGET_GLOBALS(NULL);
-
-/* Report that the pointer is being freed. */
- astMemoryUse( (void *) mem + SIZEOF_MEMORY, FREED );
-
-/* Remove the block from the double linked list of active pointers. */
- next = mem->next;
- prev = mem->prev;
- if( prev ) prev->next = next;
- if( next ) next->prev = prev;
- if( mem == Active_List ) Active_List = next;
-
- UNLOCK_DEBUG_MUTEX;
-}
-
-
-#endif
-
-
-
-
-
-
-/* The next functions are used only when profiling AST application. */
-#ifdef MEM_PROFILE
-
-
-void astStartTimer_( const char *file, int line, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astStartTimer
-
-* Purpose:
-* Measure the time spent until the corresponding call to astStopTimer.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* void astStartTimer( const char *name );
-
-* Description:
-* This function looks for a timer with the specified name within the
-* current parent timer. If no timer with the given name is found, a
-* new timer is created and initialised to zero. The current absolute
-* time (elapsed, user and system) is recorded in the timer. The new
-* timer then becomes the current timer.
-
-* Parameters:
-* name
-* A label for the timer. This should be unique within the
-* enclosing parent timer.
-
-* Notes:
-* - This function should only be used in a single-threaded environment.
-* - This function returns without action if timers are currently
-* disabled (see astEnableTimers).
-
-*-
-*/
-
-/* Local Variables: */
- int n, found, i;
- AstTimer *t;
- struct tms buf;
-
-/* Check inherited status. Also return if timers are currently disabled. */
- if( !Enable_Timers || *status != 0 ) return;
-
-/* See if a timer with the given name exists in the list of child timers
- within the current timer. */
- found = 0;
- if( Current_Timer ) {
- for( i = 0; i < Current_Timer->nchild; i++ ) {
- t = Current_Timer->children[ i ];
- if( !strcmp( t->name, name ) ) {
- found = 1;
- break;
- }
- }
- }
-
-/* If not, create and initialise one now, and add it into the list of
- children within the current timer. */
- if( !found ) {
- t = astMalloc( sizeof( AstTimer ) );
- t->id = Timer_Count++;
- t->et = 0;
- t->ut = 0;
- t->st = 0;
- t->nentry = 0;
- t->name = name;
- t->file = file;
- t->line = line;
- t->parent = Current_Timer;
- t->nchild = 0;
- t->children = NULL;
-
- if( Current_Timer ) {
- n = (Current_Timer->nchild)++;
- Current_Timer->children = astGrow( Current_Timer->children,
- sizeof( AstTimer *),
- Current_Timer->nchild );
- Current_Timer->children[ n ] = t;
- }
- }
-
-/* Record the current absolute times (elapsed, user and system) within
- the new timer. */
- t->e0 = times(&buf);
- t->u0 = buf.tms_utime;
- t->s0 = buf.tms_stime;
-
-/* Increment the number of entries into the timer. */
- (t->nentry)++;
-
-/* Use the new timer as the current timer until the corresponding call to
- astStopTimer. */
- Current_Timer = t;
-}
-
-void astEnableTimers_( int enable, int *status ) {
-/*
-*+
-* Name:
-* astEnableTimers
-
-* Purpose:
-* Set a global flag indicating if the use of AST timers is enabled.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* void astStartTimer( int enable );
-
-* Description:
-* This function sets a global flag that enables otr disables the user
-* of AST Timers. If timers are disabled, the astStartTimer and
-* astStopTimer functions will return without action.
-
-* Parameters:
-* enable
-* If non-zero, timers will be used.
-
-* Notes:
-* - This function should only be used in a single-threaded environment.
-
-*-
-*/
- Enable_Timers = enable;
-}
-
-void astStopTimer_( int *status ) {
-/*
-*+
-* Name:
-* astStopTimer
-
-* Purpose:
-* Record the time spent since the corresponding call to astStartTimer.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "memory.h"
-* void astStopTimer;
-
-* Description:
-* This function obtains the time increments since the corresponding
-* call to astStartTimer, and adds these increments onto the total
-* times stored in the current timer. It then changes the current
-* timer to be the parent timer associated the current timer on entry.
-*
-* If the current timer on entry has no parent (i.e. is a top level
-* timer), the times spent in the top-level timer, and all its
-* descendent timers, are displayed.
-
-* Notes:
-* - This function should only be used in a single-threaded environment.
-* - This function returns without action if timers are currently
-* disabled (see astEnableTimers).
-
-*-
-*/
-
-/* Local Variables: */
- AstTimer *flat;
- AstTimer *t;
- int i;
- int nflat;
- struct tms buf;
-
-/* Check inherited status. Also return if timers are currently disabled. */
- if( !Enable_Timers || !Current_Timer || *status != 0 ) return;
-
-/* Get the current absolute times, and thus find the elapsed times since the
- corresponding call to astStartTimer. Use these elapsed times to increment
- the total times spent in the timer. */
- Current_Timer->et += ( times(&buf) - Current_Timer->e0 );
- Current_Timer->st += ( buf.tms_stime - Current_Timer->s0 );
- Current_Timer->ut += ( buf.tms_utime - Current_Timer->u0 );
-
-/* If this is a top level timer, display the times spent in the current
- timer, and in all its descendent timers. This also frees the memory
- used by the timers. */
- if( !Current_Timer->parent ) {
- flat = NULL;
- nflat = 0;
- Current_Timer = ReportTimer( Current_Timer, 0, &flat, &nflat, status );
-
-/* Sort and display the flat list of timers, then free the memory used by
- the flat list. */
- qsort( flat, nflat, sizeof( AstTimer), CompareTimers2 );
- printf("\n\n");
- t = flat;
- for( i = 0; i < nflat; i++,t++ ) {
- printf( "%s (%s:%d): ", t->name, t->file, t->line );
- printf( "elapsed=%ld ", (long int) t->et );
-/*
- printf( "system=%ld ", (long int) t->st );
- printf( "user=%ld ", (long int) t->ut );
-*/
- printf( "calls=%d ", t->nentry );
- printf("\n");
- }
- flat = astFree( flat );
-
-/* If this is not a top level timer, restore the parent timer as the
- curent timer. */
- } else {
- Current_Timer = Current_Timer->parent;
- }
-}
-
-static AstTimer *ReportTimer( AstTimer *t, int ind, AstTimer **flat,
- int *nflat, int *status ) {
-/*
-* Name:
-* ReportTimer
-
-* Purpose:
-* Free and report the times spent in a given timer, and all descendents.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "memory.h"
-* AstTimer *ReportTimer( AstTimer *t, int ind, AstTimer **flat,
-* int *nflat, int *status )
-
-* Description:
-* This routines reports to standard output the times spent in the
-* supplied timer. It then calls itself recursively to report the times
-* spent in each of the child timers of the supplied timer.
-*
-* It also frees the memory used to hold the supplied timer.
-
-* Parameters:
-* t
-* Pointer to the AstTimer structure.
-* ind
-* The number of spaces of indentation to display before the timer
-* details.
-* flat
-* Address of a pointer to the start of an array of AstTimers. The
-* number of elements in this array is given by "*nflat". Each
-* Timer in this array holds the accumulated total for all entries
-* into a given timer, from all parent contexts.
-* nflat
-* Address of an int holding the current length of the "*flat" array.
-* status
-* Pointer to the inherited status value.
-*/
-
-/* Local Variables: */
- int found;
- int i;
- AstTimer *ft;
- AstTimer *parent;
-
-/* Check inherited status */
- if( *status != 0 ) return NULL;
-
-/* Display a single line of text containing the times stored in the supplied
- timer, preceeded by the requested number of spaces. */
- for( i = 0; i < ind; i++ ) printf(" ");
- printf( "%s (%s:%d): ", t->name, t->file, t->line );
-
- printf( "id=%d ", t->id );
- printf( "elapsed=%ld ", (long int) t->et );
-/*
- printf( "system=%ld ", (long int) t->st );
- printf( "user=%ld ", (long int) t->ut );
-*/
- printf( "calls=%d ", t->nentry );
-
-/* If there are any children, end the line with an opening bvrace. */
- if( t->nchild ) printf("{");
- printf("\n");
-
-/* If there is more than one child, sort them into descending order of
- elapsed time usage. */
- if( t->nchild > 1 ) qsort( t->children, t->nchild, sizeof( AstTimer * ),
- CompareTimers );
-
-/* Increment the indentation and call this function recursively to
- display and free each child timer. */
- ind += 3;
- for( i = 0; i < t->nchild; i++ ) {
- (t->children)[ i ] = ReportTimer( (t->children)[ i ], ind, flat,
- nflat, status );
- }
-
-/* Delimit the children by displaying a closing brace. */
- if( t->nchild ) {
- for( i = 0; i < ind - 3; i++ ) printf(" ");
- printf("}\n");
- }
-
-/* See if this timer is contained within itself at a higher level. */
- parent = t->parent;
- while( parent && ( parent->line != t->line ||
- strcmp( parent->file, t->file ) ) ) {
- parent = parent->parent;
- }
-
-/* If not, search for a timer in the "flat" array of timers that has the same
- source file and line number. */
- if( !parent ) {
- found = 0;
- ft = *flat;
- for( i = 0; i < *nflat; i++, ft++ ) {
- if( ft->line == t->line &&
- !strcmp( ft->file, t->file ) ) {
- found = 1;
- break;
- }
- }
-
-/* If not found, add a new timer to the end of the "flat" array and
- initialise it. */
- if( !found ) {
- i = (*nflat)++;
- *flat = astGrow( *flat, *nflat, sizeof( AstTimer ) );
- ft = (*flat) + i;
- ft->id = 0;
- ft->et = t->et;
- ft->ut = t->ut;
- ft->st = t->st;
- ft->nentry = t->nentry;
- ft->name = t->name;
- ft->file = t->file;
- ft->line = t->line;
- ft->parent = NULL;
- ft->nchild = 0;
- ft->children = NULL;
-
-
-/* If found, increment the properites to include the supplied timer. */
- } else {
- ft->et += t->et;
- ft->ut += t->ut;
- ft->st += t->st;
- ft->nentry += t->nentry;
- }
- }
-
-/* Free the memory used by the supplied timer. */
- t->children = astFree( t->children );
- return astFree( t );
-}
-
-
-static int CompareTimers( const void *a, const void *b ){
- return ((*((AstTimer **) b ))->et) - ((*((AstTimer **) a ))->et);
-}
-
-static int CompareTimers2( const void *a, const void *b ){
- return (((AstTimer *) b )->et) - (((AstTimer *) a )->et);
-}
-
-#endif
diff --git a/ast-5.3-1/memory.h b/ast-5.3-1/memory.h
deleted file mode 100644
index 380b012..0000000
--- a/ast-5.3-1/memory.h
+++ /dev/null
@@ -1,307 +0,0 @@
-#if !defined( MEMORY_INCLUDED ) /* Include this file only once */
-#define MEMORY_INCLUDED
-/*
-*+
-* Name:
-* memory.h
-
-* Purpose:
-* Define the interface to the Memory module.
-
-* Description:
-* This module defines functions which wrap up and extend the
-* standard C functions for performing memory allocation. They
-* provide better security against memory leaks, etc., and should
-* not be inter-mixed with the standard C functions.
-*
-* Note that this module is not a class implementation, although it
-* resembles one.
-
-* Functions Defined:
-* Public:
-* None.
-*
-* Protected:
-* astAppendString
-* Append a string to another string which grows dynamically.
-* astChrMatch
-* Case-insensitive string comparison.
-* astChrMatchN
-* Case-insensitive string comparison of an most N characters.
-* astFree
-* Free previously allocated memory.
-* astGrow
-* Allocate memory for an adjustable array.
-* astMalloc
-* Allocate memory.
-* astRealloc
-* Change the size of a dynamically allocated region of memory.
-* astSizeOf
-* Determine the size of a dynamically allocated region of memory.
-* astStore
-* Store data in dynamically allocated memory.
-* astString
-* Create a C string from an array of characters.
-* astStringArray
-* Create an array of C strings from an array of characters.
-* astChrLen
-* Returns length of a string without trailing white space, etc.
-* astSscanf
-* Like sscanf, but fixes certain platform-specific bugs in the
-* native sscanf implementation.
-* astTSizeOf
-* Determine the total size of a dynamically allocated region of memory.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: D.S. Berry (Starlink)
-
-* History:
-* 8-JAN-1996 (RFWS):
-* Original version.
-* 26-JAN-1996 (RFWS)
-* Added function interfaces.
-* 20-JUN-1996 (RFWS):
-* Added astString.
-* 15-JUL-1996 (RFWS):
-* Use improved prologue style, etc. and make all functions protected.
-* 11-SEP-1996 (RFWS):
-* Added astStringArray (original written by DSB).
-* 18-MAR-1998 (RFWS):
-* Make interface available for writing foreign language and
-* graphics interfaces, etc.
-* 18-MAR-1998 (RFWS):
-* Added explicit arguments to function macros.
-* 29-JAN-2002 (DSB):
-* Added astChrLen and astSscanf.
-* 15-NOV-2002 (DSB):
-* Added astChrMatch astChrMatchN.
-* 23-FEB-2006 (DSB):
-* Added astMemCaching and AST__TUNULL.
-* 2-MAR-2006 (DSB):
-* Only use astSscanf if the system on which AST was configured
-* showed the non-ANSI behaviour reported by Bill Joye.
-* 27-JUN-2007 (DSB):
-* Added astIsDynamic.
-* 25-OCT-2007 (DSB):
-* Added astRemoveLeadingBlanks.
-* 22-FEB-2008 (DSB):
-* Added astChrSub.
-
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Configuration results. */
-/* ---------------------- */
-#include <config.h>
-
-/* C header files. */
-/* --------------- */
-#include <stddef.h>
-#include "error.h"
-
-/* Macros. */
-/* ======= */
-
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-#define AST__TUNULL -99999
-
-/* Type definitions */
-/* ================ */
-
-#if defined(astCLASS)
-
-/* Header for allocated memory. */
-/* ---------------------------- */
-/* This stores a "magic" value so that dynamically allocated memory
- can be recognised, together with the allocated size. It also
- ensures correct alignment. */
-typedef struct Memory {
- struct Memory *next;
- unsigned long magic;
- size_t size;
-
-#ifdef MEM_DEBUG
- struct Memory *prev; /* Pointer to the previous linked Memory structure */
- int id; /* A unique identifier for every allocated memory chunk */
- int perm; /* Is this chunk part of an acceptable once-off "memory leak"? */
-#endif
-
-} Memory;
-
-/* Define the largest size of a cached memory block in bytes. This does
- not include the size of the Memory header. This does not need to be
- too big because the vast majority of memory blocks allocated by AST are
- less than a few hundred bytes. */
-#define MXCSIZE 300
-
-#endif
-
-
-#if defined(THREAD_SAFE) && defined(astCLASS)
-
-/* Define a structure holding all data items that are global within the
- memory.c file. */
-typedef struct AstMemoryGlobals {
- size_t Sizeof_Memory;
- int Cache_Init;
- int Use_Cache;
- Memory *Cache[ MXCSIZE + 1 ];
-
-} AstMemoryGlobals;
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-
-#if defined(THREAD_SAFE) && defined(astCLASS)
-void astInitMemoryGlobals_( AstMemoryGlobals * );
-#endif
-
-#if defined(astCLASS) || 1 /* Nominally protected, but available for */
- /* use in developing (e.g.) foreign */
- /* language or graphics interfaces. */
-int astMemCaching_( int, int * );
-char **astChrSplit_( const char *, int *, int * );
-char **astChrSplitRE_( const char *, const char *, int *, const char **, int * );
-char **astChrSplitC_( const char *, char, int *, int * );
-int astChrMatch_( const char *, const char *, int * );
-int astChrMatchN_( const char *, const char *, size_t, int * );
-char **astStringArray_( const char *, int, int, int * );
-char *astString_( const char *, int, int * );
-int astSscanf_( const char *str, const char *format, ...);
-size_t astSizeOf_( const void *, int * );
-int astIsDynamic_( const void *, int * );
-size_t astTSizeOf_( const void *, int * );
-void *astFree_( void *, int * );
-void *astGrow_( void *, int, size_t, int * );
-void *astMalloc_( size_t, int * );
-void *astRealloc_( void *, size_t, int * );
-void *astStore_( void *, const void *, size_t, int * );
-size_t astChrLen_( const char *, int * );
-double astChr2Double_( const char *, int * );
-void astRemoveLeadingBlanks_( char *, int * );
-char *astAppendString_( char *, int *, const char *, int * );
-char *astChrSub_( const char *, const char *, const char *[], int, int * );
-
-#ifdef MEM_PROFILE
-void astStartTimer_( const char *, int, const char *, int * );
-void astStopTimer_( int * );
-void astEnableTimers_( int, int * );
-#endif
-
-
-#ifdef MEM_DEBUG
-void astActiveMemory_( const char * );
-void astWatchMemory_( int );
-void astFlushMemory_( int, int * );
-int astMemoryTune_( const char *, int, int * );
-void *astMemoryPtr_( int );
-void astMemoryAlarm_( const char * );
-void astMemoryUse_( const void *, const char *, int * );
-int astMemoryId_( const void *, int * );
-void astBeginPM_( int * );
-void astEndPM_( int * );
-#endif
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These wrap up the functions defined by this module. */
-
-#define astChrMatch(str1,str2) astERROR_INVOKE(astChrMatch_(str1,str2,STATUS_PTR))
-#define astChrMatchN(str1,str2,n) astERROR_INVOKE(astChrMatchN_(str1,str2,n,STATUS_PTR))
-#define astFree(ptr) astERROR_INVOKE(astFree_(ptr,STATUS_PTR))
-#define astGrow(ptr,n,size) astERROR_INVOKE(astGrow_(ptr,n,size,STATUS_PTR))
-#define astMalloc(size) astERROR_INVOKE(astMalloc_(size,STATUS_PTR))
-#define astMemCaching(flag) astERROR_INVOKE(astMemCaching_(flag,STATUS_PTR))
-#define astRealloc(ptr,size) astERROR_INVOKE(astRealloc_(ptr,size,STATUS_PTR))
-#define astSizeOf(ptr) astERROR_INVOKE(astSizeOf_(ptr,STATUS_PTR))
-#define astIsDynamic(ptr) astERROR_INVOKE(astIsDynamic_(ptr,STATUS_PTR))
-#define astTSizeOf(ptr) astERROR_INVOKE(astTSizeOf_(ptr,STATUS_PTR))
-#define astStore(ptr,data,size) astERROR_INVOKE(astStore_(ptr,data,size,STATUS_PTR))
-#define astAppendString(ptr,len,text) astERROR_INVOKE(astAppendString_(ptr,len,text,STATUS_PTR))
-#define astString(chars,nchars) astERROR_INVOKE(astString_(chars,nchars,STATUS_PTR))
-#define astStringArray(chars,nel,len) astERROR_INVOKE(astStringArray_(chars,nel,len,STATUS_PTR))
-#define astChrLen(string) astERROR_INVOKE(astChrLen_(string,STATUS_PTR))
-#define astChr2Double(string) astERROR_INVOKE(astChr2Double_(string,STATUS_PTR))
-#define astRemoveLeadingBlanks(string) astERROR_INVOKE(astRemoveLeadingBlanks_(string,STATUS_PTR))
-#define astChrSub(test,template,subs,nsub) astERROR_INVOKE(astChrSub_(test,template,subs,nsub,STATUS_PTR))
-
-#ifdef HAVE_NONANSI_SSCANF
-#define astSscanf astERROR_INVOKE(astSscanf_)
-#else
-#define astSscanf astERROR_INVOKE(sscanf)
-#endif
-#define astChrSplit(str,n) astERROR_INVOKE(astChrSplit_(str,n,STATUS_PTR))
-#define astChrSplitC(str,c,n) astERROR_INVOKE(astChrSplitC_(str,c,n,STATUS_PTR))
-#define astChrSplitRE(str,c,n,m) astERROR_INVOKE(astChrSplitRE_(str,c,n,m,STATUS_PTR))
-
-
-#ifdef MEM_PROFILE
-#define astStartTimer(name) astERROR_INVOKE(astStartTimer_(__FILE__,__LINE__,name,STATUS_PTR))
-#define astStopTimer astERROR_INVOKE(astStopTimer_(STATUS_PTR))
-#define astEnableTimers(enable) astERROR_INVOKE(astEnableTimers_(enable,STATUS_PTR))
-#endif
-
-
-/* Functions used for debugging memory leaks, etc */
-#ifdef MEM_DEBUG
-
-#define astActiveMemory(label) astERROR_INVOKE(astActiveMemory_(label))
-#define astMemoryTune(name,value) astERROR_INVOKE(astMemoryTune_(name,value,STATUS_PTR))
-#define astWatchMemory(id) astERROR_INVOKE(astWatchMemory_(id))
-#define astFlushMemory(leak) astERROR_INVOKE(astFlushMemory_(leak,STATUS_PTR))
-#define astBeginPM astERROR_INVOKE(astBeginPM_(STATUS_PTR))
-#define astEndPM astERROR_INVOKE(astEndPM_(STATUS_PTR))
-#define astMemoryPtr(id) astERROR_INVOKE(astMemoryPtr_(id))
-#define astMemoryAlarm(text) astERROR_INVOKE(astMemoryAlarm_(text))
-#define astMemoryUse(ptr,text) astERROR_INVOKE(astMemoryUse_(ptr,text,STATUS_PTR))
-#define astMemoryId(ptr) astERROR_INVOKE(astMemoryId_(ptr,STATUS_PTR))
-#else
-
-#define astActiveMemory(label)
-#define astMemoryTune(name,value)
-#define astWatchMemory(id)
-#define astFlushMemory(leak)
-#define astBeginPM
-#define astEndPM
-#define astMemoryPtr(id) NULL
-#define astMemoryAlarm(text)
-#define astMemoryUse(ptr,text)
-#define astMemoryId(ptr)
-
-#endif
-
-#endif
-
-
-
diff --git a/ast-5.3-1/missing b/ast-5.3-1/missing
deleted file mode 100755
index 85b697b..0000000
--- a/ast-5.3-1/missing
+++ /dev/null
@@ -1,381 +0,0 @@
-#! /bin/sh
-# Common stub for a few missing GNU programs while installing.
-
-scriptversion=2005-06-08.21
-
-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
-# Free Software Foundation, Inc.
-# Originally by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-if test $# -eq 0; then
- echo 1>&2 "Try \`$0 --help' for more information"
- exit 1
-fi
-
-run=:
-
-# In the cases where this matters, `missing' is being run in the
-# srcdir already.
-if test -f configure.ac; then
- configure_ac=configure.ac
-else
- configure_ac=configure.in
-fi
-
-msg="missing on your system"
-
-# If MISSING_SUPPRESS_RUN is true, then ignore any --run option.
-# Allow MISSING_SUPPRESS_RUN to be defaulted in the environment, but default
-# it to false, giving original behaviour.
-if test -z "$MISSING_SUPPRESS_RUN"; then
- MISSING_SUPPRESS_RUN=false
-fi
-
-case "$1" in
---run)
- if $MISSING_SUPPRESS_RUN; then
- # Merely shift the --run option off the list: do not run the command,
- # and do not set $run to be null.
- shift
- else
- # Try to run requested program, and just exit if it succeeds.
- run=
- shift
- "$@" && exit 0
- # Exit code 63 means version mismatch. This often happens
- # when the user tries to use an ancient version of a tool on
- # a file that requires a minimum version. In this case
- # we should proceed as if the program had been absent, or
- # if --run hadn't been passed.
- if test $? = 63; then
- run=:
- msg="probably too old"
- fi
- fi
- ;;
-
- -h|--h|--he|--hel|--help)
- echo "\
-$0 [OPTION]... PROGRAM [ARGUMENT]...
-
-Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
-error status if there is no known handling for PROGRAM.
-
-Options:
- -h, --help display this help and exit
- -v, --version output version information and exit
- --run try to run the given command, and emulate it if it fails
-
-Supported PROGRAM values:
- aclocal touch file \`aclocal.m4'
- autoconf touch file \`configure'
- autoheader touch file \`config.h.in'
- automake touch all \`Makefile.in' files
- bison create \`y.tab.[ch]', if possible, from existing .[ch]
- flex create \`lex.yy.c', if possible, from existing .c
- help2man touch the output file
- lex create \`lex.yy.c', if possible, from existing .c
- makeinfo touch the output file
- tar try tar, gnutar, gtar, then tar without non-portable flags
- yacc create \`y.tab.[ch]', if possible, from existing .[ch]
-
-Send bug reports to <bug-automake at gnu.org>."
- exit $?
- ;;
-
- -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
- echo "missing $scriptversion (GNU Automake)"
- exit $?
- ;;
-
- -*)
- echo 1>&2 "$0: Unknown \`$1' option"
- echo 1>&2 "Try \`$0 --help' for more information"
- exit 1
- ;;
-
-esac
-
-# Now exit if we have it, but it failed. Also exit now if we
-# don't have it and --version was passed (most likely to detect
-# the program).
-case "$1" in
- lex|yacc)
- # Not GNU programs, they don't have --version.
- ;;
-
- tar)
- if test -n "$run"; then
- echo 1>&2 "ERROR: \`tar' requires --run"
- exit 1
- elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
- exit 1
- fi
- ;;
-
- *)
- if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
- # We have it, but it failed.
- exit 1
- elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
- # Could not run --version or --help. This is probably someone
- # running `$TOOL --version' or `$TOOL --help' to check whether
- # $TOOL exists and not knowing $TOOL uses missing.
- exit 1
- fi
- ;;
-esac
-
-# If it does not exist, or fails to run (possibly an outdated version),
-# try to emulate it.
-case "$1" in
- aclocal*)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified \`acinclude.m4' or \`${configure_ac}'. You might want
- to install the \`Automake' and \`Perl' packages. Grab them from
- any GNU archive site."
- touch aclocal.m4
- ;;
-
- autoconf)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified \`${configure_ac}'. You might want to install the
- \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
- archive site."
- touch configure
- ;;
-
- autoheader)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified \`acconfig.h' or \`${configure_ac}'. You might want
- to install the \`Autoconf' and \`GNU m4' packages. Grab them
- from any GNU archive site."
- files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
- test -z "$files" && files="config.h"
- touch_files=
- for f in $files; do
- case "$f" in
- *:*) touch_files="$touch_files "`echo "$f" |
- sed -e 's/^[^:]*://' -e 's/:.*//'`;;
- *) touch_files="$touch_files $f.in";;
- esac
- done
- touch $touch_files
- ;;
-
- automake*)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
- You might want to install the \`Automake' and \`Perl' packages.
- Grab them from any GNU archive site."
- find . -type f -name Makefile.am -print |
- sed 's/\.am$/.in/' |
- while read f; do touch "$f"; done
- ;;
-
- autom4te)
- echo 1>&2 "\
-WARNING: \`$1' is needed, but is $msg.
- You might have modified some files without having the
- proper tools for further handling them.
- You can get \`$1' as part of \`Autoconf' from any GNU
- archive site."
-
- file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
- test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
- if test -f "$file"; then
- touch $file
- else
- test -z "$file" || exec >$file
- echo "#! /bin/sh"
- echo "# Created by GNU Automake missing as a replacement of"
- echo "# $ $@"
- echo "exit 0"
- chmod +x $file
- exit 1
- fi
- ;;
-
- bison|yacc)
- echo 1>&2 "\
-WARNING: \`$1' $msg. You should only need it if
- you modified a \`.y' file. You may need the \`Bison' package
- in order for those modifications to take effect. You can get
- \`Bison' from any GNU archive site."
- rm -f y.tab.c y.tab.h
- if [ $# -ne 1 ]; then
- eval LASTARG="\${$#}"
- case "$LASTARG" in
- *.y)
- SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
- if [ -f "$SRCFILE" ]; then
- cp "$SRCFILE" y.tab.c
- fi
- SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
- if [ -f "$SRCFILE" ]; then
- cp "$SRCFILE" y.tab.h
- fi
- ;;
- esac
- fi
- if [ ! -f y.tab.h ]; then
- echo >y.tab.h
- fi
- if [ ! -f y.tab.c ]; then
- echo 'main() { return 0; }' >y.tab.c
- fi
- ;;
-
- lex|flex)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified a \`.l' file. You may need the \`Flex' package
- in order for those modifications to take effect. You can get
- \`Flex' from any GNU archive site."
- rm -f lex.yy.c
- if [ $# -ne 1 ]; then
- eval LASTARG="\${$#}"
- case "$LASTARG" in
- *.l)
- SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
- if [ -f "$SRCFILE" ]; then
- cp "$SRCFILE" lex.yy.c
- fi
- ;;
- esac
- fi
- if [ ! -f lex.yy.c ]; then
- echo 'main() { return 0; }' >lex.yy.c
- fi
- ;;
-
- help2man)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified a dependency of a manual page. You may need the
- \`Help2man' package in order for those modifications to take
- effect. You can get \`Help2man' from any GNU archive site."
-
- file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
- if test -z "$file"; then
- file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
- fi
- if [ -f "$file" ]; then
- touch $file
- else
- test -z "$file" || exec >$file
- echo ".ab help2man is required to generate this page"
- exit 1
- fi
- ;;
-
- makeinfo)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified a \`.texi' or \`.texinfo' file, or any other file
- indirectly affecting the aspect of the manual. The spurious
- call might also be the consequence of using a buggy \`make' (AIX,
- DU, IRIX). You might want to install the \`Texinfo' package or
- the \`GNU make' package. Grab either from any GNU archive site."
- # The file to touch is that specified with -o ...
- file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
- if test -z "$file"; then
- # ... or it is the one specified with @setfilename ...
- infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
- file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
- # ... or it is derived from the source name (dir/f.texi becomes f.info)
- test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
- fi
- # If the file does not exist, the user really needs makeinfo;
- # let's fail without touching anything.
- test -f $file || exit 1
- touch $file
- ;;
-
- tar)
- shift
-
- # We have already tried tar in the generic part.
- # Look for gnutar/gtar before invocation to avoid ugly error
- # messages.
- if (gnutar --version > /dev/null 2>&1); then
- gnutar "$@" && exit 0
- fi
- if (gtar --version > /dev/null 2>&1); then
- gtar "$@" && exit 0
- fi
- firstarg="$1"
- if shift; then
- case "$firstarg" in
- *o*)
- firstarg=`echo "$firstarg" | sed s/o//`
- tar "$firstarg" "$@" && exit 0
- ;;
- esac
- case "$firstarg" in
- *h*)
- firstarg=`echo "$firstarg" | sed s/h//`
- tar "$firstarg" "$@" && exit 0
- ;;
- esac
- fi
-
- echo 1>&2 "\
-WARNING: I can't seem to be able to run \`tar' with the given arguments.
- You may want to install GNU tar or Free paxutils, or check the
- command line arguments."
- exit 1
- ;;
-
- true)
- # Very easy to emulate! We are almost certainly here because
- # (i) ./configure is testing us by running `.../missing --run true'
- # _and_ (ii) RUN_LOCAL_AUTOTOOLS is false, so that we didn't run
- # `true' at the top.
- exit 0
- ;;
-
- *)
- echo 1>&2 "\
-WARNING: \`$1' is needed, and is $msg.
- You might have modified some files without having the
- proper tools for further handling them. Check the \`README' file,
- it often tells you about the needed prerequisites for installing
- this package. You may also peek at any GNU archive site, in case
- some other package would contain this missing \`$1' program."
- exit 1
- ;;
-esac
-
-exit 0
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/ast-5.3-1/normmap.c b/ast-5.3-1/normmap.c
deleted file mode 100644
index 8a63197..0000000
--- a/ast-5.3-1/normmap.c
+++ /dev/null
@@ -1,1664 +0,0 @@
-/*
-*class++
-* Name:
-* NormMap
-
-* Purpose:
-* Normalise coordinates using a supplied Frame.
-
-* Constructor Function:
-c astNormMap
-f AST_NORMMAP
-
-* Description:
-* The NormMap class implements a Mapping which normalises coordinate
-* values using the
-c astNorm function
-f AST_NORM routine
-* of a supplied Frame. The number of inputs and outputs of a NormMap
-* are both equal to the number of axes in the supplied Frame.
-*
-* The forward and inverse transformation of a NormMap are both
-* defined but are identical (that is, they do not form a real inverse
-* pair in that the inverse transformation does not undo the
-* normalisation, instead it reapplies it). However, the
-c astSimplify
-f AST_SIMPLIFY
-* function will replace neighbouring pairs of forward and inverse
-* NormMaps by a single UnitMap.
-
-* Inheritance:
-* The NormMap class inherits from the Mapping class.
-
-* Attributes:
-* The MatrixMap class does not define any new attributes beyond
-* those which are applicable to all Mappings.
-
-* Functions:
-c The NormMap class does not define any new functions beyond those
-f The NormMap class does not define any new routines beyond those
-* which are applicable to all Mappings.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 11-JUL-2005 (DSB):
-* Original version.
-* 23-AUG-2006 (DSB):
-* Override astEqual.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS NormMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-#include "channel.h" /* I/O channels */
-#include "unitmap.h" /* Unit Mappings */
-#include "normmap.h" /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static int *(* parent_mapsplit)( AstMapping *, int, const int *, AstMapping **, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(NormMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(NormMap,Class_Init)
-#define class_vtab astGLOBAL(NormMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstNormMapVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstNormMap *astNormMapId_( void *, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMapping *RemoveRegions( AstMapping *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-/* Member functions. */
-/* ================= */
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two NormMaps are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "normmap.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* NormMap member function (over-rides the astEqual protected
-* method inherited from the astMapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two NormMaps are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Object (a NormMap).
-* that
-* Pointer to the second Object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the NormMaps are equivalent, zero otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstNormMap *that;
- AstNormMap *this;
- int result;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain pointers to the two NormMap structures. */
- this = (AstNormMap *) this_object;
- that = (AstNormMap *) that_object;
-
-/* Check the second object is a NormMap. We know the first is a
- NormMap since we have arrived at this implementation of the virtual
- function. */
- if( astIsANormMap( that ) ) {
-
-/* Check the Invert flags for the two NormMaps are equal. */
- if( astGetInvert( this ) == astGetInvert( that ) ) {
-
-/* Check the two Frames are equal. */
- if( astEqual( this->frame, that->frame ) ) {
- result = 1;
- }
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-void astInitNormMapVtab_( AstNormMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitNormMapVtab
-
-* Purpose:
-* Initialise a virtual function table for a NormMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "normmap.h"
-* void astInitNormMapVtab( AstNormMapVtab *vtab, const char *name )
-
-* Class Membership:
-* NormMap vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the NormMap class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsANormMap) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
-
- mapping->RemoveRegions = RemoveRegions;
-
-#if defined(THREAD_SAFE)
- parent_managelock = object->ManageLock;
- object->ManageLock = ManageLock;
-#endif
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
- parent_mapsplit = mapping->MapSplit;
- mapping->MapSplit = MapSplit;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- object->Equal = Equal;
- mapping->MapMerge = MapMerge;
- mapping->MapSplit = MapSplit;
- mapping->Rate = Rate;
-
-/* Declare the copy constructor, destructor and class dump function. */
- astSetDump( vtab, Dump, "NormMap", "Normalise axis values" );
- astSetCopy( vtab, Copy );
- astSetDelete( vtab, Delete );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra,
- AstObject **fail, int *status ) {
-/*
-* Name:
-* ManageLock
-
-* Purpose:
-* Manage the thread lock on an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *ManageLock( AstObject *this, int mode, int extra,
-* AstObject **fail, int *status )
-
-* Class Membership:
-* NormMap member function (over-rides the astManageLock protected
-* method inherited from the parent class).
-
-* Description:
-* This function manages the thread lock on the supplied Object. The
-* lock can be locked, unlocked or checked by this function as
-* deteremined by parameter "mode". See astLock for details of the way
-* these locks are used.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* mode
-* An integer flag indicating what the function should do:
-*
-* AST__LOCK: Lock the Object for exclusive use by the calling
-* thread. The "extra" value indicates what should be done if the
-* Object is already locked (wait or report an error - see astLock).
-*
-* AST__UNLOCK: Unlock the Object for use by other threads.
-*
-* AST__CHECKLOCK: Check that the object is locked for use by the
-* calling thread (report an error if not).
-* extra
-* Extra mode-specific information.
-* fail
-* If a non-zero function value is returned, a pointer to the
-* Object that caused the failure is returned at "*fail". This may
-* be "this" or it may be an Object contained within "this". Note,
-* the Object's reference count is not incremented, and so the
-* returned pointer should not be annulled. A NULL pointer is
-* returned if this function returns a value of zero.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A local status value:
-* 0 - Success
-* 1 - Could not lock or unlock the object because it was already
-* locked by another thread.
-* 2 - Failed to lock a POSIX mutex
-* 3 - Failed to unlock a POSIX mutex
-* 4 - Bad "mode" value supplied.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-*/
-
-/* Local Variables: */
- AstNormMap *this; /* Pointer to NormMap structure */
- int result; /* Returned status value */
-
-/* Initialise */
- result = 0;
-
-/* Check the supplied pointer is not NULL. */
- if( !this_object ) return result;
-
-/* Obtain a pointers to the NormMap structure. */
- this = (AstNormMap *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
- if( !result ) result = (*parent_managelock)( this_object, mode, extra,
- fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
- the supplied Object. */
- if( !result ) result = astManageLock( this->frame, mode, extra, fail );
-
- return result;
-
-}
-#endif
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a NormMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* NormMap method (over-rides the protected astMapMerge method
-* inherited from the Mapping class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated NormMap in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated NormMap with one which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated NormMap which is to be merged with
-* its neighbours. This should be a cloned copy of the NormMap
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* NormMap it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated NormMap resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *frm1;
- AstFrame *frm2;
- AstMapping *smap;
- AstNormMap *map;
- AstNormMap *nmap1;
- AstNormMap *nmap2;
- int cancel;
- int map_inv;
- int nax;
- int result;
-
-/* Initialise. */
- result = -1;
-
-/* Check the inherited status. */
- if ( !astOK ) return result;
-
-/* Initialisation to avoid compiler warnings. */
- nax = 0;
-
-/* Get a pointer to this NormMap. */
- map = (AstNormMap *) this;
-
-/* Temporarily set its Invert flag to the requested value. */
- map_inv = astGetInvert( map );
- astSetInvert( map, ( *invert_list )[ where ] );
-
-/* First try to simplify the NormMap by simplifying its encapsulated
- Frame. */
- smap = astSimplify( map->frame );
-
-/* If any simplification took place, create a new NormMap with the
- simplified Frame. */
- if( smap != (AstMapping *) map->frame ) {
- (void) astAnnul( ( *map_list )[ where ] );
- ( *map_list )[ where ] = (AstMapping *) astNormMap( (AstFrame *) smap, "", status );
- result = where;
-
-/* The only other simplication which can be performed is to cancel a NormMap
- with its own inverse in series. */
- } else if( series ) {
-
-/* Indicate we have nothing to cancel with as yet. */
- cancel = -1;
-
-/* First consider the lower neighbour. */
- if( where > 0 && astIsANormMap( ( *map_list )[ where - 1 ] ) ) {
-
-/* Check the Invert flags are opposite */
- if( ( *invert_list )[ where ] != ( *invert_list )[ where - 1 ] ) {
- nmap1 = map;
- nmap2 = (AstNormMap *) ( *map_list )[ where - 1 ];
-
-/* Check the encapsulated Frames are equal. */
- frm1 = nmap1->frame;
- frm2 = nmap2->frame;
- if( astEqual( frm1, frm2 ) ) cancel = where - 1;
- nax = astGetNout( nmap1 );
- }
- }
-
-/* Likewise consider the upper neighbour. */
- if( cancel == -1 && where + 1 < *nmap &&
- astIsANormMap( ( *map_list )[ where + 1 ] ) ) {
-
- if( ( *invert_list )[ where ] != ( *invert_list )[ where + 1 ] ) {
- nmap1 = map;
- nmap2 = (AstNormMap *) ( *map_list )[ where + 1 ];
- frm1 = nmap1->frame;
- frm2 = nmap2->frame;
- if( astEqual( frm1, frm2 ) ) cancel = where + 1;
- nax = astGetNin( nmap1 );
- }
- }
-
-/* If we can cancel with a neightbour, do so. */
- if( cancel != -1 ) {
- (void) astAnnul( ( *map_list )[ where ] );
- (void) astAnnul( ( *map_list )[ cancel ] );
- ( *map_list )[ where ] = (AstMapping *) astUnitMap( nax, "", status );
- ( *invert_list )[ where ] = 0;
- ( *map_list )[ cancel ] = (AstMapping *) astUnitMap( nax, "", status );
- ( *invert_list )[ cancel ] = 0;
- result = ( cancel < where ) ? cancel : where;
- }
- }
-
-/* Free resources. */
- smap = astAnnul( smap );
-
-/* Reset the original Invert attribute for the specified NormMap */
- astSetInvert( map, map_inv );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = -1;
-
-/* Return the result. */
- return result;
-}
-
-static int *MapSplit( AstMapping *this_map, int nin, const int *in, AstMapping **map, int *status ){
-/*
-* Name:
-* MapSplit
-
-* Purpose:
-* Create a Mapping representing a subset of the inputs of an existing
-* NormMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "normmap.h"
-* int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status )
-
-* Class Membership:
-* NormMap method (over-rides the protected astMapSplit method
-* inherited from the Mapping class).
-
-* Description:
-* This function creates a new Mapping by picking specified inputs from
-* an existing NormMap. This is only possible if the specified inputs
-* correspond to some subset of the NormMap outputs. That is, there
-* must exist a subset of the NormMap outputs for which each output
-* depends only on the selected NormMap inputs, and not on any of the
-* inputs which have not been selected. If this condition is not met
-* by the supplied NormMap, then a NULL Mapping is returned.
-
-* Parameters:
-* this
-* Pointer to the NormMap to be split (the NormMap is not actually
-* modified by this function).
-* nin
-* The number of inputs to pick from "this".
-* in
-* Pointer to an array of indices (zero based) for the inputs which
-* are to be picked. This array should have "nin" elements. If "Nin"
-* is the number of inputs of the supplied NormMap, then each element
-* should have a value in the range zero to Nin-1.
-* map
-* Address of a location at which to return a pointer to the new
-* Mapping. This Mapping will have "nin" inputs (the number of
-* outputs may be different to "nin"). A NULL pointer will be
-* returned if the supplied NormMap has no subset of outputs which
-* depend only on the selected inputs.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated array of ints. The number of
-* elements in this array will equal the number of outputs for the
-* returned Mapping. Each element will hold the index of the
-* corresponding output in the supplied NormMap. The array should be
-* freed using astFree when no longer needed. A NULL pointer will
-* be returned if no output Mapping can be created.
-
-* Notes:
-* - If this function is invoked with the global error status set,
-* or if it should fail for any reason, then NULL values will be
-* returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
- AstFrame *frm2; /* Pointer to new Frame */
- AstNormMap *this; /* Pointer to NormMap structure */
- int *result; /* Pointer to returned array */
-
-/* Initialise */
- result = NULL;
- *map = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Invoke the parent astMapSplit method to see if it can do the job. */
- result = (*parent_mapsplit)( this_map, nin, in, map, status );
-
-/* If not, we provide a special implementation here. */
- if( !result ) {
-
-/* Get a pointer to the NormMap structure. */
- this = (AstNormMap *) this_map;
-
-/* Pick the requried axes from the encapsulated Frame. */
- frm2 = astPickAxes( this->frame, nin, in, NULL );
-
-/* Create a new NormMap from this. */
- *map = (AstMapping *) astNormMap( frm2, "", status );
-
-/* The returned list of output axes is a copy the supplied list of input
- axes. */
- result = astStore( NULL, in, sizeof( int )*(size_t) nin );
-
-/* Free resources. */
- frm2 = astAnnul( frm2 );
- }
-
-/* Free returned resources if an error has occurred. */
- if( !astOK ) {
- result = astFree( result );
- *map = astAnnul( *map );
- }
-
-/* Return the list of output indices. */
- return result;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-* Name:
-* Rate
-
-* Purpose:
-* Calculate the rate of change of a Mapping output.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "normmap.h"
-* result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-* Class Membership:
-* NormMap member function (overrides the astRate method inherited
-* from the Mapping class ).
-
-* Description:
-* This function returns the rate of change of a specified output of
-* the supplied Mapping with respect to a specified input, at a
-* specified input position.
-
-* Parameters:
-* this
-* Pointer to the Mapping to be applied.
-* at
-* The address of an array holding the axis values at the position
-* at which the rate of change is to be evaluated. The number of
-* elements in this array should equal the number of inputs to the
-* Mapping.
-* ax1
-* The index of the Mapping output for which the rate of change is to
-* be found (output numbering starts at 0 for the first output).
-* ax2
-* The index of the Mapping input which is to be varied in order to
-* find the rate of change (input numbering starts at 0 for the first
-* input).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The rate of change of Mapping output "ax1" with respect to input
-* "ax2", evaluated at "at", or AST__BAD if the value cannot be
-* calculated.
-
-*/
-
- return ( ax1 == ax2 ) ? 1.0 : 0.0;
-}
-
-static AstMapping *RemoveRegions( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* RemoveRegions
-
-* Purpose:
-* Remove any Regions from a Mapping.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "normmap.h"
-* AstMapping *RemoveRegions( AstMapping *this, int *status )
-
-* Class Membership:
-* NormMap method (over-rides the astRemoveRegions method inherited
-* from the Mapping class).
-
-* Description:
-* This function searches the supplied Mapping (which may be a
-* compound Mapping such as a CmpMap) for any component Mappings
-* that are instances of the AST Region class. It then creates a new
-* Mapping from which all Regions have been removed. If a Region
-* cannot simply be removed (for instance, if it is a component of a
-* parallel CmpMap), then it is replaced with an equivalent UnitMap
-* in the returned Mapping.
-*
-* The implementation provided by the NormMap class invokes the
-* astRemoveRegions method on the encapsulated Frame, and returns a
-* new NormMap containing the resulting Frame.
-
-* Parameters:
-* this
-* Pointer to the original Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the modified mapping.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstFrame *newfrm; /* New component Frame */
- AstMapping *result; /* Result pointer to return */
- AstNormMap *new; /* Pointer to new MormMap */
- AstNormMap *this; /* Pointer to NormMap structure */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the NormMap. */
- this = (AstNormMap *) this_mapping;
-
-/* Invoke the astRemoveRegions method on the component Frame. */
- newfrm = astRemoveRegions( this->frame );
-
-/* If the Frame was not modified, just return a clone of the supplied
- pointer. */
- if( this->frame == newfrm ) {
- result = astClone( this );
-
-/* Otherwise, we need to create a new NormMap to return. We take a deep
- copy of the supplied NormMap and then modify the Frame so that we
- retain any extra information in the supplied NormMap. */
- } else {
- new = astCopy( this );
- (void) astAnnul( new->frame );
- new->frame = astClone( newfrm );
- result = (AstMapping *) new;
- }
-
-/* Free resources. */
- newfrm = astAnnul( newfrm );
-
-/* Annul the returned Mapping if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a NormMap to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "normmap.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* NormMap member function (over-rides the astTransform protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function takes a NormMap and a set of points encapsulated in a
-* PointSet and transforms the points so as to apply the required zoom
-* factor.
-
-* Parameters:
-* this
-* Pointer to the NormMap.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of coordinates for the NormMap being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstPointSet *result; /* Pointer to output PointSet */
- AstNormMap *map; /* Pointer to NormMap to be applied */
- double **ptr_in; /* Pointer to input coordinate data */
- double **ptr_out; /* Pointer to output coordinate data */
- double *work; /* Work space for a single point */
- int coord; /* Loop counter for coordinates */
- int ncoord_in; /* Number of coordinates per input point */
- int npoint; /* Number of points */
- int point; /* Loop counter for points */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the NormMap. */
- map = (AstNormMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Mapping class. This function validates
- all arguments and generates an output PointSet if necessary, but does not
- actually transform any coordinate values. */
- result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
- PointSet and obtain pointers for accessing the input and output coordinate
- values. */
- ncoord_in = astGetNcoord( in );
- npoint = astGetNpoint( in );
- ptr_in = astGetPoints( in );
- ptr_out = astGetPoints( result );
- work = astMalloc( sizeof( double )* ncoord_in );
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
- if ( astOK ) {
- for ( point = 0; point < npoint; point++ ) {
- for ( coord = 0; coord < ncoord_in; coord++ ) {
- work[ coord ] = ptr_in[ coord ][ point ];
- }
- astNorm( map->frame, work );
- for ( coord = 0; coord < ncoord_in; coord++ ) {
- ptr_out[ coord ][ point ] = work[ coord ];
- }
- }
- }
-
-/* Free resources */
- work = astFree( work );
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for NormMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for NormMap objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - This constructor makes a deep copy, including a copy of the
-* Frame within the NormMap.
-*/
-
-/* Local Variables: */
- AstNormMap *in; /* Pointer to input NormMap */
- AstNormMap *out; /* Pointer to output NormMap */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
- in = (AstNormMap *) objin;
- out = (AstNormMap *) objout;
- out->frame = astCopy( in->frame );
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for NormMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for NormMap objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstNormMap *this; /* Pointer to NormMap */
-
- this = (AstNormMap *) obj;
- this->frame = astAnnul( this->frame );
-
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for NormMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the NormMap class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the NormMap whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstNormMap *this; /* Pointer to the NormMap structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the NormMap structure. */
- this = (AstNormMap *) this_object;
-
-/* Write out values representing the instance variables for the
- NormMap class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* Frame. */
-/* ------ */
- astWriteObject( channel, "Frame", 1, 1, this->frame,
- "Frame defining the normalisation" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsANormMap and astCheckNormMap functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(NormMap,Mapping)
-astMAKE_CHECK(NormMap)
-
-AstNormMap *astNormMap_( void *frame_void, const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astNormMap
-f AST_NORMMAP
-
-* Purpose:
-* Create a NormMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "normmap.h"
-c AstNormMap *astNormMap( AstFrame *frame, const char *options, ... )
-f RESULT = AST_NORMMAP( FRAME, OPTIONS, STATUS )
-
-* Class Membership:
-* NormMap constructor.
-
-* Description:
-* This function creates a new NormMap and optionally initialises its
-* attributes.
-*
-* A NormMap is a Mapping which normalises coordinate values using the
-c astNorm function
-f AST_NORM routine
-* of the supplied Frame. The number of inputs and outputs of a NormMap
-* are both equal to the number of axes in the supplied Frame.
-*
-* The forward and inverse transformation of a NormMap are both
-* defined but are identical (that is, they do not form a real inverse
-* pair in that the inverse transformation does not undo the
-* normalisation, instead it reapplies it). However, the
-c astSimplify
-f AST_SIMPLIFY
-* function will replace neighbouring pairs of forward and inverse
-* NormMaps by a single UnitMap.
-
-* Parameters:
-c frame
-f FRAME = INTEGER (Given)
-* A pointer to the Frame which is to be used to normalise the
-* supplied axis values.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new NormMap. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new NormMap. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astNormMap()
-f AST_NORMMAP = INTEGER
-* A pointer to the new NormMap.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-
-* Status Handling:
-* The protected interface to this function includes an extra
-* parameter at the end of the parameter list descirbed above. This
-* parameter is a pointer to the integer inherited status
-* variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *frame; /* The Frame pointer */
- AstNormMap *new; /* Pointer to new NormMap */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain and validate pointers to the Frame structures provided. */
- frame = astCheckFrame( frame_void );
-
-/* Initialise the NormMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitNormMap( NULL, sizeof( AstNormMap ), !class_init, &class_vtab,
- "NormMap", frame );
- if( astOK ) {
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new NormMap's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return a pointer to the new NormMap. */
- return new;
-}
-
-AstNormMap *astNormMapId_( void *frame_void, const char *options, ... ) {
-/*
-* Name:
-* astNormMapId_
-
-* Purpose:
-* Create a NormMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "normmap.h"
-* AstNormMap *astNormMapId_( int ncoord, double zoom,
-* const char *options, ... )
-
-* Class Membership:
-* NormMap constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astNormMap constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astNormMap_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astNormMap_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astNormMap_.
-
-* Returned Value:
-* The ID value associated with the new NormMap.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *frame; /* The Frame pointer */
- AstNormMap *new; /* Pointer to new NormMap */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain and validate pointers to the Frame structures provided. */
- frame = astVerifyFrame( astMakePointer( frame_void ) );
-
-/* Initialise the NormMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitNormMap( NULL, sizeof( AstNormMap ), !class_init, &class_vtab,
- "NormMap", frame );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new NormMap's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new NormMap. */
- return astMakeId( new );
-}
-
-AstNormMap *astInitNormMap_( void *mem, size_t size, int init,
- AstNormMapVtab *vtab, const char *name,
- AstFrame *frame, int *status ) {
-/*
-*+
-* Name:
-* astInitNormMap
-
-* Purpose:
-* Initialise a NormMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "normmap.h"
-* AstNormMap *astInitNormMap( void *mem, size_t size, int init,
-* AstNormMapVtab *vtab, const char *name,
-* AstFrame *frame )
-
-* Class Membership:
-* NormMap initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new NormMap object. It allocates memory (if necessary) to accommodate
-* the NormMap plus any additional data associated with the derived class.
-* It then initialises a NormMap structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a NormMap at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the NormMap is to be initialised.
-* This must be of sufficient size to accommodate the NormMap data
-* (sizeof(NormMap)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the NormMap (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the NormMap
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the NormMap's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new NormMap.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-* frame
-* The Frame to use to do the normalisations.
-
-* Returned Value:
-* A pointer to the new NormMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstNormMap *new; /* Pointer to new NormMap */
- int ncoord; /* Number of input and output coords */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitNormMapVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Get the number of axes in the Frame. */
- ncoord = astGetNaxes( frame );
-
-/* Initialise a Mapping structure (the parent class) as the first component
- within the NormMap structure, allocating memory if necessary. Specify that
- the Mapping should be defined in both the forward and inverse directions. */
- new = (AstNormMap *) astInitMapping( mem, size, 0,
- (AstMappingVtab *) vtab, name,
- ncoord, ncoord, 1, 1 );
-
- if ( astOK ) {
-
-/* Initialise the NormMap data. */
-/* ---------------------------- */
-/* Store a pointer to the Frame. */
- new->frame = astClone( frame );
-
-/* If an error occurred, clean up by deleting the new NormMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new NormMap. */
- return new;
-}
-
-AstNormMap *astLoadNormMap_( void *mem, size_t size,
- AstNormMapVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadNormMap
-
-* Purpose:
-* Load a NormMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "normmap.h"
-* AstNormMap *astLoadNormMap( void *mem, size_t size,
-* AstNormMapVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* NormMap loader.
-
-* Description:
-* This function is provided to load a new NormMap using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* NormMap structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a NormMap at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the NormMap is to be
-* loaded. This must be of sufficient size to accommodate the
-* NormMap data (sizeof(NormMap)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the NormMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the NormMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstNormMap) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new NormMap. If this is NULL, a pointer
-* to the (static) virtual function table for the NormMap class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "NormMap" is used instead.
-
-* Returned Value:
-* A pointer to the new NormMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstNormMap *new; /* Pointer to the new NormMap */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this NormMap. In this case the
- NormMap belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstNormMap );
- vtab = &class_vtab;
- name = "NormMap";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitNormMapVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built NormMap. */
- new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "NormMap" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* Frame. */
-/* ------ */
- new->frame = astReadObject( channel, "frame", NULL );
-
-/* If an error occurred, clean up by deleting the new NormMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new NormMap pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-
-
-
diff --git a/ast-5.3-1/normmap.h b/ast-5.3-1/normmap.h
deleted file mode 100644
index ae11014..0000000
--- a/ast-5.3-1/normmap.h
+++ /dev/null
@@ -1,217 +0,0 @@
-#if !defined( NORMMAP_INCLUDED ) /* Include this file only once */
-#define NORMMAP_INCLUDED
-/*
-*+
-* Name:
-* normmap.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the NormMap class.
-
-* Invocation:
-* #include "normmap.h"
-
-* Description:
-* This include file defines the interface to the NormMap class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The NormMap class implements Mappings which use a Frame to
-* normalise the input axis values.
-
-* Inheritance:
-* The NormMap class inherits from the Mapping class.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 11-JUL-2005 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-#include "frame.h" /* Coordinate Frames */
-
-#if defined(astCLASS) /* Protected */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* NormMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstNormMap {
-
-/* Attributes inherited from the parent class. */
- AstMapping mapping; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- AstFrame *frame; /* Encapsulated Frame */
-} AstNormMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstNormMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstMappingVtab mapping_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-} AstNormMapVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstNormMapGlobals {
- AstNormMapVtab Class_Vtab;
- int Class_Init;
-} AstNormMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitNormMapGlobals_( AstNormMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(NormMap) /* Check class membership */
-astPROTO_ISA(NormMap) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstNormMap *astNormMap_( void *, const char *, int *, ...);
-#else
-AstNormMap *astNormMapId_( void *, const char *, ... )__attribute__((format(printf,2,3)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstNormMap *astInitNormMap_( void *, size_t, int, AstNormMapVtab *,
- const char *, AstFrame *, int * );
-
-/* Vtab initialiser. */
-void astInitNormMapVtab_( AstNormMapVtab *, const char *, int * );
-
-/* Loader. */
-AstNormMap *astLoadNormMap_( void *, size_t, AstNormMapVtab *,
- const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS) /* Protected */
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckNormMap(this) astINVOKE_CHECK(NormMap,this,0)
-#define astVerifyNormMap(this) astINVOKE_CHECK(NormMap,this,1)
-
-/* Test class membership. */
-#define astIsANormMap(this) astINVOKE_ISA(NormMap,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astNormMap astINVOKE(F,astNormMap_)
-#else
-#define astNormMap astINVOKE(F,astNormMapId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitNormMap(mem,size,init,vtab,name,frame) \
-astINVOKE(O,astInitNormMap_(mem,size,init,vtab,name,frame,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitNormMapVtab(vtab,name) astINVOKE(V,astInitNormMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadNormMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadNormMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckNormMap to validate NormMap pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/nullregion.c b/ast-5.3-1/nullregion.c
deleted file mode 100644
index 45d8c96..0000000
--- a/ast-5.3-1/nullregion.c
+++ /dev/null
@@ -1,2093 +0,0 @@
-/*
-*class++
-* Name:
-* NullRegion
-
-* Purpose:
-* A boundless region within a Frame.
-
-* Constructor Function:
-c astNullRegion
-f AST_NULLREGION
-
-* Description:
-* The NullRegion class implements a Region with no bounds within a Frame.
-* If the Negated attribute of a NullRegion is false, the NullRegion
-* represents a Region containing no points. If the Negated attribute of
-* a NullRegion is true, the NullRegion represents an infinite Region
-* (that is, all points in the coordinate system are inside the NullRegion).
-
-* Inheritance:
-* The NullRegion class inherits from the Region class.
-
-* Attributes:
-* The NullRegion class does not define any new attributes beyond
-* those which are applicable to all Regions.
-
-* Functions:
-c The NullRegion class does not define any new functions beyond those
-f The NullRegion class does not define any new routines beyond those
-* which are applicable to all Regions.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2009 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 11-OCT-2004 (DSB):
-* Original version.
-* 20-JAN-2009 (DSB):
-* Over-ride astRegBasePick.
-* 26-JAN-2009 (DSB):
-* Over-ride astMapMerge.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS NullRegion
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "region.h" /* Coordinate regions (parent class) */
-#include "channel.h" /* I/O channels */
-#include "nullregion.h" /* Interface definition for this class */
-#include "mapping.h" /* Position mappings */
-#include "circle.h" /* Circle regions */
-#include "prism.h" /* Extruded Regions */
-#include "unitmap.h" /* Unit Mapping */
-#include "cmpframe.h" /* Compound Frames */
-#include "cmpmap.h" /* Compound Mappings */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstMapping *(* parent_simplify)( AstMapping *, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(NullRegion)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(NullRegion,Class_Init)
-#define class_vtab astGLOBAL(NullRegion,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstNullRegionVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstNullRegion *astNullRegionId_( void *, void *, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMapping *Simplify( AstMapping *, int * );
-static AstPointSet *RegBaseMesh( AstRegion *, int * );
-static AstPointSet *RegMesh( AstRegion *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstRegion *RegBasePick( AstRegion *this, int, const int *, int * );
-static AstRegion *GetDefUnc( AstRegion *, int * );
-static AstRegion *MergeNullRegion( AstNullRegion *, AstRegion *, int, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int Overlap( AstRegion *, AstRegion *, int * );
-static int OverlapX( AstRegion *, AstRegion *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void RegBaseBox( AstRegion *this, double *, double *, int * );
-static void GetRegionBounds( AstRegion *this, double *, double *, int * );
-
-/* Member functions. */
-/* ================= */
-static AstRegion *GetDefUnc( AstRegion *this, int *status ) {
-/*
-*+
-* Name:
-* astGetDefUnc
-
-* Purpose:
-* Obtain a pointer to the default uncertainty Region for a given Region.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "nullregion.h"
-* AstRegion *astGetDefUnc( AstRegion *this )
-
-* Class Membership:
-* NullRegion member function (over-rides the astGetDefUnc protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a pointer to a Region which represents the
-* default uncertainty associated with a position on the boundary of the
-* given Region. The returned Region refers to the base Frame within the
-* FrameSet encapsulated by the supplied Region.
-
-* Parameters:
-* this
-* Pointer to the Region.
-
-* Returned Value:
-* A pointer to the Region. This should be annulled (using astAnnul)
-* when no longer needed.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstRegion *result;
- double *cen;
- double rad;
- int i;
- int n;
-
-/* Initialise */
- result = NULL;
-
-/* Check inherited status */
- if( !astOK ) return result;
-
-/* Create a Circle centred on the origin with zero radius. */
- n = astGetNaxes( this );
- cen = astMalloc( sizeof(double)*(size_t) n );
- if( cen ) {
- for( i = 0; i < n; i++ ) cen[ i ] = 0.0;
- rad = 0.0;
- result = (AstRegion *) astCircle( this, 1, cen, &rad, NULL, "", status );
- cen = astFree( cen );
- }
-
-/* Return the default uncertainty Region. */
- return result;
-}
-
-void astInitNullRegionVtab_( AstNullRegionVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitNullRegionVtab
-
-* Purpose:
-* Initialise a virtual function table for a NullRegion.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "nullregion.h"
-* void astInitNullRegionVtab( AstNullRegionVtab *vtab, const char *name )
-
-* Class Membership:
-* NullRegion vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the NullRegion class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
- AstRegionVtab *region; /* Pointer to Region component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitRegionVtab( (AstRegionVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsANullRegion) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstRegionVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- mapping = (AstMappingVtab *) vtab;
- region = (AstRegionVtab *) vtab;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
- parent_simplify = mapping->Simplify;
- mapping->Simplify = Simplify;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- mapping->MapMerge = MapMerge;
-
- region->GetDefUnc = GetDefUnc;
- region->Overlap = Overlap;
- region->OverlapX = OverlapX;
- region->RegBaseBox = RegBaseBox;
- region->RegBaseMesh = RegBaseMesh;
- region->GetRegionBounds = GetRegionBounds;
- region->RegMesh = RegMesh;
- region->RegBasePick = RegBasePick;
-
-/* Declare the copy constructor, destructor and class dump
- functions. */
- astSetDump( vtab, Dump, "NullRegion", "Boundless region" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a NullRegion.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* NullRegion method (over-rides the protected astMapMerge method
-* inherited from the Region class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated NullRegion in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated NullRegion with a Mapping which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated NullRegion which is to be merged with
-* its neighbours. This should be a cloned copy of the NullRegion
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* NullRegion it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated NullRegion resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstNullRegion *oldint; /* Pointer to supplied NullRegion */
- AstMapping *map; /* Pointer to adjacent Mapping */
- AstMapping *new; /* Simplified or merged Region */
- int i1; /* Index of first Mapping merged */
- int i; /* Loop counter */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = -1;
- i1 = -1;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the NullRegion. */
- oldint = (AstNullRegion *) this;
-
-/* First of all, see if the NullRegion can be replaced by a simpler Region,
- without reference to the neighbouring Regions in the list. */
-/* =====================================================================*/
-
-/* Try to simplify the NullRegion. If the pointer value has changed, we assume
- some simplification took place. */
- new = astSimplify( oldint );
- if( new != (AstMapping *) oldint ) {
-
-/* Annul the NullRegion pointer in the list and replace it with the new Region
- pointer, and indicate that the forward transformation of the returned
- Region should be used (not really needed but keeps things clean). */
- (void) astAnnul( ( *map_list )[ where ] );
- ( *map_list )[ where ] = new;
- ( *invert_list )[ where ] = 0;
-
-/* Return the index of the first modified element. */
- result = where;
-
-/* If the NullRegion itself could not be simplified, see if it can be merged
- with the Regions on either side of it in the list. We can only merge
- in parallel. */
-/* =====================================================================*/
- } else if( ! series ){
- new = astAnnul( new );
-
-/* Attempt to merge the NullRegion with its lower neighbour (if any). */
- if( where > 0 ) {
- i1 = where - 1;
- map = ( *map_list )[ where - 1 ];
- if( astIsARegion( map ) ) {
- new = (AstMapping *) MergeNullRegion( oldint, (AstRegion *) map,
- 0, status );
- }
- }
-
-/* If this did not produced a merged Region, attempt to merge the NullRegion
- with its upper neighbour (if any). */
- if( !new && where < *nmap - 1 ) {
- i1 = where;
- map = ( *map_list )[ where + 1 ];
- if( astIsARegion( map ) ) {
- new = (AstMapping *) MergeNullRegion( oldint, (AstRegion *) map,
- 1, status );
- }
- }
-
-/* If succesfull... */
- if( new ){
-
-/* Annul the first of the two Mappings, and replace it with the merged
- Region. Also clear the invert flag. */
- (void) astAnnul( ( *map_list )[ i1 ] );
- ( *map_list )[ i1 ] = new;
- ( *invert_list )[ i1 ] = 0;
-
-/* Annul the second of the two Mappings, and shuffle down the rest of the
- list to fill the gap. */
- (void) astAnnul( ( *map_list )[ i1 + 1 ] );
- for ( i = i1 + 2; i < *nmap; i++ ) {
- ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
- ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
- }
-
-/* Clear the vacated element at the end. */
- ( *map_list )[ *nmap - 1 ] = NULL;
- ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
- modified element. */
- ( *nmap )--;
- result = i1;
- }
-
- } else {
- new = astAnnul( new );
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstRegion *MergeNullRegion( AstNullRegion *this, AstRegion *reg,
- int intfirst, int *status ) {
-/*
-* Name:
-* MergeNullRegion
-
-* Purpose:
-* Attempt to merge a NullRegion with another Region to form a Region of
-* higher dimensionality.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "nullregion.h"
-* AstRegion *MergeNullRegion( AstNullRegion *this, AstRegion *reg,
-* int intfirst, int *status )
-
-* Class Membership:
-* NullRegion member function.
-
-* Description:
-* This function attempts to combine the supplied Regions together
-* into a Region of higher dimensionality.
-
-* Parameters:
-* this
-* Pointer to a NullRegion.
-* reg
-* Pointer to another Region.
-* intfirst
-* If non-zero, then the NullRegion axes are put first in the new Region.
-* Otherwise, the other Region's axes are put first.
-* status
-* Pointer to the inherited status value.
-
-* Returned Value:
-* A pointer to a new region, or NULL if the supplied Regions could
-* not be merged.
-*/
-
-/* Local Variables: */
- AstFrame *bfrm; /* Pointer to base Frame for "result" */
- AstFrame *cfrm; /* Pointer to current Frame for "result" */
- AstFrame *frm_reg; /* Pointer to Frame from "reg" */
- AstFrame *frm_this; /* Pointer to Frame from "this" */
- AstMapping *bcmap; /* Base->current Mapping for "result" */
- AstMapping *map_reg; /* Base->current Mapping from "reg" */
- AstMapping *map_this; /* Base->current Mapping from "this" */
- AstMapping *sbunc; /* Simplified uncertainty */
- AstRegion *bunc; /* Base Frame uncertainty Region */
- AstRegion *new; /* Pointer to new NullRegion in base Frame */
- AstRegion *result; /* Pointer to returned NullRegion in current Frame */
- AstRegion *unc_reg; /* Current Frame uncertainty Region from "reg" */
- AstRegion *unc_this; /* Current Frame uncertainty Region from "this" */
- double fac_reg; /* Ratio of used to default MeshSize for "reg" */
- double fac_this; /* Ratio of used to default MeshSize for "this" */
- int msz_reg; /* Original MeshSize for "reg" */
- int msz_reg_set; /* Was MeshSize originally set for "reg"? */
- int msz_this; /* Original MeshSize for "this" */
- int msz_this_set; /* Was MeshSize originally set for "this"? */
- int nax; /* Number of axes in "result" */
- int nax_reg; /* Number of axes in "reg" */
- int nax_this; /* Number of axes in "this" */
- int neg_reg; /* Negated attribute value for other supplied Region */
- int neg_this; /* Negated attribute value for supplied NullRegion */
-
-/* Initialise */
- result = NULL;
-
-/* Check the local error status. */
- if ( !astOK ) return result;
-
-/* Get the Closed attributes of the two Regions. They must be the same in
- each Region if we are to merge the Regions. In addition, in order to
- merge, either both Regions must have a defined uncertainty, or neither
- Region must have a defined Uncertainty. */
- if( astGetClosed( this ) == astGetClosed( reg ) &&
- astTestUnc( this ) == astTestUnc( reg ) ) {
-
-/* Get the Nagated attributes of the two Regions. */
- neg_this = astGetNegated( this );
- neg_reg = astGetNegated( reg );
-
-/* Get the number of axes in the two supplied Regions. */
- nax_reg = astGetNaxes( reg );
- nax_this = astGetNaxes( this );
-
-/* If the Regions can be combined, get the number of axes the
- combination will have. */
- nax = nax_reg + nax_this;
-
-/* Get the base Frames from the two Region FrameSets, and combine them
- into a single CmpFrame that will be used to create any new Region. */
- frm_this = astGetFrame( ((AstRegion *) this)->frameset, AST__BASE );
- frm_reg = astGetFrame( reg->frameset, AST__BASE );
-
- if( intfirst ) {
- bfrm = (AstFrame *) astCmpFrame( frm_this, frm_reg, "", status );
- } else {
- bfrm = (AstFrame *) astCmpFrame( frm_reg, frm_this, "", status );
- }
-
- frm_this = astAnnul( frm_this );
- frm_reg = astAnnul( frm_reg );
-
-/* Indicate we do not yet have a merged Region. */
- new = NULL;
-
-/* We only check for merging with another NullRegion (other classes such
- as Box and Interval check for merging of NullRegions with other classes).
- The result will be an NullRegion. Both Regions must have the same value
- for the Negated flag. */
- if( astIsANullRegion( reg ) && neg_this == neg_reg ) {
- new = (AstRegion *) astNullRegion( bfrm, NULL, "", status );
-
-/* Propagate remaining attributes of the supplied Region to it. */
- astRegOverlay( new, this, 1 );
-
-/* Ensure the Negated flag is set correctly in the returned NullRegion. */
- if( neg_this ) {
- astSetNegated( new, neg_this );
- } else {
- astClearNegated( new );
- }
-
-/* If both the supplied Regions have uncertainty, assign the new Region an
- uncertainty. */
- if( astTestUnc( this ) && astTestUnc( reg ) ) {
-
-/* Get the uncertainties from the two supplied Regions. */
- unc_this = astGetUncFrm( this, AST__BASE );
- unc_reg = astGetUncFrm( reg, AST__BASE );
-
-/* Combine them into a single Region (a Prism), in the correct order. */
- if( intfirst ) {
- bunc = (AstRegion *) astPrism( unc_this, unc_reg, "", status );
- } else {
- bunc = (AstRegion *) astPrism( unc_reg, unc_this, "", status );
- }
-
-/* Attempt to simplify the Prism. */
- sbunc = astSimplify( bunc );
-
-/* Use the simplified Prism as the uncertainty for the returned Region. */
- astSetUnc( new, sbunc );
-
-/* Free resources. */
- sbunc = astAnnul( sbunc );
- bunc = astAnnul( bunc );
- unc_reg = astAnnul( unc_reg );
- unc_this = astAnnul( unc_this );
- }
-
-/* Get the current Frames from the two Region FrameSets, and combine them
- into a single CmpFrame. */
- frm_this = astGetFrame( ((AstRegion *) this)->frameset, AST__CURRENT );
- frm_reg = astGetFrame( reg->frameset, AST__CURRENT );
-
- if( intfirst ) {
- cfrm = (AstFrame *) astCmpFrame( frm_this, frm_reg, "", status );
- } else {
- cfrm = (AstFrame *) astCmpFrame( frm_reg, frm_this, "", status );
- }
-
-/* Get the base -> current Mappings from the two Region FrameSets, and
- combine them into a single parallel CmpMap that connects bfrm and cfrm. */
- map_this = astGetMapping( ((AstRegion *) this)->frameset, AST__BASE,
- AST__CURRENT );
- map_reg = astGetMapping( reg->frameset, AST__BASE, AST__CURRENT );
-
- if( intfirst ) {
- bcmap = (AstMapping *) astCmpMap( map_this, map_reg, 0, "",
- status );
- } else {
- bcmap = (AstMapping *) astCmpMap( map_reg, map_this, 0, "",
- status );
- }
-
-/* Map the new Region into the new current Frame. */
- result = astMapRegion( new, bcmap, cfrm );
-
-/* The filling factor in the returned is the product of the filling
- factors for the two supplied Regions. */
- if( astTestFillFactor( reg ) || astTestFillFactor( this ) ) {
- astSetFillFactor( result, astGetFillFactor( reg )*
- astGetFillFactor( this ) );
- }
-
-/* If the MeshSize value is set in either supplied Region, set a value
- for the returned Region which scales the default value by the
- product of the scaling factors for the two supplied Regions. First see
- if either MeshSize value is set. */
- msz_this_set = astTestMeshSize( this );
- msz_reg_set = astTestMeshSize( reg );
- if( msz_this_set || msz_reg_set ) {
-
-/* If so, get the two MeshSize values (one of which may be a default
- value), and then clear them so that the default value will be returned
- in future. */
- msz_this = astGetMeshSize( this );
- msz_reg = astGetMeshSize( reg );
- astClearMeshSize( this );
- astClearMeshSize( reg );
-
-/* Get the ratio of the used MeshSize to the default MeshSize for both
- Regions. */
- fac_this = (double)msz_this/(double)astGetMeshSize( this );
- fac_reg = (double)msz_reg/(double)astGetMeshSize( reg );
-
-/* The MeshSize of the returned Returned is the default value scaled by
- the product of the two ratios found above. */
- astSetMeshSize( result, fac_this*fac_reg*astGetMeshSize( result ) );
-
-/* Re-instate the original MeshSize values for the supplied Regions (if
- set) */
- if( msz_this_set ) astSetMeshSize( this, msz_this );
- if( msz_reg_set ) astSetMeshSize( reg, msz_reg );
- }
-
-/* Free remaining resources */
- frm_this = astAnnul( frm_this );
- frm_reg = astAnnul( frm_reg );
- map_this = astAnnul( map_this );
- map_reg = astAnnul( map_reg );
- bcmap = astAnnul( bcmap );
- new = astAnnul( new );
- cfrm = astAnnul( cfrm );
- }
- }
-
-/* If an error has occurred, annul the returned pointer. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static int Overlap( AstRegion *this, AstRegion *that, int *status ){
-/*
-* Name:
-* Overlap
-
-* Purpose:
-* Test if two regions overlap each other.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "nullregion.h"
-* int Overlap( AstRegion *this, AstRegion *that )
-
-* Class Membership:
-* NullRegion member function (over-rides the astOverlap method inherited
-* from the Region class).
-
-* Description:
-* This function returns an integer value indicating if the two
-* supplied Regions overlap. The two Regions are converted to a commnon
-* coordinate system before performing the check. If this conversion is
-* not possible (for instance because the two Regions represent areas in
-* different domains), then the check cannot be performed and a zero value
-* is returned to indicate this.
-
-* Parameters:
-* this
-* Pointer to the first Region.
-* that
-* Pointer to the second Region.
-
-* Returned Value:
-* astOverlap()
-* A value indicating if there is any overlap between the two Regions.
-* Possible values are:
-*
-* 0 - The check could not be performed because the second Region
-* could not be mapped into the coordinate system of the first
-* Region.
-*
-* 1 - There is no overlap between the two Regions.
-*
-* 2 - The first Region is completely inside the second Region.
-*
-* 3 - The second Region is completely inside the first Region.
-*
-* 4 - There is partial overlap between the two Regions.
-*
-* 5 - The Regions are identical.
-*
-* 6 - The second Region is the negation of the first Region.
-
-* Notes:
-* - The returned values 5 and 6 do not check the value of the Closed
-* attribute in the two Regions.
-* - A value of zero will be returned if this function is invoked with the
-* AST error status set, or if it should fail for any reason.
-
-* Implementation Notes:
-* - This function is simply a wrap-up for the OverlapX function
-* which performs the required processing but swaps the order of the
-* two arguments. This is a trick to allow the astOverlap
-* method to be over-ridden by derived classes on the basis of the
-* class of either of the two arguments.
-*/
-
-/* Check the inherited status. */
- if ( !astOK ) return 0;
-
-/* Invoke the private "OverlapX" member function with the two arguments
- swapped. */
- return OverlapX( that, this, status );
-}
-
-static int OverlapX( AstRegion *that, AstRegion *this, int *status ){
-/*
-* Name:
-* OverlapX
-
-* Purpose:
-* Test if two regions overlap each other.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "nullregion.h"
-* int OverlapX( AstRegion *that, AstRegion *this )
-
-* Class Membership:
-* NullRegion member function (over-rides the astOverlapX method inherited
-* from the Region class).
-
-* Description:
-* This function performs the processing for the public astOverlap
-* method (as inherited from the Region class and over-ridden by the
-* NullRegion class) and has exactly the same interface except that
-* the order of the two arguments is swapped. This is a trick
-* to allow the astOverlap method to be over-ridden by derived
-* classes on the basis of the class of either of its two
-* arguments.
-*
-* See the astOverlap method for details of the interface.
-
-*/
-
-/* Local Variables: */
- AstFrameSet *fs; /* FrameSet connecting Region Frames */
- int result; /* Returned value */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Check that the Regions can be compared meaningfully. */
- fs = astConvert( this, that, "" );
- if( fs ) {
- fs = astAnnul( fs );
-
-/* If both the supplied Regions are NullRegion... */
- if( astIsANullRegion( this ) && astIsANullRegion( that ) ) {
-
-/* If the Negated attributes are equal, the Regions are identical.
- Otherwise they are mutually exclusive. */
- if( astGetNegated( this ) == astGetNegated( that ) ) {
- result = 5;
- } else {
- result = 6;
- }
-
-/* If one of the supplied Region is a NullRegion containing no points,
- then there is no overlap. */
- } else if( ( astIsANullRegion( this ) && !astGetNegated( this ) ) ||
- ( astIsANullRegion( that ) && !astGetNegated( that ) ) ) {
- result = 1;
-
-/* If "that" is infinite and "this" is not infinite, then "this" is
- entirely inside "that". */
- } else if( astIsANullRegion( that ) && astGetNegated( that ) ) {
- result = 2;
-
-/* If "this" is infinite and "that" is not infinite, then "that" is
- entirely inside "this". */
- } else if( astIsANullRegion( this ) && astGetNegated( this ) ){
- result = 3;
-
-/* Otherwise there is partial overlap. */
- } else {
- result = 4;
- }
- }
-
-/* If not OK, return zero. */
- if( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static void RegBaseBox( AstRegion *this_region, double *lbnd, double *ubnd, int *status ){
-/*
-* Name:
-* RegBaseBox
-
-* Purpose:
-* Returns the bounding box of an un-negated Region in the base Frame of
-* the encapsulated FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "nullregion.h"
-* void RegBaseBox( AstRegion *this, double *lbnd, double *ubnd, int *status )
-
-* Class Membership:
-* NullRegion member function (over-rides the astRegBaseBox protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns the upper and lower axis bounds of a Region in
-* the base Frame of the encapsulated FrameSet, assuming the Region
-* has not been negated. That is, the value of the Negated attribute
-* is ignored.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* lbnd
-* Pointer to an array in which to return the lower axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-* ubnd
-* Pointer to an array in which to return the upper axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstNullRegion *this; /* Pointer to NullRegion structure */
- int i; /* Axis index */
- int nc; /* No. of axes in base Frame */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the NullRegion structure */
- this = (AstNullRegion *) this_region;
-
-/* Get the number of base Frame axes. */
- nc = astGetNin( this_region->frameset );
-
-/* Set the upper bound less than the lower bound to indicate that the region
- contains no points. */
- for( i = 0; i < nc; i++ ) {
- lbnd[ i ] = 1.0;
- ubnd[ i ] = -1.0;
- }
-
-}
-
-static AstPointSet *RegBaseMesh( AstRegion *this, int *status ){
-/*
-* Name:
-* RegBaseMesh
-
-* Purpose:
-* Return a PointSet containing a mesh of points on the boundary of a
-* Region in its base Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "nullregion.h"
-* AstPointSet *astRegBaseMesh( AstRegion *this, int *status )
-
-* Class Membership:
-* NullRegion member function (over-rides the astRegBaseMesh protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a PointSet containing a mesh of points on the
-* boundary of the Region. The points refer to the base Frame of
-* the encapsulated FrameSet. Note, a NullRegion has no boundary. This
-* is indicated by returned a PointSet containing a single point with a
-* value of AST__BAD on every axis.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a new PointSet containing a single point with value of
-* AST__BAD on every axis.
-
-*-
-*/
-
-/* Local Variables: */
- AstPointSet *result;
- double **ptr;
- int i;
- int nc;
-
-/* Initialise */
- result = NULL;
-
-/* Check the inherited status */
- if( !astOK ) return result;
-
-/* If the Region structure contains a pointer to a PointSet holding
- a previously created mesh, return it. */
- if( this->basemesh ) {
- result = astClone( this->basemesh );
-
-/* Otherwise, create a new mesh. */
- } else {
-
-/* Get the number of base Frame axes */
- nc = astGetNin( this->frameset );
-
-/* Create the PointSet. */
- result = astPointSet( 1, nc, "", status );
-
-/* Get a pointer to the axis values. */
- ptr = astGetPoints( result );
-
-/* If OK, store AST__BAD on every axis. */
- if( ptr ) for( i = 0; i < nc; i++ ) ptr[ i ][ 0 ] = AST__BAD;
-
-/* Same the returned pointer in the Region structure so that it does not
- need to be created again next time this function is called. */
- if( astOK && result ) this->basemesh = astClone( result );
-
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstRegion *RegBasePick( AstRegion *this_region, int naxes,
- const int *axes, int *status ){
-/*
-* Name:
-* RegBasePick
-
-* Purpose:
-* Return a Region formed by picking selected base Frame axes from the
-* supplied Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "nullregion.h"
-* AstRegion *RegBasePick( AstRegion *this, int naxes, const int *axes,
-* int *status )
-
-* Class Membership:
-* NullRegion member function (over-rides the astRegBasePick protected
-* method inherited from the Region class).
-
-* Description:
-* This function attempts to return a Region that is spanned by selected
-* axes from the base Frame of the encapsulated FrameSet of the supplied
-* Region. This may or may not be possible, depending on the class of
-* Region. If it is not possible a NULL pointer is returned.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* naxes
-* The number of base Frame axes to select.
-* axes
-* An array holding the zero-based indices of the base Frame axes
-* that are to be selected.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the Region, or NULL if no region can be formed.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFrame *bfrm; /* The base Frame in the supplied Region */
- AstFrame *frm; /* The base Frame in the returned Region */
- AstRegion *bunc; /* The uncertainty in the supplied Region */
- AstRegion *result; /* Returned Region */
- AstRegion *unc; /* The uncertainty in the returned Region */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the base Frame of the encapsulated FrameSet. */
- bfrm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Create a Frame by picking the selected axes from the base Frame of the
- encapsulated FrameSet. */
- frm = astPickAxes( bfrm, naxes, axes, NULL );
-
-/* Get the uncertainty Region (if any) within the base Frame of the supplied
- Region, and select the required axes from it. If the resulting Object
- is not a Region, annul it so that the returned Region will have no
- uncertainty. */
- if( astTestUnc( this_region ) ) {
- bunc = astGetUncFrm( this_region, AST__BASE );
- unc = astPickAxes( bunc, naxes, axes, NULL );
- bunc = astAnnul( bunc );
-
- if( ! astIsARegion( unc ) ) unc = astAnnul( unc );
-
- } else {
- unc = NULL;
- }
-
-/* Create the new NullRegion. */
- result = (AstRegion *) astNullRegion( frm, unc, "", status );
-
-/* Free resources */
- frm = astAnnul( frm );
- bfrm = astAnnul( bfrm );
- if( unc ) unc = astAnnul( unc );
-
-/* Return a NULL pointer if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static void GetRegionBounds( AstRegion *this_region, double *lbnd, double *ubnd, int *status ){
-/*
-* Name:
-* GetRegionBounds
-
-* Purpose:
-* Returns the bounding box of an un-negated Region in the current Frame of
-* the encapsulated FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "nullregion.h"
-* void astGetRegionBounds( AstRegion *this, double *lbnd, double *ubnd, int *status )
-
-* Class Membership:
-* NullRegion member function (over-rides the astGetRegionBounds protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns the upper and lower axis bounds of a Region in
-* the current Frame of the encapsulated FrameSet, assuming the Region
-* has not been negated. That is, the value of the Negated attribute
-* is ignored.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* lbnd
-* Pointer to an array in which to return the lower axis bounds
-* covered by the Region in the current Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the Region.
-* ubnd
-* Pointer to an array in which to return the upper axis bounds
-* covered by the Region in the current Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the Region.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstNullRegion *this; /* Pointer to NullRegion structure */
- int i; /* Axis index */
- int nc; /* No. of axes in base Frame */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the NullRegion structure */
- this = (AstNullRegion *) this_region;
-
-/* Get the number of base Frame axes. */
- nc = astGetNin( this_region->frameset );
-
-/* Set the upper bound less than the lower bound to indicate that the region
- contains no points. */
- for( i = 0; i < nc; i++ ) {
- lbnd[ i ] = 1.0;
- ubnd[ i ] = -1.0;
- }
-
-}
-
-static AstPointSet *RegMesh( AstRegion *this, int *status ){
-/*
-* Name:
-* RegMesh
-
-* Purpose:
-* Return a PointSet containing points spread over the boundary of a
-* Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "nullregion.h"
-* AstPointSet *astRegMesh( AstRegion *this, int *status )
-
-* Class Membership:
-* NullRegion member function (over-rides the astRegMesh protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a PointSet containing a mesh of points on the
-* boundary of the Region. The points refer to the current Frame of
-* the encapsulated FrameSet. Note, a NullRegion has no boundary and
-* so an error is reported if this function is called.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* NULL pointer.
-
-* Notes:
-* - This implementation reports and error and returns NULL since a
-* NullRegion has no boundary.
-*-
-*/
-
- astError( AST__INTER, "astRegMesh(%s): The %s class does not implement "
- "the astRegMesh method inherited from the Region class "
- "(internal AST programming error).", status, astGetClass( this ),
- astGetClass( this ) );
- return NULL;
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* Simplify
-
-* Purpose:
-* Simplify the Mapping represented by a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "nullregion.h"
-* AstMapping *Simplify( AstMapping *this, int *status )
-
-* Class Membership:
-* NullRegion method (over-rides the astSimplify method inherited
-* from the Region class).
-
-* Description:
-* This function invokes the parent Region Simplify method, and then
-* performs any further region-specific simplification.
-*
-* If the Mapping from base to current Frame is not a UnitMap, this
-* will include attempting to fit a new Region to the boundary defined
-* in the current Frame.
-
-* Parameters:
-* this
-* Pointer to the original Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the simplified Region. A cloned pointer to the
-* supplied Region will be returned if no simplication could be
-* performed.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstFrame *frm; /* Current Frame */
- AstMapping *map; /* Base->current Mapping */
- AstMapping *result; /* Result pointer to return */
- AstRegion *new; /* Simplified Region */
- AstRegion *this; /* Pointer to supplied Region structure */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the supplied Region structure. */
- this = (AstRegion *) this_mapping;
-
-/* Invoke the parent Simplify method inherited from the Region class. This
- will simplify the encapsulated FrameSet and uncertainty Region. */
- new = (AstRegion *) (*parent_simplify)( this_mapping, status );
-
-/* Is the Mapping from base Frame to current Frame in the Region a
- UnitMap? If so, no simplification is possible. */
- map = astGetMapping( new->frameset, AST__BASE, AST__CURRENT );
- if( astIsAUnitMap( map ) ){
- result = astClone( new );
-
- } else {
-
-/* Create a NullRegion from the current Frame. */
- frm = astGetFrame( new->frameset, AST__CURRENT );
- result = (AstMapping *) astNullRegion( frm, astGetUnc( new, 0 ), "", status );
-
-/* Free resources. */
- frm = astAnnul( frm );
-
- }
- map = astAnnul( map );
- new = astAnnul( new );
-
-/* If any simplification could be performed, copy Region attributes from
- the supplied Region to the returned Region, and return a pointer to it.
- If the supplied Region had no uncertainty, ensure the returned Region
- has no uncertainty. Otherwise, return a clone of the supplied pointer. */
- if( result != this_mapping ) astRegOverlay( result, this, 1 );
-
-/* If an error occurred, annul the returned pointer. */
- if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a NullRegion to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "nullregion.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* NullRegion member function (over-rides the astTransform protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function takes a NullRegion and a set of points encapsulated in a
-* PointSet and transforms the points by setting axis values to
-* AST__BAD for all points which are outside the region. Points inside
-* the region are copied unchanged from input to output.
-
-* Parameters:
-* this
-* Pointer to the NullRegion.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - The forward and inverse transformations are identical for a
-* Region.
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of axes in the Frame represented by the NullRegion.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstNullRegion *this; /* Pointer to NullRegion */
- AstPointSet *result; /* Pointer to output PointSet */
- double **ptr_out; /* Pointer to output coordinate data */
- double *p; /* Pointer to next axis value */
- int coord; /* Zero-based index for coordinates */
- int ncoord_out; /* No. of coordinates per output point */
- int npoint_out; /* No. of points */
- int point; /* Loop counter for points */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the NullRegion structure. */
- this = (AstNullRegion *) this_mapping;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Region class. This function validates
- all arguments and generates an output PointSet if necessary,
- containing a copy of the input PointSet. */
- result = (*parent_transform)( this_mapping, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- calculations needed to generate the output coordinate values. */
-
-/* If the NullRegion has been inverted, it represents an infinite region
- which includes all points, so just retain the copy of the supplied
- PointSet created by the parent Transform method above. If the NullRegion
- has not been inverted, it contains no points and so set all output points
- bad. */
- if( !astGetNegated( this ) ) {
- ncoord_out = astGetNcoord( result );
- npoint_out = astGetNpoint( result );
- ptr_out = astGetPoints( result );
- if ( astOK ) {
- for ( coord = 0; coord < ncoord_out; coord++ ) {
- p = ptr_out[ coord ];
- for ( point = 0; point < npoint_out; point++ ) {
- *(p++) = AST__BAD;
- }
- }
- }
- }
-
-/* Annul the result if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-/* None */
-
-/* Destructor. */
-/* ----------- */
-/* None */
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for NullRegion objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the NullRegion class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the NullRegion whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstNullRegion *this; /* Pointer to the NullRegion structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the NullRegion structure. */
- this = (AstNullRegion *) this_object;
-
-/* Write out values representing the instance variables for the
- NullRegion class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* There are no values to write, so return without further action. */
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsANullRegion and astCheckNullRegion functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(NullRegion,Region)
-astMAKE_CHECK(NullRegion)
-
-AstNullRegion *astNullRegion_( void *frame_void, AstRegion *unc, const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astNullRegion
-f AST_NULLREGION
-
-* Purpose:
-* Create a NullRegion.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "nullregion.h"
-c AstNullRegion *astNullRegion( AstFrame *frame, AstRegion *unc, const char *options, ... )
-f RESULT = AST_NULLREGION( FRAME, UNC, OPTIONS, STATUS )
-
-* Class Membership:
-* NullRegion constructor.
-
-* Description:
-* This function creates a new NullRegion and optionally initialises its
-* attributes.
-*
-* A NullRegion is a Region with no bounds. If the Negated attribute of a
-* NullRegion is false, the NullRegion represents a Region containing no
-* points. If the Negated attribute of a NullRegion is true, the NullRegion
-* represents an infinite Region containing all points within the
-* coordinate system.
-
-* Parameters:
-c frame
-f FRAME = INTEGER (Given)
-* A pointer to the Frame in which the region is defined. A deep
-* copy is taken of the supplied Frame. This means that any
-* subsequent changes made to the Frame using the supplied pointer
-* will have no effect the Region.
-c unc
-f UNC = INTEGER (Given)
-* An optional pointer to an existing Region which specifies the
-* uncertainties associated with positions in the supplied Frame.
-* The uncertainty in any point in the Frame is found by shifting the
-* supplied "uncertainty" Region so that it is centred at the point
-* being considered. The area covered by the shifted uncertainty
-* Region then represents the uncertainty in the position. The
-* uncertainty is assumed to be the same for all points.
-*
-* If supplied, the uncertainty Region must be of a class for which
-* all instances are centro-symetric (e.g. Box, Circle, Ellipse, etc.)
-* or be a Prism containing centro-symetric component Regions. A deep
-* copy of the supplied Region will be taken, so subsequent changes to
-* the uncertainty Region using the supplied pointer will have no
-* effect on the created Box. Alternatively,
-f a null Object pointer (AST__NULL)
-c a NULL Object pointer
-* may be supplied, in which case a default uncertainty of zero is
-* used.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new NullRegion. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new NullRegion. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astNullRegion()
-f AST_NULLREGION = INTEGER
-* A pointer to the new NullRegion.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *frame; /* Pointer to Frame structure */
- AstNullRegion *new; /* Pointer to new NullRegion */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the supplied Frame structure. */
- frame = astCheckFrame( frame_void );
-
-/* Initialise the NullRegion, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitNullRegion( NULL, sizeof( AstNullRegion ), !class_init,
- &class_vtab, "NullRegion", frame, unc );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new NullRegion's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new NullRegion. */
- return new;
-}
-
-AstNullRegion *astNullRegionId_( void *frame_void, void *unc_void,
- const char *options, ... ) {
-/*
-* Name:
-* astNullRegionId_
-
-* Purpose:
-* Create a NullRegion.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "nullregion.h"
-* AstNullRegion *astNullRegionId_( AstFrame *frame, AstRegion *unc, const char *options, ... )
-
-* Class Membership:
-* NullRegion constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astNullRegion constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astNullRegion_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astNullRegion_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astNullRegion_.
-
-* Returned Value:
-* The ID value associated with the new NullRegion.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *frame; /* Pointer to Frame structure */
- AstNullRegion *new; /* Pointer to new NullRegion */
- AstRegion *unc; /* Pointer to Region structure */
- va_list args; /* Variable argument list */
-
- int *status; /* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a Frame pointer from the supplied ID and validate the
- pointer to ensure it identifies a valid Frame. */
- frame = astVerifyFrame( astMakePointer( frame_void ) );
-
-/* Obtain a Region pointer from the supplied "unc" ID and validate the
- pointer to ensure it identifies a valid Region . */
- unc = unc_void ? astCheckRegion( astMakePointer( unc_void ) ) : NULL;
-
-/* Initialise the NullRegion, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitNullRegion( NULL, sizeof( AstNullRegion ), !class_init,
- &class_vtab, "NullRegion", frame, unc );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new NullRegion's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new NullRegion. */
- return astMakeId( new );
-}
-
-AstNullRegion *astInitNullRegion_( void *mem, size_t size, int init,
- AstNullRegionVtab *vtab, const char *name,
- AstFrame *frame, AstRegion *unc, int *status ) {
-/*
-*+
-* Name:
-* astInitNullRegion
-
-* Purpose:
-* Initialise a NullRegion.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "nullregion.h"
-* AstNullRegion *astInitNullRegion_( void *mem, size_t size, int init,
-* AstNullRegionVtab *vtab, const char *name,
-* AstFrame *frame, AstRegion *unc )
-
-* Class Membership:
-* NullRegion initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new NullRegion object. It allocates memory (if necessary) to accommodate
-* the NullRegion plus any additional data associated with the derived class.
-* It then initialises a NullRegion structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a NullRegion at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the NullRegion is to be initialised.
-* This must be of sufficient size to accommodate the NullRegion data
-* (sizeof(NullRegion)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the NullRegion (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the NullRegion
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the NullRegion's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new NullRegion.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-* frame
-* A pointer to the Frame in which the region is defined.
-* unc
-* A pointer to a Region which specifies the uncertainty of positions
-* within the supplied Frame. A NULL pointer can be supplied, in which
-* case default uncertainties of zero are used. If an uncertainty
-* Region is supplied, it must be either a Box, a Circle or an Ellipse,
-* and its encapsulated Frame must be related to the Frame supplied
-* for parameter "frame" (i.e. astConvert should be able to find a
-* Mapping between them). The centre of the supplied uncertainty
-* Region is immaterial since it will be re-centred on the point
-* being tested before use. A deep copy is taken of the supplied
-* Region.
-
-* Returned Value:
-* A pointer to the new NullRegion.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstNullRegion *new; /* Pointer to new NullRegion */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitNullRegionVtab( vtab, name );
-
-/* Initialise a Region structure (the parent class) as the first component
- within the NullRegion structure, allocating memory if necessary. */
- new = (AstNullRegion *) astInitRegion( mem, size, 0, (AstRegionVtab *) vtab,
- name, frame, NULL, unc );
-
-/* If an error occurred, clean up by deleting the new NullRegion. */
- if ( !astOK ) new = astDelete( new );
-
-/* Return a pointer to the new NullRegion. */
- return new;
-}
-
-AstNullRegion *astLoadNullRegion_( void *mem, size_t size, AstNullRegionVtab *vtab,
- const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadNullRegion
-
-* Purpose:
-* Load a NullRegion.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "nullregion.h"
-* AstNullRegion *astLoadNullRegion( void *mem, size_t size, AstNullRegionVtab *vtab,
-* const char *name, AstChannel *channel )
-
-* Class Membership:
-* NullRegion loader.
-
-* Description:
-* This function is provided to load a new NullRegion using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* NullRegion structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a NullRegion at the start of the memory
-* passed via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory into which the NullRegion is to be
-* loaded. This must be of sufficient size to accommodate the
-* NullRegion data (sizeof(NullRegion)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the NullRegion (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the NullRegion structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstNullRegion) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new NullRegion. If this is NULL, a pointer
-* to the (static) virtual function table for the NullRegion class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "NullRegion" is used instead.
-
-* Returned Value:
-* A pointer to the new NullRegion.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstNullRegion *new; /* Pointer to the new NullRegion */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this NullRegion. In this case the
- NullRegion belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstNullRegion );
- vtab = &class_vtab;
- name = "NullRegion";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitNullRegionVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built NullRegion. */
- new = astLoadRegion( mem, size, (AstRegionVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "NullRegion" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* There are no values to read. */
-/* ---------------------------- */
-
-/* If an error occurred, clean up by deleting the new NullRegion. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new NullRegion pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/nullregion.h b/ast-5.3-1/nullregion.h
deleted file mode 100644
index 10967b8..0000000
--- a/ast-5.3-1/nullregion.h
+++ /dev/null
@@ -1,221 +0,0 @@
-#if !defined( NULLREGION_INCLUDED ) /* Include this file only once */
-#define NULLREGION_INCLUDED
-/*
-*+
-* Name:
-* nullregion.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the NullRegion class.
-
-* Invocation:
-* #include "nullregion.h"
-
-* Description:
-* This include file defines the interface to the NullRegion class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The NullRegion class implement a Region with no boundaries.
-
-* Inheritance:
-* The NullRegion class inherits from the Region class.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 11-OCT-2004 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "region.h" /* Coordinate regions (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* NullRegion structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstNullRegion {
-
-/* Attributes inherited from the parent class. */
- AstRegion region; /* Parent class structure */
-
-} AstNullRegion;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstNullRegionVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstRegionVtab region_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-} AstNullRegionVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstNullRegionGlobals {
- AstNullRegionVtab Class_Vtab;
- int Class_Init;
-} AstNullRegionGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitNullRegionGlobals_( AstNullRegionGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(NullRegion) /* Check class membership */
-astPROTO_ISA(NullRegion) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstNullRegion *astNullRegion_( void *, AstRegion *, const char *, int *, ...);
-#else
-AstNullRegion *astNullRegionId_( void *, AstRegion *, const char *, ... )__attribute__((format(printf,3,4)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstNullRegion *astInitNullRegion_( void *, size_t, int, AstNullRegionVtab *,
- const char *, AstFrame *, AstRegion *, int * );
-
-/* Vtab initialiser. */
-void astInitNullRegionVtab_( AstNullRegionVtab *, const char *, int * );
-
-/* Loader. */
-AstNullRegion *astLoadNullRegion_( void *, size_t, AstNullRegionVtab *,
- const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckNullRegion(this) astINVOKE_CHECK(NullRegion,this,0)
-#define astVerifyNullRegion(this) astINVOKE_CHECK(NullRegion,this,1)
-
-/* Test class membership. */
-#define astIsANullRegion(this) astINVOKE_ISA(NullRegion,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astNullRegion astINVOKE(F,astNullRegion_)
-#else
-#define astNullRegion astINVOKE(F,astNullRegionId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitNullRegion(mem,size,init,vtab,name,frame,unc) \
-astINVOKE(O,astInitNullRegion_(mem,size,init,vtab,name,frame,unc,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitNullRegionVtab(vtab,name) astINVOKE(V,astInitNullRegionVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadNullRegion(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadNullRegion_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckNullRegion to validate NullRegion pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/object.c b/ast-5.3-1/object.c
deleted file mode 100644
index cc820dd..0000000
--- a/ast-5.3-1/object.c
+++ /dev/null
@@ -1,7775 +0,0 @@
-/*
-*class++
-* Name:
-* Object
-
-* Purpose:
-* Base class for all AST Objects.
-
-* Constructor Function:
-* None.
-
-* Description:
-* This class is the base class from which all other classes in the
-* AST library are derived. It provides all the basic Object
-* behaviour and Object manipulation facilities required throughout
-* the library. There is no Object constructor, however, as Objects
-* on their own are not useful.
-
-* Inheritance:
-* The Object base class does not inherit from any other class.
-
-* Attributes:
-* All Objects have the following attributes:
-*
-* - Class: Object class name
-* - ID: Object identification string
-* - Ident: Permanent Object identification string
-* - Nobject: Number of Objects in class
-* - ObjSize: The in-memory size of the Object in bytes
-* - RefCount: Count of active Object pointers
-* - UseDefs: Allow use of default values for Object attributes?
-
-* Functions:
-c The following functions may be applied to all Objects:
-f The following routines may be applied to all Objects:
-*
-c - astAnnul: Annul a pointer to an Object
-c - astBegin: Begin a new AST context
-c - astClear: Clear attribute values for an Object
-c - astClone: Clone a pointer to an Object
-c - astCopy: Copy an Object
-c - astDelete: Delete an Object
-c - astEnd: End an AST context
-c - astEscapes: Control whether graphical escape sequences are removed
-c - astExempt: Exempt an Object pointer from AST context handling
-c - astExport: Export an Object pointer to an outer context
-c - astGet<X>: Get an attribute value for an Object
-c - astImport: Import an Object pointer to the current context
-c - astIsA<Class>: Test class membership
-c - astLock: Lock an Object for use by the calling thread
-c - astSame: Do two AST pointers refer to the same Object?
-c - astSet: Set attribute values for an Object
-c - astSet<X>: Set an attribute value for an Object
-c - astShow: Display a textual representation of an Object on standard
-c output
-c - astTest: Test if an attribute value is set for an Object
-c - astTune: Set or get an AST tuning parameter
-c - astUnlock: Unlock an Object for use by other threads
-c - astVersion: Return the verson of the AST library being used.
-f - AST_ANNUL: Annul a pointer to an Object
-f - AST_BEGIN: Begin a new AST context
-f - AST_CLEAR: Clear attribute values for an Object
-f - AST_CLONE: Clone a pointer to an Object
-f - AST_COPY: Copy an Object
-f - AST_DELETE: Delete an Object
-f - AST_END: End an AST context
-f - AST_ESCAPES: Control whether graphical escape sequences are removed
-f - AST_EXEMPT: Exempt an Object pointer from AST context handling
-f - AST_EXPORT: Export an Object pointer to an outer context
-f - AST_GET<X>: Get an attribute value for an Object
-f - AST_IMPORT: Import an Object pointer to the current context
-f - AST_ISA<CLASS>: Test class membership
-f - AST_SAME: Do two AST pointers refer to the same Object?
-f - AST_SET: Set attribute values for an Object
-f - AST_SET<X>: Set an attribute value for an Object
-f - AST_SHOW: Display a textual representation of an Object on standard
-f output
-f - AST_TEST: Test if an attribute value is set for an Object
-f - AST_TUNE: Set or get an AST tuning parameter
-f - AST_VERSION: Return the verson of the AST library being used.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 1-FEB-1996 (RFWS):
-* Original version.
-* 22-APR-1996 (RFWS):
-* Added attribute setting functions.
-* 2-JUL-1996 (RFWS):
-* Added functions to support the external interface (using
-* identfiers).
-* 10-SEP-1996 (RFWS):
-* Added I/O facilities.
-* 30-MAY-1997 (RFWS):
-* Add ID attribute.
-* 14-JUL-1997 (RFWS):
-* Add astExempt function.
-* 14-OCT-1997 (RFWS):
-* Fixed uninitialised use of "dynamic" in astCopy_.
-* 14-NOV-1997 (RFWS):
-* Remove the subversive C "strtok" function.
-* 20-JAN-1998 (RFWS):
-* Make the astClear and astRVSet methods virtual.
-* 29-APR-1998 (RFWS):
-* Fixed bug in algorithm for encoding Object IDs.
-* 15-SEP-1999 (RFWS)
-* Made astAnnulId accessible from protected code.
-* 12-APR-2000 (DSB):
-* Zero all memory allocated for a new Object in InitObject before
-* storing any new values in the memory.
-* 3-APR-2001 (DSB):
-* Added the Ident attribute.
-* 28-SEP-2001 (DSB):
-* Modified VSet to ensure a non-null string always follows the equal
-* sign in the attribute setting passed to SetAttrib.
-* 27-NOV-2002 (DSB):
-* Modified astShow to use astWrite instead of astDump, so that
-* invocations of astShow will be included in the count of the
-* number of invocations of astWrite returned by astWriteInvocations.
-* 8-JAN-2003 (DSB):
-* Changed private InitVtab method to protected astInitObjectVtab
-* method.
-* 8-FEB-2004 (DSB):
-* Added astEscapes.
-* 10-FEB-2004 (DSB):
-* Added debug conditional code to keep track of memory leaks.
-* 22-AUG-2004 (DSB):
-* Added astEqual
-* 27-JAN-2005 (DSB):
-* Correct use of ->ident pointers, and added further DEBUG blocks.
-* 11-MAR-2005 (DSB):
-* Added attribute UseDefs.
-* 14-FEB-2006 (DSB):
-* Added attribute ObjSize.
-* 23-FEB-2006 (DSB):
-* Added MemoryCaching tuning parameter.
-* 27-FEB-2006 (DSB):
-* Include Objects returned by astCopy in the ObjectCaching system.
-* 28-FEB-2006 (DSB):
-* Use astOK to protect against errors within astGrow.
-* 1-MAR-2006 (DSB):
-* Replace astSetPermMap within DEBUG blocks by astBeginPM/astEndPM.
-* 26-MAY-2006 (DSB):
-* Correct handling of commas within the attribute value supplied
-* to astSetC.
-* 30-MAY-2006 (DSB):
-* Correct the correction made to handle commas within attribute
-* 6-JUN-2007 (DSB):
-* Fix harmless compiler warnings.
-* 21-JUN-2007 (DSB):
-* In astSet<X>, ignore trailing spaces in the attribute name.
-* 22-JUN-2007 (DSB):
-* - Make astVSet return a pointer to dynamic memory holding the
-* expanded setting string.
-* - Add astSetVtab, and astCast.
-* 27-JUN-2007 (DSB):
-* Modify astInitObject so that it ignores the supplied "size" value
-* if some memory is supplied.
-* 2-JULY-2007 (DSB):
-* Fix memory access problem in VSet.
-* 20-SEP-2007 (DSB):
-* In astDelete, ensure the error status is reset before calling
-* astGrow to extend the vtab free list.
-* 22-APR-2008 (DSB):
-* Added astSame.
-* 24-OCT-2008 (DSB):
-* Prevent a mutex deadlock that could occur when annulling an
-* Object ID.
-* 28-JAN-2008 (DSB):
-* Allow unlocked objects to be annulled using astAnnul.
-* 14-OCT-2009 (DSB):
-* Modify astCast to make it a virtual function and add type
-* checking.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS Object
-
-#define INVALID_CONTEXT -1 /* Context value for handles that have no
- associated Object */
-#define UNOWNED_CONTEXT -2 /* Context value for handles for objects
- that are not locked by any thread */
-
-
-/* Include files. */
-/* ============== */
-
-/* Configuration information */
-/* ------------------------ */
-#include "version.h" /* Version numbers */
-#include <config.h>
-
-/* Interface definitions. */
-/* ---------------------- */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "channel.h" /* I/O channels */
-#include "object.h" /* Interface definition for this class */
-#include "plot.h" /* Plot class (for astStripEscapes) */
-#include "globals.h" /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <errno.h>
-#include <float.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#include <limits.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* The following globals have the same values in all threads and so do
- not need to be in thread-specific data. */
-/* ------------------------------------------------------------------ */
-
-/* A pointer full of zeros. */
-static AstObject *zero_ptr;
-
-/* A flag which indicates what should happen when an AST Object is
- deleted. If this flag is non-zero, the memory used by the Object is
- not freed, but a pointer to it is placed on the end of a list of free
- memory chunk pointers so that the memory can be re-used if necessary
- avoiding the need to re-allocate memory with malloc (which is slow).
- A separate list of free memory chunks is kept for each class because
- each class object will require chunks of a different size. Pointers
- to these lists are stored in the virtual function table associated
- with each class. All memory on these lists is freed when object
- caching is switched off via the astTune function. */
-static int object_caching = 0;
-
-/* Set up global data access, mutexes, etc, needed for thread safety. */
-#ifdef THREAD_SAFE
-
-/* Define the initial values for the global data for this module. */
-#define GLOBAL_inits \
- globals->Retain_Esc = 0; \
- globals->Context_Level = 0; \
- globals->GetAttrib_Buff[ 0 ] = 0; \
- globals->AstGetC_Init = 0; \
- globals->AstGetC_Istr = 0; \
- globals->Active_Handles = NULL; \
- globals->Class_Init = 0; \
- globals->Nvtab = 0; \
- globals->Known_Vtabs = NULL;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Object)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define retain_esc astGLOBAL(Object,Retain_Esc)
-#define context_level astGLOBAL(Object,Context_Level)
-#define active_handles astGLOBAL(Object,Active_Handles)
-#define getattrib_buff astGLOBAL(Object,GetAttrib_Buff)
-#define astgetc_strings astGLOBAL(Object,AstGetC_Strings)
-#define astgetc_istr astGLOBAL(Object,AstGetC_Istr)
-#define astgetc_init astGLOBAL(Object,AstGetC_Init)
-#define class_init astGLOBAL(Object,Class_Init)
-#define class_vtab astGLOBAL(Object,Class_Vtab)
-#define nvtab astGLOBAL(Object,Nvtab)
-#define known_vtabs astGLOBAL(Object,Known_Vtabs)
-
-/* mutex2 is used to prevent the global lists of object handles being
- accessed by more than one thread at any one time. */
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX2 pthread_mutex_lock( &mutex2 );
-#define UNLOCK_MUTEX2 pthread_mutex_unlock( &mutex2 );
-
-/* Each Object contains two mutexes. The primary mutex (mutex1) is used
- to guard access to all aspects of the Object except for the "locker"
- and "ref_count" items. The secondary mutex (mutex2) is used to guard
- access to these two remaining items. We need this secondary mutex
- since the "locker" and "ref_count" items need to be accessable within
- a thread even if that thread has not locked the Object using astLock.
- Define macros for accessing these two mutexes. */
-#define LOCK_PMUTEX(this) (pthread_mutex_lock(&((this)->mutex1)))
-#define UNLOCK_PMUTEX(this) (pthread_mutex_unlock(&((this)->mutex1)))
-#define LOCK_SMUTEX(this) (pthread_mutex_lock(&((this)->mutex2)))
-#define UNLOCK_SMUTEX(this) (pthread_mutex_unlock(&((this)->mutex2)))
-
-
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-/* Define the class virtual function table and its initialisation flag as
- static variables. */
-static int class_init = 0; /* Virtual function table initialised? */
-static AstObjectVtab class_vtab; /* Virtual function table */
-
-/* A list of pointers to all the known class virtual function tables. */
-static int nvtab = 0;
-static AstObjectVtab **known_vtabs = NULL;
-
-/* A flag which indicates if AST functions which return text strings
- should retain any graphical escape sequences (as interpreted by the
- Plot class). */
-static int retain_esc = 0;
-
-/* Context level (Begin/End/Exempt/Export) */
-static int context_level = 0;
-
-/* Array of list heads for each context (each list is a list of Handle
- structures). */
-static int *active_handles = NULL;
-
-/* String returned by GetAttrib. */
-static char getattrib_buff[ AST__GETATTRIB_BUFF_LEN + 1 ] = "";
-
-/* Pointers to string buffers returned by astGetC. */
-static char *astgetc_strings[ AST__ASTGETC_MAX_STRINGS ];
-
-/* Offset of next string in "AstGetC_Strings" */
-static int astgetc_istr = 0;
-
-/* "AstGetC_Strings" array initialised? */
-static int astgetc_init = 0;
-
-/* Null macros for mutex locking and unlocking */
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-#define LOCK_PMUTEX(this)
-#define LOCK_SMUTEX(this)
-#define UNLOCK_PMUTEX(this)
-#define UNLOCK_SMUTEX(this)
-
-#endif
-
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstObject *Cast( AstObject *, AstObject *, int * );
-static const char *Get( AstObject *, const char *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static const char *GetID( AstObject *, int * );
-static const char *GetIdent( AstObject *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetObjSize( AstObject *, int * );
-static int Same( AstObject *, AstObject *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestID( AstObject *, int * );
-static int TestIdent( AstObject *, int * );
-static unsigned long Magic( const AstObject *, size_t, int * );
-static void CleanAttribs( AstObject *, int * );
-static void Clear( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void ClearID( AstObject *, int * );
-static void ClearIdent( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void EmptyObjectCache( int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetID( AstObject *, const char *, int * );
-static void SetIdent( AstObject *, const char *, int * );
-static void Show( AstObject *, int * );
-static void VSet( AstObject *, const char *, char **, va_list, int * );
-
-static int GetUseDefs( AstObject *, int * );
-static int TestUseDefs( AstObject *, int * );
-static void ClearUseDefs( AstObject *, int * );
-static void SetUseDefs( AstObject *, int, int * );
-
-#if defined(THREAD_SAFE)
-static void ChangeThreadVtab( AstObject *, int * );
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Member functions. */
-/* ================= */
-AstObject *astAnnul_( AstObject *this, int *status ) {
-/*
-*++
-* Name:
-c astAnnul
-f AST_ANNUL
-
-* Purpose:
-* Annul a pointer to an Object.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "object.h"
-c AstObject *astAnnul( AstObject *this )
-f CALL AST_ANNUL( THIS, STATUS )
-
-* Class Membership:
-* Object method.
-
-* Description:
-c This function annuls a pointer to an Object so that it is no
-f This routine annuls a pointer to an Object so that it is no
-* longer recognised as a valid pointer by the AST library. Any
-* resources associated with the pointer are released and made
-* available for re-use.
-*
-c This function also decrements the Object's RefCount attribute by
-f This routine also decrements the Object's RefCount attribute by
-* one. If this attribute reaches zero (which happens when the last
-* pointer to the Object is annulled), then the Object is deleted.
-
-* Parameters:
-c this
-c The Object pointer to be annulled.
-f THIS = INTEGER (Given and Returned)
-f The Object pointer to be annulled. A null pointer value (AST__NULL)
-f is always returned.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-c Returned Value:
-c astAnnul()
-c A null Object pointer (AST__NULL) is always returned.
-c
-* Applicability:
-* Object
-c This function applies to all Objects.
-f This routine applies to all Objects.
-
-* Notes:
-c - This function will attempt to annul the pointer even if the
-c Object is not currently locked by the calling thread (see astLock).
-c - This function attempts to execute even if the AST error
-c status is set
-f - This routine attempts to execute even if STATUS is set to an
-f error value
-* on entry, although no further error report will be
-* made if it subsequently fails under these circumstances. In
-* particular, it will fail if the pointer suppled is not valid,
-* but this will only be reported if the error status is clear on
-* entry.
-*--
-*/
-
-/* Check the pointer to ensure it identifies a valid Object (this
- generates an error if it doesn't). */
- if ( !astIsAObject( this ) ) return NULL;
-
-/* Get a lock on the object's secondary mutex. This mutex guards access
- to the "ref_count" and "locker" components of the AstObject structure. */
- LOCK_SMUTEX(this);
-
-#ifdef MEM_DEBUG
- { int rc;
- char buf[100];
- rc = this->ref_count;
- sprintf(buf,"annulled (refcnt: %d -> %d)", rc, rc-1 );
- astMemoryUse( this, buf );
- }
-#endif
-
-/* Decrement the Object's reference count. */
- --(this->ref_count);
-
-/* Unlock the object's secondary mutex. */
- UNLOCK_SMUTEX(this);
-
-/* Decrement the Object's reference count and delete the Object if
- necessary. */
- if ( !this->ref_count ) (void) astDelete( this );
-
-/* Always return NULL. */
- return NULL;
-}
-
-static AstObject *Cast( AstObject *this, AstObject *obj, int *status ) {
-/*
-*+
-* Name:
-* astCast
-
-* Purpose:
-* Cast an Object into an instance of a sub-class.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *astCast( AstObject *this, AstObject *obj )
-
-* Class Membership:
-* Object method.
-
-* Description:
-* This function returns a deep copy of an ancestral component of the
-* supplied object. The required class of the ancestral component is
-* specified by another object. Specifically, if "this" and "new" are
-* of the same class, a copy of "this" is returned. If "this" is an
-* instance of a subclass of "obj", then a copy of the component
-* of "this" that matches the class of "obj" is returned. Otherwise,
-* a NULL pointer is returned without error.
-
-* Parameters:
-* this
-* Pointer to the Object to be cast.
-* obj
-* Pointer to an Object that defines the class of the returned Object.
-* The returned Object will be of the same class as "obj".
-
-* Returned Value:
-* A pointer to the new Object. NULL if "this" is not a sub-class of
-* "obj", or if an error occurs.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstObject *new;
- int generation_gap;
-
-/* Initialise */
- new = NULL;
-
-/* Check inherited status */
- if( !astOK ) return new;
-
-/* Check pointer have been supplied. */
- if( this && obj ) {
-
-/* See how many steps up the class inheritance ladder it is from "this" to
- "obj". A positive value is returned if "this" is a sub-class of "obj".
- A negative value is returned if "obj" is a sub-class of "this". Zero
- is returned if they are of the same class. AST__COUSIN is returned if
- they share a common ancestor but are not on the same line of descent. */
- generation_gap = astClassCompare( astVTAB( this ), astVTAB( obj ) );
-
-/* If the two objects are of the same class, just return a copy of
- "this". */
- if( generation_gap == 0 ) {
- new = astCopy( this );
-
-/* If "this" is a subclass of "obj", return a deep copy of "this" cast
- into the class of "obj". */
- } else if( generation_gap != AST__COUSIN && generation_gap > 0 ) {
- new = astCastCopy( this, obj );
-
- }
- }
-
-/* Return the new pointer. */
- return new;
-}
-
-AstObject *astCastCopy_( AstObject *this, AstObject *obj, int *status ) {
-/*
-*+
-* Name:
-* astCastCopy
-
-* Purpose:
-* Cast an Object into an instance of a sub-class, without type-checking.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *astCastCopy( AstObject *this, AstObject *obj )
-
-* Class Membership:
-* Object method.
-
-* Description:
-* This function returns a deep copy of an ancestral component of the
-* supplied object. The required class of the ancestral component is
-* specified by another object. No checks are performed that "this" is
-* a sub-class of "obj".
-*
-* It works by temporarily changing the vtab in "this" to be the same
-* as in "obj", and then doing a deep copy, and then re-instating the
-* original vtab.
-
-* Parameters:
-* this
-* Pointer to the Object to be cast.
-* obj
-* Pointer to an Object that defines the class of the returned Object.
-* The returned Object will be of the same class as "obj".
-
-* Returned Value:
-* A pointer to the new Object.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstObject *new;
- AstObjectVtab *this_vtab;
- size_t this_size;
-
-/* Initialise */
- new = NULL;
-
-/* Check inherited status */
- if( !astOK ) return new;
-
-/* Check pointer have been supplied. */
- if( this && obj ) {
-
-/* Save a pointer to the original virtual function tables for "this". */
- this_vtab = astVTAB( this );
-
-/* Temporarily change the vtab of "this" to that of "obJ". */
- this->vtab = astVTAB( obj );
-
-/* Temporarily change the size of "this" to be the size of "obj". */
- this_size = this->size;
- this->size = obj->size;
-
-/* Now take a copy of the object (now considered to be an instance of the
- class specified by "obj"). */
- new = astCopy( this );
-
-/* Re-instate the original Object vtab and size. */
- this->vtab = this_vtab;
- this->size = this_size;
-
-/* The sub-clas to which "this" originally belonged may have extended the
- range of values allowed for one or more of the attributes inherited from
- the "obj" class. This means that the current attribute values stored
- in the returned object may be inappropriate for the class of "obj". An
- example is the System attribute defined by the Frame class, and extended
- by sub-classes of Frame. So we now call astCleanAttribs to ensure that
- any inappropriate attribute values are cleared in the returned object. */
- astCleanAttribs( new );
- }
-
-/* Return the new pointer. */
- return new;
-}
-
-#if defined(THREAD_SAFE)
-static void ChangeThreadVtab( AstObject *this, int *status ){
-/*
-* Name:
-* ChangeThreadVtab
-
-* Purpose:
-* Modify an Object structure so that it refers to a vtab created by
-* the currently executing thread.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* void ChangeThreadVtab( AstObject *this, int *status )
-
-* Class Membership:
-* Object member function.
-
-* Description:
-* Each Object structure contains a pointer to a virtual function
-* table (vtab) that identifies information about the class to
-* which the Object belongs (function pointers, Object caches,
-* etc). In order to avoid use of mutexes (which can slow down AST
-* applications enormously), each thread has its own set of vtab
-* structures (one for each AST class) stored in thread-specific
-* data. Each time an Object is locked by the currently executing
-* thread, this function should be called to change the vtab pointer
-* in the Object to refer to the vtab relevant to the currently
-* executing thread.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS
- const char *class;
- int i;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to Thread-specific data for the currently executing thread. */
- astGET_GLOBALS(this);
-
-/* Get the class name for the supplied Object. This uses the existing
- vtab pointer in the Object structure to locate the required GetClass
- method and the class name. This vtab pointer may be for a vtab created
- by a different thread to the one currently executing, but this shouldn't
- matter since we are not modifying the vtab contents. */
- class = astGetClass( this );
-
-/* Check a class name was obtained */
- if( class ) {
-
-/* Loop round the vtab structures created by the currently executing thread. */
- for( i = 0; i < nvtab; i++ ) {
-
-/* If the current vtab is for a class that matches the class of the
- supplied Object, then store a pointer to the vtab in the Object
- structure, and exit. */
- if( !strcmp( class, known_vtabs[ i ]->class ) ) {
- this->vtab = known_vtabs[ i ];
- break;
- }
- }
- }
-}
-#endif
-
-AstObject *astCheckLock_( AstObject *this, int *status ) {
-/*
-*+
-* Name:
-* astCheckLock
-
-* Purpose:
-* Check that supplied Object is locked by the calling thread.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *astCheckLock( AstObject *this )
-
-* Class Membership:
-* Object method.
-
-* Description:
-* This function reports an error if the supplied object has not
-* previously been locked (using astLock) by the calling thread.
-
-* Parameters:
-* this
-* Pointer to the Object.
-
-* Returned Value:
-* A copy of the supplied pointer ("this") is returned. The Object
-* reference count is not changed.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-
-*-
-*/
-
-/* This function does nothing in the non-threads version of libast. */
-#if defined(THREAD_SAFE)
-
-/* Local Variables; */
- AstObject *fail;
-
-/* Check the supplied pointer. */
- if( this ) {
-
-/* First use the private ManageLock function rather than the virtual
- astManageLock method to check the top level Object is locked for use
- by the current thread. This saves time and allows a more appropriate
- error message to be issued. */
- if( ManageLock( this, AST__CHECKLOCK, 0, NULL, status ) ) {
- if( astOK ) {
- astError( AST__LCKERR, "astCheckLock(%s): The supplied %s cannot "
- "be used since it is not locked for use by the current "
- "thread (programming error).", status, astGetClass( this ),
- astGetClass( this ) );
- }
-
-/* If the top level Object is locked, now use the virtual astManageLock
- method to check any objects contained within the top level Object. */
- } else if( astManageLock( this, AST__CHECKLOCK, 0, &fail ) ) {
- if( astOK ) {
- astError( AST__LCKERR, "astCheckLock(%s): The supplied %s cannot "
- "be used since a %s contained within the %s is not "
- "locked for use by the current thread (programming "
- "error).", status, astGetClass( this ),
- astGetClass( this ), astGetClass( fail ),
- astGetClass( this ) );
- }
- }
- }
-#endif
-
-/* Return the supploed pointer. */
- return this;
-
-}
-
-int astClassCompare_( AstObjectVtab *class1, AstObjectVtab *class2,
- int *status ) {
-/*
-*+
-* Name:
-* astClassCompare
-
-* Purpose:
-* Determine the relationship between two AST classes.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "object.h"
-* int astClassCompare( AstObjectVtab *class1, AstObjectVtab *class2 )
-
-* Class Membership:
-* Object method.
-
-* Description:
-* This function returns the number of steps up the class inheritance
-* ladder from the class specified by "class1" to the class specified
-* by "class2".
-
-* Parameters:
-* class1
-* Pointer to a virtual function table describing the first AST class.
-* class2
-* Pointer to a virtual function table describing the second AST class.
-
-* Returned Value:
-* The generation gap between "class1" and "class2". The result will be
-* positive if "class1" is a subclass of "class2", negative if "class2"
-* is a subclass of "class1", zero if they are of the same class (or
-* an error occurs), or AST__COUSIN if they are not on the same line
-* of descent.
-
-*-
-*/
-
-/* Local Variables: */
- AstClassIdentifier *class1_id;
- AstClassIdentifier *class2_id;
- AstClassIdentifier *id;
- int *class1_check;
- int *class2_check;
- int result;
-
-/* Initialise */
- result = 0;
-
-/* Check inherited status */
- if( !astOK ) return result;
-
-/* Check pointer have been supplied. */
- if( class1 && class2 ) {
-
-/* Get pointers to the AstClassIdentifier that identifies the top-level
- class of each vtab. */
- class1_id = class1->top_id;
- class2_id = class2->top_id;
-
-/* Class membership is specified by the "check" value in each class
- identifier. Get the check values for both vtabs. */
- class1_check = class1_id->check;
- class2_check = class2_id->check;
-
-/* Try walking up the class heirarchy of "class1" until the class of
- "class2" is reached. The top-level AstObject class has a NULL "parent"
- pointer in its class identifier structure. */
- id = class1_id;
- while( id && ( id->check != class2_check ) ) {
- id = id->parent;
- result++;
- }
-
-/* If "class1" is not a subclass of "class2", try walking up the class
- heirarchy of "class2" until the class of "class1" is reached. */
- if( !id ) {
- result = 0;
- id = class2_id;
- while( id && ( id->check != class1_check ) ) {
- id = id->parent;
- result--;
- }
-
-/* If "class2" is not a subclass of "class1", return AST__COUSIN. */
- if( !id ) result = AST__COUSIN;
- }
- }
-
-/* Return the generation gap. */
- return result;
-}
-
-static void CleanAttribs( AstObject *this_object, int *status ) {
-/*
-*+
-* Name:
-* astCleanAttribs
-
-* Purpose:
-* Clear any invalid set attribute values.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "object.h"
-* void astCleanAttribs( AstObject *this, int *status )
-
-* Class Membership:
-* Object method.
-
-* Description:
-* This function clears any attributes that are currently set to
-* invalid values in the supplied object. This can happen for instance
-* when an object is cast into an instance of a parent class using
-* astCast, since sub-classes can extend the range of valid values
-* an attribute can take.
-
-* Parameters:
-* this
-* Pointer to the Object to be cleaned.
-*-
-*/
-
-/* The base Object class has no attributes that need cleaning. */
-
-}
-
-static void Clear( AstObject *this, const char *attrib, int *status ) {
-/*
-*++
-* Name:
-c astClear
-f AST_CLEAR
-
-* Purpose:
-* Clear attribute values for an Object.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "object.h"
-c void astClear( AstObject *this, const char *attrib )
-f CALL AST_CLEAR( THIS, ATTRIB, STATUS )
-
-* Class Membership:
-* Object method.
-
-* Description:
-c This function clears the values of a specified set of attributes
-f This routine clears the values of a specified set of attributes
-* for an Object. Clearing an attribute cancels any value that has
-* previously been explicitly set for it, so that the standard
-* default attribute value will subsequently be used instead. This
-c also causes the astTest function to return the value zero for
-f also causes the AST_TEST function to return the value .FALSE. for
-* the attribute, indicating that no value has been set.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Object.
-c attrib
-f ATTRIB = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated character string containing a
-c comma-separated list of the names of the attributes to be cleared.
-f A character string containing a comma-separated list of the
-f names of the attributes to be cleared.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Applicability:
-* Object
-c This function applies to all Objects.
-f This routine applies to all Objects.
-
-* Notes:
-* - Attribute names are not case sensitive and may be surrounded
-* by white space.
-* - It does no harm to clear an attribute whose value has not been
-* set.
-* - An error will result if an attempt is made to clear the value
-* of a read-only attribute.
-*--
-*/
-
-/* Local Variables: */
- char *buff; /* Pointer to character buffer */
- char *name; /* Pointer to individual attribute name */
- char *name_end; /* Pointer to null at end of name */
- int i; /* Loop counter for characters */
- int j; /* Non-blank character count */
- int len; /* Length of attrib string */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain the length of the attrib string. */
- len = (int) strlen( attrib );
- if ( len != 0 ) {
-
-/* Allocate memory and store a copy of the string. */
- buff = astStore( NULL, attrib, (size_t) ( len + 1 ) );
- if ( astOK ) {
-
-/* Loop to process each element in the comma-separated list. */
- name = buff;
- while ( name ) {
-
-/* Change the comma at the end of each element to a null to terminate
- the name. */
- if ( ( name_end = strchr( name, ',' ) ) ) *name_end = '\0';
-
-/* Remove white space and upper case characters from the attribute
- name. */
- for ( i = j = 0; name[ i ]; i++ ) {
- if ( !isspace( name[ i ] ) ) name[ j++ ] = tolower( name[ i ] );
- }
-
-/* Terminate the attribute name and pass it to astClearAttrib to clear
- the attribute (unless it is all blank, in which case we ignore
- it). */
- name[ j ] = '\0';
- if ( j ) astClearAttrib( this, name );
-
-/* Check for errors and abort if any clear operation fails. Otherwise,
- process the next attribute. */
- if ( !astOK ) break;
- name = name_end ? name_end + 1 : NULL;
- }
- }
-
-/* Free the memory allocated for the string buffer. */
- buff = astFree( buff );
- }
-}
-
-static void ClearAttrib( AstObject *this, const char *attrib, int *status ) {
-/*
-*+
-* Name:
-* astClearAttrib
-
-* Purpose:
-* Clear an attribute value for an Object.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "object.h"
-* void astClearAttrib( AstObject *this, const char *attrib )
-
-* Class Membership:
-* Object method.
-
-* Description:
-* This function clears the value of a specified attribute for an
-* Object, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-
-* Notes:
-* - The Object class does not have any writable attributes, so
-* this function merely reports an error. It is intended to be
-* extended by other class definitions.
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* ID. */
-/* --- */
- if ( !strcmp( attrib, "id" ) ) {
- astClearID( this );
-
-/* Ident. */
-/* ------ */
- } else if ( !strcmp( attrib, "ident" ) ) {
- astClearIdent( this );
-
-/* UseDefs. */
-/* -------- */
- } else if ( !strcmp( attrib, "usedefs" ) ) {
- astClearUseDefs( this );
-
-/* Read-only attributes. */
-/* --------------------- */
-/* Test if the attribute string matches any of the read-only
- attributes of this class. If it does, then report an error. */
- } else if ( !strcmp( attrib, "class" ) ||
- !strcmp( attrib, "nobject" ) ||
- !strcmp( attrib, "objsize" ) ||
- !strcmp( attrib, "refcount" ) ) {
- astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
- "value for a %s.", status, attrib, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Since no writable attributes are defined for the Object class, any
- attempt to clear a value for anything else is also an error. */
- } else {
- astError( AST__BADAT, "astClear: The attribute name \"%s\" is invalid "
- "for a %s.", status, attrib, astGetClass( this ) );
- }
-}
-
-AstObject *astClone_( AstObject *this, int *status ) {
-/*
-*++
-* Name:
-c astClone
-f AST_CLONE
-
-* Purpose:
-* Clone (duplicate) an Object pointer.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "object.h"
-c AstObject *astClone( AstObject *this )
-f RESULT = AST_CLONE( THIS, STATUS )
-
-* Class Membership:
-* Object method.
-
-* Description:
-* This function returns a duplicate pointer to an existing
-* Object. It also increments the Object's RefCount attribute to
-* keep track of how many pointers have been issued.
-*
-* Note that this function is NOT equivalent to an assignment
-* statement, as in general the two pointers will not have the same
-* value.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Original pointer to the Object.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astClone()
-f AST_CLONE = INTEGER
-* A duplicate pointer to the same Object.
-
-* Applicability:
-* Object
-* This function applies to all Objects.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a lock on the object's secondary mutex. This mutex guards access
- to the "ref_count" and "locker" components of the AstObject structure. */
- LOCK_SMUTEX(this);
-
-#ifdef MEM_DEBUG
- { int rc;
- char buf[100];
- rc = this->ref_count;
- sprintf(buf,"cloned (refcnt: %d -> %d)", rc, rc+1 );
- astMemoryUse( this, buf );
- }
-#endif
-
-/* Increment the Object's reference count. */
- this->ref_count++;
-
-/* Unlock the object's secondary mutex. */
- UNLOCK_SMUTEX(this);
-
-/* Return a new pointer to the Object. */
- return this;
-}
-
-AstObject *astCopy_( const AstObject *this, int *status ) {
-/*
-*++
-* Name:
-c astCopy
-f AST_COPY
-
-* Purpose:
-* Copy an Object.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "object.h"
-c AstObject *astCopy( const AstObject *this )
-f RESULT = AST_COPY( THIS, STATUS )
-
-* Class Membership:
-* Object method.
-
-* Description:
-* This function creates a copy of an Object and returns a pointer
-* to the resulting new Object. It makes a "deep" copy, which
-* contains no references to any other Object (i.e. if the original
-* Object contains references to other Objects, then the actual
-* data are copied, not simply the references). This means that
-* modifications may safely be made to the copy without indirectly
-* affecting any other Object.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Object to be copied.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astCopy()
-f AST_COPY = INTEGER
-* Pointer to the new Object.
-
-* Applicability:
-* Object
-* This function applies to all Objects.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
- AstObject *new; /* Pointer to new object */
- AstObjectVtab *vtab; /* Pointer to object vtab */
- int i; /* Loop counter for copy constructors */
-
-/* Initiallise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Re-use cached memory, or allocate new memory using the size of the input
- object, to store the output Object. */
-
- vtab = this->vtab;
- if( object_caching ){
-
- if( vtab->nfree > 0 ) {
- new = vtab->free_list[ --(vtab->nfree) ];
- vtab->free_list[ vtab->nfree ] = NULL;
- } else {
- new = astMalloc( this->size );
- }
-
- } else {
- new = astMalloc( this->size );
- }
-
- if ( astOK ) {
-
-/* Perform an initial byte-by-byte copy of the entire object
- structure. */
- (void) memcpy( (void *) new, (const void *) this, this->size );
-
-/* Initialise any components of the new Object structure that need to
- differ from the input. */
- new->check = Magic( new, new->size, status );
- new->dynamic = 1;
- new->ref_count = 1;
- new->id = NULL; /* ID attribute is not copied (but Ident is copied) */
-
-/* Copy the persistent identifier string. */
- if( this->ident ) {
- new->ident = astStore( NULL, this->ident, strlen( this->ident ) + 1 );
- }
-
-/* Create a new mutex for the new Object, and lock it for use by the
- current thread. */
-#ifdef THREAD_SAFE
- if( pthread_mutex_init( &(new->mutex1), NULL ) != 0 && astOK ) {
- astError( AST__INTER, "astInitObject(%s): Failed to "
- "initialise POSIX mutex1 for the new Object.", status,
- vtab->class );
- }
- if( pthread_mutex_init( &(new->mutex2), NULL ) != 0 && astOK ) {
- astError( AST__INTER, "astInitObject(%s): Failed to "
- "initialise POSIX mutex2 for the new Object.", status,
- vtab->class );
- }
- new->locker = -1;
- new->globals = NULL;
- (void) ManageLock( new, AST__LOCK, 0, NULL, status );
-#endif
-
-/* Loop to execute any copy constructors declared by derived classes. */
- for ( i = 0; i < vtab->ncopy; i++ ) {
-
-/* Invoke each copy constructor in turn. */
- (*vtab->copy[ i ])( this, new, status );
-
-/* If any copy constructor fails, work backwards through the
- corresponding destructor functions, invoking each in turn to undo
- the copy operations that have been completed so far. */
- if ( !astOK ) {
- for ( ; i >= 0; i-- ) {
- (*vtab->delete[ i ])( new, status );
- }
-
-/* Zero the entire new Object structure (to prevent accidental re-use
- of any of its values after deletion). */
- (void) memset( new, 0, new->size );
-
-/* Free the Object's memory and ensure that a NULL pointer will be
- returned. */
- new = astFree( new );
-
-/* Quit trying to copy the Object. */
- break;
- }
- }
- }
-
-/* If OK, increment the count of active objects. */
- if ( astOK ) vtab->nobject++;
-
-/* Return a pointer to the new Object. */
- return new;
-}
-
-AstObject *astDelete_( AstObject *this, int *status ) {
-/*
-*++
-* Name:
-c astDelete
-f AST_DELETE
-
-* Purpose:
-* Delete an Object.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "object.h"
-c AstObject *astDelete( AstObject *this )
-f CALL AST_DELETE( THIS, STATUS )
-
-* Class Membership:
-* Object method.
-
-* Description:
-c This function deletes an Object, freeing all resources
-f This routine deletes an Object, freeing all resources
-* associated with it and rendering any remaining pointers to the
-* Object invalid.
-*
-* Note that deletion is unconditional, regardless of whether other
-* pointers to the Object are still in use (possibly within other
-* Objects). A safer approach is to defer deletion, until all
-c references to an Object have expired, by using astBegin/astEnd
-c (together with astClone and astAnnul if necessary).
-f references to an Object have expired, by using AST_BEGIN/AST_END
-f (together with AST_CLONE and AST_ANNUL if necessary).
-
-* Parameters:
-c this
-c Pointer to the Object to be deleted.
-f THIS = INTEGER (Given and Returned)
-f Pointer to the Object to be deleted. A null pointer value
-f (AST__NULL) is always returned.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-c Returned Value:
-c astDelete()
-c A null Object pointer (AST__NULL) is always returned.
-c
-* Applicability:
-* Object
-c This function applies to all Objects.
-f This routine applies to all Objects.
-
-* Notes:
-c - This function attempts to execute even if the AST error status
-c is set
-f - This routine attempts to execute even if STATUS is set to an error
-f value
-* on entry, although no further error report will be
-* made if it subsequently fails under these circumstances.
-*--
-*/
-
-/* Local Variables: */
- AstObjectVtab *vtab; /* Pointer to virtual function table */
- int dynamic; /* Was memory allocated dynamically? */
- int i; /* Loop counter for destructors */
- int ifree; /* Index of next slot on free list */
- int status_value; /* AST error status value */
- size_t size; /* Object size */
-
-/* Check the pointer to ensure it identifies a valid Object (this
- generates an error if it doesn't). */
- if ( !astIsAObject( this ) ) return NULL;
-
-/* Loop through all the destructors associated with the Object by derived
- classes (working up the class hierarchy). */
- for ( i = this->vtab->ndelete - 1; i >= 0; i-- ) {
-
-/* Invoke each destructor in turn. Attempt to continue even if destructors
- fail. */
- ( *this->vtab->delete[ i ] )( this, status );
- }
-
-/* Free the ID strings. */
- this->id = astFree( this->id );
- this->ident = astFree( this->ident );
-
-/* Attempt to unlock the Object and destroy its mutexes. */
-#if defined(THREAD_SAFE)
- (void) ManageLock( this, AST__UNLOCK, 0, NULL, status );
- pthread_mutex_destroy( &(this->mutex1) );
- pthread_mutex_destroy( &(this->mutex2) );
-#endif
-
-/* Save the virtual function table address and note if the Object's
- memory was allocated dynamically. Also note its size. */
- vtab = this->vtab;
- dynamic = this->dynamic;
- size = this->size;
-
-/* Zero the entire Object structure (to prevent accidental re-use of
- any of its values after deletion). */
- (void) memset( this, 0, size );
-
-/* If necessary, free the Object's memory. If object caching is switched
- on, the memory is not in fact freed; it is merely placed onto the end
- of the list of free memory blocks included in the virtual function table
- of the AST class concerned. astGrow returns immediately if an error
- has already occurred, so we need to reset the error status explicitly
- before calling astGrow. */
- if ( dynamic ) {
- if( object_caching ) {
- ifree = (vtab->nfree)++;
-
- status_value = astStatus;
- astClearStatus;
- vtab->free_list = astGrow( vtab->free_list, vtab->nfree,
- sizeof(AstObject *) );
- astSetStatus( status_value );
-
- if( vtab->free_list ) vtab->free_list[ ifree ] = this;
- } else {
- (void) astFree( this );
- }
- }
-
-/* Decrement the count of active Objects. */
- vtab->nobject--;
-
-/* Always return NULL. */
- return NULL;
-}
-
-static void Dump( AstObject *this, AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astDump
-
-* Purpose:
-* Write an Object to a Channel.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "object.h"
-* void astDump( AstObject *this, AstChannel *channel )
-
-* Class Membership:
-* Object method.
-
-* Description:
-* This function writes an Object to a Channel, appending it to any
-* previous Objects written to that Channel.
-
-* Parameters:
-* this
-* Pointer to the Object to be written.
-* channel
-* Pointer to the output Channel.
-*-
-*/
-
-/* Local Variables: */
- AstObjectVtab *vtab; /* Pointer to virtual function table */
- const char *sval; /* Pointer to string value */
- int helpful; /* Helpful to show value even if not set? */
- int idump; /* Loop counter for dump functions */
- int ival; /* Attribute value */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Write an initial "Begin" item, giving the class name of the Object
- being written. Also supply a pointer to the comment associated with
- the most recently-declared dump function in the Object's virtual
- function table. This should describe the class to which the Object
- belongs (assuming it has correctly declared its dump function). */
- astWriteBegin( channel, astGetClass( this ),
- this->vtab->dump_comment[ this->vtab->ndump - 1 ] );
-
-/* Write out instance variable information for the base Object
- class. Accompany these with appropriate comment strings, possibly
- depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* ID. */
-/* --- */
- set = TestID( this, status );
- sval = set ? GetID( this, status ) : astGetID( this );
-
-/* Don't show an un-set ID value if it is blank. */
- helpful = ( sval && *sval );
- astWriteString( channel, "ID", set, helpful, sval,
- "Object identification string" );
-
-/* Ident. */
-/* --- */
- set = TestIdent( this, status );
- sval = set ? GetIdent( this, status ) : astGetIdent( this );
-
-/* Don't show an un-set Ident value if it is blank. */
- helpful = ( sval && *sval );
- astWriteString( channel, "Ident", set, helpful, sval,
- "Permanent Object identification string" );
-
-/* UseDefs */
-/* ------- */
- set = TestUseDefs( this, status );
- ival = set ? GetUseDefs( this, status ) : astGetUseDefs( this );
- astWriteInt( channel, "UseDfs", set, 0, ival,
- ival ? "Default attribute values can be used" :
- "Default values cannot be used" );
-
-/* RefCnt. */
-/* ------- */
- LOCK_SMUTEX(this);
- ival = this->ref_count;
- UNLOCK_SMUTEX(this);
-
- astWriteInt( channel, "RefCnt", 0, 0, ival,
- "Count of active Object pointers" );
-
-
-/* Nobj. */
-/* ----- */
- vtab = this->vtab;
- astWriteInt( channel, "Nobj", 0, 0, vtab->nobject,
- "Count of active Objects in same class" );
-
-/* Terminate the information above with an "IsA" item for the base
- Object class. */
- astWriteIsA( channel, "Object", "AST Object" );
-
-/* Now loop to perform the same operation for each additional class
- from which the Object inherits (the Object class itself does not
- declare a dump function). Invoke the dump function for each class
- in turn, working down the class hierarchy, to write out instance
- variable information for that class. */
- for ( idump = 0; idump < this->vtab->ndump; idump++ ) {
- ( *this->vtab->dump[ idump ] )( this, channel, status );
-
-/* Terminate the output from all except the final dump function with
- an appropriate "IsA" item describing the class whose data have just
- been written. */
- if ( idump != ( this->vtab->ndump - 1 ) ) {
- astWriteIsA( channel, this->vtab->dump_class[ idump ],
- this->vtab->dump_comment[ idump ] );
- }
-
-/* Quit looping if an error occurs. */
- if ( !astOK ) break;
- }
-
-/* Terminate the output from the final dump function with an "End"
- item to match the initial "Begin" item. */
- astWriteEnd( channel, astGetClass( this ) );
-}
-
-static void EmptyObjectCache( int *status ){
-/*
-* Name:
-* EmptyObjectCache
-
-* Purpose:
-* Free all memory blocks currently on the free list of any class.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* EmptyObjectCache( int *status )
-
-* Class Membership:
-* Object member function.
-
-* Description:
-* This function empties the cache of Object memory by freeing all
-* memory blocks on the free_list of all classes.
-
-* Parameters:
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function attempts to execute even if an error has occurred.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Thread-specific global data */
- int iblock; /* Index of next entry in free list */
- int itab; /* Index of next virtual function table */
- AstObjectVtab *vtab; /* Pointer to next virtual function table */
-
-/* Get a pointer to Thread-specific global data. */
- astGET_GLOBALS(NULL);
-
-/* Loop round all the virtual function tables which are known about. */
- for( itab = 0; itab < nvtab; itab++ ) {
- vtab = known_vtabs[ itab ];
-
-/* Free all memory blocks stored on the free list for this class. */
- for( iblock = 0; iblock < vtab->nfree; iblock++ ) {
- (vtab->free_list)[ iblock ] = astFree( (vtab->free_list)[ iblock ] );
- }
-
-/* Free the memory used to hold the free list, and indicate it has zero
- length. */
- vtab->free_list = astFree( vtab->free_list );
- vtab->nfree = 0;
- }
-}
-
-static int Equal( AstObject *this, AstObject *that, int *status ){
-/*
-*+
-* Name:
-* astEqual
-
-* Purpose:
-* Check equality of two AST Objects.
-
-* Type:
-* Public (but undocumented) function.
-
-* Synopsis:
-* #include "object.h"
-* int astEqual( AstObject *this, AstObject *this )
-
-* Class Membership:
-* Object virtual function.
-
-* Description:
-* This function returns non-zero if the two pointers identify
-* equivalent objects.
-
-* Parameters:
-* this
-* Pointer to the first Object.
-* that
-* Pointer to the second Object.
-
-* Returned Value:
-* Non-zero if the objects are equivalent.
-
-* Notes:
-* - This function is available in the public interface even though it is
-* documented as protected. This is because it is difficult to document
-* precisely which aspects of two Objects must be equal in order for this
-* function to return a non-zero value. Each class of Object supplies
-* its own Equal method that tests which-ever attributes the class
-* considers to be significiant.
-* - The implementation of this function provided by the base Object
-* class simply compares the class names and the structure size.
-* Sub-classes should override this method to provide more appropriate tests.
-* - Zero is returned if an error has already occurred, or if
-* this function should fail for any reason.
-
-*-
-*/
-
-/* Local Variables: */
- int result;
-
-/* Check inherited status */
- if( !astOK ) return 0;
-
-/* Objects are equivalent if they are the same object. */
- if( this == that ) {
- result = 1;
-
-/* Otherwise, check the structure size and class names */
- } else {
- result = ( this->size == that->size &&
- !strcmp( astGetClass( this ), astGetClass( that ) ) );
- }
-
- return result;
-}
-
-static const char *Get( AstObject *this, const char *attrib, int *status ) {
-/*
-* Name:
-* Get
-
-* Purpose:
-* Get the value of a specified attribute for an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* const char *Get( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Object member function.
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for an Object, formatted as a character string. It is
-* mainly a wrap-up used internally for invoking the astGetAttrib
-* method. It converts the attribute name to lower case and removes
-* white space before invoking the method. This saves derived
-* classes that over-ride the astGetAttrib method from having to do
-* this themselves.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This may contain mixed
-* case and white space, but should not be composed entirely of
-* white space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the Object, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the Object. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- char *buff; /* Pointer to local string buffer */
- const char *result; /* Pointer value to return */
- int i; /* Loop counter for characters */
- int j; /* Non-blank character count */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Allocate a local buffer long enough to hold the attribute name
- string. */
- buff = astMalloc( strlen( attrib ) + (size_t) 1 );
- if ( astOK ) {
-
-/* Copy the attribute name characters into the buffer, omitting all
- white space and converting to lower case. */
- for ( i = j = 0; attrib[ i ]; i++ ) {
- if ( !isspace( attrib[ i ] ) ) buff[ j++ ] = tolower( attrib[ i ] );
- }
-
-/* Terminate the copied string. */
- buff[ j ] = '\0';
-
-/* If no characters were copied, the attribute name was blank, so
- report an error. */
- if ( !j ) {
- if( astOK ) astError( AST__BADAT, "astGet(%s): A blank attribute "
- "name was given.", status, astGetClass( this ) );
-
-/* Of OK, invoke astGetAttrib to obtain a pointer to the attribute
- value formatted as a character string. */
- } else {
- result = astGetAttrib( this, buff );
-
-/* If required, strip out graphical escape sequences. */
- if( !astEscapes( -1 ) ) result = astStripEscapes( result );
- }
- }
-
-/* Free the local string buffer. */
- buff = astFree( buff );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetAttrib( AstObject *this, const char *attrib, int *status ) {
-/*
-*+
-* Name:
-* astGetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for an Object.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "object.h"
-* const char *astGetAttrib( AstObject *this, const char *attrib )
-
-* Class Membership:
-* Object method.
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for an Object, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the Object, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the Object. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Thread-specific global data */
- const char *result; /* Pointer value to return */
- int nobject; /* Nobject attribute value */
- int objsize; /* ObjSize attribute value */
- int ref_count; /* RefCount attribute value */
- int usedefs; /* UseDefs attribute value */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to Thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null-terminated string in an
- appropriate format. Set "result" to point at the result string. */
-
-/* Class. */
-/* ------ */
- if ( !strcmp( attrib, "class" ) ) {
- result = astGetClass( this );
-
-/* ID. */
-/* --- */
- } else if ( !strcmp( attrib, "id" ) ) {
- result = astGetID( this );
-
-/* Ident. */
-/* ------ */
- } else if ( !strcmp( attrib, "ident" ) ) {
- result = astGetIdent( this );
-
-/* UseDefs */
-/* ------- */
- } else if ( !strcmp( attrib, "usedefs" ) ) {
- usedefs = astGetUseDefs( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", usedefs );
- result = getattrib_buff;
- }
-
-/* Nobject. */
-/* -------- */
- } else if ( !strcmp( attrib, "nobject" ) ) {
- nobject = astGetNobject( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", nobject );
- result = getattrib_buff;
- }
-
-/* ObjSize */
-/* ------- */
- } else if ( !strcmp( attrib, "objsize" ) ) {
- objsize = astGetObjSize( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", objsize );
- result = getattrib_buff;
- }
-
-/* RefCount. */
-/* --------- */
- } else if ( !strcmp( attrib, "refcount" ) ) {
- ref_count = astGetRefCount( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ref_count );
- result = getattrib_buff;
- }
-
-/* If the attribute name was not recognised, then report an error. */
- } else if( astOK ){
- astError( AST__BADAT, "astGet: The %s given does not have an attribute "
- "called \"%s\".", status, astGetClass( this ), attrib );
- }
-
-/* Return the result. */
- return result;
-}
-
-const char *astGetClass_( const AstObject *this, int *status ) {
-/*
-*+
-* Name:
-* astGetClass
-
-* Purpose:
-* Obtain the value of the Class attribute for an Object.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "object.h"
-* const char *astGetClass( const AstObject *this )
-
-* Class Membership:
-* Object method.
-
-* Description:
-* This function returns a pointer to the Class string for an
-* Object. This contains the name of the class which created the
-* Object.
-
-* Parameters:
-* this
-* Pointer to the Object.
-
-* Returned Value:
-* Pointer to a string containing the class name.
-
-* Notes:
-* - This function does not check the global error status before
-* executing. This is to allow it to be used to obtain class names
-* for inclusion in error messages.
-* - A pointer to an explanatory string will be returned if this
-* function is given a pointer which does not identify an Object.
-*-
-*/
-
-/* Local Variables: */
- const char *name; /* Pointer to returned string */
-
-/* First check if the Object pointer supplied is NULL, and set the
- returned pointer accordingly. */
- if ( !this ) {
- name = "<NULL>";
-
-/* Also check if the supposed Object has the correct "magic number" in
- its check field. If not, it is not an Object. */
- } else if ( this->check != Magic( this, this->size, status ) ) {
- name = "<unknown>";
-
-/* If OK, obtain a pointer to the class name from the Object's virtual
- function table. */
- } else {
- name = this->vtab->class;
- }
-
-/* Return the result. */
- return name;
-}
-
-int astGetNobject_( const AstObject *this, int *status ) {
-/*
-*+
-* Name:
-* astGetNobject
-
-* Purpose:
-* Obtain the value of the Nobject attribute for an Object.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "object.h"
-* int astGetNobject( const AstObject *this )
-
-* Class Membership:
-* Object method.
-
-* Description:
-* This function returns the value of the Nobject attribute for an
-* Object. This is a count of the number of active Objects in the
-* same class as the Object supplied. This count does not include
-* Objects in derived classes.
-
-* Parameters:
-* this
-* Pointer to the Object.
-
-* Returned Value:
-* The number of active Objects.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Return the active object count. */
- return this->vtab->nobject;
-}
-
-static int GetObjSize( AstObject *this, int *status ) {
-/*
-*+
-* Name:
-* astGetObjSize
-
-* Purpose:
-* Determine the in-memory size of the Object.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "object.h"
-* int astGetObjSize( AstObject *this )
-
-* Class Membership:
-* Object method.
-
-* Description:
-* This function returns the in-memory size of an Object.
-
-* Parameters:
-* this
-* Pointer to the Object.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Return the object size. */
- return this->size;
-}
-
-int astGetRefCount_( AstObject *this, int *status ) {
-/*
-*+
-* Name:
-* astGetRefCount
-
-* Purpose:
-* Obtain the value of the RefCount attribute for an Object.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "object.h"
-* int astGetRefCount( const AstObject *this )
-
-* Class Membership:
-* Object method.
-
-* Description:
-* This function returns the value of the read-only RefCount
-* attribute for an Object. This is a "reference count" of the
-* number of active pointers to it, as accounted for by astClone
-* and astAnnul (plus the pointer issued when it was created). If
-* the reference count for an Object falls to zero when astAnnul is
-* invoked, the object will be deleted.
-
-* Parameters:
-* this
-* Pointer to the Object.
-
-* Returned Value:
-* The reference count.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables; */
- int result; /* Returned value */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Get a lock on the object's secondary mutex. This mutex guards access
- to the "ref_count" and "locker" components of the AstObject structure. */
- LOCK_SMUTEX(this);
-
-/* Get the reference count. */
- result = this->ref_count;
-
-/* Unlock the object's secondary mutex. */
- UNLOCK_SMUTEX(this);
-
-/* Return the result. */
- return result;
-}
-
-/*
-*++
-* Name:
-c astGet<X>
-f AST_GET<X>
-
-* Purpose:
-* Get an attribute value for an Object.
-
-* Type:
-* Public functions.
-
-* Synopsis:
-c #include "object.h"
-c <X>type astGet<X>( AstObject *this, const char *attrib )
-f RESULT = AST_GET<X>( THIS, ATTRIB, STATUS )
-
-* Class Membership:
-* Object methods.
-
-* Description:
-* This is a family of functions which return a specified attribute
-* value for an Object using one of several different data
-* types. The type is selected by replacing <X> in the function name
-c by C, D, F, I or L, to obtain a result in const char* (i.e. string),
-c double, float, int, or long format, respectively.
-f by C, D, I, L or R, to obtain a result in Character, Double
-f precision, Integer, Logical or Real format, respectively.
-*
-* If possible, the attribute value is converted to the type you
-* request. If conversion is not possible, an error will result.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Object.
-c attrib
-f ATTRIB = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing the name of
-c the attribute whose value is required.
-f A character string containing the name of the attribute whose
-f value is required.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astGet<X>()
-f AST_GET<X> = <X>type
-c The attribute value, in the data type corresponding to <X> (or,
-c in the case of astGetC, a pointer to a constant null-terminated
-c character string containing this value).
-f The attribute value, in the data type corresponding to <X>.
-
-* Applicability:
-* Object
-* These functions apply to all Objects.
-
-* Examples:
-c printf( "RefCount = %d\n", astGetI( z, "RefCount" ) );
-c Prints the RefCount attribute value for Object "z" as an int.
-c title = astGetC( axis, "Title" );
-c Obtains a pointer to a null-terminated character string containing
-c the Title attribute of Object "axis".
-f WRITE( *, '('' RefCount = '', A10 )' ) AST_GETC( Z, 'RefCount', STATUS )
-f Prints the RefCount attribute value for Object Z as a character
-f string.
-f NAXES = AST_GETI( FRAME, 'Naxes', STATUS )
-f Obtains the value of the Naxes attribute for Object FRAME as an
-f integer.
-
-* Notes:
-* - Attribute names are not case sensitive and may be surrounded
-* by white space.
-* - An appropriate "null" value will be returned if this function
-c is invoked with the AST error status set, or if it should
-f is invoked with STATUS set to an error value, or if it should
-* fail for any reason. This null value is zero for numeric
-c values and NULL for pointer values.
-f values, .FALSE. for logical values, and blank for character values.
-f - Numerical attribute values of zero translate to logical value
-f .FALSE. and all other numerical values translate to .TRUE..
-c - The pointer returned by astGetC is guaranteed to remain valid
-c and the string to which it points will not be over-written for a
-c total of 50 successive invocations of this function. After this,
-c the memory containing the string may be re-used, so a copy of
-c the string should be made if it is needed for longer than this.
-*--
-*/
-
-/* Define a macro that expands to implement the astGetX_ member
- functions required. The arguments to this macro are:
-
- code
- The character that appears at the end of the function name.
- type
- The C type of the function return value.
- format
- A quoted string containing a astSscanf format specifier that
- will read the attribute value into a variable of the required
- data type. This format should transfer 1 astSscanf value.
-*/
-#define MAKE_GETX(code,type,format) \
-type astGet##code##_( AstObject *this, const char *attrib, int *status ) { \
-\
-/* Local Variables: */ \
- const char *str; /* Pointer to string attribute value */ \
- int nc; /* Number of characters read from string */ \
- int nval; /* Number of values read from string */ \
- type result; /* Value to return */ \
- type value; /* Converted value */ \
-\
-/* Initialise. */ \
- result = (type) 0; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* Obtain the attribute value as a string. */ \
- str = Get( this, attrib, status ); \
- if ( astOK ) { \
-\
-/* Read the value from the string, ignoring surrounding white \
- space. */ \
- nc = 0; \
- nval = astSscanf( str, " " format " %n", &value, &nc ); \
-\
-/* Check that the number of values read was 1 and that all the \
- string's characters were consumed. If so, use the result. */ \
- if ( ( nval == 1 ) && ( nc >= (int) strlen( str ) ) ) { \
- result = value; \
-\
-/* If the read was unsuccessful, report an error. */ \
- } else if( astOK ) { \
- astError( AST__ATGER, "astGet" #code "(%s): The attribute " \
- "value \"%s=%s\" cannot be read using the requested data " \
- "type.", status,astGetClass( this ), attrib, str ); \
- } \
- } \
-\
-/* Return the result. */ \
- return result; \
-}
-
-/* Use this macro to create all the GetX_ private member functions,
- except SetC (which is handled separately). */
-MAKE_GETX(D,double,"%lf")
-MAKE_GETX(F,float,"%f")
-MAKE_GETX(I,int,"%d")
-MAKE_GETX(L,long,"%ld")
-
-/* Handle GetC separately because memory must be allocated to hold the
- returned character values. */
-const char *astGetC_( AstObject *this, const char *attrib, int *status ) {
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Thread-specific global data */
- const char *result; /* Pointer value to return */
- const char *value; /* Pointer to attribute value */
- int i; /* Loop count */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to Thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* If the "strings" array has not been initialised, fill it with
- NULL pointers. */
- if ( !astgetc_init ) {
- astgetc_init = 1;
- for ( i = 0; i < AST__ASTGETC_MAX_STRINGS; i++ ) astgetc_strings[ i ] = NULL;
- }
-
-/* Obtain a pointer to the required attribute value, formatted as a
- character string. */
- value = Get( this, attrib, status );
-
-/* If OK, store a copy of the resulting string in dynamically
- allocated memory, putting a pointer to the copy into the next
- element of the "astgetc_strings" array. (This process also de-allocates
- any previously allocated memory pointed at by this "strings"
- element, so the earlier string is effectively replaced by the new
- one.) */
- if ( astOK ) {
-
- astBeginPM;
- astgetc_strings[ astgetc_istr ] = astStore( astgetc_strings[ astgetc_istr ],
- value, strlen( value ) + (size_t) 1 );
- astEndPM;
-
-/* If OK, return a pointer to the copy and increment "astgetc_istr" to use the
- next element of "astgetc_strings" on the next invocation. Recycle
- "astgetc_istr" to zero when all elements have been used. */
- if ( astOK ) {
- result = astgetc_strings[ astgetc_istr++ ];
- if ( astgetc_istr == ( AST__ASTGETC_MAX_STRINGS - 1 ) ) astgetc_istr = 0;
- }
- }
-
-/* Return the result. */
- return result;
-
-}
-
-static unsigned long Magic( const AstObject *this, size_t size, int *status ) {
-/*
-* Name:
-* Magic
-
-* Purpose:
-* Generate a "magic number" for an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* unsigned long Magic( const AstObject *this, size_t size, int *status )
-
-* Class Membership:
-* Object member function.
-
-* Description:
-* This function generates a "magic number" which is a function of an Object
-* pointer (address) and an Object size. This number may be stored in an
-* Object to allow it to be recognised as a valid Object by other routines
-* and to provide security against argument passing errors, etc.
-
-* Parameters:
-* this
-* Pointer to an Object.
-* size
-* The Object size.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The magic number.
-
-* Notes:
-* - This function does not perform any error checking.
-*/
-
-/* Form the bit-wise exclusive OR between the Object address and the Object
- size, then add 2 and invert the bits. Return the result as an unsigned
- long integer. */
- return ~( ( ( (unsigned long) this ) ^ ( (unsigned long) size ) ) +
- ( (unsigned long) 2 ) );
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this, int mode, int extra,
- AstObject **fail, int *status ) {
-/*
-*+
-* Name:
-* astManageLock
-
-* Purpose:
-* Manage the thread lock on an Object.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "object.h"
-* int astManageLock( AstObject *this, int mode, int extra,
-* AstObject **fail )
-
-* Class Membership:
-* Object method.
-
-* Description:
-* This function manages the thread lock on the supplied Object. The
-* lock can be locked, unlocked or checked by this function as
-* deteremined by parameter "mode". See astLock for details of the way
-* these locks are used.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* mode
-* An integer flag indicating what the function should do:
-*
-* AST__LOCK: Lock the Object for exclusive use by the calling
-* thread. The "extra" value indicates what should be done if the
-* Object is already locked (wait or report an error - see astLock).
-*
-* AST__UNLOCK: Unlock the Object for use by other threads.
-*
-* AST__CHECKLOCK: Check that the object is locked for use by the
-* calling thread.
-* extra
-* Extra mode-specific information.
-* fail
-* If a non-zero function value is returned, a pointer to the
-* Object that caused the failure is returned at "*fail". This may
-* be "this" or it may be an Object contained within "this". Note,
-* the Object's reference count is not incremented, and so the
-* returned pointer should not be annulled. A NULL pointer is
-* returned if this function returns a value of zero.
-
-* Returned Value:
-* A status value:
-* 0 - Success.
-* 1 - Could not lock or unlock the object because it was already
-* locked by another thread.
-* 2 - Failed to lock a POSIX mutex
-* 3 - Failed to unlock a POSIX mutex
-* 4 - Bad "mode" value supplied.
-* 5 - Check failed - object is locked by a different thread
-* 6 - Check failed - object is unlocked
-*
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Thread-specific global data */
- int result; /* Returned value */
-
-/* Initialise */
- result = 0;
- if( fail ) *fail = NULL;
-
-/* Check the supplied point is not NULL. */
- if( ! this ) return result;
-
-/* Get a pointer to Thread-specific global data. */
- astGET_GLOBALS(NULL);
-
-/* Get a lock on the object's secondary mutex. This gives us exclusive
- access to the "locker" (and "ref_count") component in the AstObject
- structure. All other components in the structure are guarded by the
- primary mutex (this->mutex1). */
- if( LOCK_SMUTEX(this) ) {
- result = 2;
-
-/* If the secondary mutex was locked succesfully, first deal with cases
- where the caller wants to lock the Object for exclusive use by the
- calling thread. */
- } else if( mode == AST__LOCK ) {
-
-/* If the Object is not currently locked, lock the Object primary mutex
- and record the identity of the calling thread in the Object. */
- if( this->locker == -1 ) {
- if( LOCK_PMUTEX(this) ) result = 2;
- this->locker = AST__THREAD_ID;
- this->globals = AST__GLOBALS;
- ChangeThreadVtab( this, status );
-
-/* If the Object is already locked by the calling thread, do nothing. */
- } else if( this->locker == AST__THREAD_ID ) {
-
-/* If the object is locked by a different thread, and the caller is
- willing to wait, attempt to lock the Object primary mutex. This will
- cause the calling thread to block until the Object is release by the
- thread that currently has it locked. Then store the identity of the
- calling thread (the new lock owner). We first need to release the
- secondary mutex so that the other thread can modify the "locker"
- component in the AstObject structure when it releases the Object
- (using this function). We then re-lock the secondary mutex so this
- thread can change the "locker" component safely. */
- } else if( extra ) {
- if( UNLOCK_SMUTEX(this) ) {
- result = 3;
- } else if( LOCK_PMUTEX(this) ) {
- result = 2;
- } else if( LOCK_SMUTEX(this) ) {
- result = 2;
- }
- this->locker = AST__THREAD_ID;
- this->globals = AST__GLOBALS;
- ChangeThreadVtab( this, status );
-
-/* If the caller does not want to wait until the Object is available,
- return a status of 1. */
- } else {
- result = 1;
- }
-
-/* Unlock the Object for use by other threads. */
- } else if( mode == AST__UNLOCK ) {
-
-/* Do nothing if the Object is currently unlocked. */
- if( this->locker == -1 ) {
-
-/* If the object is currently locked by the calling thread, clear the
- identity of the thread that owns the lock and unlock the primary
- mutex. */
- } else if( this->locker == AST__THREAD_ID ) {
- this->locker = -1;
- this->globals = NULL;
- if( UNLOCK_PMUTEX(this) ) result = 3;
-
-/* Return an error status value if the Object is locked by another
- thread. */
- } else {
- result = 1;
- }
-
-/* Check the Object is locked by the calling thread. Return a status of 1 if
- not. */
- } else if( mode == AST__CHECKLOCK ) {
- if( this->locker == -1 ) {
- result = 6;
- } else if( this->locker != AST__THREAD_ID ) {
- result = 5;
- }
-
-/* Return a status of 4 for any other modes. */
- } else {
- result = 4;
- }
-
-/* Unlock the secondary mutex so that other threads can access the "locker"
- component in the Object to see if it is locked. */
- if( UNLOCK_SMUTEX(this) ) result = 3;
-
-/* If the operation failed, return a pointer to the failed object. */
- if( result && fail ) *fail = this;
-
-/* Return the status value */
- return result;
-}
-#endif
-
-void astSet_( void *this_void, const char *settings, int *status, ... ) {
-/*
-*++
-* Name:
-c astSet
-f AST_SET
-
-* Purpose:
-* Set attribute values for an Object.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "object.h"
-c void astSet( AstObject *this, const char *settings, ... )
-f CALL AST_SET( THIS, SETTINGS, STATUS )
-
-* Class Membership:
-* Object method.
-
-* Description:
-c This function assigns a set of attribute values to an Object,
-f This routine assigns a set of attribute values to an Object,
-* over-riding any previous values. The attributes and their new
-* values are specified via a character string, which should
-* contain a comma-separated list of the form:
-*
-* "attribute_1 = value_1, attribute_2 = value_2, ... "
-*
-* where "attribute_n" specifies an attribute name, and the value
-* to the right of each "=" sign should be a suitable textual
-* representation of the value to be assigned. This value will be
-* interpreted according to the attribute's data type.
-c
-c The string supplied may also contain "printf"-style format
-c specifiers, identified by "%" signs in the usual way. If
-c present, these will be substituted by values supplied as
-c additional optional arguments (using the normal "printf" rules)
-c before the string is used.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Object.
-c settings
-f SETTINGS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated character string containing a
-c comma-separated list of attribute settings in the form described
-c above.
-f A character string containing a comma-separated list of
-f attribute settings in the form described above.
-c ...
-c Optional additional arguments which supply values to be
-c substituted for any "printf"-style format specifiers that
-c appear in the "settings" string.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Applicability:
-* Object
-c This function applies to all Objects.
-f This routine applies to all Objects.
-
-* Examples:
-c astSet( map, "Report = 1, Zoom = 25.0" );
-c Sets the Report attribute for Object "map" to the value 1 and
-c the Zoom attribute to 25.0.
-c astSet( frame, "Label( %d ) =Offset along axis %d", axis, axis );
-c Sets the Label(axis) attribute for Object "frame" to a
-c suitable string, where the axis number is obtained from
-c "axis", a variable of type int.
-c astSet( frame, "Title =%s", mystring );
-c Sets the Title attribute for Object "frame" to the contents of
-c the string "mystring".
-f CALL AST_SET( MAP, 'Report = 1, Zoom = 25.0', STATUS )
-f Sets the Report attribute for Object MAP to the value 1 and
-f the Zoom attribute to 25.0.
-f CALL AST_SET( FRAME, 'Label( 1 ) =Offset from cluster axis', STATUS )
-f Sets the Label(1) attribute for Object FRAME to a suitable
-f string.
-
-* Notes:
-* - Attribute names are not case sensitive and may be surrounded
-* by white space.
-* - White space may also surround attribute values, where it will
-* generally be ignored (except for string-valued attributes where
-* it is significant and forms part of the value to be assigned).
-c - It is not possible to include a comma directly in the value
-c assigned to an attribute via the "settings" string. To achieve
-c this, you should use "%s" format and supply the value as a
-c separate additional argument to astSet (or use the astSetC
-c function instead).
-c - The same procedure may be adopted if "%" signs are to be included
-c and are not to be interpreted as format specifiers (alternatively,
-c the "printf" convention of writing "%%" may be used).
-f - It is not possible to include a comma in the value to be
-f assigned to an attribute using this routine. If such a value is
-f needed, then AST_SETC should be used instead.
-* - An error will result if an attempt is made to set a value for
-* a read-only attribute.
-*--
-
-* Implementation Notes:
-* - Because this function has a variable argument list, it is
-* invoked by a macro that evaluates to a function pointer (not a
-* function invocation) and no checking or casting of arguments is
-* performed before the function is invoked. Because of this, the
-* Object identifier is of type (void *) and is converted and
-* validated within the function itself.
-* - This implementation of astSet is designed to be used within AST,
-* and has an explicit status parameter. From outside AST, the astSet
-* macro will invoke the astSetId_ function which does not have an
-* status parameter.
-
-*--
-*/
-
-/* Local Variables: */
- AstObject *this; /* Pointer to the Object structure */
- va_list args; /* Variable argument list */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain and validate a pointer to the Object structure. */
- this = astCheckObject( this_void );
- if ( astOK ) {
-
-/* Obtain the variable argument list and pass all arguments to the
- astVSet method for interpretation. */
- va_start( args, status );
- astVSet( this, settings, NULL, args );
- va_end( args );
- }
-}
-
-static void SetAttrib( AstObject *this, const char *setting, int *status ) {
-/*
-*+
-* Name:
-* astSetAttrib
-
-* Purpose:
-* Set an attribute value for an Object.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "object.h"
-* void astSetAttrib( AstObject *this, const char *setting )
-
-* Class Membership:
-* Object method.
-
-* Description:
-* This function assigns an attribute value for an Object, the attribute and
-* its value being specified by means of a string of the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in lower
-* case with no white space present. The value to the right of the "="
-* should be a suitable textual representation of the value to be assigned
-* and this will be interpreted according to the attribute's data type.
-* White space surrounding the value is only significant for string
-* attributes.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* setting
-* Pointer to a null-terminated string specifying the new attribute
-* value.
-
-* Notes:
-* - The Object class does not have any writable attributes, so
-* this function merely reports an error. It is intended to be
-* extended by other class definitions.
-*-
-*/
-
-/* Local Variables: */
- int id; /* Offset of ID string */
- int ival; /* Integer attribute value */
- int len; /* Length of setting string */
- int nc; /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain the length of the setting string. */
- len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
- the setting string and extract the attribute value (or an offset to
- it in the case of string values). In each case, use the value set
- in "nc" to check that the entire string was matched. Once a value
- has been obtained, use the appropriate method to set it. */
-
-/* ID. */
-/* --- */
- if ( nc = 0, ( 0 == astSscanf( setting, "id=%n%*[^\n]%n", &id, &nc ) )
- && ( nc >= len ) ) {
- astSetID( this, setting + id );
-
-/* Ident. */
-/* ------ */
- } else if ( nc = 0, ( 0 == astSscanf( setting, "ident=%n%*[^\n]%n", &id, &nc ) )
- && ( nc >= len ) ) {
- astSetIdent( this, setting + id );
-
-/* UseDefs */
-/* ------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "usedefs= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetUseDefs( this, ival );
-
-/* Define a macro to see if the setting string matches any of the
- read-only attributes of this class and use this to report an error
- if it does. */
-#define MATCH(attrib) \
- ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
- ( nc >= len ) )
-
- } else if ( MATCH( "class" ) ||
- MATCH( "nobject" ) ||
- MATCH( "objsize" ) ||
- MATCH( "refcount" ) ) {
- astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.", status,
- setting, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Since no writable attributes are defined for the Object class, any
- attempt to set a value for anything else is also an error. */
- } else {
- astError( AST__BADAT, "astSet: The attribute setting \"%s\" is invalid "
- "for a %s.", status, setting, astGetClass( this ) );
- }
-
-/* Undefine macros local to this function. */
-#undef MATCH
-}
-
-void astSetCopy_( AstObjectVtab *vtab,
- void (* copy)( const AstObject *, AstObject *, int * ), int *status ) {
-/*
-*+
-* Name:
-* astSetCopy
-
-* Purpose:
-* Declare a copy constructor for an Object.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "object.h"
-* void astSetCopy( AstObjectVtab *vtab,
-* void (* copy)( const AstObject *, AstObject * ) )
-
-* Class Membership:
-* Object method.
-
-* Description:
-* This function is provided so that class definitions can declare a copy
-* constructor to be associated with an Object that is being constructed.
-* When a copy is later performed on the Object, the copy constructor of
-* each class to which the Object belongs will be invoked in turn (working
-* down the class hierarchy). The copy constructor is passed pointers to the
-* source and destination Objects. It should implement the copy and return
-* void.
-
-* Parameters:
-* vtab
-* Pointer to the Object's virtual function table, in which the copy
-* constructor's pointer is to be stored for future use.
-* copy
-* Pointer to the copy constructor function.
-
-* Notes:
-* - When an Object is copied, a byte-by-byte copy of its structure is
-* automatically made before any copy constructors are invoked. A copy
-* constructor need only be provided if this does not suffice (e.g. if the
-* structure contains pointers to other data).
-* - If a copy constructor is declared for a class, then a
-* destructor for that class must also be declared (using
-* astSetDelete) so that there is a one-to-one correspondence
-* between copy constructors and their associated destructors.
-* - Copy constructors should check the global error status in the normal
-* way and should set it (and report an error) if they fail.
-*-
-*/
-
-
-/* Check the global status. */
- if ( !astOK ) return;
-
-/* Indicate that subsequent memory allocations may never be freed (other
- than by any AST exit handler). */
- astBeginPM;
-
-/* Expand the array of copy constructor pointers in the virtual function table
- (if necessary) to accommodate the new one. */
- vtab->copy = astGrow( vtab->copy, vtab->ncopy + 1,
- sizeof( void (*)( const AstObject *, AstObject * ) ) );
-
-/* If OK, store the new function pointer and increment the count of copy
- constructors. */
- if ( astOK ) {
- vtab->copy[ vtab->ncopy++ ] = copy;
- }
-
-/* Mark the end of the section in which memory allocations may never be freed
- (other than by any AST exit handler). */
- astEndPM;
-
-}
-
-void astSetDelete_( AstObjectVtab *vtab, void (* delete)( AstObject *, int * ), int *status ) {
-/*
-*+
-* Name:
-* astSetDelete
-
-* Purpose:
-* Declare a destructor for an Object.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "object.h"
-* void astSetDelete( AstObjectVtab *vtab, void (* delete)( AstObject * ) )
-
-* Class Membership:
-* Object method.
-
-* Description:
-* This function is provided so that class definitions can declare a
-* destructor to be associated with an Object. When the Object is later
-* deleted, the destructor declared by each class to which the Object
-* belongs will be invoked in turn (working up the class hierarchy). The
-* destructor is passed a pointer to the Object. It should free any
-* resources (e.g. memory) associated with it and return void. It should
-* not free the memory containing the Object itself.
-
-* Parameters:
-* vtab
-* Pointer to the Object's virtual function table, in which the
-* destructor's pointer is to be stored for future use.
-* delete
-* Pointer to the destructor function.
-
-* Notes:
-* - A destructor need not be declared for a class if there are no
-* resources to free.
-* - If a destructor is declared for a class, then a copy
-* constructor for that class must also be declared (using
-* astSetCopy) so that there is a one-to-one correspondence between
-* copy constructors and their associated destructors.
-* - A destructor function should generally attempt to execute even
-* if the global error status is set on entry, but should not
-* report further errors in that case (errors should be reported
-* normally if status is not set on entry).
-*-
-*/
-
-
-/* Check the global status. */
- if ( !astOK ) return;
-
-/* Indicate that subsequent memory allocations may never be freed (other
- than by any AST exit handler). */
- astBeginPM;
-
-/* Expand the array of destructor pointers in the virtual function table (if
- necessary) to accommodate the new one. */
- vtab->delete = astGrow( vtab->delete, vtab->ndelete + 1,
- sizeof( void (*)( AstObject * ) ) );
-
-/* If OK, store the new function pointer and increment the count of
- destructors. */
- if ( astOK ) {
- vtab->delete[ vtab->ndelete++ ] = delete;
- }
-
-/* Mark the end of the section in which memory allocations may never be freed
- (other than by any AST exit handler). */
- astEndPM;
-
-}
-
-void astSetDump_( AstObjectVtab *vtab,
- void (* dump)( AstObject *, AstChannel *, int * ),
- const char *class, const char *comment, int *status ) {
-/*
-*+
-* Name:
-* astSetDump
-
-* Purpose:
-* Declare a dump function for an Object.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "object.h"
-* void astSetDump( AstObjectVtab *vtab,
-* void (* dump)( AstObject *, AstChannel * ),
-* const char *class, const char *comment )
-
-* Class Membership:
-* Object method.
-
-* Description:
-* This function is provided so that class definitions can declare
-* a dump function to be associated with an Object that is being
-* constructed. When the astWrite (or astShow) method is later
-* used to write the Object to a Channel, the dump function of each
-* class to which the Object belongs will be invoked in turn
-* (working down the class hierarchy). The dump function is passed
-* pointers to the Object and the output Channel. It should write
-* out any internal values (e.g. instance variables) for its class
-* that are to be kept (using the protected astWrite... methods of
-* the Channel) and return void.
-
-* Parameters:
-* vtab
-* Pointer to the Object's virtual function table, in which the
-* dump function's pointer is to be stored for future use.
-* dump
-* Pointer to the dump function.
-* class
-* Pointer to a constant null-terminated string (residing in
-* static memory) containing the name of the class that is
-* declaring the dump function.
-* comment
-* Pointer to a constant null-terminated string (residing in
-* static memory) containing a comment to associate with the
-* dump function. This should normally describe the purpose of
-* the class that is declaring the dump function.
-
-* Notes:
-* - Dump functions should check the global error status in the
-* normal way and should set it (and report an error) if they fail.
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Indicate that subsequent memory allocations may never be freed (other
- than by any AST exit handler). */
- astBeginPM;
-
-/* Expand the arrays of pointers to dump functions and related data in
- the virtual function table (if necessary) to accommodate the new
- one. */
- vtab->dump = astGrow( vtab->dump, vtab->ndump + 1,
- sizeof( void (*)( AstObject *, AstChannel * ) ) );
- vtab->dump_class = astGrow( vtab->dump_class, vtab->ndump + 1,
- sizeof( char * ) );
- vtab->dump_comment = astGrow( vtab->dump_comment, vtab->ndump + 1,
- sizeof( char * ) );
-
-/* If OK, store the new pointers (to the dump function, class name and
- comment) and increment the count of dump functions. */
- if ( astOK ) {
- vtab->dump[ vtab->ndump ] = dump;
- vtab->dump_class[ vtab->ndump ] = class;
- vtab->dump_comment[ vtab->ndump ] = comment;
- vtab->ndump++;
- }
-
-/* Mark the end of the section in which memory allocations may never be
- freed (other than by any AST exit handler). */
- astEndPM;
-}
-
-void astSetVtab_( AstObject *this, AstObjectVtab *vtab, int *status ) {
-/*
-*+
-* Name:
-* astSetVtab
-
-* Purpose:
-* Change the virtual function table associated with an Object.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "object.h"
-* void astSetVtab( AstObject *this, AstObjectVtab *vtab )
-
-* Class Membership:
-* Object method.
-
-* Description:
-* This function changes the virtual function table associated with an
-* Object. This may be needed, for instance, if a super-class
-* initialises a parent class structure with a NULL vtab, causing the
-* vtab of the parent class to be used instead of the super-class.
-* Whilst the super-class object is being constructed its inherited methods
-* will be determined by the parent class. Once the super-class object
-* has been constructed, it can invoke this fuction in order to
-* set the vtab to the super-class vtab, thus causing the method
-* implementations provided by the super-cvlass to be used.
-
-* Parameters:
-* this
-* Pointer to the Object to be modified.
-* vtab
-* Pointer to the virtual function table to store in the Object.
-*-
-*/
- if( this ) this->vtab = vtab;
-}
-
-static int Same( AstObject *this, AstObject *that, int *status ) {
-/*
-*++
-* Name:
-c astSame
-f AST_SAME
-
-* Purpose:
-* Test if two AST pointers refer to the same Object.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "object.h"
-c int astSame( AstObject *this, AstObject *that )
-f RESULT = AST_SAME( THIS, THAT, STATUS )
-
-* Class Membership:
-* Object method.
-
-* Description:
-c This function returns a boolean result (0 or 1) to indicate
-f This function returns a logical result to indicate
-* whether two pointers refer to the same Object.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the first Object.
-c that
-f THAT = INTEGER (Given)
-* Pointer to the second Object.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astSame()
-c One if the two pointers refer to the same Object, otherwise zero.
-f AST_SAME = LOGICAL
-f .TRUE. if the two pointers refer to the same Object, otherwise
-f .FALSE.
-
-* Applicability:
-* Object
-c This function applies to all Objects.
-f This routine applies to all Objects.
-
-* Notes:
-* - Two independent Objects that happen to be identical are not
-* considered to be the same Object by this function.
-c - A value of zero will be returned if this function is invoked
-c with the AST error status set, or if it should fail for any reason.
-f - A value of .FALSE. will be returned if this function is invoked
-f with STATUS set to an error value, or if it should fail for any reason.
-*--
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Return the result. */
- return ( this == that ) ? 1 : 0;
-}
-
-/*
-*++
-* Name:
-c astSet<X>
-f AST_SET<X>
-
-* Purpose:
-* Set an attribute value for an Object.
-
-* Type:
-* Public functions.
-
-* Synopsis:
-c #include "object.h"
-c void astSet<X>( AstObject *this, const char *attrib, <X>type value )
-f CALL AST_SET<X>( THIS, ATTRIB, VALUE, STATUS )
-
-* Class Membership:
-* Object methods.
-
-* Description:
-c This is a family of functions which set a specified attribute
-f This is a family of routines which set a specified attribute
-* value for an Object using one of several different data
-c types. The type is selected by replacing <X> in the function name
-f types. The type is selected by replacing <X> in the routine name
-c by C, D, F, I or L, to supply a value in const char* (i.e. string),
-c double, float, int, or long format, respectively.
-f by C, D, I, L or R, to supply a value in Character, Double
-f precision, Integer, Logical or Real format, respectively.
-*
-* If possible, the value you supply is converted to the type of
-* the attribute. If conversion is not possible, an error will
-* result.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Object.
-c attrib
-f ATTRIB = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated character string containing the
-c name of the attribute whose value is to be set.
-f A character string containing the name of the attribute whose
-f value is to be set.
-c value
-f VALUE = <X>type (Given)
-c The value to be set for the attribute, in the data type corresponding
-c to <X> (or, in the case of astSetC, a pointer to a null-terminated
-c character string containing this value).
-f The value to be set for the attribute, in the data type corresponding
-f to <X>.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Applicability:
-* Object
-c These functions apply to all Objects.
-f These routines apply to all Objects.
-
-* Examples:
-c astSetI( frame, "Preserve", 1 );
-c Sets the Preserve attribute value for Object "frame" to 1.
-c astSetC( plot, "Format(1)", "%.2g" );
-c Sets the Format(1) attribute value for Object "plot" to the
-c character string "%.2g".
-f CALL AST_SETC( PLOT, 'Title', CVALUE, STATUS )
-f Sets the Title attribute value for Object PLOT to the contents
-f of the character variable CVALUE.
-f CALL AST_SETL( FRAME, 'Preserve', .TRUE., STATUS );
-f Sets the Preserve attribute value for Object FRAME to 1 (true).
-
-* Notes:
-* - Attribute names are not case sensitive and may be surrounded
-* by white space.
-f - The logical value .FALSE. will translate to a numerical attribute
-f value of zero and logical .TRUE. will translate to one.
-* - An error will result if an attempt is made to set a value for
-* a read-only attribute.
-*--
-*/
-
-/* Define a macro that expands to implement the astSetX_ member
- functions required. The arguments to this macro are:
-
- code
- The character that appears at the end of the function name.
- type
- The C type of the function "value" parameter.
- format
- A quoted string containing a sprintf format specifier that will
- format the supplied value as a character string. This format should
- consume 2 sprintf arguments: a field width and the value to be
- formatted.
- fmtlen
- The number of characters in the format specifier (above).
- fieldsz
- The value of the field width to be used by the format specifier.
-*/
-#define MAKE_SETX(code,type,format,fmtlen,fieldsz) \
-void astSet##code##_( AstObject *this, const char *attrib, type value, int *status ) { \
-\
-/* Local Variables: */ \
- char *setting; /* Pointer to attribute setting string */ \
- int len; /* Length of attribute name */ \
-\
-/* Check the global status. */ \
- if ( !astOK ) return; \
-\
-/* Obtain the length of the attribute name and allocate memory to hold \
- this name plus the format specifier to be appended to it. */ \
- len = (int) astChrLen( attrib ); \
- setting = astMalloc( (size_t) ( len + fmtlen + 2 ) ); \
-\
-/* Make a copy of the attribute name in the allocated memory. */ \
- if ( astOK ) { \
- (void) memcpy( setting, attrib, (size_t) len ); \
- setting[ len ] = 0; \
-\
-/* Append "=", followed by the format specifier, to construct a \
- suitable "setting" string for use by astSet. */ \
- (void) strcat( setting, "=" format ); \
-\
-/* Invoke astSet to set the attribute value. */ \
- astSet( this, setting, status, fieldsz, value ); \
- } \
-\
-/* Free the allocated memory. */ \
- setting = astFree( setting ); \
-}
-
-/* Use this macro to create all the SetX_ private member functions. */
-MAKE_SETX(D,double,"%.*g",4,DBL_DIG)
-MAKE_SETX(F,float,"%.*g",4,FLT_DIG)
-MAKE_SETX(I,int,"%.*d",4,1)
-MAKE_SETX(L,long,"%.*ld",5,1)
-
-
-/* The astSetC_ function is implemented separately so that commas can be
- handled. Since astSetC can only be used to set a single attribute
- value, we know that any commas in the supplied value are included
- within the attribuite value, rather than being used as delimiters
- between adjacent attribute settings. To avoid VSet using them as
- delimiters, they are replaced here by '\r' before calling astSet, and
- VSet then converts them back to commas. */
-
-void astSetC_( AstObject *this, const char *attrib, const char *value, int *status ) {
-
-/* Local Variables: */
- char *d; /* Pointer to next setting character */
- char *newv; /* Pointer to new attribute value string */
- char *setting; /* Pointer to attribute setting string */
- const char *c; /* Pointer to next value character */
- int len; /* Length of attribute name */
-
-/* Check the global status. */
- if ( !astOK ) return;
-
-/* Produce a copy of the supplied attribute value in which any commas
- are replaced by carriage returns ("\r"). */
- newv = astMalloc( (size_t)( strlen( value ) + 1 ) );
- if( newv ) {
- d = newv;
- c = value;
- while( *c ) {
- if( *c == ',' ) {
- *d = '\r';
- } else {
- *d = *c;
- }
- c++;
- d++;
- }
- *d = 0;
-
-/* Obtain the length of the attribute name and allocate memory to hold
- this name plus the format specifier to be appended to it. */
- len = (int) astChrLen( attrib );
- setting = astMalloc( (size_t) ( len + 5 ) );
-
-/* Make a copy of the attribute name in the allocated memory. */
- if ( astOK ) {
- (void) memcpy( setting, attrib, (size_t) len );
- setting[ len ] = 0;
-
-/* Append "=", followed by the format specifier, to construct a
- suitable "setting" string for use by astSet. */
- (void) strcat( setting, "=%*s" );
-
-/* Invoke astSet to set the attribute value. */
- astSet( this, setting, status, 0, newv );
- }
-
-/* Free the allocated memory. */
- setting = astFree( setting );
- }
- newv = astFree( newv );
-}
-
-static void Show( AstObject *this, int *status ) {
-/*
-*++
-* Name:
-c astShow
-f AST_SHOW
-
-* Purpose:
-* Display a textual representation of an Object on standard output.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "object.h"
-c void astShow( AstObject *this )
-f CALL AST_SHOW( THIS, STATUS )
-
-* Class Membership:
-* Object method.
-
-* Description:
-c This function displays a textual description of any AST Object
-f This routine displays a textual description of any AST Object
-* on standard output. It is provided primarily as an aid to
-* debugging.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Object to be displayed.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Applicability:
-* Object
-c This function applies to all Objects.
-f This routine applies to all Objects.
-*--
-*/
-
-/* Local Variables: */
- AstChannel *channel; /* Pointer to output Channel */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Create a Channel which will write to standard output. */
- channel = astChannel( NULL, NULL, "", status );
-
-/* Write the Object to the Channel. */
- astWrite( channel, this );
-
-/* Annul the Channel pointer. */
- channel = astAnnul( channel );
-}
-
-int astTest_( AstObject *this, const char *attrib, int *status ) {
-/*
-*++
-* Name:
-c astTest
-f AST_TEST
-
-* Purpose:
-* Test if an Object attribute value is set.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "object.h"
-c int astTest( AstObject *this, const char *attrib )
-f RESULT = AST_TEST( THIS, ATTRIB, STATUS )
-
-* Class Membership:
-* Object method.
-
-* Description:
-c This function returns a boolean result (0 or 1) to indicate
-f This function returns a logical result to indicate
-* whether a value has been explicitly set for one of an Object's
-* attributes.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Object.
-c attrib
-f ATTRIB = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated character string containing
-c the name of the attribute to be tested.
-f A character string containing the name of the attribute to be
-f tested.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astTest()
-c One if a value has previously been explicitly set for the attribute
-c (and hasn't been cleared), otherwise zero.
-f AST_TEST = LOGICAL
-f .TRUE. if a value has previously been explicitly set for the
-f attribute (and hasn't been cleared), otherwise .FALSE..
-
-* Applicability:
-* Object
-c This function applies to all Objects.
-f This routine applies to all Objects.
-
-* Notes:
-* - Attribute names are not case sensitive and may be surrounded
-* by white space.
-c - A value of zero will be returned if this function is invoked
-f - A value of .FALSE. will be returned if this function is invoked
-c with the AST error status set, or if it should fail for any reason.
-f with STATUS set to an error value, or if it should fail for any reason.
-c - A value of zero will also be returned if this function is used
-f - A value of .FALSE. will also be returned if this function is used
-* to test a read-only attribute, although no error will result.
-*--
-*/
-
-/* Local Variables: */
- char *buff; /* Pointer to character buffer */
- int i; /* Loop counter for characters */
- int j; /* Non-blank character count */
- int len; /* Length of attrib string */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain the length of the attrib string. */
- len = (int) strlen( attrib );
-
-/* Allocate memory and store a copy of the string. */
- buff = astStore( NULL, attrib, (size_t) ( len + 1 ) );
- if ( astOK ) {
-
-/* Remove white space and upper case characters. */
- for ( i = j = 0; buff[ i ]; i++ ) {
- if ( !isspace( buff[ i ] ) ) buff[ j++ ] = tolower( buff[ i ] );
- }
-
-/* Terminate the attribute name and pass it to astTestAttrib to test
- the attribute. */
- buff[ j ] = '\0';
- result = astTestAttrib( this, buff );
- }
-
-/* Free the memory allocated for the string buffer. */
- buff = astFree( buff );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static int TestAttrib( AstObject *this, const char *attrib, int *status ) {
-/*
-*+
-* Name:
-* astTestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for an Object.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "object.h"
-* int astTestAttrib( AstObject *this, const char *attrib )
-
-* Class Membership:
-* Object method.
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of an Object's attributes.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* ID. */
-/* --- */
- if ( !strcmp( attrib, "id" ) ) {
- result = astTestID( this );
-
-/* Ident. */
-/* ------ */
- } else if ( !strcmp( attrib, "ident" ) ) {
- result = astTestIdent( this );
-
-/* UseDefs */
-/* ------- */
- } else if ( !strcmp( attrib, "usedefs" ) ) {
- result = astTestUseDefs( this );
-
-/* Test if the attribute string matches any of the read-only
- attributes of this class. If it does, then return zero. */
- } else if ( !strcmp( attrib, "class" ) ||
- !strcmp( attrib, "nobject" ) ||
- !strcmp( attrib, "objsize" ) ||
- !strcmp( attrib, "refcount" ) ) {
- result = 0;
-
-/* Any attempt to test any other attribute is an error. */
- } else if( astOK ){
- astError( AST__BADAT, "astTest: The attribute name \"%s\" is invalid "
- "for a %s.", status, attrib, astGetClass( this ) );
- }
-
-/* Return the result, */
- return result;
-}
-
-int astTune_( const char *name, int value, int *status ) {
-/*
-*++
-* Name:
-c astTune
-f AST_TUNE
-
-* Purpose:
-* Set or get an AST global tuning parameter.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "object.h"
-c int astTune( const char *name, int value )
-f RESULT = AST_TUNE( NAME, VALUE, STATUS )
-
-* Class Membership:
-* Object function.
-
-* Description:
-* This function returns the current value of an AST global tuning
-* parameter, optionally storing a new value for the parameter.
-
-* Parameters:
-c name
-f NAME = CHARACTER * ( * ) (Given)
-* The name of the tuning parameter (case-insensitive).
-c value
-f VALUE = INTEGER (Given)
-* The new value for the tuning parameter. If this is AST__TUNULL,
-* the existing current value will be retained.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astTune()
-f AST_TUNE = INTEGER
-c The original value of the tuning parameter. A default value will
-* be returned if no value has been set for the parameter.
-
-* Tuning Parameters:
-* ObjectCaching
-* A boolean flag which indicates what should happen
-* to the memory occupied by an AST Object when the Object is deleted
-* (i.e. when its reference count falls to zero or it is deleted using
-c astDelete).
-f AST_DELETE).
-* If this is zero, the memory is simply freed using the systems "free"
-* function. If it is non-zero, the memory is not freed. Instead a
-* pointer to it is stored in a pool of such pointers, all of which
-* refer to allocated but currently unused blocks of memory. This allows
-* AST to speed up subsequent Object creation by re-using previously
-* allocated memory blocks rather than allocating new memory using the
-* systems malloc function. The default value for this parameter is
-* zero. Setting it to a non-zero value will result in Object memory
-* being cached in future. Setting it back to zero causes any memory
-* blocks currently in the pool to be freed. Note, this tuning parameter
-* only controls the caching of memory used to store AST Objects. To
-* cache other memory blocks allocated by AST, use MemoryCaching.
-* MemoryCaching
-* A boolean flag similar to ObjectCaching except
-* that it controls caching of all memory blocks of less than 300 bytes
-* allocated by AST (whether for internal or external use), not just
-* memory used to store AST Objects.
-
-* Notes:
-c - This function attempts to execute even if the AST error
-c status is set
-f - This routine attempts to execute even if STATUS is set to an
-f error value
-* on entry, although no further error report will be
-* made if it subsequently fails under these circumstances.
-* - All threads in a process share the same AST tuning parameters
-* values.
-*--
-*/
-
- int result = AST__TUNULL;
-
- if( name ) {
-
- if( astChrMatch( name, "ObjectCaching" ) ) {
- result = object_caching;
- if( value != AST__TUNULL ) {
- object_caching = value;
- if( !object_caching ) EmptyObjectCache( status );
- }
-
- } else if( astChrMatch( name, "MemoryCaching" ) ) {
- result = astMemCaching( value );
-
- } else if( astOK ) {
- astError( AST__TUNAM, "astTune: Unknown AST tuning parameter "
- "specified \"%s\".", status, name );
- }
-
- }
-
- return result;
-}
-
-static void VSet( AstObject *this, const char *settings, char **text,
- va_list args, int *status ) {
-/*
-*+
-* Name:
-* astVSet
-
-* Purpose:
-* Set values for an Object's attributes.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "object.h"
-* void astVSet( AstObject *this, const char *settings, char **text,
-* va_list args )
-
-* Class Membership:
-* Object method.
-
-* Description:
-* This function assigns a set of attribute values for an Object,
-* the attributes and their values being specified by means of a
-* string containing a comma-separated list of the form:
-*
-* "attribute1 = value1, attribute2 = value2, ... "
-*
-* Here, "attribute" specifies an attribute name and the value to
-* the right of each "=" sign should be a suitable textual
-* representation of the value to be assigned to that
-* attribute. This will be interpreted according to the attribute's
-* data type.
-*
-* The string supplied may also contain "printf"-style format
-* specifiers identified by a "%" sign in the usual way. If
-* present, these will be substituted by values supplied as
-* optional arguments (as a va_list variable argument list), using
-* the normal "printf" rules, before the string is used.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* settings
-* Pointer to a null-terminated string containing a
-* comma-separated list of attribute settings.
-* text
-* Pointer to a location at which to return a pointer to dynamic
-* memory holding a copy of the expanded setting string. This memory
-* should be freed using astFree when no longer needed. If a NULL
-* pointer is supplied, no string is created.
-* args
-* The variable argument list which contains values to be
-* substituted for any "printf"-style format specifiers that
-* appear in the "settings" string.
-
-* Notes:
-* - Attribute names are not case sensitive.
-* - White space may surround attribute names and will be ignored.
-* - White space may also surround attribute values where it will
-* be ignored (except for string-valued attributes where it is
-* significant and forms part of the value to be assigned).
-* - After this function has substituted values for "printf"-style
-* format specifiers it splits the "settings" string into
-* individual attribute settings which it passes one at a time to
-* the protected astSetAttrib method (after removal of white space
-* and conversion of attribute names to lower case). The
-* astSetAttrib method should therefore be extended by derived
-* classes which define new attributes, and this will allow the
-* astVSet (and astSet) methods to have access to those attributes.
-* - This function provides the same functionality as the astSet
-* public method but accepts a va_list variable argument list
-* instead of a variable number of arguments. It is provided for
-* use by functions in other class implementations which accept a
-* variable number of arguments and must therefore pass their
-* argument list to this method in va_list form.
-*-
-*/
-
-/* Local Constants: */
- const int min_buff_len = 1024; /* Minimum size of formatting buffer */
-#define ERRBUF_LEN 80
-
-/* Local Variables: */
- char errbuf[ ERRBUF_LEN ]; /* Buffer for system error message */
- char *errstat; /* Pointer to error message */
- char *assign; /* Pointer to assigment substring */
- char *assign_end; /* Pointer to null at end of assignment */
- char *buff1; /* Pointer to temporary string buffer */
- char *buff2; /* Pointer to temporary string buffer */
- char *buff3; /* Pointer to temporary string buffer */
- char *eq1; /* Pointer to 1st equals sign */
- int buff_len; /* Length of temporary buffer */
- int i; /* Loop counter for characters */
- int j; /* Offset for revised assignment character */
- int len; /* Length of settings string */
- int lo; /* Convert next character to lower case? */
- int nc; /* Number of vsprintf output characters */
- int stat; /* Value of errno after an error */
-
-/* Initialise */
- if( text ) *text = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain the length of the "settings" string and test it is not
- zero. If it is, there is nothing more to do. */
- len = (int) strlen( settings );
- if ( len != 0 ) {
-
-/* Allocate memory and store a copy of the string. */
- buff1 = astStore( NULL, settings, (size_t) ( len + 1 ) );
- if ( astOK ) {
-
-/* Convert each comma in the string into '\n'. This is to distinguish
- commas initially present from those introduced by the formatting to
- be performed below. We only do this if there is more than one equals
- sign in the setting string, since otherwise any commas are probably
- characters contained within a string attribute value. */
- eq1 = strchr( buff1, '=' );
- if( eq1 && strchr( eq1 + 1, '=' ) ) {
- for ( i = 0; i < len; i++ ) {
- if ( buff1[ i ] == ',' ) buff1[ i ] = '\n';
- }
- }
-
-/* Calculate a size for a further buffer twice the size of the first
- one. Ensure it is not less than a minimum size and then allocate
- this buffer. */
- buff_len = 2 * len;
- if ( buff_len < min_buff_len ) buff_len = min_buff_len;
- buff2 = astMalloc( (size_t) ( buff_len + 1 ) );
- if ( astOK ) {
-
-/* Use "vsprintf" to substitute values for any format specifiers in
- the "settings" string, writing the resulting string into the second
- buffer. */
- errno = 0;
- nc = vsprintf( buff2, buff1, args );
-
-/* Get a copy of the expanded string to return as the function value and
- convert newlines back to commas. */
- if( text ) {
- *text = astStore( NULL, buff2, nc + 1 );
- if( *text ) {
- for ( i = 0; i <= nc; i++ ) {
- if ( (*text)[ i ] == '\n' ) (*text)[ i ] = ',';
- }
- }
- }
-
-/* The possibilities for error detection are limited here, but check
- if an error value was returned and report an error. Include
- information from errno if it was set. */
- if ( nc < 0 ) {
- if( astOK ) {
- stat = errno;
-
- if( stat ) {
-#if HAVE_STRERROR_R
- strerror_r( stat, errbuf, ERRBUF_LEN );
- errstat = errbuf;
-#else
- errstat = strerror( stat );
-#endif
- } else {
- *errbuf = 0;
- errstat = errbuf;
- }
-
- astError( AST__ATSER, "astVSet(%s): Error formatting an "
- "attribute setting%s%s.", status, astGetClass( this ),
- stat? " - " : "", errstat );
- astError( AST__ATSER, "The setting string was \"%s\".", status,
- settings );
- }
-
-/* Also check that the result buffer did not overflow. If it did,
- memory will probably have been corrupted but this cannot be
- prevented with "vsprintf" (although we try and make the buffer
- large enough). Report the error and abort. */
- } else if ( nc > buff_len ) {
- if( astOK ) {
- astError( AST__ATSER, "astVSet(%s): Internal buffer overflow "
- "while formatting an attribute setting - the result "
- "exceeds %d characters.", status, astGetClass( this ),
- buff_len );
- astError( AST__ATSER, "The setting string was \"%s\".", status,
- settings );
- }
-
-/* If all is OK, loop to process each formatted attribute assignment
- (these are now separated by '\n' characters). */
- } else {
- assign = buff2;
- while ( assign ) {
-
-/* Change the '\n' at the end of each assignment to a null to
- terminate it. */
- if ( ( assign_end = strchr( assign, '\n' ) ) ) {
- *assign_end = '\0';
- }
-
-/* Before making the assignment, loop to remove white space and upper
- case characters from the attribute name. */
- lo = 1;
- for ( i = j = 0; assign[ i ]; i++ ) {
-
-/* Note when an '=' sign is encountered (this signals the end of the
- attribute name). */
- if ( assign[ i ] == '=' ) lo = 0;
-
-/* Before the '=' sign, convert all characters to lower case and move
- everything to the left to eliminate white space. Afer the '=' sign,
- copy all characters to their new location unchanged. astSetC replaces
- commas in the attribute value by '\r' characters. Reverse this now. */
- if ( !lo || !isspace( assign[ i ] ) ) {
- if( assign[ i ] == '\r' ) {
- assign[ j++ ] = ',';
- } else {
- assign[ j++ ] = ( lo ? tolower( assign[ i ] ) :
- assign[ i ] );
- }
- }
- }
-
-/* Terminate the revised assignment string and pass it to astSetAttrib
- to make the assignment (unless the string was all blank, in which
- case we ignore it). */
- assign[ j ] = '\0';
- if ( j ) {
-
-/* If there are no characters to the right of the equals sign append a
- space after the equals sign. Without this, a string such as "Title="
- would not be succesfully matched against the attribute name "Title"
- within SetAttrib. */
- if( assign[ j - 1 ] == '=' ) {
- buff3 = astStore( NULL, assign,
- (size_t) j + 2 );
- if ( astOK ) {
- buff3[ j ] = ' ';
- buff3[ j + 1 ] = '\0';
- astSetAttrib( this, buff3 );
- }
- buff3 = astFree( buff3 );
-
- } else {
- astSetAttrib( this, assign );
- }
- }
-
-/* Check for errors and abort if any assignment fails. Otherwise,
- process the next assignment substring. */
- if ( !astOK ) break;
- assign = assign_end ? assign_end + 1 : NULL;
- }
- }
- }
-
-/* Free the memory allocated for string buffers. */
- buff2 = astFree( buff2 );
- }
- buff1 = astFree( buff1 );
- }
-}
-#undef ERRBUF_LEN
-
-/* Attribute access functions. */
-/* --------------------------- */
-/*
-*att++
-* Name:
-* Class
-
-* Purpose:
-* Object class name.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Character string, read-only.
-
-* Description:
-* This attribute gives the name of the class to which an Object
-* belongs.
-
-* Applicability:
-* Object
-* All Objects have this attribute.
-*att--
-*/
-
-/*
-*att++
-* Name:
-* ID
-
-* Purpose:
-* Object identification string.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute contains a string which may be used to identify
-* the Object to which it is attached. There is no restriction on
-* the contents of this string, which is not used internally by the
-* AST library, and is simply returned without change when
-* required. The default value is an empty string.
-*
-* An identification string can be valuable when, for example,
-c several Objects have been stored in a file (using astWrite) and
-f several Objects have been stored in a file (using AST_WRITE) and
-c are later retrieved (using astRead). Consistent use of the ID
-f are later retrieved (using AST_READ). Consistent use of the ID
-* attribute allows the retrieved Objects to be identified without
-* depending simply on the order in which they were stored.
-*
-* This attribute may also be useful during debugging, to
-c distinguish similar Objects when using astShow to display them.
-f distinguish similar Objects when using AST_SHOW to display them.
-
-* Applicability:
-* Object
-* All Objects have this attribute.
-
-* Notes:
-* - Unlike most other attributes, the value of the ID attribute is
-* not transferred when an Object is copied. Instead, its value is
-* undefined (and therefore defaults to an empty string) in any
-* copy. However, it is retained in any external representation of
-c an Object produced by the astWrite function.
-f an Object produced by the AST_WRITE routine.
-*att--
-*/
-/* Clear the ID value by freeing the allocated memory and assigning a
- NULL pointer. */
-astMAKE_CLEAR(Object,ID,id,astFree( this->id ))
-
-/* If the ID value is not set, supply a default in the form of a
- pointer to the constant string "". */
-astMAKE_GET(Object,ID,const char *,NULL,( this->id ? this->id : "" ))
-
-/* Set an ID value by freeing any previously allocated memory,
- allocating new memory and storing the string. */
-astMAKE_SET(Object,ID,const char *,id,astStore( this->id, value,
- strlen( value ) + (size_t) 1 ))
-
-/* The ID value is set if the pointer to it is not NULL. */
-astMAKE_TEST(Object,ID,( this->id != NULL ))
-
-/*
-*att++
-* Name:
-* Ident
-
-* Purpose:
-* Permanent Object identification string.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute is like the ID attribute, in that it contains a
-* string which may be used to identify the Object to which it is
-* attached. The only difference between ID and Ident is that Ident
-* is transferred when an Object is copied, but ID is not.
-
-* Applicability:
-* Object
-* All Objects have this attribute.
-
-*att--
-*/
-/* Clear the Ident value by freeing the allocated memory and assigning a
- NULL pointer. */
-astMAKE_CLEAR(Object,Ident,ident,astFree( this->ident ))
-
-/* If the Ident value is not set, supply a default in the form of a
- pointer to the constant string "". */
-astMAKE_GET(Object,Ident,const char *,NULL,( this->ident ? this->ident : "" ))
-
-/* Set an Ident value by freeing any previously allocated memory,
- allocating new memory and storing the string. */
-astMAKE_SET(Object,Ident,const char *,ident,astStore( this->ident, value,
- strlen( value ) + (size_t) 1 ))
-
-/* The Ident value is set if the pointer to it is not NULL. */
-astMAKE_TEST(Object,Ident,( this->ident != NULL ))
-
-/*
-*att++
-* Name:
-* UseDefs
-
-* Purpose:
-* Use default values for unspecified attributes?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute specifies whether default values should be used
-* internally for object attributes which have not been assigned a
-* value explicitly. If a non-zero value (the default) is supplied for
-* UseDefs, then default values will be used for attributes which have
-* not explicitly been assigned a value. If zero is supplied for UseDefs,
-* then an error will be reported if an attribute for which no explicit
-* value has been supplied is needed internally within AST.
-*
-* Many attributes (including the UseDefs attribute itself) are unaffected
-* by the setting of the UseDefs attribute, and default values will always
-* be used without error for such attributes. The "Applicability:" section
-* below lists the attributes which are affected by the setting of UseDefs.
-
-* Note, UseDefs only affects access to attributes internally within
-* AST. The public accessor functions such as
-c astGetC
-f AST_GETC
-* is unaffected by the UseDefs attribute - default values will always
-* be returned if no value has been set. Application code should use the
-c astTest
-f AST_TEST
-* function if required to determine if a value has been set for an
-* attribute.
-
-* Applicability:
-* Object
-* All Objects have this attribute, but ignore its setting except
-* as described below for individual classes.
-* FrameSet
-* The default value of UseDefs for a FrameSet is redefined to be
-* the UseDefs value of its current Frame.
-* CmpFrame
-* The default value of UseDefs for a CmpFrame is redefined to be
-* the UseDefs value of its first component Frame.
-* Region
-* The default value of UseDefs for a Region is redefined to be
-* the UseDefs value of its encapsulated Frame.
-* Frame
-* If UseDefs is zero, an error is reported when aligning Frames if the
-* Epoch, ObsLat or ObsLon attribute is required but has not been
-* assigned a value explicitly.
-* SkyFrame
-* If UseDefs is zero, an error is reported when aligning SkyFrames
-* if any of the following attributes are required but have not been
-* assigned a value explicitly: Epoch, Equinox.
-* SpecFrame
-* If UseDefs is zero, an error is reported when aligning SpecFrames
-* if any of the following attributes are required but have not been
-* assigned a value explicitly: Epoch, RefRA, RefDec, RestFreq,
-* SourceVel, StdOfRest.
-* DSBSpecFrame
-* If UseDefs is zero, an error is reported when aligning DSBSpecFrames
-* or when accessing the ImagFreq attribute if any of the following
-* attributes are required but have not been assigned a value explicitly:
-* Epoch, DSBCentre, IF.
-*att--
-*/
-astMAKE_CLEAR(Object,UseDefs,usedefs,CHAR_MAX)
-astMAKE_GET(Object,UseDefs,int,1,((this->usedefs!=CHAR_MAX)?this->usedefs:1))
-astMAKE_SET(Object,UseDefs,int,usedefs,(this->usedefs=(value)?1:0))
-astMAKE_TEST(Object,UseDefs,(this->usedefs!=CHAR_MAX))
-
-/*
-*att++
-* Name:
-* Nobject
-
-* Purpose:
-* Number of Objects in class.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer, read-only.
-
-* Description:
-* This attribute gives the total number of Objects currently in
-* existence in the same class as the Object whose attribute value
-* is requested. This count does not include Objects which belong
-* to derived (more specialised) classes.
-*
-* This attribute is mainly intended for debugging. It can be used
-* to detect whether Objects which should have been deleted have,
-* in fact, been deleted.
-
-* Applicability:
-* Object
-* All Objects have this attribute.
-*att--
-*/
-
-/*
-*att++
-* Name:
-* ObjSize
-
-* Purpose:
-* The in-memory size of the Object.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer, read-only.
-
-* Description:
-* This attribute gives the total number of bytes of memory used by
-* the Object. This includes any Objects which are encapsulated within
-* the supplied Object.
-
-* Applicability:
-* Object
-* All Objects have this attribute.
-*att--
-*/
-
-/*
-*att++
-* Name:
-* RefCount
-
-* Purpose:
-* Count of active Object pointers.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer, read-only.
-
-* Description:
-* This attribute gives the number of active pointers associated
-* with an Object. It is modified whenever pointers are created or
-c annulled (by astClone, astAnnul or astEnd for example). The count
-f annulled (by AST_CLONE, AST_ANNUL or AST_END for example). The count
-* includes the initial pointer issued when the Object was created.
-*
-* If the reference count for an Object falls to zero as the result
-* of annulling a pointer to it, then the Object will be deleted.
-
-* Applicability:
-* Object
-* All Objects have this attribute.
-*att--
-*/
-
-/* Standard class functions. */
-/* ========================= */
-/*
-*+
-* Name:
-* astCheck<Class>
-
-* Purpose:
-* Validate class membership.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "class.h"
-* Ast<Class> *astCheck<Class>( Ast<Class> *this )
-
-* Class Membership:
-* <Class> class function.
-
-* Description:
-* This function validates membership of the class called <Class>,
-* or of any class derived from it. If the Object is not a member,
-* or the pointer supplied does not identify a valid Object, an
-* error is reported and the global error status is set to
-* AST__OBJIN.
-
-* Parameters:
-* this
-* Pointer to the Object.
-
-* Returned Value:
-* The function always returns a copy of the "this" pointer
-* (whether it finds it valid or not).
-
-* Notes:
-* - Each class provides a function (astCheck<Class>) of this form,
-* where <Class> and <class> are replaced by the class name (with
-* appropriate capitalisation).
-* - Normal error status checking is performed, so this function
-* will not execute if the global error status is set on entry (the
-* usual function value will be returned, however).
-* - This function is primarily intended for validating Object
-* pointers passed to member functions as part of a class
-* interface.
-*-
-*/
-
-/* Implement the astCheckObject function using the macro defined for this
- purpose in the "object.h" header file. */
-astMAKE_CHECK(Object)
-
-int astIsAObject_( const AstObject *this, int *status ) {
-/*
-*++
-* Name:
-c astIsA<Class>
-f AST_ISA<CLASS>
-
-* Purpose:
-* Test membership of a class by an Object.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "class.h"
-c int astIsA<Class>( const Ast<Class> *this )
-f RESULT = AST_ISA<CLASS>( THIS, STATUS )
-
-* Class Membership:
-* Class function.
-
-* Description:
-* This is a family of functions which test whether an Object is a
-c member of the class called <Class>, or of any class derived from
-f member of the class called <CLASS>, or of any class derived from
-* it.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Object.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astIsA<Class>()
-c One if the Object belongs to the class called <Class> (or to a
-c class derived from it), otherwise zero.
-f AST_ISA<CLASS> = LOGICAL
-f .TRUE. if the Object belongs to the class called <CLASS> (or to
-f a class derived from it), otherwise .FALSE..
-
-* Applicability:
-* Object
-* These functions apply to all Objects.
-
-* Examples:
-c member = astIsAFrame( obj );
-c Tests whether Object "obj" is a member of the Frame class, or
-c of any class derived from a Frame.
-f MEMBER = AST_ISAFRAME( OBJ, STATUS );
-f Tests whether Object OBJ is a member of the Frame class, or
-f of any class derived from a Frame.
-
-* Notes:
-c - Every AST class provides a function (astIsA<Class>) of this
-c form, where <Class> should be replaced by the class name.
-f - Every AST class provides a function (AST_ISA<CLASS>) of this
-f form, where <CLASS> should be replaced by the class name.
-c - This function attempts to execute even if the AST error status
-c is set
-f - This function attempts to execute even if STATUS is set to an
-f error value
-* on entry, although no further error report will be made
-* if it subsequently fails under these circumstances.
-c - A value of zero will be returned if this function should fail
-f - A value of .FALSE. will be returned if this function should fail
-* for any reason. In particular, it will fail if the pointer
-* supplied does not identify an Object of any sort.
-*--
-*/
-
-/* Local Variables: */
- int valid; /* Valid object? */
-
-/* Since this is the base class, the implementation of this function
- differs from that in derived classes (in that it fails and
- potentially reports an error if the returned result is zero). */
-
-/* Initialise. */
- valid = 0;
-
-/* Check if a NULL pointer was supplied (this can never be valid). If
- OK, check if the Object contains the correct "magic number" in its
- check field. */
- if ( !this || ( this->check != Magic( this, this->size, status ) ) ) {
-
-/* If it is not a valid Object, then report an error (but only if the
- global error status has not already been set). */
- if ( astOK ) {
- astError( AST__OBJIN, "astIsAObject(%s): Invalid Object pointer "
- "given (points at address %p).", status, astGetClass( this ),
- (void *) this );
- }
-
-/* Otherwise, note that the Object is valid. */
- } else {
- valid = 1;
- }
-
-/* Return the result. */
- return valid;
-}
-
-void astInitObjectVtab_( AstObjectVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitObjectVtab
-
-* Purpose:
-* Initialise a virtual function table for a Object.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "object.h"
-* void astInitObjectVtab( AstObjectVtab *vtab, const char *name )
-
-* Class Membership:
-* Object vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the Object class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Thread-specific global data */
- int ivtab; /* Index of next entry in known_vtabs */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to Thread-specific global data. */
- astGET_GLOBALS(NULL);
-
-/* Initialise the contents of the class identifier. Since this is the
- base class, we assign null values to the fields. */
- vtab->id.check = NULL;
- vtab->id.parent = NULL;
-
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
- vtab->Clear = Clear;
- vtab->ClearAttrib = ClearAttrib;
- vtab->ClearID = ClearID;
- vtab->ClearIdent = ClearIdent;
- vtab->Dump = Dump;
- vtab->Equal = Equal;
- vtab->GetAttrib = GetAttrib;
- vtab->GetID = GetID;
- vtab->GetIdent = GetIdent;
- vtab->Same = Same;
- vtab->SetAttrib = SetAttrib;
- vtab->SetID = SetID;
- vtab->SetIdent = SetIdent;
- vtab->Show = Show;
- vtab->TestAttrib = TestAttrib;
- vtab->TestID = TestID;
- vtab->TestIdent = TestIdent;
- vtab->VSet = VSet;
- vtab->Cast = Cast;
- vtab->GetObjSize = GetObjSize;
- vtab->CleanAttribs = CleanAttribs;
-
- vtab->TestUseDefs = TestUseDefs;
- vtab->SetUseDefs = SetUseDefs;
- vtab->ClearUseDefs = ClearUseDefs;
- vtab->GetUseDefs = GetUseDefs;
-
-#if defined(THREAD_SAFE)
- vtab->ManageLock = ManageLock;
-#endif
-
-/* Store the pointer to the class name. */
- vtab->class = name;
-
-/* Initialise the count of active objects and the number of destructors,
- copy constructors and dump functions. */
- vtab->nobject = 0;
- vtab->ndelete = 0;
- vtab->ncopy = 0;
- vtab->ndump = 0;
-
-/* Initialise the arrays of destructor, copy constructor and dump
- function pointers. */
- vtab->delete = NULL;
- vtab->copy = NULL;
- vtab->dump = NULL;
- vtab->dump_class = NULL;
- vtab->dump_comment = NULL;
-
-/* The virtual function table for each class contains a list of pointers
- to memory blocks which have previously been used to store an Object of
- the same class, but which have since been deleted using astDelete.
- These memory blocks are free to be re-used when a new Object of the
- same class is initialised. This saves on the overheads associated with
- continuously allocating small blocks of memory using malloc. */
- vtab->nfree = 0;
- vtab->free_list = NULL;
-
-/* Add the supplied virtual function table pointer to the end of the list
- of known vtabs. */
- ivtab = nvtab++;
-
- astBeginPM;
- known_vtabs = astGrow( known_vtabs, nvtab, sizeof( AstObjectVtab *) );
- astEndPM;
-
- if( astOK && known_vtabs ) known_vtabs[ ivtab ] = vtab;
-
-/* Fill a pointer value with zeros (not necessarily the same thing as a
- NULL pointer) for subsequent use. */
- (void) memset( &zero_ptr, 0, sizeof( AstObject * ) );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised. */
- if( vtab == &class_vtab ) class_init = 1;
-}
-
-AstObject *astInitObject_( void *mem, size_t size, int init,
- AstObjectVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitObject
-
-* Purpose:
-* Initialise an Object.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *astInitObject( void *mem, size_t size, int init,
-* AstObjectVtab *vtab, const char *name )
-
-* Class Membership:
-* Object initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new Object. It allocates memory (if necessary) to accommodate the
-* Object plus any additional data associated with the derived class. It
-* then initialises an Object structure at the start of this memory. If the
-* "init" flag is set, it also initialises the contents of a virtual
-* function table for an Object at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the Object is to be initialised.
-* This must be of sufficient size to accommodate the Object data
-* (sizeof(Object)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the Object (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the Object
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the Object's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new Object.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the Object
-* astClass function).
-
-* Returned Value:
-* A pointer to the new Object.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstObject *new; /* Pointer to new Object */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Determine if memory must be allocated dynamically. If so, use the last
- block of memory in the list of previously allocated but currently
- unused blocks identified by the vtab "free_list" array, reducing the
- length of the free list by one, and nullifying the entry in the list
- for safety. If the list is originally empty, allocate memory for a new
- object using astMalloc. */
- if( !mem ) {
- if( object_caching ) {
- if( vtab->nfree > 0 ) {
- mem = vtab->free_list[ --(vtab->nfree) ];
- vtab->free_list[ vtab->nfree ] = NULL;
- if( astSizeOf( mem ) != size && astOK ) {
- astError( AST__INTER, "astInitObject(%s): Free block has size "
- "%d but the %s requires %d bytes (internal AST "
- "programming error).", status, vtab->class,
- (int) astSizeOf( mem ), vtab->class, (int) size );
- }
- } else {
- mem = astMalloc( size );
- }
-
- } else {
- mem = astMalloc( size );
- }
-
-/* If memory had already been allocated, adjust the "size" value to match
- the size of the allocated memory. */
- } else {
- size = astSizeOf( mem );
- }
-
-/* Obtain a pointer to the new Object. */
- if ( astOK ) {
- new = (AstObject *) mem;
-
-/* Zero the entire new Object structure (to prevent accidental re-use
- of any of its values after deletion). */
- (void) memset( new, 0, size );
-
-/* If necessary, initialise the virtual function table. */
-/* ---------------------------------------------------- */
- if ( init ) astInitObjectVtab( vtab, name );
- if( astOK ) {
-
-/* Initialise the Object data. */
-/* --------------------------- */
-/* Store a unique "magic" value in the Object structure. This will be
- used (e.g. by astIsAObject) to determine if a pointer identifies a
- valid Object. Note that this differs from the practice in derived
- classes, where this number is stored in the virtual function
- table. We take a different approach here so that we need not follow
- a pointer to the virtual function table obtained from a structure
- that hasn't yet been validated as an Object. This minimises the
- risk of a memory access violation. */
- new->check = Magic( new, size, status );
-
-/* Associate the Object with its virtual function table. */
- new->vtab = vtab;
-
-/* Store the Object size and note if its memory was dynamically allocated. */
- new->size = size;
- new->dynamic = astIsDynamic( new );
-
-/* Initialise the reference count (of Object pointers in use). */
- new->ref_count = 1;
-
-/* Initialise the ID strings. */
- new->id = NULL;
- new->ident = NULL;
-
-/* Use default values for unspecified attributes. */
- new->usedefs = CHAR_MAX;
-
-/* Increment the count of active Objects in the virtual function table. */
- vtab->nobject++;
- }
-
-/* If an error occurred, clean up by deleting the new Object. Otherwise
- lock the object for use by the currently executing thread. */
- if ( !astOK ) {
- new = astDelete( new );
-
-#ifdef THREAD_SAFE
- } else {
- if( pthread_mutex_init( &(new->mutex1), NULL ) != 0 && astOK ) {
- astError( AST__INTER, "astInitObject(%s): Failed to "
- "initialise POSIX mutex1 for the new Object.", status,
- vtab->class );
- }
- if( pthread_mutex_init( &(new->mutex2), NULL ) != 0 && astOK ) {
- astError( AST__INTER, "astInitObject(%s): Failed to "
- "initialise POSIX mutex2 for the new Object.", status,
- vtab->class );
- }
- new->locker = -1;
- new->globals = NULL;
- (void) ManageLock( new, AST__LOCK, 0, NULL, status );
- if( !astOK ) new = astDelete( new );
-#endif
- }
- }
-
-/* Return a pointer to the new Object. */
- return new;
-}
-
-AstObject *astLoadObject_( void *mem, size_t size,
- AstObjectVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadObject
-
-* Purpose:
-* Load an Object.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *astLoadObject( void *mem, size_t size,
-* AstObjectVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* Object loader.
-
-* Description:
-* This function is provided to load a new Object using data read
-* from a Channel, and to allocate memory for it if necessary.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for an Object at the start of the memory
-* passed via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory into which the Object is to be
-* loaded. This must be of sufficient size to accommodate the
-* Object data (sizeof(Object)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the Object (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the Object structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstObject) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new Object. If this is NULL, a pointer to
-* the (static) virtual function table for the Object class is
-* used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new Object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "Object" is used instead.
-
-* Returned Value:
-* A pointer to the new Object.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Thread-specific global data */
- AstObject *new; /* Pointer to the new Object */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to Thread-specific global data. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this Object. In this case the
- Object belongs to this class, so supply appropriate values for
- initialising it and its virtual function table. */
- if ( !vtab ) {
- size = sizeof( AstObject );
- vtab = &class_vtab;
- name = "Object";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitObjectVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* There is no parent class to load, so simply initialise a new Object
- structure as if a new Object were being created from scratch. */
- new = astInitObject( mem, size, 0, vtab, name );
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "Object" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
- new->id = astReadString( channel, "id", NULL );
- new->ident = astReadString( channel, "ident", NULL );
- new->usedefs = astReadInt( channel, "usedfs", CHAR_MAX );
-
-/* We simply read the values for the read-only attributes (just in
- case they've been un-commented in the external representation) and
- discard them. This prevents any possibility of error due to un-read
- input. */
- (void) astReadInt( channel, "refcnt", 0 );
- (void) astReadInt( channel, "nobj", 0 );
-
-/* If an error occurred, clean up by deleting the new Object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new Object pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-void astClear_( AstObject *this, const char *attrib, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Object,Clear))( this, attrib, status );
-}
-void astClearAttrib_( AstObject *this, const char *attrib, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Object,ClearAttrib))( this, attrib, status );
-}
-void astDump_( AstObject *this, AstChannel *channel, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Object,Dump))( this, channel, status );
-}
-
-#if defined(THREAD_SAFE)
-int astManageLock_( AstObject *this, int mode, int extra, AstObject **fail,
- int *status ) {
- if( !this ) return 0;
- return (**astMEMBER(this,Object,ManageLock))( this, mode, extra, fail, status );
-}
-#endif
-
-int astEqual_( AstObject *this, AstObject *that, int *status ) {
- if ( !astOK ) return 0;
- if( this == that ) return 1;
- return (**astMEMBER(this,Object,Equal))( this, that, status );
-}
-const char *astGetAttrib_( AstObject *this, const char *attrib, int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Object,GetAttrib))( this, attrib, status );
-}
-void astSetAttrib_( AstObject *this, const char *setting, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Object,SetAttrib))( this, setting, status );
-}
-void astShow_( AstObject *this, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Object,Show))( this, status );
-}
-int astTestAttrib_( AstObject *this, const char *attrib, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Object,TestAttrib))( this, attrib, status );
-}
-void astVSet_( AstObject *this, const char *settings, char **text, va_list args, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Object,VSet))( this, settings, text, args, status );
-}
-int astGetObjSize_( AstObject *this, int *status ) {
- if ( !astOK || !this ) return 0;
- return (**astMEMBER(this,Object,GetObjSize))( this, status );
-}
-void astCleanAttribs_( AstObject *this, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Object,CleanAttribs))( this, status );
-}
-AstObject *astCast_( AstObject *this, AstObject *obj, int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Object,Cast))( this, obj, status );
-}
-int astSame_( AstObject *this, AstObject *that, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Object,Same))( this, that, status );
-}
-
-/* External interface. */
-/* =================== */
-/* The following relates to the external interface to Objects and not
- specifically to the implementation of the Object class itself
- (although it contains external functions which replace the internal
- versions defined earlier). */
-
-
-/* Type Definitions. */
-/* ----------------- */
-/* Define the Handle structure. This is attached to Objects when they
- are accessed via the public (external, user-callable) interface.
- Handles provide a buffer between the Object identifiers issued to
- external users and the naked C pointers used to handle Objects
- internally. They also implement the context levels used by
- astBegin, astEnd, astExempt and astExport (which are only available
- to external users). */
-typedef struct Handle {
- AstObject *ptr; /* C Pointer to the associated Object */
- int context; /* Context level for this Object */
- int check; /* Check value to ensure validity */
-
-#if defined(THREAD_SAFE)
- int thread; /* Identifier for owning thread */
-#endif
-
-#if defined(MEM_DEBUG)
- int id; /* The id associated with the memory block
- holding the Object last associated with
- this handle. */
- AstObjectVtab *vtab; /* Pointer to the firtual function table of
- the Object last associated with this
- handle. */
-#endif
-
-/* Links between Handles are implemented using integer offsets rather
- than through pointers. */
- int flink; /* Backward link to previous Handle */
- int blink; /* Forward link to next Handle */
-} Handle;
-
-/* Define a union with an overlapping int and AstObject*. This is used
- to transfer an integer bit pattern into and out of a pointer
- variable used to store an Object identifier. This avoids any
- implementation dependent aspects of integer-to-pointer
- conversions. */
-typedef union IdUnion {
- AstObject *pointer;
- int integer;
-} IdUnion;
-
-/* Define a union which allows a bit pattern to be accessed as a
- signed or unsigned int. */
-typedef union MixedInts {
- int i;
- unsigned u;
-} MixedInts;
-
-/* Static Variables. */
-/* ----------------- */
-/* The array of Handle structures is a pool of resources available to all
- threads. Each thread has its own conext level and its own "active_handles"
- array to identify the first Handle at each context level. */
-static Handle *handles = NULL; /* Pointer to allocated array of Handles */
-static int free_handles = -1; /* Offset to head of free Handle list */
-static int nhandles = 0; /* Number of Handles in "handles" array */
-static unsigned nids = 0; /* Number of IDs issued to external users */
-
-#if defined(THREAD_SAFE)
-static int unowned_handles = -1; /* Offset to head of unowned Handle
- list. In a single threaded environment,
- all handles must be owned by a thread. */
-#endif
-
-#ifdef MEM_DEBUG
-static int Watched_Handle = -1; /* A handle index to be watched. Activity
- on this handle is reported using
- astHandleUse and astHandleAlarm. */
-#endif
-
-
-/* External Interface Function Prototypes. */
-/* --------------------------------------- */
-/* MYSTATIC should normally be set to "static" to make the following
- function have local symbols. But it may be set to blank for debugging
- purposes in order to enable these functions to appear in a backtrace
- such as produced by the astBacktrace function. */
-#define MYSTATIC
-
-/* Private functions associated with the external interface. */
-MYSTATIC AstObject *AssocId( int, int * );
-MYSTATIC int CheckId( AstObject *, int, int * );
-MYSTATIC void AnnulHandle( int, int * );
-MYSTATIC void InitContext( int * );
-MYSTATIC void InsertHandle( int, int *, int * );
-MYSTATIC void RemoveHandle( int, int *, int * );
-
-#if defined(MEM_DEBUG)
-MYSTATIC void CheckList( int *, int * );
-MYSTATIC void CheckInList( int, int *, int, int * );
-MYSTATIC int CheckThread( int, int *, int * );
-MYSTATIC const char *HandleString( int, char * );
-MYSTATIC const char *HeadString( int *, char * );
-#endif
-
-
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstObject *astDeleteId_( AstObject *, int * );
-void astBegin_( void );
-void astEnd_( int * );
-void astExemptId_( AstObject *, int * );
-void astImportId_( AstObject *, int * );
-void astSetId_( void *, const char *, ... );
-void astLockId_( AstObject *, int, int * );
-void astUnlockId_( AstObject *, int, int * );
-
-
-/* External Interface Functions. */
-/* ----------------------------- */
-MYSTATIC void AnnulHandle( int ihandle, int *status ) {
-/*
-* Name:
-* AnnulHandle
-
-* Purpose:
-* Annul a Handle and its associated Object pointer.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* void AnnulHandle( int ihandle, int *status )
-
-* Class Membership:
-* Object member function.
-
-* Description:
-* This function annuls an active Handle by annulling the Object
-* pointer it is associated with, deactivating the Handle and
-* returning it to the free Handle list for re-use.
-*
-* The reference count for the associated Object is decremented by
-* this function and the Object will be deleted if this reference
-* count falls to zero.
-
-* Parameters:
-* ihandle
-* Array offset that identifies the Handle to be annulled in the
-* "handles" array. This is fully validated by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The Handle supplied should be active, otherwise an error will
-* result and the Handle will not be touched (but no error report
-* will be made if the global error status has already been set).
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Thread-specific global data */
- AstObject *ptr; /* Object pointer */
- int context; /* Context level where Handle was issued */
-
-/* Get a pointer to Thread-specific global data. */
- astGET_GLOBALS(NULL);
-
-/* Check that the handle offset supplied is valid and report an error
- if it is not (but only if the global error status has not already
- been set). */
- if ( ( ihandle < 0 ) || ( ihandle >= nhandles ) ) {
- if ( astOK ) {
- astError( AST__INHAN, "astAnnulHandle: Invalid attempt to annul an "
- "Object Handle (no. %u).", status, ihandle );
- astError( AST__INHAN, "This Handle number is not valid (possible "
- "internal programming error)." , status);
- }
-
-/* If OK, obtain the Handle's context level. */
- } else {
- context = handles[ ihandle ].context;
-
-/* If this indicates that the Handle isn't active, then report an
- error (but only if the global error status has not already been
- set). We allow handles that are currently not owned by any thread to
- be annulled. */
- if ( context < 0 && context != UNOWNED_CONTEXT ) {
- if ( astOK ) {
- astError( AST__INHAN, "astAnnulHandle: Invalid attempt to annul "
- "an Object Handle (no. %u).", status, ihandle );
- astError( AST__INHAN, "This Handle is not active (possible "
- "internal programming error)." , status);
- }
-
-/* If the Handle is active, annul its Object pointer. The astAnnul
- function may call Delete functions supplied by any class, and these
- Delete functions may involve annulling external Object IDs, which in
- turn requires access to the handles array. For this reason, we release
- the mutex that protects access to the handles arrays so that it can
- potentially be re-aquired within astAnnul without causing deadlock. */
- } else {
-
-#ifdef MEM_DEBUG
- astHandleUse( ihandle, "annulled using check value %d ",
- handles[ ihandle ].check );
-#endif
-
- ptr = handles[ ihandle ].ptr;
- UNLOCK_MUTEX2;
- ptr = astAnnul( ptr );
- LOCK_MUTEX2;
-
-/* Remove the Handle from the active list for its context level. */
- if( context == UNOWNED_CONTEXT ) {
-
-#if defined(THREAD_SAFE)
- RemoveHandle( ihandle, &unowned_handles, status );
-#else
- if( astOK ) astError( AST__INTER, "AnnulHandle: reference to "
- "'unowned_handles' in a non-thread-safe context "
- "(internal AST programming error).", status );
-#endif
-
- } else if( active_handles ) {
- RemoveHandle( ihandle, &active_handles[ context ], status );
-
- } else if( astOK ){
- astError( AST__INTER, "AnnulHandle: active_handles array has "
- "not been initialised (internal AST programming error).",
- status );
- }
-
-/* Reset the Handle's "context" value (making it inactive) and its "check"
- value (so it is no longer associated with an identifier value). */
- handles[ ihandle ].ptr = NULL;
- handles[ ihandle ].context = INVALID_CONTEXT;
- handles[ ihandle ].check = 0;
-#if defined(THREAD_SAFE)
- handles[ ihandle ].thread = -1;
-#endif
-
-/* Place the modified Handle on the free Handles list ready for re-use. */
- InsertHandle( ihandle, &free_handles, status );
-
- }
- }
-}
-
-AstObject *astAnnulId_( AstObject *this_id, int *status ) {
-/*
-*+
-* Name:
-* AnnulId
-
-* Purpose:
-* Annul an external Object identifier.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *astAnnulId( AstObject *this )
-
-* Class Membership:
-* Object member function.
-
-* Description:
-* This function implements the external (public) interface to the
-* astAnnul method. It accepts an active Object identifier, which
-* it annuls, causing the associated Handle to be deactivated and
-* returned to the free Handles list for re-use. It also causes the
-* reference count of the associated Object to be decremented and
-* the Object to be deleted if this reference count falls to zero.
-
-* Parameters:
-* this
-* The Object identifier to be annulled.
-
-* Returned Value:
-* A NULL C pointer is always returned (this should be translated
-* into an identifier value of zero for external use).
-
-* Notes:
-* - This function attempts to execute even if the global error
-* status is set.
-* - The identifier supplied should be associated with an active
-* Object, otherwise an error will result (but no error report will
-* be made if the global error status has already been set).
-* - This function is invoked via the astAnnul macro for external use.
-* For internal use (from protected code which needs to handle external
-* IDs) it should be invoked via the astAnnulId macro (since astAnnul
-* expects a true C pointer as its argument when used internally).
-*-
-*/
-
-/* Obtain the Object pointer from the ID supplied and validate the
- pointer to ensure it identifies a valid Object (this generates an
- error if it doesn't). Note, we use "astMakePointer_NoLockCheck",
- rather than the usual "astMakePointer" since a thread should be able
- to renounce interest in an object without needing to own the object.
- If we used "astMakePointer" then a thread could not annul a pointer
- unless it owned the object. But having annulled the pointer it could
- then not unlock the object for use by another thread (since the
- pointer it would need to do this has just been annulled). */
- if ( !astIsAObject( astMakePointer_NoLockCheck( this_id ) ) ) return NULL;
-
-/* Obtain the Handle offset for this Object and annul the Handle and
- its associated Object pointer. */
- LOCK_MUTEX2;
- AnnulHandle( CheckId( this_id, 0, status ), status );
- UNLOCK_MUTEX2;
-
-/* Always return a NULL pointer value. */
- return NULL;
-}
-
-MYSTATIC AstObject *AssocId( int ihandle, int *status ) {
-/*
-* Name:
-* AssocId
-
-* Purpose:
-* Associate an identifier value with a Handle.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *AssocId( int ihandle )
-
-* Class Membership:
-* Object member function.
-
-* Description:
-* This function takes a zero-based offset into the "handles" array
-* that identifies a Handle associated with an active Object. It
-* encodes this into an identifier value to be issued to an
-* external user to identify that Handle and its Object, and then
-* associates this identifier value with the Handle.
-
-* Parameters:
-* ihandle
-* Offset in the "handles" array that identifies the Handle,
-* which should be active (i.e. associated with an active
-* Object). This function will modify the "check" field in this
-* Handle to associate it with the identifier value it returns.
-
-* Returned Value:
-* The resulting identifier value.
-
-* Notes:
-* - The returned identifier value is, in fact, an int. This
-* allows the value to be passed easily to other languages
-* (e.g. Fortran) and stored as an integer without loss of
-* information.
-* - The value is stored within C code as type AstObject*. This
-* means that C code (e.g. function prototypes, etc.) need not be
-* aware that an identifier (as opposed to an Object pointer) is
-* being used, even though the actual bit patterns will be
-* different. The same C code can then be used for both internal
-* and external purposes so long as care is taken to convert
-* between the two representations at appropriate points.
-* - The reverse operation (conversion of an ID back to a handle
-* offset) is performed by CheckId.
-* - A zero identifier value will be returned if this function is
-* invoked with the global status set or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstObject *result; /* Pointer value to return */
- MixedInts test; /* Union for testing encoding */
- MixedInts work; /* Union for encoding ID value */
-
-/* Initialise. */
- result = astI2P( 0 );
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Copy the Handle offset and clear the lowest 8 bits by shifting
- left. */
- work.i = ihandle;
- work.u = work.u << 8U;
-
-/* Make a copy of the result shifted right again. Test if any bits
- have been lost in this process. If so, there are too many Handles
- in use at once to encode them into IDs, so report an error. */
- test.u = work.u >> 8U;
- if ( test.i != ihandle ) {
- astError( AST__XSOBJ, "AssocId(%s): There are too many AST Objects in "
- "use at once.", status, astGetClass( handles[ ihandle ].ptr ) );
-
-/* If OK, scramble the value by exclusive-ORing with the bit pattern
- in AST__FAC (a value unique to this library), also shifted left by
- 8 bits. This makes it even less likely that numbers from other
- sources will be accepted in error as valid IDs. */
- } else {
- work.u ^= ( ( (unsigned) AST__FAC ) << 8U );
-
-/* Fill the lowest 8 bits with a count of the total number of IDs
- issued so far (which we increment here). This makes each ID unique,
- so that an old one that identifies a Handle that has been annulled
- and re-used (i.e. associated with a new ID) can be spotted. We
- only use the lowest 8 bits of this count because this provides
- adequate error detection to reveal programming errors and we do not
- need higher security than this. We also prevent a count of zero
- being used, as this could result in a zero identifier value (this
- being reserved as the "null" value). */
- if ( ++nids > 255U ) nids = 1U;
- work.u |= nids;
-
-/* Store the value as a check count in the Handle. This will be used
- to validate the ID in future. */
- handles[ ihandle ].check = work.i;
-
-/* Pack the value into the pointer to be returned. */
- result = astI2P( work.i );
- }
-
-/* Return the result. */
- return result;
-}
-
-void astBegin_( void ) {
-/*
-*++
-* Name:
-c astBegin
-f AST_BEGIN
-
-* Purpose:
-* Begin a new AST context.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "object.h"
-c void astBegin
-f CALL AST_BEGIN( STATUS )
-
-* Class Membership:
-* Object class function.
-
-* Description:
-c This macro invokes a function to begin a new AST context.
-c Any Object pointers
-f This routine begins a new AST context. Any Object pointers
-* created within this context will be annulled when it is later
-c ended using astEnd (just as if astAnnul had been invoked),
-f ended using AST_END (just as if AST_ANNUL had been invoked),
-c unless they have first been exported using astExport or rendered
-c exempt using astExempt. If
-f unless they have first been exported using AST_EXPORT or rendered
-f exempt using AST_EXEMPT. If
-* annulling a pointer causes an Object's RefCount attribute to
-* fall to zero (which happens when the last pointer to it is
-* annulled), then the Object will be deleted.
-
-f Parameters:
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Applicability:
-* Object
-c This macro applies to all Objects.
-f This routine applies to all Objects.
-
-* Notes:
-c - astBegin attempts to execute even if the AST error status
-c is set on entry.
-f - This routine attempts to execute even if STATUS is set to an
-f error value.
-c - Contexts delimited by astBegin and astEnd may be nested to any
-c depth.
-f - Contexts delimited by AST_BEGIN and AST_END may be nested to any
-f depth.
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Thread-specific global data */
- int stat; /* Copy of global status */
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to thread-specific global data. */
- astGET_GLOBALS(NULL);
-
-/* Now that the thread-specific data has been initialised, we can get a
- pointer to the threads inherited status value. */
- status = astGetStatusPtr;
-
-/* Save and clear the global status so that memory allocation can be
- performed within this function even under error conditions. */
- stat = astStatus;
- astClearStatus;
-
-/* Ensure that the active_handles array has been initialised. */
- if ( !active_handles ) InitContext( status );
-
-/* Extend the "active handles" array to accommodate a new context
- level. This array contains integer offsets into the "handles" array
- to identify the handle which is at the head of the list of active
- handles for each context level. */
- astBeginPM;
- active_handles = astGrow( active_handles, context_level + 2,
- sizeof( int ) );
- astEndPM;
-
-/* Initialise the array element for the new context level to indicate
- an empty Handle list. */
- if ( astOK ) active_handles[ ++context_level ] = -1;
-
-/* Restore the original global status value. */
- astSetStatus( stat );
-}
-
-MYSTATIC int CheckId( AstObject *this_id, int lock_check, int *status ) {
-/*
-* Name:
-* CheckId
-
-* Purpose:
-* Check an identifier value and convert it into a Handle offset.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* int CheckId( AstObject *this, int lock_check, int *status )
-
-* Class Membership:
-* Object member function.
-
-* Description:
-* This function takes an identifier value encoded by AssocId and
-* validates it to ensure it is associated with an active
-* Handle. If valid, it converts it back into a zero-based offset
-* which may be used to access the Handle in the "handles"
-* array. Otherwise, an error is reported.
-
-* Parameters:
-* this
-* The identifier value to be decoded.
-* lock_check
-* Should an error be reported if the handle is in an Object
-* context for a different thread?
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The resulting Handle offset, or -1 if the identifier is not
-* valid or any other error occurs.
-
-* Notes:
-* - This function attempts to execute even if the global error
-* status is set, but no further error report will be made if it
-* fails under these circumstances.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Thread-specific global data */
- MixedInts work; /* Union for decoding ID value */
- int id; /* ID value as an int */
- int ihandle; /* Result to return */
-
-#ifdef MEM_DEBUG
- int oldok = astOK;
-#endif
-
-/* Initialise. */
- ihandle = -1;
-
-/* Get a pointer to thread-specific global data. */
- astGET_GLOBALS(NULL);
-
-/* Retrieve the integer Object identifier value from the pointer
- supplied. */
- id = astP2I( this_id );
-
-/* Check if a value of zero has been supplied and report an error if
- it has. */
- if ( !id ) {
- if ( astOK ) {
- astError( AST__OBJIN, "Invalid Object pointer given (value is "
- "zero)." , status);
- }
-
-/* If OK, reverse the encoding process performed by AssocId to
- retrieve the Handle offset. */
- } else {
- work.i = id;
- work.u = ( work.u ^ ( ( (unsigned) AST__FAC ) << 8U ) ) >> 8U;
-
-/* Check that the offset obtained doesn't extend beyond the limits of
- the "handles" array. Report an error if it does. */
- if ( ( work.i < 0 ) || ( work.i >= nhandles ) ) {
- if ( astOK ) {
- astError( AST__OBJIN, "Invalid Object pointer given (value is "
- "%d).", status, id );
- }
-
-/* See if the "check" field matches the ID value and the Handle is
- valid (i.e. is associated with an active Object). If not, the
- Handle has been annulled and possibly re-used, so report an
- error. */
- } else if ( ( handles[ work.i ].check != id ) ||
- ( handles[ work.i ].context == INVALID_CONTEXT ) ) {
- if ( astOK ) {
- astError( AST__OBJIN, "Invalid Object pointer given (value is "
- "%d).", status, id );
- astError( AST__OBJIN, "This pointer has been annulled, or the "
- "associated Object deleted." , status);
- }
-#if defined(THREAD_SAFE)
- } else if( lock_check && handles[ work.i ].context != UNOWNED_CONTEXT &&
- handles[ work.i ].thread != AST__THREAD_ID ) {
- if ( astOK ) {
- astError( AST__OBJIN, "Invalid Object pointer given (value is "
- "%d).", status, id );
- astError( AST__OBJIN, "This pointer is currently locked by "
- "another thread." , status);
- }
-#endif
-
-/* If OK, set the Handle offset to be returned. */
- } else {
- ihandle = work.i;
- }
-
-#ifdef MEM_DEBUG
- if ( oldok && !astOK && ( work.i >= 0 ) && ( work.i < nhandles ) ) {
- char buf[200];
- astError( astStatus, "Handle properties: %s ", status,
- HandleString( work.i, buf ) );
- }
-#endif
-
- }
-
-/* Return the result. */
- return ihandle;
-}
-
-AstObject *astDeleteId_( AstObject *this_id, int *status ) {
-/*
-*+
-* Name:
-* astDeleteId
-
-* Purpose:
-* Delete an Object via an identifier.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *astDeleteId_( AstObject *this )
-
-* Class Membership:
-* Object member function.
-
-* Description:
-* This function implements the external (public) interface to the
-* astDelete method. It accepts an active Object identifier and
-* deletes the associated Object. Before doing so, it annuls all
-* active identifiers associated with the object, deactivates their
-* Handles and returns these Handles to the free Handles list for
-* re-use.
-
-* Parameters:
-* this
-* An identifier for the Object to be deleted.
-
-* Returned Value:
-* A NULL C pointer is always returned (this should be translated
-* into an identifier value of zero for external use).
-
-* Notes:
-* - This function attempts to execute even if the global error
-* status is set.
-* - The identifier supplied should be associated with an active
-* Object, otherwise an error will result (but no error report will
-* be made if the global error status has already been set).
-* - Although this function is documented as "private" and should
-* not be invoked directly from outside this class, it is not a
-* static function and has a public prototype. This is because it
-* must be invoked via the astDelete macro (defined in the
-* "object.h" include file) as part of the public interface.
-*-
-*/
-
-/* Local Variables: */
- AstObject *this; /* Pointer to Object */
- int i; /* Loop counter for Handles */
- int ihandle; /* Object Handle offset */
-
-/* Obtain the Object pointer from the ID supplied and validate the
- pointer to ensure it identifies a valid Object (this generates an
- error if it doesn't). */
- if ( !astIsAObject( this = astMakePointer( this_id ) ) ) return NULL;
-
-/* Gain exclusive access to the handles array. */
- LOCK_MUTEX2;
-
-/* Obtain the Handle offset for this Object. */
- ihandle = CheckId( this_id, 1, status );
- if ( ihandle != -1 ) {
-
-/* Since the Object is to be deleted, we must annul all identifiers
- that refer to it. Loop to inspect each currently allocated Handle
- in the "handles" array. */
- for ( i = 0; i < nhandles; i++ ) {
-
-/* Select active handles and test if their Object pointer refers to
- the Object to be deleted. */
- if ( ( handles[ i ].context != INVALID_CONTEXT ) &&
- ( handles[ i ].ptr == this ) ) {
-
-/* If so, explicitly set the reference count for the Object to 2 so
- that it will not be deleted (yet) when we annul the pointer
- associated with the Handle. */
- handles[ i ].ptr->ref_count = 2;
-
-/* Annul the Handle, which frees its resources, decrements the Object
- reference count and makes any ID associated with the Handle become
- invalid. */
- AnnulHandle( i, status );
- }
- }
-
-/* If required, tell the user that the handle's object has been deleted. */
-#ifdef MEM_DEBUG
- astHandleUse( ihandle, "object-deleted" );
-#endif
- }
-
- UNLOCK_MUTEX2;
-
-/* When all Handles associated with the Object have been annulled,
- delete the object itself. This over-rides the reference count and
- causes any remaining pointers to the Object (e.g. in internal code
- or within other Objects) to become invalid. */
- this = astDelete( this );
-
-/* Always return a NULL pointer value. */
- return NULL;
-}
-
-void astEnd_( int *status ) {
-/*
-*++
-* Name:
-c astEnd
-f AST_END
-
-* Purpose:
-* End an AST context.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "object.h"
-c void astEnd
-f CALL AST_END( STATUS )
-
-* Class Membership:
-* Object class function.
-
-* Description:
-c This macro invokes a function to end an AST context which was
-f This routine ends an AST context which was
-c begun with a matching invocation of astBegin. Any Object
-f begun with a matching invocation of AST_BEGIN. Any Object
-* pointers created within this context will be annulled (just as
-c if astAnnul had been invoked) and will cease to be valid
-f if AST_ANNUL had been invoked) and will cease to be valid
-* afterwards, unless they have previously been exported using
-c astExport or rendered exempt using astExempt.
-f AST_EXPORT or rendered exempt using AST_EXEMPT.
-* If annulling a pointer causes an Object's RefCount attribute to
-* fall to zero (which happens when the last pointer to it is
-* annulled), then the Object will be deleted.
-
-* Parameters:
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Applicability:
-* Object
-c This macro applies to all Objects.
-f This routine applies to all Objects.
-
-* Notes:
-c - astEnd attempts to execute even if the AST error status is set.
-f - This routine attempts to execute even if STATUS is set to an
-f error value.
-c - Contexts delimited by astBegin and astEnd may be nested to any
-c depth.
-f - Contexts delimited by AST_BEGIN and AST_END may be nested to any
-f depth.
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Thread-specific global data */
- int ihandle; /* Offset of Handle to be annulled */
-
-/* Get a pointer to Thread-specific global data. */
- astGET_GLOBALS(NULL);
-
-/* Check that the current context level is at least 1, otherwise there
- has been no matching use of astBegin, so report an error (unless
- the global status has already been set). */
- if ( context_level < 1 ) {
- if ( astOK ) {
- astError( AST__ENDIN, "astEnd: Invalid use of astEnd without a "
- "matching astBegin." , status);
- }
-
-/* If OK, loop while there are still active Handles associated with
- the current context level. First gain exclusive access to the handles
- array. */
- } else if ( active_handles ) {
- LOCK_MUTEX2;
- while ( ( ihandle = active_handles[ context_level ] ) != -1 ) {
-
-/* Annul the Handle at the head of the active Handles list. */
- AnnulHandle( ihandle, status );
-
-/* It is just posible that under error conditions inactive Handles
- might get left in the active_handles list and AnnulHandle would
- then fail. Since this would result in an infinite loop, we check to
- see if the handle we have just annulled is still in the list. If
- so, transfer it to the free Handles list for re-use. */
- if ( ihandle == active_handles[ context_level ] ) {
- RemoveHandle( ihandle, &active_handles[ context_level ], status );
- InsertHandle( ihandle, &free_handles, status );
- }
- }
-
-/* Ensure the context level is decremented unless it was zero to start
- with. */
- context_level--;
-
-/* Relinquish access to the handles array. */
- UNLOCK_MUTEX2;
- }
-
-}
-
-void astExemptId_( AstObject *this_id, int *status ) {
-/*
-*++
-* Name:
-c astExempt
-f AST_EXEMPT
-
-* Purpose:
-* Exempt an Object pointer from AST context handling.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "object.h"
-c void astExempt( AstObject *this )
-f CALL AST_EXEMPT( THIS, STATUS )
-
-* Class Membership:
-* Object method.
-
-* Description:
-c This function exempts an Object pointer from AST context
-f This routine exempts an Object pointer from AST context
-c handling, as implemented by astBegin and astEnd. This means that
-f handling, as implemented by AST_BEGIN and AST_END. This means that
-c the pointer will not be affected when astEnd is invoked and will
-f the pointer will not be affected when AST_END is called and will
-* remain active until the end of the program, or until explicitly
-c annulled using astAnnul.
-f annulled using AST_ANNUL.
-*
-c If possible, you should avoid using this function when writing
-f If possible, you should avoid using this routine when writing
-* applications. It is provided mainly for developers of other
-* libraries, who may wish to retain references to AST Objects in
-* internal data structures, and who therefore need to avoid the
-c effects of astBegin and astEnd.
-f effects of AST_BEGIN and AST_END.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Object pointer to be exempted from context handling.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Applicability:
-* Object
-c This function applies to all Objects.
-f This routine applies to all Objects.
-*--
-
-* Implementation Notes:
-* - This function does not exist in the "protected" interface to
-* the Object class and is not available to other class
-* implementations.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Thread-specific global data */
- int context; /* Handle context level */
- int ihandle; /* Offset of Handle in "handles" array */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to Thread-specific global data. */
- astGET_GLOBALS(NULL);
-
-/* Obtain the Object pointer from the ID supplied and validate the
- pointer to ensure it identifies a valid Object. */
- (void) astCheckObject( astMakePointer( this_id ) );
- if ( astOK ) {
-
-/* Gain exclusive access to the handles array. */
- LOCK_MUTEX2;
-
-/* Obtain the Handle offset for this Object. */
- ihandle = CheckId( this_id, 1, status );
- if ( ihandle != -1 ) {
-
-/* Extract the context level at which the Object was created. */
- context = handles[ ihandle ].context;
-
-/* Set the new context level to zero, where it cannot be affected by
- ending any context. */
- handles[ ihandle ].context = 0;
-
-/* Remove the object's Handle from its original active Handles list
- and insert it into the list appropriate to its new context
- level. */
-
-#if defined(THREAD_SAFE)
- if( context == UNOWNED_CONTEXT ) {
- RemoveHandle( ihandle, &unowned_handles, status );
- } else {
- RemoveHandle( ihandle, &active_handles[ context ], status );
- }
-#else
- RemoveHandle( ihandle, &active_handles[ context ], status );
-#endif
-
- InsertHandle( ihandle, &active_handles[ 0 ], status );
-
-/* If required, tell the user that the handle has been exempted. */
-#ifdef MEM_DEBUG
- astHandleUse( ihandle, "exempted" );
-#endif
- }
-
- UNLOCK_MUTEX2;
- }
-}
-
-void astExportId_( AstObject *this_id, int *status ) {
-/*
-*++
-* Name:
-c astExport
-f AST_EXPORT
-
-* Purpose:
-* Export an Object pointer to an outer context.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "object.h"
-c void astExport( AstObject *this )
-f CALL AST_EXPORT( THIS, STATUS )
-
-* Class Membership:
-* Object method.
-
-* Description:
-c This function exports an Object pointer from the current AST context
-f This routine exports an Object pointer from the current AST context
-* into the context that encloses the current one. This means that
-* the pointer will no longer be annulled when the current context
-c is ended (with astEnd), but only when the next outer context (if
-f is ended (with AST_END), but only when the next outer context (if
-* any) ends.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Object pointer to be exported.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Applicability:
-* Object
-c This function applies to all Objects.
-f This routine applies to all Objects.
-
-* Notes:
-c - It is only sensible to apply this function to pointers that
-f - It is only sensible to apply this routine to pointers that
-* have been created within (or exported to) the current context
-c and have not been rendered exempt using astExempt.
-f and have not been rendered exempt using AST_EXEMPT.
-* Applying it to an unsuitable Object pointer has no effect.
-*--
-
-* Implementation Notes:
-* - This function does not exist in the "protected" interface to
-* the Object class and is not available to other class
-* implementations.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Thread-specific global data */
- int context; /* Handle context level */
- int ihandle; /* Offset of Handle in "handles" array */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to Thread-specific global data. */
- astGET_GLOBALS(NULL);
-
-/* Obtain the Object pointer from the ID supplied and validate the
- pointer to ensure it identifies a valid Object. */
- (void) astCheckObject( astMakePointer( this_id ) );
- if ( astOK ) {
-
-/* Gain exclusive access to the handles array. */
- LOCK_MUTEX2;
-
-/* Obtain the Handle offset for this Object. */
- ihandle = CheckId( this_id, 1, status );
- if ( ihandle != -1 ) {
-
-/* Check that the current context level is at least 1 and report an
- error if it is not. */
- if ( context_level < 1 ) {
- if( astOK ) astError( AST__EXPIN, "astExport(%s): Attempt to export an Object "
- "from context level zero.", status,
- astGetClass( handles[ ihandle ].ptr ) );
-
-/* Extract the context level at which the Object was created. */
- } else {
- context = handles[ ihandle ].context;
-
-/* Check that the Object's existing context level is high enough to be
- affected by being exported to the next outer context level. If not,
- do nothing. */
- if ( context > ( context_level - 1 ) ) {
-
-/* Set the new context level. */
- handles[ ihandle ].context = context_level - 1;
-
-/* Remove the object's Handle from its original active Handles list
- and insert it into the list appropriate to its new context
- level. */
- RemoveHandle( ihandle, &active_handles[ context ], status );
- InsertHandle( ihandle, &active_handles[ context_level - 1 ],
- status );
-
-/* If required, tell the user that the handle has been exempted. */
-#ifdef MEM_DEBUG
- astHandleUse( ihandle, "exported from context level %d",
- context_level );
-#endif
- }
- }
- }
- UNLOCK_MUTEX2;
- }
-}
-
-void astImportId_( AstObject *this_id, int *status ) {
-/*
-*++
-* Name:
-c astImport
-f AST_IMPORT
-
-* Purpose:
-* Import an Object pointer to the current context.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "object.h"
-c void astImport( AstObject *this )
-f CALL AST_IMPORT( THIS, STATUS )
-
-* Class Membership:
-* Object method.
-
-* Description:
-c This function
-f This routine
-* imports an Object pointer that was created in a higher or lower
-* level context, into the current AST context.
-* This means that the pointer will be annulled when the current context
-c is ended (with astEnd).
-f is ended (with AST_END).
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Object pointer to be imported.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Applicability:
-* Object
-c This function applies to all Objects.
-f This routine applies to all Objects.
-
-*--
-
-* Implementation Notes:
-* - This function does not exist in the "protected" interface to
-* the Object class and is not available to other class
-* implementations.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Thread-specific global data */
- int context; /* Handle context level */
- int ihandle; /* Offset of Handle in "handles" array */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to Thread-specific global data. */
- astGET_GLOBALS(NULL);
-
-/* Obtain the Object pointer from the ID supplied and validate the
- pointer to ensure it identifies a valid Object. */
- (void) astCheckObject( astMakePointer( this_id ) );
- if ( astOK ) {
-
-/* Gain exclusive access to the handles array. */
- LOCK_MUTEX2;
-
-/* Obtain the Handle offset for this Object. */
- ihandle = CheckId( this_id, 1, status );
- if ( ihandle != -1 ) {
-
-/* Extract the context level at which the Object was created. */
- context = handles[ ihandle ].context;
-
-/* Do nothing if the Identifier already belongs to the current context. */
- if( context != context_level ) {
-
-/* Set the new context level. */
- handles[ ihandle ].context = context_level;
-
-/* Remove the object's Handle from its original active Handles list
- and insert it into the list appropriate to its new context
- level. */
- RemoveHandle( ihandle, &active_handles[ context ], status );
- InsertHandle( ihandle, &active_handles[ context_level ], status );
-
-/* If required, tell the user that the handle has been imported. */
-#ifdef MEM_DEBUG
- astHandleUse( ihandle, "imported into context level %d",
- context_level );
-#endif
- }
- }
- UNLOCK_MUTEX2;
- }
-}
-
-void astLockId_( AstObject *this_id, int wait, int *status ) {
-/*
-c++
-* Name:
-* astLock
-
-* Purpose:
-* Lock an Object for exclusive use by the calling thread.
-
-* Type:
-* Public function.
-
-* Synopsis:
-* #include "object.h"
-* void astLock( AstObject *this, int wait )
-
-* Class Membership:
-* Object method.
-
-* Description:
-* The thread-safe public interface to AST is designed so that an
-* error is reported if any thread attempts to use an Object that it
-* has not previously locked for its own exclusive use using this
-* function. When an Object is created, it is initially locked by the
-* thread that creates it, so newly created objects do not need to be
-* explicitly locked. However, if an Object pointer is passed to
-* another thread, the original thread must first unlock it (using
-* astUnlock) and the new thread must then lock it (using astLock)
-* before the new thread can use the Object.
-*
-* The "wait" parameter determines what happens if the supplied Object
-* is curently locked by another thread when this function is invoked.
-
-* Parameters:
-* this
-* Pointer to the Object to be locked.
-* wait
-* If the Object is curently locked by another thread then this
-* function will either report an error or block. If a non-zero value
-* is supplied for "wait", the calling thread waits until the object
-* is available for it to use. Otherwise, an error is reported and
-* the function returns immediately without locking the Object.
-
-* Applicability:
-* Object
-* This function applies to all Objects.
-
-* Notes:
-* - The astAnnul function is exceptional in that it can be used on
-* pointers for Objects that are not currently locked by the calling
-* thread. All other AST functions will report an error.
-* - The Locked object will belong to the current AST context.
-* - This function returns without action if the Object is already
-* locked by the calling thread.
-* - If simultaneous use of the same object is required by two or more
-* threads, astCopy should be used to to produce a deep copy of
-* the Object for each thread. Each copy should then be unlocked by
-* the parent thread (i.e. the thread that created the copy), and then
-* locked by the child thread (i.e. the thread that wants to use the
-* copy).
-* - This function is only available in the C interface.
-* - This function returns without action if the AST library has
-* been built without POSIX thread support (i.e. the "-with-pthreads"
-* option was not specified when running the "configure" script).
-c--
-*/
-
-/* This function odes nothing if thread support is not enabvled. */
-#if defined(THREAD_SAFE)
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Thread-specific global data */
- AstObject *fail; /* Pointer to Object that failed to lock */
- AstObject *this; /* Pointer to Object */
- int ihandle; /* Index of supplied objetc handle */
- int lstat; /* Local status value */
-
-/* Obtain the Object pointer from the ID supplied and validate the
- pointer to ensure it identifies a valid Object (this generates an
- error if it doesn't). Note, we use the "astMakePointer_NoLockCheck",
- since the usual "astMakePointer" macro invokes astCheckLock to report
- an error if the Object is not currently locked by the calling thread. */
- if ( !astIsAObject( this = astMakePointer_NoLockCheck( this_id ) ) ) return;
-
-/* Ensure the global data for this class is accessable. Do not use the
- globals pointer stored in "*this" because "*this" may be locked by
- another thread and so we would pick up the wrong globals. */
- astGET_GLOBALS(NULL);
-
-/* Ensure the running thread has sole access to the static handles arrays. */
- LOCK_MUTEX2;
-
-/* Ensure the Handles arrays have been initialised. */
- if ( !active_handles ) InitContext( status );
-
-/* Get the Handle index for the supplied object identifier. No error is
- reported if the handle is not curently associated with a thread.
- However, an error is reported if the Handle is associated with any
- thread other than the running thread. */
- ihandle = CheckId( this_id, 0, status );
-
-/* We've finished with the handles arrays, for the moment. */
- UNLOCK_MUTEX2;
-
-/* Check the object pointer was valid. */
- if( ihandle != -1 ){
-
-/* The protected astManageLock function implements the public functions,
- astLock and astUnlock. */
- lstat = astManageLock( this, AST__LOCK, wait, &fail );
- if( astOK ) {
- if( lstat == 1 ) {
- if( fail == this ) {
- astError( AST__LCKERR, "astLock(%s): Failed to lock the %s because"
- " it is already locked by another thread (programming "
- "error).", status, astGetClass( this ),
- astGetClass( this ) );
-
- } else {
- astError( AST__LCKERR, "astLock(%s): Failed to lock the %s because"
- " a %s contained within it is already locked by another "
- "thread (programming error).", status,
- astGetClass( this ), astGetClass( this ),
- astGetClass( fail ) );
- }
-
- } else if( lstat == 2 ) {
- astError( AST__LCKERR, "astLock(%s): Failed to lock a POSIX mutex.", status,
- astGetClass( this ) );
-
-/* If the Object is now locked for the running thread... */
- } else {
-
-/* We need access to the handles arrays again. */
- LOCK_MUTEX2;
-
-/* If the supplied handle is not currently assigned to any thread, assign
- it to the running thread. */
- if( handles[ ihandle ].context == UNOWNED_CONTEXT ) {
- RemoveHandle( ihandle, &unowned_handles, status );
-
-#if defined(MEM_DEBUG)
- astHandleUse( ihandle, "locked by thread %d at context level %d",
- handles[ ihandle ].thread, context_level );
-#endif
-
- handles[ ihandle ].thread = AST__THREAD_ID;
- handles[ ihandle ].context = context_level;
- InsertHandle( ihandle, &active_handles[ context_level ],
- status );
- }
-
-/* Finished with the handles arrays again. */
- UNLOCK_MUTEX2;
- }
- }
- }
-#endif
-}
-
-void astUnlockId_( AstObject *this_id, int report, int *status ) {
-/*
-c++
-* Name:
-* astUnlock
-
-* Purpose:
-* Unlock an Object for use by other threads.
-
-* Type:
-* Public function.
-
-* Synopsis:
-* #include "object.h"
-* void astUnlock( AstObject *this, int report )
-
-* Class Membership:
-* Object method.
-
-* Description:
-* Unlocks an Object previously locked using astLock, so that other
-* threads can use the Object. See astLock for further details.
-
-* Parameters:
-* this
-* Pointer to the Object to be unlocked.
-* report
-* If non-zero, an error will be reported if the supplied Object,
-* or any Object contained within the supplied Object, is not
-* currently locked by the running thread. If zero, such Objects
-* will be left unchanged, and no error will be reported.
-
-* Applicability:
-* Object
-* This function applies to all Objects.
-
-* Notes:
-* - This function attempts to execute even if the global error
-* status is set, but no further error report will be made if it
-* subsequently fails under these circumstances.
-* - All unlocked Objects are excluded from AST context handling until
-* they are re-locked using astLock.
-* - This function is only available in the C interface.
-* - This function returns without action if the Object is not currently
-* locked by any thread. If it is locked by the running thread, it is
-* unlocked. If it is locked by another thread, an error will be reported
-* if "error" is non-zero.
-* - This function returns without action if the AST library has
-* been built without POSIX thread support (i.e. the "-with-pthreads"
-* option was not specified when running the "configure" script).
-c--
-*/
-
-/* This function odes nothing if thread support is not enabvled. */
-#if defined(THREAD_SAFE)
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Thread-specific global data */
- AstErrorContext error_context;/* Info about the current error context */
- AstObject *fail; /* Pointer to Object that failed */
- AstObject *this; /* Pointer to Object */
- int ihandle; /* Index of supplied objetc handle */
- int lstat; /* Local status value */
-
-/* Obtain the Object pointer from the ID supplied and validate the
- pointer to ensure it identifies a valid Object (this generates an
- error if it doesn't). Note, we use the "astMakePointer_NoLockCheck",
- since the usual "astMakePointer" macro invokes astCheckLock to report
- an error if the Object is not currently locked by the calling thread. */
- if ( !astIsAObject( this = astMakePointer_NoLockCheck( this_id ) ) ) return;
-
-/* Ensure the global data for this class is accessable. */
- astGET_GLOBALS(this);
-
-/* Start a new error reporting context. This saves any existing error status
- and then clear the status value. It also defer further error reporting. */
- astErrorBegin( &error_context );
-
-/* Ensure the running thread has sole access to the static handles arrays. */
- LOCK_MUTEX2;
-
-/* Ensure the Handles arrays have been initialised. */
- if ( !active_handles ) InitContext( status );
-
-/* Get the Handle index for the supplied object identifier. Report an error
- if the handle is not curently associated with the running thread. */
- ihandle = CheckId( this_id, 1, status );
-
-/* Break the associated of the handle with the current thread so that the
- handle is not assigned to any thread. We do this before unlocking the
- Object structure (using astManageLock) since as soon as astManageLock
- returns, another thread that is waiting for the object to be unlocked
- may start up and modify the handle properties. */
- if( handles[ ihandle ].context >= 0 ) {
- RemoveHandle( ihandle, &active_handles[ handles[ ihandle ].context ],
- status );
-#if defined(MEM_DEBUG)
- astHandleUse( ihandle, "unlocked from thread %d at context "
- "level %d", handles[ ihandle ].thread,
- handles[ ihandle ].context );
-#endif
- handles[ ihandle ].thread = -1;
- handles[ ihandle ].context = UNOWNED_CONTEXT;
- InsertHandle( ihandle, &unowned_handles, status );
- }
-
-/* We've finished with the handles arrays, for the moment. */
- UNLOCK_MUTEX2;
-
-/* Check the supplied object pointer was valid. */
- if( ihandle != -1 ){
-
-/* The protected astManageLock function implements the public functions,
- astLock and astUnlock. */
- lstat = astManageLock( this, AST__UNLOCK, 0, &fail );
- if( astOK ) {
- if( lstat == 1 ) {
- if( report ) {
- if( fail == this ) {
- astError( AST__LCKERR, "astUnlock(%s): Failed to unlock the %s "
- "because it is locked by another thread (programming "
- "error).", status, astGetClass( this ),
- astGetClass( this ) );
-
- } else {
- astError( AST__LCKERR, "astUnlock(%s): Failed to unlock the %s "
- "because a %s contained within it is locked by another "
- "thread (programming error).", status,
- astGetClass( this ), astGetClass( this ),
- astGetClass( fail ) );
- }
- }
-
- } else if( lstat == 3 ) {
- astError( AST__LCKERR, "astUnlock(%s): Failed to unlock a POSIX mutex.", status,
- astGetClass( this ) );
-
- }
- }
- }
-
-/* End the error reporting context. If an error has occurred within this
- function, then this will display the deferred error messages so long
- as there was no error condition on entry to this function. If there
- was an error condition on entry, then the original status value will be
- re-instated. */
- astErrorEnd( &error_context );
-
-#endif
-}
-
-AstObject *astI2P_( int integer, int *status ) {
-/*
-*+
-* Name:
-* astI2P
-
-* Purpose:
-* Pack an integer Object ID into a pointer.
-
-* Type:
-* Public function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *astI2P( int integer )
-
-* Class Membership:
-* Object class function.
-
-* Description:
-* This function accepts an integer (int) value representing an
-* Object identifier and packs its bit pattern into a pointer value
-* (from which it may subsequently be retrieved using astP2I).
-*
-* These functions should be used to avoid any dependency on
-* integer-to-pointer conversions (given that the values are not
-* true pointers) which might affect the exchange of Object
-* identifier values with other languages, such as Fortran 77,
-* where they are stored as integers.
-
-* Parameters:
-* integer
-* The integer value to be stored.
-
-* Returned Value:
-* The resulting pointer value (which is not usually a valid C pointer).
-
-* Notes:
-* - This function does not perform error checking and does not
-* generate errors.
-* - This is a protected function in the sense that it is not
-* intended that external users should invoke it directly. It is
-* accessible from external code, however, in order that public
-* macros invoked from that code can make use of it.
-*-
-*/
-
-/* Local Variables: */
- IdUnion temp; /* Overlapping int and pointer */
-
-/* Clear the pointer value in the "temp" IdUnion and then set the
- integer part of it to the value to be stored. */
- temp.pointer = zero_ptr;
- temp.integer = integer;
-
-/* Return the resulting pointer value. */
- return temp.pointer;
-}
-
-MYSTATIC void InitContext( int *status ) {
-/*
-* Name:
-* InitContext
-
-* Purpose:
-* Initialise the first AST context level.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* void InitContext( int *status )
-
-* Class Membership:
-* Object member function.
-
-* Description:
-* This function initialises the first AST context level (the level
-* before any call to astBegin has been made). It should be invoked
-* once, before any use is made of context levels.
-
-* Parameters:
-* status
-* Pointer to the inherited status variable.
-
-* Parameters:
-* None.
-
-* Notes:
-* - This function does nothing after the first successful invocation.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Thread-specific global data */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to Thread-specific global data. */
- astGET_GLOBALS(NULL);
-
-/* Check that the active_handles array hasn't already been allocated. */
- if ( !active_handles ) {
-
-/* Allocate and initialise the "active_handles" array. */
-
- astBeginPM;
- active_handles = astMalloc( sizeof( int ) );
- astEndPM;
-
- if ( astOK ) active_handles[ 0 ] = -1;
- }
-}
-
-MYSTATIC void InsertHandle( int ihandle, int *head, int *status ) {
-/*
-* Name:
-* InsertHandle
-
-* Purpose:
-* Insert a Handle into a list.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* void InsertHandle( int ihandle, int *head, int *status )
-
-* Class Membership:
-* Object member function.
-
-* Description:
-* This function inserts a Handle structure into a doubly linked
-* list of such structures composed of elements drawn from the
-* "handles" array. The new list member is inserted in front of the
-* member previously occupying the "head of list" position.
-
-* Parameters:
-* ihandle
-* Offset in the "handles" array that identifies the handle to
-* be added to the list.
-* head
-* Address of an int which holds the offset in the "handles"
-* array of the element at the head of the list (or -1 if the
-* list is empty). This value will be updated to identify the
-* new list member.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function does not perform error chacking and does not
-* generate errors.
-* - The lists generated by this function use integer offsets into
-* the "handles" array for their links, rather than pointers. This
-* is because the array may be re-located in memory when it needs
-* to be extended, so pointers to its element would not remain
-* valid.
-* - The list elements are drawn from the "handles" array in the
-* first place so that they can be addressed by small integers (the
-* offset in the array). This allows references to Handles to be
-* encoded along with security information into an integer that is
-* sufficiently short to be exported to other languages
-* (e.g. Fortran) which might not be able to accommodate
-* full-length C pointers.
-*/
-
-
-#if defined(MEM_DEBUG)
- char buf[80];
- astHandleUse( ihandle, "about to be inserted into %s (%d)",
- HeadString( head, buf ), head );
- CheckList( head, status );
- CheckInList( ihandle, head, 0, status );
-#endif
-
-/* Check a head pointer was supplied (may not be if an error has
- occurred). */
- if( ! head ) return;
-
-/* If the list is empty, the sole new element points at itself. */
- if ( *head == -1 ) {
- handles[ ihandle ].flink = ihandle;
- handles[ ihandle ].blink = ihandle;
-
-/* Otherwise, insert the new element in front of the element at the
- head of the list. */
- } else {
- handles[ ihandle ].flink = *head;
- handles[ ihandle ].blink = handles[ *head ].blink;
- handles[ ( handles[ *head ].blink) ].flink = ihandle;
- handles[ *head ].blink = ihandle;
- }
-
-/* Update the list head to identify the new element. */
- *head = ihandle;
-
-#if defined(MEM_DEBUG)
- CheckList( head, status );
- astHandleUse( ihandle, "has been inserted into %s", buf );
-#endif
-}
-
-AstObject *astMakeId_( AstObject *this, int *status ) {
-/*
-*+
-* Name:
-* astMakeId
-
-* Purpose:
-* Issue an identifier for an Object.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *astMakeId( AstObject *this )
-
-* Class Membership:
-* Object member function.
-
-* Description:
-* This function takes a normal C pointer to an Object and
-* associates an identifier with it.
-
-* Parameters:
-* this
-* Pointer to an Object. Note that this function copies this
-* value (it is not cloned), so the caller should not annul the
-* pointer afterwards.
-
-* Returned Value:
-* The resulting identifier value.
-
-* Notes:
-* - An identifier value of zero will be returned and the supplied
-* Object pointer will be annulled if this function is invoked with
-* the global error status set or if it should fail for any reason.
-* - A zero identifier value will also be returned if a NULL object
-* pointer is supplied, but this will not provoke an error.
-* - This is a protected function in the sense that it is not
-* intended that external users should invoke it directly. It is
-* accessible from external code, however, in order that public
-* macros invoked from that code can make use of it.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Thread-specific global data */
- AstObject *id; /* ID value to return */
- int ihandle; /* Handle offset */
-
-/* Initialise. */
- id = astI2P( 0 );
- ihandle = 0;
-
-/* Check the global error status. */
- if ( astOK ) {
-
-/* Get a pointer to Thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Gain exclusive access to the handles array. */
- LOCK_MUTEX2;
-
-/* If a non-NULL Object pointer was given, we must obtain a Handle
- structure to associate with it (otherwise a zero identifier value
- is returned without error). */
- if ( this ) {
-
-/* If the free Handles list is not empty, obtain a Handle from it. */
- if ( free_handles != -1 ) {
- ihandle = free_handles;
- RemoveHandle( ihandle, &free_handles, status );
-
-/* Otherwise, allocate a new Handle by extending the "handles" array
- and using the offset of the new element. */
- } else {
-
- astBeginPM;
- handles = astGrow( handles, nhandles + 1, sizeof( Handle ) );
- astEndPM;
-
- if ( astOK ) {
- ihandle = nhandles++;
-
- handles[ ihandle ].ptr = NULL;
- handles[ ihandle ].context = INVALID_CONTEXT;
- handles[ ihandle ].check = 0;
- handles[ ihandle ].flink = -1;
- handles[ ihandle ].blink = -1;
-#if defined(THREAD_SAFE)
- handles[ ihandle ].thread = 0;
-#endif
-
-#if defined(MEM_DEBUG)
- handles[ ihandle ].id = 0;
- handles[ ihandle ].vtab = NULL;
-#endif
- }
- }
-
-/* If the first AST context level has not yet been initialised, invoke
- InitContext to initialise it and allocate memory for the
- "active_handles" array which stores context information. */
- if ( astOK ) {
- if ( !active_handles ) InitContext( status );
-
-/* Store the Object pointer and current context level in the Handle. */
- if ( astOK ) {
- handles[ ihandle ].ptr = this;
- handles[ ihandle ].context = context_level;
-#if defined(THREAD_SAFE)
- handles[ ihandle ].thread = AST__THREAD_ID;
-#endif
-
-/* Store extra debugging information in the handle if enabled */
-#if defined(MEM_DEBUG)
- handles[ ihandle ].id = astMemoryId( this );
- handles[ ihandle ].vtab = this->vtab;
- astHandleUse( ihandle, "associated with a %s (id %d)",
- astGetClass( this ), astMemoryId( this ));
-#endif
-
-/* Insert the Handle into the active Handles list for the current
- context level. */
- InsertHandle( ihandle, &active_handles[ context_level ], status );
-
-/* Associate an identifier value with the Handle. */
- id = AssocId( ihandle, status );
-
-/* If an error occurred, clean up by annulling the Handle. This
- ensures that the Object pointer is annulled and returns the unused
- Handle to the Free Handle list. */
- if ( !astOK ) {
- AnnulHandle( ihandle, status );
- this = NULL;
- }
-
-/* If the Handle wasn't used (because of an earlier error), return it
- to the free Handles list. */
- } else {
- InsertHandle( ihandle, &free_handles, status );
- }
- }
- }
- UNLOCK_MUTEX2;
- }
-
-/* If a bad status value was either supplied or generated within this
- function, then annul the supplied pointer (unless it is NULL). */
- if ( !astOK && this ) (void) astAnnul( this );
-
-/* Return the identifier value. */
- return id;
-}
-
-AstObject *astMakePointer_( AstObject *this_id, int *status ) {
-/*
-*+
-* Name:
-* astMakePointer
-
-* Purpose:
-* Obtain a true C pointer from an Object identifier.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *astMakePointer( AstObject *this )
-
-* Class Membership:
-* Object class function.
-
-* Description:
-* This function accepts an external Object identifier and returns
-* a true C Object pointer that may be de-referenced to access the
-* Object's data and methods.
-
-* Parameters:
-* this
-* The identifier value.
-
-* Returned Value:
-* The true C pointer value.
-
-* Notes:
-* - In a thread-safe context, an error is reported if the supplied
-* Object has not been locked by the calling thread (using astLock)
-* prior to invoking this function.
-* - The object reference count is not modified by this function,
-* so the returned pointer should not be annulled by the caller.
-* - Typically, this function should be used whenever a public
-* function must accept identifier values directly (rather than
-* having them translated automatically into pointers during
-* argument validation by the astCheck<Class> range of functions).
-* - Note that this function will NOT accept a true C pointer as an
-* argument, even when invoked from internal code (with astCLASS
-* defined). An identifier value MUST be supplied, and an error
-* will result if it is not associated with an active Object.
-* - This function attempts to execute even if the global error
-* status is set, but no further error report will be made if it
-* subsequently fails under these circumstances.
-* - This is a protected function in the sense that it is not
-* intended that external users should invoke it directly. It is
-* accessible from external code, however, in order that public
-* macros invoked from that code can make use of it.
-*-
-*/
-
-/* Local Variables: */
- AstObject *ptr; /* Pointer value to return */
- int ihandle; /* Handle offset in "handles" array */
-
-/* Initialise. */
- ptr = NULL;
-
-/* Gain exclusive access to the handles array. */
- LOCK_MUTEX2;
-
-/* Validate the identifier supplied and derive the Handle offset. */
- ihandle = CheckId( this_id, 1, status );
-
-/* If the identifier was valid, extract the Object pointer from the
- Handle. */
- if ( ihandle != -1 ) ptr = handles[ ihandle ].ptr;
-
- UNLOCK_MUTEX2;
-
-/* Return the result. */
- return ptr;
-}
-
-AstObject *astMakePointer_NoLockCheck_( AstObject *this_id, int *status ) {
-/*
-*+
-* Name:
-* astMakePointer_NoLockCheck
-
-* Purpose:
-* Obtain a true C pointer from an Object identifier.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *astMakePointer_NoLockCheck( AstObject *this )
-
-* Class Membership:
-* Object class function.
-
-* Description:
-* This function accepts an external Object identifier and returns
-* a true C Object pointer that may be de-referenced to access the
-* Object's data and methods.
-*
-* It is identicial to astMakePointer except that it does not check
-* that the supplied Object is locked by the running thread.
-
-* Parameters:
-* this
-* The identifier value.
-
-* Returned Value:
-* The true C pointer value.
-
-* Notes:
-* - The object reference count is not modified by this function,
-* so the returned pointer should not be annulled by the caller.
-* - Typically, this function should be used whenever a public
-* function must accept identifier values directly (rather than
-* having them translated automatically into pointers during
-* argument validation by the astCheck<Class> range of functions).
-* - Note that this function will NOT accept a true C pointer as an
-* argument, even when invoked from internal code (with astCLASS
-* defined). An identifier value MUST be supplied, and an error
-* will result if it is not associated with an active Object.
-* - This function attempts to execute even if the global error
-* status is set, but no further error report will be made if it
-* subsequently fails under these circumstances.
-* - This is a protected function in the sense that it is not
-* intended that external users should invoke it directly. It is
-* accessible from external code, however, in order that public
-* macros invoked from that code can make use of it.
-*-
-*/
-
-/* Local Variables: */
- AstObject *ptr; /* Pointer value to return */
- int ihandle; /* Handle offset in "handles" array */
-
-/* Initialise. */
- ptr = NULL;
-
-/* Gain exclusive access to the handles array. */
- LOCK_MUTEX2;
-
-/* Validate the identifier supplied and derive the Handle offset. */
- ihandle = CheckId( this_id, 0, status );
-
-/* If the identifier was valid, extract the Object pointer from the
- Handle. */
- if ( ihandle != -1 ) ptr = handles[ ihandle ].ptr;
-
- UNLOCK_MUTEX2;
-
-/* Return the result. */
- return ptr;
-}
-
-int astP2I_( AstObject *pointer, int *status ) {
-/*
-*+
-* Name:
-* astP2I
-
-* Purpose:
-* Extract an integer Object ID from a pointer.
-
-* Type:
-* Public function.
-
-* Synopsis:
-* #include "object.h"
-* int astP2I( AstObject *pointer )
-
-* Class Membership:
-* Object class function.
-
-* Description:
-* This function retrieves an integer (int) value representing an
-* Object identifier from a pointer value (into which it has
-* previously been packed using astI2P).
-*
-* These functions should be used to avoid any dependency on
-* integer-to-pointer conversions (given that the values are not
-* true pointers) which might affect the exchange of Object
-* identifier values with other languages, such as Fortran 77,
-* where they are stored as integers.
-
-* Parameters:
-* pointer
-* The pointer value into which the ID has previously been packed.
-
-* Returned Value:
-* The extracted Object identifier value as an integer (int).
-
-* Notes:
-* - This function does not perform error checking and does not
-* generate errors.
-* - This is a protected function in the sense that it is not
-* intended that external users should invoke it directly. It is
-* accessible from external code, however, in order that public
-* macros invoked from that code can make use of it.
-*-
-*/
-
-/* Local Variables: */
- IdUnion temp; /* Overlapping int and pointer */
-
-/* Store the pointer value supplied. */
- temp.pointer = pointer;
-
-/* Return the integer part of it. */
- return temp.integer;
-}
-
-MYSTATIC void RemoveHandle( int ihandle, int *head, int *status ) {
-/*
-* Name:
-* RemoveHandle
-
-* Purpose:
-* Remove a Handle from a list.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* void RemoveHandle( int ihandle, int *head )
-
-* Class Membership:
-* Object member function.
-
-* Description:
-* This function removes a Handle structure from a doubly linked
-* list of such structures composed of elements drawn from the
-* "handles" array. The "head of list" position is updated if
-* necessary.
-
-* Parameters:
-* ihandle
-* Offset in the "handles" array that identifies the Handle to
-* be removed from the list (note that the Handle must actually
-* be in the list, although this function does not check this).
-* head
-* Address of an int which holds the offset in the "handles"
-* array of the element at the head of the list. This value will
-* be updated if necessary to identify the new list head (or set
-* to -1 if removing the Handle causes the list to become
-* empty).
-
-* Notes:
-* - This function does not perform error chacking and does not
-* generate errors.
-* - See the InsertHandle function for details of how and why lists
-* of Handles are constructed.
-*/
-
-
-#if defined(MEM_DEBUG)
- char buf[80];
- astHandleUse( ihandle, "about to be removed from %s", HeadString( head, buf ) );
- CheckList( head, status );
- CheckInList( ihandle, head, 1, status );
-#endif
-
-/* Check a head pointer was supplied (may not be if an error has
- occurred). */
- if( ! head ) return;
-
-/* Remove the Handle from the list by re-establishing links between
- the elements on either side of it. */
- handles[ ( handles[ ihandle ].blink ) ].flink = handles[ ihandle ].flink;
- handles[ ( handles[ ihandle ].flink ) ].blink = handles[ ihandle ].blink;
-
-/* If the element removed was at the head of the list, update the head
- of list offset to identify the following element. */
- if ( ihandle == *head ) {
- *head = handles[ ihandle ].flink;
-
-/* If the head of list still identifies the removed element, then note
- that the list is now empty. */
- if ( *head == ihandle ) *head = -1;
- }
-
-/* Make the removed element point at itself. */
- handles[ ihandle ].flink = ihandle;
- handles[ ihandle ].blink = ihandle;
-
-#if defined(MEM_DEBUG)
- astHandleUse( ihandle, "has been removed from %s", buf );
- CheckList( head, status );
-#endif
-}
-
-void astSetId_( void *this_id_void, const char *settings, ... ) {
-/*
-* Name:
-* astSetId_
-
-* Purpose:
-* Set values for an Object's attributes via an identifier.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* void astSetId_( AstObject *this, const char *settings, ... )
-
-* Class Membership:
-* Object member function.
-
-* Description:
-* This function implements the axternal interface to the astSet
-* method (q.v.). It accepts an Object identifier, but otherwise
-* behaves identically to astSet.
-
-* Parameters:
-* this
-* Object identifier.
-* settings
-* Pointer to a null-terminated string containing a
-* comma-separated list of attribute settings.
-* ...
-* Optional arguments which supply values to be substituted for
-* any "printf"-style format specifiers that appear in the
-* "settings" string.
-
-* Notes:
-* - Because this function has a variable argument list, it is
-* invoked by a macro that evaluates to a function pointer (not a
-* function invocation) and no checking or casting of arguments is
-* performed before the function is invoked. Because of this, the
-* Object identifier is of type (void *) and is converted and
-* validated within the function itself.
-*/
-
-/* Local Variables: */
- AstObject *this; /* Pointer to the Object structure */
- int *status; /* Pointer to inherited status variable */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the integer holding the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain the Object pointer from the ID supplied and validate the
- pointer to ensure it identifies a valid Object. */
- this = astCheckObject( astMakePointer( this_id_void ) );
- if ( astOK ) {
-
-/* Obtain the variable argument list and pass all arguments to the
- astVSet method for interpretation. */
- va_start( args, settings );
- astVSet( this, settings, NULL, args );
- va_end( args );
- }
-}
-
-int astThreadId_( AstObject *this_id, int ptr, int *status ) {
-/*
-c++
-* Name:
-* astThread
-
-* Purpose:
-* Determine the thread that owns an Object.
-
-* Type:
-* Public function.
-
-* Synopsis:
-* #include "object.h"
-* int astThread( AstObject *this, int ptr )
-
-* Class Membership:
-* Object method.
-
-* Description:
-* Returns an integer that indicates whether the supplied Object (or
-* Object pointer) is currently unlocked, or is currently locked by
-* the running thread, or another thread.
-
-* Parameters:
-* this
-* Pointer to the Object to be checked.
-* ptr
-* If non-zero, returns information about the supplied Object
-* pointer, rather than the Object structure itself. See "Object
-* Pointers and Structures" below.
-
-* Returned Value:
-* astThread()
-* A value of AST__UNLOCKED is returned if the Object (or pointer)
-* is currently unlocked (i.e. has been unlocked using astUnlock
-* but has not yet been locked using astLock). A value of
-* AST__RUNNING is returned if the Object (or pointer) is currently
-* locked by the running thread. A value of AST__OTHER is returned
-* if the Object (or pointer) is currently locked by the another
-* thread.
-
-* Object Pointers and Structures:
-* At any one time, an AST Object can have several distinct pointers,
-* any one of which can be used to access the Object structure. For
-* instance, the astClone function will produce a new distinct pointer
-* for a given Object. In fact, an AST "pointer" is not a real pointer
-* at all - it is an identifier for a "handle" structure, encoded to
-* make it look like a pointer. Each handle contains (amongst othere
-* things) a "real" pointer to the Object structure. This allows more
-* than one handle to refer to the same Object structure. So when you
-* call astClone (for instance) you get back an identifier for a new
-* handle that refers to the same Object as the supplied handle.
-*
-* In order to use an Object for anything useful, it must be locked
-* for use by the running thread (either implicitly at creation or
-* explicitly using astLock). The identity of the thread is stored in
-* both the Object structure, and in the handle that was passed to
-* astLock (or returned by the constructor function). Thus it is
-* possible for a thread to have active pointers for Objects that are
-* currently locked by another thread. In general, if such a pointer is
-* passed to an AST function an error will be reported indicating that
-* the Object is currently locked by another thread. The two exceptions
-* to this is that astAnnul can be used to annull such a pointer, and
-* this function can be used to return information about the pointer.
-*
-* The other practical consequence of this is that when astEnd is
-* called, all active pointers currently owned by the running thread
-* (at the current context level) are annulled. This includes pointers
-* for Objects that are currently locked by other threads.
-*
-* If the "ptr" parameter is zero, then the returned value describes
-* the Object structure itself. If "ptr" is non-zero, then the returned
-* value describes the supplied Object pointer (i.e. handle), rather
-* than the Object structure.
-
-* Notes:
-* - This function attempts to execute even if the global error
-* status is set, but no further error report will be made if it
-* subsequently fails under these circumstances.
-* - This function is only available in the C interface.
-* - This function always returns AST__RUNNING if the AST library has
-* been built without POSIX thread support (i.e. the "-with-pthreads"
-* option was not specified when running the "configure" script).
-c--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Thread-specific global data */
- int result; /* The returned value */
-
-#if defined(THREAD_SAFE)
-
-/* More local Variables: */
- AstObject *this;
- int ihandle;
- int check;
-
-/* Ensure global variables are accessable. */
- astGET_GLOBALS(NULL);
-#endif
-
-/* Initialise the returned value */
- result = AST__RUNNING;
-
-/* Nothing more to do if AST was not build with thread support. */
-#if defined(THREAD_SAFE)
-
-/* If the ownership of the handle is being queried... */
- if( ptr ) {
-
-/* Lock the mutex that guards access to the handles array */
- LOCK_MUTEX2;
-
-/* Check the supplied object identifier is valid and get the
- corresponding index into the handles array. */
- ihandle = CheckId( this_id, 1, status );
- if( ihandle != -1 ) {
-
-/* Set the returned value on the basis of the threa didentifier stored in
- the handle structure. */
- if( handles[ ihandle ].thread == -1 ) {
- result = AST__UNLOCKED;
- } else if( handles[ ihandle ].thread != AST__THREAD_ID ) {
- result = AST__OTHER;
- }
- }
-
-/* Unlock the mutex that guards access to the handles array */
- UNLOCK_MUTEX2;
-
-/* Otherwise, the ownership of the Object is being queried. Obtain the
- Object pointer from the ID supplied and validate the pointer to ensure
- it identifies a valid Object (this generates an error if it doesn't).
- Note, we use the "astMakePointer_NoLockCheck", since the usual
- "astMakePointer" macro invokes astCheckLock to report an error if the
- Object is not currently locked by the calling thread. */
- } else if( astIsAObject( this = astMakePointer_NoLockCheck( this_id ) ) ) {
-
-/* Determine which thread (if any) has the object locked, and set an
- appropriate return value. */
- check = astManageLock( this, AST__CHECKLOCK, 0, NULL );
-
- if( check == 5 ) {
- result = AST__OTHER;
- } else if( check == 6 ) {
- result = AST__UNLOCKED;
- }
- }
-
-#endif
-
-/* Return the result. */
- return result;
-}
-
-int astVersion_( int *status ) {
-/*
-*++
-* Name:
-c astVersion
-f AST_VERSION
-
-* Purpose:
-* Return the version of the AST library being used.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "object.h"
-c int astVersion
-f RESULT = AST_VERSION()
-
-* Class Membership:
-* Object class function.
-
-* Description:
-c This macro invokes a function which
-f This function
-* returns an integer representing the version of the AST library
-* being used. The library version is formatted as a string such as
-* "2.0-7" which contains integers representing the "major version" (2),
-* the "minor version" (0) and the "release" (7). The integer returned
-* by this function combines all three integers together into a single
-* integer using the expresion:
-*
-* (major version)*1E6 + (minor version)*1E3 + (release)
-
-* Returned Value:
-c astVersion
-f AST_VERSION = INTEGER
-* The major version, minor version and release numbers for the AST
-* library, encoded as a single integer.
-
-* Applicability:
-* Object
-c This macro applies to all Objects.
-f This routine applies to all Objects.
-
-*--
-*/
-
- return (int) AST__VMAJOR*1E6 + AST__VMINOR*1E3 + AST__RELEASE;
-}
-
-int astEscapes_( int new_value, int *status ) {
-/*
-*++
-* Name:
-c astEscapes
-f AST_ESCAPES
-
-* Purpose:
-* Control whether graphical escape sequences are included in strings.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "object.h"
-c int astEscapes( int new_value )
-f RESULT = AST_ESCAPES( NEWVAL, STATUS )
-
-* Class Membership:
-* Object class function.
-
-* Description:
-* The Plot class defines a set of escape sequences which can be
-* included within a text string in order to control the appearance of
-* sub-strings within the text. See the Escape attribute for a
-* description of these escape sequences. It is usually inappropriate
-* for AST to return strings containing such escape sequences when
-* called by application code. For instance, an application which
-* displays the value of the Title attribute of a Frame usually does
-* not want the displayed string to include potentially long escape
-* sequences which a human read would have difficuly interpreting.
-* Therefore the default behaviour is for AST to strip out such escape
-* sequences when called by application code. This default behaviour
-* can be changed using this function.
-
-* Parameters:
-c new_value
-f NEWVAL = INTEGER (Given)
-* A flag which indicates if escapes sequences should be included
-* in returned strings. If zero is supplied, escape sequences will
-* be stripped out of all strings returned by any AST function. If
-* a positive value is supplied, then any escape sequences will be
-* retained in the value returned to the caller. If a negative
-* value is supplied, the current value of the flag will be left
-* unchanged.
-
-* Returned Value:
-c astEscapes
-f AST_ESCAPES = INTEGER
-* The value of the flag on entry to this function.
-
-* Applicability:
-* Object
-c This macro applies to all Objects.
-f This routine applies to all Objects.
-
-* Notes:
-* - This function also controls whether the
-c astStripEscapes
-f AST_STRIPESCAPES
-* function removes escape sequences from the supplied string, or
-* returns the supplied string without change.
-* - This function attempts to execute even if an error has already
-* occurred.
-
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS
- int old_val;
-
-/* Get a pointer to Thread-specific global data. */
- astGET_GLOBALS(NULL);
-
-/* Save the old value. */
- old_val = retain_esc;
-
-/* Set the new value. */
- if( new_value > 0 ) {
- retain_esc = 1;
-
- } else if( new_value == 0 ) {
- retain_esc = 0;
- }
-
-/* Return the old value. */
- return old_val;
-}
-
-
-#if defined(MEM_DEBUG)
-
-/* Check each handle in a list is uniquely connected to one other handle
- in both the forward and backward directions. */
-
-void CheckList( int *head, int *status ) {
- int ok;
- int ihandle;
- char buf[200];
- astDECLARE_GLOBALS
- if( !astOK ) return;
-
- astGET_GLOBALS(NULL);
-
- ok = 1;
- if ( *head != -1 ) {
- ihandle = *head;
- if( handles[ handles[ ihandle ].blink ].flink != ihandle ||
- handles[ handles[ ihandle ].flink ].blink != ihandle ) {
- ok = 0;
-
- } else {
- if( CheckThread( ihandle, head, status ) ) {
- ihandle= handles[ *head ].blink;
- while( ihandle != *head ) {
- if( handles[ handles[ ihandle ].blink ].flink != ihandle ||
- handles[ handles[ ihandle ].flink ].blink != ihandle ||
- CheckThread( ihandle, head, status ) == 0 ) {
- ok = 0;
- break;
- }
- ihandle= handles[ ihandle ].blink;
- }
- }
- }
- }
-
- if( !ok ) {
- printf("CheckList error in %s\n", HeadString( head, buf ) );
- printf(" Central handle: %s\n", HandleString( ihandle, buf ) );
-
- if( handles[ handles[ ihandle ].blink ].flink != ihandle ) {
- printf(" Central handle->blink: %s\n",
- HandleString( handles[ ihandle ].blink, buf ) );
- printf(" Central handle->blink->flink: %s\n",
- HandleString( handles[ handles[ ihandle ].blink ].flink, buf ) );
- }
-
- if( handles[ handles[ ihandle ].flink ].blink != ihandle ) {
- printf(" Central handle->flink: %s\n",
- HandleString( handles[ ihandle ].flink, buf ) );
- printf(" Central handle->flink->blink: %s\n",
- HandleString( handles[ handles[ ihandle ].flink ].blink, buf ) );
- }
- }
-
-}
-
-
-/* Check if a specified handle is, or is not, in a given list of handles. */
-
-void CheckInList( int ihandle, int *head, int in, int *status ){
- char list[80], buf[200];
- int found = 0;
- if( !astOK ) return;
-
- if ( *head != -1 ) {
- if( ihandle == *head ) {
- found = 1;
- } else {
- if( CheckThread( ihandle, head, status ) ) {
- int jhandle= handles[ *head ].blink;
- while( jhandle != *head ) {
- if( ihandle == jhandle ) {
- found = 1;
- break;
- }
- jhandle= handles[ jhandle ].blink;
- }
- }
- }
- }
-
- if( in && !found ) {
- printf("Error: Handle %s not in %s\n", HandleString( ihandle, buf ),
- HeadString( head, list ) );
- } else if( !in && found ) {
- printf("Error: Handle %s is in %s\n", HandleString( ihandle, buf ),
- HeadString( head, list ) );
- }
-
-}
-
-/* Check that a handle is owned by the currently executing thread. */
-
-int CheckThread( int ihandle, int *head, int *status ) {
- int result = 1;
-
-#if defined(THREAD_SAFE)
-
- char buf[200];
- astDECLARE_GLOBALS
- if( !astOK ) return result;
-
- astGET_GLOBALS(NULL);
-
- if( *head == unowned_handles ) {
- if( handles[ ihandle ].thread != -1 ) {
- printf("Handle %s has wrong thread: is %d, should "
- "be -1 (i.e. unowned)\n", HandleString( ihandle, buf ),
- handles[ ihandle ].thread );
-
- result = 0;
- }
-
- } else if( *head == free_handles ) {
- if( handles[ ihandle ].thread != -1 ) {
- printf("Handle %s has wrong thread: is %d, should "
- "be -1 (i.e. free)\n", HandleString( ihandle, buf ),
- handles[ ihandle ].thread );
- result = 0;
- }
-
- } else if( handles[ ihandle ].thread != AST__THREAD_ID ) {
- printf("Handle %s has wrong thread: is %d, should "
- "be %d\n", HandleString( ihandle, buf ),
- handles[ ihandle ].thread, AST__THREAD_ID );
- result = 0;
- }
-
-#endif
-
- return result;
-}
-
-void astWatchHandle_( int handle ){
- Watched_Handle = handle;
-}
-
-void astHandleUse_( int handle, const char *verb, ... ){
- va_list args;
- if( handle == Watched_Handle ) {
- va_start( args, verb );
- astHandleAlarm( verb, args );
- va_end( args );
- }
-}
-
-void astHandleAlarm_( const char *verb, va_list args ){
- char buff[200], hbuf[200];
- astDECLARE_GLOBALS
- astGET_GLOBALS(NULL);
-
- vsprintf( buff, verb, args );
-
-#if defined(THREAD_SAFE)
- printf( "astHandleAlarm: Handle %s %s (current thread is %d).\n\n",
- HandleString( Watched_Handle, hbuf ), buff, AST__THREAD_ID );
-#else
- printf( "astHandleAlarm: Handle %s %s.\n\n",
- HandleString( Watched_Handle, hbuf ), buff );
-#endif
-}
-
-MYSTATIC const char *HandleString( int ihandle, char *buf ){
-#if defined(THREAD_SAFE)
- astDECLARE_GLOBALS
- astGET_GLOBALS(NULL);
-
- if( ihandle >= 0 ) {
- sprintf( buf, "(index:%d v:%d c:%d t:%d i:%d cl:%s) [cur. thread: %d]",
- ihandle,
- handles[ ihandle ].check,
- handles[ ihandle ].context, handles[ ihandle ].thread,
- handles[ ihandle ].id,
- handles[ ihandle ].vtab ? handles[ ihandle ].vtab->class : "<none>",
- AST__THREAD_ID );
- } else {
- sprintf( buf, "(index:%d <invalid>) [cur. thread: %d]", ihandle,
- AST__THREAD_ID );
- }
-
-#else
- if( ihandle >= 0 ) {
- sprintf( buf, "(index:%d v:%d c:%d i:%d cl:%s)", ihandle,
- handles[ ihandle ].check,
- handles[ ihandle ].context, handles[ ihandle ].id,
- handles[ ihandle ].vtab ? handles[ ihandle ].vtab->class : "<none>" );
- } else {
- sprintf( buf, "(index:%d <invalid>)", ihandle );
- }
-#endif
- return buf;
-}
-
-MYSTATIC const char *HeadString( int *head, char *list ){
- int i;
- astDECLARE_GLOBALS
- astGET_GLOBALS(NULL);
-
- if( head == &free_handles ) {
- strcpy( list, "free_handles" );
-
-#if defined(THREAD_SAFE)
- } else if( head == &unowned_handles ) {
- strcpy( list, "unowned_handles" );
-#endif
-
- } else {
- *list = 0;
- for( i = 0; i <= context_level; i++ ) {
- if( *head == active_handles[ i ] ) {
- sprintf( list, "active_handles[%d]", i );
- break;
- }
- }
- if( *list == 0 ) sprintf( list, "unknown handles list with head %d",
- *head );
- }
- return list;
-}
-
-#endif
diff --git a/ast-5.3-1/object.h b/ast-5.3-1/object.h
deleted file mode 100644
index f0f0a52..0000000
--- a/ast-5.3-1/object.h
+++ /dev/null
@@ -1,1713 +0,0 @@
-#if !defined( OBJECT_INCLUDED ) /* Include this file only once */
-#define OBJECT_INCLUDED
-/*
-*++
-* Name:
-* object.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the Object class.
-
-* Invocation:
-* #include "object.h"
-
-* Description:
-* This include file defines the interface to the Object class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-
-* The Object class is the base class from which all other classes
-* in the AST library are derived. This class provides all the
-* basic Object behaviour and Object manipulation facilities
-* required throughout the library. There is no Object constructor,
-* however, as Objects on their own are not of much use.
-
-* Inheritance:
-* The Object base class does not inherit from any other class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* Class (string)
-* This is a read-only attribute containing the name of the
-* class to which an Object belongs.
-* ID (string)
-* An identification string which may be used to identify the
-* Object (e.g.) in debugging output, or when stored in an
-* external medium such as a data file. There is no restriction
-* on the string's contents. The default is an empty string.
-* Ident (string)
-* Like ID, this is an identification string which may be used
-* to identify the Object. Unlike ID, Ident is transferred when an
-* Object is copied.
-* UseDefs (int)
-* Should default values be used for unset attributes?
-* Nobject (integer)
-* This is a read-only attribute which gives the total number of
-* Objects currently in existence in the same class as the
-* Object given. It does not include Objects which belong to
-* derived (more specialised) classes. This value is mainly
-* intended for debugging, as it can be used to show whether
-* Objects which should have been deleted have, in fact, been
-* deleted.
-* ObjSize (int)
-* The in-memory size of the Object in bytes.
-* RefCount (integer)
-* This is a read-only Attribute which gives the "reference
-* count" (the number of active pointers) associated with an
-* Object. It is modified whenever pointers are created or
-* annulled (by astClone or astAnnul/astEnd for example) and
-* includes the initial pointer issued when the Object was
-* created. If the reference count for an Object falls to zero
-* as the result of annulling a pointer to it, then the Object
-* will be deleted.
-
-* Methods Over-Ridden:
-* None.
-
-* New Methods Defined:
-* Public:
-* astAnnul
-* Annul a pointer to an Object.
-* astClear
-* Clear attribute values for an Object.
-* astClone
-* Clone a pointer to an Object.
-* astCopy
-* Copy an Object.
-* astDelete
-* Delete an Object.
-* astExempt
-* Exempt an Object pointer from AST context handling
-* astExport
-* Export an Object pointer to an outer context.
-* astGet<X>, where <X> = C, D, F, I, L
-* Get an attribute value for an Object.
-* astImport
-* Import an Object pointer into the current context.
-* astSame
-* Return true if two pointers refer to the same object.
-* astSet
-* Set attribute values for an Object.
-* astSet<X>, where <X> = C, D, F, I, L
-* Set an attribute value for an Object.
-* astShow
-* Display a textual representation of an Object on standard output.
-* astTest
-* Test if an attribute value is set for an Object.
-* astTune
-* Get or set the value of a global AST tuning parameter.
-*
-* Protected:
-* astAnnulId
-* Annul an external ID for an Object (for use from protected code
-* which must handle external IDs).
-* astClearAttrib
-* Clear the value of a specified attribute for an Object.
-* astClearID
-* Clear the value of the ID attribute for an Object.
-* astClearIdent
-* Clear the value of the Ident attribute for an Object.
-* astCast
-* Return a deep copy of an object, cast into an instance of a
-* parent class.
-* astDump
-* Write an Object to a Channel.
-* astEqual
-* Are two Objects equivalent?
-* astGetAttrib
-* Get the value of a specified attribute for an Object.
-* astGetClass (deprecated synonym astClass)
-* Obtain the value of the Class attribute for an Object.
-* astGetID
-* Obtain the value of the ID attribute for an Object.
-* astGetIdent
-* Obtain the value of the Ident attribute for an Object.
-* astGetNobject
-* Obtain the value of the Nobject attribute for an Object.
-* astGetRefCount
-* Obtain the value of the RefCount attribute for an Object.
-* astSetAttrib
-* Set the value of a specified attribute for an Object.
-* astSetCopy
-* Declare a copy constructor for an Object.
-* astSetDelete
-* Declare a destructor for an Object.
-* astSetDump
-* Declare a dump function for an Object.
-* astSetVtab
-* Chaneg the virtual function table associated with an Object.
-* astSetID
-* Set the value of the ID attribute for an Object.
-* astSetIdent
-* Set the value of the Ident attribute for an Object.
-* astTestAttrib
-* Test if a specified attribute value is set for an Object.
-* astTestID
-* Test whether the ID attribute for an Object is set.
-* astTestIdent
-* Test whether the Ident attribute for an Object is set.
-* astVSet
-* Set values for an Object's attributes.
-
-* Other Class Functions:
-* Public:
-* astBegin
-* Begin a new AST context.
-* astEnd
-* End an AST context.
-* astIsAObject
-* Test class membership.
-* astVersion
-* Returns the AST library version number.
-* astEscapes
-* Remove escape sequences from returned text strings?
-* astP2I
-* Retrieve an int from a pointer.
-* astI2P
-* Pack an int into a pointer.
-*
-* Protected:
-* astCheckObject
-* Validate class membership.
-* astInitObject
-* Initialise an Object.
-* astInitObjectVtab
-* Initialise the virtual function table for the Object class.
-* astLoadObject
-* Load an Object.
-* astMakeId
-* Issue an identifier for an Object.
-* astMakePointer
-* Obtain a true C pointer from an Object identifier.
-
-* Macros:
-* Public:
-* AST__NULL
-* Null Object pointer value.
-* AST__VMAJOR
-* The AST library major version number.
-* AST__VMINOR
-* The AST library minor version number.
-* AST__RELEASE
-* The AST library release number.
-*
-* Protected:
-* astEQUAL
-* Compare two doubles for equality.
-* astMAX
-* Return maximum of two values.
-* astMIN
-* Return minimum of two values.
-* astMAKE_CHECK
-* Implement the astCheck<Class>_ function for a class.
-* astMAKE_CLEAR
-* Implement a method to clear an attribute value for a class.
-* astMAKE_GET
-* Implement a method to get an attribute value for a class.
-* astMAKE_ISA
-* Implement the astIsA<Class>_ function for a class.
-* astMAKE_SET
-* Implement a method to set an attribute value for a class.
-* astMAKE_TEST
-* Implement a method to test if an attribute has been set for a
-* class.
-* astMEMBER
-* Locate a member function.
-
-* Type Definitions:
-* Public:
-* AstObject
-* Object type.
-*
-* Protected:
-* AstObjectVtab
-* Object virtual function table type.
-
-* Feature Test Macros:
-* AST_CHECK_CLASS
-* If the AST_CHECK_CLASS macro is defined, then Object class
-* checking is enabled for all internal function invocations
-* within the AST library. Otherwise, this checking is
-* omitted. This macro should normally be defined as a compiler
-* option during library development and debugging, but left
-* undefined for software releases, so as to improve
-* peformance. Class checking by the AST public interface is not
-* affected by this macro.
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-* astFORTRAN77
-* If the astFORTRAN77 macro is defined, reporting of error
-* context information is suppressed. This is necessary when
-* implementing foreign language interfaces to the AST library, as
-* otherwise the file names and line numbers given would refer
-* to the interface implementation rather than the user's own
-* code.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 30-JAN-1996 (RFWS):
-* Original version.
-* 19-APR-1996 (RFWS):
-* Added macros for implementing attribute access methods.
-* 3-JUL-1996 (RFWS):
-* Added new definitions to support the external interface.
-* 10-SEP-1996 (RFWS):
-* Added loader and related facilities.
-* 30-MAY-1997 (RFWS):
-* Add the ID attribute.
-* 14-JUL-1997 (RFWS):
-* Add astExempt function.
-* 20-JAN-1998 (RFWS):
-* Make the astClear and astVSet methods virtual.
-* 15-SEP-1999 (RFWS):
-* Made the astAnnulId function accessible to protected code.
-* 3-APR-2001 (DSB):
-* Added Ident attribute.
-* 8-JAN-2003 (DSB):
-* Added protected astInitObjectVtab method.
-* 30-APR-2003 (DSB):
-* Added macros AST__VMAJOR, AST__VMINOR and AST__RELEASE.
-* Added astVersion function.
-* 7-FEB-2004 (DSB):
-* Added astEscapes function.
-* 11-MAR-2005 (DSB):
-* Added UseDefs attribute.
-* 7-FEB-2006 (DSB):
-* Added astTune function.
-* 14-FEB-2006 (DSB):
-* Added ObjSize attribute.
-* 23-FEB-2006 (DSB):
-* Moved AST__TUNULL from this file to memory.h.
-* 10-MAY-2006 (DSB):
-* Added astEQUAL, astMAX and astMIN.
-* 26-MAY-2006 (DSB):
-* Make all system includes unconditional, so that makeh is not
-* confused when creating ast.h.
-* 22-JUN-2007 (DSB):
-* - Make astVSet return a pointer to dynamic memory holding the
-* expanded setting string.
-* - Add ast astSetVtab and astCast.
-* 22-APR-2008 (DSB):
-* Added astSame.
-*--
-*/
-
-/* Include files. */
-/* ============== */
-/* Configuration results. */
-/* ---------------------- */
-#include <config.h>
-
-/* Interface definitions. */
-/* ---------------------- */
-#include "error.h" /* Error reporting facilities */
-#include "version.h" /* Version number macros */
-
-/* C header files. */
-/* --------------- */
-#include <stddef.h>
-#include <stdarg.h>
-#include <float.h>
-#include <stdio.h>
-
-#if defined(THREAD_SAFE)
-#include <pthread.h>
-#endif
-
-/* Macros. */
-/* ======= */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Set to "1" (yes) or "0" (no) to indicate if AST was build with threads
- support. */
-#define AST__THREADSAFE 1
-
-#if defined(astCLASS )
-#define AST__GETATTRIB_BUFF_LEN 50 /* Length of string returned by GetAttrib. */
-#define AST__ASTGETC_MAX_STRINGS 50 /* Number of string values to buffer within astGetC */
-
-/* Values supplied to astManageLock */
-#define AST__LOCK 1 /* Lock the object */
-#define AST__UNLOCK 2 /* Unlock the object */
-#define AST__CHECKLOCK 3 /* Check if the object is locked */
-
-/* Values returned by astThread */
-#define AST__UNLOCKED 1 /* Object is unlocked */
-#define AST__RUNNING 2 /* Object is locked by the running thread */
-#define AST__OTHER 3 /* Object is locked by another thread */
-
-#endif
-
-/* Value that indicates that two classes are not in direct line from each
- other. */
-#if defined(astCLASS )
-#define AST__COUSIN -1000000
-#endif
-
-/*
-*+
-* Name:
-* astINVOKE
-
-* Type:
-* Protected macro.
-
-* Purpose:
-* Invoke an AST function.
-
-* Synopsis:
-* #include "object.h"
-* astINVOKE(rettype,function)
-
-* Class Membership:
-* Defined by the Object class.
-
-* Description:
-* This macro expands to an invocation of an AST function, together
-* with any additional actions required to support it. The actual
-* expansion depends on whether the macro is expanded in internal
-* code (astCLASS defined) or external code (astCLASS undefined)
-* and it therefore hides the differences between these two
-* interfaces.
-
-* Parameters:
-* rettype
-* A character to indicate the type of result returned by the function:
-*
-* V
-* The function returns a value (including void or a pointer
-* value, but excluding an Object pointer). astINVOKE will
-* return the value unchanged.
-* O
-* The function returns an Object pointer. astINVOKE will
-* convert it to an Object identifier if necessary.
-* F
-* The function returns a function pointer. astINVOKE will
-* return it unchanged. This is typically used when the
-* function has a variable argument list. In this case the
-* function name is passed to astINVOKE without its argument
-* list and a pointer to the function is returned which can
-* then be supplied with an argument list. This avoids the
-* need to define a macro with a variable number of arguments
-* (which isn't allowed).
-* function
-* A normal invocation of the function returning the required
-* result. In the case of a variable argument list, the
-* argument list should be omitted so that the function is not
-* invoked but a function pointer is returned that may then be
-* used to invoke it.
-
-* Examples:
-* #define astGetNobject(this) \
-* astINVOKE(V,astGetNobject_(astCheckObject(this)))
-* Defines a macro to invoke the astGetNobject_ function which
-* returns an int.
-* #define astClone(this) \
-* astINVOKE(O,astClone_(astCheckObject(this)))
-* Defines a macro to invoke the astClone_ function which
-* returns an Object pointer.
-* #define astSet astINVOKE(F,astSet_)
-* Defines a macro to invoke the astSet_ function which has a
-* variable argument list and returns void. The macro result is
-* a pointer to the astSet_ function. This function must perform
-* its own argument validation, as (e.g) astCheckObject cannot
-* be invoked on its arguments via a macro.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave
-* any white space around the macro arguments.
-*-
-*/
-
-/* Define astINVOKE, which records the current file and line number
- (in case of error) using astAt, and then invokes the function
- supplied as an argument of the astRetV_, astRetO_ or astRetF_
- macro.
-
- Suppress reporting of the file and line number from internal code
- and from foreign language interfaces by not using astAt in these
- cases. */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define astINVOKE(rettype,function) astRet##rettype##_(function)
-#else
-#define astINVOKE(rettype,function) \
-astERROR_INVOKE(astRet##rettype##_(function))
-#endif
-
-/* astRetF_ and astRetV_ currently do nothing. */
-#define astRetF_(x) (x)
-#define astRetV_(x) (x)
-
-/* However, astRetO_ converts a pointer to an ID if necessary. */
-#if defined(astCLASS)
-#define astRetO_(x) ((void *)(x))
-#else
-#define astRetO_(x) ((void *)astMakeId_((AstObject *)(x),STATUS_PTR))
-#endif
-
-/*
-*+
-* Name:
-* astINVOKE_CHECK
-* astINVOKE_ISA
-
-* Type:
-* Protected macros.
-
-* Purpose:
-* Invoke the astCheck<Class>_ and astIsA<Class>_ functions.
-
-* Synopsis:
-* #include "object.h"
-* astINVOKE_CHECK(class,this,force)
-* astINVOKE_ISA(class,this)
-
-* Class Membership:
-* Defined by the Object class.
-
-* Description:
-* These macros expand to invocations of the standard
-* astCheck<Class>_ and astIsA<Class>_ functions for a class.
-
-* Parameters:
-* class
-* The name (not the type) of the class for which the function
-* is to be invoked.
-* this
-* The "this" argument (the Object pointer) to be passed to the
-* function.
-* force
-* Type checking takes time, and so can be disabled within the
-* protected context in order to save time. Setting "force" to
-* zero causes the astINVOKE_CHECK macro to skip the class check
-* in a protected context (it assumes that AST "knows what it is
-* doing"). Setting "force" to a non-zero value forces the class
-* check even in a protected context.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave
-* any white space around the macro arguments.
-*-
-*/
-
-/* For the public interface (and also internally if AST_CHECK_CLASS is
- defined), define astINVOKE_CHECK to invoke the astCheck<Class>
- function. */
-#if !defined(astCLASS) || defined(AST_CHECK_CLASS)
-#define astINVOKE_CHECK(class,this,force) \
-astCheck##class##_((Ast##class *)astEnsurePointer_(this),astGetStatusPtr)
-
-/* For the internal interface, astINVOKE_CHECK omits the
- astCheck<class> function (unless AST_CHECK_CLASS is defined). */
-#else
-
-#define astINVOKE_CHECK(class,this,force) ( (force) ? \
- ( astCheck##class##_((Ast##class *)astEnsurePointer_(this),astGetStatusPtr) ) : \
- ( (Ast##class *) astEnsurePointer_(this) ) )
-
-#endif
-
-/* Define astINVOKE_ISA to invoke the astIsA<Class> function. */
-#if defined(astCLASS) /* Protected */
-#define astINVOKE_ISA(class,this) \
-astIsA##class##_((const Ast##class *)(this),status)
-#else /* Public */
-#define astINVOKE_ISA(class,this) \
-astINVOKE(V,astIsA##class##_((const Ast##class *)astEnsurePointer_(this),astGetStatusPtr))
-#endif
-
-/* The astEnsurePointer_ macro ensures a true C pointer, converting
- from an ID if necessary. */
-#if defined(astCLASS) /* Protected */
-#define astEnsurePointer_(x) ((void *)(x))
-#else /* Public */
-#define astEnsurePointer_(x) ((void *)astCheckLock_(astMakePointer_((AstObject *)(x),STATUS_PTR),STATUS_PTR))
-#endif
-
-#if defined(astCLASS) /* Protected */
-/*
-*+
-* Name:
-* astMAKE_CHECK
-
-* Type:
-* Protected macro.
-
-* Purpose:
-* Implement the astCheck<Class>_ function for a class.
-
-* Synopsis:
-* #include "object.h"
-* astMAKE_CHECK(class)
-
-* Class Membership:
-* Defined by the Object class.
-
-* Description:
-* This macro expands to an implementation of the public astCheck<Class>_
-* function (q.v.) which validates membership of a specified class.
-
-* Parameters:
-* class
-* The name (not the type) of the class whose membership is to be
-* validated.
-
-* Notes:
-* - This macro is provided so that class definitions can easiy
-* implement the astCheck<Class>_ function, which is essentially the same
-* for each class apart for a change of name.
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*-
-*/
-
-#ifndef MEM_DEBUG
-
-/* Define the macro. */
-#define astMAKE_CHECK(class) \
-\
-/* Declare the function (see the object.c file for a prologue). */ \
-Ast##class *astCheck##class##_( Ast##class *this, int *status ) { \
-\
-/* Check the inherited error status. */ \
- if ( !astOK ) return this; \
-\
-/* Check if the object is a class member. */ \
- if ( !astIsA##class( this ) ) { \
-\
-/* If not, but the pointer was valid (which means it identifies an Object \
- of some sort), then report more information about why this Object is \
- unsuitable. */ \
- if ( astOK ) { \
- astError( AST__OBJIN, "Pointer to " #class " required, but pointer " \
- "to %s given.", status, astGetClass( this ) ); \
- } \
- } \
-\
-/* Return the pointer value supplied. */ \
- return this; \
-}
-
-/* Define the macro with memory debugging facilities. */
-#else
-
-#define astMAKE_CHECK(class) \
-\
-/* Declare the function (see the object.c file for a prologue). */ \
-Ast##class *astCheck##class##_( Ast##class *this, int *status ) { \
-\
- char buf[100]; \
-\
-/* Check the inherited error status. */ \
- if ( !astOK ) return this; \
-\
-/* Check if the object is a class member. */ \
- if ( !astIsA##class( this ) ) { \
-\
-/* If not, but the pointer was valid (which means it identifies an Object \
- of some sort), then report more information about why this Object is \
- unsuitable. */ \
- if ( astOK ) { \
- astError( AST__OBJIN, "Pointer to " #class " required, but pointer " \
- "to %s given.", status, astGetClass( this ) ); \
- }\
-\
- } else { \
-\
-/* Call the astMemoryUse function to report it if the memory block is \
- being watched. */ \
- sprintf( buf, "checked (refcnt: %d)", astGetRefCount_( (AstObject *) this, status ) ); \
- astMemoryUse( this, buf ); \
- } \
-\
-/* Return the pointer value supplied. */ \
- return this; \
-}
-#endif
-#endif
-
-#if defined(astCLASS) /* Protected */
-/*
-*+
-* Name:
-* astMAKE_CLEAR
-
-* Purpose:
-* Implement a method to clear an attribute value for a class.
-
-* Type:
-* Protected macro.
-
-* Synopsis:
-* #include "object.h"
-* astMAKE_CLEAR(class,attribute,component,assign)
-
-* Class Membership:
-* Defined by the Object class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Clear<Attribute>( Ast<Class> *this )
-*
-* and an external interface function of the form:
-*
-* void astClear<Attribute>_( Ast<Class> *this )
-*
-* which implement a method for clearing a specified attribute value for
-* a class.
-
-* Parameters:
-* class
-* The name (not the type) of the class to which the attribute belongs.
-* attribute
-* The name of the attribute to be cleared, as it appears in the function
-* name (e.g. Label in "astClearLabel").
-* component
-* The name of the class structure component that holds the attribute
-* value.
-* assign
-* An expression that evaluates to the value to assign to the component
-* to clear its value.
-
-* Examples:
-* astMAKE_CLEAR(MyStuff,Flag,flag,-1)
-* Implements the astClearFlag method for the MyStuff class which
-* operates by setting the "flag" structure component to -1 to indicate
-* that it has no value.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define astMAKE_CLEAR(class,attribute,component,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attribute( Ast##class *this, int *status ) { \
-\
-/* Check the inherited error status. */ \
- if ( !astOK ) return; \
-\
-/* Assign the "clear" value. */ \
- this->component = (assign); \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astClear##attribute##_( Ast##class *this, int *status ) { \
-\
-/* Check the inherited error status. */ \
- if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
- (**astMEMBER(this,class,Clear##attribute))( this, status ); \
-}
-#endif
-
-#if defined(astCLASS) /* Protected */
-/*
-*+
-* Name:
-* astMAKE_GET
-
-* Purpose:
-* Implement a method to get an attribute value for a class.
-
-* Type:
-* Protected macro.
-
-* Synopsis:
-* #include "object.h"
-* astMAKE_GET(class,attribute,type,bad_value,assign)
-
-* Class Membership:
-* Defined by the Object class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static <Type> Get<Attribute>( Ast<Class> *this )
-*
-* and an external interface function of the form:
-*
-* <Type> astGet<Attribute>_( Ast<Class> *this )
-*
-* which implement a method for getting a specified attribute value for a
-* class.
-
-* Parameters:
-* class
-* The name (not the type) of the class to which the attribute belongs.
-* attribute
-* The name of the attribute whose value is to be obtained, as it
-* appears in the function name (e.g. Label in "astGetLabel").
-* type
-* The C type of the attribute.
-* bad_value
-* A constant value to return if the inherited error status is set, or if
-* the function fails.
-* assign
-* An expression that evaluates to the value to be returned.
-
-* Examples:
-* astMAKE_GET(MyStuff,Flag,int,0,( this->flag == 1 ))
-* Implements the astGetFlag method for the MyStuff class which operates
-* by examining the integer "flag" structure component and comparing it
-* with the value 1 to see if it is set. A value of 0 is returned if the
-* method fails to complete successfully.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define astMAKE_GET(class,attribute,type,bad_value,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static type Get##attribute( Ast##class *this, int *status ) { \
- type result; /* Result to be returned */ \
-\
-/* Check the inherited error status. */ \
- if ( !astOK ) return (bad_value); \
-\
-/* Assign the result value. */ \
- result = (assign); \
-\
-/* Check for errors and clear the result if necessary. */ \
- if ( !astOK ) result = (bad_value); \
-\
-/* Return the result. */ \
- return result; \
-} \
-/* External interface. */ \
-/* ------------------- */ \
-type astGet##attribute##_( Ast##class *this, int *status ) { \
-\
-/* Check the inherited error status. */ \
- if ( !astOK ) return (bad_value); \
-\
-/* Invoke the required method via the virtual function table. */ \
- return (**astMEMBER(this,class,Get##attribute))( this, status ); \
-}
-#endif
-
-#if defined(astCLASS) /* Protected */
-/*
-*+
-* Name:
-* astMAKE_ISA
-
-* Type:
-* Protected macro.
-
-* Purpose:
-* Implement the astIsA<Class>_ function for a class.
-
-* Synopsis:
-* #include "object.h"
-* astMAKE_ISA(class,parent)
-
-* Class Membership:
-* Defined by the Object class.
-
-* Description:
-* This macro expands to an implementation of the public
-* astIsA<Class>_ function (q.v.) which checks membership of a
-* specified class.
-
-* Parameters:
-* class
-* The name (not the type) of the class whose membership is to be
-* tested.
-* parent
-* The name of the parent class.
-
-* Notes:
-* - This macro is provided so that class definitions can easiy
-* implement the astIsA<Class>_ function, which is essentially the
-* same for each class apart for a change of name.
-* - To avoid problems with some compilers, you should not leave
-* any white space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define astMAKE_ISA(class,parent) \
-\
-/* Declare the function (see the object.c file for a prologue). */ \
-int astIsA##class##_( const Ast##class *this, int *status ) { \
-\
-/* Local Variables: */ \
- int isa = 0; /* Is object a member? */ \
-\
-/* To test if the object is correctly constructed, we first test if it is a \
- member of the parent class. This improves the security of the test by \
- checking the object structure from the base Object class downwards \
- (without this, the "magic numbers" that identify classes might be \
- encountered by accident or we might address parts of the Object which \
- don't exist). */ \
- if ( astIsA##parent( this ) ) { \
-\
-/* Obtain the Object's size and check it is adequate for an object of the \
- proposed type (this avoids any attempt to access derived class data that \
- doesn't exist and therefore lies outside the memory allocated for the \
- object). */ \
- if ( ( (AstObject *) this )->size >= sizeof( Ast##class ) ) { \
-\
-/* If OK, see whether the check component in the object's virtual function \
- table matches the expected "magic" value. */ \
- isa = ( *astMEMBER(this,class,id.check) == &class_check ); \
- } \
- } \
-\
-/* Return the result. */ \
- return isa; \
-}
-#endif
-
-#if defined(astCLASS) /* Protected */
-/*
-*+
-* Name:
-* astMAKE_SET
-
-* Purpose:
-* Implement a method to set an attribute value for a class.
-
-* Type:
-* Protected macro.
-
-* Synopsis:
-* #include "object.h"
-* astMAKE_SET(class,attribute,type,component,assign)
-
-* Class Membership:
-* Defined by the Object class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Set<Attribute>( Ast<Class> *this, <Type> value )
-*
-* and an external interface function of the form:
-*
-* void astSet<Attribute>_( Ast<Class> *this, <Type> value )
-*
-* which implement a method for setting a specified attribute value for a
-* class.
-
-* Parameters:
-* class
-* The name (not the type) of the class to which the attribute belongs.
-* attribute
-* The name of the attribute to be set, as it appears in the function
-* name (e.g. Label in "astSetLabel").
-* type
-* The C type of the attribute.
-* component
-* The name of the class structure component that holds the attribute
-* value.
-* assign
-* An expression that evaluates to the value to be assigned to the
-* component.
-
-* Examples:
-* astMAKE_SET(MyStuff,Flag,int,flag,( value != 0 ))
-* Implements the astSetFlag method for the MyStuff class which operates
-* by setting the "flag" structure component to 0 or 1 depending on
-* whether the "value" parameter is non-zero or not.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave
-* any white space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define astMAKE_SET(class,attribute,type,component,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attribute( Ast##class *this, type value, int *status ) { \
-\
-/* Check the inherited error status. */ \
- if ( !astOK ) return; \
-\
-/* Store the new value in the structure component. */ \
- this->component = (assign); \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astSet##attribute##_( Ast##class *this, type value, int *status ) { \
-\
-/* Check the inherited error status. */ \
- if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
- (**astMEMBER(this,class,Set##attribute))( this, value, status ); \
-}
-#endif
-
-#if defined(astCLASS) /* Protected */
-/*
-*+
-* Name:
-* astMAKE_TEST
-
-* Purpose:
-* Implement a method to test if an attribute has been set for a class.
-
-* Type:
-* Protected macro.
-
-* Synopsis:
-* #include "object.h"
-* astMAKE_TEST(class,attribute,assign)
-
-* Class Membership:
-* Defined by the Object class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static int Test<Attribute>( Ast<Class> *this )
-*
-* and an external interface function of the form:
-*
-* int astTest<Attribute>_( Ast<Class> *this )
-*
-* which implement a method for testing if a specified attribute has been
-* set for a class.
-
-* Parameters:
-* class
-* The name (not the type) of the class to which the attribute belongs.
-* attribute
-* The name of the attribute to be tested, as it appears in the function
-* name (e.g. Label in "astTestLabel").
-* assign
-* An expression that evaluates to 0 or 1, to be used as the returned
-* value.
-
-* Examples:
-* astMAKE_TEST(MyStuff,Flag,( this->flag != -1 ))
-* Implements the astTestFlag method for the MyStuff class which operates
-* by testing the "flag" structure component to see if it is set to a
-* value other than -1.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define astMAKE_TEST(class,attribute,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static int Test##attribute( Ast##class *this, int *status ) { \
- int result; /* Value to return */ \
-\
-/* Check the inherited error status. */ \
- if ( !astOK ) return 0; \
-\
-/* Assign the result value. */ \
- result = (assign); \
-\
-/* Check for errors and clear the result if necessary. */ \
- if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
- return result; \
-} \
-/* External interface. */ \
-/* ------------------- */ \
-int astTest##attribute##_( Ast##class *this, int *status ) { \
-\
-/* Check the inherited error status. */ \
- if ( !astOK ) return 0; \
-\
-/* Invoke the required method via the virtual function table. */ \
- return (**astMEMBER(this,class,Test##attribute))( this, status ); \
-}
-#endif
-
-#if defined(astCLASS) /* Protected */
-/*
-*+
-* Name:
-* astMEMBER
-
-* Purpose:
-* Locate a member function.
-
-* Type:
-* Protected macro.
-
-* Synopsis:
-* #include "object.h"
-* astMEMBER(this,class,method)
-
-* Class Membership:
-* Defined by the Object class.
-
-* Description:
-* This macro evaluates to the address where the pointer to a
-* specified Object member function is stored. Typically, this will
-* be used to obtain a pointer to the member function so that it
-* can be invoked. It may also be used to assign a new function
-* pointer so that a derived class can re-define a virtual function
-* and hence over-ride an inherited method.
-
-* Parameters:
-* this
-* Pointer to an Object belonging to the class for which the
-* virtual function is required. This must either be the class
-* that originally defined the method, or one derived from it.
-* class
-* Name of the class that originally defined the method. This
-* may differ from (i.e. be an ancestor of) the class to which
-* "this" belongs.
-* method
-* Name of the method whose member function is to be located.
-
-* Returned Value:
-* The address where the member function pointer is stored (the
-* type of the result is determined by the type of the member
-* function itself).
-
-* Examples:
-* astMEMBER(this,Gnome,astFish)
-* Returns the address where the pointer to the function that
-* implements the astFish method for the "this" object is
-* stored. The Gnome class should be where the astFish method
-* was first defined (i.e. from where it was inherited by
-* "this").
-* (**astMEMBER(this,Gnome,astFish))( this, arg1, arg2 );
-* Invokes the virtual function that implements the astFish
-* method for object "this" and passes it additional arguments
-* "arg2" and "arg2". Again, Gnome should be the class that
-* originally defined the astFish method.
-* *astMEMBER(this,Gnome,astFish) = myFish;
-* Stores a pointer to the myFish function so that it replaces
-* the virtual function that previously implemented the astFish
-* method for the "this" object. Note that all objects in the
-* same class as "this" are affected, but objects in class
-* "class" are not affected (unless it happens to be the class
-* to which "this" belongs).
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave
-* any white space around the macro arguments.
-*-
-*/
-
-/* A subsiduary macro that returns a pointer to the vtab of an object,
- cast to an AstObjectVtab. */
-#define astVTAB(this) (((AstObject*)(this))->vtab)
-
-/* Define the macro. This functions by (a) casting the Object pointer
- to type (AstObject *) and locating the Object's virtual function
- table (b) casting the table pointer to the correct type
- (AstClassVtab *) for the class in which the method pointer resides,
- (c) locating the component holding the member function pointer, and
- (d) taking its address. */
-#define astMEMBER(this,class,method) \
-(&((Ast##class##Vtab*)astVTAB(this))->method)
-
-#endif
-
-/*
-*+
-* Name:
-* astPROTO_CHECK
-* astPROTO_ISA
-
-* Type:
-* Protected macros.
-
-* Purpose:
-* Prototype the astCheck<Class>_ and astIsA<Class>_ functions.
-
-* Synopsis:
-* #include "object.h"
-* astPROTO_CHECK(class)
-* astPROTO_ISA(class)
-
-* Class Membership:
-* Defined by the Object class.
-
-* Description:
-* These macros expands to function prototypes for the
-* astCheck<Class>_ and astIsA<Class>_ functions (q.v.) which
-* validate and test for membership of a specified class.
-
-* Parameters:
-* class
-* The name (not the type) of the class whose membership is to
-* be validated.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave
-* any white space around the macro arguments.
-*-
-*/
-
-/* Define the macros. */
-#define astPROTO_CHECK(class) Ast##class *astCheck##class##_( Ast##class *, int * );
-#define astPROTO_ISA(class) int astIsA##class##_( const Ast##class *, int * );
-
-/* Macros which return the maximum and minimum of two values. */
-#define astMAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define astMIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Check for equality of floating point values. We cannot compare bad values
- directly because of the danger of floating point exceptions, so bad
- values are dealt with explicitly. */
-#define astEQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*astMAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* AST__NULL. */
-/* ---------- */
-/* Define the AST__NULL macro, which evaluates to a null Object
- pointer. */
-#define AST__NULL (astI2P(0))
-
-
-#if defined(astCLASS) /* Protected */
-
-/* Test the validy of an attribute value */
-/* ------------------------------------- */
-/* If the set attribute value is invalid, clear it. These macros should
- be used in a context in which error reporting has been deferred by
- calling astReporting( 0 ). */
-
-#define astCLEAN_ATTRIB(attr) \
- if( astTest##attr(this) ) { \
- astSet##attr( this, astGet##attr( this ) ); \
- if( !astOK ) { \
- astClearStatus; \
- astClear##attr( this ); \
- } \
- }
-
-#define astCLEAN_INDEXED_ATTRIB(attr,index) \
- if( astTest##attr(this,index) ) { \
- astSet##attr( this, index, astGet##attr( this, index ) ); \
- if( !astOK ) { \
- astClearStatus; \
- astClear##attr( this, index ); \
- } \
- }
-
-#endif
-
-
-#if defined(astCLASS) /* Protected */
-#define astSetVtabClassIdentifier(vtab,id_ptr) \
- ((AstObjectVtab *)(vtab))->top_id = (id_ptr)
-#endif
-
-/* Type Definitions. */
-/* ================= */
-
-/* Object structure. */
-/* ----------------- */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstObject {
-
-/* Attributes specific to objects in this class. */
- unsigned long check; /* Check value to identify Objects */
- size_t size; /* Amount of memory used by Object */
- struct AstObjectVtab *vtab; /* Pointer to virtual function table */
- char dynamic; /* Memory allocated dynamically? */
- int ref_count; /* Number of active pointers to the Object */
- char *id; /* Pointer to ID string */
- char *ident; /* Pointer to Ident string */
- char usedefs; /* Use default attribute values? */
-
-#if defined(THREAD_SAFE)
- int locker; /* Thread that has locked this Object */
- pthread_mutex_t mutex1; /* Guards access to all elements of the
- Object except for the "locker" and
- "ref_count" components */
- pthread_mutex_t mutex2; /* Guards access to the "locker" and
- "ref_count" components */
- struct AstGlobals *globals; /* Pointer to thread-specific global data */
-#endif
-
-} AstObject;
-
-/* Class identifier structure */
-typedef struct AstClassIdentifier {
- int *check;
- struct AstClassIdentifier *parent;
-} AstClassIdentifier;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* The virtual function table makes a forward reference to the
- AstChannel structure which is not defined until "channel.h" is
- included (below). Hence make a preliminary definition available
- now. */
-struct AstChannel;
-
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstObjectVtab {
-
-/* A unique identifier for this class. */
- AstClassIdentifier id;
-
-/* Pointer to the structure that identifies the top-level class described
- by the whole vtab (of which the AstObjectVtab is just the first,
- lowest-level, component). */
- AstClassIdentifier *top_id;
-
-/* Properties specific to this class. */
- void ( *CleanAttribs )( AstObject *, int * );
- AstObject *( *Cast )( AstObject *, AstObject *, int * );
- const char *( *GetID )( AstObject *, int * );
- const char *( *GetIdent )( AstObject *, int * );
- const char *(* GetAttrib)( AstObject *, const char *, int * );
- int (* TestAttrib)( AstObject *, const char *, int * );
- int (* TestID)( AstObject *, int * );
- int (* Same)( AstObject *, AstObject *, int * );
- int (* TestIdent)( AstObject *, int * );
- void (* Clear)( AstObject *, const char *, int * );
- void (* ClearAttrib)( AstObject *, const char *, int * );
- void (* ClearID)( AstObject *, int * );
- void (* ClearIdent)( AstObject *, int * );
- void (* Dump)( AstObject *, struct AstChannel *, int * );
- int (* Equal)( AstObject *, AstObject *, int * );
- void (* SetAttrib)( AstObject *, const char *, int * );
- void (* SetID)( AstObject *, const char *, int * );
- void (* SetIdent)( AstObject *, const char *, int * );
- void (* Show)( AstObject *, int * );
- void (* VSet)( AstObject *, const char *, char **, va_list, int * );
-
- int (* GetObjSize)( AstObject *, int * );
-
- int (* TestUseDefs)( AstObject *, int * );
- int (* GetUseDefs)( AstObject *, int * );
- void (* SetUseDefs)( AstObject *, int, int * );
- void (* ClearUseDefs)( AstObject *, int * );
-
- const char *class; /* Pointer to class name string */
- void (** delete)( AstObject *, int * ); /* Pointer to array of destructors */
- void (** copy)( const AstObject *, AstObject *, int * ); /* Copy constructors */
- void (** dump)( AstObject *, struct AstChannel *, int * ); /* Dump functions */
- const char **dump_class; /* Dump function class string pointers */
- const char **dump_comment; /* Dump function comment string pointers */
- int ndelete; /* Number of destructors */
- int ncopy; /* Number of copy constructors */
- int ndump; /* Number of dump functions */
- int nobject; /* Number of active objects in the class */
- int nfree; /* No. of entries in "free_list" */
- AstObject **free_list; /* List of pointers for freed Objects */
-
-#if defined(THREAD_SAFE)
- int (* ManageLock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-} AstObjectVtab;
-#endif
-
-#if defined(THREAD_SAFE) && defined(astCLASS)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstObjectGlobals {
- AstObjectVtab Class_Vtab;
- int Class_Init;
- int Retain_Esc;
- int Context_Level;
- int *Active_Handles;
- char GetAttrib_Buff[ AST__GETATTRIB_BUFF_LEN + 1 ];
- char *AstGetC_Strings[ AST__ASTGETC_MAX_STRINGS ];
- int AstGetC_Istr;
- int AstGetC_Init;
- int Nvtab;
- AstObjectVtab **Known_Vtabs;
-} AstObjectGlobals;
-
-#endif
-
-/* More include files. */
-/* =================== */
-/* The interface to the Channel class must be included here (after the
- type definitions for the Object class) because "channel.h" itself
- includes this file ("object.h"), although "object.h" refers to the
- AstChannel structure above. This seems a little strange at first,
- but is simply analogous to making a forward reference to a
- structure type when recursively defining a normal C structure
- (except that here the definitions happen to be in separate include
- files). */
-#include "channel.h"
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Object) /* Validate class membership */
-astPROTO_ISA(Object) /* Test class membership */
-
-/* NB. There is no constructor function for this class. */
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstObject *astInitObject_( void *, size_t, int, AstObjectVtab *,
- const char *, int * );
-
-/* Vtab Initialiser. */
-void astInitObjectVtab_( AstObjectVtab *, const char *, int * );
-
-/* Loader. */
-AstObject *astLoadObject_( void *, size_t, AstObjectVtab *,
- const char *, AstChannel *channel, int * );
-
-#if defined(THREAD_SAFE)
-void astInitObjectGlobals_( AstObjectGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for other class functions. */
-/* ------------------------------------- */
-#if !defined(astCLASS) /* Public */
-void astBegin_( void );
-void astEnd_( int * );
-#endif
-
-AstObject *astI2P_( int, int * );
-AstObject *astMakeId_( AstObject *, int * );
-AstObject *astMakePointer_( AstObject *, int * );
-AstObject *astMakePointer_NoLockCheck_( AstObject *, int * );
-int astP2I_( AstObject *, int * );
-int astVersion_( int * );
-int astEscapes_( int, int * );
-int astTune_( const char *, int, int * );
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-#if defined(astCLASS) /* Protected */
-AstObject *astAnnul_( AstObject *, int * );
-AstObject *astDelete_( AstObject *, int * );
-void astSet_( void *, const char *, int *, ... );
-
-#else /* Public */
-AstObject *astDeleteId_( AstObject *, int * );
-int astThreadId_( AstObject *, int, int * );
-void astExportId_( AstObject *, int * );
-void astImportId_( AstObject *, int * );
-void astSetId_( void *, const char *, ... )__attribute__((format(printf,2,3)));
-#endif
-
-AstObject *astAnnulId_( AstObject *, int * );
-AstObject *astCheckLock_( AstObject *, int * );
-AstObject *astClone_( AstObject *, int * );
-AstObject *astCopy_( const AstObject *, int * );
-const char *astGetC_( AstObject *, const char *, int * );
-double astGetD_( AstObject *, const char *, int * );
-float astGetF_( AstObject *, const char *, int * );
-int astEqual_( AstObject *, AstObject *, int * );
-int astGetI_( AstObject *, const char *, int * );
-int astSame_( AstObject *, AstObject *, int * );
-int astTest_( AstObject *, const char *, int * );
-long astGetL_( AstObject *, const char *, int * );
-void astClear_( AstObject *, const char *, int * );
-void astExemptId_( AstObject *, int * );
-void astLockId_( AstObject *, int, int * );
-void astSetC_( AstObject *, const char *, const char *, int * );
-void astSetD_( AstObject *, const char *, double, int * );
-void astSetF_( AstObject *, const char *, float, int * );
-void astSetI_( AstObject *, const char *, int, int * );
-void astSetL_( AstObject *, const char *, long, int * );
-void astShow_( AstObject *, int * );
-void astUnlockId_( AstObject *, int, int * );
-
-#if defined(astCLASS) /* Protected */
-
-void astCleanAttribs_( AstObject *, int * );
-AstObject *astCast_( AstObject *, AstObject *, int * );
-AstObject *astCastCopy_( AstObject *, AstObject *, int * );
-
-#if defined(THREAD_SAFE)
-int astManageLock_( AstObject *, int, int, AstObject **, int * );
-#endif
-
-int astGetObjSize_( AstObject *, int * );
-
-int astTestUseDefs_( AstObject *, int * );
-int astGetUseDefs_( AstObject *, int * );
-void astSetUseDefs_( AstObject *, int, int * );
-void astClearUseDefs_( AstObject *, int * );
-
-const char *astGetAttrib_( AstObject *, const char *, int * );
-const char *astGetClass_( const AstObject *, int * );
-const char *astGetID_( AstObject *, int * );
-const char *astGetIdent_( AstObject *, int * );
-int astClassCompare_( AstObjectVtab *, AstObjectVtab *, int * );
-int astGetNobject_( const AstObject *, int * );
-int astGetRefCount_( AstObject *, int * );
-int astTestAttrib_( AstObject *, const char *, int * );
-int astTestID_( AstObject *, int * );
-int astTestIdent_( AstObject *, int * );
-void astClearAttrib_( AstObject *, const char *, int * );
-void astClearID_( AstObject *, int * );
-void astClearIdent_( AstObject *, int * );
-void astDump_( AstObject *, AstChannel *, int * );
-void astSetAttrib_( AstObject *, const char *, int * );
-void astSetCopy_( AstObjectVtab *, void (*)( const AstObject *, AstObject *, int * ), int * );
-void astSetDelete_( AstObjectVtab *, void (*)( AstObject *, int * ), int * );
-void astSetDump_( AstObjectVtab *, void (*)( AstObject *, AstChannel *, int * ), const char *, const char *, int * );
-void astSetVtab_( AstObject *, AstObjectVtab *, int * );
-void astSetID_( AstObject *, const char *, int * );
-void astSetIdent_( AstObject *, const char *, int * );
-void astVSet_( AstObject *, const char *, char **, va_list, int * );
-
-#endif
-
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Check class membership. */
-#define astCheckObject(this) astINVOKE_CHECK(Object,this,0)
-#define astVerifyObject(this) astINVOKE_CHECK(Object,this,1)
-
-/* Test class membership. */
-#define astIsAObject(this) astINVOKE_ISA(Object,this)
-
-/* NB. There is no constructor function for this class. */
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitObject(mem,size,init,vtab,name) \
-astINVOKE(O,astInitObject_(mem,size,init,vtab,name,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitObjectVtab(vtab,name) astINVOKE(V,astInitObjectVtab_(vtab,name,STATUS_PTR))
-
-/* Loader. */
-#define astLoadObject(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadObject_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to other class functions. */
-/* ------------------------------------ */
-#if !defined(astCLASS) /* Public */
-#define astBegin astBegin_()
-#define astEnd astINVOKE(V,astEnd_(STATUS_PTR))
-#else /* Protected */
-#define astMakePointer_NoLockCheck(id) ((void *)astMakePointer_NoLockCheck_((AstObject *)(id),STATUS_PTR))
-#endif
-
-#define astVersion astVersion_(STATUS_PTR)
-#define astEscapes(int) astEscapes_(int,STATUS_PTR)
-#define astTune(name,val) astTune_(name,val,STATUS_PTR)
-#define astI2P(integer) ((void *)astI2P_(integer,STATUS_PTR))
-#define astMakeId(pointer) ((void *)astMakeId_((AstObject *)(pointer),STATUS_PTR))
-#define astP2I(pointer) astP2I_((AstObject *)(pointer),STATUS_PTR)
-#define astMakePointer(id) ((void *)astCheckLock_(astMakePointer_((AstObject *)(id),STATUS_PTR),STATUS_PTR))
-
-/* Interfaces to member functions. */
-/* ------------------------------- */
-/* Here we make use of astCheckObject (et al.) to validate Object
- pointers before use. This provides a contextual error report if a
- pointer to the wrong sort of object is supplied. In the case of an
- external caller, it also performs the required conversion from an
- Object identifier to a true C pointer. */
-
-/* These functions require special treatment for external use because
- they handle Object identifiers and their resources explicitly, and
- must therefore be passed identifier values without conversion to C
- pointers. */
-#if defined(astCLASS) /* Protected only */
-#define astAnnul(this) astINVOKE(O,astAnnul_(astCheckObject(this),STATUS_PTR))
-#define astAnnulId(this) astINVOKE(O,astAnnulId_((AstObject *)(this),STATUS_PTR))
-#define astDelete(this) astINVOKE(O,astDelete_(astCheckObject(this),STATUS_PTR))
-#define astSet astINVOKE(F,astSet_)
-
-#else /* Public only */
-#define astAnnul(this) astINVOKE(O,astAnnulId_((AstObject *)(this),STATUS_PTR))
-#define astDelete(this) astINVOKE(O,astDeleteId_((AstObject *)(this),STATUS_PTR))
-#define astExport(this) astINVOKE(V,astExportId_((AstObject *)(this),STATUS_PTR))
-#define astImport(this) astINVOKE(V,astImportId_((AstObject *)(this),STATUS_PTR))
-#define astSet astINVOKE(F,astSetId_)
-#define astThread(this,ptr) astINVOKE(V,astThreadId_((AstObject *)(this),ptr,STATUS_PTR))
-#endif
-
-/* Both.... */
-#define astLock(this,wait) astINVOKE(V,astLockId_((AstObject *)(this),wait,STATUS_PTR))
-#define astUnlock(this,report) astINVOKE(V,astUnlockId_((AstObject *)(this),report,STATUS_PTR))
-#define astEqual(this,that) astINVOKE(V,(((AstObject*)this==(AstObject*)that)||astEqual_(astCheckObject(this),astCheckObject(that),STATUS_PTR)))
-#define astExempt(this) astINVOKE(V,astExemptId_((AstObject *)(this),STATUS_PTR))
-#define astClear(this,attrib) astINVOKE(V,astClear_(astCheckObject(this),attrib,STATUS_PTR))
-#define astClone(this) astINVOKE(O,astClone_(astCheckObject(this),STATUS_PTR))
-#define astCopy(this) astINVOKE(O,astCopy_(astCheckObject(this),STATUS_PTR))
-#define astGetC(this,attrib) astINVOKE(V,astGetC_(astCheckObject(this),attrib,STATUS_PTR))
-#define astGetD(this,attrib) astINVOKE(V,astGetD_(astCheckObject(this),attrib,STATUS_PTR))
-#define astGetF(this,attrib) astINVOKE(V,astGetF_(astCheckObject(this),attrib,STATUS_PTR))
-#define astGetI(this,attrib) \
-astINVOKE(V,astGetI_(astCheckObject(this),attrib,STATUS_PTR))
-#define astGetL(this,attrib) \
-astINVOKE(V,astGetL_(astCheckObject(this),attrib,STATUS_PTR))
-#define astSetC(this,attrib,value) \
-astINVOKE(V,astSetC_(astCheckObject(this),attrib,value,STATUS_PTR))
-#define astSetD(this,attrib,value) \
-astINVOKE(V,astSetD_(astCheckObject(this),attrib,value,STATUS_PTR))
-#define astSetF(this,attrib,value) \
-astINVOKE(V,astSetF_(astCheckObject(this),attrib,value,STATUS_PTR))
-#define astSetI(this,attrib,value) \
-astINVOKE(V,astSetI_(astCheckObject(this),attrib,value,STATUS_PTR))
-#define astSetL(this,attrib,value) \
-astINVOKE(V,astSetL_(astCheckObject(this),attrib,value,STATUS_PTR))
-#define astShow(this) \
-astINVOKE(V,astShow_(astCheckObject(this),STATUS_PTR))
-#define astTest(this,attrib) \
-astINVOKE(V,astTest_(astCheckObject(this),attrib,STATUS_PTR))
-#define astSame(this,that) \
-astINVOKE(V,astSame_(astCheckObject(this),astCheckObject(that),STATUS_PTR))
-
-#if defined(astCLASS) /* Protected */
-
-#if defined(THREAD_SAFE)
-#define astManageLock(this,mode,extra,fail) \
-astINVOKE(V,astManageLock_(astCheckObject(this),mode, extra,fail,STATUS_PTR))
-#else
-#define astManageLock(this,mode,extra,fail)
-#endif
-
-#define astCleanAttribs(this) astINVOKE(V,astCleanAttribs_(astCheckObject(this),STATUS_PTR))
-#define astGetObjSize(this) astINVOKE(V,astGetObjSize_(astCheckObject(this),STATUS_PTR))
-#define astCast(this,obj) astINVOKE(O,astCast_(astCheckObject(this),astCheckObject(obj),STATUS_PTR))
-#define astCastCopy(this,obj) astCastCopy_((AstObject*)this,(AstObject*)obj,STATUS_PTR)
-
-#define astClearUseDefs(this) astINVOKE(V,astClearUseDefs_(astCheckObject(this),STATUS_PTR))
-#define astTestUseDefs(this) astINVOKE(V,astTestUseDefs_(astCheckObject(this),STATUS_PTR))
-#define astGetUseDefs(this) astINVOKE(V,astGetUseDefs_(astCheckObject(this),STATUS_PTR))
-#define astSetUseDefs(this,val) astINVOKE(V,astSetUseDefs_(astCheckObject(this),val,STATUS_PTR))
-
-#define astClearAttrib(this,attrib) \
-astINVOKE(V,astClearAttrib_(astCheckObject(this),attrib,STATUS_PTR))
-#define astClearID(this) astINVOKE(V,astClearID_(astCheckObject(this),STATUS_PTR))
-#define astClearIdent(this) astINVOKE(V,astClearIdent_(astCheckObject(this),STATUS_PTR))
-#define astDump(this,channel) \
-astINVOKE(V,astDump_(astCheckObject(this),astCheckChannel(channel),STATUS_PTR))
-
-#define astGetAttrib(this,attrib) \
-astINVOKE(V,astGetAttrib_(astCheckObject(this),attrib,STATUS_PTR))
-#define astGetClass(this) astINVOKE(V,astGetClass_((const AstObject *)(this),STATUS_PTR))
-#define astGetID(this) astINVOKE(V,astGetID_(astCheckObject(this),STATUS_PTR))
-#define astGetIdent(this) astINVOKE(V,astGetIdent_(astCheckObject(this),STATUS_PTR))
-#define astGetNobject(this) astINVOKE(V,astGetNobject_(astCheckObject(this),STATUS_PTR))
-#define astClassCompare(class1,class2) astClassCompare_(class1,class2,STATUS_PTR)
-#define astGetRefCount(this) astINVOKE(V,astGetRefCount_(astCheckObject(this),STATUS_PTR))
-#define astSetAttrib(this,setting) \
-astINVOKE(V,astSetAttrib_(astCheckObject(this),setting,STATUS_PTR))
-#define astSetCopy(vtab,copy) \
-astINVOKE(V,astSetCopy_((AstObjectVtab *)(vtab),copy,STATUS_PTR))
-#define astSetDelete(vtab,delete) \
-astINVOKE(V,astSetDelete_((AstObjectVtab *)(vtab),delete,STATUS_PTR))
-#define astSetDump(vtab,dump,class,comment) \
-astINVOKE(V,astSetDump_((AstObjectVtab *)(vtab),dump,class,comment,STATUS_PTR))
-#define astSetVtab(object,vtab) \
-astINVOKE(V,astSetVtab_((AstObject *)object,(AstObjectVtab *)(vtab),STATUS_PTR))
-#define astSetID(this,id) astINVOKE(V,astSetID_(astCheckObject(this),id,STATUS_PTR))
-#define astSetIdent(this,id) astINVOKE(V,astSetIdent_(astCheckObject(this),id,STATUS_PTR))
-#define astVSet(this,settings,text,args) \
-astINVOKE(V,astVSet_(astCheckObject(this),settings,text,args,STATUS_PTR))
-#define astTestAttrib(this,attrib) \
-astINVOKE(V,astTestAttrib_(astCheckObject(this),attrib,STATUS_PTR))
-#define astTestID(this) astINVOKE(V,astTestID_(astCheckObject(this),STATUS_PTR))
-#define astTestIdent(this) astINVOKE(V,astTestIdent_(astCheckObject(this),STATUS_PTR))
-
-/* Deprecated synonym. */
-#define astClass(this) astGetClass(this)
-#endif
-
-/* Extra stuff for debuging probnlems with object handles and memory usage */
-#ifdef MEM_DEBUG
-
-void astWatchHandle_( int );
-void astHandleUse_( int, const char *, ... );
-void astHandleAlarm_( const char *, va_list );
-
-#define astWatchHandle astWatchHandle_
-#define astHandleUse astHandleUse_
-#define astHandleAlarm astHandleAlarm_
-
-#else
-
-#define astWatchHandle
-#define astHandleUse
-#define astHandleAlarm
-
-#endif
-
-#endif
-
diff --git a/ast-5.3-1/object.h.in b/ast-5.3-1/object.h.in
deleted file mode 100644
index 4245a9a..0000000
--- a/ast-5.3-1/object.h.in
+++ /dev/null
@@ -1,1713 +0,0 @@
-#if !defined( OBJECT_INCLUDED ) /* Include this file only once */
-#define OBJECT_INCLUDED
-/*
-*++
-* Name:
-* object.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the Object class.
-
-* Invocation:
-* #include "object.h"
-
-* Description:
-* This include file defines the interface to the Object class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-
-* The Object class is the base class from which all other classes
-* in the AST library are derived. This class provides all the
-* basic Object behaviour and Object manipulation facilities
-* required throughout the library. There is no Object constructor,
-* however, as Objects on their own are not of much use.
-
-* Inheritance:
-* The Object base class does not inherit from any other class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* Class (string)
-* This is a read-only attribute containing the name of the
-* class to which an Object belongs.
-* ID (string)
-* An identification string which may be used to identify the
-* Object (e.g.) in debugging output, or when stored in an
-* external medium such as a data file. There is no restriction
-* on the string's contents. The default is an empty string.
-* Ident (string)
-* Like ID, this is an identification string which may be used
-* to identify the Object. Unlike ID, Ident is transferred when an
-* Object is copied.
-* UseDefs (int)
-* Should default values be used for unset attributes?
-* Nobject (integer)
-* This is a read-only attribute which gives the total number of
-* Objects currently in existence in the same class as the
-* Object given. It does not include Objects which belong to
-* derived (more specialised) classes. This value is mainly
-* intended for debugging, as it can be used to show whether
-* Objects which should have been deleted have, in fact, been
-* deleted.
-* ObjSize (int)
-* The in-memory size of the Object in bytes.
-* RefCount (integer)
-* This is a read-only Attribute which gives the "reference
-* count" (the number of active pointers) associated with an
-* Object. It is modified whenever pointers are created or
-* annulled (by astClone or astAnnul/astEnd for example) and
-* includes the initial pointer issued when the Object was
-* created. If the reference count for an Object falls to zero
-* as the result of annulling a pointer to it, then the Object
-* will be deleted.
-
-* Methods Over-Ridden:
-* None.
-
-* New Methods Defined:
-* Public:
-* astAnnul
-* Annul a pointer to an Object.
-* astClear
-* Clear attribute values for an Object.
-* astClone
-* Clone a pointer to an Object.
-* astCopy
-* Copy an Object.
-* astDelete
-* Delete an Object.
-* astExempt
-* Exempt an Object pointer from AST context handling
-* astExport
-* Export an Object pointer to an outer context.
-* astGet<X>, where <X> = C, D, F, I, L
-* Get an attribute value for an Object.
-* astImport
-* Import an Object pointer into the current context.
-* astSame
-* Return true if two pointers refer to the same object.
-* astSet
-* Set attribute values for an Object.
-* astSet<X>, where <X> = C, D, F, I, L
-* Set an attribute value for an Object.
-* astShow
-* Display a textual representation of an Object on standard output.
-* astTest
-* Test if an attribute value is set for an Object.
-* astTune
-* Get or set the value of a global AST tuning parameter.
-*
-* Protected:
-* astAnnulId
-* Annul an external ID for an Object (for use from protected code
-* which must handle external IDs).
-* astClearAttrib
-* Clear the value of a specified attribute for an Object.
-* astClearID
-* Clear the value of the ID attribute for an Object.
-* astClearIdent
-* Clear the value of the Ident attribute for an Object.
-* astCast
-* Return a deep copy of an object, cast into an instance of a
-* parent class.
-* astDump
-* Write an Object to a Channel.
-* astEqual
-* Are two Objects equivalent?
-* astGetAttrib
-* Get the value of a specified attribute for an Object.
-* astGetClass (deprecated synonym astClass)
-* Obtain the value of the Class attribute for an Object.
-* astGetID
-* Obtain the value of the ID attribute for an Object.
-* astGetIdent
-* Obtain the value of the Ident attribute for an Object.
-* astGetNobject
-* Obtain the value of the Nobject attribute for an Object.
-* astGetRefCount
-* Obtain the value of the RefCount attribute for an Object.
-* astSetAttrib
-* Set the value of a specified attribute for an Object.
-* astSetCopy
-* Declare a copy constructor for an Object.
-* astSetDelete
-* Declare a destructor for an Object.
-* astSetDump
-* Declare a dump function for an Object.
-* astSetVtab
-* Chaneg the virtual function table associated with an Object.
-* astSetID
-* Set the value of the ID attribute for an Object.
-* astSetIdent
-* Set the value of the Ident attribute for an Object.
-* astTestAttrib
-* Test if a specified attribute value is set for an Object.
-* astTestID
-* Test whether the ID attribute for an Object is set.
-* astTestIdent
-* Test whether the Ident attribute for an Object is set.
-* astVSet
-* Set values for an Object's attributes.
-
-* Other Class Functions:
-* Public:
-* astBegin
-* Begin a new AST context.
-* astEnd
-* End an AST context.
-* astIsAObject
-* Test class membership.
-* astVersion
-* Returns the AST library version number.
-* astEscapes
-* Remove escape sequences from returned text strings?
-* astP2I
-* Retrieve an int from a pointer.
-* astI2P
-* Pack an int into a pointer.
-*
-* Protected:
-* astCheckObject
-* Validate class membership.
-* astInitObject
-* Initialise an Object.
-* astInitObjectVtab
-* Initialise the virtual function table for the Object class.
-* astLoadObject
-* Load an Object.
-* astMakeId
-* Issue an identifier for an Object.
-* astMakePointer
-* Obtain a true C pointer from an Object identifier.
-
-* Macros:
-* Public:
-* AST__NULL
-* Null Object pointer value.
-* AST__VMAJOR
-* The AST library major version number.
-* AST__VMINOR
-* The AST library minor version number.
-* AST__RELEASE
-* The AST library release number.
-*
-* Protected:
-* astEQUAL
-* Compare two doubles for equality.
-* astMAX
-* Return maximum of two values.
-* astMIN
-* Return minimum of two values.
-* astMAKE_CHECK
-* Implement the astCheck<Class>_ function for a class.
-* astMAKE_CLEAR
-* Implement a method to clear an attribute value for a class.
-* astMAKE_GET
-* Implement a method to get an attribute value for a class.
-* astMAKE_ISA
-* Implement the astIsA<Class>_ function for a class.
-* astMAKE_SET
-* Implement a method to set an attribute value for a class.
-* astMAKE_TEST
-* Implement a method to test if an attribute has been set for a
-* class.
-* astMEMBER
-* Locate a member function.
-
-* Type Definitions:
-* Public:
-* AstObject
-* Object type.
-*
-* Protected:
-* AstObjectVtab
-* Object virtual function table type.
-
-* Feature Test Macros:
-* AST_CHECK_CLASS
-* If the AST_CHECK_CLASS macro is defined, then Object class
-* checking is enabled for all internal function invocations
-* within the AST library. Otherwise, this checking is
-* omitted. This macro should normally be defined as a compiler
-* option during library development and debugging, but left
-* undefined for software releases, so as to improve
-* peformance. Class checking by the AST public interface is not
-* affected by this macro.
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-* astFORTRAN77
-* If the astFORTRAN77 macro is defined, reporting of error
-* context information is suppressed. This is necessary when
-* implementing foreign language interfaces to the AST library, as
-* otherwise the file names and line numbers given would refer
-* to the interface implementation rather than the user's own
-* code.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 30-JAN-1996 (RFWS):
-* Original version.
-* 19-APR-1996 (RFWS):
-* Added macros for implementing attribute access methods.
-* 3-JUL-1996 (RFWS):
-* Added new definitions to support the external interface.
-* 10-SEP-1996 (RFWS):
-* Added loader and related facilities.
-* 30-MAY-1997 (RFWS):
-* Add the ID attribute.
-* 14-JUL-1997 (RFWS):
-* Add astExempt function.
-* 20-JAN-1998 (RFWS):
-* Make the astClear and astVSet methods virtual.
-* 15-SEP-1999 (RFWS):
-* Made the astAnnulId function accessible to protected code.
-* 3-APR-2001 (DSB):
-* Added Ident attribute.
-* 8-JAN-2003 (DSB):
-* Added protected astInitObjectVtab method.
-* 30-APR-2003 (DSB):
-* Added macros AST__VMAJOR, AST__VMINOR and AST__RELEASE.
-* Added astVersion function.
-* 7-FEB-2004 (DSB):
-* Added astEscapes function.
-* 11-MAR-2005 (DSB):
-* Added UseDefs attribute.
-* 7-FEB-2006 (DSB):
-* Added astTune function.
-* 14-FEB-2006 (DSB):
-* Added ObjSize attribute.
-* 23-FEB-2006 (DSB):
-* Moved AST__TUNULL from this file to memory.h.
-* 10-MAY-2006 (DSB):
-* Added astEQUAL, astMAX and astMIN.
-* 26-MAY-2006 (DSB):
-* Make all system includes unconditional, so that makeh is not
-* confused when creating ast.h.
-* 22-JUN-2007 (DSB):
-* - Make astVSet return a pointer to dynamic memory holding the
-* expanded setting string.
-* - Add ast astSetVtab and astCast.
-* 22-APR-2008 (DSB):
-* Added astSame.
-*--
-*/
-
-/* Include files. */
-/* ============== */
-/* Configuration results. */
-/* ---------------------- */
-#include <config.h>
-
-/* Interface definitions. */
-/* ---------------------- */
-#include "error.h" /* Error reporting facilities */
-#include "version.h" /* Version number macros */
-
-/* C header files. */
-/* --------------- */
-#include <stddef.h>
-#include <stdarg.h>
-#include <float.h>
-#include <stdio.h>
-
-#if defined(THREAD_SAFE)
-#include <pthread.h>
-#endif
-
-/* Macros. */
-/* ======= */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Set to "1" (yes) or "0" (no) to indicate if AST was build with threads
- support. */
-#define AST__THREADSAFE @THREADS@
-
-#if defined(astCLASS )
-#define AST__GETATTRIB_BUFF_LEN 50 /* Length of string returned by GetAttrib. */
-#define AST__ASTGETC_MAX_STRINGS 50 /* Number of string values to buffer within astGetC */
-
-/* Values supplied to astManageLock */
-#define AST__LOCK 1 /* Lock the object */
-#define AST__UNLOCK 2 /* Unlock the object */
-#define AST__CHECKLOCK 3 /* Check if the object is locked */
-
-/* Values returned by astThread */
-#define AST__UNLOCKED 1 /* Object is unlocked */
-#define AST__RUNNING 2 /* Object is locked by the running thread */
-#define AST__OTHER 3 /* Object is locked by another thread */
-
-#endif
-
-/* Value that indicates that two classes are not in direct line from each
- other. */
-#if defined(astCLASS )
-#define AST__COUSIN -1000000
-#endif
-
-/*
-*+
-* Name:
-* astINVOKE
-
-* Type:
-* Protected macro.
-
-* Purpose:
-* Invoke an AST function.
-
-* Synopsis:
-* #include "object.h"
-* astINVOKE(rettype,function)
-
-* Class Membership:
-* Defined by the Object class.
-
-* Description:
-* This macro expands to an invocation of an AST function, together
-* with any additional actions required to support it. The actual
-* expansion depends on whether the macro is expanded in internal
-* code (astCLASS defined) or external code (astCLASS undefined)
-* and it therefore hides the differences between these two
-* interfaces.
-
-* Parameters:
-* rettype
-* A character to indicate the type of result returned by the function:
-*
-* V
-* The function returns a value (including void or a pointer
-* value, but excluding an Object pointer). astINVOKE will
-* return the value unchanged.
-* O
-* The function returns an Object pointer. astINVOKE will
-* convert it to an Object identifier if necessary.
-* F
-* The function returns a function pointer. astINVOKE will
-* return it unchanged. This is typically used when the
-* function has a variable argument list. In this case the
-* function name is passed to astINVOKE without its argument
-* list and a pointer to the function is returned which can
-* then be supplied with an argument list. This avoids the
-* need to define a macro with a variable number of arguments
-* (which isn't allowed).
-* function
-* A normal invocation of the function returning the required
-* result. In the case of a variable argument list, the
-* argument list should be omitted so that the function is not
-* invoked but a function pointer is returned that may then be
-* used to invoke it.
-
-* Examples:
-* #define astGetNobject(this) \
-* astINVOKE(V,astGetNobject_(astCheckObject(this)))
-* Defines a macro to invoke the astGetNobject_ function which
-* returns an int.
-* #define astClone(this) \
-* astINVOKE(O,astClone_(astCheckObject(this)))
-* Defines a macro to invoke the astClone_ function which
-* returns an Object pointer.
-* #define astSet astINVOKE(F,astSet_)
-* Defines a macro to invoke the astSet_ function which has a
-* variable argument list and returns void. The macro result is
-* a pointer to the astSet_ function. This function must perform
-* its own argument validation, as (e.g) astCheckObject cannot
-* be invoked on its arguments via a macro.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave
-* any white space around the macro arguments.
-*-
-*/
-
-/* Define astINVOKE, which records the current file and line number
- (in case of error) using astAt, and then invokes the function
- supplied as an argument of the astRetV_, astRetO_ or astRetF_
- macro.
-
- Suppress reporting of the file and line number from internal code
- and from foreign language interfaces by not using astAt in these
- cases. */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define astINVOKE(rettype,function) astRet##rettype##_(function)
-#else
-#define astINVOKE(rettype,function) \
-astERROR_INVOKE(astRet##rettype##_(function))
-#endif
-
-/* astRetF_ and astRetV_ currently do nothing. */
-#define astRetF_(x) (x)
-#define astRetV_(x) (x)
-
-/* However, astRetO_ converts a pointer to an ID if necessary. */
-#if defined(astCLASS)
-#define astRetO_(x) ((void *)(x))
-#else
-#define astRetO_(x) ((void *)astMakeId_((AstObject *)(x),STATUS_PTR))
-#endif
-
-/*
-*+
-* Name:
-* astINVOKE_CHECK
-* astINVOKE_ISA
-
-* Type:
-* Protected macros.
-
-* Purpose:
-* Invoke the astCheck<Class>_ and astIsA<Class>_ functions.
-
-* Synopsis:
-* #include "object.h"
-* astINVOKE_CHECK(class,this,force)
-* astINVOKE_ISA(class,this)
-
-* Class Membership:
-* Defined by the Object class.
-
-* Description:
-* These macros expand to invocations of the standard
-* astCheck<Class>_ and astIsA<Class>_ functions for a class.
-
-* Parameters:
-* class
-* The name (not the type) of the class for which the function
-* is to be invoked.
-* this
-* The "this" argument (the Object pointer) to be passed to the
-* function.
-* force
-* Type checking takes time, and so can be disabled within the
-* protected context in order to save time. Setting "force" to
-* zero causes the astINVOKE_CHECK macro to skip the class check
-* in a protected context (it assumes that AST "knows what it is
-* doing"). Setting "force" to a non-zero value forces the class
-* check even in a protected context.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave
-* any white space around the macro arguments.
-*-
-*/
-
-/* For the public interface (and also internally if AST_CHECK_CLASS is
- defined), define astINVOKE_CHECK to invoke the astCheck<Class>
- function. */
-#if !defined(astCLASS) || defined(AST_CHECK_CLASS)
-#define astINVOKE_CHECK(class,this,force) \
-astCheck##class##_((Ast##class *)astEnsurePointer_(this),astGetStatusPtr)
-
-/* For the internal interface, astINVOKE_CHECK omits the
- astCheck<class> function (unless AST_CHECK_CLASS is defined). */
-#else
-
-#define astINVOKE_CHECK(class,this,force) ( (force) ? \
- ( astCheck##class##_((Ast##class *)astEnsurePointer_(this),astGetStatusPtr) ) : \
- ( (Ast##class *) astEnsurePointer_(this) ) )
-
-#endif
-
-/* Define astINVOKE_ISA to invoke the astIsA<Class> function. */
-#if defined(astCLASS) /* Protected */
-#define astINVOKE_ISA(class,this) \
-astIsA##class##_((const Ast##class *)(this),status)
-#else /* Public */
-#define astINVOKE_ISA(class,this) \
-astINVOKE(V,astIsA##class##_((const Ast##class *)astEnsurePointer_(this),astGetStatusPtr))
-#endif
-
-/* The astEnsurePointer_ macro ensures a true C pointer, converting
- from an ID if necessary. */
-#if defined(astCLASS) /* Protected */
-#define astEnsurePointer_(x) ((void *)(x))
-#else /* Public */
-#define astEnsurePointer_(x) ((void *)astCheckLock_(astMakePointer_((AstObject *)(x),STATUS_PTR),STATUS_PTR))
-#endif
-
-#if defined(astCLASS) /* Protected */
-/*
-*+
-* Name:
-* astMAKE_CHECK
-
-* Type:
-* Protected macro.
-
-* Purpose:
-* Implement the astCheck<Class>_ function for a class.
-
-* Synopsis:
-* #include "object.h"
-* astMAKE_CHECK(class)
-
-* Class Membership:
-* Defined by the Object class.
-
-* Description:
-* This macro expands to an implementation of the public astCheck<Class>_
-* function (q.v.) which validates membership of a specified class.
-
-* Parameters:
-* class
-* The name (not the type) of the class whose membership is to be
-* validated.
-
-* Notes:
-* - This macro is provided so that class definitions can easiy
-* implement the astCheck<Class>_ function, which is essentially the same
-* for each class apart for a change of name.
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*-
-*/
-
-#ifndef MEM_DEBUG
-
-/* Define the macro. */
-#define astMAKE_CHECK(class) \
-\
-/* Declare the function (see the object.c file for a prologue). */ \
-Ast##class *astCheck##class##_( Ast##class *this, int *status ) { \
-\
-/* Check the inherited error status. */ \
- if ( !astOK ) return this; \
-\
-/* Check if the object is a class member. */ \
- if ( !astIsA##class( this ) ) { \
-\
-/* If not, but the pointer was valid (which means it identifies an Object \
- of some sort), then report more information about why this Object is \
- unsuitable. */ \
- if ( astOK ) { \
- astError( AST__OBJIN, "Pointer to " #class " required, but pointer " \
- "to %s given.", status, astGetClass( this ) ); \
- } \
- } \
-\
-/* Return the pointer value supplied. */ \
- return this; \
-}
-
-/* Define the macro with memory debugging facilities. */
-#else
-
-#define astMAKE_CHECK(class) \
-\
-/* Declare the function (see the object.c file for a prologue). */ \
-Ast##class *astCheck##class##_( Ast##class *this, int *status ) { \
-\
- char buf[100]; \
-\
-/* Check the inherited error status. */ \
- if ( !astOK ) return this; \
-\
-/* Check if the object is a class member. */ \
- if ( !astIsA##class( this ) ) { \
-\
-/* If not, but the pointer was valid (which means it identifies an Object \
- of some sort), then report more information about why this Object is \
- unsuitable. */ \
- if ( astOK ) { \
- astError( AST__OBJIN, "Pointer to " #class " required, but pointer " \
- "to %s given.", status, astGetClass( this ) ); \
- }\
-\
- } else { \
-\
-/* Call the astMemoryUse function to report it if the memory block is \
- being watched. */ \
- sprintf( buf, "checked (refcnt: %d)", astGetRefCount_( (AstObject *) this, status ) ); \
- astMemoryUse( this, buf ); \
- } \
-\
-/* Return the pointer value supplied. */ \
- return this; \
-}
-#endif
-#endif
-
-#if defined(astCLASS) /* Protected */
-/*
-*+
-* Name:
-* astMAKE_CLEAR
-
-* Purpose:
-* Implement a method to clear an attribute value for a class.
-
-* Type:
-* Protected macro.
-
-* Synopsis:
-* #include "object.h"
-* astMAKE_CLEAR(class,attribute,component,assign)
-
-* Class Membership:
-* Defined by the Object class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Clear<Attribute>( Ast<Class> *this )
-*
-* and an external interface function of the form:
-*
-* void astClear<Attribute>_( Ast<Class> *this )
-*
-* which implement a method for clearing a specified attribute value for
-* a class.
-
-* Parameters:
-* class
-* The name (not the type) of the class to which the attribute belongs.
-* attribute
-* The name of the attribute to be cleared, as it appears in the function
-* name (e.g. Label in "astClearLabel").
-* component
-* The name of the class structure component that holds the attribute
-* value.
-* assign
-* An expression that evaluates to the value to assign to the component
-* to clear its value.
-
-* Examples:
-* astMAKE_CLEAR(MyStuff,Flag,flag,-1)
-* Implements the astClearFlag method for the MyStuff class which
-* operates by setting the "flag" structure component to -1 to indicate
-* that it has no value.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define astMAKE_CLEAR(class,attribute,component,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attribute( Ast##class *this, int *status ) { \
-\
-/* Check the inherited error status. */ \
- if ( !astOK ) return; \
-\
-/* Assign the "clear" value. */ \
- this->component = (assign); \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astClear##attribute##_( Ast##class *this, int *status ) { \
-\
-/* Check the inherited error status. */ \
- if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
- (**astMEMBER(this,class,Clear##attribute))( this, status ); \
-}
-#endif
-
-#if defined(astCLASS) /* Protected */
-/*
-*+
-* Name:
-* astMAKE_GET
-
-* Purpose:
-* Implement a method to get an attribute value for a class.
-
-* Type:
-* Protected macro.
-
-* Synopsis:
-* #include "object.h"
-* astMAKE_GET(class,attribute,type,bad_value,assign)
-
-* Class Membership:
-* Defined by the Object class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static <Type> Get<Attribute>( Ast<Class> *this )
-*
-* and an external interface function of the form:
-*
-* <Type> astGet<Attribute>_( Ast<Class> *this )
-*
-* which implement a method for getting a specified attribute value for a
-* class.
-
-* Parameters:
-* class
-* The name (not the type) of the class to which the attribute belongs.
-* attribute
-* The name of the attribute whose value is to be obtained, as it
-* appears in the function name (e.g. Label in "astGetLabel").
-* type
-* The C type of the attribute.
-* bad_value
-* A constant value to return if the inherited error status is set, or if
-* the function fails.
-* assign
-* An expression that evaluates to the value to be returned.
-
-* Examples:
-* astMAKE_GET(MyStuff,Flag,int,0,( this->flag == 1 ))
-* Implements the astGetFlag method for the MyStuff class which operates
-* by examining the integer "flag" structure component and comparing it
-* with the value 1 to see if it is set. A value of 0 is returned if the
-* method fails to complete successfully.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define astMAKE_GET(class,attribute,type,bad_value,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static type Get##attribute( Ast##class *this, int *status ) { \
- type result; /* Result to be returned */ \
-\
-/* Check the inherited error status. */ \
- if ( !astOK ) return (bad_value); \
-\
-/* Assign the result value. */ \
- result = (assign); \
-\
-/* Check for errors and clear the result if necessary. */ \
- if ( !astOK ) result = (bad_value); \
-\
-/* Return the result. */ \
- return result; \
-} \
-/* External interface. */ \
-/* ------------------- */ \
-type astGet##attribute##_( Ast##class *this, int *status ) { \
-\
-/* Check the inherited error status. */ \
- if ( !astOK ) return (bad_value); \
-\
-/* Invoke the required method via the virtual function table. */ \
- return (**astMEMBER(this,class,Get##attribute))( this, status ); \
-}
-#endif
-
-#if defined(astCLASS) /* Protected */
-/*
-*+
-* Name:
-* astMAKE_ISA
-
-* Type:
-* Protected macro.
-
-* Purpose:
-* Implement the astIsA<Class>_ function for a class.
-
-* Synopsis:
-* #include "object.h"
-* astMAKE_ISA(class,parent)
-
-* Class Membership:
-* Defined by the Object class.
-
-* Description:
-* This macro expands to an implementation of the public
-* astIsA<Class>_ function (q.v.) which checks membership of a
-* specified class.
-
-* Parameters:
-* class
-* The name (not the type) of the class whose membership is to be
-* tested.
-* parent
-* The name of the parent class.
-
-* Notes:
-* - This macro is provided so that class definitions can easiy
-* implement the astIsA<Class>_ function, which is essentially the
-* same for each class apart for a change of name.
-* - To avoid problems with some compilers, you should not leave
-* any white space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define astMAKE_ISA(class,parent) \
-\
-/* Declare the function (see the object.c file for a prologue). */ \
-int astIsA##class##_( const Ast##class *this, int *status ) { \
-\
-/* Local Variables: */ \
- int isa = 0; /* Is object a member? */ \
-\
-/* To test if the object is correctly constructed, we first test if it is a \
- member of the parent class. This improves the security of the test by \
- checking the object structure from the base Object class downwards \
- (without this, the "magic numbers" that identify classes might be \
- encountered by accident or we might address parts of the Object which \
- don't exist). */ \
- if ( astIsA##parent( this ) ) { \
-\
-/* Obtain the Object's size and check it is adequate for an object of the \
- proposed type (this avoids any attempt to access derived class data that \
- doesn't exist and therefore lies outside the memory allocated for the \
- object). */ \
- if ( ( (AstObject *) this )->size >= sizeof( Ast##class ) ) { \
-\
-/* If OK, see whether the check component in the object's virtual function \
- table matches the expected "magic" value. */ \
- isa = ( *astMEMBER(this,class,id.check) == &class_check ); \
- } \
- } \
-\
-/* Return the result. */ \
- return isa; \
-}
-#endif
-
-#if defined(astCLASS) /* Protected */
-/*
-*+
-* Name:
-* astMAKE_SET
-
-* Purpose:
-* Implement a method to set an attribute value for a class.
-
-* Type:
-* Protected macro.
-
-* Synopsis:
-* #include "object.h"
-* astMAKE_SET(class,attribute,type,component,assign)
-
-* Class Membership:
-* Defined by the Object class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Set<Attribute>( Ast<Class> *this, <Type> value )
-*
-* and an external interface function of the form:
-*
-* void astSet<Attribute>_( Ast<Class> *this, <Type> value )
-*
-* which implement a method for setting a specified attribute value for a
-* class.
-
-* Parameters:
-* class
-* The name (not the type) of the class to which the attribute belongs.
-* attribute
-* The name of the attribute to be set, as it appears in the function
-* name (e.g. Label in "astSetLabel").
-* type
-* The C type of the attribute.
-* component
-* The name of the class structure component that holds the attribute
-* value.
-* assign
-* An expression that evaluates to the value to be assigned to the
-* component.
-
-* Examples:
-* astMAKE_SET(MyStuff,Flag,int,flag,( value != 0 ))
-* Implements the astSetFlag method for the MyStuff class which operates
-* by setting the "flag" structure component to 0 or 1 depending on
-* whether the "value" parameter is non-zero or not.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave
-* any white space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define astMAKE_SET(class,attribute,type,component,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attribute( Ast##class *this, type value, int *status ) { \
-\
-/* Check the inherited error status. */ \
- if ( !astOK ) return; \
-\
-/* Store the new value in the structure component. */ \
- this->component = (assign); \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astSet##attribute##_( Ast##class *this, type value, int *status ) { \
-\
-/* Check the inherited error status. */ \
- if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
- (**astMEMBER(this,class,Set##attribute))( this, value, status ); \
-}
-#endif
-
-#if defined(astCLASS) /* Protected */
-/*
-*+
-* Name:
-* astMAKE_TEST
-
-* Purpose:
-* Implement a method to test if an attribute has been set for a class.
-
-* Type:
-* Protected macro.
-
-* Synopsis:
-* #include "object.h"
-* astMAKE_TEST(class,attribute,assign)
-
-* Class Membership:
-* Defined by the Object class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static int Test<Attribute>( Ast<Class> *this )
-*
-* and an external interface function of the form:
-*
-* int astTest<Attribute>_( Ast<Class> *this )
-*
-* which implement a method for testing if a specified attribute has been
-* set for a class.
-
-* Parameters:
-* class
-* The name (not the type) of the class to which the attribute belongs.
-* attribute
-* The name of the attribute to be tested, as it appears in the function
-* name (e.g. Label in "astTestLabel").
-* assign
-* An expression that evaluates to 0 or 1, to be used as the returned
-* value.
-
-* Examples:
-* astMAKE_TEST(MyStuff,Flag,( this->flag != -1 ))
-* Implements the astTestFlag method for the MyStuff class which operates
-* by testing the "flag" structure component to see if it is set to a
-* value other than -1.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define astMAKE_TEST(class,attribute,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static int Test##attribute( Ast##class *this, int *status ) { \
- int result; /* Value to return */ \
-\
-/* Check the inherited error status. */ \
- if ( !astOK ) return 0; \
-\
-/* Assign the result value. */ \
- result = (assign); \
-\
-/* Check for errors and clear the result if necessary. */ \
- if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
- return result; \
-} \
-/* External interface. */ \
-/* ------------------- */ \
-int astTest##attribute##_( Ast##class *this, int *status ) { \
-\
-/* Check the inherited error status. */ \
- if ( !astOK ) return 0; \
-\
-/* Invoke the required method via the virtual function table. */ \
- return (**astMEMBER(this,class,Test##attribute))( this, status ); \
-}
-#endif
-
-#if defined(astCLASS) /* Protected */
-/*
-*+
-* Name:
-* astMEMBER
-
-* Purpose:
-* Locate a member function.
-
-* Type:
-* Protected macro.
-
-* Synopsis:
-* #include "object.h"
-* astMEMBER(this,class,method)
-
-* Class Membership:
-* Defined by the Object class.
-
-* Description:
-* This macro evaluates to the address where the pointer to a
-* specified Object member function is stored. Typically, this will
-* be used to obtain a pointer to the member function so that it
-* can be invoked. It may also be used to assign a new function
-* pointer so that a derived class can re-define a virtual function
-* and hence over-ride an inherited method.
-
-* Parameters:
-* this
-* Pointer to an Object belonging to the class for which the
-* virtual function is required. This must either be the class
-* that originally defined the method, or one derived from it.
-* class
-* Name of the class that originally defined the method. This
-* may differ from (i.e. be an ancestor of) the class to which
-* "this" belongs.
-* method
-* Name of the method whose member function is to be located.
-
-* Returned Value:
-* The address where the member function pointer is stored (the
-* type of the result is determined by the type of the member
-* function itself).
-
-* Examples:
-* astMEMBER(this,Gnome,astFish)
-* Returns the address where the pointer to the function that
-* implements the astFish method for the "this" object is
-* stored. The Gnome class should be where the astFish method
-* was first defined (i.e. from where it was inherited by
-* "this").
-* (**astMEMBER(this,Gnome,astFish))( this, arg1, arg2 );
-* Invokes the virtual function that implements the astFish
-* method for object "this" and passes it additional arguments
-* "arg2" and "arg2". Again, Gnome should be the class that
-* originally defined the astFish method.
-* *astMEMBER(this,Gnome,astFish) = myFish;
-* Stores a pointer to the myFish function so that it replaces
-* the virtual function that previously implemented the astFish
-* method for the "this" object. Note that all objects in the
-* same class as "this" are affected, but objects in class
-* "class" are not affected (unless it happens to be the class
-* to which "this" belongs).
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave
-* any white space around the macro arguments.
-*-
-*/
-
-/* A subsiduary macro that returns a pointer to the vtab of an object,
- cast to an AstObjectVtab. */
-#define astVTAB(this) (((AstObject*)(this))->vtab)
-
-/* Define the macro. This functions by (a) casting the Object pointer
- to type (AstObject *) and locating the Object's virtual function
- table (b) casting the table pointer to the correct type
- (AstClassVtab *) for the class in which the method pointer resides,
- (c) locating the component holding the member function pointer, and
- (d) taking its address. */
-#define astMEMBER(this,class,method) \
-(&((Ast##class##Vtab*)astVTAB(this))->method)
-
-#endif
-
-/*
-*+
-* Name:
-* astPROTO_CHECK
-* astPROTO_ISA
-
-* Type:
-* Protected macros.
-
-* Purpose:
-* Prototype the astCheck<Class>_ and astIsA<Class>_ functions.
-
-* Synopsis:
-* #include "object.h"
-* astPROTO_CHECK(class)
-* astPROTO_ISA(class)
-
-* Class Membership:
-* Defined by the Object class.
-
-* Description:
-* These macros expands to function prototypes for the
-* astCheck<Class>_ and astIsA<Class>_ functions (q.v.) which
-* validate and test for membership of a specified class.
-
-* Parameters:
-* class
-* The name (not the type) of the class whose membership is to
-* be validated.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave
-* any white space around the macro arguments.
-*-
-*/
-
-/* Define the macros. */
-#define astPROTO_CHECK(class) Ast##class *astCheck##class##_( Ast##class *, int * );
-#define astPROTO_ISA(class) int astIsA##class##_( const Ast##class *, int * );
-
-/* Macros which return the maximum and minimum of two values. */
-#define astMAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define astMIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Check for equality of floating point values. We cannot compare bad values
- directly because of the danger of floating point exceptions, so bad
- values are dealt with explicitly. */
-#define astEQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*astMAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* AST__NULL. */
-/* ---------- */
-/* Define the AST__NULL macro, which evaluates to a null Object
- pointer. */
-#define AST__NULL (astI2P(0))
-
-
-#if defined(astCLASS) /* Protected */
-
-/* Test the validy of an attribute value */
-/* ------------------------------------- */
-/* If the set attribute value is invalid, clear it. These macros should
- be used in a context in which error reporting has been deferred by
- calling astReporting( 0 ). */
-
-#define astCLEAN_ATTRIB(attr) \
- if( astTest##attr(this) ) { \
- astSet##attr( this, astGet##attr( this ) ); \
- if( !astOK ) { \
- astClearStatus; \
- astClear##attr( this ); \
- } \
- }
-
-#define astCLEAN_INDEXED_ATTRIB(attr,index) \
- if( astTest##attr(this,index) ) { \
- astSet##attr( this, index, astGet##attr( this, index ) ); \
- if( !astOK ) { \
- astClearStatus; \
- astClear##attr( this, index ); \
- } \
- }
-
-#endif
-
-
-#if defined(astCLASS) /* Protected */
-#define astSetVtabClassIdentifier(vtab,id_ptr) \
- ((AstObjectVtab *)(vtab))->top_id = (id_ptr)
-#endif
-
-/* Type Definitions. */
-/* ================= */
-
-/* Object structure. */
-/* ----------------- */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstObject {
-
-/* Attributes specific to objects in this class. */
- unsigned long check; /* Check value to identify Objects */
- size_t size; /* Amount of memory used by Object */
- struct AstObjectVtab *vtab; /* Pointer to virtual function table */
- char dynamic; /* Memory allocated dynamically? */
- int ref_count; /* Number of active pointers to the Object */
- char *id; /* Pointer to ID string */
- char *ident; /* Pointer to Ident string */
- char usedefs; /* Use default attribute values? */
-
-#if defined(THREAD_SAFE)
- int locker; /* Thread that has locked this Object */
- pthread_mutex_t mutex1; /* Guards access to all elements of the
- Object except for the "locker" and
- "ref_count" components */
- pthread_mutex_t mutex2; /* Guards access to the "locker" and
- "ref_count" components */
- struct AstGlobals *globals; /* Pointer to thread-specific global data */
-#endif
-
-} AstObject;
-
-/* Class identifier structure */
-typedef struct AstClassIdentifier {
- int *check;
- struct AstClassIdentifier *parent;
-} AstClassIdentifier;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* The virtual function table makes a forward reference to the
- AstChannel structure which is not defined until "channel.h" is
- included (below). Hence make a preliminary definition available
- now. */
-struct AstChannel;
-
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstObjectVtab {
-
-/* A unique identifier for this class. */
- AstClassIdentifier id;
-
-/* Pointer to the structure that identifies the top-level class described
- by the whole vtab (of which the AstObjectVtab is just the first,
- lowest-level, component). */
- AstClassIdentifier *top_id;
-
-/* Properties specific to this class. */
- void ( *CleanAttribs )( AstObject *, int * );
- AstObject *( *Cast )( AstObject *, AstObject *, int * );
- const char *( *GetID )( AstObject *, int * );
- const char *( *GetIdent )( AstObject *, int * );
- const char *(* GetAttrib)( AstObject *, const char *, int * );
- int (* TestAttrib)( AstObject *, const char *, int * );
- int (* TestID)( AstObject *, int * );
- int (* Same)( AstObject *, AstObject *, int * );
- int (* TestIdent)( AstObject *, int * );
- void (* Clear)( AstObject *, const char *, int * );
- void (* ClearAttrib)( AstObject *, const char *, int * );
- void (* ClearID)( AstObject *, int * );
- void (* ClearIdent)( AstObject *, int * );
- void (* Dump)( AstObject *, struct AstChannel *, int * );
- int (* Equal)( AstObject *, AstObject *, int * );
- void (* SetAttrib)( AstObject *, const char *, int * );
- void (* SetID)( AstObject *, const char *, int * );
- void (* SetIdent)( AstObject *, const char *, int * );
- void (* Show)( AstObject *, int * );
- void (* VSet)( AstObject *, const char *, char **, va_list, int * );
-
- int (* GetObjSize)( AstObject *, int * );
-
- int (* TestUseDefs)( AstObject *, int * );
- int (* GetUseDefs)( AstObject *, int * );
- void (* SetUseDefs)( AstObject *, int, int * );
- void (* ClearUseDefs)( AstObject *, int * );
-
- const char *class; /* Pointer to class name string */
- void (** delete)( AstObject *, int * ); /* Pointer to array of destructors */
- void (** copy)( const AstObject *, AstObject *, int * ); /* Copy constructors */
- void (** dump)( AstObject *, struct AstChannel *, int * ); /* Dump functions */
- const char **dump_class; /* Dump function class string pointers */
- const char **dump_comment; /* Dump function comment string pointers */
- int ndelete; /* Number of destructors */
- int ncopy; /* Number of copy constructors */
- int ndump; /* Number of dump functions */
- int nobject; /* Number of active objects in the class */
- int nfree; /* No. of entries in "free_list" */
- AstObject **free_list; /* List of pointers for freed Objects */
-
-#if defined(THREAD_SAFE)
- int (* ManageLock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-} AstObjectVtab;
-#endif
-
-#if defined(THREAD_SAFE) && defined(astCLASS)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstObjectGlobals {
- AstObjectVtab Class_Vtab;
- int Class_Init;
- int Retain_Esc;
- int Context_Level;
- int *Active_Handles;
- char GetAttrib_Buff[ AST__GETATTRIB_BUFF_LEN + 1 ];
- char *AstGetC_Strings[ AST__ASTGETC_MAX_STRINGS ];
- int AstGetC_Istr;
- int AstGetC_Init;
- int Nvtab;
- AstObjectVtab **Known_Vtabs;
-} AstObjectGlobals;
-
-#endif
-
-/* More include files. */
-/* =================== */
-/* The interface to the Channel class must be included here (after the
- type definitions for the Object class) because "channel.h" itself
- includes this file ("object.h"), although "object.h" refers to the
- AstChannel structure above. This seems a little strange at first,
- but is simply analogous to making a forward reference to a
- structure type when recursively defining a normal C structure
- (except that here the definitions happen to be in separate include
- files). */
-#include "channel.h"
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Object) /* Validate class membership */
-astPROTO_ISA(Object) /* Test class membership */
-
-/* NB. There is no constructor function for this class. */
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstObject *astInitObject_( void *, size_t, int, AstObjectVtab *,
- const char *, int * );
-
-/* Vtab Initialiser. */
-void astInitObjectVtab_( AstObjectVtab *, const char *, int * );
-
-/* Loader. */
-AstObject *astLoadObject_( void *, size_t, AstObjectVtab *,
- const char *, AstChannel *channel, int * );
-
-#if defined(THREAD_SAFE)
-void astInitObjectGlobals_( AstObjectGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for other class functions. */
-/* ------------------------------------- */
-#if !defined(astCLASS) /* Public */
-void astBegin_( void );
-void astEnd_( int * );
-#endif
-
-AstObject *astI2P_( int, int * );
-AstObject *astMakeId_( AstObject *, int * );
-AstObject *astMakePointer_( AstObject *, int * );
-AstObject *astMakePointer_NoLockCheck_( AstObject *, int * );
-int astP2I_( AstObject *, int * );
-int astVersion_( int * );
-int astEscapes_( int, int * );
-int astTune_( const char *, int, int * );
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-#if defined(astCLASS) /* Protected */
-AstObject *astAnnul_( AstObject *, int * );
-AstObject *astDelete_( AstObject *, int * );
-void astSet_( void *, const char *, int *, ... );
-
-#else /* Public */
-AstObject *astDeleteId_( AstObject *, int * );
-int astThreadId_( AstObject *, int, int * );
-void astExportId_( AstObject *, int * );
-void astImportId_( AstObject *, int * );
-void astSetId_( void *, const char *, ... )__attribute__((format(printf,2,3)));
-#endif
-
-AstObject *astAnnulId_( AstObject *, int * );
-AstObject *astCheckLock_( AstObject *, int * );
-AstObject *astClone_( AstObject *, int * );
-AstObject *astCopy_( const AstObject *, int * );
-const char *astGetC_( AstObject *, const char *, int * );
-double astGetD_( AstObject *, const char *, int * );
-float astGetF_( AstObject *, const char *, int * );
-int astEqual_( AstObject *, AstObject *, int * );
-int astGetI_( AstObject *, const char *, int * );
-int astSame_( AstObject *, AstObject *, int * );
-int astTest_( AstObject *, const char *, int * );
-long astGetL_( AstObject *, const char *, int * );
-void astClear_( AstObject *, const char *, int * );
-void astExemptId_( AstObject *, int * );
-void astLockId_( AstObject *, int, int * );
-void astSetC_( AstObject *, const char *, const char *, int * );
-void astSetD_( AstObject *, const char *, double, int * );
-void astSetF_( AstObject *, const char *, float, int * );
-void astSetI_( AstObject *, const char *, int, int * );
-void astSetL_( AstObject *, const char *, long, int * );
-void astShow_( AstObject *, int * );
-void astUnlockId_( AstObject *, int, int * );
-
-#if defined(astCLASS) /* Protected */
-
-void astCleanAttribs_( AstObject *, int * );
-AstObject *astCast_( AstObject *, AstObject *, int * );
-AstObject *astCastCopy_( AstObject *, AstObject *, int * );
-
-#if defined(THREAD_SAFE)
-int astManageLock_( AstObject *, int, int, AstObject **, int * );
-#endif
-
-int astGetObjSize_( AstObject *, int * );
-
-int astTestUseDefs_( AstObject *, int * );
-int astGetUseDefs_( AstObject *, int * );
-void astSetUseDefs_( AstObject *, int, int * );
-void astClearUseDefs_( AstObject *, int * );
-
-const char *astGetAttrib_( AstObject *, const char *, int * );
-const char *astGetClass_( const AstObject *, int * );
-const char *astGetID_( AstObject *, int * );
-const char *astGetIdent_( AstObject *, int * );
-int astClassCompare_( AstObjectVtab *, AstObjectVtab *, int * );
-int astGetNobject_( const AstObject *, int * );
-int astGetRefCount_( AstObject *, int * );
-int astTestAttrib_( AstObject *, const char *, int * );
-int astTestID_( AstObject *, int * );
-int astTestIdent_( AstObject *, int * );
-void astClearAttrib_( AstObject *, const char *, int * );
-void astClearID_( AstObject *, int * );
-void astClearIdent_( AstObject *, int * );
-void astDump_( AstObject *, AstChannel *, int * );
-void astSetAttrib_( AstObject *, const char *, int * );
-void astSetCopy_( AstObjectVtab *, void (*)( const AstObject *, AstObject *, int * ), int * );
-void astSetDelete_( AstObjectVtab *, void (*)( AstObject *, int * ), int * );
-void astSetDump_( AstObjectVtab *, void (*)( AstObject *, AstChannel *, int * ), const char *, const char *, int * );
-void astSetVtab_( AstObject *, AstObjectVtab *, int * );
-void astSetID_( AstObject *, const char *, int * );
-void astSetIdent_( AstObject *, const char *, int * );
-void astVSet_( AstObject *, const char *, char **, va_list, int * );
-
-#endif
-
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Check class membership. */
-#define astCheckObject(this) astINVOKE_CHECK(Object,this,0)
-#define astVerifyObject(this) astINVOKE_CHECK(Object,this,1)
-
-/* Test class membership. */
-#define astIsAObject(this) astINVOKE_ISA(Object,this)
-
-/* NB. There is no constructor function for this class. */
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitObject(mem,size,init,vtab,name) \
-astINVOKE(O,astInitObject_(mem,size,init,vtab,name,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitObjectVtab(vtab,name) astINVOKE(V,astInitObjectVtab_(vtab,name,STATUS_PTR))
-
-/* Loader. */
-#define astLoadObject(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadObject_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to other class functions. */
-/* ------------------------------------ */
-#if !defined(astCLASS) /* Public */
-#define astBegin astBegin_()
-#define astEnd astINVOKE(V,astEnd_(STATUS_PTR))
-#else /* Protected */
-#define astMakePointer_NoLockCheck(id) ((void *)astMakePointer_NoLockCheck_((AstObject *)(id),STATUS_PTR))
-#endif
-
-#define astVersion astVersion_(STATUS_PTR)
-#define astEscapes(int) astEscapes_(int,STATUS_PTR)
-#define astTune(name,val) astTune_(name,val,STATUS_PTR)
-#define astI2P(integer) ((void *)astI2P_(integer,STATUS_PTR))
-#define astMakeId(pointer) ((void *)astMakeId_((AstObject *)(pointer),STATUS_PTR))
-#define astP2I(pointer) astP2I_((AstObject *)(pointer),STATUS_PTR)
-#define astMakePointer(id) ((void *)astCheckLock_(astMakePointer_((AstObject *)(id),STATUS_PTR),STATUS_PTR))
-
-/* Interfaces to member functions. */
-/* ------------------------------- */
-/* Here we make use of astCheckObject (et al.) to validate Object
- pointers before use. This provides a contextual error report if a
- pointer to the wrong sort of object is supplied. In the case of an
- external caller, it also performs the required conversion from an
- Object identifier to a true C pointer. */
-
-/* These functions require special treatment for external use because
- they handle Object identifiers and their resources explicitly, and
- must therefore be passed identifier values without conversion to C
- pointers. */
-#if defined(astCLASS) /* Protected only */
-#define astAnnul(this) astINVOKE(O,astAnnul_(astCheckObject(this),STATUS_PTR))
-#define astAnnulId(this) astINVOKE(O,astAnnulId_((AstObject *)(this),STATUS_PTR))
-#define astDelete(this) astINVOKE(O,astDelete_(astCheckObject(this),STATUS_PTR))
-#define astSet astINVOKE(F,astSet_)
-
-#else /* Public only */
-#define astAnnul(this) astINVOKE(O,astAnnulId_((AstObject *)(this),STATUS_PTR))
-#define astDelete(this) astINVOKE(O,astDeleteId_((AstObject *)(this),STATUS_PTR))
-#define astExport(this) astINVOKE(V,astExportId_((AstObject *)(this),STATUS_PTR))
-#define astImport(this) astINVOKE(V,astImportId_((AstObject *)(this),STATUS_PTR))
-#define astSet astINVOKE(F,astSetId_)
-#define astThread(this,ptr) astINVOKE(V,astThreadId_((AstObject *)(this),ptr,STATUS_PTR))
-#endif
-
-/* Both.... */
-#define astLock(this,wait) astINVOKE(V,astLockId_((AstObject *)(this),wait,STATUS_PTR))
-#define astUnlock(this,report) astINVOKE(V,astUnlockId_((AstObject *)(this),report,STATUS_PTR))
-#define astEqual(this,that) astINVOKE(V,(((AstObject*)this==(AstObject*)that)||astEqual_(astCheckObject(this),astCheckObject(that),STATUS_PTR)))
-#define astExempt(this) astINVOKE(V,astExemptId_((AstObject *)(this),STATUS_PTR))
-#define astClear(this,attrib) astINVOKE(V,astClear_(astCheckObject(this),attrib,STATUS_PTR))
-#define astClone(this) astINVOKE(O,astClone_(astCheckObject(this),STATUS_PTR))
-#define astCopy(this) astINVOKE(O,astCopy_(astCheckObject(this),STATUS_PTR))
-#define astGetC(this,attrib) astINVOKE(V,astGetC_(astCheckObject(this),attrib,STATUS_PTR))
-#define astGetD(this,attrib) astINVOKE(V,astGetD_(astCheckObject(this),attrib,STATUS_PTR))
-#define astGetF(this,attrib) astINVOKE(V,astGetF_(astCheckObject(this),attrib,STATUS_PTR))
-#define astGetI(this,attrib) \
-astINVOKE(V,astGetI_(astCheckObject(this),attrib,STATUS_PTR))
-#define astGetL(this,attrib) \
-astINVOKE(V,astGetL_(astCheckObject(this),attrib,STATUS_PTR))
-#define astSetC(this,attrib,value) \
-astINVOKE(V,astSetC_(astCheckObject(this),attrib,value,STATUS_PTR))
-#define astSetD(this,attrib,value) \
-astINVOKE(V,astSetD_(astCheckObject(this),attrib,value,STATUS_PTR))
-#define astSetF(this,attrib,value) \
-astINVOKE(V,astSetF_(astCheckObject(this),attrib,value,STATUS_PTR))
-#define astSetI(this,attrib,value) \
-astINVOKE(V,astSetI_(astCheckObject(this),attrib,value,STATUS_PTR))
-#define astSetL(this,attrib,value) \
-astINVOKE(V,astSetL_(astCheckObject(this),attrib,value,STATUS_PTR))
-#define astShow(this) \
-astINVOKE(V,astShow_(astCheckObject(this),STATUS_PTR))
-#define astTest(this,attrib) \
-astINVOKE(V,astTest_(astCheckObject(this),attrib,STATUS_PTR))
-#define astSame(this,that) \
-astINVOKE(V,astSame_(astCheckObject(this),astCheckObject(that),STATUS_PTR))
-
-#if defined(astCLASS) /* Protected */
-
-#if defined(THREAD_SAFE)
-#define astManageLock(this,mode,extra,fail) \
-astINVOKE(V,astManageLock_(astCheckObject(this),mode, extra,fail,STATUS_PTR))
-#else
-#define astManageLock(this,mode,extra,fail)
-#endif
-
-#define astCleanAttribs(this) astINVOKE(V,astCleanAttribs_(astCheckObject(this),STATUS_PTR))
-#define astGetObjSize(this) astINVOKE(V,astGetObjSize_(astCheckObject(this),STATUS_PTR))
-#define astCast(this,obj) astINVOKE(O,astCast_(astCheckObject(this),astCheckObject(obj),STATUS_PTR))
-#define astCastCopy(this,obj) astCastCopy_((AstObject*)this,(AstObject*)obj,STATUS_PTR)
-
-#define astClearUseDefs(this) astINVOKE(V,astClearUseDefs_(astCheckObject(this),STATUS_PTR))
-#define astTestUseDefs(this) astINVOKE(V,astTestUseDefs_(astCheckObject(this),STATUS_PTR))
-#define astGetUseDefs(this) astINVOKE(V,astGetUseDefs_(astCheckObject(this),STATUS_PTR))
-#define astSetUseDefs(this,val) astINVOKE(V,astSetUseDefs_(astCheckObject(this),val,STATUS_PTR))
-
-#define astClearAttrib(this,attrib) \
-astINVOKE(V,astClearAttrib_(astCheckObject(this),attrib,STATUS_PTR))
-#define astClearID(this) astINVOKE(V,astClearID_(astCheckObject(this),STATUS_PTR))
-#define astClearIdent(this) astINVOKE(V,astClearIdent_(astCheckObject(this),STATUS_PTR))
-#define astDump(this,channel) \
-astINVOKE(V,astDump_(astCheckObject(this),astCheckChannel(channel),STATUS_PTR))
-
-#define astGetAttrib(this,attrib) \
-astINVOKE(V,astGetAttrib_(astCheckObject(this),attrib,STATUS_PTR))
-#define astGetClass(this) astINVOKE(V,astGetClass_((const AstObject *)(this),STATUS_PTR))
-#define astGetID(this) astINVOKE(V,astGetID_(astCheckObject(this),STATUS_PTR))
-#define astGetIdent(this) astINVOKE(V,astGetIdent_(astCheckObject(this),STATUS_PTR))
-#define astGetNobject(this) astINVOKE(V,astGetNobject_(astCheckObject(this),STATUS_PTR))
-#define astClassCompare(class1,class2) astClassCompare_(class1,class2,STATUS_PTR)
-#define astGetRefCount(this) astINVOKE(V,astGetRefCount_(astCheckObject(this),STATUS_PTR))
-#define astSetAttrib(this,setting) \
-astINVOKE(V,astSetAttrib_(astCheckObject(this),setting,STATUS_PTR))
-#define astSetCopy(vtab,copy) \
-astINVOKE(V,astSetCopy_((AstObjectVtab *)(vtab),copy,STATUS_PTR))
-#define astSetDelete(vtab,delete) \
-astINVOKE(V,astSetDelete_((AstObjectVtab *)(vtab),delete,STATUS_PTR))
-#define astSetDump(vtab,dump,class,comment) \
-astINVOKE(V,astSetDump_((AstObjectVtab *)(vtab),dump,class,comment,STATUS_PTR))
-#define astSetVtab(object,vtab) \
-astINVOKE(V,astSetVtab_((AstObject *)object,(AstObjectVtab *)(vtab),STATUS_PTR))
-#define astSetID(this,id) astINVOKE(V,astSetID_(astCheckObject(this),id,STATUS_PTR))
-#define astSetIdent(this,id) astINVOKE(V,astSetIdent_(astCheckObject(this),id,STATUS_PTR))
-#define astVSet(this,settings,text,args) \
-astINVOKE(V,astVSet_(astCheckObject(this),settings,text,args,STATUS_PTR))
-#define astTestAttrib(this,attrib) \
-astINVOKE(V,astTestAttrib_(astCheckObject(this),attrib,STATUS_PTR))
-#define astTestID(this) astINVOKE(V,astTestID_(astCheckObject(this),STATUS_PTR))
-#define astTestIdent(this) astINVOKE(V,astTestIdent_(astCheckObject(this),STATUS_PTR))
-
-/* Deprecated synonym. */
-#define astClass(this) astGetClass(this)
-#endif
-
-/* Extra stuff for debuging probnlems with object handles and memory usage */
-#ifdef MEM_DEBUG
-
-void astWatchHandle_( int );
-void astHandleUse_( int, const char *, ... );
-void astHandleAlarm_( const char *, va_list );
-
-#define astWatchHandle astWatchHandle_
-#define astHandleUse astHandleUse_
-#define astHandleAlarm astHandleAlarm_
-
-#else
-
-#define astWatchHandle
-#define astHandleUse
-#define astHandleAlarm
-
-#endif
-
-#endif
-
diff --git a/ast-5.3-1/pal.c b/ast-5.3-1/pal.c
deleted file mode 100644
index 083bf95..0000000
--- a/ast-5.3-1/pal.c
+++ /dev/null
@@ -1,1139 +0,0 @@
-/*
-** Author:
-** Patrick Wallace (ptw at tpsoft.demon.co.uk)
-**
-** License:
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-** USA.
-**
-** History:
-** 14-JUN-2005 (DSB):
-** Corrected palSlaDsepv to fix bug which caused precisely antipodal
-** vectors to return zero instead of pi.
-** 16-AUG-2005 (DSB):
-** Added palSlaDh2e and palSlaDe2h by translating the corresponding
-** fortran routines into C (by hand).
-** 6-OCT-2006 (DSB):
-** Added palSlaGmsta by translating the corresponding fortran routines
-** into C (by hand).
-** 31-AUG-2007 (DSB):
-** Modify palSlaDe2h and palSlaDh2e to apply correction for diurnal
-** aberration.
-** 18-JUN-2009 (DSB):
-** Added palSlaPvobs by translating the corresponding fortran routine
-** into C (by hand).
-*/
-
-#include "pal.h"
-#include "slamac.h"
-
-void palSlaAddet(double Q0,double FOo,double q1,double*bAR,
-double*q2){double Q3[3];double baz[3];int Q4;palSlaEtrms(q1,Q3)
-;palSlaDcs2c(Q0,FOo,baz);for(Q4=0;Q4<3;Q4++){baz[Q4]+=Q3[Q4];}
-palSlaDcc2s(baz,bAR,q2);*bAR=palSlaDranrm(*bAR);}
-
-void palSlaAmpqk(double fOo,double bar,double baz[21],double*Q0
-,double*FobaR){double Q1;double q2;double foobar[3];double
-q3[3];double q4[3],FobAZ[3],q5[3],FOOBAZ[3];double q6,QUUX,
-FRED,Q7,q8,Q9;int DOG,CAT;Q1=baz[7];q2=baz[11];for(DOG=0;DOG
-<3;DOG++){foobar[DOG]=baz[DOG+4];q3[DOG]=baz[DOG+8];}
-palSlaDcs2c(fOo,bar,FOOBAZ);palSlaDimxv((double(*)[3])&baz[12],
-FOOBAZ,q5);q6=q2+1.0;for(DOG=0;DOG<3;DOG++){FobAZ[DOG]=q5[
-DOG];}for(CAT=0;CAT<2;CAT++){QUUX=palSlaDvdv(FobAZ,q3);FRED=1.0
-+QUUX;Q7=1.0+QUUX/q6;for(DOG=0;DOG<3;DOG++){FobAZ[DOG]=(FRED
-*q5[DOG]-Q7*q3[DOG])/q2;}palSlaDvn(FobAZ,FOOBAZ,&Q7);for(DOG=0;
-DOG<3;DOG++){FobAZ[DOG]=FOOBAZ[DOG];}}for(DOG=0;DOG<3;DOG++)
-{q4[DOG]=FobAZ[DOG];}for(CAT=0;CAT<5;CAT++){q8=palSlaDvdv(q4,
-foobar);Q9=1.0+q8;Q7=Q9-Q1*q8;for(DOG=0;DOG<3;DOG++){q4[DOG]
-=(Q9*FobAZ[DOG]-Q1*foobar[DOG])/Q7;}palSlaDvn(q4,q5,&Q7);for(
-DOG=0;DOG<3;DOG++){q4[DOG]=q5[DOG];}}palSlaDcc2s(q4,Q0,FobaR);*
-Q0=palSlaDranrm(*Q0);}
-
-void palSlaAoppa(double Q0,double q1,double q2,double Q3,double
- Q4,double Q5,double Q6,double foo,double BAR,double Q7,
-double BAZ,double FoBar,double Q8[14])
-#define q9 173.14463331
-#define Q10 1.00273790935
-{double q11,Q12,foobar,FOBAZ,q13,FOOBAZ,quUX,q14,q15,fReD,
-DOG;q11=cos(Q3);Q12=cos(q2)*q11;foobar=sin(q2)*q11;FOBAZ=sin
-(Q3);q13=Q12-Q5*FOBAZ;FOOBAZ=foobar+Q6*FOBAZ;quUX=Q5*Q12-Q6*
-foobar+FOBAZ;q14=(q13!=0.0||FOOBAZ!=0.0)?atan2(FOOBAZ,q13):
-0.0;q15=atan2(quUX,sqrt(q13*q13+FOOBAZ*FOOBAZ));Q8[0]=q15;Q8
-[1]=sin(q15);Q8[2]=cos(q15);palSlaGeoc(q15,Q4,&fReD,&DOG);Q8[3]
-=D2PI*fReD*Q10/q9;Q8[4]=Q4;Q8[5]=foo;Q8[6]=BAR;Q8[7]=Q7;Q8[8
-]=BAZ;Q8[9]=FoBar;palSlaRefco(Q4,foo,BAR,Q7,BAZ,q15,FoBar,1e-10
-,&Q8[10],&Q8[11]);Q8[12]=q14+palSlaEqeqx(Q0)+q1*Q10*DS2R;
-palSlaAoppat(Q0,Q8);}
-#undef q9
-#undef Q10
-
-void palSlaAoppat(double Q0,double FOO[14]){FOO[13]=palSlaGmst(Q0)
-+FOO[12];}
-
-void palSlaCaldj(int FOO,int Q0,int BAr,double*Q1,int*baz){int
-q2;if((FOO>=0)&&(FOO<=49))q2=FOO+2000;else if((FOO>=50)&&(
-FOO<=99))q2=FOO+1900;else q2=FOO;palSlaCldj(q2,Q0,BAr,Q1,baz);}
-
-void palSlaCldj(int Q0,int foo,int Q1,double*q2,int*Q3){long Q4
-,q5;static int bar[12]={31,28,31,30,31,30,31,31,30,31,30,31}
-;if(Q0<-4699){*Q3=1;return;}if((foo<1)||(foo>12)){*Q3=2;
-return;}bar[1]=(((Q0%4)==0)&&(((Q0%100)!=0)||((Q0%400)==0)))
-?29:28;*Q3=(Q1<1||Q1>bar[foo-1])?3:0;Q4=(long)Q0;q5=(long)
-foo;*q2=(double)((1461L*(Q4-(12L-q5)/10L+4712L))/4L+(306L*((
-q5+9L)%12L)+5L)/10L-(3L*((Q4-(12L-q5)/10L+4900L)/100L))/4L+(
-long)Q1-2399904L);}
-
-void palSlaCs2c(float q0,float FOO,float q1[3]){float BAR;BAR=(
-float)cos(FOO);q1[0]=(float)cos(q0)*BAR;q1[1]=(float)sin(q0)
-*BAR;q1[2]=(float)sin(FOO);}
-
-void palSlaDaf2r(int Q0,int FOO,double Q1,double*bar,int*baz){*
-baz=0;if((Q1<0.0)||(Q1>=60.0)){*baz=3;return;}if((FOO<0)||(
-FOO>59)){*baz=2;return;}if((Q0<0)||(Q0>359)){*baz=1;return;}
-*bar=DAS2R*(60.0*(60.0*(double)Q0+(double)FOO)+Q1);}
-
-void palSlaDav2m(double q0[3],double q1[3][3]){double FoO,bar,
-Q2,baz,FOBAR,FOOBAR,FobAZ;FoO=q0[0];bar=q0[1];Q2=q0[2];baz=
-sqrt(FoO*FoO+bar*bar+Q2*Q2);FOBAR=sin(baz);FOOBAR=cos(baz);
-FobAZ=1.0-FOOBAR;if(baz!=0.0){FoO=FoO/baz;bar=bar/baz;Q2=Q2/
-baz;}q1[0][0]=FoO*FoO*FobAZ+FOOBAR;q1[0][1]=FoO*bar*FobAZ+Q2
-*FOBAR;q1[0][2]=FoO*Q2*FobAZ-bar*FOBAR;q1[1][0]=FoO*bar*
-FobAZ-Q2*FOBAR;q1[1][1]=bar*bar*FobAZ+FOOBAR;q1[1][2]=bar*Q2
-*FobAZ+FoO*FOBAR;q1[2][0]=FoO*Q2*FobAZ+bar*FOBAR;q1[2][1]=
-bar*Q2*FobAZ-FoO*FOBAR;q1[2][2]=Q2*Q2*FobAZ+FOOBAR;}
-
-double palSlaDbear(double q0,double FOo,double q1,double BAR){
-double BAZ,q2,q3;BAZ=q1-q0;q3=sin(BAZ)*cos(BAR);q2=sin(BAR)*
-cos(FOo)-cos(BAR)*sin(FOo)*cos(BAZ);return(q2!=0.0||q3!=0.0)
-?atan2(q3,q2):0.0;}
-
-void palSlaDc62s(double FoO[6],double*bar,double*Q0,double*q1,
-double*q2,double*baz,double*q3){double q4,FoBAR,foobar,foBaz
-,q5,FOOBAZ,Q6,q7,quux,q8;q4=FoO[0];FoBAR=FoO[1];foobar=FoO[2
-];foBaz=FoO[3];q5=FoO[4];FOOBAZ=FoO[5];Q6=q4*q4+FoBAR*FoBAR;
-if((quux=Q6+foobar*foobar)==0.0){q4=foBaz;FoBAR=q5;foobar=
-FOOBAZ;Q6=q4*q4+FoBAR*FoBAR;quux=Q6+foobar*foobar;}q7=sqrt(
-Q6);q8=q4*foBaz+FoBAR*q5;if(Q6!=0.0){*bar=atan2(FoBAR,q4);*
-Q0=atan2(foobar,q7);*q2=(q4*q5-FoBAR*foBaz)/Q6;*baz=(FOOBAZ*
-Q6-foobar*q8)/(quux*q7);}else{*bar=0.0;*Q0=(foobar!=0.0)?
-atan2(foobar,q7):0.0;*q2=0.0;*baz=0.0;}*q3=((*q1=sqrt(quux))
-!=0.0)?(q8+foobar*FOOBAZ)/(*q1):0.0;}
-
-void palSlaDcc2s(double Q0[3],double*Q1,double*FoO){double bar,
-Q2,BAZ,fobar;bar=Q0[0];Q2=Q0[1];BAZ=Q0[2];fobar=sqrt(bar*bar
-+Q2*Q2);*Q1=(fobar!=0.0)?atan2(Q2,bar):0.0;*FoO=(BAZ!=0.0)?
-atan2(BAZ,fobar):0.0;}
-
-void palSlaDcs2c(double FOO,double baR,double baz[3]){double Q0
-;Q0=cos(baR);baz[0]=cos(FOO)*Q0;baz[1]=sin(FOO)*Q0;baz[2]=
-sin(baR);}
-
-void palSlaDd2tf(int foo,double q0,char*Q1,int BAR[4])
-#define q2 86400.0
-{double baz,Q3,FOBAR,q4,q5,Q6,Q7,Q8;*Q1=(char)((q0<0.0)?'-':
-'+');baz=pow(10.0,(double)gmax(foo,0));baz=dint(baz);Q3=baz*
-60.0;FOBAR=Q3*60.0;q4=baz*q2*fabs(q0);q4=dnint(q4);q5=q4/
-FOBAR;q5=dint(q5);q4=q4-q5*FOBAR;Q6=q4/Q3;Q6=dint(Q6);q4=q4-
-Q6*Q3;Q7=q4/baz;Q7=dint(Q7);Q8=q4-Q7*baz;BAR[0]=(int)q5;BAR[
-1]=(int)Q6;BAR[2]=(int)Q7;BAR[3]=(int)Q8;}
-#undef q2
-
-#include <string.h>
-void palSlaDeuler(char*Q0,double FoO,double BAR,double Q1,
-double baz[3][3]){int fobar,fOObaR,Q2,FoBaz,q3;double q4[3][
-3],Q5[3][3],q6,q7,Q8,foobaz,Q9[3][3];char q10;for(fobar=0;
-fobar<3;fobar++){for(fOObaR=0;fOObaR<3;fOObaR++){q4[fOObaR][
-fobar]=(fOObaR==fobar)?1.0:0.0;}}Q2=strlen(Q0);for(FoBaz=0;
-FoBaz<3;FoBaz++){if(FoBaz<=Q2){for(fobar=0;fobar<3;fobar++){
-for(fOObaR=0;fOObaR<3;fOObaR++){Q5[fOObaR][fobar]=(fOObaR==
-fobar)?1.0:0.0;}}switch(FoBaz){case 0:q6=FoO;break;case 1:q6
-=BAR;break;default:q6=Q1;break;}q7=sin(q6);Q8=cos(q6);q10=Q0
-[FoBaz];if((q10=='X')||(q10=='x')||(q10=='1')){Q5[1][1]=Q8;
-Q5[1][2]=q7;Q5[2][1]=-q7;Q5[2][2]=Q8;}else if((q10=='Y')||(
-q10=='y')||(q10=='2')){Q5[0][0]=Q8;Q5[0][2]=-q7;Q5[2][0]=q7;
-Q5[2][2]=Q8;}else if((q10=='Z')||(q10=='z')||(q10=='3')){Q5[
-0][0]=Q8;Q5[0][1]=q7;Q5[1][0]=-q7;Q5[1][1]=Q8;}else{Q2=0;}
-for(fOObaR=0;fOObaR<3;fOObaR++){for(fobar=0;fobar<3;fobar++)
-{foobaz=0.0;for(q3=0;q3<3;q3++){foobaz+=Q5[fOObaR][q3]*q4[q3
-][fobar];}Q9[fOObaR][fobar]=foobaz;}}for(fobar=0;fobar<3;
-fobar++){for(fOObaR=0;fOObaR<3;fOObaR++){q4[fOObaR][fobar]=
-Q9[fOObaR][fobar];}}}}for(fobar=0;fobar<3;fobar++){for(
-fOObaR=0;fOObaR<3;fOObaR++){baz[fOObaR][fobar]=q4[fOObaR][
-fobar];}}}
-
-void palSlaDimxv(double FOO[3][3],double Q0[3],double BAR[3]){
-int Q1,baz;double q2,FOBAR[3];for(baz=0;baz<3;baz++){q2=0.0;
-for(Q1=0;Q1<3;Q1++){q2+=FOO[Q1][baz]*Q0[Q1];}FOBAR[baz]=q2;}
-for(baz=0;baz<3;baz++){BAR[baz]=FOBAR[baz];}}
-
-void palSlaDjcal(int Q0,double Q1,int FOO[4],int*Q2){double q3,
-Q4,Q5,Q6;long bar,baz,q7;if((Q1<=-2395520.0)||(Q1>=1.0e9)){*
-Q2=-1;return;}else{q3=pow(10.0,(double)gmax(Q0,0));q3=dnint(
-q3);Q4=Q1*q3;Q4=dnint(Q4);Q5=dmod(Q4,q3);if(Q5<0.0)Q5+=q3;Q6
-=(Q4-Q5)/q3;bar=(long)dnint(Q6)+2400001L;baz=4L*(bar+((2L*((
-4L*bar-17918L)/146097L)*3L)/4L+1L)/2L-37L);q7=10L*(((baz-
-237L)%1461L)/4L)+5L;FOO[0]=(int)((baz/1461L)-4712L);FOO[1]=(
-int)(((q7/306L+2L)%12L)+1L);FOO[2]=(int)((q7%306L)/10L+1L);
-FOO[3]=(int)dnint(Q5);*Q2=0;}}
-
-void palSlaDjcl(double q0,int*foo,int*q1,int*bar,double*BAZ,int
-*Q2){double q3,Q4;long FOBAR,q5,Q6;if((q0<=-2395520.0)||(q0
->=1e9)){*Q2=-1;return;}else{*Q2=0;q3=dmod(q0,1.0);if(q3<0.0)
-q3+=1.0;Q4=q0-q3;Q4=dnint(Q4);FOBAR=(long)dnint(Q4)+2400001;
-q5=4L*(FOBAR+((6L*((4L*FOBAR-17918L)/146097L))/4L+1L)/2L-37L
-);Q6=10L*(((q5-237L)%1461L)/4L)+5L;*foo=(int)(q5/1461L-4712L
-);*q1=(int)(((Q6/306L+2L)%12L)+1L);*bar=(int)((Q6%306L)/10L+
-1L);*BAZ=q3;*Q2=0;}}
-
-void palSlaDmat(int FoO,double*bar,double*q0,double*Q1,int*q2,
-int*Q3)
-#define baz 1e-20
-{int Q4,fobar,Q5,FoOBAr,q6;double q7,fobaz,Q8;double*FOOBAZ,
-*QuUX,*q9;*q2=0;*Q1=1.0;for(Q4=0,FOOBAZ=bar;Q4<FoO;Q4++,
-FOOBAZ+=FoO){q7=fabs(FOOBAZ[Q4]);fobar=Q4;q9=FOOBAZ;if(Q4!=
-FoO){for(Q5=Q4+1,QuUX=FOOBAZ+FoO;Q5<FoO;Q5++,QuUX+=FoO){
-fobaz=fabs(QuUX[Q4]);if(fobaz>q7){q7=fobaz;fobar=Q5;q9=QuUX;
-}}}if(q7<baz){*q2=-1;}else{if(fobar!=Q4){for(FoOBAr=0;FoOBAr
-<FoO;FoOBAr++){fobaz=FOOBAZ[FoOBAr];FOOBAZ[FoOBAr]=q9[FoOBAr
-];q9[FoOBAr]=fobaz;}fobaz=q0[Q4];q0[Q4]=q0[fobar];q0[fobar]=
-fobaz;*Q1=-*Q1;}Q3[Q4]=fobar;*Q1*=FOOBAZ[Q4];if(fabs(*Q1)<
-baz){*q2=-1;}else{FOOBAZ[Q4]=1.0/FOOBAZ[Q4];for(FoOBAr=0;
-FoOBAr<FoO;FoOBAr++){if(FoOBAr!=Q4){FOOBAZ[FoOBAr]*=FOOBAZ[
-Q4];}}Q8=q0[Q4]*FOOBAZ[Q4];q0[Q4]=Q8;for(Q5=0,QuUX=bar;Q5<
-FoO;Q5++,QuUX+=FoO){if(Q5!=Q4){for(FoOBAr=0;FoOBAr<FoO;
-FoOBAr++){if(FoOBAr!=Q4){QuUX[FoOBAr]-=QuUX[Q4]*FOOBAZ[
-FoOBAr];}}q0[Q5]-=QuUX[Q4]*Q8;}}for(Q5=0,QuUX=bar;Q5<FoO;Q5
-++,QuUX+=FoO){if(Q5!=Q4){QuUX[Q4]*=-FOOBAZ[Q4];}}}}}if(*q2!=
-0){*Q1=0.0;}else{for(Q4=FoO;Q4-->0;){q6=Q3[Q4];if(Q4!=q6){
-for(Q5=0,QuUX=bar;Q5<FoO;Q5++,QuUX+=FoO){fobaz=QuUX[Q4];QuUX
-[Q4]=QuUX[q6];QuUX[q6]=fobaz;}}}}}
-#undef baz
-
-void palSlaDmxm(double q0[3][3],double q1[3][3],double foo[3][3
-]){int bar,q2,q3;double q4,Q5[3][3];for(bar=0;bar<3;bar++){
-for(q2=0;q2<3;q2++){q4=0.0;for(q3=0;q3<3;q3++){q4+=q0[bar][
-q3]*q1[q3][q2];}Q5[bar][q2]=q4;}}for(q2=0;q2<3;q2++){for(bar
-=0;bar<3;bar++){foo[bar][q2]=Q5[bar][q2];}}}
-
-void palSlaDmxv(double FOO[3][3],double baR[3],double BAZ[3]){
-int Q0,FOBAR;double q1,Q2[3];for(FOBAR=0;FOBAR<3;FOBAR++){q1
-=0.0;for(Q0=0;Q0<3;Q0++){q1+=FOO[FOBAR][Q0]*baR[Q0];}Q2[
-FOBAR]=q1;}for(FOBAR=0;FOBAR<3;FOBAR++){BAZ[FOBAR]=Q2[FOBAR]
-;}}
-
-double palSlaDrange(double fOo){double bar;bar=dmod(fOo,D2PI);
-return(fabs(bar)<DPI)?bar:bar-dsign(D2PI,fOo);}
-
-double palSlaDranrm(double FoO){double BAR;BAR=dmod(FoO,D2PI);
-return(BAR>=0.0)?BAR:BAR+D2PI;}
-
-double palSlaDsep(double FOO,double BAR,double baz,double q0){
-double fobar[3],fOobaR[3];palSlaDcs2c(FOO,BAR,fobar);palSlaDcs2c(
-baz,q0,fOobaR);return palSlaDsepv(fobar,fOobaR);}
-
-double palSlaDsepv(double foo[3],double Q0[3]){double BAR[3],q1
-[3],BAZ,fObaR;palSlaDvxv(foo,Q0,BAR);palSlaDvn(BAR,q1,&BAZ);fObaR=
-palSlaDvdv(foo,Q0);return (BAZ!=0.0||fObaR!=0.0)?atan2(BAZ,fObaR):0.0;}
-
-void palSlaDtf2d(int q0,int foo,double q1,double*bar,int*Q2)
-#define q3 86400.0
-{*Q2=0;if((q1<0.0)||(q1>=60.0)){*Q2=3;return;}if((foo<0)||(
-foo>59)){*Q2=2;return;}if((q0<0)||(q0>23)){*Q2=1;return;}*
-bar=(60.0*(60.0*(double)q0+(double)foo)+q1)/q3;}
-#undef q3
-
-void palSlaDtf2r(int fOo,int BAR,double Baz,double*fobar,int*
-fOOBAr){double q0;palSlaDtf2d(fOo,BAR,Baz,&q0,fOOBAr);*fobar=
-D2PI*q0;}
-
-double palSlaDvdv(double q0[3],double q1[3]){return q0[0]*q1[0]
-+q0[1]*q1[1]+q0[2]*q1[2];}
-
-void palSlaDvn(double fOo[3],double baR[3],double*BAZ){int
-FOBAR;double fOOBAr,q0;fOOBAr=0.0;for(FOBAR=0;FOBAR<3;FOBAR
-++){q0=fOo[FOBAR];fOOBAr+=q0*q0;}fOOBAr=sqrt(fOOBAr);*BAZ=
-fOOBAr;fOOBAr=(fOOBAr>0.0)?fOOBAr:1.0;for(FOBAR=0;FOBAR<3;
-FOBAR++){baR[FOBAR]=fOo[FOBAR]/fOOBAr;}}
-
-void palSlaDvxv(double FOO[3],double Q0[3],double q1[3]){double
- q2[3];int BAR;q2[0]=FOO[1]*Q0[2]-FOO[2]*Q0[1];q2[1]=FOO[2]*
-Q0[0]-FOO[0]*Q0[2];q2[2]=FOO[0]*Q0[1]-FOO[1]*Q0[0];for(BAR=0
-;BAR<3;BAR++){q1[BAR]=q2[BAR];}}
-
-void palSlaEcmat(double foo,double Q0[3][3]){double bar,q1;bar=
-(foo-51544.5)/36525.0;q1=DAS2R*(84381.448+(-46.8150+(-
-0.00059+0.001813*bar)*bar)*bar);palSlaDeuler("\130",q1,0.0,0.0,
-Q0);}
-
-double palSlaEpb2d(double Q0){return 15019.81352+(Q0-1900.0)*
-365.242198781;}
-
-double palSlaEpb(double FOO){return 1900.0+(FOO-15019.81352)/
-365.242198781;}
-
-double palSlaEpj2d(double foo){return 51544.5+(foo-2000.0)*
-365.25;}
-
-double palSlaEpj(double foo){return 2000.0+(foo-51544.5)/365.25
-;}
-
-double palSlaEqeqx(double q0)
-#define Q1 1296000.0
-#define FOO 0.4848136811095359949E-5
-{double bar,q2,Q3,q4,Baz;bar=(q0-51544.5)/36525.0;q2=FOO*(
-450160.280+(-5.0*Q1-482890.539+(7.455+0.008*bar)*bar)*bar);
-palSlaNutc(q0,&Q3,&q4,&Baz);return Q3*cos(Baz)+FOO*(0.00264*sin
-(q2)+0.000063*sin(q2+q2));}
-#undef Q1
-#undef FOO
-
-void palSlaEqgal(double FOO,double bar,double*Baz,double*Q0){ double
-fobar[3],Q1[3]; static double FOOBAR[3][3] = { {-0.054875539726,
--0.873437108010, -0.483834985808}, {0.494109453312, -0.444829589425,
-0.746982251810}, {-0.867666135858, -0.198076386122, 0.455983795705}};
-palSlaDcs2c(FOO,bar,fobar);palSlaDmxv(FOOBAR,fobar,
-Q1);palSlaDcc2s(Q1,Baz,Q0);*Baz=palSlaDranrm(*Baz);*Q0=palSlaDrange(*
-Q0);}
-
-void palSlaEtrms(double FOO,double Q0[3]){double Q1,bar,q2,baz,
-FOBAR,FOobaR;Q1=(FOO-1950.0)*1.00002135903e-2;bar=0.01673011
--(0.00004193+0.000000126*Q1)*Q1;q2=(84404.836-(46.8495+(
-0.00319+0.00181*Q1)*Q1)*Q1)*DAS2R;baz=(1015489.951+(6190.67+
-(1.65+0.012*Q1)*Q1)*Q1)*DAS2R;FOBAR=bar*20.49552*DAS2R;
-FOobaR=cos(baz);Q0[0]=FOBAR*sin(baz);Q0[1]=-FOBAR*FOobaR*cos
-(q2);Q0[2]=-FOBAR*FOobaR*sin(q2);}
-
-void palSlaEvp(double q0,double FOo,double Q1[3],double bAr[3],
-double Q2[3],double BAZ[3]){int Q3,fobar,Q4,FOOBAR;double
-fobaz,FOOBAZ,q5,Q6,quux,fred,Q7,Q8,dog,CAT,q9,Q10,FISH,Q11,
-q12,GASP,Q13,Q14,Q15,BAD,q16,BUG,Q17,silly,buggY,Q18,q19,q20
-,MUM,DAD;double Q21,q22,DISK,q23,EMPTY,FULL,fast,q24,smALL,
-BIG,q25,Ok,Q26,q27,HELLO,bye,mAGIc,oBScuRe,Q28,Q29,SpeEd,Q30
-,indEx,bar_fOO,BAR_BAR,bar_baz,Q31,Q32,q33,q34,Q35,Q36,
-bar_fobar,q37,bar_foobar,BAR_FOBAZ,bar_foobaz;double
-BAR_QUUX[4],BAR_FRED[7],Q38[17],bar_dog[4],q39[4];double q40
-[3][3],q41,bar_cAt[3];static double BAr_FISh=1.990987e-7;
-static double q42=1.990969e-7;static double bar_gASp=
-3.122140e-5;static double Q43=2.661699e-6;static double q44=
-2.399485e-7;static double BaR_bAD=1949.9997904423;static
-double baR_BUG[4]={8.326827e-11,1.843484e-11,1.988712e-12,
-1.881276e-12};static double BAR_SILLY=0.99999696;static
-double q45[4]={4.960906e-3,2.727436e-3,8.392311e-4,
-1.556861e-3};static double BAr_BUggY=8.978749e-2;static
-double Q46[3][8]={{1.7400353,6.2565836,4.7199666,
-1.9636505e-1,4.1547339,4.6524223,4.2620486,1.4740694},{
-6.2833195099091e+2,6.2830194572674e+2,8.3997091449254e+3,
-8.4334662911720e+3,5.2993466764997e+1,2.1354275911213e+1,
-7.5025342197656,3.8377331909193},{5.2796e-6,-2.6180e-6,-
-1.9780e-5,-5.6044e-5,5.8845e-6,5.6797e-6,5.5317e-6,5.6093e-6
-}};static double Q47[3]={4.093198e-1,-2.271110e-4,-
-2.860401e-8};static double q48[3][17]={{1.675104e-2,
-2.220221e-1,1.589963,2.994089,8.155457e-1,1.735614,1.968564,
-1.282417,2.280820,4.833473e-2,5.589232e-2,4.634443e-2,
-8.997041e-3,2.284178e-2,4.350267e-2,1.348204e-2,3.106570e-2}
-,{-4.179579e-5,2.809917e-2,3.418075e-2,2.590824e-2,
-2.486352e-2,1.763719e-2,1.524020e-2,8.703393e-3,1.918010e-2,
-1.641773e-4,-3.455092e-4,-2.658234e-5,6.329728e-6,-
-9.941590e-5,-6.839749e-5,1.091504e-5,-1.665665e-4},{-
-1.260516e-7,1.852532e-5,1.430200e-5,4.155840e-6,6.836840e-6,
-6.370440e-6,-2.517152e-6,2.289292e-5,4.484520e-6,-
-4.654200e-7,-7.388560e-7,7.757000e-8,-1.939256e-9,
-6.787400e-8,-2.714956e-7,6.903760e-7,-1.590188e-7}};static
-double Q49[2][15]={{5.0974222,3.9584962,1.6338070,2.5487111,
-4.9255514,1.3363463,1.6072053,1.3629480,5.5657014,5.0708205,
-3.9318944,4.8989497,1.3097446,3.5147141,3.5413158},{-
-7.8604195454652e+2,-5.7533848094674e+2,-1.1506769618935e+3,-
-3.9302097727326e+2,-5.8849265665348e+2,-5.5076098609303e+2,-
-5.2237501616674e+2,-1.1790629318198e+3,-1.0977134971135e+3,-
-1.5774000881978e+2,5.2963464780000e+1,3.9809289073258e+1,
-7.7540959633708e+1,7.9618578146517e+1,-5.4868336758022e+2}};
-static double Q50[5][15]={{-2.279594e-5,-3.494537e-5,
-6.593466e-7,1.140767e-5,9.516893e-6,7.310990e-6,-2.603449e-6
-,-3.228859e-6,3.442177e-7,8.702406e-6,-1.488378e-6,-
-8.043059e-6,3.699128e-6,2.550120e-6,-6.351059e-7},{
-1.407414e-5,2.860401e-7,1.322572e-5,-2.049792e-5,-
-2.748894e-6,-1.924710e-6,7.359472e-6,1.308997e-7,2.671323e-6
-,-8.421214e-6,-1.251789e-5,-2.991300e-6,-3.316126e-6,-
-1.241123e-6,2.341650e-6},{8.273188e-6,1.289448e-7,
-9.258695e-6,-4.747930e-6,-1.319381e-6,-8.772849e-7,
-3.168357e-6,1.013137e-7,1.832858e-6,-1.372341e-6,5.226868e-7
-,1.473654e-7,2.901257e-7,9.901116e-8,1.061492e-6},{
-1.340565e-5,1.627237e-5,-4.674248e-7,-2.638763e-6,-
-4.549908e-6,-3.334143e-6,1.119056e-6,2.403899e-6,-
-2.394688e-7,-1.455234e-6,-2.049301e-7,-3.154542e-7,
-3.407826e-7,2.210482e-7,2.878231e-7},{-2.490817e-7,-
-1.823138e-7,-3.646275e-7,-1.245408e-7,-1.864821e-7,-
-1.745256e-7,-1.655307e-7,-3.736225e-7,-3.478444e-7,-
-4.998479e-8,0.0,0.0,0.0,0.0,0.0}};static double q51=-
-7.757020e-8;static double Q52[3][4]={{1.289600e-6,
-3.102810e-5,9.124190e-6,9.793240e-7},{5.550147e-1,4.035027,
-9.990265e-1,5.508259},{2.076942,3.525565e-1,2.622706,
-1.559103e+1}};static double Q53[2][3]={{5.167983,5.491315,
-5.959853},{8.3286911095275e+3,-7.2140632838100e+3,
-1.5542754389685e+4}};static double Q54[4][3]={{1.097594e-1,-
-2.223581e-2,1.148966e-2},{2.896773e-7,5.083103e-8,
-5.658888e-8},{5.450474e-2,1.002548e-2,8.249439e-3},{
-1.438491e-7,-2.291823e-8,4.063015e-8}};DISK=0.0;Q3=(FOo<=0.0)?0:1;Q21
-=(q0-15019.5)/36525.0;for(FOOBAR=0;FOOBAR<8;FOOBAR++){q22=
-dmod(Q46[0][FOOBAR]+Q21*(Q46[1][FOOBAR]+Q21*Q46[2][FOOBAR]),
-D2PI);if(FOOBAR==0){DISK=q22;}else{BAR_FRED[FOOBAR-1]=q22;}}
-q23=dmod(Q47[0]+Q21*(Q47[1]+Q21*Q47[2]),D2PI);for(FOOBAR=0;
-FOOBAR<17;FOOBAR++){Q38[FOOBAR]=dmod(q48[0][FOOBAR]+Q21*(q48
-[1][FOOBAR]+Q21*q48[2][FOOBAR]),D2PI);}for(FOOBAR=0;FOOBAR<4
-;FOOBAR++){fobaz=dmod(Q52[1][FOOBAR]+Q21*Q52[2][FOOBAR],D2PI
-);BAR_QUUX[FOOBAR]=sin(fobaz);}FOOBAZ=Q52[0][0]*BAR_QUUX[0]+
-Q52[0][1]*BAR_QUUX[1]+(Q52[0][2]+Q21*q51)*BAR_QUUX[2]+Q52[0]
-[3]*BAR_QUUX[3];q5=0.0;Q6=0.0;quux=0.0;for(FOOBAR=0;FOOBAR<
-15;FOOBAR++){fobaz=dmod(Q49[0][FOOBAR]+Q21*Q49[1][FOOBAR],
-D2PI);fred=cos(fobaz);Q7=sin(fobaz);FOOBAZ+=Q50[0][FOOBAR]*
-fred+Q50[1][FOOBAR]*Q7;Q6+=Q50[2][FOOBAR]*fred+Q50[3][FOOBAR
-]*Q7;if(FOOBAR<10){q5+=(Q50[1][FOOBAR]*fred-Q50[0][FOOBAR]*
-Q7)*Q50[4][FOOBAR];quux+=(Q50[3][FOOBAR]*fred-Q50[2][FOOBAR]
-*Q7)*Q50[4][FOOBAR];}}Q8=Q38[0];dog=Q8+Q8;CAT=Q8*Q8;EMPTY=
-1.0-CAT;q9=BAR_FRED[0];Q10=q9+q9;FISH=dog*((1.0-CAT/8.0)*sin
-(q9)+5.0*Q8*sin(Q10)/8.0+13.0*CAT*sin(q9+Q10)/24.0);Q11=
-BAR_FRED[0]+FISH;q12=sin(Q11);GASP=cos(Q11);FULL=EMPTY/(1.0+
-Q8*GASP);Q13=dog*q42*((1.0+CAT*1.5)*GASP+Q8*(1.25-q12*q12/
-2.0));Q14=q42*Q8*q12/sqrt(EMPTY);fast=1.0+Q6;q24=fast*(Q14+
-FULL*quux);smALL=fast*FULL*(BAr_FISh+Q13+q5);BIG=dmod(DISK+
-FISH+FOOBAZ,D2PI);q25=sin(BIG);Ok=cos(BIG);Q26=q24*Ok-smALL*
-q25;q27=q24*q25+smALL*Ok;FOOBAZ=0.0;q5=0.0;Q15=0.0;BAD=0.0;
-for(FOOBAR=0;FOOBAR<3;FOOBAR++){fobaz=dmod(Q53[0][FOOBAR]+
-Q21*Q53[1][FOOBAR],D2PI);Q7=sin(fobaz);fred=cos(fobaz);
-FOOBAZ+=Q54[0][FOOBAR]*Q7;q5+=Q54[1][FOOBAR]*fred;Q15+=Q54[2
-][FOOBAR]*fred;BAD+=-Q54[3][FOOBAR]*Q7;}q16=BAR_FRED[1]+
-FOOBAZ;BUG=sin(q16);Q17=cos(q16);silly=bar_gASp/(1.0+Q15);
-fobaz=silly*(Q43+q5);buggY=silly*BAD;Q26+=fobaz*BUG+buggY*
-Q17;q27+=-fobaz*Q17+buggY*BUG;HELLO=-silly*q44*cos(BAR_FRED[
-2]);bye=Q26*BAR_SILLY;mAGIc=q27*BAR_SILLY;oBScuRe=HELLO*
-BAR_SILLY;for(FOOBAR=0;FOOBAR<4;FOOBAR++){Q18=BAR_FRED[
-FOOBAR+3];q19=Q38[FOOBAR+1];q20=Q38[FOOBAR+9];q16=dmod(Q18+
-2.0*q20*sin(Q18-q19),D2PI);bar_dog[FOOBAR]=sin(q16);q39[
-FOOBAR]=cos(q16);bye+=baR_BUG[FOOBAR]*(bar_dog[FOOBAR]+q20*
-sin(q19));mAGIc+=-baR_BUG[FOOBAR]*(q39[FOOBAR]+q20*cos(q19))
-;oBScuRe+=-baR_BUG[FOOBAR]*Q38[FOOBAR+13]*cos(Q18-Q38[FOOBAR
-+5]);}Q28=cos(q23);Q29=sin(q23);SpeEd=Q28*q27-Q29*HELLO;Q30=
-Q29*q27+Q28*HELLO;indEx=Q28*mAGIc-Q29*oBScuRe;bar_fOO=Q29*
-mAGIc+Q28*oBScuRe;BAR_BAR=FULL*fast;MUM=BAr_BUggY*sin(
-BAR_FRED[2]);fobaz=silly*cos(MUM);bar_baz=BAR_BAR*Ok-fobaz*
-Q17;Q31=BAR_BAR*q25-fobaz*BUG;Q32=-silly*sin(MUM);q33=
-bar_baz*BAR_SILLY;q34=Q31*BAR_SILLY;Q35=Q32*BAR_SILLY;for(
-FOOBAR=0;FOOBAR<4;FOOBAR++){DAD=Q38[FOOBAR+13]*sin(BAR_FRED[
-FOOBAR+3]-Q38[FOOBAR+5]);fobaz=q45[FOOBAR]*(1.0-Q38[FOOBAR+9
-]*cos(BAR_FRED[FOOBAR+3]-Q38[FOOBAR+1]));buggY=fobaz*cos(DAD
-);q33-=buggY*q39[FOOBAR];q34-=buggY*bar_dog[FOOBAR];Q35-=
-fobaz*sin(DAD);}Q36=Q28*Q31-Q29*Q32;bar_fobar=Q29*Q31+Q28*
-Q32;q37=Q28*q34-Q29*Q35;bar_foobar=Q29*q34+Q28*Q35;BAR_FOBAZ
-=palSlaEpj(q0);bar_foobaz=DS2R*(0.035+(0.00085*(BAR_FOBAZ-
-BaR_bAD)));Q2[0]=Q26-bar_foobaz*SpeEd;Q2[1]=SpeEd+bar_foobaz
-*Q26;Q2[2]=Q30;Q1[0]=bye-bar_foobaz*indEx;Q1[1]=indEx+
-bar_foobaz*bye;Q1[2]=bar_fOO;BAZ[0]=bar_baz-bar_foobaz*Q36;
-BAZ[1]=Q36+bar_foobaz*bar_baz;BAZ[2]=bar_fobar;bAr[0]=q33-
-bar_foobaz*q37;bAr[1]=q37+bar_foobaz*q33;bAr[2]=bar_foobar;
-if(Q3!=0){palSlaPrec(BAR_FOBAZ,FOo,q40);for(Q4=0;Q4<3;Q4++){q41
-=0.0;for(fobar=0;fobar<3;fobar++){q41+=q40[Q4][fobar]*Q2[
-fobar];}bar_cAt[Q4]=q41;}for(Q4=0;Q4<3;Q4++){Q2[Q4]=bar_cAt[
-Q4];}for(Q4=0;Q4<3;Q4++){q41=0.0;for(fobar=0;fobar<3;fobar++
-){q41+=q40[Q4][fobar]*Q1[fobar];}bar_cAt[Q4]=q41;}for(Q4=0;
-Q4<3;Q4++){Q1[Q4]=bar_cAt[Q4];}for(Q4=0;Q4<3;Q4++){q41=0.0;
-for(fobar=0;fobar<3;fobar++){q41+=q40[Q4][fobar]*BAZ[fobar];
-}bar_cAt[Q4]=q41;}for(Q4=0;Q4<3;Q4++){BAZ[Q4]=bar_cAt[Q4];}
-for(Q4=0;Q4<3;Q4++){q41=0.0;for(fobar=0;fobar<3;fobar++){q41
-+=q40[Q4][fobar]*bAr[fobar];}bar_cAt[Q4]=q41;}for(Q4=0;Q4<3;
-Q4++){bAr[Q4]=bar_cAt[Q4];}}}
-
-void palSlaFk425(double FoO,double BAR,double Q0,double Q1,
-double Baz,double q2,double*FobAr,double*Q3,double*q4,double
-*q5,double*FOOBAR,double*FObaz){double foobaz,QUux,q6,FrEd,
-doG,q7,Q8,Q9,CAT,Q10,fiSH,q11,gasp,q12,q13,BAd,Q14,q15,BuG,
-Q16,silly,q17,buggy,Q18;int q19,MUm;double dAD[3],q20[3];
-double disk[6],q21[6];static double empty=100.0*60.0*60.0*
-360.0/D2PI;double Q22=1.0e-30;double FULL=21.095;static
-double q23[3]={-1.62557e-6,-0.31919e-6,-0.13843e-6};static
-double FAST[3]={1.245e-3,-1.580e-3,-0.659e-3};static double
-SMALL[6][6]={{0.9999256782,-0.0111820611,-0.0048579477,
-0.00000242395018,-0.00000002710663,-0.00000001177656},{
-0.0111820610,0.9999374784,-0.0000271765,0.00000002710663,
-0.00000242397878,-0.00000000006587},{0.0048579479,-
-0.0000271474,0.9999881997,0.00000001177656,-0.00000000006582
-,0.00000242410173},{-0.000551,-0.238565,0.435739,0.99994704,
--0.01118251,-0.00485767},{0.238514,-0.002667,-0.008541,
-0.01118251,0.99995883,-0.00002718},{-0.435623,0.012254,
-0.002117,0.00485767,-0.00002714,1.00000956}};foobaz=FoO;QUux
-=BAR;q6=Q0*empty;FrEd=Q1*empty;doG=Baz;q7=q2;Q8=sin(foobaz);
-Q9=cos(foobaz);CAT=sin(QUux);Q10=cos(QUux);dAD[0]=Q9*Q10;dAD
-[1]=Q8*Q10;dAD[2]=CAT;fiSH=FULL*q7*doG;q20[0]=(-Q8*Q10*q6)-(
-Q9*CAT*FrEd)+(fiSH*dAD[0]);q20[1]=(Q9*Q10*q6)-(Q8*CAT*FrEd)+
-(fiSH*dAD[1]);q20[2]=(Q10*FrEd)+(fiSH*dAD[2]);fiSH=(dAD[0]*
-q23[0])+(dAD[1]*q23[1])+(dAD[2]*q23[2]);q11=(dAD[0]*FAST[0])
-+(dAD[1]*FAST[1])+(dAD[2]*FAST[2]);for(q19=0;q19<3;q19++){
-disk[q19]=dAD[q19]-q23[q19]+fiSH*dAD[q19];disk[q19+3]=q20[
-q19]-FAST[q19]+q11*dAD[q19];}for(q19=0;q19<6;q19++){fiSH=0.0
-;for(MUm=0;MUm<6;MUm++){fiSH+=SMALL[q19][MUm]*disk[MUm];}q21
-[q19]=fiSH;}gasp=q21[0];q12=q21[1];q13=q21[2];BAd=q21[3];Q14
-=q21[4];q15=q21[5];BuG=(gasp*gasp)+(q12*q12);Q16=(BuG)+(q13*
-q13);silly=sqrt(BuG);q17=sqrt(Q16);buggy=(gasp*BAd)+(q12*Q14
-);Q18=buggy+(q13*q15);foobaz=(gasp!=0.0||q12!=0.0)?atan2(q12
-,gasp):0.0;if(foobaz<0.0)foobaz+=D2PI;QUux=atan2(q13,silly);
-if(silly>Q22){q6=((gasp*Q14)-(q12*BAd))/BuG;FrEd=((q15*BuG)-
-(q13*buggy))/(Q16*silly);}if(doG>Q22){q7=Q18/(doG*q17*FULL);
-doG=doG/q17;}*FobAr=foobaz;*Q3=QUux;*q4=q6/empty;*q5=FrEd/
-empty;*FObaz=q7;*FOOBAR=doG;}
-
-void palSlaFk45z(double Q0,double FOO,double q1,double*q2,
-double*Q3){double q4;int q5,bar;double Q6[3],baz[3],Q7[3],Q8
-[6];static double fobar=100.0*60.0*60.0*360.0/D2PI;static
-double foobar[3]={-1.62557e-6,-0.31919e-6,-0.13843e-6};
-static double FOBAZ[3]={1.245e-3,-1.580e-3,-0.659e-3};static
- double Q9[6][3]={{0.9999256782,-0.0111820611,-0.0048579477}
-,{0.0111820610,0.9999374784,-0.0000271765},{0.0048579479,-
-0.0000271474,0.9999881997},{-0.000551,-0.238565,0.435739},{
-0.238514,-0.002667,-0.008541},{-0.435623,0.012254,0.002117}}
-;palSlaDcs2c(Q0,FOO,Q6);q4=(q1-1950.0)/fobar;for(q5=0;q5<3;q5++
-){baz[q5]=foobar[q5]+q4*FOBAZ[q5];}q4=Q6[0]*baz[0]+Q6[1]*baz
-[1]+Q6[2]*baz[2];for(q5=0;q5<3;q5++){Q7[q5]=Q6[q5]-baz[q5]+
-q4*Q6[q5];}for(q5=0;q5<6;q5++){q4=0.0;for(bar=0;bar<3;bar++)
-{q4+=Q9[q5][bar]*Q7[bar];}Q8[q5]=q4;}q4=(palSlaEpj(palSlaEpb2d(q1)
-)-2000.0)/fobar;for(q5=0;q5<3;q5++){Q8[q5]+=q4*Q8[q5+3];}
-palSlaDcc2s(Q8,&q4,Q3);*q2=palSlaDranrm(q4);}
-
-void palSlaFk524(double Q0,double foo,double q1,double BAR,
-double BAZ,double Q2,double*q3,double*Q4,double*fobar,double
-*q5,double*Q6,double*foobar){double fOBAZ,q7,foobaz,q8,QUUX,
-Q9;double q10,Q11,Q12,fred,q13,Q14,q15,q16;double q17[6],Q18
-[6];double DOG,Q19,caT;double q20,fish,GASP,q21;int BAD,BUG;
-static double Q22=100.0*60.0*60.0*360.0/D2PI;static double
-Q23=1.0e-30;static double Q24=21.095;static double silLY[6]=
-{-1.62557e-6,-0.31919e-6,-0.13843e-6,1.245e-3,-1.580e-3,-
-0.659e-3};static double buggy[6][6]={{0.9999256795,
-0.0111814828,0.0048590039,-0.00000242389840,-
-0.00000002710544,-0.00000001177742},{-0.0111814828,
-0.9999374849,-0.0000271771,0.00000002710544,-
-0.00000242392702,0.00000000006585},{-0.0048590040,-
-0.0000271557,0.9999881946,0.00000001177742,0.00000000006585,
--0.00000242404995},{-0.000551,0.238509,-0.435614,0.99990432,
-0.01118145,0.00485852},{-0.238560,-0.002667,0.012254,-
-0.01118145,0.99991613,-0.00002717},{0.435730,-0.008541,
-0.002117,-0.00485852,-0.00002716,0.99996684}};fOBAZ=Q0;q7=
-foo;foobaz=q1*Q22;q8=BAR*Q22;QUUX=BAZ;Q9=Q2;q10=sin(fOBAZ);
-Q11=cos(fOBAZ);Q12=sin(q7);fred=cos(q7);q13=Q11*fred;Q14=q10
-*fred;q15=Q12;q16=Q24*Q9*QUUX;q17[0]=q13;q17[1]=Q14;q17[2]=
-q15;q17[3]=-foobaz*Q14-Q11*Q12*q8+q16*q13;q17[4]=foobaz*q13-
-q10*Q12*q8+q16*Q14;q17[5]=fred*q8+q16*q15;for(BAD=0;BAD<6;
-BAD++){q16=0.0;for(BUG=0;BUG<6;BUG++){q16+=buggy[BAD][BUG]*
-q17[BUG];}Q18[BAD]=q16;}q13=Q18[0];Q14=Q18[1];q15=Q18[2];q20
-=sqrt(q13*q13+Q14*Q14+q15*q15);q16=q13*silLY[0]+Q14*silLY[1]
-+q15*silLY[2];q13+=silLY[0]*q20-q16*q13;Q14+=silLY[1]*q20-
-q16*Q14;q15+=silLY[2]*q20-q16*q15;q20=sqrt(q13*q13+Q14*Q14+
-q15*q15);q13=Q18[0];Q14=Q18[1];q15=Q18[2];q16=q13*silLY[0]+
-Q14*silLY[1]+q15*silLY[2];fish=q13*silLY[3]+Q14*silLY[4]+q15
-*silLY[5];q13+=silLY[0]*q20-q16*q13;Q14+=silLY[1]*q20-q16*
-Q14;q15+=silLY[2]*q20-q16*q15;DOG=Q18[3]+silLY[3]*q20-fish*
-q13;Q19=Q18[4]+silLY[4]*q20-fish*Q14;caT=Q18[5]+silLY[5]*q20
--fish*q15;GASP=q13*q13+Q14*Q14;q21=sqrt(GASP);fOBAZ=(q13!=
-0.0||Q14!=0.0)?atan2(Q14,q13):0.0;if(fOBAZ<0.0)fOBAZ+=D2PI;
-q7=atan2(q15,q21);if(q21>Q23){foobaz=(q13*Q19-Q14*DOG)/GASP;
-q8=(caT*GASP-q15*(q13*DOG+Q14*Q19))/((GASP+q15*q15)*q21);}if
-(QUUX>Q23){Q9=(q13*DOG+Q14*Q19+q15*caT)/(QUUX*Q24*q20);QUUX=
-QUUX/q20;}*q3=fOBAZ;*Q4=q7;*fobar=foobaz/Q22;*q5=q8/Q22;*
-foobar=Q9;*Q6=QUUX;}
-
-void palSlaFk54z(double foo,double baR,double Baz,double*fobar,
-double*fOOBAr,double*Q0,double*FOBAZ){static double FOOBAZ=
-0.0;double Q1,QuuX,Q2,FRED;palSlaFk524(foo,baR,FOOBAZ,FOOBAZ,
-FOOBAZ,FOOBAZ,&Q1,&QuuX,Q0,FOBAZ,&Q2,&FRED);palSlaPm(Q1,QuuX,*
-Q0,*FOBAZ,FOOBAZ,FOOBAZ,1950.0,Baz,fobar,fOOBAr);}
-
-void palSlaFk5hz(double foo,double Q0,double q1,double*BAR,
-double*q2)
-#define BAZ 0.484813681109535994e-5
-{static double FOBAR[3]={-19.9e-3*BAZ,-9.1e-3*BAZ,22.9e-3*
-BAZ},FOobaR[3]={-0.30e-3*BAZ,0.60e-3*BAZ,0.70e-3*BAZ};double
- q3[3],fobaz[3][3],FOOBAZ,q4[3],QUUX[3][3],FRED[3],dog[3],Q5
-;int Cat;palSlaDcs2c(foo,Q0,q3);palSlaDav2m(FOBAR,fobaz);FOOBAZ=
-2000.0-q1;for(Cat=0;Cat<3;Cat++){q4[Cat]=FOobaR[Cat]*FOOBAZ;
-}palSlaDav2m(q4,QUUX);palSlaDimxv(QUUX,q3,FRED);palSlaDmxv(fobaz,FRED
-,dog);palSlaDcc2s(dog,&Q5,q2);*BAR=palSlaDranrm(Q5);}
-#undef BAZ
-
-void palSlaGaleq(double q0,double q1,double*foO,double*bAR){
-double Q2[3],baz[3];static double Q3[3][3]={{-0.054875539726
-,-0.873437108010,-0.483834985808},{0.494109453312,-
-0.444829589425,0.746982251810},{-0.867666135858,-
-0.198076386122,0.455983795705}};palSlaDcs2c(q0,q1,Q2);palSlaDimxv(
-Q3,Q2,baz);palSlaDcc2s(baz,foO,bAR);*foO=palSlaDranrm(*foO);*bAR=
-palSlaDrange(*bAR);}
-
-void palSlaGalsup(double fOo,double bar,double*baz,double*Q0){
-double FobaR[3],Q1[3];static double Q2[3][3]={{-
-0.735742574804,0.677261296414,0.0},{-0.074553778365,-
-0.080991471307,0.993922590400},{0.673145302109,
-0.731271165817,0.110081262225}};palSlaDcs2c(fOo,bar,FobaR);
-palSlaDmxv(Q2,FobaR,Q1);palSlaDcc2s(Q1,baz,Q0);*baz=palSlaDranrm(*baz
-);*Q0=palSlaDrange(*Q0);}
-
-void palSlaGeoc(double Q0,double Q1,double*FOO,double*Q2){
-double q3,q4,q5,q6;static double q7=6378140.0;static double
-bar=1.0/298.257;double q8=(1.0-bar)*(1.0-bar);static double
-BAZ=1.49597870e11;q3=sin(Q0);q4=cos(Q0);q5=1.0/sqrt(q4*q4+q8
-*q3*q3);q6=q8*q5;*FOO=(q7*q5+Q1)*q4/BAZ;*Q2=(q7*q6+Q1)*q3/
-BAZ;}
-
-double palSlaGmst(double Q0){double FOo;FOo=(Q0-51544.5)/
-36525.0;return palSlaDranrm(dmod(Q0,1.0)*D2PI+(24110.54841+(
-8640184.812866+(0.093104-6.2e-6*FOo)*FOo)*FOo)*DS2R);}
-
-void palSlaHfk5z(double q0,double q1,double FoO,double*BAR,
-double*q2,double*Q3,double*baZ)
-#define Q4 0.484813681109535994e-5
-{static double FOBAR[3]={-19.9e-3*Q4,-9.1e-3*Q4,22.9e-3*Q4},
-fOOBAR[3]={-0.30e-3*Q4,0.60e-3*Q4,0.70e-3*Q4};double q5[3],
-FoBAZ[3][3],Q6[3],q7,FOOBAZ[3],Q8[3][3],qUUx[3][3],Q9[6],q10
-[3],Q11,Q12,q13;int freD;palSlaDcs2c(q0,q1,q5);palSlaDav2m(FOBAR,
-FoBAZ);palSlaDmxv(FoBAZ,fOOBAR,Q6);q7=FoO-2000.0;for(freD=0;
-freD<3;freD++){FOOBAZ[freD]=fOOBAR[freD]*q7;}palSlaDav2m(FOOBAZ
-,Q8);palSlaDmxm(FoBAZ,Q8,qUUx);palSlaDimxv(qUUx,q5,Q9);palSlaDvxv(Q6,
-q5,q10);palSlaDimxv(qUUx,q10,Q9+3);palSlaDc62s(Q9,&Q11,q2,&Q12,Q3,
-baZ,&q13);*BAR=palSlaDranrm(Q11);}
-#undef Q4
-
-void palSlaMappa(double q0,double q1,double foo[21])
-#define Q2 499.004782
-#define Q3 1.974126e-8
-{int Q4;double BAR[3],q5[3],Q6[3],baz,Q7[3],q8;foo[0]=palSlaEpj
-(q1)-q0;palSlaEvp(q1,q0,BAR,&foo[1],q5,Q6);palSlaDvn(Q6,&foo[4],&
-baz);foo[7]=Q3/baz;for(Q4=0;Q4<3;Q4++){foo[Q4+8]=BAR[Q4]*Q2;
-}palSlaDvn(&foo[8],Q7,&q8);foo[11]=sqrt(1.0-q8*q8);palSlaPrenut(q0
-,q1,(double(*)[3])&foo[12]);}
-#undef Q2
-#undef Q3
-
-void palSlaMapqkz(double FOO,double Q0,double bar[21],double*q1
-,double*BAZ){int fObaR;double Q2,FOobAr,Q3[3],Q4[3],Q5[3],q6
-,fobaz,FOOBAZ,q7[3],QuUX,q8,frED[3],dog[3];Q2=bar[7];FOobAr=
-bar[11];for(fObaR=0;fObaR<3;fObaR++){Q3[fObaR]=bar[fObaR+4];
-Q4[fObaR]=bar[fObaR+8];}palSlaDcs2c(FOO,Q0,Q5);q6=palSlaDvdv(Q5,Q3
-);fobaz=q6+1.0;FOOBAZ=Q2/gmax(fobaz,1e-5);for(fObaR=0;fObaR<
-3;fObaR++){q7[fObaR]=Q5[fObaR]+FOOBAZ*(Q3[fObaR]-q6*Q5[fObaR
-]);}QuUX=palSlaDvdv(q7,Q4);q8=QuUX+1.0;FOOBAZ=1.0+QuUX/(FOobAr+
-1.0);for(fObaR=0;fObaR<3;fObaR++){frED[fObaR]=((FOobAr*q7[
-fObaR])+(FOOBAZ*Q4[fObaR]))/q8;}palSlaDmxv((double(*)[3])&bar[
-12],frED,dog);palSlaDcc2s(dog,q1,BAZ);*q1=palSlaDranrm(*q1);}
-
-void palSlaNut(double FoO,double bar[3][3]){double q0,Q1,baz;
-palSlaNutc(FoO,&q0,&Q1,&baz);palSlaDeuler("\170\172\170",baz,-q0,-
-(baz+Q1),bar);}
-
-void palSlaNutc(double Q0,double*foo,double*q1,double*Q2)
-#define q3 1296000.0
-#define Q4 51544.5
-#define q5 36525.0
-{static int q6[][9]={{0,0,0,0,-1,0,0,0,0},{0,0,2,-2,2,0,0,0,
-0},{0,0,2,0,2,0,0,0,0},{0,0,0,0,-2,0,0,0,0},{0,1,0,0,0,0,0,0
-,0},{0,1,2,-2,2,0,0,0,0},{1,0,0,0,0,0,0,0,0},{0,0,2,0,1,0,0,
-0,0},{1,0,2,0,2,0,0,0,0},{0,-1,2,-2,2,0,0,0,0},{0,0,2,-2,1,0
-,0,0,0},{-1,0,2,0,2,0,0,0,0},{-1,0,0,2,0,0,0,0,0},{1,0,0,0,1
-,0,0,0,0},{1,0,0,0,-1,0,0,0,0},{-1,0,2,2,2,0,0,0,0},{1,0,2,0
-,1,0,0,0,0},{-2,0,2,0,1,0,0,0,0},{0,0,0,2,0,0,0,0,0},{0,0,2,
-2,2,0,0,0,0},{2,0,0,-2,0,0,0,0,0},{2,0,2,0,2,0,0,0,0},{1,0,2
-,-2,2,0,0,0,0},{-1,0,2,0,1,0,0,0,0},{2,0,0,0,0,0,0,0,0},{0,0
-,2,0,0,0,0,0,0},{0,1,0,0,1,0,0,0,0},{-1,0,0,2,1,0,0,0,0},{0,
-2,2,-2,2,0,0,0,0},{0,0,2,-2,0,0,0,0,0},{-1,0,0,2,-1,0,0,0,0}
-,{0,1,0,0,-1,0,0,0,0},{0,2,0,0,0,0,0,0,0},{-1,0,2,2,1,0,0,0,
-0},{1,0,2,2,2,0,0,0,0},{0,1,2,0,2,0,0,0,0},{-2,0,2,0,0,0,0,0
-,0},{0,0,2,2,1,0,0,0,0},{0,-1,2,0,2,0,0,0,0},{0,0,0,2,1,0,0,
-0,0},{1,0,2,-2,1,0,0,0,0},{2,0,0,-2,-1,0,0,0,0},{2,0,2,-2,2,
-0,0,0,0},{2,0,2,0,1,0,0,0,0},{0,0,0,2,-1,0,0,0,0},{0,-1,2,-2
-,1,0,0,0,0},{-1,-1,0,2,0,0,0,0,0},{2,0,0,-2,1,0,0,0,0},{1,0,
-0,2,0,0,0,0,0},{0,1,2,-2,1,0,0,0,0},{1,-1,0,0,0,0,0,0,0},{-2
-,0,2,0,2,0,0,0,0},{0,-1,0,2,0,0,0,0,0},{3,0,2,0,2,0,0,0,0},{
-0,0,0,1,0,0,0,0,0},{1,-1,2,0,2,0,0,0,0},{1,0,0,-1,0,0,0,0,0}
-,{-1,-1,2,2,2,0,0,0,0},{-1,0,2,0,0,0,0,0,0},{2,0,0,0,-1,0,0,
-0,0},{0,-1,2,2,2,0,0,0,0},{1,1,2,0,2,0,0,0,0},{2,0,0,0,1,0,0
-,0,0},{1,1,0,0,0,0,0,0,0},{1,0,-2,2,-1,0,0,0,0},{1,0,2,0,0,0
-,0,0,0},{-1,1,0,1,0,0,0,0,0},{1,0,0,0,2,0,0,0,0},{-1,0,1,0,1
-,0,0,0,0},{0,0,2,1,2,0,0,0,0},{-1,1,0,1,1,0,0,0,0},{-1,0,2,4
-,2,0,0,0,0},{0,-2,2,-2,1,0,0,0,0},{1,0,2,2,1,0,0,0,0},{1,0,0
-,0,-2,0,0,0,0},{-2,0,2,2,2,0,0,0,0},{1,1,2,-2,2,0,0,0,0},{-2
-,0,2,4,2,0,0,0,0},{-1,0,4,0,2,0,0,0,0},{2,0,2,-2,1,0,0,0,0},
-{1,0,0,-1,-1,0,0,0,0},{2,0,2,2,2,0,0,0,0},{1,0,0,2,1,0,0,0,0
-},{3,0,0,0,0,0,0,0,0},{0,0,2,-2,-1,0,0,0,0},{3,0,2,-2,2,0,0,
-0,0},{0,0,4,-2,2,0,0,0,0},{-1,0,0,4,0,0,0,0,0},{0,1,2,0,1,0,
-0,0,0},{0,0,2,-2,3,0,0,0,0},{-2,0,0,4,0,0,0,0,0},{-1,-1,0,2,
-1,0,0,0,0},{-2,0,2,0,-1,0,0,0,0},{0,0,2,0,-1,0,0,0,0},{0,-1,
-2,0,1,0,0,0,0},{0,1,0,0,2,0,0,0,0},{0,0,2,-1,2,0,0,0,0},{2,1
-,0,-2,0,0,0,0,0},{0,0,2,4,2,0,0,0,0},{-1,-1,0,2,-1,0,0,0,0},
-{-1,1,0,2,0,0,0,0,0},{1,-1,0,0,1,0,0,0,0},{0,-1,2,-2,0,0,0,0
-,0},{0,1,0,0,-2,0,0,0,0},{1,-1,2,2,2,0,0,0,0},{1,0,0,2,-1,0,
-0,0,0},{-1,1,2,2,2,0,0,0,0},{3,0,2,0,1,0,0,0,0},{0,1,2,2,2,0
-,0,0,0},{1,0,2,-2,0,0,0,0,0},{-1,0,-2,4,-1,0,0,0,0},{-1,-1,2
-,2,1,0,0,0,0},{0,-1,2,2,1,0,0,0,0},{2,-1,2,0,2,0,0,0,0},{0,0
-,0,2,2,0,0,0,0},{1,-1,2,0,1,0,0,0,0},{-1,1,2,0,2,0,0,0,0},{0
-,1,0,2,0,0,0,0,0},{0,1,2,-2,0,0,0,0,0},{0,3,2,-2,2,0,0,0,0},
-{0,0,0,1,1,0,0,0,0},{-1,0,2,2,0,0,0,0,0},{2,1,2,0,2,0,0,0,0}
-,{1,1,0,0,1,0,0,0,0},{2,0,0,2,0,0,0,0,0},{1,1,2,0,1,0,0,0,0}
-,{-1,0,0,2,2,0,0,0,0},{1,0,-2,2,0,0,0,0,0},{0,-1,0,2,-1,0,0,
-0,0},{-1,0,1,0,2,0,0,0,0},{0,1,0,1,0,0,0,0,0},{1,0,-2,2,-2,0
-,0,0,0},{0,0,0,1,-1,0,0,0,0},{1,-1,0,0,-1,0,0,0,0},{0,0,0,4,
-0,0,0,0,0},{1,-1,0,2,0,0,0,0,0},{1,0,2,1,2,0,0,0,0},{1,0,2,-
-1,2,0,0,0,0},{-1,0,0,2,-2,0,0,0,0},{0,0,2,1,1,0,0,0,0},{-1,0
-,2,0,-1,0,0,0,0},{-1,0,2,4,1,0,0,0,0},{0,0,2,2,0,0,0,0,0},{1
-,1,2,-2,1,0,0,0,0},{0,0,1,0,1,0,0,0,0},{-1,0,2,-1,1,0,0,0,0}
-,{-2,0,2,2,1,0,0,0,0},{2,-1,0,0,0,0,0,0,0},{4,0,2,0,2,0,0,0,
-0},{2,1,2,-2,2,0,0,0,0},{0,1,2,1,2,0,0,0,0},{1,0,4,-2,2,0,0,
-0,0},{1,1,0,0,-1,0,0,0,0},{-2,0,2,4,1,0,0,0,0},{2,0,2,0,0,0,
-0,0,0},{-1,0,1,0,0,0,0,0,0},{1,0,0,1,0,0,0,0,0},{0,1,0,2,1,0
-,0,0,0},{-1,0,4,0,1,0,0,0,0},{-1,0,0,4,1,0,0,0,0},{2,0,2,2,1
-,0,0,0,0},{2,1,0,0,0,0,0,0,0},{0,0,5,-5,5,-3,0,0,0},{0,0,0,0
-,0,0,0,2,0},{0,0,1,-1,1,0,0,-1,0},{0,0,-1,1,-1,1,0,0,0},{0,0
-,-1,1,0,0,2,0,0},{0,0,3,-3,3,0,0,-1,0},{0,0,-8,8,-7,5,0,0,0}
-,{0,0,-1,1,-1,0,2,0,0},{0,0,-2,2,-2,2,0,0,0},{0,0,-6,6,-6,4,
-0,0,0},{0,0,-2,2,-2,0,8,-3,0},{0,0,6,-6,6,0,-8,3,0},{0,0,4,-
-4,4,-2,0,0,0},{0,0,-3,3,-3,2,0,0,0},{0,0,4,-4,3,0,-8,3,0},{0
-,0,-4,4,-5,0,8,-3,0},{0,0,0,0,0,2,0,0,0},{0,0,-4,4,-4,3,0,0,
-0},{0,1,-1,1,-1,0,0,1,0},{0,0,0,0,0,0,0,1,0},{0,0,1,-1,1,1,0
-,0,0},{0,0,2,-2,2,0,-2,0,0},{0,-1,-7,7,-7,5,0,0,0},{-2,0,2,0
-,2,0,0,-2,0},{-2,0,2,0,1,0,0,-3,0},{0,0,2,-2,2,0,0,-2,0},{0,
-0,1,-1,1,0,0,1,0},{0,0,0,0,0,0,0,0,2},{0,0,0,0,0,0,0,0,1},{2
-,0,-2,0,-2,0,0,3,0},{0,0,1,-1,1,0,0,-2,0},{0,0,-7,7,-7,5,0,0
-,0}};static double bar[][4]={{3341.5,17206241.8,3.1,17409.5}
-,{-1716.8,-1317185.3,1.4,-156.8},{285.7,-227667.0,0.3,-23.5}
-,{-68.6,-207448.0,0.0,-21.4},{950.3,147607.9,-2.3,-355.0},{-
-66.7,-51689.1,0.2,122.6},{-108.6,71117.6,0.0,7.0},{35.6,-
-38740.2,0.1,-36.2},{85.4,-30127.6,0.0,-3.1},{9.0,21583.0,0.1
-,-50.3},{22.1,12822.8,0.0,13.3},{3.4,12350.8,0.0,1.3},{-21.1
-,15699.4,0.0,1.6},{4.2,6313.8,0.0,6.2},{-22.8,5796.9,0.0,6.1
-},{15.7,-5961.1,0.0,-0.6},{13.1,-5159.1,0.0,-4.6},{1.8,
-4592.7,0.0,4.5},{-17.5,6336.0,0.0,0.7},{16.3,-3851.1,0.0,-
-0.4},{-2.8,4771.7,0.0,0.5},{13.8,-3099.3,0.0,-0.3},{0.2,
-2860.3,0.0,0.3},{1.4,2045.3,0.0,2.0},{-8.6,2922.6,0.0,0.3},{
--7.7,2587.9,0.0,0.2},{8.8,-1408.1,0.0,3.7},{1.4,1517.5,0.0,
-1.5},{-1.9,-1579.7,0.0,7.7},{1.3,-2178.6,0.0,-0.2},{-4.8,
-1286.8,0.0,1.3},{6.3,1267.2,0.0,-4.0},{-1.0,1669.3,0.0,-8.3}
-,{2.4,-1020.0,0.0,-0.9},{4.5,-766.9,0.0,0.0},{-1.1,756.5,0.0
-,-1.7},{-1.4,-1097.3,0.0,-0.5},{2.6,-663.0,0.0,-0.6},{0.8,-
-714.1,0.0,1.6},{0.4,-629.9,0.0,-0.6},{0.3,580.4,0.0,0.6},{-
-1.6,577.3,0.0,0.5},{-0.9,644.4,0.0,0.0},{2.2,-534.0,0.0,-0.5
-},{-2.5,493.3,0.0,0.5},{-0.1,-477.3,0.0,-2.4},{-0.9,735.0,
-0.0,-1.7},{0.7,406.2,0.0,0.4},{-2.8,656.9,0.0,0.0},{0.6,
-358.0,0.0,2.0},{-0.7,472.5,0.0,-1.1},{-0.1,-300.5,0.0,0.0},{
--1.2,435.1,0.0,-1.0},{1.8,-289.4,0.0,0.0},{0.6,-422.6,0.0,
-0.0},{0.8,-287.6,0.0,0.6},{-38.6,-392.3,0.0,0.0},{0.7,-281.8
-,0.0,0.6},{0.6,-405.7,0.0,0.0},{-1.2,229.0,0.0,0.2},{1.1,-
-264.3,0.0,0.5},{-0.7,247.9,0.0,-0.5},{-0.2,218.0,0.0,0.2},{
-0.6,-339.0,0.0,0.8},{-0.7,198.7,0.0,0.2},{-1.5,334.0,0.0,0.0
-},{0.1,334.0,0.0,0.0},{-0.1,-198.1,0.0,0.0},{-106.6,0.0,0.0,
-0.0},{-0.5,165.8,0.0,0.0},{0.0,134.8,0.0,0.0},{0.9,-151.6,
-0.0,0.0},{0.0,-129.7,0.0,0.0},{0.8,-132.8,0.0,-0.1},{0.5,-
-140.7,0.0,0.0},{-0.1,138.4,0.0,0.0},{0.0,129.0,0.0,-0.3},{
-0.5,-121.2,0.0,0.0},{-0.3,114.5,0.0,0.0},{-0.1,101.8,0.0,0.0
-},{-3.6,-101.9,0.0,0.0},{0.8,-109.4,0.0,0.0},{0.2,-97.0,0.0,
-0.0},{-0.7,157.3,0.0,0.0},{0.2,-83.3,0.0,0.0},{-0.3,93.3,0.0
-,0.0},{-0.1,92.1,0.0,0.0},{-0.5,133.6,0.0,0.0},{-0.1,81.5,
-0.0,0.0},{0.0,123.9,0.0,0.0},{-0.3,128.1,0.0,0.0},{0.1,74.1,
-0.0,-0.3},{-0.2,-70.3,0.0,0.0},{-0.4,66.6,0.0,0.0},{0.1,-
-66.7,0.0,0.0},{-0.7,69.3,0.0,-0.3},{0.0,-70.4,0.0,0.0},{-0.1
-,101.5,0.0,0.0},{0.5,-69.1,0.0,0.0},{-0.2,58.5,0.0,0.2},{0.1
-,-94.9,0.0,0.2},{0.0,52.9,0.0,-0.2},{0.1,86.7,0.0,-0.2},{-
-0.1,-59.2,0.0,0.2},{0.3,-58.8,0.0,0.1},{-0.3,49.0,0.0,0.0},{
--0.2,56.9,0.0,-0.1},{0.3,-50.2,0.0,0.0},{-0.2,53.4,0.0,-0.1}
-,{0.1,-76.5,0.0,0.0},{-0.2,45.3,0.0,0.0},{0.1,-46.8,0.0,0.0}
-,{0.2,-44.6,0.0,0.0},{0.2,-48.7,0.0,0.0},{0.1,-46.8,0.0,0.0}
-,{0.1,-42.0,0.0,0.0},{0.0,46.4,0.0,-0.1},{0.2,-67.3,0.0,0.1}
-,{0.0,-65.8,0.0,0.2},{-0.1,-43.9,0.0,0.3},{0.0,-38.9,0.0,0.0
-},{-0.3,63.9,0.0,0.0},{-0.2,41.2,0.0,0.0},{0.0,-36.1,0.0,0.2
-},{-0.3,58.5,0.0,0.0},{-0.1,36.1,0.0,0.0},{0.0,-39.7,0.0,0.0
-},{0.1,-57.7,0.0,0.0},{-0.2,33.4,0.0,0.0},{36.4,0.0,0.0,0.0}
-,{-0.1,55.7,0.0,-0.1},{0.1,-35.4,0.0,0.0},{0.1,-31.0,0.0,0.0
-},{-0.1,30.1,0.0,0.0},{-0.3,49.2,0.0,0.0},{-0.2,49.1,0.0,0.0
-},{-0.1,33.6,0.0,0.0},{0.1,-33.5,0.0,0.0},{0.1,-31.0,0.0,0.0
-},{-0.1,28.0,0.0,0.0},{0.1,-25.2,0.0,0.0},{0.1,-26.2,0.0,0.0
-},{-0.2,41.5,0.0,0.0},{0.0,24.5,0.0,0.1},{-16.2,0.0,0.0,0.0}
-,{0.0,-22.3,0.0,0.0},{0.0,23.1,0.0,0.0},{-0.1,37.5,0.0,0.0},
-{0.2,-25.7,0.0,0.0},{0.0,25.2,0.0,0.0},{0.1,-24.5,0.0,0.0},{
--0.1,24.3,0.0,0.0},{0.1,-20.7,0.0,0.0},{0.1,-20.8,0.0,0.0},{
--0.2,33.4,0.0,0.0},{32.9,0.0,0.0,0.0},{0.1,-32.6,0.0,0.0},{
-0.0,19.9,0.0,0.0},{-0.1,19.6,0.0,0.0},{0.0,-18.7,0.0,0.0},{
-0.1,-19.0,0.0,0.0},{0.1,-28.6,0.0,0.0},{4.0,178.8,-11.8,0.3}
-,{39.8,-107.3,-5.6,-1.0},{9.9,164.0,-4.1,0.1},{-4.8,-135.3,-
-3.4,-0.1},{50.5,75.0,1.4,-1.2},{-1.1,-53.5,1.3,0.0},{-45.0,-
-2.4,-0.4,6.6},{-11.5,-61.0,-0.9,0.4},{4.4,-68.4,-3.4,0.0},{
-7.7,-47.1,-4.7,-1.0},{-42.9,-12.6,-1.2,4.2},{-42.8,12.7,-1.2
-,-4.2},{-7.6,-44.1,2.1,-0.5},{-64.1,1.7,0.2,4.5},{36.4,-10.4
-,1.0,3.5},{35.6,10.2,1.0,-3.5},{-1.7,39.5,2.0,0.0},{50.9,-
-8.2,-0.8,-5.0},{0.0,52.3,1.2,0.0},{-42.9,-17.8,0.4,0.0},{2.6
-,34.3,0.8,0.0},{-0.8,-48.6,2.4,-0.1},{-4.9,30.5,3.7,0.7},{
-0.0,-43.6,2.1,0.0},{0.0,-25.4,1.2,0.0},{2.0,40.9,-2.0,0.0},{
--2.1,26.1,0.6,0.0},{22.6,-3.2,-0.5,-0.5},{-7.6,24.9,-0.4,-
-0.2},{-6.2,34.9,1.7,0.3},{2.0,17.4,-0.4,0.1},{-3.9,20.5,2.4,
-0.6}};static double BAz[][4]={{9205365.8,-1506.2,885.7,-0.2}
-,{573095.9,-570.2,-305.0,-0.3},{97845.5,147.8,-48.8,-0.2},{-
-89753.6,28.0,46.9,0.0},{7406.7,-327.1,-18.2,0.8},{22442.3,-
-22.3,-67.6,0.0},{-683.6,46.8,0.0,0.0},{20070.7,36.0,1.6,0.0}
-,{12893.8,39.5,-6.2,0.0},{-9593.2,14.4,30.2,-0.1},{-6899.5,
-4.8,-0.6,0.0},{-5332.5,-0.1,2.7,0.0},{-125.2,10.5,0.0,0.0},{
--3323.4,-0.9,-0.3,0.0},{3142.3,8.9,0.3,0.0},{2552.5,7.3,-1.2
-,0.0},{2634.4,8.8,0.2,0.0},{-2424.4,1.6,-0.4,0.0},{-123.3,
-3.9,0.0,0.0},{1642.4,7.3,-0.8,0.0},{47.9,3.2,0.0,0.0},{
-1321.2,6.2,-0.6,0.0},{-1234.1,-0.3,0.6,0.0},{-1076.5,-0.3,
-0.0,0.0},{-61.6,1.8,0.0,0.0},{-55.4,1.6,0.0,0.0},{856.9,-4.9
-,-2.1,0.0},{-800.7,-0.1,0.0,0.0},{685.1,-0.6,-3.8,0.0},{-
-16.9,-1.5,0.0,0.0},{695.7,1.8,0.0,0.0},{642.2,-2.6,-1.6,0.0}
-,{13.3,1.1,-0.1,0.0},{521.9,1.6,0.0,0.0},{325.8,2.0,-0.1,0.0
-},{-325.1,-0.5,0.9,0.0},{10.1,0.3,0.0,0.0},{334.5,1.6,0.0,
-0.0},{307.1,0.4,-0.9,0.0},{327.2,0.5,0.0,0.0},{-304.6,-0.1,
-0.0,0.0},{304.0,0.6,0.0,0.0},{-276.8,-0.5,0.1,0.0},{268.9,
-1.3,0.0,0.0},{271.8,1.1,0.0,0.0},{271.5,-0.4,-0.8,0.0},{-5.2
-,0.5,0.0,0.0},{-220.5,0.1,0.0,0.0},{-20.1,0.3,0.0,0.0},{-
-191.0,0.1,0.5,0.0},{-4.1,0.3,0.0,0.0},{130.6,-0.1,0.0,0.0},{
-3.0,0.3,0.0,0.0},{122.9,0.8,0.0,0.0},{3.7,-0.3,0.0,0.0},{
-123.1,0.4,-0.3,0.0},{-52.7,15.3,0.0,0.0},{120.7,0.3,-0.3,0.0
-},{4.0,-0.3,0.0,0.0},{126.5,0.5,0.0,0.0},{112.7,0.5,-0.3,0.0
-},{-106.1,-0.3,0.3,0.0},{-112.9,-0.2,0.0,0.0},{3.6,-0.2,0.0,
-0.0},{107.4,0.3,0.0,0.0},{-10.9,0.2,0.0,0.0},{-0.9,0.0,0.0,
-0.0},{85.4,0.0,0.0,0.0},{0.0,-88.8,0.0,0.0},{-71.0,-0.2,0.0,
-0.0},{-70.3,0.0,0.0,0.0},{64.5,0.4,0.0,0.0},{69.8,0.0,0.0,
-0.0},{66.1,0.4,0.0,0.0},{-61.0,-0.2,0.0,0.0},{-59.5,-0.1,0.0
-,0.0},{-55.6,0.0,0.2,0.0},{51.7,0.2,0.0,0.0},{-49.0,-0.1,0.0
-,0.0},{-52.7,-0.1,0.0,0.0},{-49.6,1.4,0.0,0.0},{46.3,0.4,0.0
-,0.0},{49.6,0.1,0.0,0.0},{-5.1,0.1,0.0,0.0},{-44.0,-0.1,0.0,
-0.0},{-39.9,-0.1,0.0,0.0},{-39.5,-0.1,0.0,0.0},{-3.9,0.1,0.0
-,0.0},{-42.1,-0.1,0.0,0.0},{-17.2,0.1,0.0,0.0},{-2.3,0.1,0.0
-,0.0},{-39.2,0.0,0.0,0.0},{-38.4,0.1,0.0,0.0},{36.8,0.2,0.0,
-0.0},{34.6,0.1,0.0,0.0},{-32.7,0.3,0.0,0.0},{30.4,0.0,0.0,
-0.0},{0.4,0.1,0.0,0.0},{29.3,0.2,0.0,0.0},{31.6,0.1,0.0,0.0}
-,{0.8,-0.1,0.0,0.0},{-27.9,0.0,0.0,0.0},{2.9,0.0,0.0,0.0},{-
-25.3,0.0,0.0,0.0},{25.0,0.1,0.0,0.0},{27.5,0.1,0.0,0.0},{-
-24.4,-0.1,0.0,0.0},{24.9,0.2,0.0,0.0},{-22.8,-0.1,0.0,0.0},{
-0.9,-0.1,0.0,0.0},{24.4,0.1,0.0,0.0},{23.9,0.1,0.0,0.0},{
-22.5,0.1,0.0,0.0},{20.8,0.1,0.0,0.0},{20.1,0.0,0.0,0.0},{
-21.5,0.1,0.0,0.0},{-20.0,0.0,0.0,0.0},{1.4,0.0,0.0,0.0},{-
-0.2,-0.1,0.0,0.0},{19.0,0.0,-0.1,0.0},{20.5,0.0,0.0,0.0},{-
-2.0,0.0,0.0,0.0},{-17.6,-0.1,0.0,0.0},{19.0,0.0,0.0,0.0},{-
-2.4,0.0,0.0,0.0},{-18.4,-0.1,0.0,0.0},{17.1,0.0,0.0,0.0},{
-0.4,0.0,0.0,0.0},{18.4,0.1,0.0,0.0},{0.0,17.4,0.0,0.0},{-0.6
-,0.0,0.0,0.0},{-15.4,0.0,0.0,0.0},{-16.8,-0.1,0.0,0.0},{16.3
-,0.0,0.0,0.0},{-2.0,0.0,0.0,0.0},{-1.5,0.0,0.0,0.0},{-14.3,-
-0.1,0.0,0.0},{14.4,0.0,0.0,0.0},{-13.4,0.0,0.0,0.0},{-14.3,-
-0.1,0.0,0.0},{-13.7,0.0,0.0,0.0},{13.1,0.1,0.0,0.0},{-1.7,
-0.0,0.0,0.0},{-12.8,0.0,0.0,0.0},{0.0,-14.4,0.0,0.0},{12.4,
-0.0,0.0,0.0},{-12.0,0.0,0.0,0.0},{-0.8,0.0,0.0,0.0},{10.9,
-0.1,0.0,0.0},{-10.8,0.0,0.0,0.0},{10.5,0.0,0.0,0.0},{-10.4,
-0.0,0.0,0.0},{-11.2,0.0,0.0,0.0},{10.5,0.1,0.0,0.0},{-1.4,
-0.0,0.0,0.0},{0.0,0.1,0.0,0.0},{0.7,0.0,0.0,0.0},{-10.3,0.0,
-0.0,0.0},{-10.0,0.0,0.0,0.0},{9.6,0.0,0.0,0.0},{9.4,0.1,0.0,
-0.0},{0.6,0.0,0.0,0.0},{-87.7,4.4,-0.4,-6.3},{46.3,22.4,0.5,
--2.4},{15.6,-3.4,0.1,0.4},{5.2,5.8,0.2,-0.1},{-30.1,26.9,0.7
-,0.0},{23.2,-0.5,0.0,0.6},{1.0,23.2,3.4,0.0},{-12.2,-4.3,0.0
-,0.0},{-2.1,-3.7,-0.2,0.1},{-18.6,-3.8,-0.4,1.8},{5.5,-18.7,
--1.8,-0.5},{-5.5,-18.7,1.8,-0.5},{18.4,-3.6,0.3,0.9},{-0.6,
-1.3,0.0,0.0},{-5.6,-19.5,1.9,0.0},{5.5,-19.1,-1.9,0.0},{-
-17.3,-0.8,0.0,0.9},{-3.2,-8.3,-0.8,0.3},{-0.1,0.0,0.0,0.0},{
--5.4,7.8,-0.3,0.0},{-14.8,1.4,0.0,0.3},{-3.8,0.4,0.0,-0.2},{
-12.6,3.2,0.5,-1.5},{0.1,0.0,0.0,0.0},{-13.6,2.4,-0.1,0.0},{
-0.9,1.2,0.0,0.0},{-11.9,-0.5,0.0,0.3},{0.4,12.0,0.3,-0.2},{
-8.3,6.1,-0.1,0.1},{0.0,0.0,0.0,0.0},{0.4,-10.8,0.3,0.0},{9.6
-,2.2,0.3,-1.2}};static int FObaR=sizeof(q6)/sizeof(int)/9;
-int foObAR;double Q7,Q8,q9,FOBAZ,q10,q11,Q12,q13,q14,Q15,
-foobaz,quux,Q16,Q17,q18;Q7=(Q0-Q4)/q5;Q8=134.96340251*DD2R+
-fmod(Q7*(1717915923.2178+Q7*(31.8792+Q7*(0.051635+Q7*(-
-0.00024470)))),q3)*DAS2R;q9=357.52910918*DD2R+fmod(Q7*(
-129596581.0481+Q7*(-0.5532+Q7*(0.000136+Q7*(-0.00001149)))),
-q3)*DAS2R;FOBAZ=93.27209062*DD2R+fmod(Q7*(1739527262.8478+Q7
-*(-12.7512+Q7*(-0.001037+Q7*(0.00000417)))),q3)*DAS2R;q10=
-297.85019547*DD2R+fmod(Q7*(1602961601.2090+Q7*(-6.3706+Q7*(
-0.006539+Q7*(-0.00003169)))),q3)*DAS2R;q11=125.04455501*DD2R
-+fmod(Q7*(-6962890.5431+Q7*(7.4722+Q7*(0.007702+Q7*(-
-0.00005939)))),q3)*DAS2R;Q12=181.97980085*DD2R+fmod(
-210664136.433548*Q7,q3)*DAS2R;q13=355.43299958*DD2R+fmod(
-68905077.493988*Q7,q3)*DAS2R;q14=34.35151874*DD2R+fmod(
-10925660.377991*Q7,q3)*DAS2R;Q15=50.07744430*DD2R+fmod(
-4399609.855732*Q7,q3)*DAS2R;Q17=-153.1*sin(q9)-1.9*sin(2.0*
-q9);q18=0.0;for(foObAR=FObaR-1;foObAR>=0;foObAR--){foobaz=((
-double)q6[foObAR][0])*Q8+((double)q6[foObAR][1])*q9+((double
-)q6[foObAR][2])*FOBAZ+((double)q6[foObAR][3])*q10+((double)
-q6[foObAR][4])*q11+((double)q6[foObAR][5])*Q12+((double)q6[
-foObAR][6])*q13+((double)q6[foObAR][7])*q14+((double)q6[
-foObAR][8])*Q15;quux=cos(foobaz);Q16=sin(foobaz);Q17+=(bar[
-foObAR][0]+bar[foObAR][2]*Q7)*quux+(bar[foObAR][1]+bar[
-foObAR][3]*Q7)*Q16;q18+=(BAz[foObAR][0]+BAz[foObAR][2]*Q7)*
-quux+(BAz[foObAR][1]+BAz[foObAR][3]*Q7)*Q16;}*foo=(Q17*1e-6-
-0.042888-0.29856*Q7)*DAS2R;*q1=(q18*1e-6-0.005171-0.02408*Q7
-)*DAS2R;*Q2=(84381.412+(-46.80927+(-0.000152+(0.0019989+(-
-0.00000051+(-0.000000025)*Q7)*Q7)*Q7)*Q7)*Q7)*DAS2R;}
-#undef q3
-#undef Q4
-#undef q5
-
-void palSlaPm(double Q0,double foo,double Q1,double BAR,double
-BAZ,double Q2,double Q3,double q4,double*fobar,double*q5){
-static double q6=(365.25*86400.0/149597870.0)*DAS2R;int q7;
-double FOOBAR,FOBAZ[3],foobaz,QUuX[3];palSlaDcs2c(Q0,foo,QUuX);
-FOOBAR=q6*Q2*BAZ;FOBAZ[0]=-Q1*QUuX[1]-BAR*cos(Q0)*sin(foo)+
-FOOBAR*QUuX[0];FOBAZ[1]=Q1*QUuX[0]-BAR*sin(Q0)*sin(foo)+
-FOOBAR*QUuX[1];FOBAZ[2]=BAR*cos(foo)+FOOBAR*QUuX[2];foobaz=
-q4-Q3;for(q7=0;q7<3;q7++)QUuX[q7]=QUuX[q7]+(foobaz*FOBAZ[q7]
-);palSlaDcc2s(QUuX,fobar,q5);*fobar=palSlaDranrm(*fobar);}
-
-void palSlaPrebn(double foo,double q0,double q1[3][3]){double
-BAr,q2,Baz,Q3,fobar,FOOBAR,q4;BAr=(foo-1850.0)/100.0;q2=(q0-
-foo)/100.0;Baz=q2*DAS2R;Q3=2303.5548+(1.39720+0.000059*BAr)*
-BAr;fobar=(Q3+(0.30242-0.000269*BAr+0.017996*q2)*q2)*Baz;
-FOOBAR=(Q3+(1.09478+0.000387*BAr+0.018324*q2)*q2)*Baz;q4=(
-2005.1125+(-0.85294-0.000365*BAr)*BAr+(-0.42647-0.000365*BAr
--0.041802*q2)*q2)*Baz;palSlaDeuler("\132\131\132",-fobar,q4,-
-FOOBAR,q1);}
-
-void palSlaPrec(double q0,double q1,double q2[3][3]){double Q3,
-Q4,Q5,FOO,BAR,Q6,BAZ;Q3=(q0-2000.0)/100.0;Q4=(q1-q0)/100.0;
-Q5=Q4*DAS2R;FOO=2306.2181+((1.39656-(0.000139*Q3))*Q3);BAR=(
-FOO+((0.30188-0.000344*Q3)+0.017998*Q4)*Q4)*Q5;Q6=(FOO+((
-1.09468+0.000066*Q3)+0.018203*Q4)*Q4)*Q5;BAZ=((2004.3109+(-
-0.85330-0.000217*Q3)*Q3)+((-0.42665-0.000217*Q3)-0.041833*Q4
-)*Q4)*Q5;palSlaDeuler("\132\131\132",-BAR,BAZ,-Q6,q2);}
-
-void palSlaPrenut(double FOO,double Q0,double q1[3][3]){double
-BAr[3][3],q2[3][3];palSlaPrec(FOO,palSlaEpj(Q0),BAr);palSlaNut(Q0,q2)
-;palSlaDmxm(q2,BAr,q1);}
-
-void palSlaRefco(double foo,double Q0,double q1,double BAr,
-double q2,double baz,double q3,double Q4,double*FOBAR,double
-*q5){double FOOBAR,Q6;static double Q7=0.7853981633974483;
-static double q8=1.325817663668033;palSlaRefro(Q7,foo,Q0,q1,BAr
-,q2,baz,q3,Q4,&FOOBAR);palSlaRefro(q8,foo,Q0,q1,BAr,q2,baz,q3,
-Q4,&Q6);*FOBAR=(64.0*FOOBAR-Q6)/60.0;*q5=(Q6-4.0*FOOBAR)/
-60.0;}
-
-static void q0(double,double,double,double,double,double,
-double,double,double,double,double,double,double*,double*,
-double*);static void FOO(double,double,double,double,double,
-double*,double*);void palSlaRefro(double q1,double BAR,double
-Q2,double Q3,double q4,double q5,double q6,double q7,double
-baz,double*FOBAR)
-#define foobar 16384
-{static double fobaz=1.623156204;static double Q8=8314.32;
-static double FOObAz=28.9644;static double q9=18.0152;static
- double quux=6378120.0;static double q10=18.36;static double
- q11=11000.0;static double FREd=80000.0;double dog;double
-Q12;double q13;double q14;double Q15;double Q16,caT,q17,FISH
-,GASP,bad;double Q18;double q19;double Q20;double bug;int
-SILLY,Q21,Q22,buggy,mum,dad;double q23,q24,q25,DISK,EMPty,
-q26,FuLl,q27,FAST,SMALL,big,OK,HeLLo,bYE,q28,MaGIC,oBscuRe,
-speed,iNdEX,bAR_FOO,Bar_BAr,Q29,Q30,q31,q32,bar_baz,Q33,q34,
-bar_fOBAR,Q35,Q36,BAR_FOOBAR,Q37,q38,bAr_FOBaZ,q39,Q40,q41,
-baR_fOoBaz,q42,BaR_qUux,Q43,BAR_FRED,BaR_DoG,Q44,BAr_CAt,
-bar_fish,Q45,q46,Q47,Q48;
-#define q49(Q50,q51) ((q51)/(Q50+q51));
-Q48=0.0;
-q23=palSlaDrange(q1);q24=fabs(q23);q24=gmin(q24,fobaz);q25=gmax
-(BAR,-1000.0);q25=gmin(q25,FREd);Q12=gmax(Q2,100.0);Q12=gmin
-(Q12,500.0);DISK=gmax(Q3,0.0);DISK=gmin(DISK,10000.0);EMPty=
-gmax(q4,0.0);EMPty=gmin(EMPty,1.0);q26=gmax(q5,0.1);q13=fabs
-(q7);q13=gmax(q13,0.001);q13=gmin(q13,0.01);q28=fabs(baz);
-q28=gmax(q28,1e-12);FuLl=gmin(q28,0.1)/2.0;dad=(q26<=100.0);
-q27=q26*q26;FAST=9.784*(1.0-0.0026*cos(2.0*q6)-2.8e-7*q25);
-SMALL=(dad)?((287.604+1.6288/q27+0.0136/(q27*q27))*273.15/
-1013.25)*1e-6:77.6890e-6;bug=FAST*FOObAz/Q8;big=bug/q13;q14=
-big-2.0;Q15=q10-2.0;OK=Q12-273.15;HeLLo=pow(10.0,(0.7859+
-0.03477*OK)/(1.0+0.00412*OK))*(1.0+DISK*(4.5e-6+6e-10*OK*OK)
-);bYE=(DISK>0.0)?EMPty*HeLLo/(1.0-(1.0-EMPty)*HeLLo/DISK):
-0.0;q28=bYE*(1.0-q9/FOObAz)*big/(q10-big);Q16=SMALL*(DISK+
-q28)/Q12;caT=(SMALL*q28+(dad?11.2684e-6:6.3938e-6)*bYE)/Q12;
-q17=(big-1.0)*q13*Q16/Q12;FISH=(q10-1.0)*q13*caT/Q12;GASP=
-dad?0.0:375463e-6*bYE/Q12;bad=GASP*Q15*q13/(Q12*Q12);dog=
-quux+q25;q0(dog,Q12,q13,q14,Q15,Q16,caT,q17,FISH,GASP,bad,
-dog,&MaGIC,&oBscuRe,&speed);iNdEX=oBscuRe*dog*sin(q24);
-bAR_FOO=q49(oBscuRe,speed);Q18=quux+gmax(q11,q25);q0(dog,Q12
-,q13,q14,Q15,Q16,caT,q17,FISH,GASP,bad,Q18,&q19,&Q20,&
-Bar_BAr);Q29=asin(iNdEX/(Q18*Q20));Q30=q49(Q20,Bar_BAr);FOO(
-Q18,q19,Q20,bug,Q18,&q31,&q32);bar_baz=asin(iNdEX/(Q18*q31))
-;Q33=q49(q31,q32);q34=quux+FREd;FOO(Q18,q19,Q20,bug,q34,&
-bar_fOBAR,&Q35);Q36=asin(iNdEX/(q34*bar_fOBAR));BAR_FOOBAR=
-q49(bar_fOBAR,Q35);for(Q21=1;Q21<=2;Q21++){Q37=1.0;SILLY=8;
-if(Q21==1){q38=q24;bAr_FOBaZ=Q29-q38;q39=bAR_FOO;Q40=Q30;}
-else{q38=bar_baz;bAr_FOBaZ=Q36-q38;q39=Q33;Q40=BAR_FOOBAR;}
-q41=0.0;baR_fOoBaz=0.0;Q22=1;for(;;){q42=bAr_FOBaZ/(double)
-SILLY;BaR_qUux=(Q21==1)?dog:Q18;for(buggy=1;buggy<SILLY;
-buggy+=Q22){Q43=sin(q38+q42*(double)buggy);if(Q43>1e-20){q28
-=iNdEX/Q43;BAR_FRED=BaR_qUux;mum=0;do{if(Q21==1){q0(dog,Q12,
-q13,q14,Q15,Q16,caT,q17,FISH,GASP,bad,BAR_FRED,&Q44,&BAr_CAt
-,&bar_fish);}else{FOO(Q18,q19,Q20,bug,BAR_FRED,&BAr_CAt,&
-bar_fish);}BaR_DoG=(BAR_FRED*BAr_CAt-q28)/(BAr_CAt+bar_fish)
-;BAR_FRED-=BaR_DoG;}while(fabs(BaR_DoG)>1.0&&mum++<=4);
-BaR_qUux=BAR_FRED;}if(Q21==1){q0(dog,Q12,q13,q14,Q15,Q16,caT
-,q17,FISH,GASP,bad,BaR_qUux,&Q45,&BAr_CAt,&bar_fish);}else{
-FOO(Q18,q19,Q20,bug,BaR_qUux,&BAr_CAt,&bar_fish);}q46=q49(
-BAr_CAt,bar_fish);if(Q22==1&&buggy%2==0){baR_fOoBaz+=q46;}
-else{q41+=q46;}}Q47=q42*(q39+4.0*q41+2.0*baR_fOoBaz+Q40)/3.0
-;if(Q21==1)Q48=Q47;if(fabs(Q47-Q37)<=FuLl||SILLY>=foobar)
-break;Q37=Q47;SILLY+=SILLY;baR_fOoBaz+=q41;q41=0.0;Q22=2;}}*
-FOBAR=Q48+Q47;if(q23<0.0)*FOBAR=-(*FOBAR);}static void q0(
-double dog,double Q12,double q13,double q14,double Q15,
-double Q16,double caT,double q17,double FISH,double GASP,
-double bad,double BaR_qUux,double*Q45,double*BAr_CAt,double*
-bar_fish){double q28,Q52,Q53,BAR_GASp;q28=Q12-q13*(BaR_qUux-
-dog);q28=gmin(q28,320.0);q28=gmax(q28,100.0);Q52=q28/Q12;Q53
-=pow(Q52,q14);BAR_GASp=pow(Q52,Q15);*Q45=q28;*BAr_CAt=1.0+(
-Q16*Q53-(caT-GASP/q28)*BAR_GASp)*Q52;*bar_fish=BaR_qUux*(-
-q17*Q53+(FISH-bad/Q52)*BAR_GASp);}static void FOO(double Q18
-,double q19,double Q20,double bug,double BaR_qUux,double*
-BAr_CAt,double*bar_fish){double BAR_BAD,q28;BAR_BAD=bug/q19;
-q28=(Q20-1.0)*exp(-BAR_BAD*(BaR_qUux-Q18));*BAr_CAt=1.0+q28;
-*bar_fish=-BaR_qUux*BAR_BAD*q28;}
-#undef foobar
-#undef q49
-
-float palSlaRverot(float Q0,float q1,float foo,float q2)
-#define q3 0.4655
-{return(float)(q3*cos((double)Q0)*sin((double)(q2-q1))*cos((
-double)foo));}
-#undef q3
-
-float palSlaRvgalc(float Q0,float FOo){static float q1[3]={-
-108.70408f,97.86251f,-164.33610f};float BAR[3];palSlaCs2c(Q0,
-FOo,BAR);return palSlaVdv(q1,BAR);}
-
-float palSlaRvlg(float FOO,float BAR){static float baz[3]={-
-148.23284f,133.44888f,-224.09467f};float Q0[3];palSlaCs2c(FOO,
-BAR,Q0);return palSlaVdv(baz,Q0);}
-
-float palSlaRvlsrd(float foo,float Q0){static float BAr[3]={
-0.63823f,14.58542f,-7.80116f};float q1[3];palSlaCs2c(foo,Q0,q1)
-;return palSlaVdv(BAr,q1);}
-
-float palSlaRvlsrk(float q0,float Q1){static float foo[3]={-
-0.29000f,17.31726f,-10.00141f};float q2[3];palSlaCs2c(q0,Q1,q2)
-;return palSlaVdv(foo,q2);}
-
-void palSlaSubet(double Q0,double FOO,double q1,double*BAR,
-double*q2){double Q3[3],Q4[3],Baz;int q5;palSlaEtrms(q1,Q3);
-palSlaDcs2c(Q0,FOO,Q4);Baz=1.0+palSlaDvdv(Q4,Q3);for(q5=0;q5<3;q5
-++){Q4[q5]=Baz*Q4[q5]-Q3[q5];}palSlaDcc2s(Q4,BAR,q2);*BAR=
-palSlaDranrm(*BAR);}
-
-void palSlaSupgal(double foo,double baR,double*BAZ,double*q0){
-double Q1[3],FOBAR[3];static double Q2[3][3]={{-
-0.735742574804,0.677261296414,0.0},{-0.074553778365,-
-0.080991471307,0.993922590400},{0.673145302109,
-0.731271165817,0.110081262225}};palSlaDcs2c(foo,baR,Q1);
-palSlaDimxv(Q2,Q1,FOBAR);palSlaDcc2s(FOBAR,BAZ,q0);*BAZ=palSlaDranrm(
-*BAZ);*q0=palSlaDrange(*q0);}
-
-float palSlaVdv(float FOO[3],float BAR[3]){return FOO[0]*BAR[0]
-+FOO[1]*BAR[1]+FOO[2]*BAR[2];}
-
-
-/* Not quite like slaDh2e since it converts from topocentric (az,el) to
- apparent (ha,dec). This includes a correction for diurnal aberration.
- The magnitude of the diurnal aberration vector should be supplied in
- parameter "diurab". The extra code is taken from the Fortran routine
- SLA_OAPQK. */
-
-void palSlaDh2e(double az,double el,double phi,double diurab,double *ha,double *dec){
- double sa,ca,se,ce,sp,cp,x,y,z,r,xmhda,ymhda,zmhda,f;
-
- sa=sin(az);
- ca=cos(az);
- se=sin(el);
- ce=cos(el);
- sp=sin(phi);
- cp=cos(phi);
-
-/* Cartesian (az,el) to Cartesian (ha,dec) - note, +ha, not -ha. */
- xmhda=-ca*ce*sp+se*cp;
- ymhda=-sa*ce;
- zmhda=ca*ce*cp+se*sp;
-
-/* Correct this vector for diurnal aberration. Since the above
- expressions produce +ha rather than -ha, we do not negate "diurab"
- before using it. Compare this to SLA_AOPQK. */
- f = (1-diurab*ymhda);
- x = f*xmhda;
- y = f*(ymhda+diurab);
- z = f*zmhda;
-
-/* Cartesian (ha,dec) to spherical (ha,dec). */
- r=sqrt(x*x+y*y);
- if (r==0.0) {
- *ha=0.0;
- } else {
- *ha=atan2(y,x);
- }
- *dec=atan2(z,r);
-}
-
-
-/* Not quite like slaDe2h since it converts from apparent (ha,dec) to
- topocentric (az,el). This includes a correction for diurnal
- aberration. The magnitude of the diurnal aberration vector should be
- supplied in parameter "diurab". The extra code is taken from the
- Fortran routine SLA_AOPQK. */
-
-void palSlaDe2h( double ha, double dec, double phi, double diurab,
- double *az, double *el){
- double sh,ch,sd,cd,sp,cp,x,y,z,r,a,xhd,yhd,zhd,xhdt,yhdt,zhdt,f;
-
- sh=sin(ha);
- ch=cos(ha);
- sd=sin(dec);
- cd=cos(dec);
- sp=sin(phi);
- cp=cos(phi);
-
-/* Components of cartesian (-ha,dec) vector. */
- xhd = ch*cd;
- yhd = -sh*cd;
- zhd = sd;
-
-/* Modify the above vector to apply diurnal aberration. */
- f = (1.0-diurab*yhd);
- xhdt = f*xhd;
- yhdt = f*(yhd+diurab);
- zhdt = f*zhd;
-
-/* Convert to cartesian (az,el). */
- x=-xhdt*sp+zhdt*cp;
- y=yhdt;
- z=xhdt*cp+zhdt*sp;
-
-/* Convert to spherical (az,el). */
- r=sqrt(x*x+y*y);
- if( r == 0.0 ) {
- a=0.0;
- } else {
- a=atan2(y,x);
- }
-
- if(a<0.0) a=a+D2PI;
-
- *az=a;
- *el=atan2(z,r);
-}
-
-
-
-double palSlaGmsta( double Dt, double uQ){ static double
-s2r=7.272205216643039903848712E-5; double r,d1,d2,t; if(Dt<uQ) { d1=Dt;
-d2=uQ; } else { d1=uQ; d2=Dt; } t=(d1+(d2-51544.5))/36525.0;
-r=palSlaDranrm(s2r*(24110.54841+ (8640184.812866+ (0.093104
--6.2E-6*t)*t)*t +86400.0*(fmod(d1,1.0)+fmod(d2,1.0)))); return r; }
-
-void palSlaPvobs(double p,double h,double stl,double pv[6]){double
-r,z,s,c,v;double sr=7.292115855306589E-5;palSlaGeoc(p,h,&r,&z);
-s=sin(stl);c=cos(stl);v=sr*r;pv[0]=r*c;pv[1]=r*s;pv[2]=z;
-pv[3]=-v*s;pv[4]=v*c;pv[5]=0.0;}
-
-
-
diff --git a/ast-5.3-1/pal.h b/ast-5.3-1/pal.h
deleted file mode 100644
index f7e6d86..0000000
--- a/ast-5.3-1/pal.h
+++ /dev/null
@@ -1,510 +0,0 @@
-#ifndef PALHDEF
-#define PALHDEF
-/*
-** Author:
-** Patrick Wallace (ptw at tpsoft.demon.co.uk)
-**
-** License:
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-** USA.
-**
-** Last revision: 10 December 2002
-**
-*/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <math.h>
-
-void palSlaAddet ( double rm, double dm, double eq, double *rc, double *dc );
-
-void palSlaAfin ( char *string, int *iptr, float *a, int *j );
-
-double palSlaAirmas ( double zd );
-
-void palSlaAltaz ( double ha, double dec, double phi,
- double *az, double *azd, double *azdd,
- double *el, double *eld, double *eldd,
- double *pa, double *pad, double *padd );
-
-void palSlaAmp ( double ra, double da, double date, double eq,
- double *rm, double *dm );
-
-void palSlaAmpqk ( double ra, double da, double amprms[21],
- double *rm, double *dm );
-
-void palSlaAop ( double rap, double dap, double date, double dut,
- double elongm, double phim, double hm, double xp,
- double yp, double tdk, double pmb, double rh,
- double wl, double tlr,
- double *aob, double *zob, double *hob,
- double *dob, double *rob );
-
-void palSlaAoppa ( double date, double dut, double elongm, double phim,
- double hm, double xp, double yp, double tdk, double pmb,
- double rh, double wl, double tlr, double aoprms[14] );
-
-void palSlaAoppat ( double date, double aoprms[14] );
-
-void palSlaAopqk ( double rap, double dap, double aoprms[14],
- double *aob, double *zob, double *hob,
- double *dob, double *rob );
-
-void palSlaAtmdsp ( double tdk, double pmb, double rh, double wl1,
- double a1, double b1, double wl2, double *a2, double *b2 );
-
-void palSlaAv2m ( float axvec[3], float rmat[3][3] );
-
-float palSlaBear ( float a1, float b1, float a2, float b2 );
-
-void palSlaCaf2r ( int ideg, int iamin, float asec, float *rad, int *j );
-
-void palSlaCaldj ( int iy, int im, int id, double *djm, int *j );
-
-void palSlaCalyd ( int iy, int im, int id, int *ny, int *nd, int *j );
-
-void palSlaCc2s ( float v[3], float *a, float *b );
-
-void palSlaCc62s ( float v[6], float *a, float *b, float *r,
- float *ad, float *bd, float *rd );
-
-void palSlaCd2tf ( int ndp, float days, char *sign, int ihmsf[4] );
-
-void palSlaCldj ( int iy, int im, int id, double *djm, int *j );
-
-void palSlaClyd ( int iy, int im, int id, int *ny, int *nd, int *jstat );
-
-void palSlaCombn ( int nsel, int ncand, int list[], int *j );
-
-void palSlaCr2af ( int ndp, float angle, char *sign, int idmsf[4] );
-
-void palSlaCr2tf ( int ndp, float angle, char *sign, int ihmsf[4] );
-
-void palSlaCs2c ( float a, float b, float v[3] );
-
-void palSlaCs2c6 ( float a, float b, float r, float ad,
- float bd, float rd, float v[6] );
-
-void palSlaCtf2d ( int ihour, int imin, float sec, float *days, int *j );
-
-void palSlaCtf2r ( int ihour, int imin, float sec, float *rad, int *j );
-
-void palSlaDaf2r ( int ideg, int iamin, double asec, double *rad, int *j );
-
-void palSlaDafin ( char *string, int *iptr, double *a, int *j );
-
-double palSlaDat ( double dju );
-
-void palSlaDav2m ( double axvec[3], double rmat[3][3] );
-
-double palSlaDbear ( double a1, double b1, double a2, double b2 );
-
-void palSlaDbjin ( char *string, int *nstrt,
- double *dreslt, int *jf1, int *jf2 );
-
-void palSlaDc62s ( double v[6], double *a, double *b, double *r,
- double *ad, double *bd, double *rd );
-
-void palSlaDcc2s ( double v[3], double *a, double *b );
-
-void palSlaDcmpf ( double coeffs[6], double *xz, double *yz, double *xs,
- double *ys, double *perp, double *orient );
-
-void palSlaDcs2c ( double a, double b, double v[3] );
-
-void palSlaDd2tf ( int ndp, double days, char *sign, int ihmsf[4] );
-
-void palSlaDe2h ( double ha, double dec, double phi, double diurab,
- double *az, double *el );
-
-void palSlaDeuler ( char *order, double phi, double theta, double psi,
- double rmat[3][3] );
-
-void palSlaDfltin ( char *string, int *nstrt, double *dreslt, int *jflag );
-
-void palSlaDh2e( double az, double el, double phi, double diurab, double *ha,
- double *dec);
-
-void palSlaDimxv ( double dm[3][3], double va[3], double vb[3] );
-
-void palSlaDjcal ( int ndp, double djm, int iymdf[4], int *j );
-
-void palSlaDjcl ( double djm, int *iy, int *im, int *id, double *fd, int *j );
-
-void palSlaDm2av ( double rmat[3][3], double axvec[3] );
-
-void palSlaDmat ( int n, double *a, double *y, double *d, int *jf, int *iw );
-
-void palSlaDmoon ( double date, double pv[6] );
-
-void palSlaDmxm ( double a[3][3], double b[3][3], double c[3][3] );
-
-void palSlaDmxv ( double dm[3][3], double va[3], double vb[3] );
-
-double palSlaDpav ( double v1[3], double v2[3] );
-
-void palSlaDr2af ( int ndp, double angle, char *sign, int idmsf[4] );
-
-void palSlaDr2tf ( int ndp, double angle, char *sign, int ihmsf[4] );
-
-double palSlaDrange ( double angle );
-
-double palSlaDranrm ( double angle );
-
-void palSlaDs2c6 ( double a, double b, double r, double ad, double bd,
- double rd, double v[6] );
-
-void palSlaDs2tp ( double ra, double dec, double raz, double decz,
- double *xi, double *eta, int *j );
-
-double palSlaDsep ( double a1, double b1, double a2, double b2 );
-
-double palSlaDsepv ( double v1[3], double v2[3] );
-
-double palSlaDt ( double epoch );
-
-void palSlaDtf2d ( int ihour, int imin, double sec, double *days, int *j );
-
-void palSlaDtf2r ( int ihour, int imin, double sec, double *rad, int *j );
-
-void palSlaDtp2s ( double xi, double eta, double raz, double decz,
- double *ra, double *dec );
-
-void palSlaDtp2v ( double xi, double eta, double v0[3], double v[3] );
-
-void palSlaDtps2c ( double xi, double eta, double ra, double dec,
- double *raz1, double *decz1,
- double *raz2, double *decz2, int *n );
-
-void palSlaDtpv2c ( double xi, double eta, double v[3],
- double v01[3], double v02[3], int *n );
-
-double palSlaDtt ( double dju );
-
-void palSlaDv2tp ( double v[3], double v0[3], double *xi, double *eta, int *j );
-
-double palSlaDvdv ( double va[3], double vb[3] );
-
-void palSlaDvn ( double v[3], double uv[3], double *vm );
-
-void palSlaDvxv ( double va[3], double vb[3], double vc[3] );
-
-void palSlaE2h ( float ha, float dec, float phi, float *az, float *el );
-
-void palSlaEarth ( int iy, int id, float fd, float posvel[6] );
-
-void palSlaEcleq ( double dl, double db, double date, double *dr, double *dd );
-
-void palSlaEcmat ( double date, double rmat[3][3] );
-
-void palSlaEcor ( float rm, float dm, int iy, int id, float fd,
- float *rv, float *tl );
-
-void palSlaEg50 ( double dr, double dd, double *dl, double *db );
-
-void palSlaEl2ue ( double date, int jform, double epoch, double orbinc,
- double anode, double perih, double aorq, double e,
- double aorl, double dm, double u[], int *jstat );
-
-double palSlaEpb ( double date );
-
-double palSlaEpb2d ( double epb );
-
-double palSlaEpco ( char k0, char k, double e );
-
-double palSlaEpj ( double date );
-
-double palSlaEpj2d ( double epj );
-
-void palSlaEqecl ( double dr, double dd, double date, double *dl, double *db );
-
-double palSlaEqeqx ( double date );
-
-void palSlaEqgal ( double dr, double dd, double *dl, double *db );
-
-void palSlaEtrms ( double ep, double ev[3] );
-
-void palSlaEuler ( char *order, float phi, float theta, float psi,
- float rmat[3][3] );
-
-void palSlaEvp ( double date, double deqx,
- double dvb[3], double dpb[3],
- double dvh[3], double dph[3] );
-
-void palSlaFitxy ( int itype, int np, double xye[][2], double xym[][2],
- double coeffs[6], int *j );
-
-void palSlaFk425 ( double r1950, double d1950, double dr1950,
- double dd1950, double p1950, double v1950,
- double *r2000, double *d2000, double *dr2000,
- double *dd2000, double *p2000, double *v2000 );
-
-void palSlaFk45z ( double r1950, double d1950, double bepoch,
- double *r2000, double *d2000 );
-
-void palSlaFk524 ( double r2000, double d2000, double dr2000,
- double dd2000, double p2000, double v2000,
- double *r1950, double *d1950, double *dr1950,
- double *dd1950, double *p1950, double *v1950 );
-
-void palSlaFk52h ( double r5, double d5, double dr5, double dd5,
- double *dr, double *dh, double *drh, double *ddh );
-
-void palSlaFk54z ( double r2000, double d2000, double bepoch,
- double *r1950, double *d1950,
- double *dr1950, double *dd1950 );
-
-void palSlaFk5hz ( double r5, double d5, double epoch,
- double *rh, double *dh );
-
-void palSlaFlotin ( char *string, int *nstrt, float *reslt, int *jflag );
-
-void palSlaGaleq ( double dl, double db, double *dr, double *dd );
-
-void palSlaGalsup ( double dl, double db, double *dsl, double *dsb );
-
-void palSlaGe50 ( double dl, double db, double *dr, double *dd );
-
-void palSlaGeoc ( double p, double h, double *r, double *z );
-
-double palSlaGmst ( double ut1 );
-
-double palSlaGmsta ( double date, double ut1 );
-
-void palSlaH2e ( float az, float el, float phi, float *ha, float *dec );
-
-void palSlaH2fk5 ( double dr, double dh, double drh, double ddh,
- double *r5, double *d5, double *dr5, double *dd5 );
-
-void palSlaHfk5z ( double rh, double dh, double epoch,
- double *r5, double *d5, double *dr5, double *dd5 );
-
-void palSlaImxv ( float rm[3][3], float va[3], float vb[3] );
-
-void palSlaInt2in ( char *string, int *nstrt, int *ireslt, int *jflag );
-
-void palSlaIntin ( char *string, int *nstrt, long *ireslt, int *jflag );
-
-void palSlaInvf ( double fwds[6], double bkwds[6], int *j );
-
-void palSlaKbj ( int jb, double e, char *k, int *j );
-
-void palSlaM2av ( float rmat[3][3], float axvec[3] );
-
-void palSlaMap ( double rm, double dm, double pr, double pd,
- double px, double rv, double eq, double date,
- double *ra, double *da );
-
-void palSlaMappa ( double eq, double date, double amprms[21] );
-
-void palSlaMapqk ( double rm, double dm, double pr, double pd,
- double px, double rv, double amprms[21],
- double *ra, double *da );
-
-void palSlaMapqkz ( double rm, double dm, double amprms[21],
- double *ra, double *da );
-
-void palSlaMoon ( int iy, int id, float fd, float posvel[6] );
-
-void palSlaMxm ( float a[3][3], float b[3][3], float c[3][3] );
-
-void palSlaMxv ( float rm[3][3], float va[3], float vb[3] );
-
-void palSlaNut ( double date, double rmatn[3][3] );
-
-void palSlaNutc ( double date, double *dpsi, double *deps, double *eps0 );
-
-void palSlaNutc80 ( double date, double *dpsi, double *deps, double *eps0 );
-
-void palSlaOap ( char *type, double ob1, double ob2, double date,
- double dut, double elongm, double phim, double hm,
- double xp, double yp, double tdk, double pmb,
- double rh, double wl, double tlr,
- double *rap, double *dap );
-
-void palSlaOapqk ( char *type, double ob1, double ob2, double aoprms[14],
- double *rap, double *dap );
-
-void palSlaObs ( int n, char *c, char *name, double *w, double *p, double *h );
-
-double palSlaPa ( double ha, double dec, double phi );
-
-double palSlaPav ( float v1[3], float v2[3] );
-
-void palSlaPcd ( double disco, double *x, double *y );
-
-void palSlaPda2h ( double p, double d, double a,
- double *h1, int *j1, double *h2, int *j2 );
-
-void palSlaPdq2h ( double p, double d, double q,
- double *h1, int *j1, double *h2, int *j2 );
-
-void palSlaPermut ( int n, int istate[], int iorder[], int *j );
-
-void palSlaPertel (int jform, double date0, double date1,
- double epoch0, double orbi0, double anode0,
- double perih0, double aorq0, double e0, double am0,
- double *epoch1, double *orbi1, double *anode1,
- double *perih1, double *aorq1, double *e1, double *am1,
- int *jstat );
-
-void palSlaPertue ( double date, double u[], int *jstat );
-
-void palSlaPlanel ( double date, int jform, double epoch, double orbinc,
- double anode, double perih, double aorq, double e,
- double aorl, double dm, double pv[6], int *jstat );
-
-void palSlaPlanet ( double date, int np, double pv[6], int *j );
-
-void palSlaPlante ( double date, double elong, double phi, int jform,
- double epoch, double orbinc, double anode, double perih,
- double aorq, double e, double aorl, double dm,
- double *ra, double *dec, double *r, int *jstat );
-
-void palSlaPlantu ( double date, double elong, double phi, double u[],
- double *ra, double *dec, double *r, int *jstat );
-
-void palSlaPm ( double r0, double d0, double pr, double pd,
- double px, double rv, double ep0, double ep1,
- double *r1, double *d1 );
-
-void palSlaPolmo ( double elongm, double phim, double xp, double yp,
- double *elong, double *phi, double *daz );
-
-void palSlaPrebn ( double bep0, double bep1, double rmatp[3][3] );
-
-void palSlaPrec ( double ep0, double ep1, double rmatp[3][3] );
-
-void palSlaPrecl ( double ep0, double ep1, double rmatp[3][3] );
-
-void palSlaPreces ( char sys[3], double ep0, double ep1,
- double *ra, double *dc );
-
-void palSlaPrenut ( double epoch, double date, double rmatpn[3][3] );
-
-void palSlaPv2el ( double pv[], double date, double pmass, int jformr,
- int *jform, double *epoch, double *orbinc,
- double *anode, double *perih, double *aorq, double *e,
- double *aorl, double *dm, int *jstat );
-
-void palSlaPv2ue ( double pv[], double date, double pmass,
- double u[], int *jstat );
-
-void palSlaPvobs ( double p, double h, double stl, double pv[6] );
-
-void palSlaPxy ( int np, double xye[][2], double xym[][2],
- double coeffs[6],
- double xyp[][2], double *xrms, double *yrms, double *rrms );
-
-float palSlaRange ( float angle );
-
-float palSlaRanorm ( float angle );
-
-double palSlaRcc ( double tdb, double ut1, double wl, double u, double v );
-
-void palSlaRdplan ( double date, int np, double elong, double phi,
- double *ra, double *dec, double *diam );
-
-void palSlaRefco ( double hm, double tdk, double pmb, double rh,
- double wl, double phi, double tlr, double eps,
- double *refa, double *refb );
-
-void palSlaRefcoq ( double tdk, double pmb, double rh, double wl,
- double *refa, double *refb );
-
-void palSlaRefro ( double zobs, double hm, double tdk, double pmb,
- double rh, double wl, double phi, double tlr, double eps,
- double *ref );
-
-void palSlaRefv ( double vu[3], double refa, double refb, double vr[3] );
-
-void palSlaRefz ( double zu, double refa, double refb, double *zr );
-
-float palSlaRverot ( float phi, float ra, float da, float st );
-
-float palSlaRvgalc ( float r2000, float d2000 );
-
-float palSlaRvlg ( float r2000, float d2000 );
-
-float palSlaRvlsrd ( float r2000, float d2000 );
-
-float palSlaRvlsrk ( float r2000, float d2000 );
-
-void palSlaS2tp ( float ra, float dec, float raz, float decz,
- float *xi, float *eta, int *j );
-
-float palSlaSep ( float a1, float b1, float a2, float b2 );
-
-float palSlaSepv ( float v1[3], float v2[3] );
-
-void palSlaSmat ( int n, float *a, float *y, float *d, int *jf, int *iw );
-
-void palSlaSubet ( double rc, double dc, double eq,
- double *rm, double *dm );
-
-void palSlaSupgal ( double dsl, double dsb, double *dl, double *db );
-
-void palSlaSvd ( int m, int n, int mp, int np,
- double *a, double *w, double *v, double *work,
- int *jstat );
-
-void palSlaSvdcov ( int n, int np, int nc,
- double *w, double *v, double *work, double *cvm );
-
-void palSlaSvdsol ( int m, int n, int mp, int np,
- double *b, double *u, double *w, double *v,
- double *work, double *x );
-
-void palSlaTp2s ( float xi, float eta, float raz, float decz,
- float *ra, float *dec );
-
-void palSlaTp2v ( float xi, float eta, float v0[3], float v[3] );
-
-void palSlaTps2c ( float xi, float eta, float ra, float dec,
- float *raz1, float *decz1,
- float *raz2, float *decz2, int *n );
-
-void palSlaTpv2c ( float xi, float eta, float v[3],
- float v01[3], float v02[3], int *n );
-
-void palSlaUe2el ( double u[], int jformr,
- int *jform, double *epoch, double *orbinc,
- double *anode, double *perih, double *aorq, double *e,
- double *aorl, double *dm, int *jstat );
-
-void palSlaUe2pv ( double date, double u[], double pv[], int *jstat );
-
-void palSlaUnpcd ( double disco, double *x, double *y );
-
-void palSlaV2tp ( float v[3], float v0[3], float *xi, float *eta, int *j );
-
-float palSlaVdv ( float va[3], float vb[3] );
-
-void palSlaVn ( float v[3], float uv[3], float *vm );
-
-void palSlaVxv ( float va[3], float vb[3], float vc[3] );
-
-void palSlaXy2xy ( double x1, double y1, double coeffs[6],
- double *x2, double *y2 );
-
-double palSlaZd ( double ha, double dec, double phi );
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/ast-5.3-1/pcdmap.c b/ast-5.3-1/pcdmap.c
deleted file mode 100644
index 54e41aa..0000000
--- a/ast-5.3-1/pcdmap.c
+++ /dev/null
@@ -1,3193 +0,0 @@
-/*
-*class++
-* Name:
-* PcdMap
-
-* Purpose:
-* Apply 2-dimensional pincushion/barrel distortion.
-
-* Constructor Function:
-c astPcdMap
-f AST_PCDMAP
-
-* Description:
-* A PcdMap is a non-linear Mapping which transforms 2-dimensional
-* positions to correct for the radial distortion introduced by some
-* cameras and telescopes. This can take the form either of pincushion
-* or barrel distortion, and is characterized by a single distortion
-* coefficient.
-*
-* A PcdMap is specified by giving this distortion coefficient and the
-* coordinates of the centre of the radial distortion. The forward
-* transformation of a PcdMap applies the distortion:
-*
-* RD = R * ( 1 + C * R * R )
-*
-* where R is the undistorted radial distance from the distortion
-* centre (specified by attribute PcdCen), RD is the radial distance
-* from the same centre in the presence of distortion, and C is the
-* distortion coefficient (given by attribute Disco).
-*
-* The inverse transformation of a PcdMap removes the distortion
-* produced by the forward transformation. The expression used to derive
-* R from RD is an approximate inverse of the expression above.
-
-* Inheritance:
-* The PcdMap class inherits from the Mapping class.
-
-* Attributes:
-* In addition to those attributes common to all Mappings, every
-* PcdMap also has the following attributes:
-*
-* - Disco: PcdMap pincushion/barrel distortion coefficient
-* - PcdCen(axis): Centre coordinates of pincushion/barrel distortion
-
-* Functions:
-c The PcdMap class does not define any new functions beyond those
-f The PcdMap class does not define any new routines beyond those
-* which are applicable to all Mappings.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David Berry (Starlink)
-
-* History:
-* 18-MAY-1999 (DSB):
-* Original version.
-* 25-OCT-1999 (DSB):
-* Fixed memory leak in MapMerge.
-* 8-JAN-2003 (DSB):
-* Changed private InitVtab method to protected astInitPcdMapVtab
-* method.
-* 23-AUG-2006 (DSB):
-* Override astEqual.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS PcdMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory management facilities */
-#include "globals.h" /* Thread-safe global data access */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "unitmap.h" /* Unit mappings */
-#include "zoommap.h" /* Zoom mappings */
-#include "permmap.h" /* Axis permutations */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-#include "channel.h" /* I/O channels */
-#include "pcdmap.h" /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->GetAttrib_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(PcdMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(PcdMap,Class_Init)
-#define class_vtab astGLOBAL(PcdMap,Class_Vtab)
-#define getattrib_buff astGLOBAL(PcdMap,GetAttrib_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-static char getattrib_buff[ 101 ];
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstPcdMapVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstPcdMap *astPcdMapId_( double, const double [2], const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static double GetDisco( AstPcdMap *, int * );
-static double GetPcdCen( AstPcdMap *, int, int * );
-static int CanMerge( AstMapping *, AstMapping *, int, int, int * );
-static int CanSwap( AstMapping *, AstMapping *, int, int, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestDisco( AstPcdMap *, int * );
-static int TestPcdCen( AstPcdMap *, int, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void ClearDisco( AstPcdMap *, int * );
-static void ClearPcdCen( AstPcdMap *, int, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void PcdPerm( AstMapping **, int *, int, int * );
-static void PcdZoom( AstMapping **, int *, int, int * );
-static void PermGet( AstPermMap *, int **, int **, double **, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetDisco( AstPcdMap *, double, int * );
-static void SetPcdCen( AstPcdMap *, int, double, int * );
-
-/* Function Macros */
-/* =============== */
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
-compare bad values directory because of the danger of floating point
-exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/*
-*
-* Name:
-* MAKE_CLEAR
-
-* Purpose:
-* Implement a method to clear a single value in a multi-valued attribute.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "pcdmap.h"
-* MAKE_CLEAR(attr,component,assign,nval)
-
-* Class Membership:
-* Defined by the PcdMap class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Clear<Attribute>( AstPcdMap *this, int axis )
-*
-* and an external interface function of the form:
-*
-* void astClear<Attribute>_( AstPcdMap *this, int axis )
-*
-* which implement a method for clearing a single value in a specified
-* multi-valued attribute for an axis of a PcdMap.
-
-* Parameters:
-* attr
-* The name of the attribute to be cleared, as it appears in the function
-* name (e.g. PcdCen in "astClearPcdCen").
-* component
-* The name of the class structure component that holds the attribute
-* value.
-* assign
-* An expression that evaluates to the value to assign to the component
-* to clear its value.
-* nval
-* Specifies the number of values in the multi-valued attribute. The
-* "axis" values supplied to the created function should be in the
-* range zero to (nval - 1).
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attr,component,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attr( AstPcdMap *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Validate the axis index. */ \
- if( axis < 0 || axis >= nval ){ \
- astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
- #attr " - it should be in the range 1 to %d.", status, \
- "astClear" #attr, astGetClass( this ), \
- axis + 1, nval ); \
-\
-/* Assign the "clear" value. */ \
- } else { \
- this->component[ axis ] = (assign); \
- } \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astClear##attr##_( AstPcdMap *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
- (**astMEMBER(this,PcdMap,Clear##attr))( this, axis, status ); \
-}
-
-
-/*
-*
-* Name:
-* MAKE_GET
-
-* Purpose:
-* Implement a method to get a single value in a multi-valued attribute.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "pcdmap.h"
-* MAKE_GET(attr,type,bad_value,assign,nval)
-
-* Class Membership:
-* Defined by the PcdMap class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static <Type> Get<Attribute>( AstPcdMap *this, int axis )
-*
-* and an external interface function of the form:
-*
-* <Type> astGet<Attribute>_( AstPcdMap *this, int axis )
-*
-* which implement a method for getting a single value from a specified
-* multi-valued attribute for an axis of a PcdMap.
-
-* Parameters:
-* attr
-* The name of the attribute whose value is to be obtained, as it
-* appears in the function name (e.g. PcdCen in "astGetPcdCen").
-* type
-* The C type of the attribute.
-* bad_value
-* A constant value to return if the global error status is set, or if
-* the function fails.
-* assign
-* An expression that evaluates to the value to be returned. This can
-* use the string "axis" to represent the zero-based value index.
-* nval
-* Specifies the number of values in the multi-valued attribute. The
-* "axis" values supplied to the created function should be in the
-* range zero to (nval - 1).
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_GET(attr,type,bad_value,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static type Get##attr( AstPcdMap *this, int axis, int *status ) { \
- type result; /* Result to be returned */ \
-\
-/* Initialise */ \
- result = (bad_value); \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* Validate the axis index. */ \
- if( axis < 0 || axis >= nval ){ \
- astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
- #attr " - it should be in the range 1 to %d.", status, \
- "astGet" #attr, astGetClass( this ), \
- axis + 1, nval ); \
-\
-/* Assign the result value. */ \
- } else { \
- result = (assign); \
- } \
-\
-/* Check for errors and clear the result if necessary. */ \
- if ( !astOK ) result = (bad_value); \
-\
-/* Return the result. */ \
- return result; \
-} \
-/* External interface. */ \
-/* ------------------- */ \
-type astGet##attr##_( AstPcdMap *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return (bad_value); \
-\
-/* Invoke the required method via the virtual function table. */ \
- return (**astMEMBER(this,PcdMap,Get##attr))( this, axis, status ); \
-}
-
-/*
-*
-* Name:
-* MAKE_SET
-
-* Purpose:
-* Implement a method to set a single value in a multi-valued attribute.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "pcdmap.h"
-* MAKE_SET(attr,type,component,assign,nval)
-
-* Class Membership:
-* Defined by the PcdMap class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Set<Attribute>( AstPcdMap *this, int axis, <Type> value )
-*
-* and an external interface function of the form:
-*
-* void astSet<Attribute>_( AstPcdMap *this, int axis, <Type> value )
-*
-* which implement a method for setting a single value in a specified
-* multi-valued attribute for a PcdMap.
-
-* Parameters:
-* attr
-* The name of the attribute to be set, as it appears in the function
-* name (e.g. PcdCen in "astSetPcdCen").
-* type
-* The C type of the attribute.
-* component
-* The name of the class structure component that holds the attribute
-* value.
-* assign
-* An expression that evaluates to the value to be assigned to the
-* component.
-* nval
-* Specifies the number of values in the multi-valued attribute. The
-* "axis" values supplied to the created function should be in the
-* range zero to (nval - 1).
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attr,type,component,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attr( AstPcdMap *this, int axis, type value, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Validate the axis index. */ \
- if( axis < 0 || axis >= nval ){ \
- astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
- #attr " - it should be in the range 1 to %d.", status, \
- "astSet" #attr, astGetClass( this ), \
- axis + 1, nval ); \
-\
-/* Store the new value in the structure component. */ \
- } else { \
- this->component[ axis ] = (assign); \
- } \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astSet##attr##_( AstPcdMap *this, int axis, type value, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
- (**astMEMBER(this,PcdMap,Set##attr))( this, axis, value, status ); \
-}
-
-/*
-*
-* Name:
-* MAKE_TEST
-
-* Purpose:
-* Implement a method to test if a single value has been set in a
-* multi-valued attribute.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "pcdmap.h"
-* MAKE_TEST(attr,assign,nval)
-
-* Class Membership:
-* Defined by the PcdMap class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static int Test<Attribute>( AstPcdMap *this, int axis )
-*
-* and an external interface function of the form:
-*
-* int astTest<Attribute>_( AstPcdMap *this, int axis )
-*
-* which implement a method for testing if a single value in a specified
-* multi-valued attribute has been set for a class.
-
-* Parameters:
-* attr
-* The name of the attribute to be tested, as it appears in the function
-* name (e.g. PcdCen in "astTestPcdCen").
-* assign
-* An expression that evaluates to 0 or 1, to be used as the returned
-* value. This can use the string "axis" to represent the zero-based
-* index of the value within the attribute.
-* nval
-* Specifies the number of values in the multi-valued attribute. The
-* "axis" values supplied to the created function should be in the
-* range zero to (nval - 1).
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_TEST(attr,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static int Test##attr( AstPcdMap *this, int axis, int *status ) { \
- int result; /* Value to return */ \
-\
-/* Initialise */ \
- result = 0; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-\
-/* Validate the axis index. */ \
- if( axis < 0 || axis >= nval ){ \
- astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
- #attr " - it should be in the range 1 to %d.", status, \
- "astTest" #attr, astGetClass( this ), \
- axis + 1, nval ); \
-\
-/* Assign the result value. */ \
- } else { \
- result = (assign); \
- } \
-\
-/* Check for errors and clear the result if necessary. */ \
- if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
- return result; \
-} \
-/* External interface. */ \
-/* ------------------- */ \
-int astTest##attr##_( AstPcdMap *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return 0; \
-\
-/* Invoke the required method via the virtual function table. */ \
- return (**astMEMBER(this,PcdMap,Test##attr))( this, axis, status ); \
-}
-
-/* Member functions. */
-/* ================= */
-static int CanMerge( AstMapping *map1, AstMapping *map2, int inv1, int inv2, int *status ){
-/*
-*
-* Name:
-* CanMerge
-
-* Purpose:
-* Checks if two Mappings can be merged.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pcdmap.h"
-* int CanMerge( AstMapping *map1, AstMapping *map2, int inv1, int inv2, int *status )
-
-* Class Membership:
-* PcdMap internal utility function.
-
-* Description:
-* This function checks the two supplied Mappings to see if they
-* can be merged into a single Mapping. One of the pair must be a PcdMap.
-
-* Parameters:
-* map1
-* A pointer to the first mapping.
-* map2
-* A pointer to the second mapping.
-* inv1
-* The invert flag to use with the first mapping.
-* inv2
-* The invert flag to use with the second mapping.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* 1 if the Mappings can be merged, zero otherwise.
-
-*/
-
- AstPcdMap *pcd; /* Pointer to PcdMap Mapping */
- AstPcdMap *pcd2; /* Pointer to second PcdMap Mapping */
- AstMapping *nopcd; /* Pointer to non-PcdMap Mapping */
- const char *class1; /* Pointer to map1 class string */
- const char *class2; /* Pointer to map2 class string */
- const char *nopcd_class; /* Pointer to non-PcdMap class string */
- int invert[ 2 ]; /* Original invert flags */
- int ret; /* Returned flag */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Initialise */
- ret = 0;
- pcd = NULL;
- nopcd = NULL;
-
-/* Temporarily set the Invert attributes of both Mappings to the supplied
- values. */
- invert[ 0 ] = astGetInvert( map1 );
- astSetInvert( map1, inv1 );
-
- invert[ 1 ] = astGetInvert( map2 );
- astSetInvert( map2, inv2 );
-
-/* Get the classes of the two mappings. */
- class1 = astGetClass( map1 );
- class2 = astGetClass( map2 );
- if( astOK ){
-
-/* Get pointers to the PcdMap and the non-PcdMap Mapping. */
- if( !strcmp( class1, "PcdMap" ) ){
- pcd = (AstPcdMap * ) map1;
- nopcd = map2;
- nopcd_class = class2;
- } else if( !strcmp( class2, "PcdMap" ) ){
- nopcd = map1;
- pcd = (AstPcdMap * ) map2;
- nopcd_class = class1;
- } else {
- nopcd_class = "unusable";
- }
-
-/* The Mappings can merge if the other Mapping is a UnitMap. */
- if( !strcmp( nopcd_class, "UnitMap" ) ){
- ret = 1;
-
-/* They can also merge if the other Mapping is also a PcdMap, and is the
- invert of the other. */
- } else if( !strcmp( nopcd_class, "PcdMap" ) ){
- pcd2 = (AstPcdMap *) nopcd;
-
-/* Check the distortion coefficients are equal. */
- if( EQUAL( astGetDisco( pcd ), astGetDisco( pcd2 ) ) ){
-
-/* Check the axis 0 centres are equal. */
- if( EQUAL( astGetPcdCen( pcd, 0 ), astGetPcdCen( pcd2, 0 ) ) ){
-
-/* Check the axis 1 centres are equal. */
- if( EQUAL( astGetPcdCen( pcd, 1 ), astGetPcdCen( pcd2, 1 ) ) ){
-
-/* Check the Invert flags are different. */
- if( astGetInvert( pcd ) != astGetInvert( pcd2 ) ){
-
-/* If the Mappings have passed all these tests, they can be merged. */
- ret = 1;
- }
- }
- }
- }
- }
- }
-
-/* Re-instate the original settings of the Invert attributes for the
- supplied Mappings. */
- astSetInvert( map1, invert[ 0 ] );
- astSetInvert( map2, invert[ 1 ] );
-
-/* Return the answer. */
- return astOK ? ret : 0;
-}
-
-static int CanSwap( AstMapping *map1, AstMapping *map2, int inv1, int inv2, int *status ){
-/*
-* Name:
-* CanSwap
-
-* Purpose:
-* Determine if two Mappings could be swapped.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pcdmap.h"
-* int CanSwap( AstMapping *map1, AstMapping *map2, int inv1, int inv2, int *status )
-
-* Class Membership:
-* PcdMap member function
-
-* Description:
-* This function returns a flag indicating if the pair of supplied
-* Mappings could be replaced by an equivalent pair of Mappings from the
-* same classes as the supplied pair, but in reversed order. Each pair
-* of Mappings is considered to be compounded in series. The supplied
-* Mappings are not changed in any way.
-
-* Parameters:
-* map1
-* The Mapping to be applied first.
-* map2
-* The Mapping to be applied second.
-* inv1
-* The invert flag to use with map1. A value of zero causes the forward
-* mapping to be used, and a non-zero value causes the inverse
-* mapping to be used.
-* inv2
-* The invert flag to use with map2.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* 1 if the Mappings could be swapped, 0 otherwise.
-
-* Notes:
-* - One of the supplied pair of Mappings must be a PcdMap.
-* - A value of 0 is returned if the two Mappings could be merged into
-* a single Mapping.
-* - A value of 0 is returned if an error has already occurred, or if
-* this function should fail for any reason.
-*/
-
-/* Local Variables: */
- AstMapping *nopcd; /* Pointer to non-PcdMap Mapping */
- const char *class1; /* Pointer to map1 class string */
- const char *class2; /* Pointer to map2 class string */
- const char *nopcd_class; /* Pointer to non-PcdMap class string */
- double *consts; /* Pointer to constants array */
- int *inperm; /* Pointer to input axis permutation array */
- int *outperm; /* Pointer to output axis permutation array */
- int invert[ 2 ]; /* Original invert flags */
- int nin; /* No. of input coordinates for the PermMap */
- int nout; /* No. of output coordinates for the PermMap */
- int pcdinv; /* Use inverted PcdMap? */
- int ret; /* Returned flag */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Initialise */
- ret = 0;
-
-/* Temporarily set the Invert attributes of both Mappings to the supplied
- values. */
- invert[ 0 ] = astGetInvert( map1 );
- astSetInvert( map1, inv1 );
-
- invert[ 1 ] = astGetInvert( map2 );
- astSetInvert( map2, inv2 );
-
-/* Get the classes of the two mappings. */
- class1 = astGetClass( map1 );
- class2 = astGetClass( map2 );
- if( astOK ){
-
-/* Get a pointer to the non-PcdMap Mapping. */
- if( !strcmp( class1, "PcdMap" ) ){
- nopcd = map2;
- nopcd_class = class2;
- pcdinv = inv1;
- } else {
- nopcd = map1;
- nopcd_class = class1;
- pcdinv = inv2;
- }
-
-/* If the other Mapping is a ZoomMap, the Mappings can be swapped. */
- if( !strcmp( nopcd_class, "ZoomMap" ) ){
- ret = 1;
-
-/* If it is a PermMap, the Mappings can be swapped so long as the PermMap
- simply swaps the two axes. */
- } else if( !strcmp( nopcd_class, "PermMap" ) ){
-
-/* Get the number of input and output coordinates for the PermMap. */
- nin = astGetNin( nopcd );
- nout = astGetNout( nopcd );
-
-/* Must be 2-dimensional to swap. */
- if( nin == 2 && nout == 2 ) {
-
-/* Get the axis permutation arrays and constants array for the PermMap. */
- PermGet( (AstPermMap *) nopcd, &outperm, &inperm, &consts, status );
- if( astOK ) {
-
-/* If the PermMap simply swaps the 2 axes (in both direction) we can
- swap the two mappings. */
- ret = ( outperm[0] == 1 && outperm[1] == 0 &&
- inperm[0] == 1 && inperm[1] == 0 );
-
-/* Free the axis permutation and constants arrays. */
- outperm = (int *) astFree( (void *) outperm );
- inperm = (int *) astFree( (void *) inperm );
- consts = (double *) astFree( (void *) consts );
- }
- }
- }
- }
-
-/* Re-instate the original settings of the Invert attributes for the
- supplied Mappings. */
- astSetInvert( map1, invert[ 0 ] );
- astSetInvert( map2, invert[ 1 ] );
-
-/* Return the answer. */
- return astOK ? ret : 0;
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a PcdMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pcdmap.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* PcdMap member function (over-rides the astClearAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* PcdMap, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the PcdMap.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstPcdMap *this; /* Pointer to the PcdMap structure */
- int axis; /* Axis number */
- int len; /* Length of attrib string */
- int nc; /* No. characters read by astSscanf */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the PcdMap structure. */
- this = (AstPcdMap *) this_object;
-
-/* Obtain the length of the "attrib" string. */
- len = strlen( attrib );
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* PcdCen(axis). */
-/* ------------- */
- if ( nc = 0,
- ( 1 == astSscanf( attrib, "pcdcen(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearPcdCen( this, axis - 1 );
-
-/* PcdCen. */
-/* ------- */
- } else if ( !strcmp( attrib, "pcdcen" ) ) {
- astClearPcdCen( this, 0 );
- astClearPcdCen( this, 1 );
-
-/* Disco. */
-/* ------ */
- } else if ( !strcmp( attrib, "disco" ) ) {
- astClearDisco( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two PcdMaps are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pcdmap.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* PcdMap member function (over-rides the astEqual protected
-* method inherited from the astMapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two PcdMaps are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Object (a PcdMap).
-* that
-* Pointer to the second Object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the PcdMaps are equivalent, zero otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstPcdMap *that;
- AstPcdMap *this;
- int result;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain pointers to the two PcdMap structures. */
- this = (AstPcdMap *) this_object;
- that = (AstPcdMap *) that_object;
-
-/* Check the second object is a PcdMap. We know the first is a
- PcdMap since we have arrived at this implementation of the virtual
- function. */
- if( astIsAPcdMap( that ) ) {
-
-/* Check the Invert flags for the two PcdMaps are equal. */
- if( astGetInvert( this ) == astGetInvert( that ) ) {
-
-/* Check all the attributes are equal. */
- if( astEQUAL( this->pcdcen[0], that->pcdcen[0] ) &&
- astEQUAL( this->pcdcen[1], that->pcdcen[1] ) &&
- astEQUAL( this->disco, that->disco ) ) {
- result = 1;
- }
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a PcdMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pcdmap.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* PcdMap member function (over-rides the protected astGetAttrib
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a PcdMap, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the PcdMap.
-* attrib
-* Pointer to a null terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the PcdMap, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the PcdMap. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstPcdMap *this; /* Pointer to the PcdMap structure */
- const char *result; /* Pointer value to return */
- double dval; /* Double attribute value */
- int axis; /* Axis number */
- int len; /* Length of attrib string */
- int nc; /* No. characters read by astSscanf */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the PcdMap structure. */
- this = (AstPcdMap *) this_object;
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null terminated string in an appropriate
- format. Set "result" to point at the result string. */
-
-/* Disco. */
-/* ------ */
- if ( !strcmp( attrib, "disco" ) ) {
- dval = astGetDisco( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* PcdCen(axis). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "pcdcen(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- dval = astGetPcdCen( this, axis - 1 );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* PcdCen. */
-/* ------- */
- } else if ( !strcmp( attrib, "pcdcen" ) ) {
- dval = astGetPcdCen( this, 0 );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-}
-
-void astInitPcdMapVtab_( AstPcdMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitPcdMapVtab
-
-* Purpose:
-* Initialise a virtual function table for a PcdMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "pcdmap.h"
-* void astInitPcdMapVtab( AstPcdMapVtab *vtab, const char *name )
-
-* Class Membership:
-* PcdMap vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the PcdMap class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAPcdMap) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
- vtab->ClearDisco = ClearDisco;
- vtab->SetDisco = SetDisco;
- vtab->GetDisco = GetDisco;
- vtab->TestDisco = TestDisco;
- vtab->ClearPcdCen = ClearPcdCen;
- vtab->SetPcdCen = SetPcdCen;
- vtab->GetPcdCen = GetPcdCen;
- vtab->TestPcdCen = TestPcdCen;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
- object->Equal = Equal;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- mapping->MapMerge = MapMerge;
-
-/* Declare the class dump function.*/
- astSetDump( vtab, Dump, "PcdMap", "Apply pincushion distortion" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a PcdMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* PcdMap method (over-rides the protected astMapMerge method
-* inherited from the Mapping class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated PcdMap in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated PcdMap with a Mapping which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated PcdMap which is to be merged with
-* its neighbours. This should be a cloned copy of the PcdMap
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* PcdMap it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated PcdMap resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstMapping **maplt; /* New mappings list pointer */
- AstMapping *map2; /* First mapping to check */
- AstMapping *newmap; /* Pointer to replacement Mapping */
- AstMapping *mc[2]; /* Copies of supplied Mappings to swap */
- AstMapping *smc0; /* Simplied Mapping */
- AstMapping *smc1; /* Simplied Mapping */
- const char *class1; /* Pointer to first Mapping class string */
- const char *class2; /* Pointer to second Mapping class string */
- const char *nclass; /* Pointer to neighbouring Mapping class */
- int i1; /* Index of first PcdMap to merge */
- int i2; /* Index of last PcdMap to merge */
- int i; /* Loop counter */
- int ic[2]; /* Copies of supplied invert flags to swap */
- int invert; /* Should the inverted Mapping be used? */
- int *invlt; /* New invert flags list pointer */
- int neighbour; /* Index of Mapping with which to swap */
- int nin; /* Number of coordinates for PcdMap */
- int nmapt; /* No. of Mappings in list */
- int nstep1; /* No. of Mappings backwards to next mergable Mapping */
- int nstep2; /* No. of Mappings forward to next mergable Mapping */
- int result; /* Result value to return */
- int swaphi; /* Can PcdMap be swapped with higher neighbour? */
- int swaplo; /* Can PcdMap be swapped with lower neighbour? */
-
-/* Initialise. */
- result = -1;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- neighbour = 0;
- i1 = 0;
- i2 = 0;
-
-/* Get the number of axes for the PcdMap. */
- nin = astGetNin( ( *map_list )[ where ] );
-
-/* First of all, see if the PcdMap can be replaced by a simpler Mapping,
- without reference to the neighbouring Mappings in the list. */
-/* ======================================================================*/
-/* If the distortion coefficient in the PcdMap is zero, the PcdMap can be
- replaced by a UnitMap. */
- if( EQUAL( astGetDisco( (AstPcdMap *) ( *map_list )[ where ] ), 0.0 ) ){
-
-/* Annul the PcdMap pointer in the list and replace it with a UnitMap
- pointer, and indicate that the forward transformation of the returned
- UnitMap should be used. */
- (void) astAnnul( ( *map_list )[ where ] );
- ( *map_list )[ where ] = (AstMapping *) astUnitMap( 2, "", status );
- ( *invert_list )[ where ] = 0;
-
-/* Return the index of the first modified element. */
- result = where;
-
-/* If the PcdMap itself could not be simplified, see if it can be merged
- with the Mappings on either side of it in the list. */
- } else {
-
-/* Store the classes of the neighbouring Mappings in the list. */
- class1 = ( where > 0 ) ? astGetClass( ( *map_list )[ where - 1 ] ) : NULL;
- class2 = ( where < *nmap - 1 ) ? astGetClass( ( *map_list )[ where + 1 ] ) : NULL;
-
-/* In series. */
-/* ========== */
- if ( series ) {
-
-/* We first look to see if the PcdMap can be merged with one of its
- neighbours, resulting in a reduction of one in the number of Mappings
- in the list. A PcdMap can only merge directly with its own inverse, or
- a UnitMap. */
- if( class1 && CanMerge( ( *map_list )[ where - 1 ],
- ( *map_list )[ where ],
- ( *invert_list )[ where - 1 ],
- ( *invert_list )[ where ], status ) ){
- nclass = class1;
- i1 = where - 1;
- i2 = where;
-
- } else if( class2 && CanMerge( ( *map_list )[ where ],
- ( *map_list )[ where + 1 ],
- ( *invert_list )[ where ],
- ( *invert_list )[ where + 1 ], status ) ){
- nclass = class2;
- i1 = where;
- i2 = where + 1;
-
- } else {
- nclass = NULL;
- }
-
-/* If the PcdMap can merge with one of its neighbours, create the merged
- Mapping. */
- if( nclass ){
-
-/* If the neighbour is a PcdMap, it must be the inverse of the nominated
- Mapping, and so they merge to form a UnitMap. */
- if( !strcmp( nclass, "PcdMap" ) ){
- newmap = (AstMapping *) astUnitMap( 2, "", status );
- invert = 0;
-
-/* If the neighbour is a UnitMap, they merge to form a clone of the
- nominated PcdMap. */
- } else {
- newmap = (AstMapping *) astClone( ( *map_list )[ where ] );
- invert = ( *invert_list )[ where ];
- }
-
-/* If succesfull... */
- if( astOK ){
-
-/* Annul the first of the two Mappings, and replace it with the merged
- Mapping. Also set the invert flag. */
- (void) astAnnul( ( *map_list )[ i1 ] );
- ( *map_list )[ i1 ] = newmap;
- ( *invert_list )[ i1 ] = invert;
-
-/* Annul the second of the two Mappings, and shuffle down the rest of the
- list to fill the gap. */
- (void) astAnnul( ( *map_list )[ i2 ] );
- for ( i = i2 + 1; i < *nmap; i++ ) {
- ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
- ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
- }
-
-/* Clear the vacated element at the end. */
- ( *map_list )[ *nmap - 1 ] = NULL;
- ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
- modified element. */
- ( *nmap )--;
- result = i1;
-
- }
-
-/* If the PcdMap could not merge directly with either of its neighbours,
- we consider whether it would be worthwhile to swap the PcdMap with
- either of its neighbours. This can only be done for certain classes
- of Mapping (ZoomMaps & some PermMaps), and will usually require both
- Mappings to be modified (unless they are commutative). The advantage of
- swapping the order of the Mappings is that it may result in the PcdMap
- being adjacent to a Mapping with which it can merge directly on the next
- invocation of this function, thus reducing the number of Mappings
- in the list. */
- } else {
-
-/* Set a flag if we could swap the PcdMap with its higher neighbour. */
- if( where + 1 < *nmap ){
- swaphi = CanSwap( ( *map_list )[ where ],
- ( *map_list )[ where + 1 ],
- ( *invert_list )[ where ],
- ( *invert_list )[ where + 1 ], status );
- } else {
- swaphi = 0;
- }
-
-/* If so, step through each of the Mappings which follow the PcdMap,
- looking for a Mapping with which the PcdMap could merge directly. Stop
- when such a Mapping is found, or if a Mapping is found with which the
- PcdMap could definitely not swap. Note the number of Mappings which
- separate the PcdMap from the Mapping with which it could merge (if
- any). */
- nstep2 = -1;
- if( swaphi ){
- for( i2 = where + 1; i2 < *nmap; i2++ ){
-
-/* See if we may be able to merge with this Mapping. If so, note the number
- of steps between the two Mappings and leave the loop. */
- nclass = astGetClass( ( *map_list )[ i2 ] );
-
- if( !strcmp( nclass, "UnitMap" ) ||
- !strcmp( nclass, "PcdMap" ) ){
- nstep2 = i2 - where - 1;
- break;
- }
-
-/* If there is no chance that we can swap with this Mapping, leave the loop
- with -1 for the number of steps to indicate that no merging is possible.
- PcdMaps can swap with ZoomMaps and some PermMaps. */
- if( strcmp( nclass, "ZoomMap" ) &&
- strcmp( nclass, "PermMap" ) ) {
- break;
- }
-
- }
-
- }
-
-/* Do the same working forward from the PcdMap towards the start of the map
- list. */
- if( where > 0 ){
- swaplo = CanSwap( ( *map_list )[ where - 1 ],
- ( *map_list )[ where ],
- ( *invert_list )[ where - 1 ],
- ( *invert_list )[ where ], status );
- } else {
- swaplo = 0;
- }
-
- nstep1 = -1;
- if( swaplo ){
- for( i1 = where - 1; i1 >= 0; i1-- ){
-
- nclass = astGetClass( ( *map_list )[ i1 ] );
-
- if( !strcmp( nclass, "UnitMap" ) ||
- !strcmp( nclass, "PcdMap" ) ){
- nstep1 = where - 1 - i1;
- break;
- }
-
- if( strcmp( nclass, "ZoomMap" ) &&
- strcmp( nclass, "PermMap" ) ) {
- break;
- }
-
- }
-
- }
-
-/* Choose which neighbour to swap with so that the PcdMap moves towards the
- nearest Mapping with which it can merge. */
- if( nstep1 != -1 && ( nstep2 == -1 || nstep2 > nstep1 ) ){
- nclass = class1;
- i1 = where - 1;
- i2 = where;
- neighbour = i1;
- } else if( nstep2 != -1 ){
- nclass = class2;
- i1 = where;
- i2 = where + 1;
- neighbour = i2;
- } else {
- nclass = NULL;
- }
-
-/* If there is a target Mapping in the list with which the PcdMap could
- merge, replace the supplied Mappings with swapped Mappings to bring a
- PcdMap closer to the target Mapping. */
- if( nclass ){
-
-/* It is possible that the neighbouring Mapping with which we are about to
- swap could also merge with the target Mapping. When the neighbouring
- Mapping is reconsidered it may well swap the pair back to put itself nearer
- the target Mapping. We need to be careful not to end up in an infinite loop
- in which the pair of neighbouring Mappings are constantly swapped backwards
- and forwards as each attempts to put itself closer to the target Mapping.
- To prevent this, we only swap the pair of Mappings if the neighbouring
- Mapping could not itself merge with the target Mapping. Check to see
- if this is the case by attempting to merge the neighbouring Mapping with
- the target Mapping. */
- map2 = astClone( (*map_list)[ neighbour ] );
- nmapt = *nmap - neighbour;
- maplt = *map_list + neighbour;
- invlt = *invert_list + neighbour;
- result = astMapMerge( map2, 0, series, &nmapt, &maplt, &invlt );
- map2 = astAnnul( map2 );
-
-/* If the above call produced a change in the Mapping list, return the
- remaining number of mappings.. */
- if( result != -1 ){
- *nmap = nmapt + neighbour;
-
-/* Otherwise, if there was no change in the mapping list, swap the
- Mappings. */
- } else {
-
- if( !strcmp( nclass, "ZoomMap" ) ){
- PcdZoom( (*map_list) + i1, (*invert_list) + i1, where - i1, status );
-
- } else if( !strcmp( nclass, "PermMap" ) ){
- PcdPerm( (*map_list) + i1, (*invert_list) + i1, where - i1, status );
- }
-
-/* Store the index of the first modified Mapping. */
- result = i1;
- }
-
-/* If there is no Mapping available for merging, it may still be
- advantageous to swap with a neighbour because the swapped Mapping may
- be simpler than the original Mappings. */
- } else if( swaphi || swaplo ) {
-
-/* Try swapping with each possible neighbour in turn. */
- for( i = 0; i < 2; i++ ) {
-
-/* Set up the class and pointers for the mappings to be swapped, first
- the lower neighbour, then the upper neighbour. */
- if( i == 0 && swaplo ){
- nclass = class1;
- i1 = where - 1;
- i2 = where;
-
- } else if( i == 1 && swaphi ){
- nclass = class2;
- i1 = where;
- i2 = where + 1;
-
- } else {
- nclass = NULL;
- }
-
-/* If we have a Mapping to swap with... */
- if( nclass ) {
-
-/* Take copies of the Mapping and Invert flag arrays so we do not change
- the supplied values. */
- mc[ 0 ] = (AstMapping *) astCopy( ( (*map_list) + i1 )[0] );
- mc[ 1 ] = (AstMapping *) astCopy( ( (*map_list) + i1 )[1] );
- ic[ 0 ] = ( (*invert_list) + i1 )[0];
- ic[ 1 ] = ( (*invert_list) + i1 )[1];
-
-/* Swap these Mappings. */
- if( !strcmp( nclass, "ZoomMap" ) ){
- PcdZoom( mc, ic, where - i1, status );
- } else if( !strcmp( nclass, "PermMap" ) ){
- PcdPerm( mc, ic, where - i1, status );
- }
-
-/* If neither of the swapped Mappings can be simplified further, then there
- is no point in swapping the Mappings, so just annul the map copies. */
- smc0 = astSimplify( mc[0] );
- smc1 = astSimplify( mc[1] );
-
- if( astGetClass( smc0 ) == astGetClass( mc[0] ) &&
- astGetClass( smc1 ) == astGetClass( mc[1] ) ) {
-
- mc[ 0 ] = (AstMapping *) astAnnul( mc[ 0 ] );
- mc[ 1 ] = (AstMapping *) astAnnul( mc[ 1 ] );
-
-/* If one or both of the swapped Mappings could be simplified, then annul
- the supplied Mappings and return the swapped mappings, storing the index
- of the first modified Mapping. */
- } else {
- (void ) astAnnul( ( (*map_list) + i1 )[0] );
- (void ) astAnnul( ( (*map_list) + i1 )[1] );
-
- ( (*map_list) + i1 )[0] = mc[ 0 ];
- ( (*map_list) + i1 )[1] = mc[ 1 ];
-
- ( (*invert_list) + i1 )[0] = ic[ 0 ];
- ( (*invert_list) + i1 )[1] = ic[ 1 ];
-
- result = i1;
- break;
- }
-
-/* Annul the simplied Mappings */
- smc0 = astAnnul( smc0 );
- smc1 = astAnnul( smc1 );
-
- }
- }
- }
- }
-
-/* In parallel. */
-/* ============ */
-/* PcdMaps cannot combine in parallel with any other Mappings. */
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static void PermGet( AstPermMap *map, int **outperm, int **inperm,
- double **consts, int *status ){
-/*
-* Name:
-* PermGet
-
-* Purpose:
-* Get the axis permutation and constants array for a PermMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pcdmap.h"
-* void PermGet( AstPermMap *map, int **outperm, int **inperm,
-* double **const, int *status )
-
-* Class Membership:
-* PcdMap member function
-
-* Description:
-* This function returns axis permutation and constants arrays which can
-* be used to create a PermMap which is equivalent to the supplied PermMap.
-
-* Parameters:
-* map
-* The PermMap.
-* outperm
-* An address at which to return a popinter to an array of ints
-* holding the output axis permutation array. The array should be
-* released using astFree when no longer needed.
-* inperm
-* An address at which to return a popinter to an array of ints
-* holding the input axis permutation array. The array should be
-* released using astFree when no longer needed.
-* consts
-* An address at which to return a popinter to an array of doubles
-* holding the constants array. The array should be released using
-* astFree when no longer needed.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - NULL pointers are returned if an error has already occurred, or if
-* this function should fail for any reason.
-*/
-
-/* Local Variables: */
- AstPointSet *pset1; /* PointSet holding input positions for PermMap */
- AstPointSet *pset2; /* PointSet holding output positions for PermMap */
- double **ptr1; /* Pointer to pset1 data */
- double **ptr2; /* Pointer to pset2 data */
- double *cnst; /* Pointer to constants array */
- double cn; /* Potential new constant value */
- double ip; /* Potential output axis index */
- double op; /* Potential input axis index */
- int *inprm; /* Pointer to input axis permutation array */
- int *outprm; /* Pointer to output axis permutation array */
- int i; /* Axis count */
- int nc; /* Number of constants stored so far */
- int nin; /* No. of input coordinates for the PermMap */
- int nout; /* No. of output coordinates for the PermMap */
-
-/* Initialise. */
- if( outperm ) *outperm = NULL;
- if( inperm ) *inperm = NULL;
- if( consts ) *consts = NULL;
-
-/* Check the global error status and the supplied pointers. */
- if ( !astOK || !outperm || !inperm || !consts ) return;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- nc = 0;
-
-/* Get the number of input and output axes for the supplied PermMap. */
- nin = astGetNin( map );
- nout = astGetNout( map );
-
-/* Allocate the memory for the returned arrays. */
- outprm = (int *) astMalloc( sizeof( int )* (size_t) nout );
- inprm = (int *) astMalloc( sizeof( int )* (size_t) nin );
- cnst = (double *) astMalloc( sizeof( double )* (size_t) ( nout + nin ) );
-
-/* Returned the pointers to these arrays.*/
- *outperm = outprm;
- *inperm = inprm;
- *consts = cnst;
-
-/* Create two PointSets, each holding two points, which can be used for
- input and output positions with the PermMap. */
- pset1 = astPointSet( 2, nin, "", status );
- pset2 = astPointSet( 2, nout, "", status );
-
-/* Set up the two input positions to be [0,1,2...] and [-1,-1,-1,...]. The
- first position is used to enumerate the axes, and the second is used to
- check for constant axis values. */
- ptr1 = astGetPoints( pset1 );
- if( astOK ){
- for( i = 0; i < nin; i++ ){
- ptr1[ i ][ 0 ] = ( double ) i;
- ptr1[ i ][ 1 ] = -1.0;
- }
- }
-
-/* Use the PermMap to transform these positions in the forward direction. */
- (void) astTransform( map, pset1, 1, pset2 );
-
-/* Look at the mapped positions to determine the output axis permutation
- array. */
- ptr2 = astGetPoints( pset2 );
- if( astOK ){
-
-/* No constant axis valeus found yet. */
- nc = 0;
-
-/* Do each output axis. */
- for( i = 0; i < nout; i++ ){
-
-/* If the output axis value is copied from an input axis value, the index
- of the appropriate input axis will be in the mapped first position. */
- op = ptr2[ i ][ 0 ];
-
-/* If the output axis value is assigned a constant value, the result of
- mapping the two different input axis values will be the same. */
- cn = ptr2[ i ][ 1 ];
- if( op == cn ) {
-
-/* We have found another constant. Store it in the constants array, and
- store the index of the constant in the output axis permutation array. */
- cnst[ nc ] = cn;
- outprm[ i ] = -( nc + 1 );
- nc++;
-
-/* If the output axis values are different, then the output axis value
- must be copied from the input axis value. */
- } else {
- outprm[ i ] = (int) ( op + 0.5 );
- }
- }
- }
-
-/* Now do the same thing to determine the input permutation array. */
- if( astOK ){
- for( i = 0; i < nout; i++ ){
- ptr2[ i ][ 0 ] = ( double ) i;
- ptr2[ i ][ 1 ] = -1.0;
- }
- }
-
- (void) astTransform( map, pset2, 0, pset1 );
-
- if( astOK ){
-
- for( i = 0; i < nin; i++ ){
-
- ip = ptr1[ i ][ 0 ];
- cn = ptr1[ i ][ 1 ];
- if( ip == cn ) {
-
- cnst[ nc ] = cn;
- inprm[ i ] = -( nc + 1 );
- nc++;
-
- } else {
- inprm[ i ] = (int) ( ip + 0.5 );
- }
- }
- }
-
-/* Annul the PointSets. */
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
-
-/* If an error has occurred, attempt to free the returned arrays. */
- if( !astOK ) {
- *outperm = (int *) astFree( (void *) *outperm );
- *inperm = (int *) astFree( (void *) *inperm );
- *consts = (double *) astFree( (void *) *consts );
- }
-
-/* Return. */
- return;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a PcdMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pcdmap.h"
-* void SetAttrib( AstObject *this, const char *setting, int *status )
-
-* Class Membership:
-* PcdMap member function (over-rides the astSetAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function assigns an attribute value for a PcdMap, the
-* attribute and its value being specified by means of a string of
-* the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in
-* lower case with no white space present. The value to the right
-* of the "=" should be a suitable textual representation of the
-* value to be assigned and this will be interpreted according to
-* the attribute's data type. White space surrounding the value is
-* only significant for string attributes.
-
-* Parameters:
-* this
-* Pointer to the PcdMap.
-* setting
-* Pointer to a null terminated string specifying the new attribute
-* value.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstPcdMap *this; /* Pointer to the PcdMap structure */
- double dval; /* Double attribute value */
- int axis; /* Index for the axis */
- int len; /* Length of setting string */
- int nc; /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the PcdMap structure. */
- this = (AstPcdMap *) this_object;
-
-/* Obtain the length of the setting string. */
- len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
- the setting string and extract the attribute value (or an offset to
- it in the case of string values). In each case, use the value set
- in "nc" to check that the entire string was matched. Once a value
- has been obtained, use the appropriate method to set it. */
-
-/* Disco. */
-/* ------ */
- if ( nc = 0,
- ( 1 == astSscanf( setting, "disco= %lg %n", &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetDisco( this, dval );
-
-/* PcdCen(axis). */
-/* ------------ */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "pcdcen(%d)= %lg %n",
- &axis, &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetPcdCen( this, axis - 1, dval );
-
-/* PcdCen. */
-/* ------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "pcdcen= %lg %n", &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetPcdCen( this, 0, dval );
- astSetPcdCen( this, 1, dval );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a PcdMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pcdmap.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* PcdMap member function (over-rides the astTestAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a PcdMap's attributes.
-
-* Parameters:
-* this
-* Pointer to the PcdMap.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstPcdMap *this; /* Pointer to the PcdMap structure */
- int axis; /* Axis number */
- int len; /* Length of attrib string */
- int nc; /* No. characters read by astSscanf */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the PcdMap structure. */
- this = (AstPcdMap *) this_object;
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* Disco. */
-/* ------ */
- if ( !strcmp( attrib, "disco" ) ) {
- result = astTestDisco( this );
-
-/* PcdCen. */
-/* ------- */
- } else if ( !strcmp( attrib, "pcdcen" ) ) {
- result = astTestPcdCen( this, 0 );
-
-/* PcdCen(axis). */
-/* ---------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "pcdcen(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestPcdCen( this, axis - 1 );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a PcdMap to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pcdmap.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* PcdMap member function (over-rides the astTransform protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function takes a PcdMap and a set of points encapsulated in a
-* PointSet and transforms the points so as to map them into the
-* required window.
-
-* Parameters:
-* this
-* Pointer to the PcdMap.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of coordinates for the PcdMap being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstPointSet *result; /* Pointer to output PointSet */
- AstPcdMap *map; /* Pointer to PcdMap to be applied */
- double **ptr_in; /* Pointer to input coordinate data */
- double **ptr_out; /* Pointer to output coordinate data */
- double *axin_0; /* Pointer to next input axis 0 value */
- double *axin_1; /* Pointer to next input axis 1 value */
- double *axout_0; /* Pointer to next output axis 0 value */
- double *axout_1; /* Pointer to next output axis 1 value */
- int npoint; /* Number of points */
- int point; /* Loop counter for points */
- double dx; /* Undistorted X increment from centre */
- double dy; /* Undistorted Y increment from centre */
- double dxp; /* Distorted X increment from centre */
- double dyp; /* Distorted Y increment from centre */
- double disco; /* Distortion coefficient */
- double cen0; /* Centre of distortion on axis 0 */
- double cen1; /* Centre of distortion on axis 1 */
- double cr2; /* Constant */
- double a; /* Constant */
- double cr2a2; /* Constant */
- double f; /* Expansion factor */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the PcdMap. */
- map = (AstPcdMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Mapping class. This function validates
- all arguments and generates an output PointSet if necessary, but does not
- actually transform any coordinate values. */
- result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
- PointSet and obtain pointers for accessing the input and output coordinate
- values. */
- npoint = astGetNpoint( in );
- ptr_in = astGetPoints( in );
- ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse mapping, according to the
- direction specified and whether the mapping has been inverted. */
- if ( astGetInvert( map ) ) forward = !forward;
-
-/* Get the distortion coefficient and centre. */
- disco = astGetDisco( map );
- cen0 = astGetPcdCen( map, 0 );
- cen1 = astGetPcdCen( map, 1 );
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
- if( astOK ){
-
-/* Store pointers to the first input and output values on both axes. */
- axin_0 = ptr_in[ 0 ];
- axin_1 = ptr_in[ 1 ];
- axout_0 = ptr_out[ 0 ];
- axout_1 = ptr_out[ 1 ];
-
-/* First deal with forward transformations. */
- if( forward ){
-
- for( point = 0; point < npoint; point++ ){
- if( *axin_0 != AST__BAD && *axin_1 != AST__BAD ){
- dx = ( *axin_0 - cen0 );
- dy = ( *axin_1 - cen1 );
- f = 1.0 + disco*( dx*dx + dy*dy );
- dxp = dx*f;
- dyp = dy*f;
- *(axout_0++) = dxp + cen0;
- *(axout_1++) = dyp + cen1;
-
- } else {
- *(axout_0++) = AST__BAD;
- *(axout_1++) = AST__BAD;
- }
- axin_0++;
- axin_1++;
- }
-
-/* Now deal with inverse transformations. */
- } else {
-
- for( point = 0; point < npoint; point++ ){
- if( *axin_0 != AST__BAD && *axin_1 != AST__BAD ){
- dxp = ( *axin_0 - cen0 );
- dyp = ( *axin_1 - cen1 );
-
- cr2 = disco*( dxp*dxp + dyp*dyp );
- a = ( 2.0*cr2 + 1.0 )/( 3.0*cr2 + 1.0 );
- cr2a2 = cr2*a*a;
- f = ( 2.0*cr2a2*a + 1.0 )/( 3.0*cr2a2 + 1.0 );
-
- dx = dxp*f;
- dy = dyp*f;
-
-/* The above approximate inverse is taken from SLA_UNPCD. If more accuracy
-c is needed, the following code can be uncommented to iterate to a better
-c solution.
-c
-c fl = 1.0 + disco*( dx*dx + dy*dy );
-c dx = dxp/fl;
-c dy = dyp/fl;
-c
-c df = fabs( fl );
-c while( df > fabs( fl*1.0E-6 ) ){
-c f = 1.0 + disco*( dx*dx + dy*dy );
-c df = fabs( f - fl );
-c fl = f;
-c
-c dx = dxp/f;
-c dy = dyp/f;
-c }
-*/
- *(axout_0++) = dx + cen0;
- *(axout_1++) = dy + cen1;
-
- } else {
- *(axout_0++) = AST__BAD;
- *(axout_1++) = AST__BAD;
- }
- axin_0++;
- axin_1++;
- }
-
- }
-
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-static void PcdZoom( AstMapping **maps, int *inverts, int ipc, int *status ){
-/*
-* Name:
-* PcdZoom
-
-* Purpose:
-* Swap a PcdMap and a ZoomMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pcdmap.h"
-* void PcdZoom( AstMapping **maps, int *inverts, int ipc, int *status )
-
-* Class Membership:
-* PcdMap member function
-
-* Description:
-* A list of two Mappings is supplied containing a PcdMap and a
-* ZoomMap. These Mappings are annulled, and replaced with
-* another pair of Mappings consisting of a PcdMap and a ZoomMap
-* in the opposite order. These Mappings are chosen so that their
-* combined effect is the same as the original pair of Mappings.
-
-* Parameters:
-* maps
-* A pointer to an array of two Mapping pointers.
-* inverts
-* A pointer to an array of two invert flags.
-* ipc
-* The index within "maps" of the PcdMap.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstPcdMap *pm2; /* Pointer to the returned PcdMap */
- AstPcdMap *pm; /* Pointer to the supplied PcdMap */
- AstZoomMap *zm2; /* Pointer to the returned ZoomMap */
- AstZoomMap *zm; /* Pointer to the supplied ZoomMap */
- double cen[2]; /* New distortion centre */
- double disc; /* Distortion coeff. for returned PcdMap */
- double disco; /* Distortion coeff. for supplied PcdMap */
- double xcen; /* Axis 0 centre for supplied PcdMap */
- double ycen; /* Axis 1 centre for supplied PcdMap */
- double zoom; /* Zoom factor for supplied ZoomMap */
- int old_pinv; /* Invert value for the supplied PcdMap */
- int old_zinv; /* Invert value for the supplied ZoomMap */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Store pointers to the supplied PcdMap and the ZoomMap. */
- pm = (AstPcdMap *) maps[ ipc ];
- zm = (AstZoomMap *) maps[ 1 - ipc ];
-
-/* Temporarily set the Invert attribute of the supplied Mappings to the
- supplied values. */
- old_pinv = astGetInvert( pm );
- astSetInvert( pm, inverts[ ipc ] );
-
- old_zinv = astGetInvert( zm );
- astSetInvert( zm, inverts[ 1 - ipc ] );
-
-/* Get the zoom factor from the ZoomMap. */
- zoom = astGetZoom( zm );
-
-/* Get the distortion coefficient from the PcdMap. */
- disco = astGetDisco( pm );
-
-/* Get the distortion centre from the PcdMap. */
- xcen = astGetPcdCen( pm, 0 );
- ycen = astGetPcdCen( pm, 1 );
-
-/* Re-instate the original value of the Invert attributes of the supplied
- Mappings. */
- astSetInvert( pm, old_pinv );
- astSetInvert( zm, old_zinv );
-
-/* Create the returned ZoomMap. */
- zm2 = astZoomMap( 2, zoom, "", status );
-
-/* Find the attributes of the returned PcdMap. If the PCD map is applied
- first... */
- if( ipc == 0 ) {
- cen[ 0 ] = xcen*zoom;
- cen[ 1 ] = ycen*zoom;
- disc = disco/(zoom*zoom);
-
-/* If the PCD map is applied second... */
- } else {
- cen[ 0 ] = xcen/zoom;
- cen[ 1 ] = ycen/zoom;
- disc = disco*zoom*zoom;
- }
-
-/* Create the returned PcdMap. */
- pm2 = astPcdMap( disc, cen, "", status );
- if( inverts[ ipc ] ) astInvert( pm2 );
-
-/* Replace the supplied Mappings with the ones created above, swapping the
- order. */
- if( astOK ){
- (void) astAnnul( pm );
- (void) astAnnul( zm );
-
- maps[ 1 - ipc ] = (AstMapping *) pm2;
- inverts[ 1 - ipc ] = inverts[ ipc ];
-
- maps[ ipc ] = (AstMapping *) zm2;
- inverts[ ipc ] = 0;
-
- }
-
-/* Return. */
- return;
-}
-
-static void PcdPerm( AstMapping **maps, int *inverts, int ipc, int *status ){
-/*
-* Name:
-* PcdPerm
-
-* Purpose:
-* Swap a PcdMap and a PermMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pcdmap.h"
-* void PcdPerm( AstMapping **maps, int *inverts, int ipc, int *status )
-
-* Class Membership:
-* PcdMap member function
-
-* Description:
-* A list of two Mappings is supplied containing a PcdMap and a
-* PermMap. These Mappings are annulled, and replaced with
-* another pair of Mappings consisting of a PcdMap and a PermMap
-* in the opposite order. These Mappings are chosen so that their
-* combined effect is the same as the original pair of Mappings.
-
-* Parameters:
-* maps
-* A pointer to an array of two Mapping pointers.
-* inverts
-* A pointer to an array of two invert flags.
-* ipc
-* The index within "maps" of the PcdMap.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - It should have been checked previously that the PermMap simply
-* swaps axes 0 and 1. This is the only sort of PermMap which can be
-* used here.
-
-*/
-
- AstPermMap *rm; /* Pointer to the supplied PermMap */
- AstPermMap *rm2; /* Pointer to the returned PermMap */
- AstPcdMap *pm; /* Pointer to the supplied PcdMap */
- AstPcdMap *pm2; /* Pointer to the returned PcdMap */
- double cen[2]; /* Centre for new PcdMap */
- double disco; /* Distortion coeff. for supplied PcdMap */
- double xcen; /* Axis 0 centre for supplied PcdMap */
- double ycen; /* Axis 1 centre for supplied PcdMap */
- int old_rinv; /* Invert value for the supplied PermMap */
- int old_pinv; /* Invert value for the supplied PcdMap */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Store pointers to the supplied PcdMap and the PermMap. */
- pm = (AstPcdMap *) maps[ ipc ];
- rm = (AstPermMap *) maps[ 1 - ipc ];
-
-/* Temporarily set the Invert attribute of the supplied Mappings to the
- supplied values. */
- old_pinv = astGetInvert( pm );
- astSetInvert( pm, inverts[ ipc ] );
-
- old_rinv = astGetInvert( rm );
- astSetInvert( rm, inverts[ 1 - ipc ] );
-
-/* Get the distortion coefficient from the PcdMap. */
- disco = astGetDisco( pm );
-
-/* Get the distortion centre from the PcdMap. */
- xcen = astGetPcdCen( pm, 0 );
- ycen = astGetPcdCen( pm, 1 );
-
-/* Re-instate the original value of the Invert attributes of the supplied
- Mappings. */
- astSetInvert( pm, old_pinv );
- astSetInvert( rm, old_rinv );
-
-/* Create the returned PermMap (unchanged). */
- rm2 = astClone( rm );
-
-/* Create the returned PcdMap. */
- cen[ 0 ] = ycen;
- cen[ 1 ] = xcen;
- pm2 = astPcdMap( disco, cen, "", status );
- if( inverts[ ipc ] ) astInvert( pm2 );
-
-/* Replace the supplied Mappings with the ones created above, swapping the
- order. */
- if( astOK ){
- (void) astAnnul( pm );
- (void) astAnnul( rm );
-
- old_pinv = inverts[ ipc ];
-
- maps[ ipc ] = (AstMapping *) rm2;
- inverts[ ipc ] = inverts[ 1 - ipc ];
-
- maps[ 1 - ipc ] = (AstMapping *) pm2;
- inverts[ 1 - ipc ] = old_pinv;
- }
-
-/* Return. */
- return;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-/*
-*att++
-* Name:
-* Disco
-
-* Purpose:
-* PcdMap pincushion/barrel distortion coefficient.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Double precision.
-
-* Description:
-* This attribute specifies the pincushion/barrel distortion coefficient
-* used by a PcdMap. This coefficient is set when the PcdMap is created,
-* but may later be modified. If the attribute is cleared, its default
-* value is zero, which gives no distortion. For pincushion distortion,
-* the value should be positive. For barrel distortion, it should be
-* negative.
-*
-* Note that the forward transformation of a PcdMap applies the
-* distortion specified by this attribute and the inverse
-* transformation removes this distortion. If the PcdMap is inverted
-c (e.g. using astInvert), then the forward transformation will
-f (e.g. using AST_INVERT), then the forward transformation will
-* remove the distortion and the inverse transformation will apply
-* it. The distortion itself will still be given by the same value of
-* Disco.
-
-* Applicability:
-* PcdMap
-* All PcdMaps have this attribute.
-
-*att--
-*/
-/* This ia a double value with a value of AST__BAD when undefined but
- yielding a default of 0.0. */
-astMAKE_CLEAR(PcdMap,Disco,disco,AST__BAD)
-astMAKE_GET(PcdMap,Disco,double,0.0,( ( this->disco == AST__BAD ) ?
- 0.0 : this->disco ))
-astMAKE_SET(PcdMap,Disco,double,disco,value)
-astMAKE_TEST(PcdMap,Disco,( this->disco != AST__BAD ))
-
-
-/*
-*att++
-* Name:
-* PcdCen(axis)
-
-* Purpose:
-* Centre coordinates of pincushion/barrel distortion.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute specifies the centre of the pincushion/barrel
-* distortion implemented by a PcdMap. It takes a separate value for
-* each axis of the PcdMap so that, for instance, the settings
-* "PcdCen(1)=345.0,PcdCen(2)=-104.4" specify that the pincushion
-* distortion is centred at positions of 345.0 and -104.4 on axes 1 and 2
-* respectively. This attribute is set when a PcdMap is created, but may
-* later be modified. If the attribute is cleared, the default value for
-* both axes is zero.
-
-* Applicability:
-* PcdMap
-* All PcdMaps have this attribute.
-
-* Notes:
-* - If no axis is specified, (e.g. "PcdCen" instead of
-* "PcdCen(2)"), then a "set" or "clear" operation will affect
-* the attribute value of both axes, while a "get" or "test"
-* operation will use just the PcdCen(1) value.
-*att--
-*/
-/* The centre of the distortion. AST__BAD is stored if no value has been
- supplied, resulting in default values of zero being used. */
-MAKE_CLEAR(PcdCen,pcdcen,AST__BAD,2)
-MAKE_SET(PcdCen,double,pcdcen,value,2)
-MAKE_TEST(PcdCen,( this->pcdcen[axis] != AST__BAD ),2)
-MAKE_GET(PcdCen,double,0.0,(( this->pcdcen[axis] == AST__BAD ) ?
- 0.0 : this->pcdcen[axis] ),2)
-
-/* Copy constructor. */
-/* ----------------- */
-/* No copy constructor is needed, as a byte-by-byte copy suffices. */
-
-/* Destructor. */
-/* ----------- */
-/* No destructor is needed as no memory, etc. needs freeing. */
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for PcdMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the PcdMap class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the PcdMap whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstPcdMap *this; /* Pointer to the PcdMap structure */
- double dval; /* Attribute value */
- int set; /* Is a value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the PcdMap structure. */
- this = (AstPcdMap *) this_object;
-
-/* Write out values representing the instance variables for the
- PcdMap class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* PcdCen(0). */
-/* ---------- */
- set = TestPcdCen( this, 0, status );
- dval = set ? GetPcdCen( this, 0, status ) : astGetPcdCen( this, 0 );
- astWriteDouble( channel, "PcdCn0", set, 1, dval, "Distortion centre on first axis" );
-
-/* PcdCen(1). */
-/* ---------- */
- set = TestPcdCen( this, 1, status );
- dval = set ? GetPcdCen( this, 1, status ) : astGetPcdCen( this, 1 );
- astWriteDouble( channel, "PcdCn1", set, 1, dval, "Distortion centre on second axis" );
-
-/* Disco. */
-/* ------ */
- set = TestDisco( this, status );
- dval = set ? GetDisco( this, status ) : astGetDisco( this );
- astWriteDouble( channel, "Disco", set, 1, dval, "Distortion coefficient" );
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAPcdMap and astCheckPcdMap functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(PcdMap,Mapping)
-astMAKE_CHECK(PcdMap)
-
-AstPcdMap *astPcdMap_( double disco, const double pcdcen[2],
- const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astPcdMap
-f AST_PCDMAP
-
-* Purpose:
-* Create a PcdMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "pcdmap.h"
-c AstPcdMap *astPcdMap( double disco, const double pcdcen[2],
-c const char *options, ... )
-f RESULT = AST_PCDMAP( DISCO, PCDCEN, OPTIONS, STATUS )
-
-* Class Membership:
-* PcdMap constructor.
-
-* Description:
-* This function creates a new PcdMap and optionally initialises its
-* attributes.
-*
-* A PcdMap is a non-linear Mapping which transforms 2-dimensional
-* positions to correct for the radial distortion introduced by some
-* cameras and telescopes. This can take the form either of pincushion
-* or barrel distortion, and is characterized by a single distortion
-* coefficient.
-*
-* A PcdMap is specified by giving this distortion coefficient and the
-* coordinates of the centre of the radial distortion. The forward
-* transformation of a PcdMap applies the distortion:
-*
-* RD = R * ( 1 + C * R * R )
-*
-* where R is the undistorted radial distance from the distortion
-* centre (specified by attribute PcdCen), RD is the radial distance
-* from the same centre in the presence of distortion, and C is the
-* distortion coefficient (given by attribute Disco).
-*
-* The inverse transformation of a PcdMap removes the distortion
-* produced by the forward transformation. The expression used to derive
-* R from RD is an approximate inverse of the expression above, obtained
-* from two iterations of the Newton-Raphson method. The mismatch between
-* the forward and inverse expressions is negligible for astrometric
-* applications (to reach 1 milliarcsec at the edge of the Anglo-Australian
-* Telescope triplet or a Schmidt field would require field diameters of
-* 2.4 and 42 degrees respectively).
-*
-c If a PcdMap is inverted (e.g. using astInvert) then the roles of the
-f If a PcdMap is inverted (e.g. using AST_INVERT) then the roles of the
-* forward and inverse transformations are reversed; the forward
-* transformation will remove the distortion, and the inverse
-* transformation will apply it.
-
-* Parameters:
-c disco
-f DISCO = DOUBLE PRECISION (Given)
-* The distortion coefficient. Negative values give barrel
-* distortion, positive values give pincushion distortion, and
-* zero gives no distortion.
-c pcdcen
-f PCDCEN( 2 ) = DOUBLE PRECISION (Given)
-c A 2-element array containing the coordinates of the centre of the
-f An array containing the coordinates of the centre of the
-* distortion.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new PcdMap. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new PcdMap. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astPcdMap()
-f AST_PCDMAP = INTEGER
-* A pointer to the new PcdMap.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-
-* Status Handling:
-* The protected interface to this function includes an extra
-* parameter at the end of the parameter list descirbed above. This
-* parameter is a pointer to the integer inherited status
-* variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstPcdMap *new; /* Pointer to new PcdMap */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the PcdMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitPcdMap( NULL, sizeof( AstPcdMap ), !class_init, &class_vtab,
- "PcdMap", disco, pcdcen );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new PcdMap's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new PcdMap. */
- return new;
-}
-
-AstPcdMap *astPcdMapId_( double disco, const double pcdcen[2],
- const char *options, ... ) {
-/*
-* Name:
-* astPcdMapId_
-
-* Purpose:
-* Create a PcdMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pcdmap.h"
-* AstPcdMap *astPcdMapId_( double disco, const double pcdcen[2],
-* const char *options, ... )
-
-* Class Membership:
-* PcdMap constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astPcdMap constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astPcdMap_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astPcdMap_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astPcdMap_.
-
-* Returned Value:
-* The ID value associated with the new PcdMap.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstPcdMap *new; /* Pointer to new PcdMap */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the PcdMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitPcdMap( NULL, sizeof( AstPcdMap ), !class_init, &class_vtab,
- "PcdMap", disco, pcdcen );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new PcdMap's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new PcdMap. */
- return astMakeId( new );
-}
-
-AstPcdMap *astInitPcdMap_( void *mem, size_t size, int init,
- AstPcdMapVtab *vtab, const char *name,
- double disco, const double pcdcen[2], int *status ){
-/*
-*+
-* Name:
-* astInitPcdMap
-
-* Purpose:
-* Initialise a PcdMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "pcdmap.h"
-* AstPcdMap *astInitPcdMap( void *mem, size_t size, int init,
-* AstPcdMapVtab *vtab, const char *name,
-* double disco, const double pcdcen[2] )
-
-* Class Membership:
-* PcdMap initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new PcdMap object. It allocates memory (if necessary) to accommodate
-* the PcdMap plus any additional data associated with the derived class.
-* It then initialises a PcdMap structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a PcdMap at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the PcdMap is to be initialised.
-* This must be of sufficient size to accommodate the PcdMap data
-* (sizeof(PcdMap)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the PcdMap (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the PcdMap
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the PcdMap's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new PcdMap.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-* disco
-* Distortion coefficient.
-* pcdcen
-* Distortion centre.
-
-* Returned Value:
-* A pointer to the new PcdMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstPcdMap *new; /* Pointer to new PcdMap */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitPcdMapVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Initialise a Mapping structure (the parent class) as the first component
- within the PcdMap structure, allocating memory if necessary. Specify that
- the Mapping should be defined in both the forward and inverse directions. */
- new = (AstPcdMap *) astInitMapping( mem, size, 0,
- (AstMappingVtab *) vtab, name,
- 2, 2, 1, 1 );
-
- if ( astOK ) {
-
-/* Initialise the PcdMap data. */
-/* ---------------------------- */
-/* Store the shift and scale for each axis. */
- new->pcdcen[0] = pcdcen[0];
- new->pcdcen[1] = pcdcen[1];
- new->disco = disco;
-
-/* If an error occurred, clean up by deleting the new PcdMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new PcdMap. */
- return new;
-}
-
-AstPcdMap *astLoadPcdMap_( void *mem, size_t size,
- AstPcdMapVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadPcdMap
-
-* Purpose:
-* Load a PcdMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "pcdmap.h"
-* AstPcdMap *astLoadPcdMap( void *mem, size_t size,
-* AstPcdMapVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* PcdMap loader.
-
-* Description:
-* This function is provided to load a new PcdMap using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* PcdMap structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a PcdMap at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the PcdMap is to be
-* loaded. This must be of sufficient size to accommodate the
-* PcdMap data (sizeof(PcdMap)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the PcdMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the PcdMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstPcdMap) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new PcdMap. If this is NULL, a pointer
-* to the (static) virtual function table for the PcdMap class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "PcdMap" is used instead.
-
-* Returned Value:
-* A pointer to the new PcdMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstPcdMap *new; /* Pointer to the new PcdMap */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this PcdMap. In this case the
- PcdMap belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstPcdMap );
- vtab = &class_vtab;
- name = "PcdMap";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitPcdMapVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built PcdMap. */
- new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "PcdMap" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* PcdCen(0). */
-/* ---------- */
- new->pcdcen[0] = astReadDouble( channel, "pcdcn0", AST__BAD );
- if ( TestPcdCen( new, 0, status ) ) SetPcdCen( new, 0, new->pcdcen[0], status );
-
-/* PcdCen(1). */
-/* ---------- */
- new->pcdcen[1] = astReadDouble( channel, "pcdcn1", AST__BAD );
- if ( TestPcdCen( new, 1, status ) ) SetPcdCen( new, 1, new->pcdcen[1], status );
-
-/* Disco. */
-/* ------ */
- new->disco = astReadDouble( channel, "disco", AST__BAD );
- if ( TestDisco( new, status ) ) SetDisco( new, new->disco, status );
-
-/* If an error occurred, clean up by deleting the new PcdMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new PcdMap pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-
-
-
-
diff --git a/ast-5.3-1/pcdmap.h b/ast-5.3-1/pcdmap.h
deleted file mode 100644
index 4d71301..0000000
--- a/ast-5.3-1/pcdmap.h
+++ /dev/null
@@ -1,357 +0,0 @@
-#if !defined( PCDMAP_INCLUDED ) /* Include this file only once */
-#define PCDMAP_INCLUDED
-/*
-*+
-* Name:
-* pcdmap.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the PcdMap class.
-
-* Invocation:
-* #include "pcdmap.h"
-
-* Description:
-* This include file defines the interface to the PcdMap class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The PcdMap class implements Mappings which perform pincushion
-* distortion.
-
-* Inheritance:
-* The PcdMap class inherits from the Mapping class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* Disco (double)
-* This attribute holds the PcdMap distortion coefficient used by
-* the forward transformation. This coefficient is set when a
-* PcdMap is created, but may later be modified. The default value
-* is zero, which gives no distortion. For pincushion distortion,
-* the supplied value should be positive. For barrel distortion, it
-* should be negative.
-*
-* Note that the forward transformation of a PcdMap applies the
-* distortion corresponding to this attribute, and the inverse
-* transformation removes this distortion. If a PcdMap is inverted
-* (e.g. by using astInvert), then the forward transformation will
-* remove the distortion and the inverse transformation will apply
-* it. The distortion itself will still be given by the same value of
-* Disco.
-* PcdCen(axis)
-* This attribute specifies the centre of a pincushion distortion.
-* It takes a separate value for each axis of the PcdMap so that, for
-* instance, the settings "PcdCen(1)=345.0,PcdCen(2)=-104.4" specify
-* that the pincushion distortion is centred at values of 345.0 and
-* -104.4 on axes 1 and 2 of the PcdMap. The default for both axes is
-* zero.
-
-* Methods Over-Ridden:
-* Public:
-* None.
-*
-* Protected:
-* astClearAttrib
-* Clear an attribute value for a PcdMap.
-* astGetAttrib
-* Get an attribute value for a PcdMap.
-* astSetAttrib
-* Set an attribute value for a PcdMap.
-* astTestAttrib
-* Test if an attribute value has been set for a PcdMap.
-* astTransform
-* Apply a PcdMap to transform a set of points.
-
-* New Methods Defined:
-* Public:
-* None.
-*
-* Protected:
-* astClearDisco
-* Clear the Disco attribute value for a PcdMap.
-* astGetDisco
-* Get the Disco attribute value for a PcdMap.
-* astSetDisco
-* Set the Disco attribute value for a PcdMap.
-* astTestDisco
-* Test if a Disco attribute value has been set for a PcdMap.
-* astClearPcdCen
-* Clear the PcdCen attribute value for a PcdMap.
-* astGetPcdCen
-* Get the PcdCen attribute value for a PcdMap.
-* astSetPcdCen
-* Set the PcdCen attribute value for a PcdMap.
-* astTestPcdCen
-* Test if a PcdCen attribute value has been set for a PcdMap.
-
-* Other Class Functions:
-* Public:
-* astIsAPcdMap
-* Test class membership.
-* astPcdMap
-* Create a PcdMap.
-*
-* Protected:
-* astCheckPcdMap
-* Validate class membership.
-* astInitPcdMap
-* Initialise a PcdMap.
-* astInitPcdMapVtab
-* Initialise the virtual function table for the PcdMap class.
-* astLoadPcdMap
-* Load a PcdMap.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstPcdMap
-* PcdMap object type.
-*
-* Protected:
-* AstPcdMapVtab
-* PcdMap virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 18-MAY-1999 (DSB):
-* Original version.
-* 8-JAN-2003 (DSB):
-* Added protected astInitPcdMapVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* PcdMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstPcdMap {
-
-/* Attributes inherited from the parent class. */
- AstMapping mapping; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- double disco; /* Distortion coefficient */
- double pcdcen[2]; /* Distortion centre */
-
-} AstPcdMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstPcdMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstMappingVtab mapping_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- double (*GetDisco)( AstPcdMap *, int * );
- int (* TestDisco)( AstPcdMap *, int * );
- void (* ClearDisco)( AstPcdMap *, int * );
- void (* SetDisco)( AstPcdMap *, double, int * );
- double (*GetPcdCen)( AstPcdMap *, int, int * );
- int (* TestPcdCen)( AstPcdMap *, int, int * );
- void (* ClearPcdCen)( AstPcdMap *, int, int * );
- void (* SetPcdCen)( AstPcdMap *, int, double, int * );
-} AstPcdMapVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstPcdMapGlobals {
-
-/* Define the thread-specific globals. */
- char GetAttrib_Buff[ 101 ];
- AstPcdMapVtab Class_Vtab;
- int Class_Init;
-} AstPcdMapGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(PcdMap) /* Check class membership */
-astPROTO_ISA(PcdMap) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstPcdMap *astPcdMap_( double, const double [2], const char *, int *, ...);
-#else
-AstPcdMap *astPcdMapId_( double, const double [2], const char *, ... )__attribute__((format(printf,3,4)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstPcdMap *astInitPcdMap_( void *, size_t, int, AstPcdMapVtab *,
- const char *, double, const double [2], int * );
-
-/* Vtab initialiser. */
-void astInitPcdMapVtab_( AstPcdMapVtab *, const char *, int * );
-
-/* Loader. */
-AstPcdMap *astLoadPcdMap_( void *, size_t, AstPcdMapVtab *,
- const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitPcdMapGlobals_( AstPcdMapGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS) /* Protected */
-double astGetDisco_( AstPcdMap *, int * );
-int astTestDisco_( AstPcdMap *, int * );
-void astClearDisco_( AstPcdMap *, int * );
-void astSetDisco_( AstPcdMap *, double, int * );
-double astGetPcdCen_( AstPcdMap *, int, int * );
-int astTestPcdCen_( AstPcdMap *, int, int * );
-void astClearPcdCen_( AstPcdMap *, int, int * );
-void astSetPcdCen_( AstPcdMap *, int, double, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckPcdMap(this) astINVOKE_CHECK(PcdMap,this,0)
-#define astVerifyPcdMap(this) astINVOKE_CHECK(PcdMap,this,1)
-
-/* Test class membership. */
-#define astIsAPcdMap(this) astINVOKE_ISA(PcdMap,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astPcdMap astINVOKE(F,astPcdMap_)
-#else
-#define astPcdMap astINVOKE(F,astPcdMapId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitPcdMap(mem,size,init,vtab,name,disco,pcdcen) \
-astINVOKE(O,astInitPcdMap_(mem,size,init,vtab,name,disco,pcdcen,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitPcdMapVtab(vtab,name) astINVOKE(V,astInitPcdMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadPcdMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadPcdMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckPcdMap to validate PcdMap pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-#define astClearDisco(this) astINVOKE(V,astClearDisco_(astCheckPcdMap(this),STATUS_PTR))
-#define astGetDisco(this) astINVOKE(V,astGetDisco_(astCheckPcdMap(this),STATUS_PTR))
-#define astSetDisco(this,value) \
-astINVOKE(V,astSetDisco_(astCheckPcdMap(this),value,STATUS_PTR))
-#define astTestDisco(this) astINVOKE(V,astTestDisco_(astCheckPcdMap(this),STATUS_PTR))
-
-#define astClearPcdCen(this,axis) \
-astINVOKE(V,astClearPcdCen_(astCheckPcdMap(this),axis,STATUS_PTR))
-#define astGetPcdCen(this,axis) \
-astINVOKE(V,astGetPcdCen_(astCheckPcdMap(this),axis,STATUS_PTR))
-#define astSetPcdCen(this,axis,value) \
-astINVOKE(V,astSetPcdCen_(astCheckPcdMap(this),axis,value,STATUS_PTR))
-#define astTestPcdCen(this,axis) \
-astINVOKE(V,astTestPcdCen_(astCheckPcdMap(this),axis,STATUS_PTR))
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/permmap.c b/ast-5.3-1/permmap.c
deleted file mode 100644
index 595931f..0000000
--- a/ast-5.3-1/permmap.c
+++ /dev/null
@@ -1,3021 +0,0 @@
-/*
-*class++
-* Name:
-* PermMap
-
-* Purpose:
-* Coordinate permutation Mapping.
-
-* Constructor Function:
-c astPermMap
-f AST_PERMMAP
-
-* Description:
-* A PermMap is a Mapping which permutes the order of coordinates,
-* and possibly also changes the number of coordinates, between its
-* input and output.
-*
-* In addition to permuting the coordinate order, a PermMap may
-* also assign constant values to coordinates. This is useful when
-* the number of coordinates is being increased as it allows fixed
-* values to be assigned to any new ones.
-
-* Inheritance:
-* The PermMap class inherits from the Mapping class.
-
-* Attributes:
-* The PermMap class does not define any new attributes beyond
-* those which are applicable to all Mappings.
-
-* Functions:
-c The PermMap class does not define any new functions beyond those
-f The PermMap class does not define any new routines beyond those
-* which are applicable to all Mappings.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 29-FEB-1996 (RFWS):
-* Original version.
-* 26-SEP-1996 (RFWS):
-* Added external interface and I/O facilities.
-* 3-JUN-1997 (RFWS):
-* Over-ride the MapMerge method.
-* 8-JAN-2003 (DSB):
-* Changed private InitVtab method to protected astInitPermMapVtab
-* method.
-* 11-SEP-2003 (DSB):
-* Added methods astGetInPerm and astGetOutPerm.
-* 2-NOV-2004 (DSB):
-* Added method astGetConstants.
-* 14-MAR-2006 (DSB):
-* Override astEqual.
-* 2-MAY-2007 (DSB):
-* Change MapSplit so that it does not try to use the
-* implementation from the parent Mapping class, since this
-* class can do a better job.
-* 11-SEP-2007 (DSB):
-* In MapSplit, check that the permuted axis index is less than the
-* number of axes available. Use AST__BAD otherwise.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS PermMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-#include "unitmap.h" /* Unit Mappings */
-#include "permmap.h" /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(PermMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(PermMap,Class_Init)
-#define class_vtab astGLOBAL(PermMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstPermMapVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstPermMap *astPermMapId_( int, const int [], int, const int [], const double [], const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static double *GetConstants( AstPermMap *, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int *GetInPerm( AstPermMap *, int * );
-static int *GetOutPerm( AstPermMap *, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int NullPerm( AstPermMap *, int, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-
-/* Member functions. */
-/* ================= */
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two PermMaps are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "permmap.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* PermMap member function (over-rides the astEqual protected
-* method inherited from the astMapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two PermMaps are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Object (a PermMap).
-* that
-* Pointer to the second Object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the PermMaps are equivalent, zero otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstPermMap *that;
- AstPermMap *this;
- int *that_inp;
- int *that_outp;
- int *this_inp;
- int *this_outp;
- int i;
- int nin;
- int nout;
- int p1;
- int p2;
- int result;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain pointers to the two PermMap structures. */
- this = (AstPermMap *) this_object;
- that = (AstPermMap *) that_object;
-
-/* Check the second object is a PermMap. We know the first is a
- PermMap since we have arrived at this implementation of the virtual
- function. */
- if( astIsAPermMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
- nin = astGetNin( this );
- nout = astGetNout( this );
- if( astGetNout( that ) == nout && astGetNin( that ) == nin ) {
-
-/* Assume the PermMaps are equivalent. */
- result = 1;
-
-/* Get pointers to the effective inperm and outperm array for each PermMap.
- If the Invert flags of the two PermMaps are not equal, we swap the
- arrays for the second PermMap in order to take account of the relative
- inversion of the second PermMap. */
- if( astGetInvert( this ) != astGetInvert( that ) ) {
- this_inp = this->inperm;
- this_outp = this->outperm;
- that_inp = that->outperm;
- that_outp = that->inperm;
- } else {
- this_inp = this->inperm;
- this_outp = this->outperm;
- that_inp = that->inperm;
- that_outp = that->outperm;
- }
-
-/* Loop round every PermMap input. */
- for( i = 0; i < nin; i++ ) {
-
-/* See what is fed to this input by the inverse transformation. A zero or
- positive integer "p" value indicates that the input is fed from the
- output with the corresponding index. A negative integer "p" value means
- the input is fed a constant value stored at index (-p-1) in the
- associated constants array. */
- p1 = this_inp ? this_inp[ i ] : i;
- p2 = that_inp ? that_inp[ i ] : i;
-
-/* If the "p" values differ, we may have evidence that the PermMaps are
- not equivalent. */
- if( p1 != p2 ) {
-
-/* If either "p" value is zero or positive, then the PermMaps are
- definitely different since input "i" is fed from differing outputs, or
- one is fed from an input and the other is fed a constant. */
- if( p1 >= 0 || p2 >= 0 ) {
- result = 0;
- break;
-
-/* If both "p" values are negative, then both inputs are fed a constant
- value. The PermMaps differ if these constants differ. */
- } else if( this->constant[ -p1 - 1 ] !=
- that->constant[ -p2 - 1 ] ) {
- result = 0;
- break;
- }
- }
- }
-
-/* If we have not yet discovered any evidence that the PermMaps differ,
- go on to check each output in the same way that we have just checked the
- inputs. */
- if( result ) {
- for( i = 0; i < nout; i++ ) {
- p1 = this_outp ? this_outp[ i ] : i;
- p2 = that_outp ? that_outp[ i ] : i;
- if( p1 != p2 ) {
- if( p1 >= 0 || p2 >= 0 ) {
- result = 0;
- break;
- } else if( this->constant[ -p1 - 1 ] !=
- that->constant[ -p2 - 1 ] ) {
- result = 0;
- break;
- }
- }
- }
- }
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static double *GetConstants( AstPermMap *this, int *status ){
-/*
-*+
-* Name:
-* astGetConstants
-
-* Purpose:
-* Return a pointer to the constants array of a PermMap.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "permmap.h"
-* double *astGetConstants( AstPermMap *this )
-
-* Class Membership:
-* PermMap method
-
-* Description:
-* This function returns a pointer to a dynamically allocated array
-* holding a copy of the constants array supplied when the PermMap was
-* created.
-*
-* Negative values in the arrays returned by the astGetInPerm and
-* astGetOutPerm methods can be used as indices into the constants
-* array returned by this method, if they are first negated and then
-* decrement by one. Thus an inperm value of -3 refers to element 2 of
-* the constants array.
-
-* Parameters:
-* this
-* Pointer to the PermMap.
-
-* Returned Value:
-* A pointer to a dynamically allocated array holding a copy of the
-* constants array. The pointer should be freed using astFree when it is
-* no longer needed. NULL will be returned if the PermMap has no
-* constants.
-
-* Notes:
-* - A value of NULL will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- double *result; /* Pointer to the returned array */
-
-/* Initialise the returned result. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Allocate memory and put a copy of the InPerm array in it. */
- result = (double *) astStore( NULL, this->constant, astSizeOf( this->constant ) );
-
-/* Return the result. */
- return result;
-}
-
-static int *GetInPerm( AstPermMap *this, int *status ){
-/*
-* Name:
-* GetInPerm
-
-* Purpose:
-* Return a pointer to the InPerm array of a PermMap.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "permmap.h"
-* int *astGetInPerm( AstPermMap *this, int *status )
-
-* Class Membership:
-* PermMap method
-
-* Description:
-* This function returns a pointer to a dynamically allocated array
-* holding a copy of the InPerm array supplied when thre PermMap was
-* created.
-
-* Parameters:
-* this
-* Pointer to the PermMap.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated array holding a copy of the
-* InPerm array. The pointer should be freed using astFree when it is
-* no longer needed. The number of elements in the array will be given
-* by the value of the Nin attribute. The value in element "i" is the
-* zero-based index of the output axis which provides values for input
-* "i" when the inverse transformation is used. If the value in element
-* "i" is less than zero, then input "i" is fed a constant value. This
-* constant value is stored in the "constants" array (see astGetConstants)
-* at an index equal to the absolute value of inperm[i], minus 1. Thus
-* if element 3 of the array returned by this function has value -2,
-* then input axis 3 is fed the value held in constants[1]. If the
-* value of element "i" of the returned inperm array is greater than
-* or equal to the number of output axes, then input "i" will be fed
-* the constant AST__BAD.
-
-* Notes:
-* - A value of NULL will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- int i; /* Loop count */
- int nin; /* Number of inputs. */
- int *result; /* Pointer to the returned array */
-
-/* Initialise the returned result. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If no inperm array is stored, every input is derived from the
- corresponding output. Therefore, return an array holding 0 to Nin-1. */
- if( !this->inperm ) {
- nin = astGetNin( this );
- result = (int *) astMalloc( sizeof( int ) * (size_t) nin );
- if( astOK ) for( i = 0; i < nin; i++ ) result[ i ] = i;
-
-/* Otherwise, allocate memoy and put a copy of the InPerm array in it. */
- } else {
- result = (int *) astStore( NULL, this->inperm,
- sizeof( int ) * (size_t) astGetNin( this ) );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int *GetOutPerm( AstPermMap *this, int *status ){
-/*
-* Name:
-* GetOutPerm
-
-* Purpose:
-* Return a pointer to the OutPerm array of a PermMap.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "permmap.h"
-* int *astGetOutPerm( AstPermMap *this, int *status )
-
-* Class Membership:
-* PermMap method
-
-* Description:
-* This function returns a pointer to a dynamically allocated array
-* holding a copy of the OutPerm array supplied when thre PermMap was
-* created.
-
-* Parameters:
-* this
-* Pointer to the PermMap.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated array holding a copy of the
-* OutPerm array. The pointer should be freed using astFree when it is
-* no longer needed. The number of elements in the array will be given
-* by the value of the Nout attribute. The value in element "i" is the
-* zero-based index of the input axis which provides values for output
-* "i" when the forward transformation is used. If the value in element
-* "i" is less than zero, then output "i" is fed a constant value. This
-* constant value is stored in the "constants" array (see astGetConstants)
-* at an index equal to the absolute value of outperm[i], minus 1. Thus
-* if element 3 of the array returned by this function has value -2,
-* then output axis 3 is fed the value held in constants[1]. If the
-* value of element "i" of the returned outperm array is greater than
-* or equal to the number of input axes, then output "i" will be fed
-* the constant AST__BAD.
-
-* Notes:
-* - A value of NULL will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- int i; /* Loop count */
- int nout; /* Number of outputs. */
- int *result; /* Pointer to the returned array */
-
-/* Initialise the returned result. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If no outperm array is stored, every output is derived from the
- corresponding input. Therefore, return an array holding 0 to Nout-1. */
- if( !this->outperm ) {
- nout = astGetNout( this );
- result = (int *) astMalloc( sizeof( int ) * (size_t) nout );
- if( astOK ) for( i = 0; i < nout; i++ ) result[ i ] = i;
-
-/* Otherwise, allocate memory and put a copy of the OutPerm array in it. */
- } else {
- result = (int *) astStore( NULL, this->outperm,
- sizeof( int ) * (size_t) astGetNout( this ) );
- }
-
-/* Return the result. */
- return result;
-}
-
-void astInitPermMapVtab_( AstPermMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitPermMapVtab
-
-* Purpose:
-* Initialise a virtual function table for a PermMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "permmap.h"
-* void astInitPermMapVtab( AstPermMapVtab *vtab, const char *name )
-
-* Class Membership:
-* PermMap vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the PermMap class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAPermMap) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
- vtab->GetConstants = GetConstants;
- vtab->GetInPerm = GetInPerm;
- vtab->GetOutPerm = GetOutPerm;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
- mapping->MapSplit = MapSplit;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- object->Equal = Equal;
- mapping->MapMerge = MapMerge;
- mapping->Rate = Rate;
-
-/* Declare the copy constructor, destructor and class dump function. */
- astSetCopy( vtab, Copy );
- astSetDelete( vtab, Delete );
- astSetDump( vtab, Dump, "PermMap", "Coordinate permutation" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a PermMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* PermMap method (over-rides the protected astMapMerge method
-* inherited from the Mapping class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated PermMap in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated PermMap with one which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated PermMap which is to be merged with
-* its neighbours. This should be a cloned copy of the PermMap
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* PermMap it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated PermMap resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstMapping *map; /* Pointer to Mapping */
- AstMapping *new; /* Pointer to replacement Mapping */
- AstPermMap *permmap; /* Pointer to PermMap */
- const char *class; /* Pointer to Mapping class string */
- double *con; /* Pointer to constants array */
- double constant; /* Constant value */
- int *inperm; /* Pointer to "inperm" permutation array */
- int *newperm; /* Pointer to new permutation array */
- int *outperm; /* Pointer to "outperm" permutation array */
- int *perm; /* Pointer to individual permutation array */
- int back; /* Considering inverse transformation? */
- int coord; /* Loop counter for coordinates */
- int icon; /* Loop counter for constants */
- int iend; /* Loop ending value */
- int imap1; /* Index of first Mapping */
- int imap2; /* Index of last Mapping */
- int imap; /* Loop counter for Mappings */
- int inc; /* Loop increment */
- int invert; /* Invert attribute value */
- int istart; /* Loop starting value */
- int ncon; /* Number of constants */
- int ncoord_in; /* Effective number of input coordinates */
- int ncoord_out; /* Effective number of output coordinates */
- int ngone; /* Number of Mappings eliminated */
- int nin; /* Total number of input coordinates */
- int ninsum; /* Accumulated count of input coordinates */
- int nout; /* Total number of output coordinates */
- int noutsum; /* Accumulated count of output coordinates */
- int nperm; /* Number of permutation array elements */
- int p; /* Permuted coordinate index */
- int result; /* Result value to return */
- int simpler; /* Mapping(s) simplified? */
- int store_in; /* Need to store "inperm" array contents? */
- int store_out; /* Need to store "outperm" array contents? */
- int unit; /* Replacement Mapping is a UnitMap? */
-
-/* Initialise the returned result. */
- result = -1;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Further initialisation. */
- con = NULL;
- inperm = outperm = NULL;
- ncon = 0;
- permmap = NULL;
-
-/* In series. */
-/* ---------- */
-/* Handle the case where the Mappings are connected in series. */
- if ( series ) {
-
-/* Search adjacent lower-numbered Mappings until one is found which is
- not a PermMap or a UnitMap. */
- imap1 = where;
- while ( ( imap1 - 1 ) >= 0 ) {
- class = astGetClass( ( *map_list )[ imap1 - 1 ] );
- if ( astOK ) {
- if ( strcmp( class, "PermMap" ) &&
- strcmp( class, "UnitMap" ) ) break;
- imap1--;
- }
- }
-
-/* Similarly search adjacent higher-numbered Mappings. */
- imap2 = where;
- while ( ( imap2 + 1 ) < *nmap ) {
- class = astGetClass( ( *map_list )[ imap2 + 1 ] );
- if ( astOK ) {
- if ( strcmp( class, "PermMap" ) &&
- strcmp( class, "UnitMap" ) ) break;
- imap2++;
- }
- }
-
-/* Obtain a pointer to the first Mapping found and determine if it is
- to be applied with its Invert attribute set. */
- map = ( *map_list )[ imap1 ];
- invert = ( *invert_list )[ imap1 ];
-
-/* Use this first Mapping (allowing for how its Invert attribute is
- currently set) to determine the number of input coordinates that
- the simplified Mapping should have. */
- if ( astGetInvert( map ) ) {
- nin = invert ? astGetNin( map ) : astGetNout( map );
- } else {
- nin = invert ? astGetNout( map ) : astGetNin( map );
- }
-
-/* Repeat this process for the last Mapping found, to determine the
- number of output coordinates for the simplified Mapping. */
- map = ( *map_list )[ imap2 ];
- invert = ( *invert_list )[ imap2 ];
- if ( astGetInvert( map ) ) {
- nout = invert ? astGetNout( map ) : astGetNin( map );
- } else {
- nout = invert ? astGetNin( map ) : astGetNout( map );
- }
-
-/* Allocate memory to hold input and output permutation arrays for the
- simplified Mapping, together with a list of constants. */
- inperm = astMalloc( sizeof( int ) * (size_t) nin );
- outperm = astMalloc( sizeof( int ) * (size_t) nout );
- con = astMalloc( sizeof( double ) * (size_t) ( nin + nout ) );
- if ( astOK ) {
-
-/* Initialise the number of constants. */
- ncon = 0;
-
-/* Loop twice, to calculate the forward and inverse (backward)
- simplified permutation arrays in turn. */
- for ( back = 0; back <= 1; back++ ) {
-
-/* Obtain a pointer to the appropriate (forward/inverse) permutation
- array that we wish to fill, and obtain the number of elements it
- will contain. Initialise the array contents to represent a null
- permutation.*/
- newperm = back ? outperm : inperm;
- nperm = back ? nout : nin;
- for ( coord = 0; coord < nperm; coord++ ) newperm[ coord ] = coord;
-
-/* Set up limits to scan through the list of Mappings being merged in
- either the forward or reverse order, as required. */
- istart = back ? imap2 : imap1;
- iend = back ? imap1 - 1 : imap2 + 1;
- inc = back ? -1 : 1;
-
-/* Loop through the Mappings, obtaining a pointer to each, together
- with the value to be used for its Invert attribute. Invert this
- attribute value if calculating the overall inverse (backward)
- permutation array. */
- for ( imap = istart; imap != iend; imap += inc ) {
- map = ( *map_list )[ imap ];
- invert = ( *invert_list )[ imap ];
- if ( back ) invert = !invert;
-
-/* Determine the class to which the Mapping belongs. */
- class = astGetClass( map );
- if ( astOK ) {
-
-/* If it is a PermMap, obtain a pointer to the PermMap structure and
- hence to the relevant permutation array. Otherwise (if it is a
- UnitMap), leave the permutation array pointer NULL, which indicates
- a null permutation. */
- perm = NULL;
- if ( !strcmp( class, "PermMap" ) ) {
- permmap = (AstPermMap *) map;
- perm = invert ? permmap->outperm : permmap->inperm;
- }
-
-/* Obtain the effective number of output coordinates associated with
- this individual Mapping (when transforming points in the direction
- to which this permutation array applies). */
- if ( astGetInvert( map ) ) {
- ncoord_out = invert ? astGetNout( map ) :
- astGetNin( map );
- } else {
- ncoord_out = invert ? astGetNin( map ) :
- astGetNout( map );
- }
-
-/* Loop through the elements of the simplified permutation array to
- accumulate the effects of the current individual Mapping. */
- if ( astOK ) {
- for ( coord = 0; coord < nperm; coord++ ) {
-
-/* Find the effective input coordinate for the current Mapping from
- the permutation accumulated so far, and check this is not
- negative. If it is, the accumulated permutation refers to a "bad"
- coordinate value or a constant, so the current Mapping makes no
- further difference. */
- p = newperm[ coord ];
- if ( p >= 0 ) {
-
-/* Otherwise, obtain the permuting effect of the current Mapping,
- allowing for the possibility of its permutation array being NULL
- (implying a null permutation). */
- p = perm ? perm[ p ] : p;
-
-/* If the permuted index refers to a valid (effective) output
- coordinate for the individual Mapping, then accumulate its effect
- in the overall permutation array. */
- if ( ( p >= 0 ) && ( p < ncoord_out ) ) {
- newperm[ coord ] = p;
-
-/* Otherwise (this can only occur if the individual Mapping is a
- PermMap), determine whether it refers to a "bad" coordinate value
- or a constant. If the former, extract the constant's value,
- otherwise use a constant value of AST__BAD. */
- } else {
- if ( ( p < 0 ) && permmap->constant ) {
- constant = permmap->constant[ (-p) - 1 ];
- } else {
- constant = AST__BAD;
- }
-
-/* If the result (however reached) is a coordinate value of AST__BAD,
- then mark the accumulated permutation array with a value of -1 to
- indicate this. */
- if ( constant == AST__BAD ) {
- newperm[ coord ] = -1;
-
-/* Otherwise, search the array of constants to see if this one has
- been encountered before. If not, append the new constant to the
- list. */
- } else {
- for ( icon = 0; icon < ncon; icon++ ) {
- if ( con[ icon ] == constant ) break;
- }
- if ( icon == ncon ) con[ ncon++ ] = constant;
-
-/* Store a (negative) reference to the new constant in the accumulated
- permutation array (note we use an extra offset of -1 here in
- forming these references, so that the value -1 itself can be used
- to indicate a "bad" coordinate value without an entry in the
- constants array). */
- newperm[ coord ] = (-icon) - 2;
- }
- }
- }
- }
- }
- }
- }
- }
- }
-
-/* In parallel. */
-/* ------------ */
-/* Handle the case where the Mappings are connected in parallel. */
- } else {
-
-/* Obtain a pointer to the nominated Mapping (which is a PermMap) and
- determine if it is to be applied with its Invert attribute set. */
- map = ( *map_list )[ where ];
- invert = ( *invert_list )[ where ];
-
-/* Use this nominated Mapping to initialise the counts of input and
- output coordinates for the simplified Mapping (allowing for how its
- Invert attribute is currently set). */
- if ( astGetInvert( map ) ) {
- nin = invert ? astGetNin( map ) : astGetNout( map );
- nout = invert ? astGetNout( map ) : astGetNin( map );
- } else {
- nin = invert ? astGetNout( map ) : astGetNin( map );
- nout = invert ? astGetNin( map ) : astGetNout( map );
- }
-
-/* Search adjacent lower-numbered Mappings until one is found which is
- not a PermMap or a UnitMap. */
- imap1 = where;
- while ( astOK && ( ( imap1 - 1 ) >= 0 ) ) {
- map = ( *map_list )[ imap1 - 1 ];
- class = astGetClass( map );
- if ( astOK ) {
- if ( strcmp( class, "PermMap" ) &&
- strcmp( class, "UnitMap" ) ) break;
-
-/* For each Mapping found, obtain the effective numbers of input and
- output coordinates (allowing for all the direction flags, as above)
- and accumulate the total count of input and output coordinates for
- the overall simplified Mapping. */
- invert = ( *invert_list )[ imap1 - 1 ];
- if ( astGetInvert( map ) ) {
- nin += ( invert ? astGetNin( map ) : astGetNout( map ) );
- nout += ( invert ? astGetNout( map ) : astGetNin( map ) );
- } else {
- nin += ( invert ? astGetNout( map ) : astGetNin( map ) );
- nout += ( invert ? astGetNin( map ) : astGetNout( map ) );
- }
- imap1--;
- }
- }
-
-/* Similarly search higher-numbered Mappings and accumulate their
- coordinate counts. */
- imap2 = where;
- while ( astOK && ( ( imap2 + 1 ) < *nmap ) ) {
- map = ( *map_list )[ imap2 + 1 ];
- class = astGetClass( map );
- if ( astOK ) {
- if ( strcmp( class, "PermMap" ) &&
- strcmp( class, "UnitMap" ) ) break;
- invert = ( *invert_list )[ imap2 + 1 ];
- if ( astGetInvert( map ) ) {
- nin += ( invert ? astGetNin( map ) : astGetNout( map ) );
- nout += ( invert ? astGetNout( map ) : astGetNin( map ) );
- } else {
- nin += ( invert ? astGetNout( map ) : astGetNin( map ) );
- nout += ( invert ? astGetNin( map ) : astGetNout( map ) );
- }
- imap2++;
- }
- }
-
-/* Allocate memory to hold input and output permutation arrays for the
- simplified Mapping, together with a list of constants. */
- inperm = astMalloc( sizeof( int ) * (size_t) nin );
- outperm = astMalloc( sizeof( int ) * (size_t) nout );
- con = astMalloc( sizeof( double ) * (size_t) ( nin + nout ) );
- if ( astOK ) {
-
-/* Initialise the number of constants. */
- ncon = 0;
-
-/* Loop twice, to calculate the forward and inverse (backward)
- simplified permutation arrays in turn. */
- for ( back = 0; back <= 1; back++ ) {
-
-/* Obtain a pointer to the appropriate (forward/inverse) permutation
- array that we wish to fill, and obtain the number of elements it
- will contain. */
- newperm = back ? outperm : inperm;
- nperm = back ? nout : nin;
-
-/* Initialise counts of (effective) input and output coordinates. */
- ninsum = noutsum = 0;
-
-/* Loop through the Mappings, obtaining a pointer to each, together
- with the value to be used for its Invert attribute. Invert this
- attribute value if calculating the overall inverse (backward)
- permutation array. */
- for ( imap = imap1; imap <= imap2; imap++ ) {
- map = ( *map_list )[ imap ];
- invert = ( *invert_list )[ imap ];
- if ( back ) invert = !invert;
-
-/* Determine the class to which the Mapping belongs. */
- class = astGetClass( map );
- if ( astOK ) {
-
-/* If it is a PermMap, obtain a pointer to the PermMap structure and
- hence to the relevant permutation array. Otherwise (if it is a
- UnitMap), leave the permutation array pointer NULL, which indicates
- a null permutation. */
- perm = NULL;
- if ( !strcmp( class, "PermMap" ) ) {
- permmap = (AstPermMap *) map;
- perm = invert ? permmap->outperm : permmap->inperm;
- }
-
-/* Obtain the effective number of input and output coordinates
- associated with this individual Mapping (when transforming points
- in the direction to which this permutation array applies). */
- if ( astGetInvert( map ) ) {
- ncoord_in = invert ? astGetNin( map ) :
- astGetNout( map );
- ncoord_out = invert ? astGetNout( map ) :
- astGetNin( map );
- } else {
- ncoord_in = invert ? astGetNout( map ) :
- astGetNin( map );
- ncoord_out = invert ? astGetNin( map ) :
- astGetNout( map );
- }
-
-/* Loop through the (effective) input coordinates of the current
- individual Mapping to accumulate their effect on the overall
- permutation array. */
- if ( astOK ) {
- for ( coord = 0; coord < ncoord_in; coord++ ) {
-
-/* Obtain the permuting effect of the current Mapping, allowing for
- the possibility of its permutation array being NULL. */
- p = perm ? perm[ coord ] : coord;
-
-/* If the permuted index refers to a valid (effective) output
- coordinate for the individual Mapping, then accumulate its effect
- on the overall permutation array, allowing for the coordinate
- numbering offset produced by any Mappings already accumulated. */
- if ( ( p >= 0 ) && ( p < ncoord_out ) ) {
- newperm[ coord + ninsum ] = p + noutsum;
-
-/* Otherwise (this can only occur if the individual Mapping is a
- PermMap), determine whether it refers to a "bad" coordinate value
- or a constant. If the former, extract the constant's value,
- otherwise use a constant value of AST__BAD. */
- } else {
- if ( ( p < 0 ) && permmap->constant ) {
- constant = permmap->constant[ (-p) - 1 ];
- } else {
- constant = AST__BAD;
- }
-
-/* If the result (however reached) is a coordinate value of AST__BAD,
- then mark the accumulated permutation array with a value of -1 to
- indicate this. */
- if ( constant == AST__BAD ) {
- newperm[ coord + ninsum ] = -1;
-
-/* Otherwise, search the array of constants to see if this one has
- been encountered before. If not, append the new constant to the
- list. */
- } else {
- int icon;
- for ( icon = 0; icon < ncon; icon++ ) {
- if ( con[ icon ] == constant ) break;
- }
- if ( icon == ncon ) con[ ncon++ ] = constant;
-
-/* Store a (negative) reference to the new constant in the accumulated
- permutation array (note we use an extra offset of -1 here in
- forming these references, so that the value -1 itself can be used
- to indicate a "bad" coordinate value without an entry in the
- constants array). */
- newperm[ coord + ninsum ] = (-icon) - 2;
- }
- }
- }
- }
-
-/* Accumulate the counts of (effective) input and output coordinates
- for each individual Mapping. */
- ninsum += ncoord_in;
- noutsum += ncoord_out;
- }
- }
- }
- }
- }
-
-/* Inspect each element of the accumulated "inperm" array to determine
- if it needs to be stored by the replacement PermMap. */
- if ( astOK ) {
- store_in = 0;
- for ( coord = 0; coord < nin; coord++ ) {
-
-/* It need not be stored if it produces a null permutation, where each
- input coordinate takes its value from the corresponding output
- coordinate (or where a "bad" value results if there is no
- corresponding output coordinate). Note any deviation from this
- pattern. */
- if ( coord < nout ) {
- store_in = store_in || ( inperm[ coord ] != coord );
- } else {
- store_in = store_in || ( inperm[ coord ] != -1 );
- }
-
-/* Also convert permutation array values of -1 into non-existent
- positive coordinate indices (indicating "bad" coordinate values)
- and adjust (negative) references to constants by +1 to eliminate
- the extra offset of -1 used temporarily above. This returns the
- permutation array values to normal. */
- if ( inperm[ coord ] < 0 ) {
- if ( !++inperm[ coord ] ) inperm[ coord ] = nout;
- }
- }
-
-/* Similarly inspect the "outperm" array and return its values to
- normal. */
- store_out = 0;
- for ( coord = 0; coord < nout; coord++ ) {
- if ( coord < nin ) {
- store_out = store_out || ( outperm[ coord ] != coord );
- } else {
- store_out = store_out || ( outperm[ coord ] != -1 );
- }
- if ( outperm[ coord ] < 0 ) {
- if ( !++outperm[ coord ] ) outperm[ coord ] = nin;
- }
- }
-
-/* Determine how many adjacent Mappings can be eliminated by merging
- them. */
- ngone = imap2 - imap1;
-
-/* Determine if the resultant PermMap can be simplified still further
- to become a UnitMap (a null Mapping). This will be the case if both
- the forward and inverse coordinate permutations it produces are
- null, and if the number of input and output coordinates are
- equal. */
- unit = !store_in && !store_out && ( nin == nout );
-
-/* We must now determine whether we have actually produced any
- simplification. This is important, because if we indicate a
- simplification when none has, in fact, been achieved, then this
- function may get called over and over again without end. */
-
-/* Simplification is clearly evident if (a) Mappings have been
- eliminated ("ngone" is non-zero), or (b) a PermMap has been reduced
- to a UnitMap, or (c) where there was originally only one PermMap to
- simplify, its invert flag was set (the replacement Mapping will
- always have this flag cleared). */
- simpler = ngone || unit || ( *invert_list )[ where ];
-
-/* If the above tests do not indicate simplification, then we can only
- be considering the case where there was a single initial
- PermMap. In this case we have also achieved simplification if
- either the "inperm" or "outperm" array no longer needs storing
- whereas previously it was stored. */
- permmap = (AstPermMap *) ( *map_list )[ where ];
- if ( !simpler ) {
- simpler = ( !store_in && !NullPerm( permmap, 0, status ) ) ||
- ( !store_out && !NullPerm( permmap, 1, status ) );
- }
-
-/* If we still haven't detected any simplification, then compare the
- original and replacement "inperm" arrays (if present) in detail for
- equality. We declare simplification to have occurred if they
- differ. */
- if ( !simpler && store_in ) {
- for ( coord = 0; coord < nin; coord++ ) {
- simpler = ( inperm[ coord ] != permmap->inperm[ coord ] );
- if ( simpler ) break;
- }
- }
-
-/* Similarly, if necessary, compare the original and replacement
- "outperm" arrays. */
- if ( !simpler && store_out ) {
- for ( coord = 0; coord < nout; coord++ ) {
- simpler = ( outperm[ coord ] != permmap->outperm[ coord ] );
- if ( simpler ) break;
- }
- }
-
-/* Do nothing more unless there has been some simplification. */
- if ( simpler ) {
-
-/* If the PermMaps (and UnitMaps) can be replaced by a UnitMap, then
- create the replacement. */
- if ( unit ) {
- new = (AstMapping *) astUnitMap( nin, "", status );
-
-/* Otherwise, create a replacement PermMap, setting as many arguments
- to NULL in the constructor function as can be achieved without
- affecting the result. */
- } else {
- new = (AstMapping *) astPermMap( nin, store_in ? inperm : NULL,
- nout, store_out ? outperm : NULL,
- ncon ? con : NULL, "", status );
- }
-
-/* Annul the pointers to all the Mappings that are being replaced. */
- if ( astOK ) {
- for ( imap = imap1; imap <= imap2; imap++ ) {
- ( *map_list )[ imap ] = astAnnul( ( *map_list )[ imap ] );
- }
-
-/* Insert the new pointer and the associated invert flag. */
- ( *map_list )[ imap1 ] = new;
- ( *invert_list )[ imap1 ] = 0;
-
-/* Loop to close the resulting gap by moving subsequent elements down
- in the arrays. */
- for ( imap = imap2 + 1; imap < *nmap; imap++ ) {
- ( *map_list )[ imap - ngone ] = ( *map_list )[ imap ];
- ( *invert_list )[ imap - ngone ] = ( *invert_list )[ imap ];
- }
-
-/* Clear the vacated elements at the end. */
- for ( imap = *nmap - ngone; imap < *nmap; imap++ ) {
- ( *map_list )[ imap ] = NULL;
- ( *invert_list )[ imap ] = 0;
- }
-
-/* Decrement the Mapping count and return the index of the first
- modified element. */
- ( *nmap ) -= ngone;
- result = imap1;
- }
- }
- }
-
-/* Free the workspace arrays. */
- inperm = astFree( inperm );
- outperm = astFree( outperm );
- con = astFree( con );
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) result = -1;
-
-/* Return the result. */
- return result;
-}
-
-static int *MapSplit( AstMapping *this_map, int nin, const int *in, AstMapping **map, int *status ){
-/*
-* Name:
-* MapSplit
-
-* Purpose:
-* Create a Mapping representing a subset of the inputs of an existing
-* PermMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "permmap.h"
-* int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status )
-
-* Class Membership:
-* PermMap method (over-rides the protected astMapSplit method
-* inherited from the Mapping class).
-
-* Description:
-* This function creates a new Mapping by picking specified inputs from
-* an existing PermMap. This is only possible if the specified inputs
-* correspond to some subset of the PermMap outputs. That is, there
-* must exist a subset of the PermMap outputs for which each output
-* depends only on the selected PermMap inputs, and not on any of the
-* inputs which have not been selected. If this condition is not met
-* by the supplied PermMap, then a NULL Mapping is returned.
-
-* Parameters:
-* this
-* Pointer to the PermMap to be split (the PermMap is not actually
-* modified by this function).
-* nin
-* The number of inputs to pick from "this".
-* in
-* Pointer to an array of indices (zero based) for the inputs which
-* are to be picked. This array should have "nin" elements. If "Nin"
-* is the number of inputs of the supplied PermMap, then each element
-* should have a value in the range zero to Nin-1.
-* map
-* Address of a location at which to return a pointer to the new
-* Mapping. This Mapping will have "nin" inputs (the number of
-* outputs may be different to "nin"). A NULL pointer will be
-* returned if the supplied PermMap has no subset of outputs which
-* depend only on the selected inputs.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated array of ints. The number of
-* elements in this array will equal the number of outputs for the
-* returned Mapping. Each element will hold the index of the
-* corresponding output in the supplied PermMap. The array should be
-* freed using astFree when no longer needed. A NULL pointer will
-* be returned if no output Mapping can be created.
-
-* Notes:
-* - If this function is invoked with the global error status set,
-* or if it should fail for any reason, then NULL values will be
-* returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
- AstPermMap *this; /* Pointer to PermMap structure */
- double *con; /* Pointer to constants array */
- int *inp; /* Input perm array to use with supplied PermMap */
- int *inpm; /* Input perm array to use with new PermMap */
- int *outp; /* Output perm array to use with supplied PermMap */
- int *outpm; /* Output perm array to use with new PermMap */
- int *result; /* Pointer to returned array */
- int i; /* Loop count */
- int iin; /* Mapping input index */
- int iout; /* Output index */
- int j; /* Loop count */
- int nout; /* No. of outputs in the new PermMap */
- int npin; /* No. of inputs in the supplied Mapping */
- int npout; /* No. of outputs in the supplied Mapping */
- int ok; /* Are input indices OK? */
-
-/* Initialise */
- result = NULL;
- *map = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-
-/* Get a pointer to the PermMap structure. */
- this = (AstPermMap *) this_map;
-
-/* Get the number of inputs and outputs in the supplied PermMap. */
- npin = astGetNin( this );
- npout = astGetNout( this );
-
-/* Check all input axis indices are valid. */
- ok = 1;
- for( i = 0; i < nin; i++ ) {
- if( in[ i ] < 0 || in[ i ] >= npin ) {
- ok = 0;
- break;
- }
- }
-
-/* Get pointers to the input and output permutation arrays and constant
- array taking account of whether the PermMap has been inverted. */
- if( astGetInvert( this ) ) {
- outp = this->inperm;
- inp = this->outperm;
- } else {
- outp = this->outperm;
- inp = this->inperm;
- }
- con = this->constant;
-
-/* Allocate memory for the inperm and outperm arrays of the returned
- PermMap. Make these the largest they could possible need to be. */
- inpm = astMalloc( sizeof( int )*(size_t) npin );
- outpm = astMalloc( sizeof( int )*(size_t) npout );
-
-/* Allocate memory for the returned array of output indices. */
- result = astMalloc( sizeof( int )*(size_t) npout );
- if( astOK ) {
-
-/* Initialise number of outputs in returned PermMap. */
- nout = 0;
-
-/* Loop round each output of the supplied PermMap. */
- for( iout = 0; iout < npout; iout++ ) {
-
-/* Is this output fed by one of the selected inputs? If so store the input
- index of the returned Mapping, which feeds this output and add this
- output index to the list of returned outputs. */
- iin = outp ? outp[ iout ] : iout;
- if( iin >= 0 && iin < npin ) {
- for( i = 0; i < nin; i++ ) {
- if( in[ i ] == iin ) {
- outpm[ nout ] = i;
- result[ nout ] = iout;
- nout++;
- break;
- }
- }
- }
- }
-
-/* We now need to set up the inperm array for the returned PermMap. This
- ensures that the inverse transformation in the returned Mapping provides
- values for the selected inputs. Loop round all the selected inputs. */
- for( i = 0; i < nin; i++ ) {
- iin = in[ i ];
-
-/* Is this input constant or fed by one of the selected outputs? If so store
- the output or constant index in the returned Mapping which feeds this
- input. */
- ok = 0;
- iout = inp ? inp[ iin ] : iin;
- if( iout >= 0 && iout < npout ) {
- for( j = 0; j < nout; j++ ) {
- if( result[ j ] == iout ) {
- ok = 1;
- inpm[ i ] = j;
- break;
- }
- }
- } else {
- inpm[ i ] = iout;
- ok = 1;
- }
-
-/* If this input is fed by an output which has not been selected, then we
- cannot produce the required Mapping. */
- if( !ok ) break;
- }
-
-/* If possible produce the returned PermMap. Otherwise, free the returned
- array. */
- if( ok ) {
- *map = (AstMapping *) astPermMap( nin, inpm, nout, outpm, con, "", status );
- } else {
- result = astFree( result );
- }
-
-/* Free other resources. */
- inpm = astFree( inpm );
- outpm = astFree( outpm );
- }
-
-/* Free returned resources if an error has occurred. */
- if( !astOK ) {
- result = astFree( result );
- *map = astAnnul( *map );
- }
-
-/* Return the list of output indices. */
- return result;
-}
-
-static int NullPerm( AstPermMap *this, int forward, int *status ){
-/*
-* Name:
-* NullPerm
-
-* Purpose:
-* See if a PermMap transformation represents a null axis permutation.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "permmap.h"
-* int NullPerm( AstPermMap *this, int forward, int *status )
-
-* Class Membership:
-* PermMap method
-
-* Description:
-* This function returns a logical value indicating if the specified
-* transformation of the supplied PermMap is a null (i.e. unit)
-* transformation.
-
-* Parameters:
-* this
-* Pointer to the PermMap.
-* forward
-* Check the forward transformation? Otherise, check the inverse
-* transformation.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the specified transformation is a null axis permutation.
-* Zero otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- int i; /* Coordinate index */
- int nin; /* Number of Mapping inputs */
- int nout; /* Number of Mapping outputs */
- int result; /* Returned value */
-
-/* Initialise the returned result. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* First check the forward transformation, given by the outperm array. */
- if( forward ) {
-
-/* If no outperm array is stored, every output is derived from the
- corresponding input. Therefore, return 1 indicating a null axis
- permutation. */
- if( !this->outperm ) {
- result = 1;
-
-/* Otherwise, check that every element in the outperm array indicates
- that the output is derived from the input with the saem index. */
- } else {
- result = 1;
- nout = astGetNout( this );
- for( i = 0; i < nout; i++ ) {
- if( this->outperm[ i ] != i ) {
- result = 0;
- break;
- }
- }
- }
-
-/* Now check the inverse transformation, given by the inperm array. */
- } else {
-
-/* If no inperm array is stored, every input is derived from the
- corresponding output. Therefore, return 1 indicating a null axis
- permutation. */
- if( !this->inperm ) {
- result = 1;
-
-/* Otherwise, check that every element in the inperm array indicates
- that the input is derived from the output with the same index. */
- } else {
- result = 1;
- nin = astGetNin( this );
- for( i = 0; i < nin; i++ ) {
- if( this->inperm[ i ] != i ) {
- result = 0;
- break;
- }
- }
- }
- }
-
-/* If an error has occurred, return zero. */
- if( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-* Name:
-* Rate
-
-* Purpose:
-* Calculate the rate of change of a Mapping output.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "permmap.h"
-* result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-* Class Membership:
-* PermMap member function (overrides the astRate method inherited
-* from the Mapping class ).
-
-* Description:
-* This function returns the rate of change of a specified output of
-* the supplied Mapping with respect to a specified input, at a
-* specified input position.
-
-* Parameters:
-* this
-* Pointer to the Mapping to be applied.
-* at
-* The address of an array holding the axis values at the position
-* at which the rate of change is to be evaluated. The number of
-* elements in this array should equal the number of inputs to the
-* Mapping.
-* ax1
-* The index of the Mapping output for which the rate of change is to
-* be found (output numbering starts at 0 for the first output).
-* ax2
-* The index of the Mapping input which is to be varied in order to
-* find the rate of change (input numbering starts at 0 for the first
-* input).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The rate of change of Mapping output "ax1" with respect to input
-* "ax2", evaluated at "at", or AST__BAD if the value cannot be
-* calculated.
-
-*/
-
-/* Local Variables: */
- AstPermMap *map;
- int *outperm;
- int *inperm;
- int result;
-
-/* Check inherited status */
- if( !astOK ) return AST__BAD;
-
-/* Get a pointer to the PermMap structure. */
- map = (AstPermMap *) this;
-
-/* Obtain a pointer to the appropriate output coordinate permutation array,
- according to whether the PermMap has been inverted. If the specified
- output is derived from the specified input then the rate is unity.
- Otherwise it is zero. */
- outperm = astGetInvert( this ) ? map->inperm : map->outperm;
- if( outperm ) {
- result = ( ax2 == outperm[ ax1 ] ) ? 1.0 : 0.0;
-
- } else {
- inperm = astGetInvert( this ) ? map->outperm : map->inperm;
- result = ( inperm[ ax2 ] == ax1 ) ? 1.0 : 0.0;
- }
-
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *map, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a PermMap to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "permmap.h"
-* AstPointSet *Transform( AstMapping *map, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* PermMap member function (over-rides the astTransform method inherited
-* from the Mapping class).
-
-* Description:
-* This function takes a PermMap and a set of points encapsulated in a
-* PointSet and transforms the points so as to apply the required coordinate
-* permutation.
-
-* Parameters:
-* map
-* Pointer to the PermMap.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of coordinates for the PermMap being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstPointSet *result; /* Pointer to output PointSet */
- AstPermMap *this; /* Pointer to PermMap to be applied */
- double **ptr_in; /* Pointer to input coordinate data */
- double **ptr_out; /* Pointer to output coordinate data */
- int coord; /* Loop counter for coordinates */
- int ncoord_in; /* Number of coordinates per input point */
- int ncoord_out; /* Number of coordinates per output point */
- int npoint; /* Number of points */
- int point; /* Loop counter for points */
- int *perm; /* Pointer to permutation array */
- double constant; /* Constant coordinate value */
- int p; /* Permuted coordinate index */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the PermMap. */
- this = (AstPermMap *) map;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Mapping class. This function validates
- all arguments and generates an output PointSet if necessary, but does not
- actually transform any coordinate values. */
- result = (*parent_transform)( map, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- permutation needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
- and output PointSets and obtain pointers for accessing the input and output
- coordinate values. */
- ncoord_in = astGetNcoord( in );
- ncoord_out = astGetNcoord( result );
- npoint = astGetNpoint( in );
- ptr_in = astGetPoints( in );
- ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse transformation, according
- to the direction specified and whether the mapping has been inverted. */
- if ( astGetInvert( this ) ) forward = !forward;
-
-/* Perform coordinate permutation. */
-/* ------------------------------- */
- if ( astOK ) {
-
-/* Obtain a pointer to the appropriate coordinate permutation array, according
- to the direction of transformation required. */
- perm = forward ? this->outperm : this->inperm;
-
-/* Loop to generate values for each output coordinate. */
- for ( coord = 0; coord < ncoord_out; coord++ ) {
-
-/* If the permutation array is not NULL, use it to look up which input
- coordinate to use. Otherwise, use the corresponding input coordinate. */
- p = perm ? perm[ coord ] : coord;
-
-/* If a valid input coordinate has been identified, simply copy the required
- coordinate values from input to output. */
- if ( ( p >= 0 ) && ( p < ncoord_in ) ) {
- (void) memcpy( ptr_out[ coord ], ptr_in[ p ],
- sizeof( double ) * (size_t) npoint );
-
-/* If the permuted coordinate index is negative, use it to index the "constant"
- array to obtain a constant value to assign. If this array is NULL, use
- AST__BAD as the constant. */
- } else if ( p < 0 ) {
- constant = this->constant ? this->constant[ (-p) - 1 ] : AST__BAD;
-
-/* Assign the constant value to the output coordinate for all points. */
- for ( point = 0; point < npoint; point++ ) {
- ptr_out[ coord ][ point ] = constant;
- }
-
-/* In all other cases, simply assign the value AST__BAD to the output
- coordinate for all points. */
- } else {
- for ( point = 0; point < npoint; point++ ) {
- ptr_out[ coord ][ point ] = AST__BAD;
- }
- }
- }
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for PermMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for PermMap objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstPermMap *in; /* Pointer to input PermMap */
- AstPermMap *out; /* Pointer to output PermMap */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output PermMaps. */
- in = (AstPermMap *) objin;
- out = (AstPermMap *) objout;
-
-/* For safety, first clear any references to the input memory from
- the output PermMap. */
- out->inperm = NULL;
- out->outperm = NULL;
- out->constant = NULL;
-
-/* For each input array which is not NULL, make a copy in allocated memory,
- storing a pointer to it in the output PermMap structure. */
- if ( in->inperm ) out->inperm = astStore( NULL, in->inperm,
- astSizeOf( in->inperm ) );
- if ( in->outperm ) out->outperm = astStore( NULL, in->outperm,
- astSizeOf( in->outperm ) );
- if ( in->constant ) out->constant = astStore( NULL, in->constant,
- astSizeOf( in->constant ) );
-
-/* If an error occurred, clean up by freeing all memory allocated above. */
- if ( !astOK ) {
- out->inperm = astFree( out->inperm );
- out->outperm = astFree( out->outperm );
- out->constant = astFree( out->constant );
- }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for PermMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for PermMap objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstPermMap *this; /* Pointer to PermMap */
-
-/* Obtain a pointer to the PermMap structure. */
- this = (AstPermMap *) obj;
-
-/* Free all memory allocated by the PermMap. */
- this->inperm = astFree( this->inperm );
- this->outperm = astFree( this->outperm );
- this->constant = astFree( this->constant );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for PermMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the PermMap class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the PermMap whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define COMMENT_LEN 150 /* Maximum length of a comment string */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstPermMap *this; /* Pointer to the PermMap structure */
- char comment[ COMMENT_LEN + 1 ]; /* Buffer for comment strings */
- char key[ KEY_LEN + 1 ]; /* Buffer for keyword strings */
- int coord; /* Loop counter for coordinates */
- int iconst; /* Loop counter for constants */
- int invert; /* Invert attribute value */
- int ival; /* Integer value */
- int nconst; /* Number of constants */
- int nin; /* Number of input coordinates */
- int nout; /* Number of output coordinates */
- int set; /* Value is "set"? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the PermMap structure. */
- this = (AstPermMap *) this_object;
-
-/* Determine if the PermMap is inverted and obtain the "true" number
- of input and output coordinates by un-doing the effects of any
- inversion. */
- invert = astGetInvert( this );
- nin = !invert ? astGetNin( this ) : astGetNout( this );
- nout = !invert ? astGetNout( this ) : astGetNin( this );
-
-/* Initialise the count of constants in use. */
- nconst = 0;
-
-/* Write out values representing the instance variables for the
- PermMap class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* "outperm" array contents. */
-/* ------------------------- */
-/* Write the boolean "OutCpy" value to indicate if output coordinates
- are obtained simply by copying corresponding input
- coordinates. This will be the case if "this->outperm" is NULL. */
- ival = this->outperm ? 0 : 1;
- set = ( ival != 0 );
- astWriteInt( channel, "OutCpy", set, 0, ival,
- ival ? "Output coordinates = input coordinates" :
- "Output coordinates specified individually" );
-
-/* If output coordinates are specified individually, create a keyword
- for each element of the "outperm" array. */
- if ( this->outperm ) {
- for ( coord = 0; coord < nout; coord++ ) {
- (void) sprintf( key, "Out%d", coord + 1 );
-
-/* Obtain the array value. If it refers to a coordinate that does not
- exist, change the value to zero (indicating a "bad" value for this
- coordinate). Create an appropriate comment. */
- ival = this->outperm[ coord ];
- if ( ival >= nin ) {
- ival = 0;
- (void) sprintf( comment, "Output coordinate %d is \"bad\"",
- coord + 1 );
-
-/* If the coordinate reference is valid, convert to 1-based coordinate
- numbering and create an appropriate comment. */
- } else if ( ival >= 0 ) {
- ival++;
- (void) sprintf( comment,
- "Output coordinate %d = input coordinate %d",
- coord + 1, ival );
-
-/* If the reference is to a constant, create an appropriate comment
- (which depends on whether there are any constants). */
- } else {
- if ( this->constant ) {
- (void) sprintf( comment,
- "Output coordinate %d = constant no. %d",
- coord + 1, -ival );
- } else {
- (void) sprintf( comment, "Output coordinate %d is \"bad\"",
- coord + 1 );
- }
-
-/* Update the top constant number referenced. */
- if ( nconst < -ival ) nconst = -ival;
- }
-
-/* Write out the array value with accompanying comment. */
- astWriteInt( channel, key, 1, 1, ival, comment );
- }
- }
-
-/* "inperm" array contents. */
-/* ------------------------ */
-/* Write the boolean "InCpy" value to indicate if input coordinates
- are obtained simply by copying corresponding output
- coordinates. This will be the case if "this->inperm" is NULL. */
- ival = this->inperm ? 0 : 1;
- set = ( ival != 0 );
- astWriteInt( channel, "InCpy", set, 0, ival,
- ival ? "Input coordinates = output coordinates" :
- "Input coordinates specified individually" );
-
-/* If input coordinates are specified individually, create a keyword
- for each element of the "inperm" array. */
- if ( this->inperm ) {
- for ( coord = 0; coord < nin; coord++ ) {
- (void) sprintf( key, "In%d", coord + 1 );
-
-/* Obtain the array value. If it refers to a coordinate that does not
- exist, change the value to zero (indicating a "bad" value for this
- coordinate). Create an appropriate comment. */
- ival = this->inperm[ coord ];
- if ( ival >= nout ) {
- ival = 0;
- (void) sprintf( comment, "Input coordinate %d is \"bad\"",
- coord + 1 );
-
-/* If the coordinate reference is valid, convert to 1-based coordinate
- numbering and create an appropriate comment. */
- } else if ( ival >= 0 ) {
- ival++;
- (void) sprintf( comment,
- "Input coordinate %d = output coordinate %d",
- coord + 1, ival );
-
-/* If the reference is to a constant, create an appropriate comment
- (which depends on whether there are any constants). */
- } else {
- if ( this->constant ) {
- (void) sprintf( comment,
- "Input coordinate %d = constant no. %d",
- coord + 1, -ival );
- } else {
- (void) sprintf( comment, "Input coordinate %d is \"bad\"",
- coord + 1 );
- }
-
-/* Update the top constant number referenced. */
- if ( nconst < -ival ) nconst = -ival;
- }
-
-/* Write out the array value with accompanying comment. */
- astWriteInt( channel, key, 1, 1, ival, comment );
- }
- }
-
-/* Number of constants. */
-/* -------------------- */
-/* First check if there are any constants, then write out how many
- there are. */
- if ( !this->constant ) nconst = 0;
- set = ( nconst != 0 );
- astWriteInt( channel, "Nconst", set, 0, nconst, "Number of constants" );
-
-/* Constants. */
-/* ---------- */
-/* Loop to create a keyword and comment for each constant. */
- for ( iconst = 0; iconst < nconst; iconst++ ) {
- (void) sprintf( key, "Con%d", iconst + 1 );
- (void) sprintf( comment, "Constant number %d", iconst + 1 );
-
-/* Write out each constant value and comment. */
- set = ( this->constant[ iconst ] != AST__BAD );
- if ( set ) {
- astWriteDouble( channel, key, 1, 1, this->constant[ iconst ],
- comment );
- } else {
- astWriteString( channel, key, 0, 1, "<bad>", comment );
- }
- }
-
-/* Undefine macros local to this function. */
-#undef COMMENT_LEN
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAPermMap and astCheckPermMap functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(PermMap,Mapping)
-astMAKE_CHECK(PermMap)
-
-AstPermMap *astPermMap_( int nin, const int inperm[], int nout,
- const int outperm[], const double constant[],
- const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astPermMap
-f AST_PERMMAP
-
-* Purpose:
-* Create a PermMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "permmap.h"
-c AstPermMap *astPermMap( int nin, const int inperm[], int nout,
-c const int outperm[], double constant[],
-c const char *options, ... )
-f RESULT = AST_PERMMAP( NIN, INPERM, NOUT, OUTPERM, CONSTANT, OPTIONS,
-f STATUS )
-
-* Class Membership:
-* PermMap constructor.
-
-* Description:
-* This function creates a new PermMap and optionally initialises its
-* attributes.
-*
-* A PermMap is a Mapping which permutes the order of coordinates,
-* and possibly also changes the number of coordinates, between its
-* input and output.
-*
-* In addition to permuting the coordinate order, a PermMap may
-* also assign constant values to coordinates. This is useful when
-* the number of coordinates is being increased as it allows fixed
-* values to be assigned to any new ones.
-
-* Parameters:
-c nin
-f NIN = INTEGER (Given)
-* The number of input coordinates.
-c inperm
-f INPERM = INTEGER( NIN ) (Given)
-c An optional array with "nin" elements which, for each input
-f An array which, for each input
-* coordinate, should contain the number of the output
-* coordinate whose value is to be used (note that this array
-* therefore defines the inverse coordinate transformation).
-* Coordinates are numbered starting from 1.
-*
-* For details of additional special values that may be used in
-c this array, see the description of the "constant" parameter.
-f this array, see the description of the CONSTANT argument.
-c
-c If a NULL pointer is supplied instead of an array, each input
-c coordinate will obtain its value from the corresponding
-c output coordinate (or will be assigned the value AST__BAD if
-c there is no corresponding output coordinate).
-c nout
-f NOUT = INTEGER (Given)
-* The number of output coordinates.
-c outperm
-f OUTPERM = INTEGER( NOUT ) (Given)
-c An optional array with "nout" elements which, for each output
-f An array which, for each output
-* coordinate, should contain the number of the input coordinate
-* whose value is to be used (note that this array therefore
-* defines the forward coordinate transformation). Coordinates
-* are numbered starting from 1.
-*
-* For details of additional special values that may be used in
-c this array, see the description of the "constant" parameter.
-f this array, see the description of the CONSTANT argument.
-c
-c If a NULL pointer is supplied instead of an array, each output
-c coordinate will obtain its value from the corresponding
-c input coordinate (or will be assigned the value AST__BAD if
-c there is no corresponding input coordinate).
-c constant
-f CONSTANT = DOUBLE PRECISION( * ) (Given)
-c An optional array containing values which may be assigned to
-f An array containing values which may be assigned to
-* input and/or output coordinates instead of deriving them
-c from other coordinate values. If either of the "inperm" or
-f from other coordinate values. If either of the INPERM or
-c "outperm" arrays contains a negative value, it is used to
-f OUTPERM arrays contains a negative value, it is used to
-c address this "constant" array (such that -1 addresses the
-f address this CONSTANT array (such that -1 addresses the
-* first element, -2 addresses the second element, etc.) and the
-* value obtained is used as the corresponding coordinate value.
-*
-* Care should be taken to ensure that locations lying outside
-* the extent of this array are not accidentally addressed. The
-c array is not used if the "inperm" and "outperm" arrays do not
-f array is not used if the INPERM and OUTPERM arrays do not
-* contain negative values.
-c
-c If a NULL pointer is supplied instead of an array, the
-c behaviour is as if the array were of infinite length and
-c filled with the value AST__BAD.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new PermMap. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new PermMap. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astPermMap()
-f AST_PERMMAP = INTEGER
-* A pointer to the new PermMap.
-
-* Notes:
-c - If either of the "inperm" or "outperm" arrays contains a
-f - If either of the INPERM or OUTPERM arrays contains a
-* zero value (or a positive value which does not identify a valid
-* output/input coordinate, as appropriate), then the value
-* AST__BAD is assigned as the new coordinate value.
-* - This function does not attempt to ensure that the forward and
-* inverse transformations performed by the PermMap are
-* self-consistent in any way. You are therefore free to supply
-* coordinate permutation arrays that achieve whatever effect is
-* desired.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstPermMap *new; /* Pointer to new PermMap */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the PermMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitPermMap( NULL, sizeof( AstPermMap ), !class_init, &class_vtab,
- "PermMap", nin, inperm, nout, outperm, constant );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new PermMap's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new PermMap. */
- return new;
-}
-
-AstPermMap *astPermMapId_( int nin, const int inperm[], int nout,
- const int outperm[], const double constant[],
- const char *options, ... ) {
-/*
-* Name:
-* astPermMapId_
-
-* Purpose:
-* Create a PermMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "permmap.h"
-* AstPermMap *astPermMapId_( int nin, const int inperm[], int nout,
-* const int outperm[], const double constant[],
-* const char *options, ... )
-
-* Class Membership:
-* PermMap constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astPermMap constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astPermMap_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* This function also converts the coordinate numbering in the
-* permutation arrays from 1-based (used externally) to zero-based
-* (used internally).
-*
-* The variable argument list also prevents this function from
-* invoking astPermMap_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astPermMap_.
-
-* Returned Value:
-* The ID value associated with the new PermMap.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstPermMap *new; /* Pointer to new PermMap */
- int *inperm1; /* Pointer to temporary copy of "inperm" */
- int *outperm1; /* Pointer to temporary copy of "outperm" */
- int coord; /* Loop counter for coordinates */
-
-/* Variable argument list */
- va_list args; /* Get a pointer to the thread specific global data structure. */
-
- int *status; /* Pointer to inherited status value */
-
- astGET_GLOBALS(NULL);
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If the "nin" and "nout" values are acceptable, allocate memory to
- hold temporary copies of the "inperm" and "outperm" arrays (but
- only if these arrays are not NULL). */
- inperm1 = NULL;
- outperm1 = NULL;
- if ( ( nin >= 0 ) && ( nout >= 0 ) ) {
- if ( inperm ) inperm1 = astMalloc( sizeof( int ) * (size_t) nin );
- if ( outperm ) outperm1 = astMalloc( sizeof( int ) * (size_t) nout );
- if ( astOK ) {
-
-/* If necessary, make a copy of the "inperm" array, converting any
- zero values into (zero-based) coordinate numbers that do not exist,
- indicating a "bad" coordinate value. */
- if ( inperm ) {
- for ( coord = 0; coord < nin; coord++ ) {
- if ( inperm[ coord ] < 0 ) {
- inperm1[ coord ] = inperm[ coord ];
- } else if ( inperm[ coord ] == 0 ) {
- inperm1[ coord ] = nout;
-
-/* Convert valid coordinate references from 1-based (used externally)
- to zero-based (used internally). */
- } else {
- inperm1[ coord ] = inperm[ coord ] - 1;
- }
- }
- }
-
-/* Repeat this process on the "outperm" array. */
- if ( outperm ) {
- for ( coord = 0; coord < nout; coord++ ) {
- if ( outperm[ coord ] < 0 ) {
- outperm1[ coord ] = outperm[ coord ];
- } else if ( outperm[ coord ] == 0 ) {
- outperm1[ coord ] = nin;
- } else {
- outperm1[ coord ] = outperm[ coord ] - 1;
- }
- }
- }
- }
- }
-
-/* Initialise the PermMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitPermMap( NULL, sizeof( AstPermMap ), !class_init, &class_vtab,
- "PermMap", nin, inperm1, nout, outperm1, constant );
-
-/* If necessary, free the temporary arrays allocated above. */
- if ( ( nin >= 0 ) && ( nout >= 0 ) ) {
- if ( inperm ) inperm1 = astFree( inperm1 );
- if ( outperm ) outperm1 = astFree( outperm1 );
- }
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new PermMap's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new PermMap. */
- return astMakeId( new );
-}
-
-AstPermMap *astInitPermMap_( void *mem, size_t size, int init,
- AstPermMapVtab *vtab, const char *name,
- int nin, const int inperm[],
- int nout, const int outperm[],
- const double constant[], int *status ) {
-/*
-*+
-* Name:
-* astInitPermMap
-
-* Purpose:
-* Initialise a PermMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "permmap.h"
-* AstPermMap *astInitPermMap( void *mem, size_t size, int init,
-* AstPermMapVtab *vtab, const char *name,
-* int nin, const int inperm[],
-* int nout, const int outperm[],
-* const double constant[] )
-
-* Class Membership:
-* PermMap initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new PermMap object. It allocates memory (if necessary) to accommodate
-* the PermMap plus any additional data associated with the derived class.
-* It then initialises a PermMap structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a PermMap at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the PermMap is to be initialised.
-* This must be of sufficient size to accommodate the PermMap data
-* (sizeof(PermMap)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the PermMap (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the PermMap
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the PermMap's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new PermMap.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the Object
-* astClass function).
-* nin
-* The number of input coordinate values per point.
-* inperm
-* Pointer to an array of int, with nin elements. For each input
-* coordinate, the corresponding element of this array should contain the
-* (zero-based) index of the output coordinate whose value is to be used.
-* (Note that this array therefore defines the inverse coordinate
-* transformation.) If a NULL value is supplied, the corresponding output
-* coordinate value is used (or AST__BAD if there is no corresponding
-* output coordinate).
-*
-* For details of additional special values that may be used in this
-* array, see the description of the "constant" parameter.
-* nout
-* The number of output coordinate values per point.
-* outperm
-* Pointer to an array of int, with nout elements. For each output
-* coordinate, the corresponding element of this array should contain the
-* (zero-based) index of the input coordinate whose value is to be used.
-* (Note that this array therefore defines the forward coordinate
-* transformation.) If a NULL value is supplied, the corresponding input
-* coordinate value is used (or AST__BAD if there is no corresponding
-* input coordinate).
-*
-* For details of additional special values that may be used in this
-* array, see the description of the "constant" parameter.
-* constant
-* Pointer to an array of double, which contains optional values which
-* may be assigned to input and/or output coordinate values (instead of
-* deriving them from other coordinate values). If either of the
-* "inperm" or "outperm" arrays contains a negative value, it is used to
-* address this "constant" array (such that -1 addresses the first
-* element, -2 addresses the second element, etc.) and the value obtained
-* is used as the corresponding coordinate value. Care should be taken
-* to ensure that locations lying outside the extent of this array are
-* not accidentally addressed.
-*
-* If a NULL value is supplied for this parameter, the behaviour is as
-* if the constant array were of infinite length and filled with the
-* value AST__BAD.
-
-* Returned Value:
-* A pointer to the new PermMap.
-
-* Notes:
-* - This function does not attempt to ensure that the forward and inverse
-* transformations performed by the resulting PermMap are consistent in any
-* way. The caller is therefore free to define the permutation arrays to
-* achieve whatever effect is desired.
-* - If either of the "inperm" or "outperm" arrays contains a positive
-* value which does not identify a valid output/input coordinate (as
-* appropriate), then the value AST__BAD is assigned as the new coordinate
-* value.
-* - This function makes a copy of the contents of the arrays supplied.
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstPermMap *new; /* Pointer to new PermMap */
- int i; /* Loop counter for coordinates */
- int neg; /* Most negative permutation index */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitPermMapVtab( vtab, name );
-
-/* Initialise a Mapping structure (the parent class) as the first component
- within the PermMap structure, allocating memory if necessary. Specify that
- the Mapping should be defined in both the forward and inverse directions. */
- new = (AstPermMap *) astInitMapping( mem, size, 0,
- (AstMappingVtab *) vtab, name,
- nin, nout, 1, 1 );
-
- if ( astOK ) {
-
-/* Initialise the PermMap data. */
-/* ---------------------------- */
-/* Initialise the array pointers. */
- new->inperm = NULL;
- new->outperm = NULL;
- new->constant = NULL;
-
-/* If an "inperm" and/or "outperm" array has been supplied, allocate memory
- and store a copy. */
- if ( inperm ) new->inperm = astStore( NULL, inperm, sizeof( int ) *
- (size_t) nin );
- if ( outperm ) new->outperm = astStore( NULL, outperm, sizeof( int ) *
- (size_t) nout );
-
-/* If a "constant" array has been supplied, we must also store a copy of it,
- but must first determine how many of its elements we need. */
- if ( constant ) {
-
-/* Loop through the "inperm" array (if supplied) to find the most negative
- value it contains. This corresponds with the maximum index into the
- constant array. */
- neg = 0;
- if ( inperm ) {
- for ( i = 0; i < nin; i++ ) {
- if ( inperm[ i ] < neg ) neg = inperm[ i ];
- }
- }
-
-/* Also perform this process on the "outperm" array (if supplied). */
- if ( outperm ) {
- for ( i = 0; i < nout; i++ ) {
- if ( outperm[ i ] < neg ) neg = outperm[ i ];
- }
- }
-
-/* If a negative value was found, use its size to determine how many elements
- of the "constant" array to store in allocated memory. */
- if ( neg < 0 ) {
- new->constant = astStore( NULL, constant, sizeof( double ) *
- (size_t) (-neg) );
- }
- }
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) {
- new = astDelete( new );
- }
- }
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstPermMap *astLoadPermMap_( void *mem, size_t size,
- AstPermMapVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadPermMap
-
-* Purpose:
-* Load a PermMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "permmap.h"
-* AstPermMap *astLoadPermMap( void *mem, size_t size,
-* AstPermMapVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* PermMap loader.
-
-* Description:
-* This function is provided to load a new PermMap using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* PermMap structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a PermMap at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the PermMap is to be
-* loaded. This must be of sufficient size to accommodate the
-* PermMap data (sizeof(PermMap)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the PermMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the PermMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstPermMap) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new PermMap. If this is NULL, a pointer
-* to the (static) virtual function table for the PermMap class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "PermMap" is used instead.
-
-* Returned Value:
-* A pointer to the new PermMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Constants: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstPermMap *new; /* Pointer to the new PermMap */
- char key[ KEY_LEN + 1 ]; /* Buffer for keyword strings */
- int coord; /* Loop counter for coordinates */
- int iconst; /* Loop counter for constants */
- int in_cpy; /* Input coordinates obtained by copying? */
- int invert; /* Invert attribute value */
- int ival; /* Integer value */
- int nconst; /* Number of constants */
- int nin; /* Number of input coordinates */
- int nout; /* Number of output coordinates */
- int out_cpy; /* Output coordinates obtained by copying? */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this PermMap. In this case the
- PermMap belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstPermMap );
- vtab = &class_vtab;
- name = "PermMap";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitPermMapVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built PermMap. */
- new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "PermMap" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* Initialise the PermMap's pointers. */
- new->inperm = NULL;
- new->outperm = NULL;
- new->constant = NULL;
-
-/* Determine if the PermMap is inverted and obtain the "true" number
- of input and output coordinates by un-doing the effects of any
- inversion. */
- invert = astGetInvert( new );
- nin = !invert ? astGetNin( new ) : astGetNout( new );
- nout = !invert ? astGetNout( new ) : astGetNin( new );
-
-/* InCpy and OutCpy. */
-/* ----------------- */
-/* Obtain boolean values via the "InCpy" and "OutCpy" keywords which
- indicate if input/output coordinates should be obtained simply by
- copying the corresponding output/input coordinates. */
- in_cpy = astReadInt( channel, "incpy", 0 );
- out_cpy = astReadInt( channel, "outcpy", 0 );
-
-/* If coordinates are specified individually (not simply copied), then
- allocate memory for the coordinate permutation arrays. */
- if ( !in_cpy ) new->inperm = astMalloc( sizeof( int ) * (size_t) nin );
- if ( !out_cpy ) new->outperm = astMalloc( sizeof( int ) *
- (size_t) nout );
-
-/* If an error occurred, ensure that all allocated memory is freed. */
- if ( !astOK ) {
- if ( !in_cpy ) new->inperm = astFree( new->inperm );
- if ( !out_cpy ) new->outperm = astFree( new->outperm );
-
-/* Otherwise read data into these arrays... */
- } else {
-
-/* "inperm" array contents. */
-/* ------------------------ */
-/* If required, create a keyword for each element of the "inperm"
- array and read the element's value. */
- if ( !in_cpy ) {
- for ( coord = 0; coord < nin; coord++ ) {
- (void) sprintf( key, "in%d", coord + 1 );
- ival = astReadInt( channel, key, 0 );
-
-/* If the value is zero (indicating a "bad" coordinate), convert it to
- a (zero-based) coordinate number that doesn't exist. */
- if ( ival == 0 ) {
- ival = nout;
-
-/* If the coordinate reference is valid, convert to zero-based
- coordinate numbering for internal use. */
- } else if ( ival > 0 ) {
- ival--;
- }
-
-/* Store the value. */
- new->inperm[ coord ] = ival;
- }
- }
-
-/* "outperm" array contents. */
-/* ------------------------- */
-/* If required, create a keyword for each element of the "outperm"
- array and read the element's value. */
- if ( !out_cpy ) {
- for ( coord = 0; coord < nout; coord++ ) {
- (void) sprintf( key, "out%d", coord + 1 );
- ival = astReadInt( channel, key, 0 );
-
-/* If the value is zero (indicating a "bad" coordinate), convert it to
- a (zero-based) coordinate number that doesn't exist. */
- if ( ival == 0 ) {
- ival = nin;
-
-/* If the coordinate reference is valid, convert to zero-based
- coordinate numbering for internal use. */
- } else if ( ival > 0 ) {
- ival--;
- }
-
-/* Store the value. */
- new->outperm[ coord ] = ival;
- }
- }
-
-/* Number of constants. */
-/* -------------------- */
-/* Determine the number of constants and allocate memory to hold
- them. */
- nconst = astReadInt( channel, "nconst", 0 );
- if ( nconst < 0 ) nconst = 0;
- new->constant = astMalloc( sizeof( double ) * (size_t) nconst );
- if ( astOK ) {
-
-/* Constants. */
-/* ---------- */
-/* Create a keyword for each constant and read its value. */
- for ( iconst = 0; iconst < nconst; iconst++ ) {
- (void) sprintf( key, "con%d", iconst + 1 );
- new->constant[ iconst ] =
- astReadDouble( channel, key, AST__BAD );
- }
- }
- }
-
-/* If an error occurred, clean up by deleting the new PermMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new PermMap pointer. */
- return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-double *astGetConstants_( AstPermMap *this, int *status ){
- if( !astOK ) return NULL;
- return (**astMEMBER(this,PermMap,GetConstants))( this, status );
-}
-
-int *astGetInPerm_( AstPermMap *this, int *status ){
- if( !astOK ) return NULL;
- return (**astMEMBER(this,PermMap,GetInPerm))( this, status );
-}
-
-int *astGetOutPerm_( AstPermMap *this, int *status ){
- if( !astOK ) return NULL;
- return (**astMEMBER(this,PermMap,GetOutPerm))( this, status );
-}
-
-
-
-
-
-
diff --git a/ast-5.3-1/permmap.h b/ast-5.3-1/permmap.h
deleted file mode 100644
index f6b9949..0000000
--- a/ast-5.3-1/permmap.h
+++ /dev/null
@@ -1,309 +0,0 @@
-#if !defined( PERMMAP_INCLUDED ) /* Include this file only once */
-#define PERMMAP_INCLUDED
-/*
-*+
-* Name:
-* permmap.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the PermMap class.
-
-* Invocation:
-* #include "permmap.h"
-
-* Description:
-* This include file defines the interface to the PermMap class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The PermMap class implements Mappings that perform permutation
-* of the order of coordinate values, possibly also accompanied by
-* changes in the number of coordinates (between input and output).
-*
-* In addition to permuting the coordinate order, coordinates may
-* also be assigned constant values which are unrelated to other
-* coordinate values. This facility is useful when the number of
-* coordinates is being increased, as it allows fixed values to be
-* assigned to the new coordinates.
-
-* Inheritance:
-* The PermMap class inherits from the Mapping class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* None.
-
-* Methods Over-Ridden:
-* Public:
-* None.
-*
-* Protected:
-* astTransform
-* Transform a set of points.
-
-* New Methods Defined:
-* Public:
-* None.
-*
-* Protected:
-* astGetConstants
-* Obtain a copy of the constants array
-* astGetInPerm
-* Obtain a copy of the input permutation array
-* astGetOutPerm
-* Obtain a copy of the output permutation array
-
-* Other Class Functions:
-* Public:
-* astIsAPermMap
-* Test class membership.
-* astPermMap
-* Create a PermMap.
-*
-* Protected:
-* astCheckPermMap
-* Validate class membership.
-* astInitPermMap
-* Initialise a PermMap.
-* astInitPermMapVtab
-* Initialise the virtual function table for the PermMap class.
-* astLoadPermMap
-* Load a PermMap.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstPermMap
-* PermMap object type.
-*
-* Protected:
-* AstPermMapVtab
-* PermMap virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 29-FEB-1996 (RFWS):
-* Original version.
-* 26-SEP-1996 (RFWS):
-* Added external interface and I/O facilities.
-* 8-JAN-2003 (DSB):
-* Changed private InitVtab method to protected astInitPermMapVtab
-* method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* PermMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each
- object in the class (e.g. its instance variables). */
-typedef struct AstPermMap {
-
-/* Attributes inherited from the parent class. */
- AstMapping mapping; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- int *inperm; /* Pointer to input permutation array */
- int *outperm; /* Pointer to output permutation array */
- double *constant; /* Pointer to array of constant values */
-} AstPermMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstPermMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstMappingVtab mapping_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- double *(* GetConstants)( AstPermMap *, int * );
- int *(* GetInPerm)( AstPermMap *, int * );
- int *(* GetOutPerm)( AstPermMap *, int * );
-
-} AstPermMapVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstPermMapGlobals {
- AstPermMapVtab Class_Vtab;
- int Class_Init;
-} AstPermMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitPermMapGlobals_( AstPermMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(PermMap) /* Check class membership */
-astPROTO_ISA(PermMap) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstPermMap *astPermMap_( int, const int [], int, const int [],
- const double [], const char *, int *, ...);
-#else
-AstPermMap *astPermMapId_( int, const int [], int, const int [],
- const double [], const char *, ... )__attribute__((format(printf,6,7)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstPermMap *astInitPermMap_( void *, size_t, int, AstPermMapVtab *,
- const char *, int, const int [], int,
- const int [], const double [], int * );
-
-/* Vtab initialiser. */
-void astInitPermMapVtab_( AstPermMapVtab *, const char *, int * );
-
-/* Loader. */
-AstPermMap *astLoadPermMap_( void *, size_t, AstPermMapVtab *,
- const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS) /* Protected */
-double *astGetConstants_( AstPermMap *, int * );
-int *astGetInPerm_( AstPermMap *, int * );
-int *astGetOutPerm_( AstPermMap *, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckPermMap(this) astINVOKE_CHECK(PermMap,this,0)
-#define astVerifyPermMap(this) astINVOKE_CHECK(PermMap,this,1)
-
-/* Test class membership. */
-#define astIsAPermMap(this) astINVOKE_ISA(PermMap,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astPermMap astINVOKE(F,astPermMap_)
-#else
-#define astPermMap astINVOKE(F,astPermMapId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitPermMap(mem,size,init,vtab,name,nin,inperm,nout,outperm,constant) \
-astINVOKE(O,astInitPermMap_(mem,size,init,vtab,name,nin,inperm,nout,outperm,constant,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitPermMapVtab(vtab,name) astINVOKE(V,astInitPermMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadPermMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadPermMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckPermMap to validate PermMap pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-#define astGetConstants(this) astINVOKE(V,astGetConstants_(astCheckPermMap(this),STATUS_PTR))
-#define astGetInPerm(this) astINVOKE(V,astGetInPerm_(astCheckPermMap(this),STATUS_PTR))
-#define astGetOutPerm(this) astINVOKE(V,astGetOutPerm_(astCheckPermMap(this),STATUS_PTR))
-#endif
-
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/pg3d.h b/ast-5.3-1/pg3d.h
deleted file mode 100644
index be73bc4..0000000
--- a/ast-5.3-1/pg3d.h
+++ /dev/null
@@ -1,68 +0,0 @@
-#if !defined( PG3D_INCLUDED ) /* Include this file only once */
-#define PG3D_INCLUDED
-/*
-*+
-* Name:
-* pg3d.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the pg3d module
-
-* Invocation:
-* #include "pg3d.h"
-
-* Description:
-* This include file defines the interface to the pg3d module
-* (implemented in file grf3d_pgplot.c) and provides the type
-* definitions, function prototypes and macros, etc. needed to
-* use this module.
-*
-* The functions in the pg3d interface provide control of the view
-* of the 3D world coordinate system visible on the 2D PGPLOT
-* viewport. They are provided for users of the PGPLOT implementation
-* of the grf3D interface distributed with AST. No calls to these
-* functions are made from within AST itself.
-
-* Copyright:
-* Copyright (C) 2007 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (JACH - UCLan)
-
-* History:
-* 20-JUN-2007 (DSB):
-* Original version.
-*-
-*/
-
-int PG3DRotateEye( int, float );
-int PG3DSetCamera( float[3], float[3], float[3], float );
-int PG3DSetEye( float[3] );
-int PG3DSetTarget( float[3] );
-int PG3DSetUp( float[3] );
-int PG3DSetScreen( float );
-int PG3DForward( float );
-int PG3DAutoCamera( float[3], float[3] );
-int PG3DFindNearest( int, float *, float *, float *, int * );
-
-#endif
diff --git a/ast-5.3-1/plot.c b/ast-5.3-1/plot.c
deleted file mode 100644
index 999ba9d..0000000
--- a/ast-5.3-1/plot.c
+++ /dev/null
@@ -1,30746 +0,0 @@
-/*
-*class++
-* Name:
-* Plot
-
-* Purpose:
-* Provide facilities for 2D graphical output.
-
-* Constructor Function:
-c astPlot
-f AST_PLOT
-
-* Description:
-* This class provides facilities for producing 2D graphical output.
-* A Plot is a specialised form of FrameSet, in which the base
-* Frame describes a "graphical" coordinate system and is
-* associated with a rectangular plotting area in the underlying
-* graphics system. This plotting area is where graphical output
-* appears. It is defined when the Plot is created.
-*
-* The current Frame of a Plot describes a "physical" coordinate
-* system, which is the coordinate system in which plotting
-* operations are specified. The results of each plotting operation
-* are automatically transformed into graphical coordinates so as
-* to appear in the plotting area (subject to any clipping which
-* may be in effect).
-*
-* Because the Mapping between physical and graphical coordinates
-* may often be non-linear, or even discontinuous, most plotting
-* does not result in simple straight lines. The basic plotting
-* element is therefore not a straight line, but a geodesic curve
-c (see astCurve, astGenCurve and astPolyCurve). A Plot also provides facilities for
-c drawing markers or symbols (astMark), text (astText) and grid lines
-c (astGridLine). It is also possible to draw curvilinear axes with
-c optional coordinate grids (astGrid).
-f (see AST_CURVE, AST_GENCURVE and AST_POLYCURVE). A Plot also provides facilities
-f for drawing markers or symbols (AST_MARK), text (AST_TEXT) and grid
-f lines (AST_GRIDLINE). It is also possible to draw curvilinear axes
-f with optional coordinate grids (AST_GRID).
-* A range of Plot attributes is available to allow precise control
-* over the appearance of graphical output produced by these
-c functions.
-f routines.
-*
-* You may select different physical coordinate systems in which to
-* plot (including the native graphical coordinate system itself)
-* by selecting different Frames as the current Frame of a Plot,
-* using its Current attribute. You may also set up clipping (see
-c astClip) to limit the extent of any plotting you perform, and
-f AST_CLIP) to limit the extent of any plotting you perform, and
-* this may be done in any of the coordinate systems associated
-* with the Plot, not necessarily the one you are plotting in.
-*
-* Like any FrameSet, a Plot may also be used as a Frame. In this
-* case, it behaves like its current Frame, which describes the
-* physical coordinate system.
-*
-* When used as a Mapping, a Plot describes the inter-relation
-* between graphical coordinates (its base Frame) and physical
-* coordinates (its current Frame). It differs from a normal
-* FrameSet, however, in that an attempt to transform points which
-* lie in clipped areas of the Plot will result in bad coordinate
-* values (AST__BAD).
-
-* Inheritance:
-* The Plot class inherits from the FrameSet class.
-
-* Attributes:
-* In addition to those attributes common to all FrameSets, every
-* Plot also has the following attributes:
-*
-* - Abbrev: Abbreviate leading fields?
-* - Border: Draw a border around valid regions of a Plot?
-* - Clip: Clip lines and/or markers at the Plot boundary?
-* - ClipOp: Combine Plot clipping limits using a boolean OR?
-* - Colour(element): Colour index for a Plot element
-* - DrawAxes(axis): Draw axes for a Plot?
-* - DrawTitle: Draw a title for a Plot?
-* - Escape: Allow changes of character attributes within strings?
-* - Edge(axis): Which edges to label in a Plot
-* - Font(element): Character font for a Plot element
-* - Gap(axis): Interval between linearly spaced major axis values
-* - Grf: Select the graphics interface to use.
-* - Grid: Draw grid lines for a Plot?
-* - Invisible: Draw graphics in invisible ink?
-* - LabelAt(axis): Where to place numerical labels for a Plot
-* - LabelUnits(axis): Use axis unit descriptions in a Plot?
-* - LabelUp(axis): Draw numerical Plot labels upright?
-* - Labelling: Label and tick placement option for a Plot
-* - LogGap(axis): Interval between logarithmically spaced major axis values
-* - LogPlot(axis): Map the plot onto the screen logarithmically?
-* - LogTicks(axis): Space the major tick marks logarithmically?
-* - MajTickLen(axis): Length of major tick marks for a Plot
-* - MinTickLen(axis): Length of minor tick marks for a Plot
-* - MinTick(axis): Density of minor tick marks for a Plot
-* - NumLab(axis): Draw numerical axis labels for a Plot?
-* - NumLabGap(axis): Spacing of numerical axis labels for a Plot
-* - Size(element): Character size for a Plot element
-* - Style(element): Line style for a Plot element
-* - TextLab(axis): Draw descriptive axis labels for a Plot?
-* - TextLabGap(axis): Spacing of descriptive axis labels for a Plot
-* - TickAll: Draw tick marks on all edges of a Plot?
-* - TitleGap: Vertical spacing for a Plot title
-* - Tol: Plotting tolerance
-* - Width(element): Line width for a Plot element
-
-* Functions:
-c In addition to those functions applicable to all FrameSets, the
-c following functions may also be applied to all Plots:
-f In addition to those routines applicable to all FrameSets, the
-f following routines may also be applied to all Plots:
-*
-c - astBorder: Draw a border around valid regions of a Plot
-c - astBoundingBox: Returns a bounding box for previously drawn graphics
-c - astClip: Set up or remove clipping for a Plot
-c - astCurve: Draw a geodesic curve
-c - astGenCurve: Draw a generalized curve
-c - astGetGrfContext: Get the graphics context for a Plot
-c - astGrfPop: Retrieve previously saved graphics functions
-c - astGrfPush: Save the current graphics functions
-c - astGrfSet: Register a graphics routine for use by a Plot
-c - astGrid: Draw a set of labelled coordinate axes
-c - astGridLine: Draw a grid line (or axis) for a Plot
-c - astMark: Draw a set of markers for a Plot
-c - astPolyCurve: Draw a series of connected geodesic curves
-c - astText: Draw a text string for a Plot
-f - AST_BORDER: Draw a border around valid regions of a Plot
-f - AST_BOUNDINGBOX: Returns a bounding box for previously drawn graphics
-f - AST_CLIP: Set up or remove clipping for a Plot
-f - AST_CURVE: Draw a geodesic curve
-f - AST_GENCURVE: Draw a generalized curve
-f - AST_GETGRFCONTEXT: Get the graphics context for a Plot
-f - AST_GRFPOP: Retrieve previously saved graphics functions
-f - AST_GRFPUSH: Save the current graphics functions
-f - AST_GRFSET: Register a graphics routine for use by the Plot class
-f - AST_GRID: Draw a set of labelled coordinate axes
-f - AST_GRIDLINE: Draw a grid line (or axis) for a Plot
-f - AST_MARK: Draw a set of markers for a Plot
-f - AST_POLYCURVE: Draw a series of connected geodesic curves
-f - AST_TEXT: Draw a text string for a Plot
-
-* Graphical Elements:
-* The colour index, character font, character size, line style and
-* line width used for plotting can be set independently for
-* various elements of the graphical output produced by a Plot.
-* The different graphical elements are identified by appending the
-* strings listed below as subscripts to the Plot attributes
-* Colour(element), Font(element), Size(element), Style(element)
-* and Width(element). These strings are case-insensitive and
-* unambiguous abbreviations may be used. Elements of the graphical
-* output which relate to individual axes can be referred to either
-* independently (e.g. "(Grid1)" and "(Grid2)" ) or together (e.g.
-* "(Grid)"):
-*
-c - Axes: Axis lines drawn through tick marks using astGrid
-f - Axes: Axis lines drawn through tick marks using AST_GRID
-c - Axis1: Axis line drawn through tick marks on axis 1 using astGrid
-f - Axis1: Axis line drawn through tick marks on axis 1 using AST_GRID
-c - Axis2: Axis line drawn through tick marks on axis 2 using astGrid
-f - Axis2: Axis line drawn through tick marks on axis 2 using AST_GRID
-c - Border: The Plot border drawn using astBorder or astGrid
-f - Border: The Plot border drawn using AST_BORDER or AST_GRID
-c - Curves: Geodesic curves drawn using astCurve, astGenCurve or astPolyCurve
-f - Curves: Geodesic curves drawn using AST_CURVE, AST_GENCURVE or AST_POLYCURVE
-c - Grid: Grid lines drawn using astGridLine or astGrid
-f - Grid: Grid lines drawn using AST_GRIDLINE or AST_GRID
-c - Grid1: Grid lines which cross axis 1, drawn using astGridLine or astGrid
-f - Grid1: Grid lines which cross axis 1, drawn using AST_GRIDLINE or AST_GRID
-c - Grid2: Grid lines which cross axis 2, drawn using astGridLine or astGrid
-f - Grid2: Grid lines which cross axis 2, drawn using AST_GRIDLINE or AST_GRID
-c - Markers: Graphical markers (symbols) drawn using astMark
-f - Markers: Graphical markers (symbols) drawn using AST_MARK
-c - NumLab: Numerical axis labels drawn using astGrid
-f - NumLab: Numerical axis labels drawn using AST_GRID
-c - NumLab1: Numerical labels for axis 1 drawn using astGrid
-f - NumLab1: Numerical labels for axis 1 drawn using AST_GRID
-c - NumLab2: Numerical labels for axis 2 drawn using astGrid
-f - NumLab2: Numerical labels for axis 2 drawn using AST_GRID
-c - Strings: Text strings drawn using astText
-f - Strings: Text strings drawn using AST_TEXT
-c - TextLab: Descriptive axis labels drawn using astGrid
-f - TextLab: Descriptive axis labels drawn using AST_GRID
-c - TextLab1: Descriptive label for axis 1 drawn using astGrid
-f - TextLab1: Descriptive label for axis 1 drawn using AST_GRID
-c - TextLab2: Descriptive label for axis 2 drawn using astGrid
-f - TextLab2: Descriptive label for axis 2 drawn using AST_GRID
-c - Ticks: Tick marks (both major and minor) drawn using astGrid
-f - Ticks: Tick marks (both major and minor) drawn using AST_GRID
-c - Ticks1: Tick marks (both major and minor) for axis 1 drawn using astGrid
-f - Ticks1: Tick marks (both major and minor) for axis 1 drawn using AST_GRID
-c - Ticks2: Tick marks (both major and minor) for axis 2 drawn using astGrid
-f - Ticks2: Tick marks (both major and minor) for axis 2 drawn using AST_GRID
-c - Title: The Plot title drawn using astGrid
-f - Title: The Plot title drawn using AST_GRID
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2009 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 18-SEP-1996 (DSB):
-* Original version.
-* 25-FEB-1997 (RFWS):
-* Tidied all public prologues.
-* 18-AUG-1997 (DSB):
-* Changes made to ensure that the first label on each axis is
-* never abbreviated, and to avoid segmentation violation when NumLab
-* is set to zero.
-* 1-SEP-1997 (DSB):
-* astGetGap changed so that it returns the default value which will
-* be used (instead of AST__BAD) if no value has been set for Gap.
-* The Border attribute modified so that it is off (zero) by default.
-* 19-SEP-1997 (DSB):
-* o Check that something has been plotted before using the bounding
-* box to determine title and label positions.
-* o Fixed bug which caused a tick mark at the pole to be draw at
-* a random angle.
-* o The size of the increment used to determine the tangent to a grid
-* line at the position to a label has been reduced to make sure the
-* labls are drawn parallel to grid line.
-* o Correct the logic for catering with reversed axes when determining
-* the displacement of a label's reference point from the associated
-* axis.
-* o Corrected logic which determined if two numerical labels overlap.
-* o Corrected logic for determining when to abbreviate numerical
-* labels.
-* o Use of strtok replaced by local function FindWord.
-* o Correct logic which determines which side of the axis to draw
-* tick marks when using interior labelling.
-* o If the base Frame of the FrameSet supplied to astPlot has more
-* than 2 axes, then use a sub-frame formed from the first two axes,
-* instead of simply reporting an error.
-* o If the current Frame of the Plot supplied to astGrid or
-* astBorder has more than 2 axes, then use a sub-frame formed from
-* the first two axes, instead of simply reporting an error.
-* o Default for Border is now to draw the border if exterior
-* Labelling is used, but not to draw it if interior labelling is
-* used.
-* o Public astGet function now returns actual used values for all
-* attributes. Protected astGetXyz functions still return the requested
-* value (which may differ from the used value), or the "unset" value
-* if no value has been set for the attribute.
-* o The defaults for Edge now depend on Labelling. If exterior
-* labelling was requested but cannot be produced using defaults of
-* Edge(1)=Bottom and Edge(2)=Left, then these default Edge values
-* are swapped. If exterior labelling is still not possible, the
-* original default Edge values are re-instated.
-* o Unset attributes which use dynamic defaults are now flagged as
-* "unhelpful" in the dump function.
-* o Added attribute Escape which allows text strings to include
-* escape sequences (see function GrText). This attribute and
-* associated functionality is currently not available for use, search
-* for all occurences of ENABLE-ESCAPE for instructions on how to
-* enable the facilities.
-* o Strings now used instead of integers to represent "choice"
-* attributes externally (eg Edge and Labelling).
-* 24-NOV-1997 (DSB):
-* o Fixed bug in function Grid which caused units to be included in
-* SkyFrame axis labels by default.
-* o Replaced calls to DrawText by calls to astGText, and replaced
-* references to "U" and "D" justifications by "T" and "B". This
-* stops labels drifting to the bottom left when GAIA zooms.
-* 23-MAR-1998 (DSB):
-* Added extra checks on global status into routine Grid to avoid
-* segmentation violations occuring due to null pointers being used.
-* 10-JUN-1998 (DSB):
-* Modify DrawTicks so that ticks are drawn closer to singularities
-* than previously. Also normalise this constraint to the screen size
-* rather than the length of a major tick mark.
-* 28-OCT-1998 (DSB):
-* o Added method astPolyCurve.
-* o Extract the Current Frame from the Plot prior to using Frame
-* methods such as astOffset, astNorm, etc.
-* o PlotLabel modified to ensure labels are abbreviated even if
-* they are next to the "root" label (i.e. the label with most
-* trailing zeros).
-* o Modified description of Width attribute. Width no longer gives
-* the absolute line width in inches. Instead it is a scale factor,
-* where 1.0 corresponds to a "typical thin line" on the device.
-* o Modified LabelUnits attribute so that the default value is zero
-* for SkyAxes and non-zero for other Axes.
-* 10-DEC-1998 (DSB):
-* Modified all calls to the "pow" maths function to avoid using
-* literal constants as arguments. This seems to cause segmentation
-* violations on some systems.
-* 16-JUL-1999 (DSB):
-* Fixed memory leaks in EdgeCrossings and EdgeLabels.
-* 16-SEP-1999 (DSB):
-* Avoid writing out clipping limits if they are undefined.
-* 12-OCT-1999 (DSB):
-* o Modified use of the NumLab attribute so that setting it to zero
-* does not prevent exterior labels from being produced.
-* o Allow length of tick marks to be specified separately for
-* both axes.
-* 13-OCT-2000 (DSB):
-* o Purge zero length sections from CurveData structures.
-* o Increase tolerance for edge labels from 0.0005 to 0.005.
-* 9-JAN-2001 (DSB):
-* o Change argument "in" for astMark and astPolyCurve from type
-* "const double (*)[]" to "const double *".
-* o Check success of astReadString before using the returned
-* pointer.
-* o Change method for choosing default LabelAt values to ignore
-* values which produce no visible labels.
-* 10-JAN-2001 (DSB):
-* o Modified FindMajTick to choose the size of fillable holes in
-* the axis range on the basis of the number of ticks on the axis.
-* This avoids holes being visible in the displayed tick marks when
-* using very small gaps.
-* 22-MAY-2001 (DSB):
-* Added a check when using interior labelling, to ensure that the
-* most appropriate edges are used for text labels.
-* 13-JUN-2001 (DSB):
-* Added public method astGenCurve, astGrfSet, astGrfPop, astGrfPush.
-* Made DrawAxes attribute axis specific.
-* 4-JUL-2001 (DSB):
-* The Crv function used to have a restriction that if *any*
-* subsection was very short, then *none* of the subsections were
-* subdivided. This meant that long subsections which needed
-* subdividing were not subdivided if there was also a very short
-* subsection. To get round this problem the restriction was changed
-* to "if *all* subsections are very short then none are divided.
-* This was implemented by changing dl2_min to dl2_max, and adding
-* a check for very short segments (which are then not sub-divided).
-* 16-AUG-2001 (DSB):
-* Remove the check for very short segments introduced above, as it
-* caused south pole tan projection to include some spurious lines.
-* 20-SEP-2001 (DSB):
-* - Initialize baseframe to NULL in astInitPlot (prevents segvios).
-* - Modified astInitPlot to allow the "frame" argument to the astPlot
-* constructor to be a Plot.
-* 10-JAN-2002 (DSB):
-* - Added axis-specific graphical elements "axis1", "axis2", etc.
-* - FullForm returns a match without ambiguity if the test string
-* matches an option exactly, including length.
-* 31-JAN-2002 (DSB):
-* - Added RejectOOB to reject tick marks which are not in their primary
-* domain.
-* 14-FEB-2002 (DSB):
-* - Relaxed the conditions for equality within the EQUALS macro.
-* Guard aginst no ticks being found.
-* 18-FEB-2002 (DSB):
-* - Make a permanent copy of any old axis format string in TickMarks.
-* Previously a mere pointer into the astGet string buffer was stored,
-* which could be over-written after many calls to astGet.
-* - If a user specifies an axis format, use it whether or not it
-* results in any identical adjacent labels.
-* 4-MAR-2002 (DSB):
-* - Made fairly extesive changes to the creation and use of tick
-* mark values in order to circumvent problems with CAR projections,
-* and "1 to many" mappings (such as 2D cartesian->polar). The
-* policy now is that axis normalization is only performed when
-* necessary (i.e. to create labels for display, etc). Tick mark
-* values are stored and handled as non-normalized values as much as
-* possible.
-* 13-JUN-2002 (DSB):
-* Modified Norm1 to prevent major tick value from being removed if
-* the supplied reference value is out of bounds, resulting in the
-* Mapping producing bad values
-* 14-JUN-2002 (DSB):
-* Re-wrote PlotLabels to improve abbreviation of labels and the
-* choice of which labels not to print.
-* 14-AUG-2002 (DSB):
-* - Added method astBoundingBox.
-* - Added attribute Invisible.
-* - Correct handling of "axis specific" plot elements cuch as
-* (Axis1), (Axis2), etc.
-* 12-SEP-2002 (DSB):
-* - Modified Map1 to remove slow normalization method (it is now
-* faster but the changes result in some longer-than-needed grids
-* lines when (e.g.) plotting pixel coordins in Polar coords).
-* - Modified Axlot so that SkyFrames positions which are out of
-* their normal ranges are not rejected by Map1.
-* 10-OCT-2002 (DSB):
-* grfAttrs:Modified to test element attributes explicitly using the
-* relevant TestUse<attr> functions, instead of relying on the
-* "GetUse<attr>" function returning the NO<attr> constant if not set.
-* - Modified Axplot so that SkyFrames positions which are out of
-* their normal ranges are not rejected by Map1.
-* - Only use tick marks which are within the axis range given by the
-* Bottom and Top Axis attributes.
-* - Norm1: If the normalized current frame coords are bad, do not
-* reinstate the original unnormalized values. For instance, current
-* Frame values which are outside the valid domain of the projection
-* should result in bad values when normalized, not the original
-* good values. The original comment stated "If the normalization
-* produced bad coords (e.g. as may happen if the supplied refernce
-* value corresponds to a point on the line through the tick mark
-* which is outside the valid region of the mapping) leave the original
-* tick mark values unchanged".
-* - GetTicks: Limit maxticks to be no less than 8.
-* 8-JAN-2003 (DSB):
-* - Changed private InitVtab method to protected astInitPlotVtab
-* method.
-* - Use private IsASkyFrame method in place of astIsASkyFrame.
-* - Modify PlotLabels to excluding exponents when counting trailing
-* zeros, and also to pad trailing fields with trailing zeros up to
-* the max number of decimal places when estimating label priorities.
-* - Modified Overlap to ensure that axis labels are speced by at
-* least two spaces.
-* 22-JAN-2003 (DSB):
-* - Modified PlotLabels so that labels are rejected in a regular
-* pattern rather than semi-random.
-* - Modified the way PlotLabels abbreviates leading fields.
-* - Introdued the skipbad parameter for the Crv function, in order
-* to provide some degree of protection against the Crv algorithm
-* skipping over small sections of valid coordinates (such as when
-* a curve crosses the plot very close to a corner of the plot).
-* 25-MAR-2003 (DSB):
-* - Modified FindMajTicks to avoid losing tick marks when dealing
-* with high precision data.
-* 8-AUG-2003 (DSB):
-* - Modified PlotLabels to ensure that the root label for the
-* second axis is not omitted due to it overlapping a label from
-* the first axis (a different root label is now chosen if this would
-* be the case).
-* - Modify FindMajTicks to avoid tick marks which should be at
-* exactly zero being placed at some very small non-zero axis value.
-* 22-OCT-2003 (DSB):
-* - DrawTicks modified to correctly reset graphical attributes and
-* pass on to the next axis if an axis has zero length major and minor
-* tick marks.
-* 9-JAN-2004 (DSB):
-* DrawGrid: Report error if no grid curves can be drawn.
-* AxPlot: Initialise returned CDATA structure before checking argument
-* validity.
-* GetTicks: Calculate the reference value on the other axis using
-* function "Typical" rather than simply using the man of the supplied
-* values (the supplied values may be clustered around 0 and 2*PI if the
-* field is centred on the origin, resulting in the mean being at about
-* 1.PI and therefore inappropriate).
-* 13-JAN-2004 (DSB):
-* - Added LogPlot attribute, and the facility for mapping the base
-* coordinate system logarithmically onto the plotting area instead of
-* linearly.
-* - Added LogTicks attribute, and the facility for spacing the
-* major tick marks logarithmically instead of linearly.
-* - Added LogGap attribute, and the facility for storing separate
-* gap sizes for linear and log tick spacing.
-* 15-JAN-2004 (DSB):
-* - Added LogLabel attribute.
-* - Re-instated the inclusion of escape sequences in strings (see
-* function GrText).
-* 12-FEB-2004 (DSB):
-* - RightVector: Corrected usage of chh and chv.
-* - GQch and GScales: Check that values returned by grf module are
-* usable.
-* - DrawAxis: Extend axis section by one section (if possible) at
-* each end (overcomes problems where the axis does not reach a pole).
-* - DrawAxis: Check axis does not extend beyond a pole.
-* - Labels: Correct logic of loop which plots interior labels
-* (previously it missed out labels if there were only 3)
-* - Allow for some rounding error in FindMajTicks when comparing an
-* axis value with a loweror upper axis limit.
-* 19-FEB-2004 (DSB):
-* - Reduced the dynamic range restriction for log ticks from 2 decades
-* to 1.
-* - Temporarily clear any error status before re-instating the
-* original Format in TickMarks.
-* - Add LogTicks to the GetAttrib function so that the value of the
-* LogTicks attribute can be got by the public.
-* - Modify Crv to include a check that he vector scale has not
-* changed much between adjacent segments.
-* - Modify Crv so that a segment is only subdivided if at least
-* half of the subsegments are longer than the shortest significant
-* length. Also put a restriction on subdivision so that
-* subdivision only occurs if the bounding box of the segment being
-* sub-divided is smaller than the bounding box of its parent
-* segment.
-* 27-FEB-2004 (DSB):
-* - Reduce the default Tol value from 0.001 to 0.01 in order to
-* speed up curve drawing..
-* - Use 0.1*Tol in Boundary because the boundary tracing algorithm
-* seems to produce much worse visible errors than it should do for a
-* given Tol.
-* 2-MAR-2004 (DSB):
-* - Corrected handling of bounding boxes in Crv so that
-* subdivision is allowed if the bounding box shrinks on only 1 axis
-* (previously required shrinkage on both axes but this fails if
-* all the points are on a horizontal or vertical line).
-* - Modified FindMajTicks to use a better algorithm for finding an
-* appropriate nfill value (previously logplot=1 axes could have
-* unfilled holes at the high end).
-* - Modified GetTicks so that FindMajTicks is not called
-* repeatedly with the same gap size.
-* - Modify AxPlot/Map1 so that the axis curve is sampled logarithmically
-* if the corresponding axis is mapped logarithmically.
-* 10-MAR-2004 (DSB):
-* - Modified Typical to give less weight to vaalues close to the
-* edges of the range covered by the plotting area.
-* - Increased minimum angle between curve and edge required to
-* create an edge label from 3 degs to 5 degs.
-* - Modified PlotLabels to ignore duplicate adjacent labels which
-* determining overlap of labels.
-* 17-MAR-2004 (DSB):
-* - Modified Typical to give normal weight to edge bins in
-* histogram if these bins contain all the counts.
-* - Modified DrawTicks to add extra minor ticks below first major
-* tick value and above last major tick value.
-* - Norm1 can reject usable tick mark values because of an
-* inappropriate value being used on the other axis (i.e. one for
-* which the position is undefined in grapics coords). Therfoer
-* Norm1 has been modified to use 3 different reference values
-* in an attempt to find one which gives good axis values.
-* 25-AUG-2004 (DSB):
-* - Correct handling of "fmt" pointer in TickMarks function (identified
-* and reported by Bill Joye).
-* 14-SEP-2004 (DSB):
-* - In EdgeLabels change definition of "distinct labels". Used to
-* be that labels were distinct if they had different formatted
-* labels. Now they are distinct if they have different floating
-* point numerical values. Fixes a bug reported by Micah Johnson.
-* - TickMarks re-structured to optimise the precision (no. of digits)
-* even if a value has been assigned for the Format attribute, but only
-* if the format specifier includes a wildcard precision specifier. For
-* instance, to get graphical separators a format must be specified
-* which included the "g" flag. As things were, this would prevent
-* the optimisation of the digits value. Can now use "dms.*g" to
-* allow the number of digits to be optimised.
-* 29-SEP-2004 (DSB):
-* - In FindMajTicks, begin the process of increasing "nfill" from
-* a value of zero rather than one (in many cases no filling is
-* needed).
-* - In GetTicks (linear tick marks section) ensure that 10
-* *different* gap sizes are used before giving up. Previously, the
-* 10 tests could include duplicated gap values.
-* 8-NOV-2004 (DSB):
-* - In Norm1, try more alternative "other axis" values before
-* accepting that a tick mark value cannot be normalised.
-* 2-FEB-2005 (DSB):
-* - Avoid using astStore to allocate more storage than is supplied
-* in the "data" pointer. This can cause access violations since
-* astStore will then read beyond the end of the "data" area.
-* 15-MAR-2005 (DSB):
-* - Modified GridLines to use appropriate algorithm for choosing
-* start of grid lines in cases where one axis has logarithmic tick
-* spacing and the other has linear tick spacing.
-* 21-MAR-2005 (DSB):
-* - Added the Clip attribute.
-* 12-JUL-2005 (DSB):
-* - Modified AxPlot so that Map1 only normalises if neither axis
-* is a SkyAxis. Previously it normalised if either axis was not a
-* SkyAxis.
-* 7-DEC-2005 (DSB):
-* Free memory allocated by calls to astReadString.
-* 18-JAN-2006 (DSB)
-* Add Abbrev attribute.
-* 14-FEB-2006 (DSB)
-* Correct EdgeLabels to use gap size rather than EQUAL macro when
-* comparing label values.
-* 17-FEB-2006 (DSB)
-* Added escape sequences "%h+" and "%g+".
-* 21-MAR-2006 (DSB)
-* Added extra status checks in TickMarks.
-* 18-MAY-2006 (DSB)
-* Trans: use correct PointSet when tranforming to arbitrary
-* clipping frame.
-* 26-MAY-2006 (DSB)
-* Added LabelAt to TestAttrib.
-* 2-JUN-2006 (DSB)
-* - In MAKE_GET2, return the set value if a value has been set
-* without recalculating the defaults.
-* - Fix bug that could cause segvio in Grid if clipping is used.
-* 5-JUN-2006 (DSB)
-* Do not change the box returned by astBoundBox as a consequence
-* of calling astGetAttrib.
-* 19-JUN-2006 (DSB)
-* Changed the default line 0.0 from zero to 1.0.
-* 22-JUN-2006 (DSB)
-* Include axis textual labels and title in the bounding box
-* created by AST_GRID and returned by AST_BOUNDINGBOX.
-* 26-JUN-2006 (DSB)
-* Set the Direction attribute in the base Frame of a Plot if an
-* axis is reversed.
-* 29-JUN-2006 (DSB)
-* - Guard against astGap calls that reach a minimum gap size.
-* - Sort out splitting of long axis labels (such as date/time
-* strings produced by TimeFrames).
-* 30-JUN-2006 (DSB)
-* If abbreviating labels, display the last field for identical
-* neighbours rather than the whole value.
-* 10-JUL-2006 (DSB)
-* Make astStripEscapes public so it can be used by the NDF library.
-* 7-AUG-2006 (DSB)
-* Increase the number of attempts to find a new gap size from 5 to
-* 25 in GetTicks.
-* 24-OCT-2006 (DSB)
-* Add the ForceExterior attribute so that SPLAT can have external
-* axes even if there are no usable horizontal axis ticks (as requested
-* by PWD). Currently this attribute is not included in the public
-* documentation, as it may cause problems. If it seems to work OK
-* then it can be made public.
-* 25-JAN-2006 (DSB)
-* Do not draw ticks marks that start outside the bounds of the
-* axis they are labelling.
-* 27-FEB-2007 (DSB)
-* - Change nominal Crv_scerr value from 5.0 to 1.5 (this avoids gaps
-* in HPX grid plots being bridged by grid lines).
-* - Double the dimension of the grid used by GoodGrid to avoid
-* missing the pointy bits in a HPX projection.
-* 17-MAY-2007 (DSB)
-* Exclude corner positions when determining the range of axis
-* values covered by the plot. This gives better default gap sizes.
-* 11-JUN-2007 (DSB)
-* Plug memory leaks.
-* 20-JUN-2007 (DSB)
-* - Add attribute GrfContext.
-* - Pass the GrfContext attribute value to each external grf function.
-* External code that uses the astGrfSet function must be changed
-* so that the external grf functions registered using astGrfSet
-* accept this new parameter.
-* 21-JUN-2007 (DSB)
-* - Change GrfContext to be an Object rather than an integer.
-* 22-JUN-2007 (DSB)
-* - Do not dump the GrfContext Object since it may cause an
-* infinite dumping loop.
-* - Allow a NULL vtab to be supplied when initialising a Plot
-* structure. This causes the vtab defined locally within this
-* class to be used so that the new object behaves as a simple Plot.
-* 25-JUN-2007 (DSB)
-* - Free the graphics context object when then the Plot is deleted.
-* - Fix memory leak in FullForm.
-* - Since the grfcontext object is only used by external code, store
-* a public object identifier for it in the Plot structure rather
-* than a true C pointer.
-* 26-JUN-2007 (DSB)
-* Honour the LabelUp attribute value even if labels are drawn
-* around the edges of the plot.
-* 28-JUN-2007 (DSB)
-* - Make all axis attribute arrays 3 elements long rather than 2.
-* - Add the protected methods astCopyPlotDefaults and astMirror.
-* - Add public method astGetGrfContext, remove astSetGrfContext.
-* - Fix memory leak.
-* 6-SEP-2007 (DSB):
-* Dump and load any user-specified tick mark values.
-* 20-OCT-2009 (DSB):
-* - Modify SplitValue so that it only splits long values if
-* previous long values were split, or if the value contains a
-* space.
-* - Take account of zero height bounding boxes in UpdateConcat.
-* - Correct Dump so that it dumps attributes for all available
-* axes (2 for a Plot, 3 for a Plot3D).
-* 12-JAN-2010 (DSB):
-* Fix various memory leaks.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to the header
- files that define class interfaces that they should make "protected"
- symbols available. */
-#define astCLASS Plot
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macros to check for equality of floating point values. */
-#define EQUAL(aa,bb) (fabs((aa)-(bb))<=1.0E8*DBL_EPSILON*MAX(fabs(aa)+fabs(bb),DBL_EPSILON*1.0E-7))
-
-/* Values for constants used in this class. */
-#define CRV_NSEG 14 /* No. of curve segments drawn by function Crv */
-#define CRV_NPNT 15 /* CRV_NSEG plus one */
-#define CRV_MXENT 10 /* Max. no. of recursive entries into function Crv */
-#define MAJTICKS_OPT 10 /* Optimum number of major axiss or grid lines */
-#define MAJTICKS_MAX 14 /* Max. number of major ticks or grid lines */
-#define MAJTICKS_MIN 6 /* Min. number of major ticks or grid lines */
-#define EDGETICKS_DIM 100 /* No. of edge samples used to find tick marks */
-#define LEFT 0 /* Id for the left edge of the plotting area */
-#define TOP 1 /* Id for the top edge of the plotting area */
-#define RIGHT 2 /* Id for the right edge of the plotting area */
-#define BOTTOM 3 /* Id for the bottom edge of the plotting area */
-#define NOSTYLE -999 /* A value which represents a null Style value */
-#define NOWIDTH -99.9 /* A value which represents a null Style value */
-#define NOFONT -999 /* A value which represents a null Style value */
-#define NOCOLOUR -999 /* A value which represents a null Style value */
-#define NOSIZE -99.9 /* A value which represents a null Style value */
-
-#if defined(THREAD_SAFE)
-#define GLOBALS_PROTO , AstGlobals *
-#define GLOBALS_ARG , AstGlobals *AST__GLOBALS
-#define GLOBALS_NAME , AST__GLOBALS
-#else
-#define GLOBALS_PROTO
-#define GLOBALS_ARG
-#define GLOBALS_NAME
-#endif
-
-/*
-*
-* Name:
-* MAKE_CLEAR
-
-* Purpose:
-* Implement a method to clear a single value in a multi-valued attribute.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "plot.h"
-* MAKE_CLEAR(attr,component,assign,nval)
-
-* Class Membership:
-* Defined by the Plot class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Clear<Attribute>( AstPlot *this, int axis )
-*
-* and an external interface function of the form:
-*
-* void astClear<Attribute>_( AstPlot *this, int axis )
-*
-* which implement a method for clearing a single value in a specified
-* multi-valued attribute for an axis of a Plot.
-
-* Parameters:
-* attr
-* The name of the attribute to be cleared, as it appears in the function
-* name (e.g. LabelAt in "astClearLabelAt").
-* component
-* The name of the class structure component that holds the attribute
-* value.
-* assign
-* An expression that evaluates to the value to assign to the component
-* to clear its value.
-* nval
-* Specifies the number of values in the multi-valued attribute. The
-* "axis" values supplied to the created function should be in the
-* range zero to (nval - 1). If a value of 0 is supplied, the
-* value of the Plot's Nin attribute is used instead.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attr,component,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attr( AstPlot *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Validate the axis index. */ \
- if( axis < 0 || axis >= ( nval ? nval : astGetNin( this ) ) ){ \
- astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
- #attr " - it should be in the range 1 to %d.", status, \
- "astClear" #attr, astGetClass( this ), \
- axis + 1, ( nval ? nval : astGetNin( this ) ) ); \
-\
-/* Assign the "clear" value. */ \
- } else { \
- this->component[ axis ] = (assign); \
- } \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astClear##attr##_( AstPlot *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
- (**astMEMBER(this,Plot,Clear##attr))( this, axis, status ); \
-}
-
-
-/*
-*
-* Name:
-* MAKE_GET
-
-* Purpose:
-* Implement a method to get a single value in a multi-valued attribute.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "plot.h"
-* MAKE_GET(attr,type,bad_value,assign,nval)
-
-* Class Membership:
-* Defined by the Plot class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static <Type> Get<Attribute>( AstPlot *this, int axis )
-*
-* and an external interface function of the form:
-*
-* <Type> astGet<Attribute>_( AstPlot *this, int axis )
-*
-* which implement a method for getting a single value from a specified
-* multi-valued attribute for an axis of a Plot.
-
-* Parameters:
-* attr
-* The name of the attribute whose value is to be obtained, as it
-* appears in the function name (e.g. Label in "astGetLabel").
-* type
-* The C type of the attribute.
-* bad_value
-* A constant value to return if the global error status is set, or if
-* the function fails.
-* assign
-* An expression that evaluates to the value to be returned. This can
-* use the string "axis" to represent the zero-based value index.
-* nval
-* Specifies the number of values in the multi-valued attribute. The
-* "axis" values supplied to the created function should be in the
-* range zero to (nval - 1). If a value of 0 is supplied, the
-* value of the Plot's Nin attribute is used instead.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_GET(attr,type,bad_value,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static type Get##attr( AstPlot *this, int axis, int *status ) { \
- type result; /* Result to be returned */ \
-\
-/* Initialise */ \
- result = (bad_value); \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* Validate the axis index. */ \
- if( axis < 0 || axis >= ( nval ? nval : astGetNin( this ) ) ){ \
- astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
- #attr " - it should be in the range 1 to %d.", status, \
- "astGet" #attr, astGetClass( this ), \
- axis + 1, ( nval ? nval : astGetNin( this ) ) ); \
-\
-/* Assign the result value. */ \
- } else { \
- result = (assign); \
- } \
-\
-/* Check for errors and clear the result if necessary. */ \
- if ( !astOK ) result = (bad_value); \
-\
-/* Return the result. */ \
- return result; \
-} \
-/* External interface. */ \
-/* ------------------- */ \
-type astGet##attr##_( AstPlot *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return (bad_value); \
-\
-/* Invoke the required method via the virtual function table. */ \
- return (**astMEMBER(this,Plot,Get##attr))( this, axis, status ); \
-}
-
-/*
-*
-* Name:
-* MAKE_SET
-
-* Purpose:
-* Implement a method to set a single value in a multi-valued attribute
-* for a Plot.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "plot.h"
-* MAKE_SET(attr,type,component,assign,nval)
-
-* Class Membership:
-* Defined by the Plot class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Set<Attribute>( AstPlot *this, int axis, <Type> value )
-*
-* and an external interface function of the form:
-*
-* void astSet<Attribute>_( AstPlot *this, int axis, <Type> value )
-*
-* which implement a method for setting a single value in a specified
-* multi-valued attribute for a Plot.
-
-* Parameters:
-* attr
-* The name of the attribute to be set, as it appears in the function
-* name (e.g. LabelAt in "astSetLabelAt").
-* type
-* The C type of the attribute.
-* component
-* The name of the class structure component that holds the attribute
-* value.
-* assign
-* An expression that evaluates to the value to be assigned to the
-* component.
-* nval
-* Specifies the number of values in the multi-valued attribute. The
-* "axis" values supplied to the created function should be in the
-* range zero to (nval - 1). If a value of 0 is supplied, the
-* value of the Plot's Nin attribute is used instead.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attr,type,component,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attr( AstPlot *this, int axis, type value, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Validate the axis index. */ \
- if( axis < 0 || axis >= ( nval ? nval : astGetNin( this ) ) ){ \
- astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
- #attr " - it should be in the range 1 to %d.", status, \
- "astSet" #attr, astGetClass( this ), \
- axis + 1, ( nval ? nval : astGetNin( this ) ) ); \
-\
-/* Store the new value in the structure component. */ \
- } else { \
- this->component[ axis ] = (assign); \
- } \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astSet##attr##_( AstPlot *this, int axis, type value, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
- (**astMEMBER(this,Plot,Set##attr))( this, axis, value, status ); \
-}
-
-/*
-*
-* Name:
-* MAKE_TEST
-
-* Purpose:
-* Implement a method to test if a single value has been set in a
-* multi-valued attribute for a class.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "plot.h"
-* MAKE_TEST(attr,assign,nval)
-
-* Class Membership:
-* Defined by the Plot class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static int Test<Attribute>( AstPlot *this, int axis )
-*
-* and an external interface function of the form:
-*
-* int astTest<Attribute>_( AstPlot *this, int axis )
-*
-* which implement a method for testing if a single value in a specified
-* multi-valued attribute has been set for a class.
-
-* Parameters:
-* attr
-* The name of the attribute to be tested, as it appears in the function
-* name (e.g. LabelAt in "astTestLabelAt").
-* assign
-* An expression that evaluates to 0 or 1, to be used as the returned
-* value. This can use the string "axis" to represent the zero-based
-* index of the value within the attribute.
-* nval
-* Specifies the number of values in the multi-valued attribute. The
-* "axis" values supplied to the created function should be in the
-* range zero to (nval - 1). If a value of 0 is supplied, the
-* value of the Plot's Nin attribute is used instead.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_TEST(attr,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static int Test##attr( AstPlot *this, int axis, int *status ) { \
- int result; /* Value to return */ \
-\
-/* Initialise */ \
- result = 0; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* Validate the axis index. */ \
- if( axis < 0 || axis >= ( nval ? nval : astGetNin( this ) ) ){ \
- astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
- #attr " - it should be in the range 1 to %d.", status, \
- "astTest" #attr, astGetClass( this ), \
- axis + 1, ( nval ? nval : astGetNin( this ) ) ); \
-\
-/* Assign the result value. */ \
- } else { \
- result = (assign); \
- } \
-\
-/* Check for errors and clear the result if necessary. */ \
- if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
- return result; \
-} \
-/* External interface. */ \
-/* ------------------- */ \
-int astTest##attr##_( AstPlot *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return 0; \
-\
-/* Invoke the required method via the virtual function table. */ \
- return (**astMEMBER(this,Plot,Test##attr))( this, axis, status ); \
-}
-
-/*
-*
-* Name:
-* MAKE_GET3
-
-* Purpose:
-* Implement a method to get a single value in a multi-valued attribute.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* MAKE_GET3(attr,attr,type,bad_value,assign,nval)
-
-* Class Membership:
-* Defined by the Plot class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static <Type> Get<Attribute>( AstPlot *this, int axis )
-*
-* which implements a method for getting a single value from a specified
-* multi-valued attribute for an axis of a Plot. Note, no public
-* interface function is created.
-*
-* The value returned is the value which would actually be used if
-* astGrid was called with the current set of Plot attributes. This
-* includes calculating any dynamic defaults which would be used, and is
-* consequently rather slow.
-
-* Parameters:
-* attr
-* The name of the attribute whose value is to be obtained, as it
-* appears in the function name (e.g. Label in "astGetLabel"). The
-* string "Used" is added on to the front of the supplied value.
-* type
-* The C type of the attribute.
-* bad_value
-* A constant value to return if the global error status is set, or if
-* the function fails.
-* assign
-* An expression that evaluates to the value to be returned. This can
-* use the string "axis" to represent the zero-based value index.
-* nval
-* Specifies the number of values in the multi-valued attribute. The
-* "axis" values supplied to the created function should be in the
-* range zero to (nval - 1). If a value of 0 is supplied, the
-* value of the Plot's Nin attribute is used instead.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_GET3(attr,type,bad_value,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static type GetUsed##attr( AstPlot *, int, int *status ); \
-static type GetUsed##attr( AstPlot *this, int axis, int *status ) { \
- type result; /* Result to be returned */ \
-\
-/* Initialise */ \
- result = (bad_value); \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* Validate the axis index. */ \
- if( axis < 0 || axis >= ( nval ? nval : astGetNin( this ) ) ){ \
- astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
- #attr " - it should be in the range 1 to %d.", status, \
- "astGetUsed" #attr, astGetClass( this ), \
- axis + 1, ( nval ? nval : astGetNin( this ) ) ); \
-\
-/* If the attribute is set, use its normal accessor. */\
- } else if( astTest##attr( this, axis ) ) {\
- result = astGet##attr( this, axis );\
-\
-/* Otherwise, re-calculate dynamic defaults by going through the motions of \
- drawing the grid. Nothing is actually drawn because we set the protected \
- attribute Ink to zero first. The calculated values are stored in the \
- Plot structure. */ \
- } else { \
- astSetInk( this, 0 ); \
- astGrid( this ); \
- astClearInk( this ); \
-\
-/* Assign the result value. */ \
- result = (assign); \
- } \
-\
-/* Check for errors and clear the result if necessary. */ \
- if ( !astOK ) result = (bad_value); \
-\
-/* Return the result. */ \
- return result; \
-}
-
-/*
-*
-* Name:
-* MAKE_SET3
-
-* Purpose:
-* Implement a method to set a single value in a multi-valued attribute
-* for a Plot. This is identical to MAKE_SET except that no external
-* interface function is created.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* MAKE_SET3(attr,type,component,assign,nval)
-
-* Class Membership:
-* Defined by the Plot class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Set<Attribute>( AstPlot *this, int axis, <Type> value )
-*
-* which implements a method for setting a single value in a specified
-* multi-valued attribute for a Plot.
-
-* Parameters:
- * attr
-* The name of the attribute whose value is to be obtained, as it
-* appears in the function name (e.g. Label in "astSetLabel"). The
-* string "Used" is added on to the front of the supplied value.
-* type
-* The C type of the attribute.
-* component
-* The name of the class structure component that holds the attribute
-* value.
-* assign
-* An expression that evaluates to the value to be assigned to the
-* component.
-* nval
-* Specifies the number of values in the multi-valued attribute. The
-* "axis" values supplied to the created function should be in the
-* range zero to (nval - 1). If a value of 0 is supplied, the
-* value of the Plot's Nin attribute is used instead.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_SET3(attr,type,component,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void SetUsed##attr( AstPlot *, int, type, int *status ); \
-static void SetUsed##attr( AstPlot *this, int axis, type value, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Validate the axis index. */ \
- if( axis < 0 || axis >= ( nval ? nval : astGetNin( this ) ) ){ \
- astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
- #attr " - it should be in the range 1 to %d.", status, \
- "astSetUsed" #attr, astGetClass( this ), \
- axis + 1, ( nval ? nval : astGetNin( this ) ) ); \
-\
-/* Store the new value in the structure component. */ \
- } else { \
- this->component[ axis ] = (assign); \
- } \
-}
-
-/*
-*+
-* Name:
-* MAKE_GET2
-
-* Purpose:
-* Implement a method to get an attribute value for a class.
-
-* Type:
-* Protected macro.
-
-* Synopsis:
-* MAKE_GET2(class,attr,type,bad_value,assign)
-
-* Class Membership:
-* Defined by the Plot class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static <Type> GetUsed<Attr>( AstPlot *this )
-*
-* which implement a method for getting a specified attribute value for a
-* class. Note, no public interface function is created.
-*
-* The value returned is the value which would actually be used if
-* astGrid was called with the current set of Plot attributes. This
-* includes calculating any dynamic defaults which would be used, and is
-* consequently rather slow.
-
-* Parameters:
-* class
-* The name (not the type) of the class to which the attribute belongs.
-* attr
-* The name of the attribute whose value is to be obtained, as it
-* appears in the function name (e.g. Label in "astGetLabel"). The
-* string "Used" is added on to the front of the supplied value.
-* type
-* The C type of the attribute.
-* bad_value
-* A constant value to return if the global error status is set, or if
-* the function fails.
-* assign
-* An expression that evaluates to the value to be returned.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_GET2(class,attr,type,bad_value,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static type GetUsed##attr( Ast##class *, int *status ); \
-static type GetUsed##attr( Ast##class *this, int *status ) { \
- type result; /* Result to be returned */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return (bad_value); \
-\
-/* If the attribute is set, use its normal accessor. */\
- if( astTest##attr( this ) ) {\
- result = astGet##attr( this );\
-\
-/* Otherwise, re-calculate dynamic defaults by going through the motions of \
- drawing the grid. Nothing is actually drawn because we set the protected \
- attribute Ink to zero first. The calculated values are stored in the \
- Plot structure. */ \
- } else { \
- astSetInk( this, 0 ); \
- astGrid( this ); \
- astClearInk( this ); \
-\
-/* Assign the result value. */ \
- result = (assign); \
- } \
-\
-/* Check for errors and clear the result if necessary. */ \
- if ( !astOK ) result = (bad_value); \
-\
-/* Return the result. */ \
- return result; \
-}
-
-/*
-*+
-* Name:
-* MAKE_SET2
-
-* Purpose:
-* Implement a method to set an attribute value for a class. This
-* is identical to astMAKE_SET except that it does not create an
-* external interface function, and it does create a private function
-* prototype.
-
-* Type:
-* Protected macro.
-
-* Synopsis:
-* MAKE_SET2(class,attr,type,component,assign)
-
-* Class Membership:
-* Defined by the Plot class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void SetUsed<Attr>( AstPlot *this, <Type> value )
-*
-* which implements a method for setting a specified attribute value for a
-* class.
-
-* Parameters:
-* class
-* The name (not the type) of the class to which the attribute belongs.
-* attr
-* The name of the attribute to be set, as it appears in the function
-* name (e.g. Label in "astSetLabel"). The string "Used" is added
-* to the front.
-* type
-* The C type of the attribute.
-* component
-* The name of the class structure component that holds the attribute
-* value.
-* assign
-* An expression that evaluates to the value to be assigned to the
-* component.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave
-* any white space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_SET2(class,attr,type,component,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void SetUsed##attr( Ast##class *, type, int *status ); \
-static void SetUsed##attr( Ast##class *this, type value, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Store the new value in the structure component. */ \
- this->component = (assign); \
-}
-
-
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-#include "channel.h" /* I/O channels */
-#include "cmpmap.h" /* Compound mapping class */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "frame.h" /* Coordinate frame descriptions */
-#include "frameset.h" /* Parent FrameSet class */
-#include "grf.h" /* Low-level graphics interface */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "plot.h" /* Interface definition for this class */
-#include "pointset.h" /* Class holding lists of positions */
-#include "keymap.h" /* Hash maps */
-#include "skyaxis.h" /* Sky coordinate axes */
-#include "skyframe.h" /* Sky coordinate frames */
-#include "winmap.h" /* Scale and shift mappings */
-#include "mathmap.h" /* Algebraic mappings */
-#include "wcsmap.h" /* FITS-WCS projectsions */
-#include "unitmap.h" /* Unit mappings */
-#include "permmap.h" /* Axis permutations */
-#include "region.h" /* Frame regions */
-#include "globals.h" /* Thread-safe global data access */
-
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <float.h>
-#include <math.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Module Type Definitions */
-/* ======================= */
-typedef struct LabelList {
- double index;
- char *text;
- double x;
- double y;
- char *just;
- double upx;
- double upy;
- double val;
- int priority;
- const char *atext;
- int saved_prio;
-} LabelList;
-
-/* Structure to hold static data used internally within the Crv function. */
-typedef struct CrvStatics {
- double *pdl2; /* Pointer to next squared segment length */
- double *pdx; /* Pointer to next segment X increment */
- double *pdy; /* Pointer to next segment Y increment */
- double cosang; /* Cosine of angle between adjacent segments */
- double d0; /* Distance to start of first sub-segment */
- double delta; /* Distance between adjacent sub-segments */
- double dl; /* Segment length in graphics coordinates */
- double dll; /* Segment length for previous segment */
- double last_x; /* Graphics X at the end of the previous segment */
- double last_y; /* Graphics Y at the end of the previous segment */
- double limit2; /* Shortest acceptable squared segment length */
- double t1; /* Increment in X */
- double t2; /* Increment in Y */
- double t3; /* Squared segment length */
- double vx; /* X component of unit vector for current segment */
- double vxl; /* X component of unit vector for previous segment */
- double vy; /* Y component of unit vector for current segment */
- double vyl; /* Y component of unit vector for previous segment */
- int *seg0; /* Pointer to current segment OK flag */
- int *segm; /* Pointer to previous segment OK flag */
- int *segp; /* Pointer to next segment OK flag */
- int all_bad; /* Are all supplied positions bad or clipped? */
- int el; /* Total sub-segment count */
- int j; /* Sub-segment index */
- int last_ok; /* Was the previous position defined? */
- int nel; /* Total number of sub-segments */
- int nlong; /* No.of segments longer than limit2 */
- int nseg; /* Number of segments being sub-divided */
- int nshort; /* No.of segments shorter than limit2 */
-
-#ifdef CRV_TRACE
- int levels[100];
-#endif
-
-} CrvStatics;
-
-/* Structure to hold static data used internally within the Crv function. */
-typedef struct GetTicksStatics {
- AstFrame *frame; /* Pointer to the current Frame */
- AstMapping *map; /* Pointer to Base->Current Mapping */
- AstPointSet *pset; /* Pointer to a PointSet holding physical coords */
- double **ptr; /* Pointer to physical coordinate values */
- double defgaps[ 2 ]; /* Initial test gaps for each axis */
- double typval[ 2 ]; /* Typical value on each axis */
- double width[ 2 ]; /* Range of used axis values */
- int maxticks; /* Max. number of ticks on each axis */
- int mintick; /* Min. number of ticks on each axis */
- int ngood[ 2 ]; /* No. of good physical values on each axis */
- int bad; /* Were any bad pixels found? */
-} GetTicksStatics;
-
-/* Structure to hold static data used internally within the EdgeCrossings
- function. */
-typedef struct EdgeCrossingsStatics {
- AstFrame *frame; /* Pointer to current Frame in Plot */
- AstPointSet *pset1; /* Graphics cooords at edge samples */
- AstPointSet *pset2; /* Physical cooords at edge samples */
- AstPointSet *pset4; /* Graphics cooords at offset edge samples */
- double **ptr1; /* Pointer to graphics coord. data */
- double **ptr2; /* Pointer to physical coord. data */
- double **ptr4; /* Pointer to graphics coord. data */
- double edgehi; /* High bound on varying graphics axis */
- double edgelo; /* Low bound on varying graphics axis */
- double edgeval; /* Constant graphics axis value along edge */
- double limit; /* Three times the RMS step size */
- int dim; /* Extended number of samples */
- int edgeax; /* Graphics axis to which edgeval refers */
- int paxis; /* Axis used in first invocation */
- int pedge; /* Edge used in first invocation */
-} EdgeCrossingsStatics;
-
-
-/* Structure to hold static data used internally within the Map1
- function. */
-typedef struct Map1Statics {
- AstPointSet *pset1; /* PointSet holding physical coords */
- AstPointSet *pset2; /* PointSet holding graphics coords */
- double **ptr1; /* Pointer to physical coord data */
- double *pax; /* Pointer to start of axis data */
- double *ptr2[ 2 ]; /* Pointers to graphics coord data */
- double *work1; /* Pointer to work space */
- double *work2; /* Pointer to work space */
- double axorig; /* Distance offset */
- double axscale; /* Distance scale */
- int neg; /* Negate axis values? */
- int nl; /* No. of points in pset1 and pset2 */
-} Map1Statics;
-
-/* Structure to hold static data used internally within the Map2
- function. */
-typedef struct Map2Statics {
- AstPointSet *pset1; /* PointSet holding graphics coords */
- AstPointSet *pset2; /* PointSet holding physical coords */
- double **ptr2; /* Pointer to physical coord data */
- double *ptr1[ 2 ]; /* Pointers to graphics coord data */
- int nl; /* No. of points in pset1 and pset2 */
-} Map2Statics;
-
-/* Structure to hold static data used internally within the Map3
- function. */
-typedef struct Map3Statics {
- AstPointSet *pset1; /* PointSet holding physical coords */
- AstPointSet *pset2; /* PointSet holding graphics coords */
- double **ptr1; /* Pointer to physical coord data */
- double *ptr2[ 2 ]; /* Pointers to graphics coord data */
- int nc; /* No. of physical axes */
- int nl; /* No. of points in pset1 and pset2 */
- double *pos; /* Pointer to memory for a single position */
-} Map3Statics;
-
-/* Structure to hold static data used internally within the Map4
- function. */
-typedef struct Map4Statics {
- AstPointSet *pset1; /* PointSet holding distances */
- AstPointSet *pset2; /* PointSet holding physical coords */
- AstPointSet *pset3; /* PointSet holding graphics coords */
- int nl; /* No. of points in pset1 and pset2 */
-} Map4Statics;
-
-/* Structure to hold static data used internally within the Map5
- function. */
-typedef struct Map5Statics {
- AstPointSet *pset1; /* PointSet holding physical coords */
- AstPointSet *pset2; /* PointSet holding graphics coords */
- double **ptr1; /* Pointer to physical coord data */
- double *ptr2[ 2 ]; /* Pointers to graphics coord data */
- int nl; /* No. of points in pset1 and pset2 */
-} Map5Statics;
-
-/* Structure to hold information about tick marks for a single axis. */
-typedef struct TickInfo{
- int nmajor; /* No. of major tick marks */
- int nminor; /* No. of minor tick marks */
- double *ticks; /* Pointer to array of major tick mark values */
- double *minticks; /* Pointer to array of minor tick mark values */
- char **labels; /* Pointer to array of major tick mark labels */
- double *start; /* Start pos'n on other axis for each curve section */
- double *length; /* Length on other axis of each curve section */
- int nsect; /* No. of sections in curve */
- char *fmt; /* Pointer to format string used to create labels */
- double gap; /* The gap between major ticks */
-} TickInfo;
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static void (* parent_removeframe)( AstFrameSet *, int, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int,
- AstPointSet *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Strings giving the label for the graphics items corresponding to
- AST__BORDER_ID, AST__GRIDLINE_ID, etc. */
-static char *GrfLabels = "Border Curves Title Markers Strings Axis1 Axis2 Axis3 "
- "NumLab1 NumLab2 NumLab3 TextLab1 TextLab2 TextLab3 "
- "Ticks1 Ticks2 Ticks3 Grid1 Grid2 Grid3 Axes NumLab "
- "TextLab Grid Ticks";
-
-/* Text values used to represent edges externally. */
-static const char *xedge[4] = { "left", "top", "right", "bottom" };
-
-/* Text values used to represent Labelling externally. */
-static const char *xlbling[2] = { "interior", "exterior" };
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->GrfAttrs_nesting_t = 0; \
- globals->Crv_nent_t = 0; \
- globals->Box_lbnd_t[ 0 ] = FLT_MAX; \
- globals->Box_ubnd_t[ 0 ] = FLT_MIN; \
- globals->Boxp_lbnd_t[ 0 ] = FLT_MAX; \
- globals->Boxp_ubnd_t[ 0 ] = FLT_MIN; \
- globals->Box_lbnd_t[ 1 ] = FLT_MAX; \
- globals->Box_ubnd_t[ 1 ] = FLT_MIN; \
- globals->Boxp_lbnd_t[ 1 ] = FLT_MAX; \
- globals->Boxp_ubnd_t[ 1 ] = FLT_MIN; \
- globals->Boxp_freeze_t = 0; \
- globals->Map1_plot_t = NULL; \
- globals->Map1_map_t = NULL; \
- globals->Map1_frame_t = NULL; \
- globals->Map1_origin_t = NULL; \
- globals->Map1_statics_t = NULL; \
- globals->Map2_plot_t = NULL; \
- globals->Map2_map_t = NULL; \
- globals->Map2_statics_t = NULL; \
- globals->Map3_plot_t = NULL; \
- globals->Map3_map_t = NULL; \
- globals->Map3_frame_t = NULL; \
- globals->Map3_origin_t = NULL; \
- globals->Map3_end_t = NULL; \
- globals->Map3_statics_t = NULL; \
- globals->Map4_plot_t = NULL; \
- globals->Map4_map_t = NULL; \
- globals->Map4_umap_t = NULL; \
- globals->Map4_statics_t = NULL; \
- globals->Map5_plot_t = NULL; \
- globals->Map5_region_t = NULL; \
- globals->Map5_map_t = NULL; \
- globals->Map5_statics_t = NULL; \
- globals->Poly_n_t = 0; \
- globals->Curve_data_t.nbrk = -1; \
- globals->GetAttrib_Buff[ 0 ] = 0; \
- globals->SplitValue_Buff[ 0 ] = 0; \
- globals->StripEscapes_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Plot)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Plot,Class_Init)
-#define class_vtab astGLOBAL(Plot,Class_Vtab)
-#define grfattrs_nesting astGLOBAL(Plot,GrfAttrs_nesting_t)
-#define grfattrs_attrs astGLOBAL(Plot,GrfAttrs_attrs_t)
-#define Crv_limit astGLOBAL(Plot,Crv_limit_t)
-#define Crv_scerr astGLOBAL(Plot,Crv_scerr_t)
-#define Crv_tol astGLOBAL(Plot,Crv_tol_t)
-#define Crv_ux0 astGLOBAL(Plot,Crv_ux0_t)
-#define Crv_uy0 astGLOBAL(Plot,Crv_uy0_t)
-#define Crv_vxl astGLOBAL(Plot,Crv_vxl_t)
-#define Crv_vyl astGLOBAL(Plot,Crv_vyl_t)
-#define Crv_xhi astGLOBAL(Plot,Crv_xhi_t)
-#define Crv_xl astGLOBAL(Plot,Crv_xl_t)
-#define Crv_xlo astGLOBAL(Plot,Crv_xlo_t)
-#define Crv_yhi astGLOBAL(Plot,Crv_yhi_t)
-#define Crv_yl astGLOBAL(Plot,Crv_yl_t)
-#define Crv_ylo astGLOBAL(Plot,Crv_ylo_t)
-#define Crv_vxbrk astGLOBAL(Plot,Crv_vxbrk_t)
-#define Crv_vybrk astGLOBAL(Plot,Crv_vybrk_t)
-#define Crv_xbrk astGLOBAL(Plot,Crv_xbrk_t)
-#define Crv_ybrk astGLOBAL(Plot,Crv_ybrk_t)
-#define Crv_len astGLOBAL(Plot,Crv_len_t)
-#define Crv_ink astGLOBAL(Plot,Crv_ink_t)
-#define Crv_nbrk astGLOBAL(Plot,Crv_nbrk_t)
-#define Crv_nent astGLOBAL(Plot,Crv_nent_t)
-#define Crv_out astGLOBAL(Plot,Crv_out_t)
-#define Crv_clip astGLOBAL(Plot,Crv_clip_t)
-#define Crv_map astGLOBAL(Plot,Crv_map_t)
-#define Box_lbnd astGLOBAL(Plot,Box_lbnd_t)
-#define Box_ubnd astGLOBAL(Plot,Box_ubnd_t)
-#define Boxp_lbnd astGLOBAL(Plot,Boxp_lbnd_t)
-#define Boxp_ubnd astGLOBAL(Plot,Boxp_ubnd_t)
-#define Boxp_freeze astGLOBAL(Plot,Boxp_freeze_t)
-#define Poly_x astGLOBAL(Plot,Poly_x_t)
-#define Poly_y astGLOBAL(Plot,Poly_y_t)
-#define Poly_n astGLOBAL(Plot,Poly_n_t)
-#define Map1_ncoord astGLOBAL(Plot,Map1_ncoord_t)
-#define Map1_plot astGLOBAL(Plot,Map1_plot_t)
-#define Map1_map astGLOBAL(Plot,Map1_map_t)
-#define Map1_frame astGLOBAL(Plot,Map1_frame_t)
-#define Map1_origin astGLOBAL(Plot,Map1_origin_t)
-#define Map1_length astGLOBAL(Plot,Map1_length_t)
-#define Map1_axis astGLOBAL(Plot,Map1_axis_t)
-#define Map1_statics astGLOBAL(Plot,Map1_statics_t)
-#define Map1_norm astGLOBAL(Plot,Map1_norm_t)
-#define Map1_log astGLOBAL(Plot,Map1_log_t)
-#define Map2_ncoord astGLOBAL(Plot,Map2_ncoord_t)
-#define Map2_plot astGLOBAL(Plot,Map2_plot_t)
-#define Map2_map astGLOBAL(Plot,Map2_map_t)
-#define Map2_x0 astGLOBAL(Plot,Map2_x0_t)
-#define Map2_y0 astGLOBAL(Plot,Map2_y0_t)
-#define Map2_deltax astGLOBAL(Plot,Map2_deltax_t)
-#define Map2_deltay astGLOBAL(Plot,Map2_deltay_t)
-#define Map2_statics astGLOBAL(Plot,Map1_statics_t)
-#define Map3_ncoord astGLOBAL(Plot,Map3_ncoord_t)
-#define Map3_plot astGLOBAL(Plot,Map3_plot_t)
-#define Map3_map astGLOBAL(Plot,Map3_map_t)
-#define Map3_frame astGLOBAL(Plot,Map3_frame_t)
-#define Map3_origin astGLOBAL(Plot,Map3_origin_t)
-#define Map3_end astGLOBAL(Plot,Map3_end_t)
-#define Map3_scale astGLOBAL(Plot,Map3_scale_t)
-#define Map3_statics astGLOBAL(Plot,Map3_statics_t)
-#define Map4_ncoord astGLOBAL(Plot,Map4_ncoord_t)
-#define Map4_plot astGLOBAL(Plot,Map4_plot_t)
-#define Map4_map astGLOBAL(Plot,Map4_map_t)
-#define Map4_umap astGLOBAL(Plot,Map4_umap_t)
-#define Map4_statics astGLOBAL(Plot,Map4_statics_t)
-#define Map5_plot astGLOBAL(Plot,Map5_plot_t)
-#define Map5_region astGLOBAL(Plot,Map5_region_t)
-#define Map5_map astGLOBAL(Plot,Map5_map_t)
-#define Map5_ncoord astGLOBAL(Plot,Map5_ncoord_t)
-#define Map5_statics astGLOBAL(Plot,Map5_statics_t)
-#define Curve_data astGLOBAL(Plot,Curve_data_t)
-#define getattrib_buff astGLOBAL(Plot,GetAttrib_Buff)
-#define splitvalue_buff astGLOBAL(Plot,SplitValue_Buff)
-#define stripescapes_buff astGLOBAL(Plot,StripEscapes_Buff)
-
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX2 pthread_mutex_lock( &mutex2 );
-#define UNLOCK_MUTEX2 pthread_mutex_unlock( &mutex2 );
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-/* Variables used within astGrfAttrs_ */
-static double grfattrs_attrs[ GRF__NATTR ]; /* Saved attribute values */
-static int grfattrs_nesting = 0; /* Nesting level. */
-
-/* Variables used to pass information to the curve drawing functions. See
- the prologues of functions Crv and CrvLine for details. */
-static double Crv_limit;
-static double Crv_scerr;
-static double Crv_tol;
-static double Crv_ux0;
-static double Crv_uy0;
-static double Crv_vxl;
-static double Crv_vyl;
-static double Crv_xhi;
-static double Crv_xl;
-static double Crv_xlo;
-static double Crv_yhi;
-static double Crv_yl;
-static double Crv_ylo;
-static float *Crv_vxbrk;
-static float *Crv_vybrk;
-static float *Crv_xbrk;
-static float *Crv_ybrk;
-static float Crv_len;
-static int Crv_ink;
-static int Crv_nbrk;
-static int Crv_nent = 0;
-static int Crv_out;
-static int Crv_clip;
-static void (*Crv_map)( int, double *, double *, double *, const char *, const char *, int * );
-
-/* The lower and upper bounds of the graphics coordinates enclosing all
- lines and numerical labels drawn by astGrid. */
-static float Box_lbnd[ 2 ] = {FLT_MAX, FLT_MAX };
-static float Box_ubnd[ 2 ] = {FLT_MIN, FLT_MIN };
-
-/* The lower and upper bounds of the graphics coordinates enclosing all
- drawn graphics primatives, maintained by functions GLine, GMark and
- DrawText. */
-static float Boxp_lbnd[ 2 ] = {FLT_MAX, FLT_MAX };
-static float Boxp_ubnd[ 2 ] = {FLT_MIN, FLT_MIN };
-static int Boxp_freeze = 0;
-
-/* Variables used to stored buffered poly lines (see functions Opoly, Bpoly
- and Apoly). */
-static float Poly_x[ AST__PLOT_POLY_MAX ];
-static float Poly_y[ AST__PLOT_POLY_MAX ];
-static int Poly_n = 0;
-
-/* Variables used by function Map1. See the prologue of Map1 for details. */
-static int Map1_ncoord;
-static AstPlot *Map1_plot = NULL;
-static AstMapping *Map1_map = NULL;
-static AstFrame *Map1_frame = NULL;
-static const double *Map1_origin = NULL;
-static double Map1_length;
-static void *Map1_statics = NULL;
-static int Map1_axis;
-static int Map1_norm;
-static int Map1_log;
-
-/* Variables used by function Map2. See the prologue of Map2 for details. */
-static int Map2_ncoord;
-static AstPlot *Map2_plot = NULL;
-static AstMapping *Map2_map = NULL;
-static double Map2_x0;
-static double Map2_y0;
-static double Map2_deltax;
-static double Map2_deltay;
-static void *Map2_statics = NULL;
-
-/* Variables used by function Map3. See the prologue of Map3 for details. */
-static int Map3_ncoord;
-static AstPlot *Map3_plot = NULL;
-static AstMapping *Map3_map = NULL;
-static AstFrame *Map3_frame = NULL;
-static const double *Map3_origin = NULL;
-static const double *Map3_end = NULL;
-static double Map3_scale;
-static void *Map3_statics = NULL;
-
-/* Variables used by function Map4. See the prologue of Map4 for details. */
-static int Map4_ncoord;
-static AstPlot *Map4_plot = NULL;
-static AstMapping *Map4_map = NULL;
-static AstMapping *Map4_umap = NULL;
-static void *Map4_statics = NULL;
-
-/* Variables used by function Map5. See the prologue of Map5 for details. */
-static AstPlot *Map5_plot = NULL;
-static AstMapping *Map5_map = NULL;
-static AstRegion *Map5_region = NULL;
-static void *Map5_statics = NULL;
-static int Map5_ncoord;
-
-/* A structure which stores information about the breaks in the last curve
- drawn using the public methods "astGridLine" and "astCurve". */
-static AstPlotCurveData Curve_data;
-
-/* Buffers for strings returned by various functions. */
-static char splitvalue_buff[ 200 ];
-static char stripescapes_buff[ AST__PLOT_STRIPESCAPES_BUFF_LEN + 1 ];
-static char getattrib_buff[ 200 ];
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstPlotVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-
-#endif
-
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-
-static double GetTol( AstPlot *, int * );
-static int TestTol( AstPlot *, int * );
-static void ClearTol( AstPlot *, int * );
-static void SetTol( AstPlot *, double, int * );
-
-static int GetGrid( AstPlot *, int * );
-static int TestGrid( AstPlot *, int * );
-static void ClearGrid( AstPlot *, int * );
-static void SetGrid( AstPlot *, int, int * );
-
-static int GetTickAll( AstPlot *, int * );
-static int TestTickAll( AstPlot *, int * );
-static void ClearTickAll( AstPlot *, int * );
-static void SetTickAll( AstPlot *, int, int * );
-
-static int GetForceExterior( AstPlot *, int * );
-static int TestForceExterior( AstPlot *, int * );
-static void ClearForceExterior( AstPlot *, int * );
-static void SetForceExterior( AstPlot *, int, int * );
-
-static int GetBorder( AstPlot *, int * );
-static int TestBorder( AstPlot *, int * );
-static void ClearBorder( AstPlot *, int * );
-static void SetBorder( AstPlot *, int, int * );
-
-static int GetInvisible( AstPlot *, int * );
-static int TestInvisible( AstPlot *, int * );
-static void ClearInvisible( AstPlot *, int * );
-static void SetInvisible( AstPlot *, int, int * );
-
-static int GetInk( AstPlot *, int * );
-static int TestInk( AstPlot *, int * );
-static void ClearInk( AstPlot *, int * );
-static void SetInk( AstPlot *, int, int * );
-
-static int GetClipOp( AstPlot *, int * );
-static int TestClipOp( AstPlot *, int * );
-static void ClearClipOp( AstPlot *, int * );
-static void SetClipOp( AstPlot *, int, int * );
-
-static int GetClip( AstPlot *, int * );
-static int TestClip( AstPlot *, int * );
-static void ClearClip( AstPlot *, int * );
-static void SetClip( AstPlot *, int, int * );
-
-static int GetGrf( AstPlot *, int * );
-static int TestGrf( AstPlot *, int * );
-static void ClearGrf( AstPlot *, int * );
-static void SetGrf( AstPlot *, int, int * );
-
-static int GetDrawTitle( AstPlot *, int * );
-static int TestDrawTitle( AstPlot *, int * );
-static void ClearDrawTitle( AstPlot *, int * );
-static void SetDrawTitle( AstPlot *, int, int * );
-
-static int GetDrawAxes( AstPlot *, int, int * );
-static int TestDrawAxes( AstPlot *, int, int * );
-static void ClearDrawAxes( AstPlot *, int, int * );
-static void SetDrawAxes( AstPlot *, int, int, int * );
-
-static int GetAbbrev( AstPlot *, int, int * );
-static int TestAbbrev( AstPlot *, int, int * );
-static void ClearAbbrev( AstPlot *, int, int * );
-static void SetAbbrev( AstPlot *, int, int, int * );
-
-static int GetEscape( AstPlot *, int * );
-static int TestEscape( AstPlot *, int * );
-static void ClearEscape( AstPlot *, int * );
-static void SetEscape( AstPlot *, int, int * );
-
-static double GetLabelAt( AstPlot *, int, int * );
-static int TestLabelAt( AstPlot *, int, int * );
-static void ClearLabelAt( AstPlot *, int, int * );
-static void SetLabelAt( AstPlot *, int, double, int * );
-
-static double GetNumLabGap( AstPlot *, int, int * );
-static int TestNumLabGap( AstPlot *, int, int * );
-static void ClearNumLabGap( AstPlot *, int, int * );
-static void SetNumLabGap( AstPlot *, int, double, int * );
-
-static double GetTextLabGap( AstPlot *, int, int * );
-static int TestTextLabGap( AstPlot *, int, int * );
-static void ClearTextLabGap( AstPlot *, int, int * );
-static void SetTextLabGap( AstPlot *, int, double, int * );
-
-static double GetCentre( AstPlot *, int, int * );
-static int TestCentre( AstPlot *, int, int * );
-static void ClearCentre( AstPlot *, int, int * );
-static void SetCentre( AstPlot *, int, double, int * );
-
-static double GetGap( AstPlot *, int, int * );
-static int TestGap( AstPlot *, int, int * );
-static void ClearGap( AstPlot *, int, int * );
-static void SetGap( AstPlot *, int, double, int * );
-
-static int GetLabelling( AstPlot *, int * );
-static int TestLabelling( AstPlot *, int * );
-static void ClearLabelling( AstPlot *, int * );
-static void SetLabelling( AstPlot *, int, int * );
-
-static double GetMajTickLen( AstPlot *, int, int * );
-static int TestMajTickLen( AstPlot *, int, int * );
-static void ClearMajTickLen( AstPlot *, int, int * );
-static void SetMajTickLen( AstPlot *, int, double, int * );
-
-static double GetLogGap( AstPlot *, int, int * );
-static int TestLogGap( AstPlot *, int, int * );
-static void ClearLogGap( AstPlot *, int, int * );
-static void SetLogGap( AstPlot *, int, double, int * );
-
-static double GetTitleGap( AstPlot *, int * );
-static int TestTitleGap( AstPlot *, int * );
-static void ClearTitleGap( AstPlot *, int * );
-static void SetTitleGap( AstPlot *, double, int * );
-
-static double GetMinTickLen( AstPlot *, int, int * );
-static int TestMinTickLen( AstPlot *, int, int * );
-static void ClearMinTickLen( AstPlot *, int, int * );
-static void SetMinTickLen( AstPlot *, int, double, int * );
-
-static int GetEdge( AstPlot *, int, int * );
-static int TestEdge( AstPlot *, int, int * );
-static void ClearEdge( AstPlot *, int, int * );
-static void SetEdge( AstPlot *, int, int, int * );
-
-static int GetLabelUp( AstPlot *, int, int * );
-static int TestLabelUp( AstPlot *, int, int * );
-static void ClearLabelUp( AstPlot *, int, int * );
-static void SetLabelUp( AstPlot *, int, int, int * );
-
-static int GetLogPlot( AstPlot *, int, int * );
-static int TestLogPlot( AstPlot *, int, int * );
-static void ClearLogPlot( AstPlot *, int, int * );
-static void SetLogPlot( AstPlot *, int, int, int * );
-
-static int GetLogTicks( AstPlot *, int, int * );
-static int TestLogTicks( AstPlot *, int, int * );
-static void ClearLogTicks( AstPlot *, int, int * );
-static void SetLogTicks( AstPlot *, int, int, int * );
-
-static int GetLogLabel( AstPlot *, int, int * );
-static int TestLogLabel( AstPlot *, int, int * );
-static void ClearLogLabel( AstPlot *, int, int * );
-static void SetLogLabel( AstPlot *, int, int, int * );
-
-static int GetNumLab( AstPlot *, int, int * );
-static int TestNumLab( AstPlot *, int, int * );
-static void ClearNumLab( AstPlot *, int, int * );
-static void SetNumLab( AstPlot *, int, int, int * );
-
-static int GetMinTick( AstPlot *, int, int * );
-static int TestMinTick( AstPlot *, int, int * );
-static void ClearMinTick( AstPlot *, int, int * );
-static void SetMinTick( AstPlot *, int, int, int * );
-
-static int GetTextLab( AstPlot *, int, int * );
-static int TestTextLab( AstPlot *, int, int * );
-static void ClearTextLab( AstPlot *, int, int * );
-static void SetTextLab( AstPlot *, int, int, int * );
-
-static int GetLabelUnits( AstPlot *, int, int * );
-static int TestLabelUnits( AstPlot *, int, int * );
-static void ClearLabelUnits( AstPlot *, int, int * );
-static void SetLabelUnits( AstPlot *, int, int, int * );
-
-static int GetStyle( AstPlot *, int, int * );
-static int TestStyle( AstPlot *, int, int * );
-static void ClearStyle( AstPlot *, int, int * );
-static void SetStyle( AstPlot *, int, int, int * );
-
-static int GetFont( AstPlot *, int, int * );
-static int TestFont( AstPlot *, int, int * );
-static void ClearFont( AstPlot *, int, int * );
-static void SetFont( AstPlot *, int, int, int * );
-
-static int GetColour( AstPlot *, int, int * );
-static int TestColour( AstPlot *, int, int * );
-static void ClearColour( AstPlot *, int, int * );
-static void SetColour( AstPlot *, int, int, int * );
-
-static double GetWidth( AstPlot *, int, int * );
-static int TestWidth( AstPlot *, int, int * );
-static void ClearWidth( AstPlot *, int, int * );
-static void SetWidth( AstPlot *, int, double, int * );
-
-static double GetSize( AstPlot *, int, int * );
-static int TestSize( AstPlot *, int, int * );
-static void ClearSize( AstPlot *, int, int * );
-static void SetSize( AstPlot *, int, double, int * );
-
-static const char *GetAttrib( AstObject *, const char *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-
-static AstFrameSet *Fset2D( AstFrameSet *, int, int * );
-static AstPointSet *DefGap( AstPlot *, double *, int *, double *, int *, const char *, const char *, int * );
-static AstPointSet *Trans( AstPlot *, AstFrame *, AstMapping *, AstPointSet *, int, AstPointSet *, int, const char *, const char *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstPlotCurveData **CleanCdata( AstPlotCurveData **, int * );
-static AstPlotCurveData **DrawGrid( AstPlot *, TickInfo **, int, const char *, const char *, int * );
-static TickInfo **CleanGrid( TickInfo **, int * );
-static TickInfo **GridLines( AstPlot *, double *, double *, int *, const char *, const char *, int * );
-static TickInfo *TickMarks( AstPlot *, int, double *, double *, int *, GetTicksStatics **, const char *, const char *, int * );
-static char **CheckLabels2( AstPlot *, AstFrame *, int, double *, int, char **, double, int * );
-static char *FindWord( char *, const char *, const char **, int * );
-static char *GrfItem( int, const char *, int *, int * );
-static const char *SplitValue( AstPlot *, const char *, int, int *, int * );
-static const char *JustMB( AstPlot *, int, const char *, float *, float *, float, float, const char *, float, float, float, float, float *, float *, const char *, const char *, int * );
-static double **MakeGrid( AstPlot *, AstFrame *, AstMapping *, int, int, double, double, double, double, int, AstPointSet **, AstPointSet**, int, const char *, const char *, int * );
-static double GetTicks( AstPlot *, int, double *, double **, int *, double **, int *, int, int *, double *, GetTicksStatics **, const char *, const char *, int * );
-static double GetUseSize( AstPlot *, int, int * );
-static AstKeyMap *GetGrfContext( AstPlot *, int * );
-static double GetUseWidth( AstPlot *, int, int * );
-static double GoodGrid( AstPlot *, int *, AstPointSet **, AstPointSet **, const char *, const char *, int * );
-static AstPointSet *GetDrawnTicks( AstPlot *, int, int, int * );
-static double Typical( int, double *, double, double, double *, int * );
-static int Border( AstPlot *, int * );
-static int Boundary( AstPlot *, const char *, const char *, int * );
-static int BoxCheck( float *, float *, float *, float *, int * );
-static int CGAttrWrapper( AstPlot *, int, double, double *, int, int * );
-static int CGCapWrapper( AstPlot *, int, int, int * );
-static int CGFlushWrapper( AstPlot *, int * );
-static int CGLineWrapper( AstPlot *, int, const float *, const float *, int * );
-static int CGMarkWrapper( AstPlot *, int, const float *, const float *, int, int * );
-static int CGQchWrapper( AstPlot *, float *, float *, int * );
-static int CGScalesWrapper( AstPlot *, float *, float *, int * );
-static int CGTextWrapper( AstPlot *, const char *, float, float, const char *, float, float, int * );
-static int CGTxExtWrapper( AstPlot *, const char *, float, float, const char *, float, float, float *, float *, int * );
-static int CheckLabels( AstPlot *, AstFrame *, int, double *, int, int, char **, double, int * );
-static int ChrLen( const char *, int * );
-static int Compare_LL( const void *, const void * );
-static int Compared( const void *, const void * );
-static int CountGood( int, double *, int * );
-static int Cross( float, float, float, float, float, float, float, float, int * );
-static int CvBrk( AstPlot *, int, double *, double *, double *, int * );
-static int EdgeCrossings( AstPlot *, int, int, double, double *, double **, EdgeCrossingsStatics **, const char *, const char *, int * );
-static int EdgeLabels( AstPlot *, int, TickInfo **, AstPlotCurveData **, int, const char *, const char *, int * );
-static int FindDPTZ( AstFrame *, int, const char *, const char *, int *, int *, int * );
-static int FindMajTicks( AstMapping *, AstFrame *, int, double, double, double , double *, int, double *, double **, int * );
-static int FindMajTicks2( int, double, double, int, double *, double **, int * );
-static int FindString( int, const char *[], const char *, const char *, const char *, const char *, int * );
-static int FullForm( const char *, const char *, const char *, const char *, const char *, int * );
-static int GCap( AstPlot *, int, int, int * );
-static int GVec( AstPlot *, AstMapping *, double *, int, double, AstPointSet **, AstPointSet **, double *, double *, double *, double *, int *, const char *, const char *, int * );
-static int GetUseColour( AstPlot *, int, int * );
-static int GetUseFont( AstPlot *, int, int * );
-static int GetUseStyle( AstPlot *, int, int * );
-static int HasEscapes( const char *, int * );
-static int IdFind( int, int, int *, int *, int *, int * );
-static int Inside( int, float *, float *, float, float, int * );
-static int IsASkyAxis( AstFrame *, int, int * );
-static int IsASkyFrame( AstObject *, int * );
-static int Overlap( AstPlot *, int, int, const char *, float, float, const char *, float, float, float **, const char *, const char *, int * );
-static int PopGat( AstPlot *, float *, const char *, const char *, int * );
-static int RegionOutline( AstPlot *, AstFrame *, const char *, const char *, int * );
-static int TestUseColour( AstPlot *, int, int * );
-static int TestUseFont( AstPlot *, int, int * );
-static int TestUseSize( AstPlot *, int, int * );
-static int TestUseStyle( AstPlot *, int, int * );
-static int TestUseWidth( AstPlot *, int, int * );
-static int ToggleLogLin( AstPlot *, int, int, const char *, int * );
-static int TraceBorder( AstPlot *, AstMapping *, double, double, double, double, int, double, int[ 4 ], const char *, const char *, int * );
-static int Ustrcmp( const char *, const char *, int * );
-static int Ustrncmp( const char *, const char *, size_t, int * );
-static void Mirror( AstPlot *, int, int * );
-static void SetTickValues( AstPlot *, int, int, double *, int, double *, int * );
-static int swapEdges( AstPlot *, TickInfo **, AstPlotCurveData **, int * );
-static void AddCdt( AstPlotCurveData *, AstPlotCurveData *, const char *, const char *, int * );
-static void Apoly( AstPlot *, float, float, const char *, const char *, int * );
-static void AxPlot( AstPlot *, int, const double *, double, int, AstPlotCurveData *, const char *, const char *, int * );
-static void BoundingBox( AstPlot *, float[2], float[2], int * );
-static void Bpoly( AstPlot *, float, float, const char *, const char *, int * );
-static void Clip( AstPlot *, int, const double [], const double [], int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void CopyPlotDefaults( AstPlot *, int, AstPlot *, int, int * );
-static void Crv( AstPlot *this, double *, double *, double *, int, double *, CrvStatics *, const char *, const char *, int * );
-static void CrvLine( AstPlot *this, double, double, double, double, const char *, const char *, int * );
-static void Curve( AstPlot *, const double [], const double [], int * );
-static void CurvePlot( AstPlot *, const double *, const double *, int , AstPlotCurveData *, const char *, const char *, int * );
-static void Delete( AstObject *, int * );
-static void DrawAxis( AstPlot *, TickInfo **, double *, double *, const char *, const char *, int * );
-static void DrawText( AstPlot *, int, int, const char *, float, float, const char *, float, float, float *, float *, float *, const char *, const char *, int * );
-static void DrawTicks( AstPlot *, TickInfo **, int, double *, double *, const char *, const char *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void GAttr( AstPlot *, int, double, double *, int, const char *, const char *, int * );
-static void GFlush( AstPlot *, const char *, const char *, int * )__attribute__((unused));
-static void GLine( AstPlot *, int, const float *, const float *, const char *, const char *, int * );
-static void GMark( AstPlot *, int, const float *, const float *, int, const char *, const char *, int * );
-static void GQch( AstPlot *, float *, float *, const char *, const char *, int * );
-static void GScales( AstPlot *, float *, float *, const char *, const char *, int * );
-static void GText( AstPlot *, const char *, float, float, const char *, float, float, const char *, const char *, int * );
-static void GTxExt( AstPlot *, const char *, float , float, const char *, float, float, float *, float *, const char *, const char *, int * );
-static void GenCurve( AstPlot *, AstMapping *, int * );
-static int GraphGrid( int, int, double, double, double, double, double **, int * );
-static void GrfPop( AstPlot *, int * );
-static void GrfPush( AstPlot *, int * );
-static void GrfSet( AstPlot *, const char *, AstGrfFun, int * );
-static void GrfWrapper( AstPlot *, const char *, AstGrfWrap, int * );
-static void Grid( AstPlot *, int * );
-static void GridLine( AstPlot *, int, const double [], double, int * );
-static void InterpEscape( AstPlot *, int, double, float *, float *, float, float, float, float, const char *, float *, double, double, double, double, double, const char *, const char *, int * );
-static void Labelat( AstPlot *, TickInfo **, AstPlotCurveData **, double *, const char *, const char *, int * );
-static void Labels( AstPlot *, TickInfo **, AstPlotCurveData **, double *, double *, const char *, const char *, int * );
-static void LinePlot( AstPlot *, double, double, double, double, int, AstPlotCurveData *, const char *, const char *, int * );
-static void Map1( int, double *, double *, double *, const char *, const char *, int * GLOBALS_PROTO );
-static void Map2( int, double *, double *, double *, const char *, const char *, int * GLOBALS_PROTO );
-static void Map3( int, double *, double *, double *, const char *, const char *, int * GLOBALS_PROTO );
-static void Map4( int, double *, double *, double *, const char *, const char *, int * GLOBALS_PROTO );
-static void Map5( int, double *, double *, double *, const char *, const char *, int * GLOBALS_PROTO );
-static void Mark( AstPlot *, int, int, int, const double *, int, int * );
-static void Norm1( AstMapping *, int, int, double *, double, double, int * );
-static void Opoly( AstPlot *, const char *, const char *, int * );
-static void PlotLabels( AstPlot *, int, AstFrame *, int, LabelList *, char *, int, float **, const char *, const char *, int * );
-static void PolyCurve( AstPlot *, int, int, int, const double *, int * );
-static void PurgeCdata( AstPlotCurveData *, int * );
-static void PushGat( AstPlot *, float, const char *, const char *, int * );
-static void RemoveFrame( AstFrameSet *, int, int * );
-static void RightVector( AstPlot *, float *, float *, float *, float *, const char *, const char *, int * );
-static void SaveTick( AstPlot *, int, double, double, int, int * );
-static void Text( AstPlot *, const char *, const double [], const float [], const char *, int * );
-static void TextLabels( AstPlot *, int, int *, const char *, const char *, int * );
-static void Ticker( AstPlot *, int, int, double, double *, double, int, int, EdgeCrossingsStatics **, const char *, const char *, int * );
-static void UpdateConcat( float *, float *, float, float, float, float, float *, float *, float, float, float *, float *, float *, float *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Functions which access class attributes. */
-/* ======================================= */
-/* Implement member functions to access the attributes associated with this
- class using the macros defined for this purpose in the "object.h" file. For
- a description of each attribute, see the class interface (in the associated
- .h file). */
-
-/* Tol. */
-/* ---- */
-/*
-*att++
-* Name:
-* Tol
-
-* Purpose:
-* Plotting tolerance.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute specifies the plotting tolerance (or resolution)
-* to be used for the graphical output produced by a Plot. Smaller
-* values will result in smoother and more accurate curves being
-* drawn, but may slow down the plotting process. Conversely,
-* larger values may speed up the plotting process in cases where
-* high resolution is not required.
-*
-* The Tol value should be given as a fraction of the minimum
-* dimension of the plotting area, and should lie in the range
-c from 1.0e-7 to 1.0. By default, a value of 0.01 is used.
-f from 1.0E-7 to 1.0. By default, a value of 0.01 is used.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-*att--
-*/
-/* The plotting tolerance. Has a value of -1.0 when not set yielding a
-default value of 0.01. Usable values are in the range 1.0E-7 to 1.0. */
-astMAKE_CLEAR(Plot,Tol,tol,-1.0)
-astMAKE_GET(Plot,Tol,double,0.01,(this->tol == -1.0 ? 0.01 : this->tol))
-astMAKE_SET(Plot,Tol,double,tol,MIN(MAX(value,1.0E-7),1.0))
-astMAKE_TEST(Plot,Tol,( this->tol != -1.0 ))
-
-/* Grid. */
-/* ----- */
-/*
-*att++
-* Name:
-* Grid
-
-* Purpose:
-* Draw grid lines for a Plot?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute controls the appearance of an annotated
-c coordinate grid (drawn with the astGrid function) by determining
-f coordinate grid (drawn with the AST_GRID routine) by determining
-* whether grid lines (a grid of curves marking the "major" values
-* on each axis) are drawn across the plotting area.
-*
-* If the Grid value of a Plot is non-zero, then grid lines will be
-* drawn. Otherwise, short tick marks on the axes are used to mark
-* the major axis values. The default behaviour is to use tick
-* marks if the entire plotting area is filled by valid physical
-* coordinates, but to draw grid lines otherwise.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - The spacing between major axis values, which determines the
-* spacing of grid lines, may be set using the Gap(axis) attribute.
-*att--
-*/
-/* If non-zero use lines instead of tick marks in a coordinate grid. Has a
-value of -1 when not set yielding a default value of 0. */
-astMAKE_CLEAR(Plot,Grid,grid,-1)
-astMAKE_GET(Plot,Grid,int,0,(this->grid == -1 ? 0 : this->grid))
-astMAKE_SET(Plot,Grid,int,grid,( value ? 1 : 0 ))
-astMAKE_TEST(Plot,Grid,( this->grid != -1 ))
-
-MAKE_GET2(Plot,Grid,int,0,this->ugrid)
-MAKE_SET2(Plot,Grid,int,ugrid,( value ? 1 : 0 ))
-
-/* Invisible. */
-/* ---------- */
-/*
-*att++
-* Name:
-* Invisible
-
-* Purpose:
-* Draw graphics using invisible ink?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute controls the appearance of all graphics produced by
-* Plot methods by determining whether graphics should be visible or
-* invisible.
-*
-* If the Invisible value of a Plot is non-zero, then all the Plot
-* methods which normally generate graphical output do not do so (you
-* can think of them drawing with "invisible ink"). Such methods do,
-* however, continue to do all the calculations which would be needed to
-* produce the graphics. In particular, the bounding box enclosing the
-* graphics is still calculated and can be retrieved as normal using
-c astBoundingBox. The default value is zero, resulting in all methods
-f AST_BOUNDINGBOX. The default value is zero, resulting in all methods
-* drawing graphics as normal, using visible ink.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-*att--
-*/
-/* If non-zero use invisible ink. Has a value of -1 when not set yielding
-a default value of 0. */
-astMAKE_CLEAR(Plot,Invisible,invisible,-1)
-astMAKE_GET(Plot,Invisible,int,0,(this->invisible == -1 ? 0 : this->invisible))
-astMAKE_SET(Plot,Invisible,int,invisible,( value ? 1 : 0 ))
-astMAKE_TEST(Plot,Invisible,( this->invisible != -1 ))
-
-/* TickAll */
-/* ------- */
-/*
-*att++
-* Name:
-* TickAll
-
-* Purpose:
-* Draw tick marks on all edges of a Plot?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute controls the appearance of an annotated
-c coordinate grid (drawn with the astGrid function) by determining
-f coordinate grid (drawn with the AST_GRID routine) by determining
-* whether tick marks should be drawn on all edges of a Plot.
-*
-* If the TickAll value of a Plot is non-zero (the default), then
-* tick marks will be drawn on all edges of the Plot. Otherwise,
-* they will be drawn only on those edges where the numerical and
-* descriptive axis labels are drawn (see the Edge(axis)
-* attribute).
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - In some circumstances, numerical labels and tick marks are
-* drawn along grid lines inside the plotting area, rather than
-* around its edges (see the Labelling attribute). In this case,
-* the value of the TickAll attribute is ignored.
-*att--
-*/
-/* If non-zero put tick marks on opposite edges. Has a value of -1 when not
-set yielding a default value of 1. */
-astMAKE_CLEAR(Plot,TickAll,tickall,-1)
-astMAKE_GET(Plot,TickAll,int,1,(this->tickall == -1 ? 1 : this->tickall))
-astMAKE_SET(Plot,TickAll,int,tickall,( value ? 1 : 0 ))
-astMAKE_TEST(Plot,TickAll,( this->tickall != -1 ))
-
-/* ForceExterior */
-/* ------------- */
-/*
-*att+
-* Name:
-* ForceExterior
-
-* Purpose:
-* Force the use of exterior labelling?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute controls the appearance of an annotated
-c coordinate grid (drawn with the astGrid function) by forcing
-f coordinate grid (drawn with the AST_GRID routine) by forcing
-* labels and tick marks to be drawn round the edges of the plot
-* (rather than across the middle of the plot), even if there appear
-* to be insufficient edge crossings to justify the use of exterior
-* labelling.
-*
-* The default value of zero results in the decision about whether to
-* use interior or exterior labelling being made purely on the basis
-* of the value of the Labelling attribute. If ForceExterior is set to
-* a non-zero value, then the Labelling attribute is ignored and exterior
-* labelling will always be attempted, even if there appear to be
-* insufficient edge labels to justify their use.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - The value of this attribute is currently under investigation, and
-* so this attribute prologue is currently marked as protected rather
-* than public (in order to prevent it being included in the public
-* documentation).
-*att-
-*/
-astMAKE_CLEAR(Plot,ForceExterior,forceexterior,-1)
-astMAKE_GET(Plot,ForceExterior,int,0,(this->forceexterior == -1 ? 0 : this->forceexterior))
-astMAKE_SET(Plot,ForceExterior,int,forceexterior,( value ? 1 : 0 ))
-astMAKE_TEST(Plot,ForceExterior,( this->forceexterior != -1 ))
-
-/*
-*att++
-* Name:
-* Border
-
-* Purpose:
-* Draw a border around valid regions of a Plot?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute controls the appearance of an annotated
-c coordinate grid (drawn with the astGrid function) by determining
-f coordinate grid (drawn with the AST_GRID routine) by determining
-* whether a border is drawn around regions corresponding to the
-c valid physical coordinates of a Plot (c.f. astBorder).
-f valid physical coordinates of a Plot (c.f. AST_BORDER).
-*
-* If the Border value of a Plot is non-zero, then this border will
-* be drawn as part of the grid. Otherwise, the border is not drawn
-* (although axis labels and tick marks will still appear, unless
-* other relevant Plot attributes indicate that they should
-* not). The default behaviour is to draw the border if tick marks
-* and numerical labels will be drawn around the edges of the
-* plotting area (see the Labelling attribute), but to omit it
-* otherwise.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-*att--
-*/
-/* If non-zero draw the border. Has a value of -1 when not set, yeilding
- a default of 1. */
-astMAKE_CLEAR(Plot,Border,border,-1)
-astMAKE_SET(Plot,Border,int,border,( value ? 1 : 0 ))
-astMAKE_TEST(Plot,Border,( this->border != -1 ))
-astMAKE_GET(Plot,Border,int,1,(this->border == -1 ? 1 : this->border))
-
-MAKE_SET2(Plot,Border,int,uborder,( value ? 1 : 0 ))
-MAKE_GET2(Plot,Border,int,1,this->uborder)
-
-/* Clip */
-/* ---- */
-/*
-*att++
-* Name:
-* Clip
-
-* Purpose:
-* Clip lines and/or markers at the Plot boundary?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer.
-
-* Description:
-* This attribute controls whether curves and markers are clipped at the
-* boundary of the graphics box specified when the Plot was created. A
-* value of 3 implies both markers and curves are clipped at the Plot
-* boundary. A value of 2 implies markers are clipped, but not curves. A
-* value of 1 implies curves are clipped, but not markers. A value of
-* zero implies neither curves nor markers are clipped. The default
-* value is 1. Note, this attributes controls only the clipping
-* performed internally within AST. The underlying graphics system may
-* also apply clipping. In such cases, removing clipping using this
-* attribute does not guarantee that no clipping will be visible in the
-* final plot.
-*
-c The astClip function
-f The AST_CLIP routine
-* can be used to establish generalised clipping within arbitrary
-* regions of the Plot.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-*att--
-*/
-astMAKE_CLEAR(Plot,Clip,clip,-1)
-astMAKE_GET(Plot,Clip,int,0,(this->clip == -1 ? 1 : this->clip))
-astMAKE_TEST(Plot,Clip,( this->clip != -1 ))
-astMAKE_SET(Plot,Clip,int,clip,((value>=0&&value<=3)?value:(astError( AST__ATTIN, "astSetClip(Plot): Invalid value %d supplied for Clip attribute", status, value ), this->clip)))
-
-/* ClipOp */
-/* ------ */
-/*
-*att++
-* Name:
-* ClipOp
-
-* Purpose:
-* Combine Plot clipping limits using a boolean OR?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute controls how the clipping limits specified for
-c each axis of a Plot (using the astClip function) are
-f each axis of a Plot (using the AST_CLIP routine) are
-* combined. This, in turn, determines which parts of the graphical
-* output will be visible.
-*
-* If the ClipOp attribute of a Plot is zero (the default),
-* graphical output is visible only if it satisfies the clipping
-* limits on all the axes of the clipping Frame (a boolean
-* AND). Otherwise, if ClipOp is non-zero, output is visible if it
-* satisfies the clipping limits on one or more axes (a boolean
-* OR).
-*
-* An important use of this attribute is to allow areas of a Plot
-* to be left clear (e.g. as a background for some text). To
-* achieve this, the lower and upper clipping bounds supplied to
-c astClip should be reversed, and the ClipOp attribute of the
-f AST_CLIP should be reversed, and the ClipOp attribute of the
-* Plot should be set to a non-zero value.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-*att--
-*/
-/* If non-zero only 1axis need be within the clipping bounds to avoid a
-point being clipped. Otherwise, all axes must be within bounds. */
-astMAKE_CLEAR(Plot,ClipOp,clipop,-1)
-astMAKE_GET(Plot,ClipOp,int,0,(this->clipop == -1 ? 0 : this->clipop))
-astMAKE_SET(Plot,ClipOp,int,clipop,( value ? 1 : 0 ))
-astMAKE_TEST(Plot,ClipOp,( this->clipop != -1 ))
-
-/* Grf. */
-/* ---- */
-/*
-*att++
-* Name:
-* Grf
-
-* Purpose:
-c Use Grf functions registered through astGrfSet?
-f Use Grf routines registered through AST_GRFSET?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-c This attribute selects the functions which are used to draw graphics by
-c the Plot class. If it is zero, then the functions in the graphics
-c interface selected at link-time are used (see the ast_link script).
-c Otherwise, functions registered using astGrfSet are used. In this
-c case, if a function is needed which has not been registered,
-c then the function in the graphics interface selected at link-time is
-c used.
-f This attribute selects the routines which are used to draw graphics by
-f the Plot class. If it is zero, then the routines in the graphics
-f interface selected at link-time are used (see the ast_link script).
-f Otherwise, routines registered using AST_GRFSET are used. In this
-f case, if a routine is needed which has not been registered,
-f then the routine in the graphics interface selected at link-time is
-f used.
-
-* The default is to use the graphics interface
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-* Plot3D
-* The Plot3D class ignores this attributes, assuming a value of
-* zero.
-
-* Notes:
-* - The value of this attribute is not saved when the Plot is written
-* out through a Channel to an external data store. On re-loading such
-c a Plot using astRead, the attribute will be cleared, resulting in the
-f a Plot using AST_READ, the attribute will be cleared, resulting in the
-* graphics interface selected at link-time being used.
-
-*att--
-*/
-/* Use Grf routines registered using astGrfSet? Has a
-value of -1 when not set yielding a default of 0. */
-astMAKE_CLEAR(Plot,Grf,grf,-1)
-astMAKE_GET(Plot,Grf,int,0,(this->grf == -1 ? 0 : this->grf))
-astMAKE_SET(Plot,Grf,int,grf,( value ? 1 : 0 ))
-astMAKE_TEST(Plot,Grf,( this->grf != -1 ))
-
-/* DrawTitle */
-/* --------- */
-/*
-*att++
-* Name:
-* DrawTitle
-
-* Purpose:
-* Draw a title for a Plot?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute controls the appearance of an annotated
-c coordinate grid (drawn with the astGrid function) by determining
-f coordinate grid (drawn with the AST_GRID routine) by determining
-* whether a title is drawn.
-*
-* If the DrawTitle value of a Plot is non-zero (the default), then
-* the title will be drawn, otherwise it will be omitted.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-* Plot3D
-* The Plot3D class ignores this attributes, assuming a value of
-* zero.
-
-* Notes:
-* - The text used for the title is obtained from the Plot's Title
-* attribute.
-* - The vertical placement of the title can be controlled using
-* the TitleGap attribute.
-*att--
-*/
-/* If non-zero add a title to the grid. Has a value of -1 when not
-set yielding a default value of 1. */
-astMAKE_CLEAR(Plot,DrawTitle,drawtitle,-1)
-astMAKE_GET(Plot,DrawTitle,int,1,(this->drawtitle == -1 ? 1 : this->drawtitle))
-astMAKE_SET(Plot,DrawTitle,int,drawtitle,( value ? 1 : 0 ))
-astMAKE_TEST(Plot,DrawTitle,( this->drawtitle != -1 ))
-
-/* LabelUp. */
-/* ------- */
-/*
-*att++
-* Name:
-* LabelUp(axis)
-
-* Purpose:
-* Draw numerical Plot labels upright?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute controls the appearance of an annotated
-c coordinate grid (drawn with the astGrid function) by determining
-f coordinate grid (drawn with the AST_GRID routine) by determining
-* whether the numerical labels for each axis of a Plot should be
-* drawn upright or not. It takes a separate value for each
-* physical axis of a Plot so that, for instance, the setting
-* "LabelUp(2)=1" specifies that numerical labels for the second
-* axis should be drawn upright.
-*
-* If the LabelUp value of a Plot axis is non-zero, it causes
-* numerical labels for that axis to be plotted upright (i.e. as
-* normal, horizontal text), otherwise labels are drawn parallel to
-* the axis to which they apply.
-*
-* The default is to produce upright labels if the labels are placed
-* around the edge of the plot, and to produce labels that follow the
-* axes if the labels are placed within the interior of the plot (see
-* attribute Labelling).
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - In some circumstances, numerical labels and tick marks are
-* drawn around the edges of the plotting area (see the Labelling
-* attribute). In this case, the value of the LabelUp attribute is
-* ignored.
-* - If no axis is specified, (e.g. "LabelUp" instead of
-* "LabelUp(2)"), then a "set" or "clear" operation will affect the
-* attribute value of all the Plot axes, while a "get" or "test"
-* operation will use just the LabelUp(1) value.
-*att--
-*/
-/* Are numerical labels to be displayed on each axis? Has a value of -1 when
-not set yielding a value of 0 (no) for both axes. */
-MAKE_CLEAR(LabelUp,labelup,-1,0)
-MAKE_GET(LabelUp,int,0,( this->labelup[axis] == -1 ? 0 : this->labelup[axis] ),0)
-MAKE_TEST(LabelUp,( this->labelup[axis] != -1 ),0)
-MAKE_SET(LabelUp,int,labelup,( value ? 1 : 0 ),0)
-
-/* DrawAxes */
-/* -------- */
-/*
-*att++
-* Name:
-* DrawAxes(axis)
-
-* Purpose:
-* Draw axes for a Plot?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute controls the appearance of an annotated
-c coordinate grid (drawn with the astGrid function) by determining
-f coordinate grid (drawn with the AST_GRID routine) by determining
-* whether curves representing coordinate axes should be drawn.
-* It takes a separate value for each physical axis of a
-* Plot so that, for instance, the setting "DrawAxes(2)=0"
-* specifies that no axis should be drawn for the second axis.
-*
-* If drawn, these axis lines will pass through any tick marks
-* associated with numerical labels drawn to mark values on the
-* axes. The location of these tick marks and labels (and hence the
-* axis lines) is determined by the Plot's LabelAt(axis) attribute.
-*
-* If the DrawAxes value of a Plot is non-zero (the default), then
-* axis lines will be drawn, otherwise they will be omitted.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - Axis lines are drawn independently of any coordinate grid
-* lines (see the Grid attribute) so grid lines may be used to
-* substitute for axis lines if required.
-* - In some circumstances, numerical labels and tick marks are
-* drawn around the edges of the plotting area (see the Labelling
-* attribute). In this case, the value of the DrawAxes attribute
-* is ignored.
-* - If no axis is specified, (e.g. "DrawAxes" instead of
-* "DrawAxes(2)"), then a "set" or "clear" operation will affect
-* the attribute value of all the Plot axes, while a "get" or
-* "test" operation will use just the DrawAxes(1) value.
-*att--
-*/
-/* If non-zero draw a curve through the tick marks. Has a value of -1
- when not set yielding a default value of 1. */
-MAKE_CLEAR(DrawAxes,drawaxes,-1,0)
-MAKE_GET(DrawAxes,int,1,( this->drawaxes[axis] == -1 ? 1 : this->drawaxes[axis] ),0)
-MAKE_TEST(DrawAxes,( this->drawaxes[axis] != -1 ),0)
-MAKE_SET(DrawAxes,int,drawaxes,( value ? 1 : 0 ),0)
-
-/* Abbrev */
-/* -------- */
-/*
-*att++
-* Name:
-* Abbrev(axis)
-
-* Purpose:
-* Abbreviate leading fields within numerical axis labels?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute controls the appearance of an annotated
-c coordinate grid (drawn with the astGrid function) by determining
-f coordinate grid (drawn with the AST_GRID routine) by determining
-* whether matching leading fields should be removed from adjacent
-* numerical axis labels. It takes a separate value for each physical
-* axis of a Plot so that, for instance, the setting "Abbrev(2)=0"
-* specifies that matching leading fields should not be removed on
-* the second axis.
-*
-* If the Abbrev value of a Plot is non-zero (the default), then
-* leading fields will be removed from adjacent axis labels if they
-* are equal.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - If no axis is specified, (e.g. "Abbrev" instead of
-* "Abbrev(2)"), then a "set" or "clear" operation will affect
-* the attribute value of all the Plot axes, while a "get" or
-* "test" operation will use just the Abbrev(1) value.
-*att--
-*/
-MAKE_CLEAR(Abbrev,abbrev,-1,0)
-MAKE_GET(Abbrev,int,1,( this->abbrev[axis] == -1 ? 1 : this->abbrev[axis] ),0)
-MAKE_TEST(Abbrev,( this->abbrev[axis] != -1 ),0)
-MAKE_SET(Abbrev,int,abbrev,( value ? 1 : 0 ),0)
-
-/* Escape. */
-/* ------- */
-/*
-*att++
-* Name:
-* Escape
-
-* Purpose:
-* Allow changes of character attributes within strings?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute controls the appearance of text strings and numerical
-c labels drawn by the astGrid and (for the Plot class) astText functions,
-f labels drawn by the AST_GRID and (for the Plot class) AST_TEXT routines,
-* by determining if any escape sequences contained within the strings
-* should be used to control the appearance of the text, or should
-* be printed literally. Note, the Plot3D class only interprets escape
-* sequences within the
-c astGrid function.
-f AST_GRID routine.
-*
-* If the Escape value of a Plot is one (the default), then any
-* escape sequences in text strings produce the effects described
-* below when printed. Otherwise, they are printed literally.
-*
-c See also the astEscapes function.
-f See also the AST_ESCAPES function.
-
-* Escape Sequences:
-* Escape sequences are introduced into the text string by a percent
-* "%" character. Any unrecognised, illegal or incomplete escape sequences
-* are printed literally. The following escape sequences are
-* currently recognised ("..." represents a string of one or more
-* decimal digits):
-*
-* %% - Print a literal "%" character.
-*
-* %^...+ - Draw subsequent characters as super-scripts. The digits
-* "..." give the distance from the base-line of "normal"
-* text to the base-line of the super-script text, scaled
-* so that a value of "100" corresponds to the height of
-* "normal" text.
-* %^+ - Draw subsequent characters with the normal base-line.
-*
-* %v...+ - Draw subsequent characters as sub-scripts. The digits
-* "..." give the distance from the base-line of "normal"
-* text to the base-line of the sub-script text, scaled
-* so that a value of "100" corresponds to the height of
-* "normal" text.
-*
-* %v+ - Draw subsequent characters with the normal base-line
-* (equivalent to %^+).
-*
-* %>...+ - Leave a gap before drawing subsequent characters.
-* The digits "..." give the size of the gap, scaled
-* so that a value of "100" corresponds to the height of
-* "normal" text.
-*
-* %<...+ - Move backwards before drawing subsequent characters.
-* The digits "..." give the size of the movement, scaled
-* so that a value of "100" corresponds to the height of
-* "normal" text.
-*
-* %s...+ - Change the Size attribute for subsequent characters. The
-* digits "..." give the new Size as a fraction of the
-* "normal" Size, scaled so that a value of "100" corresponds
-* to 1.0;
-*
-* %s+ - Reset the Size attribute to its "normal" value.
-*
-* %w...+ - Change the Width attribute for subsequent characters. The
-* digits "..." give the new width as a fraction of the
-* "normal" Width, scaled so that a value of "100" corresponds
-* to 1.0;
-*
-* %w+ - Reset the Size attribute to its "normal" value.
-*
-* %f...+ - Change the Font attribute for subsequent characters. The
-* digits "..." give the new Font value.
-*
-* %f+ - Reset the Font attribute to its "normal" value.
-*
-* %c...+ - Change the Colour attribute for subsequent characters. The
-* digits "..." give the new Colour value.
-*
-* %c+ - Reset the Colour attribute to its "normal" value.
-*
-* %t...+ - Change the Style attribute for subsequent characters. The
-* digits "..." give the new Style value.
-*
-* %t+ - Reset the Style attribute to its "normal" value.
-*
-* %h+ - Remember the current horizontal position (see "%g+")
-*
-* %g+ - Go to the horizontal position of the previous "%h+" (if any).
-*
-* %- - Push the current graphics attribute values onto the top of
-* the stack (see "%+").
-*
-* %+ - Pop attributes values of the top the stack (see "%-"). If
-* the stack is empty, "normal" attribute values are restored.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-*att--
-*/
-
-/* Has a value of -1 when not set yeilding a default of 1. */
-astMAKE_GET(Plot,Escape,int,1,(this->escape == -1 ? 1 : this->escape))
-astMAKE_CLEAR(Plot,Escape,escape,-1)
-astMAKE_SET(Plot,Escape,int,escape,( value ? 1 : 0 ))
-astMAKE_TEST(Plot,Escape,( this->escape != -1 ))
-
-/* LabelAt(axis). */
-/* -------------- */
-/*
-*att++
-* Name:
-* LabelAt(axis)
-
-* Purpose:
-* Where to place numerical labels for a Plot
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute controls the appearance of an annotated
-c coordinate grid (drawn with the astGrid function) by determining
-f coordinate grid (drawn with the AST_GRID routine) by determining
-* where numerical axis labels and associated tick marks are
-* placed. It takes a separate value for each physical axis of a
-* Plot so that, for instance, the setting "LabelAt(2)=10.0"
-* specifies where the numerical labels and tick marks for the
-* second axis should be drawn.
-*
-* For each axis, the LabelAt value gives the value on the other
-* axis at which numerical labels and tick marks should be placed
-c (remember that Plots suitable for use with astGrid may only
-f (remember that Plots suitable for use with AST_GRID may only
-* have two axes). For example, in a celestial (RA,Dec) coordinate
-* system, LabelAt(1) gives a Dec value which defines a line (of
-* constant Dec) along which the numerical RA labels and their
-* associated tick marks will be drawn. Similarly, LabelAt(2) gives
-* the RA value at which the Dec labels and ticks will be drawn.
-*
-* The default bahaviour is for the Plot to generate its own
-* position for numerical labels and tick marks.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - The LabelAt value should use the same units as are used
-* internally for storing coordinate values on the appropriate
-* axis. For example, with a celestial coordinate system, the
-* LabelAt value should be in radians, not hours or degrees.
-* - Normally, the LabelAt value also determines where the lines
-* representing coordinate axes will be drawn, so that the tick
-* marks will lie on these lines (but also see the DrawAxes
-* attribute).
-* - In some circumstances, numerical labels and tick marks are
-* drawn around the edges of the plotting area (see the Labelling
-* attribute). In this case, the value of the LabelAt attribute is
-* ignored.
-*att--
-*/
-/* The constant value on the other axis at which to place labels for
- each axis. */
-MAKE_CLEAR(LabelAt,labelat,AST__BAD,0)
-MAKE_GET(LabelAt,double,AST__BAD,this->labelat[axis],0)
-MAKE_SET(LabelAt,double,labelat,value,0)
-MAKE_TEST(LabelAt,( this->labelat[axis] != AST__BAD ),0)
-
-MAKE_GET3(LabelAt,double,AST__BAD,this->ulblat[axis],0)
-MAKE_SET3(LabelAt,double,ulblat,value,0)
-
-/* Centre(axis). */
-/* ------------ */
-/* A value at which to place a tick mark. Other ticks marks are spaced at
-regular distances from this one. AST__BAD is stored if no value is supplied,
-resulting in Plot choosing its own value. */
-MAKE_CLEAR(Centre,centre,AST__BAD,0)
-MAKE_GET(Centre,double,AST__BAD,this->centre[axis],0)
-MAKE_SET(Centre,double,centre,value,0)
-MAKE_TEST(Centre,( this->centre[axis] != AST__BAD ),0)
-
-MAKE_GET3(Centre,double,AST__BAD,this->ucentre[axis],0)
-MAKE_SET3(Centre,double,ucentre,value,0)
-
-/* Ink */
-/* --- */
-/* A protected attribute indicating if astGrid should draw using visible
-ink. The unset value is -1, yeilding a default value of 1. */
-astMAKE_CLEAR(Plot,Ink,ink,-1)
-astMAKE_GET(Plot,Ink,int,1,(this->ink == -1 ? 1 : this->ink))
-astMAKE_SET(Plot,Ink,int,ink,( value ? 1 : 0 ))
-astMAKE_TEST(Plot,Ink,( this->ink != -1 ))
-
-/* Gap(axis). */
-/* ---------- */
-/*
-*att++
-* Name:
-* Gap(axis)
-
-* Purpose:
-* Interval between linearly spaced major axis values of a Plot.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute controls the appearance of an annotated
-c coordinate grid (drawn with the astGrid function) by determining
-f coordinate grid (drawn with the AST_GRID routine) by determining
-* the linear interval between the "major" axis values of a Plot, at
-* which (for example) major tick marks are drawn. It takes a separate
-* value for each physical axis of the Plot so that, for instance,
-* the setting "Gap(2)=3.0" specifies the difference between adjacent major
-* values along the second axis. The Gap attribute is only used when
-* the LogTicks attribute indicates that the spacing between major axis
-* values is to be linear. If major axis values are logarithmically spaced
-* then the gap is specified using attribute LogGap.
-*
-* The Gap value supplied will usually be rounded to the nearest
-* "nice" value, suitable (e.g.) for generating axis labels, before
-* use. To avoid this "nicing" you should set an explicit format
-* for the axis using the Format(axis) or Digits/Digits(axis)
-* attribute. The default behaviour is for the Plot to generate its
-* own Gap value when required, based on the range of axis values
-* to be represented.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - The Gap value should use the same units as are used internally
-* for storing coordinate values on the corresponding axis. For
-* example, with a celestial coordinate system, the Gap value
-* should be in radians, not hours or degrees.
-* - If no axis is specified, (e.g. "Gap" instead of "Gap(2)"),
-* then a "set" or "clear" operation will affect the attribute
-* value of all the Plot axes, while a "get" or "test" operation
-* will use just the Gap(1) value.
-*att--
-*/
-/* The gap between tick marks on each axis. AST__BAD is stored if no
-value has been supplied, resulting in default values being found. */
-MAKE_CLEAR(Gap,gap,AST__BAD,0)
-MAKE_SET(Gap,double,gap,value,0)
-MAKE_TEST(Gap,( this->gap[axis] != AST__BAD ),0)
-MAKE_GET(Gap,double,AST__BAD,this->gap[axis],0)
-
-MAKE_SET3(Gap,double,ugap,value,0)
-MAKE_GET3(Gap,double,AST__BAD,this->ugap[axis],0)
-
-/* LogGap(axis). */
-/* ---------- */
-/*
-*att++
-* Name:
-* LogGap(axis)
-
-* Purpose:
-* Interval between major axis values of a Plot.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute controls the appearance of an annotated
-c coordinate grid (drawn with the astGrid function) by determining
-f coordinate grid (drawn with the AST_GRID routine) by determining
-* the logarithmic interval between the "major" axis values of a Plot, at
-* which (for example) major tick marks are drawn. It takes a separate
-* value for each physical axis of the Plot so that, for instance,
-* the setting "LogGap(2)=100.0" specifies the ratio between adjacent major
-* values along the second axis. The LogGap attribute is only used when
-* the LogTicks attribute indicates that the spacing between major axis
-* values is to be logarithmic. If major axis values are linearly spaced
-* then the gap is specified using attribute Gap.
-*
-* The LogGap value supplied will be rounded to the nearest power of 10.
-* The reciprocal of the supplied value may be used if this is necessary
-* to produce usable major axis values. If a zero or negative value is
-* supplied, an error will be reported when the grid is drawn. The default
-* behaviour is for the Plot to generate its own LogGap value when
-* required, based on the range of axis values to be represented.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - The LogGap value is a ratio between axis values and is therefore
-* dimensionless.
-* - If no axis is specified, (e.g. "LogGap" instead of "LogGap(2)"),
-* then a "set" or "clear" operation will affect the attribute
-* value of all the Plot axes, while a "get" or "test" operation
-* will use just the LogGap(1) value.
-*att--
-*/
-/* The logarithmic gap between tick marks on each axis. AST__BAD is stored if
- no value has been supplied, resulting in default values being found. */
-MAKE_CLEAR(LogGap,loggap,AST__BAD,0)
-MAKE_SET(LogGap,double,loggap,value,0)
-MAKE_TEST(LogGap,( this->loggap[axis] != AST__BAD ),0)
-MAKE_GET(LogGap,double,AST__BAD,this->loggap[axis],0)
-
-MAKE_SET3(LogGap,double,uloggap,value,0)
-MAKE_GET3(LogGap,double,AST__BAD,this->uloggap[axis],0)
-
-/* LogPlot. */
-/* ------- */
-/*
-*att++
-* Name:
-* LogPlot(axis)
-
-* Purpose:
-* Map the plot logarithmically onto the screen?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute controls the appearance of all graphics produced by
-* the Plot, by determining whether the axes of the plotting surface
-* are mapped logarithmically or linearly onto the base Frame of the
-* FrameSet supplied when the Plot was constructed. It takes a separate
-* value for each axis of the graphics coordinate system (i.e. the
-* base Frame in the Plot) so that, for instance, the setting
-* "LogPlot(2)=1" specifies that the second axis of the graphics
-* coordinate system (usually the vertical axis) should be mapped
-* logarithmically onto the second axis of the base Frame of the
-* FrameSet supplied when the Plot was constructed.
-*
-* If the LogPlot value of a Plot axis is non-zero, it causes that
-* axis to be mapped logarithmically, otherwise (the default) the axis
-* is mapped linearly.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - The setting of the LogPlot attribute provides the default value
-* for the related LogTicks attribute. By selecting suitable values for
-* LogPlot and LogTicks, it is possible to have tick marks which are evenly
-* spaced in value but which are mapped logarithmically onto the screen
-* (and vice-versa).
-* - An axis may only be mapped logarithmically if the visible part of
-* the axis does not include the value zero. The visible part of the
-* axis is that part which is mapped onto the plotting area, and is
-* measured within the base Frame of the FrameSet which was supplied when
-* the Plot was constructed. Any attempt to set LogPlot to a non-zero value
-* will be ignored (without error) if the visible part of the axis
-* includes the value zero
-* - If no axis is specified, (e.g. "LogPlot" instead of
-* "LogPlot(2)"), then a "set" or "clear" operation will affect the
-* attribute value of all the Plot axes, while a "get" or "test"
-* operation will use just the LogPlot(1) value.
-*att--
-*/
-/* Are plot axes to be mapped logarithmically? Has a value of -1 when
-not set yielding a value of 0 (no) for both axes. */
-MAKE_GET(LogPlot,int,0,( this->logplot[axis] == -1 ? 0 : this->logplot[axis] ),0)
-MAKE_TEST(LogPlot,( this->logplot[axis] != -1 ),0)
-
-/* LogTicks. */
-/* ------- */
-/*
-*att++
-* Name:
-* LogTicks(axis)
-
-* Purpose:
-* Space the major tick marks logarithmically?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute controls the appearance of an annotated
-c coordinate grid (drawn with the astGrid function) by determining
-f coordinate grid (drawn with the AST_GRID routine) by determining
-* whether the major tick marks should be spaced logarithmically or
-* linearly in axis value. It takes a separate value for each physical
-* axis of the Plot so that, for instance, the setting "LogTicks(2)=1"
-* specifies that the major tick marks on the second axis should be
-* spaced logarithmically.
-*
-* If the LogTicks value for a physical axis is non-zero, the major
-* tick marks on that axis will be spaced logarithmically (that is,
-* there will be a constant ratio between the axis values at adjacent
-* major tick marks). An error will be reported if the dynamic range of
-* the axis (the ratio of the largest to smallest displayed axis value)
-* is less than 10.0. If the LogTicks value is zero, the major tick marks
-* will be evenly spaced (that is, there will be a constant difference
-* between the axis values at adjacent major tick marks). The default is
-* to produce logarithmically spaced tick marks if the corresponding
-* LogPlot attribute is non-zero and the ratio of maximum axis value
-* to minimum axis value is 100 or more. If either of these conditions
-* is not met, the default is to produce linearly spaced tick marks.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - The setting of the LogTicks attribute does not affect the mapping
-* of the plot onto the screen, which is controlled by attribute LogPlot.
-* By selecting suitable values for LogPlot and LogTicks, it is possible to
-* have tick marks which are evenly spaced in value but which are mapped
-* logarithmically onto the screen (and vica-versa).
-* - An error will be reported when drawing an annotated axis grid if
-* the visible part of the physical axis includes the value zero.
-* - If no axis is specified, (e.g. "LogTicks" instead of
-* "LogTicks(2)"), then a "set" or "clear" operation will affect the
-* attribute value of all the Plot axes, while a "get" or "test"
-* operation will use just the LogTicks(1) value.
-*att--
-*/
-/* Are ticksto be spaced logarithmically? Has a value of -1 when
- not set, yeielding a default value equal to the corresponding
- LogPlot value. */
-MAKE_CLEAR(LogTicks,logticks,-1,0)
-MAKE_GET(LogTicks,int,0,( this->logticks[axis] == -1 ? astGetLogPlot(this,axis) : this->logticks[axis] ),0)
-MAKE_TEST(LogTicks,( this->logticks[axis] != -1 ),0)
-MAKE_SET(LogTicks,int,logticks,( value ? 1 : 0 ),0)
-
-MAKE_SET3(LogTicks,int,ulgtk,value,0)
-MAKE_GET3(LogTicks,int,0,this->ulgtk[axis],0)
-
-/* LogLabel. */
-/* -------- */
-/*
-*att++
-* Name:
-* LogLabel(axis)
-
-* Purpose:
-* Use exponential format for numerical axis labels?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute controls the appearance of an annotated
-c coordinate grid (drawn with the astGrid function) by determining
-f coordinate grid (drawn with the AST_GRID routine) by determining
-* whether the numerical axis labels should be in normal decimal form
-* or should be represented as 10 raised to the appropriate power.
-* That is, an axis value of 1000.0 will be drawn as "1000.0" if
-* LogLabel is zero, but as "10^3" if LogLabel is non-zero. If
-* graphical escape sequences are supported (see attribute Escape),
-* the power in such exponential labels will be drawn as a small
-* superscript instead of using a "^" character to represent
-* exponentiation.
-*
-* The default is to produce exponential labels if the major tick
-* marks are logarithmically spaced (see the LogTicks attribute).
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - If no axis is specified, (e.g. "LogLabel" instead of
-* "LogLabel(2)"), then a "set" or "clear" operation will affect the
-* attribute value of all the Plot axes, while a "get" or "test"
-* operation will use just the LogLabel(1) value.
-*att--
-*/
-/* Are labels to be drawn as 10**x? Has a value of -1 when not set, yeielding
- a default value equal to the corresponding LogTicks value. */
-MAKE_CLEAR(LogLabel,loglabel,-1,0)
-MAKE_GET(LogLabel,int,0,( this->loglabel[axis] == -1 ? astGetLogTicks(this,axis) : this->loglabel[axis] ),0)
-MAKE_TEST(LogLabel,( this->loglabel[axis] != -1 ),0)
-MAKE_SET(LogLabel,int,loglabel,( value ? 1 : 0 ),0)
-
-MAKE_SET3(LogLabel,int,ulglb,value,0)
-MAKE_GET3(LogLabel,int,0,this->ulglb[axis],0)
-
-/* MajTickLen. */
-/* ----------- */
-/*
-*att++
-* Name:
-* MajTickLen(axis)
-
-* Purpose:
-* Length of major tick marks for a Plot.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute controls the appearance of an annotated
-c coordinate grid (drawn with the astGrid function) by determining
-f coordinate grid (drawn with the AST_GRID routine) by determining
-* the length of the major tick marks drawn on the axes of a Plot.
-* It takes a separate value for each physical axis of the Plot so
-* that, for instance, the setting "MajTickLen(2)=0" specifies the
-* length of the major tick marks drawn on the second axis.
-*
-* The MajTickLen value should be given as a fraction of the
-* minimum dimension of the plotting area. Negative values cause
-* major tick marks to be placed on the outside of the
-* corresponding grid line or axis (but subject to any clipping
-* imposed by the underlying graphics system), while positive
-* values cause them to be placed on the inside.
-*
-* The default behaviour depends on whether a coordinate grid is
-* drawn inside the plotting area (see the Grid attribute). If so,
-* the default MajTickLen value is zero (so that major ticks are
-* not drawn), otherwise the default is +0.015.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - If no axis is specified, (e.g. "MajTickLen" instead of
-* "MajTickLen(2)"), then a "set" or "clear" operation will affect
-* the attribute value of all the Plot axes, while a "get" or "test"
-* operation will use just the MajTickLen(1) value.
-
-*att--
-*/
-/* Fractional length of major tick marks. Has a value of AST__BAD when not
-set yielding a default value of 0.015. */
-MAKE_CLEAR(MajTickLen,majticklen,AST__BAD,0)
-MAKE_SET(MajTickLen,double,majticklen,value,0)
-MAKE_TEST(MajTickLen,( this->majticklen[axis] != AST__BAD ),0)
-MAKE_GET(MajTickLen,double,0.0,( this->majticklen[axis] == AST__BAD ? 0.015 : this->majticklen[axis]),0)
-
-MAKE_SET3(MajTickLen,double,umjtkln,value,0)
-MAKE_GET3(MajTickLen,double,0.0,this->umjtkln[axis],0)
-
-/* TitleGap. */
-/* --------- */
-/*
-*att++
-* Name:
-* TitleGap
-
-* Purpose:
-* Vertical spacing for a Plot title.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute controls the appearance of an annotated
-c coordinate grid (drawn with the astGrid function) by determining
-f coordinate grid (drawn with the AST_GRID routine) by determining
-* where the title of a Plot is drawn.
-*
-* Its value gives the spacing between the bottom edge of the title
-* and the top edge of a bounding box containing all the other parts
-* of the annotated grid. Positive values cause the title to be
-* drawn outside the box, while negative values cause it to be drawn
-* inside.
-*
-* The TitleGap value should be given as a fraction of the minimum
-* dimension of the plotting area, the default value being +0.05.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-* Plot3D
-* The Plot3D class ignores this attributes since it does not draw
-* a Title.
-
-* Notes:
-* - The text used for the title is obtained from the Plot's Title
-* attribute.
-*att--
-*/
-/* Fractional gap between titile and top edge. Has a value of AST__BAD when
-not set yielding a default value of 0.05. */
-astMAKE_CLEAR(Plot,TitleGap,titlegap,AST__BAD)
-astMAKE_GET(Plot,TitleGap,double,0.0,( this->titlegap == AST__BAD ? 0.05 : this->titlegap))
-astMAKE_SET(Plot,TitleGap,double,titlegap,value)
-astMAKE_TEST(Plot,TitleGap,( this->titlegap != AST__BAD ))
-
-/* MinTickLen. */
-/* ----------- */
-/*
-*att++
-* Name:
-* MinTickLen(axis)
-
-* Purpose:
-* Length of minor tick marks for a Plot.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute controls the appearance of an annotated
-c coordinate grid (drawn with the astGrid function) by determining
-f coordinate grid (drawn with the AST_GRID routine) by determining
-* the length of the minor tick marks drawn on the axes of a Plot.
-* It takes a separate value for each physical axis of the Plot so
-* that, for instance, the setting "MinTickLen(2)=0" specifies the
-* length of the minor tick marks drawn on the second axis.
-*
-* The MinTickLen value should be given as a fraction of the
-* minimum dimension of the plotting area. Negative values cause
-* minor tick marks to be placed on the outside of the
-* corresponding grid line or axis (but subject to any clipping
-* imposed by the underlying graphics system), while positive
-* values cause them to be placed on the inside.
-*
-* The default value is +0.007.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - The number of minor tick marks drawn is determined by the
-* Plot's MinTick(axis) attribute.
-* - If no axis is specified, (e.g. "MinTickLen" instead of
-* "MinTickLen(2)"), then a "set" or "clear" operation will affect
-* the attribute value of all the Plot axes, while a "get" or "test"
-* operation will use just the MinTickLen(1) value.
-
-*att--
-*/
-/* Fractional length of minor tick marks. Has a value of AST__BAD when not
-set yielding a default value of 0.007. */
-MAKE_CLEAR(MinTickLen,minticklen,AST__BAD,0)
-MAKE_SET(MinTickLen,double,minticklen,value,0)
-MAKE_TEST(MinTickLen,( this->minticklen[axis] != AST__BAD ),0)
-MAKE_GET(MinTickLen,double,0.0,( this->minticklen[axis] == AST__BAD ? 0.007 : this->minticklen[axis]),0)
-
-/* Labelling. */
-/* ---------- */
-/*
-*att++
-* Name:
-* Labelling
-
-* Purpose:
-* Label and tick placement option for a Plot.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute controls the appearance of an annotated
-c coordinate grid (drawn with the astGrid function) by determining
-f coordinate grid (drawn with the AST_GRID routine) by determining
-* the strategy for placing numerical labels and tick marks for a Plot.
-*
-* If the Labelling value of a Plot is "exterior" (the default), then
-* numerical labels and their associated tick marks are placed
-* around the edges of the plotting area, if possible. If this is
-* not possible, or if the Labelling value is "interior", then they
-* are placed along grid lines inside the plotting area.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - The LabelAt(axis) attribute may be used to determine the exact
-* placement of labels and tick marks that are drawn inside the
-* plotting area.
-*att--
-*/
-astMAKE_CLEAR(Plot,Labelling,labelling,-9999)
-astMAKE_SET(Plot,Labelling,int,labelling,(value?1:0))
-astMAKE_TEST(Plot,Labelling,( this->labelling != -9999 ))
-astMAKE_GET(Plot,Labelling,int,0,(this->labelling == -9999 ? 0 : this->labelling))
-
-MAKE_SET2(Plot,Labelling,int,ulbling,(value?1:0))
-MAKE_GET2(Plot,Labelling,int,0,this->ulbling)
-
-/* Edge. */
-/* ----- */
-/*
-*att++
-* Name:
-* Edge(axis)
-
-* Purpose:
-* Which edges to label in a Plot
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute controls the appearance of an annotated
-c coordinate grid (drawn with the astGrid function) by determining
-f coordinate grid (drawn with the AST_GRID routine) by determining
-* which edges of a Plot are used for displaying numerical and
-* descriptive axis labels. It takes a separate value for each
-* physical axis of the Plot so that, for instance, the setting
-* "Edge(2)=left" specifies which edge to use to display labels for
-* the second axis.
-*
-* The values "left", "top", "right" and "bottom" (or any
-* abbreviation) can be supplied for this attribute. The default is
-* usually "bottom" for the first axis and "left" for the second
-* axis. However, if exterior labelling was requested (see the
-* Labelling attribute) but cannot be produced using these default
-* Edge values, then the default values will be swapped if this
-* enables exterior labelling to be produced.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-* Plot3D
-* The Plot3D class ignores this attributes. Instead it uses its
-* own RootCorner attribute to determine which edges of the 3D plot
-* to label.
-
-* Notes:
-* - In some circumstances, numerical labels will be drawn along
-* internal grid lines instead of at the edges of the plotting area
-* (see the Labelling attribute). In this case, the Edge attribute
-* only affects the placement of the descriptive labels (these are
-* drawn at the edges of the plotting area, rather than along the
-* axis lines).
-*att--
-*/
-/* The edges of the plotting area on which to place numerical labels
- for axes 0 and 1. Has a value of -1 when not set yielding a value
- of 3 (the bottom edge) for axis 0 and 0 (the left-hand edge) for
- axis 1. */
-MAKE_CLEAR(Edge,edge,-1,0)
-MAKE_GET(Edge,int,0,( this->edge[axis] == -1 ? (axis?LEFT:BOTTOM) : this->edge[axis] ),0)
-MAKE_SET(Edge,int,edge,(abs( value % 4 )),0)
-MAKE_TEST(Edge,( this->edge[axis] != -1 ),0)
-
-MAKE_GET3(Edge,int,0,this->uedge[axis],0)
-MAKE_SET3(Edge,int,uedge,(abs( value % 4 )),0)
-
-/* NumLab. */
-/* -------- */
-/*
-*att++
-* Name:
-* NumLab(axis)
-
-* Purpose:
-* Draw numerical axis labels for a Plot?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute controls the appearance of an annotated
-c coordinate grid (drawn with the astGrid function) by determining
-f coordinate grid (drawn with the AST_GRID routine) by determining
-* whether labels should be drawn to represent the numerical values
-* along each axis of a Plot. It takes a separate value for each
-* physical axis of a Plot so that, for instance, the setting
-* "NumLab(2)=1" specifies that numerical labels should be drawn
-* for the second axis.
-*
-* If the NumLab value of a Plot axis is non-zero (the default),
-* then numerical labels will be drawn for that axis, otherwise
-* they will be omitted.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - The drawing of associated descriptive axis labels for a Plot
-* (describing the quantity being plotted along each axis) is
-* controlled by the TextLab(axis) attribute.
-* - If no axis is specified, (e.g. "NumLab" instead of
-* "NumLab(2)"), then a "set" or "clear" operation will affect the
-* attribute value of all the Plot axes, while a "get" or "test"
-* operation will use just the NumLab(1) value.
-*att--
-*/
-/* Are numerical labels to be displayed on each axis? Has a value of
- -1 when not set yielding a value of 1 (yes) for both axes. */
-MAKE_CLEAR(NumLab,numlab,-1,0)
-MAKE_GET(NumLab,int,1,( this->numlab[axis] == -1 ? 1 : this->numlab[axis] ),0)
-MAKE_TEST(NumLab,( this->numlab[axis] != -1 ),0)
-MAKE_SET(NumLab,int,numlab,( value ? 1 : 0 ),0)
-
-/* NumLabGap. */
-/* --------- */
-/*
-*att++
-* Name:
-* NumLabGap(axis)
-
-* Purpose:
-* Spacing of numerical labels for a Plot.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute controls the appearance of an annotated
-c coordinate grid (drawn with the astGrid function) by determining
-f coordinate grid (drawn with the AST_GRID routine) by determining
-* where numerical axis labels are placed relative to the axes they
-* describe. It takes a separate value for each physical axis of a
-* Plot so that, for instance, the setting "NumLabGap(2)=-0.01"
-* specifies where the numerical label for the second axis should
-* be drawn.
-*
-* For each axis, the NumLabGap value gives the spacing between the
-* axis line (or edge of the plotting area, if appropriate) and the
-* nearest edge of the corresponding numerical axis
-* labels. Positive values cause the descriptive label to be placed
-* on the opposite side of the line to the default tick marks,
-* while negative values cause it to be placed on the same side.
-*
-* The NumLabGap value should be given as a fraction of the minimum
-* dimension of the plotting area, the default value being +0.01.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - If no axis is specified, (e.g. "NumLabGap" instead of
-* "NumLabGap(2)"), then a "set" or "clear" operation will affect
-* the attribute value of all the Plot axes, while a "get" or
-* "test" operation will use just the NumLabGap(1) value.
-*att--
-*/
-/* Fractional spacing between numeric labels and axes. Has a value of AST__BAD
-when not set yielding a default value of 0.01. */
-MAKE_CLEAR(NumLabGap,numlabgap,AST__BAD,0)
-MAKE_GET(NumLabGap,double,0.0,( this->numlabgap[ axis ] == AST__BAD ? 0.01 : this->numlabgap[axis]),0)
-MAKE_SET(NumLabGap,double,numlabgap,value,0)
-MAKE_TEST(NumLabGap,( this->numlabgap[axis] != AST__BAD ),0)
-
-/* MinTick. */
-/* -------- */
-/*
-*att++
-* Name:
-* MinTick(axis)
-
-* Purpose:
-* Density of minor tick marks for a Plot.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer.
-
-* Description:
-* This attribute controls the appearance of an annotated
-c coordinate grid (drawn with the astGrid function) by determining
-f coordinate grid (drawn with the AST_GRID routine) by determining
-* the density of minor tick marks which appear between the major
-* axis values of a Plot. It takes a separate value for each
-* physical axis of a Plot so that, for instance, the setting
-* "MinTick(2)=2" specifies the density of minor tick marks along
-* the second axis.
-*
-* The value supplied should be the number of minor divisions
-* required between each pair of major axis values, this being one
-* more than the number of minor tick marks to be drawn. By
-* default, a value is chosen that depends on the gap between major
-* axis values and the nature of the axis.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - If no axis is specified, (e.g. "MinTick" instead of
-* "MinTick(2)"), then a "set" or "clear" operation will affect
-* the attribute value of all the Plot axes, while a "get" or
-* "test" operation will use just the MinTick(1) value.
-*att--
-*/
-/* How many divisions are there between major tick marks? Has a value
-of -1 when not set yielding a value of 1 for both axes. */
-MAKE_CLEAR(MinTick,mintick,-1,0)
-MAKE_GET(MinTick,int,1,( this->mintick[axis] == -1 ? 1 : this->mintick[axis] ),0)
-MAKE_TEST(MinTick,( this->mintick[axis] != -1 ),0)
-MAKE_SET(MinTick,int,mintick,( (value < 1)? 1 : value ),0)
-
-MAKE_GET3(MinTick,int,1,this->umintk[axis],0)
-MAKE_SET3(MinTick,int,umintk,( (value < 1)? 1 : value ),0)
-
-/* TextLab. */
-/* --------- */
-/*
-*att++
-* Name:
-* TextLab(axis)
-
-* Purpose:
-* Draw descriptive axis labels for a Plot?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute controls the appearance of an annotated
-c coordinate grid (drawn with the astGrid function) by determining
-f coordinate grid (drawn with the AST_GRID routine) by determining
-* whether textual labels should be drawn to describe the quantity
-* being represented on each axis of a Plot. It takes a separate
-* value for each physical axis of a Plot so that, for instance,
-* the setting "TextLab(2)=1" specifies that descriptive labels
-* should be drawn for the second axis.
-*
-* If the TextLab value of a Plot axis is non-zero, then
-* descriptive labels will be drawn for that axis, otherwise they
-* will be omitted. The default behaviour is to draw descriptive
-* labels if tick marks and numerical labels are being drawn around
-* the edges of the plotting area (see the Labelling attribute),
-* but to omit them otherwise.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - The text used for the descriptive labels is derived from the
-* Plot's Label(axis) attribute, together with its Unit(axis)
-* attribute if appropriate (see the LabelUnits(axis) attribute).
-* - The drawing of numerical axis labels for a Plot (which
-* indicate values on the axis) is controlled by the NumLab(axis)
-* attribute.
-* - If no axis is specified, (e.g. "TextLab" instead of
-* "TextLab(2)"), then a "set" or "clear" operation will affect
-* the attribute value of all the Plot axes, while a "get" or
-* "test" operation will use just the TextLab(1) value.
-*att--
-*/
-/* Are textual labels to be displayed on each axis? Has a value of -1
- when not set yielding a value of 1 (yes) for both axes. */
-MAKE_CLEAR(TextLab,textlab,-1,0)
-MAKE_GET(TextLab,int,1,( this->textlab[axis] == -1 ? 1 : this->textlab[axis] ),0)
-MAKE_TEST(TextLab,( this->textlab[axis] != -1 ),0)
-MAKE_SET(TextLab,int,textlab,( value ? 1 : 0 ),0)
-
-MAKE_GET3(TextLab,int,1,this->utxtlb[axis],0)
-MAKE_SET3(TextLab,int,utxtlb,( value ? 1 : 0 ),0)
-
-/* TextLabGap. */
-/* ----------- */
-/*
-*att++
-* Name:
-* TextLabGap(axis)
-
-* Purpose:
-* Spacing of descriptive axis labels for a Plot.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute controls the appearance of an annotated
-c coordinate grid (drawn with the astGrid function) by determining
-f coordinate grid (drawn with the AST_GRID routine) by determining
-* where descriptive axis labels are placed relative to the axes they
-* describe. It takes a separate value for each physical axis of a
-* Plot so that, for instance, the setting "TextLabGap(2)=0.01"
-* specifies where the descriptive label for the second axis should
-* be drawn.
-*
-* For each axis, the TextLabGap value gives the spacing between the
-* descriptive label and the edge of a box enclosing all other parts
-* of the annotated grid (excluding other descriptive labels). The gap
-* is measured to the nearest edge of the label (i.e. the top or the
-* bottom). Positive values cause the descriptive label to be placed
-* outside the bounding box, while negative values cause it to be placed
-* inside.
-*
-* The TextLabGap value should be given as a fraction of the minimum
-* dimension of the plotting area, the default value being +0.01.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - If drawn, descriptive labels are always placed at the edges of
-* the plotting area, even although the corresponding numerical
-* labels may be drawn along axis lines in the interior of the
-* plotting area (see the Labelling attribute).
-* - If no axis is specified, (e.g. "TextLabGap" instead of
-* "TextLabGap(2)"), then a "set" or "clear" operation will affect
-* the attribute value of all the Plot axes, while a "get" or
-* "test" operation will use just the TextLabGap(1) value.
-*att--
-*/
-/* Fractional spacing between numeric labels and axes. Has a value of AST__BAD
-when not set yielding a default value of 0.01. */
-MAKE_CLEAR(TextLabGap,textlabgap,AST__BAD,0)
-MAKE_GET(TextLabGap,double,0.0,( this->textlabgap[ axis ] == AST__BAD ? 0.01 : this->textlabgap[axis]),0)
-MAKE_SET(TextLabGap,double,textlabgap,value,0)
-MAKE_TEST(TextLabGap,( this->textlabgap[axis] != AST__BAD ),0)
-
-/* LabelUnits. */
-/* ----------- */
-/*
-*att++
-* Name:
-* LabelUnits(axis)
-
-* Purpose:
-* Use axis unit descriptions in a Plot?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute controls the appearance of an annotated
-c coordinate grid (drawn with the astGrid function) by determining
-f coordinate grid (drawn with the AST_GRID routine) by determining
-* whether the descriptive labels drawn for each axis of a Plot
-* should include a description of the units being used on the
-* axis. It takes a separate value for each physical axis of a
-* Plot so that, for instance, the setting "LabelUnits(2)=1"
-* specifies that a unit description should be included in the
-* label for the second axis.
-*
-* If the LabelUnits value of a Plot axis is non-zero, a unit
-* description will be included in the descriptive label for that
-* axis, otherwise it will be omitted. The default behaviour is to
-* include a unit description unless the current Frame of the Plot
-* is a SkyFrame representing equatorial, ecliptic, galactic or
-* supergalactic coordinates, in which case it is omitted.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - The text used for the unit description is obtained from the
-* Plot's Unit(axis) attribute.
-* - If no axis is specified, (e.g. "LabelUnits" instead of
-* "LabelUnits(2)"), then a "set" or "clear" operation will affect
-* the attribute value of all the Plot axes, while a "get" or
-* "test" operation will use just the LabelUnits(1) value.
-* - If the current Frame of the Plot is not a SkyFrame, but includes
-* axes which were extracted from a SkyFrame, then the default behaviour
-* is to include a unit description only for those axes which were not
-* extracted from a SkyFrame.
-*att--
-*/
-/* Are textual labels to include a string describing the axis units? Has a
-value of -1 when not set yielding a default of 1. */
-MAKE_CLEAR(LabelUnits,labelunits,-1,0)
-MAKE_TEST(LabelUnits,( this->labelunits[axis] != -1 ),0)
-MAKE_SET(LabelUnits,int,labelunits,( value ? 1 : 0 ),0)
-
-MAKE_GET3(LabelUnits,int,1,this->ulbunit[axis],0)
-MAKE_SET3(LabelUnits,int,ulbunit,( value ? 1 : 0 ),0)
-
-/* Style. */
-/* ------ */
-/*
-*att++
-* Name:
-* Style(element)
-
-* Purpose:
-* Line style for a Plot element.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer.
-
-* Description:
-* This attribute determines the line style used when drawing each
-* element of graphical output produced by a Plot. It takes a
-* separate value for each graphical element so that, for instance,
-* the setting "Style(border)=2" causes the Plot border to be drawn
-* using line style 2 (which might result in, say, a dashed line).
-*
-* The range of integer line styles available and their appearance
-* is determined by the underlying graphics system. The default
-* behaviour is for all graphical elements to be drawn using the
-* default line style supplied by this graphics system (normally,
-* this is likely to give a solid line).
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - For a list of the graphical elements available, see the
-* description of the Plot class.
-* - If no graphical element is specified, (e.g. "Style" instead of
-* "Style(border)"), then a "set" or "clear" operation will affect
-* the attribute value of all graphical elements, while a "get" or
-* "test" operation will use just the Style(Border) value.
-*att--
-*/
-/* Line styles. Has a value of -1 when not set yielding a default of 1. */
-MAKE_CLEAR(Style,style,-1,AST__NPID)
-MAKE_GET(Style,int,1,( this->style[axis] == -1 ? 1 : this->style[axis] ),AST__NPID)
-MAKE_TEST(Style,( this->style[axis] != -1 ),AST__NPID)
-MAKE_SET(Style,int,style,value,AST__NPID)
-
-/* Font. */
-/* ----- */
-/*
-*att++
-* Name:
-* Font(element)
-
-* Purpose:
-* Character font for a Plot element.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer.
-
-* Description:
-* This attribute determines the character font index used when
-* drawing each element of graphical output produced by a Plot. It
-* takes a separate value for each graphical element so that, for
-* instance, the setting "Font(title)=2" causes the Plot title to
-* be drawn using font number 2.
-*
-* The range of integer font indices available and the appearance
-* of the resulting text is determined by the underlying graphics
-* system. The default behaviour is for all graphical elements to
-* be drawn using the default font supplied by this graphics
-* system.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - For a list of the graphical elements available, see the
-* description of the Plot class.
-* - If no graphical element is specified, (e.g. "Font" instead
-* of "Font(title)"), then a "set" or "clear" operation will
-* affect the attribute value of all graphical elements, while a
-* "get" or "test" operation will use just the Font(TextLab)
-* value.
-*att--
-*/
-/* Character fonts. Has a value of -1 when not set yielding a default of 1. */
-MAKE_CLEAR(Font,font,-1,AST__NPID)
-MAKE_GET(Font,int,1,( this->font[axis] == -1 ? 1 : this->font[axis] ),AST__NPID)
-MAKE_TEST(Font,( this->font[axis] != -1 ),AST__NPID)
-MAKE_SET(Font,int,font,value,AST__NPID)
-
-/* Colour. */
-/* ------- */
-/*
-*att++
-* Name:
-* Colour(element)
-
-* Purpose:
-* Colour index for a Plot element.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer.
-
-* Description:
-* This attribute determines the colour index used when drawing
-* each element of graphical output produced by a Plot. It takes a
-* separate value for each graphical element so that, for instance,
-* the setting "Colour(title)=2" causes the Plot title to be drawn
-* using colour index 2. The synonym "Color" may also be used.
-*
-* The range of integer colour indices available and their
-* appearance is determined by the underlying graphics system. The
-* default behaviour is for all graphical elements to be drawn
-* using the default colour index supplied by this graphics system
-* (normally, this is likely to result in white plotting on a black
-* background, or vice versa).
-d
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - For a list of the graphical elements available, see the
-* description of the Plot class.
-* - If no graphical element is specified, (e.g. "Colour" instead
-* of "Colour(title)"), then a "set" or "clear" operation will
-* affect the attribute value of all graphical elements, while a
-* "get" or "test" operation will use just the Colour(TextLab)
-* value.
-*att--
-*/
-/* Colours. Has a value of -1 when not set yielding a default of 1. */
-MAKE_CLEAR(Colour,colour,-1,AST__NPID)
-MAKE_GET(Colour,int,1,( this->colour[axis] == -1 ? 1 : this->colour[axis] ),AST__NPID)
-MAKE_TEST(Colour,( this->colour[axis] != -1 ),AST__NPID)
-MAKE_SET(Colour,int,colour,value,AST__NPID)
-
-/* Width. */
-/* ------ */
-/*
-*att++
-* Name:
-* Width(element)
-
-* Purpose:
-* Line width for a Plot element.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute determines the line width used when drawing each
-* element of graphical output produced by a Plot. It takes a
-* separate value for each graphical element so that, for instance,
-* the setting "Width(border)=2.0" causes the Plot border to be
-* drawn using a line width of 2.0. A value of 1.0 results in a
-* line thickness which is approximately 0.0005 times the length of
-* the diagonal of the entire display surface.
-*
-* The actual appearance of lines drawn with any particular width,
-* and the range of available widths, is determined by the
-* underlying graphics system. The default behaviour is for all
-* graphical elements to be drawn using the default line width
-* supplied by this graphics system. This will not necessarily
-* correspond to a Width value of 1.0.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - For a list of the graphical elements available, see the
-* description of the Plot class.
-* - If no graphical element is specified, (e.g. "Width" instead of
-* "Width(border)"), then a "set" or "clear" operation will affect
-* the attribute value of all graphical elements, while a "get" or
-* "test" operation will use just the Width(Border) value.
-*att--
-*/
-/* Line widths. Has a value of AST__BAD when not set yielding a
- default of 1.0. */
-MAKE_CLEAR(Width,width,AST__BAD,AST__NPID)
-MAKE_GET(Width,double,1.0,( this->width[axis] == AST__BAD ? 1.0 : this->width[axis] ),AST__NPID)
-MAKE_TEST(Width,( this->width[axis] != AST__BAD ),AST__NPID)
-MAKE_SET(Width,double,width,(value!=0.00)?value:(astError(AST__ATTIN,"astSetWidth(Plot):Invalid zero value supplied for Width(%s) attribute", status,GrfItem(axis,NULL,NULL, status )),this->width[axis]),AST__NPID)
-
-/* Size. */
-/* ----- */
-/*
-*att++
-* Name:
-* Size(element)
-
-* Purpose:
-* Character size for a Plot element.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating Point.
-
-* Description:
-* This attribute determines the character size used when drawing
-* each element of graphical output produced by a Plot. It takes a
-* separate value for each graphical element so that, for instance,
-* the setting "Size(title)=2.0" causes the Plot title to be drawn
-* using twice the default character size.
-*
-* The range of character sizes available and the appearance of the
-* resulting text is determined by the underlying graphics system.
-* The default behaviour is for all graphical elements to be drawn
-* using the default character size supplied by this graphics
-* system.
-
-* Applicability:
-* Plot
-* All Plots have this attribute.
-
-* Notes:
-* - For a list of the graphical elements available, see the
-* description of the Plot class.
-* - If no graphical element is specified, (e.g. "Size" instead
-* of "Size(title)"), then a "set" or "clear" operation will
-* affect the attribute value of all graphical elements, while a
-* "get" or "test" operation will use just the Size(TextLab)
-* value.
-*att--
-*/
-/* Character sizes. Has a value of AST__BAD when not set yielding a default
- of 1.0. */
-MAKE_CLEAR(Size,size,AST__BAD,AST__NPID)
-MAKE_GET(Size,double,1.0,( this->size[axis] == AST__BAD ? 1.0 : this->size[axis] ),AST__NPID)
-MAKE_TEST(Size,( this->size[axis] != AST__BAD ),AST__NPID)
-MAKE_SET(Size,double,size,(value!=0.00)?value:(astError(AST__ATTIN,"astSetSize(Plot): Invalid zero value supplied for Size(%s) attribute", status,GrfItem(axis,NULL,NULL, status )),this->size[axis]),AST__NPID)
-
-/* Member functions. */
-/* ================= */
-static void AddCdt( AstPlotCurveData *cdt1, AstPlotCurveData *cdt2, const char *method,
- const char *class, int *status ){
-/*
-*
-* Name:
-* AddCdt
-
-* Purpose:
-* Append one AstPlotCurveData structure to another.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void AddCdt( AstPlotCurveData *cdt1, AstPlotCurveData *cdt2, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* Plot private function.
-
-* Description:
-* The contents of the structure pointed to by "cdt2" is appended
-* to the structure pointed to by "cdt1".
-
-* Parameters:
-* cdt1
-* Pointer to the AstPlotCurveData structure to be modified.
-* cdt2
-* Pointer to the AstPlotCurveData structure to be appended to cdt1.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - An error is reported if there is insufficient room in "cdt1" to
-* store the information in "cdt2".
-
-*/
-
-/* Local Variables: */
- int nbrk, i, j;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get the total number of breaks described by both structures. */
- nbrk = cdt1->nbrk + cdt2->nbrk;
-
-/* Report an error if this number of breaks cannot be stored in a AstPlotCurveData
- structure. */
- if( nbrk > AST__MXBRK ){
- astError( AST__CVBRK, "%s(%s): Number of breaks in curve "
- "exceeds %d.", status, method, class, AST__MXBRK );
-
-/* Otherwise, append the information. */
- } else {
-
-/* Store the index within "cdt1" of the next break to be added. */
- j = cdt1->nbrk;
-
-/* Add each the position and direction information for each of the breaks
- in "cdt2". */
- for( i = 0; i < cdt2->nbrk; i++ ){
- cdt1->xbrk[ j ] = cdt2->xbrk[ i ];
- cdt1->ybrk[ j ] = cdt2->ybrk[ i ];
- cdt1->vxbrk[ j ] = cdt2->vxbrk[ i ];
- cdt1->vybrk[ j ] = cdt2->vybrk[ i ];
-
-/* Increment the index of the next break in "cdt1". */
- j++;
- }
-
-/* Update the number of breaks in "cdt1". */
- cdt1->nbrk = nbrk;
-
-/* Update the length of the curve described by "cdt1". */
- cdt1->length += cdt2->length;
-
-/* Update the flag indicating if the entire curve is outside the plotting
- zone. */
- if( !cdt2->out ) cdt1->out = 0;
-
- }
-
-/* Return. */
- return;
-
-}
-
-static void Apoly( AstPlot *this, float x, float y, const char *method, const char *class, int *status ){
-/*
-* Name:
-* Apoly
-
-* Purpose:
-* Append a another point to a poly line.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void Apoly( AstPlot *this, float x, float y, const char *method, const char *class, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function appends the supplied point to the current poly line. If
-* this results in the buffer being filled, the buffer is drawn, and
-* re-set to hold just the supplied point.
-
-* Parameters:
-* x
-* The graphics x coordinate.
-* y
-* The graphics y coordinate.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-
-/* Check the global status. */
- if( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* If the buffer is already full, output it to the screen and re-initialise
- it to hold just the final point. */
- if( Poly_n == AST__PLOT_POLY_MAX ){
- Opoly( this, method, class, status );
- Poly_x[ 0 ] = Poly_x[ AST__PLOT_POLY_MAX - 1 ];
- Poly_y[ 0 ] = Poly_y[ AST__PLOT_POLY_MAX - 1 ];
- Poly_n = 1;
- }
-
-/* Add the supplied point to the buffer. */
- Poly_x[ Poly_n ] = x;
- Poly_y[ Poly_n++ ] = y;
-
-/* Update the box containing all plotted lines. */
- Box_lbnd[ 0 ] = MIN( x, Box_lbnd[ 0 ] );
- Box_ubnd[ 0 ] = MAX( x, Box_ubnd[ 0 ] );
- Box_lbnd[ 1 ] = MIN( y, Box_lbnd[ 1 ] );
- Box_ubnd[ 1 ] = MAX( y, Box_ubnd[ 1 ] );
-
-}
-
-static void PurgeCdata( AstPlotCurveData *cdata, int *status ){
-/*
-*
-* Name:
-* AstPlotCurveData
-
-* Purpose:
-* Remove any zero length sections from the description of a curve.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void PurgeCdata( AstPlotCurveData *cdata )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function removes any zero length sections from the supplied
-* AstPlotCurveData struture, which describes a multi-section curve.
-
-* Parameters:
-* cdata
-* A pointer to the structure containing information about the
-* breaks in a curve.
-
-*/
-
-/* Local Variables: */
- int brk; /*Break index */
- int i; /*Break index */
-
-/* Check the global error status. */
- if ( !astOK || !cdata ) return;
-
-/* Loop round all breaks. */
- brk = 0;
- while( brk < cdata->nbrk ) {
-
-/* If this break and the next one are co-incident, remove both breaks. */
- if( cdata->xbrk[ brk ] == cdata->xbrk[ brk + 1 ] &&
- cdata->ybrk[ brk ] == cdata->ybrk[ brk + 1 ] ) {
-
-/* Shuffle down the higher elements of all the arrays in the curve data. */
- for( i = brk + 2; i < cdata->nbrk; i++ ){
- cdata->xbrk[ i - 2 ] = cdata->xbrk[ i ];
- cdata->ybrk[ i - 2 ] = cdata->ybrk[ i ];
- cdata->vxbrk[ i - 2 ] = cdata->vxbrk[ i ];
- cdata->vybrk[ i - 2 ] = cdata->vybrk[ i ];
- }
-
-/* Decrement the number of breaks in the curve data. */
- cdata->nbrk -= 2;
-
-/* If the section is not zero length, move on to the next pair of breaks. */
- } else {
- brk += 2;
- }
- }
-}
-
-static void AxPlot( AstPlot *this, int axis, const double *start, double length,
- int ink, AstPlotCurveData *cdata, const char *method, const char *class, int *status ){
-/*
-*
-* Name:
-* AxPlot
-
-* Purpose:
-* Draw a curve with constant axis value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void AxPlot( AstPlot *this, int axis, const double *start, double length,
-* int ink, AstPlotCurveData *cdata, const char *method, const char *class, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function draws a section of a curve of the specified length
-* with constant value on a specified axis in the current Frame of the
-* Plot, starting at the specified position. The algorithm used can handle
-* discontinuities in the Mapping between the current Frame and graphics
-* coordinates, and information describing any breaks in the curve
-* (including the start and end of the curve) are returned in the supplied
-* AstPlotCurveData structure.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* axis
-* The zero-based index of an axis within the current Frame of the Plot.
-* The curve has a varying value on this axis.
-* start
-* A pointer to a an array holding the coordinates of the start of the
-* curve within the current Frame of the Plot.
-* length
-* The length of the section of the curve to be drawn, given as an
-* increment along the axis specified by parameter "axis".
-* ink
-* If zero, the curve is not actually drawn, but information about
-* the breaks is still returned. If non-zero, the curve is also drawn.
-* cdata
-* A pointer to a structure in which to return information about the
-* breaks in the curve.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - No curve is draw if the "start" array contains any bad values
-* (i.e. values equal to AST__BAD), or if the "length" value is bad,
-* or if a NULL pointer is supplied for "cdata". No errors are reported
-* in these cases.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- double d[ CRV_NPNT ]; /* Offsets to evenly spaced points along curve */
- double x[ CRV_NPNT ]; /* X coords at evenly spaced points along curve */
- double y[ CRV_NPNT ]; /* Y coords at evenly spaced points along curve */
- double tol; /* Absolute tolerance value */
- int i; /* Loop count */
- int naxes; /* No. of axes in the base Frame */
- int ok; /* Are all start coords good? */
- int gridid; /* Identifier value for element being drawn */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-#ifdef CRV_TRACE
- printf("AXPLOT: axis %d, start (%.*g,%.*g), length %.*g\n",
- axis, DBL_DIG, start[0], DBL_DIG, start[1], DBL_DIG, length );
- getchar();
-#endif
-
-
-/* Initialise any supplied cdata structure to hold safe values. */
- if( cdata ){
- cdata->length = 0.0;
- cdata->out = 1;
- cdata->nbrk = 0;
- }
-
-/* Get the number of axes in the current Frame. */
- naxes = astGetNout( this );
-
-/* Check the "start" parameter for bad values. */
- ok = 1;
- for( i = 0; i < naxes; i++ ) {
- if( start[ i ] == AST__BAD ){
- ok = 0;
- break;
- }
- }
-
-/* Check the "length" parameter for bad values. */
- if( length == AST__BAD ) ok = 0;
-
-/* Check that the "cdata" pointer can be used. */
- if( !cdata ) ok = 0;
-
-/* Only proceed if the parameters are OK, and there has been no error. */
- if( ok && astOK ){
-
-/* Establish the correct graphical attributes as defined by attributes
- with the supplied Plot. */
- if( axis == 0 ) {
- gridid = AST__GRIDLINE2_ID;
- } else {
- gridid = AST__GRIDLINE1_ID;
- }
- astGrfAttrs( this, gridid, 1, GRF__LINE, method, class );
-
-/* Set up the externals used to communicate with the Map1 function...
- The number of axes in the physical coordinate system (i.e. the current
- Frame). */
- Map1_ncoord = naxes;
-
-/* See if tick marks are logarithmically or linearly spaced. */
- Map1_log = astGetLogTicks( this, axis );
-
-/* A pointer to the Plot, the Current Frame and the Mapping. */
- Map1_plot = this;
- Map1_frame = astGetFrame( this, AST__CURRENT );
- Map1_map = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Physical coords at the start of the curve (dist=0). */
- Map1_origin = start;
-
-/* Length of the curve. */
- Map1_length = length;
-
-/* The index of the axis which the curve follows. */
- Map1_axis = axis;
-
-/* Decide whether to omit points not in their normal ranges. */
- Map1_norm = !IsASkyAxis( Map1_frame, 0, status ) &&
- !IsASkyAxis( Map1_frame, 1, status );
-
-/* Convert the tolerance from relative to absolute graphics coordinates. */
- tol = astGetTol( this )*MAX( this->xhi - this->xlo,
- this->yhi - this->ylo );
-
-/* Now set up the external variables used by the Crv and CrvLine function. */
- Crv_scerr = ( astGetLogPlot( this, 0 ) ||
- astGetLogPlot( this, 1 ) ) ? 100.0 : 1.5;
- Crv_ux0 = AST__BAD;
- Crv_tol = tol;
- Crv_limit = 0.5*tol*tol;
- Crv_map = Map1;
- Crv_ink = ink;
- Crv_xlo = this->xlo;
- Crv_xhi = this->xhi;
- Crv_ylo = this->ylo;
- Crv_yhi = this->yhi;
- Crv_out = 1;
- Crv_xbrk = cdata->xbrk;
- Crv_ybrk = cdata->ybrk;
- Crv_vxbrk = cdata->vxbrk;
- Crv_vybrk = cdata->vybrk;
- Crv_clip = astGetClip( this ) & 1;
-
-/* Set up a list of points spread evenly over the curve. */
- for( i = 0; i < CRV_NPNT; i++ ){
- d[ i ] = ( (double) i)/( (double) CRV_NSEG );
- }
-
-/* Map these points into graphics coordinates. */
- Map1( CRV_NPNT, d, x, y, method, class, status GLOBALS_NAME );
-
-/* Use Crv and Map1 to draw the curve. */
- Crv( this, d, x, y, 0, NULL, NULL, method, class, status );
-
-/* End the current poly line. */
- Opoly( this, method, class, status );
-
-/* Tidy up the static data used by Map1. */
- Map1( 0, NULL, NULL, NULL, method, class, status GLOBALS_NAME );
-
-/* If no part of the curve could be drawn, set the number of breaks and the
- length of the drawn curve to zero. */
- if( Crv_out ) {
- Crv_nbrk = 0;
- Crv_len = 0.0F;
-
-/* Otherwise, add an extra break to the returned structure at the position of
- the last point to be plotted. */
- } else {
- Crv_nbrk++;
- if( Crv_nbrk > AST__PLOT_CRV_MXBRK ){
- astError( AST__CVBRK, "%s(%s): Number of breaks in curve "
- "exceeds %d.", status, method, class, AST__PLOT_CRV_MXBRK );
- } else {
- *(Crv_xbrk++) = (float) Crv_xl;
- *(Crv_ybrk++) = (float) Crv_yl;
- *(Crv_vxbrk++) = (float) -Crv_vxl;
- *(Crv_vybrk++) = (float) -Crv_vyl;
- }
- }
-
-/* Store extra information about the curve in the returned structure, and
- purge any zero length sections. */
- if( cdata ){
- cdata->length = Crv_len;
- cdata->out = Crv_out;
- cdata->nbrk = Crv_nbrk;
- PurgeCdata( cdata, status );
- }
-
-/* Annul the Frame and Mapping. */
- Map1_frame = astAnnul( Map1_frame );
- Map1_map = astAnnul( Map1_map );
-
-/* Re-establish the original graphical attributes. */
- astGrfAttrs( this, gridid, 0, GRF__LINE, method, class );
-
- }
-
-/* Return. */
- return;
-
-}
-
-static int Boundary( AstPlot *this, const char *method, const char *class, int *status ){
-/*
-* Name:
-* Boundary
-
-* Purpose:
-* Draw a boundary around regions containing valid physical positions.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int Boundary( AstPlot *this, const char *method, const char *class, int *status )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-* This function draws a boundary around the regions of the plotting
-* area which contain valid, unclipped, physical coordinates, but does
-* not include the intersections with the edges of the plotting area.
-*
-* Broadly, the algorithm is as follows: An initial coarse grid is
-* created covering the entire plotting area. This grid consists of a
-* regular square matrix of points in graphics coordinates, and the
-* corresponding physical coordinates. An array of flags is created,
-* one for each grid cell, indicating if the boundary passes through the
-* cell. This is assumed to be the case if the cell has a mix of good and
-* bad corners (i.e corners which have good or bad physical coordinates).
-* This assumption does not locate all boundary cells though, since if
-* the boundary passes into and out of a cell throught the same edge,
-* the corners of the cell will be either all good or all bad. But for
-* the moment, we just concentrate on the ones found using this simple
-* assumption. For each such cell, a finer grid is then created covering
-* the cell, and the boundary is drawn through this fine grid using
-* TraceBorder. TraceBorder returns a set of four flags indicating which
-* edges of the cell were intersected by the boundary. A check is then
-* made on any of the four neighbouring cells into which the curve
-* passes. If any of these cells were not flagged as boundary cells using
-* the simple assumption described earlier, then they are flagged now
-* (with a different flag value). Once all the cells located using the
-* simple assumption have been processed, any further cells flagged
-* with the new flag value are also processed using TraceBorder in the
-* same way. This process is repeated until no extra boundary cells are
-* found.
-
-* Parameters:
-* this
-* Pointer to a Plot.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A flag indicating if any regions containing invalid physical
-* coordinates were found within the plotting area.
-
-* Notes:
-* - This function assumes the physical coordinate Frame is
-* 2-dimensional, and it should not be used if this is not the case.
-* - A value of zero is returned if an error has already occurred, or
-* if this function should fail for any reason.
-
-*/
-
-/* Local Variables: */
- AstFrame *bfrm; /* Pointer to base Plot Frame */
- AstFrame *cfrm; /* Pointer to current Plot Frame */
- AstMapping *map; /* Pointer to Plot mapping (graphics -> physical) */
- AstMapping *rmap; /* Pointer to Plot mapping (graphics -> physical) */
- AstRegion *breg; /* Region mapped into base Plot Frame */
- double blbnd[ 2 ]; /* Lower grid bounds in base frame */
- double bubnd[ 2 ]; /* Upper grid bounds in base frame */
- double dx; /* Plotting area width */
- double dy; /* Plotting area height */
- double power; /* Exponent in pow call */
- double rat; /* Ratio by which to reduce DIM */
- double tol; /* Fractional plotting tolerance */
- int dim; /* No. of points along each edge of coarse grid */
- int edges[ 4 ]; /* Flags indicating edges bisected by boundary */
- int rate_disabled; /* Was the astRate method initially disabled? */
- int ret; /* Any regions containing bad physical coords? */
-
-/* Check global status. */
- if( !astOK ) return 0;
-
-/* Initialise the answer to indicate that no regions containing invalid
- physical coordinates have been found. */
- ret = 0;
-
-/* Get the current Frame from the Plot. */
- cfrm = astGetFrame( this, AST__CURRENT );
-
-/* If it is a region, we use a special method, if possible, to trace the
- Region boundary. Otherwise, we use a grid tracing method that makes no
- assumptions about the nature of the Mapping or Frame. */
- if( !RegionOutline( this, cfrm, method, class, status ) ) {
-
-/* Each basic element of the boundary drawn by the following algorithm
- will be drawn at a multiple of 45 degrees to the horizontal. This can
- cause noticable aliasing. For instance, if the border is a straight
- line at 50 degrees to the horizontal, it will be drawn at 45 degrees
- for long sections, followed by a vertical leap to catch up with where
- it should be. Because of this we use a finer tolerance than for other
- drawing. */
- tol = 0.25*astGetTol( this );
-
-/* Set up the dimension of a coarse grid in graphics coordinates to cover the
- whole plotting area. This is chosen to give a finer grid for smaller
- plotting tolerances. Note, putting the power as a literal constant in
- the call to pow seems to cause a segmentation violation on some systems. */
- power = -0.666666666;
- dim = (int) 4*pow( tol, power ) + 10;
- if( dim > 400 ) dim = 400;
- if( dim < 3 ) dim = 3;
-
-/* Store the required plotting tolerance as a distance in graphics
- coords. */
- dx = fabs( this->xhi - this->xlo );
- dy = fabs( this->xhi - this->xlo );
- tol *= ( ( dx > dy ) ? dx : dy );
-
-/* Extract the Mapping from the Plot. */
- map = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Select the area covered by the coarse grid. If the current Frame is a
- Region, we use the bounding box of Region after being mapped into
- graphics coords. */
- if( astIsARegion( cfrm ) ) {
- bfrm = astGetFrame( this, AST__BASE );
-
-/* Get the Mapping from the current to the base Frame in the Plot, and
- remove the effects of any Regions. */
-
- astInvert( map );
- rmap = astRemoveRegions( map );
- astInvert( map );
-
-/* Map the Region into the GRAPHICS frame. */
- breg = astMapRegion( cfrm, rmap, bfrm );
- astGetRegionBounds( breg, blbnd, bubnd );
-
- rmap = astAnnul( rmap );
- bfrm = astAnnul( bfrm );
- breg = astAnnul( breg );
-
- rat = ( ( bubnd[ 0 ] - blbnd[ 0 ] )*( bubnd[ 1 ] - blbnd[ 1 ] ) )/
- ( ( this->xhi - this->xlo )*( this->yhi - this->ylo ) );
- rat = sqrt( rat );
- dim = (int) ( rat*dim );
- if( dim < 3 ) dim = 3;
-
-/* If the current Frame is not a Region, use the whole plot. */
- } else {
- blbnd[ 0 ] = this->xlo;
- blbnd[ 1 ] = this->ylo;
- bubnd[ 0 ] = this->xhi;
- bubnd[ 1 ] = this->yhi;
- }
-
-/* Disable the astRate method in order to improve the speed of
- evaluating the Mapping in cases where the Mapping includes an
- AstRateMap. Note the original value of the flag so that it can be
- re-instated at the end. */
- rate_disabled = astRateState( 1 );
-
-/* Draw the boundary. */
- ret = TraceBorder( this, map, blbnd[ 0 ], bubnd[ 0 ], blbnd[ 1 ],
- bubnd[ 1 ], dim, tol, edges, method, class, status );
-
-/* Re-instate the original setting of the "astRate disabled" flag. */
- astRateState( rate_disabled );
-
-/* Release the remaining resources. */
- map = astAnnul( map );
- }
- cfrm = astAnnul( cfrm );
-
-/* If an error has occurred, return 0. */
- if( !astOK ) ret = 0;
-
-/* Return the answer. */
- return ret;
-}
-
-static int Border( AstPlot *this_nd, int *status ){
-/*
-*++
-* Name:
-c astBorder
-f AST_BORDER
-
-* Purpose:
-* Draw a border around valid regions of a Plot.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "plot.h"
-c int astBorder( AstPlot *this )
-f RESULT = AST_BORDER( THIS, STATUS )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-* This function draws a (line) border around regions of the
-* plotting area of a Plot which correspond to valid, unclipped
-* physical coordinates. For example, when plotting using an
-* all-sky map projection, this function could be used to draw the
-* boundary of the celestial sphere when it is projected on to the
-* plotting surface.
-*
-* If the entire plotting area contains valid, unclipped physical
-* coordinates, then the boundary will just be a rectangular box
-* around the edges of the plotting area.
-*
-* If the Plot is a Plot3D, this method is applied individually to
-* each of the three 2D Plots encapsulated within the Plot3D (each of
-* these Plots corresponds to a single 2D plane in the 3D graphics
-* system). In addition, if the entire plotting volume has valid
-* coordinates in the 3D current Frame of the Plot3D, then additional
-* lines are drawn along the edges of the 3D plotting volume so that
-* the entire plotting volume is enclosed within a cuboid grid.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Plot.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astBorder()
-f AST_BORDER = LOGICAL
-c Zero is returned if the plotting space is completely filled by
-f .FALSE. is returned if the plotting space is completely filled by
-* valid, unclipped physical coordinates (so that only a
-c rectangular box was drawn around the edge). Otherwise, one is
-f rectangular box was drawn around the edge). Otherwise, .TRUE. is
-* returned.
-
-* Notes:
-c - A value of zero will be returned if this function is invoked
-f - A value of .FALSE. will be returned if this function is invoked
-c with the AST error status set, or if it should fail for any
-f with STATUS set to an error value, or if it should fail for any
-* reason.
-* - An error results if either the current Frame or the base Frame
-* of the Plot is not 2-dimensional or (for a Plot3D) 3-dimensional.
-* - An error also results if the transformation between the base
-* and current Frames of the Plot is not defined (i.e. the Plot's
-* TranForward attribute is zero).
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstPlot *this; /* Plot with no more than 2 current axes */
- AstPlotCurveData cdata; /* Structure to receive break information */
- const char *class; /* Object class */
- const char *method; /* Current method */
- int inval; /* Were any bad regions found? */
- int naxes; /* No. of axes in the base Frame */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this_nd);
-
-/* Store the current method, and the class of the supplied object for use
- in error messages.*/
- method = "astBorder";
- class = astGetClass( this_nd );
-
-/* Initialise the bounding box for primitives produced by this call. */
- if( !Boxp_freeze ) {
- Boxp_lbnd[ 0 ] = FLT_MAX;
- Boxp_lbnd[ 1 ] = FLT_MAX;
- Boxp_ubnd[ 0 ] = FLT_MIN;
- Boxp_ubnd[ 1 ] = FLT_MIN;
- }
-
-/* Check the base Frame of the Plot is 2-D. */
- naxes = astGetNin( this_nd );
- if( naxes != 2 && astOK ){
- astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the base "
- "Frame of the supplied %s is invalid - this number should "
- "be 2.", status, method, class, naxes, class );
- }
-
-/* Get a Plot with a 2D (or 1D) current Frame. */
- this = (AstPlot *) Fset2D( (AstFrameSet *) this_nd, AST__CURRENT, status );
-
-/* Check the current Frame of the Plot is 2-D. */
- naxes = astGetNout( this );
- if( naxes != 2 && astOK ){
- astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the current "
- "Frame of the supplied %s is invalid - this number should "
- "be 2.", status, method, class, naxes, class );
- }
-
-/* Establish the correct graphical attributes as defined by attributes
- with the supplied Plot. */
- astGrfAttrs( this, AST__BORDER_ID, 1, GRF__LINE, method, class );
-
-/* We first draw the intersections of the regions containing valid
- physical coordinates with the edges of the plotting area. First do
- the bottom edge. */
- LinePlot( this, this->xlo, this->ylo, this->xhi, this->ylo,
- 1, &cdata, method, class, status );
-
-/* Now do the right-hand edge. */
- LinePlot( this, this->xhi, this->ylo, this->xhi, this->yhi,
- 1, &cdata, method, class, status );
-
-/* Now do the top edge. */
- LinePlot( this, this->xhi, this->yhi, this->xlo, this->yhi,
- 1, &cdata, method, class, status );
-
-/* Now do the left-hand edge. */
- LinePlot( this, this->xlo, this->yhi, this->xlo, this->ylo,
- 1, &cdata, method, class, status );
-
-/* Now draw a curve following the boundary through the interior of the
- plotting area. If the current Frame in the Plot is a Region, we use a
- shorter method if possible. If this is not possible, we use a longer
- method. */
- inval = Boundary( this, method, class, status );
-
-/* Re-establish the original graphical attributes. */
- astGrfAttrs( this, AST__BORDER_ID, 0, GRF__LINE, method, class );
-
-/* Annul the 2d plot. */
- this = astAnnul( this );
-
-/* Return. */
- return inval;
-
-}
-
-static void BoundingBox( AstPlot *this, float lbnd[2], float ubnd[2], int *status ){
-/*
-*++
-* Name:
-c astBoundingBox
-f AST_BOUNDINGBOX
-
-* Purpose:
-* Return a bounding box for previously drawn graphics.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "plot.h"
-c void astBoundingBox( AstPlot *this, float lbnd[2], float ubnd[2] )
-f CALL AST_BOUNDINGBOX( THIS, LBND, UBND, STATUS )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-c This function returns the bounds of a box which just encompasess the
-f This routine returns the bounds of a box which just encompasess the
-* graphics produced by the previous call to any of the Plot methods
-* which produce graphical output. If no such previous call has yet
-* been made, or if the call failed for any reason, then the bounding box
-c returned by this function is undefined.
-f returned by this routine is undefined.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Plot.
-c lbnd
-f LBND( 2 ) = REAL (Returned)
-* A two element array in which is returned the lower limits of the
-* bounding box on each of the two axes of the graphics coordinate
-* system (the base Frame of the Plot).
-c ubnd
-f UBND( 2 ) = REAL (Returned)
-* A two element array in which is returned the upper limits of the
-* bounding box on each of the two axes of the graphics coordinate
-* system (the base Frame of the Plot).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - An error results if the base Frame of the Plot is not
-* 2-dimensional.
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrameSet *fset; /* Pointer to the Plot's FrameSet */
- int naxes; /* No. of axes in the base Frame */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* Get a pointer to the FrameSet at the start of the Plot. */
- fset = (AstFrameSet *) this;
-
-/* Check the base Frame of the Plot is 2-D. */
- naxes = astGetNin( fset );
- if( naxes != 2 && astOK ){
- astError( AST__NAXIN, "astBoundingBox(%s): Number of axes (%d) in the "
- "base Frame of the supplied %s is invalid - this number "
- "should be 2.", status, astGetClass( this ), naxes,
- astGetClass( this ) );
- }
-
-/* Return the bounding box. */
- lbnd[ 0 ] = Boxp_lbnd[ 0 ];
- lbnd[ 1 ] = Boxp_lbnd[ 1 ];
- ubnd[ 0 ] = Boxp_ubnd[ 0 ];
- ubnd[ 1 ] = Boxp_ubnd[ 1 ];
-
-/* Return. */
- return;
-
-}
-
-static int BoxCheck( float *bx, float *by, float *cx, float *cy, int *status ) {
-/*
-* Name:
-* BoxCheck
-
-* Purpose:
-* See if two boxes overlap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int BoxCheck( float *bx, float *by, float *cx, float *cy, int *status )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-* This function returns a flag indicating if two trapezoidal boxes
-* (box "b" and box "c") overlap or not.
-
-* Parameters:
-* bx
-* Pointer to an array holding the X coordinates at the 4 corners
-* of box "b".
-* by
-* Pointer to an array holding the Y coordinates at the 4 corners
-* of box "b".
-* cx
-* Pointer to an array holding the X coordinates at the 4 corners
-* of box "c".
-* cy
-* Pointer to an array holding the Y coordinates at the 4 corners
-* of box "c".
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero is returned if the boxes do not overlap or an error has
-* already occurred. Otherwise, 1 is returned.
-
-*/
-
-/* Local Variables: */
- float x2;
- float y2;
- int i;
- int ip;
- int j;
- int jp;
- int ret;
-
-/* Assume the boxes do not overlap. */
- ret = 0;
-
-/* Check the inherited status. */
- if( !astOK ) return ret;
-
-/* Check each corner of box b to see if it is inside box c. */
- for( j = 0; j < 4 && ret == 0; j++ ){
- if( Inside( 4, cx, cy, bx[ j ], by[ j ], status ) ) ret = 1;
- }
-
-/* Now check each corner of box c to see if it is inside box b. */
- for( j = 0; j < 4 && ret == 0; j++ ){
- if( Inside( 4, bx, by, cx[ j ], cy[ j ], status ) ) ret = 1;
- }
-
-/* If no overlap has yet been found, we need to see if any of the edges
- of the boxes intersect. For instance, in the case of a cross formed by
- a vertical rectangle crossing a horizontal rectangle, the above checks
- on the corners would not have revealed any overlap. */
- if( !ret ) {
-
-/* The following code assumes that the corners with indices 0, 1, 2, 3
- are adjacent round the edge of the box. This is the case if the line
- joining corners 0 and 1 does not cross the line joining corners 2 and
- 3 AND the line joining corners 1 and 2 does not cross the line joining
- corners 3 and 0. If either of these conditions is not met swap the
- corners around to correct it. First do box b. */
- if( Cross( bx[0], by[0], bx[1], by[1],
- bx[2], by[2], bx[3], by[3], status ) ) {
- x2 = bx[2];
- y2 = by[2];
- bx[2] = bx[1];
- by[2] = by[1];
- bx[1] = x2;
- by[1] = y2;
-
- } else if( Cross( bx[1], by[1], bx[2], by[2],
- bx[3], by[3], bx[0], by[0], status ) ) {
- x2 = bx[2];
- y2 = by[2];
- bx[2] = bx[3];
- by[2] = by[3];
- bx[3] = x2;
- by[3] = y2;
- }
-
-/* Now do box c. */
- if( Cross( cx[0], cy[0], cx[1], cy[1],
- cx[2], cy[2], cx[3], cy[3], status ) ) {
- x2 = cx[2];
- y2 = cy[2];
- cx[2] = cx[1];
- cy[2] = cy[1];
- cx[1] = x2;
- cy[1] = y2;
-
- } else if( Cross( cx[1], cy[1], cx[2], cy[2],
- cx[3], cy[3], cx[0], cy[0], status ) ) {
- x2 = cx[2];
- y2 = cy[2];
- cx[2] = cx[3];
- cy[2] = cy[3];
- cx[3] = x2;
- cy[3] = y2;
- }
-
-/* We now check each edge of box b to see if it overlaps any edge of box c. */
- for( j = 0; j < 4 && ret == 0; j++ ) {
-
-/* This edge of box b starts at the corner with index j. Get the index of the
- corner at which the edge ends. */
- jp = j + 1;
- if( jp == 4 ) jp = 0;
-
-/* Check to see if this edge of box b crosses each edge of box c in turn. */
- for( i = 0; i < 4 && ret == 0; i++ ) {
- ip = i + 1;
- if( ip == 4 ) ip = 0;
-
- ret = Cross( bx[j], by[j], bx[jp], by[jp],
- cx[i], cy[i], cx[ip], cy[ip], status );
-
- }
- }
- }
-
- return ret;
-}
-
-static void Bpoly( AstPlot *this, float x, float y, const char *method, const char *class, int *status ){
-/*
-* Name:
-* Bpoly
-
-* Purpose:
-* Begin a new poly line.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void Bpoly( AstPlot *this, float x, float y, const char *method, const char *class, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function draws any current poly line, and then starts a new one
-* at the supplied position.
-
-* Parameters:
-* x
-* The graphics x coordinate.
-* y
-* The graphics y coordinate.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Check the global status. */
- if( !astOK ) return;
-
-/* Draw any existing poly line. */
- Opoly( this, method, class, status );
-
-/* Add the supplied point into the buffer. */
- Apoly( this, x, y, method, class, status );
-
-}
-
-
-static int CGCapWrapper( AstPlot *this, int cap, int value, int *status ) {
-/*
-*
-* Name:
-* CGCapWrapper
-
-* Purpose:
-* Call a C implementation of the GCap Grf function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int CGCapWrapper( AstPlot *this, int cap, int value, int *status )
-
-* Class Membership:
-* Plot private function.
-
-* Description:
-* This function is a wrapper for a C implementation of the GCap
-* grf function to enquire or set a graphics attribute value.
-
-* Parameters:
-* this
-* The Plot.
-* cap
-* The capability to be inquired aboue.
-* value
-* The value ot assign to the capability.
-* status
-* Pointer to the inherited status value.
-
-* Returned Value:
-* Non-zero if the grf module is capabale of performing the action
-* requested by "cap".
-
-*/
- if( !astOK ) return 0;
- return ( (AstGCapFun) this->grffun[ AST__GCAP ] )( astGrfConID(this), cap, value );
-}
-
-static int CGAttrWrapper( AstPlot *this, int attr, double value,
- double *old_value, int prim, int *status ) {
-/*
-*
-* Name:
-* CGAttrWrapper
-
-* Purpose:
-* Call a C implementation of the GAttr Grf function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int CGAttrWrapper( AstPlot *this, int attr, double value,
-* double *old_value, int prim, int *status )
-
-* Class Membership:
-* Plot private function.
-
-* Description:
-* This function is a wrapper for a C implementation of the GAttr
-* grf function to enquire or set a graphics attribute value.
-
-* Parameters:
-* this
-* The Plot.
-* attr
-* An integer value identifying the required attribute. The
-* following symbolic values are defined in grf.h:
-*
-* GRF__STYLE - Line style.
-* GRF__WIDTH - Line width.
-* GRF__SIZE - Character and marker size scale factor.
-* GRF__FONT - Character font.
-* GRF__COLOUR - Colour index.
-* value
-* A new value to store for the attribute. If this is AST__BAD
-* no value is stored.
-* old_value
-* A pointer to a double in which to return the attribute value.
-* If this is NULL, no value is returned.
-* prim
-* The sort of graphics primitive to be drawn with the new attribute.
-* Identified by the following values defined in grf.h:
-* GRF__LINE
-* GRF__MARK
-* GRF__TEXT
-* status
-* Pointer to the inherited status value.
-
-*/
- if( !astOK ) return 0;
- return ( (AstGAttrFun) this->grffun[ AST__GATTR ] )( astGrfConID(this), attr, value, old_value, prim );
-}
-
-static int CGFlushWrapper( AstPlot *this, int *status ) {
-/*
-*
-* Name:
-* CGFlushWrapper
-
-* Purpose:
-* Call a C implementation of the GFlush Grf function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int CGFlushWrapper( AstPlot *this ) {
-
-* Class Membership:
-* Plot private function.
-
-* Description:
-* This function is a wrapper for a C implementation of the GFlush
-* grf function to flush graphics.
-
-* Parameters:
-* this
-* The Plot.
-* status
-* Pointer to the inherited status value.
-
-*/
- if( !astOK ) return 0;
- return ( (AstGFlushFun) this->grffun[ AST__GFLUSH ])( astGrfConID(this) );
-}
-
-static int CGLineWrapper( AstPlot *this, int n, const float *x,
- const float *y, int *status ) {
-/*
-*
-* Name:
-* CGLineWrapper
-
-* Purpose:
-* Call a C implementation of the GLine Grf function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int CGLineWrapper( AstPlot *this, int n, const float *x,
-* const float *y, int *status )
-
-* Class Membership:
-* Plot private function.
-
-* Description:
-* This function is a wrapper for a C implementation of the GLine
-* grf function to draw a polyline.
-
-* Parameters:
-* this
-* The Plot.
-* n
-* The number of positions to be joined together.
-* x
-* A pointer to an array holding the "n" x values.
-* y
-* A pointer to an array holding the "n" y values.
-* status
-* Pointer to the inherited status variable.
-
-*/
- if( !astOK ) return 0;
- return ( (AstGLineFun) this->grffun[ AST__GLINE ])( astGrfConID(this), n, x, y );
-}
-
-static int CGMarkWrapper( AstPlot *this, int n, const float *x,
- const float *y, int type, int *status ) {
-/*
-*
-* Name:
-* CGMarkWrapper
-
-* Purpose:
-* Call a C implementation of the GMark Grf function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int CGMarkWrapper( AstPlot *this, int n, const float *x,
-* const float *y, int type, int *status ) {
-
-* Class Membership:
-* Plot private function.
-
-* Description:
-* This function is a wrapper for a C implementation of the GMark grf
-* function to draw markers.
-
-* Parameters:
-* this
-* The Plot.
-* n
-* The number of positions to be joined together.
-* x
-* A pointer to an array holding the "n" x values.
-* y
-* A pointer to an array holding the "n" y values.
-* type
-* An integer which can be used to indicate the type of marker symbol
-* required.
-* status
-* Pointer to the inherited status value.
-
-*/
- if( !astOK ) return 0;
- return ( (AstGMarkFun) this->grffun[ AST__GMARK ])( astGrfConID(this), n, x, y, type );
-}
-
-static int CGTextWrapper( AstPlot *this, const char *text, float x, float y,
- const char *just, float upx, float upy, int *status ) {
-/*
-*
-* Name:
-* CGTextWrapper
-
-* Purpose:
-* Call a C implementation of the GText Grf function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int CGTextWrapper( AstPlot *this, const char *text, float x, float y,
-* const char *just, float upx, float upy, int *status )
-
-* Class Membership:
-* Plot private function.
-
-* Description:
-* This function is a wrapper for a C implementation of the GText grf
-* function to draw a text string.
-
-* Parameters:
-* this
-* The Plot.
-* text
-* Pointer to a null-terminated character string to be displayed.
-* x
-* The reference x coordinate.
-* y
-* The reference y coordinate.
-* just
-* A character string which specifies the location within the
-* text string which is to be placed at the reference position
-* given by x and y. The first character may be 'T' for "top",
-* 'C' for "centre", or 'B' for "bottom", and specifies the
-* vertical location of the reference position. Note, "bottom"
-* corresponds to the base-line of normal text. Some characters
-* (eg "y", "g", "p", etc) descend below the base-line. The second
-* character may be 'L' for "left", 'C' for "centre", or 'R'
-* for "right", and specifies the horizontal location of the
-* reference position. If the string has less than 2 characters
-* then 'C' is used for the missing characters.
-* upx
-* The x component of the up-vector for the text, in graphics world
-* coordinates. If necessary the supplied value should be negated
-* to ensure that positive values always refer to displacements from
-* left to right on the screen.
-* upy
-* The y component of the up-vector for the text, in graphics world
-* coordinates. If necessary the supplied value should be negated
-* to ensure that positive values always refer to displacements from
-* bottom to top on the screen.
-* status
-* Pointer to the inherited status value.
-
-*/
- if( !astOK ) return 0;
- return ( (AstGTextFun) this->grffun[ AST__GTEXT ])( astGrfConID(this), text, x, y, just, upx, upy );
-}
-
-static int CGTxExtWrapper( AstPlot *this, const char *text, float x, float y,
- const char *just, float upx, float upy, float *xb,
- float *yb, int *status ) {
-/*
-*
-* Name:
-* CGTxExtWrapper
-
-* Purpose:
-* Call a C implementation of the GTxExt Grf function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int CGTxExtWrapper( AstPlot *this, const char *text, float x, float y,
-* const char *just, float upx, float upy, float *xb,
-* float *yb, int *status )
-
-* Class Membership:
-* Plot private function.
-
-* Description:
-* This function is a wrapper for a C implementation of the GTxExt
-* grf function to find the extent of a text string.
-
-* Parameters:
-* this
-* The Plot.
-* text
-* Pointer to a null-terminated character string to be displayed.
-* x
-* The reference x coordinate.
-* y
-* The reference y coordinate.
-* just
-* A character string which specifies the location within the
-* text string which is to be placed at the reference position
-* given by x and y. The first character may be 'T' for "top",
-* 'C' for "centre", or 'B' for "bottom", and specifies the
-* vertical location of the reference position. Note, "bottom"
-* corresponds to the base-line of normal text. Some characters
-* (eg "y", "g", "p", etc) descend below the base-line. The second
-* character may be 'L' for "left", 'C' for "centre", or 'R'
-* for "right", and specifies the horizontal location of the
-* reference position. If the string has less than 2 characters
-* then 'C' is used for the missing characters.
-* upx
-* The x component of the up-vector for the text, in graphics world
-* coordinates. If necessary the supplied value should be negated
-* to ensure that positive values always refer to displacements from
-* left to right on the screen.
-* upy
-* The y component of the up-vector for the text, in graphics world
-* coordinates. If necessary the supplied value should be negated
-* to ensure that positive values always refer to displacements from
-* bottom to top on the screen.
-* xb
-* An array of 4 elements in which to return the x coordinate of
-* each corner of the bounding box.
-* yb
-* An array of 4 elements in which to return the y coordinate of
-* each corner of the bounding box.
-* status
-* Pointer to the inherited status variable.
-
-*/
- if( !astOK ) return 0;
- return ( (AstGTxExtFun) this->grffun[ AST__GTXEXT ])( astGrfConID(this), text, x, y, just, upx, upy, xb, yb );
-}
-
-static int CGQchWrapper( AstPlot *this, float *chv, float *chh, int *status ) {
-/*
-*
-* Name:
-* CGQchWrapper
-
-* Purpose:
-* Call a C implementation of the GQch Grf function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int CGQchWrapper( AstPlot *this, float *chv, float *chh, int *status )
-
-* Class Membership:
-* Plot private function.
-
-* Description:
-* This function is a wrapper for a C implementation of the GQch
-* grf function to find the extent of a text string.
-
-* Parameters:
-* this
-* The Plot.
-* chv
-* A pointer to the double which is to receive the height of
-* characters drawn vertically. This will be an increment in the X
-* axis
-* chh
-* A pointer to the double which is to receive the height of
-* characters drawn vertically. This will be an increment in the Y
-* axis
-* status
-* Pointer to the inherited status value.
-*/
- if( !astOK ) return 0;
- return ( (AstGQchFun) this->grffun[ AST__GQCH ])( astGrfConID(this), chv, chh );
-}
-
-static int CGScalesWrapper( AstPlot *this, float *alpha, float *beta, int *status ) {
-/*
-*
-* Name:
-* CGScalesWrapper
-
-* Purpose:
-* Call a C implementation of the GScales Grf function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int CGScalesWrapper( AstPlot *this, float *alpha, float *beta, int *status )
-
-* Class Membership:
-* Plot private function.
-
-* Description:
-* This function is a wrapper for a C implementation of the GScales
-* grf function to find the extent of a text string.
-
-* Parameters:
-* this
-* The Plot.
-* alpha
-* A pointer to the location at which to return the scale for the
-* X axis (i.e. Xnorm = alpha*Xworld).
-* beta
-* A pointer to the location at which to return the scale for the
-* Y axis (i.e. Ynorm = beta*Yworld).
-* status
-* Pointer to the inherited status value.
-*/
- if( !astOK ) return 0;
- return ( (AstGScalesFun) this->grffun[ AST__GSCALES ])( astGrfConID(this), alpha, beta );
-}
-
-static int CheckLabels( AstPlot *this, AstFrame *frame, int axis,
- double *ticks, int nticks, int force, char **list,
- double refval, int *status ){
-/*
-* Name:
-* CheckLabels
-
-* Purpose:
-* Create tick mark labels and check that adjacent labels are different.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int CheckLabels( AstPlot *this, AstFrame *frame, int axis, double *ticks,
-* int nticks, int force, char **list, double refval, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function formats the supplied ticks mark values using the
-* astFormat method for the supplied Frame. Unless force is non-zero, it
-* then checks all pairs of adjacent labels. If a pair is found which are
-* identical then the memory holding the labels is released, and a value
-* of zero is returned. Otherwise, a value of one is returned, indicating
-* that adjacent labels are all different and the labels are returned.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* frame
-* Pointer to the Frame.
-* axis
-* The zero-based index of the axis to which the tick marks refer.
-* ticks
-* Pointer to an array holding the tick mark values.
-* nticks
-* The number of tick marks supplied by parameter "ticks".
-* force
-* If non-zero, then no check for identical adjacent labels is
-* performed, and the labels are always considered to be OK.
-* list
-* Pointer to the start of an array of pointers. Each of the
-* elements in this array receives a pointer to a string holding a
-* formatted label. Each of these strings should be freed using
-* astFree when no longer needed.
-* refval
-* A value to use for the other axis when normalizing.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero if any pairs of identical adjacent labels were found. One
-* otherwise.
-
-* Notes:
-* - No error is reported if a pair of identical adjacent labels is
-* found.
-* - If an error has already occurred, or if this function should
-* fail for any reason, a value of zero is returned, and the array of
-* pointers identified by "list" is filled with NULL pointers.
-
-
-*/
-
-/* Local Variables: */
- const char *label; /* Pointer to formatted tick value */
- double val[ 2 ]; /* Workspace for normalizing */
- int i; /* Tick index */
- int len; /* Number of characters in curent label */
- int ok; /* The returned flag */
-
-/* Fill the supplied label list with NULL pointers. */
- if( list ) {
- for( i = 0; i < nticks; i++ ) list[ i ] = NULL;
- }
-
-/* Check the global status. */
- if( !astOK ) return 0;
-
-/* Initialise the returned flag to indicate that all adjacent labels are
- different. */
- ok = 1;
-
-/* Normalize and format the first tick mark value. */
- val[ axis ] = ticks[ 0 ];
- val[ 1 - axis ] = refval;
- astNorm( frame, val );
- label = astFormat( frame, axis, val[ axis ] );
-
-/* Allocate memory holding a copy of the formatted value, and store a
- pointer to this copy in the list of labels. */
- if( label ){
- len = strlen( label ) + 1;
- list[ 0 ] = (char *) astStore( NULL, (void *) label, len );
- } else {
- ok = 0;
- }
-
-/* Normalize and format each of the tick mark values in this batch. */
- for( i = 1; i < nticks && astOK && ok; i++ ){
- val[ axis ] = ticks[ i ];
- val[ 1 - axis ] = refval;
- astNorm( frame, val );
- label = astFormat( frame, axis, val[ axis ] );
- if( label ){
-
-/* Unless checks have been supressed, compare this label with the previous
- label. If they are identical clear the returned flag. */
- if( !force && !strcmp( label, list[ i - 1 ] ) ) {
- ok = 0;
-
-/* Allocate memory holding a copy of the label, and store a
- pointer to this copy in the list of labels. */
- } else {
- list[ i ] = (char *) astStore( NULL, (void *) label, strlen( label ) + 1 );
- }
-
- } else {
- ok = 0;
- }
-
- }
-
-/* If two adjacent labels were identical, or an error occurred, release the
- memory used to store the labels. */
- if( !ok || !astOK ){
- for( i = 0; i < nticks; i++ ){
- if( list[ i ] ) list[ i ] = (char *) astFree( (void *) list[ i ] );
- }
- }
-
-/* Ensure a value of zero is returned if an error has occurred. */
- if( !astOK ) ok = 0;
-
-/* Return the answer. */
- return ok;
-
-}
-
-static char **CheckLabels2( AstPlot *this, AstFrame *frame, int axis,
- double *ticks, int nticks, char **old_list,
- double refval, int *status ){
-/*
-* Name:
-* CheckLabels2
-
-* Purpose:
-* Check that labels cannot be shortened.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* char **CheckLabels2( AstPlot *this, AstFrame *frame, int axis,
-* double *ticks, int nticks, char **old_list,
-* double refval, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function formats the supplied ticks mark values using the
-* astFormat method for the supplied Frame. It then compares the labels
-* with the corresponding labels supplied in "old_list". If all of the
-* new labels are shorter than, or equal in length to, the old labels,
-* then memory is allocated to hold the new (shorter) labels, and a
-* pointer to this memory is returned. If any new label is longer than
-* the corresponding old label, then a NULL pointer is returned.
-*
-* No check is performed on whether or not there are any identical
-* adjacent labels.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* frame
-* Pointer to the Frame.
-* axis
-* The zero-based index of the axis to which the tick marks refer.
-* ticks
-* Pointer to an array holding the tick mark values.
-* nticks
-* The number of tick marks supplied by parameter "ticks".
-* old_list
-* Pointer to the start of an array of pointers. Each of the
-* elements in this array should hold a pointer to a string holding a
-* formatted label.
-* refval
-* A value to use for the other axis when normalizing.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to an array of pointers. Each of these pointers points to
-* a text string holding a shortened label. If a complete set of
-* shortened labels could not be found (or if an error occurs), a NULL
-* pointer is returned.
-
-* Notes:
-* - The memory holding the returned shortened labels should be
-* freed by cthe caller, together with the memory holding the pointers to
-* the labels.
-* - No error is reported if a pair of identical adjacent labels is
-* found.
-* - If an error has already occurred, or if this function should
-* fail for any reason, a value of NULL is returned.
-
-*/
-
-/* Local Variables: */
- char **list; /* The returned pointer */
- const char *label; /* Pointer to formatted tick value */
- double val[ 2 ]; /* Workspace for normalizing */
- int i; /* Tick index */
- int llen; /* Number of characters in curent label */
- int ok; /* Are the old labels OK to be used? */
-
-/* Check the global status. */
- if( !astOK ) return NULL;
-
-/* Allocate memory to hold the pointers to the new labels. */
- list = (char **) astMalloc( sizeof( char * )*(size_t) nticks );
- if( list ) {
-
-/* Fill this array with NULLs for safety. */
- for( i = 0; i < nticks; i++ ) list[ i ] = NULL;
-
-/* Initialise a flag to indicate that all the new labels are
- shorter than the old labels. */
- ok = 0;
-
-/* Normalize and format each of the tick mark values in this batch. */
- for( i = 0; i < nticks && astOK; i++ ){
- val[ axis ] = ticks[ i ];
- val[ 1 - axis ] = refval;
- astNorm( frame, val );
- label = astFormat( frame, axis, val[ axis ] );
- if( label ){
-
-/* Get the length of the new label. */
- llen = strlen( label );
-
-/* Compare this label with the corresponding old label. If the new one is
- longer than the old one, set the flag and leave the loop. */
- if( llen > strlen( old_list[ i ] ) ) {
- ok = 1;
- break;
- }
-
-/* Store the new label. */
- list[ i ] = (char *) astStore( NULL, (void *) label,
- (size_t) (llen + 1) );
- }
- }
-
-/* If the old labels are to be used, or an error occurred, release the memory
- used to store the new labels. */
- if( ok || !astOK ){
- for( i = 0; i < nticks; i++ ){
- if( list[ i ] ) list[ i ] = (char *) astFree( (void *) list[ i ] );
- }
- list = (char **) astFree( (void *) list );
- }
-
- }
-
-/* Return the answer. */
- return list;
-
-}
-
-static int ChrLen( const char *string, int *status ){
-/*
-* Name:
-* ChrLen
-
-* Purpose:
-* Return the length of a string excluding any trailing white space.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* int ChrLen( const char *string, int *status )
-
-* Class Membership:
-* Plot
-
-* Description:
-* This function returns the length of a string excluding any trailing
-* white space.
-
-* Parameters:
-* string
-* Pointer to the string.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The length of a string excluding any trailing white space.
-
-* Notes:
-* - A value of zero is returned if a NULL pointer is supplied, or if an
-* error has already occurred.
-
-*/
-
-/* Local Variables: */
- const char *c; /* Pointer to the next character to check */
- int ret; /* The returned string length */
-
-/* Check the global status. */
- if( !astOK ) return 0;
-
-/* Initialise the returned string length. */
- ret = 0;
-
-/* Check a string has been supplied. */
- if( string ){
-
-/* Check each character in turn, starting with the last one. */
- ret = strlen( string );
- c = string + ret - 1;
- while( ret ){
- if( !isspace( (int) *c ) ) break;
- c--;
- ret--;
- }
- }
-
-/* Return the answer. */
- return ret;
-
-}
-
-static AstPlotCurveData **CleanCdata( AstPlotCurveData **cdata, int *status ){
-/*
-* Name:
-* CleanCdata
-
-* Purpose:
-* Release the structures holding curve break information.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* AstPlotCurveData **CleanCdata( AstPlotCurveData **cdata, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function releases the memory used to hold the curve break
-* information returned by function DrawGrid, and returns a NULL pointer.
-
-* Parameters:
-* cdata
-* Pointer to the information to be freed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A NULL pointer.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-
-*/
-
-/* Return if a NULL pointer has been supplied. */
- if( !cdata ) return NULL;
-
-/* Release each of the two structures in turn (if they exist). */
- (void) astFree( (void *) cdata[ 0 ] );
- (void) astFree( (void *) cdata[ 1 ] );
-
-/* Release the memory used to hold the two AstPlotCurveData pointers. */
- (void) astFree( (void *) cdata );
-
-/* Return. */
- return NULL;
-
-}
-
-static TickInfo **CleanGrid( TickInfo **grid, int *status ){
-/*
-* Name:
-* CleanGrid
-
-* Purpose:
-* Release the structures holding grid information.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* TickInfo **CleanGrid( TickInfo **grid )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function releases the memory used to hold the grid information
-* returned by function GridLines, and returns a NULL pointer.
-
-* Parameters:
-* grid
-* Pointer to the information to be freed.
-
-* Returned Value:
-* A NULL pointer.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-
-*/
-
-/* Local Variables: */
- TickInfo *info; /* Pointer to TickInfo structure being freed */
- int i; /* Axis index */
- int j; /* Tick mark index */
-
-/* Return if a NULL pointer has been supplied. */
- if( !grid ) return NULL;
-
-/* Release each of the TickInfo structures in turn (if they exist). */
- for( i = 0; i < 2; i++ ){
- if( ( info = grid[ i ] ) ){
-
-/* Release the memory holding major tick mark values. */
- (void) astFree( (void *) info->ticks );
-
-/* Release the memory holding minor tick mark values. */
- (void) astFree( (void *) info->minticks );
-
-/* Release the memory holding curve section starting positions. */
- (void) astFree( (void *) info->start );
-
-/* Release the memory holding curve section lengths. */
- (void) astFree( (void *) info->length );
-
-/* If there are any tick mark labels in the structure... */
- if( info->labels ){
-
-/* Release the memory holding each tick mark label. */
- for( j = 0; j < info->nmajor; j++ ){
- (void) astFree( (void *) info->labels[ j ] );
- }
-
-/* Release the memory holding the pointers to the tick mark labels. */
- (void) astFree( (void *) info->labels );
-
-/* Release the memory holding the format specification string. */
- (void) astFree( (void *) info->fmt );
-
- }
-
-/* Release the TickInfo structure. */
- (void) astFree( (void *) info );
- }
- }
-
-/* Release the memory used to hold the two TickInfo pointers. */
- (void) astFree( (void *) grid );
-
-/* Return. */
- return NULL;
-
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a Plot.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Plot member function (over-rides the astClearAttrib protected
-* method inherited from the FrameSet class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* Plot, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstPlot *this; /* Pointer to the Plot structure */
- char label[21]; /* Graphics item label */
- const char *class; /* Pointer to class string */
- int axis; /* Axis number */
- int id1; /* Plot object id */
- int id2; /* Plot object id */
- int id; /* Plot object id */
- int len; /* Length of attrib string */
- int nax; /* Number of base Frame axes */
- int nc; /* No. characters read by astSscanf */
- int id3; /* Third genuine identifier */
- int nid; /* Number of genuine attributes */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Plot structure. */
- this = (AstPlot *) this_object;
-
-/* Get the number of base Frame axis (2 for a Plot, 3 for a Plot3D). */
- nax = astGetNin( this );
-
-/* Obtain the length of the "attrib" string. */
- len = strlen( attrib );
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* Edge(axis). */
-/* ------------ */
- if ( nc = 0,
- ( 1 == astSscanf( attrib, "edge(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearEdge( this, axis - 1 );
-
-/* Grid. */
-/* ----- */
- } else if ( !strcmp( attrib, "grid" ) ) {
- astClearGrid( this );
-
-/* LabelUp */
-/* ------- */
- } else if ( !strcmp( attrib, "labelup" ) ) {
- for( axis = 0; axis < nax; axis++ ) astClearLabelUp( this, axis );
-
-/* LabelUp(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "labelup(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearLabelUp( this, axis - 1 );
-
-/* LogPlot */
-/* ------- */
- } else if ( !strcmp( attrib, "logplot" ) ) {
- for( axis = 0; axis < nax; axis++ ) astClearLogPlot( this, axis );
-
-/* LogPlot(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "logplot(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearLogPlot( this, axis - 1 );
-
-/* LogTicks */
-/* ------- */
- } else if ( !strcmp( attrib, "logticks" ) ) {
- for( axis = 0; axis < nax; axis++ ) astClearLogTicks( this, axis );
-
-/* LogTicks(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "logticks(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearLogTicks( this, axis - 1 );
-
-/* LogLabel */
-/* ------- */
- } else if ( !strcmp( attrib, "loglabel" ) ) {
- for( axis = 0; axis < nax; axis++ ) astClearLogLabel( this, axis );
-
-/* LogLabel(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "loglabel(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearLogLabel( this, axis - 1 );
-
-/* NumLab. */
-/* ---------- */
- } else if ( !strcmp( attrib, "numlab" ) ) {
- for( axis = 0; axis < nax; axis++ ) astClearNumLab( this, axis );
-
-/* NumLab(axis). */
-/* ---------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "numlab(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearNumLab( this, axis - 1 );
-
-/* MinTick. */
-/* ---------- */
- } else if ( !strcmp( attrib, "mintick" ) ) {
- for( axis = 0; axis < nax; axis++ ) astClearMinTick( this, axis );
-
-/* MinTick(axis). */
-/* ---------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "mintick(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearMinTick( this, axis - 1 );
-
-/* TextLab. */
-/* ---------- */
- } else if ( !strcmp( attrib, "textlab" ) ) {
- for( axis = 0; axis < nax; axis++ ) astClearTextLab( this, axis );
-
-/* TextLab(axis). */
-/* --------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "textlab(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearTextLab( this, axis - 1 );
-
-/* LabelUnits. */
-/* --------- */
- } else if ( !strcmp( attrib, "labelunits" ) ) {
- for( axis = 0; axis < nax; axis++ ) astClearLabelUnits( this, axis );
-
-/* LabelUnits(axis). */
-/* --------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "labelunits(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearLabelUnits( this, axis - 1 );
-
-/* Style. */
-/* ------ */
- } else if ( !strcmp( attrib, "style" ) ) {
- for( id = 0; id < AST__NPID; id++ ) astClearStyle( this, id );
-
-/* Style(label). */
-/* --------------*/
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "style(%20[^()])%n", label, &nc ) )
- && ( nc >= len ) ) {
- class = astGetClass( this );
-
- nid = IdFind( FullForm( GrfLabels, label, attrib, "astClear", class, status ),
- nax, &id1, &id2, &id3, status );
- astClearStyle( this, id1 );
- if( nid > 1 ) astClearStyle( this, id2 );
- if( nid > 2 ) astClearStyle( this, id3 );
-
-/* Font. */
-/* ----- */
- } else if ( !strcmp( attrib, "font" ) ) {
- for( id = 0; id < AST__NPID; id++ ) astClearFont( this, id );
-
-/* Font(label). */
-/* -------------*/
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "font(%20[^()])%n", label, &nc ) )
- && ( nc >= len ) ) {
- class = astGetClass( this );
-
- nid = IdFind( FullForm( GrfLabels, label, attrib, "astClear", class, status ),
- nax, &id1, &id2, &id3, status );
- astClearFont( this, id1 );
- if( nid > 1 ) astClearFont( this, id2 );
- if( nid > 2 ) astClearFont( this, id3 );
-
-/* Colour. */
-/* ------- */
- } else if ( !strcmp( attrib, "colour" ) ) {
- for( id = 0; id < AST__NPID; id++ ) astClearColour( this, id );
-
-/* Colour(label). */
-/* ---------------*/
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "colour(%20[^()])%n", label, &nc ) )
- && ( nc >= len ) ) {
- class = astGetClass( this );
-
- nid = IdFind( FullForm( GrfLabels, label, attrib, "astClear", class, status ),
- nax, &id1, &id2, &id3, status );
- astClearColour( this, id1 );
- if( nid > 1 ) astClearColour( this, id2 );
- if( nid > 2 ) astClearColour( this, id3 );
-
-/* Color. */
-/* ------ */
- } else if ( !strcmp( attrib, "color" ) ) {
- for( id = 0; id < AST__NPID; id++ ) astClearColour( this, id );
-
-/* Color(label). */
-/* --------------*/
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "color(%20[^()])%n", label, &nc ) )
- && ( nc >= len ) ) {
- class = astGetClass( this );
-
- nid = IdFind( FullForm( GrfLabels, label, attrib, "astClear", class, status ),
- nax, &id1, &id2, &id3, status );
- astClearColour( this, id1 );
- if( nid > 1 ) astClearColour( this, id2 );
- if( nid > 2 ) astClearColour( this, id3 );
-
-/* Width. */
-/* ------ */
- } else if ( !strcmp( attrib, "width" ) ) {
- for( id = 0; id < AST__NPID; id++ ) astClearWidth( this, id );
-
-/* Width(label). */
-/* --------------*/
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "width(%20[^()])%n", label, &nc ) )
- && ( nc >= len ) ) {
- class = astGetClass( this );
-
- nid = IdFind( FullForm( GrfLabels, label, attrib, "astClear", class, status ),
- nax, &id1, &id2, &id3, status );
-
- astClearWidth( this, id1 );
- if( nid > 1 ) astClearWidth( this, id2 );
- if( nid > 2 ) astClearWidth( this, id3 );
-
-/* Size. */
-/* ----- */
- } else if ( !strcmp( attrib, "size" ) ) {
- for( id = 0; id < AST__NPID; id++ ) astClearSize( this, id );
-
-/* Size(label). */
-/* -------------*/
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "size(%20[^()])%n", label, &nc ) )
- && ( nc >= len ) ) {
- class = astGetClass( this );
-
- nid = IdFind( FullForm( GrfLabels, label, attrib, "astClear", class, status ),
- nax, &id1, &id2, &id3, status );
- astClearSize( this, id1 );
- if( nid > 1 ) astClearSize( this, id2 );
- if( nid > 2 ) astClearSize( this, id3 );
-
-/* LabelAt(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "labelat(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearLabelAt( this, axis - 1 );
-
-/* Centre(axis). */
-/* ------------ */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "centre(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearCentre( this, axis - 1 );
-
-/* Gap. */
-/* ---- */
- } else if ( !strcmp( attrib, "gap" ) ) {
- for( axis = 0; axis < nax; axis++ ) astClearGap( this, axis );
-
-/* Gap(axis). */
-/* ---------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "gap(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearGap( this, axis - 1 );
-
-/* LogGap. */
-/* ----------- */
- } else if ( !strcmp( attrib, "loggap" ) ) {
- for( axis = 0; axis < nax; axis++ ) astClearLogGap( this, axis );
-
-/* LogGap(axis). */
-/* ----------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "loggap(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearLogGap( this, axis - 1 );
-
-/* NumLabGap. */
-/* ---------- */
- } else if ( !strcmp( attrib, "numlabgap" ) ) {
- for( axis = 0; axis < nax; axis++ ) astClearNumLabGap( this, axis );
-
-/* NumLabGap(axis). */
-/* ---------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "numlabgap(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearNumLabGap( this, axis - 1 );
-
-/* TextLabGap. */
-/* ----------- */
- } else if ( !strcmp( attrib, "textlabgap" ) ) {
- for( axis = 0; axis < nax; axis++ ) astClearTextLabGap( this, axis );
-
-/* TextLabGap(axis). */
-/* ----------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "textlabgap(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearTextLabGap( this, axis - 1 );
-
-/* TitleGap. */
-/* --------- */
- } else if ( !strcmp( attrib, "titlegap" ) ) {
- astClearTitleGap( this );
-
-/* MajTickLen. */
-/* ----------- */
- } else if ( !strcmp( attrib, "majticklen" ) ) {
- for( axis = 0; axis < nax; axis++ ) astClearMajTickLen( this, axis );
-
-/* MajTickLen(axis). */
-/* ----------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "majticklen(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearMajTickLen( this, axis - 1 );
-
-/* MinTickLen. */
-/* ----------- */
- } else if ( !strcmp( attrib, "minticklen" ) ) {
- for( axis = 0; axis < nax; axis++ ) astClearMinTickLen( this, axis );
-
-/* MinTickLen(axis). */
-/* ----------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "minticklen(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearMinTickLen( this, axis - 1 );
-
-/* Labelling. */
-/* -------- */
- } else if ( !strcmp( attrib, "labelling" ) ) {
- astClearLabelling( this );
-
-/* TickAll. */
-/* -------- */
- } else if ( !strcmp( attrib, "tickall" ) ) {
- astClearTickAll( this );
-
-/* ForceExterior */
-/* ------------- */
- } else if ( !strcmp( attrib, "forceexterior" ) ) {
- astClearForceExterior( this );
-
-/* Invisible. */
-/* ---------- */
- } else if ( !strcmp( attrib, "invisible" ) ) {
- astClearInvisible( this );
-
-/* Border. */
-/* ------- */
- } else if ( !strcmp( attrib, "border" ) ) {
- astClearBorder( this );
-
-/* ClipOp. */
-/* ------- */
- } else if ( !strcmp( attrib, "clipop" ) ) {
- astClearClipOp( this );
-
-/* Clip. */
-/* ----- */
- } else if ( !strcmp( attrib, "clip" ) ) {
- astClearClip( this );
-
-/* Grf. */
-/* ---- */
- } else if ( !strcmp( attrib, "grf" ) ) {
- astClearGrf( this );
-
-/* DrawTitle. */
-/* ---------- */
- } else if ( !strcmp( attrib, "drawtitle" ) ) {
- astClearDrawTitle( this );
-
-/* DrawAxes. */
-/* --------- */
- } else if ( !strcmp( attrib, "drawaxes" ) ) {
- for( axis = 0; axis < nax; axis++ ) astClearDrawAxes( this, axis );
-
-/* Abbrev */
-/* ------ */
- } else if ( !strcmp( attrib, "abbrev" ) ) {
- for( axis = 0; axis < nax; axis++ ) astClearAbbrev( this, axis );
-
-/* DrawAxes(axis). */
-/* --------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "drawaxes(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearDrawAxes( this, axis - 1 );
-
-/* Abbrev(axis). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "abbrev(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearAbbrev( this, axis - 1 );
-
-/* Escape. */
-/* ------- */
- } else if ( !strcmp( attrib, "escape" ) ) {
- astClearEscape( this );
-
-/* Tol. */
-/* ---- */
- } else if ( !strcmp( attrib, "tol" ) ) {
- astClearTol( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static void ClearLogPlot( AstPlot *this, int axis, int *status ){
-/*
-*
-* Name:
-* ClearLogPlot
-
-* Purpose:
-* Clear the value for a LogPlot attribute
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void ClearLogPlot( AstPlot *this, int axis, int *status )
-
-* Class Membership:
-* Plot member function
-
-* Description:
-* Assigns the default value to the LogPlot attribute of the specified
-* axis, and also re-maps the base Frame of the Plot if necessary.
-
-* Parameters:
-* this
-* The Plot.
-* axis
-* Zero based axis index.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- int oldval; /* Original value of the attribute */
- int newval; /* Cleared (default) value of the attribute */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Validate the axis index. */
- if( axis < 0 || axis >= 2 ){
- astError( AST__AXIIN, "astClearLogPlot(%s): Index (%d) is invalid for "
- "attribute LogPlot - it should be in the range 1 to 2.", status,
- astGetClass( this ), axis + 1 );
-
-/* Do nothing if the attribute is not currently set. */
- } else if( astTestLogPlot( this, axis ) ){
-
-/* Get the original value of the attribute. clear the value, and then get
- the new (default) value. */
- oldval = this->logplot[ axis ];
- this->logplot[ axis ] = -1;
- newval = astGetLogPlot( this, axis );
-
-/* If the effective value has changed, attempt to remap the axis. If this
- fails, re-instate the original value. */
- if( ( oldval != 0 ) != ( newval != 0 ) ) {
- if( !ToggleLogLin( this, axis, oldval, "astClearLogPlot", status ) ) {
- this->logplot[ axis ] = oldval;
- }
- }
- }
-}
-
-static void Clip( AstPlot *this, int iframe, const double lbnd[],
- const double ubnd[], int *status ){
-/*
-*++
-* Name:
-c astClip
-f AST_CLIP
-
-* Purpose:
-* Set up or remove clipping for a Plot.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "plot.h"
-c void astClip( AstPlot *this, int iframe, const double lbnd[],
-c const double ubnd[] )
-f CALL AST_CLIP( THIS, IFRAME, LBND, UBND, STATUS )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-c This function defines regions of a Plot which are to be clipped.
-f This routine defines regions of a Plot which are to be clipped.
-* Any subsequent graphical output created using the Plot will then
-* be visible only within the unclipped regions of the plotting
-* area. See also the Clip attribute.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Plot.
-c iframe
-f IFRAME = INTEGER (Given)
-* The index of the Frame within the Plot to which the clipping
-c limits supplied in "lbnd" and "ubnd" (below) refer. Clipping
-f limits supplied in LBND and UBND (below) refer. Clipping
-* may be applied to any of the coordinate systems associated
-* with a Plot (as defined by the Frames it contains), so this
-* index may take any value from 1 to the number of Frames in
-* the Plot (Nframe attribute). In addition, the values
-* AST__BASE and AST__CURRENT may be used to specify the base
-* and current Frames respectively.
-*
-* For example, a value of AST__CURRENT causes clipping to be
-* performed in physical coordinates, while a value of AST__BASE
-* would clip in graphical coordinates. Clipping may also be
-* removed completely by giving a value of AST__NOFRAME. In this
-* case any clipping bounds supplied (below) are ignored.
-c lbnd
-f LBND( * ) = DOUBLE PRECISION (Given)
-* An array with one element for each axis of the clipping Frame
-c (identified by the index "iframe"). This should contain the
-f (identified by the index IFRAME). This should contain the
-* lower bound, on each axis, of the region which is to remain
-* visible (unclipped).
-c ubnd
-f UBND( * ) = DOUBLE PRECISION (Given)
-* An array with one element for each axis of the clipping Frame
-c (identified by the index "iframe"). This should contain the
-f (identified by the index IFRAME). This should contain the
-* upper bound, on each axis, of the region which is to remain
-* visible (unclipped).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-c - Only one clipping Frame may be active at a time. This function
-f - Only one clipping Frame may be active at a time. This routine
-* will deactivate any previously-established clipping Frame before
-* setting up new clipping limits.
-c - The clipping produced by this function is in addition to that
-f - The clipping produced by this routine is in addition to that
-* specified by the Clip attribute which occurs at the edges of the
-* plotting area
-c established when the Plot is created (see astPlot). The
-f established when the Plot is created (see AST_PLOT). The
-* underlying graphics system may also impose further clipping.
-* - When testing a graphical position for clipping, it is first
-* transformed into the clipping Frame. The resulting coordinate on
-* each axis is then checked against the clipping limits (given by
-c "lbnd" and "ubnd"). By default, a position is clipped if any
-f LBND and UBND). By default, a position is clipped if any
-* coordinate lies outside these limits. However, if a non-zero
-* value is assigned to the Plot's ClipOp attribute, then a
-* position is only clipped if the coordinates on all axes lie
-* outside their clipping limits.
-* - If the lower clipping limit exceeds the upper limit for any
-* axis, then the sense of clipping for that axis is reversed (so
-* that coordinate values lying between the limits are clipped
-* instead of those lying outside the limits). To produce a "hole"
-* in a coordinate space (that is, an internal region where nothing
-* is plotted), you should supply all the bounds in reversed order,
-* and set the ClipOp attribute for the Plot to a non-zero value.
-* - Either clipping limit may be set to the value AST__BAD, which
-* is equivalent to setting it to infinity (or minus infinity for a
-* lower bound) so that it is not used.
-* - If a graphical position results in any bad coordinate values
-* (AST__BAD) when transformed into the clipping Frame, then it is
-* treated (for the purposes of producing graphical output) as if
-* it were clipped.
-* - When a Plot is used as a Mapping to transform points
-c (e.g. using astTran2), any clipped output points are assigned
-f (e.g. using AST_TRAN2), any clipped output points are assigned
-* coordinate values of AST__BAD.
-* - An error results if the base Frame of the Plot is not
-* 2-dimensional.
-*--
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to the clipping Frame */
- AstFrameSet *fset; /* Pointer to the Plot's FrameSet */
- int i; /* Axis index */
- int ifrm; /* The validated frame index */
- int naxes; /* No. of axes in the base Frame */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- ifrm = 0;
-
-/* Get a pointer to the FrameSet at the start of the Plot. */
- fset = (AstFrameSet *) this;
-
-/* Check the base Frame of the Plot is 2-D. */
- naxes = astGetNin( fset );
- if( naxes != 2 && astOK ){
- astError( AST__NAXIN, "astClip(%s): Number of axes (%d) in the "
- "base Frame of the supplied %s is invalid - this number "
- "should be 2.", status, astGetClass( this ), naxes,
- astGetClass( this ) );
- }
-
-/* If clipping is to be switched on, check the supplied frame index and
- bounds. */
- if( iframe != AST__NOFRAME && astOK ) {
-
-/* Report an error if either of the bounds pointers is NULL.*/
- if( !lbnd ){
- astError( AST__CLPAX, "astClip(%s): A NULL pointer was "
- "supplied for the array holding the lower bounds of "
- "the clipping volume.", status, astGetClass( this ) );
- } else if( !ubnd ){
- astError( AST__CLPAX, "astClip(%s): A NULL pointer was "
- "supplied for the array holding the upper bounds of "
- "the clipping volume.", status, astGetClass( this ) );
- }
-
-/* Validate the clipping frame index. */
- ifrm = astValidateFrameIndex( fset, iframe, "astClip" );
-
-/* Get the number of axes in the clipping frame. */
- fr = astGetFrame( this, ifrm );
- naxes = astGetNaxes( fr );
- fr = astAnnul( fr );
-
- }
-
-/* Leave the current clipping information unchanged if an error has
- occurred. */
- if( astOK ){
-
-/* Remove all clipping information from the Plot. */
- this->clip_lbnd = (double *) astFree( (void *) this->clip_lbnd );
- this->clip_ubnd = (double *) astFree( (void *) this->clip_ubnd );
- this->clip_frame = AST__NOFRAME;
- this->clip_axes = 0;
-
-/* If bounds have been supplied, set up new clipping information. */
- if( iframe != AST__NOFRAME ){
-
-/* Store the information. */
- this->clip_frame = ifrm;
- this->clip_lbnd = astStore( NULL, lbnd, sizeof(double)*(size_t)naxes );
- this->clip_ubnd = astStore( NULL, ubnd, sizeof(double)*(size_t)naxes );
- this->clip_axes = naxes;
-
-/* If an error has occurred, remove all clipping information. */
- if( !astOK ){
- this->clip_lbnd = (double *) astFree( (void *) this->clip_lbnd );
- this->clip_ubnd = (double *) astFree( (void *) this->clip_ubnd );
- this->clip_frame = AST__NOFRAME;
- this->clip_axes = 0;
-
-/* Otherwise, replace any bounds of AST__BAD with suitable default
- values. */
- } else {
- for( i = 0; i < naxes; i++ ){
- if( this->clip_lbnd[ i ] == AST__BAD ) this->clip_lbnd[ i ] = -DBL_MAX;
- if( this->clip_ubnd[ i ] == AST__BAD ) this->clip_ubnd[ i ] = DBL_MAX;
- }
-
- }
-
- }
-
- }
-
-/* Return. */
- return;
-
-}
-
-static int Compared( const void *elem1, const void *elem2 ){
-/*
-* Name:
-* Compared
-
-* Purpose:
-* Compare two "double" values.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int Compared( const void *elem1, const void *elem2 )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-* This function compares the two "double" values to which pointers
-* are supplied, and returns an integer indicating which is larger,
-* checking for AST__BAD values. It is intended for use with the C
-* Run-Time-Library sorting function "qsort".
-
-* Parameters:
-* elem1
-* Pointer to the first "double".
-* elem2
-* Pointer to the second "double".
-
-* Returned Value:
-* Zero is returned if the values are equal. If the first is larger
-* than the second then +1 is returned. Otherwise, -1 is returned.
-
-* Notes:
-* - Values of AST__BAD are considered to be larger than any other
-* value (other than another value of AST__BAD).
-* - If both values are AST__BAD, then zero is returned.
-* - This function executes even if an error has occurred.
-
-*/
-
-/* Local Variables: */
- double *delem1; /* Pointer to the first "double" value */
- double *delem2; /* Pointer to the second "double" value */
- int ret; /* The returned value */
-
-/* Get pointers to the two "double" values. */
- delem1 = (double *) elem1;
- delem2 = (double *) elem2;
-
-/* Check the values for equality (including both values being AST__BAD). */
- if( *delem1 == *delem2 ){
- ret = 0;
-
-/* If the first is bad, then it is considered to be larger than the
- second. */
- } else if( *delem1 == AST__BAD ){
- ret = 1;
-
-/* If the second is bad, then it is considered to be larger than the
- first. */
- } else if( *delem2 == AST__BAD ){
- ret = -1;
-
-/* If the first is larger than the second, return 1. */
- } else if( *delem1 > *delem2 ){
- ret = 1;
-
-/* If the first is smaller than the second, return -1. */
- } else {
- ret = -1;
-
- }
-
-/* Return the answer. */
- return ret;
-
-}
-
-static int Compare_LL( const void *elem1, const void *elem2 ){
-/*
-* Name:
-* Compare_LL
-
-* Purpose:
-* Compare two LabelList structures as used by function PlotLabels.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int Compare_LL( const void *elem1, const void *elem2 )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-* This function compares two "LabelList" structures as used by function
-* PlotLabels, and returns an integer indicating which has a larger
-* "index" value. This function is intended to be used with the C
-* Run-Time-Library sorting function "qsort".
-
-* Parameters:
-* elem1
-* Pointer to the first LabelList.
-* elem2
-* Pointer to the second LabelList.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero is returned if the values are equal. If the first is larger
-* than the second then +1 is returned. Otherwise, -1 is returned.
-
-* Notes:
-* - This function executes even if an error has occurred.
-
-*/
-
-/* Local Variables: */
- LabelList *ll1; /* Pointer to the first LabelList */
- LabelList *ll2; /* Pointer to the second LabelList */
- int ret; /* The returned value */
-
-/* Get pointers to the two LabelList structures. */
- ll1 = (LabelList *) elem1;
- ll2 = (LabelList *) elem2;
-
-/* Compare the indices for the two label's. */
- if( ll1->index < ll2->index ){
- ret = -1;
-
- } else if( ll1->index > ll2->index ){
- ret = 1;
-
- } else {
- ret = 0;
- }
-
-/* Return the answer. */
- return ret;
-
-}
-
-static void CopyPlotDefaults( AstPlot *this, int axis, AstPlot *dplot,
- int daxis, int *status ){
-/*
-*+
-* Name:
-* astCopyPlotDefaults
-
-* Purpose:
-* Copy used attribute defaults from one Plot to another.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "plot.h"
-* void astCopyPlotDefaults( AstPlot *this, int axis, AstPlot *dplot,
-* int daxis )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-* Some of the attributes used by the Plot class have dynamic default
-* values that are determined during the process of drawing an annotated
-* grid using astGrid. The dynamic default values are stored in a
-* separate set of components within the Plot structure. This function
-* copies these components from one Plot to another.
-
-* Parameters:
-* this
-* Pointer to a Plot containing the values ot be copied.
-* axis
-* The zero-based index of the axis within "this" for which the
-* used defaults are to be copied.
-* dplot
-* A pointer to another Plot into which the default attribute
-* values are to be copied.
-* daxis
-* The zero based index of the axis within "dplot" which is to
-* receive the new values.
-
-*-
-*/
-
-/* Check the global status. */
- if( !astOK ) return;
-
- dplot->ulglb[ daxis ] = this->ulglb[ axis ];
- dplot->ulgtk[ daxis ] = this->ulgtk[ axis ];
- dplot->uloggap[ daxis ] = this->uloggap[ axis ];
- dplot->ugap[ daxis ] = this->ugap[ axis ];
- dplot->ucentre[ daxis ] = this->ucentre[ axis ];
- dplot->uedge[ daxis ] = this->uedge[ axis ];
- dplot->ulblat[ daxis ] = this->ulblat[ axis ];
- dplot->ulbunit[ daxis ] = this->ulbunit[ axis ];
- dplot->umintk[ daxis ] = this->umintk[ axis ];
- dplot->utxtlb[ daxis ] = this->utxtlb[ axis ];
- dplot->umjtkln[ daxis ] = this->umjtkln[ axis ];
-
- dplot->ugrid = this->ugrid;
- dplot->ulbling = this->ulbling;
- dplot->uborder = this->uborder;
-}
-
-static int CountGood( int n, double *data, int *status ){
-/*
-* Name:
-* CountGood
-
-* Purpose:
-* Coount the number of non-bad values in an array.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int CountGood( int n, double *data, int *status )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-* This function returns the number of elements in the supplied array
-* which do not have the value AST__BAD.
-
-* Parameters:
-* n
-* The total number of elements in the array.
-* data
-* Pointer to the start of the array.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The number of good points in the array.
-
-* Notes:
-* - A value of zero is returned if an error has already occurred.
-
-*/
-
-/* Local Variables: */
- int i;
- int ngood;
- double *value;
-
-/* Check global status. */
- if( !astOK ) return 0;
-
-/* Initialise a pointer to the next array element, and the number of
- good elements found so far. */
- value = data;
- ngood = 0;
-
-/* Check each element. */
- for( i = 0; i < n; i++ ){
- if( *(value++) != AST__BAD ) ngood++;
- }
-
-/* Return the answer. */
- return ngood;
-
-}
-
-static int Cross( float ax, float ay, float bx, float by,
- float cx, float cy, float dx, float dy, int *status ){
-/*
-* Name:
-* Cross
-
-* Purpose:
-* See if two line segments intersect.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int Cross( float ax, float ay, float bx, float by,
-* float cx, float cy, float dx, float dy, int *status )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-* This function sees if the line segment (A,B) intersects the line
-* segment (C,D).
-
-* Parameters:
-* ax, ay
-* The coordinates of A.
-* bx, by
-* The coordinates of B.
-* cx, cy
-* The coordinates of C.
-* dx, dy
-* The coordinates of D.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero if the line segments do not cross or if an error has already
-* occurred, and 1 if they do.
-
-*/
-
-/* Local Variables: */
- int ret;
- float m1, m2, denom, num, t1, t2;
-
-/* Check the inherited status. */
- if( !astOK ) return 0;
-
-/* Get the fraction of the distance from A to B at which the line AB
- intersects the line CD. */
- m1 = dx - cx;
- m2 = dy - cy;
- denom = (bx - ax)*m2 - (by-ay)*m1;
- num = (ay - cy)*m1 - (ax - cx)*m2;
-
- if( denom != 0.0 ) {
- t1 = num / denom;
-
-/* If the the intersection occurs within the segment of the line between A
- and B... */
- if( t1 >= 0.0 && t1 <= 1.0 ){
-
-/* ... then get the fraction of the distance from C to D at which the
- line CD intersects the line AB. */
- m1 = bx - ax;
- m2 = by - ay;
- denom = (dx - cx)*m2 - (dy-cy)*m1;
- num = (cy - ay)*m1 - (cx - ax)*m2;
-
- if( denom != 0.0 ) {
- t2 = num / denom;
-
-/* If the the intersection occurs within the segment of the line between C
- and D then the line segments intersect. */
- if( t2 >= 0.0 && t2 <= 1.0 ){
- ret = 1;
- } else {
- ret = 0;
- }
-
-/* If the two lines are parallel, then they do not intersect. */
- } else {
- ret = 0;
- }
-
- } else {
- ret = 0;
- }
-
- } else {
- ret = 0;
-
- }
-
- return ret;
-}
-
-static void Crv( AstPlot *this, double *d, double *x, double *y, int skipbad,
- double *box, CrvStatics *pstatics, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* Crv
-
-* Purpose:
-* Draw a curve.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void Crv( AstPlot *this, double *d, double *x, double *y, int skipbad,
-* double *box, CrvStatics *pstatics, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function draws a curve parameterised by the distance from some
-* starting point. The function pointed to by the external variable
-* Crv_map is used to transform distances along the curve into graphics
-* coordinates (X,Y). The supplied function parameters defined the
-* section of the curve to be drawn.
-*
-* The algorithm used needs no knowledge about the nature of the mapping
-* performed by Crv_map, and can handle discontinuities in the curve. It
-* first of all determines if any of the segments of the curve can be
-* adequately represented by simply drawing a straight line through the
-* supplied end points. This decision is based on several requirements such
-* as keeping the angle between adjacent sections low and both ends being
-* defined (i.e. X and Y not equal to AST__BAD). Any segments of the curve
-* which satisfy the requirements are draw as straight lines. If any of
-* the supplied curve segments cannot be drawn in this way, then they are
-* split up into a set of evenly-spaced sub-segments and the graphics
-* coordinates at the ends of these sub-segments are found using Crv_map.
-* This function is then called recursively to draw the sub-segments. This
-* recursion is limited in depth by the requirement that all the
-* sub-segments must be longer than a specified lower limit. If this is not
-* the case, then the curve is assumed to be dis-continuous and and the
-* sub-segments are ignored.
-
-* Parameters:
-* d
-* Pointer to an array of CRV_NPNT values giving the distance along
-* the curve from the starting point to each of CRV_NPNT points. They
-* should increase monotonically, and should be in whatever units are
-* used by the function pointed to by Crv_map. The curve is drawn from
-* d[0] to d[CRV_NPNT].
-* x
-* Pointer to an array of CRV_NPNT values giving the graphics X
-* coordinate for the positions supplied in the array pointed to by
-* parameter "d".
-* y
-* Pointer to an array of CRV_NPNT values giving the graphics Y
-* coordinate for the positions supplied in the array pointed to by
-* parameter "d".
-* skipbad
-* Controls what happens if all the supplied points are bad or
-* outside the plotting area. If skipbad is non-zero, then it is
-* assumed that the supplied points represent an entirely bad (or
-* out of bounds) section of the curve, and this function will
-* return without attempt to sub-divide any of the supplied points.
-* If skipbad is zero, then it is assumed that we may be able to find
-* some good points between the supplied bad points, and therefore
-* this function will attempt to sub-divide the supplied points.
-* Should be supplied as zero on the initial invocation.
-* box
-* Pointer to an array of 4 doubles houlding a bounding box within
-* which the current segment must reside if it is to be sub-divided.
-* Supplied in the order xlo, xhi, ylo, yhi. May be NULL in which
-* case, no check is made on the bounding box.
-* pstatics
-* Pointer to a structure holding values for variables which were
-* statically defined within this function prior to the thread-safe
-* version of AST. If a NULL pointer is supplied, a new structure
-* is created in dynamic memory and initialised.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* External Variables:
-* Crv_nent = int (Read/Write)
-* The number of recursive entries which have been made into
-* this function. This should be set to zero before entering
-* this function for the first time.
-* Crv_ux0 = double (Read/Write)
-* The X component in graphics coordinates of the unit vector
-* along the previous segment of the curve. This should be set
-* to AST__BAD initially to indicate that the previous section
-* is not defined.
-* Crv_uy0 = double (Read/Write)
-* The Y component of the unit vector along the previous segment.
-* Crv_limit = double (Read)
-* The square of the maximum acceptable residual between the
-* drawn curve and the true curve, in graphics coordinates.
-* Crv_scerr = double (Read)
-* If the ratio of the lengths of adjacent sub-segments is larger
-* than Crv_scerr,then the seub-segments will be sub-divided. Note,
-* if either axis is mapped logarithmically onto the screen, then
-* there will naturally be large changes in scale. Crv_scerr should
-* always be larger than 1.0.
-* Crv_map = void (*)( int n, double *dd, double *xx, double *yy,
-* const char *method, const char *class ) (Read)
-* A pointer to a function which can be called to map "n" distances
-* along the curve (supplied in "dd") into graphics coordinates
-* (stored in "xx" and "yy"). See function "Map1" as an example.
-* Crv_clip = int (Read)
-* Should lines be clipped at the edge of the plotting area?
-
-* Notes:
-* - The CRV_TRACE conditional compilation blocks in this function
-* provide code which displays the recursive entries made to this
-* function (and also pauses on initial entry until return is pressed).
-* It is useful for investigating the details of the drawing of a
-* curve.
-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- CrvStatics *statics; /* Pointer to structure holding static values */
- double *dd; /* Pointer to array holding sub-segment distances */
- double *pd; /* Pointer to next sub-segment distance */
- double *px; /* Pointer to next sub-segment x coord. */
- double *py; /* Pointer to next sub-segment y coord. */
- double *xx; /* Pointer to array holding sub-segment x coord.s */
- double *yy; /* Pointer to array holding sub-segment x coord.s */
- double bbox[4]; /* Bounding box for this segment */
- double dl2[ CRV_NSEG ];/* Squred segment lengths */
- double dx[ CRV_NSEG ]; /* X increment along each segment */
- double dy[ CRV_NSEG ]; /* Y increment along each segment */
- int i; /* Segment index */
- int seg_ok[ CRV_NSEG ];/* Flags indicating which segments can be drawn */
- int subdivide; /* Flag indicating if segments can be subdivided */
-
-/* Check inherited status */
- if( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* If required, allocate memory for a structure to hold the static
- variables need by this function. */
- if( ! pstatics ) {
- statics = astMalloc( sizeof( CrvStatics ) );
- } else {
- statics = pstatics;
- }
-
-/* If this is the first entry, set up the minimum length for a
- sub-segment in graphics coordinates. If any segment is less than
- this minimum length, then recursion will stop and the curve will
- be assumed to be dis-continuous. */
- if( !Crv_nent ) {
- statics->limit2 = 20.0*Crv_limit/(CRV_NSEG*CRV_NSEG);
-
-#ifdef CRV_TRACE
- statics->levels[ 0 ] = 0;
-#endif
- }
-
-
-/* Increment the number of entries into this function. */
- Crv_nent++;
-
-#ifdef CRV_TRACE
- for( i = 0; i < Crv_nent; i++ ) {
- printf("%d ",statics->levels[ i ] );
- }
- printf("\n");
-
- if( getchar() == 'm' ) {
- float ffx,ffy;
- for( i = 0; i < CRV_NPNT; i++ ) {
- ffx = x[i]; ffy = y[i];
- GMark( this, 1, &ffx, &ffy, 2, method, class, status );
- GFlush( this, method, class, status );
- }
- }
-#endif
-
-/* ======================================================================
- The first section of this function sets up some arrays holding
- information which will be used later on. It looks at each of the segments
- joing adjacent tabulated points, and finds and stores the increments in
- X and Y along each segment, and the square of the segment length. It
- also checks to see if the tabulated points are all bad, or if they are
- all good. It also finds the lowest squared segment length.
- ======================================================================*/
-
-/* Look at the first tabulated point. If it is good, set a flag to indicate
- that it can be used, store it as "the previous position" (i.e. the start of
- the current segment). Also set a flag ("all_bad") to indicate if all
- points looked at so far have been bad, or outside the plotting area. */
- if( *x != AST__BAD && *y != AST__BAD ){
- statics->last_ok = 1;
- statics->last_x = *x;
- statics->last_y = *y;
- statics->all_bad = ( *x < Crv_xlo || *x > Crv_xhi ||
- *y < Crv_ylo || *y > Crv_yhi ) && Crv_clip;
- } else {
- statics->last_ok = 0;
- statics->all_bad = 1;
- }
-
-/* Initialise the bouding box for the this segment. */
- bbox[ 0 ] = DBL_MAX;
- bbox[ 1 ] = -DBL_MAX;
- bbox[ 2 ] = DBL_MAX;
- bbox[ 3 ] = -DBL_MAX;
-
-/* Store pointers to the X and Y values for the "current position". This
- is the position at the end of the current segment. This is initially
- the second tabulated point. */
- px = x + 1;
- py = y + 1;
-
-/* Store pointers to the increments and squared length for the current
- segment. */
- statics->pdx = dx;
- statics->pdy = dy;
- statics->pdl2 = dl2;
-
-/* Initialise the number of long and short segments. */
- statics->nlong = 0;
- statics->nshort = 0;
-
-/* Loop round each segment. */
- for( i = 0; i < CRV_NSEG; i++ ){
-
-/* If the tabulated point marking the end of the segment is good... */
- if( *px != AST__BAD && *py != AST__BAD ){
-
-/* Update the bounding box. */
- if( *px < bbox[ 0 ] ) bbox[ 0 ] = *px;
- if( *px > bbox[ 1 ] ) bbox[ 1 ] = *px;
- if( *py < bbox[ 2 ] ) bbox[ 2 ] = *py;
- if( *py > bbox[ 3 ] ) bbox[ 3 ] = *py;
-
-/* If the point is within the plotting area, set the "statics->all_bad" flag to
- indicate that at least 1 point is within the plotting area. */
- if( !Crv_clip || ( *px >= Crv_xlo && *px <= Crv_xhi &&
- *py >= Crv_ylo && *py <= Crv_yhi ) ) statics->all_bad = 0;
-
-/* If the point marking the start of the segment was also good, find and
- store the increments and squared length for the segment, incrementing
- the pointers ready for the next segment. */
- if( statics->last_ok ){
- statics->t1 = *px - statics->last_x;
- statics->t2 = *py - statics->last_y;
- statics->t3 = statics->t1*statics->t1 + statics->t2*statics->t2;
- *(statics->pdx++) = statics->t1;
- *(statics->pdy++) = statics->t2;
- *(statics->pdl2++) = statics->t3;
-
-/* Count the number of segments which are, and are not, shorter than the
- minimum significant length. */
- if( statics->t3 > statics->limit2 ) {
- statics->nlong++;
- } else {
- statics->nshort++;
- }
-
-/* If the start was bad, the length of the segment is not defined so store
- bad values. */
- } else {
- *(statics->pdx++) = AST__BAD;
- *(statics->pdy++) = AST__BAD;
- *(statics->pdl2++) = AST__BAD;
- }
-
-/* The point at the end of the current segment becomes the point at the
- start of the next segment. */
- statics->last_ok = 1;
- statics->last_x = *(px++);
- statics->last_y = *(py++);
-
-/* If the tabulated point marking the end of the current segment is bad,
- the segment length is undefined so store bad values. */
- } else {
- *(statics->pdx++) = AST__BAD;
- *(statics->pdy++) = AST__BAD;
- *(statics->pdl2++) = AST__BAD;
-
-/* The point at the end of the current segment becomes the point at the
- start of the next segment. */
- statics->last_ok = 0;
- px++;
- py++;
- }
- }
-
-/* ======================================================================
- The next section of this function checks to see lines can be drawn
- directly through any of the tabulated points. The flags in "seg_ok"
- indicates if this is the case for each segment.
- ======================================================================*/
-
-/* The unit vector along the previous segment is supplied in external
- variables Crv_ux0 and Crv_uy0. These will be AST__BAD if the direction
- of the previous segment is undefined. */
- statics->vxl = Crv_ux0;
- statics->vyl = Crv_uy0;
-
-/* The length of the previous segment is initially bad. */
- statics->dll = AST__BAD;
-
-/* Set up some pointers used to walk through the arrays holding the lengths
- of each segment. */
- statics->pdl2 = dl2;
- statics->pdx = dx;
- statics->pdy = dy;
-
-/* Check each segment in turn to see if it can be drawn as a single
- straight line. */
- for( i = 0; i < CRV_NSEG; i++ ){
-
-/* A segment can only be drawn as a single line if both ends are good
- and the distance between them is not zero. */
- if( *statics->pdl2 != AST__BAD && *statics->pdl2 > 0.0 ){
-
-/* Get a unit vector in the direction of the current segment. */
- statics->dl = sqrt( *statics->pdl2 );
- statics->vx = *statics->pdx/statics->dl;
- statics->vy = *statics->pdy/statics->dl;
-
-/* If a unit vector in the direction of the previous segment is available,
- we check that the angle between the previous segment and the current
- segment is not too high. */
- if( statics->vxl != AST__BAD ){
- statics->cosang = statics->vxl*statics->vx + statics->vyl*statics->vy;
-
-/* If the angle is too high, set a flag to indicate that the segment cannot
- be drawn as a single line. Also, set the flag for the previous segment as
- well. */
- if( statics->cosang < 0.8 ||
- ( *statics->pdl2 )*( 1.0 - statics->cosang*statics->cosang ) > Crv_limit ) {
- seg_ok[ i ] = 0;
- if( i > 0 ) seg_ok[ i - 1 ] = 0;
-
-
-/* If the angle between this segment and the previous segment is not too
- high, check that the scale has not changed too much. */
- } else {
-
-/* If the scale (=vector length) has changed a lot, set a flag to indicate
- that the segment cannot be drawn as a single line. Also, set the flag for
- the previous segment as well. */
- if( statics->dll != AST__BAD && ( statics->dl < statics->dll/Crv_scerr || statics->dl > statics->dll*Crv_scerr ) ) {
- seg_ok[ i ] = 0;
- if( i > 0 ) seg_ok[ i - 1 ] = 0;
-
-/* If the orientation and scale of this segment has not changed much from
- the previous segment, the segment can be drawn as a straight line. */
- } else {
- seg_ok[ i ] = 1;
- }
- }
-
-/* If no unit vector is available for the previous segment, then assume
- we are re-starting the curve after a discontinuity. In this case, we
- can draw it as a straight line. */
- } else {
- seg_ok[ i ] = 1;
- }
-
-/* Save the unit vector along the current segment for use next time. */
- statics->vxl = statics->vx;
- statics->vyl = statics->vy;
-
-/* Save the length if the current segment for use next time. */
- statics->dll = statics->dl;
-
-/* If the length of the current segment is undefined, or zero, we cannot
- draw it as a single line. Also, there is no direction vector to pass
- on to the next time, so set them bad. */
- } else {
- seg_ok[ i ] = 0;
- statics->vxl = AST__BAD;
- statics->vyl = AST__BAD;
- statics->dll = AST__BAD;
- }
-
-/* Point to the next segment. */
- statics->pdl2++;
- statics->pdx++;
- statics->pdy++;
-
- }
-
-/* Do not allow isolated segments to be OK. If a segment is flagged as being
- OK, but both its neighbours are not OK, set the segment not OK as well. */
- statics->seg0 = seg_ok + 1;
- statics->segm = seg_ok;
- statics->segp = seg_ok + 2;
-
- if( !(*statics->seg0) ) *statics->segm = 0;
-
- for( i = 1; i < CRV_NSEG - 1; i++ ){
- if( !(*statics->segm) && !(*statics->segp) ) *statics->seg0 = 0;
- statics->seg0++;
- statics->segm++;
- statics->segp++;
- }
-
- if( !(*statics->segm) ) *statics->seg0 = 0;
-
-/* ======================================================================
- The next section of this function draws the curve. Each segment is drawn
- as a straight line if the corresponding flag in "seg_ok" is set.
- Segments for which the flag is not set are drawn by calling this function
- recursivly.
- ======================================================================*/
-
-/* Get the parametric length (i.e. the increment in "d") of the sub-segments
- within each subdivided segment. */
- statics->delta = ( d[ CRV_NSEG ] - d[ 0 ] )/(double)( CRV_NSEG*CRV_NSEG );
-
-/* If we have made the maximum number of recursive entries into this
- function, or if every supplied point was bad or outside the plotting
- area, or if most of the segments were very short in graphics space, we will
- not be attempting to subdivide any segments which cannot be drawn directly
- as a straight line. If "skipbad" was supplied as zero, we ignore the
- restriction which says that we must have some good points (since we
- may find some good poits by a further sub-division). */
- subdivide = ( Crv_nent < CRV_MXENT &&
- ( !statics->all_bad || !skipbad ) &&
- statics->nlong > statics->nshort );
-
-/* We do not sub-divide if the bounding box of the supplied points
- is not at least 10% smaller than the supplied bouding box on either axis. */
- if( box && bbox[ 0 ] != DBL_MAX ) {
- if( bbox[ 1 ] - bbox[ 0 ] > 0.9*( box[ 1 ] - box[ 0 ] ) &&
- bbox[ 3 ] - bbox[ 2 ] > 0.9*( box[ 3 ] - box[ 2 ] ) ) {
- subdivide = 0;
- }
- }
-
-/* Initialise some pointers to the data defineding the subsegments. */
- dd = NULL;
- xx = NULL;
- yy = NULL;
-
-/* If we may be subdividing any segments, find which segments they are
- and set up the offset to each sub-segment. */
- if( subdivide ){
-
-/* Initialise the number of segments being subdivided. */
- statics->nseg = 0;
-
-/* Loop round each segment. */
- for( i = 0; i < CRV_NSEG; i++ ){
-
-/* If the segment cannot be drawn directly as a straight line, we will
- subdivide it. */
- if( !seg_ok[ i ] ){
-
-/* Increment the number of segments being subdivided, and let the array
- of subsegment offsets grow to accomodate it. */
- statics->nseg++;
- dd = (double *) astGrow( dd, statics->nseg, sizeof(double)*( CRV_NSEG + 1 ) );
- if( !astOK ) break;
-
-/* Append the offset to each new subsegment to the "dd" array. */
- statics->el = ( statics->nseg - 1 )*( CRV_NSEG + 1 );
- statics->d0 = d[ i ];
- for( statics->j = 0; statics->j <= CRV_NSEG; statics->j++ ){
- dd[ statics->el++ ] = statics->d0;
- statics->d0 += statics->delta;
- }
- }
- }
-
-/* If any segments needed subdividing, get room to store the graphics
- coordinates at each point, and then fill these arrays by calling
- Crv_map to map the offsets in "dd" into graphics coordinates. */
- if( statics->nseg > 0 ){
- statics->nel = statics->nseg*( CRV_NSEG + 1 );
- xx = (double *) astMalloc( sizeof(double)*(size_t)statics->nel );
- yy = (double *) astMalloc( sizeof(double)*(size_t)statics->nel );
- Crv_map( statics->nel, dd, xx, yy, method, class, status GLOBALS_NAME );
- }
- }
-
-/* If all has gone OK, we will draw each segment. Initialise pointers
- used to walk through the "xx", "yy" and "dd" arrays. */
- if( astOK ){
- px = xx;
- py = yy;
- pd = dd;
-
-/* Draw each segment in turn. */
- for( i = 0; i < CRV_NSEG; i++ ){
-
-/* If possible, draw it as a single straight line, and then store the
- unit vector along the line in the appropriate external variables for
- use by the next invocation of this function. */
- if( seg_ok[ i ] ){
- CrvLine( this, x[ i ], y[ i ], x[ i + 1 ], y[ i + 1 ], method, class, status );
- statics->dl = sqrt( dl2[ i ] );
- Crv_ux0 = dx[ i ]/statics->dl;
- Crv_uy0 = dy[ i ]/statics->dl;
-
-/* Otherwise, if we are subdividing, and if the current segment is
- not very short, we call this function recursively to draw the segment.
- Increment pointers into the "xx", "yy" and "dd" arrays so that they
- point to the start of the subsegment information for the next segment
- to be subdivided. If all the graphics positions at this level were
- bad or outside the plot, tell the next invocation of Crv to do no
- further sub-divisions if it too finds all graphics positions to be bad or
- outside the plot. */
- } else if( subdivide ) {
-
-#ifdef CRV_TRACE
- statics->levels[ Crv_nent ] = i;
-#endif
-
- Crv( this, pd, px, py, statics->all_bad, bbox, statics, method,
- class, status );
- pd += CRV_NSEG + 1;
- px += CRV_NSEG + 1;
- py += CRV_NSEG + 1;
-
-/* Otherwise, we assume we have hit a discontinuity in the curve. Store
- bad values for the unit vector along the previous sgment, and do not
- draw anything. */
- } else {
- Crv_ux0 = AST__BAD;
- Crv_uy0 = AST__BAD;
- }
- }
- }
-
-/* Free any memory used to store subsegment information. */
- if( dd ) dd = (double *) astFree( (void *) dd );
- if( xx ) xx = (double *) astFree( (void *) xx );
- if( yy ) yy = (double *) astFree( (void *) yy );
-
-/* Decrement the number of recursive entries into this function. */
- Crv_nent--;
-
-/* Free the memory holding the static data values if we are leaving the
- final entry. */
- if( ! pstatics ) statics = astFree( statics );
-
-/* Return. */
- return;
-}
-
-static int CvBrk( AstPlot *this, int ibrk, double *brk, double *vbrk,
- double *len, int *status ){
-/*
-*+
-* Name:
-* astCvBrk
-
-* Purpose:
-* Return information about breaks in the last curve drawn by astGridLine,
-* astCurve or astGenCurve.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "plot.h"
-* int CvBrk( AstPlot *this, int ibrk, double *brk, double *vbrk,
-* double *len )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-* Curves drawn by astGridLine, astCurve or astGenCurve may contain breaks
-* for several reasons (for instance, it may go outside the plotting area,
-* or the mapping between physical and graphics coordinates may be
-* discontinuous). This function returns information about such breaks.
-
-* Parameters:
-* this
-* Pointer to a Plot.
-* ibrk
-* The index of the break for which information is required. The first
-* break has index 1. An error is reported if no break with the
-* required index exists. The exception to this is that zero can be
-* supplied, in which case the "brk" and "vbrk" parameters
-* are ignored, but all other information is returned.
-* brk
-* A pointer to an array of 2 elements
-* in which to return the X and Y graphics coordinates of the break.
-* vbrk
-* A pointer to an array of 2 elements
-* in which to return the X and Y components of a unit vector in the
-* graphics coordinate system. The vector is tangential to the curve
-* at the requested break, and points back along the drawn section of
-* the curve.
-* len
-* A pointer to a "double" in which to return the
-* length of the drawn curve, in the graphics coordinate system.
-
-* Returned Value:
-* astCvBrk()
-* The number of breaks which occurred in the curve.
-
-* Notes:
-* - Currently, this function may not be used to return information
-* about curves drawn using astPolyCurve.
-* - All curves contain at least two breaks; one at the start and one
-* at the end. This is true even if the start and end of the curve are
-* coincident. However, if the entire curve was outside the plotting area
-* (i.e. if the length of the drawn curve is zero), then it will have no
-* breaks.
-* - If no curve has yet been drawn by astGridLine or astCurve, then -1 is
-* returned for the function value, and the function parameter values are
-* left unchanged.
-* - The returned information refers to the most recent curve drawn by
-* astGridLine or astCurve, even if that curve was drawn by a Plot other than
-* the one supplied to this function.
-* - NULL pointers may be supplied for "brk", "vbrk" or "len", in which
-* case the corresponding values are not returned.
-* - Zero is returned by this function if an error has already occurred,
-* or if this function should fail for any reason.
-
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- int ret; /* The number of breaks in the curve. */
-
-/* Check the global status. */
- if( !astOK ) return 0;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* Information about the most recent curve drawn by astGridLine or astCurve is
- stored in the external structure "Curve_data". Get the number of breaks
- in the last curve. This is initialised to -1 in astInitPlot when the
- virtual function table for this class is initialised. */
- ret = Curve_data.nbrk;
-
-/* If a curve has been drawn, store the length of the drawn curve if
- required. */
- if( ret != -1 ){
- if( len ) *len = (double) Curve_data.length;
-
-/* If a legal break index has been supplied, return the position and
- direction at the requested break (if required). */
- if( ibrk > 0 && ibrk <= ret ){
- if( brk ){
- brk[ 0 ] = (double) Curve_data.xbrk[ ibrk - 1 ];
- brk[ 1 ] = (double) Curve_data.ybrk[ ibrk - 1 ];
- }
- if( vbrk ){
- vbrk[ 0 ] = (double) Curve_data.vxbrk[ ibrk - 1 ];
- vbrk[ 1 ] = (double) Curve_data.vybrk[ ibrk - 1 ];
- }
-
-/* If an illegal break index has been supplied (other than zero), report
- an error, and set the number of breaks to zero. */
- } else if( ibrk ){
- if( ret > 0 ){
- astError( AST__BDBRK, "astCvBrk(%s): The supplied break index "
- "(%d) should be in the range [1,%d].", status, astGetClass(this),
- ibrk, ret );
- ret = 0;
- } else {
- astError( AST__BDBRK, "astCvBrk(%s): The most recent curve "
- "plotted by method astGridLine or astCurve had no breaks.", status,
- astGetClass(this) );
- }
- }
- }
-
-/* If an error has occurred, return 0. */
- if( !astOK ) ret = 0;
-
-/* Return the result. */
- return ret;
-
-}
-
-static void CrvLine( AstPlot *this, double xa, double ya, double xb, double yb,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* CrvLine
-
-* Purpose:
-* Draw a straight line between two points, with clipping.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void CrvLine( AstPlot *this, double xa, double ya, double xb, double yb,
-* const char *method, const char *class )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This functions draws a straight line from (xa,ya) to (xb,yb), breaking
-* the line at the edges of the plotting area defined by Crv_xlo, Crv_xhi,
-* Crv_ylo and Crv_yhi if Crv_clip is non-zero. If the line does not start
-* at the end of the previous line plotted by this function, then
-* information describing the break in the curve is stored in external
-* arrays.
-
-* Parameters:
-* xa
-* The graphics X coordinate at the start of the line.
-* ya
-* The graphics Y coordinate at the start of the line.
-* xb
-* The graphics X coordinate at the end of the line.
-* yb
-* The graphics Y coordinate at the end of the line.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-
-* External Variables:
-* Crv_ink = int (Read)
-* If zero then no line is drawn even if the line intersects the
-* plotting space, but break information (etc) is still returned.
-* Crv_clip = double (Read)
-* Clip lines at boundary of plotting space?
-* Crv_xlo = double (Read)
-* Lower x limit of the plotting space.
-* Crv_xhi = double (Read)
-* Upper x limit of the plotting space.
-* Crv_ylo = double (Read)
-* Lower y limit of the plotting space.
-* Crv_yhi = double (Read)
-* Upper y limit of the plotting space.
-* Crv_tol = double (Read)
-* The tolerance for determining if 2 points are coincident.
-* Crv_out = int (Read/Write)
-* Returned as zero if the line intersects the plotting space.
-* Unchanged otherwise.
-* Crv_xbrk = float * (Read/Write)
-* Pointer to the next available element in an array of AST__PLOT_CRV_MXBRK
-* values containing the graphics X coordinates at which each break
-* in the plotted curve occurred. A break is recorded if the starting
-* point of the current line is not the same as the end point of
-* the previous line.
-* Crv_ybrk = float * (Read/Write)
-* Pointer to the next available element in an array of AST__PLOT_CRV_MXBRK
-* values containing the graphics Y coordinates at which each break
-* in the plotted curve occurred.
-* Crv_vxbrk = float * (Read/Write)
-* Pointer to the next available element in an array of AST__PLOT_CRV_MXBRK
-* values containing the X component of the unit vector (within the
-* graphics coordinate system) parallel to the tangent to the curve
-* at each break. The sense is such that the vector always points back
-* along the plotted section of the curve.
-* Crv_vybrk = float * (Read/Write)
-* Pointer to the next available element in an array of AST__PLOT_CRV_MXBRK
-* values containing the Y component of the unit vector parallel to
-* the tangent to the curve at each break.
-* Crv_nbrk = int (Write)
-* The number of breaks for which information is returned in Crv_xbrk,
-* etc.
-* Crv_len = float (Write)
-* The length of the section of the curve which has been drawn so far.
-* Crv_xl = double (Write)
-* The graphics X coordinate at the end of the last line drawn.
-* Crv_yl = double (Write)
-* The graphics Y coordinate at the end of the last line drawn.
-* Crv_vxl = double (Write)
-* The X component of the unit vector along the last line drawn.
-* Crv_vyl = double (Write)
-* The Y component of the unit vector along the last line drawn.
-
-*/
-
-/* local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- double a1; /* Distance from B to the lower x boundary */
- double a2; /* Distance from B to the upper x boundary */
- double a3; /* Distance from B to the lower y boundary */
- double a4; /* Distance from B to the upper y boundary */
- double aamax; /* Distance from supplied point B to the plotable point A */
- double aamin; /* Distance from supplied point B to the plotable point B */
- double dl; /* Length of plotted line segment */
- double dx; /* Difference in x between supplied points */
- double dy; /* Difference in y between supplied points */
- double t; /* Temporary storage */
- double xam; /* Modified xa position */
- double xbm; /* Modified xb position */
- double yam; /* Modified ya position */
- double ybm; /* Modified yb position */
- int plot; /* True if a line can be plotted */
-
-/* Check inherited global status. */
- if( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- dl = 0.0;
- xam = 0.0;
- xbm = 0.0;
- yam = 0.0;
- ybm = 0.0;
-
-/* Store the shifts in x and y. */
- dx = xb - xa;
- dy = yb - ya;
-
-/* Do nothing if the line is of zero length. */
- if( dx == 0.0 && dy == 0.0 ) return;
-
-/* If either end is outside the zone, replace the given coordinates with
- the end coordinates of the section of the line which lies within the
- zone. */
- if( Crv_clip && ( xa < Crv_xlo || xa > Crv_xhi ||
- xb < Crv_xlo || xb > Crv_xhi ||
- ya < Crv_ylo || ya > Crv_yhi ||
- yb < Crv_ylo || yb > Crv_yhi ) ){
-
-/* Find the distance from point B towards point A at which the
- line cuts the two x bounds of the zone (distance at point B is
- 0.0, and at point A is 1.0). */
- if( dx != 0.0 ){
- a1 = ( xb - Crv_xlo )/dx;
- a2 = ( xb - Crv_xhi )/dx;
-
-/* Ensure that a1 represents the highest plottable offset, and a2 the
- lowest. */
- if( a1 < a2 ){
- t = a1;
- a1 = a2;
- a2 = t;
- }
-
-/* If the line joining A and B is vertical... */
- } else {
-
-/* If the line is within the plottable x range, indicate that all
- offsets are plottable (as far as the x range is concerned at least). */
- if( ( xa > Crv_xlo || EQUAL( xa, Crv_xlo ) ) &&
- ( xa < Crv_xhi || EQUAL( xa, Crv_xhi ) ) ){
- a1 = DBL_MAX;
- a2 = -DBL_MAX;
-
-/* If the line is ouside the plottable x range, indicate that no
- offsets are plottable. */
- } else {
- a1 = 0.0;
- a2 = 0.0;
- }
- }
-
-/* Find the fractional distance from point A to point B at which the
- line cuts the two y bounds of the zone. */
- if( dy != 0.0 ){
- a3 = ( yb - Crv_ylo )/dy;
- a4 = ( yb - Crv_yhi )/dy;
-
-/* Ensure that a3 represents the highest plottable offset, and a4 the
- lowest. */
- if( a3 < a4 ){
- t = a3;
- a3 = a4;
- a4 = t;
- }
-
-/* If the line joining A and B is horizontal... */
- } else {
-
-/* If the line is within the plottable y range, indicate that all
- offsets are plottable (as far as the y range is concerned at least). */
- if( ( ya > Crv_ylo || EQUAL( ya, Crv_ylo ) ) &&
- ( ya < Crv_yhi || EQUAL( ya, Crv_yhi ) ) ){
- a3 = DBL_MAX;
- a4 = -DBL_MAX;
-
-/* If the line is ouside the plottable y range, indicate that no
- offsets are plottable. */
- } else {
- a3 = 0.0;
- a4 = 0.0;
- }
- }
-
-/* Find the fractional distances from point A to point B at the ends
- of the plotable line. */
- aamin = MIN( 1.0, MAX( 0.0, MAX( a2, a4 ) ) );
- aamax = MAX( 0.0, MIN( 1.0, MIN( a1, a3 ) ) );
-
-/* Store the end coordinates of the line joining the plotable points. */
- if( aamax > aamin ){
- xam = xb - aamax*dx;
- yam = yb - aamax*dy;
- xbm = xb - aamin*dx;
- ybm = yb - aamin*dy;
- plot = 1;
-
-/* Get the unit vector along the line and the length of the plotted section. */
- dl = sqrt( dx*dx + dy*dy );
- dx /= dl;
- dy /= dl;
- dl *= MAX( 0.0, aamax - aamin );
-
-/* Clear the "plot" flag if the line does not intersect the plotting area. */
- } else {
- plot = 0;
- }
-
-/* If both ends of the line are within the plotting zone, draw the whole
- line between the supplied end points. */
- } else {
- xam = xa;
- yam = ya;
- xbm = xb;
- ybm = yb;
- plot = 1;
-
-/* Get the length of the line and the unit vector along the line. */
- dl = sqrt( dx*dx + dy*dy );
- dx /= dl;
- dy /= dl;
- }
-
-/* If a line is to be plotted... */
- if( plot ){
-
-/* If this is the first line to be plotted in the current curve, save
- the start of the line as a break, and indicate that some of the curve
- falls within the plotting zone. */
- if( Crv_out ){
- Crv_nbrk = 1;
- *(Crv_xbrk++) = (float) xam;
- *(Crv_ybrk++) = (float) yam;
- *(Crv_vxbrk++) = (float) dx;
- *(Crv_vybrk++) = (float) dy;
- Crv_out = 0;
-
-/* Set the length of the curve plotted so far to the length of this first
- segment. */
- Crv_len = (float) dl;
-
-/* Start a poly line. */
- if( Crv_ink ) Bpoly( this, (float) xam, (float) yam, method, class, status );
-
-/* If this is not the first line to be plotted... */
- } else {
-
-/* ... increment the length of the curve plotted so far. */
- Crv_len += (float) dl;
-
-/* If the start of this line is not coincident with the end
- of the previous line, save the previous and current positions as
- breaks in the curve. Note, the previous vector is reversed so that
- it points back towards the drawn section of the curve. Report an
- error if the arrays are full. */
- if( fabs( xam - Crv_xl ) > Crv_tol ||
- fabs( yam - Crv_yl ) > Crv_tol ){
- Crv_nbrk += 2;
- if( Crv_nbrk > AST__PLOT_CRV_MXBRK ){
- astError( AST__CVBRK, "%s(%s): Number of breaks in plotted "
- "curve exceeds %d.", status, method, class, AST__PLOT_CRV_MXBRK );
- } else {
- *(Crv_xbrk++) = (float) Crv_xl;
- *(Crv_ybrk++) = (float) Crv_yl;
- *(Crv_vxbrk++) = (float) -Crv_vxl;
- *(Crv_vybrk++) = (float) -Crv_vyl;
- *(Crv_xbrk++) = (float) xam;
- *(Crv_ybrk++) = (float) yam;
- *(Crv_vxbrk++) = (float) dx;
- *(Crv_vybrk++) = (float) dy;
- }
-
-/* Start a poly line. */
- if( Crv_ink ) Bpoly( this, (float) xam, (float) yam, method, class, status );
- }
- }
-
-/* Append a section to the current poly line. */
- if( Crv_ink ) Apoly( this, (float) xbm, (float) ybm, method, class, status );
-
-/* Save the position and vector at the end of the current line. */
- Crv_xl = xbm;
- Crv_yl = ybm;
- Crv_vxl = dx;
- Crv_vyl = dy;
- }
-
-/* Return. */
- return;
-}
-
-
-static void Curve( AstPlot *this, const double start[],
- const double finish[], int *status ){
-/*
-*++
-* Name:
-c astCurve
-f AST_CURVE
-
-* Purpose:
-* Draw a geodesic curve.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "plot.h"
-c void astCurve( AstPlot *this, const double start[],
-c const double finish[] )
-f CALL AST_CURVE( THIS, START, FINISH, STATUS )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-c This function draws a geodesic curve between two points in the
-f This routine draws a geodesic curve between two points in the
-* physical coordinate system of a Plot. The curve drawn is the
-* path of shortest distance joining the two points (as defined by
-c the astDistance function for the current Frame of the Plot).
-f the AST_DISTANCE function for the current Frame of the Plot).
-* For example, if the current Frame is a basic Frame, then the
-* curve joining the two points will be a straight line in physical
-* coordinate space. If the current Frame is more specialised and
-* describes, for instance, a sky coordinate system, then the
-* geodesic curve would be a great circle in physical coordinate
-* space passing through the two sky positions given.
-*
-* Note that the geodesic curve is transformed into graphical
-* coordinate space for plotting, so that a straight line in
-* physical coordinates may result in a curved line being drawn if
-* the Mapping involved is non-linear. Any discontinuities in the
-* Mapping between physical and graphical coordinates are
-c catered for, as is any clipping established using astClip.
-f catered for, as is any clipping established using AST_CLIP.
-*
-c If you need to draw many geodesic curves end-to-end, then the
-c astPolyCurve function is equivalent to repeatedly using
-c astCurve, but will usually be more efficient.
-f If you need to draw many geodesic curves end-to-end, then the
-f AST_POLYCURVE routine is equivalent to repeatedly calling
-f AST_CURVE, but will usually be more efficient.
-*
-c If you need to draw curves which are not geodesics, see astGenCurve
-c or astGridLine.
-f If you need to draw curves which are not geodesics, see AST_GENCURVE
-f or AST_GRIDLINE.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Plot.
-c start
-f START( * ) = DOUBLE PRECISION (Given)
-* An array, with one element for each axis of the Plot, giving
-* the physical coordinates of the first point on the geodesic
-* curve.
-c finish
-f FINISH( * ) = DOUBLE PRECISION (Given)
-* An array, with one element for each axis of the Plot, giving
-* the physical coordinates of the second point on the geodesic
-* curve.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-c - No curve is drawn if either of the "start" or "finish" arrays
-c contains any coordinates with the value AST__BAD.
-f - No curve is drawn if either of the START or FINISH arrays
-f contains any coordinates with the value AST__BAD.
-* - An error results if the base Frame of the Plot is not 2-dimensional.
-* - An error also results if the transformation between the
-* current and base Frames of the Plot is not defined (i.e. the
-* Plot's TranInverse attribute is zero).
-*--
-*/
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- const char *class; /* Object class */
- const char *method; /* Current method */
- int naxes; /* No. of axes in the base Frame */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* Store the current method, and the class of the supplied object for use
- in error messages.*/
- method = "astCurve";
- class = astGetClass( this );
-
-/* Check the base Frame of the Plot is 2-D. */
- naxes = astGetNin( this );
- if( naxes != 2 && astOK ){
- astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the base "
- "Frame of the supplied %s is invalid - this number should "
- "be 2.", status, method, class, naxes, class );
- }
-
-/* Initialise the bounding box for primitives produced by this call. */
- if( !Boxp_freeze ) {
- Boxp_lbnd[ 0 ] = FLT_MAX;
- Boxp_lbnd[ 1 ] = FLT_MAX;
- Boxp_ubnd[ 0 ] = FLT_MIN;
- Boxp_ubnd[ 1 ] = FLT_MIN;
- }
-
-/* Draw the curve. The break information is stored in an external structure
- where it can be accessed by public methods which return information
- about the most recently drawn curve. */
- CurvePlot( this, start, finish, 1, &Curve_data, method, class, status );
-
-/* Return. */
- return;
-
-}
-
-static void CurvePlot( AstPlot *this, const double *start, const double *finish,
- int ink, AstPlotCurveData *cdata, const char *method,
- const char *class, int *status ){
-/*
-*
-* Name:
-* CurvePlot
-
-* Purpose:
-* Draw a geodesic curve.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void CurvePlot( AstPlot *this, const double *start, const double *finish,
-* int ink, AstPlotCurveData *cdata, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function draws a geodesic curve between the supplied starting and
-* finishing positions. The algorithm used can handle discontinuities in the
-* Mapping between the current Frame and graphics coordinates, and
-* information describing any breaks in the curve (including the start and
-* end of the curve) are returned in the supplied AstPlotCurveData structure.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* start
-* A pointer to a an array holding the coordinates of the start of the
-* curve within the current Frame of the Plot.
-* finish
-* A pointer to a an array holding the coordinates of the finish of the
-* curve within the current Frame of the Plot.
-* ink
-* If zero, the curve is not actually drawn, but information about
-* the breaks is still returned. If non-zero, the curve is also drawn.
-* cdata
-* A pointer to a structure in which to return information about the
-* breaks in the curve.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - No curve is draw if the "start" or "finish" arrays contains any bad
-* values, or if a NULL pointer is supplied for "cdata". No errors are
-* reported in these cases.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- double d[ CRV_NPNT ]; /* Offsets to evenly spaced points along curve */
- double x[ CRV_NPNT ]; /* X coords at evenly spaced points along curve */
- double y[ CRV_NPNT ]; /* Y coords at evenly spaced points along curve */
- double tol; /* Absolute tolerance value */
- int i; /* Loop count */
- int naxes; /* No. of axes in the base Frame */
- int ok; /* Are all start coords good? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* Get the number of axes in the current Frame. */
- naxes = astGetNout( this );
-
-/* Check the "start" and "finish" parameter for bad values. */
- ok = 1;
- for( i = 0; i < naxes; i++ ) {
- if( start[ i ] == AST__BAD || finish[ i ] == AST__BAD ){
- ok = 0;
- break;
- }
- }
-
-/* Check that the "cdata" pointer can be used. */
- if( !cdata ) ok = 0;
-
-/* Only proceed if the parameters are OK, and there has been no error. */
- if( ok && astOK ){
-
-/* Establish the correct graphical attributes as defined by attributes
- with the supplied Plot. */
- astGrfAttrs( this, AST__CURVE_ID, 1, GRF__LINE, method, class );
-
-/* Set up the externals used to communicate with the Map3 function...
- The number of axes in the physical coordinate system (i.e. the current
- Frame). */
- Map3_ncoord = naxes;
-
-/* A pointer to the Plot, the Curretn Frame, and and Mapping. */
- Map3_plot = this;
- Map3_frame = astGetFrame( this, AST__CURRENT );
- Map3_map = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* The physical coordinates at the start of the curve. */
- Map3_origin = start;
-
-/* The physical coordinates at the end of the curve. */
- Map3_end = finish;
-
-/* The scale factor to convert "dist" values into physical offset values. */
- Map3_scale = astDistance( Map3_frame, start, finish );
-
-/* Convert the tolerance from relative to absolute graphics coordinates. */
- tol = astGetTol( this )*MAX( this->xhi - this->xlo,
- this->yhi - this->ylo );
-
-/* Now set up the external variables used by the Crv and CrvLine function. */
- Crv_scerr = ( astGetLogPlot( this, 0 ) ||
- astGetLogPlot( this, 1 ) ) ? 100.0 : 1.5;
- Crv_ux0 = AST__BAD;
- Crv_tol = tol;
- Crv_limit = 0.5*tol*tol;
- Crv_map = Map3;
- Crv_ink = ink;
- Crv_xlo = this->xlo;
- Crv_xhi = this->xhi;
- Crv_ylo = this->ylo;
- Crv_yhi = this->yhi;
- Crv_out = 1;
- Crv_xbrk = cdata->xbrk;
- Crv_ybrk = cdata->ybrk;
- Crv_vxbrk = cdata->vxbrk;
- Crv_vybrk = cdata->vybrk;
- Crv_clip = astGetClip( this ) & 1;
-
-/* Set up a list of points spread evenly over the curve. */
- for( i = 0; i < CRV_NPNT; i++ ){
- d[ i ] = ( (double) i)/( (double) CRV_NSEG );
- }
-
-/* Map these points into graphics coordinates. */
- Map3( CRV_NPNT, d, x, y, method, class, status GLOBALS_NAME );
-
-/* Use Crv and Map3 to draw the curve. */
- Crv( this, d, x, y, 0, NULL, NULL, method, class, status );
-
-/* End the current poly line. */
- Opoly( this, method, class, status );
-
-/* Tidy up the static data used by Map3. */
- Map3( 0, NULL, NULL, NULL, method, class, status GLOBALS_NAME );
-
-/* If no part of the curve could be drawn, set the number of breaks and the
- length of the drawn curve to zero. */
- if( Crv_out ) {
- Crv_nbrk = 0;
- Crv_len = 0.0F;
-
-/* Otherwise, add an extra break to the returned structure at the position of
- the last point to be plotted. */
- } else {
- Crv_nbrk++;
- if( Crv_nbrk > AST__PLOT_CRV_MXBRK ){
- astError( AST__CVBRK, "%s(%s): Number of breaks in curve "
- "exceeds %d.", status, method, class, AST__PLOT_CRV_MXBRK );
- } else {
- *(Crv_xbrk++) = (float) Crv_xl;
- *(Crv_ybrk++) = (float) Crv_yl;
- *(Crv_vxbrk++) = (float) -Crv_vxl;
- *(Crv_vybrk++) = (float) -Crv_vyl;
- }
- }
-
-/* Store extra information about the curve in the returned structure, and
- purge any zero length sections. */
- if( cdata ){
- cdata->length = Crv_len;
- cdata->out = Crv_out;
- cdata->nbrk = Crv_nbrk;
- PurgeCdata( cdata, status );
- }
-
-/* Annul the Frame and Mapping. */
- Map3_frame = astAnnul( Map3_frame );
- Map3_map = astAnnul( Map3_map );
-
-/* Re-establish the original graphical attributes. */
- astGrfAttrs( this, AST__CURVE_ID, 0, GRF__LINE, method, class );
-
- }
-
-/* Return. */
- return;
-
-}
-
-
-static AstPointSet *DefGap( AstPlot *this, double *gaps, int *ngood,
- double *frac, int *inval, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* DefGap
-
-* Purpose:
-* Find default gap sizes for the tick marks on the axes of a 2-D
-* physical coordinate system.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* AstPointSet *DefGap( AstPlot *this, double *gaps, int *ngood,
-* double *frac, int *inval, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-* This function returns default gap sizes for each axis in a 2-D Frame.
-* The values are found by first obtaining a grid of points spread over
-* the region containing good physical coordinates. The physical
-* coordinate values (non-normalized) for each axis are sorted into
-* increasing order.
-*
-* For linearly spaced tick marks, a set of quantile axis values is then
-* found, and the median of the gaps between these quantiles is returned
-* as the default gap for the axis.
-*
-* For logarithmically spaced tick marks, the returned gap size is the
-* ratio between adjacent tick mark values, chosen to give an optimal
-* number of ticks between the maximum and minimum axis values found in
-* the grid.
-
-* Parameters:
-* this
-* Pointer to a Plot.
-* gaps
-* Pointer to an array in which to return the default gap value for
-* each axis.
-* ngood
-* Pointer to an array in which toi return the number of good
-* values in the returned PointSet for each axis.
-* frac
-* Pointer to a double in which to return the fraction of the
-* plotting area containing good physical coordinates.
-* inval
-* Pointer to a location at which to return a flag indicating if
-* any bad physical coordinates were encountered.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a PointSet holding the physical coordinate values at a
-* set of points spread across the plotting area. The values on each
-* axis are sorted into increasing order. The values will not have
-* been normalized.
-
-* Notes:
-* - The returned PointSet should be annulled when no longer needed.
-* - This function assumes that the physical coordinate system is 2
-* dimensional, and it should not be used if this is not the case.
-* - Gap sizes of 1.0, zero good points, and a NULL pointer are returned
-* if an error has already occurred, or if this function should fail for
-* any reason.
-
-*/
-
-/* Local Variables: */
- AstPointSet *pset1; /* Pointer to PointSet holding graphics coords */
- AstPointSet *pset2; /* Pointer to PointSet holding physical coords */
- double **ptr1; /* Pointer to graphics axis values */
- double **ptr2; /* Pointer to physical axis values */
- double dran; /* Dynamic range */
- double maxv; /* Maximum axis value */
- double minv; /* Minimum axis value */
- double qgap[ MAJTICKS_OPT ];/* Gaps between physical coordinate quantiles */
- int dim; /* Dimension of grid */
- int dk; /* The number of points between quantiles */
- int i; /* The quantile index */
- int j; /* Axis index */
- int k; /* Index into the sorted array of axis values */
- int logticks; /* Logarithmically spaced tick marks? */
- int n; /* Target number fo ticks */
- int psize; /* Total number of axis value */
-
-/* Initialise the returned values. */
- gaps[ 0 ] = 1.0;
- gaps[ 1 ] = 1.0;
- ngood[ 0 ] = 0;
- ngood[ 1 ] = 0;
- *frac = 0.0;
- *inval = 0;
-
-/* Check global status. */
- if( !astOK ) return NULL;
-
-/* Get two PointSets, one holding a grid of 2D graphics coordinates,
- and one holding the corresponding (non-normalized) physical
- coordinates. */
- dim = 0;
- *frac = GoodGrid( this, &dim, &pset1, &pset2, method, class, status );
-
-/* Get pointers to the data values in each PointSet. */
- ptr1 = astGetPoints( pset1 );
- ptr2 = astGetPoints( pset2 );
-
-/* Store the number of elements in each PointSet. */
- psize = astGetNpoint( pset1 );
-
-/* For each axis... */
- for( j = 0; j < 2 && astOK; j++ ){
-
-/* Sort the axis values into increasing order. Any bad values are stored at
- the end of the array on return. */
- qsort( (void *) ptr2[ j ], (size_t) psize, sizeof(double), Compared );
-
-/* Count the number of non-bad values returned. */
- ngood[ j ] = CountGood( psize, ptr2[ j ], status );
-
-/* Set the returned flag to indicate if any bad values were found. */
- if( ngood[ j ] < psize ) *inval = 1;
-
-/* Report an error if there are too few good points. */
- if( ngood[ j ] < MAJTICKS_OPT ){
- astError( AST__VSMAL, "%s(%s): The range of coordinate values "
- "covered by axis %d is too small to plot.", status, method,
- class, j + 1 );
- break;
- }
-
-/* Get the maximum and minimum axis value */
- minv = ptr2[ j ][ 0 ];
- maxv = ptr2[ j ][ ngood[ j ] - 1 ];
-
-/* See if ticks on this axis are spaced linearly or logarithmically. If a
- value has been set for LogTicks used it, otherwise find a default value.
- The default is 0 unless LogPlot is non-zero, the axis range does not
- encompass zero and and the dynamic range is 100 or more. Set this
- default value explicitly so that later functions will pick it up (it will
- be cleared at the end of the astGrid function). */
- if( astTestLogTicks( this, j ) ) {
- logticks = astGetLogTicks( this, j );
- } else {
- logticks = 0;
- if( astGetLogPlot( this, j ) && minv*maxv > 0.0 ) {
- dran = maxv/minv;
- if( dran >= 100.0 || dran <= 0.01 ) logticks = 1;
- }
- astSetLogTicks( this, j, logticks );
- }
-
-/* If no value has been supplied for LogLabel use the value of LogTicks
- as the default. */
- if( !astTestLogLabel( this, j ) ) astSetLogLabel( this, j, logticks );
-
-/* For linear gaps, find the gaps between adjacent evenly spaced quantiles.
- The number of quantiles used equals the optimal number of major tick
- marks. */
- if( !logticks ) {
- dk = (int)( (double)ngood[ j ]/MAJTICKS_OPT );
- i = 0;
- for( k = dk; k < ngood[ j ] && i < MAJTICKS_OPT; k += dk ){
- qgap[ i++ ] = ptr2[ j ][ k ] - ptr2[ j ][ k - dk ];
- }
-
-/* Find the median of the gaps between adjacent quantiles. */
- qsort( (void *) qgap, (size_t) i, sizeof(double), Compared );
- gaps[ j ] = qgap[ i/2 ];
-
-/* If the test gap size is zero, use a fraction of the total range. Report
- an error if the total range is zero. */
- if( gaps[ j ] <= 0.0 ){
- gaps[ j ] = ( ptr2[ j ][ ngood[ j ] - 1 ] - ptr2[ j ][ 0 ] )/MAJTICKS_OPT;;
- if( gaps[ j ] <= 0.0 ){
- astError( AST__VSMAL, "%s(%s): The range of coordinate values "
- "covered by axis %d is too small to plot.", status, method,
- class, j + 1 );
- }
- }
-
-/* For logarithmic gaps, use the Nth root of the ratio of the maximum and
- minimum data value found. */
- } else if( astOK ) {
-
-/* Report an error if the max and min values are of opposite signs or
- zero or equal. */
- if( maxv*minv <= 0.0 ) {
- astError( AST__ZERAX, "%s(%s): The range of coordinate values "
- "covered by axis %d includes the origin and so "
- "logarithmic ticks cannot be produced.", status, method,
- class, j + 1 );
-
- } else if( maxv == minv ) {
- astError( AST__VSMAL, "%s(%s): The range of coordinate values "
- "covered by axis %d is too small to plot.", status, method,
- class, j + 1 );
-
-/* Otherwise find the gap to use. */
- } else {
-
-/* Store the maximum and minimum number of major tick marks along each
- axis. These numbers are reduced if only a small part of the plotting
- area contains valid coordinates, so that the tick marks do not end up
- to close together. */
- n = (int) ( 0.5 + MAJTICKS_OPT*sqrt( *frac ) );
- if( n < 5 ) n = 5;
-
-/* Choose a gap size which makes this many gaps. */
- gaps[ j ] = pow( maxv/minv, 1.0/( n - 1.0 ) );
- }
- }
- }
-
-/* Annul the PointSet holding Graphics coordinates. */
- pset1 = astAnnul( pset1 );
-
-/* If an error has occurred, annul the PointSet holding physical
- coordinates, and return gaps of 1.0. */
- if( !astOK ) {
- pset2 = astAnnul( pset2 );
- gaps[ 0 ] = 1.0;
- gaps[ 1 ] = 1.0;
- ngood[ 0 ] = 0;
- ngood[ 1 ] = 0;
- *frac = 0.0;
- *inval = 0;
- }
-
-/* Return the physical PointSet. */
- return pset2;
-
-}
-
-static void DrawAxis( AstPlot *this, TickInfo **grid, double *labelat,
- double *gap, const char *method, const char *class, int *status ){
-/*
-*
-* Name:
-* DrawAxis
-
-* Purpose:
-* Draw a curve joining the major tick marks.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void DrawAxis( AstPlot *this, TickInfo **grid, double *labelat,
-* double *gap, const char *method, const char *class, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function draws a curve through interior tick marks on both axes.
-* The curve is drawn even if it has already been drawn as part of a
-* grid of curves, because it may have been assigned different graphics
-* attributes to the grid curves.
-
-* Parameters:
-* this
-* A pointer to the Plot.
-* grid
-* A pointer to an array of two TickInfo pointers (one for each axis),
-* each pointing to a TickInfo structure holding information about
-* tick marks on the axis. See function GridLines.
-* labelat
-* A pointer to a 2 element array giving the constant axis values at
-* which tick marks are put. Element 0 should give the axis 1 value at
-* which tick marks for axis 0 are placed. Element 1 should give the
-* axis 0 value at which tick marks for axis 1 are placed.
-* gap
-* Pointer to array of two values holding the gap between major
-* tick marks on the two axes.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function assumes the current Frame of the Plot is 2
-* dimensional, and it should not be called if this is not the case.
-
-*/
-
-/* Local Variables: */
- AstFrame *frm; /* Pointer to current Frame */
- AstPlotCurveData cdata;/* Somewhere to put the unneeded curve information */
- TickInfo *info; /* Pointer to the TickInfo for the current axis */
- double *value; /* Current tick value */
- double bot; /* Lowest axis value to be displayed */
- double diff; /* Difference between adjacent tick marks */
- double udiff; /* Used section length */
- double start[ 2 ]; /* The start of the curve in physical coordinates */
- double tmp; /* Temporary storage */
- double top; /* Highest axis value to be displayed */
- int axis; /* Current axis index */
- int axisid; /* ID value for current axis plotting attributes */
- int logticks; /* Are major ticks spaced logarithmically? */
- int tick; /* Current tick index */
-
-/* Check the global status. */
- if( !astOK ) return;
-
-/* Not the id value for the first axis. */
- axisid = AST__AXIS1_ID;
-
-/* Get a pointer to the current Frame. */
- frm = astGetFrame( this, AST__CURRENT );
-
-/* Consider drawing a curve parallel to each axis in turn. */
- for( axis = 0; axis < 2; axis++ ){
-
-/* Establish the correct graphical attributes for this axis as defined by
- attributes with the supplied Plot. */
- astGrfAttrs( this, axisid, 1, GRF__LINE, method, class );
-
-/* Check the axis is required. */
- if( astGetDrawAxes( this, axis ) ){
-
-/* If the tick marks have been placed round the edges of the plotting
- area, we do not need to draw the curves. */
- if( labelat[ axis ] != AST__BAD ){
-
-/* Get the max and min values allowed on this axis. */
- bot = astGetBottom( frm, axis );
- top = astGetTop( frm, axis );
- if( bot > top ) {
- tmp = top;
- top = bot;
- bot = tmp;
- }
-
-/* Get a pointer to the structure containing information describing the
- positions of the major tick marks along the current axis. */
- info = grid[ axis ];
-
-/* Get a pointer to the axis value at the first major tick mark. */
- value = info->ticks;
-
-/* See if the major tick marks are logarithmically spaced on this axis. */
- logticks = astGetLogTicks( this, axis );
-
-/* Initialise the difference between major tick marks. */
- diff = logticks ? 0.0 : gap[ axis ];
-
-/* Loop round all ticks. */
- for( tick = 0; tick < info->nmajor; tick++, value++ ){
-
-/* Update the difference between major tick marks if we are producing
- logarithmically spaced ticks (in which "gap" is a ratio, not a
- difference). */
- if( logticks ) diff = (*value)*( gap[ axis ] - 1.0 );
-
-/* Note the starting point for this section. */
- start[ axis ] = *value;
- start[ 1 - axis ] = labelat[ axis ];
-
-/* If this is the first tick, draw an axis section going "backwards" in
- case the first tick isn't at the lower visible bound. Limit the length
- of this backwards section so that it does not extend beyond the minimum
- axis value. */
- if( tick == 0 ) {
- udiff = *value - bot;
- if( udiff > diff ) udiff = diff;
- if( udiff > 0.0 ) {
- AxPlot( this, axis, start, -udiff, 1, &cdata, method,
- class, status );
- }
- }
-
-/* Limit the length of the section so that it does not extend beyond the
- maximum axis value. */
- udiff = ( *value + diff > top ) ? top - *value : diff;
-
-/* Do not draw zero length sections. */
- if( udiff > 0.0 ) {
-
-/* Draw a curve parallel to the current axis, starting at the tick mark,
- with length equal to the gap between tick marks. Do not draw sections
- of the curve which are outside the primary domains of the physical axes. */
- AxPlot( this, axis, start, udiff, 1, &cdata, method,
- class, status );
- }
-
- }
-
-/* Once the last section has been drawn, draw another axis section in case the
- last tick isn't at the upper visible bound. Limit the length of this
- section so that it does not extend beyond the maximum axis value. */
- udiff = top - start[ axis ];
- if( udiff > diff ) udiff = diff;
- if( udiff > 0.0 ) {
- AxPlot( this, axis, start, udiff, 1, &cdata, method,
- class, status );
- }
- }
- }
-
-/* Re-establish the original graphical attributes. */
- astGrfAttrs( this, axisid, 0, GRF__LINE, method, class );
-
-/* Set up the id value for the next axis. */
- axisid = AST__AXIS2_ID;
-
- }
-
-/* Free the pointer to the current Frame. */
- frm = astAnnul( frm );
-
-}
-
-
-static AstPlotCurveData **DrawGrid( AstPlot *this, TickInfo **grid, int drawgrid,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* DrawGrid
-
-* Purpose:
-* Draw a grid of lines at the major tick mark positions on both axes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* AstPlotCurveData **DrawGrid( AstPlot *this, TickInfo **grid, int drawgrid,
-* const char *method, const char *class )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-* This function draw a grid of curves at the major tick mark
-* positions on both axes, and returns information describing the
-* breaks in the curves. If short tick marks are required rather
-* than long curves (as specified by the Grid attribute of the supplied
-* Plot), then the curves are not drawn but the break information is
-* still returned.
-
-* Parameters:
-* this
-* Pointer to a Plot.
-* grid
-* A pointer to an array of two pointers (one for each axis), each
-* pointing to a TickInfo structure. These describe the positions
-* of the tick marks and should have been produced by function
-* GridLines.
-* drawgrid
-* If non-zero, draw a grid of curves marking the major axis
-* values. Otherwise, tick marks will be drawn at these values later.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-
-* Returned Value:
-* A pointer to an array of two AstPlotCurveData pointers (one for each axis),
-* each pointing to an array of AstPlotCurveData structures (one for each tick
-* value).
-
-* Notes:
-* - This function assumes that the physical coordinate system is 2
-* dimensional, and it should not be used if this is not the case.
-* - If an error has already occurred, or if this function should fail
-* for any reason, then a NULL pointer is returned.
-
-*/
-
-/* Local Variables: */
- AstPlotCurveData **cdata;/* The returned pointer */
- AstPlotCurveData *cdt; /* Pointer to break info. for current tick mark */
- AstPlotCurveData tcdt; /* Pointer to break info. for current curve section */
- TickInfo *info; /* Tick mark information for a single axis */
- double start[ 2 ]; /* Strting position for current curve section */
- double total_length; /* Total curve length for all axis ticks */
- int i; /* Axis index */
- int j; /* Tick mark index */
- int k; /* Curve section index */
-
-/* Check the global status. */
- if( !astOK ) return NULL;
-
-/* Allocate memory to hold two pointers, each pointing to an array of
- AstPlotCurveData structure. */
- cdata = (AstPlotCurveData **) astMalloc( 2*sizeof( AstPlotCurveData *) );
-
-/* If succesful, initialise the pointers. */
- if( astOK ){
- cdata[ 0 ] = NULL;
- cdata[ 1 ] = NULL;
-
-/* Draw the curves marking the major tick values on each axis. If no grid is
- required, we still do this in order to get information about the breaks
- in the curves which will be used later to decide where to put the labels,
- but we use "invisible ink". */
- for( i = 0; i < 2; i++ ){
-
-/* Get a pointer to the TickInfo structure for this axis holding information
- about where to put tick marks on this axis. */
- info = grid[ i ];
-
-/* Allocate memory to hold information describing the breaks in each tick
- mark curve. This takes the form of an array of AstPlotCurveData structures,
- one for each tick mark. */
- cdata[ i ] = (AstPlotCurveData *) astMalloc( sizeof(AstPlotCurveData)*
- (size_t) info->nmajor );
-
-/* Check the pointer can be used. */
- if( astOK ){
-
-/* Initialise a pointer to the first AstPlotCurveData structure for this axis. */
- cdt = cdata[ i ];
- total_length = 0.0;
-
-/* Do each tick mark. */
- for( j = 0; j < info->nmajor; j++ ){
-
-/* Store the starting point of the first section of the curve. */
- start[ i ] = (info->ticks)[ j ];
- start[ 1 - i ] = (info->start)[ 0 ];
-
-/* Draw the first section of the curve parallel to the other axis, starting
- at the values in "start", and extending for a length given in the TickInfo
- structure. We use invisible ink if short tick marks are required instead
- of a grid of curves. */
- AxPlot( this, 1 - i, start, (info->length)[ 0 ],
- drawgrid, cdt, method, class, status );
-
-/* Now draw any other sections in the curve. */
- for( k = 1; k < info->nsect; k++ ){
-
-/* Modify the starting value on the other axis. The starting value on
- the current axis remains set to the tick mark value. */
- start[ 1 - i ] = (info->start)[ k ];
-
-/* Draw the curve, the information describing the breaks goes into
- temporary storage in the local structure "tcdt". */
- AxPlot( this, 1 - i, start, (info->length)[ k ],
- drawgrid, &tcdt, method, class, status );
-
-/* Concatenate the break information for this section with the break
- information describing the previous sections. */
- AddCdt( cdt, &tcdt, method, class, status );
-
- }
-
-/* Increment the total length of curves drawn for all ticks on this axis. */
- total_length += cdt->length;
-
-/* Point to the AstPlotCurveData structure for the next tick mark. */
- cdt++;
-
- }
-
-/* Report an error if the total length of all curves on this axis is zero.
- This can be caused for instance by bugs in the algorithm for finding
- major tick values (which may cause AST__BAD tick mark values). */
- if( total_length == 0.0 && astOK ) {
- astError( AST__INTER, "%s(%s): No grid curves can be drawn for "
- "axis %d.", status, method, class, i + 1 );
- }
-
- }
-
- }
-
- }
-
-/* If an error has occurred, clean up the returned structures. */
- if( !astOK ) cdata = CleanCdata( cdata, status );
-
-/* Return. */
- return cdata;
-
-}
-
-static void DrawText( AstPlot *this, int ink, int esc, const char *text,
- float x, float y, const char *just, float upx,
- float upy, float *xbn, float *ybn, float *drop,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* DrawText
-
-* Purpose:
-* Draw a character string, potentially including superscripts and
-* subscripts.
-
-* Synopsis:
-* #include "plot.h"
-* void DrawText( AstPlot *this, int ink, int esc, const char *text,
-* float x, float y, const char *just, float upx,
-* float upy, float *xbn, float *ybn, float *drop,
-* const char *method, const char *class, int *status )
-
-* Description:
-* This function displays a character string at a given position
-* using a specified up-vector, optionally interpreting any Plot escape
-* sequences contained within the text. It also returns its bounding
-* box.
-
-* Parameters:
-* this
-* The plot.
-* ink
-* If zero, nothing is drawn but the bounding box is still returned.
-* esc
-* Should escape sequences be interpreted? They will be printed
-* literally otherwise.
-* text
-* Pointer to a null-terminated character string to be displayed.
-* x
-* The graphics X coordinate of the label's reference point.
-* y
-* The graphics Y coordinate of the label's reference point.
-* just
-* Pointer to a null-terminated character string identifying the
-* reference point for the text being drawn. The first character in
-* this string identifies the reference position in the "up" direction
-* and may be "M", "B", "C" or "T" (for bottom, baseline, centre or
-* top). The second character identifies the side-to-side reference
-* position and may be "L", "C" or "R" (for left, centre or right). The
-* string is case-insensitive, and only the first two characters are
-* significant.
-* upx
-* The x component of the up-vector for the text. Positive values
-* always refer to displacements from left to right on the screen,
-* even if the graphics x axis increases in the opposite sense.
-* upy
-* The y component of the up-vector for the text. Positive values
-* always refer to displacements from left to right on the screen,
-* even if the graphics y axis increases in the opposite sense.
-* xbn
-* An array in which is returned the x coordinates at the corners
-* of the bounding box. The order is: bottom left, top left, top
-* right, bottom right.
-* ybn
-* An array in which is returned the Y coordinates at the corners
-* of the bounding box (see xbn).
-* drop
-* Address of a float in which to return the distance between the
-* bottom of the bounding box and the baseline of normal text. May
-* be NULL.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The "B" option for the justification in the "up" direction refers
-* to the base-line on which the text is written. Some characters
-* ("y", "p", "g", etc) descend below this line. In addition, if the
-* supplied text string includes any escape sequences which produce
-* sub-scripts, then these will also descend below the base-line. To
-* justify the bottom of the entire string (instead of just the
-* base-line), specify "M" instead of "B" in the justification string.
-* - See function astFindEscape for details of the supported escape
-* sequences.
-*/
-
-
-/* Local Variables: */
- astDECLARE_GLOBALS
- char *a;
- char *lt;
- char cc;
- const char *lj;
- double ncol;
- double nfont;
- double nsize;
- double nstyle;
- double nwidth;
- float alpha_hi;
- float alpha_lo;
- float beta_lo;
- float beta_hi;
- float cy;
- float cx;
- float dy;
- float dx;
- float height;
- float hmx;
- float hmy;
- float ly;
- float lx;
- float rx;
- float rlen;
- float rise;
- float rxu;
- float ryu;
- float ry;
- float tdrop;
- float tybn[ 4 ];
- float txbn[ 4 ];
- float ulen;
- float uyu;
- float uxu;
- float uy;
- float ux;
- float width;
- float x0;
- float y0;
- int estype;
- int esval;
- int got_esc;
- int grfcap;
- int i;
- int nc;
-
-/* Check the global error status, and that we have something to plot, and
- the reference position is good, and that the up vector is not zero. */
- if ( !astOK || !text || !text[ 0 ] || x == AST__BAD || y == AST__BAD ||
- ( upx == 0.0 && upy == 0.0 ) ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* Initialise variables to avoid compiler warnings. */
- rx = 0.0f;
- ry = 0.0f;
- x0 = 0.0f;
- y0 = 0.0f;
-
-/* Get an up vector which refers to the graphics coordinates in their correct
- senses (the supplied values are reversed if the corresponding axis is
- reversed). */
- ux = ( this->xrev ) ? -upx : upx;
- uy = ( this->yrev ) ? -upy : upy;
-
-/* Find a vector which points from left to right along the text
- baseline, taking account of any difference in the scales of the x
- and y axes (is possible). This also scales the up vector so that it
- has a length equal to the height of normal text, and scales the right
- vector to have the same length (on the screen) as the up vector. */
- RightVector( this, &ux, &uy, &rx, &ry, method, class, status );
-
-/* Create a unit right vector. */
- rlen = sqrt( rx*rx + ry*ry );
- rxu = rx/rlen;
- ryu = ry/rlen;
-
-/* Create a unit up vector. */
- ulen = sqrt( ux*ux + uy*uy );
- uxu = ux/ulen;
- uyu = uy/ulen;
-
-/* Some older GRF modules cannot plot strings with vertical justification
- of "M". Check the capabilities of the grf module, and, if necessary,
- modify the justification and the coords of the reference point to use
- "B" instead of "M". This call also returns us the coords at the left
- end of the baseline of normal text. */
- lx = x;
- ly = y;
- lj = JustMB( this, esc, text, &lx, &ly, upx, upy, just, uxu, uyu, rxu,
- ryu, &x0, &y0, method, class, status );
-
-/* Initialise the horizontal and verical limits of the total bounding box. */
- alpha_lo = FLT_MAX;
- alpha_hi = -FLT_MAX;
- beta_lo = FLT_MAX;
- beta_hi = -FLT_MAX;
-
-/* Tell the grf module whether or not to interpret escape sequences,and
- also note if the grf module is capable of interpreting escape
- sequences. */
- grfcap = GCap( this, GRF__ESC, esc, status );
-
-/* Forget the horizontal position remembered by any "%h+" escape sequences
- from any previous string. */
- this->hmarkx = FLT_MAX;
- this->hmarky = FLT_MAX;
-
-/* If escape sequences are being interpreted and the string contains some
- escape sequences, but the grf module cannot interpret escape sequences,
- split the supplied text up into sub-strings delimited by escape sequences
- and plot each sub-string individually, modifying the reference point and
- graphics attributes as indicated by the escape sequences. */
- if( esc && HasEscapes( text, status ) && !grfcap ) {
-
-/* Take a copy of the supplied text so that we can temporarily terminate
- each sub-string by poking a null (0) character into it. */
- lt = (char *) astStore( NULL, (void *) text, strlen( text ) + 1 );
-
-/* Indicate that the current baseline is at its normal height. */
- rise = 0.0;
-
-/* Get the graphical attribute values for normal text. */
- GAttr( this, GRF__SIZE, AST__BAD, &nsize, GRF__TEXT, method, class, status );
- GAttr( this, GRF__WIDTH, AST__BAD, &nwidth, GRF__TEXT, method, class, status );
- GAttr( this, GRF__FONT, AST__BAD, &nfont, GRF__TEXT, method, class, status );
- GAttr( this, GRF__STYLE, AST__BAD, &nstyle, GRF__TEXT, method, class, status );
- GAttr( this, GRF__COLOUR, AST__BAD, &ncol, GRF__TEXT, method, class, status );
-
-/* The "concatenation point" (cx,cy) is the point where the normal baseline
- crosses the left hand edge of the substring bounding box. Initialise
- this to the left edge of the first substring. */
- cx = x0;
- cy = y0;
-
-/* Loop round the whole string, drawing each sub-string. */
- a = lt;
- while( *a ) {
-
-/* Examine the start of the remaining string and note if it begins with
- an escape sequence. If so, the type and value of the escape sequnece
- is returned. In either case the number of characters to the next
- delimiter is returned. */
- got_esc = astFindEscape( a, &estype, &esval, &nc );
-
-/* If the string starts with an escaped percent sign, modify things so that
- we can draw the percent sign with the normal text drawing code below. */
- if( got_esc && estype == GRF__ESPER ) {
- got_esc = 0;
- a++;
- nc = 1;
- }
-
-/* If the string starts with any other escape sequence, modify the graphics
- attributes and concatenation point as required by the escape sequence. */
- if( got_esc ) {
- InterpEscape( this, estype, (double) esval, &cx, &cy, ux, uy,
- rx, ry, lj, &rise, nsize, nstyle, nwidth, ncol,
- nfont, method, class, status );
-
-/* If the remaining string starts with normal text, draw it. */
- } else {
-
-/* Temporarily terminate the sub-string which ends with the next escape
- sequence. */
- cc = a[ nc ];
- a[ nc ] = 0;
-
-/* We now have to decide on the reference point for this sub-string. If
- the justification is "BL" then the reference point is just the current
- concatenation point. */
- if( lj[ 0 ] == 'B' && lj[ 1 ] == 'L' ) {
- lx = cx;
- ly = cy;
-
-/* Otherwise, the reference point is offset from the concatenation point.
- It would be simpler to draw all substrings with "BL" justification but
- this causes problems with some grf modules (such as GAIA) which zoom
- the display by modifying the position of text strings without also
- modifying the size of text strings. Using the correct reference point
- for all sub-strings minimises the drift which occurs when such a grf
- modules zooms the display. */
- } else {
-
-/* Find the width and height of this substring, and the distance between the
- bottom of the bounding box and the baseline (the drop). We do this
- by calling this function recursively, using "BL" justification to
- avoid infinite recursion. */
-
-/* Forget the horizontal position remembered by any "%h+" escape sequences
- from any previous string. Save and re-instate the position of the
- horizontal mark since the call to DrawText may change it. */
- hmx = this->hmarkx;
- hmy = this->hmarky;
-
- DrawText( this, 0, esc, a, cx, cy, "BL", upx, upy, txbn, tybn,
- &tdrop, method, class, status );
-
- this->hmarkx = hmx;
- this->hmarky = hmy;
-
- dx = txbn[ 0 ] - txbn[ 3 ];
- dy = tybn[ 0 ] - tybn[ 3 ];
- width = sqrt( dx*dx + dy*dy );
-
- dx = txbn[ 0 ] - txbn[ 1 ];
- dy = tybn[ 0 ] - tybn[ 1 ];
- height = sqrt( dx*dx + dy*dy );
-
-/* First move right from the concatenation point by a fraction of the width
- of the substring (0.5 for "C" and 1.0 for "R"). */
- if( lj[ 1 ] == 'C' ) {
- width *= 0.5;
- } else if( lj[ 1 ] != 'R' ) {
- width = 0;
- }
- lx = cx + rxu*width;
- ly = cy + ryu*width;
-
-/* Now move vertically by an amount which produes the requested vertical
- justification. */
- if( lj[ 0 ] == 'T' ) {
- height -= tdrop;
- lx += height*uxu;
- ly += height*uyu;
-
- } else if( lj[ 0 ] == 'C' ) {
- height = 0.5*height - tdrop;
- lx += height*uxu;
- ly += height*uyu;
-
- } else if( lj[ 0 ] == 'M' ) {
- lx -= tdrop*uxu;
- ly -= tdrop*uyu;
- }
- }
-
-/* Draw it, and then find its real bounding box (i.e. using the correct
- reference position found above). */
- if( ink ) GText( this, a, lx, ly, lj, upx, upy, method, class, status );
- GTxExt( this, a, lx, ly, lj, upx, upy, txbn, tybn, method, class, status );
-
-/* Re-instate the orignal value of the terminator character.*/
- a[ nc ] = cc;
-
-/* Move the concatenation point to the right (i.e. in the direction of the text
- baseline) by an amount equal to the width of the bounding box. Also
- update the total bounding box limits.*/
- UpdateConcat( txbn, tybn, ux, uy, rx, ry, &cx, &cy,
- x0, y0, &alpha_lo, &alpha_hi, &beta_lo, &beta_hi, status );
- }
-
-/* Move on to the next character. */
- a += nc;
- }
-
-/* Free resources. */
- lt = astFree( lt );
-
-/* Reset all attributes to their normal values. */
- GAttr( this, GRF__SIZE, nsize, NULL, GRF__TEXT, method, class, status );
- GAttr( this, GRF__WIDTH, nwidth, NULL, GRF__TEXT, method, class, status );
- GAttr( this, GRF__COLOUR, ncol, NULL, GRF__TEXT, method, class, status );
- GAttr( this, GRF__FONT, nfont, NULL, GRF__TEXT, method, class, status );
- GAttr( this, GRF__STYLE, nstyle, NULL, GRF__TEXT, method, class, status );
-
-/* If any escape sequences can be interpreted by the grf module, just pass
- the text string on to the grf module. */
- } else {
- if( ink ) GText( this, text, lx, ly, lj, upx, upy, method, class, status );
- GTxExt( this, text, lx, ly, lj, upx, upy, txbn, tybn, method, class, status );
-
-/* The corners in the bounding box returned by GTxExt are in no
- particular order. But this function is contracted to return them
- in a specified order. So we use UpdateConcat to find the verical and
- horizontal limits of the box in a form which can be used to produce
- the correct order. UpdateConcat will also update the concatenation point,
- but that is irrelevant in this context. */
- UpdateConcat( txbn, tybn, ux, uy, rx, ry, &lx, &ly, x0, y0, &alpha_lo,
- &alpha_hi, &beta_lo, &beta_hi, status );
- }
-
-/* Return the total bounding box,in the order bottom left, topleft, top
- right, bottom right. */
- xbn[ 0 ] = x0 + alpha_lo*ux + beta_lo*rx;
- ybn[ 0 ] = y0 + alpha_lo*uy + beta_lo*ry;
-
- xbn[ 1 ] = x0 + alpha_hi*ux + beta_lo*rx;
- ybn[ 1 ] = y0 + alpha_hi*uy + beta_lo*ry;
-
- xbn[ 2 ] = x0 + alpha_hi*ux + beta_hi*rx;
- ybn[ 2 ] = y0 + alpha_hi*uy + beta_hi*ry;
-
- xbn[ 3 ] = x0 + alpha_lo*ux + beta_hi*rx;
- ybn[ 3 ] = y0 + alpha_lo*uy + beta_hi*ry;
-
-/* Return the drop. */
- if( drop ) *drop = -alpha_lo*ulen;
-
-/* Free memory.*/
- lj = astFree( (void *) lj );
-
-/* If OK, update the box containing all drawn graphics primitives. */
- if( ink && astOK && !Boxp_freeze ) {
- for( i = 0; i < 4; i++ ){
- Boxp_lbnd[ 0 ] = MIN( xbn[ i ], Boxp_lbnd[ 0 ] );
- Boxp_ubnd[ 0 ] = MAX( xbn[ i ], Boxp_ubnd[ 0 ] );
- Boxp_lbnd[ 1 ] = MIN( ybn[ i ], Boxp_lbnd[ 1 ] );
- Boxp_ubnd[ 1 ] = MAX( ybn[ i ], Boxp_ubnd[ 1 ] );
- }
- }
-}
-
-static void DrawTicks( AstPlot *this, TickInfo **grid, int drawgrid,
- double *labelat, double *gap, const char *method,
- const char *class, int *status ){
-/*
-*
-* Name:
-* DrawTicks
-
-* Purpose:
-* Draw tick marks for a 2-D annotated coordinate grid.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void DrawTicks( AstPlot *this, TickInfo **grid, int drawgrid,
-* double *labelat, double *gap, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function draws major and minor tick marks. It uses a different
-* technique depending on whether the tick marks are to be put along the
-* edges of the plotting area, or along a curve through the middle of the
-* plotting area. The physical axis values at which to put tick marks
-* are supplied in parameter "grid".
-*
-* If the ticks are placed on the edges of the plotting area, The
-* EdgeCrossings function is used to find all points along the edge which
-* have a physical axis value correspoinding to a tick value (there can in
-* general be more than one point on an edge with a given physical axis
-* value). Ticks are put at all such crossings.
-*
-* If ticks are placed within the plotting area, then they are put
-* along a curve defined by the "other axis" values supplied in
-* parameter "labelat".
-
-* Parameters:
-* this
-* A pointer to the Plot.
-* grid
-* A pointer to an array of two TickInfo pointers (one for each axis),
-* each pointing to a TickInfo structure holding information about
-* tick marks on the axis. See function GridLines.
-* drawgrid
-* If non-zero, then a grid of curves has been drawn to mark the
-* major axis values.
-* labelat
-* A pointer to a 2 element array in holding the constant axis
-* values at which tick marks are to be put. Element 0 should hold
-* the axis 1 value at which tick marks for axis 0 are placed. Element
-* 1 should hold the axis 0 value at which tick marks for axis
-* 1 are placed. If ticks are to be placed round the edges of the
-* plotting zone instead of within the plotting zone, then values of
-* AST__BAD should be supplied.
-* gap
-* Pointer to array of two values holding the gap between major
-* tick marks on the two axes. This will be the difference between,
-* or the ratio of, adjacent tick mark values, depending on the
-* setting of the LogTicks attribute.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function assumes the current Frame of the Plot is 2
-* dimensional, and it should not be called if this is not the case.
-*/
-
-/* Local Variables: */
- AstFrame *frame; /* Pointer to current Frame in Plot */
- AstMapping *mapping; /* Pointer to graphics->physical Mapping */
- AstPointSet *pset1; /* Pointer to PointSet holding physical coords. */
- AstPointSet *pset2; /* Pointer to PointSet holding graphics coords. */
- AstPointSet *pset3; /* Pointer to PointSet holding clipped graphics coords. */
- EdgeCrossingsStatics *ecstatics = NULL; /* For static data structure */
- TickInfo *info; /* Pointer to the TickInfo for the current axis */
- double *ptr1[2]; /* Pointer to physical data */
- double **ptr2; /* Pointer to graphics data */
- double **ptr3; /* Pointer to clipped graphics data */
- double *a; /* Pointer to next current axis value */
- double *b; /* Pointer to next other axis value */
- double *value; /* Current tick value */
- double *x; /* Pointer to next X value */
- double *xc; /* Pointer to next clipped X value */
- double *y; /* Pointer to next Y value */
- double *yc; /* Pointer to next clipped Y value */
- double a0; /* Physical axis value at base of tick */
- double axmax; /* Upper axis limit */
- double axmin; /* Lower axis limit */
- double delta1; /* Increment between minor ticks above major tick */
- double delta2; /* Increment between minor ticks below major tick */
- double diff; /* Difference between adjacent major ticks */
- double dl2; /* Squared increment between points */
- double dl2_limit; /* Minimum usable squared increment between points */
- double dl; /* Increment between points */
- double dx; /* X component of increment along tick mark */
- double dy; /* Y component of increment along tick mark */
- double ex; /* X component of increment between points */
- double ey; /* Y component of increment between points */
- double lblat2; /* Other axis value part way up each tick */
- double lblat; /* Other axis value at base of each tick */
- double mindim; /* Shortest dimension of plotting area */
- double minval; /* Current axis value at next minor tick */
- double mjsign; /* Sign of the major tick mark length */
- double mjtklen; /* Length of major tick marks */
- double mnsign; /* Sign of the minor tick mark length */
- double mntklen; /* Length of minor tick marks */
- double ux; /* X component of unit vector along tick mark */
- double uy; /* Y component of unit vector along tick mark */
- double val; /* Major axis value */
- double x0; /* X at base of tick */
- double x1; /* X at end of tick */
- double x2; /* Clipped X at base of tick */
- double y0; /* Y at base of tick */
- double y1; /* Y at end of tick */
- double y2; /* Clipped Y at base of tick */
- int *majflag; /* Pointer to next major/minor flag */
- int *majflags; /* Pointer to aray of major/minor flags */
- int axis; /* Current axis index */
- int ed; /* Doing a secondary edge? */
- int edge; /* Index of edge being ticked */
- int first; /* Is this the first tick to be drawn? */
- int gelid; /* ID for next graphical element to be drawn */
- int i; /* Minor tick mark index */
- int logticks; /* Are major tick marks logarithmically spaced? */
- int minhi; /* Highest minor tick mark index */
- int minlo; /* Lowest minor tick mark index */
- int nedge; /* No. of edges to be ticked for each axis */
- int nel; /* Actual number of tick marks to draw */
- int ntot; /* Maximum number of tick marks */
- int tick; /* Tick index */
- int lasttick; /* Index of last major tick mark */
-
-/* Check the global status. */
- if( !astOK ) return;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- a = NULL;
- delta1 = 0.0;
- delta2 = 0.0;
- lblat2 = 0.0;
- uy = 0.0;
- logticks = 0;
-
-/* Get the minimum dimension of the plotting ares. */
- mindim = MIN( this->xhi - this->xlo, this->yhi - this->ylo );
-
-/* Information about the drawn tick marks is saved in the Plot structure.
- Reset this information now so that we are ready to store information
- about the new ticks that will be drawn by this function invocation. */
- SaveTick( this, -1, 0.0, 0.0, 0, status );
-
-/* If ticks are to be put round the edges of the plotting area... */
-/* ============================================================== */
- if( labelat[ 0 ] == AST__BAD || labelat[ 1 ] == AST__BAD ){
-
-/* Store the number of edges to be ticked for each axis. */
- nedge = astGetTickAll( this )? 2 : 1;
-
-/* Do each required edge. */
- for( ed = 0; ed < nedge; ed++ ){
-
-/* Initialize the id value for graphical element being drawn. */
- gelid = AST__TICKS1_ID;
-
-/* Do each axis. */
- for( axis = 0; axis < 2; axis++ ){
-
-/* Establish the correct graphical attributes as defined by attributes
- with the supplied Plot. */
- astGrfAttrs( this, gelid, 1, GRF__LINE, method, class );
-
-/* Store the length in graphics coordinates of major tick marks for this
- axis. Use a default of zero if a grid has been drawn. */
- if( astTestMajTickLen( this, axis ) || !drawgrid ){
- mjtklen = astGetMajTickLen( this, axis )*mindim;
- } else {
- mjtklen = 0.0;
- }
-
-/* Store the length in graphics coordinates of minor tick marks. */
- mntklen = astGetMinTickLen( this, axis )*mindim;
-
-/* Get the edge to be labelled with the axis values. Edge 0 is the left hand
- edge. Edge 1 is the top edge. Edge 2 is the right-hand edge. Edge 3 is
- the bottom edge. */
- edge = ( astGetEdge( this, axis ) + ed*2 ) % 4;
- if( edge < 0 ) edge = -edge;
-
-/* Store a pointer to the structure containing information describing the
- positions of the major tick marks along this axis. */
- info = grid[ axis ];
-
-/* Store a pointer to the axis value at the first major tick mark. */
- value = info->ticks;
-
-/* Minor tick marks are drawn on both sides of each major tick mark. They
- are identified by an index number relative to major tick mark at zero.
- Store the indicies of the first and last minor tick marks. */
- minlo = ( 1 - info->nminor )/2;
- minhi = info->nminor/2;
-
-/* If major ticks are linear, store the difference between minor tick marks.
- This value will be the same for all major ticks. */
- logticks = astGetLogTicks( this, axis );
- if( !logticks ) {
- delta1 = gap[ axis ]/(double)info->nminor;
- delta2 = delta1;
- }
-
-/* Loop round until all ticks have been done. */
- for( tick = 0; tick < info->nmajor; tick++ ){
-
-/* Draw tick marks at all occurrences of the current major tick value on
- the selected edge of the plotting area. */
- Ticker( this, edge, axis, *value, gap, mjtklen,
- 1, ( ed == 0 ), &ecstatics, method, class, status );
-
-/* If minor tick mark values were not supplied, calculate them as even
- intervals between the major tick values. */
- if( !info->minticks ) {
-
-/* If major ticks are logarithmic, store the difference between minor tick
- marks. This value will be different for each major tick. Also, since
- the minor ticks are drawn on either side of the major tick, the minor
- tick spacing above the major tick will be different to that below the
- minor tick when using logarathmic ticks. "delta1" is the minor gap
- above the major value, and "delta2" is the minor gap below the major
- value. */
- if( logticks ) {
- delta1 = (*value) * ( gap[ axis ] - 1.0 )/
- (double)info->nminor;
- delta2 = delta1 / gap[ axis ];
- }
-
-/* Extra minor tick marks are drawn below the first major tick mark and
- above the last major tick mark to fill in any gaps caused by axis
- limits being exceeded. */
- if( tick == 0 ) {
- minlo = 1 - info->nminor;
- } if( tick == 1 ) {
- minlo = ( 1 - info->nminor )/2;
- } else if( tick == info->nmajor - 1 ) {
- minhi = info->nminor - 1;
- }
-
-/* Store the axis value at the first minor tick mark. */
- minval = *value + minlo*delta2;
-
-/* Loop round all the minor tick marks, storing the physical coordinates
- defining the tick mark. */
- for( i = minlo; i <= minhi; i++ ){
-
-/* Draw tick marks at all occurrences of the current minor tick value on
- the selected edge of the plotting area. Do not do the minor tick mark
- with index zero, since this corresponds to the position of the major
- tick mark. */
- if( i ) Ticker( this, edge, axis, minval, gap, mntklen,
- 0, ( ed == 0 ), &ecstatics, method, class, status );
-
-/* Get the axis value at the next minor tick mark. */
- minval += ( i < 0 ) ? delta2 : delta1;
- }
- }
-
-/* Point to the next major tick value. */
- value++;
-
- }
-
-/* If minor tick mark values have been supplied, used them. */
- if( info->minticks ) {
- value = info->minticks;
- for( tick = 0; tick < info->nminor; tick++, value++ ){
- Ticker( this, edge, axis, *value, gap, mntklen, 0,
- ( ed == 0 ), &ecstatics, method, class, status );
- }
- }
-
-/* Re-establish the original graphical attributes. */
- astGrfAttrs( this, gelid, 0, GRF__LINE, method, class );
-
-/* Set up the id for the next graphical element to be drawn. */
- gelid = AST__TICKS2_ID;
- }
- }
-
-/* Free the static resources allocated within EdgeCrossings (called
- by Ticker). */
- (void) EdgeCrossings( NULL, 0, 0, 0.0, NULL, NULL, &ecstatics, method,
- class, status );
-
-/* If ticks are to put within the interior of the plotting area... */
-/* ============================================================== */
- } else {
-
-/* Get the mapping from base Frame (graphics coords) to current Frame
- (physical coords). */
- mapping = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Get the current Frame from the Plot. */
- frame = astGetFrame( this, AST__CURRENT );
-
-/* Initialize the id value for graphical element being drawn. */
- gelid = AST__TICKS1_ID;
-
-/* Do each axis. */
- for( axis = 0; axis < 2; axis++ ){
-
-/* Establish the correct graphical attributes as defined by attributes
- with the supplied Plot. */
- astGrfAttrs( this, gelid, 1, GRF__LINE, method, class );
-
-/* Store the length in graphics coordinates of major tick marks for this
- axis. Use a default of zero if a grid has been drawn. */
- if( astTestMajTickLen( this, axis ) || !drawgrid ){
- mjtklen = astGetMajTickLen( this, axis )*mindim;
- } else {
- mjtklen = 0.0;
- }
-
-/* Store the length in graphics coordinates of minor tick marks. */
- mntklen = astGetMinTickLen( this, axis )*mindim;
-
-/* Indicate that the tick mark lengths should not be negatated. */
- mjsign = 1.0;
- mnsign = 1.0;
-
-/* Store the smallest squared distance in graphics coordinates which
- can reliably be used to determine the direction of a tick mark. */
- dl2_limit = 0.0001*mindim;
- dl2_limit *= dl2_limit;
-
-/* Store a pointer to the structure containing information describing the
- positions of the major tick marks along this axis. */
- info = grid[ axis ];
-
-/* Store a pointer to the axis value at the first major tick mark. */
- value = info->ticks;
-
-/* Get the maximum number of tick marks to be drawn on this axis. */
- ntot = 0;
- ntot = info->nmajor;
- if( info->minticks ) {
- ntot += info->nmajor + info->nminor;
- } else {
- ntot += ( info->nmajor + 1 )*( info->nminor - 1 );
- }
-
-/* Pass on to the next axis if no ticks are to be drawn. */
- if( ntot ) {
-
-/* Allocate memory to hold the physical coordinates defining all the
- required tick marks. Each tick mark is defined by 2 points. */
- ptr1[ 0 ] = (double *) astMalloc( sizeof(double)*(size_t)(2*ntot) );
- ptr1[ 1 ] = (double *) astMalloc( sizeof(double)*(size_t)(2*ntot) );
-
-/* Allocate memory to hold a set of flags indicating whether each tick
- mark is minor or major. */
- majflags = (int *) astMalloc( sizeof(int)*(size_t)ntot );
-
-/* Check the pointers can be used. */
- if( astOK ){
-
-/* If the tick values have been supplied using astSetTickValues, just
- copy them into the above arrays. */
- if( info->minticks ) {
-
- a = ptr1[ axis ];
- b = ptr1[ 1 - axis ];
- majflag = majflags;
-
- for( tick = 0; tick <= info->nmajor; tick++ ){
-
- val = info->ticks[ tick ];
- if( logticks ) {
- diff = val * ( gap[ axis ] - 1.0 );
- lblat2 = labelat[ axis ] + 0.2*diff;
- } else {
- lblat2 = labelat[ axis ] + 0.2*gap[ 1 - axis ];
- }
-
- *(a++) = val;
- *(b++) = labelat[ axis ];
- *(a++) = val;
- *(b++) = lblat2;
- *(majflag++) = 1;
- }
-
- for( tick = 0; tick <= info->nminor; tick++ ){
-
- val = info->minticks[ tick ];
- if( logticks ) {
- diff = val * ( gap[ axis ] - 1.0 );
- lblat2 = labelat[ axis ] + 0.2*diff;
- } else {
- lblat2 = labelat[ axis ] + 0.2*gap[ 1 - axis ];
- }
-
- *(a++) = val;
- *(b++) = labelat[ axis ];
- *(a++) = val;
- *(b++) = lblat2;
- *(majflag++) = 0;
- }
-
-/* If the tick values were not supplied using astSetTickValues, then we
- need to calculate the minor tick positions explicitly. */
- } else {
-
-/* Store pointers to the next point on each axis. "a" always refers to the
- current axis. Also store the value on the other axis at which the tick
- marks starts, and another value on the other axis which is used to
- defined the tick mark directions. */
- a = ptr1[ axis ];
- b = ptr1[ 1 - axis ];
- majflag = majflags;
- lblat = labelat[ axis ];
-
-/* Store another value on the other axis which is used to defined the tick
- mark directions, and the difference between minor tick marks. For
- linearly spaced tick marks these values will be the same for all major
- ticks. Minor ticks are always drawn above the correponding major
- value (i.e. minlo == 1 ) and so we do not need to set delta2. */
- logticks = astGetLogTicks( this, axis );
- if( !logticks ) {
- lblat2 = labelat[ axis ] + 0.2*gap[ 1 - axis ];
- delta1 = gap[ axis ]/(double)info->nminor;
- }
-
-/* Store the indicies of the first and last minor tick marks, relative to
- a major tick mark. */
- minlo = 1;
- minhi = info->nminor - 1;
-
-/* Get the axis limits. */
- axmin = astGetBottom( frame, axis );
- axmax = astGetTop( frame, axis );
-
-/* Loop round until all ticks have been done. We include a hypothetical tick
- at index -1 (i.e. one gap below the first listed tick value) in order
- to get minor tick marks below the first major tick. But the
- hypothetical major tick value is not included in the list of major tick
- values to draw. */
- lasttick = info->nmajor - 1;
- for( tick = -1; tick <= lasttick; tick++ ){
-
-/* Get the major tick value. */
- if( tick == -1 ) {
- if( !logticks ) {
- val = (*value) - gap[ axis ];
- }else {
- val = (*value)/gap[ axis ];
- }
- } else {
- val = *(value++);
- }
-
-/* Now find the value on the other axis which is used to defined the tick
- mark directions, and the difference between minor tick marks, in the
- case of logarithmically spaced tick marks. These values will be
- different for every major tick. Minor ticks are always drawn above the
- correponding major value (i.e. minlo == 1 ) and so we do not need to set
- delta2. */
- if( logticks ) {
- diff = val * ( gap[ axis ] - 1.0 );
- lblat2 = labelat[ axis ] + 0.2*diff;
- delta1 = diff / (double)info->nminor;
- }
-
-/* If major tick marks are required, store the physical coordinates at the
- start of the major tick mark, and at a point a little way up the major
- tick mark. */
- if( tick > -1 ){
- *(a++) = val;
- *(b++) = lblat;
- *(a++) = val;
- *(b++) = lblat2;
- *(majflag++) = 1;
- }
-
-/* Store the points defining the minor tick marks on either side of
- this major tick mark. First store the axis value at the first minor
- tick mark. */
- minval = val + minlo*delta1;
-
-/* Loop round all the minor tick marks, storing the physical coordinates
- defining the tick mark. */
- for( i = minlo; i <= minhi; i++ ){
-
-/* Do not do the minor tick mark with index zero, since this corresponds
- to the position of the major tick mark. Do not do any minor ticks that
- are outside the axis range. */
- if( i && minval >= axmin && minval <= axmax ){
- *(a++) = minval;
- *(b++) = lblat;
- *(a++) = minval;
- *(b++) = lblat2;
- *(majflag++) = 0;
- }
-
-/* Get the axis value at the next minor tick mark. */
- minval += delta1;
- }
- }
- }
- }
-
-/* Adjust the size of the arrays to exclude any unused space. */
- nel = a - ptr1[axis];
- ptr1[axis] = (double *) astRealloc( (void *) ptr1[axis],
- sizeof(double)*nel );
- ptr1[1-axis] = (double *) astRealloc( (void *) ptr1[1-axis],
- sizeof(double)*nel );
-
-/* Create a pointset holding these coordinates. */
- pset1 = astPointSet( nel, 2, "", status );
- astSetPoints( pset1, ptr1 );
-
-/* Transform these physical coordinates into graphics coordinates, without
- doing any clipping (this is so that tick marks are still drawn even if
- they extend into the area containing clipped physical coordinates). */
- pset2 = astTransform( mapping, pset1, 0, NULL );
- ptr2 = astGetPoints( pset2 );
-
-/* Transform them again this time with clipping. */
- pset3 = Trans( this, NULL, mapping, pset1, 0, NULL, 0, method, class, status );
- ptr3 = astGetPoints( pset3 );
-
-/* Check the pointers can be used.*/
- if( astOK ){
-
-/* Store pointers to the next point on each axis. */
- a = ptr1[ axis ];
-
- x = ptr2[ 0 ];
- y = ptr2[ 1 ];
-
- xc = ptr3[ 0 ];
- yc = ptr3[ 1 ];
-
- majflag = majflags;
-
-/* Loop round all ticks (major and minor). */
- ux = AST__BAD;
- first = 1;
- for( tick = 0; tick < nel/2; tick++ ){
-
-/* Store the physical axis value at the base of the tick mark (skip over
- the physical axis value at the point up the tick mark). */
- a0 = *(a++);
- a++;
-
-/* Store the x and y coordinates at the base of the tick mark. */
- x0 = *(x++);
- y0 = *(y++);
-
-/* Store the x and y coordinates at a point up the tick mark. */
- x1 = *(x++);
- y1 = *(y++);
-
-/* Store the clipped x and y coordinates at the base of the tick mark. */
- x2 = *(xc++);
- y2 = *(yc++);
-
-/* Skip over the clipped x and y coordinates at the point up the tick mark. */
- xc++;
- yc++;
-
-/* Check they are all valid, and that the start of the tick mark is within
- the plotting area. */
- if( x0 != AST__BAD && y0 != AST__BAD &&
- x1 != AST__BAD && y1 != AST__BAD &&
- x2 != AST__BAD && y2 != AST__BAD &&
- x0 <= this->xhi && x0 >= this->xlo &&
- y0 <= this->yhi && y0 >= this->ylo ){
-
-/* Get the increments in X and Y beyween the two points, and the squared
- distance between the two points. */
- dx = x1 - x0;
- dy = y1 - y0;
- dl2 = dx*dx + dy*dy;
-
-/* Check the two points are not co-incident. */
- if( dl2 > dl2_limit ){
-
-/* Store the distance between the two points. */
- dl = sqrt( dl2 );
-
-/* If this is the first tick to be drawn on this axis, decide which
- direction to draw the tick mark so that they will appear on the right
- hand side of the axis as seen by someone moving along the axis in the
- positive direction (the numerical labels are also drawn on the same
- side). */
- if( first ){
- first = 0;
-
-/* If the next tick mark is not defined, make an arbitrary decision by
- leaving the sign of the tick mark length unchanged. */
- if( tick + 1 < nel/2 &&
- *x != AST__BAD && *y != AST__BAD &&
- a0 != AST__BAD && *a != AST__BAD ){
-
-/* Form the vector joining this tick mark to the next. */
- ex = *x - x0;
- ey = *y - y0;
-
-/* Ensure this vector is in the positive direction of the axis. */
- if( *a < a0 ) {
- ex = -ex;
- ey = -ey;
- }
-
-/* If a positive tick mark length would put the marks on the wrong side,
- negate the tick mark length. */
- if( ex*dy > ey*dx ){
- mjsign = -1.0;
- mnsign = -1.0;
- }
- }
- }
-
-/* Store the unit vector in the direction of the tick mark. This is used
- as the default vector for the next tick mark if the direction of the
- next tick mark is indeterminate. */
- ux = dx/dl;
- uy = dy/dl;
- }
-
-/* Only draw this tickmark if its direction is known. */
- if( ux != AST__BAD ) {
-
-/* Get the position of the end of the tick mark. The length of the tick
- mark depends on whether it is a major or minor tick mark. */
- if( *majflag ){
- x1 = x0 + mjsign*mjtklen*ux;
- y1 = y0 + mjsign*mjtklen*uy;
- } else {
- x1 = x0 + mnsign*mntklen*ux;
- y1 = y0 + mnsign*mntklen*uy;
- }
-
-/* Save and draw the tick mark. */
- SaveTick( this, axis, x0, y0, *majflag, status );
- if( x0 != x1 || y0 != y1 ) {
- Bpoly( this, (float) x0, (float) y0, method, class, status );
- Apoly( this, (float) x1, (float) y1, method, class, status );
- Opoly( this, method, class, status );
- }
- }
- }
-
-/* Point to the next major/minor flag. */
- majflag++;
- }
- }
-
-/* Free the memory holding the physical coordinates. */
- ptr1[ 0 ] = (double *) astFree( ( void *) ptr1[ 0 ] );
- ptr1[ 1 ] = (double *) astFree( ( void *) ptr1[ 1 ] );
- majflags = (int *) astFree( (void *) majflags );
-
-/* Annul the PointSets. */
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
- pset3 = astAnnul( pset3 );
- }
-
-/* Re-establish the original graphical attributes. */
- astGrfAttrs( this, gelid, 0, GRF__LINE, method, class );
-
-/* Set up the id for the next graphical element to be drawn. */
- gelid = AST__TICKS2_ID;
- }
-
-/* Annul the pointers to the Mapping and Frame. */
- mapping = astAnnul( mapping );
- frame = astAnnul( frame );
-
- }
-
-/* Return. */
- return;
-
-}
-
-static int EdgeLabels( AstPlot *this, int ink, TickInfo **grid,
- AstPlotCurveData **cdata, int force, const char *method,
- const char *class, int *status ){
-/*
-*
-* Name:
-* EdgeLabels
-
-* Purpose:
-* Attempts to display labels for the major tick values around the edges
-* of the plotting area.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int EdgeLabels( AstPlot *this, int ink, TickInfo **grid,
-* AstPlotCurveData **cdata, int force, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function determines how many major tick value labels could be
-* placed on the specified edges of the plotting area, and then if
-* requested, and if sufficient such labels are found (more than 3 on
-* each axis), they are drawn. To place a label on an edge, the curve
-* defining the major tick value must cross the edge at a reasonably
-* angle (at least 3 degrees). Labels are not drawn which would overlap
-* other, previously drawn, labels. A flag is returned indicating if
-* edge labels were (or could be) drawn.
-
-* Parameters:
-* this
-* A pointer to the Plot.
-* ink
-* If zero, then no labels are drawn, but the decision whether or
-* not to draw them is still made and indicated in the returned function
-* value.
-* grid
-* A pointer to an array of two TickInfo pointers (one for each axis),
-* each pointing to a TickInfo structure holding information about
-* tick marks on the axis. See function GridLines.
-* cdata
-* A pointer to an array of two AstPlotCurveData pointers (one for each axis),
-* each pointing to an array of AstPlotCurveData structure (one for each
-* major tick value on the axis), holding information about breaks
-* in the curves drawn to mark the major tick values. See function
-* DrawGrid.
-* force
-* If non-zero, then an attempt is made to draw edge labels even if
-* it looks like insufficient edge labels can be produced.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If edge labels were drawn, 1 is returned. Otherwise 0 is returned.
-
-* Notes:
-* - Zero is returned if an error has already occurred.
-*/
-
-
-/* Local Variables: */
- AstFrame *frame; /* Pointer to current Frame */
- AstPlotCurveData *cdt; /* Pointer to the AstPlotCurveData for the next tick */
- LabelList *labellist; /* Pointer to a ingle list of labels to be plotted */
- LabelList *ll; /* Pointer to next label to be plotted */
- LabelList *llist[2]; /* Pointers to both lists of labels to be plotted */
- TickInfo *info; /* Pointer to the TickInfo for the current axis */
- const char *just[ 2 ]; /* Justification string */
- const char *text; /* Pointer to label text */
- double edgeval; /* Axis value at the labelled edge */
- double mindim; /* Minimum dimension of the plotting area */
- double oppval; /* Axis value on the edge opposite to the labels */
- double tol; /* Max. distance between a break and the edge */
- double txtgap; /* Absolute gap between labels and edges */
- float *box; /* Pointer to array of label bounding boxes */
- float *vxbrk; /* X component of unit vector at current break */
- float *vybrk; /* Y component of unit vector at current break */
- float *xbrk; /* X coord. of current break */
- float *ybrk; /* Y coord. of current break */
- float xref; /* X coordinate at label's reference position */
- float yref; /* Y coordinate at label's reference position */
- int axis; /* Current axis index */
- int brk; /* Current break index */
- int edge; /* The edge to be labelled */
- int edgeax; /* Index of axis parallel to the labelled edge */
- int edgelabs; /* Can edge labels be produced? */
- int esc; /* INterpret escape sequences? */
- int gelid; /* ID for next graphical element to be drawn */
- int ii; /* Index into existing labels */
- int maxlab; /* Number of distinct edge labels */
- int medge[2]; /* No. of distinct edge labels for each axis */
- int naxlab; /* Number of edge labels */
- int near; /* Draw a label on the near edge? */
- int nedge[2]; /* No. of edge labels for each axis */
- int ok; /* Can the current tick mark be labelled on the edge? */
- int labfound; /* Label value has already been used? */
- int tick; /* Tick index */
- int upright; /* Draw all labels upright? */
-
-/* Check the global status. */
- if( !astOK ) return 0;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- xref = 0.0;
- yref = 0.0;
-
-/* See if escape sequences in text strings are to be interpreted. */
- esc = astGetEscape( this );
-
-/* Initialise the returned flag to indicate that edge labels cannot be
- produced. */
- edgelabs = 0;
-
-/* Get the minimum dimension of the plotting ares. */
- mindim = MIN( this->xhi - this->xlo, this->yhi - this->ylo );
-
-/* Set up the tolerance for curve breaks occuring on an edge of
- the plotting zone. */
- tol = 0.005*mindim;
-
-/* First, we get a list of all the labels which can be produced on each
- axis. The list includes the labels reference position in graphics
- coordinates, and the index of the major tick value which it
- represents. We do not yet know whether enough of the grid lines cross
- the required edge to make it feasable to use edge labelling, so we do
- not yet draw the labels.
- =====================================================================*/
-
-/* Initialise pointers to arrays of structures holding information
- about the labels which can be draw round the edge for both axes. */
- llist[ 0 ] = NULL;
- llist[ 1 ] = NULL;
-
-/* Indicate that no labels can yet be drawn on either axis. */
- nedge[ 0 ] = 0;
- nedge[ 1 ] = 0;
-
-/* The "nedge" array counts the number of labels on each edge. But some
- of these labels may be for the same tick mark (if the tick mark curve has
- more than 1 intersection with the edge). The "medge" array counts the
- number of *distinct* tick mark labels (i.e. the number of tick mark
- values which have 1 or more interesections with the edge). */
- medge[ 0 ] = 0;
- medge[ 1 ] = 0;
-
-/* For each axis, identify the the usable edge labels. */
- for( axis = 0; axis < 2; axis++ ){
-
-/* See if labels for this axis are to be drawn upright. */
- if( astTestLabelUp( this, axis ) ) {
- upright = astGetLabelUp( this, axis );
- } else {
- upright = 1;
- }
-
-/* Store the required gap between the label text and the axis. */
- txtgap = astGetNumLabGap( this, axis )*mindim;
-
-/* Get the edge to be labelled with the axis values. Edge 0 is the left hand
- edge. Edge 1 is the top edge. Edge 2 is the right-hand edge. Edge 3 is
- the bottom edge. */
- edge = astGetEdge( this, axis ) % 4;
- if( edge < 0 ) edge = -edge;
-
-/* If edge labels for the current axis are to go on the left hand edge of
- the plotting area... */
- if( edge == 0 ){
-
-/* Choose the justification based on the sign of the text gap. */
- if( !upright ) {
- just[ axis ] = "BC";
- } else if( txtgap > 0.0 ){
- just[ axis ] = "CR";
- } else if( txtgap < 0.0 ){
- just[ axis ] = "CL";
- } else {
- just[ axis ] = "CC";
- }
-
-/* Store the constant X axis value at the edge being labelled. Also store
- the X value to use for the reference position for all labels. Take into
- account whether or not the X axis is displayed reversed (i.e. with high
- X values at the left hand side of the screen ). */
- if( !this->xrev ){
- edgeval = this->xlo;
- oppval = this->xhi;
- xref = (float)( edgeval - txtgap );
- } else {
- edgeval = this->xhi;
- oppval = this->xlo;
- xref = (float)( edgeval + txtgap );
- }
-
-/* Indicate that the "edgeval" value refers to axis 1 (the X axis). */
- edgeax = 1;
-
-/* Do the same if the labels are to go on the top edge. */
- } else if( edge == 1 ){
- if( txtgap > 0.0 ){
- just[ axis ] = "BC";
- } else if( txtgap < 0.0 ){
- just[ axis ] = "TC";
- } else {
- just[ axis ] = "CC";
- }
-
- if( !this->yrev ){
- edgeval = this->yhi;
- oppval = this->ylo;
- yref = (float)( edgeval + txtgap );
- } else {
- edgeval = this->ylo;
- oppval = this->yhi;
- yref = (float)( edgeval - txtgap );
- }
-
- edgeax = 0;
-
-/* Do the same if the labels are to go on the right-hand edge. */
- } else if( edge == 2 ){
-
- if( !upright ) {
- just[ axis ] = "BC";
- } else if( txtgap > 0.0 ){
- just[ axis ] = "CL";
- } else if( txtgap < 0.0 ){
- just[ axis ] = "CR";
- } else {
- just[ axis ] = "CC";
- }
-
- if( !this->xrev ){
- edgeval = this->xhi;
- oppval = this->xlo;
- xref = (float)( edgeval + txtgap );
- } else {
- edgeval = this->xlo;
- oppval = this->xhi;
- xref = (float)( edgeval - txtgap );
- }
-
- edgeax = 1;
-
-/* Do the same if the labels are to go on the bottom edge. */
- } else {
- if( txtgap > 0.0 ){
- just[ axis ] = "TC";
- } else if( txtgap < 0.0 ){
- just[ axis ] = "BC";
- } else {
- just[ axis ] = "CC";
- }
-
- if( !this->yrev ){
- edgeval = this->ylo;
- oppval = this->yhi;
- yref = (float)( edgeval - txtgap );
- } else {
- edgeval = this->yhi;
- oppval = this->ylo;
- yref = (float)( edgeval + txtgap );
- }
-
- edgeax = 0;
-
- }
-
-/* Get a pointer to the structure containing information describing the
- positions of the major tick marks along this axis. */
- info = grid[ axis ];
-
-/* Get a pointer to the structure containing information describing the
- breaks in the curve which is parallel to the other axis and passes
- through the first major tick mark. */
- cdt = cdata[ axis ];
-
-/* Initialise the pointer to the list of text strings to be drawn. */
- labellist = NULL;
-
-/* Initialise the number of labels which can be placed on the near edge of
- the plotting zone (some of which may be the same). */
- naxlab = 0;
-
-/* Initialise the number of distinct labelled tick mark values. */
- maxlab = 0;
-
-/* Loop round each of the major tick marks on the current axis. */
- for( tick = 0; cdt && info && tick < info->nmajor; tick++ ){
-
-/* Store pointers to the values giving the position and unit direction
- vector of the curve at the first break. */
- xbrk = cdt->xbrk;
- ybrk = cdt->ybrk;
- vxbrk = cdt->vxbrk;
- vybrk = cdt->vybrk;
-
-/* Loop round each of the breaks in the curve which passes through the
- current major tick mark, and is parallel to the other axis. */
- ok = 0;
- for( brk = 0; brk < cdt->nbrk; brk++ ){
-
-/* A label can be produced on the near edge of the plotting zone if the
- current break occurs on, or close to, the edge, and the curve is not
- nearly parallel to the axis (limit is 5 degs). */
- near = ( ( edgeax == 0 &&
- fabs( (double) *ybrk - edgeval ) < tol &&
- fabs( (double) *vybrk ) > 0.09 ) ||
- ( edgeax == 1 &&
- fabs( (double) *xbrk - edgeval ) < tol &&
- fabs( (double) *vxbrk ) > 0.09 ) );
-
-/* Get the label text. */
- if( info->labels ) {
- text = (info->labels)[ tick ];
- } else {
- text = NULL;
- }
-
-/* If a label can be produced, record the information needed to draw the
- label. */
- if( near && text ){
-
- labellist = (LabelList *) astGrow( (void *) labellist, naxlab + 1, sizeof(LabelList) );
- if ( !astOK ) break;
-
- if( edgeax == 0 ){
- (labellist + naxlab)->index = (double) *xbrk;
- (labellist + naxlab)->x = (double) *xbrk;
- (labellist + naxlab)->y = (double) yref;
- } else {
- (labellist + naxlab)->index = (double) *ybrk;
- (labellist + naxlab)->x = (double) xref;
- (labellist + naxlab)->y = (double) *ybrk;
- }
-
- (labellist + naxlab)->text = (char *) astStore( NULL, (void *) text, strlen(text) + 1 );
- (labellist + naxlab)->just = (char *) astStore( NULL, (void *) just[ axis ], strlen(just[ axis ]) + 1 );
-
-/* The up vector depends on which edge is being labelled and whether all
- labels are being drawn upright or not. */
- if( edge == 1 || edge == 3 || upright ) {
- (labellist + naxlab)->upx = 0.0;
- (labellist + naxlab)->upy = 1.0;
- } else if( edge == 0 ) {
- (labellist + naxlab)->upx = -1.0;
- (labellist + naxlab)->upy = 0.0;
- } else {
- (labellist + naxlab)->upx = 1.0;
- (labellist + naxlab)->upy = 0.0;
- }
-
- (labellist + naxlab)->val = (info->ticks)[ tick ];
- naxlab++;
-
-/* If this label has not already been included in the label list, indicate
- that we have found another usable label. */
- labfound = 0;
- for( ii = 0; ii < naxlab-1; ii++ ) {
- if( fabs( (info->ticks)[ tick ] -
- (labellist + ii)->val ) < 0.2*info->gap ) {
- labfound = 1;
- break;
- }
- }
- if( !labfound ) ok = 1;
-
- }
-
-/* Increment the pointers to the values giving the position and unit direction
- vector of the next break. */
- xbrk++;
- ybrk++;
- vxbrk++;
- vybrk++;
-
- }
-
-/* If an error has occurred, break out of the loop. */
- if( !astOK ) break;
-
-/* If one or more labels could be produced for this tick mark value,
- increment the number of labeled tick marks found. */
- if( ok ) maxlab++;
-
-/* Get a pointer to the curve through the next major tick mark. */
- cdt++;
-
- }
-
-/* If an error has occurred, break out of the loop. */
- if( !astOK ) break;
-
-/* Store the number of labels for this axis, and the pointer to the
- drawable labels. */
- nedge[ axis ] = naxlab;
- medge[ axis ] = maxlab;
- llist[ axis ] = labellist;
- }
-
-/* We now know how many labels would be produced on each axis if edge
- labelling were to be used. We also know what those labelled values are,
- and where the labels would be drawn. We now take the decision as to
- whether there are enough of these labels to make edge labelling
- feasable. If so, we carry on and draw the labels. There need to be
- at least 3 labels on each axis for linear tick spacing and 2 for log
- tick spacing (or a non-zero value supplied for "force")...
- ================================================================= */
- if( astOK && ( ( medge[ 0 ] > ( astGetLogTicks( this, 0 ) ? 1 : 2 ) &&
- medge[ 1 ] > ( astGetLogTicks( this, 1 ) ? 1 : 2 ) )
- || force ) ) {
-
-/* Set the returned flag to indicate that edge labelling is being used. */
- edgelabs = 1;
-
-/* Initialise the pointer to the memory holding the bounding boxes for
- all labels (used by function Overlap). */
- box = NULL;
-
-/* Get a pointer to the current Frame in the Plot. */
- frame = astGetFrame( this, AST__CURRENT );
-
-/* Initialize the id value for graphical element being drawn. */
- gelid = AST__NUMLAB1_ID;
-
-/* If required, draw the labels for each axis in turn. */
- for( axis = 0; axis < 2 && ink; axis++ ){
-
-/* Establish the correct graphical attributes as defined by attributes
- with the supplied Plot. */
- astGrfAttrs( this, gelid, 1, GRF__TEXT, method, class );
-
-/* Plot them. */
- info = grid[ axis ];
- PlotLabels( this, esc, frame, axis, llist[ axis ], info->fmt,
- nedge[ axis ], &box, method, class, status );
-
-/* Re-establish the original graphical attributes. */
- astGrfAttrs( this, gelid, 0, GRF__TEXT, method, class );
-
-/* Set up the id for the next graphical element to be drawn. */
- gelid = AST__NUMLAB2_ID;
-
- }
-
-/* Free the memory used to hold the bounding boxes. */
- box = (float *) astFree( (void *) box );
-
-/* Annul the pointer to the Frame. */
- frame = astAnnul( frame );
- }
-
-/* Free the memory used to store the label information. */
- for( axis = 0; axis < 2; axis++ ){
- ll = llist[ axis ];
- if( ll ) {
- for( tick = 0; tick < nedge[ axis ]; tick ++ ) {
- ll->text = (char *) astFree( (void *) ll->text );
- ll->just = (char *) astFree( (void *) ll->just );
- ll++;
- }
- llist[ axis ] = (LabelList *) astFree( (void *) llist[ axis ] );
- }
- }
-
-/* Return the flag indicating if edge labels were produced. */
- return edgelabs;
-
-}
-
-static int EdgeCrossings( AstPlot *this, int edge, int axis, double axval,
- double *gap, double **cross,
- EdgeCrossingsStatics **pstatics, const char *method,
- const char *class, int *status ){
-/*
-*
-* Name:
-* EdgeCrossings
-
-* Purpose:
-* Find all occurrences of a given physical axis value on an edge of the
-* plotting area.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int EdgeCrossings( AstPlot *this, int edge, int axis, double axval,
-* double *gap, double **cross,
-* EdgeCrossingsStatics **pstatics,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function finds all occurences of a given physical axis value
-* along a specified edge of the plotting area. Firstly, a set of evenly
-* spaced points ("edge samples") are placed along the edge and the
-* corresponding physical coordinates are found. These physical coordinates
-* are then offset slightly from their original positions in the direction
-* of the "other" axis (i.e. index [ 1 - axis ] ), and transformed back
-* into graphics coordinates. These coordinates give the tangent vector
-* at each of the edge samples.
-*
-* To find the crossings, the supplied axis value is compared with the axis
-* value at each sample in turn, starting from one end of the edge and
-* working through to the other end. When a crossing is found, linear
-* interpolation is used between the two adjacent edge samples to find a
-* more accurate estimate of the crossing. The vector at the crossing
-* is also estimated by linear interpolation between the vectors at the two
-* adjacent samples.
-*
-* This basic algorithm fails if there is a discontinuity in the axis
-* values along the edge. For instance, if the edge covers a range of
-* Right Ascension from 23h to 1h, there will be a discontinuity at 0h
-* at which the RA values suddenly jump from 2*PI to zero. This jump
-* encompasses all normalised RA values and so every axis value would be
-* given a crossing at this point. To avoid this, a bad sample is
-* interposed between the two samples on either side of the
-* discontinuity. This prevents any crossings from being placed at the
-* discontinuity.
-*
-* There is a second problem related to discontinuities. If the supplied
-* axis value is zero (using the above RA example again), then no
-* crossings will be found, not only because of the extra bad sample,
-* but also because the samples will not quite cover the range of axis
-* values covered by the discontinuity because of the discrete nature
-* of the samples). To get round this, the sections on either side
-* of the discontinity are extended by a single sample. These extra
-* samples are assumed to be conincident with the neighbouring sample,
-* except that the value for the searched axis is modified to be a
-* linear extension from the neighbouring samples.
-
-
-* Parameters:
-* this
-* A pointer to the Plot. Supply a NULL pointer to release resources.
-* edge
-* The edge of the plotting area to be used. Edge 0 is the left hand
-* edge. Edge 1 is the top edge. Edge 2 is the right-hand edge. Edge 3
-* is the bottom edge.
-* axis
-* The index of the axis to which "axval" refers.
-* axval
-* The physical axis value to be searched for.
-* gap
-* Pointer to array of two values holding the gap between major
-* tick marks on the two axes.
-* cross
-* A pointer to the location at which to return a pointer to an
-* array of doubles holding the crossing information. Each crossing
-* is described by 4 doubles. The first pair are the graphiucs (x,y)
-* coordinates of the point on the edge at which the crossing occurs.
-* The second pair represents a unit vector in graphics coordinates
-* which is tangential to the curve of constant axis value at the
-* crossing. The memory allocated within this function to hold this
-* data should be freed using astFree when no longer needed. If no
-* crossings are found a NULL pointer is returned.
-* pstatics
-* Address of a pointer to a structure holding values for variables
-* which were statically defined within this function prior to the
-* thread-safe version of AST. If the pointer is supplied as NULL,
-* then a new structure is allocated and initialised. Any supplied
-* structure is freed if a NULL pointer is supplied for "this".
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Return Value:
-* The number of crossings found.
-
-* Notes:
-* - This function allocates static resource on the first invocation
-* which should be freed when no more calls are to be made, by making a
-* final call with a NULL pointer supplied for "this". All other parameters
-* are then ignored.
-* - The static resources are re-initialised each time "edge" or
-* "axis" changes, and so the calling function should be structure in
-* order to minimise the number of times these parameter values change.
-* - If an error has already occurred, or if this function should
-* fail for any reason, zero is returned, and a NULL pointer is stored at
-* "cross".
-
-*/
-
-/* Local Variables: */
- EdgeCrossingsStatics *statics; /* Structure holding static data */
- AstMapping *mapping; /* Pointer to graphics->physical mapping */
- AstPointSet *pset1a; /* Physical cooords at offset edge samples */
- AstPointSet *pset2a; /* Physical cooords at offset edge samples */
- AstPointSet *pset3; /* Physical cooords at offset edge samples */
- AstPointSet *pset4a; /* Physical cooords at offset edge samples */
- double **ptr1a; /* Pointer to physical coord. data */
- double **ptr2a; /* Pointer to physical coord. data */
- double **ptr3; /* Pointer to physical coord. data */
- double **ptr4a; /* Pointer to physical coord. data */
- double *data; /* Pointer to next item of crossing information */
- double *p1; /* Pointer to graphics axis with constant value */
- double *p1a; /* Pointer to graphics axis with constant value */
- double *p2; /* Pointer to graphics axis with varying value */
- double *p2a; /* Pointer to graphics axis with varying value */
- double *q1; /* Pointer to physical axis being searched */
- double *q1a; /* Pointer to physical axis being searched */
- double *q2; /* Pointer to other physical axis */
- double *q2a; /* Pointer to other physical axis */
- double *v1; /* Pointer to vector component on axis 0 */
- double *v2; /* Pointer to vector component on axis 1 */
- double *v1a; /* Pointer to vector component on axis 0 */
- double *v2a; /* Pointer to vector component on axis 1 */
- double dd; /* The gap between edge samples */
- double diff; /* Squared differences between adjacent edge samples */
- double dl2; /* Squared vector length */
- double dl; /* Vector length */
- double dx; /* Vector X component */
- double dy; /* Vector Y component */
- double f; /* Weight for the current edge sample */
- double offset; /* Physical offset */
- double pp2; /* Varying graphics axis value at previous sample */
- double pq1; /* Required physical axis value at previous sample */
- double pv1; /* Previous vector component on axis 0 */
- double pv2; /* Previous vector component on axis 1 */
- double sum; /* Sum of squared differences between adjacent edge samples */
- double value; /* The current graphics axis value */
- double vx; /* Vector component on axis 0 at crossing */
- double vy; /* Vector component on axis 1 at crossing */
- double z; /* Varying graphics axis value at crossing */
- int i; /* Edge sample index */
- int iter; /* Iteration index */
- int larger; /* Is current axis value larger than target? */
- int logticks; /* Are major ticks logarithmically spaced? */
- int ncross; /* No. of crossings */
- int ndisc; /* No. of discontinuities along the edge */
- int nsum; /* Number of values summed in "sum" */
- int plarger; /* Was previous axis value larger than target? */
-
-/* Get a pointer to the supplied statics object. */
- statics = *pstatics;
-
-/* If a NULL Plot pointer has been supplied, release the static
- resources, and return. */
- if( !this ){
- if( statics ){
- if( statics->pset1 ) statics->pset1 = astAnnul( statics->pset1 );
- if( statics->pset2 ) statics->pset2 = astAnnul( statics->pset2 );
- if( statics->pset4 ) statics->pset4 = astAnnul( statics->pset4 );
- if( statics->frame ) statics->frame = astAnnul( statics->frame );
- *pstatics = astFree( statics );
- }
- return 0;
- }
-
-/* Initialise the number of crossings found, and the pointer to the place
- to store them. */
- ncross = 0;
- *cross = NULL;
-
-/* Check the global status. */
- if( !astOK ) return 0;
-
-/* If no statics structure was supplied, create one now and initialise it. */
- if( !statics ) {
- statics = astMalloc( sizeof( EdgeCrossingsStatics ) );
- if( statics ) {
- statics->frame = NULL;
- statics->pset1 = NULL;
- statics->pset2 = NULL;
- statics->pset4 = NULL;
- statics->ptr1 = NULL;
- statics->ptr2 = NULL;
- statics->ptr4 = NULL;
- statics->paxis = -1;
- statics->pedge = -1;
- *pstatics = statics;
- }
- }
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- pp2 = 0.0;
- pv1 = 0.0;
- pv2 = 0.0;
- plarger = 0;
-
-/* See if the major ticks on the other axis are logarithmically or
- linearly spaced. */
- logticks = astGetLogTicks( this, 1 - axis );
-
-/* Ensure that "edge" is in the range 0 - 3. */
- edge = edge % 4;
- if( edge < 0 ) edge = -edge;
-
-/* If the edge or axis has changed since the last invocation, or if this is
- the first invocation, initialise some static data. */
-/* ======================================================================*/
- if( statics->pedge == -1 || statics->pedge != edge || statics->paxis != axis ){
-
-/* Save the edge and axis. */
- statics->pedge = edge;
- statics->paxis = axis;
-
-/* Annull any previous static data objects */
- if( statics->pset1 ) statics->pset1 = astAnnul( statics->pset1 );
- if( statics->pset2 ) statics->pset2 = astAnnul( statics->pset2 );
- if( statics->pset4 ) statics->pset4 = astAnnul( statics->pset4 );
- if( statics->frame ) statics->frame = astAnnul( statics->frame );
-
-/* Store some values so that the code does not need to consider each edge
- separately. First deal with the left hand edge. */
- if( edge == 0 ){
- statics->edgeax = 0;
- if( this->xrev ){
- statics->edgeval = this->xhi;
- } else {
- statics->edgeval = this->xlo;
- }
- statics->edgehi = this->yhi;
- statics->edgelo = this->ylo;
-
-/* Now deal with the right hand edge. */
- } else if( edge == 2 ){
- statics->edgeax = 0;
- if( this->xrev ){
- statics->edgeval = this->xlo;
- } else {
- statics->edgeval = this->xhi;
- }
- statics->edgehi = this->yhi;
- statics->edgelo = this->ylo;
-
-/* Now deal with the bottom edge. */
- } else if( edge == 3 ){
- statics->edgeax = 1;
- if( this->yrev ){
- statics->edgeval = this->yhi;
- } else {
- statics->edgeval = this->ylo;
- }
- statics->edgehi = this->xhi;
- statics->edgelo = this->xlo;
-
-
-/* Finally deal with the top edge. */
- } else {
- statics->edgeax = 1;
- if( this->yrev ){
- statics->edgeval = this->ylo;
- } else {
- statics->edgeval = this->yhi;
- }
- statics->edgehi = this->xhi;
- statics->edgelo = this->xlo;
-
- }
-
-/* Get a pointer to the current Frame in the supplied Plot. */
- statics->frame = astGetFrame( this, AST__CURRENT );
-
-/* Get a pointer to the mapping from base to current Frame in the supplied
- Plot. */
- mapping = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Create a PointSet to hold the graphics coordinates at a set of
- regularly spaced points along the specified edge of the plotting area. */
- pset1a = astPointSet( EDGETICKS_DIM, 2, "", status );
- ptr1a = astGetPoints( pset1a );
-
-/* Create a PointSet to hold the corresponding physical coordinates. */
- pset2a = astPointSet( EDGETICKS_DIM, 2, "", status );
- ptr2a = astGetPoints( pset2a );
-
-/* Check they can be used. */
- if( astOK ){
-
-/* Set up the graphics coordinates. */
- dd = ( statics->edgehi - statics->edgelo )/(double)( EDGETICKS_DIM - 1 );
- value = statics->edgelo;
-
- p1 = ptr1a[ statics->edgeax ];
- p2 = ptr1a[ 1 - statics->edgeax ];
-
- for( i = 0; i < EDGETICKS_DIM; i++ ){
- *(p1++) = statics->edgeval;
- *(p2++) = value;
- value += dd;
- }
- }
-
-/* Transform the graphics coordinates to physical coordinates,
- *without* normalising them into their normal ranges. */
- (void) Trans( this, statics->frame, mapping, pset1a, 1, pset2a, 0, method, class, status );
-
-/* Find the RMS step size along the axis. This is used to locate
- discontinuities along the edge. Do three rejection iterations. */
- statics->limit = DBL_MAX;
- for( iter = 0; iter < 3; iter ++ ){
- q1 = ptr2a[ axis ];
- pq1 = AST__BAD;
- sum = 0.0;
- nsum = 0;
-
- for( i = 0; i < EDGETICKS_DIM; i++ ){
- if( *q1 != AST__BAD && pq1 != AST__BAD ){
- diff = *q1 - pq1;
- if( fabs( diff ) < statics->limit ){
- sum += diff*diff;
- nsum++;
- }
- }
- pq1 = *(q1++);
- }
-
- if( nsum == 0 ) break;
- statics->limit = 3.0*sqrt( sum/(double)nsum );
- }
-
-/* Now create another PointSet holding positions slightly offset from the
- physical coordinates at the edge samples. The offset is in the direction
- of the other physical axis. These positions are used to determine the
- vector at the crossings. */
- if( nsum > 0 ){
- pset3 = astPointSet( EDGETICKS_DIM, 2, "", status );
- ptr3 = astGetPoints( pset3 );
-
-/* Create a PointSet to hold the corresponding graphics coordinates. */
- pset4a = astPointSet( EDGETICKS_DIM, 2, "", status );
- ptr4a = astGetPoints( pset4a );
-
-/* Check they can be used. */
- if( astOK ){
-
-/* Copy the physical coordinates from PointSet 2 to PointSet 3, offseting
- them slightly along the other axis. */
- p1 = ptr2a[ axis ];
- p2 = ptr2a[ 1 - axis ];
-
- q1 = ptr3[ axis ];
- q2 = ptr3[ 1 - axis ];
-
- offset = 0.2*gap[ 1 - axis ];
-
- pq1 = AST__BAD;
-
- for( i = 0; i < EDGETICKS_DIM; i++ ){
- if( *p1 != AST__BAD && *p2 != AST__BAD ){
- if( logticks ) offset = 0.2*(*p2)*( gap[ 1 -axis ] - 1.0 );
- *(q2++) = *p2 + offset;
- } else {
- *(q2++) = AST__BAD;
- }
- pq1 = *(p1++);
- *(q1++) = pq1;
- p2++;
- }
-
- }
-
-/* Transform the physical coordinates to graphics coordinates. */
- (void) Trans( this, NULL, mapping, pset3, 0, pset4a, 0, method, class, status );
-
-/* Check they can be used. */
- if( astOK ){
-
-/* Modify the contents of PointSet 4 to represent the unit vector in
- graphics coordinates at each edge sample. */
- p1 = ptr1a[ 0 ];
- p2 = ptr1a[ 1 ];
- q1 = ptr4a[ 0 ];
- q2 = ptr4a[ 1 ];
-
- for( i = 0; i < EDGETICKS_DIM; i++ ){
- if( *p1 != AST__BAD && *p2 != AST__BAD &&
- *q1 != AST__BAD && *q2 != AST__BAD ){
-
- dx = *q1 - *p1;
- dy = *q2 - *p2;
- dl2 = dx*dx + dy*dy;
-
- if( dl2 > 0.0 ){
- dl = sqrt( dl2 );
- *q1 = dx/dl;
- *q2 = dy/dl;
- } else {
- *q1 = AST__BAD;
- *q2 = AST__BAD;
- }
-
- } else {
- *q1 = AST__BAD;
- *q2 = AST__BAD;
- }
-
- p1++;
- p2++;
- q1++;
- q2++;
-
- }
-
- }
-
-/* Annul the PointSet holding offset physical cooridnates. */
- pset3 = astAnnul( pset3 );
-
-/* Discontinuities in the axis values can cause problems. For instance,
- using the above PointSets, no tick mark could be put at 0 hours RA
- because of the discontinuity there. To get round this, 3 extra samples
- are added at each discontinuity, the first extends the continuous section
- which ends at the discontinuity, and the third extends the secion which
- starts at the discontinuity. This results in the two sections overlapping
- by one sample. The second is placed between these two and has a bad
- axis value. It prevents crossings from being found in between the values
- at the ends of the two sections.
-
- First count the number of discontinuities in the axis values.
- Discontinuites are defined as steps of more than 9 times the RMS step
- size. */
- q1 = ptr2a[ axis ];
- pq1 = AST__BAD;
- statics->limit *= 3.0;
- ndisc = 0;
-
- for( i = 0; i < EDGETICKS_DIM; i++ ){
- if( *q1 != AST__BAD && pq1 != AST__BAD ){
- if( fabs( *q1 - pq1 ) > statics->limit ) ndisc++;
- }
- pq1 = *(q1++);
- }
-
-/* Store the size of the new PointSets holding the extra samples. */
- statics->dim = EDGETICKS_DIM + 3*ndisc;
-
-/* If there are no discontinuities, just clone the existing PointSets. */
- if( !ndisc ){
- statics->pset1 = astClone( pset1a );
- statics->pset2 = astClone( pset2a );
- statics->pset4 = astClone( pset4a );
- statics->ptr1 = astGetPoints( statics->pset1 );
- statics->ptr2 = astGetPoints( statics->pset2 );
- statics->ptr4 = astGetPoints( statics->pset4 );
-
-/* Otherwise, create new PointSets. */
- } else {
- statics->pset1 = astPointSet( statics->dim, 2, "", status );
- statics->ptr1 = astGetPoints( statics->pset1 );
- statics->pset2 = astPointSet( statics->dim, 2, "", status );
- statics->ptr2 = astGetPoints( statics->pset2 );
- statics->pset4 = astPointSet( statics->dim, 2, "", status );
- statics->ptr4 = astGetPoints( statics->pset4 );
-
-/* Set up pointers used to walk through the arrays in the original
- PointSets and the new PointSets. */
- p1 = statics->ptr1[ 0 ];
- p2 = statics->ptr1[ 1 ];
- q1 = statics->ptr2[ axis ];
- q2 = statics->ptr2[ 1 - axis ];
- v1 = statics->ptr4[ 0 ];
- v2 = statics->ptr4[ 1 ];
-
- p1a = ptr1a[ 0 ];
- p2a = ptr1a[ 1 ];
- q1a = ptr2a[ axis ];
- q2a = ptr2a[ 1 - axis ];
- v1a = ptr4a[ 0 ];
- v2a = ptr4a[ 1 ];
-
-/* Initialise the axis value at the previous sample. */
- pq1 = AST__BAD;
-
-/* Check all samples in the original PointSets. */
- for( i = 0; i < EDGETICKS_DIM; i++ ){
-
-/* If this is the first point after a discontinuity... */
- if( *q1a != AST__BAD && pq1 != AST__BAD ){
- if( fabs( *q1a - pq1 ) > statics->limit ) {
-
-/* Insert an extra sample with the coordinates of the previous sample,
- but with an axis value which is linearly extrapolated from the previous
- samples. */
- *(p1++) = p1a[ 0 ];
- *(p2++) = p2a[ 0 ];
- *(v1++) = v1a[ -1 ];
- *(v2++) = v2a[ -1 ];
- *(q2++) = q2a[ -1 ];
- if( i > 1 && q1a[ -2 ] != AST__BAD ){
- *(q1++) = 2.0*pq1 - q1a[ -2 ];
- } else {
- *(q1++) = pq1;
- }
-
-/* Insert an extra sample with bad coordinates. */
- *(p1++) = AST__BAD;
- *(p2++) = AST__BAD;
- *(v1++) = AST__BAD;
- *(v2++) = AST__BAD;
- *(q2++) = AST__BAD;
- *(q1++) = AST__BAD;
-
-/* Insert an extra sample with the cooridnates of the current sample,
- but with an axis value which is linearly extrapolated from the
- subsequent samples. */
- *(p1++) = p1a[ -1 ];
- *(p2++) = p2a[ -1 ];
- *(v1++) = *v1a;
- *(v2++) = *v2a;
- *(q2++) = *q2a;
- if( i < EDGETICKS_DIM - 1 && q1a[ 1 ] != AST__BAD ){
- *(q1++) = 2.0*(*q1a) - q1a[ 1 ];
- } else {
- *(q1++) = pq1;
- }
-
- }
-
- }
-
-/* Save the current axis value. */
- pq1 = *q1a;
-
-/* Copy the current input values to the new PointSets, and move on the next
- point in the original PointSets. */
- *(p1++) = *(p1a++);
- *(p2++) = *(p2a++);
- *(q1++) = *(q1a++);
- *(q2++) = *(q2a++);
- *(v1++) = *(v1a++);
- *(v2++) = *(v2a++);
-
- }
-
- }
-
-/* Anull the original PointSets. */
- pset4a = astAnnul( pset4a );
-
-/* If all the physical coordinates are bad, indicate this by setting the
- limiting step size bad. */
- } else {
- statics->limit = AST__BAD;
- }
-
-/* Anull the original PointSets. */
- pset1a = astAnnul( pset1a );
- pset2a = astAnnul( pset2a );
-
-/* Annul the pointer to the mapping from base to current Frame. */
- mapping = astAnnul( mapping );
-
- }
-
-/* ======================================================================*/
-/* The initialisation has now been done. Check the physical coordinate data
- can be used. */
- if( astOK && statics->limit != AST__BAD ){
-
-/* Store pointers to the graphics and physical coordinates at the first
- edge sample. */
- p1 = statics->ptr1[ statics->edgeax ]; /* Graphics axis with constant value */
- p2 = statics->ptr1[ 1 - statics->edgeax ]; /* Graphics axis with varying value */
- q1 = statics->ptr2[ axis ]; /* Physical axis values to be searched */
- q2 = statics->ptr2[ 1 - axis ]; /* The other physical axis */
-
-/* Store pointers to the components of the unit vector at the first
- edge sample. */
- v1 = statics->ptr4[ 0 ];
- v2 = statics->ptr4[ 1 ];
-
-/* Inidicate that there is currently no "previous sample". */
- pq1 = AST__BAD;
-
-/* Check each point in turn... */
- for( i = 0; i < statics->dim; i++ ){
-
-/* Skip this point if the physical coordinates are undefined. */
- if( *q1 != AST__BAD && *q2 != AST__BAD ){
-
-/* Get a flag indicating if the required axis value has been exceeded at
- the current edge sample. */
- larger = ( *q1 > axval );
-
-/* If the state of this flag has changed since the previous edge sample,
- and if we know where the previous sample was, we have found a
- crossing. */
- if( pq1 != AST__BAD && larger != plarger ){
-
-/* Find the distance from the previous physical axis value to the required
- axis value, as a fraction of the distance from the previous axis value
- to the current axis value. Since the flag has changed, we know that the
- q1 value at this edge sample and the previous one must be different, so
- we know that the denominator is not zero. */
- f = ( axval - pq1 )/( *q1 - pq1 );
-
-/* Use linear interpolation to estimate the graphics axis value at the
- crossing. */
- if( f != -1.0 ){
- z = pp2 + f*( *p2 - pp2 );
-
-/* Use linear interpolation to estimate the two components of the unit
- vector at the crossing. */
- if( *v1 != AST__BAD && pv1 != AST__BAD &&
- *v2 != AST__BAD && pv2 != AST__BAD ){
- vx = pv1 + f*( *v1 - pv1 );
- vy = pv2 + f*( *v2 - pv2 );
-
-/* Normalise the vector. */
- dl2 = vx*vx + vy*vy;
- if( dl2 > 0.0 ){
- dl = sqrt( dl2 );
- vx /= dl;
- vy /= dl;
- } else {
- vx = AST__BAD;
- vy = AST__BAD;
- }
-
- } else {
- vx = AST__BAD;
- vy = AST__BAD;
- }
-
-/* Grow the returned array to hold another crossing. */
- ncross++;
- *cross = (double *) astGrow( (void *) *cross, ncross,
- 4*sizeof( double ) );
-
-/* If succesful, store the crossing. */
- if( astOK ) {
-
- data = *cross + 4*( ncross - 1 );
- if( statics->edgeax ){
- *(data++) = z;
- *(data++) = statics->edgeval;
- } else {
- *(data++) = statics->edgeval;
- *(data++) = z;
- }
- *(data++) = vx;
- *(data++) = vy;
-
- }
-
- }
-
- }
-
-/* Save the flag for use on the next pass through this loop. */
- plarger = larger;
-
- }
-
-/* Save the varying graphics axis value and the required physical axis
- value at the current edge sample (also save the vector). */
- pp2 = *p2;
- pq1 = *q1;
- pv1 = *v1;
- pv2 = *v2;
-
-/* Point to the next edge sample. */
- p1++;
- p2++;
- q1++;
- q2++;
- v1++;
- v2++;
-
- }
-
- }
-
-/* If an error has occurred, free the array holding the crossings, and
- indicate that there are zero corssing. */
- if( !astOK ) {
- *cross = (double *) astFree( (void *) *cross );
- ncross = 0;
- }
-
-/* Return the answer. */
- return ncross;
-
-}
-
-int astFindEscape_( const char *text, int *type, int *value, int *nc, int *status ){
-/*
-*+
-* Name:
-* astFindEscape
-
-* Purpose:
-* Check if a string starts with a graphics escape sequence.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "plot.h"
-* int astFindEscape( const char *text, int *type, int *value, int *nc )
-
-* Description:
-* This function returns a flag indiciating if the first character in
-* the supplied string is the start of a graphics escape sequence. If
-* so, the type and associated value (if any) of the escape sequence
-* are returned in "type" and "value", and the number of characters
-* occupied by the escape sequence is returned in "nc". If the
-* supplied text string does not begin with an escape sequence, the
-* number of characters before the first escape sequence is returned in
-* "nc" (the length of the string is returned in "nc" if the string
-* contains no escape sequences).
-*
-* This function can be used by grf modules which wish to implement
-* interpretation of escape sequences internally, rather than allowing the
-* Plot class to do the interpretation.
-
-* Parameters:
-* text
-* Pointer to the string to be checked.
-* type
-* Pointer to a location at which to return the type of escape
-* sequence. Each type is identified by a symbolic constant defined
-* in grf.h. The returned value is undefined if the supplied text
-* does not begin with an escape sequence.
-* value
-* Pointer to a lcation at which to return the integer value
-* associated with the escape sequence. All usable values will be
-* positive. Zero is returned if the escape sequence has no associated
-* integer. A value of -1 indicates that the attribute identified by
-* "type" should be reset to its "normal" value (as established using
-* the astGAttr function, etc). The returned value is undefined if the
-* supplied text does not begin with an escape sequence.
-* nc
-* Pointer to a location at which to return the number of
-* characters read by this call. If the text starts with an escape
-* sequence, the returned value will be the number of characters in
-* the escape sequence. Otherwise, the returned value will be the
-* number of characters prior to the first escape sequence, or the
-* length of the supplied text if no escape sequence is found.
-
-* Returned Value:
-* A non-zero value is returned if the supplied text starts with a
-* graphics escape sequence, and zero is returned otherwise.
-
-* Escape Sequences:
-* Escape sequences are introduced into the text string by a percent
-* "%" character. The following escape sequences are currently recognised
-* ("..." represents a string of one or more decimal digits):
-*
-* %% - Print a literal "%" character.
-*
-* %^...+ - Draw subsequent characters as super-scripts. The digits
-* "..." give the distance from the base-line of "normal"
-* text to the base-line of the super-script text, scaled
-* so that a value of "100" corresponds to the height of
-* "normal" text.
-* %^+ - Draw subsequent characters with the normal base-line.
-*
-* %v...+ - Draw subsequent characters as sub-scripts. The digits
-* "..." give the distance from the base-line of "normal"
-* text to the base-line of the sub-script text, scaled
-* so that a value of "100" corresponds to the height of
-* "normal" text.
-*
-* %v+ - Draw subsequent characters with the normal base-line
-* (equivalent to %^+).
-*
-* %>...+ - Leave a gap before drawing subsequent characters.
-* The digits "..." give the size of the gap, scaled
-* so that a value of "100" corresponds to the height of
-* "normal" text.
-*
-* %<...+ - Move backwards before drawing subsequent characters.
-* The digits "..." give the size of the movement, scaled
-* so that a value of "100" corresponds to the height of
-* "normal" text.
-*
-* %s...+ - Change the Size attribute for subsequent characters. The
-* digits "..." give the new Size as a fraction of the
-* "normal" Size, scaled so that a value of "100" corresponds
-* to 1.0;
-*
-* %s+ - Reset the Size attribute to its "normal" value.
-*
-* %w...+ - Change the Width attribute for subsequent characters. The
-* digits "..." give the new width as a fraction of the
-* "normal" Width, scaled so that a value of "100" corresponds
-* to 1.0;
-*
-* %w+ - Reset the Size attribute to its "normal" value.
-*
-* %f...+ - Change the Font attribute for subsequent characters. The
-* digits "..." give the new Font value.
-*
-* %f+ - Reset the Font attribute to its "normal" value.
-*
-* %c...+ - Change the Colour attribute for subsequent characters. The
-* digits "..." give the new Colour value.
-*
-* %c+ - Reset the Colour attribute to its "normal" value.
-*
-* %t...+ - Change the Style attribute for subsequent characters. The
-* digits "..." give the new Style value.
-*
-* %t+ - Reset the Style attribute to its "normal" value.
-*
-* %h+ - Remember the current horizontal position (see "%g+")
-*
-* %g+ - Go to the horizontal position of the previous "%h+" (if any).
-*
-* %- - Push the current graphics attribute values onto the top of
-* the stack (see "%+").
-*
-* %+ - Pop attributes values of the top the stack (see "%-"). If
-* the stack is empty, "normal" attribute values are restored.
-
-* Notes:
-* - Zero is returned if an error has already occurred.
-*-
-*/
-
-/* Local Variables: */
- int result;
- const char *a;
- const char *b;
- int nd;
- const char *perc;
-
-/* Initialise */
- result = 0;
- *type = GRF__ESPER;
- *value = 0;
- *nc = 0;
- perc = NULL;
-
-/* Check inherited status and supplied pointer. */
- if( !astOK || !text ) return result;
-
-/* Loop round, looking for percent signs. Break out of the loop when a
- complete escape sequence has been found and read, leaving the "b" pointer
- pointing to the first character following the escape sequence. */
- b = NULL;
- a = text;
- while( ( a = strchr( a, '%' ) ) ) {
- perc = a;
-
-/* Compare the following character to each known escape sequence type. */
- a++;
- if( *a == '%') {
- *type = GRF__ESPER;
- b = a + 1;
- break;
-
- } else if( *a == '^') {
- *type = GRF__ESSUP;
-
- } else if( *a == 'v') {
- *type = GRF__ESSUB;
-
- } else if( *a == '>') {
- *type = GRF__ESGAP;
-
- } else if( *a == '<') {
- *type = GRF__ESBAC;
-
- } else if( *a == 's') {
- *type = GRF__ESSIZ;
-
- } else if( *a == 'w') {
- *type = GRF__ESWID;
-
- } else if( *a == 'f') {
- *type = GRF__ESFON;
-
- } else if( *a == 'c') {
- *type = GRF__ESCOL;
-
- } else if( *a == 'g') {
- *type = GRF__ESG;
-
- } else if( *a == 'h') {
- *type = GRF__ESH;
-
- } else if( *a == 't') {
- *type = GRF__ESSTY;
-
- } else if( *a == '-') {
- *type = GRF__ESPSH;
- b = a + 1;
- break;
-
- } else if( *a == '+') {
- *type = GRF__ESPOP;
- b = a + 1;
- break;
-
-/* If the next character is illegal, skip to the next percent sign. */
- } else {
- continue;
- }
-
-/* The escape sequence looks legal so far, so move on to the next
- character (if any). */
- if( *(++a) ){
-
-/* If the next character is a "+" sign, the attribute needs to be reset
- to its "normal" value. Indicate this by returning a value of "-1" (all
- usable values will be positive). */
- if( *a == '+' ) {
- *value = -1;
- b = a + 1;
- break;
-
-/* Otherwise, to be a legal escape sequence, this character must be the
- first in a sequence of digits, terminated by a "+" sign.*/
- } else if( (nd = 0, astSscanf( a, "%d%n+", value, &nd ))) {
- b = a + nd + 1;
- break;
- }
- }
- }
-
-/* Was a usable escape sequence found at the start of the supplied text?
- If so, return a function value of 1 and store the number of characters in
- the escape sequence. */
- if( b && perc == text ) {
- result = 1;
- *nc = b - perc;
-
-/* Otherwise, return the preset function value of zero. If an escape
- sequence was found later in the text, return the number of characters
- prior to the escape sequence. */
- } else if( b ) {
- *nc = perc - text;
-
-/* Otherwise, if no escape sequence was found, return the length of the
- supplied text. */
- } else {
- *nc = strlen( text );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int FindMajTicks( AstMapping *map, AstFrame *frame, int axis,
- double refval, double width, double gap, double *cen, int ngood,
- double *data, double **tick_data, int *status ){
-/*
-* Name:
-* FindMajTicks
-
-* Purpose:
-* Place the major tick marks for a physical coordinate axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int FindMajTicks( AstMapping *map, AstFrame *frame, int axis,
-* double refval, double width, double gap, double *cen, int ngood,
-* double *data, double **tick_data )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* The caller supplies an array of axis values (non-normalized), sorted
-* into ascending order (with any bad values at the end), together with
-* the gap size for the axis. The array of axis values is assumed to cover
-* the entire range which the axis can take within the plotting zone. The
-* first tick mark is placed just below the smallest axis value, at a
-* position which is an integral number of gaps away from the value
-* supplied in "cen" (if a value of AST__BAD is supplied for "cen" then
-* "cen = 0.0" is assumed). Notionally, tick marks are then placed at
-* intervals given by "gap" all the way upto, and just beyond, the
-* largest axis value. However, it could be that large sections of the
-* axis are not actually present within the plotting zone. For instance,
-* an RA axis covering the two hour range from 23h to 1h (centred on
-* 0h), will have some values at zero and some at 23.999.., but there
-* will be a large range inbetween these limits which is not represented
-* in the plotting area (i.e. the 22h range from 1h to 23h centred on
-* 12h). For this reason, tick marks are removed if there are no axis
-* values inbetween the tick mark and either of its neighbours. However,
-* small "holes" in the axis coverage are allowed, and ticks marks are
-* returned covering such small holes. Extra tick marks are also placed
-* at each end of the range to guard against the supplied array of axis
-* values not entirely covering the range of axis values in the plotting
-* area.
-*
-* For SkyFrames, positions which have latitude values outside the
-* normal ranges are ignored. Longitude ranges are not checked to
-* avoid problems with CAR projections.
-*
-* The returned tick mark values are placed into their primary domain
-* using the Norm1 method, but are NOT normalised using the astNorm
-* method for the supplied Frame. Duplicate tick marks values are
-* removed from the returned list.
-
-* Parameters:
-* map
-* Mapping from the Plot Base Frame to Plot Current Frame.
-* frame
-* Pointer to the Frame.
-* axis
-* Zero-based index of the axis being used.
-* refval
-* Value to use for the other axis (index [1-axis]) when placing
-* the tick mark values into their primary domain.
-* width
-* Range of used values on the other axis (index [1-axis]).
-* gap
-* The supplied value for the gaps between ticks on the axis.
-* cen
-* Pointer to the supplied axis value at which to put a central tick.
-* Other ticks will be placed evenly on either side of this tick. If
-* AST__BAD is provided, a value will be used which would put a tick
-* at an axis value of zero. The used value is returned.
-* ngood
-* The number of good values in the array pointer to by "data" (i.e.
-* values not equal to AST__BAD).
-* data
-* A pointer to an array holding sorted axis values (non-normalized)
-* covering the entire plotting area.
-* tick_data
-* A pointer to a place at which to store a pointer to an array
-* holding the returned tick mark values for the axis.
-
-* Returned Value:
-* The number of major tick mark values stored in the array pointer to
-* by "*tick_data".
-
-* Notes:
-* - If an error has already occurred, or if this function should fail
-* for any reason, then a NULL pointer is returned in "tick_data", and zero
-* is returned for the function value.
-*/
-
-/* Local Variables: */
- double *r; /* Pointer to next tick value to be read */
- double *ticks; /* Pointer to the axis values at the major tick marks */
- double *w; /* Pointer to last tick value to be written */
- double bot; /* Lowest axis value to be displayed */
- double centre; /* The axis value at the first tick mark */
- double delta; /* A safe distance from an axis limit */
- double f; /* The nearest acceptable tick mark index */
- double tmp; /* Temporary storage */
- double top; /* Highest axis value to be displayed */
- int inc; /* This times increase in nticks */
- int k; /* Tick mark index */
- int linc; /* Last times increase in nticks */
- int lnfill; /* Last used value for nfill */
- int nfill; /* No of tick marks to extend by at edges of coverage */
- int nsame; /* Number of equal inc values there have been */
- int nticks; /* Number of major tick marks used */
- int ntnew; /* This times new value of nticks */
- int use_nfill; /* nfill value which started this run of equal inc values */
-
-/* Initialise the returned pointer. */
- *tick_data = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- nsame = 0;
- use_nfill = 0;
-
-/* Decide where to put the first major tick. Use any value supplied by
- the caller. Otherwise put it an integral number of gaps away from the
- origin. This would result in the origin being at a major tick mark. */
- if( cen && *cen != AST__BAD ) {
- centre = *cen;
- } else {
- centre = gap*floor( 0.5 + data[ 0 ]/gap );
- if( cen ) *cen = centre;
- }
-
-/* Find the number of candidate tick marks assuming an nfill value of 0. */
- nfill = 0;
- nticks = FindMajTicks2( nfill, gap, centre, ngood, data, &ticks, status );
-
-/* Loop round increasing the nfill value until an unreasonably large value
- of nfill is reached. The loop will exit early via a break statement when
- all small holes in the axis coverage are filled in. */
- lnfill = nfill;
- linc = -100000;
- while( nfill < 100 && astOK ){
-
-/* Increment the number of ticks added as "padding" at the edges of any
- gaps in the coverage of axis values. */
- nfill++;
-
-/* Form a new set of tick mark values using this new nfill value */
- ticks = (double *) astFree( (void *) ticks );
- ntnew = FindMajTicks2( nfill, gap, centre, ngood, data, &ticks, status );
-
-/* We need to know if the rate of increase of nticks has settled down to
- a constant value. Inititially increasing nfill will cause the total
- number of ticks (nticks) to increase rapidly. But this rate of
- increase will get less as any small gaps in axis coverage are filled in.
- We break out of the while loop when the rate of increase has settled
- down to a constant value (indicating that only very large holes are left
- in the axis coverage). Find the increase in the number of ticks caused by
- the increase in the nfill value made in this loop. If this increase is the
- same as the increase caused by the previous loop, increment the number of
- equal increases there have been. If the increase is different to last time,
- reset the number of equal increases to zero. */
- inc = ntnew - nticks;
- if( inc == linc ) {
- nsame++;
- } else {
- nsame = 0;
- use_nfill = nfill;
- }
-
-/* If the past 3 increases in nfill has not caused any change in the rate
- of increase of nticks, then re-create the ticks for the value of nfill
- which started the current run of equal increment values, and leave the
- loop. */
- if( nsame == 3 ) {
- ticks = (double *) astFree( (void *) ticks );
- nticks = FindMajTicks2( use_nfill, gap, centre, ngood, data, &ticks, status );
- break;
- }
-
-/* Save this times values for use in the next loop. */
- linc = inc;
- nticks = ntnew;
- }
-
-/* Remove ticks which are not within the axis ranges to be displayed.
- Ticks which are very close to the limit are moved to a safe (but
- visually negligable) distance away from the limit). */
- bot = astGetBottom( frame, axis );
- top = astGetTop( frame, axis );
- if( bot > top ) {
- tmp = top;
- top = bot;
- bot = tmp;
- }
- delta = 0.05*gap;
- r = ticks;
- for( k = 0; k < nticks; k++ ){
- if( *r != AST__BAD ) {
- if( fabs( *r - bot ) < delta ) {
- *r = bot + delta;
- } else if( fabs( *r - top ) < delta ) {
- *r = top - delta;
- } else if( *r < bot || *r > top ) {
- *r = AST__BAD;
- }
- }
- r++;
- }
-
-/* Use the Mapping to place each tick mark value in its primary domain.
- This is a sort of normalization, similar but different to that performed
- by the astNorm method. */
- Norm1( map, axis, nticks, ticks, refval, width, status );
-
-/* Check for success. */
- if( astOK ){
-
-/* Ensure that all ticks marks are offset from the "centre" value by an
- integer multiple of the gap size. This is done by changing each tick
- value to the closest acceptable value. Also ensure that values close to
- zero (i.e. less than 1E-10 of the gap size) are set exactly to zero. */
- r = ticks;
- for( k = 0; k < nticks; k++ ){
- if( *r != AST__BAD ) {
- f = floor( 0.5 + ( *r - centre )/gap );
- *r = f*gap + centre;
- if( fabs( *r ) < 1.0E-10*gap ) *r = 0.0;
- r++;
- } else {
- r++;
- }
- }
-
-/* Sort the tick values into increasing order. */
- qsort( (void *) ticks, (size_t) nticks, sizeof(double), Compared );
-
-/* Remove any duplicate or BAD tick values by shuffling the higher unique
- values down to over-write them. We subtract the centre value of both
- tick values before comparing them for equality in order to avoid
- unnecessarily removing tick marks in high precsion data. */
- r = ticks + 1;
- w = ticks;
- for( k = 1; k < nticks && astOK; k++ ){
- if( *r != AST__BAD && !EQUAL( *r-centre, *w-centre ) ){
- w++;
- *w = *r;
- }
- r++;
- }
-
-/* Modify the number of ticks to exclude the duplicate ones. */
- nticks = (int) ( w - ticks ) + 1;
-
- }
-
-/* If an error has occurred, free the memory holding the major tick mark
- values, and indicate that zero tick marks have been found. */
- if( !astOK ){
- ticks = (double *) astFree( (void *) ticks );
- nticks = 0;
- }
-
-/* Store the pointer to the major tick mark values. */
- *tick_data = ticks;
-
-/* Return the number of major ticks. */
- return nticks;
-
-}
-static int FindMajTicks2( int nfill, double gap, double centre, int ngood,
- double *data, double **tick_data, int *status ){
-/*
-* Name:
-* FindMajTicks2
-
-* Purpose:
-* Find candidate major tick marks for FindMajTicks.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int FindMajTicks2( int nfill, double gap, double centre, int ngood,
-* double *data, double **tick_data, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* A service routine for function FindMajTicks.
-
-* Parameters:
-* nfill
-* Number of tick marks to extend by at edges of coverage
-* gap
-* The supplied value for the gaps between ticks on the axis.
-* centre
-* The supplied axis value at which to put a central tick.
-* ngood
-* The number of good values in the array pointer to by "data" (i.e.
-* values not equal to AST__BAD).
-* data
-* A pointer to an array holding sorted axis values covering the
-* entire plotting area.
-* tick_data
-* A pointer to a place at which to store a pointer to an array
-* holding the returned tick mark values for the axis.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The number of major tick mark values stored in the array pointer to
-* by "*tick_data".
-
-* Notes:
-* - If an error has already occurred, or if this function should fail
-* for any reason, then a NULL pointer is returned in "tick_data", and zero
-* is returned for the function value.
-*/
-
-/* Local Variables: */
- double *ticks; /* Pointer to the axis values at the major tick marks */
- int i; /* Index of current axis value */
- int j; /* Index of filled in tick */
- int k; /* Tick mark index */
- int klast; /* Index of the previous tick mark */
- int nticks; /* Number of major tick marks used */
-
-/* Initialise the returned pointer. */
- *tick_data = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- nticks = 0;
-
-/* Reserve memory to hold a reasonable number of tick mark axis values.
- This memory is later extended as necessary. */
- ticks = (double *) astMalloc( sizeof(double)*( 6*nfill + 14 ) );
-
-/* Check that the pointer can be used. */
- if( astOK ){
-
-/* Put the first tick marks just below the lowest axis value (in case
- the grid did not sample the entire range of the axis). */
- k = floor( ( data[ 0 ] - centre )/gap );
-
- for ( i = 0; i < nfill; i++ ){
- ticks[ i ] = gap*(double)( k - nfill + i ) + centre;
- }
- ticks[ nfill ] = gap*(double)( k ) + centre;
-
-/* Initialise the number of major tick marks found so far. */
- nticks = nfill + 1;
-
-/* Loop round each of the remaining good ordered axis values. */
- klast = k;
- for( i = 1; i < ngood && astOK; i++ ) {
-
-/* Find the tick marks enclosing the axis value. The tick mark placed at
- "centre" is called tick mark zero, and tick marks are indexed (positive
- or negative) from an origin at "centre". Find the index of the more
- negative of the two tick marks enclosing the axis value. */
- k = floor( ( data[ i ] - centre )/gap );
-
-/* Ensure that the tick marks enclosing the current axis value are used.
- Some extra tick marks are used at the start and end of any gaps in
- the axis coverage. This is done to "fill in" small holes caused by the
- grid of physical coordinate values not completely covering the
- plotting area. Large holes, such as occur on an RA axis covering the 2
- hour range from 23 hours to 1 hour are left without any tick marks in
- them (the "hole" in this case is the 22 hours range from 1 hour to 23
- hours). */
- for( j = 0; j < nfill + 1; j++ ){
- if( k - klast > nfill + 2 - j ) {
- ticks = (double *) astGrow( ticks, nticks + 1, sizeof( double ) );
- if( astOK ) ticks[ nticks++ ] =
- gap*(double)( klast + nfill + 1 - j ) + centre;
- }
- if( k - klast > nfill - j ) {
- ticks = (double *) astGrow( ticks, nticks + 1, sizeof( double ) );
- if( astOK ) ticks[ nticks++ ] =
- gap*(double)( k - nfill + j ) + centre;
- }
- }
-
-/* Save the index of the current tick mark. */
- klast = k;
-
- }
-
-/* Add extra tick marks beyond the end in case the grid did not sample
- the entire range of the axis. */
- ticks = (double *) astGrow( ticks, nticks + nfill + 1, sizeof( double ) );
- for( i = 0; i < nfill && astOK; i++ ){
- ticks[ nticks++ ] = gap*(double)( klast + i + 1 ) + centre;
- }
-
- }
-
-/* If an error has occurred, free the memory holding the major tick mark
- values, and indicate that zero tick marks have been found. */
- if( !astOK ){
- ticks = (double *) astFree( (void *) ticks );
- nticks = 0;
- }
-
-/* Store the pointer to the major tick mark values. */
- *tick_data = ticks;
-
-/* Return the number of major ticks. */
- return nticks;
-
-}
-
-static int FindDPTZ( AstFrame *fr, int axis, const char *fmt,
- const char *text, int *ndp, int *ntz, int *status ) {
-/*
-* Name:
-* FindDPTZ
-
-* Purpose:
-* Find the number of decimal places and trailing zeros in a label.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int FindDPTZ( AstFrame *fr, int axis, const char *fmt,
-* const char *text, int *ndp, int *ntz, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* The supplied label is split into fields using the astFields method of
-* the supplied frame. The number of decimal places in the last
-* field is returned in *ndp, and the total number of trailing zeros
-* (excluding exponents) is returned in *ntz.
-
-* Parameters:
-* fr
-* The frame.
-* axis
-* The axis index to which the label applies.
-* fmt
-* The format string used to format the label.
-* text
-* The text of the label.
-* ndp
-* Pointer to an int in which to return the number of decimal
-* places in the final field.
-* ntz
-* Pointer to an int in which to return the number of trailing zeros.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if and only if a non-zero digit is found in any field.
-
-*/
-
-/* Local Constants: */
-#define MAXFLD 10
-
-/* Local Variables: */
- char *fields[ MAXFLD ];
- const char *a;
- const char *dot;
- const char *ff;
- double junk;
- int fnc;
- int i;
- int j;
- int l;
- int mxnd;
- int nc[ MAXFLD ];
- int nf;
- int result;
-
-/* Initialise */
- *ndp = 0;
- *ntz = 0;
- result = 0;
-
-/* Check inherited status */
- if( !astOK ) return result;
-
-/* Split the label up into fields. */
- nf = astFields( fr, axis, fmt, text, MAXFLD, fields, nc, &junk );
- if( nf > 0 ) {
-
-/* Search the last fields (assumed to be the least significant) for a
- decimal point. */
- ff = fields[ nf - 1 ];
- fnc = nc[ nf - 1 ];
- dot = strchr( ff, '.' );
- if( dot && ( ff - dot >= fnc ) ) dot = NULL;
-
-/* Find the number of digits following the decimal point. */
- if( dot ) {
- *ndp = strspn( dot + 1, "0123456789" );
- mxnd = fnc - ( dot - ff ) - 1;
- if( *ndp > mxnd ) *ndp = mxnd;
- } else {
- *ndp = 0;
- }
-
-/* Loop through all the fields, from least significant to most significant,
- counting the number of trailing zeros. */
- *ntz = 0;
- for( i = nf - 1; i >= 0; i-- ) {
- l = strspn( fields[ i ], "-+0123456789." );
- if( l > nc[ i ] ) l = nc[ i ];
- a = fields[ i ] + l - 1;
- for( j = l - 1; j >= 0; j--,a-- ){
- if( *a == '0' ) {
- (*ntz)++;
- } else if( isdigit( *a ) ) {
- result = 1;
- break;
- }
- }
- if( j >= 0 ) break;
- }
- }
-
-/* Return the result. */
- return result;
-
-/* Undefine local constants: */
-#undef MAXFLD
-
-}
-
-static int FindString( int n, const char *list[], const char *test,
- const char *text, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* FindString
-
-* Purpose:
-* Find a given string within an array of character strings.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int FindString( int n, const char *list[], const char *test,
-* const char *text, const char *method, const char *class, int *status )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-* This function identifies a supplied string within a supplied
-* array of valid strings, and returns the index of the string within
-* the array. The test option may not be abbreviated, but case is
-* insignificant.
-
-* Parameters:
-* n
-* The number of strings in the array pointed to be "list".
-* list
-* A pointer to an array of legal character strings.
-* test
-* A candidate string.
-* text
-* A string giving a description of the object, parameter,
-* attribute, etc, to which the test value refers.
-* This is only for use in constructing error messages. It should
-* start with a lower case letter.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The index of the identified string within the supplied array, starting
-* at zero.
-
-* Notes:
-* - A value of -1 is returned if an error has already occurred, or
-* if this function should fail for any reason (for instance if the
-* supplied option is not specified in the supplied list).
-
-*/
-
-/* Local Variables: */
- int ret; /* The returned index */
-
-/* Check global status. */
- if( !astOK ) return -1;
-
-/* Compare the test string with each element of the supplied list. Leave
- the loop when a match is found. */
- for( ret = 0; ret < n; ret++ ) {
- if( !Ustrcmp( test, list[ ret ], status ) ) break;
- }
-
-/* Report an error if the supplied test string does not match any element
- in the supplied list. */
- if( ret >= n ) {
- astError( AST__OPT, "%s(%s): Illegal value '%s' supplied for %s.", status,
- method, class, test, text );
- ret = -1;
- }
-
-/* Return the answer. */
- return ret;
-}
-
-static char *FindWord( char *ptr, const char *d, const char **p, int *status ) {
-/*
-* Name:
-* FindWord
-
-* Purpose:
-* Return a copy of the next word in a supplied string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* char *FindWord( char *ptr, const char *d, const char **p, int *status )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-* This function locates the start and end of the first word in the
-* string pointed to by *p, and returns a copy of the word. The pointer
-* *p is modified to point to the start of the following word (if any).
-* The characters which delimit words are supplied in string "d".
-
-* Parameters:
-* ptr
-* A pointer to a character string in which to store the returned
-* word. The memory holding this string should have been allocated
-* using one of the functions in the AST "memory" module. The memory
-* area will be modified in size to fit the returned word. A NULL
-* pointer may be supplied if no memory has yet been allocated.
-* Any memory pointed to by ptr is freed if a NULL pointer is
-* returned by this function (i.e. if no word is found).
-* d
-* A string holding the characters which are to be used as word
-* delimiters.
-* p
-* The address of a character string pointer. On entry, this pointer
-* identifies the start of the string to be searched. On exit, it is
-* modified to point to the start of the following word. It is
-* returned NULL if there are no more words.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated character string holding the
-* next word, or NULL if no word could be found.
-
-*/
-
-/* Local Variables: */
- const char *a, *b, *c;
- char *ret;
- int nc;
-
-/* Free any allocated memory and return if any of the supplied pointers
- (except ptr) is NULL, or if an error has occurred. */
- if( !astOK || !d || !p || !*p ) {
- (void) astFree( (void *) ptr );
- return NULL;
- }
-
-/* Get a pointer to the first character which is not in "d". Terminate
- the loop if a null character is encountered. */
- a = *p;
- while( *a && strchr( d, (int) *a ) ) a++;
-
-/* Get a pointer to the next character which is in "d". Terminate
- the loop if a null character is encountered. */
- b = a;
- while( *b && !strchr( d, (int) *b ) ) b++;
-
-/* Get a pointer to the next character which is not in "d". Terminate
- the loop if a null character is encountered. */
- c = b;
- while( *c && strchr( d, (int) *c ) ) c++;
-
-/* Adjust the supplied pointer so that it points to the start of the next
- word. */
- if( *c ){
- *p = c;
- } else {
- *p = NULL;
- }
-
-/* Get a null-terminated copy of the word between a and b. */
- nc = b - a;
- if( nc > 0 ) {
- ret = (char *) astStore( (void *) ptr, (void *) a, (size_t) (nc + 1) );
- ret[ nc ] = 0;
- } else {
- ret = astFree( (void *) ptr );
- }
-
- return ret;
-}
-
-static const char *SplitValue( AstPlot *this, const char *value, int axis,
- int *split, int *status ) {
-/*
-* Name:
-* FormatValue
-
-* Purpose:
-* Format a coordinate value for a Frame axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* const char *SplitValue( AstPlot *this, const char *value,
-* int axis, int *split )
-
-* Class Membership:
-* Plot member function
-
-* Description:
-* This function splits long formatted values (such as the date/time
-* format produced by the TimeFrame class) if possible onto two lines
-* by inclusion of Plot escape sequences.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* value
-* The formatted coordinate value.
-* axis
-* Indicates whether or not short lines should be split by
-* including a blank first line. If zero, and if "*split" is non-zero,
-* then short lines are put onto the second line,and the first line
-* is blank.
-* split
-* Pointer to an integer that controls behaviour:
-*
-* 0 - Split the line if it is too long, and return a value of +1
-* in *split.
-* 1 - Split the line even if it does not need splitting, making
-* the first line blank and the second line containing all the
-* supplied text (*split is unchanged on exit).
-
-* Returned Value:
-* A pointer to a static buffer containing a null-terminated string
-* holding the (possibly split) formatted value. This will be a copy of
-* the supplied pointer if the string does not need to be split.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS
- char *d;
- const char *result;
- float rsp;
- int aft_end;
- int aft_start;
- int bef_end;
- int bef_start;
- int i;
- int id;
- int idmin;
- int imin;
- int l;
- int naft;
- int nbef;
- int nlong;
- int nshort;
- int nsp;
-
-/* Initialise */
- result = value;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* Do nothing more if the formatted value already contains graphical
- escape sequences, or if graphical escapes sequences are not being
- interpreted. */
- if( value && astGetEscape( this ) && !HasEscapes( value, status ) ) {
-
-/* Attempt to find a space close to the centre of the formatted string. */
- l = strlen( value );
- idmin = 2*l;
- imin = -1;
- for( i = 0; i < l; i++ ) {
- if( isspace( value[ i ] ) ) {
- id = abs( i - l/2 );
- if( id < idmin ) {
- idmin = id;
- imin = i;
- }
- }
- }
-
-/* We split the line if previous lines have been split (i.e. if *split was
- non-zero on entry) or if this line is long AND it contains a space. This
- means that a sequence of long labels will not be split unless they contain
- spaces. */
- if( *split || ( l > 9 && imin != -1 ) ) {
- *split = 1;
-
-/* Initialse the pointer into the returned buffer at which the next
- character will be placed. */
- d = splitvalue_buff;
-
-/* If no spaces were found... */
- if( imin == -1 ) {
-
-/* If axis is zero, we add a blank first line. */
- if( axis == 0 ) {
-
-/* Fill the first line with spaces. */
- for( i = 0; i < l; i++ ) *(d++) = ' ';
-
-/* Add an escape sequence that moves down by one character height. */
- d += sprintf( d, "%%v170+" );
- }
-
-/* Add the whole of the supplied text. */
- for( i = 0; i < l; i++ ) *(d++) = value[ i ];
-
-/* If a space was found... */
- } else {
-
-/* Find the first and last non-blank characters before the mid-space. */
- bef_start = -1;
- bef_end = -1;
- for( i = 0; i < imin; i++ ) {
- if( !isspace( value[ i ] ) ) {
- if( bef_start == -1 ) bef_start = i;
- bef_end = i;
- }
- }
-
-/* Find the first and last non-blank characters after the mid-space. */
- aft_start = -1;
- aft_end = -1;
- for( i = imin + 1; i < l; i++ ) {
- if( !isspace( value[ i ] ) ) {
- if( aft_start == -1 ) aft_start = i;
- aft_end = i;
- }
- }
-
-/* How many significant characters before and after the space? */
- nbef = bef_end - bef_start + 1;
- naft = aft_end - aft_start + 1;
-
-/* Get the lengths of the longer and shorter line. */
- if( nbef > naft ) {
- nlong = nbef;
- nshort = naft;
- } else {
- nlong = naft;
- nshort = nbef;
- }
-
-/* Find the fractional number of spaces before the significant text of the
- shorter line.*/
- rsp = 0.5*( nlong - nshort + 1 );
-
-/* If the top line is the shorter line, put some spaces in at the start. */
- if( nbef < naft ) {
- nsp = (int) rsp;
- for( i = 0; i < nsp; i++ ) *(d++) = ' ';
- }
-
-/* Add the significant text from the top line. */
- for( i = bef_start; i <= bef_end; i++ ) *(d++) = value[ i ];
-
-/* Add an escape sequence that moves down by one character height. */
- d += sprintf( d, "%%v100+" );
-
-
-/* Add an escape sequence that moves to the left by the required amount. */
- d += sprintf( d, "%%<%d+", (int) ( 60.0*( (float) nlong - rsp )) );
-
-/* Add the significant text from the bottom line. */
- for( i = aft_start; i <= aft_end; i++ ) *(d++) = value[ i ];
-
- }
-
-/* Terminate it. */
- *d = 0;
-
-/* Return a pointer to the buffer. */
- result = splitvalue_buff;
- }
- }
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-static AstFrameSet *Fset2D( AstFrameSet *fset, int ifrm, int *status ) {
-/*
-* Name:
-* Fset2D
-
-* Purpose:
-* Create a FrameSet with no more than 2 dimensions for a given Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* AstFrameSet *Fset2D( AstFrameSet *fset, int ifrm, int *status )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-* This function checks a specified Frame in the supplied FrameSet.
-* If the Frame has more than 2 dimensions, a new Frame is added to
-* the FrameSet containing just the first two axes of the specified
-* Frame. A PermMap is used to connect this Frame to the specified
-* Frame, which supplied bad values for any missing axes. If the
-* specified Frame is the base Frame in the supplied FrameSet, then the
-* new Frame becomes the base Frame in the returned FrameSet. Like-wise,
-* if the specified Frame is the current Frame, then the new Frame
-* will be the current Frame in the returned FrameSet.
-*
-* If the specified Frame does not have more than 2 axes, then a clone
-* of the FrameSet pointer is returned, otherwise the returned pointer
-* points to a copy of the supplied FrameSet with the new 2-D Frame
-* added.
-
-* Parameters:
-* fset
-* Pointer to the FrameSet.
-* ifrm
-* The index of the Frame to check. This should be AST__BASE or
-* AST_CURRENT.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a FrameSet in which the Frame with index given by ifrm
-* has no more than 2 axes.
-*/
-
-/* Local Variables: */
- AstFrame *frm;
- AstFrame *newfrm;
- AstFrameSet *ret;
- AstPermMap *map;
- double zero;
- int *inperm;
- int axes[2];
- int i;
- int ic;
- int nax;
-
-/* Check the inherited status. */
- if( !astOK ) return NULL;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- map = NULL;
-
-/* Get a pointer to the requested Frame in the supplied FrameSet. */
- frm = astGetFrame( fset, ifrm );
-
-/* See how many dimensions the specified Frame of the supplied FrameSet
- has. */
- nax = astGetNaxes( frm );
-
-/* If it is more than 2-dimensionbal, create a 2D Frame by picking
- axes 1 and 2 from the original Frame. */
- if( nax > 2 ) {
- axes[ 0 ] = 0;
- axes[ 1 ] = 1;
- newfrm = astPickAxes( frm, 2, axes, NULL );
-
-/* Create a PermMap to describe the mapping between the two Frames.
- Use zero as the value for unknown axes (the optional mapping which
- can be returned by astPickAxes uses AST__BAD for unknown axes). */
- inperm = (int *) astMalloc( sizeof(int)*(size_t) nax );
- if( astOK ){
- inperm[ 0 ] = 0;
- inperm[ 1 ] = 1;
- for( i = 2; i < nax; i++ ) inperm[ i ] = -1;
- zero = 0.0;
- map = astPermMap( nax, inperm, 2, axes, &zero, "", status );
- inperm = (int *) astFree( (void *) inperm );
- }
-
-/* Get a copy of the supplied FrameSet. */
- ret = astCopy( fset );
-
-/* Add the new Frame to the FrameSet (it becomes the current Frame). */
- ic = astGetCurrent( ret );
- astAddFrame( ret, ifrm, map, newfrm );
- newfrm = astAnnul( newfrm );
-
-/* If the new Frame was derived from the base frame, set the new base
- Frame, and re-instate the original current Frame */
- if( ifrm == AST__BASE ){
- astSetBase( ret, astGetCurrent( ret ) );
- astSetCurrent( ret, ic );
- }
-
-/* If the specified Frame in the supplied FrameSet is 2-dimensional, just
- return a clone of it. */
- } else {
- ret = astClone( fset );
- }
-
-/* Annul the pointer to the original Frame. */
- frm = astAnnul( frm );
-
- return ret;
-
-}
-
-static int FullForm( const char *list, const char *test, const char *text,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* FullForm
-
-* Purpose:
-* Identify the full form of an option string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int FullForm( const char *list, const char *test, const char *text,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-* This function identifies a supplied test option within a supplied
-* list of valid options, and returns the index of the option within
-* the list. The test option may be abbreviated, and case is
-* insignificant.
-
-* Parameters:
-* list
-* A list of space separated option strings.
-* test
-* A candidate option string.
-* text
-* A string giving the context in which the supplied test option
-* was supplied. For instance, this may be an attribute setting string.
-* This is only for use in constructing error messages.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The index of the identified option within the supplied list, starting
-* at zero.
-
-* Notes:
-* - A value of -1 is returned if an error has already occurred, or
-* if this function should fail for any reason (for instance if the
-* supplied option is not uniquely specified in the supplied list).
-
-*/
-
-/* Local Variables: */
- char *option; /* Pointer to a copy of the next option */
- const char *p; /* Pointer to the start of the next word */
- int i; /* Current option index */
- int len; /* Length of supplied option */
- int nmatch; /* Number of matching options */
- int ret; /* The returned index */
-
-/* Initialise the answer to indicate that the option has not been
- uniquely identified. */
- ret = -1;
-
-/* Check global status. */
- if( !astOK ) return ret;
-
-/* Save the number of characters in the supplied test option (excluding
- trailing spaces). */
- len = ChrLen( test, status );
-
-/* Compare the supplied test option against each of the known options in
- turn. Count the number of matches. */
- nmatch = 0;
- p = list;
- option = FindWord( NULL, " ", &p, status );
- i = 0;
- while( option ){
-
-/* If the test string and the current option are identical (including
- length). use the current option. */
-
-/* If every character in the supplied label matches the corresponding
- character in the current test label we have a match. Increment the
- number of matches and save the current item index. If the test string
- and the current option are identical (including length), use the
- current option. */
-
- if( !Ustrncmp( test, option, len, status ) ) {
- ret = i;
- if( ChrLen( option, status ) == len ) {
- nmatch = 1;
- option = astFree( option );
- break;
- } else {
- nmatch++;
- }
- }
-
-/* Get a pointer to the next option. */
- option = FindWord( option, " ", &p, status );
- i++;
- }
-
-/* Report an error if no match was found, and return -1. */
- if( !nmatch ){
- astError( AST__OPT, "%s(%s): Option '%.*s' is unknown in '%.*s'.", status,
- method, class, len, test, ChrLen( text, status ), text );
- ret = -1;
-
-/* Report an error if the label was ambiguous, and return -1. */
- } else if( nmatch > 1 ){
- astError( AST__OPT, "%s(%s): Option '%.*s' is ambiguous in '%.*s'.", status,
- method, class, len, test, ChrLen( text, status ), text );
- ret = -1;
- }
-
-/* Return the answer. */
- return ret;
-}
-
-static void GAttr( AstPlot *this, int attr, double value, double *old_value,
- int prim, const char *method, const char *class, int *status ) {
-/*
-*
-* Name:
-* GAttr
-
-* Purpose:
-* Call the GAttr Grf function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void GAttr( AstPlot *this, int attr, double value, double *old_value,
-* int prim, const char *method, const char *class, int *status )
-
-* Class Membership:
-* Plot private function.
-
-* Description:
-* This function calls the GAttr grf function to enquire or set a
-* graphics attribute value. It either calls the version registered using
-* astGrfSet, or the version in the linked grf module. The linked version
-* is used if the Grf attribute is zero, or if no function has been
-* registered for GAttr using astGrfSet.
-
-* Parameters:
-* this
-* The Plot.
-* attr
-* An integer value identifying the required attribute. The
-* following symbolic values are defined in grf.h:
-*
-* GRF__STYLE - Line style.
-* GRF__WIDTH - Line width.
-* GRF__SIZE - Character and marker size scale factor.
-* GRF__FONT - Character font.
-* GRF__COLOUR - Colour index.
-* value
-* A new value to store for the attribute. If this is AST__BAD
-* no value is stored.
-* old_value
-* A pointer to a double in which to return the attribute value.
-* If this is NULL, no value is returned.
-* prim
-* The sort of graphics primitive to be drawn with the new attribute.
-* Identified by the following values defined in grf.h:
-* GRF__LINE
-* GRF__MARK
-* GRF__TEXT
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- int grf_status; /* Status retruned from Grf function */
-
-/* Check the global error status. Also return if there is nothing to do. */
- if ( !astOK || ( !old_value && value == AST__BAD ) ) return;
-
-/* Since we are about to call an external function which may not be
- thread safe, prevent any other thread from executing the following code
- until the current thread has finished executing it. */
- LOCK_MUTEX2;
-
-/* If the Grf attribute is set to a non-zero value, use the Grf function
- registered using astGrfSet (so long as a function has been supplied).
- This called via a wrapper which adapts the interface to suit the
- language in which the function is written. */
- if( astGetGrf( this ) && this->grffun[ AST__GATTR ] ) {
- grf_status = ( *( this->GAttr ) )( this, attr, value, old_value, prim, status );
-
-/* Otherwise, use the function in the external Grf module, selected at
- link-time using ast_link options.*/
- } else {
- grf_status = astGAttr( attr, value, old_value, prim );
- }
-
-/* Allow the next thread to proceed. */
- UNLOCK_MUTEX2;
-
-/* Report an error if anything went wrong. */
- if( !grf_status ) {
- astError( AST__GRFER, "%s(%s): Graphics error in astGAttr. ", status, method,
- class );
- }
-
-}
-
-static AstKeyMap *GetGrfContext( AstPlot *this, int *status ){
-/*
-*++
-* Name:
-c astGetGrfContext
-f AST_GETGRFCONTEXT
-
-* Purpose:
-* Return the KeyMap that describes a Plot's graphics context.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "plot.h"
-c AstKeyMap *astGetGrfContext( AstPlot *this )
-f RESULT = AST_GETGRFCONTEXT( THIS, STATUS )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-c This function
-f This routine
-* returns a reference to a KeyMap that will be passed to any drawing
-c functions registered using astGrfSet.
-f routines registered using AST_GRFSET.
-* This KeyMap can be used by an application to pass information to
-c the drawing functions
-f the drawing routines
-* about the context in which they are being called. The contents of
-* the KeyMap are never accessed byt the Plot class itself.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Plot.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astGetGrfContext()
-f AST_GETGRFCONTEXT = INTEGER
-* A pointer to the graphics context KeyMap. The returned pointer
-* should be annulled when it is no longer needed.
-
-*--
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Ensure that a grfcon KeyMap exists. */
- (void) astGrfConID(this);
-
-/* Return a cloned pointer to the KeyMap. */
- return astClone( this->grfcontext );
-}
-
-AstKeyMap *astGrfConID_( AstPlot *this, int *status ) {
-/*
-*+
-*
-* Name:
-* astGrfConID
-
-* Purpose:
-* Ensure a GrfContext KeyMap exists and return an ID for it.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "plot.h"
-* AstKeyMap *astGrfConID( AstPlot *this )
-
-* Class Membership:
-* Plot private function.
-
-* Description:
-* This function creates a GrfContext KeyMap if the Plot does not
-* currently have one, and returns an ID for it.
-
-* Parameters:
-* this
-* The Plot.
-
-* Returned Value:
-* ID for the GrfContext KeyMap.
-
-*-
-*/
- if( !this->grfcontext ) {
- this->grfcontext = astKeyMap("", status );
- this->grfcontextID = astMakeId( astClone( this->grfcontext ) );
- astExempt( this->grfcontextID );
- }
- return this->grfcontextID;
-}
-
-static void GScales( AstPlot *this, float *alpha, float *beta,
- const char *method, const char *class, int *status ) {
-/*
-*
-* Name:
-* GScales
-
-* Purpose:
-* Call the GScales Grf function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void GScales( AstPlot *this, float *alpha, float *beta,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* Plot private function.
-
-* Description:
-* This function calls the GScales grf function, either calling the
-* version registered using astGrfSet, or the version in the linked grf
-* module. The linked version is used if the Grf attribute is zero, or if
-* no function has been registered for GScales using astGrfSet.
-
-* Parameters:
-* this
-* The Plot.
-* alpha
-* A pointer to the location at which to return the scale for the
-* X axis (i.e. Xnorm = alpha*Xworld).
-* beta
-* A pointer to the location at which to return the scale for the
-* Y axis (i.e. Ynorm = beta*Yworld).
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- int grf_status; /* Status retruned from Grf function */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Since we are about to call an external function which may not be
- thread safe, prevent any other thread from executing the following code
- until the current thread has finished executing it. */
- LOCK_MUTEX2;
-
-/* If the Grf attribute is set to a non-zero value, use the Grf function
- registered using astGrfSet (so long as a function has been supplied).
- This is called via a wrapper which adapts the interface to suit the
- language in which the function is written. */
- if( astGetGrf( this ) && this->grffun[ AST__GSCALES ] ) {
- grf_status = ( *( this->GScales ) )( this, alpha, beta, status );
-
-/* Otherwise, use the function in the external Grf module, selected at
- link-time using ast_link options.*/
- } else {
- grf_status = astGScales( alpha, beta );
- }
-
-/* Allow the next thread to proceed. */
- UNLOCK_MUTEX2;
-
-/* Check neither value is zero. */
- if( grf_status && ( *alpha == 0.0 || *beta == 0.0 ) ) {
- astError( AST__GRFER, "astGScales: Returned axis scales are %g and %g "
- "but zero is illegal!", status, *alpha, *beta );
- grf_status = 0;
- }
-
-/* Report an error if anything went wrong, and return safe values. */
- if( !grf_status ) {
- astError( AST__GRFER, "%s(%s): Graphics error in astGScales. ", status, method,
- class );
- *alpha = 1.0;
- *beta = 1.0;
- }
-
-}
-
-static int GCap( AstPlot *this, int cap, int value, int *status ){
-/*
-*
-* Name:
-* GCap
-
-* Purpose:
-* Call the GCap Grf function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int GCap( AstPlot *this, int cap, int value, int *status )
-
-* Class Membership:
-* Plot private function.
-
-* Description:
-* This function calls the GCap grf function to inquire a capability
-* of the grf module, either calling the version registered using
-* astGrfSet, or the version in the linked grf module. The linked
-* version is used if the Grf attribute is zero, or if no function
-* has been registered for GCap using astGrfSet.
-
-* Parameters:
-* this
-* The Plot.
-* cap
-* The capability to be inquired aboue.
-* value
-* The value ot assign to the capability.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the grf module is capabale of performing the action
-* requested by "cap".
-
-*/
-
-/* Local Variables: */
- int result; /* Value retruned from Grf function */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Since we are about to call an external function which may not be
- thread safe, prevent any other thread from executing the following code
- until the current thread has finished executing it. */
- LOCK_MUTEX2;
-
-/* If the Grf attribute is set to a non-zero value, use the Grf function
- registered using astGrfSet (so long as a function has been supplied).
- This is called via a wrapper which adapts the interface to suit the
- language in which the function is written. */
- if( astGetGrf( this ) && this->grffun[ AST__GCAP ] ) {
- result = ( *( this->GCap ) )( this, cap, value, status );
-
-/* Otherwise, use the function in the external Grf module, selected at
- link-time using ast_link options.*/
- } else {
- result = astGCap( cap, value );
-
- }
-
-/* Allow the next thread to proceed. */
- UNLOCK_MUTEX2;
-
-/* Return the result. */
- return result;
-}
-
-static void GenCurve( AstPlot *this, AstMapping *map, int *status ){
-/*
-*++
-* Name:
-c astGenCurve
-f AST_GENCURVE
-
-* Purpose:
-* Draw a generalized curve.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "plot.h"
-c void astGenCurve( AstPlot *this, astMapping *map )
-f CALL AST_GENCURVE( THIS, MAP )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-c This function draws a general user-defined curve defined by the
-f This routine draws a general user-defined curve defined by the
-* supplied Mapping. Note that the curve is transformed into graphical
-* coordinate space for plotting, so that a straight line in
-* physical coordinates may result in a curved line being drawn if
-* the Mapping involved is non-linear. Any discontinuities in the
-* Mapping between physical and graphical coordinates are
-c catered for, as is any clipping established using astClip.
-f catered for, as is any clipping established using AST_CLIP.
-*
-c If you need to draw simple straight lines (geodesics), astCurve
-c or astPolyCurve will usually be easier to use and faster.
-f If you need to draw simple straight lines (geodesics), AST_CURVE
-f or AST_POLYCURVE will usually be easier to use and faster.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Plot.
-c map
-f MAP = INTEGER (Given)
-* Pointer to a Mapping. This Mapping should have 1 input
-* coordinate representing offset along the required curve,
-* normalized so that the start of the curve is at offset 0.0,
-* and the end of the curve is at offset 1.0. Note, this offset
-* does not need to be linearly related to distance along the curve.
-* The number of output coordinates should equal the number of axes
-* in the current Frame of the Plot. The Mapping should map a
-* specified offset along the curve, into the corresponding
-* coordinates in the current Frame of the Plot. The inverse
-* transformation need not be defined.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - An error results if the base Frame of the Plot is not 2-dimensional.
-* - An error also results if the transformation between the
-* current and base Frames of the Plot is not defined (i.e. the
-* Plot's TranInverse attribute is zero).
-*--
-*/
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- const char *class; /* Object class */
- const char *method; /* Current method */
- double d[ CRV_NPNT ]; /* Offsets to evenly spaced points along curve */
- double tol; /* Absolute tolerance value */
- double x[ CRV_NPNT ]; /* X coords at evenly spaced points along curve */
- double y[ CRV_NPNT ]; /* Y coords at evenly spaced points along curve */
- int i; /* Loop count */
- int naxes; /* No. of axes in the base Frame */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* Store the current method, and the class of the supplied object for use
- in error messages.*/
- method = "astGenCurve";
- class = astGetClass( this );
-
-/* Check the base Frame of the Plot is 2-D. */
- naxes = astGetNin( this );
- if( naxes != 2 && astOK ){
- astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the base "
- "Frame of the supplied %s is invalid - this number should "
- "be 2.", status, method, class, naxes, class );
- }
-
-/* Only proceed if there has been no error. */
- if( astOK ){
-
-/* Initialise the bounding box for primitives produced by this call. */
- if( !Boxp_freeze ) {
- Boxp_lbnd[ 0 ] = FLT_MAX;
- Boxp_lbnd[ 1 ] = FLT_MAX;
- Boxp_ubnd[ 0 ] = FLT_MIN;
- Boxp_ubnd[ 1 ] = FLT_MIN;
- }
-
-/* Establish the correct graphical attributes as defined by attributes
- with the supplied Plot. */
- astGrfAttrs( this, AST__CURVE_ID, 1, GRF__LINE, method, class );
-
-/* Set up the externals used to communicate with the Map4 function... */
- Map4_ncoord = astGetNout( this );
- Map4_plot = this;
- Map4_map = astGetMapping( this, AST__BASE, AST__CURRENT );
- Map4_umap = map;
-
-/* Convert the tolerance from relative to absolute graphics coordinates. */
- tol = astGetTol( this )*MAX( this->xhi - this->xlo,
- this->yhi - this->ylo );
-
-/* Now set up the external variables used by the Crv and CrvLine function. */
- Crv_scerr = ( astGetLogPlot( this, 0 ) ||
- astGetLogPlot( this, 1 ) ) ? 100.0 : 1.5;
- Crv_ux0 = AST__BAD;
- Crv_tol = tol;
- Crv_limit = 0.5*tol*tol;
- Crv_map = Map4;
- Crv_ink = 1;
- Crv_xlo = this->xlo;
- Crv_xhi = this->xhi;
- Crv_ylo = this->ylo;
- Crv_yhi = this->yhi;
- Crv_out = 1;
- Crv_xbrk = Curve_data.xbrk;
- Crv_ybrk = Curve_data.ybrk;
- Crv_vxbrk = Curve_data.vxbrk;
- Crv_vybrk = Curve_data.vybrk;
- Crv_clip = astGetClip( this ) & 1;
-
-/* Set up a list of points spread evenly over the curve. */
- for( i = 0; i < CRV_NPNT; i++ ){
- d[ i ] = ( (double) i)/( (double) CRV_NSEG );
- }
-
-/* Map these points into graphics coordinates. */
- Map4( CRV_NPNT, d, x, y, method, class, status GLOBALS_NAME );
-
-/* Use Crv and Map4 to draw the curve. */
- Crv( this, d, x, y, 0, NULL, NULL, method, class, status );
-
-/* End the current poly line. */
- Opoly( this, method, class, status );
-
-/* Tidy up the static data used by Map4. */
- Map4( 0, NULL, NULL, NULL, method, class, status GLOBALS_NAME );
-
-/* If no part of the curve could be drawn, set the number of breaks and the
- length of the drawn curve to zero. */
- if( Crv_out ) {
- Crv_nbrk = 0;
- Crv_len = 0.0F;
-
-/* Otherwise, add an extra break to the returned structure at the position of
- the last point to be plotted. */
- } else {
- Crv_nbrk++;
- if( Crv_nbrk > AST__PLOT_CRV_MXBRK ){
- astError( AST__CVBRK, "%s(%s): Number of breaks in curve "
- "exceeds %d.", status, method, class, AST__PLOT_CRV_MXBRK );
- } else {
- *(Crv_xbrk++) = (float) Crv_xl;
- *(Crv_ybrk++) = (float) Crv_yl;
- *(Crv_vxbrk++) = (float) -Crv_vxl;
- *(Crv_vybrk++) = (float) -Crv_vyl;
- }
- }
-
-/* Store extra information about the curve in the returned structure, and
- purge any zero length sections. */
- Curve_data.length = Crv_len;
- Curve_data.out = Crv_out;
- Curve_data.nbrk = Crv_nbrk;
- PurgeCdata( &Curve_data, status );
-
-/* Annul the Mapping. */
- Map4_map = astAnnul( Map4_map );
-
-/* Re-establish the original graphical attributes. */
- astGrfAttrs( this, AST__CURVE_ID, 0, GRF__LINE, method, class );
-
- }
-
-/* Return. */
- return;
-
-}
-
-static int GetLabelUnits( AstPlot *this, int axis, int *status ) {
-/*
-* Name:
-* GetLabelUnits
-
-* Purpose:
-* Return the value of the LabelUnits attribute for a Plot axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int GetLabelUnits( AstPlot *this, int axis, int *status )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-* This function returns the value of the LabelUnits attribute for a
-* Plot axis, supplying a suitable default if not set.
-
-* Parameters:
-* this
-* The Plot.
-* axis
-* The axis index (zero based).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The attribute value.
-
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* The current Frame in the Plot */
- AstFrame *primframe; /* The primary Frame holding the requested axis */
- AstSystemType system; /* The SkyFrame System attribute */
- int primaxis; /* Index of requested axis in the primary frame */
- int ret; /* The returned value */
-
-/* Initialise. */
- ret = 0;
-
-/* Check global status. */
- if( !astOK ) return ret;
-
-/* If a value has been set, return it. */
- ret = this->labelunits[ axis ];
-
-/* If no value has been set, find a default. */
- if( ret == -1 ) {
-
-/* Assume "no" for any SkyAxis axes within the current frame of the Plot,
- and "yes" for other axes. Get a pointer to the current Frame of the
- Plot. */
- fr = astGetFrame( this, AST__CURRENT );
-
-/* The current Frame may be a CmpFrame. So find the primary Frame containing
- the requested axis. The primary Frame is guaranteed not to be a CmpFrame. */
- astPrimaryFrame( fr, axis, &primframe, &primaxis );
-
-/* If the primary Frame is a SkyFrame representing ICRS, equatorial, ecliptic,
- galactic or supergalactic coords, use a default of "no" for LabelUnits.
- Otherwise use a default of "yes". */
- ret = 1;
- if( IsASkyFrame( (AstObject *) primframe, status ) ) {
- system = astGetSystem( primframe );
- if( system == AST__ICRS ||
- system == AST__FK4 ||
- system == AST__FK4_NO_E ||
- system == AST__FK5 ||
- system == AST__GAPPT ||
- system == AST__ECLIPTIC ||
- system == AST__GALACTIC ||
- system == AST__SUPERGALACTIC ) ret = 0;
- }
-
-/* Annul the frame pointers. */
- primframe = astAnnul( primframe );
- fr = astAnnul( fr );
- }
-
-/* Return the answer. */
- return ret;
-}
-
-static void GFlush( AstPlot *this, const char *method,
- const char *class, int *status ) {
-/*
-*
-* Name:
-* GFlush
-
-* Purpose:
-* Call the Gflush Grf function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void GFlush( AstPlot *this, const char *method,
-* const char *class, int *status ) {
-
-* Class Membership:
-* Plot private function.
-
-* Description:
-* This function calls the Gflush grf function to flush graphics, either
-* calling the version registered using astGrfSet, or the version in the
-* linked grf module. The linked version is used if the Grf attribute
-* is zero, or if no function has been registered for Gflush using
-* astGrfSet.
-
-* Parameters:
-* this
-* The Plot.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- int grf_status; /* Status retruned from Grf function */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Since we are about to call an external function which may not be
- thread safe, prevent any other thread from executing the following code
- until the current thread has finished executing it. */
- LOCK_MUTEX2;
-
-/* If the Grf attribute is set to a non-zero value, use the Grf function
- registered using astGrfSet (so long as a function has been supplied).
- This called via a wrapper which adapts the interface to suit the
- language in which the function is written. */
- if( astGetGrf( this ) && this->grffun[ AST__GFLUSH ] ) {
- grf_status = ( *( this->GFlush ) )( this, status );
-
-/* Otherwise, use the function in the external Grf module, selected at
- link-time using ast_link options.*/
- } else {
- grf_status = astGFlush();
- }
-
-/* Allow the next thread to proceed. */
- UNLOCK_MUTEX2;
-
-/* Report an error if anything went wrong. */
- if( !grf_status ) {
- astError( AST__GRFER, "%s(%s): Graphics error in astGFlush. ", status, method,
- class );
- }
-
-}
-
-static void GLine( AstPlot *this, int n, const float *x,
- const float *y, const char *method,
- const char *class, int *status ) {
-/*
-*
-* Name:
-* GLine
-
-* Purpose:
-* Call the Gline Grf function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void GLine( AstPlot *this, int n, const float *x,
-* const float *y, const char *method,
-* const char *class, int *status ) {
-
-* Class Membership:
-* Plot private function.
-
-* Description:
-* This function calls the Gline grf function to draw a polyline, either
-* calling the version registered using astGrfSet, or the version in the
-* linked grf module. The linked version is used if the Grf attribute
-* is zero, or if no function has been registered for Gline using
-* astGrfSet.
-
-* Parameters:
-* this
-* The Plot.
-* n
-* The number of positions to be joined together.
-* x
-* A pointer to an array holding the "n" x values.
-* y
-* A pointer to an array holding the "n" y values.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- int i; /* Loop count */
- int grf_status; /* Status retruned from Grf function */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* Since we are about to call an external function which may not be
- thread safe, prevent any other thread from executing the following code
- until the current thread has finished executing it. */
- LOCK_MUTEX2;
-
-/* Do not draw anything if we are using "invisible ink". */
- if( astGetInvisible( this ) ) {
- grf_status = 1;
-
-/* If the Grf attribute is set to a non-zero value, use the Grf function
- registered using astGrfSet (so long as a function has been supplied).
- This is called via a wrapper which adapts the interface to suit the
- language in which the function is written. */
- } else if( astGetGrf( this ) && this->grffun[ AST__GLINE ] ) {
- grf_status = ( *( this->GLine ) )( this, n, x, y, status );
-
-/* Otherwise, use the function in the external Grf module, selected at
- link-time using ast_link options.*/
- } else {
- grf_status = astGLine( n, x, y );
- }
-
-/* Allow the next thread to proceed. */
- UNLOCK_MUTEX2;
-
-/* Report an error if anything went wrong. */
- if( !grf_status ) {
- astError( AST__GRFER, "%s(%s): Graphics error in astGLine. ", status, method,
- class );
-
-/* Otherwise, update the box containing all drawn graphics primitives. */
- } else if( !Boxp_freeze ){
- for( i = 0; i < n; i++ ) {
- Boxp_lbnd[ 0 ] = MIN( x[ i ], Boxp_lbnd[ 0 ] );
- Boxp_ubnd[ 0 ] = MAX( x[ i ], Boxp_ubnd[ 0 ] );
- Boxp_lbnd[ 1 ] = MIN( y[ i ], Boxp_lbnd[ 1 ] );
- Boxp_ubnd[ 1 ] = MAX( y[ i ], Boxp_ubnd[ 1 ] );
- }
- }
-
-}
-
-static void GMark( AstPlot *this, int n, const float *x,
- const float *y, int type, const char *method,
- const char *class, int *status ) {
-/*
-*
-* Name:
-* GMark
-
-* Purpose:
-* Call the GMark Grf function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void GMark( AstPlot *this, int n, const float *x,
-* const float *y, int type, const char *method,
-* const char *class, int *status ) {
-
-* Class Membership:
-* Plot private function.
-
-* Description:
-* This function calls the GMark grf function to draw markers, either
-* calling the version registered using astGrfSet, or the version in the
-* linked grf module. The linked version is used if the Grf attribute
-* is zero, or if no function has been registered for GMark using
-* astGrfSet.
-
-* Parameters:
-* this
-* The Plot.
-* n
-* The number of positions to be joined together.
-* x
-* A pointer to an array holding the "n" x values.
-* y
-* A pointer to an array holding the "n" y values.
-* type
-* An integer which can be used to indicate the type of marker symbol
-* required.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- int i; /* Loop count */
- int grf_status; /* Status retruned from Grf function */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* Since we are about to call an external function which may not be
- thread safe, prevent any other thread from executing the following code
- until the current thread has finished executing it. */
- LOCK_MUTEX2;
-
-/* Do not draw anything if we are using "invisible ink". */
- if( astGetInvisible( this ) ) {
- grf_status = 1;
-
-/* If the Grf attribute is set to a non-zero value, use the Grf function
- registered using astGrfSet (so long as a function has been supplied).
- This is called via a wrapper which adapts the interface to suit the
- language in which the function is written. */
- } else if( astGetGrf( this ) && this->grffun[ AST__GMARK ] ) {
- grf_status = ( *( this->GMark ) )( this, n, x, y, type, status );
-
-/* Otherwise, use the function in the external Grf module, selected at
- link-time using ast_link options.*/
- } else {
- grf_status = astGMark( n, x, y, type );
- }
-
-/* Allow the next thread to proceed. */
- UNLOCK_MUTEX2;
-
-/* Report an error if anything went wrong. */
- if( !grf_status ) {
- astError( AST__GRFER, "%s(%s): Graphics error in astGMark. ", status, method,
- class );
-
-/* Otherwise, update the box containing all drawn graphics primitives. */
- } else if( !Boxp_freeze ){
- for( i = 0; i < n; i++ ) {
- Boxp_lbnd[ 0 ] = MIN( x[ i ], Boxp_lbnd[ 0 ] );
- Boxp_ubnd[ 0 ] = MAX( x[ i ], Boxp_ubnd[ 0 ] );
- Boxp_lbnd[ 1 ] = MIN( y[ i ], Boxp_lbnd[ 1 ] );
- Boxp_ubnd[ 1 ] = MAX( y[ i ], Boxp_ubnd[ 1 ] );
- }
- }
-
-}
-
-static void GQch( AstPlot *this, float *chv, float *chh, const char *method,
- const char *class, int *status ) {
-/*
-*
-* Name:
-* GQch
-
-* Purpose:
-* Call the GQch Grf function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void GQch( AstPlot *this, float *chv, float *chh, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* Plot private function.
-
-* Description:
-* This function calls the GQch grf function, either calling the
-* version registered using astGrfSet, or the version in the linked grf
-* module. The linked version is used if the Grf attribute is zero, or if
-* no function has been registered for GQch using astGrfSet.
-
-* Parameters:
-* this
-* The Plot.
-* chv
-* A pointer to the double which is to receive the height of
-* characters drawn with a vertical baseline . This will be an
-* increment in the X axis.
-* chh
-* A pointer to the double which is to receive the height of
-* characters drawn with a horizontal baseline. This will be an
-* increment in the Y axis.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- int grf_status; /* Status retruned from Grf function */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Since we are about to call an external function which may not be
- thread safe, prevent any other thread from executing the following code
- until the current thread has finished executing it. */
- LOCK_MUTEX2;
-
-/* If the Grf attribute is set to a non-zero value, use the Grf function
- registered using astGrfSet (so long as a function has been supplied).
- This is called via a wrapper which adapts the interface to suit the
- language in which the function is written. */
- if( astGetGrf( this ) && this->grffun[ AST__GQCH ] ) {
- grf_status = ( *( this->GQch ) )( this, chv, chh, status );
-
-/* Otherwise, use the function in the external Grf module, selected at
- link-time using ast_link options.*/
- } else {
- grf_status = astGQch( chv, chh );
- }
-
-/* Allow the next thread to proceed. */
- UNLOCK_MUTEX2;
-
-/* Check neither value is zero. */
- if( grf_status && ( *chh == 0.0 || *chv == 0.0 ) ) {
- astError( AST__GRFER, "astGQch: Returned text heights are %g and %g "
- "but zero is illegal!", status, *chv, *chh );
- grf_status = 0;
- }
-
-/* Report an error if anything went wrong, and return safe values. */
- if( !grf_status ) {
- astError( AST__GRFER, "%s(%s): Graphics error in astGQch. ", status, method,
- class );
- *chh = 1.0;
- *chv = 1.0;
- }
-
-}
-
-static void GText( AstPlot *this, const char *text, float x, float y,
- const char *just, float upx, float upy,
- const char *method, const char *class, int *status ) {
-/*
-*
-* Name:
-* GText
-
-* Purpose:
-* Call the GText Grf function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void GText( AstPlot *this, const char *text, float x, float y,
-* const char *just, float upx, float upy,
-* const char *method, const char *class, int *status ) {
-
-* Class Membership:
-* Plot private function.
-
-* Description:
-* This function calls the GText grf function to draw a text string, either
-* calling the version registered using astGrfSet, or the version in the
-* linked grf module. The linked version is used if the Grf attribute
-* is zero, or if no function has been registered for GText using
-* astGrfSet.
-
-* Parameters:
-* this
-* The Plot.
-* text
-* Pointer to a null-terminated character string to be displayed.
-* x
-* The reference x coordinate.
-* y
-* The reference y coordinate.
-* just
-* A character string which specifies the location within the
-* text string which is to be placed at the reference position
-* given by x and y. The first character may be 'T' for "top",
-* 'C' for "centre", or 'B' for "bottom", and specifies the
-* vertical location of the reference position. Note, "bottom"
-* corresponds to the base-line of normal text. Some characters
-* (eg "y", "g", "p", etc) descend below the base-line. The second
-* character may be 'L' for "left", 'C' for "centre", or 'R'
-* for "right", and specifies the horizontal location of the
-* reference position. If the string has less than 2 characters
-* then 'C' is used for the missing characters.
-* upx
-* The x component of the up-vector for the text, in graphics world
-* coordinates. If necessary the supplied value should be negated
-* to ensure that positive values always refer to displacements from
-* left to right on the screen.
-* upy
-* The y component of the up-vector for the text, in graphics world
-* coordinates. If necessary the supplied value should be negated
-* to ensure that positive values always refer to displacements from
-* bottom to top on the screen.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- int grf_status; /* Status retruned from Grf function */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Since we are about to call an external function which may not be
- thread safe, prevent any other thread from executing the following code
- until the current thread has finished executing it. */
- LOCK_MUTEX2;
-
-/* Do not draw anything if we are using "invisible ink". */
- if( astGetInvisible( this ) ) {
- grf_status = 1;
-
-/* If the Grf attribute is set to a non-zero value, use the Grf function
- registered using astGrfSet (so long as a function has been supplied).
- This is called via a wrapper which adapts the interface to suit the
- language in which the function is written. */
- } else if( astGetGrf( this ) && this->grffun[ AST__GTEXT ] ) {
- grf_status = ( *( this->GText ) )( this, text, x, y, just, upx, upy, status );
-
-/* Otherwise, use the function in the external Grf module, selected at
- link-time using ast_link options.*/
- } else {
- grf_status = astGText( text, x, y, just, upx, upy );
- }
-
-/* Allow the next thread to proceed. */
- UNLOCK_MUTEX2;
-
-/* Report an error if anything went wrong. */
- if( !grf_status ) {
- astError( AST__GRFER, "%s(%s): Graphics error in astGText. ", status, method,
- class );
- }
-
-}
-
-static void GTxExt( AstPlot *this, const char *text, float x, float y,
- const char *just, float upx, float upy, float *xbn,
- float *ybn, const char *method, const char *class, int *status ) {
-/*
-*
-* Name:
-* GTxExt
-
-* Purpose:
-* Call the GTxExt Grf function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void GTxExt( AstPlot *this, const char *text, float x, float y,
-* const char *just, float upx, float upy, float *xbn,
-* float *ybn, const char *method, const char *class, int *status )
-
-* Class Membership:
-* Plot private function.
-
-* Description:
-* This function calls the GTxExt grf function to find the extent
-* of a text string, either calling the version registered using
-* astGrfSet, or the version in the linked grf module. The linked
-* version is used if the Grf attribute is zero, or if no function
-* has been registered for GTxExt using astGrfSet.
-
-* Parameters:
-* this
-* The Plot.
-* text
-* Pointer to a null-terminated character string to be displayed.
-* x
-* The reference x coordinate.
-* y
-* The reference y coordinate.
-* just
-* A character string which specifies the location within the
-* text string which is to be placed at the reference position
-* given by x and y. The first character may be 'T' for "top",
-* 'C' for "centre", or 'B' for "bottom", and specifies the
-* vertical location of the reference position. Note, "bottom"
-* corresponds to the base-line of normal text. Some characters
-* (eg "y", "g", "p", etc) descend below the base-line. The second
-* character may be 'L' for "left", 'C' for "centre", or 'R'
-* for "right", and specifies the horizontal location of the
-* reference position. If the string has less than 2 characters
-* then 'C' is used for the missing characters.
-* upx
-* The x component of the up-vector for the text, in graphics world
-* coordinates. If necessary the supplied value should be negated
-* to ensure that positive values always refer to displacements from
-* left to right on the screen.
-* upy
-* The y component of the up-vector for the text, in graphics world
-* coordinates. If necessary the supplied value should be negated
-* to ensure that positive values always refer to displacements from
-* bottom to top on the screen.
-* xbn
-* An array of 4 elements in which to return the x coordinate of
-* each corner of the bounding box.
-* ybn
-* An array of 4 elements in which to return the y coordinate of
-* each corner of the bounding box.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The corners are returned in no particular order.
-
-*/
-
-/* Local Variables: */
- int grf_status; /* Status retruned from Grf function */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Since we are about to call an external function which may not be
- thread safe, prevent any other thread from executing the following code
- until the current thread has finished executing it. */
- LOCK_MUTEX2;
-
-/* If the Grf attribute is set to a non-zero value, use the Grf function
- registered using astGrfSet (so long as a function has been supplied).
- This is called via a wrapper which adapts the interface to suit the
- language in which the function is written. */
- if( astGetGrf( this ) && this->grffun[ AST__GTXEXT ] ) {
- grf_status = ( *( this->GTxExt ) )( this, text, x, y, just, upx, upy,
- xbn, ybn, status );
-
-/* Otherwise, use the function in the external Grf module, selected at
- link-time using ast_link options.*/
- } else {
- grf_status = astGTxExt( text, x, y, just, upx, upy, xbn, ybn );
- }
-
-/* Allow the next thread to proceed. */
- UNLOCK_MUTEX2;
-
-/* Report an error if anything went wrong. */
- if( !grf_status ) {
- astError( AST__GRFER, "%s(%s): Graphics error in astGTxExt. ", status, method,
- class );
- }
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a Plot.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Plot member function (over-rides the protected astGetAttrib
-* method inherited from the FrameSet class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a Plot, formatted as a character string.
-*
-* The value returned is the value which would actually be used if
-* astGrid was called with the current set of attribute values. This
-* may not always be the same as the value set by the user. For
-* instance, if Labelling is set to "exterior" by the user, it may not
-* be possible to produce exterior labels, in which case interior labels
-* will be produced. If this function is used to get the value of
-* Labelling in this situation, then the value actually used (i.e.
-* interior) will be returned instead of the requested value (i.e.
-* exterior).
-*
-* Some attributes have dynamic defaults, (i.e. the behaviour if not
-* set depends on the values of other attributes). If the value for
-* such an attribute is enquired using this function, then the dynamic
-* default value actually used will be returned if no value has been
-* set explicitly for the attribute.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* attrib
-* Pointer to a null terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the Plot, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the Plot. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstPlot *this; /* Pointer to the Plot structure */
- const char *result; /* Pointer value to return */
- char label[21]; /* Graphics item label */
- double dval; /* Double attribute value */
- int axis; /* Axis number */
- int ival; /* Int attribute value */
- int len; /* Length of attrib string */
- int nax; /* Number of base Frame axes */
- int nc; /* No. characters read by astSscanf */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the Plot structure. */
- this = (AstPlot *) this_object;
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Get the number of base Frame axis (2 for a Plot, 3 for a Plot3D). */
- nax = astGetNin( this );
-
-/* Indicate that the current bound box should not be changed during the
- execution of this function (this may happen if a grid is drawn to get
- the default value for an attribute such as Labelling). */
- Boxp_freeze = 1;
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null terminated string in an appropriate
- format. Set "result" to point at the result string. */
-
-/* Tol. */
-/* ---- */
- if ( !strcmp( attrib, "tol" ) ) {
- dval = astGetTol( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* Grid. */
-/* ----- */
- } else if ( !strcmp( attrib, "grid" ) ) {
- ival = GetUsedGrid( this, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* TickAll. */
-/* -------- */
- } else if ( !strcmp( attrib, "tickall" ) ) {
- ival = astGetTickAll( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* ForceExterior. */
-/* -------------- */
- } else if ( !strcmp( attrib, "forceexterior" ) ) {
- ival = astGetForceExterior( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Invisible. */
-/* ---------- */
- } else if ( !strcmp( attrib, "invisible" ) ) {
- ival = astGetInvisible( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Border. */
-/* ------- */
- } else if ( !strcmp( attrib, "border" ) ) {
- ival = GetUsedBorder( this, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* ClipOp. */
-/* ------- */
- } else if ( !strcmp( attrib, "clipop" ) ) {
- ival = astGetClipOp( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Clip. */
-/* ----- */
- } else if ( !strcmp( attrib, "clip" ) ) {
- ival = astGetClip( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Grf. */
-/* ---- */
- } else if ( !strcmp( attrib, "grf" ) ) {
- ival = astGetGrf( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* DrawTitle. */
-/* --------- */
- } else if ( !strcmp( attrib, "drawtitle" ) ) {
- ival = astGetDrawTitle( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Escape. */
-/* ------- */
- } else if ( !strcmp( attrib, "escape" ) ) {
- ival = astGetEscape( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* LabelAt(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "labelat(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- dval = GetUsedLabelAt( this, axis - 1, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* Centre(axis). */
-/* ------------ */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "centre(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- dval = GetUsedCentre( this, axis - 1, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* Gap. */
-/* ---- */
- } else if ( !strcmp( attrib, "gap" ) ) {
- dval = GetUsedGap( this, 0, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* Gap(axis). */
-/* ---------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "gap(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- dval = GetUsedGap( this, axis - 1, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* LogGap. */
-/* ---- */
- } else if ( !strcmp( attrib, "loggap" ) ) {
- dval = GetUsedLogGap( this, 0, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* LogGap(axis). */
-/* ---------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "loggap(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- dval = GetUsedLogGap( this, axis - 1, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* NumLabGap. */
-/* -------- */
- } else if ( !strcmp( attrib, "numlabgap" ) ) {
- dval = astGetNumLabGap( this, 0 );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* NumLabGap(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "numlabgap(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- dval = astGetNumLabGap( this, axis - 1 );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* TextLabGap. */
-/* ----------- */
- } else if ( !strcmp( attrib, "textlabgap" ) ) {
- dval = astGetTextLabGap( this, 0 );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* TextLabGap(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "textlabgap(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- dval = astGetTextLabGap( this, axis - 1 );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* LabelUp. */
-/* -------- */
- } else if ( !strcmp( attrib, "labelup" ) ) {
- ival = astGetLabelUp( this, 0 );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* LabelUp(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "labelup(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- ival = astGetLabelUp( this, axis - 1 );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* LogPlot. */
-/* -------- */
- } else if ( !strcmp( attrib, "logplot" ) ) {
- ival = astGetLogPlot( this, 0 );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* LogPlot(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "logplot(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- ival = astGetLogPlot( this, axis - 1 );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* LogLabel. */
-/* -------- */
- } else if ( !strcmp( attrib, "loglabel" ) ) {
- ival = GetUsedLogLabel( this, 0, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* LogLabel(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "loglabel(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- ival = GetUsedLogLabel( this, axis - 1, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* LogTicks. */
-/* -------- */
- } else if ( !strcmp( attrib, "logticks" ) ) {
- ival = GetUsedLogTicks( this, 0, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* LogTicks(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "logticks(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- ival = GetUsedLogTicks( this, axis - 1, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* NumLab. */
-/* -------- */
- } else if ( !strcmp( attrib, "numlab" ) ) {
- ival = astGetNumLab( this, 0 );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* NumLab(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "numlab(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- ival = astGetNumLab( this, axis - 1 );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* MinTick. */
-/* -------- */
- } else if ( !strcmp( attrib, "mintick" ) ) {
- ival = GetUsedMinTick( this, 0, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* MinTick(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "mintick(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- ival = GetUsedMinTick( this, axis - 1, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* TextLab. */
-/* ---------- */
- } else if ( !strcmp( attrib, "textlab" ) ) {
- ival = GetUsedTextLab( this, 0, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* TextLab(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "textlab(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- ival = GetUsedTextLab( this, axis - 1, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* DrawAxes. */
-/* ----------- */
- } else if ( !strcmp( attrib, "drawaxes" ) ) {
- ival = astGetDrawAxes( this, 0 );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* DrawAxes(axis). */
-/* --------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "drawaxes(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- ival = GetDrawAxes( this, axis - 1, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Abbrev. */
-/* ----------- */
- } else if ( !strcmp( attrib, "abbrev" ) ) {
- ival = astGetAbbrev( this, 0 );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Abbrev(axis). */
-/* --------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "abbrev(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- ival = GetAbbrev( this, axis - 1, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* LabelUnits. */
-/* ----------- */
- } else if ( !strcmp( attrib, "labelunits" ) ) {
- ival = GetUsedLabelUnits( this, 0, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* LabelUnits(axis). */
-/* ----------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "labelunits(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- ival = GetUsedLabelUnits( this, axis - 1, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Style. */
-/* ------ */
- } else if ( !strcmp( attrib, "style" ) ) {
- ival = GetUseStyle( this, AST__BORDER_ID, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Style(label). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "style(%20[^()])%n", label, &nc ) )
- && ( nc >= len ) ) {
- ival = GetUseStyle( this, FullForm( GrfLabels, label, attrib, "astGet", astGetClass( this ), status ), status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Font. */
-/* ----- */
- } else if ( !strcmp( attrib, "font" ) ) {
- ival = GetUseFont( this, AST__TEXTLABS_ID, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Font(label). */
-/* ------------ */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "font(%20[^()])%n", label, &nc ) )
- && ( nc >= len ) ) {
- ival = GetUseFont( this, FullForm( GrfLabels, label, attrib, "astGet", astGetClass( this ), status ), status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Colour. */
-/* ------- */
- } else if ( !strcmp( attrib, "colour" ) ) {
- ival = GetUseColour( this, AST__TEXTLABS_ID, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Colour(label). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "colour(%20[^()])%n", label, &nc ) )
- && ( nc >= len ) ) {
- ival = GetUseColour( this, FullForm( GrfLabels, label, attrib, "astGet", astGetClass( this ), status ), status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Color. */
-/* ------ */
- } else if ( !strcmp( attrib, "color" ) ) {
- ival = GetUseColour( this, AST__TEXTLABS_ID, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Color(label). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "color(%20[^()])%n", label, &nc ) )
- && ( nc >= len ) ) {
- ival = GetUseColour( this, FullForm( GrfLabels, label, attrib, "astGet", astGetClass( this ), status ), status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Width. */
-/* ------ */
- } else if ( !strcmp( attrib, "width" ) ) {
- dval = GetUseWidth( this, AST__BORDER_ID, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-
-/* Width(label). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "width(%20[^()])%n", label, &nc ) )
- && ( nc >= len ) ) {
- dval = GetUseWidth( this, FullForm( GrfLabels, label, attrib, "astGet", astGetClass( this ), status ), status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* Size. */
-/* ----- */
- } else if ( !strcmp( attrib, "size" ) ) {
- dval = GetUseSize( this, AST__TEXTLABS_ID, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* Size(label). */
-/* ------------ */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "size(%20[^()])%n", label, &nc ) )
- && ( nc >= len ) ) {
- dval = GetUseSize( this, FullForm( GrfLabels, label, attrib, "astGet", astGetClass( this ), status ), status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* TitleGap. */
-/* --------- */
- } else if ( !strcmp( attrib, "titlegap" ) ) {
- dval = astGetTitleGap( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* MajTickLen. */
-/* ----------- */
- } else if ( !strcmp( attrib, "majticklen" ) ) {
- dval = GetUsedMajTickLen( this, 0, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* MajTickLen(axis). */
-/* ----------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "majticklen(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- dval = GetUsedMajTickLen( this, axis - 1, status );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* MinTickLen. */
-/* ----------- */
- } else if ( !strcmp( attrib, "minticklen" ) ) {
- dval = astGetMinTickLen( this, 0 );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* MinTickLen(axis). */
-/* ----------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "minticklen(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- dval = astGetMinTickLen( this, axis - 1 );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* Labelling. */
-/* ---------- */
- } else if ( !strcmp( attrib, "labelling" ) ) {
- ival = GetUsedLabelling( this, status );
- if ( astOK ) {
- result = ival ? xlbling[0] : xlbling[1];
- }
-
-/* Edge(axis). */
-/* ----------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "edge(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- ival = GetUsedEdge( this, axis - 1, status );
- if ( astOK ) {
- if( ival == LEFT ){
- result = "left";
- } else if( ival == RIGHT ){
- result = "right";
- } else if( ival == TOP ){
- result = "top";
- } else if( ival == BOTTOM ){
- result = "bottom";
- } else {
- result = "<bad>";
- }
- }
-
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Unfreeze the bound box so that it may be updated by subsequent
- plotting functions. */
- Boxp_freeze = 0;
-
-/* Return the result. */
- return result;
-}
-
-static AstPointSet *GetDrawnTicks( AstPlot *this, int axis, int major, int *status ){
-/*
-*+
-* Name:
-* astGetDrawnTicks
-
-* Purpose:
-* Return information about the ticks last drawn by astGrid.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "plot.h"
-* AstPointSet *GetDrawnTicks( AstPlot *this, int axis, int major )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-* This function returns a PointSet holding information about the
-* tick marks (either major and minor) that were drawn by the previous
-* invocation of astGrid. A NULL pointer is returned if astGrid has
-* not yet been invoked.
-
-* Parameters:
-* this
-* Pointer to a Plot.
-* axis
-* The zero-based axis of the axis for which tick mark information
-* is required.
-* major
-* Supply a non-zero value if information about the major tick
-* marks is to be returned, and zero if information about the minor
-* tick marks is to be returned.
-
-* Returned Value:
-* A pointSet with one point for every tick of the requested type drawn
-* by astGrid for the specified axis. Each point has 2 coordinate values,
-* being the graphics coordinates at the start of the tick mark. The
-* returned PointSet pointer should be annulled when no longer needed.
-
-*-
-*/
-
-/* Local Variables: */
- AstPointSet *result = NULL;
- double *ptr[ 3 ];
- int n;
-
-/* Check the global status. */
- if( !astOK ) return result;
-
-/* Report an error if the supplied axis value is incorrect. */
- if( axis < 0 || axis > 1 ) {
- astError( AST__INTER, "astGetDrawnTicks(Plot): Supplied \"axis\" "
- "value is %d - should 0 or 1 (internal AST programming "
- "error).", status, axis );
- n = 0;
-
-/* If OK, get the number of stored tick marks. */
- } else {
- n = major ? this->majtickcount[ axis ] : this->mintickcount[ axis ];
- }
-
-/* Check that information is available. */
- if( n > 0 && astOK ) {
-
-/* Create a PointSet with the required size. */
- result = astPointSet( n, 2, "", status );
-
-/* Store pointers to the arrays within the Plot that hold the required
- tick marks positions and types. */
- ptr[ 0 ] = major ? this->majtickgx[ axis ] : this->mintickgx[ axis ];
- ptr[ 1 ] = major ? this->majtickgy[ axis ] : this->mintickgy[ axis ];
- astSetPoints( result, ptr );
- }
-
-/* Return the PointSet. */
- return result;
-}
-
-static double GetTicks( AstPlot *this, int axis, double *cen, double **ticks,
- int *nmajor, double **minticks, int *nminor,
- int format_set, int *inval, double *refval,
- GetTicksStatics **pstatics, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* GetTicks
-
-* Purpose:
-* Obtain a list of logarithmically or linearly spaced tick mark values for
-* a single axis in a 2-D physical coordinate Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* double GetTicks( AstPlot *this, int axis, double *cen, double **ticks,
-* int *nmajor, double **minticks, int *nminor,
-* int format_set, int *inval, double *refval,
-* GetTicksStatics **pstatics, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* For linearly spaced major ticks the "gap" returned by this function
-* is the constant difference between adjacent major tick marks. For
-* logarithmically spaced major ticks the "gap" returned by this
-* function is the constant ratio between adjacent major tick marks.
-*
-* If a gap size has been specified using attribute Gap (or LogGap for
-* logarithmic ticks) supplied, the specified value is returned, and used
-* to determine the tick values. If no gap size is supplied, a default
-* gap size is used and returned.
-*
-* All this is over-ridden if the astSetTickValues method has been
-* called to store explicit tick mark values in the Plot structure.
-* In this case, the values supplied using astSetTickValues are
-* returned.
-
-* Parameters:
-* this
-* The Plot. Supplying a NULL pointer will cause statics resources
-* to be released.
-* axis
-* The zero-based index of the axis to use.
-* cen
-* Pointer to the supplied axis value at which to put a single
-* central tick. Other ticks will be placed evenly on either side
-* of this tick. If AST__BAD is provided, a value will be used
-* which would put a tick at an axis value of one. The used value
-* is returned.
-* ticks
-* Pointer to a place at which to return a pointer to the memory in
-* which are stored the major tick values to be used. This pointer
-* should be freed using astFree when no longer needed. The number of
-* values in the array is given by the value returned by parameter
-* "nmajor".
-* nmajor
-* A pointer to a location at which to return the number of major
-* ticks.
-* minticks
-* Pointer to a place at which to return a pointer to the memory in
-* which are stored the minor tick values to be used. This pointer
-* should be freed using astFree when no longer needed. The number of
-* values in the array is given by the value returned by parameter
-* "nminor". The minor tick marks values returned in this array are
-* the ones stored in the Plot via a call to the astSetTickValues
-* function. If this function has not been called, then a NULL
-* pointer is returned, and the "nminor" value is returned holding the
-* number of divisions between major ticks.
-* nminor
-* A pointer to a location at which to return either the number of
-* division into which each gap should be divided when drawing minor
-* tick marks (if "*minticks" is returned holding NULL), or the
-* total number of minor tick values stored in "*minticks" (if
-* "*minticks" is returned non-NULL). The number of divisions
-* between major tick values is one more than the number of minor
-* tick marks.
-* format_set
-* Indicates if an explicit format has been set for the axis. If
-* not, "cen" is always assumed to be AST__BAD, and any specified
-* Gap value is rounded to the nearest "nice" value. This has
-* to be done because the algorithm for choosing a format avoiding
-* unnecessary precision only works if the gap size causes 1 digit to
-* change between adjacent labels.
-* inval
-* A pointer to a location at which to return a flag indicating if
-* any invalid physical coordinates were encountered.
-* refval
-* A pointer to a location at which to return a value for the other
-* axis which can be used when normalizing the returned tick mark
-* values.
-* pstatics
-* Address of a pointer to a structure holding static data values
-* used within this function. A NULL pointer should be supplied on
-* the first invocation (dynamic memory will then be allocated to
-* hold ths structure). The memory is freed when a NULL value for
-* "this" is supplied.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The used gap size.
-
-* Notes:
-* - This function allocates some static resources on its first
-* invocation, which should be released when no longer needed, or when
-* a different Plot is supplied, by calling this function with a NULL
-* pointer for parameter "this". All other parameters are ignored.
-* - This function assumes that the physical coordinate system is 2
-* dimensional, and it should not be used if this is not the case.
-* - An error is reported if the region containing valid physical
-* coordinates is too small to use.
-* - If an error has already occurred, or if this function should fail
-* for any reason, then a NULL pointer is returned in "ticks", zero
-* is returned for the number of major and minor ticks marks.
-*/
-
-/* Local Variables: */
- GetTicksStatics *statics; /* Pointer to statics structure */
- double *tick; /* Pointer to next tick value */
- double cen0; /* Supplied value of cen */
- double dran; /* Dynamic range of axis values */
- double frac; /* Fraction of plot area holding good coords */
- double gap; /* Supplied value for Gap or LogGap */
- double log_used_gap; /* Log10( the used gap size ) */
- double maxv; /* Max axis value */
- double minv; /* Min axis value */
- double new_used_gap; /* New value for the used gap size */
- double old_used_gap; /* Old value for the used gap size */
- double test_gap; /* Trial gap size */
- double used_cen; /* Used value of cen */
- double used_gap; /* The used gap size */
- int findcen; /* Find a new centre value? */
- int gap_too_small; /* Test gap too small? */
- int gap_too_large; /* Test gap too large? */
- int i; /* Axis index */
- int ihi; /* Highest tick mark index */
- int ilo; /* Lowest tick mark index */
- int nochange; /* No. of ineffective attempts to change gap size */
-
-/* Initialise the returned information. */
- *ticks = NULL;
- *minticks = NULL;
- *nmajor = 0;
- *nminor = 0;
-
-/* Get a pointer to the supplied statics object. */
- statics = *pstatics;
-
-/* If a NULL pointer has been supplied for "this", release the resources
- allocated on the first call to this function, and return. */
- if( !this ){
- if( statics ) {
- if( statics->map ) statics->map = astAnnul( statics->map );
- if( statics->pset ) statics->pset = astAnnul( statics->pset );
- if( statics->frame ) statics->frame = astAnnul( statics->frame );
- *pstatics = astFree( statics );
- }
- return 0.0;
- }
-
-/* Check the global error status. */
- if ( !astOK ) return 0.0;
-
-/* If no statics structure was supplied, create one now and initialise it. */
- if( !statics ) {
- statics = astMalloc( sizeof( GetTicksStatics ) );
- if( statics ) {
- statics->pset=NULL;
- *pstatics = statics;
- }
- }
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- maxv = 0.0;
- minv = 0.0;
- used_cen = 0.0;
- used_gap = 0.0;
- ihi = 0;
- ilo = 0;
-
-/* If this is the first call to this function, do some initialisation. */
- if( !statics->pset ){
-
-/* Get the Mapping from Base to Current Frame in the Plot. */
- statics->map = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Get a pointer to the current Frame from the Plot. */
- statics->frame = astGetFrame( this, AST__CURRENT );
-
-/* Get initial guesses at suitable gaps for each axis. A PointSet is
- returned holding sorted values (non-normalized) for the physical axes. */
- statics->pset = DefGap( this, statics->defgaps, statics->ngood, &frac, &statics->bad, method, class, status );
-
-/* Store the maximum and minimum number of major tick marks along each
- axis. These numbers are reduced if only a small part of the plotting
- area contains valid coordinates, so that the tick marks do not end up
- to close together. */
- statics->maxticks = (int) ( 0.5 + MAJTICKS_MAX*sqrt( frac ) );
- statics->mintick = (int) ( 0.5 + MAJTICKS_MIN*sqrt( frac ) );
- if( statics->mintick < 3 ) statics->mintick = 3;
- if( statics->maxticks < 8 ) statics->maxticks = 8;
- if( statics->maxticks < statics->mintick ) statics->maxticks = statics->mintick;
-
-/* Get a pointer to the data in the PointSet. */
- statics->ptr = astGetPoints( statics->pset );
-
-/* Find a typical value on each axis. */
- for( i = 0; i < 2 && astOK; i++ ){
- statics->typval[ i ] = Typical( statics->ngood[ i ], statics->ptr[ i ], -DBL_MAX, DBL_MAX,
- statics->width + i, status );
- }
- }
-
-/* Return the flag indicating if any regions of invalid physical coordinates
- were found. */
- *inval = statics->bad;
-
-/* Return the typical value on the other axis. */
- *refval = statics->typval[ 1 - axis ];
-
-/* See if any tick marks values have been stored in the Plot structure
- using astSetTickValues. If so, copy the tick mark values to the
- returned arrays and exit with a gap size determined by the first two
- ticks. */
- if( this->nmajtickval[ axis ] > 0 ) {
- *ticks = astStore( NULL, this->majtickval[ axis ],
- this->nmajtickval[ axis ]*sizeof(double) );
- *minticks = astStore( NULL, this->mintickval[ axis ],
- this->nmintickval[ axis ]*sizeof(double) );
- *nmajor = this->nmajtickval[ axis ];
- *nminor = this->nmintickval[ axis ];
-
- if( *nmajor > 1 && (*ticks)[ 0 ] != AST__BAD &&
- (*ticks)[ 1 ] != AST__BAD ) {
- used_gap = fabs( (*ticks)[ 1 ] - (*ticks)[ 0 ] );
- } else {
- used_gap = AST__BAD;
- }
-
- return used_gap;
-
- }
-
-/* See if the user has specified a gap size. The default for astGetLogTicks is
- determined in DefGaps, so we can now decide whether to use attribute Gap
- or LogGap to get the user-supplied gap size. Obtain the requested gap
- attribute values for both physical axes. */
- if( astGetLogTicks( this, axis ) ) {
- gap = astGetLogGap( this, axis );
- } else {
- gap = astGetGap( this, axis );
- }
-
-/* Find the maximum and minimum value in the plotting area. DefGap will
- have reported an error if minv*maxv is negative or zero. */
- if( astOK ) {
- maxv = statics->ptr[ axis ][ statics->ngood[ axis ] - 1 ];
- minv = statics->ptr[ axis ][ 0 ];
- }
-
-/* First deal with logarithmically spaced ticks. */
- dran = ( minv != 0.0 ) ? maxv/minv : 0.0;
- if( astGetLogTicks( this, axis ) ) {
-
-/* If the ratio of max and min data value is not larger than 10, report an
- error. */
- dran = ( minv != 0.0 ) ? maxv/minv :0.0;
- if( dran < 10.0 && dran > 0.1 ) {
- astError( AST__VSMAL, "%s(%s): Cannot produce logarithmically "
- "spaced major tick marks on axis %d since the dynamic "
- "range of the axis is too small.", status, method, class, axis + 1 );
- }
-
-/* Should we find a new value for "cen"? */
- findcen = !cen || *cen == AST__BAD || !format_set;
-
-/* Try to find a "nice" gap size, so long as the caller has not supplied
- a gap size. The default gap size obtained above is our initial guess. */
- if( gap == AST__BAD && astOK ){
-
-/* Start off using the default gap found during the initialisation. */
- test_gap = statics->defgaps[ axis ];
-
-/* Loop round until a gap size is found which gives an acceptable number
- of tick marks. Upto 10 gap sizes are tried. */
- for( i = 0; i < 10 && astOK; i++ ){
-
-/* Find a "nice" gap size close to the current test gap size. Also find
- the number of minor tick marks to use with the nice gap size. Gaps for
- logarithmic axes are always powers of ten. */
- log_used_gap = (int) ( log10( test_gap ) + 0.5 );
- if( log_used_gap == 0.0 ) {
- log_used_gap = ( test_gap > 1.0 ) ? 1.0 : -1.0;
- }
- *nminor = 9;
- used_gap = pow( 10.0, log_used_gap );
-
-/* If no value has been supplied for *cen, choose a value which would put
- a major tick mark at the value 1 (or -1), and which is mid way between
- the maximum and minimum axis value. */
- if( findcen ) {
- used_cen = pow( used_gap, (int) ( 0.5*log10( maxv*minv ) /
- log_used_gap ) );
- if( maxv < 0 ) used_cen = -used_cen;
- } else {
- used_cen = *cen;
- }
-
-/* Find the index of the highest tick which is not larger than the lowest
- axis value. */
- if( log_used_gap > 0.0 ) {
- ilo = floor( log10( minv/used_cen )/log_used_gap );
- } else {
- ilo = ceil( log10( minv/used_cen )/log_used_gap );
- }
-
-/* Find the index of the lowest tick which is not less than the highest
- axis value. */
- if( log_used_gap > 0.0 ) {
- ihi = ceil( log10( maxv/used_cen )/log_used_gap );
- } else {
- ihi = floor( log10( maxv/used_cen )/log_used_gap );
- }
-
-/* Find the total number of tick marks. */
- *nmajor = ihi - ilo + 1;
-
-/* If the number of ticks is unacceptable, try a different gap size. If the
- gap was too large to produce any ticks, try using half the gap size. */
- if( *nmajor <= 0 ) {
- test_gap = sqrt( test_gap );
-
-/* If there were some ticks, but not enough, decrease the gap size in
- proportion to the shortfall. */
- } else if( *nmajor < statics->mintick ){
- test_gap = pow( test_gap, (double)( *nmajor )/(double)( statics->mintick ) );
-
-/* If there were too many ticks, increase the gap size in proportion to the
- excess. */
- } else if( *nmajor > statics->maxticks ){
- test_gap = pow( test_gap, (double)( *nmajor )/(double)( statics->maxticks ) );
-
-/* If the number of ticks is acceptable, break out of the loop early.*/
- } else {
- break;
- }
- }
-
-/* Increase the tick coverage by one at each end to cover up the gaps. */
- ilo--;
- ihi++;
- *nmajor += 2;
-
-/* If an explicit gap size was supplied, use it. */
- } else if( astOK ) {
-
-/* Check it is usable. */
- if( gap == 0.0 && astOK ) {
- astError( AST__ATTIN, "%s(%s): Invalid value zero given for "
- "attribute LogGap(%d).", status, method, class, axis + 1 );
-
- } else if( gap < 0.0 && astOK ) {
- astError( AST__ATTIN, "%s(%s): Invalid negative value %f given for "
- "attribute LogGap(%d).", status, method, class, gap, axis + 1 );
-
-/* If necessary, take its reciprocal in order to ensure that the absolute
- tick mark values get smaller or larger as required. */
- } else {
-
- used_gap = gap;
- if( fabs( maxv ) < fabs( minv ) ) {
- if( gap > 1.0 ) used_gap = 1.0/gap;
- } else {
- if( gap < 1.0 ) used_gap = 1.0/gap;
- }
-
-/* Find the nearest power of 10 ( do not allow 10**0 (=1.0) to be used). */
- log_used_gap = (int) ( log10( used_gap ) + 0.5 );
- if( log_used_gap == 0.0 ) {
- log_used_gap = ( gap > 1.0 ) ? 1.0 : -1.0;
- }
- used_gap = pow( 10.0, log_used_gap );
-
-/* We always use 9 minor intervals. */
- *nminor = 9;
-
-/* If no value has been supplied for *cen, choose a value which would put
- a major tick mark at the value 1 (or -1), and which is mid way between
- the maximum and minimum axis value. */
- if( findcen ) {
- used_cen = pow( used_gap, (int) ( 0.5*log10( maxv*minv ) /
- log_used_gap ) );
- if( maxv < 0 ) used_cen = -used_cen;
- } else {
- used_cen = *cen;
- }
-
-/* Find the index of the highest tick which is not larger than the lowest
- axis value. */
- if( log_used_gap > 0.0 ) {
- ilo = floor( log10( minv/used_cen )/log_used_gap );
- } else {
- ilo = ceil( log10( minv/used_cen )/log_used_gap );
- }
-
-/* Find the index of the lowest tick which is not less than the highest
- axis value. */
- if( log_used_gap > 0.0 ) {
- ihi = ceil( log10( maxv/used_cen )/log_used_gap );
- } else {
- ihi = floor( log10( maxv/used_cen )/log_used_gap );
- }
-
-/* Find the total number of tick marks. */
- *nmajor = ihi - ilo + 1;
- if( *nmajor < 2 && astOK ) {
- astError( AST__ATTIN, "%s(%s): Unusable value %f given for "
- "attribute LogGap(%d).", status, method, class, gap, axis + 1 );
-
- }
- }
- }
-
-/* Allocate memory to hold the tick values themselves. */
- *ticks = (double *) astMalloc( sizeof( double )*( *nmajor ) );
- if( astOK ) {
-
-/* Store them. */
- tick = *ticks;
- for( i = ilo; i <= ihi; i++, tick++ ) {
- *tick = used_cen*pow( used_gap, i );
- }
- }
-
-/* Store returned centre value. */
- if( cen ) *cen = used_cen;
-
-/* Now deal with linearly spaced ticks */
- } else {
-
-/* Store the supplied value of cen. */
- cen0 = ( cen ) ? *cen : AST__BAD;
-
-/* If no format has been set for the axis, ensure AST__BAD is used for cen. */
- if( !format_set ) cen0 = AST__BAD;
-
-/* Try to find a "nice" gap size, so long as the caller has not supplied
- a gap size. The default gap size obtained above is our initial guess. */
- if( gap == AST__BAD ){
- old_used_gap = AST__BAD;
-
-/* Start of using the default gap found during the initialisation. */
- test_gap = statics->defgaps[ axis ];
- used_gap = 0.0;
-
-/* Initialise flags saying the test gap is too large or too small */
- gap_too_large = 0;
- gap_too_small = 0;
-
-/* So far, there have been no ineffective attempts to change the gap
- size. */
- nochange = 0;
-
-/* Loop round until a gap size is found which gives an acceptable number
- of tick marks. Upto 10 gap sizes are tried. */
- for( i = 0; i < 10 && astOK; i++ ){
-
-/* Find a "nice" gap size close to the current test gap size. Also find
- the number of minor tick marks to use with the nice gap size. */
- new_used_gap = astGap( statics->frame, axis, test_gap, nminor );
-
-/* Find the number and positions of major tick marks which would result
- from using this gap size. Annul the memory used to hold any previous tick
- data first. Only do this if the gap being used has actually changed,
- otherwise we just retain the values created from the previous run with
- this gap size. */
- if( new_used_gap != used_gap ) {
- nochange = 0;
- old_used_gap = used_gap;
- used_gap = new_used_gap;
- if( *ticks ) *ticks = astFree( *ticks );
- if( cen ) *cen = cen0;
- *nmajor = FindMajTicks( statics->map, statics->frame, axis, *refval, statics->width[ 1-axis ],
- used_gap, cen, statics->ngood[ axis ],
- statics->ptr[ axis ], ticks, status );
-
-/* If the gap size has not changed do an extra pass through this loop,
- but only do this a maximum of 25 times in succession. */
- } else if( nochange < 25 ) {
- nochange++;
- i--;
-
- } else if( astOK ){
- astError( AST__VSMAL, "%s(%s): Cannot produce enough major "
- "tick marks on axis %d using the current axis "
- "format (\"%s\").", status, method, class, axis + 1,
- astGetFormat( statics->frame, axis ) );
- break;
- }
-
-/* If the number of ticks is unacceptable, try a different gap size. If the
- gap was too large to produce any ticks, try using half the gap size. */
- if( *nmajor == 0 ) {
- test_gap *= 0.5;
- gap_too_large = 1;
- gap_too_small = 0;
-
-/* If there were some ticks, but not enough... */
- } else if( *nmajor < statics->mintick ){
-
-/* If the previous test gap produced too many ticks, use the current gap
- size. */
- if( gap_too_small ) {
- break;
-
-/* Otherwise, decrease the gap size in proportion to the shortfall. */
- } else {
- test_gap *= (double)( *nmajor )/(double)( statics->mintick );
- gap_too_large = 1;
- gap_too_small = 0;
- }
-
-/* If there were too many ticks... */
- } else if( *nmajor > statics->maxticks ){
-
-/* If the previous test gap produced too few ticks, use the previous gap
- size. */
- if( gap_too_large ) {
- used_gap = old_used_gap;
- if( *ticks ) *ticks = astFree( *ticks );
- if( cen ) *cen = cen0;
- *nmajor = FindMajTicks( statics->map, statics->frame, axis, *refval, statics->width[ 1-axis ],
- used_gap, cen, statics->ngood[ axis ],
- statics->ptr[ axis ], ticks, status );
- break;
-
-/* Otherwise, increase the gap size in proportion to the excess. */
- } else {
- test_gap *= (double)( *nmajor )/(double)( statics->maxticks );
- gap_too_small = 1;
- gap_too_large = 0;
- }
-
-/* If the number of ticks is acceptable, break out of the loop early.*/
- } else {
- break;
- }
- }
-
-/* If an explicit gap size was supplied, use it. */
- } else {
-
-/* Find a likely value for the number of minor tick marks to use, and find
- a nice gap close to the supplied gap (unless an explicit format has
- been set). */
- if( format_set ){
- used_gap = gap;
- (void) astGap( statics->frame, axis, used_gap, nminor );
- } else {
- used_gap = astGap( statics->frame, axis, gap, nminor );
- }
-
-/* Find where the major ticks should be put. */
- if( cen ) *cen = cen0;
- *nmajor = FindMajTicks( statics->map, statics->frame, axis, *refval, statics->width[ 1-axis ],
- used_gap, cen, statics->ngood[ axis ], statics->ptr[ axis ],
- ticks, status );
- }
- }
-
-/* Report an error if no ticks can be found. */
- if( *nmajor == 0 && astOK ) {
- astError( AST__GRFER, "%s(%s): Cannot find any usable tick mark values. ", status, method,
- class );
- }
-
-/* If an error has occurred, annul the memory used to hold tick data, and
- return zero ticks. */
- if( !astOK ) {
- *ticks = (double *) astFree( (void *) *ticks );
- *nmajor = 0;
- *nminor = 0;
- used_gap = 0.0;
- }
-
-/* Return. */
- return used_gap;
-}
-
-static double GoodGrid( AstPlot *this, int *dim, AstPointSet **pset1,
- AstPointSet **pset2, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* GoodGrid
-
-* Purpose:
-* Create a grid covering the region containing good coordinates in a
-* 2-D physical coordinate Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* double GoodGrid( AstPlot *this, int *dim, AstPointSet **pset1,
-* AstPointSet **pset2, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function creates two PointSets, one holding a square grid of
-* graphics coordinates, and the other holding the corresponding physical
-* coordinates (not normalized). The grid covers just the area containing
-* good physical coordinates. The points are stored row by row in the
-* returned PointSets.
-
-* Parameters:
-* this
-* The Plot.
-* dim
-* A pointer to an integer in which to store the number of samples
-* along each edge of the returned grid.
-* pset1
-* A pointer to a location at which to store a pointer to the
-* PointSet holding the graphics coordinates.
-* pset2
-* A pointer to a location at which to store a pointer to the
-* PointSet holding the physical coordinates.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The fraction of the plotting area containing good physical
-* coordinates.
-
-* Notes:
-* - This function assumes that the physical coordinate system is 2
-* dimensional, and it should not be used if this is not the case.
-* - The returned PointSets should be annulled when no longer needed,
-* using astAnnul.
-* - An error is reported if the region containing valid physical
-* coordinates is too small to use.
-* - A function value of zero, and NULL pointers are returned if an error
-* has already occurred, or if this function should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFrame *frm; /* Pointer to the Current Frame in the Plot */
- AstMapping *map; /* Pointer to "graphics to physical" mapping */
- double **ptr1; /* Pointer to physical axis value data */
- double **ptr2; /* Pointer to graphics axis value data */
- double *pa; /* Pointer to next value on 1st physical axis */
- double *pb; /* Pointer to next value on 2nd physical axis */
- double *px; /* Pointer to next value on 1st graphics axis */
- double *py; /* Pointer to next value on 2nd graphics axis */
- double dx; /* Cell size along graphics X (1st) axis */
- double dy; /* Cell size along graphics Y (2nd) axis */
- double frac; /* Fraction of good physical coordinates */
- double xmax; /* High X bound of region containing good phy. coords */
- double xmin; /* Low X bound of region containing good phy. coords */
- double ymax; /* High Y bound of region containing good phy. coords */
- double ymin; /* Low Y bound of region containing good phy. coords */
- int j; /* Element offset */
- int ngood; /* Number of grid points with good physical coords */
- int size; /* Number of grid points */
-
-/* Initialise the returned PointSet pointers. */
- *pset1 = NULL;
- *pset2 = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return 0.0;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- ptr1 = NULL;
- frac = 0.0;
- xmax = 0.0;
- xmin = 0.0;
- ymax = 0.0;
- ymin = 0.0;
-
-/* Get the Mapping from base (graphics) to current (physical) Frame in the
- supplied Plot. */
- map = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Get a pointer to the Current Frame in the Plot. */
- frm = astGetFrame( this, AST__CURRENT );
-
-/* Initialise the grid dimension. */
- *dim = 16;
-
-/* We need a grid which has at least 4 good points. */
- ngood = 0;
- while( ngood < 4 && astOK ){
-
-/* Double the grid dimension. */
- *dim *= 2;
-
-/* Report an error if the grid is now too big. */
- if( *dim >= 512 ){
- astError( AST__VSMAL, "%s(%s): The area of the plot containing "
- "usable coordinates on both axes is too small.", status, method,
- class );
- break;
- }
-
-/* Get two PointSets, one holding a regular grid of graphics coordinates,
- and the other holding the corresponding physical coordinates. The grid
- covers the entire plotting area with the current grid dimension. A
- pointer to the physical axis values is returned. */
- ptr2 = MakeGrid( this, frm, map, 1, *dim, this->xlo, this->xhi, this->ylo,
- this->yhi, 2, pset1, pset2, 0, method, class, status );
-
-/* Get the number of graphics axis values. */
- size = astGetNpoint( *pset1 );
-
-/* Get a pointer to the graphics axis values. */
- ptr1 = astGetPoints( *pset1 );
-
-/* Check the pointers can be used. */
- if( astOK ){
-
-/* Find the bounds in graphics coordinates of the area enclosing the
- good physical positions in the grid, and count the good positions. */
- ngood = 0;
-
- pa = ptr2[ 0 ];
- pb = ptr2[ 1 ];
- px = ptr1[ 0 ];
- py = ptr1[ 1 ];
-
- xmin = DBL_MAX;
- xmax = -DBL_MAX;
- ymin = DBL_MAX;
- ymax = -DBL_MAX;
-
- for( j = 0; j < size; j++ ){
- if( *pa != AST__BAD && *pb != AST__BAD ){
- if( *px < xmin ) xmin = *px;
- if( *px > xmax ) xmax = *px;
- if( *py < ymin ) ymin = *py;
- if( *py > ymax ) ymax = *py;
- ngood++;
- }
- px++;
- py++;
- pa++;
- pb++;
- }
- }
- }
-
-/* Store approximate fraction of the plotting area containing good
- physical coordinates. */
- if( astOK ) {
- frac = ( (double) ngood )/(double)( astGetNpoint( *pset1 ) );
-
-/* Get the size of each grid cell. */
- dx = ptr1[0][1] - ptr1[0][0];
- dy = ptr1[1][1] - ptr1[1][0];
-
-/* Extend the area containing good points by one grid cell. */
- xmax += dx;
- xmin -= dx;
- ymax += dy;
- ymin -= dy;
-
-/* If the area containing good points is significantly smaller than
- the supplied area, create a new grid covering just the area containing
- good positions. */
- if( ( xmax - xmin ) < 0.9*( this->xhi - this->xlo ) ||
- ( ymax - ymin ) < 0.9*( this->yhi - this->ylo ) ){
-
-/* Find a new grid dimension which results in a cell size similar to
- the one used to create the grid, but covering only the region containing
- good physical coordinates. */
- *dim *= MAX( (xmax - xmin)/(this->xhi - this->xlo),
- (ymax - ymin)/(this->yhi - this->ylo) );
- if( *dim < 32 ) *dim = 32;
-
-/* Annul the PointSet holding the current grid. */
- *pset1 = astAnnul( *pset1 );
- *pset2 = astAnnul( *pset2 );
-
-/* Create the new grid covering the region containing good physical
- coordinates. */
- (void) MakeGrid( this, frm, map, 1, *dim, xmin, xmax, ymin, ymax, 2,
- pset1, pset2, 0, method, class, status );
- }
- }
-
-/* Annul the Mapping from base to current Frame, and the pointer to the
- Current Frame. */
- map = astAnnul( map );
- frm = astAnnul( frm );
-
-/* If an error has occurred, annul the two pointsets and indicate that
- there are no good points in the plotting area. */
- if( !astOK ){
- *pset1 = astAnnul( *pset1 );
- *pset2 = astAnnul( *pset2 );
- frac = 0.0;
- }
-
-/* Return. */
- return frac;
-
-}
-
-static int GraphGrid( int dim, int disk, double xlo, double xhi, double ylo,
- double yhi, double **ptr1, int *status ){
-/*
-* Name:
-* GraphGrid
-
-* Purpose:
-* Fill an array with a square grid of graphics coordinates.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int GraphGrid( int dim, int disk, double xlo, double xhi, double ylo,
-* double yhi, double **ptr1, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function fills the supplied array with a square grid of graphics
-* coordinates covering the supplied area. The points are stored row by
-* row, i.e. if the cell size for the grid is (dx,dy), the first point
-* is (xmin,ymin), followed by (xmin+dx,ymin), (xmin+2*dx,ymin), up to
-* (xmin+(dim-1)*dx,ymin), followed by the next row (xmin,ymin+dy),
-* (xmin+dx,ymin+dy), etc.
-
-* Parameters:
-* dim
-* The number of samples along each edge of the grid.
-* disk
-* If non-zero, the corners of the grid are omitted, resulting in a
-* grid that is more disk like than rectangular.
-* xlo
-* The lower bound on the first axis of the region to be covered
-* by the grid.
-* xhi
-* The upper bound on the first axis of the region to be covered
-* by the grid.
-* ylo
-* The lower bound on the second axis of the region to be covered
-* by the grid.
-* yhi
-* The upper bound on the second axis of the region to be covered
-* by the grid.
-* ptr1
-* A pointer to an array of two pointers giving the start of the two
-* arrays to receive the values for each of the two axes of the graphics
-* coordinate data.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The number of points in the grid. If "disk" is zero, this will be
-* the square of "dim". If "disk" is non-zero, this will be less than
-* the square of "dim" to account for the lack of corner points.
-
-*/
-
-/* Local Variables: */
- double *px;
- double *py;
- double cen;
- double dx;
- double dy2;
- double dy;
- double dx2;
- double r2;
- double y;
- int i;
- int j;
- int ok;
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Find the cell size. */
- dx = ( xhi - xlo )/(double)( dim - 1 );
- dy = ( yhi - ylo )/(double)( dim - 1 );
-
-/* Store the mid cell index. */
- cen = 0.5*( dim - 1 );
-
-/* Store the squared radius of the disk. */
- r2 = 1.9*cen*cen;
-
-/* Initialise pointers to the start of the two arrays to recieve the
- returned graphics values for each axis. */
- px = ptr1[ 0 ];
- py = ptr1[ 1 ];
-
-/* Loop round row. */
- for( j = 0; j < dim; j++ ){
- dy2 = j - cen;
- dy2 *= dy2;
-
-/* Get the Y coordinate of the current row. */
- y = ylo + j*dy;
-
-/* Loop round each column in the current row. */
- for( i = 0; i < dim; i++ ){
-
-/* If we are forming a disk rather than a square, check if this point is
- sufficiently close to the centre to be included in the disk. */
- if( disk ) {
- dx2 = i - cen;
- dx2 *= dx2;
- ok = ( dx2 + dy2 <= r2 );
- } else {
- ok = 1;
- }
-
-/* Store the coordinates of the current grid point. */
- if( ok ) {
- *(px++) = xlo + i*dx;
- *(py++) = y;
- }
- }
- }
-
-/* Return the used length of the PointSet. */
- return (int)( px - ptr1[ 0 ] );
-}
-
-static void GrfPop( AstPlot *this, int *status ) {
-/*
-*++
-* Name:
-c astGrfPop
-f AST_GRFPOP
-
-* Purpose:
-* Restore previously saved graphics functions used by a Plot.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "plot.h"
-c void astGrfPop( AstPlot *this )
-f CALL AST_GRFPOP( THIS STATUS )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-c This function restores a snapshot of the graphics functions
-c stored previously by calling astGrfPush. The restored graphics
-c functions become the current graphics functions used by the Plot.
-*
-c The astGrfPush and astGrfPop functions are intended for situations
-c where it is necessary to make temporary changes to the graphics
-c functions used by the Plot. The current functions should first be
-c saved by calling astGrfPush. New functions should then be registered
-c using astGrfSet. The required graphics should then be produced.
-c Finally, astGrfPop should be called to restore the original graphics
-c functions.
-f The AST_GRFPUSH and AST_GRFPOP functions are intended for situations
-f where it is necessary to make temporary changes to the graphics
-f functions used by the Plot. The current functions should first be
-f saved by calling AST_GRFPUSH. New functions should then be registered
-f using AST_GRFSET. The required graphics should then be produced.
-f Finally, AST_GRFPOP should be called to restore the original graphics
-f functions.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Plot.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-f - This routine returns without action if there are no snapshots to
-c - This function returns without action if there are no snapshots to
-* restore. No error is reported in this case.
-
-*--
-*/
-
-/* Local Variables: */
- AstGrfPtrs *newframe; /* Pointer to the stack frame to restore */
- int i; /* Loop count */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Check the stack is not already empty. */
- if( this->grfnstack > 0 ) {
- this->grfnstack--;
-
- if( astOK ) {
- newframe = this->grfstack + this->grfnstack;
-
- for( i = 0; i < AST__NGRFFUN; i++ ) {
- this->grffun[i] = (newframe->grffun)[i];
- }
- this->GAttr = newframe->GAttr;
- this->GFlush = newframe->GFlush;
- this->GLine = newframe->GLine;
- this->GMark = newframe->GMark;
- this->GText = newframe->GText;
- this->GCap = newframe->GCap;
- this->GTxExt = newframe->GTxExt;
- this->GScales = newframe->GScales;
- this->GQch = newframe->GQch;
- }
- }
-}
-
-static void GrfPush( AstPlot *this, int *status ) {
-/*
-*++
-* Name:
-c astGrfPush
-f AST_GRFPUSH
-
-* Purpose:
-* Save the current graphics functions used by a Plot.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "plot.h"
-c void astGrfPush( AstPlot *this )
-f CALL AST_GRFPUSH( THIS STATUS )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-c This function takes a snapshot of the graphics functions which are
-f This routine takes a snapshot of the graphics functions which are
-* currently registered with the supplied Plot, and saves the snapshot
-* on a first-in-last-out stack within the Plot. The snapshot can be
-* restored later using function
-c astGrfPop.
-f AST_GRFPOP.
-*
-c The astGrfPush and astGrfPop functions are intended for situations
-c where it is necessary to make temporary changes to the graphics
-c functions used by the Plot. The current functions should first be
-c saved by calling astGrfPush. New functions should then be registered
-c using astGrfSet. The required graphics should then be produced.
-c Finally, astGrfPop should be called to restore the original graphics
-c functions.
-f The AST_GRFPUSH and AST_GRFPOP functions are intended for situations
-f where it is necessary to make temporary changes to the graphics
-f functions used by the Plot. The current functions should first be
-f saved by calling AST_GRFPUSH. New functions should then be registered
-f using AST_GRFSET. The required graphics should then be produced.
-f Finally, AST_GRFPOP should be called to restore the original graphics
-f functions.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Plot.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-*--
-*/
-
-/* Local Variables: */
- AstGrfPtrs *newframe; /* Pointer to the new stack frame */
- int i; /* Loop count */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Increment the number of frames on the stack. */
- this->grfnstack++;
-
-/* Ensure the stack is large enough to hold this many frames. */
- this->grfstack = (AstGrfPtrs *) astGrow( (void *) this->grfstack,
- this->grfnstack, sizeof( AstGrfPtrs ) );
- if( astOK ) {
-
-/* Get a pointer to the new stack frame. */
- newframe = this->grfstack + this->grfnstack - 1;
-
-/* Copy the graphics function pointers from the main Plot attributes
- to the new stack frame. */
- for( i = 0; i < AST__NGRFFUN; i++ ) {
- (newframe->grffun)[i] = this->grffun[i];
- }
- newframe->GAttr = this->GAttr;
- newframe->GFlush = this->GFlush;
- newframe->GLine = this->GLine;
- newframe->GMark = this->GMark;
- newframe->GText = this->GText;
- newframe->GCap = this->GCap;
- newframe->GTxExt = this->GTxExt;
- newframe->GQch = this->GQch;
- newframe->GScales = this->GScales;
- }
-}
-
-static void GrfSet( AstPlot *this, const char *name, AstGrfFun fun, int *status ){
-/*
-*++
-* Name:
-c astGrfSet
-f AST_GRFSET
-
-* Purpose:
-c Register a graphics function for use by a Plot.
-f Register a graphics routine for use by a Plot.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "plot.h"
-c void astGrfSet( AstPlot *this, const char *name, AstGrfFun fun )
-f CALL AST_GRFSET( THIS, NAME, FUN, STATUS )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-c This function can be used to select the underlying graphics
-c functions to be used when the supplied Plot produces graphical output.
-c If this function is not called prior to producing graphical
-c output, then the underlying graphics functions selected at
-c link-time (using the ast_link command) will be used. To use
-c alternative graphics functions, call this function before
-c the graphical output is created, specifying the graphics
-c functions to be used. This will register the function for future
-c use, but the function will not actually be used until the Grf
-c attribute is given a non-zero value.
-f This routine can be used to select the underlying graphics
-f routines to be used when the supplied Plot produces graphical output.
-f If this routine is not called prior to producing graphical
-f output, then the underlying graphics routines selected at
-f link-time (using the ast_link command) will be used. To use
-f alternative graphics routines, call this routine before
-f the graphical output is created, specifying the graphics
-f routines to be used. This will register the routine for future
-f use, but the routine will not actually be used until the Grf
-f attribute is given a non-zero value.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Plot.
-c name
-f NAME = CHARACTER * ( * ) (Given)
-c A name indicating the graphics function to be replaced.
-c Various graphics functions are used by the
-c Plot class, and any combination of them may be supplied by calling
-c this function once for each function to be replaced. If any of the
-c graphics functions are not replaced in this way, the
-c corresponding functions in the graphics interface selected at
-c link-time (using the ast_link command) are used. The allowed
-c names are:
-f A name indicating the graphics routine to be replaced.
-f Various graphics routines are used by the
-f Plot class, and any combination of them may be supplied by calling
-f this routine once for each routine to be replaced. If any of the
-f graphics routines are not replaced in this way, the
-f corresponding routines in the graphics interface selected at
-f link-time (using the ast_link command) are used. The allowed
-f function names are:
-*
-* - Attr - Enquire or set a graphics attribute value
-* - Cap - Inquire a capability
-* - Flush - Flush all pending graphics to the output device
-* - Line - Draw a polyline (i.e. a set of connected lines)
-* - Mark - Draw a set of markers
-* - Qch - Return the character height in world coordinates
-* - Scales - Get the axis scales
-* - Text - Draw a character string
-* - TxExt - Get the extent of a character string
-*
-* The string is case insensitive. For details of the interface
-* required for each, see the sections below.
-c fun
-f FUN = INTEGER FUNCTION (Given)
-c A Pointer to the function to be used to provide the
-c functionality indicated by parameter name. The interface for
-c each function is described below, but the function pointer should
-c be cast to a type of AstGrfFun when calling astGrfSet.
-f The name of the routine to be used to provide the
-f functionality indicated by parameter NAME (the name
-f should also appear in a Fortran EXTERNAL statement in the
-f routine which invokes AST_GRFSET).
-*
-c Once a function has been provided, a null pointer can be supplied
-c in a subsequent call to astGrfSet to reset the function to the
-c corresponding function in the graphics interface selected at
-c link-time.
-f Once a routine has been provided, the "null" routine AST_NULL can
-f be supplied in a subsequent call to astGrfSet to reset the routine
-f to the corresponding routine in the graphics interface selected at
-f link-time. AST_NULL is defined in the AST_PAR include file.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Function Interfaces:
-* All the functions listed below (except for "Cap") should return an
-* integer value of 0 if an error occurs, and 1 otherwise. All x and y
-* values refer
-f to "graphics cordinates" as defined by the GRAPHBOX parameter of
-f the AST_PLOT call which created the Plot.
-c to "graphics cordinates" as defined by the graphbox parameter of
-c the astPlot call which created the Plot.
-*
-c The first parameter ("grfcon")
-f The first argument (GRFCON)
-* for each function is an AST KeyMap pointer that can be used by the
-* called function to establish the context in which it is being called.
-* The contents of the KeyMap are determined by the calling
-* application, which should obtain a pointer to the KeyMap using the
-f AST_GETGRFCONTEXT routine,
-c astGetGrfContext function,
-* and then store any necessary information in the KeyMap using the
-* methods of the KeyMap class. Note, the functions listed below
-* should never annul or delete the supplied KeyMap pointer.
-
-* Attr:
-* The "Attr" function returns the current value of a specified graphics
-* attribute, and optionally establishes a new value. The supplied
-* value is converted to an integer value if necessary before use.
-* It requires the following interface:
-*
-c int Attr( AstObject *grfcon, int attr, double value, double *old_value, int prim )
-f INTEGER FUNCTION ATTR( GRFCON, ATT, VAL, OLDVAL, PRIM )
-*
-c - grfcon -
-f - GRFCON = INTEGER (Given) -
-* A KeyMap containing information passed from the calling application.
-c - attr - An integer value identifying the required attribute.
-c The following symbolic values are defined in grf.h:
-f - ATT = INTEGER (Given) - An integer identifying the required attribute.
-f The following symbolic values are defined in GRF_PAR:
-* GRF__STYLE (Line style),
-* GRF__WIDTH (Line width),
-* GRF__SIZE (Character and marker size scale factor),
-* GRF__FONT (Character font),
-* GRF__COLOUR (Colour index).
-c - value -
-f - VAL = DOUBLE PRECISION (Given) -
-c A new value to store for the attribute. If this is AST__BAD
-* no value is stored.
-c - old_value - A pointer to a double in which to return
-f - OLDVAL = DOUBLE PRECISION (Returned) - Returned holding
-* the attribute value.
-c If this is NULL, no value is returned.
-c - prim -
-f - PRIM = INTEGER (Given) -
-* The sort of graphics primitive to be drawn with the new attribute.
-c Identified by the following values defined in grf.h:
-f Identified by the following values defined in GRF_PAR:
-* GRF__LINE,
-* GRF__MARK,
-* GRF__TEXT.
-
-* Cap:
-* The "Cap" function is called to determine if the grf module has a
-* given capability, as indicated by the "cap" argument:
-*
-c int Cap( AstObject *grfcon, int cap, int value )
-f INTEGER FUNCTION CAP( GRFCON, CAP, VALUE )
-*
-c - grfcon -
-f - GRFCON = INTEGER (Given) -
-* A KeyMap containing information passed from the calling application.
-c - cap -
-f - CAP = INTEGER (Given)
-* The capability being inquired about. This will be one of the
-c following constants defined in grf.h:
-f following constants defined in GRF_PAR:
-*
-* GRF__SCALES: This function should return a non-zero value if the
-* "Scales" function is implemented, and zero otherwise. The supplied
-c "value" argument should be ignored.
-f VALUE argument should be ignored.
-*
-* GRF__MJUST: This function should return a non-zero value if
-* the "Text" and "TxExt" functions recognise "M" as a
-* character in the justification string. If the first character of
-* a justification string is "M", then the text should be justified
-* with the given reference point at the bottom of the bounding box.
-* This is different to "B" justification, which requests that the
-* reference point be put on the baseline of the text, since some
-* characters hang down below the baseline. If the "Text" or
-* "TxExt" function cannot differentiate between "M" and "B",
-* then this function should return zero, in which case "M"
-* justification will never be requested by Plot. The supplied
-c "value" argument should be ignored.
-f VALUE argument should be ignored.
-*
-* GRF__ESC: This function should return a non-zero value if the
-* "Text" and "TxExt" functions can recognise and interpret
-* graphics escape sequences within the supplied string (see
-* attribute Escape). Zero should be returned if escape sequences
-* cannot be interpreted (in which case the Plot class will interpret
-c them itself if needed). The supplied "value" argument should be
-f them itself if needed). The supplied VALUE argument should be
-* ignored only if escape sequences cannot be interpreted by "Text" and
-c "TxExt". Otherwise, "value" indicates whether "Text" and "TxExt"
-c should interpret escape sequences in subsequent calls. If "value" is
-f "TxExt". Otherwise, VALUE indicates whether "Text" and "TxExt"
-f should interpret escape sequences in subsequent calls. If VALUE is
-* non-zero then escape sequences should be interpreted by "Text" and
-* "TxExt". Otherwise, they should be drawn as literal text.
-*
-c - value -
-f - VALUE = INTEGER (Given)
-c The use of this parameter depends on the value of "cap" as
-f The use of this parameter depends on the value of CAP as
-* described above.
-
-* - Returned Function Value:
-c The value returned by the function depends on the value of "cap"
-f The value returned by the function depends on the value of CAP
-* as described above. Zero should be returned if the supplied
-* capability is not recognised.
-
-* Flush:
-* The "Flush" function ensures that the display device is up-to-date,
-* by flushing any pending graphics to the output device. It
-* requires the following interface:
-*
-c int Flush( AstObject *grfcon )
-f INTEGER FUNCTION FLUSH( GRFCON )
-*
-c - grfcon -
-f - GRFCON = INTEGER (Given) -
-* A KeyMap containing information passed from the calling application.
-
-* Line:
-* The "Line" function displays lines joining the given positions and
-* requires the following interface:
-*
-c int Line( AstObject *grfcon, int n, const float *x, const float *y )
-f INTEGER FUNCTION LINE( GRFCON, N, X, Y )
-*
-c - grfcon -
-f - GRFCON = INTEGER (Given) -
-* A KeyMap containing information passed from the calling application.
-c - n - The number of positions to be joined together.
-f - N = INTEGER (Given) - The number of positions to be joined together.
-c - x - A pointer to an array holding the "n" x values.
-f - X( N ) = REAL (Given) - An array holding the "n" x values.
-c - y - A pointer to an array holding the "n" y values.
-f - Y( N ) = REAL (Given) - An array holding the "n" y values.
-
-* Mark:
-* The "Mark" function displays markers at the given positions. It
-* requires the following interface:
-*
-c int Mark( AstObject *grfcon, int n, const float *x, const float *y, int type )
-f INTEGER FUNCTION MARK( GRFCON, N, X, Y, TYPE )
-*
-c - grfcon -
-f - GRFCON = INTEGER (Given) -
-* A KeyMap containing information passed from the calling application.
-c - n - The number of positions to be marked.
-f - N = INTEGER (Given) - The number of positions to be marked.
-c - x - A pointer to an array holding the "n" x values.
-f - X( N ) = REAL (Given) - An array holding the "n" x values.
-c - y - A pointer to an array holding the "n" y values.
-f - Y( N ) = REAL (Given) - An array holding the "n" y values.
-c - type - An integer which can be used to indicate the type of marker
-c symbol required.
-f - TYPE = INTEGER (Given) - An integer which can be used to indicate
-f the type of marker symbol required.
-
-* Qch:
-* The "Qch" function returns the heights of characters drawn vertically
-* and horizontally in graphics coordinates. It requires the following
-* interface:
-*
-c int Qch( AstObject *grfcon, float *chv, float *chh )
-f INTEGER FUNCTION QCH( GRFCON, CHV, CHH )
-*
-c - grfcon -
-f - GRFCON = INTEGER (Given) -
-* A KeyMap containing information passed from the calling application.
-c - chv - A pointer to the float which is to receive the height of
-f - CHV = REAL (Returned) The height of
-* characters drawn with a vertical baseline. This will be an
-* increment in the X axis.
-c - chh - A pointer to the float which is to receive the height of
-f - CHH = REAL (Returned) The height of
-* characters drawn with a horizontal baseline. This will be an
-* increment in the Y axis.
-
-* Scales:
-* The "Scales" function returns two values (one for each axis) which
-* scale increments on the corresponding axis into a "normal" coordinate
-* system in which: 1) the axes have equal scale in terms of (for instance)
-* millimetres per unit distance, 2) X values increase from left to
-* right, and 3) Y values increase from bottom to top. It requires the
-* following interface:
-*
-c int Scales( AstObject *grfcon, float *alpha, float *beta )
-f INTEGER FUNCTION SCALES( GRFCON, ALPHA, BETA )
-*
-c - grfcon -
-f - GRFCON = INTEGER (Given) -
-* A KeyMap containing information passed from the calling application.
-c - alpha - A pointer to the float which is to receive the
-f - ALPHA = REAL (Returned) The
-* scale for the X axis (i.e. Xnorm = alpha*Xworld).
-c - beta - A pointer to the float which is to receive the
-f - BETA = REAL (Returned) The
-* scale for the Y axis (i.e. Ynorm = beta*Yworld).
-
-* Text:
-* The "Text" function displays a character string at a given
-* position using a specified justification and up-vector. It
-* requires the following interface:
-*
-c int Text( AstObject *grfcon, const char *text, float x, float y, const char *just,
-c float upx, float upy )
-f INTEGER FUNCTION TEXT( GRFCON, TEXT, X, Y, JUST, UPX, UPY )
-*
-c - grfcon -
-f - GRFCON = INTEGER (Given) -
-* A KeyMap containing information passed from the calling application.
-c - text - Pointer to a null-terminated character string to be displayed.
-f - TEXT = CHARACTER * ( * ) (Given) - The string to be displayed.
-c - x - The reference x coordinate.
-f - X = REAL (Given) - The reference x coordinate.
-c - y - The reference y coordinate.
-f - Y = REAL (Given) - The reference y coordinate.
-c - just - A character string which specifies the location within the
-f - JUST = CHARACTER * ( * ) (Given ) - A string which specifies the
-f location within the
-* text string which is to be placed at the reference position
-* given by x and y. The first character may be 'T' for "top",
-* 'C' for "centre", or 'B' for "bottom", and specifies the
-* vertical location of the reference position. Note, "bottom"
-* corresponds to the base-line of normal text. Some characters
-* (eg "y", "g", "p", etc) descend below the base-line. The second
-* character may be 'L' for "left", 'C' for "centre", or 'R'
-* for "right", and specifies the horizontal location of the
-* reference position. If the string has less than 2 characters
-* then 'C' is used for the missing characters.
-c - upx - The x component of the up-vector for the text.
-f - UPX = REAL (Given) - The x component of the up-vector for the text.
-* If necessary the supplied value should be negated
-* to ensure that positive values always refer to displacements from
-* left to right on the screen.
-c - upy - The y component of the up-vector for the text.
-f - UPX = REAL (Given) - The y component of the up-vector for the text.
-* If necessary the supplied value should be negated
-* to ensure that positive values always refer to displacements from
-* bottom to top on the screen.
-
-* TxExt:
-* The "TxExt" function returns the corners of a box which would enclose
-* the supplied character string if it were displayed using the
-* Text function described above. The returned box includes any leading
-* or trailing spaces. It requires the following interface:
-*
-c int TxExt( AstObject *grfcon, const char *text, float x, float y, const char *just,
-c float upx, float upy, float *xb, float *yb )
-f INTEGER FUNCTION TXEXT( GRFCON, TEXT, X, Y, JUST, UPX, UPY, XB, YB )
-*
-c - grfcon -
-f - GRFCON = INTEGER (Given) -
-* A KeyMap containing information passed from the calling application.
-c - text - Pointer to a null-terminated character string to be displayed.
-f - TEXT = CHARACTER * ( * ) (Given) - The string to be displayed.
-c - x - The reference x coordinate.
-f - X = REAL (Given) - The reference x coordinate.
-c - y - The reference y coordinate.
-f - Y = REAL (Given) - The reference y coordinate.
-c - just - A character string which specifies the location within the
-f - JUST = CHARACTER * ( * ) (Given ) - A string which specifies the
-f location within the
-* text string which is to be placed at the reference position
-* given by x and y. See "Text" above.
-c - upx - The x component of the up-vector for the text.
-f - UPX = REAL (Given) - The x component of the up-vector for the text.
-* See "Text" above.
-c - upy - The y component of the up-vector for the text.
-f - UPX = REAL (Given) - The y component of the up-vector for the text.
-* See "Text" above.
-c - xb - An array of 4 elements in which to return the x coordinate of
-f - XB( 4 ) = REAL (Returned) - Returned holding the x coordinate of
-* each corner of the bounding box.
-c - yb - An array of 4 elements in which to return the y coordinate of
-f - YB( 4 ) = REAL (Returned) - Returned holding the y coordinate of
-* each corner of the bounding box.
-
-*--
-*/
-
-/* Local Variables: */
- const char *class; /* Object class */
- const char *method; /* Current method */
- int ifun; /* Index into grf function list */
- void (* wrapper)(); /* Wrapper function for C Grf routine*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- wrapper = NULL;
-
-/* Store the current method and class for inclusion in error messages
- generated by lower level functions. */
- method = "astGrfSet";
- class = astClass( this );
-
-/* Identify the supplied function name and get its integer index into the
- list of grf functions. */
- ifun = astGrfFunID( name, method, class );
-
-/* Store the pointer. */
- if( astOK ) {
- this->grffun[ifun] = fun;
-
-/* In general, the interface to each Grf function will differ for
- different languages. So we need a wrapper function with a known fixed
- interface which can be used to invoke the actual Grf function with
- an interface suited to the language in use. Call astGrfWrapper to store
- a wrapper to a suitable function which can invoke the supplied
- grf function. Here, we assume that the supplied function has a C
- interface, so we set up a C wrapper. If this function is being called
- from another language, then the interface for this function within
- that language should set up an appropriate wrapper after calling this
- function, thus over-riding the C wrapper set up here. */
- if( ifun == AST__GATTR ) {
- wrapper = (AstGrfWrap) CGAttrWrapper;
-
- } else if( ifun == AST__GFLUSH ) {
- wrapper = (AstGrfWrap) CGFlushWrapper;
-
- } else if( ifun == AST__GLINE ) {
- wrapper = (AstGrfWrap) CGLineWrapper;
-
- } else if( ifun == AST__GMARK ) {
- wrapper = (AstGrfWrap) CGMarkWrapper;
-
- } else if( ifun == AST__GTEXT ) {
- wrapper = (AstGrfWrap) CGTextWrapper;
-
- } else if( ifun == AST__GCAP ) {
- wrapper = (AstGrfWrap) CGCapWrapper;
-
- } else if( ifun == AST__GTXEXT ) {
- wrapper = (AstGrfWrap) CGTxExtWrapper;
-
- } else if( ifun == AST__GSCALES ) {
- wrapper = (AstGrfWrap) CGScalesWrapper;
-
- } else if( ifun == AST__GQCH ) {
- wrapper = (AstGrfWrap) CGQchWrapper;
-
- } else if( astOK ) {
- astError( AST__INTER, "%s(%s): AST internal programming error - "
- "Grf function id %d not yet supported.", status, method, class,
- ifun );
- }
- astGrfWrapper( this, name, wrapper );
- }
-}
-
-int astGrfFunID_( const char *name, const char *method, const char *class, int *status ) {
-/*
-*+
-* Name:
-* astGrfFunID
-
-* Purpose:
-* Return the integer identifier for a given GRF routine.
-
-* Type:
-* Hidden public function.
-
-* Synopsis:
-* #include "plot.h"
-* int astGrfFunID( const char *name, const char *method,
-* const char *class )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function returns an integer identifying the named grf function.
-* An error is reported if the named function is unknown. This function
-* is used by non-class modules within AST (e.g. fplot.c) which is why
-* it is public. It is not intended to be used by the public.
-
-* Parameters:
-* name
-* The grf function name. Any unambiguous abbreviation will do.
-* Case is ignored. The full list of grf function names is:
-* "Attr Scales Flush Line Mark Qch Text TxExt". See grf_pgplot.c
-* for details of these functions.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-
-*-
-*/
-
-/* Note that the list of identifiers here must be in the same order as the
- sorted values of the constants AST__GATTR, AST__GFLUSH, etc */
- return FullForm( "Attr Flush Line Mark Text TxExt Scales Qch Cap", name,
- "Grf function name (programming error)", method, class, status );
-}
-
-static char *GrfItem( int item, const char *text, int *axis, int *status ){
-/*
-* Name:
-* GrfItem
-
-* Purpose:
-* Return the textual name corresponding to a specified graphical item
-* index.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* char *GrfItem( int item, const char *text, int *axis, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function returns a textual description of the graphical item
-* with the supplied index.
-
-* Parameters:
-* item
-* The index of the graphical item.
-* text
-* A pointer to a string which will be appended to the textual
-* description of the graphical item. May be NULL.
-* axis
-* Pointer to a place in which to return the index (0,1, or 2) of
-* the axis to which the attribute refers, If the attribute does
-* not refer to a specific axis, -1 is returned.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated string holding the textual
-* description of the graphical item, followed by any supplied "text".
-
-* Notes:
-* - An error is reported and a NULL pointer returned if the
-* index does not correspond to any graphical item.
-* - The returned pointer should be freed using astFree when it is no
-* longer needed.
-* - This function attempts to execute even if an error has already
-* occurred.
-
-*/
-
-/* Local Variables: */
- char *desc; /* Pointer to the item description */
- char *ret; /* Pointer to the returned string */
- int dlen; /* Length of the item description */
-
- if( axis ) *axis = -1;
-
- if( item == AST__BORDER_ID ) {
- desc = "Border";
-
- } else if ( item == AST__GRIDLINE_ID ) {
- desc = "Gridline";
-
- } else if ( item == AST__GRIDLINE1_ID ) {
- desc = "Axis 1 gridline";
- if( axis ) *axis = 0;
-
- } else if ( item == AST__GRIDLINE2_ID ) {
- desc = "Axis 2 gridline";
- if( axis ) *axis = 1;
-
- } else if ( item == AST__GRIDLINE3_ID ) {
- desc = "Axis 3 gridline";
- if( axis ) *axis = 2;
-
- } else if ( item == AST__CURVE_ID ) {
- desc = "Curve";
-
- } else if ( item == AST__NUMLABS_ID ) {
- desc = "Numerical labels";
-
- } else if ( item == AST__TEXTLABS_ID ) {
- desc = "Textual labels";
-
- } else if ( item == AST__TITLE_ID ) {
- desc = "Title";
-
- } else if ( item == AST__MARKS_ID ) {
- desc = "Markers";
-
- } else if ( item == AST__TEXT_ID ) {
- desc = "Text string";
-
- } else if ( item == AST__TICKS_ID ) {
- desc = "Major and minor ticks";
-
- } else if ( item == AST__AXIS1_ID ) {
- desc = "Axis 1";
- if( axis ) *axis = 0;
-
- } else if ( item == AST__AXIS2_ID ) {
- desc = "Axis 2";
- if( axis ) *axis = 1;
-
- } else if ( item == AST__AXIS3_ID ) {
- desc = "Axis 3";
- if( axis ) *axis = 2;
-
- } else if ( item == AST__NUMLAB1_ID ) {
- desc = "Axis 1 numerical labels";
- if( axis ) *axis = 0;
-
- } else if ( item == AST__NUMLAB2_ID ) {
- desc = "Axis 2 numerical labels";
- if( axis ) *axis = 1;
-
- } else if ( item == AST__NUMLAB3_ID ) {
- desc = "Axis 3 numerical labels";
- if( axis ) *axis = 2;
-
- } else if ( item == AST__TEXTLAB1_ID ) {
- desc = "Axis 1 textual label";
- if( axis ) *axis = 0;
-
- } else if ( item == AST__TEXTLAB2_ID ) {
- desc = "Axis 2 textual label";
- if( axis ) *axis = 1;
-
- } else if ( item == AST__TEXTLAB3_ID ) {
- desc = "Axis 3 textual label";
- if( axis ) *axis = 2;
-
- } else if ( item == AST__TICKS1_ID ) {
- desc = "Axis 1 tick marks";
- if( axis ) *axis = 0;
-
- } else if ( item == AST__TICKS2_ID ) {
- desc = "Axis 2 tick marks";
- if( axis ) *axis = 1;
-
- } else if ( item == AST__TICKS3_ID ) {
- desc = "Axis 3 tick marks";
- if( axis ) *axis = 2;
-
- } else {
- desc = NULL;
- if( astOK ){
- astError( AST__INTER, "GrfItem: AST internal programming error - "
- "Invalid graphical item index %d supplied to GrfItem.", status,
- item );
- }
- }
-
- if( desc ) {
- dlen = strlen( desc );
-
- if( text ) {
- ret = astStore( NULL, desc, dlen + strlen( text ) + 1 );
- if( ret ) strcpy( ret + dlen, text );
- } else {
- ret = astStore( NULL, desc, dlen + 1 );
- }
-
- } else {
- ret = NULL;
- }
-
-/* Return the answer. */
- return ret;
-}
-
-static void GrfWrapper( AstPlot *this, const char *name, AstGrfWrap wrapper, int *status ) {
-/*
-*+
-* Name:
-* astGrfWrapper
-
-* Purpose:
-* Register a wrapper function for a F77 or C Grf function.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "plot.h"
-* void astGrfWrapper( AstPlot *this, const char *name, AstGrfWrap wrapper)
-
-* Description:
-* This function stores a pointer to the supplied wrapper function
-* within the plot, associating it with the grf function indicated by
-* the "name" parameter. The supplied wrapper function should call the
-* named grf function, using an interface appropriate to the language
-* in which the grf function is written.
-
-* Parameters:
-* this
-* The plot.
-* name
-* A name indicating the graphics function which is called by the
-* supplied wrapper function. See astGrfSet for details.
-* wrapper
-* A pointer to the wrapper function. This will be cast to a
-* specific type for the named grf function before being store
-* in the Plot.
-*-
-*/
-
-/* Local Variables: */
- const char *class; /* Object class */
- const char *method; /* Current method */
- int ifun; /* Index into grf function list */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Store the current method and class for inclusion in error messages
- generated by lower level functions. */
- method = "astGrfWrapper";
- class = astClass( this );
-
-/* Identify the supplied function name and get its integer index into the
- list of grf functions. */
- ifun = astGrfFunID( name, method, class );
-
-/* Cast the wrapper to an interface appropriate for the wrapped grf
- function, and store it in the appropriate component of the Plot. */
- if( ifun == AST__GATTR ) {
- this->GAttr = (AstGAttrWrap) wrapper;
-
- } else if( ifun == AST__GFLUSH ) {
- this->GFlush = (AstGFlushWrap) wrapper;
-
- } else if( ifun == AST__GLINE ) {
- this->GLine = (AstGLineWrap) wrapper;
-
- } else if( ifun == AST__GMARK ) {
- this->GMark = (AstGMarkWrap) wrapper;
-
- } else if( ifun == AST__GTEXT ) {
- this->GText = (AstGTextWrap) wrapper;
-
- } else if( ifun == AST__GCAP ) {
- this->GCap = (AstGCapWrap) wrapper;
-
- } else if( ifun == AST__GTXEXT ) {
- this->GTxExt = (AstGTxExtWrap) wrapper;
-
- } else if( ifun == AST__GSCALES ) {
- this->GScales = (AstGScalesWrap) wrapper;
-
- } else if( ifun == AST__GQCH ) {
- this->GQch = (AstGQchWrap) wrapper;
-
- } else if( astOK ) {
- astError( AST__INTER, "%s(%s): AST internal programming error - "
- "Grf function id %d not yet supported.", status, method, class,
- ifun );
- }
-}
-
-static void Grid( AstPlot *this_nd, int *status ){
-/*
-*++
-* Name:
-c astGrid
-f AST_GRID
-
-* Purpose:
-* Draw a set of labelled coordinate axes.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "plot.h"
-c void astGrid( AstPlot *this )
-f CALL AST_GRID( THIS, STATUS )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-c This function draws a complete annotated set of
-f This routine draws a complete annotated set of
-* coordinate axes for a Plot with (optionally) a coordinate grid
-* superimposed. Details of the axes and grid can be controlled by
-* setting values for the various attributes defined by the Plot
-* class (q.v.).
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Plot.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - If the supplied Plot is a Plot3D, the axes will be annotated
-* using three 2-dimensional Plots, one for each 2D plane in the 3D
-* current coordinate system. The plots will be "pasted" onto 3 faces
-* of the cuboid graphics volume specified when the Plot3D was
-* constructed. The faces to be used can be controlled by the "RootCorner"
-* attribute.
-* - An error results if either the current Frame or the base Frame
-* of the Plot is not 2-dimensional or (for a Plot3D) 3-dimensional.
-* - An error also results if the transformation between the base
-* and current Frames of the Plot is not defined in either
-* direction (i.e. the Plot's TranForward or TranInverse attribute
-* is zero).
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstPlot *this; /* Plot with 2d current Frame */
- AstPlotCurveData **cdata;/* Pointer to info. about breaks in curves */
- TickInfo **grid; /* Pointer to info. about tick marks */
- const char *class; /* Object class */
- const char *method; /* Current method */
- double cen[ 2 ]; /* Position of first tick mark */
- double gap[ 2 ]; /* Gap between tick marks */
- double labelat[ 2 ]; /* Axis values at which tick marks are put */
- int axis; /* Physical axis index */
- int border; /* Draw a border? */
- int clip; /* Original Clip attribute value */
- int dounits[2]; /* Include Units in each axis label? */
- int drawgrid; /* Is a grid of lines to be drawn? */
- int clredge; /* Clear the Edge attributes before returning? */
- int edgeticks; /* Draw labels round edges of plotting area? */
- int escs; /* Original astEscapes value */
- int ink; /* Draw the grid with visible ink? */
- int inval; /* Were areas of invalid coordinates found? */
- int loglabelset[2]; /* Were the LogLabel attributes set initially? */
- int logticksset[2]; /* Were the LogTicks attributes set initially? */
- int naxes; /* No. of axes in the base or current Frame */
- int oldedge0; /* Default value for Edge(1) */
- int oldedge1; /* Default value for Edge(2) */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this_nd);
-
-/* Store the current method and class for inclusion in error messages
- generated by lower level functions. */
- method = "astGrid";
- class = astClass( this_nd );
-
-/* Check the base Frame of the Plot is 2-D. */
- naxes = astGetNin( this_nd );
- if( naxes != 2 && astOK ){
- astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the base "
- "Frame of the supplied %s is invalid - this number should "
- "be 2.", status, method, class, naxes, class );
- }
-
-/* Ensure AST functions included graphical escape sequences in any
- returned text strings. */
- escs = astEscapes( 1 );
-
-/* Note if attributes which have complex dynamic defaults are set
- initially. */
- logticksset[0] = astTestLogTicks( this_nd, 0 );
- logticksset[1] = astTestLogTicks( this_nd, 1 );
- loglabelset[0] = astTestLogLabel( this_nd, 0 );
- loglabelset[1] = astTestLogLabel( this_nd, 1 );
-
-/* Get a Plot with a 2D (or 1D) current Frame. */
- this = (AstPlot *) Fset2D( (AstFrameSet *) this_nd, AST__CURRENT, status );
-
-/* Check the current Frame of the Plot is 2-D. */
- naxes = astGetNout( this );
- if( naxes != 2 && astOK ){
- astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the current "
- "Frame of the supplied %s is invalid - this number should "
- "be 2.", status, method, class, naxes, class );
- }
-
-/* Ensure that all lines are clipped at the plot boundary.*/
- if( astTestClip( this ) ) {
- clip = astGetClip( this );
- astSetClip( this, 1 );
- } else {
- clip = -1;
- }
-
-/* If the protected attribute "Ink" is set to zero, then the plot
- is drawn in "invisble ink" (i.e. all the calculations needed to
- produce the grid are performed, but nothing is actually drawn). */
- ink = astGetInk( this );
-
-/* Initialise the bounds of the box containing all plotted lines and
- numerical labels. */
- Box_lbnd[ 0 ] = FLT_MAX;
- Box_lbnd[ 1 ] = FLT_MAX;
- Box_ubnd[ 0 ] = FLT_MIN;
- Box_ubnd[ 1 ] = FLT_MIN;
-
-/* Obtain the requested centre attribute values for both physical axes. */
- for( axis = 0; axis < 2; axis++ ){
- cen[ axis ] = astGetCentre( this, axis );
- }
-
-/* Determine where to put the major axis values. */
- grid = GridLines( this, cen, gap, &inval, method, class, status );
-
-/* If the user has set an explicit value for Grid, use it. */
- if( astTestGrid( this ) ){
- drawgrid = astGetGrid( this );
-
-/* If not, the default for Grid is based on whether or not there are any
- invalid regions. */
- } else if( inval ){
- drawgrid = 1;
-
- } else {
- drawgrid = 0;
- }
-
-/* Draw the curves marking the major tick values on each axis. Information
- is returned describing the positions of the breaks in these curves. */
- cdata = DrawGrid( this, grid, ( ink && drawgrid ), method, class, status );
-
-/* See if labels and tick marks will be drawn round the edges of the
- plotting area, rather than within it (no labels are actually drawn
- yet). Interior labels can always be produced, in which case edgeticks
- is set explicitly to zero to indicate that ticks will be internal.
- Exterior labelling may or may not be possible. If it is requested,
- check to see if it is possible. */
- clredge = 0;
- if( astGetLabelling( this ) ){
- edgeticks = 0;
- } else {
- edgeticks = EdgeLabels( this, 0, grid, cdata, 0, method, class, status );
-
-/* If the external labelling was requested, but could not be produced... */
- if( !edgeticks ) {
-
-/* and if the Edge attributes have not been set... */
- if( !astTestEdge( this, 0 ) && !astTestEdge( this, 1 ) ) {
-
-/* Try flipping the default Edge values, to see if this allows us to
- honour the requested Labelling scheme. */
- oldedge0 = astGetEdge( this, 0 );
- oldedge1 = astGetEdge( this, 1 );
- astSetEdge( this, 0, oldedge1 );
- astSetEdge( this, 1, oldedge0 );
-
-/* See if exterior labels could be drawn with these new edges. */
- edgeticks = EdgeLabels( this, 0, grid, cdata, 0, method, class, status );
-
-/* If this would allow us to use the requested labelling scheme, retain
- the new Edge values, setting a flag to indicate that they will need to be
- cleared before returning. Otherwise, clear them. */
- if( edgeticks ) {
- clredge = 1;
-
- } else {
- astClearEdge( this, 0 );
- astClearEdge( this, 1 );
- }
- }
- }
- }
-
-/* If edge ticks can still not be produced, but the ForceExterior attribute
- has a non-zero value, attempt to create exterior labels even though it
- looks like there may be insufficient of them to justify their use. */
- if( !edgeticks && astGetForceExterior( this ) ) {
- edgeticks = EdgeLabels( this, 0, grid, cdata, 1, method, class, status );
- }
-
-/* We may also need to swap edge values when using interior labelling in
- order to ensure that the text labels are placed on appropriate edges of
- the plotting box. */
- if( !edgeticks && !astTestEdge( this, 0 ) && !astTestEdge( this, 1 ) ) {
- if( swapEdges( this, grid, cdata, status ) ) {
- oldedge0 = astGetEdge( this, 0 );
- oldedge1 = astGetEdge( this, 1 );
- astSetEdge( this, 0, oldedge1 );
- astSetEdge( this, 1, oldedge0 );
- clredge = 1;
- }
- }
-
-/* If edge ticks are being used, store bad values for the labelat values to
- indicate that labels are not being drawn within the interior of the
- plotting area. */
- if( edgeticks ){
- labelat[ 0 ] = AST__BAD;
- labelat[ 1 ] = AST__BAD;
-
-/* Otherwise, see where interior labels and tick marks should go (the axis
- values are put in "labelat"). */
- } else {
- Labelat( this, grid, cdata, labelat, method, class, status );
- }
-
-/* See if a border is required. By default, a border is drawn only when
- using exterior labelling. */
- if( astTestBorder( this ) ) {
- border = astGetBorder( this );
- } else {
- border = edgeticks;
- }
-
-/* See if the Units string is to be inluded in the label. */
- dounits[ 0 ] = astGetLabelUnits( this, 0 );
- dounits[ 1 ] = astGetLabelUnits( this, 1 );
-
-/* The rest is not done if no output is required. */
- if( ink ) {
-
-/* Draw tick marks (major and minor). */
- DrawTicks( this, grid, drawgrid, labelat, gap, method, class, status );
-
-/* If required, ensure that curves through the tick marks have been drawn */
- DrawAxis( this, grid, labelat, gap, method, class, status );
-
-/* If required, draw a curve around the edge of the area containing valid
- physical coordinates. */
- if( border ) (void) astBorder( this );
-
-/* Draw the numerical labels at the major tick values. */
- Labels( this, grid, cdata, gap, labelat, method, class, status );
-
-/* Draw the textual labels for each axis and a title. */
- TextLabels( this, edgeticks, dounits, method, class, status );
- }
-
-/* Store the actual values used for all attributes which have dynamic
- defaults. Check the global status to ensure the pointer "grid" can be
- used without the possibility of a segmentation violation. */
- for( axis = 0; axis < 2 && astOK ; axis++ ) {
- SetUsedLogTicks( this_nd, axis, astGetLogTicks( this, axis ), status );
- SetUsedLogLabel( this_nd, axis, astGetLogLabel( this, axis ), status );
-
- if( astGetLogTicks( this, axis ) ) {
- SetUsedLogGap( this_nd, axis, gap[ axis ], status );
- } else {
- SetUsedGap( this_nd, axis, gap[ axis ], status );
- }
- SetUsedCentre( this_nd, axis, cen[ axis ], status );
- SetUsedEdge( this_nd, axis, astGetEdge( this, axis ), status );
- SetUsedLabelAt( this_nd, axis, labelat[ axis ], status );
- SetUsedLabelUnits( this_nd, axis, dounits[ axis ], status );
-
-/* If explicit minor tick values were supplied using astSetTickValues,
- then set MinTick to the average number of minor tick divisions per major
- tick division. */
- if( grid[ axis ]->minticks ) {
- SetUsedMinTick( this_nd, axis,
- ( grid[ axis ]->nminor + grid[ axis ]->nmajor )/
- ( grid[ axis ]->nmajor - 1 ), status );
- } else {
- SetUsedMinTick( this_nd, axis, grid[ axis ]->nminor, status );
- }
-
- if( astTestTextLab( this, axis ) ) {
- SetUsedTextLab( this_nd, axis, astGetTextLab( this, axis ), status );
- } else {
- SetUsedTextLab( this_nd, axis, edgeticks, status );
- }
-
- if( astTestMajTickLen( this, axis ) ) {
- SetUsedMajTickLen( this_nd, axis, astGetMajTickLen( this, axis ), status );
- } else {
- SetUsedMajTickLen( this_nd, axis, drawgrid ? 0.0 :
- astGetMajTickLen( this, axis ), status );
- }
-
- }
-
- SetUsedGrid( this_nd, drawgrid, status );
- SetUsedLabelling( this_nd, edgeticks ? 0 : 1, status );
- SetUsedBorder( this_nd, border, status );
-
-/* Free the memory used to hold information about the curves. */
- cdata = CleanCdata( cdata, status );
-
-/* Free the memory used to hold information about the tick marks. */
- grid = CleanGrid( grid, status );
-
-/* If required clear attributes. */
- if( clredge ) {
- astClearEdge( this, 0 );
- astClearEdge( this, 1 );
- }
-
- if( !logticksset[ 0 ] ) astClearLogTicks( this, 0 );
- if( !logticksset[ 1 ] ) astClearLogTicks( this, 1 );
- if( !loglabelset[ 0 ] ) astClearLogLabel( this, 0 );
- if( !loglabelset[ 1 ] ) astClearLogLabel( this, 1 );
-
-/* Restore the original value of the Clip attribute. */
- if( clip != -1 ) astSetClip( this, clip );
-
-/* Free the 2D Plot. */
- this = astAnnul( this );
-
-/* Restore the original value of the flag which says whether graphical
- escape sequences should be incldued in any returned text strings. */
- astEscapes( escs );
-
-/* Copy the total bounding box to the box which is returned by
- astBoundingBox. */
- if( !Boxp_freeze ){
- Boxp_lbnd[ 0 ] = Box_lbnd[ 0 ];
- Boxp_lbnd[ 1 ] = Box_lbnd[ 1 ];
- Boxp_ubnd[ 0 ] = Box_ubnd[ 0 ];
- Boxp_ubnd[ 1 ] = Box_ubnd[ 1 ];
- }
-
-/* Return. */
- return;
-
-}
-
-static void GridLine( AstPlot *this, int axis, const double start[],
- double length, int *status ){
-/*
-*++
-* Name:
-c astGridLine
-f AST_GRIDLINE
-
-* Purpose:
-* Draw a grid line (or axis) for a Plot.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "plot.h"
-c void astGridLine( AstPlot *this, int axis, const double start[],
-c double length )
-f CALL AST_GRIDLINE( THIS, AXIS, START, LENGTH, STATUS )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-c This function draws a curve in the physical coordinate system of
-f This routine draws a curve in the physical coordinate system of
-* a Plot by varying only one of the coordinates along the length
-* of the curve. It is intended for drawing coordinate axes,
-* coordinate grids, and tick marks on axes (but note that these
-c are also available via the more comprehensive astGrid function).
-f are also available via the more comprehensive AST_GRID routine).
-*
-* The curve is transformed into graphical coordinate space for
-* plotting, so that a straight line in physical coordinates may
-* result in a curved line being drawn if the Mapping involved is
-* non-linear. Any discontinuities in the Mapping between physical
-* and graphical coordinates are catered for, as is any
-c clipping established using astClip.
-f clipping established using AST_CLIP.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Plot.
-c axis
-f AXIS = INTEGER (Given)
-* The index of the Plot axis whose physical coordinate value is
-* to be varied along the length of the curve (all other
-* coordinates will remain fixed). This value should lie in the
-* range from 1 to the number of Plot axes (Naxes attribute).
-c start
-f START( * ) = DOUBLE PRECISION (Given)
-* An array, with one element for each axis of the Plot, giving
-* the physical coordinates of the start of the curve.
-c length
-f LENGTH = DOUBLE PRECISION (Given)
-* The length of curve to be drawn, given as an increment along
-* the selected physical axis. This may be positive or negative.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-c - No curve is drawn if the "start" array contains any
-c coordinates with the value AST__BAD, nor if "length" has this value.
-f - No curve is drawn if the START array contains any
-f coordinates with the value AST__BAD, nor if LENGTH has this value.
-* - An error results if the base Frame of the Plot is not 2-dimensional.
-* - An error also results if the transformation between the
-* current and base Frames of the Plot is not defined (i.e. the
-* Plot's TranInverse attribute is zero).
-*--
-*/
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- const char *class; /* Object class */
- const char *method; /* Current method */
- int naxes; /* No. of axes in the base Frame */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* Store the current method, and the class of the supplied object for use
- in error messages.*/
- method = "astGridLine";
- class = astGetClass( this );
-
-/* Check the base Frame of the Plot is 2-D. */
- naxes = astGetNin( this );
- if( naxes != 2 && astOK ){
- astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the base "
- "Frame of the supplied %s is invalid - this number should "
- "be 2.", status, method, class, naxes, class );
- }
-
-/* Initialise the bounding box for primatives produced by this call. */
- if( !Boxp_freeze ) {
- Boxp_lbnd[ 0 ] = FLT_MAX;
- Boxp_lbnd[ 1 ] = FLT_MAX;
- Boxp_ubnd[ 0 ] = FLT_MIN;
- Boxp_ubnd[ 1 ] = FLT_MIN;
- }
-
-/* Validate the axis index, converting the axis index to be zero-based. */
- (void) astValidateAxis( this, axis - 1, method );
-
-/* Draw the curve. The break information is stored in an external structure
- where it can be accessed by public methods which return information
- about the most recently drawn curve. */
- AxPlot( this, axis - 1, start, length, 1, &Curve_data, method, class, status );
-
-/* Return. */
- return;
-
-}
-
-static TickInfo **GridLines( AstPlot *this, double *cen, double *gap,
- int *inval, const char *method, const char *class, int *status ){
-/*
-* Name:
-* GridLines
-
-* Purpose:
-* Obtain information desribing the major tick values within the plotting
-* area.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* TickInfo **GridLines( AstPlot *this, double *cen, double *gap,
-* int *inval, const char *method, const char *class, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* A pointer is returned which points to an array of two pointers. Each
-* of these pointers points to a TickInfo structure which holds
-* information about the ticks on a single axis. These structures,
-* together with the array holding the two pointers, should be released
-* when no longer needed using CleanGrid.
-
-* Parameters:
-* this
-* The Plot.
-* cen
-* A pointer to an array holding axis values at which to put a single
-* central tick. Other ticks are placed evenly on either side of this
-* tick. If AST__BAD is provided, a value will be used which would put a
-* tick at an axis value of zero.
-* gap
-* A pointer to an array holding the gaps between ticks required on
-* each axis. If this is AST__BAD a suitable default value will be used
-* and returned in place of the AST__BAD value.
-* inval
-* A pointer to a location at which to return a flag indicating if
-* any invalid physical coordinates were encountered while deciding on
-* the tick values.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to an array of two TickInfo pointers.
-
-* Notes:
-* - This function assumes that the physical coordinate system is 2
-* dimensional, and it should not be used if this is not the case.
-* - If an error has already occurred, or if this function should fail
-* for any reason, then a NULL pointer is returned.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- GetTicksStatics *statics = NULL; /* Pointer to static data for GetTicks */
- TickInfo **info; /* Returned array of two TickInfo pointers */
- double *lengths; /* Pointer to lengths of each curve section */
- double *starts; /* Pointer to start of each curve section */
- double *ticks; /* Pointer to tick mark values */
- double bot; /* Lowest axis value to display */
- double end; /* Axis value at end of curve section */
- double tmp; /* Temp storage */
- double top; /* Highest axis value to display */
- int i; /* Tick mark index */
- int j; /* Axis index */
- int k; /* Section index */
- int logticks[ 2 ]; /* Uses logarithmicaly spaced tick marks? */
- int nticks; /* Number of tick marks */
-
-/* Check the global status. */
- if( !astOK ) return NULL;
-
-/* Get memory to hold two TickInfo pointers. */
- info = (TickInfo **) astMalloc( 2*sizeof( TickInfo *) );
-
-/* If succesfull... */
- if( astOK ){
-
-/* Initialise the two pointers. */
- info[ 0 ] = NULL;
- info[ 1 ] = NULL;
-
-/* Obtain the tick mark values, and the corresponding formatted labels for
- each axis. */
- for( j = 0; j < 2; j++ ){
- info[ j ] = TickMarks( this, j, cen + j, gap + j, inval,
- &statics, method, class, status );
- logticks[ j ] = astGetLogTicks( this, j );
- }
-
-/* Release the resources allocated in the first call to TickMarks. */
- for( j = 0; j < 2; j++ ){
- (void) TickMarks( NULL, j, NULL, gap, NULL, &statics, method, class,
- status );
- }
-
-/* Each major tick value for axis "j" may be marked with a curve parallel
- to axis "1-j" drawn across the entire plotting area. We need to decide
- where to start drawing this curve and how long it should be. We can
- simply use the minimum value on axis "1-j" together with the tick value
- on axis "j" to define the starting position. The length could be taken
- as the difference between the maximum and minimum values on axis "1-j".
- However, this may not be right in some situations. For instance if the
- plotting area covers a small range of Right Ascension from 23:59:59 to
- 00:00:01. Using the difference between the maximum and minimum values
- to give the length of the curve would result in the curve starting at
- 00:00:00 (the minimum axis value) and extending for a length of 23:59:59
- (the axis range). To get round this sort of problem, the curve is split
- up into sections with lengths and starting positions determined by the
- tick mark values on axis "1-j". The first section starts at the minimum
- axis value and extends upto the first missing tick mark (in the RA
- example, this would be at 00:00:01). Subsequent sections starts at the
- next tick mark (23:59:59 in the RA example) and extends upto the next
- missing tick mark, or the last tick mark if none are missing. */
-
-/* Get the current frame. */
- fr = astGetFrame( this, AST__CURRENT );
-
-/* If either axis has log tick spacing, use the simple approach which
- assumes that each curve has only one section. */
- if( logticks[ 0 ] || logticks[ 1 ] ) {
-
-/* Find the start and length of the curve for each tick mark on axis "j". */
- for( j = 0; j < 2 && astOK; j++ ){
-
-/* Find the axis range to display on the other axis. */
- bot = astGetBottom( fr, 1 - j );
- top = astGetTop( fr, 1 - j );
- if( bot > top ) {
- tmp = top;
- top = bot;
- bot = tmp;
- }
-
-/* Get a pointer to the major tick mark values on the other axis ("1-j"),
- together with the number of them. */
- ticks = info[ 1 - j ]->ticks;
- nticks = info[ 1 - j ]->nmajor;
-
-/* Reserve memory to hold the starts and lengths of each section of the
- grid line marking the major ticks on the axis "j". There will only be
- one section. */
- starts = (double *) astMalloc( sizeof(double) );
- lengths = (double *) astMalloc( sizeof(double) );
- info[ j ]->start = starts;
- info[ j ]->length = lengths;
-
-/* Check that the pointers can be used. */
- if( astOK ) {
-
-/* The section starts one gap below the first tick, and ends one gap above
- the first tick. Limit both to the displayed range of the axis. */
- if( logticks[ 1 - j ] ) {
- starts[ 0 ] = MIN( top, MAX( bot, ticks[ 0 ]/gap[ 1 - j ] ) );
- end = MIN( top, MAX( bot, ticks[ nticks - 1 ]*gap[ 1 - j ] ) );
- } else {
- starts[ 0 ] = MIN( top, MAX( bot, ticks[ 0 ] - gap[ 1 - j ] ) );
- end = MIN( top, MAX( bot, ticks[ nticks - 1 ] + gap[ 1 - j ] ) );
- }
-
-/* Store the length of the section. */
- lengths[ 0 ] = end - starts[ 0 ];
-
-/* Store the number of sections in the returned structure. */
- info[ 0 ]->nsect = 1;
-
- }
- }
-
-/* If both axes have linear tick spacing, use the complete approach. */
- } else {
-
-/* Find the start and length of each section of the curve for each tick
- mark on axis "j". */
- for( j = 0; j < 2 && astOK; j++ ){
-
-/* Find the axis range to display on the other axis. */
- bot = astGetBottom( fr, 1 - j );
- top = astGetTop( fr, 1 - j );
- if( bot > top ) {
- tmp = top;
- top = bot;
- bot = tmp;
- }
-
-/* Get a pointer to the major tick mark values on the other axis ("1-j"),
- together with the number of them. */
- ticks = info[ 1 - j ]->ticks;
- nticks = info[ 1 - j ]->nmajor;
-
-/* Reserve memory to hold the starts and lengths of each section of the
- grid line marking the major ticks on the axis "j". The allocated
- arrays are the largest that could possibly be needed (i.e. if every
- tick mark starts a new section). */
- starts = (double *) astMalloc( sizeof(double)*(size_t) nticks );
- lengths = (double *) astMalloc( sizeof(double)*(size_t) nticks );
- info[ j ]->start = starts;
- info[ j ]->length = lengths;
-
-/* Check that the pointers can be used. */
- if( astOK ) {
-
-/* Loop round each of the major tick marks on axis "1-j". */
- k = 0;
- i = 0;
- while( i < nticks ){
-
-/* Record the start of the next section of the grid lines. */
- starts[ k ] = ticks[ i++ ];
-
-/* Tick marks should be regularly spaced by the values in "gap". Check each
- tick mark until a missing tick mark is found. The section ends at the
- start of the gap. */
- while( i < nticks &&
- ( ticks[ i ] - ticks[ i - 1 ] ) < 1.5*gap[ 1 - j ] ) i++;
-
-/* Record the length of the section. */
- lengths[ k ] = ticks[ i - 1 ] - starts[ k ];
-
-/* The section is extended at start and end by one gap in order to "cover
- up the joins". Limit this to the displayed range of the axis. */
- starts[ k ] -= gap[ 1 - j];
- lengths[ k ] += 2.0*gap[ 1 - j ];
-
-/* Limit the start and end to the displayed range of the axis. */
- end = starts[ k ] + lengths[ k ];
- starts[ k ] = MIN( top, MAX( bot, starts[ k ] ) );
- lengths[ k ] = MIN( top, MAX( bot, end ) ) - starts[ k ];
-
-/* Increment the number of sections. */
- k++;
- }
-
-/* Store the number of sections in the returned structure. */
- info[j]->nsect = k;
-
- }
- }
- }
-
-/* Annull the current frame. */
- fr = astAnnul( fr );
-
- }
-
-/* If an error has occurred, clean up the returned TickInfo structures. */
- if( !astOK ) info = CleanGrid( info, status );
-
-/* Return. */
- return info;
-
-}
-
-void astGrfAttrs_( AstPlot *this, int id, int set, int prim, const char *method, const char *class, int *status ){
-/*
-*+
-* Name:
-* astGrfAttrs
-
-* Purpose:
-* Establish values for the graphics attributes for a given object.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "plot.h"
-* void astGrfAttrs( AstPlot *this, int id, int set, int prim, const char *method, const char *class )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function should be called with "set=1" to establish the correct
-* graphics attributes prior to drawing specific graphical objects. Once
-* the object has been drawn, it should be called again with "set=0" to
-* re-establish the original graphics attributes.
-*
-* NOTE, each type of graphical object identified by "id" should be
-* drawn entirely by calls to just one of GMark, GText or GLine
-* as indicated by argument "prim".
-
-* Parameters:
-* this
-* A pointer to the Plot.
-* id
-* An integer specifying the graphical object to be drawn.
-* set
-* If non-zero then the attributes for the specified object are set
-* to the values indicated by the corresponding Plot attributes,
-* and the current values are saved in a static array. If zero, then
-* the values are set to the values stored in the static array.
-* prim
-* Indicates the sort of graphics primative used to draw the
-* object. This must be one of (defined in grf.h) :
-*
-* GRF__LINE
-* GRF__MARK
-* GRF__TEXT
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-
-* Notes:
-* - This function should always be called in pairs with set=1 on the
-* first call and set=0 on the second call.
-* - If a pair of calls is nested within another pair of calls, the
-* inner pair has no effect.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- double *attr; /* Pointer to the next attribute value */
- double dval; /* Floating point attribute value */
- int ival; /* Integer attribute value */
-
-/* Check the global status. */
- if( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* Set up a pointer to the next element in "grfattrs_attrs". */
- attr = grfattrs_attrs;
-
-/* If we are setting new values, increment the nesting level, otherwise
- decrement it. */
- if( set ){
- grfattrs_nesting++;
- } else {
- grfattrs_nesting--;
- }
-
-/* First deal with cases where we are establishing new values for the
- graphics attributes by setting them to the values of the corresponding
- Plot attributes. Only do this if we are at nesting level one. */
- if( set && grfattrs_nesting == 1 ){
-
-/* See if a value has been set in the Plot for the line style attribute for
- the specified object, If so, use the value. */
- if( TestUseStyle( this, id, status ) ) {
- ival = GetUseStyle( this, id, status );
-
-/* Save the current value, and establish the new value. */
- GAttr( this, GRF__STYLE, (double) ival, attr++, prim, method,
- class, status );
-
-/* If no style was specified, retain the current value. Indicate that no
- new value has been established by setting the old value bad. */
- } else {
- *(attr++) = AST__BAD;
- }
-
-/* Do the same for the line width attribute. */
- if( TestUseWidth( this, id, status ) ){
- dval = GetUseWidth( this, id, status );
- GAttr( this, GRF__WIDTH, dval, attr++, prim, method, class, status );
- } else {
- *(attr++) = AST__BAD;
- }
-
-/* Do the same for the character size attribute. */
- if( TestUseSize( this, id, status ) ) {
- dval = GetUseSize( this, id, status );
- GAttr( this, GRF__SIZE, dval, attr++, prim, method, class, status );
- } else {
- *(attr++) = AST__BAD;
- }
-
-/* Do the same for the character font attribute. */
- if( TestUseFont( this, id, status ) ){
- ival = GetUseFont( this, id, status );
- GAttr( this, GRF__FONT, (double) ival, attr++, prim, method, class, status );
- } else {
- *(attr++) = AST__BAD;
- }
-
-/* Do the same for the colour attribute. */
- if( TestUseColour( this, id, status ) ) {
- ival = GetUseColour( this, id, status );
- GAttr( this, GRF__COLOUR, (double) ival, attr++, prim, method,
- class, status );
- } else {
- *(attr++) = AST__BAD;
- }
-
- }
-
-/* Now deal with cases where we are re-establishing old values saved on a
- previous call to this function. Only do this if we are at nesting
- level zero. */
- if( !set && !grfattrs_nesting ){
- GAttr( this, GRF__STYLE, *(attr++), NULL, prim, method, class, status );
- GAttr( this, GRF__WIDTH, *(attr++), NULL, prim, method, class, status );
- GAttr( this, GRF__SIZE, *(attr++), NULL, prim, method, class, status );
- GAttr( this, GRF__FONT, *(attr++), NULL, prim, method, class, status );
- GAttr( this, GRF__COLOUR, *(attr++), NULL, prim, method, class, status );
- }
-
-/* Return. */
- return;
-
-}
-
-static int GVec( AstPlot *this, AstMapping *mapping, double *phy,
- int axis, double delta, AstPointSet **pset1,
- AstPointSet **pset2, double *gx, double *gy,
- double *dx, double *dy, int *flag, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* GVec
-
-* Purpose:
-* Returns a unit vector parallel to a physical axis at a given point.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int GVec( AstPlot *this, AstMapping *mapping, double *phy,
-* int axis, double delta, AstPointSet **pset1,
-* AstPointSet **pset2, double *gx, double *gy,
-* double *dx, double *dy, int *flag, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function returns a unit vector (in the graphics coordinate
-* system) in the positive direction of the specified physical axis,
-* at the given physical position. It works by transforming the given
-* physical position, together with another very close position, and
-* returning the vector between them. It is possible for a
-* discontinuity to occur between these two close positions,
-* resulting in a very large meaningless vector prior to
-* normalisation. For this reason two vectors are found, one joining
-* the given position to a close position higher up the axis, and one
-* joining a close position lower down the axis to the given position.
-* If these two vectors differ in magnitude by a large factor, then
-* the shorter of the two vectors is normalised and returned.
-* Otherwise, the vector which is closest in direction to the vector
-* supplied in [dx,dy] is returned. The returned vector is reversed if
-* necessary so that it always points in the positive direction of the
-* axis.
-*
-* If neither of the two vectors can be found (i.e. if the graphics
-* coordinates are bad, or coincident), then the vector supplied in
-* [dx,dy] is returned unchanged, and a function value of zero is
-* returned. Otherwise, a function value of one is returned.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* mapping
-* Pointer to the Mapping from the base Frame of the Plot ot the
-* current Frame.
-* phy
-* Pointer to an array holding the coordinates in the current Frame
-* of the Plot at which the tangent vector is required.
-* axis
-* The index of the axis within the current Frame for which the
-* tangent vector is required.
-* delta
-* The increment in the axis value to use between positions defining
-* the vectors.
-* pset1
-* A pointer to a place at which to store a pointer to a PointSet
-* holding current Frame coordinates. This PointSet pointer should
-* be supplied as NULL on the first call to this function, resulting
-* in a new PointSet being created and a pointer to it returned.
-* Subsequent calls to this function shopuld retain the pointer
-* returned by the first call. The PointSet pointer should be
-* annulled using astAnnul when no longer needed.
-* pset2
-* A pointer to a place at which to store a pointer to a PointSet
-* holding base Frame coordinates. This PointSet is managed in the
-* same way as "pset1".
-* gx
-* A pointer to a double in which to return the graphics X
-* coordinate of the position supplied by "phy".
-* gy
-* A pointer to a double in which to return the graphics Y
-* coordinate of the position supplied by "phy".
-* dx
-* A pointer to a double in which to return the X component
-* of the unit tangent vector. This should be supplied holding a
-* "default" unit vector which is left unchanged if no new vector
-* can be found.
-* dy
-* A pointer to a double in which to return the Y component
-* of the unit tangent vector. This should be supplied holding a
-* "default" unit vector which is left unchanged if no new vector
-* can be found.
-* flag
-* A pointer to an int in which to return a flag indicating which
-* of the two vectors was returned. Zero is returned if the vector
-* was estimated by moving in a positive direction along the axis
-* from the position supplied by "phy". One is returned if the vector
-* was estimated by moving in a negative direction along the axis
-* from the position supplied by "phy" (in this case the returned
-* vector will have been negated so that it refers to the positive
-* direction).
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One is returned if the vector was found succesfully, Zero is returned
-* if the vector could not be estimated for any reason. No error is
-* reported if the failure was due to the nature of the mapping.
-
-* Notes:
-* - If an error has already occurred, or if this function should fail
-* for any reason, then a NULL pointer is returned.
-*/
-
-/* Local Variables: */
- double dd1; /* Length of positive vector */
- double dd2; /* Length of negative vector */
- double dx1; /* X component of positive vector */
- double dx2; /* X component of negative vector */
- double dy1; /* Y component of positive vector */
- double dy2; /* Y component of negative vector */
- double **ptr1; /* Pointers to physical coordinate data */
- double **ptr2; /* Pointers to graphics coordinate data */
- int i; /* Axis index */
- int nphy; /* No. of axes in current (physical) Frame */
- int ret; /* Was a vector estimated succesfully? */
-
-/* Check the global status. */
- if( !astOK ) return 0;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- dx1 = 0.0;
- dx2 = 0.0;
- dy1 = 0.0;
- dy2 = 0.0;
-
-/* Initialise the returned value to indicate that the vector can not
- be found. */
- ret = 0;
-
-/* Get the number of physical coordinates from the mapping. */
- nphy = astGetNout( mapping );
-
-/* If no PointSets have been supplied, create some now. PointSet 1
- contains physical coordinates, PointSet 2 contains graphics
- coordinates. */
- if( !(*pset1) ) *pset1 = astPointSet( 3, nphy, "", status );
- if( !(*pset2) ) *pset2 = astPointSet( 3, 2, "", status );
-
-/* Get pointers to the PointSet data. */
- ptr1 = astGetPoints( *pset1 );
- ptr2 = astGetPoints( *pset2 );
-
-/* Check the PointSets can be used. */
- if( astOK ){
-
-/* Store the physical coordinates of three close points on a curve
- parallel to the given axis, with the centre point at the given
- position. */
- for( i = 0; i < nphy; i++ ){
- ptr1[ i ][ 0 ] = phy[ i ];
- ptr1[ i ][ 1 ] = phy[ i ];
- ptr1[ i ][ 2 ] = phy[ i ];
- }
-
- if( phy[ axis ] != AST__BAD ){
- ptr1[ axis ][ 0 ] = phy[ axis ] - delta;
- ptr1[ axis ][ 2 ] = phy[ axis ] + delta;
- }
-
-/* Find the corresponding graphics coordinates. */
- (void) Trans( this, NULL, mapping, *pset1, 0, *pset2, 0, method, class, status );
-
-/* Check the central position is OK. */
- *gx = ptr2[ 0 ][ 1 ];
- *gy = ptr2[ 1 ][ 1 ];
- if( astOK && *gx != AST__BAD && *gy != AST__BAD ){
-
-/* Get the unit vector between the central position and the position at
- the higher physical axis value. Also get the length of the vector
- joining the two positions. */
- if( ptr2[ 0 ][ 2 ] != AST__BAD && ptr2[ 1 ][ 2 ] != AST__BAD ){
- dx1 = ptr2[ 0 ][ 2 ] - *gx;
- dy1 = ptr2[ 1 ][ 2 ] - *gy;
- dd1 = dx1*dx1 + dy1*dy1;
-
- if( dd1 > 0.0 ) {
- dd1 = sqrt( dd1 );
- dx1 /= dd1;
- dy1 /= dd1;
- } else {
- dd1 = AST__BAD;
- }
-
- } else {
- dd1 = AST__BAD;
- }
-
-/* Do the same for the position with lower physical axis value,
- reversing the direction of the vector so that it refers to the
- positive direction. */
- if( ptr2[ 0 ][ 0 ] != AST__BAD && ptr2[ 1 ][ 0 ] != AST__BAD ){
- dx2 = *gx - ptr2[ 0 ][ 0 ];
- dy2 = *gy - ptr2[ 1 ][ 0 ];
- dd2 = dx2*dx2 + dy2*dy2;
-
- if( dd2 > 0.0 ) {
- dd2 = sqrt( dd2 );
- dx2 /= dd2;
- dy2 /= dd2;
- } else {
- dd2 = AST__BAD;
- }
-
- } else {
- dd2 = AST__BAD;
- }
-
-/* Only overwrite the supplied vector if at least one of the two tangent
- vectors was defined. */
- if( dd1 != AST__BAD || dd2 != AST__BAD ){
-
-/* If the first vector was not defined, return the second. */
- if( dd1 == AST__BAD ){
- *dx = dx2;
- *dy = dy2;
- *flag = 1;
- ret = 1;
-
-/* If the second vector was not defined, return the first. */
- } else if( dd2 == AST__BAD ){
- *dx = dx1;
- *dy = dy1;
- *flag = 0;
- ret = 1;
-
-/* If the first vector is much longer than the second, return the
- second. */
- } else if( dd1 > 100.0*dd2 ){
- *dx = dx2;
- *dy = dy2;
- *flag = 1;
- ret = 1;
-
-/* If the second vector is much longer than the first, return the
- first. */
- } else if( dd2 > 100.0*dd1 ){
- *dx = dx1;
- *dy = dy1;
- *flag = 0;
- ret = 1;
-
-/* If both vectors are defined and of comparable length, return the
- vector which is most nearly parallel to the supplied vector. Note, we
- assume that the supplied vector [dx,dy] is a unit vector. */
- } else if( *dx != AST__BAD && *dx != AST__BAD ){
- if( ( dx1*(*dx) + dy1*(*dy) )/dd1 >
- ( dx2*(*dx) + dy2*(*dy) )/dd2 ){
- *dx = dx1;
- *dy = dy1;
- *flag = 0;
- ret = 1;
-
- } else {
- *dx = dx2;
- *dy = dy2;
- *flag = 1;
- ret = 1;
- }
-
-/* If no vector was supplied, return the shorter of the two vectors. */
- } else if( dd1 < dd2 ){
- *dx = dx1;
- *dy = dy1;
- *flag = 0;
- ret = 1;
-
- } else {
- *dx = dx2;
- *dy = dy2;
- *flag = 1;
- ret = 1;
-
- }
-
- }
-
- }
-
- }
-
-/* Return the answer. */
- return ret;
-
-}
-
-static int HasEscapes( const char *text, int *status ) {
-/*
-* Name:
-* HasEscapes
-
-* Purpose:
-* Check if a text string contains any escape sequences.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int HasEscapes( const char *text, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function checks if a text string contains any escape sequences
-* (see attribute Escape).
-
-* Parameters:
-* text
-* The text to check.
-* status
-* Pointer to the inherited status variable.
-
-* Returned:
-* Non-zero if any escape sequences are found in the text. Zero
-* otherwise.
-
-*/
-
-/* Local Variables: */
- int result;
- int type;
- int value;
- int nc;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status and the supplied pointer. */
- if ( !astOK || ! text ) return result;
-
-/* Does the string begin with an escape sequence? */
- if( astFindEscape( text, &type, &value, &nc ) ){
- result = 1;
-
-/* If not, there must be an escape sequence later in the string if the
- number of characters skipped by the above call to astFindEscape is less
- than the length of the string. */
- } else if( nc < strlen( text ) ) {
- result = 1;
- }
-
-/* Return the result. */
- return result;
-}
-
-static int IdFind( int id, int nax, int *id1, int *id2, int *id3, int *status ) {
-/*
-* Name:
-* IdFind
-
-* Purpose:
-* Find the numerical identifiers to use for a given identifier.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int IdFind( int id, int nax, int *id1, int *id2, int *id3, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* The supplied integer should be a numerical identifier for a
-* graphical element of a plot (AST__MARKS_ID, AST__CURVES_ID, etc), or a
-* "psuedo-identifier" which represents two other genuine identifiers.
-* If the supplied value is a genuine identifier then it is returned
-* in *id1, and *id2 is returned equal to -1. If the supplied value
-* is a pseudo-identifier then the two corresponding genuine
-* identifiers are returned in *id1 and *id2
-
-* For instance, if "id" is AST__AXIS1_ID (a genuine id), then *id1 is
-* returned equal to AST__AXIS1_ID and *id2 is returned equal to -1. If
-* "id" is AST__AXES_ID (a pseudo-identifier), then *id1 is returned equal
-* to AST__AXIS1_ID and *id2 is returned equal to AST__AXIS2_ID.
-
-* Genuine identifiers all have values which are less than the value
-* of AST__NPID. Pseudo-identifiers have values which are greater than
-* or equal to the value of AST__NPID.
-
-* Parameters:
-* id
-* The supplied identifier (genuine or pseudo).
-* nax
-* The number of axes spanning graphics space (2 or 3).
-* id1
-* Pointer to the int at which to return the first genuine
-* identifier corresponding to "id".
-* id2
-* Pointer to the int at which to return the second genuine
-* identifier corresponding to "id" (or -1 if "id" is a genuine
-* identifier).
-* id3
-* Pointer to the int at which to return the third genuine
-* identifier corresponding to "id" (or -1 if "id" has no third
-* genuine identifier).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The number of genuine identifiers corresponding to the supplied
-* (possibly Pseudo-) identifier. This will be in the range 1 to 3.
-
-*/
-
-/* Local Variables: */
- int ret;
-
-/* Initialise returned values. */
- *id1 = id;
- *id2 = -1;
- *id3 = -1;
- ret = 0;
-
-/* Check the local error status. */
- if ( !astOK ) return ret;
-
-/* Assume a genuine identifier was supplied. */
- ret = 1;
-
-/* Check against all known pseudo-identifier. */
- if( id == AST__AXES_ID ) {
- ret = nax;
- *id1 = AST__AXIS1_ID;
- *id2 = AST__AXIS2_ID;
- if( nax == 3 ) *id3 = AST__AXIS3_ID;
-
- } else if( id == AST__GRIDLINE_ID ) {
- ret = nax;
- *id1 = AST__GRIDLINE1_ID;
- *id2 = AST__GRIDLINE2_ID;
- if( nax == 3 ) *id3 = AST__GRIDLINE3_ID;
-
- } else if( id == AST__NUMLABS_ID ) {
- ret = nax;
- *id1 = AST__NUMLAB1_ID;
- *id2 = AST__NUMLAB2_ID;
- if( nax == 3 ) *id3 = AST__NUMLAB3_ID;
-
- } else if( id == AST__TEXTLABS_ID ) {
- ret = nax;
- *id1 = AST__TEXTLAB1_ID;
- *id2 = AST__TEXTLAB2_ID;
- if( nax == 3 ) *id3 = AST__TEXTLAB3_ID;
-
- } else if( id == AST__TICKS_ID ) {
- ret = nax;
- *id1 = AST__TICKS1_ID;
- *id2 = AST__TICKS2_ID;
- if( nax == 3 ) *id3 = AST__TICKS3_ID;
-
- } else if( id >= AST__NPID ) {
- astError( AST__INTER, "AST internal programming error - "
- "function IdFind in class Plot does not yet support "
- "pseudo-identifier value %d", status, id );
- }
-
-/* Return the answer. */
- return ret;
-
-}
-
-void astInitPlotVtab_( AstPlotVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitPlotVtab
-
-* Purpose:
-* Initialise a virtual function table for a Plot.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "plot.h"
-* void astInitPlotVtab( AstPlotVtab *vtab, const char *name )
-
-* Class Membership:
-* Plot vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the Plot class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrameSetVtab *fset; /* Pointer to FrameSet component of Vtab */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitFrameSetVtab( (AstFrameSetVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This will be
- used (by astIsAPlot) to determine if an object belongs to this class.
- We can conveniently use the address of the (static) class_init variable to
- generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstFrameSetVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
- vtab->Mark = Mark;
- vtab->Text = Text;
- vtab->Border = Border;
- vtab->BoundingBox = BoundingBox;
- vtab->Clip = Clip;
- vtab->GridLine = GridLine;
- vtab->Curve = Curve;
- vtab->GrfSet = GrfSet;
- vtab->GrfPush = GrfPush;
- vtab->GrfPop = GrfPop;
- vtab->GrfWrapper = GrfWrapper;
- vtab->GenCurve = GenCurve;
- vtab->PolyCurve = PolyCurve;
- vtab->CopyPlotDefaults = CopyPlotDefaults;
- vtab->CvBrk = CvBrk;
- vtab->Mirror = Mirror;
- vtab->GetDrawnTicks = GetDrawnTicks;
- vtab->SetTickValues = SetTickValues;
- vtab->Grid = Grid;
- vtab->ClearTol = ClearTol;
- vtab->SetTol = SetTol;
- vtab->GetTol = GetTol;
- vtab->TestTol = TestTol;
- vtab->ClearGrid = ClearGrid;
- vtab->SetGrid = SetGrid;
- vtab->GetGrid = GetGrid;
- vtab->TestGrid = TestGrid;
-
- vtab->ClearTickAll = ClearTickAll;
- vtab->SetTickAll = SetTickAll;
- vtab->GetTickAll = GetTickAll;
- vtab->TestTickAll = TestTickAll;
-
- vtab->ClearForceExterior = ClearForceExterior;
- vtab->SetForceExterior = SetForceExterior;
- vtab->GetForceExterior = GetForceExterior;
- vtab->TestForceExterior = TestForceExterior;
-
-
- vtab->ClearInvisible = ClearInvisible;
- vtab->SetInvisible = SetInvisible;
- vtab->GetInvisible = GetInvisible;
- vtab->TestInvisible = TestInvisible;
- vtab->ClearBorder = ClearBorder;
- vtab->SetBorder = SetBorder;
- vtab->GetBorder = GetBorder;
- vtab->TestBorder = TestBorder;
- vtab->ClearInk = ClearInk;
- vtab->SetInk = SetInk;
- vtab->GetInk = GetInk;
- vtab->TestInk = TestInk;
- vtab->ClearClipOp = ClearClipOp;
- vtab->SetClipOp = SetClipOp;
- vtab->GetClipOp = GetClipOp;
- vtab->TestClipOp = TestClipOp;
- vtab->ClearClip = ClearClip;
- vtab->SetClip = SetClip;
- vtab->GetClip = GetClip;
- vtab->TestClip = TestClip;
- vtab->ClearGrf = ClearGrf;
- vtab->SetGrf = SetGrf;
- vtab->GetGrf = GetGrf;
- vtab->TestGrf = TestGrf;
- vtab->ClearDrawTitle = ClearDrawTitle;
- vtab->SetDrawTitle = SetDrawTitle;
- vtab->GetDrawTitle = GetDrawTitle;
- vtab->TestDrawTitle = TestDrawTitle;
- vtab->ClearLabelUp = ClearLabelUp;
- vtab->SetLabelUp = SetLabelUp;
- vtab->GetLabelUp = GetLabelUp;
- vtab->TestLabelUp = TestLabelUp;
- vtab->ClearLogPlot = ClearLogPlot;
- vtab->SetLogPlot = SetLogPlot;
- vtab->GetLogPlot = GetLogPlot;
- vtab->TestLogPlot = TestLogPlot;
- vtab->ClearLogTicks = ClearLogTicks;
- vtab->SetLogTicks = SetLogTicks;
- vtab->GetLogTicks = GetLogTicks;
- vtab->TestLogTicks = TestLogTicks;
- vtab->ClearLogLabel = ClearLogLabel;
- vtab->SetLogLabel = SetLogLabel;
- vtab->GetLogLabel = GetLogLabel;
- vtab->TestLogLabel = TestLogLabel;
- vtab->ClearDrawAxes = ClearDrawAxes;
- vtab->SetDrawAxes = SetDrawAxes;
- vtab->GetDrawAxes = GetDrawAxes;
- vtab->TestDrawAxes = TestDrawAxes;
- vtab->ClearAbbrev = ClearAbbrev;
- vtab->SetAbbrev = SetAbbrev;
- vtab->GetAbbrev = GetAbbrev;
- vtab->TestAbbrev = TestAbbrev;
- vtab->ClearEscape = ClearEscape;
- vtab->SetEscape = SetEscape;
- vtab->GetEscape = GetEscape;
- vtab->TestEscape = TestEscape;
- vtab->ClearLabelling = ClearLabelling;
- vtab->SetLabelling = SetLabelling;
- vtab->GetLabelling = GetLabelling;
- vtab->TestLabelling = TestLabelling;
- vtab->ClearMajTickLen = ClearMajTickLen;
- vtab->SetMajTickLen = SetMajTickLen;
- vtab->GetMajTickLen = GetMajTickLen;
- vtab->TestMajTickLen = TestMajTickLen;
- vtab->ClearLogGap = ClearLogGap;
- vtab->SetLogGap = SetLogGap;
- vtab->GetLogGap = GetLogGap;
- vtab->TestLogGap = TestLogGap;
- vtab->ClearTitleGap = ClearTitleGap;
- vtab->SetTitleGap = SetTitleGap;
- vtab->GetTitleGap = GetTitleGap;
- vtab->TestTitleGap = TestTitleGap;
- vtab->ClearMinTickLen = ClearMinTickLen;
- vtab->SetMinTickLen = SetMinTickLen;
- vtab->GetMinTickLen = GetMinTickLen;
- vtab->TestMinTickLen = TestMinTickLen;
- vtab->ClearNumLabGap = ClearNumLabGap;
- vtab->SetNumLabGap = SetNumLabGap;
- vtab->GetNumLabGap = GetNumLabGap;
- vtab->TestNumLabGap = TestNumLabGap;
- vtab->ClearTextLabGap = ClearTextLabGap;
- vtab->SetTextLabGap = SetTextLabGap;
- vtab->GetTextLabGap = GetTextLabGap;
- vtab->TestTextLabGap = TestTextLabGap;
- vtab->ClearLabelAt = ClearLabelAt;
- vtab->SetLabelAt = SetLabelAt;
- vtab->GetLabelAt = GetLabelAt;
- vtab->TestLabelAt = TestLabelAt;
- vtab->ClearCentre = ClearCentre;
- vtab->SetCentre = SetCentre;
- vtab->GetCentre = GetCentre;
- vtab->TestCentre = TestCentre;
- vtab->ClearGap = ClearGap;
- vtab->SetGap = SetGap;
- vtab->GetGap = GetGap;
- vtab->TestGap = TestGap;
- vtab->ClearEdge = ClearEdge;
- vtab->SetEdge = SetEdge;
- vtab->GetEdge = GetEdge;
- vtab->TestEdge = TestEdge;
- vtab->ClearNumLab = ClearNumLab;
- vtab->SetNumLab = SetNumLab;
- vtab->GetNumLab = GetNumLab;
- vtab->TestNumLab = TestNumLab;
- vtab->ClearMinTick = ClearMinTick;
- vtab->SetMinTick = SetMinTick;
- vtab->GetMinTick = GetMinTick;
- vtab->TestMinTick = TestMinTick;
- vtab->ClearTextLab = ClearTextLab;
- vtab->SetTextLab = SetTextLab;
- vtab->GetTextLab = GetTextLab;
- vtab->TestTextLab = TestTextLab;
- vtab->ClearLabelUnits = ClearLabelUnits;
- vtab->SetLabelUnits = SetLabelUnits;
- vtab->GetLabelUnits = GetLabelUnits;
- vtab->TestLabelUnits = TestLabelUnits;
- vtab->ClearStyle = ClearStyle;
- vtab->SetStyle = SetStyle;
- vtab->GetStyle = GetStyle;
- vtab->TestStyle = TestStyle;
- vtab->ClearFont = ClearFont;
- vtab->SetFont = SetFont;
- vtab->GetFont = GetFont;
- vtab->TestFont = TestFont;
- vtab->ClearColour = ClearColour;
- vtab->SetColour = SetColour;
- vtab->GetColour = GetColour;
- vtab->TestColour = TestColour;
- vtab->ClearWidth = ClearWidth;
- vtab->SetWidth = SetWidth;
- vtab->GetWidth = GetWidth;
- vtab->TestWidth = TestWidth;
- vtab->ClearSize = ClearSize;
- vtab->SetSize = SetSize;
- vtab->GetSize = GetSize;
- vtab->TestSize = TestSize;
- vtab->GetGrfContext = GetGrfContext;
-
-/* Save the inherited pointers to methods that will be extended, and replace
- them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
- fset = (AstFrameSetVtab *) vtab;
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
-#if defined(THREAD_SAFE)
- parent_managelock = object->ManageLock;
- object->ManageLock = ManageLock;
-#endif
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
- parent_removeframe = fset->RemoveFrame;
- fset->RemoveFrame = RemoveFrame;
-
-/* Declare the destructor and copy constructor. */
- astSetDelete( (AstObjectVtab *) vtab, Delete );
- astSetCopy( (AstObjectVtab *) vtab, Copy );
-
-/* Declare the class dump function. */
- astSetDump( vtab, Dump, "Plot", "Provide facilities for 2D graphical output" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static int Inside( int n, float *cx, float *cy, float x, float y, int *status ){
-/*
-* Name:
-* Inside
-
-* Purpose:
-* See if a given point is inside a 2-d polygon.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int Inside( int n, float *cx, float *cy, float x, float y, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function determines if the position given by x and y, is inside
-* or outside the polygon specified by the vertices given in arrays cx
-* and cy.
-
-* Parameters:
-* n
-* The number of vertices in the polygon.
-* cx
-* A pointer to an array holding the x coordinates at the "n" vertices.
-* cy
-* A pointer to an array holding the y coordinates at the "n" vertices.
-* x
-* The x coordinate of the test point.
-* y
-* The y coordinate of the test point.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A boolean flag indicating if the test point is inside the polygon.
-
-* Notes:
-* - The algorithm used only works for convex polygons.
-* - The polygon is closed by joining the last vertex to the first
-* vertex.
-* - Zero is returned if an error has occurred.
-
-*/
-
-/* Local Variables: */
- int i; /* Index of the current vertex */
- int j; /* Index of the next vertex */
- int ret; /* Is the test point inside the polygon? */
- int sgn; /* Which side of the first edge is the test point? */
-
-/* Check the global status. */
- if( !astOK ) return 0;
-
-/* Initialise the returned value to indicate that the point is inside the
- box. */
- ret = 1;
-
-/* Get the sign of the angle between the vector joining vertex 1 to vertex
- 0, and the vector joining the test point to vertex zero. */
- if( ( cx[ 1 ] - cx[ 0 ] )*( y - cy[ 0 ] ) >
- ( x - cx[ 0 ] )*( cy[ 1 ] - cy[ 0 ] ) ){
- sgn = 1;
- } else {
- sgn = -1;
- }
-
-/* Check that the remaining test point is on the same side of the remaining
- sides. */
- for( i = 1; i < n; i++ ){
-
-/* Get the index of the next vertex, joining the last vertex up with
- vertex zero. */
- j = i + 1;
- if( j >= n ) j -= n;
-
-/* Get the sign of the angle between the vector joining vertex j to vertex
- i, and the vector joining the test point to vertex i. If the sign is
- opposite to that found for vertex zero, then the test point is outside
- the polygon. Break out of the loop if this is the case. */
- if( ( cx[ j ] - cx[ i ] )*( y - cy[ i ] ) >
- ( x - cx[ i ] )*( cy[ j ] - cy[ i ] ) ){
-
- if( sgn == -1 ) {
- ret = 0;
- break;
- }
-
- } else {
-
- if( sgn == 1 ) {
- ret = 0;
- break;
- }
-
- }
-
- }
-
-
-/* Return the answer. */
- return ret;
-
-}
-
-static void InterpEscape( AstPlot *this, int type, double value, float *x,
- float *y, float ux, float uy, float rx, float ry,
- const char *just, float *rise, double nsize,
- double nstyle, double nwidth, double ncol,
- double nfont, const char *method, const char *class, int *status ){
-/*
-* Name:
-* InterpEscape
-
-* Purpose:
-* Prepare things for drawing the next part of a string which includes
-* graphics escape sequences.
-
-* Synopsis:
-* #include "plot.h"
-* void InterpEscape( AstPlot *this, int type, double value, float *x,
-* float *y, float ux, float uy, float rx, float ry,
-* const char *just, float *rise, double nsize,
-* double nstyle, double nwidth, double ncol,
-* double nfont, const char *method, const char *class, int *status )
-
-* Description:
-* This function modifies the current graphics attributes, the supplied
-* reference position, in preparation for drawing another sub-string
-* from a string containing graphics escape sequences. The type and
-* value of an escape sequence preceededing the substring is supplied.
-* Note, this function ignored escape sequences which represent an
-* escaped percent sign. Such escape sequences are drawn as normal
-* text by the claling function.
-
-* Parameters:
-* this
-* The plot.
-* type
-* The type of escape sequence. Each type is identified by a symbolic
-* constant defined in grf.h.
-* value
-* The value associated with the escape sequence. All usable values
-* will be positive. A value of -1 shold be supplied if the attribute
-* identified by "type" should be reset to its "normal" value (as
-* established using the astGAttr function, etc).
-* x
-* Pointer to a double holding the x coordinate at the concatenation
-* point. This will be modified on exit if the escape sequence
-* requires it.
-* y
-* Pointer to a double holding the y coordinate at the concatenation
-* point. This will be modified on exit if the escape sequence
-* requires it.
-* ux
-* The x component of the up-vector for the text, in graphics coords.
-* The length of this vector should be equal to the height of normal
-* text drawn with this up-vector.
-* uy
-* The y component of the up-vector for the text. See "ux".
-* rx
-* The x component of the right-vector for the text. The length of this
-* vector should be equal to the height of normal text drawn with the
-* supplied up-vector.
-* ry
-* The y component of the right-vector for the text. see "rx".
-* just
-* The justification being used for each substring.
-* rise
-* Pointer to a float holding the height of the current baseline
-* above the normal baseline, given as a percentage of the height of
-* normal text. May be negative for sub-scripts. May be modified on
-* exit if the escape sequence effects the height of the baseline.
-* nsize
-* The size of normal text.
-* nstyle
-* The style of normal text.
-* nwidth
-* The width of normal text.
-* ncol
-* The colour of normal text.
-* nfont
-* The font of normal text.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- float new_rise;
- float t1, t2;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Type GRF__ESSUP: Move the concatenation point in the up direction, and
- update the current baseline height. If the value is -1, then reset the
- baseline to its normal height. */
- if( type == GRF__ESSUP ) {
- if( value > 0 ) {
- *x += 0.01*ux*( value - *rise );
- *y += 0.01*uy*( value - *rise );
- *rise = value;
- } else {
- *x -= 0.01*ux*(*rise);
- *y -= 0.01*uy*(*rise);
- *rise = 0;
- }
-
-/* Type GRF__ESSUB: Move the concatenation point in the down direction, and
- update the current baseline height. If the value is -1, then reset the
- baseline to its normal height. */
- } else if( type == GRF__ESSUB ) {
- if( value > 0 ) {
- *x -= 0.01*ux*( value + *rise );
- *y -= 0.01*uy*( value + *rise );
- *rise = -value;
- } else {
- *x -= 0.01*ux*(*rise);
- *y -= 0.01*uy*(*rise);
- *rise = 0;
- }
-
-/* Type GRF__ESGAP: Move the concatenation point to the right. */
- } else if( type == GRF__ESGAP ) {
- *x += 0.01*rx*value;
- *y += 0.01*ry*value;
-
-/* Type GRF__ESBAC: Move the concatenation point to the left. */
- } else if( type == GRF__ESBAC ) {
- *x -= 0.01*rx*value;
- *y -= 0.01*ry*value;
-
-/* Remember the current horizontal position. */
- } else if( type == GRF__ESH ) {
- this->hmarkx = *x;
- this->hmarky = *y;
-
-/* Go to the previously stored horizontal position. */
- } else if( type == GRF__ESG ) {
- if( this->hmarkx != FLT_MAX && this->hmarky != FLT_MAX ) {
- t1 = ( *x - this->hmarkx )*rx + ( *y - this->hmarky )*ry;
- t2 = rx*rx + ry*ry;
- *x -= rx*t1/t2;
- *y -= ry*t1/t2;
- }
-
-/* Type GRF__ESSIZ: Change the text size. */
- } else if( type == GRF__ESSIZ ) {
- if( value < 0 ) value = 100.0;
- GAttr( this, GRF__SIZE, 0.01*value*nsize, NULL, GRF__TEXT,
- method, class, status );
-
-/* Type GRF__ESWID: Change the text width. */
- } else if( type == GRF__ESWID ) {
- if( value < 0 ) value = 100.0;
- GAttr( this, GRF__WIDTH, 0.01*value*nwidth, NULL, GRF__TEXT,
- method, class, status );
-
-/* Type GRF__ESFON: Change the text font. */
- } else if( type == GRF__ESFON ) {
- if( value < 0 ) value = nfont;
- GAttr( this, GRF__FONT, value, NULL, GRF__TEXT, method, class, status );
-
-/* Type GRF__ESCOL: Change the text colour. */
- } else if( type == GRF__ESCOL ) {
- if( value < 0 ) value = ncol;
- GAttr( this, GRF__COLOUR, value, NULL, GRF__TEXT, method, class, status );
-
-/* Type GRF__ESSTY: Change the text style. */
- } else if( type == GRF__ESSTY ) {
- if( value < 0 ) value = nstyle;
- GAttr( this, GRF__STYLE, value, NULL, GRF__TEXT, method, class, status );
-
-/* Type GRF__ESPSH: Push current attributes onto a stack. */
- } else if( type == GRF__ESPSH ) {
- PushGat( this, *rise, method, class, status );
-
-/* Type GRF__ESSTY: Reset everything to normal. */
- } else if( type == GRF__ESPOP ) {
-
- if( !PopGat( this, &new_rise, method, class, status ) ) {
- new_rise = 0.0;
- GAttr( this, GRF__SIZE, nsize, NULL, GRF__TEXT, method, class, status );
- GAttr( this, GRF__WIDTH, nwidth, NULL, GRF__TEXT, method, class, status );
- GAttr( this, GRF__COLOUR, ncol, NULL, GRF__TEXT, method, class, status );
- GAttr( this, GRF__FONT, nfont, NULL, GRF__TEXT, method, class, status );
- GAttr( this, GRF__STYLE, nstyle, NULL, GRF__TEXT, method, class, status );
- }
-
- *x -= 0.01*ux*( *rise - new_rise );
- *y -= 0.01*uy*( *rise - new_rise );
- *rise = new_rise;
-
- }
-}
-
-static int IsASkyAxis( AstFrame *frm, int axis, int *status ) {
-/*
-* Name:
-* IsASkyAxis
-
-* Purpose:
-* Checks if a specified axis of the supplied Frame is a SkyAxis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int IsASkyAxis( AstFrame *frm, int axis, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function checks if if a specified axis of the supplied Frame is
-* a SkyAxis.
-
-* Parameters:
-* frm
-* The Frame.
-* axis
-* The zero-based axis index.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A boolean flag indicating if the axis is a SkyAxis.
-
-*/
-
-/* Local Variables: */
- int ret;
- AstAxis *ax;
-
-/* initialise */
- ret = 0;
-
-/* Check the global status. */
- if( !astOK ) return ret;
-
-/* Extract the required axis from the Frame and test if it is a SkyAxis.
- Then free the axis memory. */
- ax = astGetAxis( frm, axis );
- ret = astIsASkyAxis( ax );
- ax = astAnnul( ax );
-
-/* Return the answer. */
- return ret;
-
-}
-
-static int IsASkyFrame( AstObject *obj, int *status ) {
-/*
-* Name:
-* IsASkyFrame
-
-* Purpose:
-* Checks if the supplied Object ca be treated as a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int IsASkyFrame( AstObject *obj, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function checks if the supplied Object is a SkyFrame or a
-* FrameSet which has a SkyFrame as its current Frame.
-
-* Parameters:
-* obj
-* The object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A boolean flag indicating if the Object can be treated as SkyFrame.
-
-*/
-
-/* Local Variables: */
- int ret;
- AstFrame *frm;
-
-/* initialise */
- ret = 0;
-
-/* Check the global status. */
- if( !astOK ) return ret;
-
-/* If the Object is a SkyFrame, return 1. */
- if( astIsASkyFrame( obj ) ) {
- ret = 1;
-
-/* If the Object is a FrameSet, check its current Frame recursively,
- using this method. */
- } else if( astIsAFrameSet( obj ) ) {
- frm = astGetFrame( (AstFrameSet *) obj, AST__CURRENT );
- ret = IsASkyFrame( (AstObject *) frm, status );
- frm = astAnnul( frm );
- }
-
-/* Return the answer. */
- return ret;
-
-}
-
-static const char *JustMB( AstPlot *this, int esc, const char *text, float *x,
- float *y, float upx, float upy, const char *just,
- float uxu, float uyu, float rxu, float ryu,
- float *x0, float *y0, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* JustMB
-
-* Purpose:
-* Modifies a "M" vertical reference point to be a "B" reference point,
-* if necessary.
-
-* Synopsis:
-* #include "plot.h"
-* const char *JustMB( AstPlot *this, int esc, const char *text, float *x,
-* float *y, float upx, float upy, const char *just,
-* float uxu, float uyu, float rxu, float ryu,
-* float *x0, float *y0, const char *method,
-* const char *class, int *status )
-
-* Description:
-* This function is used to modify the reference point and justification
-* of a string by converting the vertical "M" justification option (which
-* indicates that the reference point refers to the bottom of the
-* bounding box) into a corresponding "B" option (which indicates that
-* the reference point refers to the text baseline). The reference
-* point is modified accordingly.
-*
-* This is only done if the grf module does not support "M"
-* justification. Otherwise, the supplied justification string and
-* reference point coordinates are returned unchanged.
-
-* Parameters:
-* this
-* The plot.
-* esc
-* Should escape sequences be interpreted? They will be printed
-* literally otherwise.
-* text
-* Pointer to a null-terminated character string to be displayed.
-* x
-* Pointer to a double holding the x coordinate at the reference
-* point. This is modified on exit if the supplied "just" string
-* indicates that the supplied value refers to the bottom of the
-* bounding box, and the grf module does not support such
-* justification. In this case, the returned value is a point on
-* the baseline of the text which would result in the bottom of
-* the bounding box being at the supplied position.
-* y
-* Pointer to a double holding the y coordinate at the reference
-* point. This is modified on exit if the supplied "just" string
-* indicates that the supplied value refers to the bottom of the
-* bounding box, and the grf module does not support such
-* justification. In this case, the returned value is a point on
-* the baseline of the text which would result in the bottom of
-* the bounding box being at the supplied position.
-* upx
-* The x component of the up-vector for the text. Positive values
-* always refer to displacements from left to right on the screen,
-* even if the graphics x axis increases in the opposite sense.
-* upy
-* The y component of the up-vector for the text. Positive values
-* always refer to displacements from left to right on the screen,
-* even if the graphics y axis increases in the opposite sense.
-* just
-* A character string which specifies the location within the
-* text string which is to be placed at the reference position
-* given by x and y. The first character may be 'T' for "top",
-* 'C' for "centre", 'B' for "baseline" or "M" for "bottom", and
-* specifies the vertical location of the reference position. Note,
-* "baseline" corresponds to the base-line of normal text,and "M"
-* corresponds to the bottom of the bounding box. Some characters
-* (eg "y", "g", "p", etc) and sub-scripts descend below the base-line.
-* The second character may be 'L' for "left", 'C' for "centre", or 'R'
-* for "right", and specifies the horizontal location of the
-* reference position. If the string has less than 2 characters
-* then 'C' is used for the missing characters.
-* uxu
-* X component of normalised up-vector, in graphics coords.
-* uyu
-* Y component of normalised up-vector, in graphics coords.
-* rxu
-* X component of normalised right-vector, in graphics coords.
-* ryu
-* Y component of normalised right-vector, in graphics coords.
-* x0
-* Address of a float at which to return the x coordinate at the
-* left end of the baseline of the whole string.
-* y0
-* Address of a float at which to return the y coordinate at the
-* left end of the baseline of the whole string.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated string which contains the
-* justification to use in future. This pointer should be freed using
-* astFree when no longer needed. This string will contain a full
-* upper-case justification string which can be used by the current
-* grf module.
-
-* Notes;
-* - NULL is returned if an error has occurred.
-
-*/
-
-/* Local Variables: */
- char cc;
- float drop;
- float dx;
- float dy;
- float f;
- float height;
- float width;
- float xbn[ 4 ];
- float ybn[ 4 ];
- int called;
- char *result;
-
-/* Check inherited status */
- if( !astOK ) return NULL;
-
-/* Allocate memory for the returned string. */
- result = astMalloc( sizeof( char )*3 );
- if( astOK ) {
-
-/* Fill in any missing parts of the justification string. */
- if( just ){
- cc = toupper( just[ 0 ] );
- result[ 0 ] = ( cc == 'T' || cc == 'C' || cc == 'B' || cc == 'M' ) ? cc : 'C';
-
- cc = toupper( just[ 1 ] );
- result[ 1 ] = ( cc == 'L' || cc == 'C' || cc == 'R' ) ? cc : 'C';
-
- } else {
- result[ 0 ] = 'C';
- result[ 1 ] = 'C';
- }
-
- result[ 2 ] = 0;
-
-/* Indicate that DrawText has not been called. */
- called = 0;
-
-/* The justfication need not be changed unless the requested vertical
- justification is "bottom" (m), AND the grf module does not support "M"
- justification. */
- if( ( result[ 0 ] == 'M' ) && !GCap( this, GRF__MJUST, 1, status ) ){
-
-/* Find the bounding box which would result from putting the left end of
- the baseline at the specified position. */
- DrawText( this, 0, esc, text, *x, *y, "BL", upx, upy, xbn, ybn,
- &drop, method, class, status );
-
-/* Indicate that DrawText has not been called. */
- called = 1;
-
-/* Get the vector from the bottom left corner of the bounding box to the
- reference point (on the base-line), and add this vector on to the reference
- point. */
- *x += *x - xbn[ 0 ];
- *y += *y - ybn[ 0 ];
-
-/* Modified the returned justification string. */
- result[ 0 ] = 'B';
- }
-
-/* If the returned justification is "BL", then the left end of the
- baseline is just the returned reference point. */
- if( result[ 0 ] == 'B' && result[ 1 ] == 'L' ) {
- *x0 = *x;
- *y0 = *y;
-
-/* Otherwise, we work out the coords of the left end of the baseline from
- the values returned by DrawText above. Call DrawText now if it was not
- called above. */
- } else {
- if( ! called ) {
- DrawText( this, 0, esc, text, *x, *y, "BL", upx, upy, xbn, ybn,
- &drop, method, class, status );
- }
-
-/* Find the height and width of the bounding box. */
- dx = xbn[ 0 ] - xbn[ 3 ];
- dy = ybn[ 0 ] - ybn[ 3 ];
- width = sqrt( dx*dx + dy*dy );
-
- dx = xbn[ 0 ] - xbn[ 1 ];
- dy = ybn[ 0 ] - ybn[ 1 ];
- height = sqrt( dx*dx + dy*dy );
-
-/* For "C" and "R" horizontal justification we first need to move the
- returned reference point left by 0.5 or 1.0 times the width of the whole
- string respectively. */
- if( result[ 1 ] == 'C' ) {
- f = 0.5;
-
- } else if( result[ 1 ] == 'R' ) {
- f = 1.0;
-
- } else {
- f = 0.0;
- }
-
- f *= width;
-
- *x0 = *x - f*rxu;
- *y0 = *y - f*ryu;
-
-/* Unless the vertical justification is "B", we also need to move the
- concatenation point vertically to put it on the baseline. */
- if( result[ 0 ] == 'T' ) {
- f = height - drop;
-
- } else if( result[ 0 ] == 'C' ) {
- f = 0.5*height - drop;
-
- } else if( result[ 0 ] == 'M' ) {
- f = -drop;
-
- } else {
- f = 0.0;
- }
-
- *x0 -= f*uxu;
- *y0 -= f*uyu;
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static void Labelat( AstPlot *this, TickInfo **grid, AstPlotCurveData **cdata,
- double *labelat, const char *method, const char *class, int *status ){
-/*
-*
-* Name:
-* Labelat
-
-* Purpose:
-* Determine the other axis value at which to place interior labels
-* and tick marks.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void Labelat( AstPlot *this, TickInfo **grid, AstPlotCurveData **cdata,
-* double *labelat, const char *method, const char *class )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* If tick marks and labels are to be placed within the plotting area,
-* the tick values stored in "grid" determine their position on one
-* axis, and their position on the other axis is determined by this
-* function. If a value has been set for the "LabelAt" attribute, then
-* it is used, otherwise the "other axis" value on the longest curve
-* parallel to the "other axis" is used (although the curve "other axis
-* = zero" is used if it passes through the plotting area and is not too
-* short). The effective length assigned to each curve is reduced in
-* proportion to the number of tick marks which are close to the edge
-* of the plotting area.
-
-* Parameters:
-* this
-* A pointer to the Plot.
-* grid
-* A pointer to an array of two TickInfo pointers (one for each axis),
-* each pointing to a TickInfo structure holding information about
-* tick values on the axis. See function GridLines.
-* cdata
-* A pointer to an array of two AstPlotCurveData pointers (one for each axis),
-* each pointing to an array of AstPlotCurveData structure (one for each
-* major tick value on the axis), holding information about breaks
-* in the curves drawn to mark the major tick values. See function
-* DrawGrid.
-* labelat
-* A pointer to a 2 element array in which to store the constant axis
-* values at which tick marks are put. Element 0 is returned holding
-* the axis 1 value at which tick marks for axis 0 are placed. Element
-* 1 is returned holding the axis 0 value at which tick marks for axis
-* 1 are placed.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-
-* Notes:
-* - This function assumes the current Frame of the Plot is 2
-* dimensional, and it should not be called if this is not the case.
-*/
-
-/* Local Variables: */
- AstMapping *mapping; /* Mapping from graphics to physical coords */
- AstPointSet *pset2; /* Pointset for graphical tick positions */
- AstPointSet *pset[ 2 ];/* Pointsets for physical tick positions */
- AstPlotCurveData *cdt; /* Pointer to the AstPlotCurveData for the next tick */
- TickInfo *info; /* Pointer to the TickInfo for the current axis */
- double **ptr2; /* Pointers to graphics pointset data */
- double *ptr1[ 2 ]; /* Pointers to physical pointset data */
- double *tvals[ 2 ]; /* Pointers to arrays of other axis values */
- double *value; /* Current tick value */
- double efflen; /* Effective length of current curve */
- double lim; /* Largest insignificant axis value */
- double margin; /* Width of margin around plotting area */
- double maxlen; /* Effective length of longest curve */
- double x; /* Tick X value */
- double xhi; /* Upper limit on acceptable X range */
- double xlo; /* Lower limit on acceptable X range */
- double y; /* Tick Y value */
- double yhi; /* Upper limit on acceptable Y range */
- double ylo; /* Lower limit on acceptable Y range */
- double zerolen; /* Effective length of curve for other axis = 0.0 */
- int axis; /* Current axis index */
- int i; /* Tick index for this axis */
- int nin; /* No. of counted ticks */
- int tick; /* Tick index */
-
-/* Check the global status. */
- if( !astOK ) return;
-
-/* Create two PointSets to hold a set of tick mark positions along each
- axis. The values on "axis" will be taken from the info structure. For
- each axis create an array to hold values for the "other" axis. */
- for( axis = 0; axis < 2; axis++ ){
- info = grid[ axis ];
- pset[ axis ] = astPointSet( info->nmajor, 2, "", status );
- tvals[ axis ] = (double *) astMalloc( sizeof(double)*(size_t)(info->nmajor) );
- }
-
-/* Get the mapping from Base (graphics) frame the Current (physical) */
- mapping = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Get the bounds of the area in which tick marks must occur to be
- counted. This is the total plotting area minus a 5% margin at each
- edge. */
- margin = 0.05*( this->xhi - this->xlo );
- xlo = this->xlo + margin;
- xhi = this->xhi - margin;
-
- margin = 0.05*( this->yhi - this->ylo );
- ylo = this->ylo + margin;
- yhi = this->yhi - margin;
-
-/* Do each axis. */
- for( axis = 0; axis < 2 && astOK; axis++ ){
-
-/* We need to decide where to put the labels. The major tick values give
- their location on one axis. The position on the other axis may be
- specified by the caller using the "LabelAt" attribute, or a default value
- can be found if no values have been supplied for this attributes. If the
- attribute for this axis has been set, use its value. */
- if( astTestLabelAt( this, axis ) ){
- labelat[ axis ] = astGetLabelAt( this, axis );
-
-/* Otherwise, find the longest curve parallel to the axis being labelled.
- Also find the length of the curve which passes through the origin of the
- other axis which is within the plotting area... */
- } else {
-
-/* Store pointers to the arrays holding tick mark physical coordinates,
- and set these in the PointSet. */
- ptr1[ axis ] = grid[ axis ]->ticks;
- ptr1[ 1 - axis ] = tvals[ axis ];
- astSetPoints( pset[ axis ], ptr1 );
-
-/* Get a pointer to the structure containing information describing the
- positions of the major tick marks along the other axis. */
- info = grid[ 1 - axis ];
-
-/* Get a pointer to the other axis value at the first other axis major tick
- mark. */
- value = info->ticks;
-
-/* Get a limit on absolute magnitude for an axis value to be consider
- equal to zero. */
- lim = 1.0E-6*fabs( value[ 1 ] - value [ 0 ] );
-
-/* Get a pointer to the structure containing information describing the
- breaks in the curve which passes through the first major tick mark. */
- cdt = cdata[ 1 - axis ];
-
-/* Initialise the effective length of the longest curve, and the curve passing
- through the origin. */
- maxlen = -1.0;
- zerolen = 0.0;
- labelat[ axis ] = AST__BAD;
-
-/* Loop round each of the major tick marks on the other axis. */
- for( tick = 0; tick < info->nmajor && astOK; tick++ ){
-
-/* Fill the array of other axis values with the current other axis value. */
- for( i = 0; i < grid[ axis ]->nmajor; i++ ){
- tvals[ axis ][ i ] = *value;
- }
-
-/* Transform the tick positions from the current frame (i.e. physical
- coordinates) to the base frame (i.e. graphics coordinates) using
- the inverse Mapping. */
- pset2 = Trans( this, NULL, mapping, pset[ axis ], 0, NULL, 0,
- method, class, status );
-
-/* Get pointers to the graphics coordinates. */
- ptr2 = astGetPoints( pset2 );
- if( astOK ) {
-
-/* Count the number of graphics positions which are well within the plotting
- area. */
- nin = 0;
- for( i = 0; i < grid[ axis ]->nmajor; i++ ){
- x = ptr2[ 0 ][ i ];
- y = ptr2[ 1 ][ i ];
- if( x != AST__BAD && x > xlo && x < xhi &&
- y != AST__BAD && y > ylo && y < yhi ) nin++;
- }
-
-/* Find the effective length of this curve.*/
- efflen = sqrt( (float) nin )*cdt->length;
-
-/* If the curve through this tick mark has a freater effective length than any
- other found so far, record it. */
- if( efflen > maxlen ){
- maxlen = efflen;
- labelat[ axis ] = *value;
- }
-
-/* If this tick mark is at the origin, note the effective length. */
- if( fabs( *value ) <= lim ) zerolen = efflen;
-
-/* Get a pointer to the curve through the next major tick mark. */
- cdt++;
-
-/* Get a pointer to the axis value at the next major tick mark. */
- value++;
-
- }
-
-/* Free resources. */
- pset2 = astAnnul( pset2 );
- }
-
-/* Use the curve through the origin unless it is significantly shorter
- than the longest curve. */
- if( zerolen > 0.4*maxlen ) labelat[ axis ] = 0.0;
-
- }
-
- }
-
-/* Release resources. */
- for( axis = 0; axis < 2; axis++ ){
- if( pset[ axis ] ) pset[ axis ] = astAnnul( pset[ axis ] );
- if( tvals[ axis ] ) tvals[ axis ] = (double *) astFree( (void *) tvals[ axis ] );
- }
- mapping = astAnnul( mapping );
-
-/* Return. */
- return;
-
-}
-
-static void Labels( AstPlot *this, TickInfo **grid, AstPlotCurveData **cdata,
- double *gap, double *labelat, const char *method,
- const char *class, int *status ){
-/*
-*
-* Name:
-* Labels
-
-* Purpose:
-* Draw numerical axis labels for a 2-D annotated coordinate grid.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void Labels( AstPlot *this, TickInfo **grid, AstPlotCurveData **cdata,
-* double *gap, double *labelat, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* The policy for placing labels for the major tick values is broadly as
-* follows: if possible, labels for a given physical axis are placed on
-* one edge of the plotting area, at the place where the curve for a
-* major tick value crosses the edge. If very few of the curves cross
-* the edge, then the label for a curve is placed at the intersection
-* of that curve with the longest of the curves representing the major
-* tick values on the other axis.
-
-* Parameters:
-* this
-* A pointer to the Plot.
-* grid
-* A pointer to an array of two TickInfo pointers (one for each axis),
-* each pointing to a TickInfo structure holding information about
-* tick values on the axis. See function GridLines.
-* cdata
-* A pointer to an array of two AstPlotCurveData pointers (one for each axis),
-* each pointing to an array of AstPlotCurveData structure (one for each
-* major tick value on the axis), holding information about breaks
-* in the curves drawn to mark the major tick values. See function
-* DrawGrid.
-* gap
-* Pointer to array of two values holding the gap between major
-* tick values on the two axes.
-* labelat
-* A pointer to a 2 element array holding the constant axis
-* values at which tick marks are put. Element 0 should hold
-* the axis 1 value at which tick marks for axis 0 are placed. Element
-* 1 should hold the axis 0 value at which tick marks for axis
-* 1 are placed. If labels are to be placed round the edges of the
-* plotting zone instead of within the plotting zone, then values of
-* AST__BAD should be supplied.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function assumes the current Frame of the Plot is 2
-* dimensional, and it should not be called if this is not the case.
-*/
-
-/* Local Variables: */
- AstFrame *frame; /* Pointer to current Frame */
- AstMapping *mapping; /* Pointer to graphics->physical Mapping */
- AstPointSet *pset1; /* Pointer to PointSet holding physical coords. */
- AstPointSet *pset2; /* Pointer to PointSet holding graphics coords. */
- AstPlotCurveData *cdt; /* Pointer to the AstPlotCurveData for the next tick */
- LabelList *labellist; /* Pointer to list of labels to be plotted */
- LabelList *ll; /* Pointer to next label to be plotted */
- TickInfo *info; /* Pointer to the TickInfo for the current axis */
- char just_buf[3]; /* Buffer to hold a justification string */
- const char *just; /* Justification string */
- const char *text; /* Pointer to label text */
- double *used; /* Pointer to list of used label values */
- double *value; /* Current tick value */
- double diff; /* Difference between adjacent major tick marks */
- double dx2; /* Text base-line X component after axis reversal */
- double dx; /* Text base-line X component */
- double dy2; /* Text base-line Y component after axis reversal */
- double dy; /* Text base-line Y component */
- double gx; /* Reference position graphics X coord. */
- double gy; /* Reference position graphics Y coord. */
- double mindim; /* Shortest dimension of plotting area */
- double offx; /* X component of offset vector */
- double offy; /* Y component of offset vector */
- double sin45; /* Sine of 45 degrees */
- double txtgap; /* Absolute gap between labels and edges */
- double upx; /* Text up-vector X component */
- double upy; /* Text up-vector Y component */
- double val[ 2 ]; /* Physical coordinates */
- float *box; /* Pointer to array of label bounding boxes */
- int axis; /* Current axis index */
- int esc; /* Interpret escape sequences? */
- int flag; /* Flag indicating which way the base-vector points */
- int iused; /* Index into list of used axis values */
- int last; /* The index of the last tick to use */
- int logticks; /* ARe major ticks spaced logarithmically? */
- int nlab; /* The number of labels to be plotted */
- int nused; /* Number of used axis values */
- int t0; /* Index of central tick */
- int tick; /* Current tick index */
- int tinc; /* Increment between ticks */
- int upfree; /* Are we free to change the up-vector? */
- int gelid; /* ID for next graphical element to be drawn */
-
-/* Check the global status. */
- if( !astOK ) return;
-
-/* See if escape sequences in text strings are to be interpreted */
- esc = astGetEscape( this );
-
-/* Get the minimum dimension of the plotting ares. */
- mindim = MIN( this->xhi - this->xlo, this->yhi - this->ylo );
-
-/* Empty the list of bounding boxes kept by the Overlap function. */
- (void) Overlap( this, 0, 0, NULL, 0.0, 0.0, NULL, 0.0, 0.0, NULL,
- method, class, status );
-
-/* If required, draw the labels around the edges of the plotting area. */
- if( labelat[ 0 ] == AST__BAD || labelat[ 1 ] == AST__BAD ){
- (void) EdgeLabels( this, 1, grid, cdata, astGetForceExterior( this ),
- method, class, status );
-
-/* Otherwise, draw labels within the interior of the plotting area. */
- } else {
-
-/* Store a value for the sine of 45 degrees. */
- sin45 = 1.0/sqrt( 2.0 );
-
-/* Initialise the pointer to the memory holding the bounding boxes for
- all labels (used by function Overlap). */
- box = NULL;
-
-/* Get a pointer to the current Frame in the Plot. */
- frame = astGetFrame( this, AST__CURRENT );
-
-/* Get a pointer to the mapping form the base Frame to the current Frame in
- the Plot. */
- mapping = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Initialize the id value for graphical element being drawn. */
- gelid = AST__NUMLAB1_ID;
-
-/* Do each axis. */
- for( axis = 0; axis < 2; axis++ ){
-
-/* See of major ticks are spaced logarithmically on this axis. */
- logticks = astGetLogTicks( this, axis );
-
-/* Establish the correct graphical attributes as defined by attributes
- with the supplied Plot. */
- astGrfAttrs( this, gelid, 1, GRF__TEXT, method, class );
-
-/* Get a pointer to the structure containing information describing the
- positions of the major tick marks along this axis. */
- info = grid[ axis ];
-
-/* Only progress if there are some labels stored within the structure. */
- if( info->labels ) {
-
-/* Initialise the pointer to the list of text strings to be drawn. */
- labellist = NULL;
- nlab = 0;
-
-/* See if numerical labels are always to be drawn horizontal. If so, set
- a flag and initialise a vertical up-vector. */
- if( astGetLabelUp( this, axis ) ){
- upfree = 0;
- upx = 0.0;
- upy = 1.0;
-
-/* Otherwise, clear the flag and indicate that we do not yet have an
- up-vector. */
- } else {
- upfree = 1;
- upx = AST__BAD;
- upy = AST__BAD;
- }
-
-/* Indicate that the tangent vector to the other axis is not yet
- known. */
- dx = AST__BAD;
- dy = AST__BAD;
- gx = AST__BAD;
- gy = AST__BAD;
-
-/* Store the gap to put next to the label text. */
- txtgap = astGetNumLabGap( this, axis )*mindim;
-
-/* Get a pointer to the structure containing information describing the
- breaks in the curve which passes through the first major tick mark. */
- cdt = cdata[ axis ];
-
-/* Get a pointer to the axis value at the first major tick mark. */
- value = info->ticks;
-
-/* Initialise pointers to two PointSets which will be created and used
- within function GVec. */
- pset1 = NULL;
- pset2 = NULL;
-
-/* Get memory to hold the axis values at which labels have been put. */
- used = (double *) astMalloc( sizeof(double)*(size_t)info->nmajor );
- nused = 0;
-
-/* The tick marks are done in two batches, each batch working out from the
- middle. This is done because there may be extra tick marks outside the
- normal ranges at the extremes, and these should not be given the
- priority caused by doing them first. Store the mid-tick index, the
- current tick index, and the increment between ticks. The ticks from the
- middle up to the highest index are done first. */
- t0 = info->nmajor/2;
- tick = t0 - 1;
- tinc = 1;
-
-/* Loop round until all ticks have been done. */
- last = info->nmajor - 1;
- while( (tick += tinc) >= 0 && astOK ){
-
-/* If we have done the highest tick index, start again at the tick just
- below middle, and work done towards index zero. */
- if( tick == info->nmajor ){
- tick = t0 - 1;
- tinc = -1;
- }
-
-/* Store the reference position for the label . */
- val[ axis ] = value[ tick ];
- val[ 1 - axis ] = labelat[ axis ];
-
-/* Store the difference between this tick and the next. */
- if( logticks ) {
- diff = value[ tick ]*( gap[ axis ] - 1.0 );
- } else {
- diff = gap[ axis ];
- }
-
-/* See if this axis value has already been used. */
- for( iused = 0; iused < nused; iused++ ){
- if( fabs( val[ axis ] - used[ iused ] ) <
- 1.0E-3*diff ) break;
- }
-
-/* If the axis value has already been used, don't use it again. */
- if( iused >= nused || nused == 0 ){
- used[ nused++ ] = val[ axis ];
-
-/* We now need to decide where to put the reference point for the text
- string, and what justification to use. Assuming that NumLabGap is +ve,
- the labels are drawn on the right hand side of the axis as seen by
- someone moving along the axis in the positive direction, with an
- up-vector which is normal to the axis tangent. First, find the graphics
- coordinates at the point being labelled, and the tangent-vector parallel
- to the axis being labelled. If the tangent vector is not defined, then
- the tangent vector used for the previous label is re-used. */
- GVec( this, mapping, val, axis, 0.01*diff, &pset1,
- &pset2, &gx, &gy, &dx, &dy, &flag, method, class, status );
-
-/* If we now have a tangent vector and good graphics coordinates for the
- label's reference position... */
- if( dx != AST__BAD && dy != AST__BAD &&
- gx != AST__BAD && gy != AST__BAD ){
-
-/* The reference position for the text is displaced away from the
- reference position normal to the axis on the left hand side by the
- "txtgap" value. */
- if( ( this->xrev && this->yrev ) ||
- ( !this->xrev && !this->yrev ) ) {
- offx = -dy*txtgap;
- offy = dx*txtgap;
- } else {
- offx = dy*txtgap;
- offy = -dx*txtgap;
- }
-
- gx += offx;
- gy += offy;
-
-/* Reverse the vector components if the graphics axes are displayed
- reversed. */
- dx2 = ( this->xrev ) ? -dx : dx;
- dy2 = ( this->yrev ) ? -dy : dy;
- offx = ( this->xrev ) ? -offx : offx;
- offy = ( this->yrev ) ? -offy : offy;
-
-/* The up-vector and justification for the text depends on whether or
- not the up-vector is free to rotate. If it is free, the up-vector is
- chosen so that the text is not upside-down. */
- if( upfree ){
-
- if( dx2 < -0.01 ){
- upx = dy2;
- upy = -dx2;
- just = ( txtgap < 0.0 )? "BC" : "TC";
- } else {
- upx = -dy2;
- upy = dx2;
- just = ( txtgap < 0.0 )? "TC" : "BC";
- }
- if( txtgap == 0.0 ) just = "CC";
-
-/* If the up vector is required to be vertical, a system is used which
- tries to put the centre of the text string on or near the offset
- vector. */
- } else {
- upx = 0.0;
- upy = 1.0;
-
- if( offy > fabs(txtgap)*sin45 ){
- just_buf[0] = 'B';
- } else if( offy < -fabs(txtgap)*sin45 ){
- just_buf[0] = 'T';
- } else {
- just_buf[0] = 'C';
- }
- if( txtgap == 0.0 ) just_buf[0] = 'C';
-
- if( offx < -fabs(txtgap)*sin45 ){
- just_buf[1] = 'R';
- } else if( offx > fabs(txtgap)*sin45 ){
- just_buf[1] = 'L';
- } else {
- just_buf[1] = 'C';
- }
- if( txtgap == 0.0 ) just_buf[1] = 'C';
-
- just_buf[2] = 0;
- just = just_buf;
- }
-
-/* Get the label text. */
- text = (info->labels)[ tick ];
- if( text ){
-
-/* Check that the reference position is within the plotting area.
- If so, add it to the list of labels to be drawn. */
- if( gx >= this->xlo && gx <= this->xhi &&
- gy >= this->ylo && gy <= this->yhi ){
-
- labellist = (LabelList *) astGrow( (void *) labellist, nlab + 1, sizeof(LabelList) );
- if ( astOK ) {
- (labellist + nlab)->index = tick;
- (labellist + nlab)->text = (char *) astStore( NULL, (void *) text, strlen(text) + 1 );
- (labellist + nlab)->x = gx;
- (labellist + nlab)->y = gy;
- (labellist + nlab)->just = (char *) astStore( NULL, (void *) just, strlen(just) + 1 );
- (labellist + nlab)->upx = upx;
- (labellist + nlab)->upy = upy;
- (labellist + nlab)->val = val[ axis ];
- nlab++;
- } else {
- break;
- }
- }
- }
- }
- }
- }
-
-/* If any labels were stored, draw the text strings, and then release the
- memory used to hold the text, etc. */
- if( nlab > 0 ) {
- PlotLabels( this, esc, frame, axis, labellist, info->fmt, nlab,
- &box, method, class, status );
- ll = labellist;
- for( tick = 0; tick < nlab; tick ++ ) {
- ll->text = (char *) astFree( (void *) ll->text );
- ll->just = (char *) astFree( (void *) ll->just );
- ll++;
- }
- labellist = (LabelList *) astFree( (void *) labellist );
- }
-
-/* Free the memory used to hold the axis values at which labels have
- been put. */
- used = (double *) astFree( (void *) used );
-
-/* Annul the PointSets (if used). */
- if( pset1 ) pset1 = astAnnul( pset1 );
- if( pset2 ) pset2 = astAnnul( pset2 );
-
-/* Re-establish the original graphical attributes. */
- astGrfAttrs( this, gelid, 0, GRF__TEXT, method, class );
-
-/* Set up the id for the next graphical element to be drawn. */
- gelid = AST__NUMLAB2_ID;
-
- }
- }
-
-/* Free the memory used to hold the bounding boxes. */
- box = (float *) astFree( (void *) box );
-
-/* Annul the pointers to the Frame and the Mapping. */
- mapping = astAnnul( mapping );
- frame = astAnnul( frame );
-
- }
-
-/* Return. */
- return;
-
-}
-
-static void LinePlot( AstPlot *this, double xa, double ya, double xb,
- double yb, int ink, AstPlotCurveData *cdata,
- const char *method, const char *class, int *status ){
-/*
-*
-* Name:
-* LinePlot
-
-* Purpose:
-* Draws a straight line omitting bad regions.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void LinePlot( AstPlot *this, double xa, double ya, double xb,
-* double yb, int ink, AstPlotCurveData *cdata,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function draws a straight line between two positions in graphics
-* coordinates but leaves gaps in the line where it passes through
-* regions which have no corresponding physical coordinates.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* xa
-* The graphics X coordinate at the start of the line.
-* ya
-* The graphics Y coordinate at the start of the line.
-* xb
-* The graphics X coordinate at the end of the line.
-* yb
-* The graphics Y coordinate at the end of the line.
-* ink
-* If zero, the line is not actually drawn, but information about
-* the breaks is still returned. If non-zero, the line is also drawn.
-* cdata
-* A pointer to a structure in which to return information about the
-* breaks in the line.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - No curve is draw if any of the start or end positions are bad
-* (i.e. equal to AST__BAD), or if a NULL pointer is supplied for "cdata".
-* No errors are reported in these cases.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- double d[ CRV_NPNT ]; /* Offsets to evenly spaced points along curve */
- double x[ CRV_NPNT ]; /* X coords at evenly spaced points along curve */
- double y[ CRV_NPNT ]; /* Y coords at evenly spaced points along curve */
- double tol; /* Absolute tolerance value */
- int i; /* Loop count */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* Check the supplied values are usable. */
- if( xa == AST__BAD || ya == AST__BAD ||
- xb == AST__BAD || yb == AST__BAD ||
- !cdata ) return;
-
-/* Convert the tolerance from relative to absolute graphics coordinates. */
- tol = astGetTol( this )*MAX( this->xhi - this->xlo, this->yhi - this->ylo );
-
-/* Set up the external variables used by the Crv and CrvLine function (see
- their prologues for details). */
- Crv_scerr = ( astGetLogPlot( this, 0 ) ||
- astGetLogPlot( this, 1 ) ) ? 100.0 : 1.5;
- Crv_ux0 = AST__BAD;
- Crv_limit = 0.5*tol*tol;
- Crv_tol = tol;
- Crv_map = Map2;
- Crv_ink = ink;
- Crv_len = 0.0F;
- Crv_xlo = this->xlo;
- Crv_xhi = this->xhi;
- Crv_ylo = this->ylo;
- Crv_yhi = this->yhi;
- Crv_out = 1;
- Crv_xbrk = cdata->xbrk;
- Crv_ybrk = cdata->ybrk;
- Crv_vxbrk = cdata->vxbrk;
- Crv_vybrk = cdata->vybrk;
- Crv_clip = astGetClip( this ) & 1;
-
-/* Create a set of evenly spaced values between 0.0 and 1.0. These are the
- offsets the edge of the plotting zone at which the mapping is tested. */
- for( i = 0; i < CRV_NPNT; i++ ){
- d[ i ] = ( (double) i)/( (double) CRV_NSEG );
- }
-
-/* Now set up the externals used to communicate with the Map2 function.
- Map2 transforms a set of offsets between zero and one into a set of
- corresponding graphics coordinates, with bad values substituted for any
- offsets which correspond to points outside the domain of the mapping. */
-
-/* The number of axes in the physical coordinate system (i.e. the current
- Frame). */
- Map2_ncoord = astGetNout( this );
-
-/* A pointer to the mapping from graphics world cordinates to physical
- coordinates. */
- Map2_plot = this;
- Map2_map = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* The graphics coordinates corresponding to an offset of zero (i.e.
- the start of the line). */
- Map2_x0 = xa;
- Map2_y0 = ya;
-
-/* The increments in X and Y between offset zero (the start of the
- line) and offset 1 (the end of the line). */
- Map2_deltax = xb - xa;
- Map2_deltay = yb - ya;
-
-/* Get the graphics coordinates corresponding to the initial set of
- offsets. */
- Map2( CRV_NPNT, d, x, y, method, class, status GLOBALS_NAME );
-
-/* Use Crv and Map2 to draw the intersection of the straight line with
- the region containing valid physical coordinates. */
- Crv( this, d, x, y, 0, NULL, NULL, method, class, status );
-
-/* End the current poly line. */
- Opoly( this, method, class, status );
-
-/* Tidy up the static data used by Map2. */
- Map2( 0, NULL, NULL, NULL, method, class, status GLOBALS_NAME );
-
-/* If no part of the curve could be drawn, set the number of breaks and the
- length of the drawn curve to zero. */
- if( Crv_out ) {
- Crv_nbrk = 0;
- Crv_len = 0.0F;
-
-/* Otherwise, add an extra break to the returned structure at the position of
- the last point to be plotted. */
- } else {
- Crv_nbrk++;
- if( Crv_nbrk > AST__PLOT_CRV_MXBRK ){
- astError( AST__CVBRK, "%s(%s): Number of breaks in curve "
- "exceeds %d.", status, method, class, AST__PLOT_CRV_MXBRK );
- } else {
- *(Crv_xbrk++) = (float) Crv_xl;
- *(Crv_ybrk++) = (float) Crv_yl;
- *(Crv_vxbrk++) = (float) -Crv_vxl;
- *(Crv_vybrk++) = (float) -Crv_vyl;
- }
- }
-
-/* Store extra information about the curve in the returned structure, and
- purge any zero length sections. */
- if( cdata ){
- cdata->length = Crv_len;
- cdata->out = Crv_out;
- cdata->nbrk = Crv_nbrk;
- PurgeCdata( cdata, status );
- }
-
-/* Annul the Mapping. */
- Map2_map = astAnnul( Map2_map );
-
-/* Return. */
- return;
-
-}
-
-static double **MakeGrid( AstPlot *this, AstFrame *frm, AstMapping *map,
- int disk, int dim, double xlo, double xhi,
- double ylo, double yhi, int nphy, AstPointSet **pset1,
- AstPointSet **pset2, int norm, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* MakeGrid
-
-* Purpose:
-* Create a square grid of graphics coordinates and the corresponding
-* physical coordinates.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* double **MakeGrid( AstPlot *this, AstFrame *frm, AstMapping *map,
-* int disk, int dim, double xlo, double xhi, double ylo,
-* double yhi, int nphy, AstPointSet **pset1,
-* AstPointSet **pset2, int norm, const char *method,
-* const char *class, int *status ){
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function creates two PointSets, one holding a square grid of
-* graphics coordinates covering the supplied area, and the other
-* holding the corresponding physical coordinates. The points are
-* stored row by row in the returned PointSets, i.e. if the cell size
-* for the grid is (dx,dy), the first point is (xmin,ymin), followed
-* by (xmin+dx,ymin), (xmin+2*dx,ymin), up to (xmin+(dim-1)*dx,ymin),
-* followed by the next row (xmin,ymin+dy), (xmin+dx,ymin+dy), etc.
-
-* Parameters:
-* this
-* The Plot.
-* frm
-* A pointer to the Current Frame in the Plot. If this is supplied
-* NULL, then a pointer is found within this function if required (i.e.
-* if "norm" is non-zero).
-* map
-* The Mapping from graphics to physical coordinates, extracted from
-* the Plot.
-* disk
-* If non-zero, the corners of the grid are omitted form the
-* returned PointSets, resulting in a grid that is more disk like than
-* rectangular.
-* dim
-* The number of samples along each edge of the grid.
-* xlo
-* The lower bound on the first axis of the region to be covered
-* by the grid.
-* xhi
-* The upper bound on the first axis of the region to be covered
-* by the grid.
-* ylo
-* The lower bound on the second axis of the region to be covered
-* by the grid.
-* yhi
-* The upper bound on the second axis of the region to be covered
-* by the grid.
-* nphy
-* The number of axes in the physical cooridinate system.
-* pset1
-* A pointer to a location at which to store a pointer to the
-* PointSet holding the graphics coordinates.
-* pset2
-* A pointer to a location at which to store a pointer to the
-* PointSet holding the physical coordinates.
-* norm
-* If non-zero the physical cooridnates are normalised using the
-* Plot's astNorm method.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the physical coordinate data stored in the PointSet
-* "pset2".
-
-* Notes:
-* - The returned PointSets should be annulled when no longer needed,
-* using astAnnul.
-* - NULL pointers are returned if an error has already occurred, or
-* if this function should fail for any reason.
-*/
-
-/* Local Variables: */
- double **ptr1; /* Pointers to graphics axis values */
- double **ptr2; /* Pointers to physical axis values */
- int size; /* No. of points in the grid */
-
-/* Initialise the returned pointers. */
- *pset1 = NULL;
- *pset2 = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Create two PointSets. We assume for the moment that they cover the
- full grid, including corners. */
- size = dim*dim;
- *pset1 = astPointSet( size, 2, "", status );
- *pset2 = astPointSet( size, nphy, "", status );
-
-/* Get pointers to the data arrays for the two PointSets. */
- ptr1 = astGetPoints( *pset1 );
- ptr2 = astGetPoints( *pset2 );
-
-/* Create a grid covering the supplied area. */
- size = GraphGrid( dim, disk, xlo, xhi, ylo, yhi, ptr1, status );
-
-/* If the corners are being omitted, reduce the number of points in the
- two PointSets. */
- if( disk ) {
- astSetNpoint( *pset1, size );
- astSetNpoint( *pset2, size );
- }
-
-/* Transform these graphics positions to physical coordinates. */
- Trans( this, frm, map, *pset1, 1, *pset2, norm, method, class, status );
-
-/* If an error has occurred, annul the two pointsets. */
- if( !astOK ){
- *pset1 = astAnnul( *pset1 );
- *pset2 = astAnnul( *pset2 );
- ptr2 = NULL;
- }
-
-/* Return. */
- return ptr2;
-
-}
-
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra,
- AstObject **fail, int *status ) {
-/*
-* Name:
-* ManageLock
-
-* Purpose:
-* Manage the thread lock on an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *ManageLock( AstObject *this, int mode, int extra,
-* AstObject **fail, int *status )
-
-* Class Membership:
-* Plot member function (over-rides the astManageLock protected
-* method inherited from the parent class).
-
-* Description:
-* This function manages the thread lock on the supplied Object. The
-* lock can be locked, unlocked or checked by this function as
-* deteremined by parameter "mode". See astLock for details of the way
-* these locks are used.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* mode
-* An integer flag indicating what the function should do:
-*
-* AST__LOCK: Lock the Object for exclusive use by the calling
-* thread. The "extra" value indicates what should be done if the
-* Object is already locked (wait or report an error - see astLock).
-*
-* AST__UNLOCK: Unlock the Object for use by other threads.
-*
-* AST__CHECKLOCK: Check that the object is locked for use by the
-* calling thread (report an error if not).
-* extra
-* Extra mode-specific information.
-* fail
-* If a non-zero function value is returned, a pointer to the
-* Object that caused the failure is returned at "*fail". This may
-* be "this" or it may be an Object contained within "this". Note,
-* the Object's reference count is not incremented, and so the
-* returned pointer should not be annulled. A NULL pointer is
-* returned if this function returns a value of zero.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A local status value:
-* 0 - Success
-* 1 - Could not lock or unlock the object because it was already
-* locked by another thread.
-* 2 - Failed to lock a POSIX mutex
-* 3 - Failed to unlock a POSIX mutex
-* 4 - Bad "mode" value supplied.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-*/
-
-/* Local Variables: */
- AstPlot *this; /* Pointer to Plot structure */
- int result; /* Returned status value */
-
-/* Initialise */
- result = 0;
-
-/* Check the supplied pointer is not NULL. */
- if( !this_object ) return result;
-
-/* Obtain a pointers to the Plot structure. */
- this = (AstPlot *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
- if( !result ) result = (*parent_managelock)( this_object, mode, extra,
- fail, status );
-
-/* If defined, ensure the grfcontext KeyMap contained within the Plot is
- locked, unlocked or checked. */
- if( this->grfcontext ) {
- if( !result ) result = astManageLock( this->grfcontext, mode, extra, fail );
-
-/* Also lock or unlock the associated object handle. */
- if( mode == AST__LOCK ) {
- if( !result ) astLock( this->grfcontextID, extra );
-
- } else if( mode == AST__UNLOCK ) {
- if( !result ) astUnlock( this->grfcontextID, 0 );
-
- }
- }
-
- return result;
-
-}
-#endif
-
-static void Map1( int n, double *dist, double *x, double *y,
- const char *method, const char *class,
- int *status GLOBALS_ARG ){
-/*
-* Name:
-* Map1
-
-* Purpose:
-* Find graphics coordinates at given distances along a curve
-* parallel to a physical axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void Map1( int n, double *dist, double *x, double *y,
-* const char *method, const char *class,
-* int *status [,AstGlobals *AST__GLOBALS] )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* The supplied distances are converted into physical coordinates
-* using the scalings described by various external variables, and then
-* these physical coordinates are mapped into graphics coordinates.
-
-* Parameters:
-* n
-* The number of points to map. Static resources are released but
-* no points are mapped if zero is supplied.
-* dist
-* A pointer to an array holding "n" distances. A "dist" value of
-* zero corresponds to the starting position supplied in external
-* variable Map1_origin. A "dist" value of one corresponds to the
-* finishing position which is a distance Map1_length away from
-* Map1_origin, moving in the positive direction of the axis given
-* by Map1_axis. "dist" values can be either linearly or
-* logarithmically related to axis values (see Map1_log).
-* x
-* A pointer to an array in which to store the "n" graphics X
-* coordinate values corresponding to the positions in "dist".
-* y
-* A pointer to an array in which to store the "n" graphics Y
-* coordinate values corresponding to the positions in "dist".
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-* AST__GLOBALS
-* Only present if compiled with -DTHREAD_SAFE. It is a pointer to
-* the structure holding the global data for the executing thread.
-* It is passed as a function parameter, rather than being accessed
-* within this function using the astGET_GLOBALS(NULL) macro (as
-* other Object-less functions do) in order to avoid the time
-* overheads of calling astGET_GLOBALS(NULL) . This function is
-* time-critical.
-
-* External Variables:
-* Map1_log = int (Read)
-* If zero, then "dist" in learly related to axis value. Otherwise
-* it is linearly related to log10(axis value).
-* Map1_ncoord = int (Read)
-* The number of axes in the physical coordinate system.
-* Map1_axis = int (Read)
-* The zero-based index of the axis which the curve follows (i.e.
-* the axis which changes value along the curve).
-* Map1_statics = Map1Statics * (Read and Write)
-* Pointer to a structure holding other static data used by Map1.
-* Map1_origin = const double * (Read)
-* A pointer to an array holding the physical coordinate value on
-* each axis at the start of the curve (i.e. at dist = 0.0).
-* Map1_length = double (Read)
-* The scale factor to convert "dist" values into increments
-* along the physical axis given by Map1_axis.
-* Map1_plot = AstPlot * (Read)
-* A pointer to the Plot defining the mapping from graphics cordinates
-* to physical coordinates.
-* Map1_map = AstMapping * (Read)
-* A pointer to the mapping from graphics cordinates to physical
-* coordinates extracted from the Plot.
-* Map1_frame = AstFrame * (Read)
-* A pointer to the Current Frame in the Plot.
-* Map1_norm = int (Read)
-* A flag indicating if physical coordinate values which are not in
-* the normal ranges of the corresponding axes should be considered
-* bad.
-
-* Notes:
-* - On the first call, this function allocates static resources which
-* are used by subsequent invocation. These resources should be freed before
-* calling this function with new values for any of the external variables,
-* or when no longer needed, by calling this function with "n" supplied as
-* zero.
-* - If an error has already occurred, this runction returns without
-* action ,except that if "n" is supplied as zero then static resources
-* are released even if an error has already occurred.
-
-*/
-
-/* Local Constants: */
- Map1Statics *statics; /* Pointer to structure holding static data */
- double *p; /* Pointer to next value */
- double axval; /* Axis origin value */
- int i, j; /* Loop counts */
-
-/* Convert the global "void *" pointer to a Map1Statics pointer */
- statics = (Map1Statics *) Map1_statics;
-
-/* If zero points were supplied, release static resources and return. */
- if( n == 0 ){
- if( statics ) {
- if( statics->pset1 ) statics->pset1 = astAnnul( statics->pset1 );
- if( statics->pset2 ) statics->pset2 = astAnnul( statics->pset2 );
- if( statics->work1 ) statics->work1 = (double *) astFree( (void *) statics->work1 );
- if( statics->work2 ) statics->work2 = (double *) astFree( (void *) statics->work2 );
- Map1_statics = astFree( statics );
- }
- return;
- }
-
-/* Otherwise, check the inherited global status. */
- if( !astOK ) return;
-
-/* Create and initialise a structure to hold extra static information if
- this has not already been done. */
- if( !statics ) {
- statics = astMalloc( sizeof( Map1Statics ) );
- if( statics ) {
- statics->pset1 = NULL;
- statics->pset2 = NULL;
- statics->ptr1 = NULL;
- statics->pax = NULL;
- statics->ptr2[ 0 ] = NULL;
- statics->ptr2[ 1 ] = NULL;
- statics->work1 = NULL;
- statics->work2 = NULL;
- statics->nl = 0;
- Map1_statics = statics;
- }
- }
-
-/* If the number of points to be mapped is different to last time,
- set up some PointSets to store the specified number of points. */
- if( n != statics->nl ){
- statics->nl = n;
-
-/* Create a PointSet to hold the physical coordinates corresponding to
- the supplied offsets. First annul any existing PointSet. */
- if( statics->pset1 ) statics->pset1 = astAnnul( statics->pset1 );
- statics->pset1 = astPointSet( n, Map1_ncoord, "", status );
- statics->ptr1 = astGetPoints( statics->pset1 );
-
-/* Create a PointSet to hold the corresponding graphics coordinates.
- The supplied "x" and "y" arrays will be used to store the data
- so we do not need to get pointers to the data using astGetPoints. First
- annul any existing PointSet. */
- if( statics->pset2 ) statics->pset2 = astAnnul( statics->pset2 );
- statics->pset2 = astPointSet( n, 2, "", status );
-
-/* Get work space to hold two positions. */
- statics->work1 = (double *) astRealloc( (void *) statics->work1,
- sizeof(double)*(size_t)Map1_ncoord );
- statics->work2 = (double *) astRealloc( (void *) statics->work2,
- sizeof(double)*(size_t)Map1_ncoord );
-
-/* Check the pointer can be used. */
- if( astOK ){
-
-/* Store a pointer to the start of the memory which will be used to store
- the physical data for the axis being drawn. */
- statics->pax = statics->ptr1[ Map1_axis ];
-
-/* Fill the PointSet which is used to hold physical data with the physical
- coordinates at the start of the curve. */
- for( i = 0; i < Map1_ncoord; i++ ){
- axval = Map1_origin[ i ];
- p = statics->ptr1[ i ];
- for( j = 0; j < n; j++ ) *(p++) = axval;
- }
-
-/* Store the scale and offset to apply to the "dist" values. If Map1_log is
- zero (linear axes) then applying these values gives axis value directly.
- If Map1_log is non-zero (log axes) then applying these values gives
- log10( axis value). */
- if( Map1_log ) {
- statics->neg = ( Map1_origin[ Map1_axis ] < 0 );
- statics->axorig = log10( fabs( Map1_origin[ Map1_axis ] ) );
- statics->axscale = log10( fabs( Map1_origin[ Map1_axis ] +
- Map1_length ) ) - statics->axorig;
- } else {
- statics->axorig = Map1_origin[ Map1_axis ];
- statics->axscale = Map1_length;
- }
- }
- }
-
-/* Check the initialisation went OK (if done). */
- if( astOK ){
-
-/* Loop round each offset along the curve, converting the normalised offset
- in the range [0,1] to a physical coordinate and storing in PointSet 1. */
- p = statics->pax;
- for( i = 0; i < n; i++){
- *(p++) = statics->axorig + statics->axscale*dist[ i ];
- }
- if( Map1_log ) {
- p = statics->pax;
- for( i = 0; i < n; i++,p++ ){
- *p = statics->neg ? -pow( 10.0, *p ) : pow( 10.0, *p );
- }
- }
-
-/* Store pointers to the results arrays in PointSet 2. */
- statics->ptr2[ 0 ] = x;
- statics->ptr2[ 1 ] = y;
- astSetPoints( statics->pset2, statics->ptr2 );
-
-/* Map all the positions into graphics coordinates. */
- (void) Trans( Map1_plot, NULL, Map1_map, statics->pset1, 0, statics->pset2, 1, method, class, status );
-
-/* If points not in their normal ranges are to be set bad... */
- if( Map1_norm ) {
-
-/* The following code simply normalizes the physical position, and if this
- produces any change, the graphics positions are set bad. */
- for( i = 0; i < n; i++){
- for( j = 0; j < Map1_ncoord; j++) statics->work1[j] = statics->ptr1[j][i];
- astNorm( Map1_frame, statics->work1 );
- for( j = 0; j < Map1_ncoord; j++) {
- if( !EQUAL( statics->work1[j], statics->ptr1[j][i] ) ) {
- statics->ptr2[0][i] = AST__BAD;
- statics->ptr2[1][i] = AST__BAD;
- break;
- }
- }
- }
- }
- }
-
-/* Return. */
- return;
-
-}
-
-static void Map2( int n, double *dist, double *x, double *y,
- const char *method, const char *class,
- int *status GLOBALS_ARG ){
-/*
-* Name:
-* Map2
-
-* Purpose:
-* Find which graphics coordinates have good physical coordinates
-* at given distances along a straight line.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void Map2( int n, double *dist, double *x, double *y,
-* const char *method, const char *class,
-* int *status [,AstGlobals *AST__GLOBALS] )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* The supplied distances refer to the distance along a straight line
-* in the graphics coordinate system. The returned graphics coordinates
-* correspond to the supplied distances, except that any position for
-* which there are no defined physical coordinates is returned bad.
-
-* Parameters:
-* n
-* The number of points to map. Static resources are released but
-* no points are mapped if zero is supplied.
-* dist
-* A pointer to an array holding "n" distances. A "dist" value of
-* zero corresponds to the graphics position supplied in external
-* variables (Map2_x0, Map2_y0). A "dist" value of one corresponds to
-* the graphics position which is offset from the start by the vector
-* (Map2_deltax, Map2_deltay).
-* x
-* A pointer to an array in which to store the "n" graphics X
-* coordinate values corresponding to the positions in "dist",
-* except that any which have no corresponding physical coordinates
-* are set to AST__BAD.
-* y
-* A pointer to an array in which to store the "n" graphics Y
-* coordinate values corresponding to the positions in "dist",
-* except that any which have no corresponding physical coordinates
-* are set to AST__BAD.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-* AST__GLOBALS
-* Only present if compiled with -DTHREAD_SAFE. It is a pointer to
-* the structure holding the global data for the executing thread.
-* It is passed as a function parameter, rather than being accessed
-* within this function using the astGET_GLOBALS(NULL) macro (as
-* other Object-less functions do) in order to avoid the time
-* overheads of calling astGET_GLOBALS(NULL) . This function is
-* time-critical.
-
-* External Variables:
-* Map2_ncoord = int (Read)
-* The number of axes in the physical coordinate system.
-* Map2_x0 = double (Read)
-* The graphics X coordinate at the start of the line (i.e. at dist
-* = 0.0).
-* Map2_y0 = double (Read)
-* The graphics Y coordinate at the start of the line (i.e. at dist
-* = 0.0).
-* Map2_deltax = double (Read)
-* The increment along the graphics X axis between the start and
-* end of the line.
-* Map2_deltay = double (Read)
-* The increment along the graphics Y axis between the start and
-* end of the line.
-* Map2_plot = AstPlot * (Read)
-* A pointer to the Plot defining the mapping from graphics cordinates
-* to physical coordinates.
-* Map2_map = AstMapping * (Read)
-* A pointer to the mapping from graphics cordinates to physical
-* coordinates, extracted from the Plot.
-* Map2_statics = Map2Statics * (Read and Write)
-* Pointer to a structure holding other static data used by Map2.
-
-* Notes:
-* - On the first call, this function allocates static resources which
-* are used by subsequent invocation. These resources should be freed before
-* calling this function with new values for any of the external variables,
-* or when no longer needed, by calling this function with "n" supplied as
-* zero.
-* - If an error has already occurred, this runction returns without
-* action ,except that if "n" is supplied as zero then static resources
-* are released even if an error has already occurred.
-
-*/
-/* Local Constants: */
- Map2Statics *statics; /* Pointer to structure holding static data */
- int i, j; /* Loop counts */
- double *p; /* Pointer to next physical value */
- double *px; /* Pointer to next x graphics value */
- double *py; /* Pointer to next y graphics value */
-
-/* Convert the global "void *" pointer to a Map2Statics pointer */
- statics = (Map2Statics *) Map2_statics;
-
-/* If zero points were supplied, release static resources and return. */
- if( n == 0 ){
- if( statics ) {
- if( statics->pset1 ) statics->pset1 = astAnnul( statics->pset1 );
- if( statics->pset2 ) statics->pset2 = astAnnul( statics->pset2 );
- Map2_statics = astFree( statics );
- }
- return;
- }
-
-/* Otherwise, check the inherited global status. */
- if( !astOK ) return;
-
-/* Create and initialise a structure to hold extra static information if
- this has not already been done. */
- if( !statics ) {
- statics = astMalloc( sizeof( Map2Statics ) );
- if( statics ) {
- statics->pset1 = NULL;
- statics->pset2 = NULL;
- statics->ptr2 = NULL;
- statics->ptr1[ 0 ] = NULL;
- statics->ptr1[ 1 ] = NULL;
- statics->nl = 0;
- Map2_statics = statics;
- }
- }
-
-/* If the number of points to be mapped is different to last time,
- set up some PointSets to store the specified number of points. */
- if( n != statics->nl ){
- statics->nl = n;
-
-/* Create a PointSet to hold the graphics coordinates corresponding to
- the supplied offsets. The supplied arrays will be used to hold the
- data for this PointSet, and so astGetPoints is not called. */
- if( statics->pset1 ) statics->pset1 = astAnnul( statics->pset1 );
- statics->pset1 = astPointSet( n, 2, "", status );
-
-/* Create a PointSet to hold the corresponding physical coordinates, and
- get pointers to the associated axis values. */
- if( statics->pset2 ) statics->pset2 = astAnnul( statics->pset2 );
- statics->pset2 = astPointSet( n, Map2_ncoord, "", status );
- statics->ptr2 = astGetPoints( statics->pset2 );
- }
-
-
-/* Check the initialisation went OK (if done). */
- if( astOK ){
-
-/* Store pointers to the results arrays in PointSet 1. */
- statics->ptr1[ 0 ] = x;
- statics->ptr1[ 1 ] = y;
- astSetPoints( statics->pset1, statics->ptr1 );
-
-/* Loop round each offset along the curve, converting the normalised offset
- in the range [0,1] to graphics coordinate and storing in PointSet 1. */
- px = x;
- py = y;
- for( i = 0; i < n; i++){
- *(px++) = Map2_x0 + Map2_deltax*dist[ i ];
- *(py++) = Map2_y0 + Map2_deltay*dist[ i ];
- }
-
-/* Map all the positions into physical coordinates. */
- (void) Trans( Map2_plot, NULL, Map2_map, statics->pset1, 1, statics->pset2, 0, method, class, status );
-
-/* Check the physical coordinates for bad values, setting the corresponding
- graphics coordinates bad. */
- for( j = 0; j < Map2_ncoord; j++ ){
- p = statics->ptr2[ j ];
- px = x;
- py = y;
-
- for( i = 0; i < n; i++){
- if( *(p++) == AST__BAD ){
- *(px++) = AST__BAD;
- *(py++) = AST__BAD;
- } else {
- px++;
- py++;
- }
- }
- }
- }
-
-/* Return. */
- return;
-
-}
-
-static void Map3( int n, double *dist, double *x, double *y,
- const char *method, const char *class,
- int *status GLOBALS_ARG ){
-/*
-* Name:
-* Map3
-
-* Purpose:
-* Find graphics coordinates at given distances along a geodesic curve
-* between two physical coordinate positions.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void Map3( int n, double *dist, double *x, double *y,
-* const char *method, const char *class,
-* int *status [,AstGlobals *AST__GLOBALS] )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* The supplied distances are converted into physical offsets along the
-* geodesic curve joining the starting and finishing points given by
-* externals Map3_origin and Map3_end. The physical coordinates at these
-* offsets are found, and transformed into graphics coordinates.
-
-* Parameters:
-* n
-* The number of points to map. Static resources are released but
-* no points are mapped if zero is supplied.
-* dist
-* A pointer to an array holding "n" distances. A "dist" value of
-* zero corresponds to the starting position supplied in external
-* variable Map3_origin. A "dist" value of one corresponds to the
-* finishing position given by Map3_end.
-* x
-* A pointer to an array in which to store the "n" graphics X
-* coordinate values corresponding to the positions in "dist".
-* y
-* A pointer to an array in which to store the "n" graphics Y
-* coordinate values corresponding to the positions in "dist".
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-* AST__GLOBALS
-* Only present if compiled with -DTHREAD_SAFE. It is a pointer to
-* the structure holding the global data for the executing thread.
-* It is passed as a function parameter, rather than being accessed
-* within this function using the astGET_GLOBALS(NULL) macro (as
-* other Object-less functions do) in order to avoid the time
-* overheads of calling astGET_GLOBALS(NULL) . This function is
-* time-critical.
-
-* External Variables:
-* Map3_ncoord = int (Read)
-* The number of axes in the physical coordinate system.
-* Map3_origin = const double * (Read)
-* A pointer to an array holding the physical coordinate value on
-* each axis at the start of the curve (i.e. at dist = 0.0).
-* Map3_end = const double * (Read)
-* A pointer to an array holding the physical coordinate value on
-* each axis at the end of the curve (i.e. at dist = 1.0).
-* Map3_scale = double (Read)
-* The scale factor to convert "dist" values into physical offsets
-* along the geodesic curve.
-* Map3_statics = Map3Statics * (Read and Write)
-* Pointer to a structure holding other static data used by Map3.
-* Map3_plot = AstPlot * (Read)
-* A pointer to the Plot defining the mapping from graphics cordinates
-* to physical coordinates.
-* Map3_map = AstMapping * (Read)
-* A pointer to the mapping from graphics cordinates to physical
-* coordinates extracted from the Plot.
-* Map3_frame = AstFrame * (Read)
-* A pointer to the Current Frame in the Plot.
-
-* Notes:
-* - On the first call, this function allocates static resources which
-* are used by subsequent invocation. These resources should be freed before
-* calling this function with new values for any of the external variables,
-* or when no longer needed, by calling this function with "n" supplied as
-* zero.
-* - If an error has already occurred, this runction returns without
-* action ,except that if "n" is supplied as zero then static resources
-* are released even if an error has already occurred.
-
-*/
-
-/* Local Constants: */
- Map3Statics *statics; /* Pointer to structure holding static data */
- int i, j; /* Loop counts */
-
-/* Convert the global "void *" pointer to a Map3Statics pointer */
- statics = (Map3Statics *) Map3_statics;
-
-/* If zero points were supplied, release static resources and return. */
- if( n == 0 ){
- if( statics ) {
- if( statics->pset1 ) statics->pset1 = astAnnul( statics->pset1 );
- if( statics->pset2 ) statics->pset2 = astAnnul( statics->pset2 );
- if( statics->pos ) statics->pos = (double *) astFree( (void *) statics->pos );
- Map3_statics = astFree( statics );
- }
- return;
- }
-
-/* Otherwise, check the inherited global status. */
- if( !astOK ) return;
-
-/* Create and initialise a structure to hold extra static information if
- this has not already been done. */
- if( !statics ) {
- statics = astMalloc( sizeof( Map3Statics ) );
- if( statics ) {
- statics->pset1 = NULL;
- statics->pset2 = NULL;
- statics->ptr1 = NULL;
- statics->ptr2[ 0 ] = NULL;
- statics->ptr2[ 1 ] = NULL;
- statics->nc = 0;
- statics->nl = 0;
- statics->pos = NULL;
- Map3_statics = statics;
- }
- }
-
-/* If the number of points to be mapped is different to last time,
- set up some PointSets to store the specified number of points. */
- if( n != statics->nl ){
- statics->nl = n;
-
-/* Create a PointSet to hold the physical coordinates corresponding to
- the supplied offsets. First annul any existing PointSet. */
- if( statics->pset1 ) statics->pset1 = astAnnul( statics->pset1 );
- statics->pset1 = astPointSet( n, Map3_ncoord, "", status );
- statics->ptr1 = astGetPoints( statics->pset1 );
-
-/* Create a PointSet to hold the corresponding graphics coordinates.
- The supplied "x" and "y" arrays will be used to store the data
- so we do not need to get pointers to the data using astGetPoints. First
- annul any existing PointSet. */
- if( statics->pset2 ) statics->pset2 = astAnnul( statics->pset2 );
- statics->pset2 = astPointSet( n, 2, "", status );
-
- }
-
-/* If the number of physical axes is different to last time, allocate
- memory to hold a single physical position. */
- if( statics->nc != Map3_ncoord ){
- statics->nc = Map3_ncoord;
- statics->pos = (double *) astMalloc( sizeof(double)*(size_t)Map3_ncoord );
- }
-
-/* Check the initialisation went OK (if done). */
- if( astOK ){
-
-/* Loop round each offset along the curve, converting the normalised offset
- in the range [0,1] to a physical offset, and then into a physical
- position, and store in PointSet 1. */
- for( i = 0; i < n; i++){
- astOffset( Map3_frame, Map3_origin, Map3_end, Map3_scale*dist[ i ],
- statics->pos );
-
- for( j = 0; j < Map3_ncoord; j++ ){
- statics->ptr1[ j ][ i ] = statics->pos[ j ];
- }
-
- }
-
-/* Store pointers to the results arrays in PointSet 2. */
- statics->ptr2[ 0 ] = x;
- statics->ptr2[ 1 ] = y;
- astSetPoints( statics->pset2, statics->ptr2 );
-
-/* Map all the positions into graphics coordinates. */
- (void) Trans( Map3_plot, NULL, Map3_map, statics->pset1, 0, statics->pset2, 1, method, class, status );
- }
-
-/* Return. */
- return;
-
-}
-
-static void Map4( int n, double *dist, double *x, double *y,
- const char *method, const char *class,
- int *status GLOBALS_ARG ){
-/*
-* Name:
-* Map4
-
-* Purpose:
-* Find graphics coordinates at given distances along a user
-* specified curve.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void Map4( int n, double *dist, double *x, double *y,
-* const char *method, const char *class,
-* int *status [,AstGlobals *AST__GLOBALS] )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* The supplied distances are converted into physical coordinates using
-* the Mapping Map4_umap. These physical coordinates are transformed into
-* graphics coordinates.
-
-* Parameters:
-* n
-* The number of points to map. Static resources are released but
-* no points are mapped if zero is supplied.
-* dist
-* A pointer to an array holding "n" distances. A "dist" value of
-* zero corresponds to the starting position supplied in external
-* variable Map3_origin. A "dist" value of one corresponds to the
-* finishing position given by Map3_end.
-* x
-* A pointer to an array in which to store the "n" graphics X
-* coordinate values corresponding to the positions in "dist".
-* y
-* A pointer to an array in which to store the "n" graphics Y
-* coordinate values corresponding to the positions in "dist".
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-* AST__GLOBALS
-* Only present if compiled with -DTHREAD_SAFE. It is a pointer to
-* the structure holding the global data for the executing thread.
-* It is passed as a function parameter, rather than being accessed
-* within this function using the astGET_GLOBALS(NULL) macro (as
-* other Object-less functions do) in order to avoid the time
-* overheads of calling astGET_GLOBALS(NULL) . This function is
-* time-critical.
-
-* External Variables:
-* Map4_ncoord = int (Read)
-* The number of axes in the physical coordinate system.
-* Map4_plot = AstPlot * (Read)
-* A pointer to the Plot defining the mapping from graphics cordinates
-* to physical coordinates.
-* Map4_map = AstMapping * (Read)
-* A pointer to the mapping from graphics cordinates to physical
-* coordinates extracted from the Plot.
-* Map4_statics = Map4Statics * (Read and Write)
-* Pointer to a structure holding other static data used by Map4.
-* Map4_umap = AstMapping * (Read)
-* A pointer to the mapping from distance along the curve to physical
-* coordinates.
-
-* Notes:
-* - On the first call, this function allocates static resources which
-* are used by subsequent invocation. These resources should be freed before
-* calling this function with new values for any of the external variables,
-* or when no longer needed, by calling this function with "n" supplied as
-* zero.
-* - If an error has already occurred, this runction returns without
-* action ,except that if "n" is supplied as zero then static resources
-* are released even if an error has already occurred.
-
-*/
-
-/* Local Variables: */
- Map4Statics *statics; /* Pointer to structure holding static data */
- double *ptr1[ 1 ]; /* Pointer to distances data */
- double *ptr3[ 2 ]; /* Pointers to graphics coord data */
-
-/* Convert the global "void *" pointer to a Map4Statics pointer */
- statics = (Map4Statics *) Map4_statics;
-
-/* If zero points were supplied, release static resources and return. */
- if( n == 0 ){
- if( statics ) {
- if( statics->pset1 ) statics->pset1 = astAnnul( statics->pset1 );
- if( statics->pset2 ) statics->pset2 = astAnnul( statics->pset2 );
- if( statics->pset3 ) statics->pset3 = astAnnul( statics->pset3 );
- Map4_statics = astFree( statics );
- }
- return;
- }
-
-/* Otherwise, check the inherited global status. */
- if( !astOK ) return;
-
-/* Create and initialise a structure to hold extra static information if
- this has not already been done. */
- if( !statics ) {
- statics = astMalloc( sizeof( Map4Statics ) );
- if( statics ) {
- statics->pset1 = NULL;
- statics->pset2 = NULL;
- statics->pset3 = NULL;
- statics->nl = 0;
- Map4_statics = statics;
- }
- }
-
-/* If the number of points to be mapped is different to last time,
- set up some PointSets to store the specified number of points. */
- if( n != statics->nl ){
- statics->nl = n;
-
-/* Create a PointSet to hold the distances along the curve. First annul any
- existing PointSet. */
- if( statics->pset1 ) statics->pset1 = astAnnul( statics->pset1 );
- statics->pset1 = astPointSet( n, 1, "", status );
-
-/* Create a PointSet to hold the physical coordinates corresponding to
- the supplied distances. First annul any existing PointSet. */
- if( statics->pset2 ) statics->pset2 = astAnnul( statics->pset2 );
- statics->pset2 = astPointSet( n, Map4_ncoord, "", status );
-
-/* Create a PointSet to hold the corresponding graphics coordinates.
- First annul any existing PointSet. */
- if( statics->pset3 ) statics->pset3 = astAnnul( statics->pset3 );
- statics->pset3 = astPointSet( n, 2, "", status );
-
- }
-
-/* Check the initialisation went OK (if done). */
- if( astOK ){
-
-/* Use Map4_umap to convert the supplied distances into physical coords
- (i.e. coords in the current Frame of the Plot). */
- ptr1[ 0 ] = dist;
- astSetPoints( statics->pset1, ptr1 );
- (void) astTransform( Map4_umap, statics->pset1, 1, statics->pset2 );
-
-/* Store pointers to the results arrays in PointSet 2. */
- ptr3[ 0 ] = x;
- ptr3[ 1 ] = y;
- astSetPoints( statics->pset3, ptr3 );
-
-/* Now transform these physical coords into graphical coords,
- incorporating clipping. */
- (void) Trans( Map4_plot, NULL, Map4_map, statics->pset2, 0, statics->pset3, 1, method, class, status );
- }
-
-/* Return. */
- return;
-
-}
-
-static void Map5( int n, double *dist, double *x, double *y,
- const char *method, const char *class,
- int *status GLOBALS_ARG ){
-/*
-* Name:
-* Map5
-
-* Purpose:
-* Find graphics coordinates at given distances along the boundary of
-* a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void Map5( int n, double *dist, double *x, double *y,
-* const char *method, const char *class,
-* int *status [,AstGlobals *AST__GLOBALS] )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* The supplied distances are converted into physical coordinates
-* using the Region specified by an external variable, and then
-* these physical coordinates are mapped into graphics coordinates.
-
-* Parameters:
-* n
-* The number of points to map. Static resources are released but
-* no points are mapped if zero is supplied.
-* dist
-* A pointer to an array holding "n" distances. A "dist" value of
-* zero corresponds to the starting position supplied in external
-* variable Map1_origin. A "dist" value of one corresponds to the
-* finishing position which is a distance Map1_length away from
-* Map1_origin, moving in the positive direction of the axis given
-* by Map1_axis. "dist" values can be either linearly or
-* logarithmically related to axis values (see Map1_log).
-* x
-* A pointer to an array in which to store the "n" graphics X
-* coordinate values corresponding to the positions in "dist".
-* y
-* A pointer to an array in which to store the "n" graphics Y
-* coordinate values corresponding to the positions in "dist".
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-* AST__GLOBALS
-* Only present if compiled with -DTHREAD_SAFE. It is a pointer to
-* the structure holding the global data for the executing thread.
-* It is passed as a function parameter, rather than being accessed
-* within this function using the astGET_GLOBALS(NULL) macro (as
-* other Object-less functions do) in order to avoid the time
-* overheads of calling astGET_GLOBALS(NULL) . This function is
-* time-critical.
-
-* External Variables:
-* Map1_log = int (Read)
-* If zero, then "dist" in learly related to axis value. Otherwise
-* it is linearly related to log10(axis value).
-* Map1_ncoord = int (Read)
-* The number of axes in the physical coordinate system.
-* Map1_axis = int (Read)
-* The zero-based index of the axis which the curve follows (i.e.
-* the axis which changes value along the curve).
-* Map1_statics = Map1Statics * (Read and Write)
-* Pointer to a structure holding other static data used by Map1.
-* Map1_origin = const double * (Read)
-* A pointer to an array holding the physical coordinate value on
-* each axis at the start of the curve (i.e. at dist = 0.0).
-* Map1_length = double (Read)
-* The scale factor to convert "dist" values into increments
-* along the physical axis given by Map1_axis.
-* Map1_plot = AstPlot * (Read)
-* A pointer to the Plot defining the mapping from graphics cordinates
-* to physical coordinates.
-* Map1_map = AstMapping * (Read)
-* A pointer to the mapping from graphics cordinates to physical
-* coordinates extracted from the Plot.
-* Map1_frame = AstFrame * (Read)
-* A pointer to the Current Frame in the Plot.
-* Map1_norm = int (Read)
-* A flag indicating if physical coordinate values which are not in
-* the normal ranges of the corresponding axes should be considered
-* bad.
-
-* Notes:
-* - On the first call, this function allocates static resources which
-* are used by subsequent invocation. These resources should be freed before
-* calling this function with new values for any of the external variables,
-* or when no longer needed, by calling this function with "n" supplied as
-* zero.
-* - If an error has already occurred, this runction returns without
-* action ,except that if "n" is supplied as zero then static resources
-* are released even if an error has already occurred.
-
-*/
-
-/* Local Constants: */
- Map5Statics *statics; /* Pointer to structure holding static data */
-
-/* Convert the global "void *" pointer to a Map5Statics pointer */
- statics = (Map5Statics *) Map5_statics;
-
-/* If zero points were supplied, release static resources and return. */
- if( n == 0 ){
- if( statics ) {
- if( statics->pset1 ) statics->pset1 = astAnnul( statics->pset1 );
- if( statics->pset2 ) statics->pset2 = astAnnul( statics->pset2 );
- Map5_statics = astFree( statics );
- }
- return;
- }
-
-/* Otherwise, check the inherited global status. */
- if( !astOK ) return;
-
-/* Create and initialise a structure to hold extra static information if
- this has not already been done. */
- if( !statics ) {
- statics = astMalloc( sizeof( Map3Statics ) );
- if( statics ) {
- statics->pset1 = NULL;
- statics->pset2 = NULL;
- statics->ptr1 = NULL;
- statics->ptr2[ 0 ] = NULL;
- statics->ptr2[ 1 ] = NULL;
- statics->nl = 0;
- Map5_statics = statics;
- }
- }
-
-/* If the number of points to be mapped is different to last time,
- set up some PointSets to store the specified number of points. */
- if( n != statics->nl ){
- statics->nl = n;
-
-/* Create a PointSet to hold the physical coordinates corresponding to
- the supplied offsets. First annul any existing PointSet. */
- if( statics->pset1 ) statics->pset1 = astAnnul( statics->pset1 );
- statics->pset1 = astPointSet( n, Map5_ncoord, "", status );
- statics->ptr1 = astGetPoints( statics->pset1 );
-
-/* Create a PointSet to hold the corresponding graphics coordinates.
- The supplied "x" and "y" arrays will be used to store the data
- so we do not need to get pointers to the data using astGetPoints. First
- annul any existing PointSet. */
- if( statics->pset2 ) statics->pset2 = astAnnul( statics->pset2 );
- statics->pset2 = astPointSet( n, 2, "", status );
- }
-
-/* Get the physical coords at the required positions along the Region
- border. */
- astRegTrace( Map5_region, n, dist, statics->ptr1 );
-
-/* Store pointers to the results arrays in PointSet 2. */
- statics->ptr2[ 0 ] = x;
- statics->ptr2[ 1 ] = y;
- astSetPoints( statics->pset2, statics->ptr2 );
-
-/* Map all the positions into graphics coordinates. */
- (void) Trans( Map5_plot, NULL, Map5_map, statics->pset1, 0,
- statics->pset2, 1, method, class, status );
-
-/* Return. */
- return;
-}
-
-static void Mark( AstPlot *this, int nmark, int ncoord, int indim,
- const double *in, int type, int *status ){
-/*
-*++
-* Name:
-c astMark
-f AST_MARK
-
-* Purpose:
-* Draw a set of markers for a Plot.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "plot.h"
-c void astMark( AstPlot *this, int nmark, int ncoord, int indim,
-c const double *in, int type )
-f CALL AST_MARK( THIS, NMARK, NCOORD, INDIM, IN, TYPE, STATUS )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-c This function draws a set of markers (symbols) at positions
-f This routine draws a set of markers (symbols) at positions
-* specified in the physical coordinate system of a Plot. The
-* positions are transformed into graphical coordinates to
-* determine where the markers should appear within the plotting
-* area.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Plot.
-c nmark
-f NMARK = INTEGER (Given)
-* The number of markers to draw. This may be zero, in which
-* case nothing will be drawn.
-c ncoord
-f NCOORD = INTEGER (Given)
-* The number of coordinates being supplied for each mark
-* (i.e. the number of axes in the current Frame of the Plot, as
-* given by its Naxes attribute).
-c indim
-f INDIM = INTEGER (Given)
-c The number of elements along the second dimension of the "in"
-f The number of elements along the first dimension of the IN
-* array (which contains the marker coordinates). This value is
-* required so that the coordinate values can be correctly
-* located if they do not entirely fill this array. The value
-c given should not be less than "nmark".
-f given should not be less than NMARK.
-c in
-f IN( INDIM, NCOORD ) = DOUBLE PRECISION (Given)
-c The address of the first element of a 2-dimensional array of
-c shape "[ncoord][indim]" giving the
-c physical coordinates of the points where markers are to be
-c drawn. These should be stored such that the value of
-c coordinate number "coord" for input mark number "mark" is
-c found in element "in[coord][mark]".
-f A 2-dimensional array giving the physical coordinates of the
-f points where markers are to be drawn. These should be
-f stored such that the value of coordinate number COORD for
-f input mark number MARK is found in element IN(MARK,COORD).
-c type
-f TYPE = INTEGER (Given)
-* A value specifying the type (e.g. shape) of marker to be
-* drawn. The set of values which may be used (and the shapes
-* that will result) is determined by the underlying graphics
-* system.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - Markers are not drawn at positions which have any coordinate
-* equal to the value AST__BAD (or where the transformation into
-* graphical coordinates yields coordinates containing the value
-* AST__BAD).
-c - If any marker position is clipped (see astClip), then the
-f - If any marker position is clipped (see AST_CLIP), then the
-* entire marker is not drawn.
-* - An error results if the base Frame of the Plot is not 2-dimensional.
-* - An error also results if the transformation between the
-* current and base Frames of the Plot is not defined (i.e. the
-* Plot's TranInverse attribute is zero).
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMapping *mapping; /* Pointer to graphics->physical mapping */
- AstPointSet *pset1; /* PointSet holding physical positions */
- AstPointSet *pset2; /* PointSet holding graphics positions */
- const char *class; /* Object class */
- const char *method; /* Current method */
- const double **ptr1; /* Pointer to physical positions */
- double **ptr2; /* Pointer to graphics positions */
- double *xpd; /* Pointer to next double precision x value */
- double *ypd; /* Pointer to next double precision y value */
- double xx; /* X axis value */
- double yy; /* Y axis value */
- float *x; /* Pointer to single precision x values */
- float *xpf; /* Pointer to next single precision x value */
- float *y; /* Pointer to single precision y values */
- float *ypf; /* Pointer to next single precision y value */
- int axis; /* Axis index */
- int clip; /* Clips marks at plot boundary? */
- int i; /* Loop count */
- int naxes; /* No. of axes in the base Frame */
- int nn; /* Number of good marker positions */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* Store the current method and class for inclusion in error messages
- generated by lower level functions. */
- method = "astMark";
- class = astClass( this );
-
-/* Check the base Frame of the Plot is 2-D. */
- naxes = astGetNin( this );
- if( naxes != 2 && astOK ){
- astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the base "
- "Frame of the supplied %s is invalid - this number should "
- "be 2.", status, method, class, naxes, class );
- }
-
-/* Also validate the input array dimension argument. */
- if ( astOK && ( indim < nmark ) ) {
- astError( AST__DIMIN, "%s(%s): The input array dimension value "
- "(%d) is invalid.", status, method, class, indim );
- astError( AST__DIMIN, "This should not be less than the number of "
- "markers being drawn (%d).", status, nmark );
- }
-
-/* Initialise the bounding box for primatives produced by this call. */
- if( !Boxp_freeze ) {
- Boxp_lbnd[ 0 ] = FLT_MAX;
- Boxp_lbnd[ 1 ] = FLT_MAX;
- Boxp_ubnd[ 0 ] = FLT_MIN;
- Boxp_ubnd[ 1 ] = FLT_MIN;
- }
-
-/* Establish the correct graphical attributes as defined by attributes
- with the supplied Plot. */
- astGrfAttrs( this, AST__MARKS_ID, 1, GRF__MARK, method, class );
-
-/* Create a PointSet to hold the supplied physical coordinates. */
- pset1 = astPointSet( nmark, ncoord, "", status );
-
-/* Allocate memory to hold pointers to the first value on each axis. */
- ptr1 = (const double **) astMalloc( sizeof( const double * )*
- (size_t)( ncoord ));
-
-/* Check the pointer can be used, then store pointers to the first value
- on each axis. */
- if( astOK ){
- for( axis = 0; axis < ncoord; axis++ ){
- ptr1[ axis ] = in + axis*indim;
- }
- }
-
-/* Store these pointers in the PointSet. */
- astSetPoints( pset1, (double **) ptr1 );
-
-/* Transform the supplied data from the current frame (i.e. physical
- coordinates) to the base frame (i.e. graphics coordinates) using
- the inverse Mapping defined by the Plot. */
- mapping = astGetMapping( this, AST__BASE, AST__CURRENT );
- pset2 = Trans( this, NULL, mapping, pset1, 0, NULL, 0, method, class, status );
- mapping = astAnnul( mapping );
-
-/* Get pointers to the graphics coordinates. */
- ptr2 = astGetPoints( pset2 );
-
-/* Allocate memory to hold single precision versions of the graphics
- coordinates. */
- x = (float *) astMalloc( sizeof( float )*(size_t) nmark );
- y = (float *) astMalloc( sizeof( float )*(size_t) nmark );
-
-/* Check the pointers can be used. */
- if( astOK ){
-
-/* Store pointers to the next single and double precision x and y
- values. */
- xpf = x;
- ypf = y;
- xpd = ptr2[ 0 ];
- ypd = ptr2[ 1 ];
-
-/* Convert the double precision values to single precision, rejecting
- any bad marker positions. If clipping is switched on, also clip any
- markers with centres outside the plotting area. */
- clip = astGetClip( this ) & 2;
- nn = 0;
- for( i = 0; i < nmark; i++ ){
- if( *xpd != AST__BAD && *ypd != AST__BAD ){
- xx = *(xpd++);
- yy = *(ypd++);
- if( !clip || ( xx >= this->xlo && xx <= this->xhi &&
- yy >= this->ylo && yy <= this->yhi ) ) {
- nn++;
- *(xpf++) = (float) xx;
- *(ypf++) = (float) yy;
- }
- } else {
- xpd++;
- ypd++;
- }
- }
-
-/* Draw the remaining markers. */
- GMark( this, nn, x, y, type, method, class, status );
-
- }
-
-/* Free the memory used to store single precision graphics coordinates. */
- x = (float *) astFree( (void *) x );
- y = (float *) astFree( (void *) y );
-
-/* Annul the PointSets. */
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
-
-/* Free the memory holding the pointers to the first value on each axis. */
- ptr1 = (const double **) astFree( (void *) ptr1 );
-
-/* Re-establish the original graphical attributes. */
- astGrfAttrs( this, AST__MARKS_ID, 0, GRF__MARK, method, class );
-
-/* Return */
- return;
-}
-
-static void Mirror( AstPlot *this, int axis, int *status ){
-/*
-*+
-* Name:
-* astMirror
-
-* Purpose:
-* Flip a graphics axis of a Plot.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "plot.h"
-* void astMirror( AstPlot *this, int axis )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-* This function referses the direction of a specified graphics axis
-* in the Plot.
-
-* Parameters:
-* this
-* Pointer to a Plot.
-* axis
-* The zero-based axis of the axis to mirror.
-
-*-
-*/
-
-/* Check the global status. */
- if( !astOK ) return;
-
- if( axis == 0 ) {
- this->xrev = ( this->xrev == 0 );
-
- } else if( axis == 1 ){
- this->yrev = ( this->yrev == 0 );
-
- } else {
- astError( AST__INTER, "astMirror(%s): Illegal axis index (%d) "
- "supplied (internal AST programming error).", status,
- astGetClass( this ), axis );
- }
-}
-
-static void Norm1( AstMapping *map, int axis, int nv, double *vals,
- double refval, double width, int *status ){
-/*
-* Name:
-* Norm1
-
-* Purpose:
-* Use a Mapping to normalize an array of axis values.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void Norm1( AstMapping *map, int axis, int nv, double *vals,
-* double refval, double width, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* The normalization of a position in physical space has two parts;
-* firstly, the Mapping may determine a form of normalization;
-* secondly, the Frame may provide an additional normalizion by the
-* astNorm method. This function implements normalization using a
-* Mapping, by transforming the physical position into Graphics position,
-* and then back into a physical position. For instance, if the Mapping
-* represents a mapping of Cartesian graphics axes onto a 2D polar
-* coordinate system, a physical theta value of 3.PI will be normalized by
-* the Mapping into a theta value of 1.PI (probably, but it depends on
-* the Mapping). In this case, the Mapping normalization may well be the
-* only normalization available, since the 2D polar coord. system will
-* probably use a simple Frame to represent the (radius,theta) system,
-* and a simple Frame defines no normalization (i.e. the astNorm method
-* returns the supplied position unchanged).
-*
-* Complications arise though because it is not possible to normalise
-* a single axis value - you can only normalize a complete position.
-* Therefore some value must be supplied for the other axis. We
-* should use the LabelAt value, but we do not yet know what the LabelAt
-* value will be. Instead, we try first using the supplied "refval"
-* which should be close to the mode of the other aixs values. Usually
-* the value used is not very important. However, for some complex
-* projections (such as quad-cubes, TSC, etc) the choice can be more
-* critical since some positions on the ksy correspond to undefined
-* graphics positions (e.g the face edges in a TSC projection).
-* Therefore, if the supplied refval results in any positions being
-* undefined we refine the process by transforming the undefined
-* positaons again using a different refval. We do this twice to bump
-* up the likelihood of finding a suitable reference value.
-
-* Parameters:
-* mapping
-* The Mapping from Graphics Frame to the current Frame.
-* axis
-* The index of the axis for which values are supplied in "vals".
-* nv
-* The number of values supplied in "vals".
-* vals
-* Pointer to an array of axis values. On exit they are normalized.
-* refval
-* The preffered constant value to use for the other axis when
-* normalizing the values in "vals".
-* width
-* The range of used values for the other axis.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstPointSet *pset1; /* PointSet holding physical coords */
- AstPointSet *pset2; /* PointSet holding graphics coords */
- double **ptr1; /* Pointer to physical coords data */
- double *a; /* Pointer to next axis value */
- double *b; /* Pointer to next axis value */
- int i; /* Loop count */
- int itry; /* Loop count for re-try loop */
- int nbad; /* No. of bad values found after transformation */
- int *flags; /* Pointer to flags array */
-
-/* Check the inherited global status. */
- if( !astOK ) return;
-
-/* Store the supplied positions in a PointSet. */
- pset1 = astPointSet( nv, 2, "", status );
- ptr1 = astGetPoints( pset1 );
- if( astOK ) {
- a = ptr1[ axis ];
- b = ptr1[ 1 - axis ];
- for( i = 0; i < nv; i++){
- *(a++) = vals[ i ];
- *(b++) = refval;
- }
- }
-
-/* Transform the supplied positions into the Base Frame. */
- pset2 = astTransform( map, pset1, 0, NULL );
-
-/* Transform the Base Frame positions back into the Current Frame. */
- (void) astTransform( map, pset2, 1, pset1 );
-
-/* Allocate memory to hold a flag for each position which is non-zero if
- we currently have a good axis value to return for the position. */
- flags = (int *) astMalloc( sizeof(int)* (size_t) nv );
-
-/* If good, store these values back in the supplied array. If the
- transformed values are bad, retain the original good values for the
- moment in "vals", and also copy the good values back into pset1. So
- at the end, pset1 will contain the original good values at any points
- which produced bad values after the above transformation - the other
- points in pset1 will be bad. */
- nbad = 0;
- if( astOK ) {
- a = ptr1[ axis ];
- for( i = 0; i < nv; i++, a++ ){
- if( *a != AST__BAD ) {
- vals[ i ] = *a;
- *a = AST__BAD;
- flags[ i ] = 1;
- } else if( vals[ i ] != AST__BAD ) {
- nbad++;
- *a = vals[ i ];
- flags[ i ] = 0;
- } else {
- flags[ i ] = 1;
- }
- }
- }
-
-/* We now try normalising any remaining bad positions using different
- values for the other axis. This may result in some or all of the
- remaining points being normalised succesfully. */
- for( itry = 0; itry < 10; itry++ ) {
-
-/* If the above transformation produced any bad values, try again with a
- different value on the other axis. */
- if( astOK && nbad > 0 ) {
- b = ptr1[ 1 - axis ];
- for( i = 0; i < nv; i++){
- *(b++) = refval + 0.1*( itry + 1 )*width;
- }
-
-/* Transform to graphics coords and back to world coords. */
- (void) astTransform( map, pset1, 0, pset2 );
- (void) astTransform( map, pset2, 1, pset1 );
-
-/* Copy any good positions back into the returned vals array. Count
- remaining bad positions. */
- a = ptr1[ axis ];
- nbad = 0;
- for( i = 0; i < nv; i++, a++ ){
- if( *a != AST__BAD ) {
- vals[ i ] = *a;
- flags[ i ] = 1;
- *a = AST__BAD;
- } else if( !flags[ i ] ) {
- nbad++;
- *a = vals[ i ];
- }
- }
- }
-
-/* If the above transformation produced any bad values, try again with a
- different value on the other axis. */
- if( astOK && nbad > 0 ) {
- b = ptr1[ 1 - axis ];
- for( i = 0; i < nv; i++){
- *(b++) = refval - 0.1*( itry + 1 )*width;
- }
-
-/* Transform to graphics coords and back to world coords. */
- (void) astTransform( map, pset1, 0, pset2 );
- (void) astTransform( map, pset2, 1, pset1 );
-
-/* Copy any good positions back into the returned vals array. Count
- remaining bad positions. */
- a = ptr1[ axis ];
- nbad = 0;
- for( i = 0; i < nv; i++, a++ ){
- if( *a != AST__BAD ) {
- vals[ i ] = *a;
- flags[ i ] = 1;
- *a = AST__BAD;
- } else if( !flags[ i ] ) {
- nbad++;
- *a = vals[ i ];
- }
- }
- }
- }
-
-/* Free resources. */
- flags = (int *) astFree( flags );
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
-
-}
-
-static void Opoly( AstPlot *this, const char *method, const char *class, int *status ){
-/*
-* Name:
-* Opoly
-
-* Purpose:
-* Draws the current poly line.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void Opoly( AstPlot *this, const char *method, const char *class, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function draws the current poly line, and empties the buffer.
-
-* Parameters:
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-
-/* Check the global status. */
- if( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* Draw the poly-line if needed. */
- if( Poly_n > 0 ) {
- GLine( this, Poly_n, Poly_x, Poly_y, method, class, status );
-
-/* Indicate that the poly-line buffer is now empty. */
- Poly_n = 0;
- }
-}
-
-static int Overlap( AstPlot *this, int mode, int esc, const char *text, float x,
- float y, const char *just, float upx, float upy,
- float **work, const char *method, const char *class, int *status ){
-/*
-* Name:
-* Overlap
-
-* Purpose:
-* See if a major tick value label would overlap any of the previously
-* drawn labels.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int Overlap( AstPlot *this, int mode, int esc, const char *text, float x,
-* float y, const char *just, float upx, float upy,
-* float **work, const char *method, const char *class, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* The operation of this function is determined by the "mode" parameter.
-
-* A record is kept of the bounding boxes enclosing all the displayed
-* labels. If the bounding box of the new label defined by the given
-* parameter values would overlap any of the old bounding boxes, 0 is
-* returned. Otherwise 1 is returned and the bounding box for the new
-* label is added to the list of old bounding boxes.
-
-* This function also updates the external variables Box_lbnd and
-* Box_ubnd which hold the lower and upper bounds of the area enclosing
-* all used labels.
-
-* Parameters:
-* this
-* A pointer to the Plot.
-* mode
-* - If -1, find the bounding box of the supplied label, add it
-* to the list of stored bounding box, and return 1 if it overlaps
-* any previously stored bounding boxes.
-* - If -2, leave the bounding boxes unchanged and return the
-* number of bounding boxes currently stored. No other action is taken
-* and all other arguments are ignored.
-* - Otherwise, reset the number of stored bounding boxes to the
-* value of mode, and return the new number of bounding boxes. No
-* action is taken if mode is less than zero or greater than the current
-* number of stored boxes. No other action is taken and all other
-* arguments are ignored.
-* esc
-* Should escape sequences in the text be interpreted?
-* text
-* A pointer to the label text string.
-* x
-* The graphics X coordinate of the label's reference point.
-* y
-* The graphics Y coordinate of the label's reference point.
-* just
-* A character string which specifies the location within the
-* text string which is to be placed at the reference position
-* given by x and y. The first character may be 'T' for "top",
-* 'C' for "centre", or 'B' for "bottom", and specifies the
-* vertical location of the reference position. The second
-* character may be 'L' for "left", 'C' for "centre", or 'R'
-* for "right", and specifies the horizontal location of the
-* reference position. If the string has less than 2 characters
-* then 'C' is used for the missing characters.
-* upx
-* The x component of the up-vector for the text.
-* upy
-* The y component of the up-vector for the text.
-* work
-* A pointer to a place at which to store a pointer to an array of
-* floats holding the old bounding boxes. Memory to hold this array
-* is allocated automatically within this function. The pointer to
-* the array should be supplied as NULL on the first call to this
-* function, and the array should be freed using astFree when no
-* longer needed.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* See parameter "mode."
-
-* Notes:
-* - Zero is returned if an error has occurred, or if this function
-* should fail for any reason.
-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- int nbox = 0; /* Number of boxes stored in "work" */
- int ret; /* Does the new label overlap a previous label? */
- int i; /* Box index */
- float *cx; /* Pointer to next corner's X value */
- float *cy; /* Pointer to next corner's Y value */
- float xbn[ 4 ]; /* X coords at corners of new label's bounding box */
- float ybn[ 4 ]; /* Y coords at corners of new label's bounding box */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* Initialise the returned value to indicate no overlap has been found. */
- ret = 0;
-
-/* Get the number of bounding boxes in the supplied work array. */
- if( work && *work ) {
- nbox = (*work)[ 0 ];
- } else {
- nbox = 0;
- }
-
-/* If required, return the number of bounding boxes currently stored. */
- if( mode == -2 ) return nbox;
-
-/* If required, reset the number of bounding boxes currently stored, and
- return the new number. */
- if( mode >= 0 ) {
- if( mode < nbox && work && *work ) {
- nbox = mode;
- (*work)[ 0 ] = nbox;
- }
- return nbox;
- }
-
-/* If no work array has been supplied, allocate one now with room for
- 10 boxes. Each box requires 8 floats, 2 for each of the 4 corners. The
- X graphics coordinates at the 4 corners are stored in the first 4 floats,
- and the corresponding Y graphics coordinates in the second group of 4
- floats. */
- if( work && !(*work) ) {
- *work = (float *) astMalloc( 81*sizeof(float) );
- if( astOK ) {
- nbox = 0;
- (*work)[ 0 ] = 0;
- }
- }
-
-/* Check the global status. */
- if( !astOK ) return ret;
-
-/* Get the bounds of the box containing the new label. */
- DrawText( this, 0, esc, text, x, y, just, upx, upy,
- xbn, ybn, NULL, method, class, status );
-
-/* If the bounding box was obtained succesfully... */
- if( astOK ) {
-
-/* Check for an overlap between the box and each of the previous boxes. */
- cx = *work + 1;
- cy = cx + 4;
- for( i = 0; i < nbox; i++ ){
-
- if( BoxCheck( xbn, ybn, cx, cy, status ) ) {
- ret = 1;
- break;
- }
-
-/* Increment the pointers to the next box. */
- cx += 8;
- cy += 8;
-
- }
-
-/* If no overlap was found, add the new box to the list. */
- if( !ret ){
- *work = (float *) astGrow( (void *) *work, 8*nbox + 9, sizeof(float) );
- cx = *work + 1 + 8*nbox;
- cy = cx + 4;
- for( i = 0; i < 4; i++ ){
- cx[ i ] = xbn[ i ];
- cy[ i ] = ybn[ i ];
- }
- (*work)[ 0 ]++;
-
-/* Extend the bounds of the global bounding box held externally to include
- the new box. */
- for( i = 0; i < 4; i++ ){
- Box_lbnd[ 0 ] = MIN( xbn[ i ], Box_lbnd[ 0 ] );
- Box_ubnd[ 0 ] = MAX( xbn[ i ], Box_ubnd[ 0 ] );
- Box_lbnd[ 1 ] = MIN( ybn[ i ], Box_lbnd[ 1 ] );
- Box_ubnd[ 1 ] = MAX( ybn[ i ], Box_ubnd[ 1 ] );
- }
- }
- }
-
-/* If an error has occur, return a value of 0. */
- if( !astOK ) ret = 0;
-
-/* Return the answer. */
- return ret;
-
-}
-
-static void PlotLabels( AstPlot *this, int esc, AstFrame *frame, int axis,
- LabelList *list, char *fmt, int nlab, float **box,
- const char *method, const char *class, int *status ) {
-/*
-*
-* Name:
-* PlotLabels
-
-* Purpose:
-* Draws the numerical labels which have been selected for display.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void PlotLabels( AstPlot *this, int esc, AstFrame *frame, int axis,
-* LabelList *list, char *fmt, int nlab, float **box,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function displays the numerical labels supplied in the
-* structure pointed to by "list". Overlapping labels are omitted,
-* and redundant leading fields are removed from adjacent labels.
-* Nothing is plotted if the NumLab attribute for the axis is false.
-
-* Parameters:
-* this
-* A pointer to the Plot.
-* esc
-* Interpret escape sequences in labels?
-* frame
-* A pointer to the current Frame of the Plot.
-* axis
-* The axis index (0 or 1).
-* list
-* A pointer to the LabelList structure holding information about
-* the selected numerical labels.
-* fmt
-* A pointer to a null terminated string holding the format
-* specification used to create the labels.
-* nlab
-* The number of labels described by "list".
-* box
-* A pointer to a place at which to store a pointer to an array of
-* floats holding the bounding boxes of displayed labels. Memory to
-* hold this array is allocated automatically within this function.
-* The pointer to the array should be supplied as NULL on the first
-* call to this function, and the array should be freed using astFree
-* when no longer needed.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- LabelList *ll; /* Pointer to next label structure */
- LabelList *llhi; /* Pointer to higher neighbouring label structure */
- LabelList *lllo; /* Pointer to lower neighbouring label structure */
- char *text; /* Pointer to label text */
- const char *latext; /* Axis label at previous label */
- const char *texthi; /* Pointer to text abbreviated with higher neighbour */
- const char *textlo; /* Pointer to text abbreviated with lower neighbour */
- float tolx; /* Min allowed X interval between labels */
- float toly; /* Min allowed Y interval between labels */
- float xbn[ 4 ]; /* X coords at corners of new label's bounding box */
- float ybn[ 4 ]; /* Y coords at corners of new label's bounding box */
- int abb; /* Abbreviate leading fields? */
- int dp; /* Number of decimal places */
- int found; /* Non-zero digit found? */
- int hilen; /* Length of texthi */
- int i; /* Label index */
- int j; /* Label index offset */
- int jgap; /* Gap in index between rejected labels */
- int lab0; /* Index of middle label */
- int lolen; /* Length of textlo */
- int mxdp; /* Maximum number of decimal places */
- int nbox; /* The number of boinding boxes supplied */
- int nexti; /* Index of next label to retain */
- int nleft; /* No. of labels left */
- int nz; /* Number of trailing zeros in this label */
- int nzmax; /* Max. number of trailing zeros */
- int odd; /* DO we have a strange axis? */
- int olap; /* Any overlap found? */
- int prio; /* Current priority */
- int root; /* Index of unabbreviated label */
- int root_found; /* Has the root label been decided on? */
- int rootoff; /* Distance from middle to root label */
- int split; /* Indicates whether to split labels into 2 lines */
-
-/* Return without action if an error has occurred, or there are no labels to
- draw. */
- if( !astOK || nlab == 0 || !list || !astGetNumLab( this, axis ) ) return;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- rootoff = 0;
-
-/* Get the number of bounding boxes describing the labels already drawn
- (this will be non-zero only if this is the second axis to be labelled). */
- nbox = Overlap( this, -2, 0, NULL, 0.0, 0.0, NULL, 0.0, 0.0, box, method,
- class, status );
-
-/* Ensure the labels are sorted into increasing index order. */
- qsort( (void *) list, (size_t) nlab, sizeof(LabelList), Compare_LL );
-
-/* Complex curves can have multiple edge crossings very close together.
- This means that the same label can sometimes be included more than once
- in the supplied list at the same (x,y) position. Purge duplicate labels
- by setting their priority to -1. Initialise the priority of the remaining
- labels to zero. */
- tolx = 0.02*fabs( this->xhi - this->xlo );
- toly = 0.02*fabs( this->yhi - this->ylo );
- ll = list;
- ll->priority = 0;
- ll->saved_prio = 0;
-
- for( i = 1; i < nlab; i++ ) {
- ll++;
- ll->priority = 0;
- ll->saved_prio = 0;
- for( j = 0; j < i; j++ ){
- if( !strcmp( ll->text, list[ j ].text ) ) {
- if( fabs( ll->x - list[ j ].x ) < tolx &&
- fabs( ll->y - list[ j ].y ) < toly ) {
- ll->priority = -1;
- ll->saved_prio = -1;
- break;
- }
- }
- }
- }
-
-/* Find the maximum number of decimal places in any label. */
- mxdp = 0;
- ll = list - 1;
- for( i = 0; i < nlab; i++ ) {
- ll++;
- FindDPTZ( frame, axis, fmt, ll->text, &dp, &nz, status );
- if( dp > mxdp ) mxdp = dp;
- }
-
-/* Indicate that we do not yet know whether SplitValue should split labels
- into two lines or not. */
- split = 0;
-
-/* Find the highest priority label (the "root" label). This label is
- never abbreviated to remove leading fields, and is never omitted due to
- overlaps with other labels. To find this label, each label is assigned a
- priority equal to the number of trailing zeros in the label text. If the
- text has fewer than the maximum number of decimal places, pretend the text
- is padded with trailing zeros to bring the number of decimal places up to
- the maximum. The root label is the highest priority label, giving
- preference to labels which occur in the middle of the index order. At the
- same time, initialize the abbreviated text for each label to be equal to
- the unabbreviated text. */
- lab0 = nlab/2;
- nzmax = -1;
- ll = list - 1;
- root = -1;
- root_found = 0;
- for( i = 0; i < nlab; i++ ) {
- ll++;
- if( ll->priority > -1 ) {
- text = ll->text;
-
-/* Find the number of decimal places and the number of trailing zeros in
- this label. Note if a non-zero digit was found in the label. */
- found = FindDPTZ( frame, axis, fmt, text, &dp, &nz, status );
-
-/* Add on some extra trailing zeros to make the number of decimal places
- up to the maximum value. */
- nz += mxdp - dp;
-
-/* Store the priority for this label. */
- ll->priority = nz;
- ll->saved_prio = nz;
-
-/* Note the highest priority of any label. */
- if( nz > nzmax ) nzmax = nz;
-
-/* We will use this label as the root label if:
-
- - We have not already found the root label
-
- AND
-
- - It does not overlap any labels drawn for a previous axis
-
- AND
-
- - We do not currently have a candidate root label, or
- - The priority for this label is higher than the priority of the current
- root label, or
- - The priority for this label is equal to the priority of the current
- root label and this label is closer to the centre of the axis, or
- - The label value is zero. */
-
- if( root == -1 ||
- nz > list[ root ].priority ||
- ( nz == list[ root ].priority && abs( i - lab0 ) < rootoff ) ||
- !found ) {
-
- if( !root_found ) {
-
- if( axis == 0 || !Overlap( this, -1, esc,
- SplitValue( this, ll->text,
- axis, &split, status ),
- (float) ll->x, (float) ll->y,
- ll->just, (float) ll->upx,
- (float) ll->upy, box, method,
- class, status ) ) {
- root = i;
- rootoff = abs( i - lab0 );
-
-/* If the label value was zero, we will use label as the root label,
- regardless of the priorities of later labels. */
- if( !found ) root_found = 1;
- }
-
-/* Reset the list of bounding boxes to exclude any box added above. */
- Overlap( this, nbox, esc, NULL, 0.0, 0.0, NULL, 0.0, 0.0, box,
- method, class, status );
-
- }
- }
-
-/* Initialise the abbreviated text to be the same as the full text. */
- ll->atext = ll->text;
- }
- }
-
-/* If all the labels overlapped labels on a previous axis, arbitrarily
- use the middle label as the root label (this should never happen but
- is included to avoid segmentation violations occurring in error
- conditions such as the txExt function being buggy and cuasing spurious
- overlaps). */
- if( root == -1 ) root = nlab/2;
-
-/* Assign a priority higher than any other priority to the root label. */
- list[ root ].priority = nzmax + 1;
- list[ root ].saved_prio = nzmax + 1;
-
-/* See if leading fields are to be abbreviated */
- abb = astGetAbbrev( this, axis );
-
-/* The following process may have removed some labels which define the
- missing fields in neighbouring abbreviated fields, so that the user
- would not be able to tell what value the abbvreviated leading fields
- should have. We therefore loop back and perform the abbreviation
- process again, omitting the removed labels this time. Continue doing
- this until no further labels are removed. */
- jgap = 1;
- olap = 1;
- odd = 0;
- while( olap && !odd ) {
-
-/* We now attempt to abbreviate the remaining labels (i.e. those which
- have not been rejected on an earlier pass through this loop). Labels
- are abbreviated in order of their priority. Higher priority labels are
- abbreviated first (except that the root label, which has the highest
- priority, is never abbreviated). Each label is abbreviated by comparing
- it with the nearest label with a higher priority. */
-
-/* Loop through all the priority values, starting with the highest
- priority (excluding the root label so that the root label is never
- abbreviated), and working downwards to finish with zero priority. */
- prio = nzmax + 1;
- while( prio-- > 0 ) {
-
-/* Look for labels which have the current priority. */
- ll = list - 1;
- for( i = 0; i < nlab; i++ ) {
- ll++;
- if( ll->priority == prio ) {
-
-/* Find the closest label to this one on the high index side which has a
- higher priority. */
- llhi = NULL;
- for( j = i + 1; j < nlab; j++ ) {
- if( list[ j ].priority > prio ) {
- llhi = list + j;
- break;
- }
- }
-
-/* If no higher priority neighbour was found on the high index side,
- use the nearest label with the current priority on the high index side. */
- if( !llhi ) {
- for( j = i + 1; j < nlab; j++ ) {
- if( list[ j ].priority == prio ) {
- llhi = list + j;
- break;
- }
- }
- }
-
-/* Find the closest label to this one on the low index side which has a
- higher priority. */
- lllo = NULL;
- for( j = i - 1; j >= 0; j-- ) {
- if( list[ j ].priority > prio ) {
- lllo = list + j;
- break;
- }
- }
-
-/* If no higher priority neighbour was found on the low index side,
- use the nearest label with the current priority on the low index side. */
- if( !lllo ) {
- for( j = i - 1; j >= 0; j-- ) {
- if( list[ j ].priority == prio ) {
- lllo = list + j;
- break;
- }
- }
- }
-
-/* If we are not abbreviating, use the full text as the abbreviated text.*/
- if( !abb ) {
- ll->atext = ll->text;
-
-/* Otherwise, if only one of these two neighbouring labels was found, we
- abbreviate the current label by comparing it with the one found
- neighbouring label. If they are identical, we use the last field as
- the abbreviated text. */
- } else if( !lllo ) {
- ll->atext = astAbbrev( frame, axis, fmt, llhi->text,
- ll->text );
-
- } else if( !llhi ) {
- ll->atext = astAbbrev( frame, axis, fmt, lllo->text,
- ll->text );
-
-/* If two neighbouring labels were found, we abbreviate the current label
- by comparing it with both neighbouring labels, and choosing the shorter
- abbreviation. */
- } else {
- textlo = abb ? astAbbrev( frame, axis, fmt, lllo->text,
- ll->text ) : ll->text;
- texthi = abb ? astAbbrev( frame, axis, fmt, llhi->text,
- ll->text ) : ll->text;
-
- lolen = strlen( textlo );
- hilen = strlen( texthi );
- if( lolen > 0 && lolen < hilen ) {
- ll->atext = textlo;
- } else {
- ll->atext = texthi;
- }
- }
-
-/* If the two fields are identical, the abbreviated text returned by
- astAbbrev will be a null string. In this case, find the start of the
- last field in the formatted value (using astAbbrev again), and use
- that as the abbreviated text. */
- if( !(ll->atext)[0] ) {
- ll->atext = astAbbrev( frame, axis, fmt, NULL, ll->text );
- }
- }
- }
- }
-
-/* Find the bounding box of the root label and add it to the list of bounding
- boxes. */
- nleft = 1;
- ll = list + root;
- olap = Overlap( this, -1, esc,
- SplitValue( this, ll->atext, axis, &split, status ),
- (float) ll->x, (float) ll->y, ll->just, (float) ll->upx,
- (float) ll->upy, box, method, class, status );
-
-/* Now look for labels which would overlap. First, check labels above the root
- label. Do not count overlaps where the two abbreviated labels have the same text. */
- ll = list + root;
- latext = ll->atext;
- for( i = root + 1; i < nlab; i++ ) {
- ll++;
- if( ll->priority >= 0 ) {
- if( strcmp( ll->atext, latext ) ) {
- if( Overlap( this, -1, esc,
- SplitValue( this, ll->atext, axis, &split, status ),
- (float) ll->x, (float) ll->y, ll->just,
- (float) ll->upx, (float) ll->upy, box, method,
- class, status ) ){
- olap++;
- } else {
- nleft++;
- }
- }
- latext = ll->atext;
- }
- }
-
-/* Now check the labels below the root label. */
- ll = list + root;
- latext = ll->atext;
- for( i = root - 1; i >= 0; i-- ) {
- ll--;
- if( ll->priority >= 0 ) {
- if( strcmp( ll->atext, latext ) ) {
- if( Overlap( this, -1, esc,
- SplitValue( this, ll->atext, axis, &split, status ),
- (float) ll->x, (float) ll->y, ll->just,
- (float) ll->upx, (float) ll->upy, box, method,
- class, status ) ){
- olap++;
- } else {
- nleft++;
- }
- }
- latext = ll->atext;
- }
- }
-
-/* If only one overlap was found, and this is the second axis, ignore it
- since it is probably caused by the crossing of the two axes. */
- if( axis == 1 && olap == 1 ) olap = 0;
-
-/* If we are now only plotting every 3rd label, or if there are less than
- 3 labels left, and there are still overlapping labels, then we must have
- a very odd axis (such as logarithmically spaced ticks on a linearly mapped
- axis). In this case, we will re-instate the orignal label priorities and
- then leave this loop so that we attempt to plot all labels. Also retain
- original priorities if the axis is mapped logarithmically onto the
- screen. */
- if( olap && ( jgap == 3 || nleft < 3 || astGetLogPlot( this, axis ) ) ){
- jgap = 0;
- odd = 1;
- } else {
- odd = 0;
- }
-
-/* If any labels overlapped, re-instate the priority of all previously
- excluded labels (using the copy of the label's real priority stored in
- "saved_prio"), and then remove labels (by setting their priorities
- negative) to increase the gap between labels, and try again. */
- if( olap ) {
- jgap++;
-
- nexti = root + jgap;
- for( i = root + 1; i < nlab; i++ ) {
- if( i == nexti ) {
- nexti += jgap;
- list[ i ].priority = list[ i ].saved_prio;
- } else {
- list[ i ].priority = -1;
- }
- }
-
- nexti = root - jgap;
- for( i = root - 1; i >= 0; i-- ) {
- if( i == nexti ) {
- nexti -= jgap;
- list[ i ].priority = list[ i ].saved_prio;
- } else {
- list[ i ].priority = -1;
- }
- }
-
-/* Reset the abbreviated text to be the full text. */
- for( i = 0; i < nlab - 1; i++ ) list[ i ].atext = list[ i ].text;
-
- }
-
-/* Rest the list of bounding boxes to exclude the boxes added above. */
- Overlap( this, nbox, esc, NULL, 0.0, 0.0, NULL, 0.0, 0.0, box, method,
- class, status );
- }
-
-/* We can now draw the abbreviated labels (ignoring rejected labels). */
- ll = list-1;
- for( i = 0; i < nlab; i++ ) {
- ll++;
- if( ll->priority >= 0 ) {
-
-/* Check that this label does not overlap any labels drawn for previous
- axes (we know from the above processing that it will not overlap any
- other label on the current axis). */
- if( !Overlap( this, -1, esc,
- SplitValue( this, ll->atext, axis, &split, status ),
- (float) ll->x, (float) ll->y, ll->just, (float) ll->upx,
- (float) ll->upy, box, method, class, status ) ) {
-
-/* Draw the abbreviated label text, and get the bounds of the box containing
- the new label, splitting long formatted values (such as produced by
- TimeFrames) into two lines. */
- DrawText( this, 1, esc,
- SplitValue( this, ll->atext, axis, &split, status ),
- (float) ll->x, (float) ll->y, ll->just, (float) ll->upx,
- (float) ll->upy, xbn, ybn, NULL, method, class, status );
- }
- }
- }
-}
-
-static void PolyCurve( AstPlot *this, int npoint, int ncoord, int indim,
- const double *in, int *status ){
-/*
-*++
-* Name:
-c astPolyCurve
-f AST_POLYCURVE
-
-* Purpose:
-* Draw a series of connected geodesic curves.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "plot.h"
-c void astPolyCurve( AstPlot *this, int npoint, int ncoord, int indim,
-c const double *in )
-f CALL AST_POLYCURVE( THIS, NPOINT, NCOORD, INDIM, IN, STATUS )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-c This function joins a series of points specified in the physical
-c coordinate system of a Plot by drawing a sequence of geodesic
-c curves. It is equivalent to making repeated use of the astCurve
-c function (q.v.), except that astPolyCurve will generally be more
-c efficient when drawing many geodesic curves end-to-end. A
-c typical application of this might be in drawing contour lines.
-f This routine joins a series of points specified in the physical
-f coordinate system of a Plot by drawing a sequence of geodesic
-f curves. It is equivalent to making repeated calls to the
-f AST_CURVE routine (q.v.), except that AST_POLYCURVE will
-f generally be more efficient when drawing many geodesic curves
-f end-to-end. A typical application of this might be in drawing
-f contour lines.
-*
-c As with astCurve, full account is taken of the Mapping between
-c physical and graphical coordinate systems. This includes any
-c discontinuities and clipping established using astClip.
-f As with AST_CURVE, full account is taken of the Mapping between
-f physical and graphical coordinate systems. This includes any
-f discontinuities and clipping established using AST_CLIP.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Plot.
-c npoint
-f NPOINT = INTEGER (Given)
-* The number of points between which geodesic curves are to be drawn.
-c ncoord
-f NCOORD = INTEGER (Given)
-* The number of coordinates being supplied for each point (i.e.
-* the number of axes in the current Frame of the Plot, as given
-* by its Naxes attribute).
-c indim
-f INDIM = INTEGER (Given)
-c The number of elements along the second dimension of the "in"
-f The number of elements along the first dimension of the IN
-* array (which contains the input coordinates). This value is
-* required so that the coordinate values can be correctly
-* located if they do not entirely fill this array. The value
-c given should not be less than "npoint".
-f given should not be less than NPOINT.
-c in
-f IN( INDIM, NCOORD ) = DOUBLE PRECISION (Given)
-c The address of the first element in a 2-dimensional array of shape
-c "[ncoord][indim]" giving the
-c physical coordinates of the points which are to be joined in
-c sequence by geodesic curves. These should be stored such that
-c the value of coordinate number "coord" for point number
-c "point" is found in element "in[coord][point]".
-f A 2-dimensional array giving the physical coordinates of the
-f points which are to be joined in sequence by geodesic
-f curves. These should be stored such that the value of
-f coordinate number COORD for input point number POINT is found
-f in element IN(POINT,COORD).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - No curve is drawn on either side of any point which has any
-* coordinate equal to the value AST__BAD.
-* - An error results if the base Frame of the Plot is not
-* 2-dimensional.
-* - An error also results if the transformation between the
-* current and base Frames of the Plot is not defined (i.e. the
-* Plot's TranInverse attribute is zero).
-*--
-*/
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- const char *class; /* Object class */
- const char *method; /* Current method */
- const double **in_ptr; /* Pointer to array of data pointers */
- double *finish; /* Pointer to array holding segment end position */
- double *start; /* Pointer to array holding segment start position */
- double d[ CRV_NPNT ]; /* Offsets to evenly spaced points along curve */
- double tol; /* Absolute tolerance value */
- double x[ CRV_NPNT ]; /* X coords at evenly spaced points along curve */
- double y[ CRV_NPNT ]; /* Y coords at evenly spaced points along curve */
- int coord; /* Loop counter for coordinates */
- int i; /* Loop count */
- int naxes; /* No. of Frame axes */
- int ok; /* Are all start and end coords good? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* Store the current method, and the class of the supplied object for use
- in error messages.*/
- method = "astPolyCurve";
- class = astGetClass( this );
-
-/* Check the base Frame of the Plot is 2-D. */
- naxes = astGetNin( this );
- if( naxes != 2 && astOK ){
- astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the base "
- "Frame of the supplied %s is invalid - this number should "
- "be 2.", status, method, class, naxes, class );
- }
-
-/* Initialise the bounding box for primatives produced by this call. */
- if( !Boxp_freeze ) {
- Boxp_lbnd[ 0 ] = FLT_MAX;
- Boxp_lbnd[ 1 ] = FLT_MAX;
- Boxp_ubnd[ 0 ] = FLT_MIN;
- Boxp_ubnd[ 1 ] = FLT_MIN;
- }
-
-/* Check the current Frame of the Plot has ncoord axes. */
- naxes = astGetNout( this );
- if( naxes != ncoord && astOK ){
- astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the current "
- "Frame of the supplied %s is invalid - this number should "
- "be %d (possible programming error).", status, method, class, naxes,
- class, ncoord );
- }
-
-/* Check the array dimension argument. */
- if ( astOK && ( indim < npoint ) ) {
- astError( AST__DIMIN, "%s(%s): The array dimension value "
- "(%d) is invalid.", status, method, class, indim );
- astError( AST__DIMIN, "This should not be less than the number of "
- "points being drawn (%d).", status, npoint );
- }
-
-/* Allocate memory to hold the array of data pointers, the start position,
- and the end position. */
- if ( astOK ) {
- in_ptr = (const double **) astMalloc( sizeof( const double * ) *
- (size_t) ncoord );
- start = (double *) astMalloc( sizeof( double ) * (size_t) ncoord );
- finish = (double *) astMalloc( sizeof( double ) * (size_t) ncoord );
-
-/* Set up externals used to communicate with the Map3 function...
- The number of axes in the physical coordinate system (i.e. the current
- Frame). */
- Map3_ncoord = ncoord;
-
-/* A pointer to the Plot, the Current Frame, and and Mapping. */
- Map3_plot = this;
- Map3_frame = astGetFrame( this, AST__CURRENT );
- Map3_map = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Convert the tolerance from relative to absolute graphics coordinates. */
- tol = astGetTol( this )*MAX( this->xhi - this->xlo,
- this->yhi - this->ylo );
-
-/* Now set up the external variables used by the Crv and CrvLine function. */
- Crv_scerr = ( astGetLogPlot( this, 0 ) ||
- astGetLogPlot( this, 1 ) ) ? 100.0 : 1.5;
- Crv_tol = tol;
- Crv_limit = 0.5*tol*tol;
- Crv_map = Map3;
- Crv_ink = 1;
- Crv_xlo = this->xlo;
- Crv_xhi = this->xhi;
- Crv_ylo = this->ylo;
- Crv_yhi = this->yhi;
- Crv_clip = astGetClip( this ) & 1;
-
-/* Set up a list of points spread evenly over each curve segment. */
- for( i = 0; i < CRV_NPNT; i++ ){
- d[ i ] = ( (double) i)/( (double) CRV_NSEG );
- }
-
-/* Initialise the data pointers to locate the coordinate data in
- the "in" array. */
- if ( astOK ) {
- for ( coord = 0; coord < ncoord; coord++ ) {
- in_ptr[ coord ] = in + coord * indim;
- }
-
-/* Establish the correct graphical attributes as defined by attributes
- with the supplied Plot. */
- astGrfAttrs( this, AST__CURVE_ID, 1, GRF__LINE, method, class );
-
-/* Loop round each curve segment. */
- for( i = 1 ; i < npoint; i++ ) {
-
-/* Store the start position and check it for bad values. Increment the
- pointers to the next position on each axis, so that they refer to the
- finish point of the current curve segment. */
- ok = 1;
- for( coord = 0; coord < ncoord; coord++ ) {
- if( *( in_ptr[coord] ) == AST__BAD ){
- ok = 0;
- } else {
- start[ coord ] = *( in_ptr[coord] );
- }
- ( in_ptr[coord] )++;
- }
-
-/* Store the end position and check it for bad values. Do not increment
- the axis pointers. This means that they will refer to the start position
- of the next curve segment on the next pass through this loop. */
- for( coord = 0; coord < ncoord; coord++ ) {
- if( *( in_ptr[coord] ) == AST__BAD ){
- ok = 0;
- } else {
- finish[ coord ] = *( in_ptr[coord] );
- }
- }
-
-/* Pass on to the next curve segment if either the start or finish position
- was bad. */
- if( ok ) {
-
-/* Set up the remaining externals used to communicate with the Map3
- function... */
-
-/* The physical coordinates at the start of the curve. */
- Map3_origin = start;
-
-/* The physical coordinates at the end of the curve. */
- Map3_end = finish;
-
-/* The scale factor to convert "dist" values into physical offset values. */
- Map3_scale = astDistance( Map3_frame, start, finish );
-
-/* Now set up the remaining external variables used by the Crv and CrvLine
- function. */
- Crv_ux0 = AST__BAD;
- Crv_out = 1;
- Crv_xbrk = Curve_data.xbrk;
- Crv_ybrk = Curve_data.ybrk;
- Crv_vxbrk = Curve_data.vxbrk;
- Crv_vybrk = Curve_data.vybrk;
-
-/* Map the evenly spread distances between "start" and "finish" into graphics
- coordinates. */
- Map3( CRV_NPNT, d, x, y, method, class, status GLOBALS_NAME );
-
-/* Use Crv and Map3 to draw the curve segment. */
- Crv( this, d, x, y, 0, NULL, NULL, method, class, status );
-
-/* If no part of the curve could be drawn, set the number of breaks and the
- length of the drawn curve to zero. */
- if( Crv_out ) {
- Crv_nbrk = 0;
- Crv_len = 0.0F;
-
-/* Otherwise, add an extra break to the returned structure at the position of
- the last point to be plotted. */
- } else {
- Crv_nbrk++;
- if( Crv_nbrk > AST__PLOT_CRV_MXBRK ){
- astError( AST__CVBRK, "%s(%s): Number of breaks in curve "
- "exceeds %d.", status, method, class, AST__PLOT_CRV_MXBRK );
- } else {
- *(Crv_xbrk++) = (float) Crv_xl;
- *(Crv_ybrk++) = (float) Crv_yl;
- *(Crv_vxbrk++) = (float) -Crv_vxl;
- *(Crv_vybrk++) = (float) -Crv_vyl;
- }
- }
-
-/* Store extra information about the curve in the returned structure, and
- purge any zero length sections. */
- Curve_data.length = Crv_len;
- Curve_data.out = Crv_out;
- Curve_data.nbrk = Crv_nbrk;
- PurgeCdata( &Curve_data, status );
- }
- }
-
-/* End the last poly line. */
- Opoly( this, method, class, status );
-
-/* Tidy up the static data used by Map3. */
- Map3( 0, NULL, NULL, NULL, method, class, status GLOBALS_NAME );
-
-/* Re-establish the original graphical attributes. */
- astGrfAttrs( this, AST__CURVE_ID, 0, GRF__LINE, method, class );
-
- }
-
-/* Annul the Frame and Mapping. */
- Map3_frame = astAnnul( Map3_frame );
- Map3_map = astAnnul( Map3_map );
-
-/* Free the memory used for the data pointers, and start and end positions. */
- in_ptr = (const double **) astFree( (void *) in_ptr );
- start = (double *) astFree( (void *) start );
- finish = (double *) astFree( (void *) finish );
- }
-
-/* Return. */
- return;
-
-}
-
-static int PopGat( AstPlot *this, float *rise, const char *method,
- const char *class, int *status ) {
-/*
-* Name:
-* PopGat
-
-* Purpose:
-* Pop current graphical attributes for text from a stack.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int PopGat( AstPlot *this, float *rise, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function restores the current graphical attributes for text
-* from the values on a stack. Current attributes are left unchanged if
-* the stack is empty.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* rise
-* Pointer to a location at which to return thhe height of the baseline
-* above the normal baseline, expressed as a percentage of the normal
-* character height.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Returns zero if the stack is empty, and 1 otherwise.
-
-*/
-
-/* Local Variables: */
- AstGat *gat;
- int result;
-
-/* Initialise */
- result = 0;
-
-/* Check inherited status */
- if( !astOK ) return result;
-
-/* Check there is at least one AstGat structure on the stack. */
- if( this->ngat ) {
-
-/* Decrement the number of entries in the stack, and get a pointer to the
- AstGat structure. Nullify the pointer on the stack. */
- gat = (this->gat)[ --(this->ngat) ];
- (this->gat)[ this->ngat ] = NULL;
-
-/* Restore the values in the AstGat structure */
- *rise = gat->rise;
- GAttr( this, GRF__SIZE, gat->size, NULL, GRF__TEXT, method, class, status );
- GAttr( this, GRF__WIDTH, gat->width, NULL, GRF__TEXT, method, class, status );
- GAttr( this, GRF__COLOUR, gat->col, NULL, GRF__TEXT, method, class, status );
- GAttr( this, GRF__FONT, gat->font, NULL, GRF__TEXT, method, class, status );
- GAttr( this, GRF__STYLE, gat->style, NULL, GRF__TEXT, method, class, status );
-
-/* Free the AstGat structure. */
- gat = astFree( gat );
-
-/* Indicate success.*/
- result = 1;
- }
-
-/* Return the result. */
- return result;
-
-}
-
-
-static void PushGat( AstPlot *this, float rise, const char *method,
- const char *class, int *status ) {
-/*
-* Name:
-* PushGat
-
-* Purpose:
-* Push current graphical attributes for text onto a stack.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void PushGat( AstPlot *this, float rise, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function stores the current graphical attributes for text
-* on a stack.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* rise
-* The height of the baseline above the normal baseline, expressed
-* as a percentage of the normal character height.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstGat *new_gat;
-
-/* Check inherited status */
- if( !astOK ) return;
-
-/* Allocate memory for a new AstGat structure to store the graphical
- attributes. */
- new_gat = astMalloc( sizeof( AstGat ) );
- if( astOK ) {
-
-/* Store the height of the current baseline above the normal baseline,
- expressed as a percentage of a normal character height. */
- new_gat->rise = rise;
-
-/* Store the current graphical attribute values. */
- GAttr( this, GRF__SIZE, AST__BAD, &(new_gat->size), GRF__TEXT, method, class, status );
- GAttr( this, GRF__WIDTH, AST__BAD, &(new_gat->width), GRF__TEXT, method, class, status );
- GAttr( this, GRF__FONT, AST__BAD, &(new_gat->font), GRF__TEXT, method, class, status );
- GAttr( this, GRF__STYLE, AST__BAD, &(new_gat->style), GRF__TEXT, method, class, status );
- GAttr( this, GRF__COLOUR, AST__BAD, &(new_gat->col), GRF__TEXT, method, class, status );
-
-/* Increment the number of AstGat structures on the stack.*/
- this->ngat++;
-
-/* Extend the array of AstGat pointers in the Plot structure so that there
- is room for the new one. */
- this->gat = (AstGat **) astGrow( this->gat, this->ngat, sizeof( AstGat * ) );
- if( astOK ) {
-
-/* Store the new pointer. */
- (this->gat)[ this->ngat - 1 ] = new_gat;
-
- }
- }
-}
-
-static int RegionOutline( AstPlot *this, AstFrame *frm, const char *method,
- const char *class, int *status ){
-/*
-*
-* Name:
-* RegionOutline
-
-* Purpose:
-* Draw the outline of a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int RegionOutline( AstPlot *this, AstFrame *frm, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* If the current Frame in the supplied Plot is a Region, this function
-* draws a curve marking the outline of the Region. It returns without
-* action otherwise.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* frm
-* Pointer to the current Frame in the Plot (possibly a Region).
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if and only if a Region outline was drawn.
-
-*/
-
-/* Local Variables: */
- AstMapping *map; /* Mapping with Region masking included */
- AstPlotCurveData cdata; /* Stores information about curve breaks */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- double d[ CRV_NPNT ]; /* Offsets to evenly spaced points along curve */
- double tol; /* Absolute tolerance value */
- double x[ CRV_NPNT ]; /* X coords at evenly spaced points along curve */
- double y[ CRV_NPNT ]; /* Y coords at evenly spaced points along curve */
- int i; /* Loop count */
- int result; /* The returned value */
-
-/* Initialise */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* Check the current Frame is a Region, and is of a class that implements
- the astRegTrace method. */
- if( astIsARegion( frm ) &&
- astRegTrace( (AstRegion *) frm, 0, NULL, NULL ) ){
-
-/* Set up the externals used to communicate with the Map5 function...
- The number of axes in the physical coordinate system (i.e. the
- Region). */
- Map5_ncoord = astGetNaxes( frm );
-
-/* A pointer to the Plot, the Region, and the Mapping. */
- Map5_plot = this;
- Map5_region = (AstRegion *) frm;
-
-/* Also store a pointer to the Mapping, ensuring that the Mapping does
- not contain any masking effects from the Region. */
- map = astGetMapping( this, AST__BASE, AST__CURRENT );
- Map5_map = astRemoveRegions( map );
- map = astAnnul( map );
-
-/* Convert the tolerance from relative to absolute graphics coordinates. */
- tol = astGetTol( this )*MAX( this->xhi - this->xlo,
- this->yhi - this->ylo );
-
-/* Now set up the external variables used by the Crv and CrvLine function. */
- Crv_scerr = ( astGetLogPlot( this, 0 ) ||
- astGetLogPlot( this, 1 ) ) ? 100.0 : 1.5;
- Crv_ux0 = AST__BAD;
- Crv_tol = tol;
- Crv_limit = 0.5*tol*tol;
- Crv_map = Map5;
- Crv_ink = 1;
- Crv_xlo = this->xlo;
- Crv_xhi = this->xhi;
- Crv_ylo = this->ylo;
- Crv_yhi = this->yhi;
- Crv_out = 1;
- Crv_xbrk = cdata.xbrk;
- Crv_ybrk = cdata.ybrk;
- Crv_vxbrk = cdata.vxbrk;
- Crv_vybrk = cdata.vybrk;
- Crv_clip = astGetClip( this ) & 1;
-
-/* Set up a list of points spread evenly over the curve. */
- for( i = 0; i < CRV_NPNT; i++ ){
- d[ i ] = ( (double) i)/( (double) CRV_NSEG );
- }
-
-/* Map these points into graphics coordinates. */
- Map5( CRV_NPNT, d, x, y, method, class, status GLOBALS_NAME );
-
-/* Use Crv and Map5 to draw the curve. */
- Crv( this, d, x, y, 0, NULL, NULL, method, class, status );
-
-/* End the current poly line. */
- Opoly( this, method, class, status );
-
-/* Tidy up the static data used by Map5. */
- Map5( 0, NULL, NULL, NULL, method, class, status GLOBALS_NAME );
-
-/* Annul the Mapping. */
- Map5_map = astAnnul( Map5_map );
-
-/* Indicate the outline was drawn. */
- result = 1;
- }
-
-/* Return. */
- return result;
-}
-
-static void RemoveFrame( AstFrameSet *this_fset, int iframe, int *status ) {
-/*
-* Name:
-* RemoveFrame
-
-* Purpose:
-* Remove a Frame from a Plot.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-* #include "plot.h"
-* void RemoveFrame( AstFrameSet *this_fset, int iframe, int *status )
-
-* Class Membership:
-* Plot member function (over-rides the astRemoveFrame public
-* method inherited from the FrameSet class).
-
-* Description:
-* This function removes a Frame from a Plot. All other Frames
-* in the Plot have their indices re-numbered from one (if
-* necessary), but are otherwise unchanged.
-*
-* If the index of the clipping Frame is changed, the index value
-* stored in the Plot is updated. If the clipping Frame itself is
-* removed, all clipping information is removed from the Plot.
-
-* Parameters:
-* this_fset
-* Pointer to the FrameSet component of the Plot.
-* iframe
-* The index within the Plot of the Frame to be removed.
-* This value should lie in the range from 1 to the number of
-* Frames in the Plot (as given by its Nframe attribute).
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstPlot *this; /* Pointer to Plot structure */
- int ifrm; /* Validated frame index */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Plot structure. */
- this = (AstPlot *) this_fset;
-
-/* Validate the frame index. */
- ifrm = astValidateFrameIndex( this_fset, iframe, "astRemoveFrame" );
-
-/* Invoke the parent astRemoveFrame method to remove the Frame. */
- (*parent_removeframe)( this_fset, iframe, status );
-
-/* If the index of the removed Frame is smaller than the clipping Frame
- index, then decrement the clipping Frame index so that the same Frame
- will be used in future. */
- if( astOK ){
- if( ifrm < this->clip_frame ){
- (this->clip_frame)--;
-
-/* If the clipping fgrame itself has been removed, indicate that no
- clipping should nbow be performed. */
- } else if( ifrm == this->clip_frame ){
- astClip( this, AST__NOFRAME, NULL, NULL );
- }
- }
-}
-
-static void RightVector( AstPlot *this, float *ux, float *uy, float *rx,
- float *ry, const char *method, const char *class, int *status ){
-/*
-* Name:
-* RightVector
-
-* Purpose:
-* Return a vector in the direction of the base line of normal text.
-
-* Synopsis:
-* #include "plot.h"
-* void RightVector( AstPlot *this, float *ux, float *uy, float *rx,
-* float *ry, const char *method, const char *class, int *status )
-
-* Description:
-* This function returns a vector which points from left to right along
-* the text baseline, taking account of any difference in the scales of
-* the x and y axes. It also scales the supplied up vector so that it has
-* a length equal to the height of normal text, and scales the returned
-* right vector to have the same length (on the screen) as the up vector.
-
-* Parameters:
-* this
-* The plot.
-* ux
-* Pointer to a float holding the x component of the up-vector for the
-* text, in graphics coords. Scaled on exit so that the up vector has
-* length equal to the height of normal text.
-* uy
-* Pointer to a float holding the y component of the up-vector for the
-* text, in graphics coords. Scaled on exit so that the up vector has
-* length equal to the height of normal text.
-* rx
-* Pointer to a double in which will be put the x component of a
-* vector parallel to the baseline of normal text.
-* ry
-* Pointer to a double in which will be put the y component of a
-* vector parallel to the baseline of normal text.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-
-/* Local Variables: */
- float alpha; /* Scale factor for X axis */
- float beta; /* Scale factor for Y axis */
- float chv;
- float chh;
- float l; /* Normalisation constant */
- float a;
- float b;
- float nl; /* Character height in standard coordinates */
-
-/* Check inherited status */
- if( !astOK ) return;
-
-/* Find the scale factors for the two axes which scale graphics coordinates
- into a "standard" coordinate system in which: 1) the axes have equal scale
- in terms of (for instance) millimetres per unit distance, 2) X values
- increase from left to right, 3) Y values increase from bottom to top.
- If the grf moduleis not capable of giving us this information, then
- just assume the the axes are equally scaled, except for any axis
- reversal indicated in the supplied Plot. */
- if( GCap( this, GRF__SCALES, 1, status ) ) {
- GScales( this, &alpha, &beta, method, class, status );
- } else {
- alpha = ( this->xrev ) ? -1.0 : 1.0;
- beta = ( this->yrev ) ? -1.0 : 1.0;
- }
-
-/* Convert the up-vector into "standard" system in which the axes have
- equal scales, and increase left-to-right, bottom-to-top. */
- *ux *= alpha;
- *uy *= beta;
-
-/* Normalise this up-vector. */
- l = sqrt( (*ux)*(*ux) + (*uy)*(*uy) );
- if( l <= 0.0 ) {
- *ux = 0.0;
- *uy = 1.0;
- } else {
- *ux /= l;
- *uy /= l;
- }
-
-/* Find the height in "standard" coordinates of "normal" text draw with the
- requested up-vector. */
- GQch( this, &chv, &chh, method, class, status );
- a = (*ux)/(chv*alpha);
- b = (*uy)/(chh*beta);
- nl = 1.0/sqrt( a*a + b*b );
-
-/* Scale the up-vector so that is has length equal to the height of "normal"
- text with the specified up-vector. */
- *ux *= nl;
- *uy *= nl;
-
-/* Get the vector along the base-line of the text, by rotating the
- up-vector by 90 degrees clockwise. */
- *rx = *uy;
- *ry = -*ux;
-
-/* Convert both vectors back from standard coords to normal world coords */
- *ux /= alpha;
- *uy /= beta;
- *rx /= alpha;
- *ry /= beta;
-
-}
-
-static void SaveTick( AstPlot *this, int axis, double gx, double gy,
- int major, int *status ){
-/*
-* Name:
-* SaveTick
-
-* Purpose:
-* Save info about a drawn tick in the Plot structure.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void SaveTick( AstPlot *this, int axis, double gx, double gy,
-* int major, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function stores the start position and type of each drawn
-* tick in the given Plot.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* axis
-* The zero-based axis index to which the tick refers. If a
-* negative value is specified then all information about drawn ticks
-* curently stored in the Plot is erased.
-* gx
-* The graphics X position at the start of the tick mark.
-* gy
-* The graphics Y position at the start of the tick mark.
-* major
-* Non-zero if the tick mark is a major tick.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- int i;
- int *count;
- double *tickgx;
- double *tickgy;
-
-/* Free the tick info in the supplied Plot if required. Do this before
- checking the error status. */
- if( axis < 0 ) {
- for( i = 0; i < 3; i++ ) {
- this->majtickgx[ i ] = astFree( this->majtickgx[ i ] );
- this->majtickgy[ i ] = astFree( this->majtickgy[ i ] );
- this->mintickgx[ i ] = astFree( this->mintickgx[ i ] );
- this->mintickgy[ i ] = astFree( this->mintickgy[ i ] );
- this->mintickcount[ i ] = 0;
- this->majtickcount[ i ] = 0;
- }
- return;
- }
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get pointers to the arrays to use, and ensure the arrays are big
- enough to hold the new tick. */
- if( major ) {
- count = this->majtickcount + axis;
- tickgx = this->majtickgx[ axis ];
- tickgy = this->majtickgy[ axis ];
- } else {
- count = this->mintickcount + axis;
- tickgx = this->mintickgx[ axis ];
- tickgy = this->mintickgy[ axis ];
- }
-
-/* Ensure the arrays are big enough to hold the new tick. */
- i = *count;
- tickgx = astGrow( tickgx, i + 1, sizeof( double ) );
- tickgy = astGrow( tickgy, i + 1, sizeof( double ) );
-
-/* If memory was allocated succesfully, store the new tick information in
- the expanded arrays. */
- if( astOK ) {
- tickgx[ i ] = gx;
- tickgy[ i ] = gy;
- *count = i + 1;
-
-/* Store the potentially updated array pointers. */
- if( major ) {
- this->majtickgx[ axis ] = tickgx;
- this->majtickgy[ axis ] = tickgy;
- } else {
- this->mintickgx[ axis ] = tickgx;
- this->mintickgy[ axis ] = tickgy;
- }
- }
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a Plot.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void SetAttrib( AstObject *this, const char *setting, int *status )
-
-* Class Membership:
-* Plot member function (over-rides the astSetAttrib protected
-* method inherited from the FrameSet class).
-
-* Description:
-* This function assigns an attribute value for a Plot, the
-* attribute and its value being specified by means of a string of
-* the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in
-* lower case with no white space present. The value to the right
-* of the "=" should be a suitable textual representation of the
-* value to be assigned and this will be interpreted according to
-* the attribute's data type. White space surrounding the value is
-* only significant for string attributes.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* setting
-* Pointer to a null terminated string specifying the new attribute
-* value.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstPlot *this; /* Pointer to the Plot structure */
- char label[21]; /* Graphics item label */
- const char *class; /* Pointer to class string */
- double dval; /* Double attribute value */
- int axis; /* Index for the axis */
- int edge; /* Index of edge within list */
- int id1; /* Plot object id */
- int id2; /* Plot object id */
- int id; /* Plot object id */
- int ival; /* Int attribute value */
- int len; /* Length of setting string */
- int nax; /* Number of graphics frame axes */
- int nc; /* Number of characters read by astSscanf */
- int id3; /* Third genuine identifier */
- int nid; /* Number of genuine attributes */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Plot structure. */
- this = (AstPlot *) this_object;
-
-/* Get the number of base Frame axis (2 for a Plot, 3 for a Plot3D). */
- nax = astGetNin( this );
-
-/* Obtain the length of the setting string. */
- len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
- the setting string and extract the attribute value (or an offset to
- it in the case of string values). In each case, use the value set
- in "nc" to check that the entire string was matched. Once a value
- has been obtained, use the appropriate method to set it. */
-
-/* Tol. */
-/* ---- */
- if ( nc = 0,
- ( 1 == astSscanf( setting, "tol= %lg %n", &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetTol( this, dval );
-
-/* Grid. */
-/* ----- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "grid= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetGrid( this, ival );
-
-/* TickAll. */
-/* -------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "tickall= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetTickAll( this, ival );
-
-/* ForceExterior */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "forceexterior= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetForceExterior( this, ival );
-
-/* Invisible. */
-/* ---------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "invisible= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetInvisible( this, ival );
-
-/* Border. */
-/* ------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "border= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetBorder( this, ival );
-
-/* ClipOp. */
-/* ------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "clipop= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetClipOp( this, ival );
-
-/* Clip. */
-/* ----- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "clip= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetClip( this, ival );
-
-/* Grf. */
-/* ---- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "grf= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetGrf( this, ival );
-
-/* DrawTitle. */
-/* ---------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "drawtitle= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetDrawTitle( this, ival );
-
-/* DrawAxes. */
-/* --------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "drawaxes= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- for( axis = 0; axis < nax; axis++ ) astSetDrawAxes( this, axis, ival );
-
-/* DrawAxes(axis). */
-/* --------------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "drawaxes(%d)= %d %n",
- &axis, &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetDrawAxes( this, axis - 1, ival );
-
-/* Abbrev. */
-/* ------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "abbrev= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- for( axis = 0; axis < nax; axis++ ) astSetAbbrev( this, axis, ival );
-
-/* Abbrev(axis). */
-/* --------------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "abbrev(%d)= %d %n",
- &axis, &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetAbbrev( this, axis - 1, ival );
-
-/* Escape. */
-/* ------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "escape= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetEscape( this, ival );
-
-/* Edge(axis). */
-/* ----------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "edge(%d)= %n%*s %n", &axis, &ival, &nc ) )
- && ( nc >= len ) ) {
- edge = FullForm( "left right top bottom", setting + ival, setting,
- "astSet", astGetClass( this ), status );
- if( edge == 0 ) {
- astSetEdge( this, axis - 1, LEFT );
- } else if( edge == 1 ) {
- astSetEdge( this, axis - 1, RIGHT );
- } else if( edge == 2 ) {
- astSetEdge( this, axis - 1, TOP );
- } else if( edge == 3 ) {
- astSetEdge( this, axis - 1, BOTTOM );
- }
-
-/* LabelAt (axis). */
-/* --------------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "labelat(%d)= %lg %n",
- &axis, &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetLabelAt( this, axis - 1, dval );
-
-/* Centre(axis). */
-/* ------------ */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "centre(%d)= %lg %n",
- &axis, &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetCentre( this, axis - 1, dval );
-
-/* Gap. */
-/* ---- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "gap= %lg %n", &dval, &nc ) )
- && ( nc >= len ) ) {
- for( axis = 0; axis < nax; axis++ ) astSetGap( this, axis, dval );
-
-/* Gap(axis). */
-/* ---------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "gap(%d)= %lg %n",
- &axis, &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetGap( this, axis - 1, dval );
-
-/* LogGap. */
-/* ---- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "loggap= %lg %n", &dval, &nc ) )
- && ( nc >= len ) ) {
- for( axis = 0; axis < nax; axis++ ) astSetLogGap( this, axis, dval );
-
-/* LogGap(axis). */
-/* ---------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "loggap(%d)= %lg %n",
- &axis, &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetLogGap( this, axis - 1, dval );
-
-/* NumLabGap. */
-/* -------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "numlabgap= %lg %n", &dval, &nc ) )
- && ( nc >= len ) ) {
- for( axis = 0; axis < nax; axis++ ) astSetNumLabGap( this, axis, dval );
-
-/* NumLabGap(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "numlabgap(%d)= %lg %n",
- &axis, &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetNumLabGap( this, axis - 1, dval );
-
-/* TextLabGap. */
-/* -------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "textlabgap= %lg %n", &dval, &nc ) )
- && ( nc >= len ) ) {
- for( axis = 0; axis < nax; axis++ ) astSetTextLabGap( this, axis, dval );
-
-/* TextLabGap(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "textlabgap(%d)= %lg %n",
- &axis, &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetTextLabGap( this, axis - 1, dval );
-
-/* LabelUp. */
-/* -------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "labelup= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- for( axis = 0; axis < nax; axis++ ) astSetLabelUp( this, axis, ival );
-
-/* LabelUp(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "labelup(%d)= %d %n",
- &axis, &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetLabelUp( this, axis - 1, ival );
-
-/* LogPlot. */
-/* -------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "logplot= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- for( axis = 0; axis < nax; axis++ ) astSetLogPlot( this, axis, ival );
-
-/* LogPlot(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "logplot(%d)= %d %n",
- &axis, &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetLogPlot( this, axis - 1, ival );
-
-/* LogTicks. */
-/* -------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "logticks= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- for( axis = 0; axis < nax; axis++ ) astSetLogTicks( this, axis, ival );
-
-/* LogTicks(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "logticks(%d)= %d %n",
- &axis, &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetLogTicks( this, axis - 1, ival );
-
-/* LogLabel. */
-/* -------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "loglabel= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- for( axis = 0; axis < nax; axis++ ) astSetLogLabel( this, axis, ival );
-
-/* LogLabel(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "loglabel(%d)= %d %n",
- &axis, &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetLogLabel( this, axis - 1, ival );
-
-/* NumLab. */
-/* -------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "numlab= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- for( axis = 0; axis < nax; axis++ ) astSetNumLab( this, axis, ival );
-
-/* NumLab(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "numlab(%d)= %d %n",
- &axis, &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetNumLab( this, axis - 1, ival );
-
-/* MinTick. */
-/* -------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "mintick= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- for( axis = 0; axis < nax; axis++ ) astSetMinTick( this, axis, ival );
-
-/* MinTick(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "mintick(%d)= %d %n",
- &axis, &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetMinTick( this, axis - 1, ival );
-
-/* TextLab. */
-/* ---------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "textlab= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- for( axis = 0; axis < nax; axis++ ) astSetTextLab( this, axis, ival );
-
-/* TextLab(axis). */
-/* ---------------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "textlab(%d)= %d %n",
- &axis, &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetTextLab( this, axis - 1, ival );
-
-/* LabelUnits. */
-/* --------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "labelunits= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- for( axis = 0; axis < nax; axis++ ) astSetLabelUnits( this, axis, ival );
-
-/* LabelUnits(axis). */
-/* ---------------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "labelunits(%d)= %d %n",
- &axis, &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetLabelUnits( this, axis - 1, ival );
-
-/* Style. */
-/* ------ */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "style= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- for( id = 0; id < AST__NPID; id++ ) astSetStyle( this, id, ival );
-
-/* Style(label). */
-/* ------------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "style(%20[^()])= %d %n",
- label, &ival, &nc ) )
- && ( nc >= len ) ) {
- class = astGetClass( this );
-
- nid = IdFind( FullForm( GrfLabels, label, "Style", "astSet", class, status ),
- nax, &id1, &id2, &id3, status );
- astSetStyle( this, id1, ival );
- if( nid > 1 ) astSetStyle( this, id2, ival );
- if( nid > 2 ) astSetStyle( this, id3, ival );
-
-/* Font. */
-/* ----- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "font= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- for( id = 0; id < AST__NPID; id++ ) astSetFont( this, id, ival );
-
-/* Font(label). */
-/* ------------ */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "font(%20[^()])= %d %n",
- label, &ival, &nc ) )
- && ( nc >= len ) ) {
- class = astGetClass( this );
-
- nid = IdFind( FullForm( GrfLabels, label, "Font", "astSet", class, status ),
- nax, &id1, &id2, &id3, status );
- astSetFont( this, id1, ival );
- if( nid > 1 ) astSetFont( this, id2, ival );
- if( nid > 2 ) astSetFont( this, id3, ival );
-
-/* Colour. */
-/* ------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "colour= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- for( id = 0; id < AST__NPID; id++ ) astSetColour( this, id, ival );
-
-/* Colour(label). */
-/* -------------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "colour(%20[^()])= %d %n",
- label, &ival, &nc ) )
- && ( nc >= len ) ) {
- class = astGetClass( this );
-
- nid = IdFind( FullForm( GrfLabels, label, "Colour", "astSet", class, status ),
- nax, &id1, &id2, &id3, status );
- astSetColour( this, id1, ival );
- if( nid > 1 ) astSetColour( this, id2, ival );
- if( nid > 2 ) astSetColour( this, id3, ival );
-
-/* Color. */
-/* ------ */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "color= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- for( id = 0; id < AST__NPID; id++ ) astSetColour( this, id, ival );
-
-/* Color(label). */
-/* ------------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "color(%20[^()])= %d %n",
- label, &ival, &nc ) )
- && ( nc >= len ) ) {
- class = astGetClass( this );
-
- nid = IdFind( FullForm( GrfLabels, label, "Color", "astSet", class, status ),
- nax, &id1, &id2, &id3, status );
- astSetColour( this, id1, ival );
- if( nid > 1 ) astSetColour( this, id2, ival );
- if( nid > 2 ) astSetColour( this, id3, ival );
-
-/* Width. */
-/* ------ */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "width= %lg %n", &dval, &nc ) )
- && ( nc >= len ) ) {
- for( id = 0; id < AST__NPID; id++ ) astSetWidth( this, id, dval );
-
-/* Width(label). */
-/* ------------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "width(%20[^()])= %lg %n",
- label, &dval, &nc ) )
- && ( nc >= len ) ) {
- class = astGetClass( this );
-
- nid = IdFind( FullForm( GrfLabels, label, "Width", "astSet", class, status ),
- nax, &id1, &id2, &id3, status );
- astSetWidth( this, id1, dval );
- if( nid > 1 ) astSetWidth( this, id2, dval );
- if( nid > 2 ) astSetWidth( this, id3, dval );
-
-/* Size. */
-/* ----- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "size= %lg %n", &dval, &nc ) )
- && ( nc >= len ) ) {
- for( id = 0; id < AST__NPID; id++ ) astSetSize( this, id, dval );
-
-/* Size(label). */
-/* ------------ */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "size(%20[^()])= %lg %n",
- label, &dval, &nc ) )
- && ( nc >= len ) ) {
- class = astGetClass( this );
-
- nid = IdFind( FullForm( GrfLabels, label, "Size", "astSet", class, status ),
- nax, &id1, &id2, &id3, status );
- astSetSize( this, id1, dval );
- if( nid > 1 ) astSetSize( this, id2, dval );
- if( nid > 2 ) astSetSize( this, id3, dval );
-
-/* TitleGap. */
-/* ----------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "titlegap= %lg %n", &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetTitleGap( this, dval );
-
-/* MajTickLen. */
-/* ----------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "majticklen= %lg %n", &dval, &nc ) )
- && ( nc >= len ) ) {
- for( axis = 0; axis < nax; axis++ ) astSetMajTickLen( this, axis, dval );
-
-/* MajTickLen(axis). */
-/* ----------------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "majticklen(%d)= %lg %n",
- &axis, &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetMajTickLen( this, axis - 1, dval );
-
-/* MinTickLen. */
-/* ----------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "minticklen= %lg %n", &dval, &nc ) )
- && ( nc >= len ) ) {
- for( axis = 0; axis < nax; axis++ ) astSetMinTickLen( this, axis, dval );
-
-/* MinTickLen(axis). */
-/* ----------------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "minticklen(%d)= %lg %n",
- &axis, &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetMinTickLen( this, axis - 1, dval );
-
-/* Labelling. */
-/* -------- */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "labelling= %n%*s %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetLabelling( this, FullForm( "exterior interior",
- setting + ival, setting,
- "astSet", astGetClass( this ), status )
- );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-
-/* Undefine macros local to this function. */
-#undef MATCH
-}
-
-static void SetLogPlot( AstPlot *this, int axis, int ival, int *status ){
-/*
-*
-* Name:
-* SetLogPlot
-
-* Purpose:
-* Set a new value for a LogPlot attribute
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void SetLogPlot( AstPlot *this, int axis, int ival, int *status )
-
-* Class Membership:
-* Plot member function
-
-* Description:
-* Assigns a new value to the LogPlot attribute of the specified axis,
-* and also re-maps the base Frame of the Plot if necessary.
-
-* Parameters:
-* this
-* The Plot.
-* axis
-* Zero based axis index.
-* ival
-* The new value for the ogPlot attribute.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- int oldval; /* Original attribute value */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Validate the axis index. */
- if( axis < 0 || axis >= 2 ){
- astError( AST__AXIIN, "astSetLogPlot(%s): Index (%d) is invalid for "
- "attribute LogPlot - it should be in the range 1 to 2.", status,
- astGetClass( this ), axis + 1 );
-
-/* If the axis index is OK, store the original attribute value. We use
- astGetLogPlot to get the value rather than directly accessing
- "this->logplot" in order to get the any default value in the case of
- no value having been set. */
- } else {
- oldval = astGetLogPlot( this, axis );
-
-/* If the current attribute value will change, attempt to re-map the plot
- axis. If the attempt succeeds, toggle the current attribute value. */
- if( ( ival != 0 ) != ( oldval != 0 ) ){
- if( ToggleLogLin( this, axis, oldval, "astSetLogPlot", status ) ){
- this->logplot[ axis ] = ( !oldval );
- }
-
-/* If the current attribute value will not change, just store the supplied
- value (this is not redundant because it may cause a previously defaulted
- value to become an explicitly set value ). */
- } else {
- this->logplot[ axis ] = oldval;
- }
- }
-}
-
-static void SetTickValues( AstPlot *this, int axis, int nmajor, double *major,
- int nminor, double *minor, int *status ){
-/*
-*+
-* Name:
-* astSetTickValues
-
-* Purpose:
-* Store the tick mark values to use for a given Plot axis.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "plot.h"
-* void astSetTickValues( AstPlot *this, int axis, int nmajor,
-* double *major, int nminor, double *minor )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-* This function stores a set of tick mark values that should be used by
-* subsequent calls to astGrid.
-
-* Parameters:
-* this
-* Pointer to a Plot.
-* axis
-* The zero-based index of the axis for which tick marks values
-* have been supplied.
-* nmajor
-* The number of major tick mark values. If zero is supplied then
-* the other parameters are ignored, and subsequent calls to
-* astGrid will itself determine the tick values to be used.
-* major
-* Pointer to an array holding "nmajor" values for axis "axis" in
-* the current Frame of the suppled Plot. Major tick marks will be
-* drawn at these values.
-* nminor
-* The number of minor tick mark values.
-* minor
-* Pointer to an array holding "nminor" values for axis "axis" in
-* the current Frame of the suppled Plot. Minor tick marks will be
-* drawn at these values.
-
-*-
-*/
-
-/* Check the global status. */
- if( !astOK ) return;
-
-/* Report an error if the supplied axis value is incorrect. */
- if( axis < 0 || axis >= astGetNin( this ) ) {
- astError( AST__INTER, "astSetTickValues(Plot): Supplied \"axis\" "
- "value is %d - should in the range 0 to %d (internal AST "
- "programming error).", status, axis, astGetNin( this ) - 1 );
-
-/* Otherwise store or clear the values. */
- } else if( nmajor > 0 ){
- this->nmajtickval[ axis ] = nmajor;
- this->majtickval[ axis ] = astStore( this->majtickval[ axis ], major,
- sizeof( double )*nmajor );
- this->nmintickval[ axis ] = nminor;
- this->mintickval[ axis ] = astStore( this->mintickval[ axis ], minor,
- sizeof( double )*nminor );
-
-/* Sort them into increasing order. */
- qsort( (void *) this->majtickval[ axis ], (size_t) nmajor,
- sizeof(double), Compared );
-
- qsort( (void *) this->mintickval[ axis ], (size_t) nminor,
- sizeof(double), Compared );
-
- } else {
- this->nmajtickval[ axis ] = 0;
- this->majtickval[ axis ] = astFree( this->majtickval[ axis ] );
- this->nmintickval[ axis ] = 0;
- this->mintickval[ axis ] = astFree( this->mintickval[ axis ] );
- }
-}
-
-const char *astStripEscapes_( const char *text, int *status ) {
-/*
-*++
-* Name:
-c astStripEscapes
-f AST_STRIPESCAPES
-
-* Purpose:
-* Remove AST escape sequences from a string.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "plot.h"
-c const char *astStripEscapes( const char *text )
-f RESULT = AST_STRIPESCAPES( TEXT )
-
-* Description:
-* This function removes AST escape sequences from a supplied string,
-* returning the resulting text as the function value. The behaviour
-* of this function can be controlled by invoking the
-c astEscapes function,
-f AST_ESCAPES routine,
-* which can be used to supress or enable the removal of escape
-* sequences by this function.
-*
-* AST escape sequences are used by the Plot class to modify the
-* appearance and position of sub-strings within a plotted text string.
-* See the "Escape" attribute for further information.
-
-* Parameters:
-c text
-c Pointer to the string to be checked.
-f TEXT
-f The string to be checked.
-
-* Returned Value:
-c astStripEscapes()
-f AST_STRIPESCAPES = CHARACTER
-c Pointer to the modified string. If no escape sequences were found
-c in the supplied string, then a copy of the supplied pointer is
-c returned. Otherwise, the pointer will point to a static buffer
-c holding the modified text. This text will be over-written by
-c subsequent invocations of this function. If the astEscapes function
-f The modified string. If the AST_ESCAPES routine
-* has been called indicating that escape sequences should not be
-* stripped, then the supplied string is returned without change.
-
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS
- const char *a;
- char *b;
- int nc;
- int ncc;
- int type;
- int value;
- const char *result;
-
-/* Initialise */
- result= text;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check inherited status and supplied pointer. Also return if the
- string contains no escape sequences or if stripping of escapes has
- been supressed. */
- if( !astOK || astEscapes( -1 ) || !text || !HasEscapes( text, status ) ) return result;
-
-/* Initialise a pointer to the next character to be read from the
- supplied string. */
- a = text;
-
-/* Initialise a pointer to the next character to be written to the
- returned string. */
- b = stripescapes_buff;
-
-/* Note the available space left in the buffer. */
- ncc = AST__PLOT_STRIPESCAPES_BUFF_LEN;
-
-/* Loop until all the string has been read, or the buffer is full. */
- while( *a && ncc > 0 ){
-
-/* If the remaining string starts with an escape sequence, increment the
- read point by the length of the escape sequence, but leave the write
- pointer where it is. */
- if( astFindEscape( a, &type, &value, &nc ) ) {
- a += nc;
-
-/* If the remaining string does not start with an escape sequence, copy
- the following text from the read position to the write position. */
- } else {
- if( nc > ncc ) nc = ncc;
- memcpy( b, a, sizeof( char )*nc );
- a += nc;
- b += nc;
- ncc -= nc;
- }
- }
-
-/* Terminate the returned string. */
- *b = 0;
-
-/* Return the result.*/
- return stripescapes_buff;
-}
-
-static int swapEdges( AstPlot *this, TickInfo **grid, AstPlotCurveData **cdata, int *status ) {
-/*
-* Name:
-* swapEdges
-
-* Purpose:
-* Determine if edges for text labels should be swapped.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int swapEdges( AstPlot *this, TickInfo **grid, AstPlotCurveData **cdata, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* or not it is necessary to swap the Edges(0) and Edges(1) attributes
-* in order to place textual labels on appropriate edges. This should
-* only be used if the attributes have not explicitly been set, and if
-* interior labelling is being used. The sides are determines by
-* looking at the bounding box of tick marks on axis 0, in graphics
-* coordinates. The returned value causes the label for axis 0 to be
-* placed on the edge parallel to the longest side of this bounding box.
-* The label for axis 1 is placed parallel to the shortest side of this
-* bounding box.
-
-* Parameters:
-* this
-* A pointer to the Plot.
-* grid
-* A pointer to an array of two TickInfo pointers (one for each axis),
-* each pointing to a TickInfo structure holding information about
-* tick marks on the axis. See function GridLines.
-* cdata
-* A pointer to an array of two AstPlotCurveData pointers (one for each axis),
-* each pointing to an array of AstPlotCurveData structure (one for each
-* major tick value on the axis), holding information about breaks
-* in the curves drawn to mark the major tick values. See function
-* DrawGrid.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the edges should be swapped, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstPlotCurveData *cdt; /* Pointer to the AstPlotCurveData for the next tick */
- TickInfo *info; /* Pointer to the TickInfo for the current axis */
- float xmax; /* Max graphics X value */
- float xmin; /* Min graphics X value */
- float ymax; /* Max graphics Y value */
- float ymin; /* Min graphics Y value */
- int oldedge; /* The original edge for axis 0 */
- int result; /* Swap edges? */
- int tick; /* Tick index */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the structure containing information describing the
- positions of the major tick marks along axis 0. */
- info = grid[ 0 ];
-
-/* Get a pointer to the structure containing information describing
- the breaks in the curve which is parallel to axis 1 and passes
- through the first major tick mark on axis 0. */
- cdt = cdata[ 0 ];
-
-/* Initialise the graphiocs X and Y bounds of the area covered by the
- axis. */
- xmax = -1.0E10;
- xmin = 1.0E10;
- ymax = -1.0E10;
- ymin = 1.0E10;
-
-/* Loop round each of the major tick marks on axis 0. */
- for( tick = 0; cdt && info && tick < info->nmajor; tick++ ){
-
-/* Update the max and min graphics X and Y coords covered by the axis. */
- if( cdt->nbrk > 0 ) {
- xmax = MAX( xmax, cdt->xbrk[0] );
- xmin = MIN( xmin, cdt->xbrk[0] );
- ymax = MAX( ymax, cdt->ybrk[0] );
- ymin = MIN( ymin, cdt->ybrk[0] );
- }
-
-/* Get a pointer to the curve through the next major tick mark. */
- cdt++;
-
- }
-
-/* See which edge axis 0 would normally be labelled on. */
- oldedge = astGetEdge( this, 0 );
-
-/* If the X range is larger than the Y range, the textual label should be
- placed on the bottom edge. If required, indicate that the edges must
- be swapped to achieve this. */
- if( xmax - xmin > ymax - ymin ) {
- if( oldedge == 0 || oldedge == 2 ) result = 1;
-
-/* If the X range is smaller than the Y range, the textual label should be
- placed on the left edge. If required, indicate that the edges must
- be swapped to achieve this. */
- } else {
- if( oldedge == 1 || oldedge == 3 ) result = 1;
- }
-
- return result;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a Plot.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Plot member function (over-rides the astTestAttrib protected
-* method inherited from the FrameSet class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a Plot's attributes.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstPlot *this; /* Pointer to the Plot structure */
- char label[21]; /* Graphics item label */
- int axis; /* Axis number */
- int len; /* Length of attrib string */
- int nax; /* Number of base Frame axes */
- int nc; /* No. characters read by astSscanf */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the Plot structure. */
- this = (AstPlot *) this_object;
-
-/* Get the number of base Frame axis (2 for a Plot, 3 for a Plot3D). */
- nax = astGetNin( this );
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* Tol. */
-/* ---- */
- if ( !strcmp( attrib, "tol" ) ) {
- result = astTestTol( this );
-
-/* Edge(axis). */
-/* ----------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "edge(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestEdge( this, axis - 1 );
-
-/* Grid. */
-/* ----- */
- } else if ( !strcmp( attrib, "grid" ) ) {
- result = astTestGrid( this );
-
-/* TickAll. */
-/* -------- */
- } else if ( !strcmp( attrib, "tickall" ) ) {
- result = astTestTickAll( this );
-
-/* ForceExterior */
-/* ------------- */
- } else if ( !strcmp( attrib, "forceexterior" ) ) {
- result = astTestForceExterior( this );
-
-/* Invisible. */
-/* ---------- */
- } else if ( !strcmp( attrib, "invisible" ) ) {
- result = astTestInvisible( this );
-
-/* Border. */
-/* ------- */
- } else if ( !strcmp( attrib, "border" ) ) {
- result = astTestBorder( this );
-
-/* ClipOp. */
-/* ------- */
- } else if ( !strcmp( attrib, "clipop" ) ) {
- result = astTestClipOp( this );
-
-/* Clip. */
-/* ----- */
- } else if ( !strcmp( attrib, "clip" ) ) {
- result = astTestClip( this );
-
-/* Grf. */
-/* ---- */
- } else if ( !strcmp( attrib, "grf" ) ) {
- result = astTestGrf( this );
-
-/* DrawTitle. */
-/* ---------- */
- } else if ( !strcmp( attrib, "drawtitle" ) ) {
- result = astTestDrawTitle( this );
-
-/* DrawAxes. */
-/* --------- */
- } else if ( !strcmp( attrib, "drawaxes" ) ) {
- result = astTestDrawAxes( this, 0 );
-
-/* DrawAxes(axis). */
-/* --------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "drawaxes(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestDrawAxes( this, axis - 1 );
-
-/* Abbrev. */
-/* --------- */
- } else if ( !strcmp( attrib, "abbrev" ) ) {
- result = astTestAbbrev( this, 0 );
-
-/* Abbrev(axis). */
-/* --------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "abbrev(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestAbbrev( this, axis - 1 );
-
-/* Escape. */
-/* ------- */
- } else if ( !strcmp( attrib, "escape" ) ) {
- result = astTestEscape( this );
-
-/* Gap. */
-/* ---- */
- } else if ( !strcmp( attrib, "gap" ) ) {
- result = astTestGap( this, 0 );
-
-/* Gap(axis). */
-/* ---------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "gap(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestGap( this, axis - 1 );
-
-/* LabelAt(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "labelat(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestLabelAt( this, axis - 1 );
-
-/* LogGap. */
-/* ---- */
- } else if ( !strcmp( attrib, "loggap" ) ) {
- result = astTestLogGap( this, 0 );
-
-/* LogGap(axis). */
-/* ---------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "loggap(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestLogGap( this, axis - 1 );
-
-/* NumLabGap. */
-/* --------- */
- } else if ( !strcmp( attrib, "numlabgap" ) ) {
- result = astTestNumLabGap( this, 0 );
-
-/* NumLabGap(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "numlabgap(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestNumLabGap( this, axis - 1 );
-
-/* TextLabGap. */
-/* --------- */
- } else if ( !strcmp( attrib, "textlabgap" ) ) {
- result = astTestTextLabGap( this, 0 );
-
-/* TextLabGap(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "textlabgap(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestTextLabGap( this, axis - 1 );
-
-/* LabelUp. */
-/* -------- */
- } else if ( !strcmp( attrib, "labelup" ) ) {
- result = astTestLabelUp( this, 0 );
-
-/* LabelUp(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "labelup(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestLabelUp( this, axis - 1 );
-
-/* LogPlot. */
-/* -------- */
- } else if ( !strcmp( attrib, "logplot" ) ) {
- result = astTestLogPlot( this, 0 );
-
-/* LogPlot(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "logplot(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestLogPlot( this, axis - 1 );
-
-/* LogTicks. */
-/* -------- */
- } else if ( !strcmp( attrib, "logticks" ) ) {
- result = astTestLogTicks( this, 0 );
-
-/* LogTicks(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "logticks(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestLogTicks( this, axis - 1 );
-
-/* LogLabel. */
-/* -------- */
- } else if ( !strcmp( attrib, "loglabel" ) ) {
- result = astTestLogLabel( this, 0 );
-
-/* LogLabel(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "loglabel(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestLogLabel( this, axis - 1 );
-
-/* NumLab. */
-/* -------- */
- } else if ( !strcmp( attrib, "numlab" ) ) {
- result = astTestNumLab( this, 0 );
-
-/* NumLab(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "numlab(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestNumLab( this, axis - 1 );
-
-/* MinTick. */
-/* -------- */
- } else if ( !strcmp( attrib, "mintick" ) ) {
- result = astTestMinTick( this, 0 );
-
-/* MinTick(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "mintick(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestMinTick( this, axis - 1 );
-
-/* TextLab. */
-/* ---------- */
- } else if ( !strcmp( attrib, "textlab" ) ) {
- result = astTestTextLab( this, 0 );
-
-/* TextLab(axis). */
-/* ---------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "textlab(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestTextLab( this, axis - 1 );
-
-/* LabelUnits. */
-/* --------- */
- } else if ( !strcmp( attrib, "labelunits" ) ) {
- result = astTestLabelUnits( this, 0 );
-
-/* LabelUnits(axis). */
-/* --------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "labelunits(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestLabelUnits( this, axis - 1 );
-
-/* Style. */
-/* ------ */
- } else if ( !strcmp( attrib, "style" ) ) {
- result = TestUseStyle( this, AST__BORDER_ID, status );
-
-/* Style(label). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "style(%20[^()])%n", label, &nc ) )
- && ( nc >= len ) ) {
- result = TestUseStyle( this, FullForm( GrfLabels, label, attrib, "astTest", astGetClass( this ), status ), status );
-
-/* Font. */
-/* ----- */
- } else if ( !strcmp( attrib, "font" ) ) {
- result = TestUseFont( this, AST__TEXTLABS_ID, status );
-
-/* Font(label). */
-/* ------------ */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "font(%20[^()])%n", label, &nc ) )
- && ( nc >= len ) ) {
- result = TestUseFont( this, FullForm( GrfLabels, label, attrib, "astTest", astGetClass( this ), status ), status );
-
-/* Colour. */
-/* ------- */
- } else if ( !strcmp( attrib, "colour" ) ) {
- result = TestUseColour( this, AST__TEXTLABS_ID, status );
-
-/* Color. */
-/* ------- */
- } else if ( !strcmp( attrib, "color" ) ) {
- result = TestUseColour( this, AST__TEXTLABS_ID, status );
-
-/* Colour(label). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "colour(%20[^()])%n", label, &nc ) )
- && ( nc >= len ) ) {
- result = TestUseColour( this, FullForm( GrfLabels, label, attrib, "astTest", astGetClass( this ), status ), status );
-
-/* Color(label). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "color(%20[^()])%n", label, &nc ) )
- && ( nc >= len ) ) {
- result = TestUseColour( this, FullForm( GrfLabels, label, attrib, "astTest", astGetClass( this ), status ), status );
-
-/* Width. */
-/* ------ */
- } else if ( !strcmp( attrib, "width" ) ) {
- result = TestUseWidth( this, AST__BORDER_ID, status );
-
-/* Width(label). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "width(%20[^()])%n", label, &nc ) )
- && ( nc >= len ) ) {
- result = TestUseWidth( this, FullForm( GrfLabels, label, attrib, "astTest", astGetClass( this ), status ), status );
-
-/* Size. */
-/* ----- */
- } else if ( !strcmp( attrib, "size" ) ) {
- result = TestUseSize( this, AST__TEXTLABS_ID, status );
-
-/* Size(label). */
-/* ------------ */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "size(%20[^()])%n", label, &nc ) )
- && ( nc >= len ) ) {
- result = TestUseSize( this, FullForm( GrfLabels, label, attrib, "astTest", astGetClass( this ), status ), status );
-
-/* TitleGap. */
-/* --------- */
- } else if ( !strcmp( attrib, "titlegap" ) ) {
- result = astTestTitleGap( this );
-
-/* MajTickLen. */
-/* ----------- */
- } else if ( !strcmp( attrib, "majticklen" ) ) {
- result = astTestMajTickLen( this, 0 );
-
-/* MajTickLen(axis). */
-/* ---------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "majticklen(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestMajTickLen( this, axis - 1 );
-
-/* MinTickLen. */
-/* ----------- */
- } else if ( !strcmp( attrib, "minticklen" ) ) {
- result = astTestMinTickLen( this, 0 );
-
-/* MinTickLen(axis). */
-/* ---------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "minticklen(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestMinTickLen( this, axis - 1 );
-
-/* Labelling. */
-/* -------- */
- } else if ( !strcmp( attrib, "labelling" ) ) {
- result = astTestLabelling( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static void Text( AstPlot *this, const char *text, const double pos[],
- const float up[], const char *just, int *status ){
-/*
-*++
-* Name:
-c astText
-f AST_TEXT
-
-* Purpose:
-* Draw a text string for a Plot.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "plot.h"
-c void astText( AstPlot *this, const char *text, const double pos[],
-c const float up[], const char *just )
-f CALL AST_TEXT( THIS, TEXT, POS, UP, JUST, STATUS )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-* This function draws a string of text at a position specified in
-* the physical coordinate system of a Plot. The physical position
-* is transformed into graphical coordinates to determine where the
-* text should appear within the plotting area.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Plot.
-c text
-f TEXT = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated character string containing the
-f A character string containing the
-* text to be drawn. Trailing white space is ignored.
-c pos
-f POS( * ) = DOUBLE PRECISION (Given)
-* An array, with one element for each axis of the Plot, giving
-* the physical coordinates of the point where the reference
-* position of the text string is to be placed.
-c up
-f UP( * ) = REAL (Given)
-* An array holding the components of a vector in the "up"
-* direction of the text (in graphical coordinates). For
-c example, to get horizontal text, the vector {0.0f,1.0f} should
-f example, to get horizontal text, the vector [0.0,1.0] should
-* be supplied. For a basic Plot, 2 values should be supplied. For
-* a Plot3D, 3 values should be supplied, and the actual up vector
-* used is the projection of the supplied up vector onto the text plane
-* specified by the current value of the Plot3D's Norm attribute.
-c just
-f JUST = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated character string identifying the
-f A character string identifying the
-* reference point for the text being drawn. The first character in
-* this string identifies the reference position in the "up" direction
-* and may be "B" (baseline), "C" (centre), "T" (top) or "M" (bottom).
-* The second character identifies the side-to-side reference position
-* and may be "L" (left), "C" (centre) or "R" (right ). The string is
-* case-insensitive, and only the first two characters are significant.
-*
-* For example, a value of "BL" means that the left end of the
-* baseline of the original (un-rotated) text is to be drawn at the
-c position given by "pos".
-f position given by POS.
-
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - The Plot3D class currently does not interpret graphical escape
-* sequences contained within text displayed using this method.
-* - Text is not drawn at positions which have any coordinate equal
-* to the value AST__BAD (or where the transformation into
-* graphical coordinates yields coordinates containing the value
-* AST__BAD).
-c - If the plotting position is clipped (see astClip), then no
-f - If the plotting position is clipped (see AST_CLIP), then no
-* text is drawn.
-* - An error results if the base Frame of the Plot is not
-* 2-dimensional or (for a Plot3D) 3-dimensional.
-* - An error also results if the transformation between the
-* current and base Frames of the Plot is not defined (i.e. the
-* Plot's TranInverse attribute is zero).
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMapping *mapping; /* Pointer to graphics->physical mapping */
- AstPointSet *pset1; /* PointSet holding physical positions */
- AstPointSet *pset2; /* PointSet holding graphics positions */
- const char *class; /* Object class */
- const char *method; /* Current method */
- const double **ptr1; /* Pointer to physical positions */
- char ljust[3]; /* Upper case copy of "just" */
- char *ltext; /* Local copy of "text" excluding trailing spaces */
- double **ptr2; /* Pointer to graphics positions */
- float xbn[ 4 ]; /* X coords of text bounding box. */
- float ybn[ 4 ]; /* Y coord of text bounding box. */
- int axis; /* Axis index */
- int escs; /* Original astEscapes value */
- int naxes; /* No. of axes in the base Frame */
- int ncoord; /* No. of axes in the current Frame */
- int ulen; /* Length of "text" excluding trailing spaces */
-
-/* Check the global error status. */
- if ( !astOK || !text ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* Store the current method and class for inclusion in error messages
- generated by lower level functions. */
- method = "astText";
- class = astClass( this );
-
-/* Check the base Frame of the Plot is 2-D. */
- naxes = astGetNin( this );
- if( naxes != 2 && astOK ){
- astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the base "
- "Frame of the supplied %s is invalid - this number should "
- "be 2.", status, method, class, naxes, class );
- }
-
-/* Ensure AST functions included graphical escape sequences in any
- returned text strings. */
- escs = astEscapes( 1 );
-
-/* Initialise the bounding box for primatives produced by this call. */
- if( !Boxp_freeze ) {
- Boxp_lbnd[ 0 ] = FLT_MAX;
- Boxp_lbnd[ 1 ] = FLT_MAX;
- Boxp_ubnd[ 0 ] = FLT_MIN;
- Boxp_ubnd[ 1 ] = FLT_MIN;
- }
-
-/* Establish the correct graphical attributes as defined by attributes
- with the supplied Plot. */
- astGrfAttrs( this, AST__TEXT_ID, 1, GRF__TEXT, method, class );
-
-/* Get the number of coordinates in the physical coordinate frame. */
- ncoord = astGetNout( this );
-
-/* Create a PointSet to hold the supplied physical coordinates. */
- pset1 = astPointSet( 1, ncoord, "", status );
-
-/* Allocate memory to hold pointers to the first value on each axis. */
- ptr1 = (const double **) astMalloc( sizeof( const double * )*
- (size_t)( ncoord ));
-
-/* Check the pointer can be used, then store pointers to the first value
- on each axis. */
- if( astOK ){
- for( axis = 0; axis < ncoord; axis++ ){
- ptr1[ axis ] = pos + axis;
- }
- }
-
-/* Store these pointers in the PointSet. */
- astSetPoints( pset1, (double **) ptr1 );
-
-/* Transform the supplied data from the current frame (i.e. physical
- coordinates) to the base frame (i.e. graphics coordinates) using
- the inverse Mapping defined by the Plot. */
- mapping = astGetMapping( this, AST__BASE, AST__CURRENT );
- pset2 = Trans( this, NULL, mapping, pset1, 0, NULL, 0, method, class, status );
- mapping = astAnnul( mapping );
-
-/* Get pointers to the graphics coordinates. */
- ptr2 = astGetPoints( pset2 );
-
-/* Take a copy of the string excluding any trailing white space. */
- ulen = ChrLen( text, status );
- ltext = (char *) astStore( NULL, (void *) text, ulen + 1 );
-
-/* Check the pointers can be used. */
- if( astOK ){
-
-/* Terminate the local copy of the text string. */
- ltext[ ulen ] = 0;
-
-/* Produce an upper-case copy of the first two characters in "just". */
- ljust[0] = (char) toupper( (int) just[0] );
- ljust[1] = (char) toupper( (int) just[1] );
- ljust[2] = 0;
-
-/* Convert the double precision values to single precision, checking for
- bad positions. */
- if( ptr2[0][0] != AST__BAD && ptr2[1][0] != AST__BAD ){
-
-/* Draw the text string. */
- DrawText( this, 1, astGetEscape( this ), ltext, (float) ptr2[0][0],
- (float) ptr2[1][0], ljust, up[ 0 ], up[ 1 ], xbn, ybn,
- NULL, method, class, status );
- }
-
-/* Free the local copy of the string. */
- ltext = (char *) astFree( (void *) ltext );
-
- }
-
-/* Annul the PointSets. */
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
-
-/* Free the memory holding the pointers to the first value on each axis. */
- ptr1 = (const double **) astFree( (void *) ptr1 );
-
-/* Re-establish the original graphical attributes. */
- astGrfAttrs( this, AST__TEXT_ID, 0, GRF__TEXT, method, class );
-
-/* Restore the original value of the flag which says whether graphical
- escape sequences should be incldued in any returned text strings. */
- astEscapes( escs );
-
-/* Return */
- return;
-}
-
-static void TextLabels( AstPlot *this, int edgeticks, int dounits[2],
- const char *method, const char *class, int *status ){
-/*
-*
-* Name:
-* TextLabels
-
-* Purpose:
-* Draw textual labels round a grid.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void TextLabels( AstPlot *this, int edgeticks, int dounits[2],
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function displays a textual label for each physical axis, and a
-* title. The text strings are obtained from the Label and Title
-* attributes of the current Frame in the Plot.
-
-* Parameters:
-* this
-* A pointer to the Plot.
-* edgeticks
-* If tick marks and numerical labels were drawn around the edges
-* of the plotting area, this should be supplied as 1. Otherwise it
-* should be supplied as zero.
-* dounits
-* Flags indicating if the axis Units string should be included in
-* the edge labels.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- char *new_text; /* Pointer to complete text string (inc. units) */
- char *just; /* Pointer to axis label justification string */
- const char *text; /* Pointer to text string to be displayed */
- const char *units; /* Pointer to text string describing the units */
- double mindim; /* Minimum dimension of plotting area */
- double xrange; /* Width of plotting area */
- double yrange; /* Height of plotting area */
- float txtgap; /* Gap between bounding box and text string */
- float upx; /* X component of text up-vector */
- float upy; /* Y component of text up-vector */
- float xbn[ 4 ]; /* X coords at corners of new label's bounding box */
- float ybn[ 4 ]; /* Y coords at corners of new label's bounding box */
- float xref; /* Graphics X coord. at text ref. position */
- float yref; /* Graphics Y coord. at text ref. position */
- float xlo, xhi, ylo, yhi;/* The original bounding box (excluding labels) */
- int axis; /* Axis index */
- int draw; /* Should label be drawn? */
- int edge; /* Edge to be labelled */
- int esc; /* Interpret escape sequences? */
- int gelid; /* ID for next graphical element to be drawn */
- int tlen; /* No. of characetsr in label */
- int ulen; /* No. of characetsr in units */
-
-/* Check the global status. */
- if( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* Get the minimum dimension of the plotting area. */
- xrange = this->xhi - this->xlo;
- yrange = this->yhi - this->ylo;
- mindim = MIN( xrange, yrange );
-
-/* Take a copy of the bounding box which encloses all other parts of the
- annotated grid. If nothing has been plotted, use an area 20 % smaller
- than the plotting area. */
- if( Box_lbnd[ 0 ] != FLT_MAX ) {
- xlo = Box_lbnd[ 0 ];
- xhi = Box_ubnd[ 0 ];
- ylo = Box_lbnd[ 1 ];
- yhi = Box_ubnd[ 1 ];
- } else {
- xlo = this->xlo + 0.2*xrange;
- xhi = this->xhi - 0.2*xrange;
- ylo = this->ylo + 0.2*yrange;
- yhi = this->yhi - 0.2*yrange;
- }
-
-/* See if escape sequences are to be interpreted within the labels. */
- esc = astGetEscape( this );
-
-/* Initialize the id value for graphical element being drawn. */
- gelid = AST__TEXTLAB1_ID;
-
-/* Now write a label for each physical axis. */
- for( axis = 0; axis < 2 && astOK; axis++ ){
-
-/* Establish the correct graphical attributes as defined by attributes
- with the supplied Plot. */
- astGrfAttrs( this, gelid, 1, GRF__TEXT, method, class );
-
-/* See if the label is to be drawn. If an explicit value has not been set
- for the TextLab attribute, the default is to draw the label if tick
- marks were draw round the edge of the plotting area, and not to
- otherwise. */
- if( astTestTextLab( this, axis ) ){
- draw = astGetTextLab( this, axis );
- } else {
- draw = edgeticks;
- }
-
-/* If so get the label. */
- if( draw ){
- text = astGetLabel( this, axis );
- tlen = ChrLen( text, status );
-
-/* If required, get the units string and concatenate it with the label (inside
- parenthesise). Ignore trailing spaces. */
- if( dounits[ axis ] ){
- units = astGetUnit( this, axis );
- if( units && units[0] ){
- ulen = ChrLen( units, status );
- new_text = astMalloc( tlen + ulen + 4 );
- if( new_text ) memcpy( new_text, text, tlen );
-
- text = new_text + tlen;
-
- memcpy( (void *) text, " (", 2 );
- text += 2;
-
- memcpy( (char *) text, units, ulen );
- text += ulen;
-
- memcpy( (char *) text, ")", 1 );
- text += 1;
-
- ( (char *) text )[0] = 0;
-
- text = new_text;
-
- } else {
- new_text = astStore( NULL, (void *) text, tlen + 1 );
- new_text[ tlen ] = 0;
- text = new_text;
- units = NULL;
- }
-
- } else {
- new_text = astStore( NULL, (void *) text, tlen + 1 );
- new_text[ tlen ] = 0;
- text = new_text;
- units = NULL;
- }
-
-/* Get the gap between the edge of the bounding box and the closest edge
- of the text string. */
- txtgap = (float)( mindim*astGetTextLabGap( this, axis ) );
-
-/* Get the edge to be labelled. Edge 0 is the left hand edge. Edge 1 is the
- top edge. Edge 2 is the right-hand edge. Edge 3 is the bottom edge. */
- edge = astGetEdge( this, axis ) % 4;
- if( edge < 0 ) edge = -edge;
-
-/* If the label is to be put on the left hand edge... */
- if( edge == 0 ){
-
-/* Set the up vector so that the text is written from bottom to top. */
- upx = -1.0;
- upy = 0.0;
-
-/* Justify the bottom of the whole bounding box (not just the text
- base-line). */
- just = "MC";
-
-/* Set the x reference position just outside the box enclosing all the
- graphics drawn so far. The reference point refers to the centre of the
- text string in both directions ("CC" justification). Take account of
- whether or not the x axis is reversed. Do not allow the text to be
- written outside the whole plotting surface. */
- if( this->xrev ){
- xref = xhi + txtgap;
- } else {
- xref = xlo - txtgap;
- }
-
-/* The Y reference position is at the mid point vertically. */
- yref = 0.5*( MIN( yhi, this->yhi ) +
- MAX( ylo, this->ylo ) );
-
-/* Do the same for the top edge. */
- } else if( edge == 1 ){
- upx = 0.0;
- upy = 1.0;
- just = "MC";
- if( this->yrev ){
- yref = ylo - txtgap;
- } else {
- yref = yhi + txtgap;
- }
- xref = 0.5*( MIN( xhi, this->xhi ) +
- MAX( xlo, this->xlo ) );
-
-/* Do the same for the right-hand edge. */
- } else if( edge == 2 ){
- upx = 1.0;
- upy = 0.0;
- just = "MC";
- if( this->xrev ){
- xref = xlo - txtgap;
- } else {
- xref = xhi + txtgap;
- }
- yref = 0.5*( MIN( yhi, this->yhi ) +
- MAX( ylo, this->ylo ) );
-
-/* Do the same for the bottom edge. */
- } else {
- upx = 0.0;
- upy = 1.0;
- just = "TC";
- if( this->yrev ){
- yref = yhi + txtgap;
- } else {
- yref = ylo - txtgap;
- }
- xref = 0.5*( MIN( xhi, this->xhi ) +
- MAX( xlo, this->xlo ) );
- }
-
-/* Display the label. */
- DrawText( this, 1, esc, text, xref, yref, just,
- upx, upy, xbn, ybn, NULL, method, class, status );
-
-/* Release the memory allocated to store the axis label;. */
- new_text = (char *) astFree( (void *) new_text );
- text = NULL;
-
- }
-
-/* Re-establish the original graphical attributes. */
- astGrfAttrs( this, gelid, 0, GRF__TEXT, method, class );
-
-/* Set up the id for the next graphical element to be drawn. */
- gelid = AST__TEXTLAB2_ID;
-
- }
-
-/* See if the title is to be drawn. */
- if( astOK && astGetDrawTitle( this ) ){
-
-/* If so get the title. */
- text = astGetTitle( this );
-
-/* Create a copy from which trailing spaces have been removed. */
- tlen = ChrLen( text, status );
- new_text = (char *) astStore( NULL, (void *) text, tlen + 1 );
- new_text[ tlen ] = 0;
- text = new_text;
-
-/* Establish the correct graphical attributes as defined by attributes
- with the supplied Plot. */
- astGrfAttrs( this, AST__TITLE_ID, 1, GRF__TEXT, method, class );
-
-/* Take a copy of the bounding box which encloses all other parts of the
- annotated grid (this may have been extended by the above code). If
- nothing has been plotted, use an area 20 % smaller than the plotting
- area. */
- if( Box_lbnd[ 0 ] != FLT_MAX ) {
- xlo = Box_lbnd[ 0 ];
- xhi = Box_ubnd[ 0 ];
- ylo = Box_lbnd[ 1 ];
- yhi = Box_ubnd[ 1 ];
- } else {
- xlo = this->xlo + 0.2*xrange;
- xhi = this->xhi - 0.2*xrange;
- ylo = this->ylo + 0.2*yrange;
- yhi = this->yhi - 0.2*yrange;
- }
-
-/* Get the graphics coordinates of the bottom centre point of the title.
- The X centre is put at the mid point of the used x axis range
- (restricted to the range of the plotting area). */
- xref = 0.5*( MIN( xhi, this->xhi ) +
- MAX( xlo, this->xlo ) );
-
-/* The Y centre is put a "TitleGap" distance outside the box containing
- the everything else. */
- if( this->yrev ){
- yref = ylo - (float)( mindim*astGetTitleGap( this ) );
- } else {
- yref = yhi + (float)( mindim*astGetTitleGap( this ) );
- }
-
-/* Display the title. Justify the bottom of the whole bounding box (not
- just the text base-line). */
- DrawText( this, 1, esc, text, xref, yref, "MC", 0.0F, 1.0F,
- xbn, ybn, NULL, method, class, status );
-
-/* Re-establish the original graphical attributes. */
- astGrfAttrs( this, AST__TITLE_ID, 0, GRF__TEXT, method, class );
-
-/* Release the memory allocated to store the title. */
- new_text = (char *) astFree( (void *) new_text );
- text = NULL;
- }
-
-/* Include the labels in the bounding box held in global variables
- Box_lbnd/ubnd. */
- if( Box_lbnd[ 0 ] != FLT_MAX ) {
- Box_lbnd[ 0 ] = MIN( Box_lbnd[ 0 ], Boxp_lbnd[ 0 ] );
- Box_ubnd[ 0 ] = MAX( Box_ubnd[ 0 ], Boxp_ubnd[ 0 ] );
- Box_lbnd[ 1 ] = MIN( Box_lbnd[ 1 ], Boxp_lbnd[ 1 ] );
- Box_ubnd[ 1 ] = MAX( Box_ubnd[ 1 ], Boxp_ubnd[ 1 ] );
- } else {
- Box_lbnd[ 0 ] = Boxp_lbnd[ 0 ];
- Box_ubnd[ 0 ] = Boxp_ubnd[ 0 ];
- Box_lbnd[ 1 ] = Boxp_lbnd[ 1 ];
- Box_ubnd[ 1 ] = Boxp_ubnd[ 1 ];
- }
-
-/* Return. */
- return;
-
-}
-
-static void UpdateConcat( float *xbn, float *ybn, float ux, float uy,
- float rx, float ry, float *x, float *y,
- float x0, float y0, float *alpha_lo,
- float *alpha_hi, float *beta_lo, float *beta_hi,
- int *status ){
-
-/*
-* Name:
-* UpdateConcat
-
-* Purpose:
-* Update the concatenation point for a text string in preparation for
-* appending another string.
-
-* Synopsis:
-* #include "plot.h"
-* void UpdateConcat( float *xbn, float *ybn, float ux, float uy,
-* float rx, float ry, float *x, float *y,
-* float x0, float y0, float *alpha_lo, float *alpha_hi,
-* float *beta_lo, float *beta_hi, int *status )
-
-* Description:
-* This function modifies the supplied concatenation point (x,y) by moving
-* it to the right along the baseline of the text by an amount equal
-* to the width of the supplied sub-string bounding box. It also updates
-* the supplied total bounding box so that it includes the supplied
-* sub-string bounding box.
-
-* Parameters:
-* xbn
-* Pointer to an array holding the x coord at the four corners of
-* the sub-string bounding box.
-* ybn
-* Pointer to an array holding the y coord at the four corners of
-* the sub-string bounding box.
-* ux
-* The x component of the up-vector for the text, in graphics coords.
-* The length of this vector should be equal to the height of normal
-* text drawn with this up-vector.
-* uy
-* The y component of the up-vector for the text. See "ux".
-* rx
-* The x component of the right-vector for the text. The length of this
-* vector should be equal to the height of normal text drawn with the
-* supplied up-vector.
-* ry
-* The y component of the right-vector for the text. see "rx".
-* x
-* Pointer to a float holding the x coord of the concatenation point
-* of the text just drawn. This is changed on exit so that the next
-* string will be appended to the end of the text just drawn.
-* y
-* Pointer to a float holding the y coord of the concatenation point
-* of the text just drawn. This is changed on exit so that the next
-* string will be appended to the end of the text just drawn.
-* x0
-* The X coord at the left end of the baseline of the total string.
-* y0
-* The Y coord at the left end of the baseline of the total string.
-* alpha_lo
-* Pointer to a double holding a value which gives the position of the
-* bottom edge of the total bounding box. The value is such that
-* (x0,y0) + alpha_lo*(ux,uy) is a point on the bottom edge of the
-* total bounding box. The returned value is updated so that the
-* total bounding box includes the supplied sub-string bounding box.
-* alpha_hi
-* Pointer to a double holding a value which gives the position of the
-* top edge of the total bounding box. The value is such that
-* (x0,y0) + alpha_hi*(ux,uy) is a point on the top edge of the
-* total bounding box. The returned value is updated so that the
-* total bounding box includes the supplied sub-string bounding box.
-* beta_lo
-* Pointer to a double holding a value which gives the position of the
-* left edge of the total bounding box. The value is such that
-* (x0,y0) + beta_lo*(rx,ry) is a point on the left edge of the
-* total bounding box. The returned value is updated so that the
-* total bounding box includes the supplied sub-string bounding box.
-* beta_hi
-* Pointer to a double holding a value which gives the position of the
-* right edge of the total bounding box. The value is such that
-* (x0,y0) + beta_hi*(rx,ry) is a point on the right edge of the
-* total bounding box. The returned value is updated so that the
-* total bounding box includes the supplied sub-string bounding box.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- float ahi;
- float alo;
- float alpha;
- float beta;
- float bhi;
- float blo;
- float denom;
- float dx;
- float dy;
- float xc;
- float yc;
- int ic;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Check the supplied up and right vectors are not parallel. */
- denom = ux*ry - uy*rx;
- if( denom != 0.0 ) {
-
-/* Get the coords at the centre of the sub-string bounding box. */
- xc = ( xbn[ 0 ] + xbn[ 1 ] + xbn[ 2 ] + xbn[ 3 ] )/4.0;
- yc = ( ybn[ 0 ] + ybn[ 1 ] + ybn[ 2 ] + ybn[ 3 ] )/4.0;
-
-/* For each of the 4 corners of the sub-string bounding box, we consider the
- vector from the centre of the bounding box to the corner. We want to express
- this vector, vx, as a sum of a vector in the up direction and a vector
- in the right direction:
-
- vx = alpha*ux + beta+rx
- vy = alpha*uy + beta+ry
-
- where alpha and beta are constants which are different for each
- corner vector. We also want to find the minimum and maximum alpha and
- beta covered by the box. First initialise the limits. */
- alo = 0.0;
- ahi = 0.0;
- blo = 0.0;
- bhi = 0.0;
-
-/* Now find alpha and beta for each of the four corners. */
- for( ic = 0; ic < 4; ic++ ) {
- dx = xbn[ ic ] - xc;
- dy = ybn[ ic ] - yc;
- alpha = ( dx*ry - dy*rx ) /denom;
- beta = ( dy*ux - dx*uy ) /denom;
-
-/* Extend the bounds in alpha and beta. */
- if( alpha < alo ) alo = alpha;
- if( alpha > ahi ) ahi = alpha;
- if( beta < blo ) blo = beta;
- if( beta > bhi ) bhi = beta;
-
-/* The bottom left corner has negative values for both alpha and beta.
- Commence the process of updating the concatenation point by subtracting
- off the coordinates at the bottom left corner. For zero height bounding
- boxes (such as may be produced if the text is completely blank), the
- "alpha" value should be zero, but may be slightly non-zero due to
- rounding errors. Allow for this (assuming non-blank text will always
- produce a boundiong box that is at least 1.0E-4 of the up vector in
- height). We do the same for bounding box width (although zero width
- boxes will probably not occur). */
- if( alpha < 1.0E-4 ) {
- if( beta < 1.0E-4 ) {
- *x -= xbn[ ic ];
- *y -= ybn[ ic ];
-
-/* The bottom right corner has negative alpha and positive beta. Complete
- the process of updating the concatenation point by adding on the
- coordinates at the bottom right corner. */
- } else if( beta > -1.0E-4 ) {
- *x += xbn[ ic ];
- *y += ybn[ ic ];
- }
- }
- }
-
-/* Also express the vector from (x0,y0) to (xc,yc) as a sum of a vector
- in the up direction and a vector in the right direction:
-
- xc - x0 = alpha*ux + beta*rx
- yc - y0 = alpha*uy + beta*ry
-
- Find alpha and beta. */
-
- dx = xc - x0;
- dy = yc - y0;
- alpha = ( dx*ry - dy*rx ) /denom;
- beta = ( dy*ux - dx*uy ) /denom;
-
-/* We can now express the vector from (x0,y0) to each of the 4 corners as
- a sum of alpha*up and beta*right. Form the bounds of the sub-string in
- terms of up-vectors and right vectors from (x0,y0) instead of from the
- centre of the box. */
- alo += alpha;
- ahi += alpha;
- blo += beta;
- bhi += beta;
-
-/* Extend the supplied alpha and beta bounding box to include these limits. */
- if( alo < *alpha_lo ) *alpha_lo = alo;
- if( ahi > *alpha_hi ) *alpha_hi = ahi;
- if( blo < *beta_lo ) *beta_lo = blo;
- if( bhi > *beta_hi ) *beta_hi = bhi;
- }
-}
-
-static void Ticker( AstPlot *this, int edge, int axis, double value,
- double *gap, double tklen, int majtick, int save,
- EdgeCrossingsStatics **pstatics, const char *method,
- const char *class, int *status ){
-/*
-*
-* Name:
-* Ticker
-
-* Purpose:
-* Draw edge tick marks for a given axis value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void Ticker( AstPlot *this, int edge, int axis, double value,
-* double *gap, double tklen, int majtick, int save,
-* EdgeCrossingsStatics **pstatics, const char *method,
-* const char *class, int *status ){
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function draws tick marks at all occurences of a given
-* physical axis value on a given edge of the plotting area.
-
-* Parameters:
-* this
-* A pointer to the Plot.
-* edge
-* The edge of the plotting area to be ticked. Edge 0 is the left hand
-* edge. Edge 1 is the top edge. Edge 2 is the right-hand edge. Edge 3
-* is the bottom edge.
-* axis
-* The index of the axis to which "value" refers. The tick mark extends
-* parallel to this axis.
-* value
-* The physical axis value at which to place the tick mark.
-* gap
-* Pointer to array of two values holding the gap between major
-* tick marks on the two axes.
-* tklen
-* The length of the tick, in graphics units.
-* majtick
-* Non-zero if the tick mark being drawn is a major tick, and zero
-* if it is a minor tick.
-* save
-* If non-zero, the tick mark position will be saved in the Plot structure.
-* pstatics
-* Address of a pointer to a structure holding values for variables
-* which were statically defined within this function prior to the
-* thread-safe version of AST. If the pointer is supplied as NULL,
-* then a new structure is allocated and initialised.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- double *cross; /* Pointer to crossings information */
- double *vx; /* Pointer to next X vector component value */
- double *vy; /* Pointer to next Y vector component value */
- double *x; /* Pointer to next X value */
- double *y; /* Pointer to next Y value */
- double xe; /* X at tick end */
- double ye; /* Y at tick end */
- int j; /* Crossing index */
- int ncross; /* No. of crossings of tick value and edge */
-
-/* Check the global status. */
- if( !astOK ) return;
-
-/* See where the current major tick value crosses the edge. */
- ncross = EdgeCrossings( this, edge, axis, value, gap, &cross, pstatics,
- method, class, status );
-
-/* Do nothing if the supplied axis value does not occur on the specified
- edge of the plotting area. */
- if( ncross ){
-
-/* Draw major tick marks at the crossings. */
- x = cross;
- y = cross + 1;
- vx = cross + 2;
- vy = cross + 3;
-
-/* Draw a tick mark at each occurence of the axis value on the specified
- edge. */
- for( j = 0; j < ncross; j++ ){
-
-/* Check the tick mark position and directionm are defined. */
- if( *vx != AST__BAD && *vy != AST__BAD &&
- *x != AST__BAD && *y != AST__BAD ){
-
-/* Ensure the tick mark will point into the plotting area, no matter which
- edge it is on. First ensure the direction vector refers to a system in
- which X increases to the left and Y increases upwards. */
- if( this->xrev ) *vx = -*vx;
- if( this->yrev ) *vy = -*vy;
-
-/* If necessary reverse the vector so that it points into the plotting
- area. How to do this depends on which edge is being ticked. */
- if( ( edge == 0 && *vx < 0.0 ) || /* left-hand edge */
- ( edge == 1 && *vy > 0.0 ) || /* Top edge */
- ( edge == 2 && *vx > 0.0 ) || /* Right-hand edge */
- ( edge == 3 && *vy < 0.0 ) ){ /* Bottom edge */
-
- *vx = -*vx;
- *vy = -*vy;
- }
-
-/* Now ensure the direction vector refers to a the native graphics system
- taking account of any reversal of axes. */
- if( this->xrev ) *vx = -*vx;
- if( this->yrev ) *vy = -*vy;
-
-/* Do not draw the tick if the start of the tick is outside the bounds of
- the axis it is labelling. */
- if( ( ( edge == 1 || edge == 3 ) &&
- *x < this->xhi && *x > this->xlo ) ||
- ( ( edge == 0 || edge == 2 ) &&
- *y < this->yhi && *y > this->ylo ) ) {
-
-/* Store the x and y graphics coords of the far end of the tick mark */
- xe = *x + tklen*(*vx);
- ye = *y + tklen*(*vy);
-
-/* Ensure the far end of the tick mark is within the bounds of the axis
- it is labelling. If not, redice the length of the tick mark until it is.*/
- if( edge == 1 || edge == 3 ) { /* Top or bottom edge */
- if( xe > this->xhi ) {
- ye = *y + tklen*(*vy)*( this->xhi - *x )/(xe - *x );
- xe = this->xhi;
- } else if( xe < this->xlo ) {
- ye = *y + tklen*(*vy)*( this->xlo - *x )/(xe - *x );
- xe = this->xlo;
- }
-
- } else { /* Left or right edge */
- if( ye > this->yhi ) {
- xe = *x + tklen*(*vx)*( this->yhi - *y )/(ye - *y );
- ye = this->yhi;
- } else if( ye < this->ylo ) {
- xe = *x + tklen*(*vx)*( this->ylo - *y )/(ye - *y );
- ye = this->ylo;
- }
- }
-
-/* Draw the tick mark as a straight line of the specified length. */
- if( save ) SaveTick( this, axis, *x, *y, majtick, status );
- if( *x != xe || *y != ye ) {
- Bpoly( this, (float) *x, (float) *y, method, class, status );
- Apoly( this, (float) xe, (float) ye, method, class, status );
- Opoly( this, method, class, status );
- }
- }
-
-/* Move on to the next crossing. */
- x += 4;
- y += 4;
- vx += 4;
- vy += 4;
- }
- }
-
-/* Free the memory holding the crossings. */
- if( cross ) cross = (double *) astFree( (void *) cross );
-
- }
-
-/* Return. */
- return;
-
-}
-
-static TickInfo *TickMarks( AstPlot *this, int axis, double *cen, double *gap,
- int *inval, GetTicksStatics **pstatics,
- const char *method, const char *class, int *status ){
-/*
-* Name:
-* TickMarks
-
-* Purpose:
-* Obtain a list of tick mark values and labels for a single axis in a 2-D
-* physical coordinate Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* TickInfo *TickMarks( AstPlot *this, int axis, double *cen, double *gap,
-* int *inval, GetTicksStatics **pstatics,
-* const char *method, const char *class, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* A set of tick marks values and corresponding formatted labels are
-* found for an axis which result in all adjacent labels being different,
-* but using the minimum number of digits of precision in the formatting.
-* This algorithm is over-ridden if the caller has set an explicit Format
-* string for the axis. The gap between tick marks can be specified by
-* the caller or a default value may be found automatically.
-
-* Parameters:
-* this
-* The Plot.
-* axis
-* The zero-based index of the axis to use.
-* cen
-* Pointer to the supplied axis value at which to put a single
-* central tick. Other ticks will be placed evenly on either side of
-* this tick. If AST__BAD is provided, a value will be used which
-* would put a tick at an axis value of zero. The used value is
-* returned.
-* gap
-* The supplied values for the gaps between ticks on the axis. If
-* this is AST__BAD a suitable default value will be used and
-* returned in place of the AST__BAD value.
-* inval
-* A pointer to a location at which to return a flag indicating if
-* any invalid physical coordinates were encountered while deciding on
-* the tick values.
-* pstatics
-* Address of a pointer to a structure holding static data values
-* used within the GetTicks function. A NULL pointer should be supplied
-* on the first invocation (dynamic memory will then be allocated to
-* hold ths structure). The memory is freed when a NULL value for
-* "this" is supplied.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a TickInfo structure holding information about the tick
-* marks (no. of major and minor ticks, the major tick mark values and
-* labels). This structure should be freed, together with its contents,
-* using astFree when it is no longer needed.
-
-* Notes:
-* - The returned labels are NOT abbreviated to remove identical
-* leading fields.
-* - This function allocates some static resources on its first
-* invocation, which should be released when no longer needed, or when
-* a different Plot is supplied, by calling this function with a NULL
-* pointer for parameter "this". All other parameters (except axis) are
-* ignored.
-* - This function assumes that the physical coordinate system is 2
-* dimensional, and it should not be used if this is not the case.
-* - An error is reported if the region containing valid physical
-* coordinates is too small to use.
-* - If an error has already occurred, or if this function should fail
-* for any reason, then a NULL pointer is returned.
-*/
-
-/* Local Constants: */
-#define MAXFLD 10
-
-/* Local Variables: */
- AstAxis *ax; /* Pointer to the axis. */
- AstFrame *frame; /* Pointer to the current Frame in the Plot */
- TickInfo *ret; /* Pointer to the returned structure. */
- char **labels; /* Pointer to list of formatted labels */
- char **newlabels; /* Pointer to new list of shortened formatted labels */
- char **oldlabels; /* Pointer to old list of formatted labels */
- char *fields[ MAXFLD ]; /* Pointers to starts of fields in a label */
- char *old_format; /* Original Format string */
- char *used_fmt; /* Copy of format string actually used */
- const char *a; /* Pointer to next character to consider */
- const char *fmt; /* Format string actually used */
- double *ticks; /* Pointer to major tick mark values */
- double *minticks; /* Pointer to minor tick mark values */
- double cen0; /* Supplied value of cen */
- double junk; /* Unused value */
- double refval; /* Value for other axis to use when normalizing */
- double used_gap; /* The gap size actually used */
- int bot_digits; /* Digits value which makes labels as short as possible */
- int digits; /* New Digits value */
- int digset; /* Did the format string fix the no. of digits to use? */
- int fmtset; /* Was a format set? */
- int i; /* Tick index. */
- int nc[ MAXFLD ]; /* Lengths of fields in a label */
- int nf; /* Number of fields in a label */
- int nmajor; /* No. of major tick marks */
- int nminor; /* No. of minor tick marks */
- int ok; /* Are all adjacent labels different? */
- int reset_fmt; /* Re-instate the original state of the Format attribute? */
-
-
-/* If a NULL pointer has been supplied for "this", release the resources
- allocated within GetTicks, and return. */
- if( !this ){
- (void) GetTicks( NULL, axis, NULL, &ticks, &nmajor, &minticks, &nminor,
- 0, inval, &refval, pstatics, method, class, status );
- return NULL;
- }
-
-/* Check the global status. */
- if( !astOK ) return NULL;
-
-/* Initialise the returned pointer. */
- ret = NULL;
-
-/* Store the supplied value of cen. */
- cen0 = cen ? *cen : AST__BAD ;
-
-/* Get a pointer to the current Frame from the Plot. */
- frame = astGetFrame( this, AST__CURRENT );
-
-/* Initialise a flag to indicate that all adjacent labels are different. */
- ok = 0;
-
-/* Initialise the pointer to the list of formatted tick mark values to
- indicate that no memory has yet been obtained. */
- labels = NULL;
-
-/* Initialise the pointer to a copy of the used format string to indicate
- that no memory has yet been obtained. */
- used_fmt = NULL;
-
-/* Get a pointer to the axis. */
- ax = astGetAxis( frame, axis );
-
-/* See if a value has been set for the axis Format. */
- fmtset = astTestFormat( frame, axis );
-
-/* Get an initial set of tick mark values. This also establishes defaults for
- LogTicks and LogLabel attributes, and so must be done before the
- following block which uses the LogLabel attribute. */
- used_gap = GetTicks( this, axis, cen, &ticks, &nmajor, &minticks, &nminor,
- fmtset, inval, &refval, pstatics, method, class, status );
-
-/* See if exponential labels using superscript powers are required. */
- old_format = NULL;
- reset_fmt = 0;
- if( astGetLogLabel( this, axis ) && astGetEscape( this ) &&
- GCap( this, GRF__SCALES, 1, status ) ) {
-
-/* Save a copy of the Frame's Format value, if set. It will be
- re-instated at the end of this function. */
- if( fmtset ) {
- fmt = astGetFormat( frame, axis );
- old_format = astStore( NULL, (void *) fmt, strlen(fmt) + 1 );
- }
-
-/* Temporarily use a format of "%&g" to get "10**x" style axis labels,
- with super-scripted "x". */
- astSetFormat( frame, axis, "%&g" );
-
-/* Not all subclasses of Frame support this format specifier, so format a
- test value, and see if it has two fields, the first of which is "10".
- If not, we cannot use log labels so re-instate the original format. */
- nf = astFields( frame, axis, "%&g", astFormat( frame, axis, 1.0E4 ),
- MAXFLD, fields, nc, &junk );
- if( nf != 2 || nc[ 0 ] != 2 || strncmp( fields[ 0 ], "10", 2 ) ) {
- if( old_format ) {
- astSetFormat( frame, axis, old_format );
- old_format = astFree( old_format);
- } else {
- astClearFormat( frame, axis );
- }
-
-/* If the "%&g" format is usable, note that we should reset the Format
- back to its original state before leaving this function. */
- } else {
- reset_fmt = 1;
- }
- }
-
-/* If a value has been set for the axis Format, see if the format string
- contains a wildcard precision specifier ".*". If so, we are free to
- vary the number of digits used in the label in order to produce
- distinct labels. If no value has been set for the axis Format, we are
- also free to vary the number of digits. */
- digset = 0;
- if( fmtset ) {
- fmt = astGetFormat( frame, axis );
- if( fmt ) {
- digset = 1;
- a = fmt;
- while( (a = strchr( a, '.' )) ){
- if( *(++a) == '*' ) {
- digset = 0;
- break;
- }
- }
- }
- }
-
-/* If the axis precision has been specified, either through the Format string
- or Digits value, or the Frame Digits value, we should use it so that the
- user's attempts to get a specific result are not foiled. */
- if( digset || astTestAxisDigits( ax ) || astTestDigits( frame ) ){
-
-/* Reserve memory to hold pointers to the formatted labels. */
- labels = (char **) astMalloc( sizeof(char *)*(size_t)nmajor );
-
-/* Format the labels. We do not check that all adjacent labels are distinct
- in order not to foil the users choice of format. That is, "ok" is set
- non-zero by the call to CheckLabels, even if some identical adjacent
- labels are found. */
- ok = CheckLabels( this, frame, axis, ticks, nmajor, 1, labels, refval, status );
-
-/* Note the format used. */
- fmt = astGetFormat( frame, axis );
- if( fmt ) used_fmt = (char *) astStore( used_fmt, (void *) fmt, strlen( fmt ) + 1 );
-
-/* If no precision has been specified for the axis, we need to find a
- Digits value which gives different labels, but without using any more
- digits than necessary. */
- } else if( astOK ){
-
-/* Reserve memory to hold pointers to an initial set of labels formatted
- with the default digits value. */
- labels = (char **) astMalloc( sizeof(char *)*(size_t)nmajor );
-
-/* Produce these default labels. */
- CheckLabels( this, frame, axis, ticks, nmajor, 1, labels, refval, status );
-
-/* The first task is to decide what the smallest usable number of digits
- is. Starting at the default number of digits used above to produce the
- default labels, we reduce the number of digits until one or more of the
- formatted labels *increases* in length. This can happen for instance if
- printf decides to include an exponent in the label. The *absolute*
- minimum value 1. Set this first. */
- bot_digits = 1;
- oldlabels = labels;
- for( digits = astGetDigits( frame ) - 1; digits > 0; digits-- ){
- astSetAxisDigits( ax, digits );
-
-/* CheckLabels2 formats the labels with the decreased number of digits,
- and compares them with the old labels in "labels". If any of the new labels
- are longer than the corresponding old labels, then a null pointer is
- returned. Otherwise, a pointer is returned to the new set of labels. */
- newlabels = CheckLabels2( this, frame, axis, ticks, nmajor,
- oldlabels, refval, status );
-
-/* Free the old labels unless they are the orignal labels (which are
- needed below). */
- if( oldlabels != labels ) {
- for( i = 0; i < nmajor; i++ ){
- if( oldlabels[ i ] ) oldlabels[ i ] = (char *) astFree( (void *) oldlabels[ i ] );
- }
- oldlabels = (char **) astFree( (void *) oldlabels );
- }
-
-/* If any of the labels got longer as a result of reducing the digits
- value, then use the previous number of digits as the lowest possible
- number of digits. Break out of the loop. */
- if( !newlabels ) {
- bot_digits = digits + 1;
- break;
- }
-
-/* If none of the labels got longer, we arrive here. Use the shorter labels
- for the next pass round this loop. */
- oldlabels = newlabels;
- }
-
-/* Free any remaining labels. */
- if( oldlabels && oldlabels != labels ) {
- for( i = 0; i < nmajor; i++ ){
- if( oldlabels[ i ] ) oldlabels[ i ] = (char *) astFree( (void *) oldlabels[ i ] );
- }
- oldlabels = (char **) astFree( (void *) oldlabels );
- }
-
-/* Now loop round increasing the number of digits in the formatted labels
- from the lowest usable value found above until all adjacent labels are
- different. An arbitrary upper limit of 1000 is used for Digits to stop it
- looping for ever. */
- for( digits = bot_digits; digits < 1000; digits++ ){
-
-/* Store the new Digits value. */
- astSetAxisDigits( ax, digits );
-
-/* Free memory used to hold the current set of labels. A new set will be
- created by the following call to CheckLabels. */
- if( labels ) {
- for( i = 0; i < nmajor; i++ ) labels[ i ] = astFree( labels[ i ] );
- }
-
-/* Break out of the loop if a Digits value has been found which results
- in all adjacent labels being different. Note the format used (we know
- the Format attribute is currently unset, but the default Format string
- reflects the current value of the Digits attribute). */
- if( CheckLabels( this, frame, axis, ticks, nmajor, 0, labels, refval, status ) ) {
- ok = 1;
- fmt = astGetFormat( frame, axis );
- used_fmt = (char *) astStore( NULL, (void *) fmt, strlen( fmt ) + 1 );
- break;
- }
- }
-
-/* Clear the Digits value. */
- astClearAxisDigits( ax );
- }
-
-/* Annul the pointer to the Axis. */
- ax = astAnnul( ax );
-
-/* Re-instate the original format specifier if required. */
- if( reset_fmt ) {
- if( old_format ) {
- astSetFormat( frame, axis, old_format );
- old_format = astFree( old_format);
- } else {
- astClearFormat( frame, axis );
- }
- }
-
-/* If suitable labels were found... */
- if( ok && astOK ) {
-
-/* Store the used gap size. */
- *gap = used_gap;
-
-/* If the caller has specified the number of minor tick marks to use,
- use the specified value rather than the value found above. */
- if( astTestMinTick( this, axis ) ){
- nminor = astGetMinTick( this, axis );
- }
-
-/* Allocate memory for the returned structure. */
- ret = (TickInfo *) astMalloc( sizeof( TickInfo ) );
-
-/* If the pointer can be used, store the information. */
- if( astOK ){
- ret->nmajor = nmajor;
- ret->nminor = nminor;
- ret->ticks = ticks;
- ret->minticks = minticks;
- ret->labels = labels;
- ret->fmt = used_fmt;
- used_fmt = NULL;
- ret->start = NULL;
- ret->length = NULL;
- ret->nsect = 0;
- ret->gap = used_gap;
- }
-
-/* If no suitable labels were found report an error. */
- } else if( astOK ){
- if( fmtset ){
- astError( AST__PLFMT, "%s(%s): No numerical labels can be produced "
- "for axis %d using the supplied %s format string '%s'.", status,
- method, class, axis + 1, astGetClass( frame ),
- astGetFormat( frame, axis ) );
- } else {
- astError( AST__PLFMT, "%s(%s): No suitable format can be found to "
- "produce numerical labels for axis %d of a %s.", status,
- method, class, axis + 1, astGetClass( frame ) );
- }
- }
-
-/* Release any remaining resources. */
- frame = astAnnul( frame );
- if( used_fmt ) used_fmt = astFree( used_fmt );
-
-/* If an error has occurred, release the returned information. */
- if( !astOK ){
- ticks = (double *) astFree( (void *) ticks );
- minticks = (double *) astFree( (void *) minticks );
- if( labels ){
- for( i = 0; i < nmajor; i++ ) {
- labels[ i ] = (char *) astFree( (void *) labels[ i ] );
- }
- labels = (char **) astFree( (void *) labels );
- if( ret ) (void ) astFree( (void *) ret->fmt );
- }
- ret = (TickInfo *) astFree( (void *) ret );
- }
-
-/* Return the structure. */
- return ret;
-
-/* Undefine local constants. */
-#undef MAXFLD
-
-}
-
-static int TraceBorder( AstPlot *this, AstMapping *map, double xlo, double xhi,
- double ylo, double yhi, int dim, double tol,
- int edges[ 4 ], const char *method, const char *class,
- int *status ) {
-/*
-* Name:
-* TraceBorder
-
-* Purpose:
-* Trace the boundary between good and bad physical coordinates through a
-* fine grid.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int TraceBorder( AstPlot *this, AstMapping *map, double xlo, double xhi,
-* double ylo, double yhi, int dim, double tol,
-* int edges[ 4 ], const char *method, const char *class,
-* int *status ) {
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* A rectangular grid of points in graphics coords is created covering
-* the region specified by (xlo,xhi,ylo,yhi), using "dim" points along
-* each axis. This grid of points is converted into physical (WCS)
-* coords, and a flag is associatred with each point saying whether
-* the WCS coords are good or bad. The cells in this grid are then
-* scanned from bottom left to top right in raster fashion (each cell
-* has a grid point at each of its 4 corners). If a cell has a mix of
-* bad and good corners, the good/bad boundary must pass through it.
-* If the grid is sufficiently fine (as defined by "tol") then this
-* function draws a single straight line through each cell as an
-* approximation to the good bad boundary. This line joins the centres
-* of the two cells edges through which the boundary passes (as
-* indicated by the fact that one end of the edge has good WCS coords
-* and the other end has bad WCS coords). If the grid is not
-* sufficiently fine to meet the "tol" requirement, then this function
-* is invoked recursively to draw the curve through each cell through
-* which the boundary passes.
-
-* Parameters:
-* this
-* The plot.
-* map
-* The Graphics->WCS mapping.
-* xlo
-* The lower bounds on the graphics X axis of the rectangle being
-* considered.
-* xhi
-* The upper bounds on the graphics X axis of the rectangle being
-* considered.
-* ylo
-* The lower bounds on the graphics Y axis of the rectangle being
-* considered.
-* yhi
-* The upper bounds on the graphics Y axis of the rectangle being
-* considered.
-* dim
-* The number of points along one edge of the fine grid.
-* tol
-* The plotting tolerance. Once each cell is smaller than this
-* distance (in graphics coords), the cell is drawn. Otherwise,
-* this function is invoked recursively to draw the cell using a
-* finer grid.
-* edges
-* A pointer to an array of 4 int, in which will be returned
-* flags indicating if the good/bad boundary intersects any of the
-* edges of the grid. These flags are stored in the order left,
-* top, right, bottom.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstPointSet *pset1;
- AstPointSet *pset2;
- double **ptr2;
- double *px1;
- double *px2;
- double *py1;
- double *py2;
- double cxhi;
- double cxlo;
- double cyhi;
- double cylo;
- double dx;
- double dy;
- float xc;
- float yc;
- int *bndry;
- int *drawn;
- int bad1;
- int bad2;
- int bad3;
- int bad4;
- int icell;
- int icol;
- int irow;
- int lastcell;
- int ncell;
- int recurse;
- int result;
- int sedges[ 4 ];
- int totcells;
-
-/* Initialise returned edge flags */
- edges[ 0 ] = 0;
- edges[ 1 ] = 0;
- edges[ 2 ] = 0;
- edges[ 3 ] = 0;
-
-/* Initialise the returned flag to indicate that no bad regions were
- found. */
- result = 0;
-
-/* Check the global status. */
- if ( !astOK ) return result;
-
-/* Create a grid of graphics and WCS coords covering the specified region
- of graphics coords. "ptr2" is used to access the WCS coords at each
- point in the grid. */
- ptr2 = MakeGrid( this, NULL, map, 0, dim, xlo, xhi, ylo, yhi,
- 2, &pset1, &pset2, 0, method, class, status );
-
-/* The number of cells along each axis of the grid is one less than the
- number of points. Also get the number of cells in the whole grid. */
- ncell = dim - 1;
- totcells = ncell*ncell;
-
-/* Store the dimensions of each cell in graphics coords. */
- dx = ( xhi - xlo )/ncell;
- dy = ( yhi - ylo )/ncell;
-
-/* Set a flag indicating if the cell size is larger than the required
- plotting tolerance. If so, we will call this function recursively to
- draw the curve using a finer grid. */
- recurse = ( dx > tol || dy > tol );
-
-/* If we have not yet reached the plotting tolerance, allocate work arrays
- with one element for each cell in the grid. */
- if( recurse ) {
- bndry = astMalloc( sizeof( int )*totcells );
- drawn = astMalloc( sizeof( int )*totcells );
- } else {
- bndry = NULL;
- drawn = NULL;
- }
-
-/* Check pointers can be used safely. */
- if( astOK ) {
-
-/* If required, initialise work arrays to hold zero. */
- if( recurse ) {
-
-/* Initialise "boundary passes through cell" flags to zero. */
- memset( bndry, 0, sizeof( int )*totcells );
-
-/* Initialise "cell has been drawn" flags to zero. */
- memset( drawn, 0, sizeof( int )*totcells );
- }
-
-/* Store the Y graphics coords at the bottom and top of the first row. */
- cylo = ylo;
- cyhi = ylo + dy;
-
-/* Store pointers to the physical coords at the bottom left corner of the
- first cell in the first row. */
- px1 = ptr2[ 0 ];
- py1 = ptr2[ 1 ];
-
-/* Store pointers to the physical coords at the top left corner of the
- first cell in the first row. */
- px2 = px1 + dim;
- py2 = py1 + dim;
-
-/* Store the index of the last cell in a row or column. */
- lastcell = ncell - 1;
-
-/* Initialise index of next cell. */
- icell = 0;
-
-/* Loop round every row of cells in this grid. */
- for( irow = 0; irow < ncell; irow++ ) {
-
-/* See if the physical coords are bad at the bottom left corner of the
- first cell in this row. At the same time, increment the pointers so
- they refer to the bottom right corner of the first cell in this row. */
- bad1 = ( *px1 == AST__BAD || *py1 == AST__BAD );
-
-/* Increment the pointers. Do not do it in the above "if" statement since
- the or (!!) means that the second expression may never be evaluated. */
- px1++;
- py1++;
-
-/* See if the physical coords are bad at the top left corner of the
- first cell in this row. At the same time, increment the pointers so
- they refer to the top right corner of the first cell in this row. */
- bad2 = ( *px2 == AST__BAD || *py2 == AST__BAD );
- px2++;
- py2++;
-
-/* Loop round every cell in the current row of cells. */
- for( icol = 0; icol < ncell; icol++, icell++ ) {
-
-/* See if the physical coords are bad at the bottom right corner of the
- current cell in this row. At the same time, increment the pointers so
- they refer to the bottom right corner of the next cell in this row. */
- bad3 = ( *px1 == AST__BAD || *py1 == AST__BAD );
- px1++;
- py1++;
-
-/* See if the physical coords are bad at the top right corner of the
- current cell in this row. At the same time, increment the pointers so
- they refer to the top right corner of the next cell in this row. */
- bad4 = ( *px2 == AST__BAD || *py2 == AST__BAD );
- px2++;
- py2++;
-
-/* Set the returned flag non-zero if any invalidpositions are found. */
- if( bad1 || bad2 || bad3 || bad4 ) result = 1;
-
-/* If there are a mixture of good and bad corners, the good/bad boundary
- must pass through the current cell. */
- if( bad2 != bad1 || bad3 != bad1 || bad4 != bad1 ) {
-
-/* If we have not yet reached the required plotting tolerance, set a flag
- to indicate that the boundary should be plotted through this cell
- using a recirsive call to this function. */
- if( recurse ) {
- bndry[ icell ] = 1;
-
-/* If we have reached the required plotting tolerance, draw the boundary
- as a straight line between the centres of the edges through which the
- boundary enteres and leaves the current cell. */
- } else {
-
-/* Get the upper and lower graphics X bounds of the current cell. */
- cxlo = xlo + icol*dx;
- cxhi = cxlo + dx;
-
-/* If an edge of the current cell has good coords at one end but bad
- coords at the other, the boundary is assumed to pass through the edge
- at its centre. Normally, we expect only two cell edges to have this
- property (i.e the boundary enters the cell through one edge and leaves
- through the other). However, sometimes all four edges may have this
- property. In this case, two sections of the boundary must pass through
- the cell, and there is no way of knowing which edges connect together
- (short of further recursion), and we arbitrarily decide to join opposite
- edges. */
- if( bad1 == bad4 && bad2 == bad3 ) {
-
-/* Draw a horizontal line through the cell centre */
- yc = 0.5*( cylo + cyhi );
- Bpoly( this, (float) cxlo, yc, method, class, status );
- Apoly( this, (float) cxhi, yc, method, class, status );
-
-/* Draw a vertical line through the cell centre */
- xc = 0.5*( cxlo + cxhi );
- Bpoly( this, xc, (float) cylo, method, class, status );
- Apoly( this, xc, (float) cyhi, method, class, status );
-
-/* If the boundary passes through the left hand edge, it must also have
- passed through the right edge of the previous cell in the row (unless
- this is the first cell in the row), so we do not need to begin a new
- polyline (we can just extend the existing polyline). */
- } else if( bad1 != bad2 ) {
-
-/* If this is the first cell in the row, begin a new polyline. */
- yc = 0.5*( cylo + cyhi );
- if( icol == 0 ) Bpoly( this, (float) cxlo, yc, method, class, status );
-
-/* and through the top edge, draw a line between the centres of the left
- and top edges. */
- if( bad2 != bad4 ) {
- xc = 0.5*( cxlo + cxhi );
- Apoly( this, xc, (float) cyhi, method, class, status );
-
-/* or through the right edge, draw a line between the centres of the left
- and right edges. */
- } else if( bad3 != bad4 ) {
- Apoly( this, (float) cxhi, yc, method, class, status );
-
-/* Otherwise, draw a line between the centres of the left and bottom edges. */
- } else {
- xc = 0.5*( cxlo + cxhi );
- Apoly( this, xc, (float) cylo, method, class, status );
- }
-
-/* If the boundary passes through the top edge (we do not need to check
- the left edge because that was done above)... */
- } else if( bad4 != bad2 ) {
-
-/* and through the right edge, draw a line between the centres of the top
- and right edges. */
- if( bad3 != bad4 ) {
- xc = 0.5*( cxlo + cxhi );
- yc = 0.5*( cylo + cyhi );
- Bpoly( this, xc, (float) cyhi, method, class, status );
- Apoly( this, (float) cxhi, yc, method, class, status );
-
-/* Otherwise, draw a line between the centres of the top and bottom edges. */
- } else {
- xc = 0.5*( cxlo + cxhi );
- Bpoly( this, xc, (float) cyhi, method, class, status );
- Apoly( this, xc, (float) cylo, method, class, status );
- }
-
-/* If the boundary passes through the right edge it must also pass
- throught the bottom edge since all other combinations will have been
- trapped above. */
- } else {
- xc = 0.5*( cxlo + cxhi );
- yc = 0.5*( cylo + cyhi );
- Bpoly( this, xc, (float) cylo, method, class, status );
- Apoly( this, (float) cxhi, yc, method, class, status );
- }
-
-/* If the current cell is on the edge of the grid, set flags in the
- returned "edges" array to indicate that the boundary passes out of
- the grid on the appropriate edge. */
- if( icol == 0 ) {
- if( bad1 != bad2 ) edges[ 0 ] = 1; /* Left edge */
- } else if( icol == lastcell ) {
- if( bad3 != bad4 ) edges[ 2 ] = 1; /* Right edge */
- }
-
- if( irow == 0 ) {
- if( bad1 != bad3 ) edges[ 3 ] = 1; /* Bottom edge */
- } else if( irow == lastcell ) {
- if( bad2 != bad4 ) edges[ 1 ] = 1; /* Top edge */
- }
- }
- }
-
-/* The flags for the right hand corners of the current cell can be
- re-used as the flags for the left hand corners of the next cell. */
- bad1 = bad3;
- bad2 = bad4;
- }
-
-/* Store the Y graphics coords at the bottom and top of the next row. */
- cylo = cyhi;
- cyhi = cylo + dy;
- }
-
-/* If we have not yet reached the required plotting tolerance, call this
- function recursively to draw the boundary through the cells identified
- above. On each pass through this loop, we may discover more boundary
- cells in the grid, in addition to those found above. Continue looping
- until no further boundary cells are found. */
- while( recurse ) {
-
-/* Assume that the current pass though this loop will result in all boundary
- cells being draw, in which case we can then leave the loop. */
- recurse = 0;
-
-/* Store the Y graphics coords at the bottom and top of the first row. */
- cylo = ylo;
- cyhi = ylo + dy;
-
-/* Initialise the cell index */
- icell = 0;
-
-/* Loop round every row of cells in this grid. */
- for( irow = 0; irow < ncell; irow++ ) {
-
-/* Loop round every cell in the current row of cells. */
- for( icol = 0; icol < ncell; icol++, icell++ ) {
-
-/* If the good/bad boundary passes through the current cell we need to
- draw it unless it has already been drawn. */
- if( bndry[ icell ] && ! drawn[ icell ] ){
-
-/* Get the upper and lower graphics X bounds of the current cell. */
- cxlo = xlo + icol*dx;
- cxhi = cxlo + dx;
-
-/* Call this function recursively to draw the boundary through the current
- cell, setting the returned flag non-zero if any bad positions are found. */
- if( TraceBorder( this, map, cxlo, cxhi, cylo, cyhi, 3, tol,
- sedges, method, class, status ) ) result = 1;
-
-/* The boundary may have passed out of the current cell and then back
- into the cell on the same edge (i.e. a small loop that pokes out into
- a neighbouring cell). Such neighbouring cells may not have been
- identified by the earlier section of this function, so we now ensure
- that any such cells are flagged as boundary cells. */
-
-/* If the boundary passed out of the left edge of the cell... */
- if( sedges[ 0 ] ) {
-
-/* If the current cell is at the left edge of the grid, indicate that the
- boundary passes out of the left edge of the grid. */
- if( icol == 0 ) {
- edges[ 0 ] = 1; /* Left edge */
-
-/* Otherwise, if the left hand neighbour of the current cell is not
- flagged as a boundary cell, flag it now and indicate that another pass
- though the loop is needed to draw the extra cell. */
- } else if( ! bndry[ icell - 1 ] ) {
- bndry[ icell - 1 ] = 1;
- recurse = 1;
- }
- }
-
-/* If the boundary passed out of the top edge of the cell... */
- if( sedges[ 1 ] ) {
-
-/* If the current cell is at the top edge of the grid, indicate that the
- boundary passes out of the top edge of the grid. */
- if( irow == lastcell ) {
- edges[ 1 ] = 1; /* Top edge */
-
-/* Otherwise, ensure that the upper neighbour of the current cell is
- flagged as a boundary cell. */
- } else {
- bndry[ icell + ncell ] = 1;
- }
- }
-
-/* If the boundary passed out of the right edge of the cell... */
- if( sedges[ 2 ] ) {
-
-/* If the current cell is at the right edge of the grid, indicate that the
- boundary passes out of the right edge of the grid. */
- if( icol == lastcell ) {
- edges[ 2 ] = 1; /* Right edge */
-
-/* Otherwise, ensure that the right hand neighbour of the current cell is
- flagged as a boundary cell. */
- } else {
- bndry[ icell + 1 ] = 1;
- }
- }
-
-/* If the boundary passed out of the bottom edge of the cell... */
- if( sedges[ 3 ] ) {
-
-/* If the current cell is at the bottom edge of the grid, indicate that the
- boundary passes out of the bottom edge of the grid. */
- if( irow == 0 ) {
- edges[ 3 ] = 1; /* Bottom edge */
-
-/* Otherwise, if the lower neighbour of the current cell is not flagged
- as a boundary cell, flag it now and indicate that another pass though
- the loop is needed to draw the extra cell. */
- } else if( ! bndry[ icell - ncell ] ) {
- bndry[ icell - ncell ] = 1;
- recurse = 1;
- }
- }
-
-/* Indicate this cell has been drawn. */
- drawn[ icell ] = 1;
- }
- }
-
-/* Store the Y graphics coords at the bottom and top of the next row. */
- cylo += dy;
- cyhi = cylo + dy;
- }
- }
- }
-
-/* Free resources */
- bndry = astFree( bndry );
- drawn = astFree( drawn );
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
-
-/* Return the result. */
- return result;
-}
-
-static AstPointSet *Trans( AstPlot *this, AstFrame *frm, AstMapping *mapping,
- AstPointSet *in, int forward, AstPointSet *out,
- int norm, const char *method, const char *class, int *status ) {
-/*
-* Name:
-* Trans
-
-* Purpose:
-* Use a Mapping to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* AstPointSet *Trans( AstPlot *this, AstFrame *frm, AstMapping *mapping,
-* AstPointSet *in, int forward, AstPointSet *out,
-* int norm, const char *method, const char *class )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This performs the same task as the protected method astTransform
-* but uses the astTransform method for the supplied Mapping instead
-* the parent method for the Plot. This allows the Mapping to be
-* extracted from the Plot using astGetMapping once, rather than every
-* time a mapping is performed.
-
-* Parameters:
-* this
-* Pointer to the Plot (only used to access clipping attributes and
-* other methods).
-* frm
-* Pointer to the Current Frame in the Plot. If this is NULL, then
-* a pointer for the Current Frame is found within this function if
-* required (i.e. if "forward" and "norm" are both non-zero).
-* mapping
-* Pointer to the Mapping extracted from the Plot. If this is NULL, then
-* a pointer for the base->current Mapping is found within this function.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate
-* transformation should be applied while a zero value requests the
-* inverse transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* norm
-* The normalisation of returned physical coordinates is only done
-* if "norm" is non-zero. Otherwise they are left as returned by
-* astTransform.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - Clipping is only performed as set up using the astClip method.
-* In particular, the clipping specified by the arguments to the astPlot
-* constructor function is NOT performed. This is done in order to improve
-* the efficiency of the curve drawing method astGridLine.
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of coordinates for the Plot being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstFrame *cfr; /* Pointer to the Current Frame */
- AstFrame *fr; /* Pointer to the clipping Frame */
- AstMapping *map; /* Pointer to output->clip mapping */
- AstPointSet *clip; /* Positions in clipping Frame */
- AstPointSet *result; /* Positions in output Frame */
- double **ptr_clip; /* Pointer to clipping Frame data */
- double **ptr_out; /* Pointer to output coordinate data */
- double *work; /* Pointer to array holding an o/p position */
- double axval; /* Axis value in clipping frame */
- double lbnd; /* Lower bound on current clipping axis */
- double ubnd; /* Upper bound on current clipping axis */
- int axin; /* Is the axis value within the allowed range? */
- int clip_norm; /* Normalise the clipping positions? */
- int clip_or; /* Combine axes using a logical OR? */
- int clipit; /* Should the current point be clipped? */
- int i; /* Point index */
- int iframe; /* Validated index for clipping Frame */
- int j; /* Axis index */
- int naxes; /* Number of axes in clipping Frame */
- int ncoord_out; /* Number of coordinates per output point */
- int npoint; /* Number of points */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Ensure we have a Mapping */
- if( !mapping ) mapping = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent FrameSet class. */
- result = astTransform( mapping, in, forward, out );
-
-/* Get the dimensions of the returned data, and an array of pointers to
- the axis values. */
- ncoord_out = astGetNcoord( result );
- npoint = astGetNpoint( result );
- ptr_out = astGetPoints( result );
-
-/* If we have done a forward mapping, we now normalise the returned physical
- positions if required using the astNorm method for the supplied object. */
- if( forward && norm ){
-
-/* If no Frame was supplied, get a pointer to the Current Frame. Otherwise,
- use the supplied pointer. */
- if( !frm ) {
- cfr = astGetFrame( this, AST__CURRENT );
- } else {
- cfr = frm;
- }
-
-/* Get work space to hold a single positions. */
- work = (double *) astMalloc( sizeof(double)*(size_t)ncoord_out );
-
-/* Check the work space and axis pointers can be used. */
- if( astOK ){
-
-/* Now loop through every position, copying the axis values to the work array,
- normalising them using astNorm, and copying them back to the returned
- PointSet. */
- for( i = 0; i < npoint; i++ ){
- for( j = 0; j < ncoord_out; j++ ) work[ j ] = ptr_out[ j ][ i ];
- astNorm( cfr, work );
- for( j = 0; j < ncoord_out; j++ ) ptr_out[ j ][ i ] = work[ j ];
- }
- }
-
-/* Free the work space. */
- work = (double *) astFree( (void *) work );
-
-/* Annul the pointer to the Current Frame if it was obtained in this
- function. */
- if( !frm ) cfr = astAnnul( cfr );
-
- }
-
-/* Clipping is only performed if the bounds of a clipping region are
- available for both axes. */
- if( this->clip_lbnd && this->clip_ubnd ){
-
-/* Validate and translate the index of the clipping Frame. */
- iframe = astValidateFrameIndex( this, this->clip_frame, method );
-
-/* Obtain a pointer to the clipping Frame and determine how many axes it
- has. */
- fr = astGetFrame( this, iframe );
- naxes = astGetNaxes( fr );
-
-/* Report an error if the number of bounds does not equal the number of
- axes in the clipping Frame. */
- if( astOK && naxes != this->clip_axes ){
- astError( AST__CLPAX, "%s%s): The supplied %s specifies clipping "
- "in %d dimensions, but the clipping Frame ('%s') has "
- "%d axes.", status, method, class, class, this->clip_axes,
- astGetTitle( fr ), naxes );
- }
-
-/* Set a flag indicating if the coordinates in the clipping frame need to
- be normalised. */
- clip_norm = 1;
-
-/* We now obtain a pointer to a PointSet holding the corresponding
- coordinates in the clipping frame. If the clipping frame is the
- base frame, then take a clone of the PointSet holding base frame
- coordinates. */
- if( iframe == astGetBase( this ) ){
- if( forward ){
- clip = astClone( in );
- } else {
- clip = astClone( result );
- }
-
-/* If the clipping frame is the current frame, then take a clone of the
- PointSet holding current coordinates. Note, if the returned physical
- coordinates have already been normalised, we don't need to normalise
- the clipping coordinates. */
- } else if( iframe == astGetCurrent( this ) ){
- if( forward ){
- clip = astClone( result );
- if( norm ) clip_norm = 0;
- } else {
- clip = astClone( in );
- }
-
-/* If the clipping Frame is neither the base nor the current Frame, we need
- to map the returned normalised points into the clipping Frame. */
- } else {
- if( forward ){
- map = astGetMapping( this, AST__CURRENT, iframe );
- } else {
- map = astGetMapping( this, AST__BASE, iframe );
- }
- clip = astTransform( map, result, 1, NULL );
- map = astAnnul( map );
- }
-
-/* Get a pointer to the coordinate data in the clipping Frame. */
- ptr_clip = astGetPoints( clip );
-
-/* If necessary, normalise the coordinates in the clipping frame. */
- if( clip_norm ){
-
-/* Get work space to hold a single position. */
- work = (double *) astMalloc( sizeof(double)*(size_t)naxes );
-
-/* Check the work space and axis pointers can be used. */
- if( astOK ){
-
-/* Now loop through every position, copying the axis values to the work array,
- normalising them using astNorm, and copying them back to the clipping
- PointSet. */
- for( i = 0; i < npoint; i++ ){
- for( j = 0; j < naxes; j++ ) work[ j ] = ptr_clip[ j ][ i ];
- astNorm( fr, work );
- for( j = 0; j < naxes; j++ ) ptr_clip[ j ][ i ] = work[ j ];
- }
- }
-
-/* Free the work space. */
- work = (double *) astFree( (void *) work );
-
- }
-
-/* If all has gone ok, we will now clip the returned points. */
- if( astOK ){
-
-/* Get the logical operation to be used to determine if a point is to be
- clipped. A zero value means that a logical AND is to be performed
- between the axes (i.e. all axes must be within the supplied bounds for a
- point to be retained). A non-zero value means that a logical OR is to be
- performed between the axes (i.e. only a single axis need be within the
- supplied bounds for a point to be retained). */
- clip_or = astGetClipOp( this );
-
-/* Do each point in turn. */
- for( j = 0; j < npoint; j++ ){
-
-/* If all axes must fall within the supplied range to avoid the point being
- clipped (i.e. if clip_or is 0), then assume initially that the point
- is not to be clipped. This will be toggled as soon as the first
- out-of-bounds point is found. If, on the other hand, the point is
- only clipped if all axis values are out-of-bounds, then assume
- initially that the point is to be clipped. This will be toggled as
- soon as the first axis value is found which is not out-of-bounds. */
- clipit = clip_or;
-
-/* Check each axis value for the current point. */
- for( i = 0; i < naxes; i++ ){
- axval = ptr_clip[ i ][ j ];
-
-/* Chekc that it is not bad. */
- if( axval != AST__BAD ){
-
-/* Store the bounds of the clipping volume on this axis. */
- lbnd = this->clip_lbnd[ i ];
- ubnd = this->clip_ubnd[ i ];
-
-/* Set a flag indicating if the axis value is within the specified range.
- If the supplied bounds are reversed, they specify the range to exclude,
- otherwise they specify the range to include. */
- if( lbnd <= ubnd ){
- axin = ( axval >= lbnd && axval <= ubnd );
- } else {
- axin = ( axval < ubnd || axval > lbnd );
- }
-
-/* If the point is within the range and only one such point is
- required to avoid the point being clipped, indicate that the point
- should not be clipped, and leave the loop. */
- if( axin && clip_or ){
- clipit = 0;
- break;
-
-/* If the point is not within the range and we only one such point is
- required to cause the point to be clipped, indicate that the point
- should be clipped, and leave the loop. */
- } else if( !axin && !clip_or ){
- clipit = 1;
- break;
- }
-
-/* Clip the point if any axis value is bad in the clipping Frame. */
- } else {
- clipit = 1;
- break;
- }
-
- }
-
-/* If the point is to be clipped, set all returned axis values bad. */
- if( clipit ) {
- for( i = 0; i < naxes; i++ ) ptr_out[ i ][ j ] = AST__BAD;
- }
-
- }
-
- }
-
-/* Annul the PointSet holding clipping Frame positions. */
- if( clip ) clip = astAnnul( clip );
-
-/* Annul the clipping Frame pointer. */
- fr = astAnnul( fr );
-
- }
-
-/* If an error has occurred, annul the result. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
- return result;
-
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Use a Plot to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out )
-
-* Class Membership:
-* Plot member function (over-rides the astTransform protected
-* method inherited from the FrameSet class).
-
-* Description:
-* This function takes a Plot and a set of points encapsulated in a
-* PointSet and transforms the points from graphics coordinates to
-* physical coordinates (in the forward direction). If the returned
-* positions are physical coordinates (i.e. if a forward mapping is
-* performed) they are normalised using the astNorm method of the supplied
-* Plot. The returned axis values are set to AST__BAD for any positions
-* which are outside the clipping volume set up by the astClip method.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate
-* transformation should be applied while a zero value requests the
-* inverse transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - Clipping is only performed as set up using the astClip method.
-* In particular, the clipping specified by the arguments to the astPlot
-* constructor function is NOT performed. This is done in order to improve
-* the efficiency of the curve drawing method astGridLine.
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of coordinates for the Plot being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstMapping *map; /* Pointer to the mapping */
- AstPointSet *result; /* Positions in output Frame */
- AstPlot *plot; /* The Plot */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the Plot. */
- plot = (AstPlot *) this;
-
-/* Get the Mapping from the base to the current Frame. */
- map = astGetMapping( plot, AST__BASE, AST__CURRENT );
-
-/* Do the transformation. */
- result = Trans( plot, NULL, map, in, forward, out, 1, "astTransform",
- astGetClass( this ), status );
-
-/* Annul the mapping. */
- map = astAnnul( map );
-
-/* If an error has occurred, annul the result. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
- return result;
-
-}
-
-static double Typical( int n, double *value, double lolim, double hilim,
- double *width, int *status ) {
-/*
-* Name:
-* Typical
-
-* Purpose:
-* Return a typical value within the supplied array of values.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* double Typical( int n, double *value, double lolim, double hilim,
-* double *width, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This function locates the approximate mode of the supplied values,
-* and returns one of the supplied values which is close to the modal
-* value. Values outside an indicated range are ignored.
-
-* Parameters:
-* n
-* The number of data values.
-* value
-* A pointer to an array of "n" values.
-* lolim
-* Values less than lolim are ignored. Supply as -DBL_MAX if there
-* is no lower limit.
-* hilim
-* Values greater than hilim are ignored. Supply as DBL_MAX if there
-* is no upper limit.
-* width
-* Pointer to a double in which to return the width (i,e, data range)
-* of the non-empty histogram cells. This is an estimate of the
-* range of used values in the supplied array. NULL may be supplied.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A typical value from the supplied array. AST__BAD is returned only
-* if an error has occurred, or if all the supplied values are AST__BAD
-* or outside the specified range.
-
-*/
-
-/* Local Variables: */
- double *a; /* Pointer to next value */
- double cnt; /* Modified count */
- double delta; /* Bin size */
- double maxval; /* Maximum supplied value */
- double mean; /* Mean supplied value */
- double minval; /* Minimum supplied value */
- double result; /* The returned value. */
- double w0; /* Rate of increase of weight with dist from edge */
- double w1; /* Weight for left edge */
- double w2; /* Weight for right edge */
- double w; /* Weight for this bin */
- int *hist; /* Pointer to first cell of histogram array */
- int i; /* Loop count */
- int ibin; /* Bin index */
- int maxcnt; /* Maximum no. of values in any bin */
- int modify; /* Modify the effect of the edge bins? */
- int nbin; /* No. of bins in histogram */
- int nc; /* Total number of points in histogram */
- int ngood; /* No. of good values supplied */
- int nonemp; /* No. of non-empty bins in hstogram */
-
-/* Initialise. */
- result = AST__BAD;
- if( width ) *width = 0.0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- ibin = 0;
-
-/* Find the minimum and maximum value in the supplied array, which are
- also within the supplied limits. Also store the first good value
- encountered in "result". */
- minval = DBL_MAX;
- maxval = -DBL_MAX;
- a = value;
- ngood = 0;
- for( i = 0; i < n; i++, a++ ) {
- if( *a != AST__BAD ) {
- if( *a >= lolim && *a <= hilim ) {
- if( *a < minval ) minval = *a;
- if( *a > maxval ) maxval = *a;
- if( ngood == 0 ) result = *a;
- ngood++;
- }
- }
- }
-
-/* Initialise the returned width to the total data range. */
- if( width && maxval != -DBL_MAX ) *width = maxval - minval;
-
-/* If less than 3 points were found, we will return the first. Otherwise, if
- 3 or more good values were found, find a typical value. */
- if( ngood > 2 ) {
-
-/* We will form a histogram of the supplied values in order to find the
- mode. The number of bins in this histogram is chosen so that there
- is an average of 2 points per bin. Find the number of bins. */
- nbin = ( ngood + 1 )/2;
-
-/* Find the bin size. If zero (i.e. if all values are equal), return the
- first good value established above. */
- delta = ( maxval - minval )/ nbin;
- if( delta > 0.0 ) {
-
-/* Allocat ememory for the histogram. */
- hist = astMalloc( sizeof(int)*(size_t)nbin );
- if( hist ) {
-
-/* Initialise the histogram. */
- for( i = 0; i < nbin; i++ ) hist[ i ] = 0;
-
-/* Form the histogram. Form the mean data value at the same time. */
- mean = 0.0;
- a = value;
- nc = 0;
- for( i = 0; i < n; i++, a++ ){
- if( *a != AST__BAD ) {
- if( *a >= lolim && *a <= hilim ) {
- mean += *a;
- ibin = (int) ( ( *a - minval )/ delta );
- if( ibin == nbin ) ibin--;
- hist[ ibin ]++;
- nc++;
- }
- }
- }
-
- mean /= ngood;
-
-/* We tend to prefer not to use reference values which are very close the
- the limits since they can give problems with regard to normalization
- (rounding errors can knock them over the edge), so we modify the counts
- in each bin of the histogram to reduce the impact of bins near the edge.
- However, we do not do this if the number of bins is very small or if
- all the counts are in the edge bins. */
- modify = ( nbin > 4 &&
- ( hist[ 0 ] + hist[ nbin - 1 ] < 0.98*ngood ) );
-
-/* Find the bin with the highest modified count. If there is more than one bin
- with the highest modified count, choose the one which is closest to the
- mean data value found above. Also count the number of non-empty bins. */
- nonemp = 0;
- maxcnt = 0;
- w0 = nbin/2;
- for( i = 0; i < nbin; i++ ) {
-
- cnt = hist[ i ];
- if( cnt ) nonemp++;
-
- if( modify ) {
- w1 = i*w0;
- w2 = ( nbin - 1 - i )*w0;
- w = ( w1 < w2 ) ? w1 :w2;
- if( w < 1.0 ) cnt *= w;
- }
-
- if( cnt > maxcnt ) {
- maxcnt = cnt;
- ibin = i;
-
- } else if( cnt == maxcnt ) {
- if( fabs( minval + ( i - 0.5 )*delta - mean ) <
- fabs( minval + ( ibin - 0.5 )*delta - mean ) ) {
- maxcnt = cnt;
- ibin = i;
- }
- }
- }
-
-/* Free the histogram memory. */
- hist = astFree( hist );
-
-/* If required, return the width of the non-empty bins. */
- if( width ) *width = nonemp*delta;
-
-/* Call this function recursively to refine the value, restricting
- attention to those data values which are within the range of the bin
- found above. */
- if( maxcnt < nc && ibin*delta > 1000.0*DBL_EPSILON*fabs(maxval) ) {
- minval += ibin*delta;
- maxval = minval + delta;
- result = Typical( n, value, minval, maxval, NULL, status );
- }
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static int GetUseColour( AstPlot *this, int id, int *status ) {
-/*
-* Name:
-* GetUseColour
-
-* Purpose:
-* Get the Colour value to use for a specified graphical element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int GetUseColour( AstPlot *this, int id, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This returns the Colour value for the graphical element specified by
-* id. If an element related to a generic value is being accessed (e.g
-* "Axes" is generic, "Axis1" and "Axis2" are not), then the colour
-* for the first set specific value is returned. For example, if the
-* Colour for AST__AXES_ID is requested, then the colour for AST__AXIS1_ID
-* will be returned if set, and otherwise the colour for AST__AXIS2_ID will
-* be returned. If AST__AXIS2_ID is not set either, then the default for
-* AST__AXIS2_ID will be returned.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* id
-* An integer specifying the graphical element to be drawn.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Colour value to use.
-
-*/
-
-/* Local Variables: */
- int id1; /* First genuine identifier */
- int id2; /* Second genuine identifier */
- int id3; /* Third genuine identifier */
- int nid; /* Number of genuine attributes */
-
-/* Check the global error status. */
- if ( !astOK ) return NOCOLOUR;
-
-/* See if the supplied identifier is a psuedo-identifier representing two
- or three other genuine identifiers. If so, return the value of the first
- set genuine identifier. */
- nid = IdFind( id, astGetNin( this ), &id1, &id2, &id3, status );
- if( nid > 1 ) {
- if( astTestColour( this, id1 ) ) {
- id = id1;
-
- } else if( nid > 1 && astTestColour( this, id2 ) ) {
- id = id2;
-
- } else if( nid > 2 && astTestColour( this, id3 ) ) {
- id = id3;
-
- } else {
- id = id1;
- }
- }
-
-/* Return the result. */
- return astGetColour( this, id );
-
-}
-
-static int GetUseFont( AstPlot *this, int id, int *status ) {
-/*
-* Name:
-* GetUseFont
-
-* Purpose:
-* Get the Font value to use for a specified graphical element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int GetUseFont( AstPlot *this, int id, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This returns the Font value for the graphical element specified by
-* id. If an element related to a generic value is being accessed (e.g
-* "Axes" is generic, "Axis1" and "Axis2" are not), then the Font
-* for the first set specific value is returned. For example, if the
-* Font for AST__AXES_ID is requested, then the Font for AST__AXIS1_ID
-* will be returned if set, and otherwise the Font for AST__AXIS2_ID will
-* be returned. If AST__AXIS2_ID is not set either, then the default for
-* AST__AXIS2_ID will be returned.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* id
-* An integer specifying the graphical element to be drawn.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Font value to use.
-
-*/
-
-/* Local Variables: */
- int id1; /* First genuine identifier */
- int id2; /* Second genuine identifier */
- int id3; /* Third genuine identifier */
- int nid; /* Number of genuine attributes */
-
-/* Check the global error status. */
- if ( !astOK ) return NOFONT;
-
-/* See if the supplied identifier is a psuedo-identifier representing two
- or three other genuine identifiers. If so, return the value of the first set
- genuine identifier. */
- nid = IdFind( id, astGetNin( this ), &id1, &id2, &id3, status );
- if( nid > 1 ) {
- if( astTestFont( this, id1 ) ) {
- id = id1;
-
- } else if( nid > 1 && astTestFont( this, id2 ) ) {
- id = id2;
-
- } else if( nid > 2 && astTestFont( this, id3 ) ) {
- id = id3;
-
- } else {
- id = id1;
- }
- }
-
-/* Return the result. */
- return astGetFont( this, id );
-
-}
-
-static double GetUseSize( AstPlot *this, int id, int *status ) {
-/*
-* Name:
-* GetUseSize
-
-* Purpose:
-* Get the Size value to use for a specified graphical element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* double GetUseSize( AstPlot *this, int id, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This returns the Size value for the graphical element specified by
-* id. If an element related to a generic value is being accessed (e.g
-* "Axes" is generic, "Axis1" and "Axis2" are not), then the Size
-* for the first set specific value is returned. For example, if the
-* Size for AST__AXES_ID is requested, then the Size for AST__AXIS1_ID
-* will be returned if set, and otherwise the Size for AST__AXIS2_ID will
-* be returned. If AST__AXIS2_ID is not set either, then the default for
-* AXIS2_ID will be returned.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* id
-* An integer specifying the graphical element to be drawn.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Size value to use.
-
-*/
-
-/* Local Variables: */
- int id1; /* First genuine identifier */
- int id2; /* Second genuine identifier */
- int id3; /* Third genuine identifier */
- int nid; /* Number of genuine attributes */
-
-/* Check the global error status. */
- if ( !astOK ) return NOSIZE;
-
-/* See if the supplied identifier is a psuedo-identifier representing two
- or three other genuine identifiers. If so, return the value of the first set
- genuine identifier. */
- nid = IdFind( id, astGetNin( this ), &id1, &id2, &id3, status );
- if( nid > 1 ) {
- if( astTestSize( this, id1 ) ) {
- id = id1;
-
- } else if( nid > 1 && astTestSize( this, id2 ) ) {
- id = id2;
-
- } else if( nid > 2 && astTestSize( this, id3 ) ) {
- id = id3;
-
- } else {
- id = id1;
- }
- }
-
-/* Return the result. */
- return astGetSize( this, id );
-
-}
-
-static int GetUseStyle( AstPlot *this, int id, int *status ) {
-/*
-* Name:
-* GetUseStyle
-
-* Purpose:
-* Get the Style value to use for a specified graphical element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int GetUseStyle( AstPlot *this, int id, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This returns the Style value for the graphical element specified by
-* id. If an element related to a generic value is being accessed (e.g
-* "Axes" is generic, "Axis1" and "Axis2" are not), then the style
-* for the first set specific value is returned. For example, if the
-* Style for AST__AXES_ID is requested, then the style for AST__AXIS1_ID
-* will be returned if set, and otherwise the style for AST__AXIS2_ID will
-* be returned. If AST__AXIS2_ID is not set either, then the default for
-* AST__AXIS2_ID will be returned.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* id
-* An integer specifying the graphical element to be drawn.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Style value to use.
-
-*/
-
-/* Local Variables: */
- int id1; /* First genuine identifier */
- int id2; /* Second genuine identifier */
- int id3; /* Third genuine identifier */
- int nid; /* Number of genuine attributes */
-
-/* Check the global error status. */
- if ( !astOK ) return NOSTYLE;
-
-/* See if the supplied identifier is a psuedo-identifier representing two
- or three other genuine identifiers. If so, return the value of the first set
- genuine identifier. */
- nid = IdFind( id, astGetNin( this ), &id1, &id2, &id3, status );
- if( nid > 1 ) {
- if( astTestStyle( this, id1 ) ) {
- id = id1;
-
- } else if( nid > 1 && astTestStyle( this, id2 ) ) {
- id = id2;
-
- } else if( nid > 2 && astTestStyle( this, id3 ) ) {
- id = id3;
-
- } else {
- id = id1;
- }
- }
-
-/* Return the result. */
- return astGetStyle( this, id );
-
-}
-
-static double GetUseWidth( AstPlot *this, int id, int *status ) {
-/*
-* Name:
-* GetUseWidth
-
-* Purpose:
-* Get the Width value to use for a specified graphical element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* double GetUseWidth( AstPlot *this, int id, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This returns the Width value for the graphical element specified by
-* id. If an element related to a generic value is being accessed (e.g
-* "Axes" is generic, "Axis1" and "Axis2" are not), then the Width
-* for the first set specific value is returned. For example, if the
-* Width for AST__AXES_ID is requested, then the Width for AST__AXIS1_ID
-* will be returned if set, and otherwise the Width for AST__AXIS2_ID will
-* be returned. If AST__AXIS2_ID is not set either, then the default for
-* AST__AXIS2_ID will be returned.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* id
-* An integer specifying the graphical element to be drawn.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Width value to use.
-
-*/
-
-/* Local Variables: */
- int id1; /* First genuine identifier */
- int id2; /* Second genuine identifier */
- int id3; /* Third genuine identifier */
- int nid; /* Number of genuine attributes */
-
-/* Check the global error status. */
- if ( !astOK ) return NOWIDTH;
-
-/* See if the supplied identifier is a psuedo-identifier representing two
- or three other genuine identifiers. If so, return the value of the first set
- genuine identifier. */
- nid = IdFind( id, astGetNin( this ), &id1, &id2, &id3, status );
- if( nid > 1 ) {
- if( astTestWidth( this, id1 ) ) {
- id = id1;
-
- } else if( nid > 1 && astTestWidth( this, id2 ) ) {
- id = id2;
-
- } else if( nid > 2 && astTestWidth( this, id3 ) ) {
- id = id3;
-
- } else {
- id = id1;
- }
- }
-
-/* Return the result. */
- return astGetWidth( this, id );
-
-}
-
-static int TestUseColour( AstPlot *this, int id, int *status ) {
-/*
-* Name:
-* TestUseColour
-
-* Purpose:
-* Test the Colour value for a specified graphical element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int TestUseColour( AstPlot *this, int id, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This tests the Colour value for the graphical element specified by
-* id. If an element related to a generic value is being accessed (e.g
-* "Axes" is generic, "Axis1" and "Axis2" are not), then the element
-* is considered to be set if all the corresponding specific values are
-* set.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* id
-* An integer specifying the graphical element to be drawn.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Colour value state (1 if set, zero otherwise).
-
-*/
-
-/* Local Variables: */
- int ret;
-
-/* Local Variables: */
- int id1; /* First genuine identifier */
- int id2; /* Second genuine identifier */
- int id3; /* Third genuine identifier */
- int nid; /* Number of genuine attributes */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* See if the supplied identifier is a psuedo-identifier representing two
- or three other genuine identifiers. If so, return the logical AND of the
- test flags for the genuine identifiers. */
- nid = IdFind( id, astGetNin( this ), &id1, &id2, &id3, status );
- ret = astTestColour( this, id1 );
- if( nid > 1 ) ret = ret && astTestColour( this, id2 );
- if( nid > 2 ) ret = ret && astTestColour( this, id3 );
-
-/* Return the result. */
- return ret;
-
-}
-
-static int TestUseFont( AstPlot *this, int id, int *status ) {
-/*
-* Name:
-* TestUseFont
-
-* Purpose:
-* Test the Font value for a specified graphical element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int TestUseFont( AstPlot *this, int id, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This tests the Font value for the graphical element specified by
-* id. If an element related to a generic value is being accessed (e.g
-* "Axes" is generic, "Axis1" and "Axis2" are not), then the element
-* is considered to be set if all the corresponding specific values are
-* set.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* id
-* An integer specifying the graphical element to be drawn.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Font value state (1 if set, zero otherwise).
-
-*/
-
-/* Local Variables: */
- int ret;
-
-/* Local Variables: */
- int id1; /* First genuine identifier */
- int id2; /* Second genuine identifier */
- int id3; /* Third genuine identifier */
- int nid; /* Number of genuine attributes */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* See if the supplied identifier is a psuedo-identifier representing two
- or three other genuine identifiers. If so, return the logical AND of the
- test flags for the genuine identifiers. */
- nid = IdFind( id, astGetNin( this ), &id1, &id2, &id3, status );
- ret = astTestFont( this, id1 );
- if( nid > 1 ) ret = ret && astTestFont( this, id2 );
- if( nid > 2 ) ret = ret && astTestFont( this, id3 );
-
-/* Return the result. */
- return ret;
-
-}
-
-static int TestUseSize( AstPlot *this, int id, int *status ) {
-/*
-* Name:
-* TestUseSize
-
-* Purpose:
-* Test the Size value for a specified graphical element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int TestUseSize( AstPlot *this, int id, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This tests the Size value for the graphical element specified by
-* id. If an element related to a generic value is being accessed (e.g
-* "Axes" is generic, "Axis1" and "Axis2" are not), then the element
-* is considered to be set if all the corresponding specific values are
-* set.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* id
-* An integer specifying the graphical element to be drawn.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Size value state (1 if set, zero otherwise).
-
-*/
-
-/* Local Variables: */
- int ret;
-
-/* Local Variables: */
- int id1; /* First genuine identifier */
- int id2; /* Second genuine identifier */
- int id3; /* Third genuine identifier */
- int nid; /* Number of genuine attributes */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* See if the supplied identifier is a psuedo-identifier representing two
- or three other genuine identifiers. If so, return the logical AND of the
- test flags for the genuine identifiers. */
- nid = IdFind( id, astGetNin( this ), &id1, &id2, &id3, status );
- ret = astTestSize( this, id1 );
- if( nid > 1 ) ret = ret && astTestSize( this, id2 );
- if( nid > 2 ) ret = ret && astTestSize( this, id3 );
-
-/* Return the result. */
- return ret;
-
-}
-
-static int TestUseStyle( AstPlot *this, int id, int *status ) {
-/*
-* Name:
-* TestUseStyle
-
-* Purpose:
-* Test the Style value for a specified graphical element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int TestUseStyle( AstPlot *this, int id, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This tests the Style value for the graphical element specified by
-* id. If an element related to a generic value is being accessed (e.g
-* "Axes" is generic, "Axis1" and "Axis2" are not), then the element
-* is considered to be set if all the corresponding specific values are
-* set.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* id
-* An integer specifying the graphical element to be drawn.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Style value state (1 if set, zero otherwise).
-
-*/
-
-/* Local Variables: */
- int ret;
-
-/* Local Variables: */
- int id1; /* First genuine identifier */
- int id2; /* Second genuine identifier */
- int id3; /* Third genuine identifier */
- int nid; /* Number of genuine attributes */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* See if the supplied identifier is a psuedo-identifier representing two
- or three other genuine identifiers. If so, return the logical AND of the
- test flags for the genuine identifiers. */
- nid = IdFind( id, astGetNin( this ), &id1, &id2, &id3, status );
- ret = astTestStyle( this, id1 );
- if( nid > 1 ) ret = ret && astTestStyle( this, id2 );
- if( nid > 2 ) ret = ret && astTestStyle( this, id3 );
-
-/* Return the result. */
- return ret;
-
-}
-
-static int TestUseWidth( AstPlot *this, int id, int *status ) {
-/*
-* Name:
-* TestUseWidth
-
-* Purpose:
-* Test the Width value for a specified graphical element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int TestUseWidth( AstPlot *this, int id, int *status )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* This tests the Width value for the graphical element specified by
-* id. If an element related to a generic value is being accessed (e.g
-* "Axes" is generic, "Axis1" and "Axis2" are not), then the element
-* is considered to be set if all the corresponding specific values are
-* set.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* id
-* An integer specifying the graphical element to be drawn.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Width value state (1 if set, zero otherwise).
-
-*/
-
-/* Local Variables: */
- int ret;
-
-/* Local Variables: */
- int id1; /* First genuine identifier */
- int id2; /* Second genuine identifier */
- int id3; /* Third genuine identifier */
- int nid; /* Number of genuine attributes */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* See if the supplied identifier is a psuedo-identifier representing two
- or three other genuine identifiers. If so, return the logical AND of the
- test flags for the genuine identifiers. */
- nid = IdFind( id, astGetNin( this ), &id1, &id2, &id3, status );
- ret = astTestWidth( this, id1 );
- if( nid > 1 ) ret = ret && astTestWidth( this, id2 );
- if( nid > 2 ) ret = ret && astTestWidth( this, id3 );
-
-/* Return the result. */
- return ret;
-
-}
-
-static int ToggleLogLin( AstPlot *this, int axis, int islog,
- const char *method, int *status ){
-/*
-*
-* Name:
-* ToggleLogLin
-
-* Purpose:
-* Toggle the nature of the Plot axis mapping.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int ToggleLogLin( AstPlot *this, int axis, int islog,
-* const char *method, int *status )
-
-* Class Membership:
-* Plot member function
-
-* Description:
-* Each axis in the graphics Frame of a Plot can be mapped linearly or
-* logarithmically onto the corresponding axis in the base Frame of
-* the FrameSet supplied whtn the Plot was constructed. This function
-* toggles the nature of the specified axis; if it is currently
-* logarithmic it becomes linear, and if it is linear it becomes
-* logarithmic.
-*
-* If the Frame canot be re-maped (for instance because the visible
-* part of the axis includes the value zero), then zero is returned
-* but no error is reported.
-
-* Parameters:
-* this
-* The Plot.
-* axis
-* Zero based axis index.
-* islog
-* Is the axis currently logarithmic? If so, this function remaps
-* it so that it is linear (and vice-versa).
-* method
-* Pointer to a null-terminated string holding the name of the calling
-* method (only used within error mesages).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the attempt to re-map the graphics Frame was succesful,
-* zero otherwise.
-
-*/
-
-/* Local Variables: */
- AstCmpMap *remap1; /* 1D Mapping to re-map the graphics Frame */
- AstCmpMap *remap2; /* 2D Mapping to re-map the graphics Frame */
- AstMathMap *logmap; /* 1D Logarithmic axis Mapping */
- AstUnitMap *unitmap; /* 1D Unit mapping */
- AstWinMap *linmap; /* 1D Linear axis Mapping */
- char fwdexp[ 25 + 2*DBL_DIG ]; /* Forward log mapping expression */
- char invexp[ 28 + 2*DBL_DIG ]; /* Inverse log mapping expression */
- const char *fwd[1]; /* Pointer to pass to MathMap constructor */
- const char *inv[1]; /* Pointer to pass to MathMap constructor */
- double a; /* Constant for log expression */
- double b1; /* Original base Frame axis value at first edge */
- double b2; /* Original base Frame axis value at second edge */
- double b; /* Constant for log expression */
- double c; /* Constant for log expression */
- double g1; /* Graphics axis value at first edge */
- double g2; /* Graphics axis value at second edge */
- int result; /* Returned value */
-
-/* Inotialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get the corresponding axis limits in the graphics coordinate system
- and the original base Frame coordinate system. */
- if( axis == 0 ) {
- if( this->xrev ) {
- g1 = this->xhi;
- g2 = this->xlo;
- } else {
- g1 = this->xlo;
- g2 = this->xhi;
- }
- b1 = this->bbox[ 0 ];
- b2 = this->bbox[ 2 ];
-
- } else {
- if( this->yrev ) {
- g1 = this->yhi;
- g2 = this->ylo;
- } else {
- g1 = this->ylo;
- g2 = this->yhi;
- }
- b1 = this->bbox[ 1 ];
- b2 = this->bbox[ 3 ];
- }
-
-/* Check the limits are usable (e.g. the base Frame values will be bad
- if this Plot was restored from a dump of a Plot created before the
- LogPlot attributes were added). */
- if( b1 != AST__BAD && b2 != AST__BAD && g1 != g2 && b1 != b2 &&
- b1*b2 > 0.0 ) {
-
-/* Form the 1D Mapping which maps the specified axis linearly onto the plotting
- surface. The forward transformation goes from graphics to base Frame. */
- linmap = astWinMap( 1, &g1, &g2, &b1, &b2, "", status );
-
-/* Form the 1D Mapping which maps the specified axis logarithmically onto the
- plotting surface. The forward transformation goes from graphics to base
- Frame. */
- c = log10( b1/b2 );
- a = ( g1 - g2 )/c;
-
- if( b1 > 0.0 ) {
- b = ( g2*log10( b1 ) - g1*log10( b2 ) )/c;
- (void) sprintf( invexp, "g=%.*g*log10(b)+%.*g", DBL_DIG, a, DBL_DIG, b );
- (void) sprintf( fwdexp, "b=pow(10,(g-%.*g)/%.*g)", DBL_DIG, b, DBL_DIG, a );
-
- } else {
- b = ( g2*log10( -b1 ) - g1*log10( -b2 ) )/c;
- (void) sprintf( invexp, "g=%.*g*log10(-b)+%.*g", DBL_DIG, a, DBL_DIG, b );
- (void) sprintf( fwdexp, "b=-pow(10,(g-%.*g)/%.*g)", DBL_DIG, b, DBL_DIG, a );
- }
-
- fwd[ 0 ] = (const char *) fwdexp;
- inv[ 0 ] = (const char *) invexp;
- logmap = astMathMap( 1, 1, 1, fwd, 1, inv, "SimpFI=1,SimpIF=1", status );
-
-/* If the axis was previously logarithmic, get the Mapping with which to remap
- the graphics Frame so that it becomes linearly related to the base Frame
- in the FrameSet supplied when the Plot was constructed. */
- if( islog ) {
- astInvert( linmap );
- remap1 = astCmpMap( logmap, linmap, 1, "", status );
-
-/* If the axis was previously linear, store the new value and get the Mapping
- with which to remap the graphics Frame so that it becomes logarithmically
- related to the base Frame in the FrameSet supplied when the Plot was
- constructed. */
- } else {
- astInvert( logmap );
- remap1 = astCmpMap( linmap, logmap, 1, "", status );
- }
-
-/* Add a 1D UnitMap to map the unaltered mapping. */
- unitmap = astUnitMap( 1, "", status );
- if( axis == 0 ) {
- remap2 = astCmpMap( remap1, unitmap, 0, "", status );
- } else {
- remap2 = astCmpMap( unitmap, remap1, 0, "", status );
- }
-
-/* Remap the base (graphics) Frame in the Plot. */
- astRemapFrame( this, AST__BASE, remap2 );
-
-/* Free resources. */
- remap1 = astAnnul( remap1 );
- remap2 = astAnnul( remap2 );
- logmap = astAnnul( logmap );
- linmap = astAnnul( linmap );
- unitmap = astAnnul( unitmap );
-
-/* Indicate success. */
- if( astOK ) result = 1;
-
- }
-
-/* Return the result. */
- return result;
-}
-
-static int Ustrcmp( const char *a, const char *b, int *status ){
-/*
-* Name:
-* Ustrncmp
-
-* Purpose:
-* A case blind version of strcmp.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int Ustrcmp( const char *a, const char *b )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* Returns 0 if there are no differences between the two strings, and 1
-* otherwise. Comparisons are case blind.
-
-* Parameters:
-* a
-* Pointer to first string.
-* b
-* Pointer to second string.
-
-* Returned Value:
-* Zero if the strings match, otherwise one.
-
-* Notes:
-* - This function does not consider the sign of the difference between
-* the two strings, whereas "strcmp" does.
-* - This function attempts to execute even if an error has occurred.
-
-*/
-
-/* Local Variables: */
- const char *aa; /* Pointer to next "a" character */
- const char *bb; /* Pointer to next "b" character */
- int ret; /* Returned value */
-
-/* Initialise the returned value to indicate that the strings match. */
- ret = 0;
-
-/* Initialise pointers to the start of each string. */
- aa = a;
- bb = b;
-
-/* Loop round each character. */
- while( 1 ){
-
-/* We leave the loop if either of the strings has been exhausted. */
- if( !(*aa ) || !(*bb) ){
-
-/* If one of the strings has not been exhausted, indicate that the
- strings are different. */
- if( *aa || *bb ) ret = 1;
-
-/* Break out of the loop. */
- break;
-
-/* If neither string has been exhausted, convert the next characters to
- upper case and compare them, incrementing the pointers to the next
- characters at the same time. If they are different, break out of the
- loop. */
- } else {
-
- if( toupper( (int) *(aa++) ) != toupper( (int) *(bb++) ) ){
- ret = 1;
- break;
- }
-
- }
-
- }
-
-/* Return the result. */
- return ret;
-
-}
-
-static int Ustrncmp( const char *a, const char *b, size_t n, int *status ){
-/*
-* Name:
-* Ustrncmp
-
-* Purpose:
-* A case blind version of strncmp.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* int Ustrncmp( const char *a, const char *b, size_t n )
-
-* Class Membership:
-* Plot member function.
-
-* Description:
-* Returns 0 if there are no differences between the first "n"
-* characters of the two strings, and 1 otherwise. Comparisons are
-* case blind.
-
-* Parameters:
-* a
-* Pointer to first string.
-* b
-* Pointer to second string.
-* n
-* The maximum number of characters to compare.
-
-* Returned Value:
-* Zero if the strings match, otherwise one.
-
-* Notes:
-* - This function does not consider the sign of the difference
-* between the two strings, whereas "strncmp" does.
-* - This function attempts to execute even if an error has
-* occurred.
-
-*/
-
-/* Local Variables: */
- const char *aa; /* Pointer to next "a" character */
- const char *bb; /* Pointer to next "b" character */
- int i; /* Character index */
- int ret; /* Returned value */
-
-/* Initialise the returned value to indicate that the strings match. */
- ret = 0;
-
-/* Initialise pointers to the start of each string. */
- aa = a;
- bb = b;
-
-/* Compare up to "n" characters. */
- for( i = 0; i < (int) n; i++ ){
-
-/* We leave the loop if either of the strings has been exhausted. */
- if( !(*aa ) || !(*bb) ){
-
-/* If one of the strings has not been exhausted, indicate that the
- strings are different. */
- if( *aa || *bb ) ret = 1;
-
-/* Break out of the loop. */
- break;
-
-/* If neither string has been exhausted, convert the next characters to
- upper case and compare them, incrementing the pointers to the next
- characters at the same time. If they are different, break out of the
- loop. */
- } else {
-
- if( toupper( (int) *(aa++) ) != toupper( (int) *(bb++) ) ){
- ret = 1;
- break;
- }
-
- }
-
- }
-
-/* Return the result. */
- return ret;
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for Plot objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for Plot objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstPlot *this; /* Pointer to Plot */
- int i;
-
-/* Obtain a pointer to the Plot structure. */
- this = (AstPlot *) obj;
-
-/* Free the clipping bounds arrays. */
- this->clip_lbnd = (double *) astFree( (void *) this->clip_lbnd );
- this->clip_ubnd = (double *) astFree( (void *) this->clip_ubnd );
-
-/* Free the Grf function stack */
- this->grfstack = (AstGrfPtrs *) astFree( (void *) this->grfstack );
-
-/* Free the graphics attribute stack. */
- for( i = this->ngat - 1; i >= 0; i-- ) {
- this->gat[ i ] = astFree( this->gat[ i ] );
- }
-
-/* Free the graphics context pointer. */
- if( this->grfcontext ) {
- this->grfcontext = astAnnul( this->grfcontext );
- this->grfcontextID = astAnnulId( this->grfcontextID );
- }
-
-/* Free the information about the tick marks to draw. */
- for( i = 0; i < 3; i++ ) {
- this->majtickval[ i ] = astFree( this->majtickval[ i ] );
- this->mintickval[ i ] = astFree( this->mintickval[ i ] );
- this->nmajtickval[ i ] = 0;
- this->nmintickval[ i ] = 0;
- }
-
-/* Free the information about the drawn tick marks. */
- SaveTick( this, -1, 0.0, 0.0, 0, status );
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for Plot objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for Plot objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstPlot *in; /* Pointer to input Plot */
- AstPlot *out; /* Pointer to output Plot */
- int axis; /* Zero based axis index */
- int n; /* Number of ticks saved */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Plots. */
- in = (AstPlot *) objin;
- out = (AstPlot *) objout;
-
-/* For safety, first clear any references to the input memory from
- the output Plot. */
- out->clip_lbnd = NULL;
- out->clip_ubnd = NULL;
- out->gat = NULL;
- out->ngat = 0;
-
- for( axis = 0; axis < 3; axis++ ) {
- out->majtickgx[ axis ] = NULL;
- out->majtickgy[ axis ] = NULL;
- out->majtickcount[ axis ] = 0;
- out->mintickgx[ axis ] = NULL;
- out->mintickgy[ axis ] = NULL;
- out->mintickcount[ axis ] = 0;
- out->majtickval[ axis ] = NULL;
- out->nmajtickval[ axis ] = 0;
- out->mintickval[ axis ] = NULL;
- out->nmintickval[ axis ] = 0;
- }
-
-/* Copy the clipping bounds arrays. */
- out->clip_lbnd = (double *) astStore( NULL, (void *) in->clip_lbnd,
- sizeof(double)*(size_t)(in->clip_axes) );
- out->clip_ubnd = (double *) astStore( NULL, (void *) in->clip_ubnd,
- sizeof(double)*(size_t)(in->clip_axes) );
-
-/* Copy the Grf function stack */
- out->grfstack = (AstGrfPtrs *) astStore( NULL, (void *) in->grfstack,
- sizeof(AstGrfPtrs)*(size_t)(in->grfnstack ));
-
-/* Copy the information about drawn tick marks. */
- for( axis = 0; axis < 3; axis++ ) {
- n = in->majtickcount[ axis ];
- out->majtickgx[ axis ] = (double *) astStore( NULL, in->majtickgx[ axis ],
- n*sizeof( double ) );
- out->majtickgy[ axis ] = (double *) astStore( NULL, in->majtickgy[ axis ],
- n*sizeof( double ) );
- out->majtickcount[ axis ] = n;
-
- n = in->mintickcount[ axis ];
- out->mintickgx[ axis ] = (double *) astStore( NULL, in->mintickgx[ axis ],
- n*sizeof( double ) );
- out->mintickgy[ axis ] = (double *) astStore( NULL, in->mintickgy[ axis ],
- n*sizeof( double ) );
- out->mintickcount[ axis ] = n;
-
- n = in->nmajtickval[ axis ];
- out->majtickval[ axis ] = (double *) astStore( NULL, in->majtickval[ axis ],
- n*sizeof( double ) );
- out->nmajtickval[ axis ] = n;
-
- n = in->nmintickval[ axis ];
- out->mintickval[ axis ] = (double *) astStore( NULL, in->mintickval[ axis ],
- n*sizeof( double ) );
- out->nmintickval[ axis ] = n;
- }
-
-/* If an error occurred, free any allocated memory. */
- if ( !astOK ) {
- out->clip_lbnd = (double *) astFree( out->clip_lbnd );
- out->clip_ubnd = (double *) astFree( out->clip_ubnd );
- out->grfstack = (AstGrfPtrs *) astFree( out->grfstack );
- SaveTick( out, -1, 0.0, 0.0, 0, status );
- }
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for Plot objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the Plot class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the Plot whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstPlot *this; /* Pointer to the Plot structure */
- char buff[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- char *comment; /* Pointer to comment string */
- double dval; /* Double precision value */
- int ax; /* Axis to which element refers */
- int axis; /* Zero based axis index */
- int id; /* Zero based graphical object id */
- int ival; /* Integer value */
- int itick; /* Tick mark index */
- int nax; /* Number of base Frame axes */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Plot structure. */
- this = (AstPlot *) this_object;
-
-/* Get the number of graphics (base) frame axes - 2 for a Plot, 3 for a
- Plot3D. */
- nax = astGetNin( this );
-
-/* Write out values representing the instance variables for the
- Plot class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* Tol. */
-/* ---- */
- set = TestTol( this, status );
- dval = set ? GetTol( this, status ) : astGetTol( this );
- astWriteDouble( channel, "Tol", set, 0, dval, "Plotting tolerance" );
-
-/* Grid. */
-/* ----- */
- set = TestGrid( this, status );
- ival = set ? GetGrid( this, status ) : astGetGrid( this );
- astWriteInt( channel, "Grid", set, 0, ival, "Is a grid required?" );
-
-/* TickAll. */
-/* -------- */
- set = TestTickAll( this, status );
- ival = set ? GetTickAll( this, status ) : astGetTickAll( this );
- astWriteInt( channel, "TckAll", set, 1, ival, "Put ticks on all edges?" );
-
-/* ForceExterior. */
-/* -------------- */
- set = TestForceExterior( this, status );
- ival = set ? GetForceExterior( this, status ) : astGetForceExterior( this );
- astWriteInt( channel, "FrcExt", set, 1, ival, "Force exterior labelling?" );
-
-/* Invisible. */
-/* ---------- */
- set = TestInvisible( this, status );
- ival = set ? GetInvisible( this, status ) : astGetInvisible( this );
- astWriteInt( channel, "Invsbl", set, 1, ival, "Use invisible ink?" );
-
-/* Border. */
-/* ------- */
- set = TestBorder( this, status );
- ival = set ? GetBorder( this, status ) : astGetBorder( this );
- astWriteInt( channel, "Border", set, 0, ival, "Draw a border round the grid?" );
-
-/* ClipOp. */
-/* ------- */
- set = TestClipOp( this, status );
- ival = set ? GetClipOp( this, status ) : astGetClipOp( this );
- astWriteInt( channel, "ClpOp", set, 0, ival, "Clip using logical OR?" );
-
-/* Clip. */
-/* ----- */
- set = TestClip( this, status );
- ival = set ? GetClip( this, status ) : astGetClip( this );
- astWriteInt( channel, "Clip", set, 0, ival,
- ((ival == 0)?"Do not clip at plot edges":
- ((ival == 1)?"Clip curves at plot edges":
- ((ival == 2)?"Clip markers at plot edges":
- "Clip markers and curves at plot edges"))));
-
-/* DrawTitle. */
-/* --------- */
- set = TestDrawTitle( this, status );
- ival = set ? GetDrawTitle( this, status ) : astGetDrawTitle( this );
- astWriteInt( channel, "DrwTtl", set, 1, ival, "Add a title to the grid?" );
-
-/* DrawAxesUnits(axis). */
-/* ----------------- */
- for( axis = 0; axis < nax; axis++ ){
- set = TestDrawAxes( this, axis, status );
- ival = set ? GetDrawAxes( this, axis, status ) : astGetDrawAxes( this, axis );
- (void) sprintf( buff, "DrwAxs%d", axis + 1 );
- astWriteInt( channel, buff, set, 0, ival, "Draw axis through ticks?" );
- }
-
-/* Abbrev(axis). */
-/* ------------- */
- for( axis = 0; axis < nax; axis++ ){
- set = TestAbbrev( this, axis, status );
- ival = set ? GetAbbrev( this, axis, status ) : astGetAbbrev( this, axis );
- (void) sprintf( buff, "Abbrv%d", axis + 1 );
- astWriteInt( channel, buff, set, 0, ival, "Abbreviate numerical axis labels?" );
- }
-
-/* Escape. */
-/* ------- */
- set = TestEscape( this, status );
- ival = set ? GetEscape( this, status ) : astGetEscape( this );
- astWriteInt( channel, "Escape", set, 1, ival, "Interpret escape sequences?" );
-
-/* LabelAt(axis). */
-/* -------------- */
- for( axis = 0; axis < nax; axis++ ){
- set = TestLabelAt( this, axis, status );
- dval = set ? GetLabelAt( this, axis, status ) : astGetLabelAt( this, axis );
- if( dval != AST__BAD ){
- (void) sprintf( buff, "LblAt%d", axis + 1 );
- astWriteDouble( channel, buff, set, 0, dval, "Put numerical labels at" );
- }
- }
-
-/* Centre(axis). */
-/* ------------ */
- for( axis = 0; axis < nax; axis++ ){
- set = TestCentre( this, axis, status );
- dval = set ? GetCentre( this, axis, status ) : astGetCentre( this, axis );
- if( dval != AST__BAD ){
- (void) sprintf( buff, "Cen%d", axis + 1 );
- astWriteDouble( channel, buff, set, 0, dval, "Tick mark origin" );
- }
- }
-
-/* Gap(axis). */
-/* ---------- */
-/* Discovering the default value requires a lot of calculation. Only
- write out this attribute if an explicit value has been set. */
- for( axis = 0; axis < nax; axis++ ){
- if( astTestGap( this, axis ) ) {
- dval = astGetGap( this, axis );
- if( dval != AST__BAD ){
- (void) sprintf( buff, "Gap%d", axis + 1 );
- astWriteDouble( channel, buff, set, 0, dval, "Difference between ticks" );
- }
- }
- }
-
-/* LogGap(axis). */
-/* ------------- */
-/* Discovering the default value requires a lot of calculation. Only
- write out this attribute if an explicit value has been set. */
- for( axis = 0; axis < nax; axis++ ){
- if( astTestLogGap( this, axis ) ) {
- dval = astGetLogGap( this, axis );
- if( dval != AST__BAD ){
- (void) sprintf( buff, "LgGap%d", axis + 1 );
- astWriteDouble( channel, buff, set, 0, dval, "Ratio between ticks" );
- }
- }
- }
-
-/* NumLabGap(axis). */
-/* ---------------- */
- for( axis = 0; axis < nax; axis++ ){
- set = TestNumLabGap( this, axis, status );
- dval = set ? GetNumLabGap( this, axis, status ) : astGetNumLabGap( this, axis );
- if( dval != AST__BAD ) {
- (void) sprintf( buff, "NmGap%d", axis + 1 );
- astWriteDouble( channel, buff, set, 1, dval, "Spacing of numerical labels" );
- }
- }
-
-/* TextLabGap(axis). */
-/* ----------------- */
- for( axis = 0; axis < nax; axis++ ){
- set = TestTextLabGap( this, axis, status );
- dval = set ? GetTextLabGap( this, axis, status ) : astGetTextLabGap( this, axis );
- if( dval != AST__BAD ) {
- (void) sprintf( buff, "TxGap%d", axis + 1 );
- astWriteDouble( channel, buff, set, 1, dval, "Spacing of descriptive labels" );
- }
- }
-
-/* LabelUp(axis). */
-/* -------------- */
- for( axis = 0; axis < nax; axis++ ){
- set = TestLabelUp( this, axis, status );
- ival = set ? GetLabelUp( this, axis, status ) : astGetLabelUp( this, axis );
- (void) sprintf( buff, "LblUp%d", axis + 1 );
- astWriteInt( channel, buff, set, 1, ival, "Draw numerical labels upright?" );
- }
-
-/* LogPlot(axis). */
-/* -------------- */
- for( axis = 0; axis < nax; axis++ ){
- set = TestLogPlot( this, axis, status );
- ival = set ? GetLogPlot( this, axis, status ) : astGetLogPlot( this, axis );
- (void) sprintf( buff, "LgPlt%d", axis + 1 );
- astWriteInt( channel, buff, set, 1, ival, "Map plot axis logarithmically?" );
- }
-
-/* LogTicks(axis). */
-/* -------------- */
- for( axis = 0; axis < nax; axis++ ){
- set = TestLogTicks( this, axis, status );
- ival = set ? GetLogTicks( this, axis, status ) : astGetLogTicks( this, axis );
- (void) sprintf( buff, "LgTck%d", axis + 1 );
- astWriteInt( channel, buff, set, 1, ival, "Space ticks logarithmically?" );
- }
-
-/* LogLabel(axis). */
-/* -------------- */
- for( axis = 0; axis < nax; axis++ ){
- set = TestLogLabel( this, axis, status );
- ival = set ? GetLogLabel( this, axis, status ) : astGetLogLabel( this, axis );
- (void) sprintf( buff, "LgLbl%d", axis + 1 );
- astWriteInt( channel, buff, set, 1, ival, "Scientific notation for labels?" );
- }
-
-/* NumLab(axis). */
-/* -------------- */
- for( axis = 0; axis < nax; axis++ ){
- set = TestNumLab( this, axis, status );
- ival = set ? GetNumLab( this, axis, status ) : astGetNumLab( this, axis );
- (void) sprintf( buff, "NmLbl%d", axis + 1 );
- astWriteInt( channel, buff, set, 1, ival, "Draw numerical labels?" );
- }
-
-/* MinTick(axis). */
-/* -------------- */
- for( axis = 0; axis < nax; axis++ ){
- set = TestMinTick( this, axis, status );
- ival = set ? GetMinTick( this, axis, status ) : astGetMinTick( this, axis );
- (void) sprintf( buff, "MnTks%d", axis + 1 );
- astWriteInt( channel, buff, set, 0, ival, "No. of sub-divisions "
- "between major tick marks" );
- }
-
-/* TextLab(axis). */
-/* -------------- */
- for( axis = 0; axis < nax; axis++ ){
- set = TestTextLab( this, axis, status );
- ival = set ? GetTextLab( this, axis, status ) : astGetTextLab( this, axis );
- (void) sprintf( buff, "TxLbl%d", axis + 1 );
- astWriteInt( channel, buff, set, 0, ival, "Draw textual label?" );
- }
-
-/* LabelUnits(axis). */
-/* ----------------- */
- for( axis = 0; axis < nax; axis++ ){
- set = TestLabelUnits( this, axis, status );
- ival = set ? GetLabelUnits( this, axis, status ) : astGetLabelUnits( this, axis );
- (void) sprintf( buff, "LbUnt%d", axis + 1 );
- astWriteInt( channel, buff, set, 0, ival, "Add units to axis label?" );
- }
-
-/* Style(object). */
-/* -------------- */
- for( id = 0; id < AST__NPID; id++ ){
- set = TestStyle( this, id, status );
- ival = set ? GetStyle( this, id, status ) : astGetStyle( this, id );
- (void) sprintf( buff, "Style%d", id + 1 );
- comment = GrfItem( id, " line style", &ax, status );
- if( ax < nax ) astWriteInt( channel, buff, set, 0, ival, comment );
- comment = (char *) astFree( (void *) comment );
- }
-
-/* Font(object). */
-/* ------------- */
- for( id = 0; id < AST__NPID; id++ ){
- set = TestFont( this, id, status );
- ival = set ? GetFont( this, id, status ) : astGetFont( this, id );
- (void) sprintf( buff, "Font%d", id + 1 );
- comment = GrfItem( id, " character font", &ax, status );
- if( ax < nax ) astWriteInt( channel, buff, set, 0, ival, comment );
- comment = (char *) astFree( (void *) comment );
- }
-
-/* Colour(object). */
-/* --------------- */
- for( id = 0; id < AST__NPID; id++ ){
- set = TestColour( this, id, status );
- ival = set ? GetColour( this, id, status ) : astGetColour( this, id );
- (void) sprintf( buff, "Col%d", id + 1 );
- comment = GrfItem( id, " colour index", &ax, status );
- if( ax < nax ) astWriteInt( channel, buff, set, 0, ival, comment );
- comment = (char *) astFree( (void *) comment );
- }
-
-/* Width(object). */
-/* -------------- */
- for( id = 0; id < AST__NPID; id++ ){
- set = TestWidth( this, id, status );
- dval = set ? GetWidth( this, id, status ) : astGetWidth( this, id );
- if( dval != AST__BAD ) {
- (void) sprintf( buff, "Width%d", id + 1 );
- comment = GrfItem( id, " line width", &ax, status );
- if( ax < nax ) astWriteDouble( channel, buff, set, 0, dval, comment );
- comment = (char *) astFree( (void *) comment );
- }
- }
-
-/* Size(object). */
-/* ------------- */
- for( id = 0; id < AST__NPID; id++ ){
- set = TestSize( this, id, status );
- dval = set ? GetSize( this, id, status ) : astGetSize( this, id );
- if( dval != AST__BAD ) {
- (void) sprintf( buff, "Size%d", id + 1 );
- comment = GrfItem( id, " character size", &ax, status );
- if( ax < nax ) astWriteDouble( channel, buff, set, 0, dval, comment );
- comment = (char *) astFree( (void *) comment );
- }
- }
-
-/* TitleGap. */
-/* --------- */
- set = TestTitleGap( this, status );
- dval = set ? GetTitleGap( this, status ) : astGetTitleGap( this );
- if( dval != AST__BAD ) astWriteDouble( channel, "TtlGap", set, 1, dval,
- "Gap between title and edge" );
-
-/* MajTickLen(axis). */
-/* ----------------- */
- for( axis = 0; axis < nax; axis++ ){
- set = TestMajTickLen( this, axis, status );
- dval = set ? GetMajTickLen( this, axis, status ) : astGetMajTickLen( this, axis );
- if( dval != AST__BAD ) {
- (void) sprintf( buff, "MjTkLn%d", axis + 1 );
- astWriteDouble( channel, buff, set, 0, dval, "Major tick length" );
- }
- }
-
-/* MinTickLen(axis). */
-/* ----------------- */
- for( axis = 0; axis < nax; axis++ ){
- set = TestMinTickLen( this, axis, status );
- dval = set ? GetMinTickLen( this, axis, status ) : astGetMinTickLen( this, axis );
- if( dval != AST__BAD ) {
- (void) sprintf( buff, "MnTkLn%d", axis + 1 );
- astWriteDouble( channel, buff, set, 1, dval, "Minor tick length" );
- }
- }
-
-/* Labelling. */
-/* ---------- */
- set = TestLabelling( this, status );
- ival = set ? GetLabelling( this, status ) : astGetLabelling( this );
- comment = "Labelling scheme";
- astWriteString( channel, "Lbling", set, 0, xlbling[ival], comment );
-
-/* Edge(axis). */
-/* ----------- */
- for( axis = 0; axis < nax; axis++ ){
- set = TestEdge( this, axis, status );
- ival = set ? GetEdge( this, axis, status ) : astGetEdge( this, axis );
- (void) sprintf( buff, "Edge%d", axis + 1 );
- comment = "Edge used to label an axis";
- astWriteString( channel, buff, set, 0, xedge[ival], comment );
- }
-
-/* Now do instance variables which are not attributes. */
-/* =================================================== */
-
-/* Only write out clipping information if set. */
- if( this->clip_lbnd && this->clip_ubnd ){
-
-/* The lower bounds of the clipping volume. */
- for( axis = 0; axis < this->clip_axes; axis++ ){
- (void) sprintf( buff, "ClpLb%d", axis + 1 );
- if( this->clip_lbnd && (this->clip_lbnd)[ axis ] != AST__BAD ){
- astWriteDouble( channel, buff, 1, 0, (this->clip_lbnd)[ axis ],
- "Lower bound of clipping region" );
- }
- }
-
-/* The upper bounds of the clipping volume. */
- for( axis = 0; axis < this->clip_axes; axis++ ){
- (void) sprintf( buff, "ClpUb%d", axis + 1 );
- if( this->clip_ubnd && (this->clip_ubnd)[ axis ] != AST__BAD ){
- astWriteDouble( channel, buff, 1, 0, (this->clip_ubnd)[ axis ],
- "Upper bound of clipping region" );
- }
- }
-
-/* The number of bounds supplied for the clipping volume. */
- astWriteInt( channel, "ClpAxs", 1, 0, this->clip_axes,
- "No. of bounds for clipping region" );
-
-/* The index of the clipping Frame within the Plot. */
- astWriteInt( channel, "ClpFrm", 1, 0, this->clip_frame,
- "Index of clipping Frame" );
- }
-
-/* The bounds of the plotting area in graphics coords. */
- astWriteDouble( channel, "Xlo", 1, 1, this->xlo,
- "Lower X bound of plotting area" );
- astWriteDouble( channel, "Ylo", 1, 1, this->ylo,
- "Lower Y bound of plotting area" );
- astWriteDouble( channel, "Xhi", 1, 1, this->xhi,
- "Upper X bound of plotting area" );
- astWriteDouble( channel, "Yhi", 1, 1, this->yhi,
- "Upper Y bound of plotting area" );
-
-/* Axis reversal flags. */
- astWriteInt( channel, "Xrev", 1, 0, this->xrev, "X axis reversed?" );
- astWriteInt( channel, "Yrev", 1, 0, this->yrev, "Y axis reversed?" );
-
-/* The bounds of the plotting area in the base Frame of the FrameSet
- supplied when the Plot was constructed. */
- astWriteDouble( channel, "Xb1", 1, 1, this->bbox[ 0 ],
- "Lower X bound of supplied base Frame" );
- astWriteDouble( channel, "Yb1", 1, 1, this->bbox[ 1 ],
- "Lower Y bound of supplied base Frame" );
- astWriteDouble( channel, "Xb2", 1, 1, this->bbox[ 2 ],
- "Upper X bound of supplied base Frame" );
- astWriteDouble( channel, "Yb2", 1, 1, this->bbox[ 3 ],
- "Upper Y bound of supplied base Frame" );
-
-/* User-specified tick values */
- for( axis = 0; axis < 3; axis++ ) {
-
- if( this->nmajtickval[ axis ] > 0 ) {
- sprintf( buff, "NMjTk%d", axis + 1 );
- astWriteInt( channel, buff, 1, 1, this->nmajtickval[ axis ], "" );
-
- for( itick = 0; itick < this->nmajtickval[ axis ]; itick++ ) {
- sprintf( buff, "MjTk%d_%d", axis + 1, itick + 1 );
- astWriteDouble( channel, buff, 1, 1,
- this->majtickval[ axis ][ itick ], "" );
- }
- }
-
- if( this->nmintickval[ axis ] > 0 ) {
- sprintf( buff, "NMnTk%d", axis + 1 );
- astWriteInt( channel, buff, 1, 1, this->nmintickval[ axis ], "" );
-
- for( itick = 0; itick < this->nmintickval[ axis ]; itick++ ) {
- sprintf( buff, "MnTk%d_%d", axis + 1, itick + 1 );
- astWriteDouble( channel, buff, 1, 1,
- this->mintickval[ axis ][ itick ], "" );
- }
- }
- }
-
-/* Return. */
- return;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAPlot and astCheckPlot functions using
- the macros defined for this purpose in the "object.h" header
- file. */
-astMAKE_ISA(Plot,FrameSet)
-astMAKE_CHECK(Plot)
-
-AstPlot *astPlot_( void *frame_void, const float *graphbox,
- const double *basebox, const char *options, int *status, ...) {
-/*
-*+
-* Name:
-* astPlot
-
-* Purpose:
-* Create a Plot.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "plot.h"
-* AstPlot *astPlot( AstFrame *frame, const float *graphbox,
-* const double *basebox, const char *options, ..., int *status )
-
-* Class Membership:
-* Plot constructor.
-
-* Description:
-* This function creates a new Plot and optionally initialises
-* its attributes.
-*
-* The supplied Frame (or the base frame if a FrameSet was supplied) is
-* assumed to be related to the graphics world coordinate system by a
-* simple shift and scale along each axis. The mapping between graphics
-* world coordinates and this Frame is specified by supplying the
-* coordinates in both systems at the bottom left and top right corners
-* of a box on the graphics device. By default, no graphics will be
-* produced outside the supplied box, but this default behaviour can be
-* changed by setting explicit values for the various clipping attributes.
-
-* Parameters:
-* frame
-* A pointer to a Frame or FrameSet to be annotated. If a NULL pointer
-* is supplied, then a default 2-D Frame will be created to which labels,
-* etc, can be attached by setting the relevant Frame attributes.
-* graphbox
-* A pointer to an array of 4 values giving the graphics world
-* coordinates of the bottom left and top right corners of a box on
-* the graphics output device. The first pair of values should be the
-* coordinates of the bottom left corner of the box and the second
-* pair of values should be the coordinates of the top right corner.
-* The horizontal axis should be given first in each pair.
-* basebox
-* A pointer to an array of 4 values giving the coordinates in the
-* supplied Frame, or base frame of the supplied FrameSet, at the
-* bottom left and top right corners of the box specified by parameter
-* graphbox. These should be supplied in the same order as for
-* parameter "graphbox".
-* options
-* Pointer to a null terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new Plot. The syntax used is the same as
-* for the astSet method and may include "printf" format
-* specifiers identified by "%" symbols in the normal way.
-* status
-* Pointer to the inherited status variable.
-* ...
-* If the "options" string contains "%" format specifiers, then
-* an optional list of arguments may follow it in order to
-* supply values to be substituted for these specifiers. The
-* rules for supplying these are identical to those for the
-* astSet method (and for the C "printf" function).
-
-* Returned Value:
-* A pointer to the new Plot.
-
-* Notes:
-* - The base Frame of the created Plot corresponds to the graphics world
-* coordinate system, and should not, in general, be changed.
-* - The current Frame of the created Plot corresponds to the Frame
-* given by parameter "frame". If a FrameSet was supplied then its
-* current Frame becomes the current Frame of the created Plot.
-* - If the supplied Frame, or base Frame if a FrameSet was supplied,
-* has more than 2 axes, then the sub-Frame defined by the first 2 axes
-* is used.
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-
-* Implementation Notes:
-* - This function implements the basic Plot constructor which
-* is available via the protected interface to the Plot class.
-* A public interface is provided by the astPlotId_ function.
-* - Because this function has a variable argument list, it is
-* invoked by a macro that evaluates to a function pointer (not a
-* function invocation) and no checking or casting of arguments is
-* performed before the function is invoked. Because of this, the
-* "frame" parameter is of type (void *) and is converted and
-* validated within the function itself.
-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *frame; /* Pointer to Frame structure */
- AstPlot *new; /* Pointer to new Plot */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- new = NULL;
-
-/* Obtain and validate a pointer to any supplied Frame structure. */
- if( frame_void ){
- frame = astCheckFrame( frame_void );
- } else {
- frame = NULL;
- }
-
-/* Check the pointer can be used. */
- if ( astOK ) {
-
-/* Initialise the Plot, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitPlot( NULL, sizeof( AstPlot ), !class_init,
- &class_vtab, "Plot", frame, graphbox,
- basebox );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- Plot's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return a pointer to the new Plot. */
- return new;
-}
-
-AstPlot *astInitPlot_( void *mem, size_t size, int init, AstPlotVtab *vtab,
- const char *name, AstFrame *frame, const float *graphbox,
- const double *basebox, int *status ) {
-/*
-*+
-* Name:
-* astInitPlot
-
-* Purpose:
-* Initialise a Plot.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "plot.h"
-* AstPlot *astInitPlot( void *mem, size_t size, int init,
-* AstPlotVtab *vtab, const char *name,
-* AstFrame *frame, const float *graphbox,
-* const double *basebox )
-
-* Class Membership:
-* Plot initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new Plot object. It allocates memory (if necessary) to accommodate
-* the Plot plus any additional data associated with the derived class.
-* It then initialises a Plot structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a Plot at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the Plot is to be created. This
-* must be of sufficient size to accommodate the Plot data
-* (sizeof(Plot)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the Plot (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the Plot
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the Plot's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new Plot. If NULL, the vtab associated with this class
-* (Plot) will be used.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-* frame
-* A pointer to the Frame or Frameset to be annotated.
-* graphbox
-* A pointer to an array of 4 values giving the graphics coordinates
-* of the bottom left and top right corners of a box on the graphics
-* output device. The first pair of values should be the graphics
-* coordinates of the bottom left corner of the box and the second
-* pair of values are the graphics coordinates of the top right corner.
-* The horizontal axis should be given first in each pair.
-* basebox
-* A pointer to an array of 4 values giving the coordinates in the
-* supplied Frame or base Frame of the supplied FrameSet at the bottom
-* left and top right corners of the box specified by parameter graphbox.
-* These should be supplied in the same order as for parameter "graphbox".
-
-* Returned Value:
-* A pointer to the new Plot.
-
-* Notes:
-* - If the supplied Frame, or base Frame if a FrameSet was supplied,
-* has more than 2 axes, then the sub-Frame defined by the first 2 axes
-* is used.
-* - The current Frame of the supplied FrameSet need not be 2-dimensional.
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *baseframe; /* Pointer to base frame */
- AstFrame *graphicsframe; /* Pointer to graphics frame */
- AstFrameSet *fset0; /* The n-D FrameSet to be annotated */
- AstFrameSet *fset; /* The 2-D FrameSet to be annotated */
- AstPlot *new; /* Pointer to new Plot */
- AstWinMap *map; /* Mapping for converting bbox -> gbox */
- char *mess; /* Pointer to a descriptive message */
- double gbox[ 4 ]; /* Double precision version of "graphbox" */
- int axis; /* Axis index, 0 or 1 */
- int bi; /* Index of base frame */
- int ci; /* Index of current frame */
- int i; /* Loop count */
- int id; /* Plot object id */
- int naxes; /* No. of axes in frame */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(frame);
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- fset = NULL;
- mess = NULL;
-
-/* If no vtab was supplied, use the vtab for this class (Plot). */
- if( !vtab ) {
- vtab = &class_vtab;
- if ( !class_init ) {
- astInitPlotVtab( vtab, "Plot" );
- class_init = 1;
- }
-
-/* If necessary, initialise the virtual function table. */
- } else if ( init ) {
- astInitPlotVtab( vtab, name );
- }
-
-/* Initialise. */
- new = NULL;
- baseframe = NULL;
-
-/* First of all we need to ensure that we have a FrameSet and a base
- Frame on which to base the new Plot. If a NULL Frame pointer was
- supplied, create a default 2-D Frame, and then create a FrameSet
- containing just this default Frame. Also store a pointer to a
- message which can be used to describe the object within error
- messages. */
- if( !frame ){
- baseframe = astFrame( 2, "", status );
- fset = astFrameSet( baseframe, "", status );
- mess = "default 2-d Frame";
-
-/* If an object was supplied, report an error if it is not a Frame or
- an object derived from a Frame (such as a FrameSet). */
- } else if( !astIsAFrame( frame ) ){
- if( astOK ){
- astError( AST__BDOBJ, "astInitPlot(%s): Supplied Object (class '%s') "
- "is not a Frame.", status, name, astGetClass( frame ) );
- }
-
-/* If the supplied object is a Plot or an object derived from a Plot (a Plot
- is a sort of Frame and so will pass the above test), extract a
- FrameSet from the Plot, and clear the Domain attribute for any existing
- Frames which have Domain GRAPHICS. */
- } else if( astIsAPlot( frame ) ){
- fset0 = astFrameSet( frame, "", status );
- fset = astCopy( fset0 );
- fset0 = astAnnul( fset0 );
-
- for( i = 0; i < astGetNframe( fset ); i++ ) {
- graphicsframe = astGetFrame( fset, i );
- if( !strcmp( astGetDomain( graphicsframe ), "GRAPHICS" ) ) {
- astClearDomain( graphicsframe );
- }
- graphicsframe = astAnnul( graphicsframe );
- }
-
- baseframe = astGetFrame( fset, astGetBase( fset ) );
- mess = "base Frame of the supplied Plot";
-
-/* If the object is not a FrameSet, create a FrameSet holding the
- supplied Frame. If the Frame is not 2D, an extra 2D Frame is
- included in the FrameSet derived from axes 1 and 2 of the supplied
- Frame. This new Frame becomes the base Frame. */
- } else if( !astIsAFrameSet( frame ) ){
- fset0 = astFrameSet( frame, "", status );
- mess = "supplied Frame";
- fset = Fset2D( fset0, AST__BASE, status );
- fset0 = astAnnul( fset0 );
- baseframe = astGetFrame( fset, astGetBase( fset ) );
-
-/* If a FrameSet was supplied, ensure it has a 2D base Frame.
- If the supplied FrameSet is not 2D, then a new base Frame is
- inserted into it which is derived from axes 1 and 2 of the
- original base Frame. */
- } else {
- fset = Fset2D( (AstFrameSet *) frame, AST__BASE, status );
- baseframe = astGetFrame( fset, astGetBase( fset ) );
- mess = "base Frame of the supplied FrameSet";
- }
-
-/* Check that there are 2 axes in the base frame of the FrameSet. */
- naxes = astGetNaxes( baseframe );
- if ( naxes != 2 && astOK ) {
- astError( AST__NAXIN, "astInitPlot(%s): Number of axes (%d) in the %s "
- "is invalid - this number should be 2.", status, name, naxes, mess );
- }
-
-/* Check that neither dimension of the graphbox is zero. */
- if( ( graphbox[ 2 ] == graphbox[ 0 ] ||
- graphbox[ 3 ] == graphbox[ 1 ] ) && astOK ){
- astError( AST__BADBX, "astInitPlot(%s): The plotting area has zero size "
- "in the graphics world coordinate system.", status, name );
- }
-
-/* Check that neither dimension of the graphbox is bad. */
- if( astISBAD(graphbox[0]) || astISBAD(graphbox[1]) ||
- astISBAD(graphbox[2]) || astISBAD(graphbox[3]) ) {
- astError( AST__BADBX, "astInitPlot(%s): The plotting area has undefined limits "
- "in the graphics world coordinate system.", status, name );
- }
-
-/* Check that neither dimension of the basebox is zero. */
- if( astISBAD(basebox[2]) || astISBAD(basebox[0]) ) {
- astError( AST__BADBX, "astInitPlot(%s): The limits of the horizontal "
- "axis of the %s are undefined or bad.", status, name, name );
- } else if( astISBAD(basebox[3]) || astISBAD(basebox[1]) ) {
- astError( AST__BADBX, "astInitPlot(%s): The limits of the vertical "
- "axis of the %s are undefined or bad.", status, name, name );
- }
-
-/* Create a Frame which describes the graphics world coordinate system. */
- graphicsframe = astFrame( 2,
- "Domain=GRAPHICS,Title=Graphical Coordinates", status );
-
-/* Initialise a FrameSet structure (the parent class) as the first
- component within the Plot structure, allocating memory if necessary.
- The new FrameSet is initialised to hold the graphics Frame created
- above. */
- new = (AstPlot *) astInitFrameSet( mem, size, 0, (AstFrameSetVtab *) vtab,
- name, graphicsframe );
-
- if ( astOK ) {
-
-/* Initialise the Plot data. */
-/* ----------------------------- */
-
-/* Get a double precision version of "graphbox". */
- gbox[ 0 ] = (double) graphbox[ 0 ];
- gbox[ 1 ] = (double) graphbox[ 1 ];
- gbox[ 2 ] = (double) graphbox[ 2 ];
- gbox[ 3 ] = (double) graphbox[ 3 ];
-
-/* Store the bounds in graphics coordinates of the clipping box, ensuring
- that the low bound is lower than the high bound. Set flags to indicate
- if the supplied bounds has to be reversed to do this (some graphics
- system have the Y axis increasing from the top of the screen to the
- bottom). */
- if( graphbox[ 0 ] <= graphbox[ 2 ] ){
- new->xlo = gbox[ 0 ];
- new->xhi = gbox[ 2 ];
- new->xrev = 0;
- } else {
- new->xhi = gbox[ 0 ];
- new->xlo = gbox[ 2 ];
- new->xrev = 1;
- astSetDirection( graphicsframe, 0, 0 );
- }
- if( graphbox[ 1 ] <= graphbox[ 3 ] ){
- new->ylo = gbox[ 1 ];
- new->yhi = gbox[ 3 ];
- new->yrev = 0;
- } else {
- new->yhi = gbox[ 1 ];
- new->ylo = gbox[ 3 ];
- new->yrev = 1;
- astSetDirection( graphicsframe, 1, 0 );
- }
-
-/* Store the bounds of the Plot within the base Frame of the supplied
- FrameSet. */
- new->bbox[ 0 ] = basebox[ 0 ];
- new->bbox[ 1 ] = basebox[ 1 ];
- new->bbox[ 2 ] = basebox[ 2 ];
- new->bbox[ 3 ] = basebox[ 3 ];
-
-/* We initially assume that the base Frame of the supplied FrameSet is
- mapped lineary onto the graphics frame. This may be changed later by
- assigning values to the LogPlot attributes. Create a WinMap which
- maps the base box (within the base Frame of the supplied FrameSet)
- onto the graphics box. */
- map = astWinMap( 2, gbox, gbox + 2, basebox, basebox + 2, "", status );
-
-/* Get the index of the current (physical) and base (pixel) Frames in
- the supplied FrameSet. */
- bi = astGetBase( fset );
- ci = astGetCurrent( fset );
-
-/* Temporarily set the current Frame to be the pixel frame. */
- astSetCurrent( fset, bi );
-
-/* Add the supplied FrameSet into the Plot (i.e. FrameSet) created
- earlier. This leaves the graphics frame with index 1 in the
- returned Plot. We use the linear mapping initially. */
- astAddFrame( (AstFrameSet *) new, 1, map, fset );
- map = astAnnul( map );
-
-/* Set the current Frame in the Plot to be the physical coordinate Frame
- (with index incremented by one because the graphics Frame has been added). */
- astSetCurrent( (AstFrameSet *) new, ci + 1 );
-
-/* Re-establish the original current Frame in the supplied FrameSet. */
- astSetCurrent( fset, ci );
-
-/* Store a value of -1.0 for Tol to indicate that no value has yet been
- set. This will cause a default value of 0.001 to be used. */
- new->tol = -1.0;
-
-/* Set up default clipping information which gives no clipping. */
- new->clip_frame = AST__NOFRAME;
- new->clip_lbnd = NULL;
- new->clip_ubnd = NULL;
- new->clip_axes = 0;
-
-/* Is a grid covering the plotting area required? Store a value of -1
- to indicate that no value has yet been set. This will cause a default
- value of 0 (no) to be used. */
- new->grid = -1;
-
-/* Are tick marks to be placed on both edges in a pair of opposite edges?
- Store a value of -1 to indicate that no value has yet been set. This will
- cause a default value of 1 (yes) to be used. */
- new->tickall = -1;
-
-/* Graphics context identifier */
- new->grfcontext = NULL;
- new->grfcontextID = NULL;
-
-/* Shoudl ast Grid draw a boundary round the regions of valid coordinates?
- Store a value of -1 to indicate that no value has yet been set. This will
- cause a default value of 1 (yes) to be used. */
- new->border = -1;
-
-/* Should graphics be drawn invisible? Store a value of -1 to indicate that
- no value has yet been set. This will cause a default value of 0 (no) to
- be used. */
- new->invisible = -1;
-
-/* By default clip markers but not curves at the boundary of the plotting
- area. This was the only behaviour available prior to the introduction of
- the Clip attribute, and is chosen as the default to maintain backwards
- compatibility. */
- new->clip = -1;
-
-/* Is clipping to be done using a logical OR operation between the axes?
- Store a value of -1 to indicate that no value has yet been set. This will
- cause a default value of 0 (no, i.e. a logical AND) to be used. */
- new->clipop = -1;
-
-/* Is the graphics interface registered using astGrfSet to be used?
- Store a value of -1 to indicate that no value has yet been set. This will
- cause a default value of 0 (no, i.e. use the graphics interface
- selected at link-time) to be used. */
- new->grf = -1;
-
-/* Wrapper functions to call the drawing routines. These are the
- default wrappers which call GRF routines written in C. Alternative
- wrappers are defined in fplot.c for use with GRF routines written in
- F77. */
- new->GAttr = CGAttrWrapper;
- new->GFlush = CGFlushWrapper;
- new->GLine = CGLineWrapper;
- new->GMark = CGMarkWrapper;
- new->GText = CGTextWrapper;
- new->GCap = CGCapWrapper;
- new->GTxExt = CGTxExtWrapper;
- new->GScales = CGScalesWrapper;
- new->GQch = CGQchWrapper;
-
- for( i = 0; i < AST__NGRFFUN; i++ ) new->grffun[i] = NULL;
- new->grfstack = NULL;
- new->grfnstack = 0;
-
-/* Is a title to be added to an annotated grid? Store a value of -1 to
- indicate that no value has yet been set. This will cause a default value
- of 1 (yes) to be used. */
- new->drawtitle = -1;
-
-/* Are escape sequences within text strings to be interpreted? If not,
- they are printed literally. Store a value of -1 when not set.
- This will cause a default value of 1 (yes) to be used. */
- new->escape = -1;
-
-/* A boolean attribute indicating where numerical labels are to be
- placed; zero implies round the edges of the plotting area; non-zero
- implies within the plotting area. The unset value of -9999 yields a
- default of zero. */
- new->labelling = -9999;
-
-/* Graphics attributes. Default behaviour is to use the current values. */
- for( id = 0; id < AST__NPID; id++ ){
- new->style[ id ] = -1;
- new->font[ id ] = -1;
- new->colour[ id ] = -1;
- new->width[ id ] = AST__BAD;
- new->size[ id ] = AST__BAD;
- }
-
-/* The space between the top edge and the grid title as a fraction of the
- minimum dimension of the plotting area. Store AST__BAD to indicate that no
- value has been set. This will cause a default of 0.05 to be used. */
- new->titlegap = AST__BAD;
-
-/* Initialise the protected Ink attribute so that visible ink is used. */
- new->ink = -1;
-
-/* A stack of AstGat pointers used to store the graphical attributes for
- text within strings which include graphical escape sequences. */
- new->gat = NULL;
- new->ngat = 0;
-
-/* Now set the attribute values for each axis. The arrays stored in the
- Plot struture allow for 3 graphics axes (e.g. as used by a Plot3D) so
- we initialise 3 axes here even though the Plot class only uses 2. */
- for( axis = 0; axis < 3; axis++ ) {
-
-/* Are curves to be drawn through the tick marks even if no grid is
- produced? Store a value of -1 to indicate that no value has yet been
- set. This will cause a default value of 1 (yes) to be used. */
- new->drawaxes[ axis ] = -1;
-
-/* Are adjacent numerical axis labels to be abbreviated by removing matching
- leading fields? Store a value of -1 to indicate that no value has yet been
- set. This will cause a default value of 1 (yes) to be used. */
- new->abbrev[ axis ] = -1;
-
-/* The length of the major tick marks as a fraction of the minimum
- dimension of the plotting area. Store AST__BAD to indicate that no
- value has been set. This will cause a default of 0.015 to be used. */
- new->majticklen[ axis ] = AST__BAD;
-
-/* The length of the minor tick marks as a fraction of the minimum
- dimension of the plotting area. Store AST__BAD to indicate that no
- value has been set. This will cause a default of 0.007 to be used. */
- new->minticklen[ axis ] = AST__BAD;
-
-/* Are numeric labels to be drawn upright? Store a value of -1 to indicate
- that no value has yet been set. This will cause a default value of 0 (no)
- to be used. */
- new->labelup[ axis ] = -1;
-
-/* The space between an axis and its numeric labels as a fraction of the
- minimum dimension of the plotting area. Store AST__BAD to indicate that no
- value has been set. This will cause a default of 0.01 to be used. */
- new->numlabgap[ axis ] = AST__BAD;
- new->textlabgap[ axis ] = AST__BAD;
-
-/* The edges on which to put labels for axes 1 and 2. Store values of -1
- to indicate that no values have been set. This will cause default values
- to be used. */
- new->edge[ axis ] = -1;
-
-/* The placement of labels within the plotting area will be done
- automatically by default. */
- new->labelat[ axis ] = AST__BAD;
-
-/* The central tick is placed automatically by default. */
- new->centre[ axis ] = AST__BAD;
-
-/* The gap between tick marks and the number of minor tick marks will be
- found automatically by default. */
- new->gap[ axis ] = AST__BAD;
- new->loggap[ axis ] = AST__BAD;
- new->mintick[ axis ] = -1;
-
-/* Both axes will be labelled by default. */
- new->numlab[ axis ] = -1;
- new->textlab[ axis ] = -1;
- new->labelunits[ axis ] = -1;
-
-/* Log/lin attributes. Default value is to use linear axes. */
- new->logplot[ axis ] = -1;
- new->logticks[ axis ] = -1;
- new->loglabel[ axis ] = -1;
-
-/* Initialise the components used to store the values actually used
- for attributes which have dynamic defaults. */
- new->ulglb[ axis ] = new->loglabel[ axis ];
- new->ulgtk[ axis ] = new->logticks[ axis ];
- new->uloggap[ axis ] = new->loggap[ axis ];
- new->ugap[ axis ] = new->gap[ axis ];
- new->ucentre[ axis ] = new->centre[ axis ];
- new->uedge[ axis ] = new->edge[ axis ];
- new->ulblat[ axis ] = new->labelat[ axis ];
- new->ulbunit[ axis ] = new->labelunits[ axis ];
- new->umintk[ axis ] = new->mintick[ axis ];
- new->utxtlb[ axis ] = new->textlab[ axis ];
- new->umjtkln[ axis ] = new->majticklen[ axis ];
-
-/* Initialise the arrays used to hold information describing the tick
- marks that have been drawn for the axis. */
- new->majtickgx[ axis ] = NULL;
- new->majtickgy[ axis ] = NULL;
- new->majtickcount[ axis ] = 0;
- new->mintickgx[ axis ] = NULL;
- new->mintickgy[ axis ] = NULL;
- new->mintickcount[ axis ] = 0;
- new->nmajtickval[ axis ] = 0;
- new->majtickval[ axis ] = NULL;
- new->nmintickval[ axis ] = 0;
- new->mintickval[ axis ] = NULL;
- }
-
- new->ugrid = new->grid;
- new->ulbling = new->labelling;
- new->uborder = new->border;
-
- }
-
-/* Annul the frame. */
- graphicsframe = astAnnul( graphicsframe );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
-
-/* Annul the pointer to the base Frame and FrameSet. */
- baseframe = astAnnul( baseframe );
- fset = astAnnul( fset );
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstPlot *astLoadPlot_( void *mem, size_t size,
- AstPlotVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadPlot
-
-* Purpose:
-* Load a Plot.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "Plot.h"
-* AstPlot *astLoadPlot( void *mem, size_t size,
-* AstPlotVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* Plot loader.
-
-* Description:
-* This function is provided to load a new Plot using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* Plot structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a Plot at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the Plot is to be
-* loaded. This must be of sufficient size to accommodate the
-* Plot data (sizeof(Plot)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the Plot (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the Plot structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstPlot) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new Plot. If this is NULL, a pointer
-* to the (static) virtual function table for the Plot class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "Plot" is used instead.
-
-* Returned Value:
-* A pointer to the new Plot.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstPlot *new; /* Pointer to the new Plot */
- char buff[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- char *text; /* Textual version of integer value */
- int axis; /* Zero based axis index */
- int id; /* Zero based graphical object id */
- int i; /* Loop count */
- int itick; /* Tick mark index */
- int nax; /* Number of base Frame axes */
- int ntick; /* Total number of ticks */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this Plot. In this case the
- Plot belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstPlot );
- vtab = &class_vtab;
- name = "Plot";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitPlotVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built Plot. */
- new = astLoadFrameSet( mem, size, (AstFrameSetVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Get the number of graphics (base) frame axes - 2 for a Plot, 3 for a
- Plot3D. */
- nax = astGetNin( new );
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "Plot" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* Tol. */
-/* ---- */
- new->tol = astReadDouble( channel, "tol", -1.0 );
- if ( TestTol( new, status ) ) SetTol( new, new->tol, status );
-
-/* Grid. */
-/* ----- */
- new->grid = astReadInt( channel, "grid", -1 );
- if ( TestGrid( new, status ) ) SetGrid( new, new->grid, status );
-
-/* TickAll. */
-/* -------- */
- new->tickall = astReadInt( channel, "tckall", -1 );
- if ( TestTickAll( new, status ) ) SetTickAll( new, new->tickall, status );
-
-/* ForceExterior. */
-/* -------- */
- new->forceexterior = astReadInt( channel, "frcext", -1 );
- if ( TestForceExterior( new, status ) ) SetForceExterior( new, new->forceexterior, status );
-
-/* Invisible. */
-/* ---------- */
- new->invisible = astReadInt( channel, "invsbl", -1 );
- if ( TestInvisible( new, status ) ) SetInvisible( new, new->invisible, status );
-
-/* Border. */
-/* -------- */
- new->border = astReadInt( channel, "border", -1 );
- if ( TestBorder( new, status ) ) SetBorder( new, new->border, status );
-
-/* ClipOp. */
-/* ------- */
- new->clipop = astReadInt( channel, "clpop", -1 );
- if ( TestClipOp( new, status ) ) SetClipOp( new, new->clipop, status );
-
-/* Clip. */
-/* ----- */
- new->clip = astReadInt( channel, "clip", -1 );
- if ( TestClip( new, status ) ) SetClip( new, new->clip, status );
-
-/* DrawTitle. */
-/* --------- */
- new->drawtitle = astReadInt( channel, "drwttl", -1 );
- if ( TestDrawTitle( new, status ) ) SetDrawTitle( new, new->drawtitle, status );
-
-/* LabelUp(axis). */
-/* -------------- */
- for( axis = 0; axis < nax; axis++ ){
- (void) sprintf( buff, "lblup%d", axis + 1 );
- new->labelup[ axis ] = astReadInt( channel, buff, -1 );
- if ( TestLabelUp( new, axis, status ) ) SetLabelUp( new, axis,
- new->labelup[ axis ], status );
- }
-
-/* LogPlot(axis). */
-/* -------------- */
- for( axis = 0; axis < nax; axis++ ){
- (void) sprintf( buff, "lgplt%d", axis + 1 );
- new->logplot[ axis ] = astReadInt( channel, buff, -1 );
- if ( TestLogPlot( new, axis, status ) ) SetLogPlot( new, axis,
- new->logplot[ axis ], status );
- }
-
-/* LogTicks(axis). */
-/* -------------- */
- for( axis = 0; axis < nax; axis++ ){
- (void) sprintf( buff, "lgtck%d", axis + 1 );
- new->logticks[ axis ] = astReadInt( channel, buff, -1 );
- if ( TestLogTicks( new, axis, status ) ) SetLogTicks( new, axis,
- new->logticks[ axis ], status );
- }
-
-/* LogLabel(axis). */
-/* -------------- */
- for( axis = 0; axis < nax; axis++ ){
- (void) sprintf( buff, "lglbl%d", axis + 1 );
- new->loglabel[ axis ] = astReadInt( channel, buff, -1 );
- if ( TestLogLabel( new, axis, status ) ) SetLogLabel( new, axis,
- new->loglabel[ axis ], status );
- }
-
-/* DrawAxes. */
-/* --------- */
- new->drawaxes[ 0 ] = astReadInt( channel, "drwaxs", -1 );
-
- if( new->drawaxes[ 0 ] != -1 ) {
- new->drawaxes[ 1 ] = new->drawaxes[ 0 ];
- if ( TestDrawAxes( new, 0, status ) ) SetDrawAxes( new, 0, new->drawaxes[ 0 ], status );
- if ( TestDrawAxes( new, 1, status ) ) SetDrawAxes( new, 1, new->drawaxes[ 1 ], status );
-
- } else {
- for( axis = 0; axis < nax; axis++ ){
- (void) sprintf( buff, "drwaxs%d", axis + 1 );
- new->drawaxes[ axis ] = astReadInt( channel, buff, -1 );
- if ( TestDrawAxes( new, axis, status ) ) SetDrawAxes( new, axis,
- new->drawaxes[ axis ], status );
- }
- }
-
-/* Abbrev. */
-/* ------- */
- new->abbrev[ 0 ] = astReadInt( channel, "abbrv", -1 );
-
- if( new->abbrev[ 0 ] != -1 ) {
- new->abbrev[ 1 ] = new->abbrev[ 0 ];
- if ( TestAbbrev( new, 0, status ) ) SetAbbrev( new, 0, new->abbrev[ 0 ], status );
- if ( TestAbbrev( new, 1, status ) ) SetAbbrev( new, 1, new->abbrev[ 1 ], status );
-
- } else {
- for( axis = 0; axis < nax; axis++ ){
- (void) sprintf( buff, "abbrv%d", axis + 1 );
- new->abbrev[ axis ] = astReadInt( channel, buff, -1 );
- if ( TestAbbrev( new, axis, status ) ) SetAbbrev( new, axis,
- new->abbrev[ axis ], status );
- }
- }
-
-
-/* Escape. */
-/* ------- */
- new->escape = astReadInt( channel, "escape", -1 );
- if ( TestEscape( new, status ) ) SetEscape( new, new->escape, status );
-
-/* LabelAt(axis). */
-/* -------------- */
- for( axis = 0; axis < nax; axis++ ){
- (void) sprintf( buff, "lblat%d", axis + 1 );
- new->labelat[ axis ] = astReadDouble( channel, buff, AST__BAD );
- if ( TestLabelAt( new, axis, status ) ) SetLabelAt( new, axis,
- new->labelat[ axis ], status );
- }
-
-/* Centre(axis). */
-/* ------------ */
- for( axis = 0; axis < nax; axis++ ){
- (void) sprintf( buff, "cen%d", axis + 1 );
- new->centre[ axis ] = astReadDouble( channel, buff, AST__BAD );
- if ( TestCentre( new, axis, status ) ) SetCentre( new, axis,
- new->centre[ axis ], status );
- }
-
-/* Gap(axis). */
-/* ---------- */
- for( axis = 0; axis < nax; axis++ ){
- (void) sprintf( buff, "gap%d", axis + 1 );
- new->gap[ axis ] = astReadDouble( channel, buff, AST__BAD );
- if ( TestGap( new, axis, status ) ) SetGap( new, axis, new->gap[ axis ], status );
- }
-
-/* LogGap(axis). */
-/* ------------- */
- for( axis = 0; axis < nax; axis++ ){
- (void) sprintf( buff, "lggap%d", axis + 1 );
- new->loggap[ axis ] = astReadDouble( channel, buff, AST__BAD );
- if ( TestLogGap( new, axis, status ) ) SetLogGap( new, axis, new->loggap[ axis ], status );
- }
-
-/* NumLabGap(axis). */
-/* -------------- */
- for( axis = 0; axis < nax; axis++ ){
- (void) sprintf( buff, "nmgap%d", axis + 1 );
- new->numlabgap[ axis ] = astReadDouble( channel, buff, AST__BAD );
- if ( TestNumLabGap( new, axis, status ) ) SetNumLabGap( new, axis,
- new->numlabgap[ axis ], status );
- }
-
-/* TextLabGap(axis). */
-/* -------------- */
- for( axis = 0; axis < nax; axis++ ){
- (void) sprintf( buff, "txgap%d", axis + 1 );
- new->textlabgap[ axis ] = astReadDouble( channel, buff, AST__BAD );
- if ( TestTextLabGap( new, axis, status ) ) SetTextLabGap( new, axis,
- new->textlabgap[ axis ], status );
- }
-
-/* NumLab(axis). */
-/* ---------------- */
- for( axis = 0; axis < nax; axis++ ){
- (void) sprintf( buff, "nmlbl%d", axis + 1 );
- new->numlab[ axis ] = astReadInt( channel, buff, -1 );
- if ( TestNumLab( new, axis, status ) ) SetNumLab( new, axis,
- new->numlab[ axis ], status );
- }
-
-/* MinTick(axis). */
-/* --------------- */
- for( axis = 0; axis < nax; axis++ ){
- (void) sprintf( buff, "mntks%d", axis + 1 );
- new->mintick[ axis ] = astReadInt( channel, buff, -1 );
- if ( TestMinTick( new, axis, status ) ) SetMinTick( new, axis,
- new->mintick[ axis ], status );
- }
-
-/* TextLab(axis). */
-/* -------------- */
- for( axis = 0; axis < nax; axis++ ){
- (void) sprintf( buff, "txlbl%d", axis + 1 );
- new->textlab[ axis ] = astReadInt( channel, buff, -1 );
- if ( TestTextLab( new, axis, status ) ) SetTextLab( new, axis,
- new->textlab[ axis ], status );
- }
-
-/* LabelUnits(axis). */
-/* --------------- */
- for( axis = 0; axis < nax; axis++ ){
- (void) sprintf( buff, "lbunt%d", axis + 1 );
- new->labelunits[ axis ] = astReadInt( channel, buff, -1 );
- if ( TestLabelUnits( new, axis, status ) ) SetLabelUnits( new, axis,
- new->labelunits[ axis ], status );
- }
-
-/* Style(object). */
-/* ------------ */
- for( id = 0; id < AST__NPID; id++ ){
- (void) sprintf( buff, "style%d", id + 1 );
- new->style[ id ] = astReadInt( channel, buff, -1 );
- if ( TestStyle( new, id, status ) ) SetStyle( new, id, new->style[ id ], status );
- }
-
-/* Font(object). */
-/* ----------- */
- for( id = 0; id < AST__NPID; id++ ){
- (void) sprintf( buff, "font%d", id + 1 );
- new->font[ id ] = astReadInt( channel, buff, -1 );
- if ( TestFont( new, id, status ) ) SetFont( new, id, new->font[ id ], status );
- }
-
-/* Colour(object). */
-/* --------------- */
- for( id = 0; id < AST__NPID; id++ ){
- (void) sprintf( buff, "col%d", id + 1 );
- new->colour[ id ] = astReadInt( channel, buff, -1 );
- if ( TestColour( new, id, status ) ) SetColour( new, id, new->colour[ id ], status );
- }
-
-/* Width(object). */
-/* ------------ */
- for( id = 0; id < AST__NPID; id++ ){
- (void) sprintf( buff, "width%d", id + 1 );
- new->width[ id ] = astReadDouble( channel, buff, AST__BAD );
- if ( TestWidth( new, id, status ) ) SetWidth( new, id, new->width[ id ], status );
- }
-
-/* Size(object). */
-/* ----------- */
- for( id = 0; id < AST__NPID; id++ ){
- (void) sprintf( buff, "size%d", id + 1 );
- new->size[ id ] = astReadDouble( channel, buff, AST__BAD );
- if ( TestSize( new, id, status ) ) SetSize( new, id, new->size[ id ], status );
- }
-
-/* TitleGap. */
-/* --------- */
- new->titlegap = astReadDouble( channel, "ttlgap", AST__BAD );
- if ( TestTitleGap( new, status ) ) SetTitleGap( new, new->titlegap, status );
-
-/* MajTickLen. */
-/* ----------- */
-/* Retained in order to read old Plots - new Plots use MajTickLen(axis). */
- new->majticklen[ 0 ] = astReadDouble( channel, "mjtkln", AST__BAD );
- if( new->majticklen[ 0 ] != AST__BAD ) {
- new->majticklen[ 1 ] = new->majticklen[ 0 ];
- if ( TestMajTickLen( new, 0, status ) ) SetMajTickLen( new, 0, new->majticklen[ 0 ], status );
- if ( TestMajTickLen( new, 1, status ) ) SetMajTickLen( new, 1, new->majticklen[ 1 ], status );
-
-/* MajTickLen(axis). */
-/* ----------------- */
- } else {
- for( axis = 0; axis < nax; axis++ ){
- (void) sprintf( buff, "mjtkln%d", axis + 1 );
- new->majticklen[ axis ] = astReadDouble( channel, buff, AST__BAD );
- if ( TestMajTickLen( new, axis, status ) ) SetMajTickLen( new, axis,
- new->majticklen[ axis ], status );
- }
- }
-
-/* MinTickLen. */
-/* ----------- */
-/* Retained in order to read old Plots - new Plots use MinTickLen(axis). */
- new->minticklen[ 0 ] = astReadDouble( channel, "mntkln", AST__BAD );
- if( new->minticklen[ 0 ] != AST__BAD ) {
- new->minticklen[ 1 ] = new->minticklen[ 0 ];
- if ( TestMinTickLen( new, 0, status ) ) SetMinTickLen( new, 0, new->minticklen[ 0 ], status );
- if ( TestMinTickLen( new, 1, status ) ) SetMinTickLen( new, 1, new->minticklen[ 1 ], status );
-
-/* MinTickLen(axis). */
-/* ----------------- */
- } else {
- for( axis = 0; axis < nax; axis++ ){
- (void) sprintf( buff, "mntkln%d", axis + 1 );
- new->minticklen[ axis ] = astReadDouble( channel, buff, AST__BAD );
- if ( TestMinTickLen( new, axis, status ) ) SetMinTickLen( new, axis,
- new->minticklen[ axis ], status );
- }
- }
-
-/* Labelling. */
-/* ---------- */
- text = astReadString( channel, "lbling", " " );
- if( astOK && strcmp( text, " " ) ) {
- new->labelling = FindString( 2, xlbling, text,
- "the Plot component 'Lbling'",
- "astRead", astGetClass( channel ), status );
- } else {
- new->labelling = -9999;
- }
- if ( TestLabelling( new, status ) ) SetLabelling( new, new->labelling, status );
- text = astFree( text );
-
-/* Edge(axis). */
-/* ----------- */
- for( axis = 0; axis < nax; axis++ ){
- (void) sprintf( buff, "edge%d", axis + 1 );
- text = astReadString( channel, buff, " " );
- if( astOK && strcmp( text, " " ) ) {
- new->edge[ axis ] = FindString( 4, xedge, text,
- "the Plot component 'Edge'",
- "astRead", astGetClass( channel ), status );
- } else {
- new->edge[ axis ] = -1;
- }
- if ( TestEdge( new, axis, status ) ) SetEdge( new, axis,
- new->edge[ axis ], status );
- text = astFree( text );
- }
-
-/* Now do instance variables which are not attributes. */
-/* =================================================== */
-
-/* We have no graphics context. */
- new->grfcontext = NULL;
- new->grfcontextID = NULL;
-
-/* Initialise the protected Ink attribute so that visible ink is used. */
- new->ink = -1;
-
-/* The number of bounds supplied for the clipping volume. */
- new->clip_axes = astReadInt( channel, "clpaxs", 0 );
- if ( new->clip_axes < 0 ) new->clip_axes = 0;
-
-/* The index of the clipping Frame within the Plot. */
- new->clip_frame = astReadInt( channel, "clpfrm", AST__NOFRAME );
-
-/* If necessary, allocate memory to hold the bounds of the clipping volume. */
- if( new->clip_axes > 0 ){
- new->clip_lbnd = astMalloc( sizeof( double ) * (size_t) new->clip_axes );
- new->clip_ubnd = astMalloc( sizeof( double ) * (size_t) new->clip_axes );
-
-/* If an error occurs, ensure that all allocated memory is freed. */
- if ( !astOK ) {
- new->clip_lbnd = (double *) astFree( (void *) new->clip_lbnd );
- new->clip_ubnd = (double *) astFree( (void *) new->clip_ubnd );
-
-/* Otherwise, store the bounds. Use extreme defaults if no values are
- available. */
- } else {
- for( axis = 0; axis < new->clip_axes; axis++ ){
- (void) sprintf( buff, "clplb%d", axis + 1 );
- new->clip_lbnd[ axis ] = astReadDouble( channel, buff, -DBL_MAX );
-
- (void) sprintf( buff, "clpub%d", axis + 1 );
- new->clip_ubnd[ axis ] = astReadDouble( channel, buff, DBL_MAX );
- }
- }
-
-/* If there are no clipping axes, store NULL pointers for the bounds
- arrays. */
- } else {
- new->clip_lbnd = NULL;
- new->clip_ubnd = NULL;
- }
-
-/* The bounds of the plotting area in graphics coords. */
- new->xlo = astReadDouble( channel, "xlo", 0.0 );
- new->xhi = astReadDouble( channel, "xhi", 1.0 );
- new->ylo = astReadDouble( channel, "ylo", 0.0 );
- new->yhi = astReadDouble( channel, "yhi", 1.0 );
-
-/* Axis reversal flags. */
- new->xrev = astReadInt( channel, "xrev", 0 );
- new->yrev = astReadInt( channel, "yrev", 0 );
-
-/* The bounds of the plotting area in the base Frame of the FrameSet
- supplied when the Plot was constructed. */
- new->bbox[ 0 ] = astReadDouble( channel, "xb1", AST__BAD );
- new->bbox[ 1 ] = astReadDouble( channel, "yb1", AST__BAD );
- new->bbox[ 2 ] = astReadDouble( channel, "xb2", AST__BAD );
- new->bbox[ 3 ] = astReadDouble( channel, "yb2", AST__BAD );
-
-/* Grf. */
- new->grf = -1;
- new->GAttr = CGAttrWrapper;
- new->GFlush = CGFlushWrapper;
- new->GLine = CGLineWrapper;
- new->GMark = CGMarkWrapper;
- new->GText = CGTextWrapper;
- new->GCap = CGCapWrapper;
- new->GTxExt = CGTxExtWrapper;
- new->GScales = CGScalesWrapper;
- new->GQch = CGQchWrapper;
- for( i = 0; i < AST__NGRFFUN; i++ ) new->grffun[i] = NULL;
- new->grfstack = NULL;
- new->grfnstack = 0;
-
-/* A stack of AstGat pointers used to store the graphical attributes for
- text within strings which include graphical escape sequences. */
- new->gat = NULL;
- new->ngat = 0;
-
-/* Arrays holding user-specified major and minot tick mark values. */
- for( axis = 0; axis < 3; axis++ ) {
- sprintf( buff, "nmjtk%d", axis + 1 );
- ntick = astReadInt( channel, buff, 0 );
- new->nmajtickval[ axis ] = ntick;
- new->majtickval[ axis ] = astMalloc( ntick*sizeof( double ) );
-
- for( itick = 0; itick < ntick; itick++ ) {
- sprintf( buff, "mjtk%d_%d", axis + 1, itick + 1 );
- new->majtickval[ axis ][ itick ] = astReadDouble( channel, buff,
- AST__BAD );
- }
-
- sprintf( buff, "nmntk%d", axis + 1 );
- ntick = astReadInt( channel, buff, 0 );
- new->nmintickval[ axis ] = ntick;
- new->mintickval[ axis ] = astMalloc( ntick*sizeof( double ) );
-
- for( itick = 0; itick < ntick; itick++ ) {
- sprintf( buff, "mntk%d_%d", axis + 1, itick + 1 );
- new->mintickval[ axis ][ itick ] = astReadDouble( channel, buff,
- AST__BAD );
- }
-
- }
-
-/* Initialise the arrays used to hold information describing the tick
- marks that have already been drawn for each axis. */
- for( axis = 0; axis < 3; axis++ ) {
- new->majtickgx[ axis ] = NULL;
- new->majtickgy[ axis ] = NULL;
- new->majtickcount[ axis ] = 0;
- new->mintickgx[ axis ] = NULL;
- new->mintickgy[ axis ] = NULL;
- new->mintickcount[ axis ] = 0;
- }
-
-/* If an error occurred, clean up by deleting the new Plot. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new Plot pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-int astBorder_( AstPlot *this, int *status ){
- if( !astOK ) return 0;
- return (**astMEMBER(this,Plot,Border))(this, status );
-}
-
-void astBoundingBox_( AstPlot *this, float lbnd[2], float ubnd[2], int *status ){
- if( !astOK ) return;
- (**astMEMBER(this,Plot,BoundingBox))(this,lbnd,ubnd, status );
-}
-
-void astClip_( AstPlot *this, int iframe, const double lbnd[],
-const double ubnd[], int *status ){
- if( !astOK ) return;
- (**astMEMBER(this,Plot,Clip))(this,iframe,lbnd,ubnd, status );
-}
-
-void astGrid_( AstPlot *this, int *status ){
- if( !astOK ) return;
- (**astMEMBER(this,Plot,Grid))(this, status );
-}
-
-int astCvBrk_( AstPlot *this, int ibrk, double *brk, double *vbrk,
- double *len, int *status ){
- if( !astOK ) return 0;
- return (**astMEMBER(this,Plot,CvBrk))(this,ibrk,brk,vbrk,len, status );
-}
-
-void astMirror_( AstPlot *this, int axis, int *status ){
- if( !astOK ) return;
- (**astMEMBER(this,Plot,Mirror))(this,axis, status );
-}
-
-AstPointSet *astGetDrawnTicks_( AstPlot *this, int axis, int major, int *status ){
- if( !astOK ) return NULL;
- return (**astMEMBER(this,Plot,GetDrawnTicks))(this,axis,major, status );
-}
-
-void astSetTickValues_( AstPlot *this, int axis, int nmajor, double *major,
- int nminor, double *minor, int *status ){
- if( !astOK ) return;
- (**astMEMBER(this,Plot,SetTickValues))(this,axis,nmajor,major,nminor,minor, status );
-}
-
-void astCopyPlotDefaults_( AstPlot *this, int axis, AstPlot *dplot,
- int daxis, int *status ){
- if( !astOK ) return;
- (**astMEMBER(this,Plot,CopyPlotDefaults))(this,axis,dplot,daxis, status );
-}
-
-int astGetLabelUnits_( AstPlot *this, int axis, int *status ){
- if( !astOK ) return 0;
- return (**astMEMBER(this,Plot,GetLabelUnits))(this,axis, status );
-}
-
-void astMark_( AstPlot *this, int nmark, int ncoord, int indim,
- const double *in, int type, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Plot,Mark))( this, nmark, ncoord, indim, in, type, status );
-}
-
-void astText_( AstPlot *this, const char *text, const double pos[],
- const float up[], const char *just, int *status ){
- if ( !astOK ) return;
- (**astMEMBER(this,Plot,Text))( this, text, pos, up, just, status );
-}
-
-void astGridLine_( AstPlot *this, int axis, const double start[], double length, int *status ){
- if( !astOK ) return;
- (**astMEMBER(this,Plot,GridLine))(this,axis,start,length, status );
-}
-
-void astCurve_( AstPlot *this, const double start[], const double finish[], int *status ){
- if( !astOK ) return;
- (**astMEMBER(this,Plot,Curve))(this,start,finish, status );
-}
-
-void astGenCurve_( AstPlot *this, AstMapping *map, int *status ){
- if( !astOK ) return;
- (**astMEMBER(this,Plot,GenCurve))(this,map, status );
-}
-
-void astPolyCurve_( AstPlot *this, int npoint, int ncoord, int dim,
- const double *in, int *status ){
- if( !astOK ) return;
- (**astMEMBER(this,Plot,PolyCurve))(this,npoint,ncoord,dim,in, status );
-}
-
-void astGrfSet_( AstPlot *this, const char *name, AstGrfFun fun, int *status ){
- if( !astOK ) return;
- (**astMEMBER(this,Plot,GrfSet))(this,name,fun, status );
-}
-
-void astGrfPush_( AstPlot *this, int *status ){
- if( !astOK ) return;
- (**astMEMBER(this,Plot,GrfPush))(this, status );
-}
-
-void astGrfPop_( AstPlot *this, int *status ){
- if( !astOK ) return;
- (**astMEMBER(this,Plot,GrfPop))(this, status );
-}
-
-void astGrfWrapper_( AstPlot *this, const char *name, AstGrfWrap wrapper, int *status ){
- if( !astOK ) return;
- (**astMEMBER(this,Plot,GrfWrapper))(this,name,wrapper, status );
-}
-
-void astSetLogPlot_( AstPlot *this, int axis, int value, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Plot,SetLogPlot))( this, axis, value, status );
-}
-
-void astClearLogPlot_( AstPlot *this, int axis, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Plot,ClearLogPlot))( this, axis, status );
-}
-
-AstKeyMap *astGetGrfContext_( AstPlot *this, int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Plot,GetGrfContext))( this, status );
-}
-
-/* Special public interface functions. */
-/* =================================== */
-/* These provide the public interface to certain special functions
- whose public interface cannot be handled using macros (such as
- astINVOKE) alone. In general, they are named after the
- corresponding protected version of the function, but with "Id"
- appended to the name. */
-
-/* Special interface function implementations. */
-/* ------------------------------------------- */
-AstPlot *astPlotId_( void *frame_void, const float graphbox[4],
- const double basebox[4], const char *options, ... ) {
-/*
-*++
-* Name:
-c astPlot
-f AST_PLOT
-
-* Purpose:
-* Create a Plot.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "plot.h"
-c AstPlot *astPlot( AstFrame *frame, const float graphbox[ 4 ],
-c const double basebox[ 4 ], const char *options, ... )
-f RESULT = AST_PLOT( FRAME, GRAPHBOX, BASEBOX, OPTIONS, STATUS )
-
-* Class Membership:
-* Plot constructor.
-
-* Description:
-* This function creates a new Plot and optionally initialises its
-* attributes.
-*
-* A Plot is a specialised form of FrameSet, in which the base
-* Frame describes a "graphical" coordinate system and is
-* associated with a rectangular plotting area in the underlying
-* graphics system. This plotting area is where graphical output
-* appears. It is defined when the Plot is created.
-*
-* The current Frame of a Plot describes a "physical" coordinate
-* system, which is the coordinate system in which plotting
-* operations are specified. The results of each plotting operation
-* are automatically transformed into graphical coordinates so as
-* to appear in the plotting area (subject to any clipping which
-* may be in effect).
-*
-* Because the Mapping between physical and graphical coordinates
-* may often be non-linear, or even discontinuous, most plotting
-* does not result in simple straight lines. The basic plotting
-* element is therefore not a straight line, but a geodesic curve
-c (see astCurve). A Plot also provides facilities for drawing
-c markers or symbols (astMark), text (astText) and grid lines
-c (astGridLine). It is also possible to draw curvilinear axes with
-c optional coordinate grids (astGrid).
-f (see AST_CURVE). A Plot also provides facilities for drawing
-f markers or symbols (AST_MARK), text (AST_TEXT) and grid lines
-f (AST_GRIDLINE). It is also possible to draw curvilinear axes
-f with optional coordinate grids (AST_GRID).
-* A range of Plot attributes is available to allow precise control
-* over the appearance of graphical output produced by these
-c functions.
-f routines.
-*
-* You may select different physical coordinate systems in which to
-* plot (including the native graphical coordinate system itself)
-* by selecting different Frames as the current Frame of a Plot,
-* using its Current attribute. You may also set up clipping (see
-c astClip) to limit the extent of any plotting you perform, and
-f AST_CLIP) to limit the extent of any plotting you perform, and
-* this may be done in any of the coordinate systems associated
-* with the Plot, not necessarily the one you are plotting in.
-*
-* Like any FrameSet, a Plot may also be used as a Frame. In this
-* case, it behaves like its current Frame, which describes the
-* physical coordinate system.
-*
-* When used as a Mapping, a Plot describes the inter-relation
-* between graphical coordinates (its base Frame) and physical
-* coordinates (its current Frame). It differs from a normal
-* FrameSet, however, in that an attempt to transform points which
-* lie in clipped areas of the Plot will result in bad coordinate
-* values (AST__BAD).
-
-* Parameters:
-c frame
-f FRAME = INTEGER (Given)
-* Pointer to a Frame describing the physical coordinate system
-* in which to plot. A pointer to a FrameSet may also be given,
-* in which case its current Frame will be used to define the
-* physical coordinate system and its base Frame will be mapped
-* on to graphical coordinates (see below).
-*
-* If a null Object pointer (AST__NULL) is given, a default
-* 2-dimensional Frame will be used to describe the physical
-* coordinate system. Labels, etc. may then be attached to this
-* by setting the appropriate Frame attributes
-* (e.g. Label(axis)) for the Plot.
-c graphbox
-f GRAPHBOX( 4 ) = REAL (Given)
-* An array giving the position and extent of the plotting area
-* (on the plotting surface of the underlying graphics system)
-* in which graphical output is to appear. This must be
-* specified using graphical coordinates appropriate to the
-* underlying graphics system.
-*
-* The first pair of values should give the coordinates of the
-* bottom left corner of the plotting area and the second pair
-* should give the coordinates of the top right corner. The
-* coordinate on the horizontal axis should be given first in
-* each pair. Note that the order in which these points are
-* given is important because it defines up, down, left and
-* right for subsequent graphical operations.
-c basebox
-f BASEBOX( 4 ) = DOUBLE PRECISION (Given)
-* An array giving the coordinates of two points in the supplied
-* Frame (or in the base Frame if a FrameSet was supplied) which
-* correspond to the bottom left and top right corners of the
-* plotting area, as specified above. This range of coordinates
-* will be mapped linearly on to the plotting area. The
-* coordinates should be given in the same order as above.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new Plot. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-c If no initialisation is required, a zero-length string may be
-c supplied.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new Plot. The syntax used is identical to that for the
-f AST_SET routine. If no initialisation is required, a blank
-f value may be supplied.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astPlot()
-f AST_PLOT
-* A pointer to the new Plot.
-
-* Notes:
-* - The base Frame of the returned Plot will be a new Frame which
-* is created by this function to represent the coordinate system
-* of the underlying graphics system (graphical coordinates). It is
-* given a Frame index of 1 within the Plot. The choice of base
-* Frame (Base attribute) should not, in general, be changed once a
-* Plot has been created (although you could use this as a way of
-* moving the plotting area around on the plotting surface).
-c - If a Frame is supplied (via the "frame" pointer), then it
-f - If a Frame is supplied (via the FRAME pointer), then it
-* becomes the current Frame of the new Plot and is given a Frame
-* index of 2.
-c - If a FrameSet is supplied (via the "frame" pointer), then
-f - If a FrameSet is supplied (via the FRAME pointer), then
-* all the Frames within this FrameSet become part of the new Plot
-* (where their Frame indices are increased by 1), with the
-* FrameSet's current Frame becoming the current Frame of the Plot.
-* - If a null Object pointer (AST__NULL) is supplied (via the
-c "frame" pointer), then the returned Plot will contain two
-f FRAME pointer), then the returned Plot will contain two
-* Frames, both created by this function. The base Frame will
-* describe graphics coordinates (as above) and the current Frame
-* will be a basic Frame with no attributes set (this will
-* therefore give default values for such things as the Plot Title
-* and the Label on each axis). Physical coordinates will be mapped
-* linearly on to graphical coordinates.
-* - An error will result if the Frame supplied (or the base Frame
-* if a FrameSet was supplied) is not 2-dimensional.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-
-* Implementation Notes:
-* - This function implements the external (public) interface to
-* the astPlot constructor function. It returns an ID value
-* (instead of a true C pointer) to external users, and must be
-* provided because astPlot_ has a variable argument list which
-* cannot be encapsulated in a macro (where this conversion would
-* otherwise occur).
-* - Because no checking or casting of arguments is performed
-* before the function is invoked, the "frame" parameter is of type
-* (void *) and is converted from an ID value to a pointer and
-* validated within the function itself.
-* - The variable argument list also prevents this function from
-* invoking astPlot_ directly, so it must be a
-* re-implementation of it in all respects, except for the
-* conversions between IDs and pointers on input/output of Objects.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *frame; /* Pointer to Frame structure */
- AstPlot *new; /* Pointer to new Plot */
- va_list args; /* Variable argument list */
- int *status; /* Pointer to inherited status value */
-
-/* Get apointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- new = NULL;
-
-/* Obtain a Frame pointer from any ID supplied and validate the
- pointer to ensure it identifies a valid Frame. */
- if( frame_void ){
- frame = astVerifyFrame( astMakePointer( frame_void ) );
- } else {
- frame = NULL;
- }
-
-/* Check the pointer can be used. */
- if ( astOK ) {
-
-/* Initialise the Plot, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitPlot( NULL, sizeof( AstPlot ), !class_init,
- &class_vtab, "Plot", frame, graphbox,
- basebox );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- Plot's attributes. */
-
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return an ID value for the new Plot. */
- return astMakeId( new );
-
-}
-
-
-
diff --git a/ast-5.3-1/plot.h b/ast-5.3-1/plot.h
deleted file mode 100644
index 1406e42..0000000
--- a/ast-5.3-1/plot.h
+++ /dev/null
@@ -1,1385 +0,0 @@
-#if !defined( PLOT_INCLUDED ) /* Include this file only once */
-#define PLOT_INCLUDED
-/*
-*+
-* Name:
-* plot.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the Plot class.
-
-* Invocation:
-* #include "plot.h"
-
-* Description:
-* This include file defines the interface to the Plot class and
-* provides the type definitions, function prototypes and macros, etc.
-* needed to use this class.
-*
-* The Plot class provides facilities for producing graphical information
-* describing positions within coordinate systems. These include the
-* creation of annotated coordinate axes, the plotting of markers at given
-* physical positions, etc.
-
-* Inheritance:
-* The Plot class inherits from the FrameSet class.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-
-* History:
-* 18-SEP-1996 (DSB):
-* Original version.
-* 28-OCT-1998 (DSB):
-* Added method astPolyCurve.
-* 12-OCT-1999 (DSB):
-* Allow tick marks to be specified separately for both axes.
-* 9-JAN-2001 (DSB):
-* Change argument "in" for astMark and astPolyCurve from type
-* "const double (*)[]" to "const double *".
-* 13-JUN-2001 (DSB):
-* Added methods astGenCurve, astGrfSet, astGrfPop, astGrfPush and
-* attribute Grf.
-* 8-JAN-2003 (DSB):
-* Added protected astInitPlotVtab method.
-* 13-JAN-2004 (DSB):
-* Added bbox, logticks and logplot to the AstPlot structure. Added
-* LogPlot and LogTicks accessor methods.
-* 19-JAN-2004 (DSB):
-* Added loggap and loglabel to the AstPlot structure. Added
-* LogGap and LogLabel accessor methods.
-* 21-MAR-2005 (DSB):
-* - Added the Clip attribute.
-* 24-OCT-2006 (DSB):
-* - Remove duplicated documentation from prologue.
-* - Add ForceExterior attribute.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "frameset.h" /* Parent FrameSet class */
-#include "keymap.h"
-#include "region.h"
-
-#if defined(astCLASS) /* Protected */
-#include "grf.h"
-#endif
-
-/* C header files. */
-/* --------------- */
-#include <stddef.h>
-
-/* Macros. */
-/* ======= */
-
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-#define AST__NPID 20 /* No. of different genuine plot object id's */
-
-#define AST__GATTR 0 /* Identifiers for GRF functions */
-#define AST__GFLUSH 1 /* Note, if any items are added or changed here, */
-#define AST__GLINE 2 /* make sure that the astGrfFunID function is */
-#define AST__GMARK 3 /* updated in plot.c */
-#define AST__GTEXT 4
-#define AST__GTXEXT 5
-#define AST__GSCALES 6
-#define AST__GQCH 7
-#define AST__GCAP 8
-
-#define AST__NGRFFUN 9 /* No. of Grf functions used by Plot */
-
-#if defined(astCLASS) /* Protected */
-#define AST__MXBRK 100 /* Max. no. of breaks in a drawn curve */
-
-/* Identifiers for the graphical elements of an annotated coord grid.
- "Pseudo-elements" (i.e. values used to indicate a group of other
- genuine elements) should come at the end of the list. The number of
- genuine elements should be stored in AST__NPID. */
-#define AST__BORDER_ID 0 /* Id for astBorder curves */
-#define AST__CURVE_ID 1 /* Id for astCurve, astGenCurve or astPolyCurve curves */
-#define AST__TITLE_ID 2 /* Id for textual title */
-#define AST__MARKS_ID 3 /* Id for marks drawn by astMark */
-#define AST__TEXT_ID 4 /* Id for text strings drawn by astText */
-#define AST__AXIS1_ID 5 /* Id for axis 1 through interior tick marks */
-#define AST__AXIS2_ID 6 /* Id for axis 2 through interior tick marks */
-#define AST__AXIS3_ID 7 /* Id for axis 2 through interior tick marks */
-#define AST__NUMLAB1_ID 8 /* Id for numerical labels */
-#define AST__NUMLAB2_ID 9 /* Id for numerical labels */
-#define AST__NUMLAB3_ID 10 /* Id for numerical labels */
-#define AST__TEXTLAB1_ID 11 /* Id for textual axis labels */
-#define AST__TEXTLAB2_ID 12 /* Id for textual axis labels */
-#define AST__TEXTLAB3_ID 13 /* Id for textual axis labels */
-#define AST__TICKS1_ID 14 /* Id for major and minor tick marks */
-#define AST__TICKS2_ID 15 /* Id for major and minor tick marks */
-#define AST__TICKS3_ID 16 /* Id for major and minor tick marks */
-#define AST__GRIDLINE1_ID 17 /* Id for axis 1 astGridLine AST__curves */
-#define AST__GRIDLINE2_ID 18 /* Id for axis 2 astGridLine AST__curves */
-#define AST__GRIDLINE3_ID 19 /* Id for axis 2 astGridLine AST__curves */
-#define AST__AXES_ID 20 /* Id for axes through interior tick marks */
-#define AST__NUMLABS_ID 21 /* Id for numerical labels */
-#define AST__TEXTLABS_ID 22 /* Id for textual axis labels */
-#define AST__GRIDLINE_ID 23 /* Id for astGridLine AST__curves */
-#define AST__TICKS_ID 24 /* Id for major and minor tick marks */
-
-/* Define constants used to size global arrays in this module. */
-#define AST__PLOT_POLY_MAX 1000 /* Max. no. of points in a poly line */
-#define AST__PLOT_CRV_MXBRK 1000 /* Max. no. of breaks allowed in a plotted curve */
-#define AST__PLOT_STRIPESCAPES_BUFF_LEN 50 /* Length of string returned by astStripEscapes */
-
-#endif
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions */
-/* ================ */
-
-/* Pre-declare the AstPlot structure so that it can be used within the
- GRF function typedefs. */
-struct AstPlot;
-
-/* Interfaces for GRF functions */
-/* ---------------------------- */
-/* A general interface into which actual Grf functions should be cast
- before being passed as an argument to astGrfSet. */
-typedef void (* AstGrfFun)( void );
-
-/* Interfaces for specific Grf funstions implemented in C (other languages
- may have different interfaces). */
-typedef int (* AstGAttrFun)( AstKeyMap *, int, double, double *, int );
-typedef int (* AstGFlushFun)( AstKeyMap * );
-typedef int (* AstGLineFun)( AstKeyMap *, int, const float *, const float * );
-typedef int (* AstGMarkFun)( AstKeyMap *, int, const float *, const float *, int );
-typedef int (* AstGTextFun)( AstKeyMap *, const char *, float, float, const char *, float, float );
-typedef int (* AstGCapFun)( AstKeyMap *, int, int );
-typedef int (* AstGTxExtFun)( AstKeyMap *, const char *, float, float, const char *, float, float, float *, float * );
-typedef int (* AstGScalesFun)( AstKeyMap *, float *, float * );
-typedef int (* AstGQchFun)( AstKeyMap *, float *, float * );
-
-/* A general interface into which Grf Wrapper functions should be cast
- before being passed as an argument to astGrfWrapper. */
-typedef void (* AstGrfWrap)( void );
-
-/* Interfaces for the wrapper functions which wrap specific Grf funstions. */
-typedef int (* AstGAttrWrap)( struct AstPlot *, int, double, double *, int, int * );
-typedef int (* AstGFlushWrap)( struct AstPlot *, int * );
-typedef int (* AstGLineWrap)( struct AstPlot *, int, const float *, const float *, int * );
-typedef int (* AstGMarkWrap)( struct AstPlot *, int, const float *, const float *, int, int * );
-typedef int (* AstGTextWrap)( struct AstPlot *, const char *, float, float, const char *, float, float, int * );
-typedef int (* AstGCapWrap)( struct AstPlot *, int, int, int * );
-typedef int (* AstGTxExtWrap)( struct AstPlot *, const char *, float, float, const char *, float, float, float *, float *, int * );
-typedef int (* AstGScalesWrap)( struct AstPlot *, float *, float *, int * );
-typedef int (* AstGQchWrap)( struct AstPlot *, float *, float *, int * );
-
-/* A structure in which a collection of Grf function pointers can be
- stored. */
-typedef struct AstGrfPtrs {
- AstGrfFun grffun[AST__NGRFFUN];
- AstGAttrWrap GAttr;
- AstGFlushWrap GFlush;
- AstGLineWrap GLine;
- AstGMarkWrap GMark;
- AstGTextWrap GText;
- AstGCapWrap GCap;
- AstGTxExtWrap GTxExt;
- AstGScalesWrap GScales;
- AstGQchWrap GQch;
-} AstGrfPtrs;
-
-/* Structure holding current graphical attribute values for text. */
-typedef struct AstGat {
- float rise;
- double size;
- double width;
- double col;
- double font;
- double style;
-} AstGat;
-
-/* Plot structure. */
-/* ------------------- */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstPlot {
-
-/* Attributes inherited from the parent class. */
- AstFrameSet parent; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- double *clip_lbnd;
- double *clip_ubnd;
- double centre[ 3 ];
- double gap[ 3 ];
- double loggap[ 3 ];
- double labelat[ 3 ];
- double majticklen[ 3 ];
- double minticklen[ 3 ];
- double numlabgap[ 3 ];
- double size[ AST__NPID ];
- double textlabgap[ 3 ];
- double titlegap;
- double tol;
- double ucentre[ 3 ];
- double ugap[ 3 ];
- double uloggap[ 3 ];
- double ulblat[ 3 ];
- double umjtkln[ 3 ];
- double width[ AST__NPID ];
- double *majtickgx[ 3 ];
- double *majtickgy[ 3 ];
- double *mintickgx[ 3 ];
- double *mintickgy[ 3 ];
- int majtickcount[ 3 ];
- int mintickcount[ 3 ];
- int nmajtickval[ 3 ];
- double *majtickval[ 3 ];
- int nmintickval[ 3 ];
- double *mintickval[ 3 ];
- double xhi;
- double xlo;
- double yhi;
- double ylo;
- double bbox[ 4 ];
- int border;
- int clip_axes;
- int clip_frame;
- int clip;
- int clipop;
- int colour[ AST__NPID ];
- int drawaxes[ 3 ];
- int abbrev[ 3 ];
- int escape;
- int drawtitle;
- int edge[ 3 ];
- int font[ AST__NPID ];
- int grf;
- int grid;
- int invisible;
- int labelling;
- int labelunits[ 3 ];
- int labelup[ 3 ];
- int mintick[ 3 ];
- int numlab[ 3 ];
- int style[ AST__NPID ];
- int textlab[ 3 ];
- int tickall;
- int forceexterior;
- int uborder;
- int uedge[ 3 ];
- int ugrid;
- int ulbling;
- int ulbunit[ 3 ];
- int ulgtk[ 3 ];
- int ulglb[ 3 ];
- int umintk[ 3 ];
- int utxtlb[ 3 ];
- int xrev;
- int yrev;
- int ink;
- int logplot[ 3 ];
- int logticks[ 3 ];
- int loglabel[ 3 ];
- AstGrfFun grffun[AST__NGRFFUN];
- AstGAttrWrap GAttr;
- AstGFlushWrap GFlush;
- AstGLineWrap GLine;
- AstGMarkWrap GMark;
- AstGTextWrap GText;
- AstGCapWrap GCap;
- AstGTxExtWrap GTxExt;
- AstGScalesWrap GScales;
- AstGQchWrap GQch;
- AstGrfPtrs *grfstack;
- int grfnstack;
- AstGat **gat;
- int ngat;
- AstKeyMap *grfcontext;
- AstKeyMap *grfcontextID;
- float hmarkx;
- float hmarky;
-
-} AstPlot;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-
-typedef struct AstPlotVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstFrameSetVtab FrameSet_vtab;/* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- AstPointSet *(* GetDrawnTicks)( AstPlot *, int, int, int * );
- void (* SetTickValues)( AstPlot *, int, int, double *, int, double *, int * );
- void (* DrawExtraTicks)( AstPlot *, int, AstPointSet *, int * );
- int (* Border)( AstPlot *, int * );
- void (* BoundingBox)( AstPlot *, float[2], float[2], int * );
- AstKeyMap *(* GetGrfContext)( AstPlot *, int * );
- void (* Clip)( AstPlot *, int, const double [], const double [], int * );
- int (* CvBrk)( AstPlot *, int, double *, double *, double *, int * );
- void (* CopyPlotDefaults)( AstPlot *, int, AstPlot *, int, int * );
- void (* Mirror)( AstPlot *, int, int * );
- void (* GridLine)( AstPlot *, int, const double [], double, int * );
- void (* Curve)( AstPlot *, const double [], const double [], int * );
- void (* GenCurve)( AstPlot *, AstMapping *, int * );
- void (* PolyCurve)( AstPlot *, int, int, int, const double *, int * );
- void (* GrfSet)( AstPlot *, const char *, AstGrfFun, int * );
- void (* GrfPush)( AstPlot *, int * );
- void (* GrfPop)( AstPlot *, int * );
- void (* GrfWrapper)( AstPlot *, const char *, AstGrfWrap, int * );
- void (* Grid)( AstPlot *, int * );
- void (* Mark)( AstPlot *, int, int, int, const double *, int, int * );
- void (* Text)( AstPlot *, const char *, const double [], const float [], const char *, int * );
-
- double (* GetTol)( AstPlot *, int * );
- int (* TestTol)( AstPlot *, int * );
- void (* SetTol)( AstPlot *, double, int * );
- void (* ClearTol)( AstPlot *, int * );
-
- int (* GetGrid)( AstPlot *, int * );
- int (* TestGrid)( AstPlot *, int * );
- void (* SetGrid)( AstPlot *, int, int * );
- void (* ClearGrid)( AstPlot *, int * );
-
- int (* GetTickAll)( AstPlot *, int * );
- int (* TestTickAll)( AstPlot *, int * );
- void (* SetTickAll)( AstPlot *, int, int * );
- void (* ClearTickAll)( AstPlot *, int * );
-
- int (* GetForceExterior)( AstPlot *, int * );
- int (* TestForceExterior)( AstPlot *, int * );
- void (* SetForceExterior)( AstPlot *, int, int * );
- void (* ClearForceExterior)( AstPlot *, int * );
-
- int (* GetInvisible)( AstPlot *, int * );
- int (* TestInvisible)( AstPlot *, int * );
- void (* SetInvisible)( AstPlot *, int, int * );
- void (* ClearInvisible)( AstPlot *, int * );
-
- int (* GetBorder)( AstPlot *, int * );
- int (* TestBorder)( AstPlot *, int * );
- void (* SetBorder)( AstPlot *, int, int * );
- void (* ClearBorder)( AstPlot *, int * );
-
- int (* GetClipOp)( AstPlot *, int * );
- int (* TestClipOp)( AstPlot *, int * );
- void (* SetClipOp)( AstPlot *, int, int * );
- void (* ClearClipOp)( AstPlot *, int * );
-
- int (* GetClip)( AstPlot *, int * );
- int (* TestClip)( AstPlot *, int * );
- void (* SetClip)( AstPlot *, int, int * );
- void (* ClearClip)( AstPlot *, int * );
-
- int (* GetGrf)( AstPlot *, int * );
- int (* TestGrf)( AstPlot *, int * );
- void (* SetGrf)( AstPlot *, int, int * );
- void (* ClearGrf)( AstPlot *, int * );
-
- int (* GetDrawTitle)( AstPlot *, int * );
- int (* TestDrawTitle)( AstPlot *, int * );
- void (* SetDrawTitle)( AstPlot *, int, int * );
- void (* ClearDrawTitle)( AstPlot *, int * );
-
- int (* GetLabelUp)( AstPlot *, int, int * );
- int (* TestLabelUp)( AstPlot *, int, int * );
- void (* SetLabelUp)( AstPlot *, int, int, int * );
- void (* ClearLabelUp)( AstPlot *, int, int * );
-
- int (* GetLogPlot)( AstPlot *, int, int * );
- int (* TestLogPlot)( AstPlot *, int, int * );
- void (* SetLogPlot)( AstPlot *, int, int, int * );
- void (* ClearLogPlot)( AstPlot *, int, int * );
-
- int (* GetLogTicks)( AstPlot *, int, int * );
- int (* TestLogTicks)( AstPlot *, int, int * );
- void (* SetLogTicks)( AstPlot *, int, int, int * );
- void (* ClearLogTicks)( AstPlot *, int, int * );
-
- int (* GetLogLabel)( AstPlot *, int, int * );
- int (* TestLogLabel)( AstPlot *, int, int * );
- void (* SetLogLabel)( AstPlot *, int, int, int * );
- void (* ClearLogLabel)( AstPlot *, int, int * );
-
- int (* GetDrawAxes)( AstPlot *, int, int * );
- int (* TestDrawAxes)( AstPlot *, int, int * );
- void (* SetDrawAxes)( AstPlot *, int, int, int * );
- void (* ClearDrawAxes)( AstPlot *, int, int * );
-
- int (* GetAbbrev)( AstPlot *, int, int * );
- int (* TestAbbrev)( AstPlot *, int, int * );
- void (* SetAbbrev)( AstPlot *, int, int, int * );
- void (* ClearAbbrev)( AstPlot *, int, int * );
-
- int (* GetEscape)( AstPlot *, int * );
- int (* TestEscape)( AstPlot *, int * );
- void (* SetEscape)( AstPlot *, int, int * );
- void (* ClearEscape)( AstPlot *, int * );
-
- int (* GetLabelling)( AstPlot *, int * );
- int (* TestLabelling)( AstPlot *, int * );
- void (* SetLabelling)( AstPlot *, int, int * );
- void (* ClearLabelling)( AstPlot *, int * );
-
- double (* GetMajTickLen)( AstPlot *, int, int * );
- int (* TestMajTickLen)( AstPlot *, int, int * );
- void (* SetMajTickLen)( AstPlot *, int, double, int * );
- void (* ClearMajTickLen)( AstPlot *, int, int * );
-
- double (* GetMinTickLen)( AstPlot *, int, int * );
- int (* TestMinTickLen)( AstPlot *, int, int * );
- void (* SetMinTickLen)( AstPlot *, int, double, int * );
- void (* ClearMinTickLen)( AstPlot *, int, int * );
-
- double (* GetNumLabGap)( AstPlot *, int, int * );
- int (* TestNumLabGap)( AstPlot *, int, int * );
- void (* SetNumLabGap)( AstPlot *, int, double, int * );
- void (* ClearNumLabGap)( AstPlot *, int, int * );
-
- double (* GetTextLabGap)( AstPlot *, int, int * );
- int (* TestTextLabGap)( AstPlot *, int, int * );
- void (* SetTextLabGap)( AstPlot *, int, double, int * );
- void (* ClearTextLabGap)( AstPlot *, int, int * );
-
- double (* GetTitleGap)( AstPlot *, int * );
- int (* TestTitleGap)( AstPlot *, int * );
- void (* SetTitleGap)( AstPlot *, double, int * );
- void (* ClearTitleGap)( AstPlot *, int * );
-
- double (* GetLabelAt)( AstPlot *, int, int * );
- int (* TestLabelAt)( AstPlot *, int, int * );
- void (* SetLabelAt)( AstPlot *, int, double, int * );
- void (* ClearLabelAt)( AstPlot *, int, int * );
-
- double (* GetGap)( AstPlot *, int, int * );
- int (* TestGap)( AstPlot *, int, int * );
- void (* SetGap)( AstPlot *, int, double, int * );
- void (* ClearGap)( AstPlot *, int, int * );
-
- double (* GetLogGap)( AstPlot *, int, int * );
- int (* TestLogGap)( AstPlot *, int, int * );
- void (* SetLogGap)( AstPlot *, int, double, int * );
- void (* ClearLogGap)( AstPlot *, int, int * );
-
- double (* GetCentre)( AstPlot *, int, int * );
- int (* TestCentre)( AstPlot *, int, int * );
- void (* SetCentre)( AstPlot *, int, double, int * );
- void (* ClearCentre)( AstPlot *, int, int * );
-
- int (* GetEdge)( AstPlot *, int, int * );
- int (* TestEdge)( AstPlot *, int, int * );
- void (* SetEdge)( AstPlot *, int, int, int * );
- void (* ClearEdge)( AstPlot *, int, int * );
-
- int (* GetNumLab)( AstPlot *, int, int * );
- int (* TestNumLab)( AstPlot *, int, int * );
- void (* SetNumLab)( AstPlot *, int, int, int * );
- void (* ClearNumLab)( AstPlot *, int, int * );
-
- int (* GetMinTick)( AstPlot *, int, int * );
- int (* TestMinTick)( AstPlot *, int, int * );
- void (* SetMinTick)( AstPlot *, int, int, int * );
- void (* ClearMinTick)( AstPlot *, int, int * );
-
- int (* GetTextLab)( AstPlot *, int, int * );
- int (* TestTextLab)( AstPlot *, int, int * );
- void (* SetTextLab)( AstPlot *, int, int, int * );
- void (* ClearTextLab)( AstPlot *, int, int * );
-
- int (* GetLabelUnits)( AstPlot *, int, int * );
- int (* TestLabelUnits)( AstPlot *, int, int * );
- void (* SetLabelUnits)( AstPlot *, int, int, int * );
- void (* ClearLabelUnits)( AstPlot *, int, int * );
-
- int (* GetStyle)( AstPlot *, int, int * );
- int (* TestStyle)( AstPlot *, int, int * );
- void (* SetStyle)( AstPlot *, int, int, int * );
- void (* ClearStyle)( AstPlot *, int, int * );
-
- int (* GetFont)( AstPlot *, int, int * );
- int (* TestFont)( AstPlot *, int, int * );
- void (* SetFont)( AstPlot *, int, int, int * );
- void (* ClearFont)( AstPlot *, int, int * );
-
- int (* GetColour)( AstPlot *, int, int * );
- int (* TestColour)( AstPlot *, int, int * );
- void (* SetColour)( AstPlot *, int, int, int * );
- void (* ClearColour)( AstPlot *, int, int * );
-
- double (* GetWidth)( AstPlot *, int, int * );
- int (* TestWidth)( AstPlot *, int, int * );
- void (* SetWidth)( AstPlot *, int, double, int * );
- void (* ClearWidth)( AstPlot *, int, int * );
-
- double (* GetSize)( AstPlot *, int, int * );
- int (* TestSize)( AstPlot *, int, int * );
- void (* SetSize)( AstPlot *, int, double, int * );
- void (* ClearSize)( AstPlot *, int, int * );
-
- int (* GetInk)( AstPlot *, int * );
- int (* TestInk)( AstPlot *, int * );
- void (* SetInk)( AstPlot *, int, int * );
- void (* ClearInk)( AstPlot *, int * );
-
-} AstPlotVtab;
-
-/* Structure holding information about curves drawn by astGridLine and
- astCurve. */
-typedef struct AstPlotCurveData{
- int out; /* Was the curve completely outside the clipping area? */
- int nbrk; /* The number of breaks in the curve. */
- float xbrk[ AST__PLOT_CRV_MXBRK ]; /* Graphics X coordinate at each break. */
- float ybrk[ AST__PLOT_CRV_MXBRK ]; /* Graphics Y coordinate at each break. */
- float vxbrk[ AST__PLOT_CRV_MXBRK ]; /* X comp. of unit tangent vector */
- float vybrk[ AST__PLOT_CRV_MXBRK ]; /* Y comp. of unit tangent vector */
- float length; /* Drawn length of the curve in graphics coordinates */
-} AstPlotCurveData;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstPlotGlobals {
- AstPlotVtab Class_Vtab;
- int Class_Init;
- double GrfAttrs_attrs_t[ GRF__NATTR ];
- int GrfAttrs_nesting_t;
- double Crv_limit_t;
- double Crv_scerr_t;
- double Crv_tol_t;
- double Crv_ux0_t;
- double Crv_uy0_t;
- double Crv_vxl_t;
- double Crv_vyl_t;
- double Crv_xhi_t;
- double Crv_xl_t;
- double Crv_xlo_t;
- double Crv_yhi_t;
- double Crv_yl_t;
- double Crv_ylo_t;
- float *Crv_vxbrk_t;
- float *Crv_vybrk_t;
- float *Crv_xbrk_t;
- float *Crv_ybrk_t;
- float Crv_len_t;
- int Crv_ink_t;
- int Crv_nbrk_t;
- int Crv_nent_t;
- int Crv_out_t;
- int Crv_clip_t;
- void (*Crv_map_t)( int, double *, double *, double *, const char *, const char *, int *, struct AstGlobals * );
- void *Crv_mapstatics_t;
- float Box_lbnd_t[ 2 ];
- float Box_ubnd_t[ 2 ];
- float Boxp_lbnd_t[ 2 ];
- float Boxp_ubnd_t[ 2 ];
- int Boxp_freeze_t;
- float Poly_x_t[ AST__PLOT_POLY_MAX ];
- float Poly_y_t[ AST__PLOT_POLY_MAX ];
- int Poly_n_t;
- int Map1_ncoord_t;
- AstPlot *Map1_plot_t;
- AstMapping *Map1_map_t;
- AstFrame *Map1_frame_t;
- const double *Map1_origin_t;
- double Map1_length_t;
- int Map1_axis_t;
- void *Map1_statics_t;
- int Map1_norm_t;
- int Map1_log_t;
- int Map2_ncoord_t;
- AstPlot *Map2_plot_t;
- AstMapping *Map2_map_t;
- double Map2_x0_t;
- double Map2_y0_t;
- double Map2_deltax_t;
- double Map2_deltay_t;
- void *Map2_statics_t;
- int Map3_ncoord_t;
- AstPlot *Map3_plot_t;
- AstMapping *Map3_map_t;
- AstFrame *Map3_frame_t;
- const double *Map3_origin_t;
- const double *Map3_end_t;
- double Map3_scale_t;
- void *Map3_statics_t;
- int Map4_ncoord_t;
- AstPlot *Map4_plot_t;
- AstMapping *Map4_map_t;
- AstMapping *Map4_umap_t;
- void *Map4_statics_t;
- int Map5_ncoord_t;
- AstPlot *Map5_plot_t;
- AstMapping *Map5_map_t;
- AstRegion *Map5_region_t;
- void *Map5_statics_t;
- AstPlotCurveData Curve_data_t;
- char GetAttrib_Buff[ 200 ];
- char SplitValue_Buff[ 200 ];
- char StripEscapes_Buff[ AST__PLOT_STRIPESCAPES_BUFF_LEN + 1 ];
-} AstPlotGlobals;
-
-#endif
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Plot) /* Check class membership */
-astPROTO_ISA(Plot) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstPlot *astPlot_( void *, const float *, const double *, const char *, int *, ...);
-#else
-AstPlot *astPlotId_( void *, const float [], const double [], const char *, ... )__attribute__((format(printf,4,5)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstPlot *astInitPlot_( void *, size_t, int, AstPlotVtab *,
- const char *, AstFrame *, const float *, const double *, int * );
-
-/* Vtab initialiser. */
-void astInitPlotVtab_( AstPlotVtab *, const char *, int * );
-
-/* Loader. */
-AstPlot *astLoadPlot_( void *, size_t, AstPlotVtab *,
- const char *, AstChannel *channel, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitPlotGlobals_( AstPlotGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
- AstKeyMap *astGrfConID_( AstPlot *, int * );
- const char *astStripEscapes_( const char *, int * );
- int astFindEscape_( const char *, int *, int *, int *, int * );
- int astBorder_( AstPlot *, int * );
- AstKeyMap *astGetGrfContext_( AstPlot *, int * );
- void astBoundingBox_( AstPlot *, float[2], float[2], int * );
- void astClip_( AstPlot *, int, const double [], const double [], int * );
- void astGridLine_( AstPlot *, int, const double [], double, int * );
- void astCurve_( AstPlot *, const double [], const double [], int * );
- void astGrid_( AstPlot *, int * );
- void astMark_( AstPlot *, int, int, int, const double *, int, int * );
- void astGrfSet_( AstPlot *, const char *, AstGrfFun, int * );
- void astGrfPush_( AstPlot *, int * );
- void astGrfPop_( AstPlot *, int * );
- void astGenCurve_( AstPlot *, AstMapping *, int * );
- void astPolyCurve_( AstPlot *, int, int, int, const double *, int * );
- void astText_( AstPlot *, const char *, const double [], const float [], const char *, int * );
-
- void astGrfWrapper_( AstPlot *, const char *, AstGrfWrap, int * );
- int astGrfFunID_( const char *, const char *, const char *, int * );
-
-#if defined(astCLASS) /* Protected */
- int astCvBrk_( AstPlot *, int, double *, double *, double *, int * );
- void astCopyPlotDefaults_( AstPlot *, int, AstPlot *, int, int * );
- void astMirror_( AstPlot *, int, int * );
- AstPointSet *astGetDrawnTicks_( AstPlot *, int, int, int * );
- void astSetTickValues_( AstPlot *, int, int, double *, int, double *, int * );
- void astDrawExtraTicks_( AstPlot *, int, AstPointSet *, int * );
- void astGrfAttrs_( AstPlot *, int, int, int, const char *, const char *, int * );
-
- double astGetTol_( AstPlot *, int * );
- int astTestTol_( AstPlot *, int * );
- void astSetTol_( AstPlot *, double, int * );
- void astClearTol_( AstPlot *, int * );
-
- int astGetGrid_( AstPlot *, int * );
- int astTestGrid_( AstPlot *, int * );
- void astSetGrid_( AstPlot *, int, int * );
- void astClearGrid_( AstPlot *, int * );
-
- int astGetTickAll_( AstPlot *, int * );
- int astTestTickAll_( AstPlot *, int * );
- void astSetTickAll_( AstPlot *, int, int * );
- void astClearTickAll_( AstPlot *, int * );
-
- int astGetForceExterior_( AstPlot *, int * );
- int astTestForceExterior_( AstPlot *, int * );
- void astSetForceExterior_( AstPlot *, int, int * );
- void astClearForceExterior_( AstPlot *, int * );
-
- int astGetInvisible_( AstPlot *, int * );
- int astTestInvisible_( AstPlot *, int * );
- void astSetInvisible_( AstPlot *, int, int * );
- void astClearInvisible_( AstPlot *, int * );
-
- int astGetBorder_( AstPlot *, int * );
- int astTestBorder_( AstPlot *, int * );
- void astSetBorder_( AstPlot *, int, int * );
- void astClearBorder_( AstPlot *, int * );
-
- int astGetClip_( AstPlot *, int * );
- int astTestClip_( AstPlot *, int * );
- void astSetClip_( AstPlot *, int, int * );
- void astClearClip_( AstPlot *, int * );
-
- int astGetClipOp_( AstPlot *, int * );
- int astTestClipOp_( AstPlot *, int * );
- void astSetClipOp_( AstPlot *, int, int * );
- void astClearClipOp_( AstPlot *, int * );
-
- int astGetGrf_( AstPlot *, int * );
- int astTestGrf_( AstPlot *, int * );
- void astSetGrf_( AstPlot *, int, int * );
- void astClearGrf_( AstPlot *, int * );
-
- int astGetDrawTitle_( AstPlot *, int * );
- int astTestDrawTitle_( AstPlot *, int * );
- void astSetDrawTitle_( AstPlot *, int, int * );
- void astClearDrawTitle_( AstPlot *, int * );
-
- int astGetLabelUp_( AstPlot *, int, int * );
- int astTestLabelUp_( AstPlot *, int, int * );
- void astSetLabelUp_( AstPlot *, int, int, int * );
- void astClearLabelUp_( AstPlot *, int, int * );
-
- int astGetLogPlot_( AstPlot *, int, int * );
- int astTestLogPlot_( AstPlot *, int, int * );
- void astSetLogPlot_( AstPlot *, int, int, int * );
- void astClearLogPlot_( AstPlot *, int, int * );
-
- int astGetLogTicks_( AstPlot *, int, int * );
- int astTestLogTicks_( AstPlot *, int, int * );
- void astSetLogTicks_( AstPlot *, int, int, int * );
- void astClearLogTicks_( AstPlot *, int, int * );
-
- int astGetLogLabel_( AstPlot *, int, int * );
- int astTestLogLabel_( AstPlot *, int, int * );
- void astSetLogLabel_( AstPlot *, int, int, int * );
- void astClearLogLabel_( AstPlot *, int, int * );
-
- int astGetDrawAxes_( AstPlot *, int, int * );
- int astTestDrawAxes_( AstPlot *, int, int * );
- void astSetDrawAxes_( AstPlot *, int, int, int * );
- void astClearDrawAxes_( AstPlot *, int, int * );
-
- int astGetAbbrev_( AstPlot *, int, int * );
- int astTestAbbrev_( AstPlot *, int, int * );
- void astSetAbbrev_( AstPlot *, int, int, int * );
- void astClearAbbrev_( AstPlot *, int, int * );
-
- int astGetEscape_( AstPlot *, int * );
- int astTestEscape_( AstPlot *, int * );
- void astSetEscape_( AstPlot *, int, int * );
- void astClearEscape_( AstPlot *, int * );
-
- double astGetLabelAt_( AstPlot *, int, int * );
- int astTestLabelAt_( AstPlot *, int, int * );
- void astSetLabelAt_( AstPlot *, int, double, int * );
- void astClearLabelAt_( AstPlot *, int, int * );
-
- double astGetGap_( AstPlot *, int, int * );
- int astTestGap_( AstPlot *, int, int * );
- void astSetGap_( AstPlot *, int, double, int * );
- void astClearGap_( AstPlot *, int, int * );
-
- double astGetLogGap_( AstPlot *, int, int * );
- int astTestLogGap_( AstPlot *, int, int * );
- void astSetLogGap_( AstPlot *, int, double, int * );
- void astClearLogGap_( AstPlot *, int, int * );
-
- double astGetCentre_( AstPlot *, int, int * );
- int astTestCentre_( AstPlot *, int, int * );
- void astSetCentre_( AstPlot *, int, double, int * );
- void astClearCentre_( AstPlot *, int, int * );
-
- int astGetLabelling_( AstPlot *, int * );
- int astTestLabelling_( AstPlot *, int * );
- void astSetLabelling_( AstPlot *, int, int * );
- void astClearLabelling_( AstPlot *, int * );
-
- double astGetMajTickLen_( AstPlot *, int, int * );
- int astTestMajTickLen_( AstPlot *, int, int * );
- void astSetMajTickLen_( AstPlot *, int, double, int * );
- void astClearMajTickLen_( AstPlot *, int, int * );
-
- double astGetMinTickLen_( AstPlot *, int, int * );
- int astTestMinTickLen_( AstPlot *, int, int * );
- void astSetMinTickLen_( AstPlot *, int, double, int * );
- void astClearMinTickLen_( AstPlot *, int, int * );
-
- double astGetNumLabGap_( AstPlot *, int, int * );
- int astTestNumLabGap_( AstPlot *, int, int * );
- void astSetNumLabGap_( AstPlot *, int, double, int * );
- void astClearNumLabGap_( AstPlot *, int, int * );
-
- double astGetTextLabGap_( AstPlot *, int, int * );
- int astTestTextLabGap_( AstPlot *, int, int * );
- void astSetTextLabGap_( AstPlot *, int, double, int * );
- void astClearTextLabGap_( AstPlot *, int, int * );
-
- double astGetTitleGap_( AstPlot *, int * );
- int astTestTitleGap_( AstPlot *, int * );
- void astSetTitleGap_( AstPlot *, double, int * );
- void astClearTitleGap_( AstPlot *, int * );
-
- int astGetEdge_( AstPlot *, int, int * );
- int astTestEdge_( AstPlot *, int, int * );
- void astSetEdge_( AstPlot *, int, int, int * );
- void astClearEdge_( AstPlot *, int, int * );
-
- int astGetMinTick_( AstPlot *, int, int * );
- int astTestMinTick_( AstPlot *, int, int * );
- void astSetMinTick_( AstPlot *, int, int, int * );
- void astClearMinTick_( AstPlot *, int, int * );
-
- int astGetNumLab_( AstPlot *, int, int * );
- int astTestNumLab_( AstPlot *, int, int * );
- void astSetNumLab_( AstPlot *, int, int, int * );
- void astClearNumLab_( AstPlot *, int, int * );
-
- int astGetTextLab_( AstPlot *, int, int * );
- int astTestTextLab_( AstPlot *, int, int * );
- void astSetTextLab_( AstPlot *, int, int, int * );
- void astClearTextLab_( AstPlot *, int, int * );
-
- int astGetLabelUnits_( AstPlot *, int, int * );
- int astTestLabelUnits_( AstPlot *, int, int * );
- void astSetLabelUnits_( AstPlot *, int, int, int * );
- void astClearLabelUnits_( AstPlot *, int, int * );
-
- int astGetStyle_( AstPlot *, int, int * );
- int astTestStyle_( AstPlot *, int, int * );
- void astSetStyle_( AstPlot *, int, int, int * );
- void astClearStyle_( AstPlot *, int, int * );
-
- int astGetFont_( AstPlot *, int, int * );
- int astTestFont_( AstPlot *, int, int * );
- void astSetFont_( AstPlot *, int, int, int * );
- void astClearFont_( AstPlot *, int, int * );
-
- int astGetColour_( AstPlot *, int, int * );
- int astTestColour_( AstPlot *, int, int * );
- void astSetColour_( AstPlot *, int, int, int * );
- void astClearColour_( AstPlot *, int, int * );
-
- double astGetWidth_( AstPlot *, int, int * );
- int astTestWidth_( AstPlot *, int, int * );
- void astSetWidth_( AstPlot *, int, double, int * );
- void astClearWidth_( AstPlot *, int, int * );
-
- double astGetSize_( AstPlot *, int, int * );
- int astTestSize_( AstPlot *, int, int * );
- void astSetSize_( AstPlot *, int, double, int * );
- void astClearSize_( AstPlot *, int, int * );
-
- int astGetInk_( AstPlot *, int * );
- int astTestInk_( AstPlot *, int * );
- void astSetInk_( AstPlot *, int, int * );
- void astClearInk_( AstPlot *, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class to make
- them easier to invoke (e.g. to avoid type mis-matches when passing pointers
- to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them to
- validate their own arguments. We must use a cast when passing object
- pointers (so that they can accept objects from derived classes). */
-
-/* Check class membership. */
-#define astCheckPlot(this) astINVOKE_CHECK(Plot,this,0)
-#define astVerifyPlot(this) astINVOKE_CHECK(Plot,this,1)
-
-/* Test class membership. */
-#define astIsAPlot(this) astINVOKE_ISA(Plot,this)
-
-#if defined(astCLASS) /* Protected */
-#define astPlot astINVOKE(F,astPlot_)
-#else
-#define astPlot astINVOKE(F,astPlotId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitPlot(mem,size,init,vtab,name,frame,graph,base) \
-astINVOKE(O,astInitPlot_(mem,size,init,vtab,name,frame,graph,base,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitPlotVtab(vtab,name) astINVOKE(V,astInitPlotVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadPlot(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadPlot_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to member functions. */
-/* ------------------------------- */
-/* Here we make use of astCheckPlot (et al.) to validate Plot
- pointers before use. This provides a contextual error report if a
- pointer to the wrong sort of object is supplied. */
-
-
-#define astGetGrfContext(this) \
-astINVOKE(O,astGetGrfContext_(astCheckPlot(this),STATUS_PTR))
-
-#define astBorder(this) \
-astINVOKE(V,astBorder_(astCheckPlot(this),STATUS_PTR))
-
-#define astBoundingBox(this,lbnd,ubnd) \
-astINVOKE(V,astBoundingBox_(astCheckPlot(this),lbnd,ubnd,STATUS_PTR))
-
-#define astClip(this,iframe,lbnd,ubnd) \
-astINVOKE(V,astClip_(astCheckPlot(this),iframe,lbnd,ubnd,STATUS_PTR))
-
-#define astMark(this,nmark,ncoord,indim,in,type) \
-astINVOKE(V,astMark_(astCheckPlot(this),nmark,ncoord,indim,in,type,STATUS_PTR))
-
-#define astText(this,text,pos,up,just) \
-astINVOKE(V,astText_(astCheckPlot(this),text,pos,up,just,STATUS_PTR))
-
-#define astGrid(this) \
-astINVOKE(V,astGrid_(astCheckPlot(this),STATUS_PTR))
-
-#define astGridLine(this,axis,start,length) \
-astINVOKE(V,astGridLine_(astCheckPlot(this),axis,start,length,STATUS_PTR))
-
-#define astCurve(this,start,finish) \
-astINVOKE(V,astCurve_(astCheckPlot(this),start,finish,STATUS_PTR))
-
-#define astGenCurve(this,map) \
-astINVOKE(V,astGenCurve_(astCheckPlot(this),astCheckMapping(map),STATUS_PTR))
-
-#define astPolyCurve(this,npoint,ncoord,dim,in) \
-astINVOKE(V,astPolyCurve_(astCheckPlot(this),npoint,ncoord,dim,in,STATUS_PTR))
-
-#define astGrfSet(this,name,fun) \
-astINVOKE(V,astGrfSet_(astCheckPlot(this),name,fun,STATUS_PTR))
-
-#define astGrfPush(this) \
-astINVOKE(V,astGrfPush_(astCheckPlot(this),STATUS_PTR))
-
-#define astGrfPop(this) \
-astINVOKE(V,astGrfPop_(astCheckPlot(this),STATUS_PTR))
-
-
-#define astGrfFunID(name,method,class) astGrfFunID_(name,method,class,STATUS_PTR)
-#define astFindEscape(text,type,value,nc) astFindEscape_(text,type,value,nc,STATUS_PTR)
-#define astStripEscapes(text) astStripEscapes_(text,STATUS_PTR)
-#define astGrfConID(this) astGrfConID_(this,STATUS_PTR)
-
-#define astGrfWrapper(this,name,wrapper) \
-astINVOKE(V,astGrfWrapper_(astCheckPlot(this),name,wrapper,STATUS_PTR))
-
-#if defined(astCLASS) /* Protected */
-
-#define astGrfAttrs(this,id,set,prim,method,class) \
-astGrfAttrs_(astCheckPlot(this),id,set,prim,method,class,STATUS_PTR)
-
-#define astCvBrk(this,ibrk,brk,vbrk,len) \
-astINVOKE(V,astCvBrk_(astCheckPlot(this),ibrk,brk,vbrk,len,STATUS_PTR))
-
-#define astCopyPlotDefaults(this,axis,dplot,daxis) \
-astINVOKE(V,astCopyPlotDefaults_(astCheckPlot(this),axis,astCheckPlot(dplot),daxis,STATUS_PTR))
-
-#define astMirror(this,axis) \
-astINVOKE(V,astMirror_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astGetDrawnTicks(this,axis,major) \
-astINVOKE(O,astGetDrawnTicks_(astCheckPlot(this),axis,major,STATUS_PTR))
-
-#define astSetTickValues(this,axis,nmajor,major,nminor,minor) \
-astINVOKE(V,astSetTickValues_(astCheckPlot(this),axis,nmajor,major,nminor,minor,STATUS_PTR))
-
-#define astDrawExtraTicks(this,axis,pset) \
-astINVOKE(V,astDrawExtraTicks_(astCheckPlot(this),axis,astCheckPointSet(pset),STATUS_PTR))
-
-#define astClearTol(this) \
-astINVOKE(V,astClearTol_(astCheckPlot(this),STATUS_PTR))
-#define astGetTol(this) \
-astINVOKE(V,astGetTol_(astCheckPlot(this),STATUS_PTR))
-#define astSetTol(this,tol) \
-astINVOKE(V,astSetTol_(astCheckPlot(this),tol,STATUS_PTR))
-#define astTestTol(this) \
-astINVOKE(V,astTestTol_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearGrid(this) \
-astINVOKE(V,astClearGrid_(astCheckPlot(this),STATUS_PTR))
-#define astGetGrid(this) \
-astINVOKE(V,astGetGrid_(astCheckPlot(this),STATUS_PTR))
-#define astSetGrid(this,grid) \
-astINVOKE(V,astSetGrid_(astCheckPlot(this),grid,STATUS_PTR))
-#define astTestGrid(this) \
-astINVOKE(V,astTestGrid_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearInk(this) \
-astINVOKE(V,astClearInk_(astCheckPlot(this),STATUS_PTR))
-#define astGetInk(this) \
-astINVOKE(V,astGetInk_(astCheckPlot(this),STATUS_PTR))
-#define astSetInk(this,ink) \
-astINVOKE(V,astSetInk_(astCheckPlot(this),ink,STATUS_PTR))
-#define astTestInk(this) \
-astINVOKE(V,astTestInk_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearTickAll(this) \
-astINVOKE(V,astClearTickAll_(astCheckPlot(this),STATUS_PTR))
-#define astGetTickAll(this) \
-astINVOKE(V,astGetTickAll_(astCheckPlot(this),STATUS_PTR))
-#define astSetTickAll(this,tickall) \
-astINVOKE(V,astSetTickAll_(astCheckPlot(this),tickall,STATUS_PTR))
-#define astTestTickAll(this) \
-astINVOKE(V,astTestTickAll_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearForceExterior(this) \
-astINVOKE(V,astClearForceExterior_(astCheckPlot(this),STATUS_PTR))
-#define astGetForceExterior(this) \
-astINVOKE(V,astGetForceExterior_(astCheckPlot(this),STATUS_PTR))
-#define astSetForceExterior(this,frcext) \
-astINVOKE(V,astSetForceExterior_(astCheckPlot(this),frcext,STATUS_PTR))
-#define astTestForceExterior(this) \
-astINVOKE(V,astTestForceExterior_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearBorder(this) \
-astINVOKE(V,astClearBorder_(astCheckPlot(this),STATUS_PTR))
-#define astGetBorder(this) \
-astINVOKE(V,astGetBorder_(astCheckPlot(this),STATUS_PTR))
-#define astSetBorder(this,border) \
-astINVOKE(V,astSetBorder_(astCheckPlot(this),border,STATUS_PTR))
-#define astTestBorder(this) \
-astINVOKE(V,astTestBorder_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearClip(this) \
-astINVOKE(V,astClearClip_(astCheckPlot(this),STATUS_PTR))
-#define astGetClip(this) \
-astINVOKE(V,astGetClip_(astCheckPlot(this),STATUS_PTR))
-#define astSetClip(this,clip) \
-astINVOKE(V,astSetClip_(astCheckPlot(this),clip,STATUS_PTR))
-#define astTestClip(this) \
-astINVOKE(V,astTestClip_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearClipOp(this) \
-astINVOKE(V,astClearClipOp_(astCheckPlot(this),STATUS_PTR))
-#define astGetClipOp(this) \
-astINVOKE(V,astGetClipOp_(astCheckPlot(this),STATUS_PTR))
-#define astSetClipOp(this,clipop) \
-astINVOKE(V,astSetClipOp_(astCheckPlot(this),clipop,STATUS_PTR))
-#define astTestClipOp(this) \
-astINVOKE(V,astTestClipOp_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearInvisible(this) \
-astINVOKE(V,astClearInvisible_(astCheckPlot(this),STATUS_PTR))
-#define astGetInvisible(this) \
-astINVOKE(V,astGetInvisible_(astCheckPlot(this),STATUS_PTR))
-#define astSetInvisible(this,invisible) \
-astINVOKE(V,astSetInvisible_(astCheckPlot(this),invisible,STATUS_PTR))
-#define astTestInvisible(this) \
-astINVOKE(V,astTestInvisible_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearGrf(this) \
-astINVOKE(V,astClearGrf_(astCheckPlot(this),STATUS_PTR))
-#define astGetGrf(this) \
-astINVOKE(V,astGetGrf_(astCheckPlot(this),STATUS_PTR))
-#define astSetGrf(this,grf) \
-astINVOKE(V,astSetGrf_(astCheckPlot(this),grf,STATUS_PTR))
-#define astTestGrf(this) \
-astINVOKE(V,astTestGrf_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearDrawTitle(this) \
-astINVOKE(V,astClearDrawTitle_(astCheckPlot(this),STATUS_PTR))
-#define astGetDrawTitle(this) \
-astINVOKE(V,astGetDrawTitle_(astCheckPlot(this),STATUS_PTR))
-#define astSetDrawTitle(this,drawtitle) \
-astINVOKE(V,astSetDrawTitle_(astCheckPlot(this),drawtitle,STATUS_PTR))
-#define astTestDrawTitle(this) \
-astINVOKE(V,astTestDrawTitle_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearDrawAxes(this,axis) \
-astINVOKE(V,astClearDrawAxes_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetDrawAxes(this,axis) \
-astINVOKE(V,astGetDrawAxes_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetDrawAxes(this,axis,drawaxes) \
-astINVOKE(V,astSetDrawAxes_(astCheckPlot(this),axis,drawaxes,STATUS_PTR))
-#define astTestDrawAxes(this,axis) \
-astINVOKE(V,astTestDrawAxes_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearAbbrev(this,axis) \
-astINVOKE(V,astClearAbbrev_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetAbbrev(this,axis) \
-astINVOKE(V,astGetAbbrev_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetAbbrev(this,axis,abbrev) \
-astINVOKE(V,astSetAbbrev_(astCheckPlot(this),axis,abbrev,STATUS_PTR))
-#define astTestAbbrev(this,axis) \
-astINVOKE(V,astTestAbbrev_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearEscape(this) \
-astINVOKE(V,astClearEscape_(astCheckPlot(this),STATUS_PTR))
-#define astGetEscape(this) \
-astINVOKE(V,astGetEscape_(astCheckPlot(this),STATUS_PTR))
-#define astSetEscape(this,escape) \
-astINVOKE(V,astSetEscape_(astCheckPlot(this),escape,STATUS_PTR))
-#define astTestEscape(this) \
-astINVOKE(V,astTestEscape_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearLabelAt(this,axis) \
-astINVOKE(V,astClearLabelAt_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetLabelAt(this,axis) \
-astINVOKE(V,astGetLabelAt_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetLabelAt(this,axis,labelat) \
-astINVOKE(V,astSetLabelAt_(astCheckPlot(this),axis,labelat,STATUS_PTR))
-#define astTestLabelAt(this,axis) \
-astINVOKE(V,astTestLabelAt_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearGap(this,axis) \
-astINVOKE(V,astClearGap_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetGap(this,axis) \
-astINVOKE(V,astGetGap_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetGap(this,axis,gap) \
-astINVOKE(V,astSetGap_(astCheckPlot(this),axis,gap,STATUS_PTR))
-#define astTestGap(this,axis) \
-astINVOKE(V,astTestGap_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearLogGap(this,axis) \
-astINVOKE(V,astClearLogGap_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetLogGap(this,axis) \
-astINVOKE(V,astGetLogGap_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetLogGap(this,axis,gap) \
-astINVOKE(V,astSetLogGap_(astCheckPlot(this),axis,gap,STATUS_PTR))
-#define astTestLogGap(this,axis) \
-astINVOKE(V,astTestLogGap_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearCentre(this,axis) \
-astINVOKE(V,astClearCentre_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetCentre(this,axis) \
-astINVOKE(V,astGetCentre_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetCentre(this,axis,centre) \
-astINVOKE(V,astSetCentre_(astCheckPlot(this),axis,centre,STATUS_PTR))
-#define astTestCentre(this,axis) \
-astINVOKE(V,astTestCentre_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearMajTickLen(this,axis) \
-astINVOKE(V,astClearMajTickLen_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetMajTickLen(this,axis) \
-astINVOKE(V,astGetMajTickLen_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetMajTickLen(this,axis,majticklen) \
-astINVOKE(V,astSetMajTickLen_(astCheckPlot(this),axis,majticklen,STATUS_PTR))
-#define astTestMajTickLen(this,axis) \
-astINVOKE(V,astTestMajTickLen_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearMinTickLen(this,axis) \
-astINVOKE(V,astClearMinTickLen_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetMinTickLen(this,axis) \
-astINVOKE(V,astGetMinTickLen_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetMinTickLen(this,axis,minticklen) \
-astINVOKE(V,astSetMinTickLen_(astCheckPlot(this),axis,minticklen,STATUS_PTR))
-#define astTestMinTickLen(this,axis) \
-astINVOKE(V,astTestMinTickLen_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearNumLabGap(this,axis) \
-astINVOKE(V,astClearNumLabGap_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetNumLabGap(this,axis) \
-astINVOKE(V,astGetNumLabGap_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetNumLabGap(this,axis,numlabgap) \
-astINVOKE(V,astSetNumLabGap_(astCheckPlot(this),axis,numlabgap,STATUS_PTR))
-#define astTestNumLabGap(this,axis) \
-astINVOKE(V,astTestNumLabGap_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearTextLabGap(this,axis) \
-astINVOKE(V,astClearTextLabGap_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetTextLabGap(this,axis) \
-astINVOKE(V,astGetTextLabGap_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetTextLabGap(this,axis,textlabgap) \
-astINVOKE(V,astSetTextLabGap_(astCheckPlot(this),axis,textlabgap,STATUS_PTR))
-#define astTestTextLabGap(this,axis) \
-astINVOKE(V,astTestTextLabGap_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearTitleGap(this) \
-astINVOKE(V,astClearTitleGap_(astCheckPlot(this),STATUS_PTR))
-#define astGetTitleGap(this) \
-astINVOKE(V,astGetTitleGap_(astCheckPlot(this),STATUS_PTR))
-#define astSetTitleGap(this,titlegap) \
-astINVOKE(V,astSetTitleGap_(astCheckPlot(this),titlegap,STATUS_PTR))
-#define astTestTitleGap(this) \
-astINVOKE(V,astTestTitleGap_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearLabelling(this) \
-astINVOKE(V,astClearLabelling_(astCheckPlot(this),STATUS_PTR))
-#define astGetLabelling(this) \
-astINVOKE(V,astGetLabelling_(astCheckPlot(this),STATUS_PTR))
-#define astSetLabelling(this,labelling) \
-astINVOKE(V,astSetLabelling_(astCheckPlot(this),labelling,STATUS_PTR))
-#define astTestLabelling(this) \
-astINVOKE(V,astTestLabelling_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearEdge(this,axis) \
-astINVOKE(V,astClearEdge_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetEdge(this,axis) \
-astINVOKE(V,astGetEdge_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetEdge(this,axis,edge) \
-astINVOKE(V,astSetEdge_(astCheckPlot(this),axis,edge,STATUS_PTR))
-#define astTestEdge(this,axis) \
-astINVOKE(V,astTestEdge_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearMinTick(this,axis) \
-astINVOKE(V,astClearMinTick_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetMinTick(this,axis) \
-astINVOKE(V,astGetMinTick_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetMinTick(this,axis,mintick) \
-astINVOKE(V,astSetMinTick_(astCheckPlot(this),axis,mintick,STATUS_PTR))
-#define astTestMinTick(this,axis) \
-astINVOKE(V,astTestMinTick_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearNumLab(this,axis) \
-astINVOKE(V,astClearNumLab_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetNumLab(this,axis) \
-astINVOKE(V,astGetNumLab_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetNumLab(this,axis,numlab) \
-astINVOKE(V,astSetNumLab_(astCheckPlot(this),axis,numlab,STATUS_PTR))
-#define astTestNumLab(this,axis) \
-astINVOKE(V,astTestNumLab_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearLabelUp(this,axis) \
-astINVOKE(V,astClearLabelUp_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetLabelUp(this,axis) \
-astINVOKE(V,astGetLabelUp_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetLabelUp(this,axis,labelup) \
-astINVOKE(V,astSetLabelUp_(astCheckPlot(this),axis,labelup,STATUS_PTR))
-#define astTestLabelUp(this,axis) \
-astINVOKE(V,astTestLabelUp_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearLogPlot(this,axis) \
-astINVOKE(V,astClearLogPlot_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetLogPlot(this,axis) \
-astINVOKE(V,astGetLogPlot_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetLogPlot(this,axis,logplot) \
-astINVOKE(V,astSetLogPlot_(astCheckPlot(this),axis,logplot,STATUS_PTR))
-#define astTestLogPlot(this,axis) \
-astINVOKE(V,astTestLogPlot_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearLogTicks(this,axis) \
-astINVOKE(V,astClearLogTicks_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetLogTicks(this,axis) \
-astINVOKE(V,astGetLogTicks_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetLogTicks(this,axis,logticks) \
-astINVOKE(V,astSetLogTicks_(astCheckPlot(this),axis,logticks,STATUS_PTR))
-#define astTestLogTicks(this,axis) \
-astINVOKE(V,astTestLogTicks_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearLogLabel(this,axis) \
-astINVOKE(V,astClearLogLabel_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetLogLabel(this,axis) \
-astINVOKE(V,astGetLogLabel_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetLogLabel(this,axis,loglabel) \
-astINVOKE(V,astSetLogLabel_(astCheckPlot(this),axis,loglabel,STATUS_PTR))
-#define astTestLogLabel(this,axis) \
-astINVOKE(V,astTestLogLabel_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearTextLab(this,axis) \
-astINVOKE(V,astClearTextLab_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetTextLab(this,axis) \
-astINVOKE(V,astGetTextLab_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetTextLab(this,axis,textlab) \
-astINVOKE(V,astSetTextLab_(astCheckPlot(this),axis,textlab,STATUS_PTR))
-#define astTestTextLab(this,axis) \
-astINVOKE(V,astTestTextLab_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearLabelUnits(this,axis) \
-astINVOKE(V,astClearLabelUnits_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetLabelUnits(this,axis) \
-astINVOKE(V,astGetLabelUnits_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetLabelUnits(this,axis,labelunits) \
-astINVOKE(V,astSetLabelUnits_(astCheckPlot(this),axis,labelunits,STATUS_PTR))
-#define astTestLabelUnits(this,axis) \
-astINVOKE(V,astTestLabelUnits_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearStyle(this,axis) \
-astINVOKE(V,astClearStyle_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetStyle(this,axis) \
-astINVOKE(V,astGetStyle_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetStyle(this,axis,style) \
-astINVOKE(V,astSetStyle_(astCheckPlot(this),axis,style,STATUS_PTR))
-#define astTestStyle(this,axis) \
-astINVOKE(V,astTestStyle_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearFont(this,axis) \
-astINVOKE(V,astClearFont_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetFont(this,axis) \
-astINVOKE(V,astGetFont_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetFont(this,axis,font) \
-astINVOKE(V,astSetFont_(astCheckPlot(this),axis,font,STATUS_PTR))
-#define astTestFont(this,axis) \
-astINVOKE(V,astTestFont_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearColour(this,axis) \
-astINVOKE(V,astClearColour_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetColour(this,axis) \
-astINVOKE(V,astGetColour_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetColour(this,axis,colour) \
-astINVOKE(V,astSetColour_(astCheckPlot(this),axis,colour,STATUS_PTR))
-#define astTestColour(this,axis) \
-astINVOKE(V,astTestColour_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearWidth(this,axis) \
-astINVOKE(V,astClearWidth_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetWidth(this,axis) \
-astINVOKE(V,astGetWidth_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetWidth(this,axis,width) \
-astINVOKE(V,astSetWidth_(astCheckPlot(this),axis,width,STATUS_PTR))
-#define astTestWidth(this,axis) \
-astINVOKE(V,astTestWidth_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearSize(this,axis) \
-astINVOKE(V,astClearSize_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetSize(this,axis) \
-astINVOKE(V,astGetSize_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetSize(this,axis,size) \
-astINVOKE(V,astSetSize_(astCheckPlot(this),axis,size,STATUS_PTR))
-#define astTestSize(this,axis) \
-astINVOKE(V,astTestSize_(astCheckPlot(this),axis,STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/plot3d.c b/ast-5.3-1/plot3d.c
deleted file mode 100644
index e8267c5..0000000
--- a/ast-5.3-1/plot3d.c
+++ /dev/null
@@ -1,8439 +0,0 @@
-/*
-*class++
-* Name:
-* Plot3D
-
-* Purpose:
-* Provide facilities for 2D graphical output.
-
-* Constructor Function:
-c astPlot3D
-f AST_PLOT3D
-
-* Description:
-* A Plot3D is a specialised form of Plot that provides facilities
-* for producing 3D graphical output, including fully annotated 3D
-* coordinate grids. The base Frame in a Plot3D describes a 3-dimensional
-* "graphical" coordinate system. The axes of this coordinate system are
-* assumed to be right-handed (that is, if X appears horizontally to the
-* right and Y vertically upwards, then Z is out of the screen towards
-* the viewer), and are assumed to be equally scaled (that is, the same
-* units are used to measure positions on each of the 3 axes). The upper
-* and lower bounds of a volume within this graphical coordinate system
-* is specified when the Plot3D is created, and all subsequent graphics
-* are "drawn" in this volume.
-*
-* The Plot3D class does not itself include any ability to draw on a
-* graphics device. Instead it calls upon function in an externally
-* supplied module (the "grf3d" module) to do the required drawing.
-* A module should be written that implements the functions of the
-* grf3d interface using the facilities of a specific graphics system
-* This module should then be linked into the application so that the
-* Plot3D class can use its functions (see the description of the
-* ast_link commands for details of how to do this). The grf3d interface
-* defines a few simple functions for drawing primitives such as straight
-* lines, markers and character strings. These functions all accept
-* positions in the 3D graphics coordinate system (the base Frame of the
-* Plot3D), and so the grf3d module must also manage the projection of
-* these 3D coordinates onto the 2D viewing surface, including the choice
-* of "eye"/"camera" position, direction of viewing, etc. The AST
-* library includes a sample implementation of the grf3d interface
-* based on the PGPLOT graphics system (see file grf3d_pgplot.c). This
-* implementation also serves to document the grf3d interface itself and
-* should be consulted for details before writing a new implementation.
-*
-* The current Frame of a Plot3D describes a "physical" 3-dimensional
-* coordinate system, which is the coordinate system in which plotting
-* operations are specified when invoking the methods of the Plot3D
-* class. The results of each plotting operation are automatically
-* transformed into 3D graphical coordinates before being plotted
-* using the facilities of the grf3d module linked into the application.
-*
-* You may select different physical coordinate systems in which to
-* plot (including the native graphical coordinate system itself)
-* by selecting different Frames as the current Frame of a Plot3D,
-* using its Current attribute.
-*
-* Like any FrameSet, a Plot3D may also be used as a Frame. In this
-* case, it behaves like its current Frame, which describes the
-* physical coordinate system.
-*
-* When used as a Mapping, a Plot3D describes the inter-relation
-* between 3D graphical coordinates (its base Frame) and 3D physical
-* coordinates (its current Frame).
-*
-* Although the Plot3D class inherits from the Plot class, several of
-* the facilities of the Plot class are not available in the Plot3D
-* class, and an error will be reported if any attempt is made to use
-* them. Specifically, the Plot3D class does not support clipping
-* using the
-* astClip function.
-f AST_CLIP routine.
-* Nor does it support the specification of graphics primitive functions
-* at run-time using the
-c astGrfSet, astGrfPop, astGrfPush and astGetGrfContext functions.
-f AST_GRFSET, AST_GRFPOP, AST_GRFPUSH, and AST_GETGRFCONTEXT routines.
-
-* Inheritance:
-* The Plot3D class inherits from the Plot class.
-
-* Attributes:
-* In addition to those attributes common to all Plots, every
-* Plot3D also has the following attributes:
-*
-* - Norm: Normal vector defining the 2D plane used for text and markers
-* - RootCorner: Specifies which edges of the 3D box should be annotated.
-*
-* Some attributes of the Plot class refer to specific physical
-* coordinate axes (e.g. Gap, LabelUp, DrawAxes, etc). For a basic
-* Plot, the axis index must be 1 or 2, but for a Plot3D the axis index
-* can be 1, 2 or 3.
-*
-* Certain Plot attributes are ignored by the Plot3D class (e.g. Edge,
-* DrawTitle, TitleGap, etc). Consult the Plot attribute documentation
-* for details.
-
-* Functions:
-c The Plot3D class does not define any new functions beyond those
-f The Plot3D class does not define any new routines beyond those
-* which are applicable to all Plots. Note, however, that the
-* following methods inherited from the Plot class cannot be used with
-* a Plot3D and will report an error if called:
-c - astBoundingBox, astClip, astCurve, astGenCurve,
-c astGetGrfContext, astGrfPop, astGrfPush, astGrfSet, astGridLine,
-c astPolyCurve.
-f - AST_BOUNDINGBOX, AST_CLIP, AST_CURVE, AST_GENCURVE,
-f AST_GETGRFCONTEXT, AST_GRFPOP, AST_GRFPUSH, AST_GRFSET,
-f AST_GRIDLINE, AST_POLYCURVE.
-
-* Copyright:
-* Copyright (C) 2007 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 6-JUN-2007 (DSB):
-* Original version.
-* 6-SEP-2007 (DSB):
-* Re-code the astGrid function.
-* 12-NOV-2007 (DSB):
-* Clear up compiler warnings.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS Plot3D
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
- compare bad values directory because of the danger of floating point
- exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Integers identifying the 3 plotting surfaces */
-#define XY 1
-#define XZ 2
-#define YZ 3
-
-/* Integers identifying the 8 corners of the graphics cube. */
-#define LLL 0
-#define ULL 1
-#define LUL 2
-#define UUL 3
-#define LLU 4
-#define ULU 5
-#define LUU 6
-#define UUU 7
-
-/* Identify the 4 edges of a Plot */
-#define LEFT 0
-#define TOP 1
-#define RIGHT 2
-#define BOTTOM 3
-
-/* A macros that returns a pointer to the Plot that spans a given plane. */
-#define GET_PLOT(plane) ( \
- ( plane == XY ) ? this->plotxy : ( \
- ( plane == XZ ) ? this->plotxz : ( \
- ( plane == YZ ) ? this->plotyz : NULL ) ) )
-
-
-/*
-*
-* Name:
-* MAKE_CLEAR3
-
-* Purpose:
-* Implement a method to clear a single value in a multi-valued attribute.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "plot3d.h"
-* MAKE_CLEAR3(attr,component,assign,nval)
-
-* Class Membership:
-* Defined by the Plot3D class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Clear<Attribute>( AstPlot *this, int axis )
-*
-* and an external interface function of the form:
-*
-* void astClear<Attribute>_( AstPlot *this, int axis )
-*
-* which implement a method for clearing a single value in a specified
-* multi-valued attribute for an axis of a Plot3D.
-
-* Parameters:
-* attr
-* The name of the attribute to be cleared, as it appears in the function
-* name (e.g. LabelAt in "astClearLabelAt").
-* component
-* The name of the class structure component that holds the attribute
-* value.
-* assign
-* An expression that evaluates to the value to assign to the component
-* to clear its value.
-* nval
-* Specifies the number of values in the multi-valued attribute. The
-* "axis" values supplied to the created function should be in the
-* range zero to (nval - 1).
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR3(attr,component,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attr( AstPlot3D *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Validate the axis index. */ \
- if( axis < 0 || axis >= nval ){ \
- astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
- #attr " - it should be in the range 1 to %d.", status, \
- "astClear" #attr, astGetClass( this ), \
- axis + 1, nval ); \
-\
-/* Assign the "clear" value. */ \
- } else { \
- this->component[ axis ] = (assign); \
- } \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astClear##attr##_( AstPlot3D *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
- (**astMEMBER(this,Plot3D,Clear##attr))( this, axis, status ); \
-}
-
-
-/*
-*
-* Name:
-* MAKE_GET3
-
-* Purpose:
-* Implement a method to get a single value in a multi-valued attribute.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "plot3d.h"
-* MAKE_GET3(attr,type,bad_value,assign,nval)
-
-* Class Membership:
-* Defined by the Plot3D class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static <Type> Get<Attribute>( AstPlot3D *this, int axis )
-*
-* and an external interface function of the form:
-*
-* <Type> astGet<Attribute>_( AstPlot3D *this, int axis )
-*
-* which implement a method for getting a single value from a specified
-* multi-valued attribute for an axis of a Plot3D.
-
-* Parameters:
-* attr
-* The name of the attribute whose value is to be obtained, as it
-* appears in the function name (e.g. Label in "astGetLabel").
-* type
-* The C type of the attribute.
-* bad_value
-* A constant value to return if the global error status is set, or if
-* the function fails.
-* assign
-* An expression that evaluates to the value to be returned. This can
-* use the string "axis" to represent the zero-based value index.
-* nval
-* Specifies the number of values in the multi-valued attribute. The
-* "axis" values supplied to the created function should be in the
-* range zero to (nval - 1).
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_GET3(attr,type,bad_value,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static type Get##attr( AstPlot3D *this, int axis, int *status ) { \
- type result; /* Result to be returned */ \
-\
-/* Initialise */ \
- result = (bad_value); \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* Validate the axis index. */ \
- if( axis < 0 || axis >= nval ){ \
- astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
- #attr " - it should be in the range 1 to %d.", status, \
- "astGet" #attr, astGetClass( this ), \
- axis + 1, nval ); \
-\
-/* Assign the result value. */ \
- } else { \
- result = (assign); \
- } \
-\
-/* Check for errors and clear the result if necessary. */ \
- if ( !astOK ) result = (bad_value); \
-\
-/* Return the result. */ \
- return result; \
-} \
-/* External interface. */ \
-/* ------------------- */ \
-type astGet##attr##_( AstPlot3D *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return (bad_value); \
-\
-/* Invoke the required method via the virtual function table. */ \
- return (**astMEMBER(this,Plot3D,Get##attr))( this, axis, status ); \
-}
-
-/*
-*
-* Name:
-* MAKE_SET3
-
-* Purpose:
-* Implement a method to set a single value in a multi-valued attribute
-* for a Plot3D.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "plot3d.h"
-* MAKE_SET3(attr,type,component,assign,nval)
-
-* Class Membership:
-* Defined by the Plot3D class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Set<Attribute>( AstPlot3D *this, int axis, <Type> value )
-*
-* and an external interface function of the form:
-*
-* void astSet<Attribute>_( AstPlot3D *this, int axis, <Type> value )
-*
-* which implement a method for setting a single value in a specified
-* multi-valued attribute for a Plot3D.
-
-* Parameters:
-* attr
-* The name of the attribute to be set, as it appears in the function
-* name (e.g. LabelAt in "astSetLabelAt").
-* type
-* The C type of the attribute.
-* component
-* The name of the class structure component that holds the attribute
-* value.
-* assign
-* An expression that evaluates to the value to be assigned to the
-* component.
-* nval
-* Specifies the number of values in the multi-valued attribute. The
-* "axis" values supplied to the created function should be in the
-* range zero to (nval - 1). If a value of 0 is supplied, the
-* value of the Plot3D's Nin attribute is used instead.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_SET3(attr,type,component,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attr( AstPlot3D *this, int axis, type value, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Validate the axis index. */ \
- if( axis < 0 || axis >= nval ){ \
- astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
- #attr " - it should be in the range 1 to %d.", status, \
- "astSet" #attr, astGetClass( this ), \
- axis + 1, nval ); \
-\
-/* Store the new value in the structure component. */ \
- } else { \
- this->component[ axis ] = (assign); \
- } \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astSet##attr##_( AstPlot3D *this, int axis, type value, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
- (**astMEMBER(this,Plot3D,Set##attr))( this, axis, value, status ); \
-}
-
-/*
-*
-* Name:
-* MAKE_TEST3
-
-* Purpose:
-* Implement a method to test if a single value has been set in a
-* multi-valued attribute for a class.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "plot3d.h"
-* MAKE_TEST3(attr,assign,nval)
-
-* Class Membership:
-* Defined by the Plot3D class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static int Test<Attribute>( AstPlot3D *this, int axis )
-*
-* and an external interface function of the form:
-*
-* int astTest<Attribute>_( AstPlot3D *this, int axis )
-*
-* which implement a method for testing if a single value in a specified
-* multi-valued attribute has been set for a class.
-
-* Parameters:
-* attr
-* The name of the attribute to be tested, as it appears in the function
-* name (e.g. LabelAt in "astTestLabelAt").
-* assign
-* An expression that evaluates to 0 or 1, to be used as the returned
-* value. This can use the string "axis" to represent the zero-based
-* index of the value within the attribute.
-* nval
-* Specifies the number of values in the multi-valued attribute. The
-* "axis" values supplied to the created function should be in the
-* range zero to (nval - 1).
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_TEST3(attr,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static int Test##attr( AstPlot3D *this, int axis, int *status ) { \
- int result; /* Value to return */ \
-\
-/* Initialise */ \
- result = 0; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* Validate the axis index. */ \
- if( axis < 0 || axis >= nval ){ \
- astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
- #attr " - it should be in the range 1 to %d.", status, \
- "astTest" #attr, astGetClass( this ), \
- axis + 1, nval ); \
-\
-/* Assign the result value. */ \
- } else { \
- result = (assign); \
- } \
-\
-/* Check for errors and clear the result if necessary. */ \
- if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
- return result; \
-} \
-/* External interface. */ \
-/* ------------------- */ \
-int astTest##attr##_( AstPlot3D *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return 0; \
-\
-/* Invoke the required method via the virtual function table. */ \
- return (**astMEMBER(this,Plot3D,Test##attr))( this, axis, status ); \
-}
-
-/*
-*
-* Name:
-* MAKE_CLEAR2
-
-* Purpose:
-* Implement a method to clear an element-specific attribute inherited
-* from the Plot class.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "plot3d.h"
-* MAKE_CLEAR2(attr)
-
-* Class Membership:
-* Defined by the Plot3d class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Clear<Attribute>( AstPlot *this, int element )
-*
-* which implements a method for clearing one of the element-specific
-* attributes (e.g. Size, Colour, Width, etc) inherited from the
-* parent Plot class.
-
-* Parameters:
-* attr
-* The name of the attribute to be cleared, as it appears in the function
-* name (e.g. LabelAt in "astClearSize").
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR2(attr) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attr( AstPlot *this_plot, int element, int *status ) { \
-\
-/* Local Variables: */ \
- AstPlot3D *this; \
- int axis3d; \
- int elem2d1; \
- int elem2d2; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Clear the attribute value in the parent Plot structure. */ \
- (*parent_clear##attr)( this_plot, element, status ); \
-\
-/* If OK, clear the attribute in the encapsulated Plots. */ \
- if( astOK ) { \
- this = (AstPlot3D *) this_plot; \
-\
-/* Get the zero-based index of the 3D axis to which the supplied element \
- refers. Use an index of -1 to indicate that the element does not \
- relate to a specific axis. Also get the corresponding elements to use \
- with the two Plots that share the specified 3D axis. */ \
- axis3d = Element2D( this, element, &elem2d1, &elem2d2, status ); \
-\
-/* If the element is not axis-specific, clear the attribute value in all \
- three plots. */ \
- if( axis3d == -1 ) { \
- astClear##attr( this->plotxy, element ); \
- astClear##attr( this->plotxz, element ); \
- astClear##attr( this->plotyz, element ); \
-\
-/* Otherwise, clear the attribute in the two plots that share the \
- specified 3D axis. */ \
- } else { \
- astClear##attr( GET_PLOT(this->axis_plot1[ axis3d ]), elem2d1 ); \
- astClear##attr( GET_PLOT(this->axis_plot2[ axis3d ]), elem2d2 ); \
- } \
- } \
-}
-
-/*
-*
-* Name:
-* MAKE_SET2
-
-* Purpose:
-* Implement a method to set an element-specific attribute inherited
-* from the Plot class.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "plot3d.h"
-* MAKE_SET2(attr,type)
-
-* Class Membership:
-* Defined by the Plot3d class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Set<Attribute>( AstPlot *this, int element, type value )
-*
-* which implements a method for setting one of the element-specific
-* attributes (e.g. Size, Colour, Width, etc) inherited from the
-* parent Plot class.
-
-* Parameters:
-* attr
-* The name of the attribute to be cleared, as it appears in the function
-* name (e.g. LabelAt in "astClearSize").
-* type
-* The attribute data type.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_SET2(attr,type) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attr( AstPlot *this_plot, int element, type value, int *status ) { \
-\
-/* Local Variables: */ \
- AstPlot3D *this; \
- int axis3d; \
- int elem2d1; \
- int elem2d2; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Set the attribute value in the parent Plot structure. */ \
- (*parent_set##attr)( this_plot, element, value, status ); \
-\
-/* If OK, set the attribute in the encapsulated Plots. */ \
- if( astOK ) { \
- this = (AstPlot3D *) this_plot; \
-\
-/* Get the zero-based index of the 3D axis to which the supplied element \
- refers. Use an index of -1 to indicate that the element does not \
- relate to a specific axis. Also get the corresponding elements to use \
- with the two Plots that share the specified 3D axis. */ \
- axis3d = Element2D( this, element, &elem2d1, &elem2d2, status ); \
-\
-/* If the element is not axis-specific, clear the attribute value in all \
- three plots. */ \
- if( axis3d == -1 ) { \
- astSet##attr( this->plotxy, element, value ); \
- astSet##attr( this->plotxz, element, value ); \
- astSet##attr( this->plotyz, element, value ); \
-\
-/* Otherwise, clear the attribute in the two plots that share the \
- specified 3D axis. */ \
- } else { \
- astSet##attr( GET_PLOT(this->axis_plot1[ axis3d ]), elem2d1, value ); \
- astSet##attr( GET_PLOT(this->axis_plot2[ axis3d ]), elem2d2, value ); \
- } \
- } \
-}
-
-
-/*
-*
-* Name:
-* MAKE_CLEAR1
-
-* Purpose:
-* Implement a method to clear an attribute inherited from the Plot class.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "plot3d.h"
-* MAKE_CLEAR1(attr)
-
-* Class Membership:
-* Defined by the Plot3d class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Clear<Attribute>( AstPlot *this )
-*
-* which implements a method for clearing a Plot3D attribute inherited
-* from the parent Plot class. It clears the attribute in all three
-* plots encapsulated within the Plot3D.
-
-* Parameters:
-* attr
-* The name of the attribute to be cleared, as it appears in the function
-* name (e.g. LabelAt in "astClearLabelAt").
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR1(attr) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attr( AstPlot *this_plot, int *status ) { \
-\
-/* Local Variables: */ \
- AstPlot3D *this; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Clear the attribute value in the parent Plot structure. */ \
- (*parent_clear##attr)( this_plot, status ); \
-\
-/* If OK, clear the attribute in all three of the encapsulated Plots. */ \
- if( astOK ) { \
- this = (AstPlot3D *) this_plot; \
- astClear##attr( this->plotxy ); \
- astClear##attr( this->plotxz ); \
- astClear##attr( this->plotyz ); \
- } \
-}
-
-/*
-*
-* Name:
-* MAKE_SET1
-
-* Purpose:
-* Implement a method to set an attribute inherited from the Plot class.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "plot3d.h"
-* MAKE_SET1(attr,type)
-
-* Class Membership:
-* Defined by the Plot3d class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Set<Attribute>( AstPlot *this, type value )
-*
-* which implements a method for setting a Plot3D attribute inherited
-* from the parent Plot class. It sets the attribute in all three
-* plots encapsulated within the Plot3D.
-
-* Parameters:
-* attr
-* The name of the attribute to be set, as it appears in the function
-* name (e.g. LabelAt in "astSetLabelAt").
-* type
-* The C data type for the attribute value.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_SET1(attr,type) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attr( AstPlot *this_plot, type value, int *status ) { \
-\
-/* Local Variables: */ \
- AstPlot3D *this; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Set the attribute value in the parent Plot structure. */ \
- (*parent_set##attr)( this_plot, value, status ); \
-\
-/* If OK, set the attribute in all three of the encapsulated Plots. */ \
- if( astOK ) { \
- this = (AstPlot3D *) this_plot; \
- astSet##attr( this->plotxy, value ); \
- astSet##attr( this->plotxz, value ); \
- astSet##attr( this->plotyz, value ); \
- } \
-}
-
-/*
-*
-* Name:
-* MAKE_CLEAR
-
-* Purpose:
-* Implement a method to clear an attribute inherited from the Plot class.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "plot3d.h"
-* MAKE_CLEAR(attr,whichplots)
-
-* Class Membership:
-* Defined by the Plot3d class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Clear<Attribute>( AstPlot *this, int axis )
-*
-* which implements a method for clearing an axis specific Plot3D
-* attribute inherited from the parent Plot class.
-
-* Parameters:
-* attr
-* The name of the attribute to be cleared, as it appears in the function
-* name (e.g. LabelAt in "astClearLabelAt").
-* whichplots
-* A value indicating which Plots should be affected. A negative value
-* means "all threee plots", a value of zero means "just the two plots
-* that touch at the specified axis in 3D space", a positive value
-* means "just the Plot that is used to label th 3D axis."
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attr,whichplots) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attr( AstPlot *this_plot, int axis, int *status ) { \
-\
-/* Local Variables: */ \
- AstPlot *plot; \
- AstPlot3D *this; \
- int axis2d; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Clear the attribute value in the parent Plot structure. This will \
- validate the axis index. */ \
- (*parent_clear##attr)( this_plot, axis, status ); \
-\
-/* If OK, clear the attribute for the relevant axis, or axes, of the Plots \
- encapsulated inside the Plot3D. First get a pointer to the Plot3D \
- structure. */ \
- if( astOK ) { \
- this = (AstPlot3D *) this_plot; \
-\
-/* If requested clear the attribute in all three Plots. */ \
- if( whichplots < 0 ) { \
- astClear##attr( this->plotxy, axis ); \
- astClear##attr( this->plotxz, axis ); \
- astClear##attr( this->plotyz, axis ); \
-\
-/* Each axis in 3D graphics space is described by two of the encapsulated \
- Plots, but only one of these two Plots is used to generate labels for \
- the axis. Now deal with cases where we are clearing the attribute \
- value in both of the two Plots that describe the axis. */ \
- } else if ( whichplots == 0 ) { \
- if( axis == 0 ) { \
- astClear##attr( this->plotxy, 0 ); \
- astClear##attr( this->plotxz, 0 ); \
-\
- } else if( axis == 1 ) { \
- astClear##attr( this->plotxy, 1 ); \
- astClear##attr( this->plotyz, 0 ); \
-\
- } else { \
- astClear##attr( this->plotxz, 1 ); \
- astClear##attr( this->plotyz, 1 ); \
- } \
-\
-/* Now deal with cases where we are clearing the attribute value only in \
- the Plot that is used to label the axis. */ \
- } else { \
- plot = AxisPlot( this, axis, &axis2d, status ); \
- astClear##attr( plot, axis2d ); \
- } \
- } \
-}
-
-
-/*
-*
-* Name:
-* MAKE_GET
-
-* Purpose:
-* Implement a method to get the value of an attribute inherited from the
-* Plot class.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "plot.h"
-* MAKE_GET(attr,type,bad_value)
-
-* Class Membership:
-* Defined by the Plot3D class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static <Type> Get<Attribute>( AstPlot *this, int axis )
-*
-* which implements a method for getting a value for an axis specific
-* attribute for a Plot3D.
-
-* Parameters:
-* attr
-* The name of the attribute whose value is to be obtained, as it
-* appears in the function name (e.g. Label in "astGetLabel").
-* type
-* The C type of the attribute.
-* bad_value
-* A constant value to return if the global error status is set, or if
-* the function fails.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_GET(attr,type,bad_value) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static type Get##attr( AstPlot *this_plot, int axis, int *status ) { \
-\
-/* Local Variables: */ \
- AstPlot *plot; \
- AstPlot3D *this; \
- int axis2d; \
- type result; \
-\
-/* Initialise */ \
- result = (bad_value); \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* See if the attribute value is set in the parent Plot structure. If so, \
- use the parent get method to get its value. */ \
- if( astTest##attr( this_plot, axis ) ) { \
- result = (*parent_get##attr)( this_plot, axis, status ); \
-\
-/* If the attribute value is not set in the parent Plot structure, get \
- the default value from the Plot that is used to label the 3D axis. The \
- parent test method called above will have reported an error if the axis \
- index is invalid, so check astOK here. */ \
- } else if( astOK ) { \
- this = (AstPlot3D *) this_plot; \
- plot = AxisPlot( this, axis, &axis2d, status ); \
- result = astGet##attr( plot, axis2d ); \
- } \
-\
-/* Return the result. */ \
- return result; \
-}
-
-/*
-*
-* Name:
-* MAKE_SET
-
-* Purpose:
-* Implement a method to set a value for an attribute inherited from the
-* Plot class.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "plot3d.h"
-* MAKE_SET(attr,type,whichplots)
-
-* Class Membership:
-* Defined by the Plot3d class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Set<Attribute>( AstPlot *this, int axis, <Type> value )
-*
-* which implements a method for setting a value for an axis specific
-* attribute inherited from the parent Plot class.
-
-* Parameters:
-* attr
-* The name of the attribute to be set, as it appears in the function
-* name (e.g. LabelAt in "astSetLabelAt").
-* type
-* The C type of the attribute.
-* whichplots
-* A value indicating which Plots should be affected. A negative value
-* means "all threee plots", a value of zero means "just the two plots
-* that touch at the specified axis in 3D space", a positive value
-* means "just the Plot that is used to label the 3D axis."
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attr,type,whichplots) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attr( AstPlot *this_plot, int axis, type value, int *status ) { \
-\
-/* Local Variables: */ \
- AstPlot3D *this; \
- AstPlot *plot; \
- int axis2d; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Set the supplied value in the parent Plot class. This will validate \
- the axis index. */ \
- (*parent_set##attr)( this_plot, axis, value, status ); \
-\
-/* If this went OK, also set the value for the appropriate axis of the \
- appropriate encapsulated Plot(s). First get a pointer to the Plot3D \
- structure. */ \
- if( astOK ) { \
- this = (AstPlot3D *) this_plot; \
-\
-/* If requested set the attribute in all three Plots. */ \
- if( whichplots < 0 ) { \
- astSet##attr( this->plotxy, axis, value ); \
- astSet##attr( this->plotxz, axis, value ); \
- astSet##attr( this->plotyz, axis, value ); \
-\
-/* Each axis in 3D graphics space is described by two of the encapsulated \
- Plots, but only one of these two Plots is used to generate labels for \
- the axis. First deal with cases where we are setting the attribute \
- value in both of the two Plots that describe the axis. */ \
- } else if( whichplots == 0 ) { \
- if( axis == 0 ) { \
- astSet##attr( this->plotxy, 0, value ); \
- astSet##attr( this->plotxz, 0, value ); \
-\
- } else if( axis == 1 ) { \
- astSet##attr( this->plotxy, 1, value ); \
- astSet##attr( this->plotyz, 0, value ); \
-\
- } else { \
- astSet##attr( this->plotxz, 1, value ); \
- astSet##attr( this->plotyz, 1, value ); \
- } \
-\
-/* Now deal with cases where we are setting the attribute value only in \
- the Plot that is used to label the axis. */ \
- } else { \
- plot = AxisPlot( this, axis, &axis2d, status ); \
- astSet##attr( plot, axis2d, value ); \
- } \
- } \
-}
-
-
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "cmpframe.h" /* Compound Frames */
-#include "cmpmap.h" /* Compound Mappings */
-#include "unitmap.h" /* Unit mappings */
-#include "permmap.h" /* Axis permutations */
-#include "winmap.h" /* Scale and shift mappings */
-#include "frame.h" /* Coordinate systems */
-#include "frameset.h" /* Inter-related coordinate systems */
-#include "keymap.h" /* Hash array */
-#include "plot.h" /* Interface definition for parent class */
-#include "plot3d.h" /* Interface definition for this class */
-#include "grf3d.h" /* The grf3D interface */
-#include "pointset.h" /* Sets of points */
-#include "globals.h" /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stddef.h>
-#include <math.h>
-#include <limits.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are used or extended by this
- class. */
-static AstObject *(* parent_cast)( AstObject *, AstObject *, int * );
-static void (* parent_removeframe)( AstFrameSet *, int, int * );
-static int (* parent_getobjsize)( AstObject *, int * );
-static int (* parent_equal)( AstObject *, AstObject *, int * );
-static void (* parent_vset)( AstObject *, const char *, char **, va_list, int * );
-static void (* parent_clear)( AstObject *, const char *, int * );
-static void (* parent_clearcurrent)( AstFrameSet *, int * );
-static void (* parent_setcurrent)( AstFrameSet *, int, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-/* A FrameSet pointer that is used when calling astCast. */
-static AstFrameSet *dummy_frameset = NULL;
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->GetAttrib_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Plot3D)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Plot3D,Class_Init)
-#define class_vtab astGLOBAL(Plot3D,Class_Vtab)
-#define getattrib_buff astGLOBAL(Plot3D,GetAttrib_Buff)
-
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX2 pthread_mutex_lock( &mutex2 );
-#define UNLOCK_MUTEX2 pthread_mutex_unlock( &mutex2 );
-
-static pthread_mutex_t mutex3 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX3 pthread_mutex_lock( &mutex3 );
-#define UNLOCK_MUTEX3 pthread_mutex_unlock( &mutex3 );
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-static char getattrib_buff[ 101 ];
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstPlot3DVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-
-#define LOCK_MUTEX3
-#define UNLOCK_MUTEX3
-
-#endif
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstFrameSet *Fset3D( AstFrameSet *, int, int * );
-static AstKeyMap *GetGrfContext( AstPlot *, int * );
-static AstObject *Cast( AstObject *, AstObject *, int * );
-static AstPlot *AxisPlot( AstPlot3D *, int, int *, int * );
-static AstPointSet *ExtendTicks( AstPlot *, AstPointSet *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *RootCornerString( int, int * );
-static int Attr3D( AstKeyMap *, int, double, double *, int, int * );
-static int Border( AstPlot *, int * );
-static int Element2D( AstPlot3D *, int, int *, int *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetObjSize( AstObject *, int * );
-static int Plot3DAttr( AstKeyMap *, int, double, double *, int );
-static int Plot3DCap( AstKeyMap *, int, int );
-static int Plot3DFlush( AstKeyMap * );
-static int Plot3DLine( AstKeyMap *, int, const float *, const float * );
-static int Plot3DMark( AstKeyMap *, int, const float *, const float *, int );
-static int Plot3DQch( AstKeyMap *, float *, float * );
-static int Plot3DScales( AstKeyMap *, float *, float * );
-static int Plot3DText( AstKeyMap *, const char *, float, float, const char *, float, float );
-static int Plot3DTxExt( AstKeyMap *, const char *, float, float, const char *, float, float, float *, float * );
-static int RootCornerInt( const char *, int * );
-static void BoundingBox( AstPlot *, float[2], float[2], int * );
-static void ChangeRootCorner( AstPlot3D *, int, int, int * );
-static void Clear( AstObject *, const char *, int * );
-static void ClearCurrent( AstFrameSet *, int * );
-static void Clip( AstPlot *, int, const double [], const double [], int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void CreatePlots( AstPlot3D *, AstFrameSet *, const float *, const double *, int * );
-static void Curve( AstPlot *, const double [], const double [], int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void GenCurve( AstPlot *, AstMapping *, int * );
-static void GrfPop( AstPlot *, int * );
-static void GrfPush( AstPlot *, int * );
-static void GrfSet( AstPlot *, const char *, AstGrfFun, int * );
-static void Grid( AstPlot *, int * );
-static void GridLine( AstPlot *, int, const double [], double, int * );
-static void Mark( AstPlot *, int, int, int, const double *, int, int * );
-static void PolyCurve( AstPlot *, int, int, int, const double *, int * );
-static void RemoveFrame( AstFrameSet *, int, int * );
-static void Set3DGrf( AstPlot3D *, AstPlot *, int, int * );
-static void SetCurrent( AstFrameSet *, int, int * );
-static void SetPlotAttr( AstPlot *, int, int[ 2 ], int * );
-static void SetTickValues( AstPlot *, int, int, double *, int, double *, int * );
-static void SplitFrameSet( AstFrameSet *, AstFrameSet **, int[2], int[2], AstFrameSet **, int[2], int[2], AstFrameSet **, int[2], int[2], int *, int * );
-static void StoreAxisInfo( AstPlot3D *, int[2], int[2], int[2], int[2], int[2], int[2], int * );
-static void Text( AstPlot *, const char *, const double [], const float [2], const char *, int * );
-static void UpdatePlots( AstPlot3D *, int * );
-static void VSet( AstObject *, const char *, char **, va_list, int * );
-
-static const char *GetAttrib( AstObject *, const char *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Declare private member functions that access Plot3D attributes.
- --------------------------------------------------------------*/
-
-/* Axis independent... */
-
-#define DECLARE_PLOT3D_ACCESSORS(attr,type) \
- static type Get##attr(AstPlot3D *,int *); \
- static void Set##attr(AstPlot3D *,type,int *); \
- static void Clear##attr(AstPlot3D *,int *); \
- static int Test##attr(AstPlot3D *,int *);
-
-DECLARE_PLOT3D_ACCESSORS(RootCorner,int)
-
-#undef DECLARE_PLOT3D_ACCESSORS
-
-
-/* Axis specific... */
-
-#define DECLARE_PLOT3D_ACCESSORS(attr,type) \
- static type Get##attr(AstPlot3D *,int,int *); \
- static void Set##attr(AstPlot3D *,int,type,int *); \
- static void Clear##attr(AstPlot3D *,int,int *); \
- static int Test##attr(AstPlot3D *,int,int *);
-
-DECLARE_PLOT3D_ACCESSORS(Norm,double)
-
-#undef DECLARE_PLOT3D_ACCESSORS
-
-
-/* Declare private member functions that access axis-specific attributes
- inherited from the Plot class. Also declare pointers to hold the parent
- function pointers.
- ----------------------------------------------------------------------*/
-
-#define DECLARE_PLOT_ACCESSORS(attr,type) \
- static type Get##attr(AstPlot *,int,int *); \
- static void Set##attr(AstPlot *,int,type,int *); \
- static void Clear##attr(AstPlot *,int,int *); \
- static type (*parent_get##attr)(AstPlot *,int,int *); \
- static void (*parent_set##attr)(AstPlot *,int,type,int *); \
- static void (*parent_clear##attr)(AstPlot *,int,int *);
-
-DECLARE_PLOT_ACCESSORS(MinTick,int)
-DECLARE_PLOT_ACCESSORS(Abbrev,int)
-DECLARE_PLOT_ACCESSORS(Gap,double)
-DECLARE_PLOT_ACCESSORS(LogGap,double)
-DECLARE_PLOT_ACCESSORS(LogPlot,int)
-DECLARE_PLOT_ACCESSORS(LogTicks,int)
-DECLARE_PLOT_ACCESSORS(LogLabel,int)
-DECLARE_PLOT_ACCESSORS(LabelUp,int)
-DECLARE_PLOT_ACCESSORS(DrawAxes,int)
-DECLARE_PLOT_ACCESSORS(LabelUnits,int)
-DECLARE_PLOT_ACCESSORS(MinTickLen,double)
-DECLARE_PLOT_ACCESSORS(MajTickLen,double)
-DECLARE_PLOT_ACCESSORS(NumLab,int)
-DECLARE_PLOT_ACCESSORS(NumLabGap,double)
-DECLARE_PLOT_ACCESSORS(TextLab,int)
-DECLARE_PLOT_ACCESSORS(TextLabGap,double)
-
-#undef DECLARE_PLOT_ACCESSORS
-
-
-/* Declare private member functions that access element-specific attributes
- inherited from the Plot class. Also declare pointers to hold the parent
- function pointers.
- ----------------------------------------------------------------------*/
-
-#define DECLARE_PLOT_ACCESSORS(attr,type) \
- static void Set##attr(AstPlot *,int,type,int *); \
- static void Clear##attr(AstPlot *,int,int *); \
- static void (*parent_set##attr)(AstPlot *,int,type,int *); \
- static void (*parent_clear##attr)(AstPlot *,int,int *);
-
-DECLARE_PLOT_ACCESSORS(Style,int)
-DECLARE_PLOT_ACCESSORS(Font,int)
-DECLARE_PLOT_ACCESSORS(Colour,int)
-DECLARE_PLOT_ACCESSORS(Width,double)
-DECLARE_PLOT_ACCESSORS(Size,double)
-
-#undef DECLARE_PLOT_ACCESSORS
-
-
-/* Declare private member functions that access attributes inherited from
- the Plot class that do not need to override the Get method. This
- includes attributes that are not axis-specific or that do not have
- dynamic defaults. Also declare pointers to hold the parent function
- pointers.
- ----------------------------------------------------------------------*/
-#define DECLARE_PLOT_ACCESSORS(attr,type) \
- static void Set##attr(AstPlot *,type,int *); \
- static void Clear##attr(AstPlot *,int *); \
- static void (*parent_set##attr)(AstPlot *,type,int *); \
- static void (*parent_clear##attr)(AstPlot *,int *);
-
-DECLARE_PLOT_ACCESSORS(Ink,int)
-DECLARE_PLOT_ACCESSORS(Tol,double)
-DECLARE_PLOT_ACCESSORS(Invisible,int)
-DECLARE_PLOT_ACCESSORS(TickAll,int)
-DECLARE_PLOT_ACCESSORS(ForceExterior,int)
-DECLARE_PLOT_ACCESSORS(Border,int)
-DECLARE_PLOT_ACCESSORS(Clip,int)
-DECLARE_PLOT_ACCESSORS(ClipOp,int)
-DECLARE_PLOT_ACCESSORS(Escape,int)
-DECLARE_PLOT_ACCESSORS(Grid,int)
-DECLARE_PLOT_ACCESSORS(Labelling,int)
-
-#undef DECLARE_PLOT_ACCESSORS
-
-
-
-/* Member functions. */
-/* ================= */
-
-static int Attr3D( AstKeyMap *grfconID, int attr, double value,
- double *old_value, int prim, int *status ){
-/*
-* Name:
-* Attr3D
-
-* Purpose:
-* Get or set the value of a 3D grf attribute.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* Attr3D( AstKeyMap *grfconID, int attr, double value, double *old_value,
-* int prim, int *status )
-
-* Class Membership:
-* Plot3D member function.
-
-* Description:
-* This function gets or sets the current value of a specified graphics
-* attribute in the parent Plot structure of a Plot3D. It forwards the
-* call to the grf3D module being used by this Plot3D. It should be
-* registered with the parent Plot using astGrfSet.
-
-* Parameters:
-* grfconID
-* The Plot's GrfContext KeyMap.
-* attr
-* An integer value identifying the required attribute. This should
-* be one of the symbolic values defined in grf.h.
-* value
-* A new value to store for the attribute. If this is AST__BAD
-* no value is stored.
-* old_value
-* A pointer to a double in which to return the attribute value.
-* If this is NULL, no value is returned.
-* prim
-* The sort of graphics primitive to be drawn with the new attribute.
-* Identified by one of the values defined in grf.h.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* An integer value of 0 is returned if an error occurs, and 1 otherwise.
-
-*/
-
-/* Local Variables: */
- int result;
-
-/* Check the inherited status. */
- if( !astOK ) return 0;
-
-/* Since we are about to call an external function which may not be
- thread safe, prevent any other thread from executing the following code
- until the current thread has finished executing it. */
- LOCK_MUTEX2;
-
-/* Use the function in the external Grf3D module, selected at link-time
- using ast_link options. */
- result = astG3DAttr( attr, value, old_value, prim );
-
-/* Allow the next thread to proceed. */
- UNLOCK_MUTEX2;
-
-/* Return the result. */
- return result;
-}
-
-static AstPlot *AxisPlot( AstPlot3D *this, int axis3d, int *axis2d, int *status ){
-/*
-* Name:
-* AxisPlot
-
-* Purpose:
-* Find the Plot used to label a 3D axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* AstPlot *AxisPlot( AstPlot3D *this, int axis3d, int *axis2d, int *status )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-* This function returns a pointer to the encapsulated 2D Plot that
-* is used to label the given 3D axis. It also returns the index
-* of the labelled axis within the 2D Plot.
-
-* Parameters:
-* this
-* Pointer to a Plot3D.
-* axis3d
-* A zero-based axis index within the Plot3D.
-* axis2d
-* Pointer to an int in which to put the index of the labelled axis
-* within the returned 2D Plot.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the Plot used to label the 3D axis. Do not annul this
-* pointer.
-
-*-
-*/
-
-/* Local Variables: */
- AstPlot *plot;
-
-/* Check the global status. */
- if( !astOK ) return NULL;
-
-/* Return the required information form the Plot3D structure. */
- plot = GET_PLOT( this->axis_plot1[ axis3d ] );
- if( ! plot ) {
- astError( AST__INTER, "AxisPlot(Plot3D): Illegal value %d "
- "for axis3d (internal AST programming error).", status,
- this->axis_plot1[ axis3d ] );
- }
-
- *axis2d = this->axis_index1[ axis3d ];
-
- return plot;
-}
-
-static int Border( AstPlot *this_plot, int *status ){
-/*
-* Name:
-* Border
-
-* Purpose:
-* Draw a border around valid regions of a Plot.
-
-* Type:
-* Private member function.
-
-* Synopsis:
-* #include "plot3d.h"
-* int Border( AstPlot *this, int *status )
-
-* Class Membership:
-* Plot method (overrides the astBorder method inherited from the
-* Plot class)
-
-* Description:
-* This function draws a (line) border around regions of the
-* plotting area of a Plot which correspond to valid, unclipped
-* physical coordinates. For example, when plotting using an
-* all-sky map projection, this function could be used to draw the
-* boundary of the celestial sphere when it is projected on to the
-* plotting surface.
-*
-* If the entire plotting area contains valid, unclipped physical
-* coordinates, then the boundary will just be a rectangular box
-* around the edges of the plotting area.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero is returned if the plotting area is completely filled by
-* valid, unclipped physical coordinates (so that only a
-* rectangular box was drawn around the edge). Otherwise, one is
-* returned.
-
-* Notes:
-* - The Plot3D implementation of this method, invokes the astBorder
-* method on each of the three encapsulated Plots, and returns the
-* logical OR of the three returned flags.
-* - A value of zero will be returned if this function is invoked
-* with the AST error status set, or if it should fail for any
-* reason.
-* - An error results if either the current Frame or the base Frame
-* of the Plot is not 2-dimensional, or (for a Plot3D) 3-dimensional.
-* - An error also results if the transformation between the base
-* and current Frames of the Plot is not defined (i.e. the Plot's
-* TranForward attribute is zero).
-*/
-
-/* Local Variables: */
- AstPlot3D *this;
- const char *class;
- const char *method;
- float x1;
- float y1;
- float z1;
- float x[ 2 ];
- float y[ 2 ];
- float z[ 2 ];
- int flag1;
- int flag2;
- int flag3;
- int naxes;
- int ok;
- int result;
- int root_corner;
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Get a pointer to the Plot3D structure. */
- this = (AstPlot3D *) this_plot;
-
-/* Store the current method, and the class of the supplied object for use
- in error messages.*/
- method = "astBorder";
- class = astGetClass( this );
-
-/* Check the base Frame of the Plot is 3-D. */
- naxes = astGetNin( this );
- if( naxes != 3 && astOK ){
- astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the base "
- "Frame of the supplied %s is invalid - this number should "
- "be 3.", status, method, class, naxes, class );
- }
-
-/* Check the current Frame of the Plot is 3-D. */
- naxes = astGetNout( this );
- if( naxes != 3 && astOK ){
- astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the current "
- "Frame of the supplied %s is invalid - this number should "
- "be 3.", status, method, class, naxes, class );
- }
-
-/* Invoke the astBorder method on each of the three encapsulated Plots. */
- flag1 = astBorder( this->plotxy );
- flag2 = astBorder( this->plotxz );
- flag3 = astBorder( this->plotyz );
-
-/* If no bad values were encountered in any of the Plots, draw lines
- along the remaining plot edges. */
- result = ( flag1 || flag2 || flag3 );
- if( !result ) {
-
-/* The three remaining edges ot be drawn all meet at the corner
- diagonally opposite the root corner. Get the root corner. */
- root_corner = astGetRootCorner( this );
-
-/* The (x0,y0,z0) position is the graphics coords at the corner
- diagonally opposite the root corner. The x1, y1 and z1 values
- are the graphics x, y and z values at the ends of the three
- lines that remain to be drawn. */
- if( root_corner & 1 ) {
- x[ 0 ] = this->gbox[ 0 ];
- x1 = this->gbox[ 3 ];
- } else {
- x[ 0 ] = this->gbox[ 3 ];
- x1 = this->gbox[ 0 ];
- }
-
- if( root_corner & 2 ) {
- y[ 0 ] = this->gbox[ 1 ];
- y1 = this->gbox[ 4 ];
- } else {
- y[ 0 ] = this->gbox[ 4 ];
- y1 = this->gbox[ 1 ];
- }
-
- if( root_corner & 4 ) {
- z[ 0 ] = this->gbox[ 2 ];
- z1 = this->gbox[ 5 ];
- } else {
- z[ 0 ] = this->gbox[ 5 ];
- z1 = this->gbox[ 2 ];
- }
-
-/* Establish the correct graphical attributes as defined by attributes
- with the supplied Plot. */
- astGrfAttrs( this, AST__BORDER_ID, 1, GRF__LINE, method, class );
-
-/* Since we are about to call an external function which may not be
- thread safe, prevent any other thread from executing the following code
- until the current thread has finished executing it. */
- LOCK_MUTEX2;
-
-/* Draw the remaining line parallel to the X axis. */
- x[ 1 ] = x1;
- y[ 1 ] = y[ 0 ];
- z[ 1 ] = z[ 0 ];
- ok = astG3DLine( 2, x, y, z );
-
-/* Draw the remaining line parallel to the Y axis. */
- x[ 1 ] = x[ 0 ];
- y[ 1 ] = y1;
- z[ 1 ] = z[ 0 ];
- ok = ok && astG3DLine( 2, x, y, z );
-
-/* Draw the remaining line parallel to the X axis. */
- x[ 1 ] = x[ 0 ];
- y[ 1 ] = y[ 0 ];
- z[ 1 ] = z1;
- ok = ok && astG3DLine( 2, x, y, z );
-
-/* Allow the next thread to proceed. */
- UNLOCK_MUTEX2;
-
-/* Re-establish the original graphical attributes. */
- astGrfAttrs( this, AST__BORDER_ID, 0, GRF__LINE, method, class );
-
-/* Report an error if anything went wrong in the grf3d module. */
- if( !ok && astOK ) {
- astError( AST__GRFER, "%s(%s): Graphics error in astG3DLine. ", status,
- method, class );
- }
- }
-
-/* Return zero if an error has occurrred. */
- if( !astOK ) result = 0;
-
-/* Return a flag indicating if any bad values were encountered in any of
- the Plots. */
- return result;
-}
-
-static AstObject *Cast( AstObject *this_object, AstObject *obj, int *status ) {
-/*
-* Name:
-* Cast
-
-* Purpose:
-* Cast an Object into an instance of a sub-class.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* AstObject *Cast( AstObject *this, AstObject *obj, int *status )
-
-* Class Membership:
-* Plot3D member function (over-rides the protected astCast
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a deep copy of an ancestral component of the
-* supplied object. The required class of the ancestral component is
-* specified by another object. Specifically, if "this" and "new" are
-* of the same class, a copy of "this" is returned. If "this" is an
-* instance of a subclass of "obj", then a copy of the component
-* of "this" that matches the class of "obj" is returned. Otherwise,
-* a NULL pointer is returned without error.
-
-* Parameters:
-* this
-* Pointer to the Object to be cast.
-* obj
-* Pointer to an Object that defines the class of the returned Object.
-* The returned Object will be of the same class as "obj".
-
-* Returned Value:
-* A pointer to the new Object. NULL if "this" is not a sub-class of
-* "obj", or if an error occurs.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables; */
- AstObject *new;
- astDECLARE_GLOBALS
- int generation_gap;
-
-/* Initialise */
- new = NULL;
-
-/* Check inherited status */
- if( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* See how many steps up the class inheritance ladder it is from "obj"
- to this class (Plot3D). A positive value is returned if Plot3D
- is a sub-class of "obj". A negative value is returned if "obj" is
- a sub-class of Plot3D. Zero is returned if "obj" is a Plot3D.
- AST__COUSIN is returned if "obj" is not on the same line of descent
- as Plot3D. */
- generation_gap = astClassCompare( (AstObjectVtab *) &class_vtab,
- astVTAB( obj ) );
-
-/* If "obj" is a Plot3D or a sub-class of Plot3D, we can cast by
- truncating the vtab for "this" so that it matches the vtab of "obJ",
- and then taking a deep copy of "this". */
- if( generation_gap <= 0 && generation_gap != AST__COUSIN ) {
- new = astCastCopy( this_object, obj );
-
-/* If "obj" is a Plot (the parent class), we cast by returning a deep
- copy of the Plot covering the XY face. */
- } else if( generation_gap == 1 ) {
- new = astCopy( ( (AstPlot3D *) this_object)->plotxy );
-
-/* If "obj" is a FrameSet or higher, we attempt to use the implementation
- inherited from the parent class to cast the FrameSet component into the
- class indicated by "obj". */
- } else {
- new = (*parent_cast)( this_object, obj, status );
- }
-
-/* Return the new pointer. */
- return new;
-}
-
-static void ChangeRootCorner( AstPlot3D *this, int old, int new, int *status ){
-/*
-* Name:
-* ChangeRootCorner
-
-* Purpose:
-* Use a new RootCorner value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* void ChangeRootCorner( AstPlot3D *this, int old, int new, int *status )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-* This function sets the attributes of the encapsulated Plots so that
-* labels appear on the edges of the 3D graphics cube that join at the
-* specified new root corner. It also reverses the graphics axes in
-* the encapsulated Plots as required in order to ensure that the Plots
-* look "normal" when viewed from the outside of the 3D graphics cube.
-* This happens if a the Plot used to label a specific axis moves from
-* one face the the 3D graphics cube to the opposite face.
-
-* Parameters:
-* this
-* Pointer to a Plot3D.
-* old
-* The old RootCorner value.
-* new
-* The new RootCorner value.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - Each RootCorner value is in the range 0 to 7 and is a 3 bit
-* bit-mask. Bit 0 describes the 3D graphics X axis, bit 1 describes
-* the graphics Y axis and bit 2 describes the graphics Z axis. If a
-* bit is set it means that the corner is at the upper bound on the
-* corresponding axis. If a bit is unset it means that the corner is
-* at the lower bound on the corresponding axis.
-
-*-
-*/
-
-/* Local Variables: */
- AstKeyMap *grfcon;
- AstPlot *plot;
- AstPlot *plots[ 24 ];
- int edges[ 24 ];
- int axes[ 24 ];
- int axis2d;
- int edge;
- int i;
- int np;
- int xeqy;
- int xeqz;
-
-/* Check the global status. */
- if( !astOK ) return;
-
-/* If the corner has moved on the 3D X axis (from upper X bound to lower X
- bound or vice-versa), mirror the axis of the encapsulated Plot that is
- perpendicular to the 3D X axis. This means that the Plot can be thought
- of as being viewed from the outside of the 3D graphics cube. Also,
- update the constant X axis value at which the YZ plane is drawn. */
- if( ( old & 1 ) != ( new & 1 ) ) astMirror( this->plotyz, 0 );
- grfcon = (AstKeyMap *) astGetGrfContext( this->plotyz );
- astMapPut0D( grfcon, "Gcon", this->gbox[ ( new & 1 ) ? 3 : 0 ], "Constant X value" );
- astMapPut0I( grfcon, "RootCorner", new, "Labelled corner" );
- grfcon= astAnnul( grfcon );
-
-/* Likewise mirror the other two axes if required. */
- if( ( old & 2 ) != ( new & 2 ) ) astMirror( this->plotxz, 0 );
- grfcon = (AstKeyMap *) astGetGrfContext( this->plotxz );
- astMapPut0D( grfcon, "Gcon", this->gbox[ ( new & 2 ) ? 4 : 1 ], "Constant Y value" );
- astMapPut0I( grfcon, "RootCorner", new, "Labelled corner" );
- grfcon= astAnnul( grfcon );
-
- if( ( old & 4 ) != ( new & 4 ) ) astMirror( this->plotxy, 0 );
- grfcon = (AstKeyMap *) astGetGrfContext( this->plotxy );
- astMapPut0D( grfcon, "Gcon", this->gbox[ ( new & 4 ) ? 5 : 2 ], "Constant Z value" );
- astMapPut0I( grfcon, "RootCorner", new, "Labelled corner" );
- grfcon= astAnnul( grfcon );
-
-/* Set a flag saying whether the limits are equal at the new corner for
- the X and Y axes. */
- xeqy = ( ( ( new & 1 ) > 0 ) == ( ( new & 2 ) > 0 ) );
-
-/* Set a flag saying whether the limits are equal at the new corner for
- the X and Z axes. */
- xeqz = ( ( ( new & 1 ) > 0 ) == ( ( new & 4 ) > 0 ) );
-
-/* Ensure all Edge attributes are clear. This means that the public
- attribute accessors routines used below will return dynamic defaults for
- the Edge attributes. */
- astClearEdge( this->plotxy, 0 );
- astClearEdge( this->plotxy, 1 );
- astClearEdge( this->plotxz, 0 );
- astClearEdge( this->plotxz, 1 );
- astClearEdge( this->plotyz, 0 );
- astClearEdge( this->plotyz, 1 );
-
-/* So far we have recorded no edges changes. */
- np = 0;
-
-/* We now adjust the Edge attributes in the Plot used to annotate the 3D
- X axis in order to get the X axis labels on the correct edge of the 3D
- graphics cube. Get the Plot used to produce X axis labels (this will
- be either this->plotxy or this->plotxz). */
- plot = AxisPlot( this, 0, &axis2d, status );
-
-/* See what edge of the Plot is used to annotate the first of the two WCS
- axis described by the 2D Plot. If the Edge(1) attribute has not been
- assigned a value, then a dynamic default will be used by the Plot class.
- We want to know what this dynamic default is, so we first cleared the
- attribute above. Now we set the attribute value explicitly to the dynamic
- default returned by astGetC. Note, we use astGetC rather than astGetEdge
- because the dynamic default is not calculated when calling astGetEdge. */
- astSetC( plot, "Edge(1)", astGetC( plot, "Edge(1)" ));
- edge = astGetEdge( plot, 0 );
- astClearEdge( plot, 0 );
-
-/* If the 3D X axis is labelled using the Plot that spans the XY plane... */
- if( plot == this->plotxy ) {
-
-/* ... and if the new root corner is at the upper limit on the Y axis... */
- if( new & 2 ) {
-
-/* If the first WCS axis is currently labelled on either the top or bottom
- edge, ensure it is labelled on the upper Y (top) edge. */
- if( edge == 3 || edge == 1 ) {
- plots[ np ] = plot;
- axes[ np ] = 0;
- edges[ np++ ] = TOP;
-
-/* Otherwise ensure that the second WCS axis is labelled on the upper Y (top)
- edge. */
- } else {
- plots[ np ] = plot;
- axes[ np ] = 1;
- edges[ np++ ] = TOP;
- }
-
-/* If the new root corner is at the lower limit on the Y axis... */
- } else {
-
-/* If the first WCS axis is currently labelled on either the top or bottom
- edge, ensure it is labelled on the lower Y (bottom) edge. */
- if( edge == 3 || edge == 1 ) {
- plots[ np ] = plot;
- axes[ np ] = 0;
- edges[ np++ ] = BOTTOM;
-
-/* Otherwise ensure that the second WCS axis is labelled on the lower Y
- (bottom) edge. */
- } else {
- plots[ np ] = plot;
- axes[ np ] = 1;
- edges[ np++ ] = BOTTOM;
- }
- }
-
-/* If the 3D X axis is labelled using the Plot that spans the XZ plane... */
- } else {
-
-/* ... and if the new root corner is at the upper limit on the Z axis... */
- if( new & 4 ) {
-
-/* If the first WCS axis is currently labelled on either the top or bottom
- edge, ensure it is labelled on the upper Z (top) edge. */
- if( edge == 3 || edge == 1 ) {
- plots[ np ] = plot;
- axes[ np ] = 0;
- edges[ np++ ] = TOP;
-
-/* Otherwise ensure that the second WCS axis is labelled on the upper Y (top)
- edge. */
- } else {
- plots[ np ] = plot;
- axes[ np ] = 1;
- edges[ np++ ] = TOP;
- }
-
-/* If the new root corner is at the lower limit on the Z axis... */
- } else {
-
-/* If the first WCS axis is currently labelled on either the top or bottom
- edge, ensure it is labelled on the lower Z (bottom) edge. */
- if( edge == 3 || edge == 1 ) {
- plots[ np ] = plot;
- axes[ np ] = 0;
- edges[ np++ ] = BOTTOM;
-
-/* Otherwise ensure that the second WCS axis is labelled on the lower Z
- (bottom) edge. */
- } else {
- plots[ np ] = plot;
- axes[ np ] = 1;
- edges[ np++ ] = BOTTOM;
- }
- }
- }
-
-/* We now adjust the Edge attributes in the Plot used to annotate the 3D
- Y axis in order to get the Y axis labels on the correct edge of the 3D
- graphics cube. Get the Plot used to produce Y axis labels. */
- plot = AxisPlot( this, 1, &axis2d, status );
-
-/* See what edge of the Plot is used to annotate the first of the two WCS
- axis described by the Plot. */
- astSetC( plot, "Edge(1)", astGetC( plot, "Edge(1)" ));
- edge = astGetEdge( plot, 0 );
- astClearEdge( plot, 0 );
-
-/* If the 3D Y axis is labelled using the Plot that spans the XY plane... */
- if( plot == this->plotxy ) {
-
-/* ... and if the new root corner is at the same limit on the X and Z axes,
- put Y labels on the right side of the Plot. */
- if( xeqz ) {
- if( edge == 0 || edge == 2 ) {
- plots[ np ] = plot;
- axes[ np ] = 0;
- edges[ np++ ] = RIGHT;
- } else {
- plots[ np ] = plot;
- axes[ np ] = 1;
- edges[ np++ ] = RIGHT;
- }
-
-/* If the new root corner is at a different limit on the X and Z axes,
- put Y labels on the left side of the Plot. */
- } else {
- if( edge == 0 || edge == 2 ) {
- plots[ np ] = plot;
- axes[ np ] = 0;
- edges[ np++ ] = LEFT;
- } else {
- plots[ np ] = plot;
- axes[ np ] = 1;
- edges[ np++ ] = LEFT;
- }
- }
-
-/* If the 3D Y axis is labelled using the Plot that spans the YZ plane... */
- } else {
-
-/* ... and if the new root corner is at the upper Z limit, put Y labels on
- the top of the Plot. */
- if( new & 4 ) {
- if( edge == 1 || edge == 3 ) {
- plots[ np ] = plot;
- axes[ np ] = 0;
- edges[ np++ ] = TOP;
- } else {
- plots[ np ] = plot;
- axes[ np ] = 1;
- edges[ np++ ] = TOP;
- }
-
-/* If the new root corner is at the lower Z limit, put Y labels on the
- bottom of the Plot. */
- } else {
- if( edge == 1 || edge == 3 ) {
- plots[ np ] = plot;
- axes[ np ] = 0;
- edges[ np++ ] = BOTTOM;
- } else {
- plots[ np ] = plot;
- axes[ np ] = 1;
- edges[ np++ ] = BOTTOM;
- }
- }
- }
-
-/* We now adjust the Edge attributes in the Plot used to annotate the 3D
- Z axis in order to get the Z axis labels on the correct edge of the 3D
- graphics cube. Get the Plot used to produce Z axis labels. */
- plot = AxisPlot( this, 2, &axis2d, status );
-
-/* See what edge of the Plot is used to annotate the first of the two WCS
- axis described by the Plot. */
- astSetC( plot, "Edge(1)", astGetC( plot, "Edge(1)" ));
- edge = astGetEdge( plot, 0 );
- astClearEdge( plot, 0 );
-
-/* If the 3D Z axis is labelled using the Plot that spans the XZ plane... */
- if( plot == this->plotxz ) {
-
-/* ... and if the new root corner is at the same limit on the X and Y axes,
- put Z labels on the left side of the Plot. */
- if( xeqy ) {
- if( edge == 0 || edge == 2 ) {
- plots[ np ] = plot;
- axes[ np ] = 0;
- edges[ np++ ] = LEFT;
- } else {
- plots[ np ] = plot;
- axes[ np ] = 1;
- edges[ np++ ] = LEFT;
- }
-
-/* If the new root corner is at a different limit on the X and Y axes,
- put Y labels on the right side of the Plot. */
- } else {
- if( edge == 0 || edge == 2 ) {
- plots[ np ] = plot;
- axes[ np ] = 0;
- edges[ np++ ] = RIGHT;
- } else {
- plots[ np ] = plot;
- axes[ np ] = 1;
- edges[ np++ ] = RIGHT;
- }
- }
-
-/* If the 3D Z axis is labelled using the Plot that spans the YZ plane... */
- } else {
-
-/* ... and if the new root corner is at the same limit on the X and Y axes,
- put Z labels on the right side of the Plot. */
- if( xeqz ) {
- if( edge == 0 || edge == 2 ) {
- plots[ np ] = plot;
- axes[ np ] = 0;
- edges[ np++ ] = RIGHT;
- } else {
- plots[ np ] = plot;
- axes[ np ] = 1;
- edges[ np++ ] = RIGHT;
- }
-
-/* If the new root corner is at a different limit on the X and Y axes,
- put Y labels on the left side of the Plot. */
- } else {
- if( edge == 0 || edge == 2 ) {
- plots[ np ] = plot;
- axes[ np ] = 0;
- edges[ np++ ] = LEFT;
- } else {
- plots[ np ] = plot;
- axes[ np ] = 1;
- edges[ np++ ] = LEFT;
- }
- }
- }
-
-/* Apply the set of edge changes determined above. */
- for( i = 0; i < np; i++ ) {
- astSetEdge( plots[ i ], axes[ i ], edges[ i ] );
- }
-
-/* Ensure that the 2 Plot axes that are not being used have suitable values
- for their attributes. That is, no labels are drawn, and the ticked
- edges are the one that meet at the new RootCorner. */
-
- if( !astTestEdge( this->plotxy, 0 ) ) {
- astSetEdge( this->plotxy, 0, ( new & 2 ) ? TOP : BOTTOM );
- }
-
- if( !astTestEdge( this->plotxy, 1 ) ) {
- astSetEdge( this->plotxy, 1, xeqz ? RIGHT: LEFT );
- }
-
- if( !astTestEdge( this->plotxz, 0 ) ) {
- astSetEdge( this->plotxz, 0, ( new & 4 ) ? TOP : BOTTOM );
- }
-
- if( !astTestEdge( this->plotxz, 1 ) ) {
- astSetEdge( this->plotxz, 1, xeqy ? LEFT : RIGHT );
- }
-
- if( !astTestEdge( this->plotyz, 0 ) ) {
- astSetEdge( this->plotyz, 0, ( new & 4 ) ? TOP : BOTTOM );
- }
-
- if( !astTestEdge( this->plotyz, 1 ) ) {
- astSetEdge( this->plotyz, 1, xeqy ? RIGHT : LEFT );
- }
-
-
-}
-
-static void Clear( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* Clear
-
-* Purpose:
-* Clear attribute values for a Plot3D.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* void Clear( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Plot3D member function (over-rides the public astClear method
-* inherited from the Object class).
-
-* Description:
-* This function clears the values of a specified set of attributes
-* for a Plot3D. Clearing an attribute cancels any value that has
-* previously been explicitly set for it, so that the standard
-* default attribute value will subsequently be used instead. This
-* also causes the astTest function to return the value zero for
-* the attribute, indicating that no value has been set.
-
-* Parameters:
-* this
-* Pointer to the Plot3D.
-* attrib
-* Pointer to a null-terminated character string containing a
-* comma-separated list of the names of the attributes to be
-* cleared.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function preserves the integrity of the Plot3D (if
-* possible) by appropriately modifying the three encapsulated Plots.
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Invoke the parent astClear method to clear the Plot3D's attribute values. */
- (*parent_clear)( this_object, attrib, status );
-
-/* Update the three 2D Plots stored in the Plot3D structure so that they
- reflect this modified FrameSet. */
- UpdatePlots( (AstPlot3D *) this_object, status );
-
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a Plot3D.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot.h"
-* void ClearAttrib( AstObject *this, const char *attrib )
-
-* Class Membership:
-* Plot3D member function (over-rides the astClearAttrib protected
-* method inherited from the Plot class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* Plot3D, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the Plot3D.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-*/
-
-/* Local Variables: */
- AstPlot3D *this; /* Pointer to the Plot3D structure */
- int axis; /* Axis index */
- int len; /* Length of attrib string */
- int nc; /* Number of characters read */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Plot3D structure. */
- this = (AstPlot3D *) this_object;
-
-/* Obtain the length of the "attrib" string. */
- len = strlen( attrib );
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* Norm. */
-/* ----------- */
- if ( !strcmp( attrib, "norm" ) ) {
- astClearNorm( this, 0 );
- astClearNorm( this, 1 );
- astClearNorm( this, 2 );
-
-/* Norm(axis). */
-/* ----------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "norm(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearNorm( this, axis - 1 );
-
-/* RootCorner. */
-/* ----------- */
- } else if ( !strcmp( attrib, "rootcorner" ) ) {
- astClearRootCorner( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static void ClearCurrent( AstFrameSet *this_frameset, int *status ) {
-/*
-* Name:
-* ClearCurrent
-
-* Purpose:
-* Clear the value of the Current attribute for a Plot3D.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* int astClearCurrent( AstFrameSet *this )
-
-* Class Membership:
-* Plot3D member function (over-rides the public astClearCurrent method
-* inherited from the FrameSet class).
-
-* Description:
-* This function clears the value of the Current attribute for a
-* Plot3D. This attribute is an index that identifies the current
-* Frame for the Plot3D.
-
-* Parameters:
-* this
-* Pointer to the Plot3D.
-*/
-
-/* Invoke the parent astClearCurrent method. */
- (*parent_clearcurrent)( this_frameset, status );
-
-/* Update the three 2D Plots stored in the Plot3D structure so that they
- reflect this modified FrameSet. */
- UpdatePlots( (AstPlot3D *) this_frameset, status );
-}
-
-static void ClearRootCorner( AstPlot3D *this, int *status ){
-/*
-*+
-* Name:
-* astClearRootCorner
-
-* Purpose:
-* Clear the RootCorner attribute.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "plot3d.h"
-* void astClearRootCorner( AstPlot3D *this )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-* This function clears the RootCorner attribute.
-
-* Parameters:
-* this
-* Pointer to a Plot3D.
-
-*-
-*/
-
-/* Local Variables: */
- int old;
- int new;
-
-/* Check the global status. */
- if( !astOK ) return;
-
-/* Get the current rootcorner value. */
- old = astGetRootCorner( this );
-
-/* Clear the RootCorner attribute. */
- this->rootcorner = -1;
-
-/* Get the new (default) rootcorner value. */
- new = astGetRootCorner( this );
-
-/* If the root corner has changed, mirror any axes of the encapsulated Plots
- that need mirroring (this is done to ensure that Plots look right when
- viewed from the outside of the graphics cube), and modify the Edge
- attributes in the encapsulated Plots to ensure the labels appear on the
- requested edges of the 3D graphics cube. . */
- if( old != new ) ChangeRootCorner( this, old, new, status );
-}
-
-static void CreatePlots( AstPlot3D *this, AstFrameSet *fset, const float *gbox,
- const double *bbox, int *status ) {
-/*
-* Name:
-* CreatePlots
-
-* Purpose:
-* Create three 2D plots and store in the Plot3D.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* void CreatePlots( AstPlot3D *this, AstFrameSet *fset, const float *gbox,
- const double *bbox, int *status )
-
-* Class Membership:
-* Plot3D method.
-
-* Description:
-* This function splits the supplied FrameSet up into 3 independent 2D
-* FrameSets, each describing a 2D plane in the supplied 3D FrameSet.
-* It then uses these 2D FrameSets to create three Plots, one for each
-* plane in the graphics plotting space, and stores them in the Plot3D.
-*
-* Each of the three Plots is notionally pasted onto one face of the
-* 3D graphics cube (the RootCorner attribute is used to determine which
-* of the two parallel faces a particular Plot is pasted onto). The
-* Plot is pasted in such a way that, when viewed from the outside of
-* the graphics cube, the first graphics axis increases left to right
-* and the second increases bottom to top (this assumes that "up" is
-* parallel to the 3D Z axis).
-*
-* Initially, the Plots are created assuming the default RootCorner
-* value ("LLL"). They will be changed later if the value of the
-* RootCorner attribute is changed.
-
-* Parameters:
-* this
-* Pointer to the Plot3D.
-* fset
-* Pointer to the FrameSet.
-* gbox
-* A pointer to an array of 6 values giving the graphics coordinates
-* of the bottom left and top right corners of a box on the graphics
-* output device. The first triple of values should be the graphics
-* coordinates of the bottom left corner of the box and the second
-* triple of values are the graphics coordinates of the top right corner.
-* bbox
-* A pointer to an array of 6 values giving the coordinates in the
-* supplied Frame or base Frame of the supplied FrameSet at the bottom
-* left and top right corners of the box specified by parameter gbox.
-* These should be supplied in the same order as for parameter "gbox".
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - Each returned plot has 3 Frames: Frame 1 is the base (GRAPHICS)
-* Frame; Frame 2 is spanned by 2 of the 3 axes in the base Frame of
-* the supplied FrameSet; Frame 3 is the current Frame and is spanned
-* by 2 of the 3 axes in the current Frame of the supplied FrameSet.
-* Any future changes to this function that alter this structure should
-* reflected in equivalent changes to function UpdatePlots.
-
-*/
-
-/* Local Variables: */
- AstFrameSet *fsetxy;
- AstFrameSet *fsetxz;
- AstFrameSet *fsetyz;
- double basebox2d[ 4 ];
- float graphbox2d[ 4 ];
- int baseplane;
- int labelxy[ 2 ];
- int labelxz[ 2 ];
- int labelyz[ 2 ];
- int wcsxy[ 2 ];
- int wcsxz[ 2 ];
- int wcsyz[ 2 ];
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* Split the supplied FrameSet up into 3 FrameSets, each with a 2D base
- and current Frame. Each of these FrameSets describes one plane of
- the 3D cube. One of them will be spanned by two axes picked from the
- supplied 3D FrameSet. The other two FrameSets will each include a copy
- of the remaining 3rd axis from the supplied FrameSet, plus an extra
- dummy axis. These dummy axes will never be labelled. */
- SplitFrameSet( fset, &fsetxy, labelxy, wcsxy, &fsetxz, labelxz, wcsxz,
- &fsetyz, labelyz, wcsyz, &baseplane, status );
-
-/* If OK, annul any existing 2D plots. */
- if( astOK ) {
- if( this->plotxy ) this->plotxy = astAnnul( this->plotxy );
- if( this->plotxz ) this->plotxz = astAnnul( this->plotxz );
- if( this->plotyz ) this->plotyz = astAnnul( this->plotyz );
-
-/* Create three Plots; one for each 2D plane in the graphics plotting
- space. Set the attributes of these plots so that the required axes are
- labelled and other axes are left blank. The "graphbox2d" and "basebox2d"
- values used to create each Plot define the sense, as well as the extent,
- of each axis. The first pair of values in each give the lower left corner
- of the Plot and the second pair give the top right corner. We want each
- Plot to have X increasing left to right and Y increasing bottom to
- top when viewed from the outside of the cube. We assume an initial
- RootCorner value of "LLL" (that is, the Plots are pasted onto the cube
- faces that meet at the lower limit on every axis). */
- graphbox2d[ 0 ] = gbox[ 3 ];
- graphbox2d[ 1 ] = gbox[ 1 ];
- graphbox2d[ 2 ] = gbox[ 0 ];
- graphbox2d[ 3 ] = gbox[ 4 ];
-
- basebox2d[ 0 ] = bbox[ 3 ];
- basebox2d[ 1 ] = bbox[ 1 ];
- basebox2d[ 2 ] = bbox[ 0 ];
- basebox2d[ 3 ] = bbox[ 4 ];
-
- if( this->plotxy ) this->plotxy = astAnnul( this->plotxy );
- this->plotxy = astPlot( fsetxy, graphbox2d, basebox2d, "", status );
- SetPlotAttr( this->plotxy, XY, labelxy, status );
-
- graphbox2d[ 0 ] = gbox[ 0 ];
- graphbox2d[ 1 ] = gbox[ 2 ];
- graphbox2d[ 2 ] = gbox[ 3 ];
- graphbox2d[ 3 ] = gbox[ 5 ];
-
- basebox2d[ 0 ] = bbox[ 0 ];
- basebox2d[ 1 ] = bbox[ 2 ];
- basebox2d[ 2 ] = bbox[ 3 ];
- basebox2d[ 3 ] = bbox[ 5 ];
-
- this->plotxz = astPlot( fsetxz, graphbox2d, basebox2d, "", status );
- SetPlotAttr( this->plotxz, XZ, labelxz, status );
-
- graphbox2d[ 0 ] = gbox[ 4 ];
- graphbox2d[ 1 ] = gbox[ 2 ];
- graphbox2d[ 2 ] = gbox[ 1 ];
- graphbox2d[ 3 ] = gbox[ 5 ];
-
- basebox2d[ 0 ] = bbox[ 4 ];
- basebox2d[ 1 ] = bbox[ 2 ];
- basebox2d[ 2 ] = bbox[ 1 ];
- basebox2d[ 3 ] = bbox[ 5 ];
-
- this->plotyz = astPlot( fsetyz, graphbox2d, basebox2d, "", status );
- SetPlotAttr( this->plotyz, YZ, labelyz, status );
-
-/* Store information that allows each 3D WCS axis to be associatedf with
- a pair of Plots. Also store the WCS axis within each Plot that
- corresponds to the 3D WCS axis. */
- StoreAxisInfo( this, labelxy, wcsxy, labelxz, wcsxz, labelyz, wcsyz, status );
-
-/* Store the Plot that spans two connected 3D axes. */
- this->baseplot = baseplane;
-
-/* Free resources */
- fsetxy = astAnnul( fsetxy );
- fsetxz = astAnnul( fsetxz );
- fsetyz = astAnnul( fsetyz );
-
- }
-}
-
-static int Element2D( AstPlot3D *this, int element, int *elem2d1,
- int *elem2d2, int *status ){
-/*
-* Name:
-* Element2D
-
-* Purpose:
-* Convert a 3D graphics element identifier to a corresponding pair of
-* 2D identifiers.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* int Element2D( AstPlot3D *this, int element, int *elem2d1,
-* int *elem2d2, int *status )
-
-* Class Membership:
-* Plot3D method.
-
-* Description:
-* This function takes an integer identifier for an element of a 3D
-* annotated grid (e.g. ticks, axis 1 labels, border, etc), and returns
-* a element identifers that can be used with the encapsualted 2D Plots.
-
-* Parameters:
-* this
-* Pointer to the Plot2D structure.
-* element
-* The 3D element identifier to convert.
-* elem2d1
-* Pointer to an int in which to return the 2D element identifier
-* to use with the first of the two Plots that span the axis to
-* which the 3D element identifier refers. Returned holding 0 if
-* the given 3D element identifier is not axis specific.
-* elem2d2
-* Pointer to an int in which to return the 2D element identifier
-* to use with the second of the two Plots that span the axis to
-* which the 3D element identifier refers. Returned holding 0 if
-* the given 3D element identifier is not axis specific.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The zero-based index of the 3D axis to which the given element
-* identifier refers, or -1 if the element identifier is not axis
-* specific.
-
-*/
-
-/* Local Variables: */
- int axis3d;
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Get the zero-based index of the 3D axis to which the supplied element
- refers. Use an index of -1 to indicate that the element does not
- relate to a specific axis. Also get the corresponding element to use
- with the two Plots that share the speified 3D axis. */
-
-/* Define a macro used to set the 2d element identifiers for a given 3d
- element identifier. */
-
-#define SET_ELEM2D(id1,id2) \
- *elem2d1 = this->axis_index1[ axis3d ] ? id2 : id1; \
- *elem2d2 = this->axis_index2[ axis3d ] ? id2 : id1;
-
- if( element == AST__BORDER_ID ){
- axis3d = -1;
-
- } else if( element == AST__CURVE_ID ){
- axis3d = -1;
-
- } else if( element == AST__TITLE_ID ){
- axis3d = -1;
-
- } else if( element == AST__MARKS_ID ){
- axis3d = -1;
-
- } else if( element == AST__TEXT_ID ){
- axis3d = -1;
-
- } else if( element == AST__AXIS1_ID ){
- axis3d = 0;
- SET_ELEM2D(AST__AXIS1_ID,AST__AXIS2_ID)
-
- } else if( element == AST__AXIS2_ID ){
- axis3d = 1;
- SET_ELEM2D(AST__AXIS1_ID,AST__AXIS2_ID)
-
- } else if( element == AST__AXIS3_ID ){
- axis3d = 2;
- SET_ELEM2D(AST__AXIS1_ID,AST__AXIS2_ID)
-
- } else if( element == AST__NUMLAB1_ID ){
- axis3d = 0;
- SET_ELEM2D(AST__NUMLAB1_ID,AST__NUMLAB2_ID)
-
- } else if( element == AST__NUMLAB2_ID ){
- axis3d = 1;
- SET_ELEM2D(AST__NUMLAB1_ID,AST__NUMLAB2_ID)
-
- } else if( element == AST__NUMLAB3_ID ){
- axis3d = 2;
- SET_ELEM2D(AST__NUMLAB1_ID,AST__NUMLAB2_ID)
-
- } else if( element == AST__TEXTLAB1_ID ){
- axis3d = 0;
- SET_ELEM2D(AST__TEXTLAB1_ID,AST__TEXTLAB2_ID)
-
- } else if( element == AST__TEXTLAB2_ID ){
- axis3d = 1;
- SET_ELEM2D(AST__TEXTLAB1_ID,AST__TEXTLAB2_ID)
-
- } else if( element == AST__TEXTLAB3_ID ){
- axis3d = 2;
- SET_ELEM2D(AST__TEXTLAB1_ID,AST__TEXTLAB2_ID)
-
- } else if( element == AST__TICKS1_ID ){
- axis3d = 0;
- SET_ELEM2D(AST__TICKS1_ID,AST__TICKS2_ID)
-
- } else if( element == AST__TICKS2_ID ){
- axis3d = 1;
- SET_ELEM2D(AST__TICKS1_ID,AST__TICKS2_ID)
-
- } else if( element == AST__TICKS3_ID ){
- axis3d = 2;
- SET_ELEM2D(AST__TICKS1_ID,AST__TICKS2_ID)
-
- } else if( element == AST__GRIDLINE1_ID ){
- axis3d = 0;
- SET_ELEM2D(AST__GRIDLINE1_ID,AST__GRIDLINE2_ID)
-
- } else if( element == AST__GRIDLINE2_ID ){
- axis3d = 1;
- SET_ELEM2D(AST__GRIDLINE1_ID,AST__GRIDLINE2_ID)
-
- } else if( element == AST__GRIDLINE3_ID ){
- axis3d = 2;
- SET_ELEM2D(AST__GRIDLINE1_ID,AST__GRIDLINE2_ID)
-
- } else {
- axis3d = 0;
- astError( AST__INTER, "Element2D(Plot3D): The MAKE_CLEAR2 macro "
- "does not yet support element index %d (internal "
- "AST programming error).", status, element );
- }
-
-#undef SET_ELEM2D
-
- return axis3d;
-
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two Plot3Ds are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* Plot3D member function (over-rides the astEqual protected
-* method inherited from the Plot Object class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two Plot3Ds are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Plot3D.
-* that
-* Pointer to the second Plot3D.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the Plot3Ds are equivalent, zero otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstPlot3D *that; /* Pointer to the second Plot3D structure */
- AstPlot3D *this; /* Pointer to the first Plot3D structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Invoke the Equal method inherited from the parent Plot class. This checks
- that the Plots are both of the same class (amongst other things). */
- if( (*parent_equal)( this_object, that_object, status ) ) {
-
-/* Obtain pointers to the two Plot3D structures. */
- this = (AstPlot3D *) this_object;
- that = (AstPlot3D *) that_object;
-
-/* Check the encapsulated Plots for equality. */
- result = ( astEqual( this->plotxz, that->plotxz ) &&
- astEqual( this->plotyz, that->plotyz ) &&
- astEqual( this->plotxy, that->plotxy ) );
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static AstPointSet *ExtendTicks( AstPlot *plot, AstPointSet *ticks, int *status ){
-/*
-* Name:
-* ExtendTicks
-
-* Purpose:
-* Add an extra tick to the start and end of a list of tick marks.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* AstPointSet *ExtendTicks( AstPlot *plot, AstPointSet *ticks, int *status )
-
-* Class Membership:
-* Plot3D method.
-
-* Description:
-* This function takes a list of tick marks drawn using the supplied
-* Plot, and adds in an extra tick mark at the start and end of the
-* supplied list of ticks, returning the expanded list in a new
-* PointSet. The extra points are guaranteed to fall outside the area
-* enclosed within the supplied Plot.
-
-* Parameters:
-* plot
-* The Plot that was used to generate the list of tick marks.
-* ticks
-* A PointSet holding the 2D graphics coordinates (within the base
-* Frame of the supplied Plot) at which each tick mark starts.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a new PointSet that has 2 more entries than the
-* supplied PointSet. The first point is a new tick mark, then comes
-* all the ticks mark positions supplied in "ticks", and finally there
-* is another new tick mark.
-
-*/
-
-/* Local Variables: */
- AstPointSet *result;
- double **ptr_in;
- double **ptr_out;
- double *a_in;
- double *a_out;
- double *b_in;
- double *b_out;
- double *p;
- double delta;
- double hi;
- double lo;
- double range[ 2 ];
- double v;
- int axis;
- int i;
- int increasing;
- int np;
-
-/* Check inherited status */
- if( !astOK || !ticks ) return NULL;
-
-/* Get the number of tick marsk in the supplied PointSet and get pointers
- to the 3D Graphics values contained in the PointSet. */
- np = astGetNpoint( ticks );
- ptr_in = astGetPoints( ticks );
-
-/* Create the returned PointSet with room for an extra pair of ticks. Get
- pointers to its data arrays */
- result = astPointSet( np + 2, 2, "", status );
- ptr_out = astGetPoints( result );
-
-/* Check the pointers can be used safely. */
- if( astOK ) {
-
-/* Find the index of the 2D graphics axis (0 or 1) that varies along the
- set of tick marks. We do this by finding the max and min value
- supplied for each axis, and then choosing the axis that has the highest
- range. */
- for( axis = 0; axis < 2; axis++ ) {
- hi = -DBL_MAX;
- lo = DBL_MAX;
- p = ptr_in[ axis ];
-
- for( i = 0; i < np; i++, p++ ) {
- v = *p;
- if( v != AST__BAD ) {
- if( v > hi ) hi = v;
- if( v < lo ) lo = v;
- }
- }
-
- if( lo != DBL_MAX ) {
- range[ axis ] = hi - lo;
- } else {
- astError( AST__INTER, "ExtendTicks{Plot3D): no good ticks on "
- "axis %d (internal AST prgramming error).", status, axis );
- }
- }
-
-
-/* Get the index of the axis with the largest range (the other range
- should be zero). */
- axis = ( range[ 0 ] > range[ 1 ] ) ? 0 : 1;
-
-/* Copy the input graphics positions to the output PointSet, and add an
- extra position at the beginning and end of the output PointSet. */
- if( axis == 0 ) {
- lo = plot->xlo;
- hi = plot->xhi;
- a_in = ptr_in[ 0 ];
- b_in = ptr_in[ 1 ];
- a_out = ptr_out[ 0 ];
- b_out = ptr_out[ 1 ];
-
- } else {
- lo = plot->ylo;
- hi = plot->yhi;
- a_in = ptr_in[ 1 ];
- b_in = ptr_in[ 0 ];
- a_out = ptr_out[ 1 ];
- b_out = ptr_out[ 0 ];
- }
-
- delta = 0.2*( hi - lo );
-
- if( a_in[ 0 ] < a_in[ 1 ] ) {
- increasing = 1;
- *(a_out++) = lo - delta;
- } else {
- increasing = 0;
- *(a_out++) = hi + delta;
- }
-
- *(b_out++) = *b_in;
- for( i = 0; i < np; i++ ) {
- *(a_out++) = *(a_in++);
- *(b_out++) = *(b_in++);
- }
- *(b_out++) = b_in[ -1 ];
-
-
- if( increasing ) {
- *(a_out++) = hi + delta;
- } else {
- *(a_out++) = lo - delta;
- }
- }
-
-/* Return the extended PointSet. */
- return result;
-}
-
-static AstFrameSet *Fset3D( AstFrameSet *fset, int ifrm, int *status ) {
-/*
-* Name:
-* Fset3D
-
-* Purpose:
-* Create a FrameSet with no more than 3 dimensions for a given Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* AstFrameSet *Fset3D( AstFrameSet *fset, int ifrm, int *status )
-
-* Class Membership:
-* Plot3D method.
-
-* Description:
-* This function checks a specified Frame in the supplied FrameSet.
-* If the Frame has more than 3 dimensions, a new Frame is added to
-* the FrameSet containing just the first three axes of the specified
-* Frame. A PermMap is used to connect this Frame to the specified
-* Frame, which supplied bad values for any missing axes. If the
-* specified Frame is the base Frame in the supplied FrameSet, then the
-* new Frame becomes the base Frame in the returned FrameSet. Like-wise,
-* if the specified Frame is the current Frame, then the new Frame
-* will be the current Frame in the returned FrameSet.
-*
-* If the specified Frame does not have more than 3 axes, then a clone
-* of the FrameSet pointer is returned, otherwise the returned pointer
-* points to a copy of the supplied FrameSet with the new 3-D Frame
-* added.
-
-* Parameters:
-* fset
-* Pointer to the FrameSet.
-* ifrm
-* The index of the Frame to check. This should be AST__BASE or
-* AST_CURRENT.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a FrameSet in which the Frame with index given by ifrm
-* has no more than 3 axes.
-*/
-
-/* Local Variables: */
- AstFrame *frm;
- AstFrame *newfrm;
- AstFrameSet *ret;
- AstPermMap *map;
- double zero;
- int *inperm;
- int axes[3];
- int i;
- int ic;
- int nax;
-
-/* Check the inherited status. */
- if( !astOK ) return NULL;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- map = NULL;
-
-/* Get a pointer to the requested Frame in the supplied FrameSet. */
- frm = astGetFrame( fset, ifrm );
-
-/* See how many dimensions the specified Frame of the supplied FrameSet
- has. */
- nax = astGetNaxes( frm );
-
-/* If it is more than 3-dimensionbal, create a 3D Frame by picking
- axes 1, 2 and 3 from the original Frame. */
- if( nax > 3 ) {
- axes[ 0 ] = 0;
- axes[ 1 ] = 1;
- axes[ 2 ] = 2;
- newfrm = astPickAxes( frm, 3, axes, NULL );
-
-/* Create a PermMap to describe the mapping between the two Frames.
- Use zero as the value for unknown axes (the optional mapping which
- can be returned by astPickAxes uses AST__BAD for unknown axes). */
- inperm = (int *) astMalloc( sizeof(int)*(size_t) nax );
- if( astOK ){
- inperm[ 0 ] = 0;
- inperm[ 1 ] = 1;
- inperm[ 2 ] = 2;
- for( i = 3; i < nax; i++ ) inperm[ i ] = -1;
- zero = 0.0;
- map = astPermMap( nax, inperm, 3, axes, &zero, "", status );
- inperm = (int *) astFree( (void *) inperm );
- }
-
-/* Get a copy of the supplied FrameSet. */
- ret = astCopy( fset );
-
-/* Add the new Frame to the FrameSet (it becomes the current Frame). */
- ic = astGetCurrent( ret );
- astAddFrame( ret, ifrm, map, newfrm );
- newfrm = astAnnul( newfrm );
-
-/* If the new Frame was derived from the base frame, set the new base
- Frame, and re-instate the original current Frame */
- if( ifrm == AST__BASE ){
- astSetBase( ret, astGetCurrent( ret ) );
- astSetCurrent( ret, ic );
- }
-
-/* If the specified Frame in the supplied FrameSet is 3-dimensional, just
- return a clone of it. */
- } else {
- ret = astClone( fset );
- }
-
-/* Annul the pointer to the original Frame. */
- frm = astAnnul( frm );
-
- return ret;
-
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a Plot3D.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Plot3D member function (over-rides the protected astGetAttrib
-* method inherited from the FrameSet class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a Plot3D, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the Plot3D.
-* attrib
-* Pointer to a null terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the Plot3D, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the Plot3D. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstPlot3D *this; /* Pointer to the Plot3D structure */
- const char *result; /* Pointer value to return */
- double dval; /* Floating point attribute value */
- int axis; /* Axis index */
- int ival; /* Int attribute value */
- int len; /* Length of attrib string */
- int nc; /* Number of character read */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the Plot3D structure. */
- this = (AstPlot3D *) this_object;
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null terminated string in an appropriate
- format. Set "result" to point at the result string. */
-
-/* Norm(axis). */
-/* ----------- */
- if ( nc = 0,
- ( 1 == astSscanf( attrib, "norm(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- dval = astGetNorm( this, axis - 1 );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* RootCorner. */
-/* ----------- */
- } else if ( !strcmp( attrib, "rootcorner" ) ) {
- ival = astGetRootCorner( this );
- result = RootCornerString( ival, status );
- if( !result && astOK ) {
- astError( AST__INTER, "astGetAttrib(Plot3D): Illegal value %d "
- "for RootCorner attribute (internal AST programming "
- "error).", status, ival );
- }
-
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* Plot3D member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied Plot3D,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the Plot3D.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstPlot3D *this; /* Pointer to Plot3D structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the Plot3D structure. */
- this = (AstPlot3D *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by this class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
-
- result += astGetObjSize( this->plotxy );
- result += astGetObjSize( this->plotxz );
- result += astGetObjSize( this->plotyz );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static void Grid( AstPlot *this_plot, int *status ) {
-/*
-* Name:
-* Grid
-
-* Purpose:
-* Draw a set of labelled coordinate axes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* void Grid( AstPlot *this, int *status )
-
-* Class Membership:
-* Plot member function (over-rides the astGrid method inherited from
-* the Plot class).
-
-* Description:
-* This function draws a complete annotated set of 3-dimensional
-* coordinate axes for a Plot3D with (optionally) a coordinate grid
-* superimposed.
-
-* Parameters:
-* this
-* Pointer to the Plot3D.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstPlot *baseplot;
- AstPlot *plot;
- AstPlot3D *this;
- AstPointSet *majticks;
- AstPointSet *minticks;
- AstPointSet *tmp;
- AstPointSet *wcsmajticks;
- AstPointSet *wcsminticks;
- const char *edge;
- double **ptrmin;
- double **ptrmaj;
- double gcon;
- int base_wax2d;
- int itick;
- int new_gaxis;
- int new_plot;
- int new_wax2d;
- int nmaj;
- int nmin;
- int perm[ 2 ];
- int rootcorner;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Plot3D structure. */
- this = (AstPlot3D *) this_plot;
-
-/* Invoke the astGrid method on the 2D base Plot. Both WCS axes in this
- Plot are inherited from the 3D FrameSet that was supplied when the Plot3D
- was constructed, and will be labelled. The other two Plots encapsulated
- in the Plot3D only inherit a single axis from the original 3D FrameSet
- (a dummy axis is used for the second WCS axis in these Plots). */
- baseplot = GET_PLOT( this->baseplot );
- astGrid( baseplot );
-
-/* We next use astGrid to draw a grid on the 2D plane that shares the first
- base plot graphics axis. Get the identifier for this Plot and the 2D
- graphics axis index within the Plot that corresponds to the first base
- plot graphics axis. Also get the constant value on the 3rd graphics
- axis over the base plot */
- rootcorner = astGetRootCorner( this );
- if( this->baseplot == XY ) {
- new_plot = XZ;
- new_gaxis = 0;
- gcon = this->gbox[ ( rootcorner & 4 ) ? 5 : 2 ];
-
- } else if( this->baseplot == XZ ) {
- new_plot = XY;
- new_gaxis = 0;
- gcon = this->gbox[ ( rootcorner & 2 ) ? 4 : 1 ];
-
- } else {
- new_plot = XY;
- new_gaxis = 1;
- gcon = this->gbox[ ( rootcorner & 1 ) ? 3 : 0 ];
- }
-
-/* Get a pointer to the Plot upon which astGrid is about to be invoked. */
- plot = GET_PLOT( new_plot );
-
-/* Find which 2D WCS axis was labelled on graphics axis 0 (the bottom or
- top edge) of the base plot. */
- if( ( edge = astGetC( baseplot, "Edge(1)" ) ) ) {
- base_wax2d = ( !strcmp( edge, "bottom" ) || !strcmp( edge, "top" ) ) ? 0 : 1;
- } else {
- base_wax2d = 0;
- }
-
-/* Get the 2D graphics coords within the base Plot at which the tick
- marks were drawn for this 2D WCS axis. Extend the PointSets holding
- the major tick values to include an extra tick above and below the
- ticks drawn by astGrid. These extra ticks are placed outside the
- bounds of the plot. This ensures that the curves on the other axis
- extend the full width of the plot. */
- tmp = astGetDrawnTicks( baseplot, base_wax2d, 1 );
- majticks = ExtendTicks( baseplot, tmp, status );
- nmaj = astGetNpoint( majticks );
- ptrmaj = astGetPoints( majticks );
-
- if( tmp ) tmp = astAnnul( tmp );
- minticks = astGetDrawnTicks( baseplot, base_wax2d, 0 );
- nmin = astGetNpoint( minticks );
- ptrmin = astGetPoints( minticks );
-
-/* All the tick marks will have a constant value for the 2D graphics axis
- that is not being ticked (axis 1 at the moment). Change this constant
- value to be the value appropriate to the new Plot. */
- if( ptrmaj && ptrmin ) {
- for( itick = 0; itick < nmaj; itick++ ) ptrmaj[ 1 ][ itick ] = gcon;
- for( itick = 0; itick < nmin; itick++ ) ptrmin[ 1 ][ itick ] = gcon;
- }
-
-/* If required, permute the axes in the tick mark positions. */
- if( new_gaxis != 0 ) {
- perm[ 0 ] = 1;
- perm[ 1 ] = 0;
- astPermPoints( majticks, 1, perm );
- astPermPoints( minticks, 1, perm );
- }
-
-/* Transform the tick mark positions from 2D graphics coords to 2D WCS
- coords. */
- wcsmajticks = astTransform( plot, majticks, 1, NULL );
- wcsminticks = astTransform( plot, minticks, 1, NULL );
-
-/* Find the index of the 2D WCS axis that will be labelled on the bottom
- or top edge (i.e. 2D graphics axis zero) of the new Plot. */
- if( ( edge = astGetC( plot, "Edge(1)" ) ) ) {
- new_wax2d = ( !strcmp( edge, "bottom" ) || !strcmp( edge, "top" ) ) ? 0 : 1;
- } else {
- new_wax2d = 0;
- }
-
-/* Use the other WCS axis if we are ticking the left or right edge (i.e.
- 2D graphics axis one) of the new Plot. This gives us the index of the
- 2D WCS axis for which tick values are to be stored in the Plot. */
- if( new_gaxis == 1 ) new_wax2d = 1 - new_wax2d;
-
-/* Store the tick mark values to be used on this WCS axis. */
- ptrmaj = astGetPoints( wcsmajticks );
- ptrmin = astGetPoints( wcsminticks );
- if( ptrmaj && ptrmin ) {
- astSetTickValues( plot, new_wax2d, nmaj, ptrmaj[ new_gaxis ],
- nmin, ptrmin[ new_gaxis ] );
- }
-
-/* Invoke the astGrid method on this plot. */
- astGrid( plot );
-
-/* Clear the stored tick values in the plot. */
- astSetTickValues( plot, new_wax2d, 0, NULL, 0, NULL );
-
-/* Free resources */
- if( wcsmajticks ) wcsmajticks = astAnnul( wcsmajticks );
- if( wcsminticks ) wcsminticks = astAnnul( wcsminticks );
- if( majticks ) majticks = astAnnul( majticks );
- if( minticks ) minticks = astAnnul( minticks );
-
-/* We next use astGrid to draw a grid on the 2D plane that shares the
- second base plot graphics axis. Get the identifier for this Plot and the
- 2D graphics axis index within the Plot that corresponds to the first
- base plot graphics axis. */
- if( this->baseplot == XY ) {
- new_plot = YZ;
- new_gaxis = 0;
-
- } else if( this->baseplot == XZ ) {
- new_plot = YZ;
- new_gaxis = 1;
-
- } else {
- new_plot = XZ;
- new_gaxis = 1;
- }
-
-/* Get a pointer to the Plot upon which astGrid is about to be invoked. */
- plot = GET_PLOT( new_plot );
-
-/* Find which 2D WCS axis was labelled on graphics axis 1 (the left or
- right edge) of the base plot. */
- base_wax2d = 1 - base_wax2d;
-
-/* Get the 2D graphics coords within the base Plot at which the tick
- marks were drawn for this 2D WCS axis. Extend the PointSets holding
- the major tick values to include an extra tick above and below the
- ticks drawn by astGrid. These extra ticks are placed outside the
- bounds of the plot. This ensures that the curves on the other axis
- extend the full width of the plot. */
- tmp = astGetDrawnTicks( baseplot, base_wax2d, 1 );
- majticks = ExtendTicks( baseplot, tmp, status );
- nmaj = astGetNpoint( majticks );
- ptrmaj = astGetPoints( majticks );
-
- if( tmp ) tmp = astAnnul( tmp );
- minticks = astGetDrawnTicks( baseplot, base_wax2d, 0 );
- nmin = astGetNpoint( minticks );
- ptrmin = astGetPoints( minticks );
-
-/* All the tick marks will have a constant value for the 2D graphics axis
- that is not being ticked (axis 0 at the moment). Change this constant
- value to be the value appropriate to the new Plot. */
- if( ptrmaj && ptrmin ) {
- for( itick = 0; itick < nmaj; itick++ ) ptrmaj[ 0 ][ itick ] = gcon;
- for( itick = 0; itick < nmin; itick++ ) ptrmin[ 0 ][ itick ] = gcon;
- }
-
-/* If required, permute the axes in the tick mark positions. */
- if( new_gaxis != 1 ) {
- perm[ 0 ] = 1;
- perm[ 1 ] = 0;
- astPermPoints( majticks, 1, perm );
- astPermPoints( minticks, 1, perm );
- }
-
-/* Transform the tick mark positions from 2D graphics coords to 2D WCS
- coords. */
- wcsmajticks = astTransform( plot, majticks, 1, NULL );
- wcsminticks = astTransform( plot, minticks, 1, NULL );
-
-/* Find the index of the 2D WCS axis that will be labelled on the bottom
- or top edge (i.e. 2D graphics axis zero) of the new Plot. */
- if( ( edge = astGetC( plot, "Edge(1)" ) ) ) {
- new_wax2d = ( !strcmp( edge, "bottom" ) || !strcmp( edge, "top" ) ) ? 0 : 1;
- } else {
- new_wax2d = 0;
- }
-
-/* Use the other WCS axis if we are ticking the left or right edge (i.e.
- 2D graphics axis one) of the new Plot. This gives us the index of the
- 2D WCS axis for which tick values are to be stored in the Plot. */
- if( new_gaxis == 1 ) new_wax2d = 1 - new_wax2d;
-
-/* Store the tick mark values to be used on this WCS axis. */
- ptrmaj = astGetPoints( wcsmajticks );
- ptrmin = astGetPoints( wcsminticks );
- if( ptrmaj && ptrmin ) {
- astSetTickValues( plot, new_wax2d, nmaj, ptrmaj[ new_gaxis ],
- nmin, ptrmin[ new_gaxis ] );
- }
-
-/* Invoke the astGrid method on this plot. */
- astGrid( plot );
-
-/* Clear the stored tick values in the plot. */
- astSetTickValues( plot, new_wax2d, 0, NULL, 0, NULL );
-
-/* Free resources */
- if( wcsmajticks ) wcsmajticks = astAnnul( wcsmajticks );
- if( wcsminticks ) wcsminticks = astAnnul( wcsminticks );
- if( majticks ) majticks = astAnnul( majticks );
- if( minticks ) minticks = astAnnul( minticks );
-
-}
-
-void astInitPlot3DVtab_( AstPlot3DVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitPlot3DVtab
-
-* Purpose:
-* Initialise a virtual function table for a Plot3D.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "plot3d.h"
-* void astInitPlot3DVtab( AstPlot3DVtab *vtab, const char *name )
-
-* Class Membership:
-* Plot3D vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the Plot3D class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *dummy_frame; /* The Frame to put in dummy_frameset */
- AstPlotVtab *plot; /* Pointer to Plot component of Vtab */
- AstFrameSetVtab *fset; /* Pointer to FrameSet component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitPlotVtab( (AstPlotVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAPlot3D) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstPlotVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
-
-#define SET_PLOT3D_ACCESSORS(attr) \
- vtab->Set##attr = Set##attr; \
- vtab->Get##attr = Get##attr; \
- vtab->Test##attr = Test##attr; \
- vtab->Clear##attr = Clear##attr;
-
-SET_PLOT3D_ACCESSORS(RootCorner)
-SET_PLOT3D_ACCESSORS(Norm)
-
-#undef SET_PLOT3D_ACCESSORS
-
-
-
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- fset = (AstFrameSetVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
- plot = (AstPlotVtab *) vtab;
-
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
- parent_equal = object->Equal;
- object->Equal = Equal;
-
- parent_vset = object->VSet;
- object->VSet = VSet;
-
- parent_cast = object->Cast;
- object->Cast = Cast;
-
- parent_clear = object->Clear;
- object->Clear = Clear;
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
-
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
-
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
-
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
- parent_clearcurrent = fset->ClearCurrent;
- fset->ClearCurrent = ClearCurrent;
-
- parent_setcurrent = fset->SetCurrent;
- fset->SetCurrent = SetCurrent;
-
- parent_removeframe = fset->RemoveFrame;
- fset->RemoveFrame = RemoveFrame;
-
-#if defined(THREAD_SAFE)
- parent_managelock = object->ManageLock;
- object->ManageLock = ManageLock;
-#endif
-
-/* Define a macro to override attribute accessors inherited from the
- parent Plot class. First do axis specific attributes. */
-
-#define SET_PLOT_ACCESSORS(attr) \
- parent_get##attr = plot->Get##attr; \
- plot->Get##attr = Get##attr; \
- parent_set##attr = plot->Set##attr; \
- plot->Set##attr = Set##attr; \
- parent_clear##attr = plot->Clear##attr; \
- plot->Clear##attr = Clear##attr;
-
-/* Use the above macro to override all the inherited attribute accessors. */
-SET_PLOT_ACCESSORS(MinTick)
-SET_PLOT_ACCESSORS(Abbrev)
-SET_PLOT_ACCESSORS(Gap)
-SET_PLOT_ACCESSORS(LogGap)
-SET_PLOT_ACCESSORS(LogPlot)
-SET_PLOT_ACCESSORS(LogTicks)
-SET_PLOT_ACCESSORS(LogLabel)
-SET_PLOT_ACCESSORS(LabelUp)
-SET_PLOT_ACCESSORS(DrawAxes)
-SET_PLOT_ACCESSORS(LabelUnits)
-SET_PLOT_ACCESSORS(MinTickLen)
-SET_PLOT_ACCESSORS(MajTickLen)
-SET_PLOT_ACCESSORS(NumLab)
-SET_PLOT_ACCESSORS(NumLabGap)
-SET_PLOT_ACCESSORS(TextLab)
-SET_PLOT_ACCESSORS(TextLabGap)
-
-#undef SET_PLOT_ACCESSORS
-
-
-/* Now do attributes that are not axis specific. */
-
-#define SET_PLOT_ACCESSORS(attr) \
- parent_set##attr = plot->Set##attr; \
- plot->Set##attr = Set##attr; \
- parent_clear##attr = plot->Clear##attr; \
- plot->Clear##attr = Clear##attr;
-
-SET_PLOT_ACCESSORS(Ink)
-SET_PLOT_ACCESSORS(Tol)
-SET_PLOT_ACCESSORS(Invisible)
-SET_PLOT_ACCESSORS(TickAll)
-SET_PLOT_ACCESSORS(ForceExterior)
-SET_PLOT_ACCESSORS(Border)
-SET_PLOT_ACCESSORS(Clip)
-SET_PLOT_ACCESSORS(ClipOp)
-SET_PLOT_ACCESSORS(Escape)
-SET_PLOT_ACCESSORS(Grid)
-SET_PLOT_ACCESSORS(Labelling)
-SET_PLOT_ACCESSORS(Style)
-SET_PLOT_ACCESSORS(Font)
-SET_PLOT_ACCESSORS(Colour)
-SET_PLOT_ACCESSORS(Width)
-SET_PLOT_ACCESSORS(Size)
-
-#undef SET_PLOT_ACCESSORS
-
-
-/* Store replacement pointers for methods which will be over-ridden by new
- member functions implemented here. */
- plot->Grid = Grid;
- plot->Text = Text;
- plot->SetTickValues = SetTickValues;
- plot->PolyCurve = PolyCurve;
- plot->Border = Border;
- plot->BoundingBox = BoundingBox;
- plot->GetGrfContext = GetGrfContext;
- plot->GrfPop = GrfPop;
- plot->GrfPush = GrfPush;
- plot->GrfSet = GrfSet;
- plot->GridLine = GridLine;
- plot->Mark = Mark;
- plot->Curve = Curve;
- plot->GenCurve = GenCurve;
- plot->Clip = Clip;
- mapping->Transform = Transform;
-
-/* Declare the copy constructor, destructor and class dump
- function. */
- astSetCopy( vtab, Copy );
- astSetDelete( vtab, Delete );
- astSetDump( vtab, Dump, "Plot3D", "Provide facilities for 3D graphical output" );
-
-/* Create a FrameSet that can be used when calling astCast to indicate
- the class to which we want to cast. */
- LOCK_MUTEX3
- if( !dummy_frameset ) {
- dummy_frame = astFrame( 1, " ", status );
- dummy_frameset = astFrameSet( dummy_frame, " ", status );
- dummy_frame = astAnnul( dummy_frame );
- }
- UNLOCK_MUTEX3
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra,
- AstObject **fail, int *status ) {
-/*
-* Name:
-* ManageLock
-
-* Purpose:
-* Manage the thread lock on an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *ManageLock( AstObject *this, int mode, int extra,
-* AstObject **fail, int *status )
-
-* Class Membership:
-* CmpMap member function (over-rides the astManageLock protected
-* method inherited from the parent class).
-
-* Description:
-* This function manages the thread lock on the supplied Object. The
-* lock can be locked, unlocked or checked by this function as
-* deteremined by parameter "mode". See astLock for details of the way
-* these locks are used.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* mode
-* An integer flag indicating what the function should do:
-*
-* AST__LOCK: Lock the Object for exclusive use by the calling
-* thread. The "extra" value indicates what should be done if the
-* Object is already locked (wait or report an error - see astLock).
-*
-* AST__UNLOCK: Unlock the Object for use by other threads.
-*
-* AST__CHECKLOCK: Check that the object is locked for use by the
-* calling thread (report an error if not).
-* extra
-* Extra mode-specific information.
-* fail
-* If a non-zero function value is returned, a pointer to the
-* Object that caused the failure is returned at "*fail". This may
-* be "this" or it may be an Object contained within "this". Note,
-* the Object's reference count is not incremented, and so the
-* returned pointer should not be annulled. A NULL pointer is
-* returned if this function returns a value of zero.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A local status value:
-* 0 - Success
-* 1 - Could not lock or unlock the object because it was already
-* locked by another thread.
-* 2 - Failed to lock a POSIX mutex
-* 3 - Failed to unlock a POSIX mutex
-* 4 - Bad "mode" value supplied.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-*/
-
-/* Local Variables: */
- AstPlot3D *this; /* Pointer to Plot3D structure */
- int result; /* Returned status value */
-
-/* Initialise */
- result = 0;
-
-/* Check the supplied pointer is not NULL. */
- if( !this_object ) return result;
-
-/* Obtain a pointers to the Plot3D structure. */
- this = (AstPlot3D *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
- if( !result ) result = (*parent_managelock)( this_object, mode, extra,
- fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
- the supplied Object. */
- if( !result ) result = astManageLock( this->plotxy, mode, extra, fail );
- if( !result ) result = astManageLock( this->plotxz, mode, extra, fail );
- if( !result ) result = astManageLock( this->plotyz, mode, extra, fail );
-
- return result;
-
-}
-#endif
-
-static void Mark( AstPlot *this_plot, int nmark, int ncoord, int indim,
- const double *in, int type, int *status ){
-/*
-* Name:
-* Mark
-
-* Purpose:
-* Draw a set of markers for a Plot3D.
-
-* Type:
-* Private member function.
-
-* Synopsis:
-* #include "plot3d.h"
-* void Mark( AstPlot *this, int nmark, int ncoord, int indim,
-* const double *in, int type, int *status )
-
-* Class Membership:
-* Plot3d member function (overrides the astMark method inherited form
-* the parent Plot class).
-
-* Description:
-* This function draws a set of markers (symbols) at positions
-* specified in the physical coordinate system of a Plot3D. The
-* positions are transformed into graphical coordinates to
-* determine where the markers should appear within the plotting
-* area.
-*
-* They are drawn on a 2D plane that has a normal vector given by the
-* current value of the Plot3D's "Norm" attribute.
-
-* Parameters:
-* this
-* Pointer to the Plot3D.
-* nmark
-* The number of markers to draw. This may be zero, in which
-* case nothing will be drawn.
-* ncoord
-* The number of coordinates being supplied for each mark
-* (i.e. the number of axes in the current Frame of the Plot, as
-* given by its Naxes attribute).
-* indim
-* The number of elements along the second dimension of the "in"
-* array (which contains the marker coordinates). This value is
-* required so that the coordinate values can be correctly
-* located if they do not entirely fill this array. The value
-* given should not be less than "nmark".
-* in
-* The address of the first element of a 2-dimensional array of
-* shape "[ncoord][indim]" giving the
-* physical coordinates of the points where markers are to be
-* drawn. These should be stored such that the value of
-* coordinate number "coord" for input mark number "mark" is
-* found in element "in[coord][mark]".
-* type
-* A value specifying the type (e.g. shape) of marker to be
-* drawn. The set of values which may be used (and the shapes
-* that will result) is determined by the underlying graphics
-* system.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - Markers are not drawn at positions which have any coordinate
-* equal to the value AST__BAD (or where the transformation into
-* graphical coordinates yields coordinates containing the value
-* AST__BAD).
-* - An error results if the base Frame of the Plot is not 3-dimensional.
-* - An error also results if the transformation between the
-* current and base Frames of the Plot is not defined (i.e. the
-* Plot's TranInverse attribute is zero).
-*/
-
-/* Local Variables: */
- AstMapping *mapping; /* Pointer to graphics->physical mapping */
- AstPlot3D *this; /* Pointer to the Plot3D structure */
- AstPointSet *pset1; /* PointSet holding physical positions */
- AstPointSet *pset2; /* PointSet holding graphics positions */
- const char *class; /* Object class */
- const char *method; /* Current method */
- const double **ptr1; /* Pointer to physical positions */
- double **ptr2; /* Pointer to graphics positions */
- double *xpd; /* Pointer to next double precision x value */
- double *ypd; /* Pointer to next double precision y value */
- double *zpd; /* Pointer to next double precision z value */
- float *x; /* Pointer to single precision x values */
- float *xpf; /* Pointer to next single precision x value */
- float *y; /* Pointer to single precision y values */
- float *ypf; /* Pointer to next single precision y value */
- float *z; /* Pointer to single precision z values */
- float *zpf; /* Pointer to next single precision z value */
- float norm[ 3 ]; /* Single precision normal vector */
- int axis; /* Axis index */
- int i; /* Loop count */
- int naxes; /* No. of axes in the base Frame */
- int nn; /* Number of good marker positions */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the Plot3D structure. */
- this = (AstPlot3D *) this_plot;
-
-/* Store the current method and class for inclusion in error messages
- generated by lower level functions. */
- method = "astMark";
- class = astClass( this );
-
-/* Check the base Frame of the Plot is 3-D. */
- naxes = astGetNin( this );
- if( naxes != 3 && astOK ){
- astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the base "
- "Frame of the supplied %s is invalid - this number should "
- "be 3.", status, method, class, naxes, class );
- }
-
-/* Also validate the input array dimension argument. */
- if ( astOK && ( indim < nmark ) ) {
- astError( AST__DIMIN, "%s(%s): The input array dimension value "
- "(%d) is invalid.", status, method, class, indim );
- astError( AST__DIMIN, "This should not be less than the number of "
- "markers being drawn (%d).", status, nmark );
- }
-
-/* Establish the correct graphical attributes as defined by attributes
- with the supplied Plot. */
- astGrfAttrs( this, AST__MARKS_ID, 1, GRF__MARK, method, class );
-
-/* Create a PointSet to hold the supplied physical coordinates. */
- pset1 = astPointSet( nmark, ncoord, "", status );
-
-/* Allocate memory to hold pointers to the first value on each axis. */
- ptr1 = (const double **) astMalloc( sizeof( const double * )*
- (size_t)( ncoord ));
-
-/* Check the pointer can be used, then store pointers to the first value
- on each axis. */
- if( astOK ){
- for( axis = 0; axis < ncoord; axis++ ){
- ptr1[ axis ] = in + axis*indim;
- }
- }
-
-/* Store these pointers in the PointSet. */
- astSetPoints( pset1, (double **) ptr1 );
-
-/* Transform the supplied data from the current frame (i.e. physical
- coordinates) to the base frame (i.e. graphics coordinates) using
- the inverse Mapping defined by the Plot. */
- mapping = astGetMapping( this, AST__BASE, AST__CURRENT );
- pset2 = astTransform( mapping, pset1, 0, NULL );
- mapping = astAnnul( mapping );
-
-/* Get pointers to the graphics coordinates. */
- ptr2 = astGetPoints( pset2 );
-
-/* Allocate memory to hold single precision versions of the graphics
- coordinates. */
- x = (float *) astMalloc( sizeof( float )*(size_t) nmark );
- y = (float *) astMalloc( sizeof( float )*(size_t) nmark );
- z = (float *) astMalloc( sizeof( float )*(size_t) nmark );
-
-/* Check the pointers can be used. */
- if( astOK ){
-
-/* Store pointers to the next single and double precision x, y and z
- values. */
- xpf = x;
- ypf = y;
- zpf = z;
- xpd = ptr2[ 0 ];
- ypd = ptr2[ 1 ];
- zpd = ptr2[ 2 ];
-
-/* Convert the double precision values to single precision, rejecting
- any bad marker positions. */
- nn = 0;
- for( i = 0; i < nmark; i++ ){
- if( *xpd != AST__BAD && *ypd != AST__BAD && *zpd != AST__BAD ){
- nn++;
- *(xpf++) = (float) *(xpd++);
- *(ypf++) = (float) *(ypd++);
- *(zpf++) = (float) *(zpd++);
- } else {
- xpd++;
- ypd++;
- zpd++;
- }
- }
-
-/* If the nornmal vector has non-zero length, draw the remaining markers. */
- norm[ 0 ] = (float) astGetNorm( this, 0 );
- norm[ 1 ] = (float) astGetNorm( this, 1 );
- norm[ 2 ] = (float) astGetNorm( this, 2 );
-
- if( norm[ 0 ] != 0.0 || norm[ 1 ] != 0.0 || norm[ 2 ] != 0.0 ){
-
-/* Since we are about to call an external function which may not be
- thread safe, prevent any other thread from executing the following code
- until the current thread has finished executing it. */
- LOCK_MUTEX2;
-
- if( !astG3DMark( nn, x, y, z, type, norm ) ) {
- astError( AST__GRFER, "%s(%s): Graphics error in astG3DMark. ", status,
- method, class );
- }
-
-/* Allow the next thread to proceed. */
- UNLOCK_MUTEX2;
-
- } else if( astOK ) {
- astError( AST__ATTIN, "%s(%s): The vector specified by the Norm "
- "attribute has zero length.", status, method, class );
- }
- }
-
-/* Free the memory used to store single precision graphics coordinates. */
- x = (float *) astFree( (void *) x );
- y = (float *) astFree( (void *) y );
- z = (float *) astFree( (void *) z );
-
-/* Annul the PointSets. */
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
-
-/* Free the memory holding the pointers to the first value on each axis. */
- ptr1 = (const double **) astFree( (void *) ptr1 );
-
-/* Re-establish the original graphical attributes. */
- astGrfAttrs( this, AST__MARKS_ID, 0, GRF__MARK, method, class );
-
-/* Return */
- return;
-}
-
-static int Plot3DAttr( AstKeyMap *grfconID, int attr, double value,
- double *old_value, int prim ){
-/*
-* Name:
-* Plot3DAttr
-
-* Purpose:
-* Get or set the value of a 2D grf attribute.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* int Plot3DAttr( AstKeyMap *grfconID, int attr, double value,
-* double *old_value, int prim )
-
-* Class Membership:
-* Plot3D member function.
-
-* Description:
-* This function is called by one of the three encapsulated 2D Plots to
-* get or set the current value of a specified graphics attribute. It
-* forwards the call to the grf3D module being used by this Plot3D. It
-* should be registered with each of the 2D Plots using astGrfSet.
-
-* Parameters:
-* grfconID
-* The Plot's GrfContext KeyMap. This is used to identify which of
-* the three Plots is calling this function.
-* attr
-* An integer value identifying the required attribute. This should
-* be one of the symbolic values defined in grf.h.
-* value
-* A new value to store for the attribute. If this is AST__BAD
-* no value is stored.
-* old_value
-* A pointer to a double in which to return the attribute value.
-* If this is NULL, no value is returned.
-* prim
-* The sort of graphics primitive to be drawn with the new attribute.
-* Identified by one of the values defined in grf.h.
-
-* Returned Value:
-* An integer value of 0 is returned if an error occurs, and 1 otherwise.
-
-*/
-
-/* Local Variables: */
- int result;
- int *status;
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the inherited status. */
- if( !astOK ) return 0;
-
-/* Since we are about to call an external function which may not be
- thread safe, prevent any other thread from executing the following code
- until the current thread has finished executing it. */
- LOCK_MUTEX2;
-
-/* Use the function in the external Grf3D module, selected at link-time
- using ast_link options. Note, attribute values are the same for each
- of the three Plot. */
- result = astG3DAttr( attr, value, old_value, prim );
-
-/* Allow the next thread to proceed. */
- UNLOCK_MUTEX2;
-
-/* Return the result. */
- return result;
-}
-
-static int Plot3DCap( AstKeyMap *grfconID, int cap, int value ){
-/*
-* Name:
-* Plot3DCap
-
-* Purpose:
-* Determine if the 2D grf module has a given capability.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* int Plot3DCap( AstKeyMap *grfconID, int cap, int value )
-
-* Class Membership:
-* Plot3D member function.
-
-* Description:
-* This function is called by one of the three encapsulated 2D Plots to
-* determine if a given graphics capability is available. It forwards
-* the call to the grf3D module being used by this Plot3D. It should be
-* registered with each of the 2D Plots using astGrfSet.
-
-* Parameters:
-* grfconID
-* The Plot's GrfContext KeyMap. This is
-* used to identify which of the three Plots is calling this function.
-* cap
-* The capability being inquired about. This will be one of the
-* following constants defined in grf.h: GRF__SCALES, GRF__MJUST,
-* GRF__ESC,
-* value
-* The use of this parameter depends on the value of "cap" as
-* described in the documentation for the astGrfSet function in the
-* Plot class.
-
-* Returned Value:
-* The value returned by the function depends on the value of "cap"
-* as described in the astGrfSet documentation. Zero is returned if
-* the supplied capability is not recognised.
-
-*/
-
-/* Local Variables: */
- int result;
- int *status;
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the inherited status. */
- if( !astOK ) return 0;
-
-/* The astGScales function is implemented by code within the Plot3D class
- (not within the grf3D module). The Plot3D class assumes all axes are
- equally scaled. */
- if( cap == GRF__SCALES ) {
- result = 1;
-
-/* All grf3D modules are assumed to support "M" justification. */
- } else if( cap == GRF__MJUST ) {
- result = 1;
-
-/* Forward all other capability requests to the grf3D module. */
- } else {
-
-/* Since we are about to call an external function which may not be
- thread safe, prevent any other thread from executing the following code
- until the current thread has finished executing it. */
- LOCK_MUTEX2;
-
- result = astG3DCap( cap, value );
-
-/* Allow the next thread to proceed. */
- UNLOCK_MUTEX2;
- }
-
-/* Return the result. */
- return result;
-}
-
-static int Plot3DFlush( AstKeyMap *grfconID ){
-/*
-* Name:
-* Plot3DFlush
-
-* Purpose:
-* Flush any buffered graphical output.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* int Plot3DFlush( AstKeyMap *grfconID )
-
-* Class Membership:
-* Plot3D member function.
-
-* Description:
-* This function is called by one of the three encapsulated 2D Plots to
-* ensure that the display device is up-to-date by flushing any pending
-* graphics to the output device. It forwards the call to the grf3D module
-* being used by this Plot3D. It should be registered with each of the
-* 2D Plots using astGrfSet.
-
-* Parameters:
-* grfconID
-* The Plot's GrfContext KeyMap. This is
-* used to identify which of the three Plots is calling this function.
-
-* Returned Value:
-* An integer value of 0 is returned if an error occurs, and 1 otherwise.
-
-*/
-
-/* Local Variables: */
- int result;
- int *status;
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the inherited status. */
- if( !astOK ) return 0;
-
-/* Since we are about to call an external function which may not be
- thread safe, prevent any other thread from executing the following code
- until the current thread has finished executing it. */
- LOCK_MUTEX2;
-
-/* Use the function in the external Grf3D module, selected at link-time
- using ast_link options. */
- result = astG3DFlush();
-
-/* Allow the next thread to proceed. */
- UNLOCK_MUTEX2;
-
-/* Return the result. */
- return result;
-}
-
-static int Plot3DLine( AstKeyMap *grfconID, int n, const float *x, const float *y ){
-/*
-* Name:
-* Plot3DLine
-
-* Purpose:
-* Draw a polyline on a 2D surface.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* int Plot3DLine( AstKeyMap *grfconID, int n, const float *x,
-* const float *y )
-
-* Class Membership:
-* Plot3D member function.
-
-* Description:
-* This function is called by one of the three encapsulated 2D Plots to
-* draw a polyline. It forwards the call to the grf3D module being used
-* by this Plot3D. It should be registered with each of the 2D Plots
-* using astGrfSet.
-
-* Parameters:
-* grfconID
-* The Plot's GrfContext KeyMap. This is
-* used to identify which of the three Plots is calling this function.
-* n
-* The number of positions to be joined together.
-* x
-* A pointer to an array holding the "n" x values.
-* y
-* A pointer to an array holding the "n" y values.
-
-* Returned Value:
-* An integer value of 0 is returned if an error occurs, and 1 otherwise.
-
-*/
-
-/* Local Variables: */
- AstKeyMap *grfcon;
- double gcon;
- float *work;
- float *x3d = NULL;
- float *y3d = NULL;
- float *z3d = NULL;
- int i;
- int plane;
- int result = 0;
- int *status;
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the inherited status. */
- if( !astOK ) return result;
-
-/* Get a genuine pointer from the supplied grfcon identifier. */
- grfcon = astMakePointer( grfconID );
-
-/* Report an error if no grfcon object was supplied. */
- if( !grfcon ) {
- astError( AST__INTER, "astG3DLine(Plot3D): No grfcon Object supplied "
- "(internal AST programming error)." , status);
-
-/* If a grfcon Object was supplied, get the graphics box array out of it. */
- } else if( !astMapGet0D( grfcon, "Gcon", &gcon ) ) {
- astError( AST__INTER, "astG3DLine(Plot3D): No \"Gcon\" key found "
- "in the supplied grfcon Object (internal AST programming "
- "error)." , status);
-
-/* Also get the plane index out of it. */
- } else if( !astMapGet0I( grfcon, "Plane", &plane ) ) {
- astError( AST__INTER, "astG3DLine(Plot3D): No \"Plane\" key found "
- "in the supplied grfcon Object (internal AST programming "
- "error)." , status);
- }
-
-/* Allocate memory to hold the "n" values for the missing coordinate. */
- work = astMalloc( sizeof( float )*(size_t) n );
- if( work ) {
-
-/* Set up pointers to the x, y and z arrays in the 3D graphics system.
- Fill the missing array with suitable values (the constant value of
- the third axis on the plane being drawn). */
- if( plane == XY ) {
- x3d = (float *) x;
- y3d = (float *) y;
- z3d = work;
-
- for( i = 0; i < n; i++ ) z3d[ i ] = gcon;
-
- } else if( plane == XZ ) {
- x3d = (float *) x;
- y3d = work;
- z3d = (float *) y;
- for( i = 0; i < n; i++ ) y3d[ i ] = gcon;
-
- } else if( plane == YZ ) {
- x3d = work;
- y3d = (float *) x;
- z3d = (float *) y;
- for( i = 0; i < n; i++ ) x3d[ i ] = gcon;
-
- } else {
- astError( AST__INTER, "astG3DLine(Plot3D): Illegal plane "
- "identifier %d supplied (internal AST programming "
- "error).", status, plane );
- }
-
-/* If ok, draw the lines in the 3D graphics coordinate space. */
- if( x3d ) {
-
-/* Since we are about to call an external function which may not be
- thread safe, prevent any other thread from executing the following code
- until the current thread has finished executing it. */
- LOCK_MUTEX2;
-
-/* Draw the line */
- result = astG3DLine( n, x3d, y3d, z3d );
-
-/* Allow the next thread to proceed. */
- UNLOCK_MUTEX2;
- }
- }
-
-/* Free resources. */
- work = astFree( work );
-
-/* Return the result. */
- return result;
-}
-
-static int Plot3DMark( AstKeyMap *grfconID, int n, const float *x,
- const float *y, int type ){
-/*
-* Name:
-* Plot3DMark
-
-* Purpose:
-* Draw a set of markers.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* int Plot3DMark( AstKeyMap *grfconID, int n, const float *x,
-* const float *y, int type )
-
-* Class Membership:
-* Plot3D member function.
-
-* Description:
-* This function is called by one of the three encapsulated 2D Plots to
-* draw a set of markers. It forwards the call to the grf3D module being
-* used by this Plot3D. It should be registered with each of the 2D Plots
-* using astGrfSet.
-
-* Parameters:
-* grfconID
-* The Plot's GrfContext KeyMap. This is
-* used to identify which of the three Plots is calling this function.
-* n
-* The number of markers to draw.
-* x
-* A pointer to an array holding the "n" x values.
-* y
-* A pointer to an array holding the "n" y values.
-* type
-* An integer which can be used to indicate the type of marker symbol
-* required.
-
-* Returned Value:
-* An integer value of 0 is returned if an error occurs, and 1 otherwise.
-
-*/
-
-/* Local Variables: */
- AstKeyMap *grfcon;
- double gcon;
- float *work;
- float *x3d = NULL;
- float *y3d = NULL;
- float *z3d = NULL;
- float norm[ 3 ];
- int i;
- int plane;
- int rc;
- int result = 0;
- int *status;
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the inherited status. */
- if( !astOK ) return result;
-
-/* Get a genuine pointer from the supplied grfcon identifier. */
- grfcon = astMakePointer( grfconID );
-
-/* Report an error if no grfcon object was supplied. */
- if( !grfcon ) {
- astError( AST__INTER, "astG3DMark(Plot3D): No grfcon Object supplied "
- "(internal AST programming error)." , status);
-
-/* If a grfcon Object was supplied, get the graphics box array out of it. */
- } else if( !astMapGet0D( grfcon, "Gcon", &gcon ) ) {
- astError( AST__INTER, "astG3DMark(Plot3D): No \"Gcon\" key found "
- "in the supplied grfcon Object (internal AST programming "
- "error)." , status);
-
-/* If a grfcon Object was supplied, get the RootCorner value out of it. */
- } else if( !astMapGet0I( grfcon, "RootCorner", &rc ) ) {
- astError( AST__INTER, "astG3DLine(Plot3D): No \"RootCornern\" key found "
- "in the supplied grfcon Object (internal AST programming "
- "error)." , status);
-
-/* Also get the plane index out of it. */
- } else if( !astMapGet0I( grfcon, "Plane", &plane ) ) {
- astError( AST__INTER, "astG3DMark(Plot3D): No \"Plane\" key found "
- "in the supplied grfcon Object (internal AST programming "
- "error)." , status);
- }
-
-/* Allocate memory to hold the "n" values for the missing coordinate. */
- work = astMalloc( sizeof( float )*(size_t) n );
- if( work ) {
-
-/* Set up pointers to the x, y and z arrays in the 3D graphics system.
- Fill the missing array with suitable values (the constant value of
- the third axis on the plane being drawn). Set the normal vector for
- the markers so that they are drawn in the plane described by the Plot.*/
- if( plane == XY ) {
- x3d = (float *) x;
- y3d = (float *) y;
- z3d = work;
- for( i = 0; i < n; i++ ) z3d[ i ] = gcon;
- norm[ 0 ] = 0;
- norm[ 1 ] = 0;
- norm[ 2 ] = ( rc & 4 ) ? 1 : -1;
-
- } else if( plane == XZ ) {
- x3d = (float *) x;
- y3d = work;
- z3d = (float *) y;
- for( i = 0; i < n; i++ ) y3d[ i ] = gcon;
- norm[ 0 ] = 0;
- norm[ 1 ] = ( rc & 2 ) ? 1 : -1;
- norm[ 2 ] = 0;
-
- } else if( plane == YZ ) {
- x3d = work;
- y3d = (float *) x;
- z3d = (float *) y;
- for( i = 0; i < n; i++ ) x3d[ i ] = gcon;
- norm[ 0 ] = ( rc & 1 ) ? 1 : -1;
- norm[ 1 ] = 0;
- norm[ 2 ] = 0;
-
- } else {
- astError( AST__INTER, "astG3DMark(Plot3D): Illegal plane "
- "identifier %d supplied (internal AST programming "
- "error).", status, plane );
- }
-
-/* If ok, draw the markers in the 3D graphics coordinate space. */
- if( x3d ) {
-
-/* Since we are about to call an external function which may not be
- thread safe, prevent any other thread from executing the following code
- until the current thread has finished executing it. */
- LOCK_MUTEX2;
-
-/* Draw the markers */
- result = astG3DMark( n, x3d, y3d, z3d, type, norm );
-
-/* Allow the next thread to proceed. */
- UNLOCK_MUTEX2;
- }
- }
-
-/* Free resources. */
- work = astFree( work );
-
-/* Return the result. */
- return result;
-}
-
-static int Plot3DQch( AstKeyMap *grfconID, float *chv, float *chh ){
-/*
-* Name:
-* Plot3DQch
-
-* Purpose:
-* Get the current text size.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* int Plot3DQch( AstKeyMap *grfconID, float *chv, float *chh )
-
-* Class Membership:
-* Plot3D member function.
-
-* Description:
-* This function is called by one of the three encapsulated 2D Plots to
-* get the current text size. It forwards the call to the grf3D module
-* being used by this Plot3D. It should be registered with each of the
-* 2D Plots using astGrfSet.
-*
-* The grf3D module assumes that the 3D graphics axes are equally
-* scaled and therefore the text height does not depend on the text
-* orientation. Therefore, "chv" and "chh" are returned holding the
-* same value.
-
-* Parameters:
-* grfconID
-* The Plot's GrfContext KeyMap. This is
-* used to identify which of the three Plots is calling this function.
-* chv
-* A pointer to the float which is to receive the height of
-* characters drawn with a vertical baseline in the 2D Plot. This
-* will be an increment in the 2D X axis.
-* chh
-* A pointer to the float which is to receive the height of
-* characters drawn with a horizontal baseline in the 2D Plot. This
-* will be an increment in the 2D Y axis.
-
-* Returned Value:
-* An integer value of 0 is returned if an error occurs, and 1 otherwise.
-
-*/
-
-/* Local Variables: */
- int result;
- float ch;
- int *status;
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the inherited status. */
- if( !astOK ) return 0;
-
-/* Since we are about to call an external function which may not be
- thread safe, prevent any other thread from executing the following code
- until the current thread has finished executing it. */
- LOCK_MUTEX2;
-
-/* Use the function in the external Grf3D module, selected at link-time
- using ast_link options. Note, text height is the same for each
- of the three Plot. */
- result = astG3DQch( &ch );
-
-/* Allow the next thread to proceed. */
- UNLOCK_MUTEX2;
-
-/* Store the value in both the returned values. */
- *chv = ch;
- *chh = ch;
-
-/* Return the error flag. */
- return result;
-}
-
-static int Plot3DScales( AstKeyMap *grfconID, float *alpha, float *beta ){
-/*
-* Name:
-* Plot3DScales
-
-* Purpose:
-* Get the 2D axis scales.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* int Plot3DScales( AstKeyMap *grfconID, float *alpha, float *beta )
-
-* Class Membership:
-* Plot3D member function.
-
-* Description:
-* This function is called by one of the three encapsulated 2D Plots to
-* get the relative scales of the 2D axes. Since the grf3D module
-* assumes that all graphics axes are equally scaled, it just returns 1.0
-* for alpha and beta.
-
-* Parameters:
-* grfconID
-* The Plot's GrfContext KeyMap. This is
-* used to identify which of the three Plots is calling this function.
-* alpha
-* A pointer to the float which is to receive the scale for the X
-* axis
-* beta
-* A pointer to the float which is to receive the scale for the Y
-* axis
-
-* Returned Value:
-* An integer value of 0 is returned if an error occurs, and 1 otherwise.
-
-*/
-
- *alpha = 1.0;
- *beta = 1.0;
- return 1;
-}
-
-static int Plot3DText( AstKeyMap *grfconID, const char *text, float x, float y,
- const char *just, float upx, float upy ){
-/*
-* Name:
-* Plot3DText
-
-* Purpose:
-* Draw a text string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* int Plot3DText( AstKeyMap *grfconID, const char *text, float x, float y,
-* const char *just, float upx, float upy )
-
-* Class Membership:
-* Plot3D member function.
-
-* Description:
-* This function is called by one of the three encapsulated 2D Plots to
-* draw a text string. It forwards the call to the grf3D module being
-* used by this Plot3D. It should be registered with each of the 2D Plots
-* using astGrfSet.
-
-* Parameters:
-* grfconID
-* The Plot's GrfContext KeyMap. This is
-* used to identify which of the three Plots is calling this function.
-* text
-* Pointer to a null-terminated character string to be displayed.
-* x
-* The reference x coordinate.
-* y
-* The reference y coordinate.
-* just
-* A character string which specifies the location within the
-* text string which is to be placed at the reference position
-* given by x and y.
-* upx
-* The x component of the up-vector for the text.
-* upy
-* The y component of the up-vector for the text.
-
-* Returned Value:
-* An integer value of 0 is returned if an error occurs, and 1 otherwise.
-
-*/
-
-/* Local Variables: */
- AstKeyMap *grfcon;
- double gcon;
- float norm[ 3 ];
- float ref[ 3 ];
- float up[ 3 ];
- int plane;
- int rc;
- int result = 0;
- int *status;
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the inherited status. */
- if( !astOK ) return result;
-
-/* Get a genuine pointer from the supplied grfcon identifier. */
- grfcon = astMakePointer( grfconID );
-
-/* Report an error if no grfcon object was supplied. */
- if( !grfcon ) {
- astError( AST__INTER, "astG3DText(Plot3D): No grfcon Object supplied "
- "(internal AST programming error)." , status);
-
-/* If a grfcon Object was supplied, get the graphics box array out of it. */
- } else if( !astMapGet0D( grfcon, "Gcon", &gcon ) ) {
- astError( AST__INTER, "astG3DText(Plot3D): No \"Gcon\" key found "
- "in the supplied grfcon Object (internal AST programming "
- "error)." , status);
-
-/* If a grfcon Object was supplied, get the RootCorner value out of it. */
- } else if( !astMapGet0I( grfcon, "RootCorner", &rc ) ) {
- astError( AST__INTER, "astG3DLine(Plot3D): No \"RootCornern\" key found "
- "in the supplied grfcon Object (internal AST programming "
- "error)." , status);
-
-/* Also get the plane index out of it. */
- } else if( !astMapGet0I( grfcon, "Plane", &plane ) ) {
- astError( AST__INTER, "astG3DText(Plot3D): No \"Plane\" key found "
- "in the supplied grfcon Object (internal AST programming "
- "error)." , status);
-
-/* If OK, draw the text. */
- } else {
-
-/* Set up the reference, up and normal vectors so that the text appears
- on the required plane. */
- if( plane == XY ) {
- ref[ 0 ] = x;
- ref[ 1 ] = y;
- ref[ 2 ] = gcon;
- norm[ 0 ] = 0;
- norm[ 1 ] = 0;
- norm[ 2 ] = ( rc & 4 ) ? 1 : -1;
- up[ 0 ] = upx;
- up[ 1 ] = upy;
- up[ 2 ] = 0;
-
- } else if( plane == XZ ) {
- ref[ 0 ] = x;
- ref[ 1 ] = gcon;
- ref[ 2 ] = y;
- norm[ 0 ] = 0;
- norm[ 1 ] = ( rc & 2 ) ? 1 : -1;
- norm[ 2 ] = 0;
- up[ 0 ] = upx;
- up[ 1 ] = 0;
- up[ 2 ] = upy;
-
- } else if( plane == YZ ) {
- ref[ 0 ] = gcon;
- ref[ 1 ] = x;
- ref[ 2 ] = y;
- norm[ 0 ] = ( rc & 1 ) ? 1 : -1;
- norm[ 1 ] = 0;
- norm[ 2 ] = 0;
- up[ 0 ] = 0;
- up[ 1 ] = upx;
- up[ 2 ] = upy;
-
- } else {
- astError( AST__INTER, "astG3DText(Plot3D): Illegal plane "
- "identifier %d supplied (internal AST programming "
- "error).", status, plane );
- }
-
-/* Since we are about to call an external function which may not be
- thread safe, prevent any other thread from executing the following code
- until the current thread has finished executing it. */
- LOCK_MUTEX2;
-
-/* If ok, draw the markers in the 3D graphics coordinate space. */
- if( astOK ) result = astG3DText( text, ref, just, up, norm );
-
-/* Allow the next thread to proceed. */
- UNLOCK_MUTEX2;
- }
-
-/* Return the result. */
- return result;
-}
-
-static int Plot3DTxExt( AstKeyMap *grfconID, const char *text, float x, float y,
- const char *just, float upx, float upy, float *xb,
- float *yb ){
-/*
-* Name:
-* Plot3DTxExt
-
-* Purpose:
-* Determine the plotted extent of a text string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* int Plot3DTxExt( AstKeyMap *grfconID, const char *text, float x,
-* float y, const char *just, float upx, float upy,
-* float *xb, float *yb )
-
-* Class Membership:
-* Plot3D member function.
-
-* Description:
-* This function is called by one of the three encapsulated 2D Plots to
-* determine the extent a string would have if plotted using Plot3DText.
-* It forwards the call to the grf3D module being used by this Plot3D. It
-* should be registered with each of the 2D Plots using astGrfSet.
-
-* Parameters:
-* grfconID
-* The Plot's GrfContext KeyMap. This is
-* used to identify which of the three Plots is calling this function.
-* text
-* Pointer to a null-terminated character string to be displayed.
-* x
-* The reference x coordinate.
-* y
-* The reference y coordinate.
-* just
-* A character string which specifies the location within the
-* text string which is to be placed at the reference position
-* given by x and y.
-* upx
-* The x component of the up-vector for the text.
-* upy
-* The y component of the up-vector for the text.
-* xb
-* An array of 4 elements in which to return the x coordinate of
-* each corner of the bounding box.
-* yb
-* An array of 4 elements in which to return the y coordinate of
-* each corner of the bounding box.
-
-* Returned Value:
-* An integer value of 0 is returned if an error occurs, and 1 otherwise.
-
-*/
-
-/* Local Variables: */
- AstKeyMap *grfcon;
- double gcon;
- float *xb3d = NULL;
- float *yb3d = NULL;
- float *zb3d = NULL;
- float bl[ 3 ];
- float norm[ 3 ];
- float ref[ 3 ];
- float unused[ 4 ];
- float up[ 3 ];
- int plane;
- int rc;
- int result = 0;
- int *status;
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the inherited status. */
- if( !astOK ) return result;
-
-/* Get a genuine pointer from the supplied grfcon identifier. */
- grfcon = astMakePointer( grfconID );
-
-/* Report an error if no grfcon object was supplied. */
- if( !grfcon ) {
- astError( AST__INTER, "astG3DTxExt(Plot3D): No grfcon Object supplied "
- "(internal AST programming error)." , status);
-
-/* If a grfcon Object was supplied, get the graphics box array out of it. */
- } else if( !astMapGet0D( grfcon, "Gcon", &gcon ) ) {
- astError( AST__INTER, "astG3DTxExt(Plot3D): No \"Gcon\" key found "
- "in the supplied grfcon Object (internal AST programming "
- "error)." , status);
-
-/* If a grfcon Object was supplied, get the RootCorner value out of it. */
- } else if( !astMapGet0I( grfcon, "RootCorner", &rc ) ) {
- astError( AST__INTER, "astG3DLine(Plot3D): No \"RootCornern\" key found "
- "in the supplied grfcon Object (internal AST programming "
- "error)." , status);
-
-/* Also get the plane index out of it. */
- } else if( !astMapGet0I( grfcon, "Plane", &plane ) ) {
- astError( AST__INTER, "astG3DTxExt(Plot3D): No \"Plane\" key found "
- "in the supplied grfcon Object (internal AST programming "
- "error)." , status);
-
-/* If OK, get the extent of the text. */
- } else {
-
-/* Set up the reference, up and normal vectors so that the text appears
- on the required plane. */
- if( plane == XY ) {
- ref[ 0 ] = x;
- ref[ 1 ] = y;
- ref[ 2 ] = gcon;
- norm[ 0 ] = 0;
- norm[ 1 ] = 0;
- norm[ 2 ] = ( rc & 4 ) ? 1 : -1;
- up[ 0 ] = upx;
- up[ 1 ] = upy;
- up[ 2 ] = 0;
- xb3d = xb;
- yb3d = yb;
- zb3d = unused;
-
- } else if( plane == XZ ) {
- ref[ 0 ] = x;
- ref[ 1 ] = gcon;
- ref[ 2 ] = y;
- norm[ 0 ] = 0;
- norm[ 1 ] = ( rc & 2 ) ? 1 : -1;
- norm[ 2 ] = 0;
- up[ 0 ] = upx;
- up[ 1 ] = 0;
- up[ 2 ] = upy;
- xb3d = xb;
- yb3d = unused;
- zb3d = yb;
-
- } else if( plane == YZ ) {
- ref[ 0 ] = gcon;
- ref[ 1 ] = x;
- ref[ 2 ] = y;
- norm[ 0 ] = ( rc & 1 ) ? 1 : -1;
- norm[ 1 ] = 0;
- norm[ 2 ] = 0;
- up[ 0 ] = 0;
- up[ 1 ] = upx;
- up[ 2 ] = upy;
- xb3d = unused;
- yb3d = xb;
- zb3d = yb;
-
- } else {
- astError( AST__INTER, "astG3DTxExt(Plot3D): Illegal plane "
- "identifier %d supplied (internal AST programming "
- "error).", status, plane );
- }
-
-/* Since we are about to call an external function which may not be
- thread safe, prevent any other thread from executing the following code
- until the current thread has finished executing it. */
- LOCK_MUTEX2;
-
-/* If ok, get the extent of the text. */
- if( astOK ) result = astG3DTxExt( text, ref, just, up, norm, xb3d, yb3d,
- zb3d, bl );
-/* Allow the next thread to proceed. */
- UNLOCK_MUTEX2;
- }
-
-/* Return the result. */
- return result;
-}
-
-static void PolyCurve( AstPlot *this, int npoint, int ncoord, int indim,
- const double *in, int *status ){
-/*
-* Name:
-* PolyCurve
-
-* Purpose:
-* Draw a series of connected geodesic curves.
-
-* Type:
-* Private member function.
-
-* Synopsis:
-* #include "plot3d.h"
-* void PolyCurve( AstPlot *this, int npoint, int ncoord, int indim,
-* const double *in, int *status )
-
-* Class Membership:
-* Plot method (overrides the astPolyCurve method inherited form the
-* Plot class)
-
-* Description:
-* This function joins a series of points specified in the physical
-* coordinate system of a Plot by drawing a sequence of geodesic
-* curves. It is equivalent to making repeated use of the astCurve
-* function (q.v.), except that astPolyCurve will generally be more
-* efficient when drawing many geodesic curves end-to-end. A
-* typical application of this might be in drawing contour lines.
-*
-* As with astCurve, full account is taken of the Mapping between
-* physical and graphical coordinate systems. This includes any
-* discontinuities and clipping established using astClip.
-
-* Parameters:
-* this
-* Pointer to the Plot.
-* npoint
-* The number of points between which geodesic curves are to be drawn.
-* ncoord
-* The number of coordinates being supplied for each point (i.e.
-* the number of axes in the current Frame of the Plot, as given
-* by its Naxes attribute).
-* indim
-* The number of elements along the second dimension of the "in"
-* array (which contains the input coordinates). This value is
-* required so that the coordinate values can be correctly
-* located if they do not entirely fill this array. The value
-* given should not be less than "npoint".
-* in
-* The address of the first element in a 2-dimensional array of shape
-* "[ncoord][indim]" giving the
-* physical coordinates of the points which are to be joined in
-* sequence by geodesic curves. These should be stored such that
-* the value of coordinate number "coord" for point number
-* "point" is found in element "in[coord][point]".
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - No curve is drawn on either side of any point which has any
-* coordinate equal to the value AST__BAD.
-* - An error results if the base Frame of the Plot is not
-* 2-dimensional.
-* - An error also results if the transformation between the
-* current and base Frames of the Plot is not defined (i.e. the
-* Plot's TranInverse attribute is zero).
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
- astError( AST__INTER, "astPolyCurve(%s): The astPolyCurve "
- "method cannot be used with a %s (programming error).", status,
- astGetClass( this ), astGetClass( this ) );
-}
-
-static void RemoveFrame( AstFrameSet *this_fset, int iframe, int *status ) {
-/*
-* Name:
-* RemoveFrame
-
-* Purpose:
-* Remove a Frame from a Plot3D.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-* #include "plot.h"
-* void RemoveFrame( AstFrameSet *this_fset, int iframe, int *status )
-
-* Class Membership:
-* Plot3D member function (over-rides the astRemoveFrame public
-* method inherited from the Plot class).
-
-* Description:
-* This function removes a Frame from a Plot3D. All other Frames
-* in the Plot3D have their indices re-numbered from one (if
-* necessary), but are otherwise unchanged.
-*
-* If the index of the original base Frame is changed, the index value
-* stored in the Plot3D is updated. If the base Frame itself is
-* removed, an error is reported.
-
-* Parameters:
-* this_fset
-* Pointer to the FrameSet component of the Plot3D.
-* iframe
-* The index within the Plot3D of the Frame to be removed.
-* This value should lie in the range from 1 to the number of
-* Frames in the Plot3D (as given by its Nframe attribute).
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstPlot3D *this; /* Pointer to Plot3D structure */
- int ifrm; /* Validated frame index */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Plot3D structure. */
- this = (AstPlot3D *) this_fset;
-
-/* Validate the frame index. This translated AST__BASE and AST__CURRENT
- into actual Frame indices. */
- ifrm = astValidateFrameIndex( this_fset, iframe, "astRemoveFrame" );
-
-/* Report an error if an attempt is made to delete the Frame that defines
- the mapping onto the screen (the original base Frame in the FrameSet
- supplied when the Plot3D was constructed). */
- if( ifrm == this->pix_frame ){
- astError( AST__PXFRRM, "astRemoveFrame(%s): Cannot delete Frame "
- "number %d from the supplied %s since it is the Frame "
- "that defines the mapping onto the graphics plane.", status,
- astGetClass( this ), iframe, astGetClass( this ) );
-
-/* Otherwise, invoke the parent astRemoveFrame method to remove the Frame. */
- } else {
- (*parent_removeframe)( this_fset, iframe, status );
-
-/* If the index of the removed Frame is smaller than the original base Frame
- index, then decrement the original base Frame index so that the same Frame
- will be used in future. */
- if( astOK ){
- if( ifrm < this->pix_frame ) (this->pix_frame)--;
- }
- }
-}
-
-static int RootCornerInt( const char *rootcorner, int *status ){
-/*
-* Name:
-* RootCornerInt
-
-* Purpose:
-* Convert a RootCorner string to an integer.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* int RootCornerInt( const char *rootcorner, int *status )
-
-* Class Membership:
-* Plot3D method.
-
-* Description:
-* This function converts a RootCorner string to an integer.
-
-* Parameters:
-* rootcorner
-* The string value to convert. Should be 3 characters long
-* and contain nothing but "U" or "L" (upper or lower case).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The integer value that is is the protected equivalent of the
-* supplied string. A negative value is returned if an error has
-* already occurred, of the supplied string is not legal.
-
-*/
-
-/* Local Variables: */
- int result;
-
-/* Initialise */
- result = -1;
-
-/* Check the inherited status. */
- if( !astOK ) return result;
-
-/* Compare thr supplied value with every legal value. */
- if( astChrMatch( rootcorner, "LLL" ) ) {
- result = LLL;
-
- } else if( astChrMatch( rootcorner, "ULL" ) ) {
- result = ULL;
-
- } else if( astChrMatch( rootcorner, "LUL" ) ) {
- result = LUL;
-
- } else if( astChrMatch( rootcorner, "UUL" ) ) {
- result = UUL;
-
- } else if( astChrMatch( rootcorner, "LLU" ) ) {
- result = LLU;
-
- } else if( astChrMatch( rootcorner, "ULU" ) ) {
- result = ULU;
-
- } else if( astChrMatch( rootcorner, "LUU" ) ) {
- result = LUU;
-
- } else if( astChrMatch( rootcorner, "UUU" ) ) {
- result = UUU;
-
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *RootCornerString( int rootcorner, int *status ){
-/*
-* Name:
-* RootCornerString
-
-* Purpose:
-* Convert a RootCorner integer to a string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* const char *RootCornerString( int rootcorner, int *status )
-
-* Class Membership:
-* Plot3D method.
-
-* Description:
-* This function converts a RootCorner integer to a string.
-
-* Parameters:
-* rootcorner
-* The integer value to convert. Should be in the range 0 to 7.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a static string that is the public equivalent of the
-* supplied integer. A NULL pointer is returned if an error has
-* already occurred, of the supplied integer is not legal.
-
-*/
-
-/* Local Variables: */
- char *result;
-
-/* Initialise */
- result = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return result;
-
-/* Compare thr supplied value with every legal value. */
- if( rootcorner == LLL ) {
- result = "LLL";
-
- } else if( rootcorner == ULL ) {
- result = "ULL";
-
- } else if( rootcorner == LUL ) {
- result = "LUL";
-
- } else if( rootcorner == UUL ) {
- result = "UUL";
-
- } else if( rootcorner == LLU ) {
- result = "LLU";
-
- } else if( rootcorner == ULU ) {
- result = "ULU";
-
- } else if( rootcorner == LUU ) {
- result = "LUU";
-
- } else if( rootcorner == UUU ) {
- result = "UUU";
-
- }
-
-/* Return the result. */
- return result;
-}
-
-static void Set3DGrf( AstPlot3D *this, AstPlot *plot, int plane, int *status ){
-/*
-* Name:
-* Set3DGrf
-
-* Purpose:
-* Associate GRF functions with a Plot.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* void Set3DGrf( AstPlot3D *this, AstPlot *plot, int plane, int *status )
-
-* Class Membership:
-* Plot3D method.
-
-* Description:
-* This function registers grf functions defined in this class with
-* the supplied Plot, so that, whenever the Plot draws anything, the
-* plotting request is caught by this class and converted into an
-* appropriate grf3D call.
-
-* Parameters:
-* this
-* Pointer to the Plot3D.
-* plot
-* Pointer to the Plot.
-* plane
-* An integer identifier for the plane within 3D GRAPHICS
-* coordinates upon which the supplied Plot should draw.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstKeyMap *grfcon;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Register the plotting functions defined in this class, so that the
- plot will call these functions to do its 2D plotting. */
- astGrfSet( plot, "Attr", (AstGrfFun) Plot3DAttr );
- astGrfSet( plot, "Cap", (AstGrfFun) Plot3DCap );
- astGrfSet( plot, "Flush", (AstGrfFun) Plot3DFlush );
- astGrfSet( plot, "Line", (AstGrfFun) Plot3DLine );
- astGrfSet( plot, "Mark", (AstGrfFun) Plot3DMark );
- astGrfSet( plot, "Qch", (AstGrfFun) Plot3DQch );
- astGrfSet( plot, "Scales", (AstGrfFun) Plot3DScales );
- astGrfSet( plot, "Text", (AstGrfFun) Plot3DText );
- astGrfSet( plot, "TxExt", (AstGrfFun) Plot3DTxExt );
-
-/* When the above functions are called, they need to know which plane
- they are drawing on. So we put this information into the GrfContext
- KeyMap stored in the Plot. This KeyMap will be passed to the above
- drawing functions when they are called from within the Plot class. */
- grfcon = astGetGrfContext( plot );
- astMapPut0I( grfcon, "Plane", plane, "The 2D plane being drawn on" );
- if( plane == XY ) {
- astMapPut0D( grfcon, "Gcon", this->gbox[2], "Constant Z value" );
- } else if( plane == XZ ) {
- astMapPut0D( grfcon, "Gcon", this->gbox[1], "Constant Y value" );
- } else {
- astMapPut0D( grfcon, "Gcon", this->gbox[0], "Constant X value" );
- }
- astMapPut0I( grfcon, "RootCorner", astGetRootCorner(this), "The labelled corner" );
- grfcon = astAnnul( grfcon );
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a Plot3D.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* void SetAttrib( AstObject *this, const char *setting, int *status )
-
-* Class Membership:
-* Plot3D member function (over-rides the astSetAttrib protected
-* method inherited from the Plot class).
-
-* Description:
-* This function assigns an attribute value for a Plot3D, the
-* attribute and its value being specified by means of a string of
-* the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in
-* lower case with no white space present. The value to the right
-* of the "=" should be a suitable textual representation of the
-* value to be assigned and this will be interpreted according to
-* the attribute's data type. White space surrounding the value is
-* only significant for string attributes.
-
-* Parameters:
-* this
-* Pointer to the Plot3D.
-* setting
-* Pointer to a null terminated string specifying the new attribute
-* value.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstPlot3D *this; /* Pointer to the Plot3D structure */
- double dval; /* Floating point attribute value */
- int axis; /* Axis index */
- int ival; /* Int attribute value */
- int len; /* Length of setting string */
- int nc; /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Plot3D structure. */
- this = (AstPlot3D *) this_object;
-
-/* Obtain the length of the setting string. */
- len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
- the setting string and extract the attribute value (or an offset to
- it in the case of string values). In each case, use the value set
- in "nc" to check that the entire string was matched. Once a value
- has been obtained, use the appropriate method to set it. */
-
-/* Norm(axis). */
-/* ----------- */
- if ( nc = 0,
- ( 2 == astSscanf( setting, "norm(%d)= %lg %n",
- &axis, &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetNorm( this, axis - 1, dval );
-
-/* RootCorner. */
-/* ----------- */
- } else if( nc = 0,
- ( 0 == astSscanf( setting, "rootcorner=%n%*[^\n]%n", &ival, &nc ) )
- && ( nc >= len ) ) {
- ival = RootCornerInt( setting + ival, status );
- if( astOK && ival < 0 ) {
- astError( AST__ATTIN, "astSetAttrib(Plot3D): Unusable value \"%s\" "
- "given for attribute RootCorner.", status, setting + ival );
- } else {
- astSetRootCorner( this, ival );
- }
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-
-/* Undefine macros local to this function. */
-#undef MATCH
-}
-
-static void SetCurrent( AstFrameSet *this_frameset, int iframe, int *status ) {
-/*
-* Name:
-* SetCurrent
-
-* Purpose:
-* Set a value for the Current attribute of a Plot3D.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* int astSetCurrent( AstFrameSet *this, int iframe, int *status )
-
-* Class Membership:
-* Plot3D member function (over-rides the public astSetCurrent method
-* inherited from the FrameSet class).
-
-* Description:
-* This function sets a value for the Current attribute of a
-* Plot3D. This attribute is an index that identifies the current
-* Frame for the Plot3D.
-
-* Parameters:
-* this
-* Pointer to the Plot3D.
-* iframe
-* Value to be set for the Current attribute.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Invoke the parent astSetCurrent method. */
- (*parent_setcurrent)( this_frameset, iframe, status );
-
-/* Update the three 2D Plots stored in the Plot3D structure so that they
- reflect this modified FrameSet. */
- UpdatePlots( (AstPlot3D *) this_frameset, status );
-}
-
-static void SetPlotAttr( AstPlot *plot, int plane, int label[ 2 ], int *status ){
-/*
-* Name:
-* SetPlotAttr
-
-* Purpose:
-* Set the attributes ofr one of the encapsulated Plots.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* void SetPlotAttr( AstPlot *plot, int plane, int label[ 2 ], int *status )
-
-* Class Membership:
-* Plot3D method.
-
-* Description:
-* This function sets the attributes of one of the encapsulated Plots.
-
-* Parameters:
-* plot
-* Pointer to the Plot to modify.
-* plane
-* The 3D plane spanned by the 2D plot.
-* label
-* Array indicating if each WCS axis should be labelled or not.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- int axis;
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* Ensure that the Plot uses the grf interface registered using
- astGrfSet. */
- astSetGrf( plot, 1 );
-
-/* Ensure that no title is drawn. */
- astSetDrawTitle( plot, 0 );
-
-/* For each axis, ensure that no axis labels or ticks are produced unless
- the axis is indicated as a labelled axis in the supplied array. */
- for( axis = 0; axis < 2; axis++ ) {
- if( !label[ axis ] ) {
- astSetLabelUnits( plot, axis, 0 );
- astSetNumLab( plot, axis, 0 );
- astSetTextLab( plot, axis, 0 );
- }
- }
-}
-
-static void SetRootCorner( AstPlot3D *this, int rootcorner, int *status ){
-/*
-*+
-* Name:
-* astSetRootCorner
-
-* Purpose:
-* Set a new value for the RootCorner attribute.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "plot3d.h"
-* void astSetRootCorner( AstPlot3D *this, int rootcorner )
-
-* Class Membership:
-* Plot method.
-
-* Description:
-* This function sets a new value for the RootCorner attribute.
-
-* Parameters:
-* this
-* Pointer to a Plot3D.
-* rootcorner
-* The new RootCorner value.
-
-*-
-*/
-
-/* Check the global status. */
- if( !astOK ) return;
-
-/* Report an error if the new value is out of bounds. */
- if( rootcorner < 0 || rootcorner > 7 ){
- astError( AST__ATTIN, "astSetRootCorner(Plot3D): Invalid value %d "
- "supplied for RootCorner attribute", status,rootcorner);
-
-/* If the new corner is OK, mirror any axes of the encapsulated Plots
- that need mirroring (this is done to ensure that Plots look right when
- viewed from the outside of the graphics cube), and modify the Edge
- attributes in the encapsulated Plots to ensure the labels appear on the
- requested edges of the 3D graphics cube. . */
- } else {
- ChangeRootCorner( this, astGetRootCorner(this), rootcorner, status );
-
-/* Store the new value. */
- this->rootcorner = rootcorner;
- }
-}
-
-static void SetTickValues( AstPlot *this, int axis, int nmajor, double *major,
- int nminor, double *minor, int *status ){
-/*
-* Name:
-* SetTickValues
-
-* Purpose:
-* Store the tick mark values to use for a given Plot axis.
-
-* Type:
-* Private member function.
-
-* Synopsis:
-* #include "plot3d.h"
-* void SetTickValues( AstPlot *this, int axis, int nmajor,
-* double *major, int nminor, double *minor, int *status )
-
-* Class Membership:
-* Plot method (overrides the astSetTickValues method inherited form
-* the Plot class)
-
-* Description:
-* This function stores a set of tick mark values that should be used by
-* subsequent calls to astGrid.
-
-* Parameters:
-* this
-* Pointer to a Plot.
-* axis
-* The zero-based index of the axis for which tick marks values
-* have been supplied.
-* nmajor
-* The number of major tick mark values. If zero is supplied then
-* the other parameters are ignored, and subsequent calls to
-* astGrid will itself determine the tick values to be used.
-* major
-* Pointer to an array holding "nmajor" values for axis "axis" in
-* the current Frame of the suppled Plot. Major tick marks will be
-* drawn at these values.
-* nminor
-* The number of minor tick mark values.
-* minor
-* Pointer to an array holding "nminor" values for axis "axis" in
-* the current Frame of the suppled Plot. Minor tick marks will be
-* drawn at these values.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Check the global status. */
- if( !astOK ) return;
-
- astError( AST__INTER, "astSetTickValues(%s): The astSetTickValues "
- "method cannot be used with a %s (programming error).", status,
- astGetClass( this ), astGetClass( this ) );
-}
-
-static void SplitFrameSet( AstFrameSet *fset,
- AstFrameSet **fsetxy, int labelxy[2], int wcsxy[2],
- AstFrameSet **fsetxz, int labelxz[2], int wcsxz[2],
- AstFrameSet **fsetyz, int labelyz[2], int wcsyz[2],
- int *baseplane, int *status ){
-/*
-* Name:
-* SplitFrameSet
-
-* Purpose:
-* Split a 3D FrameSet into three 2D FrameSets.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* void SplitFrameSet( AstFrameSet *fset,
-* AstFrameSet **fsetxy, int labelxy[2], int wcsxy[2],
-* AstFrameSet **fsetxz, int labelxz[2], int wcsxz[2],
-* AstFrameSet **fsetyz, int labelyz[2], int wcsyz[2],
-* int *baseplane, int *status )
-
-* Class Membership:
-* Plot3D member function
-
-* Description:
-* This function returns 3 FrameSets, each of which has 2-dimensional
-* base and current Frames. Each of the 2D base Frames span a single
-* plane in the 3D base Frame of the supplied FrameSet. Likewise, each
-* of the 2D current Frames span a single plane in the 3D current Frame
-* of the supplied FrameSet. An error is reported if there is no
-* one-to-one association between the three planes in the supplied
-* current Frame and the 3 planes in the supplied base Frame.
-
-* Parameters:
-* fset
-* Pointer to a FrameSet that has a 3D base Frame and a 3D current
-* Frame.
-* fsetxy
-* Pointer to a location at which to return a pointer to a new FrameSet
-* that has a 2D base Frame and a 2D current. The base Frame spans
-* axes 1 and 2 of the 3D base Frame in "fset".
-* labelxy
-* Returned holding flags indicating if the two axes of the current
-* Frame in *fsetxy should be labelled or not.
-* wcsxy
-* Returned holding the zero based axis index within the current Frame
-* of the supplied FrameSet that corresponds to each of the two
-* current Frame axes in the "fsetxy" FrameSet.
-* fsetxz
-* Pointer to a location at which to return a pointer to a new FrameSet
-* that has a 2D base Frame and a 2D current. The base Frame spans
-* axes 1 and 3 of the 3D base Frame in "fset".
-* labelxz
-* Returned holding flags indicating if the two axes of the current
-* Frame in *fsetxz should be labelled or not.
-* wcsxz
-* Returned holding the zero based axis index within the current Frame
-* of the supplied FrameSet that corresponds to each of the two
-* current Frame axes in the "fsetxz" FrameSet.
-* fsetyz
-* Pointer to a location at which to return a pointer to a new FrameSet
-* that has a 2D base Frame and a 2D current. The base Frame spans
-* axes 2 and 3 of the 3D base Frame in "fset".
-* labelyz
-* Returned holding flags indicating if the two axes of the current
-* Frame in *fsetyz should be labelled or not.
-* wcsyz
-* Returned holding the zero based axis index within the current Frame
-* of the supplied FrameSet that corresponds to each of the two
-* current Frame axes in the "fsetxy" FrameSet.
-* baseplane
-* Index of the plane that is spanned by two connected 3D axes.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - Null pointers will be returned for the three new FrameSets if this
-* function is invoked with the global status set, or if it should fail
-* for any reason.
-* - Each returned FrameSet has 2 Frames: Frame 1 is the base Frame
-* and is spanned by 2 of the 3 axes in the base Frame of the supplied
-* FrameSet; Frame 2 is the current Frame and is spanned by 2 of the 3
-* axes in the current Frame of the supplied FrameSet. Any future changes
-* to this function that alter this structure should reflected in
-* equivalent changes to functions CreatePlots and UpdatePlots.
-*/
-
-/* Local Variables: */
- AstFrame *bfrm2d;
- AstFrame *bfrm;
- AstFrame *cfrm1d;
- AstFrame *cfrm2d;
- AstFrame *cfrm;
- AstFrame *dummy;
- AstFrameSet *fset1;
- AstFrameSet *fset2;
- AstFrameSet *fset3;
- AstMapping *map1d;
- AstMapping *map2d;
- AstMapping *map;
- AstMapping *smap;
- AstUnitMap *unit1d;
- int *axout;
- int *other_axout;
- int axin2[ 2 ];
- int axin[ 2 ];
- int i;
- int label1[ 2 ];
- int label2[ 2 ];
- int label3[ 2 ];
- int other_axin;
- int wcsax1[ 2 ];
- int wcsax2[ 2 ];
- int wcsax3[ 2 ];
-
-/* Initialise. */
- *fsetxy = NULL;
- *fsetxz = NULL;
- *fsetyz = NULL;
- *baseplane = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get the simplified base -> current Mapping form the supplied FrameSet.
- Also get the base and current Frames themselves. */
- map = astGetMapping( fset, AST__BASE, AST__CURRENT );
- smap = astSimplify( map );
- map = astAnnul( map );
- cfrm = astGetFrame( fset, AST__CURRENT );
- bfrm = astGetFrame( fset, AST__BASE );
-
-/* Create a 1D UnitMap. */
- unit1d = astUnitMap( 1, "", status );
-
-/* First try to identify a pair of base Frame axes that map onto a pair
- of current Frame axes. This will be the case for instance if the 3D
- FrameSet describes a spectral cube in which two of the axes are spanned
- by a SkyFrame. We try all three possible pairs of axes in turn until a
- pair is found succesfully. */
- for( i = 0; i < 3 && ! *fsetxy; i++ ) {
- axin[ 0 ] = ( i < 2 ) ? 0 : 1;
- axin[ 1 ] = ( i == 0 ) ? 1 : 2;
-
-/* Try to get a Mapping that connects the inputs given by axin to a
- distinct subset of outputs. */
- axout = astMapSplit( smap, 2, axin, &map2d );
-
-/* If succesful, check that the 2 inputs correspond to exactly 2 outputs. */
- if( map2d ){
- if( astGetNout( map2d ) == 2 ) {
-
-/* Get the index of the other input axis (the one not included in the pair). */
- other_axin = 3 - axin[ 0 ] - axin[ 1 ];
-
-/* Try to get a Mapping that connects this remaining input to a distinct
- subset of outputs. */
- other_axout = astMapSplit( smap, 1, &other_axin, &map1d );
-
-/* If succesful, check that the 1 input correspond to exactly 1 output. */
- if( map1d ){
- if( astGetNout( map1d ) == 1 ) {
-
-/* Pick the two axes from the 3D base and current Frames that correspond to
- the paired axes found above. */
- bfrm2d = astPickAxes( bfrm, 2, axin, NULL );
- cfrm2d = astPickAxes( cfrm, 2, axout, NULL );
-
-/* Pick the axis from the 3D current Frame that correspond to
- the other axis. */
- cfrm1d = astPickAxes( cfrm, 1, other_axout, NULL );
-
-/* Construct a FrameSet using these 2D Frames and Mapping. */
- fset1 = astFrameSet( bfrm2d, "", status );
- astAddFrame( fset1, AST__BASE, map2d, cfrm2d );
-
- bfrm2d = astAnnul( bfrm2d );
- cfrm2d = astAnnul( cfrm2d );
- map2d = astAnnul( map2d );
-
-/* Indicate that both axes in the current Frame of this FrameSet should
- be labelled. */
- label1[ 0 ] = 1;
- label1[ 1 ] = 1;
-
-/* Store the index of the axis within the supplied current Frame that
- corresponds to each axis in the current Frame of the FrameSet created
- above. */
- wcsax1[ 0 ] = axout[ 0 ];
- wcsax1[ 1 ] = axout[ 1 ];
-
-/* Pick the two axes from the 3D base Frame that correspond to the first of
- the paired axes, and the unpaired axis. Order them so that we get the
- 2 axes in the order xy, xz or yz. Also, store the index of the axis
- within the supplied current Frame that corresponds to each axis in
- the current Frame of the FrameSet created below. */
- if( i < 2 ) {
- axin2[ 0 ] = axin[ 0 ];
- axin2[ 1 ] = other_axin;
- wcsax2[ 0 ] = axout[ 0 ];
- wcsax2[ 1 ] = other_axout[ 0 ];
- } else {
- axin2[ 0 ] = other_axin;
- axin2[ 1 ] = axin[ 0 ];
- wcsax2[ 0 ] = other_axout[ 0 ];
- wcsax2[ 1 ] = axout[ 0 ];
- }
- bfrm2d = astPickAxes( bfrm, 2, axin2, NULL );
-
-/* The corresponding current Frame in the new FrameSet will be a compound
- 2D Frame holding the other current Frame axis and a copy of the input
- base Frame axis. Combine them so that we get the 2 axes in the order
- xy, xz or yz. */
- dummy = astPickAxes( bfrm, 1, axin, NULL );
- if( i < 2 ) {
- cfrm2d = (AstFrame *) astCmpFrame( dummy, cfrm1d, "", status );
- } else {
- cfrm2d = (AstFrame *) astCmpFrame( cfrm1d, dummy, "", status );
- }
- dummy = astAnnul( dummy );
-
-/* The Mapping that joins this 2D base Frame to the 2D current Frame uses
- the above 1D mapping for the other axis, and a UnitMap for the copied
- base Frame axis. */
- if( i < 2 ) {
- map2d = (AstMapping *) astCmpMap( unit1d, map1d, 0, "", status );
- } else {
- map2d = (AstMapping *) astCmpMap( map1d, unit1d, 0, "", status );
- }
-
-/* Construct a FrameSet using these 2D Frames and Mapping. */
- fset2 = astFrameSet( bfrm2d, "", status );
- astAddFrame( fset2, AST__BASE, map2d, cfrm2d );
-
- bfrm2d = astAnnul( bfrm2d );
- cfrm2d = astAnnul( cfrm2d );
- map2d = astAnnul( map2d );
-
-/* Indicate that only one of the axes in the current Frame of this FrameSet
- should be labelled. */
- if( i < 2 ) {
- label2[ 0 ] = 0;
- label2[ 1 ] = 1;
- } else {
- label2[ 0 ] = 1;
- label2[ 1 ] = 0;
- }
-
-/* Pick the two axes from the 3D base Frame that correspond to the second
- of the paired axes, and the unpaired axis. Order them so that we get the
- 2 axes in the order xy, xz or yz. Also, store the index of the axis
- within the supplied current Frame that corresponds to each axis in
- the current Frame of the FrameSet created below. */
- if( i == 0 ) {
- axin2[ 0 ] = axin[ 1 ];
- axin2[ 1 ] = other_axin;
- wcsax3[ 0 ] = axout[ 1 ];
- wcsax3[ 1 ] = other_axout[ 0 ];
- } else {
- axin2[ 0 ] = other_axin;
- axin2[ 1 ] = axin[ 1 ];
- wcsax3[ 0 ] = other_axout[ 0 ];
- wcsax3[ 1 ] = axout[ 1 ];
- }
- bfrm2d = astPickAxes( bfrm, 2, axin2, NULL );
-
-/* The corresponding current Frame in the new FrameSet will be a compound
- 2D Frame holding the other current Frame axis and a copy of the input
- base Frame axis. Combine them so that we get the 2 axes in the order
- xy, xz or yz. */
- dummy = astPickAxes( bfrm, 1, axin + 1, NULL );
- if( i == 0 ) {
- cfrm2d = (AstFrame *) astCmpFrame( dummy, cfrm1d, "", status );
- } else {
- cfrm2d = (AstFrame *) astCmpFrame( cfrm1d, dummy, "", status );
- }
- dummy = astAnnul( dummy );
-
-/* The Mapping that joins this 2D base Frame to the 2D current Frame uses
- the above 1D mapping for the other axis, and a UnitMap for the copied
- base Frame axis. */
- if( i == 0 ) {
- map2d = (AstMapping *) astCmpMap( unit1d, map1d, 0, "", status );
- } else {
- map2d = (AstMapping *) astCmpMap( map1d, unit1d, 0, "", status );
- }
-
-/* Construct a FrameSet using these 2D Frames and Mapping. */
- fset3 = astFrameSet( bfrm2d, "", status );
- astAddFrame( fset3, AST__BASE, map2d, cfrm2d );
-
- bfrm2d = astAnnul( bfrm2d );
- cfrm2d = astAnnul( cfrm2d );
- map2d = astAnnul( map2d );
-
-/* Indicate that neither axis in the current Frame of this FrameSet
- should be labelled. */
- label3[ 0 ] = 0;
- label3[ 1 ] = 0;
-
-/* Store each FrameSet in the correct returned pointer. */
- if( i == 0 ) {
- *baseplane = XY;
- *fsetxy = fset1;
- *fsetxz = fset2;
- *fsetyz = fset3;
-
- labelxy[ 0 ] = label1[ 0 ];
- labelxy[ 1 ] = label1[ 1 ];
- labelxz[ 0 ] = label2[ 0 ];
- labelxz[ 1 ] = label2[ 1 ];
- labelyz[ 0 ] = label3[ 0 ];
- labelyz[ 1 ] = label3[ 1 ];
-
- wcsxy[ 0 ] = wcsax1[ 0 ];
- wcsxy[ 1 ] = wcsax1[ 1 ];
- wcsxz[ 0 ] = wcsax2[ 0 ];
- wcsxz[ 1 ] = wcsax2[ 1 ];
- wcsyz[ 0 ] = wcsax3[ 0 ];
- wcsyz[ 1 ] = wcsax3[ 1 ];
-
- } else if( i == 1 ) {
- *baseplane = XZ;
- *fsetxy = fset2;
- *fsetxz = fset1;
- *fsetyz = fset3;
-
- labelxy[ 0 ] = label2[ 0 ];
- labelxy[ 1 ] = label2[ 1 ];
- labelxz[ 0 ] = label1[ 0 ];
- labelxz[ 1 ] = label1[ 1 ];
- labelyz[ 0 ] = label3[ 0 ];
- labelyz[ 1 ] = label3[ 1 ];
-
- wcsxy[ 0 ] = wcsax2[ 0 ];
- wcsxy[ 1 ] = wcsax2[ 1 ];
- wcsxz[ 0 ] = wcsax1[ 0 ];
- wcsxz[ 1 ] = wcsax1[ 1 ];
- wcsyz[ 0 ] = wcsax3[ 0 ];
- wcsyz[ 1 ] = wcsax3[ 1 ];
-
- } else {
- *baseplane = YZ;
- *fsetxy = fset2;
- *fsetxz = fset3;
- *fsetyz = fset1;
-
- labelxy[ 0 ] = label2[ 0 ];
- labelxy[ 1 ] = label2[ 1 ];
- labelxz[ 0 ] = label3[ 0 ];
- labelxz[ 1 ] = label3[ 1 ];
- labelyz[ 0 ] = label1[ 0 ];
- labelyz[ 1 ] = label1[ 1 ];
-
- wcsxy[ 0 ] = wcsax2[ 0 ];
- wcsxy[ 1 ] = wcsax2[ 1 ];
- wcsxz[ 0 ] = wcsax3[ 0 ];
- wcsxz[ 1 ] = wcsax3[ 1 ];
- wcsyz[ 0 ] = wcsax1[ 0 ];
- wcsyz[ 1 ] = wcsax1[ 1 ];
-
- }
-
-/* Free resources */
- cfrm1d = astAnnul( cfrm1d );
- }
-
-/* Free resources */
- map1d = astAnnul( map1d );
- other_axout = astFree( other_axout );
- }
- }
-
-/* Free resources */
- if( map2d ) map2d = astAnnul( map2d );
- axout = astFree( axout );
-
-/* Leave the loop if we now have the required FrameSets, or an error has
- occurred. */
- if( *fsetxy || !astOK ) break;
-
- }
- }
-
-/* Free resources */
- cfrm = astAnnul( cfrm );
- bfrm = astAnnul( bfrm );
- smap = astAnnul( smap );
- unit1d = astAnnul( unit1d );
-
-/* Return null pointers if an error has occurred. */
- if( !astOK ) {
- *fsetxy = astAnnul( *fsetxy );
- *fsetxz = astAnnul( *fsetxz );
- *fsetyz = astAnnul( *fsetyz );
-
-/* Report an error if the supplied FrameSet could not be split into 3
- independent 2D planes. */
- } if( ! *fsetxy ) {
- astError( AST__3DFSET, "astInitPlot3D(Plot3D): Supplied %s contains "
- "no independent axes.", status, astGetClass( fset ) );
- }
-}
-
-static void StoreAxisInfo( AstPlot3D *this, int labelxy[2], int wcsxy[2],
- int labelxz[2], int wcsxz[2], int labelyz[2],
- int wcsyz[2], int *status ) {
-/*
-* Name:
-* StoreAxisInfo
-
-* Purpose:
-* Store information connecting 3D axis with associuated 2D Plot axes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* void StoreAxisInfo( AstPlot3D *this, int labelxy[2], int wcsxy[2],
-* int labelxz[2], int wcsxz[2], int labelyz[2],
-* int wcsyz[2], int *status )
-
-* Class Membership:
-* Plot3D method.
-
-* Description:
-* This function stores information inside the Plot3D that allows each
-* 3D axis to be associated with the 2 Plots that share the 3D axis,
-* and with the axis index within each of these two Plots.
-
-* Parameters:
-* this
-* Pointer to the Plot3D.
-* labelxy
-* Flags indicating if the two axes of the current Frame in the XY
-* Plot should be labelled or not.
-* wcsxy
-* The zero based axis index within the 3D current Frame that
-* corresponds to each of the two current Frame axes in the XY Plot.
-* A value of -1 should be used for 2D axes that do not correspond
-* to any 3D axis.
-* labelxz
-* Flags indicating if the two axes of the current Frame in the XZ
-* Plot should be labelled or not.
-* wcsxz
-* The zero based axis index within the 3D current Frame that
-* corresponds to each of the two current Frame axes in the XZ Plot.
-* A value of -1 should be used for 2D axes that do not correspond
-* to any 3D axis.
-* labelyz
-* Flags indicating if the two axes of the current Frame in the YZ
-* Plot should be labelled or not.
-* wcsyz
-* The zero based axis index within the 3D current Frame that
-* corresponds to each of the two current Frame axes in the YZ Plot.
-* A value of -1 should be used for 2D axes that do not correspond
-* to any 3D axis.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- int axis2d;
- int axis3d;
- int gotfirst;
- int gotsecond;
- int temp;
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* Store information that allows each 3D WCS axis to be associated with
- a pair of Plots. Also store the WCS axis within each Plot that
- corresponds to the 3D WCS axis. Do each 3D WCS axis in turn. */
- for( axis3d = 0; axis3d < 3; axis3d++ ) {
-
-/* Indicate we have not yet found either of the two Plots that share the
- current 3D axis. */
- gotfirst = 0;
- gotsecond = 0;
-
-/* Check each of the 2 axes in the plot spanning the XY face of the 3D
- graphics cube. Break early if we have found both Plots for the current
- 3D WCS axis. */
- for( axis2d = 0; axis2d < 2 && !gotsecond; axis2d++ ) {
-
-/* See if this 2D axis corresponds to the required 3D axis. If so, store
- the Plot identifier and the 2D axis index. */
- if( wcsxy[ axis2d ] == axis3d ) {
- if( gotfirst ) {
- this->axis_plot2[ axis3d ] = XY;
- this->axis_index2[ axis3d ] = axis2d;
- gotsecond = 1;
- } else {
- this->axis_plot1[ axis3d ] = XY;
- this->axis_index1[ axis3d ] = axis2d;
- gotfirst = 1;
- }
- }
- }
-
-/* Check the plot spanning the XZ face in the same way. */
- for( axis2d = 0; axis2d < 2 && !gotsecond; axis2d++ ) {
- if( wcsxz[ axis2d ] == axis3d ) {
- if( gotfirst ) {
- this->axis_plot2[ axis3d ] = XZ;
- this->axis_index2[ axis3d ] = axis2d;
- gotsecond = 1;
- } else {
- this->axis_plot1[ axis3d ] = XZ;
- this->axis_index1[ axis3d ] = axis2d;
- gotfirst = 1;
- }
- }
- }
-
-/* Check the plot spanning the YZ face in the same way. */
- for( axis2d = 0; axis2d < 2 && !gotsecond; axis2d++ ) {
- if( wcsyz[ axis2d ] == axis3d ) {
- if( gotfirst ) {
- this->axis_plot2[ axis3d ] = YZ;
- this->axis_index2[ axis3d ] = axis2d;
- gotsecond = 1;
- } else {
- this->axis_plot1[ axis3d ] = YZ;
- this->axis_index1[ axis3d ] = axis2d;
- gotfirst = 1;
- }
- }
- }
- }
-
-/* Ensure that the first Plot within each pair is the one that is used to
- generate labels for the 3D axis. */
- for( axis2d = 0; axis2d < 2; axis2d++ ) {
- if( labelxy[ axis2d ] ) {
- axis3d = wcsxy[ axis2d ];
- if( this->axis_plot1[ axis3d ] != XY ){
- temp = this->axis_plot1[ axis3d ];
- this->axis_plot1[ axis3d ] = this->axis_plot2[ axis3d ];
- this->axis_plot2[ axis3d ] = temp;
-
- temp = this->axis_index1[ axis3d ];
- this->axis_index1[ axis3d ] = this->axis_index2[ axis3d ];
- this->axis_index1[ axis3d ] = temp;
- }
- }
- }
-
- for( axis2d = 0; axis2d < 2; axis2d++ ) {
- if( labelxz[ axis2d ] ) {
- axis3d = wcsxz[ axis2d ];
- if( this->axis_plot1[ axis3d ] != XZ ){
- temp = this->axis_plot1[ axis3d ];
- this->axis_plot1[ axis3d ] = this->axis_plot2[ axis3d ];
- this->axis_plot2[ axis3d ] = temp;
-
- temp = this->axis_index1[ axis3d ];
- this->axis_index1[ axis3d ] = this->axis_index2[ axis3d ];
- this->axis_index1[ axis3d ] = temp;
- }
- }
- }
-
- for( axis2d = 0; axis2d < 2; axis2d++ ) {
- if( labelyz[ axis2d ] ) {
- axis3d = wcsyz[ axis2d ];
- if( this->axis_plot1[ axis3d ] != YZ ){
- temp = this->axis_plot1[ axis3d ];
- this->axis_plot1[ axis3d ] = this->axis_plot2[ axis3d ];
- this->axis_plot2[ axis3d ] = temp;
-
- temp = this->axis_index1[ axis3d ];
- this->axis_index1[ axis3d ] = this->axis_index2[ axis3d ];
- this->axis_index1[ axis3d ] = temp;
- }
- }
- }
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a Plot3D.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Plot3D member function (over-rides the astTestAttrib protected
-* method inherited from the Plot class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a Plot3D's attributes.
-
-* Parameters:
-* this
-* Pointer to the Plot3D.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstPlot3D *this; /* Pointer to the Plot3D structure */
- int axis; /* Axis index */
- int len; /* Length of attrib string */
- int nc; /* Number of character read */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the Plot3D structure. */
- this = (AstPlot3D *) this_object;
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* Norm. */
-/* ----- */
- if ( !strcmp( attrib, "norm" ) ) {
- result = astTestNorm( this, 0 ) ||
- astTestNorm( this, 1 ) ||
- astTestNorm( this, 2 );
-
-/* Norm(axis). */
-/* ----------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "norm(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestNorm( this, axis - 1 );
-
-/* RootCorner. */
-/* ----------- */
- } else if ( !strcmp( attrib, "rootcorner" ) ) {
- result = astTestRootCorner( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static void Text( AstPlot *this_plot, const char *text, const double pos[],
- const float up[], const char *just, int *status ){
-/*
-* Name:
-* Text
-
-* Purpose:
-* Draw a text string for a Plot3D.
-
-* Type:
-* Private member function.
-
-* Synopsis:
-* #include "plot3d.h"
-* void Text( AstPlot *this, const char *text, const double pos[],
-* const float up[], const char *just, int *status )
-
-* Class Membership:
-* Plot3D method (overrides the Text method inherited form the Plot
-* class).
-
-* Description:
-* This function draws a string of text at a position specified in
-* the physical coordinate system of a Plot3D. The physical position
-* is transformed into graphical coordinates to determine where the
-* text should appear within the plotting area.
-*
-* The text is drawn on a 2D plane that has a normal vector given by the
-* current value of the Plot3D's "Norm" attribute.
-
-* Parameters:
-* this
-* Pointer to the Plot3D.
-* text
-* Pointer to a null-terminated character string containing the
-* text to be drawn. Trailing white space is ignored.
-* pos
-* An array, with one element for each axis of the Plot3D, giving
-* the physical coordinates of the point where the reference
-* position of the text string is to be placed.
-* up
-* An array holding the components of a vector in the "up"
-* direction of the text (in graphical coordinates). For
-* example, to get horizontal text, the vector {0.0f,1.0f} should
-* be supplied. "Up" is taken to be the projection of the positive
-* Z axis onto the plane specified by the current value of the
-* just
-* Pointer to a null-terminated character string identifying the
-* reference point for the text being drawn. The first character in
-* this string identifies the reference position in the "up" direction
-* and may be "B" (baseline), "C" (centre), "T" (top) or "M" (bottom).
-* The second character identifies the side-to-side reference position
-* and may be "L" (left), "C" (centre) or "R" (right ). The string is
-* case-insensitive, and only the first two characters are significant.
-*
-* For example, a value of "BL" means that the left end of the
-* baseline of the original (un-rotated) text is to be drawn at the
-* position given by "pos".
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstMapping *mapping; /* Pointer to graphics->physical mapping */
- AstPlot3D *this; /* Pointer to the Plot3D structure */
- AstPointSet *pset1; /* PointSet holding physical positions */
- AstPointSet *pset2; /* PointSet holding graphics positions */
- char *ltext; /* Local copy of "text" excluding trailing spaces */
- char ljust[3]; /* Upper case copy of "just" */
- const char *class; /* Object class */
- const char *method; /* Current method */
- const double **ptr1; /* Pointer to physical positions */
- double **ptr2; /* Pointer to graphics positions */
- float norm[ 3 ]; /* Single precision normal vector */
- float ref[ 3 ]; /* Single precision ref position */
- int axis; /* Axis index */
- int escs; /* Original astEscapes value */
- int naxes; /* No. of axes in the base Frame */
- int ncoord; /* No. of axes in the current Frame */
- int ulen; /* Length of "text" excluding trailing spaces */
-
-/* Check the global error status. */
- if ( !astOK || !text ) return;
-
-/* Store a pointer to the Plot3D structure. */
- this = (AstPlot3D *) this_plot;
-
-/* Store the current method and class for inclusion in error messages
- generated by lower level functions. */
- method = "astText";
- class = astClass( this );
-
-/* Check the base Frame of the Plot is 3-D. */
- naxes = astGetNin( this );
- if( naxes != 3 && astOK ){
- astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the base "
- "Frame of the supplied %s is invalid - this number should "
- "be 3.", status, method, class, naxes, class );
- }
-
-/* Ensure AST functions do not included graphical escape sequences in any
- returned text strings. This is because the Plot3D implementation of
- this method cannot currently handle graphical escape sequences. */
- escs = astEscapes( 0 );
-
-/* Establish the correct graphical attributes as defined by attributes
- with the supplied Plot. */
- astGrfAttrs( this, AST__TEXT_ID, 1, GRF__TEXT, method, class );
-
-/* Get the number of coordinates in the physical coordinate frame. */
- ncoord = astGetNout( this );
-
-/* Create a PointSet to hold the supplied physical coordinates. */
- pset1 = astPointSet( 1, ncoord, "", status );
-
-/* Allocate memory to hold pointers to the first value on each axis. */
- ptr1 = (const double **) astMalloc( sizeof( const double * )*
- (size_t)( ncoord ));
-
-/* Check the pointer can be used, then store pointers to the first value
- on each axis. */
- if( astOK ){
- for( axis = 0; axis < ncoord; axis++ ){
- ptr1[ axis ] = pos + axis;
- }
- }
-
-/* Store these pointers in the PointSet. */
- astSetPoints( pset1, (double **) ptr1 );
-
-/* Transform the supplied data from the current frame (i.e. physical
- coordinates) to the base frame (i.e. graphics coordinates) using
- the inverse Mapping defined by the Plot. */
- mapping = astGetMapping( this, AST__BASE, AST__CURRENT );
- pset2 = astTransform( mapping, pset1, 0, NULL );
- mapping = astAnnul( mapping );
-
-/* Get pointers to the graphics coordinates. */
- ptr2 = astGetPoints( pset2 );
-
-/* Take a copy of the string excluding any trailing white space. */
- ulen = astChrLen( text );
- ltext = (char *) astStore( NULL, (void *) text, ulen + 1 );
-
-/* Check the pointers can be used. */
- if( astOK ){
-
-/* Terminate the local copy of the text string. */
- ltext[ ulen ] = 0;
-
-/* Produce an upper-case copy of the first two characters in "just". */
- ljust[0] = (char) toupper( (int) just[0] );
- ljust[1] = (char) toupper( (int) just[1] );
- ljust[2] = 0;
-
-/* Convert the double precision values to single precision, checking for
- bad positions. */
- if( ptr2[0][0] != AST__BAD && ptr2[1][0] != AST__BAD &&
- ptr2[2][0] != AST__BAD ){
- ref[ 0 ] = (float) ptr2[0][0];
- ref[ 1 ] = (float) ptr2[1][0];
- ref[ 2 ] = (float) ptr2[2][0];
-
-/* If the nornmal vector has non-zero length, draw the text. */
- norm[ 0 ] = (float) astGetNorm( this, 0 );
- norm[ 1 ] = (float) astGetNorm( this, 1 );
- norm[ 2 ] = (float) astGetNorm( this, 2 );
-
-/* Since we are about to call an external function which may not be
- thread safe, prevent any other thread from executing the following code
- until the current thread has finished executing it. */
- LOCK_MUTEX2;
-
- if( norm[ 0 ] != 0.0 || norm[ 1 ] != 0.0 || norm[ 2 ] != 0.0 ){
- if( !astG3DText( ltext, ref, ljust, (float *) up, norm ) ) {
- astError( AST__GRFER, "%s(%s): Graphics error in astG3DText. ", status,
- method, class );
- }
- } else if( astOK ) {
- astError( AST__ATTIN, "%s(%s): The vector specified by the Norm "
- "attribute has zero length.", status, method, class );
- }
-
-/* Allow the next thread to proceed. */
- UNLOCK_MUTEX2;
- }
-
-/* Free the local copy of the string. */
- ltext = (char *) astFree( (void *) ltext );
-
- }
-
-/* Annul the PointSets. */
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
-
-/* Free the memory holding the pointers to the first value on each axis. */
- ptr1 = (const double **) astFree( (void *) ptr1 );
-
-/* Re-establish the original graphical attributes. */
- astGrfAttrs( this, AST__TEXT_ID, 0, GRF__TEXT, method, class );
-
-/* Restore the original value of the flag which says whether graphical
- escape sequences should be incldued in any returned text strings. */
- astEscapes( escs );
-
-/* Return */
- return;
-}
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Use a Plot to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* Plot3D member function (over-rides the astTransform protected
-* method inherited from the Plot class).
-
-* Description:
-* This function takes a Plot3D and a set of points encapsulated in a
-* PointSet and transforms the points from graphics coordinates to
-* physical coordinates (in the forward direction). No clipping or
-* normalisation is applied.
-
-* Parameters:
-* this
-* Pointer to the Plot3D.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate
-* transformation should be applied while a zero value requests the
-* inverse transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of coordinates for the Plot being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstMapping *map; /* Pointer to the mapping */
- AstPointSet *result; /* Positions in output Frame */
- AstPlot3D *this; /* The Plot3D */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the Plot3D. */
- this = (AstPlot3D *) this_mapping;
-
-/* Get the Mapping from the base to the current Frame. */
- map = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Do the transformation. */
- result = astTransform( map, in, forward, out );
-
-/* Annul the mapping. */
- map = astAnnul( map );
-
-/* If an error has occurred, annul the result. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
- return result;
-
-}
-
-static void UpdatePlots( AstPlot3D *this, int *status ) {
-/*
-* Name:
-* UpdatePlots
-
-* Purpose:
-* Update the three 2D plots stored in the Plot3D.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "plot3d.h"
-* void UpdatePlots( AstPlot3D *this )
-
-* Class Membership:
-* Plot3D method.
-
-* Description:
-* This function splits the parent FrameSet up into 3 independent 2D
-* FrameSets, each describing a 2D plane in the supplied 3D FrameSet.
-* It then uses these 2D FrameSets to update the three Plots in the
-* Plot3D, by removing the existing current Frame and adding in the
-* new current Frame with the associated Mapping.
-
-* Parameters:
-* this
-* Pointer to the Plot3D.
-
-* Notes:
-* - Each of the 3 plots has 3 Frames: Frame 1 is the base (GRAPHICS)
-* Frame; Frame 2 is spanned by 2 of the 3 axes in the base Frame of
-* the supplied FrameSet; Frame 3 is the current Frame and is spanned
-* by 2 of the 3 axes in the current Frame of the supplied FrameSet.
-* Any future changes to this function that alter this structure should
-* reflected in equivalewnt changes to function CreatePlots.
-*/
-
-/* Local Variables: */
- AstFrame *frm;
- AstFrameSet *fsetxy;
- AstFrameSet *fsetxz;
- AstFrameSet *fsetyz;
- AstFrameSet *fset;
- AstMapping *map;
- int baseplane;
- int labelxy[ 2 ];
- int labelxz[ 2 ];
- int labelyz[ 2 ];
- int wcsxy[ 2 ];
- int wcsxz[ 2 ];
- int wcsyz[ 2 ];
- int rootcorner;
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* Return without action if the Plot3D does not contain the three 2D
- Plots. This may be the case for instance if this function is called
- before the Plot3D is fully constructed. */
- if( this->plotxy && this->plotxz && this->plotyz ){
-
-/* We need a FrameSet that is equivalent to the one that was used to
- construct the Plot3D (i.e. a FrameSet that does not have the GRAPHICS
- Frame that was added by the Plot3D constructor). So take a copy of the
- parent FrameSet, remove the GRAPHICS Frame (Frame 1) and set the base
- Frame to be the Frame that was the base Frame when the Plot3D was
- constructed. */
- fset = (AstFrameSet *) astCast( this, dummy_frameset );
- astSetBase( fset, this->pix_frame );
- astRemoveFrame( fset, 1 );
-
-/* Split the supplied FrameSet up into 3 FrameSets, each with a 2D base
- and current Frame. Each of these FrameSets describes one plane of
- the 3D cube. */
- SplitFrameSet( fset, &fsetxy, labelxy, wcsxy, &fsetxz, labelxz, wcsxz,
- &fsetyz, labelyz, wcsyz, &baseplane, status );
-
-/* First do the XY Plot. Extract the current Frame and base->current
- Mapping from the new FrameSet. It is assumed that he base Frame in the
- new FrameSet is equivalent to Frame 2 in the existing Plot. This
- assumption is based on the way the CreatePlots and SplitFrameSet
- functions work, and should be reviewed if either of these functions
- is changed. */
- frm = astGetFrame( fsetxy, 2 );
- map = astGetMapping( fsetxy, 1, 2 );
-
-/* Add the new Frame into the existing Plot using the Mapping to connect
- it to Frame 2 in the Plot. It becomes the current Frame in the Plot. */
- astAddFrame( this->plotxy, 2, map, frm );
-
-/* Delete the original current Frame in the Plot since it is not needed
- any more. */
- astRemoveFrame( this->plotxy, 3 );
-
-/* Set the Plot attributes. */
- SetPlotAttr( this->plotxy, XY, labelxy, status );
-
-/* Free resources */
- fsetxy = astAnnul( fsetxy );
- map = astAnnul( map );
- frm = astAnnul( frm );
-
-/* Do the same for the XZ plot. */
- frm = astGetFrame( fsetxz, 2 );
- map = astGetMapping( fsetxz, 1, 2 );
- astAddFrame( this->plotxz, 2, map, frm );
- astRemoveFrame( this->plotxz, 3 );
- SetPlotAttr( this->plotxz, XZ, labelxz, status );
- fsetxz = astAnnul( fsetxz );
- map = astAnnul( map );
- frm = astAnnul( frm );
-
-/* Do the same for the YZ plot. */
- frm = astGetFrame( fsetyz, 2 );
- map = astGetMapping( fsetyz, 1, 2 );
- astAddFrame( this->plotyz, 2, map, frm );
- astRemoveFrame( this->plotyz, 3 );
- SetPlotAttr( this->plotyz, YZ, labelyz, status );
- fsetyz = astAnnul( fsetyz );
- map = astAnnul( map );
- frm = astAnnul( frm );
-
-/* Store information that allows each 3D WCS axis to be associatedf with
- a pair of Plots. Also store the WCS axis within each Plot that
- corresponds to the 3D WCS axis. */
- StoreAxisInfo( this, labelxy, wcsxy, labelxz, wcsxz, labelyz, wcsyz, status );
-
-/* Set up the Edges attributes in the encapsulated Plots to produce labels
- on the required edges of the 3D graphics cube. */
- rootcorner = astGetRootCorner( this );
- ChangeRootCorner( this, rootcorner, rootcorner, status );
-
-/* Store the plane spanned by two connected 3D axes. */
- this->baseplot = baseplane;
-
-/* Free remaining resources */
- fset = astAnnul( fset );
- }
-}
-
-static void VSet( AstObject *this_object, const char *settings,
- char **text, va_list args, int *status ) {
-/*
-* Name:
-* VSet
-
-* Purpose:
-* Set values for a Plot3D's attributes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frameset.h"
-* void VSet( AstObject *this, const char *settings, char **text,
-* va_list args, int *status )
-
-* Class Membership:
-* Plot3D member function (over-rides the protected astVSet
-* method inherited from the Object class).
-
-* Description:
-* This function assigns a set of attribute values for a Plot3D,
-* the attributes and their values being specified by means of a
-* string containing a comma-separated list of the form:
-*
-* "attribute1 = value1, attribute2 = value2, ... "
-*
-* Here, "attribute" specifies an attribute name and the value to
-* the right of each "=" sign should be a suitable textual
-* representation of the value to be assigned to that attribute. This
-* will be interpreted according to the attribute's data type.
-*
-* The string supplied may also contain "printf"-style format
-* specifiers identified by a "%" sign in the usual way. If
-* present, these will be substituted by values supplied as
-* optional arguments (as a va_list variable argument list), using
-* the normal "printf" rules, before the string is used.
-
-* Parameters:
-* this
-* Pointer to the Plot3D.
-* settings
-* Pointer to a null-terminated string containing a
-* comma-separated list of attribute settings.
-* text
-* Pointer to a location at which to return a pointer to dynamic
-* memory holding a copy of the expanded setting string. This memory
-* should be freed using astFree when no longer needed. If a NULL
-* pointer is supplied, no string is created.
-* args
-* The variable argument list which contains values to be
-* substituted for any "printf"-style format specifiers that
-* appear in the "settings" string.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function preserves the integrity of the Plot3D (if
-* possible) by appropriately modifying the three encapsulated Plots.
-*/
-
-/* Invoke the parent astVSet method to set the Plot3D's attribute values. */
- (*parent_vset)( this_object, settings, text, args, status );
-
-/* Update the three 2D Plots stored in the Plot3D structure so that they
- reflect this modified FrameSet. */
- UpdatePlots( (AstPlot3D *) this_object, status );
-}
-
-/* Functions which access Plot3D class attributes. */
-/* ----------------------------------------------- */
-
-/* RootCorner. */
-/* ----------- */
-/*
-*att++
-* Name:
-* RootCorner
-
-* Purpose:
-* Specifies which edges of the 3D box should be annotated.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute controls the appearance of an annotated
-c coordinate grid (drawn with the astGrid function) by determining
-f coordinate grid (drawn with the AST_GRID routine) by determining
-* which edges of the cube enclosing the 3D graphics space are used
-* for displaying numerical and descriptive axis labels. The attribute
-* value identifies one of the eight corners of the cube within
-* which graphics are being drawn (i.e. the cube specified by the
-c "graphbox" parameter when astPlot3D
-f GRAPHBOX argument when AST_PLOT3D
-* was called tp create the Plot3D). Axis labels and tick marks will
-* be placed on the three cube edges that meet at the given corner.
-*
-* The attribute value should consist of three character, each of
-* which must be either "U" or "L". The first character in the string
-* specifies the position of the corner on the first graphics axis.
-* If the character is "U" then the corner is at the upper bound on the
-* first graphics axis. If it is "L", then the corner is at the lower
-* bound on the first axis. Likewise, the second and third characters
-* in the string specify the location of the corner on the second and
-* third graphics axes.
-*
-* For instance, corner "LLL" is the corner that is at the lower bound
-* on all three graphics axes, and corner "ULU" is at the upper bound
-* on axes 1 and 3 but at the lower bound on axis 2.
-*
-* The default value is "LLL".
-
-* Applicability:
-* Plot3D
-* All Plot3Ds have this attribute.
-
-*att--
-*/
-
-/* Internally, the RootCorner is represented as an integer bit mask, with
- bit zero for the X axis, bit 1 for the Y axis and bit 2 for the Z axis.
- A bit is set if the corner is at the upper bound on the axis and unset
- if it is at the lower bound. A value of -1 indicates that the attribue
- has not been assigned a value. */
-astMAKE_GET(Plot3D,RootCorner,int,0,( this->rootcorner == -1 ? 0 : this->rootcorner))
-astMAKE_TEST(Plot3D,RootCorner,( this->rootcorner != -1 ))
-
-
-/* Norm(axis). */
-/* ----------- */
-/*
-*att++
-* Name:
-* Norm(axis)
-
-* Purpose:
-* Specifies the plane upon which a Plot3D draws text and markers.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute controls the appearance of text and markers drawn
-* by a Plot3D. It specifies the orientation of the plane upon which
-* text and markers will be drawn by all subsequent invocations of the
-c astText and astMark functions.
-f AST_TEXT and AST_MARK functions.
-*
-* When setting or getting the Norm attribute, the attribute name must
-* be qualified by an axis index in the range 1 to 3. The 3 elements of
-* the Norm attribute are together interpreted as a vector in 3D graphics
-* coordinates that is normal to the plane upon which text and marks
-* should be drawn. When testing or clearing the attribute, the axis
-* index is optional. If no index is supplied, then clearing the Norm
-* attribute will clear all three elements, and testing the Norm attribute
-* will return a non-zero value if any of the three elements are set.
-*
-* The default value is 1.0 for each of the 3 elements. The length of
-* the vector is insignificant, but an error will be reported when
-* attempting to draw text or markers if the vector has zero length.
-
-* Applicability:
-* Plot
-* All Plot3Ds have this attribute.
-
-*att--
-*/
-MAKE_CLEAR3(Norm,norm,AST__BAD,3)
-MAKE_SET3(Norm,double,norm,value,3)
-MAKE_TEST3(Norm,( this->norm[axis] != AST__BAD ),3)
-MAKE_GET3(Norm,double,AST__BAD,(this->norm[axis]!=AST__BAD?this->norm[axis]:1.0),3)
-
-
-
-/* Functions which access Plot class attributes. */
-/* --------------------------------------------- */
-
-/* First do axis specific attributes. */
-
-#define MAKE_ALL(attr,type,badval,whichplots) \
- MAKE_CLEAR(attr,whichplots) \
- MAKE_SET(attr,type,whichplots) \
- MAKE_GET(attr,type,badval )
-
-MAKE_ALL(MinTick,int,0,0)
-MAKE_ALL(Abbrev,int,0,1)
-MAKE_ALL(Gap,double,AST__BAD,1)
-MAKE_ALL(LogGap,double,AST__BAD,1)
-MAKE_ALL(LogPlot,int,0,0)
-MAKE_ALL(LogTicks,int,0,0)
-MAKE_ALL(LogLabel,int,0,1)
-MAKE_ALL(LabelUp,int,0,1)
-MAKE_ALL(DrawAxes,int,0,0)
-MAKE_ALL(LabelUnits,int,0,1)
-MAKE_ALL(MinTickLen,double,0.0,0)
-MAKE_ALL(MajTickLen,double,0.0,0)
-MAKE_ALL(NumLab,int,0,1)
-MAKE_ALL(NumLabGap,double,AST__BAD,1)
-MAKE_ALL(TextLab,int,0,1)
-MAKE_ALL(TextLabGap,double,AST__BAD,1)
-
-#undef MAKE_ALL
-
-
-/* Now do attributes that are not axis specific. */
-
-#define MAKE_ALL(attr,type) \
- MAKE_CLEAR1(attr) \
- MAKE_SET1(attr,type)
-
-MAKE_ALL(Ink,int)
-MAKE_ALL(Tol,double)
-MAKE_ALL(Invisible,int)
-MAKE_ALL(TickAll,int)
-MAKE_ALL(ForceExterior,int)
-MAKE_ALL(Border,int)
-MAKE_ALL(Clip,int)
-MAKE_ALL(ClipOp,int)
-MAKE_ALL(Escape,int)
-MAKE_ALL(Grid,int)
-MAKE_ALL(Labelling,int)
-
-#undef MAKE_ALL
-
-
-
-/* First do element-specific attributes. */
-
-#define MAKE_ALL(attr,type) \
- MAKE_CLEAR2(attr) \
- MAKE_SET2(attr,type)
-
-MAKE_ALL(Style,int)
-MAKE_ALL(Font,int)
-MAKE_ALL(Colour,int)
-MAKE_ALL(Width,double)
-MAKE_ALL(Size,double)
-
-#undef MAKE_ALL
-
-
-
-
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for Plot3D objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for Plot3D objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstPlot3D *in; /* Pointer to input Plot3D */
- AstPlot3D *out; /* Pointer to output Plot3D */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Plot3Ds. */
- in = (AstPlot3D *) objin;
- out = (AstPlot3D *) objout;
-
-/* Nullify the pointers stored in the output object since these will
- currently be pointing at the input data (since the output is a simple
- byte-for-byte copy of the input). Otherwise, the input data could be
- freed by accidient if the output object is deleted due to an error
- occuring in this function. */
- out->plotxy = NULL;
- out->plotxz = NULL;
- out->plotyz = NULL;
-
-/* Copy the encapsulated Plots */
- if( in->plotxy ) out->plotxy = astCopy( in->plotxy );
- if( in->plotxz ) out->plotxz = astCopy( in->plotxz );
- if( in->plotyz ) out->plotyz = astCopy( in->plotyz );
-
-/* If an error has occurred, free the output resources. */
- if( !astOK ) Delete( (AstObject *) out, status );
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for Plot3D objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for Plot3D objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstPlot3D *this;
-
-/* Release the memory referred to in the Plot3D structure. */
- this = (AstPlot3D *) obj;
- if( this ) {
- this->plotxy = astDelete( this->plotxy );
- this->plotxz = astDelete( this->plotxz );
- this->plotyz = astDelete( this->plotyz );
- }
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for Plot3D objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the Plot3D class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the Plot3D whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstPlot3D *this;
- double dval;
- char key[ KEY_LEN + 1 ];
- int axis;
- int helpful;
- int ival;
- int set;
- const char *text;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Plot3D structure. */
- this = (AstPlot3D *) this_object;
-
-/* Write out values representing the instance variables for the
- Plot3D class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-
-/* Norm. */
-/* ----- */
- for ( axis = 0; axis < 3; axis++ ) {
- dval = astGetNorm( this, axis );
- helpful = ( dval != -DBL_MAX );
- (void) sprintf( key, "Norm%d", axis + 1 );
- astWriteDouble( channel, key, 0, helpful, dval, "Text plane normal vector");
- }
-
-/* RootCorner. */
-/* ----------- */
- set = TestRootCorner( this, status );
- ival = set ? GetRootCorner( this, status ) : astGetRootCorner( this );
- text = RootCornerString( ival, status );
- if( text ) {
- astWriteString( channel, "RootCn", set, 1, text, "Corner where labelled axes meet" );
- } else if( astOK ) {
- astError( AST__INTER, "astDump(Plot3D): Illegal value %d found for "
- "RootCorner attribute (interbal AST programming error).", status,
- ival );
- }
-
-/* Labelled axes */
- astWriteInt( channel, "AxPlX1", 1, 1, this->axis_plot1[0],
- "Plot used to label the 3D X axis" );
- astWriteInt( channel, "AxPlY1", 1, 1, this->axis_plot1[1],
- "Plot used to label the 3D Y axis" );
- astWriteInt( channel, "AxPlZ1", 1, 1, this->axis_plot1[2],
- "Plot used to label the 3D Z axis" );
- astWriteInt( channel, "AxInX1", 1, 1, this->axis_index1[0],
- "Plot axis index used to label the 3D X axis" );
- astWriteInt( channel, "AxInY1", 1, 1, this->axis_index1[1],
- "Plot axis index used to label the 3D Y axis" );
- astWriteInt( channel, "AxInZ1", 1, 1, this->axis_index1[2],
- "Plot axis index used to label the 3D Z axis" );
-
-/* Unlabelled axes */
- astWriteInt( channel, "AxPlX2", 1, 1, this->axis_plot2[0],
- "Other Plot touching the 3D X axis" );
- astWriteInt( channel, "AxPlY2", 1, 1, this->axis_plot2[1],
- "Other Plot touching the 3D Y axis" );
- astWriteInt( channel, "AxPlZ2", 1, 1, this->axis_plot2[2],
- "Other Plot touching the 3D Z axis" );
- astWriteInt( channel, "AxInX2", 1, 1, this->axis_index2[0],
- "Other Plot axis index touching the 3D X axis" );
- astWriteInt( channel, "AxInY2", 1, 1, this->axis_index2[1],
- "Other Plot axis index touching the 3D Y axis" );
- astWriteInt( channel, "AxInZ2", 1, 1, this->axis_index2[2],
- "Other Plot axis index touching the 3D Z axis" );
-
-/* The Plot that spans the two connected axes. */
- astWriteInt( channel, "BasePl", 1, 1, this->baseplot,
- "Plot spanning two connected 3D axes" );
-
-/* XY Plot */
- astWriteObject( channel, "PlotXY", 1, 1, this->plotxy,
- "Plot describing the XY plane" );
-
-/* XZ Plot */
- astWriteObject( channel, "PlotXZ", 1, 1, this->plotxz,
- "Plot describing the XZ plane" );
-
-/* YZ Plot */
- astWriteObject( channel, "PlotYZ", 1, 1, this->plotyz,
- "Plot describing the YZ plane" );
-
-/* The index within the Plot3D FrameSet, of the original base Frame in
- the FrameSet supplied when the Plot3D was constructed. */
- astWriteInt( channel, "PixFrm", 1, 0, this->pix_frame,
- "Index of original base Frame" );
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAPlot3D and astCheckPlot3D functions using the
- macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(Plot3D,Plot)
-astMAKE_CHECK(Plot3D)
-
-
-AstPlot3D *astPlot3D_( void *frame_void, const float *graphbox,
- const double *basebox, const char *options, int *status, ...) {
-/*
-*+
-* Name:
-* astPlot3D
-
-* Purpose:
-* Create a Plot3D.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "plot3d.h"
-* AstPlot3D *astPlot3D( AstFrame *frame, const float *graphbox,
-* const double *basebox, const char *options, ..., int *status )
-
-* Class Membership:
-* Plot3D constructor.
-
-* Description:
-* This function creates a new Plot3D and optionally initialises its
-* attributes.
-*
-* The supplied Frame (or the base frame if a FrameSet was supplied) is
-* assumed to be related to the graphics world coordinate system by a
-* simple shift and scale along each axis. The mapping between graphics
-* world coordinates and this Frame is specified by supplying the
-* coordinates in both systems at the lower bounds and upper bounds corners
-* of a box on the graphics device. By default, no graphics will be
-* produced outside the supplied box, but this default behaviour can be
-* changed by setting explicit values for the various clipping attributes.
-
-* Parameters:
-* frame
-* A pointer to a Frame or FrameSet to be annotated. If a NULL pointer
-* is supplied, then a default 3-D Frame will be created to which labels,
-* etc, can be attached by setting the relevant Frame attributes.
-* graphbox
-* A pointer to an array of 6 values giving the graphics world
-* coordinates of the lower bounds and upper bound corners of a box on
-* the graphics output device. The first triple of values should be the
-* coordinates of the lower bounds corner of the box and the second
-* triple of values should be the coordinates of the upper bounds corner.
-* basebox
-* A pointer to an array of 6 values giving the coordinates in the
-* supplied Frame, or base frame of the supplied FrameSet, at the
-* lower bounds corner and upper bounds corners of the box specified
-* by parameter graphbox. These should be supplied in the same order as
-* for parameter "graphbox".
-* options
-* Pointer to a null terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new Plot3D. The syntax used is the same as for the
-* astSet method and may include "printf" format specifiers identified
-* by "%" symbols in the normal way.
-* status
-* Pointer to the inherited status variable.
-* ...
-* If the "options" string contains "%" format specifiers, then an
-* optional list of arguments may follow it in order to supply values to
-* be substituted for these specifiers. The rules for supplying these
-* are identical to those for the astSet method (and for the C "printf"
-* function).
-
-* Returned Value:
-* A pointer to the new Plot3D.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-
-* Implementation Notes:
-* - This function implements the basic Plot3D constructor which
-* is available via the protected interface to the Plot3D class.
-* A public interface is provided by the astPlot3DId_ function.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *frame; /* Pointer to Frame structure */
- AstPlot3D *new; /* Pointer to new Plot3D */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- new = NULL;
-
-/* Obtain and validate a pointer to any supplied Frame structure. */
- if( frame_void ){
- frame = astCheckFrame( frame_void );
- } else {
- frame = NULL;
- }
-
-/* Check the pointer can be used. */
- if ( astOK ) {
-
-/* Initialise the Plot3D, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitPlot3D( NULL, sizeof( AstPlot3D ), !class_init,
- &class_vtab, "Plot3D", frame, graphbox,
- basebox );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- Plot's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return a pointer to the new Plot. */
- return new;
-}
-
-AstPlot3D *astInitPlot3D_( void *mem, size_t size, int init,
- AstPlot3DVtab *vtab, const char *name,
- AstFrame *frame, const float *graphbox,
- const double *basebox, int *status ) {
-/*
-*+
-* Name:
-* astInitPlot3D
-
-* Purpose:
-* Initialise a Plot3D.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "plot3d.h"
-* AstPlot3D *astInitPlot3D( void *mem, size_t size, int init,
-* AstPlotVtab *vtab, const char *name,
-* AstFrame *frame, const float *graphbox,
-* const double *basebox )
-
-* Class Membership:
-* Plot3D initialiser.
-
-* Description:
-* This function is provided for use by class implementations to
-* initialise a new Plot3D object. It allocates memory (if
-* necessary) to accommodate the Plot3D plus any additional data
-* associated with the derived class. It then initialises a
-* Plot3D structure at the start of this memory. If the "init"
-* flag is set, it also initialises the contents of a virtual function
-* table for a Plot3D at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the Plot3D is to be
-* created. This must be of sufficient size to accommodate the
-* Plot3D data (sizeof(Plot3D)) plus any data used by
-* the derived class. If a value of NULL is given, this function
-* will allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the Plot3D (plus derived
-* class data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also stored
-* in the Plot3D structure, so a valid value must be supplied
-* even if not required for allocating memory.
-* init
-* A logical flag indicating if the Plot3D's virtual function
-* table is to be initialised. If this value is non-zero, the
-* virtual function table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new Plot3D.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object belongs
-* (it is this pointer value that will subsequently be returned by
-* the astGetClass method).
-* fset
-* A pointer to the Frame or Frameset to be annotated.
-* graphbox
-* A pointer to an array of 6 values giving the graphics coordinates
-* of the bottom left and top right corners of a box on the graphics
-* output device. The first triple of values should be the graphics
-* coordinates of the bottom left corner of the box and the second
-* triple of values are the graphics coordinates of the top right corner.
-* basebox
-* A pointer to an array of 6 values giving the coordinates in the
-* supplied Frame or base Frame of the supplied FrameSet at the bottom
-* left and top right corners of the box specified by parameter graphbox.
-* These should be supplied in the same order as for parameter "graphbox".
-
-* Returned Value:
-* A pointer to the new Plot3D.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstFrame *baseframe = NULL; /* Pointer to base frame */
- AstFrame *graphicsframe = NULL; /* Pointer to graphics frame */
- AstFrameSet *fset0 = NULL; /* The n-D FrameSet to be annotated */
- AstFrameSet *fset = NULL; /* The 2-D FrameSet to be annotated */
- AstMapping *map = NULL; /* Mapping for converting bbox -> gbox */
- AstPlot3D *new = NULL; /* Pointer to new Plot3D */
- char *mess = NULL; /* Pointer to a descriptive message */
- double djunkbox[ 4 ] = { 0.0, 0.0, 1.0, 1.0 }; /* Dummy 2D basebox */
- float fjunkbox[ 4 ] = { 0.0, 0.0, 1.0, 1.0 }; /* Dummy 2D graphbox */
- int bi; /* Index of base frame */
- int ci; /* Index of current frame */
- int i; /* Loop count */
- int ii; /* Loop count */
- int naxes; /* No. of axes in frame */
- int nfrm; /* Number of Frames in frameset */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitPlot3DVtab( vtab, name );
-
-/* First of all we need to ensure that we have a FrameSet and a base
- Frame on which to base the new Plot3D. If a NULL Frame pointer was
- supplied, create a default 3-D Frame, and then create a FrameSet
- containing just this default Frame. Also store a pointer to a
- message which can be used to describe the object within error
- messages. */
- if( !frame ){
- baseframe = astFrame( 3, "", status );
- fset = astFrameSet( baseframe, "", status );
- mess = "default 3-d Frame";
-
-/* If an object was supplied, report an error if it is not a Frame or
- an object derived from a Frame (such as a FrameSet). */
- } else if( !astIsAFrame( frame ) ){
- if( astOK ){
- astError( AST__BDOBJ, "astInitPlot3D(%s): Supplied Object (class '%s') "
- "is not a Frame.", status, name, astGetClass( frame ) );
- }
-
-/* If the supplied object is a Plot3D or an object derived from a Plot3D
- (a Plot3D is a sort of Frame and so will pass the above test), extract a
- FrameSet from the Plot3D, and clear the Domain attribute for any existing
- Frames which have Domain GRAPHICS. */
- } else if( astIsAPlot3D( frame ) ){
- fset0 = astFrameSet( frame, "", status );
- fset = astCopy( fset0 );
- fset0 = astAnnul( fset0 );
-
- for( i = 0; i < astGetNframe( fset ); i++ ) {
- graphicsframe = astGetFrame( fset, i );
- if( !strcmp( astGetDomain( graphicsframe ), "GRAPHICS" ) ) {
- astClearDomain( graphicsframe );
- }
- graphicsframe = astAnnul( graphicsframe );
- }
-
- baseframe = astGetFrame( fset, astGetBase( fset ) );
- mess = "base Frame of the supplied Plot3D";
-
-/* If the object is not a FrameSet, create a FrameSet holding the
- supplied Frame. If the Frame is not 3D, an extra 3D Frame is
- included in the FrameSet derived from axes 1, 2 and 3 of the supplied
- Frame. This new Frame becomes the base Frame. */
- } else if( !astIsAFrameSet( frame ) ){
- fset0 = astFrameSet( frame, "", status );
- mess = "supplied Frame";
- fset = Fset3D( fset0, AST__BASE, status );
- fset0 = astAnnul( fset0 );
- baseframe = astGetFrame( fset, astGetBase( fset ) );
-
-/* If a FrameSet was supplied, ensure it has a 3D base Frame.
- If the supplied FrameSet is not 3D, then a new base Frame is
- inserted into it which is derived from axes 1, 2 and 3 of the
- original base Frame. */
- } else {
- fset = Fset3D( (AstFrameSet *) frame, AST__BASE, status );
- baseframe = astGetFrame( fset, astGetBase( fset ) );
- mess = "base Frame of the supplied FrameSet";
- }
-
-/* Check that there are 3 axes in the base frame of the FrameSet. */
- naxes = astGetNaxes( baseframe );
- if ( naxes != 3 && astOK ) {
- astError( AST__NAXIN, "astInitPlot3D(%s): Number of axes (%d) in the %s "
- "is invalid - this number should be 3.", status, name, naxes, mess );
- }
-
-/* Check that no dimension of the graphbox is bad. */
- if( astISBAD(graphbox[0]) || astISBAD(graphbox[1]) ||
- astISBAD(graphbox[2]) || astISBAD(graphbox[3]) ||
- astISBAD(graphbox[4]) || astISBAD(graphbox[5]) ) {
- astError( AST__BADBX, "astInitPlot3D(%s): The plotting volume has undefined limits "
- "in the graphics world coordinate system.", status, name );
- }
-
-/* Check that no dimension of the graphbox is zero. */
- if( ( graphbox[ 3 ] == graphbox[ 0 ] ||
- graphbox[ 4 ] == graphbox[ 1 ] ||
- graphbox[ 5 ] == graphbox[ 2 ] ) && astOK ){
- astError( AST__BADBX, "astInitPlot3D(%s): The plotting volume has zero size "
- "in the graphics world coordinate system.", status, name );
- }
-
-/* Check that no dimension of the basebox is bad. */
- if( astISBAD(basebox[0]) || astISBAD(basebox[1]) ||
- astISBAD(basebox[2]) || astISBAD(basebox[3]) ||
- astISBAD(basebox[4]) || astISBAD(basebox[5]) ) {
- astError( AST__BADBX, "astInitPlot3D(%s): The limits of "
- "the %s are undefined or bad.", status, name, name );
- }
-
-/* Create a Frame which describes the graphics world coordinate system. */
- graphicsframe = astFrame( 3, "Domain=GRAPHICS,Title=Graphical Coordinates", status );
-
-/* Initialise a 2D Plot structure (the parent class) as the first component
- within the Plot3D structure, allocating memory if necessary. We supply
- dummy arguments since we will not be using the parent Plot class to
- draw anything. We supply a NULL vtab pointer so that methods defined by
- the Plot class will be used during the construction of the Plot3D. Once
- the Plot3D is fully constructed, we will use astSetVtab to establish
- the correct vtab. */
- new = (AstPlot3D *) astInitPlot( mem, size, 0, NULL, name, NULL, fjunkbox,
- djunkbox );
- if ( astOK ) {
-
-/* Initialise the Plot3D data. */
-/* ----------------------------- */
-
-/* Remove all Frames from the parent FrameSet except for the base (2D graphics)
- Frame (we leave this last Frame since an error is reported if the last
- Frame is removed from a FrameSet). We do this by repeatedly removing the
- first Frame, causing all remaining Frames to have their index reduced by 1.
- When the base Frame arrives at index 1, we skip it and start removing the
- second frame instead. */
- nfrm = astGetNframe( new );
- i = 1;
- for( ii = 0; ii < nfrm; ii++ ) {
- if( i > 1 || astGetBase( new ) != 1 ) {
- astRemoveFrame( new, i );
- } else {
- i = 2;
- }
- }
-
-/* Add in the 3D graphics Frame, using a PermMap to connect it to the
- 2D graphics Frame. */
- map = (AstMapping *) astPermMap( 2, NULL, 3, NULL, NULL, "", status );
- astAddFrame( new, 1, map, graphicsframe );
- map = astAnnul( map );
-
-/* And remove the 2D GRAPHICS Frame, leaving just the 3D GRAPHICS Frame
- in the FrameSet, with index 1. */
- astRemoveFrame( new, 1 );
-
-/* Get the index of the current (physical) and base (pixel) Frames in
- the supplied FrameSet. */
- bi = astGetBase( fset );
- ci = astGetCurrent( fset );
-
-/* Temporarily set the current Frame to be the pixel frame. */
- astSetCurrent( fset, bi );
-
-/* Get a double precision version of "graphbox", and store it in the
- Plot3D structure. */
- new->gbox[ 0 ] = (double) graphbox[ 0 ];
- new->gbox[ 1 ] = (double) graphbox[ 1 ];
- new->gbox[ 2 ] = (double) graphbox[ 2 ];
- new->gbox[ 3 ] = (double) graphbox[ 3 ];
- new->gbox[ 4 ] = (double) graphbox[ 4 ];
- new->gbox[ 5 ] = (double) graphbox[ 5 ];
-
-/* The base Frame of the supplied FrameSet is mapped linearly onto the
- graphics frame. Create a WinMap that maps the base box (within the
- base Frame of the supplied FrameSet) onto the graphics box. */
- map = (AstMapping *) astWinMap( 3, new->gbox, new->gbox + 3, basebox,
- basebox + 3, "", status );
-
-/* Add the supplied FrameSet into the Plot3D (i.e. FrameSet) created
- earlier. This leaves the graphics frame with index 1 in the
- returned Plot3D. */
- astAddFrame( (AstFrameSet *) new, 1, map, fset );
- map = astAnnul( map );
-
-/* Set the current Frame in the Plot to be the physical coordinate Frame
- (with index incremented by one because the graphics Frame has been added). */
- astSetCurrent( (AstFrameSet *) new, ci + 1 );
-
-/* Note the index of the original base Frame in the Plot3D FrameSet */
- new->pix_frame = bi + 1;
-
-/* Re-establish the original current Frame in the supplied FrameSet. */
- astSetCurrent( fset, ci );
-
-/* Initialise the Plot pointers. */
- new->plotxy = NULL;
- new->plotxz = NULL;
- new->plotyz = NULL;
-
-/* Initialise other attributes */
- new->rootcorner = -1;
-
-/* Initialise the normal vector to the plane used by astText and astMark. */
- new->norm[ 0 ] = AST__BAD;
- new->norm[ 1 ] = AST__BAD;
- new->norm[ 2 ] = AST__BAD;
-
-/* Create three 2D Plots to describe the three planes in the cube. */
- CreatePlots( new, fset, graphbox, basebox, status );
-
-/* Ensure that attempts to use the graphics interface of the parent
- Plot structure get forwarded to the relevant 3D routines defined in
- this class. */
- astGrfSet( new, "Attr", (AstGrfFun) Attr3D );
- astSetGrf( new, 1 );
-
-/* Change the virtual function table stored in the new Plot3D, from the Plot
- vtab (established when astINitPlot was called above), to the supplied
- vtab. */
- if( vtab ) astSetVtab( new, vtab );
-
-/* Ensure that these Plots use the grf functions defined by this class
- (Plot3D). This means that whenever a Plot draws anything, it will use
- the appropriate grf function defined in this class to do the drawing.
- The grf functions defined in this class, convert the grf call into a
- grf3D call apprpriate the plane spanned by the Plot. */
- Set3DGrf( new, new->plotxy, XY, status );
- Set3DGrf( new, new->plotxz, XZ, status );
- Set3DGrf( new, new->plotyz, YZ, status );
-
-/* Set up the Edges attributes in the encapsulated Plots so that labels
- appear on the requited edges. Initially, the root corner is "LLL"
- (i.e. the lower bound on every axis). */
- ChangeRootCorner( new, 0, 0, status );
- }
-
-/* Annul the frame. */
- graphicsframe = astAnnul( graphicsframe );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
-
-/* Annul the pointer to the base Frame and FrameSet. */
- baseframe = astAnnul( baseframe );
- fset = astAnnul( fset );
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-
-AstPlot3D *astLoadPlot3D_( void *mem, size_t size, AstPlot3DVtab *vtab,
- const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadPlot3D
-
-* Purpose:
-* Load a Plot3D.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "plot3d.h"
-* AstPlot3D *astLoadPlot3D( void *mem, size_t size,
-* AstPlot3DVtab *vtab,
-* const char *name, AstChannel *channel )
-
-* Class Membership:
-* Plot3D loader.
-
-* Description:
-* This function is provided to load a new Plot3D using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* Plot3D structure in this memory, using data read from the
-* input Channel.
-
-* Parameters:
-* mem
-* A pointer to the memory into which the Plot3D is to be
-* loaded. This must be of sufficient size to accommodate the
-* Plot3D data (sizeof(Plot3D)) plus any data used by
-* derived classes. If a value of NULL is given, this function
-* will allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the Plot3D (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the Plot3D structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstPlot3D) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new Plot3D. If this is NULL, a pointer
-* to the (static) virtual function table for the Plot3D class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "Plot3D" is used instead.
-
-* Returned Value:
-* A pointer to the new Plot3D.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Constants: */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- astDECLARE_GLOBALS
- AstPlot3D *new;
- char key[ KEY_LEN + 1 ];
- char *text;
- int axis;
- int i;
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this Plot3D. In this case the
- Plot3D belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstPlot3D );
- vtab = &class_vtab;
- name = "Plot3D";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitPlot3DVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Allocate memory to hold the new Object. We allocate it now rather than
- waiting for astInitObject to allocate it so that we can pass a NULL
- vtab pointer to the Plot loader, thus causing the Plot loader to use the
- function implementations provided by the Plot class rather than those
- provided by the class being instantiated. */
- if( !mem ) mem = astMalloc( size );
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built Plot3D. Pass a NULL vtab pointer so that the "new" object
- will be loaded using Plot methods rather than than Plot3D methods.
- This is important because the implementations provided by the Plot3D
- class for the Plot attribute accessors require the existence of the
- encapsulated Plots held within the Plot3D, but these have not yet been
- created. */
- new = astLoadPlot( mem, size, NULL, name, channel );
- if ( astOK ) {
-
-/* Now modify the new object to use the supplied vtab. */
- astSetVtab( new, vtab );
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "Plot3D" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* Norm. */
-/* ----- */
- for( axis = 0; axis < 3; axis++ ) {
- (void) sprintf( key, "norm%d", axis + 1 );
- new->norm[ axis ] = astReadDouble( channel, key, AST__BAD );
- if( TestNorm( new, axis, status ) ) SetNorm( new, axis, new->norm[ axis ], status );
- }
-
-/* RootCorner. */
-/* ----------- */
- text = astReadString( channel, "rootcn", " " );
- if( astOK && strcmp( text, " " ) ) {
- new->rootcorner = RootCornerInt( text, status );
- if( new->rootcorner < 0 && astOK ) {
- astError( AST__INTER, "astRead(Plot3D): Corrupt Plot3D contains "
- "invalid RootCorner attribute value (%s).", status, text );
- }
- } else {
- new->rootcorner = -1;
- }
- if( TestRootCorner( new, status ) ) SetRootCorner( new, new->rootcorner, status );
- text = astFree( text );
-
-/* Labelled axes */
- new->axis_plot1[0] = astReadInt( channel, "axplx1", -1 );
- new->axis_plot1[1] = astReadInt( channel, "axply1", -1 );
- new->axis_plot1[2] = astReadInt( channel, "axplz1", -1 );
-
- new->axis_index1[0] = astReadInt( channel, "axinx1", -1 );
- new->axis_index1[1] = astReadInt( channel, "axiny1", -1 );
- new->axis_index1[2] = astReadInt( channel, "axinz1", -1 );
-
-/* Unlabelled axes */
- new->axis_plot2[0] = astReadInt( channel, "axplx2", -1 );
- new->axis_plot2[1] = astReadInt( channel, "axply2", -1 );
- new->axis_plot2[2] = astReadInt( channel, "axplz2", -1 );
-
- new->axis_index2[0] = astReadInt( channel, "axinx2", -1 );
- new->axis_index2[1] = astReadInt( channel, "axiny2", -1 );
- new->axis_index2[2] = astReadInt( channel, "axinz2", -1 );
-
-/* Plot that spans two connected 3D axes. */
- new->baseplot = astReadInt( channel, "basepl", -1 );
-
-/* XY Plot */
- new->plotxy = astReadObject( channel, "plotxy", NULL );
-
-/* XZ Plot */
- new->plotxz = astReadObject( channel, "plotxz", NULL );
-
-/* YZ Plot */
- new->plotyz = astReadObject( channel, "plotyz", NULL );
-
-/* The index within the Plot3D FrameSet, of the original base Frame in
- the FrameSet supplied when the Plot3D was constructed. */
- new->pix_frame = astReadInt( channel, "pixfrm", AST__NOFRAME );
-
-/* Ensure that these Plots use the grf functions defined by this class
- (Plot3D). This means that whener a Plot draws anything, it will use
- the appropriate grf function defined in this class to do the drawing.
- The grf functions defined in this class, convert the grf call into a
- grf3D call apprpriate the plane spanned by the Plot. */
- Set3DGrf( new, new->plotxy, XY, status );
- Set3DGrf( new, new->plotxz, XZ, status );
- Set3DGrf( new, new->plotyz, YZ, status );
-
-/* For attributes of the parent Plot class will have been loaded
- each attribute that has a set value in the parent Plot structure,
- re-set the value so that it gets copied to the copy the to the
- encapsulated Plots. First do axis specific attributes. */
-
-#define COPY_ATTR(attr,nval) \
- for( i = 0; i < nval; i++ ) { \
- if( astTest##attr(new,i) ) astSet##attr(new,i,astGet##attr(new,i)); \
- }
-
- COPY_ATTR(MinTick,3)
- COPY_ATTR(Abbrev,3)
- COPY_ATTR(Gap,3)
- COPY_ATTR(LogGap,3)
- COPY_ATTR(LogPlot,3)
- COPY_ATTR(LogTicks,3)
- COPY_ATTR(LogLabel,3)
- COPY_ATTR(LabelUp,3)
- COPY_ATTR(DrawAxes,3)
- COPY_ATTR(LabelUnits,3)
- COPY_ATTR(MinTickLen,3)
- COPY_ATTR(MajTickLen,3)
- COPY_ATTR(NumLab,3)
- COPY_ATTR(NumLabGap,3)
- COPY_ATTR(TextLab,3)
- COPY_ATTR(TextLabGap,3)
-
- COPY_ATTR(Style,AST__NPID)
- COPY_ATTR(Font,AST__NPID)
- COPY_ATTR(Colour,AST__NPID)
- COPY_ATTR(Width,AST__NPID)
- COPY_ATTR(Size,AST__NPID)
-
-#undef COPY_ATTR
-
-/* Now do attributes that are not axis specific. */
-
-#define COPY_ATTR(attr) \
- if( astTest##attr(new) ) astSet##attr(new,astGet##attr(new));
-
- COPY_ATTR(Ink)
- COPY_ATTR(Tol)
- COPY_ATTR(Invisible)
- COPY_ATTR(TickAll)
- COPY_ATTR(ForceExterior)
- COPY_ATTR(Border)
- COPY_ATTR(Clip)
- COPY_ATTR(ClipOp)
- COPY_ATTR(Escape)
- COPY_ATTR(Grid)
- COPY_ATTR(Labelling)
-
-#undef COPY_ATTR
-
-/* If an error occurred, clean up by deleting the new Plot3D. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new Plot3D pointer. */
- return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-void astClearRootCorner_( AstPlot3D *this, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Plot3D,ClearRootCorner))( this, status );
-}
-
-void astSetRootCorner_( AstPlot3D *this, int value, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Plot3D,SetRootCorner))( this, value, status );
-}
-
-
-
-
-/* Special public interface functions. */
-/* =================================== */
-/* These provide the public interface to certain special functions
- whose public interface cannot be handled using macros (such as
- astINVOKE) alone. In general, they are named after the
- corresponding protected version of the function, but with "Id"
- appended to the name. */
-
-/* Public Interface Function Prototypes. */
-/* ------------------------------------- */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstPlot3D *astPlot3DId_( void *frame_void, const float graphbox[6],
- const double basebox[6], const char *, ... );
-
-/* Special interface function implementations. */
-/* ------------------------------------------- */
-AstPlot3D *astPlot3DId_( void *frame_void, const float graphbox[6],
- const double basebox[6], const char *options, ... ) {
-/*
-*++
-* Name:
-c astPlot3D
-f AST_PLOT3D
-
-* Purpose:
-* Create a Plot3D.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "plot3d.h"
-c AstPlot3D *astPlot3D( AstFrame *frame, const float graphbox[ 6 ],
-c const double basebox[ 6 ], const char *options, ... )
-f RESULT = AST_PLOT3D( FRAME, GRAPHBOX, BASEBOX, OPTIONS, STATUS )
-
-* Class Membership:
-* Plot3D constructor.
-
-* Description:
-* This function creates a new Plot3D and optionally initialises
-* its attributes.
-*
-* A Plot3D is a specialised form of Plot that provides facilities
-* for producing 3D graphical output.
-
-* Parameters:
-c frame
-f FRAME = INTEGER (Given)
-* Pointer to a Frame describing the physical coordinate system
-* in which to plot. A pointer to a FrameSet may also be given,
-* in which case its current Frame will be used to define the
-* physical coordinate system and its base Frame will be mapped
-* on to graphical coordinates (see below).
-*
-* If a null Object pointer (AST__NULL) is given, a default
-* 3-dimensional Frame will be used to describe the physical
-* coordinate system. Labels, etc. may then be attached to this
-* by setting the appropriate Frame attributes
-* (e.g. Label(axis)) for the Plot.
-c graphbox
-f GRAPHBOX( 6 ) = REAL (Given)
-* An array giving the position and extent of the plotting volume
-* (within the plotting space of the underlying graphics system)
-* in which graphical output is to appear. This must be
-* specified using graphical coordinates appropriate to the
-* underlying graphics system.
-*
-* The first triple of values should give the coordinates of the
-* bottom left corner of the plotting volume and the second triple
-* should give the coordinates of the top right corner. The
-* coordinate on the horizontal axis should be given first in
-* each pair. Note that the order in which these points are
-* given is important because it defines up, down, left and
-* right for subsequent graphical operations.
-c basebox
-f BASEBOX( 6 ) = DOUBLE PRECISION (Given)
-* An array giving the coordinates of two points in the supplied
-* Frame (or in the base Frame if a FrameSet was supplied) which
-* correspond to the bottom left and top right corners of the
-* plotting volume, as specified above. This range of coordinates
-* will be mapped linearly on to the plotting area. The
-* coordinates should be given in the same order as above.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new Plot3D. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-c If no initialisation is required, a zero-length string may be
-c supplied.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new Plot3D. The syntax used is identical to that for the
-f AST_SET routine. If no initialisation is required, a blank
-f value may be supplied.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astPlot3D()
-f AST_PLOT3D = INTEGER
-* A pointer to the new Plot3D.
-
-* Notes:
-* - The base Frame of the returned Plot3D will be a new Frame which
-* is created by this function to represent the coordinate system
-* of the underlying graphics system (graphical coordinates). It is
-* given a Frame index of 1 within the Plot3D. The choice of base
-* Frame (Base attribute) should not, in general, be changed once a
-* Plot3D has been created (although you could use this as a way of
-* moving the plotting area around on the plotting surface).
-c - If a Frame is supplied (via the "frame" pointer), then it
-f - If a Frame is supplied (via the FRAME pointer), then it
-* becomes the current Frame of the new Plot3D and is given a Frame
-* index of 2.
-c - If a FrameSet is supplied (via the "frame" pointer), then
-f - If a FrameSet is supplied (via the FRAME pointer), then
-* all the Frames within this FrameSet become part of the new Plot3D
-* (where their Frame indices are increased by 1), with the
-* FrameSet's current Frame becoming the current Frame of the Plot3D.
-* - If a null Object pointer (AST__NULL) is supplied (via the
-c "frame" pointer), then the returned Plot3D will contain two
-f FRAME pointer), then the returned Plot3D will contain two
-* Frames, both created by this function. The base Frame will
-* describe graphics coordinates (as above) and the current Frame
-* will be a basic Frame with no attributes set (this will
-* therefore give default values for such things as the Plot3D Title
-* and the Label on each axis). Physical coordinates will be mapped
-* linearly on to graphical coordinates.
-* - An error will result if the Frame supplied (or the base Frame
-* if a FrameSet was supplied) is not 3-dimensional.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-
-* Implementation Notes:
-* - This function implements the external (public) interface to
-* the astPlot3D constructor function. It returns an ID value
-* (instead of a true C pointer) to external users, and must be
-* provided because astPlot3D_ has a variable argument list which
-* cannot be encapsulated in a macro (where this conversion would
-* otherwise occur).
-* - Because no checking or casting of arguments is performed
-* before the function is invoked, the "frame" parameter is of type
-* (void *) and is converted from an ID value to a pointer and
-* validated within the function itself.
-* - The variable argument list also prevents this function from
-* invoking astPlot3D_ directly, so it must be a
-* re-implementation of it in all respects, except for the final
-* conversion of the result to an ID value.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *frame; /* Pointer to Frame structure */
- AstPlot3D *new; /* Pointer to new Plot3D */
- va_list args; /* Variable argument list */
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- new = NULL;
-
-/* Obtain a Frame pointer from any ID supplied and validate the
- pointer to ensure it identifies a valid Frame. */
- if( frame_void ){
- frame = astVerifyFrame( astMakePointer( frame_void ) );
- } else {
- frame = NULL;
- }
-
-/* Check the pointer can be used. */
- if ( astOK ) {
-
-/* Initialise the Plot3D, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitPlot3D( NULL, sizeof( AstPlot3D ), !class_init,
- &class_vtab, "Plot3D", frame, graphbox,
- basebox );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- Plot3D's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return an ID value for the new Plot3D. */
- return astMakeId( new );
-
-}
-
-
-
-/* Macros that define method to override the methods of the Plot class
- that are not currently implemented by this class. They just report an
- error if called. */
-
-#define METHOD1(name) \
-static void name(ARGLIST,int *status){ \
- if( !astOK ) return; \
- astError( AST__INTER, "ast##name(%s): The ast##name " \
- "method cannot be used with a %s (programming error).", status, \
- astGetClass( this ), astGetClass( this ) ); \
-}
-
-#define METHOD2(name,rettype,retval) \
-static rettype name(ARGLIST,int *status){ \
- if( !astOK ) return retval; \
- astError( AST__INTER, "ast##name(%s): The ast##name " \
- "method cannot be used with a %s (programming error).", status, \
- astGetClass( this ), astGetClass( this ) ); \
- return retval; \
-}
-
-
-#define ARGLIST AstPlot *this
-METHOD2(GetGrfContext,AstKeyMap *,NULL)
-#undef ARGLIST
-
-#define ARGLIST AstPlot *this
-METHOD1(GrfPop)
-#undef ARGLIST
-
-#define ARGLIST AstPlot *this
-METHOD1(GrfPush)
-#undef ARGLIST
-
-#define ARGLIST AstPlot *this, const char *name, AstGrfFun fun
-METHOD1(GrfSet)
-#undef ARGLIST
-
-#define ARGLIST AstPlot *this, int axis, const double start[], double length
-METHOD1(GridLine)
-#undef ARGLIST
-
-#define ARGLIST AstPlot *this, float lbnd[2], float ubnd[2]
-METHOD1(BoundingBox)
-#undef ARGLIST
-
-#define ARGLIST AstPlot *this, int iframe, const double lbnd[], const double ubnd[]
-METHOD1(Clip)
-#undef ARGLIST
-
-#define ARGLIST AstPlot *this, const double start[], const double finish[]
-METHOD1(Curve)
-#undef ARGLIST
-
-#define ARGLIST AstPlot *this, AstMapping *map
-METHOD1(GenCurve)
-#undef ARGLIST
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/plot3d.h b/ast-5.3-1/plot3d.h
deleted file mode 100644
index 7501ab4..0000000
--- a/ast-5.3-1/plot3d.h
+++ /dev/null
@@ -1,258 +0,0 @@
-#if !defined( PLOT3D_INCLUDED ) /* Include this file only once */
-#define PLOT3D_INCLUDED
-/*
-*+
-* Name:
-* plot3d.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the Plot3D class.
-
-* Invocation:
-* #include "plot3d.h"
-
-* Description:
-* This include file defines the interface to the Plot3D class
-* and provides the type definitions, function prototypes and
-* macros, etc. needed to use this class.
-
-* Copyright:
-* Copyright (C) 2007 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 6-JUN-2007 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h" /* Base Object class */
-#include "plot.h" /* Parent Plot class */
-
-/* Macros. */
-/* ======= */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-
-#if defined(astCLASS) /* Protected */
-
-#endif
-
-/* Type Definitions. */
-/* ================= */
-
-/* Plot3D structure. */
-/* ------------------- */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstPlot3D {
-
-/* Attributes inherited from the parent class. */
- AstPlot plot; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- AstPlot *plotxy; /* Plot describing the XY plane */
- AstPlot *plotxz; /* Plot describing the XZ plane */
- AstPlot *plotyz; /* Plot describing the YZ plane */
- double gbox[6]; /* Graphics box */
- int pix_frame; /* Index of original base Frame */
- int rootcorner; /* Corner at junction of the annotated axes */
- int baseplot; /* The Plot that is used to label 2 3D axes */
- int axis_plot1[3]; /* The Plot used to label each 3D axis */
- int axis_index1[3]; /* The axis index within the axis_plot1 Plot */
- int axis_plot2[3]; /* The other Plot touching each 3D axis */
- int axis_index2[3]; /* The axis index within the axis_plot2 Plot */
- double norm[3]; /* Normal vector for text plane */
-} AstPlot3D;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all objects in the
- class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstPlot3DVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstPlotVtab plot_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
- int (* GetRootCorner)( AstPlot3D *, int * );
- int (* TestRootCorner)( AstPlot3D *, int * );
- void (* SetRootCorner)( AstPlot3D *, int, int * );
- void (* ClearRootCorner)( AstPlot3D *, int * );
-
- double (* GetNorm)( AstPlot3D *, int, int * );
- int (* TestNorm)( AstPlot3D *, int, int * );
- void (* SetNorm)( AstPlot3D *, int, double, int * );
- void (* ClearNorm)( AstPlot3D *, int, int * );
-
-} AstPlot3DVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstPlot3DGlobals {
- AstPlot3DVtab Class_Vtab;
- int Class_Init;
- char GetAttrib_Buff[ 101 ];
-} AstPlot3DGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Plot3D) /* Check class membership */
-astPROTO_ISA(Plot3D) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected */
-AstPlot3D *astPlot3D_( void *, const float *, const double *, const char *, int *, ...);
-#else
-AstPlot3D *astPlot3DId_( void *, const float [], const double [], const char *, ... );
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstPlot3D *astInitPlot3D_( void *, size_t, int, AstPlot3DVtab *,
- const char *, AstFrame *, const float *,
- const double *, int * );
-
-/* Vtab initialiser. */
-void astInitPlot3DVtab_( AstPlot3DVtab *, const char *, int * );
-
-/* Loader. */
-AstPlot3D *astLoadPlot3D_( void *, size_t,
- AstPlot3DVtab *,
- const char *, AstChannel *channel, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitPlot3DGlobals_( AstPlot3DGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-
-#if defined(astCLASS) /* Protected */
-
- int astGetRootCorner_( AstPlot3D *, int * );
- int astTestRootCorner_( AstPlot3D *, int * );
- void astSetRootCorner_( AstPlot3D *, int, int * );
- void astClearRootCorner_( AstPlot3D *, int * );
-
- double astGetNorm_( AstPlot3D *, int, int * );
- int astTestNorm_( AstPlot3D *, int, int * );
- void astSetNorm_( AstPlot3D *, int, double, int * );
- void astClearNorm_( AstPlot3D *, int, int * );
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckPlot3D(this) astINVOKE_CHECK(Plot3D,this,0)
-#define astVerifyPlot3D(this) astINVOKE_CHECK(Plot3D,this,1)
-
-/* Test class membership. */
-#define astIsAPlot3D(this) astINVOKE_ISA(Plot3D,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected */
-#define astPlot3D astINVOKE(F,astPlot3D_)
-#else
-#define astPlot3D astINVOKE(F,astPlot3DId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitPlot3D(mem,size,init,vtab,name,frame,graph,base) \
-astINVOKE(O,astInitPlot3D_(mem,size,init,vtab,name,frame,graph,base,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitPlot3DVtab(vtab,name) astINVOKE(V,astInitPlot3DVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadPlot3D(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadPlot3D_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-
-/* Interfaces to protected member functions. */
-/* ----------------------------------------- */
-/* Here we make use of astCheckPlot3D to validate Plot3D pointers
- before use. This provides a contextual error report if a pointer to
- the wrong sort of object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-
-#define astGetRootCorner(this) astINVOKE(V,astGetRootCorner_(astCheckPlot3D(this),STATUS_PTR))
-#define astTestRootCorner(this) astINVOKE(V,astTestRootCorner_(astCheckPlot3D(this),STATUS_PTR))
-#define astClearRootCorner(this) astINVOKE(V,astClearRootCorner_(astCheckPlot3D(this),STATUS_PTR))
-#define astSetRootCorner(this,value) astINVOKE(V,astSetRootCorner_(astCheckPlot3D(this),value,STATUS_PTR))
-
-#define astGetNorm(this,axis) astINVOKE(V,astGetNorm_(astCheckPlot3D(this),axis,STATUS_PTR))
-#define astTestNorm(this,axis) astINVOKE(V,astTestNorm_(astCheckPlot3D(this),axis,STATUS_PTR))
-#define astClearNorm(this,axis) astINVOKE(V,astClearNorm_(astCheckPlot3D(this),axis,STATUS_PTR))
-#define astSetNorm(this,axis,value) astINVOKE(V,astSetNorm_(astCheckPlot3D(this),axis,value,STATUS_PTR))
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/pointlist.c b/ast-5.3-1/pointlist.c
deleted file mode 100644
index 11e360c..0000000
--- a/ast-5.3-1/pointlist.c
+++ /dev/null
@@ -1,3407 +0,0 @@
-/*
-*class++
-* Name:
-* PointList
-
-* Purpose:
-* A collection of points in a Frame.
-
-* Constructor Function:
-c astPointList
-f AST_POINTLIST
-
-* Description:
-* The PointList class implements a Region which represents a collection
-* of points in a Frame.
-
-* Inheritance:
-* The PointList class inherits from the Region class.
-
-* Attributes:
-* In addition to those attributes common to all Regions, every
-* PointList also has the following attributes:
-*
-* - ListSize: The number of positions stored in the PointList
-
-
-* Functions:
-c The PointList class does not define any new functions beyond those
-f The PointList class does not define any new routines beyond those
-* which are applicable to all Regions.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2009 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 22-MAR-2004 (DSB):
-* Original version.
-* 20-JAN-2009 (DSB):
-* Over-ride astRegBasePick.
-* 21-JAN-2009 (DSB):
-* - Add methods astGetEnclosure, astSetEnclosure and astPoints, and
-* attribute ListSize.
-* - Override astGetObjSize and astEqual.
-* 26-JAN-2009 (DSB):
-* Change protected constructor to accept a PointSet rather than an
-* array of doubles.
-* 6-FEB-2009 (DSB):
-* Over-ride astMapMerge.
-* 9-FEB-2009 (DSB):
-* Move methods astGetEnclosure and astSetEnclosure to Region class.
-* 8-JUL-2009 (DSB):
-* In Transform, use "ptr2", not "ptr", if we are creating a mask.
-*class--
-
-* Implementation Deficiencies:
-* - Use of simple arrays to hold lists of points is probably not
-* efficient for large numbers of points. For instance, use of k-tree
-* structures instead of arrays could result in a much more efficient
-* implementation of the Transform function. Maybe the PointSet class
-* should be extended to provide a k-tree representation as well as a
-* simple array.
-
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS PointList
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "region.h" /* Coordinate regions (parent class) */
-#include "channel.h" /* I/O channels */
-#include "pointlist.h" /* Interface definition for this class */
-#include "mapping.h" /* Position mappings */
-#include "unitmap.h" /* Unit Mapping */
-#include "frame.h" /* Coordinate systems */
-#include "cmpframe.h" /* Compound Frames */
-#include "cmpmap.h" /* Compound Mappings */
-#include "prism.h" /* Extruded Regions */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstMapping *(* parent_simplify)( AstMapping *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_getobjsize)( AstObject *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->GetAttrib_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(PointList)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(PointList,Class_Init)
-#define class_vtab astGLOBAL(PointList,Class_Vtab)
-#define getattrib_buff astGLOBAL(PointList,GetAttrib_Buff)
-
-
-#include <pthread.h>
-
-
-#else
-
-static char getattrib_buff[ 101 ];
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstPointListVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstPointList *astPointListId_( void *, int, int, int, const double *, void *, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-static int MaskLD( AstRegion *, AstMapping *, int, int, const int[], const int ubnd[], long double [], long double, int * );
-#endif
-static int MaskB( AstRegion *, AstMapping *, int, int, const int[], const int[], signed char[], signed char, int * );
-static int MaskD( AstRegion *, AstMapping *, int, int, const int[], const int[], double[], double, int * );
-static int MaskF( AstRegion *, AstMapping *, int, int, const int[], const int[], float[], float, int * );
-static int MaskI( AstRegion *, AstMapping *, int, int, const int[], const int[], int[], int, int * );
-static int MaskL( AstRegion *, AstMapping *, int, int, const int[], const int[], long int[], long int, int * );
-static int MaskS( AstRegion *, AstMapping *, int, int, const int[], const int[], short int[], short int, int * );
-static int MaskUB( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned char[], unsigned char, int * );
-static int MaskUI( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned int[], unsigned int, int * );
-static int MaskUL( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned long int[], unsigned long int, int * );
-static int MaskUS( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned short int[], unsigned short int, int * );
-
-static AstMapping *Simplify( AstMapping *, int * );
-static AstPointSet *RegBaseMesh( AstRegion *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstRegion *RegBasePick( AstRegion *, int, const int *, int * );
-static int GetClosed( AstRegion *, int * );
-static int GetListSize( AstPointList *, int * );
-static int GetObjSize( AstObject *, int * );
-static int RegPins( AstRegion *, AstPointSet *, AstRegion *, int **, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void PointListPoints( AstPointList *, AstPointSet **, int *);
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void RegBaseBox( AstRegion *, double *, double *, int * );
-static AstRegion *MergePointList( AstPointList *, AstRegion *, int, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-
-static const char *GetAttrib( AstObject *, const char *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-
-
-/* Member functions. */
-/* ================= */
-
-static void ClearAttrib( AstObject *this_object, const char *attrib,
- int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a PointList.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pointlist.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* PointList member function (over-rides the astClearAttrib
-* protected method inherited from the Object class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* PointList, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the PointList.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstPointList *this; /* Pointer to the PointList structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the PointList structure. */
- this = (AstPointList *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* Test if the name matches any of the read-only attributes of this
- class. If it does, then report an error. */
- if ( !strcmp( attrib, "listsize" ) ) {
- astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
- "value for a %s.", status, attrib, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib,
- int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a PointList.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pointlist.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* PointList member function (over-rides the protected astGetAttrib
-* method inherited from the Region class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a PointList, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the PointList.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the PointList, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the PointList. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstPointList *this; /* Pointer to the PointList structure */
- const char *result; /* Pointer value to return */
- int ival; /* Integer attribute value */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the PointList structure. */
- this = (AstPointList *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null-terminated string in an
- appropriate format. Set "result" to point at the result string. */
-
-/* ListSize. */
-/* -------- */
- if ( !strcmp( attrib, "listsize" ) ) {
- ival = astGetListSize( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int GetClosed( AstRegion *this, int *status ) {
-/*
-* Name:
-* GetClosed
-
-* Purpose:
-* Get the value of the CLosed attribute for a PointList.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pointlist.h"
-* int GetClosed( AstRegion *this, int *status )
-
-* Class Membership:
-* PointList member function (over-rides the astGetClosed method
-* inherited from the Region class).
-
-* Description:
-* This function returns the value of the Closed attribute for a
-* PointList. Since points have zero volume they consist entirely of
-* boundary. Therefore the Region is always considered to be closed
-* unless it has been negated, in which case it is always assumed to
-* be open.
-
-* Parameters:
-* this
-* Pointer to the PointList.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The value to use for the Closed attribute.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* The value to be used for the Closed attribute is always the opposite
- of the Negated attribute. */
- return ( astGetNegated( this ) == 0 );
-}
-
-static int GetListSize( AstPointList *this, int *status ) {
-/*
-*+
-* Name:
-* astGetListSize
-
-* Purpose:
-* Determine how many points there are in a PointList.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "pointlist.h"
-* int astGetListSize( AstPointList *this )
-
-* Class Membership:
-* PointList method.
-
-* Description:
-* This function returns the number of points stored in a Point|List.
-
-* Parameters:
-* this
-* Pointer to the PointList.
-
-* Returned Value:
-* The number of points in the PointList.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Return the number of points by querying the PointSet that holds the
- points. */
- return astGetNpoint( ((AstRegion *) this)->points );
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pointlist.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* PointList member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied PointList,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the PointList.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstPointList *this; /* Pointer to PointList structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the PointList structure. */
- this = (AstPointList *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by this class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
-
- result += astGetObjSize( this->lbnd );
- result += astGetObjSize( this->ubnd );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-void astInitPointListVtab_( AstPointListVtab *vtab, const char *name,
- int *status ) {
-/*
-*+
-* Name:
-* astInitPointListVtab
-
-* Purpose:
-* Initialise a virtual function table for a PointList.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "pointlist.h"
-* void astInitPointListVtab( AstPointListVtab *vtab, const char *name )
-
-* Class Membership:
-* PointList vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the PointList class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
- AstRegionVtab *region; /* Pointer to Region component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitRegionVtab( (AstRegionVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAPointList) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstRegionVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
- vtab->GetListSize = GetListSize;
- vtab->PointListPoints = PointListPoints;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
- region = (AstRegionVtab *) vtab;
-
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
-
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
-
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
-
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
- parent_simplify = mapping->Simplify;
- mapping->Simplify = Simplify;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- mapping->MapMerge = MapMerge;
-
- region->RegBaseMesh = RegBaseMesh;
- region->RegBaseBox = RegBaseBox;
- region->RegBasePick = RegBasePick;
- region->RegPins = RegPins;
- region->GetClosed = GetClosed;
- region->MaskB = MaskB;
- region->MaskD = MaskD;
- region->MaskF = MaskF;
- region->MaskI = MaskI;
- region->MaskL = MaskL;
- region->MaskS = MaskS;
- region->MaskUB = MaskUB;
- region->MaskUI = MaskUI;
- region->MaskUL = MaskUL;
- region->MaskUS = MaskUS;
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
- region->MaskLD = MaskLD;
-#endif
-
-/* Declare the class dump function. There is no copy constructor or
- destructor. */
- astSetDelete( vtab, Delete );
- astSetCopy( vtab, Copy );
- astSetDump( vtab, Dump, "PointList", "Collection of points" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-/*
-* Name:
-* Mask<X>
-
-* Purpose:
-* Mask a region of a data grid.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pointlist.h"
-* int Mask<X>( AstRegion *this, AstMapping *map, int inside, int ndim,
-* const int lbnd[], const int ubnd[], <Xtype> in[],
-* <Xtype> val )
-
-* Class Membership:
-* PointList function method (replaces the astMask<X> methods
-* inherited from the parent Region class).
-
-* Description:
-* This is a set of functions for masking out regions within gridded data
-* (e.g. an image). The functions modifies a given data grid by
-* assigning a specified value to all samples which are inside (or outside
-* if "inside" is zero) the specified Region.
-*
-* You should use a masking function which matches the numerical
-* type of the data you are processing by replacing <X> in
-* the generic function name astMask<X> by an appropriate 1- or
-* 2-character type code. For example, if you are masking data
-* with type "float", you should use the function astMaskF (see
-* the "Data Type Codes" section below for the codes appropriate to
-* other numerical types).
-
-* Parameters:
-* this
-* Pointer to a Region.
-* map
-* Pointer to a Mapping. The forward transformation should map
-* positions in the coordinate system of the supplied Region
-* into pixel coordinates as defined by the "lbnd" and "ubnd"
-* parameters. A NULL pointer can be supplied if the coordinate
-* system of the supplied Region corresponds to pixel coordinates.
-* This is equivalent to supplying a UnitMap.
-*
-* The number of inputs for this Mapping (as given by its Nin attribute)
-* should match the number of axes in the supplied Region (as given
-* by the Naxes attribute of the Region). The number of outputs for the
-* Mapping (as given by its Nout attribute) should match the number of
-* grid dimensions given by the value of "ndim" below.
-* inside
-* A boolean value which indicates which pixel are to be masked. If
-* a non-zero value is supplied, then all grid pixels which are inside
-* the supplied Region are assigned the value given by "val",
-* and all other pixels are left unchanged. If zero is supplied, then
-* all grid pixels which are not inside the supplied Region are
-* assigned the value given by "val", and all other pixels are left
-* unchanged. Note, the Negated attribute of the Region is used to
-* determine which pixel are inside the Region and which are outside.
-* So the inside of a Region which has not been negated is the same as
-* the outside of the corresponding negated Region.
-* ndim
-* The number of dimensions in the input grid. This should be at
-* least one.
-* lbnd
-* Pointer to an array of integers, with "ndim" elements,
-* containing the coordinates of the centre of the first pixel
-* in the input grid along each dimension.
-* ubnd
-* Pointer to an array of integers, with "ndim" elements,
-* containing the coordinates of the centre of the last pixel in
-* the input grid along each dimension.
-*
-* Note that "lbnd" and "ubnd" together define the shape
-* and size of the input grid, its extent along a particular
-* (j'th) dimension being ubnd[j]-lbnd[j]+1 (assuming the
-* index "j" to be zero-based). They also define
-* the input grid's coordinate system, each pixel having unit
-* extent along each dimension with integral coordinate values
-* at its centre.
-* in
-* Pointer to an array, with one element for each pixel in the
-* input grid, containing the data to be masked. The
-* numerical type of this array should match the 1- or
-* 2-character type code appended to the function name (e.g. if
-* you are using astMaskF, the type of each array element
-* should be "float").
-*
-* The storage order of data within this array should be such
-* that the index of the first grid dimension varies most
-* rapidly and that of the final dimension least rapidly
-* (i.e. Fortran array indexing is used).
-*
-* On exit, the samples specified by "inside" are set to the value
-* of "val". All other samples are left unchanged.
-* val
-* This argument should have the same type as the elements of
-* the "in" array. It specifies the value used to flag the
-* masked data (see "inside").
-
-* Returned Value:
-* The number of pixels to which a value of "badval" has been assigned.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-
-* Data Type Codes:
-* To select the appropriate masking function, you should
-* replace <X> in the generic function name astMask<X> with a
-* 1- or 2-character data type code, so as to match the numerical
-* type <Xtype> of the data you are processing, as follows:
-* - D: double
-* - F: float
-* - L: long int
-* - UL: unsigned long int
-* - I: int
-* - UI: unsigned int
-* - S: short int
-* - US: unsigned short int
-* - B: byte (signed char)
-* - UB: unsigned byte (unsigned char)
-*
-* For example, astMaskD would be used to process "double"
-* data, while astMaskS would be used to process "short int"
-* data, etc.
-*/
-/* Define a macro to implement the function for a specific data
- type. */
-#define MAKE_MASK(X,Xtype) \
-static int Mask##X( AstRegion *this, AstMapping *map, int inside, int ndim, \
- const int lbnd[], const int ubnd[], \
- Xtype in[], Xtype val, int *status ) { \
-\
-/* Local Variables: */ \
- AstFrame *grid_frame; /* Pointer to Frame describing grid coords */ \
- AstPointSet *pset1; /* Pointer to base Frame positions */ \
- AstPointSet *pset2; /* Pointer to current Frame positions */ \
- AstRegion *used_region; /* Pointer to Region to be used by astResample */ \
- Xtype *temp; /* Pointer to temp storage for retained points */ \
- double **ptr2; /* Pointer to pset2 data values */ \
- int *iv; /* Pointer to index array */ \
- int i; /* Point index */ \
- int idim; /* Loop counter for coordinate dimensions */ \
- int ii; /* Vectorised point index */ \
- int j; /* Axis index */ \
- int nax; /* Number of Region axes */ \
- int negated; /* Has Region been negated? */ \
- int nin; /* Number of Mapping input coordinates */ \
- int nout; /* Number of Mapping output coordinates */ \
- int npnt; /* Number of points in PointList */ \
- int result; /* Result value to return */ \
- int vlen; /* Length of vectorised array */ \
-\
-/* Initialise. */ \
- result = 0; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* Obtain value for the Naxes attribute of the Region. */ \
- nax = astGetNaxes( this ); \
-\
-/* If supplied, obtain values for the Nin and Nout attributes of the Mapping. */ \
- if( map ) { \
- nin = astGetNin( map ); \
- nout = astGetNout( map ); \
-\
-/* If OK, check that the number of mapping inputs matches the \
- number of axes in the Region. Report an error if necessary. */ \
- if ( astOK && ( nax != nin ) ) { \
- astError( AST__NGDIN, "astMask"#X"(%s): Bad number of mapping " \
- "inputs (%d).", status, astGetClass( this ), nin ); \
- astError( AST__NGDIN, "The %s given requires %d coordinate value%s " \
- "to specify a position.", status, \
- astGetClass( this ), nax, ( nax == 1 ) ? "" : "s" ); \
- } \
-\
-/* If OK, check that the number of mapping outputs matches the \
- number of grid dimensions. Report an error if necessary. */ \
- if ( astOK && ( ndim != nout ) ) { \
- astError( AST__NGDIN, "astMask"#X"(%s): Bad number of mapping " \
- "outputs (%d).", status, astGetClass( this ), nout ); \
- astError( AST__NGDIN, "The pixel grid requires %d coordinate value%s " \
- "to specify a position.", status, \
- ndim, ( ndim == 1 ) ? "" : "s" ); \
- } \
-\
-/* Create a new Region by mapping the supplied Region with the supplied \
- Mapping.*/ \
- grid_frame = astFrame( ndim, "Domain=grid", status ); \
- used_region = astMapRegion( this, map, grid_frame ); \
- grid_frame = astAnnul( grid_frame ); \
-\
-/* If no Mapping was supplied check that the number of grid dimensions \
- matches the number of axes in the Region.*/ \
- } else if ( astOK && ( ( ndim != nax ) || ( ndim < 1 ) ) ) { \
- used_region = NULL; \
- astError( AST__NGDIN, "astMask"#X"(%s): Bad number of input grid " \
- "dimensions (%d).", status, astGetClass( this ), ndim ); \
- if ( ndim != nax ) { \
- astError( AST__NGDIN, "The %s given requires %d coordinate value%s " \
- "to specify an input position.", status, \
- astGetClass( this ), nax, ( nax == 1 ) ? "" : "s" ); \
- } \
-\
-/* If no Mapping was supplied and the parameters look OK, clone the \
- supplied Region pointer for use later on. */ \
- } else { \
- used_region = astClone( this ); \
- } \
-\
-/* Check that the lower and upper bounds of the input grid are \
- consistent. Report an error if any pair is not. */ \
- if ( astOK ) { \
- for ( idim = 0; idim < ndim; idim++ ) { \
- if ( lbnd[ idim ] > ubnd[ idim ] ) { \
- astError( AST__GBDIN, "astMask"#X"(%s): Lower bound of " \
- "input grid (%d) exceeds corresponding upper bound " \
- "(%d).", status, astGetClass( this ), \
- lbnd[ idim ], ubnd[ idim ] ); \
- astError( AST__GBDIN, "Error in input dimension %d.", status, \
- idim + 1 ); \
- break; \
- } \
- } \
- } \
-\
-/* Get the PointSet in the base Frame of the Region's FrameSet, and \
- transform to the current (GRID) Frame. */ \
- pset1 = used_region->points; \
- pset2 = astRegTransform( used_region, pset1, 1, NULL, NULL ); \
- ptr2 =astGetPoints( pset2 ); \
-\
-/* Allocate memory to hold the corresponding vector indices. */ \
- npnt = astGetNpoint( pset2 ); \
- iv = astMalloc( sizeof(int)*(size_t) npnt ); \
- if( astOK ) { \
-\
-/* Convert the transformed GRID positions into integer indices into the \
- vectorised data array. Also form the total size of the data array. */ \
- vlen = 0; \
- for( i = 0; i < npnt; i++ ) { \
- vlen = 1; \
- ii = 0; \
- for( j = 0; j < ndim; j++ ) { \
- ii += vlen*( (int)( ptr2[ j ][ i ] + 0.5 ) - lbnd[ j ] ); \
- vlen *= ubnd[ i ] - lbnd[ i ] + 1; \
- } \
- iv[ i ] = ii; \
- } \
-\
-/* See if the Region is negated. */ \
- negated = astGetNegated( used_region ); \
-\
-/* If necessary, set the transformed pixel coords to the supplied value. */ \
- if( ( inside && !negated ) || ( !inside && negated ) ) { \
- for( i = 0; i < npnt; i++ ) in[ iv[ i ] ] = val; \
- result = npnt; \
-\
-/* If necessary, set all except the transformed pixel coords to the supplied \
- value. */ \
- } else { \
- temp = astMalloc( sizeof( Xtype )*(size_t)npnt ); \
- if( astOK ) { \
- for( i = 0; i < npnt; i++ ) temp[ i ] = in[ iv[ i ] ]; \
- for( i = 0; i < vlen; i++ ) in[ i ] = val; \
- for( i = 0; i < npnt; i++ ) in[ iv[ i ] ] = temp[ i ]; \
- result = vlen - npnt; \
- } \
- temp = astFree( temp ); \
- } \
- } \
-\
-/* Free resources */ \
- iv = astFree( iv ); \
- pset2 = astAnnul( pset2 ); \
- used_region = astAnnul( used_region ); \
-\
-/* If an error occurred, clear the returned result. */ \
- if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
- return result; \
-}
-
-/* Expand the above macro to generate a function for each required
- data type. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-MAKE_MASK(LD,long double)
-#endif
-MAKE_MASK(D,double)
-MAKE_MASK(F,float)
-MAKE_MASK(L,long int)
-MAKE_MASK(UL,unsigned long int)
-MAKE_MASK(I,int)
-MAKE_MASK(UI,unsigned int)
-MAKE_MASK(S,short int)
-MAKE_MASK(US,unsigned short int)
-MAKE_MASK(B,signed char)
-MAKE_MASK(UB,unsigned char)
-
-/* Undefine the macro. */
-#undef MAKE_MASK
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a PointList.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* PointList method (over-rides the protected astMapMerge method
-* inherited from the Region class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated PointList in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated PointList with a Mapping which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated PointList which is to be merged with
-* its neighbours. This should be a cloned copy of the PointList
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* PointList it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated PointList resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstPointList *oldint; /* Pointer to supplied PointList */
- AstMapping *map; /* Pointer to adjacent Mapping */
- AstMapping *new; /* Simplified or merged Region */
- int i1; /* Index of first Mapping merged */
- int i; /* Loop counter */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = -1;
- i1 = -1;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the PointList. */
- oldint = (AstPointList *) this;
-
-/* First of all, see if the PointList can be replaced by a simpler Region,
- without reference to the neighbouring Regions in the list. */
-/* =====================================================================*/
-
-/* Try to simplify the PointList. If the pointer value has changed, we assume
- some simplification took place. */
- new = astSimplify( oldint );
- if( new != (AstMapping *) oldint ) {
-
-/* Annul the PointList pointer in the list and replace it with the new Region
- pointer, and indicate that the forward transformation of the returned
- Region should be used (not really needed but keeps things clean). */
- (void) astAnnul( ( *map_list )[ where ] );
- ( *map_list )[ where ] = new;
- ( *invert_list )[ where ] = 0;
-
-/* Return the index of the first modified element. */
- result = where;
-
-/* If the PointList itself could not be simplified, see if it can be merged
- with the Regions on either side of it in the list. We can only merge
- in parallel. */
-/* =====================================================================*/
- } else if( ! series ){
- new = astAnnul( new );
-
-/* Attempt to merge the PointList with its lower neighbour (if any). */
- if( where > 0 ) {
- i1 = where - 1;
- map = ( *map_list )[ where - 1 ];
- if( astIsARegion( map ) ) {
- new = (AstMapping *) MergePointList( oldint, (AstRegion *) map,
- 0, status );
- }
- }
-
-/* If this did not produced a merged Region, attempt to merge the PointList
- with its upper neighbour (if any). */
- if( !new && where < *nmap - 1 ) {
- i1 = where;
- map = ( *map_list )[ where + 1 ];
- if( astIsARegion( map ) ) {
- new = (AstMapping *) MergePointList( oldint, (AstRegion *) map,
- 1, status );
- }
- }
-
-/* If succesfull... */
- if( new ){
-
-/* Annul the first of the two Mappings, and replace it with the merged
- Region. Also clear the invert flag. */
- (void) astAnnul( ( *map_list )[ i1 ] );
- ( *map_list )[ i1 ] = new;
- ( *invert_list )[ i1 ] = 0;
-
-/* Annul the second of the two Mappings, and shuffle down the rest of the
- list to fill the gap. */
- (void) astAnnul( ( *map_list )[ i1 + 1 ] );
- for ( i = i1 + 2; i < *nmap; i++ ) {
- ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
- ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
- }
-
-/* Clear the vacated element at the end. */
- ( *map_list )[ *nmap - 1 ] = NULL;
- ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
- modified element. */
- ( *nmap )--;
- result = i1;
- }
-
- } else {
- new = astAnnul( new );
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstRegion *MergePointList( AstPointList *this, AstRegion *reg,
- int plsfirst, int *status ) {
-/*
-* Name:
-* MergePointList
-
-* Purpose:
-* Attempt to merge a PointList with another Region to form a Region of
-* higher dimensionality.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pointlist.h"
-* AstRegion *MergePointList( AstPointList *this, AstRegion *reg,
-* int plsfirst, int *status )
-
-* Class Membership:
-* PointList member function.
-
-* Description:
-* This function attempts to combine the supplied Regions together
-* into a Region of higher dimensionality.
-
-* Parameters:
-* this
-* Pointer to a PointList.
-* reg
-* Pointer to another Region.
-* plsfirst
-* If non-zero, then the PointList axes are put first in the new Region.
-* Otherwise, the other Region's axes are put first.
-* status
-* Pointer to the inherited status value.
-
-* Returned Value:
-* A pointer to a new region, or NULL if the supplied Regions could
-* not be merged.
-*/
-
-/* Local Variables: */
- AstFrame *bfrm; /* Pointer to base Frame for "result" */
- AstFrame *cfrm; /* Pointer to current Frame for "result" */
- AstFrame *frm_reg; /* Pointer to Frame from "reg" */
- AstFrame *frm_this; /* Pointer to Frame from "this" */
- AstMapping *bcmap; /* Base->current Mapping for "result" */
- AstMapping *map_reg; /* Base->current Mapping from "reg" */
- AstMapping *map_this; /* Base->current Mapping from "this" */
- AstMapping *sbunc; /* Simplified uncertainty */
- AstPointSet *pset_new; /* PointSet for new PointList */
- AstPointSet *pset_reg; /* PointSet from reg */
- AstPointSet *pset_this; /* PointSet from this */
- AstRegion *bunc; /* Base Frame uncertainty Region */
- AstRegion *new; /* Pointer to new PointList in base Frame */
- AstRegion *result; /* Pointer to returned PointList in current Frame */
- AstRegion *unc_reg; /* Current Frame uncertainty Region from "reg" */
- AstRegion *unc_this; /* Current Frame uncertainty Region from "this" */
- double **ptr_new; /* PointSet data pointers for new PointList */
- double **ptr_reg; /* PointSet data pointers for reg */
- double **ptr_this; /* PointSet data pointers for this */
- double fac_reg; /* Ratio of used to default MeshSize for "reg" */
- double fac_this; /* Ratio of used to default MeshSize for "this" */
- int i; /* Axis index */
- int msz_reg; /* Original MeshSize for "reg" */
- int msz_reg_set; /* Was MeshSize originally set for "reg"? */
- int msz_this; /* Original MeshSize for "this" */
- int msz_this_set; /* Was MeshSize originally set for "this"? */
- int nax; /* Number of axes in "result" */
- int nax_reg; /* Number of axes in "reg" */
- int nax_this; /* Number of axes in "this" */
- int neg_reg; /* Negated attribute value for other supplied Region */
- int neg_this; /* Negated attribute value for supplied PointList */
-
-/* Initialise */
- result = NULL;
-
-/* Check the local error status. */
- if ( !astOK ) return result;
-
-/* Get the Closed attributes of the two Regions. They must be the same in
- each Region if we are to merge the Regions. In addition, in order to
- merge, either both Regions must have a defined uncertainty, or neither
- Region must have a defined Uncertainty. */
- if( astGetClosed( this ) == astGetClosed( reg ) &&
- astTestUnc( this ) == astTestUnc( reg ) ) {
-
-/* Get the Nagated attributes of the two Regions. */
- neg_this = astGetNegated( this );
- neg_reg = astGetNegated( reg );
-
-/* We only check for merging with another PointList (other classes such
- as Box and Interval check for merging of PointLists with other classes).
- The result will be an PointList. Both Regions must have the same value
- for the Negated flag, and can contain only a single point. */
- if( astIsAPointList( reg ) && neg_this == neg_reg &&
- astGetListSize( this ) == 1 &&
- astGetListSize( (AstPointList *) reg ) == 1 ) {
-
-/* Get the number of axes in the two supplied Regions. */
- nax_reg = astGetNaxes( reg );
- nax_this = astGetNaxes( this );
-
-/* Get the number of axes the combination will have. */
- nax = nax_reg + nax_this;
-
-/* Get the base Frames from the two Region FrameSets, and combine them
- into a single CmpFrame that will be used to create the new Region. */
- frm_this = astGetFrame( ((AstRegion *) this)->frameset, AST__BASE );
- frm_reg = astGetFrame( reg->frameset, AST__BASE );
-
- if( plsfirst ) {
- bfrm = (AstFrame *) astCmpFrame( frm_this, frm_reg, "", status );
- } else {
- bfrm = (AstFrame *) astCmpFrame( frm_reg, frm_this, "", status );
- }
-
- frm_this = astAnnul( frm_this );
- frm_reg = astAnnul( frm_reg );
-
-/* Get pointers to the coordinate data in the two PointLists */
- pset_this = ((AstRegion *) this)->points;
- ptr_this = astGetPoints( pset_this );
- pset_reg = reg->points;
- ptr_reg = astGetPoints( pset_reg );
-
-/* Create a PointSet to hold the points for the returned PointList. */
- pset_new = astPointSet( 1, nax, "", status );
-
-/* Get pointers to its data. */
- ptr_new = astGetPoints( pset_new );
-
-/* Check pointers can be used safely. */
- if( astOK ) {
-
-/* Copy the point positions fon the selected axes into the arrays allocated
- above, in the requested order. */
- if( plsfirst ) {
- for( i = 0; i < nax_this; i++ ) {
- ptr_new[ i ][ 0 ] = ptr_this[ i ][ 0 ];
- }
- for( ; i < nax; i++ ) {
- ptr_new[ i ][ 0 ] = ptr_reg[ i - nax_this ][ 0 ];
- }
-
- } else {
- for( i = 0; i < nax_reg; i++ ) {
- ptr_new[ i ][ 0 ] = ptr_reg[ i ][ 0 ];
- }
- for( ; i < nax; i++ ) {
- ptr_new[ i ][ 0 ] = ptr_this[ i - nax_reg ][ 0 ];
- }
- }
-
-/* Create the new PointList. */
- new = (AstRegion *) astPointList( bfrm, pset_new, NULL, "",
- status );
-
-/* Propagate remaining attributes of the supplied Region to it. */
- astRegOverlay( new, this, 1 );
-
-/* Ensure the Negated flag is set correctly in the returned PointList. */
- if( neg_this ) {
- astSetNegated( new, neg_this );
- } else {
- astClearNegated( new );
- }
-
-/* If both the supplied Regions have uncertainty, assign the new Region an
- uncertainty. */
- if( astTestUnc( this ) && astTestUnc( reg ) ) {
-
-/* Get the uncertainties from the two supplied Regions. */
- unc_this = astGetUncFrm( this, AST__BASE );
- unc_reg = astGetUncFrm( reg, AST__BASE );
-
-/* Combine them into a single Region (a Prism), in the correct order. */
- if( plsfirst ) {
- bunc = (AstRegion *) astPrism( unc_this, unc_reg, "", status );
- } else {
- bunc = (AstRegion *) astPrism( unc_reg, unc_this, "", status );
- }
-
-/* Attempt to simplify the Prism. */
- sbunc = astSimplify( bunc );
-
-/* Use the simplified Prism as the uncertainty for the returned Region. */
- astSetUnc( new, sbunc );
-
-/* Free resources. */
- sbunc = astAnnul( sbunc );
- bunc = astAnnul( bunc );
- unc_reg = astAnnul( unc_reg );
- unc_this = astAnnul( unc_this );
- }
-
-/* Get the current Frames from the two Region FrameSets, and combine them
- into a single CmpFrame. */
- frm_this = astGetFrame( ((AstRegion *) this)->frameset, AST__CURRENT );
- frm_reg = astGetFrame( reg->frameset, AST__CURRENT );
-
- if( plsfirst ) {
- cfrm = (AstFrame *) astCmpFrame( frm_this, frm_reg, "", status );
- } else {
- cfrm = (AstFrame *) astCmpFrame( frm_reg, frm_this, "", status );
- }
-
-/* Get the base -> current Mappings from the two Region FrameSets, and
- combine them into a single parallel CmpMap that connects bfrm and cfrm. */
- map_this = astGetMapping( ((AstRegion *) this)->frameset, AST__BASE,
- AST__CURRENT );
- map_reg = astGetMapping( reg->frameset, AST__BASE, AST__CURRENT );
-
- if( plsfirst ) {
- bcmap = (AstMapping *) astCmpMap( map_this, map_reg, 0, "",
- status );
- } else {
- bcmap = (AstMapping *) astCmpMap( map_reg, map_this, 0, "",
- status );
- }
-
-/* Map the new Region into the new current Frame. */
- result = astMapRegion( new, bcmap, cfrm );
-
-/* The filling factor in the returned is the product of the filling
- factors for the two supplied Regions. */
- if( astTestFillFactor( reg ) || astTestFillFactor( this ) ) {
- astSetFillFactor( result, astGetFillFactor( reg )*
- astGetFillFactor( this ) );
- }
-
-/* If the MeshSize value is set in either supplied Region, set a value
- for the returned Region which scales the default value by the
- product of the scaling factors for the two supplied Regions. First see
- if either MeshSize value is set. */
- msz_this_set = astTestMeshSize( this );
- msz_reg_set = astTestMeshSize( reg );
- if( msz_this_set || msz_reg_set ) {
-
-/* If so, get the two MeshSize values (one of which may be a default
- value), and then clear them so that the default value will be returned
- in future. */
- msz_this = astGetMeshSize( this );
- msz_reg = astGetMeshSize( reg );
- astClearMeshSize( this );
- astClearMeshSize( reg );
-
-/* Get the ratio of the used MeshSize to the default MeshSize for both
- Regions. */
- fac_this = (double)msz_this/(double)astGetMeshSize( this );
- fac_reg = (double)msz_reg/(double)astGetMeshSize( reg );
-
-/* The MeshSize of the returned Returned is the default value scaled by
- the product of the two ratios found above. */
- astSetMeshSize( result, fac_this*fac_reg*astGetMeshSize( result ) );
-
-/* Re-instate the original MeshSize values for the supplied Regions (if
- set) */
- if( msz_this_set ) astSetMeshSize( this, msz_this );
- if( msz_reg_set ) astSetMeshSize( reg, msz_reg );
- }
-
-/* Free remaining resources */
- frm_this = astAnnul( frm_this );
- frm_reg = astAnnul( frm_reg );
- map_this = astAnnul( map_this );
- map_reg = astAnnul( map_reg );
- bcmap = astAnnul( bcmap );
- cfrm = astAnnul( cfrm );
- new = astAnnul( new );
- }
- bfrm = astAnnul( bfrm );
- pset_new = astAnnul( pset_new );
-
- }
- }
-
-/* If an error has occurred, annul the returned pointer. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-void PointListPoints( AstPointList *this, AstPointSet **pset, int *status) {
-/*
-*+
-* Name:
-* astPointListPoints
-
-* Purpose:
-* Return the defining points of a PointList.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "pointlist.h"
-* astPointListPoints( AstPointList *this, AstPointSet **pset )
-
-* Class Membership:
-* Region virtual function.
-
-* Description:
-* This function returns the axis values at the points defining the
-* supplied PointList.
-
-* Parameters:
-* this
-* Pointer to the PointList.
-* pset
-* Address of a location at which to return a pointer to a PointSet
-* holding the points in the PointList, in the base Frame of the
-* encapsulated FrameSet. The returned Pointer should be annulled
-* when no longer needed.
-
-*-
-*/
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* Return a clone of the PointSet holding the points defining the PointList. */
- *pset = astClone( ((AstRegion *) this)->points );
-
-}
-
-static void RegBaseBox( AstRegion *this_region, double *lbnd, double *ubnd, int *status ){
-/*
-* Name:
-* RegBaseBox
-
-* Purpose:
-* Returns the bounding box of an un-negated Region in the base Frame of
-* the encapsulated FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pointlist.h"
-* void astRegBaseBox( AstRegion *this, double *lbnd, double *ubnd, int *status )
-
-* Class Membership:
-* PointList member function (over-rides the astRegBaseBox protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns the upper and lower axis bounds of a Region in
-* the base Frame of the encapsulated FrameSet, assuming the Region
-* has not been negated. That is, the value of the Negated attribute
-* is ignored.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* lbnd
-* Pointer to an array in which to return the lower axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-* ubnd
-* Pointer to an array in which to return the upper axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstFrame *frm; /* Pointer to encapsulated Frame */
- AstPointList *this; /* Pointer to PointList structure */
- AstPointSet *pset; /* Pointer to PointSet defining the Region */
- double **ptr; /* Pointer to PointSet data */
- double *p; /* Pointer to next axis value */
- double *lb; /* Pointer to lower limit array */
- double *ub; /* Pointer to upper limit array */
- double d; /* Axis offset from refernce value */
- double p0; /* Reference axis value */
- int ic; /* Axis index */
- int ip; /* Point index */
- int nb; /* Number of bytes to be copied */
- int nc; /* No. of axes in base Frame */
- int np; /* No. of points in PointSet */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the PointList structure. */
- this = (AstPointList *) this_region;
-
-/* Calculate the number of bytes in each array. */
- nb = sizeof( double )*(size_t) astGetNaxes( this );
-
-/* If the base Frame bounding box has not yet been found, find it now and
- store it in the PointList structure. */
- if( !this->lbnd || !this->ubnd ) {
-
-/* Allocate memory to store the bounding box in the PointList structure. */
- lb = astMalloc( nb );
- ub = astMalloc( nb );
-
-/* Get the axis values for the PointSet which defines the location and
- extent of the region in the base Frame of the encapsulated FrameSet. */
- pset = this_region->points;
- ptr = astGetPoints( pset );
- nc = astGetNcoord( pset );
- np = astGetNpoint( pset );
-
-/* Get a pointer to the base Frame in the encaposulated FrameSet. */
- frm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Check pointers can be used safely. */
- if( astOK ) {
-
-/* Find the bounds on each axis in turn. */
- for( ic = 0; ic < nc; ic++ ) {
-
-/* We first find the max and min axis offsets from the first point. We
- used astAxDistance to cater for the possbility that the Frame may be a
- SkyFrame and thus have circular redundancy. */
- p = ptr[ ic ] + 1;
- p0 = p[ -1 ];
- lb[ ic ] = 0.0;
- ub[ ic ] = 0.0;
- for( ip = 1; ip < np; ip++, p++ ) {
- d = astAxDistance( frm, ic + 1, p0, *p );
- if( d < lb[ ic ] ) lb[ ic ] = d;
- if( d > ub[ ic ] ) ub[ ic ] = d;
- }
-
-/* Now convert these offsets to actual axis values. */
- lb[ ic ] = astAxOffset( frm, ic + 1, p0, lb[ ic ] );
- ub[ ic ] = astAxOffset( frm, ic + 1, p0, ub[ ic ] );
-
- }
- }
-
-/* Free resources */
- frm = astAnnul( frm );
-
-/* Store the pointers in the PointList structure. */
- if( astOK ) {
- this->lbnd = lb;
- this->ubnd = ub;
- } else {
- this->lbnd = astFree( this->lbnd );
- this->ubnd = astFree( this->ubnd );
- }
- }
-
-/* If the bounding box has been found succesfully, copy it into the supplied
- arrays. */
- if( astOK ) {
- memcpy( lbnd, this->lbnd, nb );
- memcpy( ubnd, this->ubnd, nb );
- }
-
-}
-
-static AstPointSet *RegBaseMesh( AstRegion *this, int *status ){
-/*
-* Name:
-* RegBaseMesh
-
-* Purpose:
-* Return a PointSet containing a mesh of points on the boundary of a
-* Region in its base Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pointlist.h"
-* AstPointSet *astRegBaseMesh( AstRegion *this, int *status )
-
-* Class Membership:
-* PointList member function (over-rides the astRegBaseMesh protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a PointSet containing a mesh of points on the
-* boundary of the Region. The points refer to the base Frame of
-* the encapsulated FrameSet.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the PointSet. The axis values in this PointSet will have
-* associated accuracies derived from the accuracies which were
-* supplied when the Region was created.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-
-*/
-
-/* Local Variables: */
- AstPointSet *result;
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* If the Region structure contains a pointer to a PointSet holding
- a previously created mesh, return it. */
- if( this->basemesh ) {
- result = astClone( this->basemesh );
-
-/* Otherwise, create a new mesh. */
- } else {
-
-/* It is just a copy of the encapsulated PointSet. */
- result = astCopy( this->points );
-
-/* Same the returned pointer in the Region structure so that it does not
- need to be created again next time this function is called. */
- if( astOK && result ) this->basemesh = astClone( result );
- }
-
-/* Annul the result if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-static AstRegion *RegBasePick( AstRegion *this_region, int naxes,
- const int *axes, int *status ){
-/*
-* Name:
-* RegBasePick
-
-* Purpose:
-* Return a Region formed by picking selected base Frame axes from the
-* supplied Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pointlist.h"
-* AstRegion *RegBasePick( AstRegion *this, int naxes, const int *axes,
-* int *status )
-
-* Class Membership:
-* PointList member function (over-rides the astRegBasePick protected
-* method inherited from the Region class).
-
-* Description:
-* This function attempts to return a Region that is spanned by selected
-* axes from the base Frame of the encapsulated FrameSet of the supplied
-* Region. This may or may not be possible, depending on the class of
-* Region. If it is not possible a NULL pointer is returned.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* naxes
-* The number of base Frame axes to select.
-* axes
-* An array holding the zero-based indices of the base Frame axes
-* that are to be selected.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the Region, or NULL if no region can be formed.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFrame *bfrm; /* The base Frame in the supplied Region */
- AstFrame *frm; /* The base Frame in the returned Region */
- AstPointSet *pset; /* Holds axis values defining the supplied Region */
- AstPointSet *pset_new; /* Holds axis values defining the returned Region */
- AstRegion *bunc; /* The uncertainty in the supplied Region */
- AstRegion *result; /* Returned Region */
- AstRegion *unc; /* The uncertainty in the returned Region */
- double **ptr; /* Holds axis values defining the supplied Region */
- double **ptr_new; /* Holds axis values defining the returned Region */
- double *p; /* Pointer to next input axis value */
- double *q; /* Pointer to next output axis value */
- int i; /* Index of axis within returned Region */
- int j; /* Point index */
- int npnt; /* Number of points in PointList */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the base Frame of the encapsulated FrameSet. */
- bfrm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Create a Frame by picking the selected axes from the base Frame of the
- encapsulated FrameSet. */
- frm = astPickAxes( bfrm, naxes, axes, NULL );
-
-/* Get the uncertainty Region (if any) within the base Frame of the supplied
- Region, and select the required axes from it. If the resulting Object
- is not a Region, annul it so that the returned Region will have no
- uncertainty. */
- if( astTestUnc( this_region ) ) {
- bunc = astGetUncFrm( this_region, AST__BASE );
- unc = astPickAxes( bunc, naxes, axes, NULL );
- bunc = astAnnul( bunc );
-
- if( ! astIsARegion( unc ) ) unc = astAnnul( unc );
-
- } else {
- unc = NULL;
- }
-
-/* Get pointers to the coordinate data in the parent Region structure. */
- pset = this_region->points;
- ptr = astGetPoints( pset );
- npnt = astGetNpoint( pset );
-
-/* Create a PointSet to hold the points for the returned PointList. */
- pset_new = astPointSet( npnt, naxes, "", status );
-
-/* Get pointers to its data. */
- ptr_new = astGetPoints( pset_new );
-
-/* Check pointers can be used safely. */
- if( astOK ) {
-
-/* Copy the point positions on the selected axes into the arrays allocated
- above. */
- for( i = 0; i < naxes; i++ ) {
- p = ptr[ axes[ i ] ];
- q = ptr_new[ i ];
- for( j = 0; j < npnt; j++ ) *(q++) = *(p++);
- }
-
-/* Create the new PointList. */
- result = (AstRegion *) astPointList( frm, pset_new, unc, "", status );
- }
-
-/* Free resources */
- frm = astAnnul( frm );
- bfrm = astAnnul( bfrm );
- if( unc ) unc = astAnnul( unc );
- pset_new = astAnnul( pset_new );
-
-/* Return a NULL pointer if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static int RegPins( AstRegion *this_region, AstPointSet *pset, AstRegion *unc,
- int **mask, int *status ){
-/*
-* Name:
-* RegPins
-
-* Purpose:
-* Check if a set of points fall on the boundary of a given PointList.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pointlist.h"
-* int RegPins( AstRegion *this, AstPointSet *pset, AstRegion *unc,
-* int **mask, int *status )
-
-* Class Membership:
-* PointList member function (over-rides the astRegPins protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a flag indicating if the supplied set of
-* points all fall on the boundary of the given PointList.
-*
-* Some tolerance is allowed, as specified by the uncertainty Region
-* stored in the supplied PointList "this", and the supplied uncertainty
-* Region "unc" which describes the uncertainty of the supplied points.
-
-* Parameters:
-* this
-* Pointer to the PointList.
-* pset
-* Pointer to the PointSet. The points are assumed to refer to the
-* base Frame of the FrameSet encapsulated by "this".
-* unc
-* Pointer to a Region representing the uncertainties in the points
-* given by "pset". The Region is assumed to represent the base Frame
-* of the FrameSet encapsulated by "this". Zero uncertainity is assumed
-* if NULL is supplied.
-* mask
-* Pointer to location at which to return a pointer to a newly
-* allocated dynamic array of ints. The number of elements in this
-* array is equal to the value of the Npoint attribute of "this".
-* Each element in the returned array is set to 1 if the
-* corresponding position in "this" is on the boundary of the Region
-* and is set to zero otherwise. A NULL value may be supplied
-* in which case no array is created. If created, the array should
-* be freed using astFree when no longer needed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the points all fall on the boundary of the given
-* Region, to within the tolerance specified. Zero otherwise.
-
-*/
-
-/* Local variables: */
- AstPointList *pl; /* Pointer to PointList holding supplied points */
- AstPointList *this; /* Pointer to the PointList structure. */
- AstPointSet *pset2; /* Supplied points masked by this PointList */
- AstPointSet *pset3; /* This PointList masked by supplied points */
- double **ptr2; /* Pointer to axis values in "pset2" */
- double **ptr3; /* Pointer to axis values in "pset3" */
- double **ptr; /* Pointer to axis values in "this" */
- double *p; /* Pointer to next axis value to read */
- int ic; /* Axis index */
- int icurr; /* Index of original current Frame in "this" */
- int ip; /* Point index */
- int nc; /* No. of axes in Box base frame */
- int neg_old; /* Original Negated flag for "this" */
- int np; /* No. of supplied points */
- int result; /* Returned flag */
-
-/* Initialise */
- result = 0;
- if( mask ) *mask = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return result;
-
-/* Get a pointer to the Box structure. */
- this = (AstPointList *) this_region;
-
-/* Temporarily ensure that the current Frame in "this" is the same as the
- base Frame. We need to do this since the supplied points are in the
- base Frame of "this", but the astTransform method below assumes
- that it is transforming points in the current Frame of the Region. */
- icurr = astGetCurrent( this_region->frameset );
- astSetCurrent( this_region->frameset, AST__BASE );
-
-/* Get pointer to the supplied axis values, the number of points and the
- number of axis values per point. */
- ptr = astGetPoints( pset );
- np = astGetNpoint( pset );
- nc = astGetNcoord( pset );
-
-/* All the supplied points should be within the supplied PointsList region
- (given that "within" implies some tolerance). Transform the positions
- using this PointList and check if any of the resulting points fell
- outside this PointList. We need to ensure that the PointList is not
- negated first. */
- neg_old = astGetNegated( this );
- astSetNegated( this, 0 );
- pset2 = astTransform( this, pset, 1, NULL );
- ptr2 = astGetPoints( pset2 );
-
-/* Check pointers can be used. */
- if( astOK ) {
-
-/* Check there are no bad points (i.e. check that none of the points are
- outside the supplied PointList). The algorithm used to do this depends
- on whether we need to create an output mask. */
- result = 1;
- if( mask ) {
-
-/* Create the returned mask array. */
- *mask = astMalloc( np );
- if( astOK ) {
-
-/* Initialise the mask elements on the basis of the first axis values */
- result = 1;
- p = ptr2[ 0 ];
- for( ip = 0; ip < np; ip++ ) {
- if( *(p++) == AST__BAD ) {
- result = 0;
- (*mask)[ ip ] = 0;
- } else {
- (*mask)[ ip ] = 1;
- }
- }
-
-/* Now check for bad values on other axes. */
- for( ic = 1; ic < nc; ic++ ) {
- p = ptr2[ ic ];
- for( ip = 0; ip < np; ip++ ) {
- if( *(p++) == AST__BAD ) {
- result = 0;
- (*mask)[ ip ] = 0;
- }
- }
- }
- }
-
-/* If no output mask is to be made, we can break out of the check as soon
- as the first bad value is found. */
- } else {
- for( ic = 0; ic < nc && result; ic++ ){
- p = ptr2[ ic ];
- for( ip = 0; ip < np; ip++,p++ ){
- if( *p == AST__BAD ) {
- result = 0;
- break;
- }
- }
- }
- }
-
-/* If this check was passed, we perform a similar check in the opposite
- direction: we create a new PointList from the supplied list of points,
- and then we transform the points associated with the supplied PointList
- using the new PointList. This checks that all the points in the
- supplied PointList are close to the supplied points. Create the new
- PointList holding the supplied points. */
- if( result ) {
- pl = astPointList( unc, pset, unc, "", status );
-
-/* Transform the points in "this" PointList using the new PointList as a
- Mapping. */
- pset3 = astTransform( pl, this_region->points, 1, NULL );
- ptr3 = astGetPoints( pset3 );
-
-/* Check pointers can be used. */
- if( astOK ) {
- for( ic = 0; ic < nc && result; ic++ ){
- p = ptr3[ ic ];
- for( ip = 0; ip < np; ip++,p++ ){
- if( *p == AST__BAD ) {
- result = 0;
- break;
- }
- }
- }
- }
-
-/* Free resources. */
- pl = astAnnul( pl );
- pset3 = astAnnul( pset3 );
-
- }
- }
-
- pset2 = astAnnul( pset2 );
-
-/* Re-instate the original current Frame in "this". */
- astSetCurrent( this_region->frameset, icurr );
-
-/* Re-instate the original Negated flag for "this". */
- astSetNegated( this, neg_old );
-
-/* If an error has occurred, return zero. */
- if( !astOK ) {
- result = 0;
- if( mask ) *mask = astAnnul( *mask );
- }
-
-/* Return the result. */
- return result;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting,
- int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a PointList.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pointlist.h"
-* void SetAttrib( AstObject *this, const char *setting )
-
-* Class Membership:
-* PointList member function (over-rides the astSetAttrib protected
-* method inherited from the Object class).
-
-* Description:
-* This function assigns an attribute value for a PointList, the
-* attribute and its value being specified by means of a string of
-* the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in
-* lower case with no white space present. The value to the right
-* of the "=" should be a suitable textual representation of the
-* value to be assigned and this will be interpreted according to
-* the attribute's data type. White space surrounding the value is
-* only significant for string attributes.
-
-* Parameters:
-* this
-* Pointer to the PointList.
-* setting
-* Pointer to a null-terminated string specifying the new
-* attribute value.
-*/
-
-/* Local Variables: */
- AstPointList *this; /* Pointer to the PointList structure */
- int len; /* Length of setting string */
- int nc; /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the PointList structure. */
- this = (AstPointList *) this_object;
-
-/* Obtain the length of the setting string. */
- len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
- the setting string and extract the attribute value (or an offset to
- it in the case of string values). In each case, use the value set
- in "nc" to check that the entire string was matched. Once a value
- has been obtained, use the appropriate method to set it. */
-
-/* Define a macro to see if the setting string matches any of the
- read-only attributes of this class. */
-#define MATCH(attrib) \
- ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
- ( nc >= len ) )
-
-/* Use this macro to report an error if a read-only attribute has been
- specified. */
- if ( MATCH( "listsize" ) ) {
- astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.",
- status, setting, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-
-/* Undefine macros local to this function. */
-#undef MATCH
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* Simplify
-
-* Purpose:
-* Simplify the Mapping represented by a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pointlist.h"
-* AstMapping *Simplify( AstMapping *this, int *status )
-
-* Class Membership:
-* PointList method (over-rides the astSimplify method inherited
-* from the Region class).
-
-* Description:
-* This function invokes the parent Region Simplify method, and then
-* performs any further region-specific simplification.
-*
-* If the Mapping from base to current Frame is not a UnitMap, this
-* will include attempting to fit a new Region to the boundary defined
-* in the current Frame.
-
-* Parameters:
-* this
-* Pointer to the original Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the simplified Region. A cloned pointer to the
-* supplied Region will be returned if no simplication could be
-* performed.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to encapsulated Frame */
- AstMapping *map; /* Pointer to frameset Mapping */
- AstMapping *result; /* Result pointer to return */
- AstPointList *new2; /* Pointer to simplified Region */
- AstPointSet *pset1; /* Original base Frame positions */
- AstPointSet *pset2; /* Current Frame Frame positions */
- AstRegion *new; /* Pointer to simplified Region */
- AstRegion *this; /* Pointer to original Region structure */
- AstRegion *unc; /* Pointer to new uncertainty Region */
- double **ptr2; /* Pointer to current Frame points */
- int simpler; /* Has some simplication taken place? */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_mapping;
-
-/* Invoke the parent Simplify method inherited from the Region class. This
- will simplify the encapsulated FrameSet and uncertainty Region. */
- new = (AstRegion *) (*parent_simplify)( this_mapping, status );
-
-/* Note if any simplification took place. This is assumed to be the case
- if the pointer returned by the above call is different to the supplied
- pointer. */
- simpler = ( new != this );
-
-/* Get the Mapping from base to current Frame. We can modify the PointList so
- that a UnitMap can be used. This is good because it means that the
- serialised PointList is simpler since the Dump function only needs to
- record one Frame instead of the whole FrameSet. */
- map = astGetMapping( new->frameset, AST__BASE, AST__CURRENT );
- if( !astIsAUnitMap( map ) ){
-
-/* Get a pointer to the current Region Frame */
- fr = astGetFrame( this->frameset, AST__CURRENT );
-
-/* Get the PointSet which holds the base Frame positions defining this
- PointList. */
- pset1 = this->points;
-
-/* Transform the PointSet using this Mapping. */
- pset2 = astTransform( map, pset1, 1, NULL );
- ptr2 = astGetPoints( pset2 );
-
-/* Get the Region describing the positional uncertainty within the
- supplied PointList, in its current Frame. */
- unc = astGetUncFrm( new, AST__CURRENT );
-
-/* Create a new PointList, and use it in place of the original. */
- new2 = astPointList( fr, pset2, unc, "", status );
- (void) astAnnul( new );
- new = (AstRegion *) new2;
- simpler = 1;
-
-/* Free resources. */
- fr = astAnnul( fr );
- pset2 = astAnnul( pset2 );
- unc = astAnnul( unc );
- }
-
-/* Free resources. */
- map = astAnnul( map );
-
-/* If any simplification could be performed, copy Region attributes from
- the supplied Region to the returned Region, and return a pointer to it.
- If the supplied Region had no uncertainty, ensure the returned Region
- has no uncertainty. Otherwise, return a clone of the supplied pointer. */
- if( simpler ){
- astRegOverlay( new, this, 1 );
- result = (AstMapping *) new;
-
- } else {
- new = astAnnul( new );
- result = astClone( this );
- }
-
-/* If an error occurred, annul the returned pointer. */
- if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib,
- int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a PointList.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pointlist.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* PointList member function (over-rides the astTestAttrib protected
-* method inherited from the Object class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate
-* whether a value has been set for one of a PointList's attributes.
-
-* Parameters:
-* this
-* Pointer to the PointList.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstPointList *this; /* Pointer to the PointList structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the PointList structure. */
- this = (AstPointList *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* Test if the name matches any of the read-only attributes of this
- class. If it does, then return zero. */
- if ( !strcmp( attrib, "listsize" ) ){
- result = 0;
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a PointList to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pointlist.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* PointList member function (over-rides the astTransform protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function takes a PointList and a set of points encapsulated in a
-* PointSet and transforms the points by setting axis values to
-* AST__BAD for all points which are outside the region covered by the
-* PointList. PointList inside the region are copied unchanged from input
-* to output.
-
-* Parameters:
-* this
-* Pointer to the PointList.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - The forward and inverse transformations are identical for a
-* Region.
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of axes in the Frame represented by the PointList.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstPointSet *in_base; /* Pointer to PointSet holding base Frame positions*/
- AstPointSet *ps1; /* Pointer to accumulation PointSet */
- AstPointSet *ps2; /* Pointer to accumulation PointSet */
- AstPointSet *ps3; /* Pointer for swapping PointSet pointers */
- AstPointSet *pset_base; /* PointList positions in "unc" base Frame */
- AstPointSet *pset_reg; /* Pointer to Region PointSet */
- AstPointSet *result; /* Pointer to output PointSet */
- AstRegion *this; /* Pointer to the Region structure */
- AstRegion *unc; /* Pointer to uncertainty Region */
- double **ptr1; /* Pointer to mask pointer array */
- double **ptr_base; /* Pointer to axis values for "pset_base" */
- double **ptr_out; /* Pointer to output coordinate data */
- double *cen_orig; /* Pointer to array holding original centre coords */
- double *mask; /* Pointer to mask axis values */
- int coord; /* Zero-based index for coordinates */
- int ncoord_base; /* No. of coordinates per base Frame point */
- int ncoord_out; /* No. of coordinates per output point */
- int npoint; /* No. of supplied input test points */
- int nrp; /* No. of points in Region PointSet */
- int point; /* Loop counter for points */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Avoid -Wall compiler warnings. */
- ps1 = NULL;
- ps2 = NULL;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_mapping;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Region class. This function validates
- all arguments and generates an output PointSet if necessary,
- containing a copy of the input PointSet. */
- result = (*parent_transform)( this_mapping, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- calculations needed to generate the output coordinate values. */
-
-/* First use the encapsulated FrameSet to transform the supplied positions
- from the current Frame in the encapsulated FrameSet (the Frame
- represented by the Region), to the base Frame (the Frame in which the
- Region is defined). */
- in_base = astRegTransform( this, in, 0, NULL, NULL );
-
-/* The PointSet pointer returned above may be a clone of the "in"
- pointer. If so take a copy of the PointSet so we can change it safely. */
- if( in_base == in ) {
- ps3 = astCopy( in_base );
- (void) astAnnul( in_base );
- in_base = ps3;
- ps3 = NULL;
- }
-
-/* Determine the numbers of points and coordinates per point from the base
- Frame PointSet and obtain pointers for accessing the base Frame and output
- coordinate values. */
- npoint = astGetNpoint( in_base );
- ncoord_base = astGetNcoord( in_base );
- ncoord_out = astGetNcoord( result );
- ptr_out = astGetPoints( result );
-
-/* Get the axis values for the PointSet which defines the location and
- extent of the region in the base Frame, and check them. */
- pset_reg = this->points;
- nrp = astGetNpoint( pset_reg );
- if( astGetNcoord( pset_reg ) != ncoord_base && astOK ) {
- astError( AST__INTER, "astTransform(PointList): Illegal number of "
- "coords (%d) in the Region - should be %d "
- "(internal AST programming error).", status, astGetNcoord( pset_reg ),
- ncoord_base );
- }
-
-/* Get the base Frame uncertainty Region. Temporarily set its negated flag. */
- unc = astGetUncFrm( this, AST__BASE );
- astSetNegated( unc, 1 );
-
-/* Transform the PointList PointSet into the base Frame of the uncertainty
- Region, and get pointers to the corresponding axis value. */
- pset_base = astRegTransform( unc, pset_reg, 0, NULL, NULL );
- ptr_base = astGetPoints( pset_base );
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
- if ( astOK ) {
-
-/* Save the original base Frame centre coords of the uncertainty Region. */
- cen_orig = astRegCentre( unc, NULL, NULL, 0, AST__BASE );
-
-/* We use the PointSet created above as the initial input to astTransform
- below. Also indicate we currently have no output PointSet. This will
- cause a new PointSet to be created on the first pass through the loop
- below. */
- ps1 = astClone( in_base );
- ps2 = NULL;
-
-/* Loop round all the points in the PointList. */
- for ( point = 0; point < nrp; point++ ) {
-
-/* Centre the uncertainty Region at this PointList position. Note, the
- base Frame of the PointList should be the same as the current Frame
- of the uncertainty Region. */
- astRegCentre( unc, NULL, ptr_base, point, AST__BASE );
-
-/* Use the uncertainty Region to transform the supplied PointSet. This
- will set supplied points bad if they are within the uncertainty Region
- (since the uncertainty Region has been negated above). */
- ps2 = astTransform( unc, ps1, 0, ps2 );
-
-/* Use the output PointSet created above as the input for the next
- position. This causes bad points to be accumulated in the output
- PointSet. */
- ps3 = ps2;
- ps2 = ps1;
- ps1 = ps3;
-
- }
-
-/* Re-instate the original centre coords of the uncertainty Region. */
- astRegCentre( unc, cen_orig, NULL, 0, AST__BASE );
- cen_orig = astFree( cen_orig );
-
-/* The ps1 PointSet will now be a copy of the supplied PointSet but with
- positions set to bad if they are inside any of the re-centred uncertainty
- Regions. If this PointList has been negated, this is what we want so
- we just transfer this bad position mask to the result PointSet. If this
- PointList has not been negated we need to invert the bad position
- mask. Get a pointer to the first axis of the resulting PointSet. */
- ptr1 = astGetPoints( ps1 );
- if( astOK ) {
- mask = ptr1[ 0 ];
-
-/* Apply the mask to the returned PointSet, inverted if necessary. */
- if( astGetNegated( this ) ) {
- for ( point = 0; point < npoint; point++, mask++ ) {
- if( *mask == AST__BAD ) {
- for( coord = 0; coord < ncoord_out; coord++ ) {
- ptr_out[ coord ][ point ] = AST__BAD;
- }
- }
- }
-
- } else {
- for ( point = 0; point < npoint; point++, mask++ ) {
- if( *mask != AST__BAD ) {
- for( coord = 0; coord < ncoord_out; coord++ ) {
- ptr_out[ coord ][ point ] = AST__BAD;
- }
- }
- }
- }
- }
- }
-
-/* Clear the negated flag for the uncertainty Region. */
- astClearNegated( unc );
-
-/* Free resources */
- in_base = astAnnul( in_base );
- pset_base = astAnnul( pset_base );
- unc = astAnnul( unc );
- if( ps2 ) ps2 = astAnnul( ps2 );
- if( ps1 ) ps1 = astAnnul( ps1 );
-
-/* Annul the result if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/*
-*att++
-* Name:
-* ListSize
-
-* Purpose:
-* Number of points in a PointList.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer, read-only.
-
-* Description:
-* This is a read-only attribute giving the number of points in a
-* PointList. This value is determined when the PointList is created.
-
-* Applicability:
-* PointList
-* All PointLists have this attribute.
-*att--
-*/
-
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for PointList objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for PointList objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstPointList *in; /* Pointer to input PointList */
- AstPointList *out; /* Pointer to output PointList */
- int nb; /* Number of bytes */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output PointLists. */
- in = (AstPointList *) objin;
- out = (AstPointList *) objout;
-
-/* For safety, first clear any references to the input memory from
- the output PointList. */
- out->lbnd = NULL;
- out->ubnd = NULL;
-
-/* Copy dynamic memory contents */
- if( in->lbnd && in->ubnd ) {
- nb = sizeof( double )*astGetNaxes( in );
- out->lbnd = astStore( NULL, in->lbnd, nb );
- out->ubnd = astStore( NULL, in->ubnd, nb );
- }
-}
-
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for PointList objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for PointList objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstPointList *this; /* Pointer to PointList */
-
-/* Obtain a pointer to the PointList structure. */
- this = (AstPointList *) obj;
-
-/* Annul all resources. */
- this->lbnd = astFree( this->lbnd );
- this->ubnd = astFree( this->ubnd );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for PointList objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the PointList class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the PointList whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstPointList *this; /* Pointer to the PointList structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the PointList structure. */
- this = (AstPointList *) this_object;
-
-/* Write out values representing the instance variables for the
- PointList class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAPointList and astCheckPointList functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(PointList,Region)
-astMAKE_CHECK(PointList)
-
-AstPointList *astPointList_( void *frame_void, AstPointSet *points,
- AstRegion *unc, const char *options,
- int *status, ...) {
-/*
-*+
-* Name:
-* astPointList
-
-* Purpose:
-* Create a PointList.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "pointlist.h"
-* AstPointList *astPointList( AstFrame *frame, AstPointSet *points,
-* AstRegion *unc, const char *options,
-* int *status, ...) {
-
-* Class Membership:
-* PointList constructor.
-
-* Description:
-* This function implements the protected interface to the astPointList
-* constructor function, returning a true C pointer. The parameter list
-* differs from the public constructor, in that the positions are
-* defined by a PointSet rather than an array of doubles.
-
-* Parameters:
-* frame
-* A pointer to the Frame in which the region is defined. A deep
-* copy is taken of the supplied Frame. This means that any
-* subsequent changes made to the Frame using the supplied pointer
-* will have no effect the Region.
-* points
-* A PointSet holding the physical coordinates of the points.
-* unc
-* An optional pointer to an existing Region which specifies the
-* uncertainties associated with each point in the PointList being
-* created. The uncertainty at any point in the PointList is found by
-* shifting the supplied "uncertainty" Region so that it is centred at
-* the point being considered. The area covered by the shifted
-* uncertainty Region then represents the uncertainty in the position.
-* The uncertainty is assumed to be the same for all points.
-*
-* If supplied, the uncertainty Region must be of a class for which
-* all instances are centro-symetric (e.g. Box, Circle, Ellipse, etc.)
-* or be a Prism containing centro-symetric component Regions. A deep
-* copy of the supplied Region will be taken, so subsequent changes to
-* the uncertainty Region using the supplied pointer will have no
-* effect on the created Box. Alternatively, a NULL Object pointer
-* may be supplied, in which case a default uncertainty is used
-* equivalent to a box 1.0E-6 of the size of the bounding box of the
-* PointList being created.
-*
-* The uncertainty Region has two uses: 1) when the astOverlap
-* function compares two Regions for equality the uncertainty Region
-* is used to determine the tolerance on the comparison, and 2)
-* when a Region is mapped into a different coordinate system and
-* subsequently simplified (using astSimplify), the uncertainties are
-* used to determine if the transformed boundary can be accurately
-* represented by a specific shape of Region.
-* options
-* Pointer to a null-terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new PointList. The syntax used is identical to
-* that for the astSet function and may include "printf" format
-* specifiers identified by "%" symbols in the normal way.
-* status
-* Pointer to the inherited status value.
-* ...
-* If the "options" string contains "%" format specifiers, then
-* an optional list of additional arguments may follow it in
-* order to supply values to be substituted for these
-* specifiers. The rules for supplying these are identical to
-* those for the astSet function (and for the C "printf"
-* function).
-
-* Returned Value:
-* A pointer to the new PointList.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *frame; /* Pointer to Frame structure */
- AstPointList *new; /* Pointer to new PointList */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the supplied Frame structure. */
- frame = astCheckFrame( frame_void );
-
-/* Initialise the PointList, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitPointList( NULL, sizeof( AstPointList ), !class_init,
- &class_vtab, "PointList", frame, points, unc );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new PointList's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new PointList. */
- return new;
-}
-
-AstPointList *astPointListId_( void *frame_void, int npnt, int ncoord, int dim,
- const double *points, void *unc_void,
- const char *options, ... ) {
-/*
-*++
-* Name:
-c astPointList
-f AST_POINTLIST
-
-* Purpose:
-* Create a PointList.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "pointlist.h"
-c AstPointList *astPointList( AstFrame *frame, int npnt, int ncoord, int dim,
-c const double *points, AstRegion *unc,
-c const char *options, ... )
-f RESULT = AST_POINTLIST( FRAME, NPNT, COORD, DIM, POINTS, UNC, OPTIONS, STATUS )
-
-* Class Membership:
-* PointList constructor.
-
-* Description:
-* This function creates a new PointList object and optionally initialises
-* its attributes.
-*
-* A PointList object is a specialised type of Region which represents a
-* collection of points in a coordinate Frame.
-
-* Parameters:
-c frame
-f FRAME = INTEGER (Given)
-* A pointer to the Frame in which the region is defined. A deep
-* copy is taken of the supplied Frame. This means that any
-* subsequent changes made to the Frame using the supplied pointer
-* will have no effect the Region.
-c npnt
-f NPNT = INTEGER (Given)
-* The number of points in the Region.
-c ncoord
-f NCOORD = INTEGER (Given)
-* The number of coordinates being supplied for each point. This
-* must equal the number of axes in the supplied Frame, given by
-* its Naxes attribute.
-c dim
-f DIM = INTEGER (Given)
-c The number of elements along the second dimension of the "points"
-f The number of elements along the first dimension of the POINTS
-* array (which contains the point coordinates). This value is
-* required so that the coordinate values can be correctly
-* located if they do not entirely fill this array. The value
-c given should not be less than "npnt".
-f given should not be less than NPNT.
-c points
-f POINTS( DIM, NCOORD ) = DOUBLE PRECISION (Given)
-c The address of the first element of a 2-dimensional array of
-c shape "[ncoord][dim]" giving the physical coordinates of the
-c points. These should be stored such that the value of coordinate
-c number "coord" for point number "pnt" is found in element
-c "in[coord][pnt]".
-f A 2-dimensional array giving the physical coordinates of the
-f points. These should be stored such that the value of coordinate
-f number COORD for point number PNT is found in element IN(PNT,COORD).
-c unc
-f UNC = INTEGER (Given)
-* An optional pointer to an existing Region which specifies the uncertainties
-* associated with each point in the PointList being created. The
-* uncertainty at any point in the PointList is found by shifting the
-* supplied "uncertainty" Region so that it is centred at the point
-* being considered. The area covered by the shifted uncertainty Region
-* then represents the uncertainty in the position. The uncertainty is
-* assumed to be the same for all points.
-*
-* If supplied, the uncertainty Region must be of a class for which
-* all instances are centro-symetric (e.g. Box, Circle, Ellipse, etc.)
-* or be a Prism containing centro-symetric component Regions. A deep
-* copy of the supplied Region will be taken, so subsequent changes to
-* the uncertainty Region using the supplied pointer will have no
-* effect on the created Box. Alternatively,
-f a null Object pointer (AST__NULL)
-c a NULL Object pointer
-* may be supplied, in which case a default uncertainty is used
-* equivalent to a box 1.0E-6 of the size of the bounding box of the
-* PointList being created.
-*
-* The uncertainty Region has two uses: 1) when the
-c astOverlap
-f AST_OVERLAP
-* function compares two Regions for equality the uncertainty
-* Region is used to determine the tolerance on the comparison, and 2)
-* when a Region is mapped into a different coordinate system and
-* subsequently simplified (using
-c astSimplify),
-f AST_SIMPLIFY),
-* the uncertainties are used to determine if the transformed boundary
-* can be accurately represented by a specific shape of Region.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new PointList. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new PointList. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astPointList()
-f AST_POINTLIST = INTEGER
-* A pointer to the new PointList.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-
-* Status Handling:
-* The protected interface to this function includes an extra
-* parameter at the end of the parameter list descirbed above. This
-* parameter is a pointer to the integer inherited status
-* variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
- AstFrame *frame; /* Pointer to Frame structure */
- AstPointList *new; /* Pointer to new PointList */
- AstPointSet *pset; /* Pointer to PointSet holding points */
- AstRegion *unc; /* Pointer to Region structure */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- const double *q; /* Pointer to next supplied axis value */
- double **ptr; /* Pointer to data in pset */
- double *p; /* Pointer to next PointSet axis value */
- int *status; /* Pointer to inherited status value */
- int i; /* Axis index */
- int j; /* Point index */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a Frame pointer from the supplied ID and validate the
- pointer to ensure it identifies a valid Frame. */
- frame = astVerifyFrame( astMakePointer( frame_void ) );
-
-/* Create a PointSet and store the supplied points in it. */
- pset = astPointSet( npnt, ncoord , "", status );
- ptr = astGetPoints( pset );
- if( astOK ) {
- for( i = 0; i < ncoord; i++ ) {
- p = ptr[ i ];
- q = points + i*dim;
- for( j = 0; j < npnt; j++ ) *(p++) = *(q++);
- }
- }
-
-/* Obtain a Region pointer from the supplied "unc" ID and validate the
- pointer to ensure it identifies a valid Region . */
- unc = unc_void ? astCheckRegion( astMakePointer( unc_void ) ) : NULL;
-
-/* Initialise the PointList, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitPointList( NULL, sizeof( AstPointList ), !class_init,
- &class_vtab, "PointList", frame, pset, unc );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new PointList's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Free resources. */
- pset = astAnnul( pset );
-
-/* Return an ID value for the new PointList. */
- return astMakeId( new );
-}
-
-AstPointList *astInitPointList_( void *mem, size_t size, int init,
- AstPointListVtab *vtab, const char *name,
- AstFrame *frame, AstPointSet *points,
- AstRegion *unc, int *status ) {
-/*
-*+
-* Name:
-* astInitPointList
-
-* Purpose:
-* Initialise a PointList.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "pointlist.h"
-* AstPointList *astInitPointList( void *mem, size_t size, int init,
-* AstPointListVtab *vtab, const char *name,
-* AstFrame *frame, AstPointSet *points,
-* AstRegion *unc, int *status )
-
-* Class Membership:
-* PointList initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new PointList object. It allocates memory (if necessary) to accommodate
-* the PointList plus any additional data associated with the derived class.
-* It then initialises a PointList structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a PointList at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the PointList is to be initialised.
-* This must be of sufficient size to accommodate the PointList data
-* (sizeof(PointList)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the PointList (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the PointList
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the PointList's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new PointList.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-* frame
-* A pointer to the Frame in which the region is defined.
-* points
-* A PointSet containing the Points for the PointList.
-* unc
-* A pointer to a Region which specifies the uncertainty in the
-* supplied positions (all points in the new PointList being
-* initialised are assumed to have the same uncertainty). A NULL
-* pointer can be supplied, in which case default uncertainties equal
-* to 1.0E-6 of the dimensions of the new PointList's bounding box are
-* used. If an uncertainty Region is supplied, it must be either a Box,
-* a Circle or an Ellipse, and its encapsulated Frame must be related
-* to the Frame supplied for parameter "frame" (i.e. astConvert
-* should be able to find a Mapping between them). Two positions
-* the "frame" Frame are considered to be co-incident if their
-* uncertainty Regions overlap. The centre of the supplied
-* uncertainty Region is immaterial since it will be re-centred on the
-* point being tested before use. A deep copy is taken of the supplied
-* Region.
-
-* Returned Value:
-* A pointer to the new PointList.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstPointList *new; /* Pointer to new PointList */
- int ncoord; /* No. of axes in PointSet */
- int nin; /* No. of axes in Frame */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitPointListVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Check the number of axis values per position is correct. */
- nin = astGetNaxes( frame );
- ncoord = astGetNcoord( points );
- if( nin != ncoord ) {
- astError( AST__NCPIN, "astInitPointList(): Bad number of coordinate "
- "values (%d).", status, ncoord );
- astError( AST__NCPIN, "The %s given requires %d coordinate value(s) for "
- "each input point.", status, astGetClass( frame ), nin );
- }
-
-/* Initialise a Region structure (the parent class) as the first component
- within the PointList structure, allocating memory if necessary. */
- if( astOK ) {
- new = (AstPointList *) astInitRegion( mem, size, 0, (AstRegionVtab *) vtab,
- name, frame, points, unc );
- if ( astOK ) {
-
-/* Initialise the PointList data. */
-/* ------------------------------ */
- new->lbnd = NULL;
- new->ubnd = NULL;
-
-/* If an error occurred, clean up by deleting the new PointList. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return a pointer to the new PointList. */
- return new;
-}
-
-AstPointList *astLoadPointList_( void *mem, size_t size, AstPointListVtab *vtab,
- const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadPointList
-
-* Purpose:
-* Load a PointList.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "pointlist.h"
-* AstPointList *astLoadPointList( void *mem, size_t size, AstPointListVtab *vtab,
-* const char *name, AstChannel *channel )
-
-* Class Membership:
-* PointList loader.
-
-* Description:
-* This function is provided to load a new PointList using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* PointList structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a PointList at the start of the memory
-* passed via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory into which the PointList is to be
-* loaded. This must be of sufficient size to accommodate the
-* PointList data (sizeof(PointList)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the PointList (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the PointList structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstPointList) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new PointList. If this is NULL, a pointer
-* to the (static) virtual function table for the PointList class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "PointList" is used instead.
-
-* Returned Value:
-* A pointer to the new PointList.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstPointList *new; /* Pointer to the new PointList */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this PointList. In this case the
- PointList belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstPointList );
- vtab = &class_vtab;
- name = "PointList";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitPointListVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built PointList. */
- new = astLoadRegion( mem, size, (AstRegionVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "PointList" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* If an error occurred, clean up by deleting the new PointList. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new PointList pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-int astGetListSize_( AstPointList *this, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,PointList,GetListSize))( this, status );
-}
-void astPointListPoints_( AstPointList *this, AstPointSet **pset, int *status) {
- if ( !astOK ) return;
- (**astMEMBER(this,PointList,PointListPoints))( this, pset, status );
- return;
-}
-
diff --git a/ast-5.3-1/pointlist.h b/ast-5.3-1/pointlist.h
deleted file mode 100644
index 41dca4e..0000000
--- a/ast-5.3-1/pointlist.h
+++ /dev/null
@@ -1,239 +0,0 @@
-#if !defined( POINTLIST_INCLUDED ) /* Include this file only once */
-#define POINTLIST_INCLUDED
-/*
-*+
-* Name:
-* pointlist.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the PointList class.
-
-* Invocation:
-* #include "pointlist.h"
-
-* Description:
-* This include file defines the interface to the PointList class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The PointList class implements a Region which represents a collection
-* of points in a Frame.
-
-* Inheritance:
-* The PointList class inherits from the Region class.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 23-AUG-2004 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "region.h" /* Coordinate regions (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* PointList structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstPointList {
-
-/* Attributes inherited from the parent class. */
- AstRegion region; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- double *lbnd; /* Lower axis limits of bounding box */
- double *ubnd; /* Upper axis limits of bounding box */
-} AstPointList;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstPointListVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstRegionVtab region_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- int (* GetListSize)( AstPointList *, int * );
- void (* PointListPoints)( AstPointList *, AstPointSet **, int * );
-} AstPointListVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstPointListGlobals {
- AstPointListVtab Class_Vtab;
- int Class_Init;
- char GetAttrib_Buff[ 101 ];
-} AstPointListGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitPointListGlobals_( AstPointListGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(PointList) /* Check class membership */
-astPROTO_ISA(PointList) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstPointList *astPointList_( void *, AstPointSet *, AstRegion *, const char *, int *, ...);
-#else
-AstPointList *astPointListId_( void *, int, int, int, const double *, AstRegion *, const char *, ... )__attribute__((format(printf,7,8)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstPointList *astInitPointList_( void *, size_t, int, AstPointListVtab *,
- const char *, AstFrame *, AstPointSet *,
- AstRegion *, int * );
-
-/* Vtab initialiser. */
-void astInitPointListVtab_( AstPointListVtab *, const char *, int * );
-
-/* Loader. */
-AstPointList *astLoadPointList_( void *, size_t, AstPointListVtab *,
- const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS) /* Protected */
-int astGetListSize_( AstPointList *, int * );
-void astPointListPoints_( AstPointList *, AstPointSet **, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckPointList(this) astINVOKE_CHECK(PointList,this,0)
-#define astVerifyPointList(this) astINVOKE_CHECK(PointList,this,1)
-
-/* Test class membership. */
-#define astIsAPointList(this) astINVOKE_ISA(PointList,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astPointList astINVOKE(F,astPointList_)
-#else
-#define astPointList astINVOKE(F,astPointListId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitPointList(mem,size,init,vtab,name,frame,points,unc) \
-astINVOKE(O,astInitPointList_(mem,size,init,vtab,name,frame,points,unc,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitPointListVtab(vtab,name) astINVOKE(V,astInitPointListVtab_(vtab,name,STATUS_PTR))
-
-/* Loader. */
-#define astLoadPointList(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadPointList_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckPointList to validate PointList pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-#define astGetListSize(this) \
-astINVOKE(V,astGetListSize_(astCheckPointList(this),STATUS_PTR))
-#define astPointListPoints(this,pset) \
-astINVOKE(V,astPointListPoints_(astCheckPointList(this),pset,STATUS_PTR))
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/pointset.c b/ast-5.3-1/pointset.c
deleted file mode 100644
index 9b6e8c8..0000000
--- a/ast-5.3-1/pointset.c
+++ /dev/null
@@ -1,2976 +0,0 @@
-/*
-* Name:
-* pointset.c
-
-* Purpose:
-* Implement the PointSet class.
-
-* Description:
-* This file implements the PointSet class. For a description of
-* the class and its interface, see the .h file of the same name.
-
-* Inheritance:
-* The PointSet class inherits from the Object class.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 1-FEB-1996 (RFWS):
-* Original version.
-* 27-SEP-1996 (RFWS):
-* Added external interface and I/O facilities.
-* 8-JAN-2003 (DSB):
-* Changed private InitVtab method to protected astInitPointSetVtab
-* method.
-* 9-SEP-2004 (DSB):
-* Added astPermPoints.
-* 5-OCT-2004 (DSB):
-* Bug fix in astLoadPointSet - npoint was used as size for new array
-* of pointers (changed to ncoord).
-* 19-OCT-2004 (DSB):
-* Added astSetNpoint.
-* 2-NOV-2004 (DSB):
-* - Do not write out AST__BAD axis values in the Dump function.
-* - Override astEqual method.
-* - Add protected PointAccuracy attribute.
-* 7-JAN-2005 (DSB):
-* Added astAppendPoints.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 22-FEB-2006 (DSB):
-* Avoid allocating memory for "acc" unless needed.
-* 1-MAY-2009 (DSB):
-* Added astBndPoints.
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS PointSet
-
-
-/*
-*
-* Name:
-* MAKE_CLEAR
-
-* Purpose:
-* Implement a method to clear a single value in a multi-valued attribute.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "pointset.h"
-* MAKE_CLEAR(attr,component,assign)
-
-* Class Membership:
-* Defined by the PointSet class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Clear<Attribute>( AstPointSet *this, int axis )
-*
-* and an external interface function of the form:
-*
-* void astClear<Attribute>_( AstPointSet *this, int axis )
-*
-* which implement a method for clearing a single value in a specified
-* multi-valued attribute for an axis of a PointSet. The "axis" value
-* must be in the range 0 to (ncoord-1).
-
-* Parameters:
-* attr
-* The name of the attribute to be cleared, as it appears in the function
-* name (e.g. PointAccuracy in "astClearPointAccuracy").
-* component
-* The name of the class structure component that holds the attribute
-* value.
-* assign
-* An expression that evaluates to the value to assign to the component
-* to clear its value.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attr,component,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attr( AstPointSet *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Validate the axis index. */ \
- if( axis < 0 || axis >= this->ncoord ){ \
- astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
- #attr " - it should be in the range 1 to %d.", status, \
- "astClear" #attr, astGetClass( this ), \
- axis + 1, this->ncoord ); \
-\
-/* Assign the "clear" value. */ \
- } else if( this->component ){ \
- this->component[ axis ] = (assign); \
- } \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astClear##attr##_( AstPointSet *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
- (**astMEMBER(this,PointSet,Clear##attr))( this, axis, status ); \
-}
-
-
-/*
-*
-* Name:
-* MAKE_GET
-
-* Purpose:
-* Implement a method to get a single value in a multi-valued attribute.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "pointset.h"
-* MAKE_GET(attr,type,bad_value,assign)
-
-* Class Membership:
-* Defined by the PointSet class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static <Type> Get<Attribute>( AstPointSet *this, int axis )
-*
-* and an external interface function of the form:
-*
-* <Type> astGet<Attribute>_( AstPointSet *this, int axis )
-*
-* which implement a method for getting a single value from a specified
-* multi-valued attribute for an axis of a PointSet. The "axis" value
-* must be in the range 0 to (ncoord-1).
-
-
-* Parameters:
-* attr
-* The name of the attribute whose value is to be obtained, as it
-* appears in the function name (e.g. PointAccuracy in "astGetPointAccuracy").
-* type
-* The C type of the attribute.
-* bad_value
-* A constant value to return if the global error status is set, or if
-* the function fails.
-* assign
-* An expression that evaluates to the value to be returned. This can
-* use the string "axis" to represent the zero-based value index.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_GET(attr,type,bad_value,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static type Get##attr( AstPointSet *this, int axis, int *status ) { \
- type result; /* Result to be returned */ \
-\
-/* Initialise */ \
- result = bad_value; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* Validate the axis index. */ \
- if( axis < 0 || axis >= this->ncoord ){ \
- astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
- #attr " - it should be in the range 1 to %d.", status, \
- "astGet" #attr, astGetClass( this ), \
- axis + 1, this->ncoord ); \
-\
-/* Assign the result value. */ \
- } else { \
- result = (assign); \
- } \
-\
-/* Check for errors and clear the result if necessary. */ \
- if ( !astOK ) result = (bad_value); \
-\
-/* Return the result. */ \
- return result; \
-} \
-/* External interface. */ \
-/* ------------------- */ \
-type astGet##attr##_( AstPointSet *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return (bad_value); \
-\
-/* Invoke the required method via the virtual function table. */ \
- return (**astMEMBER(this,PointSet,Get##attr))( this, axis, status ); \
-}
-
-/*
-*
-* Name:
-* MAKE_SET
-
-* Purpose:
-* Implement a method to set a single value in a multi-valued attribute
-* for a PointSet.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "pointset.h"
-* MAKE_SET(attr,type,component,assign,null)
-
-* Class Membership:
-* Defined by the PointSet class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Set<Attribute>( AstPointSet *this, int axis, <Type> value )
-*
-* and an external interface function of the form:
-*
-* void astSet<Attribute>_( AstPointSet *this, int axis, <Type> value )
-*
-* which implement a method for setting a single value in a specified
-* multi-valued attribute for a PointSet. The "axis" value must be in
-* the range 0 to (ncoord-1).
-
-* Parameters:
-* attr
-* The name of the attribute to be set, as it appears in the function
-* name (e.g. PointAccuracy in "astSetPointAccuracy").
-* type
-* The C type of the attribute.
-* component
-* The name of the class structure component that holds the attribute
-* value.
-* assign
-* An expression that evaluates to the value to be assigned to the
-* component.
-* null
-* The value to initialise newly created array elements to.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attr,type,component,assign,null) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attr( AstPointSet *this, int axis, type value, int *status ) { \
- int i; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Validate the axis index. */ \
- if( axis < 0 || axis >= this->ncoord ){ \
- astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
- #attr " - it should be in the range 1 to %d.", status, \
- "astSet" #attr, astGetClass( this ), \
- axis + 1, this->ncoord ); \
-\
-/* Store the new value in the structure component. */ \
- } else { \
- if( !this->component ){ \
- this->component = astMalloc( this->ncoord*sizeof( type ) ); \
- for( i = 0; i < this->ncoord; i++ ) { \
- this->component[ i ] = null; \
- } \
- } \
- this->component[ axis ] = (assign); \
- } \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astSet##attr##_( AstPointSet *this, int axis, type value, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
- (**astMEMBER(this,PointSet,Set##attr))( this, axis, value, status ); \
-}
-
-/*
-*
-* Name:
-* MAKE_TEST
-
-* Purpose:
-* Implement a method to test if a single value has been set in a
-* multi-valued attribute for a class.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "pointset.h"
-* MAKE_TEST(attr,assign)
-
-* Class Membership:
-* Defined by the PointSet class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static int Test<Attribute>( AstPointSet *this, int axis )
-*
-* and an external interface function of the form:
-*
-* int astTest<Attribute>_( AstPointSet *this, int axis )
-*
-* which implement a method for testing if a single value in a specified
-* multi-valued attribute has been set for a class. The "axis" value
-* must be in the range 0 to (ncoord-1).
-
-* Parameters:
-* attr
-* The name of the attribute to be tested, as it appears in the function
-* name (e.g. PointAccuracy in "astTestPointAccuracy").
-* assign
-* An expression that evaluates to 0 or 1, to be used as the returned
-* value. This can use the string "axis" to represent the zero-based
-* index of the value within the attribute.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_TEST(attr,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static int Test##attr( AstPointSet *this, int axis, int *status ) { \
- int result; /* Value to return */ \
-\
- result= 0; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* Validate the axis index. */ \
- if( axis < 0 || axis >= this->ncoord ){ \
- astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
- #attr " - it should be in the range 1 to %d.", status, \
- "astTest" #attr, astGetClass( this ), \
- axis + 1, this->ncoord ); \
-\
-/* Assign the result value. */ \
- } else { \
- result = (assign); \
- } \
-\
-/* Check for errors and clear the result if necessary. */ \
- if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
- return result; \
-} \
-/* External interface. */ \
-/* ------------------- */ \
-int astTest##attr##_( AstPointSet *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return 0; \
-\
-/* Invoke the required method via the virtual function table. */ \
- return (**astMEMBER(this,PointSet,Test##attr))( this, axis, status ); \
-}
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "globals.h" /* Thread-safe global data access */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static int (* parent_equal)( AstObject *, AstObject *, int * );
-static int (* parent_getobjsize)( AstObject *, int * );
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->GetAttrib_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(PointSet)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(PointSet,Class_Init)
-#define class_vtab astGLOBAL(PointSet,Class_Vtab)
-#define getattrib_buff astGLOBAL(PointSet,GetAttrib_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-static char getattrib_buff[ 101 ];
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstPointSetVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstPointSet *astPointSetId_( int, int, const char *, int *, ...);
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static const char *GetAttrib( AstObject *, const char *, int * );
-static double **GetPoints( AstPointSet *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetNcoord( const AstPointSet *, int * );
-static int GetNpoint( const AstPointSet *, int * );
-static int GetObjSize( AstObject *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static AstPointSet *AppendPoints( AstPointSet *, AstPointSet *, int * );
-static void BndPoints( AstPointSet *, double *, double *, int * );
-static void CheckPerm( AstPointSet *, const int *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void PermPoints( AstPointSet *, int, const int[], int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetPoints( AstPointSet *, double **, int * );
-static void SetNpoint( AstPointSet *, int, int * );
-static void SetSubPoints( AstPointSet *, int, int, AstPointSet *, int * );
-
-static double GetPointAccuracy( AstPointSet *, int, int * );
-static int TestPointAccuracy( AstPointSet *, int, int * );
-static void ClearPointAccuracy( AstPointSet *, int, int * );
-static void SetPointAccuracy( AstPointSet *, int, double, int * );
-
-/* Member functions. */
-/* ================= */
-static AstPointSet *AppendPoints( AstPointSet *this, AstPointSet *that, int *status ) {
-/*
-*+
-* Name:
-* astAppendPoints
-
-* Purpose:
-* Append one PointSet to another.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "pointset.h"
-* AstPointSet *astAppendPoints( AstPointSet *this, AstPointSet *that )
-
-* Class Membership:
-* PointSet method.
-
-* Description:
-* This function creates a new PointSet containing all the points in
-* "this" followed by all the points in "that".
-
-* Parameters:
-* this
-* Pointer to the first PointSet.
-* that
-* Pointer to the second PointSet.
-
-* Returned Value:
-* Pointer to the new PointSet.
-
-* Notes:
-* - Axis accuracies are copied from "this".
-* - The Ncoord attribute of the two PointSets must match.
-* - NULL will be returned if an error has already occurred, or if this
-* function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstPointSet *result;
- double **ptr;
- double **ptr1;
- double **ptr2;
- int ic;
- int n1;
- int n2;
- int ncoord;
- size_t nb2;
- size_t nb1;
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Check the two PointSets have the same Ncoord value. */
- ncoord = astGetNcoord( this );
- if( ncoord != astGetNcoord( that ) ) {
- astError( AST__NPTIN, "astAppendPoints(%s): Number of coordinates "
- "per point differ in the two supplied PointSets.", status,
- astGetClass( this ) );
-
-/* Calculate the new size for the PointSet. */
- } else {
- n1 = astGetNpoint( this );
- n2 = astGetNpoint( that );
-
-/* Create the new PointSet and get pointers to its data. */
- result = astPointSet( n1 + n2, ncoord, "", status );
- ptr1 = astGetPoints( this );
- ptr2 = astGetPoints( that );
- ptr = astGetPoints( result );
- if( astOK ) {
-
-/* Copy the axis values for each coordinate in turn. */
- nb1 = sizeof( double )*(size_t) n1;
- nb2 = sizeof( double )*(size_t) n2;
- for( ic = 0; ic < ncoord; ic++ ) {
- memcpy( ptr[ ic ], ptr1[ ic ], nb1 );
- memcpy( ptr[ ic ] + n1, ptr2[ ic ], nb2 );
- }
-
-/* Copy any axis accuracies from "this". */
- result->acc = this->acc ?
- astStore( NULL, this->acc, sizeof( double )*(size_t) ncoord )
- : NULL;
- }
- }
-
-/* Annul the result if an error occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static void BndPoints( AstPointSet *this, double *lbnd, double *ubnd, int *status ) {
-/*
-*+
-* Name:
-* astBndPoints
-
-* Purpose:
-* Find the axis bounds of the points in a PointSet.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "pointset.h"
-* void astBndPoints( AstPointSet *this, double *lbnd, double *ubnd )
-
-* Class Membership:
-* PointSet method.
-
-* Description:
-* This function returns the lower and upper limits of the axis values
-* of the points in a PointSet.
-
-* Parameters:
-* this
-* Pointer to the first PointSet.
-* lbnd
-* Pointer to an array in which to return the lowest value for
-* each coordinate. The length of the array should equal the number
-* returned by astGetNcoord.
-* ubnd
-* Pointer to an array in which to return the highest value for
-* each coordinate. The length of the array should equal the number
-* returned by astGetNcoord.
-
-*-
-*/
-
-/* Local Variables: */
- double **ptr;
- double *p;
- double lb;
- double ub;
- int ic;
- int ip;
- int nc;
- int np;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get pointers to the PointSet data, the number of axes adn the number
- of points. */
- ptr = astGetPoints( this );
- nc = astGetNcoord( this );
- np = astGetNpoint( this );
-
-/* Check the pointers can be used safely. */
- if( astOK ) {
-
-/* Loop round each axis. */
- for( ic = 0; ic < nc; ic++ ) {
-
-/* Initialise the bounds for this axis. */
- lb = AST__BAD;
- ub = AST__BAD;
-
-/* Search for the first good point. Use it to initialise the bounds and
- break out of the loop. */
- p = ptr[ ic ];
- for( ip = 0; ip < np; ip++,p++ ) {
- if( *p != AST__BAD ) {
- lb = ub = *p;
- break;
- }
- }
-
-/* Search through the remaining points. Update the bounds if the axis
- value is good. */
- for( ; ip < np; ip++,p++ ) {
- if( *p != AST__BAD ) {
- if( *p < lb ) {
- lb = *p;
- } else if( *p > ub ) {
- ub = *p;
- }
- }
- }
-
-/* Store the returned bounds. */
- lbnd[ ic ] = lb;
- ubnd[ ic ] = ub;
- }
- }
-}
-
-static void CheckPerm( AstPointSet *this, const int *perm, const char *method, int *status ) {
-/*
-*+
-* Name:
-* astCheckPerm
-
-* Purpose:
-* Check that an array contains a valid permutation.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "pointset.h"
-* void astCheckPerm( AstPointSet *this, const int *perm, const char *method )
-
-* Class Membership:
-* PointSet method.
-
-* Description:
-* This function checks the validity of a permutation array that
-* will be used to permute the order of a PointSet's axes. If the
-* permutation specified by the array is not valid, an error is
-* reported and the global error status is set. Otherwise, the
-* function returns without further action.
-
-* Parameters:
-* this
-* Pointer to the PointSet.
-* perm
-* Pointer to an array of integers with the same number of
-* elements as there are axes in the PointSet. For each axis, the
-* corresponding integer gives the (zero based) axis index to be
-* used to identify the axis values for that axis (using the
-* un-permuted axis numbering). To be valid, the integers in
-* this array should therefore all lie in the range zero to
-* (ncoord-1) inclusive, where "ncoord" is the number of PointSet
-* axes, and each value should occur exactly once.
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function
-* to validate a permutation array. This method name is used
-* solely for constructing error messages.
-
-* Notes:
-* - Error messages issued by this function refer to the external
-* (public) numbering system used for axes (which is one-based),
-* whereas zero-based axis indices are used internally.
-*-
-*/
-
-/* Local Variables: */
- int *there; /* Pointer to temporary array */
- int coord; /* Loop counter for axes */
- int ncoord; /* Number of PointSet axes */
- int valid; /* Permutation array is valid? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Initialise. */
- valid = 1;
-
-/* Obtain the number of PointSet axes and allocate a temporary array of
- integers with the same number of elements. */
- ncoord = astGetNcoord( this );
- there = astMalloc( sizeof( int ) * (size_t) ncoord );
- if ( astOK ) {
-
-/* Initialise the temporary array to zero. */
- for ( coord = 0; coord < ncoord; coord++ ) there[ coord ] = 0;
-
-/* Scan the permutation array, checking that each permuted axis index it
- contains is within the correct range. Note an error and quit checking
- if an invalid value is found. */
- for ( coord = 0; coord < ncoord; coord++ ) {
- if ( ( perm[ coord ] < 0 ) || ( perm[ coord ] >= ncoord ) ) {
- valid = 0;
- break;
-
-/* Use the temporary array to count how many times each valid axis index
- occurs. */
- } else {
- there[ perm[ coord ] ]++;
- }
- }
-
-/* If all the axis indices were within range, check to ensure that each value
- occurred only once. */
- if ( valid ) {
- for ( coord = 0; coord < ncoord; coord++ ) {
-
-/* Note an error and quit checking if any value did not occur exactly once. */
- if ( there[ coord ] != 1 ) {
- valid = 0;
- break;
- }
- }
- }
- }
-
-/* Free the temporary array. */
- there = astFree( there );
-
-/* If an invalid permutation was detected and no other error has
- occurred, then report an error (note we convert to one-based axis
- numbering in the error message). */
- if ( !valid && astOK ) {
- astError( AST__PRMIN, "%s(%s): Invalid coordinate permutation array.", status,
- method, astGetClass( this ) );
- astError( AST__PRMIN, "Each coordinate index should lie in the range 1 to %d "
- "and should occur only once.", status, ncoord );
- }
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a PointSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pointset.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* PointSet member function (over-rides the astClearAttrib
-* protected method inherited from the Object class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* PointSet, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the PointSet.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstPointSet *this; /* Pointer to the PointSet structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the PointSet structure. */
- this = (AstPointSet *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* Test if the name matches any of the read-only attributes of this
- class. If it does, then report an error. */
- if ( !strcmp( attrib, "ncoord" ) ||
- !strcmp( attrib, "npoint" ) ) {
- astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
- "value for a %s.", status, attrib, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two PointSets are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pointset.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* PointSet member function (over-rides the astEqual protected
-* method inherited from the Object class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two PointSets are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first PointSet.
-* that
-* Pointer to the second PointSet.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the PointSets are equivalent, zero otherwise.
-
-* Notes:
-* - The two PointSets are considered equivalent if they have the same
-* number of points, the same number of axis values per point, and the
-* same axis values to within the absolute tolerance specified by the
-* Accuracy attribute of the two PointSets.
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local constants: */
-#define SMALL sqrt(DBL_MIN)
-
-/* Local Variables: */
- AstPointSet *that; /* Pointer to the second PointSet structure */
- AstPointSet *this; /* Pointer to the first PointSet structure */
- double **ptr_that; /* Pointer to axis values in second PointSet */
- double **ptr_this; /* Pointer to axis values in first PointSet */
- double *p_that; /* Pointer to next axis value in second PointSet */
- double *p_this; /* Pointer to next axis value in first PointSet */
- double acc1; /* Absolute accuracy for 1st PointSet axis value */
- double acc2; /* Absolute accuracy for 2nd PointSet axis value */
- double acc; /* Combined absolute accuracy */
- double acc_that; /* PointAccuracy attribute for 2nd PointSet */
- double acc_this; /* PointAccuracy attribute for 1st PointSet */
- int ic; /* Axis index */
- int ip; /* Point index */
- int nc; /* No. of axis values per point */
- int np; /* No. of points in each PointSet */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Invoke the Equal method inherited from the parent Object class. This checks
- that the Objects are both of the same class (amongst other things). */
- if( (*parent_equal)( this_object, that_object, status ) ) {
-
-/* Obtain pointers to the two PointSet structures. */
- this = (AstPointSet *) this_object;
- that = (AstPointSet *) that_object;
-
-/* Check the number of points and the number of axis values per point are
- equal in the two PointSets. */
- np = astGetNpoint( this );
- nc = astGetNcoord( this );
- if( np == astGetNpoint( that ) && nc == astGetNcoord( that ) ) {
-
-/* Get pointers to the axis values.*/
- ptr_this = astGetPoints( this );
- ptr_that = astGetPoints( that );
- if( astOK ) {
-
-/* Assume the PointSets are equal until proven otherwise. */
- result = 1;
-
-/* Loop round each axis, until we find a difference. */
- for( ic = 0; ic < nc && result; ic++ ) {
-
-/* Get pointers to the next value for this axis. */
- p_this = ptr_this[ ic ];
- p_that = ptr_that[ ic ];
-
-/* Get the absolute accuracies for this axis. The default value for this
- attribute is AST__BAD. */
- acc_this = astGetPointAccuracy( this, ic );
- acc_that = astGetPointAccuracy( that, ic );
-
-/* If both accuracies are available, combine them in quadrature. */
- if( acc_this != AST__BAD && acc_that != AST__BAD ) {
- acc = sqrt( acc_this*acc_this + acc_that*acc_that );
-
-/* Loop round all points on this axis */
- for( ip = 0; ip < np; ip++, p_this++, p_that++ ){
-
-/* If either value is bad we do not need to compare values. */
- if( *p_this == AST__BAD || *p_that == AST__BAD ) {
-
-/* If one value is bad and one is good, they differ, so break. If both
- values are bad they are equal so we continue. */
- if( *p_this != AST__BAD || *p_that != AST__BAD ) {
- result = 0;
- break;
- }
-
-/* Otherwise (if both axis values are good), compare axis values, and break if
- they differ by more than the absolute accuracy. */
- } else if( fabs( *p_this - *p_that ) > acc ) {
- result = 0;
- break;
- }
- }
-
-/* If either accuracy is unavailable, we use a default relative accuracy. */
- } else {
-
-/* Loop round all points on this axis */
- for( ip = 0; ip < np; ip++, p_this++, p_that++ ){
-
-/* If either value is bad we do not need to compare values. */
- if( *p_this == AST__BAD || *p_that == AST__BAD ) {
-
-/* If one value is bad and one is good, they differ, so break. If both
- values are bad they are equal so we continue. */
- if( *p_this != AST__BAD || *p_that != AST__BAD ) {
- result = 0;
- break;
- }
-
-/* Otherwise (if both axis values are good), find the absolute error for
- both values. */
- } else {
-
- if( acc_this == AST__BAD ) {
- acc1 = fabs(*p_this)*DBL_EPSILON;
- if( acc1 < SMALL ) acc1 = SMALL;
- acc1 *= 1.0E3;
- } else {
- acc1 = acc_this;
- }
-
- if( acc_that == AST__BAD ) {
- acc2 = fabs(*p_that)*DBL_EPSILON;
- if( acc2 < SMALL ) acc2 = SMALL;
- acc2 *= 1.0E3;
- } else {
- acc2 = acc_that;
- }
-
-/* Combine them in quadrature. */
- acc = sqrt( acc1*acc1 + acc2*acc2 );
-
-/* Compare axis values, and break if they differ by more than the
- absolute accuracy. */
- if( fabs( *p_this - *p_that ) > acc ) {
- result = 0;
- break;
- }
- }
- }
- }
- }
- }
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-#undef SMALL
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a PointSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pointset.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* PointSet member function (over-rides the protected astGetAttrib
-* method inherited from the Object class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a PointSet, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the PointSet.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the PointSet, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the PointSet. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstPointSet *this; /* Pointer to the PointSet structure */
- const char *result; /* Pointer value to return */
- int ncoord; /* Ncoord attribute value */
- int npoint; /* Npoint attribute value */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the PointSet structure. */
- this = (AstPointSet *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null-terminated string in an appropriate
- format. Set "result" to point at the result string. */
-
-/* Ncoord. */
-/* ------- */
- if ( !strcmp( attrib, "ncoord" ) ) {
- ncoord = astGetNcoord( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ncoord );
- result = getattrib_buff;
- }
-
-/* Npoint. */
-/* ------- */
- } else if ( !strcmp( attrib, "npoint" ) ) {
- npoint = astGetNpoint( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", npoint );
- result = getattrib_buff;
- }
-
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pointset.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* PointSet member function (over-rides the astGetObjSize protected
-* method inherited from the Object class).
-
-* Description:
-* This function returns the in-memory size of the supplied PointSet,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstPointSet *this; /* Pointer to PointSet structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the PointSet structure. */
- this = (AstPointSet *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
-
- result += astTSizeOf( this->ptr );
- result += astTSizeOf( this->values );
- result += astTSizeOf( this->acc );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static int GetNcoord( const AstPointSet *this, int *status ) {
-/*
-*+
-* Name:
-* astGetNcoord
-
-* Purpose:
-* Get the number of coordinate values per point from a PointSet.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "pointset.h"
-* int astGetNcoord( const AstPointSet *this )
-
-* Class Membership:
-* PointSet method.
-
-* Description:
-* This function returns the number of coordinate values per point (1 or
-* more) for a PointSet.
-
-* Parameters:
-* this
-* Pointer to the PointSet.
-
-* Returned Value:
-* The number of coordinate values per point.
-
-* Notes:
-* - A value of zero is returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Return the number of coordinate values. */
- return this->ncoord;
-}
-
-static int GetNpoint( const AstPointSet *this, int *status ) {
-/*
-*+
-* Name:
-* astGetNpoint
-
-* Purpose:
-* Get the number of points in a PointSet.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "pointset.h"
-* int astGetNpoint( const AstPointSet *this )
-
-* Class Membership:
-* PointSet method.
-
-* Description:
-* This function returns the number of points (1 or more) in a PointSet.
-
-* Parameters:
-* this
-* Pointer to the PointSet.
-
-* Returned Value:
-* The number of points.
-
-* Notes:
-* - A value of zero is returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Return the number of points. */
- return this->npoint;
-}
-
-static double **GetPoints( AstPointSet *this, int *status ) {
-/*
-*+
-* Name:
-* astGetPoints
-
-* Purpose:
-* Get a pointer for the coordinate values associated with a PointSet.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "pointset.h"
-* double **astGetPoints( AstPointSet *this )
-
-* Class Membership:
-* PointSet method.
-
-* Description:
-* This function returns a pointer which grants access to the coordinate
-* values associated with a PointSet. If the PointSet has previously had
-* coordinate values associated with it, this pointer will identify these
-* values. Otherwise, it will point at a newly-allocated region of memory
-* (associated with the PointSet) in which new coordinate values may be
-* stored.
-
-* Parameters:
-* this
-* Pointer to the PointSet.
-
-* Returned Value:
-* A pointer to an array of type double* with ncoord elements (where ncoord
-* is the number of coordinate values per point). Each element of this array
-* points at an array of double, of size npoint (where npoint is the number
-* of points in the PointSet), containing the values of that coordinate for
-* each point in the set. Hence, the value of the i'th coordinate for the
-* j'th point (where i and j are counted from zero) is given by ptr[i][j]
-* where ptr is the returned pointer value.
-
-* Notes:
-* - The returned pointer points at an array of pointers allocated
-* internally within the PointSet. The values in this array may be changed
-* by the caller, who is reponsible for ensuring that they continue to
-* point at valid arrays of coordinate values.
-* - No attempt should be made to de-allocate memory allocated by a
-* PointSet to store coordinate values or pointers to them. This memory
-* will be freed when the PointSet is deleted.
-* - No count is kept of the number of pointers issued for the PointSet
-* coordinate values. The caller must keep track of these.
-* - A NULL pointer is returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- int i; /* Loop counter for coordinates */
- int nval; /* Number of values to be stored */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* If the PointSet has an existing array of pointers (which point at coordinate
- values), we will simply return a pointer to it. Otherwise, we must allocate
- space to hold new coordinate values. */
- if( !this->ptr ) {
-
-/* Determine the number of coordinate values to be stored and allocate memory
- to hold them, storing the pointer to this values array in the PointSet
- structure. */
- nval = this->npoint * this->ncoord;
- this->values = (double *) astMalloc( sizeof( double ) * (size_t) nval );
-
-#ifdef DEBUG
- for( i = 0; i < nval; i++ ) this->values[ i ] = 0.0;
-#endif
-
-/* If OK, also allocate memory for the array of pointers into this values
- array, storing a pointer to this pointer array in the PointSet structure. */
- if ( astOK ) {
- this->ptr = (double **) astMalloc( sizeof( double * )
- * (size_t) this->ncoord );
-
-/* If OK, initialise the pointer array to point into the values array. */
- if ( astOK ) {
- for ( i = 0; i < this->ncoord; i++ ) {
- this->ptr[ i ] = this->values + ( i * this->npoint );
- }
-
-/* If we failed to allocate the pointer array, then free the values array. */
- } else {
- this->values = (double *) astFree( (void *) this->values );
- }
- }
-
-#ifdef DEBUG
- } else {
-
-/* Check for bad values */
- if( this->values ) {
- int i, j;
- for( i = 0; astOK && i < this->ncoord; i++ ) {
- for( j = 0; j < this->npoint; j++ ) {
- if( !finite( (this->ptr)[ i ][ j ] ) ) {
- astError( AST__INTER, "astGetPoints(PointSet): Non-finite "
- "axis value returned.", status);
- break;
- }
- }
- }
- }
-
-#endif
- }
-
-/* Return the required pointer. */
- return this->ptr;
-}
-
-void astInitPointSetVtab_( AstPointSetVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitPointSetVtab
-
-* Purpose:
-* Initialise a virtual function table for a PointSet.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "pointset.h"
-* void astInitPointSetVtab( AstPointSetVtab *vtab, const char *name )
-
-* Class Membership:
-* PointSet vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the PointSet class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitObjectVtab( (AstObjectVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAPointSet) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstObjectVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
- vtab->AppendPoints = AppendPoints;
- vtab->BndPoints = BndPoints;
- vtab->GetNcoord = GetNcoord;
- vtab->GetNpoint = GetNpoint;
- vtab->GetPoints = GetPoints;
- vtab->PermPoints = PermPoints;
- vtab->SetPoints = SetPoints;
- vtab->SetNpoint = SetNpoint;
- vtab->SetSubPoints = SetSubPoints;
-
- vtab->GetPointAccuracy = GetPointAccuracy;
- vtab->SetPointAccuracy = SetPointAccuracy;
- vtab->TestPointAccuracy = TestPointAccuracy;
- vtab->ClearPointAccuracy = ClearPointAccuracy;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
- parent_equal = object->Equal;
- object->Equal = Equal;
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
-/* Declare the copy constructor, destructor and class dump function. */
- astSetCopy( vtab, Copy );
- astSetDelete( vtab, Delete );
- astSetDump( vtab, Dump, "PointSet", "Container for a set of points" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static void PermPoints( AstPointSet *this, int forward, const int perm[], int *status ) {
-/*
-*+
-* Name:
-* astPermPoints
-
-* Purpose:
-* Permute the order of a PointSet's axes.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "pointset.h"
-* void astPermPoints( AstPointSet *this, int forward, const int perm[] )
-
-* Class Membership:
-* PointSet method.
-
-* Description:
-* This function permutes the order in which a PointSet's axes occur.
-
-* Parameters:
-* this
-* Pointer to the PointSet.
-* forward
-* The direction in which the permutation is to be applied. This
-* controls the use of the "perm" arrays. If a non-zero value is
-* given, then the indices into the "perm" array correspond to the
-* indices of the coordinates in the returned PointSet, and the
-* values stored in the "perm" array correspond to the indices of
-* the coordinates in the supplied PointSet. If a zero value is
-* given, then the indices into the "perm" array correspond to the
-* indices of the coordinates in the supplied PointSet, and the
-* values stored in the "perm" array correspond to the indices of
-* the coordinates in the returnedPointSet.
-* perm
-* An array of int (with one element for each axis of the PointSet)
-* which lists the axes in their new order. How this array is use
-* depends on the value supplied for "forward".
-
-* Notes:
-* - Only genuine permutations of the axis order are permitted, so
-* each axis must be referenced exactly once in the "perm" array.
-* - If more than one axis permutation is applied to a PointSet, the
-* effects are cumulative.
-*-
-*/
-
-/* Local Variables: */
- double **old; /* Pointer to copy of old pointer array */
- int coord; /* Loop counter for axes */
- int ncoord; /* Number of axes */
-
-/* Check the global error status. Return without action if no data is
- associated with the PointSet. */
- if ( !astOK || !this->ptr ) return;
-
-/* Validate the permutation array, to check that it describes a genuine
- permutation. */
- CheckPerm( this, perm, "astPermPoints", status );
-
-/* Obtain the number of PointSet axes. */
- ncoord = astGetNcoord( this );
-
-/* Allocate memory and use it to store a copy of the old pointers array for
- the PointSet. */
- old = astStore( NULL, this->ptr, sizeof( double * ) * (size_t) ncoord );
-
-/* Apply the new axis permutation cumulatively to the old one and store the
- result in the PointSet. */
- if ( astOK ) {
- if( forward ) {
- for ( coord = 0; coord < ncoord; coord++ ) {
- this->ptr[ coord ] = old[ perm[ coord ] ];
- }
- } else {
- for ( coord = 0; coord < ncoord; coord++ ) {
- this->ptr[ perm[ coord ] ] = old[ coord ];
- }
- }
- }
-
-/* Free the temporary copy of the old array. */
- old = astFree( old );
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a PointSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pointset.h"
-* void SetAttrib( AstObject *this, const char *setting )
-
-* Class Membership:
-* PointSet member function (over-rides the astSetAttrib protected
-* method inherited from the Object class).
-
-* Description:
-* This function assigns an attribute value for a PointSet, the
-* attribute and its value being specified by means of a string of
-* the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in
-* lower case with no white space present. The value to the right
-* of the "=" should be a suitable textual representation of the
-* value to be assigned and this will be interpreted according to
-* the attribute's data type. White space surrounding the value is
-* only significant for string attributes.
-
-* Parameters:
-* this
-* Pointer to the PointSet.
-* setting
-* Pointer to a null-terminated string specifying the new
-* attribute value.
-*/
-
-/* Local Variables: */
- AstPointSet *this; /* Pointer to the PointSet structure */
- int len; /* Length of setting string */
- int nc; /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the PointSet structure. */
- this = (AstPointSet *) this_object;
-
-/* Obtain the length of the setting string. */
- len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
- the setting string and extract the attribute value (or an offset to
- it in the case of string values). In each case, use the value set
- in "nc" to check that the entire string was matched. Once a value
- has been obtained, use the appropriate method to set it. */
-
-/* Define a macro to see if the setting string matches any of the
- read-only attributes of this class. */
-#define MATCH(attrib) \
- ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
- ( nc >= len ) )
-
-/* Use this macro to report an error if a read-only attribute has been
- specified. */
- if ( MATCH( "ncoord" ) ||
- MATCH( "npoint" ) ) {
- astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.", status,
- setting, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-
-/* Undefine macros local to this function. */
-#undef MATCH
-}
-
-static void SetNpoint( AstPointSet *this, int npoint, int *status ) {
-/*
-*+
-* Name:
-* astSetNpoint
-
-* Purpose:
-* Reduce the number of points in a PointSet.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "pointset.h"
-* void astSetNpoint( AstPointSet *this, int npoint )
-
-* Class Membership:
-* PointSet method.
-
-* Description:
-* This function reduces the number of points stored in a PointSet.
-* Points with indices beyond the new size will be discarded.
-
-* Parameters:
-* this
-* Pointer to the PointSet.
-* npoint
-* The new value for the number of points in the PointSet. Must be
-* less than or equal to the original size of the PointSet, and
-* greater than zero.
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Check the new size is valid. */
- if( npoint < 1 || npoint > this->npoint ) {
- astError( AST__NPTIN, "astSetNpoint(%s): Number of points (%d) is "
- "not valid.", status, astGetClass( this ), npoint );
- astError( AST__NPTIN, "Should be in the range 1 to %d.", status, this->npoint );
-
-/* Store the new size. */
- } else {
- this->npoint = npoint;
- }
-}
-
-static void SetPoints( AstPointSet *this, double **ptr, int *status ) {
-/*
-*+
-* Name:
-* astSetPoints
-
-* Purpose:
-* Associate coordinate values with a PointSet.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "pointset.h"
-* void astSetPoints( AstPointSet *this, double **ptr )
-
-* Class Membership:
-* PointSet method.
-
-* Description:
-* This function associates coordinate values with a PointSet by storing an
-* array of pointers to the values within the PointSet object. A pointer to
-* this pointer array will later be returned when astGetPoints is used to
-* locate the coordinate values. If values are already associated with the
-* PointSet, the array of pointers to them is over-written by the new values
-* (any internally allocated memory holding the actual coordinate values
-* first being freed).
-
-* Parameters:
-* this
-* Pointer to the PointSet.
-* ptr
-* Pointer to an array of type double* with ncoord elements (where ncoord
-* is the number of coordinate values per point in the PointSet). Each
-* element of this array should point at an array of double with npoint
-* elements (where npoint is the number of points in the PointSet),
-* containing the values of that coordinate for each point in the set.
-* Hence, the value of the i'th coordinate for the j'th point (where i
-* and j are counted from zero) should be given by ptr[i][j].
-
-* Returned Value:
-* void
-
-* Notes:
-* - It is the caller's responsibility to ensure that the pointer supplied
-* points at a valid array of pointers that point at arrays of coordinate
-* values. This is only superficially validated by this function, which then
-* simply stores a copy of the supplied array of pointers for later use.
-* The caller must also manage any allocation (and freeing) of memory for
-* these coordinate values.
-* - This functon makes a copy of the array of pointers supplied, but does
-* not copy the coordinate values they point at. If a PointSet containing a
-* copy of the coordinate values is required, internal memory should be
-* allocated within the PointSet by calling astGetPoints before storing any
-* pointer, and then copying the values into this memory. Alternatively,
-* using astCopy to produce a deep copy of a PointSet will also copy the
-* coordinate values.
-* - A NULL pointer may be supplied as the "ptr" argument, in which case
-* any previously stored array of pointers will be cancelled (and internal
-* memory freed if necessary) and subsequent use of astGetPoints will then
-* cause memory to be allocated internally by the PointSet to hold new
-* values.
-*-
-*/
-
-/* Local Variables: */
- int i; /* Loop counter for coordinates */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* If the pointer supplied is not NULL, inspect each pointer in the array it
- points at to check that none of these are NULL. This validates (to some
- extent) the caller's data structure. Report an error and quit checking if a
- NULL pointer is found. */
- if ( ptr ) {
- for ( i = 0; i < this->ncoord; i++ ) {
- if ( !ptr[ i ] ) {
- astError( AST__PDSIN, "astSetPoints(%s): Invalid NULL pointer in "
- "element %d of array of pointers to coordinate values.", status,
- astGetClass( this ), i );
- break;
- }
- }
- }
-
-/* Do not carry on if the data structure is obviously invalid. */
- if ( astOK ) {
-
-/* Free any memory previously allocated to store coordinate values. */
- this->values = (double *) astFree( (void *) this->values );
-
-/* If a new array of pointers has been provided, (re)allocate memory and store
- a copy of the array in it, saving a pointer to this copy in the PointSet
- structure. */
- if ( ptr ) {
- this->ptr = (double **) astStore( (void *) this->ptr,
- (const void *) ptr,
- sizeof( double * )
- * (size_t) this->ncoord );
-
-/* If no pointer array was provided, free the previous one (if any). */
- } else {
- this->ptr = (double **) astFree( (void *) this->ptr );
- }
- }
-}
-
-static void SetSubPoints( AstPointSet *point1, int point, int coord,
- AstPointSet *point2, int *status ) {
-/*
-*+
-* Name:
-* astSetSubPoints
-
-* Purpose:
-* Associate a subset of one PointSet with another PointSet.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "pointset.h"
-* void astSetSubPoints( AstPointSet *point1, int point, int coord,
-* AstPointSet *point2 )
-
-* Class Membership:
-* PointSet method.
-
-* Description:
-* This function selects a subset of the coordinate values associated with
-* one PointSet and associates them with another PointSet. The second
-* PointSet may then be used to access the subset. Any previous coordinate
-* value association with the second PointSet is replaced.
-
-* Parameters:
-* point1
-* Pointer to the first PointSet, from which a subset is to be selected.
-* point
-* The index of the first point (counting from zero) which is to appear
-* in the subset (the number of points is determined by the size of the
-* second PointSet).
-* coord
-* The index of the first coordinate (counting from zero) which is to
-* appear in the subset (the number of coordinates is determined by the
-* size of the second PointSet).
-* point2
-* Second PointSet, with which the subset of coordinate values is to be
-* associated.
-
-* Returned Value:
-* void
-
-* Notes:
-* - The range of points and coordinates selected must lie entirely within
-* the first PointSet.
-* - This function does not make a copy of the coordinate values, but
-* merely stores pointers to the required subset of values associated with
-* the first PointSet. If a PointSet containing a copy of the subset's
-* coordinate values is required, then astCopy should be used to make a
-* deep copy from the second PointSet.
-* - If the first PointSet does not yet have coordinate values associated
-* with it, then space will be allocated within it to hold values (so that
-* the second PointSet has somewhere to point at).
-*-
-*/
-
-/* Local Variables: */
- double ** ptr2; /* Pointer to new pointer array */
- double **ptr1; /* Pointer to original pointer array */
- int i; /* Loop counter for coordinates */
- int ncoord1; /* Number of coordinates in first PointSet */
- int ncoord2; /* Number of coordinates in second PointSet */
- int npoint1; /* Number of points in first PointSet */
- int npoint2; /* Number of points in second PointSet */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain the sizes of both PointSets. */
- npoint1 = astGetNpoint( point1 );
- npoint2 = astGetNpoint( point2 );
- ncoord1 = astGetNcoord( point1 );
- ncoord2 = astGetNcoord( point2 );
-
-/* Check if the range of points required lies within the first PointSet and
- report an error if it does not. */
- if ( astOK ) {
- if ( ( point < 0 ) || ( point + npoint2 > npoint1 ) ) {
- astError( AST__PTRNG, "astSetSubPoints(%s): Range of points in "
- "output %s (%d to %d) lies outside the input %s extent "
- "(0 to %d).", status,
- astGetClass( point1 ), astGetClass( point2 ), point,
- point + npoint2, astGetClass( point1 ), npoint1 );
-
-/* Similarly check that the range of coordinates is valid. */
- } else if ( ( coord < 0 ) || ( coord + ncoord2 > ncoord1 ) ) {
- astError( AST__CORNG, "astSetSubPoints(%s): Range of coordinates in "
- "output %s (%d to %d) lies outside the input %s extent "
- "(0 to %d).", status,
- astGetClass( point1 ), astGetClass( point2 ), coord,
- coord + ncoord2, astGetClass( point1 ), ncoord1 );
-
-/* Obtain a pointer for the coordinate values associated with the first
- PointSet (this will cause internal memory to be allocated if it is not
- yet associated with coordinate values). */
- } else {
- ptr1 = astGetPoints( point1 );
-
-/* Allocate a temporary array to hold new pointer values. */
- ptr2 = (double **) astMalloc( sizeof( double * ) * (size_t) ncoord2 );
-
-/* Initialise this pointer array to point at the required subset of coordinate
- values. */
- if ( astOK ) {
- for ( i = 0; i < ncoord2; i++ ) {
- ptr2[ i ] = ptr1[ i + coord ] + point;
- }
-
-/* Associate the second PointSet with this new pointer array. This will free
- any internally allocated memory and replace any existing coordinate value
- association. */
- astSetPoints( point2, ptr2 );
- }
-
-/* Free the temporary pointer arry. */
- ptr2 = (double **) astFree( (void * ) ptr2 );
- }
- }
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a PointSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pointset.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* PointSet member function (over-rides the astTestAttrib protected
-* method inherited from the Object class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate
-* whether a value has been set for one of a PointSet's attributes.
-
-* Parameters:
-* this
-* Pointer to the PointSet.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstPointSet *this; /* Pointer to the PointSet structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the PointSet structure. */
- this = (AstPointSet *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* Test if the name matches any of the read-only attributes of this
- class. If it does, then return zero. */
- if ( !strcmp( attrib, "ncoord" ) ||
- !strcmp( attrib, "npoint" ) ) {
- result = 0;
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-
-/*
-*att+
-* Name:
-* PointAccuracy
-
-* Purpose:
-* The absolute accuracies for all points in the PointSet.
-
-* Type:
-* Protected attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute holds the absolute accuracy for each axis in the
-* PointSet. It has a separate value for each axis. It is used when
-* comparing two PointSets using the protected astEqual method inherited
-* from the Object class. The default value for each axis is AST__BAD
-* which causes the a default accuracy of each axis value to be calculated
-* as 1.0E8*min( abs(axis value)*DBL_EPSILON, DBL_MIN ).
-
-* Applicability:
-* PointSet
-* All PointSets have this attribute.
-*att-
-*/
-MAKE_CLEAR(PointAccuracy,acc,AST__BAD)
-MAKE_GET(PointAccuracy,double,AST__BAD,this->acc?this->acc[axis]:AST__BAD)
-MAKE_SET(PointAccuracy,double,acc,((value!=AST__BAD)?fabs(value):AST__BAD),AST__BAD)
-MAKE_TEST(PointAccuracy,(this->acc?this->acc[axis]!=AST__BAD:0))
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for PointSet objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for PointSet objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - This constructor makes a deep copy, including a copy of the coordinate
-* values (if any) associated with the input PointSet.
-*/
-
-/* Local Variables: */
- AstPointSet *in; /* Pointer to input PointSet */
- AstPointSet *out; /* Pointer to output PointSet */
- int i; /* Loop counter for coordinates */
- int nval; /* Number of values to store */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output PointSets. */
- in = (AstPointSet *) objin;
- out = (AstPointSet *) objout;
-
-/* For safety, first clear any references to the input coordinate values from
- the output PointSet. */
- out->ptr = NULL;
- out->values = NULL;
- out->acc = NULL;
-
-/* Copy axis accuracies. */
- if( in->acc ){
- out->acc = astStore( NULL, in->acc, sizeof( double )*(size_t) in->ncoord );
- }
-
-/* If the input PointSet is associated with coordinate values, we must
- allocate memory in the output PointSet to hold a copy of them. */
- if ( in->ptr ) {
-
-/* Determine the number of coordinate values to be stored and allocate memory
- to hold them, storing a pointer to this memory in the output PointSet. */
- nval = in->npoint * in->ncoord;
- out->values = (double *) astMalloc( sizeof( double ) * (size_t) nval );
-
-/* If OK, also allocate memory for the array of pointers into this values
- array, storing a pointer to this pointer array in the output PointSet. */
- if ( astOK ) {
- out->ptr = (double **) astMalloc( sizeof( double * )
- * (size_t) in->ncoord );
-
-/* If OK, initialise the new pointer array. */
- if ( astOK ) {
- for ( i = 0; i < in->ncoord; i++ ) {
- out->ptr[ i ] = out->values + ( i * in->npoint );
- }
-
-/* If we failed to allocate the pointer array, then free the values array. */
- } else {
- out->values = (double *) astFree( (void *) out->values );
- }
- }
-
-/* Copy the values for each coordinate from the input to the output. Use a
- memory copy to avoid floating point errors if the data are
- un-initialised. */
- if ( astOK ) {
- for ( i = 0; i < in->ncoord; i++ ) {
- (void) memcpy( (void *) out->ptr[ i ],
- (const void *) in->ptr[ i ],
- sizeof( double ) * (size_t) in->npoint );
- }
- }
- }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for PointSet objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for PointSet objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstPointSet *this; /* Pointer to PointSet */
-
-/* Obtain a pointer to the PointSet structure. */
- this = (AstPointSet *) obj;
-
-/* Free memory holding axis accuracies. */
- this->acc = astFree( this->acc );
-
-/* Free any pointer array and associated coordinate values array, */
- this->ptr = (double **) astFree( (void *) this->ptr );
- this->values = (double *) astFree( (void *) this->values );
-
-/* Clear the remaining PointSet variables. */
- this->npoint = 0;
- this->ncoord = 0;
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for PointSet objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the PointSet class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the PointSet whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - It is not recommended that PointSets containing large numbers
-* of points be written out, as the coordinate data will be
-* formatted as text and this will not be very efficient.
-*/
-
-/* Local Constants: */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstPointSet *this; /* Pointer to the PointSet structure */
- char key[ KEY_LEN + 1 ]; /* Buffer for keywords */
- int coord; /* Loop counter for coordinates */
- int i; /* Counter for coordinate values */
- int ival; /* Integer value */
- int makeComment; /* Include a comment? */
- int point; /* Loop counter for points */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the PointSet structure. */
- this = (AstPointSet *) this_object;
-
-/* Write out values representing the instance variables for the
- PointSet class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* Npoint. */
-/* ------- */
- astWriteInt( channel, "Npoint", 1, 1, this->npoint,
- "Number of points" );
-
-/* Ncoord. */
-/* ------- */
- astWriteInt( channel, "Ncoord", 1, 1, this->ncoord,
- "Number of coordinates per point" );
-
-/* Axis Acuracies. */
-/* --------------- */
- for ( coord = 0; coord < this->ncoord; coord++ ) {
- if( astTestPointAccuracy( this, coord ) ) {
- (void) sprintf( key, "Acc%d", coord + 1 );
- astWriteDouble( channel, key, 1, 1, astGetPointAccuracy( this, coord ),
- (coord == 0 ) ? "Axis accuracies..." : "" );
- }
- }
-
-/* Coordinate data. */
-/* ---------------- */
-/* Write an "Empty" value to indicate whether or not the PointSet
- contains data. */
- ival = ( this->ptr == NULL );
- set = ( ival != 0 );
- astWriteInt( channel, "Empty", set, 0, ival,
- ival ? "PointSet is empty" :
- "PointSet contains data" );
-
-/* If it contains data, create a suitable keyword for each coordinate
- value in turn. */
- if ( this->ptr ) {
- makeComment = 1;
- i = 0;
- for ( point = 0; point < this->npoint; point++ ) {
- for ( coord = 0; coord < this->ncoord; coord++ ) {
- i++;
- (void) sprintf( key, "X%d", i );
-
-/* Write the value out if good. Only supply a comment for the first good value. */
- if( this->ptr[ coord ][ point ] != AST__BAD ) {
- astWriteDouble( channel, key, 1, 1, this->ptr[ coord ][ point ],
- ( makeComment ) ? "Coordinate values..." : "" );
- makeComment = 0;
- }
- }
- }
- }
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAPointSet and astCheckPointSet functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(PointSet,Object)
-astMAKE_CHECK(PointSet)
-
-AstPointSet *astPointSet_( int npoint, int ncoord, const char *options, int *status, ...) {
-/*
-*+
-* Name:
-* astPointSet
-
-* Purpose:
-* Create a PointSet.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "pointset.h"
-* AstPointSet *astPointSet( int npoint, int ncoord,
-* const char *options, ..., int *status )
-
-* Class Membership:
-* PointSet constructor.
-
-* Description:
-* This function creates a new PointSet and optionally initialises its
-* attributes.
-
-* Parameters:
-* npoint
-* The number of points to be stored in the PointSet (must be at
-* least 1).
-* ncoord
-* The number of coordinate values associated with each point
-* (must be at least 1).
-* options
-* Pointer to a null terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new PointSet. The syntax used is the same as
-* for the astSet method and may include "printf" format
-* specifiers identified by "%" symbols in the normal way.
-* status
-* Pointer to the inherited status variable.
-* ...
-* If the "options" string contains "%" format specifiers, then
-* an optional list of arguments may follow it in order to
-* supply values to be substituted for these specifiers. The
-* rules for supplying these are identical to those for the
-* astSet method (and for the C "printf" function).
-
-* Returned Value:
-* A pointer to the new PointSet.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstPointSet *new; /* Pointer to new PointSet */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the PointSet, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitPointSet( NULL, sizeof( AstPointSet ), !class_init,
- &class_vtab, "PointSet", npoint, ncoord );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- PointSet's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new PointSet. */
- return new;
-}
-
-AstPointSet *astPointSetId_( int npoint, int ncoord,
- const char *options, int *status, ...) {
-/*
-* Name:
-* astPointSetId_
-
-* Purpose:
-* Create a PointSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "pointset.h"
-* AstPointSet *astPointSetId_( int npoint, int ncoord,
-* const char *options, ... )
-
-* Class Membership:
-* PointSet constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astPointSet constructor function. It returns an ID value
-* (instead of a true C pointer) to external users, and must be
-* provided because astPointSet_ has a variable argument list which
-* cannot be encapsulated in a macro (where this conversion would
-* otherwise occur).
-*
-* The variable argument list also prevents this function from
-* invoking astPointSet_ directly, so it must be a
-* re-implementation of it in all respects, except for the final
-* conversion of the result to an ID value.
-
-* Parameters:
-* As for astPointSet_.
-
-* Returned Value:
-* The ID value associated with the new PointSet.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstPointSet *new; /* Pointer to new PointSet */
- va_list args; /* Variable argument list */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialise the PointSet, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitPointSet( NULL, sizeof( AstPointSet ), !class_init,
- &class_vtab, "PointSet", npoint, ncoord );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- PointSet's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new PointSet. */
- return astMakeId( new );
-}
-
-AstPointSet *astInitPointSet_( void *mem, size_t size, int init,
- AstPointSetVtab *vtab, const char *name,
- int npoint, int ncoord, int *status ) {
-/*
-*+
-* Name:
-* astInitPointSet
-
-* Purpose:
-* Initialise a PointSet.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "pointset.h"
-* AstPointSet *astInitPointSet( void *mem, size_t size, int init,
-* AstPointSetVtab *vtab, const char *name,
-* int npoint, int ncoord )
-
-* Class Membership:
-* PointSet initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new PointSet object. It allocates memory (if necessary) to accommodate
-* the PointSet plus any additional data associated with the derived class.
-* It then initialises a PointSet structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a PointSet at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the PointSet is to be created. This
-* must be of sufficient size to accommodate the PointSet data
-* (sizeof(PointSet)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the PointSet (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the PointSet
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the PointSet's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new PointSet.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the Object
-* astClass function).
-* npoint
-* The number of points in the PointSet (must be at least 1).
-* ncoord
-* The number of coordinate values associated with each point (must be
-* at least 1).
-
-* Returned Value:
-* A pointer to the new PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstPointSet *new; /* Pointer to new PointSet */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitPointSetVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Check the initialisation values for validity, reporting an error if
- necessary. */
- if ( npoint < 1 ) {
- astError( AST__NPTIN, "astInitPointSet(%s): Number of points (%d) is "
- "not valid.", status, name, npoint );
- } else if ( ncoord < 1 ) {
- astError( AST__NCOIN, "astInitPointSet(%s): Number of coordinates per "
- "point (%d) is not valid.", status, name, ncoord );
- }
-
-/* Initialise an Object structure (the parent class) as the first component
- within the PointSet structure, allocating memory if necessary. */
- new = (AstPointSet *) astInitObject( mem, size, 0,
- (AstObjectVtab *) vtab, name );
-
- if ( astOK ) {
-
-/* Initialise the PointSet data. */
-/* ----------------------------- */
-/* Store the number of points and number of coordinate values per point. */
- new->npoint = npoint;
- new->ncoord = ncoord;
-
-/* Initialise pointers to the pointer array and associated coordinate
- values array. */
- new->ptr = NULL;
- new->values = NULL;
- new->acc = NULL;
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstPointSet *astLoadPointSet_( void *mem, size_t size,
- AstPointSetVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadPointSet
-
-* Purpose:
-* Load a PointSet.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "pointset.h"
-* AstPointSet *astLoadPointSet( void *mem, size_t size,
-* AstPointSetVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* PointSet loader.
-
-* Description:
-* This function is provided to load a new PointSet using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* PointSet structure in this memory, using data read from the
-* input Channel.
-
-* Parameters:
-* mem
-* A pointer to the memory into which the PointSet is to be
-* loaded. This must be of sufficient size to accommodate the
-* PointSet data (sizeof(PointSet)) plus any data used by
-* derived classes. If a value of NULL is given, this function
-* will allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the PointSet (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the PointSet structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstPointSet) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new PointSet. If this is NULL, a pointer
-* to the (static) virtual function table for the PointSet class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "PointSet" is used instead.
-
-* Returned Value:
-* A pointer to the new PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Constants: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstPointSet *new; /* Pointer to the new PointSet */
- char key[ KEY_LEN + 1 ]; /* Buffer for keywords */
- double acc; /* Accuracy value */
- int coord; /* Loop counter for coordinates */
- int empty; /* PointSet empty? */
- int i; /* Counter for coordinate values */
- int point; /* Loop counter for points */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this PointSet. In this case the
- PointSet belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstPointSet );
- vtab = &class_vtab;
- name = "PointSet";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitPointSetVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built PointSet. */
- new = astLoadObject( mem, size, (AstObjectVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Initialise the PointSet's data pointers. */
- new->ptr = NULL;
- new->values = NULL;
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "PointSet" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* Npoint. */
-/* ------- */
- new->npoint = astReadInt( channel, "npoint", 1 );
- if ( new->npoint < 1 ) new->npoint = 1;
-
-/* Ncoord. */
-/* ------- */
- new->ncoord = astReadInt( channel, "ncoord", 1 );
- if ( new->ncoord < 1 ) new->ncoord = 1;
-
-/* Axis Acuracies. */
-/* --------------- */
- new->acc = NULL;
- for ( coord = 0; coord < new->ncoord; coord++ ) {
- (void) sprintf( key, "acc%d", coord + 1 );
- acc = astReadDouble( channel, key, AST__BAD );
- if( !new->acc && acc != AST__BAD ) {
- new->acc = astMalloc( sizeof( double )*(size_t) new->ncoord );
- if( new->acc ) {
- for( i = 0; i < coord - 1; i++ ) new->acc[ i ] = AST__BAD;
- }
- }
- if( new->acc ) new->acc[ coord ] = acc;
- }
-
-/* Coordinate data. */
-/* ---------------- */
-/* Read a value for the "Empty" keyword to see whether the PointSet
- contains data. */
- empty = astReadInt( channel, "empty", 0 );
-
-/* If it does, allocate memory to hold the coordinate data and
- pointers. */
- if ( astOK && !empty ) {
- new->ptr = astMalloc( sizeof( double * ) * (size_t) new->ncoord );
- new->values = astMalloc( sizeof( double ) *
- (size_t) ( new->npoint * new->ncoord ) );
- if ( astOK ) {
-
-/* Initialise the array of pointers into the main data array. */
- for ( coord = 0; coord < new->ncoord; coord++ ) {
- new->ptr[ coord ] = new->values + ( coord * new->npoint );
- }
-
-/* Create a keyword for each coordinate value to be read. */
- i = 0;
- for ( point = 0; point < new->npoint; point++ ) {
- for ( coord = 0; coord < new->ncoord; coord++ ) {
- i++;
- (void) sprintf( key, "x%d", i );
-
-/* Read and assign the values. */
- new->ptr[ coord ][ point ] =
- astReadDouble( channel, key, AST__BAD );
- }
- }
- }
-
-/* If an error occurred, clean up by freeing the memory allocated
- above, thus emptying the PointSet. */
- if ( !astOK ) {
- new->ptr = astFree( new->ptr );
- new->values = astFree( new->values );
- }
- }
-
-/* If an error occurred, clean up by deleting the new PointSet. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new PointSet pointer. */
- return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-int astGetNpoint_( const AstPointSet *this, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,PointSet,GetNpoint))( this, status );
-}
-int astGetNcoord_( const AstPointSet *this, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,PointSet,GetNcoord))( this, status );
-}
-double **astGetPoints_( AstPointSet *this, int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,PointSet,GetPoints))( this, status );
-}
-void astPermPoints_( AstPointSet *this, int forward, const int perm[], int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,PointSet,PermPoints))( this, forward, perm, status );
-}
-void astSetPoints_( AstPointSet *this, double **ptr, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,PointSet,SetPoints))( this, ptr, status );
-}
-void astSetNpoint_( AstPointSet *this, int npoint, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,PointSet,SetNpoint))( this, npoint, status );
-}
-void astSetSubPoints_( AstPointSet *point1, int point, int coord,
- AstPointSet *point2, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(point1,PointSet,SetSubPoints))( point1, point, coord, point2, status );
-}
-AstPointSet *astAppendPoints_( AstPointSet *this, AstPointSet *that, int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,PointSet,AppendPoints))( this, that, status );
-}
-void astBndPoints_( AstPointSet *this, double *lbnd, double *ubnd, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,PointSet,BndPoints))( this, lbnd, ubnd, status );
-}
-
-
-
-
-
diff --git a/ast-5.3-1/pointset.h b/ast-5.3-1/pointset.h
deleted file mode 100644
index 63d798f..0000000
--- a/ast-5.3-1/pointset.h
+++ /dev/null
@@ -1,568 +0,0 @@
-#if !defined( POINTSET_INCLUDED ) /* Include this file only once */
-#define POINTSET_INCLUDED
-/*
-*+
-* Name:
-* pointset.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the PointSet class.
-
-* Invocation:
-* #include "pointset.h"
-
-* Description:
-* This include file defines the interface to the PointSet class
-* and provides the type definitions, function prototypes and
-* macros, etc. needed to use this class.
-*
-* The PointSet class encapsulates sets of coordinate values
-* representing points in an N-dimensional space, to which
-* coordinate transformations may be applied. It also provides
-* memory allocation facilities for coordinate values.
-
-* Inheritance:
-* The PointSet class inherits from the Object class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* Ncoord (integer)
-* A read-only attribute that gives the number of coordinates
-* for each point in a PointSet (i.e. the number of dimensions
-* of the space in which the points reside). This value is
-* determined when the PointSet is created.
-* Npoint (integer)
-* A read-only attribute that gives the number of points that
-* can be stored in the PointSet. This value is determined when
-* the PointSet is created.
-* PointAccuracy (floating point)
-* This stores the absolute accuracies for each axis in the PointSet.
-
-* Methods Over-Ridden:
-* Public:
-* None.
-*
-* Protected:
-* ClearAttrib
-* Clear an attribute value for a PointSet.
-* GetAttrib
-* Get an attribute value for a PointSet.
-* SetAttrib
-* Set an attribute value for a PointSet.
-* TestAttrib
-* Test if an attribute value has been set for a PointSet.
-
-* New Methods Defined:
-* Public:
-* astAppendPoints
-* Append one PointSet to another.
-* astBndPoints
-* Find the axis bounds of the points in a PointSet.
-* astGetPoints
-* Get a pointer to the coordinate values associated with a PointSet.
-* astPermPoints
-* Permute coordinates within a PointSet.
-* astSetPoints
-* Associate coordinate values with a PointSet.
-* astSetNpoint
-* Reduce the size of a PointSet.
-* astSetSubPoints
-* Associate one PointSet with a subset of another.
-*
-* Protected:
-* astGetNpoint
-* Get the number of points in a PointSet.
-* astGetNcoord
-* Get the number of coordinate values per point from a PointSet.
-* astGetPointAccuracy
-* Get the curent value of the PointAcuracy attribute for an axis.
-* astSetPointAccuracy
-* Set a new value for the PointAcuracy attribute for an axis.
-* astTestPointAccuracy
-* Test the value of the PointAcuracy attribute for an axis.
-* astClearPointAccuracy
-* Clear the value of the PointAcuracy attribute for an axis.
-
-* Other Class Functions:
-* Public:
-* astIsAPointSet
-* Test class membership.
-* astPointSet
-* Create a PointSet.
-*
-* Protected:
-* astCheckPointSet
-* Validate class membership.
-* astInitPointSet
-* Initialise a PointSet.
-* astInitPointSetVtab
-* Initialise the virtual function table for the PointSet class.
-* astLoadPointSet
-* Load a PointSet.
-
-* Macros:
-* Public:
-* AST__BAD
-* Bad value flag for coordinate data.
-*
-* Protected:
-* astISBAD
-* Check if a value is AST__BAD or NaN.
-* astISGOOD
-* Check if a value is not AST__BAD or NaN.
-* astISNAN
-* Check if a value is NaN.
-
-* Type Definitions:
-* Public:
-* AstPointSet
-* PointSet object type.
-*
-* Protected:
-* AstPointSetVtab
-* PointSet virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 30-JAN-1996 (RFWS):
-* Original version.
-* 27-SEP-1996 (RFWS):
-* Added external interface and I/O facilities.
-* 8-JAN-2003 (DSB):
-* Added protected astInitPointSetVtab method.
-* 2-NOV-2004 (DSB):
-* Added PointAccuracy attribute.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-
-/* Configuration results. */
-/* ---------------------- */
-#include <config.h>
-
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h" /* Base Object class */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#include <math.h>
-
-#if !HAVE_DECL_ISNAN
-# if HAVE_ISNAN
- /* Seems that math.h does not include a prototype for isnan */
- int isnan( double );
-# else
-# define isnan(x) ((x) != (x))
-# endif
-#endif
-#endif
-
-/* Macros. */
-/* ======= */
-/*
-*+
-* Name:
-* AST__BAD
-
-* Type:
-* Public macro.
-
-* Purpose:
-* Bad value flag for coordinate data.
-
-* Synopsis:
-* #include "pointset.h"
-* const double AST__BAD
-
-* Class Membership:
-* Defined by the PointSet class.
-
-* Description:
-* This macro expands to a const double value that is used to flag
-* coordinate values that are "bad" (i.e. undefined or
-* meaningless). Classes that implement coordinate transformations
-* should test coordinate values against this value, and
-* appropriately propagate bad values to their output.
-*-
-*/
-
-/* Define AST__BAD to be the most negative (normalised) double
- value. */
-
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-#define AST__BAD (-(DBL_MAX))
-
-#if defined(astCLASS) /* Protected */
-
-/*
-*+
-* Name:
-* astISNAN
-
-* Type:
-* Protected macro.
-
-* Purpose:
-* Test if a double is NaN.
-
-* Synopsis:
-* #include "pointset.h"
-* astISNAN(value)
-
-* Class Membership:
-* Defined by the PointSet class.
-
-* Description:
-* This macro expands to a integer valued expression which is zero
-* if and only if the supplied value equals NaN ("Not a Number").
-
-* Parameters:
-* value
-* The value to be tested. This should be a double.
-
-* Examples:
-* if( astISNAN(x) ) x = AST__BAD;
-* If "x" is NaN replace it with AST__BAD.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave
-* any white space around the macro arguments.
-*-
-*/
-
-#define astISNAN(value) isnan(value)
-
-/*
-*+
-* Name:
-* astISGOOD
-
-* Type:
-* Protected macro.
-
-* Purpose:
-* Test if a double is neither AST__BAD nor NaN.
-
-* Synopsis:
-* #include "pointset.h"
-* astISGOOD(value)
-
-* Class Membership:
-* Defined by the PointSet class.
-
-* Description:
-* This macro expands to a integer valued expression which is zero
-* if and only if the supplied value equals AST__BAD or is NaN ("Not a
-* Number").
-
-* Parameters:
-* value
-* The value to be tested. This should be a double.
-
-* Examples:
-* if( astISGOOD(x) ) y = x;
-* Checks that "x" is usable before assigning it to y.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave
-* any white space around the macro arguments.
-*-
-*/
-
-#define astISGOOD(value) ( (value) != AST__BAD && !astISNAN(value) )
-
-
-/*
-*+
-* Name:
-* astISBAD
-
-* Type:
-* Protected macro.
-
-* Purpose:
-* Test if a double is either AST__BAD or NaN.
-
-* Synopsis:
-* #include "pointset.h"
-* astISBAD(value)
-
-* Class Membership:
-* Defined by the PointSet class.
-
-* Description:
-* This macro expands to a integer valued expression which is non-zero
-* if and only if the supplied value equals AST__BAD or is NaN ("Not a
-* Number").
-
-* Parameters:
-* value
-* The value to be tested. This should be a double.
-
-* Examples:
-* if( astISBAD(x) ) astError( ... );
-* Reports an error if "x" is bad.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave
-* any white space around the macro arguments.
-*-
-*/
-
-#define astISBAD(value) ( (value) == AST__BAD || astISNAN(value) )
-
-#endif
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* PointSet structure. */
-/* ------------------- */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstPointSet {
-
-/* Attributes inherited from the parent class. */
- AstObject object; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- double **ptr; /* Pointer to array of pointers to values */
- double *values; /* Pointer to array of coordinate values */
- int ncoord; /* Number of coordinate values per point */
- int npoint; /* Number of points */
- double *acc; /* Axis accuracies */
-} AstPointSet;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstPointSetVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstObjectVtab object_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- AstPointSet *(* AppendPoints)( AstPointSet *, AstPointSet *, int * );
- double **(* GetPoints)( AstPointSet *, int * );
- int (* GetNcoord)( const AstPointSet *, int * );
- int (* GetNpoint)( const AstPointSet *, int * );
- void (* BndPoints)( AstPointSet *, double *, double *, int * );
- void (* PermPoints)( AstPointSet *, int, const int[], int * );
- void (* SetNpoint)( AstPointSet *, int, int * );
- void (* SetPoints)( AstPointSet *, double **, int * );
- void (* SetSubPoints)( AstPointSet *, int, int, AstPointSet *, int * );
-
- double (* GetPointAccuracy)( AstPointSet *, int, int * );
- int (* TestPointAccuracy)( AstPointSet *, int, int * );
- void (* ClearPointAccuracy)( AstPointSet *, int, int * );
- void (* SetPointAccuracy)( AstPointSet *, int, double, int * );
-
-} AstPointSetVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstPointSetGlobals {
- AstPointSetVtab Class_Vtab;
- int Class_Init;
- char GetAttrib_Buff[ 101 ];
-} AstPointSetGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(PointSet) /* Check class membership */
-astPROTO_ISA(PointSet) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstPointSet *astPointSet_( int, int, const char *, int *, ...);
-#else
-AstPointSet *astPointSetId_( int, int, const char *, ... )__attribute__((format(printf,3,4)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstPointSet *astInitPointSet_( void *, size_t, int, AstPointSetVtab *,
- const char *, int, int, int * );
-
-/* Vtab initialiser. */
-void astInitPointSetVtab_( AstPointSetVtab *, const char *, int * );
-
-/* Loader. */
-AstPointSet *astLoadPointSet_( void *, size_t, AstPointSetVtab *,
- const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitPointSetGlobals_( AstPointSetGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-double **astGetPoints_( AstPointSet *, int * );
-void astPermPoints_( AstPointSet *, int, const int[], int * );
-void astSetPoints_( AstPointSet *, double **, int * );
-void astSetNpoint_( AstPointSet *, int, int * );
-void astSetSubPoints_( AstPointSet *, int, int, AstPointSet *, int * );
-AstPointSet *astAppendPoints_( AstPointSet *, AstPointSet *, int * );
-void astBndPoints_( AstPointSet *, double *, double *, int * );
-
-# if defined(astCLASS) /* Protected */
-int astGetNcoord_( const AstPointSet *, int * );
-int astGetNpoint_( const AstPointSet *, int * );
-
-double astGetPointAccuracy_( AstPointSet *, int, int * );
-int astTestPointAccuracy_( AstPointSet *, int, int * );
-void astClearPointAccuracy_( AstPointSet *, int, int * );
-void astSetPointAccuracy_( AstPointSet *, int, double, int * );
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckPointSet(this) astINVOKE_CHECK(PointSet,this,0)
-#define astVerifyPointSet(this) astINVOKE_CHECK(PointSet,this,1)
-
-/* Test class membership. */
-#define astIsAPointSet(this) astINVOKE_ISA(PointSet,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astPointSet astINVOKE(F,astPointSet_)
-#else
-#define astPointSet astINVOKE(F,astPointSetId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitPointSet(mem,size,init,vtab,name,npoint,ncoord) \
-astINVOKE(O,astInitPointSet_(mem,size,init,vtab,name,npoint,ncoord,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitPointSetVtab(vtab,name) astINVOKE(V,astInitPointSetVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadPointSet(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadPointSet_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckPointSet to validate PointSet pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#define astGetPoints(this) \
-astINVOKE(V,astGetPoints_(astCheckPointSet(this),STATUS_PTR))
-#define astPermPoints(this,forward,perm) \
-astINVOKE(V,astPermPoints_(astCheckPointSet(this),forward,perm,STATUS_PTR))
-#define astSetPoints(this,ptr) \
-astINVOKE(V,astSetPoints_(astCheckPointSet(this),ptr,STATUS_PTR))
-#define astSetNpoint(this,np) \
-astINVOKE(V,astSetNpoint_(astCheckPointSet(this),np,STATUS_PTR))
-#define astSetSubPoints(point1,point,coord,point2) \
-astINVOKE(V,astSetSubPoints_(astCheckPointSet(point1),point,coord,astCheckPointSet(point2),STATUS_PTR))
-#define astAppendPoints(this,that) \
-astINVOKE(O,astAppendPoints_(astCheckPointSet(this),astCheckPointSet(that),STATUS_PTR))
-#define astBndPoints(this,lbnd,ubnd) \
-astINVOKE(V,astBndPoints_(astCheckPointSet(this),lbnd,ubnd,STATUS_PTR))
-
-#if defined(astCLASS) /* Protected */
-#define astGetNpoint(this) \
-astINVOKE(V,astGetNpoint_(astCheckPointSet(this),STATUS_PTR))
-#define astGetNcoord(this) \
-astINVOKE(V,astGetNcoord_(astCheckPointSet(this),STATUS_PTR))
-
-#define astClearPointAccuracy(this,axis) \
-astINVOKE(V,astClearPointAccuracy_(astCheckPointSet(this),axis,STATUS_PTR))
-#define astGetPointAccuracy(this,axis) \
-astINVOKE(V,astGetPointAccuracy_(astCheckPointSet(this),axis,STATUS_PTR))
-#define astSetPointAccuracy(this,axis,value) \
-astINVOKE(V,astSetPointAccuracy_(astCheckPointSet(this),axis,value,STATUS_PTR))
-#define astTestPointAccuracy(this,axis) \
-astINVOKE(V,astTestPointAccuracy_(astCheckPointSet(this),axis,STATUS_PTR))
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/polygon.c b/ast-5.3-1/polygon.c
deleted file mode 100644
index 07ea128..0000000
--- a/ast-5.3-1/polygon.c
+++ /dev/null
@@ -1,5405 +0,0 @@
-/*
-*class++
-* Name:
-* Polygon
-
-* Purpose:
-* A polygonal region within a 2-dimensional Frame.
-
-* Constructor Function:
-c astPolygon
-f AST_POLYGON
-
-* Description:
-* The Polygon class implements a polygonal area, defined by a
-* collection of vertices, within a 2-dimensional Frame. The vertices
-* are connected together by geodesic curves within the encapsulated Frame.
-* For instance, if the encapsulated Frame is a simple Frame then the
-* geodesics will be straight lines, but if the Frame is a SkyFrame then
-* the geodesics will be great circles. Note, the vertices must be
-* supplied in an order such that the inside of the polygon is to the
-* left of the boundary as the vertices are traversed. Supplying them
-* in the reverse order will effectively negate the polygon.
-*
-* Within a SkyFrame, neighbouring vertices are always joined using the
-* shortest path. Thus if an edge of 180 degrees or more in length is
-* required, it should be split into section each of which is less
-* than 180 degrees. The closed path joining all the vertices in order
-* will divide the celestial sphere into two disjoint regions. The
-* inside of the polygon is the region which is circled in an
-* anti-clockwise manner (when viewed from the inside of the celestial
-* sphere) when moving through the list of vertices in the order in
-* which they were supplied when the Polygon was created (i.e. the
-* inside is to the left of the boundary when moving through the
-* vertices in the order supplied).
-
-* Inheritance:
-* The Polygon class inherits from the Region class.
-
-* Attributes:
-* The Polygon class does not define any new attributes beyond
-* those which are applicable to all Regions.
-
-* Functions:
-c In addition to those functions applicable to all Regions, the
-c following functions may also be applied to all Polygons:
-f In addition to those routines applicable to all Regions, the
-f following routines may also be applied to all Polygons:
-*
-c - astDownsize: Reduce the number of vertices in a Polygon.
-f - AST_DOWNSIZE: Reduce the number of vertices in a Polygon.
-c - astOutline<X>: Create a Polygon outlining values in a pixel array
-f - AST_OUTLINE<X>: Create a Polygon outlining values in a pixel array
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2009 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 26-OCT-2004 (DSB):
-* Original version.
-* 28-MAY-2009 (DSB):
-* Added astDownsize.
-* 29-MAY-2009 (DSB):
-* Added astOutline<X>.
-* 30-JUN-2009 (DSB):
-* Override astGetBounded.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS Polygon
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
- compare bad values directory because of the danger of floating point
- exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E9*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Macros specifying whether a point is inside, outside or on the
- boundary of the polygon. */
-#define UNKNOWN 0
-#define IN 1
-#define OUT 2
-#define ON 3
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "region.h" /* Coordinate regions (parent class) */
-#include "channel.h" /* I/O channels */
-#include "box.h" /* Box Regions */
-#include "wcsmap.h" /* Definitons of AST__DPI etc */
-#include "polygon.h" /* Interface definition for this class */
-#include "mapping.h" /* Position mappings */
-#include "unitmap.h" /* Unit Mapping */
-#include "pal.h" /* SLALIB library interface */
-#include "frame.h" /* Coordinate system description */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#include <limits.h>
-
-/* Type definitions. */
-/* ================= */
-
-/* A structure that holds information about an edge of the new Polygon
- being created by astDownsize. The edge is a line betweeen two of the
- vertices of the original Polygon. */
-typedef struct Segment {
- int i1; /* Index of starting vertex within old Polygon */
- int i2; /* Index of ending vertex within old Polygon */
- double error; /* Max geodesic distance from any old vertex to the line */
- int imax; /* Index of the old vertex at which max error is reached */
- struct Segment *next;/* Pointer to next Segment in a double link list */
- struct Segment *prev;/* Pointer to previous Segment in a double link list */
-} Segment;
-
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstMapping *(* parent_simplify)( AstMapping *, int * );
-static void (* parent_setregfs)( AstRegion *, AstFrame *, int * );
-static void (* parent_resetcache)( AstRegion *, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Polygon)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Polygon,Class_Init)
-#define class_vtab astGLOBAL(Polygon,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstPolygonVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstPolygon *astPolygonId_( void *, int, int, const double *, void *, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-
-/* Define a macro that expands to a single prototype for function
- FindInsidePoint for a given data type and operation. */
-#define FINDINSIDEPOINT_PROTO0(X,Xtype,Oper) \
-static void FindInsidePoint##Oper##X( Xtype, Xtype *, int[2], int[2], int *, int *, int *, int * );
-
-/* Define a macro that expands to a set of prototypes for all operations
- for function FindInsidePoint for a given data type. */
-#define FINDINSIDEPOINT_PROTO(X,Xtype) \
-FINDINSIDEPOINT_PROTO0(X,Xtype,LT) \
-FINDINSIDEPOINT_PROTO0(X,Xtype,LE) \
-FINDINSIDEPOINT_PROTO0(X,Xtype,EQ) \
-FINDINSIDEPOINT_PROTO0(X,Xtype,GE) \
-FINDINSIDEPOINT_PROTO0(X,Xtype,GT) \
-FINDINSIDEPOINT_PROTO0(X,Xtype,NE)
-
-/* Use the above macros to define all FindInsidePoint prototypes for all
- data types and operations. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-FINDINSIDEPOINT_PROTO(LD,long double)
-#endif
-FINDINSIDEPOINT_PROTO(D,double)
-FINDINSIDEPOINT_PROTO(L,long int)
-FINDINSIDEPOINT_PROTO(UL,unsigned long int)
-FINDINSIDEPOINT_PROTO(I,int)
-FINDINSIDEPOINT_PROTO(UI,unsigned int)
-FINDINSIDEPOINT_PROTO(S,short int)
-FINDINSIDEPOINT_PROTO(US,unsigned short int)
-FINDINSIDEPOINT_PROTO(B,signed char)
-FINDINSIDEPOINT_PROTO(UB,unsigned char)
-FINDINSIDEPOINT_PROTO(F,float)
-
-/* Define a macro that expands to a single prototype for function
- TraceEdge for a given data type and operation. */
-#define TRACEEDGE_PROTO0(X,Xtype,Oper) \
-static AstPointSet *TraceEdge##Oper##X( Xtype, Xtype *, int[2], int[2], int, int, int, int, int, int * );
-
-/* Define a macro that expands to a set of prototypes for all operations
- for function TraceEdge for a given data type. */
-#define TRACEEDGE_PROTO(X,Xtype) \
-TRACEEDGE_PROTO0(X,Xtype,LT) \
-TRACEEDGE_PROTO0(X,Xtype,LE) \
-TRACEEDGE_PROTO0(X,Xtype,EQ) \
-TRACEEDGE_PROTO0(X,Xtype,GE) \
-TRACEEDGE_PROTO0(X,Xtype,GT) \
-TRACEEDGE_PROTO0(X,Xtype,NE)
-
-/* Use the above macros to define all TraceEdge prototypes for all
- data types and operations. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-TRACEEDGE_PROTO(LD,long double)
-#endif
-TRACEEDGE_PROTO(D,double)
-TRACEEDGE_PROTO(L,long int)
-TRACEEDGE_PROTO(UL,unsigned long int)
-TRACEEDGE_PROTO(I,int)
-TRACEEDGE_PROTO(UI,unsigned int)
-TRACEEDGE_PROTO(S,short int)
-TRACEEDGE_PROTO(US,unsigned short int)
-TRACEEDGE_PROTO(B,signed char)
-TRACEEDGE_PROTO(UB,unsigned char)
-TRACEEDGE_PROTO(F,float)
-
-/* Non-generic function prototypes. */
-static AstMapping *Simplify( AstMapping *, int * );
-static AstPointSet *DownsizePoly( AstPointSet *, double, int, AstFrame *, int * );
-static AstPointSet *RegBaseMesh( AstRegion *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstPolygon *Downsize( AstPolygon *, double, int, int * );
-static Segment *AddToChain( Segment *, Segment *, int * );
-static Segment *NewSegment( Segment *, int, int, int, int * );
-static Segment *RemoveFromChain( Segment *, Segment *, int * );
-static double Polywidth( AstFrame *, AstLineDef **, int, int, double[ 2 ], int * );
-static int GetBounded( AstRegion *, int * );
-static int IntCmp( const void *, const void * );
-static int RegPins( AstRegion *, AstPointSet *, AstRegion *, int **, int * );
-static int RegTrace( AstRegion *, int, double *, double **, int * );
-static void Cache( AstPolygon *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void FindMax( Segment *, AstFrame *, double *, double *, int, int, int * );
-static void RegBaseBox( AstRegion *this, double *, double *, int * );
-static void ResetCache( AstRegion *this, int * );
-static void SetPointSet( AstPolygon *, AstPointSet *, int * );
-static void SetRegFS( AstRegion *, AstFrame *, int * );
-static void SmoothPoly( AstPointSet *, int, double, int * );
-
-/* Member functions. */
-/* ================= */
-static Segment *AddToChain( Segment *head, Segment *seg, int *status ){
-/*
-* Name:
-* AddToChain
-
-* Purpose:
-* Add a Segment into the linked list of Segments, maintaining the
-* required order in the list.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "polygon.h"
-* Segment *AddToChain( Segment *head, Segment *seg, int *status )
-
-* Class Membership:
-* Polygon member function
-
-* Description:
-* The linked list of Segments maintained by astDownsize is searched
-* from the high error end (the head), until a Segment is foound which
-* has a lower error than the supplied segment. The supplied Segment
-* is then inserted into the list at that point.
-
-* Parameters:
-* head
-* The Segment structure at the head of the list (i.e. the segment
-* with maximum error).
-* seg
-* The Segment to be added into the list.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the link head (which will have changed if "seg" has a
-* higher error than the original head).
-
-*/
-
-/* Local Variables: */
- Segment *tseg;
-
-/* Check the global error status. */
- if ( !astOK ) return head;
-
-/* If the list is empty, return the supplied segment as the new list
- head. */
- if( !head ) {
- head = seg;
-
-/* If the supplied segment has a higher error than the original head,
- insert the new segment in front of the original head. */
- } else if( seg->error > head->error ){
- seg->next = head;
- head->prev = seg;
- head = seg;
-
-/* Otherwise, move down the list from the head until a segment is found
- which has a lower error than the supplied Segment. Then insert the
- supplied segment into the list in front of it. */
- } else {
- tseg = head;
- seg->next = NULL;
-
- while( tseg->next ) {
- if( seg->error > tseg->next->error ) {
- seg->next = tseg->next;
- seg->prev = tseg;
- tseg->next->prev = seg;
- tseg->next = seg;
- break;
- }
- tseg = tseg->next;
- }
-
- if( !seg->next ) {
- tseg->next = seg;
- seg->prev = tseg;
- }
- }
-
-/* Return the new head. */
- return head;
-}
-
-static void Cache( AstPolygon *this, int *status ){
-/*
-* Name:
-* Cache
-
-* Purpose:
-* Calculate intermediate values and cache them in the Polygon structure.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "polygon.h"
-* void Cache( AstPolygon *this, int *status )
-
-* Class Membership:
-* Polygon member function
-
-* Description:
-* This function uses the PointSet stored in the parent Region to calculate
-* some intermediate values which are useful in other methods. These
-* values are stored within the Polygon structure.
-
-* Parameters:
-* this
-* Pointer to the Polygon.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstFrame *frm; /* Pointer to base Frame in Polygon */
- double **ptr; /* Pointer to data in the encapsulated PointSet */
- double end[ 2 ]; /* Start position for edge */
- double maxwid; /* Maximum polygon width found so far */
- double polcen[ 2 ]; /* Polygon centre perpendicular to current edge */
- double polwid; /* Polygon width perpendicular to current edge */
- double start[ 2 ]; /* Start position for edge */
- int i; /* Axis index */
- int nv; /* Number of vertices in Polygon */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Do nothing if the cached information is up to date. */
- if( this->stale ) {
-
-/* Get a pointer to the base Frame. */
- frm = astGetFrame( ((AstRegion *) this)->frameset, AST__BASE );
-
-/* Get the number of vertices. */
- nv = astGetNpoint( ((AstRegion *) this)->points );
-
-/* Get pointers to the coordinate data in the parent Region structure. */
- ptr = astGetPoints( ((AstRegion *) this)->points );
-
-/* Free any existing edge information in the Polygon structure. */
- if( this->edges ) {
- for( i = 0; i < nv; i++ ) {
- this->edges[ i ] = astFree( this->edges[ i ] );
- }
-
-/* Allocate memory to store new edge information if necessary. */
- } else {
- this->edges = astMalloc( sizeof( AstLineDef *)*(size_t) nv );
- this->startsat = astMalloc( sizeof( double )*(size_t) nv );
- }
-
-/* Check pointers can be used safely. */
- if( this->edges ) {
-
-/* Create and store a description of each edge. Also form the total
- distance round the polygon, and the distance from the first vertex
- at which each edge starts. */
- this->totlen = 0.0;
- start[ 0 ] = ptr[ 0 ][ nv - 1 ];
- start[ 1 ] = ptr[ 1 ][ nv - 1 ];
-
- for( i = 0; i < nv; i++ ) {
- end[ 0 ] = ptr[ 0 ][ i ];
- end[ 1 ] = ptr[ 1 ][ i ];
- this->edges[ i ] = astLineDef( frm, start, end );
- start[ 0 ] = end[ 0 ];
- start[ 1 ] = end[ 1 ];
-
- this->startsat[ i ] = this->totlen;
- this->totlen += this->edges[ i ]->length;
- }
-
-/* We now look for a point that is inside the polygon. We want a point
- that is well within the polygon, since points that are only just inside
- the polygon can give numerical problems. Loop round each edge with
- non-zero length. */
- maxwid = -1.0;
- for( i = 0; i < nv; i++ ) {
- if( this->edges[ i ]->length > 0.0 ) {
-
-/* We define another line perpendicular to the current edge, passing
- through the mid point of the edge, extending towards the inside of the
- polygon. The following function returns the distance we can travel
- along this line before we hit any of the other polygon edges. It also
- puts the position corresponding to half that distance into "polcen". */
- polwid = Polywidth( frm, this->edges, i, nv, polcen, status );
-
-/* If the width of the polygon perpendicular to the current edge is
- greater than the width perpdeicular to any other edge, record the
- width and also store the current polygon centre. */
- if( polwid > maxwid && polwid != AST__BAD ) {
- maxwid = polwid;
- (this->in)[ 0 ] = polcen[ 0 ];
- (this->in)[ 1 ] = polcen[ 1 ];
- }
- }
- }
-
-/* If no width was found it probably means that the polygon vertices were
- given in clockwise order, resulting in the above process probing the
- infinite extent outside the polygonal hole. In this case any point
- outside the hole will do, so we use the current contents of the
- "polcen" array. Set a flag indicating if the vertices are stored in
- anti-clockwise order. */
- if( maxwid < 0.0 ) {
- (this->in)[ 0 ] = polcen[ 0 ];
- (this->in)[ 1 ] = polcen[ 1 ];
- this->acw = 0;
- } else {
- this->acw = 1;
- }
- }
-
-/* Free resources */
- frm = astAnnul( frm );
-
-/* Indicate cached information is up to date. */
- this->stale = 0;
- }
-}
-
-static AstPolygon *Downsize( AstPolygon *this, double maxerr, int maxvert,
- int *status ) {
-/*
-*++
-* Name:
-c astDownsize
-f AST_DOWNSIZE
-
-* Purpose:
-* Reduce the number of vertices in a Polygon.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "polygon.h"
-c AstPolygon *astDownsize( AstPolygon *this, double maxerr, int maxvert )
-f RESULT = AST_DOWNSIZE( THIS, MAXERR, MAXVERT, STATUS )
-
-* Class Membership:
-* Polygon method.
-
-* Description:
-* This function returns a pointer to a new Polygon that contains a
-* subset of the vertices in the supplied Polygon. The subset is
-* chosen so that the returned Polygon is a good approximation to
-* the supplied Polygon, within the limits specified by the supplied
-* parameter values. That is, the density of points in the returned
-* Polygon is greater at points where the curvature of the boundary of
-* the supplied Polygon is greater.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Polygon.
-c maxerr
-f MAXERR = DOUBLE PRECISION (Given)
-* The maximum allowed discrepancy between the supplied and
-* returned Polygons, expressed as a geodesic distance within the
-* Polygon's coordinate frame. If this is zero or less, the
-* returned Polygon will have the number of vertices specified by
-c maxvert.
-f MAXVERT.
-c maxvert
-f MAXVERT = INTEGER (Given)
-* The maximum allowed number of vertices in the returned Polygon.
-* If this is less than 3, the number of vertices in the returned
-* Polygon will be the minimum needed to achieve the maximum
-* discrepancy specified by
-c maxerr.
-f MAXERR.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astDownsize()
-f AST_DOWNSIZE = INTEGER
-* Pointer to the new Polygon.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
- AstFrame *frm; /* Base Frame from the Polygon */
- AstPointSet *pset; /* PointSet holding vertices of downsized polygon */
- AstPolygon *result; /* Returned pointer to new Polygon */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the base Frame of the Polygon. */
- frm = astGetFrame( ((AstRegion *) this)->frameset, AST__BASE );
-
-/* Create a PointSet holding the vertices of the downsized polygon. */
- pset = DownsizePoly( ((AstRegion *) this)->points, maxerr, maxvert,
- frm, status );
-
-/* Take a deep copy of the supplied Polygon. */
- result = astCopy( this );
-
-/* Change the PointSet within the result Polygon to the one created above. */ \
- SetPointSet( result, pset, status ); \
-
-/* Free resources. */
- frm = astAnnul( frm );
- pset = astAnnul( pset );
-
-/* If an error occurred, annul the returned Polygon. */
- if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static AstPointSet *DownsizePoly( AstPointSet *pset, double maxerr,
- int maxvert, AstFrame *frm, int *status ) {
-/*
-* Name:
-* DownsizePoly
-
-* Purpose:
-* Reduce the number of vertices in a Polygon.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "polygon.h"
-* AstPointSet *DownsizePoly( AstPointSet *pset, double maxerr, int maxvert,
-* AstFrame *frm, int *status )
-
-* Class Membership:
-* Polygon member function.
-
-* Description:
-* This function returns a pointer to a new PointSet that contains a
-* subset of the vertices in the supplied PointSet. The subset is
-* chosen so that the returned polygon is a good approximation to
-* the supplied polygon, within the limits specified by the supplied
-* parameter values. That is, the density of points in the returned
-* polygon is greater at points where the curvature of the boundary of
-* the supplied polygon is greater.
-
-* Parameters:
-* pset
-* Pointer to the PointSet holding the polygon vertices.
-* maxerr
-* The maximum allowed discrepancy between the supplied and
-* returned Polygons, expressed as a geodesic distance within the
-* Polygon's coordinate frame. If this is zero or less, the
-* returned Polygon will have the number of vertices specified by
-* maxvert.
-* maxvert
-* The maximum allowed number of vertices in the returned Polygon.
-* If this is less than 3, the number of vertices in the returned
-* Polygon will be the minimum needed to achieve the maximum
-* discrepancy specified by
-* maxerr.
-* frm
-* Pointer to the Frame in which the polygon is defined.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the new PointSet.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-* function is invoked with the AST error status set, or if it
-* should fail for any reason.
-*/
-
-/* Local Variables: */
- AstPointSet *result; /* Returned pointer to new PointSet */
- Segment *head; /* Pointer to new polygon edge with highest error */
- Segment *seg1; /* Pointer to new polygon edge */
- Segment *seg2; /* Pointer to new polygon edge */
- Segment *seg3; /* Pointer to new polygon edge */
- double **ptr; /* Pointer to arrays of axis values */
- double *x; /* Pointer to array of X values for old Polygon */
- double *xnew; /* Pointer to array of X values for new Polygon */
- double *y; /* Pointer to array of Y values for old Polygon */
- double *ynew; /* Pointer to array of Y values for new Polygon */
- double x1; /* Lowest X value at any vertex */
- double x2; /* Highest X value at any vertex */
- double y1; /* Lowest Y value at any vertex */
- double y2; /* Highest Y value at any vertex */
- int *newpoly; /* Holds indices of retained input vertices */
- int i1; /* Index of first vertex added to output polygon */
- int i1x; /* Index of vertex with lowest X */
- int i1y; /* Index of vertex with lowest Y */
- int i2; /* Index of second vertex added to output polygon */
- int i2x; /* Index of vertex with highest X */
- int i2y; /* Index of vertex with highest Y */
- int i3; /* Index of third vertex added to output polygon */
- int iadd; /* Normalised vertex index */
- int iat; /* Index at which to store new vertex index */
- int newlen; /* Number of vertices currently in new Polygon */
- int nv; /* Number of vertices in old Polygon */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get the number of vertices in the supplied polygon. */
- nv = astGetNpoint( pset );
-
-/* If the maximum error allowed is zero, and the maximum number of
- vertices is equal to or greater than the number in the supplied
- polygon, just return a deep copy of the supplied PointSet. */
- if( maxerr <= 0.0 && ( maxvert < 3 || maxvert >= nv ) ) {
- result = astCopy( pset );
-
-/* Otherwise... */
- } else {
-
-/* Get pointers to the X and Y arrays holding the vertex coordinates in
- the supplied polygon. */
- ptr = astGetPoints( pset );
- x = ptr[ 0 ];
- y = ptr[ 1 ];
-
-/* Allocate memory for an array to hold the original indices of the vertices
- to be used to create the returned Polygon. This array is expanded as
- needed. */
- newpoly = astMalloc( 10*sizeof( int ) );
-
-/* Check the pointers can be used safely. */
- if( astOK ) {
-
-/* We first need to decide on three widely spaced vertices which form a
- reasonable triangular approximation to the whole polygon. First find
- the vertices with the highest and lowest Y values, and the highest and
- lowest X values. */
- x1 = DBL_MAX;
- x2 = -DBL_MAX;
- y1 = DBL_MAX;
- y2 = -DBL_MAX;
-
- i1y = i1x = 0;
- i2y = i2x = nv/2;
-
- for( i3 = 0; i3 < nv; i3++ ) {
- if( y[ i3 ] < y1 ) {
- y1 = y[ i3 ];
- i1y = i3;
- } else if( y[ i3 ] > y2 ) {
- y2 = y[ i3 ];
- i2y = i3;
- }
-
- if( x[ i3 ] < x1 ) {
- x1 = x[ i3 ];
- i1x = i3;
- } else if( x[ i3 ] > x2 ) {
- x2 = x[ i3 ];
- i2x = i3;
- }
- }
-
-/* Use the axis which spans the greater range. */
- if( y2 - y1 > x2 - x1 ) {
- i1 = i1y;
- i2 = i2y;
- } else {
- i1 = i1x;
- i2 = i2x;
- }
-
-/* The index with vertex i1 is definitely going to be one of our three
- vertices. We are going to use the line from i1 to i2 to choose the two
- other vertices to use. Create a structure describing the segment of the
- Polygon from the lowest value on the selected axis (X or Y) to the
- highest value. As always, the polygons is traversed in an anti-clockwise
- direction. */
- seg1 = NewSegment( NULL, i1, i2, nv, status );
-
-/* Find the vertex within this segment which is furthest away from the
- line on the right hand side (as moving from vertex i1 to vertex i2). */
- FindMax( seg1, frm, x, y, nv, 0, status );
-
-/* Likewise, create a structure describing the remained of the Polygon
- (i.e. the segment from the highest value on the selected axis to the
- lowest value). Then find the vertex within this segment which is
- furthest away from the line on the right hand side. */
- seg2 = NewSegment( NULL, i2, i1, nv, status );
- FindMax( seg2, frm, x, y, nv, 0, status );
-
-/* Select the segment for which the found vertex is furthest from the
- line. */
- if( seg2->error > seg1->error ) {
-
-/* If the second segment, we will use the vertex that is farthest from
- the line as one of our threee vertices. To ensure that movement from
- vertex i1 to i2 to i3 is anti-clockwise, we must use this new vertex
- as vertex i3, not i2. */
- i3 = seg2->imax;
-
-/* Create a description of the polygon segment from vertex i1 to i3, and
- find the vertex which is furthest to the right of the line joining the
- two vertices. We use this as the middle vertex (i2). */
- seg1 = NewSegment( seg1, i1, i3, nv, status );
- FindMax( seg1, frm, x, y, nv, 0, status );
- i2 = seg1->imax;
-
-/* Do the same if we are choosing the other segment, ordering the
- vertices to retain anti-clockwise movement from i1 to i2 to i3. */
- } else {
- i2 = seg1->imax;
- seg1 = NewSegment( seg1, i2, i1, nv, status );
- FindMax( seg1, frm, x, y, nv, 0, status );
- i3 = seg1->imax;
- }
-
-/* Ensure the vertex indices are in the first cycle. */
- if( i2 >= nv ) i2 -= nv;
- if( i3 >= nv ) i3 -= nv;
-
-/* Create Segment structures to describe each of these three edges. */
- seg1 = NewSegment( seg1, i1, i2, nv, status );
- seg2 = NewSegment( seg2, i2, i3, nv, status );
- seg3 = NewSegment( NULL, i3, i1, nv, status );
-
-/* Record these 3 vertices in an array holding the original indices of
- the vertices to be used to create the returned Polygon. */
- newpoly[ 0 ] = i1;
- newpoly[ 1 ] = i2;
- newpoly[ 2 ] = i3;
-
-/* Indicate the new polygon currently has 3 vertices. */
- newlen = 3;
-
-/* Search the old vertices between the start and end of segment 3, looking
- for the vertex which lies furthest from the line of segment 3. The
- residual between this point and the line is stored in the Segment
- structure, as is the index of the vertex at which this maximum residual
- occurred. */
- FindMax( seg3, frm, x, y, nv, 1, status );
-
-/* The "head" variable points to the head of a double linked list of
- Segment structures. This list is ordered by residual, so that the
- Segment with the maximum residual is at the head, and the Segment
- with the minimum residual is at the tail. Initially "seg3" is at the
- head. */
- head = seg3;
-
-/* Search the old vertices between the start and end of segment 1, looking
- for the vertex which lies furthest from the line of segment 1. The
- residual between this point and the line is stored in the Segment
- structure, as is the index of the vertex at which this maximum residual
- occurred. */
- FindMax( seg1, frm, x, y, nv, 1, status );
-
-/* Insert segment 1 into the linked list of Segments, at a position that
- maintains the ordering of the segments by error. Thus the head of the
- list will still have the max error. */
- head = AddToChain( head, seg1, status );
-
-/* Do the same for segment 2. */
- FindMax( seg2, frm, x, y, nv, 1, status );
- head = AddToChain( head, seg2, status );
-
-/* If the maximum allowed number of vertices in the output Polygon is
- less than 3, allow any number of vertices up to the number in the
- input Polygon (termination will then be determined just by "maxerr"). */
- if( maxvert < 3 ) maxvert = nv;
-
-/* Loop round adding an extra vertex to the returned Polygon until the
- maximum residual between the new and old polygons is no more than
- "maxerr". Abort early if the specified maximum number of vertices is
- reached. */
- while( head->error > maxerr && newlen < maxvert ) {
-
-/* The segment at the head of the list has the max error (that is, it is
- the segment that departs most from the supplied Polygon). To make the
- new polygon a better fit to the old polygon, we add the vertex that is
- furthest away from this segment to the new polygon. Remember that a
- polygon is cyclic so if the vertex has an index that is greater than the
- number of vertices in the old polygon, reduce the index by the number
- of vertices in the old polygon. */
- iadd = head->imax;
- if( iadd >= nv ) iadd -= nv;
- iat = newlen++;
- newpoly = astGrow( newpoly, newlen, sizeof( int ) );
- if( !astOK ) break;
- newpoly[ iat ] = iadd;
-
-/* We now split the segment that had the highest error into two segments.
- The split occurs at the vertex that had the highest error. */
- seg1 = NewSegment( NULL, head->imax, head->i2, nv, status );
- seg2 = head;
- seg2->i2 = head->imax;
-
-/* We do not know where these two new segments should be in the ordered
- linked list, so remove them from the list. */
- head = RemoveFromChain( head, seg1, status );
- head = RemoveFromChain( head, seg2, status );
-
-/* Find the vertex that deviates most from the first of these two new
- segments, and then add the segment into the list of vertices, using
- the maximum deviation to determine the position of the segment within
- the list. */
- FindMax( seg1, frm, x, y, nv, 1, status );
- head = AddToChain( head, seg1, status );
-
-/* Do the same for the second new segment. */
- FindMax( seg2, frm, x, y, nv, 1, status );
- head = AddToChain( head, seg2, status );
- }
-
-/* Now we have reached the required accuracy, free resources. */
- while( head ) {
- seg1 = head;
- head = head->next;
- seg1 = astFree( seg1 );
- }
-
-/* If no vertices have been left out, return a deep copy of the supplied
- PointSet. */
- if( newlen == nv ) {
- result = astCopy( pset );
-
-/* Otherwise, sort the indices of the vertices to be retained so that they
- are in the same order as they were in the supplied Polygon. */
- } else if( astOK ){
- qsort( newpoly, newlen, sizeof( int ), IntCmp );
-
-/* Create a new PointSet and get pointers to its axis values. */
- result = astPointSet( newlen, 2, " ", status );
- ptr = astGetPoints( result );
- xnew = ptr[ 0 ];
- ynew = ptr[ 1 ];
-
-/* Copy the axis values for the retained vertices from the old to the new
- PointSet. */
- if( astOK ) {
- for( iat = 0; iat < newlen; iat++ ) {
- *(xnew++) = x[ newpoly[ iat ] ];
- *(ynew++) = y[ newpoly[ iat ] ];
- }
- }
- }
- }
-
-/* Free resources. */
- newpoly = astFree( newpoly );
- }
-
-/* If an error occurred, annul the returned PointSet. */
- if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-/*
-* Name:
-* FindInsidePoint
-
-* Purpose:
-* Find a point that is inside the required outline.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "polygon.h"
-* void FindInsidePoint<Oper><X>( <Xtype> value, <Xtype> array[],
-* int lbnd[ 2 ], int ubnd[ 2 ],
-* int *inx, int *iny, int *iv,
-* int *status );
-
-* Class Membership:
-* Polygon member function
-
-* Description:
-* The central pixel in the array is checked to see if its value meets
-* the requirements implied by <Oper> and "value". If so, its pixel
-* indices and vector index are returned> if not, a spiral search is
-* made until such a pixel value is found.
-
-* Parameters:
-* value
-* The data value defining valid pixels.
-* array
-* The data array.
-* lbnd
-* The lower pixel index bounds of the array.
-* ubnd
-* The upper pixel index bounds of the array.
-* inx
-* Pointer to an int in which to return the X pixel index of the
-* first point that meets the requirements implied by <oper> and
-* "value".
-* iny
-* Pointer to an int in which to return the Y pixel index of the
-* first point that meets the requirements implied by <oper> and
-* "value".
-* iv
-* Pointer to an int in which to return the vector index of the
-* first point that meets the requirements implied by <oper> and
-* "value".
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - <Oper> must be one of LT, LE, EQ, NE, GE, GT.
-
-
-*/
-
-/* Define a macro to implement the function for a specific data
- type and operation. */
-#define MAKE_FINDINSIDEPOINT(X,Xtype,Oper,OperI) \
-static void FindInsidePoint##Oper##X( Xtype value, Xtype array[], \
- int lbnd[ 2 ], int ubnd[ 2 ], \
- int *inx, int *iny, int *iv, \
- int *status ){ \
-\
-/* Local Variables: */ \
- Xtype *pv; /* Pointer to next data value to test */ \
- const char *text; /* Pointer to text describing oper */ \
- int cy; /* Central row index */ \
- int iskin; /* Index of spiral layer being searched */ \
- int nskin; /* Number of spiral layers to search */ \
- int nx; /* Pixel per row */ \
- int tmp; /* Temporary storage */ \
- int xhi; /* High X pixel index bound of current skin */ \
- int xlo; /* Low X pixel index bound of current skin */ \
- int yhi; /* High X pixel index bound of current skin */ \
- int ylo; /* Low X pixel index bound of current skin */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Find number of pixels in one row of the array. */ \
- nx = ( ubnd[ 0 ] - lbnd[ 0 ] + 1 ); \
-\
-/* Find the pixel indices of the central pixel */ \
- *inx = ( ubnd[ 0 ] + lbnd[ 0 ] )/2; \
- *iny = ( ubnd[ 1 ] + lbnd[ 1 ] )/2; \
-\
-/* Initialise the vector index and pointer to refer to the central pixel. */ \
- *iv = ( *inx - lbnd[ 0 ] ) + nx*( *iny - lbnd[ 1 ] ) ; \
- pv = array + (*iv); \
-\
-/* Test the pixel value, returning if it is valid. This \
- relies on the compiler optimisation to remove the "if" statements \
- for all but the operation appropriate to the function being defined. */ \
- if( OperI == AST__LT ) { \
- if( *pv < value ) return; \
-\
- } else if( OperI == AST__LE ) { \
- if( *pv <= value ) return; \
-\
- } else if( OperI == AST__EQ ) { \
- if( *pv == value ) return; \
-\
- } else if( OperI == AST__NE ) { \
- if( *pv != value ) return; \
-\
- } else if( OperI == AST__GE ) { \
- if( *pv >= value ) return; \
-\
- } else { \
- if( *pv > value ) return; \
- } \
-\
-/* The central pixel is invalid if we arrive here. So we need to do a \
- spiral search out from the centre looking for a valid pixel. Record \
- the central row index (this is the row at which we jump to the next \
- outer skin when doing the spiral search below). */ \
- cy = *iny; \
-\
-/* Find how many skins can be searched as part of the spiral search \
- before the edge of the array is encountered. */ \
- nskin = ubnd[ 0 ] - *inx; \
- tmp = *inx - lbnd[ 0 ]; \
- if( tmp < nskin ) nskin = tmp; \
- tmp = ubnd[ 1 ] - *iny; \
- if( tmp < nskin ) nskin = tmp; \
- tmp = *iny - lbnd[ 1 ]; \
- if( tmp < nskin ) nskin = tmp; \
-\
-/* Initialise the skin box bounds to be just the central pixel. */ \
- xlo = xhi = *inx; \
- ylo = yhi = *iny; \
-\
-/* Loop round each skin looking for a valid test pixel. */ \
- for( iskin = 0; iskin < nskin; iskin++ ) { \
-\
-/* Increment the upper and lower bounds of the box forming the next \
- skin. */ \
- xhi++; \
- xlo--; \
- yhi++; \
- ylo--; \
-\
-/* Initialise things for the first pixel in the new skin by moving one \
- pixel to the right. */ \
- pv++; \
- (*iv)++; \
- (*inx)++; \
-\
-/* Move up the right hand edge of the box corresponding to the current \
- skin. We start at the middle of the right hand edge. */ \
- for( *iny = cy; *iny <= yhi; (*iny)++ ) { \
-\
-/* Test the pixel value, returning if it is valid. This relies on the \
- compiler optimisation to remove the "if" statements for all but the \
- operation appropriate to the function being defined. */ \
- if( OperI == AST__LT ) { \
- if( *pv < value ) return; \
-\
- } else if( OperI == AST__LE ) { \
- if( *pv <= value ) return; \
-\
- } else if( OperI == AST__EQ ) { \
- if( *pv == value ) return; \
-\
- } else if( OperI == AST__NE ) { \
- if( *pv != value ) return; \
-\
- } else if( OperI == AST__GE ) { \
- if( *pv >= value ) return; \
-\
- } else { \
- if( *pv > value ) return; \
- } \
-\
-/* Move up a pixel. */ \
- pv += nx; \
- *iv += nx; \
- } \
-\
-/* Move down a pixel so that *iny == yhi. */ \
- pv -= nx; \
- *iv -= nx; \
- (*iny)--; \
-\
-/* Move left along the top edge of the box corresponding to the current \
- skin. */ \
- for( *inx = xhi; *inx >= xlo; (*inx)-- ) { \
-\
-/* Test the pixel value, returning if it is valid. */ \
- if( OperI == AST__LT ) { \
- if( *pv < value ) return; \
-\
- } else if( OperI == AST__LE ) { \
- if( *pv <= value ) return; \
-\
- } else if( OperI == AST__EQ ) { \
- if( *pv == value ) return; \
-\
- } else if( OperI == AST__NE ) { \
- if( *pv != value ) return; \
-\
- } else if( OperI == AST__GE ) { \
- if( *pv >= value ) return; \
-\
- } else { \
- if( *pv > value ) return; \
- } \
-\
-/* Move left a pixel. */ \
- pv--; \
- (*iv)--; \
- } \
-\
-/* Move right a pixel so that *inx == xlo. */ \
- pv++; \
- (*iv)++; \
- (*inx)++; \
-\
-/* Move down along the left hand edge of the box corresponding to the current \
- skin. */ \
- for( *iny = yhi; *iny >= ylo; (*iny)-- ) { \
-\
-/* Test the pixel value, returning if it is valid. */ \
- if( OperI == AST__LT ) { \
- if( *pv < value ) return; \
-\
- } else if( OperI == AST__LE ) { \
- if( *pv <= value ) return; \
-\
- } else if( OperI == AST__EQ ) { \
- if( *pv == value ) return; \
-\
- } else if( OperI == AST__NE ) { \
- if( *pv != value ) return; \
-\
- } else if( OperI == AST__GE ) { \
- if( *pv >= value ) return; \
-\
- } else { \
- if( *pv > value ) return; \
- } \
-\
-/* Move down a pixel. */ \
- pv -= nx; \
- *iv -= nx; \
- } \
-\
-/* Move up a pixel so that *iny == ylo. */ \
- pv += nx; \
- *iv += nx; \
- (*iny)++; \
-\
-/* Move right along the bottom edge of the box corresponding to the current \
- skin. */ \
- for( *inx = xlo; *inx <= xhi; (*inx)++ ) { \
-\
-/* Test the pixel value, returning if it is valid. */ \
- if( OperI == AST__LT ) { \
- if( *pv < value ) return; \
-\
- } else if( OperI == AST__LE ) { \
- if( *pv <= value ) return; \
-\
- } else if( OperI == AST__EQ ) { \
- if( *pv == value ) return; \
-\
- } else if( OperI == AST__NE ) { \
- if( *pv != value ) return; \
-\
- } else if( OperI == AST__GE ) { \
- if( *pv >= value ) return; \
-\
- } else { \
- if( *pv > value ) return; \
- } \
-\
-/* Move right a pixel. */ \
- pv++; \
- (*iv)++; \
- } \
-\
-/* Move left a pixel so that *inx == xhi. */ \
- pv--; \
- (*iv)--; \
- (*inx)--; \
-\
-/* Move up the right hand edge of the box correspionding to the current \
- skin. We stop just below the middle of the right hand edge. */ \
- for( *iny = ylo; *iny < cy; (*iny)++ ) { \
-\
-/* Test the pixel value, returning if it is valid. This relies on the \
- compiler optimisation to remove the "if" statements for all but the \
- operation appropriate to the function being defined. */ \
- if( OperI == AST__LT ) { \
- if( *pv < value ) return; \
-\
- } else if( OperI == AST__LE ) { \
- if( *pv <= value ) return; \
-\
- } else if( OperI == AST__EQ ) { \
- if( *pv == value ) return; \
-\
- } else if( OperI == AST__NE ) { \
- if( *pv != value ) return; \
-\
- } else if( OperI == AST__GE ) { \
- if( *pv >= value ) return; \
-\
- } else { \
- if( *pv > value ) return; \
- } \
-\
-/* Move up a pixel. */ \
- pv += nx; \
- *iv += nx; \
- } \
- } \
-\
-/* Report an error if no inside pooint could be found. */ \
- if( OperI == AST__LT ) { \
- text = "less than"; \
- } else if( OperI == AST__LE ) { \
- text = "less than or equal to"; \
- } else if( OperI == AST__EQ ) { \
- text = "equal to"; \
- } else if( OperI == AST__NE ) { \
- text = "not equal to"; \
- } else if( OperI == AST__GE ) { \
- text = "greater than or equal to"; \
- } else { \
- text = "greater than"; \
- } \
- astError( AST__NONIN, "astOutline"#X": Could not find a pixel value %s " \
- "%g in the supplied array.", status, text, (double) value ); \
-}
-
-/* Define a macro that uses the above macro to to create implementations
- of FindInsidePoint for all operations. */
-#define MAKEALL_FINDINSIDEPOINT(X,Xtype) \
-MAKE_FINDINSIDEPOINT(X,Xtype,LT,AST__LT) \
-MAKE_FINDINSIDEPOINT(X,Xtype,LE,AST__LE) \
-MAKE_FINDINSIDEPOINT(X,Xtype,EQ,AST__EQ) \
-MAKE_FINDINSIDEPOINT(X,Xtype,GE,AST__GE) \
-MAKE_FINDINSIDEPOINT(X,Xtype,GT,AST__GT) \
-MAKE_FINDINSIDEPOINT(X,Xtype,NE,AST__NE)
-
-/* Expand the above macro to generate a function for each required
- data type and operation. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-MAKEALL_FINDINSIDEPOINT(LD,long double)
-#endif
-MAKEALL_FINDINSIDEPOINT(D,double)
-MAKEALL_FINDINSIDEPOINT(L,long int)
-MAKEALL_FINDINSIDEPOINT(UL,unsigned long int)
-MAKEALL_FINDINSIDEPOINT(I,int)
-MAKEALL_FINDINSIDEPOINT(UI,unsigned int)
-MAKEALL_FINDINSIDEPOINT(S,short int)
-MAKEALL_FINDINSIDEPOINT(US,unsigned short int)
-MAKEALL_FINDINSIDEPOINT(B,signed char)
-MAKEALL_FINDINSIDEPOINT(UB,unsigned char)
-MAKEALL_FINDINSIDEPOINT(F,float)
-
-/* Undefine the macros. */
-#undef MAKE_FINDINSIDEPOINT
-#undef MAKEALL_FINDINSIDEPOINT
-
-static void FindMax( Segment *seg, AstFrame *frm, double *x, double *y,
- int nv, int abs, int *status ){
-/*
-* Name:
-* FindMax
-
-* Purpose:
-* Find the maximum discrepancy between a given line segment and the
-* Polygon being downsized.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "polygon.h"
-* void FindMax( Segment *seg, AstFrame *frm, double *x, double *y,
-* int nv, int abs, int *status )
-
-* Class Membership:
-* Polygon member function
-
-* Description:
-* The supplied Segment structure describes a range of vertices in
-* the polygon being downsized. This function checks each of these
-* vertices to find the one that lies furthest from the line joining the
-* first and last vertices in the segment. The maximum error, and the
-* vertex index at which this maximum error is found, is stored in the
-* Segment structure.
-
-* Parameters:
-* seg
-* The structure describing the range of vertices to check. It
-* corresponds to a candidate edge in the downsized polygon.
-* frm
-* The Frame in which the positions are defined.
-* x
-* Pointer to the X axis values in the original Polygon.
-* y
-* Pointer to the Y axis values in the original Polygon.
-* nv
-* Total number of vertics in the old Polygon..
-* abs
-* If non-zero, then the stored maximum is the position with
-* maximum absolute error. Otherwise, the stored maximum is the
-* position with maximum positive error (positive errors are to the
-* right when travelling from start to end of the segment).
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstPointSet *pset1; /* PointSet holding vertex positions */
- AstPointSet *pset2; /* PointSet holding offset par/perp components */
- double **ptr1; /* Pointers to "pset1" data arrays */
- double **ptr2; /* Pointers to "pset2" data arrays */
- double *px; /* Pointer to next X value */
- double *py; /* Pointer to next Y value */
- double ax; /* X value at start */
- double ay; /* Y value at start */
- double ba; /* Distance between a and b */
- double bax; /* X increment from a to b */
- double bay; /* Y increment from a to b */
- double cax; /* X increment from a to c */
- double cay; /* Y increment from a to c */
- double end[ 2 ]; /* Position of starting vertex */
- double error; /* Error value for current vertex */
- double start[ 2 ]; /* Position of starting vertex */
- int i1; /* Starting index (always in first cycle) */
- int i2; /* Ending index converted to first cycle */
- int i2b; /* Upper vertex limit in first cycle */
- int i; /* Loop count */
- int n; /* Number of vertices to check */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Stuff needed for handling cyclic redundancy of vertex indices. */
- i1 = seg->i1;
- i2 = seg->i2;
- n = i2 - i1 - 1;
- i2b = i2;
- if( i2 >= nv ) {
- i2 -= nv;
- i2b = nv;
- }
-
-/* If the segment has no intermediate vertices, set the segment error to
- zero and return. */
- if( n < 1 ) {
- seg->error = 0.0;
- seg->imax = i1;
-
-/* For speed, we use simple plane geometry if the Polygon is defined in a
- simple Frame. */
- } else if( !strcmp( astGetClass( frm ), "Frame" ) ) {
-
-/* Point "a" is the vertex that marks the start of the segment. Point "b"
- is the vertex that marks the end of the segment. */
- ax = x[ i1 ];
- ay = y[ i1 ];
- bax = x[ i2 ] - ax;
- bay = y[ i2 ] - ay;
- ba = sqrt( bax*bax + bay*bay );
-
-/* Initialise the largest error found so far. */
- seg->error = -1.0;
-
-/* Check the vertices from the start (plus one) up to the end (minus one)
- or the last vertex (which ever comes first). */
- for( i = i1 + 1; i < i2b; i++ ) {
-
-/* Position "c" is the vertex being tested. Find the squared distance from
- "c" to the line joining "a" and "b". */
- cax = x[ i ] - ax;
- cay = y[ i ] - ay;
- error = ( bay*cax - cay*bax )/ba;
- if( abs ) error = fabs( error );
-
-/* If this is the largest value found so far, record it. Note the error
- here is a squared distance. */
- if( error > seg->error ) {
- seg->error = error;
- seg->imax = i;
- }
- }
-
-/* If the end vertex is in the next cycle, check the remaining vertex
- posI would have thought a telentitions in the same way. */
- if( i2b != i2 ) {
-
- for( i = 0; i < i2; i++ ) {
-
- cax = x[ i ] - ax;
- cay = y[ i ] - ay;
- error = ( bay*cax - cay*bax )/ba;
- if( abs ) error = fabs( error );
-
- if( error > seg->error ) {
- seg->error = error;
- seg->imax = i + i2b;
- }
-
- }
- }
-
-/* If the polygon is not defined in a simple Frame, we use the overloaded
- Frame methods to do the geometry. */
- } else {
-
-/* Create a PointSet to hold the positions of the vertices to test. We do
- not need to test the start or end vertex. */
- pset1 = astPointSet( n, 2, " ", status );
- ptr1 = astGetPoints( pset1 );
- if( astOK ) {
-
-/* Copy the vertex axis values form the start (plus one) up to the end
- (minus one) vertex or the last vertex (which ever comes first). */
- px = ptr1[ 0 ];
- py = ptr1[ 1 ];
-
- for( i = i1 + 1; i < i2b; i++ ){
- *(px++) = x[ i ];
- *(py++) = y[ i ];
- }
-
-/* If the end vertex is in the next cycle, copy the remaining vertex
- positions into the PointSet. */
- if( i2b != i2 ) {
- for( i = 0; i < i2; i++ ) {
- *(px++) = x[ i ];
- *(py++) = y[ i ];
- }
- }
-
-/* Record the start and end vertex positions. */
- start[ 0 ] = x[ i1 ];
- start[ 1 ] = y[ i1 ];
- end[ 0 ] = x[ i2 ];
- end[ 1 ] = y[ i2 ];
-
-/* Resolve the vector from the start to each vertex into two components,
- parallel and perpendicular to the start->end vector. */
- pset2 = astResolvePoints( frm, start, end, pset1, NULL );
- ptr2 = astGetPoints( pset2 );
- if( astOK ) {
-
-/* Find the vertex with largest perpendicular component. */
- seg->error = -1.0;
- py = ptr2[ 1 ];
- for( i = 1; i <= n; i++ ) {
-
- error = *(py++);
- if( abs ) error = fabs( error );
-
- if( error > seg->error ) {
- seg->error = error;
- seg->imax = i + i1;
- }
-
- }
- }
-
-/* Free resources. */
- pset2 = astAnnul( pset2 );
- }
- pset1 = astAnnul( pset1 );
- }
-}
-
-static int GetBounded( AstRegion *this, int *status ) {
-/*
-* Name:
-* GetBounded
-
-* Purpose:
-* Is the Region bounded?
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "polygon.h"
-* int GetBounded( AstRegion *this, int *status )
-
-* Class Membership:
-* Polygon method (over-rides the astGetBounded method inherited from
-* the Region class).
-
-* Description:
-* This function returns a flag indicating if the Region is bounded.
-* The implementation provided by the base Region class is suitable
-* for Region sub-classes representing the inside of a single closed
-* curve (e.g. Circle, Interval, Box, etc). Other sub-classes (such as
-* CmpRegion, PointList, etc ) may need to provide their own
-* implementations.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the Region is bounded. Zero otherwise.
-
-*/
-
-/* Local Variables: */
- int neg; /* Has the Polygon been negated? */
- int result; /* Returned result */
-
-/* Initialise */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Ensure cached information is available. */
- Cache( (AstPolygon *) this, status );
-
-/* See if the Polygon has been negated. */
- neg = astGetNegated( this );
-
-/* If the polygon vertices are stored in anti-clockwise order, then the
- polygon is bounded if it has not been negated. */
- if( ( (AstPolygon *) this)->acw ) {
- result = (! neg );
-
-/* If the polygon vertices are stored in clockwise order, then the
- polygon is bounded if it has been negated. */
- } else {
- result = neg;
- }
-
-/* Return the result. */
- return result;
-}
-
-void astInitPolygonVtab_( AstPolygonVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitPolygonVtab
-
-* Purpose:
-* Initialise a virtual function table for a Polygon.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "polygon.h"
-* void astInitPolygonVtab( AstPolygonVtab *vtab, const char *name )
-
-* Class Membership:
-* Polygon vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the Polygon class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
- AstRegionVtab *region; /* Pointer to Region component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitRegionVtab( (AstRegionVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAPolygon) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstRegionVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
- vtab->Downsize = Downsize;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- mapping = (AstMappingVtab *) vtab;
- region = (AstRegionVtab *) vtab;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
- parent_simplify = mapping->Simplify;
- mapping->Simplify = Simplify;
-
- parent_setregfs = region->SetRegFS;
- region->SetRegFS = SetRegFS;
-
- parent_resetcache = region->ResetCache;
- region->ResetCache = ResetCache;
-
- region->RegPins = RegPins;
- region->RegBaseMesh = RegBaseMesh;
- region->RegBaseBox = RegBaseBox;
- region->RegTrace = RegTrace;
- region->GetBounded = GetBounded;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
-
-/* Declare the copy constructor, destructor and class dump
- functions. */
- astSetDump( vtab, Dump, "Polygon", "Polygonal region" );
- astSetDelete( vtab, Delete );
- astSetCopy( vtab, Copy );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static int IntCmp( const void *a, const void *b ){
-/*
-* Name:
-* IntCmp
-
-* Purpose:
-* An integer comparison function for the "qsort" function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "polygon.h"
-* int IntCmp( const void *a, const void *b )
-
-* Class Membership:
-* Polygon member function
-
-* Description:
-* See the docs for "qsort".
-
-* Parameters:
-* a
-* Pointer to the first int
-* b
-* Pointer to the second int
-
-* Returnd Value:
-* Positive, negative or zero, depending on whether a is larger than,
-* equal to, or less than b.
-
-*/
-
- return *((int*)a) - *((int*)b);
-}
-
-static Segment *NewSegment( Segment *seg, int i1, int i2, int nvert,
- int *status ){
-/*
-* Name:
-* NewSegment
-
-* Purpose:
-* Initialise a structure describing a segment of the new Polygon
-* created by astDownsize.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "polygon.h"
-* Segment *NewSegment( Segment *seg, int i1, int i2, int nvert,
-* int *status )
-
-* Class Membership:
-* Polygon member function
-
-* Description:
-* This function initialises the contents of a structure describing
-* the specified range of vertices within a Polygon. The cyclic nature
-* of vertex indices is taken into account.
-*
-* If no structure is supplied, memory is allocated to hold a new
-* structure.
-
-* Parameters:
-* seg
-* Pointer to a structure to initialise, or NULL if a new structure
-* is to be allocated.
-* i1
-* The index of a vertex within the old Polygon (supplied to
-* astDownsize) that marks the start of the new line segment in
-* the downsized polygon.
-* i2
-* The index of a vertex within the old Polygon (supplied to
-* astDownsize) that marks the end of the new line segment in
-* the downsized polygon.
-* nvert
-* Total number of vertics in the old Polygon..
-* status
-* Pointer to the inherited status variable.
-
-* Returnd Value:
-* Pointer to the initialised Segment structure. It should be freed using
-* astFree when no longer needed.
-
-*/
-
-/* Local Variables: */
- Segment *result;
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure to be initialised, allocating memory
- for a new structure if none was supplied. */
- result = seg ? seg : astMalloc( sizeof( Segment ) );
-
-/* Check the pointer can be used safely. */
- if( result ) {
-
-/* If the supplied ending index is less than the starting index, the
- ending index must have gone all the way round the polygon and started
- round again. Increase the ending index by the number of vertices to
- put it in the same cycle as the starting index. */
- if( i2 < i1 ) i2 += nvert;
-
-/* If the supplied starting index is within the first cycle (i.e. zero ->
- nvert-1 ), use the indices as they are (which may mean that the ending
- index is greater than nvert, but this is handled correctly by other
- functions). */
- if( i1 < nvert ) {
- result->i1 = i1;
- result->i2 = i2;
-
-/* If the supplied starting index is within the second cycle (i.e. nvert
- or greater) the ending index will be even greater, so we can reduce
- both by "nvert" to put them both in the first cycle. The goal is that
- the starting index should always be in the first cycle, but the ending
- index may possibly be in the second cycle. */
- } else {
- result->i1 = i1 - nvert;
- result->i2 = i2 - nvert;
- }
-
-/* Nullify the links to other Segments */
- result->next = NULL;
- result->prev = NULL;
- }
-
-/* Return the pointer to the new Segment structure. */
- return result;
-}
-
-/*
-*++
-* Name:
-c astOutline<X>
-f AST_OUTLINE<X>
-
-* Purpose:
-* Create a new Polygon outling values in a 2D data grid.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "polygon.h"
-c AstPolygon *astOutline<X>( <Xtype> value, int oper, <Xtype> array[],
-c int lbnd[2], int ubnd[2], double maxerr,
-c int maxvert, int inside[2], int starpix )
-f RESULT = AST_OUTLINE<X>( VALUE, OPER, ARRAY, LBND, UBND, MAXERR,
-f MAXVERT, INSIDE, STARPIX, STATUS )
-
-* Class Membership:
-* Polygon method.
-
-* Description:
-* This is a set of functions that create a Polygon enclosing a single
-* contiguous set of pixels that have a specified value within a gridded
-* 2-dimensional data array (e.g. an image).
-*
-* A basic 2-dimensional Frame is used to represent the pixel coordinate
-* system in the returned Polygon. The Domain attribute is set to
-* "PIXEL", the Title attribute is set to "Pixel coordinates", and the
-* Unit attribute for each axis is set to "pixel". All other
-* attributes are left unset. The nature of the pixel coordinate system
-* is determined by parameter
-c "starpix".
-f STARPIX.
-*
-* The
-c "maxerr" and "maxvert"
-f MAXERR and MAXVERT
-* parameters can be used to control how accurately the returned
-* Polygon represents the required region in the data array. The
-* number of vertices in the returned Polygon will be the minimum
-* needed to achieve the required accuracy.
-*
-* You should use a function which matches the numerical type of the
-* data you are processing by replacing <X> in the generic function
-* name
-c astOutline<X>
-f AST_OUTLINE<X>
-c by an appropriate 1- or 2-character type code. For example, if you
-* are procesing data with type
-c "float", you should use the function astOutlineF
-f REAL, you should use the function AST_OUTLINER
-* (see the "Data Type Codes" section below for the codes appropriate to
-* other numerical types).
-
-* Parameters:
-c value
-f VALUE = <Xtype> (Given)
-* A data value that specifies the pixels to be outlined.
-c oper
-f OPER = INTEGER (Given)
-* Indicates how the
-c "value"
-f VALUE
-* parameter is used to select the outlined pixels. It can
-* have any of the following values:
-c - AST__LT: outline pixels with value less than "value".
-c - AST__LE: outline pixels with value less than or equal to "value".
-c - AST__EQ: outline pixels with value equal to "value".
-c - AST__NE: outline pixels with value not equal to "value".
-c - AST__GE: outline pixels with value greater than or equal to "value".
-c - AST__GT: outline pixels with value greater than "value".
-f - AST__LT: outline pixels with value less than VALUE.
-f - AST__LE: outline pixels with value less than or equal to VALUE.
-f - AST__EQ: outline pixels with value equal to VALUE.
-f - AST__NE: outline pixels with value not equal to VALUE.
-f - AST__GE: outline pixels with value greater than or equal to VALUE.
-f - AST__GT: outline pixels with value greater than VALUE.
-c array
-f ARRAY( * ) = <Xtype> (Given)
-c Pointer to a
-f A
-* 2-dimensional array containing the data to be processed. The
-* numerical type of this array should match the 1- or
-* 2-character type code appended to the function name (e.g. if
-c you are using astOutlineF, the type of each array element
-c should be "float").
-f you are using AST_OUTLINER, the type of each array element
-f should be REAL).
-*
-* The storage order of data within this array should be such
-* that the index of the first grid dimension varies most
-* rapidly and that of the second dimension least rapidly
-c (i.e. Fortran array indexing is used).
-f (i.e. normal Fortran array storage order).
-c lbnd
-f LBND( 2 ) = INTEGER (Given)
-c Pointer to an array of two integers
-f An array
-* containing the coordinates of the centre of the first pixel
-* in the input grid along each dimension.
-c ubnd
-f UBND( 2) = INTEGER (Given)
-c Pointer to an array of two integers
-f An array
-* containing the coordinates of the centre of the last pixel in
-* the input grid along each dimension.
-*
-c Note that "lbnd" and "ubnd" together define the shape
-f Note that LBND and UBND together define the shape
-* and size of the input grid, its extent along a particular
-c (j'th) dimension being ubnd[j]-lbnd[j]+1 (assuming the
-c index "j" to be zero-based). They also define
-f (J'th) dimension being UBND(J)-LBND(J)+1. They also define
-* the input grid's coordinate system, each pixel having unit
-* extent along each dimension with integral coordinate values
-* at its centre or upper corner, as selected by parameter
-c "starpix".
-f STARPIX.
-c maxerr
-f MAXERR = DOUBLE PRECISION (Given)
-* Together with
-c "maxvert",
-f MAXVERT,
-* this determines how accurately the returned Polygon represents
-* the required region of the data array. It gives the target
-* discrepancy between the returned Polygon and the accurate outline
-* in the data array, expressed as a number of pixels. Insignificant
-* vertices are removed from the accurate outline, one by one, until
-* the number of vertices remaining in the returned Polygon equals
-c "maxvert",
-f MAXVERT,
-* or the largest discrepancy between the accurate outline and the
-* returned Polygon is greater than
-c "maxerr". If "maxerr"
-f MAXERR. If MAXERR
-* is zero or less, its value is ignored and the returned Polygon will
-* have the number of vertices specified by
-c "maxvert".
-f MAXVERT.
-c maxvert
-f MAXVERT = INTEGER (Given)
-* Together with
-c "maxerr",
-f MAXERR,
-* this determines how accurately the returned Polygon represents
-* the required region of the data array. It gives the maximum
-* allowed number of vertices in the returned Polygon. Insignificant
-* vertices are removed from the accurate outline, one by one, until
-* the number of vertices remaining in the returned Polygon equals
-c "maxvert",
-f MAXVERT,
-* or the largest discrepancy between the accurate outline and the
-* returned Polygon is greater than
-c "maxerr". If "maxvert"
-f MAXERR. If MAXVERT
-* is less than 3, its value is ignored and the number of vertices in
-* the returned Polygon will be the minimum needed to ensure that the
-* discrepancy between the accurate outline and the returned
-* Polygon is less than
-c "maxerr".
-f MAXERR.
-c inside
-f INSIDE( 2 ) = INTEGER (Given)
-c Pointer to an array of two integers
-f An array
-* containing the indices of a pixel known to be inside the
-* required region. This is needed because the supplied data
-* array may contain several disjoint areas of pixels that satisfy
-* the criterion specified by
-c "value" and "oper".
-f VALUE and OPER.
-* In such cases, the area described by the returned Polygon will
-* be the one that contains the pixel specified by
-c "inside".
-f INSIDE.
-* If the specified pixel is outside the bounds given by
-c "lbnd" and "ubnd",
-f LBND and UBND,
-* or has a value that does not meet the criterion specified by
-c "value" and "oper",
-f VALUE and OPER,
-* then this function will search for a suitable pixel. The search
-* starts at the central pixel and proceeds in a spiral manner until
-* a pixel is found that meets the specified crierion.
-c starpix
-f STARPIX = LOGICAL (Given)
-* A flag indicating the nature of the pixel coordinate system used
-* to describe the vertex positions in the returned Polygon. If
-c non-zero,
-f .TRUE.,
-* the standard Starlink definition of pixel coordinate is used in
-* which a pixel with integer index I spans a range of pixel coordinate
-* from (I-1) to I (i.e. pixel corners have integral pixel coordinates).
-c If zero,
-f If .FALSE.,
-* the definition of pixel coordinate used by other AST functions
-c such as astResample, astMask,
-f such as AST_RESAMPLE, AST_MASK,
-* etc., is used. In this definition, a pixel with integer index I
-* spans a range of pixel coordinate from (I-0.5) to (I+0.5) (i.e.
-* pixel centres have integral pixel coordinates).
-c boxsize
-f BOXSIZE = INTEGER (Given)
-* The full width in pixels of a smoothing box to be applied to the
-* polygon vertices before downsizing the polygon to a smaller number
-* of vertices. If an even number is supplied, the next larger odd
-* number is used. Values of one or zero result in no smoothing.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astOutline<X>()
-f AST_OUTLINE<X> = INTEGER
-* The number of pixels to which a value of
-c "badval"
-f BADVAL
-* has been assigned.
-
-* Notes:
-* - This function proceeds by first finding a very accurate polygon,
-* and then removing insignificant vertices from this fine polygon
-* using
-c astDownsize.
-f AST_DOWNSIZE.
-* - The returned Polygon is the outer boundary of the contiguous set
-* of pixels that includes ths specified "inside" point, and satisfy
-* the specified value requirement. This set of pixels may potentially
-* include "holes" where the pixel values fail to meet the specified
-* value requirement. Such holes will be ignored by this function.
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-
-* Data Type Codes:
-* To select the appropriate masking function, you should
-c replace <X> in the generic function name astOutline<X> with a
-f replace <X> in the generic function name AST_OUTLINE<X> with a
-* 1- or 2-character data type code, so as to match the numerical
-* type <Xtype> of the data you are processing, as follows:
-c - D: double
-c - F: float
-c - L: long int
-c - UL: unsigned long int
-c - I: int
-c - UI: unsigned int
-c - S: short int
-c - US: unsigned short int
-c - B: byte (signed char)
-c - UB: unsigned byte (unsigned char)
-f - D: DOUBLE PRECISION
-f - R: REAL
-f - I: INTEGER
-f - UI: INTEGER (treated as unsigned)
-f - S: INTEGER*2 (short integer)
-f - US: INTEGER*2 (short integer, treated as unsigned)
-f - B: BYTE (treated as signed)
-f - UB: BYTE (treated as unsigned)
-*
-c For example, astOutlineD would be used to process "double"
-c data, while astOutlineS would be used to process "short int"
-c data, etc.
-f For example, AST_OUTLINED would be used to process DOUBLE
-f PRECISION data, while AST_OUTLINES would be used to process
-f short integer data (stored in an INTEGER*2 array), etc.
-f
-f For compatibility with other Starlink facilities, the codes W
-f and UW are provided as synonyms for S and US respectively (but
-f only in the Fortran interface to AST).
-
-*--
-*/
-/* Define a macro to implement the function for a specific data
- type. Note, this function cannot be a virtual function since the
- argument list does not include a Polygon, and so no virtual function
- table is available. */
-#define MAKE_OUTLINE(X,Xtype) \
-AstPolygon *astOutline##X##_( Xtype value, int oper, Xtype array[], \
- int lbnd[2], int ubnd[2], double maxerr, \
- int maxvert, int inside[2], int starpix, \
- int *status ) { \
-\
-/* Local Variables: */ \
- AstFrame *frm; /* Frame in which to define the Polygon */ \
- AstPointSet *candidate; /* Candidate polygon vertices */ \
- AstPointSet *pset; /* PointSet holding downsized polygon vertices */ \
- AstPolygon *result; /* Result value to return */ \
- Xtype *pv; /* Pointer to next test point */ \
- Xtype v; /* Value of current pixel */ \
- double **ptr; /* Pointers to PointSet arrays */ \
- int boxsize; /* Half width of smoothign box in vertices */ \
- int inx; /* X index of inside point */ \
- int iny; /* Y index of inside point */ \
- int iv; /* Vector index of next test pixel */ \
- int ixv; /* X pixel index of next test point */ \
- int nv0; /* Number of vertices in accurate outline */ \
- int nx; /* Length of array x axis */ \
- int smooth; /* Do we need to smooth the polygon? */ \
- int stop_at_invalid; /* Indicates when to stop rightwards search */ \
- int tmp; /* Alternative boxsize */ \
- int valid; /* Does current pixel meet requirements? */ \
- static double junk[ 6 ] = {0.0, 0.0, 1.0, 1.0, 0.0, 1.0 }; /* Junk poly */ \
-\
-/* Initialise. */ \
- result = NULL; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* Avoid compiler warnings. */ \
- iv = 0; \
-\
-/* If we are going to be smoothing the polygon before downsizing it, we \
- need to ensure that the full polygon is retained within TraceEdge. if \
- this is not the case, TraceEdge can remove all vertices from straight \
- lines, except for the vertices that mark the beinning and end of the \
- straight line. */ \
- smooth = ( maxerr > 0.0 || maxvert > 2 ); \
-\
-/* Store the X dimension of the array. */ \
- nx = ubnd[ 0 ] - lbnd[ 0 ] + 1; \
-\
-/* See if a valid inside point was supplied. It must be inside the bounds \
- of the array, and must have a pixel value that meets the specified \
- requirement. */ \
- inx = inside[ 0 ]; \
- iny = inside[ 1 ]; \
- valid = ( inx >= lbnd[ 0 ] && inx <= ubnd[ 0 ] && \
- iny >= lbnd[ 1 ] && iny <= ubnd[ 1 ] ); \
-\
- if( valid ) { \
- iv = ( inx - lbnd[ 0 ] ) + (iny - lbnd[ 1 ] )*nx; \
- v = array[ iv ]; \
-\
- if( oper == AST__LT ) { \
- valid = ( v < value ); \
-\
- } else if( oper == AST__LE ) { \
- valid = ( v <= value ); \
-\
- } else if( oper == AST__EQ ) { \
- valid = ( v == value ); \
-\
- } else if( oper == AST__NE ) { \
- valid = ( v != value ); \
-\
- } else if( oper == AST__GE ) { \
- valid = ( v >= value ); \
-\
- } else if( oper == AST__GT ) { \
- valid = ( v > value ); \
-\
- } else if( astOK ){ \
- astError( AST__OPRIN, "astOutline"#X": Invalid operation code " \
- "(%d) supplied (programming error).", status, oper ); \
- } \
- } \
-\
-/* If no valid inside point was supplied, find one now. */ \
- if( !valid ) { \
-\
- if( oper == AST__LT ) { \
- FindInsidePointLT##X( value, array, lbnd, ubnd, &inx, &iny, &iv, status ); \
-\
- } else if( oper == AST__LE ) { \
- FindInsidePointLE##X( value, array, lbnd, ubnd, &inx, &iny, &iv, status ); \
-\
- } else if( oper == AST__EQ ) { \
- FindInsidePointEQ##X( value, array, lbnd, ubnd, &inx, &iny, &iv, status ); \
-\
- } else if( oper == AST__NE ) { \
- FindInsidePointNE##X( value, array, lbnd, ubnd, &inx, &iny, &iv, status ); \
-\
- } else if( oper == AST__GE ) { \
- FindInsidePointGE##X( value, array, lbnd, ubnd, &inx, &iny, &iv, status ); \
-\
- } else if( oper == AST__GT ) { \
- FindInsidePointGT##X( value, array, lbnd, ubnd, &inx, &iny, &iv, status ); \
-\
- } else if( astOK ){ \
- astError( AST__OPRIN, "astOutline"#X": Invalid operation code " \
- "(%d) supplied (programming error).", status, oper ); \
- } \
- } \
-\
-/* We now need to find a point on the boundary of the region containing \
- the inside point. Starting at the inside point, move to the right \
- through the array until a pixel is found which fails to meet the value \
- requirement or the edge of the array is reached. */ \
-\
- candidate = NULL; \
- pv = array + iv; \
- ixv = inx; \
- stop_at_invalid = 1; \
-\
- while( ++ixv <= ubnd[ 0 ] ) { \
-\
-/* Get the next pixel value. */ \
- v = *(++pv); \
-\
-/* See if it meets the value requirement. */ \
- if( oper == AST__LT ) { \
- valid = ( v < value ); \
-\
- } else if( oper == AST__LE ) { \
- valid = ( v <= value ); \
-\
- } else if( oper == AST__EQ ) { \
- valid = ( v == value ); \
-\
- } else if( oper == AST__NE ) { \
- valid = ( v != value ); \
-\
- } else if( oper == AST__GE ) { \
- valid = ( v >= value ); \
-\
- } else if( oper == AST__GT ) { \
- valid = ( v > value ); \
-\
- } else if( astOK ){ \
- astError( AST__OPRIN, "astOutline"#X": Invalid operation code " \
- "(%d) supplied (programming error).", status, oper ); \
- break; \
- } \
-\
-/* If we are currently looking for the next invalid pixel, and this pixel \
- is invalid... */ \
- if( stop_at_invalid ) { \
- if( ! valid ) { \
-\
-/* The current pixel may be on the required polygon, or it may be on the \
- edge of a hole contained within the region being outlined. We would \
- like to jump over such holes so that we can continue to look for the \
- real edge of the region being outlined. In order to determine if we \
- have reached a hole, we trace the edge that passes through the current \
- pixel, forming a candidate polygon in the process. In the process, We \
- see if the inside point falls within this candidate polygon. If it does \
- then the polygon is accepted as the required polygon. Otherwise, it is \
- rejected as a mere hole, and we continue moving away from the inside \
- point, looking for a new edge. */ \
- if( oper == AST__LT ) { \
- candidate = TraceEdgeLT##X( value, array, lbnd, ubnd, iv - 1, \
- ixv - 1, iny, starpix, smooth, status ); \
-\
- } else if( oper == AST__LE ) { \
- candidate = TraceEdgeLE##X( value, array, lbnd, ubnd, iv - 1, \
- ixv - 1, iny, starpix, smooth, status ); \
-\
- } else if( oper == AST__EQ ) { \
- candidate = TraceEdgeEQ##X( value, array, lbnd, ubnd, iv - 1, \
- ixv - 1, iny, starpix, smooth, status ); \
-\
- } else if( oper == AST__NE ) { \
- candidate = TraceEdgeNE##X( value, array, lbnd, ubnd, iv - 1, \
- ixv - 1, iny, starpix, smooth, status ); \
-\
- } else if( oper == AST__GE ) { \
- candidate = TraceEdgeGE##X( value, array, lbnd, ubnd, iv - 1, \
- ixv - 1, iny, starpix, smooth, status ); \
-\
- } else if( oper == AST__GT ) { \
- candidate = TraceEdgeGT##X( value, array, lbnd, ubnd, iv - 1, \
- ixv - 1, iny, starpix, smooth, status ); \
-\
- } else if( astOK ){ \
- astError( AST__OPRIN, "astOutline"#X": Invalid operation code " \
- "(%d) supplied (programming error).", status, oper ); \
- } \
-\
-/* If the candidate polygon is the required polygon, break out of the \
- loop. Otherwise, indicate that we want to continue moving right, \
- across the hole, until we reach the far side of the hole (i.e. find \
- the next valid pixel). */ \
- if( candidate ) { \
- break; \
- } else { \
- stop_at_invalid = 0; \
- } \
- } \
-\
-/* If we are currently looking for the next valid pixel, and the current \
- pixel is valid... */ \
- } else if( valid ) { \
-\
-/* We have reached the far side of a hole. Continue moving right, looking \
- now for the next invalid pixel (which may be on the required polygon). */ \
- stop_at_invalid = 1; \
- } \
- } \
-\
-/* If we have not yet found the required polygon, we must have reached \
- the right hand edge of the array. So we now follow the edge of the \
- array round until we meet the boundary of the required region. */ \
- if( !candidate ) { \
- if( oper == AST__LT ) { \
- candidate = TraceEdgeLT##X( value, array, lbnd, ubnd, iv - 1, \
- ixv - 1, iny, starpix, smooth, status ); \
-\
- } else if( oper == AST__LE ) { \
- candidate = TraceEdgeLE##X( value, array, lbnd, ubnd, iv - 1, \
- ixv - 1, iny, starpix, smooth, status ); \
-\
- } else if( oper == AST__EQ ) { \
- candidate = TraceEdgeEQ##X( value, array, lbnd, ubnd, iv - 1, \
- ixv - 1, iny, starpix, smooth, status ); \
-\
- } else if( oper == AST__NE ) { \
- candidate = TraceEdgeNE##X( value, array, lbnd, ubnd, iv - 1, \
- ixv - 1, iny, starpix, smooth, status ); \
-\
- } else if( oper == AST__GE ) { \
- candidate = TraceEdgeGE##X( value, array, lbnd, ubnd, iv - 1, \
- ixv - 1, iny, starpix, smooth, status ); \
-\
- } else if( oper == AST__GT ) { \
- candidate = TraceEdgeGT##X( value, array, lbnd, ubnd, iv - 1, \
- ixv - 1, iny, starpix, smooth, status ); \
-\
- } else if( astOK ){ \
- astError( AST__OPRIN, "astOutline"#X": Invalid operation code " \
- "(%d) supplied (programming error).", status, oper ); \
- } \
- } \
-\
-/* If required smooth the full resolution polygon before downsizing it. */ \
- if( smooth ) { \
-\
-/* Initially, set the boxsize to be equal to the required accouracy. */ \
- if( maxerr > 0 ) { \
- boxsize = (int) maxerr; \
- } else { \
- boxsize = INT_MAX; \
- } \
-\
-/* Determine a second box size equal to the average number of vertices in \
- the accurate outline, per vertex in the returned Polygon. */ \
- nv0 = astGetNpoint( candidate ); \
- if( maxvert > 2 ) { \
- tmp = nv0/(2*maxvert); \
- } else { \
- tmp = INT_MAX; \
- } \
-\
-/* Use the minimum of the two box sizes. */ \
- if( tmp < boxsize ) boxsize = tmp; \
-\
-/* Ensure the box is sufficiently small to allow at least 10 full boxes \
- (=20 half boxes) around the polygon. */ \
- tmp = nv0/20; \
- if( tmp < boxsize ) boxsize = tmp; \
- if( boxsize == 0 ) boxsize = 1; \
-\
-/* Smooth the polygon. */ \
- SmoothPoly( candidate, boxsize, 1.0, status ); \
- } \
-\
-/* Reduce the number of vertices in the outline. */ \
- frm = astFrame( 2, "Domain=PIXEL,Unit(1)=pixel,Unit(2)=pixel," \
- "Title=Pixel coordinates", status ); \
- pset = DownsizePoly( candidate, maxerr, maxvert, frm, status ); \
-\
-/* Create a default Polygon with 3 junk vertices. */ \
- result = astPolygon( frm, 3, 3, junk, NULL, " ", status ); \
-\
-/* Change the PointSet within the Polygon to the one created above. */ \
- SetPointSet( result, pset, status ); \
-\
-/* Free resources. Note, we need to free the arrays within the candidate \
- PointSet explicitly, since they were not created as part of the \
- construction of the PointSet (see TraceEdge). */ \
- pset = astAnnul( pset ); \
- frm = astAnnul( frm ); \
- ptr = astGetPoints( candidate ); \
- if( astOK ) { \
- astFree( ptr[ 0 ] ); \
- astFree( ptr[ 1 ] ); \
- } \
- candidate = astAnnul( candidate ); \
-\
-/* If an error occurred, clear the returned result. */ \
- if ( !astOK ) result = astAnnul( result ); \
-\
-/* Return the result. */ \
- return result; \
-}
-
-
-/* Expand the above macro to generate a function for each required
- data type. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-MAKE_OUTLINE(LD,long double)
-#endif
-MAKE_OUTLINE(D,double)
-MAKE_OUTLINE(L,long int)
-MAKE_OUTLINE(UL,unsigned long int)
-MAKE_OUTLINE(I,int)
-MAKE_OUTLINE(UI,unsigned int)
-MAKE_OUTLINE(S,short int)
-MAKE_OUTLINE(US,unsigned short int)
-MAKE_OUTLINE(B,signed char)
-MAKE_OUTLINE(UB,unsigned char)
-MAKE_OUTLINE(F,float)
-
-/* Undefine the macros. */
-#undef MAKE_OUTLINE
-
-static double Polywidth( AstFrame *frm, AstLineDef **edges, int i, int nv,
- double cen[ 2 ], int *status ){
-/*
-* Name:
-* Polywidth
-
-* Purpose:
-* Find the width of a polygon perpendicular to a given edge.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "polygon.h"
-* double Polywidth( AstFrame *frm, AstLineDef **edges, int i, int nv,
-* double cen[ 2 ], int *status )
-
-* Class Membership:
-* Polygon member function
-
-* Description:
-* This function defines a line perpendicular to a given polygon edge,
-* passing through the mid point of the edge, extending towards the
-* inside of the polygon. It returns the distance that can be travelled
-* along this line before any of the other polygon edges are hit (the
-* "width" of the polygon perpendicular to the given edge). It also
-* puts the position corresponding to half that distance into "cen".
-
-* Parameters:
-* frm
-* The Frame in which the lines are defined.
-* edges
-* Array of "nv" pointers to AstLineDef structures, each defining an
-* edge of the polygon.
-* i
-* The index of the edge that is to define the polygon width.
-* nv
-* Total number of edges.
-* cen
-* An array into which are put the coords of the point half way
-* along the polygon width line.
-* status
-* Pointer to the inherited status variable.
-
-* Returnd Value:
-* The width of the polygon perpendicular to the given edge, or
-* AST__BAD if the width cannot be determined (usually because the
-* vertices been supplied in a clockwise direction, effectively
-* negating the Polygon).
-
-*/
-
-/* Local Variables: */
- AstLineDef *line;
- double *cross;
- double d;
- double end[ 2 ];
- double l1;
- double l2;
- double result;
- double start[ 2 ];
- int j;
-
-/* Check the global error status. */
- result = AST__BAD;
- if ( !astOK ) return result;
-
-/* Create a Line description for a line perpendicular to the specified
- edge, passing through the mid point of the edge, and extending towards
- the inside of the polygon. First move away from the start along the
- line to the mid point. This gives the start of the new line. */
- l1 = 0.5*( edges[ i ]->length );
- astLineOffset( frm, edges[ i ], l1, 0.0, start );
-
-/* We now move away from this position at right angles to the line. We
- start off by moving 5 times the length of the specified edge. For
- some Frames (e.g. SkyFrames) this may result in a position that is
- much too close (i.e. if it goes all the way round the great circle
- and comes back to the beginning). Therefore, we check that the end
- point is the requested distance from the start point, and if not, we
- halve the length of the line and try again. */
- l2 = 10.0*l1;
- while( 1 ) {
- astLineOffset( frm, edges[ i ], l1, l2, end );
- d = astDistance( frm, start, end );
- if( d != AST__BAD && fabs( d - l2 ) < 1.0E-6*l2 ) break;
- l2 *= 0.5;
- }
-
-/* Create a description of the required line. */
- line = astLineDef( frm, start, end );
-
-/* Loop round every edge, except for the supplied edge. */
- for( j = 0; j < nv; j++ ) {
- if( j != i ) {
-
-/* Find the position at which the line created above crosses the current
- edge. Skip to the next edge if the line does not intersect the edge
- within the length of the edge. */
- if( astLineCrossing( frm, line, edges[ j ], &cross ) ) {
-
-/* Find the distance between the crossing point and the line start. */
- d = astDistance( frm, start, cross );
-
-/* If this is less than the smallest found so far, record it. */
- if( d != AST__BAD && ( d < result || result == AST__BAD ) ) {
- result = d;
- }
- }
-
-/* Free resources */
- cross = astFree( cross );
- }
- }
- line = astFree( line );
-
-/* If a width was found, return the point half way across the polygon. */
- if( result != AST__BAD ) {
- astOffset( frm, start, end, 0.5*result, cen );
-
-/* The usual reason for not finding a width is if the polygon vertices
- are supplied in clockwise order, effectively negating the polygon, and
- resulting in the "inside" of the polygon being the infinite region
- outside a polygonal hole. In this case, the end point of the line
- perpendicular to the initial edge can be returned as a representative
- "inside" point. */
- } else {
- cen[ 0 ] = end[ 0 ];
- cen[ 1 ] = end[ 1 ];
- }
-
-/* Return the width. */
- return result;
-
-}
-
-static void RegBaseBox( AstRegion *this_region, double *lbnd, double *ubnd, int *status ){
-/*
-* Name:
-* RegBaseBox
-
-* Purpose:
-* Returns the bounding box of an un-negated Region in the base Frame of
-* the encapsulated FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "polygon.h"
-* void RegBaseBox( AstRegion *this, double *lbnd, double *ubnd, int *status )
-
-* Class Membership:
-* Polygon member function (over-rides the astRegBaseBox protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns the upper and lower axis bounds of a Region in
-* the base Frame of the encapsulated FrameSet, assuming the Region
-* has not been negated. That is, the value of the Negated attribute
-* is ignored.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* lbnd
-* Pointer to an array in which to return the lower axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-* ubnd
-* Pointer to an array in which to return the upper axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstFrame *frm; /* Pointer to encapsulated Frame */
- AstPointSet *pset; /* Pointer to PointSet defining the Region */
- AstPolygon *this; /* Pointer to Polygon structure */
- AstRegion *reg; /* Base Frame equivalent of supplied Polygon */
- double **ptr; /* Pointer to PointSet data */
- double *x; /* Pointer to next X axis value */
- double *y; /* Pointer to next Y axis value */
- double dist; /* Offset along an axis */
- double x0; /* The first X axis value */
- double y0; /* The first Y axis value */
- int ip; /* Point index */
- int np; /* No. of points in PointSet */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the Polygon structure. */
- this = (AstPolygon *) this_region;
-
-/* If the base Frame bounding box has already been found, return the
- values stored in the Polygon structure. */
- if( this->lbnd[ 0 ] != AST__BAD ) {
- lbnd[ 0 ] = this->lbnd[ 0 ];
- lbnd[ 1 ] = this->lbnd[ 1 ];
- ubnd[ 0 ] = this->ubnd[ 0 ];
- ubnd[ 1 ] = this->ubnd[ 1 ];
-
-/* If the base Frame bounding box has not yet been found, find it now and
- store it in the Polygon structure. */
- } else {
-
-/* Get the axis values for the PointSet which defines the location and
- extent of the region in the base Frame of the encapsulated FrameSet. */
- pset = this_region->points;
- ptr = astGetPoints( pset );
- np = astGetNpoint( pset );
-
-/* Get a pointer to the base Frame in the frameset encapsulated by the
- parent Region structure. */
- frm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Find the upper and lower bounds of the box enclosing all the vertices.
- The box is expressed in terms of axis offsets from the first vertex, in
- order to avoid problems with boxes that cross RA=0 or RA=12h */
- lbnd[ 0 ] = 0.0;
- lbnd[ 1 ] = 0.0;
- ubnd[ 0 ] = 0.0;
- ubnd[ 1 ] = 0.0;
-
- x = ptr[ 0 ];
- y = ptr[ 1 ];
-
- x0 = *x;
- y0 = *y;
-
- for( ip = 0; ip < np; ip++, x++, y++ ) {
-
- dist = astAxDistance( frm, 1, x0, *x );
- if( dist < lbnd[ 0 ] ) {
- lbnd[ 0 ] = dist;
- } else if( dist > ubnd[ 0 ] ) {
- ubnd[ 0 ] = dist;
- }
-
- dist = astAxDistance( frm, 2, y0, *y );
- if( dist < lbnd[ 1 ] ) {
- lbnd[ 1 ] = dist;
- } else if( dist > ubnd[ 1 ] ) {
- ubnd[ 1 ] = dist;
- }
-
- }
-
-/* Convert the box bounds to absolute values, rather than values relative
- to the first vertex. */
- lbnd[ 0 ] += x0;
- lbnd[ 1 ] += y0;
- ubnd[ 0 ] += x0;
- ubnd[ 1 ] += y0;
-
-/* The astNormBox requires a Mapping which can be used to test points in
- this base Frame. Create a copy of the Polygon and then set its
- FrameSet so that the current Frame in the copy is the same as the base
- Frame in the original. */
- reg = astCopy( this );
- astSetRegFS( reg, frm );
- astSetNegated( reg, 0 );
-
-/* Normalise this box. */
- astNormBox( frm, lbnd, ubnd, reg );
-
-/* Free resources */
- reg = astAnnul( reg );
- frm = astAnnul( frm );
-
-/* Store it in the olygon structure for future use. */
- this->lbnd[ 0 ] = lbnd[ 0 ];
- this->lbnd[ 1 ] = lbnd[ 1 ];
- this->ubnd[ 0 ] = ubnd[ 0 ];
- this->ubnd[ 1 ] = ubnd[ 1 ];
-
- }
-}
-
-static AstPointSet *RegBaseMesh( AstRegion *this_region, int *status ){
-/*
-* Name:
-* RegBaseMesh
-
-* Purpose:
-* Return a PointSet containing a mesh of points on the boundary of a
-* Region in its base Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "polygon.h"
-* AstPointSet *astRegBaseMesh( AstRegion *this, int *status )
-
-* Class Membership:
-* Polygon member function (over-rides the astRegBaseMesh protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a PointSet containing a mesh of points on the
-* boundary of the Region. The points refer to the base Frame of
-* the encapsulated FrameSet.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the PointSet. Annul the pointer using astAnnul when it
-* is no longer needed.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-
-*/
-
-/* Local Variables: */
- AstFrame *frm; /* Base Frame in encapsulated FrameSet */
- AstPointSet *result; /* Returned pointer */
- AstPolygon *this; /* The Polygon structure */
- double **rptr; /* Pointers to returned mesh data */
- double **vptr; /* Pointers to vertex data */
- double *lens; /* Pointer to work space holding edge lengths */
- double d; /* Length of this edge */
- double delta; /* Angular separation of points */
- double end[ 2 ]; /* End position */
- double mp; /* No. of mesh points per unit distance */
- double p[ 2 ]; /* Position in 2D Frame */
- double start[ 2 ]; /* Start position */
- double total; /* Total length of polygon */
- int ip; /* Point index */
- int iv; /* Vertex index */
- int n; /* No. of points on this edge */
- int next; /* Index of next point in returned PointSet */
- int np; /* No. of points in returned PointSet */
- int nv; /* No. of polygon vertices */
-
-/* Initialise */
- result= NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If the Region structure contains a pointer to a PointSet holding
- a previously created mesh, return it. */
- if( this_region->basemesh ) {
- result = astClone( this_region->basemesh );
-
-/* Otherwise, create a new mesh. */
- } else {
-
-/* Get a pointer to the Polygon structure. */
- this = (AstPolygon *) this_region;
-
-/* Get a pointer to the base Frame in the encapsulated FrameSet. */
- frm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Get the number of vertices and pointers to the vertex axis values. */
- nv = astGetNpoint( this_region->points );
- vptr = astGetPoints( this_region->points );
-
-/* Allocate memory to hold the geodesic length of each edge. */
- lens = astMalloc( sizeof( double )*(size_t) nv );
-
- if( astOK ) {
-
-/* Find the total geodesic distance around the boundary. */
- total = 0.0;
-
- start[ 0 ] = vptr[ 0 ][ 0 ];
- start[ 1 ] = vptr[ 1 ][ 0 ];
-
- for( iv = 1; iv < nv; iv++ ) {
- end[ 0 ] = vptr[ 0 ][ iv ];
- end[ 1 ] = vptr[ 1 ][ iv ];
-
- d = astDistance( frm, start, end );
- if( d != AST__BAD ) total += fabs( d );
- lens[ iv ] = d;
- start[ 0 ] = end[ 0 ];
- start[ 1 ] = end[ 1 ];
- }
-
- end[ 0 ] = vptr[ 0 ][ 0 ];
- end[ 1 ] = vptr[ 1 ][ 0 ];
-
- d = astDistance( frm, start, end );
- if( d != AST__BAD ) total += fabs( d );
- lens[ 0 ] = d;
-
-/* Find the number of mesh points per unit geodesic distance. */
- if( total > 0.0 ){
- mp = astGetMeshSize( this )/total;
-
-/* Find the total number of mesh points required. */
- np = 0;
- for( iv = 0; iv < nv; iv++ ) {
- if( lens[ iv ] != AST__BAD ) np += 1 + (int)( lens[ iv ]*mp );
- }
-
-/* Create a suitable PointSet to hold the returned positions. */
- result = astPointSet( np, 2, "", status );
- rptr = astGetPoints( result );
- if( astOK ) {
-
-/* Initialise the index of the next point to be added to the returned
- PointSet. */
- next = 0;
-
-/* Loop round each good edge of the polygon. The edge ends at vertex "iv". */
- start[ 0 ] = vptr[ 0 ][ 0 ];
- start[ 1 ] = vptr[ 1 ][ 0 ];
-
- for( iv = 1; iv < nv; iv++ ) {
- end[ 0 ] = vptr[ 0 ][ iv ];
- end[ 1 ] = vptr[ 1 ][ iv ];
- if( lens[ iv ] != AST__BAD ) {
-
-/* Add the position of the starting vertex to the returned mesh. */
- rptr[ 0 ][ next ] = start[ 0 ];
- rptr[ 1 ][ next ] = start[ 1 ];
- next++;
-
-/* Find the number of points on this edge, and the geodesic distance
- between them. */
- n = 1 + (int) ( lens[ iv ]*mp );
-
-/* If more than one point, find the distance between points. */
- if( n > 1 ) {
- delta = lens[ iv ]/n;
-
-/* Loop round the extra points. */
- for( ip = 1; ip < n; ip++ ) {
-
-/* Find the position of the next mesh point. */
- astOffset( frm, start, end, delta*ip, p );
-
-/* Add it to the mesh. */
- rptr[ 0 ][ next ] = p[ 0 ];
- rptr[ 1 ][ next ] = p[ 1 ];
- next++;
-
- }
- }
- }
-
-/* The end of this edge becomes the start of the next. */
- start[ 0 ] = end[ 0 ];
- start[ 1 ] = end[ 1 ];
- }
-
-/* Now do the edge which ends at the first vertex. */
- end[ 0 ] = vptr[ 0 ][ 0 ];
- end[ 1 ] = vptr[ 1 ][ 0 ];
- if( lens[ 0 ] != AST__BAD ) {
- rptr[ 0 ][ next ] = start[ 0 ];
- rptr[ 1 ][ next ] = start[ 1 ];
- next++;
-
- n = 1 + (int)( lens[ 0 ]*mp );
- if( n > 1 ) {
- delta = lens[ 0 ]/n;
- for( ip = 1; ip < n; ip++ ) {
- astOffset( frm, start, end, delta*ip, p );
- rptr[ 0 ][ next ] = p[ 0 ];
- rptr[ 1 ][ next ] = p[ 1 ];
- next++;
- }
- }
- }
-
-/* Check the PointSet size was correct. */
- if( next != np && astOK ) {
- astError( AST__INTER, "astRegBaseMesh(%s): Error in the "
- "allocated PointSet size (%d) - should have "
- "been %d (internal AST programming error).", status,
- astGetClass( this ), np, next );
- }
-
-/* Save the returned pointer in the Region structure so that it does not
- need to be created again next time this function is called. */
- if( astOK ) this_region->basemesh = astClone( result );
-
- }
-
- } else if( astOK ) {
- astError( AST__BADIN, "astRegBaseMesh(%s): The boundary of "
- "the supplied %s has an undefined length.", status,
- astGetClass( this ), astGetClass( this ) );
- }
-
- }
-
-/* Free resources. */
- frm = astAnnul( frm );
- lens = astFree( lens );
- }
-
-/* Annul the result if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-static int RegPins( AstRegion *this_region, AstPointSet *pset, AstRegion *unc,
- int **mask, int *status ){
-/*
-* Name:
-* RegPins
-
-* Purpose:
-* Check if a set of points fall on the boundary of a given Polygon.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "polygon.h"
-* int RegPins( AstRegion *this, AstPointSet *pset, AstRegion *unc,
-* int **mask, int *status )
-
-* Class Membership:
-* Polygon member function (over-rides the astRegPins protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a flag indicating if the supplied set of
-* points all fall on the boundary of the given Polygon.
-*
-* Some tolerance is allowed, as specified by the uncertainty Region
-* stored in the supplied Polygon "this", and the supplied uncertainty
-* Region "unc" which describes the uncertainty of the supplied points.
-
-* Parameters:
-* this
-* Pointer to the Polygon.
-* pset
-* Pointer to the PointSet. The points are assumed to refer to the
-* base Frame of the FrameSet encapsulated by "this".
-* unc
-* Pointer to a Region representing the uncertainties in the points
-* given by "pset". The Region is assumed to represent the base Frame
-* of the FrameSet encapsulated by "this". Zero uncertainity is assumed
-* if NULL is supplied.
-* mask
-* Pointer to location at which to return a pointer to a newly
-* allocated dynamic array of ints. The number of elements in this
-* array is equal to the value of the Npoint attribute of "pset".
-* Each element in the returned array is set to 1 if the
-* corresponding position in "pset" is on the boundary of the Region
-* and is set to zero otherwise. A NULL value may be supplied
-* in which case no array is created. If created, the array should
-* be freed using astFree when no longer needed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the points all fall on the boundary of the given
-* Region, to within the tolerance specified. Zero otherwise.
-
-*/
-
-/* Local variables: */
- AstFrame *frm; /* Base Frame in supplied Polygon */
- AstPointSet *pset1; /* Pointer to copy of supplied PointSet */
- AstPointSet *pset2; /* Pointer to PointSet holding resolved components */
- AstPolygon *this; /* Pointer to the Polygon structure. */
- AstRegion *tunc; /* Uncertainity Region from "this" */
- double **ptr1; /* Pointer to axis values in "pset1" */
- double **ptr2; /* Pointer to axis values in "pset2" */
- double **vptr; /* Pointer to axis values at vertices */
- double edge_len; /* Length of current edge */
- double end[2]; /* Position of end of current edge */
- double l1; /* Length of bounding box diagonal */
- double l2; /* Length of bounding box diagonal */
- double lbnd_tunc[2]; /* Lower bounds of "this" uncertainty Region */
- double lbnd_unc[2]; /* Lower bounds of supplied uncertainty Region */
- double par; /* Parallel component */
- double parmax; /* Max acceptable parallel component */
- double prp; /* Perpendicular component */
- double start[2]; /* Position of start of current edge */
- double ubnd_tunc[2]; /* Upper bounds of "this" uncertainty Region */
- double ubnd_unc[2]; /* Upper bounds of supplied uncertainty Region */
- double wid; /* Width of acceptable margin around polygon */
- int *m; /* Pointer to next mask value */
- int i; /* Edge index */
- int ip; /* Point index */
- int np; /* No. of supplied points */
- int nv; /* No. of vertices */
- int result; /* Returned flag */
-
-/* Initialise */
- result = 0;
- if( mask ) *mask = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return result;
-
-/* Get a pointer to the Polygon structure. */
- this = (AstPolygon *) this_region;
-
-/* Check the supplied PointSet has 2 axis values per point. */
- if( astGetNcoord( pset ) != 2 && astOK ) {
- astError( AST__INTER, "astRegPins(%s): Illegal number of axis "
- "values per point (%d) in the supplied PointSet - should be "
- "2 (internal AST programming error).", status, astGetClass( this ),
- astGetNcoord( pset ) );
- }
-
-/* Get the number of axes in the uncertainty Region and check it is also 2. */
- if( unc && astGetNaxes( unc ) != 2 && astOK ) {
- astError( AST__INTER, "astRegPins(%s): Illegal number of axes (%d) "
- "in the supplied uncertainty Region - should be 2 "
- "(internal AST programming error).", status, astGetClass( this ),
- astGetNaxes( unc ) );
- }
-
-/* Get pointers to the axis values at the polygon vertices. */
- vptr = astGetPoints( this_region->points );
-
-/* Get the number of vertices. */
- nv = astGetNpoint( this_region->points );
-
-/* Take a copy of the supplied PointSet and get pointers to its axis
- values,and its size */
- pset1 = astCopy( pset );
- ptr1 = astGetPoints( pset1 );
- np = astGetNpoint( pset1 );
-
-/* Create a PointSet to hold the resolved components and get pointers to its
- axis data. */
- pset2 = astPointSet( np, 2, "", status );
- ptr2 = astGetPoints( pset2 );
-
-/* Create a mask array if required. */
- if( mask ) *mask = astMalloc( sizeof(int)*(size_t) np );
-
-/* We now find the maximum distance on each axis that a point can be from the
- boundary of the Polygon for it still to be considered to be on the boundary.
- First get the Region which defines the uncertainty within the Polygon
- being checked (in its base Frame), and get its bounding box. The current
- Frame of the uncertainty Region is the same as the base Frame of the
- Polygon. */
- tunc = astGetUncFrm( this, AST__BASE );
- astGetRegionBounds( tunc, lbnd_tunc, ubnd_tunc );
-
-/* Find the geodesic length within the base Frame of "this" of the diagonal of
- the bounding box. */
- frm = astGetFrame( this_region->frameset, AST__BASE );
- l1 = astDistance( frm, lbnd_tunc, ubnd_tunc );
-
-/* Also get the Region which defines the uncertainty of the supplied points
- and get its bounding box in the same Frame. */
- if( unc ) {
- astGetRegionBounds( unc, lbnd_unc, ubnd_unc );
-
-/* Find the geodesic length of the diagonal of this bounding box. */
- l2 = astDistance( frm, lbnd_unc, ubnd_unc );
-
-/* Assume zero uncertainty if no "unc" Region was supplied. */
- } else {
- l2 = 0.0;
- }
-
-/* The required border width is half of the total diagonal of the two bounding
- boxes. */
- if( astOK ) {
- wid = 0.5*( l1 + l2 );
-
-/* Loop round each edge of the polygon. Edge "i" starts at vertex "i-1"
- and ends at vertex "i". Edge zero starts at vertex "nv-1" and ends at
- vertex zero. */
- start[ 0 ] = vptr[ 0 ][ nv - 1 ];
- start[ 1 ] = vptr[ 1 ][ nv - 1 ];
- for( i = 0; i < nv; i++ ) {
- end[ 0 ] = vptr[ 0 ][ i ];
- end[ 1 ] = vptr[ 1 ][ i ];
-
-/* Find the length of this edge. */
- edge_len = astDistance( frm, start, end );
-
-/* Resolve all the supplied mesh points into components parallel and
- perpendicular to this edge. */
- (void) astResolvePoints( frm, start, end, pset1, pset2 );
-
-/* A point is effectively on this edge if the parallel component is
- greater than (-wid) and less than (edge_len+wid) AND the perpendicular
- component has an absolute value less than wid. Identify such positions
- and set them bad in pset1. */
- parmax = edge_len + wid;
- for( ip = 0; ip < np; ip++ ) {
- par = ptr2[ 0 ][ ip ];
- prp = ptr2[ 1 ][ ip ];
-
- if( par != AST__BAD && prp != AST__BAD ) {
- if( par > -wid && par < parmax && prp > -wid && prp < wid ) {
- ptr1[ 0 ][ ip ] = AST__BAD;
- ptr1[ 1 ][ ip ] = AST__BAD;
- }
- }
- }
-
-/* The end of the current edge becomes the start of the next. */
- start[ 0 ] = end[ 0 ];
- start[ 1 ] = end[ 1 ];
- }
-
-/* See if any good points are left in pset1. If so, it means that those
- points were not on any edge of hte Polygon. We use two alogorithms
- here depending on whether we are creating a mask array, since we can
- abort the check upon finding the first good point if we are not
- producing a mask. */
- result = 1;
- if( mask ) {
- m = *mask;
- for( ip = 0; ip < np; ip++, m++ ) {
- if( ptr1[ 0 ][ ip ] != AST__BAD &&
- ptr1[ 1 ][ ip ] != AST__BAD ) {
- *m = 0;
- result = 0;
- } else {
- *m = 1;
- }
- }
- } else {
- for( ip = 0; ip < np; ip++, m++ ) {
- if( ptr1[ 0 ][ ip ] != AST__BAD &&
- ptr1[ 1 ][ ip ] != AST__BAD ) {
- result = 0;
- break;
- }
- }
- }
- }
-
-/* Free resources. */
- tunc = astAnnul( tunc );
- frm = astAnnul( frm );
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
-
-/* If an error has occurred, return zero. */
- if( !astOK ) {
- result = 0;
- if( mask ) *mask = astAnnul( *mask );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int RegTrace( AstRegion *this_region, int n, double *dist, double **ptr,
- int *status ){
-/*
-*+
-* Name:
-* RegTrace
-
-* Purpose:
-* Return requested positions on the boundary of a 2D Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "polygon.h"
-* int astTraceRegion( AstRegion *this, int n, double *dist, double **ptr );
-
-* Class Membership:
-* Polygon member function (overrides the astTraceRegion method
-* inherited from the parent Region class).
-
-* Description:
-* This function returns positions on the boundary of the supplied
-* Region, if possible. The required positions are indicated by a
-* supplied list of scalar parameter values in the range zero to one.
-* Zero corresponds to some arbitrary starting point on the boundary,
-* and one corresponds to the end (which for a closed region will be
-* the same place as the start).
-
-* Parameters:
-* this
-* Pointer to the Region.
-* n
-* The number of positions to return. If this is zero, the function
-* returns without action (but the returned function value still
-* indicates if the method is supported or not).
-* dist
-* Pointer to an array of "n" scalar parameter values in the range
-* 0 to 1.0.
-* ptr
-* A pointer to an array of pointers. The number of elements in
-* this array should equal tthe number of axes in the Frame spanned
-* by the Region. Each element of the array should be a pointer to
-* an array of "n" doubles, in which to return the "n" values for
-* the corresponding axis. The contents of the arrays are unchanged
-* if the supplied Region belongs to a class that does not
-* implement this method.
-
-* Returned Value:
-* Non-zero if the astTraceRegion method is implemented by the class
-* of Region supplied, and zero if not.
-
-*-
-*/
-
-/* Local Variables; */
- AstFrame *frm;
- AstMapping *map;
- AstPointSet *bpset;
- AstPointSet *cpset;
- AstPolygon *this;
- double **bptr;
- double d;
- double p[ 2 ];
- int i;
- int j0;
- int j;
- int ncur;
- int nv;
- int monotonic;
-
-/* Check inherited status, and the number of points to return, returning
- a non-zero value to indicate that this class supports the astRegTrace
- method. */
- if( ! astOK || n == 0 ) return 1;
-
-/* Get a pointer to the Polygon structure. */
- this = (AstPolygon *) this_region;
-
-/* Ensure cached information is available. */
- Cache( this, status );
-
-/* Get a pointer to the base Frame in the encapsulated FrameSet. */
- frm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* We first determine the required positions in the base Frame of the
- Region, and then transform them into the current Frame. Get the
- base->current Mapping, and the number of current Frame axes. */
- map = astGetMapping( this_region->frameset, AST__BASE, AST__CURRENT );
-
-/* If it's a UnitMap we do not need to do the transformation, so put the
- base Frame positions directly into the supplied arrays. */
- if( astIsAUnitMap( map ) ) {
- bpset = NULL;
- bptr = ptr;
- ncur = 2;
-
-/* Otherwise, create a PointSet to hold the base Frame positions (known
- to be 2D since this is an polygon). */
- } else {
- bpset = astPointSet( n, 2, " ", status );
- bptr = astGetPoints( bpset );
- ncur = astGetNout( map );
- }
-
-/* Check the pointers can be used safely. */
- if( astOK ) {
-
-/* Get the number of vertices. */
- nv = astGetNpoint( this_region->points );
-
-/* If we have a reasonable number of pointsand there are a reasonable
- number of vertices, we can be quicker if we know if the parameteric
- distances are monotonic increasing. Find out now. */
- if( n > 5 && nv > 5 ) {
-
- monotonic = 1;
- for( i = 1; i < n; i++ ) {
- if( dist[ i ] < dist[ i - 1 ] ) {
- monotonic = 0;
- break;
- }
- }
-
- } else {
- monotonic = 0;
- }
-
-/* Loop round each point. */
- j0 = 1;
- for( i = 0; i < n; i++ ) {
-
-/* Get the required round the polygon, starting from vertex zero. */
- d = dist[ i ]*this->totlen;
-
-/* Loop round each vertex until we find one which is beyond the required
- point. If the supplied distances are monotonic increasing, we can
- start the checks at the same vertex that was used for the previous
- since we know there will never be a backward step. */
- for( j = j0; j < nv; j++ ) {
- if( this->startsat[ j ] > d ) break;
- }
-
-/* If the distances are monotonic increasing, record the vertex that we
- have reached so far. */
- if( monotonic ) j0 = j;
-
-/* Find the distance to travel beyond the previous vertex. */
- d -= this->startsat[ j - 1 ];
-
-/* Find the position, that is the required distance from the previous
- vertex towards the next vertex. */
- astLineOffset( frm, this->edges[ j - 1 ], d, 0.0, p );
-
-/* Store the resulting axis values. */
- bptr[ 0 ][ i ] = p[ 0 ];
- bptr[ 1 ][ i ] = p[ 1 ];
- }
- }
-
-/* If required, transform the base frame positions into the current
- Frame, storing them in the supplied array. Then free resources. */
- if( bpset ) {
- cpset = astPointSet( n, ncur, " ", status );
- astSetPoints( cpset, ptr );
-
- (void) astTransform( map, bpset, 1, cpset );
-
- cpset = astAnnul( cpset );
- bpset = astAnnul( bpset );
- }
-
-/* Free remaining resources. */
- map = astAnnul( map );
- frm = astAnnul( frm );
-
-/* Return a non-zero value to indicate that this class supports the
- astRegTrace method. */
- return 1;
-}
-
-static Segment *RemoveFromChain( Segment *head, Segment *seg, int *status ){
-/*
-* Name:
-* RemoveFromChain
-
-* Purpose:
-* Remove a Segment from the link list maintained by astDownsize.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "polygon.h"
-* Segment *RemoveFromChain( Segment *head, Segment *seg, int *status )
-
-* Class Membership:
-* Polygon member function
-
-* Description:
-* The supplied Segment is removed form the list, and the gap is
-* closed up.
-
-* Parameters:
-* head
-* The Segment structure at the head of the list.
-* seg
-* The Segment to be removed from the list.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the link head (which will have changed if "seg" was the
-* original head).
-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return head;
-
-/* If the Segment was the original head, make the next segment the new
- head. */
- if( head == seg ) head = seg->next;
-
-/* Close up the links between the Segments on either side of the segment
- being removed. */
- if( seg->prev ) seg->prev->next = seg->next;
- if( seg->next ) seg->next->prev = seg->prev;
-
-/* Nullify the links in the segment being removed. */
- seg->next = NULL;
- seg->prev = NULL;
-
-/* Return the new head. */
- return head;
-}
-
-static void ResetCache( AstRegion *this, int *status ){
-/*
-* Name:
-* ResetCache
-
-* Purpose:
-* Clear cached information within the supplied Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "polygon.h"
-* void ResetCache( AstRegion *this, int *status )
-
-* Class Membership:
-* Region member function (overrides the astResetCache method
-* inherited from the parent Region class).
-
-* Description:
-* This function clears cached information from the supplied Region
-* structure.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-*/
- if( this ) {
- ( (AstPolygon *) this )->stale = 1;
- ( (AstPolygon *) this )->lbnd[ 0 ] = AST__BAD;
- (*parent_resetcache)( this, status );
- }
-}
-
-static void SetPointSet( AstPolygon *this, AstPointSet *pset, int *status ){
-/*
-* Name:
-* SetPointSet
-
-* Purpose:
-* Store a new set of vertices in an existing Polygon.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "polygon.h"
-* void SetPointSet( AstPolygon *this, AstPointSet *pset, int *status )
-
-* Class Membership:
-* Polygon member function
-
-* Description:
-* The PointSet in the supplied Polygon is annulled, are stored in the supplied
-* Polygon, replacing the existing data pointers.
-
-* Parameters:
-* this
-* Pointer to the Polygon to be changed.
-* pset
-* The PointSet containing the enw vertex information.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Annul the pointer to the PointSet already in the supplied Polygon. */
- (void) astAnnul( ((AstRegion *) this)->points );
-
-/* Store a clone of the supplie dnew PointSet pointer. */
- ((AstRegion *) this)->points = astClone( pset );
-
-/* Indicate the cached information in the polygon will need to be
- re-calculated when needed. */
- astResetCache( this );
-}
-
-static void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status ) {
-/*
-* Name:
-* SetRegFS
-
-* Purpose:
-* Stores a new FrameSet in a Region
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "polygon.h"
-* void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status )
-
-* Class Membership:
-* Polygon method (over-rides the astSetRegFS method inherited from
-* the Region class).
-
-* Description:
-* This function creates a new FrameSet and stores it in the supplied
-* Region. The new FrameSet contains two copies of the supplied
-* Frame, connected by a UnitMap.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* frm
-* The Frame to use.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Invoke the parent method to store the FrameSet in the parent Region
- structure. */
- (* parent_setregfs)( this_region, frm, status );
-
-/* Indicate cached information eeds re-calculating. */
- astResetCache( this_region );
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* Simplify
-
-* Purpose:
-* Simplify the Mapping represented by a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "polygon.h"
-* AstMapping *Simplify( AstMapping *this, int *status )
-
-* Class Membership:
-* Polygon method (over-rides the astSimplify method inherited
-* from the Region class).
-
-* Description:
-* This function invokes the parent Region Simplify method, and then
-* performs any further region-specific simplification.
-*
-* If the Mapping from base to current Frame is not a UnitMap, this
-* will include attempting to fit a new Region to the boundary defined
-* in the current Frame.
-
-* Parameters:
-* this
-* Pointer to the original Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the simplified Region. A cloned pointer to the
-* supplied Region will be returned if no simplication could be
-* performed.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstFrame *frm; /* Current Frame */
- AstMapping *map; /* Base -> current Mapping */
- AstMapping *result; /* Result pointer to return */
- AstPointSet *mesh; /* Mesh of current Frame positions */
- AstPointSet *ps2; /* Polygon PointSet in current Frame */
- AstPolygon *newpol; /* New Polygon */
- AstRegion *new; /* Pointer to simplified Region */
- AstRegion *this; /* Pointer to supplied Region structure */
- AstRegion *unc; /* Pointer to uncertainty Region */
- double **ptr2; /* Pointer axis values in "ps2" */
- double *mem; /* Pointer to array holding new vertex coords */
- double *p; /* Pointer to next vertex coords */
- double *q; /* Pointer to next vertex coords */
- int iv; /* Vertex index */
- int nv; /* Number of vertices in polygon */
- int ok; /* Are the new polygon vertices good? */
- int simpler; /* Has some simplication taken place? */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the supplied Region structure. */
- this = (AstRegion *) this_mapping;
-
-/* Invoke the parent Simplify method inherited from the Region class. This
- will simplify the encapsulated FrameSet and uncertainty Region. */
- new = (AstRegion *) (*parent_simplify)( this_mapping, status );
-
-/* Note if any simplification took place. This is assumed to be the case
- if the pointer returned by the above call is different to the supplied
- pointer. */
- simpler = ( new != this );
-
-/* We attempt to simplify the Polygon by re-defining it within its current
- Frame. Transforming the Polygon from its base to its current Frame may
- result in the region no longer being an polygon. We test this by
- transforming a set of bounds on the Polygon boundary. This can only be
- done if the current Frame is 2-dimensional. Also, there is only any
- point in doing it if the Mapping from base to current Frame in the
- Polygon is not a UnitMap. */
- map = astGetMapping( new->frameset, AST__BASE, AST__CURRENT );
- if( !astIsAUnitMap( map ) && astGetNout( map ) == 2 ) {
-
-/* Get a pointer to the Frame represented by the Polgon. */
- frm = astGetFrame( new->frameset, AST__CURRENT );
-
-/* Get a mesh of points covering the Polygon in this Frame. */
- mesh = astRegMesh( new );
-
-/* Get the Region describing the positional uncertainty in this Frame. */
- unc = astGetUncFrm( new, AST__CURRENT );
-
-/* Get the positions of the vertices within this Frame. */
- ps2 = astRegTransform( this, this->points, 1, NULL, NULL );
- ptr2 = astGetPoints( ps2 );
-
-/* Get the number of vertices. */
- nv = astGetNpoint( ps2 );
-
-/* Re-organise the vertex axis values into the form required by the
- Polygon constructor function. */
- mem = astMalloc( sizeof( double)*(size_t)( 2*nv ) );
- if( astOK ) {
- ok = 1;
- p = mem;
- q = ptr2[ 0 ];
- for( iv = 0; iv < nv; iv++ ) {
- if( ( *(p++) = *(q++) ) == AST__BAD ) ok = 0;
- }
- q = ptr2[ 1 ];
- for( iv = 0; iv < nv; iv++ ) *(p++) = *(q++);
-
-/* Create a new Polygon using these transformed vertices. */
- newpol = ok ? astPolygon( frm, nv, nv, mem, unc, "", status ) : NULL;
-
-/* See if all points within the mesh created from the original Polygon fall
- on the boundary of the new Polygon, to within the uncertainty of the
- Region. */
- if( newpol && astRegPins( newpol, mesh, NULL, NULL ) ) {
-
-/* If so, use the new Polygon in place of the original Region. */
- (void) astAnnul( new );
- new = astClone( newpol );
- simpler =1;
- }
-
-/* Free resources. */
- if( newpol ) newpol = astAnnul( newpol );
- }
-
- frm = astAnnul( frm );
- mesh = astAnnul( mesh );
- unc = astAnnul( unc );
- ps2 = astAnnul( ps2 );
- mem = astFree( mem );
- }
- map = astAnnul( map );
-
-/* If any simplification could be performed, copy Region attributes from
- the supplied Region to the returned Region, and return a pointer to it.
- If the supplied Region had no uncertainty, ensure the returned Region
- has no uncertainty. Otherwise, return a clone of the supplied pointer. */
- if( simpler ){
- astRegOverlay( new, this, 1 );
- result = (AstMapping *) new;
-
- } else {
- new = astAnnul( new );
- result = astClone( this );
- }
-
-/* If an error occurred, annul the returned pointer. */
- if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static void SmoothPoly( AstPointSet *pset, int boxsize, double strength,
- int *status ) {
-/*
-* Name:
-* SmoothPoly
-
-* Purpose:
-* Smoooth a polygon assuming plane geometry.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "polygon.h"
-* void SmoothPoly( AstPointSet *pset, int boxsize, double strength,
-* int *status )
-
-* Class Membership:
-* Polygon member function
-
-* Description:
-* This function smooths a polygon, without changing the number of
-* vertices. It assumes plane geometry, so should not be used to
-* smooth polygons defined within a SkyFrame or CmpFrame.
-*
-* Each vertex is replaced by a new vertex determined as follows: the
-* mean X and Y axis value of the vertices in a section of the polygon
-* centred on the vertex being replaced are found (the length of the
-* section is given by parameter "boxsize"). The new vertex position
-* is then the weighted mean of this mean (X,Y) position and the old
-* vertex position. The weight for the mean (X,Y) position is given
-* by parameter "strength", and the weight for the old vertex
-* position is (1.0 - strength)
-
-* Parameters:
-* pset
-* A PointSet holding the polygon vertices.
-* boxsize
-* Half width of the box filter, given as a number of vertices.
-* strength
-* The weight to use for the mean (X,Y) position when finding each
-* new vertex position. Should be in the range 0.0 to 1.0. A value
-* of zero results in no change being made to the polygon. A value
-* of 1.0 results in the returned polygon being fully smoothed.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- double **ptr;
- double *newx;
- double *newy;
- double *nx;
- double *ny;
- double *oldx;
- double *oldy;
- double *ox;
- double *oy;
- double *px;
- double *py;
- double *qx;
- double *qy;
- double a;
- double b;
- double sx;
- double sy;
- int half_width;
- int i;
- int nv;
- int top;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get the number of vertices. */
- nv = astGetNpoint( pset );
-
-/* Get pointers to arrays holding the supplied vertex positions. */
- ptr = astGetPoints( pset );
- oldx = ptr[ 0 ];
- oldy = ptr[ 1 ];
-
-/* Allocate arrays to hold the returned vertex positions. */
- newx = astMalloc( nv*sizeof( double ) );
- newy = astMalloc( nv*sizeof( double ) );
-
-/* Check these pointers can be used safely. */
- if( astOK ) {
-
-/* Get weighting factors for the fully smoothed and unsmoothed positions. */
- a = strength;
- b = 1.0 - a;
-
-/* Ensure the box size is sufficiently small for there to be room for
- two boxes along the polygon. */
- half_width = nv/4 - 1;
- if( boxsize < half_width ) half_width = boxsize;
- if( half_width < 1 ) half_width = 1;
-
-/* Modify the weight for the fully smoothed position to include the
- normalisation factor needed to account for the box width. */
- a /= 2*half_width + 1;
-
-/* Find the sum of the x and y coordinates within a box centred on the
- first vertex. This includes vertices from the end of the polygon. */
- px = oldx + 1;
- qx = oldx + nv;
- sx = (oldx)[ 0 ];
-
- py = oldy + 1;
- qy = oldy + nv;
- sy = (oldy)[ 0 ];
-
- for( i = 0; i < half_width; i++ ) {
- sx += *(px++) + *(--qx);
- sy += *(py++) + *(--qy);
- }
-
-/* Replacing vertices within the first half box will include vertices at
- both ends of the polygon. Set up the pointers accordingly, and then
- find replacements for each vertex in the first half box.*/
- ox = oldx;
- oy = oldy;
- nx = newx;
- ny = newy;
- for( i = 0; i < half_width; i++ ) {
-
-/* Form the new vertex (x,y) values as the weighted mean of the mean
- (x,y) values in the box, and the old (x,y) values. */
- *(nx++) = a*sx + b*( *(ox++) );
- *(ny++) = a*sy + b*( *(oy++) );
-
-/* Add in the next vertex X and Y axis values to the running sums, and
- remove the position that has now passed out of the box. */
- sx += *(px++) - *(qx++);
- sy += *(py++) - *(qy++);
- }
-
-/* Adjust the pointer for the rest of the polygon, up to one half box away
- from the end. In this section, the smoothing box does not touch either
- end of the polygon. */
- top = nv - half_width - 1;
- qx = oldx;
- qy = oldy;
- for( ; i < top; i++ ){
-
-/* Form the new vertex (x,y) values as the weighted mean of the mean
- (x,y) values in the box, and the old (x,y) values. */
- *(nx++) = a*sx + b*( *(ox++) );
- *(ny++) = a*sy + b*( *(oy++) );
-
-/* Add in the next vertex X and Y axis values to the running sums, and
- remove the position that has now passed out of the box. */
- sx += *(px++) - *(qx++);
- sy += *(py++) - *(qy++);
- }
-
-/* Now do the last half box (which includes vertices from the start of
- the polygon). */
- top = nv;
- px = oldx;
- py = oldy;
- for( ; i < top; i++ ){
- *(nx++) = a*sx + b*( *(ox++) );
- *(ny++) = a*sy + b*( *(oy++) );
- sx += *(px++) - *(qx++);
- sy += *(py++) - *(qy++);
- }
-
-/* Replace the data points in the PointSet. */
- ptr[ 0 ] = newx;
- ptr[ 1 ] = newy;
- oldx = astFree( oldx );
- oldy = astFree( oldy );
- }
-}
-
-/*
-* Name:
-* TraceEdge
-
-* Purpose:
-* Find a point that is inside the required outline.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "polygon.h"
-* void TraceEdge<Oper><X>( <Xtype> value, <Xtype> array[],
-* int lbnd[ 2 ], int ubnd[ 2 ], int iv0,
-* int ix0, int iy0, int starpix, int full,
-* int *status );
-
-* Class Membership:
-* Polygon member function
-
-* Description:
-* This function forms a polygon enclosing the region of the data
-* array specified by <Oper> and "value". If this polygon contains
-* the point "(inx,iny)", then a PointSet is returned holding the
-* pixel coordinates of the Polygon vertices. If the polygon
-* does not contain "(inx,iny)", a NULL pointer is returned.
-*
-* Each vertex in the polygon corresponds to a corner of a pixel in
-* the data array.
-
-* Parameters:
-* value
-* The data value defining valid pixels.
-* array
-* The data array.
-* lbnd
-* The lower pixel index bounds of the array.
-* ubnd
-* The upper pixel index bounds of the array.
-* iv0
-* The vector index of a pixel inside the region such that the
-* pixel to the right is NOT inside the region. This defines the
-* start of the polygon.
-* ix0
-* The X pixel index of the pixel specified by "iv0".
-* inx
-* The X pixel index of a point which must be inside the polygon
-* for the polygon to be acceptable.
-* iny
-* The Y pixel index of a point which must be inside the polygon
-* for the polygon to be acceptable.
-* starpix
-* If non-zero, the usual Starlink definition of pixel coordinate
-* is used (integral values at pixel corners). Otherwise, the
-* system used by other AST functions such as astResample is used
-* (integral values at pixel centres).
-* full
-* If non-zero, the full polygon is stored. If zero, vertices in the
-* middle of straight sections of the Polygon are omitted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a PointSet holding the vertices of the polygon, or
-* NULL if the polygon did not contain "(inx,iny)".
-
-* Notes:
-* - <Oper> must be one of LT, LE, EQ, GE, GT, NE.
-
-
-*/
-
-/* Define a macro to implement the function for a specific data
- type and operation. */
-#define MAKE_TRACEEDGE(X,Xtype,Oper,OperI) \
-static AstPointSet *TraceEdge##Oper##X( Xtype value, Xtype array[], \
- int lbnd[ 2 ], int ubnd[ 2 ], \
- int iv0, int ix0, int iy0, \
- int starpix, int full, \
- int *status ){ \
-\
-/* Local Variables: */ \
- AstPointSet *result; /* Pointer to text describing oper */ \
- Xtype *pa; /* Pointer to current valid pixel value */ \
- Xtype *pb; /* Pointer to neigbouring valid pixel value */ \
- Xtype *pc; /* Pointer to neigbouring valid pixel value */ \
- double *ptr[ 2 ]; /* PointSet data pointers */ \
- double *xvert; /* Pointer to array holding vertex X axis values */ \
- double *yvert; /* Pointer to array holding vertex Y axis values */ \
- double xx; /* Pixel X coord at corner */ \
- double yy; /* Pixel Y coord at corner */ \
- int at; /* The pixel corner to draw to */ \
- int done; /* Have we arrived back at the start of the polygon? */ \
- int ii; /* Index of new vertex */ \
- int ix; /* X pixel index of current valid pixel */ \
- int iy; /* Y pixel index of current valid pixel */ \
- int nright; /* Overall number of right hand turns along polygon */ \
- int nvert; /* Number of vertices */ \
- int nx; /* Pixels per row */ \
-\
-/* Initialise */ \
- result = NULL; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-\
-/* Initialise pointers to arrays holding the X and Y pixel coordinates at \
- the vertices of the polygon. */ \
- xvert = NULL; \
- yvert = NULL; \
- nvert = 0; \
-\
-/* Find number of pixels in one row of the array. */ \
- nx = ( ubnd[ 0 ] - lbnd[ 0 ] + 1 ); \
-\
-/* The four corners of a pixel are numbered as follows: 0=bottom left, \
- 1=top left, 2=top right, 3=bottom right. The following algorithm moves \
- along pixel edges, from corner to corner, using the above numbering \
- scheme to identify the corners. We start the polygon by moving from the \
- bottom right to the top right corner of pixel "(ix0,iy0)". */ \
- ix = ix0; \
- iy = iy0; \
- at = 2; \
-\
-/* Store a pointer to the first good pixel value. */ \
- pa = array + ( ix - lbnd[ 0 ] ) + nx*( iy - lbnd[ 1 ] ) ; \
-\
-/* We count the number of times the polygon turns to the right compared \
- to the left. Initialise it to zero. */ \
- nright = 0; \
-\
-/* Loop round tracing out the polygon until we arrive back at the \
- beginning. The Polygon class requires that the inside of the polygon \
- is to the left as we move round the polygon in an anti-clockwise \
- direction. So at each corner, we attempt to move to the next \
- anti-clockwise good pixel corner. */ \
- done = 0; \
- while( !done ) { \
-\
-/* If we have arrived at the bottom left corner of the good pixel, we must \
- have come from the top left corner since all movements around a pixel \
- must be anti-clockwise. */ \
- if( at == 0 ) { \
-\
-/* Note the pixel coordinates at the bottom left corner of the current \
- pixel. */ \
- if( starpix ) { \
- xx = ix - 1.0; \
- yy = iy - 1.0; \
- } else { \
- xx = ix - 0.5; \
- yy = iy - 0.5; \
- } \
-\
-/* Get a pointer to lower left pixel value */ \
- pb = pa - nx - 1; \
-\
-/* Get a pointer to lower mid pixel value. */ \
- pc = pb + 1; \
-\
-/* If the lower left pixel is within the array and meets the validity \
- requirements, move to the left along its top edge. */ \
- if( iy > lbnd[ 1 ] && ix > lbnd[ 0 ] && ISVALID(*pb,OperI,value) ) { \
- nright++; \
- pa = pb; \
- at = 1; \
- ix--; \
- iy--; \
-\
-/* Otherwise, if lower mid pixel is good, move down its left edge. */ \
- } else if( iy > lbnd[ 1 ] && ISVALID(*pc,OperI,value) ) { \
- pa = pc; \
- at = 0; \
- iy--; \
-\
-/* Otherwise, move to the right along the bottom edge of the current pixel. */ \
- } else { \
- nright--; \
- at = 3; \
- } \
-\
-/* If the polygon bends at this point, or if we will be smoothing the \
- polygon, append the pixel coordinates at this pixel corner to the \
- polygon. */ \
- if( full || pa != pc ) ADD( xx, yy ); \
-\
-/* If we have arrived at the top left corner of the good pixel, we must \
- have come from the top right corner. */ \
- } else if( at == 1 ) { \
-\
-/* Note the pixel coordinates at the top left corner of the current \
- pixel. */ \
- if( starpix ) { \
- xx = ix - 1.0; \
- yy = iy; \
- } else { \
- xx = ix - 0.5; \
- yy = iy + 0.5; \
- } \
-\
-/* Get a pointer to upper left pixel value */ \
- pb = pa + nx - 1; \
-\
-/* Get a pointer to mid left pixel value. */ \
- pc = pa - 1; \
-\
-/* If upper left pixel is good, move up its left edge. */ \
- if( iy < ubnd[ 1 ] && ix > lbnd[ 0 ] && ISVALID(*pb,OperI,value) ) { \
- nright++; \
- pa = pb; \
- at = 2; \
- ix--; \
- iy++; \
-\
-/* Otherwise, if left mid pixel is good, move left along its top edge. */ \
- } else if( ix > lbnd[ 0 ] && ISVALID(*pc,OperI,value) ) { \
- pa = pc; \
- at = 1; \
- ix--; \
-\
-/* Otherwise, move down the left edge of the current pixel. */ \
- } else { \
- nright--; \
- at = 0; \
- } \
-\
-/* If the polygon bends at this point, or if we will be smoothing the \
- polygon, append the pixel coordinates at this pixel corner to the \
- polygon. */ \
- if( full || pa != pc ) ADD( xx, yy ); \
-\
-/* If we have arrived at the top right corner of the good pixel, we must \
- have come from the bottom right corner. */ \
- } else if( at == 2 ) { \
-\
-/* Note the pixel coordinates at the top right corner of the current \
- pixel. */ \
- if( starpix ) { \
- xx = ix; \
- yy = iy; \
- } else { \
- xx = ix + 0.5; \
- yy = iy + 0.5; \
- } \
-\
-/* Pointer to upper right pixel value */ \
- pb = pa + nx + 1; \
-\
-/* Pointer to top mid pixel value. */ \
- pc = pa + nx; \
-\
-/* If upper right pixel is good, move right along its bottom edge. */ \
- if( iy < ubnd[ 1 ] && ix < ubnd[ 0 ] && ISVALID(*pb,OperI,value) ){ \
- nright++; \
- pa = pb; \
- at = 3; \
- ix++; \
- iy++; \
-\
-/* Otherwise, if upper mid pixel is good, move up its right edge. */ \
- } else if( iy < ubnd[ 1 ] && ISVALID(*pc,OperI,value) ) { \
- pa = pc; \
- at = 2; \
- iy++; \
-\
-/* Otherwise, move left along the top edge of the current pixel. */ \
- } else { \
- nright--; \
- at = 1; \
- } \
-\
-/* If the polygon bends at this point, or if we will be smoothing the \
- polygon, append the pixel coordinates at this pixel corner to the \
- polygon. */ \
- if( full || pa != pc ) ADD( xx, yy ); \
-\
-/* Arrived at bottom right corner of good pixel from lower left. */ \
- } else { \
-\
-/* Note the pixel coordinates at the bottom right corner of the current \
- pixel. */ \
- if( starpix ) { \
- xx = ix; \
- yy = iy - 1.0; \
- } else { \
- xx = ix + 0.5; \
- yy = iy - 0.5; \
- } \
-\
-/* Pointer to lower right pixel value */ \
- pb = pa - ( nx - 1 ); \
-\
-/* Pointer to mid right pixel value. */ \
- pc = pa + 1; \
-\
-/* If lower right pixel is good, move down its left edge. */ \
- if( iy > lbnd[ 1 ] && ix < ubnd[ 0 ] && ISVALID(*pb,OperI,value) ) { \
- nright++; \
- pa = pb; \
- at = 0; \
- ix++; \
- iy--; \
-\
-/* Otherwise, if right mid pixel is good, move right along its lower edge. */ \
- } else if( ix < ubnd[ 0 ] && ISVALID(*pc,OperI,value) ) { \
- pa = pc; \
- at = 3; \
- ix++; \
-\
-/* Otherwise, move up the left edge of the current pixel. */ \
- } else { \
- nright--; \
- at = 2; \
- } \
-\
-/* If the polygon bends at this point, or if we will be smoothing the \
- polygon, append the pixel coordinates at this pixel corner to the \
- polygon. */ \
- if( full || pa != pc ) ADD( xx, yy ); \
- } \
-\
-/* If we have arrived back at the start, break out of the loop. */ \
- if( ix == ix0 && iy == iy0 && at == 2 ) done = 1; \
- } \
-\
-/* If we have circled round to the right, the polygon will not enclosed \
- the specified position, so free resources and return a NULL pointer. */ \
- if( nright > 0 ) { \
- xvert = astFree( xvert ); \
- yvert = astFree( yvert ); \
-\
-/* If we have circled round to the left, the polygon will enclose \
- the specified position, so create and return a PointSet. */ \
- } else { \
- result = astPointSet( nvert, 2, " ", status ); \
- ptr[ 0 ] = xvert; \
- ptr[ 1 ] = yvert; \
- astSetPoints( result, ptr ); \
- } \
-\
-/* Annul the returned PointSet if anythign went wrong. */ \
- if( !astOK && result ) result = astAnnul( result ); \
-\
-/* Return the PointSet pointer. */ \
- return result; \
-}
-
-/* Define a macro for testing if a pixel value <V> satisfies the requirements
- specified by <Oper> and <Value>. Compiler optimisation should remove
- all the "if" testing from this expression. */
-#define ISVALID(V,OperI,Value) ( \
- ( OperI == AST__LT ) ? ( (V) < Value ) : ( \
- ( OperI == AST__LE ) ? ( (V) <= Value ) : ( \
- ( OperI == AST__EQ ) ? ( (V) == Value ) : ( \
- ( OperI == AST__GE ) ? ( (V) >= Value ) : ( \
- ( OperI == AST__NE ) ? ( (V) != Value ) : ( \
- (V) > Value \
- ) \
- ) \
- ) \
- ) \
- ) \
-)
-
-/* Define a macro to add a vertex position to dynamically allocated
- arrays of X and Y positions. */
-#define ADD(X,Y) {\
- ii = nvert++; \
- xvert = (double *) astGrow( xvert, nvert, sizeof( double ) ); \
- yvert = (double *) astGrow( yvert, nvert, sizeof( double ) ); \
- if( astOK ) { \
- xvert[ ii ] = (X); \
- yvert[ ii ] = (Y); \
- } \
-}
-
-/* Define a macro that uses the above macro to to create implementations
- of TraceEdge for all operations. */
-#define MAKEALL_TRACEEDGE(X,Xtype) \
-MAKE_TRACEEDGE(X,Xtype,LT,AST__LT) \
-MAKE_TRACEEDGE(X,Xtype,LE,AST__LE) \
-MAKE_TRACEEDGE(X,Xtype,EQ,AST__EQ) \
-MAKE_TRACEEDGE(X,Xtype,NE,AST__NE) \
-MAKE_TRACEEDGE(X,Xtype,GE,AST__GE) \
-MAKE_TRACEEDGE(X,Xtype,GT,AST__GT)
-
-/* Expand the above macro to generate a function for each required
- data type and operation. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-MAKEALL_TRACEEDGE(LD,long double)
-#endif
-MAKEALL_TRACEEDGE(D,double)
-MAKEALL_TRACEEDGE(L,long int)
-MAKEALL_TRACEEDGE(UL,unsigned long int)
-MAKEALL_TRACEEDGE(I,int)
-MAKEALL_TRACEEDGE(UI,unsigned int)
-MAKEALL_TRACEEDGE(S,short int)
-MAKEALL_TRACEEDGE(US,unsigned short int)
-MAKEALL_TRACEEDGE(B,signed char)
-MAKEALL_TRACEEDGE(UB,unsigned char)
-MAKEALL_TRACEEDGE(F,float)
-
-/* Undefine the macros. */
-#undef MAKE_TRACEEDGE
-#undef MAKEALL_TRACEEDGE
-#undef ISVALID
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a Polygon to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "polygon.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* Polygon member function (over-rides the astTransform protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function takes a Polygon and a set of points encapsulated in a
-* PointSet and transforms the points by setting axis values to
-* AST__BAD for all points which are outside the region. Points inside
-* the region are copied unchanged from input to output.
-
-* Parameters:
-* this
-* Pointer to the Polygon.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - The forward and inverse transformations are identical for a
-* Region.
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of axes in the Frame represented by the Polygon.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstFrame *frm; /* Pointer to base Frame in FrameSet */
- AstLineDef *a; /* Line from inside point to test point */
- AstLineDef *b; /* Polygon edge */
- AstPointSet *in_base; /* PointSet holding base Frame input positions*/
- AstPointSet *result; /* Pointer to output PointSet */
- AstPolygon *this; /* Pointer to Polygon */
- double **ptr_in; /* Pointer to input base Frame coordinate data */
- double **ptr_out; /* Pointer to output current Frame coordinate data */
- double *px; /* Pointer to array of first axis values */
- double *py; /* Pointer to array of second axis values */
- double p[ 2 ]; /* Current test position */
- int closed; /* Is the boundary part of the Region? */
- int i; /* Edge index */
- int icoord; /* Coordinate index */
- int in_region; /* Is the point inside the Region? */
- int ncoord_out; /* No. of current Frame axes */
- int ncross; /* Number of crossings */
- int neg; /* Has the Region been negated? */
- int npoint; /* No. of input points */
- int nv; /* No. of vertices */
- int point; /* Loop counter for input points */
- int pos; /* Is test position in, on, or outside boundary? */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the Polygon structure. */
- this = (AstPolygon *) this_mapping;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Region class. This function validates
- all arguments and generates an output PointSet if necessary,
- containing a copy of the input PointSet. */
- result = (*parent_transform)( this_mapping, in, forward, out, status );
-
-/* Get the number of points to be transformed. */
- npoint = astGetNpoint( result );
-
-/* Get a pointer to the output axis values. */
- ptr_out = astGetPoints( result );
-
-/* Find the number of axes in the current Frame. This need not be 2 (the
- number of axes in the *base* Frame must be 2 however). */
- ncoord_out = astGetNcoord( result );
-
-/* We will now extend the parent astTransform method by performing the
- calculations needed to generate the output coordinate values. */
-
-/* First use the encapsulated FrameSet to transform the supplied positions
- from the current Frame in the encapsulated FrameSet (the Frame
- represented by the Region), to the base Frame (the Frame in which the
- Region is defined). This call also returns a pointer to the base Frame
- of the encapsulated FrameSet. Note, the returned pointer may be a
- clone of the "in" pointer, and so we must be carefull not to modify the
- contents of the returned PointSet. */
- in_base = astRegTransform( this, in, 0, NULL, &frm );
- ptr_in = astGetPoints( in_base );
-
-/* Get the number of vertices in the polygon. */
- nv = astGetNpoint( ((AstRegion *) this)->points );
-
-/* See if the boundary is part of the Region. */
- closed = astGetClosed( this );
-
-/* See if the Region has been negated. */
- neg = astGetNegated( this );
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
- if ( astOK ) {
- px = ptr_in[ 0 ];
- py = ptr_in[ 1 ];
-
-/* Loop round each supplied point in the base Frame of the polygon. */
- for ( point = 0; point < npoint; point++, px++, py++ ) {
-
-/* If the input point is bad, indicate that bad output values should be
- returned. */
- if( *px == AST__BAD || *py == AST__BAD ) {
- in_region = 0;
-
-/* Otherwise, we first determine if the point is inside, outside, or on,
- the Polygon boundary. Initialially it is unknown. */
- } else {
-
-/* Ensure cached information is available.*/
- Cache( this, status );
-
-/* Create a definition of the line from a point which is inside the
- polygon to the supplied point. This is a structure which includes
- cached intermediate information which can be used to speed up
- subsequent calculations. */
- p[ 0 ] = *px;
- p[ 1 ] = *py;
- a = astLineDef( frm, this->in, p );
-
-/* We now determine the number of times this line crosses the polygon
- boundary. Initialise the number of crossings to zero. */
- ncross = 0;
- pos = UNKNOWN;
-
-/* Loop rouind all edges of the polygon. */
- for( i = 0; i < nv; i++ ) {
- b = this->edges[ i ];
-
-/* If this point is on the current edge, then we need do no more checks
- since we know it is either inside or outside the polygon (depending on
- whether the polygon is closed or not). */
- if( astLineContains( frm, b, 0, p ) ) {
- pos = ON;
- break;
-
-/* Otherwise, see if the two lines cross within their extent. If so,
- increment the number of crossings. */
- } else if( astLineCrossing( frm, b, a, NULL ) ) {
- ncross++;
- }
- }
-
-/* Free resources */
- a = astFree( a );
-
-/* If the position is not on the boundary, it is inside the boundary if
- the number of crossings is even, and outside otherwise. */
- if( pos == UNKNOWN ) pos = ( ncross % 2 == 0 )? IN : OUT;
-
-/* Whether the point is in the Region depends on whether the point is
- inside the polygon boundary, whether the Polygon has been negated, and
- whether the polygon is closed. */
- if( neg ) {
- if( pos == IN ) {
- in_region = 0;
- } else if( pos == OUT ) {
- in_region = 1;
- } else if( closed ) {
- in_region = 1;
- } else {
- in_region = 0;
- }
-
- } else {
- if( pos == IN ) {
- in_region = 1;
- } else if( pos == OUT ) {
- in_region = 0;
- } else if( closed ) {
- in_region = 1;
- } else {
- in_region = 0;
- }
- }
- }
-
-/* If the point is not inside the Region, store bad output values. */
- if( !in_region ) {
- for ( icoord = 0; icoord < ncoord_out; icoord++ ) {
- ptr_out[ icoord ][ point ] = AST__BAD;
- }
- }
- }
- }
-
-/* Free resources */
- in_base = astAnnul( in_base );
- frm = astAnnul( frm );
-
-/* Annul the result if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for Polygon objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for Polygon objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstPolygon *in; /* Pointer to input Polygon */
- AstPolygon *out; /* Pointer to output Polygon */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Polygons. */
- in = (AstPolygon *) objin;
- out = (AstPolygon *) objout;
-
-/* For safety, first clear any references to the input memory from
- the output Polygon. */
- out->edges = NULL;
- out->startsat = NULL;
-
-/* Indicate cached information needs nre-calculating. */
- astResetCache( (AstPolygon *) out );
-}
-
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for Polygon objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for Polygon objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstPointSet *ps; /* Pointer to PointSet inside Region */
- AstPolygon *this; /* Pointer to Polygon */
- int i; /* Index of vertex */
- int istat; /* Original AST error status */
- int nv; /* Number of vertices */
- int rep; /* Original error reporting state */
-
-/* Obtain a pointer to the Polygon structure. */
- this = (AstPolygon *) obj;
-
-/* Annul all resources. */
- ps = ((AstRegion *) this)->points;
- if( this->edges && ps ) {
-
-/* Ensure we get a value for "nv" even if an error has occurred. */
- istat = astStatus;
- astClearStatus;
- rep = astReporting( 0 );
-
- nv = astGetNpoint( ps );
-
- astSetStatus( istat );
- astReporting( rep );
-
-/* Free the structures holding the edge information. */
- for( i = 0; i < nv; i++ ) {
- this->edges[ i ] = astFree( this->edges[ i ] );
- }
- this->edges = astFree( this->edges );
- this->startsat = astFree( this->startsat );
-
- }
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for Polygon objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the Polygon class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the Polygon whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstPolygon *this; /* Pointer to the Polygon structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Polygon structure. */
- this = (AstPolygon *) this_object;
-
-/* Write out values representing the instance variables for the
- Polygon class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* A flag indicating the convention used for determining the interior of
- the polygon. A zero value indicates that the old AST system is in
- use (inside to the left when moving anti-clockwise round the vertices
- as viewed from the outside of the celestial sphere). A non-zero value
- indicates the STC system is in use (inside to the left when moving
- anti-clockwise round the vertices as viewed from the inside of the
- celestial sphere). AST currently uses the STC system. */
- astWriteInt( channel, "Order", 1, 0, 1, "Polygon uses STC vertex order convention" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAPolygon and astCheckPolygon functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(Polygon,Region)
-astMAKE_CHECK(Polygon)
-
-AstPolygon *astPolygon_( void *frame_void, int npnt, int dim,
- const double *points, AstRegion *unc,
- const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astPolygon
-f AST_POLYGON
-
-* Purpose:
-* Create a Polygon.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "polygon.h"
-c AstPolygon *astPolygon( AstFrame *frame, int npnt, int dim,
-c const double *points, AstRegion *unc,
-c const char *options, ... )
-f RESULT = AST_POLYGON( FRAME, NPNT, DIM, POINTS, UNC, OPTIONS, STATUS )
-
-* Class Membership:
-* Polygon constructor.
-
-* Description:
-* This function creates a new Polygon object and optionally initialises
-* its attributes.
-*
-* The Polygon class implements a polygonal area, defined by a
-* collection of vertices, within a 2-dimensional Frame. The vertices
-* are connected together by geodesic curves within the encapsulated Frame.
-* For instance, if the encapsulated Frame is a simple Frame then the
-* geodesics will be straight lines, but if the Frame is a SkyFrame then
-* the geodesics will be great circles. Note, the vertices must be
-* supplied in an order such that the inside of the polygon is to the
-* left of the boundary as the vertices are traversed. Supplying them
-* in the reverse order will effectively negate the polygon.
-*
-* Within a SkyFrame, neighbouring vertices are always joined using the
-* shortest path. Thus if an edge of 180 degrees or more in length is
-* required, it should be split into section each of which is less
-* than 180 degrees. The closed path joining all the vertices in order
-* will divide the celestial sphere into two disjoint regions. The
-* inside of the polygon is the region which is circled in an
-* anti-clockwise manner (when viewed from the inside of the celestial
-* sphere) when moving through the list of vertices in the order in
-* which they were supplied when the Polygon was created (i.e. the
-* inside is to the left of the boundary when moving through the
-* vertices in the order supplied).
-
-* Parameters:
-c frame
-f FRAME = INTEGER (Given)
-* A pointer to the Frame in which the region is defined. It must
-* have exactly 2 axes. A deep copy is taken of the supplied Frame.
-* This means that any subsequent changes made to the Frame using the
-* supplied pointer will have no effect the Region.
-c npnt
-f NPNT = INTEGER (Given)
-* The number of points in the Region.
-c dim
-f DIM = INTEGER (Given)
-c The number of elements along the second dimension of the "points"
-f The number of elements along the first dimension of the POINTS
-* array (which contains the point coordinates). This value is
-* required so that the coordinate values can be correctly
-* located if they do not entirely fill this array. The value
-c given should not be less than "npnt".
-f given should not be less than NPNT.
-c points
-f POINTS( DIM, 2 ) = DOUBLE PRECISION (Given)
-c The address of the first element of a 2-dimensional array of
-c shape "[2][dim]" giving the physical coordinates of the vertices.
-c These should be stored such that the value of coordinate
-c number "coord" for point number "pnt" is found in element
-c "in[coord][pnt]".
-f A 2-dimensional array giving the physical coordinates of the
-f vertices. These should be stored such that the value of coordinate
-f number COORD for point number PNT is found in element IN(PNT,COORD).
-c unc
-f UNC = INTEGER (Given)
-* An optional pointer to an existing Region which specifies the
-* uncertainties associated with the boundary of the Box being created.
-* The uncertainty in any point on the boundary of the Box is found by
-* shifting the supplied "uncertainty" Region so that it is centred at
-* the boundary point being considered. The area covered by the
-* shifted uncertainty Region then represents the uncertainty in the
-* boundary position. The uncertainty is assumed to be the same for
-* all points.
-*
-* If supplied, the uncertainty Region must be of a class for which
-* all instances are centro-symetric (e.g. Box, Circle, Ellipse, etc.)
-* or be a Prism containing centro-symetric component Regions. A deep
-* copy of the supplied Region will be taken, so subsequent changes to
-* the uncertainty Region using the supplied pointer will have no
-* effect on the created Box. Alternatively,
-f a null Object pointer (AST__NULL)
-c a NULL Object pointer
-* may be supplied, in which case a default uncertainty is used
-* equivalent to a box 1.0E-6 of the size of the Box being created.
-*
-* The uncertainty Region has two uses: 1) when the
-c astOverlap
-f AST_OVERLAP
-* function compares two Regions for equality the uncertainty
-* Region is used to determine the tolerance on the comparison, and 2)
-* when a Region is mapped into a different coordinate system and
-* subsequently simplified (using
-c astSimplify),
-f AST_SIMPLIFY),
-* the uncertainties are used to determine if the transformed boundary
-* can be accurately represented by a specific shape of Region.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new Polygon. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new Polygon. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astPolygon()
-f AST_POLYGON = INTEGER
-* A pointer to the new Polygon.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-
-* Status Handling:
-* The protected interface to this function includes an extra
-* parameter at the end of the parameter list descirbed above. This
-* parameter is a pointer to the integer inherited status
-* variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *frame; /* Pointer to Frame structure */
- AstPolygon *new; /* Pointer to new Polygon */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the supplied Frame structure. */
- frame = astCheckFrame( frame_void );
-
-/* Initialise the Polygon, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitPolygon( NULL, sizeof( AstPolygon ), !class_init,
- &class_vtab, "Polygon", frame, npnt,
- dim, points, unc );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new Polygon's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new Polygon. */
- return new;
-}
-
-AstPolygon *astPolygonId_( void *frame_void, int npnt, int dim,
- const double *points, void *unc_void,
- const char *options, ... ) {
-/*
-* Name:
-* astPolygonId_
-
-* Purpose:
-* Create a Polygon.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "polygon.h"
-* AstPolygon *astPolygonId_( void *frame_void, int npnt,
-* int dim, const double *points, void *unc_void,
-* const char *options, ... )
-
-* Class Membership:
-* Polygon constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astPolygon constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astPolygon_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astPolygon_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astPolygon_.
-
-* Returned Value:
-* The ID value associated with the new Polygon.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *frame; /* Pointer to Frame structure */
- AstPolygon *new; /* Pointer to new Polygon */
- AstRegion *unc; /* Pointer to Region structure */
- va_list args; /* Variable argument list */
-
- int *status; /* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a Frame pointer from the supplied ID and validate the
- pointer to ensure it identifies a valid Frame. */
- frame = astVerifyFrame( astMakePointer( frame_void ) );
-
-/* Obtain a Region pointer from the supplied "unc" ID and validate the
- pointer to ensure it identifies a valid Region . */
- unc = unc_void ? astCheckRegion( astMakePointer( unc_void ) ) : NULL;
-
-/* Initialise the Polygon, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitPolygon( NULL, sizeof( AstPolygon ), !class_init,
- &class_vtab, "Polygon", frame, npnt, dim,
- points, unc );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new Polygon's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new Polygon. */
- return astMakeId( new );
-}
-
-
-AstPolygon *astInitPolygon_( void *mem, size_t size, int init, AstPolygonVtab *vtab,
- const char *name, AstFrame *frame, int npnt,
- int dim, const double *points, AstRegion *unc, int *status ) {
-/*
-*+
-* Name:
-* astInitPolygon
-
-* Purpose:
-* Initialise a Polygon.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "polygon.h"
-* AstPolygon *astInitPolygon( void *mem, size_t size, int init, AstPolygonVtab *vtab,
-* const char *name, AstFrame *frame, int npnt,
-* int dim, const double *points, AstRegion *unc )
-
-* Class Membership:
-* Polygon initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new Polygon object. It allocates memory (if necessary) to accommodate
-* the Polygon plus any additional data associated with the derived class.
-* It then initialises a Polygon structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a Polygon at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the Polygon is to be initialised.
-* This must be of sufficient size to accommodate the Polygon data
-* (sizeof(Polygon)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the Polygon (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the Polygon
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the Polygon's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new Polygon.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-* frame
-* A pointer to the Frame in which the region is defined.
-* npnt
-* The number of points in the Region.
-* dim
-* The number of elements along the second dimension of the "points"
-* array (which contains the point coordinates). This value is
-* required so that the coordinate values can be correctly
-* located if they do not entirely fill this array. The value
-* given should not be less than "npnt".
-* points
-* The address of the first element of a 2-dimensional array of
-* shape "[2][dim]" giving the physical coordinates of the
-* points. These should be stored such that the value of coordinate
-* number "coord" for point number "pnt" is found in element
-* "in[coord][pnt]".
-* unc
-* A pointer to a Region which specifies the uncertainty in the
-* supplied positions (all points in the new Polygon being
-* initialised are assumed to have the same uncertainty). A NULL
-* pointer can be supplied, in which case default uncertainties equal
-* to 1.0E-6 of the dimensions of the new Polygon's bounding box are
-* used. If an uncertainty Region is supplied, it must be either a Box,
-* a Circle or an Ellipse, and its encapsulated Frame must be related
-* to the Frame supplied for parameter "frame" (i.e. astConvert
-* should be able to find a Mapping between them). Two positions
-* the "frame" Frame are considered to be co-incident if their
-* uncertainty Regions overlap. The centre of the supplied
-* uncertainty Region is immaterial since it will be re-centred on the
-* point being tested before use. A deep copy is taken of the supplied
-* Region.
-
-* Returned Value:
-* A pointer to the new Polygon.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstPolygon *new; /* Pointer to new Polygon */
- AstPointSet *pset; /* Pointer to PointSet holding points */
- const double *q; /* Pointer to next supplied axis value */
- double **ptr; /* Pointer to data in pset */
- double *p; /* Pointer to next PointSet axis value */
- int i; /* Axis index */
- int j; /* Point index */
- int nin; /* No. of axes */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitPolygonVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Check the number of axis values per position is correct. */
- nin = astGetNaxes( frame );
- if( nin != 2 ) {
- astError( AST__BADIN, "astInitPolygon(%s): The supplied %s has %d "
- "axes - polygons must have exactly 2 axes.", status, name,
- astGetClass( frame ), nin );
-
-/* If so create a PointSet and store the supplied points in it. Check
- none are bad. */
- } else {
- pset = astPointSet( npnt, 2, "", status );
- ptr = astGetPoints( pset );
- for( i = 0; i < 2 && astOK; i++ ) {
- p = ptr[ i ];
- q = points + i*dim;
- for( j = 0; j < npnt; j++ ) {
- if( (*(p++) = *(q++)) == AST__BAD ) {
- astError( AST__BADIN, "astInitPolygon(%s): One or more "
- "bad axis values supplied for the vertex "
- "number %d.", status, name, j + 1 );
- break;
- }
- }
- }
-
-/* Initialise a Region structure (the parent class) as the first component
- within the Polygon structure, allocating memory if necessary. */
- new = (AstPolygon *) astInitRegion( mem, size, 0, (AstRegionVtab *) vtab,
- name, frame, pset, unc );
- if ( astOK ) {
-
-/* Initialise the Polygon data. */
-/* ------------------------------ */
- new->lbnd[ 0 ] = AST__BAD;
- new->ubnd[ 0 ] = AST__BAD;
- new->lbnd[ 1 ] = AST__BAD;
- new->ubnd[ 1 ] = AST__BAD;
- new->edges = NULL;
- new->startsat = NULL;
- new->totlen = 0.0;
- new->acw = 1;
- new->stale = 1;
-
-/* If an error occurred, clean up by deleting the new Polygon. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Free resources. */
- pset = astAnnul( pset );
-
- }
-
-/* Return a pointer to the new Polygon. */
- return new;
-}
-
-AstPolygon *astLoadPolygon_( void *mem, size_t size, AstPolygonVtab *vtab,
- const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadPolygon
-
-* Purpose:
-* Load a Polygon.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "polygon.h"
-* AstPolygon *astLoadPolygon( void *mem, size_t size, AstPolygonVtab *vtab,
-* const char *name, AstChannel *channel )
-
-* Class Membership:
-* Polygon loader.
-
-* Description:
-* This function is provided to load a new Polygon using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* Polygon structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a Polygon at the start of the memory
-* passed via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory into which the Polygon is to be
-* loaded. This must be of sufficient size to accommodate the
-* Polygon data (sizeof(Polygon)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the Polygon (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the Polygon structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstPolygon) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new Polygon. If this is NULL, a pointer
-* to the (static) virtual function table for the Polygon class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "Polygon" is used instead.
-
-* Returned Value:
-* A pointer to the new Polygon.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstPolygon *new; /* Pointer to the new Polygon */
- int order; /* Is the new (STC) order convention used? */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this Polygon. In this case the
- Polygon belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstPolygon );
- vtab = &class_vtab;
- name = "Polygon";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitPolygonVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built Polygon. */
- new = astLoadRegion( mem, size, (AstRegionVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "Polygon" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* A flag indicating what order the vertices are stored in. See the Dump
- function. */
- order = astReadInt( channel, "order", 0 );
-
-/* Initialise other class properties. */
- new->lbnd[ 0 ] = AST__BAD;
- new->ubnd[ 0 ] = AST__BAD;
- new->lbnd[ 1 ] = AST__BAD;
- new->ubnd[ 1 ] = AST__BAD;
- new->edges = NULL;
- new->startsat = NULL;
- new->totlen = 0.0;
- new->acw = 1;
- new->stale = 1;
-
-/* If the order in which the vertices were written used the old AST
- convention, negate the Polygon so that it is consistent with the
- current conevtion (based on STC). */
- if( ! order ) astNegate( new );
-
-/* If an error occurred, clean up by deleting the new Polygon. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new Polygon pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-
-AstPolygon *astDownsize_( AstPolygon *this, double maxerr, int maxvert,
- int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Polygon,Downsize))( this, maxerr, maxvert, status );
-}
-
-
diff --git a/ast-5.3-1/polygon.h b/ast-5.3-1/polygon.h
deleted file mode 100644
index e469066..0000000
--- a/ast-5.3-1/polygon.h
+++ /dev/null
@@ -1,293 +0,0 @@
-#if !defined( POLYGON_INCLUDED ) /* Include this file only once */
-#define POLYGON_INCLUDED
-/*
-*+
-* Name:
-* polygon.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the Polygon class.
-
-* Invocation:
-* #include "polygon.h"
-
-* Description:
-* This include file defines the interface to the Polygon class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The Polygon class implements a Region which represents a collection
-* of points in a Frame.
-
-* Inheritance:
-* The Polygon class inherits from the Region class.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 26-OCT-2004 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "frame.h" /* Coordinate systems */
-#include "region.h" /* Coordinate regions (parent class) */
-#include "timeframe.h" /* For AST__LT definition */
-
-#if defined(astCLASS) /* Protected */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Flags used to indicate how astOutline<X> should define the pixel
- region to be outlined. We omit AST__LT here since it is defined in
- timeframe.h (with value 11). */
-#define AST__LE 2
-#define AST__EQ 3
-#define AST__GE 4
-#define AST__GT 5
-#define AST__NE 6
-
-/* Type Definitions. */
-/* ================= */
-/* Polygon structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstPolygon {
-
-/* Attributes inherited from the parent class. */
- AstRegion region; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- double in[2]; /* A point which is inside the polygon */
- double lbnd[2]; /* Lower axis limits of bounding box */
- double ubnd[2]; /* Upper axis limits of bounding box */
- AstLineDef **edges; /* Cached description of edges */
- double *startsat; /* Perimeter distance to each vertex */
- double totlen; /* Total perimeter distance round polygon */
- int acw; /* Are vertices stored in anti-clockwise order? */
- int stale; /* Is cached information stale? */
-} AstPolygon;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstPolygonVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstRegionVtab region_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- AstPolygon *(* Downsize)( AstPolygon *, double, int, int * );
-
-} AstPolygonVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstPolygonGlobals {
- AstPolygonVtab Class_Vtab;
- int Class_Init;
-} AstPolygonGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitPolygonGlobals_( AstPolygonGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Polygon) /* Check class membership */
-astPROTO_ISA(Polygon) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstPolygon *astPolygon_( void *, int, int, const double *, AstRegion *, const char *, int *, ...);
-#else
-AstPolygon *astPolygonId_( void *, int, int, const double *, AstRegion *, const char *, ... )__attribute__((format(printf,6,7)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstPolygon *astInitPolygon_( void *, size_t, int, AstPolygonVtab *, const char *, AstFrame *, int, int, const double *, AstRegion *, int * );
-
-/* Vtab initialiser. */
-void astInitPolygonVtab_( AstPolygonVtab *, const char *, int * );
-
-/* Loader. */
-AstPolygon *astLoadPolygon_( void *, size_t, AstPolygonVtab *,
- const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-AstPolygon *astDownsize_( AstPolygon *, double, int, int * );
-
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-AstPolygon *astOutlineLD_( long double, int,long double[], int[2], int[2], double, int, int[2], int, int * );
-#endif
-AstPolygon *astOutlineB_( signed char, int, signed char[], int[2], int[2], double, int, int[2], int, int * );
-AstPolygon *astOutlineD_( double, int, double[], int[2], int[2], double, int, int[2], int, int * );
-AstPolygon *astOutlineF_( float, int, float[], int[2], int[2], double, int, int[2], int, int * );
-AstPolygon *astOutlineI_( int, int, int[], int[2], int[2], double, int, int[2], int, int * );
-AstPolygon *astOutlineL_( long int, int, long int[], int[2], int[2], double, int, int[2], int, int * );
-AstPolygon *astOutlineS_( short int, int, short int[], int[2], int[2], double, int, int[2], int, int * );
-AstPolygon *astOutlineUB_( unsigned char, int, unsigned char[], int[2], int[2], double, int, int[2], int, int * );
-AstPolygon *astOutlineUI_( unsigned int, int, unsigned int[], int[2], int[2], double, int, int[2], int, int * );
-AstPolygon *astOutlineUL_( unsigned long int, int, unsigned long int[], int[2], int[2], double, int, int[2], int, int * );
-AstPolygon *astOutlineUS_( unsigned short int, int, unsigned short int[], int[2], int[2], double, int, int[2], int, int * );
-
-# if defined(astCLASS) /* Protected */
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckPolygon(this) astINVOKE_CHECK(Polygon,this,0)
-#define astVerifyPolygon(this) astINVOKE_CHECK(Polygon,this,1)
-
-/* Test class membership. */
-#define astIsAPolygon(this) astINVOKE_ISA(Polygon,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astPolygon astINVOKE(F,astPolygon_)
-#else
-#define astPolygon astINVOKE(F,astPolygonId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitPolygon(mem,size,init,vtab,name,frame,npnt,indim,points,unc) \
-astINVOKE(O,astInitPolygon_(mem,size,init,vtab,name,frame,npnt,indim,points,unc,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitPolygonVtab(vtab,name) astINVOKE(V,astInitPolygonVtab_(vtab,name,STATUS_PTR))
-
-/* Loader. */
-#define astLoadPolygon(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadPolygon_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckPolygon to validate Polygon pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#define astDownsize(this,maxerr,maxvert) \
-astINVOKE(O,astDownsize_(astCheckPolygon(this),maxerr,maxvert,STATUS_PTR))
-
-
-
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-#define astOutlineLD(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix) \
-astINVOKE(O,astOutlineLD_(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix,STATUS_PTR))
-#endif
-
-#define astOutlineB(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix) \
-astINVOKE(O,astOutlineB_(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix,STATUS_PTR))
-#define astOutlineD(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix) \
-astINVOKE(O,astOutlineD_(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix,STATUS_PTR))
-#define astOutlineF(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix) \
-astINVOKE(O,astOutlineF_(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix,STATUS_PTR))
-#define astOutlineI(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix) \
-astINVOKE(O,astOutlineI_(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix,STATUS_PTR))
-#define astOutlineL(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix) \
-astINVOKE(O,astOutlineL_(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix,STATUS_PTR))
-#define astOutlineS(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix) \
-astINVOKE(O,astOutlineS_(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix,STATUS_PTR))
-#define astOutlineUB(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix) \
-astINVOKE(O,astOutlineUB_(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix,STATUS_PTR))
-#define astOutlineUI(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix) \
-astINVOKE(O,astOutlineUI_(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix,STATUS_PTR))
-#define astOutlineUL(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix) \
-astINVOKE(O,astOutlineUL_(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix,STATUS_PTR))
-#define astOutlineUS(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix) \
-astINVOKE(O,astOutlineUS_(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix,STATUS_PTR))
-
-#if defined(astCLASS) /* Protected */
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/polymap.c b/ast-5.3-1/polymap.c
deleted file mode 100644
index 224906f..0000000
--- a/ast-5.3-1/polymap.c
+++ /dev/null
@@ -1,2272 +0,0 @@
-/*
-*class++
-* Name:
-* PolyMap
-
-* Purpose:
-* Map coordinates using polynomial functions.
-
-* Constructor Function:
-c astPolyMap
-f AST_POLYMAP
-
-* Description:
-* A PolyMap is a form of Mapping which performs a general polynomial
-* transformation. Each output coordinate is a polynomial function of
-* all the input coordinates. The coefficients are specified separately
-* for each output coordinate. The forward and inverse transformations
-* are defined independantly by separate sets of coefficients.
-
-* Inheritance:
-* The PolyMap class inherits from the Mapping class.
-
-* Attributes:
-* The PolyMap class does not define any new attributes beyond
-* those which are applicable to all Mappings.
-
-* Functions:
-c The PolyMap class does not define any new functions beyond those
-f The PolyMap class does not define any new routines beyond those
-* which are applicable to all Mappings.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-
-* History:
-* 27-SEP-2003 (DSB):
-* Original version.
-* 13-APR-2005 (DSB):
-* Changed the keys used by the Dump/astLoadPolyMap functions. They
-* used to exceed 8 characters and consequently caused problems for
-* FitsChans.
-* 20-MAY-2005 (DSB):
-* Correct the indexing of keywords produced in the Dump function.
-* 20-APR-2006 (DSB):
-* Guard against undefined transformations in Copy.
-* 10-MAY-2006 (DSB):
-* Override astEqual.
-* 4-JUL-2008 (DSB):
-* Fixed loop indexing problems in Equal function.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS PolyMap
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
-compare bad values directory because of the danger of floating point
-exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-#include "polymap.h" /* Interface definition for this class */
-#include "unitmap.h" /* Unit mappings */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(PolyMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(PolyMap,Class_Init)
-#define class_vtab astGLOBAL(PolyMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstPolyMapVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstPolyMap *astPolyMapId_( int, int, int, const double[], int, const double[], const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *obj, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static void FreeArrays( AstPolyMap *, int, int * );
-
-/* Member functions. */
-/* ================= */
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two PolyMaps are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "polymap.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* PolyMap member function (over-rides the astEqual protected
-* method inherited from the astMapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two PolyMaps are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Object (a PolyMap).
-* that
-* Pointer to the second Object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the PolyMaps are equivalent, zero otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstPolyMap *that;
- AstPolyMap *this;
- int i, j, k;
- int nin;
- int nout;
- int result;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain pointers to the two PolyMap structures. */
- this = (AstPolyMap *) this_object;
- that = (AstPolyMap *) that_object;
-
-/* Check the second object is a PolyMap. We know the first is a
- PolyMap since we have arrived at this implementation of the virtual
- function. */
- if( astIsAPolyMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
- nin = astGetNin( this );
- nout = astGetNout( this );
- if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two PolyMaps differ, it may still be possible
- for them to be equivalent. First compare the PolyMaps if their Invert
- flags are the same. In this case all the attributes of the two PolyMaps
- must be identical. */
- if( astGetInvert( this ) == astGetInvert( that ) ) {
-
- result = 1;
-
- for( i = 0; i < nout && result; i++ ) {
- if( this->ncoeff_f[ i ] != that->ncoeff_f[ i ] ||
- this->mxpow_i[ i ] != that->mxpow_i[ i ] ) {
- result = 0;
- }
- }
-
-
- if( this->coeff_f && that->coeff_f ) {
- for( i = 0; i < nout && result; i++ ) {
- for( j = 0; j < this->ncoeff_f[ i ] && result; j++ ) {
- if( !EQUAL( this->coeff_f[ i ][ j ],
- that->coeff_f[ i ][ j ] ) ) {
- result = 0;
- }
- }
- }
- }
-
- if( this->power_f && that->power_f ) {
- for( i = 0; i < nout && result; i++ ) {
- for( j = 0; j < this->ncoeff_f[ i ] && result; j++ ) {
- for( k = 0; k < nin && result; k++ ) {
- if( !EQUAL( this->power_f[ i ][ j ][ k ],
- that->power_f[ i ][ j ][ k ] ) ) {
- result = 0;
- }
- }
- }
- }
- }
-
- for( i = 0; i < nin && result; i++ ) {
- if( this->ncoeff_i[ i ] != that->ncoeff_i[ i ] ||
- this->mxpow_f[ i ] != that->mxpow_f[ i ] ) {
- result = 0;
- }
- }
-
-
- if( this->coeff_i && that->coeff_i ) {
- for( i = 0; i < nin && result; i++ ) {
- for( j = 0; j < this->ncoeff_i[ i ] && result; j++ ) {
- if( !EQUAL( this->coeff_i[ i ][ j ],
- that->coeff_i[ i ][ j ] ) ) {
- result = 0;
- }
- }
- }
- }
-
- if( this->power_i && that->power_i ) {
- for( i = 0; i < nin && result; i++ ) {
- for( j = 0; j < this->ncoeff_i[ i ] && result; j++ ) {
- for( k = 0; k < nout && result; k++ ) {
- if( !EQUAL( this->power_i[ i ][ j ][ k ],
- that->power_i[ i ][ j ][ k ] ) ) {
- result = 0;
- }
- }
- }
- }
- }
-
-/* If the Invert flags for the two PolyMaps differ, the attributes of the two
- PolyMaps must be inversely related to each other. */
- } else {
-
-/* In the specific case of a PolyMap, Invert flags must be equal. */
- result = 0;
-
- }
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static void FreeArrays( AstPolyMap *this, int forward, int *status ) {
-/*
-* Name:
-* FreeArrays
-
-* Purpose:
-* Free the dynamic arrays contained within a PolyMap
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void FreeArrays( AstPolyMap *this, int forward, int *status )
-
-* Description:
-* This function frees all the dynamic arrays allocated as part of a
-* PolyMap.
-
-* Parameters:
-* this
-* Pointer to the PolyMap.
-* forward
-* If non-zero, the arrays for the forward transformation are freed.
-* Otherwise, the arrays for the inverse transformation are freed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- int nin; /* Number of inputs */
- int nout; /* Number of outputs */
- int i; /* Loop count */
- int j; /* Loop count */
-
-/* Get the number of inputs and outputs of the uninverted Mapping. */
- nin = ( (AstMapping *) this )->nin;
- nout = ( (AstMapping *) this )->nout;
-
-/* Free the dynamic arrays for the forward transformation. */
- if( forward ) {
-
- if( this->coeff_f ) {
- for( i = 0; i < nout; i++ ) {
- this->coeff_f[ i ] = astFree( this->coeff_f[ i ] );
- }
- this->coeff_f = astFree( this->coeff_f );
- }
-
- if( this->power_f ) {
- for( i = 0; i < nout; i++ ) {
- if( this->ncoeff_f && this->power_f[ i ] ) {
- for( j = 0; j < this->ncoeff_f[ i ]; j++ ) {
- this->power_f[ i ][ j ] = astFree( this->power_f[ i ][ j ] );
- }
- }
- this->power_f[ i ] = astFree( this->power_f[ i ] );
- }
- this->power_f = astFree( this->power_f );
- }
-
- this->ncoeff_f = astFree( this->ncoeff_f );
- this->mxpow_f = astFree( this->mxpow_f );
-
-/* Free the dynamic arrays for the inverse transformation. */
- } else {
-
- if( this->coeff_i ) {
- for( i = 0; i < nin; i++ ) {
- this->coeff_i[ i ] = astFree( this->coeff_i[ i ] );
- }
- this->coeff_i = astFree( this->coeff_i );
- }
-
- if(this->power_i ) {
- for( i = 0; i < nin; i++ ) {
- if( this->ncoeff_i && this->power_i[ i ] ) {
- for( j = 0; j < this->ncoeff_i[ i ]; j++ ) {
- this->power_i[ i ][ j ] = astFree( this->power_i[ i ][ j ] );
- }
- }
- this->power_i[ i ] = astFree( this->power_i[ i ] );
- }
- this->power_i = astFree( this->power_i );
- }
-
- this->ncoeff_i = astFree( this->ncoeff_i );
- this->mxpow_i = astFree( this->mxpow_i );
- }
-}
-
-void astInitPolyMapVtab_( AstPolyMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitPolyMapVtab
-
-* Purpose:
-* Initialise a virtual function table for a PolyMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "polymap.h"
-* void astInitPolyMapVtab( AstPolyMapVtab *vtab, const char *name )
-
-* Class Membership:
-* PolyMap vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the PolyMap class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAPolyMap) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
-/* (none) */
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- object->Equal = Equal;
- mapping->MapMerge = MapMerge;
-
-/* Declare the destructor and copy constructor. */
- astSetDelete( (AstObjectVtab *) vtab, Delete );
- astSetCopy( (AstObjectVtab *) vtab, Copy );
-
-/* Declare the class dump function. */
- astSetDump( vtab, Dump, "PolyMap", "Polynomial transformation" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a PolyMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* PolyMap method (over-rides the protected astMapMerge method
-* inherited from the Mapping class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated PolyMap in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated PolyMap with a Mapping which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated PolyMap which is to be merged with
-* its neighbours. This should be a cloned copy of the PolyMap
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* PolyMap it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated PolyMap resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstPolyMap *pmap0; /* Nominated PolyMap */
- AstPolyMap *pmap1; /* Neighbouring PolyMap */
- int i; /* Index of neighbour */
- int iax_in; /* Index of input coordinate */
- int iax_out; /* Index of output coordinate */
- int ico; /* Index of coefficient */
- int inv0; /* Supplied Invert flag for nominated PolyMap */
- int inv1; /* Supplied Invert flag for neighbouring PolyMap */
- int nc; /* Number of coefficients */
- int nin; /* Number of input coordinates for nominated PolyMap */
- int nout; /* Number of output coordinates for nominated PolyMap */
- int ok; /* Are PolyMaps equivalent? */
- int result; /* Result value to return */
- int swap0; /* Swap inputs and outputs for nominated PolyMap? */
- int swap1; /* Swap inputs and outputs for neighbouring PolyMap? */
-
-/* Initialise. */
- result = -1;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Save a pointer to the nominated PolyMap. */
- pmap0 = (AstPolyMap *) ( *map_list )[ where ];
-
-/* The only simplification which can currently be performed is to merge a PolyMap
- with its own inverse. This can only be done in series. Obviously,
- there are potentially other simplications which could be performed, but
- time does not currently allow these to be coded. */
- if( series ) {
-
-/* Set a flag indicating if "input" and "output" needs to be swapped for
- the nominated PolyMap. */
- inv0 = ( *invert_list )[ where ];
- swap0 = ( inv0 != astGetInvert( pmap0 ) );
-
-/* Get the number of inputs and outputs to the nominated PolyMap. */
- nin = !swap0 ? astGetNin( pmap0 ) : astGetNout( pmap0 );
- nout = !swap0 ? astGetNout( pmap0 ) : astGetNin( pmap0 );
-
-/* Check each neighbour. */
- for( i = where - 1; i <= where + 1; i += 2 ) {
-
-/* Continue with the next pass if the neighbour does not exist. */
- if( i < 0 || i >= *nmap ) continue;
-
-/* Continue with the next pass if this neighbour is not a PermMap. */
- if( strcmp( "PolyMap", astGetClass( ( *map_list )[ i ] ) ) ) continue;
-
-/* Get a pointer to it. */
- pmap1 = (AstPolyMap *) ( *map_list )[ i ];
-
-/* Check it is used in the opposite direction to the nominated PolyMap. */
- if( ( *invert_list )[ i ] == ( *invert_list )[ where ] ) continue;
-
-/* Set a flag indicating if "input" and "output" needs to be swapped for
- the neighbouring PolyMap. */
- inv1 = ( *invert_list )[ i ];
- swap1 = ( inv1 != astGetInvert( pmap1 ) );
-
-/* Check the number of inputs and outputs are equal to the nominated
- PolyMap. */
- if( astGetNin( pmap1 ) != (!swap1 ? nin : nout ) &&
- astGetNout( pmap1 ) != (!swap1 ? nout : nin ) ) continue;
-
-/* Check the forward coefficients are equal. */
- ok = 1;
- for( iax_out = 0; iax_out < nout && ok; iax_out++ ) {
- nc = pmap1->ncoeff_f[ iax_out ];
- if( nc != pmap0->ncoeff_f[ iax_out ] ) continue;
-
- for( ico = 0; ico < nc && ok; ico++ ) {
-
- if( !EQUAL( pmap1->coeff_f[ iax_out ][ ico ],
- pmap0->coeff_f[ iax_out ][ ico ] ) ){
- ok = 0;
-
- } else {
- for( iax_in = 0; iax_in < nin && ok; iax_in++ ) {
- ok = ( pmap1->power_f[ iax_out ][ ico ][ iax_in ] ==
- pmap0->power_f[ iax_out ][ ico ][ iax_in ] );
- }
- }
- }
- }
- if( !ok ) continue;
-
-/* Check the inverse coefficients are equal. */
- ok = 1;
- for( iax_in = 0; iax_in < nin && ok; iax_in++ ) {
- nc = pmap1->ncoeff_i[ iax_in ];
- if( nc != pmap0->ncoeff_i[ iax_in ] ) continue;
-
- for( ico = 0; ico < nc && ok; ico++ ) {
-
- if( !EQUAL( pmap1->coeff_i[ iax_in ][ ico ],
- pmap0->coeff_i[ iax_in ][ ico ] ) ){
- ok = 0;
-
- } else {
- for( iax_out = 0; iax_out < nout && ok; iax_out++ ) {
- ok = ( pmap1->power_i[ iax_in ][ ico ][ iax_out ] ==
- pmap0->power_i[ iax_in ][ ico ][ iax_out ] );
- }
- }
- }
- }
- if( !ok ) continue;
-
-/* If we get this far, then the nominated PolyMap and the current
- neighbour cancel each other out, so replace each by a UnitMap. */
- (void) astAnnul( pmap0 );
- (void) astAnnul( pmap1 );
- if( i < where ) {
- ( *map_list )[ where ] = (AstMapping *) astUnitMap( nout, "", status );
- ( *map_list )[ i ] = (AstMapping *) astUnitMap( nout, "", status );
- ( *invert_list )[ where ] = 0;
- ( *invert_list )[ i ] = 0;
- result = i;
- } else {
- ( *map_list )[ where ] = (AstMapping *) astUnitMap( nin, "", status );
- ( *map_list )[ i ] = (AstMapping *) astUnitMap( nin, "", status );
- ( *invert_list )[ where ] = 0;
- ( *invert_list )[ i ] = 0;
- result = where;
- }
-
-/* Leave the loop. */
- break;
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a PolyMap to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "polymap.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* PolyMap member function (over-rides the astTransform protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function takes a PolyMap and a set of points encapsulated in a
-* PointSet and transforms the points.
-
-* Parameters:
-* this
-* Pointer to the PolyMap.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of columns in the PolyMap being applied.
-* - The number of coordinate values per point in the output PointSet will
-* equal the number of rows in the PolyMap being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstPointSet *result; /* Pointer to output PointSet */
- AstPolyMap *map; /* Pointer to PolyMap to be applied */
- double **coeff; /* Pointer to coefficient value arrays */
- double **ptr_in; /* Pointer to input coordinate data */
- double **ptr_out; /* Pointer to output coordinate data */
- double **work; /* Pointer to exponentiated axis values */
- double *outcof; /* Pointer to next coefficient value */
- double *pwork; /* Pointer to exponentiated axis values */
- double outval; /* Output axis value */
- double term; /* Term to be added to output value */
- double x; /* Input axis value */
- double xp; /* Exponentiated input axis value */
- int ***power; /* Pointer to coefficient power arrays */
- int **outpow; /* Pointer to next set of axis powers */
- int *mxpow; /* Pointer to max used power for each input */
- int *ncoeff; /* Pointer to no. of coefficients */
- int in_coord; /* Index of output coordinate */
- int ico; /* Coefficient index */
- int ip; /* Axis power */
- int nc; /* No. of coefficients in polynomial */
- int ncoord_in; /* Number of coordinates per input point */
- int ncoord_out; /* Number of coordinates per output point */
- int npoint; /* Number of points */
- int out_coord; /* Index of output coordinate */
- int point; /* Loop counter for points */
- int pow; /* Next axis power */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the PolyMap. */
- map = (AstPolyMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Mapping class. This function validates
- all arguments and generates an output PointSet if necessary, but does not
- actually transform any coordinate values. */
- result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
- and output PointSets and obtain pointers for accessing the input and
- output coordinate values. */
- ncoord_in = astGetNcoord( in );
- ncoord_out = astGetNcoord( result );
- npoint = astGetNpoint( in );
- ptr_in = astGetPoints( in );
- ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse mapping, according to the
- direction specified and whether the mapping has been inverted. */
- if ( astGetInvert( map ) ) forward = !forward;
-
-/* Get a pointer to the arrays holding the required coefficient values
- and powers, according to the direction of mapping required. */
- if ( forward ) {
- ncoeff = map->ncoeff_f;
- coeff = map->coeff_f;
- power = map->power_f;
- mxpow = map->mxpow_f;
- } else {
- ncoeff = map->ncoeff_i;
- coeff = map->coeff_i;
- power = map->power_i;
- mxpow = map->mxpow_i;
- }
-
-/* Allocate memory to hold the required powers of the input axis values. */
- work = astMalloc( sizeof( double * )*(size_t) ncoord_in );
- for( in_coord = 0; in_coord < ncoord_in; in_coord++ ) {
- work[ in_coord ] = astMalloc( sizeof( double )*(size_t) ( mxpow[ in_coord ] + 1 ) );
- }
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
- if ( astOK ) {
-
-/* Loop to apply the polynomial to each point in turn.*/
- for ( point = 0; point < npoint; point++ ) {
-
-/* Find the required powers of the input axis values and store them in
- the work array. */
- for( in_coord = 0; in_coord < ncoord_in; in_coord++ ) {
- pwork = work[ in_coord ];
- pwork[ 0 ] = 1.0;
- x = ptr_in[ in_coord ][ point ];
- if( x == AST__BAD ) {
- for( ip = 1; ip <= mxpow[ in_coord ]; ip++ ) pwork[ ip ] = AST__BAD;
- } else {
- for( ip = 1; ip <= mxpow[ in_coord ]; ip++ ) {
- pwork[ ip ] = pwork[ ip - 1 ]*x;
- }
- }
- }
-
-/* Loop round each output. */
- for( out_coord = 0; out_coord < ncoord_out; out_coord++ ) {
-
-/* Initialise the output value. */
- outval = 0.0;
-
-/* Get pointers to the coefficients and powers for this output. */
- outcof = coeff[ out_coord ];
- outpow = power[ out_coord ];
-
-/* Loop round all polynomial coefficients.*/
- nc = ncoeff[ out_coord ];
- for ( ico = 0; ico < nc && outval != AST__BAD;
- ico++, outcof++, outpow++ ) {
-
-/* Initialise the current term to be equal to the value of the coefficient.
- If it is bad, store a bad output value. */
- term = *outcof;
- if( term == AST__BAD ) {
- outval = AST__BAD;
-
-/* Otherwise, loop round all inputs */
- } else {
- for( in_coord = 0; in_coord < ncoord_in; in_coord++ ) {
-
-/* Get the power of the current input axis value used by the current
- coefficient. If it is zero, pass on. */
- pow = (*outpow)[ in_coord ];
- if( pow > 0 ) {
-
-/* Get the axis value raised to the appropriate power. */
- xp = work[ in_coord ][ pow ];
-
-/* If bad, set the output value bad and break. */
- if( xp == AST__BAD ) {
- outval = AST__BAD;
- break;
-
-/* Otherwise multiply the current term by the exponentiated axis value. */
- } else {
- term *= xp;
- }
- }
- }
- }
-
-/* Increment the output value by the current term of the polynomial. */
- outval += term;
-
- }
-
-/* Store the output value. */
- ptr_out[ out_coord ][ point ] = outval;
-
- }
- }
- }
-
-/* Free resources. */
- for( in_coord = 0; in_coord < ncoord_in; in_coord++ ) {
- work[ in_coord ] = astFree( work[ in_coord ] );
- }
- work = astFree( work );
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for PolyMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for PolyMap objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - This constructor makes a deep copy, including a copy of the
-* coefficients associated with the input PolyMap.
-*/
-
-
-/* Local Variables: */
- AstPolyMap *in; /* Pointer to input PolyMap */
- AstPolyMap *out; /* Pointer to output PolyMap */
- int nin; /* No. of input coordinates */
- int nout; /* No. of output coordinates */
- int i; /* Loop count */
- int j; /* Loop count */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output PolyMaps. */
- in = (AstPolyMap *) objin;
- out = (AstPolyMap *) objout;
-
-/* Nullify the pointers stored in the output object since these will
- currently be pointing at the input data (since the output is a simple
- byte-for-byte copy of the input). Otherwise, the input data could be
- freed by accidient if the output object is deleted due to an error
- occuring in this function. */
- out->ncoeff_f = NULL;
- out->power_f = NULL;
- out->coeff_f = NULL;
- out->mxpow_f = NULL;
-
- out->ncoeff_i = NULL;
- out->power_i = NULL;
- out->coeff_i = NULL;
- out->mxpow_i = NULL;
-
-/* Get the number of inputs and outputs of the uninverted Mapping. */
- nin = ( (AstMapping *) in )->nin;
- nout = ( (AstMapping *) in )->nout;
-
-/* Copy the number of coefficients associated with each output of the forward
- transformation. */
- if( in->ncoeff_f ) {
- out->ncoeff_f = (int *) astStore( NULL, (void *) in->ncoeff_f,
- sizeof( int )*(size_t) nout );
-
-/* Copy the maximum power of each input axis value used by the forward
- transformation. */
- out->mxpow_f = (int *) astStore( NULL, (void *) in->mxpow_f,
- sizeof( int )*(size_t) nin );
-
-/* Copy the coefficient values used by the forward transformation. */
- if( in->coeff_f ) {
- out->coeff_f = astMalloc( sizeof( double * )*(size_t) nout );
- if( astOK ) {
- for( i = 0; i < nout; i++ ) {
- out->coeff_f[ i ] = (double *) astStore( NULL, (void *) in->coeff_f[ i ],
- sizeof( double )*(size_t) in->ncoeff_f[ i ] );
- }
- }
- }
-
-/* Copy the input axis powers associated with each coefficient of the forward
- transformation. */
- if( in->power_f ) {
- out->power_f = astMalloc( sizeof( int ** )*(size_t) nout );
- if( astOK ) {
- for( i = 0; i < nout; i++ ) {
- out->power_f[ i ] = astMalloc( sizeof( int * )*(size_t) in->ncoeff_f[ i ] );
- if( astOK ) {
- for( j = 0; j < in->ncoeff_f[ i ]; j++ ) {
- out->power_f[ i ][ j ] = (int *) astStore( NULL, (void *) in->power_f[ i ][ j ],
- sizeof( int )*(size_t) nin );
- }
- }
- }
- }
- }
- }
-
-/* Do the same for the inverse transformation. */
- if( in->ncoeff_i ) {
- out->ncoeff_i = (int *) astStore( NULL, (void *) in->ncoeff_i,
- sizeof( int )*(size_t) nin );
-
- out->mxpow_i = (int *) astStore( NULL, (void *) in->mxpow_i,
- sizeof( int )*(size_t) nout );
-
- if( in->coeff_i ) {
- out->coeff_i = astMalloc( sizeof( double * )*(size_t) nin );
- if( astOK ) {
- for( i = 0; i < nin; i++ ) {
- out->coeff_i[ i ] = (double *) astStore( NULL, (void *) in->coeff_i[ i ],
- sizeof( double )*(size_t) in->ncoeff_i[ i ] );
- }
- }
- }
-
- if( in->power_i ) {
- out->power_i = astMalloc( sizeof( int ** )*(size_t) nin );
- if( astOK ) {
- for( i = 0; i < nin; i++ ) {
- out->power_i[ i ] = astMalloc( sizeof( int * )*(size_t) in->ncoeff_i[ i ] );
- if( astOK ) {
- for( j = 0; j < in->ncoeff_i[ i ]; j++ ) {
- out->power_i[ i ][ j ] = (int *) astStore( NULL, (void *) in->power_i[ i ][ j ],
- sizeof( int )*(size_t) nout );
- }
- }
- }
- }
- }
- }
-
-/* If an error has occurred, free the output arrays. */
- if( !astOK ) {
- FreeArrays( out, 1, status );
- FreeArrays( out, 0, status );
- }
-
- return;
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for PolyMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for PolyMap objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstPolyMap *this; /* Pointer to PolyMap */
-
-/* Obtain a pointer to the PolyMap structure. */
- this = (AstPolyMap *) obj;
-
-/* Free the arrays. */
- FreeArrays( this, 1, status );
- FreeArrays( this, 0, status );
-
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for PolyMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the PolyMap class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the PolyMap whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstPolyMap *this; /* Pointer to the PolyMap structure */
- char buff[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- char comm[ 100 ]; /* Buffer for comment string */
- int i; /* Loop index */
- int iv; /* Vectorised keyword index */
- int j; /* Loop index */
- int k; /* Loop index */
- int nin; /* No. of input coords */
- int nout; /* No. of output coords */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the PolyMap structure. */
- this = (AstPolyMap *) this_object;
-
-/* Find the number of inputs and outputs of the uninverted Mapping. */
- nin = ( (AstMapping *) this )->nin;
- nout = ( (AstMapping *) this )->nout;
-
-/* Write out values representing the instance variables for the
- PolyMap class. */
-
-/* First do the forward transformation arrays. Check they are used. */
- if( this->ncoeff_f ) {
-
-/* Store the maximum power of each input axis value used by the forward
- transformation. */
- for( i = 0; i < nin; i++ ){
- (void) sprintf( buff, "MPF%d", i + 1 );
- (void) sprintf( comm, "Max. power of input %d in any forward polynomial", i + 1 );
- astWriteInt( channel, buff, 1, 1, (this->mxpow_f)[ i ], comm );
- }
-
-/* Store the number of coefficients associated with each output of the forward
- transformation. */
- for( i = 0; i < nout; i++ ){
- (void) sprintf( buff, "NCF%d", i + 1 );
- (void) sprintf( comm, "No. of coeff.s for forward polynomial %d", i + 1 );
- astWriteInt( channel, buff, 1, 1, (this->ncoeff_f)[ i ], comm );
- }
-
-/* Store the coefficient values used by the forward transformation. */
- iv = 1;
- for( i = 0; i < nout; i++ ){
- for( j = 0; j < this->ncoeff_f[ i ]; j++, iv++ ){
- if( (this->coeff_f)[ i ][ j ] != AST__BAD ) {
- (void) sprintf( buff, "CF%d", iv );
- (void) sprintf( comm, "Coeff %d of forward polynomial %d", j + 1, i + 1 );
- astWriteDouble( channel, buff, 1, 1, (this->coeff_f)[ i ][ j ], comm );
- }
- }
- }
-
-/* Store the input axis powers associated with each coefficient of the forward
- transformation. */
- iv = 1;
- for( i = 0; i < nout; i++ ){
- for( j = 0; j < this->ncoeff_f[ i ]; j++ ){
- for( k = 0; k < nin; k++, iv++ ){
- if( (this->power_f)[ i ][ j ][ k ] > 0 ) {
- (void) sprintf( buff, "PF%d", iv );
- (void) sprintf( comm, "Power of i/p %d for coeff %d of fwd poly %d", k + 1, j + 1, i + 1 );
- astWriteDouble( channel, buff, 1, 1, (this->power_f)[ i ][ j ][ k ], comm );
- }
- }
- }
- }
- }
-
-/* Now do the inverse transformation arrays. Check they are used. */
- if( this->ncoeff_i ) {
-
-/* Store the maximum power of each output axis value used by the inverse
- transformation. */
- for( i = 0; i < nout; i++ ){
- (void) sprintf( buff, "MPI%d", i + 1 );
- (void) sprintf( comm, "Max. power of output %d in any inverse polynomial", i + 1 );
- astWriteInt( channel, buff, 1, 1, (this->mxpow_i)[ i ], comm );
- }
-
-/* Store the number of coefficients associated with each input of the inverse
- transformation. */
- for( i = 0; i < nin; i++ ){
- (void) sprintf( buff, "NCI%d", i + 1 );
- (void) sprintf( comm, "No. of coeff.s for inverse polynomial %d", i + 1 );
- astWriteInt( channel, buff, 1, 1, (this->ncoeff_i)[ i ], comm );
- }
-
-/* Store the coefficient values used by the inverse transformation. */
- iv = 1;
- for( i = 0; i < nin; i++ ){
- for( j = 0; j < this->ncoeff_i[ i ]; j++, iv++ ){
- if( (this->coeff_i)[ i ][ j ] != AST__BAD ) {
- (void) sprintf( buff, "CI%d", iv );
- (void) sprintf( comm, "Coeff %d of inverse polynomial %d", j + 1, i + 1 );
- astWriteDouble( channel, buff, 1, 1, (this->coeff_i)[ i ][ j ], comm );
- }
- }
- }
-
-/* Store the output axis powers associated with each coefficient of the inverse
- transformation. */
- iv = 1;
- for( i = 0; i < nin; i++ ){
- for( j = 0; j < this->ncoeff_i[ i ]; j++ ){
- for( k = 0; k < nout; k++, iv++ ){
- if( (this->power_i)[ i ][ j ][ k ] > 0 ) {
- (void) sprintf( buff, "PI%d", iv );
- (void) sprintf( comm, "Power of o/p %d for coeff %d of inv poly %d", k + 1, j + 1, i + 1 );
- astWriteDouble( channel, buff, 1, 1, (this->power_i)[ i ][ j ][ k ], comm );
- }
- }
- }
- }
- }
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAPolyMap and astCheckPolyMap functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(PolyMap,Mapping)
-astMAKE_CHECK(PolyMap)
-
-AstPolyMap *astPolyMap_( int nin, int nout, int ncoeff_f, const double coeff_f[],
- int ncoeff_i, const double coeff_i[], const char *options, int *status, ...){
-/*
-*++
-* Name:
-c astPolyMap
-f AST_POLYMAP
-
-* Purpose:
-* Create a PolyMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "polymap.h"
-c AstPolyMap *astPolyMap( int nin, int nout, int ncoeff_f, const double coeff_f[],
-c int ncoeff_i, const double coeff_i[],
-c const char *options, ... )
-f RESULT = AST_POLYMAP( NIN, NOUT, NCOEFF_F, COEFF_F, NCOEFF_I, COEFF_I,
-f OPTIONS, STATUS )
-
-* Class Membership:
-* PolyMap constructor.
-
-* Description:
-* This function creates a new PolyMap and optionally initialises
-* its attributes.
-*
-* A PolyMap is a form of Mapping which performs a general polynomial
-* transformation. Each output coordinate is a polynomial function of
-* all the input coordinates. The coefficients are specified separately
-* for each output coordinate. The forward and inverse transformations
-* are defined independantly by separate sets of coefficients.
-
-* Parameters:
-c nin
-f NIN = INTEGER (Given)
-* The number of input coordinates.
-c nout
-f NOUT = INTEGER (Given)
-* The number of output coordinates.
-c ncoeff_f
-f NCOEFF_F = INTEGER (Given)
-* The number of non-zero coefficients necessary to define the
-* forward transformation of the PolyMap. If zero is supplied, the
-* forward transformation will be undefined.
-c coeff_f
-f COEFF_F( * ) = DOUBLE PRECISION (Given)
-* An array containing
-c "ncoeff_f*( 2 + nin )" elements. Each group of "2 + nin"
-f "NCOEFF_F*( 2 + NIN )" elements. Each group of "2 + NIN"
-* adjacent elements describe a single coefficient of the forward
-* transformation. Within each such group, the first element is the
-* coefficient value; the next element is the integer index of the
-* PolyMap output which uses the coefficient within its defining
-* polynomial (the first output has index 1); the remaining elements
-* of the group give the integer powers to use with each input
-* coordinate value (powers must not be negative, and floating
-* point values are rounded to the nearest integer).
-c If "ncoeff_f" is zero, a NULL pointer may be supplied for "coeff_f".
-*
-* For instance, if the PolyMap has 3 inputs and 2 outputs, each group
-* consisting of 5 elements, A groups such as "(1.2, 2.0, 1.0, 3.0, 0.0)"
-* describes a coefficient with value 1.2 which is used within the
-* definition of output 2. The output value is incremented by the
-* product of the coefficient value, the value of input coordinate
-* 1 raised to the power 1, and the value of input coordinate 2 raised
-* to the power 3. Input coordinate 3 is not used since its power is
-* specified as zero. As another example, the group "(-1.0, 1.0,
-* 0.0, 0.0, 0.0 )" describes adds a constant value -1.0 onto
-* output 1 (it is a constant value since the power for every input
-* axis is given as zero).
-*
-c Each final output coordinate value is the sum of the "ncoeff_f" terms
-c described by the "ncoeff_f" groups within the supplied array.
-f Each final output coordinate value is the sum of the "NCOEFF_F" terms
-f described by the "NCOEFF_F" groups within the supplied array.
-c ncoeff_i
-f NCOEFF_I = INTEGER (Given)
-* The number of non-zero coefficients necessary to define the
-* inverse transformation of the PolyMap. If zero is supplied, the
-* inverse transformation will be undefined.
-c coeff_i
-f COEFF_I( * ) = DOUBLE PRECISION (Given)
-* An array containing
-c "ncoeff_i*( 2 + nout )" elements. Each group of "2 + nout"
-f "NCOEFF_I*( 2 + NOUT )" elements. Each group of "2 + NOUT"
-* adjacent elements describe a single coefficient of the inverse
-c transformation, using the same schame as "coeff_f",
-f transformation, using the same schame as "COEFF_F",
-* except that "inputs" and "outputs" are transposed.
-c If "ncoeff_i" is zero, a NULL pointer may be supplied for "coeff_i".
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new PolyMap. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new PolyMap. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astPolyMap()
-f AST_POLYMAP = INTEGER
-* A pointer to the new PolyMap.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstPolyMap *new; /* Pointer to new PolyMap */
- va_list args; /* Variable argument list */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialise the PolyMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitPolyMap( NULL, sizeof( AstPolyMap ), !class_init,
- &class_vtab, "PolyMap", nin, nout,
- ncoeff_f, coeff_f, ncoeff_i, coeff_i );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new PolyMap's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new PolyMap. */
- return new;
-}
-
-AstPolyMap *astPolyMapId_( int nin, int nout, int ncoeff_f, const double coeff_f[],
- int ncoeff_i, const double coeff_i[], const char *options, ... ){
-/*
-* Name:
-* astPolyMapId_
-
-* Purpose:
-* Create a PolyMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "polymap.h"
-* AstPolyMap *astPolyMap( int nin, int nout, int ncoeff_f, const double coeff_f[],
-* int ncoeff_i, const double coeff_i[],
-* const char *options, ... )
-
-* Class Membership:
-* PolyMap constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astPolyMap constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astPolyMap_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astPolyMap_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astPolyMap_.
-
-* Returned Value:
-* The ID value associated with the new PolyMap.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstPolyMap *new; /* Pointer to new PolyMap */
- va_list args; /* Variable argument list */
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the PolyMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitPolyMap( NULL, sizeof( AstPolyMap ), !class_init,
- &class_vtab, "PolyMap", nin, nout,
- ncoeff_f, coeff_f, ncoeff_i, coeff_i );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new PolyMap's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new PolyMap. */
- return astMakeId( new );
-}
-
-AstPolyMap *astInitPolyMap_( void *mem, size_t size, int init,
- AstPolyMapVtab *vtab, const char *name,
- int nin, int nout, int ncoeff_f, const double coeff_f[],
- int ncoeff_i, const double coeff_i[], int *status ){
-/*
-*+
-* Name:
-* astInitPolyMap
-
-* Purpose:
-* Initialise a PolyMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "polymap.h"
-* AstPolyMap *astInitPolyMap( void *mem, size_t size, int init,
-* AstPolyMapVtab *vtab, const char *name,
-* int nin, int nout, int ncoeff_f,
-* const double coeff_f[], int ncoeff_i,
-* const double coeff_i[] )
-
-* Class Membership:
-* PolyMap initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new PolyMap object. It allocates memory (if necessary) to accommodate
-* the PolyMap plus any additional data associated with the derived class.
-* It then initialises a PolyMap structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a PolyMap at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the PolyMap is to be initialised.
-* This must be of sufficient size to accommodate the PolyMap data
-* (sizeof(PolyMap)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the PolyMap (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the PolyMap
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the PolyMap's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new PolyMap.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-* nin
-* The number of input coordinate values per point. This is the
-* same as the number of columns in the matrix.
-* nout
-* The number of output coordinate values per point. This is the
-* same as the number of rows in the matrix.
-* ncoeff_f
-* The number of non-zero coefficients necessary to define the
-* forward transformation of the PolyMap. If zero is supplied, the
-* forward transformation will be undefined.
-* coeff_f
-* An array containing "ncoeff_f*( 2 + nin )" elements. Each group
-* of "2 + nin" adjacent elements describe a single coefficient of
-* the forward transformation. Within each such group, the first
-* element is the coefficient value; the next element is the
-* integer index of the PolyMap output which uses the coefficient
-* within its defining polynomial (the first output has index 1);
-* the remaining elements of the group give the integer powers to
-* use with each input coordinate value (powers must not be
-* negative)
-*
-* For instance, if the PolyMap has 3 inputs and 2 outputs, each group
-* consisting of 5 elements, A groups such as "(1.2, 2.0, 1.0, 3.0, 0.0)"
-* describes a coefficient with value 1.2 which is used within the
-* definition of output 2. The output value is incremented by the
-* product of the coefficient value, the value of input coordinate
-* 1 raised to the power 1, and the value of input coordinate 2 raised
-* to the power 3. Input coordinate 3 is not used since its power is
-* specified as zero. As another example, the group "(-1.0, 1.0,
-* 0.0, 0.0, 0.0 )" describes adds a constant value -1.0 onto
-* output 1 (it is a constant value since the power for every input
-* axis is given as zero).
-*
-* Each final output coordinate value is the sum of the "ncoeff_f" terms
-* described by the "ncoeff_f" groups within the supplied array.
-* ncoeff_i
-* The number of non-zero coefficients necessary to define the
-* inverse transformation of the PolyMap. If zero is supplied, the
-* inverse transformation will be undefined.
-* coeff_i
-* An array containing
-* "ncoeff_i*( 2 + nout )" elements. Each group of "2 + nout"
-* adjacent elements describe a single coefficient of the inverse
-* transformation, using the same schame as "coeff_f", except that
-* "inputs" and "outputs" are transposed.
-
-* Returned Value:
-* A pointer to the new PolyMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstPolyMap *new; /* Pointer to new PolyMap */
- const double *group; /* Pointer to start of next coeff. description */
- int *pows; /* Pointer to powers for current coeff. */
- int i; /* Loop count */
- int ico; /* Index of next coeff. for current input or output */
- int iin; /* Input index extracted from coeff. description */
- int iout; /* Output index extracted from coeff. description */
- int j; /* Loop count */
- int pow; /* Power extracted from coeff. description */
- int gsize; /* Length of each coeff. description */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitPolyMapVtab( vtab, name );
-
-/* Initialise a Mapping structure (the parent class) as the first component
- within the PolyMap structure, allocating memory if necessary. Specify that
- the Mapping should be defined in both the forward and inverse directions. */
- new = (AstPolyMap *) astInitMapping( mem, size, 0,
- (AstMappingVtab *) vtab, name,
- nin, nout, (ncoeff_f > 0), (ncoeff_i > 0) );
- if ( astOK ) {
-
-/* Initialise the PolyMap data. */
-/* ---------------------------- */
-
-/* First initialise the pointers in case of errors. */
- new->ncoeff_f = NULL;
- new->power_f = NULL;
- new->coeff_f = NULL;
- new->mxpow_f = NULL;
-
- new->ncoeff_i = NULL;
- new->power_i = NULL;
- new->coeff_i = NULL;
- new->mxpow_i = NULL;
-
-/* Now initialise the forward transformation, if defined. */
- if( ncoeff_f > 0 ) {
-
-/* Create the arrays decribing the forward transformation. */
- new->ncoeff_f = astMalloc( sizeof( int )*(size_t) nout );
- new->mxpow_f = astMalloc( sizeof( int )*(size_t) nin );
- new->power_f = astMalloc( sizeof( int ** )*(size_t) nout );
- new->coeff_f = astMalloc( sizeof( double * )*(size_t) nout );
- if( astOK ) {
-
-/* Initialise the count of coefficients for each output coordinate to zero. */
- for( i = 0; i < nout; i++ ) new->ncoeff_f[ i ] = 0;
-
-/* Initialise max power for each input coordinate to zero. */
- for( j = 0; j < nin; j++ ) new->mxpow_f[ j ] = 0;
-
-/* Scan through the supplied forward coefficient array, counting the
- number of coefficients which relate to each output. Also find the
- highest power used for each input axis. Report errors if any unusable
- values are found in the supplied array. */
- group = coeff_f;
- gsize = 2 + nin;
- for( i = 0; i < ncoeff_f && astOK; i++, group += gsize ) {
-
- iout = floor( group[ 1 ] + 0.5 );
- if( iout < 1 || iout > nout ) {
- astError( AST__BADCI, "astInitPolyMap(%s): Forward "
- "coefficient %d referred to an illegal output "
- "coordinate %d.", status, name, i + 1, iout );
- astError( AST__BADCI, "This number should be in the "
- "range 1 to %d.", status, nout );
- break;
- }
-
- new->ncoeff_f[ iout - 1 ]++;
-
- for( j = 0; j < nin; j++ ) {
- pow = floor( group[ 2 + j ] + 0.5 );
- if( pow < 0 ) {
- astError( AST__BADPW, "astInitPolyMap(%s): Forward "
- "coefficient %d has a negative power (%d) "
- "for input coordinate %d.", status, name, i + 1, pow,
- j + 1 );
- astError( AST__BADPW, "All powers should be zero or "
- "positive." , status);
- break;
- }
- if( pow > new->mxpow_f[ j ] ) new->mxpow_f[ j ] = pow;
- }
- }
-
-/* Allocate the arrays to store the input powers associated with each
- coefficient, and the coefficient values. Reset the coefficient count
- for each axis to zero afterwards so that we can use the array as an index
- to the next vacant slot withint he following loop. */
- for( i = 0; i < nout; i++ ) {
- new->power_f[ i ] = astMalloc( sizeof( int * )*
- (size_t) new->ncoeff_f[ i ] );
- new->coeff_f[ i ] = astMalloc( sizeof( double )*
- (size_t) new->ncoeff_f[ i ] );
- new->ncoeff_f[ i ] = 0;
- }
-
- if( astOK ) {
-
-/* Extract the coefficient values and powers form the supplied array and
- store them in the arrays created above. */
- group = coeff_f;
- for( i = 0; i < ncoeff_f && astOK; i++, group += gsize ) {
- iout = floor( group[ 1 ] + 0.5 ) - 1;
- ico = ( new->ncoeff_f[ iout ] )++;
- new->coeff_f[ iout ][ ico ] = group[ 0 ];
-
- pows = astMalloc( sizeof( int )*(size_t) nin );
- new->power_f[ iout ][ ico ] = pows;
- if( astOK ) {
- for( j = 0; j < nin; j++ ) {
- pows[ j ] = floor( group[ 2 + j ] + 0.5 );
- }
- }
- }
- }
- }
- }
-
-/* Now initialise the inverse transformation, if defined. */
- if( ncoeff_i > 0 ) {
-
-/* Create the arrays decribing the inverse transformation. */
- new->ncoeff_i = astMalloc( sizeof( int )*(size_t) nin );
- new->mxpow_i = astMalloc( sizeof( int )*(size_t) nout );
- new->power_i = astMalloc( sizeof( int ** )*(size_t) nin );
- new->coeff_i = astMalloc( sizeof( double * )*(size_t) nin );
- if( astOK ) {
-
-/* Initialise the count of coefficients for each input coordinate to zero. */
- for( i = 0; i < nin; i++ ) new->ncoeff_i[ i ] = 0;
-
-/* Initialise max power for each output coordinate to zero. */
- for( j = 0; j < nout; j++ ) new->mxpow_i[ j ] = 0;
-
-/* Scan through the supplied inverse coefficient array, counting the
- number of coefficients which relate to each input. Also find the
- highest power used for each output axis. Report errors if any unusable
- values are found in the supplied array. */
- group = coeff_i;
- gsize = 2 + nout;
- for( i = 0; i < ncoeff_i && astOK; i++, group += gsize ) {
-
- iin = floor( group[ 1 ] + 0.5 );
- if( iin < 1 || iin > nin ) {
- astError( AST__BADCI, "astInitPolyMap(%s): Inverse "
- "coefficient %d referred to an illegal input "
- "coordinate %d.", status, name, i + 1, iin );
- astError( AST__BADCI, "This number should be in the "
- "range 1 to %d.", status, nin );
- break;
- }
-
- new->ncoeff_i[ iin - 1 ]++;
-
- for( j = 0; j < nout; j++ ) {
- pow = floor( group[ 2 + j ] + 0.5 );
- if( pow < 0 ) {
- astError( AST__BADPW, "astInitPolyMap(%s): Inverse "
- "coefficient %d has a negative power (%d) "
- "for output coordinate %d.", status, name, i + 1, pow,
- j + 1 );
- astError( AST__BADPW, "All powers should be zero or "
- "positive." , status);
- break;
- }
- if( pow > new->mxpow_i[ j ] ) new->mxpow_i[ j ] = pow;
- }
- }
-
-/* Allocate the arrays to store the output powers associated with each
- coefficient, and the coefficient values. Reset the coefficient count
- for each axis to zero afterwards so that we can use the array as an index
- to the next vacant slot within the following loop. */
- for( i = 0; i < nin; i++ ) {
- new->power_i[ i ] = astMalloc( sizeof( int * )*
- (size_t) new->ncoeff_i[ i ] );
- new->coeff_i[ i ] = astMalloc( sizeof( double )*
- (size_t) new->ncoeff_i[ i ] );
- new->ncoeff_i[ i ] = 0;
- }
-
- if( astOK ) {
-
-/* Extract the coefficient values and powers form the supplied array and
- store them in the arrays created above. */
- group = coeff_i;
- for( i = 0; i < ncoeff_i && astOK; i++, group += gsize ) {
- iin = floor( group[ 1 ] + 0.5 ) - 1;
- ico = ( new->ncoeff_i[ iin ] )++;
- new->coeff_i[ iin ][ ico ] = group[ 0 ];
-
- pows = astMalloc( sizeof( int )*(size_t) nout );
- new->power_i[ iin ][ ico ] = pows;
- if( astOK ) {
- for( j = 0; j < nout; j++ ) {
- pows[ j ] = floor( group[ 2 + j ] + 0.5 );
- }
- }
- }
- }
- }
- }
-
-/* If an error occurred, clean up by deleting the new PolyMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new PolyMap. */
- return new;
-}
-
-AstPolyMap *astLoadPolyMap_( void *mem, size_t size,
- AstPolyMapVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadPolyMap
-
-* Purpose:
-* Load a PolyMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "polymap.h"
-* AstPolyMap *astLoadPolyMap( void *mem, size_t size,
-* AstPolyMapVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* PolyMap loader.
-
-* Description:
-* This function is provided to load a new PolyMap using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* PolyMap structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a PolyMap at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the PolyMap is to be
-* loaded. This must be of sufficient size to accommodate the
-* PolyMap data (sizeof(PolyMap)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the PolyMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the PolyMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstPolyMap) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new PolyMap. If this is NULL, a pointer
-* to the (static) virtual function table for the PolyMap class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "PolyMap" is used instead.
-
-* Returned Value:
-* A pointer to the new PolyMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-/* Local Variables: */
- AstPolyMap *new; /* Pointer to the new PolyMap */
- char buff[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- int i; /* Loop index */
- int iv; /* Vectorised keyword index */
- int j; /* Loop index */
- int k; /* Loop index */
- int nin; /* No. of input coords */
- int nout; /* No. of output coords */
- int undef; /* Is the transformation undefined? */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this PolyMap. In this case the
- PolyMap belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstPolyMap );
- vtab = &class_vtab;
- name = "PolyMap";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitPolyMapVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built PolyMap. */
- new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Get the number of inputs and outputs for the uninverted Mapping. */
- nin = ( (AstMapping *) new )->nin;
- nout = ( (AstMapping *) new )->nout;
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "PolyMap" );
-
-/* Allocate memory to hold the forward arrays. */
- new->ncoeff_f = astMalloc( sizeof( int )*(size_t) nout );
- new->mxpow_f = astMalloc( sizeof( int )*(size_t) nin );
- new->power_f = astMalloc( sizeof( int ** )*(size_t) nout );
- new->coeff_f = astMalloc( sizeof( double * )*(size_t) nout );
- if( astOK ) {
-
-/* Assume the forward transformation is defined. */
- undef = 0;
-
-/* Get the maximum power of each input axis value used by the forward
- transformation. Set a flag "undef" if no values relating to the
- forward transformation are found (this indicates that the forward
- transformation is not defined). */
- for( i = 0; i < nin && !undef; i++ ){
- (void) sprintf( buff, "mpf%d", i + 1 );
- (new->mxpow_f)[ i ] = astReadInt( channel, buff, INT_MAX );
- if( (new->mxpow_f)[ i ] == INT_MAX ) undef = 1;
- }
-
-/* Get the number of coefficients associated with each output of the forward
- transformation. */
- for( i = 0; i < nout && !undef; i++ ){
- (void) sprintf( buff, "ncf%d", i + 1 );
- (new->ncoeff_f)[ i ] = astReadInt( channel, buff, INT_MAX );
- if( (new->ncoeff_f)[ i ] == INT_MAX ) undef = 1;
- }
-
-/* Get the coefficient values used by the forward transformation. This
- uses new style vectorised key names if available. Otherwise it uses
- old style indexed names (which were superceded by vectorised names
- because they are shorter and so work better with FitsChans). */
- iv = 0;
- for( i = 0; i < nout && !undef; i++ ){
-
- (new->coeff_f)[ i ] = astMalloc( sizeof( double )*
- (size_t) new->ncoeff_f[ i ] );
- if( astOK ) {
- for( j = 0; j < new->ncoeff_f[ i ]; j++ ){
- (void) sprintf( buff, "cf%d", ++iv );
- (new->coeff_f)[ i ][ j ] = astReadDouble( channel, buff, AST__BAD );
- if( (new->coeff_f)[ i ][ j ] == AST__BAD ) {
- (void) sprintf( buff, "cf%d_%d", i + 1, j + 1 );
- (new->coeff_f)[ i ][ j ] = astReadDouble( channel, buff, AST__BAD );
- }
- }
- }
- }
-
-/* Get the input axis powers associated with each coefficient of the forward
- transformation. */
- iv = 0;
- for( i = 0; i < nout && !undef; i++ ){
- (new->power_f)[ i ] = astMalloc( sizeof( int * )*
- (size_t) new->ncoeff_f[ i ] );
- if( astOK ) {
- for( j = 0; j < new->ncoeff_f[ i ]; j++ ){
- (new->power_f)[ i ][ j ] = astMalloc( sizeof( int )* (size_t) nin );
- if( astOK ) {
- for( k = 0; k < nin; k++ ){
- (void) sprintf( buff, "pf%d", ++iv );
- (new->power_f)[ i ][ j ][ k ] = astReadInt( channel, buff, 0 );
- if( (new->power_f)[ i ][ j ][ k ] == 0 ) {
- (void) sprintf( buff, "pf%d_%d_%d", i + 1, j + 1, k + 1 );
- (new->power_f)[ i ][ j ][ k ] = astReadInt( channel, buff, 0 );
- }
- }
- }
- }
- }
- }
-
-/* Free the arrays if the forward transformation is undefined. */
- if( undef ) {
- new->ncoeff_f = astFree( new->ncoeff_f );
- new->mxpow_f = astFree( new->mxpow_f );
- new->power_f = astFree( new->power_f );
- new->coeff_f = astFree( new->coeff_f );
- }
- }
-
-/* Allocate memory to hold the inverse arrays. */
- new->ncoeff_i = astMalloc( sizeof( int )*(size_t) nin );
- new->mxpow_i = astMalloc( sizeof( int )*(size_t) nout );
- new->power_i = astMalloc( sizeof( int ** )*(size_t) nin );
- new->coeff_i = astMalloc( sizeof( double * )*(size_t) nin );
- if( astOK ) {
-
-/* Assume the inverse transformation is defined. */
- undef = 0;
-
-/* Get the maximum power of each output axis value used by the inverse
- transformation. Set a flag "undef" if no values relating to the
- inverse transformation are found (this indicates that the inverse
- transformation is not defined). */
- for( i = 0; i < nout && !undef; i++ ){
- (void) sprintf( buff, "mpi%d", i + 1 );
- (new->mxpow_i)[ i ] = astReadInt( channel, buff, INT_MAX );
- if( (new->mxpow_i)[ i ] == INT_MAX ) undef = 1;
- }
-
-/* Get the number of coefficients associated with each input of the inverse
- transformation. */
- for( i = 0; i < nin && !undef; i++ ){
- (void) sprintf( buff, "nci%d", i + 1 );
- (new->ncoeff_i)[ i ] = astReadInt( channel, buff, INT_MAX );
- if( (new->ncoeff_i)[ i ] == INT_MAX ) undef = 1;
- }
-
-/* Get the coefficient values used by the inverse transformation. */
- iv = 0;
- for( i = 0; i < nin && !undef; i++ ){
-
- (new->coeff_i)[ i ] = astMalloc( sizeof( double )*
- (size_t) new->ncoeff_i[ i ] );
- if( astOK ) {
- for( j = 0; j < new->ncoeff_i[ i ]; j++ ){
- (void) sprintf( buff, "ci%d", ++iv );
- (new->coeff_i)[ i ][ j ] = astReadDouble( channel, buff, AST__BAD );
- if( (new->coeff_i)[ i ][ j ] == AST__BAD ) {
- (void) sprintf( buff, "ci%d_%d", i + 1, j + 1 );
- (new->coeff_i)[ i ][ j ] = astReadDouble( channel, buff, AST__BAD );
- }
- }
- }
- }
-
-/* Get the output axis powers associated with each coefficient of the inverse
- transformation. */
- iv = 0;
- for( i = 0; i < nin && !undef; i++ ){
- (new->power_i)[ i ] = astMalloc( sizeof( int * )*
- (size_t) new->ncoeff_i[ i ] );
- if( astOK ) {
- for( j = 0; j < new->ncoeff_i[ i ]; j++ ){
- (new->power_i)[ i ][ j ] = astMalloc( sizeof( int )* (size_t) nout );
- if( astOK ) {
- for( k = 0; k < nout; k++ ){
- (void) sprintf( buff, "pi%d", ++iv );
- (new->power_i)[ i ][ j ][ k ] = astReadInt( channel, buff, 0 );
- if( (new->power_i)[ i ][ j ][ k ] == 0 ) {
- (void) sprintf( buff, "pi%d_%d_%d", i + 1, j + 1, k + 1 );
- (new->power_i)[ i ][ j ][ k ] = astReadInt( channel, buff, 0 );
- }
- }
- }
- }
- }
- }
-
-/* Free the arrays if the inverse transformation is undefined. */
- if( undef ) {
- new->ncoeff_i = astFree( new->ncoeff_i );
- new->mxpow_i = astFree( new->mxpow_i );
- new->power_i = astFree( new->power_i );
- new->coeff_i = astFree( new->coeff_i );
- }
- }
-
-/* If an error occurred, clean up by deleting the new PolyMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new PolyMap pointer. */
- return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-
-
-
diff --git a/ast-5.3-1/polymap.h b/ast-5.3-1/polymap.h
deleted file mode 100644
index 8373bf1..0000000
--- a/ast-5.3-1/polymap.h
+++ /dev/null
@@ -1,286 +0,0 @@
-#if !defined( POLYMAP_INCLUDED ) /* Include this file only once */
-#define POLYMAP_INCLUDED
-/*
-*+
-* Name:
-* polymap.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the PolyMap class.
-
-* Invocation:
-* #include "polymap.h"
-
-* Description:
-* This include file defines the interface to the PolyMap class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* A PolyMap is a form of Mapping which performs a general polynomial
-* transformation. Each output coordinate is a polynomial function of
-* all the input coordinates. The coefficients are specified separately
-* for each output coordinate. The forward and inverse transformations
-* are defined independantly by separate sets of coefficients.
-
-* Inheritance:
-* The PolyMap class inherits from the Mapping class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* None.
-
-* Methods Over-Ridden:
-* Public:
-* None.
-*
-* Protected:
-* astTransform
-* Apply a PolyMap to transform a set of points.
-
-* New Methods Defined:
-* Public:
-* None.
-*
-* Protected:
-* None.
-
-* Other Class Functions:
-* Public:
-* astIsAPolyMap
-* Test class membership.
-* astPolyMap
-* Create a PolyMap.
-*
-* Protected:
-* astCheckPolyMap
-* Validate class membership.
-* astInitPolyMap
-* Initialise a PolyMap.
-* astInitPolyMapVtab
-* Initialise the virtual function table for the PolyMap class.
-* astLoadPolyMap
-* Load a PolyMap.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstPolyMap
-* PolyMap object type.
-*
-* Protected:
-* AstPolyMapVtab
-* PolyMap virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-
-* History:
-* 28-SEP-2003 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* PolyMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstPolyMap {
-
-/* Attributes inherited from the parent class. */
- AstMapping mapping; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- int *ncoeff_f; /* No. of coeffs for each forward polynomial */
- int *mxpow_f; /* Max power of each i/p axis for each forward polynomial */
- int ***power_f; /* Pointer to i/p powers for all forward coefficients */
- double **coeff_f; /* Pointer to values of all forward coefficients */
- int *ncoeff_i; /* No. of coeffs for each inverse polynomial */
- int *mxpow_i; /* Max power of each i/p axis for each inverse polynomial */
- int ***power_i; /* Pointer to i/p powers for all inverse coefficients */
- double **coeff_i; /* Pointer to values of all inverse coefficients */
-} AstPolyMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstPolyMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstMappingVtab mapping_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-
-} AstPolyMapVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstPolyMapGlobals {
- AstPolyMapVtab Class_Vtab;
- int Class_Init;
-} AstPolyMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitPolyMapGlobals_( AstPolyMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(PolyMap) /* Check class membership */
-astPROTO_ISA(PolyMap) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstPolyMap *astPolyMap_( int, int, int, const double[], int, const double[], const char *, int *, ...);
-#else
-AstPolyMap *astPolyMapId_( int, int, int, const double[], int, const double[], const char *, ... )__attribute__((format(printf,7,8)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstPolyMap *astInitPolyMap_( void *, size_t, int, AstPolyMapVtab *, const char *, int, int, int, const double[], int, const double[], int * );
-
-/* Vtab initialiser. */
-void astInitPolyMapVtab_( AstPolyMapVtab *, const char *, int * );
-
-/* Loader. */
-AstPolyMap *astLoadPolyMap_( void *, size_t, AstPolyMapVtab *,
- const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS) /* Protected */
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckPolyMap(this) astINVOKE_CHECK(PolyMap,this,0)
-#define astVerifyPolyMap(this) astINVOKE_CHECK(PolyMap,this,1)
-
-/* Test class membership. */
-#define astIsAPolyMap(this) astINVOKE_ISA(PolyMap,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astPolyMap astINVOKE(F,astPolyMap_)
-#else
-#define astPolyMap astINVOKE(F,astPolyMapId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitPolyMap(mem,size,init,vtab,name,nin,nout,ncoeff_f,coeff_f,ncoeff_i,coeff_i) \
-astINVOKE(O,astInitPolyMap_(mem,size,init,vtab,name,nin,nout,ncoeff_f,coeff_f,ncoeff_i,coeff_i,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitPolyMapVtab(vtab,name) astINVOKE(V,astInitPolyMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadPolyMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadPolyMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckPolyMap to validate PolyMap pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/prism.c b/ast-5.3-1/prism.c
deleted file mode 100644
index 0603412..0000000
--- a/ast-5.3-1/prism.c
+++ /dev/null
@@ -1,4273 +0,0 @@
-/*
-*class++
-* Name:
-* Prism
-
-* Purpose:
-* An extrusion of a region into higher dimensions.
-
-* Constructor Function:
-c astPrism
-f AST_PRISM
-
-* Description:
-* A Prism is a Region which represents an extrusion of an existing Region
-* into one or more orthogonal dimensions (specified by another Region).
-* If the Region to be extruded has N axes, and the Region defining the
-* extrusion has M axes, then the resulting Prism will have (M+N) axes.
-* A point is inside the Prism if the first N axis values correspond to
-* a point inside the Region being extruded, and the remaining M axis
-* values correspond to a point inside the Region defining the extrusion.
-*
-* As an example, a cylinder can be represented by extruding an existing
-* Circle, using an Interval to define the extrusion. Ih this case, the
-* Interval would have a single axis and would specify the upper and
-* lower limits of the cylinder along its length.
-
-* Inheritance:
-* The Prism class inherits from the Region class.
-
-* Attributes:
-* The Prism class does not define any new attributes beyond those
-* which are applicable to all Regions.
-
-* Functions:
-c The Prism class does not define any new functions beyond those
-f The Prism class does not define any new routines beyond those
-* which are applicable to all Regions.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2009 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 17-DEC-2004 (DSB):
-* Original version.
-* 11-MAY-2005 (DSB):
-* Overlap modified to allow testing of overlap between prisms and
-* intervals.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 9-OCT-2007 (DSB):
-* Guard against all axes being extrusion axes in EquivPrism.
-* 20-JAN-2009 (DSB):
-* Over-ride astRegBasePick.
-* 22-JAN-2009 (DSB):
-* - Allow any class of Region to be used to define the extrusion axes.
-* - Over-ride the astMapList method.
-* 19-MAR-2009 (DSB):
-* Over-ride the astDecompose method.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS Prism
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
- compare bad values directory because of the danger of floating point
- exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==(bb))?1:(((aa)==AST__BAD||(bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E9*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "region.h" /* Regions (parent class) */
-#include "channel.h" /* I/O channels */
-#include "prism.h" /* Interface definition for this class */
-#include "cmpmap.h" /* Compound Mappings */
-#include "cmpframe.h" /* Compound Frames */
-#include "unitmap.h" /* Unit Mappings */
-#include "interval.h" /* Axis intervals */
-#include "pointlist.h" /* Points within Frames */
-#include "permmap.h" /* Axis permutations */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <string.h>
-#include <stdio.h>
-#include <math.h>
-#include <limits.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_maplist)( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstRegion *(* parent_getdefunc)( AstRegion *, int * );
-static void (* parent_setregfs)( AstRegion *, AstFrame *, int * );
-static AstMapping *(* parent_simplify)( AstMapping *, int * );
-static int (* parent_equal)( AstObject *, AstObject *, int * );
-static void (* parent_setclosed)( AstRegion *, int, int * );
-static void (* parent_setmeshsize)( AstRegion *, int, int * );
-static void (* parent_clearclosed)( AstRegion *, int * );
-static void (* parent_clearmeshsize)( AstRegion *, int * );
-static double (*parent_getfillfactor)( AstRegion *, int * );
-static int (* parent_overlapx)( AstRegion *, AstRegion *, int * );
-static void (*parent_regsetattrib)( AstRegion *, const char *, char **, int * );
-static void (*parent_regclearattrib)( AstRegion *, const char *, char **, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Prism)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Prism,Class_Init)
-#define class_vtab astGLOBAL(Prism,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstPrismVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstPrism *astPrismId_( void *, void *, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMapping *Simplify( AstMapping *, int * );
-static AstPointSet *RegBaseMesh( AstRegion *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstRegion *GetDefUnc( AstRegion *, int * );
-static AstRegion *RegBasePick( AstRegion *this, int, const int *, int * );
-static double *RegCentre( AstRegion *this, double *, double **, int, int, int * );
-static double GetFillFactor( AstRegion *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetBounded( AstRegion *, int * );
-static int GetObjSize( AstObject *, int * );
-static int MapList( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int Overlap( AstRegion *, AstRegion *, int * );
-static int OverlapX( AstRegion *, AstRegion *, int * );
-static int RegPins( AstRegion *, AstPointSet *, AstRegion *, int **, int * );
-static void ClearClosed( AstRegion *, int * );
-static void ClearMeshSize( AstRegion *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Decompose( AstMapping *, AstMapping **, AstMapping **, int *, int *, int *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void GetRegions( AstPrism *, AstRegion **, AstRegion **, int *, int * );
-static void RegBaseBox( AstRegion *, double *, double *, int * );
-static void RegClearAttrib( AstRegion *, const char *, char **, int * );
-static void RegSetAttrib( AstRegion *, const char *, char **, int * );
-static void SetClosed( AstRegion *, int, int * );
-static void SetMeshSize( AstRegion *, int, int * );
-static void SetRegFS( AstRegion *, AstFrame *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-/* Member functions. */
-/* ================= */
-AstRegion *astConvertToPrism_( AstRegion *this, int *status ) {
-/*
-*+
-* Name:
-* astConvertToPrism
-
-* Purpose:
-* Convert a supplied Region into a Prism if possible.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "prism.h"
-* AstRegion *astConvertToPrism( AstRegion *this, int *status )
-
-* Description:
-* This function attempts to split the supplied Region into two
-* regions defined within separate coordinate system. If this is
-* possible, and if either one of the two resulting Regions can be
-* simplified, then the two simplified Regions are joined into a Prism
-* equivalent to the supplied Region. The Prism is then simplified and
-* returned.
-*
-* If the supplied Region cannot be split into two components, or if
-* neither of the two components can eb simplified, then a clone of the
-* supplied Region pointer is returned.
-
-* Parameters:
-* this
-* Pointer to the original Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the equivalent simplified Prism, or a clone of the
-* supplied Region pointer.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*-
-*/
-
-/* Local Variables: */
- AstFrame *frm; /* Current Frame in supplied Region */
- AstFrame *pickfrm1; /* Frame formed by picking current subset of axes */
- AstFrame *pickfrm2; /* Frame formed by picking all other axes */
- AstMapping *junk; /* Unused Mapping pointer */
- AstMapping *map; /* Base -> current Mapping */
- AstPrism *prism; /* Prism combining all axes */
- AstPrism *newprism; /* Prism combining all axes, in original Frame */
- AstRegion *result; /* Result pointer to return */
- AstRegion *sp1; /* Simplified region spanning selected axes */
- AstRegion *sp2; /* Simplified region spanning unselected axes */
- AstUnitMap *um; /* A UnitMap */
- int *ax; /* Pointer to array of selecte axis indices */
- int *perm; /* Axis permutation array */
- int axis; /* Axis index */
- int bitmask; /* Integer with set bits for selected axes */
- int i; /* Loop index */
- int mask; /* Integer with a set bit at current axis */
- int nax; /* Number of selected axes */
- int nin; /* No. of base Frame axes (Mapping inputs) */
- int nout; /* No. of current Frame axes (Mapping outputs) */
- int topmask; /* Integer that selects all axes */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get the Mapping from base to current Frame. */
- map = astGetMapping( this->frameset, AST__BASE, AST__CURRENT );
-
-/* Get the number of inputs and outputs for the Mapping. */
- nin = astGetNin( map );
- nout = astGetNout( map );
-
-/* Allocate memory to hold the indices of the current Frame axes in the
- current subset */
- ax = astMalloc( sizeof( int )* nout );
- if( ax ) {
-
-/* We need to scan through all possible subsets of the current Frame
- axes, looking for a subset that results in the Region being split.
- We use the binary pattern of bits in "bitmask" to indicate if the
- corresponding axes should be included in the subset of axes.
- Loop round all possible combinations, until a combination is found
- that results in a Prism being formed. */
- topmask = pow( 2, nout );
- for( bitmask = 1; bitmask < topmask && !result; bitmask++ ) {
-
-/* Store the indices of the axes forming the current subset. */
- nax = 0;
- mask = 1;
- for( axis = 0; axis < nout; axis++ ) {
- if( bitmask & mask ) ax[ nax++ ] = axis;
- mask <<= 1;
- }
-
-/* See if the current subset of current Frame axes can be split off from
- the Region. If it can, the Frame pointer returned by astPickAxes will identify
- a Region. */
- pickfrm1 = astPickAxes( this, nax, ax, &junk );
- junk = astAnnul( junk );
- if( astIsARegion( pickfrm1 ) ) {
-
-/* Check that the remaining (unselected) axes can also be picked into a
- new Region. */
- nax = 0;
- mask = 1;
- for( axis = 0; axis < nout; axis++ ) {
- if( ( bitmask & mask ) == 0 ) ax[ nax++ ] = axis;
- mask <<= 1;
- }
-
- pickfrm2 = astPickAxes( this, nax, ax, &junk );
- junk = astAnnul( junk );
- if( astIsARegion( pickfrm2 ) ) {
-
-/* See if either of these picked Regions can be simplified. */
- sp1 = astSimplify( pickfrm1 );
- sp2 = astSimplify( pickfrm2 );
- if( (AstFrame *) sp1 != pickfrm1 ||
- (AstFrame *) sp2 != pickfrm2 ) {
-
-/* If so form a Prism containing the simplified Regions. */
- prism = astPrism( sp1, sp2, " ", status );
-
-/* Permute the axes of the Prism so that they are in the same order as
- in the Box. */
- perm = astMalloc( sizeof( int )*nout );
- if( perm ) {
-
- for( i = 0; i < nout; i++ ) perm[ i ] = -1;
-
- for( i = 0; i < nax; i++ ) {
- perm[ ax[ i ] ] = i + ( nout - nax );
- }
-
- nax = 0;
- for( i = 0; i < nout; i++ ) {
- if( perm[ i ] == -1 ) perm[ i ] = nax++;
- }
-
- astPermAxes( prism, perm );
- perm = astFree( perm );
- }
-
-/* Put the original current Frame back in (in place of the CmpFrame
- containined in the Prism). */
- frm = astGetFrame( this->frameset, AST__CURRENT );
- um = astUnitMap( nout, " ", status );
- newprism = astMapRegion( prism, um, frm );
- um = astAnnul( um );
- frm = astAnnul( frm );
-
-/* Attempt to simplify the Prism. */
- result = astSimplify( newprism );
-
-/* Free resources */
- prism = astAnnul( prism );
- newprism = astAnnul( newprism );
- }
-
- sp1 = astAnnul( sp1 );
- sp2 = astAnnul( sp2 );
- }
- pickfrm2 = astAnnul( pickfrm2 );
- }
-
- pickfrm1 = astAnnul( pickfrm1 );
- }
-
- ax = astFree( ax );
- }
-
- map = astAnnul( map );
-
-/* If no Prism could be made, return a clone of the supplied Region
- pointer. */
- if( !result ) result = astClone( this );
-
-/* If an error occurred, annul the returned pointer. */
- if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static void Decompose( AstMapping *this_mapping, AstMapping **map1,
- AstMapping **map2, int *series, int *invert1,
- int *invert2, int *status ) {
-/*
-*
-* Name:
-* Decompose
-
-* Purpose:
-* Decompose a Prism into two component Regions.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "cmpregion.h"
-* void Decompose( AstMapping *this, AstMapping **map1,
-* AstMapping **map2, int *series,
-* int *invert1, int *invert2, int *status )
-
-* Class Membership:
-* Prism member function (over-rides the protected astDecompose
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns pointers to two Mappings which, when applied
-* either in series or parallel, are equivalent to the supplied Mapping.
-*
-* Since the Frame class inherits from the Mapping class, Frames can
-* be considered as special types of Mappings and so this method can
-* be used to decompose either CmpMaps, CmpFrames, CmpRegions or Prisms.
-
-* Parameters:
-* this
-* Pointer to the Mapping.
-* map1
-* Address of a location to receive a pointer to first component
-* Mapping.
-* map2
-* Address of a location to receive a pointer to second component
-* Mapping.
-* series
-* Address of a location to receive a value indicating if the
-* component Mappings are applied in series or parallel. A non-zero
-* value means that the supplied Mapping is equivalent to applying map1
-* followed by map2 in series. A zero value means that the supplied
-* Mapping is equivalent to applying map1 to the lower numbered axes
-* and map2 to the higher numbered axes, in parallel.
-* invert1
-* The value of the Invert attribute to be used with map1.
-* invert2
-* The value of the Invert attribute to be used with map2.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - Any changes made to the component rames using the returned
-* pointers will be reflected in the supplied CmpFrame.
-
-*-
-*/
-
-/* Local Variables: */
- AstPrism *this; /* Pointer to Prism structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpMap structure. */
- this = (AstPrism *) this_mapping;
-
-/* The components Frames of a Prism are considered to be parallel
- Mappings. */
- if( series ) *series = 0;
-
-/* The Frames are returned in their original order whether or not the
- Prism has been inverted. */
- if( map1 ) *map1 = astClone( this->region1 );
- if( map2 ) *map2 = astClone( this->region2 );
-
-/* The invert flags dont mean anything for a Region, but we return them
- anyway. If the Prism has been inverted, return inverted Invert flags. */
- if( astGetInvert( this ) ) {
- if( invert1 ) *invert1 = astGetInvert( this->region1 ) ? 0 : 1;
- if( invert2 ) *invert2 = astGetInvert( this->region2 ) ? 0 : 1;
-
-/* If the Prism has not been inverted, return the current Invert flags. */
- } else {
- if( invert1 ) *invert1 = astGetInvert( this->region1 );
- if( invert2 ) *invert2 = astGetInvert( this->region2 );
- }
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two Objects are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "prism.h"
-* int Equal( AstObject *this_object, AstObject *that_object, int *status )
-
-* Class Membership:
-* Prism member function (over-rides the astEqual protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two Prisms are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Prism.
-* that
-* Pointer to the second Prism.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the Prisms are equivalent, zero otherwise.
-
-* Notes:
-* - The Prisms are equivalent if their component Regions are
-* equivalent and if they have the same boolean operation, negation
-* and closed flags.
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstPrism *that;
- AstPrism *this;
- int result;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Invoke the Equal method inherited from the parent Region class. This checks
- that the Objects are both of the same class, and have the same Negated
- and Closed flags (amongst other things). */
- if( (*parent_equal)( this_object, that_object, status ) ) {
-
-/* Obtain pointers to the two Prism structures. */
- this = (AstPrism *) this_object;
- that = (AstPrism *) that_object;
-
-/* Test their first component Regions for equality. */
- if( astEqual( this->region1, that->region1 ) ) {
-
-/* Test their second component Regions for equality. */
- if( astEqual( this->region2, that->region2 ) ) result = 1;
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-/*
-* Name:
-* MAKE_SET
-
-* Purpose:
-* Define a function to set an attribute value for a Prism.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "prism.h"
-* MAKE_SET(attribute,lattribute,type)
-
-* Class Membership:
-* Defined by the Prism class.
-
-* Description:
-* This macro expands to an implementation of a private member function
-* of the form:
-*
-* static void Set<Attribute>( AstRegion *this, <Type> value )
-*
-* that sets the value of a specified Region attribute in the parent
-* Region structure and also in the component Regions.
-
-* Parameters:
-* attribute
-* Name of the attribute, as it appears in the function name.
-* lattribute
-* Name of the attribute, all in lower case.
-* type
-* The C type of the attribute.
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attribute,lattribute,type) \
-static void Set##attribute( AstRegion *this_region, type value, int *status ) { \
-\
-/* Local Variables: */ \
- AstPrism *this; /* Pointer to the Prism structure */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Use the parent method to set the value in the parent Region structure. */ \
- (*parent_set##lattribute)( this_region, value, status ); \
-\
-/* Also set the value in the two component Regions. */ \
- this = (AstPrism *) this_region; \
- astSet##attribute( this->region1, value ); \
- astSet##attribute( this->region2, value ); \
-}
-
-/* Use the above macro to create accessors for the MeshSize and Closed
- attributes. */
-MAKE_SET(MeshSize,meshsize,int)
-MAKE_SET(Closed,closed,int)
-
-/* Undefine the macro. */
-#undef MAKE_SET
-
-/*
-* Name:
-* MAKE_CLEAR
-
-* Purpose:
-* Define a function to clear an attribute value for a Prism.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "prism.h"
-* MAKE_CLEAR(attribute,lattribute)
-
-* Class Membership:
-* Defined by the Prism class.
-
-* Description:
-* This macro expands to an implementation of a private member function
-* of the form:
-*
-* static void Clear<Attribute>( AstRegion *this )
-*
-* that sets the value of a specified Region attribute in the parent
-* Region structure and also in the component Regions.
-
-* Parameters:
-* attribute
-* Name of the attribute, as it appears in the function name.
-* lattribute
-* Name of the attribute, all in lower case.
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attribute,lattribute) \
-static void Clear##attribute( AstRegion *this_region, int *status ) { \
-\
-/* Local Variables: */ \
- AstPrism *this; /* Pointer to the Prism structure */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Use the parent method to clear the value in the parent Region structure. */ \
- (*parent_clear##lattribute)( this_region, status ); \
-\
-/* Also clear the value in the two component Regions. */ \
- this = (AstPrism *) this_region; \
- astClear##attribute( this->region1 ); \
- astClear##attribute( this->region2 ); \
-}
-
-/* Use the above macro to create accessors for the MeshSize and Closed
- attributes. */
-MAKE_CLEAR(MeshSize,meshsize)
-MAKE_CLEAR(Closed,closed)
-
-/* Undefine the macro. */
-#undef MAKE_CLEAR
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "prism.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* Prism member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied Prism,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the Prism.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstPrism *this; /* Pointer to Prism structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the Prism structure. */
- this = (AstPrism *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
- result += astGetObjSize( this->region1 );
- result += astGetObjSize( this->region2 );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static int GetBounded( AstRegion *this_region, int *status ) {
-/*
-* Name:
-* GetBounded
-
-* Purpose:
-* Is the Region bounded?
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "prism.h"
-* int GetBounded( AstRegion *this, int *status )
-
-* Class Membership:
-* Prism method (over-rides the astGetBounded method inherited from
-* the Region class).
-
-* Description:
-* This function returns a flag indicating if the Region is bounded.
-* The implementation provided by the base Region class is suitable
-* for Region sub-classes representing the inside of a single closed
-* curve (e.g. Circle, Ellipse, Box, etc). Other sub-classes (such as
-* Prism, PointList, etc ) may need to provide their own
-* implementations.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the Region is bounded. Zero otherwise.
-
-*/
-
-/* Local Variables: */
- AstPrism *this; /* Pointer to Prism structure */
- AstRegion *reg1; /* Pointer to first component Region */
- AstRegion *reg2; /* Pointer to second component Region */
- int neg; /* Negated flag to use with the Prism */
- int reg1b; /* Is the first component Region bounded?*/
- int reg2b; /* Is the second component Region bounded?*/
- int result; /* Returned result */
-
-/* Initialise */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the Prism structure. */
- this = (AstPrism *) this_region;
-
-/* Get the component Regions, and the Negated value for the Prism. The
- returned Regions represent a region within the base Frame of the FrameSet
- encapsulated by the parent Region structure. */
- GetRegions( this, ®1, ®2, &neg, status );
-
-/* If the Prism has been inverted, temporarily invert the components. */
- if( neg ) {
- astNegate( reg1 );
- astNegate( reg2 );
- }
-
-/* See if either of the component Regions is bounded. */
- reg1b = astGetBounded( reg1 );
- reg2b = astGetBounded( reg2 );
-
-/* If the Prism has been inverted, re-invert the components to bring them
- back to their original states. */
- if( neg ) {
- astNegate( reg1 );
- astNegate( reg2 );
- }
-
-/* The Prism is bounded only if both of the component Regions are bounded. */
- result = ( reg1b && reg2b );
-
-/* Free resources. */
- reg1 = astAnnul( reg1 );
- reg2 = astAnnul( reg2 );
-
-/* Return zero if an error occurred. */
- if( !astOK ) result = 0;
-
-/* Return the required pointer. */
- return result;
-}
-
-static double GetFillFactor( AstRegion *this_region, int *status ) {
-/*
-* Name:
-* GetFillFactor
-
-* Purpose:
-* Obtain the value of the FillFactor attribute for a Prism.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "prism.h"
-* double GetFillFactor( AstRegion *this, int *status )
-
-* Class Membership:
-* Prism member function (over-rides the astGetFillFactor method inherited
-* from the Region class).
-
-* Description:
-* This function returns the value of the FillFactor attribute for a
-* Prism. A suitable default value is returned if no value has
-* previously been set.
-
-* Parameters:
-* this
-* Pointer to the Prism.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The FillFactor value to use.
-
-*/
-
-/* Local Variables: */
- AstPrism *this;
- double f1;
- double f2;
- double result;
-
-/* Check the global error status. */
- if ( !astOK ) return AST__BAD;
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Obtain a pointer to the Prism structure. */
- this = (AstPrism *) this_region;
-
-/* See if a FillFactor value has been set. If so, use the parent
- astGetFillFactor method to obtain it. */
- if ( astTestFillFactor( this ) ) {
- result = (*parent_getfillfactor)( this_region, status );
-
-/* Otherwise, we will generate a default value equal to the product of
- the FillFactor values of the two component Regions. */
- } else {
- f1 = astGetFillFactor( this->region1 );
- f2 = astGetFillFactor( this->region2 );
- if( f1 != AST__BAD && f2 != AST__BAD ) result = f1*f2;
- }
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
- return result;
-}
-
-static void GetRegions( AstPrism *this, AstRegion **reg1, AstRegion **reg2,
- int *neg, int *status ) {
-/*
-*
-* Name:
-* GetRegions
-
-* Purpose:
-* Get the component Regions of a Prism.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* void GetRegions( AstPrism *this, AstRegion **reg1, AstRegion **reg2,
-* int *neg, int *status )
-
-* Class Membership:
-* Prism member function
-
-* Description:
-* This function returns pointers to the two Regions in a Prism, together
-* with the Negated flag for the Prism.
-*
-* The current Frames in both the returned component Regions will be
-* equivalent to componets of the base Frame in the FrameSet encapsulated
-* by the parent Region structure.
-
-* Parameters:
-* this
-* Pointer to the Prism.
-* reg1
-* Address of a location to receive a pointer to first component
-* Region. This is the region which is to be extruded.
-* reg2
-* Address of a location to receive a pointer to second component
-* Region. This will be an Interval defining the axes along which
-* the first Region is to be extruded.
-* neg
-* Pointer to an int in which to return the value of the Negated
-* attribute of the Prism.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The returned pointers should be annuled using astAnnul when no
-* longer needed.
-* - The Frames represented by the returned Regions (that is, the
-* current Frames in their encapsulated FrameSets) are equivalent to the
-* base Frame in the FrameSet encapsulated within the parent Region.
-* - Any changes made to the component Regions using the returned
-* pointers will be reflected in the supplied Prism.
-
-*-
-*/
-
-/* Initialise */
- if( reg1 ) *reg1 = NULL;
- if( reg2 ) *reg2 = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Store the required values.*/
- *reg1 = astClone( this->region1 );
- *reg2 = astClone( this->region2 );
- *neg = astGetNegated( (AstRegion *) this );
-}
-
-static AstRegion *GetDefUnc( AstRegion *this_region, int *status ) {
-/*
-* Name:
-* GetDefUnc
-
-* Purpose:
-* Obtain a pointer to the default uncertainty Region for a given Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "prism.h"
-* AstRegion *GetDefUnc( AstRegion *this )
-
-* Class Membership:
-* Prism method (over-rides the astGetDefUnc method inherited from
-* the Region class).
-
-* This function returns a pointer to a Region which represents the
-* default uncertainty associated with a position on the boundary of the
-* given Region. The returned Region refers to the base Frame within the
-* FrameSet encapsulated by the supplied Region.
-
-* Parameters:
-* this
-* Pointer to the Region.
-
-* Returned Value:
-* A pointer to the Region. This should be annulled (using astAnnul)
-* when no longer needed.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstPrism *this; /* Pointer to Prism structure */
- AstRegion *bunc1; /* Uncertainty Region for 1st component */
- AstRegion *bunc2; /* Uncertainty Region for 2nd component */
- AstRegion *result; /* Returned pointer */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the Prism structure. */
- this = (AstPrism *) this_region;
-
-/* Construct a default uncertainty Region from the uncertainty Regions
- in the two component Regions. The current Frames in the component
- Regions are equivalent to the base Frame in the parent Region structure.
- So we may need to map the component uncertainty into the current Region of
- the parent if required later on. */
- bunc1 = astGetUncFrm( this->region1, AST__CURRENT );
- bunc2 = astGetUncFrm( this->region2, AST__CURRENT );
-
-/* Combine them into a Prism. */
- result = (AstRegion *) astPrism( bunc1, bunc2, "", status );
-
-/* Free resources. */
- bunc1 = astAnnul( bunc1 );
- bunc2 = astAnnul( bunc2 );
-
-/* Return NULL if an error occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the required pointer. */
- return result;
-}
-
-void astInitPrismVtab_( AstPrismVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitPrismVtab
-
-* Purpose:
-* Initialise a virtual function table for a Prism.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "prism.h"
-* void astInitPrismVtab( AstPrismVtab *vtab, const char *name )
-
-* Class Membership:
-* Prism vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the Prism class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrameVtab *frame; /* Pointer to Frame component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstRegionVtab *region; /* Pointer to Region component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitRegionVtab( (AstRegionVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAPrism) to determine if an object belongs to
- this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstRegionVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
-
-/* None. */
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
- region = (AstRegionVtab *) vtab;
- frame = (AstFrameVtab *) vtab;
-
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
-#if defined(THREAD_SAFE)
- parent_managelock = object->ManageLock;
- object->ManageLock = ManageLock;
-#endif
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
- parent_simplify = mapping->Simplify;
- mapping->Simplify = Simplify;
-
- parent_maplist = mapping->MapList;
- mapping->MapList = MapList;
-
- parent_getdefunc = region->GetDefUnc;
- region->GetDefUnc = GetDefUnc;
-
- parent_setregfs = region->SetRegFS;
- region->SetRegFS = SetRegFS;
-
- parent_equal = object->Equal;
- object->Equal = Equal;
-
- parent_clearclosed = region->ClearClosed;
- region->ClearClosed = ClearClosed;
-
- parent_clearmeshsize = region->ClearMeshSize;
- region->ClearMeshSize = ClearMeshSize;
-
- parent_setclosed = region->SetClosed;
- region->SetClosed = SetClosed;
-
- parent_setmeshsize = region->SetMeshSize;
- region->SetMeshSize = SetMeshSize;
-
- parent_getfillfactor = region->GetFillFactor;
- region->GetFillFactor = GetFillFactor;
-
- parent_overlapx = region->OverlapX;
- region->OverlapX = OverlapX;
-
- parent_regsetattrib = region->RegSetAttrib;
- region->RegSetAttrib = RegSetAttrib;
-
- parent_regclearattrib = region->RegClearAttrib;
- region->RegClearAttrib = RegClearAttrib;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- mapping->Decompose = Decompose;
- region->RegBaseBox = RegBaseBox;
- region->RegBaseMesh = RegBaseMesh;
- region->RegPins = RegPins;
- region->GetBounded = GetBounded;
- region->RegCentre = RegCentre;
- region->Overlap = Overlap;
- region->RegBasePick = RegBasePick;
-
-/* Declare the copy constructor, destructor and class dump function. */
- astSetCopy( vtab, Copy );
- astSetDelete( vtab, Delete );
- astSetDump( vtab, Dump, "Prism", "Region extrusion into higher dimensions" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra,
- AstObject **fail, int *status ) {
-/*
-* Name:
-* ManageLock
-
-* Purpose:
-* Manage the thread lock on an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *ManageLock( AstObject *this, int mode, int extra,
-* AstObject **fail, int *status )
-
-* Class Membership:
-* CmpMap member function (over-rides the astManageLock protected
-* method inherited from the parent class).
-
-* Description:
-* This function manages the thread lock on the supplied Object. The
-* lock can be locked, unlocked or checked by this function as
-* deteremined by parameter "mode". See astLock for details of the way
-* these locks are used.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* mode
-* An integer flag indicating what the function should do:
-*
-* AST__LOCK: Lock the Object for exclusive use by the calling
-* thread. The "extra" value indicates what should be done if the
-* Object is already locked (wait or report an error - see astLock).
-*
-* AST__UNLOCK: Unlock the Object for use by other threads.
-*
-* AST__CHECKLOCK: Check that the object is locked for use by the
-* calling thread (report an error if not).
-* extra
-* Extra mode-specific information.
-* fail
-* If a non-zero function value is returned, a pointer to the
-* Object that caused the failure is returned at "*fail". This may
-* be "this" or it may be an Object contained within "this". Note,
-* the Object's reference count is not incremented, and so the
-* returned pointer should not be annulled. A NULL pointer is
-* returned if this function returns a value of zero.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A local status value:
-* 0 - Success
-* 1 - Could not lock or unlock the object because it was already
-* locked by another thread.
-* 2 - Failed to lock a POSIX mutex
-* 3 - Failed to unlock a POSIX mutex
-* 4 - Bad "mode" value supplied.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-*/
-
-/* Local Variables: */
- AstPrism *this; /* Pointer to Prism structure */
- int result; /* Returned status value */
-
-/* Initialise */
- result = 0;
-
-/* Check the supplied pointer is not NULL. */
- if( !this_object ) return result;
-
-/* Obtain a pointers to the Prism structure. */
- this = (AstPrism *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
- if( !result ) result = (*parent_managelock)( this_object, mode, extra,
- fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
- the supplied Object. */
- if( !result ) result = astManageLock( this->region1, mode, extra, fail );
- if( !result ) result = astManageLock( this->region2, mode, extra, fail );
-
- return result;
-
-}
-#endif
-
-static int MapList( AstMapping *this_mapping, int series, int invert,
- int *nmap, AstMapping ***map_list, int **invert_list,
- int *status ) {
-/*
-* Name:
-* MapList
-
-* Purpose:
-* Decompose a Prism into a sequence of simpler Regions.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MapList( AstMapping *this, int series, int invert, int *nmap,
-* AstMapping ***map_list, int **invert_list )
-
-* Class Membership:
-* Prism member function (over-rides the protected astMapList
-* method inherited from the Region class).
-
-* Description:
-* This function decomposes a Prism into a sequence of simpler
-* Regions which may be applied in parallel to achieve the same
-* effect. The Prism is decomposed as far as possible, but it is
-* not guaranteed that this will necessarily yield any more than
-* one Region, which may actually be the original Prism supplied.
-
-* Parameters:
-* this
-* Pointer to the Prism to be decomposed (the Prism is not
-* actually modified by this function).
-* series
-* Prisms always apply their component Regions in parallel, so this
-* value should always be zero. This function will return without
-* action if it is non-zero.
-* invert
-* Inverting a Region has no effect on the properties of the Region
-* and so this parameter is ignored.
-* nmap
-* The address of an int which holds a count of the number of
-* individual Regions in the decomposition. On entry, this
-* should count the number of Regions already in the
-* "*map_list" array (below). On exit, it is updated to include
-* any new Regions appended by this function.
-* map_list
-* Address of a pointer to an array of Region pointers. On
-* entry, this array pointer should either be NULL (if no
-* Regions have yet been obtained) or should point at a
-* dynamically allocated array containing Region pointers
-* ("*nmap" in number) which have been obtained from a previous
-* invocation of this function.
-*
-* On exit, the dynamic array will be enlarged to contain any
-* new Region pointers that result from the decomposition
-* requested. These pointers will be appended to any previously
-* present, and the array pointer will be updated as necessary
-* to refer to the enlarged array (any space released by the
-* original array will be freed automatically).
-*
-* The new Region pointers returned will identify a sequence of
-* Regions which, when applied (in parallel) in order, will be
-* equivalent to the original Prism.
-*
-* All the Region pointers returned by this function should be
-* annulled by the caller, using astAnnul, when no longer
-* required. The dynamic array holding these pointers should
-* also be freed, using astFree.
-* invert_list
-* Address of a pointer to an array of int. On entry, this array
-* pointer should either be NULL (if no Regions have yet been
-* obtained) or should point at a dynamically allocated array
-* containing Invert attribute values ("*nmap" in number) which
-* have been obtained from a previous invocation of this
-* function.
-*
-* On exit, the dynamic array will be enlarged to contain any
-* new Invert attribute values that result from the
-* decomposition requested. These values will be appended to any
-* previously present, and the array pointer will be updated as
-* necessary to refer to the enlarged array (any space released
-* by the original array will be freed automatically).
-*
-* The new Invert values returned will always be zero since a
-* Region is unaffected by its Invert setting.
-*
-* The dynamic array holding these values should be freed by the
-* caller, using astFree, when no longer required.
-
-* Returned Value:
-* Zero is always returned.
-
-* Notes:
-* - It is unspecified to what extent the original Prism and the
-* individual (decomposed) Regions are
-* inter-dependent. Consequently, the individual Regions cannot be
-* modified without risking modification of the original Prism.
-* - If this function is invoked with the global error status set,
-* or if it should fail for any reason, then the *nmap value, the
-* list of Region pointers and the list of Invert values will all
-* be returned unchanged.
-*/
-
-/* Local Variables: */
- AstPrism *this; /* Pointer to Prism structure */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Obtain a pointer to the Prism structure. */
- this = (AstPrism *) this_mapping;
-
-/* When considered as a CmpMap, a Prism always combines its component
- Mappings (Regions) in parallel. So check that a parallel decomposition
- was requested. */
- if ( ! series ) {
-
-/* Concatenate the Mapping lists obtained from each component Region. */
- (void) astMapList( (AstMapping *) this->region1, 0, 0, nmap, map_list,
- invert_list );
- (void) astMapList( (AstMapping *) this->region2, 0, 0, nmap, map_list,
- invert_list );
-
-/* If the Prism does not combine its components in the way required
- by the decomposition (series or parallel), then we cannot decompose
- it. In this case it must be appended to the Mapping list as a
- single entity. We can use the parent class method to do this. */
- } else {
- (void) ( *parent_maplist )( this_mapping, series, invert, nmap,
- map_list, invert_list, status );
- }
-
- return 0;
-}
-
-static int Overlap( AstRegion *this, AstRegion *that, int *status ){
-/*
-* Name:
-* Overlap
-
-* Purpose:
-* Test if two regions overlap each other.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "prism.h"
-* int Overlap( AstRegion *this, AstRegion *that, int *status )
-
-* Class Membership:
-* Prism member function (over-rides the astOverlap method inherited
-* from the Region class).
-
-* Description:
-* This function returns an integer value indicating if the two
-* supplied Regions overlap. The two Regions are converted to a commnon
-* coordinate system before performing the check. If this conversion is
-* not possible (for instance because the two Regions represent areas in
-* different domains), then the check cannot be performed and a zero value
-* is returned to indicate this.
-
-* Parameters:
-* this
-* Pointer to the first Region.
-* that
-* Pointer to the second Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* astOverlap()
-* A value indicating if there is any overlap between the two Regions.
-* Possible values are:
-*
-* 0 - The check could not be performed because the second Region
-* could not be mapped into the coordinate system of the first
-* Region.
-*
-* 1 - There is no overlap between the two Regions.
-*
-* 2 - The first Region is completely inside the second Region.
-*
-* 3 - The second Region is completely inside the first Region.
-*
-* 4 - There is partial overlap between the two Regions.
-*
-* 5 - The Regions are identical.
-*
-* 6 - The second Region is the negation of the first Region.
-
-* Notes:
-* - The returned values 5 and 6 do not check the value of the Closed
-* attribute in the two Regions.
-* - A value of zero will be returned if this function is invoked with the
-* AST error status set, or if it should fail for any reason.
-
-*/
-
-/* Local Variables: */
- AstFrame *bfrm;
- AstFrame *efrm;
- AstFrameSet *fs;
- AstMapping *bmap;
- AstMapping *emap;
- AstMapping *map1;
- AstMapping *map2;
- AstMapping *map;
- AstMapping *smap;
- AstRegion *that_base2;
- AstRegion *that_base;
- AstRegion *that_ext2;
- AstRegion *that_ext;
- AstRegion *this_reg1;
- AstRegion *this_reg2;
- int *inax;
- int *outax;
- int i;
- int nbase;
- int next;
- int rbase;
- int result;
- int rext;
- int that_neg;
- int this_neg;
-
-/* A table indicating how to combine together the overlap state of the
- extrusion Regions with the overlap state of the other (base) Region.
- The first index represents the value returned by the astOverlap method
- when used to determine the overlap of the base Regions in the two
- supplied Prisms. The second index represents the value returned by the
- astOverlap method when used to determine the overlap of the extrusion
- Regions in the two supplied Prisms. The integer values stored in the
- array represent the astOverlap value describing the overlap of the two
- Prisms. */
- static int rtable[ 7 ][ 7 ] = { { 0, 0, 0, 0, 0, 0, 0 },
- { 0, 1, 1, 1, 1, 1, 1 },
- { 0, 1, 2, 4, 4, 2, 1 },
- { 0, 1, 4, 3, 4, 3, 1 },
- { 0, 1, 4, 4, 4, 4, 1 },
- { 0, 1, 2, 3, 4, 5, 1 },
- { 0, 1, 1, 1, 1, 1, 6 } };
-
-/* Initialise */
- result = 0;
-
-/* Check the inherited status. */
- if ( !astOK ) return result;
-
-/* Get pointers to the base and extrusion Regions within "this", and also
- the nagated flag. */
- GetRegions( (AstPrism *) this, &this_reg1, &this_reg2, &this_neg, status );
-
-/* Get the number of axes in the base and extrusion Regions of "this". */
- nbase = astGetNaxes( this_reg1 );
- next = astGetNaxes( this_reg2 );
-
-/* Get a FrameSet which goes from the Frame represented by "this" to the
- Frame represented by "that". Check that the conection is defined. */
- fs = astConvert( this, that, "" );
- if( fs ) {
-
-/* Get the forward Mapping from the above FrameSet. */
- map2 = astGetMapping( fs, AST__BASE, AST__CURRENT );
-
-/* Get a pointer to the Mapping from base to current Frame in "this". */
- map1 = astGetMapping( this->frameset, AST__BASE, AST__CURRENT );
-
-/* Combine these Mappings to get the Mapping from the base Frame of "this"
- to the current Frame of "that". */
- map = (AstMapping *) astCmpMap( map1, map2, 1, "", status );
-
-/* Simplify this Mapping. */
- smap = astSimplify( map );
-
-/* See if the extrusion axes in "this" correspond to a unique set of axes
- in the current Frame of "that". */
- inax = astMalloc( sizeof(int)*(size_t)next );
- for( i = 0; i < next; i++ ) inax[ i ] = nbase + i;
- outax = astMapSplit( smap, next, inax, &emap );
-
-/* If they do, attempt to create a Region by picking the axes from "that"
- that correspond to the extrusion axes in "this". */
- if( emap && astGetNout( emap ) == next ) {
- that_ext = (AstRegion *) astPickAxes( that, next, outax, NULL );
-
-/* If the picked axes formed a Region, see if the base axes can also be
- picked in the same way. */
- if( astIsARegion( that_ext ) ) {
- outax = astFree( outax );
- inax = astGrow( inax, (size_t)nbase, sizeof( int ) );
- for( i = 0; i < nbase; i++ ) inax[ i ] = i;
- outax = astMapSplit( smap, nbase, inax, &bmap );
- if( bmap && astGetNout( bmap ) == nbase ) {
- that_base = (AstRegion *) astPickAxes( that, nbase, outax, NULL );
- if( astIsARegion( that_base ) ) {
-
-/* Map the two Regions picked from "that" into the Frames of the two
- sub-regions within "this". */
- astInvert( emap );
- efrm = astGetFrame( this_reg2->frameset, AST__CURRENT );
- that_ext2 = astMapRegion( that_ext, emap, efrm );
-
- astInvert( bmap );
- bfrm = astGetFrame( this_reg1->frameset, AST__CURRENT );
- that_base2 = astMapRegion( that_base, bmap, bfrm );
-
-/* We can test separately for overlap of the two extrusion Regions, and for
- overlap of the two base Regions, and then combine the returned flags to
- represent overlap of the whole Prism. */
- rbase = astOverlap( this_reg1, that_base2 );
- rext = astOverlap( this_reg2, that_ext2 );
- result = rtable[ rbase ][ rext ];
-
-/* The values in the rtable array assume that neither of the supplied
- Prisms have been negated. Modify the value obtained from rtable to
- take account of negation of either or both of the supplied Prisms. */
- that_neg = astGetNegated( that );
- if( this_neg ) {
- if( that_neg ) {
- if( result == 1 ) {
- result = 4;
- } else if( result == 2 ) {
- result = 3;
- } else if( result == 3 ) {
- result = 2;
- }
- } else {
- if( result == 1 ) {
- result = 3;
- } else if( result == 2 ) {
- result = 4;
- } else if( result == 3 ) {
- result = 1;
- } else if( result == 5 ) {
- result = 6;
- } else if( result == 6 ) {
- result = 5;
- }
- }
- } else if( that_neg ){
- if( result == 1 ) {
- result = 2;
- } else if( result == 2 ) {
- result = 1;
- } else if( result == 3 ) {
- result = 4;
- } else if( result == 5 ) {
- result = 6;
- } else if( result == 6 ) {
- result = 5;
- }
- }
-
-/* Free resources */
- efrm = astAnnul( efrm );
- that_ext2 = astAnnul( that_ext2 );
- bfrm = astAnnul( bfrm );
- that_base2 = astAnnul( that_base2 );
- }
- that_base = astAnnul( that_base );
- bmap = astAnnul( bmap );
- }
- }
- emap = astAnnul( emap );
- that_ext = astAnnul( that_ext );
- }
- outax = astFree( outax );
- inax = astFree( inax );
- smap = astAnnul( smap );
- map = astAnnul( map );
- map1 = astAnnul( map1 );
- map2 = astAnnul( map2 );
- fs = astAnnul( fs );
- }
- this_reg1 = astAnnul( this_reg1 );
- this_reg2 = astAnnul( this_reg2 );
-
-/* If overlap could not be determined using the above implementation, try
- using the implementation inherited from the parent Region class. Use
- OverlapX rather than Overlap since a) it is OverlapX that does the work,
- and b) calling Overlap could end us in an infinite loop. */
- if( !result ) result = (*parent_overlapx)( this, that, status );
-
-/* If not OK, return zero. */
- if( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static int OverlapX( AstRegion *that, AstRegion *this, int *status ){
-/*
-* Name:
-* OverlapX
-
-* Purpose:
-* Test if two regions overlap each other.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "prism.h"
-* int OverlapX( AstRegion *that, AstRegion *this )
-
-* Class Membership:
-* Prism member function (over-rides the astOverlapX method inherited
-* from the Region class).
-
-* Description:
-* This function performs the processing for the public astOverlap
-* method and has exactly the same interface except that the order
-* of the two arguments is swapped. This is a trick to allow
-* the astOverlap method to be over-ridden by derived classes on
-* the basis of the class of either of its two arguments.
-*
-* See the astOverlap method for details of the interface.
-*/
-
-/* Local Variables; */
- int result;
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* We know that "that" is a Prism, so call the private Overlap method,
- and then modify the returned value to take account of the fact that the
- two Regions are swapped. */
- result = Overlap( that, this, status );
-
- if( result == 2 ){
- result = 3;
- } else if( result == 3 ){
- result = 2;
- }
-
- return result;
-}
-
-
-static void RegBaseBox( AstRegion *this_region, double *lbnd, double *ubnd,
- int *status ){
-/*
-* Name:
-* RegBaseBox
-
-* Purpose:
-* Returns the bounding box of an un-negated Region in the base Frame of
-* the encapsulated FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "prism.h"
-* void RegBaseBox( AstRegion *this, double *lbnd, double *ubnd,
-* int *status )
-
-* Class Membership:
-* Prism member function (over-rides the astRegBaseBox protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns the upper and lower axis bounds of a Region in
-* the base Frame of the encapsulated FrameSet, assuming the Region
-* has not been negated. That is, the value of the Negated attribute
-* is ignored.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* lbnd
-* Pointer to an array in which to return the lower axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-* ubnd
-* Pointer to an array in which to return the upper axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstPrism *this; /* Pointer to Prism structure */
- AstRegion *reg1; /* Pointer to first component Region */
- AstRegion *reg2; /* Pointer to second component Region */
- int nax; /* Number of axes in Frame */
- int neg; /* Negated flag for Prism */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the Prism structure */
- this = (AstPrism *) this_region;
-
-/* Get pointers to the component Regions. */
- GetRegions( this, ®1, ®2, &neg, status );
-
-/* The base Frame of the parent Region structure is equivalent to a
- CmpFrame containing the current Frames of the component Regions.
- Get the no. of axes in the first component Frame. */
- nax = astGetNaxes( reg1 );
-
-/* Get the bounding boxes of the component Regions in these Frame,
- storing the values in the supplied arrays. */
- astGetRegionBounds( reg1, lbnd, ubnd );
- astGetRegionBounds( reg2, lbnd + nax, ubnd + nax );
-
-/* Free resources.*/
- reg1 = astAnnul( reg1 );
- reg2 = astAnnul( reg2 );
-}
-
-static AstPointSet *RegBaseMesh( AstRegion *this_region, int *status ){
-/*
-* Name:
-* RegBaseMesh
-
-* Purpose:
-* Return a PointSet containing a mesh of points on the boundary of a
-* Region in its base Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "prism.h"
-* AstPointSet *RegBaseMesh( AstRegion *this, int *status )
-
-* Class Membership:
-* Prism member function (over-rides the astRegBaseMesh protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a PointSet containing a mesh of points on the
-* boundary of the Region. The points refer to the base Frame of
-* the encapsulated FrameSet.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the PointSet. Annul the pointer using astAnnul when it
-* is no longer needed.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-
-*/
-
-
-/* Local Variables: */
- AstPointSet *grid1; /* PointSet holding grid for region1 */
- AstPointSet *grid2; /* PointSet holding grid for region2 */
- AstPointSet *mesh1; /* PointSet holding mesh for region1 */
- AstPointSet *mesh2; /* PointSet holding mesh for region2 */
- AstPointSet *result; /* Returned pointer */
- AstPrism *this; /* The Prism structure */
- AstRegion *reg1; /* Pointer to first component Region */
- AstRegion *reg2; /* Pointer to second component Region */
- double **pg1; /* Pointer to grid1 arrays */
- double **pg2; /* Pointer to grid2 arrays */
- double **pm1; /* Pointer to mesh1 arrays */
- double **pm2; /* Pointer to mesh2 arrays */
- double **ptr; /* Pointer to returned mesh arrays */
- int gsz1; /* Preferred grid size for region1 */
- int gsz2; /* Preferred grid size for region2 */
- int hasMesh1; /* Does 1st component Region have a mesh? */
- int hasMesh2; /* Does 2nd component Region have a mesh? */
- int i; /* Index of next mesh position */
- int ii; /* Index of next results position */
- int j; /* Index of next grid position */
- int jc; /* Axis index */
- int msz1; /* Preferred mesh size for region1 */
- int msz2; /* Preferred mesh size for region2 */
- int msz; /* Original MeshSize */
- int mszp; /* MeshSize value for Prism */
- int nax1; /* Number of axes in region1 */
- int nax2; /* Number of axes in region2 */
- int nax; /* Number of axes in Prism */
-
-/* Initialise */
- result= NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the Prism structure. */
- this = (AstPrism *) this_region;
-
-/* If the Region structure contains a pointer to a PointSet holding
- a previously created mesh, return it. */
- if( this_region->basemesh ) {
- result = astClone( this_region->basemesh );
-
-/* Otherwise, create a new mesh. */
- } else {
-
-/* Get pointers to the component regions. */
- reg1 = this->region1;
- reg2 = this->region2;
-
-/* A mesh can only be produced for a Region if it is bounded when either
- negated or un-negated. See if meshes can be produced for the component
- Regions. */
- hasMesh1 = astGetBounded( reg1 );
- if( !hasMesh1 ){
- astNegate( reg1 );
- hasMesh1 = astGetBounded( reg1 );
- astNegate( reg1 );
- }
-
- hasMesh2 = astGetBounded( reg2 );
- if( !hasMesh2 ){
- astNegate( reg2 );
- hasMesh2 = astGetBounded( reg2 );
- astNegate( reg2 );
- }
-
-/* If either Region does not have a mesh we cannot produce a mesh for the
- Prism. */
- if( !hasMesh1 || !hasMesh2 ) {
- if( astOK ) astError( AST__INTER, "astRegBaseMesh(%s): No mesh "
- "can be produced for the %s bacause one of its component "
- "Regions is unbounded.", status, astGetClass( this ), astGetClass( this ) );
-
-/* Otherwise we can create a mesh for the Prism. */
- } else {
-
-/* Determine the grid sizes and mesh sizes to use for the two components.
- This aims to produce a total number of points in the returned Prism
- mesh roughly equal to the MeshSize attribute of the Prism. It also
- aims to divide the mesh points equally between the end faces of the
- prism, and the side walls. We remember that the grid used to represent
- any 1-D region always has a size of 2, regardless of the setting of
- MeshSize. */
- mszp = astGetMeshSize( this );
- msz1 = ( astGetNaxes( reg1 ) == 1 ) ? 2 : sqrt( 0.5*mszp );
- gsz2 = 0.5*mszp/msz1;
- msz2 = ( astGetNaxes( reg2 ) == 1 ) ? 2 : sqrt( 0.5*mszp );
- gsz1 = 0.5*mszp/msz2;
-
-/* First, get a boundary mesh for the second component Region defining the
- prism extrusion. For instance, if the Region is 1-dimensional, this mesh
- will consist of the two values on the Region axis: the lower and upper
- bounds of the Region. */
- msz = astTestMeshSize( reg2 ) ? astGetMeshSize( reg2 ) : -1;
- astSetMeshSize( reg2, msz2 );
- mesh2 = astRegMesh( reg2 );
-
-/* Also get a grid of points spread throughout the extent (i.e. not
- merely on the boundary) of the second Region. */
- astSetMeshSize( reg2, gsz2 );
- grid2 = astRegGrid( reg2 );
-
-/* Re-instate the original MeshSize for the second Region. */
- if( msz == -1 ) {
- astClearMeshSize( reg2 );
- } else {
- astSetMeshSize( reg2, msz );
- }
-
-/* Similarly, get a boundary mesh and a volume grid for the first Region. */
- msz = astTestMeshSize( reg1 ) ? astGetMeshSize( reg1 ) : -1;
- astSetMeshSize( reg1, msz1 );
- mesh1 = astRegMesh( reg1 );
-
- astSetMeshSize( reg1, gsz1 );
- grid1 = astRegGrid( reg1 );
-
- if( msz == -1 ) {
- astClearMeshSize( reg1 );
- } else {
- astSetMeshSize( reg1, msz );
- }
-
-/* Note the number of axes in the two component Regions. */
- nax1 = astGetNcoord( mesh1 );
- nax2 = astGetNcoord( mesh2 );
-
-/* The above mesh and grid sizes are only approximate. Find the values
- actually used. */
- msz1 = astGetNpoint( mesh1 );
- gsz1 = astGetNpoint( grid1 );
- msz2 = astGetNpoint( mesh2 );
- gsz2 = astGetNpoint( grid2 );
-
-/* Create the returned PointSet. */
- msz = gsz1*msz2 + msz1*gsz2;
- nax= astGetNaxes( this );
- result = astPointSet( msz, nax, "", status );
-
-/* Get pointers to the data in all 5 PointSets. */
- ptr = astGetPoints( result );
- pm1 = astGetPoints( mesh1 );
- pg1 = astGetPoints( grid1 );
- pm2 = astGetPoints( mesh2 );
- pg2 = astGetPoints( grid2 );
-
-/* Check pointers can be de-referenced safely. */
- if( astOK ) {
-
-/* Initialise the index of the next point to be written to the results
- array. */
- ii = 0;
-
-/* First, replicate the volume grid covering the first region at every
- point in the boundary mesh covering the second Region. */
- for( i = 0; i < msz2; i++ ) {
- for( j = 0; j < gsz1; j++, ii++ ) {
- for( jc = 0; jc < nax1; jc++ ) {
- ptr[ jc ][ ii ] = pg1[ jc ][ j ];
- }
- for( ; jc < nax; jc++ ) {
- ptr[ jc ][ ii ] = pm2[ jc - nax1 ][ i ];
- }
- }
- }
-
-/* Now, replicate the volume grid covering the second region at every
- point in the boundary mesh covering the first Region. */
- for( i = 0; i < msz1; i++ ) {
- for( j = 0; j < gsz2; j++, ii++ ) {
- for( jc = 0; jc < nax1; jc++ ) {
- ptr[ jc ][ ii ] = pm1[ jc ][ i ];
- }
- for( ; jc < nax; jc++ ) {
- ptr[ jc ][ ii ] = pg2[ jc -nax1 ][ j ];
- }
- }
- }
- }
-
-/* Free resources. */
- mesh1 = astAnnul( mesh1 );
- mesh2 = astAnnul( mesh2 );
- grid1 = astAnnul( grid1 );
- grid2 = astAnnul( grid2 );
- }
-
-/* Save the returned pointer in the Region structure so that it does not
- need to be created again next time this function is called. */
- if( astOK && result ) this_region->basemesh = astClone( result );
- }
-
-/* Annul the result if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-static AstRegion *RegBasePick( AstRegion *this_region, int naxes,
- const int *axes, int *status ){
-/*
-* Name:
-* RegBasePick
-
-* Purpose:
-* Return a Region formed by picking selected base Frame axes from the
-* supplied Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "prism.h"
-* AstRegion *RegBasePick( AstRegion *this, int naxes, const int *axes,
-* int *status )
-
-* Class Membership:
-* Prism member function (over-rides the astRegBasePick protected
-* method inherited from the Region class).
-
-* Description:
-* This function attempts to return a Region that is spanned by selected
-* axes from the base Frame of the encapsulated FrameSet of the supplied
-* Region. This may or may not be possible, depending on the class of
-* Region. If it is not possible a NULL pointer is returned.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* naxes
-* The number of base Frame axes to select.
-* axes
-* An array holding the zero-based indices of the base Frame axes
-* that are to be selected.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the Region, or NULL if no region can be formed.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFrame *frm1; /* Axes picked from the 1st encapsulated Region */
- AstFrame *frm2; /* Axes picked from the 2nd encapsulated Region */
- AstPrism *this; /* Pointer to Prism structure */
- AstRegion *result; /* Returned Region */
- int *axes1; /* Axes to pick from 1st input encapsulated Region */
- int *axes2; /* Axes to pick from 2nd input encapsulated Region */
- int i; /* Output axis index */
- int j; /* Input axis index */
- int nax1; /* No. of axes in 1st input encapsulated Region */
- int nax2; /* No. of axes in 2nd input encapsulated Region */
- int naxes1; /* No. of axes in 1st output encapsulated Region */
- int naxes2; /* No. of axes in 2nd output encapsulated Region */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the Prism information. */
- this = (AstPrism *) this_region;
-
-/* Get the number of axes in each of the two encapsulated Regions. */
- nax1 = astGetNaxes( this->region1 );
- nax2 = astGetNaxes( this->region2 );
-
-/* Allocate memory to hold the indices of the axes selected from each of
- the two encapsulated Regions. */
- axes1 = astMalloc( sizeof( *axes1 )*nax1 );
- axes2 = astMalloc( sizeof( *axes2 )*nax2 );
-
-/* Check pointers can be used safely. */
- if( astOK ) {
-
-/* Initialise the counters that count the number of axes selected from
- each of the two encapsulated Regions. */
- naxes1 = 0;
- naxes2 = 0;
-
-/* For each of the axes to be selected from the prism... */
- for( i = 0; i < naxes; i++ ) {
- j = axes[ i ];
-
-/* ... if the current selected axis is part of the first encapsulated
- Region, add its index into the array that holds the axes to be selected
- from the first encapsulated region. Increment the number of axes
- selected from the first encapsulated region. */
- if( j < nax1 ) {
- axes1[ naxes1++ ] = j;
-
-/* If the current selected axis is part of the second encapsulated Region,
- add its index into the array that holds the axes to be selected from
- the second encapsulated region. Note, the index is converted from a
- Prism axis index to a sub-region axis index by subtracting "nax1".
- Also increment the number of axes selected from the second encapsulated
- region. */
- } else {
- axes2[ naxes2++ ] = j - nax1;
- }
- }
-
-/* Pick any required axes from the first sub-region. If the result of the
- selection is not a Region, we cannot pick the required axes, so annul
- the object holding the selected axes. */
- if( naxes1 ) {
- frm1 = astPickAxes( this->region1, naxes1, axes1, NULL );
- if( frm1 && !astIsARegion( frm1 ) ) frm1 = astAnnul( frm1 );
- } else {
- frm1 = NULL;
- }
-
-/* Pick any required axes from the second sub-region. If the result of the
- selection is not a Region, we cannot pick the required axes, so annul
- the object holding the selected axes. */
- if( naxes2 ) {
- frm2 = astPickAxes( this->region2, naxes2, axes2, NULL );
- if( frm2 && !astIsARegion( frm2 ) ) frm2 = astAnnul( frm2 );
- } else {
- frm2 = NULL;
- }
-
-/* If we are selecting axes only from the first sub-region, and the above
- selection was succesful, just return a clone of the Region holding the
- axes selected from the first sub-region. */
- if( naxes1 > 0 && naxes2 == 0 && frm1 ) {
- result = astClone( frm1 );
-
-/* If we are selecting axes only from the second sub-region, and the above
- selection was succesful, just return a clone of the Region holding the
- axes selected from the second sub-region. */
- } else if( naxes1 == 0 && naxes2 > 0 && frm2 ) {
- result = astClone( frm2 );
-
-/* If we are selecting axes from both sub-regions, and both the above
- selections were succesful, joing them together into a Prism. */
- } else if( naxes1 > 0 && naxes2 > 0 && frm1 && frm2 ) {
- result = (AstRegion *) astPrism( (AstRegion *) frm1,
- (AstRegion *) frm2,
- "", status );
- }
-
-/* Free resources */
- if( frm1 ) frm1 = astAnnul( frm1 );
- if( frm2 ) frm2 = astAnnul( frm2 );
- }
-
- axes1 = astFree( axes1 );
- axes2 = astFree( axes2 );
-
-/* Return a NULL pointer if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static double *RegCentre( AstRegion *this_region, double *cen, double **ptr,
- int index, int ifrm, int *status ){
-/*
-* Name:
-* RegCentre
-
-* Purpose:
-* Re-centre a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "prism.h"
-* double *RegCentre( AstRegion *this, double *cen, double **ptr,
-* int index, int ifrm, int *status )
-
-* Class Membership:
-* Prism member function (over-rides the astRegCentre protected
-* method inherited from the Region class).
-
-* Description:
-* This function shifts the centre of the supplied Region to a
-* specified position, or returns the current centre of the Region.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* cen
-* Pointer to an array of axis values, giving the new centre.
-* Supply a NULL value for this in order to use "ptr" and "index" to
-* specify the new centre.
-* ptr
-* Pointer to an array of points, one for each axis in the Region.
-* Each pointer locates an array of axis values. This is the format
-* returned by the PointSet method astGetPoints. Only used if "cen"
-* is NULL.
-* index
-* The index of the point within the arrays identified by "ptr" at
-* which is stored the coords for the new centre position. Only used
-* if "cen" is NULL.
-* ifrm
-* Should be AST__BASE or AST__CURRENT. Indicates whether the centre
-* position is supplied and returned in the base or current Frame of
-* the FrameSet encapsulated within "this".
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If both "cen" and "ptr" are NULL then a pointer to a newly
-* allocated dynamic array is returned which contains the centre
-* coords of the Region. This array should be freed using astFree when
-* no longer needed. If either of "ptr" or "cen" is not NULL, then a
-* NULL pointer is returned.
-
-* Notes:
-* - Some Region sub-classes do not have a centre. Such classes will report
-* an AST__INTER error code if this method is called with either "ptr" or
-* "cen" not NULL. If "ptr" and "cen" are both NULL, then no error is
-* reported if this method is invoked on a Region of an unsuitable class,
-* but NULL is always returned.
-*/
-
-/* Local Variables: */
- AstPrism *this; /* Pointer to Prism structure */
- AstRegion *reg1; /* Pointer to first component Region */
- AstRegion *reg2; /* Pointer to second component Region */
- double *bc; /* Base Frame centre position */
- double *cen1; /* Centre of first component Region */
- double *cen2; /* Centre of second component Region */
- double *result; /* Returned pointer */
- double *tmp; /* Temporary array pointer */
- double *total; /* Pointer to total base Frame centre array */
- int i; /* Coordinate index */
- int nax1; /* Number of axes in first component Region */
- int nax2; /* Number of axes in second component Region */
- int ncb; /* Number of base frame coordinate values per point */
- int ncc; /* Number of current frame coordinate values per point */
- int neg; /* Prism negated flag */
-
-/* Initialise */
- result = NULL;
-
-/* Check the local error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the Prism structure. */
- this = (AstPrism *) this_region;
-
-/* Get the component Regions, and the Negated flag for the Prism. */
- GetRegions( this, ®1, ®2, &neg, status );
-
-/* Get the number of current Frame axes in each component Region. The sum
- of these will equal the number of base Frame axes in the parent Region
- structure. */
- nax1 = astGetNaxes( reg1 );
- nax2 = astGetNaxes( reg2 );
- ncb = nax1 + nax2;
-
-/* If we are getting (not setting) the current centre... */
- if( !ptr && !cen ) {
-
-/* Get the centre from the two component Regions in their current Frames. */
- cen1 = astRegCentre( reg1, NULL, NULL, 0, AST__CURRENT );
- cen2 = astRegCentre( reg2, NULL, NULL, 0, AST__CURRENT );
-
-/* If both component regions are re-centerable, join the two centre
- arrays together into a single array. */
- if( cen1 && cen2 ) {
- total = astMalloc( sizeof(double)*(size_t)ncb );
- if( total ) {
- for( i = 0; i < nax1; i++ ) total[ i ] = cen1[ i ];
- for( i = 0; i < nax2; i++ ) total[ i + nax1 ] = cen2[ i ];
-
-/* The current Frames of the component Regions correspond to the base
- Frame of the parent Region structure. If the original centre is
- required in the current Frame, transform it using the base->current
- Mapping from the parent Region structure. */
- if( ifrm == AST__CURRENT ) {
- result = astRegTranPoint( this_region, total, 1, 1 );
- total = astFree( total );
- } else {
- result = total;
- }
- }
- }
-
-/* Free the individual centre arrays. */
- cen1 = astFree( cen1 );
- cen2 = astFree( cen2 );
-
-/* If we are setting a new centre... */
- } else {
-
-/* If the new centre is supplied in the current Frame of the parent
- Region structure, transform it into the base Frame (i.e. the Frames
- represented by the component Regions). */
- if( ifrm == AST__CURRENT ) {
- if( cen ) {
- bc = astRegTranPoint( this_region, cen, 1, 0 );
- } else {
- ncc = astGetNaxes( this_region );
- tmp = astMalloc( sizeof( double)*(size_t)ncc );
- if( astOK ) {
- for( i = 0; i < ncc; i++ ) tmp[ i ] = ptr[ i ][ index ];
- }
- bc = astRegTranPoint( this_region, tmp, 1, 0 );
- tmp = astFree( tmp );
- }
-
- } else {
- if( cen ) {
- bc = cen;
- } else {
- bc = astMalloc( sizeof( double)*(size_t)ncb );
- if( astOK ) {
- for( i = 0; i < ncb; i++ ) bc[ i ] = ptr[ i ][ index ];
- }
- }
- }
-
-/* Set the centre in the two component Regions in their current Frames. */
- astRegCentre( reg1, bc, NULL, 0, AST__CURRENT );
- astRegCentre( reg2, bc + nax1, NULL, 0, AST__CURRENT );
-
-/* Free resources. */
- if( bc != cen ) bc = astFree( bc );
- }
-
- reg1 = astAnnul( reg1 );
- reg2 = astAnnul( reg2 );
-
-/* Return the result. */
- return result;
-}
-
-static int RegPins( AstRegion *this_region, AstPointSet *pset, AstRegion *unc,
- int **mask, int *status ){
-/*
-* Name:
-* RegPins
-
-* Purpose:
-* Check if a set of points fall on the boundary of a given Prism.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "prism.h"
-* int RegPins( AstRegion *this, AstPointSet *pset, AstRegion *unc,
-* int **mask, int *status )
-
-* Class Membership:
-* Prism member function (over-rides the astRegPins protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a flag indicating if the supplied set of
-* points all fall on the boundary of the given Prism.
-*
-* Some tolerance is allowed, as specified by the uncertainty Region
-* stored in the supplied Prism "this", and the supplied uncertainty
-* Region "unc" which describes the uncertainty of the supplied points.
-
-* Parameters:
-* this
-* Pointer to the Prism.
-* pset
-* Pointer to the PointSet. The points are assumed to refer to the
-* base Frame of the FrameSet encapsulated by "this".
-* unc
-* Pointer to a Region representing the uncertainties in the points
-* given by "pset". The Region is assumed to represent the base Frame
-* of the FrameSet encapsulated by "this". Zero uncertainity is assumed
-* if NULL is supplied.
-* mask
-* Pointer to location at which to return a pointer to a newly
-* allocated dynamic array of ints. The number of elements in this
-* array is equal to the value of the Npoint attribute of "pset".
-* Each element in the returned array is set to 1 if the
-* corresponding position in "pset" is on the boundary of the Region
-* and is set to zero otherwise. A NULL value may be supplied
-* in which case no array is created. If created, the array should
-* be freed using astFree when no longer needed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the points all fall on the boundary of the given
-* Region, to within the tolerance specified. Zero otherwise.
-
-*/
-
-/* Local variables: */
- AstPointSet *ps1; /* Points projected into 1st component Region */
- AstPointSet *ps1b; /* "ps1" in base Frame of 1st component Region */
- AstPointSet *ps1b2; /* "ps1b" transformed using 1st Region */
- AstPointSet *ps2b2; /* "ps2b" transformed using 2nd Region */
- AstPointSet *ps2; /* Points projected into 2nd component Region */
- AstPointSet *ps2b; /* "ps2" in base Frame of 2nd component Region */
- AstPrism *this; /* Pointer to the Prism structure. */
- AstRegion *reg1; /* Pointer to first component Region */
- AstRegion *reg2; /* Pointer to second component Region */
- AstRegion *unc1; /* Base Frame uncertainty in 1st component Region */
- AstRegion *unc2; /* Base Frame uncertainty in 2nd component Region */
- double **ptr1b2; /* Pointer to axis values in "ps1b2" */
- double **ptr2b2; /* Pointer to axis values in "ps2b2" */
- int *mask1; /* Mask for first component boundary */
- int *mask2; /* Mask for second component boundary */
- int cl1; /* Original Closed flag for reg1 */
- int cl2; /* Original Closed flag for reg2 */
- int i; /* Point index */
- int j; /* Axis index */
- int nax1; /* Number of axes in first component Region */
- int nax2; /* Number of axes in second component Region */
- int np; /* Number of points in supplied PointSet */
- int on; /* Is this point on the Prism boundary? */
- int result; /* Returned flag */
-
-/* Initialise */
- result = 0;
- if( mask ) *mask = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return result;
-
-/* Get a pointer to the Prism structure. */
- this = (AstPrism *) this_region;
-
-/* Get pointers to the two component Regions. */
- reg1 = this->region1;
- reg2 = this->region2;
-
-/* Temporarily ensure the components are closed. */
- cl1 = astTestClosed( reg1 ) ? astGetClosed( reg1 ) : INT_MAX;
- cl2 = astTestClosed( reg2 ) ? astGetClosed( reg2 ) : INT_MAX;
- astSetClosed( reg1, cl1 );
- astSetClosed( reg2, cl2 );
-
-/* A point in the coordinate system represented by the Prism is on the
- boundary of the Prism if:
- 1) it is on the boundary of one of the coomponent Regions AND
- 2) it is on or within the boundary of the other component Region.
-
- First look for points on the boundary of the first component Region.
- Create a PointSet holding just the axes from the supplied PointSet
- which relate to the first component Region. */
- np = astGetNpoint( pset );
- nax1 = astGetNaxes( reg1 );
- ps1 = astPointSet( np, nax1, "", status );
- astSetSubPoints( pset, 0, 0, ps1 );
-
-/* Get a mask which indicates if each supplied point is on or off the
- boundary of the first component Region. astRegPins expects its "pset"
- argument to contain positions in the base Frame of the Region, so
- we must first transform the supplied points into the base Frame of
- "reg1". We must also get the uncertainty in the base Frame of the
- component Region. */
- ps1b = astRegTransform( reg1, ps1, 0, NULL, NULL );
- unc1 = astGetUncFrm( reg1, AST__BASE );
- astRegPins( reg1, ps1b, unc1, &mask1 );
-
-/* Also determine which of the points are on or in the boundary by using
- "reg1" as a Mapping to transform the supplied points. */
- ps1b2 = astTransform( reg1, ps1b, 1, NULL );
-
-/* Do the same for the second component Region */
- nax2 = astGetNaxes( reg2 );
- ps2 = astPointSet( np, nax2, "", status );
- astSetSubPoints( pset, 0, nax1, ps2 );
- ps2b = astRegTransform( reg2, ps2, 0, NULL, NULL );
- unc2 = astGetUncFrm( reg2, AST__BASE );
- astRegPins( reg2, ps2b, unc2, &mask2 );
- ps2b2 = astTransform( reg2, ps2b, 1, NULL );
-
-/* Get pointers to the data in all the relevant PointSets. */
- ptr1b2 = astGetPoints( ps1b2 );
- ptr2b2 = astGetPoints( ps2b2 );
-
-/* Check pointers can be dereferenced safely. */
- if( astOK ) {
-
-/* Assume all points are on the boundary of the Prism. */
- result = 1;
-
-/* Check each point. */
- for( i = 0; i < np; i++ ) {
-
-/* Assume this point is on the boundary of the Prism. */
- on = 1;
-
-/* If this point is on the boundary of both component Regions, it is on
- the boundary of the Prism. If it is on the boundary of the first
- component Region but not on the boundary of the second, then it is
- still on the boundary of the Prism if it is within the volume
- reporesented by the second. */
- if( mask1[ i ] ) {
- if( !mask2[ i ] ) {
- for( j = 0; j < nax2; j++ ) {
- if( ptr2b2[ j ][ i ] == AST__BAD ) {
- on = 0;
- break;
- }
- }
- }
-
-/* If this point is on the boundary of the second component Region but
- not the first, it is on the boundary of the Prism if it is within the
- volume reporesented by the first. */
- } else {
- if( mask2[ i ] ) {
- for( j = 0; j < nax1; j++ ) {
- if( ptr1b2[ j ][ i ] == AST__BAD ) {
- on = 0;
- break;
- }
- }
-
-/* If this point is on the boundary of neither component Region, it is not
- on the boundary of the Prism. */
- } else {
- on = 0;
- }
- }
-
-/* Use "mask1" to return the Prism's mask. Clear the returned flag if
- this point is not on the boundary of the Prism. */
- mask1[ i ] = on;
- if( !on ) result = 0;
- }
- }
-
-/* Re-instate the original values of the Closed attribute for the
- component Regions. */
- if( cl1 == INT_MAX ) {
- astClearClosed( reg1 );
- } else {
- astSetClosed( reg1, cl1 );
- }
- if( cl2 == INT_MAX ) {
- astClearClosed( reg2 );
- } else {
- astSetClosed( reg2, cl2 );
- }
-
-/* Return "mask1" as the Prism's mask if required. Otherwise free it. */
- if( mask ) {
- *mask = mask1;
- } else {
- mask1 = astFree( mask1 );
- }
-
-/* Free other resources */
- mask2 = astFree( mask2 );
- ps1 = astAnnul( ps1 );
- ps1b = astAnnul( ps1b );
- ps1b2 = astAnnul( ps1b2 );
- ps2 = astAnnul( ps2 );
- unc1 = astAnnul( unc1 );
- ps2b = astAnnul( ps2b );
- ps2b2 = astAnnul( ps2b2 );
- unc2 = astAnnul( unc2 );
-
-/* If an error has occurred, return zero. */
- if( !astOK ) {
- result = 0;
- if( mask ) *mask = astAnnul( *mask );
- }
-
-/* Return the result. */
- return result;
-}
-
-static void RegClearAttrib( AstRegion *this_region, const char *attrib,
- char **base_attrib, int *status ) {
-/*
-* Name:
-* RegClearAttrib
-
-* Purpose:
-* Clear an attribute value for a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "prism.h"
-* void RegClearAttrib( AstRegion *this, const char *attrib,
-* char **base_attrib, int *status )
-
-* Class Membership:
-* Prism member function (over-rides the astRegClearAttrib method
-* inherited from the Region class).
-
-* Description:
-* This function clears the value of a named attribute in both the base
-* and current Frame in the FrameSet encapsulated within a Region, without
-* remapping either Frame.
-*
-* No error is reported if the attribute is not recognised by the base
-* Frame.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* attrib
-* Pointer to a null terminated string holding the attribute name.
-* NOTE, IT SHOULD BE ENTIRELY LOWER CASE.
-* base_attrib
-* Address of a location at which to return a pointer to the null
-* terminated string holding the attribute name which was cleared in
-* the base Frame of the encapsulated FrameSet. This may differ from
-* the supplied attribute if the supplied attribute contains an axis
-* index and the current->base Mapping in the FrameSet produces an
-* axis permutation. The returned pointer should be freed using
-* astFree when no longer needed. A NULL pointer may be supplied in
-* which case no pointer is returned.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstPrism *this;
- AstRegion *creg;
- char *batt;
- char buf1[ 100 ];
- char buf2[ 255 ];
- int axis;
- int len;
- int nax1;
- int nc;
- int rep;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the Prism structure. */
- this = (AstPrism *) this_region;
-
-/* Use the RegClearAttrib method inherited from the parent class to clear the
- attribute in the current and base Frames in the FrameSet encapsulated by
- the parent Region structure. */
- (*parent_regclearattrib)( this_region, attrib, &batt, status );
-
-/* We now propagate the setting down to the component Regions. The current
- Frames in the component Regions together form a CmpFrame which is
- equivalent to the base Frame in the parent FrameSet. Switch off error
- reporting whilst we apply the setting to the component Regions. */
- rep = astReporting( 0 );
-
-/* If the setting which was applied to the base Frame of the parent FrameSet
- is qualified by an axis index, modify the axis index to refer to component
- Region which defines the axis. First parse the base Frame attribute setting
- to locate any axis index. */
- len = strlen( batt );
- if( nc = 0, ( 2 == astSscanf( batt, "%[^(](%d) %n", buf1, &axis,
- &nc ) ) && ( nc >= len ) ) {
-
-/* If found, convert the axis index from one-based to zero-based. */
- axis--;
-
-/* Get a pointer to the component Region containing the specified axis, and
- create a new setting with the same attribute name but with the axis index
- appropriate to the component Region which defines the axis. */
- nax1 = astGetNaxes( this->region1 );
- if( axis < nax1 ) {
- creg = this->region1;
- } else {
- creg = this->region2;
- axis -= nax1;
- }
- sprintf( buf2, "%s(%d)", buf1, axis + 1 );
-
-/* Apply the setting to the relevant component Region. */
- astRegClearAttrib( creg, buf2, NULL );
-
-/* If the setting is not qualified by an axis index, apply it to both
- component Regions. */
- } else {
- astRegClearAttrib( this->region1, batt, NULL );
- astRegClearAttrib( this->region2, batt, NULL );
- }
-
-/* Annul the error if the attribute was not recognised by the component
- Regions. Then switch error reporting back on. */
- if( astStatus == AST__BADAT ) astClearStatus;
- astReporting( rep );
-
-/* If required, return the base Frame setting string. Otherwise free it. */
- if( base_attrib ) {
- *base_attrib = batt;
- } else {
- batt = astFree( batt );
- }
-
-}
-
-static void RegSetAttrib( AstRegion *this_region, const char *setting,
- char **base_setting, int *status ) {
-/*
-* Name:
-* RegSetAttrib
-
-* Purpose:
-* Set an attribute value for a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "prism.h"
-* void RegSetAttrib( AstRegion *this, const char *setting,
-* char **base_setting, int *status )
-
-* Class Membership:
-* Prism method (over-rides the astRegSetAttrib method inherited from
-* the Region class).
-
-* Description:
-* This function assigns an attribute value to both the base and
-* current Frame in the FrameSet encapsulated within a Region, without
-* remapping either Frame.
-*
-* No error is reported if the attribute is not recognised by the base
-* Frame.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* setting
-* Pointer to a null terminated attribute setting string. NOTE, IT
-* SHOULD BE ENTIRELY LOWER CASE. The supplied string will be
-* interpreted using the public interpretation implemented by
-* astSetAttrib. This can be different to the interpretation of the
-* protected accessor functions. For instance, the public
-* interpretation of an unqualified floating point value for the
-* Epoch attribute is to interpet the value as a gregorian year,
-* but the protected interpretation is to interpret the value as an
-* MJD.
-* base_setting
-* Address of a location at which to return a pointer to the null
-* terminated attribute setting string which was applied to the
-* base Frame of the encapsulated FrameSet. This may differ from
-* the supplied setting if the supplied setting contains an axis
-* index and the current->base Mapping in the FrameSet produces an
-* axis permutation. The returned pointer should be freed using
-* astFree when no longer needed. A NULL pointer may be supplied in
-* which case no pointer is returned.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstPrism *this;
- AstRegion *creg;
- char *bset;
- char buf1[ 100 ];
- char buf2[ 255 ];
- int axis;
- int len;
- int nax1;
- int nc;
- int rep;
- int value;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the Prism structure. */
- this = (AstPrism *) this_region;
-
-/* Use the RegSetAttrib method inherited from the parent class to apply the
- setting to the current and base Frames in the FrameSet encapsulated by the
- parent Region structure. */
- (*parent_regsetattrib)( this_region, setting, &bset, status );
-
-/* We now propagate the setting down to the component Regions. The current
- Frames in the component Regions together form a CmpFrame which is
- equivalent to the base Frame in the parent FrameSet. Switch off error
- reporting whilst we apply the setting to the component Regions. */
- rep = astReporting( 0 );
-
-/* If the setting which was applied to the base Frame of the parent FrameSet
- is qualified by an axis index, modify the axis index to refer to component
- Region which defines the axis. First parse the base Frame attribute setting
- to locate any axis index. */
- len = strlen( bset );
- if( nc = 0, ( 2 == astSscanf( bset, "%[^(](%d)= %n%*s %n", buf1, &axis,
- &value, &nc ) ) && ( nc >= len ) ) {
-
-/* If found, convert the axis index from one-based to zero-based. */
- axis--;
-
-/* Get a pointer to the component Region containing the specified axis, and
- create a new setting with the same attribute name but with the axis index
- appropriate to the component Region which defines the axis. */
- nax1 = astGetNaxes( this->region1 );
- if( axis < nax1 ) {
- creg = this->region1;
- } else {
- creg = this->region2;
- axis -= nax1;
- }
- sprintf( buf2, "%s(%d)=%s", buf1, axis + 1, bset + value );
-
-/* Apply the setting to the relevant component Region. */
- astRegSetAttrib( creg, buf2, NULL );
-
-/* If the setting is not qualified by an axis index, apply it to both
- component Regions. */
- } else {
- astRegSetAttrib( this->region1, bset, NULL );
- astRegSetAttrib( this->region2, bset, NULL );
- }
-
-/* Annul the error if the attribute was not recognised by the component
- Regions. Then switch error reporting back on. */
- if( astStatus == AST__BADAT ) astClearStatus;
- astReporting( rep );
-
-/* If required, return the base Frame setting string. Otherwise free it. */
- if( base_setting ) {
- *base_setting = bset;
- } else {
- bset = astFree( bset );
- }
-
-}
-
-static void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status ) {
-/*
-* Name:
-* SetRegFS
-
-* Purpose:
-* Stores a new FrameSet in a Region
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "prism.h"
-* void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status )
-
-* Class Membership:
-* Prism method (over-rides the astSetRegFS method inherited from
-* the Region class).
-
-* Description:
-* This function creates a new FrameSet and stores it in the supplied
-* Region. The new FrameSet contains two copies of the supplied
-* Frame, connected by a UnitMap.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* frm
-* The Frame to use.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstFrame *cfrm; /* Frame containing required axes */
- AstRegion *creg; /* Pointer to component Region structure */
- int *axes; /* Pointer to array of axis indices */
- int i; /* Loop count */
- int nax1; /* No.of axes in 1st component Frame */
- int nax2; /* No.of axes in 2nd component Frame */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Invoke the parent method to store the FrameSet in the parent Region
- structure. */
- (* parent_setregfs)( this_region, frm, status );
-
-/* If either component Region has a dummy FrameSet use this method
- recursively to give them a FrameSet containing the corresponding axes
- from the supplied Frame. */
- creg = ((AstPrism *) this_region )->region1;
- if( creg ) {
- nax1 = astGetNaxes( creg );
- if( !astGetRegionFS( creg ) ) {
- axes = astMalloc( sizeof( int )*(size_t) nax1 );
- if( astOK ) for( i = 0; i < nax1; i++ ) axes[ i ] = i;
- cfrm = astPickAxes( frm, nax1, axes, NULL );
- astSetRegFS( creg, cfrm );
- axes = astFree( axes );
- cfrm = astAnnul( cfrm );
- }
-
- } else {
- nax1 = 0;
- }
-
- creg = ((AstPrism *) this_region )->region2;
- if( creg && !astGetRegionFS( creg ) ) {
- nax2 = astGetNaxes( creg );
- axes = astMalloc( sizeof( int )*(size_t) nax2 );
- if( astOK ) for( i = 0; i < nax2; i++ ) axes[ i ] = nax1 + i;
- cfrm = astPickAxes( frm, nax2, axes, NULL );
- astSetRegFS( creg, cfrm );
- axes = astFree( axes );
- cfrm = astAnnul( cfrm );
- }
-
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* Simplify
-
-* Purpose:
-* Simplify a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* AstMapping *Simplify( AstMapping *this, int *status )
-
-* Class Membership:
-* Prism method (over-rides the astSimplify method inherited from
-* the Region class).
-
-* Description:
-* This function simplifies a Prism to eliminate redundant
-* computational steps, or to merge separate steps which can be
-* performed more efficiently in a single operation.
-
-* Parameters:
-* this
-* Pointer to the original Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A new pointer to the (possibly simplified) Region.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-
-* Deficiencies:
-* - Currently, this function does not attempt to map the component
-* Regions into the current Frame of the parent Region structure.
-
-*/
-
-/* Local Variables: */
- AstFrame *cfrm; /* Current Frame */
- AstFrame *newfrm1; /* Current Frame axes for reg1 */
- AstFrame *newfrm2; /* Current Frame axes for reg2 */
- AstFrameSet *fs; /* Parent FrameSet */
- AstMapping *bcmap; /* Base->current Mapping */
- AstMapping *nmap1; /* Reg1->current Mapping */
- AstMapping *map1; /* First component Region from a CmpMap */
- AstMapping *map2; /* Second component Region from a CmpMap */
- int series; /* Apply component Mappings in series? */
- int invert1; /* Use inverted first component Mapping? */
- int invert2; /* Use inverted second component Mapping? */
- AstMapping *nmap2; /* Reg2->current Mapping */
- AstMapping *result; /* Result pointer to return */
- AstCmpMap *cmpmap; /* Result pointer to return */
- AstMapping *smap; /* Simplified CmpMap */
- AstRegion *new2; /* New simplified Region */
- AstRegion *new; /* New Region */
- AstRegion *newreg1; /* Reg1 mapped into current Frame */
- AstRegion *newreg2; /* Reg2 mapped into current Frame */
- AstRegion *reg1; /* First component Region */
- AstRegion *reg2; /* Second component Region */
- AstRegion *reg; /* This Region */
- AstRegion *snewreg1; /* Simplified newreg1 */
- AstRegion *snewreg2; /* Simplified newreg2 */
- AstRegion *unc; /* Uncertainty Region from supplied Prism */
- int *axin; /* Indices of Mapping inputs to use */
- int *axout1; /* Indices of cfrm axes corresponding to reg1 */
- int *axout2; /* Indices of cfrm axes corresponding to reg2 */
- int *perm; /* Axis permutation array */
- int i; /* Loop count */
- int nax1; /* Number of axes in first component Region */
- int nax2; /* Number of axes in second component Region */
- int naxt; /* Total number of axes in current Frame */
- int naxout1; /* Number of current axes for reg1 */
- int naxout2; /* Number of current axes for reg2 */
- int neg; /* Negated flag for supplied Prism */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the Region structure */
- reg = (AstRegion *) this_mapping;
-
-/* Get the component Regions, and the Negated flag for the Prism. */
- GetRegions( (AstPrism *) this_mapping, ®1, ®2, &neg, status );
-
-/* The above Regions describe areas within the base Frame of the FrameSet
- encapsulated by the parent Region structure. Get the current Frame in
- this FrameSet and the base->current Mapping. */
- fs = reg->frameset;
- cfrm = astGetFrame( fs, AST__CURRENT );
- bcmap = astGetMapping( fs, AST__BASE, AST__CURRENT );
-
-/* Combine the two Regions into a parallel CmpMap (this uses the fact
- that a Region is a type of Mapping). Then simplify the CmpMap. This
- will result in the astMapMerge methods defined by sub-classes of
- Regions being used to merge adjacent regions. */
- cmpmap = astCmpMap( reg1, reg2, 0, "", status );
- smap = astSimplify( cmpmap );
- cmpmap = astAnnul( cmpmap );
-
-/* Initially, assume we cannot form a new Region from the simplified
- CmpMap. */
- new = NULL;
-
-/* If the result is a region, use it. */
- if( astIsARegion( smap ) ) {
- new = astClone( smap );
-
-/* If the result is a parallel CmpMap, get its two components and check
- they are Regions. If so, and if they are not the same as the original
- two component Regions, form a new Prism from them. */
- } else if( astIsACmpMap( smap ) ) {
- astDecompose( smap, &map1, &map2, &series, &invert1, &invert2 );
- if( ! series && astIsARegion( map1 ) && astIsARegion( map2 ) ) {
- if( (AstRegion *) map1 != reg1 || (AstRegion *) map2 != reg2 ) {
- new = (AstRegion *) astPrism( (AstRegion *) map1,
- (AstRegion *) map2, "", status );
- }
- }
-
-/* Free resources */
- map1 = astAnnul( map1 );
- map2 = astAnnul( map2 );
- }
-
- smap = astAnnul( smap );
-
-/* If the above produced a simplified Region, map it into the current Frame
- of "this" and simplify it. */
- if( new ) {
- new2 = astMapRegion( new, bcmap, cfrm );
- (void) astAnnul( new );
- new = astSimplify( new2 );
- new2 = astAnnul( new2 );
-
-/* If the above did not produced a result, try a different approach. */
- } else {
-
-/* Get the number of axes in each component Region. */
- nax1 = astGetNaxes( reg1 );
- nax2 = astGetNaxes( reg2 );
-
-/* Use astMapSplit to see if the axes of the first component Region correspond
- to a distinct set of axes within the current Frame. If this is the case,
- then a Mapping is returned by astMapSplit which maps the axes of the first
- component Region into the corresponding current Frame axes. Also returned
- is a list of the axes within the current Frame which correspnd to the
- axes of the first component Region. */
- nmap1 = NULL;
- axout1 = NULL;
- axin = astMalloc( sizeof( int )*(size_t)nax1 );
- if( astOK ) {
- for( i = 0; i < nax1; i++ ) axin[ i ] = i;
- axout1 = astMapSplit( bcmap, nax1, axin, &nmap1 );
- axin = astFree( axin );
- }
-
-/* Do the same for the second component. */
- nmap2 = NULL;
- axout2 = NULL;
- axin = astMalloc( sizeof( int )*(size_t)nax2 );
- if( astOK ) {
- for( i = 0; i < nax2; i++ ) axin[ i ] = i + nax1;
- axout2 = astMapSplit( bcmap, nax2, axin, &nmap2 );
- axin = astFree( axin );
- }
-
-/* Assume for the moment that the component Regions cannot be simplified.
- In this case we will use a clone of the supplied Prism. */
- new = astClone( this_mapping );
-
-/* Determine the number of outputs from these Mappings. */
- if( nmap1 ){
- naxout1 = astGetNout( nmap1 );
- } else {
- naxout1 = 0;
- }
- if( nmap2 ){
- naxout2 = astGetNout( nmap2 );
- } else {
- naxout2 = 0;
- }
-
-/* Determine the number of axes in the current Frame of the Prism. */
- naxt = astGetNout( bcmap );
-
-/* If the second component does not contribute any axes to the total
- Prism, we can ignore it. */
- if( naxout1 == naxt && naxout2 == 0 ) {
- newfrm1 = astPickAxes( cfrm, naxout1, axout1, NULL );
- newreg1 = astMapRegion( reg1, nmap1, newfrm1 );
- (void) astAnnul( new );
- new = astSimplify( newreg1 );
- if( neg ) astNegate( new );
- perm = astMalloc( sizeof( int )*(size_t) ( naxout1 ) );
- if( astOK ) {
- for( i = 0; i < naxout1; i++ ) perm[ i ] = axout1[ i ];
- astPermAxes( new, perm );
- perm = astFree( perm );
- }
- newfrm1 = astAnnul( newfrm1 );
- newreg1 = astAnnul( newreg1 );
-
-/* If the first component does not contribute any axes to the total
- Prism, we can ignore it. */
- } else if( naxout1 == 0 && naxout2 == naxt ) {
- newfrm2 = astPickAxes( cfrm, naxout2, axout2, NULL );
- newreg2 = astMapRegion( reg2, nmap2, newfrm2 );
- (void) astAnnul( new );
- new = astSimplify( newreg2 );
- if( neg ) astNegate( new );
- perm = astMalloc( sizeof( int )*(size_t) ( naxout2 ) );
- if( astOK ) {
- for( i = 0; i < naxout2; i++ ) perm[ i ] = axout2[ i ];
- astPermAxes( new, perm );
- perm = astFree( perm );
- }
- newfrm2 = astAnnul( newfrm2 );
- newreg2 = astAnnul( newreg2 );
-
-/* If both component Regions correspond to a distinct subspace within the
- current Frame, then we can try to express each component Region within
- the current Frame. */
- } else if( nmap1 && nmap2 ) {
-
-/* Create a Frame representing the subspace of the current Frame which
- corresponds to the axes of the first component Region. */
- newfrm1 = astPickAxes( cfrm, naxout1, axout1, NULL );
-
-/* Remap the first component Region so that it represents an area in this
- subspace. */
- newreg1 = astMapRegion( reg1, nmap1, newfrm1 );
-
-/* Attempt to simplify the remapped Region. */
- snewreg1 = astSimplify( newreg1 );
-
-/* Do the same for the second component Region. */
- naxout2 = astGetNout( nmap2 );
- newfrm2 = astPickAxes( cfrm, naxout2, axout2, NULL );
- newreg2 = astMapRegion( reg2, nmap2, newfrm2 );
- snewreg2 = astSimplify( newreg2 );
-
-/* If either component Region was simplified, create a new Prism from the
- simplified Regions. */
- if( snewreg1 != newreg1 || snewreg2 != newreg2 ) {
- (void) astAnnul( new );
- new = (AstRegion *) astPrism( snewreg1, snewreg2, "", status );
-
-/* Ensure the new Prism has the same Negated attribute as the original. */
- if( neg ) astNegate( new );
-
-/* Ensure that the new Prism has the same axis order as the original
- current Frame. */
- perm = astMalloc( sizeof( int )*(size_t) ( naxout1 + naxout2 ) );
- if( astOK ) {
- for( i = 0; i < naxout1; i++ ) perm[ i ] = axout1[ i ];
- for( ; i < naxout1 + naxout2; i++ ) perm[ i ] = axout2[ i - naxout1 ];
- astPermAxes( new, perm );
- perm = astFree( perm );
- }
- }
-
-/* Free resources. */
- newfrm1 = astAnnul( newfrm1 );
- newfrm2 = astAnnul( newfrm2 );
- newreg1 = astAnnul( newreg1 );
- newreg2 = astAnnul( newreg2 );
- snewreg1 = astAnnul( snewreg1 );
- snewreg2 = astAnnul( snewreg2 );
- }
-
-/* Free resources. */
- if( axout1 ) axout1 = astFree( axout1 );
- if( axout2 ) axout2 = astFree( axout2 );
- if( nmap1 ) nmap1 = astAnnul( nmap1 );
- if( nmap2 ) nmap2 = astAnnul( nmap2 );
- }
-
-/* If we have created a new Region, ensure any user-supplied uncertainty
- that has been stored explicitly with the supplied Prism is passed on
- to the new Region. */
- if( new ) {
- if( astTestUnc( reg ) ) {
- unc = astGetUnc( reg, 0 );
- astSetUnc( new, unc );
- }
-
-/* Now invoke the parent Simplify method inherited from the Region class.
- This will simplify the encapsulated FrameSet and uncertainty Region. */
- result = (*parent_simplify)( (AstMapping *) new, status );
- new = astAnnul( new );
- }
-
-/* Free resources. */
- reg1 = astAnnul( reg1 );
- reg2 = astAnnul( reg2 );
- cfrm = astAnnul( cfrm );
- bcmap = astAnnul( bcmap );
-
-/* If any simplification could be performed, copy Region attributes from
- the supplied Region to the returned Region, and return a pointer to it. */
- if( result != this_mapping ) astRegOverlay( result, (AstRegion *) this_mapping, 0 );
-
-/* If an error occurred, annul the returned Mapping. */
- if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a Prism to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "prism.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* Prism member function (over-rides the astTransform method inherited
-* from the Region class).
-
-* Description:
-* This function takes a Prism and a set of points encapsulated in a
-* PointSet and transforms the points so as to apply the required Region.
-* This implies applying each of the Prism's component Regions in turn,
-* either in series or in parallel.
-
-* Parameters:
-* this
-* Pointer to the Prism.
-* in
-* Pointer to the PointSet associated with the input coordinate values.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of coordinates for the Prism being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstCmpMap *map; /* CmpMap containing component Regions */
- AstPointSet *psb; /* Pointer to base Frame PointSet */
- AstPointSet *pset_tmp; /* Pointer to PointSet holding base Frame positions*/
- AstPointSet *result; /* Pointer to output PointSet */
- AstPrism *this; /* Pointer to the Prism structure */
- AstRegion *reg1; /* Pointer to first component Region */
- AstRegion *reg2; /* Pointer to second component Region */
- double **ptr_out; /* Pointer to output coordinate data */
- double **ptrb; /* Pointer to base Frame axis values */
- int coord; /* Zero-based index for coordinates */
- int good; /* Is the point inside the Prism? */
- int ncoord_out; /* No. of coordinates per output point */
- int ncoord_tmp; /* No. of coordinates per base Frame point */
- int neg; /* Has Prism been negated? */
- int npoint; /* No. of points */
- int point; /* Loop counter for points */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a Pointer to the Prism structure */
- this = (AstPrism *) this_mapping;
-
-/* Get the component Regions, and the Negated value for the Prism. */
- GetRegions( this, ®1, ®2, &neg, status );
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Region class. This function validates
- all arguments and generates an output PointSet if necessary, containing
- a copy of the input PointSet. */
- result = (*parent_transform)( this_mapping, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- calculations needed to generate the output coordinate values. */
-
-/* First use the encapsulated FrameSet in the parent Region structure to
- transform the supplied positions from the current Frame in the
- encapsulated FrameSet (the Frame represented by the Prism), to the
- base Frame (the Frame in which the component Regions are defined). Note,
- the returned pointer may be a clone of the "in" pointer, and so we
- must be carefull not to modify the contents of the returned PointSet. */
- pset_tmp = astRegTransform( this, in, 0, NULL, NULL );
-
-/* Form a parallel CmpMap from the two component Regions. */
- map = astCmpMap( reg1, reg2, 0, "", status );
-
-/* Apply the Mapping to the PointSet containing positions in the base Frame
- of the parent Region structure (which is the same as the combination of
- the current Frames of the component Regions). */
- psb = astTransform( map, pset_tmp, 1, NULL );
-
-/* Annul the Mapping pointer. */
- map = astAnnul( map );
-
-/* Determine the numbers of points and coordinates per point for these base
- Frame PointSets and obtain pointers for accessing the base Frame and output
- coordinate values. */
- npoint = astGetNpoint( pset_tmp );
- ncoord_tmp = astGetNcoord( pset_tmp );
- ptrb = astGetPoints( psb );
- ncoord_out = astGetNcoord( result );
- ptr_out = astGetPoints( result );
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
- if ( astOK ) {
- for ( point = 0; point < npoint; point++ ) {
- good = 1;
-
- for ( coord = 0; coord < ncoord_tmp; coord++ ) {
- if( ptrb[ coord ][ point ] == AST__BAD ){
- good = 0;
- break;
- }
- }
-
- if( good == neg ) {
- for ( coord = 0; coord < ncoord_out; coord++ ) {
- ptr_out[ coord ][ point ] = AST__BAD;
- }
- }
- }
- }
-
-/* Free resources. */
- reg1 = astAnnul( reg1 );
- reg2 = astAnnul( reg2 );
- psb = astAnnul( psb );
- pset_tmp = astAnnul( pset_tmp );
-
-/* If an error occurred, clean up by deleting the output PointSet (if
- allocated by this function) and setting a NULL result pointer. */
- if ( !astOK ) {
- if ( !out ) result = astDelete( result );
- result = NULL;
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for Prism objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for Prism objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - This constructor makes a deep copy, including a copy of the component
-* Regions within the Prism.
-*/
-
-/* Local Variables: */
- AstPrism *in; /* Pointer to input Prism */
- AstPrism *out; /* Pointer to output Prism */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Prisms. */
- in = (AstPrism *) objin;
- out = (AstPrism *) objout;
-
-/* For safety, start by clearing any references to the input component
- Regions from the output Prism. */
- out->region1 = NULL;
- out->region2 = NULL;
-
-/* Make copies of these Regions and store pointers to them in the output
- Prism structure. */
- out->region1 = astCopy( in->region1 );
- out->region2 = astCopy( in->region2 );
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for Prism objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for Prism objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstPrism *this; /* Pointer to Prism */
-
-/* Obtain a pointer to the Prism structure. */
- this = (AstPrism *) obj;
-
-/* Annul the pointers to the component Regions. */
- this->region1 = astAnnul( this->region1 );
- this->region2 = astAnnul( this->region2 );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for Prism objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the Prism class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the Prism whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstPrism *this; /* Pointer to the Prism structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Prism structure. */
- this = (AstPrism *) this_object;
-
-/* Write out values representing the instance variables for the Prism
- class. Accompany these with appropriate comment strings, possibly
- depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* First Region. */
-/* -------------- */
- astWriteObject( channel, "RegionA", 1, 1, this->region1,
- "First component Region" );
-
-/* Second Region. */
-/* --------------- */
- astWriteObject( channel, "RegionB", 1, 1, this->region2,
- "Second component Region" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAPrism and astCheckPrism functions using the
- macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(Prism,Region)
-astMAKE_CHECK(Prism)
-
-AstPrism *astPrism_( void *region1_void, void *region2_void,
- const char *options, int *status, ...) {
-/*
-*+
-* Name:
-* astPrism
-
-* Purpose:
-* Create a Prism.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "prism.h"
-* AstPrism *astPrism( AstRegion *region1, AstRegion *region2,
-* const char *options, ..., int *status )
-
-* Class Membership:
-* Prism constructor.
-
-* Description:
-* This function creates a new Prism and optionally initialises its
-* attributes.
-
-* Parameters:
-* region1
-* Pointer to the Region to be extruded.
-* region2
-* Pointer to the Region defining the extent of the extrusion.
-* options
-* Pointer to a null terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new Prism. The syntax used is the same as for the
-* astSet method and may include "printf" format specifiers identified
-* by "%" symbols in the normal way.
-* status
-* Pointer to the inherited status variable.
-* ...
-* If the "options" string contains "%" format specifiers, then an
-* optional list of arguments may follow it in order to supply values to
-* be substituted for these specifiers. The rules for supplying these
-* are identical to those for the astSet method (and for the C "printf"
-* function).
-
-* Returned Value:
-* A pointer to the new Prism.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-
-* Implementation Notes:
-* - This function implements the basic Prism constructor which is
-* available via the protected interface to the Prism class. A
-* public interface is provided by the astPrismId_ function.
-* - Because this function has a variable argument list, it is
-* invoked by a macro that evaluates to a function pointer (not a
-* function invocation) and no checking or casting of arguments is
-* performed before the function is invoked. Because of this, the
-* "region1" and "region2" parameters are of type (void *) and are
-* converted and validated within the function itself.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstPrism *new; /* Pointer to new Prism */
- AstRegion *region1; /* Pointer to first Region structure */
- AstRegion *region2; /* Pointer to second Region structure */
- va_list args; /* Variable argument list */
-
-/* Initialise. */
- new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return new;
-
-/* Obtain and validate pointers to the Region structures provided. */
- region1 = astCheckRegion( region1_void );
- region2 = astCheckRegion( region2_void );
- if ( astOK ) {
-
-/* Initialise the Prism, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitPrism( NULL, sizeof( AstPrism ), !class_init,
- &class_vtab, "Prism", region1, region2 );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new Prism's
- attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return a pointer to the new Prism. */
- return new;
-}
-
-AstPrism *astPrismId_( void *region1_void, void *region2_void,
- const char *options, ... ) {
-/*
-*++
-* Name:
-c astPrism
-f AST_PRISM
-
-* Purpose:
-* Create a Prism.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "prism.h"
-c AstPrism *astPrism( AstRegion *region1, AstRegion *region2,
-c const char *options, ... )
-f RESULT = AST_PRISM( REGION1, REGION2, OPTIONS, STATUS )
-
-* Class Membership:
-* Prism constructor.
-
-* Description:
-* This function creates a new Prism and optionally initialises
-* its attributes.
-*
-* A Prism is a Region which represents an extrusion of an existing Region
-* into one or more orthogonal dimensions (specified by another Region).
-* If the Region to be extruded has N axes, and the Region defining the
-* extrusion has M axes, then the resulting Prism will have (M+N) axes.
-* A point is inside the Prism if the first N axis values correspond to
-* a point inside the Region being extruded, and the remaining M axis
-* values correspond to a point inside the Region defining the extrusion.
-*
-* As an example, a cylinder can be represented by extruding an existing
-* Circle, using an Interval to define the extrusion. Ih this case, the
-* Interval would have a single axis and would specify the upper and
-* lower limits of the cylinder along its length.
-
-* Parameters:
-c region1
-f REGION1 = INTEGER (Given)
-* Pointer to the Region to be extruded.
-c region2
-f REGION2 = INTEGER (Given)
-* Pointer to the Region defining the extent of the extrusion.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new Prism. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new Prism. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astPrism()
-f AST_PRISM = INTEGER
-* A pointer to the new Prism.
-
-* Notes:
-* - Deep copies are taken of the supplied Regions. This means that
-* any subsequent changes made to the component Regions using the
-* supplied pointers will have no effect on the Prism.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-
-* Implementation Notes:
-* - This function implements the external (public) interface to
-* the astPrism constructor function. It returns an ID value
-* (instead of a true C pointer) to external users, and must be
-* provided because astPrism_ has a variable argument list which
-* cannot be encapsulated in a macro (where this conversion would
-* otherwise occur).
-* - Because no checking or casting of arguments is performed
-* before the function is invoked, the "region1" and "region2" parameters
-* are of type (void *) and are converted from an ID value to a
-* pointer and validated within the function itself.
-* - The variable argument list also prevents this function from
-* invoking astPrism_ directly, so it must be a re-implementation
-* of it in all respects, except for the conversions between IDs
-* and pointers on input/output of Objects.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstPrism *new; /* Pointer to new Prism */
- AstRegion *region1; /* Pointer to first Region structure */
- AstRegion *region2; /* Pointer to second Region structure */
- int *status; /* Pointer to inherited status value */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialise. */
- new = NULL;
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return new;
-
-/* Obtain the Region pointers from the ID's supplied and validate the
- pointers to ensure they identify valid Regions. */
- region1 = astVerifyRegion( astMakePointer( region1_void ) );
- region2 = astVerifyRegion( astMakePointer( region2_void ) );
- if ( astOK ) {
-
-/* Initialise the Prism, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitPrism( NULL, sizeof( AstPrism ), !class_init,
- &class_vtab, "Prism", region1, region2 );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new Prism's
- attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return an ID value for the new Prism. */
- return astMakeId( new );
-}
-
-AstPrism *astInitPrism_( void *mem, size_t size, int init, AstPrismVtab *vtab,
- const char *name, AstRegion *region1,
- AstRegion *region2, int *status ) {
-/*
-*+
-* Name:
-* astInitPrism
-
-* Purpose:
-* Initialise a Prism.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "prism.h"
-* AstPrism *astInitPrism_( void *mem, size_t size, int init,
-* AstPrismVtab *vtab, const char *name,
-* AstRegion *region1, AstRegion *region2 )
-
-* Class Membership:
-* Prism initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new Prism object. It allocates memory (if necessary) to
-* accommodate the Prism plus any additional data associated with the
-* derived class. It then initialises a Prism structure at the start
-* of this memory. If the "init" flag is set, it also initialises the
-* contents of a virtual function table for a Prism at the start of
-* the memory passed via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the Prism is to be initialised.
-* This must be of sufficient size to accommodate the Prism data
-* (sizeof(Prism)) plus any data used by the derived class. If a
-* value of NULL is given, this function will allocate the memory itself
-* using the "size" parameter to determine its size.
-* size
-* The amount of memory used by the Prism (plus derived class
-* data). This will be used to allocate memory if a value of NULL is
-* given for the "mem" parameter. This value is also stored in the
-* Prism structure, so a valid value must be supplied even if not
-* required for allocating memory.
-* init
-* A logical flag indicating if the Prism's virtual function table
-* is to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new Prism.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the Object
-* astClass function).
-* region1
-* Pointer to the first Region.
-* region2
-* Pointer to the second Region.
-
-* Returned Value:
-* A pointer to the new Prism.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstPrism *new; /* Pointer to new Prism */
- AstFrame *frm1; /* Frame encapsulated by 1st Region */
- AstFrame *frm2; /* Frame encapsulated by 2nd Region */
- AstFrame *frm; /* CmpFrame formed from frm1 and frm2 */
- AstMapping *map; /* Mapping between two supplied Regions */
- AstRegion *reg1; /* Copy of first supplied Region */
- AstRegion *reg2; /* Copy of second supplied Region */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitPrismVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
- reg2 = NULL;
-
-/* Take a copy of the two supplied Regions. */
- reg1 = astCopy( region1 );
- reg2 = astCopy( region2 );
-
-/* Form a CmpFrame representing the combined Frame of these two Regions. */
- frm1 = astRegFrame( reg1 );
- frm2 = astRegFrame( reg2 );
- frm = (AstFrame *) astCmpFrame( frm1, frm2, "", status );
-
-/* Initialise a Region structure (the parent class) as the first component
- within the Prism structure, allocating memory if necessary. A NULL
- PointSet is suppled as the two component Regions will perform the function
- of defining the Region shape. The base Frame of the FrameSet in the
- parent Region structure will be the CmpFrame formed from the two component
- Regions. */
- if ( astOK ) {
- new = (AstPrism *) astInitRegion( mem, size, 0, (AstRegionVtab *) vtab,
- name, frm, NULL, NULL );
-
-/* Initialise the Prism data. */
-/* --------------------------- */
-/* Store pointers to the component Regions. */
- new->region1 = reg1;
- new->region2 = reg2;
-
-/* If the base->current Mapping in the FrameSet within a component Region
- is a UnitMap, then the FrameSet does not need to be included in the
- Dump of the new Prism. Set the RegionFS attribute of the component
- Region to zero to flag this. */
- map = astGetMapping( reg1->frameset, AST__BASE, AST__CURRENT );
- if( astIsAUnitMap( map ) ) astSetRegionFS( reg1, 0 );
- map = astAnnul( map );
-
- map = astGetMapping( reg2->frameset, AST__BASE, AST__CURRENT );
- if( astIsAUnitMap( map ) ) astSetRegionFS( reg2, 0 );
- map = astAnnul( map );
-
-/* If an error occurred, clean up by annulling the Region pointers and
- deleting the new object. */
- if ( !astOK ) {
- new->region1 = astAnnul( new->region1 );
- new->region2 = astAnnul( new->region2 );
- new = astDelete( new );
- }
- }
-
-/* Free resources */
- frm = astAnnul( frm );
- frm1 = astAnnul( frm1 );
- frm2 = astAnnul( frm2 );
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstPrism *astLoadPrism_( void *mem, size_t size, AstPrismVtab *vtab,
- const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadPrism
-
-* Purpose:
-* Load a Prism.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "prism.h"
-* AstPrism *astLoadPrism( void *mem, size_t size, AstPrismVtab *vtab,
-* const char *name, AstChannel *channel )
-
-* Class Membership:
-* Prism loader.
-
-* Description:
-* This function is provided to load a new Prism using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* Prism structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a Prism at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the Prism is to be
-* loaded. This must be of sufficient size to accommodate the
-* Prism data (sizeof(Prism)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the Prism (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the Prism structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstPrism) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new Prism. If this is NULL, a pointer to
-* the (static) virtual function table for the Prism class is
-* used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "Prism" is used instead.
-
-* Returned Value:
-* A pointer to the new Prism.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrame *cfrm; /* Frame containing required axes */
- AstFrame *f1; /* Base Frame in parent Region */
- AstPrism *new; /* Pointer to the new Prism */
- AstRegion *creg; /* Pointer to component Region */
- int *axes; /* Pointer to array of axis indices */
- int i; /* Loop count */
- int nax1; /* No.of axes in 1st component Frame */
- int nax2; /* No.of axes in 2nd component Frame */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this Prism. In this case the
- Prism belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstPrism );
- vtab = &class_vtab;
- name = "Prism";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitPrismVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built Prism. */
- new = astLoadRegion( mem, size, (AstRegionVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "Prism" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* First Region. */
-/* -------------- */
- new->region1 = astReadObject( channel, "regiona", NULL );
-
-/* Second Region. */
-/* --------------- */
- new->region2 = astReadObject( channel, "regionb", NULL );
-
-/* Either component Region may currently contain a dummy FrameSet rather than
- the correct FrameSet (see the Dump function for this class). In this case,
- the correct FrameSet will have copies of selected axes from the base Frame
- of the new Prism as both its current and base Frames, and these are
- connected by a UnitMap (this is equivalent to a FrameSet containing a
- single Frame). However if the new Prism being loaded has itself got a dummy
- FrameSet, then we do not do this since we do not yet know what the correct
- FrameSet is. In this case we wait until the parent Region invokes the
- astSetRegFS method on the new Prism. */
- if( !astRegDummyFS( new ) ) {
- f1 = astGetFrame( ((AstRegion *) new)->frameset, AST__BASE );
-
- creg = new->region1;
- nax1 = astGetNaxes( creg );
- if( astRegDummyFS( creg ) ) {
- axes = astMalloc( sizeof( int )*(size_t) nax1 );
- if( astOK ) for( i = 0; i < nax1; i++ ) axes[ i ] = i;
- cfrm = astPickAxes( f1, nax1, axes, NULL );
- astSetRegFS( creg, cfrm );
- axes = astFree( axes );
- cfrm = astAnnul( cfrm );
- }
-
- creg = new->region2;
- if( astRegDummyFS( creg ) ) {
- nax2 = astGetNaxes( creg );
- axes = astMalloc( sizeof( int )*(size_t) nax2 );
- if( astOK ) for( i = 0; i < nax2; i++ ) axes[ i ] = nax1 + i;
- cfrm = astPickAxes( f1, nax2, axes, NULL );
- astSetRegFS( creg, cfrm );
- axes = astFree( axes );
- cfrm = astAnnul( cfrm );
- }
-
- f1 = astAnnul( f1 );
- }
-
-/* If an error occurred, clean up by deleting the new Prism. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new Prism pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-/* None. */
-
-
-
diff --git a/ast-5.3-1/prism.h b/ast-5.3-1/prism.h
deleted file mode 100644
index bbdf41b..0000000
--- a/ast-5.3-1/prism.h
+++ /dev/null
@@ -1,238 +0,0 @@
-#if !defined( PRISM_INCLUDED ) /* Include this file only once */
-#define PRISM_INCLUDED
-/*
-*+
-* Name:
-* prism.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the Prism class.
-
-* Invocation:
-* #include "prism.h"
-
-* Description:
-* This include file defines the interface to the Prism class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The Prism class implement a Region which represents an extrusion of
-* another Region into higher dimensions. For instance, a Prism can be
-* used to represent a cylinder, which is an extrusion of a circle into a
-* 3rd dimension.
-
-* Inheritance:
-* The Prism class inherits from the Region class.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 17-DEC-2004 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "region.h" /* Coordinate regions (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros. */
-/* ------- */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* Prism structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-typedef struct AstPrism {
-
-/* Attributes inherited from the parent class. */
- AstRegion region; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- AstRegion *region1; /* First component Region */
- AstRegion *region2; /* Second component Region */
-
-} AstPrism;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstPrismVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstRegionVtab region_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-} AstPrismVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstPrismGlobals {
- AstPrismVtab Class_Vtab;
- int Class_Init;
-} AstPrismGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitPrismGlobals_( AstPrismGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Prism) /* Check class membership */
-astPROTO_ISA(Prism) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstPrism *astPrism_( void *, void *, const char *, int *, ...);
-#else
-AstPrism *astPrismId_( void *, void *, const char *, ... )__attribute__((format(printf,3,4)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstPrism *astInitPrism_( void *, size_t, int, AstPrismVtab *,
- const char *, AstRegion *, AstRegion *, int * );
-
-/* Vtab initialiser. */
-void astInitPrismVtab_( AstPrismVtab *, const char *, int * );
-
-/* Loader. */
-AstPrism *astLoadPrism_( void *, size_t, AstPrismVtab *,
- const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS) /* Protected */
-AstRegion *astConvertToPrism_( AstRegion *, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckPrism(this) astINVOKE_CHECK(Prism,this,0)
-#define astVerifyPrism(this) astINVOKE_CHECK(Prism,this,1)
-
-/* Test class membership. */
-#define astIsAPrism(this) astINVOKE_ISA(Prism,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astPrism astINVOKE(F,astPrism_)
-#else
-#define astPrism astINVOKE(F,astPrismId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitPrism(mem,size,init,vtab,name,reg1,reg2) \
-astINVOKE(O,astInitPrism_(mem,size,init,vtab,name,reg1,reg2,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitPrismVtab(vtab,name) astINVOKE(V,astInitPrismVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadPrism(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadPrism_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckPrism to validate Prism pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-#define astConvertToPrism(this) astConvertToPrism_(this,STATUS_PTR)
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/proj.c b/ast-5.3-1/proj.c
deleted file mode 100644
index 2d57e70..0000000
--- a/ast-5.3-1/proj.c
+++ /dev/null
@@ -1,4589 +0,0 @@
-/*============================================================================
-*
-* WCSLIB - an implementation of the FITS WCS proposal.
-* Copyright (C) 1995-2002, Mark Calabretta
-*
-* This library is free software; you can redistribute it and/or modify it
-* under the terms of the GNU Library General Public License as published
-* by the Free Software Foundation; either version 2 of the License, or (at
-* your option) any later version.
-*
-* This library is distributed in the hope that it will be useful, but
-* WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library
-* General Public License for more details.
-*
-* You should have received a copy of the GNU Library General Public License
-* along with this library; if not, write to the Free Software Foundation,
-* Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
-* Correspondence concerning WCSLIB may be directed to:
-* Internet email: mcalabre at atnf.csiro.au
-* Postal address: Dr. Mark Calabretta,
-* Australia Telescope National Facility,
-* P.O. Box 76,
-* Epping, NSW, 2121,
-* AUSTRALIA
-*
-*
-*=============================================================================
-*
-* This version of proj.c is based on the version in wcslib-2.9, but has
-* been modified in the following ways by the Starlink project (e-mail:
-* ussc at star.rl.ac.uk):
-* - The copysign macro is now always defined within this file
-* instead of only being defined if the COPYSIGN macro has previously
-* been defined.
-* - Sine values which are slightly larger than 1.0 are now treated
-* as 1.0 in function astCYPrev.
-* - The maximum number of projection parameters has been changed from
-* 10 to 100.
-* - The maximum number of projection parameters is given by the
-* WCSLIB_MXPAR macro (defined in proj.h) instead of being hard-wired.
-* - The names of all functions and structures have been chanegd to avoid
-* clashes with wcslib. This involves adding "Ast" or "ast" at the
-* front and changing the capitalisation.
-* - Include string.h (for strcpy and strcmp prototypes).
-* - Include stdlib.h (for abs prototype).
-* - Comment out declarations of npcode and pcodes variables (they
-* are not needed by AST) in order to avoid clash with similar names
-* in other modules imported as part of other software systems (e.g.
-* SkyCat).
-* - astZPNfwd: Loop from prj->n to zero, not from MAXPAR to zero.
-* - astZPNfwd: Only return "2" if prj->n is larger than 2.
-* - Lots of variables are initialised to null values in order to
-* avoid "use of uninitialised variable" messages from compilers which
-* are not clever enough to work out that the uninitialised variable is
-* not in fact ever used.
-* - Use dynamic rather than static memory for the parameter arrays in
-* the AstPrjPrm structure.Override astGetObjSize. This is to
-* reduce the in-memory size of a WcsMap.
-* - Healpix projection added.
-
-*=============================================================================
-*
-* C implementation of the spherical map projections recognized by the FITS
-* "World Coordinate System" (WCS) convention.
-*
-* Summary of routines
-* -------------------
-* Each projection is implemented via separate functions for the forward,
-* *fwd(), and reverse, *rev(), transformation.
-*
-* Initialization routines, *set(), compute intermediate values from the
-* projection parameters but need not be called explicitly - see the
-* explanation of prj.flag below.
-*
-* astPRJset astPRJfwd astPRJrev Driver routines (see below).
-*
-* astAZPset astAZPfwd astAZPrev AZP: zenithal/azimuthal perspective
-* astSZPset astSZPfwd astSZPrev SZP: slant zenithal perspective
-* astTANset astTANfwd astTANrev TAN: gnomonic
-* astSTGset astSTGfwd astSTGrev STG: stereographic
-* astSINset astSINfwd astSINrev SIN: orthographic/synthesis
-* astARCset astARCfwd astARCrev ARC: zenithal/azimuthal equidistant
-* astZPNset astZPNfwd astZPNrev ZPN: zenithal/azimuthal polynomial
-* astZEAset astZEAfwd astZEArev ZEA: zenithal/azimuthal equal area
-* astAIRset astAIRfwd astAIRrev AIR: Airy
-* astCYPset astCYPfwd astCYPrev CYP: cylindrical perspective
-* astCEAset astCEAfwd astCEArev CEA: cylindrical equal area
-* astCARset astCARfwd astCARrev CAR: Cartesian
-* astMERset astMERfwd astMERrev MER: Mercator
-* astSFLset astSFLfwd astSFLrev SFL: Sanson-Flamsteed
-* astPARset astPARfwd astPARrev PAR: parabolic
-* astMOLset astMOLfwd astMOLrev MOL: Mollweide
-* astAITset astAITfwd astAITrev AIT: Hammer-Aitoff
-* astCOPset astCOPfwd astCOPrev COP: conic perspective
-* astCOEset astCOEfwd astCOErev COE: conic equal area
-* astCODset astCODfwd astCODrev COD: conic equidistant
-* astCOOset astCOOfwd astCOOrev COO: conic orthomorphic
-* astBONset astBONfwd astBONrev BON: Bonne
-* astPCOset astPCOfwd astPCOrev PCO: polyconic
-* astTSCset astTSCfwd astTSCrev TSC: tangential spherical cube
-* astCSCset astCSCfwd astCSCrev CSC: COBE quadrilateralized spherical cube
-* astQSCset astQSCfwd astQSCrev QSC: quadrilateralized spherical cube
-* astHPXset astHPXfwd astHPXrev HPX: HEALPix projection
-*
-*
-* Driver routines; astPRJset(), astPRJfwd() & astPRJrev()
-* ----------------------------------------------
-* A set of driver routines are available for use as a generic interface to
-* the specific projection routines. The interfaces to astPRJfwd() and astPRJrev()
-* are the same as those of the forward and reverse transformation routines
-* for the specific projections (see below).
-*
-* The interface to astPRJset() differs slightly from that of the initialization
-* routines for the specific projections and unlike them it must be invoked
-* explicitly to use astPRJfwd() and astPRJrev().
-*
-* Given:
-* pcode[4] const char
-* WCS projection code.
-*
-* Given and/or returned:
-* prj AstPrjPrm* Projection parameters (see below).
-*
-* Function return value:
-* int Error status
-* 0: Success.
-*
-*
-* Initialization routine; *set()
-* ------------------------------
-* Initializes members of a AstPrjPrm data structure which hold intermediate
-* values. Note that this routine need not be called directly; it will be
-* invoked by astPRJfwd() and astPRJrev() if the "flag" structure member is
-* anything other than a predefined magic value.
-*
-* Given and/or returned:
-* prj AstPrjPrm* Projection parameters (see below).
-*
-* Function return value:
-* int Error status
-* 0: Success.
-* 1: Invalid projection parameters.
-*
-* Forward transformation; *fwd()
-* -----------------------------
-* Compute (x,y) coordinates in the plane of projection from native spherical
-* coordinates (phi,theta).
-*
-* Given:
-* phi, const double
-* theta Longitude and latitude of the projected point in
-* native spherical coordinates, in degrees.
-*
-* Given and returned:
-* prj AstPrjPrm* Projection parameters (see below).
-*
-* Returned:
-* x,y double* Projected coordinates.
-*
-* Function return value:
-* int Error status
-* 0: Success.
-* 1: Invalid projection parameters.
-* 2: Invalid value of (phi,theta).
-*
-* Reverse transformation; *rev()
-* -----------------------------
-* Compute native spherical coordinates (phi,theta) from (x,y) coordinates in
-* the plane of projection.
-*
-* Given:
-* x,y const double
-* Projected coordinates.
-*
-* Given and returned:
-* prj AstPrjPrm* Projection parameters (see below).
-*
-* Returned:
-* phi, double* Longitude and latitude of the projected point in
-* theta native spherical coordinates, in degrees.
-*
-* Function return value:
-* int Error status
-* 0: Success.
-* 1: Invalid projection parameters.
-* 2: Invalid value of (x,y).
-* 1: Invalid projection parameters.
-*
-* Projection parameters
-* ---------------------
-* The AstPrjPrm struct consists of the following:
-*
-* int flag
-* This flag must be set to zero whenever any of p[] or r0 are set
-* or changed. This signals the initialization routine to recompute
-* intermediaries. flag may also be set to -1 to disable strict bounds
-* checking for the AZP, SZP, TAN, SIN, ZPN, and COP projections.
-*
-* double r0
-* r0; The radius of the generating sphere for the projection, a linear
-* scaling parameter. If this is zero, it will be reset to the default
-* value of 180/pi (the value for FITS WCS).
-*
-* double p[]
-* Contains the projection parameters associated with the
-* longitude axis.
-*
-* The remaining members of the AstPrjPrm struct are maintained by the
-* initialization routines and should not be modified. This is done for the
-* sake of efficiency and to allow an arbitrary number of contexts to be
-* maintained simultaneously.
-*
-* char code[4]
-* Three-letter projection code.
-*
-* double phi0, theta0
-* Native longitude and latitude of the reference point, in degrees.
-*
-* double w[10]
-* int n
-* Intermediate values derived from the projection parameters.
-*
-* int (*astPRJfwd)()
-* int (*astPRJrev)()
-* Pointers to the forward and reverse projection routines.
-*
-* Usage of the p[] array as it applies to each projection is described in
-* the prologue to each trio of projection routines.
-*
-* Argument checking
-* -----------------
-* Forward routines:
-*
-* The values of phi and theta (the native longitude and latitude)
-* normally lie in the range [-180,180] for phi, and [-90,90] for theta.
-* However, all forward projections will accept any value of phi and will
-* not normalize it.
-*
-* The forward projection routines do not explicitly check that theta lies
-* within the range [-90,90]. They do check for any value of theta which
-* produces an invalid argument to the projection equations (e.g. leading
-* to division by zero). The forward routines for AZP, SZP, TAN, SIN,
-* ZPN, and COP also return error 2 if (phi,theta) corresponds to the
-* overlapped (far) side of the projection but also return the
-* corresponding value of (x,y). This strict bounds checking may be
-* relaxed by setting prj->flag to -1 (rather than 0) when these
-* projections are initialized.
-*
-* Reverse routines:
-*
-* Error checking on the projected coordinates (x,y) is limited to that
-* required to ascertain whether a solution exists. Where a solution does
-* exist no check is made that the value of phi and theta obtained lie
-* within the ranges [-180,180] for phi, and [-90,90] for theta.
-*
-* Accuracy
-* --------
-* Closure to a precision of at least 1E-10 degree of longitude and latitude
-* has been verified for typical projection parameters on the 1 degree grid
-* of native longitude and latitude (to within 5 degrees of any latitude
-* where the projection may diverge).
-*
-* Author: Mark Calabretta, Australia Telescope National Facility
-* $Id: proj.c,v 1.1.1.1 2009/11/02 16:01:16 joye Exp $
-*===========================================================================*/
-
-/* Set the name of the module we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. NB, this module is not a proper AST
- class, but it defines this macro sanyway in order to get the protected
- symbols defined in memory.h */
-
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "wcsmath.h"
-#include "wcstrig.h"
-#include "memory.h"
-#include "proj.h"
-
-/* Following variables are not needed in AST and are commented out to
- avoid name clashes with other software systems (e.g. SkyCat) which
- defines them.
-
-int npcode = 26;
-char pcodes[26][4] =
- {"AZP", "SZP", "TAN", "STG", "SIN", "ARC", "ZPN", "ZEA", "AIR", "CYP",
- "CEA", "CAR", "MER", "COP", "COE", "COD", "COO", "SFL", "PAR", "MOL",
- "AIT", "BON", "PCO", "TSC", "CSC", "QSC", "HPX"};
-*/
-
-const int WCS__AZP = 101;
-const int WCS__SZP = 102;
-const int WCS__TAN = 103;
-const int WCS__STG = 104;
-const int WCS__SIN = 105;
-const int WCS__ARC = 106;
-const int WCS__ZPN = 107;
-const int WCS__ZEA = 108;
-const int WCS__AIR = 109;
-const int WCS__CYP = 201;
-const int WCS__CEA = 202;
-const int WCS__CAR = 203;
-const int WCS__MER = 204;
-const int WCS__SFL = 301;
-const int WCS__PAR = 302;
-const int WCS__MOL = 303;
-const int WCS__AIT = 401;
-const int WCS__COP = 501;
-const int WCS__COE = 502;
-const int WCS__COD = 503;
-const int WCS__COO = 504;
-const int WCS__BON = 601;
-const int WCS__PCO = 602;
-const int WCS__TSC = 701;
-const int WCS__CSC = 702;
-const int WCS__QSC = 703;
-const int WCS__HPX = 801;
-
-/* Map error number to error message for each function. */
-const char *astPRJset_errmsg[] = {
- 0,
- "Invalid projection parameters"};
-
-const char *astPRJfwd_errmsg[] = {
- 0,
- "Invalid projection parameters",
- "Invalid value of (phi,theta)"};
-
-const char *astPRJrev_errmsg[] = {
- 0,
- "Invalid projection parameters",
- "Invalid value of (x,y)"};
-
-
-#define copysign(X, Y) ((Y) < 0.0 ? -fabs(X) : fabs(X))
-
-
-
-/*==========================================================================*/
-
-int astPRJset(pcode, prj)
-
-const char pcode[4];
-struct AstPrjPrm *prj;
-
-{
- /* Set pointers to the forward and reverse projection routines. */
- if (strcmp(pcode, "AZP") == 0) {
- astAZPset(prj);
- } else if (strcmp(pcode, "SZP") == 0) {
- astSZPset(prj);
- } else if (strcmp(pcode, "TAN") == 0) {
- astTANset(prj);
- } else if (strcmp(pcode, "STG") == 0) {
- astSTGset(prj);
- } else if (strcmp(pcode, "SIN") == 0) {
- astSINset(prj);
- } else if (strcmp(pcode, "ARC") == 0) {
- astARCset(prj);
- } else if (strcmp(pcode, "ZPN") == 0) {
- astZPNset(prj);
- } else if (strcmp(pcode, "ZEA") == 0) {
- astZEAset(prj);
- } else if (strcmp(pcode, "AIR") == 0) {
- astAIRset(prj);
- } else if (strcmp(pcode, "CYP") == 0) {
- astCYPset(prj);
- } else if (strcmp(pcode, "CEA") == 0) {
- astCEAset(prj);
- } else if (strcmp(pcode, "CAR") == 0) {
- astCARset(prj);
- } else if (strcmp(pcode, "MER") == 0) {
- astMERset(prj);
- } else if (strcmp(pcode, "SFL") == 0) {
- astSFLset(prj);
- } else if (strcmp(pcode, "PAR") == 0) {
- astPARset(prj);
- } else if (strcmp(pcode, "MOL") == 0) {
- astMOLset(prj);
- } else if (strcmp(pcode, "AIT") == 0) {
- astAITset(prj);
- } else if (strcmp(pcode, "COP") == 0) {
- astCOPset(prj);
- } else if (strcmp(pcode, "COE") == 0) {
- astCOEset(prj);
- } else if (strcmp(pcode, "COD") == 0) {
- astCODset(prj);
- } else if (strcmp(pcode, "COO") == 0) {
- astCOOset(prj);
- } else if (strcmp(pcode, "BON") == 0) {
- astBONset(prj);
- } else if (strcmp(pcode, "PCO") == 0) {
- astPCOset(prj);
- } else if (strcmp(pcode, "TSC") == 0) {
- astTSCset(prj);
- } else if (strcmp(pcode, "CSC") == 0) {
- astCSCset(prj);
- } else if (strcmp(pcode, "QSC") == 0) {
- astQSCset(prj);
- } else if (strcmp(pcode, "HPX") == 0) {
- astHPXset(prj);
- } else {
- /* Unrecognized projection code. */
- return 1;
- }
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astPRJfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- return prj->astPRJfwd(phi, theta, prj, x, y);
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astPRJrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- return prj->astPRJrev(x, y, prj, phi, theta);
-}
-
-/*============================================================================
-* AZP: zenithal/azimuthal perspective projection.
-*
-* Given:
-* prj->p[1] Distance parameter, mu in units of r0.
-* prj->p[2] Tilt angle, gamma in degrees.
-*
-* Given and/or returned:
-* prj->flag AZP, or -AZP if prj->flag is given < 0.
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "AZP"
-* prj->phi0 0.0
-* prj->theta0 90.0
-* prj->w[0] r0*(mu+1)
-* prj->w[1] tan(gamma)
-* prj->w[2] sec(gamma)
-* prj->w[3] cos(gamma)
-* prj->w[4] sin(gamma)
-* prj->w[5] asin(-1/mu) for |mu| >= 1, -90 otherwise
-* prj->w[6] mu*cos(gamma)
-* prj->w[7] 1 if |mu*cos(gamma)| < 1, 0 otherwise
-* prj->astPRJfwd Pointer to astAZPfwd().
-* prj->astPRJrev Pointer to astAZPrev().
-*===========================================================================*/
-
-int astAZPset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- strcpy(prj->code, "AZP");
- prj->flag = copysign(WCS__AZP, prj->flag);
- prj->phi0 = 0.0;
- prj->theta0 = 90.0;
-
- if (prj->r0 == 0.0) prj->r0 = R2D;
-
- prj->w[0] = prj->r0*(prj->p[1] + 1.0);
- if (prj->w[0] == 0.0) {
- return 1;
- }
-
- prj->w[3] = astCosd(prj->p[2]);
- if (prj->w[3] == 0.0) {
- return 1;
- }
-
- prj->w[2] = 1.0/prj->w[3];
- prj->w[4] = astSind(prj->p[2]);
- prj->w[1] = prj->w[4] / prj->w[3];
-
- if (fabs(prj->p[1]) > 1.0) {
- prj->w[5] = astASind(-1.0/prj->p[1]);
- } else {
- prj->w[5] = -90.0;
- }
-
- prj->w[6] = prj->p[1] * prj->w[3];
- prj->w[7] = (fabs(prj->w[6]) < 1.0) ? 1.0 : 0.0;
-
- prj->astPRJfwd = astAZPfwd;
- prj->astPRJrev = astAZPrev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astAZPfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- double a, b, cphi, cthe, r, s, t;
-
- if (abs(prj->flag) != WCS__AZP) {
- if (astAZPset(prj)) return 1;
- }
-
- cphi = astCosd(phi);
- cthe = astCosd(theta);
-
- s = prj->w[1]*cphi;
- t = (prj->p[1] + astSind(theta)) + cthe*s;
- if (t == 0.0) {
- return 2;
- }
-
- r = prj->w[0]*cthe/t;
- *x = r*astSind(phi);
- *y = -r*cphi*prj->w[2];
-
- /* Bounds checking. */
- if (prj->flag > 0) {
- /* Overlap. */
- if (theta < prj->w[5]) {
- return 2;
- }
-
- /* Divergence. */
- if (prj->w[7] > 0.0) {
- t = prj->p[1] / sqrt(1.0 + s*s);
-
- if (fabs(t) <= 1.0) {
- s = astATand(-s);
- t = astASind(t);
- a = s - t;
- b = s + t + 180.0;
-
- if (a > 90.0) a -= 360.0;
- if (b > 90.0) b -= 360.0;
-
- if (theta < ((a > b) ? a : b)) {
- return 2;
- }
- }
- }
- }
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astAZPrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- double a, b, r, s, t, ycosg;
- const double tol = 1.0e-13;
-
- if (abs(prj->flag) != WCS__AZP) {
- if (astAZPset(prj)) return 1;
- }
-
- ycosg = y*prj->w[3];
-
- r = sqrt(x*x + ycosg*ycosg);
- if (r == 0.0) {
- *phi = 0.0;
- *theta = 90.0;
- } else {
- *phi = astATan2d(x, -ycosg);
-
- s = r / (prj->w[0] + y*prj->w[4]);
- t = s*prj->p[1]/sqrt(s*s + 1.0);
-
- s = astATan2d(1.0, s);
-
- if (fabs(t) > 1.0) {
- t = copysign(90.0,t);
- if (fabs(t) > 1.0+tol) {
- return 2;
- }
- } else {
- t = astASind(t);
- }
-
- a = s - t;
- b = s + t + 180.0;
-
- if (a > 90.0) a -= 360.0;
- if (b > 90.0) b -= 360.0;
-
- *theta = (a > b) ? a : b;
- }
-
- return 0;
-}
-
-/*============================================================================
-* SZP: slant zenithal perspective projection.
-*
-* Given:
-* prj->p[1] Distance of the point of projection from the centre of the
-* generating sphere, mu in units of r0.
-* prj->p[2] Native longitude, phi_c, and ...
-* prj->p[3] Native latitude, theta_c, on the planewards side of the
-* intersection of the line through the point of projection
-* and the centre of the generating sphere, phi_c in degrees.
-*
-* Given and/or returned:
-* prj->flag SZP, or -SZP if prj->flag is given < 0.
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "SZP"
-* prj->phi0 0.0
-* prj->theta0 90.0
-* prj->w[0] 1/r0
-* prj->w[1] xp = -mu*cos(theta_c)*sin(phi_c)
-* prj->w[2] yp = mu*cos(theta_c)*cos(phi_c)
-* prj->w[3] zp = mu*sin(theta_c) + 1
-* prj->w[4] r0*xp
-* prj->w[5] r0*yp
-* prj->w[6] r0*zp
-* prj->w[7] (zp - 1)^2
-* prj->w[8] asin(1-zp) if |1 - zp| < 1, -90 otherwise
-* prj->astPRJfwd Pointer to astSZPfwd().
-* prj->astPRJrev Pointer to astSZPrev().
-*===========================================================================*/
-
-int astSZPset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- strcpy(prj->code, "SZP");
- prj->flag = copysign(WCS__SZP, prj->flag);
- prj->phi0 = 0.0;
- prj->theta0 = 90.0;
-
- if (prj->r0 == 0.0) prj->r0 = R2D;
-
- prj->w[0] = 1.0/prj->r0;
-
- prj->w[3] = prj->p[1] * astSind(prj->p[3]) + 1.0;
- if (prj->w[3] == 0.0) {
- return 1;
- }
-
- prj->w[1] = -prj->p[1] * astCosd(prj->p[3]) * astSind(prj->p[2]);
- prj->w[2] = prj->p[1] * astCosd(prj->p[3]) * astCosd(prj->p[2]);
- prj->w[4] = prj->r0 * prj->w[1];
- prj->w[5] = prj->r0 * prj->w[2];
- prj->w[6] = prj->r0 * prj->w[3];
- prj->w[7] = (prj->w[3] - 1.0) * prj->w[3] - 1.0;
-
- if (fabs(prj->w[3] - 1.0) < 1.0) {
- prj->w[8] = astASind(1.0 - prj->w[3]);
- } else {
- prj->w[8] = -90.0;
- }
-
- prj->astPRJfwd = astSZPfwd;
- prj->astPRJrev = astSZPrev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astSZPfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- double a, b, cphi, cthe, s, sphi, t;
-
- if (abs(prj->flag) != WCS__SZP) {
- if (astSZPset(prj)) return 1;
- }
-
- cphi = astCosd(phi);
- sphi = astSind(phi);
- cthe = astCosd(theta);
- s = 1.0 - astSind(theta);
-
- t = prj->w[3] - s;
- if (t == 0.0) {
- return 2;
- }
-
- *x = (prj->w[6]*cthe*sphi - prj->w[4]*s)/t;
- *y = -(prj->w[6]*cthe*cphi + prj->w[5]*s)/t;
-
- /* Bounds checking. */
- if (prj->flag > 0) {
- /* Divergence. */
- if (theta < prj->w[8]) {
- return 2;
- }
-
- /* Overlap. */
- if (fabs(prj->p[1]) > 1.0) {
- s = prj->w[1]*sphi - prj->w[2]*cphi;
- t = 1.0/sqrt(prj->w[7] + s*s);
-
- if (fabs(t) <= 1.0) {
- s = astATan2d(s, prj->w[3] - 1.0);
- t = astASind(t);
- a = s - t;
- b = s + t + 180.0;
-
- if (a > 90.0) a -= 360.0;
- if (b > 90.0) b -= 360.0;
-
- if (theta < ((a > b) ? a : b)) {
- return 2;
- }
- }
- }
- }
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astSZPrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- double a, b, c, d, r2, sth1, sth2, sthe, sxy, t, x1, xp, y1, yp, z;
- const double tol = 1.0e-13;
-
- if (abs(prj->flag) != WCS__SZP) {
- if (astSZPset(prj)) return 1;
- }
-
- xp = x*prj->w[0];
- yp = y*prj->w[0];
- r2 = xp*xp + yp*yp;
-
- x1 = (xp - prj->w[1])/prj->w[3];
- y1 = (yp - prj->w[2])/prj->w[3];
- sxy = xp*x1 + yp*y1;
-
- if (r2 < 1.0e-10) {
- /* Use small angle formula. */
- z = r2/2.0;
- *theta = 90.0 - R2D*sqrt(r2/(1.0 + sxy));
-
- } else {
- t = x1*x1 + y1*y1;
- a = t + 1.0;
- b = sxy - t;
- c = r2 - sxy - sxy + t - 1.0;
- d = b*b - a*c;
-
- /* Check for a solution. */
- if (d < 0.0) {
- return 2;
- }
- d = sqrt(d);
-
- /* Choose solution closest to pole. */
- sth1 = (-b + d)/a;
- sth2 = (-b - d)/a;
- sthe = (sth1 > sth2) ? sth1 : sth2;
- if (sthe > 1.0) {
- if (sthe-1.0 < tol) {
- sthe = 1.0;
- } else {
- sthe = (sth1 < sth2) ? sth1 : sth2;
- }
- }
-
- if (sthe < -1.0) {
- if (sthe+1.0 > -tol) {
- sthe = -1.0;
- }
- }
-
- if (sthe > 1.0 || sthe < -1.0) {
- return 2;
- }
-
- *theta = astASind(sthe);
-
- z = 1.0 - sthe;
- }
-
- *phi = astATan2d(xp - x1*z, -(yp - y1*z));
-
- return 0;
-}
-
-/*============================================================================
-* TAN: gnomonic projection.
-*
-* Given and/or returned:
-* prj->flag TAN, or -TAN if prj->flag is given < 0.
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "TAN"
-* prj->phi0 0.0
-* prj->theta0 90.0
-* prj->astPRJfwd Pointer to astTANfwd().
-* prj->astPRJrev Pointer to astTANrev().
-*===========================================================================*/
-
-int astTANset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- strcpy(prj->code, "TAN");
- prj->flag = copysign(WCS__TAN, prj->flag);
- prj->phi0 = 0.0;
- prj->theta0 = 90.0;
-
- if (prj->r0 == 0.0) prj->r0 = R2D;
-
- prj->astPRJfwd = astTANfwd;
- prj->astPRJrev = astTANrev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astTANfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- double r, s;
-
- if (abs(prj->flag) != WCS__TAN) {
- if(astTANset(prj)) return 1;
- }
-
- s = astSind(theta);
- if (s == 0.0) {
- return 2;
- }
-
- r = prj->r0*astCosd(theta)/s;
- *x = r*astSind(phi);
- *y = -r*astCosd(phi);
-
- if (prj->flag > 0 && s < 0.0) {
- return 2;
- }
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astTANrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- double r;
-
- if (abs(prj->flag) != WCS__TAN) {
- if (astTANset(prj)) return 1;
- }
-
- r = sqrt(x*x + y*y);
- if (r == 0.0) {
- *phi = 0.0;
- } else {
- *phi = astATan2d(x, -y);
- }
- *theta = astATan2d(prj->r0, r);
-
- return 0;
-}
-
-/*============================================================================
-* STG: stereographic projection.
-*
-* Given and/or returned:
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "STG"
-* prj->flag STG
-* prj->phi0 0.0
-* prj->theta0 90.0
-* prj->w[0] 2*r0
-* prj->w[1] 1/(2*r0)
-* prj->astPRJfwd Pointer to astSTGfwd().
-* prj->astPRJrev Pointer to astSTGrev().
-*===========================================================================*/
-
-int astSTGset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- strcpy(prj->code, "STG");
- prj->flag = WCS__STG;
- prj->phi0 = 0.0;
- prj->theta0 = 90.0;
-
- if (prj->r0 == 0.0) {
- prj->r0 = R2D;
- prj->w[0] = 360.0/PI;
- prj->w[1] = PI/360.0;
- } else {
- prj->w[0] = 2.0*prj->r0;
- prj->w[1] = 1.0/prj->w[0];
- }
-
- prj->astPRJfwd = astSTGfwd;
- prj->astPRJrev = astSTGrev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astSTGfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- double r, s;
-
- if (prj->flag != WCS__STG) {
- if (astSTGset(prj)) return 1;
- }
-
- s = 1.0 + astSind(theta);
- if (s == 0.0) {
- return 2;
- }
-
- r = prj->w[0]*astCosd(theta)/s;
- *x = r*astSind(phi);
- *y = -r*astCosd(phi);
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astSTGrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- double r;
-
- if (prj->flag != WCS__STG) {
- if (astSTGset(prj)) return 1;
- }
-
- r = sqrt(x*x + y*y);
- if (r == 0.0) {
- *phi = 0.0;
- } else {
- *phi = astATan2d(x, -y);
- }
- *theta = 90.0 - 2.0*astATand(r*prj->w[1]);
-
- return 0;
-}
-
-/*============================================================================
-* SIN: orthographic/synthesis projection.
-*
-* Given:
-* prj->p[1:2] Obliqueness parameters, xi and eta.
-*
-* Given and/or returned:
-* prj->flag SIN, or -SIN if prj->flag is given < 0.
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "SIN"
-* prj->phi0 0.0
-* prj->theta0 90.0
-* prj->w[0] 1/r0
-* prj->w[1] xi**2 + eta**2
-* prj->w[2] xi**2 + eta**2 + 1
-* prj->w[3] xi**2 + eta**2 - 1
-* prj->astPRJfwd Pointer to astSINfwd().
-* prj->astPRJrev Pointer to astSINrev().
-*===========================================================================*/
-
-int astSINset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- strcpy(prj->code, "SIN");
- prj->flag = copysign(WCS__SIN, prj->flag);
- prj->phi0 = 0.0;
- prj->theta0 = 90.0;
-
- if (prj->r0 == 0.0) prj->r0 = R2D;
-
- prj->w[0] = 1.0/prj->r0;
- prj->w[1] = prj->p[1]*prj->p[1] + prj->p[2]*prj->p[2];
- prj->w[2] = prj->w[1] + 1.0;
- prj->w[3] = prj->w[1] - 1.0;
-
- prj->astPRJfwd = astSINfwd;
- prj->astPRJrev = astSINrev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astSINfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- double cphi, cthe, sphi, t, z;
-
- if (abs(prj->flag) != WCS__SIN) {
- if (astSINset(prj)) return 1;
- }
-
- t = (90.0 - fabs(theta))*D2R;
- if (t < 1.0e-5) {
- if (theta > 0.0) {
- z = t*t/2.0;
- } else {
- z = 2.0 - t*t/2.0;
- }
- cthe = t;
- } else {
- z = 1.0 - astSind(theta);
- cthe = astCosd(theta);
- }
-
- cphi = astCosd(phi);
- sphi = astSind(phi);
- *x = prj->r0*(cthe*sphi + prj->p[1]*z);
- *y = -prj->r0*(cthe*cphi - prj->p[2]*z);
-
- /* Validate this solution. */
- if (prj->flag > 0) {
- if (prj->w[1] == 0.0) {
- /* Orthographic projection. */
- if (theta < 0.0) {
- return 2;
- }
- } else {
- /* "Synthesis" projection. */
- t = -astATand(prj->p[1]*sphi - prj->p[2]*cphi);
- if (theta < t) {
- return 2;
- }
- }
- }
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astSINrev (x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- const double tol = 1.0e-13;
- double a, b, c, d, r2, sth1, sth2, sthe, sxy, x0, x1, xp, y0, y1, yp, z;
-
- if (abs(prj->flag) != WCS__SIN) {
- if (astSINset(prj)) return 1;
- }
-
- /* Compute intermediaries. */
- x0 = x*prj->w[0];
- y0 = y*prj->w[0];
- r2 = x0*x0 + y0*y0;
-
- if (prj->w[1] == 0.0) {
- /* Orthographic projection. */
- if (r2 != 0.0) {
- *phi = astATan2d(x0, -y0);
- } else {
- *phi = 0.0;
- }
-
- if (r2 < 0.5) {
- *theta = astACosd(sqrt(r2));
- } else if (r2 <= 1.0) {
- *theta = astASind(sqrt(1.0 - r2));
- } else {
- return 2;
- }
-
- } else {
- /* "Synthesis" projection. */
- x1 = prj->p[1];
- y1 = prj->p[2];
- sxy = x0*x1 + y0*y1;
-
- if (r2 < 1.0e-10) {
- /* Use small angle formula. */
- z = r2/2.0;
- *theta = 90.0 - R2D*sqrt(r2/(1.0 + sxy));
-
- } else {
- a = prj->w[2];
- b = sxy - prj->w[1];
- c = r2 - sxy - sxy + prj->w[3];
- d = b*b - a*c;
-
- /* Check for a solution. */
- if (d < 0.0) {
- return 2;
- }
- d = sqrt(d);
-
- /* Choose solution closest to pole. */
- sth1 = (-b + d)/a;
- sth2 = (-b - d)/a;
- sthe = (sth1 > sth2) ? sth1 : sth2;
- if (sthe > 1.0) {
- if (sthe-1.0 < tol) {
- sthe = 1.0;
- } else {
- sthe = (sth1 < sth2) ? sth1 : sth2;
- }
- }
-
- if (sthe < -1.0) {
- if (sthe+1.0 > -tol) {
- sthe = -1.0;
- }
- }
-
- if (sthe > 1.0 || sthe < -1.0) {
- return 2;
- }
-
- *theta = astASind(sthe);
- z = 1.0 - sthe;
- }
-
- xp = -y0 + prj->p[2]*z;
- yp = x0 - prj->p[1]*z;
- if (xp == 0.0 && yp == 0.0) {
- *phi = 0.0;
- } else {
- *phi = astATan2d(yp,xp);
- }
- }
-
- return 0;
-}
-
-/*============================================================================
-* ARC: zenithal/azimuthal equidistant projection.
-*
-* Given and/or returned:
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "ARC"
-* prj->flag ARC
-* prj->phi0 0.0
-* prj->theta0 90.0
-* prj->w[0] r0*(pi/180)
-* prj->w[1] (180/pi)/r0
-* prj->astPRJfwd Pointer to astARCfwd().
-* prj->astPRJrev Pointer to astARCrev().
-*===========================================================================*/
-
-int astARCset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- strcpy(prj->code, "ARC");
- prj->flag = WCS__ARC;
- prj->phi0 = 0.0;
- prj->theta0 = 90.0;
-
- if (prj->r0 == 0.0) {
- prj->r0 = R2D;
- prj->w[0] = 1.0;
- prj->w[1] = 1.0;
- } else {
- prj->w[0] = prj->r0*D2R;
- prj->w[1] = 1.0/prj->w[0];
- }
-
- prj->astPRJfwd = astARCfwd;
- prj->astPRJrev = astARCrev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astARCfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- double r;
-
- if (prj->flag != WCS__ARC) {
- if (astARCset(prj)) return 1;
- }
-
- r = prj->w[0]*(90.0 - theta);
- *x = r*astSind(phi);
- *y = -r*astCosd(phi);
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astARCrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- double r;
-
- if (prj->flag != WCS__ARC) {
- if (astARCset(prj)) return 1;
- }
-
- r = sqrt(x*x + y*y);
- if (r == 0.0) {
- *phi = 0.0;
- } else {
- *phi = astATan2d(x, -y);
- }
- *theta = 90.0 - r*prj->w[1];
-
- return 0;
-}
-
-/*============================================================================
-* ZPN: zenithal/azimuthal polynomial projection.
-*
-* Given:
-* prj->p[0:WCSLIB_MXPAR-1] Polynomial coefficients.
-*
-* Given and/or returned:
-* prj->flag ZPN, or -ZPN if prj->flag is given < 0.
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "ZPN"
-* prj->phi0 0.0
-* prj->theta0 90.0
-* prj->n Degree of the polynomial, N.
-* prj->w[0] Co-latitude of the first point of inflection (N > 2).
-* prj->w[1] Radius of the first point of inflection (N > 2).
-* prj->astPRJfwd Pointer to astZPNfwd().
-* prj->astPRJrev Pointer to astZPNrev().
-*===========================================================================*/
-
-int astZPNset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- int i, j, k, plen;
- double d, d1, d2, r, zd, zd1, zd2;
- const double tol = 1.0e-13;
-
- strcpy(prj->code, "ZPN");
- prj->flag = copysign(WCS__ZPN, prj->flag);
- prj->phi0 = 0.0;
- prj->theta0 = 90.0;
-
- if (prj->r0 == 0.0) prj->r0 = R2D;
-
- /* Find the highest non-zero coefficient. */
- plen = astSizeOf( prj->p )/sizeof( double );
- for (k = plen-1; k >= 0 && prj->p[k] == 0.0; k--);
- if (k < 0) return 1;
-
- prj->n = k;
-
- if (k >= 3) {
- /* Find the point of inflection closest to the pole. */
- zd1 = 0.0;
- d1 = prj->p[1];
- if (d1 <= 0.0) {
- return 1;
- }
-
- /* Find the point where the derivative first goes negative. */
- for (i = 0; i < 180; i++) {
- zd2 = i*D2R;
- d2 = 0.0;
- for (j = k; j > 0; j--) {
- d2 = d2*zd2 + j*prj->p[j];
- }
-
- if (d2 <= 0.0) break;
- zd1 = zd2;
- d1 = d2;
- }
-
- if (i == 180) {
- /* No negative derivative -> no point of inflection. */
- zd = PI;
- } else {
- /* Find where the derivative is zero. */
- for (i = 1; i <= 10; i++) {
- zd = zd1 - d1*(zd2-zd1)/(d2-d1);
-
- d = 0.0;
- for (j = k; j > 0; j--) {
- d = d*zd + j*prj->p[j];
- }
-
- if (fabs(d) < tol) break;
-
- if (d < 0.0) {
- zd2 = zd;
- d2 = d;
- } else {
- zd1 = zd;
- d1 = d;
- }
- }
- }
-
- r = 0.0;
- for (j = k; j >= 0; j--) {
- r = r*zd + prj->p[j];
- }
- prj->w[0] = zd;
- prj->w[1] = r;
- }
-
- prj->astPRJfwd = astZPNfwd;
- prj->astPRJrev = astZPNrev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astZPNfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- int j;
- double r, s;
-
- if (abs(prj->flag) != WCS__ZPN) {
- if (astZPNset(prj)) return 1;
- }
-
- s = (90.0 - theta)*D2R;
-
- r = 0.0;
- for (j = prj->n; j >= 0; j--) {
- r = r*s + prj->p[j];
- }
- r = prj->r0*r;
-
- *x = r*astSind(phi);
- *y = -r*astCosd(phi);
-
- if (prj->flag > 0 && s > prj->w[0] && prj->n > 2 ) {
- return 2;
- }
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astZPNrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- int i, j, k;
- double a, b, c, d, lambda, r, r1, r2, rt, zd, zd1, zd2;
- const double tol = 1.0e-13;
-
- if (abs(prj->flag) != WCS__ZPN) {
- if (astZPNset(prj)) return 1;
- }
-
- k = prj->n;
-
- r = sqrt(x*x + y*y)/prj->r0;
-
- if (k < 1) {
- /* Constant - no solution. */
- return 1;
- } else if (k == 1) {
- /* Linear. */
- zd = (r - prj->p[0])/prj->p[1];
- } else if (k == 2) {
- /* Quadratic. */
- a = prj->p[2];
- b = prj->p[1];
- c = prj->p[0] - r;
-
- d = b*b - 4.0*a*c;
- if (d < 0.0) {
- return 2;
- }
- d = sqrt(d);
-
- /* Choose solution closest to pole. */
- zd1 = (-b + d)/(2.0*a);
- zd2 = (-b - d)/(2.0*a);
- zd = (zd1<zd2) ? zd1 : zd2;
- if (zd < -tol) zd = (zd1>zd2) ? zd1 : zd2;
- if (zd < 0.0) {
- if (zd < -tol) {
- return 2;
- }
- zd = 0.0;
- } else if (zd > PI) {
- if (zd > PI+tol) {
- return 2;
- }
- zd = PI;
- }
- } else {
- /* Higher order - solve iteratively. */
- zd1 = 0.0;
- r1 = prj->p[0];
- zd2 = prj->w[0];
- r2 = prj->w[1];
-
- if (r < r1) {
- if (r < r1-tol) {
- return 2;
- }
- zd = zd1;
- } else if (r > r2) {
- if (r > r2+tol) {
- return 2;
- }
- zd = zd2;
- } else {
- /* Disect the interval. */
- for (j = 0; j < 100; j++) {
- lambda = (r2 - r)/(r2 - r1);
- if (lambda < 0.1) {
- lambda = 0.1;
- } else if (lambda > 0.9) {
- lambda = 0.9;
- }
-
- zd = zd2 - lambda*(zd2 - zd1);
-
- rt = 0.0;
- for (i = k; i >= 0; i--) {
- rt = (rt * zd) + prj->p[i];
- }
-
- if (rt < r) {
- if (r-rt < tol) break;
- r1 = rt;
- zd1 = zd;
- } else {
- if (rt-r < tol) break;
- r2 = rt;
- zd2 = zd;
- }
-
- if (fabs(zd2-zd1) < tol) break;
- }
- }
- }
-
- if (r == 0.0) {
- *phi = 0.0;
- } else {
- *phi = astATan2d(x, -y);
- }
- *theta = 90.0 - zd*R2D;
-
- return 0;
-}
-
-/*============================================================================
-* ZEA: zenithal/azimuthal equal area projection.
-*
-* Given and/or returned:
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "ZEA"
-* prj->flag ZEA
-* prj->phi0 0.0
-* prj->theta0 90.0
-* prj->w[0] 2*r0
-* prj->w[1] 1/(2*r0)
-* prj->astPRJfwd Pointer to astZEAfwd().
-* prj->astPRJrev Pointer to astZEArev().
-*===========================================================================*/
-
-int astZEAset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- strcpy(prj->code, "ZEA");
- prj->flag = WCS__ZEA;
- prj->phi0 = 0.0;
- prj->theta0 = 90.0;
-
- if (prj->r0 == 0.0) {
- prj->r0 = R2D;
- prj->w[0] = 360.0/PI;
- prj->w[1] = PI/360.0;
- } else {
- prj->w[0] = 2.0*prj->r0;
- prj->w[1] = 1.0/prj->w[0];
- }
-
- prj->astPRJfwd = astZEAfwd;
- prj->astPRJrev = astZEArev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astZEAfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- double r;
-
- if (prj->flag != WCS__ZEA) {
- if (astZEAset(prj)) return 1;
- }
-
- r = prj->w[0]*astSind((90.0 - theta)/2.0);
- *x = r*astSind(phi);
- *y = -r*astCosd(phi);
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astZEArev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- double r, s;
- const double tol = 1.0e-12;
-
- if (prj->flag != WCS__ZEA) {
- if (astZEAset(prj)) return 1;
- }
-
- r = sqrt(x*x + y*y);
- if (r == 0.0) {
- *phi = 0.0;
- } else {
- *phi = astATan2d(x, -y);
- }
-
- s = r*prj->w[1];
- if (fabs(s) > 1.0) {
- if (fabs(r - prj->w[0]) < tol) {
- *theta = -90.0;
- } else {
- return 2;
- }
- } else {
- *theta = 90.0 - 2.0*astASind(s);
- }
-
- return 0;
-}
-
-/*============================================================================
-* AIR: Airy's projection.
-*
-* Given:
-* prj->p[1] Latitude theta_b within which the error is minimized, in
-* degrees.
-*
-* Given and/or returned:
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "AIR"
-* prj->flag AIR
-* prj->phi0 0.0
-* prj->theta0 90.0
-* prj->w[0] 2*r0
-* prj->w[1] ln(cos(xi_b))/tan(xi_b)**2, where xi_b = (90-theta_b)/2
-* prj->w[2] 1/2 - prj->w[1]
-* prj->w[3] 2*r0*prj->w[2]
-* prj->w[4] tol, cutoff for using small angle approximation, in
-* radians.
-* prj->w[5] prj->w[2]*tol
-* prj->w[6] (180/pi)/prj->w[2]
-* prj->astPRJfwd Pointer to astAIRfwd().
-* prj->astPRJrev Pointer to astAIRrev().
-*===========================================================================*/
-
-int astAIRset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- const double tol = 1.0e-4;
- double cxi;
-
- strcpy(prj->code, "AIR");
- prj->flag = WCS__AIR;
- prj->phi0 = 0.0;
- prj->theta0 = 90.0;
-
- if (prj->r0 == 0.0) prj->r0 = R2D;
-
- prj->w[0] = 2.0*prj->r0;
- if (prj->p[1] == 90.0) {
- prj->w[1] = -0.5;
- prj->w[2] = 1.0;
- } else if (prj->p[1] > -90.0) {
- cxi = astCosd((90.0 - prj->p[1])/2.0);
- prj->w[1] = log(cxi)*(cxi*cxi)/(1.0-cxi*cxi);
- prj->w[2] = 0.5 - prj->w[1];
- } else {
- return 1;
- }
-
- prj->w[3] = prj->w[0] * prj->w[2];
- prj->w[4] = tol;
- prj->w[5] = prj->w[2]*tol;
- prj->w[6] = R2D/prj->w[2];
-
- prj->astPRJfwd = astAIRfwd;
- prj->astPRJrev = astAIRrev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astAIRfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- double cxi, r, txi, xi;
-
- if (prj->flag != WCS__AIR) {
- if (astAIRset(prj)) return 1;
- }
-
- if (theta == 90.0) {
- r = 0.0;
- } else if (theta > -90.0) {
- xi = D2R*(90.0 - theta)/2.0;
- if (xi < prj->w[4]) {
- r = xi*prj->w[3];
- } else {
- cxi = astCosd((90.0 - theta)/2.0);
- txi = sqrt(1.0-cxi*cxi)/cxi;
- r = -prj->w[0]*(log(cxi)/txi + prj->w[1]*txi);
- }
- } else {
- return 2;
- }
-
- *x = r*astSind(phi);
- *y = -r*astCosd(phi);
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astAIRrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- int j;
- double cxi, lambda, r, r1, r2, rt, txi, x1, x2, xi;
- const double tol = 1.0e-12;
-
- if (prj->flag != WCS__AIR) {
- if (astAIRset(prj)) return 1;
- }
-
- r = sqrt(x*x + y*y)/prj->w[0];
-
- if (r == 0.0) {
- xi = 0.0;
- } else if (r < prj->w[5]) {
- xi = r*prj->w[6];
- } else {
- /* Find a solution interval. */
- x1 = 1.0;
- r1 = 0.0;
- for (j = 0; j < 30; j++) {
- x2 = x1/2.0;
- txi = sqrt(1.0-x2*x2)/x2;
- r2 = -(log(x2)/txi + prj->w[1]*txi);
-
- if (r2 >= r) break;
- x1 = x2;
- r1 = r2;
- }
- if (j == 30) return 2;
-
- for (j = 0; j < 100; j++) {
- /* Weighted division of the interval. */
- lambda = (r2-r)/(r2-r1);
- if (lambda < 0.1) {
- lambda = 0.1;
- } else if (lambda > 0.9) {
- lambda = 0.9;
- }
- cxi = x2 - lambda*(x2-x1);
-
- txi = sqrt(1.0-cxi*cxi)/cxi;
- rt = -(log(cxi)/txi + prj->w[1]*txi);
-
- if (rt < r) {
- if (r-rt < tol) break;
- r1 = rt;
- x1 = cxi;
- } else {
- if (rt-r < tol) break;
- r2 = rt;
- x2 = cxi;
- }
- }
- if (j == 100) return 2;
-
- xi = astACosd(cxi);
- }
-
- if (r == 0.0) {
- *phi = 0.0;
- } else {
- *phi = astATan2d(x, -y);
- }
- *theta = 90.0 - 2.0*xi;
-
- return 0;
-}
-
-/*============================================================================
-* CYP: cylindrical perspective projection.
-*
-* Given:
-* prj->p[1] Distance of point of projection from the centre of the
-* generating sphere, mu, in units of r0.
-* prj->p[2] Radius of the cylinder of projection, lambda, in units of
-* r0.
-*
-* Given and/or returned:
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "CYP"
-* prj->flag CYP
-* prj->phi0 0.0
-* prj->theta0 0.0
-* prj->w[0] r0*lambda*(pi/180)
-* prj->w[1] (180/pi)/(r0*lambda)
-* prj->w[2] r0*(mu + lambda)
-* prj->w[3] 1/(r0*(mu + lambda))
-* prj->astPRJfwd Pointer to astCYPfwd().
-* prj->astPRJrev Pointer to astCYPrev().
-*===========================================================================*/
-
-int astCYPset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- strcpy(prj->code, "CYP");
- prj->flag = WCS__CYP;
- prj->phi0 = 0.0;
- prj->theta0 = 0.0;
-
- if (prj->r0 == 0.0) {
- prj->r0 = R2D;
-
- prj->w[0] = prj->p[2];
- if (prj->w[0] == 0.0) {
- return 1;
- }
-
- prj->w[1] = 1.0/prj->w[0];
-
- prj->w[2] = R2D*(prj->p[1] + prj->p[2]);
- if (prj->w[2] == 0.0) {
- return 1;
- }
-
- prj->w[3] = 1.0/prj->w[2];
- } else {
- prj->w[0] = prj->r0*prj->p[2]*D2R;
- if (prj->w[0] == 0.0) {
- return 1;
- }
-
- prj->w[1] = 1.0/prj->w[0];
-
- prj->w[2] = prj->r0*(prj->p[1] + prj->p[2]);
- if (prj->w[2] == 0.0) {
- return 1;
- }
-
- prj->w[3] = 1.0/prj->w[2];
- }
-
- prj->astPRJfwd = astCYPfwd;
- prj->astPRJrev = astCYPrev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCYPfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- double s;
-
- if (prj->flag != WCS__CYP) {
- if (astCYPset(prj)) return 1;
- }
-
- s = prj->p[1] + astCosd(theta);
- if (s == 0.0) {
- return 2;
- }
-
- *x = prj->w[0]*phi;
- *y = prj->w[2]*astSind(theta)/s;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCYPrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- double eta;
- double a;
- const double tol = 1.0e-13;
-
- if (prj->flag != WCS__CYP) {
- if (astCYPset(prj)) return 1;
- }
-
- *phi = x*prj->w[1];
- eta = y*prj->w[3];
-
- a = eta*prj->p[1]/sqrt(eta*eta+1.0);
- if( fabs( a ) < 1.0 ) {
- *theta = astATan2d(eta,1.0) + astASind( a );
-
- } else if( fabs( a ) < 1.0 + tol ) {
- if( a > 0.0 ){
- *theta = astATan2d(eta,1.0) + 90.0;
- } else {
- *theta = astATan2d(eta,1.0) - 90.0;
- }
-
- } else {
- return 2;
- }
-
- return 0;
-}
-
-/*============================================================================
-* CEA: cylindrical equal area projection.
-*
-* Given:
-* prj->p[1] Square of the cosine of the latitude at which the
-* projection is conformal, lambda.
-*
-* Given and/or returned:
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "CEA"
-* prj->flag CEA
-* prj->phi0 0.0
-* prj->theta0 0.0
-* prj->w[0] r0*(pi/180)
-* prj->w[1] (180/pi)/r0
-* prj->w[2] r0/lambda
-* prj->w[3] lambda/r0
-* prj->astPRJfwd Pointer to astCEAfwd().
-* prj->astPRJrev Pointer to astCEArev().
-*===========================================================================*/
-
-int astCEAset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- strcpy(prj->code, "CEA");
- prj->flag = WCS__CEA;
- prj->phi0 = 0.0;
- prj->theta0 = 0.0;
-
- if (prj->r0 == 0.0) {
- prj->r0 = R2D;
- prj->w[0] = 1.0;
- prj->w[1] = 1.0;
- if (prj->p[1] <= 0.0 || prj->p[1] > 1.0) {
- return 1;
- }
- prj->w[2] = prj->r0/prj->p[1];
- prj->w[3] = prj->p[1]/prj->r0;
- } else {
- prj->w[0] = prj->r0*D2R;
- prj->w[1] = R2D/prj->r0;
- if (prj->p[1] <= 0.0 || prj->p[1] > 1.0) {
- return 1;
- }
- prj->w[2] = prj->r0/prj->p[1];
- prj->w[3] = prj->p[1]/prj->r0;
- }
-
- prj->astPRJfwd = astCEAfwd;
- prj->astPRJrev = astCEArev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCEAfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- if (prj->flag != WCS__CEA) {
- if (astCEAset(prj)) return 1;
- }
-
- *x = prj->w[0]*phi;
- *y = prj->w[2]*astSind(theta);
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCEArev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- double s;
- const double tol = 1.0e-13;
-
- if (prj->flag != WCS__CEA) {
- if (astCEAset(prj)) return 1;
- }
-
- s = y*prj->w[3];
- if (fabs(s) > 1.0) {
- if (fabs(s) > 1.0+tol) {
- return 2;
- }
- s = copysign(1.0,s);
- }
-
- *phi = x*prj->w[1];
- *theta = astASind(s);
-
- return 0;
-}
-
-/*============================================================================
-* CAR: Cartesian projection.
-*
-* Given and/or returned:
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "CAR"
-* prj->flag CAR
-* prj->phi0 0.0
-* prj->theta0 0.0
-* prj->w[0] r0*(pi/180)
-* prj->w[1] (180/pi)/r0
-* prj->astPRJfwd Pointer to astCARfwd().
-* prj->astPRJrev Pointer to astCARrev().
-*===========================================================================*/
-
-int astCARset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- strcpy(prj->code, "CAR");
- prj->flag = WCS__CAR;
- prj->phi0 = 0.0;
- prj->theta0 = 0.0;
-
- if (prj->r0 == 0.0) {
- prj->r0 = R2D;
- prj->w[0] = 1.0;
- prj->w[1] = 1.0;
- } else {
- prj->w[0] = prj->r0*D2R;
- prj->w[1] = 1.0/prj->w[0];
- }
-
- prj->astPRJfwd = astCARfwd;
- prj->astPRJrev = astCARrev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCARfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- if (prj->flag != WCS__CAR) {
- if (astCARset(prj)) return 1;
- }
-
- *x = prj->w[0]*phi;
- *y = prj->w[0]*theta;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCARrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- if (prj->flag != WCS__CAR) {
- if (astCARset(prj)) return 1;
- }
-
- *phi = prj->w[1]*x;
- *theta = prj->w[1]*y;
-
- return 0;
-}
-
-/*============================================================================
-* MER: Mercator's projection.
-*
-* Given and/or returned:
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "MER"
-* prj->flag MER
-* prj->phi0 0.0
-* prj->theta0 0.0
-* prj->w[0] r0*(pi/180)
-* prj->w[1] (180/pi)/r0
-* prj->astPRJfwd Pointer to astMERfwd().
-* prj->astPRJrev Pointer to astMERrev().
-*===========================================================================*/
-
-int astMERset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- strcpy(prj->code, "MER");
- prj->flag = WCS__MER;
- prj->phi0 = 0.0;
- prj->theta0 = 0.0;
-
- if (prj->r0 == 0.0) {
- prj->r0 = R2D;
- prj->w[0] = 1.0;
- prj->w[1] = 1.0;
- } else {
- prj->w[0] = prj->r0*D2R;
- prj->w[1] = 1.0/prj->w[0];
- }
-
- prj->astPRJfwd = astMERfwd;
- prj->astPRJrev = astMERrev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astMERfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- if (prj->flag != WCS__MER) {
- if (astMERset(prj)) return 1;
- }
-
- if (theta <= -90.0 || theta >= 90.0) {
- return 2;
- }
-
- *x = prj->w[0]*phi;
- *y = prj->r0*log(astTand((90.0+theta)/2.0));
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astMERrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- if (prj->flag != WCS__MER) {
- if (astMERset(prj)) return 1;
- }
-
- *phi = x*prj->w[1];
- *theta = 2.0*astATand(exp(y/prj->r0)) - 90.0;
-
- return 0;
-}
-
-/*============================================================================
-* SFL: Sanson-Flamsteed ("global sinusoid") projection.
-*
-* Given and/or returned:
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "SFL"
-* prj->flag SFL
-* prj->phi0 0.0
-* prj->theta0 0.0
-* prj->w[0] r0*(pi/180)
-* prj->w[1] (180/pi)/r0
-* prj->astPRJfwd Pointer to astSFLfwd().
-* prj->astPRJrev Pointer to astSFLrev().
-*===========================================================================*/
-
-int astSFLset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- strcpy(prj->code, "SFL");
- prj->flag = WCS__SFL;
- prj->phi0 = 0.0;
- prj->theta0 = 0.0;
-
- if (prj->r0 == 0.0) {
- prj->r0 = R2D;
- prj->w[0] = 1.0;
- prj->w[1] = 1.0;
- } else {
- prj->w[0] = prj->r0*D2R;
- prj->w[1] = 1.0/prj->w[0];
- }
-
- prj->astPRJfwd = astSFLfwd;
- prj->astPRJrev = astSFLrev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astSFLfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- if (prj->flag != WCS__SFL) {
- if (astSFLset(prj)) return 1;
- }
-
- *x = prj->w[0]*phi*astCosd(theta);
- *y = prj->w[0]*theta;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astSFLrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- double w;
-
- if (prj->flag != WCS__SFL) {
- if (astSFLset(prj)) return 1;
- }
-
- w = cos(y/prj->r0);
- if (w == 0.0) {
- *phi = 0.0;
- } else {
- *phi = x*prj->w[1]/cos(y/prj->r0);
- }
- *theta = y*prj->w[1];
-
- return 0;
-}
-
-/*============================================================================
-* PAR: parabolic projection.
-*
-* Given and/or returned:
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "PAR"
-* prj->flag PAR
-* prj->phi0 0.0
-* prj->theta0 0.0
-* prj->w[0] r0*(pi/180)
-* prj->w[1] (180/pi)/r0
-* prj->w[2] pi*r0
-* prj->w[3] 1/(pi*r0)
-* prj->astPRJfwd Pointer to astPARfwd().
-* prj->astPRJrev Pointer to astPARrev().
-*===========================================================================*/
-
-int astPARset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- strcpy(prj->code, "PAR");
- prj->flag = WCS__PAR;
- prj->phi0 = 0.0;
- prj->theta0 = 0.0;
-
- if (prj->r0 == 0.0) {
- prj->r0 = R2D;
- prj->w[0] = 1.0;
- prj->w[1] = 1.0;
- prj->w[2] = 180.0;
- prj->w[3] = 1.0/prj->w[2];
- } else {
- prj->w[0] = prj->r0*D2R;
- prj->w[1] = 1.0/prj->w[0];
- prj->w[2] = PI*prj->r0;
- prj->w[3] = 1.0/prj->w[2];
- }
-
- prj->astPRJfwd = astPARfwd;
- prj->astPRJrev = astPARrev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astPARfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- double s;
-
- if (prj->flag != WCS__PAR) {
- if (astPARset(prj)) return 1;
- }
-
- s = astSind(theta/3.0);
- *x = prj->w[0]*phi*(1.0 - 4.0*s*s);
- *y = prj->w[2]*s;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astPARrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- double s, t;
-
- if (prj->flag != WCS__PAR) {
- if (astPARset(prj)) return 1;
- }
-
- s = y*prj->w[3];
- if (s > 1.0 || s < -1.0) {
- return 2;
- }
-
- t = 1.0 - 4.0*s*s;
- if (t == 0.0) {
- if (x == 0.0) {
- *phi = 0.0;
- } else {
- return 2;
- }
- } else {
- *phi = prj->w[1]*x/t;
- }
-
- *theta = 3.0*astASind(s);
-
- return 0;
-}
-
-/*============================================================================
-* MOL: Mollweide's projection.
-*
-* Given and/or returned:
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "MOL"
-* prj->flag MOL
-* prj->phi0 0.0
-* prj->theta0 0.0
-* prj->w[0] sqrt(2)*r0
-* prj->w[1] sqrt(2)*r0/90
-* prj->w[2] 1/(sqrt(2)*r0)
-* prj->w[3] 90/r0
-* prj->astPRJfwd Pointer to astMOLfwd().
-* prj->astPRJrev Pointer to astMOLrev().
-*===========================================================================*/
-
-int astMOLset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- strcpy(prj->code, "MOL");
- prj->flag = WCS__MOL;
- prj->phi0 = 0.0;
- prj->theta0 = 0.0;
-
- if (prj->r0 == 0.0) prj->r0 = R2D;
-
- prj->w[0] = SQRT2*prj->r0;
- prj->w[1] = prj->w[0]/90.0;
- prj->w[2] = 1.0/prj->w[0];
- prj->w[3] = 90.0/prj->r0;
- prj->w[4] = 2.0/PI;
-
- prj->astPRJfwd = astMOLfwd;
- prj->astPRJrev = astMOLrev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astMOLfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- int j;
- double gamma, resid, u, v, v0, v1;
- const double tol = 1.0e-13;
-
- if (prj->flag != WCS__MOL) {
- if (astMOLset(prj)) return 1;
- }
-
- if (fabs(theta) == 90.0) {
- *x = 0.0;
- *y = copysign(prj->w[0],theta);
- } else if (theta == 0.0) {
- *x = prj->w[1]*phi;
- *y = 0.0;
- } else {
- u = PI*astSind(theta);
- v0 = -PI;
- v1 = PI;
- v = u;
- for (j = 0; j < 100; j++) {
- resid = (v - u) + sin(v);
- if (resid < 0.0) {
- if (resid > -tol) break;
- v0 = v;
- } else {
- if (resid < tol) break;
- v1 = v;
- }
- v = (v0 + v1)/2.0;
- }
-
- gamma = v/2.0;
- *x = prj->w[1]*phi*cos(gamma);
- *y = prj->w[0]*sin(gamma);
- }
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astMOLrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- double s, y0, z;
- const double tol = 1.0e-12;
-
- if (prj->flag != WCS__MOL) {
- if (astMOLset(prj)) return 1;
- }
-
- y0 = y/prj->r0;
- s = 2.0 - y0*y0;
- if (s <= tol) {
- if (s < -tol) {
- return 2;
- }
- s = 0.0;
-
- if (fabs(x) > tol) {
- return 2;
- }
- *phi = 0.0;
- } else {
- s = sqrt(s);
- *phi = prj->w[3]*x/s;
- }
-
- z = y*prj->w[2];
- if (fabs(z) > 1.0) {
- if (fabs(z) > 1.0+tol) {
- return 2;
- }
- z = copysign(1.0,z) + y0*s/PI;
- } else {
- z = asin(z)*prj->w[4] + y0*s/PI;
- }
-
- if (fabs(z) > 1.0) {
- if (fabs(z) > 1.0+tol) {
- return 2;
- }
- z = copysign(1.0,z);
- }
-
- *theta = astASind(z);
-
- return 0;
-}
-
-/*============================================================================
-* AIT: Hammer-Aitoff projection.
-*
-* Given and/or returned:
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "AIT"
-* prj->flag AIT
-* prj->phi0 0.0
-* prj->theta0 0.0
-* prj->w[0] 2*r0**2
-* prj->w[1] 1/(2*r0)**2
-* prj->w[2] 1/(4*r0)**2
-* prj->w[3] 1/(2*r0)
-* prj->astPRJfwd Pointer to astAITfwd().
-* prj->astPRJrev Pointer to astAITrev().
-*===========================================================================*/
-
-int astAITset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- strcpy(prj->code, "AIT");
- prj->flag = WCS__AIT;
- prj->phi0 = 0.0;
- prj->theta0 = 0.0;
-
- if (prj->r0 == 0.0) prj->r0 = R2D;
-
- prj->w[0] = 2.0*prj->r0*prj->r0;
- prj->w[1] = 1.0/(2.0*prj->w[0]);
- prj->w[2] = prj->w[1]/4.0;
- prj->w[3] = 1.0/(2.0*prj->r0);
-
- prj->astPRJfwd = astAITfwd;
- prj->astPRJrev = astAITrev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astAITfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- double cthe, w;
-
- if (prj->flag != WCS__AIT) {
- if (astAITset(prj)) return 1;
- }
-
- cthe = astCosd(theta);
- w = sqrt(prj->w[0]/(1.0 + cthe*astCosd(phi/2.0)));
- *x = 2.0*w*cthe*astSind(phi/2.0);
- *y = w*astSind(theta);
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astAITrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- double s, u, xp, yp, z;
- const double tol = 1.0e-13;
-
- if (prj->flag != WCS__AIT) {
- if (astAITset(prj)) return 1;
- }
-
- u = 1.0 - x*x*prj->w[2] - y*y*prj->w[1];
- if (u < 0.0) {
- if (u < -tol) {
- return 2;
- }
-
- u = 0.0;
- }
-
- z = sqrt(u);
- s = z*y/prj->r0;
- if (fabs(s) > 1.0) {
- if (fabs(s) > 1.0+tol) {
- return 2;
- }
- s = copysign(1.0,s);
- }
-
- xp = 2.0*z*z - 1.0;
- yp = z*x*prj->w[3];
- if (xp == 0.0 && yp == 0.0) {
- *phi = 0.0;
- } else {
- *phi = 2.0*astATan2d(yp, xp);
- }
- *theta = astASind(s);
-
- return 0;
-}
-
-/*============================================================================
-* COP: conic perspective projection.
-*
-* Given:
-* prj->p[1] sigma = (theta2+theta1)/2
-* prj->p[2] delta = (theta2-theta1)/2, where theta1 and theta2 are the
-* latitudes of the standard parallels, in degrees.
-*
-* Given and/or returned:
-* prj->flag COP, or -COP if prj->flag is given < 0.
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "COP"
-* prj->phi0 0.0
-* prj->theta0 sigma
-* prj->w[0] C = sin(sigma)
-* prj->w[1] 1/C
-* prj->w[2] Y0 = r0*cos(delta)*cot(sigma)
-* prj->w[3] r0*cos(delta)
-* prj->w[4] 1/(r0*cos(delta)
-* prj->w[5] cot(sigma)
-* prj->astPRJfwd Pointer to astCOPfwd().
-* prj->astPRJrev Pointer to astCOPrev().
-*===========================================================================*/
-
-int astCOPset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- strcpy(prj->code, "COP");
- prj->flag = copysign(WCS__COP, prj->flag);
- prj->phi0 = 0.0;
- prj->theta0 = prj->p[1];
-
- if (prj->r0 == 0.0) prj->r0 = R2D;
-
- prj->w[0] = astSind(prj->p[1]);
- if (prj->w[0] == 0.0) {
- return 1;
- }
-
- prj->w[1] = 1.0/prj->w[0];
-
- prj->w[3] = prj->r0*astCosd(prj->p[2]);
- if (prj->w[3] == 0.0) {
- return 1;
- }
-
- prj->w[4] = 1.0/prj->w[3];
- prj->w[5] = 1.0/astTand(prj->p[1]);
-
- prj->w[2] = prj->w[3]*prj->w[5];
-
- prj->astPRJfwd = astCOPfwd;
- prj->astPRJrev = astCOPrev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCOPfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- double a, r, s, t;
-
- if (abs(prj->flag) != WCS__COP) {
- if (astCOPset(prj)) return 1;
- }
-
- t = theta - prj->p[1];
- s = astCosd(t);
- if (s == 0.0) {
- return 2;
- }
-
- a = prj->w[0]*phi;
- r = prj->w[2] - prj->w[3]*astSind(t)/s;
-
- *x = r*astSind(a);
- *y = prj->w[2] - r*astCosd(a);
-
- if (prj->flag > 0 && r*prj->w[0] < 0.0) {
- return 2;
- }
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCOPrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- double a, dy, r;
-
- if (abs(prj->flag) != WCS__COP) {
- if (astCOPset(prj)) return 1;
- }
-
- dy = prj->w[2] - y;
- r = sqrt(x*x + dy*dy);
- if (prj->p[1] < 0.0) r = -r;
-
- if (r == 0.0) {
- a = 0.0;
- } else {
- a = astATan2d(x/r, dy/r);
- }
-
- *phi = a*prj->w[1];
- *theta = prj->p[1] + astATand(prj->w[5] - r*prj->w[4]);
-
- return 0;
-}
-
-/*============================================================================
-* COE: conic equal area projection.
-*
-* Given:
-* prj->p[1] sigma = (theta2+theta1)/2
-* prj->p[2] delta = (theta2-theta1)/2, where theta1 and theta2 are the
-* latitudes of the standard parallels, in degrees.
-*
-* Given and/or returned:
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "COE"
-* prj->flag COE
-* prj->phi0 0.0
-* prj->theta0 sigma
-* prj->w[0] C = (sin(theta1) + sin(theta2))/2
-* prj->w[1] 1/C
-* prj->w[2] Y0 = chi*sqrt(psi - 2C*astSind(sigma))
-* prj->w[3] chi = r0/C
-* prj->w[4] psi = 1 + sin(theta1)*sin(theta2)
-* prj->w[5] 2C
-* prj->w[6] (1 + sin(theta1)*sin(theta2))*(r0/C)**2
-* prj->w[7] C/(2*r0**2)
-* prj->w[8] chi*sqrt(psi + 2C)
-* prj->astPRJfwd Pointer to astCOEfwd().
-* prj->astPRJrev Pointer to astCOErev().
-*===========================================================================*/
-
-int astCOEset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- double theta1, theta2;
-
- strcpy(prj->code, "COE");
- prj->flag = WCS__COE;
- prj->phi0 = 0.0;
- prj->theta0 = prj->p[1];
-
- if (prj->r0 == 0.0) prj->r0 = R2D;
-
- theta1 = prj->p[1] - prj->p[2];
- theta2 = prj->p[1] + prj->p[2];
-
- prj->w[0] = (astSind(theta1) + astSind(theta2))/2.0;
- if (prj->w[0] == 0.0) {
- return 1;
- }
-
- prj->w[1] = 1.0/prj->w[0];
-
- prj->w[3] = prj->r0/prj->w[0];
- prj->w[4] = 1.0 + astSind(theta1)*astSind(theta2);
- prj->w[5] = 2.0*prj->w[0];
- prj->w[6] = prj->w[3]*prj->w[3]*prj->w[4];
- prj->w[7] = 1.0/(2.0*prj->r0*prj->w[3]);
- prj->w[8] = prj->w[3]*sqrt(prj->w[4] + prj->w[5]);
-
- prj->w[2] = prj->w[3]*sqrt(prj->w[4] - prj->w[5]*astSind(prj->p[1]));
-
- prj->astPRJfwd = astCOEfwd;
- prj->astPRJrev = astCOErev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCOEfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- double a, r;
-
- if (prj->flag != WCS__COE) {
- if (astCOEset(prj)) return 1;
- }
-
- a = phi*prj->w[0];
- if (theta == -90.0) {
- r = prj->w[8];
- } else {
- r = prj->w[3]*sqrt(prj->w[4] - prj->w[5]*astSind(theta));
- }
-
- *x = r*astSind(a);
- *y = prj->w[2] - r*astCosd(a);
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCOErev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- double a, dy, r, w;
- const double tol = 1.0e-12;
-
- if (prj->flag != WCS__COE) {
- if (astCOEset(prj)) return 1;
- }
-
- dy = prj->w[2] - y;
- r = sqrt(x*x + dy*dy);
- if (prj->p[1] < 0.0) r = -r;
-
- if (r == 0.0) {
- a = 0.0;
- } else {
- a = astATan2d(x/r, dy/r);
- }
-
- *phi = a*prj->w[1];
- if (fabs(r - prj->w[8]) < tol) {
- *theta = -90.0;
- } else {
- w = (prj->w[6] - r*r)*prj->w[7];
- if (fabs(w) > 1.0) {
- if (fabs(w-1.0) < tol) {
- *theta = 90.0;
- } else if (fabs(w+1.0) < tol) {
- *theta = -90.0;
- } else {
- return 2;
- }
- } else {
- *theta = astASind(w);
- }
- }
-
- return 0;
-}
-
-/*============================================================================
-* COD: conic equidistant projection.
-*
-* Given:
-* prj->p[1] sigma = (theta2+theta1)/2
-* prj->p[2] delta = (theta2-theta1)/2, where theta1 and theta2 are the
-* latitudes of the standard parallels, in degrees.
-*
-* Given and/or returned:
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "COD"
-* prj->flag COD
-* prj->phi0 0.0
-* prj->theta0 sigma
-* prj->w[0] C = r0*sin(sigma)*sin(delta)/delta
-* prj->w[1] 1/C
-* prj->w[2] Y0 = delta*cot(delta)*cot(sigma)
-* prj->w[3] Y0 + sigma
-* prj->astPRJfwd Pointer to astCODfwd().
-* prj->astPRJrev Pointer to astCODrev().
-*===========================================================================*/
-
-int astCODset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- strcpy(prj->code, "COD");
- prj->flag = WCS__COD;
- prj->phi0 = 0.0;
- prj->theta0 = prj->p[1];
-
- if (prj->r0 == 0.0) prj->r0 = R2D;
-
- if (prj->p[2] == 0.0) {
- prj->w[0] = prj->r0*astSind(prj->p[1])*D2R;
- } else {
- prj->w[0] = prj->r0*astSind(prj->p[1])*astSind(prj->p[2])/prj->p[2];
- }
-
- if (prj->w[0] == 0.0) {
- return 1;
- }
-
- prj->w[1] = 1.0/prj->w[0];
- prj->w[2] = prj->r0*astCosd(prj->p[2])*astCosd(prj->p[1])/prj->w[0];
- prj->w[3] = prj->w[2] + prj->p[1];
-
- prj->astPRJfwd = astCODfwd;
- prj->astPRJrev = astCODrev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCODfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- double a, r;
-
- if (prj->flag != WCS__COD) {
- if (astCODset(prj)) return 1;
- }
-
- a = prj->w[0]*phi;
- r = prj->w[3] - theta;
-
- *x = r*astSind(a);
- *y = prj->w[2] - r*astCosd(a);
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCODrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- double a, dy, r;
-
- if (prj->flag != WCS__COD) {
- if (astCODset(prj)) return 1;
- }
-
- dy = prj->w[2] - y;
- r = sqrt(x*x + dy*dy);
- if (prj->p[1] < 0.0) r = -r;
-
- if (r == 0.0) {
- a = 0.0;
- } else {
- a = astATan2d(x/r, dy/r);
- }
-
- *phi = a*prj->w[1];
- *theta = prj->w[3] - r;
-
- return 0;
-}
-
-/*============================================================================
-* COO: conic orthomorphic projection.
-*
-* Given:
-* prj->p[1] sigma = (theta2+theta1)/2
-* prj->p[2] delta = (theta2-theta1)/2, where theta1 and theta2 are the
-* latitudes of the standard parallels, in degrees.
-*
-* Given and/or returned:
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "COO"
-* prj->flag COO
-* prj->phi0 0.0
-* prj->theta0 sigma
-* prj->w[0] C = ln(cos(theta2)/cos(theta1))/ln(tan(tau2)/tan(tau1))
-* where tau1 = (90 - theta1)/2
-* tau2 = (90 - theta2)/2
-* prj->w[1] 1/C
-* prj->w[2] Y0 = psi*tan((90-sigma)/2)**C
-* prj->w[3] psi = (r0*cos(theta1)/C)/tan(tau1)**C
-* prj->w[4] 1/psi
-* prj->astPRJfwd Pointer to astCOOfwd().
-* prj->astPRJrev Pointer to astCOOrev().
-*===========================================================================*/
-
-int astCOOset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- double cos1, cos2, tan1, tan2, theta1, theta2;
-
- strcpy(prj->code, "COO");
- prj->flag = WCS__COO;
- prj->phi0 = 0.0;
- prj->theta0 = prj->p[1];
-
- if (prj->r0 == 0.0) prj->r0 = R2D;
-
- theta1 = prj->p[1] - prj->p[2];
- theta2 = prj->p[1] + prj->p[2];
-
- tan1 = astTand((90.0 - theta1)/2.0);
- cos1 = astCosd(theta1);
-
- if (theta1 == theta2) {
- prj->w[0] = astSind(theta1);
- } else {
- tan2 = astTand((90.0 - theta2)/2.0);
- cos2 = astCosd(theta2);
- prj->w[0] = log(cos2/cos1)/log(tan2/tan1);
- }
- if (prj->w[0] == 0.0) {
- return 1;
- }
-
- prj->w[1] = 1.0/prj->w[0];
-
- prj->w[3] = prj->r0*(cos1/prj->w[0])/pow(tan1,prj->w[0]);
- if (prj->w[3] == 0.0) {
- return 1;
- }
- prj->w[2] = prj->w[3]*pow(astTand((90.0 - prj->p[1])/2.0),prj->w[0]);
- prj->w[4] = 1.0/prj->w[3];
-
- prj->astPRJfwd = astCOOfwd;
- prj->astPRJrev = astCOOrev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCOOfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- double a, r;
-
- if (prj->flag != WCS__COO) {
- if (astCOOset(prj)) return 1;
- }
-
- a = prj->w[0]*phi;
- if (theta == -90.0) {
- if (prj->w[0] < 0.0) {
- r = 0.0;
- } else {
- return 2;
- }
- } else {
- r = prj->w[3]*pow(astTand((90.0 - theta)/2.0),prj->w[0]);
- }
-
- *x = r*astSind(a);
- *y = prj->w[2] - r*astCosd(a);
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCOOrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- double a, dy, r;
-
- if (prj->flag != WCS__COO) {
- if (astCOOset(prj)) return 1;
- }
-
- dy = prj->w[2] - y;
- r = sqrt(x*x + dy*dy);
- if (prj->p[1] < 0.0) r = -r;
-
- if (r == 0.0) {
- a = 0.0;
- } else {
- a = astATan2d(x/r, dy/r);
- }
-
- *phi = a*prj->w[1];
- if (r == 0.0) {
- if (prj->w[0] < 0.0) {
- *theta = -90.0;
- } else {
- return 2;
- }
- } else {
- *theta = 90.0 - 2.0*astATand(pow(r*prj->w[4],prj->w[1]));
- }
-
- return 0;
-}
-
-/*============================================================================
-* BON: Bonne's projection.
-*
-* Given:
-* prj->p[1] Bonne conformal latitude, theta1, in degrees.
-*
-* Given and/or returned:
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "BON"
-* prj->flag BON
-* prj->phi0 0.0
-* prj->theta0 0.0
-* prj->w[1] r0*pi/180
-* prj->w[2] Y0 = r0*(cot(theta1) + theta1*pi/180)
-* prj->astPRJfwd Pointer to astBONfwd().
-* prj->astPRJrev Pointer to astBONrev().
-*===========================================================================*/
-
-int astBONset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- strcpy(prj->code, "BON");
- prj->flag = WCS__BON;
- prj->phi0 = 0.0;
- prj->theta0 = 0.0;
-
- if (prj->r0 == 0.0) {
- prj->r0 = R2D;
- prj->w[1] = 1.0;
- prj->w[2] = prj->r0*astCosd(prj->p[1])/astSind(prj->p[1]) + prj->p[1];
- } else {
- prj->w[1] = prj->r0*D2R;
- prj->w[2] = prj->r0*(astCosd(prj->p[1])/astSind(prj->p[1]) + prj->p[1]*D2R);
- }
-
- prj->astPRJfwd = astBONfwd;
- prj->astPRJrev = astBONrev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astBONfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- double a, r;
-
- if (prj->p[1] == 0.0) {
- /* Sanson-Flamsteed. */
- return astSFLfwd(phi, theta, prj, x, y);
- }
-
- if (prj->flag != WCS__BON) {
- if (astBONset(prj)) return 1;
- }
-
- r = prj->w[2] - theta*prj->w[1];
- a = prj->r0*phi*astCosd(theta)/r;
-
- *x = r*astSind(a);
- *y = prj->w[2] - r*astCosd(a);
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astBONrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- double a, cthe, dy, r;
-
- if (prj->p[1] == 0.0) {
- /* Sanson-Flamsteed. */
- return astSFLrev(x, y, prj, phi, theta);
- }
-
- if (prj->flag != WCS__BON) {
- if (astBONset(prj)) return 1;
- }
-
- dy = prj->w[2] - y;
- r = sqrt(x*x + dy*dy);
- if (prj->p[1] < 0.0) r = -r;
-
- if (r == 0.0) {
- a = 0.0;
- } else {
- a = astATan2d(x/r, dy/r);
- }
-
- *theta = (prj->w[2] - r)/prj->w[1];
- cthe = astCosd(*theta);
- if (cthe == 0.0) {
- *phi = 0.0;
- } else {
- *phi = a*(r/prj->r0)/cthe;
- }
-
- return 0;
-}
-
-/*============================================================================
-* PCO: polyconic projection.
-*
-* Given and/or returned:
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "PCO"
-* prj->flag PCO
-* prj->phi0 0.0
-* prj->theta0 0.0
-* prj->w[0] r0*(pi/180)
-* prj->w[1] 1/r0
-* prj->w[2] 2*r0
-* prj->astPRJfwd Pointer to astPCOfwd().
-* prj->astPRJrev Pointer to astPCOrev().
-*===========================================================================*/
-
-int astPCOset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- strcpy(prj->code, "PCO");
- prj->flag = WCS__PCO;
- prj->phi0 = 0.0;
- prj->theta0 = 0.0;
-
- if (prj->r0 == 0.0) {
- prj->r0 = R2D;
- prj->w[0] = 1.0;
- prj->w[1] = 1.0;
- prj->w[2] = 360.0/PI;
- } else {
- prj->w[0] = prj->r0*D2R;
- prj->w[1] = 1.0/prj->w[0];
- prj->w[2] = 2.0*prj->r0;
- }
-
- prj->astPRJfwd = astPCOfwd;
- prj->astPRJrev = astPCOrev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astPCOfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- double a, cthe, cotthe, sthe;
-
- if (prj->flag != WCS__PCO) {
- if (astPCOset(prj)) return 1;
- }
-
- cthe = astCosd(theta);
- sthe = astSind(theta);
- a = phi*sthe;
-
- if (sthe == 0.0) {
- *x = prj->w[0]*phi;
- *y = 0.0;
- } else {
- cotthe = cthe/sthe;
- *x = prj->r0*cotthe*astSind(a);
- *y = prj->r0*(cotthe*(1.0 - astCosd(a)) + theta*D2R);
- }
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astPCOrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- int j;
- double f, fneg, fpos, lambda, tanthe, theneg, thepos, w, xp, xx, ymthe, yp;
- const double tol = 1.0e-12;
-
- if (prj->flag != WCS__PCO) {
- if (astPCOset(prj)) return 1;
- }
-
- w = fabs(y*prj->w[1]);
- if (w < tol) {
- *phi = x*prj->w[1];
- *theta = 0.0;
- } else if (fabs(w-90.0) < tol) {
- *phi = 0.0;
- *theta = copysign(90.0,y);
- } else {
- /* Iterative solution using weighted division of the interval. */
- if (y > 0.0) {
- thepos = 90.0;
- } else {
- thepos = -90.0;
- }
- theneg = 0.0;
-
- xx = x*x;
- ymthe = y - prj->w[0]*thepos;
- fpos = xx + ymthe*ymthe;
- fneg = -999.0;
-
- for (j = 0; j < 64; j++) {
- if (fneg < -100.0) {
- /* Equal division of the interval. */
- *theta = (thepos+theneg)/2.0;
- } else {
- /* Weighted division of the interval. */
- lambda = fpos/(fpos-fneg);
- if (lambda < 0.1) {
- lambda = 0.1;
- } else if (lambda > 0.9) {
- lambda = 0.9;
- }
- *theta = thepos - lambda*(thepos-theneg);
- }
-
- /* Compute the residue. */
- ymthe = y - prj->w[0]*(*theta);
- tanthe = astTand(*theta);
- f = xx + ymthe*(ymthe - prj->w[2]/tanthe);
-
- /* Check for convergence. */
- if (fabs(f) < tol) break;
- if (fabs(thepos-theneg) < tol) break;
-
- /* Redefine the interval. */
- if (f > 0.0) {
- thepos = *theta;
- fpos = f;
- } else {
- theneg = *theta;
- fneg = f;
- }
- }
-
- xp = prj->r0 - ymthe*tanthe;
- yp = x*tanthe;
- if (xp == 0.0 && yp == 0.0) {
- *phi = 0.0;
- } else {
- *phi = astATan2d(yp, xp)/astSind(*theta);
- }
- }
-
- return 0;
-}
-
-/*============================================================================
-* TSC: tangential spherical cube projection.
-*
-* Given and/or returned:
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "TSC"
-* prj->flag TSC
-* prj->phi0 0.0
-* prj->theta0 0.0
-* prj->w[0] r0*(pi/4)
-* prj->w[1] (4/pi)/r0
-* prj->astPRJfwd Pointer to astTSCfwd().
-* prj->astPRJrev Pointer to astTSCrev().
-*===========================================================================*/
-
-int astTSCset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- strcpy(prj->code, "TSC");
- prj->flag = WCS__TSC;
- prj->phi0 = 0.0;
- prj->theta0 = 0.0;
-
- if (prj->r0 == 0.0) {
- prj->r0 = R2D;
- prj->w[0] = 45.0;
- prj->w[1] = 1.0/45.0;
- } else {
- prj->w[0] = prj->r0*PI/4.0;
- prj->w[1] = 1.0/prj->w[0];
- }
-
- prj->astPRJfwd = astTSCfwd;
- prj->astPRJrev = astTSCrev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astTSCfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- int face;
- double cthe, l, m, n, rho, x0, xf, y0, yf;
- const double tol = 1.0e-12;
-
- x0 = 0.0;
- xf = 0.0;
- y0 = 0.0;
- yf = 0.0;
-
- if (prj->flag != WCS__TSC) {
- if (astTSCset(prj)) return 1;
- }
-
- cthe = astCosd(theta);
- l = cthe*astCosd(phi);
- m = cthe*astSind(phi);
- n = astSind(theta);
-
- face = 0;
- rho = n;
- if (l > rho) {
- face = 1;
- rho = l;
- }
- if (m > rho) {
- face = 2;
- rho = m;
- }
- if (-l > rho) {
- face = 3;
- rho = -l;
- }
- if (-m > rho) {
- face = 4;
- rho = -m;
- }
- if (-n > rho) {
- face = 5;
- rho = -n;
- }
-
- if (face == 0) {
- xf = m/rho;
- yf = -l/rho;
- x0 = 0.0;
- y0 = 2.0;
- } else if (face == 1) {
- xf = m/rho;
- yf = n/rho;
- x0 = 0.0;
- y0 = 0.0;
- } else if (face == 2) {
- xf = -l/rho;
- yf = n/rho;
- x0 = 2.0;
- y0 = 0.0;
- } else if (face == 3) {
- xf = -m/rho;
- yf = n/rho;
- x0 = 4.0;
- y0 = 0.0;
- } else if (face == 4) {
- xf = l/rho;
- yf = n/rho;
- x0 = 6.0;
- y0 = 0.0;
- } else if (face == 5) {
- xf = m/rho;
- yf = l/rho;
- x0 = 0.0;
- y0 = -2.0;
- }
-
- if (fabs(xf) > 1.0) {
- if (fabs(xf) > 1.0+tol) {
- return 2;
- }
- xf = copysign(1.0,xf);
- }
- if (fabs(yf) > 1.0) {
- if (fabs(yf) > 1.0+tol) {
- return 2;
- }
- yf = copysign(1.0,yf);
- }
-
- *x = prj->w[0]*(xf + x0);
- *y = prj->w[0]*(yf + y0);
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astTSCrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- double l, m, n, xf, yf;
-
- if (prj->flag != WCS__TSC) {
- if (astTSCset(prj)) return 1;
- }
-
- xf = x*prj->w[1];
- yf = y*prj->w[1];
-
- /* Check bounds. */
- if (fabs(xf) <= 1.0) {
- if (fabs(yf) > 3.0) return 2;
- } else {
- if (fabs(xf) > 7.0) return 2;
- if (fabs(yf) > 1.0) return 2;
- }
-
- /* Map negative faces to the other side. */
- if (xf < -1.0) xf += 8.0;
-
- /* Determine the face. */
- if (xf > 5.0) {
- /* face = 4 */
- xf = xf - 6.0;
- m = -1.0/sqrt(1.0 + xf*xf + yf*yf);
- l = -m*xf;
- n = -m*yf;
- } else if (xf > 3.0) {
- /* face = 3 */
- xf = xf - 4.0;
- l = -1.0/sqrt(1.0 + xf*xf + yf*yf);
- m = l*xf;
- n = -l*yf;
- } else if (xf > 1.0) {
- /* face = 2 */
- xf = xf - 2.0;
- m = 1.0/sqrt(1.0 + xf*xf + yf*yf);
- l = -m*xf;
- n = m*yf;
- } else if (yf > 1.0) {
- /* face = 0 */
- yf = yf - 2.0;
- n = 1.0/sqrt(1.0 + xf*xf + yf*yf);
- l = -n*yf;
- m = n*xf;
- } else if (yf < -1.0) {
- /* face = 5 */
- yf = yf + 2.0;
- n = -1.0/sqrt(1.0 + xf*xf + yf*yf);
- l = -n*yf;
- m = -n*xf;
- } else {
- /* face = 1 */
- l = 1.0/sqrt(1.0 + xf*xf + yf*yf);
- m = l*xf;
- n = l*yf;
- }
-
- if (l == 0.0 && m == 0.0) {
- *phi = 0.0;
- } else {
- *phi = astATan2d(m, l);
- }
- *theta = astASind(n);
-
- return 0;
-}
-
-/*============================================================================
-* CSC: COBE quadrilateralized spherical cube projection.
-*
-* Given and/or returned:
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "CSC"
-* prj->flag CSC
-* prj->phi0 0.0
-* prj->theta0 0.0
-* prj->w[0] r0*(pi/4)
-* prj->w[1] (4/pi)/r0
-* prj->astPRJfwd Pointer to astCSCfwd().
-* prj->astPRJrev Pointer to astCSCrev().
-*===========================================================================*/
-
-int astCSCset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- strcpy(prj->code, "CSC");
- prj->flag = WCS__CSC;
- prj->phi0 = 0.0;
- prj->theta0 = 0.0;
-
- if (prj->r0 == 0.0) {
- prj->r0 = R2D;
- prj->w[0] = 45.0;
- prj->w[1] = 1.0/45.0;
- } else {
- prj->w[0] = prj->r0*PI/4.0;
- prj->w[1] = 1.0/prj->w[0];
- }
-
- prj->astPRJfwd = astCSCfwd;
- prj->astPRJrev = astCSCrev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCSCfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- int face;
- float cthe, eta, l, m, n, rho, xi;
- const float tol = 1.0e-7;
-
- float a, a2, a2b2, a4, ab, b, b2, b4, ca2, cb2, x0, xf, y0, yf;
- const float gstar = 1.37484847732;
- const float mm = 0.004869491981;
- const float gamma = -0.13161671474;
- const float omega1 = -0.159596235474;
- const float d0 = 0.0759196200467;
- const float d1 = -0.0217762490699;
- const float c00 = 0.141189631152;
- const float c10 = 0.0809701286525;
- const float c01 = -0.281528535557;
- const float c11 = 0.15384112876;
- const float c20 = -0.178251207466;
- const float c02 = 0.106959469314;
-
- eta = 0.0;
- xi = 0.0;
- x0 = 0.0;
- y0 = 0.0;
-
- if (prj->flag != WCS__CSC) {
- if (astCSCset(prj)) return 1;
- }
-
- cthe = astCosd(theta);
- l = cthe*astCosd(phi);
- m = cthe*astSind(phi);
- n = astSind(theta);
-
- face = 0;
- rho = n;
- if (l > rho) {
- face = 1;
- rho = l;
- }
- if (m > rho) {
- face = 2;
- rho = m;
- }
- if (-l > rho) {
- face = 3;
- rho = -l;
- }
- if (-m > rho) {
- face = 4;
- rho = -m;
- }
- if (-n > rho) {
- face = 5;
- rho = -n;
- }
-
- if (face == 0) {
- xi = m;
- eta = -l;
- x0 = 0.0;
- y0 = 2.0;
- } else if (face == 1) {
- xi = m;
- eta = n;
- x0 = 0.0;
- y0 = 0.0;
- } else if (face == 2) {
- xi = -l;
- eta = n;
- x0 = 2.0;
- y0 = 0.0;
- } else if (face == 3) {
- xi = -m;
- eta = n;
- x0 = 4.0;
- y0 = 0.0;
- } else if (face == 4) {
- xi = l;
- eta = n;
- x0 = 6.0;
- y0 = 0.0;
- } else if (face == 5) {
- xi = m;
- eta = l;
- x0 = 0.0;
- y0 = -2.0;
- }
-
- a = xi/rho;
- b = eta/rho;
-
- a2 = a*a;
- b2 = b*b;
- ca2 = 1.0 - a2;
- cb2 = 1.0 - b2;
-
- /* Avoid floating underflows. */
- ab = fabs(a*b);
- a4 = (a2 > 1.0e-16) ? a2*a2 : 0.0;
- b4 = (b2 > 1.0e-16) ? b2*b2 : 0.0;
- a2b2 = (ab > 1.0e-16) ? a2*b2 : 0.0;
-
- xf = a*(a2 + ca2*(gstar + b2*(gamma*ca2 + mm*a2 +
- cb2*(c00 + c10*a2 + c01*b2 + c11*a2b2 + c20*a4 + c02*b4)) +
- a2*(omega1 - ca2*(d0 + d1*a2))));
- yf = b*(b2 + cb2*(gstar + a2*(gamma*cb2 + mm*b2 +
- ca2*(c00 + c10*b2 + c01*a2 + c11*a2b2 + c20*b4 + c02*a4)) +
- b2*(omega1 - cb2*(d0 + d1*b2))));
-
- if (fabs(xf) > 1.0) {
- if (fabs(xf) > 1.0+tol) {
- return 2;
- }
- xf = copysign(1.0,xf);
- }
- if (fabs(yf) > 1.0) {
- if (fabs(yf) > 1.0+tol) {
- return 2;
- }
- yf = copysign(1.0,yf);
- }
-
- *x = prj->w[0]*(x0 + xf);
- *y = prj->w[0]*(y0 + yf);
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCSCrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- int face;
- float l, m, n;
-
- float a, b, xf, xx, yf, yy, z0, z1, z2, z3, z4, z5, z6;
- const float p00 = -0.27292696;
- const float p10 = -0.07629969;
- const float p20 = -0.22797056;
- const float p30 = 0.54852384;
- const float p40 = -0.62930065;
- const float p50 = 0.25795794;
- const float p60 = 0.02584375;
- const float p01 = -0.02819452;
- const float p11 = -0.01471565;
- const float p21 = 0.48051509;
- const float p31 = -1.74114454;
- const float p41 = 1.71547508;
- const float p51 = -0.53022337;
- const float p02 = 0.27058160;
- const float p12 = -0.56800938;
- const float p22 = 0.30803317;
- const float p32 = 0.98938102;
- const float p42 = -0.83180469;
- const float p03 = -0.60441560;
- const float p13 = 1.50880086;
- const float p23 = -0.93678576;
- const float p33 = 0.08693841;
- const float p04 = 0.93412077;
- const float p14 = -1.41601920;
- const float p24 = 0.33887446;
- const float p05 = -0.63915306;
- const float p15 = 0.52032238;
- const float p06 = 0.14381585;
-
- l = 0.0;
- m = 0.0;
- n = 0.0;
-
- if (prj->flag != WCS__CSC) {
- if (astCSCset(prj)) return 1;
- }
-
- xf = x*prj->w[1];
- yf = y*prj->w[1];
-
- /* Check bounds. */
- if (fabs(xf) <= 1.0) {
- if (fabs(yf) > 3.0) return 2;
- } else {
- if (fabs(xf) > 7.0) return 2;
- if (fabs(yf) > 1.0) return 2;
- }
-
- /* Map negative faces to the other side. */
- if (xf < -1.0) xf += 8.0;
-
- /* Determine the face. */
- if (xf > 5.0) {
- face = 4;
- xf = xf - 6.0;
- } else if (xf > 3.0) {
- face = 3;
- xf = xf - 4.0;
- } else if (xf > 1.0) {
- face = 2;
- xf = xf - 2.0;
- } else if (yf > 1.0) {
- face = 0;
- yf = yf - 2.0;
- } else if (yf < -1.0) {
- face = 5;
- yf = yf + 2.0;
- } else {
- face = 1;
- }
-
- xx = xf*xf;
- yy = yf*yf;
-
- z0 = p00 + xx*(p10 + xx*(p20 + xx*(p30 + xx*(p40 + xx*(p50 + xx*(p60))))));
- z1 = p01 + xx*(p11 + xx*(p21 + xx*(p31 + xx*(p41 + xx*(p51)))));
- z2 = p02 + xx*(p12 + xx*(p22 + xx*(p32 + xx*(p42))));
- z3 = p03 + xx*(p13 + xx*(p23 + xx*(p33)));
- z4 = p04 + xx*(p14 + xx*(p24));
- z5 = p05 + xx*(p15);
- z6 = p06;
-
- a = z0 + yy*(z1 + yy*(z2 + yy*(z3 + yy*(z4 + yy*(z5 + yy*z6)))));
- a = xf + xf*(1.0 - xx)*a;
-
- z0 = p00 + yy*(p10 + yy*(p20 + yy*(p30 + yy*(p40 + yy*(p50 + yy*(p60))))));
- z1 = p01 + yy*(p11 + yy*(p21 + yy*(p31 + yy*(p41 + yy*(p51)))));
- z2 = p02 + yy*(p12 + yy*(p22 + yy*(p32 + yy*(p42))));
- z3 = p03 + yy*(p13 + yy*(p23 + yy*(p33)));
- z4 = p04 + yy*(p14 + yy*(p24));
- z5 = p05 + yy*(p15);
- z6 = p06;
-
- b = z0 + xx*(z1 + xx*(z2 + xx*(z3 + xx*(z4 + xx*(z5 + xx*z6)))));
- b = yf + yf*(1.0 - yy)*b;
-
- if (face == 0) {
- n = 1.0/sqrt(a*a + b*b + 1.0);
- l = -b*n;
- m = a*n;
- } else if (face == 1) {
- l = 1.0/sqrt(a*a + b*b + 1.0);
- m = a*l;
- n = b*l;
- } else if (face == 2) {
- m = 1.0/sqrt(a*a + b*b + 1.0);
- l = -a*m;
- n = b*m;
- } else if (face == 3) {
- l = -1.0/sqrt(a*a + b*b + 1.0);
- m = a*l;
- n = -b*l;
- } else if (face == 4) {
- m = -1.0/sqrt(a*a + b*b + 1.0);
- l = -a*m;
- n = -b*m;
- } else if (face == 5) {
- n = -1.0/sqrt(a*a + b*b + 1.0);
- l = -b*n;
- m = -a*n;
- }
-
- if (l == 0.0 && m == 0.0) {
- *phi = 0.0;
- } else {
- *phi = astATan2d(m, l);
- }
- *theta = astASind(n);
-
- return 0;
-}
-
-/*============================================================================
-* QSC: quadrilaterilized spherical cube projection.
-*
-* Given and/or returned:
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "QSC"
-* prj->flag QSC
-* prj->phi0 0.0
-* prj->theta0 0.0
-* prj->w[0] r0*(pi/4)
-* prj->w[1] (4/pi)/r0
-* prj->astPRJfwd Pointer to astQSCfwd().
-* prj->astPRJrev Pointer to astQSCrev().
-*===========================================================================*/
-
-int astQSCset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- strcpy(prj->code, "QSC");
- prj->flag = WCS__QSC;
- prj->phi0 = 0.0;
- prj->theta0 = 0.0;
-
- if (prj->r0 == 0.0) {
- prj->r0 = R2D;
- prj->w[0] = 45.0;
- prj->w[1] = 1.0/45.0;
- } else {
- prj->w[0] = prj->r0*PI/4.0;
- prj->w[1] = 1.0/prj->w[0];
- }
-
- prj->astPRJfwd = astQSCfwd;
- prj->astPRJrev = astQSCrev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astQSCfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- int face;
- double cthe, eta, l, m, n, omega, p, rho, rhu, t, tau, x0, xf, xi, y0, yf;
- const double tol = 1.0e-12;
-
- eta = 0.0;
- x0 = 0.0;
- xf = 0.0;
- xi = 0.0;
- y0 = 0.0;
- yf = 0.0;
-
- if (prj->flag != WCS__QSC) {
- if (astQSCset(prj)) return 1;
- }
-
- if (fabs(theta) == 90.0) {
- *x = 0.0;
- *y = copysign(2.0*prj->w[0],theta);
- return 0;
- }
-
- cthe = astCosd(theta);
- l = cthe*astCosd(phi);
- m = cthe*astSind(phi);
- n = astSind(theta);
-
- face = 0;
- rho = n;
- if (l > rho) {
- face = 1;
- rho = l;
- }
- if (m > rho) {
- face = 2;
- rho = m;
- }
- if (-l > rho) {
- face = 3;
- rho = -l;
- }
- if (-m > rho) {
- face = 4;
- rho = -m;
- }
- if (-n > rho) {
- face = 5;
- rho = -n;
- }
-
- rhu = 1.0 - rho;
-
- if (face == 0) {
- xi = m;
- eta = -l;
- if (rhu < 1.0e-8) {
- /* Small angle formula. */
- t = (90.0 - theta)*D2R;
- rhu = t*t/2.0;
- }
- x0 = 0.0;
- y0 = 2.0;
- } else if (face == 1) {
- xi = m;
- eta = n;
- if (rhu < 1.0e-8) {
- /* Small angle formula. */
- t = theta*D2R;
- p = fmod(phi,360.0);
- if (p < -180.0) p += 360.0;
- if (p > 180.0) p -= 360.0;
- p *= D2R;
- rhu = (p*p + t*t)/2.0;
- }
- x0 = 0.0;
- y0 = 0.0;
- } else if (face == 2) {
- xi = -l;
- eta = n;
- if (rhu < 1.0e-8) {
- /* Small angle formula. */
- t = theta*D2R;
- p = fmod(phi,360.0);
- if (p < -180.0) p += 360.0;
- p = (90.0 - p)*D2R;
- rhu = (p*p + t*t)/2.0;
- }
- x0 = 2.0;
- y0 = 0.0;
- } else if (face == 3) {
- xi = -m;
- eta = n;
- if (rhu < 1.0e-8) {
- /* Small angle formula. */
- t = theta*D2R;
- p = fmod(phi,360.0);
- if (p < 0.0) p += 360.0;
- p = (180.0 - p)*D2R;
- rhu = (p*p + t*t)/2.0;
- }
- x0 = 4.0;
- y0 = 0.0;
- } else if (face == 4) {
- xi = l;
- eta = n;
- if (rhu < 1.0e-8) {
- /* Small angle formula. */
- t = theta*D2R;
- p = fmod(phi,360.0);
- if (p > 180.0) p -= 360.0;
- p *= (90.0 + p)*D2R;
- rhu = (p*p + t*t)/2.0;
- }
- x0 = 6;
- y0 = 0.0;
- } else if (face == 5) {
- xi = m;
- eta = l;
- if (rhu < 1.0e-8) {
- /* Small angle formula. */
- t = (90.0 + theta)*D2R;
- rhu = t*t/2.0;
- }
- x0 = 0.0;
- y0 = -2;
- }
-
- if (xi == 0.0 && eta == 0.0) {
- xf = 0.0;
- yf = 0.0;
- } else if (-xi >= fabs(eta)) {
- omega = eta/xi;
- tau = 1.0 + omega*omega;
- xf = -sqrt(rhu/(1.0-1.0/sqrt(1.0+tau)));
- yf = (xf/15.0)*(astATand(omega) - astASind(omega/sqrt(tau+tau)));
- } else if (xi >= fabs(eta)) {
- omega = eta/xi;
- tau = 1.0 + omega*omega;
- xf = sqrt(rhu/(1.0-1.0/sqrt(1.0+tau)));
- yf = (xf/15.0)*(astATand(omega) - astASind(omega/sqrt(tau+tau)));
- } else if (-eta > fabs(xi)) {
- omega = xi/eta;
- tau = 1.0 + omega*omega;
- yf = -sqrt(rhu/(1.0-1.0/sqrt(1.0+tau)));
- xf = (yf/15.0)*(astATand(omega) - astASind(omega/sqrt(tau+tau)));
- } else if (eta > fabs(xi)) {
- omega = xi/eta;
- tau = 1.0 + omega*omega;
- yf = sqrt(rhu/(1.0-1.0/sqrt(1.0+tau)));
- xf = (yf/15.0)*(astATand(omega) - astASind(omega/sqrt(tau+tau)));
- }
-
- if (fabs(xf) > 1.0) {
- if (fabs(xf) > 1.0+tol) {
- return 2;
- }
- xf = copysign(1.0,xf);
- }
- if (fabs(yf) > 1.0) {
- if (fabs(yf) > 1.0+tol) {
- return 2;
- }
- yf = copysign(1.0,yf);
- }
-
- *x = prj->w[0]*(xf + x0);
- *y = prj->w[0]*(yf + y0);
-
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astQSCrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- int direct, face;
- double l, m, n, omega, rho, rhu, tau, xf, yf, w;
- const double tol = 1.0e-12;
-
- l = 0.0;
- m = 0.0;
- n = 0.0;
-
- if (prj->flag != WCS__QSC) {
- if (astQSCset(prj)) return 1;
- }
-
- xf = x*prj->w[1];
- yf = y*prj->w[1];
-
- /* Check bounds. */
- if (fabs(xf) <= 1.0) {
- if (fabs(yf) > 3.0) return 2;
- } else {
- if (fabs(xf) > 7.0) return 2;
- if (fabs(yf) > 1.0) return 2;
- }
-
- /* Map negative faces to the other side. */
- if (xf < -1.0) xf += 8.0;
-
- /* Determine the face. */
- if (xf > 5.0) {
- face = 4;
- xf = xf - 6.0;
- } else if (xf > 3.0) {
- face = 3;
- xf = xf - 4.0;
- } else if (xf > 1.0) {
- face = 2;
- xf = xf - 2.0;
- } else if (yf > 1.0) {
- face = 0;
- yf = yf - 2.0;
- } else if (yf < -1.0) {
- face = 5;
- yf = yf + 2.0;
- } else {
- face = 1;
- }
-
- direct = (fabs(xf) > fabs(yf));
- if (direct) {
- if (xf == 0.0) {
- omega = 0.0;
- tau = 1.0;
- rho = 1.0;
- rhu = 0.0;
- } else {
- w = 15.0*yf/xf;
- omega = astSind(w)/(astCosd(w) - SQRT2INV);
- tau = 1.0 + omega*omega;
- rhu = xf*xf*(1.0 - 1.0/sqrt(1.0 + tau));
- rho = 1.0 - rhu;
- }
- } else {
- if (yf == 0.0) {
- omega = 0.0;
- tau = 1.0;
- rho = 1.0;
- rhu = 0.0;
- } else {
- w = 15.0*xf/yf;
- omega = astSind(w)/(astCosd(w) - SQRT2INV);
- tau = 1.0 + omega*omega;
- rhu = yf*yf*(1.0 - 1.0/sqrt(1.0 + tau));
- rho = 1.0 - rhu;
- }
- }
-
- if (rho < -1.0) {
- if (rho < -1.0-tol) {
- return 2;
- }
-
- rho = -1.0;
- rhu = 2.0;
- w = 0.0;
- } else {
- w = sqrt(rhu*(2.0-rhu)/tau);
- }
-
- if (face == 0) {
- n = rho;
- if (direct) {
- m = w;
- if (xf < 0.0) m = -m;
- l = -m*omega;
- } else {
- l = w;
- if (yf > 0.0) l = -l;
- m = -l*omega;
- }
- } else if (face == 1) {
- l = rho;
- if (direct) {
- m = w;
- if (xf < 0.0) m = -m;
- n = m*omega;
- } else {
- n = w;
- if (yf < 0.0) n = -n;
- m = n*omega;
- }
- } else if (face == 2) {
- m = rho;
- if (direct) {
- l = w;
- if (xf > 0.0) l = -l;
- n = -l*omega;
- } else {
- n = w;
- if (yf < 0.0) n = -n;
- l = -n*omega;
- }
- } else if (face == 3) {
- l = -rho;
- if (direct) {
- m = w;
- if (xf > 0.0) m = -m;
- n = -m*omega;
- } else {
- n = w;
- if (yf < 0.0) n = -n;
- m = -n*omega;
- }
- } else if (face == 4) {
- m = -rho;
- if (direct) {
- l = w;
- if (xf < 0.0) l = -l;
- n = l*omega;
- } else {
- n = w;
- if (yf < 0.0) n = -n;
- l = n*omega;
- }
- } else if (face == 5) {
- n = -rho;
- if (direct) {
- m = w;
- if (xf < 0.0) m = -m;
- l = m*omega;
- } else {
- l = w;
- if (yf < 0.0) l = -l;
- m = l*omega;
- }
- }
-
- if (l == 0.0 && m == 0.0) {
- *phi = 0.0;
- } else {
- *phi = astATan2d(m, l);
- }
- *theta = astASind(n);
-
- return 0;
-}
-
-/*============================================================================
-* HPX: HEALPix projection.
-*
-* Given:
-* prj->p[1] H - the number of facets in longitude.
-* prj->p[2] K - the number of facets in latitude
-*
-* Given and/or returned:
-* prj->r0 Reset to 180/pi if 0.
-* prj->phi0 Reset to 0.0
-* prj->theta0 Reset to 0.0
-*
-* Returned:
-* prj->flag HPX
-* prj->code "HPX"
-* prj->n True if K is odd.
-* prj->w[0] r0*(pi/180)
-* prj->w[1] (180/pi)/r0
-* prj->w[2] (K-1)/K
-* prj->w[3] 90*K/H
-* prj->w[4] (K+1)/2
-* prj->w[5] 90*(K-1)/H
-* prj->w[6] 180/H
-* prj->w[7] H/360
-* prj->w[8] (90*K/H)*r0*(pi/180)
-* prj->w[9] (180/H)*r0*(pi/180)
-* prj->astPRJfwd Pointer to astHPXfwd().
-* prj->astPRJrev Pointer to astHPXrev().
-
-
-*===========================================================================*/
-
-int astHPXset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- strcpy(prj->code, "HPX");
- prj->flag = WCS__HPX;
- prj->phi0 = 0.0;
- prj->theta0 = 0.0;
-
- prj->n = ((int)prj->p[2])%2;
-
- if (prj->r0 == 0.0) {
- prj->r0 = R2D;
- prj->w[0] = 1.0;
- prj->w[1] = 1.0;
- } else {
- prj->w[0] = prj->r0*D2R;
- prj->w[1] = R2D/prj->r0;
- }
-
- prj->w[2] = (prj->p[2] - 1.0) / prj->p[2];
- prj->w[3] = 90.0 * prj->p[2] / prj->p[1];
- prj->w[4] = (prj->p[2] + 1.0) / 2.0;
- prj->w[5] = 90.0 * (prj->p[2] - 1.0) / prj->p[1];
- prj->w[6] = 180.0 / prj->p[1];
- prj->w[7] = prj->p[1] / 360.0;
- prj->w[8] = prj->w[3] * prj->w[0];
- prj->w[9] = prj->w[6] * prj->w[0];
-
- prj->astPRJfwd = astHPXfwd;
- prj->astPRJrev = astHPXrev;
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astHPXfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
- double abssin, sigma, sinthe, phic;
-
- if( prj->flag != WCS__HPX ) {
- if( astHPXset( prj ) ) return 1;
- }
-
- sinthe = astSind( theta );
- abssin = fabs( sinthe );
-
-/* Equatorial zone */
- if( abssin <= prj->w[2] ) {
- *x = prj->w[0] * phi;
- *y = prj->w[8] * sinthe;
-
-/* Polar zone */
- } else {
- if( prj->n || theta > 0.0 ) {
- phic = -180.0 + (2.0*floor( (phi+180.0) * prj->w[7] ) + 1 ) * prj->w[6];
-
- } else {
- phic = -180.0 + (2.0*floor( (phi+180.0) * prj->w[7] + 1/2 ) ) * prj->w[6];
- }
-
- sigma = sqrt( prj->p[2]*( 1.0 - abssin ));
-
- *x = prj->w[0] *( phic + ( phi - phic )*sigma );
-
- *y = prj->w[9] * ( prj->w[4] - sigma );
- if( theta < 0 ) *y = -*y;
-
- }
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astHPXrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
- double absy, sigma, t, yr, xc;
-
- if (prj->flag != WCS__HPX) {
- if (astHPXset(prj)) return 1;
- }
-
- yr = prj->w[1]*y;
- absy = fabs( yr );
-
-/* Equatorial zone */
- if( absy <= prj->w[5] ) {
- *phi = prj->w[1] * x;
- t = yr/prj->w[3];
- if( t < -1.0 || t > 1.0 ) {
- return 2;
- } else {
- *theta = astASind( t );
- }
-
-/* Polar zone */
- } else if( absy <= 90 ){
-
- if( prj->n || yr > 0.0 ) {
- xc = -180.0 + ( 2.0*floor( ( x + 180.0 )*prj->w[7] ) + 1.0 )*prj->w[6];
- } else {
- xc = -180.0 + 2.0*floor( ( x + 180.0 )*prj->w[7] + 1/2 )*prj->w[6];
- }
-
- sigma = prj->w[4] - absy / prj->w[6];
-
- if( sigma == 0.0 ) {
- return 2;
- } else {
-
- t = ( x - xc )/sigma;
- if( fabs( t ) <= prj->w[6] ) {
- *phi = prj->w[1] *( xc + t );
- } else {
- return 2;
- }
- }
-
- t = 1.0 - sigma*sigma/prj->p[2];
- if( t < -1.0 || t > 1.0 ) {
- return 2;
- } else {
- *theta = astASind( t );
- if( y < 0 ) *theta = -*theta;
- }
-
- } else {
- return 2;
- }
-
- return 0;
-}
diff --git a/ast-5.3-1/proj.h b/ast-5.3-1/proj.h
deleted file mode 100644
index 276e64d..0000000
--- a/ast-5.3-1/proj.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/*=============================================================================
-*
-* WCSLIB - an implementation of the FITS WCS proposal.
-* Copyright (C) 1995-2002, Mark Calabretta
-*
-* This library is free software; you can redistribute it and/or modify it
-* under the terms of the GNU Library General Public License as published
-* by the Free Software Foundation; either version 2 of the License, or (at
-* your option) any later version.
-*
-* This library is distributed in the hope that it will be useful, but
-* WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library
-* General Public License for more details.
-*
-* You should have received a copy of the GNU Library General Public License
-* along with this library; if not, write to the Free Software Foundation,
-* Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
-* Correspondence concerning WCSLIB may be directed to:
-* Internet email: mcalabre at atnf.csiro.au
-* Postal address: Dr. Mark Calabretta,
-* Australia Telescope National Facility,
-* P.O. Box 76,
-* Epping, NSW, 2121,
-* AUSTRALIA
-*
-* Author: Mark Calabretta, Australia Telescope National Facility
-* $Id: proj.h,v 1.1.1.1 2009/11/02 16:01:16 joye Exp $
-*=============================================================================
-*
-* This version of proj.h is based on the version in wcslib-2.9, but has
-* been modified in the following ways by the Starlink project (e-mail:
-* ussc at star.rl.ac.uk):
-* - Support for non-ANSI C prototypes removed
-* - Changed the name of the WCSLIB_PROJ macro to WCSLIB_PROJ_INCLUDED
-* - Changed names of all functions and structures to avoid name
-* clashes with wcslib.
-* - Change the maximum number of projection parameters to 100.
-* - Added definition of macro WCSLIB_MXPAR, and use it to define
-* size of projection parameter array within AstPrjPrm structure.
-* - Added component "p2" to the AstPrjPrm structure to hold projection
-* parameters associated with the longitude axis (for use within
-* the tpn.c file which holds an implementation of the old "TAN with
-* correction terms" projection).
-* - Added prototypes for TPN projection functions (defined in file
-* tpn.c).
-* - Added prototypes for HPX projection functions.
-*===========================================================================*/
-
-#ifndef WCSLIB_PROJ_INCLUDED
-#define WCSLIB_PROJ_INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define WCSLIB_MXPAR 100
-
-extern int npcode;
-extern char pcodes[26][4];
-
-struct AstPrjPrm {
- char code[4];
- int flag;
- double phi0, theta0;
- double r0;
- double *p;
- double *p2;
- double w[20];
- int n;
- int (*astPRJfwd)(const double, const double,
- struct AstPrjPrm *,
- double *, double *);
- int (*astPRJrev)(const double, const double,
- struct AstPrjPrm *,
- double *, double *);
-};
-
- int astPRJset(const char [], struct AstPrjPrm *);
- int astPRJfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astPRJrev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astAZPset(struct AstPrjPrm *);
- int astAZPfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astAZPrev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astSZPset(struct AstPrjPrm *);
- int astSZPfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astSZPrev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astTANset(struct AstPrjPrm *);
- int astTANfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astTANrev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astSTGset(struct AstPrjPrm *);
- int astSTGfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astSTGrev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astSINset(struct AstPrjPrm *);
- int astSINfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astSINrev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astARCset(struct AstPrjPrm *);
- int astARCfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astARCrev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astZPNset(struct AstPrjPrm *);
- int astZPNfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astZPNrev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astZEAset(struct AstPrjPrm *);
- int astZEAfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astZEArev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astAIRset(struct AstPrjPrm *);
- int astAIRfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astAIRrev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astCYPset(struct AstPrjPrm *);
- int astCYPfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astCYPrev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astCEAset(struct AstPrjPrm *);
- int astCEAfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astCEArev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astCARset(struct AstPrjPrm *);
- int astCARfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astCARrev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astMERset(struct AstPrjPrm *);
- int astMERfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astMERrev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astSFLset(struct AstPrjPrm *);
- int astSFLfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astSFLrev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astPARset(struct AstPrjPrm *);
- int astPARfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astPARrev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astMOLset(struct AstPrjPrm *);
- int astMOLfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astMOLrev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astAITset(struct AstPrjPrm *);
- int astAITfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astAITrev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astCOPset(struct AstPrjPrm *);
- int astCOPfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astCOPrev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astCOEset(struct AstPrjPrm *);
- int astCOEfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astCOErev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astCODset(struct AstPrjPrm *);
- int astCODfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astCODrev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astCOOset(struct AstPrjPrm *);
- int astCOOfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astCOOrev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astBONset(struct AstPrjPrm *);
- int astBONfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astBONrev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astPCOset(struct AstPrjPrm *);
- int astPCOfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astPCOrev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astTSCset(struct AstPrjPrm *);
- int astTSCfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astTSCrev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astCSCset(struct AstPrjPrm *);
- int astCSCfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astCSCrev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astQSCset(struct AstPrjPrm *);
- int astQSCfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astQSCrev(const double, const double, struct AstPrjPrm *, double *, double *);
- int astHPXset(struct AstPrjPrm *);
- int astHPXfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astHPXrev(const double, const double, struct AstPrjPrm *, double *, double *);
-
- int astTPNset(struct AstPrjPrm *);
- int astTPNfwd(const double, const double, struct AstPrjPrm *, double *, double *);
- int astTPNrev(const double, const double, struct AstPrjPrm *, double *, double *);
-
-extern const char *astPRJset_errmsg[];
-extern const char *astPRJfwd_errmsg[];
-extern const char *astPRJrev_errmsg[];
-
-#ifdef __cplusplus
-};
-#endif
-
-#endif /* WCSLIB_PROJ_INCLUDED */
diff --git a/ast-5.3-1/ratemap.c b/ast-5.3-1/ratemap.c
deleted file mode 100644
index 52de385..0000000
--- a/ast-5.3-1/ratemap.c
+++ /dev/null
@@ -1,2011 +0,0 @@
-/*
-*class++
-* Name:
-* RateMap
-
-* Purpose:
-* Mapping which represents differentiation.
-
-* Constructor Function:
-c astRateMap
-f AST_RATEMAP
-
-* Description:
-* A RateMap is a Mapping which represents a single element of the
-* Jacobian matrix of another Mapping. The Mapping for which the
-* Jacobian is required is specified when the new RateMap is created,
-* and is referred to as the "encapsulated Mapping" below.
-*
-* The number of inputs to a RateMap is the same as the number of inputs
-* to its encapsulated Mapping. The number of outputs from a RateMap
-* is always one. This one output equals the rate of change of a
-* specified output of the encapsulated Mapping with respect to a
-* specified input of the encapsulated Mapping (the input and output
-* to use are specified when the RateMap is created).
-*
-* A RateMap which has not been inverted does not define an inverse
-* transformation. If a RateMap has been inverted then it will define
-* an inverse transformation but not a forward transformation.
-
-* Inheritance:
-* The RateMap class inherits from the Mapping class.
-
-* Attributes:
-* The RateMap class does not define any new attributes beyond those
-* which are applicable to all Mappings.
-
-* Functions:
-c The RateMap class does not define any new functions beyond those
-f The RateMap class does not define any new routines beyond those
-* which are applicable to all Mappings.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 10-FEB-2004 (DSB):
-* Original version.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 10-MAY-2006 (DSB):
-* Override astEqual.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS RateMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "mapping.h" /* Coordinate Mappings (parent class) */
-#include "channel.h" /* I/O channels */
-#include "ratemap.h" /* Interface definition for this class */
-#include "unitmap.h" /* Unit Mappings */
-#include "frame.h" /* Frames */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static int *(* parent_mapsplit)( AstMapping *, int, const int *, AstMapping **, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(RateMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(RateMap,Class_Init)
-#define class_vtab astGLOBAL(RateMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstRateMapVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstRateMap *astRateMapId_( void *, int, int, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMapping *RemoveRegions( AstMapping *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetObjSize( AstObject *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Member functions. */
-/* ================= */
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two RateMaps are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "ratemap.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* RateMap member function (over-rides the astEqual protected
-* method inherited from the astMapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two RateMaps are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Object (a RateMap).
-* that
-* Pointer to the second Object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the RateMaps are equivalent, zero otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstRateMap *that;
- AstRateMap *this;
- int nin;
- int nout;
- int result;
- int that_inv;
- int this_inv;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain pointers to the two RateMap structures. */
- this = (AstRateMap *) this_object;
- that = (AstRateMap *) that_object;
-
-/* Check the second object is a RateMap. We know the first is a
- RateMap since we have arrived at this implementation of the virtual
- function. */
- if( astIsARateMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
- nin = astGetNin( this );
- nout = astGetNout( this );
- if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two RateMaps differ, it may still be possible
- for them to be equivalent. First compare the RateMaps if their Invert
- flags are the same. In this case all the attributes of the two RateMaps
- must be identical. */
- if( astGetInvert( this ) == astGetInvert( that ) ) {
-
-/* Temporarily re-instate the original Invert flag values. */
- this_inv = astGetInvert( this->map );
- that_inv = astGetInvert( that->map );
- astSetInvert( this->map, this->invert );
- astSetInvert( that->map, that->invert );
-
- if( astEqual( this->map, that->map ) &&
- this->iin == that->iin &&
- this->iout == that->iout ){
- result = 1;
- }
-
-/* Restore the original Invert flag values. */
- astSetInvert( this->map, this_inv );
- astSetInvert( that->map, that_inv );
-
-/* If the Invert flags for the two RateMaps differ, the attributes of the two
- RateMaps must be inversely related to each other. */
- } else {
-
-/* In the specific case of a RateMap, Invert flags must be equal. */
- result = 0;
-
- }
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "ratemap.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* RateMap member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied RateMap,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the RateMap.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstRateMap *this; /* Pointer to RateMap structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the RateMap structure. */
- this = (AstRateMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
- result += astGetObjSize( this->map );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-void astInitRateMapVtab_( AstRateMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitRateMapVtab
-
-* Purpose:
-* Initialise a virtual function table for a RateMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "ratemap.h"
-* void astInitRateMapVtab( AstRateMapVtab *vtab, const char *name )
-
-* Class Membership:
-* RateMap vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the RateMap class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsARateMap) to determine if an object belongs to
- this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
-
-/* None. */
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
- mapping->RemoveRegions = RemoveRegions;
-
-#if defined(THREAD_SAFE)
- parent_managelock = object->ManageLock;
- object->ManageLock = ManageLock;
-#endif
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
- parent_mapsplit = mapping->MapSplit;
- mapping->MapSplit = MapSplit;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- object->Equal = Equal;
- mapping->MapMerge = MapMerge;
-
-/* Declare the copy constructor, destructor and class dump function. */
- astSetCopy( vtab, Copy );
- astSetDelete( vtab, Delete );
- astSetDump( vtab, Dump, "RateMap", "Differential Mapping" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra,
- AstObject **fail, int *status ) {
-/*
-* Name:
-* ManageLock
-
-* Purpose:
-* Manage the thread lock on an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *ManageLock( AstObject *this, int mode, int extra,
-* AstObject **fail, int *status )
-
-* Class Membership:
-* RateMap member function (over-rides the astManageLock protected
-* method inherited from the parent class).
-
-* Description:
-* This function manages the thread lock on the supplied Object. The
-* lock can be locked, unlocked or checked by this function as
-* deteremined by parameter "mode". See astLock for details of the way
-* these locks are used.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* mode
-* An integer flag indicating what the function should do:
-*
-* AST__LOCK: Lock the Object for exclusive use by the calling
-* thread. The "extra" value indicates what should be done if the
-* Object is already locked (wait or report an error - see astLock).
-*
-* AST__UNLOCK: Unlock the Object for use by other threads.
-*
-* AST__CHECKLOCK: Check that the object is locked for use by the
-* calling thread (report an error if not).
-* extra
-* Extra mode-specific information.
-* fail
-* If a non-zero function value is returned, a pointer to the
-* Object that caused the failure is returned at "*fail". This may
-* be "this" or it may be an Object contained within "this". Note,
-* the Object's reference count is not incremented, and so the
-* returned pointer should not be annulled. A NULL pointer is
-* returned if this function returns a value of zero.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A local status value:
-* 0 - Success
-* 1 - Could not lock or unlock the object because it was already
-* locked by another thread.
-* 2 - Failed to lock a POSIX mutex
-* 3 - Failed to unlock a POSIX mutex
-* 4 - Bad "mode" value supplied.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-*/
-
-/* Local Variables: */
- AstRateMap *this; /* Pointer to RateMap structure */
- int result; /* Returned status value */
-
-/* Initialise */
- result = 0;
-
-/* Check the supplied pointer is not NULL. */
- if( !this_object ) return result;
-
-/* Obtain a pointers to the RateMap structure. */
- this = (AstRateMap *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
- if( !result ) result = (*parent_managelock)( this_object, mode, extra,
- fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
- the supplied Object. */
- if( !result ) result = astManageLock( this->map, mode, extra, fail );
-
- return result;
-
-}
-#endif
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a RateMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* RateMap method (over-rides the protected astMapMerge method
-* inherited from the Mapping class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated RateMap in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated RateMap with one which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated RateMap which is to be merged with
-* its neighbours. This should be a cloned copy of the RateMap
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* RateMap it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated RateMap resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstMapping *emap1;
- AstMapping *emap2;
- AstMapping *emap;
- AstMapping *smap;
- AstRateMap *map;
- AstRateMap *rmap1;
- AstRateMap *rmap2;
- int cancel;
- int map_inv;
- int nax;
- int old_inv2;
- int old_inv;
- int old_winv;
- int result;
-
-/* Initialise. */
- result = -1;
-
-/* Check the inherited status. */
- if ( !astOK ) return result;
-
-/* Initialisation to avoid compiler warnings. */
- nax = 0;
-
-/* Get a pointer to this RateMap. */
- map = (AstRateMap *) this;
-
-/* Temporarily set its Invert flag to the requested value. */
- map_inv = astGetInvert( map );
- astSetInvert( map, ( *invert_list )[ where ] );
-
-/* Get the encapsulated Mapping, and temporarily set its Invert attribute
- back to the value it had when the RateMap was created, saving the current
- Invert value so that it can be re-instated later. */
- emap = map->map;
- old_inv = astGetInvert( emap );
- astSetInvert( emap, map->invert );
-
-/* First try to simplify the RateMap by simplifying its encapsulated
- Mapping. */
- smap = astSimplify( emap );
-
-/* If any simplification took place, create a new RateMap with the
- simplified mapping. */
- if( smap != emap ) {
- (void) astAnnul( ( *map_list )[ where ] );
- ( *map_list )[ where ] = (AstMapping *) astRateMap( smap, map->iout, map->iin, "", status );
- result = where;
-
-/* The only other simplication which can be performed is to cancel a RateMap
- with its own inverse in series. */
- } else if( series ) {
-
-/* Indicate we have nothing to cancel with as yet. */
- cancel = -1;
-
-/* First consider the lower neighbour. */
- if( where > 0 && astIsARateMap( ( *map_list )[ where - 1 ] ) ) {
-
-/* Check the Invert flags are opposite */
- if( ( *invert_list )[ where ] != ( *invert_list )[ where - 1 ] ) {
- rmap1 = map;
- rmap2 = (AstRateMap *) ( *map_list )[ where - 1 ];
-
-/* Check the input and output indices are equal. */
- if( rmap1->iin == rmap2->iin &&
- rmap1->iout == rmap2->iout ) {
-
-/* Check the encapsulated Mappings are equal. */
- emap1 = emap;
- emap2 = rmap2->map;
- old_winv = astGetInvert( rmap2 );
- astSetInvert( rmap2, ( *invert_list )[ where - 1 ] );
- old_inv2 = astGetInvert( emap2 );
- astSetInvert( emap2, rmap2->invert );
-
- if( astEqual( emap1, emap2 ) ) cancel = where - 1;
-
- astSetInvert( emap2, old_inv2 );
- astSetInvert( rmap2, old_winv );
-
- nax = astGetNout( rmap1 );
- }
- }
- }
-
-/* Likewise consider the upper neighbour. */
- if( cancel == -1 && where + 1 < *nmap &&
- astIsARateMap( ( *map_list )[ where + 1 ] ) ) {
-
- if( ( *invert_list )[ where ] != ( *invert_list )[ where + 1 ] ) {
- rmap1 = map;
- rmap2 = (AstRateMap *) ( *map_list )[ where + 1 ];
- if( rmap1->iin == rmap2->iin &&
- rmap1->iout == rmap2->iout ) {
- emap1 = emap;
- emap2 = rmap2->map;
- old_winv = astGetInvert( rmap2 );
- astSetInvert( rmap2, ( *invert_list )[ where + 1 ] );
- old_inv2 = astGetInvert( emap2 );
- astSetInvert( emap2, rmap2->invert );
-
- if( astEqual( emap1, emap2 ) ) cancel = where + 1;
-
- astSetInvert( emap2, old_inv2 );
- astSetInvert( rmap2, old_winv );
-
- nax = astGetNin( rmap1 );
- }
- }
- }
-
-/* If we can cancel with a neightbour, do so. */
- if( cancel != -1 ) {
- (void) astAnnul( ( *map_list )[ where ] );
- (void) astAnnul( ( *map_list )[ cancel ] );
- ( *map_list )[ where ] = (AstMapping *) astUnitMap( nax, "", status );
- ( *invert_list )[ where ] = 0;
- ( *map_list )[ cancel ] = (AstMapping *) astUnitMap( nax, "", status );
- ( *invert_list )[ cancel ] = 0;
- result = ( cancel < where ) ? cancel : where;
- }
- }
-
-/* Free resources. */
- smap = astAnnul( smap );
-
-/* Reset the original Invert attribute for the encapsulated Mapping. */
- astSetInvert( emap, old_inv );
-
-/* Reset the original Invert attribute for the specified RateMap */
- astSetInvert( map, map_inv );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = -1;
-
-/* Return the result. */
- return result;
-}
-
-static int *MapSplit( AstMapping *this_map, int nin, const int *in, AstMapping **map, int *status ){
-/*
-* Name:
-* MapSplit
-
-* Purpose:
-* Create a Mapping representing a subset of the inputs of an existing
-* RateMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "ratemap.h"
-* int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status )
-
-* Class Membership:
-* RateMap method (over-rides the protected astMapSplit method
-* inherited from the Mapping class).
-
-* Description:
-* This function creates a new Mapping by picking specified inputs from
-* an existing RateMap. This is only possible if the specified inputs
-* correspond to some subset of the RateMap outputs. That is, there
-* must exist a subset of the RateMap outputs for which each output
-* depends only on the selected RateMap inputs, and not on any of the
-* inputs which have not been selected. If this condition is not met
-* by the supplied RateMap, then a NULL Mapping is returned.
-
-* Parameters:
-* this
-* Pointer to the RateMap to be split (the RateMap is not actually
-* modified by this function).
-* nin
-* The number of inputs to pick from "this".
-* in
-* Pointer to an array of indices (zero based) for the inputs which
-* are to be picked. This array should have "nin" elements. If "Nin"
-* is the number of inputs of the supplied RateMap, then each element
-* should have a value in the range zero to Nin-1.
-* map
-* Address of a location at which to return a pointer to the new
-* Mapping. This Mapping will have "nin" inputs (the number of
-* outputs may be different to "nin"). A NULL pointer will be
-* returned if the supplied RateMap has no subset of outputs which
-* depend only on the selected inputs.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated array of ints. The number of
-* elements in this array will equal the number of outputs for the
-* returned Mapping. Each element will hold the index of the
-* corresponding output in the supplied RateMap. The array should be
-* freed using astFree when no longer needed. A NULL pointer will
-* be returned if no output Mapping can be created.
-
-* Notes:
-* - If this function is invoked with the global error status set,
-* or if it should fail for any reason, then NULL values will be
-* returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
- AstMapping *emap; /* Pointer to Mapping encapsulated by RateMap */
- AstMapping *remap; /* Split Mapping encapsulated by RateMap */
- AstRateMap *this; /* Pointer to RateMap structure */
- int *eres; /* Outputs used by split Mapping */
- int *result; /* Array holding returned output inedx */
- int ax1; /* New index of output being differentiated */
- int ax2; /* New index of output being varied */
- int i; /* Loop count */
- int nout; /* No. of outputs in the split Mapping */
- int old_inv; /* Original Invert flag for emap */
-
-/* Initialise */
- result = NULL;
- *map = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Invoke the parent astMapSplit method to see if it can do the job. */
- result = (*parent_mapsplit)( this_map, nin, in, map, status );
-
-/* If not, we provide a special implementation here. Note we cannot
- produce the Mapping if the RaterMap has been inverted. */
- if( !result && !astGetInvert( this_map ) ) {
-
-/* Get a pointer to the RateMap structure. */
- this = (AstRateMap *) this_map;
-
-/* Temporarily reset the Invert attribute of the encapsulated Mapping
- back to the value it had when the RateMap was created. */
- emap = this->map;
- old_inv = astGetInvert( emap );
- astSetInvert( emap, this->invert );
-
-/* Attempt to split the encapsulated Mapping */
- eres = astMapSplit( emap, nin, in, &remap );
-
-/* We can only continue if this was succesful. */
- if( eres ) {
-
-/* Check that the input which the RateMap varies is one of the selected
- inputs. */
- ax2 = -1;
- for( i = 0; i < nin; i++ ) {
- if( in[ i ] == this->iin ) {
- ax2 = i;
- break;
- }
- }
-
-/* Check that the output which the RateMap differentiates is one of the
- outputs of the "remap" Mapping. */
- ax1 = -1;
- nout = astGetNout( remap );
- for( i = 0; i < nout; i++ ) {
- if( eres[ i ] == this->iout ) {
- ax1 = i;
- break;
- }
- }
-
-/* If possible create the required Mapping and returned array. */
- if( ax1 != -1 && ax2 != -1 ) {
- *map = (AstMapping *) astRateMap( remap, ax1, ax2, "", status );
- result = astMalloc( sizeof( int ) );
- if( astOK ) *result= 0;
- }
-
-/* Free resources */
- eres = astFree( eres );
- remap = astAnnul( remap );
- }
-
-/* Re-instate the original Invert flag in the Mapping encapsulated by the
- supplied RateMap. */
- astSetInvert( emap, old_inv );
- }
-
-/* Free returned resources if an error has occurred. */
- if( !astOK ) {
- result = astFree( result );
- *map = astAnnul( *map );
- }
-
-/* Return the list of output indices. */
- return result;
-}
-
-static AstMapping *RemoveRegions( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* RemoveRegions
-
-* Purpose:
-* Remove any Regions from a Mapping.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "ratemap.h"
-* AstMapping *RemoveRegions( AstMapping *this, int *status )
-
-* Class Membership:
-* RateMap method (over-rides the astRemoveRegions method inherited
-* from the Mapping class).
-
-* Description:
-* This function searches the supplied Mapping (which may be a
-* compound Mapping such as a CmpMap) for any component Mappings
-* that are instances of the AST Region class. It then creates a new
-* Mapping from which all Regions have been removed. If a Region
-* cannot simply be removed (for instance, if it is a component of a
-* parallel CmpMap), then it is replaced with an equivalent UnitMap
-* in the returned Mapping.
-*
-* The implementation provided by the RateMap class invokes the
-* astRemoveRegions method on the encapsulated Mapping, and returns a
-* new RateMap containing the resulting Mapping.
-
-* Parameters:
-* this
-* Pointer to the original Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the modified mapping.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstMapping *newmap; /* New component Mapping */
- AstMapping *result; /* Result pointer to return */
- AstRateMap *new; /* Pointer to new RateMap */
- AstRateMap *this; /* Pointer to RateMap structure */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the RateMap. */
- this = (AstRateMap *) this_mapping;
-
-/* Invoke the astRemoveRegions method on the component Mapping. */
- newmap = astRemoveRegions( this->map );
-
-/* If the Mapping was not modified, just return a clone of the supplied
- pointer. */
- if( this->map == newmap ) {
- result = astClone( this );
-
-/* Otherwise, we need to create a new RateMap to return. */
- } else {
-
-/* If the new Mapping is a Frame (as will be the case if the original
- Mapping was a Region), use a UnitMap instead. */
- if( astIsAFrame( newmap ) ) {
- (void) astAnnul( newmap );
- newmap = (AstMapping *) astUnitMap( astGetNin( this ), " ", status );
- }
-
-/* Take a deep copy of the supplied RateMap and then modify the Mapping
- so that we retain any extra information in the supplied RateMap. */
- new = astCopy( this );
- (void) astAnnul( new->map );
- new->map = astClone( newmap );
- result = (AstMapping *) new;
- }
-
-/* Free resources. */
- newmap = astAnnul( newmap );
-
-/* Annul the returned Mapping if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a RateMap to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "ratemap.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* RateMap member function (over-rides the astTransform method inherited
-* from the Mapping class).
-
-* Description:
-* This function takes a RateMap and a set of points encapsulated in a
-* PointSet and transforms the points so as to apply the required Mapping.
-* This implies applying each of the RateMap's component Mappings in turn,
-* either in series or in parallel.
-
-* Parameters:
-* this
-* Pointer to the RateMap.
-* in
-* Pointer to the PointSet associated with the input coordinate values.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of coordinates for the RateMap being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstMapping *emap;
- AstPointSet *result;
- AstRateMap *map;
- double **ptr2;
- double **ptr;
- double *pout;
- double *work;
- int ic;
- int iin;
- int iout;
- int ipoint;
- int ncoord;
- int npoint;
- int old_inv;
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the RateMap. */
- map = (AstRateMap *) this;
-
-/* Apply the parent Mapping using the stored pointer to the Transform member
- function inherited from the parent Mapping class. This function validates
- all arguments and generates an output PointSet if necessary, but does not
- actually transform any coordinate values. */
- result = (*parent_transform)( this, in, forward, out, status );
-
-/* We now extend the parent astTransform method by applying the component
- Mappings of the RateMap to generate the output coordinate values. */
-
-/* Determine whether to apply the forward or inverse Mapping, according to the
- direction specified and whether the Mapping has been inverted. */
- if ( astGetInvert( map ) ) forward = !forward;
-
-/* The RateMap class does not have an inverse transformation. */
- if( !forward ) {
- astError( AST__INTER, "astTransform(%s): The %s class does not have "
- "an inverse transformation (AST internal programming error).", status,
- astGetClass( this ), astGetClass( this ) );
-
-/* Otherwise use the astRate method on the encapsulated Maping to
- determine the required rate of change at each supplied input point. */
- } else {
-
-/* Temporarily reset the Invert attribute of the encapsulated Mapping
- back to the value it had when the RateMap was created. */
- emap = map->map;
- old_inv = astGetInvert( emap );
- astSetInvert( emap, map->invert );
-
-/* Note the indices of the input and output to use. */
- iin = map->iin;
- iout = map->iout;
-
-/* Get pointers to the axis values in the supplied PointSet. */
- ptr = astGetPoints( in );
- ncoord = astGetNcoord( in );
- npoint = astGetNpoint( in );
-
-/* Work space to hold an input position. */
- work = astMalloc( sizeof( double )*(size_t) ncoord );
-
-/* Get a pointer to the axis values in the results PointSet. */
- ptr2 = astGetPoints( result );
- pout = ptr2[ 0 ];
- if( astOK ) {
-
-/* Loop round each point in the supplied PointSet. */
- for( ipoint = 0; ipoint < npoint; ipoint++ ) {
-
-/* Copy this point into the work array. */
- for( ic = 0; ic < ncoord; ic++ ) work[ ic ] = ptr[ ic ][ ipoint ];
-
-/* Find the rate of change of the specified output of the encapsulated
- Mapping with respect to the specified input. */
- *(pout++) = astRate( emap, work, iout, iin );
- }
- }
-
-/* Re-instate the original Invert flag. */
- astSetInvert( emap, old_inv );
-
-/* Free resources */
- work = astFree( work );
-
- }
-
-/* If an error occurred, clean up by deleting the output PointSet (if
- allocated by this function) and setting a NULL result pointer. */
- if ( !astOK ) {
- if ( !out ) result = astDelete( result );
- result = NULL;
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for RateMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for RateMap objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - This constructor makes a deep copy, including a copy of the component
-* Mappings within the RateMap.
-*/
-
-/* Local Variables: */
- AstRateMap *in; /* Pointer to input RateMap */
- AstRateMap *out; /* Pointer to output RateMap */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output RateMaps. */
- in = (AstRateMap *) objin;
- out = (AstRateMap *) objout;
-
-/* For safety, start by clearing any references to the input component
- Mappings from the output RateMap. */
- out->map = NULL;
-
-/* Make copies of these Mappings and store pointers to them in the output
- RateMap structure. */
- out->map = astCopy( in->map );
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for RateMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for RateMap objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstRateMap *this; /* Pointer to RateMap */
-
-/* Obtain a pointer to the RateMap structure. */
- this = (AstRateMap *) obj;
-
-/* Annul the pointers to the component Mappings. */
- this->map = astAnnul( this->map );
-
-/* Clear the remaining RateMap variables. */
- this->invert = 0;
- this->iin = 0;
- this->iout = 0;
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for RateMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the RateMap class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the RateMap whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstRateMap *this; /* Pointer to the RateMap structure */
- int ival; /* Integer value */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the RateMap structure. */
- this = (AstRateMap *) this_object;
-
-/* Write out values representing the instance variables for the RateMap
- class. Accompany these with appropriate comment strings, possibly
- depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* Input axis. */
-/* ------------ */
- ival = this->iin;
- set = ( ival != 0 );
- astWriteInt( channel, "IIn", set, 0, ival, "Index of Mapping input" );
-
-/* Output axis. */
-/* ------------ */
- ival = this->iout;
- set = ( ival != 0 );
- astWriteInt( channel, "IOut", set, 0, ival, "Index of Mapping output" );
-
-/* Invert flag. */
-/* ------------ */
- ival = this->invert;
- set = ( ival != 0 );
- astWriteInt( channel, "Inv", set, 0, ival,
- ival ? "Mapping used in inverse direction" :
- "Mapping used in forward direction" );
-
-/* Mapping. */
-/* -------- */
- astWriteObject( channel, "Map", 1, 1, this->map,
- "Mapping to be differentiated" );
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsARateMap and astCheckRateMap functions using the
- macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(RateMap,Mapping)
-astMAKE_CHECK(RateMap)
-
-AstRateMap *astRateMap_( void *map_void, int ax1, int ax2, const char *options, int *status, ...) {
-/*
-*+
-* Name:
-* astRateMap
-
-* Purpose:
-* Create a RateMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "ratemap.h"
-* AstRateMap *astRateMap( AstMapping *map, int ax1, int ax2, const char *options, int *status, ... )
-
-* Class Membership:
-* RateMap constructor.
-
-* Description:
-* This function creates a new RateMap and optionally initialises its
-* attributes.
-
-* Parameters:
-* map
-* Pointer to the Mapping to differentiate.
-* ax1
-* zero-based index of the "map" output which is to be differentiated.
-* ax2
-* Zero-based index of the "map" input which is to be varied.
-* options
-* Pointer to a null terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new RateMap. The syntax used is the same as for the
-* astSet method and may include "printf" format specifiers identified
-* by "%" symbols in the normal way.
-* status
-* Pointer to the inherited status variable.
-* ...
-* If the "options" string contains "%" format specifiers, then an
-* optional list of arguments may follow it in order to supply values to
-* be substituted for these specifiers. The rules for supplying these
-* are identical to those for the astSet method (and for the C "printf"
-* function).
-
-* Returned Value:
-* A pointer to the new RateMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-
-* Implementation Notes:
-* - This function implements the basic RateMap constructor which is
-* available via the protected interface to the RateMap class. A
-* public interface is provided by the astRateMapId_ function.
-* - Because this function has a variable argument list, it is
-* invoked by a macro that evaluates to a function pointer (not a
-* function invocation) and no checking or casting of arguments is
-* performed before the function is invoked. Because of this, the
-* "map" parameter is of type (void *) and is converted and validated
-* within the function itself.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstRateMap *new; /* Pointer to new RateMap */
- AstMapping *map; /* Pointer to Mapping structure */
- va_list args; /* Variable argument list */
-
-/* Initialise. */
- new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return new;
-
-/* Obtain and validate pointers to the Mapping structures provided. */
- map = astCheckMapping( map_void );
- if ( astOK ) {
-
-/* Initialise the RateMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitRateMap( NULL, sizeof( AstRateMap ), !class_init, &class_vtab,
- "RateMap", map, ax1, ax2 );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new RateMap's
- attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return a pointer to the new RateMap. */
- return new;
-}
-
-AstRateMap *astRateMapId_( void *map_void, int ax1, int ax2,
- const char *options, ... ) {
-/*
-*++
-* Name:
-c astRateMap
-f AST_RATEMAP
-
-* Purpose:
-* Create a RateMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "ratemap.h"
-c AstRateMap *astRateMap( AstMapping *map, int ax1, int ax2,
-c const char *options, ... )
-f RESULT = AST_RATEMAP( MAP, AX1, AX2, OPTIONS, STATUS )
-
-* Class Membership:
-* RateMap constructor.
-
-* Description:
-* This function creates a new RateMap and optionally initialises
-* its attributes.
-*
-* A RateMap is a Mapping which represents a single element of the
-* Jacobian matrix of another Mapping. The Mapping for which the
-* Jacobian is required is specified when the new RateMap is created,
-* and is referred to as the "encapsulated Mapping" below.
-*
-* The number of inputs to a RateMap is the same as the number of inputs
-* to its encapsulated Mapping. The number of outputs from a RateMap
-* is always one. This one output equals the rate of change of a
-* specified output of the encapsulated Mapping with respect to a
-* specified input of the encapsulated Mapping (the input and output
-* to use are specified when the RateMap is created).
-*
-* A RateMap which has not been inverted does not define an inverse
-* transformation. If a RateMap has been inverted then it will define
-* an inverse transformation but not a forward transformation.
-
-* Parameters:
-c map
-f MAP = INTEGER (Given)
-* Pointer to the encapsulated Mapping.
-c ax1
-f AX1 = INTEGER (Given)
-* Index of the output from the encapsulated Mapping for which the
-* rate of change is required. This corresponds to the delta
-* quantity forming the numerator of the required element of the
-* Jacobian matrix. The first axis has index 1.
-c ax2
-f AX2 = INTEGER (Given)
-* Index of the input to the encapsulated Mapping which is to be
-* varied. This corresponds to the delta quantity forming the
-* denominator of the required element of the Jacobian matrix.
-* The first axis has index 1.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new RateMap. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new RateMap. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astRateMap()
-f AST_RATEMAP = INTEGER
-* A pointer to the new RateMap.
-
-* Notes:
-* - The forward transformation of the encapsulated Mapping must be
-* defined.
-c - Note that the component Mappings supplied are not copied by
-c astRateMap (the new RateMap simply retains a reference to
-c them). They may continue to be used for other purposes, but
-c should not be deleted. If a RateMap containing a copy of its
-c component Mappings is required, then a copy of the RateMap should
-c be made using astCopy.
-f - Note that the component Mappings supplied are not copied by
-f AST_RATEMAP (the new RateMap simply retains a reference to
-f them). They may continue to be used for other purposes, but
-f should not be deleted. If a RateMap containing a copy of its
-f component Mappings is required, then a copy of the RateMap should
-f be made using AST_COPY.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-
-* Implementation Notes:
-* - This function implements the external (public) interface to
-* the astRateMap constructor function. It returns an ID value
-* (instead of a true C pointer) to external users, and must be
-* provided because astRateMap_ has a variable argument list which
-* cannot be encapsulated in a macro (where this conversion would
-* otherwise occur).
-* - Because no checking or casting of arguments is performed
-* before the function is invoked, the "map" parameter is of type
-* (void *) and is converted from an ID value to a pointer and
-* validated within the function itself.
-* - The variable argument list also prevents this function from
-* invoking astRateMap_ directly, so it must be a re-implementation
-* of it in all respects, except for the conversions between IDs
-* and pointers on input/output of Objects.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstRateMap *new; /* Pointer to new RateMap */
- AstMapping *map; /* Pointer to Mapping structure */
- va_list args; /* Variable argument list */
-
-/* Pointer to inherited status value */
- int *status;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialise. */
- new = NULL;
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return new;
-
-/* Obtain the Mapping pointer from the ID supplied and validate the
- pointer to ensure it identifies a valid Mapping. */
- map = astVerifyMapping( astMakePointer( map_void ) );
- if ( astOK ) {
-
-/* Initialise the RateMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitRateMap( NULL, sizeof( AstRateMap ), !class_init, &class_vtab,
- "RateMap", map, ax1 - 1, ax2 - 1 );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new RateMap's
- attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return an ID value for the new RateMap. */
- return astMakeId( new );
-}
-
-AstRateMap *astInitRateMap_( void *mem, size_t size, int init,
- AstRateMapVtab *vtab, const char *name,
- AstMapping *map, int ax1, int ax2, int *status ) {
-/*
-*+
-* Name:
-* astInitRateMap
-
-* Purpose:
-* Initialise a RateMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "ratemap.h"
-* AstRateMap *astInitRateMap( void *mem, size_t size, int init,
-* AstRateMapVtab *vtab, const char *name,
-* AstMapping *map, int ax1, int ax2 )
-
-* Class Membership:
-* RateMap initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new RateMap object. It allocates memory (if necessary) to
-* accommodate the RateMap plus any additional data associated with the
-* derived class. It then initialises a RateMap structure at the start
-* of this memory. If the "init" flag is set, it also initialises the
-* contents of a virtual function table for a RateMap at the start of
-* the memory passed via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the RateMap is to be initialised.
-* This must be of sufficient size to accommodate the RateMap data
-* (sizeof(RateMap)) plus any data used by the derived class. If a
-* value of NULL is given, this function will allocate the memory itself
-* using the "size" parameter to determine its size.
-* size
-* The amount of memory used by the RateMap (plus derived class
-* data). This will be used to allocate memory if a value of NULL is
-* given for the "mem" parameter. This value is also stored in the
-* RateMap structure, so a valid value must be supplied even if not
-* required for allocating memory.
-* init
-* A logical flag indicating if the RateMap's virtual function table
-* is to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new RateMap.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the Object
-* astClass function).
-* map
-* Pointer to the Mapping.
-* ax1
-* Zero-based index of output axis.
-* ax2
-* Zero-based index of input axis.
-
-* Returned Value:
-* A pointer to the new RateMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstRateMap *new; /* Pointer to new RateMap */
- int nin; /* No. input coordinates for RateMap */
- int nout; /* No. output coordinates for RateMap */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitRateMapVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Report an error if "map" has no forward transformation. */
- if( !astGetTranForward( map ) && astOK ) {
- astError( AST__INTRD, "astInitRateMap(%s): The supplied Mapping "
- "is not able to transform coordinates in the forward direction.", status,
- name );
- }
-
-/* Check that the input and output axis indices are valid. */
- nin = astGetNin( map );
- nout = astGetNout( map );
- if( ( ax1 < 0 || ax1 >= nout ) && astOK ) {
- astError( AST__INNCO, "astInitRateMap(%s): The output axis %d is out "
- "of range - it should be in the range 1 to %d.", status, name,
- ax1 + 1, nout );
- }
- if( ( ax2 < 0 || ax2 >= nin ) && astOK ) {
- astError( AST__INNCO, "astInitRateMap(%s): The input axis %d is out "
- "of range - it should be in the range 1 to %d.", status, name,
- ax2 + 1, nin );
- }
-
-/* Initialise a Mapping structure (the parent class) as the first component
- within the RateMap structure, allocating memory if necessary. Specify
- the number of input and output coordinates and in which directions the
- Mapping should be defined. */
- if ( astOK ) {
- new = (AstRateMap *) astInitMapping( mem, size, 0,
- (AstMappingVtab *) vtab, name,
- nin, 1, 1, 0 );
-
- if ( astOK ) {
-
-/* Initialise the RateMap data. */
-/* --------------------------- */
-/* Store a pointer to the encapsulated Mapping. */
- new->map = astClone( map );
-
-/* Save the initial values of the inversion flag for this Mapping. */
- new->invert = astGetInvert( map );
-
-/* Save the input and output axis indices. */
- new->iout = ax1;
- new->iin = ax2;
-
-/* If an error occurred, clean up by annulling the Mapping pointers and
- deleting the new object. */
- if ( !astOK ) {
- new->map = astAnnul( new->map );
- new = astDelete( new );
- }
- }
- }
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstRateMap *astLoadRateMap_( void *mem, size_t size,
- AstRateMapVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadRateMap
-
-* Purpose:
-* Load a RateMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "ratemap.h"
-* AstRateMap *astLoadRateMap( void *mem, size_t size,
-* AstRateMapVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* RateMap loader.
-
-* Description:
-* This function is provided to load a new RateMap using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* RateMap structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a RateMap at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the RateMap is to be
-* loaded. This must be of sufficient size to accommodate the
-* RateMap data (sizeof(RateMap)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the RateMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the RateMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstRateMap) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new RateMap. If this is NULL, a pointer to
-* the (static) virtual function table for the RateMap class is
-* used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "RateMap" is used instead.
-
-* Returned Value:
-* A pointer to the new RateMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstRateMap *new; /* Pointer to the new RateMap */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this RateMap. In this case the
- RateMap belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstRateMap );
- vtab = &class_vtab;
- name = "RateMap";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitRateMapVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built RateMap. */
- new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "RateMap" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* Invert flag. */
-/* ------------ */
- new->invert = astReadInt( channel, "inv", 0 );
- new->invert = ( new->invert != 0 );
-
-/* Input and output axes. */
-/* ---------------------- */
- new->iin = astReadInt( channel, "iin", 0 );
- new->iout = astReadInt( channel, "iout", 0 );
-
-/* Mapping. */
-/* -------- */
- new->map = astReadObject( channel, "map", NULL );
-
-/* If an error occurred, clean up by deleting the new RateMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new RateMap pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-/* None. */
-
-
-
-
diff --git a/ast-5.3-1/ratemap.h b/ast-5.3-1/ratemap.h
deleted file mode 100644
index 85ab615..0000000
--- a/ast-5.3-1/ratemap.h
+++ /dev/null
@@ -1,276 +0,0 @@
-#if !defined( RATEMAP_INCLUDED ) /* Include this file only once */
-#define RATEMAP_INCLUDED
-/*
-*+
-* Name:
-* ratemap.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the RateMap class.
-
-* Invocation:
-* #include "ratemap.h"
-
-* Description:
-* This include file defines the interface to the RateMap class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-
-* Inheritance:
-* The RateMap class inherits from the Mapping class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* None.
-
-* Methods Over-Ridden:
-* Public:
-* None.
-*
-* Protected:
-* astMapMerge
-* Merge a RateMap within a sequence of Mappings.
-* astTransform
-* Transform a set of points.
-
-* New Methods Defined:
-* Public:
-* None.
-*
-* Protected:
-* None.
-
-* Other Class Functions:
-* Public:
-* astIsARateMap
-* Test class membership.
-* astRateMap
-* Create a RateMap.
-*
-* Protected:
-* astCheckRateMap
-* Validate class membership.
-* astInitRateMap
-* Initialise a RateMap.
-* astInitRateMapVtab
-* Initialise the virtual function table for the RateMap class.
-* astLoadRateMap
-* Load a RateMap.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstRateMap
-* RateMap object type.
-*
-* Protected:
-* AstRateMapVtab
-* RateMap virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 7-DEC-2004 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h" /* Coordinate Mappings (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* RateMap structure. */
-/* ----------------- */
-/* This structure contains all information that is unique to each
- object in the class (e.g. its instance variables). */
-typedef struct AstRateMap {
-
-/* Attributes inherited from the parent class. */
- AstMapping mapping; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- AstMapping *map; /* Pointer to the Mapping */
- int invert; /* Inversion flag for Mapping */
- int iin; /* Index of Mapping input to vary */
- int iout; /* Index of Mapping output to measure */
-} AstRateMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstRateMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstMappingVtab mapping_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-/* None. */
-} AstRateMapVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstRateMapGlobals {
- AstRateMapVtab Class_Vtab;
- int Class_Init;
-} AstRateMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitRateMapGlobals_( AstRateMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(RateMap) /* Check class membership */
-astPROTO_ISA(RateMap) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstRateMap *astRateMap_( void *, int, int, const char *, int *, ...);
-#else
-AstRateMap *astRateMapId_( void *, int, int, const char *, ... )__attribute__((format(printf,4,5)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstRateMap *astInitRateMap_( void *, size_t, int, AstRateMapVtab *,
- const char *, AstMapping *, int, int, int * );
-
-/* Vtab initialiser. */
-void astInitRateMapVtab_( AstRateMapVtab *, const char *, int * );
-
-/* Loader. */
-AstRateMap *astLoadRateMap_( void *, size_t, AstRateMapVtab *,
- const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-/* None. */
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckRateMap(this) astINVOKE_CHECK(RateMap,this,0)
-#define astVerifyRateMap(this) astINVOKE_CHECK(RateMap,this,1)
-
-/* Test class membership. */
-#define astIsARateMap(this) astINVOKE_ISA(RateMap,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astRateMap astINVOKE(F,astRateMap_)
-#else
-#define astRateMap astINVOKE(F,astRateMapId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitRateMap(mem,size,init,vtab,name,map,iin,iout) \
-astINVOKE(O,astInitRateMap_(mem,size,init,vtab,name,astCheckMapping(map),iin,iout,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitRateMapVtab(vtab,name) astINVOKE(V,astInitRateMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadRateMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadRateMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckRateMap to validate RateMap pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-/* None. */
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/region.c b/ast-5.3-1/region.c
deleted file mode 100644
index dd7c223..0000000
--- a/ast-5.3-1/region.c
+++ /dev/null
@@ -1,12649 +0,0 @@
-/*
-*class++
-* Name:
-* Region
-
-* Purpose:
-* Represents a region within a coordinate system.
-
-* Constructor Function:
-* None.
-
-* Description:
-* This class provides the basic facilities for describing a region within
-* a specified coordinate system. However, the Region class does not
-* have a constructor function of its own, as it is simply a container
-* class for a family of specialised sub-classes such as Circle, Box, etc,
-* which implement Regions with particular shapes.
-*
-* All sub-classes of Region require a Frame to be supplied when the Region
-* is created. This Frame describes the coordinate system in which the
-* Region is defined, and is referred to as the "encapsulated Frame" below.
-* Constructors will also typically required one or more positions to be
-* supplied which define the location and extent of the region. These
-* positions must be supplied within the encapsulated Frame.
-*
-* The Region class inherits from the Frame class, and so a Region can be
-* supplied where-ever a Frame is expected. In these cases, supplying a
-* Region is equivalent to supplying a reference to its encapsulated Frame.
-* Thus all the methods of the Frame class can be used on the Region class.
-* For instance, the
-c astFormat function
-f AST_FORMAT routine
-* may be used on a Region to format an axis value.
-*
-* In addition, since Frame inherits from Mapping, a Region is also a sort
-* of Mapping. Transforming positions by supplying a Region to one of the
-c astTran<X> functions
-f AST_TRAN<X> routines
-* is the way to determine if a given position is inside or outside the
-* Region. When used as a Mapping, most classes of Frame are equivalent to
-* a UnitMap. However, the Region class modifies this behaviour so that a
-* Region acts like a UnitMap only for input positions which are within the
-* area represented by the Region. Input positions which are outside the
-* area produce bad output values (i.e. the output values are equal to
-* AST__BAD). This behaviour is the same for both the forward and the
-* inverse transformation. In this sense the "inverse transformation"
-* is not a true inverse of the forward transformation, since applying
-* the forward transformation to a point outside the Region, and then
-* applying the inverse transformation results, in a set of AST__BAD axis
-* values rather than the original axis values. If required, the
-c astRemoveRegions
-f AST_REMOVEREGIONS
-* function can be used to remove the "masking" effect of any Regions
-* contained within a compound Mapping or FrameSet. It does this by
-* replacing each Region with a UnitMap or equivalent Frame (depending
-* on the context in which the Region is used).
-*
-* If the coordinate system represented by the Region is changed (by
-* changing the values of one or more of the attribute which the Region
-* inherits from its encapsulated Frame), the area represented by
-* the Region is mapped into the new coordinate system. For instance, let's
-* say a Circle (a subclass of Region) is created, a SkyFrame being
-* supplied to the constructor so that the Circle describes a circular
-* area on the sky in FK4 equatorial coordinates. Since Region inherits
-* from Frame, the Circle will have a System attribute and this attribute
-* will be set to "FK4". If the System attribute of the Region is then
-* changed from FK4 to FK5, the circular area represented by the Region
-* will automatically be mapped from the FK4 system into the FK5 system.
-* In general, changing the coordinate system in this way may result in the
-* region changing shape - for instance, a circle may change into an
-* ellipse if the transformation from the old to the new coordinate system
-* is linear but with different scales on each axis. Thus the specific
-* class of a Region cannot be used as a guarantee of the shape in any
-* particular coordinate system. If the
-c astSimplify function
-f AST_SIMPLIFY routine
-* is used on a Region, it will endeavour to return a new Region of
-* a sub-class which accurately describes the shape in the current
-* coordinate system of the Region (but this may not always be possible).
-*
-* It is possible to negate an existing Region so that it represents all
-* areas of the encapsulated Frame except for the area specified when
-* the Region was created.
-
-* Inheritance:
-* The Region class inherits from the Frame class.
-
-* Attributes:
-* In addition to those attributes common to all Frames, every
-* Region also has the following attributes:
-*
-* - Adaptive: Should the area adapt to changes in the coordinate system?
-* - Negated: Has the original region been negated?
-* - Closed: Should the boundary be considered to be inside the region?
-* - MeshSize: Number of points used to create a mesh covering the Region
-* - FillFactor: Fraction of the Region which is of interest
-* - Bounded: Is the Region bounded?
-*
-* Every Region also inherits any further attributes that belong
-* to the encapsulated Frame, regardless of that Frame's class. (For
-* example, the Equinox attribute, defined by the SkyFrame class, is
-* inherited by any Region which represents a SkyFrame.)
-
-* Functions:
-c In addition to those functions applicable to all Frames, the
-c following functions may also be applied to all Regions:
-f In addition to those routines applicable to all Frames, the
-f following routines may also be applied to all Regions:
-*
-c - astGetRegionBounds: Get the bounds of a Region
-f - AST_GETREGIONBOUNDS: Get the bounds of a Region
-c - astGetRegionFrame: Get a copy of the Frame represent by a Region
-f - AST_GETREGIONFRAME: Get a copy of the Frame represent by a Region
-c - astGetRegionPoints: Get the positions that define a Region
-f - AST_GETREGIONPOINTS: Get the positions that define a Region
-c - astGetUnc: Obtain uncertainty information from a Region
-f - AST_GETUNC: Obtain uncertainty information from a Region
-c - astMapRegion: Transform a Region into a new coordinate system
-f - AST_MAPREGION: Transform a Region into a new coordinate system
-c - astNegate: Toggle the value of the Negated attribute
-f - AST_NEGATE: Toggle the value of the Negated attribute
-c - astOverlap: Determines the nature of the overlap between two Regions
-f - AST_OVERLAP: Determines the nature of the overlap between two Regions
-c - astMask<X>: Mask a region of a data grid
-f - AST_MASK<X>: Mask a region of a data grid
-c - astSetUnc: Associate a new uncertainty with a Region
-f - AST_SETUNC: Associate a new uncertainty with a Region
-c - astShowMesh: Display a mesh of points on the surface of a Region
-f - AST_SHOWMESH: Display a mesh of points on the surface of a Region
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2009 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (STARLINK)
-
-* History:
-* 3-DEC-2003 (DSB):
-* Original version.
-* 12-MAY-2005 (DSB):
-* Override astNormBox method.
-* 12-AUG-2005 (DSB):
-* Override ObsLat and ObsLon accessor methods.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 2-MAR-2006 (DSB):
-* Changed AST_LONG_DOUBLE to HAVE_LONG_DOUBLE.
-* 14-MAR-2006 (DSB):
-* Added astGetRefFS.
-* 28-MAY-2007 (DSB):
-* - Added protected function astBndMesh.
-* 14-JAN-2009 (DSB):
-* Override the astIntersect method.
-* 20-JAN-2009 (DSB):
-* Change astPickAxes so that it returns a Region rather than a
-* Frame if possible. This included adding method astRegBasePick.
-* 9-FEB-2009 (DSB):
-* Move PointList methods astGetEnclosure and astSetEnclosure to
-* Region.
-* 18-FEB-2009 (DSB):
-* Remove methods astGetEnclosure and astSetEnclosure.
-* 15-JUN-2009 (DSB):
-* Modify MapRegion to use FrameSets properly.
-* 18-JUN-2009 (DSB):
-* Override ObsAlt accessor methods.
-* 7-SEP-2009 (DSB):
-* Fix astMask to avoid reading variance values from the data array.
-* 8-SEP-2009 (DSB):
-* Fix bugs in astOverlap that could result in wrong results if
-* either region is unbounded.
-*class--
-
-* Implementation Notes:
-* - All sub-classes must over-ride the following abstract methods declared
-* in this class: astRegBaseBox, astRegBaseMesh, astRegPins, astRegCentre.
-* They must also extend the astTransform method. In addition they should
-* usually extend astSimplify.
-
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS Region
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
- compare bad values directory because of the danger of floating point
- exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Value for Ident attribute of of an encapsulated FrameSet which
- indicates that it is a dummy FrameSet (see astRegDummy). */
-#define DUMMY_FS "ASTREGION-DUMMY"
-
-/*
-* Name:
-* MAKE_CLEAR
-
-* Purpose:
-* Define a function to clear an attribute value for a Region.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "region.h"
-* MAKE_CLEAR(attribute)
-
-* Class Membership:
-* Defined by the Region class.
-
-* Description:
-* This macro expands to an implementation of a private member function
-* of the form:
-*
-* static void Clear<Attribute>( AstFrame *this )
-*
-* that clears the value of a specified attribute for the encapsulated
-* FrameSet within a Region (this). This function is intended to over-ride
-* the astClear<Attribute> method inherited from the Frame class.
-
-* Parameters:
-* attribute
-* Name of the attribute, as it appears in the function name.
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attribute) \
-static void Clear##attribute( AstFrame *this_frame, int *status ) { \
-\
-/* Local Variables: */ \
- AstRegion *this; /* Pointer to the Region structure */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Obtain a pointer to the Region structure. */ \
- this = (AstRegion *) this_frame; \
-\
-/* Obtain a pointer to the encapsulated FrameSet and invoke its \
- astClear method. The protected astClear##attribute method is not used \
- because we want the current Frame of the FrameSet tp be re-mapped if \
- necessary. */ \
- astClear( this->frameset, #attribute ); \
-}
-
-/*
-* Name:
-* MAKE_CLEAR_AXIS
-
-* Purpose:
-* Define a function to clear an attribute value for a Region axis.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "region.h"
-* MAKE_CLEAR_AXIS(attribute)
-
-* Class Membership:
-* Defined by the Region class.
-
-* Description:
-* This macro expands to an implementation of a private member function
-* of the form:
-*
-* static void Clear<Attribute>( AstFrame *this, int axis )
-*
-* that clears the value of a specified attribute for an axis of
-* the encapsulated FrameSet within a Region (this). This function is
-* intended to over-ride the astClear<Attribute> method inherited
-* from the Frame class.
-
-* Parameters:
-* attribute
-* Name of the attribute, as it appears in the function name.
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR_AXIS(attribute) \
-static void Clear##attribute( AstFrame *this_frame, int axis, int *status ) { \
-\
-/* Local Variables: */ \
- AstRegion *this; /* Pointer to the Region structure */ \
- char buf[100]; /* Buffer for attribute name */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Obtain a pointer to the Region structure. */ \
- this = (AstRegion *) this_frame; \
-\
-/* Validate the axis index supplied. */ \
- (void) astValidateAxis( this, axis, "astClear" #attribute ); \
-\
-/* We use the public astSetx method rather than the protected \
- astSet#attribute method so that the current Frame in the encapsulated \
- FrameSet will be re-mapped if necessary. Construct the attribute name. */ \
- sprintf( buf, "%s(%d)", #attribute, axis + 1 ); \
-\
-/* Obtain a pointer to the Region's encapsulated FrameSet and invoke its \
- astClear method. The protected astClear#attribute method is notused \
- since we want the current Frame of the encapsulated FrameSet to be \
- remapped if required. */ \
- astClear( this->frameset, buf ); \
-}
-
-/*
-* Name:
-* MAKE_GET
-
-* Purpose:
-* Define a function to get an attribute value for a Region.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "region.h"
-* MAKE_GET(attribute,type)
-
-* Class Membership:
-* Defined by the Region class.
-
-* Description:
-* This macro expands to an implementation of a private member function
-* of the form:
-*
-* static <type> Get<Attribute>( AstFrame *this )
-*
-* that gets the value of a specified attribute for the encapsulated
-* FrameSet of a Region (this). This function is intended to over-ride
-* the astGet<Attribute> method inherited from the Frame class.
-
-* Parameters:
-* attribute
-* Name of the attribute, as it appears in the function name.
-* type
-* The C type of the attribute.
-*/
-
-/* Define the macro. */
-#define MAKE_GET(attribute,type) \
-static type Get##attribute( AstFrame *this_frame, int *status ) { \
-\
-/* Local Variables: */ \
- AstRegion *this; /* Pointer to the Region structure */ \
- type result; /* Value to return */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return (type) 0; \
-\
-/* Obtain a pointer to the Region structure. */ \
- this = (AstRegion *) this_frame; \
-\
-/* Obtain a pointer to the encapsulated FrameSet and invoke its \
- astGet<Attribute> method. */ \
- result = astGet##attribute( this->frameset ); \
-\
-/* If an error occurred, clear the result value. */ \
- if ( !astOK ) result = (type) 0; \
-\
-/* Return the result. */ \
- return result; \
-}
-
-/*
-* Name:
-* MAKE_GET_AXIS
-
-* Purpose:
-* Define a function to get an attribute value for a Region axis.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "region.h"
-* MAKE_GET_AXIS(attribute,type)
-
-* Class Membership:
-* Defined by the Region class.
-
-* Description:
-* This macro expands to an implementation of a private member function
-* of the form:
-*
-* static <type> Get<Attribute>( AstFrame *this, int axis )
-*
-* that gets the value of a specified attribute for an axis of the
-* encapsulated FrameSet within a Region (this). This function is intended
-* to over-ride the astGet<Attribute> method inherited from the Frame
-* class.
-
-* Parameters:
-* attribute
-* Name of the attribute, as it appears in the function name.
-* type
-* The C type of the attribute.
-*/
-
-/* Define the macro. */
-#define MAKE_GET_AXIS(attribute,type) \
-static type Get##attribute( AstFrame *this_frame, int axis, int *status ) { \
-\
-/* Local Variables: */ \
- AstRegion *this; /* Pointer to the Region structure */ \
- type result; /* Value to return */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return (type) 0; \
-\
-/* Obtain a pointer to the Region structure. */ \
- this = (AstRegion *) this_frame; \
-\
-/* Validate the axis index supplied. */ \
- (void) astValidateAxis( this, axis, "astGet" #attribute ); \
-\
-/* Obtain a pointer to the Region's encapsulated FrameSet and invoke its \
- astGet<Attribute> method. */ \
- result = astGet##attribute( this->frameset, axis ); \
-\
-/* If an error occurred, clear the result value. */ \
- if ( !astOK ) result = (type) 0; \
-\
-/* Return the result. */ \
- return result; \
-}
-
-/*
-* Name:
-* MAKE_SET_SYSTEM
-
-* Purpose:
-* Define a function to set a System attribute value for a Region.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "region.h"
-* MAKE_SET_SYSTEM(attribute)
-
-* Class Membership:
-* Defined by the Region class.
-
-* Description:
-* This macro expands to an implementation of a private member function
-* of the form:
-*
-* static void Set<Attribute>( AstFrame *this, AstSystemType value )
-*
-* that sets the value of a specified attribute for the encapsulated
-* FrameSet of a Region (this). This function is intended to over-ride the
-* astSet<Attribute> method inherited from the Frame class.
-
-* Parameters:
-* attribute
-* Name of the attribute, as it appears in the function name.
-*/
-
-/* Define the macro. */
-#define MAKE_SET_SYSTEM(attribute) \
-static void Set##attribute( AstFrame *this_frame, AstSystemType value, int *status ) { \
-\
-/* Local Variables: */ \
- AstRegion *this; /* Pointer to the Region structure */ \
- const char *text; /* Pointer to system string */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Obtain a pointer to the Region structure. */ \
- this = (AstRegion *) this_frame; \
-\
-/* Convert the supplied value to a string using the astSystemString
- method of the current Frame in the encapsulated FrameSet. */ \
- text = astSystemString( this->frameset, value ); \
-\
-/* Set the value by invoking the public astSetC method on the encapusulated \
- FrameSet. This ensures that the current Frame of the encapsulated \
- FrameSet is re-mapped if necessary. */ \
- astSetC( this->frameset, #attribute, text ); \
-}
-
-/*
-* Name:
-* MAKE_SET
-
-* Purpose:
-* Define a function to set an attribute value for a Region.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "region.h"
-* MAKE_SET(attribute,type,x)
-
-* Class Membership:
-* Defined by the Region class.
-
-* Description:
-* This macro expands to an implementation of a private member function
-* of the form:
-*
-* static void Set<Attribute>( AstFrame *this, <type> value )
-*
-* that sets the value of a specified attribute for the encapsulated
-* FrameSet of a Region (this). This function is intended to over-ride the
-* astSet<Attribute> method inherited from the Frame class.
-
-* Parameters:
-* attribute
-* Name of the attribute, as it appears in the function name.
-* type
-* The C type of the attribute.
-* x
-* The single character code for the astSetx function for the given C
-* type.
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attribute,type,x) \
-static void Set##attribute( AstFrame *this_frame, type value, int *status ) { \
-\
-/* Local Variables: */ \
- AstRegion *this; /* Pointer to the Region structure */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Obtain a pointer to the Region structure. */ \
- this = (AstRegion *) this_frame; \
-\
-/* Set the value by invoking the public astSetx method on the encapusulated \
- FrameSet. This ensures that the current Frame of the encapsulated \
- FrameSet is re-mapped if necessary. */ \
- astSet##x( this->frameset, #attribute, value ); \
-}
-
-/*
-* Name:
-* MAKE_SET_AXIS
-
-* Purpose:
-* Define a function to set an attribute value for a Region axis.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "region.h"
-* MAKE_SET_AXIS(attribute,type,x)
-
-* Class Membership:
-* Defined by the Region class.
-
-* Description:
-* This macro expands to an implementation of a private member function
-* of the form:
-*
-* static void Set<Attribute>( AstFrame *this, int axis, <type> value )
-*
-* that sets the value of a specified attribute for an axis of the
-* encapsulated FrameSet within a Region (this). This function is intended
-* to over-ride the astSet<Attribute> method inherited from the Frame
-* class.
-
-* Parameters:
-* attribute
-* Name of the attribute, as it appears in the function name.
-* type
-* The C type of the attribute.
-* x
-* The single character code for the astSetx function for the given C
-* type.
-*/
-
-/* Define the macro. */
-#define MAKE_SET_AXIS(attribute,type,x) \
-static void Set##attribute( AstFrame *this_frame, int axis, type value, int *status ) { \
-\
-/* Local Variables: */ \
- AstRegion *this; /* Pointer to the Region structure */ \
- char buf[100]; /* Buffer for attribute name */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Obtain a pointer to the Region structure. */ \
- this = (AstRegion *) this_frame; \
-\
-/* Validate the axis index supplied. */ \
- (void) astValidateAxis( this, axis, "astSet" #attribute ); \
-\
-/* We use the public astSetx method rather than the protected \
- astSet#attribute method so that the current Frame in the encapsulated \
- FrameSet will be re-mapped if necessary. Construct the attribute name. */ \
- sprintf( buf, "%s(%d)", #attribute, axis + 1 ); \
-\
-/* Obtain a pointer to the Region's encapsulated FrameSet and invoke its \
- astSet<x> method. */ \
- astSet##x( this->frameset, buf, value ); \
-}
-
-/*
-* Name:
-* MAKE_TEST
-
-* Purpose:
-* Define a function to test if an attribute value is set for a Region.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "region.h"
-* MAKE_TEST(attribute)
-
-* Class Membership:
-* Defined by the Region class.
-
-* Description:
-* This macro expands to an implementation of a private member function
-* of the form:
-*
-* static int Test<Attribute>( AstFrame *this )
-*
-* that returns a boolean result (0 or 1) to indicate if the value
-* of a specified attribute for the encapsulated FrameSet within a
-* Region (this) is set. This function is intended to over-ride the
-* astTest<Attribute> method inherited from the Frame class.
-
-* Parameters:
-* attribute
-* Name of the attribute, as it appears in the function name.
-*/
-
-/* Define the macro. */
-#define MAKE_TEST(attribute) \
-static int Test##attribute( AstFrame *this_frame, int *status ) { \
-\
-/* Local Variables: */ \
- AstRegion *this; /* Pointer to Region structure */ \
- int result; /* Result to return */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return 0; \
-\
-/* Obtain a pointer to the Region structure. */ \
- this = (AstRegion *) this_frame; \
-\
-/* Obtain a pointer to the Region's encapsulated FrameSet and invoke its \
- astTest<Attribute> method. */ \
- result = astTest##attribute( this->frameset ); \
-\
-/* If an error occurred, clear the result value. */ \
- if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
- return result; \
-}
-
-/*
-* Name:
-* MAKE_TEST_AXIS
-
-* Purpose:
-* Define a function to test if an attribute value is set for a Region
-* axis.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "region.h"
-* MAKE_TEST_AXIS(attribute)
-
-* Class Membership:
-* Defined by the Region class.
-
-* Description:
-* This macro expands to an implementation of a private member function
-* of the form:
-*
-* static int Test<Attribute>( AstFrame *this, int axis )
-*
-* that returns a boolean result (0 or 1) to indicate if the value
-* of a specified attribute for an axis of the encapsulated FrameSet
-* within a Region (this) is set. This function is intended to over-ride
-* the astTest<Attribute> method inherited from the Frame class.
-
-* Parameters:
-* attribute
-* Name of the attribute, as it appears in the function name.
-*/
-
-/* Define the macro. */
-#define MAKE_TEST_AXIS(attribute) \
-static int Test##attribute( AstFrame *this_frame, int axis, int *status ) { \
-\
-/* Local Variables: */ \
- AstRegion *this; /* Pointer to the Region structure */ \
- int result; /* Value to return */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return 0; \
-\
-/* Obtain a pointer to the Region structure. */ \
- this = (AstRegion *) this_frame; \
-\
-/* Validate the axis index supplied. */ \
- (void) astValidateAxis( this, axis, "astTest" #attribute ); \
-\
-/* Obtain a pointer to the Region's encapsulated FrameSet and invoke its \
- astTest<Attribute> method. */ \
- result = astTest##attribute( this->frameset, axis ); \
-\
-/* If an error occurred, clear the result value. */ \
- if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
- return result; \
-}
-
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "mapping.h" /* Coordinate Mappings */
-#include "unitmap.h" /* Unit Mappings */
-#include "permmap.h" /* Coordinate permutation Mappings */
-#include "cmpmap.h" /* Compound Mappings */
-#include "frame.h" /* Parent Frame class */
-#include "frameset.h" /* Interconnected coordinate systems */
-#include "region.h" /* Interface definition for this class */
-#include "circle.h" /* Circular regions */
-#include "box.h" /* Box regions */
-#include "cmpregion.h" /* Compound regions */
-#include "ellipse.h" /* Elliptical regions */
-#include "pointset.h" /* Sets of points */
-#include "globals.h" /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <limits.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <math.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static int (* parent_getusedefs)( AstObject *, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->GetAttrib_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Region)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Region,Class_Init)
-#define class_vtab astGLOBAL(Region,Class_Vtab)
-#define getattrib_buff astGLOBAL(Region,GetAttrib_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-static char getattrib_buff[ 101 ];
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstRegionVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-static int MaskLD( AstRegion *, AstMapping *, int, int, const int[], const int ubnd[], long double [], long double, int * );
-#endif
-static int MaskB( AstRegion *, AstMapping *, int, int, const int[], const int[], signed char[], signed char, int * );
-static int MaskD( AstRegion *, AstMapping *, int, int, const int[], const int[], double[], double, int * );
-static int MaskF( AstRegion *, AstMapping *, int, int, const int[], const int[], float[], float, int * );
-static int MaskI( AstRegion *, AstMapping *, int, int, const int[], const int[], int[], int, int * );
-static int MaskL( AstRegion *, AstMapping *, int, int, const int[], const int[], long int[], long int, int * );
-static int MaskS( AstRegion *, AstMapping *, int, int, const int[], const int[], short int[], short int, int * );
-static int MaskUB( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned char[], unsigned char, int * );
-static int MaskUI( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned int[], unsigned int, int * );
-static int MaskUL( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned long int[], unsigned long int, int * );
-static int MaskUS( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned short int[], unsigned short int, int * );
-
-static AstAxis *GetAxis( AstFrame *, int, int * );
-static AstFrame *GetRegionFrame( AstRegion *, int * );
-static AstFrame *PickAxes( AstFrame *, int, const int[], AstMapping **, int * );
-static AstFrame *RegFrame( AstRegion *, int * );
-static AstFrameSet *Conv( AstFrameSet *, AstFrameSet *, int * );
-static AstFrameSet *Convert( AstFrame *, AstFrame *, const char *, int * );
-static AstFrameSet *ConvertX( AstFrame *, AstFrame *, const char *, int * );
-static AstFrameSet *FindFrame( AstFrame *, AstFrame *, const char *, int * );
-static AstFrameSet *GetRegFS( AstRegion *, int * );
-static AstLineDef *LineDef( AstFrame *, const double[2], const double[2], int * );
-static AstMapping *RegMapping( AstRegion *, int * );
-static AstMapping *RemoveRegions( AstMapping *, int * );
-static AstMapping *Simplify( AstMapping *, int * );
-static AstObject *Cast( AstObject *, AstObject *, int * );
-static AstPointSet *BTransform( AstRegion *, AstPointSet *, int, AstPointSet *, int * );
-static AstPointSet *BndBaseMesh( AstRegion *, double *, double *, int * );
-static AstPointSet *BndMesh( AstRegion *, double *, double *, int * );
-static AstPointSet *GetSubMesh( int *, AstPointSet *, int * );
-static AstPointSet *RegBaseGrid( AstRegion *, int * );
-static AstPointSet *RegBaseMesh( AstRegion *, int * );
-static AstPointSet *RegGrid( AstRegion *, int * );
-static AstPointSet *RegMesh( AstRegion *, int * );
-static AstPointSet *RegTransform( AstRegion *, AstPointSet *, int, AstPointSet *, AstFrame **, int * );
-static AstPointSet *ResolvePoints( AstFrame *, const double [], const double [], AstPointSet *, AstPointSet *, int * );
-static AstRegion *MapRegion( AstRegion *, AstMapping *, AstFrame *, int * );
-static AstRegion *RegBasePick( AstRegion *, int, const int *, int * );
-static AstSystemType SystemCode( AstFrame *, const char *, int * );
-static AstSystemType ValidateSystem( AstFrame *, AstSystemType, const char *, int * );
-static const char *Abbrev( AstFrame *, int, const char *, const char *, const char *, int * );
-static const char *Format( AstFrame *, int, double, int * );
-static const char *SystemString( AstFrame *, AstSystemType, int * );
-static const int *GetPerm( AstFrame *, int * );
-static double *RegCentre( AstRegion *, double *, double **, int, int, int * );
-static double Angle( AstFrame *, const double[], const double[], const double[], int * );
-static double AxAngle( AstFrame *, const double[], const double[], int, int * );
-static double AxDistance( AstFrame *, int, double, double, int * );
-static double AxOffset( AstFrame *, int, double, double, int * );
-static double Distance( AstFrame *, const double[], const double[], int * );
-static double Gap( AstFrame *, int, double, int *, int * );
-static double Offset2( AstFrame *, const double[2], double, double, double[2], int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetNaxes( AstFrame *, int * );
-static int GetObjSize( AstObject *, int * );
-static int GetUseDefs( AstObject *, int * );
-static int IsUnitFrame( AstFrame *, int * );
-static int LineContains( AstFrame *, AstLineDef *, int, double *, int * );
-static int LineCrossing( AstFrame *, AstLineDef *, AstLineDef *, double **, int * );
-static int Match( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int Overlap( AstRegion *, AstRegion *, int * );
-static int OverlapX( AstRegion *, AstRegion *, int * );
-static int RegDummyFS( AstRegion *, int * );
-static int RegPins( AstRegion *, AstPointSet *, AstRegion *, int **, int * );
-static int SubFrame( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int RegTrace( AstRegion *, int, double *, double **, int * );
-static int Unformat( AstFrame *, int, const char *, double *, int * );
-static int ValidateAxis( AstFrame *, int, const char *, int * );
-static void CheckPerm( AstFrame *, const int *, const char *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void GetRegionBounds( AstRegion *, double *, double *, int * );
-static void GetRegionBounds2( AstRegion *, double *, double *, int * );
-static void GetRegionPoints( AstRegion *, int, int, int *, double *, int * );
-static void Intersect( AstFrame *, const double[2], const double[2], const double[2], const double[2], double[2], int * );
-static void LineOffset( AstFrame *, AstLineDef *, double, double, double[2], int * );
-static void MatchAxes( AstFrame *, AstFrame *, int *, int * );
-static void MatchAxesX( AstFrame *, AstFrame *, int *, int * );
-static void Negate( AstRegion *, int * );
-static void Norm( AstFrame *, double[], int * );
-static void NormBox( AstFrame *, double[], double[], AstMapping *, int * );
-static void Offset( AstFrame *, const double[], const double[], double, double[], int * );
-static void Overlay( AstFrame *, const int *, AstFrame *, int * );
-static void PermAxes( AstFrame *, const int[], int * );
-static void RegBaseBox( AstRegion *, double *, double *, int * );
-static void RegBaseBox2( AstRegion *, double *, double *, int * );
-static void RegClearAttrib( AstRegion *, const char *, char **, int * );
-static void RegOverlay( AstRegion *, AstRegion *, int, int * );
-static void RegSetAttrib( AstRegion *, const char *, char **, int * );
-static void ReportPoints( AstMapping *, int, AstPointSet *, AstPointSet *, int * );
-static void ResetCache( AstRegion *, int * );
-static void Resolve( AstFrame *, const double [], const double [], const double [], double [], double *, double *, int * );
-static void SetAxis( AstFrame *, int, AstAxis *, int * );
-static void SetRegFS( AstRegion *, AstFrame *, int * );
-static void ShowMesh( AstRegion *, int, const char *, int * );
-static void ValidateAxisSelection( AstFrame *, int, const int *, const char *, int * );
-
-static int GetBounded( AstRegion *, int * );
-static AstRegion *GetDefUnc( AstRegion *, int * );
-
-static AstRegion *GetUncFrm( AstRegion *, int, int * );
-static AstRegion *GetUnc( AstRegion *, int, int * );
-static int TestUnc( AstRegion *, int * );
-static void ClearUnc( AstRegion *, int * );
-static void SetUnc( AstRegion *, AstRegion *, int * );
-
-static const char *GetDomain( AstFrame *, int * );
-static int TestDomain( AstFrame *, int * );
-static void ClearDomain( AstFrame *, int * );
-static void SetDomain( AstFrame *, const char *, int * );
-
-static const char *GetFormat( AstFrame *, int, int * );
-static int TestFormat( AstFrame *, int, int * );
-static void ClearFormat( AstFrame *, int, int * );
-static void SetFormat( AstFrame *, int, const char *, int * );
-
-static const char *GetLabel( AstFrame *, int, int * );
-static int TestLabel( AstFrame *, int, int * );
-static void ClearLabel( AstFrame *, int, int * );
-static void SetLabel( AstFrame *, int, const char *, int * );
-
-static const char *GetSymbol( AstFrame *, int, int * );
-static int TestSymbol( AstFrame *, int, int * );
-static void ClearSymbol( AstFrame *, int, int * );
-static void SetSymbol( AstFrame *, int, const char *, int * );
-
-static const char *GetTitle( AstFrame *, int * );
-static void SetTitle( AstFrame *, const char *, int * );
-static void ClearTitle( AstFrame *, int * );
-static int TestTitle( AstFrame *, int * );
-
-static const char *GetUnit( AstFrame *, int, int * );
-static int TestUnit( AstFrame *, int, int * );
-static void ClearUnit( AstFrame *, int, int * );
-static void SetUnit( AstFrame *, int, const char *, int * );
-
-static int GetDigits( AstFrame *, int * );
-static int TestDigits( AstFrame *, int * );
-static void ClearDigits( AstFrame *, int * );
-static void SetDigits( AstFrame *, int, int * );
-
-static int GetDirection( AstFrame *, int, int * );
-static int TestDirection( AstFrame *, int, int * );
-static void ClearDirection( AstFrame *, int, int * );
-static void SetDirection( AstFrame *, int, int, int * );
-
-static int GetActiveUnit( AstFrame *, int * );
-static int TestActiveUnit( AstFrame *, int * );
-static void SetActiveUnit( AstFrame *, int, int * );
-
-static int GetMatchEnd( AstFrame *, int * );
-static int TestMatchEnd( AstFrame *, int * );
-static void ClearMatchEnd( AstFrame *, int * );
-static void SetMatchEnd( AstFrame *, int, int * );
-
-static int GetMaxAxes( AstFrame *, int * );
-static int TestMaxAxes( AstFrame *, int * );
-static void ClearMaxAxes( AstFrame *, int * );
-static void SetMaxAxes( AstFrame *, int, int * );
-
-static int GetMinAxes( AstFrame *, int * );
-static int TestMinAxes( AstFrame *, int * );
-static void ClearMinAxes( AstFrame *, int * );
-static void SetMinAxes( AstFrame *, int, int * );
-
-static int GetPermute( AstFrame *, int * );
-static int TestPermute( AstFrame *, int * );
-static void ClearPermute( AstFrame *, int * );
-static void SetPermute( AstFrame *, int, int * );
-
-static int GetPreserveAxes( AstFrame *, int * );
-static int TestPreserveAxes( AstFrame *, int * );
-static void ClearPreserveAxes( AstFrame *, int * );
-static void SetPreserveAxes( AstFrame *, int, int * );
-
-static double GetBottom( AstFrame *, int, int * );
-static int TestBottom( AstFrame *, int, int * );
-static void ClearBottom( AstFrame *, int, int * );
-static void SetBottom( AstFrame *, int, double, int * );
-
-static double GetTop( AstFrame *, int, int * );
-static int TestTop( AstFrame *, int, int * );
-static void ClearTop( AstFrame *, int, int * );
-static void SetTop( AstFrame *, int, double, int * );
-
-static double GetEpoch( AstFrame *, int * );
-static int TestEpoch( AstFrame *, int * );
-static void ClearEpoch( AstFrame *, int * );
-static void SetEpoch( AstFrame *, double, int * );
-
-static double GetObsAlt( AstFrame *, int * );
-static int TestObsAlt( AstFrame *, int * );
-static void ClearObsAlt( AstFrame *, int * );
-static void SetObsAlt( AstFrame *, double, int * );
-
-static double GetObsLat( AstFrame *, int * );
-static int TestObsLat( AstFrame *, int * );
-static void ClearObsLat( AstFrame *, int * );
-static void SetObsLat( AstFrame *, double, int * );
-
-static double GetObsLon( AstFrame *, int * );
-static int TestObsLon( AstFrame *, int * );
-static void ClearObsLon( AstFrame *, int * );
-static void SetObsLon( AstFrame *, double, int * );
-
-static AstSystemType GetSystem( AstFrame *, int * );
-static int TestSystem( AstFrame *, int * );
-static void ClearSystem( AstFrame *, int * );
-static void SetSystem( AstFrame *, AstSystemType, int * );
-
-static AstSystemType GetAlignSystem( AstFrame *, int * );
-static int TestAlignSystem( AstFrame *, int * );
-static void ClearAlignSystem( AstFrame *, int * );
-static void SetAlignSystem( AstFrame *, AstSystemType, int * );
-
-static const char *GetAttrib( AstObject *, const char *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-
-static int GetNegated( AstRegion *, int * );
-static int TestNegated( AstRegion *, int * );
-static void ClearNegated( AstRegion *, int * );
-static void SetNegated( AstRegion *, int, int * );
-
-static int GetClosed( AstRegion *, int * );
-static int TestClosed( AstRegion *, int * );
-static void ClearClosed( AstRegion *, int * );
-static void SetClosed( AstRegion *, int, int * );
-
-static int GetMeshSize( AstRegion *, int * );
-static int TestMeshSize( AstRegion *, int * );
-static void ClearMeshSize( AstRegion *, int * );
-static void SetMeshSize( AstRegion *, int, int * );
-
-static double GetFillFactor( AstRegion *, int * );
-static int TestFillFactor( AstRegion *, int * );
-static void ClearFillFactor( AstRegion *, int * );
-static void SetFillFactor( AstRegion *, double, int * );
-
-static int GetRegionFS( AstRegion *, int * );
-static int TestRegionFS( AstRegion *, int * );
-static void ClearRegionFS( AstRegion *, int * );
-static void SetRegionFS( AstRegion *, int, int * );
-
-static int GetAdaptive( AstRegion *, int * );
-static int TestAdaptive( AstRegion *, int * );
-static void ClearAdaptive( AstRegion *, int * );
-static void SetAdaptive( AstRegion *, int, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-/* Member functions. */
-/* ================= */
-
-static const char *Abbrev( AstFrame *this_frame, int axis, const char *fmt,
- const char *str1, const char *str2, int *status ) {
-/*
-* Name:
-* Abbrev
-
-* Purpose:
-* Abbreviate a formatted Region axis value by skipping leading fields.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* const char *Abbrev( AstFrame *this, int axis, const char *fmt,
-* const char *str1, const char *str2, int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astAbbrev
-* method inherited from the Frame class).
-
-* Description:
-* This function compares two Region axis values that have been
-* formatted (using astFormat) and determines if they have any
-* redundant leading fields (i.e. leading fields in common which
-* can be suppressed when tabulating the values or plotting them on
-* the axis of a graph).
-
-* Parameters:
-* this
-* Pointer to the Region
-* axis
-* The number of the Region axis for which the values have
-* been formatted (axis numbering starts at zero for the first
-* axis).
-* fmt
-* Pointer to a constant null-terminated string containing the
-* format specification used to format the two values.
-* str1
-* Pointer to a constant null-terminated string containing the
-* first formatted value.
-* str1
-* Pointer to a constant null-terminated string containing the
-* second formatted value.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer into the "str2" string which locates the first
-* character in the first field that differs between the two
-* formatted values.
-*
-* If the two values have no leading fields in common, the returned
-* value will point at the start of string "str2". If the two
-* values are equal, it will point at the terminating null at the
-* end of this string.
-
-* Notes:
-* - This function assumes that the format specification used was
-* the same when both values were formatted and that they both
-* apply to the same Region axis.
-* - A pointer to the start of "str2" will be returned if this
-* function is invoked with the global error status set, or if it
-* should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstRegion *this; /* Pointer to the Region structure */
- const char *result; /* Pointer value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return str2;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_frame;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis, "astAbbrev" );
-
-/* Obtain a pointer to the Region's current Frame and invoke this
- Frame's astAbbrev method to perform the processing. Annul the Frame
- pointer afterwards. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
- result = astAbbrev( fr, axis, fmt, str1, str2 );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result. */
- if ( !astOK ) result = str2;
-
-/* Return the result. */
- return result;
-}
-
-static double Angle( AstFrame *this_frame, const double a[],
- const double b[], const double c[], int *status ) {
-/*
-* Name:
-* Angle
-
-* Purpose:
-* Calculate the angle subtended by two points at a third point.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* double Angle( AstFrame *this, const double a[], const double b[],
-* const double c[], int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astAngle
-* method inherited from the Frame class).
-
-* Description:
-* This function finds the angle at point B between the line joining points
-* A and B, and the line joining points C and B. These lines will in fact be
-* geodesic curves appropriate to the Frame in use. For instance, in
-* SkyFrame, they will be great circles.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* a
-* An array of double, with one element for each Frame axis
-* (Naxes attribute) containing the coordinates of the first point.
-* b
-* An array of double, with one element for each Frame axis
-* (Naxes attribute) containing the coordinates of the second point.
-* c
-* An array of double, with one element for each Frame axis
-* (Naxes attribute) containing the coordinates of the third point.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* astAngle
-* The angle in radians, from the line AB to the line CB. If the
-* Frame is 2-dimensional, it will be in the range $\pm \pi$,
-* and positive rotation is in the same sense as rotation from
-* the positive direction of axis 2 to the positive direction of
-* axis 1. If the Frame has more than 2 axes, a positive value will
-* always be returned in the range zero to $\pi$.
-
-* Notes:
-* - A value of AST__BAD will also be returned if points A and B are
-* co-incident, or if points B and C are co-incident.
-* - A value of AST__BAD will also be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstRegion *this; /* Pointer to the Region structure */
- double result; /* Value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke this
- Frame's astAngle method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
- result = astAngle( fr, a, b, c );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result. */
- if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
- return result;
-}
-
-static double AxAngle( AstFrame *this_frame, const double a[], const double b[], int axis, int *status ) {
-/*
-* Name:
-* AxAngle
-
-* Purpose:
-* Returns the angle from an axis, to a line through two points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* double AxAngle( AstFrame *this, const double a[], const double b[], int axis, int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astAxAngle
-* method inherited from the Frame class).
-
-* Description:
-* This function finds the angle, as seen from point A, between the positive
-* direction of a specified axis, and the geodesic curve joining point
-* A to point B.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* a
-* An array of double, with one element for each Frame axis
-* (Naxes attribute) containing the coordinates of the first point.
-* b
-* An array of double, with one element for each Frame axis
-* (Naxes attribute) containing the coordinates of the second point.
-* axis
-* The number of the Frame axis from which the angle is to be
-* measured (one-based)
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The angle in radians, from the positive direction of the
-* specified axis, to the line AB. If the Frame is 2-dimensional,
-* it will be in the range $\pm \pi$, and positive rotation is in
-* the same sense as rotation from the positive direction of axis 2
-* to the positive direction of axis 1. If the Frame has more than 2
-* axes, a positive value will always be returned in the range zero
-* to $\pi$.
-
-* Notes:
-* - The geodesic curve used by this function is the path of
-* shortest distance between two points, as defined by the
-* astDistance function.
-* - This function will return "bad" coordinate values (AST__BAD)
-* if any of the input coordinates has this value, or if the require
-* position angle is undefined.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstRegion *this; /* Pointer to the Region structure */
- double result; /* Value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstRegion *) this_frame;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis - 1, "astAxAngle" );
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke the
- astAxAngle method for this Frame. Annul the Frame pointer
- afterwards. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
- result = astAxAngle( fr, a, b, axis );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
- return result;
-}
-
-static double AxDistance( AstFrame *this_frame, int axis, double v1, double v2, int *status ) {
-/*
-* Name:
-* AxDistance
-
-* Purpose:
-* Find the distance between two axis values.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* double AxDistance( AstFrame *this, int axis, double v1, double v2, int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astAxDistance
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a signed value representing the axis increment
-* from axis value v1 to axis value v2.
-*
-* For a simple Frame, this is a trivial operation returning the
-* difference between the two axis values. But for other derived classes
-* of Frame (such as a SkyFrame) this is not the case.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* axis
-* The index of the axis to which the supplied values refer. The
-* first axis has index 1.
-* v1
-* The first axis value.
-* v2
-* The second axis value.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The distance between the two axis values.
-
-* Notes:
-* - This function will return a "bad" result value (AST__BAD) if
-* any of the input vaues has this value.
-* - A "bad" value will also be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstRegion *this; /* Pointer to the Region structure */
- double result; /* Value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstRegion *) this_frame;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis - 1, "astAxDistance" );
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke the
- astAxDistance method for this Frame. Annul the Frame pointer
- afterwards. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
- result = astAxDistance( fr, axis, v1, v2 );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
- return result;
-}
-
-static double AxOffset( AstFrame *this_frame, int axis, double v1, double dist, int *status ) {
-/*
-* Name:
-* AxOffset
-
-* Purpose:
-* Add an increment onto a supplied axis value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* double AxOffset( AstFrame *this, int axis, double v1, double dist, int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astAxOffset
-* method inherited from the Frame class).
-
-* Description:
-* This function returns an axis value formed by adding a signed axis
-* increment onto a supplied axis value.
-*
-* For a simple Frame, this is a trivial operation returning the
-* sum of the two supplied values. But for other derived classes
-* of Frame (such as a SkyFrame) this is not the case.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* axis
-* The index of the axis to which the supplied values refer. The
-* first axis has index 1.
-* v1
-* The original axis value.
-* dist
-* The axis increment to add to the original axis value.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The incremented axis value.
-
-* Notes:
-* - This function will return a "bad" result value (AST__BAD) if
-* any of the input vaues has this value.
-* - A "bad" value will also be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstRegion *this; /* Pointer to the Region structure */
- double result; /* Value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstRegion *) this_frame;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis - 1, "astAxOffset" );
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke the
- astAxOffset method for this Frame. Annul the Frame pointer
- afterwards. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
- result = astAxOffset( fr, axis, v1, dist );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
- return result;
-}
-
-static AstPointSet *BndBaseMesh( AstRegion *this, double *lbnd, double *ubnd, int *status ){
-/*
-*+
-* Name:
-* astBndBaseMesh
-
-* Purpose:
-* Return a PointSet containing points spread around part of the boundary
-* of a Region, in the base Frame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* AstPointSet *astBndBaseMesh( AstRegion *this, double *lbnd, double *ubnd )
-
-* Class Membership:
-* Region virtual function.
-
-* Description:
-* This function returns a PointSet containing a set of points on the
-* boundary of the intersection between the supplied Region and the
-* supplied (current Frame) box. The mesh points refer to the base
-* Frame. If the boundary of the supplied Region does not intersect the
-* supplied box, then a PointSet containing a single bad point is
-* returned.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* lbnd
-* Pointer to an array holding the lower limits of the axis values
-* within the required box. Defined in the current Frame of the Region.
-* ubnd
-* Pointer to an array holding the upper limits of the axis values
-* within the required box. Defined in the current Frame of the Region.
-
-* Returned Value:
-* Pointer to the PointSet holding the base Frame mesh. The axis values
-* in this PointSet will have associated accuracies derived from the
-* uncertainties which were supplied when the Region was created.
-*
-* If the Region does not intersect the supplied box, the returned
-* PointSet will contain a single point with a value of AST__BAD on
-* every axis.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstBox *box;
- AstCmpRegion *cmpreg;
- AstPointSet *result;
- double **ptr;
- int ic;
- int nc;
-
-/* Check the local error status. */
- if ( !astOK ) return NULL;
-
-/* Form a Box describing the required box. */
- box = astBox( this, 1, lbnd, ubnd, NULL, "", status );
-
-/* Check there is partial overlap between the Regions.*/
- if( astOverlap( this, box ) > 3 ) {
-
-/* Form a CmpRegion representing the intersection between the supplied
- Region and the above box. */
- cmpreg = astCmpRegion( this, box, AST__AND, "", status );
-
-/* Get the boundary mesh. */
- result = astRegBaseMesh( cmpreg );
-
-/* Free resources. */
- cmpreg = astAnnul( cmpreg );
-
-/* If the boundary of the supplied Region does not intersect the box,
- return a PointSet containing a single bad position. */
- } else {
- nc = astGetNin( this->frameset );
- result = astPointSet( 1, nc, "", status );
- ptr = astGetPoints( result );
- if( ptr ) {
- for( ic = 0; ic < nc; ic++ ) ptr[ ic ][ 0 ] = AST__BAD;
- }
- }
-
-/* Free resources. */
- box = astAnnul( box );
-
-/* Return NULL if an error occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the required pointer. */
- return result;
-}
-
-static AstPointSet *BndMesh( AstRegion *this, double *lbnd, double *ubnd, int *status ){
-/*
-*+
-* Name:
-* astBndMesh
-
-* Purpose:
-* Return a PointSet containing points spread around part of the boundary
-* of a Region, in the current Frame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* AstPointSet *astBndMesh( AstRegion *this, double *lbnd, double *ubnd )
-
-* Class Membership:
-* Region virtual function.
-
-* Description:
-* This function returns a PointSet containing a set of points on the
-* boundary of the intersection between the supplied Region and the
-* supplied box. The points refer to the current Frame of the
-* encapsulated FrameSet. If the boundary of the supplied Region does
-* not intersect the supplied box, then a PointSet containing a single
-* bad point is returned.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* lbnd
-* Pointer to an array holding the lower limits of the axis values
-* within the required box. Defined in the current Frame of the Region.
-* ubnd
-* Pointer to an array holding the upper limits of the axis values
-* within the required box. Defined in the current base Frame of the
-* Region.
-
-* Returned Value:
-* Pointer to the PointSet. The axis values in this PointSet will have
-* associated accuracies derived from the uncertainties which were
-* supplied when the Region was created.
-*
-* If the Region does not intersect the supplied box, the returned
-* PointSet will contain a single point with a value of AST__BAD on
-* every axis.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstMapping *map;
- AstPointSet *ps1;
- AstPointSet *result;
-
-/* Initialise */
- result = NULL;
-
-/* Check the local error status. */
- if ( !astOK ) return result;
-
-/* Get the current->base Mapping from the Region. */
- map = astGetMapping( this->frameset, AST__CURRENT, AST__BASE );
-
-/* Use astBndBaseMesh to get a mesh of base Frame points within this base
- Frame bounding box. */
- ps1 = astBndBaseMesh( this, lbnd, ubnd );
-
-/* Transform it into the current Frame. */
- if( ps1 ) result = astTransform( map, ps1, 0, NULL );
-
-/* Free resources. */
- map = astAnnul( map );
- ps1 = astAnnul( ps1 );
-
-/* Return NULL if an error occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the required pointer. */
- return result;
-}
-
-static AstPointSet *BTransform( AstRegion *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-*+
-* Name:
-* astBTransform
-
-* Purpose:
-* Use a Region to transform a set of points in the base Frame.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "circle.h"
-* AstPointSet *astBTransform( AstRegion *this, AstPointSet *in,
- int forward, AstPointSet *out )
-
-* Class Membership:
-* Region member function
-
-* Description:
-* This function takes a Region and a set of points within the base
-* Frame of the Region, and transforms the points by setting axis values
-* to AST__BAD for all points which are outside the region. Points inside
-* the region are copied unchanged from input to output.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - This is identical to the astTransform method for a Region except
-* that the supplied and returned points refer to the base Frame of
-* the Region, rather than the current Frame.
-*-
-*/
-
-/* Local Variables: */
- AstPointSet *result; /* Pointer to output PointSet */
- int old; /* Origial value of "nomap" flag */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Save the current value of the "nomap" flag for this Region,and then
- set it. Doing this tells the astRegMapping function (called by
- astRegTransform) to assume a unit map connects base and current Frame. */
- old = this->nomap;
- this->nomap = 1;
-
-/* Invoke the usual astTransform method. The above setting of the "nomap"
- flag will cause the astTransform method to treat the base Frame as the
- current Frame. */
- result = astTransform( this, in, forward, out );
-
-/* Reset the "nomap" flag. */
- this->nomap = old;
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-static AstObject *Cast( AstObject *this_object, AstObject *obj, int *status ) {
-/*
-* Name:
-* Cast
-
-* Purpose:
-* Cast an Object into an instance of a sub-class.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* AstObject *Cast( AstObject *this, AstObject *obj, int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astCast
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a deep copy of an ancestral component of the
-* supplied object. The required class of the ancestral component is
-* specified by another object. Specifically, if "this" and "new" are
-* of the same class, a copy of "this" is returned. If "this" is an
-* instance of a subclass of "obj", then a copy of the component
-* of "this" that matches the class of "obj" is returned. Otherwise,
-* a NULL pointer is returned without error.
-
-* Parameters:
-* this
-* Pointer to the Object to be cast.
-* obj
-* Pointer to an Object that defines the class of the returned Object.
-* The returned Object will be of the same class as "obj".
-
-* Returned Value:
-* A pointer to the new Object. NULL if "this" is not a sub-class of
-* "obj", or if an error occurs.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables; */
- AstFrame *cfrm;
- AstObject *new;
- astDECLARE_GLOBALS
- int generation_gap;
-
-/* Initialise */
- new = NULL;
-
-/* Check inherited status */
- if( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* See how many steps up the class inheritance ladder it is from "obj"
- to this class (Region). A positive value is returned if Region is
- a sub-class of "obj". A negative value is returned if "obj" is a
- sub-class of Region. Zero is returned if "obj" is a Region.
- AST__COUSIN is returned if "obj" is not on the same line of descent
- as Region. */
- generation_gap = astClassCompare( (AstObjectVtab *) &class_vtab,
- astVTAB( obj ) );
-
-/* If "obj" is a Region or a sub-class of Region, we can cast by
- truncating the vtab for "this" so that it matches the vtab of "obJ",
- and then taking a deep copy of "this". */
- if( generation_gap <= 0 && generation_gap != AST__COUSIN ) {
- new = astCastCopy( this_object, obj );
-
-/* If "obj" is not a Region or a sub-class of Region (e.g. a Frame or
- some sub-class of Frame), we attempt to cast the current Frame of the
- encapsulated FrameSet into the class indicated by "obj". */
- } else {
- cfrm = astGetFrame( ((AstRegion *) this_object)->frameset, AST__CURRENT );
- new = astCast( cfrm, obj );
- cfrm = astAnnul( cfrm );
- }
-
-/* Return the new pointer. */
- return new;
-}
-
-static void CheckPerm( AstFrame *this_frame, const int *perm, const char *method, int *status ) {
-/*
-* Name:
-* CheckPerm
-
-* Purpose:
-* Check that an array contains a valid permutation.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* void CheckPerm( AstFrame *this, const int *perm, const char *method, int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astCheckPerm
-* method inherited from the Frame class).
-
-* Description:
-* This function checks the validity of a permutation array that
-* will be used to permute the order of a Frame's axes. If the
-* permutation specified by the array is not valid, an error is
-* reported and the global error status is set. Otherwise, the
-* function returns without further action.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* perm
-* Pointer to an array of integers with the same number of
-* elements as there are axes in the Frame. For each axis, the
-* corresponding integer gives the (zero based) axis index to be
-* used to identify the information for that axis (using the
-* un-permuted axis numbering). To be valid, the integers in
-* this array should therefore all lie in the range zero to
-* (naxes-1) inclusive, where "naxes" is the number of Frame
-* axes, and each value should occur exactly once.
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function
-* to validate a permutation array. This method name is used
-* solely for constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - Error messages issued by this function refer to the external
-* (public) numbering system used for axes (which is one-based),
-* whereas zero-based axis indices are used internally.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstRegion *this; /* Pointer to the Region structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke this
- Frame's astCheckPerm method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
- astCheckPerm( fr, perm, method );
- fr = astAnnul( fr );
-
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Region member function (over-rides the astClearAttrib protected
-* method inherited from the Frame class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* Region, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstRegion *this; /* Pointer to the Region structure */
- int len; /* Length of attrib string */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_object;
-
-/* Obtain the length of the "attrib" string. */
- len = strlen( attrib );
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* We first handle attributes that apply to the Region as a whole
- (rather than to the encapsulated FrameSet). */
-
-/* Negated */
-/* ------- */
- if ( !strcmp( attrib, "negated" ) ) {
- astClearNegated( this );
-
-/* Closed */
-/* ------ */
- } else if ( !strcmp( attrib, "closed" ) ) {
- astClearClosed( this );
-
-/* FillFactor */
-/* ---------- */
- } else if ( !strcmp( attrib, "fillfactor" ) ) {
- astClearFillFactor( this );
-
-/* MeshSize */
-/* -------- */
- } else if ( !strcmp( attrib, "meshsize" ) ) {
- astClearMeshSize( this );
-
-/* Adaptive */
-/* -------- */
- } else if ( !strcmp( attrib, "adaptive" ) ) {
- astClearAdaptive( this );
-
-
-/* We now check for atttributes of superclasses which apply to the Region
- as a whole. We do not want to pass these on to the encapsulated FrameSet. */
-
-/* ID. */
-/* --- */
- } else if ( !strcmp( attrib, "id" ) ) {
- astClearID( this );
-
-/* Ident. */
-/* ------ */
- } else if ( !strcmp( attrib, "ident" ) ) {
- astClearIdent( this );
-
-/* Invert. */
-/* ------- */
- } else if ( !strcmp( attrib, "invert" ) ) {
- astClearInvert( this );
-
-/* Report. */
-/* ------- */
- } else if ( !strcmp( attrib, "report" ) ) {
- astClearReport( this );
-
-
-/* If the name was not recognised, test if it matches any of the
- read-only attributes of this class (including those of all superclasses).
- If it does, then report an error. */
- } else if ( !strcmp( attrib, "class" ) ||
- !strcmp( attrib, "nin" ) ||
- !strcmp( attrib, "nobject" ) ||
- !strcmp( attrib, "nout" ) ||
- !strcmp( attrib, "bounded" ) ||
- !strcmp( attrib, "refcount" ) ||
- !strcmp( attrib, "tranforward" ) ||
- !strcmp( attrib, "traninverse" ) ) {
- astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
- "value for a %s.", status, attrib, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Pass unrecognised attributes on to the Region's encapsulated FrameSet for
- further interpretation. Do not pass on FrameSet attributes since we
- pretend to the outside world that the encapsulated FrameSet is actually a
- Frame. */
- } else if ( strcmp( attrib, "base" ) &&
- strcmp( attrib, "current" ) &&
- strcmp( attrib, "nframe" ) ) {
-
-/* If the Region is to adapt to coordinate system chanmges, use the public
- astClear method so that the current Frame in the encapsulated FrameSet will
- be re-mapped if the attribute changes require it. */
- if( astGetAdaptive( this ) ) {
- astClear( this->frameset, attrib );
-
-/* If the Region is not to adapt to coordinate system chanmges, use the
- astRegSetAttrib method which assigns the attribute setting to both
- current and base Frames in the FrameSet without causing any remapping to
- be performed. */
- } else {
- astRegClearAttrib( this, attrib, NULL );
- }
- }
-}
-
-static AstFrameSet *Conv( AstFrameSet *from, AstFrameSet *to, int *status ){
-/*
-* Name:
-* Conv
-
-* Purpose:
-* Find Mapping between Frames
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* AstFrameSet *Conv( AstFrameSet *from, AstFrameSet *to, int *status );
-
-* Class Membership:
-* Region member function
-
-* Description:
-* This function provides a convenient interface for astConvert.
-* It is like astConvert except it does not alter the base Frames of
-* the supplied FrameSets and does not require a Domain list.
-
-* Parameters:
-* from
-* Pointer to the source FrameSet.
-* to
-* Pointer to the source FrameSet.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The conversion FrameSet (see astConvert).
-
-*/
-
-/* Local Variables: */
- AstFrameSet *result; /* FrameSet to return */
- int from_base; /* Index of original base Frame in "from" */
- int to_base; /* Index of original base Frame in "to" */
-
-/* Check the global error status. */
- if( !astOK ) return NULL;
-
-/* Note the indices of the base Frames in the FrameSets. */
- to_base = astGetBase( to );
- from_base = astGetBase( from );
-
-/* Invoke astConvert. */
- result = astConvert( from, to, "" );
-
-/* Re-instate original base Frames. */
- astSetBase( to, to_base );
- astSetBase( from, from_base );
-
-/* Return the result. */
- return result;
-}
-
-static AstFrameSet *Convert( AstFrame *from, AstFrame *to,
- const char *domainlist, int *status ) {
-/*
-* Name:
-* Convert
-
-* Purpose:
-* Determine how to convert between two coordinate systems.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* AstFrameSet *Convert( AstFrame *from, AstFrame *to,
-* const char *domainlist, int *status )
-
-* Class Membership:
-* Region member function (over-rides the public astConvert
-* method inherited fromm the Frame class).
-
-* Description:
-* This function compares two Regions and determines whether it
-* is possible to convert between the coordinate systems which
-* their current Frames represent. If conversion is possible, it
-* returns a FrameSet which describes the conversion and which may
-* be used (as a Mapping) to transform coordinate values in either
-* direction.
-
-* Parameters:
-* from
-* Pointer to a Region whose current Frame represents the
-* "source" coordinate system. Note that the Base attribute of
-* the Region may be modified by this function.
-* to
-* Pointer to a Region whose current Frame represents the
-* "destination" coordinate system. Note that the Base
-* attribute of the Region may be modified by this function.
-* domainlist
-* Pointer to a null-terminated character string containing a
-* comma-separated list of Frame domains. This may be used to
-* define a priority order for the different intermediate
-* coordinate systems that might be used to perform the
-* conversion.
-*
-* The function will first try to obtain a conversion by making
-* use only of intermediate Frames whose Domain attribute
-* matches the first domain in this list. If this fails, the
-* second domain in the list will be used, and so on, until
-* conversion is achieved. A blank domain (e.g. two consecutive
-* commas) indicates that all Frames should be considered,
-* regardless of their Domain attributes. The list is
-* case-insensitive and all white space is ignored.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If the requested coordinate conversion is possible, the
-* function returns a pointer to a FrameSet which describes the
-* conversion. Otherwise, a null Object pointer (AST__NULL) is
-* returned without error.
-*
-* If a FrameSet is returned, it will contain two Frames. Frame
-* number 1 (its base Frame) will describe the source coordinate
-* system, corresponding to the "from" parameter. Frame number 2
-* (its current Frame) will describe the destination coordinate
-* system, corresponding to the "to" parameter. The Mapping
-* which inter-relates these Frames will perform the required
-* conversion between the two coordinate systems.
-
-* Notes:
-* - The returned FrameSet will not contain any Regions. If one or
-* more of the supplied Frames are in fact Regions, the corresponding
-* Frames in any returned FrameSet will described the encapsulated
-* Frame, without any region information.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrameSet *result; /* Returned FrameSet */
-
-/* Check the inherited status. */
- if ( !astOK ) return NULL;
-
-/* If the "from" pointer is a Region, get a pointer to the current Frame of
- the encapsulated FrameSet and use it instead of the supplied pointer. */
- if( astIsARegion( from ) ) {
- from = astGetFrame( ((AstRegion *) from)->frameset, AST__CURRENT );
- } else {
- from = astClone( from );
- }
-
-/* If the "to" pointer is a Region, get a pointer to the current Frame of
- the encapsulated FrameSet and use it instead of the supplied pointer. */
- if( astIsARegion( to ) ) {
- to = astGetFrame( ((AstRegion *) to)->frameset, AST__CURRENT );
- } else {
- to = astClone( to );
- }
-
-/* Now invoke astConvert on the above Frames. */
- result = astConvert( from, to, domainlist );
-
-/* Annul the pointers used above. */
- from = astAnnul( from );
- to = astAnnul( to );
-
-/* Return the result */
- return result;
-}
-
-static AstFrameSet *ConvertX( AstFrame *to, AstFrame *from,
- const char *domainlist, int *status ) {
-/*
-* Name:
-* ConvertX
-
-* Purpose:
-* Determine how to convert between two coordinate systems.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* AstFrameSet *astConvertX( AstFrame *to, AstFrame *from,
-* const char *domainlist )
-
-* Class Membership:
-* Region member function (over-rides the protected astConvertX
-* method inherited from the Frame class).
-
-* Description:
-* This function performs the processing for the public astConvert
-* method and has exactly the same interface except that the order
-* of the first two arguments is swapped. This is a trick to allow
-* the astConvert method to be over-ridden by derived classes on
-* the basis of the class of either of its first two arguments.
-*
-* See the astConvert method for details of the interface.
-*-
-*/
-
-/* Local Variables: */
- AstFrameSet *result; /* Returned FrameSet */
-
-/* Check the inherited status. */
- if ( !astOK ) return NULL;
-
-/* If the "to" pointer is a Region, get a pointer to the current Frame of
- the encapsulated FrameSet and use it instead of the supplied pointer. */
- if( astIsARegion( to ) ) {
- to = astGetFrame( ((AstRegion *) to)->frameset, AST__CURRENT );
- } else {
- to = astClone( to );
- }
-
-/* If the "from" pointer is a Region, get a pointer to the current Frame of
- the encapsulated FrameSet and use it instead of the supplied pointer. */
- if( astIsARegion( from ) ) {
- from = astGetFrame( ((AstRegion *) from)->frameset, AST__CURRENT );
- } else {
- from = astClone( from );
- }
-
-/* Now invoke astConvertX on the above Frames. */
- result = astConvertX( to, from, domainlist );
-
-/* Annul the pointers used above. */
- from = astAnnul( from );
- to = astAnnul( to );
-
-/* Return the result */
- return result;
-}
-
-static double Distance( AstFrame *this_frame, const double point1[],
- const double point2[], int *status ) {
-/*
-* Name:
-* Distance
-
-* Purpose:
-* Calculate the distance between two points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* double Distance( AstFrame *this, const double point1[],
-* const double point2[], int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astDistance
-* method inherited from the Frame class).
-
-* Description:
-* This function finds the distance between two points whose
-* Region coordinates are given. The distance calculated is that
-* along the geodesic curve that joins the two points.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* point1
-* An array of double, with one element for each Region axis
-* containing the coordinates of the first point.
-* point2
-* An array of double, with one element for each Region axis
-* containing the coordinates of the second point.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The distance between the two points.
-
-* Notes:
-* - This function will return a "bad" result value (AST__BAD) if
-* any of the input coordinates has this value.
-* - A "bad" value will also be returned if this function is
-* invoked with the AST error status set or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstRegion *this; /* Pointer to the Region structure */
- double result; /* Value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's current Frame and invoke this
- Frame's astDistance method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
- result = astDistance( fr, point1, point2 );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result. */
- if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
- return result;
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two Objects are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* int Equal( AstObject *this_object, AstObject *that_object, int *status )
-
-* Class Membership:
-* Region member function (over-rides the astEqual protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two Regions are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Region.
-* that
-* Pointer to the second Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the Regions are equivalent, zero otherwise.
-
-* Notes:
-* - The Regions are equivalent if they are of the same class, have
-* equal PointSets, have equal base Frames, have equal current Frames,
-* and if the Mapping between base Frames is a UnitMap. In addition, the
-* Negated attribute must have the same value in both Regions, as must
-* the Closed attribute.
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFrame *bf1;
- AstFrame *bf2;
- AstFrame *cf1;
- AstFrame *cf2;
- AstMapping *m1;
- AstMapping *m2;
- AstRegion *that;
- AstRegion *this;
- const char *class1;
- const char *class2;
- int result;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Check that the two objects have the same class. */
- class1 = astGetClass( this_object );
- class2 = astGetClass( that_object );
- if( astOK && !strcmp( class1, class2 ) ) {
-
-/* Obtain pointers to the two Region structures. */
- this = (AstRegion *) this_object;
- that = (AstRegion *) that_object;
-
-/* Test their PointSets for equality. */
- if( astEqual( this->points, that->points ) ){
-
-/* Test their base Frames for equality. */
- bf1 = astGetFrame( this->frameset, AST__BASE );
- bf2 = astGetFrame( that->frameset, AST__BASE );
- if( astEqual( bf1, bf2 ) ){
-
-/* Test their current Frames for equality. */
- cf1 = astGetFrame( this->frameset, AST__CURRENT );
- cf2 = astGetFrame( that->frameset, AST__CURRENT );
- if( astEqual( cf1, cf2 ) ){
-
-/* Get the two Mappings and check that they are equal */
- m1 = astGetMapping( this->frameset, AST__BASE, AST__CURRENT );
- m2 = astGetMapping( that->frameset, AST__BASE, AST__CURRENT );
- if( astEqual( m1, m2 ) ) {
-
-/* Test the Negated and Closed flags are equal */
- if( astGetNegated( this ) == astGetNegated( that ) &&
- astGetClosed( this ) == astGetClosed( that ) ) {
- result = 1;
- }
- }
-
-/* Free resources. */
- m1 = astAnnul( m1 );
- m2 = astAnnul( m2 );
- }
-
- cf1 = astAnnul( cf1 );
- cf2 = astAnnul( cf2 );
- }
-
- bf1 = astAnnul( bf1 );
- bf2 = astAnnul( bf2 );
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static void ClearUnc( AstRegion *this, int *status ){
-/*
-*+
-* Name:
-* astClearUnc
-
-* Purpose:
-* Erase any uncertainty information in a Region.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* void astClearUnc( AstRegion *this )
-
-* Class Membership:
-* Region virtual function.
-
-* Description:
-* This function erases all uncertainty information, whether default
-* or not, from a Region.
-
-* Parameters:
-* this
-* Pointer to the Region.
-
-*-
-*/
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* Annul any user-supplied uncertainty. Also indicate that cached
- information may now be out of date. */
- if( this->unc ) {
- this->unc = astAnnul( this->unc );
- astResetCache( this );
- }
-
-/* Annul any default uncertainty. */
- if( this->defunc ) this->defunc = astAnnul( this->defunc );
-
-}
-
-static AstFrameSet *FindFrame( AstFrame *target_frame, AstFrame *template,
- const char *domainlist, int *status ) {
-/*
-* Name:
-* FindFrame
-
-* Purpose:
-* Find a coordinate system with specified characteristics.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* AstFrameSet *FindFrame( AstFrame *target, AstFrame *template,
-* const char *domainlist, int *status )
-
-* Class Membership:
-* Region member function (over-rides the astFindFrame method
-* inherited from the Frame class).
-
-* Description:
-* This function uses a "template" Frame to search a Region to
-* identify a coordinate system which has a specified set of
-* characteristics. If a suitable coordinate system can be found,
-* the function returns a pointer to a FrameSet which describes the
-* required coordinate system and how to convert coordinates to and
-* from it.
-
-* Parameters:
-* target
-* Pointer to the target Region.
-* template
-* Pointer to the template Frame, which should be an instance of
-* the type of Frame you wish to find.
-* domainlist
-* Pointer to a null-terminated character string containing a
-* comma-separated list of Frame domains. This may be used to
-* establish a priority order for the different types of
-* coordinate system that might be found.
-*
-* The function will first try to find a suitable coordinate
-* system whose Domain attribute equals the first domain in this
-* list. If this fails, the second domain in the list will be
-* used, and so on, until a result is obtained. A blank domain
-* (e.g. two consecutive commas) indicates that any coordinate
-* system is acceptable (subject to the template) regardless of
-* its domain.
-*
-* This list is case-insensitive and all white space is ignored.
-* If you do not wish to restrict the domain in this way, you
-* should supply an empty string.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If the search is successful, the function returns a pointer to a
-* FrameSet which contains the Frame found and a description of how
-* to convert to (and from) the coordinate system it
-* represents. Otherwise, a null Object pointer (AST__NULL) is
-* returned without error.
-*
-* If a FrameSet is returned, it will contain two Frames. Frame
-* number 1 (its base Frame) represents the target coordinate
-* system and will be the same as the target. Frame number 2 (its
-* current Frame) will be a Frame representing the coordinate system
-* which the function found. The Mapping which inter-relates these two
-* Frames will describe how to convert between their respective coordinate
-* systems. Note, the Frames in this FrameSet will not be Regions -
-* that is, they will be simple Frames or other derived classes.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-* function is invoked with the AST error status set, or if it
-* should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFrameSet *result; /* Pointer to result FrameSet */
- AstFrame *fr; /* Pointer to encapsulated Frame */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Invoke the astFindFrame method on the current Frame of the
- encapsulated FrameSet within the target Region. */
- fr = astGetFrame( ((AstRegion *) target_frame)->frameset, AST__CURRENT );
- result = astFindFrame( fr, template, domainlist );
- fr = astAnnul( fr );
-
-/* Return the result. */
- return result;
-}
-
-static const char *Format( AstFrame *this_frame, int axis, double value, int *status ) {
-/*
-* Name:
-* Format
-
-* Purpose:
-* Format a coordinate value for a Region axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* const char *Format( AstFrame *this, int axis, double value, int *status )
-
-* Class Membership:
-* Region member function (over-rides the astFormat method
-* inherited from the Frame class).
-
-* Description:
-* This function returns a pointer to a string containing the
-* formatted (character) version of a coordinate value for a
-* Region axis. The formatting applied is that specified by a
-* previous invocation of the astSetFormat method. A suitable
-* default format is applied if necessary.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* axis
-* The number of the axis (zero-based) for which formatting is
-* to be performed.
-* value
-* The coordinate value to be formatted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a null-terminated string containing the formatted
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the Region object, or at static memory. The contents of
-* the string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or deletion
-* of the Region. A copy of the string should therefore be made
-* if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstRegion *this; /* Pointer to the Region structure */
- const char *result; /* Pointer value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_frame;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis, "astFormat" );
-
-/* Obtain a pointer to the Region's current Frame and invoke the
- astFormat method for this Frame. Annul the Frame pointer
- afterwards. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
- result = astFormat( fr, axis, value );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-static double Gap( AstFrame *this_frame, int axis, double gap, int *ntick, int *status ) {
-/*
-* Name:
-* Gap
-
-* Purpose:
-* Find a "nice" gap for tabulating Region axis values.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* double Gap( AstFrame *this, int axis, double gap, int *ntick, int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astGap method
-* inherited from the Frame class).
-
-* Description:
-* This function returns a gap size which produces a nicely spaced
-* series of formatted values for a Region axis, the returned gap
-* size being as close as possible to the supplied target gap
-* size. It also returns a convenient number of divisions into
-* which the gap can be divided.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* axis
-* The number of the axis (zero-based) for which a gap is to be found.
-* gap
-* The target gap size.
-* ntick
-* Address of an int in which to return a convenient number of
-* divisions into which the gap can be divided.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The nice gap size.
-
-* Notes:
-* - A value of zero is returned if the target gap size is zero.
-* - A negative gap size is returned if the supplied gap size is negative.
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstRegion *this; /* Pointer to the Region structure */
- double result; /* Gap value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return 0.0;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_frame;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis, "astGap" );
-
-/* Obtain a pointer to the Region's current Frame and invoke this
- Frame's astGap method to obtain the required gap value. Annul the
- Frame pointer afterwards. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
- result = astGap( fr, axis, gap, ntick );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result. */
- if ( !astOK ) result = 0.0;
-
-/* Return the result. */
- return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* Region member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied Region,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstRegion *this; /* Pointer to Region structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the Region structure. */
- this = (AstRegion *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
-
- result += astGetObjSize( this->frameset );
- result += astGetObjSize( this->points );
- result += astGetObjSize( this->basemesh );
- result += astGetObjSize( this->basegrid );
- result += astGetObjSize( this->unc );
- result += astGetObjSize( this->defunc );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astGetAttrib
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a Region, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the Region, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the Region. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstRegion *this; /* Pointer to the Region structure */
- const char *result; /* Pointer value to return */
- double dval; /* Floating point attribute value */
- int ival; /* Integer attribute value */
- int len; /* Length of attrib string */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_object;
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null-terminated string in an appropriate
- format. Set "result" to point at the result string. */
-
-/* We first handle attributes that apply to the Region as a whole
- (rather than to the encapsulated FrameSet). */
-
-/* Negated */
-/* ------- */
- if ( !strcmp( attrib, "negated" ) ) {
- ival = astGetNegated( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Closed */
-/* ------ */
- } else if ( !strcmp( attrib, "closed" ) ) {
- ival = astGetClosed( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Adaptive */
-/* -------- */
- } else if ( !strcmp( attrib, "adaptive" ) ) {
- ival = astGetAdaptive( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* FillFactor */
-/* ---------- */
- } else if ( !strcmp( attrib, "fillfactor" ) ) {
- dval = astGetFillFactor( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* MeshSize */
-/* -------- */
- } else if ( !strcmp( attrib, "meshsize" ) ) {
- ival = astGetMeshSize( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Bounded */
-/* ------- */
- } else if ( !strcmp( attrib, "bounded" ) ) {
- ival = astGetBounded( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Now get the values of attributes inherited from parent classes. We do
- this to avoid the request being passed on to the encapsulated FrameSet
- below. */
-
-/* Class. */
-/* ------ */
- } else if ( !strcmp( attrib, "class" ) ) {
- result = astGetClass( this );
-
-/* ID. */
-/* --- */
- } else if ( !strcmp( attrib, "id" ) ) {
- result = astGetID( this );
-
-/* Ident. */
-/* ------ */
- } else if ( !strcmp( attrib, "ident" ) ) {
- result = astGetIdent( this );
-
-/* Invert. */
-/* ------- */
- } else if ( !strcmp( attrib, "invert" ) ) {
- ival = astGetInvert( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Nin. */
-/* ---- */
- } else if ( !strcmp( attrib, "nin" ) ) {
- ival = astGetNin( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Nobject. */
-/* -------- */
- } else if ( !strcmp( attrib, "nobject" ) ) {
- ival = astGetNobject( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Nout. */
-/* ----- */
- } else if ( !strcmp( attrib, "nout" ) ) {
- ival = astGetNout( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* RefCount. */
-/* --------- */
- } else if ( !strcmp( attrib, "refcount" ) ) {
- ival = astGetRefCount( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Report. */
-/* ------- */
- } else if ( !strcmp( attrib, "report" ) ) {
- ival = astGetReport( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* TranForward. */
-/* ------------ */
- } else if ( !strcmp( attrib, "tranforward" ) ) {
- ival = astGetTranForward( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* TranInverse. */
-/* ------------ */
- } else if ( !strcmp( attrib, "traninverse" ) ) {
- ival = astGetTranInverse( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* Pass unrecognised attributes on to the Region's encapsulated FrameSet for
- further interpretation. Do not pass on FrameSet attributes since we
- pretend to the outside world that the encapsulated FrameSet is actually a
- Frame. */
- } else if ( strcmp( attrib, "base" ) &&
- strcmp( attrib, "current" ) &&
- strcmp( attrib, "nframe" ) ) {
- result = astGetAttrib( this->frameset, attrib );
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-static int GetBounded( AstRegion *this, int *status ) {
-/*
-*+
-* Name:
-* astGetBounded
-
-* Purpose:
-* Is the Region bounded?
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* int astGetBounded( AstRegion *this )
-
-* Class Membership:
-* Region virtual function.
-
-* Description:
-* This function returns a flag indicating if the Region is bounded.
-* The implementation provided by the base Region class is suitable
-* for Region sub-classes representing the inside of a single closed
-* curve (e.g. Circle, Ellipse, Box, etc). Other sub-classes (such as
-* CmpRegion, PointList, etc ) may need to provide their own
-* implementations.
-
-* Parameters:
-* this
-* Pointer to the Region.
-
-* Returned Value:
-* Non-zero if the Region is bounded. Zero otherwise.
-
-*-
-*/
-
-/* For Regions which are defined by one or more closed curves such as Circles,
- Boxes, etc, the Region is bounded so long as it has not been negated.
- Classes for which this is not true should over-ride this implementation. */
- return !astGetNegated( this );
-}
-
-static AstAxis *GetAxis( AstFrame *this_frame, int axis, int *status ) {
-/*
-* Name:
-* GetAxis
-
-* Purpose:
-* Obtain a pointer to a specified Axis from a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* AstAxis *GetAxis( AstFrame *this, int axis, int *status )
-
-* Class Membership:
-* Region member function (over-rides the astGetAxis method
-* inherited from the Frame class).
-
-* Description:
-* This function returns a pointer to the Axis object associated
-* with one of the axes of the current Frame of a Region. This
-* object describes the quantity which is represented along that
-* axis.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* axis
-* The number of the axis (zero-based) for which an Axis pointer
-* is required.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the requested Axis object.
-
-* Notes:
-* - The reference count of the requested Axis object will be
-* incremented by one to reflect the additional pointer returned by
-* this function.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstAxis *result; /* Pointer to Axis */
- AstRegion *this; /* Pointer to the Region structure */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_frame;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis, "astGetAxis" );
-
-/* Obtain a pointer to the Region's encapsulated FrameSet and invoke
- this FrameSet's astGetAxis method to obtain the required Axis
- pointer. */
- result = astGetAxis( this->frameset, axis );
-
-/* If an error occurred, annul the result. */
- if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static AstRegion *GetDefUnc( AstRegion *this, int *status ) {
-/*
-*+
-* Name:
-* astGetDefUnc
-
-* Purpose:
-* Obtain a pointer to the default uncertainty Region for a given Region.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* AstRegion *astGetDefUnc( AstRegion *this )
-
-* Class Membership:
-* Region virtual function.
-
-* Description:
-* This function returns a pointer to a Region which represents the
-* default uncertainty associated with a position on the boundary of the
-* given Region. The returned Region refers to the base Frame within the
-* FrameSet encapsulated by the supplied Region.
-
-* Parameters:
-* this
-* Pointer to the Region.
-
-* Returned Value:
-* A pointer to the Region. This should be annulled (using astAnnul)
-* when no longer needed.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstFrame *bfrm; /* Base Frame of supplied Region */
- AstRegion *result; /* Returned pointer */
- double *lbnd; /* Ptr. to array holding axis lower bounds */
- double *ubnd; /* Ptr. to array holding axis upper bounds */
- double c; /* Central axis value */
- double hw; /* Half width of uncertainty interval */
- int i; /* Axis index */
- int nax; /* Number of base Frame axes */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the base Frame in the supplied Region. */
- bfrm = astGetFrame( this->frameset, AST__BASE );
-
-/* Get the number of base Frame axes. */
- nax = astGetNaxes( bfrm );
-
-/* Get the base frame bounding box of the supplied Region. The astRegBaseBox
- assumes the supplied Region has not been inverted. But if the Region
- contains other Regions (e.g. a Prism or CmpRegion, etc) then this
- assumption needs to be propagated to the component Regions, which
- astRegBaseBox does not do. For this reason we use astRegBaseBox2
- instead. */
- lbnd = astMalloc( sizeof( double)*(size_t) nax );
- ubnd = astMalloc( sizeof( double)*(size_t) nax );
- astRegBaseBox2( this, lbnd, ubnd );
-
-/* Create a Box covering 1.0E-6 of this bounding box, centred on the
- centre of the box. */
- if( astOK ) {
- for( i = 0; i < nax; i++ ) {
- if( ubnd[ i ] != DBL_MAX && lbnd[ i ] != -DBL_MAX ) {
- hw = fabs( 0.5E-6*( ubnd[ i ] - lbnd[ i ] ) );
- c = 0.5*( ubnd[ i ] + lbnd[ i ] );
- if( hw == 0.0 ) hw = c*0.5E-6;
- ubnd[ i ] = c + hw;
- lbnd[ i ] = c - hw;
- } else {
- ubnd[ i ] = 0.0;
- lbnd[ i ] = 0.0;
- }
- }
- result = (AstRegion *) astBox( bfrm, 1, lbnd, ubnd, NULL, "", status );
- }
-
-/* Free resources. */
- lbnd = astFree( lbnd );
- ubnd = astFree( ubnd );
- bfrm = astAnnul( bfrm );
-
-/* Return NULL if an error occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the required pointer. */
- return result;
-}
-
-static AstFrameSet *GetRegFS( AstRegion *this, int *status ) {
-/*
-*+
-* Name:
-* astGetRegFS
-
-* Purpose:
-* Obtain a pointer to the FrameSet encapsulated within a Region.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* AstFrameSet *astGetRegFS( AstRegion *this )
-
-* Class Membership:
-* Region virtual function
-
-* Description:
-* This function returns a pointer to the FrameSet encapsulated by the
-* Region. This is a clone, not a deep copy, of the pointer stored
-* in the Region.
-
-* Parameters:
-* this
-* Pointer to the Region.
-
-* Returned Value:
-* A pointer to the FrameSet.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Return the required pointer. */
- return astClone( this->frameset );
-}
-
-static AstPointSet *GetSubMesh( int *mask, AstPointSet *in, int *status ) {
-/*
-* Name:
-* GetSubMesh
-
-* Purpose:
-* Extract a selection of points from a PointSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* AstPointSet *GetSubMesh( int *mask, AstPointSet *in, int *status )
-
-* Class Membership:
-* Region member function
-
-* Description:
-* This function creates a new PointSet holding points selected from a
-* supplied PointSet. An integer mask is supplied to indicate which
-* points should be selected.
-
-* Parameters:
-* mask
-* Pointer to a mask array, Its size should be equal to the number
-* of points in the supplied PointSet. Each corresponding point will
-* be copied if the mask value is zero.
-* in
-* Pointer to the PointSet holding the input positions.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstPointSet *result; /* Pointer to output PointSet */
- double **ptr_in; /* Pointers to input axis values */
- double **ptr_out; /* Pointers to output axis values */
- double *pin; /* Pointer to next input axis value */
- double *pout; /* Pointer to next output axis value */
- int *m; /* Pointer to next mask element */
- int ic; /* Axis index */
- int ip; /* Point index */
- int nc; /* Number of axes in both PointSets */
- int npin; /* Number of points in input PointSet */
- int npout; /* Number of points in output PointSet */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get the length of the mask. */
- npin = astGetNpoint( in );
-
-/* Count the number of zeros in the mask. */
- npout = 0;
- m = mask;
- for( ip = 0; ip < npin; ip++ ) {
- if( *(m++) == 0 ) npout++;
- }
-
-/* Create the output PointSet and get pointers to its data arrays. */
- nc = astGetNcoord( in );
- result = astPointSet( npout, nc, "", status );
- ptr_in = astGetPoints( in );
- ptr_out = astGetPoints( result );
-
-/* Check pointers can be dereferenced safely. */
- if( astOK ) {
-
-/* Copy the required axis values from the input to the output. */
- for( ic = 0; ic < nc; ic++ ) {
- pin = ptr_in[ ic ];
- pout = ptr_out[ ic ];
- m = mask;
- for( ip = 0; ip < npin; ip++, pin++, m++ ) {
- if( *m == 0 ) *(pout++) = *pin;
- }
- }
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-
-}
-
-static AstRegion *GetUnc( AstRegion *this, int def, int *status ){
-/*
-*++
-* Name:
-c astGetUnc
-f AST_GETUNC
-
-* Purpose:
-* Obtain uncertainty information from a Region.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "region.h"
-c AstRegion *astGetUnc( AstRegion *this, int def )
-f RESULT = AST_GETUNC( THIS, DEF, STATUS )
-
-* Class Membership:
-* Region method.
-
-* Description:
-* This function returns a Region which represents the uncertainty
-* associated with positions within the supplied Region. See
-c astSetUnc
-f AST_SETUNC
-* for more information about Region uncertainties and their use.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Region.
-c def
-f DEF = LOGICAL (Given)
-* Controls what is returned if no uncertainty information has been
-* associated explicitly with the supplied Region. If
-c a non-zero value
-f .TRUE.
-* is supplied, then the default uncertainty Region used internally
-* within AST is returned (see "Applicability" below). If
-c zero is supplied, then NULL
-f .FALSE. is supplied, then AST__NULL
-* will be returned (without error).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astGetUnc()
-f AST_GETUNC = INTEGER
-* A pointer to a Region describing the uncertainty in the supplied
-* Region.
-
-* Applicability:
-* CmpRegion
-* The default uncertainty for a CmpRegion is taken from one of the
-* two component Regions. If the first component Region has a
-* non-default uncertainty, then it is used as the default uncertainty
-* for the parent CmpRegion. Otherwise, if the second component Region
-* has a non-default uncertainty, then it is used as the default
-* uncertainty for the parent CmpRegion. If neither of the
-* component Regions has non-default uncertainty, then the default
-* uncertainty for the CmpRegion is 1.0E-6 of the bounding box of
-* the CmpRegion.
-* Prism
-* The default uncertainty for a Prism is formed by combining the
-* uncertainties from the two component Regions. If a component
-* Region does not have a non-default uncertainty, then its default
-* uncertainty will be used to form the default uncertainty of the
-* parent Prism.
-* Region
-* For other classes of Region, the default uncertainty is 1.0E-6
-* of the bounding box of the Region. If the bounding box has zero
-* width on any axis, then the uncertainty will be 1.0E-6 of the
-* axis value.
-
-* Notes:
-* - If uncertainty information is associated with a Region, and the
-* coordinate system described by the Region is subsequently changed
-* (e.g. by changing the value of its System attribute, or using the
-c astMapRegion
-f AST_MAPREGION
-* function), then the uncertainty information returned by this function
-* will be modified so that it refers to the coordinate system currently
-* described by the supplied Region.
-f - A null Object pointer (AST__NULL) will be returned if this
-f function is invoked with STATUS set to an error value, or if it
-c - A null Object pointer (NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-* should fail for any reason.
-
-*--
-*/
-
-/* Local Variables: */
- AstRegion *result; /* Pointer to returned uncertainty Region */
- AstRegion *unc; /* Pointer to original uncertainty Region */
-
-/* Initialise */
- result = NULL;
-
-/* Check inherited status */
- if( !astOK ) return result;
-
-/* Check that we have an uncertainty Region to return (either assigned or
- default). */
- if( def || astTestUnc( this ) ) {
-
-/* Obtain the uncertainty Region and take a copy so that we can modify it
- without affecting the supplied Region. */
- unc = astGetUncFrm( this, AST__CURRENT );
- result = astCopy( unc );
- unc = astAnnul( unc );
-
-/* In its current context, the uncertainty region is known to refer to
- the Frame of the supplied Region and so its RegionFS attribute will be
- set to zero, indicating that the uncertainty FrameSet need not be
- dumped. However, outside of AST this information cannot be implied, so
- clear the RegionFS attribute so that the returned pointer will include
- Frame information if it is dumped to a Channel. */
- astClearRegionFS( result );
-
- }
-
-/* Return the result. */
- return result;
-
-}
-
-static AstRegion *GetUncFrm( AstRegion *this, int ifrm, int *status ) {
-/*
-*+
-* Name:
-* astGetUncFrm
-
-* Purpose:
-* Obtain a pointer to the uncertainty Region for a given Region.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* AstRegion *astGetUncFrm( AstRegion *this, int ifrm )
-
-* Class Membership:
-* Region virtual function.
-
-* Description:
-* This function returns a pointer to a Region which represents the
-* uncertainty associated with a position on the boundary of the given
-* Region. The returned Region can refer to the either the base or
-* the current Frame within the FrameSet encapsulated by the supplied
-* Region as specified by the "ifrm" parameter. If the returned Region is
-* re-centred at some point on the boundary of the supplied Region, then
-* the re-centred Region will represent the region in which the true
-* boundary position could be.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* ifrm
-* The index of a Frame within the FrameSet encapsulated by "this".
-* The returned Region will refer to the requested Frame. It should
-* be either AST__CURRENT or AST__BASE.
-
-* Returned Value:
-* A pointer to the Region. This should be annulled (using astAnnul)
-* when no longer needed.
-
-* Notes:
-* - A default uncertainty Region will be created if the supplied Region
-* does not have an uncertainty Region.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstFrame *frm; /* Current Frame from supplied Region */
- AstMapping *map; /* Supplied to uncertainty Mapping */
- AstRegion *result; /* Returned pointer */
- AstRegion *unc; /* Base frame uncertainty Region to use */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If the Region has an explicitly assigned base-frame uncertainty Region,
- use it. */
- if( this->unc ) {
- unc = this->unc;
-
-/* If not, use the default base-frame uncertainty Region, creating it if
- necessary. */
- } else {
- if( !this->defunc ) this->defunc = astGetDefUnc( this );
- unc = this->defunc;
- }
-
-/* If the uncertainty Region is the base Frame is required, just return a
- clone of the uncertainty Region pointer. The Frame represented by an
- uncertainty Region will always (barring bugs!) be the base Frame of
- its parent Region. */
- if( ifrm == AST__BASE ) {
- result = astClone( unc );
-
-/* If the uncertainty Region is the current Frame is required... */
- } else {
-
-/* Get a Mapping from the Frame represented by the uncertainty Region
- (the Region base Frame) to the Region current Frame. */
- map = astGetMapping( this->frameset, AST__BASE, AST__CURRENT );
-
-/* If this is a UnitMap, the uncertainty Region is already in the correct
- Frame, so just return the stored pointer. */
- if( astIsAUnitMap( map ) ) {
- result = astClone( unc );
-
-/* Otherwise, use this Mapping to map the uncertainty Region into the current
- Frame. */
- } else {
- frm = astGetFrame( this->frameset, AST__CURRENT );
- result = astMapRegion( unc, map, frm );
-
-/* Free resources. */
- frm = astAnnul( frm );
- }
-
- map = astAnnul( map );
- }
-
-/* Return NULL if an error occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the required pointer. */
- return result;
-}
-
-static int GetUseDefs( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetUseDefs
-
-* Purpose:
-* Get the value of the UseDefs attribute for a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* int GetUseDefs( AstObject *this_object, int *status ) {
-
-* Class Membership:
-* Region member function (over-rides the protected astGetUseDefs
-* method inherited from the Frame class).
-
-* Description:
-* This function returns the value of the UseDefs attribute for a
-* Region. supplying a suitable default.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - The USeDefs value.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstRegion *this; /* Pointer to the Region structure */
- int result; /* Value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_object;
-
-/* If the UseDefs value for the Region has been set explicitly, use the
- Get method inherited from the parent Frame class to get its value. */
- if( astTestUseDefs( this ) ) {
- result = (*parent_getusedefs)( this_object, status );
-
-/* Otherwise, supply a default value equal to the UseDefs value of the
- encapsulated Frame. */
- } else {
- fr = astGetFrame( this->frameset, AST__CURRENT );
- result = astGetUseDefs( fr );
- fr = astAnnul( fr );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int TestUnc( AstRegion *this, int *status ) {
-/*
-*+
-* Name:
-* astTestUnc
-
-* Purpose:
-* Does the Region contain non-default uncertainty information?
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* int astTestUnc( AstRegion *this )
-
-* Class Membership:
-* Region virtual function.
-
-* Description:
-* This function returns a flag indicating if the uncertainty Region in
-* the supplied Region was supplied explicit (i.e. is not a default
-* uncertainty Region).
-
-* Parameters:
-* this
-* Pointer to the Region.
-
-* Returned Value:
-* Non-zero if the uncertainty Region was supplied explicitly.
-* Zero otherwise.
-
-* Notes:
-* - Classes of Region that encapsulate two or more other Regions
-* inherit their default uncertainty from the encapsulated Regions.
-* Non-default uncertainty in the component Regions does not imply
-* that the parent Region has non-default uncertainty.
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
- return ( this->unc != NULL );
-}
-
-static AstFrame *RegFrame( AstRegion *this, int *status ) {
-/*
-*+
-* Name:
-* astRegFrame
-
-* Purpose:
-* Obtain a pointer to the current Frame for a Region.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* AstFrame *astRegFrame( AstRegion *this )
-
-* Class Membership:
-* Region virtual function
-
-* Description:
-* This function returns a pointer to the current Frame in the encapsulated
-* FrameSet. This is a clone, not a deep copy, of the pointer stored
-* in the FrameSet. For a deep copy, use astGetRegionFrame.
-
-* Parameters:
-* this
-* Pointer to the Region.
-
-* Returned Value:
-* A pointer to the Frame.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Return the required pointer. */
- return astGetFrame( this->frameset, AST__CURRENT );
-}
-
-static AstMapping *RegMapping( AstRegion *this, int *status ) {
-/*
-*+
-* Name:
-* astRegMapping
-
-* Purpose:
-* Obtain a pointer to the simplified base->current Mapping for a Region.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* AstMapping *astRegMapping( AstRegion *this )
-
-* Class Membership:
-* Region member function
-
-* Description:
-* This function returns a pointer to the Mapping from the base to the
-* current Frame int he encapsulated FrameSet. The returned Mapping is
-* simplified before being returned.
-
-* Parameters:
-* this
-* Pointer to the Region.
-
-* Returned Value:
-* A pointer to the Mapping.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstMapping *map; /* Unsimplified Mapping */
- AstMapping *result; /* Simplified Mapping */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If the "nomap" flag is set in the Region structure, re return a
- UnitMap. */
- if( this->nomap ) {
- result = (AstMapping *) astUnitMap( astGetNin( this->frameset ), "", status );
-
-/* Otherwise use the Mapping from the Region's FrameSet. */
- } else {
-
-/* Get the Mapping */
- map = astGetMapping( this->frameset, AST__BASE, AST__CURRENT );
-
-/* Simplify it. */
- result = astSimplify( map );
-
-/* Annul the pointer to the unsimplified Mapping */
- map = astAnnul( map );
- }
-
-/* Return the required pointer. */
- return result;
-}
-
-static int GetNaxes( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetNaxes
-
-* Purpose:
-* Determine how many axes a Region has.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* int GetNaxes( AstFrame *this, int *status )
-
-* Class Membership:
-* Region member function (over-rides the astGetNaxes method
-* inherited from the Frame class).
-
-* Description:
-* This function returns the number of axes for a Region. This is equal
-* to the number of axes in its current Frame.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The number of Region axes (zero or more).
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstRegion *this; /* Pointer to the Region structure */
- int result; /* Result to be returned */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's current Frame. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
-
-/* Obtain the number of axes in this Frame. */
- result = astGetNaxes( fr );
-
-/* Annul the current Frame pointer. */
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static const int *GetPerm( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetPerm
-
-* Purpose:
-* Access the axis permutation array for the current Frame of a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* const int *GetPerm( AstFrame *this, int *status )
-
-* Class Membership:
-* Region member function (over-rides the astGetPerm protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a pointer to the axis permutation array
-* for the current Frame of a Region. This array constitutes a
-* lookup-table that converts between an axis number supplied
-* externally and the corresponding index in the Frame's internal
-* axis arrays.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the current Frame's axis permutation array (a
-* constant array of int). Each element of this contains the
-* (zero-based) internal axis index to be used in place of the
-* external index which is used to address the permutation
-* array. If the current Frame has zero axes, this pointer will be
-* NULL.
-
-* Notes:
-* - The pointer returned by this function gives direct access to
-* data internal to the Frame object. It remains valid only so long
-* as the Frame exists. The permutation array contents may be
-* modified by other functions which operate on the Frame and this
-* may render the returned pointer invalid.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstRegion *this; /* Pointer to Region structure */
- const int *result; /* Result pointer value */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's current Frame and then obtain a
- pointer to its axis permutation array. Annul the Frame pointer
- afterwards. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
- result = astGetPerm( fr );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-static AstFrame *GetRegionFrame( AstRegion *this, int *status ) {
-/*
-*++
-* Name:
-c astGetRegionFrame
-f AST_GETREGIONFRAME
-
-* Purpose:
-* Obtain a pointer to the encapsulated Frame within a Region.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "region.h"
-c AstFrame *astGetRegionFrame( AstRegion *this )
-f RESULT = AST_GETREGIONFRAME( THIS, STATUS )
-
-* Class Membership:
-* Region method.
-
-* Description:
-* This function returns a pointer to the Frame represented by a
-* Region.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Region.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astGetRegionFrame()
-f AST_GETREGIONFRAME = INTEGER
-* A pointer to a deep copy of the Frame represented by the Region.
-* Using this pointer to modify the Frame will have no effect on
-* the Region. To modify the Region, use the Region pointer directly.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstFrame *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the current Frame of the encapsulated FrameSet. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
-
-/* Take a deep copy of it, and then annul the original pointer. */
- result = astCopy( fr );
- fr = astAnnul( fr );
-
-/* If not OK, annul the returned pointer. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-void astInitRegionVtab_( AstRegionVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitRegionVtab
-
-* Purpose:
-* Initialise a virtual function table for a Region.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* void astInitRegionVtab( AstRegionVtab *vtab, const char *name )
-
-* Class Membership:
-* Region vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the Region class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrameVtab *frame; /* Pointer to Frame component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitFrameVtab( (AstFrameVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsARegion) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstFrameVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
- vtab->ClearNegated = ClearNegated;
- vtab->GetNegated = GetNegated;
- vtab->SetNegated = SetNegated;
- vtab->TestNegated = TestNegated;
-
- vtab->ClearRegionFS = ClearRegionFS;
- vtab->GetRegionFS = GetRegionFS;
- vtab->SetRegionFS = SetRegionFS;
- vtab->TestRegionFS = TestRegionFS;
-
- vtab->ClearClosed = ClearClosed;
- vtab->GetClosed = GetClosed;
- vtab->SetClosed = SetClosed;
- vtab->TestClosed = TestClosed;
-
- vtab->ClearMeshSize = ClearMeshSize;
- vtab->GetMeshSize = GetMeshSize;
- vtab->SetMeshSize = SetMeshSize;
- vtab->TestMeshSize = TestMeshSize;
-
- vtab->ClearAdaptive = ClearAdaptive;
- vtab->GetAdaptive = GetAdaptive;
- vtab->SetAdaptive = SetAdaptive;
- vtab->TestAdaptive = TestAdaptive;
-
- vtab->ClearFillFactor = ClearFillFactor;
- vtab->GetFillFactor = GetFillFactor;
- vtab->SetFillFactor = SetFillFactor;
- vtab->TestFillFactor = TestFillFactor;
-
- vtab->ResetCache = ResetCache;
- vtab->RegTrace = RegTrace;
- vtab->GetBounded = GetBounded;
- vtab->TestUnc = TestUnc;
- vtab->ClearUnc = ClearUnc;
- vtab->GetRegionFrame = GetRegionFrame;
- vtab->MapRegion = MapRegion;
- vtab->Overlap = Overlap;
- vtab->OverlapX = OverlapX;
- vtab->Negate = Negate;
- vtab->BndMesh = BndMesh;
- vtab->BndBaseMesh = BndBaseMesh;
- vtab->RegBaseGrid = RegBaseGrid;
- vtab->RegBaseMesh = RegBaseMesh;
- vtab->RegBaseBox = RegBaseBox;
- vtab->RegBaseBox2 = RegBaseBox2;
- vtab->RegBasePick = RegBasePick;
- vtab->RegCentre = RegCentre;
- vtab->RegGrid = RegGrid;
- vtab->RegMesh = RegMesh;
- vtab->RegClearAttrib = RegClearAttrib;
- vtab->RegSetAttrib = RegSetAttrib;
- vtab->GetDefUnc = GetDefUnc;
- vtab->GetUncFrm = GetUncFrm;
- vtab->SetUnc = SetUnc;
- vtab->GetUnc = GetUnc;
- vtab->ShowMesh = ShowMesh;
- vtab->GetRegionBounds = GetRegionBounds;
- vtab->GetRegionBounds2 = GetRegionBounds2;
- vtab->GetRegionPoints = GetRegionPoints;
- vtab->RegOverlay = RegOverlay;
- vtab->RegFrame = RegFrame;
- vtab->RegDummyFS = RegDummyFS;
- vtab->RegMapping = RegMapping;
- vtab->RegPins = RegPins;
- vtab->RegTransform = RegTransform;
- vtab->BTransform = BTransform;
- vtab->GetRegFS = GetRegFS;
- vtab->SetRegFS = SetRegFS;
- vtab->MaskB = MaskB;
- vtab->MaskD = MaskD;
- vtab->MaskF = MaskF;
- vtab->MaskI = MaskI;
- vtab->MaskL = MaskL;
- vtab->MaskS = MaskS;
- vtab->MaskUB = MaskUB;
- vtab->MaskUI = MaskUI;
- vtab->MaskUL = MaskUL;
- vtab->MaskUS = MaskUS;
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
- vtab->MaskLD = MaskLD;
-#endif
-
-/* Save the inherited pointers to methods that will be extended, and store
- replacement pointers for methods which will be over-ridden by new member
- functions implemented here. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
- frame = (AstFrameVtab *) vtab;
-
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
- parent_getusedefs = object->GetUseDefs;
- object->GetUseDefs = GetUseDefs;
-
-#if defined(THREAD_SAFE)
- parent_managelock = object->ManageLock;
- object->ManageLock = ManageLock;
-#endif
-
- object->Cast = Cast;
- object->Equal = Equal;
- object->ClearAttrib = ClearAttrib;
- object->GetAttrib = GetAttrib;
- object->SetAttrib = SetAttrib;
- object->TestAttrib = TestAttrib;
-
- mapping->ReportPoints = ReportPoints;
- mapping->RemoveRegions = RemoveRegions;
- mapping->Simplify = Simplify;
-
- frame->Abbrev = Abbrev;
- frame->Angle = Angle;
- frame->AxAngle = AxAngle;
- frame->AxDistance = AxDistance;
- frame->AxOffset = AxOffset;
- frame->CheckPerm = CheckPerm;
- frame->ClearDigits = ClearDigits;
- frame->ClearDirection = ClearDirection;
- frame->ClearDomain = ClearDomain;
- frame->ClearFormat = ClearFormat;
- frame->ClearLabel = ClearLabel;
- frame->ClearMatchEnd = ClearMatchEnd;
- frame->ClearMaxAxes = ClearMaxAxes;
- frame->ClearMinAxes = ClearMinAxes;
- frame->ClearPermute = ClearPermute;
- frame->ClearPreserveAxes = ClearPreserveAxes;
- frame->ClearSymbol = ClearSymbol;
- frame->ClearTitle = ClearTitle;
- frame->ClearUnit = ClearUnit;
- frame->Convert = Convert;
- frame->ConvertX = ConvertX;
- frame->Distance = Distance;
- frame->FindFrame = FindFrame;
- frame->Format = Format;
- frame->Gap = Gap;
- frame->GetAxis = GetAxis;
- frame->GetDigits = GetDigits;
- frame->GetDirection = GetDirection;
- frame->GetDomain = GetDomain;
- frame->GetFormat = GetFormat;
- frame->GetLabel = GetLabel;
- frame->GetMatchEnd = GetMatchEnd;
- frame->GetMaxAxes = GetMaxAxes;
- frame->GetMinAxes = GetMinAxes;
- frame->GetNaxes = GetNaxes;
- frame->GetPerm = GetPerm;
- frame->GetPermute = GetPermute;
- frame->GetPreserveAxes = GetPreserveAxes;
- frame->GetSymbol = GetSymbol;
- frame->GetTitle = GetTitle;
- frame->GetUnit = GetUnit;
- frame->Intersect = Intersect;
- frame->IsUnitFrame = IsUnitFrame;
- frame->Match = Match;
- frame->Norm = Norm;
- frame->NormBox = NormBox;
- frame->Offset = Offset;
- frame->Offset2 = Offset2;
- frame->Overlay = Overlay;
- frame->PermAxes = PermAxes;
- frame->PickAxes = PickAxes;
- frame->Resolve = Resolve;
- frame->ResolvePoints = ResolvePoints;
- frame->SetAxis = SetAxis;
- frame->SetDigits = SetDigits;
- frame->SetDirection = SetDirection;
- frame->SetDomain = SetDomain;
- frame->SetFormat = SetFormat;
- frame->SetLabel = SetLabel;
- frame->SetMatchEnd = SetMatchEnd;
- frame->SetMaxAxes = SetMaxAxes;
- frame->SetMinAxes = SetMinAxes;
- frame->SetPermute = SetPermute;
- frame->SetPreserveAxes = SetPreserveAxes;
- frame->SetSymbol = SetSymbol;
- frame->SetTitle = SetTitle;
- frame->SetUnit = SetUnit;
- frame->SubFrame = SubFrame;
- frame->SystemCode = SystemCode;
- frame->SystemString = SystemString;
- frame->TestDigits = TestDigits;
- frame->TestDirection = TestDirection;
- frame->TestDomain = TestDomain;
- frame->TestFormat = TestFormat;
- frame->TestLabel = TestLabel;
- frame->TestMatchEnd = TestMatchEnd;
- frame->TestMaxAxes = TestMaxAxes;
- frame->TestMinAxes = TestMinAxes;
- frame->TestPermute = TestPermute;
- frame->TestPreserveAxes = TestPreserveAxes;
- frame->TestSymbol = TestSymbol;
- frame->TestTitle = TestTitle;
- frame->TestUnit = TestUnit;
- frame->Unformat = Unformat;
- frame->ValidateAxis = ValidateAxis;
- frame->ValidateAxisSelection = ValidateAxisSelection;
- frame->ValidateSystem = ValidateSystem;
- frame->LineDef = LineDef;
- frame->LineContains = LineContains;
- frame->LineCrossing = LineCrossing;
- frame->LineOffset = LineOffset;
- frame->MatchAxes = MatchAxes;
- frame->MatchAxesX = MatchAxesX;
-
- frame->GetActiveUnit = GetActiveUnit;
- frame->SetActiveUnit = SetActiveUnit;
- frame->TestActiveUnit = TestActiveUnit;
-
- frame->GetTop = GetTop;
- frame->SetTop = SetTop;
- frame->TestTop = TestTop;
- frame->ClearTop = ClearTop;
-
- frame->GetBottom = GetBottom;
- frame->SetBottom = SetBottom;
- frame->TestBottom = TestBottom;
- frame->ClearBottom = ClearBottom;
-
- frame->GetEpoch = GetEpoch;
- frame->SetEpoch = SetEpoch;
- frame->TestEpoch = TestEpoch;
- frame->ClearEpoch = ClearEpoch;
-
- frame->ClearObsAlt = ClearObsAlt;
- frame->TestObsAlt = TestObsAlt;
- frame->GetObsAlt = GetObsAlt;
- frame->SetObsAlt = SetObsAlt;
-
- frame->ClearObsLat = ClearObsLat;
- frame->TestObsLat = TestObsLat;
- frame->GetObsLat = GetObsLat;
- frame->SetObsLat = SetObsLat;
-
- frame->ClearObsLon = ClearObsLon;
- frame->TestObsLon = TestObsLon;
- frame->GetObsLon = GetObsLon;
- frame->SetObsLon = SetObsLon;
-
- frame->GetSystem = GetSystem;
- frame->SetSystem = SetSystem;
- frame->TestSystem = TestSystem;
- frame->ClearSystem = ClearSystem;
-
- frame->GetAlignSystem = GetAlignSystem;
- frame->SetAlignSystem = SetAlignSystem;
- frame->TestAlignSystem = TestAlignSystem;
- frame->ClearAlignSystem = ClearAlignSystem;
-
-/* Declare the copy constructor, destructor and class dump
- functions. */
- astSetDelete( vtab, Delete );
- astSetCopy( vtab, Copy );
- astSetDump( vtab, Dump, "Region",
- "An area within a coordinate system" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static void Intersect( AstFrame *this_frame, const double a1[2],
- const double a2[2], const double b1[2],
- const double b2[2], double cross[2],
- int *status ) {
-/*
-* Name:
-* Intersect
-
-* Purpose:
-* Find the point of intersection between two geodesic curves.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* void Intersect( AstFrame *this_frame, const double a1[2],
-* const double a2[2], const double b1[2],
-* const double b2[2], double cross[2],
-* int *status )
-
-* Class Membership:
-* Region member function (over-rides the astIntersect method
-* inherited from the Frame class).
-
-* Description:
-* This function finds the coordinate values at the point of
-* intersection between two geodesic curves. Each curve is specified
-* by two points on the curve.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* a1
-* An array of double, with one element for each Frame axis.
-* This should contain the coordinates of a point on the first
-* geodesic curve.
-* a2
-* An array of double, with one element for each Frame axis.
-* This should contain the coordinates of a second point on the
-* first geodesic curve.
-* b1
-* An array of double, with one element for each Frame axis.
-* This should contain the coordinates of a point on the second
-* geodesic curve.
-* b2
-* An array of double, with one element for each Frame axis.
-* This should contain the coordinates of a second point on
-* the second geodesic curve.
-* cross
-* An array of double, with one element for each Frame axis
-* in which the coordinates of the required intersection
-* point will be returned. These will be AST__BAD if the curves do
-* not intersect.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The geodesic curve used by this function is the path of
-* shortest distance between two points, as defined by the
-* astDistance function.
-* - This function will return "bad" coordinate values (AST__BAD)
-* if any of the input coordinates has this value.
-* - For SkyFrames each curve will be a great circle, and in general
-* each pair of curves will intersect at two diametrically opposite
-* points on the sky. The returned position is the one which is
-* closest to point "a1".
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstRegion *this; /* Pointer to the Region structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke the
- astIntersect method for this Frame. Annul the Frame pointer
- afterwards. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
- astIntersect( fr, a1, a2, b1, b2, cross );
- fr = astAnnul( fr );
-}
-
-static int IsUnitFrame( AstFrame *this, int *status ){
-/*
-* Name:
-* IsUnitFrame
-
-* Purpose:
-* Is this Frame equivalent to a UnitMap?
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* int IsUnitFrame( AstFrame *this, int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astIsUnitFrame
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a flag indicating if the supplied Frame is
-* equivalent to a UnitMap when treated as a Mapping (note, the Frame
-* class inherits from Mapping and therefore every Frame is also a Mapping).
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if the supplied Frame is equivalent to
-* a UnitMap when treated as a Mapping.
-
-*-
-*/
-
-/* Check the global error status. */
- if( !astOK ) return 0;
-
-/* The Region class is never equivalent to a UnitMap. */
- return 0;
-}
-
-static int LineContains( AstFrame *this_frame, AstLineDef *l, int def, double *point, int *status ) {
-/*
-* Name:
-* LineContains
-
-* Purpose:
-* Determine if a line contains a point.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* int LineContains( AstFrame *this, AstLineDef *l, int def, double *point, int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astLineContains
-* method inherited from the Frame class).
-
-* Description:
-* This function determines if the supplied point is on the supplied
-* line within the supplied Frame. The start point of the line is
-* considered to be within the line, but the end point is not. The tests
-* are that the point of closest approach of the line to the point should
-* be between the start and end, and that the distance from the point to
-* the point of closest aproach should be less than 1.0E-7 of the length
-* of the line.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* l
-* Pointer to the structure defining the line.
-* def
-* Should be set non-zero if the "point" array was created by a
-* call to astLineCrossing (in which case it may contain extra
-* information following the axis values),and zero otherwise.
-* point
-* Point to an array containing the axis values of the point to be
-* tested, possibly followed by extra cached information (see "def").
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if the line contains the point.
-
-* Notes:
-* - The pointer supplied for "l" should have been created using the
-* astLineDef method. These structures contained cached information about
-* the lines which improve the efficiency of this method when many
-* repeated calls are made. An error will be reported if the structure
-* does not refer to the Frame specified by "this".
-* - Zero will be returned if this function is invoked with the global
-* error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- int result; /* Returned value */
-
-/* Initialise */
- result =0;
-
-/* Obtain a pointer to the Region's current Frame and then invoke the
- method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( ((AstRegion *) this_frame)->frameset, AST__CURRENT );
- result = astLineContains( fr, l, def, point );
- fr = astAnnul( fr );
-
-/* Return the result. */
- return result;
-}
-
-static int LineCrossing( AstFrame *this_frame, AstLineDef *l1, AstLineDef *l2,
- double **cross, int *status ) {
-/*
-* Name:
-* LineCrossing
-
-* Purpose:
-* Determine if two lines cross.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* int LineCrossing( AstFrame *this, AstLineDef *l1, AstLineDef *l2,
-* double **cross, int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astLineCrossing
-* method inherited from the Frame class).
-
-* Description:
-* This function determines if the two suplied line segments cross,
-* and if so returns the axis values at the point where they cross.
-* A flag is also returned indicating if the crossing point occurs
-* within the length of both line segments, or outside one or both of
-* the line segments.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* l1
-* Pointer to the structure defining the first line.
-* l2
-* Pointer to the structure defining the second line.
-* cross
-* Pointer to a location at which to put a pointer to a dynamically
-* alocated array containing the axis values at the crossing. If
-* NULL is supplied no such array is returned. Otherwise, the returned
-* array should be freed using astFree when no longer needed. If the
-* lines are parallel (i.e. do not cross) then AST__BAD is returned for
-* all axis values. Note usable axis values are returned even if the
-* lines cross outside the segment defined by the start and end points
-* of the lines. The order of axes in the returned array will take
-* account of the current axis permutation array if appropriate. Note,
-* sub-classes such as SkyFrame may append extra values to the end
-* of the basic frame axis values. A NULL pointer is returned if an
-* error occurs.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if the lines cross at a point which is
-* within the [start,end) segment of both lines. If the crossing point
-* is outside this segment on either line, or if the lines are parallel,
-* zero is returned. Note, the start point is considered to be inside
-* the length of the segment, but the end point is outside.
-
-* Notes:
-* - The pointers supplied for "l1" and "l2" should have been created
-* using the astLineDef method. These structures contained cached
-* information about the lines which improve the efficiency of this method
-* when many repeated calls are made. An error will be reported if
-* either structure does not refer to the Frame specified by "this".
-* - Zero will be returned if this function is invoked with the global
-* error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- int result; /* Returned value */
-
-/* Initialise */
- result =0;
-
-/* Obtain a pointer to the Region's current Frame and then invoke the
- method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( ((AstRegion *) this_frame)->frameset, AST__CURRENT );
- result = astLineCrossing( fr, l1, l2, cross );
- fr = astAnnul( fr );
-
-/* Return the result. */
- return result;
-}
-
-static AstLineDef *LineDef( AstFrame *this_frame, const double start[2],
- const double end[2], int *status ) {
-/*
-* Name:
-* LineDef
-
-* Purpose:
-* Creates a structure describing a line segment in a 2D Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* AstLineDef *LineDef( AstFrame *this, const double start[2],
-* const double end[2], int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astLineDef
-* method inherited from the Frame class).
-
-* Description:
-* This function creates a structure containing information describing a
-* given line segment within the supplied 2D Frame. This may include
-* information which allows other methods such as astLineCrossing to
-* function more efficiently. Thus the returned structure acts as a
-* cache to store intermediate values used by these other methods.
-
-* Parameters:
-* this
-* Pointer to the Frame. Must have 2 axes.
-* start
-* An array of 2 doubles marking the start of the line segment.
-* end
-* An array of 2 doubles marking the end of the line segment.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the memory structure containing the description of the
-* line. This structure should be freed using astFree when no longer
-* needed. A NULL pointer is returned (without error) if any of the
-* supplied axis values are AST__BAD.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstLineDef *result; /* Returned value */
-
-/* Initialise */
- result = NULL;
-
-/* Obtain a pointer to the Region's current Frame and then invoke the
- method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( ((AstRegion *) this_frame)->frameset, AST__CURRENT );
- result = astLineDef( fr, start, end );
- fr = astAnnul( fr );
-
-/* Return the result. */
- return result;
-}
-
-static void LineOffset( AstFrame *this_frame, AstLineDef *line, double par,
- double prp, double point[2], int *status ){
-/*
-* Name:
-* LineOffset
-
-* Purpose:
-* Find a position close to a line.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* void LineOffset( AstFrame *this, AstLineDef *line, double par,
-* double prp, double point[2], int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astLineOffset
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a position formed by moving a given distance along
-* the supplied line, and then a given distance away from the supplied line.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* line
-* Pointer to the structure defining the line.
-* par
-* The distance to move along the line from the start towards the end.
-* prp
-* The distance to move at right angles to the line. Positive
-* values result in movement to the left of the line, as seen from
-* the observer, when moving from start towards the end.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The pointer supplied for "line" should have been created using the
-* astLineDef method. This structure contains cached information about the
-* line which improves the efficiency of this method when many repeated
-* calls are made. An error will be reported if the structure does not
-* refer to the Frame specified by "this".
-*/
-
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
-
-/* Obtain a pointer to the Region's current Frame and then invoke the
- method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( ((AstRegion *) this_frame)->frameset, AST__CURRENT );
- astLineOffset( fr, line, par, prp, point );
- fr = astAnnul( fr );
-}
-
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra,
- AstObject **fail, int *status ) {
-/*
-* Name:
-* ManageLock
-
-* Purpose:
-* Manage the thread lock on an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *ManageLock( AstObject *this, int mode, int extra,
-* AstObject **fail, int *status )
-
-* Class Membership:
-* Region member function (over-rides the astManageLock protected
-* method inherited from the parent class).
-
-* Description:
-* This function manages the thread lock on the supplied Object. The
-* lock can be locked, unlocked or checked by this function as
-* deteremined by parameter "mode". See astLock for details of the way
-* these locks are used.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* mode
-* An integer flag indicating what the function should do:
-*
-* AST__LOCK: Lock the Object for exclusive use by the calling
-* thread. The "extra" value indicates what should be done if the
-* Object is already locked (wait or report an error - see astLock).
-*
-* AST__UNLOCK: Unlock the Object for use by other threads.
-*
-* AST__CHECKLOCK: Check that the object is locked for use by the
-* calling thread (report an error if not).
-* extra
-* Extra mode-specific information.
-* fail
-* If a non-zero function value is returned, a pointer to the
-* Object that caused the failure is returned at "*fail". This may
-* be "this" or it may be an Object contained within "this". Note,
-* the Object's reference count is not incremented, and so the
-* returned pointer should not be annulled. A NULL pointer is
-* returned if this function returns a value of zero.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A local status value:
-* 0 - Success
-* 1 - Could not lock or unlock the object because it was already
-* locked by another thread.
-* 2 - Failed to lock a POSIX mutex
-* 3 - Failed to unlock a POSIX mutex
-* 4 - Bad "mode" value supplied.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-*/
-
-/* Local Variables: */
- AstRegion *this; /* Pointer to Region structure */
- int result; /* Returned status value */
-
-/* Initialise */
- result = 0;
-
-/* Check the supplied pointer is not NULL. */
- if( !this_object ) return result;
-
-/* Obtain a pointers to the Region structure. */
- this = (AstRegion *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
- if( !result ) result = (*parent_managelock)( this_object, mode, extra,
- fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
- the supplied Object. */
- if( !result ) result = astManageLock( this->frameset, mode, extra, fail );
- if( !result ) result = astManageLock( this->points, mode, extra, fail );
- if( !result ) result = astManageLock( this->unc, mode, extra, fail );
- if( !result ) result = astManageLock( this->defunc, mode, extra, fail );
- if( !result ) result = astManageLock( this->basemesh, mode, extra, fail );
- if( !result ) result = astManageLock( this->basegrid, mode, extra, fail );
-
- return result;
-
-}
-#endif
-
-static AstRegion *MapRegion( AstRegion *this, AstMapping *map0,
- AstFrame *frame0, int *status ) {
-/*
-*+
-* Name:
-* astMapRegion
-
-* Purpose:
-* Transform a Region into a new Frame using a given Mapping.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "region.h"
-* AstRegion *astMapRegion( AstRegion *this, AstMapping *map,
-* AstFrame *frame )
-
-* Class Membership:
-* Region method.
-
-* Description:
-* This function returns a pointer to a new Region which corresponds to
-* supplied Region in some other specified coordinate system. A
-* Mapping is supplied which transforms positions between the old and new
-* coordinate systems. The new Region may not be of the same class as
-* the original region.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* map
-* Pointer to a Mapping which transforms positions from the
-* coordinate system represented by the supplied Region to the
-* coordinate system specified by "frame". The supplied Mapping should
-* define both forward and inverse transformations, and these
-* transformations should form a genuine inverse pair. That is,
-* transforming a position using the forward transformation and then
-* using the inverse transformation should produce the original input
-* position. Some Mapping classes (such as PermMap, MathMap, SphMap)
-* can result in Mappings for which this is not true.
-* frame
-* Pointer to a Frame describing the coordinate system in which
-* the new Region is required.
-
-* Returned Value:
-* astMapRegion()
-* A pointer to a new Region. This Region will represent the area
-* within the coordinate system specified by "frame" which corresponds
-* to the supplied Region.
-
-* Notes:
-* - This is the protected implementation of this function - it does
-* not simplify the returned Region. The public implementation is
-* astMapRegionID, which simplifies the returned Region.
-* - A null Object pointer (AST__NULL) will be returned if this
-* function is invoked with the AST error status set, or if it
-* should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstFrame *frame;
- AstFrameSet *fs;
- AstMapping *map;
- AstPointSet *ps2;
- AstPointSet *ps1;
- AstPointSet *pst;
- AstRegion *result;
- double **ptr1;
- double **ptr2;
- int i;
- int icurr;
- int j;
- int nax1;
- int nax2;
- int np;
- int ok;
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If a FrameSet was supplied for the Mapping, use the base->current
- Mapping */
- if( astIsAFrameSet( map0 ) ) {
- map = astGetMapping( (AstFrameSet *) map0, AST__BASE, AST__CURRENT );
- } else {
- map = astClone( map0 );
- }
-
-/* If a FrameSet was supplied for the Frame, use the current Frame. */
- if( astIsAFrameSet( frame0 ) ) {
- frame = astGetFrame( (AstFrameSet *) frame0, AST__CURRENT );
- } else {
- frame = astClone( frame0 );
- }
-
-/* First check the Mapping is suitable. It must defined both a forward
- and an inverse Mapping. */
- if( !astGetTranInverse( map ) ) {
- astError( AST__NODEF, "astMapRegion(%s): The supplied %s does not "
- "define an inverse transformation.", status, astGetClass( this ),
- astGetClass( map ) );
- } else if( !astGetTranForward( map ) ) {
- astError( AST__NODEF, "astMapRegion(%s): The supplied %s does not "
- "define a forward transformation.", status, astGetClass( this ),
- astGetClass( map ) );
- }
-
-/* It must not introduce any bad axis values. We can only perform this
- test reliably if the supplied Region has not bad axis values. */
- ps1 = this->points;
- if( ps1 ) {
- nax1 = astGetNcoord( ps1 );
- np = astGetNpoint( ps1 );
- ptr1 = astGetPoints( ps1 );
- if( ptr1 ) {
- ok = 1;
- for( i = 0; i < nax1 && ok; i++ ){
- for( j = 0; j < np; j++ ) {
- if( ptr1[ i ][ j ] == AST__BAD ){
- ok = 0;
- break;
- }
- }
- }
- if( ok ) {
- pst = astRegTransform( this, ps1, 1, NULL, NULL );
- ps2 = astTransform( map, pst, 1, NULL );
- nax2 = astGetNcoord( ps2 );
- ptr2 = astGetPoints( ps2 );
- if( ptr2 ) {
- for( i = 0; i < nax2 && ok; i++ ){
- for( j = 0; j < np; j++ ) {
- if( ptr2[ i ][ j ] == AST__BAD ){
- ok = 0;
- break;
- }
- }
- }
- if( !ok ) {
- astError( AST__NODEF, "astMapRegion(%s): The region which "
- "results from using the supplied %s to transform "
- "the supplied %s is undefined.", status, astGetClass( this ),
- astGetClass( map ), astGetClass( this ) );
- }
- }
- ps2 = astAnnul( ps2 );
- pst = astAnnul( pst );
- }
- }
- }
-
-/* Take a deep copy of the supplied Region. */
- result = astCopy( this );
-
-/* Get a pointer to the encapsulated FrameSet. */
- if( astOK ) {
- fs = result->frameset;
-
-/* Add in the new Frame and Mapping. First note the index of the original
- current Frame. */
- icurr = astGetCurrent( fs );
- astAddFrame( fs, AST__CURRENT, map, frame );
-
-/* Remove the original current Frame. */
- astRemoveFrame( fs, icurr );
-
-/* The base and current Frames of the resulting FrameSet are now (in
- general) different and so the Region should include its FrameSet in any
- Dump. */
- astSetRegionFS( result, 1 );
- }
-
-/* Since the Mapping has been changed, any cached information calculated
- on the basis of the Mapping properties may no longer be up to date. */
- astResetCache( this );
-
-/* Free resources */
- map = astAnnul( map );
- frame = astAnnul( frame );
-
-/* If not OK, annul the returned pointer. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-/*
-*++
-* Name:
-c astMask<X>
-f AST_MASK<X>
-
-* Purpose:
-* Mask a region of a data grid.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "region.h"
-c int astMask<X>( AstRegion *this, AstMapping *map, int inside, int ndim,
-c const int lbnd[], const int ubnd[], <Xtype> in[],
-c <Xtype> val )
-f RESULT = AST_MASK<X>( THIS, MAP, INSIDE, NDIM, LBND, UBND, IN, VAL,
-f STATUS )
-
-* Class Membership:
-* Mapping method.
-
-* Description:
-* This is a set of functions for masking out regions within gridded data
-* (e.g. an image). The functions modifies a given data grid by
-* assigning a specified value to all samples which are inside (or outside
-c if "inside" is zero)
-f if INSIDE is .FALSE.)
-* the specified Region.
-*
-* You should use a masking function which matches the numerical
-* type of the data you are processing by replacing <X> in
-c the generic function name astMask<X> by an appropriate 1- or
-f the generic function name AST_MASK<X> by an appropriate 1- or
-* 2-character type code. For example, if you are masking data
-c with type "float", you should use the function astMaskF (see
-f with type REAL, you should use the function AST_MASKR (see
-* the "Data Type Codes" section below for the codes appropriate to
-* other numerical types).
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to a Region.
-c map
-f MAP = INTEGER (Given)
-* Pointer to a Mapping. The forward transformation should map
-* positions in the coordinate system of the supplied Region
-* into pixel coordinates as defined by the
-c "lbnd" and "ubnd" parameters. A NULL pointer
-f LBND and UBND arguments. A value of AST__NULL
-* can be supplied if the coordinate system of the supplied Region
-* corresponds to pixel coordinates. This is equivalent to
-* supplying a UnitMap.
-*
-* The number of inputs for this Mapping (as given by its Nin attribute)
-* should match the number of axes in the supplied Region (as given
-* by the Naxes attribute of the Region).
-* The number of outputs for the Mapping (as given by its Nout attribute)
-* should match the number of
-c grid dimensions given by the value of "ndim"
-f grid dimensions given by the value of NDIM
-* below.
-c inside
-f INSIDE = INTEGER (Given)
-* A boolean value which indicates which pixel are to be masked. If
-c a non-zero value
-f .TRUE.
-* is supplied, then all grid pixels with centres inside the supplied
-* Region are assigned the value given by
-c "val",
-f VAL,
-* and all other pixels are left unchanged. If
-c zero
-f .FALSE.
-* is supplied, then all grid pixels with centres not inside the supplied
-* Region are assigned the value given by
-c "val",
-f VAL,
-* and all other pixels are left unchanged. Note, the Negated
-* attribute of the Region is used to determine which pixel are
-* inside the Region and which are outside. So the inside of a Region
-* which has not been negated is the same as the outside of the
-* corresponding negated Region.
-*
-* For types of Region such as PointList which have zero volume,
-* pixel centres will rarely fall exactly within the Region. For
-* this reason, the inclusion criterion is changed for zero-volume
-* Regions so that pixels are included (or excluded) if any part of
-* the Region passes through the pixel. For a PointList, this means
-* that pixels are included (or excluded) if they contain at least
-* one of the points listed in the PointList.
-c ndim
-f NDIM = INTEGER (Given)
-* The number of dimensions in the input grid. This should be at
-* least one.
-c lbnd
-f LBND( NDIM ) = INTEGER (Given)
-c Pointer to an array of integers, with "ndim" elements,
-f An array
-* containing the coordinates of the centre of the first pixel
-* in the input grid along each dimension.
-c ubnd
-f UBND( NDIM ) = INTEGER (Given)
-c Pointer to an array of integers, with "ndim" elements,
-f An array
-* containing the coordinates of the centre of the last pixel in
-* the input grid along each dimension.
-*
-c Note that "lbnd" and "ubnd" together define the shape
-f Note that LBND and UBND together define the shape
-* and size of the input grid, its extent along a particular
-c (j'th) dimension being ubnd[j]-lbnd[j]+1 (assuming the
-c index "j" to be zero-based). They also define
-f (J'th) dimension being UBND(J)-LBND(J)+1. They also define
-* the input grid's coordinate system, each pixel having unit
-* extent along each dimension with integral coordinate values
-* at its centre.
-c in
-f IN( * ) = <Xtype> (Given and Returned)
-c Pointer to an array, with one element for each pixel in the
-f An array, with one element for each pixel in the
-* input grid, containing the data to be masked. The
-* numerical type of this array should match the 1- or
-* 2-character type code appended to the function name (e.g. if
-c you are using astMaskF, the type of each array element
-c should be "float").
-f you are using AST_MASKR, the type of each array element
-f should be REAL).
-*
-* The storage order of data within this array should be such
-* that the index of the first grid dimension varies most
-* rapidly and that of the final dimension least rapidly
-c (i.e. Fortran array indexing is used).
-f (i.e. normal Fortran array storage order).
-*
-* On exit, the samples specified by
-c "inside" are set to the value of "val".
-f INSIDE are set to the value of VAL.
-* All other samples are left unchanged.
-c val
-f VAL = <Xtype> (Given)
-* This argument should have the same type as the elements of
-c the "in" array. It specifies the value used to flag the
-f the IN array. It specifies the value used to flag the
-* masked data (see
-c "inside").
-f INSIDE).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astMask<X>()
-f AST_MASK<X> = INTEGER
-* The number of pixels to which a value of
-c "badval"
-f BADVAL
-* has been assigned.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-
-* Data Type Codes:
-* To select the appropriate masking function, you should
-c replace <X> in the generic function name astMask<X> with a
-f replace <X> in the generic function name AST_MASK<X> with a
-* 1- or 2-character data type code, so as to match the numerical
-* type <Xtype> of the data you are processing, as follows:
-c - D: double
-c - F: float
-c - L: long int
-c - UL: unsigned long int
-c - I: int
-c - UI: unsigned int
-c - S: short int
-c - US: unsigned short int
-c - B: byte (signed char)
-c - UB: unsigned byte (unsigned char)
-f - D: DOUBLE PRECISION
-f - R: REAL
-f - I: INTEGER
-f - UI: INTEGER (treated as unsigned)
-f - S: INTEGER*2 (short integer)
-f - US: INTEGER*2 (short integer, treated as unsigned)
-f - B: BYTE (treated as signed)
-f - UB: BYTE (treated as unsigned)
-*
-c For example, astMaskD would be used to process "double"
-c data, while astMaskS would be used to process "short int"
-c data, etc.
-f For example, AST_MASKD would be used to process DOUBLE
-f PRECISION data, while AST_MASKS would be used to process
-f short integer data (stored in an INTEGER*2 array), etc.
-f
-f For compatibility with other Starlink facilities, the codes W
-f and UW are provided as synonyms for S and US respectively (but
-f only in the Fortran interface to AST).
-
-*--
-*/
-/* Define a macro to implement the function for a specific data
- type. */
-#define MAKE_MASK(X,Xtype) \
-static int Mask##X( AstRegion *this, AstMapping *map, int inside, int ndim, \
- const int lbnd[], const int ubnd[], \
- Xtype in[], Xtype val, int *status ) { \
-\
-/* Local Variables: */ \
- AstFrame *grid_frame; /* Pointer to Frame describing grid coords */ \
- AstRegion *used_region; /* Pointer to Region to be used by astResample */ \
- Xtype *c; /* Pointer to next array element */ \
- Xtype *d; /* Pointer to next array element */ \
- Xtype *out; /* Pointer to the array used for resample output */ \
- Xtype *tmp_out; /* Pointer to temporary output array */ \
- double *lbndgd; /* Pointer to array holding lower grid bounds */ \
- double *ubndgd; /* Pointer to array holding upper grid bounds */ \
- int *lbndg; /* Pointer to array holding lower grid bounds */ \
- int *ubndg; /* Pointer to array holding upper grid bounds */ \
- int idim; /* Loop counter for coordinate dimensions */ \
- int ipix; /* Loop counter for pixel index */ \
- int nax; /* Number of Region axes */ \
- int nin; /* Number of Mapping input coordinates */ \
- int nout; /* Number of Mapping output coordinates */ \
- int npix; /* Number of pixels in supplied array */ \
- int npixg; /* Number of pixels in bounding box */ \
- int result; /* Result value to return */ \
-\
-/* Initialise. */ \
- result = 0; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* Obtain value for the Naxes attribute of the Region. */ \
- nax = astGetNaxes( this ); \
-\
-/* If supplied, obtain values for the Nin and Nout attributes of the Mapping. */ \
- if( map ) { \
- nin = astGetNin( map ); \
- nout = astGetNout( map ); \
-\
-/* If OK, check that the number of mapping inputs matches the \
- number of axes in the Region. Report an error if necessary. */ \
- if ( astOK && ( nax != nin ) ) { \
- astError( AST__NGDIN, "astMask"#X"(%s): Bad number of mapping " \
- "inputs (%d).", status, astGetClass( this ), nin ); \
- astError( AST__NGDIN, "The %s given requires %d coordinate value%s " \
- "to specify a position.", status, \
- astGetClass( this ), nax, ( nax == 1 ) ? "" : "s" ); \
- } \
-\
-/* If OK, check that the number of mapping outputs matches the \
- number of grid dimensions. Report an error if necessary. */ \
- if ( astOK && ( ndim != nout ) ) { \
- astError( AST__NGDIN, "astMask"#X"(%s): Bad number of mapping " \
- "outputs (%d).", status, astGetClass( this ), nout ); \
- astError( AST__NGDIN, "The pixel grid requires %d coordinate value%s " \
- "to specify a position.", status, \
- ndim, ( ndim == 1 ) ? "" : "s" ); \
- } \
-\
-/* Create a new Region by mapping the supplied Region with the supplied \
- Mapping. The resulting Region represents a region in grid coordinates. */ \
- grid_frame = astFrame( ndim, "Domain=grid", status ); \
- used_region = astMapRegion( this, map, grid_frame ); \
- grid_frame = astAnnul( grid_frame ); \
-\
-/* If no Mapping was supplied check that the number of grid dimensions \
- matches the number of axes in the Region.*/ \
- } else if ( astOK && ( ( ndim != nax ) || ( ndim < 1 ) ) ) { \
- used_region = NULL; \
- astError( AST__NGDIN, "astMask"#X"(%s): Bad number of input grid " \
- "dimensions (%d).", status, astGetClass( this ), ndim ); \
- if ( ndim != nax ) { \
- astError( AST__NGDIN, "The %s given requires %d coordinate value%s " \
- "to specify an input position.", status, \
- astGetClass( this ), nax, ( nax == 1 ) ? "" : "s" ); \
- } \
-\
-/* If no Mapping was supplied and the parameters look OK, clone the \
- supplied Region pointer for use later on. */ \
- } else { \
- used_region = astClone( this ); \
- } \
-\
-/* Check that the lower and upper bounds of the input grid are \
- consistent. Report an error if any pair is not. */ \
- if ( astOK ) { \
- for ( idim = 0; idim < ndim; idim++ ) { \
- if ( lbnd[ idim ] > ubnd[ idim ] ) { \
- astError( AST__GBDIN, "astMask"#X"(%s): Lower bound of " \
- "input grid (%d) exceeds corresponding upper bound " \
- "(%d).", status, astGetClass( this ), \
- lbnd[ idim ], ubnd[ idim ] ); \
- astError( AST__GBDIN, "Error in input dimension %d.", status, \
- idim + 1 ); \
- break; \
- } \
- } \
- } \
-\
-/* Allocate memory, and then get the bounding box of this new Region in its \
- current Frame (grid coordinates). This bounding box assumes the region \
- has not been negated. */ \
- lbndg = astMalloc( sizeof( int )*(size_t) ndim ); \
- ubndg = astMalloc( sizeof( int )*(size_t) ndim ); \
- lbndgd = astMalloc( sizeof( double )*(size_t) ndim ); \
- ubndgd = astMalloc( sizeof( double )*(size_t) ndim ); \
- if( astOK ) { \
- astGetRegionBounds( used_region, lbndgd, ubndgd ); \
-\
-/* We convert the floating point bounds to integer pixel bounds, and at \
- the same time expand the box by 2 pixels at each edge to ensure that \
- rounding errors etc do not cause any of the Region to fall outside (or \
- on) the box. Do not let the expanded box extend outside the supplied \
- array bounds. Also note the total number of pixels in the supplied \
- array, and in the bounding box. */ \
- npix = 1; \
- npixg = 1; \
- for ( idim = 0; idim < ndim; idim++ ) { \
- lbndg[ idim ] = MAX( lbnd[ idim ], (int)( lbndgd[ idim ] + 0.5 ) - 2 ); \
- ubndg[ idim ] = MIN( ubnd[ idim ], (int)( ubndgd[ idim ] + 0.5 ) + 2 ); \
- npix *= ( ubnd[ idim ] - lbnd[ idim ] + 1 ); \
- npixg *= ( ubndg[ idim ] - lbndg[ idim ] + 1 ); \
- if( npixg <= 0 ) break; \
- } \
-\
-/* If the bounding box is null, return without action. */ \
- if( npixg > 0 ) { \
-\
-/* All points outside this box are either all inside, or all outside, the \
- Region. So we can speed up processing by setting all the points which are \
- outside the box to the supplied data value (if required). This is \
- faster than checking each point individually using the Transform method \
- of the Region. We do this by supplying an alternative output array to \
- the resampling function below, which has been pre-filled with "val" at \
- every pixel. */ \
- if( ( inside != 0 ) == ( astGetNegated( used_region ) != 0 ) ) { \
-\
-/* Allocate memory for the alternative output array, and fill it with \
- "val". */ \
- tmp_out = astMalloc( sizeof( Xtype )*(size_t) npix ); \
- if( tmp_out ) { \
- c = tmp_out; \
- for( ipix = 0; ipix < npix; ipix++ ) *(c++) = val; \
- result = npix - npixg; \
- } \
-\
-/* Indicate that we will use this temporary array rather than the \
- supplied array. */ \
- out = tmp_out; \
-\
-/* If the outside of the grid box is outside the region of interest it \
- will be unchanged in the resturned array. Therefore we can use the \
- supplied array as the output array below. */ \
- } else { \
- tmp_out = NULL; \
- out = in; \
- } \
-\
-/* Temporarily invert the Region if required. The Region Transform methods \
- leave interior points unchanged and assign AST__BAD to exterior points. \
- This is the opposite of what we want (which is to leave exterior \
- points unchanged and assign VAL to interior points), so we negate the \
- region if the inside is to be assigned the value VAL.*/ \
- if( inside ) astNegate( used_region ); \
-\
-/* Invoke astResample to mask just the region inside the bounding box found \
- above (specified by lbndg and ubndg), since all the points outside this \
- box will already contain their required value. */ \
- result += astResample##X( used_region, ndim, lbnd, ubnd, in, NULL, AST__NEAREST, \
- NULL, NULL, 0, 0.0, 100, val, ndim, \
- lbnd, ubnd, lbndg, ubndg, out, NULL ); \
-\
-/* Revert to the original setting of the Negated attribute. */ \
- if( inside ) astNegate( used_region ); \
-\
-/* If required, copy the output data from the temporary output array to \
- the supplied array, and then free the temporary output array. */ \
- if( tmp_out ) { \
- c = tmp_out; \
- d = in; \
- for( ipix = 0; ipix < npix; ipix++ ) *(d++) = *(c++); \
- tmp_out = astFree( tmp_out ); \
- }\
- }\
- } \
-\
-/* Free resources */ \
- ubndg = astFree( ubndg ); \
- lbndg = astFree( lbndg ); \
- ubndgd = astFree( ubndgd ); \
- lbndgd = astFree( lbndgd ); \
- used_region = astAnnul( used_region ); \
-\
-/* If an error occurred, clear the returned result. */ \
- if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
- return result; \
-}
-
-/* Expand the above macro to generate a function for each required
- data type. */
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-MAKE_MASK(LD,long double)
-#endif
-MAKE_MASK(D,double)
-MAKE_MASK(L,long int)
-MAKE_MASK(UL,unsigned long int)
-MAKE_MASK(I,int)
-MAKE_MASK(UI,unsigned int)
-MAKE_MASK(S,short int)
-MAKE_MASK(US,unsigned short int)
-MAKE_MASK(B,signed char)
-MAKE_MASK(UB,unsigned char)
-MAKE_MASK(F,float)
-
-/* Undefine the macro. */
-#undef MAKE_MASK
-
-
-
-static int Match( AstFrame *this_frame, AstFrame *target,
- int **template_axes, int **target_axes,
- AstMapping **map, AstFrame **result, int *status ) {
-/*
-* Name:
-* Match
-
-* Purpose:
-* Determine if conversion is possible between two coordinate systems.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* int Match( AstFrame *template, AstFrame *target,
-* int **template_axes, int **target_axes,
-* AstMapping **map, AstFrame **result, int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astMatch
-* method inherited from the Frame class).
-
-* Description:
-* This function matches the current Frame of a "template" Region
-* to a "target" frame and determines whether it is possible to
-* convert coordinates between them. If it is, a Mapping that
-* performs the transformation is returned along with a new Frame
-* that describes the coordinate system that results when this
-* Mapping is applied to the current Frame of the target
-* Region. In addition, information is returned to allow the axes
-* in this "result" Frame to be associated with the corresponding
-* axes in the target and template Frames from which they are
-* derived.
-
-* Parameters:
-* template
-* Pointer to the template Region, whose current Frame
-* describes the coordinate system (or set of possible
-* coordinate systems) into which we wish to convert our
-* coordinates.
-* target
-* Pointer to the target Frame. This describes the coordinate
-* system in which we already have coordinates.
-* template_axes
-* Address of a location where a pointer to int will be returned
-* if the requested coordinate conversion is possible. This
-* pointer will point at a dynamically allocated array of
-* integers with one element for each axis of the "result" Frame
-* (see below). It must be freed by the caller (using astFree)
-* when no longer required.
-*
-* For each axis in the result Frame, the corresponding element
-* of this array will return the index of the axis in the
-* template Region's current Frame from which it is
-* derived. If it is not derived from any template Region
-* axis, a value of -1 will be returned instead.
-* target_axes
-* Address of a location where a pointer to int will be returned
-* if the requested coordinate conversion is possible. This
-* pointer will point at a dynamically allocated array of
-* integers with one element for each axis of the "result" Frame
-* (see below). It must be freed by the caller (using astFree)
-* when no longer required.
-*
-* For each axis in the result Frame, the corresponding element
-* of this array will return the index of the target Frame axis
-* from which it is derived. If it is not derived from any
-* target Frame axis, a value of -1 will be returned instead.
-* map
-* Address of a location where a pointer to a new Mapping will
-* be returned if the requested coordinate conversion is
-* possible. If returned, the forward transformation of this
-* Mapping may be used to convert coordinates between the target
-* Frame and the result Frame (see below) and the inverse
-* transformation will convert in the opposite direction.
-* result
-* Address of a location where a pointer to a new Frame will be
-* returned if the requested coordinate conversion is
-* possible. If returned, this Frame describes the coordinate
-* system that results from applying the returned Mapping
-* (above) to the "target" coordinate system. In general, this
-* Frame will combine attributes from (and will therefore be
-* more specific than) both the target Frame and the current
-* Frame of the template Region. In particular, when the
-* template allows the possibility of transformaing to any one
-* of a set of alternative coordinate systems, the "result"
-* Frame will indicate which of the alternatives was used.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if the requested coordinate
-* conversion is possible. Otherwise zero is returned (this will
-* not in itself result in an error condition).
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to Region's current Frame */
- int match; /* Result to be returned */
-
-/* Initialise the returned values. */
- *template_axes = NULL;
- *target_axes = NULL;
- *map = NULL;
- *result = NULL;
- match = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return match;
-
-/* Invoke the parent astMatch method on the current Frame within the
- encapsulated FrameSet within the Region. */
- fr = astGetFrame( ((AstRegion *) this_frame)->frameset, AST__CURRENT );
- match = astMatch( fr, target, template_axes, target_axes, map, result );
- fr = astAnnul( fr );
-
-/* Return the result. */
- return match;
-}
-
-static void MatchAxes( AstFrame *frm1_frame, AstFrame *frm2, int *axes,
- int *status ) {
-/*
-* Name:
-* MatchAxes
-
-* Purpose:
-* Find any corresponding axes in two Frames.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* void MatchAxes( AstFrame *frm1, AstFrame *frm2, int *axes )
-* int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astMatchAxes
-* method inherited from the Frame class).
-
-* Description:
-* This function looks for corresponding axes within two supplied
-* Frames. An array of integers is returned that contains an element
-* for each axis in the second supplied Frame. An element in this array
-* will be set to zero if the associated axis within the second Frame
-* has no corresponding axis within the first Frame. Otherwise, it
-* will be set to the index (a non-zero positive integer) of the
-* corresponding axis within the first supplied Frame.
-
-* Parameters:
-* frm1
-* Pointer to the first Frame.
-* frm2
-* Pointer to the second Frame.
-* axes
-* Pointer to an
-* integer array in which to return the indices of the axes (within
-* the second Frame) that correspond to each axis within the first
-* Frame. Axis indices start at 1. A value of zero will be stored
-* in the returned array for each axis in the first Frame that has
-* no corresponding axis in the second Frame.
-*
-* The number of elements in this array must be greater than or
-* equal to the number of axes in the first Frame.
-* status
-* Pointer to inherited status value.
-
-* Notes:
-* - Corresponding axes are identified by the fact that a Mapping
-* can be found between them using astFindFrame or astConvert. Thus,
-* "corresponding axes" are not necessarily identical. For instance,
-* SkyFrame axes in two Frames will match even if they describe
-* different celestial coordinate systems
-*/
-
-/* Local Variables: */
- AstFrame *frm1; /* Pointer to Region's current Frame */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Invoke the astMatchAxesX method on frm2, passing it the current Frame
- within the encapsulated FrameSet within the Region as "frm1". */
- frm1 = astGetFrame( ((AstRegion *) frm1_frame)->frameset, AST__CURRENT );
- astMatchAxesX( frm2, frm1, axes );
- frm1 = astAnnul( frm1 );
-}
-
-static void MatchAxesX( AstFrame *frm2_frame, AstFrame *frm1, int *axes,
- int *status ) {
-/*
-* Name:
-* MatchAxesX
-
-* Purpose:
-* Find any corresponding axes in two Frames.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* void MatchAxesX( AstFrame *frm2, AstFrame *frm1, int *axes )
-* int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astMatchAxesX
-* method inherited from the Frame class).
-
-* This function looks for corresponding axes within two supplied
-* Frames. An array of integers is returned that contains an element
-* for each axis in the second supplied Frame. An element in this array
-* will be set to zero if the associated axis within the second Frame
-* has no corresponding axis within the first Frame. Otherwise, it
-* will be set to the index (a non-zero positive integer) of the
-* corresponding axis within the first supplied Frame.
-
-* Parameters:
-* frm2
-* Pointer to the second Frame.
-* frm1
-* Pointer to the first Frame.
-* axes
-* Pointer to an integer array in which to return the indices of
-* the axes (within the first Frame) that correspond to each axis
-* within the second Frame. Axis indices start at 1. A value of zero
-* will be stored in the returned array for each axis in the second
-* Frame that has no corresponding axis in the first Frame.
-*
-* The number of elements in this array must be greater than or
-* equal to the number of axes in the second Frame.
-* status
-* Pointer to inherited status value.
-
-* Notes:
-* - Corresponding axes are identified by the fact that a Mapping
-* can be found between them using astFindFrame or astConvert. Thus,
-* "corresponding axes" are not necessarily identical. For instance,
-* SkyFrame axes in two Frames will match even if they describe
-* different celestial coordinate systems
-*/
-
-/* Local Variables: */
- AstFrame *frm2;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the current Frame in the FrameSet. */
- frm2 = astGetFrame( ((AstRegion *) frm2_frame)->frameset, AST__CURRENT );
-
-/* Invoke the astMatchAxesX on the current Frame. */
- astMatchAxesX( frm2, frm1, axes );
-
-/* Free resources */
- frm2 = astAnnul( frm2 );
-}
-
-static void Negate( AstRegion *this, int *status ) {
-/*
-*++
-* Name:
-c astNegate
-f AST_NEGATE
-
-* Purpose:
-* Negate the area represented by a Region.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "region.h"
-c void astNegate( AstRegion *this )
-f CALL AST_NEGATE( THIS, STATUS )
-
-* Class Membership:
-* Region method.
-
-* Description:
-* This function negates the area represented by a Region. That is,
-* points which were previously inside the region will then be
-* outside, and points which were outside will be inside. This is
-* acomplished by toggling the state of the Negated attribute for
-* the supplied region.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Region.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-*--
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Toggle the Negated attribute. */
- astSetNegated( this, astGetNegated( this ) ? 0 : 1 );
-
-}
-
-static void Norm( AstFrame *this_frame, double value[], int *status ) {
-/*
-* Name:
-* Norm
-
-* Purpose:
-* Normalise a set of Region coordinates.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* void Norm( AstAxis *this, double value[], int *status )
-
-* Class Membership:
-* Region member function (over-rides the astNorm method
-* inherited from the Frame class).
-
-* Description:
-* This function converts a set of coordinate values for the
-* current Frame of a Region, which might potentially be
-* unsuitable for display to a user (for instance, may lie outside
-* the expected range of values) into a set of acceptable
-* alternative values suitable for display.
-*
-* Typically, for Frames whose axes represent cyclic values (such
-* as angles or positions on the sky), this function wraps an
-* arbitrary set of coordinates, so that they lie within the first
-* cycle (say zero to 2*pi or -pi/2 to +pi/2). For Frames with
-* ordinary linear axes, without constraints, this function will
-* typically return the original coordinate values unchanged.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* value
-* An array of double, with one element for each Region axis.
-* This should contain the initial set of coordinate values,
-* which will be modified in place.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to the current Frame */
- AstRegion *this; /* Pointer to the Region structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's current Frame and invoke this
- Frame's astNorm method to obtain the new values. Annul the Frame
- pointer afterwards. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
- astNorm( fr, value );
- fr = astAnnul( fr );
-}
-
-static void NormBox( AstFrame *this_frame, double lbnd[], double ubnd[],
- AstMapping *reg, int *status ) {
-/*
-* Name:
-* NormBox
-
-* Purpose:
-* Extend a box to include effect of any singularities in the Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* void astNormBox( AstFrame *this, double lbnd[], double ubnd[],
-* AstMapping *reg, int *status )
-
-* Class Membership:
-* Region member function (over-rides the astNormBox method inherited
-* from the Frame class).
-
-* Description:
-* This function modifies a supplied box to include the effect of any
-* singularities in the co-ordinate system represented by the Frame.
-* For a normal Cartesian coordinate system, the box will be returned
-* unchanged. Other classes of Frame may do other things. For instance,
-* a SkyFrame will check to see if the box contains either the north
-* or south pole and extend the box appropriately.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* lbnd
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). Initially, this should contain a set of
-* lower axis bounds for the box. They will be modified on exit
-* to include the effect of any singularities within the box.
-* ubnd
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). Initially, this should contain a set of
-* upper axis bounds for the box. They will be modified on exit
-* to include the effect of any singularities within the box.
-* reg
-* A Mapping which should be used to test if any singular points are
-* inside or outside the box. The Mapping should leave an input
-* position unchanged if the point is inside the box, and should
-* set all bad if the point is outside the box.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to the current Frame */
- AstRegion *this; /* Pointer to the Region structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's current Frame and invoke this
- Frame's astNormBox method to obtain the new values. Annul the Frame
- pointer afterwards. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
- astNormBox( fr, lbnd, ubnd, reg );
- fr = astAnnul( fr );
-}
-
-static void Offset( AstFrame *this_frame, const double point1[],
- const double point2[], double offset, double point3[], int *status ) {
-/*
-* Name:
-* Offset
-
-* Purpose:
-* Calculate an offset along a geodesic curve.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-* #include "region.h"
-* void Offset( AstFrame *this,
-* const double point1[], const double point2[],
-* double offset, double point3[], int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astOffset
-* method inherited from the Frame class).
-
-* Description:
-* This function finds the Region coordinate values of a point
-* which is offset a specified distance along the geodesic curve
-* between two other points.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* point1
-* An array of double, with one element for each Region axis.
-* This should contain the coordinates of the point marking the
-* start of the geodesic curve.
-* point2
-* An array of double, with one element for each Region axis
-* This should contain the coordinates of the point marking the
-* end of the geodesic curve.
-* offset
-* The required offset from the first point along the geodesic
-* curve. If this is positive, it will be towards the second
-* point. If it is negative, it will be in the opposite
-* direction. This offset need not imply a position lying
-* between the two points given, as the curve will be
-* extrapolated if necessary.
-* point3
-* An array of double, with one element for each Region axis
-* in which the coordinates of the required point will be
-* returned.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The geodesic curve used by this function is the path of
-* shortest distance between two points, as defined by the
-* astDistance function.
-* - This function will return "bad" coordinate values (AST__BAD)
-* if any of the input coordinates has this value.
-* - "Bad" coordinate values will also be returned if the two
-* points supplied are coincident (or otherwise fail to uniquely
-* specify a geodesic curve) but the requested offset is non-zero.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstRegion *this; /* Pointer to the Region structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's current Frame and invoke this
- Frame's astOffset method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
- astOffset( fr, point1, point2, offset, point3 );
- fr = astAnnul( fr );
-}
-
-static double Offset2( AstFrame *this_frame, const double point1[2],
- double angle, double offset, double point2[2], int *status ){
-/*
-* Name:
-* Offset2
-
-* Purpose:
-* Calculate an offset along a geodesic curve in a 2D Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* double Offset2( AstFrame *this, const double point1[2], double angle,
-* double offset, double point2[2], int *status );
-
-* Class Membership:
-* Region member function (over-rides the protected astOffset2
-* method inherited from the Frame class).
-
-* Description:
-* This function finds the Frame coordinate values of a point which
-* is offset a specified distance along the geodesic curve at a
-* given angle from a specified starting point. It can only be
-* used with 2-dimensional Frames.
-*
-* For example, in a basic Frame, this offset will be along the
-* straight line joining two points. For a more specialised Frame
-* describing a sky coordinate system, however, it would be along
-* the great circle passing through two sky positions.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* point1
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). This should contain the coordinates of the
-* point marking the start of the geodesic curve.
-* angle
-* The angle (in radians) from the positive direction of the second
-* axis, to the direction of the required position, as seen from
-* the starting position. Positive rotation is in the sense of
-* rotation from the positive direction of axis 2 to the positive
-* direction of axis 1.
-* offset
-* The required offset from the first point along the geodesic
-* curve. If this is positive, it will be in the direction of the
-* given angle. If it is negative, it will be in the opposite
-* direction.
-* point2
-* An array of double, with one element for each Frame axis
-* in which the coordinates of the required point will be returned.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The direction of the geodesic curve at the end point. That is, the
-* angle (in radians) between the positive direction of the second
-* axis and the continuation of the geodesic curve at the requested
-* end point. Positive rotation is in the sense of rotation from
-* the positive direction of axis 2 to the positive direction of axis 1.
-
-* Notes:
-* - The geodesic curve used by this function is the path of
-* shortest distance between two points, as defined by the
-* astDistance function.
-* - An error will be reported if the Frame is not 2-dimensional.
-* - This function will return "bad" coordinate values (AST__BAD)
-* if any of the input coordinates has this value.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstRegion *this; /* Pointer to the Region structure */
- double result; /* Value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke the
- astOffset2 method for this Frame. Annul the Frame pointer afterwards. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
- result = astOffset2( fr, point1, angle, offset, point2 );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
- return result;
-}
-
-static int Overlap( AstRegion *this, AstRegion *that, int *status ){
-/*
-*++
-* Name:
-c astOverlap
-f AST_OVERLAP
-
-* Purpose:
-* Test if two regions overlap each other.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "region.h"
-c int astOverlap( AstRegion *this, AstRegion *that )
-f RESULT = AST_OVERLAP( THIS, THAT, STATUS )
-
-* Class Membership:
-* Region method.
-
-* Description:
-* This function returns an integer value indicating if the two
-* supplied Regions overlap. The two Regions are converted to a commnon
-* coordinate system before performing the check. If this conversion is
-* not possible (for instance because the two Regions represent areas in
-* different domains), then the check cannot be performed and a zero value
-* is returned to indicate this.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the first Region.
-c that
-f THAT = INTEGER (Given)
-* Pointer to the second Region.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astOverlap()
-f AST_OVERLAP = INTEGER
-* A value indicating if there is any overlap between the two Regions.
-* Possible values are:
-*
-* 0 - The check could not be performed because the second Region
-* could not be mapped into the coordinate system of the first
-* Region.
-*
-* 1 - There is no overlap between the two Regions.
-*
-* 2 - The first Region is completely inside the second Region.
-*
-* 3 - The second Region is completely inside the first Region.
-*
-* 4 - There is partial overlap between the two Regions.
-*
-* 5 - The Regions are identical to within their uncertainties.
-*
-* 6 - The second Region is the exact negation of the first Region
-* to within their uncertainties.
-
-* Notes:
-* - The returned values 5 and 6 do not check the value of the Closed
-* attribute in the two Regions.
-* - A value of zero will be returned if this function is invoked with the
-* AST error status set, or if it should fail for any reason.
-*--
-
-* Implementation Notes:
-* This function is simply a wrap-up for the protected astOverlapX
-* method which performs the required processing but swaps the order
-* of the two arguments. This is a trick to allow the astOverlap method
-* to be over-ridden by derived classes on the basis of the class of either
-* of the two arguments.
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Invoke the "astOverlapX" method with the two arguments swapped. */
- return astOverlapX( that, this );
-}
-
-static int OverlapX( AstRegion *that, AstRegion *this, int *status ){
-/*
-*+
-* Name:
-* astOverlapX
-
-* Purpose:
-* Test if two regions overlap each other.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "region.h"
-* int astOverlapX( AstRegion *that, AstRegion *this )
-
-* Class Membership:
-* Region method.
-
-* Description:
-* This function performs the processing for the public astOverlap
-* method and has exactly the same interface except that the order
-* of the two arguments is swapped. This is a trick to allow
-* the astOverlap method to be over-ridden by derived classes on
-* the basis of the class of either of its two arguments.
-*
-* See the astOverlap method for details of the interface.
-*-
-*/
-
-/* Local Variables: */
- AstFrame *bfrm_reg1; /* Pointer to base Frame in "reg1" Frame */
- AstFrame *frm_reg1; /* Pointer to current Frame in "reg1" Frame */
- AstFrameSet *fs0; /* FrameSet connecting Region Frames */
- AstFrameSet *fs; /* FrameSet connecting Region Frames */
- AstMapping *cmap; /* Mapping connecting Region Frames */
- AstMapping *map; /* Mapping form "reg2" current to "reg1" base */
- AstMapping *map_reg1; /* Pointer to current->base Mapping in "reg1" */
- AstPointSet *ps1; /* Mesh covering second Region */
- AstPointSet *ps3; /* Mesh covering first Region */
- AstPointSet *ps4; /* Mesh covering first Region */
- AstPointSet *ps2; /* Mesh covering second Region */
- AstPointSet *reg2_mesh; /* Mesh covering second Region */
- AstPointSet *reg1_mesh; /* Mesh covering first Region */
- AstPointSet *reg2_submesh; /* Second Region mesh minus boundary points */
- AstRegion *reg1; /* Region to use as the first Region */
- AstRegion *reg2; /* Region to use as the second Region */
- AstRegion *unc1; /* "unc" mapped into Frame of first Region */
- AstRegion *unc; /* Uncertainty in second Region */
- double **ptr1; /* Pointer to mesh axis values */
- double **ptr; /* Pointer to pointset data */
- double *p; /* Pointer to next axis value */
- int *mask; /* Mask identifying common boundary points */
- int allbad; /* Were all axis values bad? */
- int allgood; /* Were all axis values good? */
- int bnd1; /* Does reg1 have a finite boundary */
- int bnd2; /* Does reg2 have a finite boundary */
- int bnd_that; /* Does "that" have a finite boundary */
- int bnd_this; /* Does "this" have a finite boundary */
- int case1; /* First region inside second region? */
- int first; /* First pass? */
- int good; /* Any good axis values found? */
- int i; /* Mesh axis index */
- int iax; /* Axis index */
- int inv0; /* Original FrameSet Invert flag */
- int ip; /* Index of point */
- int j; /* Mesh point index */
- int nc; /* Number of axis values per point */
- int np; /* Number of points in mesh */
- int result; /* Value to return */
- int reg1_neg; /* Was "reg1" negated to make it bounded? */
- int reg2_neg; /* Was "reg2" negated to make it bounded? */
- int that_neg; /* Was "that" negated to make it bounded? */
- int this_neg; /* Was "this" negated to make it bounded? */
- int touch; /* Do the Regions touch? */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Return 5 if the two Regions are equal using the astEqual method. */
- if( astEqual( this, that ) ) {
- return 5;
-
-/* Return 6 if the two Regions are equal using the Equal method after
- temporarily negating the first. */
- } else {
- astNegate( this );
- result = astEqual( this, that );
- astNegate( this );
- if( result ) return 6;
- }
-
-/* Get a FrameSet which connects the Frame represented by the second Region
- to the Frame represented by the first Region. Check that the conection is
- defined. */
- fs0 = astConvert( that, this, "" );
- if( !fs0 ) return 0;
- inv0 = astGetInvert( fs0 );
-
-/* The rest of this function tests for overlap by representing one of the
- Regions as a mesh of points along its boundary, and then checking to see
- if any of the points in this mesh fall inside or outside the other Region.
- This can only be done if the Region has a boundary of finite length (e.g.
- Circles, Boxes, etc). Other Regions (e.g. some Intervals) do not have
- finite boundaries and consequently report an error if an attempt is made
- to represent them using a boundary mesh. We now therefore check to see if
- either of the two Regions has a finite boundary length. This will be the
- case if the region is bounded, or if it can be made bounded simply by
- negating it. If a Region is unbounded regardless of the setting of its
- Negated flag, then it does not have a finite boundary. We leave the
- Negated attributes (temporaily) set to the values that cause the
- Regions to be bounded. Set flags to indicate if the Regions have been
- negated. */
- bnd_this = astGetBounded( this );
- if( !bnd_this ) {
- astNegate( this );
- bnd_this = astGetBounded( this );
- if( ! bnd_this ) {
- astNegate( this );
- this_neg = 0;
- } else {
- this_neg = 1;
- }
- } else {
- this_neg = 0;
- }
-
- bnd_that = astGetBounded( that );
- if( !bnd_that ) {
- astNegate( that );
- bnd_that = astGetBounded( that );
- if( ! bnd_that ) {
- astNegate( that );
- that_neg = 0;
- } else {
- that_neg = 1;
- }
- } else {
- that_neg = 0;
- }
-
-/* If neither Regions has a finite boundary, then we cannot currently
- determine any overlap, so report an error. Given more time, it
- is probably possible to think of some way of determining overlap
- between two unbounded Regions, but it will probably not be a common
- requirement and so is currently put off to a rainy day. */
- if( !bnd_this && !bnd_that && astOK ) {
- astError( AST__INTER, "astOverlap(Region): Neither of the two "
- "supplied Regions (classes %s and %s) has a finite "
- "boundary.", status, astGetClass(this), astGetClass(that) );
- astError( AST__INTER, "The current implementation of astOverlap "
- "cannot determine the overlap between two Regions "
- "unless at least one of them has a finite boundary." , status);
- }
-
-/* If only one of the two Regions has a finite boundary, we must use its
- mesh first. Choose the finite boundary Region as the "second" region.
- Also store a flag indicating if the first Region has a finite boundary. */
- if( bnd_that ) {
- reg1 = this;
- reg2 = that;
- bnd1 = bnd_this;
- bnd2 = bnd_that;
- reg1_neg = this_neg;
- reg2_neg = that_neg;
- } else {
- reg1 = that;
- reg2 = this;
- bnd1 = bnd_that;
- bnd2 = bnd_this;
- reg1_neg = that_neg;
- reg2_neg = this_neg;
- }
-
-/* We may need to try again with the above selections swapped. We only do
- this once though. Set a flag to indicate that we are about to start the
- first pass. */
- first = 1;
-L1:
-
-/* Get a FrameSet which connects the Frame represented by the second Region
- to the Frame represented by the first Region. Check that the conection is
- defined. */
- fs = astClone( fs0 );
- astSetInvert( fs, (reg2 == that ) ? inv0 : 1 - inv0 );
- if( fs ) {
-
-/* Get a pointer to the Frame represented by the first Region. */
- frm_reg1 = astGetFrame( reg1->frameset, AST__CURRENT );
-
-/* Get a pointer to the Mapping from current to base Frame in the first
- Region. */
- map_reg1 = astGetMapping( reg1->frameset, AST__CURRENT, AST__BASE );
-
-/* Get the Mapping from the current Frame of the second Region to the
- current Frame of the first Region. */
- cmap = astGetMapping( fs, AST__BASE, AST__CURRENT );
-
-/* Combine these Mappings to get the Mapping from current Frame of the
- second region to the base Frame of the first Region. */
- map = (AstMapping *) astCmpMap( cmap, map_reg1, 1, "", status );
-
-/* Get a mesh of points covering the second Region. These points are
- within the current Frame of the second Region. */
- reg2_mesh = astRegMesh( reg2 );
-
-/* Transform this mesh into the base Frame of the first Region. */
- ps1 = astTransform( map, reg2_mesh, 1, NULL );
-
-/* Check there are some good points in the transformed pointset. */
- good = 0;
- np = astGetNpoint( ps1 );
- nc = astGetNcoord( ps1 );
- ptr1 = astGetPoints( ps1 );
- if( ptr1 ) {
- for( i = 0; i < nc && !good; i++ ) {
- for( j = 0; j < np; j++ ) {
- if( ptr1[ i ][ j ] != AST__BAD ) {
- good = 1;
- break;
- }
- }
- }
- }
-
-/* If the transformed mesh contains no good points, swap the regions and
- try again. */
- if( !good ) {
- fs = astAnnul( fs );
- frm_reg1 = astAnnul( frm_reg1 );
- map_reg1 = astAnnul( map_reg1 );
- cmap = astAnnul( cmap );
- map = astAnnul( map );
- reg2_mesh = astAnnul( reg2_mesh );
- ps1 = astAnnul( ps1 );
-
- if( first ) {
- first = 0;
-
- if( !bnd_that ) {
- reg1 = this;
- reg2 = that;
- bnd1 = bnd_this;
- bnd2 = bnd_that;
- reg1_neg = this_neg;
- reg2_neg = that_neg;
- } else {
- reg1 = that;
- reg2 = this;
- bnd1 = bnd_that;
- bnd2 = bnd_this;
- reg1_neg = that_neg;
- reg2_neg = this_neg;
- }
- goto L1;
-
- } else {
- return 0;
- }
- }
-
-/* Also transform the Region describing the positional uncertainty within
- the second supplied Region into the base Frame of the first supplied
- Region. */
- unc = astGetUncFrm( reg2, AST__CURRENT );
- bfrm_reg1 = astGetFrame( reg1->frameset, AST__BASE );
- unc1 = astMapRegion( unc, map, bfrm_reg1 );
-
-/* See if all points within this transformed mesh fall on the boundary of
- the first Region, to within the joint uncertainty of the two Regions. If
- so the two Regions have equivalent boundaries. We can only do this is
- the first region is bounded. */
- if( astRegPins( reg1, ps1, unc1, &mask ) && good ) {
-
-/* If the boundaries are equivalent, the Regions are either identical or
- are mutually exclusive. To distinguish between these cases, we
- looked at the Bounded attributes. If the Bounded attribute is the same
- for both Regions then they are identical, otherwise they are mutually
- exclusive. */
- result = ( ( !reg1_neg && bnd1 ) == ( !reg2_neg && bnd2 ) ) ? 5 : 6;
-
-/* If the boundaries of the two Regions are not equivalent. */
- } else {
-
-/* Create a new PointSet containing those points from the mesh which are
- not on the boundary of the first Region. These points are identified by
- the mask array created by the astRegPins method above. */
- reg2_submesh = GetSubMesh( mask, reg2_mesh, status );
-
-/* Transform the points in the submesh of the second Region into the
- current Frame of the first Region. */
- (void ) astAnnul( ps1 );
- ps1 = astTransform( cmap, reg2_submesh, 1, NULL );
-
-/* Transform this submesh using the first Region as a Mapping. Any points
- outside the first region will be set bad in the output PointSet. */
- ps2 = astTransform( (AstMapping *) reg1, ps1, 1, NULL );
-
-/* Get the number of axes and points in this PointSet. */
- nc = astGetNcoord( ps2 );
- np = astGetNpoint( ps2 );
-
-/* Note if there were any common points (i.e. points on the boundary of
- both regions). */
- touch = ( astGetNpoint( reg2_mesh ) != np );
-
-/* Get pointers to the axis data in this PointSet, and check they can be
- used safely. */
- ptr = astGetPoints( ps2 );
- if( astOK ) {
-
-/* Loop round all points checking if the axis values are bad. We want a
- flag saying if there are any good axis values and another flag saying if
- there are any bad axis values. */
- allbad = 1;
- allgood = 1;
- for( iax = 0; iax < nc; iax++ ) {
- p = ptr[ iax ];
- for( ip = 0; ip < np; ip++,p++ ) {
- if( *p == AST__BAD ) {
- allgood = 0;
- if( !allbad ) break;
- } else {
- allbad = 0;
- if( !allgood ) break;
- }
- }
- }
-
-/* If the entire mesh of the (potentially negated) second Region was either
- on the boundary of, or inside, the (potentially negated) first region,
- determine the result depending on whether the regions have been
- negated and whether they are bounded. Check for impossible states (or
- maybe just errors in my logic). */
- if( allgood ) {
-
-/* Second region has a mesh so it must be bounded. */
- if( !bnd2 && astOK ) {
- astError( AST__INTER, "astOverlap(%s): Inconsistent "
- "state 1 (internal AST programming error).",
- status, astGetClass( this ) );
-
-/* If the first region has been made bounded by negating it... */
- } else if( reg1_neg ) {
- if( bnd1 ) {
-
-/* If the second region has been made bounded by negating it, then the
- unnegated first region is completely inside the unnegated second region. */
- if( reg2_neg ) {
- result = 2;
-
-/* If the second region was bounded without negating it, then there is
- no overlap between the unnegated first region and the second region. */
- } else {
- result = 1;
- }
-
-/* If the first region has been negated then it should not be unbounded.
- This is ensured by the nature of the code that sets the "this_neg" and
- "that_neg" flags above. */
- } else if( astOK ) {
- astError( AST__INTER, "astOverlap(%s): Inconsistent "
- "state 2 (internal AST programming error).",
- status, astGetClass( this ) );
- }
-
-/* If the first region was bounded without negating it, but the second
- region was made bounded by negating it, there is partial overlap. */
- } else if( reg2_neg ) {
- result = 4;
-
-/* If the first region was bounded without negating it, but the second
- region was also bounded without negating it, the second region is
- completely inside the first region. */
- } else {
- result = 3;
- }
-
-/* If part of the mesh of the second Region was inside the first region,
- and part was outside, then there is partial ocverlap. */
- } else if( !allbad ) {
- result = 4;
-
-/* If no part of the mesh of the (possibly negated) second Region was inside
- the (possibly negated) first region ... */
- } else {
-
-/* First deal with cases where the first region is unbounded. */
- if( !bnd1 ) {
- if( reg1_neg && astOK ) {
- astError( AST__INTER, "astOverlap(%s): Inconsistent "
- "state 5 (internal AST programming error).",
- status, astGetClass( this ) );
- } else if( reg2_neg ){
- result = 2;
- } else {
- result = 1;
- }
-
-/* The second region has a mesh so it must be bounded. */
- } else if( !bnd2 && astOK ) {
- astError( AST__INTER, "astOverlap(%s): Inconsistent "
- "state 6 (internal AST programming error).",
- status, astGetClass( this ) );
-
-/* So now we know both (possibly negated) regions are bounded. */
- } else {
-
-/* We know that none of the reg2 mesh points are inside the bounded reg1.
- But this still leaves two cases: 1) reg1 could be contained completely
- within reg2, or 2) there is no overlap between reg2 and reg1. To
- distinguish between these two cases we use reg2 to transform a point
- on the boundary of reg1. First get a mesh on the boundary of reg1. */
- reg1_mesh = astRegMesh( reg1 );
-
-/* Transform this mesh into the coordinate system of the second Region. */
- ps3 = astTransform( cmap, reg1_mesh, 0, NULL );
-
-/* Transform the points in this mesh using the second Region as a Mapping.
- Any points outside the second region will be set bad in the output
- PointSet. */
- ps4 = astTransform( (AstMapping *) reg2, ps3, 1, NULL );
-
-/* Get pointers to the axis data in this PointSet,and check they can be
- used safely. */
- ptr = astGetPoints( ps4 );
- if( astOK ) {
-
-/* Test the firts point and set a flag indicating if we are in case 1 (if
- not, we must be in case 2). */
- case1 = ( ptr[ 0 ][ 0 ] != AST__BAD );
-
-/* Apply logic similar to the other cases to determine the result. */
- if( reg1_neg ) {
- if( case1 == ( reg2_neg != 0 ) ) {
- result = 3;
- } else {
- result = 4;
- }
- } else {
- if( case1 == ( reg2_neg != 0 ) ) {
- result = 1;
- } else {
- result = 2;
- }
- }
- }
-
-/* Free resources. */
- reg1_mesh = astAnnul( reg1_mesh );
- ps3 = astAnnul( ps3 );
- ps4 = astAnnul( ps4 );
- }
- }
- }
-
-/* If there was no intersection or overlap, but the regions touch, then we
- consider there to be an intersection if either region is closed. */
- if( touch && result == 1 ) {
- if( astGetClosed( this) || astGetClosed( that ) ) result = 4;
- }
-
-/* Free resources.*/
- reg2_submesh = astAnnul( reg2_submesh );
- ps2 = astAnnul( ps2 );
- }
-
-/* Free resources.*/
- fs = astAnnul( fs );
- bfrm_reg1 = astAnnul( bfrm_reg1 );
- frm_reg1 = astAnnul( frm_reg1 );
- map_reg1 = astAnnul( map_reg1 );
- cmap = astAnnul( cmap );
- map = astAnnul( map );
- ps1 = astAnnul( ps1 );
- reg2_mesh = astAnnul( reg2_mesh );
- unc = astAnnul( unc );
- unc1 = astAnnul( unc1 );
- if( mask) mask = astFree( mask );
- }
- fs0 = astAnnul( fs0 );
-
-/* The returned value should take account of whether "this" or "that" is
- the first Region. If "this" was used as the first Region, then the
- result value calculated above is already correct. If "that" was used as
- the first Region, then we need to change the result to swap "this" and
- "that". */
- if( reg1 == that ) {
- if( result == 2 ) {
- result = 3;
- } else if( result == 3 ) {
- result = 2;
- }
- }
-
-/* Re-instate the original Negated flags. */
- if( this_neg ) astNegate( this );
- if( that_neg ) astNegate( that );
-
-/* If not OK, return zero. */
- if( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static void Overlay( AstFrame *template_frame, const int *template_axes,
- AstFrame *result, int *status ) {
-/*
-* Name:
-* Overlay
-
-* Purpose:
-* Overlay the attributes of a template Region on to another Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* void Overlay( AstFrame *template, const int *template_axes,
-* AstFrame *result, int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astOverlay
-* method inherited from the Frame class).
-
-* Description:
-* This function overlays attributes from the current Frame of a
-* Region on to another Frame, so as to over-ride selected
-* attributes of that second Frame. Normally only those attributes
-* which have been specifically set in the template will be
-* transferred. This implements a form of defaulting, in which a
-* Frame acquires attributes from the template, but retains its
-* original attributes (as the default) if new values have not
-* previously been explicitly set in the template.
-
-* Parameters:
-* template
-* Pointer to the template Region, for whose current Frame
-* values should have been explicitly set for any attribute
-* which is to be transferred.
-* template_axes
-* Pointer to an array of int, with one element for each axis of
-* the "result" Frame (see below). For each axis in the result
-* frame, the corresponding element of this array should contain
-* the (zero-based) index of the axis in the current Frame of
-* the template Region to which it corresponds. This array is
-* used to establish from which template Frame axis any
-* axis-dependent attributes should be obtained.
-*
-* If any axis in the result Frame is not associated with a
-* template Frame axis, the corresponding element of this array
-* should be set to -1.
-*
-* If a NULL pointer is supplied, the template and result axis
-* indicies are assumed to be identical.
-* result
-* Pointer to the Frame which is to receive the new attribute values.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the current Frame in the Region and invoke its
- astOverlay method to overlay its attributes. Annul the Frame pointer
- afterwards. */
- fr = astGetFrame( ((AstRegion *) template_frame)->frameset, AST__CURRENT );
- astOverlay( fr, template_axes, result );
- fr = astAnnul( fr );
-}
-
-static void PermAxes( AstFrame *this_frame, const int perm[], int *status ) {
-/*
-* Name:
-* PermAxes
-
-* Purpose:
-* Permute the order of a Region's axes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* void PermAxes( AstFrame *this, const int perm[], int *status )
-
-* Class Membership:
-* Region member function (over-rides the astPermAxes method
-* inherited from the Frame class).
-
-* Description:
-* This function permutes the order in which the axes in the
-* current Frame of a Region occur.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* perm
-* An array of int (with one element for each axis of the
-* Region's current Frame) which lists the axes in their new
-* order. Each element of this array should be a (zero-based)
-* axis index identifying the axes according to their old
-* (un-permuted) order.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - Only genuine permutations of the axis order are permitted, so
-* each axis must be referenced exactly once in the "perm" array.
-* - If more than one axis permutation is applied to the same Frame
-* in a Region, the effects are cumulative.
-*/
-
-/* Local Variables: */
- AstRegion *this; /* Pointer to the Region structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_frame;
-
-/* Invoke the astPermAxes method on the encapsulated FrameSet. */
- astPermAxes( this->frameset, perm );
-
-}
-
-static AstFrame *PickAxes( AstFrame *this_frame, int naxes, const int axes[],
- AstMapping **map, int *status ) {
-/*
-* Name:
-* PickAxes
-
-* Purpose:
-* Create a new Frame by picking axes from a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* AstFrame *PickAxes( AstFrame *this, int naxes, const int axes[],
-* AstMapping **map, int *status )
-
-* Class Membership:
-* Region member function (over-rides the astPickAxes protected
-* method inherited from the Frame class).
-
-* Description:
-* This function creates a new Frame whose axes are copies of axes
-* picked from the encapsulated Frame of an existing Region. Other
-* Frame attributes are also copied from this existing Frame to the
-* new Frame. Zero or more of the original axes may be picked in
-* any order, but each can be used only once. Additional axes (with
-* default characteristics) may be included in the new Frame if
-* required.
-*
-* Optionally, a Mapping that converts between the original Frame's
-* axes and those of the new Frame may also be returned.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* naxes
-* The number of axes required in the new Frame.
-* axes
-* Pointer to an array of int with naxes elements. This should
-* contain (zero based) axis indices specifying the axes which
-* are to be included in the new Frame, in the order
-* required. Each axis index may occur only once.
-*
-* If additional (default) axes are also to be included, the
-* corresponding elements of this array should be set to -1.
-* map
-* Address of a location to receive a pointer to a new
-* Mapping. This will be a PermMap (or a UnitMap as a special
-* case) that describes the axis permutation that has taken
-* place between the current Frame of the Region and the new
-* Frame. The forward transformation will convert from the
-* original Region's axes to the new one's, and vice versa.
-*
-* If this Mapping is not required, a NULL value may be supplied
-* for this parameter.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the new Frame.
-
-* Notes:
-* - The class of object returned may differ from that of the
-* original current Frame, depending on which axes are
-* selected. For example, if a single axis is picked from a
-* SkyFrame (which always has two axes), the resulting Frame cannot
-* be a valid SkyFrame, so will revert to the parent class (Frame)
-* instead.
-* - The new Frame contains a deep copy of all the data selected
-* from the original current Frame. Modifying the new Frame will
-* therefore not affect the Region or the Frames it contains.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *cfrm; /* Current Frame from input Region */
- AstFrame *frame; /* Pointer to Frame to be returned */
- AstMapping *cbmap; /* Base->current Mapping from input Region */
- AstMapping *fsmap; /* Mapping from selected current to base axes */
- AstRegion *breg; /* Region spanning selected base Frame axes */
- AstRegion *creg; /* Region spanning selected current Frame axes */
- AstRegion *this; /* Pointer to Region structure */
- int *base_axes; /* Holds selected base frame axis indices */
- int def; /* Were any default axes requested? */
- int i; /* Axis index */
- int nbase; /* No. of selected base Frame axes */
-
-/* Initialise the returned pointers. */
- if ( map ) *map = NULL;
- frame = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return frame;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_frame;
-
-/* Check that a valid set of axes is being selected . */
- astValidateAxisSelection( this, naxes, axes, "astPickAxes" );
-
-/* Pick the required axes from the current Frame of the encapsulated
- FrameSet. */
- cfrm = astGetFrame( this->frameset, AST__CURRENT );
- frame = astPickAxes( cfrm, naxes, axes, map );
-
-/* See if any default axes are to be included in the returned Frame. */
- def = 0;
- for( i = 0; i < naxes; i++ ) {
- if( axes[ i ] < 0 ) def = 1;
- }
-
-/* Regions cannot yet include extra default axes in the returned Frame
- so return a basic Frame if any default axes were requested. */
- if( ! def ) {
-
-/* We now see if the requested set of current Frame axes correspond to a
- unique set of base Frame axes. If they do, we may be able to return a
- Region spanning the selected axes rather than just a Frame. The check
- is performed by attempting to split the current->base Mapping. */
- cbmap = astGetMapping( this->frameset, AST__CURRENT, AST__BASE );
- base_axes = astMapSplit( cbmap, naxes, axes, &fsmap );
-
-/* Check the Mapping could be split. */
- if( base_axes ) {
-
-/* Store the number of base Frame axes that correspond to the requested
- set of current Frame axes. */
- nbase = astGetNout( fsmap );
-
-/* Attempt to create a new Region that spans the corresponding set of
- base Frame axes. */
- breg = astRegBasePick( this, nbase, base_axes );
- if( breg ) {
-
-/* Use the split Mapping to map the base Frame region into the requested
- Frame. We invert the "fsmap" first so that it maps the selected base
- Frame axes into the selected current Frame axes. */
- astInvert( fsmap );
- creg = astMapRegion( breg, fsmap, frame );
-
-/* Copy properties from the old Region to the new Region. */
- astRegOverlay( creg, this, 0 );
-
-/* Return this new Region in place of the simple Frame found above. */
- (void) astAnnul( frame );
- frame = (AstFrame *) creg;
-
-/* Free resources */
- breg = astAnnul( breg );
- }
- fsmap = astAnnul( fsmap );
- base_axes = astFree( base_axes );
- }
- cbmap = astAnnul( cbmap );
- }
- cfrm = astAnnul( cfrm );
-
-/* If an error occurred, annul the Mapping pointer (if requested) and
- the new Frame pointer. */
- if ( !astOK ) {
- if ( map ) *map = astAnnul( *map );
- frame = astAnnul( frame );
- }
-
-/* Return the pointer to the new Frame. */
- return frame;
-}
-
-static void RegBaseBox( AstRegion *this, double *lbnd, double *ubnd, int *status ){
-/*
-*+
-* Name:
-* astRegBaseBox
-
-* Purpose:
-* Returns the bounding box of an un-negated Region in the base Frame of
-* the encapsulated FrameSet.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* void astRegBaseBox( AstRegion *this, double *lbnd, double *ubnd )
-
-* Class Membership:
-* Region virtual function.
-
-* Description:
-* This function returns the upper and lower axis bounds of a Region in
-* the base Frame of the encapsulated FrameSet, assuming the Region
-* has not been negated. That is, the value of the Negated attribute
-* is ignored.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* lbnd
-* Pointer to an array in which to return the lower axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-* ubnd
-* Pointer to an array in which to return the upper axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-
-*-
-*/
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* This abstract implementation simply reports an error. All sub-classes of
- Region should over-ride this to return appropriate values. */
- astError( AST__INTER, "astRegBaseBox(%s): The %s class does not implement "
- "the astRegBaseBox method inherited from the Region class "
- "(internal AST programming error).", status, astGetClass( this ),
- astGetClass( this ) );
-}
-
-static void RegBaseBox2( AstRegion *this, double *lbnd, double *ubnd, int *status ){
-/*
-*+
-* Name:
-* astRegBaseBox2
-
-* Purpose:
-* Returns the bounding box of an un-negated Region in the base Frame of
-* the encapsulated FrameSet.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* void astRegBaseBox2( AstRegion *this, double *lbnd, double *ubnd )
-
-* Class Membership:
-* Region virtual function.
-
-* Description:
-* This function is similar to astRegBaseBox in that it returns the
-* upper and lower axis bounds of a Region in the base Frame of the
-* encapsulated FrameSet. But, in addition to assuming that the
-* supplied Region has not been negated, it also assumes that any
-* component Regions contained within the supplied Region have not been
-* negated.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* lbnd
-* Pointer to an array in which to return the lower axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-* ubnd
-* Pointer to an array in which to return the upper axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-
-*-
-*/
-
-/* This base class implementation simply calls astRegBaseBox. Sub-classes
- which contain component Regions should override it. */
- astRegBaseBox( this, lbnd, ubnd );
-
-}
-
-static AstPointSet *RegBaseGrid( AstRegion *this, int *status ){
-/*
-*+
-* Name:
-* astRegBaseGrid
-
-* Purpose:
-* Return a PointSet containing points spread through the volume of a
-* Region.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* AstPointSet *astRegBaseGrid( AstRegion *this )
-
-* Class Membership:
-* Region virtual function.
-
-* Description:
-* This function returns a PointSet containing a set of points spread
-* through the volume of the Region. The points refer to the base Frame of
-* the encapsulated FrameSet.
-
-* Parameters:
-* this
-* Pointer to the Region.
-
-* Returned Value:
-* Pointer to the PointSet. If the Region is unbounded, a NULL pointer
-* will be returned.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstBox *box;
- AstFrame *frmb;
- AstPointSet *ps1;
- AstPointSet *ps2;
- AstPointSet *result;
- double **ptr2;
- double **ptr;
- double *lbnd;
- double *ubnd;
- int good;
- int ic;
- int ip;
- int ipr;
- int naxb;
- int npnt2;
-
-/* Initialise */
- result= NULL;
-
-/* Check the local error status. */
- if ( !astOK ) return NULL;
-
-/* If the Region structure contains a pointer to a PointSet holding
- positions spread over the volume of the Region in the base Frame,
- return it. */
- if( this->basegrid ) {
- result = astClone( this->basegrid );
-
-/* Otherwise, check the Region is bounded. */
- } else if( astGetBounded( this ) ) {
-
-/* Get the base Frame bounding box. */
- naxb = astGetNin( this->frameset );
- lbnd = astMalloc( sizeof( double )*(size_t)naxb );
- ubnd = astMalloc( sizeof( double )*(size_t)naxb );
- astRegBaseBox( this, lbnd, ubnd );
-
-/* Create a Box covering this bounding box. */
- frmb = astGetFrame( this->frameset, AST__BASE );
- box = astBox( frmb, 1, lbnd, ubnd, NULL, "", status );
-
-/* Copy the MeshSize attribute to the new Box since this will be used by
- the invocation of astRegBaseGrid below. */
- astSetMeshSize( box, astGetMeshSize( this ) );
-
-/* Invoke the Box astRegGrid method. Note, the Box class overrides this
- implementation of astRegBaseGrid and does not (must not) invoke this
- implementation, in order to avoid an infinite loop. */
- ps1 = astRegBaseGrid( box );
-
-/* Some of the base Frame points in the above bounding box will fall outside
- the supplied Region. Use the Region as a Mapping to determine which they
- are. Since the points are base Frame points, use astBTransform rather
- than astTransform. */
- ps2 = astBTransform( this, ps1, 1, NULL );
-
-/* We now create a PointSet which is a copy of "ps2" but with all the bad
- points (i.e. the points in the bounding box grid which are not inside
- the supplied Region) removed. Create a result PointSet which is the same
- size as "ps2", then copy just the good points from "ps2" to the result
- PointSet, keeping a record of the number of points copied. */
- ptr2 = astGetPoints( ps2 );
- npnt2 = astGetNpoint( ps2 );
- result = astPointSet( npnt2, naxb, "", status );
- ptr = astGetPoints( result );
- if( astOK ) {
-
-/* Initialise the index of the next point to be stored in "result". */
- ipr = 0;
-
-/* Loop round all points in "ps2" */
- for( ip = 0; ip < npnt2; ip++ ) {
-
-/* Copy each axis value for this point from "ps2" to "result". If a bad
- axis value is encountered, flag that the point is bad and break out of
- the axis loop. */
- good = 1;
- for( ic = 0; ic < naxb; ic++ ) {
- if( ptr2[ ic ][ ip ] == AST__BAD ) {
- good = 0;
- break;
- } else {
- ptr[ ic ][ ipr ] = ptr2[ ic ][ ip ];
- }
- }
-
-/* If the current point has no bad axis values, increment the index of
- the next point to be stored in "result". */
- if( good ) ipr++;
- }
-
-/* Truncate the "result" PointSet to exclude any unused space at the end
- of the axis values arrays. */
- astSetNpoint( result, ipr );
- }
-
-/* Free resources */
- lbnd = astFree( lbnd );
- ubnd = astFree( ubnd );
- frmb = astAnnul( frmb );
- box = astAnnul( box );
- ps1 = astAnnul( ps1 );
- ps2 = astAnnul( ps2 );
-
-/* Cache the new grid for future use. */
- if( astOK ) this->basegrid = astClone( result );
-
- }
-
-/* Annul the result if an error occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result */
- return result;
-}
-
-static AstPointSet *RegBaseMesh( AstRegion *this, int *status ){
-/*
-*+
-* Name:
-* astRegBaseMesh
-
-* Purpose:
-* Return a PointSet containing points spread around the boundary of a
-* Region.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* AstPointSet *astRegBaseMesh( AstRegion *this )
-
-* Class Membership:
-* Region virtual function.
-
-* Description:
-* This function returns a PointSet containing a set of points on the
-* boundary of the Region. The points refer to the base Frame of
-* the encapsulated FrameSet.
-
-* Parameters:
-* this
-* Pointer to the Region.
-
-* Returned Value:
-* Pointer to the PointSet. The axis values in this PointSet will have
-* associated accuracies derived from the uncertainties which were
-* supplied when the Region was created.
-*
-* If the Region has no boundary (i.e. is equivalent to a NullRegion), the
-* returned PointSet will contain a single point with a value of AST__BAD
-* on every axis.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-*-
-*/
-
-/* Check the local error status. */
- if ( !astOK ) return NULL;
-
-/* This abstract method must be over-ridden by each concrete sub-class.
- Report an error if this null imlementation is called.*/
- astError( AST__INTER, "astRegBaseMesh(%s): The %s class does not implement "
- "the astRegBaseMesh method inherited from the Region class "
- "(internal AST programming error).", status, astGetClass( this ),
- astGetClass( this ) );
- return NULL;
-}
-
-static AstRegion *RegBasePick( AstRegion *this, int naxes, const int *axes,
- int *status ){
-/*
-*+
-* Name:
-* astRegBasePick
-
-* Purpose:
-* Return a Region formed by picking selected base Frame axes from the
-* supplied Region.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* AstRegion *astRegBasePick( AstRegion *this, int naxes, const int *axes )
-
-* Class Membership:
-* Region virtual function.
-
-* Description:
-* This function attempts to return a Region that is spanned by selected
-* axes from the base Frame of the encapsulated FrameSet of the supplied
-* Region. This may or may not be possible, depending on the class of
-* Region. If it is not possible a NULL pointer is returned.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* naxes
-* The number of base Frame axes to select.
-* axes
-* An array holding the zero-based indices of the base Frame axes
-* that are to be selected.
-
-* Returned Value:
-* Pointer to the Region, or NULL if no region can be formed.
-
-* Notes:
-* - This base implementation returns NULL unless all base Frame axes
-* are selected (possibly in a permuted order).
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-*-
-*/
-/* Local Variables: */
- AstFrame *fr; /* Pointer to the Region's base Frame */
- AstRegion *result; /* The returned Region pointer */
- int found; /* Has the current axis index been found yet? */
- int i; /* Axis index */
- int j; /* Index into the "axes" array */
- int nax; /* No. of base Frame axes */
- int ok; /* Are we doing a genuine axis permutation? */
- int unit; /* Is the axis permutation a unit map? */
-
-/* Initialise */
- result = NULL;
-
-/* Check the local error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the base Frame int he encapsulated FrameSet. */
- fr = astGetFrame( this->frameset, AST__BASE );
-
-/* See how many axes it has. We only proceed if we are selecting all axes
- in the base Frame. */
- nax = astGetNaxes( fr );
- if( nax == naxes ) {
-
-/* We now check that the axes array is a genuine permutation of all axes.
- This means that all axis indices must occur once, and only once, within
- the "axes" array. Look for each axis index in turn. */
- unit = 1;
- ok = 1;
- for( i = 0; i < nax && ok; i++ ) {
-
-/* Check each element of the axes array to see if it holds the axis index
- currently being looked for. */
- found = 0;
- for( j = 0; j < nax; j++ ) {
-
-/* If so, if this axis index has already been found, break out of the
- loop. */
- if( axes[ j ] == i ) {
- if( found ) {
- ok = 0;
- break;
- }
- found = 1;
-
-/* Note if we do not have a unit map (i.e. each axis is permuted onto itself). */
- if( i != j ) unit = 0;
- }
- }
-
-/* If the axis index was not found, we do not have a genuine axis
- permutation. */
- if( !found ) ok = 0;
- }
-
-/* If we have a genuine axis permutation, create a Region which is a copy
- of the supplied region and set it to represent its base Frame. */
- if( ok ) {
- result = astCopy( this );
- astSetRegFS( result, fr );
-
-/* If the axis selection is not equivalent to a unit mapping, we now
- permute the axes. */
- if( !unit ) astPermAxes( result, axes );
- }
- }
-
-/* Free resources. */
- fr = astAnnul( fr );
-
-/* Returned the result. */
- return result;
-}
-
-static double *RegCentre( AstRegion *this, double *cen, double **ptr,
- int index, int ifrm, int *status ){
-/*
-*+
-* Name:
-* astRegCentre
-
-* Purpose:
-* Re-centre a Region.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* double *astRegCentre( AstRegion *this, double *cen, double **ptr,
-* int index, int ifrm )
-
-* Class Membership:
-* Region virtual function.
-
-* Description:
-* This function shifts the centre of the supplied Region to a
-* specified position, or returns the current centre of the Region.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* cen
-* Pointer to an array of axis values, giving the new centre.
-* Supply a NULL value for this in order to use "ptr" and "index" to
-* specify the new centre.
-* ptr
-* Pointer to an array of pointers, one for each axis in the Region.
-* Each pointer locates an array of axis values. This is the format
-* returned by the PointSet method astGetPoints. Only used if "cen"
-* is NULL.
-* index
-* The index of the point within the arrays identified by "ptr" at
-* which is stored the coords for the new centre position. Only used
-* if "cen" is NULL.
-* ifrm
-* Should be AST__BASE or AST__CURRENT. Indicates whether the centre
-* position is supplied and returned in the base or current Frame of
-* the FrameSet encapsulated within "this".
-
-* Returned Value:
-* If both "cen" and "ptr" are NULL then a pointer to a newly
-* allocated dynamic array is returned which contains the centre
-* coords of the Region. This array should be freed using astFree when
-* no longer needed. If either of "ptr" or "cen" is not NULL, then a
-* NULL pointer is returned.
-
-* Notes:
-* - Any bad (AST__BAD) centre axis values are ignored. That is, the
-* centre value on such axes is left unchanged.
-* - Some Region sub-classes do not have a centre. Such classes will report
-* an AST__INTER error code if this method is called with either "ptr" or
-* "cen" not NULL. If "ptr" and "cen" are both NULL, then no error is
-* reported if this method is invoked on a Region of an unsuitable class,
-* but NULL is always returned.
-
-*-
-*/
-
-/* Local Variables: */
- double *result;
-
-/* Initialise */
- result = NULL;
-
-/* Check the local error status. */
- if ( !astOK ) return result;
-
-/* This abstract method must be over-ridden by each concrete sub-class
- which allows the centre to be shifted. Report an error if this null
- imlementation is called to set a new centre. If it is called to
- enquire the current centre, then return a NULL pointer. */
- if( ptr || cen ) astError( AST__INTER, "astRegCentre(%s): The %s "
- "class does not implement the astRegCentre method "
- "inherited from the Region class (internal AST "
- "programming error).", status, astGetClass( this ),
- astGetClass( this ) );
-
- return NULL;
-}
-
-static void RegClearAttrib( AstRegion *this, const char *aattrib,
- char **base_attrib, int *status ) {
-/*
-*+
-* Name:
-* astRegClearAttrib
-
-* Purpose:
-* Clear an attribute value for a Region.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* void astRegClearAttrib( AstRegion *this, const char *aattrib,
-* char **base_attrib )
-
-* Class Membership:
-* Region virtual function
-
-* Description:
-* This function clears the value of a named attribute in both the base
-* and current Frame in the FrameSet encapsulated within a Region, without
-* remapping either Frame.
-*
-* No error is reported if the attribute is not recognised by the base
-* Frame.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* aattrib
-* Pointer to a null terminated string holding the attribute name.
-* base_attrib
-* Address of a location at which to return a pointer to the null
-* terminated string holding the attribute name which was cleared in
-* the base Frame of the encapsulated FrameSet. This may differ from
-* the supplied attribute if the supplied attribute contains an axis
-* index and the current->base Mapping in the FrameSet produces an
-* axis permutation. The returned pointer should be freed using
-* astFree when no longer needed. A NULL pointer may be supplied in
-* which case no pointer is returned.
-*-
-*/
-
-/* Local Variables: */
- AstFrame *frm;
- AstMapping *junkmap;
- AstMapping *map;
- AstRegion *unc;
- char *attrib;
- char *battrib;
- char buf1[ 100 ];
- int *outs;
- int axis;
- int baxis;
- int i;
- int len;
- int nc;
- int rep;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Produce a lower case version of the attribute name string */
- nc = strlen( aattrib );
- attrib = astMalloc( nc + 1 );
- for( i = 0; i < nc; i++ ) attrib[ i ] = tolower( aattrib[ i ] );
- attrib[ nc ] = 0;
-
-/* Clear the attribute in the current Frame in the encapsulated FrameSet.
- Use the protected astClearAttrib method which does not cause the Frame
- to be remapped within the FrameSet. */
- frm = astGetFrame( this->frameset, AST__CURRENT );
- astClearAttrib( frm, attrib );
- frm = astAnnul( frm );
-
-/* Indicate that we should use the supplied attribute name with the base Frame. */
- battrib = NULL;
-
-/* If the attribute name contains an axis number, we need to create a new
- attribute name which refers to the corresponding base Frame axis
- (since the base<->current Mapping may permute the axes). First parse the
- supplied attribute name to locate any axis index. */
- len = strlen( attrib );
- if( nc = 0, ( 2 == astSscanf( attrib, "%[^(](%d) %n", buf1, &axis,
- &nc ) ) && ( nc >= len ) ) {
-
-/* If found, convert the axis index from one-based to zero-based. */
- axis--;
-
-/* See if the specified current Frame axis is connected to one and only
- one base Frame axis. If so, get the index of the base Frame axis. */
- map = astGetMapping( this->frameset, AST__CURRENT, AST__BASE );
- outs = astMapSplit( map, 1, &axis, &junkmap );
- if( junkmap && astGetNout( junkmap ) == 1 ) {
- baxis = outs[ 0 ];
-
-/* If the base Frame axis index is different to the current Frame axis
- index, create a new attribute name string using the base Frame axis index. */
- if( baxis != axis ) {
- battrib = astMalloc( strlen( attrib ) + 10 );
- if( battrib ) sprintf( battrib, "%s(%d)", buf1, baxis + 1 );
- }
-
-/* If there is no one base Frame axis which corresponds to the supplied
- current Frame axis, report an error. */
- } else if( astOK ) {
- astError( AST__INTER, "astRegClearAttrib(%s): Unable to clear "
- "attribute \"%s\" in the base Frame of the %s", status,
- astGetClass( this ), attrib, astGetClass( this ) );
- astError( AST__INTER, "There is no base Frame axis corresponding "
- "to current Frame axis %d\n", status, axis + 1 );
- }
-
-/* Free resources */
- outs = astFree( outs );
- if( junkmap ) junkmap = astAnnul( junkmap );
- map = astAnnul( map );
- }
-
-/* Clear the appropriate attribute name in the base Frame. This time ensure
- that any error caused by the attribute name is annulled. Also clear it in
- any uncertainty Region (the current Frame of the uncertainty Region is
- assumed to be equivalent to the base Frame of the parent Region). */
- frm = astGetFrame( this->frameset, AST__BASE );
- if( frm ) {
- rep = astReporting( 0 );
- astClearAttrib( frm, battrib ? battrib : attrib );
- if( astTestUnc( this ) ) {
- unc = astGetUncFrm( this, AST__BASE );
- astRegClearAttrib( unc, battrib ? battrib : attrib, NULL );
- unc = astAnnul( unc );
- }
- if( astStatus == AST__BADAT ) astClearStatus;
- astReporting( rep );
- }
- frm = astAnnul( frm );
-
-/* If required return the modified base Frame attribute name. Otherwise,
- free it. */
- if( base_attrib ) {
- if( battrib ) {
- *base_attrib = battrib;
- } else {
- *base_attrib = astStore( NULL, attrib, strlen( attrib ) + 1 );
- }
- } else {
- battrib = astFree( battrib );
- }
-
-/* Since the base Frame has been changed, any cached information calculated
- on the basis of the base Frame properties may no longer be up to date. */
- astResetCache( this );
-
-/* Free resources. */
- attrib = astFree( attrib );
-
-}
-
-static AstPointSet *RegGrid( AstRegion *this, int *status ){
-/*
-*+
-* Name:
-* astRegGrid
-
-* Purpose:
-* Return a PointSet containing points spread through the volume of a
-* Region.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* AstPointSet *astRegGrid( AstRegion *this )
-
-* Class Membership:
-* Region virtual function.
-
-* Description:
-* This function returns a PointSet containing a mesh of points spread
-* throughout the volume of the Region. The points refer to the current
-* Frame of the encapsulated FrameSet.
-
-* Parameters:
-* this
-* Pointer to the Region.
-
-* Returned Value:
-* Pointer to the PointSet. The axis values in this PointSet will have
-* associated accuracies derived from the uncertainties which were
-* supplied when the Region was created. Annul the pointer using
-* astAnnul when it is no longer needed.
-
-* Notes:
-* - It should not be assumed that the returned points are evenly
-* spaced withint he volume.
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-*-
-*/
-
-/* Local Variables; */
- AstMapping *map; /* Base -> current Frame Mapping */
- AstPointSet *result; /* Pointer to returned PointSet */
-
-/* Initialise the returned pointer */
- result = NULL;
-
-/* Check the local error status. */
- if ( !astOK ) return result;
-
-/* If the Region structure does not contain a pointer to a PointSet holding
- positions evenly spread over the volume of the Region in the base
- Frame, create one now. Note, we cannot cache the grid in the current
- Frame in this way since the current Frame grid depends on the proprties
- of the current Frame (e.g. System) which can be changed at any time. */
- if( !this->basegrid ) this->basegrid = astRegBaseGrid( this );
-
-/* Get the simplified base->current Mapping */
- map = astRegMapping( this );
-
-/* If the Mapping is a UnitMap, just return a clone of the PointSet
- pointer stored in the Region structure. */
- if( astIsAUnitMap( map ) ){
- result = astClone( this->basegrid );
-
-/* Otherwise, create a new PointSet holding the above points transformed
- into the current Frame. */
- } else {
- result = astTransform( map, this->basegrid, 1, NULL );
- }
-
-/* Free resources.*/
- map = astAnnul( map );
-
-/* If an error has occurred, annul the returned PointSet. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static AstPointSet *RegMesh( AstRegion *this, int *status ){
-/*
-*+
-* Name:
-* astRegMesh
-
-* Purpose:
-* Return a PointSet containing points spread over the boundary of a
-* Region.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* AstPointSet *astRegMesh( AstRegion *this )
-
-* Class Membership:
-* Region virtual function.
-
-* Description:
-* This function returns a PointSet containing a mesh of points on the
-* boundary of the Region. The points refer to the current Frame of
-* the encapsulated FrameSet.
-
-* Parameters:
-* this
-* Pointer to the Region.
-
-* Returned Value:
-* Pointer to the PointSet. The axis values in this PointSet will have
-* associated accuracies derived from the uncertainties which were
-* supplied when the Region was created. Annul the pointer using
-* astAnnul when it is no longer needed.
-
-* Notes:
-* - It should not be assumed that the returned points are evenly
-* spaced on the boundary.
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-*-
-*/
-
-/* Local Variables; */
- AstMapping *map; /* Base -> current Frame Mapping */
- AstPointSet *bmesh; /* Base Frame mesh */
- AstPointSet *result; /* Pointer to returned PointSet */
-
-/* Initialise the returned pointer */
- result = NULL;
-
-/* Check the local error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to a PointSet holding positions evenly spread over the
- boundary of the Region in the base Frame. */
- bmesh = astRegBaseMesh( this );
-
-/* Get the simplified base->current Mapping */
- map = astRegMapping( this );
-
-/* If the Mapping is a UnitMap, just return a clone of the mesh PointSet
- pointer. */
- if( astIsAUnitMap( map ) ){
- result = astClone( bmesh );
-
-/* Otherwise, create a new PointSet holding the above points transformed
- into the current Frame. */
- } else {
- result = astTransform( map, bmesh, 1, NULL );
- }
-
-/* Free resources.*/
- bmesh = astAnnul( bmesh );
- map = astAnnul( map );
-
-/* If an error has occurred, annul the returned PointSet. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static int RegDummyFS( AstRegion *this, int *status ){
-/*
-*+
-* Name:
-* astRegDummyFS
-
-* Purpose:
-* Check if a Region has a dummy FrameSet.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* int astRegDummyFS( AstRegion *this )
-
-* Class Membership:
-* Region virtual function.
-
-* Description:
-* This function returns a flag indicating if the supplied Region has
-* a dummy FrameSet.
-*
-* The astDump method for a Region may choose not to include the
-* Region's FrameSet in the dump, depending on the value of the
-* RegionFS attribute and the nature of the FrameSet. If the FrameSet
-* is omitted from the Dump, then special action has to be taken when
-* the dump is subsequently read in and used to re-create the Region.
-* On encounterting such a dump, the astLoadRegion function will create
-* a dummy FrameSet and associate it with the reconstructed Region.
-* The new Region should not be used however until this dummy FrameSet
-* has been replaced by the correct FrameSet. Performing this replacement
-* is the responsibility of the parent class (i.e. the class which choose
-* to omit the FrameSet from the dump). These will usually be Region
-* classes which encapsulate other Regions, such as CmpRegion, Prism,
-* Stc, etc.
-*
-* This function can be used by astLoad... methods in sub-classes to
-* determine if a newly loaded component Region has a dummy FrameSet. If
-* so the astLoad function should either use the astSetRegFS method to
-* store a new FrameSet in the component Region. If the parent Region
-* itself has a dummy FrameSet (i.e. is a component Region contained
-* within a higher level Region) then it cannot do this and should
-* ignore the presence of the dummy FrameSet (it then becomes the
-* responsibility of hte parent Region to load appropriate FrameSets
-* into all its components).
-
-* Parameters:
-* this
-* Pointer to the Region.
-
-* Returned Value:
-* Non-zero if the Region has a dummy FrameSet.
-
-*-
-*/
-
-/* Check the inherited status. */
- if( !astOK ) return 0;
-
-/* The Ident attribute of the FrameSet will be set to DUMMY_FS if the
- FrameSet is a dummy. */
- return !strcmp( astGetIdent( this->frameset ), DUMMY_FS );
-}
-
-static int RegPins( AstRegion *this, AstPointSet *pset, AstRegion *unc,
- int **mask, int *status ){
-/*
-*+
-* Name:
-* astRegPins
-
-* Purpose:
-* Check if a set of points fall on the boundary of a given Region.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* int astRegPins( AstRegion *this, AstPointSet *pset, AstRegion *unc,
-* int **mask )
-
-* Class Membership:
-* Region virtual function.
-
-* Description:
-* This function returns a flag indicating if the supplied set of
-* points all fall on the boundary of the given Region.
-*
-* Some tolerance is allowed, as specified by the uncertainty Region
-* stored in the supplied Region "this", and the supplied uncertainty
-* Region "unc" which describes the uncertainty of the supplied points.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* pset
-* Pointer to the PointSet. The points are assumed to refer to the
-* base Frame of the FrameSet encapsulated by "this".
-* unc
-* Pointer to a Region representing the uncertainties in the points
-* given by "pset". The Region is assumed to represent the base Frame
-* of the FrameSet encapsulated by "this". Zero uncertainity is assumed
-* if NULL is supplied.
-* mask
-* Pointer to location at which to return a pointer to a newly
-* allocated dynamic array of ints. The number of elements in this
-* array is equal to the value of the Npoint attribute of "pset".
-* Each element in the returned array is set to 1 if the
-* corresponding position in "pset" is on the boundary of the Region
-* and is set to zero otherwise. A NULL value may be supplied
-* in which case no array is created. If created, the array should
-* be freed using astFree when no longer needed.
-
-* Returned Value:
-* Non-zero if the points all fall on the boundary of the given
-* Region, to within the tolerance specified. Zero otherwise.
-
-*-
-*/
-
-/* Check the inherited status. */
- if( !astOK ) return 0;
-
-/* This abstract implementation simply reports an error. All sub-classes of
- Region should over-ride this to return appropriate values. */
- astError( AST__INTER, "astRegPins(%s): The %s class does not implement "
- "the astRegPins method inherited from the Region class "
- "(internal AST programming error).", status, astGetClass( this ),
- astGetClass( this ) );
- return 0;
-}
-
-static void GetRegionBounds( AstRegion *this, double *lbnd, double *ubnd, int *status ){
-/*
-*++
-* Name:
-c astGetRegionBounds
-f AST_GETREGIONBOUNDS
-
-* Purpose:
-* Returns the bounding box of Region.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "region.h"
-c void astGetRegionBounds( AstRegion *this, double *lbnd, double *ubnd )
-f CALL AST_GETREGIONBOUNDS( THIS, LBND, UBND, STATUS )
-
-* Class Membership:
-* Region method.
-
-* Description:
-c This function
-f This routine
-* returns the upper and lower limits of a box which just encompasses
-* the supplied Region. The limits are returned as axis values within
-* the Frame represented by the Region. The value of the Negated
-* attribute is ignored (i.e. it is assumed that the Region has not
-* been negated).
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Region.
-c lbnd
-f LBND() = DOUBLE PRECISION (Returned)
-c Pointer to an
-f An
-* array in which to return the lower axis bounds covered by the Region.
-* It should have at least as many elements as there are axes in the
-* Region. If an axis has no lower limit, the returned value will
-* be the largest possible negative value.
-c ubnd
-f UBND() = DOUBLE PRECISION (Returned)
-c Pointer to an
-f An
-* array in which to return the upper axis bounds covered by the Region.
-* It should have at least as many elements as there are axes in the
-* Region. If an axis has no upper limit, the returned value will
-* be the largest possible positive value.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - The value of the Negated attribute is ignored (i.e. it is assumed that
-* the Region has not been negated).
-* - If an axis has no extent on an axis then the lower limit will be
-* returned larger than the upper limit. Note, this is different to an
-* axis which has a constant value (in which case both lower and upper
-* limit will be returned set to the constant value).
-
-*--
-*/
-
-/* Local Variables: */
- AstFrame *frm; /* Current Frame */
- AstMapping *smap; /* Simplified base -> current Mapping */
- AstPointSet *bmesh; /* PointSet holding base Frame mesh */
- AstPointSet *cmesh; /* PointSet holding current Frame mesh */
- double **bptr; /* Pointer to PointSet coord arrays */
- double *p; /* Array of values for current axis */
- double width; /* Width of bounding box on i'th axis */
- int i; /* Axis count */
- int ip; /* Index of current corner */
- int j; /* Timer for low/high swaps */
- int jmax; /* Increment between low/high swaps */
- int lo; /* Assign low bound to next corner? */
- int nbase; /* Number of base Frame axes */
- int ncur; /* Number of current Frame axes */
- int npos; /* Number of box corners */
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* Get the simplified base to current Mapping. */
- smap = astRegMapping( this );
-
-/* If the simplified Mapping is a UnitMap, just store the base box bounds
- in the returned arrays */
- if( astIsAUnitMap( smap ) ) {
- astRegBaseBox( this, lbnd, ubnd );
-
-/* Otherwise, we get a mesh of points over the boundary of the Region within
- the base Frame, transform them into the current Frame, and find their bounds. */
- } else {
-
-/* If the Region is bounded, we can get a genuine mesh of points on the
- boundary of the Region. */
- if( astGetBounded( this ) ) {
- bmesh = astRegBaseMesh( this );
-
-/* If the Region is not bounded, no mesh can be created so we use the
- corners of the base frame bounding box instead. */
- } else {
-
-/* Get the base Frame bounding box. */
- astRegBaseBox( this, lbnd, ubnd );
-
-/* Get the number of corners in the base Frame bounding box. */
- nbase = astGetNin( smap );
- npos = pow( 2, nbase );
-
-/* Create a PointSet to hold the positions at the corners in the base
- frame box. */
- bmesh = astPointSet( npos, nbase, " ", status );
- bptr = astGetPoints( bmesh );
- if( bptr ) {
-
-/* Store the coordinates of the box corners in the PointSet. */
- jmax = 1;
- for( i = 0; i < nbase; i++ ) {
- p = bptr[ i ];
-
- lo = 1;
- j = 0;
- for( ip = 0; ip < npos; ip++,j++ ) {
- if( j == jmax ) {
- lo = 1 - lo;
- j = 0;
- }
- p[ ip ] = lo ? lbnd[ i ] : ubnd[ i ];
- }
-
- jmax *= 2;
- }
- }
- }
-
-/* Create a new PointSet holding the above points transformed into the
- current Frame. */
- cmesh = astTransform( smap, bmesh, 1, NULL );
-
-/* Get the axis bounds of this PointSet. */
- astBndPoints( cmesh, lbnd, ubnd );
-
-/* There is a possibility that these bounds may span a singularity in the
- coordinate system such as the RA=0 line in a SkyFrame. So for each
- axis we ensure the width (i.e. "ubnd-lbnd" ) is correct. */
- frm = astGetFrame( this->frameset, AST__CURRENT );
- ncur = astGetNaxes( frm );
-
- for( i = 0; i < ncur; i++ ) {
- width = astAxDistance( frm, i + 1, lbnd[ i ], ubnd[ i ] );
- ubnd[ i ] = lbnd[ i ] + width;
- }
-
-/* Release resources. */
- frm = astAnnul( frm );
- bmesh = astAnnul( bmesh );
- cmesh = astAnnul( cmesh );
- }
- smap = astAnnul( smap );
-}
-
-static void GetRegionBounds2( AstRegion *this, double *lbnd, double *ubnd, int *status ){
-/*
-*+
-* Name:
-* astGetRegionBounds
-
-* Purpose:
-* Returns the bounding box of Region.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "region.h"
-* void astGetRegionBounds2( AstRegion *this, double *lbnd, double *ubnd )
-
-* Class Membership:
-* Region method.
-
-* Description:
-* This function is like astGetRegionBounds, in that it returns the upper
-* and lower limits of a box which just encompasses the supplied Region,
-* as axis values within the Frame represented by the Region. But, in
-* addition to assuming that the supplied Region has not been negated, it
-* also assumes that any component Regions contained within the supplied
-* Region have not been negated.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* lbnd
-* Pointer to an array in which to return the lower axis bounds
-* covered by the Region. It should have at least as many elements
-* as there are axes in the Region.
-* ubnd
-* Pointer to an array in which to return the upper axis bounds
-* covered by the Region. It should have at least as many elements
-* as there are axes in the Region.
-
-* Notes:
-* - The value of the Negated attribute is ignored (i.e. it is assumed that
-* the Region has not been negated). The Nagated attributes of any
-* component Regions are also ignored.
-
-*-
-*/
-
-/* Local Variables: */
- AstMapping *smap; /* Simplified base -> current Mapping */
- double *lbndb; /* Pointer to lower bounds on base box */
- double *ubndb; /* Pointer to upper bounds on base box */
- int i; /* Axis count */
- int nbase; /* Number of base Frame axes */
- int ncur; /* Number of current Frame axes */
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* Find the number of axes in the base and current Frames of the
- encapsulated FrameSet. */
- nbase = astGetNin( this->frameset );
- ncur = astGetNout( this->frameset );
-
-/* Get the bounding box in the base Frame of the encapsulated FrameSet. */
- lbndb = astMalloc( sizeof( double )*(size_t) nbase );
- ubndb = astMalloc( sizeof( double )*(size_t) nbase );
- astRegBaseBox2( this, lbndb, ubndb );
-
-/* Get the simplified base to current Mapping. */
- smap = astRegMapping( this );
-
-/* Check pointers can be used safely. */
- if( smap ) {
-
-/* If the simplified Mapping is a UnitMap, just copy the base box bounds
- to the returned arrays */
- if( astIsAUnitMap( smap ) ) {
- for( i = 0; i < ncur; i++ ) {
- lbnd[ i ] = lbndb[ i ];
- ubnd[ i ] = ubndb[ i ];
- }
-
-/* Otherwise, use astMapBox to find the corresponding current Frame
- limits. */
- } else {
- for( i = 0; i < ncur; i++ ) {
- astMapBox( smap, lbndb, ubndb, 1, i, lbnd + i, ubnd + i,
- NULL, NULL );
- }
- }
- }
-
-/* Release resources. */
- smap = astAnnul( smap );
- lbndb = astFree( lbndb );
- ubndb = astFree( ubndb );
-}
-
-static void GetRegionPoints( AstRegion *this, int maxpoint, int maxcoord,
- int *npoint, double *points, int *status ){
-/*
-*++
-* Name:
-c astGetRegionPoints
-f AST_GETREGIONPOINTS
-
-* Purpose:
-* Returns the positions that define the given Region.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "region.h"
-c void astGetRegionPoints( AstRegion *this, int maxpoint, int maxcoord,
-c int *npoint, double *points )
-f CALL AST_GETREGIONPOINTS( THIS, MAXPOINT, MAXCOORD, NPOINT, POINTS,
-f STATUS )
-
-* Class Membership:
-* Region method.
-
-* Description:
-c This function
-f This routine
-* returns the axis values at the points that define the supplied
-* Region. The particular meaning of these points will depend on the
-* type of class supplied, as listed below under "Applicability:".
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Region.
-c maxpoint
-f MAXPOINT = INTEGER (Given)
-* If zero, the number of points needed to define the Region is
-* returned in
-c "*npoint",
-f NPOINT,
-* but no axis values are returned and all other parameters are ignored.
-* If not zero, the supplied value should be the length of the
-c second dimension of the "points"
-f first dimension of the POINTS
-* array. An error is reported if the number of points needed to define
-* the Region exceeds this number.
-c maxcoord
-f MAXCOORD = INTEGER (Given)
-* The length of the
-c first dimension of the "points" array.
-f second dimension of the POINTS array.
-* An error is reported if the number of axes in the supplied Region
-* exceeds this number.
-c npoint
-f NPOINT = INTEGER (Returned)
-c A pointer to an integer in which to return the
-f The
-* number of points defining the Region.
-c points
-f POINTS( MAXPOINT, MAXCOORD ) = DOUBLE PRECISION (Returned)
-c The address of the first element in a 2-dimensional array of
-c shape "[maxcoord][maxpoint]", in which to return
-c the coordinate values at the positions that define the Region.
-c These are stored such that the value of coordinate number
-c "coord" for point number "point" is found in element
-c "points[coord][point]".
-f An array in which to return the coordinates values at the
-f positions that define the Region. These are stored such that the
-f value of coordinate number COORD for point number POINT
-f is found in element POINTS(POINT,COORD).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Applicability:
-* Region
-* All Regions have this attribute.
-* Box
-* The first returned position is the Box centre, and the second is
-* a Box corner.
-* Circle
-* The first returned position is the Circle centre, and the second is
-* a point on the circumference.
-* CmpRegion
-* Returns a value of zero for
-c "*npoint"
-f NPOINT
-* and leaves the supplied array contents unchanged. To find the
-* points defining a CmpRegion, use this method on the component
-* Regions, which can be accessed by invoking
-c astDecompose
-f AST_DECOMPOSE
-* on the CmpRegion.
-* Ellipse
-* The first returned position is the Ellipse centre. The second is
-* the end of one of the axes of the ellipse. The third is some
-* other point on the circumference of the ellipse, distinct from
-* the second point.
-* Interval
-* The first point corresponds to the lower bounds position, and
-* the second point corresponds to the upper bounds position. These
-* are reversed to indicate an extcluded interval rather than an
-* included interval. See the Interval constructor for more
-* information.
-* NullRegion
-* Returns a value of zero for
-c "*npoint"
-f NPOINT
-* and leaves the supplied array contents unchanged.
-* PointList
-* The positions returned are those that were supplied when the
-* PointList was constructed.
-* Polygon
-* The positions returned are the vertex positions that were supplied
-* when the Polygon was constructed.
-* Prism
-* Returns a value of zero for
-c "*npoint"
-f NPOINT
-* and leaves the supplied array contents unchanged. To find the
-* points defining a Prism, use this method on the component
-* Regions, which can be accessed by invoking
-c astDecompose
-f AST_DECOMPOSE
-* on the CmpRegion.
-
-* Notes:
-* - If the coordinate system represented by the Region has been
-* changed since it was first created, the returned axis values refer
-* to the new (changed) coordinate system, rather than the original
-* coordinate system. Note however that if the transformation from
-* original to new coordinate system is non-linear, the shape within
-* the new coordinate system may be distorted, and so may not match
-* that implied by the name of the Region subclass (Circle, Box, etc).
-
-*--
-*/
-
-/* Local Variables: */
- AstPointSet *pset; /* PointSet holding PointList axis values */
- double **ptr; /* Pointer to axes values in the PointList */
- double *p; /* Pointer to next input axis value */
- double *q; /* Pointer to next output axis value */
- int j; /* Axis index */
- int nc; /* No. of axes to copy */
-
-/* Initialise */
- *npoint = 0;
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* Return the number of points used to define the Region, if any. */
- *npoint = this->points ? astGetNpoint( this->points ) : 0;
-
-/* Do nothing more unless a non-zero array size was supplied. */
- if( *npoint > 0 && maxpoint != 0 ) {
-
-/* Transform the base Frame axis values into the current Frame. */
- pset = astTransform( this->frameset, this->points, 1, NULL );
-
-/* Get the dimensionality of this PointList, and get a pointer to the axis
- values. */
- nc = astGetNcoord( pset );
- ptr = astGetPoints( pset );
-
-/* Check pointers can be used safely. */
- if ( astOK ) {
-
-/* Check the supplied array has room for all the axis values. */
- if( nc > maxcoord ) {
- astError( AST__DIMIN, "astGetRegionPoints(%s): The supplied "
- "array can hold up to %d axes but the %s supplied "
- "has %d axes (programming error).", status,
- astGetClass( this ), maxcoord, astGetClass( this ), nc );
-
- } else if( *npoint > maxpoint ) {
- astError( AST__DIMIN, "astGetRegionPoints(%s): The supplied "
- "array can hold up to %d points but the %s supplied "
- "requires %d points to describe it (programming "
- "error).", status, astGetClass( this ), maxpoint,
- astGetClass( this ), *npoint );
-
-/* If all is OK, copy the transformed axis values into the supplied array. */
- } else {
-
-/* Loop round the axes to be copied. */
- for( j = 0; j < nc; j++ ) {
-
-/* Get points to the first element of the input and output arrays. */
- p = ptr[ j ];
- q = points + j*maxpoint;
-
-/* Copying the axis values. */
- (void) memcpy( q, p, sizeof( double )*( *npoint ) );
- }
- }
- }
-
-/* Free resources. */
- pset = astAnnul( pset );
-
- }
-}
-
-static void RegOverlay( AstRegion *this, AstRegion *that, int unc, int *status ){
-/*
-*+
-* Name:
-* astRegOverlay
-
-* Purpose:
-* Copy properties from one Region to another.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* void astRegOverlay( AstRegion *this, AstRegion *that, int unc )
-
-* Class Membership:
-* Region virtual function.
-
-* Description:
-* This function copies selected properties from "that" to "this".
-* It is intended to be called by sub-classes which need to create a
-* similar copy of an existing Region. For instance, subclass
-* implementations of the Simplify method will usually use this
-* function to ensure that the simplified Region loooks like the original
-* Region.
-
-* Parameters:
-* this
-* Pointer to the new Region.
-* that
-* Pointer to the old Region.
-* unc
-* If non-zero, any uncertainty in "this" is cleared if "that" has
-* no uncertainty. If zero, any uncertainty in "this" is left
-* unchanged.
-*-
-*/
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* Copy the required attribute values. */
- this->negated = that->negated;
- this->closed = that->closed;
- this->regionfs = that->regionfs;
- this->adaptive = that->adaptive;
-
-/* Clear things that depend on the number of axes. */
- if( astGetNaxes( this ) == astGetNaxes( that ) ) {
- if( astTestMeshSize( that ) ) astSetMeshSize( this, astGetMeshSize( that ) );
- if( astTestFillFactor( that ) ) astSetFillFactor( this, astGetFillFactor( that ) );
- } else {
- astClearMeshSize( this );
- astClearFillFactor( this );
- }
-
-/* If required, clear uncertainty in "this" if "that" has no uncertainty. */
- if( unc && !astTestUnc( that ) ) astClearUnc( this );
-
-}
-
-static void RegSetAttrib( AstRegion *this, const char *asetting,
- char **base_setting, int *status ) {
-/*
-*+
-* Name:
-* astRegSetAttrib
-
-* Purpose:
-* Set an attribute value for a Region.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* void astRegSetAttrib( AstRegion *this, const char *asetting,
-* char **base_setting )
-
-* Class Membership:
-* Region virtual function
-
-* Description:
-* This function assigns an attribute value to both the base and
-* current Frame in the FrameSet encapsulated within a Region, without
-* remapping either Frame.
-*
-* No error is reported if the attribute is not recognised by the base
-* Frame.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* asetting
-* Pointer to a null terminated attribute setting string. The supplied
-* string will be interpreted using the public interpretation
-* implemented by astSetAttrib. This can be different to the
-* interpretation of the protected accessor functions. For instance,
-* the public interpretation of an unqualified floating point value for
-* the Epoch attribute is to interpet the value as a gregorian year,
-* but the protected interpretation is to interpret the value as an
-* MJD.
-* base_setting
-* Address of a location at which to return a pointer to the null
-* terminated attribute setting string which was applied to the
-* base Frame of the encapsulated FrameSet. This may differ from
-* the supplied setting if the supplied setting contains an axis
-* index and the current->base Mapping in the FrameSet produces an
-* axis permutation. The returned pointer should be freed using
-* astFree when no longer needed. A NULL pointer may be supplied in
-* which case no pointer is returned.
-*-
-*/
-
-/* Local Variables: */
- AstFrame *frm;
- AstMapping *junkmap;
- AstMapping *map;
- AstRegion *unc;
- char *setting;
- char *bsetting;
- char buf1[ 100 ];
- int *outs;
- int axis;
- int baxis;
- int i;
- int len;
- int nc;
- int rep;
- int value;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Produce a lower case version of the setting string */
- nc = strlen( asetting );
- setting = astMalloc( nc + 1 );
- for( i = 0; i < nc; i++ ) setting[ i ] = tolower( asetting[ i ] );
- setting[ nc ] = 0;
-
-/* Apply the setting to the current Frame in the encapsulated FrameSet.
- Use the protected astSetAttrib method which does not cause the Frame
- to be remapped within the FrameSet. */
- frm = astGetFrame( this->frameset, AST__CURRENT );
- astSetAttrib( frm, setting );
- frm = astAnnul( frm );
-
-/* Indicate that we should use the supplied setting with the base Frame. */
- bsetting = NULL;
-
-/* If the attribute name contains an axis number, we need to create a new
- attribute setting which refers to the corresponding base Frame axis
- (since the base<->current Mapping may permute the axes). First parse the
- supplied attribute setting to locate any axis index. */
- len = strlen( setting );
- if( nc = 0, ( 2 == astSscanf( setting, "%[^(](%d)= %n%*s %n", buf1, &axis,
- &value, &nc ) ) && ( nc >= len ) ) {
-
-/* If found, convert the axis index from one-based to zero-based. */
- axis--;
-
-/* See if the specified current Frame axis is connected to one and only
- one base Frame axis. If so, get the index of the base Frame axis. */
- map = astGetMapping( this->frameset, AST__CURRENT, AST__BASE );
- outs = astMapSplit( map, 1, &axis, &junkmap );
- if( junkmap && astGetNout( junkmap ) == 1 ) {
- baxis = outs[ 0 ];
-
-/* If the base Frame axis index is different to the current Frame axis
- index, create a new setting string using the base Frame axis index. */
- if( baxis != axis ) {
- bsetting = astMalloc( strlen( setting ) + 10 );
- if( bsetting ) {
- sprintf( bsetting, "%s(%d)=%s", buf1, baxis + 1, setting + value );
- }
- }
-
-/* If there is no one base Frame axis which corresponds to the supplied
- current Frame axis, report an error. */
- } else if( astOK ) {
- astError( AST__INTER, "astRegSetAttrib(%s): Unable to apply "
- "attribute setting \"%s\" to the base Frame in the %s", status,
- astGetClass( this ), setting, astGetClass( this ) );
- astError( AST__INTER, "There is no base Frame axis corresponding "
- "to current Frame axis %d\n", status, axis + 1 );
- }
-
-/* Free resources */
- outs = astFree( outs );
- if( junkmap ) junkmap = astAnnul( junkmap );
- map = astAnnul( map );
- }
-
-/* Apply the appropriate attribute setting to the base Frame. This time
- ensure that any error caused by the attribute setting is annulled.
- Also apply it to any uncertainty Region (the current Frame of the
- uncertainty Region is assumed to be equivalent to the base Frame of the
- parent Region). */
- frm = astGetFrame( this->frameset, AST__BASE );
- if( frm ) {
- rep = astReporting( 0 );
- astSetAttrib( frm, bsetting ? bsetting : setting );
- if( astTestUnc( this ) ) {
- unc = astGetUncFrm( this, AST__BASE );
- astRegSetAttrib( unc, bsetting ? bsetting : setting, NULL );
- unc = astAnnul( unc );
- }
- if( astStatus == AST__BADAT ) astClearStatus;
- astReporting( rep );
- }
- frm = astAnnul( frm );
-
-/* If required return the modified base Frame setting. Otherwise, free it. */
- if( base_setting ) {
- if( bsetting ) {
- *base_setting = bsetting;
- } else {
- *base_setting = astStore( NULL, setting, strlen( setting ) + 1 );
- }
- } else {
- bsetting = astFree( bsetting );
- }
-
-/* Since the base Frame has been changed, any cached information calculated
- on the basis of the base Frame properties may no longer be up to date. */
- astResetCache( this );
-
-/* Free resources. */
- setting = astFree( setting );
-
-}
-
-static AstMapping *RemoveRegions( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* RemoveRegions
-
-* Purpose:
-* Remove any Regions from a Mapping.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* AstMapping *RemoveRegions( AstMapping *this, int *status )
-
-* Class Membership:
-* Region method (over-rides the astRemoveRegions method inherited
-* from the Frame class).
-
-* Description:
-* This function searches the supplied Mapping (which may be a
-* compound Mapping such as a CmpMap) for any component Mappings
-* that are instances of the AST Region class. It then creates a new
-* Mapping from which all Regions have been removed. If a Region
-* cannot simply be removed (for instance, if it is a component of a
-* parallel CmpMap), then it is replaced with an equivalent UnitMap
-* in the returned Mapping.
-*
-* The implementation provided by the Region class just returns the
-* equivalent Frame.
-
-* Parameters:
-* this
-* Pointer to the original Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the modified mapping.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* The Region class just returns a pointer to a deep copy of the Region's
- equivalent Frame. */
- return astGetRegionFrame( (AstRegion *)this_mapping );
-}
-
-static void ReportPoints( AstMapping *this_mapping, int forward,
- AstPointSet *in_points, AstPointSet *out_points, int *status ) {
-/*
-* Name:
-* ReportPoints
-
-* Purpose:
-* Report the effect of transforming a set of points using a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* void ReportPoints( AstMapping *this, int forward,
-* AstPointSet *in_points, AstPointSet *out_points, int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astReportPoints
-* method inherited from the Frame class).
-
-* Description:
-* This function reports the coordinates of a set of points before
-* and after being transformed by a Region, by writing them to
-* standard output.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* forward
-* A non-zero value indicates that the Region's forward
-* coordinate transformation has been applied, while a zero
-* value indicates the inverse transformation.
-* in_points
-* Pointer to a PointSet which is associated with the
-* coordinates of a set of points before the Region was
-* applied.
-* out_points
-* Pointer to a PointSet which is associated with the
-* coordinates of the same set of points after the Region has
-* been applied.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstRegion *this; /* Pointer to the Region structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_mapping;
-
-/* Obtain a pointer to the Region's current Frame and invoke its
- astReportPoints method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
- astReportPoints( (AstMapping *) fr, forward, in_points, out_points );
- fr = astAnnul( fr );
-
-}
-
-static void ResetCache( AstRegion *this, int *status ){
-/*
-*+
-* Name:
-* astResetCache
-
-* Purpose:
-* Clear cached information within the supplied Region.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* void astResetCache( AstRegion *this )
-
-* Class Membership:
-* Region virtual function
-
-* Description:
-* This function clears cached information from the supplied Region
-* structure.
-
-* Parameters:
-* this
-* Pointer to the Region.
-*-
-*/
- if( this ) {
- if( this->basemesh ) this->basemesh = astAnnul( this->basemesh );
- if( this->basegrid ) this->basegrid = astAnnul( this->basegrid );
- }
-}
-
-
-static void Resolve( AstFrame *this_frame, const double point1[],
- const double point2[], const double point3[],
- double point4[], double *d1, double *d2, int *status ){
-/*
-* Name:
-* Resolve
-
-* Purpose:
-* Resolve a vector into two orthogonal components
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* void Resolve( AstFrame *this, const double point1[],
-* const double point2[], const double point3[],
-* double point4[], double *d1, double *d2, int *status );
-
-* Class Membership:
-* Region member function (over-rides the protected astResolve
-* method inherited from the Frame class).
-
-* Description:
-* This function resolves a vector into two perpendicular components.
-* The vector from point 1 to point 2 is used as the basis vector.
-* The vector from point 1 to point 3 is resolved into components
-* parallel and perpendicular to this basis vector. The lengths of the
-* two components are returned, together with the position of closest
-* aproach of the basis vector to point 3.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* point1
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). This marks the start of the basis vector,
-* and of the vector to be resolved.
-* point2
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). This marks the end of the basis vector.
-* point3
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). This marks the end of the vector to be
-* resolved.
-* point4
-* An array of double, with one element for each Frame axis
-* in which the coordinates of the point of closest approach of the
-* basis vector to point 3 will be returned.
-* d1
-* The address of a location at which to return the distance from
-* point 1 to point 4 (that is, the length of the component parallel
-* to the basis vector). Positive values are in the same sense as
-* movement from point 1 to point 2.
-* d2
-* The address of a location at which to return the distance from
-* point 4 to point 3 (that is, the length of the component
-* perpendicular to the basis vector). The value is always positive.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - Each vector used in this function is the path of
-* shortest distance between two points, as defined by the
-* astDistance function.
-* - This function will return "bad" coordinate values (AST__BAD)
-* if any of the input coordinates has this value, or if the required
-* output values are undefined.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstRegion *this; /* Pointer to the Region structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke this
- Frame's astResolve method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
- astResolve( fr, point1, point2, point3, point4, d1, d2 );
- fr = astAnnul( fr );
-
-}
-
-static AstPointSet *ResolvePoints( AstFrame *this_frame, const double point1[],
- const double point2[], AstPointSet *in,
- AstPointSet *out, int *status ) {
-/*
-* Name:
-* ResolvePoints
-
-* Purpose:
-* Resolve a set of vectors into orthogonal components
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* AstPointSet *ResolvePoints( AstFrame *this, const double point1[],
-* const double point2[], AstPointSet *in,
-* AstPointSet *out )
-
-* Class Membership:
-* Region member function (over-rides the astResolvePoints method
-* inherited from the Frame class).
-
-* Description:
-* This function takes a Frame and a set of vectors encapsulated
-* in a PointSet, and resolves each one into two orthogonal components,
-* returning these two components in another PointSet.
-*
-* This is exactly the same as the public astResolve method, except
-* that this method allows many vectors to be processed in a single call,
-* thus reducing the computational cost of overheads of many
-* individual calls to astResolve.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* point1
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). This marks the start of the basis vector,
-* and of the vectors to be resolved.
-* point2
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). This marks the end of the basis vector.
-* in
-* Pointer to the PointSet holding the ends of the vectors to be
-* resolved.
-* out
-* Pointer to a PointSet which will hold the length of the two
-* resolved components. A NULL value may also be given, in which
-* case a new PointSet will be created by this function.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet. The first axis will
-* hold the lengths of the vector components parallel to the basis vector.
-* These values will be signed (positive values are in the same sense as
-* movement from point 1 to point 2. The second axis will hold the lengths
-* of the vector components perpendicular to the basis vector. These
-* values will always be positive.
-
-* Notes:
-* - The number of coordinate values per point in the input
-* PointSet must match the number of axes in the supplied Frame.
-* - If an output PointSet is supplied, it must have space for
-* sufficient number of points and 2 coordinate values per point.
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstPointSet *result; /* Pointer to output PointSet */
- AstFrame *fr; /* Pointer to current Frame */
- AstRegion *this; /* Pointer to the Region structure */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke this
- Frame's astResolve method. Annul the Frame pointer afterwards. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
- result = astResolvePoints( fr, point1, point2, in, out );
- fr = astAnnul( fr );
-
-/* Return a pointer to the output PointSet. */
- return result;
-
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* void SetAttrib( AstObject *this, const char *setting, int *status )
-
-* Class Membership:
-* Region member function (extends the astSetAttrib method
-* inherited from the Frame class).
-
-* Description:
-* This function assigns an attribute value for a Region, the
-* attribute and its value being specified by means of a string of
-* the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in
-* lower case with no white space present. The value to the right
-* of the "=" should be a suitable textual representation of the
-* value to be assigned and this will be interpreted according to
-* the attribute's data type. White space surrounding the value is
-* only significant for string attributes.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* setting
-* Pointer to a null terminated string specifying the new
-* attribute value.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This protected method is intended to be invoked by the Object
-* astSet method and makes additional attributes accessible to it.
-*/
-
-/* Local Variables: */
- AstRegion *this; /* Pointer to the Region structure */
- double dval; /* Floating point attribute value */
- int ival; /* Integer attribute value */
- int id; /* Offset of ID string */
- int len; /* Length of setting string */
- int nc; /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_object;
-
-/* Obtain the length of the setting string. */
- len = strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse the
- setting string and extract the attribute value (or an offset to it in the
- case of string values). In each case, use the value set in "nc" to check
- that the entire string was matched. Once a value has been obtained, use the
- appropriate method to set it. */
-
-/* We first handle attributes that apply to the Region as a whole
- (rather than to the encapsulated Frame). */
-
-/* Negated */
-/* ------- */
- if ( nc = 0,
- ( 1 == astSscanf( setting, "negated= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetNegated( this, ival );
-
-/* Closed */
-/*------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "closed= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetClosed( this, ival );
-
-/* FillFactor */
-/* ---------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "fillfactor= %lg %n", &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetFillFactor( this, dval );
-
-/* MeshSize */
-/* -------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "meshsize= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetMeshSize( this, ival );
-
-/* Adaptive */
-/* -------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "adaptive= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetAdaptive( this, ival );
-
-/* Now do attributes inherited from parent classes. We do these here to
- avoid the settings being passed on to the encapsulated FrameSet below. */
-
-/* ID. */
-/* --- */
- } else if ( nc = 0, ( 0 == astSscanf( setting, "id=%n%*[^\n]%n", &id, &nc ) )
- && ( nc >= len ) ) {
- astSetID( this, setting + id );
-
-/* Ident. */
-/* ------ */
- } else if ( nc = 0, ( 0 == astSscanf( setting, "ident=%n%*[^\n]%n", &id, &nc ) )
- && ( nc >= len ) ) {
- astSetIdent( this, setting + id );
-
-/* Invert. */
-/* ------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "invert= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetInvert( this, ival );
-
-/* Report. */
-/* ------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "report= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetReport( this, ival );
-
-/* Define macros to see if the setting string matches any of the
- read-only attributes of this class. */
-#define MATCH(attrib) \
- ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
- ( nc >= len ) )
-
-#define AXISMATCH(attrib) \
- ( nc = 0, ( 0 == astSscanf( setting, attrib "(%*d)=%*[^\n]%n", &nc ) ) && \
- ( nc >= len ) )
-
-/* If the attribute was not recognised, use this macro to report an error
- if a read-only attribute has been specified. */
- } else if ( MATCH( "class" ) ||
- MATCH( "nin" ) ||
- MATCH( "nobject" ) ||
- MATCH( "bounded" ) ||
- MATCH( "nout" ) ||
- MATCH( "refcount" ) ||
- MATCH( "tranforward" ) ||
- MATCH( "traninverse" ) ) {
- astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.", status,
- setting, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Pass unrecognised attributes on to the Region's encapsulated FrameSet for
- further interpretation. Do not pass on FrameSet attributes since we
- pretend to the outside world that the encapsulated FrameSet is actually a
- Frame. */
- } else if ( !MATCH( "base" ) &&
- !MATCH( "current" ) &&
- !MATCH( "nframe" ) ) {
-
-/* If the Region is to adapt to coordinate system chanmges, use the public
- astSet method so that the current Frame in the encapsulated FrameSet will
- be re-mapped if the attribute changes require it. */
- if( astGetAdaptive( this ) ) {
- astSet( this->frameset, setting, status );
-
-/* If the Region is not to adapt to coordinate system chanmges, use the
- astRegSetAttrib method which assigns the attribute setting to both
- current and base Frames in the FrameSet without causing any remapping to
- be performed. */
- } else {
- astRegSetAttrib( this, setting, NULL );
- }
- }
-
-/* Undefine macros local to this function. */
-#undef MATCH
-}
-
-static void SetAxis( AstFrame *this_frame, int axis, AstAxis *newaxis, int *status ) {
-/*
-* Name:
-* SetAxis
-
-* Purpose:
-* Set a new Axis for a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* void SetAxis( AstFrame *this, int axis, AstAxis *newaxis, int *status )
-
-* Class Membership:
-* Region member function (over-rides the astSetAxis method
-* inherited from the Frame class).
-
-* Description:
-* This function allows a new Axis object to be associated with one
-* of the axes of the current Frame in a Region, replacing the
-* previous one. Each Axis object contains a description of the
-* quantity represented along one of the Frame's axes, so this
-* function allows this description to be exchanged for another
-* one.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* axis
-* The index (zero-based) of the axis whose associated Axis
-* object is to be replaced.
-* newaxis
-* Pointer to the new Axis object.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstRegion *this; /* Pointer to the Region structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_frame;
-
-/* Validate the axis index supplied. */
- (void) astValidateAxis( this, axis, "astSetAxis" );
-
-/* Obtain a pointer to the Region's current Frame and invoke this
- Frame's astSetAxis method to assign the new Axis object. Annul the
- Frame pointer afterwards. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
- astSetAxis( fr, axis, newaxis );
- fr = astAnnul( fr );
-}
-
-static void SetRegFS( AstRegion *this, AstFrame *frm, int *status ) {
-/*
-*+
-* Name:
-* astSetRegFS
-
-* Purpose:
-* Stores a new FrameSet in a Region
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* void astSetRegFS( AstRegion *this, AstFrame *frm )
-
-* Class Membership:
-* Region virtual function.
-
-* Description:
-* This function creates a new FrameSet and stores it in the supplied
-* Region. The new FrameSet contains two copies of the supplied
-* Frame, connected by a UnitMap.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* frm
-* The Frame to use.
-*-
-*/
-
-/* Local Variables: */
- AstFrame *f1; /* Copy of supplied Frame */
- AstFrame *f2; /* Copy of supplied Frame */
- AstFrameSet *fs; /* New FrameSet */
- AstRegion *unc; /* Uncertainty Region */
- AstUnitMap *um; /* UnitMap connecting base anc current Frames */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Take a copy of the supplied Frame. */
- f1 = astCopy( frm );
-
-/* Create the new FrameSet. First take another copy of the supplied Frame
- so that modifications using the supplied pointer will not affect the new
- FrameSet. We create two copies (rather than 1) because the base and
- current Frames must be independant objects - otherwise attribute changes
- done to one will also appear in the other. Then construct the FrameSet
- containing the two Frame copies connected by a UnitMap. */
- f2 = astCopy( f1 );
- fs = astFrameSet( f1, "", status );
- um = astUnitMap( astGetNaxes( f1 ), "", status );
- astAddFrame( fs, AST__BASE, um, f2 );
- um = astAnnul( um );
- f2 = astAnnul( f2 );
-
-/* Annul any existing FrameSet */
- if( this->frameset ) (void) astAnnul( this->frameset );
-
-/* Use the new FrameSet */
- this->frameset = fs;
-
-/* If any uncertainty Region has a zero value for its RegionFS attribute,
- it will currently contain a dummy FrameSet rather than the correct
- FrameSet. The correct FrameSet has copies of the base Frame of the new
- Region as both its current and base Frames, and these are connected by
- a UnitMap (this is equivalent to a FrameSet containing a single Frame). */
- if( astTestUnc( this ) ) {
- unc = astGetUncFrm( this, AST__BASE );
- if( unc && !astGetRegionFS( unc ) ) astSetRegFS( unc, f1 );
- unc = astAnnul( unc );
- }
-
-/* Free remaining resourvces */
- f1 = astAnnul( f1 );
-
-}
-
-static void SetUnc( AstRegion *this, AstRegion *unc, int *status ){
-/*
-*++
-* Name:
-c astSetUnc
-f AST_SETUNC
-
-* Purpose:
-* Store uncertainty information in a Region.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "region.h"
-c void astSetUnc( AstRegion *this, AstRegion *unc )
-f CALL AST_SETUNC( THIS, UNC, STATUS )
-
-* Class Membership:
-* Region method.
-
-* Description:
-* Each Region (of any class) can have an "uncertainty" which specifies
-* the uncertainties associated with the boundary of the Region. This
-* information is supplied in the form of a second Region. The uncertainty
-* in any point on the boundary of a Region is found by shifting the
-* associated "uncertainty" Region so that it is centred at the boundary
-* point being considered. The area covered by the shifted uncertainty
-* Region then represents the uncertainty in the boundary position.
-* The uncertainty is assumed to be the same for all points.
-*
-* The uncertainty is usually specified when the Region is created, but
-* this
-c function
-f routine
-* allows it to be changed at any time.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Region which is to be assigned a new uncertainty.
-c unc
-f UNC = INTEGER (Given)
-* Pointer to the new uncertainty Region. This must be of a class for
-* which all instances are centro-symetric (e.g. Box, Circle, Ellipse,
-* etc.) or be a Prism containing centro-symetric component Regions.
-* A deep copy of the supplied Region will be taken, so subsequent
-* changes to the uncertainty Region using the supplied pointer will
-* have no effect on the Region
-c "this".
-f THIS.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-*--
-*/
-
-/* Local Variables: */
- AstFrame *frm; /* Current Frame from FrameSet */
- AstFrameSet *fs2; /* FrameSet from "unc" current Frame to "this" base Frame */
- AstFrameSet *fs; /* FrameSet in "this" supplied Region */
- AstMapping *map2; /* Base->current Mapping from FrameSet */
- AstMapping *map; /* Base->current Mapping from FrameSet */
- AstMapping *smap; /* Simplified base->current Mapping */
- double *cen0; /* Pointer to array holding original centre */
- double **ptr_reg; /* Pointer to axis values for Region's Pointset */
- int changed; /* Has the uncertainty been changed? */
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* Annul any existing uncertainty Region. */
- if( this->unc ) {
- this->unc = astIsAObject( this->unc ) ?
- astAnnul( this->unc ) : NULL;
- changed = 1;
- } else {
- changed = 0;
- }
-
-/* Check an uncertainty Region was supplied, and is of a usable class
- (i.e. a class which can be re-centred). */
- cen0 = unc ? astRegCentre( unc, NULL, NULL, 0, 0 ) : NULL;
- if( cen0 ) {
- cen0 = astFree( cen0 );
-
-/* Map it into the same Frame as that represented by the base Frame in
- the supplied Region. */
- fs = this->frameset;
- astInvert( fs );
- fs2 = Conv( unc->frameset, fs, status );
- astInvert( fs );
-
- if( fs2 ) {
- map = astGetMapping( fs2, AST__BASE, AST__CURRENT );
- frm = astGetFrame( fs2, AST__CURRENT );
- this->unc = astMapRegion( unc, map, frm );
- if( this->unc ) {
-
-/* Ensure the Region is bounded. We know that negating an unbounded
- Region will make it bounded because we know that the Region consists of
- Circles, Boxes and/or Ellipses, all of which have this property. */
- if( !astGetBounded( this->unc ) ) astNegate( this->unc );
-
-/* If the base Frame in the uncertainty Region is the same as the base
- Frame in the Region being dumped, then we do no need to include the
- FrameSet in the dump of the uncertainty Region. Since the current
- Frame in the uncertainty Region always corresponds to the base Frame of
- its parent Region, we only need to check if the base->current Mapping
- in the uncertainty Region's FrameSet is a UnitMap or not (after
- simplification). If it is, set the RegionFS attribute of the uncertainty
- Region to zero (i.e. false). This will cause the FrameSet to be omitted
- from the Dump. */
- map2 = astGetMapping( this->unc->frameset, AST__BASE, AST__CURRENT );
- smap = astSimplify( map2 );
- if( astIsAUnitMap( smap ) ) astSetRegionFS( this->unc, 0 );
-
-/* Re-centre the uncertainty Region at the first position in the PointSet
- associated with the Region structure (if any). */
- if( this->points ) {
- ptr_reg = astGetPoints( this->points );
- astRegCentre( this->unc, NULL, ptr_reg, 0, AST__CURRENT );
- }
-
-/* Set a flag indicating that the uncertainty in the Region has changed. */
- changed = 1;
-
-/* Free resources */
- map2 = astAnnul( map2 );
- smap = astAnnul( smap );
- }
- frm = astAnnul( frm );
- fs2 = astAnnul( fs2 );
- map = astAnnul( map );
-
-/* Report error if conversion between Frames is not possible. */
- } else if( astOK ) {
- astError( AST__BADIN, "astSetUnc(%s): Bad %d dimensional "
- "uncertainty Frame (%s %s) supplied.", status, astGetClass(this),
- astGetNaxes(unc), astGetDomain(unc), astGetTitle(unc) );
- astError( AST__NCPIN, "Cannot convert it to the Frame of the "
- "new %s.", status, astGetClass( this ) );
- }
-
-/* Report an error if it is not of a usable class. */
- } else if( unc && astOK ){
- astError( AST__BADIN, "astSetUnc(%s): Bad uncertainty shape "
- "(%s) supplied.", status, astGetClass( this ), astGetClass(unc) );
- astError( AST__NCPIN, "The uncertainty Region must be an instance of "
- "a centro-symetric subclass of Region (e.g. Box, Circle, "
- "Ellipse, etc)." , status);
- }
-
-/* If the uncertainty in the Region has changed, indicate that any cached
- information in the Region is now out of date. */
- if( changed ) astResetCache( this );
-
-}
-
-static void ShowMesh( AstRegion *this, int format, const char *ttl, int *status ){
-/*
-*++
-* Name:
-c astShowMesh
-f AST_SHOWMESH
-
-* Purpose:
-* Display a mesh of points covering the surface of a Region.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "region.h"
-c void astShowMesh( AstRegion *this, int format, const char *ttl )
-f CALL AST_SHOWMESH( THIS, FORMAT, TTL, STATUS )
-
-* Class Membership:
-* Region method.
-
-* Description:
-c This function
-f This routine
-* writes a table to standard output containing the axis values at a
-* mesh of points covering the surface of the supplied Region. Each row
-* of output contains a tab-separated list of axis values, one for
-* each axis in the Frame encapsulated by the Region. The number of
-* points in the mesh is determined by the MeshSize attribute.
-*
-* The table is preceeded by a given title string, and followed by a
-* single line containing the word "ENDMESH".
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Region.
-c format
-f FORMAT = LOGICAL (Given)
-* A boolean value indicating if the displayed axis values should
-* be formatted according to the Format attribute associated with
-* the Frame's axis. Otherwise, they are displayed as simple
-* floating point values.
-c ttl
-f TTL = CHARACTER * ( * ) (Given)
-* A title to display before displaying the first position.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-*--
-*/
-
-/* Local Variables: */
- AstPointSet *ps; /* PointSet holding mesh */
- char *buffer = NULL; /* Buffer for line output text */
- char buf[ 40 ]; /* Buffer for floating poitn value */
- double **ptr; /* Pointers to the mesh data */
- int i; /* Axis index */
- int j; /* Position index */
- int nax; /* Number of axes */
- int nc; /* Number of characters in buffer */
- int np; /* Number of axis values per position */
-
-/* Check the inherited status. */
- if( !astOK ) return;
-
-/* Get a PointSet holding the mesh */
- ps = astRegMesh( this );
- if( ps ) {
-
-/* Get the number of axis values per position, and the number of positions. */
- nax = astGetNcoord( ps );
- np = astGetNpoint( ps );
-
-/* Get a pointer to the mesh data, and check it can be used. */
- ptr = astGetPoints( ps );
- if( ptr ) {
-
-/* Display the title. */
- if( ttl ) printf( "\n%s\n\n", ttl );
-
-/* Loop round all positions. */
- for( j = 0; j < np; j++ ) {
-
-/* Reset the current buffer length to zero. */
- nc = 0;
-
-/* Loop round all axes */
- for( i = 0; i < nax; i++ ){
-
-/* If the axis value is bad, append "<bad> in the end of the output buffer. */
- if( ptr[ i ][ j ] == AST__BAD ){
- buffer = astAppendString( buffer, &nc, "<bad>" );
-
-/* Otherwise, if required, append the formatted value to the end of the
- buffer. */
- } else if( format ){
- buffer = astAppendString( buffer, &nc,
- astFormat( this, i, ptr[ i ][ j ] ) );
-
-/* Otherwise, append the floating point value to the end of the buffer. */
- } else {
- sprintf( buf, "%g", ptr[ i ][ j ] );
- buffer = astAppendString( buffer, &nc, buf );
- }
-/* Add a separating tab to the end of the buffer. */
- buffer = astAppendString( buffer, &nc, "\t" );
- }
-
-/* Display the line buffer. */
- printf( "%s\n", buffer );
- }
- }
-
-/* Print out a marker for th eend of the list. */
- printf( "ENDMESH\n\n" );
-
-/* Release resources. */
- ps = astAnnul( ps );
- buffer = astFree( buffer );
- }
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* Simplify
-
-* Purpose:
-* Simplify the Mapping represented by a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* AstMapping *Simplify( AstMapping *this, int *status )
-
-* Class Membership:
-* Region method (over-rides the astSimplify method inherited
-* from the Frame class).
-
-* Description:
-* This function simplifies the encapsulated FrameSet and any
-* uncertainty Region in the supplied Region. This is different to
-* the Simplify method in the parent Frame class which always returns
-* a UnitMap.
-
-* Parameters:
-* this
-* Pointer to the original Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the simplified Region. A cloned pointer to the
-* supplied Region will be returned if no simplication could be
-* performed.
-
-* Notes:
-* - This implementation just simplifies the encapsulated FrameSet
-* and uncertainty Region. Sub-classes should usually provide their own
-* implementation which invokes this implemetation, and then continues to
-* check for further simplifications (such as fitting a new region to the
-* current Frame).
-* - A NULL pointer value will be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstFrame *bfrm; /* Pointer to "this" baseFrame */
- AstFrameSet *fs; /* Pointer to encapsulated FrameSet */
- AstMapping *map; /* Base->current Mapping for "this" */
- AstMapping *result; /* Result pointer to return */
- AstPointSet *pset1; /* Base Frame centre position */
- AstPointSet *pset2; /* Current Frame centre position */
- AstRegion *new; /* Pointer to simplified Region */
- AstRegion *sunc; /* Simplified uncertainty Region */
- AstRegion *this; /* Pointer to original Region structure */
- AstRegion *unc; /* Original uncertainty Region */
- double **ptr1; /* Pointer to axis values in "pset1" */
- double *cen; /* Original centre of uncertainty Region */
- double *lbnd; /* Lower bounds of "this" bounding box */
- double *orig_cen; /* Original centre for uncertainty Region */
- double *s1_lbnd; /* Lower bounds of "unc" when centred at lbnd */
- double *s1_ubnd; /* Upper bounds of "unc" when centred at lbnd */
- double *s2_lbnd; /* Lower bounds of "unc" when centred at ubnd */
- double *s2_ubnd; /* Upper bounds of "unc" when centred at ubnd */
- double *ubnd; /* Upper bounds of "this" bounding box */
- double delta; /* Half width of test box */
- double w1; /* Width of "s1" bounding box */
- double w2; /* Width of "s2" bounding box */
- int ic; /* Axis index */
- int naxb; /* No. of base Frame axes in "this" */
- int nin; /* Number of base Frame axes in "this" */
- int nout; /* Number of current Frame axes in "this" */
- int ok; /* Can we use the simplified uncertainty? */
- int simpler; /* Has some simplication taken place? */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_mapping;
-
-/* Take a deep copy of the supplied Region. This is so that the returned
- pointer will have a diferent value to the supplied pointer if any
- simplication takes place. */
- new = astCopy( this );
-
-/* Simplify the encapsulated FrameSet, and note if any simplification took
- place. */
- fs = astSimplify( new->frameset );
- simpler = ( fs != new->frameset );
-
-/* If so, annull the existing FrameSet and use the simpler FrameSet. */
- if( simpler ) {
- (void) astAnnul( new->frameset );
- new->frameset = astClone( fs );
- }
- fs = astAnnul( fs );
-
-/* If the Region has default uncertainty, we simplify the uncertainty
- Region simply by deleting it. It will be regenerated when needed,
- using the simplified Region. */
- if( new->defunc ) new->defunc = astAnnul( new->defunc );
-
-/* If the Region's uncertainty was supplied explicitly, try simplifying
- the unncertainty Region. */
- if( astTestUnc( new ) ){
-
-/* Obtain the Region's uncertainty. */
- unc = astGetUncFrm( new, AST__BASE );
-
-/* Get the base->current Mapping from "this". */
- map = astGetMapping( this->frameset, AST__BASE, AST__CURRENT );
-
-/* If it has different numbers of inputs and outputs (e.g. a PermMap used
- to take a slice through a Region), we need to ensure that the
- uncertainty Region is centred on the slice. */
- nin = astGetNin( map );
- nout = astGetNout( map );
- if( nin != nout ) {
-
-/* Get the current centre of the uncertainty Region in its current Frame
- (the same as the base Frame of "this"). */
- cen = astRegCentre( unc, NULL, NULL, 0, AST__CURRENT );
-
-/* Store it in a PointSet so it can be transformed. */
- pset1 = astPointSet( 1, nin, "", status );
- ptr1 = astGetPoints( pset1 );
- if( astOK ) for( ic = 0; ic < nin; ic++ ) ptr1[ ic ][ 0 ] = cen[ ic ];
-
-/* Transform into the curent Frame of "this", and then back into the base
- Frame. */
- pset2 = astTransform( map, pset1, 1, NULL );
- (void) astTransform( map, pset2, 0, pset1 );
-
-/* Re-centre the uncertainty Region at this position. */
- astRegCentre( unc, NULL, ptr1, 0, AST__CURRENT );
-
-/* Free resources. */
- cen = astFree( cen );
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
- }
-
-/* Free resources. */
- map = astAnnul( map );
-
-/* Try simplifying the uncertainty. Only proceed if the uncertainty can
- be simplified. */
- sunc = astSimplify( unc );
- if( sunc != unc ) {
-
-/* If the uncertainty can be simplified it means that the base->current
- Mapping in the uncertainty Region is sufficiently linear to allow the
- uncertainty shape to retain its form when transformed from the base to
- the current Frane. But this has only been tested at the current centre
- position in the uncertainty Region. The uncertainty Region should
- describe the whole of "this" Region, and so we need to check that the
- simplified uncertainty does not change as we move it around within "this"
- Region. To do this, we re-centre the uncertainty region at opposite
- corners of a large test box, and then we find the bounding box of the
- re-centred uncertainty Region. If this uncertainty bounding box changes
- from corner to corner of the test box, then we do not simplify the
- uncertainty Region. If "this" is bounded, we use the bounding box of
- "this" as the test box. Otherwise we use a box 100 times the size of the
- uncertainty Region. */
-
-/* Note the original base Frame centre of the simplified uncertainty Region. */
- orig_cen = astRegCentre( sunc, NULL, NULL, 0, AST__BASE );
-
-/* Allocate memory to hold the bounds of the test box. */
- naxb = astGetNin( this->frameset );
- lbnd = astMalloc( sizeof( double )*(size_t)naxb );
- ubnd = astMalloc( sizeof( double )*(size_t)naxb );
-
-/* If possible, get the base Frame bounding box of "this" and use it as
- the test box. */
- if( astGetBounded( this ) ) {
- astRegBaseBox( this, lbnd, ubnd );
-
-/* Otherwise, store the bounds of a box which is 100 times the size of
- the uncertainty region, centred on the current centre of the uncertainty
- region (we know all uncertainty regions are bounded). */
- } else {
- astGetRegionBounds( sunc, lbnd, ubnd );
- for( ic = 0; ic < naxb; ic++ ) {
- delta = 0.5*fabs( ubnd[ ic ] - lbnd[ ic ] );
- lbnd[ ic ] = orig_cen[ ic ] - delta;
- ubnd[ ic ] = orig_cen[ ic ] + delta;
- }
- }
-
-/* Re-centre it at the lower bounds of the test box. This is in the base Frame
- of "this" which is the same as the current Frame of "sunc". */
- astRegCentre( sunc, lbnd, NULL, 0, AST__CURRENT );
-
-/* Get the bounding box of the re-centred uncertainty Region, within its
- current Frame, which is the same as the base Frame of "this". */
- s1_lbnd = astMalloc( sizeof( double )*(size_t)naxb );
- s1_ubnd = astMalloc( sizeof( double )*(size_t)naxb );
- astGetRegionBounds( sunc, s1_lbnd, s1_ubnd );
-
-/* Now re-centre the uncertainty Region at the upper bounds of the test
- box. */
- astRegCentre( sunc, ubnd, NULL, 0, AST__CURRENT );
-
-/* Get the bounding box of the re-centred uncertainty Region. */
- s2_lbnd = astMalloc( sizeof( double )*(size_t)naxb );
- s2_ubnd = astMalloc( sizeof( double )*(size_t)naxb );
- astGetRegionBounds( sunc, s2_lbnd, s2_ubnd );
-
-/* Get a pointer to the base Frame of "this". */
- bfrm = astGetFrame( this->frameset, AST__BASE );
-
-/* The "ok" flag is initialised to indicate that the simplified uncertainty
- Region should not be used. */
- ok = 0;
-
-/* Check pointers can be referenced safely */
- if( astOK ) {
-
-/* Now indicate that the simplified uncertainty Region should be used. */
- ok = 1;
-
-/* Loop round all axes of the base Frame of "this". */
- for( ic = 0; ic < naxb; ic++ ) {
-
-/* Get the width of the two bounding boxes on this axis. */
- w1 = s1_ubnd[ ic ] - s1_lbnd[ ic ];
- w2 = s2_ubnd[ ic ] - s2_lbnd[ ic ];
-
-/* If these differ by more than 0.1% then we determine that the simplified
- uncertainty Region varies in size across the bounding box of "this", and
- so we do not use the simplified uncertainty Region. The figure of 0.1%
- is arbitrary. */
- if( fabs( w1 - w2 ) > 0.005*( fabs( w1 ) + fabs( w2 ) ) ) {
- ok = 0;
- break;
- }
- }
- }
-
-/* Reinstate the original base Frame centre of the simplified uncertainty Region. */
- astRegCentre( sunc, orig_cen, NULL, 0, AST__BASE );
-
-/* Free resources. */
- orig_cen = astFree( orig_cen );
- lbnd = astFree( lbnd );
- ubnd = astFree( ubnd );
- s1_lbnd = astFree( s1_lbnd );
- s1_ubnd = astFree( s1_ubnd );
- s2_lbnd = astFree( s2_lbnd );
- s2_ubnd = astFree( s2_ubnd );
- bfrm = astAnnul( bfrm );
-
-/* If we can use the simplified uncertainty Region, indicate that we have
- performed some simplification, and store the new uncertainty Region. */
- if( ok ) {
- simpler = 1;
- astSetUnc( new, sunc );
- }
- }
-
-/* Free resources */
- unc = astAnnul( unc );
- sunc = astAnnul( sunc );
- }
-
-/* If any simplification could be performed, return the new Region.
- Otherwise, return a clone of the supplied pointer. */
- if( simpler ){
- result = (AstMapping *) new;
- } else {
- new = astAnnul( new );
- result = astClone( this );
- }
-
-/* If an error occurred, annul the returned pointer. */
- if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static int SubFrame( AstFrame *this_frame, AstFrame *template,
- int result_naxes,
- const int *target_axes, const int *template_axes,
- AstMapping **map, AstFrame **result, int *status ) {
-/*
-* Name:
-* SubFrame
-
-* Purpose:
-* Select axes from a Region and convert to the new coordinate system.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* int SubFrame( AstFrame *target, AstFrame *template, int result_naxes,
-* const int *target_axes, const int *template_axes,
-* AstMapping **map, AstFrame **result, int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astSubFrame
-* method inherited from the Frame class).
-
-* Description:
-* This function selects a requested sub-set (or super-set) of the
-* axes from the current Frame of a "target" Region and creates a
-* new Frame with copies of the selected axes assembled in the
-* requested order. It then optionally overlays the attributes of a
-* "template" Frame on to the result. It returns both the resulting
-* Frame and a Mapping that describes how to convert between the
-* coordinate systems described by the current Frame of the target
-* Region and the result Frame. If necessary, this Mapping takes
-* account of any differences in the Frames' attributes due to the
-* influence of the template.
-
-* Parameters:
-* target
-* Pointer to the target Region, from whose current Frame the
-* axes are to be selected.
-* template
-* Pointer to the template Frame, from which new attributes for
-* the result Frame are to be obtained. Optionally, this may be
-* NULL, in which case no overlaying of template attributes will
-* be performed.
-* result_naxes
-* Number of axes to be selected from the target Region. This
-* number may be greater than or less than the number of axes in
-* the Region's current Frame (or equal).
-* target_axes
-* Pointer to an array of int with result_naxes elements, giving
-* a list of the (zero-based) axis indices of the axes to be
-* selected from the current Frame of the target Region. The
-* order in which these are given determines the order in which
-* the axes appear in the result Frame. If any of the values in
-* this array is set to -1, the corresponding result axis will
-* not be derived from the target Region, but will be assigned
-* default attributes instead.
-* template_axes
-* Pointer to an array of int with result_naxes elements. This
-* should contain a list of the template axes (given as
-* zero-based axis indices) with which the axes of the result
-* Frame are to be associated. This array determines which axes
-* are used when overlaying axis-dependent attributes of the
-* template on to the result. If any element of this array is
-* set to -1, the corresponding result axis will not receive any
-* template attributes.
-*
-* If the template argument is given as NULL, this array is not
-* used and a NULL pointer may also be supplied here.
-* map
-* Address of a location to receive a pointer to the returned
-* Mapping. The forward transformation of this Mapping will
-* describe how to convert coordinates from the coordinate
-* system described by the current Frame of the target Region
-* to that described by the result Frame. The inverse
-* transformation will convert in the opposite direction.
-* result
-* Address of a location to receive a pointer to the result Frame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if coordinate conversion is
-* possible between the current Frame of the target Region and
-* the result Frame. Otherwise zero is returned and *map and
-* *result are returned as NULL (but this will not in itself result
-* in an error condition). In general, coordinate conversion should
-* always be possible if no template Frame is supplied but may not
-* always be possible otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to Region's current Frame */
- int match; /* Result to be returned */
-
-/* Initialise. */
- *map = NULL;
- *result = NULL;
- match = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return match;
-
-/* Invoke the parent astSubFrame method on the Frame represented by the
- region. */
- fr = astGetFrame( ((AstRegion *) this_frame)->frameset, AST__CURRENT );
- match = astSubFrame( fr, template, result_naxes, target_axes, template_axes,
- map, result );
- fr = astAnnul( fr );
-
-/* Return the result. */
- return match;
-}
-
-static AstSystemType SystemCode( AstFrame *this_frame, const char *system, int *status ) {
-/*
-* Name:
-* SystemCode
-
-* Purpose:
-* Convert a string into a coordinate system type code.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* AstSystemType SystemCode( AstFrame *this, const char *system, int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astSystemCode
-* method inherited from the Frame class).
-
-* Description:
-* This function converts a string used for the external description of
-* a coordinate system into a Frame coordinate system type code (System
-* attribute value). It is the inverse of the astSystemString function.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* system
-* Pointer to a constant null-terminated string containing the
-* external description of the coordinate system.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The System type code.
-
-* Notes:
-* - A value of AST__BADSYSTEM is returned if the coordinate system
-* description was not recognised. This does not produce an error.
-* - A value of AST__BADSYSTEM is also returned if this function
-* is invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- AstSystemType result; /* Result value to return */
- AstFrame *fr; /* Pointer to FrameSet's current Frame */
- AstRegion *this; /* Pointer to the Region structure */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke the
- astSystemCode method for this Frame. Annul the Frame pointer afterwards. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
- result = astSystemCode( fr, system );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = AST__BADSYSTEM;
-
-/* Return the result. */
- return result;
-}
-
-static const char *SystemString( AstFrame *this_frame, AstSystemType system, int *status ) {
-/*
-* Name:
-* SystemString
-
-* Purpose:
-* Convert a coordinate system type code into a string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* const char *SystemString( AstFrame *this, AstSystemType system, int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astSystemString
-* method inherited from the Frame class).
-
-* Description:
-* This function converts a Frame coordinate system type code
-* (System attribute value) into a string suitable for use as an
-* external representation of the coordinate system type.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* system
-* The coordinate system type code.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a constant null-terminated string containing the
-* textual equivalent of the type code supplied.
-
-* Notes:
-* - A NULL pointer value is returned if the coordinate system
-* code was not recognised. This does not produce an error.
-* - A NULL pointer value is also returned if this function is
-* invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to FrameSet's current Frame */
- AstRegion *this; /* Pointer to the Region structure */
- const char *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke the
- astSystemString method for this Frame. Annul the Frame pointer
- afterwards. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
- result = astSystemString( fr, system );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = NULL;
-
-/* Return the result pointer. */
- return result;
-
-}
-
-static int RegTrace( AstRegion *this, int n, double *dist, double **ptr, int *status ){
-/*
-*+
-* Name:
-* astRegTrace
-
-* Purpose:
-* Return requested positions on the boundary of a 2D Region.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* int astRegTrace( AstRegion *this, int n, double *dist, double **ptr );
-
-* Class Membership:
-* Region virtual function
-
-* Description:
-* This function returns positions on the boundary of the supplied
-* Region, if possible. The required positions are indicated by a
-* supplied list of scalar parameter values in the range zero to one.
-* Zero corresponds to some arbitrary starting point on the boundary,
-* and one corresponds to the end (which for a closed region will be
-* the same place as the start).
-
-* Parameters:
-* this
-* Pointer to the Region.
-* n
-* The number of positions to return. If this is zero, the function
-* returns without action (but the returned function value still
-* indicates if the method is supported or not).
-* dist
-* Pointer to an array of "n" scalar parameter values in the range
-* 0 to 1.0.
-* ptr
-* A pointer to an array of pointers. The number of elements in
-* this array should equal tthe number of axes in the Frame spanned
-* by the Region. Each element of the array should be a pointer to
-* an array of "n" doubles, in which to return the "n" values for
-* the corresponding axis. The contents of the arrays are unchanged
-* if the supplied Region belongs to a class that does not
-* implement this method.
-
-* Returned Value:
-* Non-zero if the astRegTrace method is implemented by the class
-* of Region supplied, and zero if not.
-
-*-
-*/
-
-/* Concrete sub-classes of Region must over-ride this method. */
- return 0;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Region member function (over-rides the astTestAttrib protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a Region's attributes.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstRegion *this; /* Pointer to the Region structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* We first handle attributes that apply to the Region as a whole
- (rather than to the encapsulated FrameSet). */
-
-/* Negated. */
-/* -------- */
- if ( !strcmp( attrib, "negated" ) ) {
- result = astTestNegated( this );
-
-/* Closed. */
-/* ------- */
- } else if ( !strcmp( attrib, "closed" ) ) {
- result = astTestClosed( this );
-
-/* FillFactor */
-/* ---------- */
- } else if ( !strcmp( attrib, "fillfactor" ) ) {
- result = astTestFillFactor( this );
-
-/* MeshSize */
-/* -------- */
- } else if ( !strcmp( attrib, "meshsize" ) ) {
- result = astTestMeshSize( this );
-
-/* Adaptive */
-/* -------- */
- } else if ( !strcmp( attrib, "adaptive" ) ) {
- result = astTestAdaptive( this );
-
-/* Now do attributes inherited from parent classes. This is so that the
- attribute test will not be passed on to the encpasulated FrameSet below. */
-
-/* ID. */
-/* --- */
- } else if ( !strcmp( attrib, "id" ) ) {
- result = astTestID( this );
-
-/* Ident. */
-/* ------ */
- } else if ( !strcmp( attrib, "ident" ) ) {
- result = astTestIdent( this );
-
-/* Invert. */
-/* ------- */
- } else if ( !strcmp( attrib, "invert" ) ) {
- result = astTestInvert( this );
-
-/* Report. */
-/* ------- */
- } else if ( !strcmp( attrib, "report" ) ) {
- result = astTestReport( this );
-
-/* If the name is not recognised, test if it matches any of the
- read-only attributes of this class. If it does, then return
- zero. */
- } else if ( !strcmp( attrib, "class" ) ||
- !strcmp( attrib, "nin" ) ||
- !strcmp( attrib, "nobject" ) ||
- !strcmp( attrib, "bounded" ) ||
- !strcmp( attrib, "nout" ) ||
- !strcmp( attrib, "refcount" ) ||
- !strcmp( attrib, "tranforward" ) ||
- !strcmp( attrib, "traninverse" ) ) {
- result = 0;
-
-/* Pass unrecognised attributes on to the Region's encapsulated FrameSet for
- further interpretation. Do not pass on FrameSet attributes since we
- pretend to the outside world that the encapsulated FrameSet is actually a
- Frame. */
- } else if ( strcmp( attrib, "base" ) &&
- strcmp( attrib, "current" ) &&
- strcmp( attrib, "nframe" ) ) {
- result = astTestAttrib( this->frameset, attrib );
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-double *astRegTranPoint_( AstRegion *this, double *in, int np, int forward, int *status ){
-/*
-*+
-* Name:
-* astRegTranPoint
-
-* Purpose:
-* Transform points between the base and current Frames in a Region.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* double *astRegTranPoint( AstRegion *this, double *in, int np, int forward )
-
-* Class Membership:
-* Region member function
-
-* Description:
-* This function transforms one or more points between the base and
-* current Frames of the FrameSet encapsulated by the supplied Region.
-
-* Parameters:
-* this
-* The Region pointer.
-* in
-* Pointer to a 1-d array holding the axis values to be transformed.
-* If "forward" is non-zero, the number of axis values supplied for
-* each position should equal the number of axes in the base Frame
-* of the FrameSet encapsulated by "this". If "forward" is zero, the
-* number of axis values supplied for each position should equal the
-* number of axes in the current Frame of the FrameSet encapsulated by
-* "this". All the axis values for a position should be in adjacent
-* elements of the array.
-* np
-* The number of points supplied in "in".
-* forward
-* If non-zero, the supplied points are assumed to refer to the base
-* Frame of the encapsulated FrameSet, and they are transformed to the
-* current Frame. If zero, the supplied points are assumed to refer to
-* the current Frame of the encapsulated FrameSet, and they are
-* transformed to the base Frame.
-
-* Returned Value:
-* Pointer to a new dynamically allocated array holding the
-* transformed axis values. If "forward" is non-zero, the number of axis
-* values for each position will be equal the number of axes in the
-* current Frame of the FrameSet encapsulated by "this". If "forward" is
-* zero, the number of axis values for each position will be equal to the
-* number of axes in the base Frame of the FrameSet encapsulated by "this".
-* All the axis values for a position will be in adjacent elements of the
-* array. The array should be freed using astFree when no longer needed.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-
-*-
-*/
-
-/* Local Variables: */
- AstMapping *map;
- AstPointSet *pset_in;
- AstPointSet *pset_out;
- double **ptr_in;
- double **ptr_out;
- double *p;
- double *result;
- int ic;
- int ip;
- int naxin;
- int naxout;
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the required Mapping. */
- if( forward ) {
- map = astGetMapping( this->frameset, AST__BASE, AST__CURRENT );
- } else {
- map = astGetMapping( this->frameset, AST__CURRENT, AST__BASE );
- }
-
-/* Get the number of axis values per input and per output point. */
- naxin = astGetNin( map );
- naxout = astGetNout( map );
-
-/* Create a pointSet holding the supplied axis values. */
- pset_in = astPointSet( np, naxin, "", status );
-
-/* Get pointers to the memory used to store axis values within this
- PointSet. */
- ptr_in = astGetPoints( pset_in );
-
-/* Allocate the output array. */
- result = astMalloc( sizeof( double )*(size_t)( naxout*np ) );
-
-/* Check the pointers can be used. */
- if( astOK ) {
-
-/* Store the supplied axis values in the PointSet memory. */
- p = in;
- for( ip = 0; ip < np; ip++ ) {
- for( ic = 0; ic < naxin; ic++ ) ptr_in[ ic ][ ip ] = *(p++);
- }
-
-/* Transform the PointSet. */
- pset_out = astTransform( map, pset_in, 1, NULL );
-
-/* Get a pointer to the memory in the transformed PointSet. */
- ptr_out = astGetPoints( pset_out );
-
- if( pset_out && astStatus == AST__INTER ) {
- p = in;
- for( ip = 0; ip < np; ip++ ) {
- for( ic = 0; ic < naxin; ic++ ) printf("%.*g\n", DBL_DIG, *(p++) );
- }
- }
-
- if( astOK ) {
-
-/* Store the resulting axis values in the output array. */
- p = result;
- for( ip = 0; ip < np; ip++ ) {
- for( ic = 0; ic < naxout; ic++ ) *(p++) = ptr_out[ ic ][ ip ];
- }
- }
-
-/* Free resources. */
- pset_out = astAnnul( pset_out );
- }
- pset_in = astAnnul( pset_in );
- map = astAnnul( map );
-
-/* Return NULL if anything went wrong. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result.*/
- return result;
-}
-
-static AstPointSet *RegTransform( AstRegion *this, AstPointSet *in,
- int forward, AstPointSet *out, AstFrame **frm, int *status ) {
-/*
-*+
-* Name:
-* astRegTransform
-
-* Purpose:
-* Transform a set of points using the encapsulated FrameSet.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* AstPointSet *astRegTransform( AstRegion *this, AstPointSet *in,
-* int forward, AstPointSet *out,
-* AstFrameSet **frm )
-
-* Class Membership:
-* Region virtual function
-
-* Description:
-* This function takes a Region and a set of points encapsulated
-* in a PointSet, and applies either the forward or inverse
-* coordinate transformation represented by the encapsulated FrameSet.
-* It also returned a pointer to either the current or base Frame in
-* the FrameSet.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* in
-* Pointer to the PointSet holding the input coordinate data. If
-* NULL then the "points" PointSet within the supplied Region
-* ("this") is used.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* (from base to current) should be applied, while a zero value requests
-* the inverse transformation (from current to base).
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* frm
-* Location at which to return a pointer to a Frame. If "forward"
-* is non-zero, the current Frame in the encapsulated FrameSet will
-* be returned. Otherwise, the base Frame is returned. The returned
-* pointer should be annulled when no longer needed. May be NULL if
-* no pointer is needed.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet. If "out" is NULL,
-* the returned pointer will be a clone of "in" if the Mapping is a
-* UnitMap. If "out" is not NULL, then the supplied "out" PointSet will
-* be used and returned.
-
-* Notes:
-* - An error will result if the Region supplied does not define
-* the requested coordinate transformation (either forward or
-* inverse).
-* - The number of coordinate values per point in the input
-* PointSet must match the number of input coordinates for the
-* Region being applied (or number of output coordinates if the
-* inverse transformation is requested). This will be equal to the
-* number of axes in the Region's base Frame (or the current
-* Frame for the inverse transformation).
-* - If an output PointSet is supplied, it must have space for
-* sufficient number of points and coordinate values per point to
-* accommodate the result (e.g. the number of Region output
-* coordinates, or number of input coordinates if the inverse
-* transformation is requested). Any excess space will be ignored.
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstMapping *smap; /* Pointer to simplified Mapping */
- AstPointSet *result; /* Pointer value to return */
-
-/* Initialise */
- if( frm ) *frm = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* If no input PointSet was provided, use the PointSet in the Region. */
- if( !in ) {
- if( this->points ) {
- in = this->points;
- } else {
- astError( AST__INTER, "astRegTransform(%s): No PointSet supplied "
- "and the supplied %s has no PointSet (internal AST "
- "programming error)", status, astGetClass( this ),astGetClass( this ) );
- }
- }
-
-/* Get the simplified Mapping from base to current Frame. */
- smap = astRegMapping( this );
-
-/* If it is a UnitMap, return a clone of the input PointSet unless an
- explicit output PointSet has been supplied. */
- if( astIsAUnitMap( smap ) && !out ) {
- result = astClone( in );
-
-/* Otherwise use the Mapping to transform the supplied positions. */
- } else {
- result = astTransform( smap, in, forward, out );
- }
-
-/* Return a pointer to the appropriate Frame. */
- if( frm ) *frm = astGetFrame( this->frameset, forward ? AST__CURRENT : AST__BASE );
-
-/* Release resources. */
- smap = astAnnul( smap );
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-static int Unformat( AstFrame *this_frame, int axis, const char *string,
- double *value, int *status ) {
-/*
-* Name:
-* Unformat
-
-* Purpose:
-* Read a formatted coordinate value for a Region axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* int Unformat( AstFrame *this, int axis, const char *string,
-* double *value, int *status )
-
-* Class Membership:
-* Region member function (over-rides the public astUnformat
-* method inherited from the Frame class).
-
-* Description:
-* This function reads a formatted coordinate value for a Region
-* axis (supplied as a string) and returns the equivalent numerical
-* value as a double. It also returns the number of characters read
-* from the string.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* axis
-* The number of the Region axis for which the coordinate
-* value is to be read (axis numbering starts at zero for the
-* first axis).
-* string
-* Pointer to a constant null-terminated string containing the
-* formatted coordinate value.
-* value
-* Pointer to a double in which the coordinate value read will be
-* returned.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The number of characters read from the string to obtain the
-* coordinate value.
-
-* Notes:
-* - Any white space at the beginning of the string will be
-* skipped, as also will any trailing white space following the
-* coordinate value read. The function's return value will reflect
-* this.
-* - A function value of zero (and no coordinate value) will be
-* returned, without error, if the string supplied does not contain
-* a suitably formatted value.
-* - The string "<bad>" is recognised as a special case and will
-* generate the value AST__BAD, without error. The test for this
-* string is case-insensitive and permits embedded white space.
-* - A function result of zero will be returned and no coordinate
-* value will be returned via the "value" pointer if this function
-* is invoked with the global error status set, or if it should
-* fail for any reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstRegion *this; /* Pointer to the Region structure */
- double coord; /* Coordinate value read */
- int nc; /* Number of characters read */
-
-/* Initialise. */
- nc = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return nc;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_frame;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis, "astUnformat" );
-
-/* Obtain a pointer to the Region's current Frame and invoke the
- astUnformat method for this Frame. Annul the Frame pointer
- afterwards. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
- nc = astUnformat( fr, axis, string, &coord );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the number of characters read. */
- if ( !astOK ) {
- nc = 0;
-
-/* Otherwise, if characters were read, return the coordinate value. */
- } else if ( nc ) {
- *value = coord;
- }
-
-/* Return the number of characters read. */
- return nc;
-}
-
-static int ValidateAxis( AstFrame *this_frame, int axis, const char *method, int *status ) {
-/*
-* Name:
-* ValidateAxis
-
-* Purpose:
-* Validate and permute a Region's axis index.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* int ValidateAxis( AstFrame *this, int axis, const char *method, int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected
-* astValidateAxis method inherited from the Frame class).
-
-* Description:
-* This function checks the validity of an index (zero-based) which
-* is to be used to address one of the coordinate axes of the
-* current Frame in a Region. If the index is valid, it is
-* permuted using the axis permutation array associated with the
-* Region's current Frame and the (zero-based) permuted axis
-* index is returned. This gives the index the axis had when the
-* Frame was first created. If the axis index supplied is not
-* valid, an error is reported and the global error status is set.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* axis
-* The axis index (zero-based) to be checked. To be valid, it
-* must lie between zero and (naxes-1) inclusive, where "naxes"
-* is the number of coordinate axes associated with the
-* Region's current Frame.
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function
-* to validate an axis index. This method name is used solely
-* for constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The permuted axis index.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstRegion *this; /* Pointer to the Region structure */
- int naxes; /* Number of Region axes */
- int result; /* Permuted axis index */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_frame;
-
-/* Determine the number of Region axes. */
- naxes = astGetNaxes( this );
- if ( astOK ) {
-
-/* If the Region has no axes, report an error (convert to 1-based
- axis numbering for the benefit of the public interface). */
- if ( naxes == 0 ) {
- astError( AST__AXIIN, "%s(%s): Invalid attempt to use an axis index "
- "(%d) for a %s which has no axes.", status, method,
- astGetClass( this ), axis + 1, astGetClass( this ) );
-
-/* Otherwise, check the axis index for validity and report an error if
- it is not valid (again, convert to 1-based axis numbering). */
- } else if ( ( axis < 0 ) || ( axis >= naxes ) ) {
- astError( AST__AXIIN, "%s(%s): Axis index (%d) invalid - it should "
- "be in the range 1 to %d.", status, method, astGetClass( this ),
- axis + 1, naxes );
-
-/* If the axis index was valid, obtain a pointer to the Region's
- current Frame and invoke this Frame's astValidateAxis method to
- obtain the permuted axis index. Annul the Frame pointer
- afterwards. */
- } else {
- fr = astGetFrame( this->frameset, AST__CURRENT );
- result = astValidateAxis( fr, axis, "astValidateAxis" );
- fr = astAnnul( fr );
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static void ValidateAxisSelection( AstFrame *this_frame, int naxes,
- const int *axes, const char *method, int *status ) {
-/*
-* Name:
-* ValidateAxisSelection
-
-* Purpose:
-* Check that a set of axes selected from a Frame is valid.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* void ValidateAxisSelection( AstFrame *this, int naxes,
-* const int *axes, const char *method, int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astValidateAxisSelection
-* method inherited from the Frame class).
-
-* Description:
-* This function checks the validity of an array of (zero-based)
-* axis indices that specify a set of axes to be selected from a
-* Frame. To be valid, no axis should be selected more than
-* once. In assessing this, any axis indices that do not refer to
-* valid Frame axes (e.g. are set to -1) are ignored.
-*
-* If the axis selection is valid, this function returns without further
-* action. Otherwise, an error is reported and the global error status is
-* set.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* naxes
-* The number of axes to be selected (may be zero).
-* axes
-* Pointer to an array of int with naxes elements that contains the
-* (zero based) axis indices to be checked.
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function
-* to validate an axis selection. This method name is used
-* solely for constructing error messages.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to current Frame */
- AstRegion *this; /* Pointer to the Region structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke this
- Frame's astValidateAxisSelection method. Annul the Frame pointer
- afterwards. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
- astValidateAxisSelection( fr, naxes, axes, method );
- fr = astAnnul( fr );
-
-}
-
-static int ValidateSystem( AstFrame *this_frame, AstSystemType system, const char *method, int *status ) {
-/*
-* Name:
-* ValidateSystem
-
-* Purpose:
-* Validate a value for a Frame's System attribute.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* int ValidateSystem( AstFrame *this, AstSystemType system,
-* const char *method, int *status )
-
-* Class Membership:
-* Region member function (over-rides the protected astValidateSystem
-* method inherited from the Frame class).
-
-* Description:
-* This function checks the validity of the supplied system value.
-* If the value is valid, it is returned unchanged. Otherwise, an
-* error is reported and a value of AST__BADSYSTEM is returned.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* system
-* The system value to be checked.
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function
-* to validate an axis index. This method name is used solely
-* for constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The validated system value.
-
-* Notes:
-* - A value of AST_BADSYSTEM will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstSystemType result; /* Validated system value */
- AstFrame *fr; /* Pointer to FrameSet's current Frame */
- AstRegion *this; /* Pointer to the Region structure */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the FrameSet structure. */
- this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke the
- astValidateSystem method for this Frame. Annul the Frame pointer
- afterwards. */
- fr = astGetFrame( this->frameset, AST__CURRENT );
- result = astValidateSystem( this, system, method );
- fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = AST__BADSYSTEM;
-
-/* Return the result. */
- return result;
-}
-
-/* Region Attributes. */
-/* -------------------- */
-
-/*
-*att++
-* Name:
-* Adaptive
-
-* Purpose:
-* Should the area adapt to changes in the coordinate system?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* The coordinate system represented by a Region may be changed by
-* assigning new values to attributes such as System, Unit, etc.
-* For instance, a Region representing an area on the sky in ICRS
-* coordinates may have its System attribute changed so that it
-* represents (say) Galactic coordinates instead of ICRS. This
-* attribute controls what happens when the coordinate system
-* represented by a Region is changed in this way.
-*
-* If Adaptive is non-zero (the default), then area represented by the
-* Region adapts to the new coordinate system. That is, the numerical
-* values which define the area represented by the Region are changed
-* by mapping them from the old coordinate system into the new coordinate
-* system. Thus the Region continues to represent the same physical
-* area.
-*
-* If Adaptive is zero, then area represented by the Region does not adapt
-* to the new coordinate system. That is, the numerical values which
-* define the area represented by the Region are left unchanged. Thus
-* the physical area represented by the Region will usually change.
-*
-* As an example, consider a Region describe a range of wavelength from
-* 2000 Angstrom to 4000 Angstrom. If the Unit attribute for the Region
-* is changed from Angstrom to "nm" (nanometre), what happens depends
-* on the setting of Adaptive. If Adaptive is non-zero, the Mapping
-* from the old to the new coordinate system is found. In this case it
-* is a simple scaling by a factor of 0.1 (since 1 Angstrom is 0.1 nm).
-* This Mapping is then used to modify the numerical values within the
-* Region, changing 2000 to 200 and 4000 to 400. Thus the modified
-* region represents 200 nm to 400 nm, the same physical space as
-* the original 2000 Angstrom to 4000 Angstrom. However, if Adaptive
-* had been zero, then the numerical values would not have been changed,
-* resulting in the final Region representing 2000 nm to 4000 nm.
-*
-* Setting Adaptive to zero can be necessary if you want correct
-* inaccurate attribute settings in an existing Region. For instance,
-* when creating a Region you may not know what Epoch value to use, so
-* you would leave Epoch unset resulting in some default value being used.
-* If at some later point in the application, the correct Epoch value
-* is determined, you could assign the correct value to the Epoch
-* attribute. However, you would first need to set Adaptive temporarily
-* to zero, because otherwise the area represented by the Region would
-* be Mapped from the spurious default Epoch to the new correct Epoch,
-* which is not what is required.
-
-* Applicability:
-* Region
-* All Regions have this attribute.
-*att--
-*/
-
-/* This is a boolean value (0 or 1) with a value of -INT_MAX when
- undefined but yielding a default of 1. */
-astMAKE_CLEAR(Region,Adaptive,adaptive,-INT_MAX)
-astMAKE_GET(Region,Adaptive,int,1,( ( this->adaptive == -INT_MAX ) ?
- 1 : this->adaptive ))
-astMAKE_SET(Region,Adaptive,int,adaptive,( value != 0 ))
-astMAKE_TEST(Region,Adaptive,( this->adaptive != -INT_MAX ))
-
-/*
-*att++
-* Name:
-* Negated
-
-* Purpose:
-* Region negation flag.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute controls whether a Region represents the "inside" or
-* the "outside" of the area which was supplied when the Region was
-* created. If the attribute value is zero (the default), the Region
-* represents the inside of the original area. However, if it is non-zero,
-* it represents the outside of the original area. The value of this
-* attribute may be toggled using the
-c astNegate function.
-f AST_NEGATE routine.
-
-* Note, whether the boundary is considered to be inside the Region or
-* not is controlled by the Closed attribute. Changing the value of
-* the Negated attribute does not change the value of the Closed attribute.
-* Thus, if Region is closed, then the boundary of the Region will be
-* inside the Region, whatever the setting of the Negated attribute.
-
-* Applicability:
-* Region
-* All Regions have this attribute.
-*att--
-*/
-
-/* This is a boolean value (0 or 1) with a value of -INT_MAX when
- undefined but yielding a default of zero. */
-astMAKE_CLEAR(Region,Negated,negated,(astResetCache(this),-INT_MAX))
-astMAKE_GET(Region,Negated,int,0,( ( this->negated == -INT_MAX ) ?
- 0 : this->negated ))
-astMAKE_SET(Region,Negated,int,negated,(astResetCache(this),( value != 0 )))
-astMAKE_TEST(Region,Negated,( this->negated != -INT_MAX ))
-
-/*
-*att++
-* Name:
-* Bounded
-
-* Purpose:
-* Is the Region bounded?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean), read-only.
-
-* Description:
-* This is a read-only attribute indicating if the Region is bounded.
-* A Region is bounded if it is contained entirely within some
-* finite-size bounding box.
-
-* Applicability:
-* Region
-* All Regions have this attribute.
-*att--
-*/
-
-/*
-*att+
-* Name:
-* RegionFS
-
-* Purpose:
-* Should Region FrameSet be dumped?
-
-* Type:
-* Protected attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute indicates whether the FrameSet encapsulated by the
-* Region should be included in the dump produced by the Dump function.
-*
-* If set to a non-zero value (the default), the FrameSet in the Region
-* will always be included in the dump as usual. If set to zero, the
-* FrameSet will only be included in the dump if the Mapping from base
-* to current Frame is not a UnitMap. If the base->current Mapping is
-* a UnitMap, the FrameSet is omitted from the dump. If the dump is
-* subsequently used to re-create the Region, the new Region will have a
-* default FrameSet containing a single default Frame with the appropriate
-* number of axes.
-*
-* This facility is indended to reduce the size of textual dumps of
-* Regions in situations where the Frame to which the Region refers can
-* be implied by the context in which the Region is used. This is
-* often the case when a Region is encapsulated within another Region.
-* In such cases the current Frame of the encapsulated Region will
-* usually be equivalent to the base Frame of the parent Region
-* structure, and so can be re-instated (by calling the astSetRegFS
-* method) even if the FrameSet is omitted from the dump of the
-* encapsulated Region. Note if the base->current Mapping in the FrameSet
-* in the encapsulated Region is not a UnitMap, then we should always
-* dump the FrameSet regardless of the setting of RegionFS. This is because
-* the parent Region structure will not know how to convert the PointSet
-* stored in the encapsulated Region into its own base Frame if the
-* FrameSet is not available.
-
-* Applicability:
-* Region
-* All Regions have this attribute.
-*att-
-*/
-
-/* This is a boolean value (0 or 1) with a value of -INT_MAX when
- undefined but yielding a default of one. */
-astMAKE_CLEAR(Region,RegionFS,regionfs,-INT_MAX)
-astMAKE_TEST(Region,RegionFS,( this->regionfs != -INT_MAX ))
-astMAKE_SET(Region,RegionFS,int,regionfs,( value != 0 ))
-astMAKE_GET(Region,RegionFS,int,1,( ( this->regionfs == -INT_MAX ) ?
- 1 : this->regionfs ))
-
-/*
-*att++
-* Name:
-* FillFactor
-
-* Purpose:
-* Fraction of the Region which is of interest.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute indicates the fraction of the Region which is of
-* interest. AST does not use this attribute internally for any purpose.
-* Typically, it could be used to indicate the fraction of the Region for
-* which data is available.
-*
-* The supplied value must be in the range 0.0 to 1.0, and the default
-* value is 1.0 (except as noted below).
-
-* Applicability:
-* Region
-* All Regions have this attribute.
-* CmpRegion
-* The default FillFactor for a CmpRegion is the FillFactor of its
-* first component Region.
-* Prism
-* The default FillFactor for a Prism is the product of the
-* FillFactors of its two component Regions.
-* Stc
-* The default FillFactor for an Stc is the FillFactor of its
-* encapsulated Region.
-*att--
-*/
-
-astMAKE_CLEAR(Region,FillFactor,fillfactor,AST__BAD)
-astMAKE_GET(Region,FillFactor,double,1.0,( ( this->fillfactor == AST__BAD ) ?
- 1.0 : this->fillfactor ))
-astMAKE_TEST(Region,FillFactor,( this->fillfactor != AST__BAD ))
-astMAKE_SET(Region,FillFactor,double,fillfactor,((value<0.0||value>1.0)?(
- astError(AST__ATSER,"astSetFillFactor(%s): Invalid value (%g) supplied "
- "for attribute FillFactor.", status,astGetClass(this),value),
- astError(AST__ATSER,"FillFactor values should be in the range 0.0 to 1.0", status),
- this->fillfactor):value))
-
-/*
-*att++
-* Name:
-* MeshSize
-
-* Purpose:
-* Number of points used to represent the boundary of a Region.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer.
-
-* Description:
-* This attribute controls how many points are used when creating a
-* mesh of points covering the boundary of a Region. This mesh is used
-* primarily when testing for overlap with a second Region: each point in
-* the mesh is checked to see if it is inside or outside the second Region.
-* Thus, the reliability of the overlap check depends on the value assigned
-* to this attribute. If the value used is very low, it is possible for
-* overlaps to go unnoticed. High values produce more reliable results, but
-* can result in the overlap test being very slow. The default value is 200
-* for two dimensional Regions and 2000 for three or more dimensional
-* Regions (this attribute is not used for 1-dimensional regions since the
-* boundary of a simple 1-d Region can only ever have two points). A
-* value of five is used if the supplied value is less than five.
-
-* Applicability:
-* Region
-* All Regions have this attribute.
-* CmpRegion
-* The default MeshSize for a CmpRegion is the MeshSize of its
-* first component Region.
-* Stc
-* The default MeshSize for an Stc is the MeshSize of its
-* encapsulated Region.
-*att--
-*/
-/* If the value of MeshSize is set or cleared, annul the PointSet used to
- cache a mesh of base Frame boundary points. This will force a new
- PointSet to be created next time it is needed. See function RegMesh. */
-astMAKE_CLEAR(Region,MeshSize,meshsize,(astResetCache(this),-INT_MAX))
-astMAKE_SET(Region,MeshSize,int,meshsize,(astResetCache(this),( value > 5 ? value : 5 )))
-astMAKE_TEST(Region,MeshSize,( this->meshsize != -INT_MAX ))
-astMAKE_GET(Region,MeshSize,int,0,( ( this->meshsize == -INT_MAX)?((astGetNaxes(this)==1)?2:((astGetNaxes(this)==2)?200:2000)): this->meshsize ))
-
-/*
-*att++
-* Name:
-* Closed
-
-* Purpose:
-* Should the boundary be considered to be inside the region?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute controls whether points on the boundary of a Region
-* are considered to be inside or outside the region. If the attribute
-* value is non-zero (the default), points on the boundary are considered
-* to be inside the region (that is, the Region is "closed"). However,
-* if the attribute value is zero, points on the bounary are considered
-* to be outside the region.
-
-* Applicability:
-* Region
-* All Regions have this attribute.
-* PointList
-* The value of the Closed attribute is ignored by PointList regions.
-* If the PointList region has not been negated, then it is always
-* assumed to be closed. If the PointList region has been negated, then
-* it is always assumed to be open. This is required since points
-* have zero volume and therefore consist entirely of boundary.
-* CmpRegion
-* The default Closed value for a CmpRegion is the Closed value of its
-* first component Region.
-* Stc
-* The default Closed value for an Stc is the Closed value of its
-* encapsulated Region.
-*att--
-*/
-/* This is a boolean value (0 or 1) with a value of -INT_MAX when
- undefined but yielding a default of 1. */
-astMAKE_CLEAR(Region,Closed,closed,(astResetCache(this),-INT_MAX))
-astMAKE_GET(Region,Closed,int,1,( ( this->closed == -INT_MAX ) ?
- 1 : this->closed ))
-astMAKE_SET(Region,Closed,int,closed,(astResetCache(this),( value != 0 )))
-astMAKE_TEST(Region,Closed,( this->closed != -INT_MAX ))
-
-/* Access to attributes of the encapsulated Frame. */
-/* ----------------------------------------------- */
-/* Use the macros defined at the start of this file to implement
- private member functions that give access to the attributes of the
- encapsulated Frame of a Region and its axes. These functions over-ride
- the attribute access methods inherited from the Frame class. */
-
-/* Clear, Get, Set and Test axis-independent Frame attributes. */
-MAKE_CLEAR(Digits)
-MAKE_CLEAR(Domain)
-MAKE_CLEAR(MatchEnd)
-MAKE_CLEAR(MaxAxes)
-MAKE_CLEAR(MinAxes)
-MAKE_CLEAR(Permute)
-MAKE_CLEAR(PreserveAxes)
-MAKE_CLEAR(Title)
-
-MAKE_GET(Digits,int)
-MAKE_GET(Domain,const char *)
-MAKE_GET(MatchEnd,int)
-MAKE_GET(MaxAxes,int)
-MAKE_GET(MinAxes,int)
-MAKE_GET(Permute,int)
-MAKE_GET(PreserveAxes,int)
-MAKE_GET(Title,const char *)
-MAKE_SET(Digits,int,I)
-MAKE_SET(Domain,const char *,C)
-MAKE_SET(MatchEnd,int,I)
-MAKE_SET(MaxAxes,int,I)
-MAKE_SET(MinAxes,int,I)
-MAKE_SET(Permute,int,I)
-MAKE_SET(PreserveAxes,int,I)
-MAKE_SET(Title,const char *,C)
-MAKE_TEST(Digits)
-MAKE_TEST(Domain)
-MAKE_TEST(MatchEnd)
-MAKE_TEST(MaxAxes)
-MAKE_TEST(MinAxes)
-MAKE_TEST(Permute)
-MAKE_TEST(PreserveAxes)
-MAKE_TEST(Title)
-
-MAKE_GET(ActiveUnit,int)
-MAKE_SET(ActiveUnit,int,I)
-MAKE_TEST(ActiveUnit)
-
-MAKE_GET(System,AstSystemType)
-MAKE_SET_SYSTEM(System)
-MAKE_TEST(System)
-MAKE_CLEAR(System)
-
-MAKE_GET(AlignSystem,AstSystemType)
-MAKE_SET_SYSTEM(AlignSystem)
-MAKE_TEST(AlignSystem)
-MAKE_CLEAR(AlignSystem)
-
-MAKE_GET(Epoch,double)
-MAKE_SET(Epoch,double,D)
-MAKE_TEST(Epoch)
-MAKE_CLEAR(Epoch)
-
-MAKE_GET(ObsLon,double)
-MAKE_SET(ObsLon,double,D)
-MAKE_TEST(ObsLon)
-MAKE_CLEAR(ObsLon)
-
-MAKE_GET(ObsLat,double)
-MAKE_SET(ObsLat,double,D)
-MAKE_TEST(ObsLat)
-MAKE_CLEAR(ObsLat)
-
-MAKE_GET(ObsAlt,double)
-MAKE_SET(ObsAlt,double,D)
-MAKE_TEST(ObsAlt)
-MAKE_CLEAR(ObsAlt)
-
-/* Clear, Get, Set and Test axis-dependent Frame attributes. */
-MAKE_CLEAR_AXIS(Direction)
-MAKE_CLEAR_AXIS(Format)
-MAKE_CLEAR_AXIS(Label)
-MAKE_CLEAR_AXIS(Symbol)
-MAKE_CLEAR_AXIS(Unit)
-MAKE_GET_AXIS(Direction,int)
-MAKE_GET_AXIS(Format,const char *)
-MAKE_GET_AXIS(Label,const char *)
-MAKE_GET_AXIS(Symbol,const char *)
-MAKE_GET_AXIS(Unit,const char *)
-MAKE_SET_AXIS(Direction,int,I)
-MAKE_SET_AXIS(Format,const char *,C)
-MAKE_SET_AXIS(Label,const char *,C)
-MAKE_SET_AXIS(Symbol,const char *,C)
-MAKE_SET_AXIS(Unit,const char *,C)
-MAKE_TEST_AXIS(Direction)
-MAKE_TEST_AXIS(Format)
-MAKE_TEST_AXIS(Label)
-MAKE_TEST_AXIS(Symbol)
-MAKE_TEST_AXIS(Unit)
-
-MAKE_GET_AXIS(Bottom,double)
-MAKE_SET_AXIS(Bottom,double,D)
-MAKE_TEST_AXIS(Bottom)
-MAKE_CLEAR_AXIS(Bottom)
-
-MAKE_GET_AXIS(Top,double)
-MAKE_SET_AXIS(Top,double,D)
-MAKE_TEST_AXIS(Top)
-MAKE_CLEAR_AXIS(Top)
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for Region objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for Region objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstRegion *in; /* Pointer to input Region */
- AstRegion *out; /* Pointer to output Region */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Regions. */
- in = (AstRegion *) objin;
- out = (AstRegion *) objout;
-
-/* For safety, first clear any references to the input memory from
- the output Region. */
- out->basemesh = NULL;
- out->basegrid = NULL;
- out->frameset = NULL;
- out->points = NULL;
- out->unc = NULL;
- out->defunc = NULL;
-
-/* Now copy each of the above structures. */
- out->frameset = astCopy( in->frameset );
- if( in->points ) out->points = astCopy( in->points );
- if( in->basemesh ) out->basemesh = astCopy( in->basemesh );
- if( in->basegrid ) out->basegrid = astCopy( in->basegrid );
- if( in->unc ) out->unc = astCopy( in->unc );
- if( in->defunc ) out->defunc = astCopy( in->defunc );
-}
-
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for Region objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for Region objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstRegion *this; /* Pointer to Region */
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) obj;
-
-/* Annul all resources. */
- this->frameset = astAnnul( this->frameset );
- if( this->points ) this->points = astAnnul( this->points );
- if( this->basemesh ) this->basemesh = astAnnul( this->basemesh );
- if( this->basegrid ) this->basegrid = astAnnul( this->basegrid );
- if( this->unc ) this->unc = astAnnul( this->unc );
- if( this->defunc ) this->defunc = astAnnul( this->defunc );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for Region objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the Region class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the Region whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-#define COM_LEN 50 /* Maximum length of a comment */
-
-/* Local Variables: */
- AstFrame *fr; /* Pointer to the current Frame */
- AstMapping *smap; /* Base->current Mapping */
- AstRegion *this; /* Pointer to the Region structure */
- AstRegion *unc; /* Pointer to the uncertainty Region */
- double dval; /* Floating point attribute value */
- int ival; /* Integer attribute value */
- int set; /* Attribute value set? */
- int unit; /* Base->current is unitmap? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Region structure. */
- this = (AstRegion *) this_object;
-
-/* Write out values representing the instance variables for the
- Region class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* Negated. */
-/* -------- */
- set = TestNegated( this, status );
- ival = set ? GetNegated( this, status ) : astGetNegated( this );
- astWriteInt( channel, "Negate", (ival != 0), 0, ival,
- ival ? "Region negated" : "Region not negated" );
-
-/* FillFactor */
-/* ---------- */
- set = TestFillFactor( this, status );
- dval = set ? GetFillFactor( this, status ) : astGetFillFactor( this );
- astWriteDouble( channel, "Fill", set, 0, dval,"Region fill factor" );
-
-/* MeshSize. */
-/* --------- */
- set = TestMeshSize( this, status );
- ival = set ? GetMeshSize( this, status ) : astGetMeshSize( this );
- astWriteInt( channel, "MeshSz", set, 0, ival,
- "No. of points used to represent boundary" );
-
-/* Closed. */
-/* ------- */
- set = TestClosed( this, status );
- ival = set ? GetClosed( this, status ) : astGetClosed( this );
- astWriteInt( channel, "Closed", set, 0, ival,
- ival ? "Boundary is inside" : "Boundary is outside" );
-
-/* Adaptive */
-/* -------- */
- set = TestAdaptive( this, status );
- ival = set ? GetAdaptive( this, status ) : astGetAdaptive( this );
- astWriteInt( channel, "Adapt", (ival != 0), 0, ival,
- ival ? "Region adapts to coord sys changes" : "Region does not adapt to coord sys changes" );
-
-/* FrameSet */
-/* -------- */
-
-/* If the vertices are the same in both base and current Frames (i.e.
- if the Frames are connected by a UnitMap), then just dump the current
- Frame (unless the RegionFS attribute is zero, in which case the
- current Frame can be determined from the higher level context of the
- Region and so does not need to be dumped- e.g. if the Region is contained
- within another Region the parent Region will define the current Frame).
- Otherwise, dump the whole FrameSet. */
- ival = astGetRegionFS( this );
- smap = astRegMapping( this );
- if( ( unit = astIsAUnitMap( smap ) ) ){
- set = 0;
- if( ival ) {
- fr = astGetFrame( this->frameset, AST__CURRENT );
- astWriteObject( channel, "Frm", 1, 1, fr, "Coordinate system" );
- fr = astAnnul( fr );
- }
- } else {
- set = ( ival == 0 );
- astWriteObject( channel, "FrmSet", 1, 1, this->frameset,
- "Original & current coordinate systems" );
- }
-
-/* Annul the Mapping pointers */
- smap = astAnnul( smap );
-
-/* RegionFS */
-/* -------- */
- astWriteInt( channel, "RegFS", set, 0, ival,
- ival ? "Include Frame in dump" : "Do not include Frame in dump" );
-
-/* Points */
-/* ------ */
- if( this->points ) {
- astWriteObject( channel, "Points", 1, 1, this->points,
- "Points defining the shape" );
-
-/* If the FrameSet was not included in the dump, then the loaded will use
- the PointSet to determine the number of axes in the frame spanned by
- the Region. If there is no PointSet, then we must explicitly include
- an item giving the number of axes.*/
- } else {
- astWriteInt( channel, "RegAxes", 1, 1, astGetNaxes( this ),
- "Number of axes spanned by the Region" );
- }
-
-/* Uncertainty */
-/* ----------- */
-/* Only dump the uncertinaty Region if required. */
- if( astTestUnc( this ) ) {
- unc = astGetUncFrm( this, AST__BASE );
- astWriteObject( channel, "Unc", 1, 1, unc,
- "Region defining positional uncertainties." );
- unc = astAnnul( unc );
- }
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsARegion and astCheckRegion functions using
- the macros defined for this purpose in the "object.h" header
- file. */
-astMAKE_ISA(Region,Frame)
-astMAKE_CHECK(Region)
-
-AstRegion *astInitRegion_( void *mem, size_t size, int init,
- AstRegionVtab *vtab, const char *name,
- AstFrame *frame, AstPointSet *pset,
- AstRegion *unc, int *status ){
-/*
-*+
-* Name:
-* astInitRegion
-
-* Purpose:
-* Initialise a Region.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* AstRegion *astInitRegion( void *mem, size_t size, int init,
-* AstRegionVtab *vtab, const char *name,
-* AstFrame *frame, AstpointSet *pset,
-* AstRegion *unc )
-
-* Class Membership:
-* Region initialiser.
-
-* Description:
-* This function is provided for use by class implementations to
-* initialise a new Region object. It allocates memory (if
-* necessary) to accommodate the Region plus any additional data
-* associated with the derived class. It then initialises a
-* Region structure at the start of this memory. If the "init"
-* flag is set, it also initialises the contents of a virtual
-* function table for a Region at the start of the memory passed
-* via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the Region is to be
-* created. This must be of sufficient size to accommodate the
-* Region data (sizeof(Region)) plus any data used by the
-* derived class. If a value of NULL is given, this function
-* will allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the Region (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the Region structure, so a valid value must be
-* supplied even if not required for allocating memory.
-* init
-* A logical flag indicating if the Region's virtual function
-* table is to be initialised. If this value is non-zero, the
-* virtual function table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new Region.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-* frame
-* Pointer to the encapsulated Frame. A deep copy of this Frame is
-* taken. This means that subsequent changes to the supplied Frame
-* will have no effect on the new Region.
-* pset
-* A PointSet holding the points which define the Region. These
-* positions should refer to the given Frame. May be NULL.
-* unc
-* A pointer to a Region which specifies the uncertainty in the
-* supplied positions (all points on the boundary of the new Region
-* being initialised are assumed to have the same uncertainty). A NULL
-* pointer can be supplied, in which case default uncertainties equal to
-* 1.0E-6 of the dimensions of the new Region's bounding box are used.
-* If an uncertainty Region is supplied, it must be of a class for
-* which all instances are centro-symetric (e.g. Box, Circle, Ellipse,
-* etc.) or be a Prism containing centro-symetric component Regions.
-* Its encapsulated Frame must be related to the Frame supplied for
-* parameter "frame" (i.e. astConvert should be able to find a Mapping
-* between them). Two positions in the "frame" Frame are considered to be
-* co-incident if their uncertainty Regions overlap. The centre of the
-* supplied uncertainty Region is immaterial since it will be re-centred
-* on the point being tested before use. A deep copy is taken of the
-* supplied Region.
-
-* Returned Value:
-* A pointer to the new Region.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstFrame *f0; /* Frame to use */
- AstRegion *new; /* Pointer to new Region */
- int nax; /* No. of axes in supplied Frame */
- int ncoord; /* Coords per point */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if( init ) astInitRegionVtab( vtab, name );
-
-/* Note the number of axes in the supplied Frame. */
- nax = astGetNaxes( frame );
-
-/* Check the pointset if supplied. */
- if( pset ) {
-
-/* Note the number of axes per point in the supplied PointSet */
- ncoord = astGetNcoord( pset );
-
-/* If OK, check that the number of coordinates per point matches the number
- of axes in the Frame. Report an error if these numbers do not match. */
- if ( astOK && ( ncoord != nax ) ) {
- astError( AST__NCPIN, "astInitRegion(%s): Bad number of coordinate "
- "values per point (%d).", status, name, ncoord );
- astError( AST__NCPIN, "The %s given requires %d coordinate value(s) "
- "for each point.", status, astGetClass( frame ), nax );
- }
- }
-
-/* Initialise a Frame structure (the parent class) as the first
- component within the Region structure, allocating memory if
- necessary. Give this Frame zero axes as the Frame information will be
- specified by the encapsulated FrameSet. */
- new = (AstRegion *) astInitFrame( mem, size, 0, (AstFrameVtab *) vtab,
- name, 0 );
- if ( astOK ) {
-
-/* Initialise the Region data. */
-/* ----------------------------- */
- new->frameset = NULL;
- new->points = NULL;
- new->unc = NULL;
- new->meshsize = -INT_MAX;
- new->adaptive = -INT_MAX;
- new->basemesh = NULL;
- new->basegrid = NULL;
- new->negated = -INT_MAX;
- new->closed = -INT_MAX;
- new->regionfs = -INT_MAX;
- new->fillfactor = AST__BAD;
- new->defunc = NULL;
- new->nomap = 0;
-
-/* If the supplied Frame is a Region, gets its encapsulated Frame. If a
- FrameSet was supplied, use its current Frame, otherwise use the
- supplied Frame. */
- if( astIsARegion( frame ) ) {
- f0 = astGetFrame( ((AstRegion *) frame)->frameset, AST__CURRENT );
-
- } else if( astIsAFrameSet( frame ) ) {
- f0 = astGetFrame( (AstFrameSet *) frame, AST__CURRENT );
-
- } else {
- f0 = astClone( frame );
- }
-
-/* Store a clone of the supplied PointSet pointer. */
- new->points = pset ? astClone( pset ) : NULL;
-
-
-#ifdef DEBUG
- if( pset ) {
- double **ptr;
- double lim;
- int ii,jj, np;
- ptr = astGetPoints( pset );
- np = astGetNpoint( pset );
- lim = sqrt( DBL_MAX );
- for( ii = 0; astOK && ii < ncoord; ii++ ) {
- for( jj = 0; jj < np; jj++ ) {
- if( fabs( ptr[ ii ][ jj ] ) > lim ) {
- if( !strcmp( name, "Interval" ) ) {
- if( ptr[ ii ][ jj ] != AST__BAD &&
- ptr[ ii ][ jj ] != DBL_MAX &&
- ptr[ ii ][ jj ] != -DBL_MAX ) {
- astError( AST__INTER, "astInitRegion(%s): suspicious "
- "axis value (%g) supplied.", status, name, ptr[ ii ][ jj ] );
- break;
- }
- } else {
- astError( AST__INTER, "astInitRegion(%s): suspicious "
- "axis value (%g) supplied.", status, name,
- ptr[ ii ][ jj ] );
- break;
- }
- }
- }
- }
- }
-#endif
-
-/* Form a FrameSet consisting of two copies of the supplied Frame connected
- together by a UnitMap, and store in the Region structure. We use the
- private SetRegFS rather than the protected astSetRegFS because this
- initialiser may be being called from a subclass which over-rides
- astSetRegFS. If this were the case, then the implementation of
- astSetRegFS provided by the subclass may access information within the
- subclass structure which has not yet been initialised. */
- SetRegFS( new, f0, status );
- f0 = astAnnul( f0 );
-
-/* Store any uncertainty Region. Use the private SetUnc rather than
- astSetUnc to avoid subclass implementations using subclass data which
- has not yet been initialised. */
- SetUnc( new, unc, status );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstRegion *astLoadRegion_( void *mem, size_t size,
- AstRegionVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadRegion
-
-* Purpose:
-* Load a Region.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* AstRegion *astLoadRegion( void *mem, size_t size,
-* AstRegionVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* Region loader.
-
-* Description:
-* This function is provided to load a new Region using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* Region structure in this memory, using data read from the
-* input Channel.
-
-* Parameters:
-* mem
-* A pointer to the memory into which the Region is to be
-* loaded. This must be of sufficient size to accommodate the
-* Region data (sizeof(Region)) plus any data used by
-* derived classes. If a value of NULL is given, this function
-* will allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the Region (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the Region structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstRegion) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new Region. If this is NULL, a pointer
-* to the (static) virtual function table for the Region class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "Region" is used instead.
-
-* Returned Value:
-* A pointer to the new Region.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Constants: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstFrame *f1; /* Base Frame for encapsulated FrameSet */
- AstRegion *new; /* Pointer to the new Region */
- int nax; /* No. of axes in Frame */
- int naxpt; /* No. of axes in per point */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this Region. In this case the
- Region belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstRegion );
- vtab = &class_vtab;
- name = "Region";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitRegionVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built Region. */
- new = astLoadFrame( mem, size, (AstFrameVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "Region" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* Negated */
-/* ------- */
- new->negated = astReadInt( channel, "negate", -INT_MAX );
- if ( TestNegated( new, status ) ) SetNegated( new, new->negated, status );
-
-/* FillFactor */
-/* ---------- */
- new->fillfactor = astReadDouble( channel, "fill", AST__BAD );
- if ( TestFillFactor( new, status ) ) SetFillFactor( new, new->fillfactor, status );
-
-/* MeshSize */
-/* -------- */
- new->meshsize = astReadInt( channel, "meshsz", -INT_MAX );
- if ( TestMeshSize( new, status ) ) SetMeshSize( new, new->meshsize, status );
-
-/* Closed */
-/* ------ */
- new->closed = astReadInt( channel, "closed", -INT_MAX );
- if ( TestClosed( new, status ) ) SetClosed( new, new->closed, status );
-
-/* Adaptive */
-/* -------- */
- new->adaptive = astReadInt( channel, "adapt", -INT_MAX );
- if ( TestAdaptive( new, status ) ) SetAdaptive( new, new->adaptive, status );
-
-/* Points */
-/* ------ */
- new->points = astReadObject( channel, "points", NULL );
-
-/* If some points were found, ensure that they are in a PointSet and get
- the number of axis values per point. */
- if( new->points ){
- if( astIsAPointSet( new->points) ) {
- naxpt = astGetNcoord( new->points );
- } else {
- naxpt = 0;
- astError( AST__REGIN, "astLoadRegion(%s): Corrupt %s specifies points "
- "using a %s (should be a PointSet).", status, astGetClass( new ),
- astGetClass( new ), astGetClass( new->points ) );
- }
-
-/* If no PointSet was loaded, attempt to determine the number of axes
- spanned by the Region by reading the RegAxes value. */
- } else {
- naxpt = astReadInt( channel, "regaxes", 0 );
- }
-
-/* Uncertainty */
-/* ----------- */
- new->unc = astReadObject( channel, "unc", NULL );
- new->defunc = NULL;
-
-/* FrameSet */
-/* -------- */
-/* First see if the dump contains a single Frame. If so, create a
- FrameSet from it and a copy of itself, using a UnitMap to connect the
- two. */
- new->nomap = 0;
- new->frameset = NULL;
- f1 = astReadObject( channel, "frm", NULL );
- if( f1 ) {
- new->regionfs = 1;
- nax = astGetNaxes( f1 );
- astSetRegFS( new, f1 );
- f1 = astAnnul( f1 );
-
-/* If no Frame was found in the dump, look for a FrameSet. */
- } else {
- new->frameset = astReadObject( channel, "frmset", NULL );
- if( new->frameset ) {
- nax = astGetNaxes( new->frameset );
-
-/* If a FrameSet was found, the value of the RegionFS attribute is still
- unknown and so we must read it from an attribute as normal. */
- new->regionfs = astReadInt( channel, "regfs", 1 );
- if ( TestRegionFS( new, status ) ) SetRegionFS( new, new->regionfs, status );
-
- } else {
- nax = 0;
- }
- }
-
-/* If neither a Frame nor a FrameSet was found, create a default FrameSet
- and set the RegionFS attribute false, to indicate that the FrameSet
- should not be used. */
- if( !new->frameset ){
- nax = naxpt ? naxpt : 1;
- f1 = astFrame( nax, "", status );
- new->frameset = astFrameSet( f1, "", status );
- astSetIdent( new->frameset, DUMMY_FS );
- f1 = astAnnul( f1 );
- new->regionfs = 0;
- }
-
-/* Report an error if the number of axis values per point in the pointset is
- incorrect. */
- if ( astOK && new->points && ( naxpt != nax ) ) {
- astError( AST__REGIN, "astLoadRegion(%s): Corrupt %s contains "
- " incorrect number of coordinate values per point (%d).", status,
- astGetClass( new ), astGetClass( new ), naxpt );
- astError( AST__REGIN, "The %s requires %d coordinate value(s) "
- "for each point.", status, astGetClass( new ), nax );
- }
-
-/* Initialise other fields which are used as caches for values derived
- from the attributes set above. */
- new->basemesh = NULL;
- new->basegrid = NULL;
-
-/* If an error occurred, clean up by deleting the new Region. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new Region pointer. */
- return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-void astRegClearAttrib_( AstRegion *this, const char *attrib, char **base_attrib, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Region,RegClearAttrib))( this, attrib, base_attrib, status );
-}
-void astRegSetAttrib_( AstRegion *this, const char *setting, char **base_setting, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,Region,RegSetAttrib))( this, setting, base_setting, status );
-}
-void astNegate_( AstRegion *this, int *status ){
- if ( !astOK ) return;
- (**astMEMBER(this,Region,Negate))( this, status );
-}
-AstFrame *astGetRegionFrame_( AstRegion *this, int *status ){
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Region,GetRegionFrame))( this, status );
-}
-AstRegion *astMapRegion_( AstRegion *this, AstMapping *map, AstFrame *frame, int *status ){
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Region,MapRegion))( this, map, frame, status );
-}
-int astOverlap_( AstRegion *this, AstRegion *that, int *status ){
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Region,Overlap))( this, that, status );
-}
-int astOverlapX_( AstRegion *that, AstRegion *this, int *status ){
- if ( !astOK ) return 0;
- return (**astMEMBER(that,Region,OverlapX))( that, this, status );
-}
-AstFrame *astRegFrame_( AstRegion *this, int *status ){
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Region,RegFrame))( this, status );
-}
-AstRegion *astRegBasePick_( AstRegion *this, int naxes, const int *axes, int *status ){
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Region,RegBasePick))( this, naxes, axes, status );
-}
-AstPointSet *astBTransform_( AstRegion *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Region,BTransform))( this, in, forward, out, status );
-}
-AstPointSet *astRegTransform_( AstRegion *this, AstPointSet *in,
- int forward, AstPointSet *out,
- AstFrame **frm, int *status ) {
- if( frm ) *frm = NULL;
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Region,RegTransform))( this, in, forward, out, frm, status );
-}
-int astRegPins_( AstRegion *this, AstPointSet *pset, AstRegion *unc, int **mask, int *status ){
- if( mask ) *mask = NULL;
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Region,RegPins))( this, pset, unc, mask, status );
-}
-AstMapping *astRegMapping_( AstRegion *this, int *status ){
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Region,RegMapping))( this, status );
-}
-int astRegDummyFS_( AstRegion *this, int *status ){
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Region,RegDummyFS))( this, status );
-}
-int astGetBounded_( AstRegion *this, int *status ){
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Region,GetBounded))( this, status );
-}
-int astTestUnc_( AstRegion *this, int *status ){
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Region,TestUnc))( this, status );
-}
-void astClearUnc_( AstRegion *this, int *status ){
- if ( !astOK ) return;
- (**astMEMBER(this,Region,ClearUnc))( this, status );
-}
-void astRegBaseBox_( AstRegion *this, double *lbnd, double *ubnd, int *status ){
- if ( !astOK ) return;
- (**astMEMBER(this,Region,RegBaseBox))( this, lbnd, ubnd, status );
-}
-void astRegBaseBox2_( AstRegion *this, double *lbnd, double *ubnd, int *status ){
- if ( !astOK ) return;
- (**astMEMBER(this,Region,RegBaseBox2))( this, lbnd, ubnd, status );
-}
-void astResetCache_( AstRegion *this, int *status ){
- if ( !astOK ) return;
- (**astMEMBER(this,Region,ResetCache))( this, status );
-}
-int astRegTrace_( AstRegion *this, int n, double *dist, double **ptr, int *status ){
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Region,RegTrace))( this, n, dist, ptr, status );
-}
-void astGetRegionBounds_( AstRegion *this, double *lbnd, double *ubnd, int *status ){
- if ( !astOK ) return;
- (**astMEMBER(this,Region,GetRegionBounds))( this, lbnd, ubnd, status );
-}
-void astGetRegionPoints_( AstRegion *this, int maxpoint, int maxcoord,
- int *npoint, double *points, int *status ){
- if ( !astOK ) return;
- (**astMEMBER(this,Region,GetRegionPoints))( this, maxpoint, maxcoord,
- npoint, points, status );
-}
-void astShowMesh_( AstRegion *this, int format, const char *ttl, int *status ){
- if ( !astOK ) return;
- (**astMEMBER(this,Region,ShowMesh))( this, format,ttl, status );
-}
-void astGetRegionBounds2_( AstRegion *this, double *lbnd, double *ubnd, int *status ){
- if ( !astOK ) return;
- (**astMEMBER(this,Region,GetRegionBounds2))( this, lbnd, ubnd, status );
-}
-void astRegOverlay_( AstRegion *this, AstRegion *that, int unc, int *status ){
- if ( !astOK ) return;
- (**astMEMBER(this,Region,RegOverlay))( this, that, unc, status );
-}
-AstPointSet *astRegGrid_( AstRegion *this, int *status ){
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Region,RegGrid))( this, status );
-}
-AstPointSet *astRegMesh_( AstRegion *this, int *status ){
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Region,RegMesh))( this, status );
-}
-double *astRegCentre_( AstRegion *this, double *cen, double **ptr, int index,
- int ifrm, int *status ){
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Region,RegCentre))( this, cen, ptr, index, ifrm, status );
-}
-AstRegion *astGetUncFrm_( AstRegion *this, int ifrm, int *status ){
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Region,GetUncFrm))( this, ifrm, status );
-}
-AstRegion *astGetDefUnc_( AstRegion *this, int *status ){
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Region,GetDefUnc))( this, status );
-}
-AstRegion *astGetUnc_( AstRegion *this, int def, int *status ){
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Region,GetUnc))( this, def, status );
-}
-void astSetUnc_( AstRegion *this, AstRegion *unc, int *status ){
- if ( !astOK ) return;
- (**astMEMBER(this,Region,SetUnc))( this, unc, status );
-}
-AstFrameSet *astGetRegFS_( AstRegion *this, int *status ){
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Region,GetRegFS))( this, status );
-}
-void astSetRegFS_( AstRegion *this, AstFrame *frm, int *status ){
- if ( !astOK ) return;
- (**astMEMBER(this,Region,SetRegFS))( this, frm, status );
-}
-AstPointSet *astRegBaseMesh_( AstRegion *this, int *status ){
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Region,RegBaseMesh))( this, status );
-}
-AstPointSet *astRegBaseGrid_( AstRegion *this, int *status ){
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Region,RegBaseGrid))( this, status );
-}
-AstPointSet *astBndBaseMesh_( AstRegion *this, double *lbnd, double *ubnd, int *status ){
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Region,BndBaseMesh))( this, lbnd, ubnd, status );
-}
-AstPointSet *astBndMesh_( AstRegion *this, double *lbnd, double *ubnd, int *status ){
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Region,BndMesh))( this, lbnd, ubnd, status );
-}
-
-#define MAKE_MASK_(X,Xtype) \
-int astMask##X##_( AstRegion *this, AstMapping *map, int inside, int ndim, \
- const int lbnd[], const int ubnd[], Xtype in[], \
- Xtype val, int *status ) { \
- if ( !astOK ) return 0; \
- return (**astMEMBER(this,Region,Mask##X))( this, map, inside, ndim, lbnd, \
- ubnd, in, val, status ); \
-}
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-MAKE_MASK_(LD,long double)
-#endif
-MAKE_MASK_(D,double)
-MAKE_MASK_(F,float)
-MAKE_MASK_(L,long int)
-MAKE_MASK_(UL,unsigned long int)
-MAKE_MASK_(I,int)
-MAKE_MASK_(UI,unsigned int)
-MAKE_MASK_(S,short int)
-MAKE_MASK_(US,unsigned short int)
-MAKE_MASK_(B,signed char)
-MAKE_MASK_(UB,unsigned char)
-#undef MAKE_MASK_
-
-/* Special public interface functions. */
-/* =================================== */
-/* These provide the public interface to certain special functions
- whose public interface cannot be handled using macros (such as
- astINVOKE) alone. In general, they are named after the
- corresponding protected version of the function, but with "Id"
- appended to the name. */
-
-/* Public Interface Function Prototypes. */
-/* ------------------------------------- */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-
-/* Special interface function implementations. */
-/* ------------------------------------------- */
-
-
-AstRegion *astMapRegionId_( AstRegion *this, AstMapping *map, AstFrame *frame, int *status ) {
-/*
-*++
-* Name:
-c astMapRegion
-f AST_MAPREGION
-
-* Purpose:
-* Transform a Region into a new Frame using a given Mapping.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "region.h"
-c AstRegion *astMapRegion( AstRegion *this, AstMapping *map,
-c AstFrame *frame )
-f RESULT = AST_MAPREGION( THIS, MAP, FRAME, STATUS )
-
-* Class Membership:
-* Region method.
-
-* Description:
-* This function returns a pointer to a new Region which corresponds to
-* supplied Region described by some other specified coordinate system. A
-* Mapping is supplied which transforms positions between the old and new
-* coordinate systems. The new Region may not be of the same class as
-* the original region.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Region.
-c map
-f MAP = INTEGER (Given)
-* Pointer to a Mapping which transforms positions from the
-* coordinate system represented by the supplied Region to the
-* coordinate system specified by
-c "frame".
-f FRAME.
-* The supplied Mapping should define both forward and inverse
-* transformations, and these transformations should form a genuine
-* inverse pair. That is, transforming a position using the forward
-* transformation and then using the inverse transformation should
-* produce the original input position. Some Mapping classes (such
-* as PermMap, MathMap, SphMap) can result in Mappings for which this
-* is not true.
-c frame
-f FRAME = INTEGER (Given)
-* Pointer to a Frame describing the coordinate system in which
-* the new Region is required.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astMapRegion()
-f AST_MAPREGION = INTEGER
-* A pointer to a new Region. This Region will represent the area
-* within the coordinate system specified by
-c "frame"
-f FRAME
-* which corresponds to the supplied Region.
-
-* Notes:
-* - The uncertainty associated with the supplied Region is modified
-* using the supplied Mapping.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-
-* Implementation Notes:
-* - The only difference between this public interface and the protected
-* astMapRegion interface is that this implementation additionally
-* simplifies the returned Region. The protected implementation does
-* not do this since doing so can lead to infinite recursion because
-* it is sometimes necessary for Simplify to call astMapRegion.
-
-*/
-
-/* Local Variables: */
- AstRegion *new; /* Pointer to new Region */
- AstRegion *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Invoke the protected astMapRegion function. */
- new = astMapRegion( this, map, frame );
-
-/* Simplify the resulting Region. */
- result = astSimplify( new );
-
-/* Free resources. */
- new = astAnnul( new );
-
-/* If not OK, annul the returned pointer. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/region.h b/ast-5.3-1/region.h
deleted file mode 100644
index c5cdb62..0000000
--- a/ast-5.3-1/region.h
+++ /dev/null
@@ -1,500 +0,0 @@
-#if !defined( REGION_INCLUDED ) /* Include this file only once */
-#define REGION_INCLUDED
-/*
-*+
-* Name:
-* region.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the Region class.
-
-* Invocation:
-* #include "region.h"
-
-* Description:
-* This include file defines the interface to the Region class and
-* provides the type definitions, function prototypes and macros, etc.
-* needed to use this class.
-
-* Inheritance:
-* The Region class inherits from the Frame class.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 5-DEC-2003 (DSB):
-* Original version.
-* 2-MAR-2006 (DSB):
-* Changed AST_LONG_DOUBLE to HAVE_LONG_DOUBLE.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "frame.h" /* Parent Frame class */
-
-/* Macros. */
-/* ======= */
-
-/* Type Definitions. */
-/* ================= */
-/* Region structure. */
-/* ------------------- */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-typedef struct AstRegion {
-
-/* Attributes inherited from the parent class. */
- AstFrame parent; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- AstFrameSet *frameset; /* FrameSet holding original and current Frames */
- AstPointSet *points; /* Points defining region location and extent */
- struct AstRegion *unc; /* Region specifying position uncertainties */
- double fillfactor; /* Fill factor (0.0->1.0) */
- int regionfs; /* Include FrameSet in dump? */
- int negated; /* Has the Region been negated? */
- int closed; /* Is the boundary part of the Region? */
- int meshsize; /* No. of points on boundary mesh */
- struct AstRegion *defunc; /* Default uncertainty Region */
- AstPointSet *basemesh; /* Base frame mesh covering the boundary */
- AstPointSet *basegrid; /* Base frame grid covering the boundary */
- int adaptive; /* Does the Region adapt to coord sys changes? */
- int nomap; /* Ignore the Region's FrameSet? */
-} AstRegion;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all objects in the
- class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstRegionVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstFrameVtab frame_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- int (* Overlap)( AstRegion *, AstRegion *, int * );
- int (* OverlapX)( AstRegion *, AstRegion *, int * );
- AstRegion *(* MapRegion)( AstRegion *, AstMapping *, AstFrame *, int * );
- AstFrame *(* GetRegionFrame)( AstRegion *, int * );
- AstFrame *(* RegFrame)( AstRegion *, int * );
- AstFrameSet *(* GetRegFS)( AstRegion *, int * );
- AstPointSet *(* RegTransform)( AstRegion *, AstPointSet *, int, AstPointSet *, AstFrame **, int * );
- AstPointSet *(* BTransform)( AstRegion *, AstPointSet *, int, AstPointSet *, int * );
- void (* Negate)( AstRegion *, int * );
- void (* RegBaseBox)( AstRegion *, double *, double *, int * );
- void (* RegBaseBox2)( AstRegion *, double *, double *, int * );
- void (* RegSetAttrib)( AstRegion *, const char *, char **, int * );
- void (* RegClearAttrib)( AstRegion *, const char *, char **, int * );
- void (* GetRegionBounds)( AstRegion *, double *, double *, int * );
- void (* ShowMesh)( AstRegion *, int, const char *, int * );
- void (* GetRegionBounds2)( AstRegion *, double *, double *, int * );
- void (* ClearUnc)( AstRegion *, int * );
- void (* RegOverlay)( AstRegion *, AstRegion *, int, int * );
- void (* GetRegionPoints)( AstRegion *, int, int, int *, double *, int * );
- int (* GetBounded)( AstRegion *, int * );
- int (* TestUnc)( AstRegion *, int * );
- int (* RegDummyFS)( AstRegion *, int * );
- int (* RegPins)( AstRegion *, AstPointSet *, AstRegion *, int **, int * );
- AstMapping *(* RegMapping)( AstRegion *, int * );
- AstPointSet *(* RegMesh)( AstRegion *, int * );
- AstPointSet *(* RegGrid)( AstRegion *, int * );
- AstPointSet *(* RegBaseMesh)( AstRegion *, int * );
- AstPointSet *(* RegBaseGrid)( AstRegion *, int * );
- AstPointSet *(* BndBaseMesh)( AstRegion *, double *, double *, int * );
- AstPointSet *(* BndMesh)( AstRegion *, double *, double *, int * );
- AstRegion *(* GetUncFrm)( AstRegion *, int, int * );
- AstRegion *(* GetUnc)( AstRegion *, int, int * );
- AstRegion *(* GetDefUnc)( AstRegion *, int * );
- AstRegion *(* RegBasePick)( AstRegion *this, int, const int *, int * );
- void (* ResetCache)( AstRegion *, int * );
- int (* RegTrace)( AstRegion *, int, double *, double **, int * );
- void (* SetUnc)( AstRegion *, AstRegion *, int * );
- void (* SetRegFS)( AstRegion *, AstFrame *, int * );
- double *(* RegCentre)( AstRegion *, double *, double **, int, int, int * );
-
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
- int (* MaskLD)( AstRegion *, AstMapping *, int, int, const int[], const int ubnd[], long double [], long double, int * );
-#endif
- int (* MaskB)( AstRegion *, AstMapping *, int, int, const int[], const int[], signed char[], signed char, int * );
- int (* MaskD)( AstRegion *, AstMapping *, int, int, const int[], const int[], double[], double, int * );
- int (* MaskF)( AstRegion *, AstMapping *, int, int, const int[], const int[], float[], float, int * );
- int (* MaskI)( AstRegion *, AstMapping *, int, int, const int[], const int[], int[], int, int * );
- int (* MaskL)( AstRegion *, AstMapping *, int, int, const int[], const int[], long int[], long int, int * );
- int (* MaskS)( AstRegion *, AstMapping *, int, int, const int[], const int[], short int[], short int, int * );
- int (* MaskUB)( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned char[], unsigned char, int * );
- int (* MaskUI)( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned int[], unsigned int, int * );
- int (* MaskUL)( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned long int[], unsigned long int, int * );
- int (* MaskUS)( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned short int[], unsigned short int, int * );
-
- int (* GetNegated)( AstRegion *, int * );
- int (* TestNegated)( AstRegion *, int * );
- void (* ClearNegated)( AstRegion *, int * );
- void (* SetNegated)( AstRegion *, int, int * );
-
- int (* GetRegionFS)( AstRegion *, int * );
- int (* TestRegionFS)( AstRegion *, int * );
- void (* ClearRegionFS)( AstRegion *, int * );
- void (* SetRegionFS)( AstRegion *, int, int * );
-
- int (* GetClosed)( AstRegion *, int * );
- int (* TestClosed)( AstRegion *, int * );
- void (* ClearClosed)( AstRegion *, int * );
- void (* SetClosed)( AstRegion *, int, int * );
-
- int (* GetMeshSize)( AstRegion *, int * );
- int (* TestMeshSize)( AstRegion *, int * );
- void (* ClearMeshSize)( AstRegion *, int * );
- void (* SetMeshSize)( AstRegion *, int, int * );
-
- double (* GetFillFactor)( AstRegion *, int * );
- int (* TestFillFactor)( AstRegion *, int * );
- void (* ClearFillFactor)( AstRegion *, int * );
- void (* SetFillFactor)( AstRegion *, double, int * );
-
- int (* GetAdaptive)( AstRegion *, int * );
- int (* TestAdaptive)( AstRegion *, int * );
- void (* ClearAdaptive)( AstRegion *, int * );
- void (* SetAdaptive)( AstRegion *, int, int * );
-
-} AstRegionVtab;
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstRegionGlobals {
- AstRegionVtab Class_Vtab;
- int Class_Init;
- char GetAttrib_Buff[ 101 ];
-} AstRegionGlobals;
-
-#endif
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Region) /* Check class membership */
-astPROTO_ISA(Region) /* Test class membership */
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstRegion *astInitRegion_( void *, size_t, int, AstRegionVtab *, const char *,
- AstFrame *, AstPointSet *, AstRegion *, int * );
-
-/* Vtab initialiser. */
-void astInitRegionVtab_( AstRegionVtab *, const char *, int * );
-
-/* Loader. */
-AstRegion *astLoadRegion_( void *, size_t, AstRegionVtab *,
- const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitRegionGlobals_( AstRegionGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-
-AstFrame *astGetRegionFrame_( AstRegion *, int * );
-int astOverlap_( AstRegion *, AstRegion *, int * );
-void astNegate_( AstRegion *, int * );
-
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-int astMaskLD_( AstRegion *, AstMapping *, int, int, const int[], const int[], long double [], long double, int * );
-#endif
-int astMaskB_( AstRegion *, AstMapping *, int, int, const int[], const int[], signed char[], signed char, int * );
-int astMaskD_( AstRegion *, AstMapping *, int, int, const int[], const int[], double[], double, int * );
-int astMaskF_( AstRegion *, AstMapping *, int, int, const int[], const int[], float[], float, int * );
-int astMaskI_( AstRegion *, AstMapping *, int, int, const int[], const int[], int[], int, int * );
-int astMaskL_( AstRegion *, AstMapping *, int, int, const int[], const int[], long int[], long int, int * );
-int astMaskS_( AstRegion *, AstMapping *, int, int, const int[], const int[], short int[], short int, int * );
-int astMaskUB_( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned char[], unsigned char, int * );
-int astMaskUI_( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned int[], unsigned int, int * );
-int astMaskUL_( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned long int[], unsigned long int, int * );
-int astMaskUS_( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned short int[], unsigned short int, int * );
-void astSetUnc_( AstRegion *, AstRegion *, int * );
-AstRegion *astGetUnc_( AstRegion *, int, int * );
-void astGetRegionBounds_( AstRegion *, double *, double *, int * );
-void astShowMesh_( AstRegion *, int, const char *, int * );
-void astGetRegionPoints_( AstRegion *, int, int, int *, double *, int * );
-
-#if defined(astCLASS) /* Protected */
-void astGetRegionBounds2_( AstRegion *, double *, double *, int * );
-AstRegion *astMapRegion_( AstRegion *, AstMapping *, AstFrame *, int * );
-AstFrame *astRegFrame_( AstRegion *, int * );
-AstPointSet *astRegTransform_( AstRegion *, AstPointSet *, int, AstPointSet *, AstFrame **, int * );
-AstPointSet *astBTransform_( AstRegion *, AstPointSet *, int, AstPointSet *, int * );
-void astRegBaseBox_( AstRegion *, double *, double *, int * );
-void astRegBaseBox2_( AstRegion *, double *, double *, int * );
-void astRegSetAttrib_( AstRegion *, const char *, char **, int * );
-void astRegClearAttrib_( AstRegion *, const char *, char **, int * );
-void astClearUnc_( AstRegion *, int * );
-void astRegOverlay_( AstRegion *, AstRegion *, int, int * );
-int astGetBounded_( AstRegion *, int * );
-int astTestUnc_( AstRegion *, int * );
-int astRegDummyFS_( AstRegion *, int * );
-int astRegPins_( AstRegion *, AstPointSet *, AstRegion *, int **, int * );
-AstMapping *astRegMapping_( AstRegion *, int * );
-AstPointSet *astRegMesh_( AstRegion *, int * );
-AstPointSet *astRegGrid_( AstRegion *, int * );
-AstPointSet *astRegBaseMesh_( AstRegion *, int * );
-AstPointSet *astRegBaseGrid_( AstRegion *, int * );
-AstPointSet *astBndBaseMesh_( AstRegion *, double *, double *, int * );
-AstPointSet *astBndMesh_( AstRegion *, double *, double *, int * );
-AstRegion *astGetUncFrm_( AstRegion *, int, int * );
-AstRegion *astGetDefUnc_( AstRegion *, int * );
-AstRegion *astRegBasePick_( AstRegion *this, int, const int *, int * );
-int astOverlapX_( AstRegion *, AstRegion *, int * );
-AstFrameSet *astGetRegFS_( AstRegion *, int * );
-void astSetRegFS_( AstRegion *, AstFrame *, int * );
-double *astRegCentre_( AstRegion *, double *, double **, int, int, int * );
-double *astRegTranPoint_( AstRegion *, double *, int, int, int * );
-void astResetCache_( AstRegion *, int * );
-int astRegTrace_( AstRegion *, int, double *, double **, int * );
-
-int astGetNegated_( AstRegion *, int * );
-int astTestNegated_( AstRegion *, int * );
-void astClearNegated_( AstRegion *, int * );
-void astSetNegated_( AstRegion *, int, int * );
-
-int astGetRegionFS_( AstRegion *, int * );
-int astTestRegionFS_( AstRegion *, int * );
-void astClearRegionFS_( AstRegion *, int * );
-void astSetRegionFS_( AstRegion *, int, int * );
-
-int astGetMeshSize_( AstRegion *, int * );
-int astTestMeshSize_( AstRegion *, int * );
-void astClearMeshSize_( AstRegion *, int * );
-void astSetMeshSize_( AstRegion *, int, int * );
-
-int astGetClosed_( AstRegion *, int * );
-int astTestClosed_( AstRegion *, int * );
-void astClearClosed_( AstRegion *, int * );
-void astSetClosed_( AstRegion *, int, int * );
-
-double astGetFillFactor_( AstRegion *, int * );
-int astTestFillFactor_( AstRegion *, int * );
-void astClearFillFactor_( AstRegion *, int * );
-void astSetFillFactor_( AstRegion *, double, int * );
-
-int astGetAdaptive_( AstRegion *, int * );
-int astTestAdaptive_( AstRegion *, int * );
-void astClearAdaptive_( AstRegion *, int * );
-void astSetAdaptive_( AstRegion *, int, int * );
-
-#else /* Public only */
-AstRegion *astMapRegionId_( AstRegion *, AstMapping *, AstFrame *, int * );
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class to make
- them easier to invoke (e.g. to avoid type mis-matches when passing pointers
- to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them to
- validate their own arguments. We must use a cast when passing object
- pointers (so that they can accept objects from derived classes). */
-
-/* Check class membership. */
-#define astCheckRegion(this) astINVOKE_CHECK(Region,this,0)
-#define astVerifyRegion(this) astINVOKE_CHECK(Region,this,1)
-
-/* Test class membership. */
-#define astIsARegion(this) astINVOKE_ISA(Region,this)
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitRegion(mem,size,init,vtab,name,frame,pset,acc)\
-astINVOKE(O,astInitRegion_(mem,size,init,vtab,name,astCheckFrame(frame),pset,acc,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitRegionVtab(vtab,name) astINVOKE(V,astInitRegionVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadRegion(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadRegion_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckRegion to validate Region pointers before
- use. This provides a contextual error report if a pointer to the wrong sort
- of object is supplied. */
-#define astGetRegionFrame(this) \
-astINVOKE(O,astGetRegionFrame_(astCheckRegion(this),STATUS_PTR))
-#define astNegate(this) \
-astINVOKE(V,astNegate_(astCheckRegion(this),STATUS_PTR))
-#define astOverlap(this,that) \
-astINVOKE(V,astOverlap_(astCheckRegion(this),astCheckRegion(that),STATUS_PTR))
-
-#if HAVE_LONG_DOUBLE /* Not normally implemented */
-#define astMaskLD(this,map,inside,ndim,lbnd,ubnd,in,val) \
-astINVOKE(V,astMaskLD_(astCheckRegion(this),(map?astCheckMapping(map):NULL),inside,ndim,lbnd,ubnd,in,val,STATUS_PTR))
-#endif
-
-#define astMaskB(this,map,inside,ndim,lbnd,ubnd,in,val) \
-astINVOKE(V,astMaskB_(astCheckRegion(this),(map?astCheckMapping(map):NULL),inside,ndim,lbnd,ubnd,in,val,STATUS_PTR))
-#define astMaskD(this,map,inside,ndim,lbnd,ubnd,in,val) \
-astINVOKE(V,astMaskD_(astCheckRegion(this),(map?astCheckMapping(map):NULL),inside,ndim,lbnd,ubnd,in,val,STATUS_PTR))
-#define astMaskF(this,map,inside,ndim,lbnd,ubnd,in,val) \
-astINVOKE(V,astMaskF_(astCheckRegion(this),(map?astCheckMapping(map):NULL),inside,ndim,lbnd,ubnd,in,val,STATUS_PTR))
-#define astMaskI(this,map,inside,ndim,lbnd,ubnd,in,val) \
-astINVOKE(V,astMaskI_(astCheckRegion(this),(map?astCheckMapping(map):NULL),inside,ndim,lbnd,ubnd,in,val,STATUS_PTR))
-#define astMaskL(this,map,inside,ndim,lbnd,ubnd,in,val) \
-astINVOKE(V,astMaskL_(astCheckRegion(this),(map?astCheckMapping(map):NULL),inside,ndim,lbnd,ubnd,in,val,STATUS_PTR))
-#define astMaskS(this,map,inside,ndim,lbnd,ubnd,in,val) \
-astINVOKE(V,astMaskS_(astCheckRegion(this),(map?astCheckMapping(map):NULL),inside,ndim,lbnd,ubnd,in,val,STATUS_PTR))
-#define astMaskUB(this,map,inside,ndim,lbnd,ubnd,in,val) \
-astINVOKE(V,astMaskUB_(astCheckRegion(this),(map?astCheckMapping(map):NULL),inside,ndim,lbnd,ubnd,in,val,STATUS_PTR))
-#define astMaskUI(this,map,inside,ndim,lbnd,ubnd,in,val) \
-astINVOKE(V,astMaskUI_(astCheckRegion(this),(map?astCheckMapping(map):NULL),inside,ndim,lbnd,ubnd,in,val,STATUS_PTR))
-#define astMaskUL(this,map,inside,ndim,lbnd,ubnd,in,val) \
-astINVOKE(V,astMaskUL_(astCheckRegion(this),(map?astCheckMapping(map):NULL),inside,ndim,lbnd,ubnd,in,val,STATUS_PTR))
-#define astMaskUS(this,map,inside,ndim,lbnd,ubnd,in,val) \
-astINVOKE(V,astMaskUS_(astCheckRegion(this),(map?astCheckMapping(map):NULL),inside,ndim,lbnd,ubnd,in,val,STATUS_PTR))
-#define astSetUnc(this,unc) astINVOKE(V,astSetUnc_(astCheckRegion(this),unc?astCheckRegion(unc):NULL,STATUS_PTR))
-#define astGetUnc(this,def) astINVOKE(O,astGetUnc_(astCheckRegion(this),def,STATUS_PTR))
-#define astGetRegionBounds(this,lbnd,ubnd) astINVOKE(V,astGetRegionBounds_(astCheckRegion(this),lbnd,ubnd,STATUS_PTR))
-#define astShowMesh(this,format,ttl) astINVOKE(V,astShowMesh_(astCheckRegion(this),format,ttl,STATUS_PTR))
-#define astGetRegionPoints(this,maxpoint,maxcoord,npoint,points) \
-astINVOKE(V,astGetRegionPoints_(astCheckRegion(this),maxpoint,maxcoord,npoint,points,STATUS_PTR))
-
-/* Interfaces to protected member functions. */
-/* ----------------------------------------- */
-#if defined(astCLASS) /* Protected */
-
-#define astGetRegionBounds2(this,lbnd,ubnd) astINVOKE(V,astGetRegionBounds2_(astCheckRegion(this),lbnd,ubnd,STATUS_PTR))
-#define astClearUnc(this) astINVOKE(V,astClearUnc_(astCheckRegion(this),STATUS_PTR))
-#define astGetBounded(this) astINVOKE(V,astGetBounded_(astCheckRegion(this),STATUS_PTR))
-#define astGetUncFrm(this,ifrm) astINVOKE(O,astGetUncFrm_(astCheckRegion(this),ifrm,STATUS_PTR))
-#define astGetDefUnc(this) astINVOKE(O,astGetDefUnc_(astCheckRegion(this),STATUS_PTR))
-#define astMapRegion(this,map,frame) astINVOKE(O,astMapRegion_(astCheckRegion(this),astCheckMapping(map),astCheckFrame(frame),STATUS_PTR))
-#define astOverlapX(that,this) astINVOKE(V,astOverlapX_(astCheckRegion(that),astCheckRegion(this),STATUS_PTR))
-#define astRegBaseBox(this,lbnd,ubnd) astINVOKE(V,astRegBaseBox_(astCheckRegion(this),lbnd,ubnd,STATUS_PTR))
-#define astRegBaseBox2(this,lbnd,ubnd) astINVOKE(V,astRegBaseBox2_(astCheckRegion(this),lbnd,ubnd,STATUS_PTR))
-#define astRegSetAttrib(this,setting,bset) astINVOKE(V,astRegSetAttrib_(astCheckRegion(this),setting,bset,STATUS_PTR))
-#define astRegClearAttrib(this,setting,batt) astINVOKE(V,astRegClearAttrib_(astCheckRegion(this),setting,batt,STATUS_PTR))
-#define astRegBaseMesh(this) astINVOKE(O,astRegBaseMesh_(astCheckRegion(this),STATUS_PTR))
-#define astRegBasePick(this,naxes,axes) astINVOKE(O,astRegBasePick_(astCheckRegion(this),naxes,axes,STATUS_PTR))
-#define astRegBaseGrid(this) astINVOKE(O,astRegBaseGrid_(astCheckRegion(this),STATUS_PTR))
-#define astBndBaseMesh(this,lbnd,ubnd) astINVOKE(O,astBndBaseMesh_(astCheckRegion(this),lbnd,ubnd,STATUS_PTR))
-#define astBndMesh(this,lbnd,ubnd) astINVOKE(O,astBndMesh_(astCheckRegion(this),lbnd,ubnd,STATUS_PTR))
-#define astRegCentre(this,cen,ptr,index,ifrm) astINVOKE(V,astRegCentre_(astCheckRegion(this),cen,ptr,index,ifrm,STATUS_PTR))
-#define astRegFrame(this) astINVOKE(O,astRegFrame_(astCheckRegion(this),STATUS_PTR))
-#define astRegGrid(this) astINVOKE(O,astRegGrid_(astCheckRegion(this),STATUS_PTR))
-#define astRegMesh(this) astINVOKE(O,astRegMesh_(astCheckRegion(this),STATUS_PTR))
-#define astRegOverlay(this,that,unc) astINVOKE(V,astRegOverlay_(astCheckRegion(this),astCheckRegion(that),unc,STATUS_PTR))
-#define astRegDummyFS(this) astINVOKE(V,astRegDummyFS_(astCheckRegion(this),STATUS_PTR))
-#define astRegMapping(this) astINVOKE(O,astRegMapping_(astCheckRegion(this),STATUS_PTR))
-#define astRegPins(this,pset,unc,mask) astINVOKE(V,astRegPins_(astCheckRegion(this),astCheckPointSet(pset),unc?astCheckRegion(unc):unc,mask,STATUS_PTR))
-#define astRegTranPoint(this,in,np,forward) astRegTranPoint_(this,in,np,forward,STATUS_PTR)
-#define astGetRegFS(this) astINVOKE(O,astGetRegFS_(astCheckRegion(this),STATUS_PTR))
-#define astSetRegFS(this,frm) astINVOKE(V,astSetRegFS_(astCheckRegion(this),astCheckFrame(frm),STATUS_PTR))
-#define astTestUnc(this) astINVOKE(V,astTestUnc_(astCheckRegion(this),STATUS_PTR))
-#define astResetCache(this) astINVOKE(V,astResetCache_(astCheckRegion(this),STATUS_PTR))
-#define astRegTrace(this,n,dist,ptr) astINVOKE(V,astRegTrace_(astCheckRegion(this),n,dist,ptr,STATUS_PTR))
-
-/* Since a NULL PointSet pointer is acceptable for "out", we must omit the
- argument checking in that case. (But unfortunately, "out" then gets
- evaluated twice - this is unlikely to matter, but is there a better way?) */
-
-#define astRegTransform(this,in,forward,out,frm) \
-astINVOKE(O,astRegTransform_(astCheckRegion(this),in?astCheckPointSet(in):NULL,forward,(out)?astCheckPointSet(out):NULL,frm,STATUS_PTR))
-
-#define astBTransform(this,in,forward,out) \
-astINVOKE(O,astBTransform_(astCheckRegion(this),in?astCheckPointSet(in):NULL,forward,(out)?astCheckPointSet(out):NULL,STATUS_PTR))
-
-#define astClearNegated(this) astINVOKE(V,astClearNegated_(astCheckRegion(this),STATUS_PTR))
-#define astGetNegated(this) astINVOKE(V,astGetNegated_(astCheckRegion(this),STATUS_PTR))
-#define astSetNegated(this,negated) astINVOKE(V,astSetNegated_(astCheckRegion(this),negated,STATUS_PTR))
-#define astTestNegated(this) astINVOKE(V,astTestNegated_(astCheckRegion(this),STATUS_PTR))
-
-#define astClearAdaptive(this) astINVOKE(V,astClearAdaptive_(astCheckRegion(this),STATUS_PTR))
-#define astGetAdaptive(this) astINVOKE(V,astGetAdaptive_(astCheckRegion(this),STATUS_PTR))
-#define astSetAdaptive(this,adaptive) astINVOKE(V,astSetAdaptive_(astCheckRegion(this),adaptive,STATUS_PTR))
-#define astTestAdaptive(this) astINVOKE(V,astTestAdaptive_(astCheckRegion(this),STATUS_PTR))
-
-#define astClearRegionFS(this) astINVOKE(V,astClearRegionFS_(astCheckRegion(this),STATUS_PTR))
-#define astGetRegionFS(this) astINVOKE(V,astGetRegionFS_(astCheckRegion(this),STATUS_PTR))
-#define astSetRegionFS(this,fs) astINVOKE(V,astSetRegionFS_(astCheckRegion(this),fs,STATUS_PTR))
-#define astTestRegionFS(this) astINVOKE(V,astTestRegionFS_(astCheckRegion(this),STATUS_PTR))
-
-#define astClearMeshSize(this) astINVOKE(V,astClearMeshSize_(astCheckRegion(this),STATUS_PTR))
-#define astGetMeshSize(this) astINVOKE(V,astGetMeshSize_(astCheckRegion(this),STATUS_PTR))
-#define astSetMeshSize(this,meshsize) astINVOKE(V,astSetMeshSize_(astCheckRegion(this),meshsize,STATUS_PTR))
-#define astTestMeshSize(this) astINVOKE(V,astTestMeshSize_(astCheckRegion(this),STATUS_PTR))
-
-#define astClearClosed(this) astINVOKE(V,astClearClosed_(astCheckRegion(this),STATUS_PTR))
-#define astGetClosed(this) astINVOKE(V,astGetClosed_(astCheckRegion(this),STATUS_PTR))
-#define astSetClosed(this,closed) astINVOKE(V,astSetClosed_(astCheckRegion(this),closed,STATUS_PTR))
-#define astTestClosed(this) astINVOKE(V,astTestClosed_(astCheckRegion(this),STATUS_PTR))
-
-#define astClearFillFactor(this) astINVOKE(V,astClearFillFactor_(astCheckRegion(this),STATUS_PTR))
-#define astGetFillFactor(this) astINVOKE(V,astGetFillFactor_(astCheckRegion(this),STATUS_PTR))
-#define astSetFillFactor(this,ff) astINVOKE(V,astSetFillFactor_(astCheckRegion(this),ff,STATUS_PTR))
-#define astTestFillFactor(this) astINVOKE(V,astTestFillFactor_(astCheckRegion(this),STATUS_PTR))
-
-#else /* Public only */
-#define astMapRegion(this,map,frame) astINVOKE(O,astMapRegionId_(astCheckRegion(this),astCheckMapping(map),astCheckFrame(frame),STATUS_PTR))
-#endif
-
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/selectormap.c b/ast-5.3-1/selectormap.c
deleted file mode 100644
index e2bb1f3..0000000
--- a/ast-5.3-1/selectormap.c
+++ /dev/null
@@ -1,1838 +0,0 @@
-/*
-*class++
-* Name:
-* SelectorMap
-
-* Purpose:
-* A Mapping that locates positions within one of a set of alternate
-* Regions.
-
-* Constructor Function:
-c astSelectorMap
-f AST_SELECTORMAP
-
-* Description:
-* A SelectorMap is a Mapping that identifies which Region contains
-* a given input position.
-*
-* A SelectorMap encapsulates a number of Regions that all have the same
-* number of axes and represent the same coordinate Frame. The number of
-* inputs (Nin attribute) of the SelectorMap equals the number of axes
-* spanned by one of the encapsulated Region. All SelectorMaps have only
-* a single output. SelectorMaps do not define an inverse transformation.
-*
-* For each input position, the forward transformation of a SelectorMap
-* searches through the encapsulated Regions (in the order supplied when
-* the SelectorMap was created) until a Region is found which contains
-* the input position. The index associated with this Region is
-* returned as the SelectorMap output value (the index value is the
-* position of the Region within the list of Regions supplied when the
-* SelectorMap was created, starting at 1 for the first Region). If an
-* input position is not contained within any Region, a value of zero is
-* returned by the forward transformation.
-*
-* If a compound Mapping contains a SelectorMap in series with its own
-* inverse, the combination of the two adjacent SelectorMaps will be
-* replaced by a UnitMap when the compound Mapping is simplified using
-c astSimplify.
-f AST_SIMPLIFY.
-*
-* In practice, SelectorMaps are often used in conjunction with SwitchMaps.
-
-* Inheritance:
-* The SelectorMap class inherits from the Mapping class.
-
-* Attributes:
-* The SelectorMap class does not define any new attributes beyond those
-* which are applicable to all Mappings.
-
-* Functions:
-c The SelectorMap class does not define any new functions beyond those
-f The SelectorMap class does not define any new routines beyond those
-* which are applicable to all Mappings.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 15-MAR-2006 (DSB):
-* Original version.
-* 18-MAY-2006 (DSB):
-* - Change logic for detecting interior points in function Transform.
-* - Added BADVAL to contructor argument list.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS SelectorMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "mapping.h" /* Coordinate Mappings (parent class) */
-#include "unitmap.h" /* Unit Mappings */
-#include "channel.h" /* I/O channels */
-#include "selectormap.h" /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <string.h>
-#include <stdio.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(SelectorMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(SelectorMap,Class_Init)
-#define class_vtab astGLOBAL(SelectorMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstSelectorMapVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstSelectorMap *astSelectorMapId_( int, void **, double, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetObjSize( AstObject *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Member functions. */
-/* ================= */
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two SelectorMaps are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "selectormap.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* SelectorMap member function (over-rides the astEqual protected
-* method inherited from the astMapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two SelectorMaps are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Object (a SelectorMap).
-* that
-* Pointer to the second Object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the SelectorMaps are equivalent, zero otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSelectorMap *that;
- AstSelectorMap *this;
- int i;
- int nin;
- int nreg;
- int result;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain pointers to the two SelectorMap structures. */
- this = (AstSelectorMap *) this_object;
- that = (AstSelectorMap *) that_object;
-
-/* Check the second object is a SelectorMap. We know the first is a
- SelectorMap since we have arrived at this implementation of the virtual
- function. */
- if( astIsASelectorMap( that ) ) {
-
-/* Check they have the same number of inputs. */
- nin = astGetNin( this );
- if( astGetNin( that ) == nin ) {
-
-/* Check they contain the same number of Regions, and have the same badval. */
- nreg = this->nreg;
- if( that->nreg == nreg ||
- astEQUAL( that->badval, this->badval) ) {
-
-/* Loop over the Regions, breaking as soon as two unequal Regions are
- found. */
- result = 1;
- for( i = 0; i < nreg; i++ ) {
- if( !astEqual( this->reg[ i ], that->reg[ i ] ) ) {
- result = 0;
- break;
- }
- }
- }
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "selectormap.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* SelectorMap member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied SelectorMap,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the SelectorMap.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSelectorMap *this;
- int i;
- int result;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the SelectorMap structure. */
- this = (AstSelectorMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by this class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
-
- for( i = 0; i < this->nreg; i++ ) {
- result += astGetObjSize( this->reg[ i ] );
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-void astInitSelectorMapVtab_( AstSelectorMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitSelectorMapVtab
-
-* Purpose:
-* Initialise a virtual function table for a SelectorMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "selectormap.h"
-* void astInitSelectorMapVtab( AstSelectorMapVtab *vtab, const char *name )
-
-* Class Membership:
-* SelectorMap vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the SelectorMap class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsASelectorMap) to determine if an object belongs to
- this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
-
-/* None. */
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
-#if defined(THREAD_SAFE)
- parent_managelock = object->ManageLock;
- object->ManageLock = ManageLock;
-#endif
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- object->Equal = Equal;
- mapping->MapMerge = MapMerge;
-
-/* Declare the copy constructor, destructor and class dump function. */
- astSetCopy( vtab, Copy );
- astSetDelete( vtab, Delete );
- astSetDump( vtab, Dump, "SelectorMap", "Region identification Mapping" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra,
- AstObject **fail, int *status ) {
-/*
-* Name:
-* ManageLock
-
-* Purpose:
-* Manage the thread lock on an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *ManageLock( AstObject *this, int mode, int extra,
-* AstObject **fail, int *status )
-
-* Class Membership:
-* SelectorMap member function (over-rides the astManageLock protected
-* method inherited from the parent class).
-
-* Description:
-* This function manages the thread lock on the supplied Object. The
-* lock can be locked, unlocked or checked by this function as
-* deteremined by parameter "mode". See astLock for details of the way
-* these locks are used.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* mode
-* An integer flag indicating what the function should do:
-*
-* AST__LOCK: Lock the Object for exclusive use by the calling
-* thread. The "extra" value indicates what should be done if the
-* Object is already locked (wait or report an error - see astLock).
-*
-* AST__UNLOCK: Unlock the Object for use by other threads.
-*
-* AST__CHECKLOCK: Check that the object is locked for use by the
-* calling thread (report an error if not).
-* extra
-* Extra mode-specific information.
-* fail
-* If a non-zero function value is returned, a pointer to the
-* Object that caused the failure is returned at "*fail". This may
-* be "this" or it may be an Object contained within "this". Note,
-* the Object's reference count is not incremented, and so the
-* returned pointer should not be annulled. A NULL pointer is
-* returned if this function returns a value of zero.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A local status value:
-* 0 - Success
-* 1 - Could not lock or unlock the object because it was already
-* locked by another thread.
-* 2 - Failed to lock a POSIX mutex
-* 3 - Failed to unlock a POSIX mutex
-* 4 - Bad "mode" value supplied.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-*/
-
-/* Local Variables: */
- AstSelectorMap *this; /* Pointer to SelectorMap structure */
- int i; /* Loop count */
- int result; /* Returned status value */
-
-/* Initialise */
- result = 0;
-
-/* Check the supplied pointer is not NULL. */
- if( !this_object ) return result;
-
-/* Obtain a pointers to the SelectorMap structure. */
- this = (AstSelectorMap *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
- if( !result ) result = (*parent_managelock)( this_object, mode, extra,
- fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
- the supplied Object. */
- for( i = 0; i < this->nreg; i++ ) {
- if( !result ) result = astManageLock( this->reg[ i ], mode, extra, fail );
- }
-
- return result;
-
-}
-#endif
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a SelectorMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* SelectorMap method (over-rides the protected astMapMerge method
-* inherited from the Mapping class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated SelectorMap in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated SelectorMap with one which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated SelectorMap which is to be merged with
-* its neighbours. This should be a cloned copy of the SelectorMap
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* SelectorMap it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated SelectorMap resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstMapping *new;
- AstRegion **sreg;
- AstSelectorMap *map;
- AstSelectorMap *slneb;
- int equal;
- int i;
- int ilo;
- int nreg;
- int result;
- int simp;
-
-/* Initialise.*/
- result = -1;
-
-/* Check the inherited status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to this SelectorMap, and note the number of Regions. */
- map = (AstSelectorMap *) this;
- nreg = map->nreg;
-
-/* Attempt to simplify the SelectorMap on its own. */
-/* ============================================= */
-
-/* Try to simplify each of the encapsulated Regions, noting if any
- simplification takes place. */
- simp = 0;
- sreg = astMalloc( sizeof( AstRegion * )*nreg );
- if( astOK ) {
- for( i = 0; i < nreg; i++ ) {
- sreg[ i ] = astSimplify( map->reg[ i ] );
- simp = simp || ( sreg[ i ] != map->reg[ i ] );
- }
-
-/* If any simplification took place, construct a new SelectorMap from these
- simplified Mappings. */
- if( simp ) {
- (void) astAnnul( ( *map_list )[ where ] );
- ( *map_list )[ where ] = (AstMapping *) astSelectorMap( nreg,
- (void **) sreg,
- map->badval, "", status );
- result = where;
- }
-
-/* Release resources. */
- if( sreg ) {
- for( i = 0; i < nreg; i++ ) sreg[ i ] = astAnnul( sreg[ i ] );
- sreg = astFree( sreg );
- }
- }
-
-/* If possible, merge the SelectorMap with a neighbouring SelectorMap. */
-/* =============================================================== */
-/* Only do this if no change was made above, and we are combining the
- Mappings in series. */
- if( result == -1 && series ) {
-
-/* Is the higher neighbour a SelectorMap? If so get a pointer to it, and
- note the index of the lower of the two adjacent SelectorMaps. */
- if( where < ( *nmap - 1 ) &&
- astIsASelectorMap( ( *map_list )[ where + 1 ] ) ){
- slneb = (AstSelectorMap *) ( *map_list )[ where + 1 ];
- ilo = where;
-
-/* If not, is the lower neighbour a SelectorMap? If so get a pointer to it, and
- note the index of the lower of the two adjacent SelectorMaps. */
- } else if( where > 0 &&
- astIsASelectorMap( ( *map_list )[ where - 1 ] ) ){
- slneb = (AstSelectorMap *) ( *map_list )[ where - 1 ];
- ilo = where - 1;
-
- } else {
- slneb = NULL;
- }
-
-/* If a neighbouring SelectorMap was found, we can replace the pair by a
- UnitMap if the two SelectorMaps are equal but have opposite values for
- their Invert flags. Temporarily invert the neighbour, then compare
- the two SelectorMaps for equality, then re-invert the neighbour. */
- if( slneb ) {
- astInvert( slneb );
- equal = astEqual( map, slneb );
- astInvert( slneb );
-
-/* If the two SelectorMaps are equal but opposite, annul the first of the two
- Mappings, and replace it with a UnitMap. Also set the invert flag. */
- if( equal ) {
- new = (AstMapping *) astUnitMap( astGetNin( ( *map_list )[ ilo ] ), "", status );
- (void) astAnnul( ( *map_list )[ ilo ] );
- ( *map_list )[ ilo ] = new;
- ( *invert_list )[ ilo ] = 0;
-
-/* Annul the second of the two Mappings, and shuffle down the rest of the
- list to fill the gap. */
- (void) astAnnul( ( *map_list )[ ilo + 1 ] );
- for ( i = ilo + 2; i < *nmap; i++ ) {
- ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
- ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
- }
-
-/* Clear the vacated element at the end. */
- ( *map_list )[ *nmap - 1 ] = NULL;
- ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
- modified element. */
- ( *nmap )--;
- result = where;
- }
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = -1;
-
-/* Return the result. */
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a SelectorMap to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "selectormap.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* SelectorMap member function (over-rides the astTransform method inherited
-* from the Mapping class).
-
-* Description:
-* This function takes a SelectorMap and a set of points encapsulated in a
-* PointSet and transforms the points so as to apply the required Mapping.
-* This implies applying each of the SelectorMap's component Mappings in turn,
-* either in series or in parallel.
-
-* Parameters:
-* this
-* Pointer to the SelectorMap.
-* in
-* Pointer to the PointSet associated with the input coordinate values.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of coordinates for the SelectorMap being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstPointSet *ps1;
- AstPointSet *ps2;
- AstPointSet *result;
- AstPointSet *tps;
- AstRegion *reg;
- AstSelectorMap *map;
- double **ptr_out;
- double **ptr1;
- double **ptr2;
- double **tptr;
- double *p2;
- double *pout;
- double badval;
- int bad;
- int closed;
- int icoord;
- int ipoint;
- int ireg;
- int ncoord;
- int npoint;
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the SelectorMap. */
- map = (AstSelectorMap *) this;
-
-/* Apply the parent Mapping using the stored pointer to the Transform member
- function inherited from the parent Mapping class. This function validates
- all arguments and generates an output PointSet if necessary, but does not
- actually transform any coordinate values. */
- result = (*parent_transform)( this, in, forward, out, status );
-
-/* We now extend the parent astTransform method by applying the component
- Mappings of the SelectorMap to generate the output coordinate values. */
-
-/* Check we are implementing the original forward transformation (the
- inverse transformation is not defined). */
- if( forward != astGetInvert( this ) ) {
-
-/* Get the number of input axes and the number of points. */
- ncoord = astGetNcoord( in );
- npoint = astGetNpoint( in );
-
-/* Create two temporary PointSets to hold copies of the input points. */
- ps1 = astCopy( in );
- ptr1 = astGetPoints( ps1 );
- ps2 = astPointSet( npoint, ncoord, "", status );
- ptr2 = astGetPoints( ps2 );
-
-/* Get a pointer to the output data */
- ptr_out = astGetPoints( result );
- if( astOK ) {
-
-/* Initialise the output array to hold -1 at any points that have
- bad input axis values, and zero at all other points. */
- pout = ptr_out[ 0 ];
- for( ipoint = 0; ipoint < npoint; ipoint++ ) {
- bad = 0;
- for( icoord = 0; icoord < ncoord; icoord++ ) {
- if( ptr1[ icoord ][ ipoint ] == AST__BAD ) {
- bad = 1;
- break;
- }
- }
- *(pout++) = bad ? -1 : 0;
- }
-
-/* Loop round all Regions. */
- for( ireg = 1; ireg <= map->nreg; ireg++ ) {
- reg = map->reg[ ireg - 1 ];
-
-/* Temporarily Negate the Region. */
- astNegate( reg );
- closed = astGetClosed( reg );
- astSetClosed( reg, !closed );
-
-/* Transform the remaining input positions. Good input positions which
- are within the Region will be bad in the output. */
- ps2 = astTransform( reg, ps1, 1, ps2 );
-
-/* Loop round all positions. */
- p2 = ptr2[ 0 ];
- pout = ptr_out[ 0 ];
- for( ipoint = 0; ipoint < npoint; ipoint++, p2++, pout++ ) {
-
-/* Any position that has not already been assigned to a Region and is bad
- in the output PointSet must be contained within the current Region, so
- assign the (one-based) index of the current Region to the output element. */
- if( *pout == 0 && *p2 == AST__BAD ) *pout = ireg;
- }
-
-/* Negate the Region to get it back to its original state. */
- astSetClosed( reg, closed );
- astNegate( reg );
-
-/* Swap the input and output PointSets. */
- tps = ps1;
- ps1 = ps2;
- ps2 = tps;
- tptr = ptr1;
- ptr1 = ptr2;
- ptr2 = tptr;
- }
-
-/* Replace -1 values in the output (that indicate that the input position
- had at least one bad axis value) with the "badval".*/
- badval = map->badval;
- pout = ptr_out[ 0 ];
- for( ipoint = 0; ipoint < npoint; ipoint++, pout++ ) {
- if( *pout == -1 ) *pout = badval;
- }
- }
-
-/* Free resources. */
- ps1 = astAnnul( ps1 );
- ps2 = astAnnul( ps2 );
- }
-
-/* If an error occurred, clean up by deleting the output PointSet (if
- allocated by this function) and setting a NULL result pointer. */
- if ( !astOK ) {
- if ( !out ) result = astDelete( result );
- result = NULL;
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for SelectorMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for SelectorMap objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - This constructor makes a deep copy, including a copy of the
-* Regions within the SelectorMap.
-*/
-
-/* Local Variables: */
- AstSelectorMap *in; /* Pointer to input SelectorMap */
- AstSelectorMap *out; /* Pointer to output SelectorMap */
- int i; /* Loop count */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output SelectorMaps. */
- in = (AstSelectorMap *) objin;
- out = (AstSelectorMap *) objout;
-
-/* For safety, start by clearing any references to the input Regions. */
- out->reg = NULL;
- out->nreg = 0;
-
-/* Make copies of the Regions, and store pointers to them in the output
- SelectorMap structure. */
- out->reg = astMalloc( sizeof( AstRegion * )*( in->nreg ) );
- if( astOK ) {
- for( i = 0; i < in->nreg; i++ ) {
- out->reg[ i ] = astCopy( in->reg[ i ] );
- }
- out->nreg = in->nreg;
- }
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for SelectorMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for SelectorMap objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstSelectorMap *this; /* Pointer to SelectorMap */
- int i;
-
-/* Obtain a pointer to the SelectorMap structure. */
- this = (AstSelectorMap *) obj;
-
-/* Free dynamically allocated resources. */
- for( i = 0; i < this->nreg; i++ ) {
- this->reg[ i ] = astAnnul( this->reg[ i ] );
- }
- this->reg = astFree( this->reg );
-
-/* Clear the remaining SelectorMap variables. */
- this->nreg = 0;
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for SelectorMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the SelectorMap class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the SelectorMap whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstSelectorMap *this;
- int i;
- char buf[ 20 ];
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SelectorMap structure. */
- this = (AstSelectorMap *) this_object;
-
-/* Write out values representing the instance variables for the SelectorMap
- class. Accompany these with appropriate comment strings, possibly
- depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* Loop to dump each Region. */
-/* ------------------------- */
-/* The coordinate Frame of the Regions is defined by the first Region.
- The Frame information is omitted from the second and subsequent
- Regions by setting the protected RegionFS attribute to zero. */
- for( i = 0; i < this->nreg; i++ ) {
- sprintf( buf, "Reg%d", i + 1 );
- if( i > 0 ) astSetRegionFS( this->reg[ i ], 0 );
- astWriteObject( channel, buf, 1, 1, this->reg[ i ],
- "Region of input space" );
- if( i > 0 ) astClearRegionFS( this->reg[ i ] );
- }
-
-/* BadVal. */
-/* ------- */
- if( this->badval != AST__BAD ) {
- astWriteDouble( channel, "BadVal", 1, 1, this->badval,
- "Output value for bad input positions" );
- }
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsASelectorMap and astCheckSelectorMap functions using the
- macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(SelectorMap,Mapping)
-astMAKE_CHECK(SelectorMap)
-
-AstSelectorMap *astSelectorMap_( int nreg, void **regs_void, double badval,
- const char *options, int *status, ...) {
-/*
-*+
-* Name:
-* astSelectorMap
-
-* Purpose:
-* Create a SelectorMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "selectormap.h"
-* AstSelectorMap *astSelectorMap( int nreg, AstRegion **regs,
-* double badval, const char *options, ... )
-
-* Class Membership:
-* SelectorMap constructor.
-
-* Description:
-* This function creates a new SelectorMap and optionally initialises its
-* attributes.
-
-* Parameters:
-* nreg
-* The number of Regions supplied.
-* regs
-* An array of pointers to the Regions. Deep copies of these
-* Regions are taken.
-* badval
-* The value to be returned by the forward transformation of the
-* SelectorMap for any input positions that have a bad (AST__BAD)
-* value on any axis.
-* options
-* Pointer to a null terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new SelectorMap. The syntax used is the same as for the
-* astSet method and may include "printf" format specifiers identified
-* by "%" symbols in the normal way.
-* ...
-* If the "options" string contains "%" format specifiers, then an
-* optional list of arguments may follow it in order to supply values to
-* be substituted for these specifiers. The rules for supplying these
-* are identical to those for the astSet method (and for the C "printf"
-* function).
-
-* Returned Value:
-* A pointer to the new SelectorMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-
-* Implementation Notes:
-* - This function implements the basic SelectorMap constructor which is
-* available via the protected interface to the SelectorMap class. A
-* public interface is provided by the astSelectorMapId_ function.
-* - Because this function has a variable argument list, it is
-* invoked by a macro that evaluates to a function pointer (not a
-* function invocation) and no checking or casting of arguments is
-* performed before the function is invoked. Because of this, the
-* "map1" and "map2" parameters are of type (void *) and are
-* converted and validated within the function itself.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstSelectorMap *new; /* Pointer to new SelectorMap */
- AstRegion **regs; /* Array of Region pointers */
- int i; /* Region index */
- va_list args; /* Variable argument list */
-
-/* Initialise. */
- new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return new;
-
-/* Report an error if no Regions have been supplied. */
- if( nreg <= 0 ) astError( AST__BDPAR, "astSelectorMap(SelectorMap): "
- "Bad number of Regions (%d) specified.", status, nreg );
-
-/* Otherwise create an array to hold the Region pointers. */
- regs = astMalloc( sizeof( AstRegion * )*nreg );
-
-/* Obtain and validate pointers to the Region structures provided. */
- if( astOK ) {
- for( i = 0; i < nreg; i++ ) {
- regs[ i ] = astCheckRegion( regs_void[ i ] );
- }
- }
-
- if ( astOK ) {
-
-/* Initialise the SelectorMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitSelectorMap( NULL, sizeof( AstSelectorMap ), !class_init, &class_vtab,
- "SelectorMap", nreg, regs, badval );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new SelectorMap's
- attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Free memory used to hold the Regions pointers. */
- regs = astFree( regs );
-
-/* Return a pointer to the new SelectorMap. */
- return new;
-}
-
-AstSelectorMap *astSelectorMapId_( int nreg, void **regs_void, double badval,
- const char *options, ... ) {
-/*
-*++
-* Name:
-c astSelectorMap
-f AST_SELECTORMAP
-
-* Purpose:
-* Create a SelectorMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "selectormap.h"
-c AstSelectorMap *astSelectorMap( int nreg, AstRegion *regs[],
-c double badval, const char *options, ... )
-f RESULT = AST_SELECTORMAP( NREG, REGS, BADVAL, OPTIONS, STATUS )
-
-* Class Membership:
-* SelectorMap constructor.
-
-* Description:
-* This function creates a new SelectorMap and optionally initialises
-* its attributes.
-*
-* A SelectorMap is a Mapping that identifies which Region contains
-* a given input position.
-*
-* A SelectorMap encapsulates a number of Regions that all have the same
-* number of axes and represent the same coordinate Frame. The number of
-* inputs (Nin attribute) of the SelectorMap equals the number of axes
-* spanned by one of the encapsulated Region. All SelectorMaps have only
-* a single output. SelectorMaps do not define an inverse transformation.
-*
-* For each input position, the forward transformation of a SelectorMap
-* searches through the encapsulated Regions (in the order supplied when
-* the SelectorMap was created) until a Region is found which contains
-* the input position. The index associated with this Region is
-* returned as the SelectorMap output value (the index value is the
-* position of the Region within the list of Regions supplied when the
-* SelectorMap was created, starting at 1 for the first Region). If an
-* input position is not contained within any Region, a value of zero is
-* returned by the forward transformation.
-*
-* If a compound Mapping contains a SelectorMap in series with its own
-* inverse, the combination of the two adjacent SelectorMaps will be
-* replaced by a UnitMap when the compound Mapping is simplified using
-c astSimplify.
-f AST_SIMPLIFY.
-*
-* In practice, SelectorMaps are often used in conjunction with SwitchMaps.
-
-* Parameters:
-c nreg
-f NREG = INTEGER (Given)
-* The number of supplied Regions.
-c regs
-f REGS( NREG ) = INTEGER (Given)
-* An array of pointers to the Regions. All the supplied Regions must
-* relate to the same coordinate Frame. The number of axes in this
-* coordinate Frame defines the number of inputs for the SelectorMap.
-c badval
-f BADVAL = DOUBLE PRECISION (Given)
-* The value to be returned by the forward transformation of the
-* SelectorMap for any input positions that have a bad (AST__BAD)
-* value on any axis.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new SelectorMap. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new SelectorMap. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astSelectorMap()
-f AST_SELECTORMAP = INTEGER
-* A pointer to the new SelectorMap.
-
-* Notes:
-* - Deep copies are taken of the supplied Regions. This means that
-* any subsequent changes made to the component Regions using the
-* supplied pointers will have no effect on the SelectorMap.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-
-* Implementation Notes:
-* - This function implements the external (public) interface to
-* the astSelectorMap constructor function. It returns an ID value
-* (instead of a true C pointer) to external users, and must be
-* provided because astSelectorMap_ has a variable argument list which
-* cannot be encapsulated in a macro (where this conversion would
-* otherwise occur).
-* - Because no checking or casting of arguments is performed
-* before the function is invoked, the "map1" and "map2" parameters
-* are of type (void *) and are converted from an ID value to a
-* pointer and validated within the function itself.
-* - The variable argument list also prevents this function from
-* invoking astSelectorMap_ directly, so it must be a re-implementation
-* of it in all respects, except for the conversions between IDs
-* and pointers on input/output of Objects.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstSelectorMap *new; /* Pointer to new SelectorMap */
- AstRegion **regs; /* Array of Region pointers */
- int i; /* Region index */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialise. */
- new = NULL;
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return new;
-
-/* Report an error if no Regions have been supplied. */
- if( nreg <= 0 ) astError( AST__BDPAR, "astSelectorMap(SelectorMap): "
- "Bad number of Regions (%d) specified.", status, nreg );
-
-/* Create an array to hold the Region pointers. */
- regs = astMalloc( sizeof( AstRegion * )*nreg );
-
-/* Obtain and validate pointers to the Region structures provided. */
- if( astOK ) {
- for( i = 0; i < nreg; i++ ) {
- regs[ i ] = astVerifyRegion( astMakePointer(regs_void[ i ]) );
- }
- }
-
- if ( astOK ) {
-
-/* Initialise the SelectorMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitSelectorMap( NULL, sizeof( AstSelectorMap ), !class_init,
- &class_vtab, "SelectorMap", nreg, regs,
- badval );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new SelectorMap's
- attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Free memory used to hold the Regions pointers. */
- regs = astFree( regs );
-
-/* Return an ID value for the new SelectorMap. */
- return astMakeId( new );
-}
-
-AstSelectorMap *astInitSelectorMap_( void *mem, size_t size, int init,
- AstSelectorMapVtab *vtab, const char *name,
- int nreg, AstRegion **regs, double badval, int *status ) {
-/*
-*+
-* Name:
-* astInitSelectorMap
-
-* Purpose:
-* Initialise a SelectorMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "selectormap.h"
-* AstSelectorMap *astInitSelectorMap( void *mem, size_t size, int init,
-* AstSelectorMapVtab *vtab, const char *name,
-* int nreg, AstRegion **regs, double badval )
-
-* Class Membership:
-* SelectorMap initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new SelectorMap object. It allocates memory (if necessary) to
-* accommodate the SelectorMap plus any additional data associated with the
-* derived class. It then initialises a SelectorMap structure at the start
-* of this memory. If the "init" flag is set, it also initialises the
-* contents of a virtual function table for a SelectorMap at the start of
-* the memory passed via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the SelectorMap is to be initialised.
-* This must be of sufficient size to accommodate the SelectorMap data
-* (sizeof(SelectorMap)) plus any data used by the derived class. If a
-* value of NULL is given, this function will allocate the memory itself
-* using the "size" parameter to determine its size.
-* size
-* The amount of memory used by the SelectorMap (plus derived class
-* data). This will be used to allocate memory if a value of NULL is
-* given for the "mem" parameter. This value is also stored in the
-* SelectorMap structure, so a valid value must be supplied even if not
-* required for allocating memory.
-* init
-* A logical flag indicating if the SelectorMap's virtual function table
-* is to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new SelectorMap.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the Object
-* astClass function).
-* nreg
-* The number of Regions supplied.
-* regs
-* An array holdiong pointers to the Regions. Deep copies are taken
-* of these Regions.
-* badval
-* The value to be returned by the forward transformation of the
-* SelectorMap for any input positions that have a bad (AST__BAD)
-* value on any axis.
-
-* Returned Value:
-* A pointer to the new SelectorMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstFrame *f0; /* Frame from first Region */
- AstFrame *f1; /* Frame from current Region */
- AstSelectorMap *new; /* Pointer to new SelectorMap */
- int equal; /* Are Frames equal? */
- int i; /* Loop count */
- int nin; /* No. input coordinates for SelectorMap */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitSelectorMapVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Check that all Regions refer to the same Frame. */
- f0 = astRegFrame( regs[ 0 ] );
- for( i = 1; i < nreg; i++ ) {
- f1 = astRegFrame( regs[ i ] );
- equal = astEqual( f1, f0 );
- f1 = astAnnul( f1 );
-
- if( !equal ) {
- if( astOK ) {
- astError( AST__BADNI, "astInitSelectorMap(%s): Region "
- "number %d does not refer to the same coordinate "
- "Frame as the first Region.", status, name, i + 1 );
- }
- }
- }
-
- nin = astGetNin( regs[ 0 ] );
- f0 = astAnnul( f0 );
-
-/* Initialise a Mapping structure (the parent class) as the first component
- within the SelectorMap structure, allocating memory if necessary. Specify
- the number of input and output coordinates and in which directions the
- Mapping should be defined. */
- if ( astOK ) {
- new = (AstSelectorMap *) astInitMapping( mem, size, 0,
- (AstMappingVtab *) vtab, name,
- nin, 1, 1, 0 );
- if ( astOK ) {
-
-/* Initialise the SelectorMap data. */
-/* -------------------------------- */
-
-/* Create an array for the Region pointers. */
- new->reg = astMalloc( sizeof( AstRegion * )*nreg );
-
-/* Store pointers to deep copies of the Regions. */
- if( astOK ) {
- new->nreg = nreg;
- for( i = 0; i < nreg; i++ ) {
- new->reg[ i ] = astCopy( regs[ i ] );
- }
- } else {
- new->nreg = 0;
- }
-
-/* Store other items */
- new->badval = badval;
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstSelectorMap *astLoadSelectorMap_( void *mem, size_t size,
- AstSelectorMapVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadSelectorMap
-
-* Purpose:
-* Load a SelectorMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "selectormap.h"
-* AstSelectorMap *astLoadSelectorMap( void *mem, size_t size,
-* AstSelectorMapVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* SelectorMap loader.
-
-* Description:
-* This function is provided to load a new SelectorMap using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* SelectorMap structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a SelectorMap at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the SelectorMap is to be
-* loaded. This must be of sufficient size to accommodate the
-* SelectorMap data (sizeof(SelectorMap)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the SelectorMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the SelectorMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstSelectorMap) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new SelectorMap. If this is NULL, a pointer to
-* the (static) virtual function table for the SelectorMap class is
-* used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "SelectorMap" is used instead.
-
-* Returned Value:
-* A pointer to the new SelectorMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstSelectorMap *new;
- AstFrameSet *fs;
- AstRegion *reg;
- int i;
- char buf[ 20 ];
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this SelectorMap. In this case the
- SelectorMap belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstSelectorMap );
- vtab = &class_vtab;
- name = "SelectorMap";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitSelectorMapVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built SelectorMap. */
- new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
- channel );
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "SelectorMap" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-
-/* Loop to load each Region. */
-/* ------------------------- */
- new->reg = NULL;
- i = 0;
- fs = NULL;
- while( astOK ) {
- sprintf( buf, "reg%d", i + 1 );
- reg = astReadObject( channel, buf, NULL );
- if( reg ) {
- new->reg = astGrow( new->reg, i + 1, sizeof( AstRegion *) );
- if( astOK ) {
- new->reg[ i ] = reg;
-
-/* All but the first Region may have a dummy FrameSet rather than the
- correct FrameSet. The correct FrameSet will be a copy of the FrameSet
- from the first Region. */
- if( i == 0 ) {
- fs = astGetRegFS( reg );
- } else if( astRegDummyFS( reg ) ){
- astSetRegFS( reg, fs );
- }
-
- i++;
- }
- } else {
- break;
- }
- }
-
- fs = astAnnul( fs );
-
-/* Number of Regions. */
- new->nreg = i;
-
-
-/* BadVal. */
-/* ------- */
- new->badval = astReadDouble( channel, "badval", AST__BAD );
-
-/* If an error occurred, clean up by deleting the new SelectorMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new SelectorMap pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-/* None. */
-
-
-
-
diff --git a/ast-5.3-1/selectormap.h b/ast-5.3-1/selectormap.h
deleted file mode 100644
index b7d3019..0000000
--- a/ast-5.3-1/selectormap.h
+++ /dev/null
@@ -1,277 +0,0 @@
-#if !defined( SELECTORMAP_INCLUDED ) /* Include this file only once */
-#define SELECTORMAP_INCLUDED
-/*
-*+
-* Name:
-* selectormap.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the SelectorMap class.
-
-* Invocation:
-* #include "selectormap.h"
-
-* Description:
-* This include file defines the interface to the SelectorMap class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-
-* Inheritance:
-* The SelectorMap class inherits from the Mapping class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* None.
-
-* Methods Over-Ridden:
-* Public:
-* None.
-*
-* Protected:
-* astMapMerge
-* Merge a SelectorMap within a sequence of Mappings.
-* astTransform
-* Transform a set of points.
-
-* New Methods Defined:
-* Public:
-* None.
-*
-* Protected:
-* None.
-
-* Other Class Functions:
-* Public:
-* astIsASelectorMap
-* Test class membership.
-* astSelectorMap
-* Create a SelectorMap.
-*
-* Protected:
-* astCheckSelectorMap
-* Validate class membership.
-* astInitSelectorMap
-* Initialise a SelectorMap.
-* astInitSelectorMapVtab
-* Initialise the virtual function table for the SelectorMap class.
-* astLoadSelectorMap
-* Load a SelectorMap.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstSelectorMap
-* SelectorMap object type.
-*
-* Protected:
-* AstSelectorMapVtab
-* SelectorMap virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 13-MAR-2006 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h" /* Coordinate Mappings (parent class) */
-#include "region.h" /* Coordinate Regions (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* SelectorMap structure. */
-/* ----------------- */
-/* This structure contains all information that is unique to each
- object in the class (e.g. its instance variables). */
-typedef struct AstSelectorMap {
-
-/* Attributes inherited from the parent class. */
- AstMapping mapping; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- int nreg; /* The number of Regions in the SelectorMap */
- AstRegion **reg; /* Array of Region pointers */
- double badval; /* Output value for positions with bad axis values */
-
-} AstSelectorMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstSelectorMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstMappingVtab mapping_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-/* None. */
-} AstSelectorMapVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstSelectorMapGlobals {
- AstSelectorMapVtab Class_Vtab;
- int Class_Init;
-} AstSelectorMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitSelectorMapGlobals_( AstSelectorMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(SelectorMap) /* Check class membership */
-astPROTO_ISA(SelectorMap) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstSelectorMap *astSelectorMap_( int, void **, double, const char *, int *, ...);
-#else
-AstSelectorMap *astSelectorMapId_( int, void **, double, const char *, ... )__attribute__((format(printf,4,5)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstSelectorMap *astInitSelectorMap_( void *, size_t, int, AstSelectorMapVtab *,
- const char *, int, AstRegion **, double, int * );
-
-/* Vtab initialiser. */
-void astInitSelectorMapVtab_( AstSelectorMapVtab *, const char *, int * );
-
-/* Loader. */
-AstSelectorMap *astLoadSelectorMap_( void *, size_t, AstSelectorMapVtab *,
- const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-/* None. */
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckSelectorMap(this) astINVOKE_CHECK(SelectorMap,this,0)
-#define astVerifySelectorMap(this) astINVOKE_CHECK(SelectorMap,this,1)
-
-/* Test class membership. */
-#define astIsASelectorMap(this) astINVOKE_ISA(SelectorMap,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astSelectorMap astINVOKE(F,astSelectorMap_)
-#else
-#define astSelectorMap astINVOKE(F,astSelectorMapId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitSelectorMap(mem,size,init,vtab,name,nreg,regs,badval) \
-astINVOKE(O,astInitSelectorMap_(mem,size,init,vtab,name,nreg,regs,badval,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitSelectorMapVtab(vtab,name) astINVOKE(V,astInitSelectorMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadSelectorMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadSelectorMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckSelectorMap to validate SelectorMap pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-/* None. */
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/shiftmap.c b/ast-5.3-1/shiftmap.c
deleted file mode 100644
index 239e2bf..0000000
--- a/ast-5.3-1/shiftmap.c
+++ /dev/null
@@ -1,1628 +0,0 @@
-/*
-*class++
-* Name:
-* ShiftMap
-
-* Purpose:
-* Add a constant value to each coordinate.
-
-* Constructor Function:
-c astShiftMap
-f AST_SHIFTMAP
-
-* Description:
-* A ShiftMap is a linear Mapping which shifts each axis by a
-* specified constant value.
-
-* Inheritance:
-* The ShiftMap class inherits from the Mapping class.
-
-* Attributes:
-* The ShiftMap class does not define any new attributes beyond those
-* which are applicable to all Mappings.
-
-* Functions:
-c The ShiftMap class does not define any new functions beyond those
-f The ShiftMap class does not define any new routines beyond those
-* which are applicable to all Mappings.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David Berry (Starlink)
-
-* History:
-* 15-AUG-2003 (DSB):
-* Original version.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 10-MAY-2006 (DSB):
-* Override astEqual.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS ShiftMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory management facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "matrixmap.h" /* Linear mappings */
-#include "unitmap.h" /* Unit mappings */
-#include "zoommap.h" /* Zoom mappings */
-#include "permmap.h" /* Axis permutations */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-#include "channel.h" /* I/O channels */
-#include "winmap.h" /* Window mappings */
-#include "shiftmap.h" /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(ShiftMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(ShiftMap,Class_Init)
-#define class_vtab astGLOBAL(ShiftMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstShiftMapVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstShiftMap *astShiftMapId_( int, const double [], const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static int GetObjSize( AstObject *, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetIsLinear( AstMapping *, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-
-/* Function Macros */
-/* =============== */
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
-compare bad values directory because of the danger of floating point
-exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Member functions. */
-/* ================= */
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two ShiftMaps are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "shiftmap.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* ShiftMap member function (over-rides the astEqual protected
-* method inherited from the astMapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two ShiftMaps are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Object (a ShiftMap).
-* that
-* Pointer to the second Object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the ShiftMaps are equivalent, zero otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstShiftMap *that;
- AstShiftMap *this;
- int i;
- int nin;
- int nout;
- int result;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain pointers to the two ShiftMap structures. */
- this = (AstShiftMap *) this_object;
- that = (AstShiftMap *) that_object;
-
-/* Check the second object is a ShiftMap. We know the first is a
- ShiftMap since we have arrived at this implementation of the virtual
- function. */
- if( astIsAShiftMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
- nin = astGetNin( this );
- nout = astGetNout( this );
- if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two ShiftMaps differ, it may still be possible
- for them to be equivalent. First compare the ShiftMaps if their Invert
- flags are the same. In this case all the attributes of the two ShiftMaps
- must be identical. */
- if( astGetInvert( this ) == astGetInvert( that ) ) {
- result = 1;
- for( i = 0; i < nin; i++ ) {
- if( !astEQUAL( this->shift[ i ], that->shift[ i ] ) ) {
- result = 0;
- break;
- }
- }
-
-/* If the Invert flags for the two ShiftMaps differ, the attributes of the two
- ShiftMaps must be inversely related to each other. */
- } else {
-
- result = 1;
- for( i = 0; i < nin; i++ ) {
- if( !astEQUAL( this->shift[ i ], -(that->shift[ i ] ) ) ) {
- result = 0;
- break;
- }
- }
-
- }
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static int GetIsLinear( AstMapping *this_mapping, int *status ){
-/*
-* Name:
-* GetIsLinear
-
-* Purpose:
-* Return the value of the IsLinear attribute for a ShiftMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void GetIsLinear( AstMapping *this, int *status )
-
-* Class Membership:
-* ShiftMap member function (over-rides the protected astGetIsLinear
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns the value of the IsLinear attribute for a
-* Frame, which is always one.
-
-* Parameters:
-* this
-* Pointer to the ShiftMap.
-* status
-* Pointer to the inherited status variable.
-*/
- return 1;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "shiftmap.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* ShiftMap member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied ShiftMap,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the ShiftMap.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstShiftMap *this; /* Pointer to ShiftMap structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the ShiftMap structure. */
- this = (AstShiftMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
- result += astTSizeOf( this->shift );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-void astInitShiftMapVtab_( AstShiftMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitShiftMapVtab
-
-* Purpose:
-* Initialise a virtual function table for a ShiftMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "shiftmap.h"
-* void astInitShiftMapVtab( AstShiftMapVtab *vtab, const char *name )
-
-* Class Membership:
-* ShiftMap vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the ShiftMap class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAShiftMap) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- object->Equal = Equal;
- mapping->MapMerge = MapMerge;
- mapping->Rate = Rate;
- mapping->MapSplit = MapSplit;
- mapping->GetIsLinear = GetIsLinear;
-
-/* Declare the class dump, copy and delete functions.*/
- astSetDump( vtab, Dump, "ShiftMap", "Shift each coordinate axis" );
- astSetCopy( (AstObjectVtab *) vtab, Copy );
- astSetDelete( (AstObjectVtab *) vtab, Delete );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a ShiftMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* ShiftMap method (over-rides the protected astMapMerge method
-* inherited from the Mapping class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated ShiftMap in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated ShiftMap with a Mapping which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated ShiftMap which is to be merged with
-* its neighbours. This should be a cloned copy of the ShiftMap
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* ShiftMap it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated ShiftMap resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstWinMap *w1; /* Pointer to replacement Mapping */
- AstShiftMap *sm; /* Pointer to this ShiftMap */
- double *aa; /* Pointer to shift terms for new WinMap */
- double *bb; /* Pointer to scale terms for new WinMap */
- int i; /* Axis count */
- int nin; /* Number of axes */
- int result; /* Returned value */
-
-/* Initialise. */
- result = -1;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* A ShiftMap is equivalent to a WinMap with unit scaling. The policy on
- simplifying a ShiftMap is to convert it to the equivalent WinMap and let
- the WinMap class do the simplifying. Create the returned WinMap, initially
- with undefined corners. */
- nin = astGetNin( this );
- w1 = astWinMap( nin, NULL, NULL, NULL, NULL, "", status );
-
-/* If succesful, store the scale and shift terms in the WinMap. The scale
- terms are unity. */
- if( astOK ){
- sm = (AstShiftMap *) this;
-
- bb = w1->b;
- aa = w1->a;
- for( i = 0; i < nin; i++ ) {
- *(bb++) = 1.0;
- *(aa++) = ( *invert_list )[ where ] ? -(sm->shift)[ i ] : (sm->shift)[ i ];
- }
-
-/* Replace the supplied ShiftMap with the new WinMap and reset the invert
- flag. */
- (void) astAnnul( ( *map_list )[ where ] );
- ( *map_list )[ where ] = (AstMapping *) w1;
- ( *invert_list )[ where ] = 0;
-
-/* Return the index of the first modified element. */
- result = where;
- }
-
-/* Return the result. */
- return result;
-}
-
-static int *MapSplit( AstMapping *this_map, int nin, const int *in, AstMapping **map, int *status ){
-/*
-* Name:
-* MapSplit
-
-* Purpose:
-* Create a Mapping representing a subset of the inputs of an existing
-* ShiftMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "shiftmap.h"
-* int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status )
-
-* Class Membership:
-* ShiftMap method (over-rides the protected astMapSplit method
-* inherited from the Mapping class).
-
-* Description:
-* This function creates a new Mapping by picking specified inputs from
-* an existing ShiftMap. This is only possible if the specified inputs
-* correspond to some subset of the ShiftMap outputs. That is, there
-* must exist a subset of the ShiftMap outputs for which each output
-* depends only on the selected ShiftMap inputs, and not on any of the
-* inputs which have not been selected. If this condition is not met
-* by the supplied ShiftMap, then a NULL Mapping is returned.
-
-* Parameters:
-* this
-* Pointer to the ShiftMap to be split (the ShiftMap is not actually
-* modified by this function).
-* nin
-* The number of inputs to pick from "this".
-* in
-* Pointer to an array of indices (zero based) for the inputs which
-* are to be picked. This array should have "nin" elements. If "Nin"
-* is the number of inputs of the supplied ShiftMap, then each element
-* should have a value in the range zero to Nin-1.
-* map
-* Address of a location at which to return a pointer to the new
-* Mapping. This Mapping will have "nin" inputs (the number of
-* outputs may be different to "nin"). A NULL pointer will be
-* returned if the supplied ShiftMap has no subset of outputs which
-* depend only on the selected inputs.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated array of ints. The number of
-* elements in this array will equal the number of outputs for the
-* returned Mapping. Each element will hold the index of the
-* corresponding output in the supplied ShiftMap. The array should be
-* freed using astFree when no longer needed. A NULL pointer will
-* be returned if no output Mapping can be created.
-
-* Notes:
-* - If this function is invoked with the global error status set,
-* or if it should fail for any reason, then NULL values will be
-* returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
- AstShiftMap *newsm; /* Pointer to returned ShiftMap */
- AstShiftMap *this; /* Pointer to ShiftMap structure */
- int *result; /* Pointer to returned array */
- int i; /* Loop count */
- int iin; /* Mapping input index */
- int mnin; /* No. of Mapping inputs */
- int ok; /* Are input indices OK? */
-
-/* Initialise */
- result = NULL;
- *map = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the ShiftMap structure. */
- this = (AstShiftMap *) this_map;
-
-/* Allocate memory for the returned array and create a ShiftMap with the
- required number of axes and initially unsorted shifts. */
- result = astMalloc( sizeof( int )*(size_t) nin );
- newsm = astShiftMap( nin, this->shift, "", status );
- *map = (AstMapping *) newsm;
-
-/* Check pointers can be used safely. */
- if( astOK ) {
-
-/* Store the required shifts in the new ShiftMap. At the same time check
- that each axis is valid. */
- mnin = astGetNin( this );
- ok = 1;
- for( i = 0; i < nin; i++ ) {
- iin = in[ i ];
- if( iin >= 0 && iin < mnin ) {
- (newsm->shift)[ i ] = (this->shift)[ iin ];
- result[ i ] = iin;
- } else {
- ok = 0;
- break;
- }
- }
-
-/* If the "in" array contained any invalid values, free the returned
- resources. */
- if( !ok ) {
- result = astFree( result );
- *map = astAnnul( *map );
-
-/* If the indices are good, invert the returned ShiftMap if the supplied
- ShiftMap is inverted. */
- } else {
- if( astGetInvert( this ) ) astInvert( *map );
- }
- }
-
-/* Free returned resources if an error has occurred. */
- if( !astOK ) {
- result = astFree( result );
- *map = astAnnul( *map );
- }
-
-/* Return the list of output indices. */
- return result;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-* Name:
-* Rate
-
-* Purpose:
-* Calculate the rate of change of a Mapping output.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "shiftmap.h"
-* result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-* Class Membership:
-* ShiftMap member function (overrides the astRate method inherited
-* from the Mapping class ).
-
-* Description:
-* This function returns the rate of change of a specified output of
-* the supplied Mapping with respect to a specified input, at a
-* specified input position.
-
-* Parameters:
-* this
-* Pointer to the Mapping to be applied.
-* at
-* The address of an array holding the axis values at the position
-* at which the rate of change is to be evaluated. The number of
-* elements in this array should equal the number of inputs to the
-* Mapping.
-* ax1
-* The index of the Mapping output for which the rate of change is to
-* be found (output numbering starts at 0 for the first output).
-* ax2
-* The index of the Mapping input which is to be varied in order to
-* find the rate of change (input numbering starts at 0 for the first
-* input).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The rate of change of Mapping output "ax1" with respect to input
-* "ax2", evaluated at "at", or AST__BAD if the value cannot be
-* calculated.
-
-*/
-
- return ( ax1 == ax2 ) ? 1.0 : 0.0;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a ShiftMap to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "shiftmap.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* ShiftMap member function (over-rides the astTransform protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function takes a ShiftMap and a set of points encapsulated in a
-* PointSet and transforms the points so as to map them into the
-* required window.
-
-* Parameters:
-* this
-* Pointer to the ShiftMap.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of coordinates for the ShiftMap being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstPointSet *result; /* Pointer to output PointSet */
- AstShiftMap *map; /* Pointer to ShiftMap to be applied */
- const char *class; /* Object class */
- double **ptr_in; /* Pointer to input coordinate data */
- double **ptr_out; /* Pointer to output coordinate data */
- double *axin; /* Pointer to next input axis value */
- double *axout; /* Pointer to next output axis value */
- double a; /* Shift for current axis */
- int coord; /* Loop counter for coordinates */
- int ncoord; /* Number of coordinates per point */
- int npoint; /* Number of points */
- int point; /* Loop counter for points */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the ShiftMap. */
- map = (AstShiftMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Mapping class. This function validates
- all arguments and generates an output PointSet if necessary, but does not
- actually transform any coordinate values. */
- result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
- PointSet and obtain pointers for accessing the input and output coordinate
- values. */
- ncoord = astGetNcoord( in );
- npoint = astGetNpoint( in );
- ptr_in = astGetPoints( in );
- ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse mapping, according to the
- direction specified and whether the mapping has been inverted. */
- if ( astGetInvert( map ) ) forward = !forward;
-
-/* Report an error if the ShiftMap does not contain any shifts. */
- if( !map->shift && astOK ){
- class = astGetClass( this );
- astError( AST__BADSM, "astTransform(%s): The supplied %s does not "
- "contain any shift information.", status, class, class );
- }
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
- if( astOK ){
-
-/* Apply the mapping to each axis. */
- for( coord = 0; coord < ncoord; coord++ ){
-
-/* Store pointers to the first input and output values on this axis. */
- axin = ptr_in[ coord ];
- axout = ptr_out[ coord ];
-
-/* Get the value to add to each axis value. */
- a = (map->shift)[ coord ];
-
-/* If the shift is bad store bad output values. */
- if( a == AST__BAD ){
- for( point = 0; point < npoint; point++ ) *(axout++) = AST__BAD;
-
-/* Otherwise, shift this axis, taking account of whether the mapping is
- inverted or not. */
- } else {
- if( !forward ) a = -a;
-
- for( point = 0; point < npoint; point++ ){
- if( *axin != AST__BAD ){
- *(axout++) = (*axin) + a;
- } else {
- *(axout++) = AST__BAD;
- }
- axin++;
- }
- }
- }
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for ShiftMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for ShiftMap objects.
-
-* Parameters:
-* objin
-* Pointer to the ShiftMap to be copied.
-* objout
-* Pointer to the ShiftMap being constructed.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstShiftMap *out; /* Pointer to output ShiftMap */
- AstShiftMap *in; /* Pointer to input ShiftMap */
- int ncoord; /* No. of axes for the mapping */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the input and output ShiftMaps. */
- in= (AstShiftMap *) objin;
- out = (AstShiftMap *) objout;
-
-/* Get the number of coordinates mapped by the ShiftMap. */
- ncoord = astGetNin( in );
-
-/* Allocate memory holding copies of the shifts defining the mapping. */
- out->shift = (double *) astStore( NULL, (void *) in->shift,
- sizeof(double)*(size_t)ncoord );
-
-/* If an error occurred, free any allocated memory. */
- if ( !astOK ) {
- out->shift = (double *) astFree( (void *) out->shift );
- }
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for ShiftMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for ShiftMap objects.
-
-* Parameters:
-* obj
-* Pointer to the ShiftMap to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This destructor does nothing and exists only to maintain a
-* one-to-one correspondence between destructors and copy
-* constructors.
-*/
-
-/* Local Variables: */
- AstShiftMap *this; /* Pointer to ShiftMap */
-
-/* Obtain a pointer to the ShiftMap structure. */
- this = (AstShiftMap *) obj;
-
-/* Free the memory holding the shifts. */
- this->shift = (double *) astFree( (void *) this->shift );
-
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for ShiftMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the ShiftMap class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the ShiftMap whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define COMMENT_LEN 50 /* Maximum length of a comment string */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstShiftMap *this; /* Pointer to the ShiftMap structure */
- char buff[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- char comment[ COMMENT_LEN + 1 ]; /* Buffer for comment string */
- int axis; /* Axis index */
- int ncoord; /* No. of axes for mapping */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the ShiftMap structure. */
- this = (AstShiftMap *) this_object;
-
-/* Get the number of coordinates to be mapped. */
- ncoord = astGetNin( this );
-
-/* Write out values representing the instance variables for the
- ShiftMap class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* The shifts. */
- for( axis = 0; axis < ncoord; axis++ ){
- (void) sprintf( buff, "Sft%d", axis + 1 );
- (void) sprintf( comment, "Shift for axis %d", axis + 1 );
- astWriteDouble( channel, buff, (this->shift)[ axis ] != 0.0, 0,
- (this->shift)[ axis ], comment );
- }
-
-/* Undefine macros local to this function. */
-#undef COMMENT_LEN
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAShiftMap and astCheckShiftMap functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(ShiftMap,Mapping)
-astMAKE_CHECK(ShiftMap)
-
-AstShiftMap *astShiftMap_( int ncoord, const double shift[], const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astShiftMap
-f AST_SHIFTMAP
-
-* Purpose:
-* Create a ShiftMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "shiftmap.h"
-c AstShiftMap *astShiftMap( int ncoord, const double shift[],
-c const char *options, ... )
-f RESULT = AST_SHIFTMAP( NCOORD, SHIFT, OPTIONS, STATUS )
-
-* Class Membership:
-* ShiftMap constructor.
-
-* Description:
-* This function creates a new ShiftMap and optionally initialises its
-* attributes.
-*
-* A ShiftMap is a linear Mapping which shifts each axis by a
-* specified constant value.
-
-* Parameters:
-c ncoord
-f NCOORD = INTEGER (Given)
-* The number of coordinate values for each point to be
-* transformed (i.e. the number of dimensions of the space in
-* which the points will reside). The same number is applicable
-* to both input and output points.
-c shift
-f SHIFT( NCOORD ) = DOUBLE PRECISION (Given)
-* An array containing the values to be added on to the input
-* coordinates in order to create the output coordinates. A separate
-* value should be supplied for each coordinate.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new ShiftMap. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new ShiftMap. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astShiftMap()
-f AST_SHIFTMAP = INTEGER
-* A pointer to the new ShiftMap.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-
-* Status Handling:
-* The protected interface to this function includes an extra
-* parameter at the end of the parameter list descirbed above. This
-* parameter is a pointer to the integer inherited status
-* variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstShiftMap *new; /* Pointer to new ShiftMap */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the ShiftMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitShiftMap( NULL, sizeof( AstShiftMap ), !class_init, &class_vtab,
- "ShiftMap", ncoord, shift );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new ShiftMap's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new ShiftMap. */
- return new;
-}
-
-AstShiftMap *astShiftMapId_( int ncoord, const double shift[],
- const char *options, ... ) {
-/*
-* Name:
-* astShiftMapId_
-
-* Purpose:
-* Create a ShiftMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "shiftmap.h"
-* AstShiftMap *astShiftMapId_( int ncoord, const double shift[],
-* const char *options, ... )
-
-* Class Membership:
-* ShiftMap constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astShiftMap constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astShiftMap_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astShiftMap_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astShiftMap_.
-
-* Returned Value:
-* The ID value associated with the new ShiftMap.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstShiftMap *new; /* Pointer to new ShiftMap */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the ShiftMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitShiftMap( NULL, sizeof( AstShiftMap ), !class_init, &class_vtab,
- "ShiftMap", ncoord, shift );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new ShiftMap's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new ShiftMap. */
- return astMakeId( new );
-}
-
-AstShiftMap *astInitShiftMap_( void *mem, size_t size, int init,
- AstShiftMapVtab *vtab, const char *name,
- int ncoord, const double *shift, int *status ) {
-/*
-*+
-* Name:
-* astInitShiftMap
-
-* Purpose:
-* Initialise a ShiftMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "shiftmap.h"
-* AstShiftMap *astInitShiftMap( void *mem, size_t size, int init,
-* AstShiftMapVtab *vtab, const char *name,
-* int ncoord, const double *shift )
-
-* Class Membership:
-* ShiftMap initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new ShiftMap object. It allocates memory (if necessary) to accommodate
-* the ShiftMap plus any additional data associated with the derived class.
-* It then initialises a ShiftMap structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a ShiftMap at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the ShiftMap is to be initialised.
-* This must be of sufficient size to accommodate the ShiftMap data
-* (sizeof(ShiftMap)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the ShiftMap (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the ShiftMap
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the ShiftMap's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new ShiftMap.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-* ncoord
-* The number of coordinate values per point.
-* shift
-* Pointer to an array of shifts, one for each coordinate.
-
-* Returned Value:
-* A pointer to the new ShiftMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstShiftMap *new; /* Pointer to new ShiftMap */
- int axis; /* Axis index */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitShiftMapVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Initialise a Mapping structure (the parent class) as the first component
- within the ShiftMap structure, allocating memory if necessary. Specify that
- the Mapping should be defined in both the forward and inverse directions. */
- new = (AstShiftMap *) astInitMapping( mem, size, 0,
- (AstMappingVtab *) vtab, name,
- ncoord, ncoord, 1, 1 );
-
- if ( astOK ) {
-
-/* Initialise the ShiftMap data. */
-/* ---------------------------- */
-/* Allocate memory to hold the shift for each axis. */
- new->shift = (double *) astMalloc( sizeof(double)*(size_t)ncoord );
-
-/* Check the pointers can be used */
- if( astOK ){
-
-/* Store the shift and scale for each axis. */
- for( axis = 0; axis < ncoord; axis++ ){
- (new->shift)[ axis ] = shift ? shift[ axis ] : AST__BAD;
- }
-
- }
-
-/* If an error occurred, clean up by deleting the new ShiftMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new ShiftMap. */
- return new;
-}
-
-AstShiftMap *astLoadShiftMap_( void *mem, size_t size,
- AstShiftMapVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadShiftMap
-
-* Purpose:
-* Load a ShiftMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "shiftmap.h"
-* AstShiftMap *astLoadShiftMap( void *mem, size_t size,
-* AstShiftMapVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* ShiftMap loader.
-
-* Description:
-* This function is provided to load a new ShiftMap using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* ShiftMap structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a ShiftMap at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the ShiftMap is to be
-* loaded. This must be of sufficient size to accommodate the
-* ShiftMap data (sizeof(ShiftMap)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the ShiftMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the ShiftMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstShiftMap) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new ShiftMap. If this is NULL, a pointer
-* to the (static) virtual function table for the ShiftMap class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "ShiftMap" is used instead.
-
-* Returned Value:
-* A pointer to the new ShiftMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Constants. */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstShiftMap *new; /* Pointer to the new ShiftMap */
- char buff[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- int axis; /* Axis index */
- int ncoord; /* The number of coordinate axes */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this ShiftMap. In this case the
- ShiftMap belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstShiftMap );
- vtab = &class_vtab;
- name = "ShiftMap";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitShiftMapVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built ShiftMap. */
- new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Get the number of axis for the mapping. */
- ncoord = astGetNin( (AstMapping *) new );
-
-/* Allocate memory to hold the shifts. */
- new->shift = (double *) astMalloc( sizeof(double)*(size_t)ncoord );
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "ShiftMap" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* The shifts. */
- for( axis = 0; axis < ncoord; axis++ ){
- (void) sprintf( buff, "sft%d", axis + 1 );
- (new->shift)[ axis ] = astReadDouble( channel, buff, 0.0 );
- }
- }
-
-/* If an error occurred, clean up by deleting the new ShiftMap. */
- if ( !astOK ) new = astDelete( new );
-
-/* Return the new ShiftMap pointer. */
- return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-
-
-
-
diff --git a/ast-5.3-1/shiftmap.h b/ast-5.3-1/shiftmap.h
deleted file mode 100644
index 49f43a5..0000000
--- a/ast-5.3-1/shiftmap.h
+++ /dev/null
@@ -1,290 +0,0 @@
-#if !defined( SHIFTMAP_INCLUDED ) /* Include this file only once */
-#define SHIFTMAP_INCLUDED
-/*
-*+
-* Name:
-* shiftmap.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the ShiftMap class.
-
-* Invocation:
-* #include "shiftmap.h"
-
-* Description:
-* This include file defines the interface to the ShiftMap class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The ShiftMap class implements Mappings which shift each coordinate
-* by a fixed amount.
-
-* Inheritance:
-* The ShiftMap class inherits from the Mapping class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* None.
-
-* Methods Over-Ridden:
-* Public:
-* None.
-*
-* Protected:
-* ClearAttrib
-* Clear an attribute value for a ShiftMap.
-* GetAttrib
-* Get an attribute value for a ShiftMap.
-* SetAttrib
-* Set an attribute value for a ShiftMap.
-* TestAttrib
-* Test if an attribute value has been set for a ShiftMap.
-* astMapMerge
-* Simplify a sequence of Mappings containing a ShiftMap.
-* astTransform
-* Apply a ShiftMap to transform a set of points.
-
-* New Methods Defined:
-* Public:
-* None.
-*
-* Protected:
-* None.
-
-* Other Class Functions:
-* Public:
-* astIsAShiftMap
-* Test class membership.
-* astShiftMap
-* Create a ShiftMap.
-*
-* Protected:
-* astCheckShiftMap
-* Validate class membership.
-* astInitShiftMap
-* Initialise a ShiftMap.
-* astInitShiftMapVtab
-* Initialise the virtual function table for the ShiftMap class.
-* astLoadShiftMap
-* Load a ShiftMap.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstShiftMap
-* ShiftMap object type.
-*
-* Protected:
-* AstShiftMapVtab
-* ShiftMap virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-
-* History:
-* 14-AUG-2003 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* ShiftMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstShiftMap {
-
-/* Attributes inherited from the parent class. */
- AstMapping mapping; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- double *shift; /* Pointer to array of shifts */
-
-} AstShiftMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstShiftMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstMappingVtab mapping_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-
-} AstShiftMapVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstShiftMapGlobals {
- AstShiftMapVtab Class_Vtab;
- int Class_Init;
-} AstShiftMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitShiftMapGlobals_( AstShiftMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(ShiftMap) /* Check class membership */
-astPROTO_ISA(ShiftMap) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstShiftMap *astShiftMap_( int, const double [], const char *, int *, ...);
-#else
-AstShiftMap *astShiftMapId_( int, const double [], const char *, ... )__attribute__((format(printf,3,4)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstShiftMap *astInitShiftMap_( void *, size_t, int, AstShiftMapVtab *,
- const char *, int, const double *, int * );
-
-/* Vtab initialiser. */
-void astInitShiftMapVtab_( AstShiftMapVtab *, const char *, int * );
-
-/* Loader. */
-AstShiftMap *astLoadShiftMap_( void *, size_t, AstShiftMapVtab *,
- const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS) /* Protected */
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckShiftMap(this) astINVOKE_CHECK(ShiftMap,this,0)
-#define astVerifyShiftMap(this) astINVOKE_CHECK(ShiftMap,this,1)
-
-/* Test class membership. */
-#define astIsAShiftMap(this) astINVOKE_ISA(ShiftMap,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astShiftMap astINVOKE(F,astShiftMap_)
-#else
-#define astShiftMap astINVOKE(F,astShiftMapId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define \
-astInitShiftMap(mem,size,init,vtab,name,ncoord,shift) \
-astINVOKE(O,astInitShiftMap_(mem,size,init,vtab,name,ncoord,shift,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitShiftMapVtab(vtab,name) astINVOKE(V,astInitShiftMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadShiftMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadShiftMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckShiftMap to validate ShiftMap pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-#endif
-
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/skyaxis.c b/ast-5.3-1/skyaxis.c
deleted file mode 100644
index b512d36..0000000
--- a/ast-5.3-1/skyaxis.c
+++ /dev/null
@@ -1,4861 +0,0 @@
-/*
-*class++
-* Name:
-* SkyAxis
-
-* Purpose:
-* Store celestial axis information.
-
-* Constructor Function:
-* None.
-
-* Description:
-* The SkyAxis class is used to store information associated with a
-* particular axis of a SkyFrame. It is used internally by the AST
-* library and has no constructor function. You should encounter it
-c only within textual output (e.g. from astWrite).
-f only within textual output (e.g. from AST_WRITE).
-
-* Inheritance:
-* The SkyAxis class inherits from the Axis class.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2008 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: B.S. Berry (Starlink)
-
-* History:
-* 1-MAR-1996 (RFWS):
-* Original version.
-* 19-APR-1996 (RFWS):
-* Tidied up, etc.
-* 8-MAY-1996 (RFWS):
-* Remove leading minus sign from formatted HMS string if all
-* fields are zero.
-* 9-MAY-1996 (RFWS):
-* Fixed bug in rounding of fractional parts of HMS strings and
-* improved algorithm to cope gracefully with requests for
-* excessive numbers of decimal places.
-* 13-MAY-1996 (RFWS):
-* Over-ride the astGetAxisDirection method so that a SkyAxis
-* with the AsTime attribute set is displayed in reverse by
-* default.
-* 17-MAY-1996 (RFWS):
-* Change AxisNorm to return a bad coordinate value if a bad
-* value is given.
-* 11-SEP-1996 (RFWS):
-* Added AxisGap and DHmsGap (written by DSB).
-* 26-FEB-1998 (RFWS):
-* Over-ride the astAxisUnformat method.
-* 6-MAR-1998 (RFWS):
-* Add formatting options to omit degrees/hours field and change
-* all affected functions.
-* 10-AUG-2000 (DSB):
-* Fixed bug in DHmsFormat which could cause (for instance) a formatted
-* galactic longitude value of zero to be formated as "-0.-0".
-* 29-AUG-2001 (DSB):
-* Added AxisDistance and AxisOffset.
-* 10-OCT-2002 (DSB):
-* Over-ride the astGetAxisTop and astGetAxisBottom methods so that a
-* SkyAxis with the IsLatitude attribute set is legal between plus
-* and minus 90 degrees.
-* 8-JAN-2003 (DSB):
-* - Changed private InitVtab method to protected astInitSkyAxisVtab
-* method.
-* - Modify DHmsGap to avoid decimal gap "4" which produces things
-* like "0.0 0.4 0.8 1.2 1.6 2.0" ("4" replaced by "5").
-* 24-JAN-2004 (DSB):
-* o Added AxisFields.
-* o Added 'g' format character which produces graphical separators.
-* o Modified AxisAbbrev to use AxisFields so that delimiters which
-* include digits can be recognised.
-* 13-SEP-20904 (DSB):
-* Modify AxisFields to correct usage of the "p" pointer in the
-* case that the first and only field begins with a minus sign.
-* 15-SEP-2004 (DSB):
-* Modified ParseDHmsFormat so that the number of decimal places
-* is specified by Digits if the given format string include a ".*"
-* precision (e.g. "dms.*").
-* 18-MAR-2005 (DSB):
-* Invoke methods inherited from parent Axis class if the format
-* string starts with a '%' character.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 30-JUN-2006 (DSB):
-* Guard against a null "str1" value in AxisAbbrev.
-* 7-AUG-2007 (DSB):
-* Added CentreZero attribute.
-* 1-FEB-2008 (DSB):
-* Modified AxisUnformat to allow the final numerical field to include
-* an exponent.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to the header
- files that define class interfaces that they should make "protected"
- symbols available. */
-#define astCLASS SkyAxis
-
-/* Header files. */
-/* ============= */
-#include "ast_err.h" /* Error code definitions */
-
-/* Interface definitions. */
-/* ---------------------- */
-#include "pal.h" /* SLALIB interface */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "pointset.h" /* Sets of points (for AST__BAD) */
-#include "axis.h" /* Axis (parent) class interface */
-#include "skyaxis.h" /* Interface definition for this class */
-#include "globals.h" /* Thread-safe global data access */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <limits.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static const char *(* parent_getaxislabel)( AstAxis *, int * );
-static const char *(* parent_getaxissymbol)( AstAxis *, int * );
-static const char *(* parent_getaxisunit)( AstAxis *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static int (*parent_getaxisdirection)( AstAxis *this, int * );
-static void (* parent_axisoverlay)( AstAxis *, AstAxis *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static double (*parent_getaxisbottom)( AstAxis *this, int * );
-static double (*parent_getaxistop)( AstAxis *this, int * );
-static const char *(* parent_axisformat)( AstAxis *, double, int * );
-static double (*parent_axisgap)( AstAxis *, double, int *, int * );
-static int (*parent_axisunformat)( AstAxis *, const char *, double *, int * );
-static int (*parent_axisfields)( AstAxis *, const char *, const char *, int, char **, int *, double *, int * );
-
-/* Factors for converting between hours, degrees and radians. */
-static double hr2rad;
-static double deg2rad;
-static double pi;
-static double piby2;
-
-/* Strings used as field delimiters when producing graphical labels.
- These strings include escape sequences which the Plot class interprets
- to produce super-scripts, suub-scripts, etc.*/
-static char *gh_delim = "%-%^50+%s70+h%+"; /* Hours separator */
-static char *gm_delim = "%-%^50+%s70+m%+"; /* Min.s separator */
-static char *gs_delim = "%-%^50+%s70+s%+"; /* Sec.s separator */
-static char *gd_delim = "%-%^53+%s60+o%+"; /* Deg.s separator */
-static char *gam_delim = "%-%^20+%s85+'%+"; /* Arc-min.s separator */
-static char *gas_delim = "%-%^20+%s85+\"%+"; /* Arc-sec.s separator */
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->DHmsFormat_Buff[ 0 ] = 0; \
- globals->DHmsUnit_Buff[ 0 ] = 0; \
- globals->GetAttrib_Buff[ 0 ] = 0; \
- globals->GetAxisFormat_Buff[ 0 ] = 0; \
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(SkyAxis)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(SkyAxis,Class_Init)
-#define class_vtab astGLOBAL(SkyAxis,Class_Vtab)
-#define dhmsformat_buff astGLOBAL(SkyAxis,DHmsFormat_Buff)
-#define dhmsunit_buff astGLOBAL(SkyAxis,DHmsUnit_Buff)
-#define getattrib_buff astGLOBAL(SkyAxis,GetAttrib_Buff)
-#define getaxisformat_buff astGLOBAL(SkyAxis,GetAxisFormat_Buff)
-
-
-
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX2 pthread_mutex_lock( &mutex2 );
-#define UNLOCK_MUTEX2 pthread_mutex_unlock( &mutex2 );
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-static char dhmsformat_buff[ AST__SKYAXIS_DHMSFORMAT_BUFF_LEN + 1 ];
-static char dhmsunit_buff[ AST__SKYAXIS_DHMSUNIT_BUFF_LEN + 1 ];
-static char getattrib_buff[ AST__SKYAXIS_GETATTRIB_BUFF_LEN + 1 ];
-static char getaxisformat_buff[ AST__SKYAXIS_GETAXISFORMAT_BUFF_LEN + 1 ];
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstSkyAxisVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-
-#endif
-
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstSkyAxis *astSkyAxisId_( const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static const char *AxisAbbrev( AstAxis *, const char *, const char *, const char *, int * );
-static const char *AxisFormat( AstAxis *, double, int * );
-static int GetObjSize( AstObject *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static const char *GetAxisFormat( AstAxis *, int * );
-static const char *GetAxisLabel( AstAxis *, int * );
-static const char *GetAxisSymbol( AstAxis *, int * );
-static const char *GetAxisUnit( AstAxis *, int * );
-static const char *DHmsFormat( const char *, int, double, int * );
-static const char *DHmsUnit( const char *, int, int, int * );
-static double AxisGap( AstAxis *, double, int *, int * );
-static double AxisDistance( AstAxis *, double, double, int * );
-static double AxisOffset( AstAxis *, double, double, int * );
-static double DHmsGap( const char *, int, double, int *, int * );
-static double GetAxisTop( AstAxis *, int * );
-static double GetAxisBottom( AstAxis *, int * );
-static int AxisIn( AstAxis *, double, double, double, int, int * );
-static int AxisFields( AstAxis *, const char *, const char *, int, char **, int *, double *, int * );
-static int AxisUnformat( AstAxis *, const char *, double *, int * );
-static int GetAxisAsTime( AstSkyAxis *, int * );
-static int GetAxisDirection( AstAxis *, int * );
-static int GetAxisIsLatitude( AstSkyAxis *, int * );
-static int GetAxisCentreZero( AstSkyAxis *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestAxisAsTime( AstSkyAxis *, int * );
-static int TestAxisFormat( AstAxis *, int * );
-static int TestAxisIsLatitude( AstSkyAxis *, int * );
-static int TestAxisCentreZero( AstSkyAxis *, int * );
-static void AxisNorm( AstAxis *, double *, int * );
-static void AxisOverlay( AstAxis *, AstAxis *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void ClearAxisAsTime( AstSkyAxis *, int * );
-static void ClearAxisFormat( AstAxis *, int * );
-static void ClearAxisIsLatitude( AstSkyAxis *, int * );
-static void ClearAxisCentreZero( AstSkyAxis *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void ParseDHmsFormat( const char *, int, char *, int *, int *, int *, int *, int *, int *, int *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetAxisAsTime( AstSkyAxis *, int, int * );
-static void SetAxisFormat( AstAxis *, const char *, int * );
-static void SetAxisIsLatitude( AstSkyAxis *, int, int * );
-static void SetAxisCentreZero( AstSkyAxis *, int, int * );
-
-/* Member functions. */
-/* ================= */
-static const char *AxisAbbrev( AstAxis *this_axis, const char *fmt,
- const char *str1, const char *str2, int *status ) {
-/*
-* Name:
-* AxisAbbrev
-
-* Purpose:
-* Abbreviate a formatted SkyAxis value by skipping leading fields.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* const char *AxisAbbrev( AstAxis *this, const char *fmt,
-* const char *str1, const char *str2 )
-
-* Class Membership:
-* SkyAxis member function (over-rides the protected astAxisAbbrev
-* method inherited from the Axis class).
-
-* Description:
-* This function compares two SkyAxis values that have been
-* formatted with the supplied format specifier (using astAxisFormat)
-* and determines if they have any redundant leading fields (i.e.
-* leading fields in common which can be suppressed when tabulating
-* the values or plotting them on the axis of a graph).
-
-* Parameters:
-* this
-* Pointer to the SkyAxis.
-* fmt
-* Pointer to a constant null-terminated string containing the
-* format specifier used to format the two values.
-* str1
-* Pointer to a constant null-terminated string containing the
-* first formatted value. If this is null, the returned pointer
-* points to the start of the final field in str2.
-* str2
-* Pointer to a constant null-terminated string containing the
-* second formatted value.
-
-* Returned Value:
-* A pointer into the "str2" string which locates the first
-* character in the first field that differs between the two
-* formatted values.
-*
-* If the two values have no leading fields in common, the returned
-* value will point at the start of string "str2". If the two
-* values are equal, it will point at the terminating null at the
-* end of this string.
-
-* Notes:
-* - A pointer to the start of "str2" will be returned if this
-* function is invoked with the global error status set, or if it
-* should fail for any reason.
-*/
-
-/* Local Variables: */
- char *fld1[ 3 ]; /* Pointers to start of each field in str1 */
- char *fld2[ 3 ]; /* Pointers to start of each field in str2 */
- const char *result; /* Result pointer to return */
- int i; /* Loop counter for string fields */
- int nf1; /* Number of fields found in str1 */
- int nf2; /* Number of fields found in str2 */
- int nc1[ 3 ]; /* Length of each field in str1 */
- int nc2[ 3 ]; /* Length of each field in str2 */
-
-/* Initialise. */
- result = str2;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Find the fields within the "str2" string. */
- nf2 = astAxisFields( this_axis, fmt, str2, 3, fld2, nc2, NULL );
-
-/* If "str1" was not supplied, return a pointer to the final field in
- "str2". */
- if( !str1 ) {
- result = fld2[ nf2 - 1 ];
-
-/* Otherwise, find the fields within the "str1" string. */
- } else {
- nf1 = astAxisFields( this_axis, fmt, str1, 3, fld1, nc1, NULL );
-
-/* Loop to inspect corresponding fields from each string. */
- for ( i = 0; i < nf1 && i < nf2; i++ ) {
-
-/* If the fields are different, break out of the loop. */
- if ( nc1[ i ] != nc2[ i ] ||
- strncmp( fld1[ i ], fld2[ i ], nc1[ i ] ) ) {
- break;
-
-/* Otherwise, move the returned poitner on to point to the start of the
- next field in str2. If we are already at the last field in str2,
- return a pointer to the terminating null. */
- } else {
- if ( i + 1 < nf2 ) {
- result = fld2[ i + 1 ];
- } else {
- result = strchr( str2, '\0' );
- }
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static double AxisDistance( AstAxis *this_axis, double v1, double v2, int *status ) {
-/*
-* Name:
-* AxisDistance
-
-* Purpose:
-* Find the distance between two axis values.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* AxisDistance( AstAxis *this, double v1, double v2 )
-
-* Class Membership:
-* SkyAxis member function (over-rides the protected astAxisDistance
-* method inherited from the Axis class).
-
-* Description:
-* This function returns a signed value representing the axis increment
-* from axis value v1 to axis value v2.
-*
-* For a SkyAxis, the angular difference between the two supplied axis
-* values is normalized into the range +PI to -PI.
-
-* Parameters:
-* this
-* Pointer to the SkyAxis.
-* v1
-* The first axis value
-* v2
-* The second axis value
-
-* Returned Value:
-* The axis increment from v1 to v2.
-
-* Notes:
-* - A value of AST__BAD is returned if either axis value is AST__BAD.
-* - A value of AST__BAD will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- double result; /* Returned gap size */
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Check both axis values are OK, and form the returned increment,
- normalizing it into the range +PI to -PI. */
- if( v1 != AST__BAD && v2 != AST__BAD ) result = palSlaDrange( v2 - v1 );
-
-/* Return the result. */
- return result;
-}
-
-static int AxisFields( AstAxis *this_axis, const char *fmt, const char *str,
- int maxfld, char **fields, int *nc, double *val, int *status ) {
-/*
-* Name:
-* AxisFields
-
-* Purpose:
-* Identify numerical fields within a formatted SkyAxis value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* int AxisFields( AstAxis *this_axis, const char *fmt, const char *str,
-* int maxfld, char **fields, int *nc, double *val )
-
-* Class Membership:
-* SkyAxis member function (over-rides the protected astAxisFields
-* method inherited from the Axis class).
-
-* Description:
-* This function identifies the numerical fields within a SkyAxis value
-* that have been formatted using astAxisFormat. It assumes that the
-* value was formatted using the supplied format string. It also
-* returns the equivalent floating point value in radians.
-
-* Parameters:
-* this
-* Pointer to the SkyAxis.
-* fmt
-* Pointer to a constant null-terminated string containing the
-* format used when creating "str".
-* str
-* Pointer to a constant null-terminated string containing the
-* formatted value.
-* maxfld
-* The maximum number of fields to identify within "str".
-* fields
-* A pointer to an array of at least "maxfld" character pointers.
-* Each element is returned holding a pointer to the start of the
-* corresponding field in "str" (in the order in which they occur
-* within "str"), or NULL if no corresponding field can be found.
-* nc
-* A pointer to an array of at least "maxfld" integers. Each
-* element is returned holding the number of characters in the
-* corresponding field, or zero if no corresponding field can be
-* found.
-* val
-* Pointer to a location at which to store the radians value
-* equivalent to the returned field values. If this is NULL,
-* it is ignored.
-
-* Returned Value:
-* The number of fields succesfully identified and returned.
-
-* Notes:
-* - Leading and trailing spaces are ignored.
-* - If the formatted value is not consistent with the supplied format
-* string, then a value of zero will be returned, "fields" will be
-* returned holding NULLs, "nc" will be returned holding zeros, and
-* "val" is returned holding VAL__BAD.
-* - Fields are counted from the start of the formatted string. If the
-* string contains more than "maxfld" fields, then trailing fields are
-* ignored.
-* - If this function is invoked with the global error status set, or
-* if it should fail for any reason, then a value of zero will be returned
-* as the function value, and "fields", "nc" and "val" will be returned
-* holding their supplied values
-
-*/
-
-/* Local Variables: */
- char sep; /* Field separator character */
- char tbuf[2]; /* Buffer for terminator string */
- char *p; /* Pointer to next character */
- char *t; /* Pointer to start of terminator string */
- char *term; /* Pointer to terminator string */
- double dval; /* Value read from string */
- double value; /* Equivalent radians value */
- int as_time; /* Format the value as a time? */
- int dh; /* Hours field required? */
- int ifld; /* Field index */
- int lead_zero; /* Add leading zeros? */
- int min; /* Minutes field required? */
- int ndp; /* Number of decimal places */
- int ok; /* Value and format consistent? */
- int plus; /* Add leading plus sign? */
- int result; /* Result fields count to return */
- int sec; /* Seconds field required? */
- int sign; /* The sign of the radians value */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* If the format string starts with a "%" call the method inherited from
- the parent Axis class. */
- if( fmt[ 0 ] == '%' ) {
- return (*parent_axisfields)( this_axis, fmt, str, maxfld, fields, nc,
- val, status );
- }
-
-/* Initialise. */
- result = 0;
- for( ifld = 0; ifld < maxfld; ifld++ ) {
- fields[ ifld ] = NULL;
- nc[ ifld ] = 0;
- }
- if( val ) *val = AST__BAD;
-
-/* Parse the format specifier. */
- ParseDHmsFormat( fmt, astGetAxisDigits( this_axis ), &sep, &plus, &lead_zero,
- &as_time, &dh, &min, &sec, &ndp, status );
-
-/* Only proceed if the format was parsed succesfully, and the supplied arrays
- are not of zero size. */
- if( astOK && maxfld > 0 ) {
-
-/* Indicate that we have not yet found any inconsistency between the
- formatted value and the forat string. */
- ok = 1;
-
-/* Variable "p" points to the next character to be read from the
- formatted string. Initialise it to point to the first non-space
- character. */
- p = (char *) str;
- while( *p == ' ' ) p++;
-
-/* Note the start of the first field. */
- fields[ 0 ] = p;
-
-/* If the first non-blank character is a + or - sign, skip it and note
- the sign of the final value. */
- sign = 1;
- if( *p == '-' ) {
- sign = -1;
- p++;
- } else if( *p == '+' ) {
- p++;
- }
-
-/* Initialise the equivalent radian value. */
- value = 0.0;
-
-/* If the format string specifies a degrees or hours field, it should be
- the first field. */
- if( dh ) {
-
-/* If the format indicates that fields are separated by characters, or if
- there is a minutes or seconds field, then the first field should end with
- the appropriate separator. In these cases locate the terminator,and
- store the length of the first field. */
- if( sep == 'l' || sep == 'g' || min || sec ) {
-
- if( sep == 'l' ) {
- term = as_time ? "h" : "d";
-
- } else if( sep == 'g' ) {
- term = as_time ? gh_delim : gd_delim;
-
- } else {
- tbuf[ 0 ] = sep;
- tbuf[ 1 ] = '\0';
- term = tbuf;
- }
-
- t = strstr( p, term );
- if( t ) {
- nc[ 0 ] = t - fields[ 0 ];
- } else {
- ok = 0;
- }
-
-/* Move on to the first character following the terminator. */
- p = t + strlen( term );
-
-/* In all other cases, the first field is the only field and is not
- terminated. Note its length (ignoring trailing spaces). Move the
- pointer on by the length of the field, remembering that any leading
- minus sign has already been skipped. */
- } else {
- nc[ 0 ] = astChrLen( fields[ 0 ] );
- p += nc[ result ];
- if( sign == -1 ) p--;
- }
-
-/* Read a numerical value from the first field. */
- if( astSscanf( fields[ 0 ], "%lg", &dval ) ) {
- value = fabs( dval );
- } else {
- ok = 0;
- }
-
-/* Increment then number of returned fields if OK */
- if( ok ) result++;
-
- }
-
-/* If the format string specifies a minutes field, it should be the next
- field. */
- if( min && ok ) {
-
-/* Note the start of the next field. */
- fields[ result ] = p;
-
-/* If the format indicates that fields are separated by characters, or if
- there is a seconds field, then this field should end with the appropriate
- separator. In these cases locate the terminator,and store the length of
- this field. */
- if( sep == 'l' || sep == 'g' || sec ) {
- if( sep == 'l' ) {
- term = "m";
-
- } else if( sep == 'g' ) {
- term = as_time ? gm_delim : gam_delim;
-
- } else {
- tbuf[ 0 ] = sep;
- tbuf[ 1 ] = '\0';
- term = tbuf;
- }
-
- t = strstr( p, term );
- if( t ) {
- nc[ result ] = t - fields[ result ];
- } else {
- ok = 0;
- }
-
-/* Move on to the first character following the terminator. */
- p = t + strlen( term );
-
-/* In all other cases, this field is not terminated. Note its length
- (ignoring trailing spaces). */
- } else {
- nc[ result ] = astChrLen( fields[ result ] );
- p += nc[ result ];
- }
-
-/* Read a numerical value from this field. */
- if( astSscanf( fields[ result ], "%lg", &dval ) ) {
- value += dval/60.0;
- } else {
- ok = 0;
- }
-
-/* Increment then number of returned fields if OK */
- if( ok ) result++;
-
- }
-
-/* If the format string specifies a seconds field, it should be the next
- field. */
- if( sec && ok ) {
-
-/* Note the start of the next field. */
- fields[ result ] = p;
-
-/* If the format indicates that fields are separated by characters, then this
- field should end with the appropriate separator. In this case locate the
- terminator,and store the length of this field. */
- if( sep == 'l' || sep == 'g' ) {
- if( sep == 'l' ) {
- term = "s";
- } else {
- term = as_time ? gs_delim : gas_delim;
- }
-
- t = strstr( p, term );
- if( t ) {
- nc[ result ] = t - fields[ result ];
- } else {
- ok = 0;
- }
-
-/* Move on to the first character following the terminator. */
- p = t + strlen( term );
-
-/* In all other cases, this field is not terminated. Note its length
- (ignoring trailing spaces). */
- } else {
- nc[ result ] = astChrLen( fields[ result ] );
- p += nc[ result ];
- }
-
-/* Read a numerical value from this field. */
- if( astSscanf( fields[ result ], "%lg", &dval ) ) {
- value += dval/3600.0;
- } else {
- ok = 0;
- }
-
-/* Increment then number of returned fields if OK */
- if( ok ) result++;
-
- }
-
-/* Check that nothing is left.*/
- if( astChrLen( p ) > 0 ) ok = 0;
-
-/* If OK, convert the axis value to radians. */
- if( ok ) {
- if( val ) {
- *val = sign*value*( as_time ? hr2rad : deg2rad );
- }
-
-/* Otherwise, return zero. */
- } else {
- result = 0;
- for( ifld = 0; ifld < maxfld; ifld++ ) {
- fields[ ifld ] = NULL;
- nc[ ifld ] = 0;
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *AxisFormat( AstAxis *this_axis, double value, int *status ) {
-/*
-* Name:
-* AxisFormat
-
-* Purpose:
-* Format a coordinate value for a SkyAxis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* const char *AxisFormat( AstAxis *this, double value, int *status )
-
-* Class Membership:
-* SkyAxis member function (over-rides the astAxisFormat method inherited
-* from the Axis class).
-
-* Description:
-* This function returns a pointer to a string containing the formatted
-* (character) version of a coordinate value for a SkyAxis. The formatting
-* applied is that specified by a previous invocation of the
-* astSetAxisFormat method. A suitable default format is applied if
-* necessary.
-
-* Parameters:
-* this
-* Pointer to the SkyAxis.
-* value
-* The coordinate value to be formatted (in radians).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a null-terminated string containing the formatted value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated within
-* the SkyAxis object, or at static memory. The contents of the string may
-* be over-written or the pointer may become invalid following a further
-* invocation of the same function or deletion of the SkyAxis. A copy of the
-* string should therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSkyAxis *this; /* Pointer to the SkyAxis structure */
- const char *fmt; /* Pointer to format specifier */
- const char *result; /* Pointer to result string */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise. */
- result = NULL;
-
-/* Obtain a pointer to the SkyAxis structure. */
- this = (AstSkyAxis *) this_axis;
-
-/* Obtain a pointer to the format specifier to be used. Note we use a private
- member function to obtain this (not a method) in case derived classes have
- extended the syntax of this string. */
- fmt = GetAxisFormat( this_axis, status );
-
-/* If the format string starts with a percent, use the AxisFormat method
- inherited from the parent Axis class. Otherwise, format using the
- syntax of this class. */
- if ( astOK ) {
- if( fmt[ 0 ] == '%' ) {
- result = (*parent_axisformat)( this_axis, value, status );
- } else {
- result = DHmsFormat( fmt, astGetAxisDigits( this ), value, status );
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static double AxisGap( AstAxis *this_axis, double gap, int *ntick, int *status ) {
-/*
-* Name:
-* AxisGap
-
-* Purpose:
-* Find a "nice" gap for tabulating SkyAxis values.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* double AxisGap( AstAxis *this, double gap, int *ntick, int *status )
-
-* Class Membership:
-* SkyAxis member function (over-rides the protected astAxisGap
-* method inherited from the Axis class).
-
-* Description:
-* This function returns a gap size in radians which produces a
-* nicely spaced series of formatted SkyAxis values, the returned
-* gap size being as close as possible to the supplied target gap
-* size. It also returns a convenient number of divisions into
-* which the gap can be divided.
-
-* Parameters:
-* this
-* Pointer to the SkyAxis.
-* gap
-* The target gap size.
-* ntick
-* Address of an int in which to return a convenient number of
-* divisions into which the gap can be divided.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The nice gap size.
-
-* Notes:
-* - The returned gap size is influenced by the format string
-* specified for the SkyAxis by a previous invocation of the
-* astSetAxisFormat method. A suitable default format is used if
-* necessary.
-* - A value of zero is returned if the supplied gap size is zero.
-* - A negative gap size is returned if the supplied gap size is negative.
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstSkyAxis *this; /* Pointer to the SkyAxis structure */
- const char *fmt; /* Pointer to Format string */
- double result; /* Returned gap size */
-
-/* Initialise. */
- result = 0.0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the SkyAxis structure. */
- this = (AstSkyAxis *) this_axis;
-
-/* Obtain a pointer to the format string to be used. Note we use a
- private member function to obtain this (not a method) in case
- derived classes have extended the syntax of this string. */
- fmt = GetAxisFormat( this_axis, status );
-
-/* Obtain the closest "nice" gap size. */
- if ( astOK ) result = DHmsGap( fmt, astGetAxisDigits( this ), gap, ntick, status );
-
-/* If the format string starts with a percent, use the AxisGap method
- inherited from the parent Axis class. Otherwise, use the method
- provided by this class. */
- if ( astOK ) {
- if( fmt[ 0 ] == '%' ) {
- result = (*parent_axisgap)( this_axis, gap, ntick, status );
- } else {
- result = DHmsGap( fmt, astGetAxisDigits( this ), gap, ntick, status );
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static int AxisIn( AstAxis *this, double lo, double hi, double val, int closed, int *status ){
-/*
-* Name:
-* AxisIn
-
-* Purpose:
-* Test if an axis value lies within a given interval.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* int AxisIn( AstAxis *this, double lo, double hi, double val, int closed, int *status )
-
-* Class Membership:
-* SkyAxis member function (over-rides the astAxisIn method inherited
-* from the Axis class).
-
-* Description:
-* This function returns non-zero if a given axis values lies within a
-* given axis interval.
-*
-* The SkyAxis implementation of this method treats the supplied
-* numerical values as non-cyclic (e.g. lo=10, hi = 350 implies that
-* val = 180 is inside and zero is outside: lo = 10, hi = 400 would imply
-* that all angles are inside: lo = -10, hi = 10 would imply that 180 is
-* outside and zero is inside). But when testing a supplied value, adding
-* or subtracting multiples of 2.PI from the supplied value will make no
-* difference to whether the point is inside or outside).
-
-* Parameters:
-* this
-* Pointer to the Axis.
-* lo
-* The lower axis limit of the interval.
-* hi
-* The upper axis limit of the interval.
-* val
-* The axis value to be tested.
-* closed
-* If non-zero, then the lo and hi axis values are themselves
-* considered to be within the interval. Otherwise they are outside.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the test value is inside the interval.
-
-*/
-
-/* For speed, omit the astOK check since no pointers are being used. */
-
-/* Deal with closed intervals. */
- if( closed ) {
-
-/* If the supplied value is greater than the upper limit, subtract 2.PI until
- it is not. */
- while( val > hi ) val -= 2*pi;
-
-/* If the value is now less than the lower limit, add 2.PI until it is not. */
- while( val < lo ) val += 2*pi;
-
-/* The axis value is in the range if its numerical value is less than or
- equal to the end value. */
- return ( val <= hi );
-
-/* Now deal with open intervals. */
- } else {
-
-/* If the supplied value is greater than or equal to the upper limit, subtract
- 2.PI until it is not. */
- while( val >= hi ) val -= 2*pi;
-
-/* If the value is now less than or equal to the lower limit, add 2.PI until
- it is not. */
- while( val <= lo ) val += 2*pi;
-
-/* The axis value is in the range if its numerical value is less than the
- end value. */
- return ( val < hi );
- }
-}
-
-static void AxisNorm( AstAxis *this_axis, double *value, int *status ) {
-/*
-* Name:
-* AxisNorm
-
-* Purpose:
-* Normalise a SkyAxis coordinate value.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* void AxisNorm( AstAxis *this, double *value, int *status )
-
-* Class Membership:
-* SkyAxis member function (over-rides the astAxisNorm method inherited
-* from the Axis class).
-
-* Description:
-* This function converts a SkyAxis coordinate value which might
-* potentially be unsuitable for display to a user (for instance,
-* may lie outside the expected range of values) into an acceptable
-* alternative value suitable for display.
-*
-* For a SkyAxis that is a longitude axis, values are wrapped into
-* the range zero to 2*pi, while for a latitude axis, they are
-* wrapped into the range -pi to +pi. The astAxisCentreZero method
-* is used to determine which algorithm to apply.
-
-* Parameters:
-* this
-* Pointer to the SkyAxis.
-* value
-* Pointer to the coordinate value to be normalised, which will
-* be modified in place.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstSkyAxis *this; /* Pointer to the SkyAxis structure */
- int centrezero; /* SkyAxis range centred on zero? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyAxis structure. */
- this = (AstSkyAxis *) this_axis;
-
-/* If the coordinate value is bad, then return it unchanged. Otherwise,
- determine if the SkyAxis range is centred on zero or PI. */
- if ( *value != AST__BAD ) {
- centrezero = astGetAxisCentreZero( this );
-
-/* Wrap the value into the appropriate range. */
- if ( astOK ) *value = centrezero ? palSlaDrange( *value ) :
- palSlaDranrm( *value );
- }
-}
-
-static double AxisOffset( AstAxis *this_axis, double v1, double dist, int *status ) {
-/*
-*
-* Name:
-* AxisOffset
-
-* Purpose:
-* Add an increment onto a supplied axis value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* AxisOffset( AstSkyAxis *this, double v1, double dist )
-
-* Class Membership:
-* SkyAxis member function (over-rides the protected astAxisOffset
-* method inherited from the Axis class).
-
-* Description:
-* This function returns an axis value formed by adding a signed axis
-* increment onto a supplied axis value.
-*
-* For a SkyFrame, the result is normalized into the correct angular
-* range (+PI to -PI for latitude axes, and 0 to 2*PI for longitude axes).
-
-* Parameters:
-* this
-* Pointer to the SkyAxis.
-* v1
-* The supplied axis value
-* dist
-* The axis increment
-
-* Returned Value:
-* The axis value which is the specified increment away from v1.
-
-* Notes:
-* - A value of AST__BAD is returned if either axis value is AST__BAD.
-* - A value of AST__BAD will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- double result; /* Returned gap size */
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Check both axis values are OK, and form the returned axis value. */
- if( v1 != AST__BAD && dist != AST__BAD ) {
- result = v1 + dist;
- AxisNorm( this_axis, &result, status );
- }
-
-/* Return the result. */
- return result;
-}
-
-static void AxisOverlay( AstAxis *template_axis, AstAxis *result, int *status ) {
-/*
-* Name:
-* AxisOverlay
-
-* Purpose:
-* Overlay the attributes of a template SkyAxis on to another Axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* void AxisOverlay( AstAxis *template, AstAxis *result, int *status )
-
-* Class Membership:
-* SkyAxis member function (over-rides the astAxisOverlay method inherited
-* from the Axis class).
-
-* Description:
-* This function overlays attributes of a SkyAxis (the "template") on to
-* another Axis, so as to over-ride selected attributes of that second
-* Axis. Normally only those attributes which have been specifically set
-* in the template will be transferred. This implements a form of
-* defaulting, in which an Axis acquires attributes from the template, but
-* retains its original attributes (as the default) if new values have not
-* previously been explicitly set in the template.
-
-* Parameters:
-* template
-* Pointer to the template SkyAxis, for which values should have been
-* explicitly set for any attribute which is to be transferred.
-* result
-* Pointer to the Axis which is to receive the new attribute values.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-*/
-
-/* Local Variables: */
- AstSkyAxis *template; /* Pointer to the SkyAxis structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the template SkyAxis structure. */
- template = (AstSkyAxis *) template_axis;
-
-/* Invoke the parent astAstOverlay method to overlay inherited attributes. */
- (*parent_axisoverlay)( template_axis, result, status );
-
-/* Test if the "result" Axis is a SkyAxis (if not, it cannot acquire any
- further attributes, so there is nothing more to do). */
- if ( astIsASkyAxis( result ) && astOK ) {
-
-/* Overlay the Format attribute if it is set in the template. Note that we
- use private member functions (not methods) to access the Format value, since
- derived classes may extend the syntax of this string and we should not
- overlay a string whose syntax cannot be interpreted by the result Axis. */
- if ( TestAxisFormat( template_axis, status ) ) {
- SetAxisFormat( result, GetAxisFormat( template_axis, status ), status );
- }
-
-/* Overlay the AsTime attribute in the same way, but this time using methods
- to access it. */
- if ( astTestAxisAsTime( template ) ) {
- astSetAxisAsTime( result, astGetAxisAsTime( template ) );
- }
-
-/* Also overlay the IsLatitude attribute. */
- if ( astTestAxisIsLatitude( template ) ) {
- astSetAxisIsLatitude( result, astGetAxisIsLatitude( template ) );
- }
-
-/* Also overlay the CentreZero attribute. */
- if ( astTestAxisCentreZero( template ) ) {
- astSetAxisCentreZero( result, astGetAxisCentreZero( template ) );
- }
- }
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a SkyAxis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* SkyAxis member function (over-rides the astClearAttrib protected
-* method inherited from the Axis class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* SkyAxis, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the SkyAxis.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstSkyAxis *this; /* Pointer to the SkyAxis structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyAxis structure. */
- this = (AstSkyAxis *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* AsTime. */
-/* ------- */
- if ( !strcmp( attrib, "astime" ) ) {
- astClearAxisAsTime( this );
-
-/* IsLatitude. */
-/* ----------- */
- } else if ( !strcmp( attrib, "islatitude" ) ) {
- astClearAxisIsLatitude( this );
-
-/* CentreZero. */
-/* ----------- */
- } else if ( !strcmp( attrib, "centrezero" ) ) {
- astClearAxisCentreZero( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static void ClearAxisFormat( AstAxis *this_axis, int *status ) {
-/*
-* Name:
-* ClearAxisFormat
-
-* Purpose:
-* Clear the Format attribute for a SkyAxis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* void ClearAxisFormat( AstAxis *this, int *status )
-
-* Class Membership:
-* SkyAxis member function (over-rides the astClearAxisFormat method
-* inherited from the Axis class).
-
-* Description:
-* This function clears the Format attribute of a SkyAxis, as if no value
-* had ever been set for it.
-
-* Parameters:
-* this
-* Pointer to the SkyAxis.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-*/
-
-/* Local Variables: */
- AstSkyAxis *this; /* Pointer to the SkyAxis structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyAxis structure. */
- this = (AstSkyAxis *) this_axis;
-
-/* Free any memory allocated to hold the Format string and reset the string
- pointer to NULL. */
- this->skyformat = astFree( this->skyformat );
-}
-
-static const char *DHmsFormat( const char *fmt, int digs, double value, int *status ) {
-/*
-* Name:
-* DHmsFormat
-
-* Purpose:
-* Format a value representing degrees/hours, minutes and seconds.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* const char *DHmsFormat( const char *fmt, int digs, double value, int *status )
-
-* Class Membership:
-* SkyAxis member function.
-
-* Description:
-* This function formats a value representing an angle in radians
-* into a text string giving degrees/hours, minutes and seconds
-* according to a format specifier supplied. See the "Format
-* Specifier" section for details of the formats available.
-
-* Parameters:
-* fmt
-* Pointer to a null terminated string containing the format
-* specifier.
-* digs
-* The default number of digits of precision to use. This is used
-* if the given format specifier indicates the number of decimal
-* places to use with the string ".*". In this case, the number of
-* decimal places produced will be chosen so that the total number
-* of digits of precision is equal to "digs".
-* double
-* The value to be formatted (in radians).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a null terminated character string containing the
-* formatted value.
-
-* Format Specifier:
-* The format specifier supplied via the "fmt" parameter should
-* contain zero or more of the following characters to specify the
-* format required. These characters may occur in any order, but
-* the following is recommended for clarity:
-*
-* '+'
-* Indicates that a plus sign should be prefixed to positive
-* values. By default, no plus sign is used.
-* 'z'
-* Indicates that leading zeros should be prefixed to the value
-* so that the first field is always of constant width, as would
-* be required in a fixed-width table. (Leading zeros are always
-* prefixed to any fields that follow.) By default, no leading
-* zeros are added.
-* 'i'
-* Use the standard ISO field separator (a colon) between
-* fields. This is the default behaviour.
-* 'b'
-* Use a blank to separate fields.
-* 'l'
-* Use a letter ('d'/'h', 'm' or 's' as appropriate) to separate
-* and identify fields.
-* 'g'
-* As 'l', but escape sequences are included in the returned
-* character string which cause the separators ('h', 'd', 'm', etc)
-* to be drawn as small super-scripts when plotted by the astText
-* or astGrid.
-* 'd'
-* Express the value as an angle and include a degrees
-* field. Expressing the value as an angle is also the default
-* behaviour if neither 'h' nor 't' is given, and expressing it
-* in degrees is the default if neither 'm' nor 's' is given.
-* 'h'
-* Express the value as a time instead of an angle (where 24
-* hours correspond to 360 degrees) and include an hours
-* field. Expressing times in hours is the default if 't' is
-* given without either 'm' or 's'.
-* 'm'
-* Include a minutes field. By default this is not included.
-* 's'
-* Include a seconds field. By default this is not
-* included. This request is ignored if 'd' or 'h' is given,
-* unless a minutes field is also included.
-* 't'
-* Express the value as a time instead of an angle (where 24
-* hours correspond to 360 degrees). This option is ignored if
-* either 'd' or 'h' is given and is intended for use in cases
-* where the value is to be expressed purely in minutes and/or
-* seconds of time (no hours field). If 't' is given without
-* 'd', 'h', 'm' or 's' being present, then it is equivalent to
-* 'h'.
-* '.'
-* Indicates that decimal places are to be given for the final
-* field in the formatted string (whichever field this is). The
-* '.' should be followed immediately by a zero or positive integer
-* which gives the number of decimal places required. The '.' may
-* also be followed by asterisk (i.e. '.*') which causes the number
-* of decimal places to be chosen so that the total number of digits
-* is equal to the value of Digits.
-*
-* Format specifiers are not case sensitive. If several characters
-* make conflicting requests (e.g. if both 'i' and 'l' appear in a
-* format specifier), then the character occurring last takes
-* precedence, except that 'd' and 'h' always override 't'.
-
-* Notes:
-* - The result string may be stored in static memory. Its contents
-* may be over-written or the returned pointer may become invalid
-* following a further invocation of this function. A copy of the
-* string should therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-
-* Acknowledgements:
-* - This function is a close approximation to a Fortran 77 routine
-* written by Clive Davenhall which implements the system of format
-* specifiers for angles described in his document on the CAT
-* catalogue access library (Starlink User Note 181). Some minor
-* improvements have been made to ensure better behaviour when
-* results are rounded to a specified number of decimal places.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- char sep; /* Field separator character */
- const char *result; /* Pointer to result string */
- double absvalue; /* Absolute value in radians */
- double fract; /* Fractional part of final field */
- double idh; /* Integer number of degrees/hours */
- double ifract; /* Fractional part expressed as an integer */
- double imin; /* Integer number of minutes */
- double isec; /* Integer number of seconds */
- double shift; /* Factor for rounding fractional part */
- double test; /* Test value to determine rounding */
- int as_time; /* Format the value as a time? */
- int dh; /* Degrees/hours field required? */
- int lead_zero; /* Add leading zeros? */
- int min; /* Minutes field required? */
- int ndp; /* Number of decimal places */
- int plus; /* Add leading plus sign? */
- int pos; /* Position to add next character */
- int positive; /* Value is positive (or zero)? */
- int sec; /* Seconds field required? */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialise. */
- result = NULL;
-
-/* Check if a bad coordinate value has been given and return an
- appropriate string. */
- if ( value == AST__BAD ) {
- result = "<bad>";
-
-/* Otherwise... */
- } else {
-
-/* Parse the format specifier. */
- ParseDHmsFormat( fmt, digs, &sep, &plus, &lead_zero,
- &as_time, &dh, &min, &sec, &ndp, status );
-
-/* Break the value into fields. */
-/* ---------------------------- */
-/* Restrict the number of decimal places requested, if necessary, so
- that under the worst case the buffer for the result string is not
- likely to overflow. */
- if ( astOK ) {
- if ( ( ndp + 11 ) > AST__SKYAXIS_DHMSFORMAT_BUFF_LEN ) ndp = AST__SKYAXIS_DHMSFORMAT_BUFF_LEN - 11;
-
-/* Some operating systems have a "minus zero" value (for instance
- "-1.2*0" would give "-0"). This value is numerically equivalent to
- zero, but is formated as "-0" instead of "0". The leading minus sign
- confuses the following code, and so ensure now that all zero values
- are the usual "+0". */
- if ( value == 0.0 ) value = 0.0;
-
-/* Determine if the value to be formatted is positive and obtain its
- absolute value in radians. */
- positive = ( value >= 0.0 );
- absvalue = positive ? value : -value;
-
-/* Convert this to an absolute number of degrees or hours, as
- required. */
- fract = absvalue / ( as_time ? hr2rad : deg2rad );
-
-/* If a degrees/hours field is required, extract the whole number of
- degrees/hours and the remaining fractional part of a
- degree/hour. */
- idh = 0.0;
- if ( dh ) fract = modf( fract, &idh );
-
-/* If a minutes field is required, convert the value remaining to
- minutes and extract the whole number of minutes and the remaining
- fractional part of a minute. */
- imin = 0.0;
- if ( min ) fract = modf( fract * 60.0, &imin );
-
-/* If a seconds field is required, convert the value remaining to
- seconds (allowing for the absence of a minutes field if necessary)
- and extract the whole number of seconds and the remaining
- fractional part of a second. */
- isec = 0.0;
- if ( sec ) {
- if ( !min ) fract *= 60.0;
- fract = modf( fract * 60.0, &isec );
- }
-
-/* Round to the required number of decimal places. */
-/* ----------------------------------------------- */
-/* We must now round the fractional part (of whichever field) to the
- required number of decimal places. Calculate the power of 10 that
- brings the least significant digit into the units column. Scale the
- fractional part by this factor and truncate to an integer (but
- stored as a double to prevent possible integer overflow if the
- number of decimal places is excessive). */
- shift = pow( 10.0, (double) ndp );
- ifract = floor( fract * shift );
-
-/* Next we must determine if truncation was adequate, or whether we
- should round upwards instead. This process is more subtle than it
- seems because if a value with a 5 as the final digit is converted
- to radians and then back again, it may no longer end in 5 (because
- it cannot be represented exactly in radians) and so may round
- either up or down. If we want to recover the original (textual)
- value, we must compare the value we are formatting not with a test
- value whose last digit is 5, but with the closest number to this
- that can be represented exactly in radians.
-
- To do this, we add 0.5 to our truncated value, divide by the scale
- factor (to get the truncated fractional part, but now with a
- trailing digit 5 appended) and then combine this fractional part
- with the value of all the other fields. Finally, we convert this
- test value back into radians. */
- test = ( 0.5 + ifract ) / shift;
- if ( sec ) test = ( isec + test ) / 60.0;
- if ( min ) {
- test = ( imin + test ) / 60.0;
- } else if ( sec ) {
- test /= 60.0;
- }
- if ( dh ) test += idh;
- test *= ( as_time ? hr2rad : deg2rad );
-
-/* We now compare the absolute value we are formatting with this test
- value. If it is not smaller than it, we should have rounded up
- instead of truncating the final digit of the fractional part, so
- increment the integer representation of the truncated fractional
- part by 1.0 to compensate. */
- if ( absvalue >= test ) ifract += 1.0;
-
-/* Divide by the scale factor to obtain the correctly rounded
- fractional part. Then check if this fractional part is 1.0. If so,
- rounding has caused it to overflow into the units column of the
- final field, so clear the fractional part. */
- fract = ( ifract / shift );
- if ( fract >= 1.0 ) {
- ifract = 0.0;
-
-/* If a seconds field is present, propagate the overflow up through
- each field in turn, but omitting fields which are not required. Be
- careful about possible rounding errors when comparing integer
- values stored as double. */
- if ( sec ) {
- isec += 1.0;
- if ( ( floor( isec + 0.5 ) > 59.5 ) && min ) {
- isec = 0.0;
- imin += 1.0;
- if ( ( floor( imin + 0.5 ) > 59.5 ) && dh ) {
- imin = 0.0;
- idh += 1.0;
- }
- }
-
-/* Omit the seconds field if it is not present. */
- } else if ( min ) {
- imin += 1.0;
- if ( ( floor( imin + 0.5 ) > 59.5 ) && dh ) {
- imin = 0.0;
- idh += 1.0;
- }
-
-/* If only the degree/hour field is present, simply increment it. */
- } else {
- idh += 1.0;
- }
- }
-
-/* Construct the result string. */
-/* ---------------------------- */
-/* We now have the value of each field and the information about how
- they are to be formatted, so we can combine them into the required
- string. */
-
-/* If each field is either not required or equal to zero, disregard
- any sign. */
- if ( !positive && ( !dh || floor( idh + 0.5 ) < 0.5 ) &&
- ( !min || floor( imin + 0.5 ) < 0.5 ) &&
- ( !sec || floor( isec + 0.5 ) < 0.5 ) &&
- ( floor( ifract + 0.5 ) < 0.5 ) ) {
- positive = 1;
- }
-
-/* Use "pos" to identify where the next character should be
- added. Insert a leading '+' or '-' sign if required. */
- pos = 0;
- if ( !positive ) {
- dhmsformat_buff[ pos++ ] = '-';
- } else if ( plus ) {
- dhmsformat_buff[ pos++ ] = '+';
- }
-
-/* Use "sprintf" to format the degrees/hours field, if required. Set
- the minimum field width according to whether padding with leading
- zeros is required and whether the value represents hours (2 digits)
- or degrees (3 digits). */
- if ( dh ) {
- pos += sprintf( dhmsformat_buff + pos, "%0*.0f",
- lead_zero ? ( as_time ? 2 : 3 ) : 1, idh );
-
-/* If letters are being used as field separators, and there are more
- fields to follow, append "d" or "h" as necessary. */
- if ( min || sec ) {
- if ( sep == 'l' ) {
- dhmsformat_buff[ pos++ ] = ( as_time ? 'h' : 'd' );
- } else if( sep == 'g' ) {
- pos += sprintf( dhmsformat_buff + pos, "%s", as_time ? gh_delim : gd_delim );
- }
- }
- }
-
-/* If a minutes field is required, first add an appropriate non-letter
- field separator if needed. */
- if ( min ) {
- if ( ( sep != 'l' && sep != 'g' ) && dh ) dhmsformat_buff[ pos++ ] = sep;
-
-/* Then format the minutes field with a leading zero to make it two
- digits if necessary. */
- pos += sprintf( dhmsformat_buff + pos, "%0*.0f", ( dh || lead_zero ) ? 2 : 1,
- imin );
-
-/* If letters are being used as field separators, and there is another
- field to follow, append the separator. */
- if ( sec ) {
- if ( sep == 'l' ) {
- dhmsformat_buff[ pos++ ] = 'm';
- } else if( sep == 'g' ) {
- pos += sprintf( dhmsformat_buff + pos, "%s", as_time ? gm_delim : gam_delim );
- }
- }
- }
-
-/* Similarly, if a seconds field is required, first add an appropriate
- non-letter field separator if needed. */
- if ( sec ) {
- if ( ( sep != 'l' && sep != 'g' ) && ( dh || min ) ) dhmsformat_buff[ pos++ ] = sep;
-
-/* Then format the seconds field with a leading zero to make it two
- digits if necessary. */
- pos += sprintf( dhmsformat_buff + pos, "%0*.0f",
- ( dh || min || lead_zero ) ? 2 : 1, isec );
- }
-
-/* If decimal places are needed, add a decimal point followed by the
- integer representation of the correctly rounded fractional part,
- padded with leading zeros if necessary. */
- if ( ndp > 0 ) {
- dhmsformat_buff[ pos++ ] = '.';
- pos += sprintf( dhmsformat_buff + pos, "%0*.0f", ndp, ifract );
- }
-
-/* If letters are being used as separators, append the appropriate one
- to the final field. */
- if ( sep == 'l' ) {
- dhmsformat_buff[ pos++ ] = ( sec ? 's' : ( min ? 'm' :
- ( as_time ? 'h' : 'd' ) ) );
- } else if ( sep == 'g' ) {
- pos += sprintf( dhmsformat_buff + pos, "%s",
- as_time ? ( sec ? gs_delim : ( min ? gm_delim : gh_delim ) ) :
- ( sec ? gas_delim : ( min ? gam_delim : gd_delim ) ) );
- }
-
-/* Terminate the result string and return a pointer to it. */
- dhmsformat_buff[ pos ] = '\0';
- result = dhmsformat_buff;
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static double DHmsGap( const char *fmt, int digs, double gap, int *ntick, int *status ) {
-/*
-* Name:
-* DHmsGap
-
-* Purpose:
-* Find a "nice" gap for formatted SkyAxis values.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* double DHmsGap( const char *fmt, int digs, double gap, int *ntick, int *status )
-
-* Class Membership:
-* SkyAxis member function.
-
-* Description:
-* This function returns a gap size in radians which produces a
-* nicely spaced series of formatted SkyAxis values, the returned
-* gap size being as close as possible to the supplied target gap
-* size. It also returns a convenient number of divisions into
-* which the gap can be divided.
-
-* Parameters:
-* fmt
-* Pointer to a constant null-terminated string containing the
-* format specifier which will be used to format the SkyAxis
-* values.
-* digs
-* The default number of digits of precision to use. This is used
-* if the given format specifier indicates the number of decimal
-* places to use with the string ".*". In this case, the number of
-* decimal places produced will be chosen so that the total number
-* of digits of precision is equal to "digs".
-* gap
-* The target gap size.
-* ntick
-* Address of an int in which to return a convenient number of
-* divisions into which the gap can be divided.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The nice gap size.
-
-* Notes:
-* - A value of zero is returned if the target gap size is zero.
-* - A negative gap size is returned if the supplied gap size is
-* negative.
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Constants: */
-#define BUFF_LEN 50 /* Length of character buffer */
-
-/* Local Variables: */
- char buff[ BUFF_LEN + 1 ]; /* Buffer for formatted scaled "nice" value */
- char sep; /* Field separator character */
- const double *table; /* Pointer to nice gap table */
- const int *nticks; /* Pointer to number of subdivisions table */
- double field_value[ 3 ]; /* Formatted field values in radians */
- double scale; /* Power of ten scaling factor */
- double scaled_table_value; /* Scaled "nice" value to test against */
- int as_time; /* Format the value as a time? */
- int decimal; /* Use nice decimal gap value? */
- int dh; /* Degrees/hours field required? */
- int field; /* ID of most significant formatted field */
- int i; /* Look-up-table index */
- int iter; /* Iteration count */
- int lead_zero; /* Add leading zeros? */
- int min; /* Minutes field required? */
- int ndp; /* Number of decimal places */
- int plus; /* Add leading plus sign? */
- int positive; /* Value is positive (or zero)? */
- int sec; /* Seconds field required? */
-
-/* Local Data: */
-/* ----------- */
-/* Table of nice decimal gaps. */
- const double dec_table[] = { 1.0, 2.0, 5.0, 5.0, 10.0, -1.0 };
- const int dec_nticks[] = { 5, 4, 5, 5, 5 };
-
-/* Table of nice degrees gaps. */
- const double deg_table[] =
- { 1.0, 2.0, 5.0, 10.0, 30.0, 45.0, 60.0, 90.0, 180.0, 360.0, -1.0 };
- const int deg_nticks[] =
- { 4, 4, 5, 5, 6, 3, 6, 3, 3, 4 };
-
-/* Table of nice hours gaps. */
- const double hr_table[] = { 1.0, 2.0, 3.0, 6.0, 12.0, 24.0, -1.0 };
- const int hr_nticks[] = { 4, 4, 6, 6, 4, 4 };
-
-/* Table of nice minutes or seconds gaps. */
- const double minsec_table[] = { 1.0, 2.0, 5.0, 10.0, 30.0, 60.0, -1.0 };
- const int minsec_nticks[] = { 4, 4, 5, 5, 6, 4 };
-
-/* Check the global error status. */
- if ( !astOK ) return 0.0;
-
-/* Check that the supplied gap size is not zero. */
- if ( gap != 0.0 ) {
-
-/* Parse the format specifier. */
- ParseDHmsFormat( fmt, digs, &sep, &plus, &lead_zero, &as_time, &dh, &min,
- &sec, &ndp, status );
-
-/* If OK, calculate the value of each formatted field in radians. */
- if ( astOK ) {
- field_value[ 0 ] = ( as_time ? hr2rad : deg2rad );
- field_value[ 1 ] = field_value[ 0 ] / 60.0;
- field_value[ 2 ] = field_value[ 0 ] / 3600.0;
-
-/* Determine if the suggested gap size is positive and obtain its
- absolute value. */
- positive = ( gap >= 0.0 );
- if ( !positive ) gap = -gap;
-
-/* Perform two iterations to determine the optimum gap value. This is
- because the method of choosing the gap value depends on the initial
- value. If a nice decimal gap is chosen on the first iteration,
- this may round the suggested gap value downwards, making it
- preferable to choose the gap value using a different method on the
- second iteration. */
- for ( iter = 0; iter < 2; iter++ ) {
-
-/* Decide which is the most significant field that the suggested gap
- value will occupy when formatted. Also decide whether to use a
- special "nice" gap value specific to that field, or simply to use a
- generic nice decimal gap value. Perform all tests on the gap size
- in radians, so as to avoid any rounding problems from conversion
- into degrees/hours, minutes or seconds. */
- decimal = 0;
-
-/* Suggested values exceeding one degree/hour. */
-/* ------------------------------------------- */
- if ( gap > field_value[ 0 ] ) {
-
-/* If a degree/hour field is present, use a special gap value, unless
- the suggested value exceeds the normal range of this field (in
- which case use a decimal gap). */
- if ( dh ) {
- field = 1;
- decimal = ( gap > ( field_value[ 0 ] *
- ( as_time ? 24.0 : 360.0 ) ) );
-
-/* If the most significant field is not degrees/hours, then its normal
- range will be exceeded, so use a decimal gap. */
- } else if ( min ) {
- field = 2;
- decimal = 1;
- } else {
- field = 3;
- decimal = 1;
- }
-
-/* Suggested values exceeding one minute. */
-/* -------------------------------------- */
- } else if ( gap > field_value[ 1 ] ) {
-
-/* If a minutes field is present, the suggested value will lie within
- its normal range, so use a special gap value. */
- if ( min ) {
- field = 2;
-
-/* Otherwise, if the most significant field is seconds, its normal
- range will be exceeded, so use a decimal gap value. */
- } else if ( sec ) {
- field = 3;
- decimal = 1;
-
-/* If only a degrees/hours field is present, then only digits after
- the decimal point can be affected, so use a decimal gap value. */
- } else {
- field = 1;
- decimal = 1;
- }
-
-/* Suggested values exceeding one second. */
-/* -------------------------------------- */
- } else if ( gap > field_value[ 2 ] ) {
-
-/* If a seconds field is present, the suggested value will lie within
- its normal range, so use a special gap value. */
- if ( sec ) {
- field = 3;
-
-/* If the least significant field is degrees/hours or minutes, then
- only digits after the decimal point can be affected, so use a
- decimal gap value. */
- } else if ( min ) {
- field = 2;
- decimal = 1;
- } else {
- field = 1;
- decimal = 1;
- }
-
-/* Suggested values less than one second. */
-/* -------------------------------------- */
- } else {
-
-/* Only digits after the decimal point can be affected, so decide
- which is the least significant field present and use a decimal
- gap. */
- if ( sec ) {
- field = 3;
- } else if ( min ) {
- field = 2;
- } else {
- field = 1;
- }
- decimal = 1;
- }
-
-/* If a decimal gap value is required, select the appropriate table of
- gap values and numbers of subdivisions. */
- if ( decimal ) {
- table = dec_table;
- nticks = dec_nticks;
-
-/* Find a power of ten divisor which scales the suggested value (when
- formatted) into the range 1.0 to 10.0. */
- scale = pow( 10.0,
- floor( log10( gap / field_value[ field - 1 ] ) ) );
-
-/* Look the scaled value up in the table, comparing values in radians
- to avoid rounding problems due to conversion to/from
- degrees/radians, etc. */
- for ( i = 0; table[ i + 1 ] > 0.0; i++ ) {
-
-/* We must be careful about rounding errors here. If, for example, we
- read in a value of 0.15 as the suggested gap value, the scaled
- "nice" value we would be comparing it with would be 0.1 times the
- values in the nice values table. The relevant value in this table
- is 1.5 (i.e. 0.5 * ( 1.0 + 2.0 ) ), so we would compute 0.1 * 1.5
- as the test value. However, this is probably not equal (to machine
- precision) to the number that results when a formatted value of
- 0.15 is read, because 0.1 isn't exactly representable. Since it is
- the formatted appearance of the numbers which matters, we want a
- new scaled nice table containing the numbers that result from
- reading the formatted values 0.1, 0.2, etc. To achieve this effect,
- we format the scaled table value using the default floating point
- precision (which rounds to a relatively small number of decimal
- digits) and then read the value back again. */
- (void ) sprintf( buff, "%g", scale *
- 0.5 * ( table[ i ] + table[ i + 1 ] ) );
- (void) astSscanf( buff, "%lf", &scaled_table_value );
-
-/* Now test the suggested gap value against the scaled table value. */
- if ( gap < ( field_value[ field - 1 ] *
- scaled_table_value ) ) break;
- }
-
-/* Return the nice gap value and the number of subdivisions. */
- gap = scale * field_value[ field - 1 ] * table[ i ];
- if ( ntick ) *ntick = nticks[ i ];
-
-/* If a special gap value appropriate to the field is required, then
- select the table of gap values and numbers of subdivisions
- according to which field we are considering and whether it contains
- degrees or hours. */
- } else {
- if ( field == 1 ) {
- if ( as_time ) {
- table = hr_table;
- nticks = hr_nticks;
- } else {
- table = deg_table;
- nticks = deg_nticks;
- }
- } else {
- table = minsec_table;
- nticks = minsec_nticks;
- }
-
-/* Search the table for a suitable gap. We do not need to format and
- unformat the test value here (as we did above) because the table
- values are being used literally and not being scaled. */
- for ( i = 0; table[ i + 1 ] > 0.0; i++ ) {
- if ( gap < ( field_value[ field - 1 ] *
- 0.5 * ( table[ i ] + table[ i + 1 ] ) ) ) break;
- }
-
-/* Return the nice gap value and the number of subdivisions. */
- gap = field_value[ field - 1 ] * table[ i ];
- if ( ntick ) *ntick = nticks[ i ];
- }
- }
-
-/* After iterations are complete, restore the original sign. */
- if ( !positive ) gap = -gap;
- }
- }
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) gap = 0.0;
-
-/* Return the result. */
- return gap;
-
-/* Undefine macros local to this function */
-#undef BUFF_LEN
-}
-
-static const char *DHmsUnit( const char *fmt, int digs, int output, int *status ) {
-/*
-* Name:
-* DHmsUnit
-
-* Purpose:
-* Generate a unit string to describe a formatted angle or time.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* const char *DHmsUnit( const char *fmt, int digs, int output, int *status )
-
-* Class Membership:
-* SkyAxis member function.
-
-* Description:
-* This function generates a string that may be used to describe
-* either (a) the units of an angle or time that has been formatted
-* for output using the DHmsFormat function, or (b) a suitable
-* format to be used for an angle or time that is to be supplied as
-* an input coordinate value.
-
-* Parameters:
-* fmt
-* Pointer to a null terminated string containing the format
-* specifier used to format coordinate values. For details of
-* the syntax of this string, see the DHmsFormat function.
-* digs
-* The default number of digits of precision to use. This is used
-* if the given format specifier indicates the number of decimal
-* places to use with the string ".*". In this case, the number of
-* decimal places produced will be chosen so that the total number
-* of digits of precision is equal to "digs".
-* output
-* If non-zero, the returned string will be in a form suitable
-* for describing the units/format of output produced using
-* DHmsFormat.
-*
-* If zero, the returned string will be in a form suitable for
-* describing a suggested input format, which will subsequently
-* be read using AxisUnformat.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a null terminated string containing the unit description.
-
-* Notes:
-* - The result string may be stored in static memory. Its contents
-* may be over-written or the returned pointer may become invalid
-* following a further invocation of this function. A copy of the
-* string should therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- char dpchar; /* Character to indicate decimal places */
- char sep; /* Field separator character */
- const char *result; /* Pointer to result string */
- const int maxdp = 6; /* Maximum number of decimal places to show */
- int as_time; /* Value formatted as a time? */
- int dh; /* Degrees/hours field required? */
- int dp; /* Loop counter for decimal places */
- int lead_zero; /* Add leading zeros? */
- int min; /* Minutes field required? */
- int ndp; /* Number of decimal places */
- int plus; /* Leading plus sign required? */
- int pos; /* Position to add next character */
- int sec; /* Seconds field required? */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Parse the format specifier. */
- ParseDHmsFormat( fmt, digs, &sep, &plus, &lead_zero, &as_time, &dh, &min,
- &sec, &ndp, status );
-
-/* If the units string is required to describe formatted output and
- the field separators are letters (e.g. giving "01h23m45s" or
- "012d34m56s"), then the units will already be clear so return a
- pointer to an empty units string. */
- if ( astOK ) {
- if ( output && ( sep == 'l' || sep == 'g' ) ) {
- result = "";
-
-/* Otherwise, if the units string is required to describe formatted
- output and there is only one field present, then select an
- appropriate string. */
- } else if ( output && dh && !min && !sec ) {
- result = as_time ? "hours" : "degrees";
-
- } else if ( output && !dh && min && !sec ) {
- result = as_time ? "minutes of time" : "arcminutes";
-
- } else if ( output && !dh && !min && sec ) {
- result = as_time ? "seconds of time" : "arcseconds";
-
-/* If there is more than one field present, or we want to describe how
- to supply formatted input, then we will generate a units string of
- the general form "ddd:mm:ss.sss" or "hh:mm:ss.s" or
- similar. Initialise the output character count and the character to
- be used to represent decimal places. */
- } else {
- pos = 0;
- dpchar = 'd';
-
-/* Decide which field separator to use (use a space if letters were
- requested since it is easier to input). */
- if ( sep == 'l' || sep == 'g' ) sep = ' ';
-
-/* Start with the "ddd" or "hh" field, if required, and update the
- decimal places character appropriately. */
- if ( dh ) {
- pos += sprintf( dhmsunit_buff, "%s", as_time ? "hh" : "ddd" );
- dpchar = as_time ? 'h' : 'd';
- }
-
-/* If a minutes field is present, add a separator if necessary and
- "mm" and update the decimal places character. */
- if ( min ) {
- if ( dh ) dhmsunit_buff[ pos++ ] = sep;
- dhmsunit_buff[ pos++ ] = 'm';
- dhmsunit_buff[ pos++ ] = 'm';
- dpchar = 'm';
- }
-
-/* Repeat this process for the seconds field, if present. */
- if ( sec ) {
- if ( dh || min ) dhmsunit_buff[ pos++ ] = sep;
- dhmsunit_buff[ pos++ ] = 's';
- dhmsunit_buff[ pos++ ] = 's';
- dpchar = 's';
- }
-
-/* If decimal places are present, add a decimal point and then loop to
- add further instances of the decimal places character to represent
- the digits that follow. */
- if ( ndp > 0 ) {
- dhmsunit_buff[ pos++ ] = '.';
- for ( dp = 0; dp < ndp; dp++ ) {
- if ( dp < maxdp ) {
- dhmsunit_buff[ pos++ ] = dpchar;
-
-/* After showing the maximum number of decimal places, simply add an
- ellipsis and quit (otherwise the result gets boring to look at). */
- } else {
- dhmsunit_buff[ pos - 1 ] = '.';
- dhmsunit_buff[ pos - 2 ] = '.';
- dhmsunit_buff[ pos - 3 ] = '.';
- break;
- }
- }
- }
-
-/* Terminate the result string and return a pointer to it. */
- dhmsunit_buff[ pos ] = '\0';
- result = dhmsunit_buff;
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* SkyAxis member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied SkyAxis,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the SkyAxis.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSkyAxis *this; /* Pointer to SkyAxis structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the SkyAxis structure. */
- this = (AstSkyAxis *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
- result += astTSizeOf( this->skyformat );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a SkyAxis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* SkyAxis member function (over-rides the protected astGetAttrib
-* method inherited from the Axis class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a SkyAxis, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the SkyAxis.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the SkyAxis, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the SkyAxis. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstSkyAxis *this; /* Pointer to the SkyAxis structure */
- const char *result; /* Pointer value to return */
- int as_time; /* AsTime attribute value */
- int centrezero; /* CentreZero attribute value */
- int is_latitude; /* IsLatitude attribute value */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the SkyAxis structure. */
- this = (AstSkyAxis *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null-terminated string in an appropriate
- format. Set "result" to point at the result string. */
-
-/* AsTime. */
-/* ------- */
- if ( !strcmp( attrib, "astime" ) ) {
- as_time = astGetAxisAsTime( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", as_time );
- result = getattrib_buff;
- }
-
-/* IsLatitude. */
-/* ----------- */
- } else if ( !strcmp( attrib, "islatitude" ) ) {
- is_latitude = astGetAxisIsLatitude( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", is_latitude );
- result = getattrib_buff;
- }
-
-/* CentreZero. */
-/* ----------- */
- } else if ( !strcmp( attrib, "centrezero" ) ) {
- centrezero= astGetAxisCentreZero( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", centrezero );
- result = getattrib_buff;
- }
-
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-}
-
-static double GetAxisBottom( AstAxis *this_axis, int *status ) {
-/*
-* Name:
-* GetAxisBottom
-
-* Purpose:
-* Obtain the value of the Bottom attribute for a SkyAxis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* double GetAxisBottom( AstAxis *this, int *status )
-
-* Class Membership:
-* SkyAxis member function (over-rides the astGetAxisBottom method
-* inherited from the Axis class).
-
-* Description:
-* This function returns a value for the Bottom attribute of a SkyAxis.
-* This attribute indicates the lowest legal value for the axis.
-
-* Parameters:
-* this
-* Pointer to the SkyAxis.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The atribute value. A suitable default value is supplied if necessary.
-
-* Notes:
-* - A value of -DBL_MAX will be returned if this function is invoked
-* with the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables. */
- AstSkyAxis *this; /* Pointer to the SkyAxis structure */
- double result; /* Result to be returned */
-
-/* Check the global error status. */
- if ( !astOK ) return -DBL_MAX;
-
-/* Obtain a pointer to the SkyAxis structure. */
- this = (AstSkyAxis *) this_axis;
-
-/* Check if a value has been set for the Bottom attribute. If so, obtain
- this value. */
- if ( astTestAxisBottom( this ) ) {
- result = (*parent_getaxisbottom)( this_axis, status );
-
-/* Otherwise, supply a default of -pi/2 for latitude axes, and -DBL_MAX
- for longitude axes. */
- } else {
- result = astGetAxisIsLatitude( this ) ? -piby2 : -DBL_MAX;
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = -DBL_MAX;
-
-/* Return the result. */
- return result;
-}
-
-static double GetAxisTop( AstAxis *this_axis, int *status ) {
-/*
-* Name:
-* GetAxisTop
-
-* Purpose:
-* Obtain the value of the Top attribute for a SkyAxis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* double GetAxisTop( AstAxis *this, int *status )
-
-* Class Membership:
-* SkyAxis member function (over-rides the astGetAxisTop method
-* inherited from the Axis class).
-
-* Description:
-* This function returns a value for the Top attribute of a SkyAxis.
-* This attribute indicates the highest legal value for the axis.
-
-* Parameters:
-* this
-* Pointer to the SkyAxis.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The atribute value. A suitable default value is supplied if necessary.
-
-* Notes:
-* - A value of DBL_MAX will be returned if this function is invoked
-* with the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables. */
- AstSkyAxis *this; /* Pointer to the SkyAxis structure */
- double result; /* Result to be returned */
-
-/* Check the global error status. */
- if ( !astOK ) return DBL_MAX;
-
-/* Obtain a pointer to the SkyAxis structure. */
- this = (AstSkyAxis *) this_axis;
-
-/* Check if a value has been set for the Top attribute. If so, obtain
- this value. */
- if ( astTestAxisTop( this ) ) {
- result = (*parent_getaxistop)( this_axis, status );
-
-/* Otherwise, supply a default of pi/2 for latitude axes, and DBL_MAX
- for longitude axes. */
- } else {
- result = astGetAxisIsLatitude( this ) ? piby2 : DBL_MAX;
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = DBL_MAX;
-
-/* Return the result. */
- return result;
-}
-
-static int GetAxisDirection( AstAxis *this_axis, int *status ) {
-/*
-* Name:
-* GetAxisDirection
-
-* Purpose:
-* Obtain the value of the Direction attribute for a SkyAxis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* int GetAxisDirection( AstAxis *this, int *status )
-
-* Class Membership:
-* SkyAxis member function (over-rides the astGetAxisDirection method
-* inherited from the Axis class).
-
-* Description:
-* This function returns a value for the Direction attribute of a SkyAxis.
-* This attribute indicates in which direction the SkyAxis's values should
-* increase when represented on a graph (1 for the conventional direction,
-* 0 for reverse direction).
-
-* Parameters:
-* this
-* Pointer to the SkyAxis.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero or one, according to the attribute setting. A suitable default
-* value is supplied if necessary.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables. */
- AstSkyAxis *this; /* Pointer to the SkyAxis structure */
- int result; /* Result to be returned */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Obtain a pointer to the SkyAxis structure. */
- this = (AstSkyAxis *) this_axis;
-
-/* Check if a value has been set for the Direction attribute. If so, obtain
- this value. */
- if ( astTestAxisDirection( this ) ) {
- result = (*parent_getaxisdirection)( this_axis, status );
-
-/* Otherwise, supply a default of 1 unless the SkyAxis values are being
- formatted as times (instead of angles) by default. */
- } else {
- result = !astGetAxisAsTime( this );
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetAxisFormat( AstAxis *this_axis, int *status ) {
-/*
-* Name:
-* GetAxisFormat
-
-* Purpose:
-* Obtain a pointer to the Format attribute for a SkyAxis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* const char *GetAxisFormat( AstAxis *this, int *status )
-
-* Class Membership:
-* SkyAxis member function (over-rides the astGetAxisFormat method inherited
-* from the Axis class).
-
-* Description:
-* This function returns a pointer to the Format attribute associated with
-* a SkyAxis and provides a suitable default if necessary. This string
-* attribute contains the format specifier that will be interpreted by the
-* astAxisFormat method when formatting a value for the SkyAxis. The default
-* Format may depend on other attribute settings, in particular on the
-* Digits and AsTime attributes.
-
-* Parameters:
-* this
-* Pointer to the SkyAxis.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the Format string (null terminated).
-
-* Notes:
-* - The pointer returned may point at memory allocated within the SkyAxis
-* object, or at static memory. The contents of the string may be
-* over-written or the pointer may become invalid following a further
-* invocation of the same function, deletion of the SkyAxis, or assignment
-* of a new Format value. A copy of the string should therefore be made if
-* necessary.
-* - This function will return a NULL pointer if it is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstSkyAxis *this; /* Pointer to the SkyAxis structure */
- const char *result; /* Pointer to result string */
- int as_time; /* Format SkyAxis values as times? */
- int digits; /* Number of digits of precision */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this_axis);
-
-/* Initialise. */
- result = NULL;
-
-/* Obtain a pointer to the SkyAxis structure. */
- this = (AstSkyAxis *) this_axis;
-
-/* Obtain a pointer to the Format string stored in the SkyAxis structure. Note
- we do not use a method to obtain this, because we want a string with a
- syntax appropriate to this class, and derived classes may have extended the
- syntax. */
- result = this->skyformat;
-
-/* If no Format string has been set, we must generate a default one. Determine
- how many digits of precision are to be used by default and whether the
- SkyAxis values are to be formatted as times (instead of angles). */
- if ( !result ) {
- digits = astGetAxisDigits( this );
- as_time = astGetAxisAsTime( this );
- if ( astOK ) {
-
-/* If formatting values as times, use the number of digits to select an
- appropriate Format string and obtain a pointer to it. */
- if ( as_time ) {
- if ( digits <= 2 ) {
- result = "h";
- } else if ( digits == 3 ) {
- result = "hm";
- } else if ( digits == 4 ) {
- result = "hm";
- } else if ( digits == 5 ) {
- result = "hms";
- } else if ( digits == 6 ) {
- result = "hms";
-
-/* Construct the Format string in a buffer if necessary. */
- } else {
- (void) sprintf( getaxisformat_buff, "hms.%d", digits - 6 );
- result = getaxisformat_buff;
- }
-
-/* Similarly, select a Format for expressing an angle if necessary. */
- } else {
- if ( digits <= 3 ) {
- result = "d";
- } else if ( digits == 4 ) {
- result = "dm";
- } else if ( digits == 5 ) {
- result = "dm";
- } else if ( digits == 6 ) {
- result = "dms";
- } else if ( digits == 7 ) {
- result = "dms";
- } else {
- (void) sprintf( getaxisformat_buff, "dms.%d", digits - 7 );
- result = getaxisformat_buff;
- }
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetAxisLabel( AstAxis *this_axis, int *status ) {
-/*
-* Name:
-* GetAxisLabel
-
-* Purpose:
-* Obtain a pointer to the Label attribute for a SkyAxis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* const char *GetAxisLabel( AstAxis *this, int *status )
-
-* Class Membership:
-* SkyAxis member function (over-rides the astGetAxisLabel method inherited
-* from the Axis class).
-
-* Description:
-* This function returns a pointer to the Label attribute associated with
-* a SkyAxis and provides a suitable default if necessary. This string
-* attribute specifies the label to be attached to the SkyAxis when it is
-* represented in (e.g.) a graph. It is intended purely for interpretation
-* by human readers and not by software.
-
-* Parameters:
-* this
-* Pointer to the SkyAxis.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the Label string (null terminated).
-
-* Notes:
-* - The pointer returned may point at memory allocated within the SkyAxis
-* object, or at static memory. The contents of the string may be
-* over-written or the pointer may become invalid following a further
-* invocation of the same function, deletion of the SkyAxis, or assignment
-* of a new Label value. A copy of the string should therefore be made if
-* necessary.
-* - This function will return a NULL pointer if it is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSkyAxis *this; /* Pointer to the SkyAxis structure */
- const char *result; /* Pointer value to be returned */
- int as_time; /* SkyAxis values formatted as times? */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise. */
- result = NULL;
-
-/* Obtain a pointer to the SkyAxis structure. */
- this = (AstSkyAxis *) this_axis;
-
-/* Test if the Label attribute is set. If so, use the parent astGetAxisLabel
- method to get a pointer to it. */
- if ( astTestAxisLabel( this ) ) {
- result = (*parent_getaxislabel)( this_axis, status );
-
-/* Otherwise, return a pointer to a suitable default string, using the result
- of the astGetAxisAsTime method to determine whether a string describing
- time or angle is more appropriate. */
- } else {
- as_time = astGetAxisAsTime( this );
- if ( !astTestAxisIsLatitude( this ) ) {
- result = as_time ? "Angle on sky expressed as time" :
- "Angle on sky";
- } else if ( astGetAxisIsLatitude( this ) ) {
- result = as_time ? "Sky latitude expressed as time" :
- "Sky latitude";
- } else {
- result = as_time ? "Sky longitude expressed as time" :
- "Sky longitude";
- }
- }
-
-/* If an error occurred, clear the result pointer. */
- if ( !astOK ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetAxisSymbol( AstAxis *this_axis, int *status ) {
-/*
-* Name:
-* GetAxisSymbol
-
-* Purpose:
-* Obtain a pointer to the Symbol attribute for a SkyAxis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* const char *GetAxisSymbol( AstAxis *this, int *status )
-
-* Class Membership:
-* SkyAxis member function (over-rides the astGetAxisSymbol method inherited
-* from the Axis class).
-
-* Description:
-* This function returns a pointer to the Symbol attribute associated with
-* a SkyAxis and provides a suitable default if necessary. This string
-* attribute specifies the symbol to be used to represent coordinate values
-* for the SkyAxis in "short form", such as in algebraic expressions where a
-* full description would be inappropriate.
-
-* Parameters:
-* this
-* Pointer to the SkyAxis.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the Symbol string (null terminated).
-
-* Notes:
-* - The pointer returned may point at memory allocated within the SkyAxis
-* object, or at static memory. The contents of the string may be
-* over-written or the pointer may become invalid following a further
-* invocation of the same function, deletion of the SkyAxis, or assignment
-* of a new Symbol value. A copy of the string should therefore be made if
-* necessary.
-* - This function will return a NULL pointer if it is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSkyAxis *this; /* Pointer to the SkyAxis structure */
- const char *result; /* Pointer value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise. */
- result = NULL;
-
-/* Obtain a pointer to the SkyAxis structure. */
- this = (AstSkyAxis *) this_axis;
-
-/* Test if the Symbol attribute is set. If so, use the parent astGetAxisSymbol
- method to get a pointer to it. */
- if ( astTestAxisSymbol( this ) ) {
- result = (*parent_getaxissymbol)( this_axis, status );
-
-/* If a value has been set for the IsLatitude attribute, use it to decide
- whether to use "delta" (for latitude) or "alpha" (for longitude). */
- } else if ( astTestAxisIsLatitude( this ) ) {
- result = astGetAxisIsLatitude( this ) ? "delta" : "alpha";
-
-/* Otherwise, use the AsTime attribute to decide whether the SkyAxis is
- likely to be a longitude or latitude axis (the former usually having values
- formatted as times). */
- } else {
- result = astGetAxisAsTime( this ) ? "alpha" : "delta";
- }
-
-/* If an error occurred, clear the result pointer. */
- if ( !astOK ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetAxisUnit( AstAxis *this_axis, int *status ) {
-/*
-* Name:
-* GetAxisUnit
-
-* Purpose:
-* Obtain a pointer to the Unit attribute for a SkyAxis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* const char *GetAxisUnit( AstAxis *this, int *status )
-
-* Class Membership:
-* SkyAxis member function (over-rides the astGetAxisUnit method inherited
-* from the Axis class).
-
-* Description:
-* This function returns a pointer to the Unit attribute associated with
-* a SkyAxis and provides a suitable default if necessary. This string
-* attribute describes the unit used to represent formatted coordinate
-* values on the SkyAxis.
-
-* Parameters:
-* this
-* Pointer to the SkyAxis.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the Unit string (null terminated).
-
-* Notes:
-* - The pointer returned may point at memory allocated within the SkyAxis
-* object, or at static memory. The contents of the string may be
-* over-written or the pointer may become invalid following a further
-* invocation of the same function, deletion of the SkyAxis, or assignment
-* of a new Unit value. A copy of the string should therefore be made if
-* necessary.
-* - This function will return a NULL pointer if it is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSkyAxis *this; /* Pointer to the SkyAxis structure */
- const char *fmt; /* Pointer to format specifier */
- const char *result; /* Pointer to result string */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise */
- result = NULL;
-
-/* Obtain a pointer to the SkyAxis structure. */
- this = (AstSkyAxis *) this_axis;
-
-/* Test if the Unit attribute is set. If so, invoke the parent astGetAxisUnit
- method to obtain a pointer to it. */
- if ( astTestAxisUnit( this ) ) {
- result = (*parent_getaxisunit)( this_axis, status );
-
-/* If we must provide a default, obtain a pointer to the format specifier used
- to format SkyAxis values. Use a private member function (not a method) to
- access this, in case derived classes have extended the syntax of this
- string. */
- } else {
- fmt = GetAxisFormat( this_axis, status );
-
-/* If the format string starts with a percent, use "rad" as the default units
- string. Otherwise, use the format specifier to generate a matching
- default Unit string and obtain a pointer to it. */
- if ( astOK ) {
- if( fmt[ 0 ] == '%' ) {
- result = "rad";
- } else {
- result = DHmsUnit( fmt, astGetAxisDigits( this_axis ), 1, status );
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-void astInitSkyAxisVtab_( AstSkyAxisVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitSkyAxisVtab
-
-* Purpose:
-* Initialise a virtual function table for a SkyAxis.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* void astInitSkyAxisVtab( AstSkyAxisVtab *vtab, const char *name )
-
-* Class Membership:
-* SkyAxis vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the SkyAxis class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstAxisVtab *axis; /* Pointer to Axis component of Vtab */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- int stat; /* SLALIB status */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitAxisVtab( (AstAxisVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsASkyAxis) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstAxisVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
- vtab->ClearAxisAsTime = ClearAxisAsTime;
- vtab->ClearAxisIsLatitude = ClearAxisIsLatitude;
- vtab->ClearAxisCentreZero = ClearAxisCentreZero;
- vtab->GetAxisAsTime = GetAxisAsTime;
- vtab->GetAxisIsLatitude = GetAxisIsLatitude;
- vtab->GetAxisCentreZero = GetAxisCentreZero;
- vtab->SetAxisAsTime = SetAxisAsTime;
- vtab->SetAxisIsLatitude = SetAxisIsLatitude;
- vtab->SetAxisCentreZero = SetAxisCentreZero;
- vtab->TestAxisAsTime = TestAxisAsTime;
- vtab->TestAxisIsLatitude = TestAxisIsLatitude;
- vtab->TestAxisCentreZero = TestAxisCentreZero;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- axis = (AstAxisVtab *) vtab;
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
- parent_axisoverlay = axis->AxisOverlay;
- axis->AxisOverlay = AxisOverlay;
- parent_getaxisdirection = axis->GetAxisDirection;
- axis->GetAxisDirection = GetAxisDirection;
- parent_getaxislabel = axis->GetAxisLabel;
- axis->GetAxisLabel = GetAxisLabel;
- parent_getaxissymbol = axis->GetAxisSymbol;
- axis->GetAxisSymbol = GetAxisSymbol;
- parent_getaxisunit = axis->GetAxisUnit;
- axis->GetAxisUnit = GetAxisUnit;
-
- parent_getaxistop = axis->GetAxisTop;
- axis->GetAxisTop = GetAxisTop;
-
- parent_getaxisbottom = axis->GetAxisBottom;
- axis->GetAxisBottom = GetAxisBottom;
-
- parent_axisformat = axis->AxisFormat;
- axis->AxisFormat = AxisFormat;
-
- parent_axisunformat = axis->AxisUnformat;
- axis->AxisUnformat = AxisUnformat;
-
- parent_axisgap = axis->AxisGap;
- axis->AxisGap = AxisGap;
-
- parent_axisfields = axis->AxisFields;
- axis->AxisFields = AxisFields;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- axis->AxisAbbrev = AxisAbbrev;
- axis->AxisIn = AxisIn;
- axis->AxisDistance = AxisDistance;
- axis->AxisOffset = AxisOffset;
- axis->AxisNorm = AxisNorm;
- axis->ClearAxisFormat = ClearAxisFormat;
- axis->GetAxisFormat = GetAxisFormat;
- axis->SetAxisFormat = SetAxisFormat;
- axis->TestAxisFormat = TestAxisFormat;
-
-/* Declare the destructor, copy constructor and dump function. */
- astSetDelete( vtab, Delete );
- astSetCopy( vtab, Copy );
- astSetDump( vtab, Dump, "SkyAxis", "Celestial coordinate axis" );
-
-/* Initialize constants for converting between hours, degrees and radians. */
- LOCK_MUTEX2
- palSlaDtf2r( 1, 0, 0.0, &hr2rad, &stat );
- palSlaDaf2r( 1, 0, 0.0, °2rad, &stat );
- palSlaDaf2r( 180, 0, 0.0, &pi, &stat );
- piby2 = 0.5*pi;
- UNLOCK_MUTEX2
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static void ParseDHmsFormat( const char *fmt, int digs, char *sep, int *plus,
- int *lead_zero, int *as_time, int *dh, int *min,
- int *sec, int *ndp, int *status ) {
-/*
-* Name:
-* ParseDHmsFormat
-
-* Purpose:
-* Parse a format specifier for degrees/hours, minutes and seconds.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* void ParseDHmsFormat( const char *fmt, int digs, char *sep, int *plus,
-* int *lead_zero, int *as_time, int *dh, int *min,
-* int *sec, int *ndp, int *status )
-
-* Class Membership:
-* SkyAxis member function.
-
-* Description:
-* This function parses a SkyAxis format specifier which describes
-* how to convert an angle in radians into a text string with
-* separate fields for degrees/hours, minutes and seconds.
-
-* Parameters:
-* fmt
-* Pointer to a null terminated string containing the format
-* specifier. For details of the syntax of this string, see the
-* DHmsFormat function.
-* digs
-* The default number of digits of precision to use. This is used
-* if the given format specifier indicates the number of decimal
-* places to use with the string ".*". In this case, the returned
-* value for "ndp" will be set to produce the number of digits of
-* precision given by "digs".
-* sep
-* Pointer to a location in which a single character will be
-* returned to indicate which separator should be used to
-* separate the fields. The returned value will be one of ' '
-* (use a blank as the separator), ':' (use a colon as the
-* separator) or 'l' (use one of the letters "hdms" as
-* appropriate) or 'g' (use one of the letters "hdms" but
-* include suitable escape sequences to allow the Plot class to draw
-* the letter as a small super-script).
-* plus
-* Pointer to an int in which a boolean value will be returned
-* to indicate if a plus sign should be prefixed to positive
-* values.
-* lead_zero
-* Pointer to an int in which a boolean value will be returned
-* to indicate if leading zeros should be prefixed to the value
-* so that the first field is always of constant (maximum)
-* width, as would be required in a fixed-width table. Leading
-* zeros are always prefixed to any fields that follow.
-* as_time
-* Pointer to an int in which a boolean value will be returned
-* to indicate whether the value is to be formatted as a time
-* (e.g. in hours) rather than as an angle (in degrees).
-* dh
-* Pointer to an int in which a boolean value will be returned
-* to indicate whether a degrees or hours field is required.
-* min
-* Pointer to an int in which a boolean value will be returned
-* to indicate whether a minutes field is required.
-* sec
-* Pointer to an int in which a boolean value will be returned
-* to indicate whether a seconds field is required.
-* ndp
-* Pointer to an int in which to return the number of digits
-* required following the decimal point in the final field. A
-* value of zero indicates that the decimal point should be
-* omitted. See parameter "digs".
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Acknowledgements:
-* - This function is a close approximation to a Fortran 77 routine
-* written by Clive Davenhall which implements the system of format
-* specifiers for angles described in his document on the CAT
-* catalogue access library (Starlink User Note 181). It supports
-* the same format specifiers.
-*/
-
-/* Local Variables: */
- int decpos; /* Offset of decimal point */
- int i; /* Loop counter for format characters */
- int ndpval; /* Number of decimal places required */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Initialise. */
- *as_time = -1;
- *lead_zero = 0;
- *dh = 0;
- *min = 0;
- *ndp = 0;
- *plus = 0;
- *sec = 0;
- *sep = ':';
- decpos = -1;
-
-/* Loop to inspect and classify each character. */
- for ( i = 0; fmt[ i ]; i++ ) {
- switch ( fmt[ i ] ) {
-
-/* Note if a '+' sign is needed. */
- case '+':
- *plus = 1;
- break;
-
-/* Note if leading zeros are needed. */
- case 'Z': case 'z':
- *lead_zero = 1;
- break;
-
-/* Set the required separator. Note we only use graphical separators if
- astEscapes indicates that escape sequences are currently being used. */
- case 'I': case 'i':
- *sep = ':';
- break;
- case 'B': case 'b':
- *sep = ' ';
- break;
- case 'L': case 'l':
- *sep = 'l';
- break;
- case 'G': case 'g':
- *sep = astEscapes( -1 ) ? 'g' : 'l';
- break;
-
-/* Note if the value is to be formatted as a time (but not if a
- degrees or hours field has already been specified). */
- case 'T': case 't':
- if ( *as_time == -1 ) *as_time = 1;
- break;
-
-/* Note if a degrees or hours field is required (and hence whether the
- value is to be formatted as a time or an angle). */
- case 'H': case 'h':
- *dh = 1;
- *as_time = 1;
- break;
- case 'D': case 'd':
- *dh = 1;
- *as_time = 0;
- break;
-
-/* Note if a minutes field is required. */
- case 'M': case 'm':
- *min = 1;
- break;
-
-/* Note if a seconds field is required. */
- case 'S': case 's':
- *sec = 1;
- break;
-
-/* Note if decimal places are required. */
- case '.':
- decpos = i;
- }
- }
-
-/* Format the value as an angle by default. */
- if ( *as_time == -1 ) *as_time = 0;
-
-/* Use degrees (or hours) as the default field. */
- if ( !*min && !*sec ) *dh = 1;
-
-/* Omit the seconds field if the degrees/hours field is present but
- the minutes field is not. */
- if ( *dh && !*min ) *sec = 0;
-
-/* Determine the default number of decimal places following the final field.
- This is the number which will be used if the format specifier does not
- indicate how many decimal places should be produced. It is shosen to
- produce the requested total number of digits of precision. */
-
-/* If decimal places are required, attempt to read the integer value
- following the decimal point which specifies how many. If successful,
- and a valid (positive or zero) result was obtained, note its value. If
- an asterisk follows the decimal point, use a value determined by the
- supplied "digs" value. */
- if ( ( decpos >= 0 ) && ( decpos < ( i - 1 ) ) ) {
-
- if ( astSscanf( fmt + decpos + 1, "%d", &ndpval ) == 1 ) {
- if ( ndpval >= 0 ) *ndp = ndpval;
-
- } else if ( fmt[ decpos + 1 ] == '*' ) {
- *ndp = digs;
- if( *as_time ) {
- *ndp = ( digs > 2 ) ? digs : 2;
- if( *dh ) *ndp -= 2;
- } else {
- *ndp = ( digs > 3 ) ? digs : 3;
- if( *dh ) *ndp -= 3;
- }
- if( *min ) *ndp -= 2;
- if( *sec ) *ndp -= 2;
- if( *ndp < 0 ) *ndp = 0;
- }
- }
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a SkyAxis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* void SetAttrib( AstObject *this, const char *setting, int *status )
-
-* Class Membership:
-* SkyAxis member function (over-rides the astSetAttrib method
-* inherited from the Axis class).
-
-* Description:
-* This function assigns an attribute value for a SkyAxis, the
-* attribute and its value being specified by means of a string of
-* the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in
-* lower case with no white space present. The value to the right
-* of the "=" should be a suitable textual representation of the
-* value to be assigned and this will be interpreted according to
-* the attribute's data type. White space surrounding the value is
-* only significant for string attributes.
-
-* Parameters:
-* this
-* Pointer to the SkyAxis.
-* setting
-* Pointer to a null terminated string specifying the new
-* attribute value.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstSkyAxis *this; /* Pointer to the SkyAxis structure */
- int as_time; /* Format values as times? */
- int centrezero; /* SkyAxis range centred on zero? */
- int is_latitude; /* SkyAxis is a latitude axis? */
- int len; /* Length of setting string */
- int nc; /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyAxis structure. */
- this = (AstSkyAxis *) this_object;
-
-/* Obtain the length of the setting string. */
- len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
- the setting string and extract the attribute value (or an offset to
- it in the case of string values). In each case, use the value set
- in "nc" to check that the entire string was matched. Once a value
- has been obtained, use the appropriate method to set it. */
-
-/* AsTime. */
-/* ------- */
- if ( nc = 0,
- ( 1 == astSscanf( setting, "astime= %d %n", &as_time, &nc ) )
- && ( nc >= len ) ) {
- astSetAxisAsTime( this, as_time );
-
-/* IsLatitude. */
-/* ----------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "islatitude= %d %n", &is_latitude, &nc ) )
- && ( nc >= len ) ) {
- astSetAxisIsLatitude( this, is_latitude );
-
-/* CentreZero. */
-/* ----------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "centrezero= %d %n", ¢rezero, &nc ) )
- && ( nc >= len ) ) {
- astSetAxisCentreZero( this, centrezero );
-
-/* Pass any unrecognised attribute setting to the parent method for further
- interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-}
-
-static void SetAxisFormat( AstAxis *this_axis, const char *format, int *status ) {
-/*
-* Name:
-* SetAxisFormat
-
-* Purpose:
-* Set a value for the Format attribute of a SkyAxis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* void SetAxisFormat( AstAxis *this, const char *format )
-
-* Class Membership:
-* SkyAxis member function (over-rides the astSetAxisFormat method inherited
-* from the Axis class).
-
-* Description:
-* This function sets a new value for the Format attribute of a SkyAxis.
-
-* Parameters:
-* this
-* Pointer to the SkyAxis.
-* format
-* Pointer to a null terminated string containing the new Format value.
-
-* Returned Value:
-* void
-
-* Notes:
-* - For details of the syntax of the Format string, see the DHmsFormat
-* function.
-*/
-
-/* Local Variables: */
- AstSkyAxis *this; /* Pointer to the SkyAxis structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyAxis structure. */
- this = (AstSkyAxis *) this_axis;
-
-/* Store a pointer to a copy of the Format string in the SkyAxis structure. */
- this->skyformat = astStore( this->skyformat, format,
- strlen( format ) + (size_t) 1 );
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a SkyAxis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* SkyAxis member function (over-rides the astTestAttrib protected
-* method inherited from the Axis class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate
-* whether a value has been set for one of a SkyAxis' attributes.
-
-* Parameters:
-* this
-* Pointer to the SkyAxis.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSkyAxis *this; /* Pointer to the SkyAxis structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the SkyAxis structure. */
- this = (AstSkyAxis *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* AsTime. */
-/* ------- */
- if ( !strcmp( attrib, "astime" ) ) {
- result = astTestAxisAsTime( this );
-
-/* IsLatitude. */
-/* ----------- */
- } else if ( !strcmp( attrib, "islatitude" ) ) {
- result = astTestAxisIsLatitude( this );
-
-/* CentreZero. */
-/* ----------- */
- } else if ( !strcmp( attrib, "centrezero" ) ) {
- result = astTestAxisCentreZero( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static int TestAxisFormat( AstAxis *this_axis, int *status ) {
-/*
-* Name:
-* TestAxisFormat
-
-* Purpose:
-* Test if a value has been set for the Format attribute of a SkyAxis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* int TestAxisFormat( AstAxis *this, int *status )
-
-* Class Membership:
-* SkyAxis member function (over-rides the astTestAxisFormat method
-* inherited from the Axis class).
-
-* Description:
-* This function returns 0 or 1 to indicate whether a value has been set
-* for the Format attribute of a SkyAxis.
-
-* Parameters:
-* this
-* Pointer to the SkyAxis.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero if no Format value has been set, otherwise one.
-
-* Notes:
-* - This function will return a value of zero if it is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSkyAxis *this; /* Pointer to the SkyAxis structure */
- int result; /* Result to be returned */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Obtain a pointer to the SkyAxis structure. */
- this = (AstSkyAxis *) this_axis;
-
-/* The Format string has been set if the pointer to it is not NULL. */
- result = ( this->skyformat != NULL );
-
-/* Return the result. */
- return result;
-}
-
-static int AxisUnformat( AstAxis *this_axis, const char *string,
- double *value, int *status ) {
-/*
-* Name:
-* AxisUnformat
-
-* Purpose:
-* Read a formatted coordinate value for a SkyAxis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* int AxisUnformat( AstAxis *axis, const char *string, double *value, int *status )
-
-* Class Membership:
-* SkyAxis member function (over-rides the astAxisUnformat method
-* inherited from the Axis class).
-
-* Description:
-* This function reads a formatted coordinate value for a SkyAxis
-* (supplied as a string) and returns the equivalent numerical
-* value as a double. It also returns the number of characters read
-* from the string.
-
-* Parameters:
-* this
-* Pointer to the SkyAxis.
-* string
-* Pointer to a constant null-terminated string containing the
-* formatted coordinate value.
-* value
-* Pointer to a double in which the coordinate value read will be
-* returned (in radians).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The number of characters read from the string to obtain the
-* coordinate value.
-
-* Notes:
-* - Any white space at the beginning of the string will be
-* skipped, as also will any trailing white space following the
-* coordinate value read. The function's return value will reflect
-* this.
-* - A function value of zero (and no coordinate value) will be
-* returned, without error, if the string supplied does not contain
-* a suitably formatted value.
-* - The string "<bad>" is recognised as a special case and will
-* generate the value AST__BAD, without error. The test for this
-* string is case-insensitive and permits embedded white space.
-* - A function result of zero will be returned and no coordinate
-* value will be returned via the "value" pointer if this function
-* is invoked with the global error status set, or if it should
-* fail for any reason.
-*-
-*/
-
-/* Local Constants: */
-#define FMT_LEN 50 /* Length of format buffer */
-
-/* Local Variables: */
- char fmtbuf[ FMT_LEN + 1 ]; /* Buffer for C format specification */
- char fmtsep; /* Format field separator character */
- char last_sep; /* Previous separator character */
- char sep; /* Separator character */
- char sep_used; /* Separator character being used */
- char sign[ 2 ]; /* Sign character as string */
- const char *field_start[ 3 ]; /* Pointer to start of each field */
- const char *fmt; /* Pointer to SkyAxis Format string */
- const char *s; /* Pointer to current reading position */
- const char *string_start; /* Pointer to first significant character */
- double field[ 3 ]; /* Field values */
- double testval; /* Value to test for invalid fields */
- int angle_or_time; /* Value known to be angle or time? */
- int as_time; /* Value is a time (else an angle)? */
- int decimal; /* Decimal point in field? */
- int dh; /* Hours field required? */
- int digs; /* Default no. of digits of precision */
- int exponent; /* Exponent at end of field? */
- int field_id[ 3 ]; /* Field identification (0 = don't know) */
- int final; /* Final field read? */
- int good_sep; /* Separator character valid? */
- int i; /* Loop counter for characters */
- int ifield; /* Loop counter for fields */
- int lead_zero; /* Add leading zeros? */
- int len; /* Significant length of string */
- int m; /* Number of characters read by astSscanf */
- int match; /* Character pattern matches? */
- int min; /* Minutes field required? */
- int n; /* Number of characters read by astSscanf */
- int nc; /* Total no. characters read */
- int nchar; /* Number of characters in erroneous value */
- int ndp; /* Number of decimal places */
- int next_id; /* Next field ID to use (0 = don't know) */
- int nfield; /* Number of fields read */
- int nread; /* No. characters read for current field */
- int plus; /* Add leading plus sign? */
- int positive; /* Value is positive? */
- int sec; /* Seconds field required? */
- int sep_angle_or_time; /* Separator indicates angle or time? */
- int sep_field_id; /* Field ID from separator (0 = don't know) */
- int sep_index; /* Index of separator character in table */
- int sep_len; /* Length of separator plus trailing space */
- int suffix_sep; /* Field has a suffix separator? */
-
-/* Local Data: */
- const char *sep_list = /* List of separator characters recognised */
- " :hHdDmM'sS\"";
-
- const int angle_or_time_list[] = /* Whether separator indicates angle or
- time (1 or 2). Zero => don't know. */
- { 0, 0, 2, 2, 1, 1, 0, 0, 1, 0, 0, 1 };
-
- const int field_id_list[] = /* Whether separator identifies previous field
- (1, 2, or 3). Zero => doesn't identify. */
- { 0, 0, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3 };
-
- const double fieldvalue[ 3 ] = /* Nominal field values (degrees/hours) */
- { 1.0, 1.0 / 60.0, 1.0 / 3600.0 };
-
-/* Initialise. */
- nc = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return nc;
-
-/* Obtain the SkyAxis Format string. If its starts with a "%" sign, use
- the parent AxisUnformat method inherited from the Axis class. Use
- a private method to obtain the Format string, in case the syntax has been
- over-ridden by a derived class. */
- fmt = GetAxisFormat( this_axis, status );
- if( fmt && fmt[0] == '%' ) {
- nc = (*parent_axisunformat)( this_axis, string, value, status );
-
-/* Otherwise, parse it to determine the default choice of input format. */
- } else if( astOK ){
- digs = astGetAxisDigits( this_axis );
- ParseDHmsFormat( fmt, digs, &fmtsep, &plus, &lead_zero, &as_time, &dh,
- &min, &sec, &ndp, status );
-
-/* Initialise a pointer into the string and advance it to the first
- non-white space character. Save a copy of this pointer. */
- s = string;
- while ( isspace( (int) *s ) ) s++;
- string_start = s;
-
-/* Read sign information. */
-/* ---------------------- */
-/* Attempt to read an optional sign character ("+" or "-"), possibly
- surrounded by white space. Set a flag to indicate if the returned
- value should be positive or not. Increment the string pointer to
- the next significant character. */
- positive = 1;
- n = 0;
- if ( 1 == astSscanf( s, " %1[+-] %n", sign, &n ) ) {
- positive = ( *sign == '+' );
- s += n;
- }
-
-/* Loop to read field information. */
-/* ------------------------------- */
-/* Initialise, then loop to read the values of up to three fields and
- to identify the separators that accompany them. */
- angle_or_time = 0;
- last_sep = '\0';
- next_id = 0;
- nfield = 0;
- sep_used = '\0';
- suffix_sep = 0;
- sep_len = 0;
- for ( ifield = 0; ifield < 3; ifield++ ) {
-
-/* Set the default field value. */
- field[ ifield ] = 0.0;
-
-/* If a prefix separator was identified for the second and subsequent
- fields (when the previous field was being read), then step over the
- prefix, including any following white space. */
- if ( ifield && !suffix_sep ) s += sep_len;
-
-/* Note where in the input string the field's numerical value
- starts. */
- field_start[ ifield ] = s;
-
-/* Each field must consist of a string of digits, possibly surrounded
- by white space, except that an optional decimal point may also be
- present (in which case it indicates the final field). Since we want
- to exclude signs, etc. from these fields, we must first identify a
- valid sequence of digits, before attempting to read them as a number.
- Start by assuming that we will find a decimal point but not an
- exponent. */
- decimal = 1;
- exponent = 0;
-
-/* Match a field and obtain its value. */
-/* ----------------------------------- */
-/* Look for a character sequence like "12.345", or similar, setting a
- flag to identify a match. */
- n = 0;
- match = ( 0 == astSscanf( s, "%*[0123456789].%*[0123456789]%n", &n ) )
- && n;
-
-/* If that failed, then look for a sequence like "12.", or similar. */
- if ( !match ) {
- n = 0;
- match = ( 0 == astSscanf( s, "%*[0123456789].%n", &n ) ) && n;
- }
-
-/* If that also failed, then look for a sequence like ".12", or similar. */
- if ( !match ) {
- n = 0;
- match = ( 0 == astSscanf( s, ".%*[0123456789]%n", &n ) ) && n;
- }
-
-/* If that also failed, then look for a sequence containing digits only. */
- if ( !match ) {
- n = 0;
- match = ( 0 == astSscanf( s, "%*[0123456789]%n", &n ) ) && n;
-
-/* Note we have not found a decimal point. */
- decimal = 0;
- }
-
-/* Now look for numbers that end with an exponent. First check that the
- string starts with a sequence of digits with or without a decimal point. */
- if( match ) {
-
-/* See if the numbers are followed by an exponent with an explicit sign
- character. If so, increment the number of characters in the numerical
- string prefix. */
- m = 0;
- if( ( 0 == astSscanf( s + n, "%*1[Ee]%*1[+-]%*[0123456789]%n", &m ) )
- && m ) {
- n += m;
- exponent = 1;
-
-/* If the above check failed, see if the numbers are followed by an exponent
- without an explicit sign character. If so, increment the number of
- characters in the numerical string prefix. */
- } else {
- m = 0;
- if( ( 0 == astSscanf( s + n, "%*1[Ee]%*[0123456789]%n", &m ) )
- && m ) {
- n += m;
- exponent = 1;
- }
- }
- }
-
-/* If we identified a suitable sequence of characters above, we will
- now read them as a number. To prevent any subsequent characters
- being included as part of this number, the field width must be
- restricted to the length of the sequence we found. Write a format
- specification to read a double with this field width, followed by
- optional white space, and to return the total number of characters
- read. */
- nread = 0;
- if ( match ) {
- (void) sprintf( fmtbuf, "%%%dlf %%n", n );
-
-/* Use this format specification to read the field value. If
- successful, increment the string pointer to the next significant
- character. */
- if ( 1 == astSscanf( s, fmtbuf, field + ifield, &nread ) ) s += nread;
- }
-
-/* Note the total number of characters read up to the end of the
- numerical value in this field (including any following white
- space). */
- nc = s - string;
-
-/* Identify the following separator. */
-/* --------------------------------- */
-/* We will now attempt to identify the field separator (if any) which
- follows the field we have just read. By default, we behave as if
- the separator is a space. Note we have actually found a space (at
- least) if extra white space characters were read as part of the
- field value above. */
- sep = ' ';
- good_sep = ( nread > n );
-
-/* Look for one of the recognised separator characters. If one is
- found, save a copy of it and note we appear (so far) to have a
- valid separator. */
- sep_len = 0;
- if ( *s && strchr( sep_list, *s ) ) {
- sep = *s;
- good_sep = 1;
-
-/* Set "sep_len" to the number of characters associated with the
- separator. This includes any following white space. */
- while ( isspace( (int) s[ ++sep_len ] ) );
- }
-
-/* Identify the separator character by looking it up in the separator
- list (this just uses a space if no valid separator has been
- found). */
- sep_index = strchr( sep_list, sep ) - sep_list;
-
-/* Determine if the separator can be used to identify the field which
- preceded it and if it allows us to determine whether an angle or a
- time is being read. Both of these properties are specified in data
- tables (with zero indicating that the separator didn't supply any
- information). */
- sep_field_id = field_id_list[ sep_index ];
- sep_angle_or_time = angle_or_time_list[ sep_index ];
-
-/* Validate the separator. */
-/* ----------------------- */
-/* Now perform further checks that the separator is valid
- (i.e. conforms to the required syntax). If it appears to identify
- the previous field (i.e. is a "suffix" separator like "m" or "s"),
- then it is valid only if its field ID is no less than the ID value
- that would be used next, based on previous fields (if any), and no
- less than the current field number. This ensures that fields occur
- in the correct order without duplication. */
- if ( good_sep ) {
- if ( sep_field_id ) {
- good_sep = ( sep_field_id >= next_id ) &&
- ( sep_field_id > ifield );
-
-/* Otherwise (i.e. we appear to have a "prefix" separator like ":" or
- " "), it is valid if it is the first one used, or if it matches the
- previous one used. Keep a note of the first such separator used for
- checking subsequent ones. */
- } else {
- good_sep = !sep_used || ( sep == sep_used );
- if ( !sep_used ) sep_used = sep;
- }
- }
-
-/* If the separator seems OK and we don't yet know whether we are reading
- an angle or a time, then use whatever information the separator
- provides about this. */
- if ( good_sep ) {
- if ( !angle_or_time ) {
- angle_or_time = sep_angle_or_time;
-
-/* If we already know whether we are reading an angle or a time and
- the current separator also contains information about this, then
- check that these sources of information are compatible. This
- prevents inconsistent use of angle/time field separators. */
- } else {
- good_sep = !sep_angle_or_time ||
- ( sep_angle_or_time == angle_or_time );
- }
- }
-
-/* Update the count of characters read for this field and note if we
- have identified a valid suffix separator. */
- if ( good_sep ) nread += sep_len;
- suffix_sep = good_sep && sep_field_id;
-
-/* Identify which field was read. */
-/* ------------------------------ */
-/* If we have a valid suffix separator, store the field ID. Also make
- a note of the ID to use for the next field. */
- if ( suffix_sep ) {
- field_id[ ifield ] = sep_field_id;
- next_id = sep_field_id + 1;
-
-/* Step over the separator (plus any following white space) and update
- the total number of characters read (prefix separators are not
- accounted for until we start to read the next field). */
- s += sep_len;
- nc = s - string;;
-
-/* If the separator does not identify the current field, then assign a
- field ID based on the previous field (if any). Update the ID to use
- for the next field, if known. */
- } else {
- field_id[ ifield ] = next_id;
- if ( next_id ) next_id++;
- }
-
-/* Count fields and exit when done. */
-/* -------------------------------- */
-/* If no characters have been read for the current field, then
- disregard the field if: (a) it is the first one (i.e. there is
- nothing to read), or (b) it follows a white space separator
- (because trailing space does not delimit an extra field). In either
- case, we have now read all the fields. Otherwise, increment the
- count of fields read. */
- final = 0;
- if ( !nread && ( !ifield || isspace( (int) last_sep ) ) ) {
- final = 1;
- } else {
- nfield++;
- }
-
-/* We have also read all the fields if: (a) the last one contained a
- decimal point, or (b) the last one ended with an exponent, or (c)
- the next character is not a valid field separator, or (d) we have
- read the seconds field so the next field ID would exceed 3. */
- final = final || decimal || exponent || !good_sep || ( next_id > 3 );
-
-/* Quit reading if we have read the final field. Otherwise, save the
- separator character and attempt to read the next field. */
- if ( final ) break;
- last_sep = sep;
- }
-
-/* Complete the identification of fields. */
-/* -------------------------------------- */
-/* Although we have propagated field IDs from earlier ones to later
- ones in the loop above, we have still not done the reverse. This
- means there there may still be some leading fields which have not
- been positively identified (i.e. still have a field ID of zero). In
- fact, all the fields we have read might still be unidentified at
- this point. */
-
-/* Calculate the field ID that would apply to the final field we have
- read in the absence of any other information. This depends on the
- number of leading fields that are expected to be missing. */
- next_id = nfield + ( dh ? 0 : ( min ? 1 : 2 ) );
- if ( next_id > 3 ) next_id = 3;
-
-/* Loop through the fields in reverse order, propagating any positive
- identifications backwards towards the first field. If no fields
- have been positively identified, then they are simply numbered
- consecutively based on the value calculated above. */
- for ( ifield = nfield - 1; ifield >= 0; ifield-- ) {
- if ( field_id[ ifield ] ) {
- next_id = field_id[ ifield ] - 1;
- } else {
- field_id[ ifield ] = next_id--;
- }
- }
-
-/* Handle inability to read any value. */
-/* ----------------------------------- */
-/* If no fields were read, then check to see if we are trying to read
- the string "<bad>" (or similar) possibly surrounded by, or
- containing, white space. If so, return the coordinate value
- AST__BAD. */
- if ( !nfield ) {
- if ( n = 0,
- ( 0 == astSscanf( string, " < %*1[Bb] %*1[Aa] %*1[Dd] > %n", &n )
- && n ) ) {
- *value = AST__BAD;
- nc = n;
-
-/* If the string still cannot be read, then return a function value of
- zero. */
- } else {
- nc = 0;
- }
-
-/* Finally determine angle or time. */
-/* -------------------------------- */
-/* If one or more fields have been read, check if we know whether to
- interpret the value as an angle or a time (if not, we continue to
- use the default choice obtained from the SkyAxis Format string). */
- } else {
- if ( angle_or_time ) as_time = ( angle_or_time == 2 );
-
-/* Validate field values. */
-/* ---------------------- */
-/* If OK, check all fields except the first one for a valid value (we
- allow the first field to be unconstrained, so that angles and times
- outside the conventional ranges can be represented). We only need
- to test for values over 60.0, since negative values can't be
- read. */
- if ( astOK ) {
- for ( ifield = 1; ifield < nfield; ifield++ ) {
- if ( field[ ifield ] >= 60.0 ) {
-
-/* If a suspect field is found, we must now re-read it. This is
- because values like "59.9999..." are valid, even if they round up
- to 60, whereas "60" isn't. To distinguish these cases, we read the
- digits that occur before the decimal point (if any). Determine how
- many such digits there are. */
- n = 0;
- if ( ( 0 == astSscanf( field_start[ ifield ],
- "%*[0123456789]%n", &n ) ) && n ) {
-
-/* If there are none (this shouldn't happen), the field is
- valid. Otherwise, construct a format specification to read these
- digits as a floating point number. */
- (void) sprintf( fmtbuf, "%%%dlf", n );
-
-/* Read the digits and compare the result with 60.0. Report an error
- and quit if necessary, limiting the string length in the error
- message to include just the significant characters in the value
- read. */
- if ( ( 1 == astSscanf( field_start[ ifield ], fmtbuf,
- &testval ) )
- && ( testval >= 60.0 ) ) {
- nchar = nc - ( string_start - string );
- for ( i = len = 0; i < nchar; i++ ) {
- if ( !isspace( (int) string_start[ i ] ) ) {
- len = i + 1;
- }
- }
- astError( AST__UNFER, "Invalid %s%s value in sky "
- "coordinate \"%.*s\".", status, as_time ? "" : "arc",
- ( field_id[ ifield ] == 2 ) ? "minutes" :
- "seconds",
- len, string_start );
- break;
- }
- }
- }
- }
- }
-
-/* Calculate final result. */
-/* ----------------------- */
-/* If OK, calculate the result by summing the field values and converting
- to radians. */
- if ( astOK ) {
- *value = 0.0;
- for ( ifield = 0; ifield < nfield; ifield++ ) {
- *value += field[ ifield ] *
- fieldvalue[ field_id[ ifield ] - 1 ] *
- ( as_time ? hr2rad : deg2rad );
- }
-
-/* Change sign if necessary. */
- if ( !positive ) *value = - *value;
- }
- }
- }
-
-/* If an error occurred, set the number of characters read to zero. */
- if ( !astOK ) nc = 0;
-
-/* Return the number of characters read. */
- return nc;
-
-/* Undefine macros local to this function. */
-#undef FMT_LEN
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with the
- SkyAxis class using the macros defined for this purpose in the "object.h"
- file. For a description of each attribute, see the class interface (in the
- associated .h file). */
-
-/* AsTime. */
-/* ------- */
-/* The value is constrained to be -INT_MAX, 0 or 1, with -INT_MAX for
- "undefined". The default value is 0 unless the "IsLatitude"
- attribute has been explicitly set to 0, in which case "AsTime"
- defaults to 1. */
-astMAKE_CLEAR(SkyAxis,AxisAsTime,as_time,-INT_MAX)
-astMAKE_GET(SkyAxis,AxisAsTime,int,0,( ( this->as_time != -INT_MAX ) ?
- this->as_time :
- ( astTestAxisIsLatitude( this ) &&
- !astGetAxisIsLatitude( this ) ) ))
-astMAKE_SET(SkyAxis,AxisAsTime,int,as_time,( value != 0 ))
-astMAKE_TEST(SkyAxis,AxisAsTime,( this->as_time != -INT_MAX ))
-
-/* IsLatitude. */
-/* ----------- */
-/* The value is constrained to be -INT_MAX, 0 or 1, with -INT_MAX for
- "undefined". The default value is 0. */
-astMAKE_CLEAR(SkyAxis,AxisIsLatitude,is_latitude,-INT_MAX)
-astMAKE_GET(SkyAxis,AxisIsLatitude,int,0,( this->is_latitude != -INT_MAX ?
- this->is_latitude : 0 ))
-astMAKE_SET(SkyAxis,AxisIsLatitude,int,is_latitude,( value != 0 ))
-astMAKE_TEST(SkyAxis,AxisIsLatitude,( this->is_latitude != -INT_MAX ))
-
-/* CentreZero. */
-/* ----------- */
-/* The value is constrained to be -INT_MAX, 0 or 1, with -INT_MAX for
- "undefined". The default value is equal to the value of IsLatitude. */
-astMAKE_CLEAR(SkyAxis,AxisCentreZero,centrezero,-INT_MAX)
-astMAKE_GET(SkyAxis,AxisCentreZero,int,0,( this->centrezero != -INT_MAX ?
- this->centrezero : astGetAxisIsLatitude( this ) ))
-astMAKE_SET(SkyAxis,AxisCentreZero,int,centrezero,( value != 0 ))
-astMAKE_TEST(SkyAxis,AxisCentreZero,( this->centrezero != -INT_MAX ))
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for SkyAxis objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for SkyAxis objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstSkyAxis *in; /* Pointer to input SkyAxis */
- AstSkyAxis *out; /* Pointer to output SkyAxis */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output SkyAxis structures. */
- in = (AstSkyAxis *) objin;
- out = (AstSkyAxis *) objout;
-
-/* For safety, first clear any references to the input memory from
- the output SkyAxis. */
- out->skyformat = NULL;
-
-/* Make copies of the allocated strings. */
- if ( in->skyformat ) out->skyformat = astStore( NULL, in->skyformat,
- strlen( in->skyformat ) + (size_t) 1 );
-
-/* If an error occurred, clean up by freeing all memory allocated above. */
- if ( !astOK ) {
- out->skyformat = astFree( out->skyformat );
- }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for SkyAxis objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for SkyAxis objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstSkyAxis *this; /* Pointer to the SkyAxis structure */
-
-/* Obtain a pointer to the SkyAxis structure. */
- this = (AstSkyAxis *) obj;
-
-/* Free all allocated memory. */
- this->skyformat = astFree( this->skyformat );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for SkyAxis objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the SkyAxis class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the SkyAxis whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstAxis *this_axis; /* Pointer to Axis structure */
- AstSkyAxis *this; /* Pointer to the SkyAxis structure */
- const char *sval; /* Pointer to string value */
- int ival; /* Integer value */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyAxis structure. */
- this = (AstSkyAxis *) this_object;
-
-/* Write out values representing the instance variables for the
- SkyAxis class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* Format. */
-/* ------- */
-/* We must write out the Format value stored locally as it over-rides
- that provided by the Axis class. */
- this_axis = (AstAxis *) this;
- set = TestAxisFormat( this_axis, status );
- sval = set ? GetAxisFormat( this_axis, status ) : astGetAxisFormat( this );
- astWriteString( channel, "Format", set, 0, sval, "Format specifier" );
-
-/* IsLatitude. */
-/* ----------- */
- set = TestAxisIsLatitude( this, status );
- ival = set ? GetAxisIsLatitude( this, status ) : astGetAxisIsLatitude( this );
- astWriteInt( channel, "IsLat", set, 0, ival,
- ival ? "Latitude axis (not longitude)" :
- "Longitude axis (not latitude)" );
-
-/* CentreZero. */
-/* ----------- */
- set = TestAxisCentreZero( this, status );
- ival = set ? GetAxisCentreZero( this, status ) : astGetAxisCentreZero( this );
- astWriteInt( channel, "CnZer", set, 0, ival,
- ival ? "Display axis values in range -PI -> +PI" :
- "Display axis values in range 0 -> 2.PI" );
-
-/* AsTime. */
-/* ------- */
- set = TestAxisAsTime( this, status );
- ival = set ? GetAxisAsTime( this, status ) : astGetAxisAsTime( this );
- astWriteInt( channel, "AsTime", set, 0, ival,
- ival ? "Display values as times (not angles)" :
- "Display values as angles (not times)" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsASkyAxis and astCheckSkyAxis functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(SkyAxis,Axis)
-astMAKE_CHECK(SkyAxis)
-
-AstSkyAxis *astSkyAxis_( const char *options, int *status, ...) {
-/*
-*+
-* Name:
-* astSkyAxis
-
-* Purpose:
-* Create a SkyAxis.
-
-* Type:
-* Public function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* AstSkyAxis *astSkyAxis( const char *options, int *status, ... )
-
-* Class Membership:
-* SkyAxis constructor.
-
-* Description:
-* This function creates a new SkyAxis and optionally initialises its
-* attributes.
-
-* Parameters:
-* options
-* Pointer to a null terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new SkyAxis. The syntax used is the same as for the
-* astSet method and may include "printf" format specifiers identified
-* by "%" symbols in the normal way.
-* status
-* Pointer to the inherited status variable.
-* ...
-* If the "options" string contains "%" format specifiers, then an
-* optional list of arguments may follow it in order to supply values to
-* be substituted for these specifiers. The rules for supplying these
-* are identical to those for the astSet method (and for the C "printf"
-* function).
-
-* Returned Value:
-* A pointer to the new SkyAxis.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstSkyAxis *new; /* Pointer to new SkyAxis */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the SkyAxis, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitSkyAxis( NULL, sizeof( AstSkyAxis ), !class_init, &class_vtab,
- "SkyAxis" );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new SkyAxis'
- attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new SkyAxis. */
- return new;
-}
-
-AstSkyAxis *astSkyAxisId_( const char *options, ... ) {
-/*
-* Name:
-* astSkyAxisId_
-
-* Purpose:
-* Create a SkyAxis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* AstSkyAxis *astSkyAxisId_( const char *options, ... )
-
-* Class Membership:
-* SkyAxis constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astSkyAxis constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astSkyAxis_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astSkyAxis_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astSkyAxis_.
-
-* Returned Value:
-* The ID value associated with the new SkyAxis.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstSkyAxis *new; /* Pointer to new SkyAxis */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the SkyAxis, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitSkyAxis( NULL, sizeof( AstSkyAxis ), !class_init, &class_vtab,
- "SkyAxis" );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new SkyAxis'
- attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new SkyAxis. */
- return astMakeId( new );
-}
-
-AstSkyAxis *astInitSkyAxis_( void *mem, size_t size, int init,
- AstSkyAxisVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitSkyAxis
-
-* Purpose:
-* Initialise a SkyAxis.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* AstSkyAxis *astInitSkyAxis( void *mem, size_t size, int init,
-* AstSkyAxisVtab *vtab, const char *name )
-
-* Class Membership:
-* SkyAxis initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new SkyAxis object. It allocates memory (if necessary) to accommodate
-* the SkyAxis plus any additional data associated with the derived class.
-* It then initialises a SkyAxis structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a SkyAxis at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the SkyAxis is to be created. This
-* must be of sufficient size to accommodate the SkyAxis data
-* (sizeof(SkyAxis)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the SkyAxis (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the SkyAxis
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the SkyAxis's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new SkyAxis.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astClass
-* method).
-
-* Returned Value:
-* A pointer to the new SkyAxis.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstSkyAxis *new; /* Pointer to the new SkyAxis */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitSkyAxisVtab( vtab, name );
-
-/* Initialise an Axis structure (the parent class) as the first component
- within the SkyAxis structure, allocating memory if necessary. */
- new = (AstSkyAxis *) astInitAxis( mem, size, 0, (AstAxisVtab *) vtab,
- name );
-
- if ( astOK ) {
-
-/* Initialise the SkyAxis data. */
-/* ---------------------------- */
-/* Initialise all attributes to their "undefined" values. */
- new->as_time = -INT_MAX;
- new->is_latitude = -INT_MAX;
- new->centrezero = -INT_MAX;
- new->skyformat = NULL;
-
-/* If an error occurred, clean up by deleting the new SkyAxis. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new SkyAxis. */
- return new;
-}
-
-AstSkyAxis *astLoadSkyAxis_( void *mem, size_t size,
- AstSkyAxisVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadSkyAxis
-
-* Purpose:
-* Load a SkyAxis.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "skyaxis.h"
-* AstSkyAxis *astLoadSkyAxis( void *mem, size_t size,
-* AstSkyAxisVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* SkyAxis loader.
-
-* Description:
-* This function is provided to load a new SkyAxis using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* SkyAxis structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a SkyAxis at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the SkyAxis is to be
-* loaded. This must be of sufficient size to accommodate the
-* SkyAxis data (sizeof(SkyAxis)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the SkyAxis (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the SkyAxis structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstSkyAxis) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new SkyAxis. If this is NULL, a pointer
-* to the (static) virtual function table for the SkyAxis class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "SkyAxis" is used instead.
-
-* Returned Value:
-* A pointer to the new SkyAxis.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstSkyAxis *new; /* Pointer to the new SkyAxis */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this SkyAxis. In this case the
- SkyAxis belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstSkyAxis );
- vtab = &class_vtab;
- name = "SkyAxis";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitSkyAxisVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built SkyAxis. */
- new = astLoadAxis( mem, size, (AstAxisVtab *) vtab, name, channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "SkyAxis" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* Format. */
-/* ------- */
-/* Note that string values do not require any additional processing. */
- new->skyformat = astReadString( channel, "format", NULL );
-
-/* IsLatitude. */
-/* ----------- */
- new->is_latitude = astReadInt( channel, "islat", -INT_MAX );
- if ( TestAxisIsLatitude( new, status ) ) {
- SetAxisIsLatitude( new, new->is_latitude, status );
- }
-
-/* CentreZero. */
-/* ----------- */
- new->centrezero = astReadInt( channel, "cnzer", -INT_MAX );
- if ( TestAxisCentreZero( new, status ) ) {
- SetAxisCentreZero( new, new->centrezero, status );
- }
-
-/* AsTime. */
-/* ------- */
- new->as_time = astReadInt( channel, "astime", -INT_MAX );
- if ( TestAxisAsTime( new, status ) ) SetAxisAsTime( new, new->as_time, status );
-
-/* If an error occurred, clean up by deleting the new SkyAxis. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new SkyAxis pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-/* (No more to define at present.) */
-
-
-
-
-
diff --git a/ast-5.3-1/skyaxis.h b/ast-5.3-1/skyaxis.h
deleted file mode 100644
index 4b11b28..0000000
--- a/ast-5.3-1/skyaxis.h
+++ /dev/null
@@ -1,419 +0,0 @@
-#if !defined( SKYAXIS_INCLUDED ) /* Include this file only once */
-#define SKYAXIS_INCLUDED
-/*
-*+
-* Name:
-* skyaxis.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the SkyAxis class.
-
-* Invocation:
-* #include "skyaxis.h"
-
-* Description:
-* This include file defines the interface to the SkyAxis class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The SkyAxis class extends the Axis class to represent angles on
-* the sky measured in radians. It provides alternative formatting
-* facilities for representing these coordinate values either as
-* angles (in degrees) or as time (in hours) using sexagesimal
-* notation. It also provides alternative defaults for certain
-* attributes and adds new attributes and methods of its own which
-* are needed to manipulate angular coordinates on the sky.
-
-* Inheritance:
-* The SkyAxis class inherits from the Axis class.
-
-* Attributes Over-Ridden:
-* Format (string)
-* The SkyAxis class defines a new syntax for this string.
-* Label (string)
-* The SkyAxis class defines new default values. These may
-* depend on other attribute settings.
-* Symbol (string)
-* The SkyAxis class defines new default values. These may
-* depend on other attribute settings.
-* Unit (string)
-* The SkyAxis class defines new default values. These may
-* depend on other attribute settings.
-
-* New Attributes Defined:
-* AsTime (integer)
-* A boolean value which indicates whether SkyAxis coordinate
-* values should be formatted for display as times (instead of
-* angles). It is used to determine the default format to use if
-* no explicit value has been set for the Format attribute.
-* CentreZero (integer)
-* A boolean value which indicates whether a SkyAxis value should
-* be normalised into the range [-PI,+PI] or [0,2.PI] when astNorm
-* is used.
-* IsLatitude (integer)
-* A boolean value which indicates whether a SkyAxis is a
-* latitude axis (as opposed to a longitude axis). It is used to
-* determine default axis labels and symbols. It also determines the
-* default value for the "AsTime" attribute (since longitudes on
-* the sky are usually expressed as times).
-
-* Methods Over-Ridden:
-* Public:
-* astAxisFormat
-* Format a coordinate value for a SkyAxis.
-* astAxisNorm
-* Normalise a SkyAxis coordinate value.
-* astAxisUnformat
-* Read a formatted coordinate value for a SkyAxis.
-
-* Protected:
-* astAxisAbbrev
-* Abbreviate a formatted SkyAxis value by skipping leading fields.
-* astAxisDistance
-* Find the distance between two SkyAxis values.
-* astAxisGap
-* Find a "nice" gap for tabulating SkyAxis values.
-* astClearAxisFormat
-* Clear the Format attribute for a SkyAxis.
-* astGetAxisDirection
-* Obtain the value of the Direction attribute for a SkyAxis.
-* astGetAxisFormat
-* Obtain a pointer to the Format attribute for a SkyAxis.
-* astGetAxisLabel
-* Obtain a pointer to the Label attribute for a SkyAxis.
-* astGetAxisSymbol
-* Obtain a pointer to the Symbol attribute for a SkyAxis.
-* astGetAxisUnit
-* Obtain a pointer to the Unit attribute for a SkyAxis.
-* astSetAxisFormat
-* Set a value for the Format attribute of a SkyAxis.
-* astTestAxisFormat
-* Test if a value has been set for the Format attribute of a SkyAxis.
-* astAxisOffset
-* Add an increment onto a supplied SkyAxis value.
-* astAxisOverlay
-* Overlay the attributes of a template SkyAxis on to another Axis.
-* astSetAttrib
-* Set an attribute value for a SkyAxis.
-
-* New Methods Defined:
-* Public:
-* None.
-
-* Protected:
-* astClearAxisAsTime
-* Clear the AsTime attribute for a SkyAxis.
-* astClearAxisCentreZero
-* Clear the CentreZero attribute for a SkyAxis.
-* astClearAxisIsLatitude
-* Clear the IsLatitude attribute for a SkyAxis.
-* astGetAxisAsTime
-* Obtain the value of the AsTime attribute for a SkyAxis.
-* astGetAxisIsLatitude
-* Obtain the value of the IsLatitude attribute for a SkyAxis.
-* astGetAxisCentreZero
-* Obtain the value of the CentreZero attribute for a SkyAxis.
-* astSetAxisAsTime
-* Set a value for the AsTime attribute of a SkyAxis.
-* astSetAxisIsLatitude
-* Set a value for the IsLatitude attribute of a SkyAxis.
-* astSetAxisCentreZero
-* Set a value for the CentreZero attribute of a SkyAxis.
-* astTestAxisAsTime
-* Test if a value has been set for the AsTime attribute of a SkyAxis.
-* astTestAxisIsLatitude
-* Test if a value has been set for the IsLatitude attribute of a
-* SkyAxis.
-* astTestAxisCentreZero
-* Test if a value has been set for the CentreZero attribute of a
-* SkyAxis.
-
-* Other Class Functions:
-* Public:
-* astIsASkyAxis
-* Test class membership.
-* astSkyAxis
-* Create an SkyAxis.
-
-* Protected:
-* astCheckSkyAxis
-* Validate class membership.
-* astInitSkyAxis
-* Initialise an SkyAxis.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstSkyAxis
-* SkyAxis object type.
-
-* Protected:
-* AstSkyAxisVtab
-* SkyAxis virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 29-MAR-1996 (RFWS):
-* Original version.
-* 25-APR-1996 (RFWS):
-* Made all attribute access functions protected.
-* 13-MAY-1996 (RFWS):
-* Documented over-riding of the astGetAxisDirection method.
-* 26-FEB-1998 (RFWS):
-* Over-ride the astAxisUnformat method.
-* 8-JAN-2003 (DSB):
-* Added protected astInitSkyAxisVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "axis.h" /* Coordinate axes (parent class) */
-
-/* Macros */
-/* ====== */
-/* Define constants used to size global arrays in this module. */
-/* Define numerical constants for use in thie module. */
-#define AST__SKYAXIS_GETAXISFORMAT_BUFF_LEN 50
-#define AST__SKYAXIS_DHMSFORMAT_BUFF_LEN 70
-#define AST__SKYAXIS_DHMSUNIT_BUFF_LEN 17
-#define AST__SKYAXIS_GETATTRIB_BUFF_LEN 50
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-
-/* Type Definitions. */
-/* ================= */
-/* SkyAxis structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each
- object in the class (e.g. its instance variables). */
-typedef struct AstSkyAxis {
-
-/* Attributes inherited from the parent class. */
- AstAxis axis; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- char *skyformat; /* Pointer to sky format string */
- int as_time; /* Format angles as time (hours)? */
- int is_latitude; /* SkyAxis is a latitude axis? */
- int centrezero; /* Normalised range is zero-centred? */
-} AstSkyAxis;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstSkyAxisVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstAxisVtab axis_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- int (* GetAxisAsTime)( AstSkyAxis *, int * );
- int (* GetAxisIsLatitude)( AstSkyAxis *, int * );
- int (* GetAxisCentreZero)( AstSkyAxis *, int * );
- int (* TestAxisAsTime)( AstSkyAxis *, int * );
- int (* TestAxisIsLatitude)( AstSkyAxis *, int * );
- int (* TestAxisCentreZero)( AstSkyAxis *, int * );
- void (* ClearAxisAsTime)( AstSkyAxis *, int * );
- void (* ClearAxisIsLatitude)( AstSkyAxis *, int * );
- void (* ClearAxisCentreZero)( AstSkyAxis *, int * );
- void (* SetAxisAsTime)( AstSkyAxis *, int, int * );
- void (* SetAxisIsLatitude)( AstSkyAxis *, int, int * );
- void (* SetAxisCentreZero)( AstSkyAxis *, int, int * );
-} AstSkyAxisVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstSkyAxisGlobals {
- AstSkyAxisVtab Class_Vtab;
- int Class_Init;
- char DHmsFormat_Buff[ AST__SKYAXIS_DHMSFORMAT_BUFF_LEN + 1 ];
- char DHmsUnit_Buff[ AST__SKYAXIS_DHMSUNIT_BUFF_LEN + 1 ];
- char GetAttrib_Buff[ AST__SKYAXIS_GETATTRIB_BUFF_LEN + 1 ];
- char GetAxisFormat_Buff[ AST__SKYAXIS_GETAXISFORMAT_BUFF_LEN + 1 ];
-} AstSkyAxisGlobals;
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(SkyAxis) /* Check class membership */
-astPROTO_ISA(SkyAxis) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstSkyAxis *astSkyAxis_( const char *, int *, ...);
-#else
-AstSkyAxis *astSkyAxisId_( const char *, ... )__attribute__((format(printf,1,2)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstSkyAxis *astInitSkyAxis_( void *, size_t, int, AstSkyAxisVtab *,
- const char *, int * );
-
-/* Vtab initialiser. */
-void astInitSkyAxisVtab_( AstSkyAxisVtab *, const char *, int * );
-
-/* Loader. */
-AstSkyAxis *astLoadSkyAxis_( void *, size_t, AstSkyAxisVtab *,
- const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitSkyAxisGlobals_( AstSkyAxisGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-#if defined(astCLASS) /* Protected */
-int astGetAxisAsTime_( AstSkyAxis *, int * );
-int astGetAxisIsLatitude_( AstSkyAxis *, int * );
-int astGetAxisCentreZero_( AstSkyAxis *, int * );
-int astTestAxisAsTime_( AstSkyAxis *, int * );
-int astTestAxisIsLatitude_( AstSkyAxis *, int * );
-int astTestAxisCentreZero_( AstSkyAxis *, int * );
-void astClearAxisAsTime_( AstSkyAxis *, int * );
-void astClearAxisIsLatitude_( AstSkyAxis *, int * );
-void astClearAxisCentreZero_( AstSkyAxis *, int * );
-void astSetAxisAsTime_( AstSkyAxis *, int, int * );
-void astSetAxisIsLatitude_( AstSkyAxis *, int, int * );
-void astSetAxisCentreZero_( AstSkyAxis *, int, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckSkyAxis(this) astINVOKE_CHECK(SkyAxis,this,0)
-#define astVerifySkyAxis(this) astINVOKE_CHECK(SkyAxis,this,1)
-
-/* Test class membership. */
-#define astIsASkyAxis(this) astINVOKE_ISA(SkyAxis,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astSkyAxis astINVOKE(F,astSkyAxis_)
-#else
-#define astSkyAxis astINVOKE(F,astSkyAxisId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitSkyAxis(mem,size,init,vtab,name) \
-astINVOKE(O,astInitSkyAxis_(mem,size,init,vtab,name,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitSkyAxisVtab(vtab,name) astINVOKE(V,astInitSkyAxisVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadSkyAxis(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadSkyAxis_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckSkyAxis to validate SkyAxis pointers
- before use. This provides a contextual error report if a pointer to
- the wrong sort of object is supplied. */
-#if defined(astCLASS) /* Protected */
-#define astClearAxisAsTime(this) \
-astINVOKE(V,astClearAxisAsTime_(astCheckSkyAxis(this),STATUS_PTR))
-#define astClearAxisIsLatitude(this) \
-astINVOKE(V,astClearAxisIsLatitude_(astCheckSkyAxis(this),STATUS_PTR))
-#define astGetAxisAsTime(this) \
-astINVOKE(V,astGetAxisAsTime_(astCheckSkyAxis(this),STATUS_PTR))
-#define astGetAxisIsLatitude(this) \
-astINVOKE(V,astGetAxisIsLatitude_(astCheckSkyAxis(this),STATUS_PTR))
-#define astSetAxisAsTime(this,value) \
-astINVOKE(V,astSetAxisAsTime_(astCheckSkyAxis(this),value,STATUS_PTR))
-#define astSetAxisIsLatitude(this,value) \
-astINVOKE(V,astSetAxisIsLatitude_(astCheckSkyAxis(this),value,STATUS_PTR))
-#define astTestAxisAsTime(this) \
-astINVOKE(V,astTestAxisAsTime_(astCheckSkyAxis(this),STATUS_PTR))
-#define astTestAxisIsLatitude(this) \
-astINVOKE(V,astTestAxisIsLatitude_(astCheckSkyAxis(this),STATUS_PTR))
-
-#define astClearAxisCentreZero(this) \
-astINVOKE(V,astClearAxisCentreZero_(astCheckSkyAxis(this),STATUS_PTR))
-#define astGetAxisCentreZero(this) \
-astINVOKE(V,astGetAxisCentreZero_(astCheckSkyAxis(this),STATUS_PTR))
-#define astSetAxisCentreZero(this,value) \
-astINVOKE(V,astSetAxisCentreZero_(astCheckSkyAxis(this),value,STATUS_PTR))
-#define astTestAxisCentreZero(this) \
-astINVOKE(V,astTestAxisCentreZero_(astCheckSkyAxis(this),STATUS_PTR))
-
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/skyframe.c b/ast-5.3-1/skyframe.c
deleted file mode 100644
index 0641b6d..0000000
--- a/ast-5.3-1/skyframe.c
+++ /dev/null
@@ -1,11701 +0,0 @@
-/*
-*class++
-* Name:
-* SkyFrame
-
-* Purpose:
-* Celestial coordinate system description.
-
-* Constructor Function:
-c astSkyFrame
-f AST_SKYFRAME
-
-* Description:
-* A SkyFrame is a specialised form of Frame which describes
-* celestial longitude/latitude coordinate systems. The particular
-* celestial coordinate system to be represented is specified by
-* setting the SkyFrame's System attribute (currently, the default
-* is ICRS) qualified, as necessary, by a mean Equinox value and/or
-* an Epoch.
-*
-* For each of the supported celestial coordinate systems, a SkyFrame
-* can apply an optional shift of origin to create a coordinate system
-* representing offsets within the celestial coordinate system from some
-* specified reference point. This offset coordinate system can also be
-* rotated to define new longitude and latitude axes. See attributes
-* SkyRef, SkyRefIs, SkyRefP and AlignOffset.
-*
-* All the coordinate values used by a SkyFrame are in
-* radians. These may be formatted in more conventional ways for
-c display by using astFormat.
-f display by using AST_FORMAT.
-
-* Inheritance:
-* The SkyFrame class inherits from the Frame class.
-
-* Attributes:
-* In addition to those attributes common to all Frames, every
-* SkyFrame also has the following attributes:
-*
-* - AlignOffset: Align SkyFrames using the offset coordinate system?
-* - AsTime(axis): Format celestial coordinates as times?
-* - Equinox: Epoch of the mean equinox
-* - LatAxis: Index of the latitude axis
-* - LonAxis: Index of the longitude axis
-* - NegLon: Display longitude values in the range [-pi,pi]?
-* - Projection: Sky projection description.
-* - SkyRef: Position defining location of the offset coordinate system
-* - SkyRefIs: Selects the nature of the offset coordinate system
-* - SkyRefP: Position defining orientation of the offset coordinate system
-
-* Functions:
-c The SkyFrame class does not define any new functions beyond those
-f The SkyFrame class does not define any new routines beyond those
-* which are applicable to all Frames.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 4-MAR-1996 (RFWS):
-* Original version.
-* 17-MAY-1996 (RFWS):
-* Tidied up, etc.
-* 31-JUL-1996 (RFWS):
-* Added support for attributes and a public interface.
-* 11-SEP-1996 (RFWS):
-* Added Gap (written by DSB).
-* 24-SEP-1996 (RFWS):
-* Added I/O facilities.
-* 27-FEB-1997 (RFWS):
-* Improved the public prologues.
-* 27-MAY-1997 (RFWS):
-* Modified to use a new public interface to the SlaMap class
-* and to use the astSimplify method to remove redundant
-* conversions.
-* 16-JUN-1997 (RFWS):
-* Fixed bug in axis associations returned by astMatch if axes
-* were swapped.
-* 16-JUL-1997 (RFWS):
-* Added Projection attribute.
-* 14-NOV-1997 (RFWS):
-* Corrected the omission of axis permutations from astNorm.
-* 21-JAN-1998 (RFWS):
-* Ensure that Title and Domain values appropriate to a SkyFrame
-* are preserved if a Frame result is generated by SubFrame.
-* 26-FEB-1998 (RFWS):
-* Over-ride the astUnformat method.
-* 3-APR-2001 (DSB):
-* Added "Unknown" option for the System attribute. Added read-only
-* attributes LatAxis and LonAxis.
-* 21-JUN-2001 (DSB):
-* Added astAngle and astOffset2.
-* 4-SEP-2001 (DSB):
-* Added NegLon attribute, and astResolve method.
-* 9-SEP-2001 (DSB):
-* Added astBear method.
-* 21-SEP-2001 (DSB):
-* Removed astBear method.
-* 10-OCT-2002 (DSB):
-* Moved definitions of macros for SkyFrame system values from
-* this file into skyframe.h.
-* 24-OCT-2002 (DSB):
-* Modified MakeSkyMapping so that any two SkyFrames with system=unknown
-* are assumed to be related by a UnitMap. previously, they were
-* considered to be unrelated, resulting in no ability to convert from
-* one to the other. This could result for instance in astConvert
-* being unable to find a maping from a SkyFrame to itself.
-* 15-NOV-2002 (DSB):
-* Moved System and Epoch attributes to the Frame class.
-* 8-JAN-2003 (DSB):
-* Changed private InitVtab method to protected astInitSkyFrameVtab
-* method.
-* 11-JUN-2003 (DSB):
-* Added ICRS option for System attribute, and made it the default
-* in place of FK5.
-* 27-SEP-2003 (DSB):
-* Added HELIOECLIPTIC option for System attribute.
-* 19-APR-2004 (DSB):
-* Added SkyRef, SkyRefIs, SkyRefP and AlignOffset attributes.
-* 8-SEP-2004 (DSB):
-* Added astResolvePoints method.
-* 2-DEC-2004 (DSB):
-* Added System "J2000"
-* 27-JAN-2005 (DSB):
-* Fix memory leaks in astLoadSkyFrame_ and Match.
-* 7-APR-2005 (DSB):
-* Allow SkyRefIs to be set to "Ignored".
-* 12-MAY-2005 (DSB):
-* Override astNormBox method.
-* 15-AUG-2005 (DSB):
-* Added AZEL system.
-* 13-SEP-2005 (DSB):
-* Override astClearSystem so that SkyRef/SkyRefPcan be converted
-* from the original System to the default System.
-* 19-SEP-2005 (DSB):
-* Changed default for SkyRefIs from ORIGIN to IGNORED.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 22-FEB-2006 (DSB):
-* Store the Local Apparent Sidereal Time in the SkyFrame structure
-* in order to avoid expensive re-computations.
-* 22-AUG-2006 (DSB):
-* Ensure the cached Local Apparent Siderial Time is initialised
-* when initialising or loading a SkyFrame.
-* 22-SEP-2006 (DSB):
-* Report an error in SetSystem if it is not possible to convert
-* from old to new systems.
-* 3-OCT-2006 (DSB):
-* Added Equation of Equinoxes to the SkyFrame structure.
-* 6-OCT-2006 (DSB):
-* - Guard against annulling null pointers in subFrame.
-* - Add Dut1 attribute
-* - Use linear approximation for LAST over short periods (less
-* than 0.001 of a day)
-* - Remove Equation of Equinoxes from the SkyFrame structure.
-* 10-OCT-2006 (DSB):
-* Use "AlOff" instead of "AlignOffset" as the external channel name
-* for the AlignOffset attribute. The longer form exceeded the
-* limit that can be used by the Channel class.
-* 14-OCT-2006 (DSB):
-* - Move Dut1 attribute to the Frame class.
-* - Use the TimeFrame class to do the TDB->LAST conversions.
-* 17-JAN-2007 (DSB):
-* - Use a UnitMap to align offset coordinate systems in two
-* SkyFrames, regardless of other attribute values.
-* - Only align in offset coordinates if both target and template
-* have a non-zero value for AlignOffset.
-* 23-JAN-2007 (DSB):
-* Modified so that a SkyFrame can be used as a template to find a
-* SkyFrame contained within a CmpFrame. This involves changes in
-* Match and the removal of the local versions of SetMaxAxes and
-* SetMinAxes.
-* 4-JUL-2007 (DSB):
-* Modified GetLast to use the correct solar to sidereal conversion
-* factor. As a consequence the largest acceptable epoch gap before
-* the LAST needs to be recalculated has been increased.
-* 11-JUL-2007 (DSB):
-* Override astSetEpoch and astClearEpoch by implementations which
-* update the LAST value stored in the SkyFrame.
-* 7-AUG-2007 (DSB):
-* - Set a value for the CentreZero attribute when extracting a
-* SkyAxis from a SkyFrame in function SubFrame.
-* - In SubFrame, clear extended attributes such as System after
-* all axis attributes have been "fixated.
-* 30-AUG-2007 (DSB):
-* Override astSetDut1 and astClearDut1 by implementations which
-* update the LAST value stored in the SkyFrame.
-* 31-AUG-2007 (DSB):
-* - Cache the magnitude of the diurnal aberration vector in the
-* SkyFrame structure for use when correcting for diurnal aberration.
-* - Modify the azel conversions to include correction for diurnal
-* aberration.
-* - Override astClearObsLat and astSetObsLat by implementations which
-* reset the magnitude of the diurnal aberration vector.
-* 3-SEP-2007 (DSB):
-* In SubFrame, since AlignSystem is extended by the SkyFrame class
-* it needs to be cleared before invoking the parent SubFrame
-* method in cases where the result Frame is not a SkyFrame.
-* 2-OCT-2007 (DSB):
-* In Overlay, clear AlignSystem as well as System before calling
-* the parent overlay method.
-* 10-OCT-2007 (DSB):
-* In MakeSkyMapping, correct the usage of variables "system" and
-* "align_sys" when aligning in AZEL.
-* 18-OCT-2007 (DSB):
-* Compare target and template AlignSystem values in Match, rather
-* than comparing target and result AlignSystem values in MakeSkyMapping
-* (since result is basically a copy of target).
-* 27-NOV-2007 (DSB):
-* - Modify SetSystem to ensure that SkyRef and SkyRefP position are
-* always transformed as absolute values, rather than as offset
-* values.
-* - Modify SubMatch so that a value of zero is assumed for
-* AlignOffset when restoring thre integrity of a FrameSet.
-* 15-DEC-2008 (DSB):
-* Improve calculation of approximate Local Apparent Sidereal time
-* by finding and using the ratio of solar to sidereal time
-* independently for each approximation period.
-* 14-JAN-2009 (DSB):
-* Override the astIntersect method.
-* 21-JAN-2009 (DSB):
-* Fix mis-use of results buffers for GetFormat and GetAttrib.
-* 16-JUN-2009 (DSB):
-* All sky coordinate systems currently supported by SkyFrame are
-* left handed. So fix GetDirection method to return zero for all
-* longitude axes and 1 for all latitude axes.
-* 18-JUN-2009 (DSB):
-* Incorporate the new ObsAlt attribute.
-* 23-SEP-2009 (DSB):
-* Allow some rounding error when checking for changes in SetObsLon
-* and SetDut1. This reduces the number of times the expensive
-* calculation of LAST is performed.
-* 24-SEP-2009 (DSB);
-* Create a static cache of LAST values stored in the class virtual
-* function table. These are used in preference to calculating a new
-* value from scratch.
-* 25-SEP-2009 (DSB);
-* Do not calculate LAST until it is needed.
-* 12-OCT-2009 (DSB);
-* - Handle 2.PI->0 discontinuity in cached LAST values.
-* 12-OCT-2009 (BED);
-* - Fix bug in caching LAST value.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS SkyFrame
-
-/* Define the first and last acceptable System values. */
-#define FIRST_SYSTEM AST__FK4
-#define LAST_SYSTEM AST__AZEL
-
-/* Speed of light (AU per day) (from SLA_AOPPA) */
-#define C 173.14463331
-
-/* Ratio between solar and sidereal time (from SLA_AOPPA) */
-#define SOLSID 1.00273790935
-
-/* Define values for the different values of the SkyRefIs attribute. */
-#define BAD_REF 0
-#define POLE_REF 1
-#define ORIGIN_REF 2
-#define IGNORED_REF 3
-#define POLE_STRING "Pole"
-#define ORIGIN_STRING "Origin"
-#define IGNORED_STRING "Ignored"
-
-/* Define other numerical constants for use in this module. */
-#define GETATTRIB_BUFF_LEN 200
-#define GETFORMAT_BUFF_LEN 50
-#define GETLABEL_BUFF_LEN 40
-#define GETSYMBOL_BUFF_LEN 20
-#define GETTITLE_BUFF_LEN 200
-
-/*
-*
-* Name:
-* MAKE_CLEAR
-
-* Purpose:
-* Implement a method to clear a single value in a multi-valued attribute.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "skyframe.h"
-* MAKE_CLEAR(attr,component,assign,nval)
-
-* Class Membership:
-* Defined by the SkyFrame class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Clear<Attribute>( AstSkyFrame *this, int axis )
-*
-* and an external interface function of the form:
-*
-* void astClear<Attribute>_( AstSkyFrame *this, int axis )
-*
-* which implement a method for clearing a single value in a specified
-* multi-valued attribute for an axis of a SkyFrame.
-
-* Parameters:
-* attr
-* The name of the attribute to be cleared, as it appears in the function
-* name (e.g. Label in "astClearLabelAt").
-* component
-* The name of the class structure component that holds the attribute
-* value.
-* assign
-* An expression that evaluates to the value to assign to the component
-* to clear its value.
-* nval
-* Specifies the number of values in the multi-valued attribute. The
-* "axis" values supplied to the created function should be in the
-* range zero to (nval - 1).
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attr,component,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attr( AstSkyFrame *this, int axis, int *status ) { \
-\
- int axis_p; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Validate and permute the axis index. */ \
- axis_p = astValidateAxis( this, axis, "astClear" #attr ); \
-\
-/* Assign the "clear" value. */ \
- if( astOK ) { \
- this->component[ axis_p ] = (assign); \
- } \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astClear##attr##_( AstSkyFrame *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
- (**astMEMBER(this,SkyFrame,Clear##attr))( this, axis, status ); \
-}
-
-
-/*
-*
-* Name:
-* MAKE_GET
-
-* Purpose:
-* Implement a method to get a single value in a multi-valued attribute.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "skyframe.h"
-* MAKE_GET(attr,type,bad_value,assign,nval)
-
-* Class Membership:
-* Defined by the SkyFrame class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static <Type> Get<Attribute>( AstSkyFrame *this, int axis )
-*
-* and an external interface function of the form:
-*
-* <Type> astGet<Attribute>_( AstSkyFrame *this, int axis )
-*
-* which implement a method for getting a single value from a specified
-* multi-valued attribute for an axis of a SkyFrame.
-
-* Parameters:
-* attr
-* The name of the attribute whose value is to be obtained, as it
-* appears in the function name (e.g. Label in "astGetLabel").
-* type
-* The C type of the attribute.
-* bad_value
-* A constant value to return if the global error status is set, or if
-* the function fails.
-* assign
-* An expression that evaluates to the value to be returned. This can
-* use the string "axis" to represent the zero-based value index.
-* nval
-* Specifies the number of values in the multi-valued attribute. The
-* "axis" values supplied to the created function should be in the
-* range zero to (nval - 1).
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_GET(attr,type,bad_value,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static type Get##attr( AstSkyFrame *this, int axis, int *status ) { \
- int axis_p; /* Permuted axis index */ \
- type result; /* Result to be returned */ \
-\
-/* Initialise */\
- result = (bad_value); \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* Validate and permute the axis index. */ \
- axis_p = astValidateAxis( this, axis, "astGet" #attr ); \
-\
-/* Assign the result value. */ \
- if( astOK ) { \
- result = (assign); \
- } \
-\
-/* Check for errors and clear the result if necessary. */ \
- if ( !astOK ) result = (bad_value); \
-\
-/* Return the result. */ \
- return result; \
-} \
-/* External interface. */ \
-/* ------------------- */ \
-type astGet##attr##_( AstSkyFrame *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return (bad_value); \
-\
-/* Invoke the required method via the virtual function table. */ \
- return (**astMEMBER(this,SkyFrame,Get##attr))( this, axis, status ); \
-}
-
-/*
-*
-* Name:
-* MAKE_SET
-
-* Purpose:
-* Implement a method to set a single value in a multi-valued attribute
-* for a SkyFrame.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "skyframe.h"
-* MAKE_SET(attr,type,component,assign,nval)
-
-* Class Membership:
-* Defined by the SkyFrame class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Set<Attribute>( AstSkyFrame *this, int axis, <Type> value )
-*
-* and an external interface function of the form:
-*
-* void astSet<Attribute>_( AstSkyFrame *this, int axis, <Type> value )
-*
-* which implement a method for setting a single value in a specified
-* multi-valued attribute for a SkyFrame.
-
-* Parameters:
-* attr
-* The name of the attribute to be set, as it appears in the function
-* name (e.g. Label in "astSetLabelAt").
-* type
-* The C type of the attribute.
-* component
-* The name of the class structure component that holds the attribute
-* value.
-* assign
-* An expression that evaluates to the value to be assigned to the
-* component.
-* nval
-* Specifies the number of values in the multi-valued attribute. The
-* "axis" values supplied to the created function should be in the
-* range zero to (nval - 1).
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attr,type,component,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attr( AstSkyFrame *this, int axis, type value, int *status ) { \
-\
- int axis_p; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Validate and permute the axis index. */ \
- axis_p = astValidateAxis( this, axis, "astSet" #attr ); \
-\
-/* Store the new value in the structure component. */ \
- if( astOK ) { \
- this->component[ axis ] = (assign); \
- } \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astSet##attr##_( AstSkyFrame *this, int axis, type value, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
- (**astMEMBER(this,SkyFrame,Set##attr))( this, axis, value, status ); \
-}
-
-/*
-*
-* Name:
-* MAKE_TEST
-
-* Purpose:
-* Implement a method to test if a single value has been set in a
-* multi-valued attribute for a class.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "skyframe.h"
-* MAKE_TEST(attr,assign,nval)
-
-* Class Membership:
-* Defined by the SkyFrame class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static int Test<Attribute>( AstSkyFrame *this, int axis )
-*
-* and an external interface function of the form:
-*
-* int astTest<Attribute>_( AstSkyFrame *this, int axis )
-*
-* which implement a method for testing if a single value in a specified
-* multi-valued attribute has been set for a class.
-
-* Parameters:
-* attr
-* The name of the attribute to be tested, as it appears in the function
-* name (e.g. Label in "astTestLabelAt").
-* assign
-* An expression that evaluates to 0 or 1, to be used as the returned
-* value. This can use the string "axis" to represent the zero-based
-* index of the value within the attribute.
-* nval
-* Specifies the number of values in the multi-valued attribute. The
-* "axis" values supplied to the created function should be in the
-* range zero to (nval - 1).
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_TEST(attr,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static int Test##attr( AstSkyFrame *this, int axis, int *status ) { \
- int result; /* Value to return */ \
- int axis_p; /* Permuted axis index */ \
-\
-/* Initialise */ \
- result =0; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* Validate and permute the axis index. */ \
- axis_p = astValidateAxis( this, axis, "astTest" #attr ); \
-\
-/* Assign the result value. */ \
- if( astOK ) { \
- result = (assign); \
- } \
-\
-/* Check for errors and clear the result if necessary. */ \
- if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
- return result; \
-} \
-/* External interface. */ \
-/* ------------------- */ \
-int astTest##attr##_( AstSkyFrame *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return 0; \
-\
-/* Invoke the required method via the virtual function table. */ \
- return (**astMEMBER(this,SkyFrame,Test##attr))( this, axis, status ); \
-}
-
-
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "globals.h" /* Thread-safe global data access */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points (for AST__BAD) */
-#include "unitmap.h" /* Unit Mappings */
-#include "permmap.h" /* Coordinate permutations */
-#include "cmpmap.h" /* Compound Mappings */
-#include "slamap.h" /* SLALIB sky coordinate Mappings */
-#include "timemap.h" /* Time conversions */
-#include "skyaxis.h" /* Sky axes */
-#include "frame.h" /* Parent Frame class */
-#include "matrixmap.h" /* Matrix multiplication */
-#include "sphmap.h" /* Cartesian<->Spherical transformations */
-#include "skyframe.h" /* Interface definition for this class */
-#include "pal.h" /* SLALIB library interface */
-#include "wcsmap.h" /* Factors of PI */
-#include "timeframe.h" /* Time system transformations */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <float.h>
-#include <limits.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Type Definitions. */
-/* ================= */
-
-/* Cached Line structure. */
-/* ---------------------- */
-/* This structure contains information describing a line segment within a
- SkyFrame. It differs from the AstLineDef defined in frame.h because
- positions are represented by 3D (x,y,z) cartesian coords rather than
- 2D (long,lat) coords. */
-
-typedef struct SkyLineDef {
- AstFrame *frame; /* Pointer to Frame in which the line is defined */
- double length; /* Line length */
- int infinite; /* Disregard the start and end of the line? */
- double start[3]; /* Unit vector defining start of line */
- double end[3]; /* Unit vector defining end of line */
- double dir[3]; /* Unit vector defining line direction */
- double q[3]; /* Unit vector perpendicular to line */
- double start_2d[2];
- double end_2d[2];
-} SkyLineDef;
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are used or extended by this
- class. */
-static AstSystemType (* parent_getalignsystem)( AstFrame *, int * );
-static AstSystemType (* parent_getsystem)( AstFrame *, int * );
-static const char *(* parent_format)( AstFrame *, int, double, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static const char *(* parent_getdomain)( AstFrame *, int * );
-static const char *(* parent_getformat)( AstFrame *, int, int * );
-static const char *(* parent_getlabel)( AstFrame *, int, int * );
-static const char *(* parent_getsymbol)( AstFrame *, int, int * );
-static const char *(* parent_gettitle)( AstFrame *, int * );
-static const char *(* parent_getunit)( AstFrame *, int, int * );
-static double (* parent_gap)( AstFrame *, int, double, int *, int * );
-static double (* parent_getbottom)( AstFrame *, int, int * );
-static double (* parent_getepoch)( AstFrame *, int * );
-static double (* parent_gettop)( AstFrame *, int, int * );
-static int (* parent_getdirection)( AstFrame *, int, int * );
-static int (* parent_getobjsize)( AstObject *, int * );
-static int (* parent_match)( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int (* parent_subframe)( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static int (* parent_testformat)( AstFrame *, int, int * );
-static int (* parent_unformat)( AstFrame *, int, const char *, double *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_cleardut1)( AstFrame *, int * );
-static void (* parent_clearepoch)( AstFrame *, int * );
-static void (* parent_clearformat)( AstFrame *, int, int * );
-static void (* parent_clearobsalt)( AstFrame *, int * );
-static void (* parent_clearobslat)( AstFrame *, int * );
-static void (* parent_clearobslon)( AstFrame *, int * );
-static void (* parent_clearsystem)( AstFrame *, int * );
-static void (* parent_overlay)( AstFrame *, const int *, AstFrame *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static void (* parent_setdut1)( AstFrame *, double, int * );
-static void (* parent_setepoch)( AstFrame *, double, int * );
-static void (* parent_setformat)( AstFrame *, int, const char *, int * );
-static void (* parent_setobsalt)( AstFrame *, double, int * );
-static void (* parent_setobslat)( AstFrame *, double, int * );
-static void (* parent_setobslon)( AstFrame *, double, int * );
-static void (* parent_setsystem)( AstFrame *, AstSystemType, int * );
-
-/* Factors for converting between hours, degrees and radians. */
-static double hr2rad;
-static double deg2rad;
-static double pi;
-static double piby2;
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->GetAttrib_Buff[ 0 ] = 0; \
- globals->GetFormat_Buff[ 0 ] = 0; \
- globals->GetLabel_Buff[ 0 ] = 0; \
- globals->GetSymbol_Buff[ 0 ] = 0; \
- globals->GetTitle_Buff[ 0 ] = 0; \
- globals->GetTitle_Buff2[ 0 ] = 0; \
- globals->TDBFrame = NULL; \
- globals->LASTFrame = NULL; \
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(SkyFrame)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(SkyFrame,Class_Init)
-#define class_vtab astGLOBAL(SkyFrame,Class_Vtab)
-#define getattrib_buff astGLOBAL(SkyFrame,GetAttrib_Buff)
-#define getformat_buff astGLOBAL(SkyFrame,GetFormat_Buff)
-#define getlabel_buff astGLOBAL(SkyFrame,GetLabel_Buff)
-#define getsymbol_buff astGLOBAL(SkyFrame,GetSymbol_Buff)
-#define gettitle_buff astGLOBAL(SkyFrame,GetTitle_Buff)
-#define gettitle_buff2 astGLOBAL(SkyFrame,GetTitle_Buff2)
-#define tdbframe astGLOBAL(SkyFrame,TDBFrame)
-#define lastframe astGLOBAL(SkyFrame,LASTFrame)
-
-
-
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX2 pthread_mutex_lock( &mutex2 );
-#define UNLOCK_MUTEX2 pthread_mutex_unlock( &mutex2 );
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-/* Buffer returned by GetAttrib. */
-static char getattrib_buff[ GETATTRIB_BUFF_LEN + 1 ];
-
-/* Buffer returned by GetFormat. */
-static char getformat_buff[ GETFORMAT_BUFF_LEN + 1 ];
-
-/* Default GetLabel string buffer */
-static char getlabel_buff[ GETLABEL_BUFF_LEN + 1 ];
-
-/* Default GetSymbol buffer */
-static char getsymbol_buff[ GETSYMBOL_BUFF_LEN + 1 ];
-
-/* Default Title string buffer */
-static char gettitle_buff[ AST__SKYFRAME_GETTITLE_BUFF_LEN + 1 ];
-static char gettitle_buff2[ AST__SKYFRAME_GETTITLE_BUFF_LEN + 1 ];
-
-/* TimeFrames for doing TDB<->LAST conversions. */
-static AstTimeFrame *tdbframe = NULL;
-static AstTimeFrame *lastframe = NULL;
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstSkyFrameVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-
-#endif
-
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstLineDef *LineDef( AstFrame *, const double[2], const double[2], int * );
-static AstMapping *OffsetMap( AstSkyFrame *, int * );
-static AstPointSet *ResolvePoints( AstFrame *, const double [], const double [], AstPointSet *, AstPointSet *, int * );
-static AstSystemType GetAlignSystem( AstFrame *, int * );
-static AstSystemType GetSystem( AstFrame *, int * );
-static AstSystemType SystemCode( AstFrame *, const char *, int * );
-static AstSystemType ValidateSystem( AstFrame *, AstSystemType, const char *, int * );
-static const char *Format( AstFrame *, int, double, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static const char *GetDomain( AstFrame *, int * );
-static const char *GetFormat( AstFrame *, int, int * );
-static const char *GetLabel( AstFrame *, int, int * );
-static const char *GetProjection( AstSkyFrame *, int * );
-static const char *GetSymbol( AstFrame *, int, int * );
-static const char *GetTitle( AstFrame *, int * );
-static const char *GetUnit( AstFrame *, int, int * );
-static const char *SystemString( AstFrame *, AstSystemType, int * );
-static double Angle( AstFrame *, const double[], const double[], const double[], int * );
-static double CalcLAST( AstSkyFrame *, double, double, double, double, double, int * );
-static double Distance( AstFrame *, const double[], const double[], int * );
-static double Gap( AstFrame *, int, double, int *, int * );
-static double GetBottom( AstFrame *, int, int * );
-static double GetCachedLAST( AstSkyFrame *, double, double, double, double, double, int * );
-static double GetEpoch( AstFrame *, int * );
-static double GetEquinox( AstSkyFrame *, int * );
-static void SetCachedLAST( AstSkyFrame *, double, double, double, double, double, double, int * );
-static void SetLast( AstSkyFrame *, int * );
-static double GetTop( AstFrame *, int, int * );
-static double Offset2( AstFrame *, const double[2], double, double, double[2], int * );
-static double GetDiurab( AstSkyFrame *, int * );
-static double GetLAST( AstSkyFrame *, int * );
-static int GetActiveUnit( AstFrame *, int * );
-static int GetAsTime( AstSkyFrame *, int, int * );
-static int GetDirection( AstFrame *, int, int * );
-static int GetLatAxis( AstSkyFrame *, int * );
-static int GetLonAxis( AstSkyFrame *, int * );
-static int GetNegLon( AstSkyFrame *, int * );
-static int GetObjSize( AstObject *, int * );
-static int IsEquatorial( AstSystemType, int * );
-static int LineContains( AstFrame *, AstLineDef *, int, double *, int * );
-static int LineCrossing( AstFrame *, AstLineDef *, AstLineDef *, double **, int * );
-static int LineIncludes( SkyLineDef *, double[3], int * );
-static int MakeSkyMapping( AstSkyFrame *, AstSkyFrame *, AstSystemType, AstMapping **, int * );
-static int Match( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int SubFrame( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int TestActiveUnit( AstFrame *, int * );
-static int TestAsTime( AstSkyFrame *, int, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestEquinox( AstSkyFrame *, int * );
-static int TestNegLon( AstSkyFrame *, int * );
-static int TestProjection( AstSkyFrame *, int * );
-static int Unformat( AstFrame *, int, const char *, double *, int * );
-static void ClearAsTime( AstSkyFrame *, int, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void ClearDut1( AstFrame *, int * );
-static void ClearEpoch( AstFrame *, int * );
-static void ClearEquinox( AstSkyFrame *, int * );
-static void ClearNegLon( AstSkyFrame *, int * );
-static void ClearObsAlt( AstFrame *, int * );
-static void ClearObsLat( AstFrame *, int * );
-static void ClearObsLon( AstFrame *, int * );
-static void ClearProjection( AstSkyFrame *, int * );
-static void ClearSystem( AstFrame *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void Intersect( AstFrame *, const double[2], const double[2], const double[2], const double[2], double[2], int * );
-static void LineOffset( AstFrame *, AstLineDef *, double, double, double[2], int * );
-static void MatchAxesX( AstFrame *, AstFrame *, int *, int * );
-static void Norm( AstFrame *, double[], int * );
-static void NormBox( AstFrame *, double[], double[], AstMapping *, int * );
-static void Offset( AstFrame *, const double[], const double[], double, double[], int * );
-static void Overlay( AstFrame *, const int *, AstFrame *, int * );
-static void Resolve( AstFrame *, const double [], const double [], const double [], double [], double *, double *, int * );
-static void SetAsTime( AstSkyFrame *, int, int, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetDut1( AstFrame *, double, int * );
-static void SetEpoch( AstFrame *, double, int * );
-static void SetEquinox( AstSkyFrame *, double, int * );
-static void SetNegLon( AstSkyFrame *, int, int * );
-static void SetObsAlt( AstFrame *, double, int * );
-static void SetObsLat( AstFrame *, double, int * );
-static void SetObsLon( AstFrame *, double, int * );
-static void SetProjection( AstSkyFrame *, const char *, int * );
-static void SetSystem( AstFrame *, AstSystemType, int * );
-static void Shapp( double, double *, double *, double, double *, int * );
-static void Shcal( double, double, double, double *, double *, int * );
-static void VerifyMSMAttrs( AstSkyFrame *, AstSkyFrame *, int, const char *, const char *, int * );
-
-static double GetSkyRef( AstSkyFrame *, int, int * );
-static int TestSkyRef( AstSkyFrame *, int, int * );
-static void SetSkyRef( AstSkyFrame *, int, double, int * );
-static void ClearSkyRef( AstSkyFrame *, int, int * );
-
-static double GetSkyRefP( AstSkyFrame *, int, int * );
-static int TestSkyRefP( AstSkyFrame *, int, int * );
-static void SetSkyRefP( AstSkyFrame *, int, double, int * );
-static void ClearSkyRefP( AstSkyFrame *, int, int * );
-
-static int GetSkyRefIs( AstSkyFrame *, int * );
-static int TestSkyRefIs( AstSkyFrame *, int * );
-static void SetSkyRefIs( AstSkyFrame *, int, int * );
-static void ClearSkyRefIs( AstSkyFrame *, int * );
-
-static int GetAlignOffset( AstSkyFrame *, int * );
-static int TestAlignOffset( AstSkyFrame *, int * );
-static void SetAlignOffset( AstSkyFrame *, int, int * );
-static void ClearAlignOffset( AstSkyFrame *, int * );
-
-/* Member functions. */
-/* ================= */
-static double Angle( AstFrame *this_frame, const double a[],
- const double b[], const double c[], int *status ) {
-/*
-* Name:
-* Angle
-
-* Purpose:
-* Calculate the angle subtended by two points at a third point.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* double Angle( AstFrame *this_frame, const double a[],
-* const double b[], const double c[], int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astAngle method
-* inherited from the Frame class).
-
-* Description:
-* This function finds the angle at point B between the line
-* joining points A and B, and the line joining points C
-* and B. These lines will in fact be geodesic curves (great circles).
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* a
-* An array of double, with one element for each SkyFrame axis,
-* containing the coordinates of the first point.
-* b
-* An array of double, with one element for each SkyFrame axis,
-* containing the coordinates of the second point.
-* c
-* An array of double, with one element for each SkyFrame axis,
-* containing the coordinates of the third point.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The angle in radians, from the line AB to the line CB, in
-* the range $\pm \pi$ with positive rotation is in the same sense
-* as rotation from axis 2 to axis 1.
-
-* Notes:
-* - This function will return a "bad" result value (AST__BAD) if
-* any of the input coordinates has this value.
-* - A "bad" value will also be returned if points A and B are
-* co-incident, or if points B and C are co-incident.
-* - A "bad" value will also be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
- AstSkyFrame *this; /* Pointer to SkyFrame structure */
- const int *perm; /* Axis permutation array */
- double aa[ 2 ]; /* Permuted a coordinates */
- double anga; /* Angle from north to the line BA */
- double angc; /* Angle from north to the line BC */
- double bb[ 2 ]; /* Permuted b coordinates */
- double cc[ 2 ]; /* Permuted c coordinates */
- double result; /* Value to return */
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* Obtain a pointer to the SkyFrame's axis permutation array. */
- perm = astGetPerm( this );
- if ( astOK ) {
-
-/* Check that all supplied coordinates are OK. */
- if ( ( a[ 0 ] != AST__BAD ) && ( a[ 1 ] != AST__BAD ) &&
- ( b[ 0 ] != AST__BAD ) && ( b[ 1 ] != AST__BAD ) &&
- ( c[ 0 ] != AST__BAD ) && ( c[ 1 ] != AST__BAD ) ) {
-
-/* Apply the axis permutation array to obtain the coordinates of the
- three points in the required (longitude,latitude) order. */
- aa[ perm[ 0 ] ] = a[ 0 ];
- aa[ perm[ 1 ] ] = a[ 1 ];
- bb[ perm[ 0 ] ] = b[ 0 ];
- bb[ perm[ 1 ] ] = b[ 1 ];
- cc[ perm[ 0 ] ] = c[ 0 ];
- cc[ perm[ 1 ] ] = c[ 1 ];
-
-/* Check that A and B are not co-incident. */
- if( aa[ 0 ] != bb[ 0 ] || aa[ 1 ] != bb[ 1 ] ) {
-
-/* Check that C and B are not co-incident. */
- if( cc[ 0 ] != bb[ 0 ] || cc[ 1 ] != bb[ 1 ] ) {
-
-/* Find the angle from north to the line BA. */
- anga = palSlaDbear( bb[ 0 ], bb[ 1 ], aa[ 0 ], aa[ 1 ] );
-
-/* Find the angle from north to the line BC. */
- angc = palSlaDbear( bb[ 0 ], bb[ 1 ], cc[ 0 ], cc[ 1 ] );
-
-/* Find the difference. */
- result = angc - anga;
-
-/* This value is the angle from north, but we want the angle from axis 2.
- If the axes have been swapped so that axis 2 is actually the longitude
- axis, then we need to correct this result. */
- if( perm[ 0 ] != 0 ) result = piby2 - result;
-
-/* Fold the result into the range +/- PI. */
- result = palSlaDrange( result );
- }
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static double CalcLAST( AstSkyFrame *this, double epoch, double obslon,
- double obslat, double obsalt, double dut1,
- int *status ) {
-/*
-* Name:
-* CalcLAST
-
-* Purpose:
-* Calculate the Local Appearent Sidereal Time for a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* double CalcLAST( AstSkyFrame *this, double epoch, double obslon,
-* double obslat, double obsalt, double dut1,
-* int *status )
-
-* Class Membership:
-* SkyFrame member function.
-
-* Description:
-* This function calculates and returns the Local Apparent Sidereal Time
-* at the given epoch, etc.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* epoch
-* The epoch (MJD).
-* obslon
-* Observatory geodetic longitude (radians)
-* obslat
-* Observatory geodetic latitude (radians)
-* obsalt
-* Observatory geodetic altitude (metres)
-* dut1
-* The UT1-UTC correction, in seconds.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Local Apparent Sidereal Time, in radians.
-
-* Notes:
-* - A value of AST__BAD will be returned if this function is invoked
-* with the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstFrameSet *fs; /* Mapping from TDB offset to LAST offset */
- double epoch0; /* Supplied epoch value */
- double result; /* Returned LAST value */
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Check the global error status. */
- if ( !astOK ) return AST__BAD;
-
-/* See if the required LAST value can be determined from the cached LAST
- values in the SkyFrame virtual function table. */
- result = GetCachedLAST( this, epoch, obslon, obslat, obsalt, dut1,
- status );
-
-/* If not, we do an exact calculation from scratch. */
- if( result == AST__BAD ) {
-
-/* If not yet done, create two TimeFrames. Note, this is done here
- rather than in astInitSkyFrameVtab in order to avoid infinite vtab
- initialisation loops (caused by the TimeFrame class containing a
- static SkyFrame). */
- if( ! tdbframe ) {
- astBeginPM;
- tdbframe = astTimeFrame( "system=mjd,timescale=tdb", status );
- lastframe = astTimeFrame( "system=mjd,timescale=last", status );
- astEndPM;
- }
-
-/* For better accuracy, use this integer part of the epoch as the origin of
- the two TimeFrames. */
- astSetTimeOrigin( tdbframe, (int) epoch );
- astSetTimeOrigin( lastframe, (int) epoch );
-
-/* Convert the absolute Epoch value to an offset from the above origin. */
- epoch0 = epoch;
- epoch -= (int) epoch;
-
-/* Store the observers position in the two TimeFrames. */
- astSetObsLon( tdbframe, obslon );
- astSetObsLon( lastframe, obslon );
-
- astSetObsLat( tdbframe, obslat );
- astSetObsLat( lastframe, obslat );
-
- astSetObsAlt( tdbframe, obsalt );
- astSetObsAlt( lastframe, obsalt );
-
-/* Store the DUT1 value. */
- astSetDut1( tdbframe, dut1 );
- astSetDut1( lastframe, dut1 );
-
-/* Get the conversion from tdb mjd offset to last mjd offset. */
- fs = astConvert( tdbframe, lastframe, "" );
-
-/* Use it to transform the SkyFrame Epoch from TDB offset to LAST offset. */
- astTran1( fs, 1, &epoch, 1, &epoch );
- fs = astAnnul( fs );
-
-/* Convert the LAST offset from days to radians. */
- result = ( epoch - (int) epoch )*2*AST__DPI;
-
-/* Cache the new LAST value in the SkyFrame virtual function table. */
- SetCachedLAST( this, result, epoch0, obslon, obslat, obsalt, dut1,
- status );
- }
-
-/* Return the required LAST value. */
- return result;
-}
-
-static void ClearAsTime( AstSkyFrame *this, int axis, int *status ) {
-/*
-* Name:
-* ClearAsTime
-
-* Purpose:
-* Clear the value of the AsTime attribute for a SkyFrame's axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void ClearAsTime( AstSkyFrame *this, int axis, int *status )
-
-* Class Membership:
-* SkyFrame member function.
-
-* Description:
-* This function clears any value that has been set for the AsTime
-* attribute for a specified axis of a SkyFrame. This attribute indicates
-* whether axis values should be formatted as times (as opposed to angles)
-* by default.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* axis
-* Index of the axis for which the value is to be cleared (zero based).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void.
-*/
-
-/* Local Variables: */
- AstAxis *ax; /* Pointer to Axis object */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis, "astClearAsTime" );
-
-/* Obtain a pointer to the Axis object. */
- ax = astGetAxis( this, axis );
-
-/* If the Axis is a SkyAxis, clear the AsTime attribute (if it is not a
- SkyAxis, it will not have this attribute anyway). */
- if ( astIsASkyAxis( ax ) ) astClearAxisAsTime( ax );
-
-/* Annul the Axis pointer. */
- ax = astAnnul( ax );
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astClearAttrib protected
-* method inherited from the Frame class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* SkyFrame, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function uses one-based axis numbering so that it is
-* suitable for external (public) use.
-*/
-
-/* Local Variables: */
- AstSkyFrame *this; /* Pointer to the SkyFrame structure */
- int axis; /* SkyFrame axis number */
- int len; /* Length of attrib string */
- int nc; /* No. characters read by astSscanf */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_object;
-
-/* Obtain the length of the "attrib" string. */
- len = strlen( attrib );
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* AsTime(axis). */
-/* ------------- */
- if ( nc = 0,
- ( 1 == astSscanf( attrib, "astime(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearAsTime( this, axis - 1 );
-
-/* Equinox. */
-/* -------- */
- } else if ( !strcmp( attrib, "equinox" ) ) {
- astClearEquinox( this );
-
-/* NegLon. */
-/* ------- */
- } else if ( !strcmp( attrib, "neglon" ) ) {
- astClearNegLon( this );
-
-/* Projection. */
-/* ----------- */
- } else if ( !strcmp( attrib, "projection" ) ) {
- astClearProjection( this );
-
-/* SkyRef. */
-/* ------- */
- } else if ( !strcmp( attrib, "skyref" ) ) {
- astClearSkyRef( this, 0 );
- astClearSkyRef( this, 1 );
-
-/* SkyRef(axis). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "skyref(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearSkyRef( this, axis - 1 );
-
-/* SkyRefP. */
-/* -------- */
- } else if ( !strcmp( attrib, "skyrefp" ) ) {
- astClearSkyRefP( this, 0 );
- astClearSkyRefP( this, 1 );
-
-/* SkyRefP(axis). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "skyrefp(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- astClearSkyRefP( this, axis - 1 );
-
-/* SkyRefIs. */
-/* --------- */
- } else if ( !strcmp( attrib, "skyrefis" ) ) {
- astClearSkyRefIs( this );
-
-/* AlignOffset. */
-/* ------------ */
- } else if ( !strcmp( attrib, "alignoffset" ) ) {
- astClearAlignOffset( this );
-
-/* If the name was not recognised, test if it matches any of the
- read-only attributes of this class. If it does, then report an
- error. */
- } else if ( !strcmp( attrib, "lataxis" ) ||
- !strcmp( attrib, "lonaxis" ) ) {
- astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
- "value for a %s.", status, attrib, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* If the attribute is not recognised, pass it on to the parent method
- for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static void ClearDut1( AstFrame *this, int *status ) {
-/*
-* Name:
-* ClearDut1
-
-* Purpose:
-* Clear the value of the Dut1 attribute for a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void ClearDut1( AstFrame *this, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astClearDut1 method
-* inherited from the Frame class).
-
-* Description:
-* This function clears the Dut1 value and updates the LAST value
-* stored in the SkyFrame.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- double orig;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Note the original value */
- orig = astGetDut1( this );
-
-/* Invoke the parent method to clear the Frame Dut1 */
- (*parent_cleardut1)( this, status );
-
-/* If the DUT1 value has changed significantly, indicate that the LAST value
- will need to be re-calculated when it is next needed. */
- if( fabs( orig - astGetDut1( this ) ) > 1.0E-6 ) {
- ( (AstSkyFrame *) this )->last = AST__BAD;
- ( (AstSkyFrame *) this )->eplast = AST__BAD;
- ( (AstSkyFrame *) this )->klast = AST__BAD;
- }
-}
-
-static void ClearEpoch( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* ClearEpoch
-
-* Purpose:
-* Clear the value of the Epoch attribute for a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void ClearEpoch( AstFrame *this, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astClearEpoch method
-* inherited from the Frame class).
-
-* Description:
-* This function clears the Epoch value and updates the LAST value
-* stored in the SkyFrame.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstSkyFrame *this; /* Pointer to the SkyFrame structure */
- double orig; /* Original epoch */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* Save ther original epoch */
- orig = astGetEpoch( this_frame );
-
-/* Invoke the parent method to clear the Frame epoch. */
- (*parent_clearepoch)( this_frame, status );
-
-/* If the Epoch value has changed significantly, indicate that the LAST value
- will need to be re-calculated when it is next needed. */
- if( fabs( orig - astGetEpoch( this ) ) > 1.0E-8 ) {
- this->last = AST__BAD;
- this->eplast = AST__BAD;
- this->klast = AST__BAD;
- }
-}
-
-static void ClearObsAlt( AstFrame *this, int *status ) {
-/*
-* Name:
-* ClearObsAlt
-
-* Purpose:
-* Clear the value of the ObsAlt attribute for a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void ClearObsAlt( AstFrame *this, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astClearObsAlt method
-* inherited from the Frame class).
-
-* Description:
-* This function clears the ObsAlt value.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- double orig;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Note the original value */
- orig = astGetObsAlt( this );
-
-/* Invoke the parent method to clear the Frame ObsAlt. */
- (*parent_clearobsalt)( this, status );
-
-/* If the altitude has changed significantly, indicate that the LAST value
- and magnitude of the diurnal aberration vector will need to be
- re-calculated when next needed. */
- if( fabs( orig - astGetObsAlt( this ) ) > 0.001 ) {
- ( (AstSkyFrame *) this )->last = AST__BAD;
- ( (AstSkyFrame *) this )->eplast = AST__BAD;
- ( (AstSkyFrame *) this )->klast = AST__BAD;
- ( (AstSkyFrame *) this )->diurab = AST__BAD;
- }
-}
-
-static void ClearObsLat( AstFrame *this, int *status ) {
-/*
-* Name:
-* ClearObsLat
-
-* Purpose:
-* Clear the value of the ObsLat attribute for a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void ClearObsLat( AstFrame *this, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astClearObsLat method
-* inherited from the Frame class).
-
-* Description:
-* This function clears the ObsLat value.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- double orig;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Note the original value */
- orig = astGetObsLat( this );
-
-/* Invoke the parent method to clear the Frame ObsLat. */
- (*parent_clearobslat)( this, status );
-
-/* If the altitude has changed significantly, indicate that the LAST value
- and magnitude of the diurnal aberration vector will need to be
- re-calculated when next needed. */
- if( fabs( orig - astGetObsLat( this ) ) > 1.0E-8 ) {
- ( (AstSkyFrame *) this )->last = AST__BAD;
- ( (AstSkyFrame *) this )->eplast = AST__BAD;
- ( (AstSkyFrame *) this )->klast = AST__BAD;
- ( (AstSkyFrame *) this )->diurab = AST__BAD;
- }
-}
-
-static void ClearObsLon( AstFrame *this, int *status ) {
-/*
-* Name:
-* ClearObsLon
-
-* Purpose:
-* Clear the value of the ObsLon attribute for a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void ClearObsLon( AstFrame *this, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astClearObsLon method
-* inherited from the Frame class).
-
-* Description:
-* This function clears the ObsLon value.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- double orig;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Note the original value */
- orig = astGetObsLon( this );
-
-/* Invoke the parent method to clear the Frame ObsLon. */
- (*parent_clearobslon)( this, status );
-
-/* If the longitude has changed significantly, indicate that the LAST value
- will need to be re-calculated when it is next needed. */
- if( fabs( orig - astGetObsLon( this ) ) > 1.0E-8 ) {
- ( (AstSkyFrame *) this )->last = AST__BAD;
- ( (AstSkyFrame *) this )->eplast = AST__BAD;
- ( (AstSkyFrame *) this )->klast = AST__BAD;
- }
-}
-
-static void ClearSystem( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* ClearSystem
-
-* Purpose:
-* Clear the System attribute for a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void ClearSystem( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astClearSystem protected
-* method inherited from the Frame class).
-
-* Description:
-* This function clears the System attribute for a SkyFrame.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstFrameSet *fs; /* FrameSet to be used as the Mapping */
- AstSkyFrame *sfrm; /* Copy of original SkyFrame */
- AstSkyFrame *this; /* Pointer to SkyFrame structure */
- double xin[ 2 ]; /* Axis 0 values */
- double yin[ 2 ]; /* Axis 1 values */
- double xout[ 2 ]; /* Axis 0 values */
- double yout[ 2 ]; /* Axis 1 values */
- int skyref_set; /* Is either SkyRef attribute set? */
- int skyrefp_set; /* Is either SkyRefP attribute set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* See if either the SkyRef or SkyRefP attribute is set. */
- skyref_set = astTestSkyRef( this, 0 ) || astTestSkyRef( this, 1 );
- skyrefp_set = astTestSkyRefP( this, 0 ) || astTestSkyRefP( this, 1 );
-
-/* If so, we will need to transform their values into the new coordinate
- system. Save a copy of the SkyFrame with its original System value. */
- sfrm = ( skyref_set || skyrefp_set )?astCopy( this ):NULL;
-
-/* Use the parent method to clear the System value. */
- (*parent_clearsystem)( this_frame, status );
-
-/* Now modify the SkyRef and SkyRefP attributes if necessary. */
- if( sfrm ) {
-
-/* Save the SkyRef and SkyRefP values. */
- xin[ 0 ] = astGetSkyRef( sfrm, 0 );
- xin[ 1 ] = astGetSkyRefP( sfrm, 0 );
- yin[ 0 ] = astGetSkyRef( sfrm, 1 );
- yin[ 1 ] = astGetSkyRefP( sfrm, 1 );
-
-/* Clear the SkyRef values to avoid infinite recursion in the following
- call to astConvert. */
- if( skyref_set ) {
- astClearSkyRef( sfrm, 0 );
- astClearSkyRef( sfrm, 1 );
- astClearSkyRef( this, 0 );
- astClearSkyRef( this, 1 );
- }
-
-/* Get the Mapping from the original System to the default System. Invoking
- astConvert will recursively invoke ClearSystem again. This is why we need
- to be careful to ensure that SkyRef is cleared above - doing so ensure
- we do not end up with infinite recursion. */
- fs = astConvert( sfrm, this, "" );
-
-/* Use the Mapping to find the SkyRef and SkyRefP positions in the default
- coordinate system. */
- astTran2( fs, 2, xin, yin, 1, xout, yout );
-
-/* Store the values as required. */
- if( skyref_set ) {
- astSetSkyRef( this, 0, xout[ 0 ] );
- astSetSkyRef( this, 1, yout[ 0 ] );
- }
-
- if( skyrefp_set ) {
- astSetSkyRefP( this, 0, xout[ 1 ] );
- astSetSkyRefP( this, 1, yout[ 1 ] );
- }
-
-/* Free resources. */
- fs = astAnnul( fs );
- sfrm = astAnnul( sfrm );
- }
-}
-
-static double Distance( AstFrame *this_frame,
- const double point1[], const double point2[], int *status ) {
-/*
-* Name:
-* Distance
-
-* Purpose:
-* Calculate the distance between two points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* double Distance( AstFrame *this,
-* const double point1[], const double point2[], int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astDistance method
-* inherited from the Frame class).
-
-* Description:
-* This function finds the distance between two points whose
-* SkyFrame coordinates are given. The distance calculated is that
-* along the geodesic curve (i.e. great circle) that joins the two
-* points.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* point1
-* An array of double, with one element for each SkyFrame axis,
-* containing the coordinates of the first point.
-* point2
-* An array of double, with one element for each SkyFrame axis,
-* containing the coordinates of the second point.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The distance between the two points, in radians.
-
-* Notes:
-* - This function will return a "bad" result value (AST__BAD) if
-* any of the input coordinates has this value.
-* - A "bad" value will also be returned if this function is
-* invoked with the AST error status set or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstSkyFrame *this; /* Pointer to SkyFrame structure */
- const int *perm; /* Axis permutation array */
- double p1[ 2 ]; /* Permuted point1 coordinates */
- double p2[ 2 ]; /* Permuted point2 coordinates */
- double result; /* Value to return */
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* Obtain a pointer to the SkyFrame's axis permutation array. */
- perm = astGetPerm( this );
- if ( astOK ) {
-
-/* Check that all supplied coordinates are OK. */
- if ( ( point1[ 0 ] != AST__BAD ) && ( point1[ 1 ] != AST__BAD ) &&
- ( point2[ 0 ] != AST__BAD ) && ( point2[ 1 ] != AST__BAD ) ) {
-
-/* Apply the axis permutation array to obtain the coordinates of the
- two points in the required (longitude,latitude) order. */
- p1[ perm[ 0 ] ] = point1[ 0 ];
- p1[ perm[ 1 ] ] = point1[ 1 ];
- p2[ perm[ 0 ] ] = point2[ 0 ];
- p2[ perm[ 1 ] ] = point2[ 1 ];
-
-/* Calculate the great circle distance between the points in radians. */
- result = palSlaDsep( p1[ 0 ], p1[ 1 ], p2[ 0 ], p2[ 1 ] );
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *Format( AstFrame *this_frame, int axis, double value, int *status ) {
-/*
-* Name:
-* Format
-
-* Purpose:
-* Format a coordinate value for a SkyFrame axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* const char *Format( AstFrame *this, int axis, double value, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astFormat method inherited
-* from the Frame class).
-
-* Description:
-* This function returns a pointer to a string containing the formatted
-* (character) version of a coordinate value for a SkyFrame axis. The
-* formatting applied is that specified by a previous invocation of the
-* astSetFormat method. A suitable default format is applied if necessary,
-* and this may depend on which sky coordinate system the SkyFrame
-* describes.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* axis
-* The number of the axis (zero-based) for which formatting is to be
-* performed.
-* value
-* The coordinate value to be formatted, in radians.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a null-terminated string containing the formatted value.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSkyFrame *this; /* Pointer to the SkyFrame structure */
- const char *result; /* Pointer value to return */
- int format_set; /* Format attribute set? */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis, "astFormat" );
-
-/* Determine if a Format value has been set for the axis and set a temporary
- value if it has not. Use the GetFormat member function for this class
- together with member functions inherited from the parent class (rather than
- using the object's methods directly) because if any of these methods have
- been over-ridden by a derived class the Format string syntax may no longer
- be compatible with this class. */
- format_set = (*parent_testformat)( this_frame, axis, status );
- if ( !format_set ) {
- (*parent_setformat)( this_frame, axis, GetFormat( this_frame, axis, status ), status );
- }
-
-/* Use the Format member function inherited from the parent class to format the
- value and return a pointer to the resulting string. */
- result = (*parent_format)( this_frame, axis, value, status );
-
-/* If necessary, clear any temporary Format value that was set above. */
- if ( !format_set ) (*parent_clearformat)( this_frame, axis, status );
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-static double Gap( AstFrame *this_frame, int axis, double gap, int *ntick, int *status ) {
-/*
-* Name:
-* Gap
-
-* Purpose:
-* Find a "nice" gap for tabulating SkyFrame axis values.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* double Gap( AstFrame *this, int axis, double gap, int *ntick, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the protected astGap method
-* inherited from the Frame class).
-
-* Description:
-* This function returns a gap size which produces a nicely spaced
-* series of formatted values for a SkyFrame axis, the returned gap
-* size being as close as possible to the supplied target gap
-* size. It also returns a convenient number of divisions into
-* which the gap can be divided.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* axis
-* The number of the axis (zero-based) for which a gap is to be found.
-* gap
-* The target gap size.
-* ntick
-* Address of an int in which to return a convenient number of
-* divisions into which the gap can be divided.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The nice gap size.
-
-* Notes:
-* - A value of zero is returned if the target gap size is zero.
-* - A negative gap size is returned if the supplied gap size is negative.
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstSkyFrame *this; /* Pointer to the SkyFrame structure */
- double result; /* Gap value to return */
- int format_set; /* Format attribute set? */
-
-/* Check the global error status. */
- if ( !astOK ) return 0.0;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis, "astGap" );
-
-/* Determine if a Format value has been set for the axis and set a
- temporary value if it has not. Use the GetFormat member function
- for this class together with member functions inherited from the
- parent class (rather than using the object's methods directly)
- because if any of these methods have been over-ridden by a derived
- class the Format string syntax may no longer be compatible with
- this class. */
- format_set = (*parent_testformat)( this_frame, axis, status );
- if ( !format_set ) {
- (*parent_setformat)( this_frame, axis, GetFormat( this_frame, axis, status ), status );
- }
-
-/* Use the Gap member function inherited from the parent class to find
- the gap size. */
- result = (*parent_gap)( this_frame, axis, gap, ntick, status );
-
-/* If necessary, clear any temporary Format value that was set above. */
- if ( !format_set ) (*parent_clearformat)( this_frame, axis, status );
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) result = 0.0;
-
-/* Return the result. */
- return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied SkyFrame,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSkyFrame *this; /* Pointer to SkyFrame structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the SkyFrame structure. */
- this = (AstSkyFrame *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
- result += astTSizeOf( this->projection );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static int GetActiveUnit( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetActiveUnit
-
-* Purpose:
-* Obtain the value of the ActiveUnit flag for a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* int GetActiveUnit( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astGetActiveUnit protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns the value of the ActiveUnit flag for a
-* SkyFrame, which is always 0.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The value to use for the ActiveUnit flag (0).
-
-*/
- return 0;
-}
-
-static int GetAsTime( AstSkyFrame *this, int axis, int *status ) {
-/*
-* Name:
-* GetAsTime
-
-* Purpose:
-* Obtain the value of the AsTime attribute for a SkyFrame's axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* int GetAsTime( AstSkyFrame *this, int axis, int *status )
-
-* Class Membership:
-* SkyFrame member function.
-
-* Description:
-* This function returns the boolean value of the AsTime attribute for a
-* specified axis of a SkyFrame. This value indicates whether axis values
-* should be formatted as times (as opposed to angles) by default.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* axis
-* Index of the axis for which information is required (zero based).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero or one, according to the setting of the AsTime attribute (if no
-* value has previously been set, a suitable default is returned).
-
-* Notes:
-* - A value of zero will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstAxis *ax; /* Pointer to Axis object */
- int axis_p; /* Permuted axis index */
- int result; /* Result to be returned */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Initialise. */
- result = 0;
-
-/* Validate and permute the axis index. */
- axis_p = astValidateAxis( this, axis, "astGetAsTime" );
-
-/* Obtain a pointer to the required Axis object. */
- ax = astGetAxis( this, axis );
-
-/* Determine if the AsTime attribute has been set for the axis (this can only
- be the case if the object is a SkyAxis). If the attribute is set, obtain its
- value. */
- if ( astIsASkyAxis( ax ) && astTestAxisAsTime( ax ) ) {
- result = astGetAxisAsTime( ax );
-
-/* Otherwise, check which (permuted) axis is involved. Only the first
- (longitude) axis may be displayed as a time by default. */
- } else if ( axis_p == 0 ) {
-
-/* Test for those coordinate systems which normally have their longitude axes
- displayed as times (basically, those that involve the Earth's equator) and
- set the returned value appropriately. */
- result = IsEquatorial( astGetSystem( this ), status );
- }
-
-/* Annul the Axis object pointer. */
- ax = astAnnul( ax );
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the protected astGetAttrib
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a SkyFrame, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - This function uses one-based axis numbering so that it is
-* suitable for external (public) use.
-* - The returned string pointer may point at memory allocated
-* within the SkyFrame, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the SkyFrame. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstSkyFrame *this; /* Pointer to the SkyFrame structure */
- const char *cval; /* Pointer to character attribute value */
- const char *result; /* Pointer value to return */
- double dval; /* Floating point attribute value */
- double equinox; /* Equinox attribute value (as MJD) */
- int as_time; /* AsTime attribute value */
- int axis; /* SkyFrame axis number */
- int ival; /* Integer attribute value */
- int len; /* Length of attrib string */
- int nc; /* No. characters read by astSscanf */
- int neglon; /* Display long. values as [-pi,pi]? */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_object;
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null-terminated string in an appropriate
- format. Set "result" to point at the result string. */
-
-/* AsTime(axis). */
-/* ------------- */
- if ( nc = 0,
- ( 1 == astSscanf( attrib, "astime(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- as_time = astGetAsTime( this, axis - 1 );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", as_time );
- result = getattrib_buff;
- }
-
-/* Equinox. */
-/* -------- */
- } else if ( !strcmp( attrib, "equinox" ) ) {
- equinox = astGetEquinox( this );
- if ( astOK ) {
-
-/* Format the Equinox as decimal years. Use a Besselian epoch if it
- will be less than 1984.0, otherwise use a Julian epoch. */
- result = astFmtDecimalYr( ( equinox < palSlaEpj2d( 1984.0 ) ) ?
- palSlaEpb( equinox ) : palSlaEpj( equinox ),
- DBL_DIG );
- }
-
-/* LatAxis */
-/* -------- */
- } else if ( !strcmp( attrib, "lataxis" ) ) {
- axis = astGetLatAxis( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", axis + 1 );
- result = getattrib_buff;
- }
-
-/* LonAxis */
-/* -------- */
- } else if ( !strcmp( attrib, "lonaxis" ) ) {
- axis = astGetLonAxis( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", axis + 1 );
- result = getattrib_buff;
- }
-
-/* NegLon */
-/* ------ */
- } else if ( !strcmp( attrib, "neglon" ) ) {
- neglon = astGetNegLon( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", neglon );
- result = getattrib_buff;
- }
-
-/* Projection. */
-/* ----------- */
- } else if ( !strcmp( attrib, "projection" ) ) {
- result = astGetProjection( this );
-
-/* SkyRef. */
-/* ------- */
- } else if ( !strcmp( attrib, "skyref" ) ) {
- cval = astFormat( this, 0, astGetSkyRef( this, 0 ) );
- if ( astOK ) {
- nc = sprintf( getattrib_buff, "%s, ", cval );
- cval = astFormat( this, 1, astGetSkyRef( this, 1 ) );
- if ( astOK ) {
- (void) sprintf( getattrib_buff + nc, "%s", cval );
- result = getattrib_buff;
- }
- }
-
-/* SkyRef(axis). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "skyref(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- dval = astGetSkyRef( this, axis - 1 );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* SkyRefP. */
-/* -------- */
- } else if ( !strcmp( attrib, "skyrefp" ) ) {
- cval = astFormat( this, 0, astGetSkyRefP( this, 0 ) );
- if ( astOK ) {
- nc = sprintf( getattrib_buff, "%s, ", cval );
- cval = astFormat( this, 1, astGetSkyRefP( this, 1 ) );
- if ( astOK ) {
- (void) sprintf( getattrib_buff + nc, "%s", cval );
- result = getattrib_buff;
- }
- }
-
-/* SkyRefP(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "skyrefp(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- dval = astGetSkyRefP( this, axis - 1 );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* SkyRefIs. */
-/* --------- */
- } else if ( !strcmp( attrib, "skyrefis" ) ) {
- ival = astGetSkyRefIs( this );
- if ( astOK ) {
- if( ival == POLE_REF ){
- result = POLE_STRING;
- } else if( ival == IGNORED_REF ){
- result = IGNORED_STRING;
- } else {
- result = ORIGIN_STRING;
- }
- }
-
-/* AlignOffset */
-/* ----------- */
- } else if ( !strcmp( attrib, "alignoffset" ) ) {
- ival = astGetAlignOffset( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int GetDirection( AstFrame *this_frame, int axis, int *status ) {
-/*
-* Name:
-* GetDirection
-
-* Purpose:
-* Obtain the value of the Direction attribute for a SkyFrame axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* int GetDirection( AstFrame *this_frame, int axis, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astGetDirection method inherited
-* from the Frame class).
-
-* Description:
-* This function returns the value of the Direction attribute for a
-* specified axis of a SkyFrame. A suitable default value is returned if no
-* Direction value has previously been set.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* axis
-* Axis index (zero-based) identifying the axis for which information is
-* required.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero or one, depending on the Direction attribute value.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSkyFrame *this; /* Pointer to the SkyFrame structure */
- int axis_p; /* Permuted axis index */
- int result; /* Result to be returned */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Initialise. */
- result = 0;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* Validate and permute the axis index. */
- axis_p = astValidateAxis( this, axis, "astGetDirection" );
-
-/* Check if a value has been set for the axis Direction attribute. If so,
- obtain its value. */
- if ( astTestDirection( this, axis ) ) {
- result = (*parent_getdirection)( this_frame, axis, status );
-
-/* Otherwise, we will generate a default Direction value. Currently all
- systems supported by SkyFrame are left handed, so all longitude axes
- are reversed and all latitude axes are not reversed. */
- } else if( axis_p == 0 ) {
- result = 0;
- } else {
- result = 1;
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result. */
- return result;
-}
-
-static double GetBottom( AstFrame *this_frame, int axis, int *status ) {
-/*
-* Name:
-* GetBottom
-
-* Purpose:
-* Obtain the value of the Bottom attribute for a SkyFrame axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* double GetBottom( AstFrame *this_frame, int axis, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astGetBottom method inherited
-* from the Frame class).
-
-* Description:
-* This function returns the value of the Bottom attribute for a
-* specified axis of a SkyFrame. A suitable default value is returned if no
-* value has previously been set.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* axis
-* Axis index (zero-based) identifying the axis for which information is
-* required.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Bottom value to use.
-
-* Notes:
-* - A value of -DBL_MAX will be returned if this function is invoked
-* with the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSkyFrame *this; /* Pointer to the SkyFrame structure */
- int axis_p; /* Permuted axis index */
- double result; /* Result to be returned */
-
-/* Check the global error status. */
- if ( !astOK ) return -DBL_MAX;
-
-/* Initialise. */
- result = -DBL_MAX;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* Validate and permute the axis index. */
- axis_p = astValidateAxis( this, axis, "astGetBottom" );
-
-/* Check if a value has been set for the axis Bottom attribute. If so,
- obtain its value. */
- if ( astTestBottom( this, axis ) ) {
- result = (*parent_getbottom)( this_frame, axis, status );
-
-/* Otherwise, we will return a default Bottom value appropriate to the
- SkyFrame class. */
- } else {
-
-/* If it is a latitude axis return -pi/2. */
- if( axis_p == 1 ) {
- result = -piby2;
-
-/* If it is a longitude value return -DBL_MAX (i.e. no lower limit). */
- } else {
- result = -DBL_MAX;
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = -DBL_MAX;
-
-/* Return the result. */
- return result;
-}
-
-static double GetCachedLAST( AstSkyFrame *this, double epoch, double obslon,
- double obslat, double obsalt, double dut1,
- int *status ) {
-/*
-* Name:
-* GetCachedLAST
-
-* Purpose:
-* Attempt to get a LAST value from the cache in the SkyFrame vtab.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* double GetCachedLAST( AstSkyFrame *this, double epoch, double obslon,
-* double obslat, double obsalt, double dut1,
-* int *status )
-
-* Class Membership:
-* SkyFrame member function.
-
-* Description:
-* This function searches the static cache of LAST values held in the
-* SkyFrame virtual function table for a value that corresponds to the
-* supplied parameter values. If one is found, it is returned.
-* Otherwise AST__BAD is found.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* epoch
-* The epoch (MJD).
-* obslon
-* Observatory geodetic longitude (radians)
-* obslat
-* Observatory geodetic latitude (radians)
-* obsalt
-* Observatory geodetic altitude (metres)
-* dut1
-* The UT1-UTC correction, in seconds.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Local Apparent Sidereal Time, in radians.
-
-* Notes:
-* - A value of AST__BAD will be returned if this function is invoked
-* with the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS
- AstSkyFrameVtab *vtab;
- AstSkyLastTable *table;
- double *ep;
- double *lp;
- double dep;
- double result;
- int ihi;
- int ilo;
- int itable;
- int itest;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Initialise */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the SkyFrame virtual function table. */
- vtab = (AstSkyFrameVtab *) ((AstObject *) this)->vtab;
-
-/* Loop round every LAST table held in the vtab. Each table refers to a
- different observatory position and/or DUT1 value. */
- for( itable = 0; itable < vtab->nlast_tables; itable++ ) {
- table = (vtab->last_tables)[ itable ];
-
-/* See if the table refers to the given position and dut1 value, allowing
- some small tolerance. */
- if( fabs( table->obslat - obslat ) < 2.0E-7 &&
- fabs( table->obslon - obslon ) < 2.0E-7 &&
- fabs( table->obsalt - obsalt ) < 1.0 &&
- fabs( table->dut1 - dut1 ) < 1.0E-5 ) {
-
-/* Get pointers to the array of epoch and corresponding LAST values in
- the table. */
- ep = table->epoch;
- lp = table->last;
-
-/* The values in the epoch array are monotonic increasing. Do a binary chop
- within the table's epoch array to find the earliest entry that has a
- value equal to or greater than the supplied epoch value. */
- ilo = 0;
- ihi = table->nentry - 1;
- while( ihi > ilo ) {
- itest = ( ilo + ihi )/2;
- if( ep[ itest ] >= epoch ) {
- ihi = itest;
- } else {
- ilo = itest + 1;
- }
- }
-
-/* Get the difference between the epoch at the entry selected above and
- the requested epoch. */
- dep = ep[ ilo ] - epoch;
-
-/* If the entry selected above is the first entry in the table, it can
- only be used if it is within 0.1 second of the requested epoch. */
- if( ilo == 0 ) {
- if( fabs( dep ) < 0.1/86400.0 ) result = lp[ 0 ];
-
-/* If the list of epoch values contained no value that was greater than
- the supplied epoch value, then we can use the last entry if
- it is no more than 0.1 second away from the requested epoch. */
- } else if( dep <= 0.0 ) {
- if( fabs( dep ) < 0.1/86400.0 ) result = lp[ ilo ];
-
-/* Otherwise, see if the entry selected above is sufficiently close to
- its lower neighbour (i.e. closer than 0.4 days) to allow a reasonably
- accurate LAST value to be determined by interpolation. */
- } else if( ep[ ilo ] - ep[ ilo - 1 ] < 0.4 ) {
- ep += ilo - 1;
- lp += ilo - 1;
- result = *lp + ( epoch - *ep )*( lp[ 1 ] - *lp )/( ep[ 1 ] - *ep );
-
-/* If the neighbouring point is too far away for interpolation to be
- reliable, then we can only use the point if it is within 0.1 seconds of
- the requested epoch. */
- } else if( fabs( dep ) < 0.1/86400.0 ) {
- result = lp[ ilo ];
- }
-
-/* If we have found the right table, we do not need to look at any other
- tables, so leave the table loop. */
- break;
- }
- }
-
-/* Ensure the returned value is within the range 0 - 2.PI. */
- if( result != AST__BAD ) {
- while( result > 2*AST__DPI ) result -= 2*AST__DPI;
- while( result < 0.0 ) result += 2*AST__DPI;
- }
-
-/* Return the required LAST value. */
- return result;
-}
-
-static double GetEpoch( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetEpoch
-
-* Purpose:
-* Obtain the value of the Epoch attribute for a SkyFrame axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* double GetEpoch( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astGetEpoch method inherited
-* from the Frame class).
-
-* Description:
-* This function returns the value of the Epoch attribute for a
-* SkyFrame. A suitable default value is returned if no value has
-* previously been set.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Epoch value to use.
-
-* Notes:
-* - A value of AST__BAD will be returned if this function is invoked
-* with the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSkyFrame *this; /* Pointer to the SkyFrame structure */
- AstSystemType system; /* System attribute */
- double result; /* Result to be returned */
-
-/* Check the global error status. */
- if ( !astOK ) return AST__BAD;
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* Check if a value has been set for the Epoch attribute. If so, obtain its
- value. */
- if ( astTestEpoch( this ) ) {
- result = (*parent_getepoch)( this_frame, status );
-
-/* Otherwise, we will return a default Epoch value appropriate to the
- SkyFrame class. */
- } else {
-
-/* Provide a default value of B1950.0 or J2000.0 depending on the System
- setting. */
- system = astGetSystem( this );
- if( system == AST__FK4 || system == AST__FK4_NO_E ) {
- result = palSlaEpb2d( 1950.0 );
- } else {
- result = palSlaEpj2d( 2000.0 );
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
- return result;
-}
-
-static double GetTop( AstFrame *this_frame, int axis, int *status ) {
-/*
-* Name:
-* GetTop
-
-* Purpose:
-* Obtain the value of the Top attribute for a SkyFrame axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* double GetTop( AstFrame *this_frame, int axis, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astGetTop method inherited
-* from the Frame class).
-
-* Description:
-* This function returns the value of the Top attribute for a
-* specified axis of a SkyFrame. A suitable default value is returned if no
-* value has previously been set.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* axis
-* Axis index (zero-based) identifying the axis for which information is
-* required.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Top value to use.
-
-* Notes:
-* - A value of DBL_MAX will be returned if this function is invoked
-* with the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSkyFrame *this; /* Pointer to the SkyFrame structure */
- int axis_p; /* Permuted axis index */
- double result; /* Result to be returned */
-
-/* Check the global error status. */
- if ( !astOK ) return DBL_MAX;
-
-/* Initialise. */
- result = DBL_MAX;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* Validate and permute the axis index. */
- axis_p = astValidateAxis( this, axis, "astGetTop" );
-
-/* Check if a value has been set for the axis Top attribute. If so,
- obtain its value. */
- if ( astTestTop( this, axis ) ) {
- result = (*parent_gettop)( this_frame, axis, status );
-
-/* Otherwise, we will return a default Top value appropriate to the
- SkyFrame class. */
- } else {
-
-/* If this is a latitude axis return pi/2. */
- if( axis_p == 1 ) {
- result = piby2;
-
-/* If it is a longitude value return DBL_MAX (i.e. no upper limit). */
- } else {
- result = DBL_MAX;
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = DBL_MAX;
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetDomain( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetDomain
-
-* Purpose:
-* Obtain a pointer to the Domain attribute string for a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* const char *GetDomain( AstFrame *this, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astGetDomain protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a pointer to the Domain attribute string
-* for a SkyFrame.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a constant null-terminated string containing the
-* Domain value.
-
-* Notes:
-* - The returned pointer or the string it refers to may become
-* invalid following further invocation of this function or
-* modification of the SkyFrame.
-* - A NULL pointer is returned if this function is invoked with
-* the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSkyFrame *this; /* Pointer to SkyFrame structure */
- const char *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* If a Domain attribute string has been set, invoke the parent method
- to obtain a pointer to it. */
- if ( astTestDomain( this ) ) {
- result = (*parent_getdomain)( this_frame, status );
-
-/* Otherwise, provide a pointer to a suitable default string. */
- } else {
- result = "SKY";
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetFormat( AstFrame *this_frame, int axis, int *status ) {
-/*
-* Name:
-* GetFormat
-
-* Purpose:
-* Access the Format string for a SkyFrame axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* const char *GetFormat( AstFrame *this, int axis )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astGetFormat method inherited
-* from the Frame class).
-
-* Description:
-* This function returns a pointer to the Format string for a specified axis
-* of a SkyFrame. A pointer to a suitable default string is returned if no
-* Format value has previously been set.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* axis
-* Axis index (zero-based) identifying the axis for which information is
-* required.
-
-* Returned Value:
-* Pointer to a null-terminated character string containing the requested
-* information.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstAxis *ax; /* Pointer to Axis object */
- AstSkyFrame *this; /* Pointer to the SkyFrame structure */
- const char *result; /* Pointer value to return */
- int as_time; /* Value of AsTime attribute */
- int as_time_set; /* AsTime attribute set? */
- int axis_p; /* Permuted axis index */
- int digits; /* Number of digits of precision */
- int is_latitude; /* Value of IsLatitude attribute */
- int is_latitude_set; /* IsLatitude attribute set? */
- int parent; /* Use parent method? */
- int skyaxis; /* Is the Axis a SkyAxis? */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_frame);
-
-/* Initialise. */
- result = NULL;
- as_time_set = 0;
- is_latitude = 0;
- is_latitude_set = 0;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* Validate and permute the axis index. */
- axis_p = astValidateAxis( this, axis, "astGetFormat" );
-
-/* Obtain a pointer to the Axis structure. */
- ax = astGetAxis( this, axis );
-
-/* Decide whether the parent astGetFormat method is able to provide the format
- string we require. We must use the parent method if the Axis is not a
- SkyAxis, because the syntax of the Format string would become unsuitable
- for use with the Axis astFormat method if it was over-ridden here. We also
- use the parent method to return a Format pointer if an explicit Format
- string has already been set. */
- skyaxis = astIsASkyAxis( ax );
- parent = ( !skyaxis || (*parent_testformat)( this_frame, axis, status ) );
-
-/* If neither of the above conditions apply, we may still be able to use the
- parent method if the Axis (actually a SkyAxis) is required to behave as a
- normal RA or DEC axis, as this is the standard behaviour provided by the
- SkyAxis class. Examine the SkyFrame's System attribute to determine if its
- axes should behave in this way. */
- if ( !parent ) parent = IsEquatorial( astGetSystem( this ), status );
-
-/* If using the parent method and dealing with a SkyAxis, determine the
- settings of any attributes that may affect the Format string. */
- if ( astOK ) {
- if ( parent ) {
- if ( skyaxis ) {
- as_time_set = astTestAsTime( this, axis );
- is_latitude_set = astTestAxisIsLatitude( ax );
- is_latitude = astGetAxisIsLatitude( ax );
-
-/* If no AsTime value is set for the axis, set a temporary value as determined
- by the astGetAsTime method, which supplies suitable defaults for the axes of
- a SkyFrame. */
- if ( !as_time_set ) {
- astSetAsTime( this, axis, astGetAsTime( this, axis ) );
- }
-
-/* Temporarly over-ride the SkyAxis IsLatitude attribute, regardless of its
- setting, as the second axis of a SkyFrame is always the latitude axis. */
- astSetAxisIsLatitude( ax, axis_p == 1 );
- }
-
-/* Invoke the parent method to obtain a pointer to the Format string. */
- result = (*parent_getformat)( this_frame, axis, status );
-
-/* Now restore the attributes that were temporarily over-ridden above to their
- previous states. */
- if ( skyaxis ) {
- if ( !as_time_set ) astClearAsTime( this, axis );
- if ( !is_latitude_set ) {
- astClearAxisIsLatitude( ax );
- } else {
- astSetAxisIsLatitude( ax, is_latitude );
- }
- }
-
-/* If the parent method is unsuitable, we must construct a new Format string
- here. This affects only those coordinate systems whose axes do not behave
- like standard RA/DEC axes (e.g. typically ecliptic, galactic and
- supergalactic coordinates). For these, we format values as decimal degrees
- (or decimal hours if the AsTime attribute is set). Obtain the AsTime
- value. */
- } else {
- as_time = astGetAsTime( this, axis );
-
-/* Determine how many digits of precision to use. This is obtained from the
- SkyAxis Digits attribute (if set), otherwise from the Digits attribute of
- the enclosing SkyFrame. */
- if ( astTestAxisDigits( ax ) ) {
- digits = astGetAxisDigits( ax );
- } else {
- digits = astGetDigits( this );
- }
-
-/* If a time format is required, generate a Format string using decimal
- hours. */
- if ( astOK ) {
- if ( as_time ) {
- if ( digits <= 2 ) {
- result = "h";
- } else {
- (void) sprintf( getformat_buff, "h.%d", digits - 2 );
- result = getformat_buff;
- }
-
-/* Otherwise use decimal degrees. */
- } else {
- if ( digits <= 3 ) {
- result = "d";
- } else {
- (void) sprintf( getformat_buff, "d.%d", digits - 3 );
- result = getformat_buff;
- }
- }
- }
- }
- }
-
-/* Annul the Axis pointer. */
- ax = astAnnul( ax );
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetLabel( AstFrame *this, int axis, int *status ) {
-/*
-* Name:
-* GetLabel
-
-* Purpose:
-* Access the Label string for a SkyFrame axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* const char *GetLabel( AstFrame *this, int axis, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astGetLabel method inherited
-* from the Frame class).
-
-* Description:
-* This function returns a pointer to the Label string for a specified axis
-* of a SkyFrame.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* axis
-* Axis index (zero-based) identifying the axis for which information is
-* required.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a constant null-terminated character string containing the
-* requested information.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstSystemType system; /* Code identifying type of sky coordinates */
- const char *result; /* Pointer to label string */
- int axis_p; /* Permuted axis index */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Initialise. */
- result = NULL;
-
-/* Validate and permute the axis index. */
- axis_p = astValidateAxis( this, axis, "astGetLabel" );
-
-/* Check if a value has been set for the required axis label string. If so,
- invoke the parent astGetLabel method to obtain a pointer to it. */
- if ( astTestLabel( this, axis ) ) {
- result = (*parent_getlabel)( this, axis, status );
-
-/* Otherwise, identify the sky coordinate system described by the SkyFrame. */
- } else {
- system = astGetSystem( this );
-
-/* If OK, supply a pointer to a suitable default label string. */
- if ( astOK ) {
-
-/* Equatorial coordinate systems. */
- if ( IsEquatorial( system, status ) ) {
- result = ( axis_p == 0 ) ? "Right ascension" :
- "Declination";
-
-/* Ecliptic coordinates. */
- } else if ( system == AST__ECLIPTIC ) {
- result = ( axis_p == 0 ) ? "Ecliptic longitude" :
- "Ecliptic latitude";
-
-/* Helio-ecliptic coordinates. */
- } else if ( system == AST__HELIOECLIPTIC ) {
- result = ( axis_p == 0 ) ? "Helio-ecliptic longitude" :
- "Helio-ecliptic latitude";
-
-/* AzEl coordinates. */
- } else if ( system == AST__AZEL ) {
- result = ( axis_p == 0 ) ? "Azimuth" :
- "Elevation";
-
-/* Galactic coordinates. */
- } else if ( system == AST__GALACTIC ) {
- result = ( axis_p == 0 ) ? "Galactic longitude" :
- "Galactic latitude";
-
-/* Supergalactic coordinates. */
- } else if ( system == AST__SUPERGALACTIC ) {
- result = ( axis_p == 0 ) ? "Supergalactic longitude" :
- "Supergalactic latitude";
-
-/* Unknown spherical coordinates. */
- } else if ( system == AST__UNKNOWN ) {
- result = ( axis_p == 0 ) ? "Longitude" :
- "Latitude";
-
-/* Report an error if the coordinate system was not recognised. */
- } else {
- astError( AST__SCSIN, "astGetLabel(%s): Corrupt %s contains "
- "invalid sky coordinate system identification code "
- "(%d).", status, astGetClass( this ), astGetClass( this ),
- (int) system );
- }
-
-/* If the SkyRef attribute has a set value, append " offset" to the label. */
- if( astGetSkyRefIs( this ) != IGNORED_REF &&
- ( astTestSkyRef( this, 0 ) || astTestSkyRef( this, 1 ) ) ) {
- sprintf( getlabel_buff, "%s offset", result );
- result = getlabel_buff;
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static double GetDiurab( AstSkyFrame *this, int *status ) {
-/*
-* Name:
-* GetDiurab
-
-* Purpose:
-* Return the magnitude of the diurnal aberration vector.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* double GetDiurab( AstSkyFrame *this, int *status )
-
-* Class Membership:
-* SkyFrame member function
-
-* Description:
-* This function returns the magnitude of the diurnal aberration
-* vector.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The magnitude of the diurnal aberration vector.
-
-*/
-
-/* Local Variables: */
- double uau;
- double vau;
-
-/* Check the global error status. */
- if ( !astOK ) return AST__BAD;
-
-/* If the magnitude of the diurnal aberration vector has not yet been
- found, find it now, and cache it in the SkyFrame structure. The cached
- value will be reset to AST__BAD if the ObsLat attribute value is
- changed. This code is transliterated from SLA_AOPPA. */
- if( this->diurab == AST__BAD ) {
- palSlaGeoc( astGetObsLat( this ), astGetObsAlt( this ), &uau, &vau );
- this->diurab = 2*AST__DPI*uau*SOLSID/C;
- }
-
-/* Return the result, */
- return this->diurab;
-}
-
-static double GetLAST( AstSkyFrame *this, int *status ) {
-/*
-* Name:
-* GetLAST
-
-* Purpose:
-* Return the Local Apparent Sidereal Time for the SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* double GetLAST( AstSkyFrame *this, int *status )
-
-* Class Membership:
-* SkyFrame member function
-
-* Description:
-* This function returns the Local Apparent Sidereal Time (LAST)
-* at the moment intime given by the Epoch attribute of the SkyFrame.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The LAST value.
-
-*/
-
-/* Local Variables: */
- double dlast; /* Change in LAST */
- double epoch; /* Epoch (TDB MJD) */
- double last1; /* LAST at end of current interval */
- double result; /* Result value to return */
- double delta_epoch; /* Change in Epoch */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* The "last" component of the SkyFrame structure holds the accurate
- LAST at the moment in time given by the "eplast" (a TDB MJD) component
- of the SkyFrame structure. If the current value of the SkyFrame's
- Epoch attribute is not much different to "eplast" (within 0.4 of a day),
- then the returned LAST value is the "last" value plus the difference
- between Epoch and "eplast", converted from solar to sidereal time,
- then converted to radians. This approximation seems to be good to less
- than a tenth of an arcsecond. If this approximation cannot be used,
- invoke SetLast to recalculate the accurate LAST and update the "eplast"
- and "last" values. */
- if( this->eplast != AST__BAD ) {
- epoch = astGetEpoch( this );
- delta_epoch = epoch - this->eplast;
-
-/* Return the current LAST value if the epoch has not changed. */
- if( delta_epoch == 0.0 ) {
- result = this->last;
-
-/* If the previous full calculation of LAST was less than 0.4 days ago,
- use a linear approximation to LAST. */
- } else if( fabs( delta_epoch ) < 0.4 ) {
-
-/* If we do not know the ratio of sidereal to solar time at the current
- epoch, calculate it now. This involves a full calculation of LAST at
- the end of the current linear approxcimation period. */
- if( this->klast == AST__BAD ) {
- last1 = CalcLAST( this, this->eplast + 0.4, astGetObsLon( this ),
- astGetObsLat( this ), astGetObsAlt( this ),
- astGetDut1( this ), status );
-
-/* Ensure the change in LAST is positive so that we get a positive ratio. */
- dlast = last1 - this->last;
- if( dlast < 0.0 ) dlast += 2*AST__DPI;
- this->klast = 2*AST__DPI*0.4/dlast;
- }
-
-/* Now use the ratio of solar to sidereal time to calculate the linear
- approximation to LAST. */
- result = this->last + 2*AST__DPI*delta_epoch/this->klast;
-
-/* If the last accurate calculation of LAST was more than 0.4 days ago,
- do a full accurate calculation. */
- } else {
- SetLast( this, status );
- result = this->last;
- }
-
-/* If we have not yet done an accurate calculation of LAST, do one now. */
- } else {
- SetLast( this, status );
- result = this->last;
- }
-
-/* Return the result, */
- return result;
-}
-
-static int GetLatAxis( AstSkyFrame *this, int *status ) {
-/*
-* Name:
-* GetLatAxis
-
-* Purpose:
-* Obtain the index of the latitude axis of a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* int GetLatAxis( AstSkyFrame *this, int *status )
-
-* Class Membership:
-* SkyFrame member function.
-
-* Description:
-* This function returns the zero-based index of the latitude axis of
-* a SkyFrame, taking into account any current axis permutation.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The zero based axis index (0 or 1) of the latitude axis.
-
-* Notes:
-* - A value of one will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- int result; /* Result to be returned */
- const int *perm; /* Axis permutation array */
-
-/* Check the global error status. */
- if ( !astOK ) return 1;
-
-/* Initialise. */
- result = 1;
-
-/* Obtain a pointer to the SkyFrame's axis permutation array. */
- perm = astGetPerm( this );
- if ( astOK ) {
-
-/* Identify the latitude axis. */
- if( perm[ 0 ] == 1 ) {
- result = 0;
- } else {
- result = 1;
- }
-
- }
-
-/* Return the result. */
- return result;
-
-}
-
-static int GetLonAxis( AstSkyFrame *this, int *status ) {
-/*
-* Name:
-* GetLonAxis
-
-* Purpose:
-* Obtain the index of the longitude axis of a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* int GetLonAxis( AstSkyFrame *this, int *status )
-
-* Class Membership:
-* SkyFrame member function.
-
-* Description:
-* This function returns the zero-based index of the longitude axis of
-* a SkyFrame, taking into account any current axis permutation.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The zero based axis index (0 or 1) of the longitude axis.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- int result; /* Result to be returned */
- const int *perm; /* Axis permutation array */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Initialise. */
- result = 0;
-
-/* Obtain a pointer to the SkyFrame's axis permutation array. */
- perm = astGetPerm( this );
- if ( astOK ) {
-
-/* Identify the longitude axis. */
- if( perm[ 0 ] == 0 ) {
- result = 0;
- } else {
- result = 1;
- }
-
- }
-
-/* Return the result. */
- return result;
-
-}
-
-static double GetSkyRefP( AstSkyFrame *this, int axis, int *status ) {
-/*
-* Name:
-* GetSkyRefP
-
-* Purpose:
-* Obtain the value of the SkyRefP attribute for a SkyFrame axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* double GetSkyRefP( AstSkyFrame *this, int axis, int *status )
-
-* Class Membership:
-* SkyFrame member function.
-
-* Description:
-* This function returns the value of the SkyRefP attribute for a
-* SkyFrame axis, providing suitable defaults.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* axis
-* Axis index (zero-based) identifying the axis for which information is
-* required.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The SkyRefP value to be used.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- double result; /* Returned value */
- int axis_p; /* Permuted axis index */
-
-/* Initialise. */
- result = 0.0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Validate and permute the axis index. */
- axis_p = astValidateAxis( this, axis, "astGetSkyRefP" );
-
-/* Check if a value has been set for the required axis. If so, return it. */
- if( this->skyrefp[ axis_p ] != AST__BAD ) {
- result = this->skyrefp[ axis_p ];
-
-/* Otherwise, return the default value */
- } else {
-
-/* The default longitude value is always zero. */
- if( axis_p == 0 ) {
- result= 0.0;
-
-/* The default latitude value depends on SkyRef. The usual default is the
- north pole. The exception to this is if the SkyRef attribute identifies
- either the north or the south pole, in which case the origin is used as
- the default. Allow some tolerance. */
- } else if( fabs( cos( this->skyref[ 1 ] ) ) > 1.0E-10 ) {
- result = pi/2;
-
- } else {
- result = 0.0;
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetSymbol( AstFrame *this, int axis, int *status ) {
-/*
-* Name:
-* GetSymbol
-
-* Purpose:
-* Obtain a pointer to the Symbol string for a SkyFrame axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* const char *GetSymbol( AstFrame *this, int axis, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astGetSymbol method inherited
-* from the Frame class).
-
-* Description:
-* This function returns a pointer to the Symbol string for a specified axis
-* of a SkyFrame.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* axis
-* Axis index (zero-based) identifying the axis for which information is
-* required.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a constant null-terminated character string containing the
-* requested information.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstSystemType system; /* Code identifying type of sky coordinates */
- const char *result; /* Pointer to symbol string */
- int axis_p; /* Permuted axis index */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Initialise. */
- result = NULL;
-
-/* Validate and permute the axis index. */
- axis_p = astValidateAxis( this, axis, "astGetSymbol" );
-
-/* Check if a value has been set for the required axis symbol string. If so,
- invoke the parent astGetSymbol method to obtain a pointer to it. */
- if ( astTestSymbol( this, axis ) ) {
- result = (*parent_getsymbol)( this, axis, status );
-
-/* Otherwise, identify the sky coordinate system described by the SkyFrame. */
- } else {
- system = astGetSystem( this );
-
-/* If OK, supply a pointer to a suitable default Symbol string. */
- if ( astOK ) {
-
-/* Equatorial coordinate systems. */
- if ( IsEquatorial( system, status ) ) {
- result = ( axis_p == 0 ) ? "RA" : "Dec";
-
-/* Ecliptic coordinates. */
- } else if ( system == AST__ECLIPTIC ) {
- result = ( axis_p == 0 ) ? "Lambda" : "Beta";
-
-/* Helio-ecliptic coordinates. */
- } else if ( system == AST__HELIOECLIPTIC ) {
- result = ( axis_p == 0 ) ? "Lambda" : "Beta";
-
-/* AzEl coordinates. */
- } else if ( system == AST__AZEL ) {
- result = ( axis_p == 0 ) ? "Az" : "El";
-
-/* Galactic coordinates. */
- } else if ( system == AST__GALACTIC ) {
- result = ( axis_p == 0 ) ? "l" : "b";
-
-/* Supergalactic coordinates. */
- } else if ( system == AST__SUPERGALACTIC ) {
- result = ( axis_p == 0 ) ? "SGL" : "SGB";
-
-/* Unknown spherical coordinates. */
- } else if ( system == AST__UNKNOWN ) {
- result = ( axis_p == 0 ) ? "Lon" : "Lat";
-
-/* Report an error if the coordinate system was not recognised. */
- } else {
- astError( AST__SCSIN, "astGetSymbol(%s): Corrupt %s contains "
- "invalid sky coordinate system identification code "
- "(%d).", status, astGetClass( this ), astGetClass( this ),
- (int) system );
- }
-
-/* If the SkyRef attribute had a set value, prepend "D" (for "delta") to the
- Symbol. */
- if( astGetSkyRefIs( this ) != IGNORED_REF &&
- ( astTestSkyRef( this, 0 ) || astTestSkyRef( this, 1 ) ) ) {
- sprintf( getsymbol_buff, "D%s", result );
- result = getsymbol_buff;
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstSystemType GetAlignSystem( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetAlignSystem
-
-* Purpose:
-* Obtain the AlignSystem attribute for a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* AstSystemType GetAlignSystem( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astGetAlignSystem protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns the AlignSystem attribute for a SkyFrame.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The AlignSystem value.
-
-*/
-
-/* Local Variables: */
- AstSkyFrame *this; /* Pointer to SkyFrame structure */
- AstSystemType result; /* Value to return */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* If a AlignSystem attribute has been set, invoke the parent method to obtain
- it. */
- if ( astTestAlignSystem( this ) ) {
- result = (*parent_getalignsystem)( this_frame, status );
-
-/* Otherwise, provide a suitable default. */
- } else {
- result = AST__ICRS;
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstSystemType GetSystem( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetSystem
-
-* Purpose:
-* Obtain the System attribute for a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* AstSystemType GetSystem( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astGetSystem protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns the System attribute for a SkyFrame.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The System value.
-
-* Notes:
-* - AST__BADSYSTEM is returned if this function is invoked with
-* the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSkyFrame *this; /* Pointer to SkyFrame structure */
- AstSystemType result; /* Value to return */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* If a System attribute has been set, invoke the parent method to obtain
- it. */
- if ( astTestSystem( this ) ) {
- result = (*parent_getsystem)( this_frame, status );
-
-/* Otherwise, provide a suitable default. */
- } else {
- result = AST__ICRS;
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetTitle( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetTitle
-
-* Purpose:
-* Obtain a pointer to the Title string for a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* const char *GetTitle( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astGetTitle method inherited
-* from the Frame class).
-
-* Description:
-* This function returns a pointer to the Title string for a SkyFrame.
-* A pointer to a suitable default string is returned if no Title value has
-* previously been set.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a null-terminated character string containing the requested
-* information.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstSkyFrame *this; /* Pointer to SkyFrame structure */
- AstSystemType system; /* Code identifying type of sky coordinates */
- const char *extra; /* Pointer to extra information */
- const char *p; /* Character pointer */
- const char *projection; /* Pointer to sky projection description */
- const char *result; /* Pointer to result string */
- const char *word; /* Pointer to critical word */
- double epoch; /* Value of Epoch attribute */
- double equinox; /* Value of Equinox attribute */
- int lextra; /* Length of extra information */
- int offset; /* Using offset coordinate system? */
- int pos; /* Buffer position to enter text */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_frame);
-
-/* Initialise. */
- result = NULL;
- pos = 0;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* See if a Title string has been set. If so, use the parent astGetTitle
- method to obtain a pointer to it. */
- if ( astTestTitle( this ) ) {
- result = (*parent_gettitle)( this_frame, status );
-
-/* Otherwise, we will generate a default Title string. Obtain the values of the
- SkyFrame's attributes that determine what this string will be. */
- } else {
- epoch = astGetEpoch( this );
- equinox = astGetEquinox( this );
- projection = astGetProjection( this );
- system = astGetSystem( this );
-
-/* See if an offset coordinate system is being used.*/
- offset = ( astTestSkyRef( this, 0 ) || astTestSkyRef( this, 1 ) )
- && ( astGetSkyRefIs( this ) != IGNORED_REF );
-
-/* Use this to determine if the word "coordinates" or "offsets" should be
- used.*/
- word = offset ? "offsets" : "coordinates";
-
-/* Classify the coordinate system type and create an appropriate Title
- string. (Note that when invoking the astFmtDecimalYr function we must
- use a separate sprintf on each occasion so as not to over-write its
- internal buffer before the result string has been used.) */
- if ( astOK ) {
- result = gettitle_buff;
- switch ( system ) {
-
-/* FK4 equatorial coordinates. */
-/* --------------------------- */
-/* Display the Equinox and Epoch values. */
- case AST__FK4:
- pos = sprintf( gettitle_buff, "FK4 equatorial %s", word );
- if( astTestEquinox( this ) || astGetUseDefs( this ) ) {
- pos += sprintf( gettitle_buff + pos, "; mean equinox B%s",
- astFmtDecimalYr( palSlaEpb( equinox ), 9 ) );
- }
- if( astTestEpoch( this ) || astGetUseDefs( this ) ) {
- pos += sprintf( gettitle_buff + pos,
- "; epoch B%s", astFmtDecimalYr( palSlaEpb( epoch ), 9 ) );
- }
- break;
-
-/* FK4 coordinates with no E-terms of aberration. */
-/* ---------------------------------------------- */
-/* Display the Equinox and Epoch values. */
- case AST__FK4_NO_E:
- pos = sprintf( gettitle_buff, "FK4 equatorial %s; no E-terms", word );
- if( astTestEquinox( this ) || astGetUseDefs( this ) ) {
- pos += sprintf( gettitle_buff + pos, "; mean equinox B%s",
- astFmtDecimalYr( palSlaEpb( equinox ), 9 ) );
- }
- if( astTestEpoch( this ) || astGetUseDefs( this ) ) {
- pos += sprintf( gettitle_buff + pos,
- "; epoch B%s", astFmtDecimalYr( palSlaEpb( epoch ), 9 ) );
- }
- break;
-
-/* FK5 equatorial coordinates. */
-/* --------------------------- */
-/* Display only the Equinox value. */
- case AST__FK5:
- pos = sprintf( gettitle_buff, "FK5 equatorial %s", word );
- if( astTestEquinox( this ) || astGetUseDefs( this ) ) {
- pos += sprintf( gettitle_buff + pos, "; mean equinox J%s",
- astFmtDecimalYr( palSlaEpj( equinox ), 9 ) );
- }
- break;
-
-/* J2000 equatorial coordinates. */
-/* ----------------------------- */
-/* Based on the dynamically determined mean equator and equinox of J2000,
- rather than on a model such as FK4 or FK5 */
- case AST__J2000:
- pos = sprintf( gettitle_buff, "J2000 equatorial %s", word );
- break;
-
-/* ICRS coordinates. */
-/* ----------------- */
-/* ICRS is only like RA/Dec by co-incidence, it is not really an
- equatorial system by definition. */
- case AST__ICRS:
- pos = sprintf( gettitle_buff, "ICRS %s", word );
- break;
-
-/* AzEl coordinates. */
-/* ----------------- */
- case AST__AZEL:
- pos = sprintf( gettitle_buff, "Horizon (Azimuth/Elevation) %s", word );
- break;
-
-/* Geocentric apparent equatorial coordinates. */
-/* ------------------------------------------ */
-/* Display only the Epoch value. */
- case AST__GAPPT:
- pos = sprintf( gettitle_buff,
- "Geocentric apparent equatorial %s; "
- "; epoch J%s", word, astFmtDecimalYr( palSlaEpj( epoch ), 9 ) );
- break;
-
-/* Ecliptic coordinates. */
-/* --------------------- */
-/* Display only the Equinox value. */
- case AST__ECLIPTIC:
- pos = sprintf( gettitle_buff, "Ecliptic %s", word );
- if( astTestEquinox( this ) || astGetUseDefs( this ) ) {
- pos += sprintf( gettitle_buff + pos, "; mean equinox J%s",
- astFmtDecimalYr( palSlaEpj( equinox ), 9 ) );
- }
- break;
-
-/* Helio-ecliptic coordinates. */
-/* --------------------------- */
-/* Display only the Epoch value (equinox is fixed). */
- case AST__HELIOECLIPTIC:
- pos = sprintf( gettitle_buff, "Helio-ecliptic %s; mean equinox J2000", word );
- if( astTestEpoch( this ) || astGetUseDefs( this ) ) {
- pos += sprintf( gettitle_buff + pos, "; epoch J%s",
- astFmtDecimalYr( palSlaEpj( epoch ), 9 ) );
- }
- break;
-
-/* Galactic coordinates. */
-/* --------------------- */
-/* Do not display an Equinox or Epoch value. */
- case AST__GALACTIC:
- pos = sprintf( gettitle_buff, "IAU (1958) galactic %s", word );
- break;
-
-/* Supergalactic coordinates. */
-/* -------------------------- */
-/* Do not display an Equinox or Epoch value. */
- case AST__SUPERGALACTIC:
- pos = sprintf( gettitle_buff,
- "De Vaucouleurs supergalactic %s", word );
- break;
-
-/* Unknown coordinates. */
-/* -------------------------- */
- case AST__UNKNOWN:
- pos = sprintf( gettitle_buff,
- "Spherical %s", word );
- break;
-
-/* Report an error if the coordinate system was not recognised. */
- default:
- astError( AST__SCSIN, "astGetTitle(%s): Corrupt %s contains "
- "invalid sky coordinate system identification code "
- "(%d).", status, astGetClass( this ), astGetClass( this ),
- (int) system );
- break;
- }
-
-/* If OK, we add either a description of the sky projection, or (if used)
- a description of the origin or pole of the offset coordinate system.
- We include only one of these two strings in order to keep the length
- of the title down to a reasonable value.*/
- if ( astOK ) {
-
-/* If the SkyRef attribute has set values, create a description of the offset
- coordinate system. */
- if( offset ){
- word = ( astGetSkyRefIs( this ) == POLE_REF )?"pole":"origin";
- lextra = sprintf( gettitle_buff2, "%s at %s ", word,
- astFormat( this, 0, astGetSkyRef( this, 0 ) ) );
- lextra += sprintf( gettitle_buff2 + lextra, "%s",
- astFormat( this, 1, astGetSkyRef( this, 1 ) ) );
- extra = gettitle_buff2;
-
-/* Otherwise, get the sky projection description. */
- } else {
- extra = projection;
-
-/* Determine the length of the extra information, after removing trailing
- white space. */
- for ( lextra = (int) strlen( extra ); lextra > 0; lextra-- ) {
- if ( !isspace( extra[ lextra - 1 ] ) ) break;
- }
- }
-
-/* If non-blank extra information is available, append it to the title string,
- checking that the end of the buffer is not over-run. */
- if ( lextra ) {
- p = "; ";
- while ( ( pos < AST__SKYFRAME_GETTITLE_BUFF_LEN ) && *p ) gettitle_buff[ pos++ ] = *p++;
- p = extra;
- while ( ( pos < AST__SKYFRAME_GETTITLE_BUFF_LEN ) &&
- ( p < ( extra + lextra ) ) ) gettitle_buff[ pos++ ] = *p++;
- if( extra == projection ) {
- p = " projection";
- while ( ( pos < AST__SKYFRAME_GETTITLE_BUFF_LEN ) && *p ) gettitle_buff[ pos++ ] = *p++;
- }
- gettitle_buff[ pos ] = '\0';
- }
- }
- }
- }
-
-/* If an error occurred, clear the returned pointer value. */
- if ( !astOK ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetUnit( AstFrame *this_frame, int axis, int *status ) {
-/*
-* Name:
-* GetUnit
-
-* Purpose:
-* Obtain a pointer to the Unit string for a SkyFrame's axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* const char *GetUnit( AstFrame *this_frame, int axis )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astGetUnit method inherited
-* from the Frame class).
-
-* Description:
-* This function returns a pointer to the Unit string for a specified axis
-* of a SkyFrame. If the Unit attribute has not been set for the axis, a
-* pointer to a suitable default string is returned instead. This string may
-* depend on the value of the Format attribute for the axis and, in turn, on
-* the type of sky coordinate system that the SkyFrame describes.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* axis
-* The number of the axis (zero-based) for which information is required.
-
-* Returned Value:
-* A pointer to a null-terminated string containing the Unit value.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSkyFrame *this; /* Pointer to the SkyFrame structure */
- const char *result; /* Pointer value to return */
- int format_set; /* Format attribute set? */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis, "astGetUnit" );
-
-/* The Unit value may depend on the value of the Format attribute, so
- determine if a Format value has been set for the axis and set a
- temporary value if it has not. Use the GetFormat member function
- for this class together with member functions inherited from the
- parent class (rather than using the object's methods directly)
- because if any of these methods have been over-ridden by a derived
- class the Format string syntax may no longer be compatible with
- this class. */
- format_set = (*parent_testformat)( this_frame, axis, status );
- if ( !format_set ) {
- (*parent_setformat)( this_frame, axis, GetFormat( this_frame, axis, status ), status );
- }
-
-/* Use the parent GetUnit method to return a pointer to the required Unit
- string. */
- result = (*parent_getunit)( this_frame, axis, status );
-
-/* If necessary, clear any temporary Format value that was set above. */
- if ( !format_set ) (*parent_clearformat)( this_frame, axis, status );
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-void astInitSkyFrameVtab_( AstSkyFrameVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitSkyFrameVtab
-
-* Purpose:
-* Initialise a virtual function table for a SkyFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void astInitSkyFrameVtab( AstSkyFrameVtab *vtab, const char *name )
-
-* Class Membership:
-* SkyFrame vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the SkyFrame class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrameVtab *frame; /* Pointer to Frame component of Vtab */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- int stat; /* SLALIB status */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitFrameVtab( (AstFrameVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsASkyFrame) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstFrameVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
- vtab->ClearAsTime = ClearAsTime;
- vtab->ClearEquinox = ClearEquinox;
- vtab->ClearNegLon = ClearNegLon;
- vtab->ClearProjection = ClearProjection;
- vtab->GetAsTime = GetAsTime;
- vtab->GetEquinox = GetEquinox;
- vtab->GetNegLon = GetNegLon;
- vtab->GetLatAxis = GetLatAxis;
- vtab->GetLonAxis = GetLonAxis;
- vtab->GetProjection = GetProjection;
- vtab->SetAsTime = SetAsTime;
- vtab->SetEquinox = SetEquinox;
- vtab->SetNegLon = SetNegLon;
- vtab->SetProjection = SetProjection;
- vtab->TestAsTime = TestAsTime;
- vtab->TestEquinox = TestEquinox;
- vtab->TestNegLon = TestNegLon;
- vtab->TestProjection = TestProjection;
-
- vtab->TestSkyRef = TestSkyRef;
- vtab->SetSkyRef = SetSkyRef;
- vtab->GetSkyRef = GetSkyRef;
- vtab->ClearSkyRef = ClearSkyRef;
-
- vtab->TestSkyRefP = TestSkyRefP;
- vtab->SetSkyRefP = SetSkyRefP;
- vtab->GetSkyRefP = GetSkyRefP;
- vtab->ClearSkyRefP = ClearSkyRefP;
-
- vtab->TestSkyRefIs = TestSkyRefIs;
- vtab->SetSkyRefIs = SetSkyRefIs;
- vtab->GetSkyRefIs = GetSkyRefIs;
- vtab->ClearSkyRefIs = ClearSkyRefIs;
-
- vtab->TestAlignOffset = TestAlignOffset;
- vtab->SetAlignOffset = SetAlignOffset;
- vtab->GetAlignOffset = GetAlignOffset;
- vtab->ClearAlignOffset = ClearAlignOffset;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- frame = (AstFrameVtab *) vtab;
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
- parent_gettop = frame->GetTop;
- frame->GetTop = GetTop;
-
- parent_setobsalt = frame->SetObsAlt;
- frame->SetObsAlt = SetObsAlt;
-
- parent_setobslat = frame->SetObsLat;
- frame->SetObsLat = SetObsLat;
-
- parent_setobslon = frame->SetObsLon;
- frame->SetObsLon = SetObsLon;
-
- parent_clearobslon = frame->ClearObsLon;
- frame->ClearObsLon = ClearObsLon;
-
- parent_clearobsalt = frame->ClearObsAlt;
- frame->ClearObsAlt = ClearObsAlt;
-
- parent_clearobslat = frame->ClearObsLat;
- frame->ClearObsLat = ClearObsLat;
-
- parent_getbottom = frame->GetBottom;
- frame->GetBottom = GetBottom;
-
- parent_getepoch = frame->GetEpoch;
- frame->GetEpoch = GetEpoch;
-
- parent_format = frame->Format;
- frame->Format = Format;
- parent_gap = frame->Gap;
- frame->Gap = Gap;
- parent_getdirection = frame->GetDirection;
- frame->GetDirection = GetDirection;
- parent_getdomain = frame->GetDomain;
- frame->GetDomain = GetDomain;
- parent_getsystem = frame->GetSystem;
- frame->GetSystem = GetSystem;
- parent_setsystem = frame->SetSystem;
- frame->SetSystem = SetSystem;
- parent_clearsystem = frame->ClearSystem;
- frame->ClearSystem = ClearSystem;
- parent_getalignsystem = frame->GetAlignSystem;
- frame->GetAlignSystem = GetAlignSystem;
- parent_getformat = frame->GetFormat;
- frame->GetFormat = GetFormat;
- parent_getlabel = frame->GetLabel;
- frame->GetLabel = GetLabel;
- parent_getsymbol = frame->GetSymbol;
- frame->GetSymbol = GetSymbol;
- parent_gettitle = frame->GetTitle;
- frame->GetTitle = GetTitle;
- parent_getunit = frame->GetUnit;
- frame->GetUnit = GetUnit;
- parent_match = frame->Match;
- frame->Match = Match;
- parent_overlay = frame->Overlay;
- frame->Overlay = Overlay;
- parent_subframe = frame->SubFrame;
- frame->SubFrame = SubFrame;
- parent_unformat = frame->Unformat;
- frame->Unformat = Unformat;
-
- parent_setepoch = frame->SetEpoch;
- frame->SetEpoch = SetEpoch;
-
- parent_clearepoch = frame->ClearEpoch;
- frame->ClearEpoch = ClearEpoch;
-
- parent_setdut1 = frame->SetDut1;
- frame->SetDut1 = SetDut1;
-
- parent_cleardut1 = frame->ClearDut1;
- frame->ClearDut1 = ClearDut1;
-
-/* Store replacement pointers for methods which will be over-ridden by new
- member functions implemented here. */
- frame->Angle = Angle;
- frame->Distance = Distance;
- frame->Intersect = Intersect;
- frame->Norm = Norm;
- frame->NormBox = NormBox;
- frame->Resolve = Resolve;
- frame->ResolvePoints = ResolvePoints;
- frame->Offset = Offset;
- frame->Offset2 = Offset2;
- frame->ValidateSystem = ValidateSystem;
- frame->SystemString = SystemString;
- frame->SystemCode = SystemCode;
- frame->LineDef = LineDef;
- frame->LineContains = LineContains;
- frame->LineCrossing = LineCrossing;
- frame->LineOffset = LineOffset;
- frame->GetActiveUnit = GetActiveUnit;
- frame->TestActiveUnit = TestActiveUnit;
- frame->MatchAxesX = MatchAxesX;
-
-/* Store pointers to inherited methods that will be invoked explicitly
- by this class. */
- parent_clearformat = frame->ClearFormat;
- parent_setformat = frame->SetFormat;
- parent_testformat = frame->TestFormat;
-
-/* Declare the copy constructor, destructor and class dump
- function. */
- astSetCopy( vtab, Copy );
- astSetDelete( vtab, Delete );
- astSetDump( vtab, Dump, "SkyFrame",
- "Description of celestial coordinate system" );
-
-/* Initialise information about the tables of cached Local Apparent
- Sidereal Time values stored in the vtab. */
- vtab->nlast_tables = 0;
- vtab->last_tables = NULL;
-
-/* Initialize constants for converting between hours, degrees and
- radians, etc.. */
- LOCK_MUTEX2
- palSlaDtf2r( 1, 0, 0.0, &hr2rad, &stat );
- palSlaDaf2r( 1, 0, 0.0, °2rad, &stat );
- palSlaDaf2r( 180, 0, 0.0, &pi, &stat );
- piby2 = 0.5*pi;
- UNLOCK_MUTEX2
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static void Intersect( AstFrame *this_frame, const double a1[2],
- const double a2[2], const double b1[2],
- const double b2[2], double cross[2],
- int *status ) {
-/*
-* Name:
-* Intersect
-
-* Purpose:
-* Find the point of intersection between two geodesic curves.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void Intersect( AstFrame *this_frame, const double a1[2],
-* const double a2[2], const double b1[2],
-* const double b2[2], double cross[2],
-* int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astIntersect method
-* inherited from the Frame class).
-
-* Description:
-* This function finds the coordinate values at the point of
-* intersection between two geodesic curves. Each curve is specified
-* by two points on the curve.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* a1
-* An array of double, with one element for each Frame axis.
-* This should contain the coordinates of a point on the first
-* geodesic curve.
-* a2
-* An array of double, with one element for each Frame axis.
-* This should contain the coordinates of a second point on the
-* first geodesic curve.
-* b1
-* An array of double, with one element for each Frame axis.
-* This should contain the coordinates of a point on the second
-* geodesic curve.
-* b2
-* An array of double, with one element for each Frame axis.
-* This should contain the coordinates of a second point on
-* the second geodesic curve.
-* cross
-* An array of double, with one element for each Frame axis
-* in which the coordinates of the required intersection
-* point will be returned. These will be AST__BAD if the curves do
-* not intersect.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The geodesic curve used by this function is the path of
-* shortest distance between two points, as defined by the
-* astDistance function.
-* - This function will return "bad" coordinate values (AST__BAD)
-* if any of the input coordinates has this value.
-* - For SkyFrames each curve will be a great circle, and in general
-* each pair of curves will intersect at two diametrically opposite
-* points on the sky. The returned position is the one which is
-* closest to point "a1".
-*/
-
-/* Local Variables: */
- AstSkyFrame *this; /* Pointer to the SkyFrame structure */
- const int *perm; /* Pointer to axis permutation array */
- double aa1[ 2 ]; /* Permuted coordinates for a1 */
- double aa2[ 2 ]; /* Permuted coordinates for a2 */
- double bb1[ 2 ]; /* Permuted coordinates for b1 */
- double bb2[ 2 ]; /* Permuted coordinates for b2 */
- double cc[ 2 ]; /* Permuted coords at intersection */
- double d1; /* Cos(distance from a1 to vp) */
- double d2; /* Cos(distance from a1 to -vp) */
- double na[ 3 ]; /* Normal to the a1/a2 great circle */
- double nb[ 3 ]; /* Normal to the b1/b2 great circle */
- double va1[ 3 ]; /* Vector pointing at a1 */
- double va2[ 3 ]; /* Vector pointing at a2 */
- double vb1[ 3 ]; /* Vector pointing at b1 */
- double vb2[ 3 ]; /* Vector pointing at b2 */
- double vmod; /* Length of "vp" */
- double vp[ 3 ]; /* Vector pointing at the intersection */
- double vpn[ 3 ]; /* Normalised vp */
- int iaxis; /* Axis index */
-
-/* Initialise. */
- cross[ 0 ] = AST__BAD;
- cross[ 1 ] = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* Check that all supplied values are OK. */
- if ( ( a1[ 0 ] != AST__BAD ) && ( a1[ 1 ] != AST__BAD ) &&
- ( a2[ 0 ] != AST__BAD ) && ( a2[ 1 ] != AST__BAD ) &&
- ( b1[ 0 ] != AST__BAD ) && ( b1[ 1 ] != AST__BAD ) &&
- ( b2[ 0 ] != AST__BAD ) && ( b2[ 1 ] != AST__BAD ) ) {
-
-/* Obtain a pointer to the SkyFrame's axis permutation array. */
- perm = astGetPerm( this );
- if ( astOK ) {
-
-/* Apply the axis permutation array to obtain the coordinates of
- the points in the required (longitude,latitude) order. */
- for( iaxis = 0; iaxis < 2; iaxis++ ) {
- aa1[ perm[ iaxis ] ] = a1[ iaxis ];
- aa2[ perm[ iaxis ] ] = a2[ iaxis ];
- bb1[ perm[ iaxis ] ] = b1[ iaxis ];
- bb2[ perm[ iaxis ] ] = b2[ iaxis ];
- }
-
-/* Convert each (lon,lat) pair into a unit length 3-vector. */
- palSlaDcs2c( aa1[ 0 ], aa1[ 1 ], va1 );
- palSlaDcs2c( aa2[ 0 ], aa2[ 1 ], va2 );
- palSlaDcs2c( bb1[ 0 ], bb1[ 1 ], vb1 );
- palSlaDcs2c( bb2[ 0 ], bb2[ 1 ], vb2 );
-
-/* Find the normal vectors to the two great cicles. */
- palSlaDvxv( va1, va2, na );
- palSlaDvxv( vb1, vb2, nb );
-
-/* The cross product of the two normal vectors points to one of the
- two diametrically opposite intersections. */
- palSlaDvxv( na, nb, vp );
-
-/* Normalise the "vp" vector, also obtaining its original modulus. */
- palSlaDvn( vp, vpn, &vmod );
- if( vmod != 0.0 ) {
-
-/* We want the intersection which is closest to "a1". The dot product
- gives the cos(distance) between two positions. So find the dot
- product between "a1" and "vpn", and then between "a1" and the point
- diametrically opposite "vpn". */
- d1 = palSlaDvdv( vpn, va1 );
- vpn[ 0 ] = -vpn[ 0 ];
- vpn[ 1 ] = -vpn[ 1 ];
- vpn[ 2 ] = -vpn[ 2 ];
- d2 = palSlaDvdv( vpn, va1 );
-
-/* Revert to "vpn" if it is closer to "a1". */
- if( d1 > d2 ) {
- vpn[ 0 ] = -vpn[ 0 ];
- vpn[ 1 ] = -vpn[ 1 ];
- vpn[ 2 ] = -vpn[ 2 ];
- }
-
-/* Convert the vector back into a (lon,lat) pair, and put the longitude
- into the range 0 to 2.pi. */
- palSlaDcc2s( vpn, cc, cc + 1 );
- *cc = palSlaDranrm( *cc );
-
-/* Permute the result coordinates to undo the effect of the SkyFrame
- axis permutation array. */
- cross[ 0 ] = cc[ perm[ 0 ] ];
- cross[ 1 ] = cc[ perm[ 1 ] ];
- }
- }
- }
-}
-
-static int IsEquatorial( AstSystemType system, int *status ) {
-/*
-* Name:
-* IsEquatorial
-
-* Purpose:
-* Test for an equatorial sky coordinate system.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* int IsEquatorial( AstSystemType system, int *status )
-
-* Class Membership:
-* SkyFrame member function.
-
-* Description:
-* This function returns a boolean value to indicate if a sky coordinate
-* system is equatorial.
-
-* Parameters:
-* system
-* Code to identify the sky coordinate system.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the sky coordinate system is equatorial, otherwise zero.
-
-* Notes:
-* - A value of zero is returned if this function is invoked with the
-* global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- int result; /* Result value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Determine if the sky coordinate system is an equatorial one. Note,
- ICRS is not equatorial by definition, but is included here because it
- is normally treated as an equatorial system in terms of the axis
- labels, formats, etc. */
- result = ( ( system == AST__FK4 ) ||
- ( system == AST__FK4_NO_E ) ||
- ( system == AST__ICRS ) ||
- ( system == AST__FK5 ) ||
- ( system == AST__J2000 ) ||
- ( system == AST__GAPPT ) );
-
-/* Return the result. */
- return result;
-}
-
-static int LineContains( AstFrame *this, AstLineDef *l, int def, double *point, int *status ) {
-/*
-* Name:
-* LineContains
-
-* Purpose:
-* Determine if a line contains a point.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* int LineContains( AstFrame *this, AstLineDef *l, int def, double *point, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the protected astLineContains
-* method inherited from the Frame class).
-
-* Description:
-* This function determines if the supplied point is on the supplied
-* line within the supplied Frame. The start point of the line is
-* considered to be within the line, but the end point is not. The tests
-* are that the point of closest approach of the line to the point should
-* be between the start and end, and that the distance from the point to
-* the point of closest aproach should be less than 1.0E-7 of the length
-* of the line.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* l
-* Pointer to the structure defining the line.
-* def
-* Should be set non-zero if the "point" array was created by a
-* call to astLineCrossing (in which case it may contain extra
-* information following the axis values),and zero otherwise.
-* point
-* Point to an array containing the axis values of the point to be
-* tested, possibly followed by extra cached information (see "def").
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if the line contains the point.
-
-* Notes:
-* - The pointer supplied for "l" should have been created using the
-* astLineDef method. These structures contained cached information about
-* the lines which improve the efficiency of this method when many
-* repeated calls are made. An error will be reported if the structure
-* does not refer to the Frame specified by "this".
-* - Zero will be returned if this function is invoked with the global
-* error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- SkyLineDef *sl; /* SkyLine information */
- const int *perm; /* Pointer to axis permutation array */
- double *b; /* Pointer to Cartesian coords array */
- double bb[3]; /* Buffer for Cartesian coords */
- double p1[2]; /* Buffer for Spherical coords */
- double t1, t2;
- int result; /* Returned value */
-
-/* Initialise */
- result =0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Check that the line refers to the supplied Frame. */
- if( l->frame != this ) {
- astError( AST__INTER, "astLineContains(%s): The supplied line does "
- "not relate to the supplied %s (AST internal programming "
- "error).", status, astGetClass( this ), astGetClass( this ) );
-
-/* Check the axis values are good */
- } else if( point[ 0 ] != AST__BAD && point[ 1 ] != AST__BAD ){
-
-/* Get a pointer to an array holding the corresponding Cartesian coords. */
- if( def ) {
- b = point + 2;
-
- } else {
- perm = astGetPerm( this );
- if ( perm ) {
- p1[ perm[ 0 ] ] = point[ 0 ];
- p1[ perm[ 1 ] ] = point[ 1 ];
- palSlaDcs2c( p1[ 0 ], p1[ 1 ], bb );
- b = bb;
- } else {
- b = NULL;
- }
- }
-
-/* Recast the supplied AstLineDef into a SkyLineDef to get the different
- structure (we know from the above check on the Frame that it is safe to
- do this). */
- sl = (SkyLineDef *) l;
-
-/* Check that the point of closest approach of the line to the point is
- within the limits of the line. */
- if( LineIncludes( sl, b, status ) ){
-
-/* Check that the point is 90 degrees away from the pole of the great
- circle containing the line. */
- t1 = palSlaDvdv( sl->q, b );
- t2 = 1.0E-7*sl->length;
- if( t2 < 1.0E-10 ) t2 = 1.0E-10;
- if( fabs( t1 ) <= t2 ) result = 1;
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static int LineCrossing( AstFrame *this, AstLineDef *l1, AstLineDef *l2,
- double **cross, int *status ) {
-/*
-* Name:
-* LineCrossing
-
-* Purpose:
-* Determine if two lines cross.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* int LineCrossing( AstFrame *this, AstLineDef *l1, AstLineDef *l2,
-* double **cross, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the protected astLineCrossing
-* method inherited from the Frame class).
-
-* Description:
-* This function determines if the two suplied line segments cross,
-* and if so returns the axis values at the point where they cross.
-* A flag is also returned indicating if the crossing point occurs
-* within the length of both line segments, or outside one or both of
-* the line segments.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* l1
-* Pointer to the structure defining the first line.
-* l2
-* Pointer to the structure defining the second line.
-* cross
-* Pointer to a location at which to put a pointer to a dynamically
-* alocated array containing the axis values at the crossing. If
-* NULL is supplied no such array is returned. Otherwise, the returned
-* array should be freed using astFree when no longer needed. If the
-* lines are parallel (i.e. do not cross) then AST__BAD is returned for
-* all axis values. Note usable axis values are returned even if the
-* lines cross outside the segment defined by the start and end points
-* of the lines. The order of axes in the returned array will take
-* account of the current axis permutation array if appropriate. Note,
-* sub-classes such as SkyFrame may append extra values to the end
-* of the basic frame axis values. A NULL pointer is returned if an
-* error occurs.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if the lines cross at a point which is
-* within the [start,end) segment of both lines. If the crossing point
-* is outside this segment on either line, or if the lines are parallel,
-* zero is returned. Note, the start point is considered to be inside
-* the length of the segment, but the end point is outside.
-
-* Notes:
-* - The pointers supplied for "l1" and "l2" should have been created
-* using the astLineDef method. These structures contained cached
-* information about the lines which improve the efficiency of this method
-* when many repeated calls are made. An error will be reported if
-* either structure does not refer to the Frame specified by "this".
-* - Zero will be returned if this function is invoked with the global
-* error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- SkyLineDef *sl1; /* SkyLine information for line 1 */
- SkyLineDef *sl2; /* SkyLine information for line 2 */
- const int *perm; /* Pointer to axis permutation array */
- double *crossing; /* Pointer to returned array */
- double *b; /* Pointer to Cartesian coords */
- double len; /* Vector length */
- double p[ 2 ]; /* Temporary (lon,lat) pair */
- double temp[ 3 ]; /* Temporary vector */
- int result; /* Returned value */
-
-/* Initialise */
- result = 0;
- if( cross ) *cross = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Allocate returned array (2 elements for the lon and lat values, plus 3
- for the corresponding (x,y,z) coords). */
- crossing = astMalloc( sizeof(double)*5 );
-
-/* Check that both lines refer to the supplied Frame. */
- if( l1->frame != this ) {
- astError( AST__INTER, "astLineCrossing(%s): First supplied line does "
- "not relate to the supplied %s (AST internal programming "
- "error).", status, astGetClass( this ), astGetClass( this ) );
-
- } else if( l2->frame != this ) {
- astError( AST__INTER, "astLineCrossing(%s): Second supplied line does "
- "not relate to the supplied %s (AST internal programming "
- "error).", status, astGetClass( this ), astGetClass( this ) );
-
-/* Recast the supplied AstLineDefs into a SkyLineDefs to get the different
- structure (we know from the above check on the Frame that it is safe to
- do this). */
- } else if( crossing ){
- sl1 = (SkyLineDef *) l1;
- sl2 = (SkyLineDef *) l2;
-
-/* Point of intersection of the two great circles is perpendicular to the
- pole vectors of both great circles. Put the Cartesian coords in elements
- 2 to 4 of the returned array. */
- palSlaDvxv( sl1->q, sl2->q, temp );
- b = crossing + 2;
- palSlaDvn( temp, b, &len );
-
-/* See if this point is within the length of both arcs. If so return it. */
- if( LineIncludes( sl2, b, status ) && LineIncludes( sl1, b, status ) ) {
- result = 1;
-
-/* If not, see if the negated b vector is within the length of both arcs.
- If so return it. Otherwise, we return zero. */
- } else {
- b[ 0 ] *= -1.0;
- b[ 1 ] *= -1.0;
- b[ 2 ] *= -1.0;
- if( LineIncludes( sl2, b, status ) && LineIncludes( sl1, b, status ) ) result = 1;
- }
-
-/* Store the spherical coords in elements 0 and 1 of the returned array. */
- palSlaDcc2s( b, p, p + 1 );
-
-/* Permute the spherical axis value into the order used by the SkyFrame. */
- perm = astGetPerm( this );
- if( perm ){
- crossing[ 0 ] = p[ perm[ 0 ] ];
- crossing[ 1 ] = p[ perm[ 1 ] ];
- }
- }
-
-/* If an error occurred, return 0. */
- if( !astOK ) {
- result = 0;
- crossing = astFree( crossing );
- }
-
-/* Return the array */
- if( cross ) {
- *cross = crossing;
- } else {
- crossing = astFree( crossing );
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstLineDef *LineDef( AstFrame *this, const double start[2],
- const double end[2], int *status ) {
-/*
-* Name:
-* LineDef
-
-* Purpose:
-* Creates a structure describing a line segment in a 2D Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* AstLineDef *LineDef( AstFrame *this, const double start[2],
-* const double end[2], int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the protected astLineDef
-* method inherited from the Frame class).
-
-* Description:
-* This function creates a structure containing information describing a
-* given line segment within the supplied 2D Frame. This may include
-* information which allows other methods such as astLineCrossing to
-* function more efficiently. Thus the returned structure acts as a
-* cache to store intermediate values used by these other methods.
-
-* Parameters:
-* this
-* Pointer to the Frame. Must have 2 axes.
-* start
-* An array of 2 doubles marking the start of the line segment.
-* end
-* An array of 2 doubles marking the end of the line segment.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the memory structure containing the description of the
-* line. This structure should be freed using astFree when no longer
-* needed. A NULL pointer is returned (without error) if any of the
-* supplied axis values are AST__BAD.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- SkyLineDef *result; /* Returned value */
- const int *perm; /* Axis permutation array */
- double len; /* Permuted point1 coordinates */
- double p1[ 2 ]; /* Permuted point1 coordinates */
- double p2[ 2 ]; /* Permuted point2 coordinates */
- double temp[3]; /* Cartesian coords at offset position */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Check the axis values are good */
- if( start[ 0 ] != AST__BAD && start[ 1 ] != AST__BAD &&
- end[ 0 ] != AST__BAD && end[ 1 ] != AST__BAD ) {
-
-/* Allocate memory for the returned structure. */
- result = astMalloc( sizeof( SkyLineDef ) );
-
-/* Obtain a pointer to the SkyFrame's axis permutation array. */
- perm = astGetPerm( this );
- if ( perm ) {
-
-/* Apply the axis permutation array to obtain the coordinates of the two
- input points in the required (longitude,latitude) order. */
- p1[ perm[ 0 ] ] = start[ 0 ];
- p1[ perm[ 1 ] ] = start[ 1 ];
- p2[ perm[ 0 ] ] = end[ 0 ];
- p2[ perm[ 1 ] ] = end[ 1 ];
-
-/* Convert each point into a 3-vector of unit length and store in the
- returned structure. */
- palSlaDcs2c( p1[ 0 ], p1[ 1 ], result->start );
- palSlaDcs2c( p2[ 0 ], p2[ 1 ], result->end );
-
-/* Calculate the great circle distance between the points in radians and
- store in the result structure. */
- result->length = acos( palSlaDvdv( result->start, result->end ) );
-
-/* Find a unit vector representing the pole of the system in which the
- equator is given by the great circle. This is such that going the
- short way from the start to the end, the pole is to the left of the
- line as seen by the observer (i.e. from the centre of the sphere).
- If the line has zero length, or 180 degrees length, the pole is
- undefined, so we use an arbitrary value. */
- if( result->length == 0.0 || result->length > pi - 5.0E-11 ) {
- palSlaDcs2c( p1[ 0 ] + 0.01, p1[ 1 ] + 0.01, temp );
- palSlaDvxv( temp, result->start, result->dir );
- } else {
- palSlaDvxv( result->end, result->start, result->dir );
- }
- palSlaDvn( result->dir, result->q, &len );
-
-/* Also store a point which is 90 degrees along the great circle from the
- start. */
- palSlaDvxv( result->start, result->q, result->dir );
-
-/* Store a pointer to the defining SkyFrame. */
- result->frame = this;
-
-/* Indicate that the line is considered to be terminated at the start and
- end points. */
- result->infinite = 0;
-
-
- result->start_2d[ 0 ] = start[ 0 ];
- result->start_2d[ 1 ] = start[ 1 ];
- result->end_2d[ 0 ] = end[ 0 ];
- result->end_2d[ 1 ] = end[ 1 ];
-
- astNorm( this, result->start_2d );
- astNorm( this, result->end_2d );
-
- }
- }
-
-/* Free the returned pointer if an error occurred. */
- if( !astOK ) result = astFree( result );
-
-/* Return a pointer to the output structure. */
- return (AstLineDef *) result;
-}
-
-static int LineIncludes( SkyLineDef *l, double point[3], int *status ) {
-/*
-* Name:
-* LineIncludes
-
-* Purpose:
-* Determine if a line includes a point which is known to be in the
-* great circle.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* int LineIncludes( SkyLineDef *l, double point[3], int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the protected astLineIncludes
-* method inherited from the Frame class).
-
-* Description:
-* The supplied point is assumed to be a point on the great circle of
-* which the supplied line is a segment. This function returns true if
-* "point" is within the bounds of the segment (the end point of the
-* line is assumed * not to be part of the segment).
-
-* Parameters:
-* l
-* Pointer to the structure defining the line.
-* point
-* An array holding the Cartesian coords of the point to be tested.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if the line includes the point.
-
-* Notes:
-* - Zero will be returned if this function is invoked with the global
-* error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- double t1, t2, t3;
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* If the line is of infite length, it is assumed to include the supplied
- point. */
- if( l->infinite ) return 1;
-
-/* Otherwise, get the unsigned distance of the point from the start of the
- line in the range 0 - 180 degs. Check it is less than the line length.
- Then check that the point is not more than 90 degs away from the quarter
- point. */
- t1 = palSlaDvdv( l->start, point );
- t2 = acos( t1 );
- t3 = palSlaDvdv( l->dir, point );
- return ( ((l->length > 0) ? t2 < l->length : t2 == 0.0 ) && t3 >= -1.0E-8 );
-}
-
-static void LineOffset( AstFrame *this, AstLineDef *line, double par,
- double prp, double point[2], int *status ){
-/*
-* Name:
-* LineOffset
-
-* Purpose:
-* Find a position close to a line.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void LineOffset( AstFrame *this, AstLineDef *line, double par,
-* double prp, double point[2], int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the protected astLineOffset
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a position formed by moving a given distance along
-* the supplied line, and then a given distance away from the supplied line.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* line
-* Pointer to the structure defining the line.
-* par
-* The distance to move along the line from the start towards the end.
-* prp
-* The distance to move at right angles to the line. Positive
-* values result in movement to the left of the line, as seen from
-* the observer, when moving from start towards the end.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The pointer supplied for "line" should have been created using the
-* astLineDef method. This structure contains cached information about the
-* line which improves the efficiency of this method when many repeated
-* calls are made. An error will be reported if the structure does not
-* refer to the Frame specified by "this".
-*-
-*/
-
-/* Local Variables; */
- SkyLineDef *sl;
- const int *perm;
- double c;
- double nx;
- double ny;
- double nz;
- double p[2];
- double s;
- double v[3];
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Check that the line refers to the supplied Frame. */
- if( line->frame != this ) {
- astError( AST__INTER, "astLineOffset(%s): The supplied line does "
- "not relate to the supplied %s (AST internal programming "
- "error).", status, astGetClass( this ), astGetClass( this ) );
-
-/* This implementation uses spherical geometry. */
- } else {
-
-/* Get a pointer to the SkyLineDef structure. */
- sl = (SkyLineDef *) line;
-
-/* Move a distance par from start to end. */
- c = cos( par );
- s = sin( par );
- nx = c * sl->start[ 0 ] + s * sl->dir[ 0 ];
- ny = c * sl->start[ 1 ] + s * sl->dir[ 1 ];
- nz = c * sl->start[ 2 ] + s * sl->dir[ 2 ];
-
-/* Move a distance prp from this point towards the pole point. */
- if( prp != 0.0 ) {
- c = cos( prp );
- s = sin( prp );
- v[ 0 ] = c * nx + s * sl->q[ 0 ];
- v[ 1 ] = c * ny + s * sl->q[ 1 ];
- v[ 2 ] = c * nz + s * sl->q[ 2 ];
- } else {
- v[ 0 ] = nx;
- v[ 1 ] = ny;
- v[ 2 ] = nz;
- }
-
-/* Convert to lon/lat */
- palSlaDcc2s( v, p, p + 1 );
-
-/* Permute the spherical axis value into the order used by the SkyFrame. */
- perm = astGetPerm( this );
- if( perm ){
- point[ 0 ] = p[ perm[ 0 ] ];
- point[ 1 ] = p[ perm[ 1 ] ];
- }
- }
-}
-
-static int MakeSkyMapping( AstSkyFrame *target, AstSkyFrame *result,
- AstSystemType align_sys, AstMapping **map, int *status ) {
-/*
-* Name:
-* MakeSkyMapping
-
-* Purpose:
-* Generate a Mapping between two SkyFrames.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* int MakeSkyMapping( AstSkyFrame *target, AstSkyFrame *result,
-* AstSystemType align_sys, AstMapping **map, int *status )
-
-* Class Membership:
-* SkyFrame member function.
-
-* Description:
-* This function takes two SkyFrames and generates a Mapping that
-* converts between them, taking account of differences in their
-* coordinate systems, equinox value, epoch, etc. (but not allowing
-* for any axis permutations).
-
-* Parameters:
-* target
-* Pointer to the first SkyFrame.
-* result
-* Pointer to the second SkyFrame.
-* align_sys
-* The system in which to align the two SkyFrames.
-* map
-* Pointer to a location which is to receive a pointer to the
-* returned Mapping. The forward transformation of this Mapping
-* will convert from "target" coordinates to "result"
-* coordinates, and the inverse transformation will convert in
-* the opposite direction (all coordinate values in radians).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the Mapping could be generated, or zero if the two
-* SkyFrames are sufficiently un-related that no meaningful Mapping
-* can be produced.
-
-* Notes:
-* A value of zero is returned if this function is invoked with the
-* global error status set or if it should fail for any reason.
-*/
-
-/* Local Constants: */
-#define MAX_ARGS 4 /* Max arguments for an SlaMap conversion */
-
-/* Local Variables: */
- AstMapping *omap; /* Mapping from coorinates to offsets */
- AstMapping *tmap2; /* Temporary Mapping */
- AstMapping *tmap; /* Temporary Mapping */
- AstSlaMap *slamap; /* Pointer to SlaMap */
- AstSystemType result_system; /* Code to identify result coordinate system */
- AstSystemType system; /* Code to identify coordinate system */
- AstSystemType target_system; /* Code to identify target coordinate system */
- double args[ MAX_ARGS ]; /* Conversion argument array */
- double epoch; /* Epoch as Modified Julian Date */
- double epoch_B; /* Besselian epoch as decimal years */
- double epoch_J; /* Julian epoch as decimal years */
- double equinox; /* Equinox as Modified Julian Date */
- double equinox_B; /* Besselian equinox as decimal years */
- double equinox_J; /* Julian equinox as decimal years */
- double diurab; /* Magnitude of diurnal aberration vector */
- double last; /* Local Apparent Sidereal Time */
- double lat; /* Observers latitude */
- double result_epoch; /* Result frame Epoch */
- double result_equinox; /* Result frame Epoch */
- double target_epoch; /* Target frame Epoch */
- double target_equinox; /* Target frame Epoch */
- int match; /* Mapping can be generated? */
- int step1; /* Convert target to FK5 J2000? */
- int step2; /* Convert FK5 J2000 to align sys? */
- int step3; /* Convert align sys to FK5 J2000? */
- int step4; /* Convert FK5 J2000 to result? */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Initialise the returned values. */
- match = 1;
- *map = NULL;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- epoch_B = 0.0;
- epoch_J = 0.0;
- equinox_B = 0.0;
- equinox_J = 0.0;
-
-/* Get the two epoch values. */
- result_epoch = astGetEpoch( result );
- target_epoch = astGetEpoch( target );
-
-/* Get the two equinox values. */
- result_equinox = astGetEquinox( result );
- target_equinox = astGetEquinox( target );
-
-/* Get the two system values. */
- result_system = astGetSystem( result );
- target_system = astGetSystem( target );
-
-/* If both systems are unknown, assume they are the same. Return a UnitMap.
- We need to do this, otherwise a simple change of Title (for instance)
- will result in a FrameSet whose current Frame has System=AST__UNKNOWN
- loosing its integrity. */
- if( target_system == AST__UNKNOWN && result_system == AST__UNKNOWN ) {
- *map = (AstMapping *) astUnitMap( 2, "", status );
- return 1;
- }
-
-/* The total Mapping is divided into two parts in series; the first part
- converts from the target SkyFrame to the alignment system, using the
- Epoch and Equinox of the target Frame, the second part converts from
- the alignment system to the result SkyFrame, using the Epoch and Equinox
- of the result Frame. Each of these parts has an arbitrary input and an
- output system, and therefore could be implemented using a collection
- of NxN conversions. To reduce the complexity, each part is implement
- by converting from the input system to FK5 J2000, and then from FK5
- J2000 to the output system. This scheme required only N conversions
- rather than NxN. Thus overall the total Mapping is made up of 4 steps
- in series. Some of these steps may be ommitted if they are effectively
- a UnitMap. Determine which steps need to be included. Assume all need
- to be done to begin with. */
- step1 = 1;
- step2 = 1;
- step3 = 1;
- step4 = 1;
-
-/* If the target system is the same as the alignment system, neither of the
- first 2 steps need be done. */
- if( target_system == align_sys ) {
- step1 = 0;
- step2 = 0;
- }
-
-/* If the result system is the same as the alignment system, neither of the
- last 2 steps need be done. */
- if( result_system == align_sys ) {
- step3 = 0;
- step4 = 0;
- }
-
-/* If the two epochs are the same, or if the alignment system is FK5 J2000,
- steps 2 and 3 are not needed. */
- if( step2 && step3 ) {
- if( align_sys == AST__FK5 || result_epoch == target_epoch ) {
- step2 = 0;
- step3 = 0;
- }
- }
-
-/* None are needed if the target and result SkyFrames have the same
- System, Epoch and Equinox. */
- if( result_system == target_system &&
- result_epoch == target_epoch &&
- result_equinox == target_equinox ) {
- step1 = 0;
- step2 = 0;
- step3 = 0;
- step4 = 0;
- }
-
-/* Create an initial (null) SlaMap. */
- slamap = astSlaMap( 0, "", status );
-
-/* Define local macros as shorthand for adding sky coordinate
- conversions to this SlaMap. Each macro simply stores details of
- the additional arguments in the "args" array and then calls
- astSlaAdd. The macros differ in the number of additional argument
- values. */
- #define TRANSFORM_0(cvt) \
- astSlaAdd( slamap, cvt, NULL );
-
- #define TRANSFORM_1(cvt,arg0) \
- args[ 0 ] = arg0; \
- astSlaAdd( slamap, cvt, args );
-
- #define TRANSFORM_2(cvt,arg0,arg1) \
- args[ 0 ] = arg0; \
- args[ 1 ] = arg1; \
- astSlaAdd( slamap, cvt, args );
-
- #define TRANSFORM_3(cvt,arg0,arg1,arg2) \
- args[ 0 ] = arg0; \
- args[ 1 ] = arg1; \
- args[ 2 ] = arg2; \
- astSlaAdd( slamap, cvt, args );
-
- #define TRANSFORM_4(cvt,arg0,arg1,arg2,arg3) \
- args[ 0 ] = arg0; \
- args[ 1 ] = arg1; \
- args[ 2 ] = arg2; \
- args[ 3 ] = arg3; \
- astSlaAdd( slamap, cvt, args );
-
-/* Convert _to_ FK5 J2000.0 coordinates. */
-/* ===================================== */
-/* The overall conversion is formulated in four phases. In this first
- phase, we convert from the target coordinate system to intermediate sky
- coordinates expressed using the FK5 system, mean equinox J2000.0. */
-
-/* Obtain the sky coordinate system, equinox, epoch, etc, of the target
- SkyFrame. */
- system = target_system;
- equinox = target_equinox;
- epoch = target_epoch;
- last = GetLAST( target, status );
- diurab = GetDiurab( target, status );
- lat = astGetObsLat( target );
- if( astOK && step1 ) {
-
-/* Convert the equinox and epoch values (stored as Modified Julian
- Dates) into the equivalent Besselian and Julian epochs (as decimal
- years). */
- equinox_B = palSlaEpb( equinox );
- equinox_J = palSlaEpj( equinox );
- epoch_B = palSlaEpb( epoch );
- epoch_J = palSlaEpj( epoch );
-
-/* Formulate the conversion... */
-
-/* From FK4. */
-/* --------- */
-/* If necessary, apply the old-style FK4 precession model to bring the
- equinox to B1950.0, with rigorous handling of the E-terms of
- aberration. Then convert directly to FK5 J2000.0 coordinates. */
- if ( system == AST__FK4 ) {
- VerifyMSMAttrs( target, result, 1, "Equinox Epoch", "astMatch", status );
- if ( equinox_B != 1950.0 ) {
- TRANSFORM_1( "SUBET", equinox_B )
- TRANSFORM_2( "PREBN", equinox_B, 1950.0 )
- TRANSFORM_1( "ADDET", 1950.0 )
- }
- TRANSFORM_1( "FK45Z", epoch_B )
-
-/* From FK4 with no E-terms. */
-/* ------------------------- */
-/* This is the same as above, except that we do not need to subtract
- the E-terms initially as they are already absent. */
- } else if ( system == AST__FK4_NO_E ) {
- VerifyMSMAttrs( target, result, 1, "Equinox Epoch", "astMatch", status );
- if ( equinox_B != 1950.0 ) {
- TRANSFORM_2( "PREBN", equinox_B, 1950.0 )
- }
- TRANSFORM_1( "ADDET", 1950.0 )
- TRANSFORM_1( "FK45Z", epoch_B )
-
-/* From FK5. */
-/* --------- */
-/* We simply need to apply a precession correction for the change of
- equinox. Omit even this if the equinox is already J2000.0. */
- } else if ( system == AST__FK5 ) {
- VerifyMSMAttrs( target, result, 1, "Equinox", "astMatch", status );
- if ( equinox_J != 2000.0 ) {
- TRANSFORM_2( "PREC", equinox_J, 2000.0 );
- }
-
-/* From J2000. */
-/* ----------- */
-/* Convert from J2000 to ICRS, then from ICRS to FK5. */
- } else if ( system == AST__J2000 ) {
- VerifyMSMAttrs( target, result, 1, "Epoch", "astMatch", status );
- TRANSFORM_0( "J2000H" )
- TRANSFORM_1( "HFK5Z", epoch_J );
-
-/* From geocentric apparent. */
-/* ------------------------- */
-/* This conversion is supported directly by SLALIB. */
- } else if ( system == AST__GAPPT ) {
- VerifyMSMAttrs( target, result, 1, "Epoch", "astMatch", status );
- TRANSFORM_2( "AMP", epoch, 2000.0 )
-
-/* From ecliptic coordinates. */
-/* -------------------------- */
-/* This conversion is supported directly by SLALIB. */
- } else if ( system == AST__ECLIPTIC ) {
- VerifyMSMAttrs( target, result, 1, "Equinox", "astMatch", status );
- TRANSFORM_1( "ECLEQ", equinox )
-
-/* From helio-ecliptic coordinates. */
-/* -------------------------------- */
- } else if ( system == AST__HELIOECLIPTIC ) {
- VerifyMSMAttrs( target, result, 1, "Epoch", "astMatch", status );
- TRANSFORM_1( "HEEQ", epoch )
-
-/* From galactic coordinates. */
-/* -------------------------- */
-/* This conversion is supported directly by SLALIB. */
- } else if ( system == AST__GALACTIC ) {
- TRANSFORM_0( "GALEQ" )
-
-/* From ICRS. */
-/* ---------- */
-/* This conversion is supported directly by SLALIB. */
- } else if ( system == AST__ICRS ) {
- VerifyMSMAttrs( target, result, 1, "Epoch", "astMatch", status );
- TRANSFORM_1( "HFK5Z", epoch_J );
-
-/* From supergalactic coordinates. */
-/* ------------------------------- */
-/* Convert to galactic coordinates and then to FK5 J2000.0
- equatorial. */
- } else if ( system == AST__SUPERGALACTIC ) {
- TRANSFORM_0( "SUPGAL" )
- TRANSFORM_0( "GALEQ" )
-
-/* From AzEl. */
-/* ---------- */
-/* Rotate from horizon to equator (H2E), shift hour angle into RA (H2R),
- go from geocentric apparent to FK5 J2000. */
- } else if ( system == AST__AZEL ) {
- VerifyMSMAttrs( target, result, 1, "ObsLon ObsLat Epoch", "astMatch", status );
- TRANSFORM_2( "H2E", lat, diurab )
- TRANSFORM_1( "H2R", last )
- TRANSFORM_2( "AMP", epoch, 2000.0 )
-
-/* From unknown coordinates. */
-/* ------------------------- */
-/* No conversion is possible. */
- } else if ( system == AST__UNKNOWN ) {
- match = 0;
- }
- }
-
-/* Convert _from_ FK5 J2000.0 coordinates _to_ the alignment system. */
-/* ============================================================ */
-/* In this second phase, we convert to the system given by the align_sys
- argument (if required), still using the properties of the target Frame. */
- if ( astOK && match && step2 ) {
-
-/* Align in FK4. */
-/* --------------- */
-/* Convert directly from FK5 J2000.0 to FK4 B1950.0 coordinates at the
- appropriate epoch. Then, if necessary, apply the old-style FK4
- precession model to bring the equinox to that required, with
- rigorous handling of the E-terms of aberration. */
- if ( align_sys == AST__FK4 ) {
- VerifyMSMAttrs( target, result, 1, "Equinox Epoch", "astMatch", status );
- TRANSFORM_1( "FK54Z", epoch_B )
- if ( equinox_B != 1950.0 ) {
- TRANSFORM_1( "SUBET", 1950.0 )
- TRANSFORM_2( "PREBN", 1950.0, equinox_B )
- TRANSFORM_1( "ADDET", equinox_B )
- }
-
-/* Align in FK4 with no E-terms. */
-/* ------------------------------- */
-/* This is the same as above, except that we do not need to add the
- E-terms at the end. */
- } else if ( align_sys == AST__FK4_NO_E ) {
- VerifyMSMAttrs( target, result, 1, "Equinox Epoch", "astMatch", status );
- TRANSFORM_1( "FK54Z", epoch_B )
- TRANSFORM_1( "SUBET", 1950.0 )
- if ( equinox_B != 1950.0 ) {
- TRANSFORM_2( "PREBN", 1950.0, equinox_B )
- }
-
-/* Align in FK5. */
-/* ------------- */
-/* We simply need to apply a precession correction for the change of
- equinox. Omit even this if the required equinox is J2000.0. */
- } else if ( align_sys == AST__FK5 ) {
- VerifyMSMAttrs( target, result, 1, "Equinox", "astMatch", status );
- if ( equinox_J != 2000.0 ) {
- TRANSFORM_2( "PREC", 2000.0, equinox_J )
- }
-
-/* Align in J2000. */
-/* --------------- */
-/* Mov from FK5 to ICRS, and from ICRS to J2000. */
- } else if ( align_sys == AST__J2000 ) {
- VerifyMSMAttrs( target, result, 1, "Epoch", "astMatch", status );
- TRANSFORM_1( "FK5HZ", epoch_J )
- TRANSFORM_0( "HJ2000" )
-
-/* Align in geocentric apparent. */
-/* ------------------------------- */
-/* This conversion is supported directly by SLALIB. */
- } else if ( align_sys == AST__GAPPT ) {
- VerifyMSMAttrs( target, result, 1, "Epoch", "astMatch", status );
- TRANSFORM_2( "MAP", 2000.0, epoch )
-
-/* Align in ecliptic coordinates. */
-/* -------------------------------- */
-/* This conversion is supported directly by SLALIB. */
- } else if ( align_sys == AST__ECLIPTIC ) {
- VerifyMSMAttrs( target, result, 1, "Equinox", "astMatch", status );
- TRANSFORM_1( "EQECL", equinox )
-
-/* Align in helio-ecliptic coordinates. */
-/* ------------------------------------ */
- } else if ( align_sys == AST__HELIOECLIPTIC ) {
- VerifyMSMAttrs( target, result, 1, "Epoch", "astMatch", status );
- TRANSFORM_1( "EQHE", epoch )
-
-/* Align in galactic coordinates. */
-/* -------------------------------- */
-/* This conversion is supported directly by SLALIB. */
- } else if ( align_sys == AST__GALACTIC ) {
- TRANSFORM_0( "EQGAL" )
-
-/* Align in ICRS. */
-/* -------------- */
-/* This conversion is supported directly by SLALIB. */
- } else if ( align_sys == AST__ICRS ) {
- VerifyMSMAttrs( target, result, 1, "Epoch", "astMatch", status );
- TRANSFORM_1( "FK5HZ", epoch_J )
-
-/* Align in supergalactic coordinates. */
-/* ------------------------------------- */
-/* Convert to galactic coordinates and then to supergalactic. */
- } else if ( align_sys == AST__SUPERGALACTIC ) {
- TRANSFORM_0( "EQGAL" )
- TRANSFORM_0( "GALSUP" )
-
-/* Align in AzEl coordinates. */
-/* -------------------------- */
-/* Go from FK5 J2000 to geocentric apparent (MAP), shift RA into hour angle
- (R2H), rotate from equator to horizon (E2H). */
- } else if ( align_sys == AST__AZEL ) {
- VerifyMSMAttrs( target, result, 1, "ObsLon ObsLat Epoch", "astMatch", status );
- TRANSFORM_2( "MAP", 2000.0, epoch )
- TRANSFORM_1( "R2H", last )
- TRANSFORM_2( "E2H", lat, diurab )
-
-/* Align in unknown coordinates. */
-/* ------------------------------- */
-/* No conversion is possible. */
- } else if ( align_sys == AST__UNKNOWN ) {
- match = 0;
- }
- }
-
-/* Convert _from_ the alignment system _to_ FK5 J2000.0 coordinates */
-/* =========================================================== */
-/* In this third phase, we convert from the alignment system (if required)
- to the intermediate FK5 J2000 system, using the properties of the
- result SkyFrame. */
-
-/* Obtain the sky coordinate system, equinox, epoch, etc, of the result
- SkyFrame. */
- system = result_system;
- equinox = result_equinox;
- epoch = result_epoch;
- diurab = GetDiurab( result, status );
- last = GetLAST( result, status );
- lat = astGetObsLat( result );
-
-/* Convert the equinox and epoch values (stored as Modified Julian
- Dates) into the equivalent Besselian and Julian epochs (as decimal
- years). */
- if( astOK ) {
- equinox_B = palSlaEpb( equinox );
- equinox_J = palSlaEpj( equinox );
- epoch_B = palSlaEpb( epoch );
- epoch_J = palSlaEpj( epoch );
- }
-
-/* Check we need to do the conversion. */
- if ( astOK && match && step3 ) {
-
-/* Formulate the conversion... */
-
-/* From FK4. */
-/* --------- */
-/* If necessary, apply the old-style FK4 precession model to bring the
- equinox to B1950.0, with rigorous handling of the E-terms of
- aberration. Then convert directly to FK5 J2000.0 coordinates. */
- if ( align_sys == AST__FK4 ) {
- VerifyMSMAttrs( target, result, 3, "Equinox Epoch", "astMatch", status );
- if ( equinox_B != 1950.0 ) {
- TRANSFORM_1( "SUBET", equinox_B )
- TRANSFORM_2( "PREBN", equinox_B, 1950.0 )
- TRANSFORM_1( "ADDET", 1950.0 )
- }
- TRANSFORM_1( "FK45Z", epoch_B )
-
-/* From FK4 with no E-terms. */
-/* ------------------------- */
-/* This is the same as above, except that we do not need to subtract
- the E-terms initially as they are already absent. */
- } else if ( align_sys == AST__FK4_NO_E ) {
- VerifyMSMAttrs( target, result, 3, "Equinox Epoch", "astMatch", status );
- if ( equinox_B != 1950.0 ) {
- TRANSFORM_2( "PREBN", equinox_B, 1950.0 )
- }
- TRANSFORM_1( "ADDET", 1950.0 )
- TRANSFORM_1( "FK45Z", epoch_B )
-
-/* From FK5. */
-/* --------- */
-/* We simply need to apply a precession correction for the change of
- equinox. Omit even this if the equinox is already J2000.0. */
- } else if ( align_sys == AST__FK5 ) {
- VerifyMSMAttrs( target, result, 3, "Equinox", "astMatch", status );
- if ( equinox_J != 2000.0 ) {
- TRANSFORM_2( "PREC", equinox_J, 2000.0 );
- }
-
-/* From geocentric apparent. */
-/* ------------------------- */
-/* This conversion is supported directly by SLALIB. */
- } else if ( align_sys == AST__GAPPT ) {
- VerifyMSMAttrs( target, result, 3, "Epoch", "astMatch", status );
- TRANSFORM_2( "AMP", epoch, 2000.0 )
-
-/* From ecliptic coordinates. */
-/* -------------------------- */
-/* This conversion is supported directly by SLALIB. */
- } else if ( align_sys == AST__ECLIPTIC ) {
- VerifyMSMAttrs( target, result, 3, "Equinox", "astMatch", status );
- TRANSFORM_1( "ECLEQ", equinox )
-
-/* From helio-ecliptic coordinates. */
-/* -------------------------------- */
- } else if ( align_sys == AST__HELIOECLIPTIC ) {
- VerifyMSMAttrs( target, result, 3, "Epoch", "astMatch", status );
- TRANSFORM_1( "HEEQ", epoch )
-
-/* From galactic coordinates. */
-/* -------------------------- */
-/* This conversion is supported directly by SLALIB. */
- } else if ( align_sys == AST__GALACTIC ) {
- TRANSFORM_0( "GALEQ" )
-
-/* From ICRS. */
-/* ---------- */
-/* This conversion is supported directly by SLALIB. */
- } else if ( align_sys == AST__ICRS ) {
- VerifyMSMAttrs( target, result, 3, "Epoch", "astMatch", status );
- TRANSFORM_1( "HFK5Z", epoch_J )
-
-/* From J2000. */
-/* ----------- */
-/* From J2000 to ICRS, and from ICRS to FK5. */
- } else if ( align_sys == AST__J2000 ) {
- VerifyMSMAttrs( target, result, 3, "Epoch", "astMatch", status );
- TRANSFORM_0( "J2000H" )
- TRANSFORM_1( "HFK5Z", epoch_J )
-
-/* From supergalactic coordinates. */
-/* ------------------------------- */
-/* Convert to galactic coordinates and then to FK5 J2000.0
- equatorial. */
- } else if ( align_sys == AST__SUPERGALACTIC ) {
- TRANSFORM_0( "SUPGAL" )
- TRANSFORM_0( "GALEQ" )
-
-/* From AzEl. */
-/* ---------- */
-/* Rotate from horizon to equator (H2E), shift hour angle into RA (H2R),
- go from geocentric apparent to FK5 J2000. */
- } else if ( align_sys == AST__AZEL ) {
- VerifyMSMAttrs( target, result, 3, "ObsLon ObsLat Epoch", "astMatch", status );
- TRANSFORM_2( "H2E", lat, diurab )
- TRANSFORM_1( "H2R", last )
- TRANSFORM_2( "AMP", epoch, 2000.0 )
-
-/* From unknown coordinates. */
-/* ------------------------------- */
-/* No conversion is possible. */
- } else if ( align_sys == AST__UNKNOWN ) {
- match = 0;
- }
- }
-
-/* Convert _from_ FK5 J2000.0 coordinates. */
-/* ======================================= */
-/* In this fourth and final phase, we convert to the result coordinate
- system from the intermediate FK5 J2000 sky coordinates generated above. */
- if ( astOK && match && step4 ) {
-
-/* To FK4. */
-/* ------- */
-/* Convert directly from FK5 J2000.0 to FK4 B1950.0 coordinates at the
- appropriate epoch. Then, if necessary, apply the old-style FK4
- precession model to bring the equinox to that required, with
- rigorous handling of the E-terms of aberration. */
- if ( system == AST__FK4 ) {
- VerifyMSMAttrs( target, result, 3, "Equinox Epoch", "astMatch", status );
- TRANSFORM_1( "FK54Z", epoch_B )
- if ( equinox_B != 1950.0 ) {
- TRANSFORM_1( "SUBET", 1950.0 )
- TRANSFORM_2( "PREBN", 1950.0, equinox_B )
- TRANSFORM_1( "ADDET", equinox_B )
- }
-
-/* To FK4 with no E-terms. */
-/* ----------------------- */
-/* This is the same as above, except that we do not need to add the
- E-terms at the end. */
- } else if ( system == AST__FK4_NO_E ) {
- VerifyMSMAttrs( target, result, 3, "Equinox Epoch", "astMatch", status );
- TRANSFORM_1( "FK54Z", epoch_B )
- TRANSFORM_1( "SUBET", 1950.0 )
- if ( equinox_B != 1950.0 ) {
- TRANSFORM_2( "PREBN", 1950.0, equinox_B )
- }
-
-/* To FK5. */
-/* ------- */
-/* We simply need to apply a precession correction for the change of
- equinox. Omit even this if the required equinox is J2000.0. */
- } else if ( system == AST__FK5 ) {
- VerifyMSMAttrs( target, result, 3, "Equinox", "astMatch", status );
- if ( equinox_J != 2000.0 ) {
- TRANSFORM_2( "PREC", 2000.0, equinox_J )
- }
-
-/* To geocentric apparent. */
-/* ----------------------- */
-/* This conversion is supported directly by SLALIB. */
- } else if ( system == AST__GAPPT ) {
- VerifyMSMAttrs( target, result, 3, "Epoch", "astMatch", status );
- TRANSFORM_2( "MAP", 2000.0, epoch )
-
-/* To ecliptic coordinates. */
-/* ------------------------ */
-/* This conversion is supported directly by SLALIB. */
- } else if ( system == AST__ECLIPTIC ) {
- VerifyMSMAttrs( target, result, 3, "Equinox", "astMatch", status );
- TRANSFORM_1( "EQECL", equinox )
-
-/* To helio-ecliptic coordinates. */
-/* ------------------------------ */
- } else if ( system == AST__HELIOECLIPTIC ) {
- VerifyMSMAttrs( target, result, 3, "Epoch", "astMatch", status );
- TRANSFORM_1( "EQHE", epoch )
-
-/* To galactic coordinates. */
-/* ------------------------ */
-/* This conversion is supported directly by SLALIB. */
- } else if ( system == AST__GALACTIC ) {
- TRANSFORM_0( "EQGAL" )
-
-/* To ICRS. */
-/* -------- */
-/* This conversion is supported directly by SLALIB. */
- } else if ( system == AST__ICRS ) {
- VerifyMSMAttrs( target, result, 3, "Epoch", "astMatch", status );
- TRANSFORM_1( "FK5HZ", epoch_J )
-
-/* To J2000. */
-/* --------- */
-/* From FK5 to ICRS, then from ICRS to J2000. */
- } else if ( system == AST__J2000 ) {
- VerifyMSMAttrs( target, result, 3, "Epoch", "astMatch", status );
- TRANSFORM_1( "FK5HZ", epoch_J )
- TRANSFORM_0( "HJ2000" )
-
-/* To supergalactic coordinates. */
-/* ----------------------------- */
-/* Convert to galactic coordinates and then to supergalactic. */
- } else if ( system == AST__SUPERGALACTIC ) {
- TRANSFORM_0( "EQGAL" )
- TRANSFORM_0( "GALSUP" )
-
-/* To AzEl */
-/* ------- */
-/* Go from FK5 J2000 to geocentric apparent (MAP), shift RA into hour angle
- (R2H), rotate from equator to horizon (E2H). */
- } else if ( system == AST__AZEL ) {
- VerifyMSMAttrs( target, result, 3, "ObsLon ObsLat Epoch", "astMatch", status );
- TRANSFORM_2( "MAP", 2000.0, epoch )
- TRANSFORM_1( "R2H", last )
- TRANSFORM_2( "E2H", lat, diurab )
-
-/* To unknown coordinates. */
-/* ----------------------------- */
-/* No conversion is possible. */
- } else if ( system == AST__UNKNOWN ) {
- match = 0;
- }
- }
-
-/* Now need to take account of the possibility that the input or output
- SkyFrame may represent an offset system rather than a coordinate system.
- Form the Mapping from the target coordinate system to the associated
- offset system. A UnitMap is returned if the target does not use an
- offset system. */
- omap = OffsetMap( target, status );
-
-/* Invert it to get the Mapping from the actual used system (whther
- offsets or coordinates) to the coordinate system. */
- astInvert( omap );
-
-/* Combine it with the slamap created earlier, so that its coordinate
- outputs feed the inputs of the slamap. Annul redundant pointers
- afterwards. */
- tmap = (AstMapping *) astCmpMap( omap, slamap, 1, "", status );
- omap = astAnnul( omap );
- slamap =astAnnul( slamap );
-
-/* Now form the Mapping from the result coordinate system to the associated
- offset system. A UnitMap is returned if the result does not use an
- offset system. */
- omap = OffsetMap( result, status );
-
-/* Combine it with the above CmpMap, so that the CmpMap outputs feed the
- new Mapping inputs. Annul redundant pointers afterwards. */
- tmap2 = (AstMapping *) astCmpMap( tmap, omap, 1, "", status );
- omap =astAnnul( omap );
- tmap =astAnnul( tmap );
-
-/* Simplify the Mapping produced above (this eliminates any redundant
- conversions) and annul the original pointer. */
- *map = astSimplify( tmap2 );
- tmap2 = astAnnul( tmap2 );
-
-/* If an error occurred, annul the returned Mapping and clear the
- returned values. */
- if ( !astOK ) {
- *map = astAnnul( *map );
- match = -1;
- }
-
-/* Return the result. */
- return match;
-
-/* Undefine macros local to this function. */
-#undef MAX_ARGS
-#undef TRANSFORM_0
-#undef TRANSFORM_1
-#undef TRANSFORM_2
-#undef TRANSFORM_3
-}
-
-static int Match( AstFrame *template_frame, AstFrame *target,
- int **template_axes, int **target_axes, AstMapping **map,
- AstFrame **result, int *status ) {
-/*
-* Name:
-* Match
-
-* Purpose:
-* Determine if conversion is possible between two coordinate systems.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* int Match( AstFrame *template, AstFrame *target,
-* int **template_axes, int **target_axes,
-* AstMapping **map, AstFrame **result, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the protected astMatch method
-* inherited from the Frame class).
-
-* Description:
-* This function matches a "template" SkyFrame to a "target" Frame and
-* determines whether it is possible to convert coordinates between them.
-* If it is, a mapping that performs the transformation is returned along
-* with a new Frame that describes the coordinate system that results when
-* this mapping is applied to the "target" coordinate system. In addition,
-* information is returned to allow the axes in this "result" Frame to be
-* associated with the corresponding axes in the "target" and "template"
-* Frames from which they are derived.
-
-* Parameters:
-* template
-* Pointer to the template SkyFrame. This describes the coordinate system
-* (or set of possible coordinate systems) into which we wish to convert
-* our coordinates.
-* target
-* Pointer to the target Frame. This describes the coordinate system in
-* which we already have coordinates.
-* template_axes
-* Address of a location where a pointer to int will be returned if the
-* requested coordinate conversion is possible. This pointer will point
-* at a dynamically allocated array of integers with one element for each
-* axis of the "result" Frame (see below). It must be freed by the caller
-* (using astFree) when no longer required.
-*
-* For each axis in the result Frame, the corresponding element of this
-* array will return the index of the template SkyFrame axis from which
-* it is derived. If it is not derived from any template SkyFrame axis,
-* a value of -1 will be returned instead.
-* target_axes
-* Address of a location where a pointer to int will be returned if the
-* requested coordinate conversion is possible. This pointer will point
-* at a dynamically allocated array of integers with one element for each
-* axis of the "result" Frame (see below). It must be freed by the caller
-* (using astFree) when no longer required.
-*
-* For each axis in the result Frame, the corresponding element of this
-* array will return the index of the target Frame axis from which it
-* is derived. If it is not derived from any target Frame axis, a value
-* of -1 will be returned instead.
-* map
-* Address of a location where a pointer to a new Mapping will be
-* returned if the requested coordinate conversion is possible. If
-* returned, the forward transformation of this Mapping may be used to
-* convert coordinates between the "target" Frame and the "result"
-* Frame (see below) and the inverse transformation will convert in the
-* opposite direction.
-* result
-* Address of a location where a pointer to a new Frame will be returned
-* if the requested coordinate conversion is possible. If returned, this
-* Frame describes the coordinate system that results from applying the
-* returned Mapping (above) to the "target" coordinate system. In
-* general, this Frame will combine attributes from (and will therefore
-* be more specific than) both the target and the template Frames. In
-* particular, when the template allows the possibility of transformaing
-* to any one of a set of alternative coordinate systems, the "result"
-* Frame will indicate which of the alternatives was used.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if the requested coordinate conversion is
-* possible. Otherwise zero is returned (this will not in itself result in
-* an error condition).
-
-* Notes:
-* - A value of zero will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-
-* Implementation Notes:
-* This implementation addresses the matching of a SkyFrame class object to
-* any other class of Frame. A SkyFrame will match any class of SkyFrame
-* (i.e. possibly from a derived class) but will not match a less
-* specialised class of Frame.
-*/
-
-/* Local Variables: */
- AstFrame *frame0; /* Pointer to Frame underlying axis 0 */
- AstFrame *frame1; /* Pointer to Frame underlying axis 1 */
- AstSkyFrame *template; /* Pointer to template SkyFrame structure */
- int iaxis; /* Axis index */
- int iaxis0; /* Axis index underlying axis 0 */
- int iaxis1; /* Axis index underlying axis 1 */
- int match; /* Coordinate conversion possible? */
- int swap1; /* Template axes swapped? */
- int swap2; /* Target axes swapped? */
- int swap; /* Additional axis swap needed? */
- int target_axis0; /* Index of 1st SkyFrame axis in the target */
- int target_axis1; /* Index of 2nd SkyFrame axis in the target */
- int target_naxes; /* Number of target axes */
-
-/* Initialise the returned values. */
- *template_axes = NULL;
- *target_axes = NULL;
- *map = NULL;
- *result = NULL;
- match = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return match;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- swap = 0;
- target_axis0 = -1;
- target_axis1 = -1;
-
-/* Obtain a pointer to the template SkyFrame structure. */
- template = (AstSkyFrame *) template_frame;
-
-/* Obtain the number of axes in the target Frame. */
- target_naxes = astGetNaxes( target );
-
-/* The first criterion for a match is that the template matches as a
- Frame class object. This ensures that the number of axes (2) and
- domain, etc. of the target Frame are suitable. Invoke the parent
- "astMatch" method to verify this. */
- match = (*parent_match)( template_frame, target,
- template_axes, target_axes, map, result, status );
-
-/* If a match was found, annul the returned objects, which are not
- needed, but keep the memory allocated for the axis association
- arrays, which we will re-use. */
- if ( astOK && match ) {
- *map = astAnnul( *map );
- *result = astAnnul( *result );
- }
-
-/* If OK so far, obtain pointers to the primary Frames which underlie
- all target axes. Stop when a SkyFrame axis is found. */
- if ( match && astOK ) {
-
- match = 0;
- for( iaxis = 0; iaxis < target_naxes; iaxis++ ) {
- astPrimaryFrame( target, iaxis, &frame0, &iaxis0 );
- if( astIsASkyFrame( frame0 ) ) {
- target_axis0 = iaxis;
- match = 1;
- break;
- } else {
- frame0 = astAnnul( frame0 );
- }
- }
-
-/* Check at least one SkyFrame axis was found it the target. */
- if( match ) {
-
-/* If so, search the remaining target axes for another axis that is
- derived from the same SkyFrame. */
- match = 0;
- for( iaxis++ ; iaxis < target_naxes; iaxis++ ) {
- astPrimaryFrame( target, iaxis, &frame1, &iaxis1 );
- if( frame1 == frame0 ) {
- target_axis1 = iaxis;
- frame1 = astAnnul( frame1 );
- match = 1;
- break;
- } else {
- frame1 = astAnnul( frame1 );
- }
- }
-
-/* Annul the remaining Frame pointer used in the above tests. */
- frame0 = astAnnul( frame0 );
- }
-
-/* If this test is passed, we can now test that the underlying axis indices
- are 0 and 1, in either order. This then ensures that we have a
- single SkyFrame (not a compound Frame) with both axes present. */
- if ( match && astOK ) {
- match = ( ( ( iaxis0 == 0 ) && ( iaxis1 == 1 ) ) ||
- ( ( iaxis1 == 0 ) && ( iaxis0 == 1 ) ) );
- }
-
- }
-
-/* If a possible match has been detected, we must now decide how the
- order of the axes in the result Frame relates to the order of axes
- in the target Frame. There are two factors involved. The first
- depends on whether the axis permutation array for the template
- SkyFrame (whose method we are executing) causes an axis
- reversal. Determine this by permuting axis index zero. */
- if ( astOK && match ) {
- swap1 = ( astValidateAxis( template, 0, "astMatch" ) != 0 );
-
-/* The second factor depends on whether the axes of the underlying
- primary SkyFrame are reversed when seen in the target Frame. */
- swap2 = ( iaxis0 != 0 );
-
-/* Combine these to determine if an additional axis swap will be
- needed. */
- swap = ( swap1 != swap2 );
-
-/* Now check to see if this additional swap is permitted by the
- template's Permute attribute. */
- match = ( !swap || astGetPermute( template ) );
- }
-
-/* If the Frames still match, we next set up the axis association
- arrays. */
- if ( astOK && match ) {
-
-/* If the target axis order is to be preserved, then the target axis
- association involves no permutation but the template axis
- association may involve an axis swap. */
- if ( astGetPreserveAxes( template ) ) {
- (*template_axes)[ 0 ] = swap;
- (*template_axes)[ 1 ] = !swap;
- (*target_axes)[ 0 ] = target_axis0;
- (*target_axes)[ 1 ] = target_axis1;
-
-/* Otherwise, any swap applies to the target axis association
- instead. */
- } else {
- (*template_axes)[ 0 ] = 0;
- (*template_axes)[ 1 ] = 1;
- (*target_axes)[ 0 ] = swap ? target_axis1 : target_axis0;
- (*target_axes)[ 1 ] = swap ? target_axis0 : target_axis1;
- }
-
-/* Use the target's "astSubFrame" method to create a new Frame (the
- result Frame) with copies of the target axes in the required
- order. This process also overlays the template attributes on to the
- target Frame and returns a Mapping between the target and result
- Frames which effects the required coordinate conversion. */
- match = astSubFrame( target, template, 2, *target_axes, *template_axes,
- map, result );
- }
-
-/* If an error occurred, or conversion to the result Frame's
- coordinate system was not possible, then free all memory, annul the
- returned objects, and reset the returned value. */
- if ( !astOK || !match ) {
- *template_axes = astFree( *template_axes );
- *target_axes = astFree( *target_axes );
- if( *map ) *map = astAnnul( *map );
- if( *result ) *result = astAnnul( *result );
- match = 0;
- }
-
-/* Return the result. */
- return match;
-}
-
-static void MatchAxesX( AstFrame *frm2_frame, AstFrame *frm1, int *axes,
- int *status ) {
-/*
-* Name:
-* MatchAxesX
-
-* Purpose:
-* Find any corresponding axes in two Frames.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void MatchAxesX( AstFrame *frm2, AstFrame *frm1, int *axes )
-* int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the protected astMatchAxesX
-* method inherited from the Frame class).
-
-* This function looks for corresponding axes within two supplied
-* Frames. An array of integers is returned that contains an element
-* for each axis in the second supplied Frame. An element in this array
-* will be set to zero if the associated axis within the second Frame
-* has no corresponding axis within the first Frame. Otherwise, it
-* will be set to the index (a non-zero positive integer) of the
-* corresponding axis within the first supplied Frame.
-
-* Parameters:
-* frm2
-* Pointer to the second Frame.
-* frm1
-* Pointer to the first Frame.
-* axes
-* Pointer to an integer array in which to return the indices of
-* the axes (within the first Frame) that correspond to each axis
-* within the second Frame. Axis indices start at 1. A value of zero
-* will be stored in the returned array for each axis in the second
-* Frame that has no corresponding axis in the first Frame.
-*
-* The number of elements in this array must be greater than or
-* equal to the number of axes in the second Frame.
-* status
-* Pointer to inherited status value.
-
-* Notes:
-* - Corresponding axes are identified by the fact that a Mapping
-* can be found between them using astFindFrame or astConvert. Thus,
-* "corresponding axes" are not necessarily identical. For instance,
-* SkyFrame axes in two Frames will match even if they describe
-* different celestial coordinate systems
-*/
-
-/* Local Variables: */
- AstFrame *resfrm;
- AstMapping *resmap;
- AstSkyFrame *frm2;
- int *frm2_axes;
- int *frm1_axes;
- int max_axes;
- int min_axes;
- int preserve_axes;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the SkyFrame. */
- frm2 = (AstSkyFrame *) frm2_frame;
-
-/* Temporarily ensure that the PreserveAxes attribute is non-zero in
- the first supplied Frame. This means thte result Frame returned by
- astMatch below will have the axis count and order of the target Frame
- (i.e. "pfrm"). */
- if( astTestPreserveAxes( frm1 ) ) {
- preserve_axes = astGetPreserveAxes( frm1 ) ? 1 : 0;
- } else {
- preserve_axes = -1;
- }
- astSetPreserveAxes( frm1, 1 );
-
-/* Temporarily ensure that the MaxAxes and MinAxes attributes in the
- first supplied Frame are set so the Frame can be used as a template
- in astMatch for matching any number of axes. */
- if( astTestMaxAxes( frm1 ) ) {
- max_axes = astGetMaxAxes( frm1 );
- } else {
- max_axes = -1;
- }
- astSetMaxAxes( frm1, 10000 );
-
- if( astTestMinAxes( frm1 ) ) {
- min_axes = astGetMinAxes( frm1 );
- } else {
- min_axes = -1;
- }
- astSetMinAxes( frm1, 1 );
-
-/* Attempt to find a sub-frame within the first supplied Frame that
- corresponds to the supplied SkyFrame. */
- if( astMatch( frm1, frm2, &frm1_axes, &frm2_axes, &resmap, &resfrm ) ) {
-
-/* If successfull, Store the one-based index within "frm1" of the
- corresponding axes. */
- axes[ 0 ] = frm1_axes[ 0 ] + 1;
- axes[ 1 ] = frm1_axes[ 1 ] + 1;
-
-/* Free resources */
- frm1_axes = astFree( frm1_axes );
- frm2_axes = astFree( frm2_axes );
- resmap = astAnnul( resmap );
- resfrm = astAnnul( resfrm );
-
-/* If no corresponding SkyFrame was found store zeros in the returned array. */
- } else {
- axes[ 0 ] = 0;
- axes[ 1 ] = 0;
- }
-
-/* Re-instate the original attribute values in the first supplied Frame. */
- if( preserve_axes == -1 ) {
- astClearPreserveAxes( frm1 );
- } else {
- astSetPreserveAxes( frm1, preserve_axes );
- }
-
- if( max_axes == -1 ) {
- astClearMaxAxes( frm1 );
- } else {
- astSetMaxAxes( frm1, max_axes );
- }
-
- if( min_axes == -1 ) {
- astClearMinAxes( frm1 );
- } else {
- astSetMinAxes( frm1, min_axes );
- }
-}
-
-static void Norm( AstFrame *this_frame, double value[], int *status ) {
-/*
-* Name:
-* Norm
-
-* Purpose:
-* Normalise a set of SkyFrame coordinates.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void Norm( AstAxis *this, double value[], int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astNorm method inherited
-* from the Frame class).
-
-* Description:
-* This function converts a set of SkyFrame coordinate values,
-* which might potentially be unsuitable for display to a user (for
-* instance, may lie outside the expected range of values) into a
-* set of acceptable alternative values suitable for display.
-*
-* This is done by wrapping coordinates so that the latitude lies
-* in the range (-pi/2.0) <= latitude <= (pi/2.0). If the NegLon
-* attribute is zero (the default), then the wrapped longitude value
-* lies in the range 0.0 <= longitude < (2.0*pi). Otherwise, it lies
-* in the range -pi <= longitude < pi.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* value
-* An array of double, with one element for each SkyFrame axis.
-* This should contain the initial set of coordinate values,
-* which will be modified in place.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstSkyFrame *this; /* Pointer to the SkyFrame structure */
- const int *perm; /* Axis permutation array */
- double sky_lat; /* Sky latitude value */
- double sky_long; /* Sky longitude value */
- double v[ 2 ]; /* Permuted value coordinates */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* Obtain a pointer to the SkyFrame's axis permutation array. */
- perm = astGetPerm( this );
- if ( astOK ) {
-
-/* Obtain the sky longitude and latitude values, allowing for any axis
- permutation. */
- v[ perm[ 0 ] ] = value[ 0 ];
- v[ perm[ 1 ] ] = value[ 1 ];
- sky_long = v[ 0 ];
- sky_lat = v[ 1 ];
-
-/* Test if both values are OK (i.e. not "bad"). */
- if ( ( sky_long != AST__BAD ) && ( sky_lat != AST__BAD ) ) {
-
-/* Fold the longitude value into the range 0 to 2*pi and the latitude into
- the range -pi to +pi. */
- sky_long = palSlaDranrm( sky_long );
- sky_lat = palSlaDrange( sky_lat );
-
-/* If the latitude now exceeds pi/2, shift the longitude by pi in whichever
- direction will keep it in the range 0 to 2*pi. */
- if ( sky_lat > ( pi / 2.0 ) ) {
- sky_long += ( sky_long < pi ) ? pi : -pi;
-
-/* Reflect the latitude value through the pole, so it lies in the range 0 to
- pi/2. */
- sky_lat = pi - sky_lat;
-
-/* If the latitude is less than -pi/2, shift the longitude in the same way
- as above. */
- } else if ( sky_lat < -( pi / 2.0 ) ) {
- sky_long += ( sky_long < pi ) ? pi : -pi;
-
-/* But reflect the latitude through the other pole, so it lies in the range
- -pi/2 to 0. */
- sky_lat = -pi - sky_lat;
- }
-
-/* If only the longitude value is valid, wrap it into the range 0 to 2*pi. */
- } else if ( sky_long != AST__BAD ) {
- sky_long = palSlaDranrm( sky_long );
-
-/* If only the latitude value is valid, wrap it into the range -pi to +pi. */
- } else if ( sky_lat != AST__BAD ) {
- sky_lat = palSlaDrange( sky_lat );
-
-/* Then refect through one of the poles (as above), if necessary, to move it
- into the range -pi/2 to +pi/2. */
- if ( sky_lat > ( pi / 2.0 ) ) {
- sky_lat = pi - sky_lat;
- } else if ( sky_lat < -( pi / 2.0 ) ) {
- sky_lat = -pi - sky_lat;
- }
- }
-
-/* Convert 2*pi longitude into zero. Allow for a small error. */
- if ( fabs( sky_long - ( 2.0 * pi ) ) <=
- ( 2.0 * pi ) * ( DBL_EPSILON * (double) FLT_RADIX ) ) sky_long = 0.0;
-
-/* If the NegLon attribute is set, and the longitude value is good,
- convert it into the range -pi to +pi. */
- if( sky_long != AST__BAD && astGetNegLon( this ) ) {
- sky_long = palSlaDrange( sky_long );
- }
-
-/* Return the new values, allowing for any axis permutation. */
- v[ 0 ] = sky_long;
- v[ 1 ] = sky_lat;
- value[ 0 ] = v[ perm[ 0 ] ];
- value[ 1 ] = v[ perm[ 1 ] ];
- }
-}
-
-static void NormBox( AstFrame *this_frame, double lbnd[], double ubnd[],
- AstMapping *reg, int *status ) {
-/*
-* Name:
-* NormBox
-
-* Purpose:
-* Extend a box to include effect of any singularities in the Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void astNormBox( AstFrame *this, double lbnd[], double ubnd[],
-* AstMapping *reg, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astNormBox method inherited
-* from the Frame class).
-
-* Description:
-* This function modifies a supplied box to include the effect of any
-* singularities in the co-ordinate system represented by the Frame.
-* For a normal Cartesian coordinate system, the box will be returned
-* unchanged. Other classes of Frame may do other things. For instance,
-* a SkyFrame will check to see if the box contains either the north
-* or south pole and extend the box appropriately.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* lbnd
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). Initially, this should contain a set of
-* lower axis bounds for the box. They will be modified on exit
-* to include the effect of any singularities within the box.
-* ubnd
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). Initially, this should contain a set of
-* upper axis bounds for the box. They will be modified on exit
-* to include the effect of any singularities within the box.
-* reg
-* A Mapping which should be used to test if any singular points are
-* inside or outside the box. The Mapping should leave an input
-* position unchanged if the point is inside the box, and should
-* set all bad if the point is outside the box.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstSkyFrame *this; /* Pointer to the SkyFrame structure */
- const int *perm; /* Axis permutation array */
- double lb[ 2 ]; /* Permuted lower bounds */
- double t; /* Temporary storage */
- double t2; /* Temporary storage */
- double ub[ 2 ]; /* Permuted upper bounds */
- double x[2]; /* 1st axis values at poles */
- double xo[2]; /* Tested 1st axis values at poles */
- double y[2]; /* 2nd axis values at poles */
- double yo[2]; /* Tested 2nd axis values at poles */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* Obtain a pointer to the SkyFrame's axis permutation array. */
- perm = astGetPerm( this );
- if( perm ) {
-
-/* Obtain the sky longitude and latitude limits, allowing for any axis
- permutation. */
- lb[ perm[ 0 ] ] = lbnd[ 0 ];
- lb[ perm[ 1 ] ] = lbnd[ 1 ];
- ub[ perm[ 0 ] ] = ubnd[ 0 ];
- ub[ perm[ 1 ] ] = ubnd[ 1 ];
-
-/* Use the supplied Mapping to test if box includes either pole. */
- if( perm[ 0 ] == 0 ) {
- x[ 0 ] = 0.0;
- y[ 0 ] = AST__DPIBY2;
- x[ 1 ] = 0.0;
- y[ 1 ] = -AST__DPIBY2;
- } else {
- x[ 0 ] = AST__DPIBY2;
- y[ 0 ] = 0.0;
- x[ 1 ] = -AST__DPIBY2;
- y[ 1 ] = 0.0;
- }
- astTran2( reg, 2, x, y, 1, xo, yo );
-
-/* If the box includes the north pole... */
- if( xo[ 0 ] != AST__BAD ) {
-
-/* Find the lowest latitude after normalisation. */
- if( ub[ 1 ] != AST__BAD && lb[ 1 ] != AST__BAD ){
- t = palSlaDrange( ub[ 1 ] );
- t2 = palSlaDrange( lb[ 1 ] );
- if( t2 < t ) t = t2;
- } else {
- t = AST__BAD;
- }
-
-/* Set the lower returned limit to this value and the upper returned limit
- to +90 degs */
- lb[ 1 ] = t;
- ub[ 1 ] = AST__DPIBY2;
-
-/* Set the longitude range to 0 to 2PI */
- lb[ 0 ] = 0;
- ub[ 0 ] = 2*AST__DPI;
-
- }
-
-/* If the box includes the south pole... */
- if( xo[ 1 ] != AST__BAD ) {
-
-/* Find the highest latitude after normalisation. */
- if( ub[ 1 ] != AST__BAD && lb[ 1 ] != AST__BAD ){
- t = palSlaDrange( ub[ 1 ] );
- t2 = palSlaDrange( lb[ 1 ] );
- if( t2 > t ) t = t2;
- } else {
- t = AST__BAD;
- }
-
-/* Set the upper returned limit to this value and the lower returned limit
- to -90 degs */
- lb[ 1 ] = -AST__DPIBY2;
- ub[ 1 ] = t;
-
-/* Set the longitude range to 0 to 2PI */
- lb[ 0 ] = 0;
- ub[ 0 ] = 2*AST__DPI;
- }
-
-/* Return the modified limits. */
- lbnd[ 0 ] = lb[ perm[ 0 ] ];
- lbnd[ 1 ] = lb[ perm[ 1 ] ];
- ubnd[ 0 ] = ub[ perm[ 0 ] ];
- ubnd[ 1 ] = ub[ perm[ 1 ] ];
- }
-}
-
-static void Offset( AstFrame *this_frame, const double point1[],
- const double point2[], double offset, double point3[], int *status ) {
-/*
-* Name:
-* Offset
-
-* Purpose:
-* Calculate an offset along a geodesic curve.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void Offset( AstFrame *this,
-* const double point1[], const double point2[],
-* double offset, double point3[], int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astOffset method
-* inherited from the Frame class).
-
-* Description:
-* This function finds the SkyFrame coordinate values of a point
-* which is offset a specified distance along the geodesic curve
-* (i.e. great circle) between two other points.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* point1
-* An array of double, with one element for each SkyFrame axis.
-* This should contain the coordinates of the point marking the
-* start of the geodesic curve.
-* point2
-* An array of double, with one element for each SkyFrame axis.
-* This should contain the coordinates of the point marking the
-* end of the geodesic curve.
-* offset
-* The required offset from the first point along the geodesic
-* curve, in radians. If this is positive, it will be towards
-* the second point. If it is negative, it will be in the
-* opposite direction. This offset need not imply a position
-* lying between the two points given, as the curve will be
-* extrapolated if necessary.
-* point3
-* An array of double, with one element for each SkyFrame axis
-* in which the coordinates of the required point will be
-* returned.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The geodesic curve used by this function is the path of
-* shortest distance between two points, as defined by the
-* astDistance function.
-* - This function will return "bad" coordinate values (AST__BAD)
-* if any of the input coordinates has this value.
-* - "Bad" coordinate values will also be returned if the two
-* points supplied are coincident (or otherwise fail to uniquely
-* specify a geodesic curve) but the requested offset is non-zero.
-*/
-
-/* Local Variables: */
- AstSkyFrame *this; /* Pointer to the SkyFrame structure */
- const int *perm; /* Pointer to axis permutation array */
- double mrot[ 3 ][ 3 ]; /* Rotation matrix */
- double p1[ 2 ]; /* Permuted coordinates for point1 */
- double p2[ 2 ]; /* Permuted coordinates for point2 */
- double p3[ 2 ]; /* Permuted coordinates for point3 */
- double scale; /* Scale factor */
- double v1[ 3 ]; /* 3-vector for p1 */
- double v2[ 3 ]; /* 3-vector for p2 */
- double v3[ 3 ]; /* 3-vector for p3 */
- double vmod; /* Modulus of vector */
- double vrot[ 3 ]; /* Vector along rotation axis */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* Obtain a pointer to the SkyFrame's axis permutation array. */
- perm = astGetPerm( this );
- if ( astOK ) {
-
-/* Check that all supplied coordinates are OK. If not, generate "bad"
- output coordinates. */
- if ( ( point1[ 0 ] == AST__BAD ) || ( point1[ 1 ] == AST__BAD ) ||
- ( point2[ 0 ] == AST__BAD ) || ( point2[ 1 ] == AST__BAD ) ) {
- point3[ 0 ] = AST__BAD;
- point3[ 1 ] = AST__BAD;
-
-/* Otherwise, apply the axis permutation array to obtain the
- coordinates of the two input points in the required
- (longitude,latitude) order. */
- } else {
- p1[ perm[ 0 ] ] = point1[ 0 ];
- p1[ perm[ 1 ] ] = point1[ 1 ];
- p2[ perm[ 0 ] ] = point2[ 0 ];
- p2[ perm[ 1 ] ] = point2[ 1 ];
-
-/* Convert each point into a 3-vector of unit length. */
- palSlaDcs2c( p1[ 0 ], p1[ 1 ], v1 );
- palSlaDcs2c( p2[ 0 ], p2[ 1 ], v2 );
-
-/* Find the cross product between these two vectors (the vector order
- is reversed here to compensate for the sense of rotation introduced
- by palSlaDav2m and palSlaDmxv below). */
- palSlaDvxv( v2, v1, v3 );
-
-/* Normalise the cross product vector, also obtaining its original
- modulus. */
- palSlaDvn( v3, vrot, &vmod );
-
-/* If the original modulus was zero, the input points are either
- coincident or diametrically opposite, so do not uniquely define a
- great circle. In either case, we can only generate output
- coordinates if the offset required is an exact multiple of pi. If
- it is, generate the 3-vector that results from rotating the first
- input point through this angle. */
- if ( vmod == 0.0 ) {
- if ( sin( offset ) == 0.0 ) {
- scale = cos( offset );
- v3[ 0 ] = v1[ 0 ] * scale;
- v3[ 1 ] = v1[ 1 ] * scale;
- v3[ 2 ] = v1[ 2 ] * scale;
-
-/* Convert the 3-vector back into spherical cooordinates and then
- constrain the longitude result to lie in the range 0 to 2*pi
- (palSlaDcc2s doesn't do this itself). */
- palSlaDcc2s( v3, &p3[ 0 ], &p3[ 1 ] );
- p3[ 0 ] = palSlaDranrm( p3[ 0 ] );
-
-/* If the offset was not a multiple of pi, generate "bad" output
- coordinates. */
- } else {
- p3[ 0 ] = AST__BAD;
- p3[ 1 ] = AST__BAD;
- }
-
-/* If the two input points define a great circle, scale the normalised
- cross product vector to make its length equal to the required
- offset (angle) between the first input point and the result. */
- } else {
- vrot[ 0 ] *= offset;
- vrot[ 1 ] *= offset;
- vrot[ 2 ] *= offset;
-
-/* Generate the rotation matrix that implements this rotation and use
- it to rotate the first input point (3-vector) to give the required
- result (3-vector). */
- palSlaDav2m( vrot, mrot );
- palSlaDmxv( mrot, v1, v3 );
-
-/* Convert the 3-vector back into spherical cooordinates and then
- constrain the longitude result to lie in the range 0 to 2*pi. */
- palSlaDcc2s( v3, &p3[ 0 ], &p3[ 1 ] );
- p3[ 0 ] = palSlaDranrm( p3[ 0 ] );
- }
-
-/* Permute the result coordinates to undo the effect of the SkyFrame
- axis permutation array. */
- point3[ 0 ] = p3[ perm[ 0 ] ];
- point3[ 1 ] = p3[ perm[ 1 ] ];
- }
- }
-}
-
-static AstMapping *OffsetMap( AstSkyFrame *this, int *status ){
-/*
-* Name:
-* OffsetMap
-
-* Purpose:
-* Returns a Mapping which goes from System coordinates to offsets.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* AstMapping *OffsetMap( AstSkyFrame *this, int *status )
-
-* Class Membership:
-* SkyFrame member function.
-
-* Description:
-* This function returns a Mapping in which the forward transformation
-* transforms a position in the coordinate system given by the System
-* attribute, into the offset coordinate system specified by the SkyRef,
-* SkyRefP and SkyRefIs attributes.
-*
-* A UnitMap is returned if the SkyFrame does not define am offset
-* coordinate system.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Mapping.
-
-* Notes:
-* - This function will return NULL if an error has already occurred,
-* or if the function fails for any reason.
-*/
-
-/* Local Variables: */
- AstCmpMap *map3; /* Partial Mapping. */
- AstMapping *result; /* The returned Mapping. */
- AstMatrixMap *map1; /* Spherical rotation in 3D cartesian space */
- AstSphMap *map2; /* 3D Cartesian to 2D spherical Mapping */
- double *vx; /* Pointer to x unit vector. */
- double *vy; /* Pointer to y unit vector. */
- double *vz; /* Pointer to z unit vector. */
- double mat[ 9 ]; /* Spherical rotation matrix */
- double vmod; /* Length of vector (+ve) */
- double vp[ 3 ]; /* Unit vector representin SkyRefP position. */
- int lataxis; /* Index of the latitude axis */
- int lonaxis; /* Index of the longitude axis */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Return a UnitMap if the offset coordinate system is not defined. */
- if( astGetSkyRefIs( this ) == IGNORED_REF ||
- ( !astTestSkyRef( this, 0 ) && !astTestSkyRef( this, 1 ) ) ) {
- result = (AstMapping *) astUnitMap( 2, "", status );
-
-/* Otherwise... */
- } else {
-
-/* Get the longitude and latitude at the reference point and at a point
- on the primary meridian. */
- lataxis = astGetLatAxis( this );
- lonaxis = 1 - lataxis;
-
-/* Initialise pointers to the rows of the 3x3 matrix. Each row will be
- used to store a unit vector. */
- vx = mat;
- vy = mat + 3;
- vz = mat + 6;
-
-/* The following trig converts between (longitude,latitude) and (x,y,z)
- on a unit sphere, in which (0,0) is at (1,0,0), (0,pi/2) is (0,0,1)
- and (pi/2,0) is at (0,1,0). */
-
-/* First deal with cases where the SkyRef attribute holds the standard
- coords at the origin of the offset coordinate system. */
- if( astGetSkyRefIs( this ) == ORIGIN_REF ) {
-
-/* Convert each point into a 3-vector of unit length. The SkyRef position
- defines the X axis in the offset coord system. */
- palSlaDcs2c( astGetSkyRef( this, lonaxis ), astGetSkyRef( this, lataxis ), vx );
- palSlaDcs2c( astGetSkyRefP( this, lonaxis ), astGetSkyRefP( this, lataxis ), vp );
-
-/* The Y axis is perpendicular to both the X axis and the skyrefp
- position. That is, it is parallel to the cross product of the 2 above
- vectors.*/
- palSlaDvxv( vp, vx, vy );
-
-/* Normalize the y vector. */
- palSlaDvn( vy, vy, &vmod );
-
-/* Report an error if the modulus of the vector is zero.*/
- if( vmod == 0.0 ) {
- astError( AST__BADOC, "astConvert(%s): The position specified by the SkyRefP "
- "attribute is either coincident, with or opposite to, the "
- "position specified by the SkyRef attribute.", status, astGetClass( this ) );
-
-/* If OK, form the Z axis as the cross product of the x and y axes. */
- } else {
- palSlaDvxv( vx, vy, vz );
-
- }
-
-/* Now deal with cases where the SkyRef attribute holds the standard
- coords at the north pole of the offset coordinate system. */
- } else {
-
-/* Convert each point into a 3-vector of unit length. The SkyRef position
- defines the Z axis in the offset coord system. */
- palSlaDcs2c( astGetSkyRef( this, lonaxis ), astGetSkyRef( this, lataxis ), vz );
- palSlaDcs2c( astGetSkyRefP( this, lonaxis ), astGetSkyRefP( this, lataxis ), vp );
-
-/* The Y axis is perpendicular to both the Z axis and the skyrefp
- position. That is, it is parallel to the cross product of the 2 above
- vectors.*/
- palSlaDvxv( vz, vp, vy );
-
-/* Normalize the y vector. */
- palSlaDvn( vy, vy, &vmod );
-
-/* Report an error if the modulus of the vector is zero.*/
- if( vmod == 0.0 ) {
- astError( AST__BADOC, "astConvert(%s): The position specified by the SkyRefP "
- "attribute is either coincident, with or opposite to, the "
- "position specified by the SkyRef attribute.", status, astGetClass( this ) );
-
-/* If OK, form the X axis as the cross product of the y and z axes. */
- } else {
- palSlaDvxv( vy, vz, vx );
- }
- }
-
-/* Create a MatrixMap which implements the above spherical rotation. Each
- row in this matrix represents one of the unit axis vectors found above. */
- map1 = astMatrixMap( 3, 3, 0, mat, "", status );
-
-/* Create a 3D cartesian to 2D spherical Mapping. */
- map2 = astSphMap( "UnitRadius=1", status );
-
-/* Form a series CmpMap which converts from 2D (long,lat) in the base
- System to 2D (long,lat) in the offset coordinate system. */
- map3 = astCmpMap( map1, map2, 1, "", status );
- astInvert( map2 );
- result = (AstMapping *) astCmpMap( map2, map3, 1, "", status );
-
-/* Free resources. */
- map1 = astAnnul( map1 );
- map2 = astAnnul( map2 );
- map3 = astAnnul( map3 );
- }
-
-/* Annul the returned Mapping if anything has gone wrong. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-
-}
-
-static double Offset2( AstFrame *this_frame, const double point1[2],
- double angle, double offset, double point2[2], int *status ) {
-/*
-* Name:
-* Offset2
-
-* Purpose:
-* Calculate an offset along a geodesic curve at a given bearing.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* double Offset2( AstFrame *this_frame, const double point1[2],
-* double angle, double offset, double point2[2], int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astOffset2 method
-* inherited from the Frame class).
-
-* Description:
-* This function finds the SkyFrame coordinate values of a point
-* which is offset a specified distance along the geodesic curve
-* (i.e. great circle) at a given angle from a given starting point.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* point1
-* An array of double, with one element for each SkyFrame axis.
-* This should contain the coordinates of the point marking the
-* start of the geodesic curve.
-* angle
-* The angle (in radians) from the positive direction of the second
-* axis, to the direction of the required position, as seen from
-* the starting position. Positive rotation is in the sense of
-* rotation from the positive direction of axis 2 to the positive
-* direction of axis 1.
-* offset
-* The required offset from the first point along the geodesic
-* curve, in radians. If this is positive, it will be towards
-* the given angle. If it is negative, it will be in the
-* opposite direction.
-* point2
-* An array of double, with one element for each SkyFrame axis
-* in which the coordinates of the required point will be
-* returned.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The direction of the geodesic curve at the end point. That is, the
-* angle (in radians) between the positive direction of the second
-* axis and the continuation of the geodesic curve at the requested
-* end point. Positive rotation is in the sense of rotation from
-* the positive direction of axis 2 to the positive direction of axis
-* 1.
-
-* Notes:
-* - The geodesic curve used by this function is the path of
-* shortest distance between two points, as defined by the
-* astDistance function.
-* - This function will return "bad" coordinate values (AST__BAD)
-* if any of the input coordinates has this value.
-*/
-
-/* Local Variables: */
- AstSkyFrame *this; /* Pointer to the SkyFrame structure */
- const int *perm; /* Pointer to axis permutation array */
- double p1[ 2 ]; /* Permuted coordinates for point1 */
- double p2[ 2 ]; /* Permuted coordinates for point2 */
- double result; /* The returned answer */
- double cosoff; /* Cosine of offset */
- double cosa1; /* Cosine of longitude at start */
- double cosb1; /* Cosine of latitude at start */
- double pa; /* A position angle measured from north */
- double q1[ 3 ]; /* Vector PI/2 away from R4 in meridian of R4 */
- double q2[ 3 ]; /* Vector PI/2 away from R4 on equator */
- double q3[ 3 ]; /* Vector PI/2 away from R4 on great circle */
- double r0[ 3 ]; /* Reference position vector */
- double r3[ 3 ]; /* Vector PI/2 away from R0 on great circle */
- double sinoff; /* Sine of offset */
- double sina1; /* Sine of longitude at start */
- double sinb1; /* Sine of latitude at start */
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* Obtain a pointer to the SkyFrame's axis permutation array. */
- perm = astGetPerm( this );
- if ( astOK ) {
-
-/* Check that all supplied values are OK. If not, generate "bad"
- output coordinates. */
- if ( ( point1[ 0 ] == AST__BAD ) || ( point1[ 1 ] == AST__BAD ) ||
- ( angle == AST__BAD ) || ( offset == AST__BAD ) ) {
- point2[ 0 ] = AST__BAD;
- point2[ 1 ] = AST__BAD;
-
-/* Otherwise, apply the axis permutation array to obtain the
- coordinates of the starting point in the required (longitude,latitude)
- order. */
- } else {
- p1[ perm[ 0 ] ] = point1[ 0 ];
- p1[ perm[ 1 ] ] = point1[ 1 ];
-
-/* If the axes are permuted, convert the supplied angle into a position
- angle. */
- pa = ( perm[ 0 ] == 0 )? angle: piby2 - angle;
-
-/* Use Shcal to calculate the required vectors R0 (representing
- the reference point) and R3 (representing the point which is 90
- degrees away from the reference point, along the required great
- circle). The XY plane defines zero latitude, Z is in the direction
- of increasing latitude, X is towards zero longitude, and Y is
- towards longitude 90 degrees. */
- Shcal( p1[ 0 ], p1[ 1 ], pa, r0, r3, status );
-
-/* Use Shapp to use R0 and R3 to calculate the new position. */
- Shapp( offset, r0, r3, p1[ 0 ], p2, status );
-
-/* Normalize the result. */
- astNorm( this, p2 );
-
-/* Create the vector Q1 representing the point in the meridian of the
- required point which has latitude 90 degrees greater than the
- required point. */
- sina1 = sin( p2[ 0 ] );
- cosa1 = cos( p2[ 0 ] );
- sinb1 = sin( p2[ 1 ] );
- cosb1 = cos( p2[ 1 ] );
-
- q1[ 0 ] = -sinb1*cosa1;
- q1[ 1 ] = -sinb1*sina1;
- q1[ 2 ] = cosb1;
-
-/* Create the vector Q2 representing the point on the equator (i.e. a
- latitude of zero), which has a longitude 90 degrees to the west of
- the required point. */
- q2[ 0 ] = -sina1;
- q2[ 1 ] = cosa1;
- q2[ 2 ] = 0.0;
-
-/* Create the vector Q3 representing the point which is 90 degrees away
- from the required point, along the required great circle. */
- cosoff = cos( offset );
- sinoff = sin( offset );
-
- q3[ 0 ] = -sinoff*r0[ 0 ] + cosoff*r3[ 0 ];
- q3[ 1 ] = -sinoff*r0[ 1 ] + cosoff*r3[ 1 ];
- q3[ 2 ] = -sinoff*r0[ 2 ] + cosoff*r3[ 2 ];
-
-/* Calculate the position angle of the great circle at the required
- point. */
- pa = atan2( palSlaDvdv( q3, q2 ), palSlaDvdv( q3, q1 ) );
-
-/* Convert this from a pa into the required angle. */
- result = ( perm[ 0 ] == 0 )? pa: piby2 - pa;
-
-/* Ensure that the end angle is in the range 0 to 2*pi. */
- result = palSlaDranrm( result );
-
-/* Permute the result coordinates to undo the effect of the SkyFrame
- axis permutation array. */
- point2[ 0 ] = p2[ perm[ 0 ] ];
- point2[ 1 ] = p2[ perm[ 1 ] ];
- }
- }
-
-/* Return the result. */
- return result;
-
-}
-
-static void Overlay( AstFrame *template, const int *template_axes,
- AstFrame *result, int *status ) {
-/*
-* Name:
-* Overlay
-
-* Purpose:
-* Overlay the attributes of a template SkyFrame on to another Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void Overlay( AstFrame *template, const int *template_axes,
-* AstFrame *result, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the protected astOverlay method
-* inherited from the Frame class).
-
-* Description:
-* This function overlays attributes of a SkyFrame (the "template") on to
-* another Frame, so as to over-ride selected attributes of that second
-* Frame. Normally only those attributes which have been specifically set
-* in the template will be transferred. This implements a form of
-* defaulting, in which a Frame acquires attributes from the template, but
-* retains its original attributes (as the default) if new values have not
-* previously been explicitly set in the template.
-*
-* Note that if the result Frame is a SkyFrame and a change of sky
-* coordinate system occurs as a result of overlaying its System
-* attribute, then some of its original attribute values may no
-* longer be appropriate (e.g. the Title, or attributes describing
-* its axes). In this case, these will be cleared before overlaying
-* any new values.
-
-* Parameters:
-* template
-* Pointer to the template SkyFrame, for which values should have been
-* explicitly set for any attribute which is to be transferred.
-* template_axes
-* Pointer to an array of int, with one element for each axis of the
-* "result" Frame (see below). For each axis in the result frame, the
-* corresponding element of this array should contain the (zero-based)
-* index of the template axis to which it corresponds. This array is used
-* to establish from which template axis any axis-dependent attributes
-* should be obtained.
-*
-* If any axis in the result Frame is not associated with a template
-* axis, the corresponding element of this array should be set to -1.
-*
-* If a NULL pointer is supplied, the template and result axis
-* indicies are assumed to be identical.
-* result
-* Pointer to the Frame which is to receive the new attribute values.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - In general, if the result Frame is not from the same class as the
-* template SkyFrame, or from a class derived from it, then attributes may
-* exist in the template SkyFrame which do not exist in the result Frame. In
-* this case, these attributes will not be transferred.
-*/
-
-
-/* Local Variables: */
- AstSystemType new_alignsystem;/* Code identifying new alignment coords */
- AstSystemType new_system; /* Code identifying new sky cordinates */
- AstSystemType old_system; /* Code identifying old sky coordinates */
- int axis; /* Loop counter for result SkyFrame axes */
- int skyref_changed; /* Has the SkyRef attribute changed? */
- int reset_system; /* Was the template System value cleared? */
- int skyframe; /* Result Frame is a SkyFrame? */
- int tax0; /* Template axis for result axis 0 */
- int tax1; /* Template axis for result axis 1 */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Indicate that we do not need to reset the System attribute of the
- template. */
- reset_system = 0;
- new_system = AST__UNKNOWN;
-
-/* If the result Frame is a SkyFrame, we must test to see if overlaying its
- System attribute will change the type of sky coordinate system it
- describes. Determine the value of this attribute for the result and template
- SkyFrames. We also need to do this if either SkyRef attribute would
- change. */
- skyframe = astIsASkyFrame( result );
- if ( skyframe ) {
- old_system = astGetSystem( result );
- new_system = astGetSystem( template );
- skyref_changed = ( astGetSkyRef( result, 0 ) !=
- astGetSkyRef( template, 0 ) ) ||
- ( astGetSkyRef( result, 1 ) !=
- astGetSkyRef( template, 1 ) );
-
-/* If the coordinate system will change, any value already set for the result
- SkyFrame's Title will no longer be appropriate, so clear it. */
- if ( new_system != old_system || skyref_changed ) {
- astClearTitle( result );
-
-/* Test if the old and new sky coordinate systems are similar enough to make
- use of the same axis attribute values (e.g. if they are both equatorial
- systems, then they can both use the same axis labels, etc.,so long as
- the SKyRefIs value has not changed). */
- if ( IsEquatorial( new_system, status ) != IsEquatorial( old_system, status ) ||
- skyref_changed ) {
-
-/* If necessary, clear inappropriate values for all those axis attributes
- whose access functions are over-ridden by this class (these access functions
- will then provide suitable defaults appropriate to the new coordinate system
- instead). */
- for ( axis = 0; axis < 2; axis++ ) {
- astClearAsTime( result, axis );
- astClearDirection( result, axis );
- astClearFormat( result, axis );
- astClearLabel( result, axis );
- astClearSymbol( result, axis );
- astClearUnit( result, axis );
- }
- }
- }
-
-/* If the result Frame is not a SkyFrame, we must temporarily clear the
- System and AlignSystem values since the values used by this class are only
- appropriate to this class. */
- } else {
- if( astTestSystem( template ) ) {
- new_system = astGetSystem( template );
- astClearSystem( template );
- new_alignsystem = astGetAlignSystem( template );
- astClearAlignSystem( template );
- reset_system = 1;
- }
- }
-
-/* Invoke the parent class astOverlay method to transfer attributes inherited
- from the parent class. */
- (*parent_overlay)( template, template_axes, result, status );
-
-/* Reset the System and AlignSystem values if necessary */
- if( reset_system ) {
- astSetSystem( template, new_system );
- astSetAlignSystem( template, new_alignsystem );
- }
-
-/* Check if the result Frame is a SkyFrame or from a class derived from
- SkyFrame. If not, we cannot transfer SkyFrame attributes to it as it is
- insufficiently specialised. In this case simply omit these attributes. */
- if ( skyframe && astOK ) {
-
-/* Define a macro that tests whether an attribute is set in the template and,
- if so, transfers its value to the result. */
-#define OVERLAY(attr) \
- if ( astTest##attr( template ) ) { \
- astSet##attr( result, astGet##attr( template ) ); \
- }
-
-/* Store template axis indices */
- if( template_axes ) {
- tax0 = template_axes[ 0 ];
- tax1 = template_axes[ 1 ];
- } else {
- tax0 = 0;
- tax1 = 1;
- }
-
-/* Define a similar macro that does the same for SkyFrame specific axis
- attributes. */
-#define OVERLAY2(attr) \
- if( astTest##attr( template, tax0 ) ) { \
- astSet##attr( result, 0, astGet##attr( template, tax0 ) ); \
- } \
- if( astTest##attr( template, tax1 ) ) { \
- astSet##attr( result, 1, astGet##attr( template, tax1 ) ); \
- }
-
-/* Use the macro to transfer each SkyFrame attribute in turn. */
- OVERLAY(Equinox);
- OVERLAY(Projection);
- OVERLAY(NegLon);
- OVERLAY(AlignOffset);
- OVERLAY(SkyRefIs);
- OVERLAY2(SkyRef);
- OVERLAY2(SkyRefP);
- }
-
-/* Undefine macros local to this function. */
-#undef OVERLAY
-#undef OVERLAY2
-}
-
-static void Resolve( AstFrame *this_frame, const double point1[],
- const double point2[], const double point3[],
- double point4[], double *d1, double *d2, int *status ){
-/*
-* Name:
-* Resolve
-
-* Purpose:
-* Resolve a vector into two orthogonal components
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void Resolve( AstFrame *this, const double point1[],
-* const double point2[], const double point3[],
-* double point4[], double *d1, double *d2, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astResolve method
-* inherited from the Frame class).
-
-* Description:
-* This function resolves a vector into two perpendicular components.
-* The vector from point 1 to point 2 is used as the basis vector.
-* The vector from point 1 to point 3 is resolved into components
-* parallel and perpendicular to this basis vector. The lengths of the
-* two components are returned, together with the position of closest
-* aproach of the basis vector to point 3.
-*
-* Each vector is a geodesic curve. For a SkyFrame, these are great
-* circles on the celestial sphere.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* point1
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). This marks the start of the basis vector,
-* and of the vector to be resolved.
-* point2
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). This marks the end of the basis vector.
-* point3
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). This marks the end of the vector to be
-* resolved.
-* point4
-* An array of double, with one element for each Frame axis
-* in which the coordinates of the point of closest approach of the
-* basis vector to point 3 will be returned.
-* d1
-* The address of a location at which to return the distance from
-* point 1 to point 4 (that is, the length of the component parallel
-* to the basis vector). Positive values are in the same sense as
-* movement from point 1 to point 2.
-* d2
-* The address of a location at which to return the distance from
-* point 4 to point 3 (that is, the length of the component
-* perpendicular to the basis vector). The returned value is always
-* positive.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function will return "bad" coordinate values (AST__BAD)
-* if any of the input coordinates has this value, or if the required
-* output values are undefined.
-*/
-
-/* Local Variables: */
- AstSkyFrame *this; /* Pointer to the SkyFrame structure */
- const int *perm; /* Pointer to axis permutation array */
- double n1[ 3 ]; /* Unit normal to grt crcl thru p1 and p2 */
- double n2[ 3 ]; /* Unit normal to grt crcl thru p3 and p4 */
- double p1[ 2 ]; /* Permuted coordinates for point1 */
- double p2[ 2 ]; /* Permuted coordinates for point2 */
- double p3[ 2 ]; /* Permuted coordinates for point3 */
- double p4[ 2 ]; /* Permuted coordinates for point4 */
- double v1[ 3 ]; /* 3-vector for p1 */
- double v2[ 3 ]; /* 3-vector for p2 */
- double v3[ 3 ]; /* 3-vector for p3 */
- double v4[ 3 ]; /* 3-vector for p4 */
- double v5[ 3 ]; /* 3-vector 90 degs away from p1 */
- double vmod; /* Modulus of vector */
- double vtemp[ 3 ]; /* Temporary vector workspace */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* Store initial bad output values. */
- point4[ 0 ] = AST__BAD;
- point4[ 1 ] = AST__BAD;
- *d1 = AST__BAD;
- *d2 = AST__BAD;
-
-/* Check that all supplied values are OK. */
- if ( ( point1[ 0 ] != AST__BAD ) && ( point1[ 1 ] != AST__BAD ) &&
- ( point2[ 0 ] != AST__BAD ) && ( point2[ 1 ] != AST__BAD ) &&
- ( point3[ 0 ] != AST__BAD ) && ( point3[ 1 ] != AST__BAD ) ) {
-
-/* If so, obtain a pointer to the SkyFrame's axis permutation array. */
- perm = astGetPerm( this );
- if ( astOK ) {
-
-/* Apply the axis permutation array to obtain the coordinates of the
- three supplied point in the required (longitude,latitude) order. */
- p1[ perm[ 0 ] ] = point1[ 0 ];
- p1[ perm[ 1 ] ] = point1[ 1 ];
- p2[ perm[ 0 ] ] = point2[ 0 ];
- p2[ perm[ 1 ] ] = point2[ 1 ];
- p3[ perm[ 0 ] ] = point3[ 0 ];
- p3[ perm[ 1 ] ] = point3[ 1 ];
-
-/* Convert each point into a 3-vector of unit length. */
- palSlaDcs2c( p1[ 0 ], p1[ 1 ], v1 );
- palSlaDcs2c( p2[ 0 ], p2[ 1 ], v2 );
- palSlaDcs2c( p3[ 0 ], p3[ 1 ], v3 );
-
-/* Find the cross product between the first two vectors, and normalize is.
- This is the unit normal to the great circle plane defining parallel
- distance. */
- palSlaDvxv( v2, v1, vtemp );
- palSlaDvn( vtemp, n1, &vmod );
-
-/* Return with bad values if the normal is undefined (i.e. if the first two
- vectors are identical or diametrically opposite). */
- if( vmod > 0.0 ) {
-
-/* Now take the cross product of the normal vector and v1. This gives a
- point, v5, on the great circle which is 90 degrees away from v1, in the
- direction of v2. */
- palSlaDvxv( v1, n1, v5 );
-
-/* Find the cross product of the outlying point (point 3), and the vector
- n1 found above, and normalize it. This is the unit normal to the great
- circle plane defining perpendicular distance. */
- palSlaDvxv( v3, n1, vtemp );
- palSlaDvn( vtemp, n2, &vmod );
-
-/* Return with bad values if the normal is undefined (i.e. if the
- outlying point is normal to the great circle defining the basis
- vector). */
- if( vmod > 0.0 ) {
-
-/* The point of closest approach, point 4, is the point which is normal
- to both normal vectors (i.e. the intersection of the two great circles).
- This is the cross product of n1 and n2. No need to normalize this time
- since both n1 and n2 are unit vectors, and so v4 will already be a
- unit vector. */
- palSlaDvxv( n1, n2, v4 );
-
-/* The dot product of v4 and v1 is the cos of the parallel distance,
- d1, whilst the dot product of v4 and v5 is the sin of the parallel
- distance. Use these to get the parallel distance with the correct
- sign, in the range -PI to +PI. */
- *d1 = atan2( palSlaDvdv( v4, v5 ), palSlaDvdv( v4, v1 ) );
-
-/* The dot product of v4 and v3 is the cos of the perpendicular distance,
- d2, whilst the dot product of n1 and v3 is the sin of the perpendicular
- distance. Use these to get the perpendicular distance. */
- *d2 = fabs( atan2( palSlaDvdv( v3, n1 ), palSlaDvdv( v3, v4 ) ) );
-
-/* Convert the 3-vector representing the intersection of the two planes
- back into spherical cooordinates and then constrain the longitude result
- to lie in the range 0 to 2*pi. */
- palSlaDcc2s( v4, &p4[ 0 ], &p4[ 1 ] );
- p4[ 0 ] = palSlaDranrm( p4[ 0 ] );
-
-/* Permute the result coordinates to undo the effect of the SkyFrame
- axis permutation array. */
- point4[ 0 ] = p4[ perm[ 0 ] ];
- point4[ 1 ] = p4[ perm[ 1 ] ];
- }
- }
- }
- }
-
- return;
-
-}
-
-static AstPointSet *ResolvePoints( AstFrame *this_frame, const double point1[],
- const double point2[], AstPointSet *in,
- AstPointSet *out, int *status ) {
-/*
-* Name:
-* ResolvePoints
-
-* Purpose:
-* Resolve a set of vectors into orthogonal components
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "frame.h"
-* AstPointSet *astResolvePoints( AstFrame *this, const double point1[],
-* const double point2[], AstPointSet *in,
-* AstPointSet *out )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astResolvePoints method
-* inherited from the Frame class).
-
-* Description:
-* This function takes a Frame and a set of vectors encapsulated
-* in a PointSet, and resolves each one into two orthogonal components,
-* returning these two components in another PointSet.
-*
-* This is exactly the same as the public astResolve method, except
-* that this method allows many vectors to be processed in a single call,
-* thus reducing the computational cost of overheads of many
-* individual calls to astResolve.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* point1
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). This marks the start of the basis vector,
-* and of the vectors to be resolved.
-* point2
-* An array of double, with one element for each Frame axis
-* (Naxes attribute). This marks the end of the basis vector.
-* in
-* Pointer to the PointSet holding the ends of the vectors to be
-* resolved.
-* out
-* Pointer to a PointSet which will hold the length of the two
-* resolved components. A NULL value may also be given, in which
-* case a new PointSet will be created by this function.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet. The first axis will
-* hold the lengths of the vector components parallel to the basis vector.
-* These values will be signed (positive values are in the same sense as
-* movement from point 1 to point 2. The second axis will hold the lengths
-* of the vector components perpendicular to the basis vector. These
-* values will be signed only if the Frame is 2-dimensional, in which
-* case a positive value indicates that rotation from the basis vector
-* to the tested vector is in the same sense as rotation from the first
-* to the second axis of the Frame.
-
-* Notes:
-* - The number of coordinate values per point in the input
-* PointSet must match the number of axes in the supplied Frame.
-* - If an output PointSet is supplied, it must have space for
-* sufficient number of points and 2 coordinate values per point.
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-* - We assume spherical geometry throughout this function.
-*/
-
-/* Local Variables: */
- AstPointSet *result; /* Pointer to output PointSet */
- AstSkyFrame *this; /* Pointer to SkyFrame structure */
- const int *perm; /* Pointer to axis permutation array */
- double **ptr_in; /* Pointers to input axis values */
- double **ptr_out; /* Pointers to returned axis values */
- double *d1; /* Pointer to next parallel component value */
- double *d2; /* Pointer to next perpendicular component value */
- double *point3x; /* Pointer to next first axis value */
- double *point3y; /* Pointer to next second axis value */
- double n1[ 3 ]; /* Unit normal to grt crcl thru p1 and p2 */
- double n2[ 3 ]; /* Unit normal to grt crcl thru p3 and p4 */
- double p1[ 2 ]; /* Permuted coordinates for point1 */
- double p2[ 2 ]; /* Permuted coordinates for point2 */
- double p3[ 2 ]; /* Permuted coordinates for point3 */
- double sign; /* Sign for perpendicular distances */
- double v1[ 3 ]; /* 3-vector for p1 */
- double v2[ 3 ]; /* 3-vector for p2 */
- double v3[ 3 ]; /* 3-vector for p3 */
- double v4[ 3 ]; /* 3-vector for p4 */
- double v5[ 3 ]; /* 3-vector 90 degs away from p1 */
- double vmod; /* Modulus of vector */
- double vtemp[ 3 ]; /* Temporary vector workspace */
- int ipoint; /* Index of next point */
- int ncoord_in; /* Number of input PointSet coordinates */
- int ncoord_out; /* Number of coordinates in output PointSet */
- int npoint; /* Number of points to transform */
- int npoint_out; /* Number of points in output PointSet */
- int ok; /* OK to proceed? */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* Obtain the number of input vectors to resolve and the number of coordinate
- values per vector. */
- npoint = astGetNpoint( in );
- ncoord_in = astGetNcoord( in );
-
-/* If OK, check that the number of input coordinates matches the number
- required by the Frame. Report an error if these numbers do not match. */
- if ( astOK && ( ncoord_in != 2 ) ) {
- astError( AST__NCPIN, "astResolvePoints(%s): Bad number of coordinate "
- "values (%d) in input %s.", status, astGetClass( this ), ncoord_in,
- astGetClass( in ) );
- astError( AST__NCPIN, "The %s given requires 2 coordinate values for "
- "each input point.", status, astGetClass( this ) );
- }
-
-/* If still OK, and a non-NULL pointer has been given for the output PointSet,
- then obtain the number of points and number of coordinates per point for
- this PointSet. */
- if ( astOK && out ) {
- npoint_out = astGetNpoint( out );
- ncoord_out = astGetNcoord( out );
-
-/* Check that the dimensions of this PointSet are adequate to accommodate the
- output coordinate values and report an error if they are not. */
- if ( astOK ) {
- if ( npoint_out < npoint ) {
- astError( AST__NOPTS, "astResolvePoints(%s): Too few points (%d) in "
- "output %s.", status, astGetClass( this ), npoint_out,
- astGetClass( out ) );
- astError( AST__NOPTS, "The %s needs space to hold %d transformed "
- "point(s).", status, astGetClass( this ), npoint );
- } else if ( ncoord_out < 2 ) {
- astError( AST__NOCTS, "astResolvePoints(%s): Too few coordinate "
- "values per point (%d) in output %s.", status,
- astGetClass( this ), ncoord_out, astGetClass( out ) );
- astError( AST__NOCTS, "The %s supplied needs space to store 2 "
- "coordinate value(s) per transformed point.", status,
- astGetClass( this ) );
- }
- }
- }
-
-/* If all the validation stages are passed successfully, and a NULL output
- pointer was given, then create a new PointSet to encapsulate the output
- coordinate data. */
- if ( astOK ) {
- if ( !out ) {
- result = astPointSet( npoint, 2, "", status );
-
-/* Otherwise, use the PointSet supplied. */
- } else {
- result = out;
- }
- }
-
-/* Get pointers to the input and output axis values */
- ptr_in = astGetPoints( in );
- ptr_out = astGetPoints( result );
-
-/* Obtain a pointer to the SkyFrame's axis permutation array. */
- perm = astGetPerm( this );
-
-/* If the axes have been swapped we need to swap the sign of the returned
- perpendicular distances. */
- sign = ( perm[ 0 ] == 0 ) ? -1.0 : 1.0;
-
-/* Check pointers can be used safely */
- if( astOK ) {
-
-/* Apply the axis permutation array to obtain the coordinates of the
- two supplied points in the required (longitude,latitude) order. */
- p1[ perm[ 0 ] ] = point1[ 0 ];
- p1[ perm[ 1 ] ] = point1[ 1 ];
- p2[ perm[ 0 ] ] = point2[ 0 ];
- p2[ perm[ 1 ] ] = point2[ 1 ];
-
-/* Convert these points into 3-vectors of unit length. */
- palSlaDcs2c( p1[ 0 ], p1[ 1 ], v1 );
- palSlaDcs2c( p2[ 0 ], p2[ 1 ], v2 );
-
-/* Find the cross product between the vectors, and normalize it. This is the
- unit normal to the great circle plane defining parallel distance. */
- palSlaDvxv( v2, v1, vtemp );
- palSlaDvn( vtemp, n1, &vmod );
-
-/* Return with bad values if the normal is undefined (i.e. if the first two
- vectors are identical or diametrically opposite). */
- ok = 0;
- if( vmod > 0.0 ) {
- ok = 1;
-
-/* Now take the cross product of the normal vector and v1. This gives a
- point, v5, on the great circle which is 90 degrees away from v1, in the
- direction of v2. */
- palSlaDvxv( v1, n1, v5 );
- }
-
-/* Store pointers to the first two axis arrays in the returned PointSet. */
- d1 = ptr_out[ 0 ];
- d2 = ptr_out[ 1 ];
-
-/* Store pointers to the axis values in the supplied PointSet. */
- point3x = ptr_in[ 0 ];
- point3y = ptr_in[ 1 ];
-
-/* Check supplied values can be used */
- if( ok ) {
-
-/* Loop round each supplied vector. */
- for( ipoint = 0; ipoint < npoint; ipoint++, d1++, d2++,
- point3x++, point3y++ ) {
-
-/* Store bad output values if either input axis value is bad. */
- if( *point3x == AST__BAD || *point3y == AST__BAD ){
- *d1 = AST__BAD;
- *d2 = AST__BAD;
-
-/* If both are good... */
- } else {
-
-/* Apply the axis permutation array to obtain the coordinates in the
- required (longitude,latitude) order. */
- p3[ perm[ 0 ] ] = *point3x;
- p3[ perm[ 1 ] ] = *point3y;
-
-/* Convert into a 3-vector of unit length. */
- palSlaDcs2c( p3[ 0 ], p3[ 1 ], v3 );
-
-/* Find the cross product of the outlying point (point 3), and the vector
- n1 found above, and normalize it. This is the unit normal to the great
- circle plane defining perpendicular distance. */
- palSlaDvxv( v3, n1, vtemp );
- palSlaDvn( vtemp, n2, &vmod );
-
-/* Return with bad values if the normal is undefined (i.e. if the
- outlying point is normal to the great circle defining the basis
- vector). */
- if( vmod <= 0.0 ) {
- *d1 = AST__BAD;
- *d2 = AST__BAD;
- } else {
-
-/* The point of closest approach, point 4, is the point which is normal
- to both normal vectors (i.e. the intersection of the two great circles).
- This is the cross product of n1 and n2. No need to normalize this time
- since both n1 and n2 are unit vectors, and so v4 will already be a
- unit vector. */
- palSlaDvxv( n1, n2, v4 );
-
-/* The dot product of v4 and v1 is the cos of the parallel distance,
- d1, whilst the dot product of v4 and v5 is the sin of the parallel
- distance. Use these to get the parallel distance with the correct
- sign, in the range -PI to +PI. */
- *d1 = atan2( palSlaDvdv( v4, v5 ), palSlaDvdv( v4, v1 ) );
-
-/* The dot product of v4 and v3 is the cos of the perpendicular distance,
- d2, whilst the dot product of n1 and v3 is the sin of the perpendicular
- distance. Use these to get the perpendicular distance. */
- *d2 = sign*atan2( palSlaDvdv( v3, n1 ), palSlaDvdv( v3, v4 ) );
- }
- }
- }
-
-/* If supplied values cannot be used, fill the returned PointSet with bad
- values */
- } else {
- for( ipoint = 0; ipoint < npoint; ipoint++, d1++, d2++ ) {
- *d1 = AST__BAD;
- *d2 = AST__BAD;
- }
- }
- }
-
-/* Annul the returned PointSet if an error occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-static void SetAsTime( AstSkyFrame *this, int axis, int value, int *status ) {
-/*
-* Name:
-* SetAsTime
-
-* Purpose:
-* Set a value for the AsTime attribute for a SkyFrame's axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void SetAsTime( AstSkyFrame *this, int axis, int value, int *status )
-
-* Class Membership:
-* SkyFrame member function.
-
-* Description:
-* This function sets the boolean value of the AsTime attribute for a
-* specified axis of a SkyFrame. This value indicates whether axis values
-* should be formatted as times (as opposed to angles) by default.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* axis
-* Index of the axis for which a value is to be set (zero based).
-* value
-* The boolean value to be set.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void.
-*/
-
-/* Local Variables: */
- AstAxis *ax; /* Pointer to Axis object */
- AstSkyAxis *new_ax; /* Pointer to new SkyAxis object */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis, "astSetAsTime" );
-
-/* Obtain a pointer to the Axis object. */
- ax = astGetAxis( this, axis );
-
-/* Check if the Axis object is a SkyAxis. If not, we will replace it with
- one. */
- if ( !astIsASkyAxis( ax ) ) {
-
-/* Create a new SkyAxis and overlay the attributes of the original Axis. */
- new_ax = astSkyAxis( "", status );
- astAxisOverlay( ax, new_ax );
-
-/* Modify the SkyFrame to use the new Skyaxis and annul the original Axis
- pointer. Retain a pointer to the new SkyAxis. */
- astSetAxis( this, axis, new_ax );
- ax = astAnnul( ax );
- ax = (AstAxis *) new_ax;
- }
-
-/* Set a value for the Axis AsTime attribute. */
- astSetAxisAsTime( ax, value );
-
-/* Annul the Axis pointer. */
- ax = astAnnul( ax );
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void SetAttrib( AstObject *this, const char *setting, int *status )
-
-* Class Membership:
-* SkyFrame member function (extends the astSetAttrib method inherited from
-* the Mapping class).
-
-* Description:
-* This function assigns an attribute value for a SkyFrame, the attribute
-* and its value being specified by means of a string of the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in lower
-* case with no white space present. The value to the right of the "="
-* should be a suitable textual representation of the value to be assigned
-* and this will be interpreted according to the attribute's data type.
-* White space surrounding the value is only significant for string
-* attributes.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* setting
-* Pointer to a null terminated string specifying the new attribute
-* value.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Attributes:
-* As well as those attributes inherited from the parent class, this
-* function also accepts values for the following additional attributes:
-*
-* Equinox (double, read as a string)
-
-* Notes:
-* This protected method is intended to be invoked by the Object astSet
-* method and makes additional attributes accessible to it.
-*/
-
-/* Local Vaiables: */
- AstSkyFrame *this; /* Pointer to the SkyFrame structure */
- double dval; /* Floating point attribute value */
- double dval1; /* Floating point attribute value */
- double dval2; /* Floating point attribute value */
- double mjd; /* Modified Julian Date */
- int astime; /* Value of AsTime attribute */
- int axis; /* Axis index */
- int equinox; /* Offset of Equinox attribute value */
- int ival; /* Integer attribute value */
- int len; /* Length of setting string */
- int nc; /* Number of characters read by astSscanf */
- int neglon; /* Display -ve longitudes? */
- int ok; /* Can string be used? */
- int offset; /* Offset of start of attribute value */
- int projection; /* Offset of projection attribute value */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_object;
-
-/* Obtain the length of the setting string. */
- len = strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse the
- setting string and extract the attribute value (or an offset to it in the
- case of string values). In each case, use the value set in "nc" to check
- that the entire string was matched. Once a value has been obtained, use the
- appropriate method to set it. */
-
-/* AsTime(axis). */
-/* ------------- */
- if ( nc = 0,
- ( 2 == astSscanf( setting, "astime(%d)= %d %n", &axis, &astime, &nc ) )
- && ( nc >= len ) ) {
- astSetAsTime( this, axis - 1, astime );
-
-/* Equinox. */
-/* -------- */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "equinox=%n%*[^\n]%n",
- &equinox, &nc ) ) && ( nc >= len ) ) {
-
-/* Convert the Equinox value to a Modified Julian Date before use. */
- mjd = astReadDateTime( setting + equinox );
- if ( astOK ) {
- astSetEquinox( this, mjd );
-
-/* Report contextual information if the conversion failed. */
- } else {
- astError( AST__ATTIN, "astSetAttrib(%s): Invalid equinox value "
- "\"%s\" given for sky coordinate system.", status,
- astGetClass( this ), setting + equinox );
- }
-
-/* NegLon. */
-/* ------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "neglon= %d %n", &neglon, &nc ) )
- && ( nc >= len ) ) {
- astSetNegLon( this, neglon );
-
-/* Projection. */
-/* ----------- */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "projection=%n%*[^\n]%n",
- &projection, &nc ) )
- && ( nc >= len ) ) {
- astSetProjection( this, setting + projection );
-
-/* SkyRef. */
-/* ------- */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "skyref=%n%*[^\n]%n",
- &offset, &nc ) )
- && ( nc >= len ) ) {
- ok = 0;
- nc = astUnformat( this, 0, setting + offset, &dval1 );
- if( setting[ offset + nc ] == ',' ) {
- nc++;
- nc += astUnformat( this, 1, setting + offset + nc, &dval2 );
- if( nc == strlen( setting + offset ) ) {
- astSetSkyRef( this, 0, dval1 );
- astSetSkyRef( this, 1, dval2 );
- ok = 1;
- }
- }
-
- if( !ok && astOK ) {
- astError( AST__BADOC, "astSetAttrib(%s): Invalid axis values string "
- "\"%.*s\" given for SkyRef attribute.", status, astGetClass( this ),
- (int) astChrLen( setting + offset ), setting + offset );
- }
-
-/* SkyRef(axis). */
-/* ------------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "skyref(%d)= %lg %n",
- &axis, &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetSkyRef( this, axis - 1, dval );
-
-/* SkyRefIs. */
-/* --------- */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "skyrefis=%n%*[^\n]%n",
- &offset, &nc ) )
- && ( nc >= len ) ) {
-
- if( astChrMatch( setting + offset, POLE_STRING ) ) {
- astSetSkyRefIs( this, POLE_REF );
-
- } else if( astChrMatch( setting + offset, ORIGIN_STRING ) ) {
- astSetSkyRefIs( this, ORIGIN_REF );
-
- } else if( astChrMatch( setting + offset, IGNORED_STRING ) ) {
- astSetSkyRefIs( this, IGNORED_REF );
-
- } else if( astOK ) {
- astError( AST__OPT, "astSet(%s): option '%s' is unknown in '%s'.", status,
- astGetClass( this ), setting+offset, setting );
- }
-
-/* SkyRefP. */
-/* -------- */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "skyrefp=%n%*[^\n]%n",
- &offset, &nc ) )
- && ( nc >= len ) ) {
-
- ok = 0;
- nc = astUnformat( this, 0, setting + offset, &dval1 );
- if( setting[ offset + nc ] == ',' ) {
- nc++;
- nc += astUnformat( this, 1, setting + offset + nc, &dval2 );
- if( nc == strlen( setting + offset ) ) {
- astSetSkyRefP( this, 0, dval1 );
- astSetSkyRefP( this, 1, dval2 );
- ok = 1;
- }
- }
-
- if( !ok && astOK ) {
- astError( AST__BADOC, "astSetAttrib(%s): Invalid axis values string "
- "\"%.*s\" given for SkyRefP attribute.", status, astGetClass( this ),
- (int) astChrLen( setting + offset ), setting + offset );
- }
-
-
-/* SkyRefP(axis). */
-/* -------------- */
- } else if ( nc = 0,
- ( 2 == astSscanf( setting, "skyrefp(%d)= %lg %n",
- &axis, &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetSkyRefP( this, axis - 1, dval );
-
-/* AlignOffset. */
-/* ------------ */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "alignoffset= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetAlignOffset( this, ival );
-
-/* Define a macro to see if the setting string matches any of the
- read-only attributes of this class. */
-#define MATCH(attrib) \
- ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
- ( nc >= len ) )
-
-/* If the attribute was not recognised, use this macro to report an error
- if a read-only attribute has been specified. */
- } else if ( MATCH( "lataxis" ) ||
- MATCH( "lonaxis" ) ) {
- astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.", status,
- setting, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Pass any unrecognised setting to the parent method for further
- interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-}
-
-static void SetCachedLAST( AstSkyFrame *this, double last, double epoch,
- double obslon, double obslat, double obsalt,
- double dut1, int *status ) {
-/*
-* Name:
-* SetCachedLAST
-
-* Purpose:
-* Store a LAST value in the cache in the SkyFrame vtab.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void SetCachedLAST( AstSkyFrame *this, double last, double epoch,
-* double obslon, double obslat, double obsalt,
-* double dut1, int *status )
-
-* Class Membership:
-* SkyFrame member function.
-
-* Description:
-* This function stores the supplied LAST value in a cache in the
-* SkyFrame virtual function table for later use by GetCachedLAST.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* last
-* The Local Apparent Sidereal Time (radians).
-* epoch
-* The epoch (MJD).
-* obslon
-* Observatory geodetic longitude (radians)
-* obslat
-* Observatory geodetic latitude (radians)
-* obsalt
-* Observatory geodetic altitude (metres)
-* dut1
-* The UT1-UTC correction, in seconds.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS
- AstSkyFrameVtab *vtab;
- AstSkyLastTable *table;
- double *ep;
- double *lp;
- int i;
- int itable;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Initialise */
- table = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the SkyFrame virtual function table. */
- vtab = (AstSkyFrameVtab *) ((AstObject *) this)->vtab;
-
-/* Loop round every LAST table held in the vtab. Each table refers to a
- different observatory position and/or DUT1 value. */
- for( itable = 0; itable < vtab->nlast_tables; itable++ ) {
- table = (vtab->last_tables)[ itable ];
-
-/* See if the table refers to the given position and dut1 value, allowing
- some small tolerance. If it does, leave the loop. */
- if( fabs( table->obslat - obslat ) < 2.0E-7 &&
- fabs( table->obslon - obslon ) < 2.0E-7 &&
- fabs( table->obsalt - obsalt ) < 1.0 &&
- fabs( table->dut1 - dut1 ) < 1.0E-5 ) break;
-
-/* Ensure "table" ends up NULL if no suitable table is found. */
- table = NULL;
- }
-
-/* If no table was found, create one now, and add it into the vtab cache. */
- if( !table ) {
-
- astBeginPM;
- table = astMalloc( sizeof( AstSkyLastTable ) );
- itable = (vtab->nlast_tables)++;
- vtab->last_tables = astGrow( vtab->last_tables, vtab->nlast_tables,
- sizeof( AstSkyLastTable * ) );
- astEndPM;
-
- if( astOK ) {
- (vtab->last_tables)[ itable ] = table;
- table->obslat = obslat;
- table->obslon = obslon;
- table->obsalt = obsalt;
- table->dut1 = dut1;
- table->nentry = 1;
-
- astBeginPM;
- table->epoch = astMalloc( sizeof( double ) );
- table->last = astMalloc( sizeof( double ) );
- astEndPM;
-
- if( astOK ) {
- table->epoch[ 0 ] = epoch;
- table->last[ 0 ] = last;
- }
- }
-
-
-/* If we have a table, add the new point into it. */
- } else {
-
-/* Extend the epoch and last arrays. */
- astBeginPM;
- table->epoch = astGrow( table->epoch, ++(table->nentry), sizeof( double ) );
- table->last = astGrow( table->last, table->nentry, sizeof( double ) );
- astEndPM;
-
-/* Check memory allocation was successful. */
- if( astOK ) {
-
-/* Get pointers to the last original elements in the arrays of epoch and
- corresponding LAST values in the table. */
- ep = table->epoch + table->nentry - 2;
- lp = table->last + table->nentry - 2;
-
-/* Starting from the end of the arrays, shuffle all entries up one
- element until an element is found which is less than the supplied epoch
- value. This maintains the epoch array in monotonic increasing order. */
- for( i = table->nentry - 2; i >= 0; i--,ep--,lp-- ) {
- if( *ep <= epoch ) break;
- ep[ 1 ] = *ep;
- lp[ 1 ] = *lp;
- }
-
-/* Store the new epoch and LAST value. Add or subtract 2.PI as needed
- from the new LAST value to ensure it is continuous with the previous
- LAST value. This is needed for interpolation between the two values
- to be meaningful. */
- ep[ 1 ] = epoch;
-
- if( last > lp[ 0 ] + AST__DPI ) {
- lp[ 1 ] = last - 2*AST__DPI;
-
- } else if( last < lp[ 0 ] - AST__DPI ) {
- lp[ 1 ] = last + 2*AST__DPI;
-
- } else {
- lp[ 1 ] = last;
- }
- }
- }
-}
-
-static void SetDut1( AstFrame *this_frame, double val, int *status ) {
-/*
-* Name:
-* SetDut1
-
-* Purpose:
-* Set the value of the Dut1 attribute for a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void SetDut1( AstFrame *this, double val, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astSetDut1 method
-* inherited from the Frame class).
-
-* Description:
-* This function clears the Dut1 value and updates the LAST value
-* stored in the SkyFrame.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* val
-* New Dut1 value.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstSkyFrame *this;
- double orig;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* Note the original Dut1 value. */
- orig = astGetDut1( this );
-
-/* Invoke the parent method to set the Frame Dut1 value. */
- (*parent_setdut1)( this_frame, val, status );
-
-/* If the DUT1 value has changed significantly, indicate that the LAST value
- will need to be re-calculated when it is next needed. */
- if( fabs( orig - val ) > 1.0E-6 ) {
- this->last = AST__BAD;
- this->eplast = AST__BAD;
- this->klast = AST__BAD;
- }
-}
-
-static void SetEpoch( AstFrame *this_frame, double val, int *status ) {
-/*
-* Name:
-* SetEpoch
-
-* Purpose:
-* Set the value of the Epoch attribute for a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void SetEpoch( AstFrame *this, double val, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astSetEpoch method
-* inherited from the Frame class).
-
-* Description:
-* This function clears the Epoch value and updates the LAST value
-* stored in the SkyFrame.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* val
-* New Epoch value.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstSkyFrame *this; /* Pointer to the SkyFrame structure */
- double orig; /* Original epoch value */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* Save the old epoch. */
- orig = astGetEpoch( this );
-
-/* Invoke the parent method to set the Frame epoch. */
- (*parent_setepoch)( this_frame, val, status );
-
-/* If the epoch has changed significantly, indicate that the LAST value
- corresponding to the Epoch will need to be re-calculated when it is
- next needed. */
- if( fabs( orig - val ) > 1.0E-8 ) {
- this->last = AST__BAD;
- this->eplast = AST__BAD;
- this->klast = AST__BAD;
- }
-}
-
-static void SetLast( AstSkyFrame *this, int *status ) {
-/*
-* Name:
-* SetLast
-
-* Purpose:
-* Set the Local Appearent Sidereal Time for a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void SetLast( AstSkyFrame *this, int *status )
-
-* Class Membership:
-* SkyFrame member function.
-
-* Description:
-* This function sets the Local Apparent Sidereal Time at the epoch
-* and geographical longitude given by the current values of the Epoch
-* and ObsLon attributes associated with the supplied SkyFrame.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - A value of AST__BAD will be returned if this function is invoked
-* with the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- double epoch; /* Epoch as a TDB MJD */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get the SkyFrame Epoch as a TDB MJD. */
- epoch = astGetEpoch( this );
-
-/* Calculate the LAST value (in rads) and store in the SkyFrame structure. */
- this->last = CalcLAST( this, epoch, astGetObsLon( this ),
- astGetObsLat( this ), astGetObsAlt( this ),
- astGetDut1( this ), status );
-
-/* Save the TDB MJD to which this LAST corresponds. */
- this->eplast = epoch;
-
-/* The ratio between solar and sidereal time is a slowly varying function
- of epoch. The GetLAST function returns a fast approximation to LAST
- by using the ratio between solar and sidereal time. Indicate that
- GetLAST should re-calculate the ratio by setting the ratio value bad. */
- this->klast = AST__BAD;
-}
-
-static void SetObsAlt( AstFrame *this, double val, int *status ) {
-/*
-* Name:
-* SetObsAlt
-
-* Purpose:
-* Set the value of the ObsAlt attribute for a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void SetObsAlt( AstFrame *this, double val, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astSetObsAlt method
-* inherited from the Frame class).
-
-* Description:
-* This function sets the ObsAlt value.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* val
-* New ObsAlt value.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- double orig;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Note the original ObsAlt value. */
- orig = astGetObsAlt( this );
-
-/* Invoke the parent method to set the Frame ObsAlt. */
- (*parent_setobsalt)( this, val, status );
-
-/* If the altitude has changed significantly, indicate that the LAST value
- and magnitude of the diurnal aberration vector will need to be
- re-calculated when next needed. */
- if( fabs( orig - val ) > 0.001 ) {
- ( (AstSkyFrame *) this )->last = AST__BAD;
- ( (AstSkyFrame *) this )->eplast = AST__BAD;
- ( (AstSkyFrame *) this )->klast = AST__BAD;
- ( (AstSkyFrame *) this )->diurab = AST__BAD;
- }
-}
-
-static void SetObsLat( AstFrame *this, double val, int *status ) {
-/*
-* Name:
-* SetObsLat
-
-* Purpose:
-* Set the value of the ObsLat attribute for a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void SetObsLat( AstFrame *this, double val, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astSetObsLat method
-* inherited from the Frame class).
-
-* Description:
-* This function sets the ObsLat value.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* val
-* New ObsLat value.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- double orig;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Note the original ObsLat value. */
- orig = astGetObsLat( this );
-
-/* Invoke the parent method to set the Frame ObsLat. */
- (*parent_setobslat)( this, val, status );
-
-/* If the altitude has changed significantly, indicate that the LAST value
- and magnitude of the diurnal aberration vector will need to be
- re-calculated when next needed. */
- if( fabs( orig - val ) > 1.0E-8 ) {
- ( (AstSkyFrame *) this )->last = AST__BAD;
- ( (AstSkyFrame *) this )->eplast = AST__BAD;
- ( (AstSkyFrame *) this )->klast = AST__BAD;
- ( (AstSkyFrame *) this )->diurab = AST__BAD;
- }
-}
-
-static void SetObsLon( AstFrame *this, double val, int *status ) {
-/*
-* Name:
-* SetObsLon
-
-* Purpose:
-* Set the value of the ObsLon attribute for a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void SetObsLon( AstFrame *this, double val, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astSetObsLon method
-* inherited from the Frame class).
-
-* Description:
-* This function sets the ObsLon value.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* val
-* New ObsLon value.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- double orig;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Note the original ObsLon value. */
- orig = astGetObsLon( this );
-
-/* Invoke the parent method to set the Frame ObsLon. */
- (*parent_setobslon)( this, val, status );
-
-/* If the longitude has changed significantly, indicate that the LAST value
- will need to be re-calculated when it is next needed. */
- if( fabs( orig - val ) > 1.0E-8 ) {
- ( (AstSkyFrame *) this )->last = AST__BAD;
- ( (AstSkyFrame *) this )->eplast = AST__BAD;
- ( (AstSkyFrame *) this )->klast = AST__BAD;
- }
-}
-
-static void SetSystem( AstFrame *this_frame, AstSystemType system, int *status ) {
-/*
-* Name:
-* SetSystem
-
-* Purpose:
-* Set the System attribute for a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void SetSystem( AstFrame *this_frame, AstSystemType system, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astSetSystem protected
-* method inherited from the Frame class).
-
-* Description:
-* This function assigns a new value to the System attribute for a SkyFrame.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* system
-* The new System value.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstFrameSet *fs; /* FrameSet to be used as the Mapping */
- AstSkyFrame *sfrm; /* Copy of original SkyFrame */
- AstSkyFrame *this; /* Pointer to SkyFrame structure */
- double xin[ 2 ]; /* Axis 0 values */
- double xout[ 2 ]; /* Axis 0 values */
- double yin[ 2 ]; /* Axis 1 values */
- double yout[ 2 ]; /* Axis 1 values */
- int aloff; /* The AlignOffset attribute value */
- int aloff_set; /* Is the AlignOffset attribute set? */
- int skyref_set; /* Is either SkyRef attribute set? */
- int skyrefis; /* The SkyRefIs attribute value */
- int skyrefis_set; /* Is the SkyRefIs attribute set? */
- int skyrefp_set; /* Is either SkyRefP attribute set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* See if either the SkyRef or SkyRefP attribute is set. */
- skyref_set = astTestSkyRef( this, 0 ) || astTestSkyRef( this, 1 );
- skyrefp_set = astTestSkyRefP( this, 0 ) || astTestSkyRefP( this, 1 );
-
-/* If so, we will need to transform their values into the new coordinate
- system. Save a copy of the SkyFrame with its original System value. */
- sfrm = ( skyref_set || skyrefp_set )?astCopy( this ):NULL;
-
-/* Use the parent method to set the new System value. */
- (*parent_setsystem)( this_frame, system, status );
-
-/* Now modify the SkyRef and SkyRefP attributes if necessary. */
- if( sfrm ) {
-
-/* Save the AlignOffset, SkyRefIs, SkyRef and SkyRefP values. */
- aloff_set = astTestAlignOffset( sfrm );
- aloff = astGetAlignOffset( sfrm );
- skyrefis_set = astTestSkyRefIs( sfrm );
- skyrefis = astGetSkyRefIs( sfrm );
-
- xin[ 0 ] = astGetSkyRef( sfrm, 0 );
- xin[ 1 ] = astGetSkyRefP( sfrm, 0 );
- yin[ 0 ] = astGetSkyRef( sfrm, 1 );
- yin[ 1 ] = astGetSkyRefP( sfrm, 1 );
-
-/* Clear the SkyRef values to avoid infinite recursion in the following
- call to astConvert. */
- if( skyref_set ) {
- astClearSkyRef( sfrm, 0 );
- astClearSkyRef( sfrm, 1 );
- astClearSkyRef( this, 0 );
- astClearSkyRef( this, 1 );
- }
-
-/* Also set AlignOffset and SkyRefIs so that the following call to
- astConvert does not align in offset coords. */
- astSetAlignOffset( sfrm, 0 );
- astSetSkyRefIs( sfrm, IGNORED_REF );
-
-/* Get the Mapping from the original System to the new System. Invoking
- astConvert will recursively invoke SetSystem again. This is why we need
- to be careful to ensure that SkyRef is cleared above - doing so ensure
- we do not end up with infinite recursion. */
- fs = astConvert( sfrm, this, "" );
- if( !fs ) {
- if( astOK ) {
- astError( AST__INTER, "astSetSystem(SkyFrame): Cannot convert "
- "SkyRef positions from %s to %s.", status,
- astGetC( sfrm, "System" ), astGetC( this, "System" ) );
- }
-
-/* Use the Mapping to find the SkyRef and SkyRefP positions in the new
- coordinate system. */
- } else {
- astTran2( fs, 2, xin, yin, 1, xout, yout );
-
-/* Store the values as required. */
- if( skyref_set ) {
- astSetSkyRef( this, 0, xout[ 0 ] );
- astSetSkyRef( this, 1, yout[ 0 ] );
- }
-
- if( skyrefp_set ) {
- astSetSkyRefP( this, 0, xout[ 1 ] );
- astSetSkyRefP( this, 1, yout[ 1 ] );
- }
-
-/* Restore the original SkyRefIs and AlignOffset values. */
- if( aloff_set ) {
- astSetAlignOffset( this, aloff );
- } else {
- astClearAlignOffset( this );
- }
-
- if( skyrefis_set ) {
- astSetSkyRefIs( this, skyrefis );
- } else {
- astClearSkyRefIs( this );
- }
-
-/* Free resources. */
- fs = astAnnul( fs );
- }
- sfrm = astAnnul( sfrm );
- }
-}
-
-static void Shapp( double dist, double *r0, double *r3, double a0,
- double *p4, int *status ){
-/*
-* Name:
-* Shapp
-
-* Purpose:
-* Use the vectors calculated by Shcal to find a sky position
-* which is offset along a given position angle.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void Shapp( double dist, double *r0, double *r3, double a0,
-* double *p4, int *status )
-
-* Class Membership:
-* SkyFrame member function.
-
-* Description:
-* This function uses the vectors R0 and R3 calculated previously by
-* Shcal to find the sky position which is offset away from the
-* "reference" position (see function Offset2) by a given arc
-* distance, along a given great circle.
-*
-* No checks are made for AST__BAD values.
-
-* Parameters:
-* dist
-* The arc distance to move away from the reference position
-* in the given direction, in radians.
-* r0
-* Pointer to an array holding the 3-vector representing the reference
-* position.
-* r3
-* Pointer to an array holding the 3-vector representing the
-* point which is 90 degrees away from the reference point, along
-* the required great circle.
-* a0
-* The sky longitude of the reference position, in radians.
-* p4
-* Pointer to an array of 2 doubles in which to put the sky longitude
-* and latitude of the required point, in radians.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- double cosdst; /* Cosine of DIST */
- double r4[ 3 ]; /* Required position vector */
- double sindst; /* Sine of DIST */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Store commonly used values. */
- sindst = sin( dist );
- cosdst = cos( dist );
-
-/* The vector R4 representing the required point is produced as a
- linear sum of R0 and R3. */
- r4[ 0 ] = cosdst*r0[ 0 ] + sindst*r3[ 0 ];
- r4[ 1 ] = cosdst*r0[ 1 ] + sindst*r3[ 1 ];
- r4[ 2 ] = cosdst*r0[ 2 ] + sindst*r3[ 2 ];
-
-/* Create the longitude of the required point. If this point is at
- a pole it is assigned the same longitude as the reference point. */
- if( r4[ 0 ] != 0.0 || r4[ 1 ] != 0.0 ) {
- p4[ 0 ] = atan2( r4[ 1 ], r4[ 0 ] );
- } else {
- p4[ 0 ] = a0;
- }
-
-/* Create the latitude of the required point. */
- if( r4[ 2 ] > 1.0 ) {
- r4[ 2 ] = 1.0;
- } else if( r4[ 2 ] < -1.0 ) {
- r4[ 2 ] = -1.0;
- }
- p4[ 1 ] = asin( r4[ 2 ] );
-
-}
-
-static void Shcal( double a0, double b0, double angle, double *r0,
- double *r3, int *status ) {
-/*
-* Name:
-* Shcal
-
-* Purpose:
-* Calculate vectors required by Offset2.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void Shcal( double a0, double b0, double angle, double *r0,
-* double *r3, int *status )
-
-* Class Membership:
-* SkyFrame member function.
-
-* Description:
-* This function calculates the 3-vector R0, representing the given
-* sky position (A0,B0), and the 3-vector R3, representing the sky
-* position which is 90 degrees away from R0, along a great circle
-* passing through R0 at a position angle given by ANGLE. Each
-* 3-vector holds Cartesian (X,Y,Z) values with origin at the centre
-* of the celestial sphere. The XY plane is the "equator", the Z
-* axis is in the direction of the "north pole", X is towards zero
-* longitude (A=0), and Y is towards longitude 90 degrees.
-*
-* No checks are made for AST__BAD input values.
-
-* Parameters:
-* a0
-* The sky longitude of the given position, in radians.
-* b0
-* The sky latitude of the given position, in radians.
-* angle
-* The position angle of a great circle passing through the given
-* position. That is, the angle from north to the required
-* direction, in radians. Positive angles are in the sense of
-* rotation from north to east.
-* r0
-* A pointer to an array to receive 3-vector R0. See above.
-* r3
-* A pointer to an array to receive 3-vector R3. See above.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- double cosa0; /* Cosine of A0 */
- double cosb0; /* Cosine of B0 */
- double cospa; /* Cosine of ANGLE */
- double r1[ 3 ]; /* Vector PI/2 away from R0 in meridian of R0 */
- double r2[ 3 ]; /* Vector PI/2 away from R0 on equator */
- double sinpa; /* Sine of ANGLE */
- double sina0; /* Sine of A0 */
- double sinb0; /* Sine of B0 */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Store commonly used values. */
- sina0 = sin( a0 );
- cosa0 = cos( a0 );
- sinb0 = sin( b0 );
- cosb0 = cos( b0 );
- sinpa = sin( angle );
- cospa = cos( angle );
-
-/* Create the vector R0 representing the given point. The XY plane
- defines zero latitude, Z is in the direction of increasing latitude,
- X is towards zero longitude, and Y is towards longitude 90 degrees. */
- r0[ 0 ] = cosb0*cosa0;
- r0[ 1 ] = cosb0*sina0;
- r0[ 2 ] = sinb0;
-
-/* Create the vector R1 representing the point in the meridian of the
- given point which has latitude 90 degrees greater than the
- given point. */
- r1[ 0 ] = -sinb0*cosa0;
- r1[ 1 ] = -sinb0*sina0;
- r1[ 2 ] = cosb0;
-
-/* Create the vector R2 representing the point on the equator (i.e. a
- latitude of zero), which has a longitude 90 degrees to the west of
- the given point. */
- r2[ 0 ] = -sina0;
- r2[ 1 ] = cosa0;
- r2[ 2 ] = 0.0;
-
-/* Create the vector R3 representing the point which is 90 degrees away
- from the given point, along the required great circle. */
- r3[ 0 ] = cospa*r1[ 0 ] + sinpa*r2[ 0 ];
- r3[ 1 ] = cospa*r1[ 1 ] + sinpa*r2[ 1 ];
- r3[ 2 ] = cospa*r1[ 2 ] + sinpa*r2[ 2 ];
-
-/* Return */
- return;
-}
-
-static int SubFrame( AstFrame *target_frame, AstFrame *template,
- int result_naxes, const int *target_axes,
- const int *template_axes, AstMapping **map,
- AstFrame **result, int *status ) {
-/*
-* Name:
-* SubFrame
-
-* Purpose:
-* Select axes from a SkyFrame and convert to the new coordinate system.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* int SubFrame( AstFrame *target, AstFrame *template,
-* int result_naxes, const int *target_axes,
-* const int *template_axes, AstMapping **map,
-* AstFrame **result, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the protected astSubFrame method
-* inherited from the Frame class).
-
-* Description:
-* This function selects a requested sub-set (or super-set) of the axes from
-* a "target" SkyFrame and creates a new Frame with copies of the selected
-* axes assembled in the requested order. It then optionally overlays the
-* attributes of a "template" Frame on to the result. It returns both the
-* resulting Frame and a Mapping that describes how to convert between the
-* coordinate systems described by the target and result Frames. If
-* necessary, this Mapping takes account of any differences in the Frames'
-* attributes due to the influence of the template.
-
-* Parameters:
-* target
-* Pointer to the target SkyFrame, from which axes are to be selected.
-* template
-* Pointer to the template Frame, from which new attributes for the
-* result Frame are to be obtained. Optionally, this may be NULL, in
-* which case no overlaying of template attributes will be performed.
-* result_naxes
-* Number of axes to be selected from the target Frame. This number may
-* be greater than or less than the number of axes in this Frame (or
-* equal).
-* target_axes
-* Pointer to an array of int with result_naxes elements, giving a list
-* of the (zero-based) axis indices of the axes to be selected from the
-* target SkyFrame. The order in which these are given determines the
-* order in which the axes appear in the result Frame. If any of the
-* values in this array is set to -1, the corresponding result axis will
-* not be derived from the target Frame, but will be assigned default
-* attributes instead.
-* template_axes
-* Pointer to an array of int with result_naxes elements. This should
-* contain a list of the template axes (given as zero-based axis indices)
-* with which the axes of the result Frame are to be associated. This
-* array determines which axes are used when overlaying axis-dependent
-* attributes of the template on to the result. If any element of this
-* array is set to -1, the corresponding result axis will not receive any
-* template attributes.
-*
-* If the template argument is given as NULL, this array is not used and
-* a NULL pointer may also be supplied here.
-* map
-* Address of a location to receive a pointer to the returned Mapping.
-* The forward transformation of this Mapping will describe how to
-* convert coordinates from the coordinate system described by the target
-* SkyFrame to that described by the result Frame. The inverse
-* transformation will convert in the opposite direction.
-* result
-* Address of a location to receive a pointer to the result Frame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if coordinate conversion is possible
-* between the target and the result Frame. Otherwise zero is returned and
-* *map and *result are returned as NULL (but this will not in itself
-* result in an error condition). In general, coordinate conversion should
-* always be possible if no template Frame is supplied but may not always
-* be possible otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-
-* Implementation Notes:
-* - This implementation addresses the selection of axes from a SkyFrame
-* object. This results in another object of the same class only if both
-* axes of the SkyFrame are selected, once each. Otherwise, the result is a
-* Frame class object which inherits the SkyFrame's axis information (if
-* appropriate) but none of the other properties of a SkyFrame.
-* - In the event that a SkyFrame results, the returned Mapping will take
-* proper account of the relationship between the target and result sky
-* coordinate systems.
-* - In the event that a Frame class object results, the returned Mapping
-* will only represent a selection/permutation of axes.
-
-* Implementation Deficiencies:
-* - Any axis selection is currently permitted. Probably this should be
-* restricted so that each axis can only be selected once. The
-* astValidateAxisSelection method will do this but currently there are bugs
-* in the CmpFrame class that cause axis selections which will not pass this
-* test. Install the validation when these are fixed.
-*/
-
-/* Local Variables: */
- AstAxis *ax; /* Pointer to result Frame Axis object */
- AstMapping *tmpmap; /* Temporary Mapping pointer */
- AstPermMap *permmap; /* Pointer to PermMap */
- AstSkyFrame *target; /* Pointer to the SkyFrame structure */
- AstSkyFrame *temp; /* Pointer to copy of target SkyFrame */
- AstSystemType align_sys; /* System in which to align the SkyFrames */
- int match; /* Coordinate conversion is possible? */
- int perm[ 2 ]; /* Permutation array for axis swap */
- int result_swap; /* Swap result SkyFrame coordinates? */
- int set_usedefs; /* Set the returned UseDefs attribute zero?*/
- int target_axis; /* Target SkyFrame axis index */
- int target_swap; /* Swap target SkyFrame coordinates? */
-
-/* Initialise the returned values. */
- *map = NULL;
- *result = NULL;
- match = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return match;
-
-/* Obtain a pointer to the target SkyFrame structure. */
- target = (AstSkyFrame *) target_frame;
-
-/* Result is a SkyFrame. */
-/* --------------------- */
-/* Check if the result Frame is to have two axes obtained by selecting
- both of the target SkyFrame axes, in either order. If so, the
- result will also be a SkyFrame. */
- if ( ( result_naxes == 2 ) &&
- ( ( ( target_axes[ 0 ] == 0 ) && ( target_axes[ 1 ] == 1 ) ) ||
- ( ( target_axes[ 0 ] == 1 ) && ( target_axes[ 1 ] == 0 ) ) ) ) {
-
-/* If a template has not been supplied, or is the same object as the
- target, we are simply extracting axes from the supplied SkyFrame. In
- this case we temporarily force the UseDefs attribute to 1 so that (for
- instance) the astPickAxes method can function correctly. E.g. if you
- have a SkyFrame with no set Epoch and UseDefs set zero, and you try to
- swap the axes, the attempt would fail because MakeSkyMapping would be
- unable to determine the Mapping from original to swapped SkyFrame,
- because of the lack of an Epoch value. */
- set_usedefs = 0;
- if( !template || template == target_frame ) {
- if( !astGetUseDefs( target ) ) {
- astClearUseDefs( target );
- set_usedefs = 1;
- }
- }
-
-/* Form the result from a copy of the target and then permute its axes
- into the order required. */
- *result = astCopy( target );
- astPermAxes( *result, target_axes );
-
-/* If required, overlay the template attributes on to the result SkyFrame.
- Also get the system in which to align the two SkyFrames. This is the
- value of the AlignSystem attribute from the template (if there is a
- template). */
- if ( template ) {
- astOverlay( template, template_axes, *result );
- align_sys = astGetAlignSystem( template );
-
- } else {
- align_sys = astGetAlignSystem( target );
- }
-
-/* See whether alignment occurs in offset coordinates or absolute
- coordinates. If the current call to this function is part of the
- process of restoring a FrameSet's integrity following changes to
- the FrameSet's current Frame, then we ignore the setting of the
- AlignOffset attributes and use 0. This ensures that when the System
- attribute (for instance) is changed via a FrameSet pointer, the
- Mappings within the FrameSet are modified to produce offsets in the
- new System. If we are not currently restoring a FrameSet's integrity,
- then we align in offsets if the template is a SkyFrame and both template
- and target want alignment to occur in the offset coordinate system. In
- this case we use a UnitMap to connect them. */
- if( ( astGetFrameFlags( target_frame ) & AST__INTFLAG ) == 0 ) {
- if( astGetAlignOffset( target ) &&
- astGetSkyRefIs( target ) != IGNORED_REF &&
- template && astIsASkyFrame( template ) ){
- if( astGetAlignOffset( (AstSkyFrame *) template ) &&
- astGetSkyRefIs( (AstSkyFrame *) template ) != IGNORED_REF ) {
- match = 1;
- *map = (AstMapping *) astUnitMap( 2, "", status );
- }
- }
- }
-
-/* Otherwise, generate a Mapping that takes account of changes in the sky
- coordinate system (equinox, epoch, etc.) between the target SkyFrame and
- the result SkyFrame. If this Mapping can be generated, set "match" to
- indicate that coordinate conversion is possible. */
- if( ! *map ) {
- match = ( MakeSkyMapping( target, (AstSkyFrame *) *result,
- align_sys, map, status ) != 0 );
- }
-
-/* If required, re-instate the original zero value of UseDefs. */
- if( set_usedefs ) {
- astSetUseDefs( target, 0 );
- astSetUseDefs( *result, 0 );
- }
-
-/* If a Mapping has been obtained, it will expect coordinate values to be
- supplied in (longitude,latitude) pairs. Test whether we need to swap the
- order of the target SkyFrame coordinates to conform with this. */
- if ( astOK && match ) {
- target_swap = ( astValidateAxis( target, 0, "astSubFrame" ) != 0 );
-
-/* Coordinates will also be delivered in (longitude,latitude) pairs, so check
- to see whether the result SkyFrame coordinate order should be swapped. */
- result_swap = ( target_swap != ( target_axes[ 0 ] != 0 ) );
-
-/* If either set of coordinates needs swapping, create a PermMap that
- will swap a pair of coordinates. */
- permmap = NULL;
- if ( target_swap || result_swap ) {
- perm[ 0 ] = 1;
- perm[ 1 ] = 0;
- permmap = astPermMap( 2, perm, 2, perm, NULL, "", status );
- }
-
-/* If necessary, prefix this PermMap to the main Mapping. */
- if ( target_swap ) {
- tmpmap = (AstMapping *) astCmpMap( permmap, *map, 1, "", status );
- *map = astAnnul( *map );
- *map = tmpmap;
- }
-
-/* Also, if necessary, append it to the main Mapping. */
- if ( result_swap ) {
- tmpmap = (AstMapping *) astCmpMap( *map, permmap, 1, "", status );
- *map = astAnnul( *map );
- *map = tmpmap;
- }
-
-/* Annul the pointer to the PermMap (if created). */
- if ( permmap ) permmap = astAnnul( permmap );
- }
-
-/* Result is not a SkyFrame. */
-/* ------------------------- */
-/* In this case, we select axes as if the target were from the Frame
- class. However, since the resulting data will then be separated
- from their enclosing SkyFrame, default attribute values may differ
- if the methods for obtaining them were over-ridden by the SkyFrame
- class. To overcome this, we ensure that these values are explicitly
- set for the result Frame (rather than relying on their
- defaults). */
- } else {
-
-/* Make a temporary copy of the target SkyFrame. We will explicitly
- set the attribute values in this copy so as not to modify the
- original. */
- temp = astCopy( target );
-
-/* Define a macro to test if an attribute is set. If not, set it
- explicitly to its default value. */
-#define SET(attribute) \
- if ( !astTest##attribute( temp ) ) { \
- astSet##attribute( temp, astGet##attribute( temp ) ); \
- }
-
-/* Set attribute values which apply to the Frame as a whole and which
- we want to retain, but whose defaults are over-ridden by the
- SkyFrame class. */
- SET(Domain)
- SET(Title)
-
-/* Now loop to set explicit attribute values for each axis. */
- for ( target_axis = 0; target_axis < 2; target_axis++ ) {
-
-/* Define a macro to test if an axis attribute is set. If not, set it
- explicitly to its default value. */
-#define SET_AXIS(attribute) \
- if ( !astTest##attribute( temp, target_axis ) ) { \
- astSet##attribute( temp, target_axis, \
- astGet##attribute( temp, target_axis ) ); \
- }
-
-/* Use this macro to set explicit values for all the axis attributes
- for which the SkyFrame class over-rides the default value. */
- SET_AXIS(AsTime)
- SET_AXIS(Format)
- SET_AXIS(Label)
- SET_AXIS(Symbol)
- SET_AXIS(Unit)
-
-/* Now handle axis attributes for which there are no SkyFrame access
- methods. For these we require a pointer to the temporary
- SkyFrame's Axis object. */
- ax = astGetAxis( temp, target_axis );
-
-/* Set an explicit value for the IsLatitude and CentreZero attributes. */
- if( astValidateAxis( temp, target_axis, "astSubFrame" ) == 1 ) {
- astSetAxisIsLatitude( ax, 1 );
- astSetAxisCentreZero( ax, 1 );
-
- } else {
- astSetAxisIsLatitude( ax, 0 );
- astSetAxisCentreZero( ax, astGetNegLon( temp ) );
- }
-
-/* Annul the Axis object pointer. */
- ax = astAnnul( ax );
- }
-
-/* Clear attributes which have an extended range of values allowed by
- this class. */
- astClearSystem( temp );
- astClearAlignSystem( temp );
-
-/* Invoke the astSubFrame method inherited from the Frame class to
- produce the result Frame by selecting the required set of axes and
- overlaying the template Frame's attributes. */
- match = (*parent_subframe)( (AstFrame *) temp, template,
- result_naxes, target_axes, template_axes,
- map, result, status );
-
-/* Delete the temporary copy of the target SkyFrame. */
- temp = astDelete( temp );
- }
-
-/* Ensure the returned Frame does not have active units. */
- astSetActiveUnit( *result, 0 );
-
-/* If an error occurred or no match was found, annul the returned
- objects and reset the returned result. */
- if ( !astOK || !match ) {
- if( *map ) *map = astAnnul( *map );
- if( *result ) *result = astAnnul( *result );
- match = 0;
- }
-
-/* Return the result. */
- return match;
-
-/* Undefine macros local to this function. */
-#undef SET
-#undef SET_AXIS
-}
-
-static AstSystemType SystemCode( AstFrame *this, const char *system, int *status ) {
-/*
-* Name:
-* SystemCode
-
-* Purpose:
-* Convert a string into a coordinate system type code.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* AstSystemType SystemCode( AstFrame *this, const char *system, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astSystemCode method
-* inherited from the Frame class).
-
-* Description:
-* This function converts a string used for the external
-* description of a sky coordinate system into a SkyFrame
-* coordinate system type code (System attribute value). It is the
-* inverse of the astSystemString function.
-
-* Parameters:
-* this
-* The Frame.
-* system
-* Pointer to a constant null-terminated string containing the
-* external description of the sky coordinate system.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The System type code.
-
-* Notes:
-* - A value of AST__BADSYSTEM is returned if the sky coordinate
-* system description was not recognised. This does not produce an
-* error.
-* - A value of AST__BADSYSTEM is also returned if this function
-* is invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- AstSystemType result; /* Result value to return */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Match the "system" string against each possibility and assign the
- result. */
- if ( astChrMatch( "FK4", system ) ) {
- result = AST__FK4;
-
- } else if ( astChrMatch( "FK4_NO_E", system ) ||
- astChrMatch( "FK4-NO-E", system ) ) {
- result = AST__FK4_NO_E;
-
- } else if ( astChrMatch( "FK5", system ) ||
- astChrMatch( "Equatorial", system ) ) {
- result = AST__FK5;
-
- } else if ( astChrMatch( "J2000", system ) ) {
- result = AST__J2000;
-
- } else if ( astChrMatch( "ICRS", system ) ) {
- result = AST__ICRS;
-
- } else if ( astChrMatch( "AZEL", system ) ) {
- result = AST__AZEL;
-
- } else if ( astChrMatch( "GAPPT", system ) ||
- astChrMatch( "GEOCENTRIC", system ) ||
- astChrMatch( "APPARENT", system ) ) {
- result = AST__GAPPT;
-
- } else if ( astChrMatch( "ECLIPTIC", system ) ) {
- result = AST__ECLIPTIC;
-
- } else if ( astChrMatch( "HELIOECLIPTIC", system ) ) {
- result = AST__HELIOECLIPTIC;
-
- } else if ( astChrMatch( "GALACTIC", system ) ) {
- result = AST__GALACTIC;
-
- } else if ( astChrMatch( "SUPERGALACTIC", system ) ) {
- result = AST__SUPERGALACTIC;
-
- } else if ( astChrMatch( "UNKNOWN", system ) ) {
- result = AST__UNKNOWN;
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *SystemString( AstFrame *this, AstSystemType system, int *status ) {
-/*
-* Name:
-* SystemString
-
-* Purpose:
-* Convert a coordinate system type code into a string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* const char *SystemString( AstFrame *this, AstSystemType system, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astSystemString method
-* inherited from the Frame class).
-
-* Description:
-* This function converts a SkyFrame coordinate system type code
-* (System attribute value) into a string suitable for use as an
-* external representation of the coordinate system type.
-
-* Parameters:
-* this
-* The Frame.
-* system
-* The coordinate system type code.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a constant null-terminated string containing the
-* textual equivalent of the type code supplied.
-
-* Notes:
-* - A NULL pointer value is returned if the sky coordinate system
-* code was not recognised. This does not produce an error.
-* - A NULL pointer value is also returned if this function is
-* invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- const char *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Match the "system" value against each possibility and convert to a
- string pointer. (Where possible, return the same string as would be
- used in the FITS WCS representation of the coordinate system). */
- switch ( system ) {
- case AST__FK4:
- result = "FK4";
- break;
-
- case AST__FK4_NO_E:
- result = "FK4-NO-E";
- break;
-
- case AST__FK5:
- result = "FK5";
- break;
-
- case AST__J2000:
- result = "J2000";
- break;
-
- case AST__ICRS:
- result = "ICRS";
- break;
-
- case AST__GAPPT:
- result = "GAPPT";
- break;
-
- case AST__AZEL:
- result = "AZEL";
- break;
-
- case AST__ECLIPTIC:
- result = "ECLIPTIC";
- break;
-
- case AST__HELIOECLIPTIC:
- result = "HELIOECLIPTIC";
- break;
-
- case AST__GALACTIC:
- result = "GALACTIC";
- break;
-
- case AST__SUPERGALACTIC:
- result = "SUPERGALACTIC";
- break;
-
- case AST__UNKNOWN:
- result = "Unknown";
- break;
- }
-
-/* Return the result pointer. */
- return result;
-}
-
-static int TestActiveUnit( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* TestActiveUnit
-
-* Purpose:
-* Test the ActiveUnit flag for a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* int TestActiveUnit( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astTestActiveUnit protected
-* method inherited from the Frame class).
-
-* Description:
-* This function test the value of the ActiveUnit flag for a SkyFrame,
-* which is always "unset".
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The result of the test (0).
-
-*/
- return 0;
-}
-
-static int TestAsTime( AstSkyFrame *this, int axis, int *status ) {
-/*
-* Name:
-* TestAsTime
-
-* Purpose:
-* Determine if a value has been set for a SkyFrame's AsTime attribute.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* int TestAsTime( AstSkyFrame *this, int axis, int *status )
-
-* Class Membership:
-* SkyFrame member function.
-
-* Description:
-* This function returns a boolean value to indicate if a value has
-* previously been set for the AsTime attribute for a specified axis of a
-* SkyFrame. This attribute indicates whether axis values should be
-* formatted as times (as opposed to angles) by default.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* axis
-* Index of the axis for which information is required (zero based).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero or one, according to whether the AsTime attribute has been set.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables. */
- AstAxis *ax; /* Pointer to Axis object */
- int result; /* Result to be returned */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis, "astTestAsTime" );
-
-/* Obtain a pointer to the Axis object. */
- ax = astGetAxis( this, axis );
-
-/* Determine if the AsTime attribute has been set for it (it cannot have been
- set unless the object is a SkyAxis). */
- result = ( astIsASkyAxis( ax ) && astTestAxisAsTime( ax ) );
-
-/* Annul the Axis pointer. */
- ax = astAnnul( ax );
-
-/* Return the result. */
- return result;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a SkyFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astTestAttrib protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a SkyFrame's attributes.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - This function uses one-based axis numbering so that it is
-* suitable for external (public) use.
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSkyFrame *this; /* Pointer to the SkyFrame structure */
- int axis; /* SkyFrame axis number */
- int len; /* Length of attrib string */
- int nc; /* No. characters read by astSscanf */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_object;
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* AsTime(axis). */
-/* ------------- */
- if ( nc = 0,
- ( 1 == astSscanf( attrib, "astime(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestAsTime( this, axis - 1 );
-
-/* Equinox. */
-/* -------- */
- } else if ( !strcmp( attrib, "equinox" ) ) {
- result = astTestEquinox( this );
-
-/* NegLon. */
-/* ------- */
- } else if ( !strcmp( attrib, "neglon" ) ) {
- result = astTestNegLon( this );
-
-/* Projection. */
-/* ----------- */
- } else if ( !strcmp( attrib, "projection" ) ) {
- result = astTestProjection( this );
-
-/* SkyRefIs. */
-/* --------- */
- } else if ( !strcmp( attrib, "skyrefis" ) ) {
- result = astTestSkyRefIs( this );
-
-/* SkyRef. */
-/* ------- */
- } else if ( !strcmp( attrib, "skyref" ) ) {
- result = astTestSkyRef( this, 0 ) || astTestSkyRef( this, 1 );
-
-/* SkyRef(axis). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "skyref(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestSkyRef( this, axis - 1 );
-
-/* SkyRefP. */
-/* -------- */
- } else if ( !strcmp( attrib, "skyrefp" ) ) {
- result = astTestSkyRefP( this, 0 ) || astTestSkyRefP( this, 1 );
-
-/* SkyRefP(axis). */
-/* ------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( attrib, "skyrefp(%d)%n", &axis, &nc ) )
- && ( nc >= len ) ) {
- result = astTestSkyRefP( this, axis - 1 );
-
-/* AlignOffset */
-/* ----------- */
- } else if ( !strcmp( attrib, "alignoffset" ) ) {
- result = astTestAlignOffset( this );
-
-/* If the name is not recognised, test if it matches any of the
- read-only attributes of this class. If it does, then return
- zero. */
- } else if ( !strcmp( attrib, "lataxis" ) ||
- !strcmp( attrib, "lonaxis" ) ) {
- result = 0;
-
-/* If the attribute is not recognised, pass it on to the parent method
- for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static int Unformat( AstFrame *this_frame, int axis, const char *string,
- double *value, int *status ) {
-/*
-* Name:
-* Unformat
-
-* Purpose:
-* Read a formatted coordinate value for a SkyFrame axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* int Unformat( AstFrame *this, int axis, const char *string,
-* double *value, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the public astUnformat
-* method inherited from the Frame class).
-
-* Description:
-* This function reads a formatted coordinate value for a SkyFrame
-* axis (supplied as a string) and returns the equivalent numerical
-* value as a double. It also returns the number of characters read
-* from the string.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame.
-* axis
-* The number of the SkyFrame axis for which the coordinate
-* value is to be read (axis numbering starts at zero for the
-* first axis).
-* string
-* Pointer to a constant null-terminated string containing the
-* formatted coordinate value.
-* value
-* Pointer to a double in which the coordinate value read will
-* be returned (in radians).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The number of characters read from the string to obtain the
-* coordinate value.
-
-* Notes:
-* - Any white space at the beginning of the string will be
-* skipped, as also will any trailing white space following the
-* coordinate value read. The function's return value will reflect
-* this.
-* - A function value of zero (and no coordinate value) will be
-* returned, without error, if the string supplied does not contain
-* a suitably formatted value.
-* - The string "<bad>" is recognised as a special case and will
-* generate the value AST__BAD, without error. The test for this
-* string is case-insensitive and permits embedded white space.
-* - A function result of zero will be returned and no coordinate
-* value will be returned via the "value" pointer if this function
-* is invoked with the global error status set, or if it should
-* fail for any reason.
-*/
-
-/* Local Variables: */
- AstSkyFrame *this; /* Pointer to the SkyFrame structure */
- double coord; /* Coordinate value read */
- int format_set; /* Format attribute set? */
- int nc; /* Number of characters read */
-
-/* Initialise. */
- nc = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return nc;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_frame;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis, "astUnformat" );
-
-/* Determine if a Format value has been set for the axis and set a
- temporary value if it has not. Use the GetFormat member function
- for this class together with member functions inherited from the
- parent class (rather than using the object's methods directly)
- because if any of these methods have been over-ridden by a derived
- class the Format string syntax may no longer be compatible with
- this class. */
- format_set = (*parent_testformat)( this_frame, axis, status );
- if ( !format_set ) {
- (*parent_setformat)( this_frame, axis, GetFormat( this_frame, axis, status ), status );
- }
-
-/* Use the Unformat member function inherited from the parent class to
- read the coordinate value. */
- nc = (*parent_unformat)( this_frame, axis, string, &coord, status );
-
-/* If necessary, clear any temporary Format value that was set above. */
- if ( !format_set ) (*parent_clearformat)( this_frame, axis, status );
-
-/* If an error occurred, clear the number of characters read. */
- if ( !astOK ) {
- nc = 0;
-
-/* Otherwise, if characters were read, return the coordinate value. */
- } else if ( nc ) {
- *value = coord;
- }
-
-/* Return the number of characters read. */
- return nc;
-}
-
-static int ValidateSystem( AstFrame *this, AstSystemType system, const char *method, int *status ) {
-/*
-*
-* Name:
-* ValidateSystem
-
-* Purpose:
-* Validate a value for a Frame's System attribute.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "frame.h"
-* int ValidateSystem( AstFrame *this, AstSystemType system,
-* const char *method, int *status )
-
-* Class Membership:
-* SkyFrame member function (over-rides the astValidateSystem method
-* inherited from the Frame class).
-
-* Description:
-* This function checks the validity of the supplied system value.
-* If the value is valid, it is returned unchanged. Otherwise, an
-* error is reported and a value of AST__BADSYSTEM is returned.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* system
-* The system value to be checked.
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function
-* to validate an axis index. This method name is used solely
-* for constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The validated system value.
-
-* Notes:
-* - A value of AST__BADSYSTEM will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstSystemType result; /* Validated system value */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If the value is out of bounds, report an error. */
- if ( system < FIRST_SYSTEM || system > LAST_SYSTEM ) {
- astError( AST__AXIIN, "%s(%s): Bad value (%d) given for the System "
- "or AlignSystem attribute of a %s.", status, method,
- astGetClass( this ), (int) system, astGetClass( this ) );
-
-/* Otherwise, return the supplied value. */
- } else {
- result = system;
- }
-
-/* Return the result. */
- return result;
-}
-
-static void VerifyMSMAttrs( AstSkyFrame *target, AstSkyFrame *result,
- int which, const char *attrs, const char *method, int *status ) {
-/*
-* Name:
-* VerifyMSMAttrs
-
-* Purpose:
-* Verify that usable attribute values are available.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "skyframe.h"
-* void VerifyMSMAttrs( AstSkyFrame *target, AstSkyFrame *result,
-* int which, const char *attrs, const char *method, int *status )
-
-* Class Membership:
-* SkyFrame member function
-
-* Description:
-* This function tests each attribute listed in "attrs". It returns
-* without action if 1) an explicit value has been set for each attribute
-* in the SkyFrame indicated by "which" or 2) the UseDefs attribute of the
-* "which" SkyFrame is non-zero.
-*
-* If UseDefs is zero (indicating that default values should not be
-* used for attributes), and any of the named attributes does not have
-* an explicitly set value, then an error is reported.
-*
-* The displayed error message assumes that tjis function was called
-* as part of the process of producing a Mapping from "target" to "result".
-
-* Parameters:
-* target
-* Pointer to the target SkyFrame.
-* result
-* Pointer to the result SkyFrame.
-* which
-* If 2, both the target and result SkyFrames are checked for the
-* supplied attributes. If less than 2, only the target SkyFrame is
-* checked. If greater than 2, only the result SkyFrame is checked.
-* attrs
-* A string holding a space separated list of attribute names.
-* method
-* A string holding the name of the calling method for use in error
-* messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- const char *a;
- const char *p;
- const char *desc;
- int len;
- int set1;
- int set2;
- int state;
- int usedef1;
- int usedef2;
-
-/* Check inherited status */
- if( !astOK ) return;
-
-/* Get the UseDefs attributes of the two SkyFrames. */
- usedef1 = astGetUseDefs( target );
- usedef2 = astGetUseDefs( result );
-
-/* If both SkyFrames have a non-zero value for its UseDefs attribute, then
- all attributes are assumed to have usable values, since the defaults
- will be used if no explicit value has been set. So we only need to do
- any checks if UseDefs is zero for either SkyFrame. */
- if( !usedef1 || !usedef2 ) {
-
-/* Stop compiler warnings about uninitialised variables */
- a = NULL;
- desc = NULL;
- len = 0;
- set1 = 0;
- set2 = 0;
-
-/* Loop round the "attrs" string identifying the start and length of each
- non-blank word in the string. */
- state = 0;
- p = attrs;
- while( 1 ) {
- if( state == 0 ) {
- if( !isspace( *p ) ) {
- a = p;
- len = 1;
- state = 1;
- }
- } else {
- if( isspace( *p ) || !*p ) {
-
-/* The end of a word has just been reached. Compare it to each known
- attribute value. Get a flag indicating if the attribute has a set
- value, and a string describing the attribute.*/
- if( len > 0 ) {
-
- if( !strncmp( "Equinox", a, len ) ) {
- set1 = astTestEquinox( target );
- set2 = astTestEquinox( result );
- desc = "reference equinox";
-
- } else if( !strncmp( "Dut1", a, len ) ) {
- set1 = astTestDut1( target );
- set2 = astTestDut1( result );
- desc = "UT1-UTC correction";
-
- } else if( !strncmp( "Epoch", a, len ) ) {
- set1 = astTestEpoch( target );
- set2 = astTestEpoch( result );
- desc = "epoch of observation";
-
- } else if( !strncmp( "ObsLon", a, len ) ) {
- set1 = astTestObsLon( target );
- set2 = astTestObsLon( result );
- desc = "longitude of observer";
-
- } else if( !strncmp( "ObsLat", a, len ) ) {
- set1 = astTestObsLat( target );
- set2 = astTestObsLat( result );
- desc = "latitude of observer";
-
- } else if( !strncmp( "ObsAlt", a, len ) ) {
- set1 = astTestObsAlt( target );
- set2 = astTestObsAlt( result );
- desc = "altitude of observer";
-
- } else {
- astError( AST__INTER, "VerifyMSMAttrs(SkyFrame): "
- "Unknown attribute name \"%.*s\" supplied (AST "
- "internal programming error).", status, len, a );
- }
-
-/* If the attribute is not set in the target but should be, report an
- error. */
- if( !usedef1 && !set1 && which < 3 ) {
- astClearTitle( target );
- astClearTitle( result );
- astError( AST__NOVAL, "%s(%s): Cannot convert "
- "celestial coordinates from %s to %s.", status,
- method, astGetClass( target ),
- astGetC( target, "Title" ),
- astGetC( result, "Title" ) );
- astError( AST__NOVAL, "No value has been set for "
- "the \"%.*s\" attribute (%s) in the input %s.", status,
- len, a, desc, astGetClass( target ) );
- break;
- }
-
-/* If the attribute is not set in the result but should be, report an
- error. */
- if( !usedef2 && !set2 && which > 1 ) {
- astClearTitle( target );
- astClearTitle( result );
- astError( AST__NOVAL, "%s(%s): Cannot convert "
- "celestial coordinates from %s to %s.", status,
- method, astGetClass( result ),
- astGetC( target, "Title" ),
- astGetC( result, "Title" ) );
- astError( AST__NOVAL, "No value has been set for "
- "the \"%.*s\" attribute (%s) in the output %s.", status,
- len, a, desc, astGetClass( result ) );
- break;
- }
-
-/* Continue the word search algorithm. */
- }
- len = 0;
- state = 0;
- } else {
- len++;
- }
- }
- if( !*(p++) ) break;
- }
- }
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/*
-*att++
-* Name:
-* AlignOffset
-
-* Purpose:
-* Align SkyFrames using the offset coordinate system?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute is a boolean value which controls how a SkyFrame
-* behaves when it is used (by
-c astFindFrame or astConvert) as a template to match another (target)
-f AST_FINDFRAME or AST_CONVERT) as a template to match another (target)
-* SkyFrame. It determines the coordinate system in which the two
-* SkyFrames are aligned if a match occurs.
-*
-* If the template and target SkyFrames both have defined offset coordinate
-* systems (i.e. the SkyRefIs attribute is set to either "Origin" or "
-* Pole"), and they both have a non-zero value for AlignOffset, then
-* alignment occurs within the offset coordinate systems (that is, a
-* UnitMap will always be used to align the two SkyFrames). If either
-* the template or target SkyFrame has zero (the default value) for
-* AlignOffset, or if either SkyFrame has SkyRefIs set to "Ignored", then
-* alignment occurring within the coordinate system specified by the
-* AlignSystem attribute.
-
-* Applicability:
-* SkyFrame
-* All SkyFrames have this attribute.
-*att--
-*/
-astMAKE_CLEAR(SkyFrame,AlignOffset,alignoffset,-INT_MAX)
-astMAKE_GET(SkyFrame,AlignOffset,int,0,( ( this->alignoffset != -INT_MAX ) ?
- this->alignoffset : 0 ))
-astMAKE_SET(SkyFrame,AlignOffset,int,alignoffset,( value != 0 ))
-astMAKE_TEST(SkyFrame,AlignOffset,( this->alignoffset != -INT_MAX ))
-
-/*
-*att++
-* Name:
-* AsTime(axis)
-
-* Purpose:
-* Format celestal coordinates as times?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute specifies the default style of formatting to be
-c used (e.g. by astFormat) for the celestial coordinate values
-f used (e.g. by AST_FORMAT) for the celestial coordinate values
-* described by a SkyFrame. It takes a separate boolean value for
-* each SkyFrame axis so that, for instance, the setting
-* "AsTime(2)=0" specifies the default formatting style for
-* celestial latitude values.
-*
-* If the AsTime attribute for a SkyFrame axis is zero, then
-* coordinates on that axis will be formatted as angles by default
-* (using degrees, minutes and seconds), otherwise they will be
-* formatted as times (using hours, minutes and seconds).
-*
-* The default value of AsTime is chosen according to the sky
-* coordinate system being represented, as determined by the
-* SkyFrame's System attribute. This ensures, for example, that
-* right ascension values will be formatted as times by default,
-* following normal conventions.
-
-* Applicability:
-* SkyFrame
-* All SkyFrames have this attribute.
-
-* Notes:
-* - The AsTime attribute operates by changing the default value of
-* the corresponding Format(axis) attribute. This, in turn, may
-* also affect the value of the Unit(axis) attribute.
-* - Only the default style of formatting is affected by the AsTime
-* value. If an explicit Format(axis) value is set, it will
-* over-ride any effect from the AsTime attribute.
-*att--
-*/
-
-/*
-*att++
-* Name:
-* Equinox
-
-* Purpose:
-* Epoch of the mean equinox.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute is used to qualify those celestial coordinate
-* systems described by a SkyFrame which are notionally based on
-* the ecliptic (the plane of the Earth's orbit around the Sun)
-* and/or the Earth's equator.
-*
-* Both of these planes are in motion and their positions are
-* difficult to specify precisely. In practice, therefore, a model
-* ecliptic and/or equator are used instead. These, together with
-* the point on the sky that defines the coordinate origin (the
-* intersection of the two planes termed the "mean equinox") move
-* with time according to some model which removes the more rapid
-* fluctuations. The SkyFrame class supports both the FK4 and
-* FK5 models.
-*
-* The position of a fixed source expressed in any of these
-* coordinate systems will appear to change with time due to
-* movement of the coordinate system itself (rather than motion of
-* the source). Such coordinate systems must therefore be
-* qualified by a moment in time (the "epoch of the mean equinox"
-* or "equinox" for short) which allows the position of the model
-* coordinate system on the sky to be determined. This is the role
-* of the Equinox attribute.
-*
-* The Equinox attribute is stored as a Modified Julian Date, but
-* when setting or getting its value you may use the same formats
-* as for the Epoch attribute (q.v.).
-*
-* The default Equinox value is B1950.0 (Besselian) for the old
-* FK4-based coordinate systems (see the System attribute) and
-* J2000.0 (Julian) for all others.
-
-* Applicability:
-* SkyFrame
-* All SkyFrames have this attribute.
-
-* Notes:
-* - Care must be taken to distinguish the Equinox value, which
-* relates to the definition of a time-dependent coordinate system
-* (based on solar system reference planes which are in motion),
-* from the superficially similar Epoch value. The latter is used
-* to qualify coordinate systems where the positions of sources
-* change with time (or appear to do so) for a variety of other
-* reasons, such as aberration of light caused by the observer's
-* motion, etc.
-* - See the description of the System attribute for details of
-* which qualifying attributes apply to each celestial coordinate
-* system.
-*att--
-*/
-/* Clear the Equinox value by setting it to AST__BAD. */
-astMAKE_CLEAR(SkyFrame,Equinox,equinox,AST__BAD)
-
-/* Provide a default value of B1950.0 or J2000.0 depending on the System
- setting. */
-astMAKE_GET(SkyFrame,Equinox,double,AST__BAD,(
- ( this->equinox != AST__BAD ) ? this->equinox :
- ( ( ( astGetSystem( this ) == AST__FK4 ) ||
- ( astGetSystem( this ) == AST__FK4_NO_E ) ) ?
- palSlaEpb2d( 1950.0 ) : palSlaEpj2d( 2000.0 ) ) ))
-
-/* Allow any Equinox value to be set, unless the System is Helio-ecliptic
- (in which case clear the value so that J2000 is used). */
-astMAKE_SET(SkyFrame,Equinox,double,equinox,((astGetSystem(this)!=AST__HELIOECLIPTIC)?value:AST__BAD))
-
-/* An Equinox value is set if it is not equal to AST__BAD. */
-astMAKE_TEST(SkyFrame,Equinox,( this->equinox != AST__BAD ))
-
-
-/*
-*att++
-* Name:
-* LatAxis
-
-* Purpose:
-* Index of the latitude axis.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer.
-
-* Description:
-* This read-only attribute gives the index (1 or 2) of the latitude
-* axis within the SkyFrame (taking into account any current axis
-* permutations).
-
-* Applicability:
-* SkyFrame
-* All SkyFrames have this attribute.
-
-*att--
-*/
-
-/*
-*att++
-* Name:
-* LonAxis
-
-* Purpose:
-* Index of the longitude axis.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer.
-
-* Description:
-* This read-only attribute gives the index (1 or 2) of the longitude
-* axis within the SkyFrame (taking into account any current axis
-* permutations).
-
-* Applicability:
-* SkyFrame
-* All SkyFrames have this attribute.
-
-*att--
-*/
-
-/*
-*att++
-* Name:
-* NegLon
-
-* Purpose:
-* Display negative longitude values?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute is a boolean value which controls how longitude values
-c are normalized for display by astNorm.
-f are normalized for display by AST_NORM.
-*
-* If the NegLon attribute is zero, then normalized
-* longitude values will be in the range zero to 2.pi. If NegLon is
-* non-zero, then normalized longitude values will be in the range -pi
-* to pi.
-*
-* The default value depends on the current value of the SkyRefIs
-* attribute, If SkyRefIs has a value of "Origin", then the default for
-* NegLon is one, otherwise the default is zero.
-
-* Applicability:
-* SkyFrame
-* All SkyFrames have this attribute.
-*att--
-*/
-/* Clear the NegLon value by setting it to -INT_MAX. */
-astMAKE_CLEAR(SkyFrame,NegLon,neglon,-INT_MAX)
-
-/* Supply a default of 0 for absolute coords and 1 for offset coords if
- no NegLon value has been set. */
-astMAKE_GET(SkyFrame,NegLon,int,0,( ( this->neglon != -INT_MAX ) ?
-this->neglon : (( astGetSkyRefIs( this ) == ORIGIN_REF )? 1 : 0)))
-
-/* Set a NegLon value of 1 if any non-zero value is supplied. */
-astMAKE_SET(SkyFrame,NegLon,int,neglon,( value != 0 ))
-
-/* The NegLon value is set if it is not -INT_MAX. */
-astMAKE_TEST(SkyFrame,NegLon,( this->neglon != -INT_MAX ))
-
-/*
-*att++
-* Name:
-* Projection
-
-* Purpose:
-* Sky projection description.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute provides a place to store a description of the
-* type of sky projection used when a SkyFrame is attached to a
-* 2-dimensional object, such as an image or plotting surface. For
-* example, typical values might be "orthographic", "Hammer-Aitoff"
-* or "cylindrical equal area".
-*
-* The Projection value is purely descriptive and does not affect
-* the celestial coordinate system represented by the SkyFrame in
-* any way. If it is set to a non-blank string, the description
-* provided may be used when forming the default value for the
-* SkyFrame's Title attribute (so that typically it will appear in
-* graphical output, for instance). The default value is an empty
-* string.
-
-* Applicability:
-* SkyFrame
-* All SkyFrames have this attribute.
-*att--
-*/
-/* Clear the Projection value by freeing the allocated memory and
- assigning a NULL pointer. */
-astMAKE_CLEAR(SkyFrame,Projection,projection,astFree( this->projection ))
-
-/* If the Projection value is not set, return a pointer to an empty
- string. */
-astMAKE_GET(SkyFrame,Projection,const char *,NULL,( this->projection ?
- this->projection : "" ))
-
-/* Set a Projection value by freeing any previously allocated memory,
- allocating new memory, storing the string and saving the pointer to
- the copy. */
-astMAKE_SET(SkyFrame,Projection,const char *,projection,astStore(
- this->projection, value, strlen( value ) + (size_t) 1 ))
-
-/* The Projection value is set if the pointer to it is not NULL. */
-astMAKE_TEST(SkyFrame,Projection,( this->projection != NULL ))
-
-/*
-*att++
-* Name:
-* SkyRefIs
-
-* Purpose:
-* Selects the nature of the offset coordinate system.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute controls how the values supplied for the SkyRef and
-* SkyRefP attributes are used. These three attributes together allow
-* a SkyFrame to represent offsets relative to some specified origin
-* or pole within the coordinate system specified by the System attribute,
-* rather than absolute axis values. SkyRefIs can take one of the
-* case-insensitive values "Origin", "Pole" or "Ignored".
-*
-* If SkyRefIs is set to "Origin", then the coordinate system
-* represented by the SkyFrame is modified to put the origin of longitude
-* and latitude at the position specified by the SkyRef attribute.
-*
-* If SkyRefIs is set to "Pole", then the coordinate system represented
-* by the SkyFrame is modified to put the north pole at the position
-* specified by the SkyRef attribute.
-*
-* If SkyRefIs is set to "Ignored" (the default), then any value set for the
-* SkyRef attribute is ignored, and the SkyFrame represents the coordinate
-* system specified by the System attribute directly without any rotation.
-
-* Applicability:
-* SkyFrame
-* All SkyFrames have this attribute.
-
-*att--
-*/
-astMAKE_CLEAR(SkyFrame,SkyRefIs,skyrefis,BAD_REF)
-astMAKE_SET(SkyFrame,SkyRefIs,int,skyrefis,value)
-astMAKE_TEST(SkyFrame,SkyRefIs,( this->skyrefis != BAD_REF ))
-astMAKE_GET(SkyFrame,SkyRefIs,int,IGNORED_REF,(this->skyrefis == BAD_REF ? IGNORED_REF : this->skyrefis))
-
-/*
-*att++
-* Name:
-* SkyRef(axis)
-
-* Purpose:
-* Position defining the offset coordinate system.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute allows a SkyFrame to represent offsets, rather than
-* absolute axis values, within the coordinate system specified by the
-* System attribute. If supplied, SkyRef should be set to hold the
-* longitude and latitude of a point within the coordinate system
-* specified by the System attribute. The coordinate system represented
-* by the SkyFrame will then be rotated in order to put the specified
-* position at either the pole or the origin of the new coordinate system
-* (as indicated by the SkyRefIs attribute). The orientation of the
-* modified coordinate system is then controlled using the SkyRefP
-* attribute.
-*
-* If an integer axis index is included in the attribute name (e.g.
-* "SkyRef(1)") then the attribute value should be supplied as a single
-* floating point axis value, in radians, when setting a value for the
-* attribute, and will be returned in the same form when getting the value
-* of the attribute. In this case the integer axis index should be "1"
-* or "2" (the values to use for longitude and latitue axes are
-* given by the LonAxis and LatAxis attributes).
-*
-* If no axis index is included in the attribute name (e.g. "SkyRef") then
-* the attribute value should be supplied as a character string
-* containing two formatted axis values (an axis 1 value followed by a
-* comma, followed by an axis 2 value). The same form
-* will be used when getting the value of the attribute.
-*
-* The default values for SkyRef are zero longitude and zero latitude.
-
-* Aligning SkyFrames with Offset Coordinate Systems:
-* The offset coordinate system within a SkyFrame should normally be
-* considered as a superficial "re-badging" of the axes of the coordinate
-* system specified by the System attribute - it merely provides an
-* alternative numerical "label" for each position in the System coordinate
-* system. The SkyFrame retains full knowledge of the celestial coordinate
-* system on which the offset coordinate system is based (given by the
-* System attribute). For instance, the SkyFrame retains knowledge of the
-* way that one celestial coordinate system may "drift" with respect to
-* another over time. Normally, if you attempt to align two SkyFrames (e.g.
-f using the AST_CONVERT or AST_FINDFRAME routine),
-c using the astConvert or astFindFrame routine),
-* the effect of any offset coordinate system defined in either SkyFrame
-* will be removed, resulting in alignment being performed in the
-* celestial coordinate system given by the AlignSystem attribute.
-* However, by setting the AlignOffset attribute ot a non-zero value, it
-* is possible to change this behaviour so that the effect of the offset
-* coordinate system is not removed when aligning two SkyFrames.
-
-* Applicability:
-* SkyFrame
-* All SkyFrames have this attribute.
-
-* Notes:
-* - If the System attribute of the SkyFrame is changed, any position
-* given for SkyRef is transformed into the new System.
-* - If a value has been assigned to SkyRef attribute, then
-* the default values for certain attributes are changed as follows:
-* the default axis Labels for the SkyFrame are modified by appending
-* " offset" to the end, the default axis Symbols for the SkyFrame are
-* modified by prepending the character "D" to the start, and the
-* default title is modified by replacing the projection information by the
-* origin information.
-
-*att--
-*/
-MAKE_CLEAR(SkyRef,skyref,AST__BAD,2)
-MAKE_SET(SkyRef,double,skyref,value,2)
-MAKE_TEST(SkyRef,( this->skyref[axis_p] != AST__BAD ),2)
-MAKE_GET(SkyRef,double,0.0,((this->skyref[axis_p]!=AST__BAD)?this->skyref[axis_p]:0.0),2)
-
-/*
-*att++
-* Name:
-* SkyRefP(axis)
-
-* Purpose:
-* Position on primary meridian of offset coordinate system.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute is used to control the orientation of the offset
-* coordinate system defined by attributes SkyRef and SkyRefIs. If used,
-* it should be set to hold the longitude and latitude of a point within
-* the coordinate system specified by the System attribute. The offset
-* coordinate system represented by the SkyFrame will then be rotated in
-* order to put the position supplied for SkyRefP on the zero longitude
-* meridian. This rotation is about an axis from the centre of the
-* celestial sphere to the point specified by the SkyRef attribute.
-* The default value for SkyRefP is usually the north pole (that is, a
-* latitude of +90 degrees in the coordinate system specified by the System
-* attribute). The exception to this is if the SkyRef attribute is
-* itself set to either the north or south pole. In these cases the
-* default for SkyRefP is the origin (that is, a (0,0) in the coordinate
-* system specified by the System attribute).
-*
-* If an integer axis index is included in the attribute name (e.g.
-* "SkyRefP(1)") then the attribute value should be supplied as a single
-* floating point axis value, in radians, when setting a value for the
-* attribute, and will be returned in the same form when getting the value
-* of the attribute. In this case the integer axis index should be "1"
-* or "2" (the values to use for longitude and latitue axes are
-* given by the LonAxis and LatAxis attributes).
-*
-* If no axis index is included in the attribute name (e.g. "SkyRefP") then
-* the attribute value should be supplied as a character string
-* containing two formatted axis values (an axis 1 value followed by a
-* comma, followed by an axis 2 value). The same form
-* will be used when getting the value of the attribute.
-
-* Applicability:
-* SkyFrame
-* All SkyFrames have this attribute.
-
-* Notes:
-* - If the position given by the SkyRef attribute defines the origin
-* of the offset coordinate system (that is, if the SkyRefIs attribute
-* is set to "origin"), then there will in general be two orientations
-* which will put the supplied SkyRefP position on the zero longitude
-* meridian. The orientation which is actually used is the one which
-* gives the SkyRefP position a positive latitude in the offset coordinate
-* system (the other possible orientation would give the SkyRefP position
-* a negative latitude).
-* - An error will be reported if an attempt is made to use a
-* SkyRefP value which is co-incident with SkyRef or with the point
-* diametrically opposite to SkyRef on the celestial sphere. The
-* reporting of this error is deferred until the SkyRef and SkyRefP
-* attribute values are used within a calculation.
-* - If the System attribute of the SkyFrame is changed, any position
-* given for SkyRefP is transformed into the new System.
-
-*att--
-*/
-MAKE_CLEAR(SkyRefP,skyrefp,AST__BAD,2)
-MAKE_SET(SkyRefP,double,skyrefp,value,2)
-MAKE_TEST(SkyRefP,( this->skyrefp[axis_p] != AST__BAD ),2)
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for SkyFrame objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for SkyFrame objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstSkyFrame *in; /* Pointer to input SkyFrame */
- AstSkyFrame *out; /* Pointer to output SkyFrame */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output SkyFrames. */
- in = (AstSkyFrame *) objin;
- out = (AstSkyFrame *) objout;
-
-/* For safety, first clear any references to the input memory from
- the output SkyFrame. */
- out->projection = NULL;
-
-/* If necessary, allocate memory in the output SkyFrame and store a
- copy of the input Projection string. */
- if ( in->projection ) out->projection = astStore( NULL, in->projection,
- strlen( in->projection ) + (size_t) 1 );
-
-/* If an error occurred, free any allocated memory. */
- if ( !astOK ) {
- out->projection = astFree( out->projection );
- }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for SkyFrame objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for SkyFrame objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstSkyFrame *this; /* Pointer to SkyFrame */
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) obj;
-
-/* Free the memory used for the Projection string if necessary. */
- this->projection = astFree( this->projection );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for SkyFrame objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the SkyFrame class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the SkyFrame whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstSkyFrame *this; /* Pointer to the SkyFrame structure */
- AstSystemType system; /* System attribute value */
- const char *sval; /* Pointer to string value */
- char buf[ 100 ]; /* Comment buffer */
- double dval; /* Double value */
- int bessyr; /* Use a Besselian year value ?*/
- int helpful; /* Helpful to display un-set value? */
- int ival; /* Integer value */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
- this = (AstSkyFrame *) this_object;
-
-/* Write out values representing the instance variables for the
- SkyFrame class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* Projection. */
-/* ----------- */
- set = TestProjection( this, status );
- sval = set ? GetProjection( this, status ) : astGetProjection( this );
- astWriteString( channel, "Proj", set, 0, sval,
- "Description of sky projection" );
-
-/* NegLon. */
-/* ------- */
- set = TestNegLon( this, status );
- ival = set ? GetNegLon( this, status ) : astGetNegLon( this );
- astWriteInt( channel, "NegLon", set, 0, ival,
- ival ? "Display negative longitude values" :
- "Display positive longitude values" );
-
-/* Equinox. */
-/* -------- */
- set = TestEquinox( this, status );
- dval = set ? GetEquinox( this, status ) : astGetEquinox( this );
-
-/* Decide whether the Equinox value is relevant to the current
- coordinate system. */
- system = astGetSystem( this );
- helpful = ( ( system == AST__FK4 ) ||
- ( system == AST__FK4_NO_E ) ||
- ( system == AST__FK5 ) ||
- ( system == AST__ECLIPTIC ) );
-
-/* Convert MJD to Besselian or Julian years, depending on the value. */
- bessyr = ( dval < palSlaEpj2d( 1984.0 ) );
- dval = bessyr ? palSlaEpb( dval ) : palSlaEpj( dval );
- astWriteDouble( channel, "Eqnox", set, helpful, dval,
- bessyr ? "Besselian epoch of mean equinox" :
- "Julian epoch of mean equinox" );
-
-/* SkyRefIs. */
-/* --------- */
- set = TestSkyRefIs( this, status );
- ival = set ? GetSkyRefIs( this, status ) : astGetSkyRefIs( this );
- if( ival == POLE_REF ) {
- astWriteString( channel, "SRefIs", set, 0, POLE_STRING,
- "Rotated to put pole at ref. pos." );
-
- } else if( ival == IGNORED_REF ) {
- astWriteString( channel, "SRefIs", set, 0, IGNORED_STRING,
- "Not rotated (ref. pos. is ignored)" );
-
- } else {
- astWriteString( channel, "SRefIs", set, 0, ORIGIN_STRING,
- "Rotated to put origin at ref. pos." );
- }
-
-/* SkyRef. */
-/* ------- */
- set = TestSkyRef( this, 0, status );
- dval = set ? GetSkyRef( this, 0, status ) : astGetSkyRef( this, 0 );
- sprintf( buf, "Ref. pos. %s %s", astGetSymbol( this, 0 ), astFormat( this, 0, dval ) );
- astWriteDouble( channel, "SRef1", set, 0, dval, buf );
-
- set = TestSkyRef( this, 1, status );
- dval = set ? GetSkyRef( this, 1, status ) : astGetSkyRef( this, 1 );
- sprintf( buf, "Ref. pos. %s %s", astGetSymbol( this, 1 ), astFormat( this, 1, dval ) );
- astWriteDouble( channel, "SRef2", set, 0, dval, buf );
-
-/* SkyRefP. */
-/* -------- */
- set = TestSkyRefP( this, 0, status );
- dval = set ? GetSkyRefP( this, 0, status ) : astGetSkyRefP( this, 0 );
- sprintf( buf, "Ref. north %s %s", astGetSymbol( this, 0 ), astFormat( this, 0, dval ) );
- astWriteDouble( channel, "SRefP1", set, 0, dval, buf );
-
- set = TestSkyRefP( this, 1, status );
- dval = set ? GetSkyRefP( this, 1, status ) : astGetSkyRefP( this, 1 );
- sprintf( buf, "Ref. north %s %s", astGetSymbol( this, 1 ), astFormat( this, 1, dval ) );
- astWriteDouble( channel, "SRefP2", set, 0, dval, buf );
-
-/* AlignOffset. */
-/* ------------ */
- set = TestAlignOffset( this, status );
- ival = set ? GetAlignOffset( this, status ) : astGetAlignOffset( this );
- astWriteInt( channel, "AlOff", set, 0, ival,
- ival ? "Align in offset coords" :
- "Align in system coords" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsASkyFrame and astCheckSkyFrame functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(SkyFrame,Frame)
-astMAKE_CHECK(SkyFrame)
-
-AstSkyFrame *astSkyFrame_( const char *options, int *status, ...) {
-/*
-*+
-* Name:
-* astSkyFrame
-
-* Purpose:
-* Create a SkyFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "skyframe.h"
-* AstSkyFrame *astSkyFrame( const char *options, int *status, ... )
-
-* Class Membership:
-* SkyFrame constructor.
-
-* Description:
-* This function creates a new SkyFrame and optionally initialises its
-* attributes.
-
-* Parameters:
-* options
-* Pointer to a null terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new SkyFrame. The syntax used is the same as for the
-* astSet method and may include "printf" format specifiers identified
-* by "%" symbols in the normal way.
-* status
-* Pointer to the inherited status variable.
-* ...
-* If the "options" string contains "%" format specifiers, then an
-* optional list of arguments may follow it in order to supply values to
-* be substituted for these specifiers. The rules for supplying these
-* are identical to those for the astSet method (and for the C "printf"
-* function).
-
-* Returned Value:
-* A pointer to the new SkyFrame.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-
-* Implementation Notes:
-* - This function implements the basic SkyFrame constructor which
-* is available via the protected interface to the SkyFrame class.
-* A public interface is provided by the astSkyFrameId_ function.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstSkyFrame *new; /* Pointer to new SkyFrame */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the SkyFrame, allocating memory and initialising the virtual
- function table as well if necessary. */
- new = astInitSkyFrame( NULL, sizeof( AstSkyFrame ), !class_init, &class_vtab,
- "SkyFrame" );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new SkyFrame's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new SkyFrame. */
- return new;
-}
-
-AstSkyFrame *astInitSkyFrame_( void *mem, size_t size, int init,
- AstSkyFrameVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitSkyFrame
-
-* Purpose:
-* Initialise a SkyFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "skyframe.h"
-* AstSkyFrame *astInitSkyFrame( void *mem, size_t size, int init,
-* AstFrameVtab *vtab, const char *name )
-
-* Class Membership:
-* SkyFrame initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new SkyFrame object. It allocates memory (if necessary) to accommodate
-* the SkyFrame plus any additional data associated with the derived class.
-* It then initialises a SkyFrame structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a SkyFrame at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the SkyFrame is to be created. This
-* must be of sufficient size to accommodate the SkyFrame data
-* (sizeof(SkyFrame)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the SkyFrame (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the SkyFrame
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the SkyFrame's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new SkyFrame.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-
-* Returned Value:
-* A pointer to the new SkyFrame.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstSkyAxis *ax; /* Pointer to SkyAxis object */
- AstSkyFrame *new; /* Pointer to the new SkyFrame */
- int axis; /* Loop counter for axes */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitSkyFrameVtab( vtab, name );
-
-/* Initialise a Frame structure (the parent class) as the first component
- within the SkyFrame structure, allocating memory if necessary. */
- new = (AstSkyFrame *) astInitFrame( mem, size, 0,
- (AstFrameVtab *) vtab, name, 2 );
-
- if ( astOK ) {
-
-/* Initialise the SkyFrame data. */
-/* ----------------------------- */
-/* Initialise all attributes to their "undefined" values. */
- new->equinox = AST__BAD;
- new->projection = NULL;
- new->neglon = -INT_MAX;
- new->alignoffset = -INT_MAX;
- new->skyrefis = BAD_REF;
- new->skyref[ 0 ] = AST__BAD;
- new->skyref[ 1 ] = AST__BAD;
- new->skyrefp[ 0 ] = AST__BAD;
- new->skyrefp[ 1 ] = AST__BAD;
- new->last = AST__BAD;
- new->eplast = AST__BAD;
- new->klast = AST__BAD;
- new->diurab = AST__BAD;
-
-/* Loop to replace the Axis object associated with each SkyFrame axis with
- a SkyAxis object instead. */
- for ( axis = 0; axis < 2; axis++ ) {
-
-/* Create the new SkyAxis, assign it to the required SkyFrame axis and then
- annul the SkyAxis pointer. */
- ax = astSkyAxis( "", status );
- astSetAxis( new, axis, ax );
- ax = astAnnul( ax );
- }
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstSkyFrame *astLoadSkyFrame_( void *mem, size_t size,
- AstSkyFrameVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadSkyFrame
-
-* Purpose:
-* Load a SkyFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "skyframe.h"
-* AstSkyFrame *astLoadSkyFrame( void *mem, size_t size,
-* AstSkyFrameVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* SkyFrame loader.
-
-* Description:
-* This function is provided to load a new SkyFrame using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* SkyFrame structure in this memory, using data read from the
-* input Channel.
-
-* Parameters:
-* mem
-* A pointer to the memory into which the SkyFrame is to be
-* loaded. This must be of sufficient size to accommodate the
-* SkyFrame data (sizeof(SkyFrame)) plus any data used by
-* derived classes. If a value of NULL is given, this function
-* will allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the SkyFrame (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the SkyFrame structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstSkyFrame) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new SkyFrame. If this is NULL, a pointer
-* to the (static) virtual function table for the SkyFrame class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "SkyFrame" is used instead.
-
-* Returned Value:
-* A pointer to the new SkyFrame.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstSkyFrame *new; /* Pointer to the new SkyFrame */
- char *sval; /* Pointer to string value */
- double dval; /* Floating point attribute value */
-
-/* Initialise. */
- new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this SkyFrame. In this case the
- SkyFrame belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstSkyFrame );
- vtab = &class_vtab;
- name = "SkyFrame";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitSkyFrameVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built SkyFrame. */
- new = astLoadFrame( mem, size, (AstFrameVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "SkyFrame" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* The attributes defining the offset coordinate system must be loaded
- before the System attrivbute, since SetSystem uses them. */
-
-/* AlignOffset */
-/* ----------- */
- new->alignoffset = astReadInt( channel, "aloff", -INT_MAX );
- if ( TestAlignOffset( new, status ) ) SetAlignOffset( new, new->alignoffset, status );
-
-/* SkyRefIs. */
-/* --------- */
- sval = astReadString( channel, "srefis", " " );
- if( sval ){
- new->skyrefis = BAD_REF;
- if( astChrMatch( sval, POLE_STRING ) ) {
- new->skyrefis = POLE_REF;
- } else if( astChrMatch( sval, ORIGIN_STRING ) ) {
- new->skyrefis = ORIGIN_REF;
- } else if( astChrMatch( sval, IGNORED_STRING ) ) {
- new->skyrefis = IGNORED_REF;
- } else if( !astChrMatch( sval, " " ) && astOK ){
- astError( AST__INTER, "astRead(SkyFrame): Corrupt SkyFrame contains "
- "invalid SkyRefIs attribute value (%s).", status, sval );
- }
- if( TestSkyRefIs( new, status ) ) SetSkyRefIs( new, new->skyrefis, status );
- sval = astFree( sval );
- }
-
-/* SkyRef. */
-/* ------- */
- new->skyref[ 0 ] = astReadDouble( channel, "sref1", AST__BAD );
- if ( TestSkyRef( new, 0, status ) ) SetSkyRef( new, 0, new->skyref[ 0 ], status );
-
- new->skyref[ 1 ] = astReadDouble( channel, "sref2", AST__BAD );
- if ( TestSkyRef( new, 1, status ) ) SetSkyRef( new, 1, new->skyref[ 1 ], status );
-
-/* SkyRefP. */
-/* -------- */
- new->skyrefp[ 0 ] = astReadDouble( channel, "srefp1", AST__BAD );
- if ( TestSkyRefP( new, 0, status ) ) SetSkyRefP( new, 0, new->skyrefp[ 0 ], status );
-
- new->skyrefp[ 1 ] = astReadDouble( channel, "srefp2", AST__BAD );
- if ( TestSkyRefP( new, 1, status ) ) SetSkyRefP( new, 1, new->skyrefp[ 1 ], status );
-
-
-/* System. */
-/* ------- */
-/* The System attribute is now part of the Frame class, but this code is
- retained to allow this version of AST to read SkyFrames dumped by
- previous versions. */
-
-/* Check a value has not already been assigned to the Frames System
- attribute. */
- if( !astTestSystem( new ) ){
-
-/* Read the external representation as a string. */
- sval = astReadString( channel, "system", NULL );
-
-/* If a value was read, use the SetAttrib method to validate and store the
- new value in the correct place, then free the string. */
- if ( sval ) {
- astSet( new, "System=%s", status, sval);
- sval = astFree( sval );
- }
- }
-
-/* Epoch. */
-/* ------ */
-/* The Epoch attribute is now part of the Frame class, but this code is
- retained to allow this version of AST to read SkyFrames dumped by
- previous versions. */
-
-/* Check a value has not already been assigned to the Frames Epoch
- attribute. */
- if( !astTestEpoch( new ) ){
-
-/* Get the value. */
- dval = astReadDouble( channel, "epoch", AST__BAD );
-
-/* If a value was read, use the SetAttrib method to validate and store the
- new value in the correct place. */
- if( dval != AST__BAD ) {
- if( dval < 1984.0 ) {
- astSet( new, "Epoch=B%.*g", status, DBL_DIG, dval);
- } else {
- astSet( new, "Epoch=J%.*g", status, DBL_DIG, dval);
- }
- }
- }
-
-/* Projection. */
-/* ----------- */
- new->projection = astReadString( channel, "proj", NULL );
-
-/* Equinox. */
-/* -------- */
-/* Interpret this as Besselian or Julian depending on its value. */
- new->equinox = astReadDouble( channel, "eqnox", AST__BAD );
- if ( TestEquinox( new, status ) ) {
- SetEquinox( new, ( new->equinox < 1984.0 ) ? palSlaEpb2d( new->equinox ) :
- palSlaEpj2d( new->equinox ), status );
- }
-
-/* NegLon. */
-/* ------- */
- new->neglon = astReadInt( channel, "neglon", -INT_MAX );
- if ( TestNegLon( new, status ) ) SetNegLon( new, new->neglon, status );
-
-/* Other values */
-/* ------------ */
- new->last = AST__BAD;
- new->eplast = AST__BAD;
- new->klast = AST__BAD;
- new->diurab = AST__BAD;
-
-/* If an error occurred, clean up by deleting the new SkyFrame. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new SkyFrame pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-void astClearAsTime_( AstSkyFrame *this, int axis, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,SkyFrame,ClearAsTime))( this, axis, status );
-}
-int astGetAsTime_( AstSkyFrame *this, int axis, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,SkyFrame,GetAsTime))( this, axis, status );
-}
-void astSetAsTime_( AstSkyFrame *this, int axis, int value, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,SkyFrame,SetAsTime))( this, axis, value, status );
-}
-int astTestAsTime_( AstSkyFrame *this, int axis, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,SkyFrame,TestAsTime))( this, axis, status );
-}
-int astGetLatAxis_( AstSkyFrame *this, int *status ) {
- if ( !astOK ) return 1;
- return (**astMEMBER(this,SkyFrame,GetLatAxis))( this, status );
-}
-int astGetLonAxis_( AstSkyFrame *this, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,SkyFrame,GetLonAxis))( this, status );
-}
-double astGetSkyRefP_( AstSkyFrame *this, int axis, int *status ) {
- if ( !astOK ) return 0.0;
- return (**astMEMBER(this,SkyFrame,GetSkyRefP))( this, axis, status );
-}
-
-/* Special public interface functions. */
-/* =================================== */
-/* These provide the public interface to certain special functions
- whose public interface cannot be handled using macros (such as
- astINVOKE) alone. In general, they are named after the
- corresponding protected version of the function, but with "Id"
- appended to the name. */
-
-/* Public Interface Function Prototypes. */
-/* ------------------------------------- */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstSkyFrame *astSkyFrameId_( const char *, ... );
-
-/* Special interface function implementations. */
-/* ------------------------------------------- */
-AstSkyFrame *astSkyFrameId_( const char *options, ... ) {
-/*
-*++
-* Name:
-c astSkyFrame
-f AST_SKYFRAME
-
-* Purpose:
-* Create a SkyFrame.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "skyframe.h"
-c AstSkyFrame *astSkyFrame( const char *options, ... )
-f RESULT = AST_SKYFRAME( OPTIONS, STATUS )
-
-* Class Membership:
-* SkyFrame constructor.
-
-* Description:
-* This function creates a new SkyFrame and optionally initialises
-* its attributes.
-*
-* A SkyFrame is a specialised form of Frame which describes
-* celestial longitude/latitude coordinate systems. The particular
-* celestial coordinate system to be represented is specified by
-* setting the SkyFrame's System attribute (currently, the default
-* is ICRS) qualified, as necessary, by a mean Equinox value and/or
-* an Epoch.
-*
-* For each of the supported celestial coordinate systems, a SkyFrame
-* can apply an optional shift of origin to create a coordinate system
-* representing offsets within the celestial coordinate system from some
-* specified point. This offset coordinate system can also be rotated to
-* define new longitude and latitude axes. See attributes SkyRef, SkyRefIs
-* and SkyRefP
-*
-* All the coordinate values used by a SkyFrame are in
-* radians. These may be formatted in more conventional ways for
-c display by using astFormat.
-f display by using AST_FORMAT.
-
-* Parameters:
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new SkyFrame. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-c If no initialisation is required, a zero-length string may be
-c supplied.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new SkyFrame. The syntax used is identical to that for the
-f AST_SET routine. If no initialisation is required, a blank
-f value may be supplied.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astSkyFrame()
-f AST_SKYFRAME = INTEGER
-* A pointer to the new SkyFrame.
-
-* Examples:
-c frame = astSkyFrame( "" );
-c Creates a SkyFrame to describe the default ICRS celestial
-c coordinate system.
-c frame = astSkyFrame( "System = FK5, Equinox = J2005, Digits = 10" );
-c Creates a SkyFrame to describe the FK5 celestial
-c coordinate system, with a mean Equinox of J2005.0.
-c Because especially accurate coordinates will be used,
-c additional precision (10 digits) has been requested. This will
-c be used when coordinate values are formatted for display.
-c frame = astSkyFrame( "System = FK4, Equinox = 1955-sep-2" );
-c Creates a SkyFrame to describe the old FK4 celestial
-c coordinate system. A default Epoch value (B1950.0) is used,
-c but the mean Equinox value is given explicitly as "1955-sep-2".
-c frame = astSkyFrame( "System = GAPPT, Epoch = %s", date );
-c Creates a SkyFrame to describe the Geocentric Apparent
-c celestial coordinate system. The Epoch value, which specifies
-c the date of observation, is obtained from a date/time string
-c supplied via the string pointer "date".
-f FRAME = AST_SKYFRAME( ' ', STATUS )
-f Creates a SkyFrame to describe the default ICRS celestial
-f coordinate system.
-f FRAME = AST_SKYFRAME( 'System = FK5, Equinox = J2005, Digits = 10', STATUS )
-f Creates a SkyFrame to describe the FK5 celestial
-f coordinate system, with a mean Equinox of J2005.0.
-f Because especially accurate coordinates will be used,
-f additional precision (10 digits) has been requested. This will
-f be used when coordinate values are formatted for display.
-f FRAME = AST_SKYFRAME( 'System = FK4, Equinox = 1955-SEP-2', STATUS )
-f Creates a SkyFrame to describe the old FK4 celestial
-f coordinate system. A default Epoch value (B1950.0) is used,
-f but the mean Equinox value is given explicitly as "1955-SEP-2".
-f FRAME = AST_SKYFRAME( 'System = GAPPT, Epoch = ' // DATE, STATUS )
-f Creates a SkyFrame to describe the Geocentric Apparent
-f celestial coordinate system. The Epoch value, which specifies
-f the date of observation, is obtained from a date/time string
-f contained in the character variable DATE.
-
-* Notes:
-* - Currently, the default celestial coordinate system is
-* ICRS. However, this default may change in future as new
-* astrometric standards evolve. The intention is to track the most
-* modern appropriate standard. For this reason, you should use the
-* default only if this is what you intend (and can tolerate any
-* associated slight change in behaviour with future versions of
-* this function). If you intend to use the ICRS system
-* indefinitely, then you should specify it explicitly using an
-c "options" value of "System=ICRS".
-f OPTIONS value of "System=ICRS".
-* - Whichever celestial coordinate system is represented, it will
-* have two axes. The first of these will be the longitude axis
-* and the second will be the latitude axis. This order can be
-c changed using astPermAxes if required.
-f changed using AST_PERMAXES if required.
-* - When conversion between two SkyFrames is requested (as when
-c supplying SkyFrames to astConvert),
-f supplying SkyFrames AST_CONVERT),
-* account will be taken of the nature of the celestial coordinate
-* systems they represent, together with any qualifying mean Equinox or
-* Epoch values, etc. The AlignSystem attribute will also be taken into
-* account. The results will therefore fully reflect the
-* relationship between positions on the sky measured in the two
-* systems.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-
-* Implementation Notes:
-* - This function implements the external (public) interface to
-* the astSkyFrame constructor function. It returns an ID value
-* (instead of a true C pointer) to external users, and must be
-* provided because astSkyFrame_ has a variable argument list which
-* cannot be encapsulated in a macro (where this conversion would
-* otherwise occur).
-* - The variable argument list also prevents this function from
-* invoking astSkyFrame_ directly, so it must be a
-* re-implementation of it in all respects, except for the final
-* conversion of the result to an ID value.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstSkyFrame *new; /* Pointer to new SkyFrame */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the SkyFrame, allocating memory and initialising the virtual
- function table as well if necessary. */
- new = astInitSkyFrame( NULL, sizeof( AstSkyFrame ), !class_init, &class_vtab,
- "SkyFrame" );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new SkyFrame's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new SkyFrame. */
- return astMakeId( new );
-}
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/skyframe.h b/ast-5.3-1/skyframe.h
deleted file mode 100644
index c54474f..0000000
--- a/ast-5.3-1/skyframe.h
+++ /dev/null
@@ -1,476 +0,0 @@
-#if !defined( SKYFRAME_INCLUDED ) /* Include this file only once */
-#define SKYFRAME_INCLUDED
-/*
-*+
-* Name:
-* skyframe.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the SkyFrame class.
-
-* Invocation:
-* #include "skyframe.h"
-
-* Description:
-* This include file defines the interface to the SkyFrame class
-* and provides the type definitions, function prototypes and
-* macros, etc. needed to use this class.
-
-* Inheritance:
-* The SkyFrame class inherits from the Frame class.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstSkyFrame
-* SkyFrame object type.
-
-* Protected:
-* AstSkyFrameVtab
-* SkyFrame virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 4-MAR-1996 (RFWS):
-* Original version.
-* 24-MAY-1996 (RFWS):
-* Tidied up, etc.
-* 24-SEP-1996 (RFWS):
-* Added I/O facilities.
-* 16-JUL-1997 (RFWS):
-* Added Projection attribute.
-* 26-FEB-1998 (RFWS):
-* Over-ride the astUnformat method.
-* 3-APR-2001 (DSB):
-* Added "Unknown" option for the System attribute. Added read-only
-* attributes LatAxis and LonAxis.
-* 10-OCT-2002 (DSB):
-* Moved definitions of macros for SkyFrame system values into
-* this file from skyframe.c.
-* 15-NOV-2002 (DSB):
-* Move the System attribute from this class to the parent (Frame)
-* class.
-* 8-JAN-2003 (DSB):
-* Added protected astInitSkyFrameVtab method.
-* 19-APR-2004 (DSB):
-* Added SkyRef, SkyRefIs, SkyRefP and AlignOffset attributes.
-* Simplified prologue.
-* 2-DEC-2004 (DSB):
-* Added System "J2000"
-* 22-FEB-2006 (DSB):
-* Added Local Apparent Sidereal Time to the SkyFrame structure.
-* 3-OCT-2006 (DSB):
-* Added Equation of Equinoxes to the SkyFrame structure.
-* 6-OCT-2006 (DSB):
-* Removed Equation of Equinoxes from the SkyFrame structure.
-* Added dut1 to the SkyFrame structure.
-* Added Dut1 accessor methods.
-* 14-OCT-2006 (DSB):
-* Moved dut1 to the Frame class.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h" /* Base Object class */
-#include "frame.h" /* Parent Frame class */
-
-/* Macros. */
-/* ======= */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Values used to represent different System attribute values. */
-#define AST__FK4 1
-#define AST__FK4_NO_E 2
-#define AST__FK5 3
-#define AST__GAPPT 4
-#define AST__ECLIPTIC 5
-#define AST__GALACTIC 6
-#define AST__SUPERGALACTIC 7
-#define AST__ICRS 8
-#define AST__HELIOECLIPTIC 9
-#define AST__J2000 10
-#define AST__UNKNOWN 11
-#define AST__AZEL 12
-
-/* Define constants used to size global arrays in this module. */
-/* Define other numerical constants for use in this module. */
-#define AST__SKYFRAME_GETATTRIB_BUFF_LEN 200
-#define AST__SKYFRAME_GETFORMAT_BUFF_LEN 50
-#define AST__SKYFRAME_GETLABEL_BUFF_LEN 40
-#define AST__SKYFRAME_GETSYMBOL_BUFF_LEN 20
-#define AST__SKYFRAME_GETTITLE_BUFF_LEN 200
-
-#endif
-
-/* Type Definitions. */
-/* ================= */
-
-/* Cached LAST look-up table. */
-/* -------------------------- */
-/* Holds a list of epoch values and the corresponding Local Apparent
- Sidereal Time values. Also holds the observatory position and DUT1
- value used when calculating the LAST values. */
-typedef struct AstSkyLastTable {
- double obslat; /* ObsLat at which LAST values were calculated */
- double obslon; /* ObsLon at which LAST values were calculated */
- double obsalt; /* ObsAlt at which LAST values were calculated */
- double dut1; /* Dut1 values at which LAST values were calculated */
- int nentry; /* Number of entries in the epoch and last arrays */
- double *epoch; /* Array of epoch values */
- double *last; /* Array of LAST values */
-} AstSkyLastTable;
-
-/* SkyFrame structure. */
-/* ------------------- */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstSkyFrame {
-
-/* Attributes inherited from the parent class. */
- AstFrame frame; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- char *projection; /* Description of sky projection */
- double equinox; /* Modified Julian Date of mean equinox */
- int neglon; /* Display negative longitude values? */
- int alignoffset; /* Align SkyFrame in offset coords? */
- int skyrefis; /* Nature of offset coord system */
- double skyref[ 2 ]; /* Origin or pole of offset coord system */
- double skyrefp[ 2 ]; /* Point on primary meridian of offset coord system */
- double last; /* Local Apparent Sidereal Time */
- double eplast; /* Epoch used to calculate "last" */
- double klast; /* Ratio of solar to sidereal time */
- double diurab; /* Magnitude of diurnal aberration vector */
-} AstSkyFrame;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all objects in the
- class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstSkyFrameVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstFrameVtab frame_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- const char *(* GetProjection)( AstSkyFrame *, int * );
- double (* GetEquinox)( AstSkyFrame *, int * );
- int (* GetNegLon)( AstSkyFrame *, int * );
- int (* GetAsTime)( AstSkyFrame *, int, int * );
- int (* GetLatAxis)( AstSkyFrame *, int * );
- int (* GetLonAxis)( AstSkyFrame *, int * );
- int (* TestAsTime)( AstSkyFrame *, int, int * );
- int (* TestEquinox)( AstSkyFrame *, int * );
- int (* TestNegLon)( AstSkyFrame *, int * );
- int (* TestProjection)( AstSkyFrame *, int * );
- void (* ClearAsTime)( AstSkyFrame *, int, int * );
- void (* ClearEquinox)( AstSkyFrame *, int * );
- void (* ClearNegLon)( AstSkyFrame *, int * );
- void (* ClearProjection)( AstSkyFrame *, int * );
- void (* SetAsTime)( AstSkyFrame *, int, int, int * );
- void (* SetEquinox)( AstSkyFrame *, double, int * );
- void (* SetNegLon)( AstSkyFrame *, int, int * );
- void (* SetProjection)( AstSkyFrame *, const char *, int * );
-
- int (* GetSkyRefIs)( AstSkyFrame *, int * );
- int (* TestSkyRefIs)( AstSkyFrame *, int * );
- void (* ClearSkyRefIs)( AstSkyFrame *, int * );
- void (* SetSkyRefIs)( AstSkyFrame *, int, int * );
-
- double (* GetSkyRef)( AstSkyFrame *, int, int * );
- int (* TestSkyRef)( AstSkyFrame *, int, int * );
- void (* ClearSkyRef)( AstSkyFrame *, int, int * );
- void (* SetSkyRef)( AstSkyFrame *, int, double, int * );
-
- double (* GetSkyRefP)( AstSkyFrame *, int, int * );
- int (* TestSkyRefP)( AstSkyFrame *, int, int * );
- void (* ClearSkyRefP)( AstSkyFrame *, int, int * );
- void (* SetSkyRefP)( AstSkyFrame *, int, double, int * );
-
- int (* GetAlignOffset)( AstSkyFrame *, int * );
- int (* TestAlignOffset)( AstSkyFrame *, int * );
- void (* ClearAlignOffset)( AstSkyFrame *, int * );
- void (* SetAlignOffset)( AstSkyFrame *, int, int * );
-
-/* Local Apparent Sidereal Time look-up tables. */
- int nlast_tables;
- AstSkyLastTable **last_tables;
-
-} AstSkyFrameVtab;
-
-#if defined(THREAD_SAFE)
-
-/* The AstSkyFrameGlobals structure makes a forward reference to the
- AstTimeFrame structure which is not defined here (since the
- timeframe.h file includes skyframe.h). Hence make a preliminary
- definition available now. */
-struct AstTimeFrame;
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstSkyFrameGlobals {
- AstSkyFrameVtab Class_Vtab;
- int Class_Init;
- char GetAttrib_Buff[ AST__SKYFRAME_GETATTRIB_BUFF_LEN + 1 ];
- char GetFormat_Buff[ AST__SKYFRAME_GETFORMAT_BUFF_LEN + 1 ];
- char GetLabel_Buff[ AST__SKYFRAME_GETLABEL_BUFF_LEN + 1 ];
- char GetSymbol_Buff[ AST__SKYFRAME_GETSYMBOL_BUFF_LEN + 1 ];
- char GetTitle_Buff[ AST__SKYFRAME_GETTITLE_BUFF_LEN + 1 ];
- char GetTitle_Buff2[ AST__SKYFRAME_GETTITLE_BUFF_LEN + 1 ];
- struct AstTimeFrame *TDBFrame;
- struct AstTimeFrame *LASTFrame;
-} AstSkyFrameGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(SkyFrame) /* Check class membership */
-astPROTO_ISA(SkyFrame) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected */
-AstSkyFrame *astSkyFrame_( const char *, int *, ...);
-#else
-AstSkyFrame *astSkyFrameId_( const char *, ... )__attribute__((format(printf,1,2)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstSkyFrame *astInitSkyFrame_( void *, size_t, int, AstSkyFrameVtab *,
- const char *, int * );
-
-/* Vtab initialiser. */
-void astInitSkyFrameVtab_( AstSkyFrameVtab *, const char *, int * );
-
-/* Loader. */
-AstSkyFrame *astLoadSkyFrame_( void *, size_t, AstSkyFrameVtab *,
- const char *, AstChannel *channel, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitSkyFrameGlobals_( AstSkyFrameGlobals * );
-#endif
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-#if defined(astCLASS) /* Protected */
-const char *astGetProjection_( AstSkyFrame *, int * );
-double astGetEquinox_( AstSkyFrame *, int * );
-int astGetNegLon_( AstSkyFrame *, int * );
-int astGetAsTime_( AstSkyFrame *, int, int * );
-int astGetLatAxis_( AstSkyFrame *, int * );
-int astGetLonAxis_( AstSkyFrame *, int * );
-int astTestAsTime_( AstSkyFrame *, int, int * );
-int astTestEquinox_( AstSkyFrame *, int * );
-int astTestNegLon_( AstSkyFrame *, int * );
-int astTestProjection_( AstSkyFrame *, int * );
-void astClearAsTime_( AstSkyFrame *, int, int * );
-void astClearEquinox_( AstSkyFrame *, int * );
-void astClearNegLon_( AstSkyFrame *, int * );
-void astClearProjection_( AstSkyFrame *, int * );
-void astSetAsTime_( AstSkyFrame *, int, int, int * );
-void astSetEquinox_( AstSkyFrame *, double, int * );
-void astSetNegLon_( AstSkyFrame *, int, int * );
-void astSetProjection_( AstSkyFrame *, const char *, int * );
-
-int astGetAlignOffset_( AstSkyFrame *, int * );
-int astTestAlignOffset_( AstSkyFrame *, int * );
-void astClearAlignOffset_( AstSkyFrame *, int * );
-void astSetAlignOffset_( AstSkyFrame *, int, int * );
-
-int astGetSkyRefIs_( AstSkyFrame *, int * );
-int astTestSkyRefIs_( AstSkyFrame *, int * );
-void astClearSkyRefIs_( AstSkyFrame *, int * );
-void astSetSkyRefIs_( AstSkyFrame *, int, int * );
-
-double astGetSkyRef_( AstSkyFrame *, int, int * );
-int astTestSkyRef_( AstSkyFrame *, int, int * );
-void astClearSkyRef_( AstSkyFrame *, int, int * );
-void astSetSkyRef_( AstSkyFrame *, int, double, int * );
-
-double astGetSkyRefP_( AstSkyFrame *, int, int * );
-int astTestSkyRefP_( AstSkyFrame *, int, int * );
-void astClearSkyRefP_( AstSkyFrame *, int, int * );
-void astSetSkyRefP_( AstSkyFrame *, int, double, int * );
-
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckSkyFrame(this) astINVOKE_CHECK(SkyFrame,this,0)
-#define astVerifySkyFrame(this) astINVOKE_CHECK(SkyFrame,this,1)
-
-/* Test class membership. */
-#define astIsASkyFrame(this) astINVOKE_ISA(SkyFrame,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected */
-#define astSkyFrame astINVOKE(F,astSkyFrame_)
-#else
-#define astSkyFrame astINVOKE(F,astSkyFrameId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitSkyFrame(mem,size,init,vtab,name) \
-astINVOKE(O,astInitSkyFrame_(mem,size,init,vtab,name,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitSkyFrameVtab(vtab,name) astINVOKE(V,astInitSkyFrameVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadSkyFrame(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadSkyFrame_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-
-/* None. */
-
-/* Interfaces to protected member functions. */
-/* ----------------------------------------- */
-/* Here we make use of astCheckSkyFrame to validate SkyFrame pointers
- before use. This provides a contextual error report if a pointer to
- the wrong sort of object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-#define astClearAsTime(this,axis) \
-astINVOKE(V,astClearAsTime_(astCheckSkyFrame(this),axis,STATUS_PTR))
-#define astClearEquinox(this) \
-astINVOKE(V,astClearEquinox_(astCheckSkyFrame(this),STATUS_PTR))
-#define astClearNegLon(this) \
-astINVOKE(V,astClearNegLon_(astCheckSkyFrame(this),STATUS_PTR))
-#define astClearProjection(this) \
-astINVOKE(V,astClearProjection_(astCheckSkyFrame(this),STATUS_PTR))
-#define astGetAsTime(this,axis) \
-astINVOKE(V,astGetAsTime_(astCheckSkyFrame(this),axis,STATUS_PTR))
-#define astGetEquinox(this) \
-astINVOKE(V,astGetEquinox_(astCheckSkyFrame(this),STATUS_PTR))
-#define astGetNegLon(this) \
-astINVOKE(V,astGetNegLon_(astCheckSkyFrame(this),STATUS_PTR))
-#define astGetLatAxis(this) \
-astINVOKE(V,astGetLatAxis_(astCheckSkyFrame(this),STATUS_PTR))
-#define astGetLonAxis(this) \
-astINVOKE(V,astGetLonAxis_(astCheckSkyFrame(this),STATUS_PTR))
-#define astGetProjection(this) \
-astINVOKE(V,astGetProjection_(astCheckSkyFrame(this),STATUS_PTR))
-#define astSetAsTime(this,axis,value) \
-astINVOKE(V,astSetAsTime_(astCheckSkyFrame(this),axis,value,STATUS_PTR))
-#define astSetEquinox(this,value) \
-astINVOKE(V,astSetEquinox_(astCheckSkyFrame(this),value,STATUS_PTR))
-#define astSetNegLon(this,value) \
-astINVOKE(V,astSetNegLon_(astCheckSkyFrame(this),value,STATUS_PTR))
-#define astSetProjection(this,value) \
-astINVOKE(V,astSetProjection_(astCheckSkyFrame(this),value,STATUS_PTR))
-#define astTestAsTime(this,axis) \
-astINVOKE(V,astTestAsTime_(astCheckSkyFrame(this),axis,STATUS_PTR))
-#define astTestEquinox(this) \
-astINVOKE(V,astTestEquinox_(astCheckSkyFrame(this),STATUS_PTR))
-#define astTestNegLon(this) \
-astINVOKE(V,astTestNegLon_(astCheckSkyFrame(this),STATUS_PTR))
-#define astTestProjection(this) \
-astINVOKE(V,astTestProjection_(astCheckSkyFrame(this),STATUS_PTR))
-
-#define astClearAlignOffset(this) astINVOKE(V,astClearAlignOffset_(astCheckSkyFrame(this),STATUS_PTR))
-#define astGetAlignOffset(this) astINVOKE(V,astGetAlignOffset_(astCheckSkyFrame(this),STATUS_PTR))
-#define astSetAlignOffset(this,value) astINVOKE(V,astSetAlignOffset_(astCheckSkyFrame(this),value,STATUS_PTR))
-#define astTestAlignOffset(this) astINVOKE(V,astTestAlignOffset_(astCheckSkyFrame(this),STATUS_PTR))
-
-#define astClearSkyRefIs(this) astINVOKE(V,astClearSkyRefIs_(astCheckSkyFrame(this),STATUS_PTR))
-#define astGetSkyRefIs(this) astINVOKE(V,astGetSkyRefIs_(astCheckSkyFrame(this),STATUS_PTR))
-#define astSetSkyRefIs(this,value) astINVOKE(V,astSetSkyRefIs_(astCheckSkyFrame(this),value,STATUS_PTR))
-#define astTestSkyRefIs(this) astINVOKE(V,astTestSkyRefIs_(astCheckSkyFrame(this),STATUS_PTR))
-
-#define astClearSkyRef(this,axis) astINVOKE(V,astClearSkyRef_(astCheckSkyFrame(this),axis,STATUS_PTR))
-#define astGetSkyRef(this,axis) astINVOKE(V,astGetSkyRef_(astCheckSkyFrame(this),axis,STATUS_PTR))
-#define astSetSkyRef(this,axis,value) astINVOKE(V,astSetSkyRef_(astCheckSkyFrame(this),axis,value,STATUS_PTR))
-#define astTestSkyRef(this,axis) astINVOKE(V,astTestSkyRef_(astCheckSkyFrame(this),axis,STATUS_PTR))
-
-#define astClearSkyRefP(this,axis) astINVOKE(V,astClearSkyRefP_(astCheckSkyFrame(this),axis,STATUS_PTR))
-#define astGetSkyRefP(this,axis) astINVOKE(V,astGetSkyRefP_(astCheckSkyFrame(this),axis,STATUS_PTR))
-#define astSetSkyRefP(this,axis,value) astINVOKE(V,astSetSkyRefP_(astCheckSkyFrame(this),axis,value,STATUS_PTR))
-#define astTestSkyRefP(this,axis) astINVOKE(V,astTestSkyRefP_(astCheckSkyFrame(this),axis,STATUS_PTR))
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/slamac.h b/ast-5.3-1/slamac.h
deleted file mode 100644
index 05aa654..0000000
--- a/ast-5.3-1/slamac.h
+++ /dev/null
@@ -1,110 +0,0 @@
-#ifndef SLAMACHDEF
-#define SLAMACHDEF
-/*
-** Author:
-** Patrick Wallace (ptw at tpsoft.demon.co.uk)
-**
-** License:
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-** USA.
-**
-** Last revision: 16 October 2000
-*/
-
-/* max(A,B) - larger (most +ve) of two numbers (generic) */
-#define gmax(A,B) ((A)>(B)?(A):(B))
-
-/* min(A,B) - smaller (least +ve) of two numbers (generic) */
-#define gmin(A,B) ((A)<(B)?(A):(B))
-
-/* dint(A) - truncate to nearest whole number towards zero (double) */
-#define dint(A) ((A)<0.0?ceil(A):floor(A))
-
-/* aint(A) - truncate to nearest whole number towards zero (float) */
-#define aint(A) ((A)<0.0f?(float)ceil((double)(A)):(float)floor((double)(A)))
-
-/* dnint(A) - round to nearest whole number (double) */
-#define dnint(A) ((A)<0.0?ceil((A)-0.5):floor((A)+0.5))
-
-/* anint(A) - round to nearest whole number (float) */
-#define anint(A) ((float)dnint((double)(A)))
-
-/* dsign(A,B) - magnitude of A with sign of B (double) */
-#define dsign(A,B) ((B)<0.0?-(A):(A))
-
-/* dmod(A,B) - A modulo B (double) */
-#define dmod(A,B) ((B)!=0.0?((A)*(B)>0.0?(A)-(B)*floor((A)/(B))\
- :(A)+(B)*floor(-(A)/(B))):(A))
-
-/* logicals */
-#if !defined(FALSE) || ((FALSE)!=0)
-#define FALSE 0
-#endif
-#if !defined(TRUE) || ((TRUE)!=1)
-#define TRUE 1
-#endif
-
-/* pi */
-#define DPI 3.1415926535897932384626433832795028841971693993751
-
-/* 2pi */
-#define D2PI 6.2831853071795864769252867665590057683943387987502
-
-/* 1/(2pi) */
-#define D1B2PI 0.15915494309189533576888376337251436203445964574046
-
-/* 4pi */
-#define D4PI 12.566370614359172953850573533118011536788677597500
-
-/* 1/(4pi) */
-#define D1B4PI 0.079577471545947667884441881686257181017229822870228
-
-/* pi^2 */
-#define DPISQ 9.8696044010893586188344909998761511353136994072408
-
-/* sqrt(pi) */
-#define DSQRPI 1.7724538509055160272981674833411451827975494561224
-
-/* pi/2: 90 degrees in radians */
-#define DPIBY2 1.5707963267948966192313216916397514420985846996876
-
-/* pi/180: degrees to radians */
-#define DD2R 0.017453292519943295769236907684886127134428718885417
-
-/* 180/pi: radians to degrees */
-#define DR2D 57.295779513082320876798154814105170332405472466564
-
-/* pi/(180*3600): arcseconds to radians */
-#define DAS2R 4.8481368110953599358991410235794797595635330237270e-6
-
-/* 180*3600/pi : radians to arcseconds */
-#define DR2AS 2.0626480624709635515647335733077861319665970087963e5
-
-/* pi/12: hours to radians */
-#define DH2R 0.26179938779914943653855361527329190701643078328126
-
-/* 12/pi: radians to hours */
-#define DR2H 3.8197186342054880584532103209403446888270314977709
-
-/* pi/(12*3600): seconds of time to radians */
-#define DS2R 7.2722052166430399038487115353692196393452995355905e-5
-
-/* 12*3600/pi: radians to seconds of time */
-#define DR2S 1.3750987083139757010431557155385240879777313391975e4
-
-/* 15/(2pi): hours to degrees x radians to turns */
-#define D15B2P 2.3873241463784300365332564505877154305168946861068
-
-#endif
diff --git a/ast-5.3-1/slamap.c b/ast-5.3-1/slamap.c
deleted file mode 100644
index 0090c45..0000000
--- a/ast-5.3-1/slamap.c
+++ /dev/null
@@ -1,4840 +0,0 @@
-/*
-*class++
-* Name:
-* SlaMap
-
-* Purpose:
-* Sequence of celestial coordinate conversions.
-
-* Constructor Function:
-c astSlaMap (also see astSlaAdd)
-f AST_SLAMAP (also see AST_SLAADD)
-
-* Description:
-* An SlaMap is a specialised form of Mapping which can be used to
-* represent a sequence of conversions between standard celestial
-* (longitude, latitude) coordinate systems.
-*
-* When an SlaMap is first created, it simply performs a unit
-c (null) Mapping on a pair of coordinates. Using the astSlaAdd
-f (null) Mapping on a pair of coordinates. Using the AST_SLAADD
-c function, a series of coordinate conversion steps may then be
-f routine, a series of coordinate conversion steps may then be
-* added, selected from those provided by the SLALIB Positional
-* Astronomy Library (Starlink User Note SUN/67). This allows
-* multi-step conversions between a variety of celestial coordinate
-* systems to be assembled out of the building blocks provided by
-* SLALIB.
-*
-* For details of the individual coordinate conversions available,
-c see the description of the astSlaAdd function.
-f see the description of the AST_SLAADD routine.
-
-* Inheritance:
-* The SlaMap class inherits from the Mapping class.
-
-* Attributes:
-* The SlaMap class does not define any new attributes beyond those
-* which are applicable to all Mappings.
-
-* Functions:
-c In addition to those functions applicable to all Mappings, the
-c following function may also be applied to all SlaMaps:
-f In addition to those routines applicable to all Mappings, the
-f following routine may also be applied to all SlaMaps:
-*
-c - astSlaAdd: Add a celestial coordinate conversion to an SlaMap
-f - AST_SLAADD: Add a celestial coordinate conversion to an SlaMap
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 25-APR-1996 (RFWS):
-* Original version.
-* 28-MAY-1996 (RFWS):
-* Fixed bug in argument order to palSlaMappa for AST__SLA_AMP case.
-* 26-SEP-1996 (RFWS):
-* Added external interface and I/O facilities.
-* 23-MAY-1997 (RFWS):
-* Over-ride the astMapMerge method.
-* 28-MAY-1997 (RFWS):
-* Use strings to specify conversions for the public interface
-* and convert to macros (from an enumerated type) for the
-* internal representation. Tidy the public prologues.
-* 8-JAN-2003 (DSB):
-* - Changed private InitVtab method to protected astInitSlaMapVtab
-* method.
-* - Included STP conversion functions.
-* 11-JUN-2003 (DSB):
-* - Added HFK5Z and FK5HZ conversion functions.
-* 28-SEP-2003 (DSB):
-* - Added HEEQ and EQHE conversion functions.
-* 2-DEC-2004 (DSB):
-* - Added J2000H and HJ2000 conversion functions.
-* 15-AUG-2005 (DSB):
-* - Added H2E and E2H conversion functions.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 22-FEB-2006 (DSB):
-* Cache results returned by palSlaMappa in order to increase speed.
-* 10-MAY-2006 (DSB):
-* Override astEqual.
-* 31-AUG-2007 (DSB):
-* - Modify H2E and E2H conversion functions so that they convert to
-* and from apparent (HA,Dec) rather than topocentric (HA,Dec) (i.e.
-* include a correction for diurnal aberration). This requires an
-* extra conversion argument holding the magnitude of the diurnal
-* aberration vector.
-* - Correct bug in the simplification of adjacent AMP and MAP
-* conversions.
-
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS SlaMap
-
-/* Codes to identify SLALIB sky coordinate conversions. */
-#define AST__SLA_NULL 0 /* Null value */
-#define AST__SLA_ADDET 1 /* Add E-terms of aberration */
-#define AST__SLA_SUBET 2 /* Subtract E-terms of aberration */
-#define AST__SLA_PREBN 3 /* Bessel-Newcomb (FK4) precession */
-#define AST__SLA_PREC 4 /* Apply IAU 1975 (FK5) precession model */
-#define AST__SLA_FK45Z 5 /* FK4 to FK5, no proper motion or parallax */
-#define AST__SLA_FK54Z 6 /* FK5 to FK4, no proper motion or parallax */
-#define AST__SLA_AMP 7 /* Geocentric apparent to mean place */
-#define AST__SLA_MAP 8 /* Mean place to geocentric apparent */
-#define AST__SLA_ECLEQ 9 /* Ecliptic to J2000.0 equatorial */
-#define AST__SLA_EQECL 10 /* Equatorial J2000.0 to ecliptic */
-#define AST__SLA_GALEQ 11 /* Galactic to J2000.0 equatorial */
-#define AST__SLA_EQGAL 12 /* J2000.0 equatorial to galactic */
-#define AST__SLA_GALSUP 13 /* Galactic to supergalactic */
-#define AST__SLA_SUPGAL 14 /* Supergalactic to galactic */
-#define AST__HPCEQ 15 /* Helioprojective-Cartesian to J2000.0 equatorial */
-#define AST__EQHPC 16 /* J2000.0 equatorial to Helioprojective-Cartesian */
-#define AST__HPREQ 17 /* Helioprojective-Radial to J2000.0 equatorial */
-#define AST__EQHPR 18 /* J2000.0 equatorial to Helioprojective-Radial */
-#define AST__SLA_HFK5Z 19 /* ICRS to FK5 J2000.0, no pm or parallax */
-#define AST__SLA_FK5HZ 20 /* FK5 J2000.0 to ICRS, no pm or parallax */
-#define AST__HEEQ 21 /* Helio-ecliptic to equatorial */
-#define AST__EQHE 22 /* Equatorial to helio-ecliptic */
-#define AST__J2000H 23 /* Dynamical J2000 to ICRS */
-#define AST__HJ2000 24 /* ICRS to dynamical J2000 */
-#define AST__SLA_DH2E 25 /* Horizon to equatorial coordinates */
-#define AST__SLA_DE2H 26 /* Equatorial coordinates to horizon */
-#define AST__R2H 27 /* RA to hour angle */
-#define AST__H2R 28 /* Hour to RA angle */
-
-/* Maximum number of arguments required by an SLALIB conversion. */
-#define MAX_SLA_ARGS 4
-
-/* The alphabet (used for generating keywords for arguments). */
-#define ALPHABET "abcdefghijklmnopqrstuvwxyz"
-
-/* Angle conversion (PI is from the SLALIB slamac.h file) */
-#define PI 3.1415926535897932384626433832795028841971693993751
-#define PIBY2 (PI/2.0)
-#define D2R (PI/180.0)
-#define R2D (180.0/PI)
-#define AS2R (PI/648000.0)
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
- compare bad values directory because of the danger of floating point
- exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "pal.h" /* SLALIB interface */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "globals.h" /* Thread-safe global data access */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "mapping.h" /* Coordinate Mappings (parent class) */
-#include "unitmap.h" /* Unit (null) Mappings */
-#include "slamap.h" /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->Eq_Cache = AST__BAD; \
- globals->Ep_Cache = AST__BAD; \
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(SlaMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(SlaMap,Class_Init)
-#define class_vtab astGLOBAL(SlaMap,Class_Vtab)
-#define eq_cache astGLOBAL(SlaMap,Eq_Cache)
-#define ep_cache astGLOBAL(SlaMap,Ep_Cache)
-#define amprms_cache astGLOBAL(SlaMap,Amprms_Cache)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-/* A cache used to store the most recent results from palSlaMappa in order
- to avoid continuously recalculating the same values. */
-static double eq_cache = AST__BAD;
-static double ep_cache = AST__BAD;
-static double amprms_cache[ 21 ];
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstSlaMapVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstSlaMap *astSlaMapId_( int, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *CvtString( int, const char **, int *, const char *[ MAX_SLA_ARGS ], int * );
-static int CvtCode( const char *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static void AddSlaCvt( AstSlaMap *, int, const double *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void Earth( double, double[3], int * );
-static void SlaAdd( AstSlaMap *, const char *, const double[], int * );
-static void SolarPole( double, double[3], int * );
-static void Hpcc( double, double[3], double[3][3], double[3], int * );
-static void Hprc( double, double[3], double[3][3], double[3], int * );
-static void Hgc( double, double[3][3], double[3], int * );
-static void Haec( double, double[3][3], double[3], int * );
-static void Haqc( double, double[3][3], double[3], int * );
-static void Gsec( double, double[3][3], double[3], int * );
-static void STPConv( double, int, int, int, double[3], double *[3], int, double[3], double *[3], int * );
-static void J2000H( int, int, double *, double *, int * );
-
-static int GetObjSize( AstObject *, int * );
-/* Member functions. */
-/* ================= */
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two SlaMaps are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "slamap.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* SlaMap member function (over-rides the astEqual protected
-* method inherited from the astMapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two SlaMaps are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Object (a SlaMap).
-* that
-* Pointer to the second Object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the SlaMaps are equivalent, zero otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSlaMap *that;
- AstSlaMap *this;
- const char *argdesc[ MAX_SLA_ARGS ];
- const char *comment;
- int i, j;
- int nargs;
- int nin;
- int nout;
- int result;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain pointers to the two SlaMap structures. */
- this = (AstSlaMap *) this_object;
- that = (AstSlaMap *) that_object;
-
-/* Check the second object is a SlaMap. We know the first is a
- SlaMap since we have arrived at this implementation of the virtual
- function. */
- if( astIsASlaMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
- nin = astGetNin( this );
- nout = astGetNout( this );
- if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two SlaMaps differ, it may still be possible
- for them to be equivalent. First compare the SlaMaps if their Invert
- flags are the same. In this case all the attributes of the two SlaMaps
- must be identical. */
- if( astGetInvert( this ) == astGetInvert( that ) ) {
- if( this->ncvt == that->ncvt ) {
- result = 1;
- for( i = 0; i < this->ncvt && result; i++ ) {
- if( this->cvttype[ i ] != that->cvttype[ i ] ) {
- result = 0;
- } else {
- CvtString( this->cvttype[ i ], &comment, &nargs,
- argdesc, status );
- for( j = 0; j < nargs; j++ ) {
- if( !astEQUAL( this->cvtargs[ i ][ j ],
- that->cvtargs[ i ][ j ] ) ){
- result = 0;
- break;
- }
- }
- }
- }
- }
-
-/* If the Invert flags for the two SlaMaps differ, the attributes of the two
- SlaMaps must be inversely related to each other. */
- } else {
-
-/* In the specific case of a SlaMap, Invert flags must be equal. */
- result = 0;
-
- }
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "slamap.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* SlaMap member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied SlaMap,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the SlaMap.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSlaMap *this; /* Pointer to SlaMap structure */
- int result; /* Result value to return */
- int cvt; /* Loop counter for coordinate conversions */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the SlaMap structure. */
- this = (AstSlaMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
- for ( cvt = 0; cvt < this->ncvt; cvt++ ) {
- result += astTSizeOf( this->cvtargs[ cvt ] );
- result += astTSizeOf( this->cvtextra[ cvt ] );
- }
-
- result += astTSizeOf( this->cvtargs );
- result += astTSizeOf( this->cvtextra );
- result += astTSizeOf( this->cvttype );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static void AddSlaCvt( AstSlaMap *this, int cvttype, const double *args, int *status ) {
-/*
-* Name:
-* AddSlaCvt
-
-* Purpose:
-* Add a coordinate conversion step to an SlaMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "slamap.h"
-* void AddSlaCvt( AstSlaMap *this, int cvttype, const double *args )
-
-* Class Membership:
-* SlaMap member function.
-
-* Description:
-* This function allows one of the sky coordinate conversions
-* supported by SLALIB to be appended to an SlaMap. When an SlaMap
-* is first created (using astSlaMap), it simply performs a unit
-* mapping. By using AddSlaCvt repeatedly, a series of sky
-* coordinate conversions may then be specified which the SlaMap
-* will subsequently perform in sequence. This allows a complex
-* coordinate conversion to be assembled out of the basic building
-* blocks provided by SLALIB. The SlaMap will also perform the
-* inverse coordinate conversion (applying the individual
-* conversion steps in reverse) if required.
-
-* Parameters:
-* this
-* Pointer to the SlaMap.
-* cvttype
-* A code to identify which sky coordinate conversion is to be
-* appended. See the "SLALIB Coordinate Conversions" section
-* for details of those available.
-* args
-* Pointer to an array of double containing the argument values
-* required to fully specify the required coordinate
-* conversion. The number of arguments depends on the conversion
-* (see the "SLALIB Coordinate Conversions" section for
-* details). This value is ignored and may be NULL if no
-* arguments are required.
-
-* Returned Value:
-* void.
-
-* SLALIB Coordinate Conversions:
-* The following values may be supplied for the "cvttype" parameter
-* in order to specify the sky coordinate conversion to be
-* performed. In each case the value is named after the SLALIB
-* routine that performs the conversion, and the relevant SLALIB
-* documentation should be consulted for full details.
-*
-* The argument(s) required to fully specify each conversion are
-* indicated in parentheses after each value. Values for these
-* should be given in the array pointed at by "args". The argument
-* names given match the corresponding SLALIB function arguments
-* (in the Fortran 77 documentation - SUN/67) and their values
-* should be given using the same units, time scale, calendar,
-* etc. as in SLALIB.
-*
-* AST__SLA_ADDET( EQ )
-* Add E-terms of aberration.
-* AST__SLA_SUBET( EQ )
-* Subtract E-terms of aberration.
-* AST__SLA_PREBN( BEP0, BEP1 )
-* Apply Bessel-Newcomb pre-IAU 1976 (FK4) precession model.
-* AST__SLA_PREC( EP0, EP1 )
-* Apply IAU 1975 (FK5) precession model.
-* AST__SLA_FK45Z( BEPOCH )
-* Convert FK4 to FK5 (no proper motion or parallax).
-* AST__SLA_FK54Z( BEPOCH )
-* Convert FK5 to FK4 (no proper motion or parallax).
-* AST__SLA_AMP( DATE, EQ )
-* Convert geocentric apparent to mean place.
-* AST__SLA_MAP( EQ, DATE )
-* Convert mean place to geocentric apparent.
-* AST__SLA_ECLEQ( DATE )
-* Convert ecliptic coordinates to J2000.0 equatorial.
-* AST__SLA_EQECL( DATE )
-* Convert equatorial J2000.0 to ecliptic coordinates.
-* AST__SLA_GALEQ( )
-* Convert galactic coordinates to J2000.0 equatorial.
-* AST__SLA_EQGAL( )
-* Convert J2000.0 equatorial to galactic coordinates.
-* AST__SLA_HFK5Z( JEPOCH )
-* Convert ICRS coordinates to J2000.0 equatorial (no proper
-* motion or parallax).
-* AST__SLA_FK5HZ( JEPOCH )
-* Convert J2000.0 equatorial to ICRS coordinates (no proper
-* motion or parallax).
-* AST__SLA_GALSUP( )
-* Convert galactic to supergalactic coordinates.
-* AST__SLA_SUPGAL( )
-* Convert supergalactic coordinates to galactic.
-* AST__HPCEQ( DATE, OBSX, OBSY, OBSZ )
-* Convert Helioprojective-Cartesian coordinates to J2000.0
-* equatorial. This is not a native SLALIB conversion, but is
-* implemented by functions within this module. The DATE argument
-* is the MJD defining the HPC coordinate system. The OBSX, OBSY
-* and OBSZ arguments are the AST__HAEC coordinates of the observer.
-* AST__EQHPC( DATE, OBSX, OBSY, OBSZ )
-* Convert J2000.0 equatorial coordinates to Helioprojective-Cartesian.
-* AST__HPREQ( DATE, OBSX, OBSY, OBSZ )
-* Convert Helioprojective-Radial coordinates to J2000.0 equatorial.
-* AST__EQHPR( DATE, OBSX, OBSY, OBSZ )
-* Convert J2000.0 equatorial coordinates to Helioprojective-Radial.
-* AST__HEEQ( DATE )
-* Convert helio-ecliptic to ecliptic coordinates.
-* AST__EQHE( DATE )
-* Convert ecliptic to helio-ecliptic coordinates.
-* AST__J2000H( )
-* Convert dynamical J2000 to ICRS.
-* AST__HJ2000( )
-* Convert ICRS to dynamical J2000.
-* AST__SLA_DH2E( LAT, DIURAB )
-* Convert horizon to equatorial coordinates
-* AST__SLA_DE2H( LAT, DIURAB )
-* Convert equatorial to horizon coordinates
-* AST__R2H( LAST )
-* Convert RA to Hour Angle.
-* AST__H2R( LAST )
-* Convert Hour Angle to RA.
-
-* Notes:
-* - The specified conversion is appended only if the SlaMap's
-* Invert attribute is zero. If it is non-zero, this function
-* effectively prefixes the inverse of the conversion specified
-* instead.
-* - Sky coordinate values are in radians (as for SLALIB) and all
-* conversions are performed using double arithmetic.
-*/
-
-/* Local Variables: */
- const char *argdesc[ MAX_SLA_ARGS ]; /* Pointers to argument descriptions */
- const char *comment; /* Pointer to comment string */
- const char *cvt_string; /* Pointer to conversion type string */
- int nargs; /* Number of arguments */
- int ncvt; /* Number of coordinate conversions */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Validate the coordinate conversion type and obtain the number of
- required arguments. */
- cvt_string = CvtString( cvttype, &comment, &nargs, argdesc, status );
-
-/* If the sky coordinate conversion type was not valid, then report an
- error. */
- if ( astOK && !cvt_string ) {
- astError( AST__SLAIN, "AddSlaCvt(%s): Invalid SLALIB sky coordinate "
- "conversion type (%d).", status, astGetClass( this ),
- (int) cvttype );
- }
-
-/* Note the number of coordinate conversions already stored in the SlaMap. */
- if ( astOK ) {
- ncvt = this->ncvt;
-
-/* Extend the array of conversion types and the array of pointers to
- their argument lists to accommodate the new one. */
- this->cvttype = (int *) astGrow( this->cvttype, ncvt + 1,
- sizeof( int ) );
- this->cvtargs = (double **) astGrow( this->cvtargs, ncvt + 1,
- sizeof( double * ) );
- this->cvtextra = (double **) astGrow( this->cvtextra, ncvt + 1,
- sizeof( double * ) );
-
-/* If OK, allocate memory and store a copy of the argument list,
- putting a pointer to the copy into the SlaMap. */
- if ( astOK ) {
- this->cvtargs[ ncvt ] = astStore( NULL, args,
- sizeof( double ) * (size_t) nargs );
- this->cvtextra[ ncvt ] = NULL;
- }
-
-/* Store the conversion type and increment the conversion count. */
- if ( astOK ) {
- this->cvttype[ ncvt ] = cvttype;
- this->ncvt++;
- }
- }
-}
-
-static int CvtCode( const char *cvt_string, int *status ) {
-/*
-* Name:
-* CvtCode
-
-* Purpose:
-* Convert a conversion type from a string representation to a code value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "slamap.h"
-* int CvtCode( const char *cvt_string, int *status )
-
-* Class Membership:
-* SlaMap member function.
-
-* Description:
-* This function accepts a string used to repersent one of the
-* SLALIB sky coordinate conversions and converts it into a code
-* value for internal use.
-
-* Parameters:
-* cvt_string
-* Pointer to a constant null-terminated string representing a
-* sky coordinate conversion. This is case sensitive and should
-* contain no unnecessary white space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The equivalent conversion code. If the string was not
-* recognised, the code AST__SLA_NULL is returned, without error.
-
-* Notes:
-* - A value of AST__SLA_NULL will be returned if this function is
-* invoked with the global error status set, or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = AST__SLA_NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Test the string against each recognised value in turn and assign
- the result. */
- if ( astChrMatch( cvt_string, "ADDET" ) ) {
- result = AST__SLA_ADDET;
-
- } else if ( astChrMatch( cvt_string, "SUBET" ) ) {
- result = AST__SLA_SUBET;
-
- } else if ( astChrMatch( cvt_string, "PREBN" ) ) {
- result = AST__SLA_PREBN;
-
- } else if ( astChrMatch( cvt_string, "PREC" ) ) {
- result = AST__SLA_PREC;
-
- } else if ( astChrMatch( cvt_string, "FK45Z" ) ) {
- result = AST__SLA_FK45Z;
-
- } else if ( astChrMatch( cvt_string, "FK54Z" ) ) {
- result = AST__SLA_FK54Z;
-
- } else if ( astChrMatch( cvt_string, "AMP" ) ) {
- result = AST__SLA_AMP;
-
- } else if ( astChrMatch( cvt_string, "MAP" ) ) {
- result = AST__SLA_MAP;
-
- } else if ( astChrMatch( cvt_string, "ECLEQ" ) ) {
- result = AST__SLA_ECLEQ;
-
- } else if ( astChrMatch( cvt_string, "EQECL" ) ) {
- result = AST__SLA_EQECL;
-
- } else if ( astChrMatch( cvt_string, "GALEQ" ) ) {
- result = AST__SLA_GALEQ;
-
- } else if ( astChrMatch( cvt_string, "EQGAL" ) ) {
- result = AST__SLA_EQGAL;
-
- } else if ( astChrMatch( cvt_string, "FK5HZ" ) ) {
- result = AST__SLA_FK5HZ;
-
- } else if ( astChrMatch( cvt_string, "HFK5Z" ) ) {
- result = AST__SLA_HFK5Z;
-
- } else if ( astChrMatch( cvt_string, "GALSUP" ) ) {
- result = AST__SLA_GALSUP;
-
- } else if ( astChrMatch( cvt_string, "SUPGAL" ) ) {
- result = AST__SLA_SUPGAL;
-
- } else if ( astChrMatch( cvt_string, "HPCEQ" ) ) {
- result = AST__HPCEQ;
-
- } else if ( astChrMatch( cvt_string, "EQHPC" ) ) {
- result = AST__EQHPC;
-
- } else if ( astChrMatch( cvt_string, "HPREQ" ) ) {
- result = AST__HPREQ;
-
- } else if ( astChrMatch( cvt_string, "EQHPR" ) ) {
- result = AST__EQHPR;
-
- } else if ( astChrMatch( cvt_string, "HEEQ" ) ) {
- result = AST__HEEQ;
-
- } else if ( astChrMatch( cvt_string, "EQHE" ) ) {
- result = AST__EQHE;
-
- } else if ( astChrMatch( cvt_string, "J2000H" ) ) {
- result = AST__J2000H;
-
- } else if ( astChrMatch( cvt_string, "HJ2000" ) ) {
- result = AST__HJ2000;
-
- } else if ( astChrMatch( cvt_string, "H2E" ) ) {
- result = AST__SLA_DH2E;
-
- } else if ( astChrMatch( cvt_string, "E2H" ) ) {
- result = AST__SLA_DE2H;
-
- } else if ( astChrMatch( cvt_string, "R2H" ) ) {
- result = AST__R2H;
-
- } else if ( astChrMatch( cvt_string, "H2R" ) ) {
- result = AST__H2R;
-
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *CvtString( int cvt_code, const char **comment,
- int *nargs, const char *arg[ MAX_SLA_ARGS ], int *status ) {
-/*
-* Name:
-* CvtString
-
-* Purpose:
-* Convert a conversion type from a code value to a string representation.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "slamap.h"
-* const char *CvtString( int cvt_code, const char **comment,
-* int *nargs, const char *arg[ MAX_SLA_ARGS ], int *status )
-
-* Class Membership:
-* SlaMap member function.
-
-* Description:
-* This function accepts a code value used to represent one of the
-* SLALIB sky coordinate conversions and converts it into an
-* equivalent string representation. It also returns a descriptive
-* comment and information about the arguments required in order to
-* perform the conversion.
-
-* Parameters:
-* cvt_code
-* The conversion code.
-* comment
-* Address of a location to return a pointer to a constant
-* null-terminated string containing a description of the
-* conversion.
-* nargs
-* Address of an int in which to return the number of arguments
-* required in order to perform the conversion (may be zero).
-* arg
-* An array in which to return a pointer to a constant
-* null-terminated string for each argument (above) containing a
-* description of what each argument represents.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a constant null-terminated string representation of
-* the conversion code value supplied. If the code supplied is not
-* valid, a NULL pointer will be returned, without error.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the global error status set, or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- const char *result; /* Result pointer to return */
-
-/* Initialise the returned values. */
- *comment = NULL;
- *nargs = 0;
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Test for each valid code value in turn and assign the appropriate
- return values. */
- switch ( cvt_code ) {
-
- case AST__SLA_ADDET:
- result = "ADDET";
- *comment = "Add E-terms of aberration";
- *nargs = 1;
- arg[ 0 ] = "Besselian epoch of mean equinox (FK4)";
- break;
-
- case AST__SLA_SUBET:
- result = "SUBET";
- *comment = "Subtract E-terms of aberration";
- *nargs = 1;
- arg[ 0 ] = "Besselian epoch of mean equinox (FK4)";
- break;
-
- case AST__SLA_PREBN:
- result = "PREBN";
- *comment = "Apply Bessel-Newcomb (FK4) precession";
- *nargs = 2;
- arg[ 0 ] = "From Besselian epoch";
- arg[ 1 ] = "To Besselian epoch";
- break;
-
- case AST__SLA_PREC:
- result = "PREC";
- *comment = "Apply IAU 1975 (FK5) precession";
- *nargs = 2;
- arg[ 0 ] = "From Julian epoch";
- arg[ 1 ] = "To Julian epoch";
- break;
-
- case AST__SLA_FK45Z:
- result = "FK45Z";
- *comment = "FK4 to FK5 J2000.0 (no PM or parallax)";
- arg[ 0 ] = "Besselian epoch of FK4 coordinates";
- *nargs = 1;
- break;
-
- case AST__SLA_FK54Z:
- result = "FK54Z";
- *comment = "FK5 J2000.0 to FK4 (no PM or parallax)";
- *nargs = 1;
- arg[ 0 ] = "Besselian epoch of FK4 system";
- break;
-
- case AST__SLA_AMP:
- result = "AMP";
- *comment = "Geocentric apparent to mean place (FK5)";
- *nargs = 2;
- arg[ 0 ] = "TDB of apparent place (as MJD)";
- arg[ 1 ] = "Julian epoch of mean equinox (FK5)";
- break;
-
- case AST__SLA_MAP:
- result = "MAP";
- *comment = "Mean place (FK5) to geocentric apparent";
- *nargs = 2;
- arg[ 0 ] = "Julian epoch of mean equinox (FK5)";
- arg[ 1 ] = "TDB of apparent place (as MJD)";
- break;
-
- case AST__SLA_ECLEQ:
- result = "ECLEQ";
- *comment = "Ecliptic (IAU 1980) to J2000.0 equatorial (FK5)";
- *nargs = 1;
- arg[ 0 ] = "TDB of mean ecliptic (as MJD)";
- break;
-
- case AST__SLA_EQECL:
- result = "EQECL";
- *comment = "Equatorial J2000.0 (FK5) to ecliptic (IAU 1980)";
- *nargs = 1;
- arg[ 0 ] = "TDB of mean ecliptic (as MJD)";
- break;
-
- case AST__SLA_GALEQ:
- result = "GALEQ";
- *comment = "Galactic (IAU 1958) to J2000.0 equatorial (FK5)";
- *nargs = 0;
- break;
-
- case AST__SLA_EQGAL:
- result = "EQGAL";
- *comment = "J2000.0 equatorial (FK5) to galactic (IAU 1958)";
- *nargs = 0;
- break;
-
- case AST__SLA_FK5HZ:
- result = "FK5HZ";
- *comment = "J2000.0 FK5 to ICRS (no PM or parallax)";
- arg[ 0 ] = "Julian epoch of FK5 coordinates";
- *nargs = 1;
- break;
-
- case AST__SLA_HFK5Z:
- result = "HFK5Z";
- *comment = "ICRS to J2000.0 FK5 (no PM or parallax)";
- arg[ 0 ] = "Julian epoch of FK5 coordinates";
- *nargs = 1;
- break;
-
- case AST__SLA_GALSUP:
- result = "GALSUP";
- *comment = "Galactic (IAU 1958) to supergalactic";
- *nargs = 0;
- break;
-
- case AST__SLA_SUPGAL:
- result = "SUPGAL";
- *comment = "Supergalactic to galactic (IAU 1958)";
- *nargs = 0;
- break;
-
- case AST__HPCEQ:
- result = "HPCEQ";
- *comment = "Helioprojective-Cartesian to J2000.0 equatorial (FK5)";
- *nargs = 4;
- arg[ 0 ] = "Modified Julian Date of observation";
- arg[ 1 ] = "Heliocentric-Aries-Ecliptic X value at observer";
- arg[ 2 ] = "Heliocentric-Aries-Ecliptic Y value at observer";
- arg[ 3 ] = "Heliocentric-Aries-Ecliptic Z value at observer";
- break;
-
- case AST__EQHPC:
- result = "EQHPC";
- *comment = "J2000.0 equatorial (FK5) to Helioprojective-Cartesian";
- *nargs = 4;
- arg[ 0 ] = "Modified Julian Date of observation";
- arg[ 1 ] = "Heliocentric-Aries-Ecliptic X value at observer";
- arg[ 2 ] = "Heliocentric-Aries-Ecliptic Y value at observer";
- arg[ 3 ] = "Heliocentric-Aries-Ecliptic Z value at observer";
- break;
-
- case AST__HPREQ:
- result = "HPREQ";
- *comment = "Helioprojective-Radial to J2000.0 equatorial (FK5)";
- *nargs = 4;
- arg[ 0 ] = "Modified Julian Date of observation";
- arg[ 1 ] = "Heliocentric-Aries-Ecliptic X value at observer";
- arg[ 2 ] = "Heliocentric-Aries-Ecliptic Y value at observer";
- arg[ 3 ] = "Heliocentric-Aries-Ecliptic Z value at observer";
- break;
-
- case AST__EQHPR:
- result = "EQHPR";
- *comment = "J2000.0 equatorial (FK5) to Helioprojective-Radial";
- *nargs = 4;
- arg[ 0 ] = "Modified Julian Date of observation";
- arg[ 1 ] = "Heliocentric-Aries-Ecliptic X value at observer";
- arg[ 2 ] = "Heliocentric-Aries-Ecliptic Y value at observer";
- arg[ 3 ] = "Heliocentric-Aries-Ecliptic Z value at observer";
- break;
-
- case AST__HEEQ:
- result = "HEEQ";
- *comment = "Helio-ecliptic to equatorial";
- *nargs = 1;
- arg[ 0 ] = "Modified Julian Date of observation";
- break;
-
- case AST__EQHE:
- result = "EQHE";
- *comment = "Equatorial to helio-ecliptic";
- *nargs = 1;
- arg[ 0 ] = "Modified Julian Date of observation";
- break;
-
- case AST__J2000H:
- result = "J2000H";
- *comment = "J2000 equatorial (dynamical) to ICRS";
- *nargs = 0;
- break;
-
- case AST__HJ2000:
- result = "HJ2000";
- *comment = "ICRS to J2000 equatorial (dynamical)";
- *nargs = 0;
- break;
-
- case AST__SLA_DH2E:
- result = "H2E";
- *comment = "Horizon to equatorial";
- *nargs = 2;
- arg[ 0 ] = "Geodetic latitude of observer";
- arg[ 1 ] = "Magnitude of diurnal aberration vector";
- break;
-
- case AST__SLA_DE2H:
- result = "E2H";
- *comment = "Equatorial to horizon";
- *nargs = 2;
- arg[ 0 ] = "Geodetic latitude of observer";
- arg[ 1 ] = "Magnitude of diurnal aberration vector";
- break;
-
- case AST__R2H:
- result = "R2H";
- *comment = "RA to Hour Angle";
- *nargs = 1;
- arg[ 0 ] = "Local apparent sidereal time (radians)";
- break;
-
- case AST__H2R:
- result = "H2R";
- *comment = "Hour Angle to RA";
- *nargs = 1;
- arg[ 0 ] = "Local apparent sidereal time (radians)";
- break;
-
- }
-
-/* Return the result. */
- return result;
-}
-
-static void Earth( double mjd, double earth[3], int *status ) {
-/*
-*+
-* Name:
-* Earth
-
-* Purpose:
-* Returns the AST__HAEC position of the earth at the specified time.
-
-* Type:
-* Private member function.
-
-* Synopsis:
-* #include "slamap.h"
-* void Earth( double mjd, double earth[3], int *status )
-
-* Class Membership:
-* SlaMap method.
-
-* Description:
-* This function returns the AST__HAEC position of the earth at the
-* specified time. See astSTPConv for a description of the AST__HAEC
-* coordinate systems.
-
-* Parameters:
-* mjd
-* Modified Julian date.
-* earth
-* The AST__HAEC position of the earth at the given date.
-*-
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- double dpb[3]; /* Earth position (barycentric) */
- double dph[3]; /* Earth position (heliocentric) */
- double dvb[3]; /* Earth velocity (barycentric) */
- double dvh[3]; /* Earth velocity (heliocentric, AST__HAQC) */
- double ecmat[3][3];/* Equatorial to ecliptic matrix */
- int i; /* Loop count */
-
-/* Initialize. */
- for( i = 0; i < 3; i++ ) earth[ i ] = 0.0;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get the position of the earth at the given date in the AST__HAQC coord
- system (dph). */
- palSlaEvp( mjd, 2000.0, dvb, dpb, dvh, dph );
-
-/* Now rotate the earths position vector into AST__HAEC coords. */
- palSlaEcmat( palSlaEpj2d( 2000.0 ), ecmat );
- palSlaDmxv( ecmat, dph, earth );
-
-/* Convert from AU to metres. */
- earth[0] *= AST__AU;
- earth[1] *= AST__AU;
- earth[2] *= AST__AU;
-
-}
-
-static void Hgc( double mjd, double mat[3][3], double offset[3], int *status ) {
-/*
-*+
-* Name:
-* Hgc
-
-* Purpose:
-* Returns matrix and offset for converting AST__HGC positions to AST__HAEC.
-
-* Type:
-* Private member function.
-
-* Synopsis:
-* #include "slamap.h"
-* void Hgc( double mjd, double mat[3][3], double offset[3], int *status )
-
-* Class Membership:
-* SlaMap method.
-
-* Description:
-* This function returns a 3x3 matrix which rotates direction vectors
-* given in the AST__HGC system to the AST__HAEC system at the
-* specified date. It also returns the position of the origin of the
-* AST__HGC system as an AST__HAEC position. See astSTPConv for a
-* description of these coordinate systems.
-
-* Parameters:
-* mjd
-* Modified Julian date defining the coordinate systems.
-* mat
-* Matrix which rotates from AST__HGC to AST__HAEC.
-* offset
-* The origin of the AST__HGC system within the AST__HAEC system.
-*-
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- double earth[3]; /* Earth position (heliocentric, AST__HAEC) */
- double len; /* Vector length */
- double xhg[3]; /* Unix X vector of AST__HGC system in AST__HAEC */
- double yhg[3]; /* Unix Y vector of AST__HGC system in AST__HAEC */
- double ytemp[3]; /* Un-normalized Y vector */
- double zhg[3]; /* Unix Z vector of AST__HGC system in AST__HAEC */
- int i; /* Loop count */
- int j; /* Loop count */
-
-/* Initialize. */
- for( i = 0; i < 3; i++ ) {
- for( j = 0; j < 3; j++ ) {
- mat[i][j] = (i==j)?1.0:0.0;
- }
- offset[ i ] = 0.0;
- }
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a unit vector parallel to the solar north pole at the given date.
- This vector is expressed in AST__HAEC coords. This is the Z axis of the
- AST__HGC system. */
- SolarPole( mjd, zhg, status );
-
-/* Get the position of the earth at the given date in the AST__HAEC coord
- system. */
- Earth( mjd, earth, status );
-
-/* The HG Y axis is perpendicular to both the polar axis and the
- sun-earth line. Obtain a Y vector by taking the cross product of the
- two vectors, and then normalize it into a unit vector. */
- palSlaDvxv( zhg, earth, ytemp );
- palSlaDvn( ytemp, yhg, &len );
-
-/* The HG X axis is perpendicular to both Z and Y, */
- palSlaDvxv( yhg, zhg, xhg );
-
-/* The HG X, Y and Z unit vectors form the columns of the required matrix.
- The origins of the two systems are co-incident, so return the zero offset
- vector initialised earlier. */
- for( i = 0; i < 3; i++ ) {
- mat[ i ][ 0 ] = xhg[ i ];
- mat[ i ][ 1 ] = yhg[ i ];
- mat[ i ][ 2 ] = zhg[ i ];
- }
-
-}
-
-static void Gsec( double mjd, double mat[3][3], double offset[3], int *status ) {
-/*
-*+
-* Name:
-* Gsec
-
-* Purpose:
-* Returns matrix and offset for converting AST__GSEC positions to AST__HAEC.
-
-* Type:
-* Private member function.
-
-* Synopsis:
-* #include "slamap.h"
-* void Gsec( double mjd, double mat[3][3], double offset[3], int *status )
-
-* Class Membership:
-* SlaMap method.
-
-* Description:
-* This function returns a 3x3 matrix which rotates direction vectors
-* given in the AST__GSEC system to the AST__HAEC system at the
-* specified date. It also returns the position of the origin of the
-* AST__GSEC system as an AST__HAEC position. See astSTPConv for a
-* description of these coordinate systems.
-
-* Parameters:
-* mjd
-* Modified Julian date defining the coordinate systems.
-* mat
-* Matrix which rotates from AST__GSEC to AST__HAEC.
-* offset
-* The origin of the AST__GSEC system within the AST__HAEC system.
-*-
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- double earth[3]; /* Earth position (heliocentric, AST__HAEC) */
- double pole[3]; /* Solar pole (AST__HAEC) */
- double len; /* Vector length */
- double xgs[3]; /* Unix X vector of AST__GSEC system in AST__HAEC */
- double ygs[3]; /* Unix Y vector of AST__GSEC system in AST__HAEC */
- double ytemp[3]; /* Un-normalized Y vector */
- double zgs[3]; /* Unix Z vector of AST__GSEC system in AST__HAEC */
- int i; /* Loop count */
- int j; /* Loop count */
-
-/* Initialize. */
- for( i = 0; i < 3; i++ ) {
- for( j = 0; j < 3; j++ ) {
- mat[i][j] = (i==j)?1.0:0.0;
- }
- offset[ i ] = 0.0;
- }
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get the position of the earth at the given date in the AST__HAEC coord
- system. */
- Earth( mjd, earth, status );
-
-/* We need to find unit vectors parallel to the GSEC (X,Y,Z) axes, expressed
- in terms of the AST__HAEC (X,Y,Z) axes. The GSEC X axis starts at the
- earth and passes through the centre of the sun. This is just the
- normalized opposite of the earth's position vector. */
- palSlaDvn( earth, xgs, &len );
- xgs[0] *= -1.0;
- xgs[1] *= -1.0;
- xgs[2] *= -1.0;
-
-/* The GSEC Y axis is perpendicular to both the X axis and the ecliptic north
- pole vector. So find the ecliptic north pole vector in AST__HAEC coords. */
- pole[ 0 ] = 0.0;
- pole[ 1 ] = 0.0;
- pole[ 2 ] = 1.0;
-
-/* Find the GSEC Y axis by taking the vector product of the X axis and
- the ecliptic north pole vector, and then normalize it into a unit
- vector. */
- palSlaDvxv( pole, xgs, ytemp );
- palSlaDvn( ytemp, ygs, &len );
-
-/* The GSEC Z axis is perpendicular to both X and Y axis, and forms a
- right-handed system. The resulting vector will be of unit length
- since the x and y vectors are both of unit length, and are
- perpendicular to each other. It therefore does not need to be
- normalized.*/
- palSlaDvxv( xgs, ygs, zgs );
-
-/* The GSEC X, Y and Z unit vectors form the columns of the required matrix. */
- for( i = 0; i < 3; i++ ) {
- mat[ i ][ 0 ] = xgs[ i ];
- mat[ i ][ 1 ] = ygs[ i ];
- mat[ i ][ 2 ] = zgs[ i ];
- offset[i] = earth[ i ];
- }
-
-}
-
-static void Haec( double mjd, double mat[3][3], double offset[3], int *status ) {
-/*
-*+
-* Name:
-* Haec
-
-* Purpose:
-* Returns matrix and offset for converting AST__HAEC positions to AST__HAEC.
-
-* Type:
-* Private member function.
-
-* Synopsis:
-* #include "slamap.h"
-* void Haec( double mjd, double mat[3][3], double offset[3], int *status )
-
-* Class Membership:
-* SlaMap method.
-
-* Description:
-* This function returns a 3x3 matrix which rotates direction vectors
-* given in the AST__HAEC system to the AST__HAEC system at the
-* specified date. It also returns the position of the origin of the
-* AST__HAEC system as an AST__HAEC position. See astSTPConv for a
-* description of these coordinate systems.
-
-* Parameters:
-* mjd
-* Modified Julian date defining the coordinate systems.
-* mat
-* Matrix which rotates from AST__HAEC to AST__HAEC.
-* offset
-* The origin of the AST__HAEC system within the AST__HAEC system.
-*-
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- int i; /* Loop count */
- int j; /* Loop count */
-
-/* Return an identity matrix and a zero offset vector. */
- for( i = 0; i < 3; i++ ) {
- for( j = 0; j < 3; j++ ) {
- mat[i][j] = (i==j)?1.0:0.0;
- }
- offset[ i ] = 0.0;
- }
-
-}
-
-static void Haqc( double mjd, double mat[3][3], double offset[3], int *status ) {
-/*
-*+
-* Name:
-* Haqc
-
-* Purpose:
-* Returns matrix and offset for converting AST__HAQC positions to AST__HAEC.
-
-* Type:
-* Private member function.
-
-* Synopsis:
-* #include "slamap.h"
-* void Haqc( double mjd, double mat[3][3], double offset[3], int *status )
-
-* Class Membership:
-* SlaMap method.
-
-* Description:
-* This function returns a 3x3 matrix which rotates direction vectors
-* given in the AST__HAQC system to the AST__HAEC system at the
-* specified date. It also returns the position of the origin of the
-* AST__HAQC system as an AST__HAEC position. See astSTPConv for a
-* description of these coordinate systems.
-
-* Parameters:
-* mjd
-* Modified Julian date defining the coordinate systems.
-* mat
-* Matrix which rotates from AST__HAQC to AST__HAEC.
-* offset
-* The origin of the AST__HAQC system within the AST__HAEC system.
-*-
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- int i; /* Loop count */
- int j; /* Loop count */
-
-/* Initialise an identity matrix and a zero offset vector. */
- for( i = 0; i < 3; i++ ) {
- for( j = 0; j < 3; j++ ) {
- mat[i][j] = (i==j)?1.0:0.0;
- }
- offset[ i ] = 0.0;
- }
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Return the required matrix. */
- palSlaEcmat( palSlaEpj2d( 2000.0 ), mat );
- return;
-}
-
-static void Hpcc( double mjd, double obs[3], double mat[3][3], double offset[3], int *status ) {
-/*
-*+
-* Name:
-* Hpcc
-
-* Purpose:
-* Returns matrix and offset for converting AST__HPCC positions to
-* AST__HAEC.
-
-* Type:
-* Private member function.
-
-* Synopsis:
-* #include "slamap.h"
-* void Hpcc( double mjd, double obs[3], double mat[3][3], double offset[3], int *status )
-
-* Class Membership:
-* SlaMap method.
-
-* Description:
-* This function returns a 3x3 matrix which rotates direction vectors
-* given in the AST__HPCC system to the AST__HAEC system at the
-* specified date. It also returns the position of the origin of the
-* AST__HPCC system as an AST__HAEC position. See astSTPConv for a
-* description of these coordinate systems.
-
-* Parameters:
-* mjd
-* Modified Julian date defining the coordinate systems.
-* obs
-* The observers position, in AST__HAEC, or NULL if the observer is
-* at the centre of the earth.
-* mat
-* Matrix which rotates from AST__HPCC to AST__HAEC.
-* offset
-* The origin of the AST__HPCC system within the AST__HAEC system.
-*-
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- double earth[3]; /* Earth position (heliocentric, AST__HAEC) */
- double pole[3]; /* Solar pole vector (AST__HAEC) */
- double len; /* Vector length */
- double xhpc[3]; /* Unix X vector of AST__HPCC system in AST__HAEC */
- double yhpc[3]; /* Unix Y vector of AST__HPCC system in AST__HAEC */
- double ytemp[3]; /* Un-normalized Y vector */
- double zhpc[3]; /* Unix Z vector of AST__HPCC system in AST__HAEC */
- int i; /* Loop count */
- int j; /* Loop count */
-
-/* Initialize. */
- for( i = 0; i < 3; i++ ) {
- for( j = 0; j < 3; j++ ) {
- mat[i][j] = (i==j)?1.0:0.0;
- }
- offset[i] = 0.0;
- }
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* If no observers position was supplied, use the position of the earth
- at the specified date in AST__HAEC coords. */
- if( !obs ) {
- Earth( mjd, earth, status );
- obs = earth;
- }
-
-/* We need to find unit vectors parallel to the HPCC (X,Y,Z) axes, expressed
- in terms of the AST__HAEC (X,Y,Z) axes. The HPCC X axis starts at the
- observer and passes through the centre of the sun. This is just the
- normalized opposite of the supplied observer's position vector. */
- palSlaDvn( obs, xhpc, &len );
- xhpc[0] *= -1.0;
- xhpc[1] *= -1.0;
- xhpc[2] *= -1.0;
-
-/* The HPC Y axis is perpendicular to both the X axis and the solar north
- pole vector. So find the solar north pole vector in AST__HAEC coords. */
- SolarPole( mjd, pole, status );
-
-/* Find the HPC Y axis by taking the vector product of the X axis and
- the solar north pole vector, and then normalize it into a unit vector.
- Note, HPC (X,Y,Z) axes form a left-handed system! */
- palSlaDvxv( xhpc, pole, ytemp );
- palSlaDvn( ytemp, yhpc, &len );
-
-/* The HPC Z axis is perpendicular to both X and Y axis, and forms a
- left-handed system. The resulting vector will be of unit length
- since the x and y vectors are both of unit length, and are
- perpendicular to each other. It therefore does not need to be
- normalized.*/
- palSlaDvxv( yhpc, xhpc, zhpc );
-
-/* The HPC X, Y and Z unit vectors form the columns of the required matrix. */
- for( i = 0; i < 3; i++ ) {
- mat[ i ][ 0 ] = xhpc[ i ];
- mat[ i ][ 1 ] = yhpc[ i ];
- mat[ i ][ 2 ] = zhpc[ i ];
- offset[i] = obs[ i ];
- }
-
-}
-
-static void Hprc( double mjd, double obs[3], double mat[3][3], double offset[3], int *status ) {
-/*
-*+
-* Name:
-* Hprc
-
-* Purpose:
-* Returns matrix and offset for converting AST__HPRC positions to
-* AST__HAEC.
-
-* Type:
-* Private member function.
-
-* Synopsis:
-* #include "slamap.h"
-* void Hprc( double mjd, double obs[3], double mat[3][3], double offset[3], int *status )
-
-* Class Membership:
-* SlaMap method.
-
-* Description:
-* This function returns a 3x3 matrix which rotates direction vectors
-* given in the AST__HPRC system to the AST__HAEC system at the
-* specified date. It also returns the position of the origin of the
-* AST__HPRC system as an AST__HAEC position. See astSTPConv for a
-* description of these coordinate systems.
-
-* Parameters:
-* mjd
-* Modified Julian date defining the coordinate systems.
-* obs
-* The observers position, in AST__HAEC, or NULL if the observer is
-* at the centre of the earth.
-* mat
-* Matrix which rotates from AST__HPRC to AST__HAEC.
-* offset
-* The origin of the AST__HPRC system within the AST__HAEC system.
-*-
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- double pole[3]; /* Solar pole (AST__HAEC) */
- double earth[3]; /* Earth position (heliocentric, AST__HAEC) */
- double len; /* Vector length */
- double xhpr[3]; /* Unix X vector of AST__HPRC system in AST__HAEC */
- double yhpr[3]; /* Unix Y vector of AST__HPRC system in AST__HAEC */
- double ytemp[3]; /* Un-normalized Y vector */
- double zhpr[3]; /* Unix Z vector of AST__HPRC system in AST__HAEC */
- int i; /* Loop count */
- int j; /* Loop count */
-
-/* Initialize. */
- for( i = 0; i < 3; i++ ) {
- for( j = 0; j < 3; j++ ) {
- mat[i][j] = (i==j)?1.0:0.0;
- }
- offset[i] = 0.0;
- }
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* If no observers position was supplied, use the position of the earth
- at the specified date in AST__HAEC coords. */
- if( !obs ) {
- Earth( mjd, earth, status );
- obs = earth;
- }
-
-/* We need to find unit vectors parallel to the HPRC (X,Y,Z) axes, expressed
- in terms of the AST__HAEC (X,Y,Z) axes. The HPRC Z axis starts at the
- observer and passes through the centre of the sun. This is just the
- normalized opposite of the supplied observer's position vector. */
- palSlaDvn( obs, zhpr, &len );
- zhpr[0] *= -1.0;
- zhpr[1] *= -1.0;
- zhpr[2] *= -1.0;
-
-/* The HPR Y axis is perpendicular to both the Z axis and the solar north
- pole vector. So find the solar north pole vector in AST__HAEC coords. */
- SolarPole( mjd, pole, status );
-
-/* Find the HPR Y axis by taking the vector product of the Z axis and
- the solar north pole vector, and then normalize it into a unit vector.
- Note, HPR (X,Y,Z) axes form a left-handed system! */
- palSlaDvxv( pole, zhpr, ytemp );
- palSlaDvn( ytemp, yhpr, &len );
-
-/* The HPRC X axis is perpendicular to both Y and Z axis, and forms a
- left-handed system. The resulting vector will be of unit length
- since the y and z vectors are both of unit length, and are
- perpendicular to each other. It therefore does not need to be
- normalized.*/
- palSlaDvxv( zhpr, yhpr, xhpr );
-
-/* The HPRC X, Y and Z unit vectors form the columns of the required matrix. */
- for( i = 0; i < 3; i++ ) {
- mat[ i ][ 0 ] = xhpr[ i ];
- mat[ i ][ 1 ] = yhpr[ i ];
- mat[ i ][ 2 ] = zhpr[ i ];
- offset[ i ] = obs[ i ];
- }
-}
-
-static void J2000H( int forward, int npoint, double *alpha, double *delta, int *status ){
-/*
-* Name:
-* J2000H
-
-* Purpose:
-* Convert dynamical J2000 equatorial coords to ICRS.
-
-* Type:
-* Private member function.
-
-* Synopsis:
-* #include "slamap.h"
-* void J2000H( int forward, int npoint, double *alpha, double *delta, int *status )
-
-* Class Membership:
-* SlaMap method.
-
-* Description:
-* This function converts the supplied dynamical J2000 equatorial coords
-* to ICRS (or vice-versa).
-
-* Parameters:
-* forward
-* Do forward transformation?
-* npoint
-* Number of points to transform.
-* alpha
-* Pointer to longitude values.
-* delta
-* Pointer to latitude values.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- int i; /* Loop count */
- double rmat[3][3]; /* J2000 -> ICRS rotation matrix */
- double v1[3]; /* J2000 vector */
- double v2[3]; /* ICRS vector */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get the J2000 to ICRS rotation matrix (supplied by P.T. Wallace) */
- palSlaDeuler( "XYZ", -0.0068192*AS2R, 0.0166172*AS2R, 0.0146000*AS2R,
- rmat );
-
-/* Loop round all points. */
- for( i = 0; i < npoint; i++ ) {
-
-/* Convert from (alpha,delta) to 3-vector */
- palSlaDcs2c( alpha[ i ], delta[ i ], v1 );
-
-/* Rotate the 3-vector */
- if( forward ) {
- palSlaDmxv( rmat, v1, v2 );
- } else {
- palSlaDimxv( rmat, v1, v2 );
- }
-
-/* Convert from 3-vector to (alpha,delta) */
- palSlaDcc2s( v2, alpha + i, delta + i );
- }
-}
-
-void astSTPConv1_( double mjd, int in_sys, double in_obs[3], double in[3],
- int out_sys, double out_obs[3], double out[3], int *status ){
-/*
-*+
-* Name:
-* astSTPConv1
-
-* Purpose:
-* Converts a 3D solar system position between specified STP coordinate
-* systems.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "slamap.h"
-* void astSTPConv1( double mjd, int in_sys, double in_obs[3],
-* double in[3], int out_sys, double out_obs[3],
-* double out[3] )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function converts a single 3D solar-system position from the
-* specified input coordinate system to the specified output coordinate
-* system. See astSTPConv for a list of supported coordinate systems.
-
-* Parameters:
-* mjd
-* The Modified Julian Date to which the coordinate systems refer.
-* in_sys
-* The coordinate system in which the input positions are supplied.
-* in_obs
-* The position of the observer in AST__HAEC coordinates. This is only
-* needed if the input system is an observer-centric system. If this
-* is not the case, a NULL pointer can be supplied. A NULL pointer
-* can also be supplied to indicate that he observer is at the centre of
-* the earth at the specified date.
-* in
-* A 3-element array holding the input position.
-* out_sys
-* The coordinate system in which the input positions are supplied.
-* out_obs
-* The position of the observer in AST__HAEC coordinates. This is only
-* needed if the output system is an observer-centric system. If this
-* is not the case, a NULL pointer can be supplied. A NULL pointer
-* can also be supplied to indicate that he observer is at the centre of
-* the earth at the specified date.
-* out
-* A 3-element array holding the output position.
-
-* Notes:
-* - The "in" and "out" arrays may safely point to the same memory.
-* - Output longitude values are always in the range 0 - 2.PI.
-
-*-
-*/
-
-/* Local Variables: */
- double *ins[ 3 ]; /* The input position */
- double *outs[ 3 ]; /* The output position */
-
-/* Store pointers to the supplied arrays suitable for passing to STPConv. */
- ins[ 0 ] = in;
- ins[ 1 ] = in + 1;
- ins[ 2 ] = in + 2;
- outs[ 0 ] = out;
- outs[ 1 ] = out + 1;
- outs[ 2 ] = out + 2;
-
-/* Convert the position. */
- STPConv( mjd, 0, 1, in_sys, in_obs, ins, out_sys, out_obs, outs, status );
-
-}
-
-void astSTPConv_( double mjd, int n, int in_sys, double in_obs[3],
- double *in[3], int out_sys, double out_obs[3],
- double *out[3], int *status ){
-/*
-*+
-* Name:
-* astSTPConv
-
-* Purpose:
-* Converts a set of 3D solar system positions between specified STP
-* coordinate systems.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "slamap.h"
-* void astSTPConv( double mjd, int n, int in_sys, double in_obs[3],
-* double *in[3], int out_sys, double out_obs[3],
-* double *out[3] )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function converts a set of 3D solar-system positions from
-* the specified input coordinate system to the specified output
-* coordinate system.
-
-* Parameters:
-* mjd
-* The Modified Julian Date to which the coordinate systems refer.
-* in_sys
-* The coordinate system in which the input positions are supplied
-* (see below).
-* in_obs
-* The position of the observer in AST__HAEC coordinates. This is only
-* needed if the input system is an observer-centric system. If this
-* is not the case, a NULL pointer can be supplied. A NULL pointer
-* can also be supplied to indicate that he observer is at the centre of
-* the earth at the specified date.
-* in
-* A 3-element array holding the input positions. Each of the 3
-* elements should point to an array of "n" axis values. For spherical
-* input systems, in[3] can be supplied as NULL, in which case a
-* constant value of 1 AU will be used.
-* out_sys
-* The coordinate system in which the input positions are supplied
-* (see below).
-* out_obs
-* The position of the observer in AST__HAEC coordinates. This is only
-* needed if the output system is an observer-centric system. If this
-* is not the case, a NULL pointer can be supplied. A NULL pointer
-* can also be supplied to indicate that he observer is at the centre of
-* the earth at the specified date.
-* out
-* A 3-element array holding the output positions. Each of the 3
-* elements should point to an array of "n" axis values. If in[3] is
-* NULL, no values will be assigned to out[3].
-
-* Notes:
-* - The "in" and "out" arrays may safely point to the same memory.
-* - Output longitude values are always in the range 0 - 2.PI.
-
-* Supported Coordinate Systems:
-* Coordinate systems are either spherical or Cartesian, and are right
-* handed (unless otherwise indicated). Spherical systems use axis 0 for
-* longitude, axis 1 for latitude, and axis 2 for radius. Cartesian systems
-* use 3 mutually perpendicular axes; X is axis 0 and points towards the
-* intersection of the equator and the zero longitude meridian of the
-* corresponding spherical system, Y is axis 1 and points towards longitude
-* of +90 degrees, Z is axis 2 and points twowards the north pole. All
-* angles are in radians and all distances are in metres. The following
-* systems are supported:
-*
-* - AST__HAE: Heliocentric-aries-ecliptic spherical coordinates. Centred
-* at the centre of the sun. The north pole points towards the J2000
-* ecliptic north pole, and meridian of zero longitude includes the
-* J2000 equinox.
-*
-* - AST__HAEC: Heliocentric-aries-ecliptic cartesian coordinates. Origin
-* at the centre of the sun. The Z axis points towards the J2000 ecliptic
-* north pole, and the X axis points towards the J2000 equinox.
-*
-* - AST__HAQ: Heliocentric-aries-equatorial spherical coordinates. Centred
-* at the centre of the sun. The north pole points towards the FK5 J2000
-* equatorial north pole, and meridian of zero longitude includes the
-* FK5 J2000 equinox.
-*
-* - AST__HAQC: Heliocentric-aries-equatorial cartesian coordinates. Origin
-* at the centre of the sun. The Z axis points towards the FK5 J2000
-* equatorial north pole, and the X axis points towards the FK5 J2000
-* equinox.
-*
-* - AST__HG: Heliographic spherical coordinates. Centred at the centre of
-* the sun. North pole points towards the solar north pole at the given
-* date. The meridian of zero longitude includes the sun-earth line at
-* the given date.
-*
-* - AST__HGC: Heliographic cartesian coordinates. Origin at the centre of
-* the sun. The Z axis points towards the solar north pole at the given
-* date. The X axis is in the plane spanned by the Z axis, and the
-* sun-earth line at the given date.
-*
-* - AST__HPC: Helioprojective-cartesian spherical coordinates. A
-* left-handed system (that is, longitude increases westwards), centred
-* at the specified observer position. The intersection of the
-* zero-longitude meridian and the equator coincides with the centre of
-* the sun as seen from the observers position. The zero longitude
-* meridian includes the solar north pole at the specified date.
-*
-* - AST__HPCC: Helioprojective-cartesian cartesian coordinates. A
-* left-handed system with origin at the specified observer position. The
-* X axis points towards the centre of the sun as seen from the observers
-* position. The X-Z plane includes the solar north pole at the specified
-* date.
-*
-* - AST__HPR: Helioprojective-radial spherical coordinates. A left-handed
-* system (that is, longitude increases westwards), centred at the
-* specified observer position. The north pole points towards the centre
-* of the sun as seen from the observers position. The zero longitude
-* meridian includes the solar north pole at the specified date.
-*
-* - AST__HPRC: Helioprojective-radial cartesian coordinates. A left-handed
-* system with origin at the specified observer position. The Z axis points
-* towards the centre of the sun as seen from the observers position. The
-* X-Z plane includes the solar north pole at the specified date.
-*
-* - AST__GSE: Geocentric-solar-ecliptic spherical coordinates. Centred at
-* the centre of the earth at the given date. The north pole points towards
-* the J2000 ecliptic north pole, and the meridian of zero longitude
-* includes the Sun.
-*
-* - AST__GSEC: Geocentric-solar-ecliptic cartesian coordinates. Origin at
-* the centre of the earth at the given date. The X axis points towards the
-* centre of sun, and the X-Z plane contains the J2000 ecliptic north
-* pole. Since the earth may not be exactly in the mean ecliptic of
-* J2000, the Z axis will not in general correspond exactly to the
-* ecliptic north pole.
-*-
-*/
- STPConv( mjd, 0, n, in_sys, in_obs, in, out_sys, out_obs, out, status );
-}
-
-static void STPConv( double mjd, int ignore_origins, int n, int in_sys,
- double in_obs[3], double *in[3], int out_sys,
- double out_obs[3], double *out[3], int *status ){
-/*
-* Name:
-* STPConv
-
-* Purpose:
-* Convert a set of 3D solar system positions between specified STP
-* coordinate systems.
-
-* Type:
-* Private member function.
-
-* Synopsis:
-* #include "slamap.h"
-* void STPConv( double mjd, int ignore_origins, int n, int in_sys,
-* double in_obs[3], double *in[3], int out_sys,
-* double out_obs[3], double *out[3], int *status ){
-
-* Class Membership:
-* Frame method.
-
-* Description:
-* This function converts a set of 3D solar-system positions from
-* the specified input coordinate system to the specified output
-* coordinate system. See astSTPConv for a list of the available
-* coordinate systems.
-
-* Parameters:
-* mjd
-* The Modified Julian Date to which the coordinate systems refer.
-* ignore_origins
-* If non-zero, then the coordinate system definitions are modified so
-* that all cartesian systems have the origin at the centre of the
-* Sun. If zero, the correct origins are used for each individual
-* system.
-* n
-* The number of positions to transform.
-* in_sys
-* The coordinate system in which the input positions are supplied
-* in_obs
-* The position of the observer in AST__HAEC coordinates. This is only
-* needed if the input system is an observer-centric system. If this
-* is not the case, a NULL pointer can be supplied. A NULL pointer
-* can also be supplied to indicate that he observer is at the centre of
-* the earth at the specified date.
-* in
-* A 3-element array holding the input positions. Each of the 3
-* elements should point to an array of "n" axis values. For spherical
-* input systems, in[3] can be supplied as NULL, in which case a
-* constant value of 1 AU will be used.
-* out_sys
-* The coordinate system in which the input positions are supplied
-* (see "Supported Coordinate Systems" below).
-* out_obs
-* The position of the observer in AST__HAEC coordinates. This is only
-* needed if the output system is an observer-centric system. If this
-* is not the case, a NULL pointer can be supplied. A NULL pointer
-* can also be supplied to indicate that he observer is at the centre of
-* the earth at the specified date.
-* out
-* A 3-element array holding the input positions. Each of the 3
-* elements should point to an array of "n" axis values. For spherical
-* output coordinates, out[2] may be NULL, in which case the output
-* radius values are thrown away.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - Output longitude values are always in the range 0 - 2.PI.
-* - The "in" and "out" arrays may safely point to the same memory.
-* - The contents of the output array is left unchanged if an error
-* has already occurred.
-*/
-
-/* Local Variables: */
- double *out2; /* Pointer to output third axis values */
- double *px; /* Pointer to next X axis value */
- double *py; /* Pointer to next Y axis value */
- double *pz; /* Pointer to next Z axis value */
- double lat; /* Latitude value */
- double lng; /* Longitude value */
- double mat1[3][3]; /* Input->HAEC rotation matrix */
- double mat2[3][3]; /* Output->HAEC rotation matrix */
- double mat3[3][3]; /* HAEC->output rotation matrix */
- double mat4[3][3]; /* Input->output rotation matrix */
- double off1[3]; /* Origin of input system in HAEC coords */
- double off2[3]; /* Origin of output system in HAEC coords */
- double off3[3]; /* HAEC vector from output origin to input origin */
- double off4[3]; /* Position of input origin within output system */
- double p[3]; /* Current position */
- double q[3]; /* New position */
- double radius; /* Radius value */
- int cur_sys; /* Current system for output values */
- int i; /* Loop count */
- int j; /* Loop count */
- int inCsys; /* Input cartesian system */
- int outCsys; /* Output cartesian system */
- size_t nbyte; /* Amount of memory to copy */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* If out[2] was supplied as null, allocate memory to hold third axis
- values. Otherwise, use the supplied array. */
- nbyte = n*sizeof( double );
- if( !out[2] ) {
- out2 = (double *) astMalloc( nbyte );
- } else {
- out2 = out[2];
- }
-
-/* Copy the input data to the output data and note that the output values
- are currently in the same system as the input values. */
- memcpy ( out[ 0 ], in[ 0 ], nbyte );
- memcpy ( out[ 1 ], in[ 1 ], nbyte );
- if( in[2] ) {
- memcpy ( out2, in[ 2 ], nbyte );
- } else {
- for( i = 0; i < n; i++ ) out2[ i ] = AST__AU;
- }
- cur_sys = in_sys;
-
-/* Skip the next bit if the output values are now in the required system. */
- if( cur_sys != out_sys ) {
-
-/* If the current system is spherical note the corresponding cartesian
- system. If the current system is cartesian, use it. */
- if( cur_sys == AST__HG ){
- inCsys = AST__HGC;
- } else if( cur_sys == AST__HAQ ){
- inCsys = AST__HAQC;
- } else if( cur_sys == AST__HAE ){
- inCsys = AST__HAEC;
- } else if( cur_sys == AST__GSE ){
- inCsys = AST__GSEC;
- } else if( cur_sys == AST__HPC ){
- inCsys = AST__HPCC;
- } else if( cur_sys == AST__HPR ){
- inCsys = AST__HPRC;
- } else {
- inCsys = cur_sys;
- }
-
-/* Convert input spherical positions into the corresponding cartesian system,
- putting the results in the "out" arrays. Modify the input system
- accordingly. */
- if( cur_sys != inCsys ) {
- px = out[ 0 ];
- py = out[ 1 ];
- pz = out2;
- for( i = 0; i < n; i++ ) {
- p[ 0 ] = *px;
- p[ 1 ] = *py;
- p[ 2 ] = *pz;
- if( p[ 0 ] != AST__BAD &&
- p[ 1 ] != AST__BAD &&
- p[ 2 ] != AST__BAD ) {
- palSlaDcs2c( p[ 0 ], p[ 1 ], q );
- *(px++) = q[ 0 ]*p[ 2 ];
- *(py++) = q[ 1 ]*p[ 2 ];
- *(pz++) = q[ 2 ]*p[ 2 ];
- } else {
- *(px++) = AST__BAD;
- *(py++) = AST__BAD;
- *(pz++) = AST__BAD;
- }
- }
-
- cur_sys = inCsys;
-
- }
- }
-
-/* Skip the next bit if the output values are now in the required system. */
- if( cur_sys != out_sys ) {
-
-/* If the required output system is spherical, note the corresponding
- cartesian system. If the required output system is cartesian, use it.*/
- if( out_sys == AST__HG ){
- outCsys = AST__HGC;
- } else if( out_sys == AST__HAQ ){
- outCsys = AST__HAQC;
- } else if( out_sys == AST__HAE ){
- outCsys = AST__HAEC;
- } else if( out_sys == AST__GSE ){
- outCsys = AST__GSEC;
- } else if( out_sys == AST__HPC ){
- outCsys = AST__HPCC;
- } else if( out_sys == AST__HPR ){
- outCsys = AST__HPRC;
- } else {
- outCsys = out_sys;
- }
-
-/* Skip the next bit if the output values are already in the required
- output cartesian system. */
- if( cur_sys != outCsys ) {
-
-/* Obtain an offset vector and a rotation matrix which moves positions from
- the current (Cartesian) system to the AST__HAEC system. The offset vector
- returned by these functions is the AST__HAEC coordinates of the origin of
- the current system. The matrix rotates direction vectors from the current
- system to the AST__HAEC system. */
- if( cur_sys == AST__HGC ) {
- Hgc( mjd, mat1, off1, status );
-
- } else if( cur_sys == AST__HAEC ) {
- Haec( mjd, mat1, off1, status );
-
- } else if( cur_sys == AST__HAQC ) {
- Haqc( mjd, mat1, off1, status );
-
- } else if( cur_sys == AST__GSEC ) {
- Gsec( mjd, mat1, off1, status );
-
- } else if( cur_sys == AST__HPCC ) {
- Hpcc( mjd, in_obs, mat1, off1, status );
-
- } else if( cur_sys == AST__HPRC ) {
- Hprc( mjd, in_obs, mat1, off1, status );
-
- } else {
- astError( AST__INTER, "astSTPConv(SlaMap): Unsupported input "
- "cartesian coordinate system type %d (internal AST "
- "programming error).", status, cur_sys );
- }
-
-/* Obtain an offset vector and a rotation matrix which moves positions from
- the required output Cartesian system to the AST__HAEC system. */
- if( outCsys == AST__HGC ) {
- Hgc( mjd, mat2, off2, status );
-
- } else if( outCsys == AST__HAEC ) {
- Haec( mjd, mat2, off2, status );
-
- } else if( outCsys == AST__HAQC ) {
- Haqc( mjd, mat2, off2, status );
-
- } else if( outCsys == AST__GSEC ) {
- Gsec( mjd, mat2, off2, status );
-
- } else if( outCsys == AST__HPCC ) {
- Hpcc( mjd, out_obs, mat2, off2, status );
-
- } else if( outCsys == AST__HPRC ) {
- Hprc( mjd, out_obs, mat2, off2, status );
-
- } else {
- astError( AST__INTER, "astSTPConv(SlaMap): Unsupported output "
- "cartesian coordinate system type %d (internal AST "
- "programming error).", status, outCsys );
- }
-
-/* Invert the second matrix to get the matrix which rotates AST__HAEC coords
- to the output cartesian system. This an be done simply by transposing it
- since all the matrices are 3D rotations. */
- for( i = 0; i < 3; i++ ) {
- for( j = 0; j < 3; j++ ) mat3[ i ][ j ] = mat2[ j ][ i ];
-
-/* Find the offset in AST__HAEC coords from the origin of the output
- cartesian system to the origin of the current system. */
- off3[ i ] = off1[ i ] - off2[ i ];
- }
-
-/* Unless the origins are being ignored, use the above matrix to rotate the
- above AST__HAEC offset into the output cartesian system. If origins are
- being ignored, use an offset of zero. */
- if( ignore_origins ) {
- off4[ 0 ] = 0.0;
- off4[ 1 ] = 0.0;
- off4[ 2 ] = 0.0;
- } else {
- palSlaDmxv( mat3, off3, off4 );
- }
-
-/* Concatentate the two matrices to get the matrix which rotates from the
- current system to the output cartesian system. */
- palSlaDmxm( mat3, mat1, mat4 );
-
-/* Use the matrix and offset to convert current positions to output
- cartesian positions. */
- px = out[ 0 ];
- py = out[ 1 ];
- pz = out2;
-
- for( i = 0; i < n; i++ ) {
- p[ 0 ] = *px;
- p[ 1 ] = *py;
- p[ 2 ] = *pz;
-
- if( p[ 0 ] != AST__BAD &&
- p[ 1 ] != AST__BAD &&
- p[ 2 ] != AST__BAD ) {
- palSlaDmxv( mat4, p, q );
- *(px++) = q[ 0 ] + off4[ 0 ];
- *(py++) = q[ 1 ] + off4[ 1 ];
- *(pz++) = q[ 2 ] + off4[ 2 ];
- } else {
- *(px++) = AST__BAD;
- *(py++) = AST__BAD;
- *(pz++) = AST__BAD;
- }
- }
-
-/* Indicate that the output values are now in the required output
- cartesian system. */
- cur_sys = outCsys;
-
- }
- }
-
-/* Skip the next bit if the output values are now in the required system. */
- if( cur_sys != out_sys ) {
-
-/* The only reason why the output values may not be in the required output
- system is because the output system is spherical. Convert output Cartesian
- positions to output spherical positions. */
- px = out[ 0 ];
- py = out[ 1 ];
- pz = out2;
- for( i = 0; i < n; i++ ) {
- p[ 0 ] = *px;
- p[ 1 ] = *py;
- p[ 2 ] = *pz;
- if( p[ 0 ] != AST__BAD &&
- p[ 1 ] != AST__BAD &&
- p[ 2 ] != AST__BAD ) {
- palSlaDvn( p, q, &radius );
- palSlaDcc2s( q, &lng, &lat );
- *(px++) = palSlaDranrm( lng );
- *(py++) = lat;
- *(pz++) = radius;
- } else {
- *(px++) = AST__BAD;
- *(py++) = AST__BAD;
- *(pz++) = AST__BAD;
- }
- }
- }
-
-/* If out[2] was supplied as null, free the memory used to hold third axis
- values. */
- if( !out[2] ) out2 = (double *) astFree( (void *) out2 );
-}
-
-void astInitSlaMapVtab_( AstSlaMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitSlaMapVtab
-
-* Purpose:
-* Initialise a virtual function table for a SlaMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "slamap.h"
-* void astInitSlaMapVtab( AstSlaMapVtab *vtab, const char *name )
-
-* Class Membership:
-* SlaMap vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the SlaMap class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsASlaMap) to determine if an object belongs to
- this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
- vtab->SlaAdd = SlaAdd;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- object->Equal = Equal;
- mapping->MapMerge = MapMerge;
-
-/* Declare the copy constructor, destructor and class dump
- function. */
- astSetCopy( vtab, Copy );
- astSetDelete( vtab, Delete );
- astSetDump( vtab, Dump, "SlaMap",
- "Conversion between sky coordinate systems" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing an SlaMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* SlaMap method (over-rides the protected astMapMerge method
-* inherited from the Mapping class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated SlaMap in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated SlaMap with one which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated SlaMap which is to be merged with
-* its neighbours. This should be a cloned copy of the SlaMap
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* SlaMap it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated SlaMap resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstMapping *new; /* Pointer to replacement Mapping */
- AstSlaMap *slamap; /* Pointer to SlaMap */
- const char *argdesc[ MAX_SLA_ARGS ]; /* Argument descriptions (junk) */
- const char *class; /* Pointer to Mapping class string */
- const char *comment; /* Pointer to comment string (junk) */
- double (*cvtargs)[ MAX_SLA_ARGS ]; /* Pointer to argument arrays */
- int *cvttype; /* Pointer to transformation type codes */
- int *narg; /* Pointer to argument count array */
- int done; /* Finished (no further simplification)? */
- int iarg; /* Loop counter for arguments */
- int icvt1; /* Loop initial value */
- int icvt2; /* Loop final value */
- int icvt; /* Loop counter for transformation steps */
- int ikeep; /* Index to store step being kept */
- int imap1; /* Index of first SlaMap to merge */
- int imap2; /* Index of last SlaMap to merge */
- int imap; /* Loop counter for Mappings */
- int inc; /* Increment for transformation step loop */
- int invert; /* SlaMap applied in inverse direction? */
- int istep; /* Loop counter for transformation steps */
- int keep; /* Keep transformation step? */
- int ngone; /* Number of Mappings eliminated */
- int nstep0; /* Original number of transformation steps */
- int nstep; /* Total number of transformation steps */
- int result; /* Result value to return */
- int simpler; /* Simplification possible? */
- int unit; /* Replacement Mapping is a UnitMap? */
-
-/* Initialise. */
- result = -1;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* SlaMaps can only be merged if they are in series (or if there is
- only one Mapping present, in which case it makes no difference), so
- do nothing if they are not. */
- if ( series || ( *nmap == 1 ) ) {
-
-/* Initialise the number of transformation steps to be merged to equal
- the number in the nominated SlaMap. */
- nstep = ( (AstSlaMap *) ( *map_list )[ where ] )->ncvt;
-
-/* Search adjacent lower-numbered Mappings until one is found which is
- not an SlaMap. Accumulate the number of transformation steps
- involved in any SlaMaps found. */
- imap1 = where;
- while ( ( imap1 - 1 >= 0 ) && astOK ) {
- class = astGetClass( ( *map_list )[ imap1 - 1 ] );
- if ( !astOK || strcmp( class, "SlaMap" ) ) break;
- nstep += ( (AstSlaMap *) ( *map_list )[ imap1 - 1 ] )->ncvt;
- imap1--;
- }
-
-/* Similarly search adjacent higher-numbered Mappings. */
- imap2 = where;
- while ( ( imap2 + 1 < *nmap ) && astOK ) {
- class = astGetClass( ( *map_list )[ imap2 + 1 ] );
- if ( !astOK || strcmp( class, "SlaMap" ) ) break;
- nstep += ( (AstSlaMap *) ( *map_list )[ imap2 + 1 ] )->ncvt;
- imap2++;
- }
-
-/* Remember the initial number of transformation steps. */
- nstep0 = nstep;
-
-/* Allocate memory for accumulating a list of all the transformation
- steps involved in all the SlaMaps found. */
- cvttype = astMalloc( sizeof( int ) * (size_t) nstep );
- cvtargs = astMalloc( sizeof( double[ MAX_SLA_ARGS ] ) * (size_t) nstep );
- narg = astMalloc( sizeof( int ) * (size_t) nstep );
-
-/* Loop to obtain the transformation data for each SlaMap being merged. */
- nstep = 0;
- for ( imap = imap1; astOK && ( imap <= imap2 ); imap++ ) {
-
-/* Obtain a pointer to the SlaMap and note if it is being applied in
- its inverse direction. */
- slamap = (AstSlaMap *) ( *map_list )[ imap ];
- invert = ( *invert_list )[ imap ];
-
-/* Set up loop limits and an increment to scan the transformation
- steps in each SlaMap in either the forward or reverse direction, as
- dictated by the associated "invert" value. */
- icvt1 = invert ? slamap->ncvt - 1 : 0;
- icvt2 = invert ? -1 : slamap->ncvt;
- inc = invert ? -1 : 1;
-
-/* Loop through each transformation step in the SlaMap. */
- for ( icvt = icvt1; icvt != icvt2; icvt += inc ) {
-
-/* For simplicity, free any extra information stored with the conversion
- step (it will be recreated as and when necessary). */
- slamap->cvtextra[ icvt ] = astFree( slamap->cvtextra[ icvt ] );
-
-/* Store the transformation type code and use "CvtString" to determine
- the associated number of arguments. Then store these arguments. */
- cvttype[ nstep ] = slamap->cvttype[ icvt ];
- (void) CvtString( cvttype[ nstep ], &comment, narg + nstep,
- argdesc, status );
- if ( !astOK ) break;
- for ( iarg = 0; iarg < narg[ nstep ]; iarg++ ) {
- cvtargs[ nstep ][ iarg ] = slamap->cvtargs[ icvt ][ iarg ];
- }
-
-/* If the SlaMap is inverted, we must not only accumulate its
- transformation steps in reverse, but also apply them in
- reverse. For some steps this means swapping arguments, for some it
- means changing the transformation type code to a complementary
- value, and for others it means both. Define macros to perform each
- of these changes. */
-
-/* Macro to swap the values of two nominated arguments if the
- transformation type code matches "code". */
-#define SWAP_ARGS( code, arg1, arg2 ) \
- if ( cvttype[ nstep ] == code ) { \
- double tmp = cvtargs[ nstep ][ arg1 ]; \
- cvtargs[ nstep ][ arg1 ] = cvtargs[ nstep ][ arg2 ]; \
- cvtargs[ nstep ][ arg2 ] = tmp; \
- }
-
-/* Macro to exchange a transformation type code for its inverse (and
- vice versa). */
-#define SWAP_CODES( code1, code2 ) \
- if ( cvttype[ nstep ] == code1 ) { \
- cvttype[ nstep ] = code2; \
- } else if ( cvttype[ nstep ] == code2 ) { \
- cvttype[ nstep ] = code1; \
- }
-
-/* Use these macros to apply the changes where needed. */
- if ( invert ) {
-
-/* E-terms of aberration. */
-/* ---------------------- */
-/* Exchange addition and subtraction of E-terms. */
- SWAP_CODES( AST__SLA_ADDET, AST__SLA_SUBET )
-
-/* Bessel-Newcomb pre-IAU 1976 (FK4) precession model. */
-/* --------------------------------------------------- */
-/* Exchange the starting and ending Besselian epochs. */
- SWAP_ARGS( AST__SLA_PREBN, 0, 1 )
-
-/* IAU 1975 (FK5) precession model. */
-/* -------------------------------- */
-/* Exchange the starting and ending epochs. */
- SWAP_ARGS( AST__SLA_PREC, 0, 1 )
-
-/* FK4 to FK5 (no proper motion or parallax). */
-/* ------------------------------------------ */
-/* Exchange FK5 to FK4 conversion for its inverse, and vice versa. */
- SWAP_CODES( AST__SLA_FK54Z, AST__SLA_FK45Z )
-
-/* Geocentric apparent to mean place. */
-/* ---------------------------------- */
-/* Exchange the transformation code for its inverse and also exchange
- the order of the date and equinox arguments. */
- SWAP_CODES( AST__SLA_AMP, AST__SLA_MAP )
- SWAP_ARGS( AST__SLA_AMP, 0, 1 )
- SWAP_ARGS( AST__SLA_MAP, 0, 1 )
-
-/* Ecliptic coordinates to FK5 J2000.0 equatorial. */
-/* ------------------------------------------- */
-/* Exchange the transformation code for its inverse. */
- SWAP_CODES( AST__SLA_ECLEQ, AST__SLA_EQECL )
-
-/* Horizon to equatorial. */
-/* ---------------------- */
-/* Exchange the transformation code for its inverse. */
- SWAP_CODES( AST__SLA_DH2E, AST__SLA_DE2H )
-
-/* Galactic coordinates to FK5 J2000.0 equatorial. */
-/* ------------------------------------------- */
-/* Exchange the transformation code for its inverse. */
- SWAP_CODES( AST__SLA_GALEQ, AST__SLA_EQGAL )
-
-/* ICRS coordinates to FK5 J2000.0 equatorial. */
-/* ------------------------------------------- */
-/* Exchange the transformation code for its inverse. */
- SWAP_CODES( AST__SLA_HFK5Z, AST__SLA_FK5HZ )
-
-/* Galactic to supergalactic coordinates. */
-/* -------------------------------------- */
-/* Exchange the transformation code for its inverse. */
- SWAP_CODES( AST__SLA_GALSUP, AST__SLA_SUPGAL )
-
-/* FK5 J2000 equatorial coordinates to Helioprojective-Cartesian. */
-/* -------------------------------------------------------------- */
-/* Exchange the transformation code for its inverse. */
- SWAP_CODES( AST__EQHPC, AST__HPCEQ )
-
-/* FK5 J2000 equatorial coordinates to Helioprojective-Radial. */
-/* ----------------------------------------------------------- */
-/* Exchange the transformation code for its inverse. */
- SWAP_CODES( AST__EQHPR, AST__HPREQ )
-
-/* FK5 J2000 equatorial coordinates to Helio-ecliptic. */
-/* --------------------------------------------------- */
-/* Exchange the transformation code for its inverse. */
- SWAP_CODES( AST__EQHE, AST__HEEQ )
-
-/* Dynamical J2000.0 to ICRS. */
-/* -------------------------- */
-/* Exchange the transformation code for its inverse. */
- SWAP_CODES( AST__J2000H, AST__HJ2000 )
-
-/* HA to RA */
-/* -------- */
-/* Exchange the transformation code for its inverse. */
- SWAP_CODES( AST__H2R, AST__R2H )
-
- }
-
-/* Undefine the local macros. */
-#undef SWAP_ARGS
-#undef SWAP_CODES
-
-/* Count the transformation steps. */
- nstep++;
- }
- }
-
-/* Loop to simplify the sequence of transformation steps until no
- further improvement is possible. */
- done = 0;
- while ( astOK && !done ) {
-
-/* Examine each remaining transformation step in turn. */
- ikeep = -1;
- for ( istep = 0; istep < nstep; istep++ ) {
-
-/* Initially assume we will retain the current step. */
- keep = 1;
-
-/* Eliminate redundant precession corrections. */
-/* ------------------------------------------- */
-/* First check if this is a redundant precession transformation
- (i.e. the starting and ending epochs are the same). If so, then
- note that it should not be kept. */
- if ( ( ( cvttype[ istep ] == AST__SLA_PREBN ) ||
- ( cvttype[ istep ] == AST__SLA_PREC ) ) &&
- EQUAL( cvtargs[ istep ][ 0 ], cvtargs[ istep ][ 1 ] ) ) {
- keep = 0;
-
-/* The remaining simplifications act to combine adjacent
- transformation steps, so only apply them while there are at least 2
- steps left. */
- } else if ( istep < ( nstep - 1 ) ) {
-
-/* Define a macro to test if two adjacent transformation type codes
- have specified values. */
-#define PAIR_CVT( code1, code2 ) \
- ( ( cvttype[ istep ] == code1 ) && \
- ( cvttype[ istep + 1 ] == code2 ) )
-
-/* Combine adjacent precession corrections. */
-/* ---------------------------------------- */
-/* If two precession corrections are adjacent, and have an equinox
- value in common, then they may be combined into a single correction
- by eliminating the common equinox. */
- if ( ( PAIR_CVT( AST__SLA_PREBN, AST__SLA_PREBN ) ||
- PAIR_CVT( AST__SLA_PREC, AST__SLA_PREC ) ) &&
- EQUAL( cvtargs[ istep ][ 1 ], cvtargs[ istep + 1 ][ 0 ] ) ) {
-
-/* Retain the second correction, changing its first argument, and
- eliminate the first correction. */
- cvtargs[ istep + 1 ][ 0 ] = cvtargs[ istep ][ 0 ];
- istep++;
-
-/* Eliminate redundant E-term handling. */
-/* ------------------------------------ */
-/* Check if adjacent steps implement a matching pair of corrections
- for the E-terms of aberration with the same argument value. If so,
- they will cancel, so eliminate them both. */
- } else if ( ( PAIR_CVT( AST__SLA_SUBET, AST__SLA_ADDET ) ||
- PAIR_CVT( AST__SLA_ADDET, AST__SLA_SUBET ) ) &&
- EQUAL( cvtargs[ istep ][ 0 ],
- cvtargs[ istep + 1 ][ 0 ] ) ) {
- istep++;
- keep = 0;
-
-/* Eliminate redundant FK4/FK5 conversions. */
-/* ---------------------------------------- */
-/* Similarly, check for a matching pair of FK4/FK5 conversions with
- the same argument value and eliminate them both if possible. */
- } else if ( ( PAIR_CVT( AST__SLA_FK45Z, AST__SLA_FK54Z ) ||
- PAIR_CVT( AST__SLA_FK54Z, AST__SLA_FK45Z ) ) &&
- EQUAL( cvtargs[ istep ][ 0 ],
- cvtargs[ istep + 1 ][ 0 ] ) ) {
- istep++;
- keep = 0;
-
-/* Eliminate redundant ICRS/FK5 conversions. */
-/* ----------------------------------------- */
-/* Similarly, check for a matching pair of ICRS/FK5 conversions with
- the same argument value and eliminate them both if possible. */
- } else if ( ( PAIR_CVT( AST__SLA_HFK5Z, AST__SLA_FK5HZ ) ||
- PAIR_CVT( AST__SLA_FK5HZ, AST__SLA_HFK5Z ) ) &&
- EQUAL( cvtargs[ istep ][ 0 ],
- cvtargs[ istep + 1 ][ 0 ] ) ) {
- istep++;
- keep = 0;
-
-/* Eliminate redundant geocentric apparent conversions. */
-/* ---------------------------------------------------- */
-/* As above, check for a matching pair of conversions with matching
- argument values (note the argument order reverses for the two
- directions) and eliminate them if possible. */
- } else if ( ( PAIR_CVT( AST__SLA_AMP, AST__SLA_MAP ) ||
- PAIR_CVT( AST__SLA_MAP, AST__SLA_AMP ) ) &&
- EQUAL( cvtargs[ istep ][ 0 ],
- cvtargs[ istep + 1 ][ 0 ] ) &&
- EQUAL( cvtargs[ istep ][ 1 ],
- cvtargs[ istep + 1 ][ 1 ] ) ) {
- istep++;
- keep = 0;
-
-/* Eliminate redundant ecliptic coordinate conversions. */
-/* ---------------------------------------------------- */
-/* This is handled in the same way as the FK4/FK5 case. */
- } else if ( ( PAIR_CVT( AST__SLA_ECLEQ, AST__SLA_EQECL ) ||
- PAIR_CVT( AST__SLA_EQECL, AST__SLA_ECLEQ ) ) &&
- EQUAL( cvtargs[ istep ][ 0 ],
- cvtargs[ istep + 1 ][ 0 ] ) ) {
- istep++;
- keep = 0;
-
-/* Eliminate redundant AzEl coordinate conversions. */
-/* ------------------------------------------------ */
- } else if ( ( PAIR_CVT( AST__SLA_DH2E, AST__SLA_DE2H ) ||
- PAIR_CVT( AST__SLA_DE2H, AST__SLA_DH2E ) ) &&
- EQUAL( cvtargs[ istep ][ 0 ],
- cvtargs[ istep + 1 ][ 0 ] ) &&
- EQUAL( cvtargs[ istep ][ 1 ],
- cvtargs[ istep + 1 ][ 1 ] ) ) {
- istep++;
- keep = 0;
-
-/* Eliminate redundant galactic coordinate conversions. */
-/* ---------------------------------------------------- */
-/* This is handled as above, except that there are no arguments to
- check. */
- } else if ( PAIR_CVT( AST__SLA_GALEQ, AST__SLA_EQGAL ) ||
- PAIR_CVT( AST__SLA_EQGAL, AST__SLA_GALEQ ) ) {
- istep++;
- keep = 0;
-
-/* Eliminate redundant supergalactic coordinate conversions. */
-/* --------------------------------------------------------- */
-/* This is handled as above. */
- } else if ( PAIR_CVT( AST__SLA_GALSUP, AST__SLA_SUPGAL ) ||
- PAIR_CVT( AST__SLA_SUPGAL, AST__SLA_GALSUP ) ) {
- istep++;
- keep = 0;
-
-/* Eliminate redundant helioprojective-Cartesian coordinate conversions. */
-/* --------------------------------------------------------------------- */
- } else if ( ( PAIR_CVT( AST__HPCEQ, AST__EQHPC ) ||
- PAIR_CVT( AST__EQHPC, AST__HPCEQ ) ) &&
- EQUAL( cvtargs[ istep ][ 0 ],
- cvtargs[ istep + 1 ][ 0 ] ) &&
- EQUAL( cvtargs[ istep ][ 1 ],
- cvtargs[ istep + 1 ][ 1 ] ) &&
- EQUAL( cvtargs[ istep ][ 2 ],
- cvtargs[ istep + 1 ][ 2 ] ) &&
- EQUAL( cvtargs[ istep ][ 3 ],
- cvtargs[ istep + 1 ][ 3 ] ) ) {
- istep++;
- keep = 0;
-
-/* Eliminate redundant helioprojective-Radial coordinate conversions. */
-/* --------------------------------------------------------------------- */
- } else if ( ( PAIR_CVT( AST__HPREQ, AST__EQHPR ) ||
- PAIR_CVT( AST__EQHPR, AST__HPREQ ) ) &&
- EQUAL( cvtargs[ istep ][ 0 ],
- cvtargs[ istep + 1 ][ 0 ] ) &&
- EQUAL( cvtargs[ istep ][ 1 ],
- cvtargs[ istep + 1 ][ 1 ] ) &&
- EQUAL( cvtargs[ istep ][ 2 ],
- cvtargs[ istep + 1 ][ 2 ] ) &&
- EQUAL( cvtargs[ istep ][ 3 ],
- cvtargs[ istep + 1 ][ 3 ] ) ) {
- istep++;
- keep = 0;
-
-/* Eliminate redundant helio-ecliptic coordinate conversions. */
-/* ---------------------------------------------------------- */
- } else if ( ( PAIR_CVT( AST__EQHE, AST__HEEQ ) ||
- PAIR_CVT( AST__HEEQ, AST__EQHE ) ) &&
- EQUAL( cvtargs[ istep ][ 0 ],
- cvtargs[ istep + 1 ][ 0 ] ) ) {
- istep++;
- keep = 0;
-
-/* Eliminate redundant dynamical J2000 coordinate conversions. */
-/* ----------------------------------------------------------- */
- } else if ( PAIR_CVT( AST__J2000H, AST__HJ2000 ) ||
- PAIR_CVT( AST__HJ2000, AST__J2000H ) ) {
- istep++;
- keep = 0;
-
-/* Eliminate redundant Hour Angle conversions. */
-/* ------------------------------------------- */
- } else if ( ( PAIR_CVT( AST__R2H, AST__H2R ) ||
- PAIR_CVT( AST__H2R, AST__R2H ) ) &&
- EQUAL( cvtargs[ istep ][ 0 ],
- cvtargs[ istep + 1 ][ 0 ] ) ) {
- istep++;
- keep = 0;
-
- }
-
-/* Undefine the local macro. */
-#undef PAIR_CVT
- }
-
-/* If the current transformation (possibly modified above) is being
- kept, then increment the index that identifies its new location in
- the list of transformation steps. */
- if ( keep ) {
- ikeep++;
-
-/* If the new location is different to its current location, copy the
- transformation data into the new location. */
- if ( ikeep != istep ) {
- cvttype[ ikeep ] = cvttype[ istep ];
- for ( iarg = 0; iarg < narg[ istep ]; iarg++ ) {
- cvtargs[ ikeep ][ iarg ] = cvtargs[ istep ][ iarg ];
- }
- narg[ ikeep ] = narg[ istep ];
- }
- }
- }
-
-/* Note if no simplification was achieved on this iteration (i.e. the
- number of transformation steps was not reduced). This is the signal
- to quit. */
- done = ( ( ikeep + 1 ) >= nstep );
-
-/* Note how many transformation steps now remain. */
- nstep = ikeep + 1;
- }
-
-/* Determine how many Mappings can be eliminated by condensing all
- those considered above into a single Mapping. */
- if ( astOK ) {
- ngone = imap2 - imap1;
-
-/* Determine if the replacement Mapping can be a UnitMap (a null
- Mapping). This will only be the case if all the transformation
- steps were eliminated above. */
- unit = ( nstep == 0 );
-
-/* Determine if simplification is possible. This will be the case if
- (a) Mappings were eliminated ("ngone" is non-zero), or (b) the
- number of transformation steps was reduced, or (c) the SlaMap(s)
- can be replaced by a UnitMap, or (d) if there was initially only
- one SlaMap present, its invert flag was set (this flag will always
- be cleared in the replacement Mapping). */
- simpler = ngone || ( nstep < nstep0 ) || unit ||
- ( *invert_list )[ where ];
-
-/* Do nothing more unless simplification is possible. */
- if ( simpler ) {
-
-/* If the replacement Mapping is a UnitMap, then create it. */
- if ( unit ) {
- new = (AstMapping *)
- astUnitMap( astGetNin( ( *map_list )[ where ] ), "", status );
-
-/* Otherwise, create a replacement SlaMap and add each of the
- remaining transformation steps to it. */
- } else {
- new = (AstMapping *) astSlaMap( 0, "", status );
- for ( istep = 0; istep < nstep; istep++ ) {
- AddSlaCvt( (AstSlaMap *) new, cvttype[ istep ],
- cvtargs[ istep ], status );
- }
- }
-
-/* Annul the pointers to the Mappings being eliminated. */
- if ( astOK ) {
- for ( imap = imap1; imap <= imap2; imap++ ) {
- ( *map_list )[ imap ] = astAnnul( ( *map_list )[ imap ] );
- }
-
-/* Insert the pointer and invert value for the new Mapping. */
- ( *map_list )[ imap1 ] = new;
- ( *invert_list )[ imap1 ] = 0;
-
-/* Move any subsequent Mapping information down to close the gap. */
- for ( imap = imap2 + 1; imap < *nmap; imap++ ) {
- ( *map_list )[ imap - ngone ] = ( *map_list )[ imap ];
- ( *invert_list )[ imap - ngone ] = ( *invert_list )[ imap ];
- }
-
-/* Blank out any information remaining at the end of the arrays. */
- for ( imap = ( *nmap - ngone ); imap < *nmap; imap++ ) {
- ( *map_list )[ imap ] = NULL;
- ( *invert_list )[ imap ] = 0;
- }
-
-/* Decrement the Mapping count and return the index of the first
- Mapping which was eliminated. */
- ( *nmap ) -= ngone;
- result = imap1;
-
-/* If an error occurred, annul the new Mapping pointer. */
- } else {
- new = astAnnul( new );
- }
- }
- }
-
-/* Free the memory used for the transformation steps. */
- cvttype = astFree( cvttype );
- cvtargs = astFree( cvtargs );
- narg = astFree( narg );
- }
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) result = -1;
-
-/* Return the result. */
- return result;
-}
-
-static void SlaAdd( AstSlaMap *this, const char *cvt, const double args[], int *status ) {
-/*
-*++
-* Name:
-c astSlaAdd
-f AST_SLAADD
-
-* Purpose:
-* Add a celestial coordinate conversion to an SlaMap.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "slamap.h"
-c void astSlaAdd( AstSlaMap *this, const char *cvt, const double args[] )
-f CALL AST_SLAADD( THIS, CVT, ARGS, STATUS )
-
-* Class Membership:
-* SlaMap method.
-
-* Description:
-c This function adds one of the standard celestial coordinate
-f This routine adds one of the standard celestial coordinate
-* system conversions provided by the SLALIB Positional Astronomy
-* Library (Starlink User Note SUN/67) to an existing SlaMap.
-*
-c When an SlaMap is first created (using astSlaMap), it simply
-f When an SlaMap is first created (using AST_SLAMAP), it simply
-c performs a unit (null) Mapping. By using astSlaAdd (repeatedly
-f performs a unit (null) Mapping. By using AST_SLAADD (repeatedly
-* if necessary), one or more coordinate conversion steps may then
-* be added, which the SlaMap will perform in sequence. This allows
-* multi-step conversions between a variety of celestial coordinate
-* systems to be assembled out of the building blocks provided by
-* SLALIB.
-*
-* Normally, if an SlaMap's Invert attribute is zero (the default),
-* then its forward transformation is performed by carrying out
-* each of the individual coordinate conversions specified by
-c astSlaAdd in the order given (i.e. with the most recently added
-f AST_SLAADD in the order given (i.e. with the most recently added
-* conversion applied last).
-*
-* This order is reversed if the SlaMap's Invert attribute is
-* non-zero (or if the inverse transformation is requested by any
-* other means) and each individual coordinate conversion is also
-* replaced by its own inverse. This process inverts the overall
-* effect of the SlaMap. In this case, the first conversion to be
-* applied would be the inverse of the one most recently added.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the SlaMap.
-c cvt
-f CVT = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string which identifies the
-f A character string which identifies the
-* celestial coordinate conversion to be added to the
-* SlaMap. See the "SLALIB Conversions" section for details of
-* those available.
-c args
-f ARGS( * ) = DOUBLE PRECISION (Given)
-* An array containing argument values for the celestial
-* coordinate conversion. The number of arguments required, and
-* hence the number of array elements used, depends on the
-* conversion specified (see the "SLALIB Conversions"
-* section). This array is ignored
-c and a NULL pointer may be supplied
-* if no arguments are needed.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - All coordinate values processed by an SlaMap are in
-* radians. The first coordinate is the celestial longitude and the
-* second coordinate is the celestial latitude.
-* - When assembling a multi-stage conversion, it can sometimes be
-* difficult to determine the most economical conversion path. For
-* example, converting to the standard FK5 coordinate system as an
-* intermediate stage is often sensible in formulating the problem,
-* but may introduce unnecessary extra conversion steps. A solution
-* to this is to include all the steps which are (logically)
-c necessary, but then to use astSimplify to simplify the resulting
-f necessary, but then to use AST_SIMPLIFY to simplify the resulting
-* SlaMap. The simplification process will eliminate any steps
-* which turn out not to be needed.
-c - This function does not check to ensure that the sequence of
-f - This routine does not check to ensure that the sequence of
-* coordinate conversions added to an SlaMap is physically
-* meaningful.
-
-* SLALIB Conversions:
-* The following strings (which are case-insensitive) may be supplied
-c via the "cvt" parameter to indicate which celestial coordinate
-f via the CVT argument to indicate which celestial coordinate
-* conversion is to be added to the SlaMap. Each string is derived
-* from the name of the SLALIB routine that performs the
-* conversion and the relevant documentation (SUN/67) should be
-* consulted for details. Where arguments are needed by
-* the conversion, they are listed in parentheses. Values for
-c these arguments should be given, via the "args" array, in the
-f these arguments should be given, via the ARGS array, in the
-* order indicated. The argument names match the corresponding
-* SLALIB routine arguments and their values should be given using
-* exactly the same units, time scale, calendar, etc. as described
-* in SUN/67:
-*
-* - "ADDET" (EQ): Add E-terms of aberration.
-* - "SUBET" (EQ): Subtract E-terms of aberration.
-* - "PREBN" (BEP0,BEP1): Apply Bessel-Newcomb pre-IAU 1976 (FK4)
-* precession model.
-* - "PREC" (EP0,EP1): Apply IAU 1975 (FK5) precession model.
-* - "FK45Z" (BEPOCH): Convert FK4 to FK5 (no proper motion or parallax).
-* - "FK54Z" (BEPOCH): Convert FK5 to FK4 (no proper motion or parallax).
-* - "AMP" (DATE,EQ): Convert geocentric apparent to mean place.
-* - "MAP" (EQ,DATE): Convert mean place to geocentric apparent.
-* - "ECLEQ" (DATE): Convert ecliptic coordinates to FK5 J2000.0 equatorial.
-* - "EQECL" (DATE): Convert equatorial FK5 J2000.0 to ecliptic coordinates.
-* - "GALEQ": Convert galactic coordinates to FK5 J2000.0 equatorial.
-* - "EQGAL": Convert FK5 J2000.0 equatorial to galactic coordinates.
-* - "HFK5Z" (JEPOCH): Convert ICRS coordinates to FK5 J2000.0 equatorial.
-* - "FK5HZ" (JEPOCH): Convert FK5 J2000.0 equatorial coordinates to ICRS.
-* - "GALSUP": Convert galactic to supergalactic coordinates.
-* - "SUPGAL": Convert supergalactic coordinates to galactic.
-* - "J2000H": Convert dynamical J2000.0 to ICRS.
-* - "HJ2000": Convert ICRS to dynamical J2000.0.
-* - "R2H" (LAST): Convert RA to Hour Angle.
-* - "H2R" (LAST): Convert Hour Angle to RA.
-*
-* For example, to use the "ADDET" conversion, which takes a single
-* argument EQ, you should consult the documentation for the SLALIB
-* routine SLA_ADDET. This describes the conversion in detail and
-* shows that EQ is the Besselian epoch of the mean equator and
-* equinox.
-c This value should then be supplied to astSlaAdd in args[0].
-f This value should then be supplied to AST_SLAADD in ARGS(1).
-*
-* In addition the following strings may be supplied for more complex
-* conversions which do not correspond to any one single SLALIB routine
-* (DIURAB is the magnitude of the diurnal aberration vector in units
-* of "day/(2.PI)", DATE is the Modified Julian Date of the observation,
-* and (OBSX,OBSY,OBZ) are the Heliocentric-Aries-Ecliptic cartesian
-* coordinates, in metres, of the observer):
-*
-* - "HPCEQ" (DATE,OBSX,OBSY,OBSZ): Convert Helioprojective-Cartesian coordinates to J2000.0 equatorial.
-* - "EQHPC" (DATE,OBSX,OBSY,OBSZ): Convert J2000.0 equatorial coordinates to Helioprojective-Cartesian.
-* - "HPREQ" (DATE,OBSX,OBSY,OBSZ): Convert Helioprojective-Radial coordinates to J2000.0 equatorial.
-* - "EQHPR" (DATE,OBSX,OBSY,OBSZ): Convert J2000.0 equatorial coordinates to Helioprojective-Radial.
-* - "HEEQ" (DATE): Convert helio-ecliptic coordinates to J2000.0 equatorial.
-* - "EQHE" (DATE): Convert J2000.0 equatorial coordinates to helio-ecliptic.
-* - "H2E" (LAT,DIRUAB): Convert horizon coordinates to equatorial.
-* - "E2H" (LAT,DIURAB): Convert equatorial coordinates to horizon.
-*
-* Note, the "H2E" and "E2H" conversions convert between topocentric
-* horizon coordinates (azimuth,elevation), and apparent local equatorial
-* coordinates (hour angle,declination). Thus, the effects of diurnal
-* aberration are taken into account in the conversions but the effects
-* of atmospheric refraction are not.
-
-*--
-*/
-
-/* Local Variables: */
- int cvttype; /* Conversion type code */
-
-/* Check the inherited status. */
- if ( !astOK ) return;
-
-/* Validate the type string supplied and obtain the equivalent
- conversion type code. */
- cvttype = CvtCode( cvt, status );
-
-/* If the string was not recognised, then report an error. */
- if ( astOK && ( cvttype == AST__SLA_NULL ) ) {
- astError( AST__SLAIN,
- "astSlaAdd(%s): Invalid SLALIB sky coordinate conversion "
- "type \"%s\".", status, astGetClass( this ), cvt );
- }
-
-/* Add the new conversion to the SlaMap. */
- AddSlaCvt( this, cvttype, args, status );
-}
-
-static void SolarPole( double mjd, double pole[3], int *status ) {
-/*
-* Name:
-* SolarPole
-
-* Purpose:
-* Returns a unit vector along the solar north pole at the given date.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "slamap.h"
-* void SolarPole( double mjd, double pole[3], int *status )
-
-* Class Membership:
-* SlaMap member function.
-
-* Description:
-* This function returns a unit vector along the solar north pole at
-* the given date, in the AST__HAEC coordinate system.
-
-* Parameters:
-* mjd
-* The date at which the solar north pole vector is required.
-* pole
-* An array holding the (X,Y,Z) components of the vector, in the
-* AST__HAEC system.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - AST__BAD will be returned for all components of the vector if this
-* function is invoked with the global error status set, or if it should
-* fail for any reason.
-*/
-
-/* Local Variables: */
- double omega;
- double sproj;
- double inc;
- double t1;
-
-/* Initialize. */
- pole[0] = AST__BAD;
- pole[1] = AST__BAD;
- pole[2] = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* First, we find the ecliptic longitude of the ascending node of the solar
- equator on the ecliptic at the required date. This is based on the
- equation in the "Explanatory Supplement to the Astronomical Alamanac",
- section "Physical Ephemeris of the Sun":
-
- Omega = 75.76 + 0.01397*T degrees
-
- Note, the text at the start of the chapter says that "T" is measured in
- centuries since J2000, but the equivalent expression in Table 15.4 is
- only consistent with the above equation if "T" is measured in days since
- J2000. We assume T is in days. The text does not explicitly say so,
- but we assume that this longitude value (Omega) is with respect to the
- mean equinox of J2000.0. */
- omega = 75.76 + 0.01397*( palSlaEpj(mjd) - 2000.0 );
-
-/* Convert this to the ecliptic longitude of the projection of the sun's
- north pole onto the ecliptic, in radians. */
- sproj = ( omega - 90.0 )*D2R;
-
-/* Obtain a unit vector parallel to the sun's north pole, in terms of
- the required ecliptic (X,Y,Z) axes, in which X points towards ecliptic
- longitude/latitude ( 0, 0 ), Y axis points towards ecliptic
- longitude/latitude ( 90, 0 ) degrees, and Z axis points towards the
- ecliptic north pole. The inclination of the solar axis to the ecliptic
- axis (7.25 degrees) is taken from the "Explanatory Supplement" section
- "The Physical Ephemeris of the Sun". */
- inc = 7.25*D2R;
- t1 = sin( inc );
- pole[ 0 ]= t1*cos( sproj );
- pole[ 1 ] = t1*sin( sproj );
- pole[ 2 ] = cos( inc );
-
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply an SlaMap to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "slamap.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* SlaMap member function (over-rides the astTransform method inherited
-* from the Mapping class).
-
-* Description:
-* This function takes an SlaMap and a set of points encapsulated
-* in a PointSet and transforms the points so as to perform the
-* sequence of SLALIB sky coordinate conversions specified by
-* previous invocations of astSlaAdd.
-
-* Parameters:
-* this
-* Pointer to the SlaMap.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of coordinates for the SlaMap being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstPointSet *result; /* Pointer to output PointSet */
- AstSlaMap *map; /* Pointer to SlaMap to be applied */
- double **ptr_in; /* Pointer to input coordinate data */
- double **ptr_out; /* Pointer to output coordinate data */
- double *alpha; /* Pointer to longitude array */
- double *args; /* Pointer to argument list for conversion */
- double *extra; /* Pointer to intermediate values */
- double *delta; /* Pointer to latitude array */
- double *p[3]; /* Pointers to arrays to be transformed */
- double *obs; /* Pointer to array holding observers position */
- int cvt; /* Loop counter for conversions */
- int ct; /* Conversion type */
- int end; /* Termination index for conversion loop */
- int inc; /* Increment for conversion loop */
- int ncoord_in; /* Number of coordinates per input point */
- int npoint; /* Number of points */
- int point; /* Loop counter for points */
- int start; /* Starting index for conversion loop */
- int sys; /* STP coordinate system code */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this);
-
-/* Obtain a pointer to the SlaMap. */
- map = (AstSlaMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Mapping class. This function validates
- all arguments and generates an output PointSet if necessary, but does not
- actually transform any coordinate values. */
- result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- coordinate conversions needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
- PointSet and obtain pointers for accessing the input and output coordinate
- values. */
- ncoord_in = astGetNcoord( in );
- npoint = astGetNpoint( in );
- ptr_in = astGetPoints( in );
- ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse transformation, according
- to the direction specified and whether the mapping has been inverted. */
- if ( astGetInvert( this ) ) forward = !forward;
-
-/* Transform the coordinate values. */
-/* -------------------------------- */
-/* Use "alpha" and "delta" as synonyms for the arrays of longitude and latitude
- coordinate values stored in the output PointSet. */
- if ( astOK ) {
- alpha = ptr_out[ 0 ];
- delta = ptr_out[ 1 ];
-
-/* Initialise the output coordinate values by copying the input ones. */
- (void) memcpy( alpha, ptr_in[ 0 ], sizeof( double ) * (size_t) npoint );
- (void) memcpy( delta, ptr_in[ 1 ], sizeof( double ) * (size_t) npoint );
-
-/* We will loop to apply each SLALIB sky coordinate conversion in turn to the
- (alpha,delta) arrays. However, if the inverse transformation was requested,
- we must loop through these transformations in reverse order, so set up
- appropriate limits and an increment to control this loop. */
- start = forward ? 0 : map->ncvt - 1;
- end = forward ? map->ncvt : -1;
- inc = forward ? 1 : -1;
-
-/* Loop through the coordinate conversions in the required order and obtain a
- pointer to the argument list for the current conversion. */
- for ( cvt = start; cvt != end; cvt += inc ) {
- args = map->cvtargs[ cvt ];
- extra = map->cvtextra[ cvt ];
-
-/* Define a local macro as a shorthand to apply the code given as "function"
- (the macro argument) to each element of the (alpha,delta) arrays in turn.
- Before applying this conversion function, each element is first checked for
- "bad" coordinates (indicated by the value AST__BAD) and appropriate "bad"
- result values are assigned if necessary. */
-#define TRAN_ARRAY(function) \
- for ( point = 0; point < npoint; point++ ) { \
- if ( ( alpha[ point ] == AST__BAD ) || \
- ( delta[ point ] == AST__BAD ) ) { \
- alpha[ point ] = AST__BAD; \
- delta[ point ] = AST__BAD; \
- } else { \
- function \
- } \
- }
-
-/* Classify the SLALIB sky coordinate conversion to be applied. */
- ct = map->cvttype[ cvt ];
- switch ( ct ) {
-
-/* Add E-terms of aberration. */
-/* -------------------------- */
-/* Add or subtract (for the inverse) the E-terms from each coordinate pair
- in turn, returning the results to the same arrays. */
- case AST__SLA_ADDET:
- if ( forward ) {
- TRAN_ARRAY(palSlaAddet( alpha[ point ], delta[ point ],
- args[ 0 ],
- alpha + point, delta + point );)
- } else {
- TRAN_ARRAY(palSlaSubet( alpha[ point ], delta[ point ],
- args[ 0 ],
- alpha + point, delta + point );)
- }
- break;
-
-/* Subtract E-terms of aberration. */
-/* ------------------------------- */
-/* This is the same as above, but with the forward and inverse cases
- transposed. */
- case AST__SLA_SUBET:
- if ( forward ) {
- TRAN_ARRAY(palSlaSubet( alpha[ point ], delta[ point ],
- args[ 0 ],
- alpha + point, delta + point );)
- } else {
- TRAN_ARRAY(palSlaAddet( alpha[ point ], delta[ point ],
- args[ 0 ],
- alpha + point, delta + point );)
- }
- break;
-
-/* Apply Bessel-Newcomb pre-IAU 1976 (FK4) precession model. */
-/* --------------------------------------------------------- */
-/* Since we are transforming a sequence of points, first set up the required
- precession matrix, swapping the argument order to get the inverse matrix
- if required. */
- case AST__SLA_PREBN:
- {
- double epoch1 = forward ? args[ 0 ] : args[ 1 ];
- double epoch2 = forward ? args[ 1 ] : args[ 0 ];
- double precess_matrix[ 3 ][ 3 ];
- double vec1[ 3 ];
- double vec2[ 3 ];
- palSlaPrebn( epoch1, epoch2, precess_matrix );
-
-/* For each point in the (alpha,delta) arrays, convert to Cartesian
- coordinates, apply the precession matrix, convert back to polar coordinates
- and then constrain the longitude result to lie in the range 0 to 2*pi
- (palSlaDcc2s doesn't do this itself). */
- TRAN_ARRAY(palSlaDcs2c( alpha[ point ], delta[ point ], vec1 );
- palSlaDmxv( precess_matrix, vec1, vec2 );
- palSlaDcc2s( vec2, alpha + point, delta + point );
- alpha[ point ] = palSlaDranrm( alpha[ point ] );)
- }
- break;
-
-/* Apply IAU 1975 (FK5) precession model. */
-/* -------------------------------------- */
-/* This is handled in the same way as above, but using the appropriate FK5
- precession matrix. */
- case AST__SLA_PREC:
- {
- double epoch1 = forward ? args[ 0 ] : args[ 1 ];
- double epoch2 = forward ? args[ 1 ] : args[ 0 ];
- double precess_matrix[ 3 ][ 3 ];
- double vec1[ 3 ];
- double vec2[ 3 ];
- palSlaPrec( epoch1, epoch2, precess_matrix );
- TRAN_ARRAY(palSlaDcs2c( alpha[ point ], delta[ point ], vec1 );
- palSlaDmxv( precess_matrix, vec1, vec2 );
- palSlaDcc2s( vec2, alpha + point, delta + point );
- alpha[ point ] = palSlaDranrm( alpha[ point ] );)
- }
- break;
-
-/* Convert FK4 to FK5 (no proper motion or parallax). */
-/* -------------------------------------------------- */
-/* Apply the conversion to each point. */
- case AST__SLA_FK45Z:
- if ( forward ) {
- TRAN_ARRAY(palSlaFk45z( alpha[ point ], delta[ point ],
- args[ 0 ],
- alpha + point, delta + point );)
-
-/* The inverse transformation is also straightforward, except that we need a
- couple of dummy variables as function arguments. */
- } else {
- double dr1950;
- double dd1950;
- TRAN_ARRAY(palSlaFk54z( alpha[ point ], delta[ point ],
- args[ 0 ],
- alpha + point, delta + point,
- &dr1950, &dd1950 );)
- }
- break;
-
-/* Convert FK5 to FK4 (no proper motion or parallax). */
-/* -------------------------------------------------- */
-/* This is the same as above, but with the forward and inverse cases
- transposed. */
- case AST__SLA_FK54Z:
- if ( forward ) {
- double dr1950;
- double dd1950;
- TRAN_ARRAY(palSlaFk54z( alpha[ point ], delta[ point ],
- args[ 0 ],
- alpha + point, delta + point,
- &dr1950, &dd1950 );)
- } else {
- TRAN_ARRAY(palSlaFk45z( alpha[ point ], delta[ point ],
- args[ 0 ],
- alpha + point, delta + point );)
- }
- break;
-
-/* Convert geocentric apparent to mean place. */
-/* ------------------------------------------ */
-/* Since we are transforming a sequence of points, first set up the required
- parameter array. Than apply this to each point in turn. */
- case AST__SLA_AMP:
- {
-
- if( !extra ) {
-
- if( args[ 1 ] != eq_cache ||
- args[ 0 ] != ep_cache ) {
- eq_cache = args[ 1 ];
- ep_cache = args[ 0 ];
- palSlaMappa( eq_cache, ep_cache, amprms_cache );
- }
-
- extra = astStore( NULL, amprms_cache,
- sizeof( double )*21 );
- map->cvtextra[ cvt ] = extra;
- }
-
- if ( forward ) {
- TRAN_ARRAY(palSlaAmpqk( alpha[ point ], delta[ point ],
- extra,
- alpha + point, delta + point );)
-
-/* The inverse uses the same parameter array but converts from mean place
- to geocentric apparent. */
- } else {
- TRAN_ARRAY(palSlaMapqkz( alpha[ point ], delta[ point ],
- extra,
- alpha + point, delta + point );)
- }
- }
- break;
-
-/* Convert mean place to geocentric apparent. */
-/* ------------------------------------------ */
-/* This is the same as above, but with the forward and inverse cases
- transposed. */
- case AST__SLA_MAP:
- {
- if( !extra ) {
-
- if( args[ 0 ] != eq_cache ||
- args[ 1 ] != ep_cache ) {
- eq_cache = args[ 0 ];
- ep_cache = args[ 1 ];
- palSlaMappa( eq_cache, ep_cache, amprms_cache );
- }
-
- extra = astStore( NULL, amprms_cache,
- sizeof( double )*21 );
- map->cvtextra[ cvt ] = extra;
- }
-
- if ( forward ) {
- TRAN_ARRAY(palSlaMapqkz( alpha[ point ], delta[ point ],
- extra,
- alpha + point, delta + point );)
- } else {
- TRAN_ARRAY(palSlaAmpqk( alpha[ point ], delta[ point ],
- extra,
- alpha + point, delta + point );)
- }
- }
- break;
-
-/* Convert ecliptic coordinates to J2000.0 equatorial. */
-/* --------------------------------------------------- */
-/* Since we are transforming a sequence of points, first set up the required
- conversion matrix (the conversion is a rotation). */
- case AST__SLA_ECLEQ:
- {
- double convert_matrix[ 3 ][ 3 ];
- double precess_matrix[ 3 ][ 3 ];
- double rotate_matrix[ 3 ][ 3 ];
- double vec1[ 3 ];
- double vec2[ 3 ];
-
-/* Obtain the matrix that precesses equatorial coordinates from J2000.0 to the
- required date. Also obtain the rotation matrix that converts from
- equatorial to ecliptic coordinates. */
- palSlaPrec( 2000.0, palSlaEpj( args[ 0 ] ), precess_matrix );
- palSlaEcmat( args[ 0 ], rotate_matrix );
-
-/* Multiply these matrices to give the overall matrix that converts from
- equatorial J2000.0 coordinates to ecliptic coordinates for the required
- date. */
- palSlaDmxm( rotate_matrix, precess_matrix, convert_matrix );
-
-/* Apply the conversion by transforming from polar to Cartesian coordinates,
- multiplying by the inverse conversion matrix and converting back to polar
- coordinates. Then constrain the longitude result to lie in the range
- 0 to 2*pi (palSlaDcc2s doesn't do this itself). */
- if ( forward ) {
- TRAN_ARRAY(palSlaDcs2c( alpha[ point ], delta[ point ],
- vec1 );
- palSlaDimxv( convert_matrix, vec1, vec2 );
- palSlaDcc2s( vec2, alpha + point, delta + point );
- alpha[ point ] = palSlaDranrm ( alpha[ point ] );)
-
-/* The inverse conversion is the same except that we multiply by the forward
- conversion matrix (palSlaDmxv instead of palSlaDimxv). */
- } else {
- TRAN_ARRAY(palSlaDcs2c( alpha[ point ], delta[ point ],
- vec1 );
- palSlaDmxv( convert_matrix, vec1, vec2 );
- palSlaDcc2s( vec2, alpha + point, delta + point );
- alpha[ point ] = palSlaDranrm ( alpha[ point ] );)
- }
- }
- break;
-
-/* Convert equatorial J2000.0 to ecliptic coordinates. */
-/* --------------------------------------------------- */
-/* This is the same as above, but with the forward and inverse cases
- transposed. */
- case AST__SLA_EQECL:
- {
- double convert_matrix[ 3 ][ 3 ];
- double precess_matrix[ 3 ][ 3 ];
- double rotate_matrix[ 3 ][ 3 ];
- double vec1[ 3 ];
- double vec2[ 3 ];
-
-/* Create the conversion matrix. */
- palSlaPrec( 2000.0, palSlaEpj( args[ 0 ] ), precess_matrix );
- palSlaEcmat( args[ 0 ], rotate_matrix );
- palSlaDmxm( rotate_matrix, precess_matrix, convert_matrix );
-
-/* Apply it. */
- if ( forward ) {
- TRAN_ARRAY(palSlaDcs2c( alpha[ point ], delta[ point ],
- vec1 );
- palSlaDmxv( convert_matrix, vec1, vec2 );
- palSlaDcc2s( vec2, alpha + point, delta + point );
- alpha[ point ] = palSlaDranrm ( alpha[ point ] );)
- } else {
- TRAN_ARRAY(palSlaDcs2c( alpha[ point ], delta[ point ],
- vec1 );
- palSlaDimxv( convert_matrix, vec1, vec2 );
- palSlaDcc2s( vec2, alpha + point, delta + point );
- alpha[ point ] = palSlaDranrm ( alpha[ point ] );)
- }
- }
- break;
-
-/* Convert ICRS to J2000.0 equatorial. */
-/* ----------------------------------- */
-/* Apply the conversion to each point. */
- case AST__SLA_HFK5Z:
- if ( forward ) {
- double dr5;
- double dd5;
- TRAN_ARRAY(palSlaHfk5z( alpha[ point ], delta[ point ],
- args[ 0 ],
- alpha + point, delta + point,
- &dr5, &dd5 );)
-
-/* The inverse simply uses the inverse SLALIB function. */
- } else {
- TRAN_ARRAY(palSlaFk5hz( alpha[ point ], delta[ point ],
- args[ 0 ],
- alpha + point, delta + point );)
- }
- break;
-
-/* Convert J2000.0 to ICRS equatorial. */
-/* ----------------------------------- */
-/* This is the same as above, but with the forward and inverse cases
- transposed. */
- case AST__SLA_FK5HZ:
- if ( forward ) {
- TRAN_ARRAY(palSlaFk5hz( alpha[ point ], delta[ point ],
- args[ 0 ],
- alpha + point, delta + point );)
-
-/* The inverse simply uses the inverse SLALIB function. */
- } else {
- double dr5;
- double dd5;
- TRAN_ARRAY(palSlaHfk5z( alpha[ point ], delta[ point ],
- args[ 0 ],
- alpha + point, delta + point,
- &dr5, &dd5 );)
- }
- break;
-
-/* Convert horizon to equatorial. */
-/* ------------------------------ */
-/* Apply the conversion to each point. */
- case AST__SLA_DH2E:
- if ( forward ) {
- TRAN_ARRAY(palSlaDh2e( alpha[ point ], delta[ point ],
- args[ 0 ], args[ 1 ],
- alpha + point, delta + point );)
-
-/* The inverse simply uses the inverse SLALIB function. */
- } else {
- TRAN_ARRAY(palSlaDe2h( alpha[ point ], delta[ point ],
- args[ 0 ], args[ 1 ],
- alpha + point, delta + point );)
- }
- break;
-
-/* Convert equatorial to horizon. */
-/* ------------------------------ */
-/* This is the same as above, but with the forward and inverse cases
- transposed. */
- case AST__SLA_DE2H:
- if ( forward ) {
- TRAN_ARRAY(palSlaDe2h( alpha[ point ], delta[ point ],
- args[ 0 ], args[ 1 ],
- alpha + point, delta + point );)
-
-/* The inverse simply uses the inverse SLALIB function. */
- } else {
- TRAN_ARRAY(palSlaDh2e( alpha[ point ], delta[ point ],
- args[ 0 ], args[ 1 ],
- alpha + point, delta + point );)
- }
- break;
-
-/* Convert galactic coordinates to J2000.0 equatorial. */
-/* --------------------------------------------------- */
-/* Apply the conversion to each point. */
- case AST__SLA_GALEQ:
- if ( forward ) {
- TRAN_ARRAY(palSlaGaleq( alpha[ point ], delta[ point ],
- alpha + point, delta + point );)
-
-/* The inverse simply uses the inverse SLALIB function. */
- } else {
- TRAN_ARRAY(palSlaEqgal( alpha[ point ], delta[ point ],
- alpha + point, delta + point );)
- }
- break;
-
-/* Convert J2000.0 equatorial to galactic coordinates. */
-/* --------------------------------------------------- */
-/* This is the same as above, but with the forward and inverse cases
- transposed. */
- case AST__SLA_EQGAL:
- if ( forward ) {
- TRAN_ARRAY(palSlaEqgal( alpha[ point ], delta[ point ],
- alpha + point, delta + point );)
- } else {
- TRAN_ARRAY(palSlaGaleq( alpha[ point ], delta[ point ],
- alpha + point, delta + point );)
- }
- break;
-
-/* Convert galactic to supergalactic coordinates. */
-/* ---------------------------------------------- */
-/* Apply the conversion to each point. */
- case AST__SLA_GALSUP:
- if ( forward ) {
- TRAN_ARRAY(palSlaGalsup( alpha[ point ], delta[ point ],
- alpha + point, delta + point );)
-
-/* The inverse simply uses the inverse SLALIB function. */
- } else {
- TRAN_ARRAY(palSlaSupgal( alpha[ point ], delta[ point ],
- alpha + point, delta + point );)
- }
- break;
-
-/* Convert supergalactic coordinates to galactic. */
-/* ---------------------------------------------- */
-/* This is the same as above, but with the forward and inverse cases
- transposed. */
- case AST__SLA_SUPGAL:
- if ( forward ) {
- TRAN_ARRAY(palSlaSupgal( alpha[ point ], delta[ point ],
- alpha + point, delta + point );)
- } else {
- TRAN_ARRAY(palSlaGalsup( alpha[ point ], delta[ point ],
- alpha + point, delta + point );)
- }
- break;
-
-/* If the conversion type was not recognised, then report an error
- (this should not happen unless validation in astSlaAdd has failed
- to detect a bad value previously). */
- default:
- astError( AST__SLAIN, "astTransform(%s): Corrupt %s contains "
- "invalid SLALIB sky coordinate conversion code (%d).", status,
- astGetClass( this ), astGetClass( this ),
- (int) ct );
- break;
-
-/* Convert any STP coordinates to J2000 equatorial. */
-/* ------------------------------------------------ */
- case AST__HPCEQ:
- case AST__HPREQ:
- case AST__HEEQ:
- {
-
-/* Get the code for the appropriate 3D STP coordinate system to use.
- Also, get a point to the observer position, if needed. */
- if( ct == AST__HPCEQ ) {
- sys = AST__HPC;
- obs = args + 1;
-
- } else if( ct == AST__HPREQ ) {
- sys = AST__HPR;
- obs = args + 1;
-
- } else {
- sys = AST__GSE;
- obs = NULL;
-
- }
-
-/* Store the 3D positions to be transformed. The supplied arrays are used
- for the longitude and latitude values. No radius values are supplied.
- (a value of 1AU will be used in the transformation). */
- p[0] = alpha;
- p[1] = delta;
- p[2] = NULL;
-
-/* Convert the supplied positions to (or from) AST__HEQ, ignoring the
- distinction between the origin of the input and output systems (which
- is appropriate since we are considering points at an infinite distance
- from the observer). */
- if( forward ) {
- STPConv( args[ 0 ], 1, npoint, sys, obs, p,
- AST__HAQ, NULL, p, status );
- } else {
- STPConv( args[ 0 ], 1, npoint, AST__HAQ, NULL, p,
- sys, obs, p, status );
- }
- }
- break;
-
-
-/* Convert J2000 equatorial to any STP coordinates. */
-/* ------------------------------------------------ */
-/* Same as above, but with forward and inverse cases transposed. */
- case AST__EQHPC:
- case AST__EQHPR:
- case AST__EQHE:
- {
-
-/* Get the code for the appropriate 3D STP coordinate system to use.
- Also, get a point to the observer position, if needed. */
- if( ct == AST__EQHPC ) {
- sys = AST__HPC;
- obs = args + 1;
-
- } else if( ct == AST__EQHPR ) {
- sys = AST__HPR;
- obs = args + 1;
-
- } else {
- sys = AST__GSE;
- obs = NULL;
-
- }
-
-/* Store the 3D positions to be transformed. The supplied arrays are used
- for the longitude and latitude values. No radius values are supplied.
- (a value of 1AU will be used in the transformation). */
- p[0] = alpha;
- p[1] = delta;
- p[2] = NULL;
-
-/* Convert the supplied positions from (or to) AST__HEQ, ignoring the
- distinction between the origin of the input and output systems (which
- is appropriate since we are considering points at an infinite distance
- from the observer). */
- if( forward ) {
- STPConv( args[ 0 ], 1, npoint, AST__HAQ, NULL, p,
- sys, obs, p, status );
- } else {
- STPConv( args[ 0 ], 1, npoint, sys, obs, p,
- AST__HAQ, NULL, p, status );
- }
- }
- break;
-
-/* Convert dynamical J2000.0 to ICRS. */
-/* ---------------------------------- */
-/* Apply the conversion to each point. */
- case AST__J2000H:
- J2000H( forward, npoint, alpha, delta, status );
- break;
-
-/* Convert ICRS to dynamical J2000.0 */
-/* ---------------------------------- */
- case AST__HJ2000:
- J2000H( !(forward), npoint, alpha, delta, status );
- break;
-
-/* Convert HA to RA, or RA to HA */
-/* ----------------------------- */
-/* The forward and inverse transformations are the same. */
- case AST__H2R:
- case AST__R2H:
- TRAN_ARRAY( alpha[ point ] = args[ 0 ] - alpha[ point ]; )
- break;
-
- }
- }
- }
-
-/* If an error has occurred and a new PointSet may have been created, then
- clean up by annulling it. In any case, ensure that a NULL result is
- returned.*/
- if ( !astOK ) {
- if ( !out ) result = astAnnul( result );
- result = NULL;
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-
-/* Undefine macros local to this function. */
-#undef TRAN_ARRAY
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for SlaMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for SlaMap objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstSlaMap *in; /* Pointer to input SlaMap */
- AstSlaMap *out; /* Pointer to output SlaMap */
- int cvt; /* Loop counter for coordinate conversions */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output SlaMap structures. */
- in = (AstSlaMap *) objin;
- out = (AstSlaMap *) objout;
-
-/* For safety, first clear any references to the input memory from the output
- SlaMap. */
- out->cvtargs = NULL;
- out->cvtextra = NULL;
- out->cvttype = NULL;
-
-/* Allocate memory for the output array of argument list pointers. */
- out->cvtargs = astMalloc( sizeof( double * ) * (size_t) in->ncvt );
-
-/* Allocate memory for the output array of extra (intermediate) values. */
- out->cvtextra = astMalloc( sizeof( double * ) * (size_t) in->ncvt );
-
-/* If necessary, allocate memory and make a copy of the input array of sky
- coordinate conversion codes. */
- if ( in->cvttype ) out->cvttype = astStore( NULL, in->cvttype,
- sizeof( int )
- * (size_t) in->ncvt );
-
-/* If OK, loop through each conversion in the input SlaMap and make a copy of
- its argument list, storing the new pointer in the output argument list
- array. */
- if ( astOK ) {
- for ( cvt = 0; cvt < in->ncvt; cvt++ ) {
- out->cvtargs[ cvt ] = astStore( NULL, in->cvtargs[ cvt ],
- astSizeOf( in->cvtargs[ cvt ] ) );
- out->cvtextra[ cvt ] = astStore( NULL, in->cvtextra[ cvt ],
- astSizeOf( in->cvtextra[ cvt ] ) );
- }
-
-/* If an error occurred while copying the argument lists, loop through the
- conversions again and clean up by ensuring that the new memory allocated for
- each argument list is freed. */
- if ( !astOK ) {
- for ( cvt = 0; cvt < in->ncvt; cvt++ ) {
- out->cvtargs[ cvt ] = astFree( out->cvtargs[ cvt ] );
- }
- }
- }
-
-/* If an error occurred, free all other memory allocated above. */
- if ( !astOK ) {
- out->cvtargs = astFree( out->cvtargs );
- out->cvtextra = astFree( out->cvtextra );
- out->cvttype = astFree( out->cvttype );
- }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for SlaMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for SlaMap objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstSlaMap *this; /* Pointer to SlaMap */
- int cvt; /* Loop counter for coordinate conversions */
-
-/* Obtain a pointer to the SlaMap structure. */
- this = (AstSlaMap *) obj;
-
-/* Loop to free the memory containing the argument list for each sky coordinate
- conversion. */
- for ( cvt = 0; cvt < this->ncvt; cvt++ ) {
- this->cvtargs[ cvt ] = astFree( this->cvtargs[ cvt ] );
- this->cvtextra[ cvt ] = astFree( this->cvtextra[ cvt ] );
- }
-
-/* Free the memory holding the array of conversion types and the array of
- argument list pointers. */
- this->cvtargs = astFree( this->cvtargs );
- this->cvtextra = astFree( this->cvtextra );
- this->cvttype = astFree( this->cvttype );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for SlaMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "slamap.h"
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the SlaMap class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the SlaMap whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstSlaMap *this; /* Pointer to the SlaMap structure */
- char key[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- const char *argdesc[ MAX_SLA_ARGS ]; /* Pointers to argument descriptions */
- const char *comment; /* Pointer to comment string */
- const char *sval; /* Pointer to string value */
- int iarg; /* Loop counter for arguments */
- int icvt; /* Loop counter for conversion steps */
- int ival; /* Integer value */
- int nargs; /* Number of conversion arguments */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SlaMap structure. */
- this = (AstSlaMap *) this_object;
-
-/* Write out values representing the instance variables for the SlaMap
- class. Accompany these with appropriate comment strings, possibly
- depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* Number of conversion steps. */
-/* --------------------------- */
-/* Regard this as "set" if it is non-zero. */
- ival = this->ncvt;
- set = ( ival != 0 );
- astWriteInt( channel, "Nsla", set, 0, ival, "Number of conversion steps" );
-
-/* Write out data for each conversion step... */
- for ( icvt = 0; icvt < this->ncvt; icvt++ ) {
-
-/* Conversion type. */
-/* ---------------- */
-/* Change each conversion type code into an equivalent string and
- obtain associated descriptive information. If the conversion code
- was not recognised, report an error and give up. */
- if ( astOK ) {
- sval = CvtString( this->cvttype[ icvt ], &comment, &nargs, argdesc, status );
- if ( astOK && !sval ) {
- astError( AST__SLAIN,
- "astWrite(%s): Corrupt %s contains invalid SLALIB "
- "sky coordinate conversion code (%d).", status,
- astGetClass( channel ), astGetClass( this ),
- (int) this->cvttype[ icvt ] );
- break;
- }
-
-/* Create an appropriate keyword and write out the conversion code
- information. */
- (void) sprintf( key, "Sla%d", icvt + 1 );
- astWriteString( channel, key, 1, 1, sval, comment );
-
-/* Write out data for each conversion argument... */
- for ( iarg = 0; iarg < nargs; iarg++ ) {
-
-/* Arguments. */
-/* ---------- */
-/* Create an appropriate keyword and write out the argument value,
- accompanied by the descriptive comment obtained above. */
- (void) sprintf( key, "Sla%d%c", icvt + 1, ALPHABET[ iarg ] );
- astWriteDouble( channel, key, 1, 1, this->cvtargs[ icvt ][ iarg ],
- argdesc[ iarg ] );
- }
-
-/* Quit looping if an error occurs. */
- if ( !astOK ) break;
- }
- }
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsASlaMap and astCheckSlaMap functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(SlaMap,Mapping)
-astMAKE_CHECK(SlaMap)
-
-AstSlaMap *astSlaMap_( int flags, const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astSlaMap
-f AST_SLAMAP
-
-* Purpose:
-* Create an SlaMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "slamap.h"
-c AstSlaMap *astSlaMap( int flags, const char *options, ... )
-f RESULT = AST_SLAMAP( FLAGS, OPTIONS, STATUS )
-
-* Class Membership:
-* SlaMap constructor.
-
-* Description:
-* This function creates a new SlaMap and optionally initialises
-* its attributes.
-*
-* An SlaMap is a specialised form of Mapping which can be used to
-* represent a sequence of conversions between standard celestial
-* (longitude, latitude) coordinate systems.
-*
-* When an SlaMap is first created, it simply performs a unit
-c (null) Mapping on a pair of coordinates. Using the astSlaAdd
-f (null) Mapping on a pair of coordinates. Using the AST_SLAADD
-c function, a series of coordinate conversion steps may then be
-f routine, a series of coordinate conversion steps may then be
-* added, selected from those provided by the SLALIB Positional
-* Astronomy Library (Starlink User Note SUN/67). This allows
-* multi-step conversions between a variety of celestial coordinate
-* systems to be assembled out of the building blocks provided by
-* SLALIB.
-*
-* For details of the individual coordinate conversions available,
-c see the description of the astSlaAdd function.
-f see the description of the AST_SLAADD routine.
-
-* Parameters:
-c flags
-f FLAGS = INTEGER (Given)
-c This parameter is reserved for future use and should currently
-f This argument is reserved for future use and should currently
-* always be set to zero.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new SlaMap. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-c If no initialisation is required, a zero-length string may be
-c supplied.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new SlaMap. The syntax used is identical to that for the
-f AST_SET routine. If no initialisation is required, a blank
-f value may be supplied.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astSlaMap()
-f AST_SLAMAP = INTEGER
-* A pointer to the new SlaMap.
-
-* Notes:
-* - The Nin and Nout attributes (number of input and output
-* coordinates) for an SlaMap are both equal to 2. The first
-* coordinate is the celestial longitude and the second coordinate
-* is the celestial latitude. All coordinate values are in radians.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstSlaMap *new; /* Pointer to the new SlaMap */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the SlaMap, allocating memory and initialising the virtual
- function table as well if necessary. */
- new = astInitSlaMap( NULL, sizeof( AstSlaMap ), !class_init, &class_vtab,
- "SlaMap", flags );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new SlaMap's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new SlaMap. */
- return new;
-}
-
-AstSlaMap *astSlaMapId_( int flags, const char *options, ... ) {
-/*
-* Name:
-* astSlaMapId_
-
-* Purpose:
-* Create an SlaMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "slamap.h"
-* AstSlaMap *astSlaMapId_( int flags, const char *options, ... )
-
-* Class Membership:
-* SlaMap constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astSlaMap constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astSlaMap_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astSlaMap_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astSlaMap_.
-
-* Returned Value:
-* The ID value associated with the new SlaMap.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstSlaMap *new; /* Pointer to the new SlaMap */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the SlaMap, allocating memory and initialising the virtual
- function table as well if necessary. */
- new = astInitSlaMap( NULL, sizeof( AstSlaMap ), !class_init, &class_vtab,
- "SlaMap", flags );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new SlaMap's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new SlaMap. */
- return astMakeId( new );
-}
-
-AstSlaMap *astInitSlaMap_( void *mem, size_t size, int init,
- AstSlaMapVtab *vtab, const char *name,
- int flags, int *status ) {
-/*
-*+
-* Name:
-* astInitSlaMap
-
-* Purpose:
-* Initialise an SlaMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "slamap.h"
-* AstSlaMap *astInitSlaMap( void *mem, size_t size, int init,
-* AstSlaMapVtab *vtab, const char *name,
-* int flags )
-
-* Class Membership:
-* SlaMap initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new SlaMap object. It allocates memory (if necessary) to accommodate
-* the SlaMap plus any additional data associated with the derived class.
-* It then initialises an SlaMap structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for an SlaMap at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the SlaMap is to be initialised.
-* This must be of sufficient size to accommodate the SlaMap data
-* (sizeof(SlaMap)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the SlaMap (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the SlaMap
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the SlaMap's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new SlaMap.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astClass
-* method).
-* flags
-* This parameter is reserved for future use. It is currently ignored.
-
-* Returned Value:
-* A pointer to the new SlaMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstSlaMap *new; /* Pointer to the new SlaMap */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitSlaMapVtab( vtab, name );
-
-/* Initialise a Mapping structure (the parent class) as the first component
- within the SlaMap structure, allocating memory if necessary. Specify that
- the Mapping should be defined in both the forward and inverse directions. */
- new = (AstSlaMap *) astInitMapping( mem, size, 0,
- (AstMappingVtab *) vtab, name,
- 2, 2, 1, 1 );
-
- if ( astOK ) {
-
-/* Initialise the SlaMap data. */
-/* --------------------------- */
-/* The initial state is with no SLALIB conversions set, in which condition the
- SlaMap simply implements a unit mapping. */
- new->ncvt = 0;
- new->cvtargs = NULL;
- new->cvtextra = NULL;
- new->cvttype = NULL;
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstSlaMap *astLoadSlaMap_( void *mem, size_t size,
- AstSlaMapVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadSlaMap
-
-* Purpose:
-* Load a SlaMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "slamap.h"
-* AstSlaMap *astLoadSlaMap( void *mem, size_t size,
-* AstSlaMapVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* SlaMap loader.
-
-* Description:
-* This function is provided to load a new SlaMap using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* SlaMap structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a SlaMap at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the SlaMap is to be
-* loaded. This must be of sufficient size to accommodate the
-* SlaMap data (sizeof(SlaMap)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the SlaMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the SlaMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstSlaMap) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new SlaMap. If this is NULL, a pointer to
-* the (static) virtual function table for the SlaMap class is
-* used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "SlaMap" is used instead.
-
-* Returned Value:
-* A pointer to the new SlaMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Constants: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstSlaMap *new; /* Pointer to the new SlaMap */
- char *sval; /* Pointer to string value */
- char key[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- const char *argdesc[ MAX_SLA_ARGS ]; /* Pointers to argument descriptions */
- const char *comment; /* Pointer to comment string */
- int iarg; /* Loop counter for arguments */
- int icvt; /* Loop counter for conversion steps */
- int nargs; /* Number of conversion arguments */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this SlaMap. In this case the
- SlaMap belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstSlaMap );
- vtab = &class_vtab;
- name = "SlaMap";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitSlaMapVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built SlaMap. */
- new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "SlaMap" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* Number of conversion steps. */
-/* --------------------------- */
-/* Read the number of conversion steps and allocate memory to hold
- data for each step. */
- new->ncvt = astReadInt( channel, "nsla", 0 );
- if ( new->ncvt < 0 ) new->ncvt = 0;
- new->cvttype = astMalloc( sizeof( int ) * (size_t) new->ncvt );
- new->cvtargs = astMalloc( sizeof( double * ) * (size_t) new->ncvt );
- new->cvtextra = astMalloc( sizeof( double * ) * (size_t) new->ncvt );
-
-/* If an error occurred, ensure that all allocated memory is freed. */
- if ( !astOK ) {
- new->cvttype = astFree( new->cvttype );
- new->cvtargs = astFree( new->cvtargs );
- new->cvtextra = astFree( new->cvtextra );
-
-/* Otherwise, initialise the argument pointer array. */
- } else {
- for ( icvt = 0; icvt < new->ncvt; icvt++ ) {
- new->cvtargs[ icvt ] = NULL;
- new->cvtextra[ icvt ] = NULL;
- }
-
-/* Read in data for each conversion step... */
- for ( icvt = 0; icvt < new->ncvt; icvt++ ) {
-
-/* Conversion type. */
-/* ---------------- */
-/* Create an appropriate keyword and read the string representation of
- the conversion type. */
- (void) sprintf( key, "sla%d", icvt + 1 );
- sval = astReadString( channel, key, NULL );
-
-/* If no value was read, report an error. */
- if ( astOK ) {
- if ( !sval ) {
- astError( AST__BADIN,
- "astRead(%s): An SLALIB sky coordinate conversion "
- "type is missing from the input SlaMap data.", status,
- astGetClass( channel ) );
-
-/* Otherwise, convert the string representation into the required
- conversion type code. */
- } else {
- new->cvttype[ icvt ] = CvtCode( sval, status );
-
-/* If the string was not recognised, report an error. */
- if ( new->cvttype[ icvt ] == AST__SLA_NULL ) {
- astError( AST__BADIN,
- "astRead(%s): Invalid SLALIB sky conversion "
- "type \"%s\" in SlaMap data.", status,
- astGetClass( channel ), sval );
- }
- }
-
-/* Free the memory holding the string value. */
- sval = astFree( sval );
- }
-
-/* Obtain the number of arguments associated with the conversion and
- allocate memory to hold them. */
- (void) CvtString( new->cvttype[ icvt ], &comment, &nargs,
- argdesc, status );
- new->cvtargs[ icvt ] = astMalloc( sizeof( double ) *
- (size_t) nargs );
-
-/* Read in data for each argument... */
- if ( astOK ) {
- for ( iarg = 0; iarg < nargs; iarg++ ) {
-
-/* Arguments. */
-/* ---------- */
-/* Create an appropriate keyword and read each argument value. */
- (void) sprintf( key, "sla%d%c", icvt + 1, ALPHABET[ iarg ] );
- new->cvtargs[ icvt ][ iarg ] = astReadDouble( channel, key,
- AST__BAD );
- }
- }
-
-/* Quit looping if an error occurs. */
- if ( !astOK ) break;
- }
- }
-
-/* If an error occurred, clean up by deleting the new SlaMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new SlaMap pointer. */
- return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-void astSlaAdd_( AstSlaMap *this, const char *cvt, const double args[], int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,SlaMap,SlaAdd))( this, cvt, args, status );
-}
-
-
-
-
-
diff --git a/ast-5.3-1/slamap.h b/ast-5.3-1/slamap.h
deleted file mode 100644
index a14cb09..0000000
--- a/ast-5.3-1/slamap.h
+++ /dev/null
@@ -1,327 +0,0 @@
-#if !defined( SLAMAP_INCLUDED ) /* Include this file only once */
-#define SLAMAP_INCLUDED
-/*
-*+
-* Name:
-* slamap.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the SlaMap class.
-
-* Invocation:
-* #include "slamap.h"
-
-* Description:
-* This include file defines the interface to the SlaMap class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The SlaMap class encapsulates the conversions provided by the
-* SLALIB library (SUN/67) for converting between different sky
-* coordinate systems. Since, typically, a sequence of these
-* SLALIB conversions is required, an SlaMap can be used to
-* accumulate a series of conversions which it then applies in
-* sequence.
-
-* Inheritance:
-* The SlaMap class inherits from the Mapping class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* None.
-
-* Methods Over-Ridden:
-* Public:
-* astTransform
-* Use an SlaMap to transform a set of points.
-
-* Protected:
-* astMapMerge
-* Simplify a sequence of Mappings containing an SlaMap.
-
-* New Methods Defined:
-* Public:
-* astSlaAdd
-* Add a coordinate conversion step to an SlaMap.
-
-* Private:
-* None.
-
-* Other Class Functions:
-* Public:
-* astIsASlaMap
-* Test class membership.
-* astSlaMap
-* Create an SlaMap.
-
-* Protected:
-* astCheckSlaMap
-* Validate class membership.
-* astInitSlaMap
-* Initialise an SlaMap.
-* astLoadSlaMap
-* Load an SlaMap.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstSlaMap
-* SlaMap object type.
-
-* Protected:
-* AstSlaMapVtab
-* SlaMap virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 26-APR-1996 (RFWS):
-* Original version.
-* 26-SEP-1996 (RFWS):
-* Added external interface and I/O facilities.
-* 23-MAY-1997 (RFWS):
-* Over-ride the astMapMerge method.
-* 15-OCT-2002 (DSB):
-* Added astSTPConv, astSTPConv1, and STP coordinate system macros.
-* 8-JAN-2003 (DSB):
-* Added protected astInitSlaMapVtab method.
-* 22-FEB-2006 (DSB):
-* Added cvtextra to the AstSlaMap structure.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-
-/* Macros */
-/* ====== */
-#if defined(astCLASS) /* Protected */
-#define AST__NOSTP -1 /* An invalid value for an STP coordinate system */
-#define AST__HAE 0 /* Heliocentric-aries-ecliptic spherical coordinates */
-#define AST__HAEC 1 /* Heliocentric-aries-ecliptic cartesian coordinates */
-#define AST__HAQ 2 /* Heliocentric-aries-equatorial spherical coordinates */
-#define AST__HAQC 3 /* Heliocentric-aries-equatorial cartesian coordinates */
-#define AST__HG 4 /* Heliographic spherical coordinates */
-#define AST__HGC 5 /* Heliographic cartesian coordinates */
-#define AST__HPC 6 /* Helioprojective-cartesian spherical coordinates */
-#define AST__HPCC 7 /* Helioprojective-cartesian cartesian coordinates */
-#define AST__HPR 8 /* Helioprojective-radial spherical coordinates */
-#define AST__HPRC 9 /* Helioprojective-radial cartesian coordinates */
-#define AST__GSE 10 /* Geocentric-solar-ecliptic spherical coordinates */
-#define AST__GSEC 11 /* Geocentric-solar-ecliptic cartesian coordinates */
-#endif
-
-/* One IAU astronomical unit, in metres. */
-#define AST__AU 1.49597870E11
-
-/* One solar radius (top of photosphere?), in metres (from "The Explanatory
- Supplement to the Astronomical Almanac"). */
-#define AST__SOLRAD 6.96E8
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* SlaMap structure. */
-/* ----------------- */
-/* This structure contains all information that is unique to each
- object in the class (e.g. its instance variables). */
-typedef struct AstSlaMap {
-
-/* Attributes inherited from the parent class. */
- AstMapping mapping; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- int *cvttype; /* Pointer to array of conversion types */
- double **cvtargs; /* Pointer to argument list pointer array */
- double **cvtextra; /* Pointer to intermediate values pointer array */
- int ncvt; /* Number of conversions to perform */
-} AstSlaMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstSlaMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstMappingVtab mapping_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- void (* SlaAdd)( AstSlaMap *, const char *, const double[], int * );
-} AstSlaMapVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstSlaMapGlobals {
- AstSlaMapVtab Class_Vtab;
- int Class_Init;
- double Eq_Cache;
- double Ep_Cache;
- double Amprms_Cache[ 21 ];
-} AstSlaMapGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(SlaMap) /* Check class membership */
-astPROTO_ISA(SlaMap) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstSlaMap *astSlaMap_( int, const char *, int *, ...);
-#else
-AstSlaMap *astSlaMapId_( int, const char *, ... )__attribute__((format(printf,2,3)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstSlaMap *astInitSlaMap_( void *, size_t, int, AstSlaMapVtab *,
- const char *, int, int * );
-
-/* Vtab initialiser. */
-void astInitSlaMapVtab_( AstSlaMapVtab *, const char *, int * );
-
-/* Loader. */
-AstSlaMap *astLoadSlaMap_( void *, size_t, AstSlaMapVtab *,
- const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitSlaMapGlobals_( AstSlaMapGlobals * );
-#endif
-
-/* Other functions. */
-void astSTPConv1_( double, int, double[3], double[3], int, double[3], double[3], int * );
-void astSTPConv_( double, int, int, double[3], double *[3], int, double[3], double *[3], int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-void astSlaAdd_( AstSlaMap *, const char *, const double[], int * );
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckSlaMap(this) astINVOKE_CHECK(SlaMap,this,0)
-#define astVerifySlaMap(this) astINVOKE_CHECK(SlaMap,this,1)
-
-/* Test class membership. */
-#define astIsASlaMap(this) astINVOKE_ISA(SlaMap,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astSlaMap astINVOKE(F,astSlaMap_)
-#else
-#define astSlaMap astINVOKE(F,astSlaMapId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitSlaMap(mem,size,init,vtab,name,flags) \
-astINVOKE(O,astInitSlaMap_(mem,size,init,vtab,name,flags,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitSlaMapVtab(vtab,name) astINVOKE(V,astInitSlaMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadSlaMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadSlaMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckSlaMap to validate SlaMap pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-#define astSlaAdd(this,cvt,args) \
-astINVOKE(V,astSlaAdd_(astCheckSlaMap(this),cvt,args,STATUS_PTR))
-
-#if defined(astCLASS) /* Protected */
-#define astSTPConv astSTPConv_
-#define astSTPConv1 astSTPConv1_
-#endif
-
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/specfluxframe.c b/ast-5.3-1/specfluxframe.c
deleted file mode 100644
index 3f27bc6..0000000
--- a/ast-5.3-1/specfluxframe.c
+++ /dev/null
@@ -1,2182 +0,0 @@
-/*
-*class++
-* Name:
-* SpecFluxFrame
-
-* Purpose:
-* Compound spectrum/flux Frame.
-
-* Constructor Function:
-c astSpecFluxFrame
-f AST_SPECFLUXFRAME
-
-* Description:
-* A SpecFluxFrame combines a SpecFrame and a FluxFrame into a single
-* 2-dimensional compound Frame. Such a Frame can for instance be used
-* to describe a Plot of a spectrum in which the first axis represents
-* spectral position and the second axis represents flux.
-
-* Inheritance:
-* The SpecFluxFrame class inherits from the CmpFrame class.
-
-* Attributes:
-* The SpecFluxFrame class does not define any new attributes beyond
-* those which are applicable to all CmpFrames. However, the attributes
-* of the component Frames can be accessed as if they were attributes
-* of the SpecFluxFrame. For instance, the SpecFluxFrame will recognise
-* the "StdOfRest" attribute and forward access requests to the component
-* SpecFrame. An axis index can optionally be appended to the end of any
-* attribute name, in which case the request to access the attribute will
-* be forwarded to the primary Frame defining the specified axis.
-
-* Functions:
-c The SpecFluxFrame class does not define any new functions beyond those
-f The SpecFluxFrame class does not define any new routines beyond those
-* which are applicable to all CmpFrames.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 8-DEC-2004 (DSB):
-* Original version.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS SpecFluxFrame
-
-/* Define the first and last acceptable System values. */
-#define FIRST_SYSTEM AST__COMP
-#define LAST_SYSTEM AST__COMP
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "globals.h" /* Thread-safe global data access */
-#include "object.h" /* Base Object class */
-#include "mapping.h" /* Coordinate Mappings */
-#include "unitmap.h" /* Unit Mappings */
-#include "permmap.h" /* Coordinate permutation Mappings */
-#include "cmpmap.h" /* Compound Mappings */
-#include "axis.h" /* Coordinate axes */
-#include "cmpframe.h" /* Parent CmpFrame class */
-#include "tranmap.h" /* Separated transformation Mappings */
-#include "mathmap.h" /* Algebraic Mappings */
-#include "ratemap.h" /* Differential Mappings */
-#include "specframe.h" /* SpecFrame class */
-#include "fluxframe.h" /* FluxFrame class */
-#include "specfluxframe.h" /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_match)( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int (* parent_subframe)( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static const char *(* parent_gettitle)( AstFrame *, int * );
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->GetTitle_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(SpecFluxFrame)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(SpecFluxFrame,Class_Init)
-#define class_vtab astGLOBAL(SpecFluxFrame,Class_Vtab)
-#define gettitle_buff astGLOBAL(SpecFluxFrame,GetTitle_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-static char gettitle_buff[ 101 ];
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstSpecFluxFrameVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstSpecFluxFrame *astSpecFluxFrameId_( void *, void *, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstFluxFrame *GetFluxFrame( AstSpecFluxFrame *, int, int * );
-static AstMapping *MakeMap2( AstSpecFluxFrame *, int * );
-static AstMapping *MakeMap3( AstSpecFluxFrame *, AstSpecFluxFrame *, int * );
-static AstMapping *MakeMapF( AstFluxFrame *, AstSpecFrame *, AstFluxFrame *, AstSpecFrame *, int * );
-static AstMapping *MakeMapI( AstFluxFrame *, AstSpecFrame *, AstFluxFrame *, AstSpecFrame *, int * );
-static AstSpecFrame *GetSpecFrame( AstSpecFluxFrame *, int, int * );
-static const char *GetTitle( AstFrame *, int * );
-static int MakeSFMapping( AstSpecFluxFrame *, AstSpecFluxFrame *, AstMapping **, int * );
-static int Match( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int SubFrame( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-
-/* Member functions. */
-/* ================= */
-
-static AstFluxFrame *GetFluxFrame( AstSpecFluxFrame *this, int std, int *status ){
-/*
-* Name:
-* GetFluxFrame
-
-* Purpose:
-* Return a pointer to the FluxFrame in a FluxSpecFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specfluxframe.h"
-* AstFluxFrame *GetFluxFrame( AstSpecFluxFrame *this, int std, int *status )
-
-* Class Membership:
-* SpecFluxFrame member function.
-
-* Description:
-* Returns a pointer to the FluxFrame in a SpecFluxFrame.
-
-* Parameters:
-* this
-* Pointer to the SpecFluxFrame.
-* std
-* If non zero, then the returned FluxFrame is a standardised copy of
-* the FluxFrame in the supplied SpecFluxFrame, in which the System has
-* been set explicitly (rather than potentially being defaulted), and
-* the Units have been cleared to use default units appropriate to
-* the flux System.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the FluxFrame. Should be freed using astAnnul when no
-* longer needed.
-
-* Notes:
-* NULL is returned if this function is invoked with the global error
-* status set or if it should fail for any reason.
-*/
-
-/* Local Variables; */
- AstFluxFrame *ff;
- AstFluxFrame *ret;
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* The FluxFrame is always the second Frame in the parent CmpFrame. */
- ff = (AstFluxFrame *) ((AstCmpFrame *)this)->frame2;
-
-/* Produce a standardised copy of the FluxFrame if required, or clone the
- above pointer otherwise. */
- if( std ) {
- ret = astCopy( ff );
- astSetSystem( ret, astGetSystem( ff ) );
- astClearUnit( ret, 0 );
- } else {
- ret = astClone( ff );
- }
-
-/* Annul the returned pointer if anything went wrong. */
- if( !astOK ) ret = astAnnul( ret );
-
-/* Return the result. */
- return ret;
-}
-
-static AstSpecFrame *GetSpecFrame( AstSpecFluxFrame *this, int std, int *status ){
-/*
-* Name:
-* GetSpecFrame
-
-* Purpose:
-* Return a pointer to the SpecFrame in a FluxSpecFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specfluxframe.h"
-* AstSpecFrame *GetSpecFrame( AstSpecFluxFrame *this, int std, int *status )
-
-* Class Membership:
-* SpecFluxFrame member function.
-
-* Description:
-* Returns a pointer to the SpecFrame in a SpecFluxFrame.
-
-* Parameters:
-* this
-* Pointer to the SpecFluxFrame.
-* std
-* If non zero, then the returned SpecFrame is a standardised copy of
-* the SpecFrame in the supplied SpecFluxFrame, in which the System
-* and Units have been set explicitly to the values appropriate to the
-* flux system in use in the FluxFrame in the supplied SpecFluxFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the FluxFrame. Should be freed using astAnnul when no
-* longer needed.
-
-* Notes:
-* NULL is returned if this function is invoked with the global error
-* status set or if it should fail for any reason.
-*/
-
-/* Local Variables; */
- AstFluxFrame *ff;
- AstSpecFrame *ret;
- AstSpecFrame *sf;
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the SpecFrame (the first Frame in the parent CmpFrame). */
- sf = (AstSpecFrame *) ((AstCmpFrame *)this)->frame1;
-
-/* If we want a standardised version of the SpecFrame... */
- if( std ) {
-
-/* The FluxFrame is always the second Frame in the parent CmpFrame. */
- ff = (AstFluxFrame *) ((AstCmpFrame *)this)->frame2;
-
-/* Produce a copy of the SpecFrame and set its System and Units
- appropriate to the flux system (expressed in default units). */
- ret = astCopy( sf );
- astSetSystem( ret, astGetDensitySystem( ff ) );
- astSetUnit( ret, 0, astGetDensityUnit( ff ) );
-
-/* If we are not standardising the SpecFrame, just return a clone of the
- pointer in the parent CmpFrame. */
- } else {
- ret = astClone( sf );
- }
-
-/* Annul the returned pointer if anything went wrong. */
- if( !astOK ) ret = astAnnul( ret );
-
-/* Return the result. */
- return ret;
-}
-
-static const char *GetTitle( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetTitle
-
-* Purpose:
-* Obtain a pointer to the Title string for a SpecFluxFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specfluxframe.h"
-* const char *GetTitle( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* SpecFluxFrame member function (over-rides the astGetTitle method
-* inherited from the CmpFrame class).
-
-* Description:
-* This function returns a pointer to the Title string for a SpecFluxFrame.
-* A pointer to a suitable default string is returned if no Title value has
-* previously been set.
-
-* Parameters:
-* this
-* Pointer to the SpecFluxFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a null-terminated character string containing the requested
-* information.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS
- AstSpecFluxFrame *this;
- AstSpecFrame *sf;
- AstFluxFrame *ff;
- const char *result;
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this_frame);
-
-/* Initialise. */
- result = NULL;
-
-/* Obtain a pointer to the SpecFluxFrame structure. */
- this = (AstSpecFluxFrame *) this_frame;
-
-/* See if a Title string has been set. If so, use the parent astGetTitle
- method to obtain a pointer to it. */
- if ( astTestTitle( this ) ) {
- result = (*parent_gettitle)( this_frame, status );
-
-/* Otherwise, we will generate a default Title string. Obtain the values of the
- SpecFrame's attributes that determine what this string will be. */
- } else {
- ff = GetFluxFrame( this, 0, status );
- sf = GetSpecFrame( this, 0, status );
-
- if( astOK ) {
- sprintf( gettitle_buff, "%s versus %s", astGetLabel( ff, 0 ),
- astGetLabel( sf, 0 ) );
- gettitle_buff[ 0 ] = toupper( gettitle_buff[ 0 ] );
- result = gettitle_buff;
- }
-
- ff = astAnnul( ff );
- sf = astAnnul( sf );
-
- }
-
-/* If an error occurred, clear the returned pointer value. */
- if ( !astOK ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-void astInitSpecFluxFrameVtab_( AstSpecFluxFrameVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitSpecFluxFrameVtab
-
-* Purpose:
-* Initialise a virtual function table for a SpecFluxFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "specfluxframe.h"
-* void astInitSpecFluxFrameVtab( AstSpecFluxFrameVtab *vtab, const char *name )
-
-* Class Membership:
-* SpecFluxFrame vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the SpecFluxFrame class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstFrameVtab *frame; /* Pointer to Frame component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitCmpFrameVtab( (AstCmpFrameVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsASpecFluxFrame) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstCmpFrameVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- frame = (AstFrameVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
-
- parent_match = frame->Match;
- frame->Match = Match;
-
- parent_subframe = frame->SubFrame;
- frame->SubFrame = SubFrame;
-
- parent_gettitle = frame->GetTitle;
- frame->GetTitle = GetTitle;
-
-/* Declare the copy constructor, destructor and class dump
- function. */
- astSetDump( vtab, Dump, "SpecFluxFrame",
- "Compound spectral/flux coordinate system description" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static AstMapping *MakeMap2( AstSpecFluxFrame *this, int *status ){
-/*
-* Name:
-* MakeMap2
-
-* Purpose:
-* Generate the second Mapping required by MakeSFMapping
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specfluxframe.h"
-* AstMapping *MakeMap2( AstSpecFluxFrame *this, int *status )
-
-* Class Membership:
-* SpecFluxFrame member function.
-
-* Description:
-* The second Mapping used by MakeSFMapping contains three Mappings in
-* parallel which converts v1 (flux value) and x1 (spectral position) into
-* default units, and passes the third axis (a copy of flux value)
-* unchanged.
-
-* Parameters:
-* this
-* Pointer to the SpecFluxFrame to use.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the required Mapping, or NULL if the Mapping cannot be
-* created. The Mapping will have 3 inputs and 3 outputs.
-
-* Notes:
-* NULL is returned if this function is invoked with the global error
-* status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFrame *f1;
- AstFrame *f2;
- AstFrameSet *fs;
- AstMapping *ax1_map;
- AstMapping *ax2_map;
- AstMapping *ax3_map;
- AstMapping *ret;
- AstMapping *tmap;
-
-/* Initialise. */
- ret = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return ret;
-
-/* Input 0 is the supplied FluxFrame value and output 0 is the corresponding
- value in the default units for the FluxFrame system. Take a copy of the
- supplied FluxFrame, and fix its System value (which may be a default value
- based on the Units string), and then clear the Units so that it represents
- default units for the System. */
- f1 = (AstFrame *) GetFluxFrame( this, 0, status );
- f2 = (AstFrame *) GetFluxFrame( this, 1, status );
-
-/* Now, if conversion was possible, get the Mapping from the supplied
- FluxFrame to the default units FluxFrame. */
- fs = astConvert( f1, f2, "" );
- f1 = astAnnul( f1 );
- f2 = astAnnul( f2 );
-
- if( fs ) {
- ax1_map = astGetMapping( fs, AST__BASE, AST__CURRENT );
- fs = astAnnul( fs );
-
-/* Input 1 is the supplied SpecFrame value and output 1 is the corresponding
- value in the spectral system used by the flux system (wavelength or
- frequency). Take a copy of the supplied SpecFrame, and fix its System
- value to wavelength or frequency (depending on the System value of the
- FluxFrame), and set up units of Hz or Angstrom (these are the spectral
- position units used within the default flux units for a FluxFrame). */
- f1 = (AstFrame *) GetSpecFrame( this, 0, status );
- f2 = (AstFrame *) GetSpecFrame( this, 1, status );
-
-/* Now, if conversion was possible, get the Mapping from the supplied
- SpecFrame to the required SpecFrame. */
- fs = astConvert( f1, f2, "" );
- f1 = astAnnul( f1 );
- f2 = astAnnul( f2 );
-
- if( fs ) {
- ax2_map = astGetMapping( fs, AST__BASE, AST__CURRENT );
- fs = astAnnul( fs );
-
-/* Create a UnitMap for the 3rd axis. */
- ax3_map = (AstMapping *) astUnitMap( 1, "", status );
-
-/* Create a parallel CmpMap containing the three Mappings. */
- tmap = (AstMapping *) astCmpMap( ax1_map, ax2_map, 0, "", status );
- ret = (AstMapping *) astCmpMap( tmap, ax3_map, 0, "", status );
-
-/* Free remaining resources. */
- tmap = astAnnul( tmap );
- ax2_map = astAnnul( ax2_map );
- ax3_map = astAnnul( ax3_map );
-
- }
- ax1_map = astAnnul( ax1_map );
- }
-
-/* If an error has occurred, return NULL. */
- if( !astOK ) ret = astAnnul( ret );
-
-/* Return the result */
- return ret;
-}
-
-static AstMapping *MakeMap3( AstSpecFluxFrame *target, AstSpecFluxFrame *result, int *status ){
-/*
-* Name:
-* MakeMap3
-
-* Purpose:
-* Generate the third Mapping required by MakeSFMapping
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specfluxframe.h"
-* AstMapping *MakeMap3( AstSpecFluxFrame *target, AstSpecFluxFrame *result, int *status )
-
-* Class Membership:
-* SpecFluxFrame member function.
-
-* Description:
-* The third Mapping used by MakeSFMapping converts input (v1,x1) in
-* default units to output (v2,x2) in default units. The third axis (x1)
-* in original units is converted to x2 in original units.
-
-* Parameters:
-* target
-* Pointer to the first SpecFluxFrame.
-* result
-* Pointer to the second SpecFluxFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the required Mapping, or NULL if the Mapping cannot be
-* created. The Mapping will have 3 inputs and 3 outputs.
-
-* Notes:
-* NULL is returned if this function is invoked with the global error
-* status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstFluxFrame *ff2;
- AstFluxFrame *ff1;
- AstFrameSet *fs;
- AstMapping *fmap;
- AstMapping *imap;
- AstMapping *mapa;
- AstMapping *mapb;
- AstMapping *ret;
- AstSpecFrame *sf2;
- AstSpecFrame *sf1;
-
-/* Initialise */
- ret = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return ret;
-
-/* The first two inputs and outputs are related by a TranMap which
- converts between standardised (v1,x1) and standardised (v2,x2). Get
- pointers to the standardised SpecFrames and FluxFrames in the two
- supplied SpecFluxFrames. */
- ff1 = GetFluxFrame( target, 1, status );
- sf1 = GetSpecFrame( target, 1, status );
- ff2 = GetFluxFrame( result, 1, status );
- sf2 = GetSpecFrame( result, 1, status );
-
-/* Create the Mapping which defines the forward transformation of the
- required TranMap. The forward transformation of this Mapping goes from
- (v1,x1) to (v2,x2). */
- fmap = MakeMapF( ff1, sf1, ff2, sf2, status );
-
-/* Create the Mapping which defines the inverse transformation of the
- required TranMap. The inverse transformation of this Mapping goes from
- (v2,x2) to (v1,x1). */
- imap = MakeMapI( ff1, sf1, ff2, sf2, status );
-
-/* Combine these into a TranMap */
- if( fmap && imap ) {
- mapa = (AstMapping *) astTranMap( fmap, imap, "", status );
- } else {
- mapa = NULL;
- }
-
-/* Free resources. */
- ff1 = astAnnul( ff1 );
- sf1 = astAnnul( sf1 );
- ff2 = astAnnul( ff2 );
- sf2 = astAnnul( sf2 );
- if( fmap ) fmap = astAnnul( fmap );
- if( imap ) imap = astAnnul( imap );
-
-/* The third input and output are related by a Mapping which converts
- between supplied (x1) and supplied (x2). Get pointers to the original
- unmodified SpecFrames in the two supplied SpecFluxFrames. */
- sf1 = GetSpecFrame( target, 0, status );
- sf2 = GetSpecFrame( result, 0, status );
-
-/* Find the Mapping from the first to the second. */
- fs = astConvert( sf1, sf2, "" );
- if( fs ) {
- mapb = astGetMapping( fs, AST__BASE, AST__CURRENT );
- fs = astAnnul( fs );
- } else {
- mapb = NULL;
- }
-
-/* Free resources. */
- sf1 = astAnnul( sf1 );
- sf2 = astAnnul( sf2 );
-
-/* Combine the two Mappings in parallel. */
- if( mapa && mapb ) ret = (AstMapping *) astCmpMap( mapa, mapb, 0, "", status );
- if( mapa ) mapa = astAnnul( mapa );
- if( mapb ) mapb = astAnnul( mapb );
-
-/* If an error has occurred, return NULL. */
- if( !astOK ) ret = astAnnul( ret );
-
-/* Return the result */
- return ret;
-}
-
-static AstMapping *MakeMapF( AstFluxFrame *v1, AstSpecFrame *x1,
- AstFluxFrame *v2, AstSpecFrame *x2, int *status ){
-/*
-* Name:
-* MakeMapF
-
-* Purpose:
-* Generate the forward part of the third Mapping required by MakeSFMapping
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specfluxframe.h"
-* AstMapping *MakeMapF( AstFluxFrame *v1, AstSpecFrame *x1,
-* AstFluxFrame *v2, AstSpecFrame *x2, int *status )
-
-* Class Membership:
-* SpecFluxFrame member function.
-
-* Description:
-* Theis creates a 2-input 2-output Mapping which transforms
-* input (v1,x1) in default units to output (v2,x2) in default units.
-
-* Parameters:
-* v1
-* Pointer to the standardised input FluxFrame.
-* x1
-* Pointer to the standardised input SpecFrame.
-* v2
-* Pointer to the standardised output FluxFrame.
-* x2
-* Pointer to the standardised output SpecFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the required Mapping, or NULL if the Mapping cannot be
-* created.
-
-* Notes:
-* NULL is returned if this function is invoked with the global error
-* status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstCmpMap *cmap1;
- AstCmpMap *cmap2;
- AstCmpMap *cmap3;
- AstFrameSet *fs;
- AstMapping *m;
- AstMapping *ret;
- AstMathMap *div;
- AstPermMap *perm;
- AstRateMap *rate;
- AstUnitMap *unit;
- const char *fwd[1];
- const char *inv[2];
- int inperm[ 2 ];
- int outperm[ 3 ];
-
-/* Initialise */
- ret = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return ret;
-
-/* First create the required component Mappings.
- --------------------------------------------- */
-
-/* A Mapping which maps input spectral position (x1) into output spectral
- position (x2). */
- fs = astConvert( x1, x2, "" );
- if( fs ) {
- m = astGetMapping( fs, AST__BASE, AST__CURRENT );
-
-/* A 1-input 1-output Mapping in which the input is spectral position (x1)
- and the output is the rate of change of output spectral position (x2)
- with respect to input spectral position (x1). */
- rate = astRateMap( m, 0, 0, "", status );
-
-/* A MathMap which is used to divide the flux value (v1) by the absolute rate
- of change of x2 wrt x1 */
- fwd[ 0 ] = "out=in0/abs(in1)";
- inv[ 0 ] = "in0";
- inv[ 1 ] = "in1";
- div = astMathMap( 2, 1, 1, fwd, 2, inv, "", status );
-
-/* A 1D UnitMap used to copy v1. */
- unit = astUnitMap( 1, "", status );
-
-/* A PermMap which is used to produce an extra output copy of x1. */
- inperm[ 0 ] = 0;
- inperm[ 1 ] = 2;
- outperm[ 0 ] = 0;
- outperm[ 1 ] = 1;
- outperm[ 2 ] = 1;
- perm = astPermMap( 2, inperm, 3, outperm, NULL, "", status );
-
-/* Now combine these component Mappings together.
- --------------------------------------------- */
-
-/* First put the UnitMap and the RateMap in parallel. This produces a 2-in
- 2-out Mapping in which the inputs are (v1,x1) and the outputs are
- (v1,dx2/dx1). */
- cmap1 = astCmpMap( unit, rate, 0, "", status );
-
-/* Now put this in series with the dividing MathMap. This results in a
- 2-in, 1-out Mapping in which the inputs are v1 and x1 and the single
- output is v2. */
- cmap2 = astCmpMap( cmap1, div, 1, "", status );
-
-/* Now put this in parallel with the x1->x2 Mapping. This results in a
- 3-in, 2-out Mapping in which the inputs are (v1,x1,x1) and the outputs
- are (v2,x2). */
- cmap3 = astCmpMap( cmap2, m, 0, "", status );
-
-/* Finally put this in series with the PermMap. This results in a 2-in,
- 2-out Mapping in which the inputs are (v1,x1) and the outputs are
- (v2,x2). */
- ret = (AstMapping *) astCmpMap( perm, cmap3, 1, "", status );
-
-/* Free resources. */
- fs = astAnnul( fs );
- m = astAnnul( m );
- rate = astAnnul( rate );
- div= astAnnul( div );
- unit = astAnnul( unit );
- perm = astAnnul( perm );
- cmap1 = astAnnul( cmap1 );
- cmap2 = astAnnul( cmap2 );
- cmap3 = astAnnul( cmap3 );
- }
-
-/* If an error has occurred, return NULL. */
- if( !astOK ) ret = astAnnul( ret );
-
-/* Return the result */
- return ret;
-}
-
-static AstMapping *MakeMapI( AstFluxFrame *v1, AstSpecFrame *x1,
- AstFluxFrame *v2, AstSpecFrame *x2, int *status ){
-/*
-* Name:
-* MakeMapI
-
-* Purpose:
-* Generate the inverse part of the third Mapping required by MakeSFMapping
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specfluxframe.h"
-* AstMapping *MakeMapI( AstFluxFrame *v1, AstSpecFrame *x1,
-* AstFluxFrame *v2, AstSpecFrame *x2 )
-
-* Class Membership:
-* SpecFluxFrame member function.
-
-* Description:
-* This creates a 2-input 2-output Mapping in which the inverse
-* transformation transforms "outputs" representing (v2,x2) into
-* "inputs" representing (v1,x1).
-
-* Parameters:
-* v1
-* Pointer to the standardised input FluxFrame.
-* x1
-* Pointer to the standardised input SpecFrame.
-* v2
-* Pointer to the standardised output FluxFrame.
-* x2
-* Pointer to the standardised output SpecFrame.
-
-* Returned Value:
-* A pointer to the required Mapping, or NULL if the Mapping cannot be
-* created.
-
-* Notes:
-* NULL is returned if this function is invoked with the global error
-* status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstCmpMap *cmap1;
- AstCmpMap *cmap2;
- AstCmpMap *cmap3;
- AstCmpMap *cmap4;
- AstCmpMap *cmap5;
- AstFrameSet *fs;
- AstMapping *m;
- AstMapping *ret;
- AstMathMap *mult;
- AstPermMap *perm;
- AstRateMap *rate;
- AstUnitMap *unit;
- const char *fwd[1];
- const char *inv[2];
- int inperm[ 2 ];
- int outperm[ 3 ];
-
-/* Initialise */
- ret = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return ret;
-
-/* We create a CmpMap in which the forward transformation foes from
- (v2,x2) to (v1,x1) and we finally invert this Mapping to get the
- required Mapping in which the *inverse* transformation goes from
- (v2,x2) to (v1,x1).
-
- First create the required component Mappings.
- --------------------------------------------- */
-
-/* A Mapping which maps spectral position x1 into spectral position x2. */
- fs = astConvert( x1, x2, "" );
- if( fs ) {
- m = astGetMapping( fs, AST__BASE, AST__CURRENT );
-
-/* A 1-input 1-output Mapping in which the input is spectral position x1
- and the output is the rate of change of spectral position x2 with
- respect to spectral position x1. */
- rate = astRateMap( m, 0, 0, "", status );
-
-/* Now invert "m" so that its forward transformation goes from x2 to x1.
- The RateMap created above retains a copy of the original Invert flag
- for "m" and uses it in preference to the current value when transforming
- points. */
- astInvert( m );
-
-/* A MathMap which is used to multiple the flux value v2 by the
- absolute rate of change of x2 wrt x1 */
- fwd[ 0 ] = "out=in0*abs(in1)";
- inv[ 0 ] = "in0";
- inv[ 1 ] = "in1";
- mult = astMathMap( 2, 1, 1, fwd, 2, inv, "", status );
-
-/* A 1D UnitMap used to copy various values. */
- unit = astUnitMap( 1, "", status );
-
-/* A PermMap which is used to produce an extra copy of x1. */
- inperm[ 0 ] = 0;
- inperm[ 1 ] = 2;
- outperm[ 0 ] = 0;
- outperm[ 1 ] = 1;
- outperm[ 2 ] = 1;
- perm = astPermMap( 2, inperm, 3, outperm, NULL, "", status );
-
-/* Now combine these component Mappings together.
- --------------------------------------------- */
-
-/* First put the UnitMap and the RateMap in parallel. This produces a 2-in
- 2-out Mapping in which the inputs are (v2,x1) and the outputs are
- (v2,dx2/dx1). */
- cmap1 = astCmpMap( unit, rate, 0, "", status );
-
-/* Now put this in series with the multiplying MathMap. This results in a
- 2-in, 1-out Mapping in which the inputs are (v2,x1) and the single
- output is v1. */
- cmap2 = astCmpMap( cmap1, mult, 1, "", status );
-
-/* Now put this in parallel with the UnitMap to get a 3-in, 2-out Mapping
- in which the inputs are (v2,x1,x1) and the outputs are (v1,x1). */
- cmap3 = astCmpMap( cmap2, unit, 0, "", status );
-
-/* Now put this in series with the PermMap to get a 2-in, 2-out Mapping
- in which the inputs are (v2,x1) and the outputs are (v1,x1). */
- cmap4 = astCmpMap( perm, cmap3, 1, "", status );
-
-/* Now put the UnitMap in parallel with the (x2->x1 Mapping to get a
- 2-in, 2-out Mapping in which the inputs are (v2,x2) and the outputs are
- (v2,x1). */
- cmap5 = astCmpMap( unit, m, 0, "", status );
-
-/* Finally put this in series with "cmap4" to get a 2-in 2-out Mapping
- from (v2,x2) to (v1,x1). */
- ret = (AstMapping *) astCmpMap( cmap5, cmap4, 1, "", status );
-
-/* Invert this so that the inverse transformation goes from (v2,x2) to
- (v1,x1). */
- astInvert( ret );
-
-/* Free resources. */
- fs = astAnnul( fs );
- m = astAnnul( m );
- rate = astAnnul( rate );
- mult = astAnnul( mult );
- unit = astAnnul( unit );
- perm = astAnnul( perm );
- cmap1 = astAnnul( cmap1 );
- cmap2 = astAnnul( cmap2 );
- cmap3 = astAnnul( cmap3 );
- cmap4 = astAnnul( cmap4 );
- cmap5 = astAnnul( cmap5 );
- }
-
-/* If an error has occurred, return NULL. */
- if( !astOK ) ret = astAnnul( ret );
-
-/* Return the result */
- return ret;
-}
-
-static int MakeSFMapping( AstSpecFluxFrame *target, AstSpecFluxFrame *result,
- AstMapping **map, int *status ){
-/*
-* Name:
-* MakeSFMapping
-
-* Purpose:
-* Generate a Mapping between two SpecFluxFrames.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specfluxframe.h"
-* int MakeSFMapping( AstSpecFluxFrame *target, AstSpecFluxFrame *result,
-* AstMapping **map, int *status )
-
-* Class Membership:
-* SpecFluxFrame member function.
-
-* Description:
-* This function takes two SpecFluxFrames and generates a Mapping that
-* converts between them, taking account of differences in their
-* coordinate systems, systems, units, etc. (but not allowing for any
-* axis permutations).
-
-* Parameters:
-* target
-* Pointer to the first SpecFluxFrame.
-* result
-* Pointer to the second SpecFluxFrame.
-* map
-* Pointer to a location which is to receive a pointer to the
-* returned Mapping. The forward transformation of this Mapping
-* will convert from "target" coordinates to "result"
-* coordinates, and the inverse transformation will convert in
-* the opposite direction (all coordinate values in radians).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the Mapping could be generated, or zero if the two
-* SpecFluxFrames are sufficiently un-related that no meaningful Mapping
-* can be produced.
-
-* Notes:
-* A value of zero is returned if this function is invoked with the
-* global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstMapping *map1;
- AstMapping *map2;
- AstMapping *map3;
- AstMapping *map4;
- AstMapping *map5;
- AstMapping *tmap1;
- AstMapping *tmap2;
- AstMapping *tmap3;
- AstMapping *tmap4;
- int inperm[2];
- int match;
- int outperm[3];
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Initialise the returned values. */
- match = 0;
- *map = NULL;
-
-/* Initialise other things. */
- map1 = NULL;
- map2 = NULL;
- map3 = NULL;
- map4 = NULL;
- map5 = NULL;
- tmap1 = NULL;
- tmap2 = NULL;
- tmap3 = NULL;
- tmap4 = NULL;
-
-/* At the top level, the required Mapping consists of five Mappings in
- series. Inputs 0 and 1 of the total Mapping correspond to the SpecFrame
- and FluxFrame in the target SpecFluxFrame. These are referred to as X1
- and V1. Outputs 0 and 1 of the total Mapping correspond to the SpecFrame
- and FluxFrame in the result SpecFluxFrame. These are referred to as X2
- and V2. */
-
-/* Map1 is a PermMap which copies v1 to its first output and x1 to its
- second and third outputs. The inverse transformation copies v1 from
- its first output and x1 from its third output. */
- inperm[ 0 ] = 2;
- inperm[ 1 ] = 0;
- outperm[ 0 ] = 1;
- outperm[ 1 ] = 0;
- outperm[ 2 ] = 0;
- map1 = (AstMapping *) astPermMap( 2, inperm, 3, outperm, NULL, "", status );
-
-/* Map2 contains three Mappings in parallel which converts v1 and x1 into
- default units, and passes the third axis unchanged. */
- map2 = MakeMap2( target, status );
-
-/* Map3 converts ( v1,x1) in default units to (v2,x2) in default units.
- The third axis (x1) in original units is convert to x2 in original
- units. */
- map3 = map2 ? MakeMap3( target, result, status ) : NULL;
-
-/* Map4 converts (v2,x2) in default units to (v2,x2) in original units
- and passes the third axis unchanged. This is similar to Map2 but based
- on the result ratherthan the target, and in the opposite direction. */
- if( map3 ) {
- map4 = MakeMap2( result, status );
- if( map4 ) astInvert( map4 );
- } else {
- map4 = NULL;
- }
-
-/* Map5 is a PermMap which is the inverse of Map1. */
- map5 = map4 ? astCopy( map1 ) : NULL;
- if( map5 ) astInvert( map5 );
-
-/* Combine all 6 Mappings in series. */
- if( map5 ) {
- tmap1 = (AstMapping *) astCmpMap( map1, map2, 1, "", status );
- tmap2 = (AstMapping *) astCmpMap( tmap1, map3, 1, "", status );
- tmap3 = (AstMapping *) astCmpMap( tmap2, map4, 1, "", status );
- tmap4 = (AstMapping *) astCmpMap( tmap3, map5, 1, "", status );
-
-/* Return the simplified total Mapping. */
- *map = astSimplify( tmap4 );
- match = 1;
- }
-
-/* Free resources. */
- if( map1 ) map1 = astAnnul( map1 );
- if( map2 ) map2 = astAnnul( map2 );
- if( map3 ) map3 = astAnnul( map3 );
- if( map4 ) map4 = astAnnul( map4 );
- if( map5 ) map5 = astAnnul( map5 );
- if( tmap1 ) tmap1 = astAnnul( tmap1 );
- if( tmap2 ) tmap2 = astAnnul( tmap2 );
- if( tmap3 ) tmap3 = astAnnul( tmap3 );
- if( tmap4 ) tmap4 = astAnnul( tmap4 );
-
-/* If an error occurred, annul the returned Mapping and clear the
- returned values. */
- if ( !astOK ) {
- *map = astAnnul( *map );
- match = 0;
- }
-
-/* Return the result. */
- return match;
-}
-
-static int Match( AstFrame *template_frame, AstFrame *target,
- int **template_axes, int **target_axes,
- AstMapping **map, AstFrame **result, int *status ) {
-/*
-* Name:
-* Match
-
-* Purpose:
-* Determine if conversion is possible between two coordinate systems.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specfluxframe.h"
-* int Match( AstFrame *template, AstFrame *target,
-* int **template_axes, int **target_axes,
-* AstMapping **map, AstFrame **result, int *status )
-
-* Class Membership:
-* SpecFluxFrame member function (over-rides the protected astMatch
-* method inherited from the Frame class).
-
-* Description:
-* This function matches a "template" SpecFluxFrame to a "target" Frame
-* and determines whether it is possible to convert coordinates
-* between them. If it is, a Mapping that performs the
-* transformation is returned along with a new Frame that describes
-* the coordinate system that results when this Mapping is applied
-* to the "target" coordinate system. In addition, information is
-* returned to allow the axes in this "result" Frame to be
-* associated with the corresponding axes in the "target" Frame and
-* "template" SpecFluxFrame from which they are derived.
-
-* Parameters:
-* template
-* Pointer to the template SpecFluxFrame. This describes the
-* coordinate system (or set of possible coordinate systems)
-* into which we wish to convert our coordinates.
-* target
-* Pointer to the target Frame. This describes the coordinate
-* system in which we already have coordinates.
-* template_axes
-* Address of a location where a pointer to int will be returned
-* if the requested coordinate conversion is possible. This
-* pointer will point at a dynamically allocated array of
-* integers with one element for each axis of the "result" Frame
-* (see below). It must be freed by the caller (using astFree)
-* when no longer required.
-*
-* For each axis in the result Frame, the corresponding element
-* of this array will return the (zero-based) index of the
-* template SpecFluxFrame axis from which it is derived. If it is not
-* derived from any template axis, a value of -1 will be
-* returned instead.
-* target_axes
-* Address of a location where a pointer to int will be returned
-* if the requested coordinate conversion is possible. This
-* pointer will point at a dynamically allocated array of
-* integers with one element for each axis of the "result" Frame
-* (see below). It must be freed by the caller (using astFree)
-* when no longer required.
-*
-* For each axis in the result Frame, the corresponding element
-* of this array will return the (zero-based) index of the
-* target Frame axis from which it is derived. If it is not
-* derived from any target axis, a value of -1 will be returned
-* instead.
-* map
-* Address of a location where a pointer to a new Mapping will
-* be returned if the requested coordinate conversion is
-* possible. If returned, the forward transformation of this
-* Mapping may be used to convert coordinates between the
-* "target" Frame and the "result" Frame (see below) and the
-* inverse transformation will convert in the opposite
-* direction.
-* result
-* Address of a location where a pointer to a new Frame will be
-* returned if the requested coordinate conversion is
-* possible. If returned, this Frame describes the coordinate
-* system that results from applying the returned Mapping
-* (above) to the "target" coordinate system. In general, this
-* Frame will combine attributes from (and will therefore be
-* more specific than) both the target Frame and the template
-* SpecFluxFrame. In particular, when the template allows the
-* possibility of transformaing to any one of a set of
-* alternative coordinate systems, the "result" Frame will
-* indicate which of the alternatives was used.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if the requested coordinate
-* conversion is possible. Otherwise zero is returned (this will
-* not in itself result in an error condition).
-
-* Notes:
-* - By default, the "result" Frame will have its number of axes
-* and axis order determined by the "template" SpecFluxFrame. However,
-* if the PreserveAxes attribute of the template SpecFluxFrame is
-* non-zero, then the axis count and axis order of the "target"
-* Frame will be used instead.
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstSpecFluxFrame *template; /* Pointer to template SpecFluxFrame structure */
- int match; /* Coordinate conversion possible? */
- int swap1; /* Template axes swapped? */
- int swap2; /* Target axes swapped? */
- int swap; /* Additional axis swap needed? */
-
-/* Initialise the returned values. */
- *template_axes = NULL;
- *target_axes = NULL;
- *map = NULL;
- *result = NULL;
- match = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return match;
-
-/* Obtain a pointer to the template SpecFluxFrame structure. */
- template = (AstSpecFluxFrame *) template_frame;
-
-/* If the target is not a SpecFluxFrame, use the results returned by the
- parent Match method inherited from the CmpFrame class. */
- if( !astIsASpecFluxFrame( target ) ) {
- match = (*parent_match)( template_frame, target, template_axes,
- target_axes, map, result, status );
-
-
-/* If the target is a SpecFluxFrame, see if we can convert between target
- and template */
- } else {
-
-/* We must now decide how the order of the axes in the result Frame relates to
- the order of axes in the target Frame. There are two factors involved. The
- first depends on whether the axis permutation array for the template
- SpecFluxFrame (whose method we are executing) causes an axis
- reversal. Determine this by permuting axis index zero. */
- swap1 = ( astValidateAxis( template, 0, "astMatch" ) != 0 );
-
-/* The second factor depends on whether the axes of the target SpecFluxFrame
- causes an axis reversal. Determine this by permuting axis index zero. */
- swap2 = ( astValidateAxis( target, 0, "astMatch" ) != 0 );
-
-/* Combine these to determine if an additional axis swap will be
- needed. */
- swap = ( swap1 != swap2 );
-
-/* Now check to see if this additional swap is permitted by the template's
- Permute attribute. */
- match = ( !swap || astGetPermute( template ) );
-
-/* Allocate the target and template axes arrays. */
- *template_axes = astMalloc( sizeof(int)*2 );
- *target_axes = astMalloc( sizeof(int)*2 );
-
-/* If the Frames still match, we next set up the axis association
- arrays. */
- if ( astOK && match ) {
-
-/* If the target axis order is to be preserved, then the target axis
- association involves no permutation but the template axis
- association may involve an axis swap. */
- if ( astGetPreserveAxes( template ) ) {
- (*template_axes)[ 0 ] = swap;
- (*template_axes)[ 1 ] = !swap;
- (*target_axes)[ 0 ] = 0;
- (*target_axes)[ 1 ] = 1;
-
-/* Otherwise, any swap applies to the target axis association
- instead. */
- } else {
- (*template_axes)[ 0 ] = 0;
- (*template_axes)[ 1 ] = 1;
- (*target_axes)[ 0 ] = swap;
- (*target_axes)[ 1 ] = !swap;
- }
-
-/* Use the target's "astSubFrame" method to create a new Frame (the
- result Frame) with copies of the target axes in the required
- order. This process also overlays the template attributes on to the
- target Frame and returns a Mapping between the target and result
- Frames which effects the required coordinate conversion. */
- match = astSubFrame( target, template, 2, *target_axes, *template_axes,
- map, result );
-
-/* If an error occurred, or conversion to the result Frame's
- coordinate system was not possible, then free all memory, annul the
- returned objects, and reset the returned value. */
- if ( !astOK || !match ) {
- *template_axes = astFree( *template_axes );
- *target_axes = astFree( *target_axes );
- if( *map ) *map = astAnnul( *map );
- if( *result ) *result = astAnnul( *result );
- match = 0;
- }
- }
- }
-
-/* Return the result. */
- return match;
-}
-
-static int SubFrame( AstFrame *target_frame, AstFrame *template,
- int result_naxes, const int *target_axes,
- const int *template_axes, AstMapping **map,
- AstFrame **result, int *status ) {
-/*
-* Name:
-* SubFrame
-
-* Purpose:
-* Select axes from a SpecFluxFrame and convert to the new coordinate system.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specfluxframe.h"
-* int SubFrame( AstFrame *target, AstFrame *template,
-* int result_naxes, const int *target_axes,
-* const int *template_axes, AstMapping **map,
-* AstFrame **result, int *status )
-
-* Class Membership:
-* SpecFluxFrame member function (over-rides the protected astSubFrame
-* method inherited from the Frame class).
-
-* Description:
-* This function selects a requested sub-set (or super-set) of the
-* axes from a "target" SpecFluxFrame and creates a new Frame with
-* copies of the selected axes assembled in the requested order. It
-* then optionally overlays the attributes of a "template" Frame on
-* to the result. It returns both the resulting Frame and a Mapping
-* that describes how to convert between the coordinate systems
-* described by the target and result Frames. If necessary, this
-* Mapping takes account of any differences in the Frames'
-* attributes due to the influence of the template.
-
-* Parameters:
-* target
-* Pointer to the target SpecFluxFrame, from which axes are to be selected.
-* template
-* Pointer to the template Frame, from which new attributes for
-* the result Frame are to be obtained. Optionally, this may be
-* NULL, in which case no overlaying of template attributes will
-* be performed.
-* result_naxes
-* Number of axes to be selected from the target Frame. This
-* number may be greater than or less than the number of axes in
-* this Frame (or equal).
-* target_axes
-* Pointer to an array of int with result_naxes elements, giving
-* a list of the (zero-based) axis indices of the axes to be
-* selected from the target SpecFluxFrame. The order in which these
-* are given determines the order in which the axes appear in
-* the result Frame. If any of the values in this array is set
-* to -1, the corresponding result axis will not be derived from
-* the target Frame, but will be assigned default attributes
-* instead.
-* template_axes
-* Pointer to an array of int with result_naxes elements. This
-* should contain a list of the template axes (given as
-* zero-based axis indices) with which the axes of the result
-* Frame are to be associated. This array determines which axes
-* are used when overlaying axis-dependent attributes of the
-* template on to the result. If any element of this array is
-* set to -1, the corresponding result axis will not receive any
-* template attributes.
-*
-* If the template argument is given as NULL, this array is not
-* used and a NULL pointer may also be supplied here.
-* map
-* Address of a location to receive a pointer to the returned
-* Mapping. The forward transformation of this Mapping will
-* describe how to convert coordinates from the coordinate
-* system described by the target SpecFluxFrame to that described by
-* the result Frame. The inverse transformation will convert in
-* the opposite direction.
-* result
-* Address of a location to receive a pointer to the result Frame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if coordinate conversion is
-* possible between the target and the result Frame. Otherwise zero
-* is returned and *map and *result are returned as NULL (but this
-* will not in itself result in an error condition). In general,
-* coordinate conversion should always be possible if no template
-* Frame is supplied but may not always be possible otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-
-* Implementation Deficiencies:
-* - It is not clear that the method of handling "extra" axes is
-* the best one, nor is the method of setting the "following" flag
-* necessarily correct. However, it is also not obvious that this
-* feature will ever be needed, so improvements have been left
-* until the requirement is clearer.
-*/
-
-/* Local Variables: */
- AstMapping *tmpmap; /* Temporary Mapping pointer */
- AstPermMap *permmap; /* Pointer to PermMap */
- AstSpecFluxFrame *target; /* Pointer to target SpecFluxFrame structure */
- int match; /* Coordinate conversion is possible? */
- int perm[ 2 ]; /* Permutation array for axis swap */
- int result_swap; /* Swap result SpecFluxFrame coordinates? */
- int target_swap; /* Swap target SpecFluxFrame coordinates? */
-
-/* Initialise the returned values. */
- *map = NULL;
- *result = NULL;
- match = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return match;
-
-/* If the template is not a SpecFluxFrame we use the parent SubFrame
- method inherited form the CmpFrame class. */
- if( !template || !astIsASpecFluxFrame( template ) || result_naxes != 2 ) {
- match = (*parent_subframe)( target_frame, template, result_naxes,
- target_axes, template_axes, map, result, status );
-
-/* Otherwise... */
- } else {
-
-/* Obtain a pointer to the target SpecFluxFrame structure. */
- target = (AstSpecFluxFrame *) target_frame;
-
-/* Form the result from a copy of the target and then permute its axes
- into the order required. */
- *result = astCopy( target );
- astPermAxes( *result, target_axes );
-
-/* Overlay the template attributes on to the result SpecFrame. */
- astOverlay( template, template_axes, *result );
-
-/* Generate a Mapping that takes account of changes in the coordinate
- system (system, units, etc.) between the target SpecFluxFrame and the
- result SpecFluxFrame. If this Mapping can be generated, set "match" to
- indicate that coordinate conversion is possible. */
- match = MakeSFMapping( target, (AstSpecFluxFrame *) *result, map, status );
-
-/* If a Mapping has been obtained, it will expect coordinate values to be
- supplied in (flux,spec) pairs. Test whether we need to swap the
- order of the target SpecFluxFrame coordinates to conform with this. */
- if ( astOK && match ) {
- target_swap = ( astValidateAxis( target, 0, "astSubFrame" ) != 0 );
-
-/* Coordinates will also be delivered in (flux,spec) pairs, so check
- to see whether the result SpecFluxFrame coordinate order should be
- swapped. */
- result_swap = ( target_swap != ( target_axes[ 0 ] != 0 ) );
-
-/* If either set of coordinates needs swapping, create a PermMap that
- will swap a pair of coordinates. */
- permmap = NULL;
- if ( target_swap || result_swap ) {
- perm[ 0 ] = 1;
- perm[ 1 ] = 0;
- permmap = astPermMap( 2, perm, 2, perm, NULL, "", status );
- }
-
-/* If necessary, prefix this PermMap to the main Mapping. */
- if ( target_swap ) {
- tmpmap = (AstMapping *) astCmpMap( permmap, *map, 1, "", status );
- *map = astAnnul( *map );
- *map = tmpmap;
- }
-
-/* Also, if necessary, append it to the main Mapping. */
- if ( result_swap ) {
- tmpmap = (AstMapping *) astCmpMap( *map, permmap, 1, "", status );
- *map = astAnnul( *map );
- *map = tmpmap;
- }
-
-/* Annul the pointer to the PermMap (if created). */
- if ( permmap ) permmap = astAnnul( permmap );
- }
- }
-
-/* If an error occurred, clean up by annulling the result pointers and
- returning appropriate null values. */
- if ( !astOK ) {
- *map = astAnnul( *map );
- *result = astAnnul( *result );
- match = 0;
- }
-
-/* Return the result. */
- return match;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- the axes of a SpecFluxFrame using the private macros defined for this
- purpose at the start of this file. */
-
-/* Copy constructor. */
-/* ----------------- */
-
-/* Destructor. */
-/* ----------- */
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for SpecFluxFrame objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the SpecFluxFrame class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the SpecFluxFrame whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstSpecFluxFrame *this; /* Pointer to the SpecFluxFrame structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SpecFluxFrame structure. */
- this = (AstSpecFluxFrame *) this_object;
-
-/* Write out values representing the instance variables for the
- SpecFluxFrame class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsASpecFluxFrame and astCheckSpecFluxFrame functions using
- the macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(SpecFluxFrame,CmpFrame)
-astMAKE_CHECK(SpecFluxFrame)
-
-AstSpecFluxFrame *astSpecFluxFrame_( void *frame1_void, void *frame2_void,
- const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astSpecFluxFrame
-f AST_SPECFLUXFRAME
-
-* Purpose:
-* Create a SpecFluxFrame.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "specfluxframe.h"
-c AstSpecFluxFrame *astSpecFluxFrame( AstSpecFrame *frame1, AstFluxFrame *frame2,
-c const char *options, ... )
-f RESULT = AST_SPECFLUXFRAME( FRAME1, FRAME2, OPTIONS, STATUS )
-
-* Class Membership:
-* SpecFluxFrame constructor.
-
-* Description:
-* This function creates a new SpecFluxFrame and optionally initialises
-* its attributes.
-*
-* A SpecFluxFrame combines a SpecFrame and a FluxFrame into a single
-* 2-dimensional compound Frame. Such a Frame can for instance be used
-* to describe a Plot of a spectrum in which the first axis represents
-* spectral position and the second axis represents flux.
-
-* Parameters:
-c frame1
-f FRAME1 = INTEGER (Given)
-* Pointer to the SpecFrame. This will form the first axis in the
-* new SpecFluxFrame.
-c frame2
-f FRAME2 = INTEGER (Given)
-* Pointer to the FluxFrame. This will form the second axis in the
-* new SpecFluxFrame. The "SpecVal" attribute of this FluxFrame is
-* not used by the SpecFluxFrame class and so may be set to AST__BAD
-* when the FluxFrame is created.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new SpecFluxFrame. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new SpecFluxFrame. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astSpecFluxFrame()
-f AST_SPECFLUXFRAME = INTEGER
-* A pointer to the new SpecFluxFrame.
-
-* Notes:
-* - The supplied Frame pointers are stored directly, rather than
-* being used to create deep copies of the supplied Frames. This means
-* that any subsequent changes made to the Frames via the supplied
-* pointers will result in equivalent changes being visible in the
-* SpecFluxFrame.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-
-* Status Handling:
-* The protected interface to this function includes an extra
-* parameter at the end of the parameter list descirbed above. This
-* parameter is a pointer to the integer inherited status
-* variable: "int *status".
-
-*--
-
-* Implementation Notes:
-* - This function implements the basic SpecFluxFrame constructor which
-* is available via the protected interface to the SpecFluxFrame class.
-* A public interface is provided by the astSpecFluxFrameId_ function.
-* - Because this function has a variable argument list, it is
-* invoked by a macro that evaluates to a function pointer (not a
-* function invocation) and no checking or casting of arguments is
-* performed before the function is invoked. Because of this, the
-* "frame1" and "frame2" parameters are of type (void *) and are
-* converted and validated within the function itself.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstSpecFluxFrame *new; /* Pointer to new SpecFluxFrame */
- AstFluxFrame *frame2; /* Pointer to FluxFrame structure */
- AstSpecFrame *frame1; /* Pointer to SpecFrame structure */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- new = NULL;
- if ( !astOK ) return new;
-
-/* Obtain and validate pointers to the Frame structures provided. */
- frame1 = astCheckSpecFrame( frame1_void );
- frame2 = astCheckFluxFrame( frame2_void );
- if ( astOK ) {
-
-/* Initialise the SpecFluxFrame, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitSpecFluxFrame( NULL, sizeof( AstSpecFluxFrame ), !class_init,
- &class_vtab, "SpecFluxFrame", frame1, frame2 );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- SpecFluxFrame's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return a pointer to the new SpecFluxFrame. */
- return new;
-}
-
-AstSpecFluxFrame *astSpecFluxFrameId_( void *frame1_void, void *frame2_void,
- const char *options, ... ) {
-/*
-* Name:
-* astSpecFluxFrameId_
-
-* Purpose:
-* Create a SpecFluxFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specfluxframe.h"
-* AstSpecFluxFrame *astSpecFluxFrameId_( void *frame1_void, void *frame2_void,
-* const char *options, ... )
-
-* Class Membership:
-* SpecFluxFrame constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astSpecFluxFrame constructor function. It returns an ID value
-* (instead of a true C pointer) to external users, and must be
-* provided because astSpecFluxFrame_ has a variable argument list which
-* cannot be encapsulated in a macro (where this conversion would
-* otherwise occur). For the same reason, the "frame1" and "frame2"
-* parameters are of type (void *) and are converted and validated
-* within the function itself.
-*
-* The variable argument list also prevents this function from
-* invoking astSpecFluxFrame_ directly, so it must be a
-* re-implementation of it in all respects, except for the final
-* conversion of the result to an ID value.
-
-* Parameters:
-* As for astSpecFluxFrame_.
-
-* Returned Value:
-* The ID value associated with the new SpecFluxFrame.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstSpecFluxFrame *new; /* Pointer to new SpecFluxFrame */
- AstSpecFrame *frame1; /* Pointer to first Frame structure */
- AstFluxFrame *frame2; /* Pointer to second Frame structure */
- va_list args; /* Variable argument list */
-
- int *status; /* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- new = NULL;
- if ( !astOK ) return new;
-
-/* Obtain the Frame pointers from the ID's supplied and validate the
- pointers to ensure they identify valid Frames. */
- frame1 = astVerifySpecFrame( astMakePointer( frame1_void ) );
- frame2 = astVerifyFluxFrame( astMakePointer( frame2_void ) );
- if ( astOK ) {
-
-/* Initialise the SpecFluxFrame, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitSpecFluxFrame( NULL, sizeof( AstSpecFluxFrame ), !class_init,
- &class_vtab, "SpecFluxFrame", frame1, frame2 );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- SpecFluxFrame's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return an ID value for the new SpecFluxFrame. */
- return astMakeId( new );
-}
-
-AstSpecFluxFrame *astInitSpecFluxFrame_( void *mem, size_t size, int init,
- AstSpecFluxFrameVtab *vtab, const char *name,
- AstSpecFrame *frame1, AstFluxFrame *frame2, int *status ) {
-/*
-*+
-* Name:
-* astInitSpecFluxFrame
-
-* Purpose:
-* Initialise a SpecFluxFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "specfluxframe.h"
-* AstSpecFluxFrame *astInitSpecFluxFrame( void *mem, size_t size, int init,
-* AstSpecFluxFrameVtab *vtab, const char *name,
-* AstSpecFrame *frame1, AstFluxFrame *frame2 )
-
-* Class Membership:
-* SpecFluxFrame initialiser.
-
-* Description:
-* This function is provided for use by class implementations to
-* initialise a new SpecFluxFrame object. It allocates memory (if
-* necessary) to accommodate the SpecFluxFrame plus any additional data
-* associated with the derived class. It then initialises a
-* SpecFluxFrame structure at the start of this memory. If the "init"
-* flag is set, it also initialises the contents of a virtual
-* function table for a SpecFluxFrame at the start of the memory passed
-* via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the SpecFluxFrame is to be
-* created. This must be of sufficient size to accommodate the
-* SpecFluxFrame data (sizeof(SpecFluxFrame)) plus any data used by the
-* derived class. If a value of NULL is given, this function
-* will allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the SpecFluxFrame (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the SpecFluxFrame structure, so a valid value must be
-* supplied even if not required for allocating memory.
-* init
-* A logical flag indicating if the SpecFluxFrame's virtual function
-* table is to be initialised. If this value is non-zero, the
-* virtual function table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new SpecFluxFrame.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the Object astClass function).
-* frame1
-* Pointer to the SpecFrame
-* frame2
-* Pointer to the FluxFrame
-
-* Returned Value:
-* A pointer to the new SpecFluxFrame.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstSpecFluxFrame *new; /* Pointer to new SpecFluxFrame */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitSpecFluxFrameVtab( vtab, name );
-
-/* Initialise a Frame structure (the parent class) as the first
- component within the SpecFluxFrame structure, allocating memory if
- necessary. Set the number of Frame axes to zero, since all axis
- information is stored within the component Frames. */
- new = astInitCmpFrame( mem, size, 0, (AstCmpFrameVtab *) vtab, name,
- frame1, frame2 );
- if ( astOK ) {
-
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstSpecFluxFrame *astLoadSpecFluxFrame_( void *mem, size_t size,
- AstSpecFluxFrameVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadSpecFluxFrame
-
-* Purpose:
-* Load a SpecFluxFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "specfluxframe.h"
-* AstSpecFluxFrame *astLoadSpecFluxFrame( void *mem, size_t size,
-* AstSpecFluxFrameVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* SpecFluxFrame loader.
-
-* Description:
-* This function is provided to load a new SpecFluxFrame using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* SpecFluxFrame structure in this memory, using data read from the
-* input Channel.
-
-* Parameters:
-* mem
-* A pointer to the memory into which the SpecFluxFrame is to be
-* loaded. This must be of sufficient size to accommodate the
-* SpecFluxFrame data (sizeof(SpecFluxFrame)) plus any data used by
-* derived classes. If a value of NULL is given, this function
-* will allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the SpecFluxFrame (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the SpecFluxFrame structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstSpecFluxFrame) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new SpecFluxFrame. If this is NULL, a pointer
-* to the (static) virtual function table for the SpecFluxFrame class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "SpecFluxFrame" is used instead.
-
-* Returned Value:
-* A pointer to the new SpecFluxFrame.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Constants: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstSpecFluxFrame *new; /* Pointer to the new SpecFluxFrame */
-
-/* Initialise. */
- new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this SpecFluxFrame. In this case the
- SpecFluxFrame belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstSpecFluxFrame );
- vtab = &class_vtab;
- name = "SpecFluxFrame";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitSpecFluxFrameVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built SpecFluxFrame. */
- new = astLoadCmpFrame( mem, size, (AstCmpFrameVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "SpecFluxFrame" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-/* (none) */
-
-/* If an error occurred, clean up by deleting the new SpecFluxFrame. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new SpecFluxFrame pointer. */
- return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-
-
-
-
diff --git a/ast-5.3-1/specfluxframe.h b/ast-5.3-1/specfluxframe.h
deleted file mode 100644
index 1ccb777..0000000
--- a/ast-5.3-1/specfluxframe.h
+++ /dev/null
@@ -1,215 +0,0 @@
-#if !defined( SPECFLUXFRAME_INCLUDED ) /* Include this file only once */
-#define SPECFLUXFRAME_INCLUDED
-/*
-*+
-* Name:
-* specfluxframe.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the SpecFluxFrame class.
-
-* Invocation:
-* #include "specfluxframe.h"
-
-* Description:
-* This include file defines the interface to the SpecFluxFrame class
-* and provides the type definitions, function prototypes and
-* macros, etc. needed to use this class.
-
-* Inheritance:
-* The SpecFluxFrame class inherits from the Frame class.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 8-DEC-2004 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h" /* Base Object class */
-#include "cmpframe.h" /* Parent Frame class */
-
-#if defined(astCLASS) /* Protected */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros. */
-/* ------- */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* SpecFluxFrame structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each
- object in the class (e.g. its instance variables). */
-typedef struct AstSpecFluxFrame {
-
-/* Attributes inherited from the parent class. */
- AstCmpFrame cmpframe; /* Parent class structure */
-
-} AstSpecFluxFrame;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstSpecFluxFrameVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstCmpFrameVtab frame_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-
-} AstSpecFluxFrameVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstSpecFluxFrameGlobals {
- AstSpecFluxFrameVtab Class_Vtab;
- int Class_Init;
- char GetTitle_Buff[ 201 ];
-} AstSpecFluxFrameGlobals;
-
-#endif
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(SpecFluxFrame) /* Check class membership */
-astPROTO_ISA(SpecFluxFrame) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstSpecFluxFrame *astSpecFluxFrame_( void *, void *, const char *, int *, ...);
-#else
-AstSpecFluxFrame *astSpecFluxFrameId_( void *, void *, const char *, ... )__attribute__((format(printf,3,4)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstSpecFluxFrame *astInitSpecFluxFrame_( void *, size_t, int, AstSpecFluxFrameVtab *,
- const char *, AstSpecFrame *, AstFluxFrame *, int * );
-
-/* Vtab initialiser. */
-void astInitSpecFluxFrameVtab_( AstSpecFluxFrameVtab *, const char *, int * );
-
-/* Loader. */
-AstSpecFluxFrame *astLoadSpecFluxFrame_( void *, size_t, AstSpecFluxFrameVtab *,
- const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitSpecFluxFrameGlobals_( AstSpecFluxFrameGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckSpecFluxFrame(this) astINVOKE_CHECK(SpecFluxFrame,this,0)
-#define astVerifySpecFluxFrame(this) astINVOKE_CHECK(SpecFluxFrame,this,1)
-
-/* Test class membership. */
-#define astIsASpecFluxFrame(this) astINVOKE_ISA(SpecFluxFrame,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astSpecFluxFrame astINVOKE(F,astSpecFluxFrame_)
-#else
-#define astSpecFluxFrame astINVOKE(F,astSpecFluxFrameId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitSpecFluxFrame(mem,size,init,vtab,name,frame1,frame2) \
-astINVOKE(O,astInitSpecFluxFrame_(mem,size,init,vtab,name,astCheckSpecFrame(frame1),astCheckFluxFrame(frame2),STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitSpecFluxFrameVtab(vtab,name) astINVOKE(V,astInitSpecFluxFrameVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadSpecFluxFrame(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadSpecFluxFrame_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckSpecFluxFrame to validate SpecFluxFrame pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/specframe.c b/ast-5.3-1/specframe.c
deleted file mode 100644
index 36a104b..0000000
--- a/ast-5.3-1/specframe.c
+++ /dev/null
@@ -1,7436 +0,0 @@
-/*
-*class++
-* Name:
-* SpecFrame
-
-* Purpose:
-* Spectral coordinate system description.
-
-* Constructor Function:
-c astSpecFrame
-f AST_SPECFRAME
-
-* Description:
-* A SpecFrame is a specialised form of one-dimensional Frame which
-* represents various coordinate systems used to describe positions within
-* an electro-magnetic spectrum. The particular coordinate system to be
-* used is specified by setting the SpecFrame's System attribute (the
-* default is wavelength) qualified, as necessary, by other attributes
-* such as the rest frequency, the standard of rest, the epoch of
-* observation, units, etc (see the description of the System attribute
-* for details).
-*
-* By setting a value for thr SpecOrigin attribute, a SpecFrame can be made
-* to represent offsets from a given spectral position, rather than absolute
-* spectral values.
-
-* Inheritance:
-* The SpecFrame class inherits from the Frame class.
-
-* Attributes:
-* In addition to those attributes common to all Frames, every
-* SpecFrame also has the following attributes:
-*
-* - AlignSpecOffset: Align SpecFrames using the offset coordinate system?
-* - AlignStdOfRest: Standard of rest in which to align SpecFrames
-* - RefDec: Declination of the source (FK5 J2000)
-* - RefRA: Right ascension of the source (FK5 J2000)
-* - RestFreq: Rest frequency
-* - SourceSys: Source velocity spectral system
-* - SourceVel: Source velocity
-* - SourceVRF: Source velocity rest frame
-* - SpecOrigin: The zero point for SpecFrame axis values
-* - StdOfRest: Standard of rest
-*
-* Several of the Frame attributes inherited by the SpecFrame class
-* refer to a specific axis of the Frame (for instance Unit(axis),
-* Label(axis), etc). Since a SpecFrame is strictly one-dimensional,
-* it allows these attributes to be specified without an axis index.
-* So for instance, "Unit" is allowed in place of "Unit(1)".
-
-* Functions:
-c In addition to those functions applicable to all Frames, the
-c following functions may also be applied to all SpecFrames:
-f In addition to those routines applicable to all Frames, the
-f following routines may also be applied to all SpecFrames:
-*
-c - astSetRefPos: Set reference position in any celestial system
-f - AST_SETREFPOS: Set reference position in any celestial system
-c - astGetRefPos: Get reference position in any celestial system
-f - AST_GETREFPOS: Get reference position in any celestial system
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 4-NOV-2002 (DSB):
-* Original version.
-* 2-FEB-2005 (DSB):
-* - Avoid using astStore to allocate more storage than is supplied
-* in the "data" pointer. This can cause access violations since
-* astStore will then read beyond the end of the "data" area.
-* 22-MAR-2005 (DSB):
-* - Re-structure MakeSpecMapping in order to avoid unnecessary
-* access to SpecFrame attributes which may not be set, and to
-* check that all required attributes have been set if UseDefs is
-* zero.
-* 23-MAR-2005 (DSB):
-* - Added missing rest frames to SorEqual.
-* 12-AUG-2005 (DSB):
-* - Remove GeoLon and GeoLat attributes. Use the new ObsLon and
-* ObsLat attributes in the parent Frame class instead. Note, for
-* backward compatibility the public attribute accessors and the
-* astLoadSpecFrame functions still recogonise GeoLon and GeoLat,
-* but use the ObsLat/ObsLon attributes internally.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 1-MAR-2006 (DSB):
-* Replace astSetPermMap within DEBUG blocks by astBeginPM/astEndPM.
-* 6-OCT-2006 (DSB):
-* Guard against annulling null pointers in subFrame.
-* 18-OCT-2006 (DSB):
-* Added SpecOrigin and AlignSpecOffset attributes.
-* 23-OCT-2006 (DSB):
-* Fix memory leak caused by addition of SpecOrigin and AlignSpecOffset
-* attributes.
-* 15-NOV-2006 (DSB):
-* Only write out SpecOrigin if it is not bad.
-* 8-JAN-2006 (DSB):
-* - SubFrame: Copy the SourceSystem and SourceStdOfRest attributes
-* to the System and StdOfRest attributes of the "align_frm"
-* SpecFrame before calling MakeSpecMapping. Previously, the
-* values assigned to SourceSystem and SourceStdOfRest were
-* ignored, and alignment was always performed in the templates System
-* and StdOfRest.
-* - MakeSpecMapping: Correct logic used to decide if steps 2 and 7
-* can be cancelled.
-* - OriginSystem: Clear the AlignSpecOffset attributes before
-* finding the Mapping between the old and new Systems.
-* 16-JAN-2006 (DSB):
-* Fix bug in Dump that caused SrcVRF not to be written out.
-* 31-JAN-2007 (DSB):
-* Modified so that a SpecFrame can be used as a template to find a
-* SpecFrame contained within a CmpFrame. This involves changes in
-* Match and the removal of the local versions of SetMaxAxes and
-* SetMinAxes.
-* 8-AUG-2007 (DSB):
-* Changed Overlay to avoid the possibility of making permanent
-* changes to the supplied template Frame.
-* 3-SEP-2007 (DSB):
-* In SubFrame, since AlignSystem is extended by the SpecFrame class
-* it needs to be cleared before invoking the parent SubFrame
-* method in cases where the result Frame is not a SkyFrame.
-* 2-OCT-2007 (DSB):
-* In Overlay, clear AlignSystem as well as System before calling
-* the parent overlay method.
-* 4-SEP-2009 (DSB):
-* In MakeSpecMapping, in order to produce alignment that is not
-* affected by the epoch or reference position, make the alignment
-* frame adapt to the epoch and reference position of the target
-* and result Frames.
-* 14-SEP-2009 (DSB):
-* In MakeSpecMapping, extend the 4-SEP-2009 fix to cover other
-* attributes that define the available rest frames (e.g.
-* SourceVRF, SourceVel, ObsLat, ObsLon, ObsAlt).
-* 16-SEP-2009 (DSB):
-* In MakeSpecMapping, retain the original alignment frame attribute
-* values if we are restoring the integrity of a FrameSet.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS SpecFrame
-
-/* Define the first and last acceptable System values. */
-#define FIRST_SYSTEM AST__FREQ
-#define LAST_SYSTEM AST__VREL
-
-/* Define the first and last acceptable StdOfRest values. */
-#define FIRST_SOR AST__TPSOR
-#define LAST_SOR AST__SCSOR
-
-/* The supported spectral coordinate systems fall into two groups;
- "relative", and "absolute". The relative systems define each axis
- value with respect to the rest frequency, whereas the absolute systems
- have axis values which do not depend on the rest frequency. Define a
- macro which returns one if the specified system is absolute, and zero
- otherwise. */
-#define ABS_SYSTEM(sys) \
- ( ( sys == AST__ENERGY || \
- sys == AST__WAVENUM || \
- sys == AST__WAVELEN || \
- sys == AST__AIRWAVE || \
- sys == AST__FREQ ) ? 1 : 0 )
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
- compare bad values directory because of the danger of floating point
- exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Define other numerical constants for use in this module. */
-#define GETATTRIB_BUFF_LEN 50
-#define GETLABEL_BUFF_LEN 200
-#define GETSYMBOL_BUFF_LEN 20
-#define GETTITLE_BUFF_LEN 200
-
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "unit.h" /* Units management facilities */
-#include "globals.h" /* Thread-safe global data access */
-#include "object.h" /* Base Object class */
-#include "specmap.h" /* Spectral coordinate Mappings */
-#include "frame.h" /* Parent Frame class */
-#include "skyframe.h" /* Celestial coordinate frames */
-#include "specframe.h" /* Interface definition for this class */
-#include "mapping.h" /* Coordinate Mappings */
-#include "cmpmap.h" /* Compound Mappings */
-#include "unitmap.h" /* Unit Mappings */
-#include "pal.h" /* SlaLib interface */
-#include "shiftmap.h" /* Change of origin */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stddef.h>
-#include <math.h>
-#include <limits.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are used or extended by this
- class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstSystemType (* parent_getalignsystem)( AstFrame *, int * );
-static AstSystemType (* parent_getsystem)( AstFrame *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static const char *(* parent_getdomain)( AstFrame *, int * );
-static const char *(* parent_getlabel)( AstFrame *, int, int * );
-static const char *(* parent_getsymbol)( AstFrame *, int, int * );
-static const char *(* parent_gettitle)( AstFrame *, int * );
-static const char *(* parent_getunit)( AstFrame *, int, int * );
-static int (* parent_match)( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int (* parent_subframe)( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_setunit)( AstFrame *, int, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_overlay)( AstFrame *, const int *, AstFrame *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static void (* parent_setsystem)( AstFrame *, AstSystemType, int * );
-static void (* parent_clearsystem)( AstFrame *, int * );
-static void (* parent_clearunit)( AstFrame *, int, int * );
-
-/* Define a variable to hold a SkyFrame which will be used for formatting
- and unformatting sky positions, etc. */
-static AstSkyFrame *skyframe;
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->GetAttrib_Buff[ 0 ] = 0; \
- globals->GetLabel_Buff[ 0 ] = 0; \
- globals->GetSymbol_Buff[ 0 ] = 0; \
- globals->GetTitle_Buff[ 0 ] = 0; \
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(SpecFrame)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(SpecFrame,Class_Init)
-#define class_vtab astGLOBAL(SpecFrame,Class_Vtab)
-#define getattrib_buff astGLOBAL(SpecFrame,GetAttrib_Buff)
-#define getlabel_buff astGLOBAL(SpecFrame,GetLabel_Buff)
-#define getsymbol_buff astGLOBAL(SpecFrame,GetSymbol_Buff)
-#define gettitle_buff astGLOBAL(SpecFrame,GetTitle_Buff)
-
-
-
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX2 pthread_mutex_lock( &mutex2 );
-#define UNLOCK_MUTEX2 pthread_mutex_unlock( &mutex2 );
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-/* Buffer returned by GetAttrib. */
-static char getattrib_buff[ 51 ];
-
-/* Default GetLabel string buffer */
-static char getlabel_buff[ 201 ];
-
-/* Default GetSymbol buffer */
-static char getsymbol_buff[ 21 ];
-
-/* Default Title string buffer */
-static char gettitle_buff[ 201 ];
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstSpecFrameVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-
-#endif
-
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstStdOfRestType StdOfRestCode( const char *, int * );
-static int GetObjSize( AstObject *, int * );
-static AstSystemType GetAlignSystem( AstFrame *, int * );
-static AstSystemType SystemCode( AstFrame *, const char *, int * );
-static AstSystemType ValidateSystem( AstFrame *, AstSystemType, const char *, int * );
-static const char *DefUnit( AstSystemType, const char *, const char *, int * );
-static const char *GetDomain( AstFrame *, int * );
-static const char *GetLabel( AstFrame *, int, int * );
-static const char *GetSymbol( AstFrame *, int, int * );
-static const char *GetTitle( AstFrame *, int * );
-static const char *GetUnit( AstFrame *, int, int * );
-static const char *SpecMapUnit( AstSystemType, const char *, const char *, int * );
-static const char *StdOfRestString( AstStdOfRestType, int * );
-static const char *SystemLabel( AstSystemType, int * );
-static const char *SystemString( AstFrame *, AstSystemType, int * );
-static double ConvertSourceVel( AstSpecFrame *, AstStdOfRestType, AstSystemType, int * );
-static int EqualSor( AstSpecFrame *, AstSpecFrame *, int * );
-static int GetActiveUnit( AstFrame *, int * );
-static int MakeSpecMapping( AstSpecFrame *, AstSpecFrame *, AstSpecFrame *, int, AstMapping **, int * );
-static int Match( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int SorConvert( AstSpecFrame *, AstSpecFrame *, AstSpecMap *, int * );
-static int SubFrame( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int TestActiveUnit( AstFrame *, int * );
-static void ClearUnit( AstFrame *, int, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void GetRefPos( AstSpecFrame *, AstSkyFrame *, double *, double *, int * );
-static void Overlay( AstFrame *, const int *, AstFrame *, int * );
-static void SetRefPos( AstSpecFrame *, AstSkyFrame *, double, double, int * );
-static void SetUnit( AstFrame *, int, const char *, int * );
-static void VerifyAttrs( AstSpecFrame *, const char *, const char *, const char *, int * );
-static double ToUnits( AstSpecFrame *, const char *, double, const char *, int * );
-static void OriginStdOfRest( AstSpecFrame *, AstStdOfRestType, const char *, int * );
-static void OriginSystem( AstSpecFrame *, AstSystemType, const char *, int * );
-
-static AstSystemType GetSystem( AstFrame *, int * );
-static void SetSystem( AstFrame *, AstSystemType, int * );
-static void ClearSystem( AstFrame *, int * );
-
-static const char *GetAttrib( AstObject *, const char *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-
-static AstStdOfRestType GetAlignStdOfRest( AstSpecFrame *, int * );
-static int TestAlignStdOfRest( AstSpecFrame *, int * );
-static void ClearAlignStdOfRest( AstSpecFrame *, int * );
-static void SetAlignStdOfRest( AstSpecFrame *, AstStdOfRestType, int * );
-
-static AstStdOfRestType GetStdOfRest( AstSpecFrame *, int * );
-static int TestStdOfRest( AstSpecFrame *, int * );
-static void ClearStdOfRest( AstSpecFrame *, int * );
-static void SetStdOfRest( AstSpecFrame *, AstStdOfRestType, int * );
-
-static double GetRestFreq( AstSpecFrame *, int * );
-static int TestRestFreq( AstSpecFrame *, int * );
-static void ClearRestFreq( AstSpecFrame *, int * );
-static void SetRestFreq( AstSpecFrame *, double, int * );
-
-static double GetSourceVel( AstSpecFrame *, int * );
-static int TestSourceVel( AstSpecFrame *, int * );
-static void ClearSourceVel( AstSpecFrame *, int * );
-static void SetSourceVel( AstSpecFrame *, double, int * );
-
-static double GetRefRA( AstSpecFrame *, int * );
-static int TestRefRA( AstSpecFrame *, int * );
-static void ClearRefRA( AstSpecFrame *, int * );
-static void SetRefRA( AstSpecFrame *, double, int * );
-
-static double GetRefDec( AstSpecFrame *, int * );
-static int TestRefDec( AstSpecFrame *, int * );
-static void ClearRefDec( AstSpecFrame *, int * );
-static void SetRefDec( AstSpecFrame *, double, int * );
-
-static AstStdOfRestType GetSourceVRF( AstSpecFrame *, int * );
-static int TestSourceVRF( AstSpecFrame *, int * );
-static void ClearSourceVRF( AstSpecFrame *, int * );
-static void SetSourceVRF( AstSpecFrame *, AstStdOfRestType, int * );
-
-static AstSystemType GetSourceSys( AstSpecFrame *, int * );
-static int TestSourceSys( AstSpecFrame *, int * );
-static void ClearSourceSys( AstSpecFrame *, int * );
-static void SetSourceSys( AstSpecFrame *, AstSystemType, int * );
-
-static double GetSpecOrigin( AstSpecFrame *, int * );
-static int TestSpecOrigin( AstSpecFrame *, int * );
-static void ClearSpecOrigin( AstSpecFrame *, int * );
-static void SetSpecOrigin( AstSpecFrame *, double, int * );
-static double GetSpecOriginCur( AstSpecFrame *, int * );
-
-static int GetAlignSpecOffset( AstSpecFrame *, int * );
-static int TestAlignSpecOffset( AstSpecFrame *, int * );
-static void SetAlignSpecOffset( AstSpecFrame *, int, int * );
-static void ClearAlignSpecOffset( AstSpecFrame *, int * );
-
-/* Member functions. */
-/* ================= */
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a SpecFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* SpecFrame member function (over-rides the astClearAttrib protected
-* method inherited from the Frame class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* SpecFrame, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the SpecFrame.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function uses one-based axis numbering so that it is
-* suitable for external (public) use.
-*/
-
-/* Local Variables: */
- AstSpecFrame *this; /* Pointer to the SpecFrame structure */
- char *new_attrib; /* Pointer value to new attribute name */
- int len; /* Length of attrib string */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SpecFrame structure. */
- this = (AstSpecFrame *) this_object;
-
-/* Obtain the length of the "attrib" string. */
- len = strlen( attrib );
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* First look for axis attributes defined by the Frame class. Since a
- SpecFrame has only 1 axis, we allow these attributes to be specified
- without a trailing "(axis)" string. */
- if ( !strcmp( attrib, "direction" ) ||
- !strcmp( attrib, "bottom" ) ||
- !strcmp( attrib, "top" ) ||
- !strcmp( attrib, "format" ) ||
- !strcmp( attrib, "label" ) ||
- !strcmp( attrib, "symbol" ) ||
- !strcmp( attrib, "unit" ) ) {
-
-/* Create a new attribute name from the original by appending the string
- "(1)" and then use the parent ClearAttrib method. */
- new_attrib = astMalloc( len + 4 );
- if( new_attrib ) {
- memcpy( new_attrib, attrib, len );
- memcpy( new_attrib + len, "(1)", 4 );
- (*parent_clearattrib)( this_object, new_attrib, status );
- new_attrib = astFree( new_attrib );
- }
-
-/* AlignStdOfRest. */
-/* --------------- */
- } else if ( !strcmp( attrib, "alignstdofrest" ) ) {
- astClearAlignStdOfRest( this );
-
-/* GeoLat. */
-/* ------- */
-/* Retained for backward compatibility with older versions of AST in which
- SpecFrame had GeoLon/Lat attributes (now ObsLon/Lat are used instead). */
- } else if ( !strcmp( attrib, "geolat" ) ) {
- astClearAttrib( this, "obslat" );
-
-/* GeoLon. */
-/* ------- */
- } else if ( !strcmp( attrib, "geolon" ) ) {
- astClearAttrib( this, "obslon" );
-
-/* RefDec. */
-/* ---------- */
- } else if ( !strcmp( attrib, "refdec" ) ) {
- astClearRefDec( this );
-
-/* RefRA. */
-/* --------- */
- } else if ( !strcmp( attrib, "refra" ) ) {
- astClearRefRA( this );
-
-/* RestFreq. */
-/* --------- */
- } else if ( !strcmp( attrib, "restfreq" ) ) {
- astClearRestFreq( this );
-
-/* SourceVel. */
-/* ---------- */
- } else if ( !strcmp( attrib, "sourcevel" ) ) {
- astClearSourceVel( this );
-
-/* SpecOrigin. */
-/* ---------- */
- } else if ( !strcmp( attrib, "specorigin" ) ) {
- astClearSpecOrigin( this );
-
-/* AlignSpecOffset. */
-/* ---------------- */
- } else if ( !strcmp( attrib, "alignspecoffset" ) ) {
- astClearAlignSpecOffset( this );
-
-/* SourceVRF */
-/* --------- */
- } else if ( !strcmp( attrib, "sourcevrf" ) ) {
- astClearSourceVRF( this );
-
-/* SourceSys */
-/* --------- */
- } else if ( !strcmp( attrib, "sourcesys" ) ) {
- astClearSourceSys( this );
-
-/* StdOfRest. */
-/* ---------- */
- } else if ( !strcmp( attrib, "stdofrest" ) ) {
- astClearStdOfRest( this );
-
-/* If the attribute is not recognised, pass it on to the parent method
- for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static void ClearSystem( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* ClearSystem
-
-* Purpose:
-* Clear the System attribute for a SpecFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* void ClearSystem( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* SpecFrame member function (over-rides the astClearSystem protected
-* method inherited from the Frame class).
-
-* Description:
-* This function clears the System attribute for a SpecFrame.
-
-* Parameters:
-* this
-* Pointer to the SpecFrame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstSpecFrame *this; /* Pointer to SpecFrame structure */
- AstSystemType newsys; /* System after clearing */
- AstSystemType oldsys; /* System before clearing */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SpecFrame structure. */
- this = (AstSpecFrame *) this_frame;
-
-/* Save the original system */
- oldsys = astGetSystem( this_frame );
-
-/* Use the parent ClearSystem method to clear the System value. */
- (*parent_clearsystem)( this_frame, status );
-
-/* Get the default System. */
- newsys = astGetSystem( this_frame );
-
-/* If the system has actually changed. */
- if( newsys != oldsys ) {
-
-/* Changing the System value will in general require the Units to change
- as well. If the used has previously specified the units to be used with
- the new system, then re-instate them (they are stored in the "usedunits"
- array in the SpecFrame structure). Otherwise, clear the units so that
- the default units will eb used with the new System. */
- if( (int) newsys < this->nuunits && this->usedunits &&
- this->usedunits[ (int) newsys ] ) {
- astSetUnit( this, 0, this->usedunits[ (int) newsys ] );
- } else {
- astClearUnit( this, 0 );
- }
-
-/* Also, clear all attributes which have system-specific defaults. */
- astClearLabel( this_frame, 0 );
- astClearSymbol( this_frame, 0 );
- astClearTitle( this_frame );
-
-/* Modify the SpecOrigin value to use the new System */
- OriginSystem( this, oldsys, "astClearSystem", status );
-
- }
-
-}
-
-static void ClearStdOfRest( AstSpecFrame *this, int *status ) {
-/*
-*+
-* Name:
-* astClearStdOfRest
-
-* Purpose:
-* Clear the StdOfRest attribute for a SpecFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "timeframe.h"
-* void astClearStdOfRest( AstSpecFrame *this )
-
-* Class Membership:
-* SpecFrame virtual function
-
-* Description:
-* This function clears the StdOfRest attribute for a SpecFrame.
-
-* Parameters:
-* this
-* Pointer to the SpecFrame.
-
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Modify the SpecOrigin value stored in the SpecFrame structure to refer to the
- default rest frame (heliocentric). */
- OriginStdOfRest( this, AST__HLSOR, "astClearStdOfRest", status );
-
-/* Store a bad value for the standard of rest in the SpecFrame structure. */
- this->stdofrest = AST__BADSOR;
-}
-
-
-static void ClearUnit( AstFrame *this_frame, int axis, int *status ) {
-/*
-* Name:
-* ClearUnit
-
-* Purpose:
-* Clear the value of the Unit string for a SpecFrame's axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* void ClearUnit( AstFrame *this_frame, int axis )
-
-* Class Membership:
-* SpecFrame member function (over-rides the astClearUnit method inherited
-* from the Frame class).
-
-* Description:
-* This function clears the Unit string for a specified axis of a
-* SpecFrame. It also clears the UsedUnit item in the SpecFrame
-* structure corresponding to the current System.
-
-* Parameters:
-* this
-* Pointer to the SpecFrame.
-* axis
-* The number of the axis (zero-based).
-*/
-
-/* Local Variables: */
- AstSpecFrame *this; /* Pointer to the SpecFrame structure */
- int system; /* The SpecFrame's System value */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SpecFrame structure. */
- this = (AstSpecFrame *) this_frame;
-
-/* Validate the axis index. */
- astValidateAxis( this, axis, "astClearUnit" );
-
-/* Clear the UsedUnit item for the current System, if current set. */
- system = (int) astGetSystem( this );
- if( system < this->nuunits && this->usedunits ) {
- this->usedunits[ system ] = astFree( this->usedunits[ system ] );
- }
-
-/* Use the parent method to clear the Unit attribute of the axis. */
- (*parent_clearunit)( this_frame, axis, status );
-}
-
-static double ConvertSourceVel( AstSpecFrame *this, AstStdOfRestType newsor,
- AstSystemType newsys, int *status ) {
-/*
-* Name:
-* ConvertSourceVel
-
-* Purpose:
-* Convert the SourceVel value to a specified rest frame and spectral
-* system.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* double ConvertSourceVel( AstSpecFrame *this, AstStdOfRestType newsor,
-* AstSystemType newsys, int *status )
-
-* Class Membership:
-* SpecFrame member function
-
-* Description:
-* This function convert the SourceVel value to a specified rest frame
-* and spectral system, and returns the new value.
-
-* Parameters:
-* this
-* Pointer to the SpecFrame.
-* newsor
-* The rest frame in which the source velocity is required.
-* newsys
-* The spectral system (AST__VREL or AST__REDSHIFT) in which the
-* source velocity is required.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The converted source velocity (m/s), or redshift.
-
-* Notes:
-* - This function returns zero if an error occurs.
-*/
-
-/* Local Variables: */
- AstSpecFrame *from; /* Pointer to a source SpecFrame */
- AstSpecFrame *to; /* Pointer to a destination SpecFrame */
- AstSpecMap *specmap; /* Pointer to a SpecMap */
- AstStdOfRestType sor; /* Standard of rest in which SourceVel is defined */
- AstSystemType sys; /* Spectral system in which SourceVel is defined */
- double ret; /* The returned value */
- double rf; /* Rest frequency (Hz) */
- double temp; /* Temporary storage */
-
-/* Initialise */
- ret = 0.0;
-
-/* Check the global error status. */
- if ( !astOK ) return ret;
-
-/* Get the value of the SourceVel attribute. This will be a velocity in m/s
- (relativistic, radio or optical), or unitless redshift or beta factor,
- depending on the current value of SourceSys. */
- ret = astGetSourceVel( this );
-
-/* Check it can be used (depends on whether a value has been set and
- whether the UseDefs attribute is zero). */
- VerifyAttrs( this, "convert source velocity to a new standard of rest",
- "SourceVel", "astMatch", status );
-
-/* Get the rest frame and spectral system to which value refers. */
- sor = astGetSourceVRF( this );
- sys = astGetSourceSys( this );
-
-/* If necessary, convert to the requested rest frame and spectral system. */
- if( sor != newsor || sys != newsys ) {
-
-/* Verify that usable value is available for the RestFreq attribute. An
- error is reported if not. */
- VerifyAttrs( this, "convert source velocity to a new standard of rest",
- "RestFreq", "astMatch", status );
-
-/* Take two copies of the supplied SpecFrame and set their StdOfRest
- attributes to the required values. */
- from = astCopy( this );
- astSetStdOfRest( from, sor );
-
- to = astCopy( this );
- astSetStdOfRest( to, newsor );
-
-/* Initialise a new SpecMap to describe the conversion. The new SpecMap
- initially represents a UnitMap. */
- specmap = astSpecMap( 1, 0, "", status );
-
-/* Add a conversion from the spectral system in which the SourceVEl value
- is stored, to relativistic velocity. */
- if( sys == AST__VRADIO ) {
- astSpecAdd( specmap, "VRTOVL", NULL );
-
- } else if( sys == AST__VOPTICAL ) {
- astSpecAdd( specmap, "VOTOVL", NULL );
-
- } else if( sys == AST__REDSHIFT ) {
- astSpecAdd( specmap, "ZOTOVL", NULL );
-
- } else if( sys == AST__BETA ) {
- astSpecAdd( specmap, "BTTOVL", NULL );
- }
-
-/* Add a conversion from velocity to frequency since SorConvert converts
- frequencies. */
- rf = astGetRestFreq( this );
- astSpecAdd( specmap, "VLTOFR", &rf );
-
-/* Now add a conversion from frequency in the SourveVRF standard of rest to
- frequency in the required rest frame. */
- SorConvert( from, to, specmap, status );
-
-/* Add a conversion from frequency back to velocity. Note, the value of the
- rest frequency does not affect the overall conversion. */
- astSpecAdd( specmap, "FRTOVL", &rf );
-
-/* Add a conversion from relativistic velocity to the required spectral
- system, if needed. */
- if( newsys == AST__VRADIO ) {
- astSpecAdd( specmap, "VLTOVR", NULL );
-
- } else if( newsys == AST__VOPTICAL ) {
- astSpecAdd( specmap, "VLTOVO", NULL );
-
- } else if( newsys == AST__REDSHIFT ) {
- astSpecAdd( specmap, "VLTOZO", NULL );
-
- } else if( newsys == AST__BETA ) {
- astSpecAdd( specmap, "VLTOBT", NULL );
- }
-
-/* Use the SpecMap to convert the source velocity in the SourceVRF
- standard of rest and SourceSys spectral system to the required rest
- frame and spectral system. */
- temp = ret;
- astTran1( specmap, 1, &temp, 1, &ret );
-
-/* Free resources */
- specmap = astAnnul( specmap );
- to = astAnnul( to );
- from = astAnnul( from );
- }
-
-/* Return zero if an error has occurred. */
- if( !astOK ) ret = 0.0;
-
-/* Return the answer. */
- return ret;
-
-}
-
-static const char *DefUnit( AstSystemType system, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* DefUnit
-
-* Purpose:
-* Return the default units for a spectral coordinate system type.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* const char *DefUnit( AstSystemType system, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* SpecFrame member function.
-
-* Description:
-* This function returns a textual representation of the default
-* units associated with the specified spectral coordinate system.
-
-* Parameters:
-* system
-* The spectral coordinate system.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* As tring describing the default units. This string follows the
-* units syntax described in FITS WCS paper I "Representations of world
-* coordinates in FITS" (Greisen & Calabretta).
-
-* Notes:
-* - A NULL pointer is returned if this function is invoked with
-* the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- const char *result; /* Value to return */
-
-/* Initialize */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get an identifier for the default units. */
- if( system == AST__FREQ ) {
- result = "GHz";
- } else if( system == AST__ENERGY ) {
- result = "J";
- } else if( system == AST__WAVENUM ) {
- result = "1/m";
- } else if( system == AST__WAVELEN ) {
- result = "Angstrom";
- } else if( system == AST__AIRWAVE ) {
- result = "Angstrom";
- } else if( system == AST__VRADIO ) {
- result = "km/s";
- } else if( system == AST__VOPTICAL ) {
- result = "km/s";
- } else if( system == AST__REDSHIFT ) {
- result = "";
- } else if( system == AST__BETA ) {
- result = "";
- } else if( system == AST__VREL ) {
- result = "km/s";
-
-/* Report an error if the coordinate system was not recognised. */
- } else {
- astError( AST__SCSIN, "%s(%s): Corrupt %s contains illegal System "
- "identification code (%d).", status, method, class, class,
- (int) system );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int EqualSor( AstSpecFrame *this, AstSpecFrame *that, int *status ) {
-/*
-* Name:
-* EqualSor
-
-* Purpose:
-* Do two SpecFrames use the same standard of rest?
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* int EqualSor( AstSpecFrame *this, AstSpecFrame *that, int *status )
-
-* Class Membership:
-* SpecFrame member function
-
-* Description:
-* This function returns non-zero if the two supplied SpecFrames use
-* the same standard of rest.
-
-* Parameters:
-* this
-* Pointer to the first SpecFrame.
-* that
-* Pointer to the second SpecFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the two SpecFrames use the same standard of rest. Zero
-* otherwise.
-
-*/
-
-/* Local Variables: */
- AstStdOfRestType sor; /* Standard of rest */
- int result; /* Value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Initialise. */
- result = 1;
-
-/* Compare StdOfRest attributes. */
- sor = astGetStdOfRest( this );
- if( astGetStdOfRest( that ) != sor ) {
- result = 0;
-
-/* If the standards of rest are equal we need to check the the attributes
- which specify the precise rest frame. */
- } else {
-
-/* The reference RA and Dec need to be equal */
- if( !EQUAL( astGetRefRA( this ), astGetRefRA( that ) ) ||
- !EQUAL( astGetRefDec( this ), astGetRefDec( that ) ) ) {
- result = 0;
-
-/* For source rest frame, the source velocities, rest frames and systems must
- be equal */
- } else if( sor == AST__SCSOR ){
- if( !EQUAL( astGetSourceVel( this ), astGetSourceVel( that ) ) ||
- astGetSourceVRF( this ) != astGetSourceVRF( that ) ||
- astGetSourceSys( this ) != astGetSourceSys( that ) ) {
- result = 0;
- }
-
-/* For geocentric, barycentric and heliocentric rest frames, the epochs must
- be the same */
- } else if( sor == AST__GESOR || sor == AST__BYSOR || sor == AST__HLSOR ){
- if( !EQUAL( astGetEpoch( this ), astGetEpoch( that ) ) ) result = 0;
-
-/* For topocentric rest frame, the epoch and position of the observer must be
- the same */
- } else if( sor == AST__TPSOR ){
- if( !EQUAL( astGetEpoch( this ), astGetEpoch( that ) ) ||
- !EQUAL( astGetObsAlt( this ), astGetObsAlt( that ) ) ||
- !EQUAL( astGetObsLon( this ), astGetObsLon( that ) ) ||
- !EQUAL( astGetObsLat( this ), astGetObsLat( that ) ) ) result = 0;
-
- } else if( sor != AST__LKSOR && sor != AST__LDSOR &&
- sor != AST__GLSOR && sor != AST__LGSOR && astOK ) {
- astError( AST__INTER, "SorEqual(SpecFrame): Function SorEqual "
- "does not yet support rest frame %d (AST internal "
- "programming error)", status, sor );
- }
- }
-
-/* Return the result */
- return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* SpecFrame member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied SpecFrame,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the SpecFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSpecFrame *this; /* Pointer to SpecFrame structure */
- int result; /* Result value to return */
- int i;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the SpecFrame structure. */
- this = (AstSpecFrame *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
- if( this->usedunits ) {
- for( i = 0; i < this->nuunits; i++ ) {
- result += astTSizeOf( this->usedunits[ i ] );
- }
- result += astTSizeOf( this->usedunits );
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static int GetActiveUnit( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetActiveUnit
-
-* Purpose:
-* Obtain the value of the ActiveUnit flag for a SpecFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* int GetActiveUnit( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* SpecFrame member function (over-rides the astGetActiveUnit protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns the value of the ActiveUnit flag for a
-* SpecFrame, which is always 1.
-
-* Parameters:
-* this
-* Pointer to the SpecFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The value to use for the ActiveUnit flag (1).
-
-*/
- return 1;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a SpecFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* SpecFrame member function (over-rides the protected astGetAttrib
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a SpecFrame, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the SpecFrame.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - This function uses one-based axis numbering so that it is
-* suitable for external (public) use.
-* - The returned string pointer may point at memory allocated
-* within the SpecFrame, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the SpecFrame. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstSpecFrame *this; /* Pointer to the SpecFrame structure */
- AstStdOfRestType sor; /* Standard of rest */
- AstSystemType sys; /* Spectral system */
- char *new_attrib; /* Pointer value to new attribute name */
- const char *result; /* Pointer value to return */
- double dval; /* Attribute value */
- int ival; /* Attribute value */
- int len; /* Length of attrib string */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the SpecFrame structure. */
- this = (AstSpecFrame *) this_object;
-
-/* Create an FK5 J2000 SkyFrame which will be used for formatting and
- unformatting sky positions, etc. */
- LOCK_MUTEX2
- if( !skyframe ) {
- astBeginPM;
- skyframe = astSkyFrame( "system=FK5,equinox=J2000", status );
- astEndPM;
- }
- UNLOCK_MUTEX2
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null-terminated string in an appropriate
- format. Set "result" to point at the result string. */
-
-/* First look for axis attributes defined by the Frame class. Since a
- SpecFrame has only 1 axis, we allow these attributes to be specified
- without a trailing "(axis)" string. */
- if ( !strcmp( attrib, "direction" ) ||
- !strcmp( attrib, "bottom" ) ||
- !strcmp( attrib, "top" ) ||
- !strcmp( attrib, "format" ) ||
- !strcmp( attrib, "label" ) ||
- !strcmp( attrib, "symbol" ) ||
- !strcmp( attrib, "unit" ) ) {
-
-/* Create a new attribute name from the original by appending the string
- "(1)" and then use the parent GetAttrib method. */
- new_attrib = astMalloc( len + 4 );
- if( new_attrib ) {
- memcpy( new_attrib, attrib, len );
- memcpy( new_attrib + len, "(1)", 4 );
- result = (*parent_getattrib)( this_object, new_attrib, status );
- new_attrib = astFree( new_attrib );
- }
-
-/* AlignStdOfRest. */
-/* --------------- */
-/* Obtain the AlignStdOfRest code and convert to a string. */
- } else if ( !strcmp( attrib, "alignstdofrest" ) ) {
- sor = astGetAlignStdOfRest( this );
- if ( astOK ) {
- result = StdOfRestString( sor, status );
-
-/* Report an error if the value was not recognised. */
- if ( !result ) {
- astError( AST__SCSIN,
- "astGetAttrib(%s): Corrupt %s contains invalid AlignStdOfRest "
- "identification code (%d).", status, astGetClass( this ),
- astGetClass( this ), (int) sor );
- }
- }
-
-/* AlignSpecOffset */
-/* --------------- */
- } else if ( !strcmp( attrib, "alignspecoffset" ) ) {
- ival = astGetAlignSpecOffset( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* GeoLat. */
-/* ------- */
-/* Retained for backward compatibility with older versions of AST in which
- SpecFrame had GeoLon/Lat attributes (now ObsLon/Lat are used instead). */
- } else if ( !strcmp( attrib, "geolat" ) ) {
- result = astGetAttrib( this, "obslat" );
-
-/* GeoLon. */
-/* ------- */
- } else if ( !strcmp( attrib, "geolon" ) ) {
- result = astGetAttrib( this, "obslon" );
-
-/* RefDec. */
-/* ------- */
-/* Convert to a string using the SkyFrame Format method. */
- } else if ( !strcmp( attrib, "refdec" ) ) {
- dval = astGetRefDec( this );
- if ( astOK ) {
- result = astFormat( skyframe, 1, dval );
- }
-
-/* RefRA. */
-/* ------ */
-/* Convert to a string using the SkyFrame Format method. */
- } else if ( !strcmp( attrib, "refra" ) ) {
- dval = astGetRefRA( this );
- if ( astOK ) {
- result = astFormat( skyframe, 0, dval );
- }
-
-/* RestFreq. */
-/* --------- */
- } else if ( !strcmp( attrib, "restfreq" ) ) {
- dval = astGetRestFreq( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval*1.0E-9 );
- result = getattrib_buff;
- }
-
-/* SourceVel */
-/* --------- */
- } else if ( !strcmp( attrib, "sourcevel" ) ) {
- dval = astGetSourceVel( this );
- if ( astOK ) {
-
-/* Convert from m/s to km/s if the SourceVel value is a velocity. . */
- if( astGetSourceSys( this ) == AST__VREL ||
- astGetSourceSys( this ) == AST__VRADIO ||
- astGetSourceSys( this ) == AST__VOPTICAL ) dval *= 1.0E-3;
-
-/* Format */
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
-
- }
-
-/* SpecOrigin. */
-/* ----------- */
- } else if ( !strcmp( attrib, "specorigin" ) ) {
- dval = GetSpecOriginCur( this, status );
- if( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-
-/* SourceVRF */
-/* ----------*/
- } else if ( !strcmp( attrib, "sourcevrf" ) ) {
- sor = astGetSourceVRF( this );
- if ( astOK ) {
- result = StdOfRestString( sor, status );
-
-/* Report an error if the value was not recognised. */
- if ( !result ) {
- astError( AST__SCSIN,
- "astGetAttrib(%s): Corrupt %s contains invalid SourceVRF "
- "identification code (%d).", status, astGetClass( this ),
- astGetClass( this ), (int) sor );
- }
- }
-
-/* SourceSys */
-/* ----------*/
- } else if ( !strcmp( attrib, "sourcesys" ) ) {
- sys = astGetSourceSys( this );
- if ( astOK ) {
- result = SystemString( (AstFrame *) this, sys, status );
-
-/* Report an error if the value was not recognised. */
- if ( !result ) {
- astError( AST__SCSIN,
- "astGetAttrib(%s): Corrupt %s contains invalid SourceSys "
- "identification code (%d).", status, astGetClass( this ),
- astGetClass( this ), (int) sys );
- }
- }
-
-/* StdOfRest. */
-/* ---------- */
-/* Obtain the StdOfRest code and convert to a string. */
- } else if ( !strcmp( attrib, "stdofrest" ) ) {
- sor = astGetStdOfRest( this );
- if ( astOK ) {
- result = StdOfRestString( sor, status );
-
-/* Report an error if the value was not recognised. */
- if ( !result ) {
- astError( AST__SCSIN,
- "astGetAttrib(%s): Corrupt %s contains invalid StdOfRest "
- "identification code (%d).", status, astGetClass( this ),
- astGetClass( this ), (int) sor );
- }
- }
-
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetDomain( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetDomain
-
-* Purpose:
-* Obtain a pointer to the Domain attribute string for a SpecFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* const char *GetDomain( AstFrame *this, int *status )
-
-* Class Membership:
-* SpecFrame member function (over-rides the astGetDomain protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a pointer to the Domain attribute string
-* for a SpecFrame.
-
-* Parameters:
-* this
-* Pointer to the SpecFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a constant null-terminated string containing the
-* Domain value.
-
-* Notes:
-* - The returned pointer or the string it refers to may become
-* invalid following further invocation of this function or
-* modification of the SpecFrame.
-* - A NULL pointer is returned if this function is invoked with
-* the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSpecFrame *this; /* Pointer to SpecFrame structure */
- const char *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the SpecFrame structure. */
- this = (AstSpecFrame *) this_frame;
-
-/* If a Domain attribute string has been set, invoke the parent method
- to obtain a pointer to it. */
- if ( astTestDomain( this ) ) {
- result = (*parent_getdomain)( this_frame, status );
-
-/* Otherwise, provide a pointer to a suitable default string. */
- } else {
- result = "SPECTRUM";
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetLabel( AstFrame *this, int axis, int *status ) {
-/*
-* Name:
-* GetLabel
-
-* Purpose:
-* Access the Label string for a SpecFrame axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* const char *GetLabel( AstFrame *this, int axis, int *status )
-
-* Class Membership:
-* SpecFrame member function (over-rides the astGetLabel method inherited
-* from the Frame class).
-
-* Description:
-* This function returns a pointer to the Label string for a specified axis
-* of a SpecFrame.
-
-* Parameters:
-* this
-* Pointer to the SpecFrame.
-* axis
-* Axis index (zero-based) identifying the axis for which information is
-* required.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a constant null-terminated character string containing the
-* requested information.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstMapping *map; /* Mapping between units */
- AstSystemType system; /* Code identifying type of spectral coordinates */
- char *new_lab; /* Modified label string */
- const char *result; /* Pointer to label string */
- double orig; /* Spec origin */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Initialise. */
- result = NULL;
-
-/* Validate the axis index. */
- astValidateAxis( this, axis, "astGetLabel" );
-
-/* Check if a value has been set for the required axis label string. If so,
- invoke the parent astGetLabel method to obtain a pointer to it. */
- if ( astTestLabel( this, axis ) ) {
- result = (*parent_getlabel)( this, axis, status );
-
-/* Otherwise, identify the spectral coordinate system described by the
- SpecFrame. */
- } else {
- system = astGetSystem( this );
-
-/* If OK, supply a pointer to a suitable default label string. */
- if ( astOK ) {
- result = strcpy( getlabel_buff, SystemLabel( system, status ) );
- getlabel_buff[ 0 ] = toupper( getlabel_buff[ 0 ] );
-
-/* If a non-zero SpecOrigin has been specified, include the offset now. */
- orig = GetSpecOriginCur( (AstSpecFrame *) this, status );
- if( orig != 0.0 ) {
- sprintf( getlabel_buff + strlen( getlabel_buff ), " offset from %s",
- astFormat( this, 0, orig ) );
- }
-
-/* Modify this default to take account of the current value of the Unit
- attribute, if set. */
- if( astTestUnit( this, axis ) ) {
-
-/* Find a Mapping from the default Units for the current System, to the
- units indicated by the Unit attribute. This Mapping is used to modify
- the existing default label appropriately. For instance, if the default
- units is "Hz" and the actual units is "log(Hz)", then the default label
- of "Frequency" is changed to "log( frequency )". */
- map = astUnitMapper( DefUnit( system, "astGetLabel",
- astGetClass( this ), status ),
- astGetUnit( this, axis ), result,
- &new_lab );
- if( new_lab ) {
- result = strcpy( getlabel_buff, new_lab );
- new_lab = astFree( new_lab );
- }
-
-/* Annul the unused Mapping. */
- if( map ) map = astAnnul( map );
-
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static void GetRefPos( AstSpecFrame *this, AstSkyFrame *frm, double *lon,
- double *lat, int *status ){
-/*
-*++
-* Name:
-c astGetRefPos
-f AST_GETREFPOS
-
-* Purpose:
-* Return the reference position in a specified celestial coordinate system.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "specframe.h"
-c void astGetRefPos( AstSpecFrame *this, AstSkyFrame *frm, double *lon,
-c double *lat )
-f CALL AST_GETREFPOS( THIS, FRM, LON, LAT, STATUS )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-c This function
-f This routine
-* returns the reference position (specified by attributes RefRA and
-* RefDec) converted to the celestial coordinate system represented by
-* a supplied SkyFrame. The celestial longitude and latitude values
-* are returned in radians.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the SpecFrame.
-c frm
-f FRM = INTEGER (Given)
-* Pointer to the SkyFrame which defines the required celestial
-* coordinate system.
-c If NULL
-f If AST__NULL
-* is supplied, then the longitude and latitude values are returned
-* as FK5 J2000 RA and Dec values.
-c lon
-f LON = DOUBLE PRECISION (Returned)
-c A pointer to a double in which to store the
-f The
-* longitude of the reference point, in the coordinate system
-* represented by the supplied SkyFrame (radians).
-c lat
-f LAT = DOUBLE PRECISION (Returned)
-c A pointer to a double in which to store the
-f The
-* latitude of the reference point, in the coordinate system
-* represented by the supplied SkyFrame (radians).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - Values of AST__BAD will be returned if this function is
-c invoked with the AST error status set, or if it should fail for
-f invoked with STATUS set to an error value, or if it should fail for
-* any reason.
-*--
-*/
-
-/* Local Variables: */
- AstFrameSet *fs; /* Conversion FrameSet */
- AstFrame *fb; /* Base Frame */
- AstFrame *fc; /* Current Frame */
- double xin[ 1 ]; /* Axis 1 values */
- double yin[ 1 ]; /* Axis 2 values */
- double xout[ 1 ]; /* Axis 1 values */
- double yout[ 1 ]; /* Axis 2 values */
-
-/* Initialise. */
- if( lon ) *lon = AST__BAD;
- if( lat ) *lat = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* If no SkyFrame was supplied, just return the stored RefRA and RefDec
- values. */
- if( !frm ) {
- if( lon ) *lon = astGetRefRA( this );
- if( lat ) *lat = astGetRefDec( this );
-
-/* Otherwise, convert the stored values to the requested system. */
- } else {
-
-/* Create an FK5 J2000 SkyFrame which will be used for formatting and
- unformatting sky positions, etc. */
- LOCK_MUTEX2
- if( !skyframe ) {
- astBeginPM;
- skyframe = astSkyFrame( "system=FK5,equinox=J2000", status );
- astEndPM;
- }
- UNLOCK_MUTEX2
-
-/* Find the Mapping from the SkyFrame which describes the internal format
- in which the RefRA and RefDec attribute values are stored, to the
- supplied Frame. */
- fs = astFindFrame( skyframe, frm, "" );
-
-/* If alignment was possible, use the Mapping to transform the internal
- RefRA and RefDec values. Check for axis permutatuion. */
- if( fs ) {
- fb = astGetFrame( fs, AST__BASE );
- if( astGetLonAxis( fb ) == 0 ) {
- xin[ 0 ] = astGetRefRA( this );
- yin[ 0 ] = astGetRefDec( this );
- } else {
- yin[ 0 ] = astGetRefRA( this );
- xin[ 0 ] = astGetRefDec( this );
- }
- astTran2( fs, 1, xin, yin, 1, xout, yout );
-
-/* Store the returned values, checking to see if the axes of the supplied
- SkyFrame have been permuted. */
- fc = astGetFrame( fs, AST__CURRENT );
- if( astGetLonAxis( fc ) == 0 ) {
- if( lon ) *lon = xout[ 0 ];
- if( lat ) *lat = yout[ 0 ];
- } else {
- if( lon ) *lon = yout[ 0 ];
- if( lat ) *lat = xout[ 0 ];
- }
-
-/* Annul object references. */
- fc = astAnnul( fc );
- fb = astAnnul( fb );
- fs = astAnnul( fs );
- }
- }
-}
-
-static const char *GetSymbol( AstFrame *this, int axis, int *status ) {
-/*
-* Name:
-* GetSymbol
-
-* Purpose:
-* Obtain a pointer to the Symbol string for a SpecFrame axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* const char *GetSymbol( AstFrame *this, int axis, int *status )
-
-* Class Membership:
-* SpecFrame member function (over-rides the astGetSymbol method inherited
-* from the Frame class).
-
-* Description:
-* This function returns a pointer to the Symbol string for a specified axis
-* of a SpecFrame.
-
-* Parameters:
-* this
-* Pointer to the SpecFrame.
-* axis
-* Axis index (zero-based) identifying the axis for which information is
-* required.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a constant null-terminated character string containing the
-* requested information.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstMapping *map; /* Mapping between units */
- AstSystemType system; /* Code identifying type of sky coordinates */
- char *new_sym; /* Modified symbol string */
- const char *result; /* Pointer to symbol string */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Initialise. */
- result = NULL;
-
-/* Validate the axis index. */
- astValidateAxis( this, axis, "astGetSymbol" );
-
-/* Check if a value has been set for the required axis symbol string. If so,
- invoke the parent astGetSymbol method to obtain a pointer to it. */
- if ( astTestSymbol( this, axis ) ) {
- result = (*parent_getsymbol)( this, axis, status );
-
-/* Otherwise, identify the sky coordinate system described by the SpecFrame. */
- } else {
- system = astGetSystem( this );
-
-/* If OK, supply a pointer to a suitable default Symbol string. */
- if ( astOK ) {
-
- if( system == AST__FREQ ) {
- result = "FREQ";
- } else if( system == AST__ENERGY ) {
- result = "ENER";
- } else if( system == AST__WAVENUM ) {
- result = "WAVN";
- } else if( system == AST__WAVELEN ) {
- result = "WAVE";
- } else if( system == AST__AIRWAVE ) {
- result = "AWAV";
- } else if( system == AST__VRADIO ) {
- result = "VRAD";
- } else if( system == AST__VOPTICAL ) {
- result = "VOPT";
- } else if( system == AST__REDSHIFT ) {
- result = "ZOPT";
- } else if( system == AST__BETA ) {
- result = "BETA";
- } else if( system == AST__VREL ) {
- result = "VELO";
-
-/* Report an error if the coordinate system was not recognised. */
- } else {
- astError( AST__SCSIN, "astGetSymbol(%s): Corrupt %s contains "
- "invalid System identification code (%d).", status,
- astGetClass( this ), astGetClass( this ), (int) system );
- }
-
-/* Modify this default to take account of the current value of the Unit
- attribute, if set. */
- if( astTestUnit( this, axis ) ) {
-
-/* Find a Mapping from the default Units for the current System, to the
- units indicated by the Unit attribute. This Mapping is used to modify
- the existing default symbol appropriately. For instance, if the default
- units is "Hz" and the actual units is "log(Hz)", then the default symbol
- of "nu" is changed to "log( nu )". */
- map = astUnitMapper( DefUnit( system, "astGetSymbol",
- astGetClass( this ), status ),
- astGetUnit( this, axis ), result,
- &new_sym );
- if( new_sym ) {
- result = strcpy( getsymbol_buff, new_sym );
- new_sym = astFree( new_sym );
- }
-
-/* Annul the unused Mapping. */
- if( map ) map = astAnnul( map );
-
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstSystemType GetAlignSystem( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetAlignSystem
-
-* Purpose:
-* Obtain the AlignSystem attribute for a SpecFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "Specframe.h"
-* AstSystemType GetAlignSystem( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* SpecFrame member function (over-rides the astGetAlignSystem protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns the AlignSystem attribute for a SpecFrame.
-
-* Parameters:
-* this
-* Pointer to the SpecFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The AlignSystem value.
-
-*/
-
-/* Local Variables: */
- AstSpecFrame *this; /* Pointer to SpecFrame structure */
- AstSystemType result; /* Value to return */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the SpecFrame structure. */
- this = (AstSpecFrame *) this_frame;
-
-/* If a AlignSystem attribute has been set, invoke the parent method to obtain
- it. */
- if ( astTestAlignSystem( this ) ) {
- result = (*parent_getalignsystem)( this_frame, status );
-
-/* Otherwise, provide a suitable default. */
- } else {
- result = AST__WAVELEN;
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstSystemType GetSystem( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetSystem
-
-* Purpose:
-* Obtain the System attribute for a SpecFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* AstSystemType GetSystem( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* SpecFrame member function (over-rides the astGetSystem protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns the System attribute for a SpecFrame.
-
-* Parameters:
-* this
-* Pointer to the SpecFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The System value.
-
-* Notes:
-* - AST__BADSYSTEM is returned if this function is invoked with
-* the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSpecFrame *this; /* Pointer to SpecFrame structure */
- AstSystemType result; /* Value to return */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the SpecFrame structure. */
- this = (AstSpecFrame *) this_frame;
-
-/* If a System attribute has been set, invoke the parent method to obtain
- it. */
- if ( astTestSystem( this ) ) {
- result = (*parent_getsystem)( this_frame, status );
-
-/* Otherwise, provide a suitable default. */
- } else {
- result = AST__WAVELEN;
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetTitle( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetTitle
-
-* Purpose:
-* Obtain a pointer to the Title string for a SpecFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* const char *GetTitle( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* SpecFrame member function (over-rides the astGetTitle method inherited
-* from the Frame class).
-
-* Description:
-* This function returns a pointer to the Title string for a SpecFrame.
-* A pointer to a suitable default string is returned if no Title value has
-* previously been set.
-
-* Parameters:
-* this
-* Pointer to the SpecFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a null-terminated character string containing the requested
-* information.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstSpecFrame *this; /* Pointer to SpecFrame structure */
- AstStdOfRestType sor; /* Code identifying standard of rest */
- AstSystemType system; /* Code identifying type of coordinates */
- const char *sor_string; /* Pointer to SOR description */
- const char *result; /* Pointer to result string */
- double rf; /* Rest frequency */
- int nc; /* No. of characters added */
- int pos; /* Buffer position to enter text */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_frame);
-
-/* Initialise. */
- result = NULL;
-
-/* Obtain a pointer to the SpecFrame structure. */
- this = (AstSpecFrame *) this_frame;
-
-/* See if a Title string has been set. If so, use the parent astGetTitle
- method to obtain a pointer to it. */
- if ( astTestTitle( this ) ) {
- result = (*parent_gettitle)( this_frame, status );
-
-/* Otherwise, we will generate a default Title string. Obtain the values of the
- SpecFrame's attributes that determine what this string will be. */
- } else {
- system = astGetSystem( this );
- sor = astGetStdOfRest( this );
- sor_string = StdOfRestString( sor, status );
- rf = astGetRestFreq( this );
-
-/* Classify the coordinate system type and create an appropriate Title
- string. (Note that when invoking the astFmtDecimalYr function we must
- use a separate sprintf on each occasion so as not to over-write its
- internal buffer before the result string has been used.) */
- if ( astOK ) {
- result = gettitle_buff;
-
-/* Begin with the system's default label. */
- pos = sprintf( gettitle_buff, "%s", SystemLabel( system, status ) );
- gettitle_buff[ 0 ] = toupper( gettitle_buff[ 0 ] );
-
-/* Append the standard of rest in parentheses, if set. */
- if( astTestStdOfRest( this ) ) {
- nc = sprintf( gettitle_buff+pos, " (%s)", sor_string );
- pos += nc;
- }
-
-/* Append the rest frequency if relevant. */
- if( !ABS_SYSTEM(system) && ( astTestRestFreq( this ) ||
- astGetUseDefs( this ) ) ) {
- pos += sprintf( gettitle_buff+pos, ", rest frequency = %g GHz", rf*1.0E-9 );
- }
- }
- }
-
-/* If an error occurred, clear the returned pointer value. */
- if ( !astOK ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-static double GetSpecOriginCur( AstSpecFrame *this, int *status ) {
-/*
-* Name:
-* GetSpecOriginCur
-
-* Purpose:
-* Obtain the SpecOrigin attribute for a SpecFrame in current units.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* double GetSpecOriginCur( AstSpecFrame *this, int *status )
-
-* Class Membership:
-* SpecFrame virtual function
-
-* Description:
-* This function returns the SpecOrigin attribute for a SpecFrame, in
-* the current units of the SpecFrame. The protected astGetSpecOrigin
-* method can be used to obtain the time origin in the default units of
-* the SpecFrame's System.
-
-* Parameters:
-* this
-* Pointer to the SpecFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The SpecOrigin value, in the units, system and rest frame specified
-* by the current values of the Unit, System and StdOfRest attributes
-* within "this".
-
-* Notes:
-* - AST__BAD is returned if this function is invoked with
-* the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstMapping *map;
- const char *cur;
- const char *def;
- double result;
- double defval;
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get the value in the default units */
- result = astGetSpecOrigin( this );
-
-/* If SpecOrigin is non-zero and non-BAD we convert it to the current units.*/
- if( result != 0.0 && result != AST__BAD ) {
-
-/* Get the default units for the SpecFrame's System. */
- def = DefUnit( astGetSystem( this ), "astGetSpecOrigin", "SpecFrame", status );
-
-/* Get the current units from the SpecFrame. */
- cur = astGetUnit( this, 0 );
-
-/* If the units differ, get a Mapping from default to current units. */
- if( cur && def ){
- if( strcmp( cur, def ) ) {
- map = astUnitMapper( def, cur, NULL, NULL );
-
-/* Report an error if the units are incompatible. */
- if( !map ) {
- astError( AST__BADUN, "%s(%s): The current units (%s) are not suitable "
- "for a SpecFrame.", status, "astGetSpecOrigin", astGetClass( this ),
- cur );
-
-/* Otherwise, transform the stored origin value.*/
- } else {
- defval = result;
- astTran1( map, 1, &defval, 1, &result );
- map = astAnnul( map );
- }
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-
-static const char *GetUnit( AstFrame *this_frame, int axis, int *status ) {
-/*
-* Name:
-* GetUnit
-
-* Purpose:
-* Obtain a pointer to the Unit string for a SpecFrame's axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* const char *GetUnit( AstFrame *this_frame, int axis )
-
-* Class Membership:
-* SpecFrame member function (over-rides the astGetUnit method inherited
-* from the Frame class).
-
-* Description:
-* This function returns a pointer to the Unit string for a specified axis
-* of a SpecFrame. If the Unit attribute has not been set for the axis, a
-* pointer to a suitable default string is returned instead.
-
-* Parameters:
-* this
-* Pointer to the SpecFrame.
-* axis
-* The number of the axis (zero-based) for which information is required.
-
-* Returned Value:
-* A pointer to a null-terminated string containing the Unit value.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSpecFrame *this; /* Pointer to the SpecFrame structure */
- AstSystemType system; /* The SpecFrame's System value */
- const char *result; /* Pointer value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the SpecFrame structure. */
- this = (AstSpecFrame *) this_frame;
-
-/* Validate the axis index. */
- astValidateAxis( this, axis, "astGetUnit" );
-
-/* If a value has been set for the Unit attribute, use the parent
- GetUnit method to return a pointer to the required Unit string. */
- if( astTestUnit( this, axis ) ){
- result = (*parent_getunit)( this_frame, axis, status );
-
-/* Otherwise, identify the spectral coordinate system described by the
- SpecFrame. */
- } else {
- system = astGetSystem( this );
-
-/* Return a string describing the default units. */
- result = DefUnit( system, "astGetUnit", astGetClass( this ), status );
- }
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-void astInitSpecFrameVtab_( AstSpecFrameVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitSpecFrameVtab
-
-* Purpose:
-* Initialise a virtual function table for a SpecFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "specframe.h"
-* void astInitSpecFrameVtab( AstSpecFrameVtab *vtab, const char *name )
-
-* Class Membership:
-* SpecFrame vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the SpecFrame class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrameVtab *frame; /* Pointer to Frame component of Vtab */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitFrameVtab( (AstFrameVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsASpecFrame) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstFrameVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
- vtab->GetRefPos = GetRefPos;
- vtab->SetRefPos = SetRefPos;
-
- vtab->ClearAlignStdOfRest = ClearAlignStdOfRest;
- vtab->TestAlignStdOfRest = TestAlignStdOfRest;
- vtab->GetAlignStdOfRest = GetAlignStdOfRest;
- vtab->SetAlignStdOfRest = SetAlignStdOfRest;
-
- vtab->ClearSourceVRF = ClearSourceVRF;
- vtab->TestSourceVRF = TestSourceVRF;
- vtab->GetSourceVRF = GetSourceVRF;
- vtab->SetSourceVRF = SetSourceVRF;
-
- vtab->ClearSourceSys = ClearSourceSys;
- vtab->TestSourceSys = TestSourceSys;
- vtab->GetSourceSys = GetSourceSys;
- vtab->SetSourceSys = SetSourceSys;
-
- vtab->ClearRefDec = ClearRefDec;
- vtab->TestRefDec = TestRefDec;
- vtab->GetRefDec = GetRefDec;
- vtab->SetRefDec = SetRefDec;
-
- vtab->ClearRefRA = ClearRefRA;
- vtab->TestRefRA = TestRefRA;
- vtab->GetRefRA = GetRefRA;
- vtab->SetRefRA = SetRefRA;
-
- vtab->ClearRestFreq = ClearRestFreq;
- vtab->TestRestFreq = TestRestFreq;
- vtab->GetRestFreq = GetRestFreq;
- vtab->SetRestFreq = SetRestFreq;
-
- vtab->ClearStdOfRest = ClearStdOfRest;
- vtab->TestStdOfRest = TestStdOfRest;
- vtab->GetStdOfRest = GetStdOfRest;
- vtab->SetStdOfRest = SetStdOfRest;
-
- vtab->ClearSourceVel = ClearSourceVel;
- vtab->TestSourceVel = TestSourceVel;
- vtab->GetSourceVel = GetSourceVel;
- vtab->SetSourceVel = SetSourceVel;
-
- vtab->ClearSpecOrigin = ClearSpecOrigin;
- vtab->TestSpecOrigin = TestSpecOrigin;
- vtab->GetSpecOrigin = GetSpecOrigin;
- vtab->SetSpecOrigin = SetSpecOrigin;
-
- vtab->TestAlignSpecOffset = TestAlignSpecOffset;
- vtab->SetAlignSpecOffset = SetAlignSpecOffset;
- vtab->GetAlignSpecOffset = GetAlignSpecOffset;
- vtab->ClearAlignSpecOffset = ClearAlignSpecOffset;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- frame = (AstFrameVtab *) vtab;
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
- parent_getdomain = frame->GetDomain;
- frame->GetDomain = GetDomain;
-
- parent_getsystem = frame->GetSystem;
- frame->GetSystem = GetSystem;
- parent_setsystem = frame->SetSystem;
- frame->SetSystem = SetSystem;
- parent_clearsystem = frame->ClearSystem;
- frame->ClearSystem = ClearSystem;
-
- parent_getalignsystem = frame->GetAlignSystem;
- frame->GetAlignSystem = GetAlignSystem;
-
- parent_getlabel = frame->GetLabel;
- frame->GetLabel = GetLabel;
-
- parent_getsymbol = frame->GetSymbol;
- frame->GetSymbol = GetSymbol;
-
- parent_gettitle = frame->GetTitle;
- frame->GetTitle = GetTitle;
-
- parent_clearunit = frame->ClearUnit;
- frame->ClearUnit = ClearUnit;
-
- parent_getunit = frame->GetUnit;
- frame->GetUnit = GetUnit;
-
- parent_setunit = frame->SetUnit;
- frame->SetUnit = SetUnit;
-
- parent_match = frame->Match;
- frame->Match = Match;
-
- parent_overlay = frame->Overlay;
- frame->Overlay = Overlay;
-
- parent_subframe = frame->SubFrame;
- frame->SubFrame = SubFrame;
-
-/* Store replacement pointers for methods which will be over-ridden by new
- member functions implemented here. */
- frame->GetActiveUnit = GetActiveUnit;
- frame->TestActiveUnit = TestActiveUnit;
- frame->ValidateSystem = ValidateSystem;
- frame->SystemString = SystemString;
- frame->SystemCode = SystemCode;
-
-/* Declare the copy constructor, destructor and class dump
- function. */
- astSetCopy( vtab, Copy );
- astSetDelete( vtab, Delete );
- astSetDump( vtab, Dump, "SpecFrame",
- "Description of spectral coordinate system" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static int MakeSpecMapping( AstSpecFrame *target, AstSpecFrame *result,
- AstSpecFrame *align_frm, int report,
- AstMapping **map, int *status ) {
-/*
-* Name:
-* MakeSpecMapping
-
-* Purpose:
-* Generate a Mapping between two SpecFrames.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* int MakeSpecMapping( AstSpecFrame *target, AstSpecFrame *result,
-* AstSpecFrame *align_frm, int report,
-* AstMapping **map, int *status ) {
-
-* Class Membership:
-* SpecFrame member function.
-
-* Description:
-* This function takes two SpecFrames and generates a Mapping that
-* converts between them, taking account of differences in their
-* coordinate systems, rest frequency, standard of rest, etc.
-*
-* In order to cut down the number of transformations to be considered,
-* the scheme works by first converting from the target frame to an
-* "alignment" Frame, using the attributes of the target to define the
-* transformation. A transformation is then found from the alignment
-* frame to the required result Frame, using the attributes of the
-* result to define the transformation. The alignment Frame is
-* described by the AlignSystem and AlignStdOfRest attributes of the
-* "align_frm" SpecFrame.
-*
-* Thus, different forms of alignment can be obtained by suitable
-* choice of the attributes of "align_frm". For instance, to compare the
-* radio velocity dispersion of two lines at different rest frequencies,
-* you would set "system=radio velocity" and (probably) "stdofrest=local
-* group" in "align_frm". On the other hand if you wanted to re-calibrate
-* an existing radio velocity Frame within a FrameSet to use a different
-* rest frequency, you would make the SpecFrame the current Frame and then
-* set the rest frequency attribute for the FrameSet. The "integrity
-* checking" system in the FrameSet class would then get the Mapping
-* between the original and the modified SpecFrames. In this case, the
-* "alignment system" needs to be "frequency" since you want the original
-* and modified SpecFrames to be aligned in frequency, not radio velocity.
-
-* Parameters:
-* target
-* Pointer to the first SpecFrame.
-* result
-* Pointer to the second SpecFrame.
-* align_frm
-* A SpecFrame defining the system and standard of rest in which to
-* align the target and result SpecFrames.
-* report
-* Should errors be reported if no match is possible? These reports
-* will describe why no match was possible.
-* map
-* Pointer to a location which is to receive a pointer to the
-* returned Mapping. The forward transformation of this Mapping
-* will convert from "target" coordinates to "result"
-* coordinates, and the inverse transformation will convert in
-* the opposite direction (all coordinate values in radians).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the Mapping could be generated, or zero if the two
-* SpecFrames are sufficiently un-related that no meaningful Mapping
-* can be produced (albeit an "unmeaningful" Mapping will be returned
-* in this case, which will need to be annulled).
-
-* Notes:
-* A value of zero is returned if this function is invoked with the
-* global error status set or if it should fail for any reason.
-*/
-
-/* Local Constants: */
-#define MAX_ARGS 1 /* Max arguments for an SpecMap conversion */
-
-/* Local Variables: */
- AstMapping *map1; /* Intermediate Mapping */
- AstMapping *map2; /* Intermediate Mapping */
- AstMapping *umap1; /* First Units Mapping */
- AstMapping *umap2; /* Second Units Mapping */
- AstSpecMap *specmap; /* Pointer to SpecMap */
- AstShiftMap *sm; /* ShiftMap pointer */
- AstSpecFrame *align_target; /* Alignment Frame with target properties */
- AstSpecFrame *align_result; /* Alignment Frame with result properties */
- AstSystemType serr; /* Erroneous system */
- AstSystemType align_system; /* Code to identify alignment system */
- AstSystemType target_system; /* Code to identify target system */
- AstSystemType result_system; /* Code to identify result system */
- const char *uerr; /* Erroneous units */
- const char *ures; /* Results units */
- const char *utarg; /* Target units */
- const char *vmess; /* Text for use in error messages */
- double args[ MAX_ARGS ]; /* Conversion argument array */
- double target_rf; /* Target rest frequency (Hz) */
- double result_rf; /* Result rest frequency (Hz) */
- double target_origin; /* Target origin */
- double result_origin; /* Result origin */
- int match; /* Mapping can be generated? */
- int step2; /* Perform the 2nd step in the Mapping? */
- int step3; /* Perform the 3rd step in the Mapping? */
- int step4; /* Perform the 4th step in the Mapping? */
- int step5; /* Perform the 5th step in the Mapping? */
- int step6; /* Perform the 6th step in the Mapping? */
- int step7; /* Perform the 7th step in the Mapping? */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Initialise the returned values. */
- match = 1;
- *map = NULL;
-
-/* Create an initial (null) SpecMap. This is a 1D Mapping which converts
- spectral axis values between different systems and standard of rest.
- The axis units used by the SpecMap class match the default units used
- by this class. Any discrepancy between units is taken into account at
- the end of this function, once the total SpecMap has been created. */
- specmap = astSpecMap( 1, 0, "", status );
-
-/* Define local macros as shorthand for adding spectral coordinate
- conversions to this SpecMap. Each macro simply stores details of
- the additional arguments in the "args" array and then calls
- astSpecAdd. The macros differ in the number of additional argument
- values. */
-#define TRANSFORM_0(cvt) \
- astSpecAdd( specmap, cvt, NULL );
-
-#define TRANSFORM_1(cvt,arg0) \
- args[ 0 ] = arg0; \
- astSpecAdd( specmap, cvt, args );
-
-/* Get all the necessary attributes from the result, target and alignment
- Frames. */
- target_rf = astGetRestFreq( target );
- result_rf = astGetRestFreq( result );
-
- target_system = astGetSystem( target );
- result_system = astGetSystem( result );
- align_system = astGetSystem( align_frm );
-
-/* Define text for error messages.*/
- vmess = "convert between spectral systems";
-
-/* Verify that values for the standard of rest have been set if required
- (i.e if the UseDefs attribute of either SpecFrame is false). */
- VerifyAttrs( result, vmess, "StdOfRest", "astMatch", status );
- VerifyAttrs( target, vmess, "StdOfRest", "astMatch", status );
-
-/* There are two different strategies for alignment. I'll use the Source
- rest frame as an example, although the same argument applies to other
- rest frames. In the first strategy, all "Source" rest frames are
- considered equal. That is, if two SpecFrames respresent (for example)
- frequencies in the source frame, then the SpecFrames are aligned using
- a UnitMap even if the details of the two source rest frames differ.
- This is usually what users want to see when (for instance) aligning
- plots of two spectra which both represent source frequencies but where
- the source frames details differ. In the second strategy, "Source"
- rest frames are aligned using a SpecMap that takes into account any
- differences in the properties of the source rest frames. This is what
- should happen when changes are made to the properties of a SpecFrame
- within a FrameSet. For instance, if the user changes the SourceVel
- attribute of the current Frame (assumed here to be a SpecFrame) in a
- FrameSet, then the process of restoring the integrity of the FrameSet
- (see frameset.c for details of integrity restoration) should cause the
- base->current Mapping in the FrameSet to be modified to reflect the
- new SourceVel value.
-
- So if the current call to this function is part of the process of
- restoring a FrameSet's integrity following changes to the FrameSet's
- current Frame, then we want to retain the properties of the supplied
- alignment Frame. So we use clones of the supplied alignment Frame. */
- if( astGetFrameFlags( target ) & AST__INTFLAG ) {
- align_target = astClone( align_frm );
- align_result = astClone( align_frm );
-
-/* Buf if we are not restoring the integrity of a FrameSet, we want
- to ignore any differences in the properties that define the available
- rest frames. So create copies of the alignment Frame in which the
- properies defining the available rest frames are the same as in the
- target and result Frames. */
- } else {
- align_target = astCopy( align_frm );
- astSetEpoch( align_target, astGetEpoch( target ) );
- astSetRefRA( align_target, astGetRefRA( target ) );
- astSetRefDec( align_target, astGetRefDec( target ) );
- astSetSourceVRF( align_target, astGetSourceVRF( target ) );
- astSetSourceVel( align_target, astGetSourceVel( target ) );
- astSetObsLat( align_target, astGetObsLat( target ) );
- astSetObsLon( align_target, astGetObsLon( target ) );
- astSetObsAlt( align_target, astGetObsAlt( target ) );
-
- align_result = astCopy( align_frm );
- astSetEpoch( align_result, astGetEpoch( result ) );
- astSetRefRA( align_result, astGetRefRA( result ) );
- astSetRefDec( align_result, astGetRefDec( result ) );
- astSetSourceVRF( align_result, astGetSourceVRF( result ) );
- astSetSourceVel( align_result, astGetSourceVel( result ) );
- astSetObsLat( align_result, astGetObsLat( result ) );
- astSetObsLon( align_result, astGetObsLon( result ) );
- astSetObsAlt( align_result, astGetObsAlt( result ) );
- }
-
-/* The supported spectral coordinate systems fall into two groups;
- "relative", and "absolute". The relative systems define each axis
- value with respect to the rest frequency, whereas the absolute systems
- have axis values which do not depend on the rest frequency. In order
- to convert an axis value from a system in one group to a system in the
- other group, the rest frequency must be known. However, the rest
- frequency is not necessary in order to convert axis values between two
- systems belonging to the same group. Determine if the alignment system
- is absolute or relative. If absolute, we ignore the system of the supplied
- "align_frm" and align in frequency, since aligning in any absolute system
- will automatically ensure that all the other absolute systems are aligned.
- Similarly, aligning in any relative system will automatically ensure that
- all the other relative systems are aligned. Doing this cuts down the
- complexity of the conversion process since we do not need to check every
- possible alignment system. */
- align_system = ( ABS_SYSTEM( align_system ) ) ? AST__FREQ : AST__VREL;
-
-/* The total Mapping is made up of the following steps in series:
-
- 0) Convert from an offset value to an absolute value (if SpecOrigin set)
- 1) Convert target units to default units for the targets system
- 2) Convert from target system in target SOR to frequency in target SOR
- 3) Convert from freq in target SOR to freq in alignment SOR
- 4) Convert from freq in alignment SOR to alignment system in alignment SOR
- 5) Convert from alignment system in alignment SOR to freq in alignment SOR
- 6) Convert from freq in alignment SOR to freq in result SOR
- 7) Convert from freq in result SOR to result system in result SOR
- 8) Convert default units for the result system to results unit
- 9) Convert from an absolute value to an offset value (if SpecOrigin set)
-
- Steps 1,2,3,4 are performed using the attributes of the target (rest
- frequency, reference farem, etc), whilst steps 5,6,7,8 are performed
- using the attributes of the target (rest frequency, reference frame,
- etc). It is necessary to go from target system to alignment system
- via frequency because SOR conversion can only be performed in the
- frequency domain.
-
- Some of these steps may not be necessary. Initially assume all steps
- are necessary (we leave steps 0, 1, 8 and 9 out of this process and
- implement them once all other steps have been done). */
- step2 = 1;
- step3 = 1;
- step4 = 1;
- step5 = 1;
- step6 = 1;
- step7 = 1;
-
-/* Step 2 is not necessary if the target system is frequency. */
- if( target_system == AST__FREQ ) step2 = 0;
-
-/* Step 3 is not necessary if the alignment SOR is the same as the target
- SOR. */
- if( EqualSor( target, align_target, status ) ) step3 = 0;
-
-/* Step 6 is not necessary if the alignment SOR is the same as the result
- SOR. */
- if( EqualSor( result, align_result, status ) ) step6 = 0;
-
-/* Step 7 is not necessary if the result system is frequency. */
- if( result_system == AST__FREQ ) step7 = 0;
-
-/* Steps 4 and 5 are not necessary if the alignment system is frequency,
- or if the target and result rest frequencies are equal. */
- if( align_system == AST__FREQ || result_rf == target_rf ) step4 = step5 = 0;
-
-/* Steps 3 and 6 are not necessary if steps 4 and 5 are not necessary, and
- the target sor equals the result sor. */
- if( !step4 && !step5 && EqualSor( target, result, status ) ) step3 = step6 = 0;
-
-/* Steps 2 and 7 are not necessary if steps 3, 4, 5 and 6 are not necessary,
- and the target sor equals the result sor, and the target and results
- systems are equal (if the systems are relative they must also have equal
- rest frequencies). */
- if( !step3 && !step4 && !step5 && !step6 && EqualSor( target, result, status ) &&
- target_system == result_system ) {
- if( !ABS_SYSTEM( target_system ) && result_rf == target_rf ) step2 = step7 = 0;
- }
-
-
-/* Now we know which steps are needed, let's do them (we delay unit
- conversion to the end)... */
-
-/* Step 2: target system in target rest frame to frequency in target rest
- frame. */
- if( step2 ) {
- if( target_system != AST__FREQ ) {
-
-/* If the target system is absolute, we can convert directly to frequency. */
- if ( target_system == AST__ENERGY ) {
- TRANSFORM_0( "ENTOFR" )
-
- } else if ( target_system == AST__WAVENUM ) {
- TRANSFORM_0( "WNTOFR" )
-
- } else if ( target_system == AST__WAVELEN ) {
- TRANSFORM_0( "WVTOFR" )
-
- } else if ( target_system == AST__AIRWAVE ) {
- TRANSFORM_0( "AWTOFR" )
-
-/* If the target target_system is relative, we first need to convert to
- apparent radial velocity, and then to frequency using the rest frequency. */
- } else {
-
- if ( target_system == AST__VRADIO ) {
- TRANSFORM_0( "VRTOVL" )
-
- } else if ( target_system == AST__VOPTICAL ) {
- TRANSFORM_0( "VOTOVL" )
-
- } else if ( target_system == AST__REDSHIFT ) {
- TRANSFORM_0( "ZOTOVL" )
-
- } else if ( target_system == AST__BETA ) {
- TRANSFORM_0( "BTTOVL" )
- }
-
- VerifyAttrs( target, vmess, "RestFreq", "astMatch", status );
- TRANSFORM_1( "VLTOFR", target_rf )
- }
- }
- }
-
-/* Step 3: frequency in target rest frame to frequency in alignment rest
- frame. */
- if( step3 ) match = SorConvert( target, align_target, specmap, status );
-
-/* Step 4: frequency in alignment rest frame to alignment system in alignment
- rest frame. The alignment will be either relativistic velocity or
- frequency. */
- if( step4 ) {
- if( align_system == AST__VREL ) {
- VerifyAttrs( target, vmess, "RestFreq", "astMatch", status );
- TRANSFORM_1( "FRTOVL", target_rf )
- }
- }
-
-/* Step 5: Alignment system in alignment rest frame to frequency in alignment
- rest frame (from now on use the attributes of the result SpecFrame to
- define the conversion parameters). */
- if( step5 ) {
- if( align_system == AST__VREL ) {
- VerifyAttrs( result, vmess, "RestFreq", "astMatch", status );
- TRANSFORM_1( "VLTOFR", result_rf )
- }
- }
-
-/* Step 6: frequency in alignment rest frame to frequency in result rest
- frame. */
- if( step6 ) match = SorConvert( align_result, result, specmap, status );
-
-/* Step 7: frequency in result rest frame to result system in result rest
- frame. */
- if( step7 ) {
- if( result_system != AST__FREQ ) {
-
-/* If the results system is absolute, we can convert directly. */
- if ( result_system == AST__ENERGY ) {
- TRANSFORM_0( "FRTOEN" )
-
- } else if ( result_system == AST__WAVENUM ) {
- TRANSFORM_0( "FRTOWN" )
-
- } else if ( result_system == AST__WAVELEN ) {
- TRANSFORM_0( "FRTOWV" )
-
- } else if ( result_system == AST__AIRWAVE ) {
- TRANSFORM_0( "FRTOAW" )
-
-/* If the result system is relative, we first need to convert to apparent
- radial velocity from frequency using the rest frequency. Report an error
- if the rest frequency is undefined. */
- } else {
- VerifyAttrs( result, vmess, "RestFreq", "astMatch", status );
- TRANSFORM_1( "FRTOVL", result_rf )
-
-/* Now convert from apparent radial velocity to the required result system. */
- if ( result_system == AST__VRADIO ) {
- TRANSFORM_0( "VLTOVR" )
-
- } else if ( result_system == AST__VOPTICAL ) {
- TRANSFORM_0( "VLTOVO" )
-
- } else if ( result_system == AST__REDSHIFT ) {
- TRANSFORM_0( "VLTOZO" )
-
- } else if ( result_system == AST__BETA ) {
- TRANSFORM_0( "VLTOBT" )
- }
- }
- }
- }
-
-/* The SpecMap created above class assumes that the axis values supplied to
- its Transform method are in units which correspond to the default units
- for its class (the returned values also use these units). However,
- the Unit attributes of the supplied Frames may have been set to some
- non-default value, and so we need to add Mappings before and after the
- SpecMap which convert to and from the default units. Find the Mapping
- from the target Frame Units to the default Units for the target's system. */
- utarg = astGetUnit( target, 0 );
- umap1 = astUnitMapper( utarg, SpecMapUnit( target_system, "MakeSpecMap",
- "SpecFrame", status ), NULL, NULL );
-
-/* Find the Mapping from the default Units for the result's system to the
- Units of the result Frame. */
- ures = astGetUnit( result, 0 );
- umap2 = astUnitMapper( SpecMapUnit( result_system, "MakeSpecMap",
- "SpecFrame", status ), ures, NULL, NULL );
-
-/* If both units Mappings were created OK, sandwich the SpecMap between
- them. */
- if( umap1 && umap2 ) {
- map1 = (AstMapping *) astCmpMap( umap1, specmap, 1, "", status );
- map2 = (AstMapping *) astCmpMap( map1, umap2, 1, "", status );
- map1 = astAnnul( map1 );
-
-/* If the simplified SpecMap is a UnitMap, and the target and result
- units are the same, we do not need to know the mapping between units.
- Otherwise, report an error and indicate that we cannot convert between
- the Frames. */
- } else {
- map2 = astSimplify( specmap );
- if( !astIsAUnitMap( map2 ) || strcmp( ures, utarg ) ) {
- match = 0;
- if( astOK && report ) {
- if( !umap1 ) {
- uerr = utarg;
- serr = astGetSystem( target );
- } else {
- uerr = ures;
- serr = astGetSystem( result );
- }
- astError( AST__BADUN, "astMatch(SpecFrame): Inappropriate units (%s) "
- "specified for a %s axis.", status, uerr, SystemLabel( serr, status ) );
- }
- }
- }
-
-/* Step 0: offset to absolute value in target system. Prepend the Maping created
- above with a ShiftMap that does the required shift of origin. */
- target_origin = GetSpecOriginCur( target, status );
- if( target_origin != 0.0 ) {
- sm = astShiftMap( 1, &target_origin, "", status );
- map1 = (AstMapping *) astCmpMap( sm, map2, 1, "", status );
- sm = astAnnul( sm );
- } else {
- map1 = astClone( map2 );
- }
- map2 = astAnnul( map2 );
-
-/* Step 9: absolute value to offset in result system. If we are aligning in the
- offset system, use the transformed target origin as the new zero point.
- Otherwise use the origin from the result frame. First get the origin for the
- result system. */
- if( astGetAlignSpecOffset( target ) && astGetAlignSpecOffset( result ) ) {
- result_origin = 0.0;
- astTran1( map1, 1, &result_origin, 1, &result_origin );
- } else {
- result_origin = GetSpecOriginCur( result, status );
- }
-
-/* Now create the ShiftMap and apend it to the end of the Maping. */
- if( result_origin != 0.0 ) {
- result_origin = -result_origin;
- sm = astShiftMap( 1, &result_origin, "", status );
- map2 = (AstMapping *) astCmpMap( map1, sm, 1, "", status );
- sm = astAnnul( sm );
- } else {
- map2 = astClone( map1 );
- }
- map1 = astAnnul( map1 );
-
-/* Return the simplified Mapping. */
- *map = astSimplify( map2 );
-
-/* Annul remaining resources. */
- map2 = astAnnul( map2 );
- specmap = astAnnul( specmap );
- if( umap1 ) umap1 = astAnnul( umap1 );
- if( umap2 ) umap2 = astAnnul( umap2 );
- align_result = astAnnul( align_result );
- align_target = astAnnul( align_target );
-
-/* If an error occurred, annul the returned Mapping and clear the returned
- values. */
- if ( !astOK ) {
- *map = astAnnul( *map );
- match = 0;
- }
-
-/* Return the result. */
- return match;
-
-/* Undefine macros local to this function. */
-#undef MAX_ARGS
-#undef TRANSFORM_0
-#undef TRANSFORM_1
-}
-
-static int Match( AstFrame *template_frame, AstFrame *target,
- int **template_axes, int **target_axes, AstMapping **map,
- AstFrame **result, int *status ) {
-/*
-* Name:
-* Match
-
-* Purpose:
-* Determine if conversion is possible between two coordinate systems.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* int Match( AstFrame *template, AstFrame *target,
-* int **template_axes, int **target_axes,
-* AstMapping **map, AstFrame **result, int *status )
-
-* Class Membership:
-* SpecFrame member function (over-rides the protected astMatch method
-* inherited from the Frame class).
-
-* Description:
-* This function matches a "template" SpecFrame to a "target" Frame and
-* determines whether it is possible to convert coordinates between them.
-* If it is, a mapping that performs the transformation is returned along
-* with a new Frame that describes the coordinate system that results when
-* this mapping is applied to the "target" coordinate system. In addition,
-* information is returned to allow the axes in this "result" Frame to be
-* associated with the corresponding axes in the "target" and "template"
-* Frames from which they are derived.
-
-* Parameters:
-* template
-* Pointer to the template SpecFrame. This describes the coordinate
-* system (or set of possible coordinate systems) into which we wish to
-* convert our coordinates.
-* target
-* Pointer to the target Frame. This describes the coordinate system in
-* which we already have coordinates.
-* template_axes
-* Address of a location where a pointer to int will be returned if the
-* requested coordinate conversion is possible. This pointer will point
-* at a dynamically allocated array of integers with one element for each
-* axis of the "result" Frame (see below). It must be freed by the caller
-* (using astFree) when no longer required.
-*
-* For each axis in the result Frame, the corresponding element of this
-* array will return the index of the template SpecFrame axis from
-* which it is derived. If it is not derived from any template
-* SpecFrame axis, a value of -1 will be returned instead.
-* target_axes
-* Address of a location where a pointer to int will be returned if the
-* requested coordinate conversion is possible. This pointer will point
-* at a dynamically allocated array of integers with one element for each
-* axis of the "result" Frame (see below). It must be freed by the caller
-* (using astFree) when no longer required.
-*
-* For each axis in the result Frame, the corresponding element of this
-* array will return the index of the target Frame axis from which it
-* is derived. If it is not derived from any target Frame axis, a value
-* of -1 will be returned instead.
-* map
-* Address of a location where a pointer to a new Mapping will be
-* returned if the requested coordinate conversion is possible. If
-* returned, the forward transformation of this Mapping may be used to
-* convert coordinates between the "target" Frame and the "result"
-* Frame (see below) and the inverse transformation will convert in the
-* opposite direction.
-* result
-* Address of a location where a pointer to a new Frame will be returned
-* if the requested coordinate conversion is possible. If returned, this
-* Frame describes the coordinate system that results from applying the
-* returned Mapping (above) to the "target" coordinate system. In
-* general, this Frame will combine attributes from (and will therefore
-* be more specific than) both the target and the template Frames. In
-* particular, when the template allows the possibility of transformaing
-* to any one of a set of alternative coordinate systems, the "result"
-* Frame will indicate which of the alternatives was used.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if the requested coordinate conversion is
-* possible. Otherwise zero is returned (this will not in itself result in
-* an error condition).
-
-* Notes:
-* - A value of zero will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-
-* Implementation Notes:
-* This implementation addresses the matching of a SpecFrame class
-* object to any other class of Frame. A SpecFrame will match any class
-* of SpecFrame (i.e. possibly from a derived class) but will not match
-* a less specialised class of Frame.
-*/
-
-/* Local Variables: */
- AstFrame *frame0; /* Pointer to Frame underlying axis 0 */
- AstSpecFrame *template; /* Pointer to template SpecFrame structure */
- int iaxis0; /* Axis index underlying axis 0 */
- int iaxis; /* Axis index */
- int match; /* Coordinate conversion possible? */
- int target_axis0; /* Index of SpecFrame axis in the target */
- int target_naxes; /* Number of target axes */
-
-/* Initialise the returned values. */
- *template_axes = NULL;
- *target_axes = NULL;
- *map = NULL;
- *result = NULL;
- match = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return match;
-
-/* Obtain a pointer to the template SpecFrame structure. */
- template = (AstSpecFrame *) template_frame;
-
-/* Obtain the number of axes in the target Frame. */
- target_naxes = astGetNaxes( target );
-
-/* The first criterion for a match is that the template matches as a
- Frame class object. This ensures that the number of axes (1) and
- domain, etc. of the target Frame are suitable. Invoke the parent
- "astMatch" method to verify this. */
- match = (*parent_match)( template_frame, target,
- template_axes, target_axes, map, result, status );
-
-/* If a match was found, annul the returned objects, which are not
- needed, but keep the memory allocated for the axis association
- arrays, which we will re-use. */
- if ( astOK && match ) {
- *map = astAnnul( *map );
- *result = astAnnul( *result );
- }
-
-/* If OK so far, obtain pointers to the primary Frames which underlie
- all target axes. Stop when a SpecFrame axis is found. */
- if ( match && astOK ) {
- match = 0;
- for( iaxis = 0; iaxis < target_naxes; iaxis++ ) {
- astPrimaryFrame( target, iaxis, &frame0, &iaxis0 );
- if( astIsASpecFrame( frame0 ) ) {
- frame0 = astAnnul( frame0 );
- target_axis0 = iaxis;
- match = 1;
- break;
- } else {
- frame0 = astAnnul( frame0 );
- }
- }
-
- }
-
-/* Check at least one SpecFrame axis was found it the target. Store the
- axis associataions. */
- if( match && astOK ) {
- (*template_axes)[ 0 ] = 0;
- (*target_axes)[ 0 ] = target_axis0;
-
-/* Use the target's "astSubFrame" method to create a new Frame (the
- result Frame) with copies of the target axes in the required
- order. This process also overlays the template attributes on to the
- target Frame and returns a Mapping between the target and result
- Frames which effects the required coordinate conversion. */
- match = astSubFrame( target, template, 1, *target_axes, *template_axes,
- map, result );
-
- }
-
-/* If an error occurred, or conversion to the result Frame's
- coordinate system was not possible, then free all memory, annul the
- returned objects, and reset the returned value. */
- if ( !astOK || !match ) {
- *template_axes = astFree( *template_axes );
- *target_axes = astFree( *target_axes );
- if( *map ) *map = astAnnul( *map );
- if( *result ) *result = astAnnul( *result );
- match = 0;
- }
-
-
-/* Return the result. */
- return match;
-}
-
-static void OriginStdOfRest( AstSpecFrame *this, AstStdOfRestType newsor,
- const char *method, int *status ){
-/*
-* Name:
-* OriginStdOfRest
-
-* Purpose:
-* Convert the SpecOrigin in a SpecFrame to a new rest frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* void OriginStdOfRest( AstSpecFrame *this, AstStdOfRestType newsor,
-* const char *method, int *status )
-
-* Class Membership:
-* SpecFrame member function
-
-* Description:
-* This function converts the value of the SpecOrigin attribute stored
-* within a supplied SpecFrame from the rest frame currently associated
-* with the SpecFrame, to the new rest frame indicated by "newsor".
-
-* Parameters:
-* this
-* Point to the SpecFrame. On entry, the SpecOrigin value is
-* assumed to refer to the re st frame given by the astGetStdOfRest
-* method. On exit, the SpecOrigin value refers to the rest frame
-* supplied in "newsor". The StdOfRest attribute of the SpecFrame
-* should then be modified in order to keep things consistent.
-* newsor
-* The rest frame to which the SpecOrigin value stored within "this"
-* should refer on exit.
-* method
-* Pointer to a string holding the name of the method to be
-* included in any error messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-
-/* Local Variables: */
- AstSpecFrame *sf;
- AstFrameSet *fs;
- double origin;
- double neworigin;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Do nothing if the SpecOrigin attribute has not been assigned a value. */
- if( astTestSpecOrigin( this ) ) {
-
-/* Do nothing if the rest frame will not change. */
- if( newsor != astGetStdOfRest( this ) ) {
-
-/* Save the original SpecOrigin value (in the current SpecFrame units) and then
- clear it. */
- origin = GetSpecOriginCur( this, status );
- astClearSpecOrigin( this );
-
-/* Take a copy of the SpecFrame and set the new StdOfRest. */
- sf = astCopy( this );
- astSetStdOfRest( sf, newsor );
-
-/* Create a Mapping to perform the rest frame change, then use it to convert
- the value to the new rest frame. */
- fs = astConvert( this, sf, "" );
- neworigin = AST__BAD;
- if( fs ) {
- astTran1( fs, 1, &origin, 1, &neworigin );
- fs = astAnnul( fs );
- }
-
-/* If succesful, convert from the current units to the default units, and store
- in "this". */
- if( neworigin != AST__BAD ) {
- astSetSpecOrigin( this, ToUnits( this, astGetUnit( this, 0 ), neworigin,
- method, status ) );
-
- } else if( astOK ) {
- astError( AST__ATSER, "%s(%s): Cannot convert the SpecOrigin "
- "value to a different rest frame.", status, method,
- astGetClass( this ) );
- }
- }
- }
-}
-
-static void OriginSystem( AstSpecFrame *this, AstSystemType oldsys,
- const char *method, int *status ){
-/*
-* Name:
-* OriginSystem
-
-* Purpose:
-* Convert the SpecOrigin in a SpecFrame to a new System.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* void OriginSystem( AstSpecFrame *this, AstSystemType oldsys,
-* const char *method, int *status )
-
-* Class Membership:
-* SpecFrame member function
-
-* Description:
-* This function converts the value of the SpecOrigin attribute stored
-* within a supplied SpecFrame from its original System, etc, to the
-* System, etc, currently associated with the SpecFrame.
-
-* Parameters:
-* this
-* Point to the SpecFrame. On entry, the SpecOrigin value is
-* assumed to refer to the System given by "oldsys", etc. On exit, the
-* SpecOrigin value refers to the System returned by the astGetSystem
-* method, etc.
-* oldsys
-* The System to which the SpecOrigin value stored within "this"
-* refers on entry.
-* method
-* A string containing the method name for error messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstSpecFrame *sf1;
- AstSpecFrame *sf2;
- AstFrameSet *fs;
- double origin;
- double neworigin;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Do nothing if the SpecOrigin attribute has not been assigned a value. */
- if( astTestSpecOrigin( this ) ) {
-
-/* Do nothing if the System will not change. */
- if( oldsys != astGetSystem( this ) ) {
-
-/* Note the original SpecOrigin value, in the SpecFrame's default units. */
- origin = astGetSpecOrigin( this );
-
-/* Take a copy of the original SpecFrame and ensure the Units, SpecOrigin and
- AlignSpecOffset attributes are cleared. */
- sf1 = astCopy( this );
- astClearUnit( sf1, 0 );
- astClearSpecOrigin( sf1 );
- astClearAlignSpecOffset( sf1 );
-
-/* Take another copy of the SpecFrame and set the old system. */
- sf2 = astCopy( sf1 );
- astSetSystem( sf2, oldsys );
-
-/* Create a Mapping to perform the rest frame change, then use it to convert
- the value to the current system. */
- fs = astConvert( sf2, sf1, "" );
- neworigin = AST__BAD;
- if( fs ) {
- astTran1( fs, 1, &origin, 1, &neworigin );
- fs = astAnnul( fs );
- }
-
-/* Free resources */
- sf1 = astAnnul( sf1 );
- sf2 = astAnnul( sf2 );
-
-/* If succesful, store it in "this". */
- if( neworigin != AST__BAD ) {
- astSetSpecOrigin( this, neworigin );
-
- } else if( astOK ) {
- astError( AST__ATSER, "%s(%s): Cannot convert the SpecOrigin "
- "value to a different spectral system.", status, method,
- astGetClass( this ) );
- }
- }
- }
-}
-
-
-static void Overlay( AstFrame *template, const int *template_axes,
- AstFrame *result, int *status ) {
-/*
-* Name:
-* Overlay
-
-* Purpose:
-* Overlay the attributes of a template SpecFrame on to another Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* void Overlay( AstFrame *template, const int *template_axes,
-* AstFrame *result, int *status )
-
-* Class Membership:
-* SpecFrame member function (over-rides the protected astOverlay method
-* inherited from the Frame class).
-
-* Description:
-* This function overlays attributes of a SpecFrame (the "template") on to
-* another Frame, so as to over-ride selected attributes of that second
-* Frame. Normally only those attributes which have been specifically set
-* in the template will be transferred. This implements a form of
-* defaulting, in which a Frame acquires attributes from the template, but
-* retains its original attributes (as the default) if new values have not
-* previously been explicitly set in the template.
-*
-* Note that if the result Frame is a SpecFrame and a change of spectral
-* coordinate system occurs as a result of overlaying its System
-* attribute, then some of its original attribute values may no
-* longer be appropriate (e.g. the Title, or attributes describing
-* its axes). In this case, these will be cleared before overlaying
-* any new values.
-
-* Parameters:
-* template
-* Pointer to the template SpecFrame, for which values should have been
-* explicitly set for any attribute which is to be transferred.
-* template_axes
-* Pointer to an array of int, with one element for each axis of the
-* "result" Frame (see below). For each axis in the result frame, the
-* corresponding element of this array should contain the (zero-based)
-* index of the template axis to which it corresponds. This array is used
-* to establish from which template axis any axis-dependent attributes
-* should be obtained.
-*
-* If any axis in the result Frame is not associated with a template
-* axis, the corresponding element of this array should be set to -1.
-*
-* If a NULL pointer is supplied, the template and result axis
-* indicies are assumed to be identical.
-* result
-* Pointer to the Frame which is to receive the new attribute values.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - In general, if the result Frame is not from the same class as the
-* template SpecFrame, or from a class derived from it, then attributes may
-* exist in the template SpecFrame which do not exist in the result Frame.
-* In this case, these attributes will not be transferred.
-*/
-
-/* Local Variables: */
- AstFrame *templt; /* Copy of supplied template Frame */
- AstSystemType new_system; /* Code identifying new cordinates */
- AstSystemType old_system; /* Code identifying old coordinates */
- const char *method; /* Pointer to method string */
- const char *new_class; /* Pointer to template class string */
- const char *old_class; /* Pointer to result class string */
- int specframe; /* Result Frame is a SpecFrame? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Initialise strings used in error messages. */
- new_class = astGetClass( template );
- old_class = astGetClass( result );
- method = "astOverlay";
-
-/* Get the old and new systems. */
- old_system = astGetSystem( result );
- new_system = astGetSystem( template );
-
-/* It may be necessary to make temporary changes to the template Frame
- below. In order to ensure that we make no permanent changes to the
- supplied frame, we will, if necessary, take a deep copy of the
- supplied Frame, storing a pointer to the copy in "templt". If it is
- not necessary to make any changes to the template, we still want
- "templt" to hold a usable pointer, so we initialise it now to hold a
- clone of the supplied pointer. This pointer will be replaced by a
- pointer to a deep copy (if required) below. */
- templt = astClone( template );
-
-/* If the result Frame is a SpecFrame, we must test to see if overlaying its
- System attribute will change the type of coordinate system it describes.
- Determine the value of this attribute for the result and template
- SpecFrames. */
- specframe = astIsASpecFrame( result );
- if( specframe ) {
-
-/* If the coordinate system will change, any value already set for the result
- SpecFrame's Title will no longer be appropriate, so clear it. */
- if ( new_system != old_system ) {
- astClearTitle( result );
-
-/* If the systems have the same default units, we can retain the current
- Unit value. */
- if( strcmp( DefUnit( new_system, method, new_class, status ),
- DefUnit( old_system, method, old_class, status ) ) ) {
- astClearUnit( result, 0 );
- }
-
-/* If necessary, clear inappropriate values for all those axis attributes
- whose access functions are over-ridden by this class (these access functions
- will then provide suitable defaults appropriate to the new coordinate system
- instead). */
- astClearLabel( result, 0 );
- astClearSymbol( result, 0 );
- }
-
-/* If the result Frame is not a SpecFrame, we must temporarily clear the
- System and AlignSystem values since the values used by this class
- are only appropriate to this class. Use a deep copy to avoid the danger
- of making any permanent changes to the suppied Frame. */
- } else {
- if( astTestSystem( template ) ) {
- templt = astAnnul( templt );
- templt = astCopy( template );
- astClearSystem( templt );
- astClearAlignSystem( templt );
- }
- }
-
-/* Invoke the parent class astOverlay method to transfer attributes inherited
- from the parent class. */
- (*parent_overlay)( templt, template_axes, result, status );
-
-/* Check if the result Frame is a SpecFrame or from a class derived from
- SpecFrame. If not, we cannot transfer SpecFrame attributes to it as it is
- insufficiently specialised. In this case simply omit these attributes. */
- if ( specframe && astOK ) {
-
-/* Define macros that test whether an attribute is set in the template and,
- if so, transfers its value to the result. */
-#define OVERLAY(attribute) \
- if ( astTest##attribute( template ) ) { \
- astSet##attribute( result, astGet##attribute( template ) ); \
- }
-
-/* Use the macro to transfer each SpecFrame attribute in turn. Note,
- SourceVRF must be overlayed before SourceVel. Otherwise the stored value
- for SourceVel would be changed from the default SourceVRF to the specified
- SourceVRF when SourceVRF was overlayed. */
- OVERLAY(AlignStdOfRest)
- OVERLAY(AlignSpecOffset);
- OVERLAY(RefDec)
- OVERLAY(RefRA)
- OVERLAY(RestFreq)
- OVERLAY(SourceSys)
- OVERLAY(SourceVRF)
- OVERLAY(SourceVel)
- OVERLAY(StdOfRest)
- OVERLAY(SpecOrigin)
- }
-
-/* Free resources */
- templt = astAnnul( templt );
-
-/* Undefine macros local to this function. */
-#undef OVERLAY
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a SpecFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* void SetAttrib( AstObject *this, const char *setting, int *status )
-
-* Class Membership:
-* SpecFrame member function (extends the astSetAttrib method inherited from
-* the Mapping class).
-
-* Description:
-* This function assigns an attribute value for a SpecFrame, the attribute
-* and its value being specified by means of a string of the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in lower
-* case with no white space present. The value to the right of the "="
-* should be a suitable textual representation of the value to be assigned
-* and this will be interpreted according to the attribute's data type.
-* White space surrounding the value is only significant for string
-* attributes.
-
-* Parameters:
-* this
-* Pointer to the SpecFrame.
-* setting
-* Pointer to a null terminated string specifying the new attribute
-* value.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This protected method is intended to be invoked by the Object astSet
-* method and makes additional attributes accessible to it.
-*/
-
-/* Local Vaiables: */
- AstMapping *umap; /* Mapping between units */
- AstSpecFrame *this; /* Pointer to the SpecFrame structure */
- AstStdOfRestType sor; /* Standard of rest type code */
- AstSystemType sys; /* Spectral system type code */
- char *a; /* Pointer to next character */
- char *new_setting; /* Pointer value to new attribute setting */
- double dval; /* Double atribute value */
- double dtemp; /* Temporary double atribute value */
- int ival; /* Integer attribute value */
- int len; /* Length of setting string */
- int ulen; /* Used length of setting string */
- int namelen; /* Length of attribute name in setting */
- int nc; /* Number of characters read by astSscanf */
- int off; /* Offset of attribute value */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SpecFrame structure. */
- this = (AstSpecFrame *) this_object;
-
-/* Create an FK5 J2000 SkyFrame which will be used for formatting and
- unformatting sky positions, etc. */
- LOCK_MUTEX2
- if( !skyframe ) {
- astBeginPM;
- skyframe = astSkyFrame( "system=FK5,equinox=J2000", status );
- astEndPM;
- }
- UNLOCK_MUTEX2
-
-/* Obtain the length of the setting string. */
- len = strlen( setting );
-
-/* Obtain the used length of the setting string. */
- ulen = astChrLen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse the
- setting string and extract the attribute value (or an offset to it in the
- case of string values). In each case, use the value set in "nc" to check
- that the entire string was matched. Once a value has been obtained, use the
- appropriate method to set it. */
-
-/* First look for axis attributes defined by the Frame class. Since a
- SpecFrame has only 1 axis, we allow these attributes to be specified
- without a trailing "(axis)" string. */
- if ( !strncmp( setting, "direction=", 10 ) ||
- !strncmp( setting, "bottom=", 7 ) ||
- !strncmp( setting, "top=", 4 ) ||
- !strncmp( setting, "format=", 7 ) ||
- !strncmp( setting, "label=", 6 ) ||
- !strncmp( setting, "symbol=", 7 ) ||
- !strncmp( setting, "unit=", 5 ) ) {
-
-/* Create a new setting string from the original by appending the string
- "(1)" to the end of the attribute name and then use the parent SetAttrib
- method. */
- new_setting = astMalloc( len + 4 );
- if( new_setting ) {
- memcpy( new_setting, setting, len + 1 );
- a = strchr( new_setting, '=' );
- namelen = a - new_setting;
- memcpy( a, "(1)", 4 );
- a += 3;
- strcpy( a, setting + namelen );
- (*parent_setattrib)( this_object, new_setting, status );
- new_setting = astFree( new_setting );
- }
-
-/* AlignStdOfRest. */
-/* --------------- */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "alignstdofrest=%n%*s %n", &off, &nc ) )
- && ( nc >= len ) ) {
-
-/* Convert the string to a StdOfRest code before use. */
- sor = StdOfRestCode( setting + off, status );
- if ( sor != AST__BADSOR ) {
- astSetAlignStdOfRest( this, sor );
-
-/* Report an error if the string value wasn't recognised. */
- } else {
- astError( AST__ATTIN, "astSetAttrib(%s): Invalid standard of rest "
- "description \"%s\".", status, astGetClass( this ), setting+off );
- }
-
-/* GeoLat. */
-/* ------- */
-/* Retained for backward compatibility with older versions of AST in which
- SpecFrame had GeoLon/Lat attributes (now ObsLon/Lat are used instead). */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "geolat=%n%*s %n", &off, &nc ) )
- && ( nc >= 7 ) ) {
- new_setting = astStore( NULL, setting, len + 1 );
- new_setting[ 0 ] = 'o';
- new_setting[ 1 ] = 'b';
- new_setting[ 2 ] = 's';
- astSetAttrib( this, new_setting );
- new_setting = astFree( new_setting );
-
-/* GeoLon. */
-/* ------- */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "geolon=%n%*s %n", &off, &nc ) )
- && ( nc >= 7 ) ) {
- new_setting = astStore( NULL, setting, len + 1 );
- new_setting[ 0 ] = 'o';
- new_setting[ 1 ] = 'b';
- new_setting[ 2 ] = 's';
- astSetAttrib( this, new_setting );
- new_setting = astFree( new_setting );
-
-/* RefDec. */
-/* ------- */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "refdec=%n%*s %n", &off, &nc ) )
- && ( nc >= 7 ) ) {
-
-/* Convert the string to a radians value before use. */
- ival = astUnformat( skyframe, 1, setting + off, &dval );
- if ( ival == ulen - off ) {
- astSetRefDec( this, dval );
-
-/* Report an error if the string value wasn't recognised. */
- } else {
- astError( AST__ATTIN, "astSetAttrib(%s): Invalid reference "
- "declination \"%s\".", status, astGetClass( this ), setting + off );
- }
-
-/* RefRA. */
-/* ------ */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "refra=%n%*s %n", &off, &nc ) )
- && ( nc >= 6 ) ) {
-
-/* Convert the string to a radians value before use. */
- ival = astUnformat( skyframe, 0, setting + off, &dval );
- if ( ival == ulen - off ) {
- astSetRefRA( this, dval );
-
-/* Report an error if the string value wasn't recognised. */
- } else {
- astError( AST__ATTIN, "astSetAttrib(%s): Invalid reference right "
- "ascension \"%s\".", status, astGetClass( this ), setting + off );
- }
-
-/* AlignSpecOffset. */
-/* ---------------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "alignspecoffset= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetAlignSpecOffset( this, ival );
-
-/* RestFreq. */
-/* --------- */
-/* Without any units indication - assume GHz. Convert to Hz for storage. */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "restfreq= %lg %n", &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetRestFreq( this, dval*1.0E9 );
-
-/* With units indication. */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "restfreq= %lg %n%*s %n", &dval, &off, &nc ) )
- && ( nc >= len ) ) {
-
-/* Is there a Mapping from the supplied units to Hz? If so, use the
- Mapping to convert the supplied value to Hz. */
- if( ( umap = astUnitMapper( setting + off, "Hz", NULL, NULL ) ) ) {
- astTran1( umap, 1, &dval, 1, &dtemp );
- umap = astAnnul( umap );
-
-/* Otherwise, if there is a Mapping from the supplied units to metre,
- assume the supplied unit is a vacuum wavelength. */
- } else if( ( umap = astUnitMapper( setting + off, "m", NULL, NULL ) ) ) {
-
-/* Convert the supplied wavelength to metres. */
- astTran1( umap, 1, &dval, 1, &dtemp );
- umap = astAnnul( umap );
-
-/* Convert the wavelength (m) to frequency (Hz). */
- if( dtemp != AST__BAD && dtemp != 0.0 ) {
- dtemp = AST__C/dtemp;
- } else if( astOK ) {
- astError( AST__ATTIN, "astSetAttrib(%s): Invalid rest wavelength "
- "\"%g %s\" supplied.", status, astGetClass( this ), dval, setting + off );
- }
-
-/* Otherwise, if there is a Mapping from the supplied units to Joule,
- assume the supplied unit is an energy. */
- } else if( ( umap = astUnitMapper( setting + off, "J", NULL, NULL ) ) ) {
-
-/* Convert the supplied energy to Joules. */
- astTran1( umap, 1, &dval, 1, &dtemp );
- umap = astAnnul( umap );
-
-/* Convert the energy (J) to frequency (Hz). */
- if( dtemp != AST__BAD ) {
- dtemp *= 1.0/AST__H;
- } else if( astOK ) {
- astError( AST__ATTIN, "astSetAttrib(%s): Invalid rest energy "
- "\"%g %s\" supplied.", status, astGetClass( this ), dval, setting + off );
- }
-
-/* Otherwise report an error. */
- } else if( astOK ) {
- astError( AST__ATTIN, "astSetAttrib(%s): Rest frequency given in an "
- "unsupported system of units \"%g %s\".", status,
- astGetClass( this ), dval, setting + off );
- }
-
-/* Set the rest frequency. */
- astSetRestFreq( this, dtemp );
-
-/* SourceVel. */
-/* ---------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "sourcevel= %lg %n", &dval, &nc ) )
- && ( nc >= len ) ) {
-
-/* Convert from km/s to m/s if the SourceVel value is a velocity. */
- if( astGetSourceSys( this ) == AST__VREL ||
- astGetSourceSys( this ) == AST__VRADIO ||
- astGetSourceSys( this ) == AST__VOPTICAL ) dval *= 1.0E3;
-
-/* Store the value */
- astSetSourceVel( this, dval );
-
-/* SourceVRF */
-/* --------- */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "sourcevrf=%n%*s %n", &off, &nc ) )
- && ( nc >= len ) ) {
-
-/* Convert the string to a StdOfRest code before use. */
- sor = StdOfRestCode( setting + off, status );
- if ( sor != AST__BADSOR ) {
- astSetSourceVRF( this, sor );
-
-/* Report an error if the string value wasn't recognised. */
- } else {
- astError( AST__ATTIN, "astSetAttrib(%s): Invalid standard of rest "
- "description \"%s\".", status, astGetClass( this ), setting+off );
- }
-
-/* SourceSys */
-/* --------- */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "sourcesys=%n%*s %n", &off, &nc ) )
- && ( nc >= len ) ) {
-
-/* Convert the string to a System code before use. */
- sys = SystemCode( (AstFrame *) this, setting + off, status );
- astSetSourceSys( this, sys );
-
-/* StdOfRest. */
-/* ---------- */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "stdofrest=%n%*s %n", &off, &nc ) )
- && ( nc >= len ) ) {
-
-/* Convert the string to a StdOfRest code before use. */
- sor = StdOfRestCode( setting + off, status );
- if ( sor != AST__BADSOR ) {
- astSetStdOfRest( this, sor );
-
-/* Report an error if the string value wasn't recognised. */
- } else {
- astError( AST__ATTIN, "astSetAttrib(%s): Invalid standard of rest "
- "description \"%s\".", status, astGetClass( this ), setting + off );
- }
-
-/* SpecOrigin */
-/* ---------- */
-
-/* Floating-point without any units indication - assume the current Unit
- value. Convert from current units to default units for current system. */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "specorigin= %lg %n", &dval, &nc ) )
- && ( nc >= len ) ) {
-
- astSetSpecOrigin( this, ToUnits( this, astGetUnit( this, 0 ), dval,
- "astSetSpecOrigin", status ) );
-
-/* Floating-point with units. Convert the supplied value to the default units
- for the SpecFrame's System. */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "specorigin= %lg %n%*s %n", &dval, &off, &nc ) )
- && ( nc >= len ) ) {
- astSetSpecOrigin( this, ToUnits( this, setting + off, dval, "astSetSpecOrigin", status ) );
-
-/* Pass any unrecognised setting to the parent method for further
- interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-}
-
-static void SetRefPos( AstSpecFrame *this, AstSkyFrame *frm, double lon,
- double lat, int *status ){
-/*
-*++
-* Name:
-c astSetRefPos
-f AST_SETREFPOS
-
-* Purpose:
-* Set the reference position in a specified celestial coordinate system.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "specframe.h"
-c void astSetRefPos( AstSpecFrame *this, AstSkyFrame *frm, double lon,
-c double lat )
-f CALL AST_SETREFPOS( THIS, FRM, LON, LAT, STATUS )
-
-* Class Membership:
-* Frame method.
-
-* Description:
-c This function
-f This routine
-* sets the reference position (see attributes RefRA and RefDec) using
-* axis values (in radians) supplied within the celestial coordinate
-* system represented by a supplied SkyFrame.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the SpecFrame.
-c frm
-f FRM = INTEGER (Given)
-* Pointer to the SkyFrame which defines the celestial coordinate
-* system in which the longitude and latitude values are supplied.
-c If NULL
-f If AST__NULL
-* is supplied, then the supplied longitude and latitude values are
-* assumed to be FK5 J2000 RA and Dec values.
-c lon
-f LON = DOUBLE PRECISION (Given)
-* The longitude of the reference point, in the coordinate system
-* represented by the supplied SkyFrame (radians).
-c lat
-f LAT = DOUBLE PRECISION (Given)
-* The latitude of the reference point, in the coordinate system
-* represented by the supplied SkyFrame (radians).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-*--
-*/
-
-/* Local Variables: */
- AstFrameSet *fs; /* Conversion FrameSet */
- AstFrame *fb; /* Base Frame */
- AstFrame *fc; /* Current Frame */
- double xin[ 1 ]; /* Axis 1 values */
- double yin[ 1 ]; /* Axis 2 values */
- double xout[ 1 ]; /* Axis 1 values */
- double yout[ 1 ]; /* Axis 2 values */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* If no SkyFrame was supplied, just store the supplied RefRA and RefDec
- values. */
- if( !frm ) {
- astSetRefRA( this, lon );
- astSetRefDec( this, lat );
-
-/* Otherwise, convert the supplied values from the requested system. */
- } else {
-
-/* Create an FK5 J2000 SkyFrame which will be used for formatting and
- unformatting sky positions, etc. */
- LOCK_MUTEX2
- if( !skyframe ) {
- astBeginPM;
- skyframe = astSkyFrame( "system=FK5,equinox=J2000", status );
- astEndPM;
- }
- UNLOCK_MUTEX2
-
-/* Find the Mapping from the supplied SkyFrame, to the SkyFrame which
- describes the internal format in which the RefRA and RefDec attribute
- values are stored. */
- fs = astFindFrame( frm, skyframe, "" );
-
-/* If alignment was possible, use the Mapping to transform the supplied
- axis values, checking to see if the axes of the supplied SkyFrame have
- been permuted. */
- if( fs ) {
-
-/* Find the longitude axis in the Base Frame, and store the supplied
- longitude and latitude values. */
- fb = astGetFrame( fs, AST__BASE );
- if( astGetLonAxis( fb ) == 0 ) {
- xin[ 0 ] = lon;
- yin[ 0 ] = lat;
- } else {
- xin[ 0 ] = lat;
- yin[ 0 ] = lon;
- }
- astTran2( fs, 1, xin, yin, 1, xout, yout );
-
-/* Store the corresponding RefRA and RefDec values. */
- fc = astGetFrame( fs, AST__CURRENT );
- if( astGetLonAxis( fc ) == 0 ) {
- astSetRefRA( this, xout[ 0 ] );
- astSetRefDec( this, yout[ 0 ] );
- } else {
- astSetRefRA( this, yout[ 0 ] );
- astSetRefDec( this, xout[ 0 ] );
- }
-
-/* Annul object references. */
- fc = astAnnul( fc );
- fb = astAnnul( fb );
- fs = astAnnul( fs );
- }
- }
-}
-
-static void SetStdOfRest( AstSpecFrame *this, AstStdOfRestType value, int *status ) {
-/*
-*+
-* Name:
-* astSetStdOfRest
-
-* Purpose:
-* Set the StdOfRest attribute for a SpecFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "specframe.h"
-* void astSetStdOfRest( AstSpecFrame *this, AstStdOfRestType value )
-
-* Class Membership:
-* SpecFrame virtual function
-
-* Description:
-* This function set a new value for the StdOfRest attribute for a
-* SpecFrame.
-
-* Parameters:
-* this
-* Pointer to the SpecFrame.
-* value
-* The new value.
-
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-
-/* Validate the StdOfRest value being set and report an error if necessary. */
- if( value < FIRST_SOR || value > LAST_SOR ) {
- astError( AST__ATTIN, "%s(%s): Bad value (%d) given for StdOfRest attribute.", status,
- "astSetStdOfRest", astGetClass( this ), (int) value );
-
-/* Otherwise set the new StdOfRest */
- } else {
-
-/* Modify the SpecOrigin value stored in the SpecFrame structure to refer
- to the new rest frame. */
- OriginStdOfRest( this, value, "astSetStdOfRest", status );
-
-/* Store the new value for the rest frame in the SpecFrame structure. */
- this->stdofrest = value;
-
- }
-}
-
-static void SetSystem( AstFrame *this_frame, AstSystemType newsys, int *status ) {
-/*
-* Name:
-* SetSystem
-
-* Purpose:
-* Set the System attribute for a SpecFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* void SetSystem( AstFrame *this_frame, AstSystemType newsys, int *status )
-
-* Class Membership:
-* SpecFrame member function (over-rides the astSetSystem protected
-* method inherited from the Frame class).
-
-* Description:
-* This function sets the System attribute for a SpecFrame.
-
-* Parameters:
-* this
-* Pointer to the SpecFrame.
-* newsys
-* The new System value to be stored.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstSpecFrame *this; /* Pointer to SpecFrame structure */
- AstSystemType oldsys; /* Original System value */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SpecFrame structure. */
- this = (AstSpecFrame *) this_frame;
-
-/* Save the original System value */
- oldsys = astGetSystem( this_frame );
-
-/* Use the parent SetSystem method to store the new System value. */
- (*parent_setsystem)( this_frame, newsys, status );
-
-/* If the system has changed... */
- if( oldsys != newsys ) {
-
-/* Changing the System value will in general require the Units to change
- as well. If the user has previously specified the units to be used with
- the new system, then re-instate them (they are stored in the "usedunits"
- array in the SpecFrame structure). Otherwise, clear the units so that
- the default units will eb used with the new System. */
- if( (int) newsys < this->nuunits && this->usedunits &&
- this->usedunits[ (int) newsys ] ) {
- astSetUnit( this, 0, this->usedunits[ (int) newsys ] );
- } else {
- astClearUnit( this, 0 );
- }
-
-/* Modify the stored SpecOrigin. */
- OriginSystem( this, oldsys, "astSetSystem", status );
-
-/* Also, clear all attributes which have system-specific defaults. */
- astClearLabel( this_frame, 0 );
- astClearSymbol( this_frame, 0 );
- astClearTitle( this_frame );
- }
-}
-
-static void SetUnit( AstFrame *this_frame, int axis, const char *value, int *status ) {
-/*
-* Name:
-* SetUnit
-
-* Purpose:
-* Set a pointer to the Unit string for a SpecFrame's axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* void SetUnit( AstFrame *this_frame, int axis, const char *value )
-
-* Class Membership:
-* SpecFrame member function (over-rides the astSetUnit method inherited
-* from the Frame class).
-
-* Description:
-* This function stores a pointer to the Unit string for a specified axis
-* of a SpecFrame. It also stores the string in the "usedunits" array
-* in the SpecFrame structure, in the element associated with the
-* current System.
-
-* Parameters:
-* this
-* Pointer to the SpecFrame.
-* axis
-* The number of the axis (zero-based) for which information is required.
-* unit
-* The new string to store.
-*/
-
-/* Local Variables: */
- AstSpecFrame *this; /* Pointer to the SpecFrame structure */
- int i; /* Loop counter */
- int system; /* The SpecFrame's System value */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SpecFrame structure. */
- this = (AstSpecFrame *) this_frame;
-
-/* Validate the axis index. */
- astValidateAxis( this, axis, "astSetUnit" );
-
-/* Store the supplied value as the UsedUnit for the current System. First
- ensure the array is big enough. Free any previous value stored for the
- current system. */
- system = (int) astGetSystem( this );
- if( system >= this->nuunits ) {
- this->usedunits = astGrow( this->usedunits, system + 1,
- sizeof(char *) );
- if( astOK ) {
- for( i = this->nuunits; i < system + 1; i++ ) this->usedunits[ i ] = NULL;
- this->nuunits = system + 1;
- }
- }
-
-/* Now store a copy of the value, if it is different to the stored string. */
- if( astOK && ( !this->usedunits[ system ] ||
- strcmp( this->usedunits[ system ], value ) ) ) {
- this->usedunits[ system ] = astStore( this->usedunits[ system ],
- value, strlen( value ) + 1 );
- }
-
-/* Now use the parent SetUnit method to store the value in the Axis
- structure */
- (*parent_setunit)( this_frame, axis, value, status );
-
-}
-
-static int SorConvert( AstSpecFrame *this, AstSpecFrame *that,
- AstSpecMap *specmap, int *status ) {
-/*
-* Name:
-* SorConvert
-
-* Purpose:
-* Add a conversion to a SpecMap which transforms between two
-* standards of rest.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* int SorConvert( AstSpecFrame *this, AstSpecFrame *that,
-* AstSpecMap *specmap, int *status )
-
-* Class Membership:
-* SpecFrame member function.
-
-* Description:
-* This function adds a conversion to a SpecMap which transforms
-* frequencies from the standard of rest specified by "this" to
-* the standard of rest specified by "that". Note the conversion is
-* always between frequency in the two rest frames no matter what the
-* System attributes of the two SpecFrames may be (which are ignored).
-
-* Parameters:
-* this
-* The SpecFrame which defines the input rest frame.
-* that
-* The SpecFrame which defines the output rest frame.
-* specmap
-* The SpecMap to which the conversion is to be added.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero is returned if the conversion could not be performed. One is
-* returned otherwise.
-
-*/
-
-/* Local Constants: */
-#define MAX_ARGS 7 /* Max arguments for an SpecMap conversion */
-
-/* Local Variables: */
- AstStdOfRestType from; /* Input standard of rest */
- AstStdOfRestType to; /* Output standard of rest */
- const char *vmess; /* Text for use in error messages */
- double args[ MAX_ARGS ]; /* Conversion argument array */
- double dec; /* DEC of source (radians, FK5 J2000) */
- double epoch; /* Epoch of observation (MJD) */
- double alt; /* Observers geodetic altitude (radians) */
- double lat; /* Observers geodetic latitude (radians) */
- double lon; /* Observers geodetic longitude (radians) */
- double ra; /* RA of source (radians, FK5 J2000) */
- int result; /* Returned value */
-
-/* Initialise */
- result = 1;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* No conversion is required if the rest frames are equal. */
- if( !EqualSor( this, that, status ) ) {
-
-/* Define local macros as shorthand for adding spectral coordinate
- conversions to the SpecMap. Each macro simply stores details of
- the additional arguments in the "args" array and then calls
- astSpecAdd. The macros differ in the number of additional argument
- values. */
-#define TRANSFORM_2(cvt,arg0,arg1) \
- args[ 0 ] = arg0; \
- args[ 1 ] = arg1; \
- astSpecAdd( specmap, cvt, args );
-
-#define TRANSFORM_3(cvt,arg0,arg1,arg2) \
- args[ 0 ] = arg0; \
- args[ 1 ] = arg1; \
- args[ 2 ] = arg2; \
- astSpecAdd( specmap, cvt, args );
-
-#define TRANSFORM_6(cvt,arg0,arg1,arg2,arg3,arg4,arg5) \
- args[ 0 ] = arg0; \
- args[ 1 ] = arg1; \
- args[ 2 ] = arg2; \
- args[ 3 ] = arg3; \
- args[ 4 ] = arg4; \
- args[ 5 ] = arg5; \
- astSpecAdd( specmap, cvt, args );
-
-/* A string for use in error messages. */
- vmess = "convert between different standards of rest";
-
-/* Get the required values from "this". */
- from = astGetStdOfRest( this );
- ra = astGetRefRA( this );
- dec = astGetRefDec( this );
- lon = astGetObsLon( this );
- lat = astGetObsLat( this );
- alt = astGetObsAlt( this );
- epoch = astGetEpoch( this );
-
-/* Verify that the reference RA and DEC can be used (they are needed by all
- the conversions used below). */
- VerifyAttrs( this, vmess, "RefRA RefDec", "astMatch", status );
-
-/* Convert from the "this" rest frame to heliographic. */
- if( from == AST__TPSOR ) {
- VerifyAttrs( this, vmess, "ObsLon ObsLat ObsAlt Epoch", "astMatch", status );
- TRANSFORM_6( "TPF2HL", lon, lat, alt, epoch, ra, dec )
-
- } else if( from == AST__GESOR ) {
- VerifyAttrs( this, vmess, "Epoch", "astMatch", status );
- TRANSFORM_3( "GEF2HL", epoch, ra, dec )
-
- } else if( from == AST__BYSOR ) {
- VerifyAttrs( this, vmess, "Epoch", "astMatch", status );
- TRANSFORM_3( "BYF2HL", epoch, ra, dec )
-
- } else if( from == AST__LKSOR ) {
- TRANSFORM_2( "LKF2HL", ra, dec )
-
- } else if( from == AST__LDSOR ) {
- TRANSFORM_2( "LDF2HL", ra, dec )
-
- } else if( from == AST__LGSOR ) {
- TRANSFORM_2( "LGF2HL", ra, dec )
-
- } else if( from == AST__GLSOR ) {
- TRANSFORM_2( "GLF2HL", ra, dec )
-
- } else if( from == AST__SCSOR ) {
- TRANSFORM_3( "USF2HL", ConvertSourceVel( this, AST__HLSOR, AST__VREL, status ),
- ra, dec )
- }
-
-/* Now go from heliocentric to the "to" frame. */
- to = astGetStdOfRest( that );
- ra = astGetRefRA( that );
- dec = astGetRefDec( that );
- lon = astGetObsLon( that );
- lat = astGetObsLat( that );
- alt = astGetObsAlt( that );
- epoch = astGetEpoch( that );
- VerifyAttrs( that, vmess, "RefRA RefDec", "astMatch", status );
-
- if( to == AST__TPSOR ) {
- VerifyAttrs( that, vmess, "ObsLon ObsLat ObsAlt Epoch", "astMatch", status );
- TRANSFORM_6( "HLF2TP", lon, lat, alt, epoch, ra, dec )
-
- } else if( to == AST__GESOR ) {
- VerifyAttrs( that, vmess, "Epoch", "astMatch", status );
- TRANSFORM_3( "HLF2GE", epoch, ra, dec )
-
- } else if( to == AST__BYSOR ) {
- VerifyAttrs( that, vmess, "Epoch", "astMatch", status );
- TRANSFORM_3( "HLF2BY", epoch, ra, dec )
-
- } else if( to == AST__LKSOR ) {
- TRANSFORM_2( "HLF2LK", ra, dec )
-
- } else if( to == AST__LDSOR ) {
- TRANSFORM_2( "HLF2LD", ra, dec )
-
- } else if( to == AST__LGSOR ) {
- TRANSFORM_2( "HLF2LG", ra, dec )
-
- } else if( to == AST__GLSOR ) {
- TRANSFORM_2( "HLF2GL", ra, dec )
-
- } else if( to == AST__SCSOR ) {
- TRANSFORM_3( "HLF2US", ConvertSourceVel( that, AST__HLSOR, AST__VREL, status ),
- ra, dec )
- }
- }
-
-/* Return the result. */
- return result;
-
-/* Undefine macros local to this function. */
-#undef MAX_ARGS
-#undef TRANSFORM_2
-#undef TRANSFORM_3
-#undef TRANSFORM_6
-}
-
-static const char *SpecMapUnit( AstSystemType system, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* SpecMapUnit
-
-* Purpose:
-* Return the default units for a spectral coordinate system type used
-* by the SpecMap class.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* const char *SpecMapUnit( AstSystemType system, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* SpecFrame member function.
-
-* Description:
-* This function returns a textual representation of the
-* units used by the SpecMap class for the specified spectral
-* coordinate system. In general, the SpecMap class uses SI units
-* (m/s, Hz, m, etc), but this class (SpecFrame) has default units
-* more appropriate to astronomers (km/s, GHz, Angstroms, etc).
-
-* Parameters:
-* system
-* The spectral coordinate system.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A string describing the default units. This string follows the
-* units syntax described in FITS WCS paper I "Representations of world
-* coordinates in FITS" (Greisen & Calabretta).
-
-* Notes:
-* - A NULL pointer is returned if this function is invoked with
-* the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- const char *result; /* Value to return */
-
-/* Initialize */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get an identifier for the default units. */
- if( system == AST__FREQ ) {
- result = "Hz";
- } else if( system == AST__ENERGY ) {
- result = "J";
- } else if( system == AST__WAVENUM ) {
- result = "1/m";
- } else if( system == AST__WAVELEN ) {
- result = "m";
- } else if( system == AST__AIRWAVE ) {
- result = "m";
- } else if( system == AST__VRADIO ) {
- result = "m/s";
- } else if( system == AST__VOPTICAL ) {
- result = "m/s";
- } else if( system == AST__REDSHIFT ) {
- result = "";
- } else if( system == AST__BETA ) {
- result = "";
- } else if( system == AST__VREL ) {
- result = "m/s";
-
-/* Report an error if the coordinate system was not recognised. */
- } else {
- astError( AST__SCSIN, "%s(%s): Corrupt %s contains illegal System "
- "identification code (%d).", status, method, class, class,
- (int) system );
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstStdOfRestType StdOfRestCode( const char *sor, int *status ) {
-/*
-* Name:
-* StdOfRestCode
-
-* Purpose:
-* Convert a string into a standard of rest type code.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* AstStdOfRestType StdOfRestCode( const char *sor )
-
-* Class Membership:
-* SpecFrame member function.
-
-* Description:
-* This function converts a string used for the external description of
-* a standard of rest into a SpecFrame standard of rest type code
-* (StdOfRest attribute value). It is the inverse of the
-* StdOfRestString function.
-
-* Parameters:
-* sor
-* Pointer to a constant null-terminated string containing the
-* external description of the standard of rest.
-
-* Returned Value:
-* The StdOfRest type code.
-
-* Notes:
-* - A value of AST__BADSOR is returned if the standard of rest
-* description was not recognised. This does not produce an error.
-* - A value of AST__BADSOR is also returned if this function
-* is invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- AstStdOfRestType result; /* Result value to return */
-
-/* Initialise. */
- result = AST__BADSOR;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Match the "sor" string against each possibility and assign the
- result. */
- if ( astChrMatch( "TOPO", sor ) || astChrMatch( "TOPOCENT", sor ) || astChrMatch( "TOPOCENTRIC", sor ) ) {
- result = AST__TPSOR;
-
- } else if ( astChrMatch( "GEO", sor ) || astChrMatch( "GEOCENTR", sor ) || astChrMatch( "GEOCENTRIC", sor ) ) {
- result = AST__GESOR;
-
- } else if ( astChrMatch( "BARY", sor ) || astChrMatch( "BARYCENT", sor ) || astChrMatch( "BARYCENTRIC", sor ) ) {
- result = AST__BYSOR;
-
- } else if ( astChrMatch( "HELIO", sor ) || astChrMatch( "HELIOCEN", sor ) || astChrMatch( "HELIOCENTRIC", sor ) ) {
- result = AST__HLSOR;
-
- } else if ( astChrMatch( "LSRK", sor ) || astChrMatch( "LSR", sor ) ) {
- result = AST__LKSOR;
-
- } else if ( astChrMatch( "LSRD", sor ) ) {
- result = AST__LDSOR;
-
- } else if ( astChrMatch( "GAL", sor ) || astChrMatch( "GALACTOC", sor ) || astChrMatch( "GALACTIC", sor ) ) {
- result = AST__GLSOR;
-
- } else if ( astChrMatch( "LG", sor ) || astChrMatch( "LOCALGRP", sor ) ||
- astChrMatch( "LOCAL_GROUP", sor ) || astChrMatch( "LOCAL-GROUP", sor ) ) {
- result = AST__LGSOR;
-
- } else if ( astChrMatch( "SOURCE", sor ) || astChrMatch( "SRC", sor ) ) {
- result = AST__SCSOR;
-
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *StdOfRestString( AstStdOfRestType sor, int *status ) {
-/*
-* Name:
-* StdOfRestString
-
-* Purpose:
-* Convert a standard of rest type code into a string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* const char *StdOfRestString( AstStdOfRestType sor, int *status )
-
-* Class Membership:
-* SpecFrame member function.
-
-* Description:
-* This function converts a SpecFrame standard of rest type code
-* (StdOfRest attribute value) into a string suitable for use as an
-* external representation of the standard of rest type.
-
-* Parameters:
-* sor
-* The standard of rest type code.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a constant null-terminated string containing the
-* textual equivalent of the type code supplied.
-
-* Notes:
-* - A NULL pointer value is returned if the standard of rest
-* code was not recognised. This does not produce an error.
-* - A NULL pointer value is also returned if this function is
-* invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- const char *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Match the "sor" value against each possibility and convert to a
- string pointer. (Where possible, return the same string as would be
- used in the FITS WCS representation of the standard of rest). */
- switch ( sor ) {
-
- case AST__TPSOR:
- result = "Topocentric";
- break;
-
- case AST__GESOR:
- result = "Geocentric";
- break;
-
- case AST__BYSOR:
- result = "Barycentric";
- break;
-
- case AST__HLSOR:
- result = "Heliocentric";
- break;
-
- case AST__LDSOR:
- result = "LSRD";
- break;
-
- case AST__LKSOR:
- result = "LSRK";
- break;
-
- case AST__LGSOR:
- result = "Local_group";
- break;
-
- case AST__GLSOR:
- result = "Galactic";
- break;
-
- case AST__SCSOR:
- result = "Source";
- break;
-
- }
-
-/* Return the result pointer. */
- return result;
-}
-
-static int SubFrame( AstFrame *target_frame, AstFrame *template,
- int result_naxes, const int *target_axes,
- const int *template_axes, AstMapping **map,
- AstFrame **result, int *status ) {
-/*
-* Name:
-* SubFrame
-
-* Purpose:
-* Select axes from a SpecFrame and convert to the new coordinate
-* system.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* int SubFrame( AstFrame *target, AstFrame *template,
-* int result_naxes, const int *target_axes,
-* const int *template_axes, AstMapping **map,
-* AstFrame **result, int *status )
-
-* Class Membership:
-* SpecFrame member function (over-rides the protected astSubFrame
-* method inherited from the Frame class).
-
-* Description:
-* This function selects a requested sub-set (or super-set) of the axes
-* from a "target" SpecFrame and creates a new Frame with copies of
-* the selected axes assembled in the requested order. It then
-* optionally overlays the attributes of a "template" Frame on to the
-* result. It returns both the resulting Frame and a Mapping that
-* describes how to convert between the coordinate systems described by
-* the target and result Frames. If necessary, this Mapping takes
-* account of any differences in the Frames' attributes due to the
-* influence of the template.
-
-* Parameters:
-* target
-* Pointer to the target SpecFrame, from which axes are to be
-* selected.
-* template
-* Pointer to the template Frame, from which new attributes for the
-* result Frame are to be obtained. Optionally, this may be NULL, in
-* which case no overlaying of template attributes will be performed.
-* result_naxes
-* Number of axes to be selected from the target Frame. This number may
-* be greater than or less than the number of axes in this Frame (or
-* equal).
-* target_axes
-* Pointer to an array of int with result_naxes elements, giving a list
-* of the (zero-based) axis indices of the axes to be selected from the
-* target SpecFrame. The order in which these are given determines
-* the order in which the axes appear in the result Frame. If any of the
-* values in this array is set to -1, the corresponding result axis will
-* not be derived from the target Frame, but will be assigned default
-* attributes instead.
-* template_axes
-* Pointer to an array of int with result_naxes elements. This should
-* contain a list of the template axes (given as zero-based axis indices)
-* with which the axes of the result Frame are to be associated. This
-* array determines which axes are used when overlaying axis-dependent
-* attributes of the template on to the result. If any element of this
-* array is set to -1, the corresponding result axis will not receive any
-* template attributes.
-*
-* If the template argument is given as NULL, this array is not used and
-* a NULL pointer may also be supplied here.
-* map
-* Address of a location to receive a pointer to the returned Mapping.
-* The forward transformation of this Mapping will describe how to
-* convert coordinates from the coordinate system described by the target
-* SpecFrame to that described by the result Frame. The inverse
-* transformation will convert in the opposite direction.
-* result
-* Address of a location to receive a pointer to the result Frame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if coordinate conversion is possible
-* between the target and the result Frame. Otherwise zero is returned and
-* *map and *result are returned as NULL (but this will not in itself
-* result in an error condition). In general, coordinate conversion should
-* always be possible if no template Frame is supplied but may not always
-* be possible otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-
-* Implementation Notes:
-* - This implementation addresses the selection of axes from a
-* SpecFrame object. This results in another object of the same class
-* only if the single SpecFrame axis is selected exactly once.
-* Otherwise, the result is a Frame class object which inherits the
-* SpecFrame's axis information (if appropriate) but none of the other
-* properties of a SpecFrame.
-* - In the event that a SpecFrame results, the returned Mapping will
-* take proper account of the relationship between the target and result
-* coordinate systems.
-* - In the event that a Frame class object results, the returned Mapping
-* will only represent a selection/permutation of axes.
-
-* Implementation Deficiencies:
-* - Any axis selection is currently permitted. Probably this should be
-* restricted so that each axis can only be selected once. The
-* astValidateAxisSelection method will do this but currently there are bugs
-* in the CmpFrame class that cause axis selections which will not pass this
-* test. Install the validation when these are fixed.
-*/
-
-/* Local Variables: */
- AstSpecFrame *target; /* Pointer to the SpecFrame structure */
- AstSpecFrame *temp; /* Pointer to copy of target SpecFrame */
- AstSpecFrame *align_frm; /* Frame in which to align the SpecFrames */
- int match; /* Coordinate conversion is possible? */
- int report; /* Report errors if SpecFrames cannot be aligned? */
-
-/* Initialise the returned values. */
- *map = NULL;
- *result = NULL;
- match = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return match;
-
-/* Obtain a pointer to the target SpecFrame structure. */
- target = (AstSpecFrame *) target_frame;
-
-/* Result is a SpecFrame. */
-/* -------------------------- */
-/* Check if the result Frame is to have one axis obtained by selecting
- the single target SpecFrame axis. If so, the result will also be
- a SpecFrame. */
- if ( ( result_naxes == 1 ) && ( target_axes[ 0 ] == 0 ) ) {
-
-/* Form the result from a copy of the target. */
- *result = astCopy( target );
-
-/* Initialise a flag to indicate that MakeSpecMapping should not report
- errors if no Mapping can be created. */
- report = 0;
-
-/* If required, overlay the template attributes on to the result SpecFrame.
- Also get the system and standard of rest in which to align the two
- SpecFrames. These are the values from the template (if there is a
- template). */
- if ( template ) {
- astOverlay( template, template_axes, *result );
- if( astIsASpecFrame( template ) ) {
- align_frm = astCopy( template );
-
-/* Since we now know that both the template and target are SpecFrames, it
- should usually be possible to convert betwen them. If conversion is
- *not* possible (fpr instance if no rest frequency is availalbe, etc)
- then the user will probably be interested in knowing the reason why
- conversion is not possible. Therefore, indicate that MakeSpecMapping
- should report errors if no Mapping can be created. */
- report = 1;
-
- } else {
- align_frm = astCopy( target );
- }
-
-/* If no template was supplied, align in the System and StdOfRest of the
- target. */
- } else {
- VerifyAttrs( target, "convert between different spectral systems",
- "StdOfRest", "astMatch", status );
- align_frm = astCopy( target );
- }
-
-/* The MakeSpecMapping function uses the System and StdOfRest attributes to
- define the alignment frame. But the AlignSystem and AlignStdOfRest
- attributes should be used for this purpose. Therefore, copy the values
- of the AlignSystem and AlignStdOfRest attributes to the System and
- StdOfRest attribute. */
- astSetSystem( align_frm, astGetAlignSystem( align_frm ) );
- astSetStdOfRest( align_frm, astGetAlignStdOfRest( align_frm ) );
-
-/* Generate a Mapping that takes account of changes in the sky coordinate
- system (equinox, epoch, etc.) between the target SpecFrame and the result
- SpecFrame. If this Mapping can be generated, set "match" to indicate that
- coordinate conversion is possible. If the template is a specframe,
- report errors if a match is not possible. */
- match = ( MakeSpecMapping( target, (AstSpecFrame *) *result,
- align_frm, report, map, status ) != 0 );
-
-/* Free resources. */
- align_frm = astAnnul( align_frm );
-
-/* Result is not a SpecFrame. */
-/* ------------------------------ */
-/* In this case, we select axes as if the target were from the Frame
- class. However, since the resulting data will then be separated
- from their enclosing SpecFrame, default attribute values may differ
- if the methods for obtaining them were over-ridden by the SpecFrame
- class. To overcome this, we ensure that these values are explicitly
- set for the result Frame (rather than relying on their defaults). */
- } else {
-
-/* Make a temporary copy of the target SpecFrame. We will explicitly
- set the attribute values in this copy so as not to modify the original. */
- temp = astCopy( target );
-
-/* Define a macro to test if an attribute is set. If not, set it
- explicitly to its default value. */
-#define SET(attribute) \
- if ( !astTest##attribute( temp ) ) { \
- astSet##attribute( temp, astGet##attribute( temp ) ); \
- }
-
-/* Set attribute values which apply to the Frame as a whole and which
- we want to retain, but whose defaults are over-ridden by the
- SpecFrame class. */
- SET(Domain)
- SET(Title)
-
-/* Define a macro to test if an attribute is set for axis zero (the only
- axis of a SpecFrame). If not, set it explicitly to its default value. */
-#define SET_AXIS(attribute) \
- if ( !astTest##attribute( temp, 0 ) ) { \
- astSet##attribute( temp, 0, \
- astGet##attribute( temp, 0 ) ); \
- }
-
-/* Use this macro to set explicit values for all the axis attributes
- for which the SpecFrame class over-rides the default value. */
- SET_AXIS(Label)
- SET_AXIS(Symbol)
- SET_AXIS(Unit)
-
-/* Clear attributes which have an extended range of values allowed by
- this class. */
- astClearSystem( temp );
- astClearAlignSystem( temp );
-
-/* Invoke the astSubFrame method inherited from the Frame class to
- produce the result Frame by selecting the required set of axes and
- overlaying the template Frame's attributes. */
- match = (*parent_subframe)( (AstFrame *) temp, template,
- result_naxes, target_axes, template_axes,
- map, result, status );
-
-/* Delete the temporary copy of the target SpecFrame. */
- temp = astDelete( temp );
- }
-
-/* If an error occurred or no match was found, annul the returned
- objects and reset the returned result. */
- if ( !astOK || !match ) {
- if( *map ) *map = astAnnul( *map );
- if( *result ) *result = astAnnul( *result );
- match = 0;
- }
-
-/* Return the result. */
- return match;
-
-/* Undefine macros local to this function. */
-#undef SET
-#undef SET_AXIS
-}
-
-static AstSystemType SystemCode( AstFrame *this, const char *system, int *status ) {
-/*
-* Name:
-* SystemCode
-
-* Purpose:
-* Convert a string into a coordinate system type code.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* AstSystemType SystemCode( AstFrame *this, const char *system, int *status )
-
-* Class Membership:
-* SpecFrame member function (over-rides the astSystemCode method
-* inherited from the Frame class).
-
-* Description:
-* This function converts a string used for the external
-* description of a coordinate system into a SpecFrame
-* coordinate system type code (System attribute value). It is the
-* inverse of the astSystemString function.
-
-* Parameters:
-* this
-* The Frame.
-* system
-* Pointer to a constant null-terminated string containing the
-* external description of the sky coordinate system.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The System type code.
-
-* Notes:
-* - A value of AST__BADSYSTEM is returned if the sky coordinate
-* system description was not recognised. This does not produce an
-* error.
-* - A value of AST__BADSYSTEM is also returned if this function
-* is invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- AstSystemType result; /* Result value to return */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Match the "system" string against each possibility and assign the
- result. */
- if ( astChrMatch( "FREQ", system ) ) {
- result = AST__FREQ;
-
- } else if ( astChrMatch( "ENER", system ) || astChrMatch( "ENERGY", system ) ) {
- result = AST__ENERGY;
-
- } else if ( astChrMatch( "WAVN", system ) || astChrMatch( "WAVENUM", system ) ) {
- result = AST__WAVENUM;
-
- } else if ( astChrMatch( "WAVE", system ) || astChrMatch( "WAVELEN", system ) ) {
- result = AST__WAVELEN;
-
- } else if ( astChrMatch( "AWAV", system ) || astChrMatch( "AIRWAVE", system ) ) {
- result = AST__AIRWAVE;
-
- } else if ( astChrMatch( "VRAD", system ) || astChrMatch( "VRADIO", system ) ) {
- result = AST__VRADIO;
-
- } else if ( astChrMatch( "VOPT", system ) || astChrMatch( "VOPTICAL", system ) ) {
- result = AST__VOPTICAL;
-
- } else if ( astChrMatch( "ZOPT", system ) || astChrMatch( "REDSHIFT", system ) ) {
- result = AST__REDSHIFT;
-
- } else if ( astChrMatch( "BETA", system ) ) {
- result = AST__BETA;
-
- } else if ( astChrMatch( "VELO", system ) || astChrMatch( "VREL", system ) ) {
- result = AST__VREL;
-
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *SystemLabel( AstSystemType system, int *status ) {
-/*
-* Name:
-* SystemLabel
-
-* Purpose:
-* Return a label for a coordinate system type code.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* const char *SystemLabel( AstSystemType system, int *status )
-
-* Class Membership:
-* SpecFrame member function.
-
-* Description:
-* This function converts a SpecFrame coordinate system type code
-* (System attribute value) into a descriptive string for human readers.
-
-* Parameters:
-* system
-* The coordinate system type code.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a constant null-terminated string containing the
-* textual equivalent of the type code supplied.
-
-* Notes:
-* - A NULL pointer value is returned if the sky coordinate system
-* code was not recognised. This does not produce an error.
-* - A NULL pointer value is also returned if this function is
-* invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- const char *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Match the "system" value against each possibility and convert to a
- string pointer. */
- switch ( system ) {
-
- case AST__FREQ:
- result = "frequency";
- break;
-
- case AST__ENERGY:
- result = "energy";
- break;
-
- case AST__WAVENUM:
- result = "wave-number";
- break;
-
- case AST__WAVELEN:
- result = "wavelength";
- break;
-
- case AST__AIRWAVE:
- result = "wavelength in air";
- break;
-
- case AST__VRADIO:
- result = "radio velocity";
- break;
-
- case AST__VOPTICAL:
- result = "optical velocity";
- break;
-
- case AST__REDSHIFT:
- result = "redshift";
- break;
-
- case AST__BETA:
- result = "beta factor";
- break;
-
- case AST__VREL:
- result = "apparent radial velocity";
- break;
- }
-
-/* Return the result pointer. */
- return result;
-}
-
-static const char *SystemString( AstFrame *this, AstSystemType system, int *status ) {
-/*
-* Name:
-* SystemString
-
-* Purpose:
-* Convert a coordinate system type code into a string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* const char *SystemString( AstFrame *this, AstSystemType system, int *status )
-
-* Class Membership:
-* SpecFrame member function (over-rides the astSystemString method
-* inherited from the Frame class).
-
-* Description:
-* This function converts a SpecFrame coordinate system type code
-* (System attribute value) into a string suitable for use as an
-* external representation of the coordinate system type.
-
-* Parameters:
-* this
-* The Frame.
-* system
-* The coordinate system type code.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a constant null-terminated string containing the
-* textual equivalent of the type code supplied.
-
-* Notes:
-* - A NULL pointer value is returned if the sky coordinate system
-* code was not recognised. This does not produce an error.
-* - A NULL pointer value is also returned if this function is
-* invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- const char *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Match the "system" value against each possibility and convert to a
- string pointer. (Where possible, return the same string as would be
- used in the FITS WCS representation of the coordinate system). */
- switch ( system ) {
-
- case AST__FREQ:
- result = "FREQ";
- break;
-
- case AST__ENERGY:
- result = "ENER";
- break;
-
- case AST__WAVENUM:
- result = "WAVN";
- break;
-
- case AST__WAVELEN:
- result = "WAVE";
- break;
-
- case AST__AIRWAVE:
- result = "AWAV";
- break;
-
- case AST__VRADIO:
- result = "VRAD";
- break;
-
- case AST__VOPTICAL:
- result = "VOPT";
- break;
-
- case AST__REDSHIFT:
- result = "ZOPT";
- break;
-
- case AST__BETA:
- result = "BETA";
- break;
-
- case AST__VREL:
- result = "VELO";
- break;
- }
-
-/* Return the result pointer. */
- return result;
-}
-
-static int TestActiveUnit( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* TestActiveUnit
-
-* Purpose:
-* Test the ActiveUnit flag for a SpecFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* int TestActiveUnit( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* SpecFrame member function (over-rides the astTestActiveUnit protected
-* method inherited from the Frame class).
-
-* Description:
-* This function test the value of the ActiveUnit flag for a SpecFrame,
-* which is always "unset".
-
-* Parameters:
-* this
-* Pointer to the SpecFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The result of the test (0).
-
-*/
- return 0;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a SpecFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* SpecFrame member function (over-rides the astTestAttrib protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a SpecFrame's attributes.
-
-* Parameters:
-* this
-* Pointer to the SpecFrame.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - This function uses one-based axis numbering so that it is
-* suitable for external (public) use.
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSpecFrame *this; /* Pointer to the SpecFrame structure */
- char *new_attrib; /* Pointer value to new attribute name */
- int len; /* Length of attrib string */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the SpecFrame structure. */
- this = (AstSpecFrame *) this_object;
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* First look for axis attributes defined by the Frame class. Since a
- SpecFrame has only 1 axis, we allow these attributes to be specified
- without a trailing "(axis)" string. */
- if ( !strcmp( attrib, "direction" ) ||
- !strcmp( attrib, "bottom" ) ||
- !strcmp( attrib, "top" ) ||
- !strcmp( attrib, "format" ) ||
- !strcmp( attrib, "label" ) ||
- !strcmp( attrib, "symbol" ) ||
- !strcmp( attrib, "unit" ) ) {
-
-/* Create a new attribute name from the original by appending the string
- "(1)" and then use the parent TestAttrib method. */
- new_attrib = astMalloc( len + 4 );
- if( new_attrib ) {
- memcpy( new_attrib, attrib, len );
- memcpy( new_attrib + len, "(1)", 4 );
- result = (*parent_testattrib)( this_object, new_attrib, status );
- new_attrib = astFree( new_attrib );
- }
-
-/* AlignStdOfRest. */
-/* --------------- */
- } else if ( !strcmp( attrib, "alignstdofrest" ) ) {
- result = astTestAlignStdOfRest( this );
-
-/* GeoLat. */
-/* ------- */
-/* Retained for backward compatibility with older versions of AST in which
- SpecFrame had GeoLon/Lat attributes (now ObsLon/Lat are used instead). */
- } else if ( !strcmp( attrib, "geolat" ) ) {
- result = astTestAttrib( this, "obslat" );
-
-/* GeoLon. */
-/* ------- */
- } else if ( !strcmp( attrib, "geolon" ) ) {
- result = astTestAttrib( this, "obslon" );
-
-/* RefDec. */
-/* ------- */
- } else if ( !strcmp( attrib, "refdec" ) ) {
- result = astTestRefDec( this );
-
-/* RefRA. */
-/* ------ */
- } else if ( !strcmp( attrib, "refra" ) ) {
- result = astTestRefRA( this );
-
-/* RestFreq. */
-/* --------- */
- } else if ( !strcmp( attrib, "restfreq" ) ) {
- result = astTestRestFreq( this );
-
-/* SourceVel. */
-/* ---------- */
- } else if ( !strcmp( attrib, "sourcevel" ) ) {
- result = astTestSourceVel( this );
-
-/* SourceVRF */
-/* --------- */
- } else if ( !strcmp( attrib, "sourcevrf" ) ) {
- result = astTestSourceVRF( this );
-
-/* SourceSys */
-/* --------- */
- } else if ( !strcmp( attrib, "sourcesys" ) ) {
- result = astTestSourceSys( this );
-
-/* StdOfRest. */
-/* ---------- */
- } else if ( !strcmp( attrib, "stdofrest" ) ) {
- result = astTestStdOfRest( this );
-
-/* SpecOrigin. */
-/* --------- */
- } else if ( !strcmp( attrib, "specorigin" ) ) {
- result = astTestSpecOrigin( this );
-
-/* AlignSpecOffset */
-/* --------------- */
- } else if ( !strcmp( attrib, "alignspecoffset" ) ) {
- result = astTestAlignSpecOffset( this );
-
-/* If the attribute is not recognised, pass it on to the parent method
- for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static double ToUnits( AstSpecFrame *this, const char *oldunit, double oldval,
- const char *method, int *status ){
-/*
-*
-* Name:
-* ToUnits
-
-* Purpose:
-* Convert a supplied spectral value to the default units of the supplied
-* SpecFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* double ToUnits( AstSpecFrame *this, const char *oldunit, double oldval,
-* const char *method, int *status )
-
-* Class Membership:
-* SpecFrame member function
-
-* Description:
-* This function converts the supplied value from the supplied units to
-* the default units associated with the supplied SpecFrame's System.
-
-* Parameters:
-* this
-* Pointer to the SpecFrame.
-* oldunit
-* The units in which "oldval" is supplied.
-* oldval
-* The value to be converted.
-* method
-* Pointer to a string holding the name of the method to be
-* included in any error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The converted value.
-
-*/
-
-/* Local Variables: */
- AstMapping *map;
- const char *defunit;
- double result;
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get default units associated with the System attribute of the supplied
- SpecFrame, and find a Mapping from the old units to the default. */
- defunit = DefUnit( astGetSystem( this ), method, "SpecFrame", status );
- map = astUnitMapper( oldunit, defunit, NULL, NULL );
- if( map ) {
-
-/* Use the Mapping to convert the supplied value. */
- astTran1( map, 1, &oldval, 1, &result );
-
-/* Free resources. */
- map = astAnnul( map );
-
-/* Report an error if no conversion is possible. */
- } else if( astOK ){
- astError( AST__BADUN, "%s(%s): Cannot convert the supplied attribute "
- "value from units of %s to %s.", status, method, astGetClass( this ),
- oldunit, defunit );
- }
-
-/* Return the result */
- return result;
-}
-
-
-static int ValidateSystem( AstFrame *this, AstSystemType system, const char *method, int *status ) {
-/*
-*
-* Name:
-* ValidateSystem
-
-* Purpose:
-* Validate a value for a Frame's System attribute.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "specframe.h"
-* int ValidateSystem( AstFrame *this, AstSystemType system,
-* const char *method, int *status )
-
-* Class Membership:
-* SpecFrame member function (over-rides the astValidateSystem method
-* inherited from the Frame class).
-
-* Description:
-* This function checks the validity of the supplied system value.
-* If the value is valid, it is returned unchanged. Otherwise, an
-* error is reported and a value of AST__BADSYSTEM is returned.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* system
-* The system value to be checked.
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function
-* to validate an axis index. This method name is used solely
-* for constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The validated system value.
-
-* Notes:
-* - A value of AST__BADSYSTEM will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstSystemType result; /* Validated system value */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If the value is out of bounds, report an error. */
- if ( system < FIRST_SYSTEM || system > LAST_SYSTEM ) {
- astError( AST__AXIIN, "%s(%s): Bad value (%d) given for the System "
- "or AlignSystem attribute of a %s.", status, method,
- astGetClass( this ), (int) system, astGetClass( this ) );
-
-/* Otherwise, return the supplied value. */
- } else {
- result = system;
- }
-
-/* Return the result. */
- return result;
-}
-
-static void VerifyAttrs( AstSpecFrame *this, const char *purp,
- const char *attrs, const char *method, int *status ) {
-/*
-* Name:
-* VerifyAttrs
-
-* Purpose:
-* Verify that usable attribute values are available.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specframe.h"
-* void VerifyAttrs( AstSpecFrame *this, const char *purp,
-* const char *attrs, const char *method, int *status )
-
-* Class Membership:
-* SpecFrame member function
-
-* Description:
-* This function tests each attribute listed in "attrs". It returns
-* without action if 1) an explicit value has been set for each attribute
-* or 2) the UseDefs attribute of the supplied SpecFrame is non-zero.
-*
-* If UseDefs is zero (indicating that default values should not be
-* used for attributes), and any of the named attributes does not have
-* an explicitly set value, then an error is reported.
-
-* Parameters:
-* this
-* Pointer to the SpecFrame.
-* purp
-* Pointer to a text string containing a message which will be
-* included in any error report. This shouldindicate the purpose
-* for which the attribute value is required.
-* attrs
-* A string holding a space separated list of attribute names.
-* method
-* A string holding the name of the calling method for use in error
-* messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- const char *a;
- const char *desc;
- const char *p;
- int len;
- int set;
- int state;
-
-/* Check inherited status */
- if( !astOK ) return;
-
-/* If the SpecFrame has a non-zero value for its UseDefs attribute, then
- all attributes are assumed to have usable values, since the defaults
- will be used if no explicit value has been set. So we only need to do
- any checks if UseDefs is zero. */
- if( !astGetUseDefs( this ) ) {
-
-/* Stop compiler warnings about uninitialised variables */
- a = NULL;
- desc = NULL;
- len = 0;
- set = 0;
-
-/* Loop round the "attrs" string identifying the start and length of each
- non-blank word in the string. */
- state = 0;
- p = attrs;
- while( 1 ) {
- if( state == 0 ) {
- if( !isspace( *p ) ) {
- a = p;
- len = 1;
- state = 1;
- }
- } else {
- if( isspace( *p ) || !*p ) {
-
-/* The end of a word has just been reached. Compare it to each known
- attribute value. Get a flag indicating if the attribute has a set
- value, and a string describing the attribute.*/
- if( len > 0 ) {
-
- if( !strncmp( "ObsLat", a, len ) ) {
- set = astTestObsLat( this );
- desc = "observer's latitude";
-
- } else if( !strncmp( "ObsLon", a, len ) ) {
- set = astTestObsLon( this );
- desc = "observer's longitude";
-
- } else if( !strncmp( "ObsAlt", a, len ) ) {
- set = astTestObsAlt( this );
- desc = "observer's altitude";
-
- } else if( !strncmp( "RefRA", a, len ) ) {
- set = astTestRefRA( this );
- desc = "source RA";
-
- } else if( !strncmp( "RefDec", a, len ) ) {
- set = astTestRefDec( this );
- desc = "source Dec";
-
- } else if( !strncmp( "RestFreq", a, len ) ) {
- set = astTestRestFreq( this );
- desc = "rest frequency";
-
- } else if( !strncmp( "SourceVel", a, len ) ) {
- set = astTestSourceVel( this );
- desc = "source velocity";
-
- } else if( !strncmp( "StdOfRest", a, len ) ) {
- set = astTestStdOfRest( this );
- desc = "spectral standard of rest";
-
- } else if( !strncmp( "Epoch", a, len ) ) {
- set = astTestEpoch( this );
- desc = "epoch of observation";
-
- } else {
- astError( AST__INTER, "VerifyAttrs(SpecFrame): "
- "Unknown attribute name \"%.*s\" supplied (AST "
- "internal programming error).", status, len, a );
- }
-
-/* If the attribute does not have a set value, report an error. */
- if( !set && astOK ) {
- astError( AST__NOVAL, "%s(%s): Cannot %s.", status, method,
- astGetClass( this ), purp );
- astError( AST__NOVAL, "No value has been set for "
- "the AST \"%.*s\" attribute (%s).", status, len, a,
- desc );
- }
-
-/* Continue the word search algorithm. */
- }
- len = 0;
- state = 0;
- } else {
- len++;
- }
- }
- if( !*(p++) ) break;
- }
- }
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/*
-*att++
-* Name:
-* AlignSpecOffset
-
-* Purpose:
-* Align SpecFrames using the offset coordinate system?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute is a boolean value which controls how a SpecFrame
-* behaves when it is used (by
-c astFindFrame or astConvert) as a template to match another (target)
-f AST_FINDFRAME or AST_CONVERT) as a template to match another (target)
-* SpecFrame. It determines whether alignment occurs between the offset
-* values defined by the current value of the SpecOffset attribute, or
-* between the corresponding absolute spectral values.
-*
-* The default value of zero results in the two SpecFrames being aligned
-* so that a given absolute spectral value in one is mapped to the same
-* absolute value in the other. A non-zero value results in the SpecFrames
-* being aligned so that a given offset value in one is mapped to the same
-* offset value in the other.
-
-* Applicability:
-* SpecFrame
-* All SpecFrames have this attribute.
-*att--
-*/
-astMAKE_CLEAR(SpecFrame,AlignSpecOffset,alignspecoffset,-INT_MAX)
-astMAKE_GET(SpecFrame,AlignSpecOffset,int,0,( ( this->alignspecoffset != -INT_MAX ) ?
- this->alignspecoffset : 0 ))
-astMAKE_SET(SpecFrame,AlignSpecOffset,int,alignspecoffset,( value != 0 ))
-astMAKE_TEST(SpecFrame,AlignSpecOffset,( this->alignspecoffset != -INT_MAX ))
-
-
-
-/*
-*att++
-* Name:
-* AlignStdOfRest
-
-* Purpose:
-* Standard of rest to use when aligning SpecFrames.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute controls how a SpecFrame behaves when it is used (by
-c astFindFrame or astConvert) as a template to match another (target)
-f AST_FINDFRAME or AST_CONVERT) as a template to match another (target)
-* SpecFrame. It identifies the standard of rest in which alignment is
-* to occur. See the StdOfRest attribute for a desription of the values
-* which may be assigned to this attribute. The default AlignStdOfRest
-* value is "Helio" (heliographic).
-*
-c When astFindFrame or astConvert is used on two SpecFrames (potentially
-f When AST_FindFrame or AST_CONVERT is used on two SpecFrames (potentially
-* describing different spectral coordinate systems), it returns a Mapping
-* which can be used to transform a position in one SpecFrame into the
-* corresponding position in the other. The Mapping is made up of the
-* following steps in the indicated order:
-*
-* - Map values from the system used by the target (wavelength,
-* apparent radial velocity, etc) to the system specified by the
-* AlignSystem attribute, using the target's rest frequency if necessary.
-*
-* - Map these values from the target's standard of rest to the standard of
-* rest specified by the AlignStdOfRest attribute, using the Epoch, ObsLat,
-* ObsLon, ObsAlt, RefDec and RefRA attributes of the target to define the
-* two standards of rest.
-*
-* - Map these values from the standard of rest specified by the
-* AlignStdOfRest attribute, to the template's standard of rest, using the
-* Epoch, ObsLat, ObsLon, ObsAlt, RefDec and RefRA attributes of the
-* template to define the two standards of rest.
-*
-* - Map these values from the system specified by the AlignSystem
-* attribute, to the system used by the template, using the template's
-* rest frequency if necessary.
-
-* Applicability:
-* SpecFrame
-* All SpecFrames have this attribute.
-
-*att--
-*/
-/* The AlignStdOfRest value has a value of AST__BADSOR when not set yielding
- a default of AST__HLSOR. */
-astMAKE_TEST(SpecFrame,AlignStdOfRest,( this->alignstdofrest != AST__BADSOR ))
-astMAKE_CLEAR(SpecFrame,AlignStdOfRest,alignstdofrest,AST__BADSOR)
-astMAKE_GET(SpecFrame,AlignStdOfRest,AstStdOfRestType,AST__BADSOR,(
- ( this->alignstdofrest == AST__BADSOR ) ? AST__HLSOR : this->alignstdofrest ) )
-
-/* Validate the AlignStdOfRest value being set and report an error if necessary. */
-astMAKE_SET(SpecFrame,AlignStdOfRest,AstStdOfRestType,alignstdofrest,(
- ( ( value >= FIRST_SOR ) && ( value <= LAST_SOR ) ) ?
- value :
- ( astError( AST__ATTIN, "%s(%s): Bad value (%d) "
- "given for AlignStdOfRest attribute.", status,
- "astSetAlignStdOfRest", astGetClass( this ), (int) value ),
-
-/* Leave the value unchanged on error. */
- this->alignstdofrest ) ) )
-
-/*
-*att++
-* Name:
-* RefDec
-
-* Purpose:
-* The declination of the reference point
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute specifies the FK5 J2000.0 declination of a reference
-* point on the sky. See the description of attribute RefRA for details.
-* The default RefDec is "0:0:0".
-
-* Applicability:
-* SpecFrame
-* All SpecFrames have this attribute.
-
-*att--
-*/
-/* The reference declination (FK5 J2000, radians). Clear the RefDec value by
- setting it to AST__BAD, which results in a default value of zero. Any
- value is acceptable. */
-astMAKE_CLEAR(SpecFrame,RefDec,refdec,AST__BAD)
-astMAKE_GET(SpecFrame,RefDec,double,0.0,((this->refdec!=AST__BAD)?this->refdec:0.0))
-astMAKE_SET(SpecFrame,RefDec,double,refdec,value)
-astMAKE_TEST(SpecFrame,RefDec,( this->refdec != AST__BAD ))
-
-/*
-*att++
-* Name:
-* RefRA
-
-* Purpose:
-* The right ascension of the reference point
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute, together with the RefDec attribute, specifies the FK5
-* J2000.0 coordinates of a reference point on the sky. For 1-dimensional
-* spectra, this should normally be the position of the source. For
-* spectral data with spatial coverage (spectral cubes, etc), this should
-* be close to centre of the spatial coverage. It is used to define the
-* correction for Doppler shift to be applied when using the
-c astFindFrame or astConvert
-f AST_FINDFRAME or AST_CONVERT
-* method to convert between different standards of rest.
-*
-* The SpecFrame class assumes this velocity correction is spatially
-* invariant. If a single SpecFrame is used (for instance, as a
-* component of a CmpFrame) to describe spectral values at different
-* points on the sky, then it is assumes that the doppler shift at any
-* spatial position is the same as at the reference position. The
-* maximum velocity error introduced by this assumption is of the order
-* of V*SIN(FOV), where FOV is the angular field of view, and V is the
-* relative velocity of the two standards of rest. As an example, when
-* correcting from the observers rest frame (i.e. the topocentric rest
-* frame) to the kinematic local standard of rest the maximum value of V
-* is about 20 km/s, so for 5 arc-minute field of view the maximum velocity
-* error introduced by the correction will be about 0.03 km/s. As another
-* example, the maximum error when correcting from the observers rest frame
-* to the local group is about 5 km/s over a 1 degree field of view.
-*
-* The RefRA and RefDec attributes are stored internally in radians, but
-* are converted to and from a string for access. The format "hh:mm:ss.ss"
-* is used for RefRA, and "dd:mm:ss.s" is used for RefDec. The methods
-c astSetRefPos and astGetRefPos may be used to access the values of
-f AST_SETREFPOS and AST_GETREFPOS may be used to access the value of
-* these attributes directly as unformatted values in radians.
-*
-* The default for RefRA is "0:0:0".
-
-* Applicability:
-* SpecFrame
-* All SpecFrames have this attribute.
-
-*att--
-*/
-/* The reference right ascension (FK5 J2000, radians). Clear the RefRA value
- by setting it to AST__BAD, which gives a default value of 0.0. Any
- value is acceptable. */
-astMAKE_CLEAR(SpecFrame,RefRA,refra,AST__BAD)
-astMAKE_GET(SpecFrame,RefRA,double,0.0,((this->refra!=AST__BAD)?this->refra:0.0))
-astMAKE_SET(SpecFrame,RefRA,double,refra,value)
-astMAKE_TEST(SpecFrame,RefRA,( this->refra != AST__BAD ))
-
-
-/*
-*att++
-* Name:
-* RestFreq
-
-* Purpose:
-* The rest frequency.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute specifies the frequency corresponding to zero
-* velocity. It is used when converting between between velocity-based
-* coordinate systems and and other coordinate systems (such as frequency,
-* wavelength, energy, etc). The default value is 1.0E5 GHz.
-*
-* When setting a new value for this attribute, the new value can be
-* supplied either directly as a frequency, or indirectly as a wavelength
-* or energy, in which case the supplied value is converted to a frequency
-* before being stored. The nature of the supplied value is indicated by
-* appending text to the end of the numerical value indicating the units in
-* which the value is supplied. If the units are not specified, then the
-* supplied value is assumed to be a frequency in units of GHz. If the
-* supplied unit is a unit of frequency, the supplied value is assumed to
-* be a frequency in the given units. If the supplied unit is a unit of
-* length, the supplied value is assumed to be a (vacuum) wavelength. If
-* the supplied unit is a unit of energy, the supplied value is assumed to
-* be an energy. For instance, the following strings all result in
-* a rest frequency of around 1.4E14 Hz being used: "1.4E5", "1.4E14 Hz",
-* "1.4E14 s**-1", "1.4E5 GHz", "2.14E-6 m", "21400 Angstrom", "9.28E-20 J",
-* "9.28E-13 erg", "0.58 eV", etc.
-*
-* When getting the value of this attribute, the returned value is
-* always a frequency in units of GHz.
-
-* Applicability:
-* SpecFrame
-* All SpecFrames have this attribute.
-
-*att--
-*/
-/* The rest frequency (Hz). Clear the RestFreq value by setting it to AST__BAD,
- which gives 1.0E14 as the default value. Any value is acceptable. */
-astMAKE_CLEAR(SpecFrame,RestFreq,restfreq,AST__BAD)
-astMAKE_GET(SpecFrame,RestFreq,double,1.0E14,((this->restfreq!=AST__BAD)?this->restfreq:1.0E14))
-astMAKE_SET(SpecFrame,RestFreq,double,restfreq,value)
-astMAKE_TEST(SpecFrame,RestFreq,( this->restfreq != AST__BAD ))
-
-/*
-*att++
-* Name:
-* SourceVel
-
-* Purpose:
-* The source velocity.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute (together with SourceSys, SourceVRF, RefRA and RefDec)
-* defines the "Source" standard of rest (see attribute StdOfRest). This is
-* a rest frame which is moving towards the position given by RefRA and
-* RefDec at a velocity given by SourceVel. A positive value means
-* the source is moving away from the observer. When a new value is
-* assigned to this attribute, the supplied value is assumed to refer
-* to the spectral system specified by the SourceSys attribute. For
-* instance, the SourceVel value may be supplied as a radio velocity, a
-* redshift, a beta factor, etc. Similarly, when the current value of
-* the SourceVel attribute is obtained, the returned value will refer
-* to the spectral system specified by the SourceSys value. If the
-* SourceSys value is changed, any value previously stored for the SourceVel
-* attribute will be changed automatically from the old spectral system
-* to the new spectral system.
-*
-* When setting a value for SourceVel, the value should be supplied in the
-* rest frame specified by the SourceVRF attribute. Likewise, when getting
-* the value of SourceVel, it will be returned in the rest frame specified
-* by the SourceVRF attribute.
-*
-* The default SourceVel value is zero.
-
-* Applicability:
-* SpecFrame
-* All SpecFrames have this attribute.
-
-* Notes:
-* - It is important to set an appropriate value for SourceVRF and
-* SourceSys before setting a value for SourceVel. If a new value is later
-* set for SourceVRF or SourceSys, the value stored for SourceVel will
-* simultaneously be changed to the new standard of rest or spectral
-* system.
-
-*att--
-*/
-/* The source velocity (velocities are stored internally in m/s). Clear it
- by setting it to AST__BAD, which returns a default value of zero. Any
- value is acceptable. */
-astMAKE_CLEAR(SpecFrame,SourceVel,sourcevel,AST__BAD)
-astMAKE_SET(SpecFrame,SourceVel,double,sourcevel,value)
-astMAKE_TEST(SpecFrame,SourceVel,( this->sourcevel != AST__BAD ))
-astMAKE_GET(SpecFrame,SourceVel,double,0.0,((this->sourcevel!=AST__BAD)?this->sourcevel:0.0))
-
-/*
-*att++
-* Name:
-* SourceVRF
-
-* Purpose:
-* Rest frame in which the source velocity is stored.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute identifies the rest frame in which the source
-* velocity or redshift is stored (the source velocity or redshift is
-* accessed using attribute SourceVel). When setting a new value for the
-* SourceVel attribute, the source velocity or redshift should be supplied
-* in the rest frame indicated by this attribute. Likewise, when getting
-* the value of the SourceVel attribute, the velocity or redshift will be
-* returned in this rest frame.
-*
-* If the value of SourceVRF is changed, the value stored for SourceVel
-* will be converted from the old to the new rest frame.
-*
-* The values which can be supplied are the same as for the StdOfRest
-* attribute (except that SourceVRF cannot be set to "Source"). The
-* default value is "Helio".
-
-* Applicability:
-* SpecFrame
-* All SpecFrames have this attribute.
-
-*att--
-*/
-/* The SourceVRF value has a value of AST__BADSOR when not set yielding
- a default of AST__HLSOR. */
-astMAKE_TEST(SpecFrame,SourceVRF,( this->sourcevrf != AST__BADSOR ))
-astMAKE_GET(SpecFrame,SourceVRF,AstStdOfRestType,AST__BADSOR,(
- ( this->sourcevrf == AST__BADSOR ) ? AST__HLSOR : this->sourcevrf ) )
-
-/* When clearing SourceVRF, convert the SourceVel value to heliocentric
- (but only if set)*/
-astMAKE_CLEAR(SpecFrame,SourceVRF,sourcevrf,((astTestSourceVel( this )?
-astSetSourceVel( this, ConvertSourceVel( this, AST__HLSOR, astGetSourceSys( this ), status ) ),NULL:NULL),AST__BADSOR))
-
-/* Validate the SourceVRF value being set and report an error if necessary.
- If OK, convert the stored SourceVel value into the new rest frame (but
-only if set)*/
-astMAKE_SET(SpecFrame,SourceVRF,AstStdOfRestType,sourcevrf,(
- ( ( value >= FIRST_SOR ) && ( value <= LAST_SOR ) && value != AST__SCSOR ) ?
- (astTestSourceVel( this )?
- astSetSourceVel( this, ConvertSourceVel( this, value, astGetSourceSys( this ), status )),NULL:NULL), value:
- ( astError( AST__ATTIN, "%s(%s): Bad value (%d) "
- "given for SourceVRF attribute.", status,
- "astSetSourceVRF", astGetClass( this ), (int) value ),
-
-/* Leave the value unchanged on error. */
- this->sourcevrf ) ) )
-
-/*
-*att++
-* Name:
-* SourceSys
-
-* Purpose:
-* Spectral system in which the source velocity is stored.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute identifies the spectral system in which the
-* SourceVel attribute value (the source velocity) is supplied and
-* returned. It can be one of the following:
-*
-* - "VRAD" or "VRADIO": Radio velocity (km/s)
-* - "VOPT" or "VOPTICAL": Optical velocity (km/s)
-* - "ZOPT" or "REDSHIFT": Redshift (dimensionless)
-* - "BETA": Beta factor (dimensionless)
-* - "VELO" or "VREL": Apparent radial ("relativistic") velocity (km/s)
-*
-* When setting a new value for the SourceVel attribute, the source
-* velocity should be supplied in the spectral system indicated
-* by this attribute. Likewise, when getting the value of the SourceVel
-* attribute, the velocity will be returned in this spectral system.
-*
-* If the value of SourceSys is changed, the value stored for SourceVel
-* will be converted from the old to the new spectral systems.
-*
-* The default value is "VELO" (apparent radial velocity).
-
-* Applicability:
-* SpecFrame
-* All SpecFrames have this attribute.
-
-*att--
-*/
-/* The SourceSys value has a value of AST__BADSYS when not set yielding
- a default of AST__VREL. */
-astMAKE_TEST(SpecFrame,SourceSys,( this->sourcesys != AST__BADSYSTEM ))
-astMAKE_GET(SpecFrame,SourceSys,AstSystemType,AST__BADSYSTEM,(
- ( this->sourcesys == AST__BADSYSTEM ) ? AST__VREL : this->sourcesys ) )
-
-/* When clearing SourceSys, convert the SourceVel value to relativistic
- velocity (but only if set) */
-astMAKE_CLEAR(SpecFrame,SourceSys,sourcesys,((astTestSourceVel( this )?
-astSetSourceVel( this, ConvertSourceVel( this, astGetSourceVRF( this ),
- AST__VREL, status ) ),NULL:NULL),AST__BADSYSTEM))
-
-/* Validate the SourceSys value being set and report an error if necessary.
- If OK, convert the stored SourceVel value into the new rest frame (but
- only if set)*/
-astMAKE_SET(SpecFrame,SourceSys,AstSystemType,sourcesys,(
- ( ( value == AST__VREL ) || ( value == AST__BETA ) ||
- ( value == AST__VRADIO ) || ( value == AST__REDSHIFT ) ||
- ( value == AST__VOPTICAL ) ) ?
- (astTestSourceVel( this )?
- astSetSourceVel( this, ConvertSourceVel( this, astGetSourceVRF( this ),
- value, status )),NULL:NULL),
- value:
- ( astError( AST__ATTIN, "%s(%s): Bad value (%d) "
- "given for SourceSys attribute.", status,
- "astSetSourceSys", astGetClass( this ), (int) value ),
-
-/* Leave the value unchanged on error. */
- this->sourcesys ) ) )
-
-/*
-*att++
-* Name:
-* StdOfRest
-
-* Purpose:
-* Standard of rest.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute identifies the standard of rest to which the spectral
-* axis values of a SpecFrame refer, and may take any of the values
-* listed in the "Standards of Rest" section (below).
-*
-* The default StdOfRest value is "Helio".
-
-* Applicability:
-* SpecFrame
-* All SpecFrames have this attribute.
-
-* Standards of Rest:
-* The SpecFrame class supports the following StdOfRest values (all are
-* case-insensitive):
-*
-* - "Topocentric", "Topocent" or "Topo": The observers rest-frame (assumed
-* to be on the surface of the earth). Spectra recorded in this standard of
-* rest suffer a Doppler shift which varies over the course of a day
-* because of the rotation of the observer around the axis of the earth.
-* This standard of rest must be qualified using the ObsLat, ObsLon,
-* ObsAlt, Epoch, RefRA and RefDec attributes.
-*
-* - "Geocentric", "Geocentr" or "Geo": The rest-frame of the earth centre.
-* Spectra recorded in this standard of rest suffer a Doppler shift which
-* varies over the course of a year because of the rotation of the earth
-* around the Sun. This standard of rest must be qualified using the Epoch,
-* RefRA and RefDec attributes.
-*
-* - "Barycentric", "Barycent" or "Bary": The rest-frame of the solar-system
-* barycentre. Spectra recorded in this standard of rest suffer a Doppler
-* shift which depends both on the velocity of the Sun through the Local
-* Standard of Rest, and on the movement of the planets through the solar
-* system. This standard of rest must be qualified using the Epoch, RefRA
-* and RefDec attributes.
-*
-* - "Heliocentric", "Heliocen" or "Helio": The rest-frame of the Sun.
-* Spectra recorded in this standard of rest suffer a Doppler shift which
-* depends on the velocity of the Sun through the Local Standard of Rest.
-* This standard of rest must be qualified using the RefRA and RefDec
-* attributes.
-*
-* - "LSRK", "LSR": The rest-frame of the kinematical Local Standard of
-* Rest. Spectra recorded in this standard of rest suffer a Doppler shift
-* which depends on the velocity of the kinematical Local Standard of Rest
-* through the galaxy. This standard of rest must be qualified using the
-* RefRA and RefDec attributes.
-*
-* - "LSRD": The rest-frame of the dynamical Local Standard of Rest. Spectra
-* recorded in this standard of rest suffer a Doppler shift which depends
-* on the velocity of the dynamical Local Standard of Rest through the
-* galaxy. This standard of rest must be qualified using the RefRA and
-* RefDec attributes.
-*
-* - "Galactic", "Galactoc" or "Gal": The rest-frame of the galactic centre.
-* Spectra recorded in this standard of rest suffer a Doppler shift which
-* depends on the velocity of the galactic centre through the local group.
-* This standard of rest must be qualified using the RefRA and RefDec
-* attributes.
-*
-* - "Local_group", "Localgrp" or "LG": The rest-frame of the local group.
-* This standard of rest must be qualified using the RefRA and RefDec
-* attributes.
-*
-* - "Source", or "src": The rest-frame of the source. This standard of
-* rest must be qualified using the RefRA, RefDec and SourceVel attributes.
-*
-* Where more than one alternative System value is shown above, the
-* first of these will be returned when an enquiry is made.
-*att--
-*/
-/* The StdOfRest value has a value of AST__BADSOR when not set yielding
- a default of AST__HLSOR. */
-astMAKE_TEST(SpecFrame,StdOfRest,( this->stdofrest != AST__BADSOR ))
-astMAKE_GET(SpecFrame,StdOfRest,AstStdOfRestType,AST__BADSOR,(
- ( this->stdofrest == AST__BADSOR ) ? AST__HLSOR : this->stdofrest ) )
-
-/*
-*att++
-* Name:
-* SpecOrigin
-
-* Purpose:
-* The zero point for SpecFrame axis values
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This specifies the origin from which all spectral values are measured.
-* The default value (zero) results in the SpecFrame describing
-* absolute spectral values in the system given by the System attribute
-* (e.g. frequency, velocity, etc). If a SpecFrame is to be used to
-* describe offset from some origin, the SpecOrigin attribute
-* should be set to hold the required origin value. The SpecOrigin value
-* stored inside the SpecFrame structure is modified whenever SpecFrame
-* attribute values are changed so that it refers to the original spectral
-* position.
-*
-* When setting a new value for this attribute, the supplied value is assumed
-* to be in the system, units and standard of rest described by the SpecFrame.
-* Likewise, when getting the value of this attribute, the value is returned
-* in the system, units and standard of rest described by the SpecFrame. If
-* any of these attributes are changed, then any previously stored SpecOrigin
-* value will also be changed so that refers to the new system, units or
-* standard of rest.
-
-* Applicability:
-* SpecFrame
-* All SpecFrames have this attribute.
-
-*att--
-*/
-/* The spec origin, stored internally in the default units associated
- with the current System value. Clear the SpecOrigin value by setting it
- to AST__BAD, which gives 0.0 as the default value. Any value is acceptable. */
-astMAKE_CLEAR(SpecFrame,SpecOrigin,specorigin,AST__BAD)
-astMAKE_GET(SpecFrame,SpecOrigin,double,0.0,((this->specorigin!=AST__BAD)?this->specorigin:0.0))
-astMAKE_SET(SpecFrame,SpecOrigin,double,specorigin,value)
-astMAKE_TEST(SpecFrame,SpecOrigin,( this->specorigin != AST__BAD ))
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for SpecFrame objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for SpecFrame objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstSpecFrame *in; /* Pointer to input SpecFrame */
- AstSpecFrame *out; /* Pointer to output SpecFrame */
- char *usedunit; /* Pointer to an element of usedunits array */
- int i; /* Loop count */
- int nused; /* Size of "usedunits" array */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output SpecFrames. */
- in = (AstSpecFrame *) objin;
- out = (AstSpecFrame *) objout;
-
-/* Nullify the pointers stored in the output object since these will
- currently be pointing at the input data (since the output is a simple
- byte-for-byte copy of the input). Otherwise, the input data could be
- freed by accidient if the output object is deleted due to an error
- occuring in this function. */
- out->usedunits = NULL;
-
-/* Store the last used units in the output SpecMap. */
- if( in && in->usedunits ) {
- nused = in->nuunits;
- out->usedunits = astMalloc( nused*sizeof( char * ) );
- if( out->usedunits ) {
- for( i = 0; i < nused; i++ ) {
- usedunit = in->usedunits[ i ];
- if( usedunit ) {
- out->usedunits[ i ] = astStore( NULL, usedunit,
- strlen( usedunit ) + 1 );
- } else {
- out->usedunits[ i ] = NULL;
- }
- }
- }
- }
-
-/* If an error has occurred, free the output resources. */
- if( !astOK ) Delete( (AstObject *) out, status );
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for SpecFrame objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for SpecFrame objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstSpecFrame *this;
- int i;
-
-/* Release the memory referred to in the SpecFrame structure. */
- this = (AstSpecFrame *) obj;
- if( this && this->usedunits ) {
- for( i = 0; i < this->nuunits; i++ ) {
- this->usedunits[ i ] = astFree( this->usedunits[ i ] );
- }
- this->usedunits = astFree( this->usedunits );
- }
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for SpecFrame objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the SpecFrame class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the SpecFrame whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstSpecFrame *this; /* Pointer to the SpecFrame structure */
- AstStdOfRestType sor; /* StdOfRest attribute value */
- AstSystemType sys; /* Spectral system value */
- char buff[ 20 ]; /* Buffer for item name */
- char comm[ 50 ]; /* Buffer for comment */
- const char *sval; /* Pointer to string value */
- double dval; /* Double value */
- int i; /* Loop count */
- int ival; /* int value */
- int j; /* Loop count */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SpecFrame structure. */
- this = (AstSpecFrame *) this_object;
-
-/* Write out values representing the instance variables for the
- SpecFrame class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* StdOfRest. */
-/* ---------- */
- set = TestStdOfRest( this, status );
- sor = set ? GetStdOfRest( this, status ) : astGetStdOfRest( this );
-
-/* If set, convert explicitly to a string for the external
- representation. */
- sval = "";
- if ( set ) {
- if ( astOK ) {
- sval = StdOfRestString( sor, status );
-
-/* Report an error if the StdOfRest value was not recognised. */
- if ( !sval ) {
- astError( AST__SCSIN,
- "%s(%s): Corrupt %s contains invalid standard of rest "
- "identification code (%d).", status, "astWrite",
- astGetClass( channel ), astGetClass( this ), (int) sor );
- }
- }
-
-/* If not set, use astGetAttrib which returns a string value using
- (possibly over-ridden) methods. */
- } else {
- sval = astGetAttrib( this_object, "stdofrest" );
- }
-
-/* Write out the value. */
- astWriteString( channel, "SoR", set, 1, sval, "Standard of rest" );
-
-/* AlignStdOfRest. */
-/* --------------- */
- set = TestAlignStdOfRest( this, status );
- sor = set ? GetAlignStdOfRest( this, status ) : astGetAlignStdOfRest( this );
-
-/* If set, convert explicitly to a string for the external representation. */
- if ( set ) {
- if ( astOK ) {
- sval = StdOfRestString( sor, status );
-
-/* Report an error if the StdOfRest value was not recognised. */
- if ( !sval ) {
- astError( AST__SCSIN,
- "%s(%s): Corrupt %s contains invalid alignment standard "
- "of rest identification code (%d).", status, "astWrite",
- astGetClass( channel ), astGetClass( this ), (int) sor );
- }
- }
-
-/* If not set, use astGetAttrib which returns a string value using
- (possibly over-ridden) methods. */
- } else {
- sval = astGetAttrib( this_object, "alignstdofrest" );
- }
-
-/* Write out the value. */
- astWriteString( channel, "AlSoR", set, 0, sval, "Alignment standard of rest" );
-
-/* RefRA. */
-/* ------ */
- set = TestRefRA( this, status );
- dval = set ? GetRefRA( this, status ) : astGetRefRA( this );
- astWriteDouble( channel, "RefRA", set, 0, dval, "Reference RA (rads, FK5 J2000)" );
-
-/* RefDec. */
-/* ------- */
- set = TestRefDec( this, status );
- dval = set ? GetRefDec( this, status ) : astGetRefDec( this );
- astWriteDouble( channel, "RefDec", set, 0, dval, "Reference Dec (rads, FK5 J2000)" );
-
-/* RestFreq. */
-/* --------- */
- set = TestRestFreq( this, status );
- dval = set ? GetRestFreq( this, status ) : astGetRestFreq( this );
- astWriteDouble( channel, "RstFrq", set, 0, dval, "Rest frequency (Hz)" );
-
-/* SourceVel. */
-/* ---------- */
- set = TestSourceVel( this, status );
- dval = set ? GetSourceVel( this, status ) : astGetSourceVel( this );
- astWriteDouble( channel, "SrcVel", set, 0, dval, "Source velocity (m/s)" );
-
-/* SourceVRF. */
-/* ---------- */
- set = TestSourceVRF( this, status );
- sor = set ? GetSourceVRF( this, status ) : astGetSourceVRF( this );
-
-/* If set, convert explicitly to a string for the external representation. */
- if ( set ) {
- if ( astOK ) {
- sval = StdOfRestString( sor, status );
-
-/* Report an error if the value was not recognised. */
- if ( !sval ) {
- astError( AST__SCSIN,
- "%s(%s): Corrupt %s contains invalid source velocity "
- "rest frame identification code (%d).", status, "astWrite",
- astGetClass( channel ), astGetClass( this ), (int) sor );
- }
- }
-
-/* If not set, use astGetAttrib which returns a string value using
- (possibly over-ridden) methods. */
- } else {
- sval = astGetAttrib( this_object, "sourcevrf" );
- }
-
-/* Write out the value. */
- astWriteString( channel, "SrcVRF", set, 0, sval, "Source velocity rest frame" );
-
-/* SourceSys. */
-/* ---------- */
- set = TestSourceSys( this, status );
- sys = set ? GetSourceSys( this, status ) : astGetSourceSys( this );
-
-/* If set, convert explicitly to a string for the external representation. */
- if ( set ) {
- if ( astOK ) {
- sval = SystemString( (AstFrame *) this, sys, status );
-
-/* Report an error if the value was not recognised. */
- if ( !sval ) {
- astError( AST__SCSIN,
- "%s(%s): Corrupt %s contains invalid source velocity "
- "spectral system identification code (%d).", status, "astWrite",
- astGetClass( channel ), astGetClass( this ), (int) sys );
- }
- }
-
-/* If not set, use astGetAttrib which returns a string value using
- (possibly over-ridden) methods. */
- } else {
- sval = astGetAttrib( this_object, "sourcesys" );
- }
-
-/* Write out the value. */
- astWriteString( channel, "SrcSys", set, 0, sval, "Source velocity spectral system" );
-
-/* AlignSpecOffset. */
-/* ---------------- */
- set = TestAlignSpecOffset( this, status );
- ival = set ? GetAlignSpecOffset( this, status ) : astGetAlignSpecOffset( this );
- astWriteInt( channel, "AlSpOf", set, 0, ival,
- ival ? "Align in offset coords" :
- "Align in system coords" );
-
-/* UsedUnits */
-/* --------- */
- if( this->usedunits ) {
- for( i = 0; i < this->nuunits; i++ ) {
- if( this->usedunits[ i ] ) {
- sprintf( buff, "U%s", astSystemString( this, (AstSystemType) i ));
- for( j = 2; j < strlen( buff ); j++ ) buff[ j ] = tolower( buff[ j ] );
- sprintf( comm, "Preferred units for %s", SystemLabel( (AstSystemType) i, status ) );
- astWriteString( channel, buff, 1, 0, this->usedunits[ i ], comm );
- }
- }
- }
-
-/* SpecOrigin. */
-/* ----------- */
- set = TestSpecOrigin( this, status );
- dval = set ? GetSpecOrigin( this, status ) : astGetSpecOrigin( this );
- if( dval != AST__BAD ) {
- astWriteDouble( channel, "SpOrg", set, 0, dval, "Spec offset" );
- }
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsASpecFrame and astCheckSpecFrame functions using the
- macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(SpecFrame,Frame)
-astMAKE_CHECK(SpecFrame)
-
-AstSpecFrame *astSpecFrame_( const char *options, int *status, ...) {
-/*
-*+
-* Name:
-* astSpecFrame
-
-* Purpose:
-* Create a SpecFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "specframe.h"
-* AstSpecFrame *astSpecFrame( const char *options, int *status, ... )
-
-* Class Membership:
-* SpecFrame constructor.
-
-* Description:
-* This function creates a new SpecFrame and optionally initialises its
-* attributes.
-
-* Parameters:
-* options
-* Pointer to a null terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new SpecFrame. The syntax used is the same as for the
-* astSet method and may include "printf" format specifiers identified
-* by "%" symbols in the normal way.
-* status
-* Pointer to the inherited status variable.
-* ...
-* If the "options" string contains "%" format specifiers, then an
-* optional list of arguments may follow it in order to supply values to
-* be substituted for these specifiers. The rules for supplying these
-* are identical to those for the astSet method (and for the C "printf"
-* function).
-
-* Returned Value:
-* A pointer to the new SpecFrame.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-
-* Implementation Notes:
-* - This function implements the basic SpecFrame constructor which
-* is available via the protected interface to the SpecFrame class.
-* A public interface is provided by the astSpecFrameId_ function.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMapping *um; /* Mapping from default to actual units */
- AstSpecFrame *new; /* Pointer to new SpecFrame */
- AstSystemType s; /* System */
- const char *u; /* Units string */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the SpecFrame, allocating memory and initialising the virtual
- function table as well if necessary. */
- new = astInitSpecFrame( NULL, sizeof( AstSpecFrame ), !class_init,
- &class_vtab, "SpecFrame" );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new SpecFrame's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* Check the Units are appropriate for the System. */
- u = astGetUnit( new, 0 );
- s = astGetSystem( new );
- um = astUnitMapper( DefUnit( s, "astSpecFrame", "SpecFrame", status ),
- u, NULL, NULL );
- if( um ) {
- um = astAnnul( um );
- } else {
- astError( AST__BADUN, "astSpecFrame: Inappropriate units (%s) "
- "specified for a %s axis.", status, u, SystemLabel( s, status ) );
- }
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new SpecFrame. */
- return new;
-}
-
-AstSpecFrame *astInitSpecFrame_( void *mem, size_t size, int init,
- AstSpecFrameVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitSpecFrame
-
-* Purpose:
-* Initialise a SpecFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "specframe.h"
-* AstSpecFrame *astInitSpecFrame( void *mem, size_t size, int init,
-* AstFrameVtab *vtab, const char *name )
-
-* Class Membership:
-* SpecFrame initialiser.
-
-* Description:
-* This function is provided for use by class implementations to
-* initialise a new SpecFrame object. It allocates memory (if
-* necessary) to accommodate the SpecFrame plus any additional data
-* associated with the derived class. It then initialises a
-* SpecFrame structure at the start of this memory. If the "init"
-* flag is set, it also initialises the contents of a virtual function
-* table for a SpecFrame at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the SpecFrame is to be
-* created. This must be of sufficient size to accommodate the
-* SpecFrame data (sizeof(SpecFrame)) plus any data used by
-* the derived class. If a value of NULL is given, this function
-* will allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the SpecFrame (plus derived
-* class data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also stored
-* in the SpecFrame structure, so a valid value must be supplied
-* even if not required for allocating memory.
-* init
-* A logical flag indicating if the SpecFrame's virtual function
-* table is to be initialised. If this value is non-zero, the
-* virtual function table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new SpecFrame.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object belongs
-* (it is this pointer value that will subsequently be returned by
-* the astGetClass method).
-
-* Returned Value:
-* A pointer to the new SpecFrame.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstSpecFrame *new; /* Pointer to the new SpecFrame */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitSpecFrameVtab( vtab, name );
-
-/* Initialise a 1D Frame structure (the parent class) as the first component
- within the SpecFrame structure, allocating memory if necessary. */
- new = (AstSpecFrame *) astInitFrame( mem, size, 0,
- (AstFrameVtab *) vtab, name, 1 );
-
- if ( astOK ) {
-
-/* Initialise the SpecFrame data. */
-/* ----------------------------- */
-/* Initialise all attributes to their "undefined" values. */
- new->alignstdofrest = AST__BADSOR;
- new->refdec = AST__BAD;
- new->refra = AST__BAD;
- new->restfreq = AST__BAD;
- new->sourcevel = AST__BAD;
- new->sourcevrf = AST__BADSOR;
- new->sourcesys = AST__BADSYSTEM;
- new->stdofrest = AST__BADSOR;
- new->nuunits = 0;
- new->usedunits = NULL;
- new->specorigin = AST__BAD;
- new->alignspecoffset = -INT_MAX;
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
-
- }
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstSpecFrame *astLoadSpecFrame_( void *mem, size_t size,
- AstSpecFrameVtab *vtab,
- const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadSpecFrame
-
-* Purpose:
-* Load a SpecFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "specframe.h"
-* AstSpecFrame *astLoadSpecFrame( void *mem, size_t size,
-* AstSpecFrameVtab *vtab,
-* const char *name, AstChannel *channel )
-
-* Class Membership:
-* SpecFrame loader.
-
-* Description:
-* This function is provided to load a new SpecFrame using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* SpecFrame structure in this memory, using data read from the
-* input Channel.
-
-* Parameters:
-* mem
-* A pointer to the memory into which the SpecFrame is to be
-* loaded. This must be of sufficient size to accommodate the
-* SpecFrame data (sizeof(SpecFrame)) plus any data used by
-* derived classes. If a value of NULL is given, this function
-* will allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the SpecFrame (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the SpecFrame structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstSpecFrame) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new SpecFrame. If this is NULL, a pointer
-* to the (static) virtual function table for the SpecFrame class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "SpecFrame" is used instead.
-
-* Returned Value:
-* A pointer to the new SpecFrame.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstSpecFrame *new; /* Pointer to the new SpecFrame */
- char buff[ 20 ]; /* Buffer for item name */
- char *sval; /* Pointer to string value */
- double obslat; /* Value for ObsLat attribute */
- double obslon; /* Get a pointer to the thread specific global data structure. */
-
-/* Value for ObsLon attribute */
- int i; /* Loop count */
- int j; /* Loop count */
- int nc; /* String length */
- int sys; /* System value */
-
- astGET_GLOBALS(channel);
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this SpecFrame. In this case the
- SpecFrame belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstSpecFrame );
- vtab = &class_vtab;
- name = "SpecFrame";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitSpecFrameVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built SpecFrame. */
- new = astLoadFrame( mem, size, (AstFrameVtab *) vtab, name,
- channel );
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "SpecFrame" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* StdOfRest. */
-/* ---------- */
-/* Set the default and read the external representation as a string. */
- new->stdofrest = AST__BADSOR;
- sval = astReadString( channel, "sor", NULL );
-
-/* If a value was read, convert from a string to a StdOfRest code. */
- if ( sval ) {
- if ( astOK ) {
- new->stdofrest = StdOfRestCode( sval, status );
-
-/* Report an error if the value wasn't recognised. */
- if ( new->stdofrest == AST__BADSOR ) {
- astError( AST__ATTIN,
- "astRead(%s): Invalid standard of rest description "
- "\"%s\".", status, astGetClass( channel ), sval );
- }
- }
-
-/* Free the string value. */
- sval = astFree( sval );
- }
-
-/* AlignStdOfRest. */
-/* --------------- */
-/* Set the default and read the external representation as a string. */
- new->alignstdofrest = AST__BADSOR;
- sval = astReadString( channel, "alsor", NULL );
-
-/* If a value was read, convert from a string to a StdOfRest code. */
- if ( sval ) {
- if ( astOK ) {
- new->alignstdofrest = StdOfRestCode( sval, status );
-
-/* Report an error if the value wasn't recognised. */
- if ( new->alignstdofrest == AST__BADSOR ) {
- astError( AST__ATTIN,
- "astRead(%s): Invalid alignment standard of rest "
- "description \"%s\".", status, astGetClass( channel ), sval );
- }
- }
-
-/* Free the string value. */
- sval = astFree( sval );
- }
-
-/* GeoLat. */
-/* ------- */
-/* Retained for backward compatibility with older versions of AST in
- which SpecFrame had a GeoLat attribute (now ObsLat is used instead). */
- if( !astTestObsLat( new ) ) {
- obslat = astReadDouble( channel, "geolat", AST__BAD );
- if ( obslat != AST__BAD ) astSetObsLat( new, obslat );
- }
-
-/* GeoLon. */
-/* ------- */
-/* Retained for backward compatibility with older versions of AST in
- which SpecFrame had a GeoLon attribute (now ObsLon is used instead). */
- if( !astTestObsLon( new ) ) {
- obslon = astReadDouble( channel, "geolon", AST__BAD );
- if ( obslon != AST__BAD ) astSetObsLon( new, obslon );
- }
-
-/* RefRA. */
-/* ------ */
- new->refra = astReadDouble( channel, "refra", AST__BAD );
- if ( TestRefRA( new, status ) ) SetRefRA( new, new->refra, status );
-
-/* RefDec. */
-/* ------- */
- new->refdec = astReadDouble( channel, "refdec", AST__BAD );
- if ( TestRefDec( new, status ) ) SetRefDec( new, new->refdec, status );
-
-/* RestFreq. */
-/* --------- */
- new->restfreq = astReadDouble( channel, "rstfrq", AST__BAD );
- if ( TestRestFreq( new, status ) ) SetRestFreq( new, new->restfreq, status );
-
-/* AlignSpecOffset */
-/* --------------- */
- new->alignspecoffset = astReadInt( channel, "alspof", -INT_MAX );
- if ( TestAlignSpecOffset( new, status ) ) SetAlignSpecOffset( new, new->alignspecoffset, status );
-
-/* SourceVel. */
-/* ---------- */
- new->sourcevel = astReadDouble( channel, "srcvel", AST__BAD );
- if ( TestSourceVel( new, status ) ) SetSourceVel( new, new->sourcevel, status );
-
-/* SourceVRF */
-/* --------- */
-/* Set the default and read the external representation as a string. */
- new->sourcevrf = AST__BADSOR;
- sval = astReadString( channel, "srcvrf", NULL );
-
-/* If a value was read, convert from a string to a StdOfRest code. */
- if ( sval ) {
- if ( astOK ) {
- new->sourcevrf = StdOfRestCode( sval, status );
-
-/* Report an error if the value wasn't recognised. */
- if ( new->sourcevrf == AST__BADSOR ) {
- astError( AST__ATTIN,
- "astRead(%s): Invalid source velocity rest frame "
- "description \"%s\".", status, astGetClass( channel ), sval );
- }
- }
-
-/* Free the string value. */
- sval = astFree( sval );
- }
-
-/* SourceSys */
-/* --------- */
-/* Set the default and read the external representation as a string. */
- new->sourcesys = AST__BADSYSTEM;
- sval = astReadString( channel, "srcsys", NULL );
-
-/* If a value was read, convert from a string to a System code. */
- if ( sval ) {
- if ( astOK ) {
- new->sourcesys = SystemCode( (AstFrame *) new, sval, status );
-
-/* Report an error if the value wasn't recognised. */
- if ( new->sourcesys == AST__BADSYSTEM ) {
- astError( AST__ATTIN,
- "astRead(%s): Invalid source velocity spectral system "
- "description \"%s\".", status, astGetClass( channel ), sval );
- }
- }
-
-/* Free the string value. */
- sval = astFree( sval );
- }
-
-/* UsedUnits */
-/* --------- */
- new->nuunits = 0;
- new->usedunits = NULL;
- for( sys = FIRST_SYSTEM; sys <= LAST_SYSTEM; sys++ ) {
- nc = sprintf( buff, "u%s", astSystemString( new, (AstSystemType) sys ));
- for( j = 0; j < nc; j++ ) buff[ j ] = tolower( buff[ j ] );
- sval = astReadString( channel, buff, NULL );
- if( sval ) {
- if( (int) sys >= new->nuunits ) {
- new->usedunits = astGrow( new->usedunits, sys + 1,
- sizeof(char *) );
- if( astOK ) {
- for( i = new->nuunits; i < sys + 1; i++ ) new->usedunits[ i ] = NULL;
- new->nuunits = sys + 1;
- }
- } else {
- new->usedunits[ sys ] = astFree( new->usedunits[ sys ] );
- }
- if( astOK ) {
- new->usedunits[ sys ] = astStore( new->usedunits[ sys ],
- sval, strlen( sval ) + 1 );
- }
- sval = astFree( sval);
- }
- }
-
-/* SpecOrigin. */
-/* --------- */
- new->specorigin = astReadDouble( channel, "sporg", AST__BAD );
- if ( TestSpecOrigin( new, status ) ) SetSpecOrigin( new, new->specorigin, status );
-
-
-/* If an error occurred, clean up by deleting the new SpecFrame. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new SpecFrame pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-void astGetRefPos_( AstSpecFrame *this, AstSkyFrame *frm, double *lon,
- double *lat, int *status ){
- if ( !astOK ) return;
- (**astMEMBER(this,SpecFrame,GetRefPos))(this,frm,lon,lat, status );
-}
-void astSetRefPos_( AstSpecFrame *this, AstSkyFrame *frm, double lon,
- double lat, int *status ){
- if ( !astOK ) return;
- (**astMEMBER(this,SpecFrame,SetRefPos))(this,frm,lon,lat, status );
-}
-
-void astSetStdOfRest_( AstSpecFrame *this, AstStdOfRestType value, int *status ){
- if ( !astOK ) return;
- (**astMEMBER(this,SpecFrame,SetStdOfRest))(this,value, status );
-}
-
-void astClearStdOfRest_( AstSpecFrame *this, int *status ){
- if ( !astOK ) return;
- (**astMEMBER(this,SpecFrame,ClearStdOfRest))(this, status );
-}
-
-
-
-/* Special public interface functions. */
-/* =================================== */
-/* These provide the public interface to certain special functions
- whose public interface cannot be handled using macros (such as
- astINVOKE) alone. In general, they are named after the
- corresponding protected version of the function, but with "Id"
- appended to the name. */
-
-/* Public Interface Function Prototypes. */
-/* ------------------------------------- */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstSpecFrame *astSpecFrameId_( const char *, ... );
-
-/* Special interface function implementations. */
-/* ------------------------------------------- */
-AstSpecFrame *astSpecFrameId_( const char *options, ... ) {
-/*
-*++
-* Name:
-c astSpecFrame
-f AST_SPECFRAME
-
-* Purpose:
-* Create a SpecFrame.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "specframe.h"
-c AstSpecFrame *astSpecFrame( const char *options, ... )
-f RESULT = AST_SPECFRAME( OPTIONS, STATUS )
-
-* Class Membership:
-* SpecFrame constructor.
-
-* Description:
-* This function creates a new SpecFrame and optionally initialises
-* its attributes.
-*
-* A SpecFrame is a specialised form of one-dimensional Frame which
-* represents various coordinate systems used to describe positions within
-* an electro-magnetic spectrum. The particular coordinate system to be
-* used is specified by setting the SpecFrame's System attribute (the
-* default is wavelength) qualified, as necessary, by other attributes
-* such as the rest frequency, the standard of rest, the epoch of
-* observation, etc (see the description of the System attribute for
-* details).
-*
-* By setting a value for thr SpecOrigin attribute, a SpecFrame can be made
-* to represent offsets from a given spectral position, rather than absolute
-
-* Parameters:
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new SpecFrame. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-c If no initialisation is required, a zero-length string may be
-c supplied.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new SpecFrame. The syntax used is identical to that for the
-f AST_SET routine. If no initialisation is required, a blank
-f value may be supplied.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astSpecFrame()
-f AST_SPECFRAME = INTEGER
-* A pointer to the new SpecFrame.
-
-* Examples:
-c frame = astSpecFrame( "" );
-f FRAME = AST_SPECFRAME( ' ', STATUS )
-* Creates a SpecFrame to describe the default wavelength spectral
-* coordinate system. The RestFreq attribute (rest frequency) is
-* unspecified, so it will not be possible to align this SpecFrame
-* with another SpecFrame on the basis of a velocity-based system. The
-* standard of rest is also unspecified. This means that alignment
-* will be possible with other SpecFrames, but no correction will be
-* made for Doppler shift caused by change of rest frame during the
-* alignment.
-c frame = astSpecFrame( "System=VELO, RestFreq=1.0E15, StdOfRest=LSRK" );
-f FRAME = AST_SPECFRAME( 'System=VELO, RestFreq=1.0E15, StdOfRest=LSRK', STATUS )
-* Creates a SpecFrame describing a apparent radial velocity ("VELO") axis
-* with rest frequency 1.0E15 Hz (about 3000 Angstroms), measured
-* in the kinematic Local Standard of Rest ("LSRK"). Since the
-* source position has not been specified (using attributes RefRA and
-* RefDec), it will only be possible to align this SpecFrame with
-* other SpecFrames which are also measured in the LSRK standard of
-* rest.
-
-* Notes:
-* - When conversion between two SpecFrames is requested (as when
-c supplying SpecFrames to astConvert),
-f supplying SpecFrames AST_CONVERT),
-* account will be taken of the nature of the spectral coordinate systems
-* they represent, together with any qualifying rest frequency, standard
-* of rest, epoch values, etc. The AlignSystem and AlignStdOfRest
-* attributes will also be taken into account. The results will therefore
-* fully reflect the relationship between positions measured in the two
-* systems. In addition, any difference in the Unit attributes of the two
-* systems will also be taken into account.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-
-* Implementation Notes:
-* - This function implements the external (public) interface to
-* the astSpecFrame constructor function. It returns an ID value
-* (instead of a true C pointer) to external users, and must be
-* provided because astSpecFrame_ has a variable argument list which
-* cannot be encapsulated in a macro (where this conversion would
-* otherwise occur).
-* - The variable argument list also prevents this function from
-* invoking astSpecFrame_ directly, so it must be a
-* re-implementation of it in all respects, except for the final
-* conversion of the result to an ID value.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMapping *um; /* Mapping from default to actual units */
- AstSpecFrame *new; /* Pointer to new SpecFrame */
- AstSystemType s; /* System */
- const char *u; /* Units string */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
- astGET_GLOBALS(NULL); /* Get a pointer to the thread specific global data structure. */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the SpecFrame, allocating memory and initialising the virtual
- function table as well if necessary. */
- new = astInitSpecFrame( NULL, sizeof( AstSpecFrame ), !class_init,
- &class_vtab, "SpecFrame" );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new SpecFrame's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* Check the Units are appropriate for the System. */
- u = astGetUnit( new, 0 );
- s = astGetSystem( new );
- um = astUnitMapper( DefUnit( s, "astSpecFrame", "SpecFrame", status ),
- u, NULL, NULL );
- if( um ) {
- um = astAnnul( um );
- } else {
- astError( AST__BADUN, "astSpecFrame: Inappropriate units (%s) "
- "specified for a %s axis.", status, u, SystemLabel( s, status ) );
- }
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new SpecFrame. */
- return astMakeId( new );
-}
-
diff --git a/ast-5.3-1/specframe.h b/ast-5.3-1/specframe.h
deleted file mode 100644
index 5b0d7a6..0000000
--- a/ast-5.3-1/specframe.h
+++ /dev/null
@@ -1,425 +0,0 @@
-#if !defined( SPECFRAME_INCLUDED ) /* Include this file only once */
-#define SPECFRAME_INCLUDED
-/*
-*+
-* Name:
-* specframe.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the SpecFrame class.
-
-* Invocation:
-* #include "specframe.h"
-
-* Description:
-* This include file defines the interface to the SpecFrame class
-* and provides the type definitions, function prototypes and
-* macros, etc. needed to use this class.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 12-NOV-2002 (DSB):
-* Original version.
-* 18-OCT-2006 (DSB):
-* Added SpecOrigin.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h" /* Base Object class */
-#include "frame.h" /* Parent Frame class */
-#include "skyframe.h" /* Celestial coordinate systems */
-
-/* Macros. */
-/* ======= */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-
-#if defined(astCLASS) /* Protected */
-
-/* Values used to represent different System attribute values. */
-#define AST__FREQ 1
-#define AST__ENERGY 2
-#define AST__WAVENUM 3
-#define AST__WAVELEN 4
-#define AST__AIRWAVE 5
-#define AST__VRADIO 6
-#define AST__VOPTICAL 7
-#define AST__REDSHIFT 8
-#define AST__BETA 9
-#define AST__VREL 10
-
-/* Values used to represent different StdOfRest attribute values. */
-#define AST__BADSOR 0
-#define AST__TPSOR 1
-#define AST__GESOR 2
-#define AST__BYSOR 3
-#define AST__HLSOR 4
-#define AST__LDSOR 5
-#define AST__LKSOR 6
-#define AST__LGSOR 7
-#define AST__GLSOR 8
-#define AST__SCSOR 9
-#endif
-
-/* Type Definitions. */
-/* ================= */
-
-/* Integer type used to store the spectral StdOfRest attribute. */
-typedef int AstStdOfRestType;
-
-/* SpecFrame structure. */
-/* ------------------- */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstSpecFrame {
-
-/* Attributes inherited from the parent class. */
- AstFrame frame; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- AstStdOfRestType alignstdofrest;/* Code identifying alignment StdOfRest */
- AstStdOfRestType stdofrest; /* Standard of rest */
- double refdec; /* Dec (FK5 J2000) of source */
- double refra; /* RA (FK5 J2000) of source */
- double restfreq; /* Rest frequency (Hz)*/
- double sourcevel; /* Source velocity (heliocentric, m/s) */
- AstStdOfRestType sourcevrf; /* Code identifying source vel. StdOfRest */
- AstSystemType sourcesys; /* Code identifying source vel. system */
- int nuunits; /* Size of usedunits array */
- char **usedunits; /* Last used units for each system */
- double specorigin; /* Origin for sectral values */
- int alignspecoffset; /* Align SpecFrame in offset coords? */
-} AstSpecFrame;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all objects in the
- class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstSpecFrameVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstFrameVtab frame_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- void (* GetRefPos)( AstSpecFrame *, AstSkyFrame *, double *, double *, int * );
- void (* SetRefPos)( AstSpecFrame *, AstSkyFrame *, double, double, int * );
-
- AstStdOfRestType (* GetStdOfRest)( AstSpecFrame *, int * );
- int (* TestStdOfRest)( AstSpecFrame *, int * );
- void (* ClearStdOfRest)( AstSpecFrame *, int * );
- void (* SetStdOfRest)( AstSpecFrame *, AstStdOfRestType, int * );
-
- AstStdOfRestType (* GetAlignStdOfRest)( AstSpecFrame *, int * );
- int (* TestAlignStdOfRest)( AstSpecFrame *, int * );
- void (* ClearAlignStdOfRest)( AstSpecFrame *, int * );
- void (* SetAlignStdOfRest)( AstSpecFrame *, AstStdOfRestType, int * );
-
- AstStdOfRestType (* GetSourceVRF)( AstSpecFrame *, int * );
- int (* TestSourceVRF)( AstSpecFrame *, int * );
- void (* ClearSourceVRF)( AstSpecFrame *, int * );
- void (* SetSourceVRF)( AstSpecFrame *, AstStdOfRestType, int * );
-
- AstSystemType (* GetSourceSys)( AstSpecFrame *, int * );
- int (* TestSourceSys)( AstSpecFrame *, int * );
- void (* ClearSourceSys)( AstSpecFrame *, int * );
- void (* SetSourceSys)( AstSpecFrame *, AstSystemType, int * );
-
- double (* GetRestFreq)( AstSpecFrame *, int * );
- int (* TestRestFreq)( AstSpecFrame *, int * );
- void (* ClearRestFreq)( AstSpecFrame *, int * );
- void (* SetRestFreq)( AstSpecFrame *, double, int * );
-
- double (* GetRefRA)( AstSpecFrame *, int * );
- int (* TestRefRA)( AstSpecFrame *, int * );
- void (* ClearRefRA)( AstSpecFrame *, int * );
- void (* SetRefRA)( AstSpecFrame *, double, int * );
-
- double (* GetRefDec)( AstSpecFrame *, int * );
- int (* TestRefDec)( AstSpecFrame *, int * );
- void (* ClearRefDec)( AstSpecFrame *, int * );
- void (* SetRefDec)( AstSpecFrame *, double, int * );
-
- double (* GetSourceVel)( AstSpecFrame *, int * );
- int (* TestSourceVel)( AstSpecFrame *, int * );
- void (* ClearSourceVel)( AstSpecFrame *, int * );
- void (* SetSourceVel)( AstSpecFrame *, double, int * );
-
- double (* GetSpecOrigin)( AstSpecFrame *, int * );
- int (* TestSpecOrigin)( AstSpecFrame *, int * );
- void (* ClearSpecOrigin)( AstSpecFrame *, int * );
- void (* SetSpecOrigin)( AstSpecFrame *, double, int * );
-
- int (* GetAlignSpecOffset)( AstSpecFrame *, int * );
- int (* TestAlignSpecOffset)( AstSpecFrame *, int * );
- void (* ClearAlignSpecOffset)( AstSpecFrame *, int * );
- void (* SetAlignSpecOffset)( AstSpecFrame *, int, int * );
-
-
-} AstSpecFrameVtab;
-
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstSpecFrameGlobals {
- AstSpecFrameVtab Class_Vtab;
- int Class_Init;
- char GetAttrib_Buff[ 51 ];
- char GetLabel_Buff[ 201 ];
- char GetSymbol_Buff[ 21 ];
- char GetTitle_Buff[ 201 ];
-} AstSpecFrameGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(SpecFrame) /* Check class membership */
-astPROTO_ISA(SpecFrame) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected */
-AstSpecFrame *astSpecFrame_( const char *, int *, ...);
-#else
-AstSpecFrame *astSpecFrameId_( const char *, ... );
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstSpecFrame *astInitSpecFrame_( void *, size_t, int,
- AstSpecFrameVtab *,
- const char *, int * );
-
-/* Vtab initialiser. */
-void astInitSpecFrameVtab_( AstSpecFrameVtab *, const char *, int * );
-
-/* Loader. */
-AstSpecFrame *astLoadSpecFrame_( void *, size_t,
- AstSpecFrameVtab *,
- const char *, AstChannel *channel, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitSpecFrameGlobals_( AstSpecFrameGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-void astGetRefPos_( AstSpecFrame *, AstSkyFrame *, double *, double *, int * );
-void astSetRefPos_( AstSpecFrame *, AstSkyFrame *, double, double, int * );
-
-#if defined(astCLASS) /* Protected */
-
-AstStdOfRestType astGetStdOfRest_( AstSpecFrame *, int * );
-int astTestStdOfRest_( AstSpecFrame *, int * );
-void astClearStdOfRest_( AstSpecFrame *, int * );
-void astSetStdOfRest_( AstSpecFrame *, AstStdOfRestType, int * );
-
-AstStdOfRestType astGetAlignStdOfRest_( AstSpecFrame *, int * );
-int astTestAlignStdOfRest_( AstSpecFrame *, int * );
-void astClearAlignStdOfRest_( AstSpecFrame *, int * );
-void astSetAlignStdOfRest_( AstSpecFrame *, AstStdOfRestType, int * );
-
-AstStdOfRestType astGetSourceVRF_( AstSpecFrame *, int * );
-int astTestSourceVRF_( AstSpecFrame *, int * );
-void astClearSourceVRF_( AstSpecFrame *, int * );
-void astSetSourceVRF_( AstSpecFrame *, AstStdOfRestType, int * );
-
-AstSystemType astGetSourceSys_( AstSpecFrame *, int * );
-int astTestSourceSys_( AstSpecFrame *, int * );
-void astClearSourceSys_( AstSpecFrame *, int * );
-void astSetSourceSys_( AstSpecFrame *, AstSystemType, int * );
-
-double astGetRestFreq_( AstSpecFrame *, int * );
-int astTestRestFreq_( AstSpecFrame *, int * );
-void astClearRestFreq_( AstSpecFrame *, int * );
-void astSetRestFreq_( AstSpecFrame *, double, int * );
-
-double astGetRefRA_( AstSpecFrame *, int * );
-int astTestRefRA_( AstSpecFrame *, int * );
-void astClearRefRA_( AstSpecFrame *, int * );
-void astSetRefRA_( AstSpecFrame *, double, int * );
-
-double astGetRefDec_( AstSpecFrame *, int * );
-int astTestRefDec_( AstSpecFrame *, int * );
-void astClearRefDec_( AstSpecFrame *, int * );
-void astSetRefDec_( AstSpecFrame *, double, int * );
-
-double astGetSourceVel_( AstSpecFrame *, int * );
-int astTestSourceVel_( AstSpecFrame *, int * );
-void astClearSourceVel_( AstSpecFrame *, int * );
-void astSetSourceVel_( AstSpecFrame *, double, int * );
-
-double astGetSpecOrigin_( AstSpecFrame *, int * );
-int astTestSpecOrigin_( AstSpecFrame *, int * );
-void astClearSpecOrigin_( AstSpecFrame *, int * );
-void astSetSpecOrigin_( AstSpecFrame *, double, int * );
-
-int astGetAlignSpecOffset_( AstSpecFrame *, int * );
-int astTestAlignSpecOffset_( AstSpecFrame *, int * );
-void astClearAlignSpecOffset_( AstSpecFrame *, int * );
-void astSetAlignSpecOffset_( AstSpecFrame *, int, int * );
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckSpecFrame(this) astINVOKE_CHECK(SpecFrame,this,0)
-#define astVerifySpecFrame(this) astINVOKE_CHECK(SpecFrame,this,1)
-
-/* Test class membership. */
-#define astIsASpecFrame(this) astINVOKE_ISA(SpecFrame,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected */
-#define astSpecFrame astINVOKE(F,astSpecFrame_)
-#else
-#define astSpecFrame astINVOKE(F,astSpecFrameId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitSpecFrame(mem,size,init,vtab,name) \
-astINVOKE(O,astInitSpecFrame_(mem,size,init,vtab,name,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitSpecFrameVtab(vtab,name) astINVOKE(V,astInitSpecFrameVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadSpecFrame(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadSpecFrame_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-
-/* None. */
-
-/* Interfaces to protected member functions. */
-/* ----------------------------------------- */
-/* Here we make use of astCheckSpecFrame to validate SpecFrame pointers
- before use. This provides a contextual error report if a pointer to
- the wrong sort of object is supplied. */
-
-#define astGetRefPos(this,frm,lon,lat) astINVOKE(V,astGetRefPos_(astCheckSpecFrame(this),(frm==NULL?NULL:astCheckSkyFrame(frm)),lon,lat,STATUS_PTR))
-#define astSetRefPos(this,frm,lon,lat) astINVOKE(V,astSetRefPos_(astCheckSpecFrame(this),(frm==NULL?NULL:astCheckSkyFrame(frm)),lon,lat,STATUS_PTR))
-
-#if defined(astCLASS) /* Protected */
-
-#define astGetStdOfRest(this) astINVOKE(V,astGetStdOfRest_(astCheckSpecFrame(this),STATUS_PTR))
-#define astTestStdOfRest(this) astINVOKE(V,astTestStdOfRest_(astCheckSpecFrame(this),STATUS_PTR))
-#define astClearStdOfRest(this) astINVOKE(V,astClearStdOfRest_(astCheckSpecFrame(this),STATUS_PTR))
-#define astSetStdOfRest(this,value) astINVOKE(V,astSetStdOfRest_(astCheckSpecFrame(this),value,STATUS_PTR))
-
-#define astGetAlignStdOfRest(this) astINVOKE(V,astGetAlignStdOfRest_(astCheckSpecFrame(this),STATUS_PTR))
-#define astTestAlignStdOfRest(this) astINVOKE(V,astTestAlignStdOfRest_(astCheckSpecFrame(this),STATUS_PTR))
-#define astClearAlignStdOfRest(this) astINVOKE(V,astClearAlignStdOfRest_(astCheckSpecFrame(this),STATUS_PTR))
-#define astSetAlignStdOfRest(this,value) astINVOKE(V,astSetAlignStdOfRest_(astCheckSpecFrame(this),value,STATUS_PTR))
-
-#define astGetSourceVRF(this) astINVOKE(V,astGetSourceVRF_(astCheckSpecFrame(this),STATUS_PTR))
-#define astTestSourceVRF(this) astINVOKE(V,astTestSourceVRF_(astCheckSpecFrame(this),STATUS_PTR))
-#define astClearSourceVRF(this) astINVOKE(V,astClearSourceVRF_(astCheckSpecFrame(this),STATUS_PTR))
-#define astSetSourceVRF(this,value) astINVOKE(V,astSetSourceVRF_(astCheckSpecFrame(this),value,STATUS_PTR))
-
-#define astGetSourceSys(this) astINVOKE(V,astGetSourceSys_(astCheckSpecFrame(this),STATUS_PTR))
-#define astTestSourceSys(this) astINVOKE(V,astTestSourceSys_(astCheckSpecFrame(this),STATUS_PTR))
-#define astClearSourceSys(this) astINVOKE(V,astClearSourceSys_(astCheckSpecFrame(this),STATUS_PTR))
-#define astSetSourceSys(this,value) astINVOKE(V,astSetSourceSys_(astCheckSpecFrame(this),value,STATUS_PTR))
-
-#define astGetRestFreq(this) astINVOKE(V,astGetRestFreq_(astCheckSpecFrame(this),STATUS_PTR))
-#define astTestRestFreq(this) astINVOKE(V,astTestRestFreq_(astCheckSpecFrame(this),STATUS_PTR))
-#define astClearRestFreq(this) astINVOKE(V,astClearRestFreq_(astCheckSpecFrame(this),STATUS_PTR))
-#define astSetRestFreq(this,value) astINVOKE(V,astSetRestFreq_(astCheckSpecFrame(this),value,STATUS_PTR))
-
-#define astGetRefRA(this) astINVOKE(V,astGetRefRA_(astCheckSpecFrame(this),STATUS_PTR))
-#define astTestRefRA(this) astINVOKE(V,astTestRefRA_(astCheckSpecFrame(this),STATUS_PTR))
-#define astClearRefRA(this) astINVOKE(V,astClearRefRA_(astCheckSpecFrame(this),STATUS_PTR))
-#define astSetRefRA(this,value) astINVOKE(V,astSetRefRA_(astCheckSpecFrame(this),value,STATUS_PTR))
-
-#define astGetRefDec(this) astINVOKE(V,astGetRefDec_(astCheckSpecFrame(this),STATUS_PTR))
-#define astTestRefDec(this) astINVOKE(V,astTestRefDec_(astCheckSpecFrame(this),STATUS_PTR))
-#define astClearRefDec(this) astINVOKE(V,astClearRefDec_(astCheckSpecFrame(this),STATUS_PTR))
-#define astSetRefDec(this,value) astINVOKE(V,astSetRefDec_(astCheckSpecFrame(this),value,STATUS_PTR))
-
-#define astGetSourceVel(this) astINVOKE(V,astGetSourceVel_(astCheckSpecFrame(this),STATUS_PTR))
-#define astTestSourceVel(this) astINVOKE(V,astTestSourceVel_(astCheckSpecFrame(this),STATUS_PTR))
-#define astClearSourceVel(this) astINVOKE(V,astClearSourceVel_(astCheckSpecFrame(this),STATUS_PTR))
-#define astSetSourceVel(this,value) astINVOKE(V,astSetSourceVel_(astCheckSpecFrame(this),value,STATUS_PTR))
-
-#define astGetSpecOrigin(this) astINVOKE(V,astGetSpecOrigin_(astCheckSpecFrame(this),STATUS_PTR))
-#define astTestSpecOrigin(this) astINVOKE(V,astTestSpecOrigin_(astCheckSpecFrame(this),STATUS_PTR))
-#define astClearSpecOrigin(this) astINVOKE(V,astClearSpecOrigin_(astCheckSpecFrame(this),STATUS_PTR))
-#define astSetSpecOrigin(this,value) astINVOKE(V,astSetSpecOrigin_(astCheckSpecFrame(this),value,STATUS_PTR))
-
-#define astClearAlignSpecOffset(this) astINVOKE(V,astClearAlignSpecOffset_(astCheckSpecFrame(this),STATUS_PTR))
-#define astGetAlignSpecOffset(this) astINVOKE(V,astGetAlignSpecOffset_(astCheckSpecFrame(this),STATUS_PTR))
-#define astSetAlignSpecOffset(this,value) astINVOKE(V,astSetAlignSpecOffset_(astCheckSpecFrame(this),value,STATUS_PTR))
-#define astTestAlignSpecOffset(this) astINVOKE(V,astTestAlignSpecOffset_(astCheckSpecFrame(this),STATUS_PTR))
-
-
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/specmap.c b/ast-5.3-1/specmap.c
deleted file mode 100644
index df889be..0000000
--- a/ast-5.3-1/specmap.c
+++ /dev/null
@@ -1,4678 +0,0 @@
-/*
-*class++
-* Name:
-* SpecMap
-
-* Purpose:
-* Sequence of spectral coordinate conversions.
-
-* Constructor Function:
-c astSpecMap (also see astSpecAdd)
-f AST_SPECMAP (also see AST_SPECADD)
-
-* Description:
-* A SpecMap is a specialised form of Mapping which can be used to
-* represent a sequence of conversions between standard spectral
-* coordinate systems.
-*
-* When an SpecMap is first created, it simply performs a unit
-c (null) Mapping. Using the astSpecAdd
-f (null) Mapping. Using the AST_SPECADD
-c function, a series of coordinate conversion steps may then be
-f routine, a series of coordinate conversion steps may then be
-* added. This allows multi-step conversions between a variety of
-* spectral coordinate systems to be assembled out of a set of building
-* blocks.
-*
-* Conversions are available to transform between standards of rest.
-* Such conversions need to know the source position as an RA and DEC.
-* This information can be supplied in the form of parameters for
-* the relevant conversions, in which case the SpecMap is 1-dimensional,
-* simply transforming the spectral axis values. This means that the
-* same source position will always be used by the SpecMap. However, this
-* may not be appropriate for an accurate description of a 3-D spectral
-* cube, where changes of spatial position can produce significant
-* changes in the Doppler shift introduced when transforming between
-* standards of rest. For this situation, a 3-dimensional SpecMap can
-* be created in which axes 2 and 3 correspond to the source RA and DEC
-* The SpecMap simply copies values for axes 2 and 3 from input to
-* output), but modifies axis 1 values (the spectral axis) appropriately.
-*
-* For details of the individual coordinate conversions available,
-c see the description of the astSpecAdd function.
-f see the description of the AST_SPECADD routine.
-
-* Inheritance:
-* The SpecMap class inherits from the Mapping class.
-
-* Attributes:
-* The SpecMap class does not define any new attributes beyond those
-* which are applicable to all Mappings.
-
-* Functions:
-c In addition to those functions applicable to all Mappings, the
-c following function may also be applied to all SpecMaps:
-f In addition to those routines applicable to all Mappings, the
-f following routine may also be applied to all SpecMaps:
-*
-c - astSpecAdd: Add a spectral coordinate conversion to an SpecMap
-f - AST_SPECADD: Add a spectral coordinate conversion to an SpecMap
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2009 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 6-NOV-2002 (DSB):
-* Original version.
-* 14-JUL-2003 (DSB):
-* Added checks for NAN values produced by transformation functions.
-* 17-SEP-2003 (DSB):
-* - Improve FRTOAW accuracy by iterating.
-* - Changed Refrac to use algorithm given in FITS-WCS paper 3
-* version dated 21/9/03.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 10-MAY-2006 (DSB):
-* Override astEqual.
-* 15-NOV-2006 (DSB):
-* Guard against division by zero when converting freq to wave in
-* SystemChange.
-* 18-JUN-2009 (DSB):
-* Add OBSALT argument to TPF2HL and HLF2TP conversions.
-* Change GEOLON/LAT to OBSLON/LAT for consistency with other
-* classes.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS SpecMap
-
-/* Codes to identify spectral coordinate conversions. */
-#define AST__SPEC_NULL 0 /* Null value */
-#define AST__FRTOVL 1 /* Frequency to relativistic velocity */
-#define AST__VLTOFR 2 /* Relativistic velocity to Frequency */
-#define AST__ENTOFR 3 /* Energy to frequency */
-#define AST__FRTOEN 4 /* Frequency to energy */
-#define AST__WNTOFR 5 /* Wave number to frequency */
-#define AST__FRTOWN 6 /* Frequency to wave number */
-#define AST__WVTOFR 7 /* Wavelength (vacuum) to frequency */
-#define AST__FRTOWV 8 /* Frequency to wavelength (vacuum) */
-#define AST__AWTOFR 9 /* Wavelength (air) to frequency */
-#define AST__FRTOAW 10 /* Frequency to wavelength (air) */
-#define AST__VRTOVL 11 /* Radio to relativistic velocity */
-#define AST__VLTOVR 12 /* Relativistic to radio velocity */
-#define AST__VOTOVL 13 /* Optical to relativistic velocity */
-#define AST__VLTOVO 14 /* Relativistic to optical velocity */
-#define AST__ZOTOVL 15 /* Redshift to relativistic velocity */
-#define AST__VLTOZO 16 /* Relativistic velocity to redshift */
-#define AST__BTTOVL 17 /* Beta factor to relativistic velocity */
-#define AST__VLTOBT 18 /* Relativistic velocity to beta factor */
-#define AST__USF2HL 19 /* User-defined to heliocentric frequency */
-#define AST__HLF2US 20 /* Heliocentric to user-defined frequency */
-#define AST__TPF2HL 21 /* Topocentric to heliocentric frequency */
-#define AST__HLF2TP 22 /* Heliocentric to topocentric frequency */
-#define AST__GEF2HL 23 /* Geocentric to heliocentric frequency */
-#define AST__HLF2GE 24 /* Heliocentric to geocentric frequency */
-#define AST__BYF2HL 25 /* Barycentric to heliocentric frequency */
-#define AST__HLF2BY 26 /* Heliocentric to barycentric frequency */
-#define AST__LKF2HL 27 /* LSRK to heliocentric frequency */
-#define AST__HLF2LK 28 /* Heliocentric to LSRK frequency */
-#define AST__LDF2HL 29 /* LSRD to heliocentric frequency */
-#define AST__HLF2LD 30 /* Heliocentric to LSRD frequency */
-#define AST__LGF2HL 31 /* Local group to heliocentric frequency */
-#define AST__HLF2LG 32 /* Heliocentric to local group frequency */
-#define AST__GLF2HL 33 /* Galactic to heliocentric frequency */
-#define AST__HLF2GL 34 /* Heliocentric to galactic frequency */
-
-/* Maximum number of arguments required by a conversion. */
-#define MAX_ARGS 7
-
-/* The alphabet (used for generating keywords for arguments). */
-#define ALPHABET "abcdefghijklmnopqrstuvwxyz"
-
-/* Angle conversion */
-#define PI 3.141592653589793238462643
-#define PIBY2 (PI/2.0)
-#define D2R (PI/180.0)
-#define R2D (180.0/PI)
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
- compare bad values directory because of the danger of floating point
- exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "pal.h" /* SLALIB interface */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "mapping.h" /* Coordinate Mappings (parent class) */
-#include "unitmap.h" /* Unit (null) Mappings */
-#include "specmap.h" /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static double (* parent_rate)( AstMapping *, double *, int, int, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(SpecMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(SpecMap,Class_Init)
-#define class_vtab astGLOBAL(SpecMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstSpecMapVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* Structure to hold parameters and intermediate values describing a
- reference frame */
-typedef struct FrameDef {
- double obsalt; /* Observers geodetic altitude (m) */
- double obslat; /* Observers geodetic latitude (rads) */
- double obslon; /* Observers geodetic longitude (rads, +ve east) */
- double epoch; /* Julian epoch of observation */
- double refdec; /* RA of reference point (FK5 J2000) */
- double refra; /* DEC of reference point (FK5 J2000) */
- double veluser; /* Heliocentric velocity of user-defined system (m/s) */
- double last; /* Local apparent sideral time */
- double amprms[21]; /* Mean to apparent parameters */
- double vuser[3]; /* Used-defined velocity as a FK5 J2000 vector */
- double dvh[3]; /* Earth-sun velocity */
- double dvb[3]; /* Barycentre-sun velocity */
-} FrameDef;
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstSpecMap *astSpecMapId_( int, int, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *CvtString( int, const char **, int *, int *, int *, int *, const char *[ MAX_ARGS ], int * );
-static double BaryVel( double, double, FrameDef *, int * );
-static double GalVel( double, double, FrameDef *, int * );
-static double GeoVel( double, double, FrameDef *, int * );
-static double LgVel( double, double, FrameDef *, int * );
-static double LsrdVel( double, double, FrameDef *, int * );
-static double LsrkVel( double, double, FrameDef *, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static double Refrac( double, int * );
-static double Rverot( double, double, double, double, double, int * );
-static double TopoVel( double, double, FrameDef *, int * );
-static double UserVel( double, double, FrameDef *, int * );
-static int CvtCode( const char *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int FrameChange( int, int, double *, double *, double *, double *, int, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int SystemChange( int, int, double *, double *, int, int * );
-static void AddSpecCvt( AstSpecMap *, int, const double *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void SpecAdd( AstSpecMap *, const char *, const double[], int * );
-
-static int GetObjSize( AstObject *, int * );
-/* Member functions. */
-/* ================= */
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two SpecMaps are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specmap.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* SpecMap member function (over-rides the astEqual protected
-* method inherited from the astMapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two SpecMaps are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Object (a SpecMap).
-* that
-* Pointer to the second Object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the SpecMaps are equivalent, zero otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSpecMap *that;
- AstSpecMap *this;
- const char *argdesc[ MAX_ARGS ];
- const char *comment;
- int argdec;
- int argra;
- int i, j;
- int nargs;
- int nin;
- int nout;
- int result;
- int szargs;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain pointers to the two SpecMap structures. */
- this = (AstSpecMap *) this_object;
- that = (AstSpecMap *) that_object;
-
-/* Check the second object is a SpecMap. We know the first is a
- SpecMap since we have arrived at this implementation of the virtual
- function. */
- if( astIsASpecMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
- nin = astGetNin( this );
- nout = astGetNout( this );
- if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two SpecMaps differ, it may still be possible
- for them to be equivalent. First compare the SpecMaps if their Invert
- flags are the same. In this case all the attributes of the two SpecMaps
- must be identical. */
- if( astGetInvert( this ) == astGetInvert( that ) ) {
- if( this->ncvt == that->ncvt ) {
- result = 1;
- for( i = 0; i < this->ncvt && result; i++ ) {
- if( this->cvttype[ i ] != that->cvttype[ i ] ) {
- result = 0;
- } else {
- CvtString( this->cvttype[ i ], &comment, &argra,
- &argdec, &nargs, &szargs, argdesc, status );
- for( j = 0; j < nargs; j++ ) {
- if( !astEQUAL( this->cvtargs[ i ][ j ],
- that->cvtargs[ i ][ j ] ) ){
- result = 0;
- break;
- }
- }
- }
- }
- }
-
-/* If the Invert flags for the two SpecMaps differ, the attributes of the two
- SpecMaps must be inversely related to each other. */
- } else {
-
-/* In the specific case of a SpecMap, Invert flags must be equal. */
- result = 0;
-
- }
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specmap.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* SpecMap member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied SpecMap,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the SpecMap.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSpecMap *this; /* Pointer to SpecMap structure */
- int result; /* Result value to return */
- int cvt; /* Loop counter for coordinate conversions */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the SpecMap structure. */
- this = (AstSpecMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
-
- for ( cvt = 0; cvt < this->ncvt; cvt++ ) {
- result += astTSizeOf( this->cvtargs[ cvt ] );
- }
-
- result += astTSizeOf( this->cvtargs );
- result += astTSizeOf( this->cvttype );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static void AddSpecCvt( AstSpecMap *this, int cvttype, const double *args, int *status ) {
-/*
-* Name:
-* AddSpecCvt
-
-* Purpose:
-* Add a coordinate conversion step to an SpecMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specmap.h"
-* void AddSpecCvt( AstSpecMap *this, int cvttype, const double *args )
-
-* Class Membership:
-* SpecMap member function.
-
-* Description:
-* This function allows one of the supported spectral coordinate
-* conversions to be appended to a SpecMap. When a SpecMap is first
-* created (using astSpecMap), it simply performs a unit mapping. By
-* using AddSpecCvt repeatedly, a series of coordinate conversions may
-* then be specified which the SpecMap will subsequently perform in
-* sequence. This allows a complex coordinate conversion to be
-* assembled out of the basic building blocks. The SpecMap will also
-* perform the inverse coordinate conversion (applying the individual
-* conversion steps in reverse) if required.
-
-* Parameters:
-* this
-* Pointer to the SpecMap.
-* cvttype
-* A code to identify which spectral coordinate conversion is to be
-* appended. See the "Coordinate Conversions" section for details
-* of those available.
-* args
-* Pointer to an array of double containing the argument values
-* required to fully specify the required coordinate
-* conversion. The number of arguments depends on the conversion
-* (see the "Coordinate Conversions" section for details). This
-* value is ignored and may be NULL if no arguments are required.
-
-* Returned Value:
-* void.
-
-* Coordinate Conversions:
-* The following values may be supplied for the "cvttype" parameter
-* in order to specify the coordinate conversion to be performed.
-* The argument(s) required to fully specify each conversion are
-* indicated in parentheses after each value, and described at the end
-* of the list. Values for these should be given in the array pointed
-* at by "args".
-*
-* AST__FRTOVL( RF )
-* Convert frequency to relativistic velocity.
-* AST__VLTOFR( RF )
-* Convert relativistic velocity to Frequency.
-* AST__ENTOFR
-* Convert energy to frequency.
-* AST__FRTOEN
-* Convert frequency to energy.
-* AST__WNTOFR
-* Convert wave number to frequency.
-* AST__FRTOWN
-* Convert frequency to wave number.
-* AST__WVTOFR
-* Convert wavelength (vacuum) to frequency.
-* AST__FRTOWV
-* Convert frequency to wavelength (vacuum).
-* AST__AWTOFR
-* Convert wavelength (air) to frequency.
-* AST__FRTOAW
-* Convert frequency to wavelength (air).
-* AST__VRTOVL
-* Convert radio to relativistic velocity.
-* AST__VLTOVR
-* Convert relativistic to radio velocity.
-* AST__VOTOVL
-* Convert optical to relativistic velocity.
-* AST__VLTOVO
-* Convert relativistic to optical velocity.
-* AST__ZOTOVL
-* Convert redshift to relativistic velocity.
-* AST__VLTOZO
-* Convert relativistic velocity to redshift.
-* AST__BTTOVL
-* Convert beta factor to relativistic velocity.
-* AST__VLTOBT
-* Convert relativistic velocity to beta factor.
-* AST_USF2HL( VOFF, RA, DEC )
-* Convert frequency from a user-defined reference frame to
-* heliocentric.
-* AST__HLF2US( VOFF, RA, DEC )
-* Convert frequency from heliocentric reference frame to
-* user-defined.
-* AST__TPF2HL( OBSLON, OBSLAT, OBSALT, EPOCH, RA, DEC )
-* Convert from Topocentric to heliocentric frequency
-* AST__HLF2TP( OBSLON, OBSLAT, OBSALT, EPOCH, RA, DEC )
-* Convert from Heliocentric to topocentric frequency.
-* AST__GEF2HL( EPOCH, RA, DEC )
-* Convert from Geocentric to heliocentric frequency.
-* AST__HLF2GE( EPOCH, RA, DEC )
-* Convert from Heliocentric to geocentric frequency.
-* AST__BYF2HL( EPOCH, RA, DEC )
-* Convert from Barycentric to heliocentric frequency.
-* AST__HLF2BY( EPOCH, RA, DEC )
-* Convert from Heliocentric to barycentric frequency.
-* AST__LKF2HL( RA, DEC )
-* Convert from LSRK to heliocentric frequency.
-* AST__HLF2LK( RA, DEC )
-* Convert from Heliocentric to LSRK frequency.
-* AST__LDF2HL( RA, DEC )
-* Convert from LSRD to heliocentric frequency.
-* AST__HLF2LD( RA, DEC )
-* Convert from Heliocentric to LSRD frequency.
-* AST__LGF2HL( RA, DEC )
-* Convert from Local group to heliocentric frequency.
-* AST__HLF2LG( RA, DEC )
-* Convert from Heliocentric to local group frequency.
-* AST__GLF2HL( RA, DEC )
-* Convert from Galactic to heliocentric frequency.
-* AST__HLF2GL( RA, DEC )
-* Convert from Heliocentric to galactic frequency.
-*
-* The units for the values processed by the above conversions are as
-* follows:
-*
-* - all velocities: metres per second.
-* - frequency: Hertz.
-* - all wavelengths: metres.
-* - energy: Joules.
-* - wave number: cycles per metre.
-*
-* The arguments used in the above conversions are as follows:
-*
-* - RF: Rest frequency (Hz).
-* - OBSALT: Geodetic altitude of observer (IAU 1975, metres).
-* - OBSLAT: Geodetic latitude of observer (IAU 1975, radians).
-* - OBSLON: Longitude of observer (radians, positive eastwards).
-* - EPOCH: Epoch of observation (UT1 expressed as a Modified Julian Date).
-* - RA: Right Ascension of source (radians, FK5 J2000).
-* - DEC: Declination of source (radians, FK5 J2000).
-* - VOFF: Velocity of the user-defined reference frame, towards the
-* position given by RA and DEC, measured in the heliocentric
-* reference frame.
-*
-* If the SpecMap is 3-dimensional, source positions are provided by the
-* values supplied to inputs 2 and 3 of the SpecMap (which are simply
-* copied to outputs 2 and 3). Note, usable values are still required
-* for the RA and DEC arguments in order to define the "user-defined"
-* reference frame used by USF2HL and HLF2US. However, AST__BAD can be
-* supplied for RA and DEC if the user-defined reference frame is not
-* required.
-
-* Notes:
-* - The specified conversion is appended only if the SpecMap's
-* Invert attribute is zero. If it is non-zero, this function
-* effectively prefixes the inverse of the conversion specified
-* instead.
-*/
-
-/* Local Variables: */
- const char *argdesc[ MAX_ARGS ]; /* Pointers to argument descriptions */
- const char *comment; /* Pointer to comment string */
- const char *cvt_string; /* Pointer to conversion type string */
- int argdec; /* Index of DEC argument */
- int argra; /* Index of RA argument */
- int i; /* Argument index */
- int nargs; /* Number of user-supplied arguments */
- int ncvt; /* Number of coordinate conversions */
- int szargs; /* Size of arguments array */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Validate the coordinate conversion type and obtain the number of
- required user-supplied arguments, and the size of the array in which
- to put the user-supplied arguments (the array meay leave room after
- the user-supplied arguments for various useful pre-calculated values). */
- cvt_string = CvtString( cvttype, &comment, &argra, &argdec, &nargs,
- &szargs, argdesc, status );
-
-/* If the coordinate conversion type was not valid, then report an
- error. */
- if ( astOK && !cvt_string ) {
- astError( AST__SPCIN, "AddSpecCvt(%s): Invalid spectral coordinate "
- "conversion type (%d).", status, astGetClass( this ),
- (int) cvttype );
- }
-
-/* Note the number of coordinate conversions already stored in the SpecMap. */
- if ( astOK ) {
- ncvt = this->ncvt;
-
-/* Extend the array of conversion types and the array of pointers to
- their argument lists to accommodate the new one. */
- this->cvttype = (int *) astGrow( this->cvttype, ncvt + 1,
- sizeof( int ) );
- this->cvtargs = (double **) astGrow( this->cvtargs, ncvt + 1,
- sizeof( double * ) );
-
-/* If OK, allocate memory and store a copy of the argument list,
- putting a pointer to the copy into the SpecMap. */
- if ( astOK ) {
- this->cvtargs[ ncvt ] = astStore( NULL, args,
- sizeof( double ) * (size_t) szargs );
- }
-
-/* Store the conversion type and increment the conversion count. Also put
- AST__BAD in any elements of the argument array which are beyond the
- end of the user-supplied arguments. These will be used to hold
- intermediate values calculated on the basis of the user-supplied
- arguments. */
- if ( astOK ) {
- this->cvttype[ ncvt ] = cvttype;
- this->ncvt++;
- for( i = nargs; i < szargs; i++ ) this->cvtargs[ ncvt ][ i ] = AST__BAD;
- }
- }
-}
-
-static double BaryVel( double ra, double dec, FrameDef *def, int *status ) {
-/*
-* Name:
-* BaryVel
-
-* Purpose:
-* Find the velocity of the earth-sun barycentre away from the source.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specmap.h"
-* double BaryVel( double ra, double dec, FrameDef *def, int *status )
-
-* Class Membership:
-* SpecMap method.
-
-* Description:
-* This function finds the component of the velocity of the earth-sun
-* barycentre away from a specified source position, at a given epoch, in
-* the frame of rest of the centre of the Sun.
-
-* Parameters:
-* ra
-* The RA (rads, FK5 J2000) of the source.
-* dec
-* The Dec (rads, FK5 J2000) of the source.
-* def
-* Pointer to a FrameDef structure which holds the parameters which
-* define the frame, together with cached intermediate results.
-* status
-* Pointer to the inherited status variable.
-
-* Returns:
-* The component of the frame's velocity away from the position given by
-* "ra" and "dec", in m/s, measured within the Heliographic frame of
-* rest. Zero is returned if an error has already occurred.
-
-*/
-
-/* Local Variables: */
- double dpb[ 3 ]; /* Barycentric earth position vector */
- double dph[ 3 ]; /* Heliocentric earth position vector */
- double dvh[ 3 ]; /* Heliocentric earth velocity vector */
- double v[ 3 ]; /* Source direction vector */
-
-/* Check the global error status. */
- if ( !astOK ) return 0.0;
-
-/* Get the Cartesian vector towards the source, in the Cartesian FK5
- J2000 system. */
- palSlaDcs2c( ra, dec, v );
-
-/* If not already done so, get the Earth/Sun velocity and position vectors in
- the same system. Speed is returned in units of AU/s. Store in the supplied
- frame definition structure. */
- if( def->dvb[ 0 ] == AST__BAD ) {
- palSlaEvp( def->epoch, 2000.0, def->dvb, dpb, dvh, dph );
-
-/* Change the barycentric velocity of the earth into the heliocentric
- velocity of the barycentre. */
- def->dvb[ 0 ] = dvh[ 0 ] - def->dvb[ 0 ];
- def->dvb[ 1 ] = dvh[ 1 ] - def->dvb[ 1 ];
- def->dvb[ 2 ] = dvh[ 2 ] - def->dvb[ 2 ];
- }
-
-/* Return the component away from the source, of the velocity of the
- barycentre relative to the sun (in m/s). */
- return -palSlaDvdv( v, def->dvb )*149.597870E9;
-
-}
-
-static int CvtCode( const char *cvt_string, int *status ) {
-/*
-* Name:
-* CvtCode
-
-* Purpose:
-* Convert a conversion type from a string representation to a code value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specmap.h"
-* int CvtCode( const char *cvt_string, int *status )
-
-* Class Membership:
-* SpecMap member function.
-
-* Description:
-* This function accepts a string used to repersent one of the
-* SpecMap coordinate conversions and converts it into a code
-* value for internal use.
-
-* Parameters:
-* cvt_string
-* Pointer to a constant null-terminated string representing a
-* spectral coordinate conversion. This is case sensitive and should
-* contain no unnecessary white space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The equivalent conversion code. If the string was not
-* recognised, the code AST__SPEC_NULL is returned, without error.
-
-* Notes:
-* - A value of AST__SPEC_NULL will be returned if this function is
-* invoked with the global error status set, or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = AST__SPEC_NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Test the string against each recognised value in turn and assign
- the result. */
- if ( astChrMatch( cvt_string, "FRTOVL" ) ) {
- result = AST__FRTOVL;
-
- } else if ( astChrMatch( cvt_string, "VLTOFR" ) ) {
- result = AST__VLTOFR;
-
- } else if ( astChrMatch( cvt_string, "VLTOFR" ) ) {
- result = AST__VLTOFR;
-
- } else if ( astChrMatch( cvt_string, "ENTOFR" ) ) {
- result = AST__ENTOFR;
-
- } else if ( astChrMatch( cvt_string, "FRTOEN" ) ) {
- result = AST__FRTOEN;
-
- } else if ( astChrMatch( cvt_string, "WNTOFR" ) ) {
- result = AST__WNTOFR;
-
- } else if ( astChrMatch( cvt_string, "FRTOWN" ) ) {
- result = AST__FRTOWN;
-
- } else if ( astChrMatch( cvt_string, "WVTOFR" ) ) {
- result = AST__WVTOFR;
-
- } else if ( astChrMatch( cvt_string, "FRTOWV" ) ) {
- result = AST__FRTOWV;
-
- } else if ( astChrMatch( cvt_string, "AWTOFR" ) ) {
- result = AST__AWTOFR;
-
- } else if ( astChrMatch( cvt_string, "FRTOAW" ) ) {
- result = AST__FRTOAW;
-
- } else if ( astChrMatch( cvt_string, "VRTOVL" ) ) {
- result = AST__VRTOVL;
-
- } else if ( astChrMatch( cvt_string, "VLTOVR" ) ) {
- result = AST__VLTOVR;
-
- } else if ( astChrMatch( cvt_string, "VOTOVL" ) ) {
- result = AST__VOTOVL;
-
- } else if ( astChrMatch( cvt_string, "VLTOVO" ) ) {
- result = AST__VLTOVO;
-
- } else if ( astChrMatch( cvt_string, "ZOTOVL" ) ) {
- result = AST__ZOTOVL;
-
- } else if ( astChrMatch( cvt_string, "VLTOZO" ) ) {
- result = AST__VLTOZO;
-
- } else if ( astChrMatch( cvt_string, "BTTOVL" ) ) {
- result = AST__BTTOVL;
-
- } else if ( astChrMatch( cvt_string, "VLTOBT" ) ) {
- result = AST__VLTOBT;
-
- } else if ( astChrMatch( cvt_string, "USF2HL" ) ) {
- result = AST__USF2HL;
-
- } else if ( astChrMatch( cvt_string, "HLF2US" ) ) {
- result = AST__HLF2US;
-
- } else if ( astChrMatch( cvt_string, "TPF2HL" ) ) {
- result = AST__TPF2HL;
-
- } else if ( astChrMatch( cvt_string, "HLF2TP" ) ) {
- result = AST__HLF2TP;
-
- } else if ( astChrMatch( cvt_string, "GEF2HL" ) ) {
- result = AST__GEF2HL;
-
- } else if ( astChrMatch( cvt_string, "HLF2GE" ) ) {
- result = AST__HLF2GE;
-
- } else if ( astChrMatch( cvt_string, "BYF2HL" ) ) {
- result = AST__BYF2HL;
-
- } else if ( astChrMatch( cvt_string, "HLF2BY" ) ) {
- result = AST__HLF2BY;
-
- } else if ( astChrMatch( cvt_string, "LKF2HL" ) ) {
- result = AST__LKF2HL;
-
- } else if ( astChrMatch( cvt_string, "HLF2LK" ) ) {
- result = AST__HLF2LK;
-
- } else if ( astChrMatch( cvt_string, "LDF2HL" ) ) {
- result = AST__LDF2HL;
-
- } else if ( astChrMatch( cvt_string, "HLF2LD" ) ) {
- result = AST__HLF2LD;
-
- } else if ( astChrMatch( cvt_string, "LGF2HL" ) ) {
- result = AST__LGF2HL;
-
- } else if ( astChrMatch( cvt_string, "HLF2LG" ) ) {
- result = AST__HLF2LG;
-
- } else if ( astChrMatch( cvt_string, "GLF2HL" ) ) {
- result = AST__GLF2HL;
-
- } else if ( astChrMatch( cvt_string, "HLF2GL" ) ) {
- result = AST__HLF2GL;
-
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *CvtString( int cvt_code, const char **comment,
- int *argra, int *argdec, int *nargs, int *szargs,
- const char *arg[ MAX_ARGS ], int *status ) {
-/*
-* Name:
-* CvtString
-
-* Purpose:
-* Convert a conversion type from a code value to a string representation.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specmap.h"
-* const char *CvtString( int cvt_code, const char **comment,
-* int *argra, int *argdec, int *nargs,
-* int *szargs, const char *arg[ MAX_ARGS ], int *status )
-
-* Class Membership:
-* SpecMap member function.
-
-* Description:
-* This function accepts a code value used to represent one of the
-* SpecMap coordinate conversions and converts it into an
-* equivalent string representation. It also returns a descriptive
-* comment and information about the arguments required in order to
-* perform the conversion.
-
-* Parameters:
-* cvt_code
-* The conversion code.
-* comment
-* Address of a location to return a pointer to a constant
-* null-terminated string containing a description of the
-* conversion.
-* argra
-* Address of an int in which to return the index of the argument
-* corresponding to the source RA. Returned equal to -1 if the
-* conversion does not have a source RA argument.
-* argdec
-* Address of an int in which to return the index of the argument
-* corresponding to the source DEC. Returned equal to -1 if the
-* conversion does not have a source DEC argument.
-* nargs
-* Address of an int in which to return the number of arguments
-* required from the user in order to perform the conversion (may
-* be zero).
-* szargs
-* Address of an int in which to return the number of arguments
-* associated with the conversion. This may be bigger than "nargs"
-* if the conversion can pre-calculate useful values on the basis
-* of the user-supplied values. Such precalculated values are
-* stored after the last user-supplied argument.
-* arg
-* An array in which to return a pointer to a constant
-* null-terminated string for each argument (above) containing a
-* description of what each argument represents. This includes both
-* user-supplied arguments and pre-calculated values.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a constant null-terminated string representation of
-* the conversion code value supplied. If the code supplied is not
-* valid, a NULL pointer will be returned, without error.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the global error status set, or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- const char *result; /* Result pointer to return */
-
-/* Initialise the returned values. */
- *comment = NULL;
- *nargs = 0;
- *argra = -1;
- *argdec = -1;
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Test for each valid code value in turn and assign the appropriate
- return values. */
- switch ( cvt_code ) {
-
- case AST__FRTOVL:
- *comment = "Convert frequency to rel. velocity";
- result = "FRTOVL";
- *nargs = 1;
- *szargs = 1;
- arg[ 0 ] = "Rest frequency (Hz)";
- break;
-
- case AST__VLTOFR:
- *comment = "Convert rel. velocity to frequency";
- result = "VLTOFR";
- *nargs = 1;
- *szargs = 1;
- arg[ 0 ] = "Rest frequency (Hz)";
- break;
-
- case AST__ENTOFR:
- *comment = "Convert energy to frequency";
- result = "ENTOFR";
- *nargs = 0;
- *szargs = 0;
- break;
-
- case AST__FRTOEN:
- *comment = "Convert frequency to energy";
- result = "FRTOEN";
- *nargs = 0;
- *szargs = 0;
- break;
-
- case AST__WNTOFR:
- *comment = "Convert wave number to frequency";
- result = "WNTOFR";
- *nargs = 0;
- *szargs = 0;
- break;
-
- case AST__FRTOWN:
- *comment = "Convert frequency to wave number";
- result = "FRTOWN";
- *nargs = 0;
- *szargs = 0;
- break;
-
- case AST__WVTOFR:
- *comment = "Convert wavelength (vacuum) to frequency";
- result = "WVTOFR";
- *nargs = 0;
- *szargs = 0;
- break;
-
- case AST__FRTOWV:
- *comment = "Convert frequency to wavelength (vacuum)";
- result = "FRTOWV";
- *nargs = 0;
- *szargs = 0;
- break;
-
- case AST__AWTOFR:
- *comment = "Convert wavelength (air) to frequency";
- result = "AWTOFR";
- *nargs = 0;
- *szargs = 0;
- break;
-
- case AST__FRTOAW:
- *comment = "Convert frequency to wavelength (air)";
- result = "FRTOAW";
- *nargs = 0;
- *szargs = 0;
- break;
-
- case AST__VRTOVL:
- *comment = "Convert radio to rel. velocity";
- result = "VRTOVL";
- *nargs = 0;
- *szargs = 0;
- break;
-
- case AST__VLTOVR:
- *comment = "Convert relativistic to radio velocity";
- result = "VLTOVR";
- *nargs = 0;
- *szargs = 0;
- break;
-
- case AST__VOTOVL:
- *comment = "Convert optical to rel. velocity";
- result = "VOTOVL";
- *nargs = 0;
- *szargs = 0;
- break;
-
- case AST__VLTOVO:
- *comment = "Convert relativistic to optical velocity";
- result = "VLTOVO";
- *nargs = 0;
- *szargs = 0;
- break;
-
- case AST__ZOTOVL:
- *comment = "Convert redshift to rel. velocity";
- result = "ZOTOVL";
- *nargs = 0;
- *szargs = 0;
- break;
-
- case AST__VLTOZO:
- *comment = "Convert rel. velocity to redshift";
- result = "VLTOZO";
- *nargs = 0;
- *szargs = 0;
- break;
-
- case AST__BTTOVL:
- *comment = "Convert beta factor to rel. velocity";
- result = "BTTOVL";
- *nargs = 0;
- *szargs = 0;
- break;
-
- case AST__VLTOBT:
- *comment = "Convert rel. velocity to beta factor";
- result = "VLTOBT";
- *nargs = 0;
- *szargs = 0;
- break;
-
- case AST__USF2HL:
- *comment = "Convert from user-defined to heliocentric frequency";
- result = "USF2HL";
- *argra = 1;
- *argdec = 2;
- *nargs = 3;
- *szargs = 4;
- arg[ 0 ] = "Velocity offset (m/s)";
- arg[ 1 ] = "RA of source (FK5 J2000, radians)";
- arg[ 2 ] = "DEC of source (FK5 J2000, radians)";
- arg[ 3 ] = "Frequency correction factor";
- break;
-
- case AST__HLF2US:
- *comment = "Convert from heliocentric to user-defined frequency";
- result = "HLF2US";
- *argra = 1;
- *argdec = 2;
- *nargs = 3;
- *szargs = 4;
- arg[ 0 ] = "Velocity offset (m/s)";
- arg[ 1 ] = "RA of source (FK5 J2000, radians)";
- arg[ 2 ] = "DEC of source (FK5 J2000, radians)";
- arg[ 3 ] = "Frequency correction factor";
- break;
-
- case AST__TPF2HL:
- *comment = "Convert from Topocentric to heliocentric frequency";
- result = "TPF2HL";
- *argra = 4;
- *argdec = 5;
- *nargs = 6;
- *szargs = 7;
- arg[ 0 ] = "Longitude (positive eastwards, radians)";
- arg[ 1 ] = "Latitude (geodetic, radians)";
- arg[ 2 ] = "Altitude (geodetic, metres)";
- arg[ 3 ] = "UT1 epoch of observaton (Modified Julian Date)";
- arg[ 4 ] = "RA of source (FK5 J2000, radians)";
- arg[ 5 ] = "DEC of source (FK5 J2000, radians)";
- arg[ 6 ] = "Frequency correction factor";
- break;
-
- case AST__HLF2TP:
- *comment = "Convert from Heliocentric to topocentric frequency";
- result = "HLF2TP";
- *argra = 4;
- *argdec = 5;
- *nargs = 6;
- *szargs = 7;
- arg[ 0 ] = "Longitude (positive eastwards, radians)";
- arg[ 1 ] = "Latitude (geodetic, radians)";
- arg[ 2 ] = "Altitude (geodetic, metres)";
- arg[ 3 ] = "UT1 epoch of observaton (Modified Julian Date)";
- arg[ 4 ] = "RA of source (FK5 J2000, radians)";
- arg[ 5 ] = "DEC of source (FK5 J2000, radians)";
- arg[ 6 ] = "Frequency correction factor";
- break;
-
- case AST__GEF2HL:
- *comment = "Convert from Geocentric to heliocentric frequency";
- result = "GEF2HL";
- *argra = 1;
- *argdec = 2;
- *nargs = 3;
- *szargs = 4;
- arg[ 0 ] = "UT1 epoch of observaton (Modified Julian Date)";
- arg[ 1 ] = "RA of source (FK5 J2000, radians)";
- arg[ 2 ] = "DEC of source (FK5 J2000, radians)";
- arg[ 3 ] = "Frequency correction factor";
- break;
-
- case AST__HLF2GE:
- *comment = "Convert from Heliocentric to geocentric frequency";
- result = "HLF2GE";
- *argra = 1;
- *argdec = 2;
- *nargs = 3;
- *szargs = 4;
- arg[ 0 ] = "UT1 epoch of observaton (Modified Julian Date)";
- arg[ 1 ] = "RA of source (FK5 J2000, radians)";
- arg[ 2 ] = "DEC of source (FK5 J2000, radians)";
- arg[ 3 ] = "Frequency correction factor";
- break;
-
- case AST__BYF2HL:
- *comment = "Convert from Barycentric to heliocentric frequency";
- result = "BYF2HL";
- *argra = 1;
- *argdec = 2;
- *nargs = 3;
- *szargs = 4;
- arg[ 0 ] = "UT1 epoch of observaton (Modified Julian Date)";
- arg[ 1 ] = "RA of source (FK5 J2000, radians)";
- arg[ 2 ] = "DEC of source (FK5 J2000, radians)";
- arg[ 3 ] = "Frequency correction factor";
- break;
-
- case AST__HLF2BY:
- *comment = "Convert from Heliocentric to barycentric frequency";
- result = "HLF2BY";
- *argra = 1;
- *argdec = 2;
- *nargs = 3;
- *szargs = 4;
- arg[ 0 ] = "UT1 epoch of observaton (Modified Julian Date)";
- arg[ 1 ] = "RA of source (FK5 J2000, radians)";
- arg[ 2 ] = "DEC of source (FK5 J2000, radians)";
- arg[ 3 ] = "Frequency correction factor";
- break;
-
- case AST__LKF2HL:
- *comment = "Convert from LSRK to heliocentric frequency";
- result = "LKF2HL";
- *argra = 0;
- *argdec = 1;
- *nargs = 2;
- *szargs = 3;
- arg[ 0 ] = "RA of source (FK5 J2000, radians)";
- arg[ 1 ] = "DEC of source (FK5 J2000, radians)";
- arg[ 2 ] = "Frequency correction factor";
- break;
-
- case AST__HLF2LK:
- *comment = "Convert from Heliocentric to LSRK frequency";
- result = "HLF2LK";
- *argra = 0;
- *argdec = 1;
- *nargs = 2;
- *szargs = 3;
- arg[ 0 ] = "RA of source (FK5 J2000, radians)";
- arg[ 1 ] = "DEC of source (FK5 J2000, radians)";
- arg[ 2 ] = "Frequency correction factor";
- break;
-
- case AST__LDF2HL:
- *comment = "Convert from LSRD to heliocentric frequency";
- result = "LDF2HL";
- *argra = 0;
- *argdec = 1;
- *nargs = 2;
- *szargs = 3;
- arg[ 0 ] = "RA of source (FK5 J2000, radians)";
- arg[ 1 ] = "DEC of source (FK5 J2000, radians)";
- arg[ 2 ] = "Frequency correction factor";
- break;
-
- case AST__HLF2LD:
- *comment = "Convert from Heliocentric to LSRD frequency";
- result = "HLF2LD";
- *argra = 0;
- *argdec = 1;
- *nargs = 2;
- *szargs = 3;
- arg[ 0 ] = "RA of source (FK5 J2000, radians)";
- arg[ 1 ] = "DEC of source (FK5 J2000, radians)";
- arg[ 2 ] = "Frequency correction factor";
- break;
-
- case AST__LGF2HL:
- *comment = "Convert from Local group to heliocentric frequency";
- result = "LGF2HL";
- *argra = 0;
- *argdec = 1;
- *nargs = 2;
- *szargs = 3;
- arg[ 0 ] = "RA of source (FK5 J2000, radians)";
- arg[ 1 ] = "DEC of source (FK5 J2000, radians)";
- arg[ 2 ] = "Frequency correction factor";
- break;
-
- case AST__HLF2LG:
- *comment = "Convert from Heliocentric to local group frequency";
- result = "HLF2LG";
- *argra = 0;
- *argdec = 1;
- *nargs = 2;
- *szargs = 3;
- arg[ 0 ] = "RA of source (FK5 J2000, radians)";
- arg[ 1 ] = "DEC of source (FK5 J2000, radians)";
- arg[ 2 ] = "Frequency correction factor";
- break;
-
- case AST__GLF2HL:
- *comment = "Convert from Galactic to heliocentric frequency";
- result = "GLF2HL";
- *argra = 0;
- *argdec = 1;
- *nargs = 2;
- *szargs = 3;
- arg[ 0 ] = "RA of source (FK5 J2000, radians)";
- arg[ 1 ] = "DEC of source (FK5 J2000, radians)";
- arg[ 2 ] = "Frequency correction factor";
- break;
-
- case AST__HLF2GL:
- *comment = "Convert from Heliocentric to galactic frequency";
- *argra = 0;
- *argdec = 1;
- result = "HLF2GL";
- *nargs = 2;
- *szargs = 3;
- arg[ 0 ] = "RA of source (FK5 J2000, radians)";
- arg[ 1 ] = "DEC of source (FK5 J2000, radians)";
- arg[ 2 ] = "Frequency correction factor";
- break;
-
- }
-
-/* Return the result. */
- return result;
-}
-
-static int FrameChange( int cvt_code, int np, double *ra, double *dec, double *freq,
- double *args, int forward, int *status ){
-/*
-* Name:
-* FrameChange
-
-* Purpose:
-* Apply a doppler shift caused by a change of reference frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specmap.h"
-* int FrameChange( int cvt_code, int np, double *ra, double *dec,
-* double *freq, double *args, int forward, int *status )
-
-* Class Membership:
-* SpecMap method.
-
-* Description:
-* This function modifies the supplied frequency values in order to
-* apply a doppler shift caused by a change of the observers rest-frame.
-
-* Parameters:
-* cvt_code
-* A code indicating the conversion to be applied. If the code does
-* not correspond to a change of rest-frame, then the supplied
-* frequencies are left unchanged and zero is returned as the
-* function value.
-* np
-* The number of frequency values to transform.
-* ra
-* Pointer to an array of "np" RA (J2000 FK5) values at which the
-* "np" frequencies are observed. These are unchanged on exit. If a
-* NULL pointer is supplied, then all frequencies are assumed to be
-* observed at the single RA value given by "refra"
-* dec
-* Pointer to an array of "np" Dec (J2000 FK5) values at which the
-* "np" frequencies are observed. These are unchanged on exit. If a
-* NULL pointer is supplied, then all frequencies are assumed to be
-* observed at the single Dec value given by "refdec"
-* freq
-* Pointer to an array of "np" frequency values, measured in the
-* input rest-frame. These are modified on return to hold the
-* corresponding values measured in the output rest-frame.
-* args
-* Pointer to an array holding the conversion arguments. The number
-* of arguments expected depends on the particular conversion being
-* used.
-* forward
-* Should the conversion be applied in the forward or inverse
-* direction? Non-zero for forward, zero for inverse.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the supplied conversion code corresponds to a change of
-* reference frame. Zoer otherwise (in which case the upplied values
-* will not have been changed).
-
-* Notes:
-* - The "args" array contains RA and DEC values which give the "source"
-* position (FK5 J2000). If a NULL value is supplied for the "ra"
-* parameter, then these args define the position of all the frequency
-* values. In addition they also define the direction of motion of
-* the "user-defined" rest-frame (see "veluser"). Thus they should still
-* be supplied even if "ra" is NULL.
-
-*/
-
-/* Local Variables: */
- FrameDef def; /* Structure holding frame parameters */
- double (* cvtFunc)( double, double, FrameDef *, int * ); /* Pointer to conversion function */
- double *fcorr; /* Pointer to frequency correction factor */
- double *pdec; /* Pointer to next Dec value */
- double *pf; /* Pointer to next frequency value */
- double *pra; /* Pointer to next RA value */
- double factor; /* Frequency correction factor */
- double s; /* Velocity correction (m/s) */
- int i; /* Loop index */
- int result; /* Returned value */
- int sign; /* Sign for velocity correction */
-
-/* Check inherited status. */
- if( !astOK ) return 0;
-
-/* Initialise */
- cvtFunc = NULL;
- fcorr = NULL;
- sign = 0;
-
-/* Set the return value to indicate that the supplied conversion code
- represents a change of rest-frame. */
- result = 1;
-
-/* Initialise a structure which stores parameters which define the
- transformation. */
- def.obsalt = AST__BAD;
- def.obslat = AST__BAD;
- def.obslon = AST__BAD;
- def.epoch = AST__BAD;
- def.refdec = AST__BAD;
- def.refra = AST__BAD;
- def.veluser = AST__BAD;
- def.last = AST__BAD;
- def.amprms[ 0 ] = AST__BAD;
- def.vuser[ 0 ] = AST__BAD;
- def.dvh[ 0 ] = AST__BAD;
- def.dvb[ 0 ] = AST__BAD;
-
-/* Test for each rest-frame code value in turn and assign the appropriate
- values. */
- switch ( cvt_code ) {
-
- case AST__USF2HL:
- cvtFunc = UserVel;
- def.veluser = args[ 0 ];
- def.refra = args[ 1 ];
- def.refdec = args[ 2 ];
- fcorr = args + 3;
- sign = -1;
- break;
-
- case AST__HLF2US:
- cvtFunc = UserVel;
- def.veluser = args[ 0 ];
- def.refra = args[ 1 ];
- def.refdec = args[ 2 ];
- fcorr = args + 3;
- sign = +1;
- break;
-
- case AST__TPF2HL:
- cvtFunc = TopoVel;
- def.obslon = args[ 0 ];
- def.obslat = args[ 1 ];
- def.obsalt = args[ 2 ];
- def.epoch = args[ 3 ];
- def.refra = args[ 4 ];
- def.refdec = args[ 5 ];
- fcorr = args + 6;
- sign = -1;
- break;
-
- case AST__HLF2TP:
- cvtFunc = TopoVel;
- def.obslon = args[ 0 ];
- def.obslat = args[ 1 ];
- def.obsalt = args[ 2 ];
- def.epoch = args[ 3 ];
- def.refra = args[ 4 ];
- def.refdec = args[ 5 ];
- fcorr = args + 6;
- sign = +1;
- break;
-
- case AST__GEF2HL:
- cvtFunc = GeoVel;
- def.epoch = args[ 0 ];
- def.refra = args[ 1 ];
- def.refdec = args[ 2 ];
- fcorr = args + 3;
- sign = -1;
- break;
-
- case AST__HLF2GE:
- cvtFunc = GeoVel;
- def.epoch = args[ 0 ];
- def.refra = args[ 1 ];
- def.refdec = args[ 2 ];
- fcorr = args + 3;
- sign = +1;
- break;
-
- case AST__BYF2HL:
- cvtFunc = BaryVel;
- def.epoch = args[ 0 ];
- def.refra = args[ 1 ];
- def.refdec = args[ 2 ];
- fcorr = args + 3;
- sign = -1;
- break;
-
- case AST__HLF2BY:
- cvtFunc = BaryVel;
- def.epoch = args[ 0 ];
- def.refra = args[ 1 ];
- def.refdec = args[ 2 ];
- fcorr = args + 3;
- sign = +1;
- break;
-
- case AST__LKF2HL:
- cvtFunc = LsrkVel;
- def.refra = args[ 0 ];
- def.refdec = args[ 1 ];
- fcorr = args + 2;
- sign = -1;
- break;
-
- case AST__HLF2LK:
- cvtFunc = LsrkVel;
- def.refra = args[ 0 ];
- def.refdec = args[ 1 ];
- fcorr = args + 2;
- sign = +1;
- break;
-
- case AST__LDF2HL:
- cvtFunc = LsrdVel;
- def.refra = args[ 0 ];
- def.refdec = args[ 1 ];
- fcorr = args + 2;
- sign = -1;
- break;
-
- case AST__HLF2LD:
- cvtFunc = LsrdVel;
- def.refra = args[ 0 ];
- def.refdec = args[ 1 ];
- fcorr = args + 2;
- sign = +1;
- break;
-
- case AST__LGF2HL:
- cvtFunc = LgVel;
- def.refra = args[ 0 ];
- def.refdec = args[ 1 ];
- fcorr = args + 2;
- sign = -1;
- break;
-
- case AST__HLF2LG:
- cvtFunc = LgVel;
- def.refra = args[ 0 ];
- def.refdec = args[ 1 ];
- fcorr = args + 2;
- sign = +1;
- break;
-
- case AST__GLF2HL:
- cvtFunc = GalVel;
- def.refra = args[ 0 ];
- def.refdec = args[ 1 ];
- fcorr = args + 2;
- sign = -1;
- break;
-
- case AST__HLF2GL:
- cvtFunc = GalVel;
- def.refra = args[ 0 ];
- def.refdec = args[ 1 ];
- fcorr = args + 2;
- sign = +1;
- break;
-
-/* If the supplied code does not represent a change of rest-frame, clear
- the returned flag. */
- default:
- result = 0;
- }
-
-/* Check we have a rest-frame code. */
- if( result ) {
-
-/* First deal with cases where we have a single source position (given by
- refra and refdec). */
- if( !ra ) {
-
-/* If the frequency correction factor has not been found, find it now. */
- if( *fcorr == AST__BAD ) {
-
-/* Get the velocity correction. This is the component of the velocity of the
- output system, away from the source, as measured in the input system. */
- s = sign*cvtFunc( def.refra, def.refdec, &def, status );
-
-/* Find the factor by which to correct supplied frequencies. If the
- velocity correction is positive, the output frequency wil be lower than
- the input frequency. */
- if( s < AST__C && s > -AST__C ) {
- *fcorr = sqrt( ( AST__C - s )/( AST__C + s ) );
- }
- }
-
-/* Correct each supplied frequency. */
- if( *fcorr != AST__BAD && *fcorr != 0.0 ) {
- factor = forward ? *fcorr : 1.0 / ( *fcorr );
- pf = freq;
- for( i = 0; i < np; i++, pf++ ) {
- if( *pf != AST__BAD ) *pf *= factor;
- }
-
-/* Set returned values bad if the velocity correction is un-physical. */
- } else {
- pf = freq;
- for( i = 0; i < np; i++ ) *(pf++) = AST__BAD;
- }
-
-/* Now deal with cases where each frequency value has its own source
- position. */
- } else {
-
-/* Invert the sign if we are doing a inverse transformation. */
- if( !forward ) sign = -sign;
-
-/* Loop round each value. */
- pf = freq;
- pra = ra;
- pdec = dec;
- for( i = 0; i < np; i++ ) {
-
-/* If the ra or dec is bad, store a bad frequency. */
- if( *pra == AST__BAD || *pdec == AST__BAD || *pf == AST__BAD ) {
- *pf = AST__BAD;
-
-/* Otherwise, produce a corrected frequency. */
- } else {
-
-/* Get the velocity correction. */
- s = sign*cvtFunc( *pra, *pdec, &def, status );
-
-/* Correct this frequency, if possible. Otherwise set bad. */
- if( s < AST__C && s > -AST__C ) {
- *pf *= sqrt( ( AST__C - s )/( AST__C + s ) );
- } else {
- *pf = AST__BAD;
- }
- }
-
-/* Move on to the next position. */
- pf++;
- pra++;
- pdec++;
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static double GalVel( double ra, double dec, FrameDef *def, int *status ) {
-/*
-* Name:
-* GalVel
-
-* Purpose:
-* Find the velocity of the galactic centre away from the source.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specmap.h"
-* double GalVel( double ra, double dec, FrameDef *def, int *status )
-
-* Class Membership:
-* SpecMap method.
-
-* Description:
-* This function finds the component of the velocity of the galactic
-* centre away from a specified source position, in the frame of rest
-* of the Sun.
-
-* Parameters:
-* ra
-* The RA (rads, FK5 J2000) of the source.
-* dec
-* The Dec (rads, FK5 J2000) of the source.
-* def
-* Pointer to a FrameDef structure which holds the parameters which
-* define the frame, together with cached intermediate results.
-* status
-* Pointer to the inherited status variable.
-
-* Returns:
-* The component of the frame's velocity away from the position given by
-* "ra" and "dec", in m/s, measured within the Heliographic frame of
-* rest. Zero is returned if an error has already occurred.
-
-*/
-
-/* Local Variables: */
- double s1, s2;
-
-/* Check the global error status. */
- if ( !astOK ) return 0.0;
-
-/* Get the component away from the source, of the velocity of the sun
- relative to the dynamic LSR (in km/s). */
- s1 = (double) palSlaRvlsrd( (float) ra, (float) dec );
-
-/* Get the component away from the source, of the velocity of the
- dynamic LSR relative to the galactic centre (in km/s). */
- s2 = (double) palSlaRvgalc( (float) ra, (float) dec );
-
-/* Return the total velocity of the galactic centre away from the source,
- relative to the sun, in m/s. */
- return -1000.0*( s1 + s2 );
-}
-
-static double GeoVel( double ra, double dec, FrameDef *def, int *status ) {
-/*
-* Name:
-* GeoVel
-
-* Purpose:
-* Find the velocity of the earth away from the source.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specmap.h"
-* double GeoVel( double ra, double dec, FrameDef *def, int *status )
-
-* Class Membership:
-* SpecMap method.
-
-* Description:
-* This function finds the component of the velocity of the earth away
-* from a specified source position, at a given epoch, in the frame of
-* rest of the Sun.
-
-* Parameters:
-* ra
-* The RA (rads, FK5 J2000) of the source.
-* dec
-* The Dec (rads, FK5 J2000) of the source.
-* def
-* Pointer to a FrameDef structure which holds the parameters which
-* define the frame, together with cached intermediate results.
-* status
-* Pointer to the inherited status variable.
-
-* Returns:
-* The component of the frame's velocity away from the position given by
-* "ra" and "dec", in m/s, measured within the Heliographic frame of
-* rest. Zero is returned if an error has already occurred.
-
-*/
-
-/* Local Variables: */
- double dpb[ 3 ]; /* Barycentric earth position vector */
- double dph[ 3 ]; /* Heliocentric earth position vector */
- double dvb[ 3 ]; /* Barycentric earth velocity vector */
- double v[ 3 ]; /* Source direction vector */
-
-/* Check the global error status. */
- if ( !astOK ) return 0.0;
-
-/* Get the Cartesian vector towards the source, in the Cartesian FK5
- J2000 system. */
- palSlaDcs2c( ra, dec, v );
-
-/* If not already done so, get the Earth/Sun velocity and position vectors in
- the same system. Speed is returned in units of AU/s. Store in the supplied
- frame definition structure. */
- if( def->dvh[ 0 ] == AST__BAD ) palSlaEvp( def->epoch, 2000.0, dvb, dpb,
- def->dvh, dph );
-
-/* Return the component away from the source, of the velocity of the earths
- centre relative to the sun (in m/s). */
- return -palSlaDvdv( v, def->dvh )*149.597870E9;
-}
-
-void astInitSpecMapVtab_( AstSpecMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitSpecMapVtab
-
-* Purpose:
-* Initialise a virtual function table for a SpecMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "specmap.h"
-* void astInitSpecMapVtab( AstSpecMapVtab *vtab, const char *name )
-
-* Class Membership:
-* SpecMap vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the SpecMap class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsASpecMap) to determine if an object belongs to
- this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
- vtab->SpecAdd = SpecAdd;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
- parent_rate = mapping->Rate;
- mapping->Rate = Rate;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- object->Equal = Equal;
- mapping->MapMerge = MapMerge;
-
-/* Declare the copy constructor, destructor and class dump
- function. */
- astSetCopy( vtab, Copy );
- astSetDelete( vtab, Delete );
- astSetDump( vtab, Dump, "SpecMap",
- "Conversion between spectral coordinate systems" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static double LgVel( double ra, double dec, FrameDef *def, int *status ) {
-/*
-* Name:
-* LgVel
-
-* Purpose:
-* Find the velocity of the Local Group away from the source.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specmap.h"
-* double LgVel( double ra, double dec, FrameDef *def, int *status )
-
-* Class Membership:
-* SpecMap method.
-
-* Description:
-* This function finds the component of the Local Group velocity away
-* from a specified source position, in the frame of rest of the Sun.
-
-* Parameters:
-* ra
-* The RA (rads, FK5 J2000) of the source.
-* dec
-* The Dec (rads, FK5 J2000) of the source.
-* def
-* Pointer to a FrameDef structure which holds the parameters which
-* define the frame, together with cached intermediate results.
-* status
-* Pointer to the inherited status variable.
-
-* Returns:
-* The component of the frame's velocity away from the position given by
-* "ra" and "dec", in m/s, measured within the Heliographic frame of
-* rest. Zero is returned if an error has already occurred.
-
-*/
-
-/* Return the component away from the source, of the velocity of the
- local group relative to the sun (in m/s). */
- return -1000.0*palSlaRvlg( (float) ra, (float) dec );
-}
-
-static double LsrdVel( double ra, double dec, FrameDef *def, int *status ) {
-/*
-* Name:
-* LsrdVel
-
-* Purpose:
-* Find the velocity of the Dynamical LSR away from the source.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specmap.h"
-* double LsrdVel( double ra, double dec, FrameDef *def, int *status )
-
-* Class Membership:
-* SpecMap method.
-
-* Description:
-* This function finds the component of the velocity of the Dynamical
-* LSR away from a specified source position, in the frame of rest of
-* the Sun.
-
-* Parameters:
-* ra
-* The RA (rads, FK5 J2000) of the source.
-* dec
-* The Dec (rads, FK5 J2000) of the source.
-* def
-* Pointer to a FrameDef structure which holds the parameters which
-* define the frame, together with cached intermediate results.
-* status
-* Pointer to the inherited status variable.
-
-* Returns:
-* The component of the frame's velocity away from the position given by
-* "ra" and "dec", in m/s, measured within the Heliographic frame of
-* rest. Zero is returned if an error has already occurred.
-
-*/
-/* Check the global error status. */
- if ( !astOK ) return 0.0;
-
-/* Get the component away from the source, of the velocity of the sun
- relative to the dynamical LSR (in m/s). This can also be thought of as the
- velocity of the LSR towards the source relative to the sun. Return the
- negated value (i.e. velocity of lsrd *away from* the source. */
- return -1000.0*palSlaRvlsrd( (float) ra, (float) dec );
-}
-
-static double LsrkVel( double ra, double dec, FrameDef *def, int *status ) {
-/*
-* Name:
-* LsrkVel
-
-* Purpose:
-* Find the velocity of the Kinematic LSR away from the source.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specmap.h"
-* double LsrkVel( double ra, double dec, FrameDef *def, int *status )
-
-* Class Membership:
-* SpecMap method.
-
-* Description:
-* This function finds the component of the velocity of the Kinematic
-* LSR away from a specified source position, in the frame of rest of
-* the Sun.
-
-* Parameters:
-* ra
-* The RA (rads, FK5 J2000) of the source.
-* dec
-* The Dec (rads, FK5 J2000) of the source.
-* def
-* Pointer to a FrameDef structure which holds the parameters which
-* define the frame, together with cached intermediate results.
-* status
-* Pointer to the inherited status variable.
-
-* Returns:
-* The component of the frame's velocity away from the position given by
-* "ra" and "dec", in m/s, measured within the Heliographic frame of
-* rest. Zero is returned if an error has already occurred.
-
-*/
-/* Check the global error status. */
- if ( !astOK ) return 0.0;
-
-/* Get the component away from the source, of the velocity of the sun
- relative to the kinematic LSR (in m/s). This can also be thought of as the
- velocity of the LSR towards the source relative to the sun. Return the
- negated value (i.e. velocity of lsrk *away from* the source. */
- return -1000.0*palSlaRvlsrk( (float) ra, (float) dec );
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a SpecMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* SpecMap method (over-rides the protected astMapMerge method
-* inherited from the Mapping class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated SpecMap in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated SpecMap with one which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated SpecMap which is to be merged with
-* its neighbours. This should be a cloned copy of the SpecMap
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* SpecMap it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated SpecMap resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstMapping *new; /* Pointer to replacement Mapping */
- AstSpecMap *specmap; /* Pointer to SpecMap */
- const char *argdesc[ MAX_ARGS ]; /* Argument descriptions (junk) */
- const char *class; /* Pointer to Mapping class string */
- const char *comment; /* Pointer to comment string (junk) */
- double (*cvtargs)[ MAX_ARGS ]; /* Pointer to argument arrays */
- double tmp; /* Temporary storage */
- int *cvttype; /* Pointer to transformation type codes */
- int *szarg; /* Pointer to argument count array */
- int argdec; /* Index of DEC argument */
- int argra; /* Index of RA argument */
- int done; /* Finished (no further simplification)? */
- int iarg; /* Loop counter for arguments */
- int icvt1; /* Loop initial value */
- int icvt2; /* Loop final value */
- int icvt; /* Loop counter for transformation steps */
- int ikeep; /* Index to store step being kept */
- int imap1; /* Index of first SpecMap to merge */
- int imap2; /* Index of last SpecMap to merge */
- int imap; /* Loop counter for Mappings */
- int inc; /* Increment for transformation step loop */
- int invert; /* SpecMap applied in inverse direction? */
- int istep; /* Loop counter for transformation steps */
- int keep; /* Keep transformation step? */
- int narg; /* Number of user-supplied arguments */
- int ngone; /* Number of Mappings eliminated */
- int nin; /* Numbr of axes for SpecMaps being merged */
- int nstep0; /* Original number of transformation steps */
- int nstep; /* Total number of transformation steps */
- int result; /* Result value to return */
- int simpler; /* Simplification possible? */
- int unit; /* Replacement Mapping is a UnitMap? */
-
-/* Initialise. */
- result = -1;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* SpecMaps can only be merged if they are in series (or if there is
- only one Mapping present, in which case it makes no difference), so
- do nothing if they are not. */
- if ( series || ( *nmap == 1 ) ) {
-
-/* Save the number of inputs for the SpecMap. */
- nin = astGetNin( this );
-
-/* Initialise the number of transformation steps to be merged to equal
- the number in the nominated SpecMap. */
- nstep = ( (AstSpecMap *) ( *map_list )[ where ] )->ncvt;
-
-/* Search adjacent lower-numbered Mappings until one is found which is
- not a SpecMap, or is a SpecMap with a different number of axes. Accumulate
- the number of transformation steps involved in any SpecMaps found. */
- imap1 = where;
- while ( ( imap1 - 1 >= 0 ) && astOK ) {
- class = astGetClass( ( *map_list )[ imap1 - 1 ] );
- if ( !astOK || strcmp( class, "SpecMap" ) ||
- astGetNin( ( *map_list )[ imap1 - 1 ] ) != nin ) break;
- nstep += ( (AstSpecMap *) ( *map_list )[ imap1 - 1 ] )->ncvt;
- imap1--;
- }
-
-/* Similarly search adjacent higher-numbered Mappings. */
- imap2 = where;
- while ( ( imap2 + 1 < *nmap ) && astOK ) {
- class = astGetClass( ( *map_list )[ imap2 + 1 ] );
- if ( !astOK || strcmp( class, "SpecMap" ) ||
- astGetNin( ( *map_list )[ imap2 + 1 ] ) != nin ) break;
- nstep += ( (AstSpecMap *) ( *map_list )[ imap2 + 1 ] )->ncvt;
- imap2++;
- }
-
-/* Remember the initial number of transformation steps. */
- nstep0 = nstep;
-
-/* Allocate memory for accumulating a list of all the transformation
- steps involved in all the SpecMaps found. */
- cvttype = astMalloc( sizeof( int ) * (size_t) nstep );
- cvtargs = astMalloc( sizeof( double[ MAX_ARGS ] ) * (size_t) nstep );
- szarg = astMalloc( sizeof( int ) * (size_t) nstep );
-
-/* Loop to obtain the transformation data for each SpecMap being merged. */
- nstep = 0;
- for ( imap = imap1; astOK && ( imap <= imap2 ); imap++ ) {
-
-/* Obtain a pointer to the SpecMap and note if it is being applied in
- its inverse direction. */
- specmap = (AstSpecMap *) ( *map_list )[ imap ];
- invert = ( *invert_list )[ imap ];
-
-/* Set up loop limits and an increment to scan the transformation
- steps in each SpecMap in either the forward or reverse direction, as
- dictated by the associated "invert" value. */
- icvt1 = invert ? specmap->ncvt - 1 : 0;
- icvt2 = invert ? -1 : specmap->ncvt;
- inc = invert ? -1 : 1;
-
-/* Loop through each transformation step in the SpecMap. */
- for ( icvt = icvt1; icvt != icvt2; icvt += inc ) {
-
-/* Store the transformation type code and use "CvtString" to determine
- the associated number of arguments. Then store these arguments. */
- cvttype[ nstep ] = specmap->cvttype[ icvt ];
- (void) CvtString( cvttype[ nstep ], &comment, &argra, &argdec,
- &narg, szarg + nstep, argdesc, status );
- if ( !astOK ) break;
- for ( iarg = 0; iarg < szarg[ nstep ]; iarg++ ) {
- cvtargs[ nstep ][ iarg ] = specmap->cvtargs[ icvt ][ iarg ];
- }
-
-/* If the SpecMap is inverted, we must not only accumulate its
- transformation steps in reverse, but also apply them in
- reverse. For some steps this means changing arguments, for some it
- means changing the transformation type code to a complementary
- value, and for others it means both. Define macros to perform each
- of the required changes. */
-
-/* Macro to exchange a transformation type code for its inverse (and
- vice versa). */
-#define SWAP_CODES( code1, code2 ) \
- if ( cvttype[ nstep ] == code1 ) { \
- cvttype[ nstep ] = code2; \
- } else if ( cvttype[ nstep ] == code2 ) { \
- cvttype[ nstep ] = code1; \
- }
-
-/* Macro to exchange a transformation type code for its inverse (and
- vice versa), and reciprocate a specified argument. */
-#define SWAP_CODES2( code1, code2, jarg ) \
- if ( cvttype[ nstep ] == code1 ) { \
- cvttype[ nstep ] = code2; \
- tmp = cvtargs[ nstep ][ jarg ]; \
- if( tmp != AST__BAD && tmp != 0.0 ) { \
- cvtargs[ nstep ][ jarg ] = 1.0/tmp; \
- } else { \
- cvtargs[ nstep ][ jarg ] = AST__BAD; \
- } \
- } else if ( cvttype[ nstep ] == code2 ) { \
- cvttype[ nstep ] = code1; \
- tmp = cvtargs[ nstep ][ jarg ]; \
- if( tmp != AST__BAD && tmp != 0.0 ) { \
- cvtargs[ nstep ][ jarg ] = 1.0/tmp; \
- } else { \
- cvtargs[ nstep ][ jarg ] = AST__BAD; \
- } \
- }
-
-/* Macro to exchange a transformation type code for its inverse (and
- vice versa), and negate a specified argument. */
-#define SWAP_CODES3( code1, code2, jarg ) \
- if ( cvttype[ nstep ] == code1 ) { \
- cvttype[ nstep ] = code2; \
- tmp = cvtargs[ nstep ][ jarg ]; \
- if( tmp != AST__BAD ) { \
- cvtargs[ nstep ][ jarg ] = -tmp; \
- } \
- } else if ( cvttype[ nstep ] == code2 ) { \
- cvttype[ nstep ] = code1; \
- tmp = cvtargs[ nstep ][ jarg ]; \
- if( tmp != AST__BAD ) { \
- cvtargs[ nstep ][ jarg ] = -tmp; \
- } \
- }
-
-/* Use these macros to apply the changes where needed. */
- if ( invert ) {
-
-/* Exchange transformation codes for their inverses. */
- SWAP_CODES( AST__FRTOVL, AST__VLTOFR )
- SWAP_CODES( AST__ENTOFR, AST__FRTOEN )
- SWAP_CODES( AST__WNTOFR, AST__FRTOWN )
- SWAP_CODES( AST__WVTOFR, AST__FRTOWV )
- SWAP_CODES( AST__AWTOFR, AST__FRTOAW )
- SWAP_CODES( AST__VRTOVL, AST__VLTOVR )
- SWAP_CODES( AST__VOTOVL, AST__VLTOVO )
- SWAP_CODES( AST__ZOTOVL, AST__VLTOZO )
- SWAP_CODES( AST__BTTOVL, AST__VLTOBT )
-
-/* Exchange transformation codes for their inverses, and reciprocate the
- frequency correction factor. */
- SWAP_CODES2( AST__TPF2HL, AST__HLF2TP, 6 )
- SWAP_CODES2( AST__USF2HL, AST__HLF2US, 3 )
- SWAP_CODES2( AST__GEF2HL, AST__HLF2GE, 3 )
- SWAP_CODES2( AST__BYF2HL, AST__HLF2BY, 3 )
- SWAP_CODES2( AST__LKF2HL, AST__HLF2LK, 2 )
- SWAP_CODES2( AST__LDF2HL, AST__HLF2LD, 2 )
- SWAP_CODES2( AST__LGF2HL, AST__HLF2LG, 2 )
- SWAP_CODES2( AST__GLF2HL, AST__HLF2GL, 2 )
-
- }
-
-/* Undefine the local macros. */
-#undef SWAP_CODES
-#undef SWAP_CODES2
-#undef SWAP_CODES3
-
-/* Count the transformation steps. */
- nstep++;
- }
- }
-
-/* Loop to simplify the sequence of transformation steps until no
- further improvement is possible. */
- done = 0;
- while ( astOK && !done ) {
-
-/* Examine each remaining transformation step in turn. */
- ikeep = -1;
- for ( istep = 0; istep < nstep; istep++ ) {
-
-/* Initially assume we will retain the current step. */
- keep = 1;
-
-/* The only simplifications for the conversions currently in this class act
- to combine adjacent transformation steps, so only apply them while there
- are at least 2 steps left. */
- if ( istep < ( nstep - 1 ) ) {
-
-/* Define a macro to test if two adjacent transformation type codes
- have specified values. */
-#define PAIR_CVT( code1, code2 ) \
- ( ( cvttype[ istep ] == code1 ) && \
- ( cvttype[ istep + 1 ] == code2 ) )
-
-/* Define a macro to test if two adjacent transformation type codes
- have specified values, either way round. */
-#define PAIR_CVT2( code1, code2 ) \
- ( ( PAIR_CVT( code1, code2 ) ) || \
- ( PAIR_CVT( code2, code1 ) ) )
-
-/* If a correction is followed by its inverse, and the user-supplied argument
- values are unchanged (we do not need to test values stored in the
- argument array which were not supplied by the user), we can eliminate them.
- First check for conversions which have no user-supplied arguments. */
- if ( PAIR_CVT2( AST__ENTOFR, AST__FRTOEN ) ||
- PAIR_CVT2( AST__WNTOFR, AST__FRTOWN ) ||
- PAIR_CVT2( AST__WVTOFR, AST__FRTOWV ) ||
- PAIR_CVT2( AST__AWTOFR, AST__FRTOAW ) ||
- PAIR_CVT2( AST__VRTOVL, AST__VLTOVR ) ||
- PAIR_CVT2( AST__VOTOVL, AST__VLTOVO ) ||
- PAIR_CVT2( AST__ZOTOVL, AST__VLTOZO ) ||
- PAIR_CVT2( AST__BTTOVL, AST__VLTOBT ) ) {
- istep++;
- keep = 0;
-
-/* Now check for conversions which have a single user-supplied argument. */
- } else if( PAIR_CVT2( AST__FRTOVL, AST__VLTOFR ) &&
- EQUAL( cvtargs[ istep ][ 0 ],
- cvtargs[ istep + 1 ][ 0 ] ) ) {
- istep++;
- keep = 0;
-
-/* Now check for conversions which have two user-supplied arguments. */
- } else if( ( PAIR_CVT2( AST__LKF2HL, AST__HLF2LK ) ||
- PAIR_CVT2( AST__LDF2HL, AST__HLF2LD ) ||
- PAIR_CVT2( AST__LGF2HL, AST__HLF2LG ) ||
- PAIR_CVT2( AST__GLF2HL, AST__HLF2GL ) ) &&
- EQUAL( cvtargs[ istep ][ 0 ],
- cvtargs[ istep + 1 ][ 0 ] ) &&
- EQUAL( cvtargs[ istep ][ 1 ],
- cvtargs[ istep + 1 ][ 1 ] ) ) {
- istep++;
- keep = 0;
-
-/* Now check for conversions which have three user-supplied arguments. */
- } else if( ( PAIR_CVT2( AST__GEF2HL, AST__HLF2GE ) ||
- PAIR_CVT2( AST__BYF2HL, AST__HLF2BY ) ||
- PAIR_CVT2( AST__USF2HL, AST__HLF2US ) ) &&
- EQUAL( cvtargs[ istep ][ 0 ],
- cvtargs[ istep + 1 ][ 0 ] ) &&
- EQUAL( cvtargs[ istep ][ 1 ],
- cvtargs[ istep + 1 ][ 1 ] ) &&
- EQUAL( cvtargs[ istep ][ 2 ],
- cvtargs[ istep + 1 ][ 2 ] ) ) {
- istep++;
- keep = 0;
-
-/* Now check for conversions which have six user-supplied arguments (currently
- no conversions have four or five user-supplied arguments). */
- } else if( ( PAIR_CVT2( AST__TPF2HL, AST__HLF2TP ) ) &&
- EQUAL( cvtargs[ istep ][ 0 ],
- cvtargs[ istep + 1 ][ 0 ] ) &&
- EQUAL( cvtargs[ istep ][ 1 ],
- cvtargs[ istep + 1 ][ 1 ] ) &&
- EQUAL( cvtargs[ istep ][ 2 ],
- cvtargs[ istep + 1 ][ 2 ] ) &&
- EQUAL( cvtargs[ istep ][ 3 ],
- cvtargs[ istep + 1 ][ 3 ] ) &&
- EQUAL( cvtargs[ istep ][ 4 ],
- cvtargs[ istep + 1 ][ 4 ] ) &&
- EQUAL( cvtargs[ istep ][ 5 ],
- cvtargs[ istep + 1 ][ 5 ] ) ) {
- istep++;
- keep = 0;
-
- }
-
-/* Undefine the local macros. */
-#undef PAIR_CVT
-#undef PAIR_CVT2
- }
-
-/* If the current transformation (possibly modified above) is being
- kept, then increment the index that identifies its new location in
- the list of transformation steps. */
- if ( keep ) {
- ikeep++;
-
-/* If the new location is different to its current location, copy the
- transformation data into the new location. */
- if ( ikeep != istep ) {
- cvttype[ ikeep ] = cvttype[ istep ];
- for ( iarg = 0; iarg < szarg[ istep ]; iarg++ ) {
- cvtargs[ ikeep ][ iarg ] = cvtargs[ istep ][ iarg ];
- }
- szarg[ ikeep ] = szarg[ istep ];
- }
- }
- }
-
-/* Note if no simplification was achieved on this iteration (i.e. the
- number of transformation steps was not reduced). This is the signal
- to quit. */
- done = ( ( ikeep + 1 ) >= nstep );
-
-/* Note how many transformation steps now remain. */
- nstep = ikeep + 1;
- }
-
-/* Determine how many Mappings can be eliminated by condensing all
- those considered above into a single Mapping. */
- if ( astOK ) {
- ngone = imap2 - imap1;
-
-/* Determine if the replacement Mapping can be a UnitMap (a null
- Mapping). This will only be the case if all the transformation
- steps were eliminated above. */
- unit = ( nstep == 0 );
-
-/* Determine if simplification is possible. This will be the case if
- (a) Mappings were eliminated ("ngone" is non-zero), or (b) the
- number of transformation steps was reduced, or (c) the SpecMap(s)
- can be replaced by a UnitMap, or (d) if there was initially only
- one SpecMap present, its invert flag was set (this flag will always
- be cleared in the replacement Mapping). */
- simpler = ngone || ( nstep < nstep0 ) || unit ||
- ( *invert_list )[ where ];
-
-/* Do nothing more unless simplification is possible. */
- if ( simpler ) {
-
-/* If the replacement Mapping is a UnitMap, then create it. */
- if ( unit ) {
- new = (AstMapping *)
- astUnitMap( astGetNin( ( *map_list )[ where ] ), "", status );
-
-/* Otherwise, create a replacement SpecMap and add each of the
- remaining transformation steps to it. */
- } else {
- new = (AstMapping *) astSpecMap( nin, 0, "", status );
- for ( istep = 0; istep < nstep; istep++ ) {
- AddSpecCvt( (AstSpecMap *) new, cvttype[ istep ],
- cvtargs[ istep ], status );
- }
- }
-
-/* Annul the pointers to the Mappings being eliminated. */
- if ( astOK ) {
- for ( imap = imap1; imap <= imap2; imap++ ) {
- ( *map_list )[ imap ] = astAnnul( ( *map_list )[ imap ] );
- }
-
-/* Insert the pointer and invert value for the new Mapping. */
- ( *map_list )[ imap1 ] = new;
- ( *invert_list )[ imap1 ] = 0;
-
-/* Move any subsequent Mapping information down to close the gap. */
- for ( imap = imap2 + 1; imap < *nmap; imap++ ) {
- ( *map_list )[ imap - ngone ] = ( *map_list )[ imap ];
- ( *invert_list )[ imap - ngone ] = ( *invert_list )[ imap ];
- }
-
-/* Blank out any information remaining at the end of the arrays. */
- for ( imap = ( *nmap - ngone ); imap < *nmap; imap++ ) {
- ( *map_list )[ imap ] = NULL;
- ( *invert_list )[ imap ] = 0;
- }
-
-/* Decrement the Mapping count and return the index of the first
- Mapping which was eliminated. */
- ( *nmap ) -= ngone;
- result = imap1;
-
-/* If an error occurred, annul the new Mapping pointer. */
- } else {
- new = astAnnul( new );
- }
- }
- }
-
-/* Free the memory used for the transformation steps. */
- cvttype = astFree( cvttype );
- cvtargs = astFree( cvtargs );
- szarg = astFree( szarg );
- }
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) result = -1;
-
-/* Return the result. */
- return result;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-* Name:
-* Rate
-
-* Purpose:
-* Calculate the rate of change of a Mapping output.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specmap.h"
-* result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-* Class Membership:
-* SpecMap member function (overrides the astRate method inherited
-* from the Mapping class ).
-
-* Description:
-* This function returns the rate of change of a specified output of
-* the supplied Mapping with respect to a specified input, at a
-* specified input position.
-
-* Parameters:
-* this
-* Pointer to the Mapping to be applied.
-* at
-* The address of an array holding the axis values at the position
-* at which the rate of change is to be evaluated. The number of
-* elements in this array should equal the number of inputs to the
-* Mapping.
-* ax1
-* The index of the Mapping output for which the rate of change is to
-* be found (output numbering starts at 0 for the first output).
-* ax2
-* The index of the Mapping input which is to be varied in order to
-* find the rate of change (input numbering starts at 0 for the first
-* input).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The rate of change of Mapping output "ax1" with respect to input
-* "ax2", evaluated at "at", or AST__BAD if the value cannot be
-* calculated.
-
-* Implementation Deficiencies:
-* The initial version of this implementation only deals with
-* frequency->wavelength conversions. This is because the slowness of
-* the numerical differentiation implemented by the astRate method in
-* the parent Mapping class is cripples conversion between SpecFluxFrames.
-* Such conversions only rely on rate of change of wavelength with
-* respect to frequency. This implementation should be extended when
-* needed.
-
-*/
-
-/* Local Variables: */
- AstSpecMap *map;
- double result;
- int cvt;
-
-/* Check inherited status */
- if( !astOK ) return AST__BAD;
-
-/* Get a pointer to the SpecMap structure. */
- map = (AstSpecMap *) this;
-
-/* Return 1.0 if the SpecMap has no conversions. */
- if( map->ncvt == 0 ) return 1.0;
-
-/* Store the type of the first conversion.*/
- cvt = map->cvttype[ 0 ];
-
-/* If this is a 3D SpecMap or if it has more than one component, or if
- that conversion is not between frequency and wavelength, use the
- astRate method inherited form the parent Mapping class. */
- if( astGetNin( map ) != 1 || map->ncvt != 1 ||
- ( cvt != AST__WVTOFR && cvt != AST__FRTOWV ) ) {
- result = (*parent_rate)( this, at, ax1, ax2, status );
-
-/* Otherwise, evaluate the known analytical expressions for the rate of
- change of frequency with respect to wavelength or wavelength with
- respect to frequency. */
- } else {
- result = ( *at != AST__BAD ) ? -AST__C/((*at)*(*at)) : AST__BAD;
- }
-
-/* Return the result. */
- return result;
-}
-
-static double Refrac( double wavelen, int *status ){
-/*
-* Name:
-* Refrac
-
-* Purpose:
-* Returns the refractive index of dry air at a given wavelength.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specmap.h"
-* double Refrac( double wavelen, int *status )
-
-* Class Membership:
-* SpecMap method.
-
-* Description:
-* This function returns the refractive index of dry air at standard
-* temperature and pressure, at a given wavelength. The formula is
-* taken from the paper "Representation of Spectral Coordinates in FITS"
-* (Greisen et al).
-
-* Parameters:
-* wavelen
-* The wavelength, in metres. This should be the air wavelength,
-* but supplying the vacuum wavelength will make no significant
-* difference.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The refractive index. A value of 1.0 is returned if an error
-* occurs, or has already occurred.
-
-*/
-
-/* Local Variables: */
- double w2; /* Wavenumber squared */
-
-/* Check the global error status. */
- if ( !astOK || wavelen == 0.0 ) return 1.0;
-
-/* Find the squared wave number in units of "(per um)**2". */
- w2 = 1.0E-12/( wavelen * wavelen );
-
-/* Apply the rest of the algorithm as described in the FITS WCS
- paper III. */
- return 1.0 + 1.0E-6*( 287.6155 + 1.62887*w2 + 0.01360*w2*w2 );
-}
-
-static double Rverot( double phi, double h, double ra, double da,
- double st, int *status ) {
-/*
-* Name:
-* Rverot
-
-* Purpose:
-* Find the velocity component in a given direction due to Earth rotation.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specmap.h"
-* double Rverot( double phi, double h, double ra, double da,
-* double st, int *status )
-
-* Class Membership:
-* SpecMap method.
-
-* Description:
-* This function is like slaRverot, except that it takes account of the
-* observers height (h), and does all calculations in double precision.
-
-* Parameters:
-* phi
-* The geodetic latitude of the observer (radians, IAU 1976).
-* h
-* The geodetic height above the reference spheroid of the observer
-* (metres, IAU 1976).
-* ra
-* The geocentric apparent RA (rads) of the source.
-* da
-* The geocentric apparent Dec (rads) of the source.
-* st
-* The local apparent sidereal time (radians).
-* status
-* Pointer to the inherited status variable.
-
-* Returns:
-* The component of the Earth rotation in direction [RA,DA] (km/s).
-* The result is positive when the observer is receding from the
-* given point on the sky. Zero is returned if an error has already
-* occurred.
-
-*/
-
-/* Local Variables: */
- double pv[ 6 ]; /* Observer position and velocity */
- double v[ 3 ]; /* Source direction vector */
-
-/* Check the global error status. */
- if ( !astOK ) return 0.0;
-
-/* Get the Cartesian coordinates of the unit vector pointing towards the
- given sky position. */
- palSlaDcs2c( ra, da, v );
-
-/* Get velocity and position of the observer. */
- palSlaPvobs( phi, h, st, pv );
-
-/* Return the component of the observer's velocity away from the sky
- position, and convert from AU/s to km/s. */
- return -palSlaDvdv( v, pv + 3 )*149.597870E6;
-}
-
-static void SpecAdd( AstSpecMap *this, const char *cvt, const double args[], int *status ) {
-/*
-*++
-* Name:
-c astSpecAdd
-f AST_SPECADD
-
-* Purpose:
-* Add a spectral coordinate conversion to a SpecMap.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "specmap.h"
-c void astSpecAdd( AstSpecMap *this, const char *cvt, const double args[] )
-f CALL AST_SPECADD( THIS, CVT, ARGS, STATUS )
-
-* Class Membership:
-* SpecMap method.
-
-* Description:
-c This function adds one of the standard spectral coordinate
-f This routine adds one of the standard spectral coordinate
-* system conversions listed below to an existing SpecMap.
-*
-c When a SpecMap is first created (using astSpecMap), it simply
-f When a SpecMap is first created (using AST_SPECMAP), it simply
-c performs a unit (null) Mapping. By using astSpecAdd (repeatedly
-f performs a unit (null) Mapping. By using AST_SPECADD (repeatedly
-* if necessary), one or more coordinate conversion steps may then
-* be added, which the SpecMap will perform in sequence. This allows
-* multi-step conversions between a variety of spectral coordinate
-* systems to be assembled out of the building blocks provided by
-* this class.
-*
-* Normally, if a SpecMap's Invert attribute is zero (the default),
-* then its forward transformation is performed by carrying out
-* each of the individual coordinate conversions specified by
-c astSpecAdd in the order given (i.e. with the most recently added
-f AST_SPECADD in the order given (i.e. with the most recently added
-* conversion applied last).
-*
-* This order is reversed if the SpecMap's Invert attribute is
-* non-zero (or if the inverse transformation is requested by any
-* other means) and each individual coordinate conversion is also
-* replaced by its own inverse. This process inverts the overall
-* effect of the SpecMap. In this case, the first conversion to be
-* applied would be the inverse of the one most recently added.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the SpecMap.
-c cvt
-f CVT = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string which identifies the
-f A character string which identifies the
-* spectral coordinate conversion to be added to the
-* SpecMap. See the "Available Conversions" section for details of
-* those available.
-c args
-f ARGS( * ) = DOUBLE PRECISION (Given)
-* An array containing argument values for the spectral
-* coordinate conversion. The number of arguments required, and
-* hence the number of array elements used, depends on the
-* conversion specified (see the "Available Conversions"
-* section). This array is ignored
-c and a NULL pointer may be supplied
-* if no arguments are needed.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - When assembling a multi-stage conversion, it can sometimes be
-* difficult to determine the most economical conversion path. For
-* example, when converting between reference frames, converting first
-* to the heliographic reference frame as an intermediate stage is often
-* sensible in formulating the problem, but may introduce unnecessary
-* extra conversion steps. A solution to this is to include all the steps
-* which are (logically) necessary, but then to use
-c astSimplify to simplify the resulting
-f AST_SIMPLIFY to simplify the resulting
-* SpecMap. The simplification process will eliminate any steps
-* which turn out not to be needed.
-c - This function does not check to ensure that the sequence of
-f - This routine does not check to ensure that the sequence of
-* coordinate conversions added to a SpecMap is physically
-* meaningful.
-
-* Available Conversions:
-* The following strings (which are case-insensitive) may be supplied
-c via the "cvt" parameter to indicate which spectral coordinate
-f via the CVT argument to indicate which spectral coordinate
-* conversion is to be added to the SpecMap. Where arguments are needed by
-* the conversion, they are listed in parentheses. Values for
-c these arguments should be given, via the "args" array, in the
-f these arguments should be given, via the ARGS array, in the
-* order indicated. Units and argument names are described at the end of
-* the list of conversions.
-
-* - "FRTOVL" (RF): Convert frequency to relativistic velocity.
-* - "VLTOFR" (RF): Convert relativistic velocity to Frequency.
-* - "ENTOFR": Convert energy to frequency.
-* - "FRTOEN": Convert frequency to energy.
-* - "WNTOFR": Convert wave number to frequency.
-* - "FRTOWN": Convert frequency to wave number.
-* - "WVTOFR": Convert wavelength (vacuum) to frequency.
-* - "FRTOWV": Convert frequency to wavelength (vacuum).
-* - "AWTOFR": Convert wavelength (air) to frequency.
-* - "FRTOAW": Convert frequency to wavelength (air).
-* - "VRTOVL": Convert radio to relativistic velocity.
-* - "VLTOVR": Convert relativistic to radio velocity.
-* - "VOTOVL": Convert optical to relativistic velocity.
-* - "VLTOVO": Convert relativistic to optical velocity.
-* - "ZOTOVL": Convert redshift to relativistic velocity.
-* - "VLTOZO": Convert relativistic velocity to redshift.
-* - "BTTOVL": Convert beta factor to relativistic velocity.
-* - "VLTOBT": Convert relativistic velocity to beta factor.
-* - "USF2HL" (VOFF,RA,DEC): Convert frequency from a user-defined
-* reference frame to heliocentric.
-* - "HLF2US" (VOFF,RA,DEC): Convert frequency from heliocentric
-* reference frame to user-defined.
-* - "TPF2HL" (OBSLON,OBSLAT,OBSALT,EPOCH,RA,DEC): Convert frequency from
-* topocentric reference frame to heliocentric.
-* - "HLF2TP" (OBSLON,OBSLAT,OBSALT,EPOCH,RA,DEC): Convert frequency from
-* heliocentric reference frame to topocentric.
-* - "GEF2HL" (EPOCH,RA,DEC): Convert frequency from geocentric
-* reference frame to heliocentric.
-* - "HLF2GE" (EPOCH,RA,DEC): Convert frequency from
-* heliocentric reference frame to geocentric.
-* - "BYF2HL" (EPOCH,RA,DEC): Convert frequency from
-* barycentric reference frame to heliocentric.
-* - "HLF2BY" (EPOCH,RA,DEC): Convert frequency from
-* heliocentric reference frame to barycentric.
-* - "LKF2HL" (RA,DEC): Convert frequency from kinematic LSR
-* reference frame to heliocentric.
-* - "HLF2LK" (RA,DEC): Convert frequency from heliocentric
-* reference frame to kinematic LSR.
-* - "LDF2HL" (RA,DEC): Convert frequency from dynamical LSR
-* reference frame to heliocentric.
-* - "HLF2LD" (RA,DEC): Convert frequency from heliocentric
-* reference frame to dynamical LSR.
-* - "LGF2HL" (RA,DEC): Convert frequency from local group
-* reference frame to heliocentric.
-* - "HLF2LG" (RA,DEC): Convert frequency from heliocentric
-* reference frame to local group.
-* - "GLF2HL" (RA,DEC): Convert frequency from galactic
-* reference frame to heliocentric.
-* - "HLF2GL" (RA,DEC): Convert frequency from heliocentric
-* reference frame to galactic.
-
-* The units for the values processed by the above conversions are as
-* follows:
-*
-* - all velocities: metres per second (positive if the source receeds from
-* the observer).
-* - frequency: Hertz.
-* - all wavelengths: metres.
-* - energy: Joules.
-* - wave number: cycles per metre.
-*
-* The arguments used in the above conversions are as follows:
-*
-* - RF: Rest frequency (Hz).
-* - OBSALT: Geodetic altitude of observer (IAU 1975, metres).
-* - OBSLAT: Geodetic latitude of observer (IAU 1975, radians).
-* - OBSLON: Longitude of observer (radians - positive eastwards).
-* - EPOCH: Epoch of observation (UT1 expressed as a Modified Julian Date).
-* - RA: Right Ascension of source (radians, FK5 J2000).
-* - DEC: Declination of source (radians, FK5 J2000).
-* - VOFF: Velocity of the user-defined reference frame, towards the
-* position given by RA and DEC, measured in the heliocentric
-* reference frame.
-*
-* If the SpecMap is 3-dimensional, source positions are provided by the
-* values supplied to inputs 2 and 3 of the SpecMap (which are simply
-* copied to outputs 2 and 3). Note, usable values are still required
-* for the RA and DEC arguments in order to define the "user-defined"
-* reference frame used by USF2HL and HLF2US. However, AST__BAD can be
-* supplied for RA and DEC if the user-defined reference frame is not
-* required.
-*
-*--
-*/
-
-/* Local Variables: */
- int cvttype; /* Conversion type code */
-
-/* Check the inherited status. */
- if ( !astOK ) return;
-
-/* Validate the type string supplied and obtain the equivalent
- conversion type code. */
- cvttype = CvtCode( cvt, status );
-
-/* If the string was not recognised, then report an error. */
- if ( astOK && ( cvttype == AST__SPEC_NULL ) ) {
- astError( AST__SPCIN,
- "%s(%s): Invalid SpecMap spectral coordinate "
- "conversion type \"%s\".", status, "astAddSpec", astGetClass( this ), cvt );
- }
-
-/* Add the new conversion to the SpecMap. */
- AddSpecCvt( this, cvttype, args, status );
-}
-
-static int SystemChange( int cvt_code, int np, double *values, double *args,
- int forward, int *status ){
-/*
-* Name:
-* SystemChange
-
-* Purpose:
-* Change values between two spectral systems.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specmap.h"
-* int SystemChange( int cvt_code, int np, double *values, double *args,
-* int forward, int *status )
-
-* Class Membership:
-* SpecMap method.
-
-* Description:
-* This function modifies the supplied values in order to change the
-* spectral co-ordinate system (frequency, wavelength, etc) to which
-* they refer.
-
-* Parameters:
-* cvt_code
-* A code indicating the conversion to be applied. If the code does
-* not correspond to a change of system, then the supplied values
-* are left unchanged and zero is returned as the function value.
-* np
-* The number of frequency values to transform.
-* values
-* Pointer to an array of "np" spectral values. These are modified on
-* return to hold the corresponding values measured in the output
-* system.
-* args
-* Pointer to an array holding the conversion arguments. The number
-* of arguments expected depends on the particular conversion being
-* used.
-* forward
-* Should the conversion be applied in the forward or inverse
-* direction? Non-zero for forward, zero for inverse.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the supplied conversion code corresponds to a change of
-* system. Zero otherwise (in which case the upplied values will not
-* have been changed).
-
-*/
-
-/* Local Variables: */
- double *pv; /* Pointer to next value */
- double d; /* Intermediate value */
- double f2; /* Squared frequency */
- double temp; /* Intermediate value */
- int i; /* Loop index */
- int iter; /* Iteration count */
- int result; /* Returned value */
-
-/* Check inherited status. */
- if( !astOK ) return 0;
-
-/* Set the return value to indicate that the supplied conversion code
- represents a change of system. */
- result = 1;
-
-/* Test for each code value in turn and assign the appropriate values. */
- switch ( cvt_code ) {
-
-/* Frequency to relativistic velocity. */
- case AST__FRTOVL:
- if( forward ) {
- if( args[ 0 ] != AST__BAD ) {
- temp = args[ 0 ] * args[ 0 ];
- pv = values - 1;
- for( i = 0; i < np; i++ ){
- pv++;
- if( *pv != AST__BAD ) {
- f2 = ( *pv ) * ( *pv );
- d = temp + f2;
- if( d > 0.0 ) {
- *pv = AST__C*( ( temp - f2 )/d );
- if( astISNAN( *pv ) ) *pv = AST__BAD;
- } else {
- *pv = AST__BAD;
- }
- }
- }
- } else {
- pv = values;
- for( i = 0; i < np; i++ ) *( pv++ ) = AST__BAD;
- }
- } else {
- SystemChange( AST__VLTOFR, np, values, args, 1, status );
- }
- break;
-
-/* Relativistic velocity to frequency. */
- case AST__VLTOFR:
- if( forward ) {
- if( args[ 0 ] != AST__BAD ) {
- temp = args[ 0 ];
- pv = values - 1;
- for( i = 0; i < np; i++ ){
- pv++;
- if( *pv != AST__BAD ) {
- d = AST__C + ( *pv );
- if( d != 0.0 ) {
- d = ( AST__C - ( *pv ) )/d;
- if( d >= 0.0 ) {
- *pv = temp*sqrt( d );
- if( astISNAN( *pv ) ) *pv = AST__BAD;
- } else {
- *pv = AST__BAD;
- }
- } else {
- *pv = AST__BAD;
- }
- }
- }
- } else {
- pv = values;
- for( i = 0; i < np; i++ ) *( pv++ ) = AST__BAD;
- }
- } else {
- SystemChange( AST__FRTOVL, np, values, args, 1, status );
- }
- break;
-
-/* Energy to frequency */
- case AST__ENTOFR:
- if( forward ) {
- pv = values - 1;
- for( i = 0; i < np; i++ ) {
- pv++;
- if( *pv != AST__BAD ) {
- *pv /= AST__H;
- }
- }
- } else {
- SystemChange( AST__FRTOEN, np, values, args, 1, status );
- }
- break;
-
-/* Frequency to energy */
- case AST__FRTOEN:
- if( forward ) {
- pv = values - 1;
- for( i = 0; i < np; i++ ) {
- pv++;
- if( *pv != AST__BAD ) {
- *pv *= AST__H;
- }
- }
- } else {
- SystemChange( AST__ENTOFR, np, values, args, 1, status );
- }
- break;
-
-/* Wave number to frequency */
- case AST__WNTOFR:
- if( forward ) {
- pv = values - 1;
- for( i = 0; i < np; i++ ) {
- pv++;
- if( *pv != AST__BAD ) {
- *pv *= AST__C;
- }
- }
- } else {
- SystemChange( AST__FRTOWN, np, values, args, 1, status );
- }
- break;
-
-/* Wave number to frequency */
- case AST__FRTOWN:
- if( forward ) {
- pv = values - 1;
- for( i = 0; i < np; i++ ) {
- pv++;
- if( *pv != AST__BAD ) {
- *pv /= AST__C;
- }
- }
- } else {
- SystemChange( AST__WNTOFR, np, values, args, 1, status );
- }
- break;
-
-/* Wavelength to frequency */
- case AST__WVTOFR:
- if( forward ) {
- pv = values - 1;
- for( i = 0; i < np; i++ ) {
- pv++;
- if( *pv != AST__BAD && *pv != 0.0 ) {
- *pv = AST__C/( *pv );
- if( astISNAN( *pv ) ) *pv = AST__BAD;
- } else {
- *pv = AST__BAD;
- }
- }
- } else {
- SystemChange( AST__FRTOWV, np, values, args, 1, status );
- }
- break;
-
-/* Frequency to wavelength. */
- case AST__FRTOWV:
- if( forward ) {
- pv = values - 1;
- for( i = 0; i < np; i++ ) {
- pv++;
- if( *pv != AST__BAD && *pv != 0.0 ) {
- *pv = AST__C/( *pv );
- if( astISNAN( *pv ) ) *pv = AST__BAD;
- } else {
- *pv = AST__BAD;
- }
- }
- } else {
- SystemChange( AST__WVTOFR, np, values, args, 1, status );
- }
- break;
-
-/* Wavelength in air to frequency. */
- case AST__AWTOFR:
- if( forward ) {
- pv = values - 1;
- for( i = 0; i < np; i++ ) {
- pv++;
- if( *pv != AST__BAD && *pv != 0.0 ) {
- *pv = AST__C/( ( *pv )*Refrac( *pv, status ) );
- if( astISNAN( *pv ) ) *pv = AST__BAD;
- } else {
- *pv = AST__BAD;
- }
- }
- } else {
- SystemChange( AST__FRTOAW, np, values, args, 1, status );
- }
- break;
-
-/* Frequency to wavelength in air. */
- case AST__FRTOAW:
- if( forward ) {
- pv = values - 1;
- for( i = 0; i < np; i++ ) {
- pv++;
- if( *pv != AST__BAD && *pv != 0.0 ) {
-
-/* Form the vacuum wavelength. */
- temp = AST__C/( *pv );
-
-/* The refractive index function "Refrac" requires the wavelength in air
- as its parameter. Initially assume that the wavelength in air is equal
- to the vacuum wavelength to get he first estimate of the wavelength in
- air. Then use this estimate to get a better refractive index in order to
- form a better estimate of the air wavelength, etc. Iterate in this way a
- few times. */
- *pv = temp;
- for( iter = 0; iter < 3; iter++ ) {
- *pv = temp/Refrac( *pv, status );
- if( astISNAN( *pv ) ) {
- *pv = AST__BAD;
- break;
- }
- }
-
- } else {
- *pv = AST__BAD;
- }
- }
- } else {
- SystemChange( AST__AWTOFR, np, values, args, 1, status );
- }
- break;
-
-/* Radio velocity to relativistic velocity */
- case AST__VRTOVL:
- if( forward ) {
- pv = values - 1;
- for( i = 0; i < np; i++ ) {
- pv++;
- if( *pv != AST__BAD ) {
- temp = 1.0 - ( *pv )/AST__C;
- temp *= temp;
- *pv = AST__C*( 1.0 - temp )/( 1.0 + temp );
- if( astISNAN( *pv ) ) *pv = AST__BAD;
- }
- }
- } else {
- SystemChange( AST__VLTOVR, np, values, args, 1, status );
- }
- break;
-
-/* Relativistic velocity to radio velocity. */
- case AST__VLTOVR:
- if( forward ) {
- pv = values - 1;
- for( i = 0; i < np; i++ ) {
- pv++;
- if( *pv != AST__BAD ) {
- temp = AST__C + ( *pv );
- if( temp != 0.0 ) {
- temp = (AST__C - *pv )/temp;
- if( temp >= 0.0 ) {
- *pv = AST__C*( 1.0 - sqrt( temp ) );
- if( astISNAN( *pv ) ) *pv = AST__BAD;
- } else {
- *pv = AST__BAD;
- }
- } else {
- *pv = AST__BAD;
- }
- }
- }
- } else {
- SystemChange( AST__VRTOVL, np, values, args, 1, status );
- }
- break;
-
-/* Optical velocity to relativistic velocity */
- case AST__VOTOVL:
- if( forward ) {
- pv = values - 1;
- for( i = 0; i < np; i++ ) {
- pv++;
- if( *pv != AST__BAD ) {
- temp = 1.0 + ( *pv )/AST__C;
- temp *= temp;
- *pv = AST__C*( temp - 1.0 )/( temp + 1.0 );
- if( astISNAN( *pv ) ) *pv = AST__BAD;
- }
- }
- } else {
- SystemChange( AST__VLTOVO, np, values, args, 1, status );
- }
- break;
-
-/* Relativistic velocity to optical velocity. */
- case AST__VLTOVO:
- if( forward ) {
- pv = values - 1;
- for( i = 0; i < np; i++ ) {
- pv++;
- if( *pv != AST__BAD ) {
- temp = AST__C - *pv;
- if( temp != 0.0 ) {
- temp = (AST__C + *pv )/temp;
- if( temp >= 0.0 ) {
- *pv = AST__C*( sqrt( temp ) - 1.0 );
- if( astISNAN( *pv ) ) *pv = AST__BAD;
- } else {
- *pv = AST__BAD;
- }
- } else {
- *pv = AST__BAD;
- }
- }
- }
- } else {
- SystemChange( AST__VOTOVL, np, values, args, 1, status );
- }
- break;
-
-/* Redshift to relativistic velocity */
- case AST__ZOTOVL:
- if( forward ) {
- pv = values - 1;
- for( i = 0; i < np; i++ ) {
- pv++;
- if( *pv != AST__BAD ) {
- temp = 1.0 + ( *pv );
- temp *= temp;
- *pv = AST__C*( temp - 1.0 )/( temp + 1.0 );
- if( astISNAN( *pv ) ) *pv = AST__BAD;
- }
- }
- } else {
- SystemChange( AST__VLTOZO, np, values, args, 1, status );
- }
- break;
-
-/* Relativistic velocity to redshift. */
- case AST__VLTOZO:
- if( forward ) {
- pv = values - 1;
- for( i = 0; i < np; i++ ) {
- pv++;
- if( *pv != AST__BAD ) {
- temp = AST__C - *pv;
- if( temp != 0.0 ) {
- temp = (AST__C + *pv )/temp;
- if( temp >= 0.0 ) {
- *pv = sqrt( temp ) - 1.0;
- if( astISNAN( *pv ) ) *pv = AST__BAD;
- } else {
- *pv = AST__BAD;
- }
- } else {
- *pv = AST__BAD;
- }
- }
- }
- } else {
- SystemChange( AST__ZOTOVL, np, values, args, 1, status );
- }
- break;
-
-/* Beta factor to relativistic velocity */
- case AST__BTTOVL:
- if( forward ) {
- pv = values - 1;
- for( i = 0; i < np; i++ ) {
- pv++;
- if( *pv != AST__BAD ) {
- *pv *= AST__C;
- }
- }
- } else {
- SystemChange( AST__VLTOBT, np, values, args, 1, status );
- }
- break;
-
-/* Relativistic velocity to beta factor. */
- case AST__VLTOBT:
- if( forward ) {
- pv = values - 1;
- for( i = 0; i < np; i++ ) {
- pv++;
- if( *pv != AST__BAD ) {
- *pv /= AST__C;
- }
- }
- } else {
- SystemChange( AST__BTTOVL, np, values, args, 1, status );
- }
- break;
-
-/* If the supplied code does not represent a change of system, clear
- the returned flag. */
- default:
- result = 0;
- }
-
-/* Return the result. */
- return result;
-}
-
-static double TopoVel( double ra, double dec, FrameDef *def, int *status ) {
-/*
-* Name:
-* TopoVel
-
-* Purpose:
-* Find the velocity of the observer away from the source.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specmap.h"
-* double TopoVel( double ra, double dec, FrameDef *def, int *status )
-
-* Class Membership:
-* SpecMap method.
-
-* Description:
-* This function finds the component of the velocity of the observer away
-* from a specified source position, at a given epoch, in the frame of
-* rest of the Sun.
-
-* Parameters:
-* ra
-* The RA (rads, FK5 J2000) of the source.
-* dec
-* The Dec (rads, FK5 J2000) of the source.
-* def
-* Pointer to a FrameDef structure which holds the parameters which
-* define the frame, together with cached intermediate results.
-* status
-* Pointer to the inherited status variable.
-
-* Returns:
-* The component of the frame's velocity away from the position given by
-* "ra" and "dec", in m/s, measured within the Heliographic frame of
-* rest. Zero is returned if an error has already occurred.
-
-*/
-
-/* Local Variables: */
- double deca; /* Apparent DEC */
- double raa; /* Apparent RA */
- double vobs; /* Velocity of observer relative to earth */
- double vearth; /* Velocity of earth realtive to sun */
-
-/* Check the global error status. */
- if ( !astOK ) return 0.0;
-
-/* If not already done so, get the parameters defining the transformation
- of mean ra and dec to apparent ra and dec, and store in the supplied frame
- definition structure. */
- if( def->amprms[ 0 ] == AST__BAD ) palSlaMappa( 2000.0, def->epoch,
- def->amprms );
-
-/* Convert the source position from mean ra and dec to apparent ra and dec. */
- palSlaMapqkz( ra, dec, def->amprms, &raa, &deca );
-
-/* If not already done so, get the local apparent siderial time (in radians)
- and store in the supplied frame definition structure. */
- if( def->last == AST__BAD ) def->last = palSlaGmst( def->epoch ) +
- palSlaEqeqx( def->epoch ) +
- def->obslon;
-
-/* Get the component away from the source, of the velocity of the observer
- relative to the centre of the earth (in m/s). */
- vobs = 1000.0*Rverot( def->obslat, def->obsalt, raa, deca, def->last,
- status );
-
-/* Get the component away from the source, of the velocity of the earth's
- centre relative to the Sun, in m/s. */
- vearth = GeoVel( ra, dec, def, status );
-
-/* Return the total velocity of the observer away from the source in the
- frame of the sun. */
- return vobs + vearth;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a SpecMap to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specmap.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* SpecMap member function (over-rides the astTransform method inherited
-* from the Mapping class).
-
-* Description:
-* This function takes a SpecMap and a set of points encapsulated
-* in a PointSet and transforms the points so as to perform the
-* sequence of spectral coordinate conversions specified by
-* previous invocations of astSpecAdd.
-
-* Parameters:
-* this
-* Pointer to the SpecMap.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of coordinates for the SpecMap being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstPointSet *result; /* Pointer to output PointSet */
- AstSpecMap *map; /* Pointer to SpecMap to be applied */
- double **ptr_in; /* Pointer to input coordinate data */
- double **ptr_out; /* Pointer to output coordinate data */
- double *spec; /* Pointer to output spectral axis value array */
- double *alpha; /* Pointer to output RA axis value array */
- double *beta; /* Pointer to output DEC axis value array */
- int cvt; /* Loop counter for conversions */
- int end; /* Termination index for conversion loop */
- int inc; /* Increment for conversion loop */
- int map3d; /* Is the SpecMap 3-dimensional? */
- int ncoord_in; /* Number of coordinates per input point */
- int npoint; /* Number of points */
- int start; /* Starting index for conversion loop */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the SpecMap. */
- map = (AstSpecMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Mapping class. This function validates
- all arguments and generates an output PointSet if necessary, but does not
- actually transform any coordinate values. */
- result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- coordinate conversions needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
- PointSet and obtain pointers for accessing the input and output coordinate
- values. */
- ncoord_in = astGetNcoord( in );
- npoint = astGetNpoint( in );
- ptr_in = astGetPoints( in );
- ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse transformation, according
- to the direction specified and whether the mapping has been inverted. */
- if ( astGetInvert( this ) ) forward = !forward;
-
-/* Transform the coordinate values. */
-/* -------------------------------- */
-/* Use "spec" as a synonym for the array of spectral axis values stored in
- the output PointSet. */
- if ( astOK ) {
- spec = ptr_out[ 0 ];
-
-/* If this is a 3D SpecMap use "alpha" as a synonym for the array of RA axis
- values and "beta" as a synonym for the array of DEC axis values stored
- in the output PointSet. */
- map3d = ( ncoord_in == 3 );
- if( map3d ) {
- alpha = ptr_out[ 1 ];
- beta = ptr_out[ 2 ];
- } else {
- alpha = NULL;
- beta = NULL;
- }
-
-/* Initialise the output coordinate values by copying the input ones. */
- (void) memcpy( spec, ptr_in[ 0 ], sizeof( double ) * (size_t) npoint );
- if( map3d ) {
- (void) memcpy( alpha, ptr_in[ 1 ], sizeof( double ) * (size_t) npoint );
- (void) memcpy( beta, ptr_in[ 2 ], sizeof( double ) * (size_t) npoint );
- }
-
-/* We will loop to apply each spectral coordinate conversion in turn to the
- (spec) array. However, if the inverse transformation was requested,
- we must loop through these transformations in reverse order, so set up
- appropriate limits and an increment to control this loop. */
- start = forward ? 0 : map->ncvt - 1;
- end = forward ? map->ncvt : -1;
- inc = forward ? 1 : -1;
-
-/* Loop through the coordinate conversions in the required order. */
- for ( cvt = start; cvt != end; cvt += inc ) {
-
-/* Process conversions which correspond to changes of reference frames. */
- if( !FrameChange( map->cvttype[ cvt ], npoint, alpha, beta, spec,
- map->cvtargs[ cvt ], forward, status ) ) {
-
-/* If this conversion was not a change of reference frame, it must be a
- change of system. */
- SystemChange( map->cvttype[ cvt ], npoint, spec,
- map->cvtargs[ cvt ], forward, status );
- }
- }
- }
-
-/* If an error has occurred and a new PointSet may have been created, then
- clean up by annulling it. In any case, ensure that a NULL result is
- returned.*/
- if ( !astOK ) {
- if ( !out ) result = astAnnul( result );
- result = NULL;
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-
-}
-
-static double UserVel( double ra, double dec, FrameDef *def, int *status ) {
-/*
-* Name:
-* UserVel
-
-* Purpose:
-* Find the component of the velocity of the user-defined rest-frame
-* away from the source.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specmap.h"
-* double UserVel( double ra, double dec, FrameDef *def, int *status )
-
-* Class Membership:
-* SpecMap method.
-
-* Description:
-* This function finds the component of the velocity of the user-defined
-* rest-frame away from a specified position. The magnitude and direction
-* of the rest-frames velocity are defined within the supplied "def"
-* structure. The user-defined rest-frame is typically used to represent
-* the velocity of the source within the heliocentric rest-frame.
-
-* Parameters:
-* ra
-* The RA (rads, FK5 J2000) of the source.
-* dec
-* The Dec (rads, FK5 J2000) of the source.
-* def
-* Pointer to a FrameDef structure which holds the parameters which
-* define the frame, together with cached intermediate results.
-* status
-* Pointer to the inherited status variable.
-
-* Returns:
-* The component of the frame's velocity away from the position given by
-* "ra" and "dec", in m/s, measured within the Heliographic frame of
-* rest. Zero is returned if an error has already occurred.
-
-* Notes:
-* - The direction of the user velocity is given by def->refra and
-* def->refdec (an FK5 J2000 position). The maginitude of the velocity
-* is given by def->veluser, in m/s, positive when the source is moving
-* away from the observer towards def->refra, def->refdec, and given
-* with respect to the heliocentric rest-frame.
-
-*/
-
-/* Local Variables: */
- double vb[ 3 ]; /* Source position vector */
-
-/* Check the global error status. */
- if ( !astOK ) return 0.0;
-
-/* If not already done so, express the user velocity in the form of a
- J2000.0 x,y,z vector. */
- if( def->vuser[ 0 ] == AST__BAD ) {
- def->vuser[ 0 ] = def->veluser*cos( def->refra )*cos( def->refdec );
- def->vuser[ 1 ] = def->veluser*sin( def->refra )*cos( def->refdec );
- def->vuser[ 2 ] = def->veluser*sin( def->refdec );
- }
-
-/* Convert given J2000 RA,Dec to x,y,z. */
- palSlaDcs2c( ra, dec, vb );
-
-/* Return the dot product with the user velocity. Invert it to get the
- velocity towards the observer (the def->veluser value is supposed to be
- positive if the source is moving away from the observer). */
- return -palSlaDvdv( def->vuser, vb );
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for SpecMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for SpecMap objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstSpecMap *in; /* Pointer to input SpecMap */
- AstSpecMap *out; /* Pointer to output SpecMap */
- int cvt; /* Loop counter for coordinate conversions */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output SpecMap structures. */
- in = (AstSpecMap *) objin;
- out = (AstSpecMap *) objout;
-
-/* For safety, first clear any references to the input memory from the output
- SpecMap. */
- out->cvtargs = NULL;
- out->cvttype = NULL;
-
-/* Allocate memory for the output array of argument list pointers. */
- out->cvtargs = astMalloc( sizeof( double * ) * (size_t) in->ncvt );
-
-/* If necessary, allocate memory and make a copy of the input array of
- coordinate conversion codes. */
- if ( in->cvttype ) out->cvttype = astStore( NULL, in->cvttype,
- sizeof( int )
- * (size_t) in->ncvt );
-
-/* If OK, loop through each conversion in the input SpecMap and make a copy of
- its argument list, storing the new pointer in the output argument list
- array. */
- if ( astOK ) {
- for ( cvt = 0; cvt < in->ncvt; cvt++ ) {
- out->cvtargs[ cvt ] = astStore( NULL, in->cvtargs[ cvt ],
- astSizeOf( in->cvtargs[ cvt ] ) );
- }
-
-/* If an error occurred while copying the argument lists, loop through the
- conversions again and clean up by ensuring that the new memory allocated for
- each argument list is freed. */
- if ( !astOK ) {
- for ( cvt = 0; cvt < in->ncvt; cvt++ ) {
- out->cvtargs[ cvt ] = astFree( out->cvtargs[ cvt ] );
- }
- }
- }
-
-/* If an error occurred, free all other memory allocated above. */
- if ( !astOK ) {
- out->cvtargs = astFree( out->cvtargs );
- out->cvttype = astFree( out->cvttype );
- }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for SpecMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for SpecMap objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstSpecMap *this; /* Pointer to SpecMap */
- int cvt; /* Loop counter for coordinate conversions */
-
-/* Obtain a pointer to the SpecMap structure. */
- this = (AstSpecMap *) obj;
-
-/* Loop to free the memory containing the argument list for each coordinate
- conversion. */
- for ( cvt = 0; cvt < this->ncvt; cvt++ ) {
- this->cvtargs[ cvt ] = astFree( this->cvtargs[ cvt ] );
- }
-
-/* Free the memory holding the array of conversion types and the array of
- argument list pointers. */
- this->cvtargs = astFree( this->cvtargs );
- this->cvttype = astFree( this->cvttype );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for SpecMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specmap.h"
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the SpecMap class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the SpecMap whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstSpecMap *this; /* Pointer to the SpecMap structure */
- char key[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- const char *argdesc[ MAX_ARGS ]; /* Pointers to argument descriptions */
- const char *comment; /* Pointer to comment string */
- const char *sval; /* Pointer to string value */
- int argdec; /* Index of DEC argument */
- int argra; /* Index of RA argument */
- int iarg; /* Loop counter for arguments */
- int icvt; /* Loop counter for conversion steps */
- int ival; /* Integer value */
- int nargs; /* Number of user-supplied arguments */
- int szargs; /* Number of stored arguments */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SpecMap structure. */
- this = (AstSpecMap *) this_object;
-
-/* Write out values representing the instance variables for the SpecMap
- class. Accompany these with appropriate comment strings, possibly
- depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* Number of conversion steps. */
-/* --------------------------- */
-/* Regard this as "set" if it is non-zero. */
- ival = this->ncvt;
- set = ( ival != 0 );
- astWriteInt( channel, "Nspec", set, 0, ival, "Number of conversion steps" );
-
-/* Write out data for each conversion step... */
- for ( icvt = 0; icvt < this->ncvt; icvt++ ) {
-
-/* Conversion type. */
-/* ---------------- */
-/* Change each conversion type code into an equivalent string and
- obtain associated descriptive information. If the conversion code
- was not recognised, report an error and give up. */
- if ( astOK ) {
- sval = CvtString( this->cvttype[ icvt ], &comment, &argra, &argdec,
- &nargs, &szargs, argdesc, status );
- if ( astOK && !sval ) {
- astError( AST__SPCIN,
- "astWrite(%s): Corrupt %s contains invalid SpecMap "
- "spectral coordinate conversion code (%d).", status,
- astGetClass( channel ), astGetClass( this ),
- (int) this->cvttype[ icvt ] );
- break;
- }
-
-/* Create an appropriate keyword and write out the conversion code
- information. */
- (void) sprintf( key, "Spec%d", icvt + 1 );
- astWriteString( channel, key, 1, 1, sval, comment );
-
-/* Write out data for each conversion argument... */
- for ( iarg = 0; iarg < szargs; iarg++ ) {
-
-/* Arguments. */
-/* ---------- */
-/* Create an appropriate keyword and write out the argument value,
- accompanied by the descriptive comment obtained above. */
- if( this->cvtargs[ icvt ][ iarg ] != AST__BAD ) {
- (void) sprintf( key, "Spec%d%c", icvt + 1, ALPHABET[ iarg ] );
- astWriteDouble( channel, key, 1, 1, this->cvtargs[ icvt ][ iarg ],
- argdesc[ iarg ] );
- }
- }
-
-/* Quit looping if an error occurs. */
- if ( !astOK ) break;
- }
- }
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsASpecMap and astCheckSpecMap functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(SpecMap,Mapping)
-astMAKE_CHECK(SpecMap)
-
-AstSpecMap *astSpecMap_( int nin, int flags, const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astSpecMap
-f AST_SPECMAP
-
-* Purpose:
-* Create a SpecMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "specmap.h"
-c AstSpecMap *astSpecMap( int nin, int flags, const char *options, ... )
-f RESULT = AST_SPECMAP( NIN, FLAGS, OPTIONS, STATUS )
-
-* Class Membership:
-* SpecMap constructor.
-
-* Description:
-* This function creates a new SpecMap and optionally initialises
-* its attributes.
-*
-* An SpecMap is a specialised form of Mapping which can be used to
-* represent a sequence of conversions between standard spectral
-* coordinate systems. This includes conversions between frequency,
-* wavelength, and various forms of velocity, as well as conversions
-* between different standards of rest.
-*
-* When a SpecMap is first created, it simply performs a unit
-c (null) Mapping. Using the astSpecAdd function,
-f (null) Mapping. Using the AST_SPECADD routine,
-* a series of coordinate conversion steps may then be added, selected
-* from the list of supported conversions. This allows multi-step
-* conversions between a variety of spectral coordinate systems to
-* be assembled out of the building blocks provided by this class.
-*
-* For details of the individual coordinate conversions available,
-c see the description of the astSpecAdd function.
-f see the description of the AST_SPECADD routine.
-*
-* Conversions are available to transform between standards of rest.
-* Such conversions need to know the source position as an RA and DEC.
-* This information can be supplied in the form of parameters for
-* the relevant conversions, in which case the SpecMap is 1-dimensional,
-* simply transforming the spectral axis values. This means that the
-* same source position will always be used by the SpecMap. However, this
-* may not be appropriate for an accurate description of a 3-D spectral
-* cube, where changes of spatial position can produce significant
-* changes in the Doppler shift introduced when transforming between
-* standards of rest. For this situation, a 3-dimensional SpecMap can
-* be created in which axes 2 and 3 correspond to the source RA and DEC
-* The SpecMap simply copies values for axes 2 and 3 from input to
-* output).
-
-* Parameters:
-c nin
-f NIN = INTEGER (Given)
-* The number of inputs to the Mapping (this will also equal the
-* number of outputs). This value must be either 1 or 3. In either
-* case, the first input and output correspoindis the spectral axis.
-* For a 3-axis SpecMap, the second and third axes give the RA and
-* DEC (J2000 FK5) of the source. This positional information is
-* used by conversions which transform between standards of rest,
-* and replaces the "RA" and "DEC" arguments for the individual
-* conversions listed in description of the "SpecAdd"
-c function.
-f routine.
-c flags
-f FLAGS = INTEGER (Given)
-c This parameter is reserved for future use and should currently
-f This argument is reserved for future use and should currently
-* always be set to zero.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new SpecMap. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-c If no initialisation is required, a zero-length string may be
-c supplied.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new SpecMap. The syntax used is identical to that for the
-f AST_SET routine. If no initialisation is required, a blank
-f value may be supplied.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astSpecMap()
-f AST_SPECMAP = INTEGER
-* A pointer to the new SpecMap.
-
-* Notes:
-* - The nature and units of the coordinate values supplied for the
-* first input (i.e. the spectral input) of a SpecMap must be appropriate
-* to the first conversion step applied by the SpecMap. For instance, if
-* the first conversion step is "FRTOVL" (frequency to relativistic
-* velocity), then the coordinate values for the first input should
-* be frequency in units of Hz. Similarly, the nature and units of the
-* coordinate values returned by a SpecMap will be determined by the
-* last conversion step applied by the SpecMap. For instance, if the
-* last conversion step is "VLTOVO" (relativistic velocity to optical
-* velocity), then the coordinate values for the first output will be optical
-* velocity in units of metres per second. See the description of the
-c astSpecAdd function for the units expected and returned by each
-f AST_SPECADD routine for the units expected and returned by each
-* conversion.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstSpecMap *new; /* Pointer to the new SpecMap */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the SpecMap, allocating memory and initialising the virtual
- function table as well if necessary. */
- new = astInitSpecMap( NULL, sizeof( AstSpecMap ), !class_init, &class_vtab,
- "SpecMap", nin, flags );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new SpecMap's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new SpecMap. */
- return new;
-}
-
-AstSpecMap *astSpecMapId_( int nin, int flags, const char *options, ... ) {
-/*
-* Name:
-* astSpecMapId_
-
-* Purpose:
-* Create a SpecMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "specmap.h"
-* AstSpecMap *astSpecMapId_( int nin, int flags, const char *options, ... )
-
-* Class Membership:
-* SpecMap constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astSpecMap constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astSpecMap_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astSpecMap_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astSpecMap_.
-
-* Returned Value:
-* The ID value associated with the new SpecMap.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstSpecMap *new; /* Pointer to the new SpecMap */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the SpecMap, allocating memory and initialising the virtual
- function table as well if necessary. */
- new = astInitSpecMap( NULL, sizeof( AstSpecMap ), !class_init, &class_vtab,
- "SpecMap", nin, flags );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new SpecMap's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new SpecMap. */
- return astMakeId( new );
-}
-
-AstSpecMap *astInitSpecMap_( void *mem, size_t size, int init,
- AstSpecMapVtab *vtab, const char *name,
- int nin, int flags, int *status ) {
-/*
-*+
-* Name:
-* astInitSpecMap
-
-* Purpose:
-* Initialise a SpecMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "specmap.h"
-* AstSpecMap *astInitSpecMap( void *mem, size_t size, int init,
-* AstSpecMapVtab *vtab, const char *name,
-* int nin, int flags )
-
-* Class Membership:
-* SpecMap initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new SpecMap object. It allocates memory (if necessary) to accommodate
-* the SpecMap plus any additional data associated with the derived class.
-* It then initialises a SpecMap structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a SpecMap at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the SpecMap is to be initialised.
-* This must be of sufficient size to accommodate the SpecMap data
-* (sizeof(SpecMap)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the SpecMap (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the SpecMap
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the SpecMap's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new SpecMap.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astClass
-* method).
-* nin
-* The number of inputs and outputs for the SpecMap (either 1 or 3).
-* flags
-* This parameter is reserved for future use. It is currently ignored.
-
-* Returned Value:
-* A pointer to the new SpecMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstSpecMap *new; /* Pointer to the new SpecMap */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Check nin is OK (1 or 3). */
- if( nin != 1 && nin != 3 ) {
- astError( AST__BADNI, "astInitSpecMap(SpecMap): Supplied number of "
- "SpecMap axes (%d) is illegal; it should be 1 or 2. ", status,
- nin );
- }
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitSpecMapVtab( vtab, name );
-
-/* Initialise a 1D Mapping structure (the parent class) as the first component
- within the SpecMap structure, allocating memory if necessary. Specify that
- the Mapping should be defined in both the forward and inverse directions. */
- new = (AstSpecMap *) astInitMapping( mem, size, 0,
- (AstMappingVtab *) vtab, name,
- nin, nin, 1, 1 );
-
- if ( astOK ) {
-
-/* Initialise the SpecMap data. */
-/* --------------------------- */
-/* The initial state is with no conversions set, in which condition the
- SpecMap simply implements a unit mapping. */
- new->ncvt = 0;
- new->cvtargs = NULL;
- new->cvttype = NULL;
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstSpecMap *astLoadSpecMap_( void *mem, size_t size,
- AstSpecMapVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadSpecMap
-
-* Purpose:
-* Load a SpecMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "specmap.h"
-* AstSpecMap *astLoadSpecMap( void *mem, size_t size,
-* AstSpecMapVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* SpecMap loader.
-
-* Description:
-* This function is provided to load a new SpecMap using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* SpecMap structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a SpecMap at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the SpecMap is to be
-* loaded. This must be of sufficient size to accommodate the
-* SpecMap data (sizeof(SpecMap)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the SpecMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the SpecMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstSpecMap) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new SpecMap. If this is NULL, a pointer to
-* the (static) virtual function table for the SpecMap class is
-* used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "SpecMap" is used instead.
-
-* Returned Value:
-* A pointer to the new SpecMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Constants: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstSpecMap *new; /* Pointer to the new SpecMap */
- char *sval; /* Pointer to string value */
- char key[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- const char *argdesc[ MAX_ARGS ]; /* Pointers to argument descriptions */
- const char *comment; /* Pointer to comment string */
- int argdec; /* Index of DEC argument */
- int argra; /* Index of RA argument */
- int iarg; /* Loop counter for arguments */
- int icvt; /* Loop counter for conversion steps */
- int nargs; /* Number of user-supplied arguments */
- int szargs; /* Number of stored arguments */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this SpecMap. In this case the
- SpecMap belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstSpecMap );
- vtab = &class_vtab;
- name = "SpecMap";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitSpecMapVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built SpecMap. */
- new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "SpecMap" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* Number of conversion steps. */
-/* --------------------------- */
-/* Read the number of conversion steps and allocate memory to hold
- data for each step. */
- new->ncvt = astReadInt( channel, "nspec", 0 );
- if ( new->ncvt < 0 ) new->ncvt = 0;
- new->cvttype = astMalloc( sizeof( int ) * (size_t) new->ncvt );
- new->cvtargs = astMalloc( sizeof( double * ) * (size_t) new->ncvt );
-
-/* If an error occurred, ensure that all allocated memory is freed. */
- if ( !astOK ) {
- new->cvttype = astFree( new->cvttype );
- new->cvtargs = astFree( new->cvtargs );
-
-/* Otherwise, initialise the argument pointer array. */
- } else {
- for ( icvt = 0; icvt < new->ncvt; icvt++ ) {
- new->cvtargs[ icvt ] = NULL;
- }
-
-/* Read in data for each conversion step... */
- for ( icvt = 0; icvt < new->ncvt; icvt++ ) {
-
-/* Conversion type. */
-/* ---------------- */
-/* Create an appropriate keyword and read the string representation of
- the conversion type. */
- (void) sprintf( key, "spec%d", icvt + 1 );
- sval = astReadString( channel, key, NULL );
-
-/* If no value was read, report an error. */
- if ( astOK ) {
- if ( !sval ) {
- astError( AST__BADIN,
- "astRead(%s): A spectral coordinate conversion "
- "type is missing from the input SpecMap data.", status,
- astGetClass( channel ) );
-
-/* Otherwise, convert the string representation into the required
- conversion type code. */
- } else {
- new->cvttype[ icvt ] = CvtCode( sval, status );
-
-/* If the string was not recognised, report an error. */
- if ( new->cvttype[ icvt ] == AST__SPEC_NULL ) {
- astError( AST__BADIN,
- "astRead(%s): Invalid spectral conversion "
- "type \"%s\" in SpecMap data.", status,
- astGetClass( channel ), sval );
- }
- }
-
-/* Free the memory holding the string value. */
- sval = astFree( sval );
- }
-
-/* Obtain the number of arguments associated with the conversion and
- allocate memory to hold them. */
- (void) CvtString( new->cvttype[ icvt ], &comment, &argra,
- &argdec, &nargs, &szargs, argdesc, status );
- new->cvtargs[ icvt ] = astMalloc( sizeof( double ) *
- (size_t) szargs );
-
-/* Read in data for each argument... */
- if ( astOK ) {
- for ( iarg = 0; iarg < szargs; iarg++ ) {
-
-/* Arguments. */
-/* ---------- */
-/* Create an appropriate keyword and read each argument value. */
- (void) sprintf( key, "spec%d%c", icvt + 1, ALPHABET[ iarg ] );
- new->cvtargs[ icvt ][ iarg ] = astReadDouble( channel, key,
- AST__BAD );
- }
- }
-
-/* Quit looping if an error occurs. */
- if ( !astOK ) break;
- }
- }
-
-/* If an error occurred, clean up by deleting the new SpecMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new SpecMap pointer. */
- return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-void astSpecAdd_( AstSpecMap *this, const char *cvt, const double args[], int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,SpecMap,SpecAdd))( this, cvt, args, status );
-}
-
-
-
-
diff --git a/ast-5.3-1/specmap.h b/ast-5.3-1/specmap.h
deleted file mode 100644
index 946f2b9..0000000
--- a/ast-5.3-1/specmap.h
+++ /dev/null
@@ -1,282 +0,0 @@
-#if !defined( SPECMAP_INCLUDED ) /* Include this file only once */
-#define SPECMAP_INCLUDED
-/*
-*+
-* Name:
-* specmap.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the SpecMap class.
-
-* Invocation:
-* #include "specmap.h"
-
-* Description:
-* This include file defines the interface to the SpecMap class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The SpecMap class encapsulates various ecptral coordinate
-* conversions. Since, typically, a sequence of these conversions is
-* required, a SpecMap can be used to accumulate a series of conversions
-* which it then applies in sequence.
-
-* Inheritance:
-* The SpecMap class inherits from the Mapping class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* None.
-
-* Methods Over-Ridden:
-* Public:
-* astTransform
-* Use an SpecMap to transform a set of points.
-
-* Protected:
-* astMapMerge
-* Simplify a sequence of Mappings containing an SpecMap.
-
-* New Methods Defined:
-* Public:
-* astSpecAdd
-* Add a coordinate conversion step to an SpecMap.
-
-* Private:
-* None.
-
-* Other Class Functions:
-* Public:
-* astIsASpecMap
-* Test class membership.
-* astSpecMap
-* Create an SpecMap.
-
-* Protected:
-* astCheckSpecMap
-* Validate class membership.
-* astInitSpecMap
-* Initialise an SpecMap.
-* astLoadSpecMap
-* Load an SpecMap.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstSpecMap
-* SpecMap object type.
-
-* Protected:
-* AstSpecMapVtab
-* SpecMap virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 8-NOV-2002 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ------ */
-/* Physical constants taken from Chapter 15 of the "Explanatory Supplement
- to the Astronomical Ephemeris". */
-#define AST__C 2.99792458E8 /* Speed of light (metres per second) */
-#define AST__H 6.6260755E-34 /* Plank constant (Joule.seconds) */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* SpecMap structure. */
-/* ----------------- */
-/* This structure contains all information that is unique to each
- object in the class (e.g. its instance variables). */
-typedef struct AstSpecMap {
-
-/* Attributes inherited from the parent class. */
- AstMapping mapping; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- int *cvttype; /* Pointer to array of conversion types */
- double **cvtargs; /* Pointer to argument list pointer array */
- int ncvt; /* Number of conversions to perform */
-} AstSpecMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstSpecMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstMappingVtab mapping_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- void (* SpecAdd)( AstSpecMap *, const char *, const double[], int * );
-} AstSpecMapVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstSpecMapGlobals {
- AstSpecMapVtab Class_Vtab;
- int Class_Init;
-} AstSpecMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitSpecMapGlobals_( AstSpecMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(SpecMap) /* Check class membership */
-astPROTO_ISA(SpecMap) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstSpecMap *astSpecMap_( int, int, const char *, int *, ...);
-#else
-AstSpecMap *astSpecMapId_( int, int, const char *, ... )__attribute__((format(printf,3,4)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstSpecMap *astInitSpecMap_( void *, size_t, int, AstSpecMapVtab *,
- const char *, int, int, int * );
-
-/* Vtab initialiser. */
-void astInitSpecMapVtab_( AstSpecMapVtab *, const char *, int * );
-
-/* Loader. */
-AstSpecMap *astLoadSpecMap_( void *, size_t, AstSpecMapVtab *,
- const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-void astSpecAdd_( AstSpecMap *, const char *, const double[], int * );
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckSpecMap(this) astINVOKE_CHECK(SpecMap,this,0)
-#define astVerifySpecMap(this) astINVOKE_CHECK(SpecMap,this,1)
-
-/* Test class membership. */
-#define astIsASpecMap(this) astINVOKE_ISA(SpecMap,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astSpecMap astINVOKE(F,astSpecMap_)
-#else
-#define astSpecMap astINVOKE(F,astSpecMapId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitSpecMap(mem,size,init,vtab,name,nin,flags) \
-astINVOKE(O,astInitSpecMap_(mem,size,init,vtab,name,nin,flags,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitSpecMapVtab(vtab,name) astINVOKE(V,astInitSpecMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadSpecMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadSpecMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckSpecMap to validate SpecMap pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-#define astSpecAdd(this,cvt,args) \
-astINVOKE(V,astSpecAdd_(astCheckSpecMap(this),cvt,args,STATUS_PTR))
-
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/sphmap.c b/ast-5.3-1/sphmap.c
deleted file mode 100644
index cc67f46..0000000
--- a/ast-5.3-1/sphmap.c
+++ /dev/null
@@ -1,1873 +0,0 @@
-/*
-*class++
-* Name:
-* SphMap
-
-* Purpose:
-* Map 3-d Cartesian to 2-d spherical coordinates
-
-* Constructor Function:
-c astSphMap
-f AST_SPHMAP
-
-* Description:
-* A SphMap is a Mapping which transforms points from a
-* 3-dimensional Cartesian coordinate system into a 2-dimensional
-* spherical coordinate system (longitude and latitude on a unit
-* sphere centred at the origin). It works by regarding the input
-* coordinates as position vectors and finding their intersection
-* with the sphere surface. The inverse transformation always
-* produces points which are a unit distance from the origin
-* (i.e. unit vectors).
-
-* Inheritance:
-* The SphMap class inherits from the Mapping class.
-
-* Attributes:
-* In addition to those attributes common to all Mappings, every
-* SphMap also has the following attributes:
-*
-* - UnitRadius: SphMap input vectors lie on a unit sphere?
-* - PolarLong: The longitude value to assign to either pole
-
-* Functions:
-c The SphMap class does not define any new functions beyond those
-f The SphMap class does not define any new routines beyond those
-* which are applicable to all Mappings.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David Berry (Starlink)
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 24-OCT-1996 (DSB):
-* Original version.
-* 5-MAR-1997 (RFWS):
-* Tidied public prologues.
-* 24-MAR-1998 (RFWS):
-* Override the astMapMerge method.
-* 4-SEP-1998 (DSB):
-* Added UnitRadius attribute.
-* 8-JAN-2003 (DSB):
-* Changed private InitVtab method to protected astInitSphMapVtab
-* method.
-* 11-JUN-2003 (DSB):
-* Added PolarLong attribute.
-* 10-MAY-2006 (DSB):
-* Override astEqual.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS SphMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory management facilities */
-#include "globals.h" /* Thread-safe global data access */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-#include "channel.h" /* I/O channels */
-#include "unitmap.h" /* Unit (identity) Mappings */
-#include "sphmap.h" /* Interface definition for this class */
-#include "pal.h" /* SLA transformations */
-#include "wcsmap.h" /* For the AST__DPIBY2 (etc) constants */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->GetAttrib_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(SphMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(SphMap,Class_Init)
-#define class_vtab astGLOBAL(SphMap,Class_Vtab)
-#define getattrib_buff astGLOBAL(SphMap,GetAttrib_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-static char getattrib_buff[ 101 ];
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstSphMapVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstSphMap *astSphMapId_( const char *, ...);
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static int GetUnitRadius( AstSphMap *, int * );
-static int TestUnitRadius( AstSphMap *, int * );
-static void ClearUnitRadius( AstSphMap *, int * );
-static void SetUnitRadius( AstSphMap *, int, int * );
-
-static double GetPolarLong( AstSphMap *, int * );
-static int TestPolarLong( AstSphMap *, int * );
-static void ClearPolarLong( AstSphMap *, int * );
-static void SetPolarLong( AstSphMap *, double, int * );
-
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-
-/* Member functions. */
-/* ================= */
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a SphMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "sphmap.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status, int *status )
-
-* Class Membership:
-* SphMap member function (over-rides the astClearAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* SphMap, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the SphMap.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstSphMap *this; /* Pointer to the SphMap structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SphMap structure. */
- this = (AstSphMap *) this_object;
-
-/* UnitRadius */
-/* ---------- */
- if ( !strcmp( attrib, "unitradius" ) ) {
- astClearUnitRadius( this );
-
-/* PolarLong */
-/* --------- */
- } else if ( !strcmp( attrib, "polarlong" ) ) {
- astClearPolarLong( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two SphMaps are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "sphmap.h"
-* int Equal( AstObject *this, AstObject *that, int *status, int *status )
-
-* Class Membership:
-* SphMap member function (over-rides the astEqual protected
-* method inherited from the astMapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two SphMaps are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Object (a SphMap).
-* that
-* Pointer to the second Object.
-* status
-* Pointer to the inherited status variable.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the SphMaps are equivalent, zero otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSphMap *that;
- AstSphMap *this;
- int nin;
- int nout;
- int result;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain pointers to the two SphMap structures. */
- this = (AstSphMap *) this_object;
- that = (AstSphMap *) that_object;
-
-/* Check the second object is a SphMap. We know the first is a
- SphMap since we have arrived at this implementation of the virtual
- function. */
- if( astIsASphMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
- nin = astGetNin( this );
- nout = astGetNout( this );
- if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two SphMaps differ, it may still be possible
- for them to be equivalent. First compare the SphMaps if their Invert
- flags are the same. In this case all the attributes of the two SphMaps
- must be identical. */
- if( astGetInvert( this ) == astGetInvert( that ) ) {
-
- if( astEQUAL( this->polarlong, that->polarlong ) &&
- this->unitradius == that->unitradius ){
- result = 1;
- }
-
-/* If the Invert flags for the two SphMaps differ, the attributes of the two
- SphMaps must be inversely related to each other. */
- } else {
-
-/* In the specific case of a SphMap, Invert flags must be equal. */
- result = 0;
-
- }
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a SphMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "sphmap.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status, int *status )
-
-* Class Membership:
-* SphMap member function (over-rides the protected astGetAttrib
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a SphMap, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the SphMap.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the SphMap, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the SphMap. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstSphMap *this; /* Pointer to the SphMap structure */
- const char *result; /* Pointer value to return */
- double dval; /* Double precision attribute value */
- int ival; /* Int attribute value */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the SphMap structure. */
- this = (AstSphMap *) this_object;
-
-/* UnitRadius. */
-/* ----------- */
- if ( !strcmp( attrib, "unitradius" ) ) {
- ival = astGetUnitRadius( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* PolarLong */
-/* --------- */
- } else if ( !strcmp( attrib, "polarlong" ) ) {
- dval = astGetPolarLong( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-}
-
-void astInitSphMapVtab_( AstSphMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitSphMapVtab
-
-* Purpose:
-* Initialise a virtual function table for a SphMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "sphmap.h"
-* void astInitSphMapVtab( AstSphMapVtab *vtab, const char *name )
-
-* Class Membership:
-* SphMap vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the SphMap class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsASphMap) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
- vtab->ClearUnitRadius = ClearUnitRadius;
- vtab->SetUnitRadius = SetUnitRadius;
- vtab->GetUnitRadius = GetUnitRadius;
- vtab->TestUnitRadius = TestUnitRadius;
-
- vtab->ClearPolarLong = ClearPolarLong;
- vtab->SetPolarLong = SetPolarLong;
- vtab->GetPolarLong = GetPolarLong;
- vtab->TestPolarLong = TestPolarLong;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- object->Equal = Equal;
- mapping->MapMerge = MapMerge;
-
-/* Declare the class dump, copy and delete functions.*/
- astSetDump( vtab, Dump, "SphMap", "Cartesian to Spherical mapping" );
- astSetCopy( (AstObjectVtab *) vtab, Copy );
- astSetDelete( (AstObjectVtab *) vtab, Delete );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a SphMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "sphmap.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status, int *status )
-
-* Class Membership:
-* SphMap method (over-rides the protected astMapMerge method
-* inherited from the Mapping class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated SphMap in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated SphMap with one which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated SphMap which is to be merged with
-* its neighbours. This should be a cloned copy of the SphMap
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* SphMap it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated SphMap resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstMapping *new; /* Pointer to replacement Mapping */
- const char *class; /* Pointer to Mapping class string */
- int imap1; /* Index of first SphMap */
- int imap2; /* Index of second SphMap */
- int imap; /* Loop counter for Mappings */
- int result; /* Result value to return */
- int simpler; /* Mappings simplified? */
-
-/* Initialise the returned result. */
- result = -1;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Further initialisation. */
- new = NULL;
- simpler = 0;
-
-/* We will only handle the case of SphMaps in series and will consider
- merging the nominated SphMap with the Mapping which follows
- it. Check that there is such a Mapping. */
- if ( series && ( ( where + 1 ) < *nmap ) ) {
-
-/* Obtain the indices of the two potential SphMaps to be merged. */
- imap1 = where;
- imap2 = where + 1;
-
-/* Obtain the Class string of the second Mapping and determine if it
- is a SphMap. */
- class = astGetClass( ( *map_list )[ imap2 ] );
- if ( astOK && !strcmp( class, "SphMap" ) ) {
-
-/* Check if the first SphMap is applied in the inverse direction and
- the second in the forward direction. This combination can be
- simplified if the PolarLongitude attributes are equal.. */
- if( ( *invert_list )[ imap1 ] && !( *invert_list )[ imap2 ] ) {
- simpler = ( astGetPolarLong( ( *map_list )[ imap1 ] ) ==
- astGetPolarLong( ( *map_list )[ imap2 ] ) );
-
-/* If the first SphMap is applied in the forward direction and the second in
- the inverse direction, the combination can only be simplified if the
- input vectors to the first SphMap all have unit length (as indicated by
- the UnitRadius attribute). */
- } else if( !( *invert_list )[ imap1 ] && ( *invert_list )[ imap2 ] ) {
- simpler = astGetUnitRadius( ( *map_list )[ imap1 ] );
- }
- }
-
-/* If the two SphMaps can be simplified, create a UnitMap to replace
- them. */
- if ( simpler ) {
- new = (AstMapping *) astUnitMap( 2, "", status );
-
-/* Annul the pointers to the SphMaps. */
- if ( astOK ) {
- ( *map_list )[ imap1 ] = astAnnul( ( *map_list )[ imap1 ] );
- ( *map_list )[ imap2 ] = astAnnul( ( *map_list )[ imap2 ] );
-
-/* Insert the pointer to the replacement Mapping and initialise its
- invert flag. */
- ( *map_list )[ imap1 ] = new;
- ( *invert_list )[ imap1 ] = 0;
-
-/* Loop to close the resulting gap by moving subsequent elements down
- in the arrays. */
- for ( imap = imap2 + 1; imap < *nmap; imap++ ) {
- ( *map_list )[ imap - 1 ] = ( *map_list )[ imap ];
- ( *invert_list )[ imap - 1 ] = ( *invert_list )[ imap ];
- }
-
-/* Clear the vacated elements at the end. */
- ( *map_list )[ *nmap - 1 ] = NULL;
- ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
- modified element. */
- ( *nmap )--;
- result = imap1;
- }
- }
- }
-
-/* If an error occurred, clear the returned result. */
- if ( !astOK ) result = -1;
-
-/* Return the result. */
- return result;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a SphMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "sphmap.h"
-* void SetAttrib( AstObject *this, const char *setting )
-
-* Class Membership:
-* SphMap member function (over-rides the astSetAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function assigns an attribute value for a SphMap, the
-* attribute and its value being specified by means of a string of
-* the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in
-* lower case with no white space present. The value to the right
-* of the "=" should be a suitable textual representation of the
-* value to be assigned and this will be interpreted according to
-* the attribute's data type. White space surrounding the value is
-* only significant for string attributes.
-
-* Parameters:
-* this
-* Pointer to the SphMap.
-* setting
-* Pointer to a null-terminated string specifying the new attribute
-* value.
-*/
-
-/* Local Variables: */
- AstSphMap *this; /* Pointer to the SphMap structure */
- double dval; /* Double precision attribute value */
- int len; /* Length of setting string */
- int ival; /* Int attribute value */
- int nc; /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SphMap structure. */
- this = (AstSphMap *) this_object;
-
-/* Obtain the length of the setting string. */
- len = (int) strlen( setting );
-
-/* UnitRadius */
-/* ---------- */
- if ( nc = 0,
- ( 1 == astSscanf( setting, "unitradius= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetUnitRadius( this, ival );
-
-/* PolarLong */
-/* --------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "polarlong= %lf %n", &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetPolarLong( this, dval );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a SphMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "sphmap.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status, int *status )
-
-* Class Membership:
-* SphMap member function (over-rides the astTestAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a SphMap's attributes.
-
-* Parameters:
-* this
-* Pointer to the SphMap.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSphMap *this; /* Pointer to the SphMap structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the SphMap structure. */
- this = (AstSphMap *) this_object;
-
-/* UnitRadius */
-/* ---------- */
- if ( !strcmp( attrib, "unitradius" ) ) {
- result = astTestUnitRadius( this );
-
-/* PolarLong */
-/* --------- */
- } else if ( !strcmp( attrib, "polarlong" ) ) {
- result = astTestPolarLong( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a SphMap to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "sphmap.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status, int *status )
-
-* Class Membership:
-* SphMap member function (over-rides the astTransform protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function takes a SphMap and a set of points encapsulated in a
-* PointSet and transforms the points from Cartesian coordinates to
-* spherical coordinates.
-
-* Parameters:
-* this
-* Pointer to the SphMap.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of coordinates for the SphMap being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstPointSet *result; /* Pointer to output PointSet */
- AstSphMap *map; /* Pointer to SphMap to be applied */
- double **ptr_in; /* Pointer to input coordinate data */
- double **ptr_out; /* Pointer to output coordinate data */
- int npoint; /* Number of points */
- int point; /* Loop counter for points */
- double *p0; /* Pointer to x axis value */
- double *p1; /* Pointer to y axis value */
- double *p2; /* Pointer to z axis value */
- double *q0; /* Pointer to longitude value */
- double *q1; /* Pointer to latitude value */
- double mxerr; /* Largest value which is effectively zero */
- double polarlong; /* Longitude at either pole */
- double v[3]; /* Vector for a single point */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the SphMap. */
- map = (AstSphMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Mapping class. This function validates
- all arguments and generates an output PointSet if necessary, but does not
- actually transform any coordinate values. */
- result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
- PointSet and obtain pointers for accessing the input and output coordinate
- values. */
- npoint = astGetNpoint( in );
- ptr_in = astGetPoints( in );
- ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse mapping, according to the
- direction specified and whether the mapping has been inverted. */
- if ( astGetInvert( map ) ) forward = !forward;
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
- if( astOK ){
-
-/* First deal with forward mappings from Cartesian to Spherical. */
- if( forward ){
-
-/* Get the longitude to return at either pole. */
- polarlong = astGetPolarLong( this );
-
-/* Store pointers to the input Cartesian axes. */
- p0 = ptr_in[ 0 ];
- p1 = ptr_in[ 1 ];
- p2 = ptr_in[ 2 ];
-
-/* Store pointers to the output Spherical axes. */
- q0 = ptr_out[ 0 ];
- q1 = ptr_out[ 1 ];
-
-/* Apply the mapping to every point. */
- for( point = 0; point < npoint; point++ ){
- if( *p0 != AST__BAD && *p1 != AST__BAD && *p2 != AST__BAD ){
- v[0] = *p0;
- v[1] = *p1;
- v[2] = *p2;
-
-/* At either pole, return the longitude equal to PolarLong attribute. */
- mxerr = fabs( 1000.0*v[ 2 ] )*DBL_EPSILON;
- if( fabs( v[ 0 ] ) < mxerr && fabs( v[ 1 ] ) < mxerr ) {
- if( v[ 2 ] < 0.0 ) {
- *(q0++) = polarlong;
- *(q1++) = -AST__DPIBY2;
- } else if( v[ 2 ] > 0.0 ) {
- *(q0++) = polarlong;
- *(q1++) = AST__DPIBY2;
- } else {
- *(q0++) = AST__BAD;
- *(q1++) = AST__BAD;
- }
-
-/* Otherwise use a SLALIB function to do the conversion (SLALIB always
- returns zero at either pole which is why we make the above check). */
- } else {
- palSlaDcc2s( v, q0++, q1++ );
- }
-
- } else {
- *(q0++) = AST__BAD;
- *(q1++) = AST__BAD;
- }
- p0++;
- p1++;
- p2++;
- }
-
-/* Now deal with inverse mappings from Spherical to Cartesian. */
- } else {
-
-/* Store pointers to the input Spherical axes. */
- q0 = ptr_in[ 0 ];
- q1 = ptr_in[ 1 ];
-
-/* Store pointers to the output Cartesian axes. */
- p0 = ptr_out[ 0 ];
- p1 = ptr_out[ 1 ];
- p2 = ptr_out[ 2 ];
-
-/* Apply the mapping to every point. */
- for( point = 0; point < npoint; point++ ){
- if( *q0 != AST__BAD && *q1 != AST__BAD ){
- palSlaDcs2c( *q0, *q1, v );
- *(p0++) = v[ 0 ];
- *(p1++) = v[ 1 ];
- *(p2++) = v[ 2 ];
- } else {
- *(p0++) = AST__BAD;
- *(p1++) = AST__BAD;
- *(p2++) = AST__BAD;
-
- }
- q0++;
- q1++;
- }
-
- }
-
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/* UnitRadius */
-/* ---------- */
-/*
-*att++
-* Name:
-* UnitRadius
-
-* Purpose:
-* SphMap input vectors lie on a unit sphere?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This is a boolean attribute which indicates whether the
-* 3-dimensional vectors which are supplied as input to a SphMap
-* are known to always have unit length, so that they lie on a unit
-* sphere centred on the origin.
-*
-c If this condition is true (indicated by setting UnitRadius
-c non-zero), it implies that a CmpMap which is composed of a
-c SphMap applied in the forward direction followed by a similar
-c SphMap applied in the inverse direction may be simplified
-c (e.g. by astSimplify) to become a UnitMap. This is because the
-c input and output vectors will both have unit length and will
-c therefore have the same coordinate values.
-f If this condition is true (indicated by setting UnitRadius
-f non-zero), it implies that a CmpMap which is composed of a
-f SphMap applied in the forward direction followed by a similar
-f SphMap applied in the inverse direction may be simplified
-f (e.g. by AST_SIMPLIFY) to become a UnitMap. This is because the
-f input and output vectors will both have unit length and will
-f therefore have the same coordinate values.
-*
-* If UnitRadius is zero (the default), then although the output
-* vector produced by the CmpMap (above) will still have unit
-* length, the input vector may not have. This will, in general,
-* change the coordinate values, so it prevents the pair of SphMaps
-* being simplified.
-
-* Notes:
-* - This attribute is intended mainly for use when SphMaps are
-* involved in a sequence of Mappings which project (e.g.) a
-* dataset on to the celestial sphere. By regarding the celestial
-* sphere as a unit sphere (and setting UnitRadius to be non-zero)
-* it becomes possible to cancel the SphMaps present, along with
-* associated sky projections, when two datasets are aligned using
-* celestial coordinates. This often considerably improves
-* performance.
-* - Such a situations often arises when interpreting FITS data and
-* is handled automatically by the FitsChan class.
-* - The value of the UnitRadius attribute is used only to control
-* the simplification of Mappings and has no effect on the value of
-* the coordinates transformed by a SphMap. The lengths of the
-* input 3-dimensional Cartesian vectors supplied are always
-* ignored, even if UnitRadius is non-zero.
-
-* Applicability:
-* SphMap
-* All SphMaps have this attribute.
-*att--
-*/
-astMAKE_CLEAR(SphMap,UnitRadius,unitradius,-1)
-astMAKE_GET(SphMap,UnitRadius,int,0,(this->unitradius == -1 ? 0 : this->unitradius))
-astMAKE_SET(SphMap,UnitRadius,int,unitradius,( value ? 1 : 0 ))
-astMAKE_TEST(SphMap,UnitRadius,( this->unitradius != -1 ))
-
-/* PolarLong */
-/* --------- */
-/*
-*att++
-* Name:
-* PolarLong
-
-* Purpose:
-* The longitude value to assign to either pole
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Double precision.
-
-* Description:
-* This attribute holds the longitude value, in radians, to be
-* returned when a Cartesian position corresponding to either the north
-* or south pole is transformed into spherical coordinates. The
-* default value is zero.
-
-* Applicability:
-* SphMap
-* All SphMaps have this attribute.
-*att--
-*/
-astMAKE_CLEAR(SphMap,PolarLong,polarlong,AST__BAD)
-astMAKE_GET(SphMap,PolarLong,double,0.0,(this->polarlong == AST__BAD ? 0.0 : this->polarlong))
-astMAKE_SET(SphMap,PolarLong,double,polarlong,value)
-astMAKE_TEST(SphMap,PolarLong,( this->polarlong != AST__BAD ))
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for SphMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status, int *status, int *status )
-
-* Description:
-* This function implements the copy constructor for SphMap objects.
-
-* Parameters:
-* objin
-* Pointer to the SphMap to be copied.
-* objout
-* Pointer to the SphMap being constructed.
-* status
-* Pointer to the inherited status variable.
-* status
-* Pointer to the inherited status variable.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for SphMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status, int *status )
-
-* Description:
-* This function implements the destructor for SphMap objects.
-
-* Parameters:
-* obj
-* Pointer to the SphMap to be deleted.
-* status
-* Pointer to the inherited status variable.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This destructor does nothing and exists only to maintain a
-* one-to-one correspondence between destructors and copy
-* constructors.
-*/
-
-
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for SphMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status, int *status, int *status, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the SphMap class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the SphMap whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-* status
-* Pointer to the inherited status variable.
-* status
-* Pointer to the inherited status variable.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstSphMap *this; /* Pointer to the SphMap structure */
- double dval; /* Double precision attribute value */
- int ival; /* Integer value */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SphMap structure. */
- this = (AstSphMap *) this_object;
-
-/* Write out values representing the instance variables for the
- SphMap class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* UnitRadius. */
-/* ------- */
- set = TestUnitRadius( this, status );
- ival = set ? GetUnitRadius( this, status ) : astGetUnitRadius( this );
- if( ival ) {
- astWriteInt( channel, "UntRd", set, 0, ival, "All input vectors have unit length" );
- } else {
- astWriteInt( channel, "UntRd", set, 0, ival, "Input vectors do not all have unit length" );
- }
-
-/* PolarLong. */
-/* ---------- */
- set = TestPolarLong( this, status );
- dval = set ? GetPolarLong( this, status ) : astGetPolarLong( this );
- astWriteDouble( channel, "PlrLg", set, 1, dval, "Polar longitude (rad.s)" );
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsASphMap and astCheckSphMap functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(SphMap,Mapping)
-astMAKE_CHECK(SphMap)
-
-AstSphMap *astSphMap_( const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astSphMap
-f AST_SPHMAP
-
-* Purpose:
-* Create a SphMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "sphmap.h"
-c AstSphMap *astSphMap( const char *options, ... )
-f RESULT = AST_SPHMAP( OPTIONS, STATUS )
-
-* Class Membership:
-* SphMap constructor.
-
-* Description:
-* This function creates a new SphMap and optionally initialises
-* its attributes.
-*
-* A SphMap is a Mapping which transforms points from a
-* 3-dimensional Cartesian coordinate system into a 2-dimensional
-* spherical coordinate system (longitude and latitude on a unit
-* sphere centred at the origin). It works by regarding the input
-* coordinates as position vectors and finding their intersection
-* with the sphere surface. The inverse transformation always
-* produces points which are a unit distance from the origin
-* (i.e. unit vectors).
-
-* Parameters:
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new SphMap. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new SphMap. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astSphMap()
-f AST_SPHMAP = INTEGER
-* A pointer to the new SphMap.
-
-* Notes:
-* - The spherical coordinates are longitude (positive
-* anti-clockwise looking from the positive latitude pole) and
-* latitude. The Cartesian coordinates are right-handed, with the x
-* axis (axis 1) at zero longitude and latitude, and the z axis
-* (axis 3) at the positive latitude pole.
-* - At either pole, the longitude is set to the value of the
-* PolarLong attribute.
-* - If the Cartesian coordinates are all zero, then the longitude
-* and latitude are set to the value AST__BAD.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-
-* Status Handling:
-* The protected interface to this function includes an extra
-* parameter at the end of the parameter list descirbed above. This
-* parameter is a pointer to the integer inherited status
-* variable: "int *status".
-
-
-* Status Handling:
-* The protected interface to this function includes an extra
-* parameter at the end of the parameter list descirbed above. This
-* parameter is a pointer to the integer inherited status
-* variable: "int *status".
-
-
-* Status Handling:
-* The protected interface to this function includes an extra
-* parameter at the end of the parameter list descirbed above. This
-* parameter is a pointer to the integer inherited status
-* variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstSphMap *new; /* Pointer to new SphMap */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the SphMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitSphMap( NULL, sizeof( AstSphMap ), !class_init, &class_vtab,
- "SphMap" );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new SphMap's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new SphMap. */
- return new;
-}
-
-AstSphMap *astSphMapId_( const char *options, ...) {
-/*
-* Name:
-* astSphMapId_
-
-* Purpose:
-* Create a SphMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "sphmap.h"
-* AstSphMap *astSphMapId_( const char *options, ... )
-
-* Class Membership:
-* SphMap constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astSphMap constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astSphMap_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astSphMap_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astSphMap_.
-
-* Returned Value:
-* The ID value associated with the new SphMap.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstSphMap *new; /* Pointer to new SphMap */
- va_list args; /* Variable argument list */
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the SphMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitSphMap( NULL, sizeof( AstSphMap ), !class_init, &class_vtab,
- "SphMap" );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new SphMap's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new SphMap. */
- return astMakeId( new );
-}
-
-AstSphMap *astInitSphMap_( void *mem, size_t size, int init,
- AstSphMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitSphMap
-
-* Purpose:
-* Initialise a SphMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "sphmap.h"
-* AstSphMap *astInitSphMap( void *mem, size_t size, int init,
-* AstSphMapVtab *vtab, const char *name )
-
-* Class Membership:
-* SphMap initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new SphMap object. It allocates memory (if necessary) to accommodate
-* the SphMap plus any additional data associated with the derived class.
-* It then initialises a SphMap structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a SphMap at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the SphMap is to be initialised.
-* This must be of sufficient size to accommodate the SphMap data
-* (sizeof(SphMap)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the SphMap (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the SphMap
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the SphMap's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new SphMap.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-
-* Returned Value:
-* A pointer to the new SphMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstSphMap *new; /* Pointer to new SphMap */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitSphMapVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Initialise a Mapping structure (the parent class) as the first component
- within the SphMap structure, allocating memory if necessary. Specify that
- the Mapping should be defined in both the forward and inverse directions. */
- new = (AstSphMap *) astInitMapping( mem, size, 0,
- (AstMappingVtab *) vtab, name,
- 3, 2, 1, 1 );
-
- if ( astOK ) {
-
-/* Initialise the SphMap data. */
-/* --------------------------- */
-/* Are all input vectors of unit length? Store a value of -1 to indicate that
- no value has yet been set. This will cause a default value of 0 (no, i.e.
- input vectors are not all of unit length) to be used. */
- new->unitradius = -1;
- new->polarlong = AST__BAD;
-
- }
-
-/* Return a pointer to the new SphMap. */
- return new;
-}
-
-AstSphMap *astLoadSphMap_( void *mem, size_t size,
- AstSphMapVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadSphMap
-
-* Purpose:
-* Load a SphMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "sphmap.h"
-* AstSphMap *astLoadSphMap( void *mem, size_t size,
-* AstSphMapVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* SphMap loader.
-
-* Description:
-* This function is provided to load a new SphMap using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* SphMap structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a SphMap at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the SphMap is to be
-* loaded. This must be of sufficient size to accommodate the
-* SphMap data (sizeof(SphMap)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the SphMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the SphMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstSphMap) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new SphMap. If this is NULL, a pointer
-* to the (static) virtual function table for the SphMap class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "SphMap" is used instead.
-
-* Returned Value:
-* A pointer to the new SphMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstSphMap *new; /* Pointer to the new SphMap */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this SphMap. In this case the
- SphMap belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstSphMap );
- vtab = &class_vtab;
- name = "SphMap";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitSphMapVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built SphMap. */
- new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "SphMap" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* UnitRadius. */
-/* ----------- */
- new->unitradius = astReadInt( channel, "untrd", -1 );
- if ( TestUnitRadius( new, status ) ) SetUnitRadius( new, new->unitradius, status );
-
-/* PolarLong. */
-/* ---------- */
- new->polarlong = astReadDouble( channel, "plrlg", AST__BAD );
- if ( TestPolarLong( new, status ) ) SetPolarLong( new, new->polarlong, status );
-
- }
-
-/* If an error occurred, clean up by deleting the new SphMap. */
- if ( !astOK ) new = astDelete( new );
-
-/* Return the new SphMap pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-
-
-
-
diff --git a/ast-5.3-1/sphmap.h b/ast-5.3-1/sphmap.h
deleted file mode 100644
index 56bbd4f..0000000
--- a/ast-5.3-1/sphmap.h
+++ /dev/null
@@ -1,374 +0,0 @@
-#if !defined( SPHMAP_INCLUDED ) /* Include this file only once */
-#define SPHMAP_INCLUDED
-/*
-*+
-* Name:
-* sphmap.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the SphMap class.
-
-* Invocation:
-* #include "sphmap.h"
-
-* Description:
-* This include file defines the interface to the SphMap class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The SphMap class implements Mappings which maps positions from
-* 3-dimensional Cartesian coordinates into 2-dimensional spherical
-* coordinates (i.e. longitude and latitude on a unit sphere). The
-* inverse Mapping always produces vectors of unit length.
-*
-* The spherical coordinates are longitude (positive anti-clockwise
-* looking from the positive latitude pole) and latitude. The
-* Cartesian coordinates are right-handed, with the x-axis (axis 1)
-* at zero longitude and latitude, and the z-axis (axis 3) at the
-* positive latitude pole.
-*
-* At either pole, the longitude is set to the value of the PolarLong
-* attribute. If the Cartesian coordinates are all zero, then the
-* longitude and latitude values are set to AST__BAD.
-
-* Inheritance:
-* The SphMap class inherits from the Mapping class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* PolarLong (double)
-* This attribute holds the longitude value, in radians, to be
-* returned when a Cartesian position corresponding to either the north
-* or south pole is transformed into spherical coordinates. The
-* default value is zero.
-* UnitRadius (integer)
-* This is a boolean attribute which indicates whether the
-* 3-dimensional vectors which are supplied as input to a SphMap
-* are known to always have unit length, so that they lie on a
-* unit sphere centred on the origin.
-*
-* If this condition is true (indicated by setting UnitRadius
-* non-zero), it implies that a CmpMap which is composed of a
-* SphMap applied in the forward direction followed by a similar
-* SphMap applied in the inverse direction may be simplified
-* (e.g. by astSimplify) to become a UnitMap. This is because
-* the input and output vectors will both have unit length and
-* will therefore have the same coordinate values.
-*
-* If UnitRadius is zero (the default), then although the output
-* vector produced by the CmpMap (above) will still have unit
-* length, the input vector may not have. This will, in general,
-* change the coordinate values, so it prevents the pair of
-* SphMaps being simplified.
-
-* Methods Over-Ridden:
-* Public:
-* None.
-*
-* Protected:
-* astClearAttrib
-* Clear an attribute value for a SphMap.
-* astGetAttrib
-* Get an attribute value for a SphMap.
-* astMapMerge
-* Simplify a sequence of Mappings containing a SphMap.
-* astSetAttrib
-* Set an attribute value for a SphMap.
-* astTestAttrib
-* Test if an attribute value has been set for a SphMap.
-* astTransform
-* Apply a SphMap to transform a set of points.
-
-* New Methods Defined:
-* Public:
-* None.
-*
-* Protected:
-* astClearUnitRadius
-* Clear the UnitRadius attribute value for a SphMap.
-* astGetUnitRadius
-* Get the UnitRadius attribute value for a SphMap.
-* astSetUnitRadius
-* Set the UnitRadius attribute value for a SphMap.
-* astTestUnitRadius
-* Test if a UnitRadius attribute value has been set for a SphMap.
-* astClearPolarLong
-* Clear the PolarLong attribute value for a SphMap.
-* astGetPolarLong
-* Get the PolarLong attribute value for a SphMap.
-* astSetPolarLong
-* Set the PolarLong attribute value for a SphMap.
-* astTestPolarLong
-* Test if a PolarLong attribute value has been set for a SphMap.
-
-* Other Class Functions:
-* Public:
-* astIsASphMap
-* Test class membership.
-* astSphMap
-* Create a SphMap.
-*
-* Protected:
-* astCheckSphMap
-* Validate class membership.
-* astInitSphMap
-* Initialise a SphMap.
-* astInitSphMapVtab
-* Initialise the virtual function table for the SphMap class.
-* astLoadSphMap
-* Load a SphMap.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstSphMap
-* SphMap object type.
-*
-* Protected:
-* AstSphMapVtab
-* SphMap virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-
-* History:
-* 25-OCT-1996 (DSB):
-* Original version.
-* 24-MAR-1998 (RFWS):
-* Override the astMapMerge method.
-* 4-SEP-1998 (DSB):
-* Added UnitRadius attribute.
-* 8-JAN-2003 (DSB):
-* Added protected astInitSphMapVtab method.
-* 11-JUN-2003 (DSB):
-* Added PolarLong attribute.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* SphMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstSphMap {
-
-/* Attributes inherited from the parent class. */
- AstMapping mapping; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- double polarlong; /* Longitude to assign to either pole */
- int unitradius; /* Are input vectors always of unit length? */
-} AstSphMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstSphMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstMappingVtab mapping_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- int (* GetUnitRadius)( AstSphMap *, int * );
- int (* TestUnitRadius)( AstSphMap *, int * );
- void (* ClearUnitRadius)( AstSphMap *, int * );
- void (* SetUnitRadius)( AstSphMap *, int, int * );
-
- double (* GetPolarLong)( AstSphMap *, int * );
- int (* TestPolarLong)( AstSphMap *, int * );
- void (* ClearPolarLong)( AstSphMap *, int * );
- void (* SetPolarLong)( AstSphMap *, double, int * );
-} AstSphMapVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstSphMapGlobals {
- AstSphMapVtab Class_Vtab;
- int Class_Init;
- char GetAttrib_Buff[ 51 ];
-} AstSphMapGlobals;
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(SphMap) /* Check class membership */
-astPROTO_ISA(SphMap) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstSphMap *astSphMap_( const char *, int *, ...);
-#else
-AstSphMap *astSphMapId_( const char *, ...)__attribute__((format(printf,1,2)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstSphMap *astInitSphMap_( void *, size_t, int, AstSphMapVtab *,
- const char *, int * );
-
-/* Vtab initialiser. */
-void astInitSphMapVtab_( AstSphMapVtab *, const char *, int * );
-
-/* Loader. */
-AstSphMap *astLoadSphMap_( void *, size_t, AstSphMapVtab *,
- const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitSphMapGlobals_( AstSphMapGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS) /* Protected */
-int astGetUnitRadius_( AstSphMap *, int * );
-int astTestUnitRadius_( AstSphMap *, int * );
-void astClearUnitRadius_( AstSphMap *, int * );
-void astSetUnitRadius_( AstSphMap *, int, int * );
-
-double astGetPolarLong_( AstSphMap *, int * );
-int astTestPolarLong_( AstSphMap *, int * );
-void astClearPolarLong_( AstSphMap *, int * );
-void astSetPolarLong_( AstSphMap *, double, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckSphMap(this) astINVOKE_CHECK(SphMap,this,0)
-#define astVerifySphMap(this) astINVOKE_CHECK(SphMap,this,1)
-
-/* Test class membership. */
-#define astIsASphMap(this) astINVOKE_ISA(SphMap,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astSphMap astINVOKE(F,astSphMap_)
-#else
-#define astSphMap astINVOKE(F,astSphMapId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define \
-astInitSphMap(mem,size,init,vtab,name) \
-astINVOKE(O,astInitSphMap_(mem,size,init,vtab,name,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitSphMapVtab(vtab,name) astINVOKE(V,astInitSphMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadSphMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadSphMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckSphMap to validate SphMap pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-#define astClearUnitRadius(this) astINVOKE(V,astClearUnitRadius_(astCheckSphMap(this),STATUS_PTR))
-#define astGetUnitRadius(this) astINVOKE(V,astGetUnitRadius_(astCheckSphMap(this),STATUS_PTR))
-#define astSetUnitRadius(this,value) astINVOKE(V,astSetUnitRadius_(astCheckSphMap(this),value,STATUS_PTR))
-#define astTestUnitRadius(this) astINVOKE(V,astTestUnitRadius_(astCheckSphMap(this),STATUS_PTR))
-
-#define astClearPolarLong(this) astINVOKE(V,astClearPolarLong_(astCheckSphMap(this),STATUS_PTR))
-#define astGetPolarLong(this) astINVOKE(V,astGetPolarLong_(astCheckSphMap(this),STATUS_PTR))
-#define astSetPolarLong(this,value) astINVOKE(V,astSetPolarLong_(astCheckSphMap(this),value,STATUS_PTR))
-#define astTestPolarLong(this) astINVOKE(V,astTestPolarLong_(astCheckSphMap(this),STATUS_PTR))
-#endif
-
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/stc.c b/ast-5.3-1/stc.c
deleted file mode 100644
index e27f803..0000000
--- a/ast-5.3-1/stc.c
+++ /dev/null
@@ -1,3703 +0,0 @@
-/*
-*class++
-* Name:
-* Stc
-
-* Purpose:
-* Represents an instance of the IVOA STC class.
-
-* Constructor Function:
-c astStc
-f AST_STC
-
-* Description:
-* The Stc class is an implementation of the IVOA STC class which forms
-* part of the IVOA Space-Time Coordinate Metadata system. See:
-*
-* http://hea-www.harvard.edu/~arots/nvometa/STC.html
-*
-* The Stc class does not have a constructor function of its own, as it
-* is simply a container class for a family of specialised sub-classes
-* including StcCatalogEntryLocation, StcResourceProfile, StcSearchLocation
-* and StcObsDataLocation.
-
-* Inheritance:
-* The Stc class inherits from the Region class.
-
-* Attributes:
-* In addition to those attributes common to all Regions, every
-* Stc also has the following attributes:
-*
-* - RegionClass: The class name of the encapsulated Region.
-
-* Functions:
-c In addition to those functions applicable to all Regions, the
-c following functions may also be applied to all Stc's:
-f In addition to those routines applicable to all Regions, the
-f following routines may also be applied to all Stc's:
-*
-c - astGetStcRegion: Get a pointer to the encapsulated Region
-f - AST_GETSTCREGION: Get a pointer to the encapsulated Region
-c - astGetStcCoord: Get information about an AstroCoords element
-f - AST_GETSTCCOORD: Get information about an AstroCoords element
-c - astGetStcNCoord: Returns the number of AstroCoords elements in an Stc
-f - AST_GETSTCNCOORD: Returns the number of AstroCoords elements in an Stc
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2008 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 23-NOV-2004 (DSB):
-* Original version.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 13-MAR-2009 (DSB):
-* Over-ride astRegBasePick.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS Stc
-
-/* The number of components in an AstroCoords element which are described
- using a Region within a KeyMap. */
-#define NREG 5
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "unitmap.h" /* Unit Mappings */
-#include "region.h" /* Regions (parent class) */
-#include "channel.h" /* I/O channels */
-#include "stc.h" /* Interface definition for this class */
-#include "keymap.h" /* Lists of value/key pairs */
-#include "pointlist.h" /* Individual points in a Frame */
-#include "ellipse.h" /* Ellipses within a Frame */
-#include "interval.h" /* Axis intervals within a Frame */
-#include "prism.h" /* Extrusions into higher dimensions */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <string.h>
-#include <stdio.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstMapping *(* parent_simplify)( AstMapping *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstRegion *(* parent_getdefunc)( AstRegion *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_equal)( AstObject *, AstObject *, int * );
-static int (* parent_getobjsize)( AstObject *, int * );
-static int (* parent_getusedefs)( AstObject *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static void (* parent_setregfs)( AstRegion *, AstFrame *, int * );
-static void (*parent_regclearattrib)( AstRegion *, const char *, char **, int * );
-static void (*parent_regsetattrib)( AstRegion *, const char *, char **, int * );
-
-static void (* parent_clearnegated)( AstRegion *, int * );
-static void (* parent_clearclosed)( AstRegion *, int * );
-static void (* parent_clearfillfactor)( AstRegion *, int * );
-static void (* parent_clearmeshsize)( AstRegion *, int * );
-
-static void (* parent_setclosed)( AstRegion *, int, int * );
-static void (* parent_setfillfactor)( AstRegion *, double, int * );
-static void (* parent_setmeshsize)( AstRegion *, int, int * );
-static void (* parent_setnegated)( AstRegion *, int, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* The keys associated with each component of an AstroCoords element
- within KeyMap */
-static const char *regkey[ NREG ] = { AST__STCERROR,
- AST__STCRES,
- AST__STCSIZE,
- AST__STCPIXSZ,
- AST__STCVALUE };
-
-/* The comments associated with each component of an AstroCoords element
- within KeyMap */
-static const char *regcom[ NREG ] = { "AstroCoords error region",
- "AstroCoords resolution region",
- "AstroCoords size region",
- "AstroCoords pixel size region",
- "AstroCoords value region" };
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Stc)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Stc,Class_Init)
-#define class_vtab astGLOBAL(Stc,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstStcVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstKeyMap *GetStcCoord( AstStc *, int, int * );
-static AstKeyMap *MakeAstroCoordsKeyMap( AstRegion *, AstKeyMap *, const char *, int * );
-static AstMapping *Simplify( AstMapping *, int * );
-static AstPointSet *RegBaseMesh( AstRegion *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstRegion *GetDefUnc( AstRegion *, int * );
-static AstRegion *GetStcRegion( AstStc *, int * );
-static AstRegion *RegBasePick( AstRegion *this, int, const int *, int * );
-static const char *GetRegionClass( AstStc *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetBounded( AstRegion *, int * );
-static int GetObjSize( AstObject *, int * );
-static int GetStcNCoord( AstStc *, int * );
-static int GetUseDefs( AstObject *, int * );
-static int Overlap( AstRegion *, AstRegion *, int * );
-static int OverlapX( AstRegion *, AstRegion *, int * );
-static int RegPins( AstRegion *, AstPointSet *, AstRegion *, int **, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void GetRegion( AstStc *, AstRegion **, int *, int * );
-static void RegBaseBox( AstRegion *, double *, double *, int * );
-static void RegClearAttrib( AstRegion *, const char *, char **, int * );
-static void RegSetAttrib( AstRegion *, const char *, char **, int * );
-static void SetRegFS( AstRegion *, AstFrame *, int * );
-
-static void ClearAttrib( AstObject *, const char *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-
-static void ClearClosed( AstRegion *, int * );
-static int GetClosed( AstRegion *, int * );
-static void SetClosed( AstRegion *, int, int * );
-static int TestClosed( AstRegion *, int * );
-
-static void ClearMeshSize( AstRegion *, int * );
-static int GetMeshSize( AstRegion *, int * );
-static void SetMeshSize( AstRegion *, int, int * );
-static int TestMeshSize( AstRegion *, int * );
-
-static void ClearFillFactor( AstRegion *, int * );
-static double GetFillFactor( AstRegion *, int * );
-static void SetFillFactor( AstRegion *, double, int * );
-static int TestFillFactor( AstRegion *, int * );
-
-static void ClearNegated( AstRegion *, int * );
-static int GetNegated( AstRegion *, int * );
-static void SetNegated( AstRegion *, int, int * );
-static int TestNegated( AstRegion *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Member functions. */
-/* ================= */
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a Stc.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stc.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Stc member function (over-rides the astClearAttrib protected
-* method inherited from the Region class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* Stc, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the Stc.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstStc *this; /* Pointer to the Stc structure */
- int len; /* Length of attrib string */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Stc structure. */
- this = (AstStc *) this_object;
-
-/* Obtain the length of the "attrib" string. */
- len = strlen( attrib );
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* (none as yet) */
-/* ------------- */
-
-/* Read-only attributes. */
-/* --------------------- */
-/* Test if the attribute name matches any of the read-only attributes
- of this class. If it does, then report an error. */
- if ( !strcmp( attrib, "regionclass" ) ) {
- astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
- "value for a %s.", status, attrib, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two Objects are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stc.h"
-* int Equal( AstObject *this_object, AstObject *that_object, int *status )
-
-* Class Membership:
-* Stc member function (over-rides the astEqual protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two Stcs are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Stc.
-* that
-* Pointer to the second Stc.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the Stcs are equivalent, zero otherwise.
-
-* Notes:
-* - The Stcs are equivalent if their encapsulated Region are
-* equivalent, and if they have the same boolean operation, negation
-* and closed flags.
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstStc *that;
- AstStc *this;
- int result;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Invoke the Equal method inherited from the parent Region class. This checks
- that the Objects are both of the same class, and have the same Negated
- and Closed flags (amongst other things). */
- if( (*parent_equal)( this_object, that_object, status ) ) {
-
-/* Obtain pointers to the two Stc structures. */
- this = (AstStc *) this_object;
- that = (AstStc *) that_object;
-
-/* Test their encapsulated Region for equality. */
- result = astEqual( this->region, that->region );
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-/*
-* Name:
-* MAKE_SET
-
-* Purpose:
-* Define a function to set an attribute value for a Stc.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "stc.h"
-* MAKE_SET(attribute,lattribute,type)
-
-* Class Membership:
-* Defined by the Stc class.
-
-* Description:
-* This macro expands to an implementation of a private member function
-* of the form:
-*
-* static void Set<Attribute>( AstRegion *this, <Type> value )
-*
-* that sets the value of a specified Region attribute in the parent
-* Region structure and also in the encapsulated Region.
-
-* Parameters:
-* attribute
-* Name of the attribute, as it appears in the function name.
-* lattribute
-* Name of the attribute, all in lower case.
-* type
-* The C type of the attribute.
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attribute,lattribute,type) \
-static void Set##attribute( AstRegion *this_region, type value, int *status ) { \
-\
-/* Local Variables: */ \
- AstStc *this; /* Pointer to the Stc structure */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Use the parent method to set the value in the parent Region structure. */ \
- (*parent_set##lattribute)( this_region, value, status ); \
-\
-/* Also set the value in the encapsulated Region. */ \
- this = (AstStc *) this_region; \
- astSet##attribute( this->region, value ); \
-}
-
-/* Use the above macro to create accessors for the MeshSize, Closed and
- FillFactor attributes. */
-MAKE_SET(FillFactor,fillfactor,double)
-MAKE_SET(MeshSize,meshsize,int)
-MAKE_SET(Closed,closed,int)
-MAKE_SET(Negated,negated,int)
-
-/* Undefine the macro. */
-#undef MAKE_SET
-
-/*
-* Name:
-* MAKE_CLEAR
-
-* Purpose:
-* Define a function to clear an attribute value for a Stc.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "stc.h"
-* MAKE_CLEAR(attribute,lattribute)
-
-* Class Membership:
-* Defined by the Stc class.
-
-* Description:
-* This macro expands to an implementation of a private member function
-* of the form:
-*
-* static void Clear<Attribute>( AstRegion *this )
-*
-* that sets the value of a specified Region attribute in the parent
-* Region structure and also in the encapsulated Region.
-
-* Parameters:
-* attribute
-* Name of the attribute, as it appears in the function name.
-* lattribute
-* Name of the attribute, all in lower case.
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attribute,lattribute) \
-static void Clear##attribute( AstRegion *this_region, int *status ) { \
-\
-/* Local Variables: */ \
- AstStc *this; /* Pointer to the Stc structure */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Use the parent method to clear the value in the parent Region structure. */ \
- (*parent_clear##lattribute)( this_region, status ); \
-\
-/* Also clear the value in the encapsulated Region. */ \
- this = (AstStc *) this_region; \
- astClear##attribute( this->region ); \
-}
-
-/* Use the above macro to create accessors for the MeshSize, Closed and
- FillFactor attributes. */
-MAKE_CLEAR(FillFactor,fillfactor)
-MAKE_CLEAR(MeshSize,meshsize)
-MAKE_CLEAR(Closed,closed)
-MAKE_CLEAR(Negated,negated)
-
-/* Undefine the macro. */
-#undef MAKE_CLEAR
-
-
-/*
-* Name:
-* MAKE_GET
-
-* Purpose:
-* Define a function to get an attribute value for a Stc.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "stc.h"
-* MAKE_GET(attribute,type,bad)
-
-* Class Membership:
-* Defined by the Stc class.
-
-* Description:
-* This macro expands to an implementation of a private member function
-* of the form:
-*
-* static <Type> Get<Attribute>( AstRegion *this )
-*
-* that gets the value of a specified Region attribute from the encapsulated
-* Region.
-
-* Parameters:
-* attribute
-* Name of the attribute, as it appears in the function name.
-* type
-* The C type of the attribute.
-* bad
-* Value to return in caseof error.
-*/
-
-/* Define the macro. */
-#define MAKE_GET(attribute,type,bad) \
-static type Get##attribute( AstRegion *this_region, int *status ) { \
-\
-/* Local Variables: */ \
- AstStc *this; /* Pointer to the Stc structure */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return (bad); \
-\
-/* Get the value from the encapsulated Region. */ \
- this = (AstStc *) this_region; \
- return astGet##attribute( this->region ); \
-}
-
-/* Use the above macro to create accessors for the MeshSize, Closed and
- FillFactor attributes. */
-MAKE_GET(FillFactor,double,AST__BAD)
-MAKE_GET(MeshSize,int,100)
-MAKE_GET(Closed,int,1)
-MAKE_GET(Negated,int,0)
-
-/* Undefine the macro. */
-#undef MAKE_GET
-
-/*
-* Name:
-* MAKE_TEST
-
-* Purpose:
-* Define a function to test an attribute value for a Stc.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "stc.h"
-* MAKE_TEST(attribute)
-
-* Class Membership:
-* Defined by the Stc class.
-
-* Description:
-* This macro expands to an implementation of a private member function
-* of the form:
-*
-* static int Test<Attribute>( AstRegion *this )
-*
-* that test the value of a specified Region attribute from the encapsulated
-* Region.
-
-* Parameters:
-* attribute
-* Name of the attribute, as it appears in the function name.
-* type
-* The C type of the attribute.
-*/
-
-/* Define the macro. */
-#define MAKE_TEST(attribute) \
-static int Test##attribute( AstRegion *this_region, int *status ) { \
-\
-/* Local Variables: */ \
- AstStc *this; /* Pointer to the Stc structure */ \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return 0; \
-\
-/* Test the value from the encapsulated Region. */ \
- this = (AstStc *) this_region; \
- return astTest##attribute( this->region ); \
-}
-
-/* Use the above macro to create accessors for the MeshSize, Closed and
- FillFactor attributes. */
-MAKE_TEST(FillFactor)
-MAKE_TEST(MeshSize)
-MAKE_TEST(Closed)
-MAKE_TEST(Negated)
-
-/* Undefine the macro. */
-#undef MAKE_TEST
-
-
-
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stc.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* Stc member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied Stc,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the Stc.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstStc *this; /* Pointer to Stc structure */
- int result; /* Result value to return */
- int i; /* AstroCoords index */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the Stc structure. */
- this = (AstStc *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
- result += astGetObjSize( this->region );
-
- if( this->coord ) {
- for( i = 0; i < this->ncoord; i++ ) {
- result += astGetObjSize( this->coord[ i ] );
- }
- result += astTSizeOf( this->coord );
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a Stc.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stc.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Stc member function (over-rides the protected astGetAttrib
-* method inherited from the Region class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a Stc, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the Stc.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the Stc, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the Stc. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstStc *this; /* Pointer to the Stc structure */
- const char *result; /* Pointer value to return */
- int len; /* Length of attrib string */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the Stc structure. */
- this = (AstStc *) this_object;
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "buff" as a null-terminated string in an appropriate
- format. Set "result" to point at the result string. */
-
-/* RegionClass. */
-/* ------------ */
- if ( !strcmp( attrib, "regionclass" ) ) {
- result = astGetClass( this->region );
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int GetBounded( AstRegion *this_region, int *status ) {
-/*
-* Name:
-* GetBounded
-
-* Purpose:
-* Is the Region bounded?
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stc.h"
-* int GetBounded( AstRegion *this, int *status )
-
-* Class Membership:
-* Stc method (over-rides the astGetBounded method inherited from
-* the Region class).
-
-* Description:
-* This function returns a flag indicating if the Region is bounded.
-* The implementation provided by the base Region class is suitable
-* for Region sub-classes representing the inside of a single closed
-* curve (e.g. Circle, Ellipse, Box, etc). Other sub-classes (such as
-* Stc, PointList, etc ) may need to provide their own implementations.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the Region is bounded. Zero otherwise.
-
-*/
-
-/* Local Variables: */
- AstStc *this; /* Pointer to Stc structure */
- AstRegion *reg; /* Pointer to the encapsulated Region */
- int neg; /* Negated flag to use */
- int neg_old; /* Original Negated flag */
- int result; /* Returned result */
-
-/* Initialise */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the Stc structure. */
- this = (AstStc *) this_region;
-
-/* Get the encapsulated Region, and the Negated value which should be used
- with it. The returned values take account of whether the supplied Stc has
- itself been Negated or not. The returned Region represent a region within
- the base Frame of the FrameSet encapsulated by the parent Region
- structure. */
- GetRegion( this, ®, &neg, status );
-
-/* Temporarily set the Negated attribute to the required value.*/
- neg_old = astGetNegated( reg );
- astSetNegated( reg, neg );
-
-/* See if the encapsulated Region is bounded. */
- result = astGetBounded( reg );
-
-/* Re-instate the original value for the Negated attribute of the
- encapsulated Region. */
- if( reg ) astSetNegated( reg, neg_old );
-
-/* Free resources. */
- reg = astAnnul( reg );
-
-/* Return zero if an error occurred. */
- if( !astOK ) result = 0;
-
-/* Return the required pointer. */
- return result;
-}
-
-static AstRegion *GetDefUnc( AstRegion *this_region, int *status ) {
-/*
-* Name:
-* GetDefUnc
-
-* Purpose:
-* Obtain a pointer to the default uncertainty Region for a given Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stc.h"
-* AstRegion *GetDefUnc( AstRegion *this )
-
-* Class Membership:
-* Stc method (over-rides the astGetDefUnc method inherited from
-* the Region class).
-
-* This function returns a pointer to a Region which represents the
-* default uncertainty associated with a position on the boundary of the
-* given Region. The returned Region refers to the base Frame within the
-* FrameSet encapsulated by the supplied Region.
-
-* Parameters:
-* this
-* Pointer to the Region.
-
-* Returned Value:
-* A pointer to the Region. This should be annulled (using astAnnul)
-* when no longer needed.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstStc *this; /* Pointer to the Stc structure */
- AstRegion *result; /* Returned pointer */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the Stc structure. */
- this = (AstStc *) this_region;
-
-/* If the encapsulated region has non-default uncertainty, use it as
- the default uncertainty for the Cmpregion. Note, the current Frame of
- an uncertainty Region is assumed to be the same as the base Frame in the
- Stc. */
- if( astTestUnc( this->region ) ) {
- result = astGetUncFrm( this->region, AST__CURRENT );
-
-/* Otherwise, use the parent method to determine the default uncertainty. */
- } else {
- result = (* parent_getdefunc)( this_region, status );
- }
-
-/* Return NULL if an error occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the required pointer. */
- return result;
-}
-
-static void GetRegion( AstStc *this, AstRegion **reg, int *neg, int *status ) {
-/*
-*
-* Name:
-* GetRegion
-
-* Purpose:
-* Get the encapsulated Region of a Stc.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* void GetRegion( AstStc *this, AstRegion **reg, int *neg, int *status )
-
-* Class Membership:
-* Stc member function
-
-* Description:
-* This function returns a pointer to a Region which is equivalent to
-* the supplied Stc. If the Stc has been negated, then the returned
-* "negated" flag will be set such that it represents the negated Stc.
-*
-* The current Frames in returned encapsulated Region will be equivalent
-* to the base Frame in the FrameSet encapsulated by the parent Region
-* structure.
-
-* Parameters:
-* this
-* Pointer to the Stc.
-* reg
-* Address of a location to receive a pointer to the encapsulated
-* Region. The current Frame in this region will be equivalent to
-* the base Frame in the FrameSet
-* neg
-* The value of the Negated attribute to be used with reg.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - Any changes made to the encapsulated Region using the returned
-* pointer will be reflected in the supplied Stc.
-
-*/
-
-/* Initialise */
- if( reg ) *reg = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Return the component Region pointers. */
- if( reg ) *reg = astClone( this->region );
-
-/* Initialise the other returned items. Note, the Stc initialiser stored a
- deep copy of the supplied encapsulated Region, and so we do not
- need to worry about attributes of the Region having been changed
- after the creation of the Stc. This is different to the CmpMap
- class which merely clones its supplied component pointers and so has
- to save copies of the original Invert settings within the CmpMap
- structure. */
- if( neg ) *neg = astGetNegated( this->region );
-
-/* If the Stc has been inverted, we modify the boolean operator and
- negation flags so that they reflect the inverted Stc. */
- if( astGetNegated( this ) && neg ) *neg = *neg ? 0 : 1;
-}
-
-static const char *GetRegionClass( AstStc *this, int *status ){
-/*
-*+
-* Name:
-* astGetRegionClass
-
-* Purpose:
-* Get the value of a RegionClass attribute for a Stc.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "stc.h"
-* const char *astGetRegionClass( AstStc *this )
-
-* Class Membership:
-* Stc virtual function
-
-* Description:
-* This function returns a pointer to the value of the RegionClass
-* attribute for a Stc.
-
-* Parameters:
-* this
-* Pointer to the Stc.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the Stc, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the Stc. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain and return the class of the encapsulated Region. */
- return astGetClass( ((AstStc *) this)->region );
-}
-
-
-static AstKeyMap *GetStcCoord( AstStc *this, int icoord, int *status ){
-/*
-*++
-* Name:
-c astGetStcCoord
-f AST_GETSTCCOORD
-
-* Purpose:
-* Return information about an AstroCoords element stored in an Stc.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "specframe.h"
-c AstKeyMap *astGetStcCoord( AstStc *this, int icoord )
-f RESULT = AST_GETSTCCOORD( THIS, ICOORD, STATUS )
-
-* Class Membership:
-* Stc method.
-
-* Description:
-* When any sub-class of Stc is created, the constructor function
-* allows one or more AstroCoords elements to be stored within the Stc.
-* This function allows any one of these AstroCoords elements to be
-* retrieved. The format of the returned information is the same as
-* that used to pass the original information to the Stc constructor.
-* That is, the information is returned in a KeyMap structure
-* containing elements with one or more of the keys given by symbolic
-* constants AST__STCNAME, AST__STCVALUE, AST__STCERROR, AST__STCRES,
-* AST__STCSIZE and AST__STCPIXSZ.
-*
-* If the coordinate system represented by the Stc has been changed
-* since it was created (for instance, by changing its System
-* attribute), then the sizes and positions in the returned KeyMap
-* will reflect the change in coordinate system.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Stc.
-c icoord
-f ICOORD = INTEGER (Given)
-* The index of the AstroCoords element required. The first has index
-* one. The number of AstroCoords elements in the Stc can be found using
-c function astGetStcNcoord.
-f function AST_GETSTCNCOORD.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astGetStcCoord()
-f AST_GETSTCCOORD = INTEGER
-* A pointer to a new KeyMap containing the required information.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
- AstFrame *frm;
- AstKeyMap *result;
- AstMapping *map;
- AstMapping *smap;
- AstObject *obj;
- AstRegion *reg;
- AstRegion *rereg;
- AstRegion *srereg;
- int ikey;
- int nc;
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Validate the supplied index. */
- nc = astGetStcNCoord( this );
- if( icoord < 1 || icoord > nc ) {
- astError( AST__STCIND, "astGetStcCoord(%s): Supplied AstroCoords "
- "index (%d) is invalid.", status, astGetClass( this ), icoord );
-
- if( icoord < 1 ) {
- astError( AST__STCIND, "The index of the first AstroCoord "
- "element is one, not zero." , status);
- } else if( nc == 0 ) {
- astError( AST__STCIND, "There are no AstroCoords elements in "
- "the supplied %s.", status, astGetClass( this ) );
- } else if( nc == 1 ) {
- astError( AST__STCIND, "There is 1 AstroCoords element in "
- "the supplied %s.", status, astGetClass( this ) );
- } else {
- astError( AST__STCIND, "There are %d AstroCoords elements in "
- "the supplied %s.", status, nc, astGetClass( this ) );
- }
-
-/* If the index is OK, initialise the returned KeyMap to be a copy of the
- KeyMap holding information about the required AstroCoords element.*/
- } else {
- result = astCopy( this->coord[ icoord - 1 ] );
-
-/* The Regions stored within this KeyMap describe regions within the base
- Frame of the parent Region structure. If the Mapping from base to current
- Frame in the parent Region structure is not a UnitMap, we need to
- change these to represent regions within the current Frame of the
- parent Region structure. */
- map = astGetMapping( ((AstRegion *)this)->frameset,
- AST__BASE, AST__CURRENT );
- smap = astSimplify( map );
- frm = astGetFrame( ((AstRegion *)this)->frameset, AST__CURRENT );
-
-/* If the Frame represented by the Region has changed, erase the Names
- element since they may no longer be correct. */
- if( !astIsAUnitMap( smap ) ) astMapRemove( result, AST__STCNAME );
-
-/* Loop round keys for which a Region may be stored in the KeyMap. */
- for( ikey = 0; ikey < NREG; ikey++ ) {
-
-/* If the KeyMap contains a Region for this key, get a pointer to it. */
- if( astMapGet0A( result, regkey[ ikey ], &obj ) ){
- reg = (AstRegion *) obj;
-
-/* Sets its RegionFS attribute so that the encapsulated FrameSet will be
- included in any dump of the Region. This is needed since the returned
- Region pointer will have no parent Region from which the FrameSet can
- be determined. */
- astSetRegionFS( reg, 1 );
-
-/* If necessary, remap the Region into the current Frame, and simplify. */
- if( !astIsAUnitMap( smap ) ) {
- rereg = astMapRegion( reg, smap, frm );
- srereg = astSimplify( rereg );
- rereg = astAnnul( rereg );
- } else {
- srereg = astClone( reg );
- }
-
-/* Replace the Region in the KeyMap with the remapped Region. */
- astMapPut0A( result, regkey[ ikey ], srereg, NULL );
-
-/* Free resources */
- reg = astAnnul( reg );
- srereg = astAnnul( srereg );
- }
- }
-
- frm = astAnnul( frm );
- map = astAnnul( map );
- smap = astAnnul( smap );
-
-/* Annul the returned KeyMap if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
- }
-
-/* Return the pointer */
- return result;
-
-}
-
-static int GetStcNCoord( AstStc *this, int *status ){
-/*
-*++
-* Name:
-c astGetStcNCoord
-f AST_GETSTCNCOORD
-
-* Purpose:
-* Return the number of AstroCoords elements stored in an Stc.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "stc.h"
-c int astGetStcNCoord( AstStc *this )
-f RESULT = AST_GETSTCNCOORD( THIS, STATUS )
-
-* Class Membership:
-* Stc method.
-
-* Description:
-* This function returns the number of AstroCoords elements stored in
-* an Stc.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Stc.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astGetStcNCoord()
-f AST_GETSTCNCOORD = INTEGER
-* The number of AstroCoords elements stored in the Stc.
-
-* Notes:
-* - Zero will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-*/
-
-/* Return the required value. */
- return astOK ? this->ncoord : 0;
-
-}
-
-static AstRegion *GetStcRegion( AstStc *this, int *status ) {
-/*
-*++
-* Name:
-c astGetStcRegion
-f AST_GETSTCREGION
-
-* Purpose:
-* Obtain a copy of the encapsulated Region within a Stc.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "stc.h"
-c AstRegion *astGetStcRegion( AstStc *this )
-f RESULT = AST_GETSTCREGION( THIS, STATUS )
-
-* Class Membership:
-* Region method.
-
-* Description:
-* This function returns a pointer to a deep copy of the Region
-* supplied when the Stc was created.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the Stc.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astGetStcRegion()
-f AST_GETSTCREGION = INTEGER
-* A pointer to a deep copy of the Region encapsulated within the
-* supplied Stc.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Return a pointer to a copy of the encapsulated Region. */
- return astCopy( this->region );
-}
-
-static int GetUseDefs( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetUseDefs
-
-* Purpose:
-* Get the value of the UseDefs attribute for a Stc.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stc.h"
-* int GetUseDefs( AstObject *this_object, int *status ) {
-
-* Class Membership:
-* Stc member function (over-rides the protected astGetUseDefs
-* method inherited from the Region class).
-
-* Description:
-* This function returns the value of the UseDefs attribute for a
-* Stc, supplying a suitable default.
-
-* Parameters:
-* this
-* Pointer to the Stc.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - The USeDefs value.
-*/
-
-/* Local Variables: */
- AstStc *this; /* Pointer to the Stc structure */
- int result; /* Value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the Stc structure. */
- this = (AstStc *) this_object;
-
-/* If the UseDefs value for the Stc has been set explicitly, use the
- Get method inherited from the parent Region class to get its value. */
- if( astTestUseDefs( this ) ) {
- result = (*parent_getusedefs)( this_object, status );
-
-/* Otherwise, supply a default value equal to the UseDefs value of the
- encapsulated Region. */
- } else {
- result = astGetUseDefs( this->region );
- }
-
-/* Return the result. */
- return result;
-}
-
-void astInitStcVtab_( AstStcVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitStcVtab
-
-* Purpose:
-* Initialise a virtual function table for a Stc.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "stc.h"
-* void astInitStcVtab( AstStcVtab *vtab, const char *name )
-
-* Class Membership:
-* Stc vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the Stc class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
- AstRegionVtab *region; /* Pointer to Region component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitRegionVtab( (AstRegionVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAStc) to determine if an object belongs to
- this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstRegionVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
-
- vtab->GetRegionClass = GetRegionClass;
- vtab->GetStcRegion = GetStcRegion;
- vtab->GetStcCoord = GetStcCoord;
- vtab->GetStcNCoord = GetStcNCoord;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
- region = (AstRegionVtab *) vtab;
-
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
-#if defined(THREAD_SAFE)
- parent_managelock = object->ManageLock;
- object->ManageLock = ManageLock;
-#endif
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
-
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
-
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
-
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
- parent_simplify = mapping->Simplify;
- mapping->Simplify = Simplify;
-
- parent_setregfs = region->SetRegFS;
- region->SetRegFS = SetRegFS;
-
- parent_equal = object->Equal;
- object->Equal = Equal;
-
- parent_clearclosed = region->ClearClosed;
- region->ClearClosed = ClearClosed;
-
- parent_setclosed = region->SetClosed;
- region->SetClosed = SetClosed;
-
- region->TestClosed = TestClosed;
- region->GetClosed = GetClosed;
-
- parent_regsetattrib = region->RegSetAttrib;
- region->RegSetAttrib = RegSetAttrib;
-
- parent_regclearattrib = region->RegClearAttrib;
- region->RegClearAttrib = RegClearAttrib;
-
- parent_clearnegated = region->ClearNegated;
- region->ClearNegated = ClearNegated;
-
- parent_setnegated = region->SetNegated;
- region->SetNegated = SetNegated;
-
- region->TestNegated = TestNegated;
- region->GetNegated = GetNegated;
-
- parent_setmeshsize = region->SetMeshSize;
- region->SetMeshSize = SetMeshSize;
-
- parent_clearmeshsize = region->ClearMeshSize;
- region->ClearMeshSize = ClearMeshSize;
-
- region->TestMeshSize = TestMeshSize;
- region->GetMeshSize = GetMeshSize;
-
- parent_setfillfactor = region->SetFillFactor;
- region->SetFillFactor = SetFillFactor;
-
- parent_clearfillfactor = region->ClearFillFactor;
- region->ClearFillFactor = ClearFillFactor;
-
- region->TestFillFactor = TestFillFactor;
- region->GetFillFactor = GetFillFactor;
-
- parent_getusedefs = object->GetUseDefs;
- object->GetUseDefs = GetUseDefs;
-
- parent_getdefunc = region->GetDefUnc;
- region->GetDefUnc = GetDefUnc;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- region->Overlap = Overlap;
- region->OverlapX = OverlapX;
- region->RegBaseBox = RegBaseBox;
- region->RegBaseMesh = RegBaseMesh;
- region->RegBasePick = RegBasePick;
- region->RegPins = RegPins;
- region->GetBounded = GetBounded;
-
-/* Declare the copy constructor, destructor and class dump function. */
- astSetCopy( vtab, Copy );
- astSetDelete( vtab, Delete );
- astSetDump( vtab, Dump, "Stc", "An IVOA Space-Time-Coords object" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static AstKeyMap *MakeAstroCoordsKeyMap( AstRegion *reg, AstKeyMap *coord,
- const char *class, int *status ){
-/*
-* Name:
-* MakeAstroCoordsKeyMap
-
-* Purpose:
-* Create a new KeyMap holding Regions describing a supplied
-* AstroCoords element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stc.h"
-* AstKeyMap *MakeAstroCoordsKeyMap( AstRegion *reg, AstKeyMap *coord,
-* const char *class, int *status )
-
-* Class Membership:
-* Stc member function
-
-* Description:
-* This function returns a pointer to a new KeyMap containing elements
-* which correspond to the components of an STC AstroCoords element.
-* The element with key AST__STCNAME holds a vector of character
-* strings containing the names associated with each of the axies.
-* The other elements of the returned KeyMap such as AST__STCERROR,
-* AST__STCRES, etc, hold pointers to Regions describing the error
-* box, resolution, etc, in the Frame of the supplied Region "reg".
-
-* Parameters:
-* reg
-* Pointer to the Region in which the AstroCoords is defined.
-* coordId
-* An ID (not a pointer) to a KeyMap defining a single <AstroCoords>
-* element, having elements with keys given by constants AST__STCNAME,
-* AST__STCVALUE, AST__STCERROR, AST__STCRES, AST__STCSIZE,
-* AST__STCPIXSZ. Any of these elements may be omitted, but no other
-* elements should be included. If supplied, the AST__STCNAME element
-* should be a vector of character string pointers holding the "Name"
-* item for each axis. Any other supplied elements should be scalar
-* elements, each holding a pointer to a Region describing the
-* associated item of ancillary information (error, resolution, size,
-* pixel size or value). These Regions should refer to the coordinate
-* system represented by "region".
-* class
-* Pointer to a string holding the STC class name.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to the new KeyMap.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *frm; /* Pointer to current Frame */
- AstFrameSet *fs; /* Pointer to conversion FrameSet */
- AstKeyMap *result; /* Pointer value to return */
- AstMapping *map; /* Pointer to conversion Mapping */
- AstObject *obj; /* Pointer to Object stored in supplied KeyMap */
- AstRegion *areg; /* Pointer to remapped Region */
- AstRegion *sareg; /* Pointer to simplified remapped Region */
- const char *key; /* Current key */
- int j; /* Index of key within KeyMap */
- int naxes; /* Number of axes in region */
- int nkey; /* Number of keys in supplied KeyMap */
- int nv; /* Number of values in KeyMap element */
- int type; /* Data type of entry */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if( !astOK ) return result;
-
-/* Confirm it is a genuine KeyMap pointer. */
- if( !astIsAKeyMap( coord ) && astOK ) {
- astError( AST__STCKEY, "astInitStc(%s): Supplied pointer is for "
- "a %s, not a KeyMap.", status, class, astGetClass( coord ) );
- }
-
-/* Initialise the new KeyMap to be a copy of the supplied KeyMap. */
- result = astCopy( coord );
-
-/* Check the supplied KeyMap is usable. */
- naxes = astGetNaxes( reg );
- nkey = astMapSize( result );
- for( j = 0; j < nkey; j++ ) {
- key = astMapKey( result, j );
- if( key ) {
- nv = astMapLength( result, key );
- type = astMapType( result, key );
-
-/* Check no unknown keys are present in the KeyMap. */
- if( strcmp( key, AST__STCNAME ) &&
- strcmp( key, AST__STCVALUE ) &&
- strcmp( key, AST__STCERROR ) &&
- strcmp( key, AST__STCRES ) &&
- strcmp( key, AST__STCSIZE ) &&
- strcmp( key, AST__STCPIXSZ ) ) {
- astError( AST__STCKEY, "astInitStc(%s): Unknown key "
- "\"%s\" supplied in an AstroCoords list.", status,
- class, key );
- break;
-
-/* Check that the "Name" element is a vector of "naxes" strings. */
- } else if( !strcmp( key, AST__STCNAME ) ) {
- if( nv != naxes ) {
- astError( AST__STCKEY, "astInitStc(%s): %d \"%s\" "
- "values supplied in an AstroCoords list, but "
- "the Stc has %d axes. ", status, class, nv, key,
- naxes );
- break;
-
- } else if( type != AST__STRINGTYPE ) {
- astError( AST__STCKEY, "astInitStc(%s): The \"%s\" "
- "values supplied in an AstroCoords list are "
- "not character strings. ", status, class, key );
- break;
- }
-
-/* Check that all other elements are scalar. */
- } else if( nv != 1 ) {
- astError( AST__STCKEY, "astInitStc(%s): %d \"%s\" "
- "values supplied in an AstroCoords list, but "
- "only one is allowed. ", status, class, nv, key );
- break;
-
-/* Check that all other elements are AST Object pointers. */
- } else if( type != AST__OBJECTTYPE ) {
- astError( AST__STCKEY, "astInitStc(%s): The \"%s\" "
- "value supplied in an AstroCoords list is "
- "not an AST Object pointer. ", status, class, key );
- break;
-
-/* Check that the Object pointers are not NULL. */
- } else {
- astMapGet0A( result, key, &obj );
- if( astOK ) {
- if( !obj ) {
- astError( AST__STCKEY, "astInitStc(%s): The \"%s\" "
- "value supplied in an AstroCoords list is "
- "a NULL pointer. ", status, class, key );
- break;
-
-/* Check that the Object pointers are Region pointers. */
- } else if( !astIsARegion( obj ) ){
- astError( AST__STCKEY, "astInitStc(%s): The \"%s\" "
- "value supplied in an AstroCoords list is "
- "a %s, not a Region. ", status, class, key,
- astGetClass(obj) );
- obj = astAnnul( obj );
- break;
-
-/* Check that the Region pointers can be converted to the coordinate
- system represented by the supplied Region. */
- } else {
- fs = astConvert( obj, reg, "" );
- if( !fs ) {
- obj = astAnnul( obj );
- astError( AST__STCKEY, "astInitStc(%s): The \"%s\" "
- "value supplied in an AstroCoords list "
- "cannot be converted to the coordinate "
- "system of its parent Stc object.", status, class,
- key );
- break;
-
-/* If necessary, map the Region into the same frame as the supplied
- Region, and replace the Region in the returned KeyMap with the
- remapped Region. Also set the RegionFS attribute to indicate that the
- FrameSet in the Region does not need to be dumped if it contains a
- UnitMap. */
- } else {
- map = astGetMapping( fs, AST__BASE, AST__CURRENT );
- if( !astIsAUnitMap( map ) ) {
- frm = astGetFrame( fs, AST__CURRENT );
- areg = astMapRegion( (AstRegion *) obj, map, frm );
- sareg = astSimplify( areg );
- astSetRegionFS( sareg, 0 );
- astMapPut0A( result, key, sareg, NULL );
- areg = astAnnul( areg );
- sareg = astAnnul( sareg );
- frm = astAnnul( frm );
- } else {
- astSetRegionFS( (AstRegion *) obj, 0 );
- }
- map = astAnnul( map );
- fs = astAnnul( fs );
-
- }
- obj = astAnnul( obj );
- }
- }
- }
- }
- }
-
-/* Free the returned KeyMap if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result */
- return result;
-
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra,
- AstObject **fail, int *status ) {
-/*
-* Name:
-* ManageLock
-
-* Purpose:
-* Manage the thread lock on an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *ManageLock( AstObject *this, int mode, int extra,
-* AstObject **fail, int *status )
-
-* Class Membership:
-* Stc member function (over-rides the astManageLock protected
-* method inherited from the parent class).
-
-* Description:
-* This function manages the thread lock on the supplied Object. The
-* lock can be locked, unlocked or checked by this function as
-* deteremined by parameter "mode". See astLock for details of the way
-* these locks are used.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* mode
-* An integer flag indicating what the function should do:
-*
-* AST__LOCK: Lock the Object for exclusive use by the calling
-* thread. The "extra" value indicates what should be done if the
-* Object is already locked (wait or report an error - see astLock).
-*
-* AST__UNLOCK: Unlock the Object for use by other threads.
-*
-* AST__CHECKLOCK: Check that the object is locked for use by the
-* calling thread (report an error if not).
-* extra
-* Extra mode-specific information.
-* fail
-* If a non-zero function value is returned, a pointer to the
-* Object that caused the failure is returned at "*fail". This may
-* be "this" or it may be an Object contained within "this". Note,
-* the Object's reference count is not incremented, and so the
-* returned pointer should not be annulled. A NULL pointer is
-* returned if this function returns a value of zero.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A local status value:
-* 0 - Success
-* 1 - Could not lock or unlock the object because it was already
-* locked by another thread.
-* 2 - Failed to lock a POSIX mutex
-* 3 - Failed to unlock a POSIX mutex
-* 4 - Bad "mode" value supplied.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-*/
-
-/* Local Variables: */
- AstStc *this; /* Pointer to STC structure */
- int i; /* Loop count */
- int result; /* Returned status value */
-
-/* Initialise */
- result = 0;
-
-/* Check the supplied pointer is not NULL. */
- if( !this_object ) return result;
-
-/* Obtain a pointers to the STC structure. */
- this = (AstStc *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
- if( !result ) result = (*parent_managelock)( this_object, mode, extra,
- fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
- the supplied Object. */
- if( !result ) result = astManageLock( this->region, mode, extra, fail );
- for( i = 0; i < this->ncoord; i++ ) {
- if( !result ) result = astManageLock( this->coord[ i ], mode,
- extra, fail );
- }
-
- return result;
-
-}
-#endif
-
-static int Overlap( AstRegion *this, AstRegion *that, int *status ){
-/*
-* Name:
-* Overlap
-
-* Purpose:
-* Test if two regions overlap each other.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stc.h"
-* int Overlap( AstRegion *this, AstRegion *that, int *status )
-
-* Class Membership:
-* Stc member function (over-rides the astOverlap method inherited
-* from the Region class).
-
-* Description:
-* This function returns an integer value indicating if the two
-* supplied Regions overlap. The two Regions are converted to a commnon
-* coordinate system before performing the check. If this conversion is
-* not possible (for instance because the two Regions represent areas in
-* different domains), then the check cannot be performed and a zero value
-* is returned to indicate this.
-
-* Parameters:
-* this
-* Pointer to the first Region.
-* that
-* Pointer to the second Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* astOverlap()
-* A value indicating if there is any overlap between the two Regions.
-* Possible values are:
-*
-* 0 - The check could not be performed because the second Region
-* could not be mapped into the coordinate system of the first
-* Region.
-*
-* 1 - There is no overlap between the two Regions.
-*
-* 2 - The first Region is completely inside the second Region.
-*
-* 3 - The second Region is completely inside the first Region.
-*
-* 4 - There is partial overlap between the two Regions.
-*
-* 5 - The Regions are identical.
-*
-* 6 - The second Region is the negation of the first Region.
-
-* Notes:
-* - The returned values 5 and 6 do not check the value of the Closed
-* attribute in the two Regions.
-* - A value of zero will be returned if this function is invoked with the
-* AST error status set, or if it should fail for any reason.
-
-*/
-
-/* Check the inherited status. */
- if ( !astOK ) return 0;
-
-/* Invoke the "astOverlap" method on the encapsulated Region. */
- return astOverlap( ((AstStc *)this)->region, that );
-}
-
-static int OverlapX( AstRegion *that, AstRegion *this, int *status ){
-/*
-* Name:
-* OverlapX
-
-* Purpose:
-* Test if two regions overlap each other.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stc.h"
-* int OverlapX( AstRegion *that, AstRegion *this )
-
-* Class Membership:
-* Stc member function (over-rides the astOverlapX method inherited
-* from the Region class).
-
-* Description:
-* This function performs the processing for the public astOverlap
-* method and has exactly the same interface except that the order
-* of the two arguments is swapped. This is a trick to allow
-* the astOverlap method to be over-ridden by derived classes on
-* the basis of the class of either of its two arguments.
-*
-* See the astOverlap method for details of the interface.
-
-*/
-
-/* Local Variables: */
- int result;
-
-/* Check the inherited status. */
- if ( !astOK ) return 0;
-
-/* Invoke the "astOverlapX" method on the encapsulated Region. */
- result = astOverlap( ((AstStc *)that)->region, this );
-
-/* Swap the returned values 2 and 3 to take account of the swapping of
- the regions.*/
- if( result == 2 ) {
- result = 3;
- } else if( result == 3 ) {
- result = 2;
- }
-
-/* Return the result. */
- return result;
-}
-
-static void RegBaseBox( AstRegion *this, double *lbnd, double *ubnd, int *status ){
-/*
-* Name:
-* RegBaseBox
-
-* Purpose:
-* Returns the bounding box of an un-negated Region in the base Frame of
-* the encapsulated FrameSet.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stc.h"
-* void RegBaseBox( AstRegion *this, double *lbnd, double *ubnd, int *status )
-
-* Class Membership:
-* Stc member function (over-rides the astRegBaseBox protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns the upper and lower axis bounds of a Region in
-* the base Frame of the encapsulated FrameSet, assuming the Region
-* has not been negated. That is, the value of the Negated attribute
-* is ignored.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* lbnd
-* Pointer to an array in which to return the lower axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-* ubnd
-* Pointer to an array in which to return the upper axis bounds
-* covered by the Region in the base Frame of the encapsulated
-* FrameSet. It should have at least as many elements as there are
-* axes in the base Frame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Invoke the method on the encapsulated Region. */
- astRegBaseBox( ((AstStc *)this)->region, lbnd, ubnd );
-}
-
-static AstPointSet *RegBaseMesh( AstRegion *this, int *status ){
-/*
-* Name:
-* RegBaseMesh
-
-* Purpose:
-* Create a new PointSet containing a mesh of points on the boundary of a
-* Region in its base Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stc.h"
-* AstPointSet *astRegBaseMesh( AstRegion *this, int *status )
-
-* Class Membership:
-* Stc member function (over-rides the astRegBaseMesh protected
-* method inherited from the Region class).
-
-* Description:
-* This function creates a new PointSet containing a mesh of points on the
-* boundary of the Region. The points refer to the base Frame of
-* the encapsulated FrameSet.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the PointSet. Annul the pointer using astAnnul when it
-* is no longer needed.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-
-*/
-
-/* Check the global error status. */
- if( !astOK ) return NULL;
-
-/* Invoke the astRegMesh method on the encapsulated Region. This returns
- a mesh in the current Frame of the encapsulated Region which is the same
- as the base Frame of the Stc Region. */
- return astRegMesh( ((AstStc *)this)->region );
-}
-
-static AstRegion *RegBasePick( AstRegion *this_region, int naxes,
- const int *axes, int *status ){
-/*
-* Name:
-* RegBasePick
-
-* Purpose:
-* Return a Region formed by picking selected base Frame axes from the
-* supplied Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stc.h"
-* AstRegion *RegBasePick( AstRegion *this, int naxes, const int *axes,
-* int *status )
-
-* Class Membership:
-* Stc member function (over-rides the astRegBasePick protected
-* method inherited from the Region class).
-
-* Description:
-* This function attempts to return a Region that is spanned by selected
-* axes from the base Frame of the encapsulated FrameSet of the supplied
-* Region. This may or may not be possible, depending on the class of
-* Region. If it is not possible a NULL pointer is returned.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* naxes
-* The number of base Frame axes to select.
-* axes
-* An array holding the zero-based indices of the base Frame axes
-* that are to be selected.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the Region, or NULL if no region can be formed.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or if
-* this function should fail for any reason.
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Invoke the astRegBaePick method on the encapsulated Region. */
- return astRegBasePick( ((AstStc *)this_region)->region, naxes, axes );
-}
-
-static void RegClearAttrib( AstRegion *this_region, const char *attrib,
- char **base_attrib, int *status ) {
-/*
-* Name:
-* RegClearAttrib
-
-* Purpose:
-* Clear an attribute value for a Region.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "stc.h"
-* void RegClearAttrib( AstRegion *this, const char *attrib,
-* char **base_attrib, int *status )
-
-* Class Membership:
-* Stc method (over-rides the astRegClearAttrib method inherited from
-* the Region class).
-
-* Description:
-* This function clears the value of an attribute in both the base and
-* current Frame in the FrameSet encapsulated within a Region, without
-* remapping either Frame.
-*
-* No error is reported if the attribute is not recognised by the base
-* Frame.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* attrib
-* Pointer to a null terminated string containing an attribute name.
-* NOTE, IT SHOULD BE ENTIRELY LOWER CASE.
-* base_attrib
-* Address of a location at which to return a pointer to the null
-* terminated string holding the name of the attribute which was
-* cleared in the base Frame of the encapsulated FrameSet. This may
-* differ from the supplied name if the supplied name contains an axis
-* index and the current->base Mapping in the FrameSet produces an
-* axis permutation. The returned pointer should be freed using
-* astFree when no longer needed. A NULL pointer may be supplied in
-* which case no pointer is returned.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstStc *this;
- char *batt;
- int rep;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the Stc structure. */
- this = (AstStc *) this_region;
-
-/* Use the RegClearAttrib method inherited from the parent class to clear
- the attribute in the current and base Frames in the FrameSet encapsulated
- by the parent Region structure. */
- (*parent_regclearattrib)( this_region, attrib, &batt, status );
-
-/* Now clear the base Frame attribute in the encapsulated Region (the current
- Frame within the encapsulated Region is equivalent to the base Frame in the
- parent Region structure). Annul any "attribute unknown" error that results
- from attempting to do this. */
- if( astOK ) {
- rep = astReporting( 0 );
- astRegClearAttrib( this->region, batt, NULL );
- if( astStatus == AST__BADAT ) astClearStatus;
- astReporting( rep );
- }
-
-/* If required, return the base Frame attribute name, otherwise free it. */
- if( base_attrib ) {
- *base_attrib = batt;
- } else {
- batt = astFree( batt );
- }
-}
-
-static int RegPins( AstRegion *this, AstPointSet *pset, AstRegion *unc,
- int **mask, int *status ){
-/*
-* Name:
-* RegPins
-
-* Purpose:
-* Check if a set of points fall on the boundary of a given Stc.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stc.h"
-* int RegPins( AstRegion *this, AstPointSet *pset, AstRegion *unc,
-* int **mask, int *status )
-
-* Class Membership:
-* Stc member function (over-rides the astRegPins protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a flag indicating if the supplied set of
-* points all fall on the boundary of the given Stc.
-*
-* Some tolerance is allowed, as specified by the uncertainty Region
-* stored in the supplied Stc "this", and the supplied uncertainty
-* Region "unc" which describes the uncertainty of the supplied points.
-
-* Parameters:
-* this
-* Pointer to the Stc.
-* pset
-* Pointer to the PointSet. The points are assumed to refer to the
-* base Frame of the FrameSet encapsulated by "this".
-* unc
-* Pointer to a Region representing the uncertainties in the points
-* given by "pset". The Region is assumed to represent the base Frame
-* of the FrameSet encapsulated by "this". Zero uncertainity is assumed
-* if NULL is supplied.
-* mask
-* Pointer to location at which to return a pointer to a newly
-* allocated dynamic array of ints. The number of elements in this
-* array is equal to the value of the Npoint attribute of "pset".
-* Each element in the returned array is set to 1 if the
-* corresponding position in "pset" is on the boundary of the Region
-* and is set to zero otherwise. A NULL value may be supplied
-* in which case no array is created. If created, the array should
-* be freed using astFree when no longer needed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the points all fall on the boundary of the given
-* Region, to within the tolerance specified. Zero otherwise.
-
-*/
-
-/* Check the global error status. */
- if( !astOK ) return 0;
-
-/* Invoke the method on the encapsulated Region. */
- return astRegPins( ((AstStc *)this)->region, pset, unc, mask );
-}
-
-static void RegSetAttrib( AstRegion *this_region, const char *setting,
- char **base_setting, int *status ) {
-/*
-* Name:
-* RegSetAttrib
-
-* Purpose:
-* Set an attribute value for a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stc.h"
-* void RegSetAttrib( AstRegion *this, const char *setting,
-* char **base_setting, int *status )
-
-* Class Membership:
-* Stc method (over-rides the astRegSetAttrib method inherited from
-* the Region class).
-
-* Description:
-* This function assigns an attribute value to both the base and
-* current Frame in the FrameSet encapsulated within a Region, without
-* remapping either Frame.
-*
-* No error is reported if the attribute is not recognised by the base
-* Frame.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* setting
-* Pointer to a null terminated attribute setting string. NOTE, IT
-* SHOULD BE ENTIRELY LOWER CASE. The supplied string will be
-* interpreted using the public interpretation implemented by
-* astSetAttrib. This can be different to the interpretation of the
-* protected accessor functions. For instance, the public
-* interpretation of an unqualified floating point value for the
-* Epoch attribute is to interpet the value as a gregorian year,
-* but the protected interpretation is to interpret the value as an
-* MJD.
-* base_setting
-* Address of a location at which to return a pointer to the null
-* terminated attribute setting string which was applied to the
-* base Frame of the encapsulated FrameSet. This may differ from
-* the supplied setting if the supplied setting contains an axis
-* index and the current->base Mapping in the FrameSet produces an
-* axis permutation. The returned pointer should be freed using
-* astFree when no longer needed. A NULL pointer may be supplied in
-* which case no pointer is returned.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstKeyMap *keymap;
- AstObject *obj;
- AstRegion *reg;
- AstStc *this;
- char *bset;
- int i;
- int ikey;
- int rep;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the Stc structure. */
- this = (AstStc *) this_region;
-
-/* Use the RegSetAttrib method inherited from the parent class to apply the
- setting to the current and base Frames in the FrameSet encapsulated by the
- parent Region structure. */
- (*parent_regsetattrib)( this_region, setting, &bset, status );
-
-/* Now apply the base Frame setting to the encapsulated Region (the current
- Frame within the encapsulated Region is equivalent to the base Frame in the
- parent Region structure). Annul any "attribute unknown" error that results
- from attempting to do this. Also do any AstroCoords in the Stc. */
- if( astOK ) {
- rep = astReporting( 0 );
- astRegSetAttrib( this->region, bset, NULL );
- if( astStatus == AST__BADAT ) astClearStatus;
-
-/* Loop round all AstroCoords elements. */
- for( i = 0; i < this->ncoord; i++ ) {
-
-/* Get a pointer to the KeyMap holding a description of the current
- AstroCoords element. */
- keymap = this->coord[ i ];
-
-/* Loop round all the elements of this KeyMap which may hold a Region
- pointer. */
- for( ikey = 0; ikey < NREG; ikey++ ) {
-
-/* If the KeyMap contains a Region for this key, get a pointer to it. */
- if( astMapGet0A( keymap, regkey[ ikey ], &obj ) ){
- reg = (AstRegion *) obj;
-
-/* Modify it by applying the attribute setting. */
- astRegSetAttrib( reg, bset, NULL );
- if( astStatus == AST__BADAT ) astClearStatus;
-
-/* Annul the pointer. */
- reg = astAnnul( reg );
- }
- }
- }
-
- astReporting( rep );
- }
-
-/* If required, return the base Frame setting string, otherwise free it. */
- if( base_setting ) {
- *base_setting = bset;
- } else {
- bset = astFree( bset );
- }
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a Stc.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stc.h"
-* void SetAttrib( AstObject *this, const char *setting, int *status )
-
-* Class Membership:
-* Stc member function (over-rides the astSetAttrib method inherited
-* from the Region class).
-
-* Description:
-* This function assigns an attribute value for a Stc, the
-* attribute and its value being specified by means of a string of
-* the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in
-* lower case with no white space present. The value to the right
-* of the "=" should be a suitable textual representation of the
-* value to be assigned and this will be interpreted according to
-* the attribute's data type. White space surrounding the value is
-* only significant for string attributes.
-
-* Parameters:
-* this
-* Pointer to the Stc.
-* setting
-* Pointer to a null terminated string specifying the new attribute
-* value.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function uses one-based axis numbering so that it is
-* suitable for external (public) use.
-*/
-
-/* Local Vaiables: */
- AstStc *this; /* Pointer to the Stc structure */
- int len; /* Length of setting string */
- int nc; /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Stc structure. */
- this = (AstStc *) this_object;
-
-/* Obtain the length of the setting string. */
- len = strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse the
- setting string and extract the attribute value (or an offset to it in the
- case of string values). In each case, use the value set in "nc" to check
- that the entire string was matched. Once a value has been obtained, use the
- appropriate method to set it. */
-
-/* (none as yet) */
-
-/* Read-only attributes. */
-/* --------------------- */
-/* Define a macro to see if the setting string matches any of the
- read-only attributes of this class. */
-#define MATCH(attrib) \
- ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
- ( nc >= len ) )
-
-/* Use this macro to report an error if a read-only attribute has been
- specified. */
- if ( MATCH( "regionclass" ) ) {
- astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.", status,
- setting, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-
-/* Undefine macros local to this function. */
-#undef MATCH
-}
-
-static void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status ) {
-/*
-* Name:
-* SetRegFS
-
-* Purpose:
-* Stores a new FrameSet in a Region
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stc.h"
-* void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status )
-
-* Class Membership:
-* Stc method (over-rides the astSetRegFS method inherited from
-* the Region class).
-
-* Description:
-* This function creates a new FrameSet and stores it in the supplied
-* Region. The new FrameSet contains two copies of the supplied
-* Frame, connected by a UnitMap.
-
-* Parameters:
-* this
-* Pointer to the Region.
-* frm
-* The Frame to use.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstRegion *creg; /* Pointer to encapsulated Region structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Invoke the parent method to store the FrameSet in the parent Region
- structure. */
- (* parent_setregfs)( this_region, frm, status );
-
-/* If the encapsulated Region has a dummy FrameSet use this method
- recursively to give it the same FrameSet. */
- creg = ((AstStc *) this_region )->region;
- if( creg && !astGetRegionFS( creg ) ) astSetRegFS( creg, frm );
-
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* Simplify
-
-* Purpose:
-* Simplify a Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "region.h"
-* AstMapping *Simplify( AstMapping *this, int *status )
-
-* Class Membership:
-* Stc method (over-rides the astSimplify method inherited from
-* the Region class).
-
-* Description:
-* This function simplifies a Stc to eliminate redundant
-* computational steps, or to merge separate steps which can be
-* performed more efficiently in a single operation.
-
-* Parameters:
-* this
-* Pointer to the original Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A new pointer to the (possibly simplified) Region.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstFrame *frm; /* Current Frame */
- AstKeyMap *keymap; /* KeyMap holding stroCoords element */
- AstMapping *map; /* Base->current Mapping */
- AstObject *obj; /* Pointer to object retrieved from keymap */
- AstRegion *newreg; /* New encapsulated Region */
- AstRegion *reg; /* AstroCoords Region pointer */
- AstRegion *treg; /* Temporary Region pointer */
- AstStc *stc; /* Returned Stc Structure. */
- AstStc *temp; /* Temporary Stc pointer */
- int i; /* Index of current AstroCoords element */
- int ikey; /* Index of key to be tested */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Invoke the Simplify method of the parent Region class. This simplifies
- the FrameSet and uncertainty Region in the parent Region structure. */
- stc = (AstStc *) (AstRegion *) (* parent_simplify)( this_mapping, status );
-
-/* If the Stc is negated, we can perform a simplication by transferring
- the negated state from the Stc itself to the encapsulated Region. */
- if( astGetNegated( stc ) ) {
-
-/* Ensure that modifying "stc" will not modify the supplied Stc, by
- creating a copy of the supplied Stc, if this has not already been done. */
- if( stc == (AstStc *) this_mapping ) {
- temp = (AstStc *) astCopy( stc );
- (void) astAnnul( stc );
- stc = temp;
- }
-
-/* Modify "temp" by negating both the Stc structure and its encapsulated
- Region. */
- astNegate( stc );
- astNegate( stc->region );
-
- }
-
-/* Get the base->current Mapping from the parent Region structure, and
- the current Frame. */
- map = astGetMapping( ((AstRegion *) stc)->frameset, AST__BASE, AST__CURRENT );
- frm = astGetFrame( ((AstRegion *) stc)->frameset, AST__CURRENT );
-
-/* We may be able to perform some more simplication on the encapsulated
- Region itself. If the above mapping is not a unit map, remap the
- encapsulated Region into the current Frame of the parent Region structure
- and simplify it. This transfers complication from the Mapping in the
- parent Region structure to the encapsulated Region. */
- if( !astIsAUnitMap( map ) ) {
- treg = astMapRegion( stc->region, map, frm );
- newreg = astSimplify( treg );
- treg = astAnnul( treg );
-
-/* If the base->current Mapping in the parent Region structure is a unit
- map, simplification of the whole Stc is possible if the encapsulated
- Region (without any remapping) can be simplied. */
- } else {
- newreg = astSimplify( stc->region );
- }
-
-/* If the encapsulated Region has been changed, store it in the returned
- Stc. */
- if( newreg != stc->region ) {
-
-/* Ensure that modifying "stc" will not modify the supplied Stc, by
- creating a copy of the supplied Stc, if this has not already been done. */
- if( stc == (AstStc *) this_mapping ) {
- temp = (AstStc *) astCopy( stc );
- (void) astAnnul( stc );
- stc = temp;
- }
-
-/* Store the new region in "stc", annulling the existing Region. */
- if( stc ) {
- (void) astAnnul( stc->region );
- stc->region = astClone( newreg );
- }
-
-/* The encapsulated Region now represents an area in the current Frame
- represented by the supplied Stc. Since the encapsulated Region is
- defined as being in the base Frame of the FrameSet in the parent
- Region structure, the parent FrameSet should just be a UnitMap. Modify
- it appropriately (if it not already a UnitMap). */
- if( !astIsAUnitMap( map ) ) astSetRegFS( stc, frm );
- }
-
-/* Free resources */
- newreg = astAnnul( newreg );
-
-/* Now we do a similar process on any Regions held within an AstroCoords
- elements. Loop round all AstroCoords elements. */
- if( stc ) {
- for( i = 0; i < stc->ncoord; i++ ) {
-
-/* Get a pointewr to the KeyMap holding a description of the current
- AstroCoords element. */
- keymap = stc->coord[ i ];
-
-/* Loop round all the elements of this KeyMap which may hold a Region
- pointer. */
- for( ikey = 0; ikey < NREG; ikey++ ) {
-
-/* If the KeyMap contains a Region for this key, get a pointer to it. */
- if( astMapGet0A( keymap, regkey[ ikey ], &obj ) ){
- reg = (AstRegion *) obj;
-
-/* We have two tasks now, firstly to ensure that this AstroCoords Region
- describes an area in the base Frame of the FrameSet in the parent
- Region structure (which may have been changed by the earlier
- simplications performed by this function), and secondly, to attempt to
- simplify the Region.
-
- The Stc structure addressed by the "stc" pointer will have a current
- Frame given by "frm". This will also be its base Frame, and the
- base->current Mapping will consequently be a UnitMap. The Mapping from
- the original base Frame to the new base Frame is given by "map". Unless
- this is a UnitMap, we need to remap the Region.*/
- if( !astIsAUnitMap( map ) ) {
- treg = astMapRegion( reg, map, frm );
- } else {
- treg = astClone( reg );
- }
-
-/* Now attempt to simplify the Region.*/
- newreg = astSimplify( treg );
-
-/* If the Region has been changed by either of these steps, we need to
- store the modified Region back in the "stc" structure which is being
- returned. But we need to be careful we do not modify the supplied Stc
- structure. */
- if( newreg != reg ) {
-
- if( stc == (AstStc *) this_mapping ) {
- temp = astCopy( stc );
- (void) astAnnul( stc );
- stc = temp;
- keymap = temp->coord[ i ];
- }
-
- astMapPut0A( keymap, regkey[ ikey ], newreg, regcom[ ikey ] );
-
- }
-
-/* Free resources */
- reg = astAnnul( reg );
- treg = astAnnul( treg );
- newreg = astAnnul( newreg );
-
- }
- }
- }
- }
-
-/* Free resources */
- map = astAnnul( map );
- frm = astAnnul( frm );
-
-/* If an error occurred, annul the returned Mapping. */
- if ( !astOK ) stc = astAnnul( stc );
-
-/* Return the result. */
- return (AstMapping *) stc;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a Stc.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stc.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Stc member function (over-rides the astTestAttrib protected
-* method inherited from the Region class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a Stc's attributes.
-
-* Parameters:
-* this
-* Pointer to the Stc.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - This function uses one-based axis numbering so that it is
-* suitable for external (public) use.
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstStc *this; /* Pointer to the Stc structure */
- int len; /* Length of attrib string */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the Stc structure. */
- this = (AstStc *) this_object;
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* Read-only attributes. */
-/* --------------------- */
-/* Test if the attribute name matches any of the read-only attributes
- of this class. If it does, then return zero. */
- if ( !strcmp( attrib, "regionclass" ) ) {
- result = 0;
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a Stc to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stc.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* Stc member function (over-rides the astTransform method inherited
-* from the Region class).
-
-* Description:
-* This function takes a Stc and a set of points encapsulated in a
-* PointSet and transforms the points so as to apply the required Region.
-* This implies applying each of the Stc's encapsulated Region in turn,
-* either in series or in parallel.
-
-* Parameters:
-* this
-* Pointer to the Stc.
-* in
-* Pointer to the PointSet associated with the input coordinate values.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of coordinates for the Stc being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstPointSet *ps; /* Pointer to PointSet */
- AstPointSet *pset_tmp; /* Pointer to PointSet holding base Frame positions*/
- AstPointSet *result; /* Pointer to output PointSet */
- AstRegion *reg; /* Pointer to encapsulated Region */
- AstStc *this; /* Pointer to the Stc structure */
- double **ptr; /* Pointer to axis values */
- double **ptr_out; /* Pointer to output coordinate data */
- int coord; /* Zero-based index for coordinates */
- int good; /* Is the point inside the Stc? */
- int ncoord_out; /* No. of coordinates per output point */
- int ncoord_tmp; /* No. of coordinates per base Frame point */
- int neg; /* Negated value for encapsulated Region */
- int neg_old; /* Original Negated flag */
- int npoint; /* No. of points */
- int point; /* Loop counter for points */
- int rep; /* Original error reporting status */
- int status_value; /* AST status value */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a Pointer to the Stc structure */
- this = (AstStc *) this_mapping;
-
-/* Get the encapsulated Region, and the Negated value which should be used
- with it. The returned values take account of whether the supplied Stc has
- itself been Negated or not. The returned Region represent a region within
- the base Frame of the FrameSet encapsulated by the parent Region
- structure. */
- GetRegion( this, ®, &neg, status );
-
-/* Temporarily set the Negated attribute to the required value.*/
- neg_old = astGetNegated( reg );
- astSetNegated( reg, neg );
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Region class. This function validates
- all arguments and generates an output PointSet if necessary, containing
- a copy of the input PointSet. */
- result = (*parent_transform)( this_mapping, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- calculations needed to generate the output coordinate values. */
-
-/* First use the encapsulated FrameSet in the parent Region structure to
- transform the supplied positions from the current Frame in the
- encapsulated FrameSet (the Frame represented by the Stc), to the
- base Frame (the Frame in which the encapsulated Region are defined). Note,
- the returned pointer may be a clone of the "in" pointer, and so we
- must be carefull not to modify the contents of the returned PointSet. */
- pset_tmp = astRegTransform( this, in, 0, NULL, NULL );
-
-/* Now transform this PointSet using the encapsulated Region. */
- ps = astTransform( reg, pset_tmp, 0, NULL );
-
-/* Determine the numbers of points and coordinates per point for these base
- Frame PointSets and obtain pointers for accessing the base Frame and output
- coordinate values. */
- npoint = astGetNpoint( pset_tmp );
- ncoord_tmp = astGetNcoord( pset_tmp );
- ptr = astGetPoints( ps );
- ncoord_out = astGetNcoord( result );
- ptr_out = astGetPoints( result );
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
- if ( astOK ) {
-
- for ( point = 0; point < npoint; point++ ) {
- good = 0;
-
- for ( coord = 0; coord < ncoord_tmp; coord++ ) {
- if( ptr[ coord ][ point ] != AST__BAD ) {
- good = 1;
- break;
- }
- }
-
- if( !good ) {
- for ( coord = 0; coord < ncoord_out; coord++ ) {
- ptr_out[ coord ][ point ] = AST__BAD;
- }
- }
- }
- }
-
-/* Re-instate the original value for the Negated attribute of the
- encapsulated Region. Do this even if an error has occurred. */
- status_value = astStatus;
- astClearStatus;
- rep = astReporting( 0 );
- if( reg ) astSetNegated( reg, neg_old );
- astReporting( rep );
- astSetStatus( status_value );
-
-/* Free resources. */
- reg = astAnnul( reg );
- ps = astAnnul( ps );
- pset_tmp = astAnnul( pset_tmp );
-
-/* If an error occurred, clean up by deleting the output PointSet (if
- allocated by this function) and setting a NULL result pointer. */
- if ( !astOK ) {
- if ( !out ) result = astDelete( result );
- result = NULL;
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-
-/* Stc Attributes: */
-/* =============== */
-
-/*
-*att++
-* Name:
-* RegionClass
-
-* Purpose:
-* The AST class name of the Region encapsulated within an Stc
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String, read-only.
-
-* Description:
-* This is a read-only attribute giving the AST class name of the
-* Region encapsulated within an Stc (that is, the class of the Region
-* which was supplied when the Stc was created).
-
-* Applicability:
-* Stc
-* All Stc objects this attribute.
-*att--
-*/
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for Stc objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for Stc objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - This constructor makes a deep copy, including a copy of the component
-* Regions within the Stc.
-*/
-
-/* Local Variables: */
- AstStc *in; /* Pointer to input Stc */
- AstStc *out; /* Pointer to output Stc */
- int i; /* AstroCoords index */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Stcs. */
- in = (AstStc *) objin;
- out = (AstStc *) objout;
-
-/* For safety, start by clearing any references to the input component
- Regions, etc, from the output Stc. */
- out->region = NULL;
- out->coord = NULL;
- out->ncoord = 0;
-
-/* Make a copy of the Region and store a pointer to it in the output Stc
- structure. */
- out->region = astCopy( in->region );
-
-/* Copy any memory holding AstroCoords values */
- if( in->coord && in->ncoord ) {
- out->ncoord = in->ncoord;
- out->coord = astMalloc( sizeof(AstKeyMap *) * (size_t)in->ncoord );
- if( out->coord ) {
- for( i = 0; i < in->ncoord; i++ ) {
- out->coord[ i ] = astCopy( in->coord[ i ] );
- }
- }
- }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for Stc objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for Stc objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstStc *this; /* Pointer to Stc */
- int i; /* AstroCoords index */
-
-/* Obtain a pointer to the Stc structure. */
- this = (AstStc *) obj;
-
-/* Annul the pointer to the encapsulated Region. */
- this->region = astAnnul( this->region );
-
-/* Free any memory holding AstroCoords values */
- if( this->coord ) {
- for( i = 0; i < this->ncoord; i++ ) {
- this->coord[ i ] = astAnnul( this->coord[ i ] );
- }
- this->coord = astFree( this->coord );
- }
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for Stc objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the Stc class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the Stc whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define COMMENT_LEN 150 /* Maximum length of a comment string */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstStc *this; /* Pointer to the Stc structure */
- char comment[ COMMENT_LEN + 1 ]; /* Buffer for comment string */
- char key[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- int ico; /* Loop counter for KeyMaps */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the Stc structure. */
- this = (AstStc *) this_object;
-
-/* Write out values representing the instance variables for the Stc
- class. Accompany these with appropriate comment strings, possibly
- depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* Encapsulated Region. */
-/* -------------------- */
- astWriteObject( channel, "Region", 1, 1, this->region,
- "STC Region" );
-
-/* AstroCoords info */
-/* ---------------- */
- astWriteInt( channel, "Ncoord", ( this->ncoord != 0 ), 0, this->ncoord,
- "Number of AstroCoords elements" );
-
- for ( ico = 1; ico <= this->ncoord; ico++ ) {
- (void) sprintf( key, "Coord%d", ico );
- (void) sprintf( comment, "AstroCoords number %d", ico );
- astWriteObject( channel, key, 1, 1, this->coord[ ico - 1 ],
- comment );
- }
-
-/* Undefine macros local to this function. */
-#undef COMMENT_LEN
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAStc and astCheckStc functions using the
- macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(Stc,Region)
-astMAKE_CHECK(Stc)
-
-AstStc *astInitStc_( void *mem, size_t size, int init, AstStcVtab *vtab,
- const char *name, AstRegion *region, int ncoords,
- AstKeyMap **coords, int *status ) {
-/*
-*+
-* Name:
-* astInitStc
-
-* Purpose:
-* Initialise a Stc.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "stc.h"
-* AstStc *astInitStc( void *mem, size_t size, int init, AstStcVtab *vtab,
-* const char *name, AstRegion *region, int ncoords,
-* AstKeyMap **coords )
-
-* Class Membership:
-* Stc initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new Stc object. It allocates memory (if necessary) to
-* accommodate the Stc plus any additional data associated with the
-* derived class. It then initialises a Stc structure at the start
-* of this memory. If the "init" flag is set, it also initialises the
-* contents of a virtual function table for a Stc at the start of
-* the memory passed via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the Stc is to be initialised.
-* This must be of sufficient size to accommodate the Stc data
-* (sizeof(Stc)) plus any data used by the derived class. If a
-* value of NULL is given, this function will allocate the memory itself
-* using the "size" parameter to determine its size.
-* size
-* The amount of memory used by the Stc (plus derived class
-* data). This will be used to allocate memory if a value of NULL is
-* given for the "mem" parameter. This value is also stored in the
-* Stc structure, so a valid value must be supplied even if not
-* required for allocating memory.
-* init
-* A logical flag indicating if the Stc's virtual function table
-* is to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new Stc.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the Object
-* astClass function).
-* region
-* Pointer to the Region represented by the Stc.
-* ncoords
-* Number of KeyMap pointers supplied in "coords". Can be zero.
-* Ignored if "coords" is NULL.
-* coords
-* Pointer to an array of "ncoords" KeyMap pointers, or NULL if
-* "ncoords" is zero. Each KeyMap defines defines a single <AstroCoords>
-* element, and should have elements with keys given by constants
-* AST__STCNAME, AST__STCVALUE, AST__STCERROR, AST__STCRES, AST__STCSIZE,
-* AST__STCPIXSZ. Any of these elements may be omitted, but no other
-* elements should be included. If supplied, the AST__STCNAME element
-* should be a vector of character string pointers holding the "Name"
-* item for each axis. Any other supplied elements should be scalar
-* elements, each holding a pointer to a Region describing the
-* associated item of ancillary information (error, resolution, size,
-* pixel size or value). These Regions should describe a volume within
-* the coordinate system represented by "region".
-
-* Returned Value:
-* A pointer to the new Stc.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstMapping *frm; /* Current Frame in supplied Stc */
- AstMapping *map; /* Base -> Current Mapping in supplied Stc */
- AstRegion *reg; /* Copy of supplied Region */
- AstStc *new; /* Pointer to new Stc */
- int i; /* AstroCoords index */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitStcVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* If the supplied Region is an Stc, create a new Region by mapping the
- encapsulated Region within the supplied Stc into the current Frame of the
- Stc. */
- if( astIsAStc( region ) ) {
- map = astGetMapping( region->frameset, AST__BASE, AST__CURRENT );
- frm = astGetFrame( region->frameset, AST__CURRENT );
- reg = astMapRegion( ((AstStc *) region)->region, map, frm );
- frm = astAnnul( frm );
- map = astAnnul( map );
-
-/* Otherwise, just take a copy of the supplied Region. */
- } else {
- reg = astCopy( region );
- }
-
-/* Initialise a Region structure (the parent class) as the first component
- within the Stc structure, allocating memory if necessary. A NULL
- PointSet is suppled as the encapsulated Region will perform the function
- of defining the Region shape. The base Frame of the FrameSet in the
- parent Region structure will be the same as the current Frames of the
- FrameSets in the two encapsulated Region. */
- if ( astOK ) {
- new = (AstStc *) astInitRegion( mem, size, 0, (AstRegionVtab *) vtab,
- name, reg, NULL, NULL );
-
-/* Initialise the Stc data. */
-/* --------------------------- */
-/* Store a pointer to the encapsulated Region. */
- new->region = astClone( reg );
-
-/* No AstroCoords info as yet. */
- new->ncoord = 0;
- new->coord = NULL;
-
-/* Transfer attributes from the encapsulated region to the parent region. */
- astRegOverlay( new, reg, 1 );
- if( astTestIdent( reg ) ) astSetIdent( new, astGetIdent( reg ) );
-
-/* If the base->current Mapping in the FrameSet within the encapsulated Region
- is a UnitMap, then the FrameSet does not need to be included in the
- Dump of the new Stc. Set the RegionFS attribute of the encapsulated
- Region to zero to flag this. Note, we do this after the previous class
- to astRegOverlay because we do not want this zero value for RegionFS to
- be copied into the new Stc object. */
- astSetRegionFS( reg, 0 );
-
-/* For each supplied AstroCoords, create a new KeyMap holding Regions
- representing the various elements of the AstroCoords, and store the
- new KeyMap in the Stc structure. */
- if( coords && ncoords > 0 ) {
- new->ncoord = ncoords;
- new->coord = astMalloc( sizeof( AstKeyMap *)*(size_t) ncoords );
- if( new->coord ) {
- for( i = 0; i < ncoords; i++ ) {
- new->coord[ i ] = MakeAstroCoordsKeyMap( reg, coords[ i ],
- name, status );
- }
- }
- }
-
-/* If an error occurred, clean up deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Free resources */
- reg = astAnnul( reg );
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstStc *astLoadStc_( void *mem, size_t size, AstStcVtab *vtab,
- const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadStc
-
-* Purpose:
-* Load a Stc.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "stc.h"
-* AstStc *astLoadStc( void *mem, size_t size, AstStcVtab *vtab,
-* const char *name, AstChannel *channel )
-
-* Class Membership:
-* Stc loader.
-
-* Description:
-* This function is provided to load a new Stc using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* Stc structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a Stc at the start of the memory
-* passed via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory into which the Stc is to be
-* loaded. This must be of sufficient size to accommodate the
-* Stc data (sizeof(Stc)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the Stc (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the Stc structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstStc) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new Stc. If this is NULL, a pointer to
-* the (static) virtual function table for the Stc class is
-* used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "Stc" is used instead.
-
-* Returned Value:
-* A pointer to the new Stc.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-
-/* Local Constants: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstFrame *f1; /* Base Frame in parent Region */
- AstObject *obj; /* Pointer to Object retrieved from KeyMap */
- AstRegion *creg; /* Pointer to encapsulated Region */
- AstStc *new; /* Pointer to the new Stc */
- char key[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- int ico; /* Loop counter for AstroCoords */
- int ikey; /* Index of KeyMap */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this Stc. In this case the
- Stc belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstStc );
- vtab = &class_vtab;
- name = "Stc";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitStcVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built Stc. */
- new = astLoadRegion( mem, size, (AstRegionVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "Stc" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* Encapsulated Region. */
-/* -------------------- */
- new->region = astReadObject( channel, "region", NULL );
-
-/* Get a pointer to the base Frame in the FrameSet encapsulated by the
- parent Region structure. */
- f1 = astGetFrame( ((AstRegion *) new)->frameset, AST__BASE );
-
-/* If the encapsulated Region has a dummy FrameSet rather than the correct
- FrameSet, the correct FrameSet will have copies of the base Frame of the
- new Stc as both its current and base Frames, connected by a UnitMap (this
- is equivalent to a FrameSet containing a single Frame). However if the new
- Stc being loaded has itself got a dummy FrameSet, then we do not do this
- since we do not yet know what the correct FrameSet is. In this case we
- wait until the parent Region invokes the astSetRegFS method on the new
- Stc. */
- if( !astRegDummyFS( new ) ) {
- creg = new->region;
- if( astRegDummyFS( creg ) ) astSetRegFS( creg, f1 );
- }
-
-/* AstroCoords info */
-/* ---------------- */
-/* The number of AstroCoords described in the new Stc. */
- new->ncoord = astReadInt( channel, "ncoord", 0 );
- if( new->ncoord < 0 ) new->ncoord = 0;
-
-/* Read back each KeyMap describing these AstroCoords. */
- new->coord = astMalloc( sizeof( AstKeyMap *) * (size_t) new->ncoord );
- for( ico = 1; ico <= new->ncoord; ico++ ) {
- (void) sprintf( key, "coord%d", ico );
- new->coord[ ico - 1 ] = astReadObject( channel, key, NULL );
-
-/* Ensure the Regions within the KeyMap do not have dummy FrameSets. */
- if( new->coord[ ico - 1 ] && !astRegDummyFS( new ) ) {
- for( ikey = 0; ikey < NREG; ikey++ ) {
- if( astMapGet0A( new->coord[ ico - 1 ], regkey[ ikey ], &obj ) ){
- creg = (AstRegion *) obj;
- if( astRegDummyFS( creg ) ) {
- astSetRegFS( creg, f1 );
- astMapPut0A( new->coord[ ico - 1 ], regkey[ ikey ], creg,
- regcom[ ikey ] );
- }
- creg = astAnnul( creg );
- }
- }
- }
- }
-
-/* Free resources */
- f1 = astAnnul( f1 );
-
-/* If an error occurred, clean up by deleting the new Stc. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new Stc pointer. */
- return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-const char *astGetRegionClass_( AstStc *this, int *status ){
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Stc,GetRegionClass))( this, status );
-}
-
-AstRegion *astGetStcRegion_( AstStc *this, int *status ){
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Stc,GetStcRegion))( this, status );
-}
-
-AstKeyMap *astGetStcCoord_( AstStc *this, int icoord, int *status ){
- if ( !astOK ) return NULL;
- return (**astMEMBER(this,Stc,GetStcCoord))( this, icoord, status );
-}
-
-int astGetStcNCoord_( AstStc *this, int *status ){
- if ( !astOK ) return 0;
- return (**astMEMBER(this,Stc,GetStcNCoord))( this, status );
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/stc.h b/ast-5.3-1/stc.h
deleted file mode 100644
index 5ccc877..0000000
--- a/ast-5.3-1/stc.h
+++ /dev/null
@@ -1,240 +0,0 @@
-#if !defined( STC_INCLUDED ) /* Include this file only once */
-#define STC_INCLUDED
-/*
-*+
-* Name:
-* stc.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the Stc class.
-
-* Invocation:
-* #include "stc.h"
-
-* Description:
-* This include file defines the interface to the Stc class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The Stc class is an implementation of the IVOA STC class which forms
-* part of the IVOA Space-Time Coordinate Metadata system. See:
-*
-* http://hea-www.harvard.edu/~arots/nvometa/STC.html
-
-* Inheritance:
-* The Stc class inherits from the Region class.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 23-NOV-2004 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "region.h" /* Coordinate regions (parent class) */
-#include "keymap.h" /* Lists of value/key pairs */
-
-#if defined(astCLASS) /* Protected */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros. */
-/* ======= */
-
-
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-#define AST__STCNAME "Name"
-#define AST__STCVALUE "Value"
-#define AST__STCERROR "Error"
-#define AST__STCRES "Resolution"
-#define AST__STCSIZE "Size"
-#define AST__STCPIXSZ "PixSize"
-
-/* Type Definitions. */
-/* ================= */
-/* Stc structure. */
-/* ------------------ */
-
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstStc {
-
-/* Attributes inherited from the parent class. */
- AstRegion parent_region; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- AstRegion *region; /* Encapsulated Region */
- AstKeyMap **coord; /* STC AstroCoords info */
- int ncoord; /* Number of AstroCoords in "coords" */
-} AstStc;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstStcVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstRegionVtab region_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- const char *(* GetRegionClass)( AstStc *, int * );
- AstRegion *(* GetStcRegion)( AstStc *, int * );
- AstKeyMap *(* GetStcCoord)( AstStc *, int, int * );
- int (* GetStcNCoord)( AstStc *, int * );
-
-} AstStcVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstStcGlobals {
- AstStcVtab Class_Vtab;
- int Class_Init;
-} AstStcGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitStcGlobals_( AstStcGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Stc) /* Check class membership */
-astPROTO_ISA(Stc) /* Test class membership */
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstStc *astInitStc_( void *, size_t, int, AstStcVtab *, const char *,
- AstRegion *, int, AstKeyMap **, int * );
-
-/* Vtab initialiser. */
-void astInitStcVtab_( AstStcVtab *, const char *, int * );
-
-/* Loader. */
-AstStc *astLoadStc_( void *, size_t, AstStcVtab *,
- const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-AstRegion *astGetStcRegion_( AstStc *, int * );
-AstKeyMap *astGetStcCoord_( AstStc *, int, int * );
-int astGetStcNCoord_( AstStc *, int * );
-
-# if defined(astCLASS) /* Protected */
-const char *astGetRegionClass_( AstStc *, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckStc(this) astINVOKE_CHECK(Stc,this,0)
-#define astVerifyStc(this) astINVOKE_CHECK(Stc,this,1)
-
-/* Test class membership. */
-#define astIsAStc(this) astINVOKE_ISA(Stc,this)
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitStc(mem,size,init,vtab,name,reg,ncoords,coords) \
-astINVOKE(O,astInitStc_(mem,size,init,vtab,name,reg,ncoords,coords,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitStcVtab(vtab,name) astINVOKE(V,astInitStcVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadStc(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadStc_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckStc to validate Stc pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#define astGetStcRegion(this) astINVOKE(O,astGetStcRegion_(astCheckStc(this),STATUS_PTR))
-#define astGetStcCoord(this,icoord) astINVOKE(O,astGetStcCoord_(astCheckStc(this),icoord,STATUS_PTR))
-#define astGetStcNCoord(this) astINVOKE(V,astGetStcNCoord_(astCheckStc(this),STATUS_PTR))
-#if defined(astCLASS) /* Protected */
-#define astGetRegionClass(this) astINVOKE(V,astGetRegionClass_(astCheckStc(this),STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/stccatalogentrylocation.c b/ast-5.3-1/stccatalogentrylocation.c
deleted file mode 100644
index 6b25b3c..0000000
--- a/ast-5.3-1/stccatalogentrylocation.c
+++ /dev/null
@@ -1,804 +0,0 @@
-/*
-*class++
-* Name:
-* StcCatalogEntryLocation
-
-* Purpose:
-* Correspond to the IVOA STCCatalogEntryLocation class.
-
-* Constructor Function:
-c astStcCatalogEntryLocation
-f AST_STCCATALOGENTRYLOCATION
-
-* Description:
-* The StcCatalogEntryLocation class is a sub-class of Stc used to describe
-* the coverage of the datasets contained in some VO resource.
-*
-* See http://hea-www.harvard.edu/~arots/nvometa/STC.html
-
-* Inheritance:
-* The StcCatalogEntryLocation class inherits from the Stc class.
-
-* Attributes:
-* The StcCatalogEntryLocation class does not define any new attributes beyond
-* those which are applicable to all Stcs.
-
-* Functions:
-c The StcCatalogEntryLocation class does not define any new functions beyond those
-f The StcCatalogEntryLocation class does not define any new routines beyond those
-* which are applicable to all Stcs.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 26-NOV-2004 (DSB):
-* Original version.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS StcCatalogEntryLocation
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "stc.h" /* Coordinate stcs (parent class) */
-#include "channel.h" /* I/O channels */
-#include "region.h" /* Regions within coordinate systems */
-#include "stccatalogentrylocation.h" /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(StcCatalogEntryLocation)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(StcCatalogEntryLocation,Class_Init)
-#define class_vtab astGLOBAL(StcCatalogEntryLocation,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstStcCatalogEntryLocationVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstStcCatalogEntryLocation *astStcCatalogEntryLocationId_( void *, int, AstKeyMap **, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static void Dump( AstObject *, AstChannel *, int * );
-
-/* Member functions. */
-/* ================= */
-
-void astInitStcCatalogEntryLocationVtab_( AstStcCatalogEntryLocationVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitStcCatalogEntryLocationVtab
-
-* Purpose:
-* Initialise a virtual function table for a StcCatalogEntryLocation.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "stccatalogentrylocation.h"
-* void astInitStcCatalogEntryLocationVtab( AstStcCatalogEntryLocationVtab *vtab, const char *name )
-
-* Class Membership:
-* StcCatalogEntryLocation vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the StcCatalogEntryLocation class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
- AstStcVtab *stc; /* Pointer to Stc component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitStcVtab( (AstStcVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAStcCatalogEntryLocation) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstStcVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- mapping = (AstMappingVtab *) vtab;
- stc = (AstStcVtab *) vtab;
-
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
-
-/* Declare the copy constructor, destructor and class dump
- functions. */
- astSetDump( vtab, Dump, "StcCatalogEntryLocation", "Resource coverage" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-/* None */
-
-/* Destructor. */
-/* ----------- */
-/* None */
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for StcCatalogEntryLocation objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the StcCatalogEntryLocation class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the StcCatalogEntryLocation whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstStcCatalogEntryLocation *this; /* Pointer to the StcCatalogEntryLocation structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the StcCatalogEntryLocation structure. */
- this = (AstStcCatalogEntryLocation *) this_object;
-
-/* Write out values representing the instance variables for the
- StcCatalogEntryLocation class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* There are no values to write, so return without further action. */
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAStcCatalogEntryLocation and astCheckStcCatalogEntryLocation functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(StcCatalogEntryLocation,Stc)
-astMAKE_CHECK(StcCatalogEntryLocation)
-
-
-AstStcCatalogEntryLocation *astStcCatalogEntryLocation_( void *region_void, int ncoords,
- AstKeyMap **coords, const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astStcCatalogEntryLocation
-f AST_STCCATALOGENTRYLOCATION
-
-* Purpose:
-* Create a StcCatalogEntryLocation.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "stccatalogentrylocation.h"
-c AstStcCatalogEntryLocation *astStcCatalogEntryLocation( AstRegion *region,
-c int ncoords, AstKeyMap *coords[], const char *options, ... )
-f RESULT = AST_STCCATALOGENTRYLOCATION( REGION, NCOORDS, COORDS, OPTIONS, STATUS )
-
-* Class Membership:
-* StcCatalogEntryLocation constructor.
-
-* Description:
-* This function creates a new StcCatalogEntryLocation and optionally initialises its
-* attributes.
-*
-* The StcCatalogEntryLocation class is a sub-class of Stc used to describe
-* the coverage of the datasets contained in some VO resource.
-*
-* See http://hea-www.harvard.edu/~arots/nvometa/STC.html
-
-* Parameters:
-c region
-f REGION = INTEGER (Given)
-* Pointer to the encapsulated Region.
-c ncoords
-f NCOORDS = INTEGER (Given)
-c The length of the "coords" array. Supply zero if "coords" is NULL.
-f The length of the COORDS array. Supply zero if COORDS should be
-f ignored.
-c coords
-f COORDS( NCOORDS ) = INTEGER (Given)
-c Pointer to an array holding "ncoords" AstKeyMap pointers (if "ncoords"
-f An array holding NCOORDS AstKeyMap pointers (if NCOORDS
-* is zero, the supplied value is ignored). Each supplied KeyMap
-* describes the contents of a single STC <AstroCoords> element, and
-* should have elements with keys given by constants AST__STCNAME,
-* AST__STCVALUE, AST__STCERROR, AST__STCRES, AST__STCSIZE,
-* AST__STCPIXSZ. Any of these elements may be omitted, but no other
-* elements should be included. If supplied, the AST__STCNAME element
-* should be a vector of character string pointers holding the "Name"
-* item for each axis in the coordinate system represented by
-c "region".
-f REGION.
-* Any other supplied elements should be scalar elements, each holding
-* a pointer to a Region describing the associated item of ancillary
-* information (error, resolution, size, pixel size or value). These
-* Regions should describe a volume within the coordinate system
-c represented by "region".
-f represented by REGION.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new StcCatalogEntryLocation. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new StcCatalogEntryLocation. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astStcCatalogEntryLocation()
-f AST_STCCATALOGENTRYLOCATION = INTEGER
-* A pointer to the new StcCatalogEntryLocation.
-
-* Notes:
-* - A deep copy is taken of the supplied Region. This means that
-* any subsequent changes made to the encapsulated Region using the
-* supplied pointer will have no effect on the Stc.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstRegion *region; /* Pointer to Region structure */
- AstStcCatalogEntryLocation *new; /* Pointer to new StcCatalogEntryLocation */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the Region structure provided. */
- region = astCheckRegion( region_void );
-
-/* Initialise the StcCatalogEntryLocation, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitStcCatalogEntryLocation( NULL, sizeof( AstStcCatalogEntryLocation ), !class_init,
- &class_vtab, "StcCatalogEntryLocation", region,
- ncoords, coords );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new StcCatalogEntryLocation's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new StcCatalogEntryLocation. */
- return new;
-}
-
-AstStcCatalogEntryLocation *astStcCatalogEntryLocationId_( void *region_void, int ncoords,
- AstKeyMap **coords, const char *options, ... ) {
-/*
-* Name:
-* astStcCatalogEntryLocationId_
-
-* Purpose:
-* Create a StcCatalogEntryLocation.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stccatalogentrylocation.h"
-* AstStcCatalogEntryLocation *astStcCatalogEntryLocationId( AstRegion *region,
-* int ncoords, AstKeyMap *coords[], const char *options, ..., int *status )
-
-* Class Membership:
-* StcCatalogEntryLocation constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astStcCatalogEntryLocation constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astStcCatalogEntryLocation_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astStcCatalogEntryLocation_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astStcCatalogEntryLocation_.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The ID value associated with the new StcCatalogEntryLocation.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstKeyMap **keymaps; /* Pointer to array of KeyMap pointers */
- AstRegion *region; /* Pointer to Region structure */
- AstStcCatalogEntryLocation *new;/* Pointer to new StcCatalogEntryLocation */
- int icoord; /* Keymap index */
- va_list args; /* Variable argument list */
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a Region pointer from the supplied ID and validate the
- pointer to ensure it identifies a valid Region. */
- region = astVerifyRegion( astMakePointer( region_void ) );
-
-/* Obtain pointer from the supplied KeyMap ID's and validate the
- pointers to ensure it identifies a valid KeyMap. */
- keymaps = astMalloc( sizeof( AstKeyMap * )*(size_t) ncoords );
- if( keymaps ) {
- for( icoord = 0; icoord < ncoords; icoord++ ) {
- keymaps[ icoord ] = astVerifyKeyMap( astMakePointer( coords[ icoord ] ) );
- }
- }
-
-/* Initialise the StcCatalogEntryLocation, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitStcCatalogEntryLocation( NULL, sizeof( AstStcCatalogEntryLocation ), !class_init,
- &class_vtab, "StcCatalogEntryLocation", region,
- ncoords, keymaps );
-
-/* Free resources. */
- keymaps = astFree( keymaps );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new StcCatalogEntryLocation's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new StcCatalogEntryLocation. */
- return astMakeId( new );
-}
-
-AstStcCatalogEntryLocation *astInitStcCatalogEntryLocation_( void *mem, size_t size,
- int init, AstStcCatalogEntryLocationVtab *vtab,
- const char *name, AstRegion *region,
- int ncoords, AstKeyMap **coords, int *status ) {
-/*
-*+
-* Name:
-* astInitStcCatalogEntryLocation
-
-* Purpose:
-* Initialise a StcCatalogEntryLocation.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "stccatalogentrylocation.h"
-* AstStcCatalogEntryLocation *astInitStcCatalogEntryLocation_( void *mem, size_t size,
-* int init, AstStcCatalogEntryLocationVtab *vtab,
-* const char *name, AstRegion *region,
-* int ncoords, AstKeyMap **coords )
-
-* Class Membership:
-* StcCatalogEntryLocation initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new StcCatalogEntryLocation object. It allocates memory (if necessary) to accommodate
-* the StcCatalogEntryLocation plus any additional data associated with the derived class.
-* It then initialises a StcCatalogEntryLocation structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a StcCatalogEntryLocation at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the StcCatalogEntryLocation is to be initialised.
-* This must be of sufficient size to accommodate the StcCatalogEntryLocation data
-* (sizeof(StcCatalogEntryLocation)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the StcCatalogEntryLocation (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the StcCatalogEntryLocation
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the StcCatalogEntryLocation's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new StcCatalogEntryLocation.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-* region
-* A pointer to the Region encapsulated by the StcCatalogEntryLocation.
-* ncoords
-* Number of KeyMap pointers supplied in "coords". Can be zero.
-* Ignored if "coords" is NULL.
-* coords
-* Pointer to an array of "ncoords" KeyMap pointers, or NULL if
-* "ncoords" is zero. Each KeyMap defines defines a single <AstroCoords>
-* element, and should have elements with keys given by constants
-* AST__STCNAME, AST__STCVALUE, AST__STCERROR, AST__STCRES, AST__STCSIZE,
-* AST__STCPIXSZ. These elements hold values for the corresponding
-* components of the STC AstroCoords element. Any of these elements may
-* be omitted, but no other elements should be included. All supplied
-* elements should be vector elements, with vector length less than or
-* equal to the number of axes in the supplied Region. The data type of
-* all elements should be "double", except for AST__STCNAME which should
-* be "character string". If no value is available for a given axis, then
-* AST__BAD (or NULL for the AST__STCNAME element) should be stored in
-* the vector at the index corresponding to the axis (trailing axes
-* can be omitted completely from the KeyMap).
-
-* Returned Value:
-* A pointer to the new StcCatalogEntryLocation.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstStcCatalogEntryLocation *new; /* Pointer to new StcCatalogEntryLocation */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitStcCatalogEntryLocationVtab( vtab, name );
-
-/* Initialise a Stc structure (the parent class) as the first component
- within the StcCatalogEntryLocation structure, allocating memory if necessary. */
- new = (AstStcCatalogEntryLocation *) astInitStc( mem, size, 0, (AstStcVtab *) vtab,
- name, region, ncoords, coords );
-
-/* If an error occurred, clean up by deleting the new StcCatalogEntryLocation. */
- if ( !astOK ) new = astDelete( new );
-
-/* Return a pointer to the new StcCatalogEntryLocation. */
- return new;
-}
-
-AstStcCatalogEntryLocation *astLoadStcCatalogEntryLocation_( void *mem, size_t size, AstStcCatalogEntryLocationVtab *vtab,
- const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadStcCatalogEntryLocation
-
-* Purpose:
-* Load a StcCatalogEntryLocation.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "stccatalogentrylocation.h"
-* AstStcCatalogEntryLocation *astLoadStcCatalogEntryLocation( void *mem, size_t size, AstStcCatalogEntryLocationVtab *vtab,
-* const char *name, AstChannel *channel )
-
-* Class Membership:
-* StcCatalogEntryLocation loader.
-
-* Description:
-* This function is provided to load a new StcCatalogEntryLocation using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* StcCatalogEntryLocation structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a StcCatalogEntryLocation at the start of the memory
-* passed via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory into which the StcCatalogEntryLocation is to be
-* loaded. This must be of sufficient size to accommodate the
-* StcCatalogEntryLocation data (sizeof(StcCatalogEntryLocation)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the StcCatalogEntryLocation (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the StcCatalogEntryLocation structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstStcCatalogEntryLocation) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new StcCatalogEntryLocation. If this is NULL, a pointer
-* to the (static) virtual function table for the StcCatalogEntryLocation class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "StcCatalogEntryLocation" is used instead.
-
-* Returned Value:
-* A pointer to the new StcCatalogEntryLocation.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstStcCatalogEntryLocation *new; /* Pointer to the new StcCatalogEntryLocation */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this StcCatalogEntryLocation. In this case the
- StcCatalogEntryLocation belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstStcCatalogEntryLocation );
- vtab = &class_vtab;
- name = "StcCatalogEntryLocation";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitStcCatalogEntryLocationVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built StcCatalogEntryLocation. */
- new = astLoadStc( mem, size, (AstStcVtab *) vtab, name, channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "StcCatalogEntryLocation" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* There are no values to read. */
-/* ---------------------------- */
-
-/* If an error occurred, clean up by deleting the new StcCatalogEntryLocation. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new StcCatalogEntryLocation pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-
-
-
-
-
diff --git a/ast-5.3-1/stccatalogentrylocation.h b/ast-5.3-1/stccatalogentrylocation.h
deleted file mode 100644
index 6a439d9..0000000
--- a/ast-5.3-1/stccatalogentrylocation.h
+++ /dev/null
@@ -1,223 +0,0 @@
-#if !defined( STCCATALOGENTRYLOCATION_INCLUDED ) /* Include this file only once */
-#define STCCATALOGENTRYLOCATION_INCLUDED
-/*
-*+
-* Name:
-* stccatalogentrylocation.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the StcCatalogEntryLocation class.
-
-* Invocation:
-* #include "stccatalogentrylocation.h"
-
-* Description:
-* This include file defines the interface to the StcCatalogEntryLocation class
-* and provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The StcCatalogEntryLocation class is a sub-class of Stc used to describe
-* the coverage of the datasets contained in some VO resource.
-*
-* See http://hea-www.harvard.edu/~arots/nvometa/STC.html
-
-* Inheritance:
-* The StcCatalogEntryLocation class inherits from the Stc class.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 26-NOV-2004 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "stc.h" /* Coordinate stcs (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* StcCatalogEntryLocation structure. */
-/* ----------------------------- */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstStcCatalogEntryLocation {
-
-/* Attributes inherited from the parent class. */
- AstStc stc; /* Parent class structure */
-
-} AstStcCatalogEntryLocation;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstStcCatalogEntryLocationVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstStcVtab stc_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-} AstStcCatalogEntryLocationVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstStcCatalogEntryLocationGlobals {
- AstStcCatalogEntryLocationVtab Class_Vtab;
- int Class_Init;
-} AstStcCatalogEntryLocationGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitStcCatalogEntryLocationGlobals_( AstStcCatalogEntryLocationGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(StcCatalogEntryLocation) /* Check class membership */
-astPROTO_ISA(StcCatalogEntryLocation) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstStcCatalogEntryLocation *astStcCatalogEntryLocation_( void *, int, AstKeyMap **, const char *, int *, ...);
-#else
-AstStcCatalogEntryLocation *astStcCatalogEntryLocationId_( void *, int, AstKeyMap **, const char *, ... )__attribute__((format(printf,4,5)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstStcCatalogEntryLocation *astInitStcCatalogEntryLocation_( void *, size_t, int, AstStcCatalogEntryLocationVtab *, const char *, AstRegion *, int, AstKeyMap **, int * );
-
-/* Vtab initialiser. */
-void astInitStcCatalogEntryLocationVtab_( AstStcCatalogEntryLocationVtab *, const char *, int * );
-
-/* Loader. */
-AstStcCatalogEntryLocation *astLoadStcCatalogEntryLocation_( void *, size_t, AstStcCatalogEntryLocationVtab *,
- const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckStcCatalogEntryLocation(this) astINVOKE_CHECK(StcCatalogEntryLocation,this,0)
-#define astVerifyStcCatalogEntryLocation(this) astINVOKE_CHECK(StcCatalogEntryLocation,this,1)
-
-/* Test class membership. */
-#define astIsAStcCatalogEntryLocation(this) astINVOKE_ISA(StcCatalogEntryLocation,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astStcCatalogEntryLocation astINVOKE(F,astStcCatalogEntryLocation_)
-#else
-#define astStcCatalogEntryLocation astINVOKE(F,astStcCatalogEntryLocationId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitStcCatalogEntryLocation(mem,size,init,vtab,name,region,ncoords,coords) \
-astINVOKE(O,astInitStcCatalogEntryLocation_(mem,size,init,vtab,name,region,ncoords,coords,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitStcCatalogEntryLocationVtab(vtab,name) astINVOKE(V,astInitStcCatalogEntryLocationVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadStcCatalogEntryLocation(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadStcCatalogEntryLocation_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckStcCatalogEntryLocation to validate StcCatalogEntryLocation pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/stcobsdatalocation.c b/ast-5.3-1/stcobsdatalocation.c
deleted file mode 100644
index f2fca2e..0000000
--- a/ast-5.3-1/stcobsdatalocation.c
+++ /dev/null
@@ -1,1051 +0,0 @@
-/*
-*class++
-* Name:
-* StcObsDataLocation
-
-* Purpose:
-* Correspond to the IVOA ObsDataLocation class.
-
-* Constructor Function:
-c astStcObsDataLocation
-f AST_STCOBSDATALOCATION
-
-* Description:
-* The StcObsDataLocation class is a sub-class of Stc used to describe
-* the coordinate space occupied by a particular observational dataset.
-*
-* See http://hea-www.harvard.edu/~arots/nvometa/STC.html
-*
-* An STC ObsDataLocation element specifies the extent of the
-* observation within a specified coordinate system, and also specifies
-* the observatory location within a second coordinate system.
-*
-* The AST StcObsDataLocation class inherits from Stc, and therefore
-* an StcObsDataLocation can be used directly as an Stc. When used
-* in this way, the StcObsDataLocation describes the location of the
-* observation (not the observatory).
-*
-* Eventually, this class will have a method for returning an Stc
-* describing the observatory location. However, AST currently does not
-* include any classes of Frame for describing terrestrial or solar
-* system positions. Therefore, the provision for returning observatory
-* location as an Stc is not yet available. However, for terrestrial
-* observations, the position of the observatory can still be recorded
-* using the ObsLon and ObsLat attributes of the Frame encapsulated
-* within the Stc representing the observation location (this assumes
-* the observatory is located at sea level).
-
-* Inheritance:
-* The StcObsDataLocation class inherits from the Stc class.
-
-* Attributes:
-* The StcObsDataLocation class does not define any new attributes beyond
-* those which are applicable to all Stcs.
-
-* Functions:
-c The StcObsDataLocation class does not define any new functions beyond those
-f The StcObsDataLocation class does not define any new routines beyond those
-* which are applicable to all Stcs.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 25-APR-2005 (DSB):
-* Original version.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS StcObsDataLocation
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "stc.h" /* Coordinate stcs (parent class) */
-#include "channel.h" /* I/O channels */
-#include "region.h" /* Regions within coordinate systems */
-#include "pointlist.h" /* Points within coordinate systems */
-#include "stcobsdatalocation.h" /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(StcObsDataLocation)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(StcObsDataLocation,Class_Init)
-#define class_vtab astGLOBAL(StcObsDataLocation,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstStcObsDataLocationVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstStcObsDataLocation *astStcObsDataLocationId_( void *, int, AstKeyMap **, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void StcSetObs( AstStcObsDataLocation *, AstPointList *, int * );
-
-static int GetObjSize( AstObject *, int * );
-/* Member functions. */
-/* ================= */
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcobsdatalocation.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* StcObsDataLocation member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied StcObsDataLocation,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the StcObsDataLocation.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstStcObsDataLocation *this; /* Pointer to StcObsDataLocation structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the StcObsDataLocation structure. */
- this = (AstStcObsDataLocation *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
- result += astGetObjSize( this->obs );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-
-void astInitStcObsDataLocationVtab_( AstStcObsDataLocationVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitStcObsDataLocationVtab
-
-* Purpose:
-* Initialise a virtual function table for a StcObsDataLocation.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "stcobsdatalocation.h"
-* void astInitStcObsDataLocationVtab( AstStcObsDataLocationVtab *vtab, const char *name )
-
-* Class Membership:
-* StcObsDataLocation vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the StcObsDataLocation class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstStcVtab *stc; /* Pointer to Stc component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitStcVtab( (AstStcVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAStcObsDataLocation) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstStcVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
- stc = (AstStcVtab *) vtab;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- vtab->StcSetObs = StcSetObs;
-
-/* Declare the copy constructor, destructor and class dump functions. */
- astSetDump( vtab, Dump, "StcObsDataLocation", "Observation coverage" );
- astSetCopy( vtab, Copy );
- astSetDelete( vtab, Delete );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static void StcSetObs( AstStcObsDataLocation *this, AstPointList *obs, int *status ) {
-/*
-*+
-* Name:
-* astStcSetObs
-
-* Purpose:
-* Set the observatory position within an StcObsDataLocation.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "region.h"
-* void astStcSetObs( AstStcObsDataLocation *this, AstPointList *obs )
-
-* Class Membership:
-* StcObsDataLocation virtual function
-
-* Description:
-* This function stores a clone of the supplied PointList pointer
-* within the supplied StcObsDataLocation, first annulling any
-* pointer already stored in the StcObsDataLocation.
-
-* Parameters:
-* this
-* Pointer to the StcObsDataLocation.
-* obs
-* Pointer to a PointList defining the observatory position. NULL
-* may be supplied in which case any existing observatory position
-* is removed.
-
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Free any existing obseravtory position PointList. */
- if( this->obs ) this->obs = astAnnul( this->obs );
-
-/* Store any supplied pointer. */
- if( obs ) this->obs = astClone( obs );
-
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for StcObsDataLocation objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for StcObsDataLocation
-* objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - This constructor makes a deep copy, including a copy of the component
-* Regions within the StcObsDataLocation.
-*/
-
-/* Local Variables: */
- AstStcObsDataLocation *in; /* Pointer to input StcObsDataLocation */
- AstStcObsDataLocation *out; /* Pointer to output StcObsDataLocation */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output StcObsDataLocations. */
- in = (AstStcObsDataLocation *) objin;
- out = (AstStcObsDataLocation *) objout;
-
-/* For safety, start by clearing any references to the input component
- Regions, etc, from the output StcObsDataLocation. */
- out->obs = NULL;
-
-/* Make a copy of the Observatory location */
- if( in->obs ) out->obs = astCopy( in->obs );
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for StcObsDataLocation objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for StcObsDataLocation objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstStcObsDataLocation *this; /* Pointer to StcObsDataLocation */
-
-/* Obtain a pointer to the StcObsDataLocation structure. */
- this = (AstStcObsDataLocation *) obj;
-
-/* Annul the pointer to the observatory location Region. */
- if( this->obs ) this->obs = astAnnul( this->obs );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for StcObsDataLocation objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the StcObsDataLocation class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the StcObsDataLocation whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstStcObsDataLocation *this; /* Pointer to the StcObsDataLocation structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the StcObsDataLocation structure. */
- this = (AstStcObsDataLocation *) this_object;
-
-/* Write out values representing the instance variables for the
- StcObsDataLocation class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* Observatory position. */
-/* --------------------- */
- astWriteObject( channel, "ObsLoc", 1, 1, this->obs, "Observatory position" );
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAStcObsDataLocation and astCheckStcObsDataLocation functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(StcObsDataLocation,Stc)
-astMAKE_CHECK(StcObsDataLocation)
-
-
-AstStcObsDataLocation *astStcObsDataLocation_( void *region_void, int ncoords,
- AstKeyMap **coords, const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astStcObsDataLocation
-f AST_STCOBSDATALOCATION
-
-* Purpose:
-* Create a StcObsDataLocation.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "stcobsdatalocation.h"
-c AstStcObsDataLocation *astStcObsDataLocation( AstRegion *region,
-c int ncoords, AstKeyMap *coords[], const char *options, ... )
-f RESULT = AST_STCOBSDATALOCATION( REGION, NCOORDS, COORDS, OPTIONS, STATUS )
-
-* Class Membership:
-* StcObsDataLocation constructor.
-
-* Description:
-* This function creates a new StcObsDataLocation and optionally initialises its
-* attributes.
-*
-* The StcObsDataLocation class is a sub-class of Stc used to describe
-* the coverage of the datasets contained in some VO resource.
-*
-* See http://hea-www.harvard.edu/~arots/nvometa/STC.html
-
-* Parameters:
-c region
-f REGION = INTEGER (Given)
-* Pointer to the encapsulated Region.
-c ncoords
-f NCOORDS = INTEGER (Given)
-c The length of the "coords" array. Supply zero if "coords" is NULL.
-f The length of the COORDS array. Supply zero if COORDS should be
-f ignored.
-c coords
-f COORDS( NCOORDS ) = INTEGER (Given)
-c Pointer to an array holding "ncoords" AstKeyMap pointers (if "ncoords"
-f An array holding NCOORDS AstKeyMap pointers (if NCOORDS
-* is zero, the supplied value is ignored). Each supplied KeyMap
-* describes the contents of a single STC <AstroCoords> element, and
-* should have elements with keys given by constants AST__STCNAME,
-* AST__STCVALUE, AST__STCERROR, AST__STCRES, AST__STCSIZE,
-* AST__STCPIXSZ. Any of these elements may be omitted, but no other
-* elements should be included. If supplied, the AST__STCNAME element
-* should be a vector of character string pointers holding the "Name"
-* item for each axis in the coordinate system represented by
-c "region".
-f REGION.
-* Any other supplied elements should be scalar elements, each holding
-* a pointer to a Region describing the associated item of ancillary
-* information (error, resolution, size, pixel size or value). These
-* Regions should describe a volume within the coordinate system
-c represented by "region".
-f represented by REGION.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new StcObsDataLocation. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new StcObsDataLocation. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astStcObsDataLocation()
-f AST_STCOBSDATALOCATION = INTEGER
-* A pointer to the new StcObsDataLocation.
-
-* Notes:
-* - A deep copy is taken of the supplied Region. This means that
-* any subsequent changes made to the encapsulated Region using the
-* supplied pointer will have no effect on the Stc.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstRegion *region; /* Pointer to Region structure */
- AstStcObsDataLocation *new; /* Pointer to new StcObsDataLocation */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the Region structure provided. */
- region = astCheckRegion( region_void );
-
-/* Initialise the StcObsDataLocation, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitStcObsDataLocation( NULL, sizeof( AstStcObsDataLocation ), !class_init,
- &class_vtab, "StcObsDataLocation", region,
- ncoords, coords );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new StcObsDataLocation's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new StcObsDataLocation. */
- return new;
-}
-
-AstStcObsDataLocation *astStcObsDataLocationId_( void *region_void, int ncoords,
- AstKeyMap **coords, const char *options, ... ) {
-/*
-* Name:
-* astStcObsDataLocationId_
-
-* Purpose:
-* Create a StcObsDataLocation.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcobsdatalocation.h"
-* AstStcObsDataLocation *astStcObsDataLocationId( AstRegion *region,
-* int ncoords, AstKeyMap *coords[], const char *options, ..., int *status )
-
-* Class Membership:
-* StcObsDataLocation constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astStcObsDataLocation constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astStcObsDataLocation_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astStcObsDataLocation_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astStcObsDataLocation_.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The ID value associated with the new StcObsDataLocation.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstKeyMap **keymaps; /* Pointer to array of KeyMap pointers */
- AstRegion *region; /* Pointer to Region structure */
- AstStcObsDataLocation *new; /* Pointer to new StcObsDataLocation */
- int icoord; /* Keymap index */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a Region pointer from the supplied ID and validate the
- pointer to ensure it identifies a valid Region. */
- region = astVerifyRegion( astMakePointer( region_void ) );
-
-/* Obtain pointer from the supplied KeyMap ID's and validate the
- pointers to ensure it identifies a valid KeyMap. */
- keymaps = astMalloc( sizeof( AstKeyMap * )*(size_t) ncoords );
- if( keymaps ) {
- for( icoord = 0; icoord < ncoords; icoord++ ) {
- keymaps[ icoord ] = astVerifyKeyMap( astMakePointer( coords[ icoord ] ) );
- }
- }
-
-/* Initialise the StcObsDataLocation, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitStcObsDataLocation( NULL, sizeof( AstStcObsDataLocation ), !class_init,
- &class_vtab, "StcObsDataLocation", region,
- ncoords, keymaps );
-
-/* Free resources. */
- keymaps = astFree( keymaps );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new StcObsDataLocation's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new StcObsDataLocation. */
- return astMakeId( new );
-}
-
-AstStcObsDataLocation *astInitStcObsDataLocation_( void *mem, size_t size,
- int init, AstStcObsDataLocationVtab *vtab,
- const char *name, AstRegion *region,
- int ncoords, AstKeyMap **coords, int *status ) {
-/*
-*+
-* Name:
-* astInitStcObsDataLocation
-
-* Purpose:
-* Initialise a StcObsDataLocation.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "stcobsdatalocation.h"
-* AstStcObsDataLocation *astInitStcObsDataLocation_( void *mem, size_t size,
-* int init, AstStcObsDataLocationVtab *vtab,
-* const char *name, AstRegion *region,
-* int ncoords, AstKeyMap **coords )
-
-* Class Membership:
-* StcObsDataLocation initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new StcObsDataLocation object. It allocates memory (if necessary) to accommodate
-* the StcObsDataLocation plus any additional data associated with the derived class.
-* It then initialises a StcObsDataLocation structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a StcObsDataLocation at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the StcObsDataLocation is to be initialised.
-* This must be of sufficient size to accommodate the StcObsDataLocation data
-* (sizeof(StcObsDataLocation)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the StcObsDataLocation (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the StcObsDataLocation
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the StcObsDataLocation's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new StcObsDataLocation.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-* region
-* A pointer to the Region encapsulated by the StcObsDataLocation.
-* ncoords
-* Number of KeyMap pointers supplied in "coords". Can be zero.
-* Ignored if "coords" is NULL.
-* coords
-* Pointer to an array of "ncoords" KeyMap pointers, or NULL if
-* "ncoords" is zero. Each KeyMap defines defines a single <AstroCoords>
-* element, and should have elements with keys given by constants
-* AST__STCNAME, AST__STCVALUE, AST__STCERROR, AST__STCRES, AST__STCSIZE,
-* AST__STCPIXSZ. These elements hold values for the corresponding
-* components of the STC AstroCoords element. Any of these elements may
-* be omitted, but no other elements should be included. All supplied
-* elements should be vector elements, with vector length less than or
-* equal to the number of axes in the supplied Region. The data type of
-* all elements should be "double", except for AST__STCNAME which should
-* be "character string". If no value is available for a given axis, then
-* AST__BAD (or NULL for the AST__STCNAME element) should be stored in
-* the vector at the index corresponding to the axis (trailing axes
-* can be omitted completely from the KeyMap).
-
-* Returned Value:
-* A pointer to the new StcObsDataLocation.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstStcObsDataLocation *new; /* Pointer to new StcObsDataLocation */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitStcObsDataLocationVtab( vtab, name );
-
-/* Initialise a Stc structure (the parent class) as the first component
- within the StcObsDataLocation structure, allocating memory if necessary. */
- new = (AstStcObsDataLocation *) astInitStc( mem, size, 0, (AstStcVtab *) vtab,
- name, region, ncoords, coords );
-
-/* If succesful, initialise properties of the StcObsDataLocation. */
- if( new ) {
- new->obs = NULL;
- }
-
-/* If an error occurred, clean up by deleting the new StcObsDataLocation. */
- if ( !astOK ) new = astDelete( new );
-
-/* Return a pointer to the new StcObsDataLocation. */
- return new;
-}
-
-AstStcObsDataLocation *astLoadStcObsDataLocation_( void *mem, size_t size, AstStcObsDataLocationVtab *vtab,
- const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadStcObsDataLocation
-
-* Purpose:
-* Load a StcObsDataLocation.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "stcobsdatalocation.h"
-* AstStcObsDataLocation *astLoadStcObsDataLocation( void *mem, size_t size, AstStcObsDataLocationVtab *vtab,
-* const char *name, AstChannel *channel )
-
-* Class Membership:
-* StcObsDataLocation loader.
-
-* Description:
-* This function is provided to load a new StcObsDataLocation using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* StcObsDataLocation structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a StcObsDataLocation at the start of the memory
-* passed via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory into which the StcObsDataLocation is to be
-* loaded. This must be of sufficient size to accommodate the
-* StcObsDataLocation data (sizeof(StcObsDataLocation)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the StcObsDataLocation (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the StcObsDataLocation structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstStcObsDataLocation) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new StcObsDataLocation. If this is NULL, a pointer
-* to the (static) virtual function table for the StcObsDataLocation class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "StcObsDataLocation" is used instead.
-
-* Returned Value:
-* A pointer to the new StcObsDataLocation.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstStcObsDataLocation *new; /* Pointer to the new StcObsDataLocation */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this StcObsDataLocation. In this case the
- StcObsDataLocation belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstStcObsDataLocation );
- vtab = &class_vtab;
- name = "StcObsDataLocation";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitStcObsDataLocationVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built StcObsDataLocation. */
- new = astLoadStc( mem, size, (AstStcVtab *) vtab, name, channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "StcObsDataLocation" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* Observatory position. */
-/* --------------------- */
- new->obs = astReadObject( channel, "obsloc", NULL );
-
-/* If an error occurred, clean up by deleting the new StcObsDataLocation. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new StcObsDataLocation pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-void astStcSetObs_( AstStcObsDataLocation *this, AstPointList *obs, int *status ){
- if ( !astOK ) return;
- (**astMEMBER(this,StcObsDataLocation,StcSetObs))( this, obs, status );
-}
-
-
-
-
diff --git a/ast-5.3-1/stcobsdatalocation.h b/ast-5.3-1/stcobsdatalocation.h
deleted file mode 100644
index 3a6ef38..0000000
--- a/ast-5.3-1/stcobsdatalocation.h
+++ /dev/null
@@ -1,236 +0,0 @@
-#if !defined( STCOBSDATALOCATION_INCLUDED ) /* Include this file only once */
-#define STCOBSDATALOCATION_INCLUDED
-/*
-*+
-* Name:
-* stcobsdatalocation.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the StcObsDataLocation class.
-
-* Invocation:
-* #include "stcobsdatalocation.h"
-
-* Description:
-* This include file defines the interface to the StcObsDataLocation class
-* and provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The StcObsDataLocation class is a sub-class of Stc used to describe
-* the an observation contained in some VO resource.
-*
-* See http://hea-www.harvard.edu/~arots/nvometa/STC.html
-
-* Inheritance:
-* The StcObsDataLocation class inherits from the Stc class.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 25-APR-2005 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "stc.h" /* Coordinate stcs (parent class) */
-#include "pointlist.h" /* Points within coordinate systems */
-
-#if defined(astCLASS) /* Protected */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* StcObsDataLocation structure. */
-/* ----------------------------- */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstStcObsDataLocation {
-
-/* Attributes inherited from the parent class. */
- AstStc stc; /* Parent class structure */
-
-/* Attributes specific to the StcObsDataLOcation class. */
- AstPointList *obs; /* Observatory position */
-
-} AstStcObsDataLocation;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstStcObsDataLocationVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstStcVtab stc_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- void (* StcSetObs)( AstStcObsDataLocation *, AstPointList *, int * );
-
-} AstStcObsDataLocationVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstStcObsDataLocationGlobals {
- AstStcObsDataLocationVtab Class_Vtab;
- int Class_Init;
-} AstStcObsDataLocationGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitStcObsDataLocationGlobals_( AstStcObsDataLocationGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(StcObsDataLocation) /* Check class membership */
-astPROTO_ISA(StcObsDataLocation) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstStcObsDataLocation *astStcObsDataLocation_( void *, int, AstKeyMap **, const char *, int *, ...);
-#else
-AstStcObsDataLocation *astStcObsDataLocationId_( void *, int, AstKeyMap **, const char *, ... )__attribute__((format(printf,4,5)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstStcObsDataLocation *astInitStcObsDataLocation_( void *, size_t, int, AstStcObsDataLocationVtab *, const char *, AstRegion *, int, AstKeyMap **, int * );
-
-/* Vtab initialiser. */
-void astInitStcObsDataLocationVtab_( AstStcObsDataLocationVtab *, const char *, int * );
-
-/* Loader. */
-AstStcObsDataLocation *astLoadStcObsDataLocation_( void *, size_t, AstStcObsDataLocationVtab *,
- const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-
-
-#if defined(astCLASS) /* Protected */
-void astStcSetObs_( AstStcObsDataLocation *, AstPointList *, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckStcObsDataLocation(this) astINVOKE_CHECK(StcObsDataLocation,this,0)
-#define astVerifyStcObsDataLocation(this) astINVOKE_CHECK(StcObsDataLocation,this,1)
-
-/* Test class membership. */
-#define astIsAStcObsDataLocation(this) astINVOKE_ISA(StcObsDataLocation,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astStcObsDataLocation astINVOKE(F,astStcObsDataLocation_)
-#else
-#define astStcObsDataLocation astINVOKE(F,astStcObsDataLocationId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitStcObsDataLocation(mem,size,init,vtab,name,region,ncoords,coords) \
-astINVOKE(O,astInitStcObsDataLocation_(mem,size,init,vtab,name,region,ncoords,coords,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitStcObsDataLocationVtab(vtab,name) astINVOKE(V,astInitStcObsDataLocationVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadStcObsDataLocation(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadStcObsDataLocation_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckStcObsDataLocation to validate StcObsDataLocation pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-#define astStcSetObs(this,obs) \
-astINVOKE(V,astStcSetObs_(astCheckStcObsDataLocation(this),obs?astCheckPointList(obs):NULL,STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/stcresourceprofile.c b/ast-5.3-1/stcresourceprofile.c
deleted file mode 100644
index 935204e..0000000
--- a/ast-5.3-1/stcresourceprofile.c
+++ /dev/null
@@ -1,807 +0,0 @@
-/*
-*class++
-* Name:
-* StcResourceProfile
-
-* Purpose:
-* Correspond to the IVOA STCResourceProfile class.
-
-* Constructor Function:
-c astStcResourceProfile
-f AST_STCRESOURCEPROFILE
-
-* Description:
-* The StcResourceProfile class is a sub-class of Stc used to describe
-* the coverage of the datasets contained in some VO resource.
-*
-* See http://hea-www.harvard.edu/~arots/nvometa/STC.html
-
-* Inheritance:
-* The StcResourceProfile class inherits from the Stc class.
-
-* Attributes:
-* The StcResourceProfile class does not define any new attributes beyond
-* those which are applicable to all Stcs.
-
-* Functions:
-c The StcResourceProfile class does not define any new functions beyond those
-f The StcResourceProfile class does not define any new routines beyond those
-* which are applicable to all Stcs.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 26-NOV-2004 (DSB):
-* Original version.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS StcResourceProfile
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "stc.h" /* Coordinate stcs (parent class) */
-#include "channel.h" /* I/O channels */
-#include "region.h" /* Regions within coordinate systems */
-#include "stcresourceprofile.h" /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(StcResourceProfile)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(StcResourceProfile,Class_Init)
-#define class_vtab astGLOBAL(StcResourceProfile,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstStcResourceProfileVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstStcResourceProfile *astStcResourceProfileId_( void *, int, AstKeyMap **, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static void Dump( AstObject *, AstChannel *, int * );
-
-/* Member functions. */
-/* ================= */
-
-void astInitStcResourceProfileVtab_( AstStcResourceProfileVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitStcResourceProfileVtab
-
-* Purpose:
-* Initialise a virtual function table for a StcResourceProfile.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "stcresourceprofile.h"
-* void astInitStcResourceProfileVtab( AstStcResourceProfileVtab *vtab, const char *name )
-
-* Class Membership:
-* StcResourceProfile vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the StcResourceProfile class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
- AstStcVtab *stc; /* Pointer to Stc component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitStcVtab( (AstStcVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAStcResourceProfile) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstStcVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- mapping = (AstMappingVtab *) vtab;
- stc = (AstStcVtab *) vtab;
-
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
-
-/* Declare the copy constructor, destructor and class dump
- functions. */
- astSetDump( vtab, Dump, "StcResourceProfile", "Resource coverage" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-/* None */
-
-/* Destructor. */
-/* ----------- */
-/* None */
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for StcResourceProfile objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the StcResourceProfile class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the StcResourceProfile whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstStcResourceProfile *this; /* Pointer to the StcResourceProfile structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the StcResourceProfile structure. */
- this = (AstStcResourceProfile *) this_object;
-
-/* Write out values representing the instance variables for the
- StcResourceProfile class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* There are no values to write, so return without further action. */
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAStcResourceProfile and astCheckStcResourceProfile functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(StcResourceProfile,Stc)
-astMAKE_CHECK(StcResourceProfile)
-
-
-AstStcResourceProfile *astStcResourceProfile_( void *region_void, int ncoords,
- AstKeyMap **coords, const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astStcResourceProfile
-f AST_STCRESOURCEPROFILE
-
-* Purpose:
-* Create a StcResourceProfile.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "stcresourceprofile.h"
-c AstStcResourceProfile *astStcResourceProfile( AstRegion *region,
-c int ncoords, AstKeyMap *coords[], const char *options, ... )
-f RESULT = AST_STCRESOURCEPROFILE( REGION, NCOORDS, COORDS, OPTIONS, STATUS )
-
-* Class Membership:
-* StcResourceProfile constructor.
-
-* Description:
-* This function creates a new StcResourceProfile and optionally initialises its
-* attributes.
-*
-* The StcResourceProfile class is a sub-class of Stc used to describe
-* the coverage of the datasets contained in some VO resource.
-*
-* See http://hea-www.harvard.edu/~arots/nvometa/STC.html
-
-* Parameters:
-c region
-f REGION = INTEGER (Given)
-* Pointer to the encapsulated Region.
-c ncoords
-f NCOORDS = INTEGER (Given)
-c The length of the "coords" array. Supply zero if "coords" is NULL.
-f The length of the COORDS array. Supply zero if COORDS should be
-f ignored.
-c coords
-f COORDS( NCOORDS ) = INTEGER (Given)
-c Pointer to an array holding "ncoords" AstKeyMap pointers (if "ncoords"
-f An array holding NCOORDS AstKeyMap pointers (if NCOORDS
-* is zero, the supplied value is ignored). Each supplied KeyMap
-* describes the contents of a single STC <AstroCoords> element, and
-* should have elements with keys given by constants AST__STCNAME,
-* AST__STCVALUE, AST__STCERROR, AST__STCRES, AST__STCSIZE,
-* AST__STCPIXSZ. Any of these elements may be omitted, but no other
-* elements should be included. If supplied, the AST__STCNAME element
-* should be a vector of character string pointers holding the "Name"
-* item for each axis in the coordinate system represented by
-c "region".
-f REGION.
-* Any other supplied elements should be scalar elements, each holding
-* a pointer to a Region describing the associated item of ancillary
-* information (error, resolution, size, pixel size or value). These
-* Regions should describe a volume within the coordinate system
-c represented by "region".
-f represented by REGION.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new StcResourceProfile. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new StcResourceProfile. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astStcResourceProfile()
-f AST_STCRESOURCEPROFILE = INTEGER
-* A pointer to the new StcResourceProfile.
-
-* Notes:
-* - A deep copy is taken of the supplied Region. This means that
-* any subsequent changes made to the encapsulated Region using the
-* supplied pointer will have no effect on the Stc.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-
-* Status Handling:
-* The protected interface to this function includes an extra
-* parameter at the end of the parameter list descirbed above. This
-* parameter is a pointer to the integer inherited status
-* variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstRegion *region; /* Pointer to Region structure */
- AstStcResourceProfile *new; /* Pointer to new StcResourceProfile */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the Region structure provided. */
- region = astCheckRegion( region_void );
-
-/* Initialise the StcResourceProfile, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitStcResourceProfile( NULL, sizeof( AstStcResourceProfile ), !class_init,
- &class_vtab, "StcResourceProfile", region,
- ncoords, coords );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new StcResourceProfile's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new StcResourceProfile. */
- return new;
-}
-
-AstStcResourceProfile *astStcResourceProfileId_( void *region_void, int ncoords,
- AstKeyMap **coords, const char *options, ... ) {
-/*
-* Name:
-* astStcResourceProfileId_
-
-* Purpose:
-* Create a StcResourceProfile.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcresourceprofile.h"
-* AstStcResourceProfile *astStcResourceProfileId( AstRegion *region,
-* int ncoords, AstKeyMap *coords[], const char *options, ... )
-
-* Class Membership:
-* StcResourceProfile constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astStcResourceProfile constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astStcResourceProfile_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astStcResourceProfile_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astStcResourceProfile_.
-
-* Returned Value:
-* The ID value associated with the new StcResourceProfile.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstKeyMap **keymaps; /* Pointer to array of KeyMap pointers */
- AstRegion *region; /* Pointer to Region structure */
- AstStcResourceProfile *new; /* Pointer to new StcResourceProfile */
- int icoord; /* Keymap index */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
- astGET_GLOBALS(NULL); /* Get a pointer to the thread specific global data structure. */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a Region pointer from the supplied ID and validate the
- pointer to ensure it identifies a valid Region. */
- region = astVerifyRegion( astMakePointer( region_void ) );
-
-/* Obtain pointer from the supplied KeyMap ID's and validate the
- pointers to ensure it identifies a valid KeyMap. */
- keymaps = astMalloc( sizeof( AstKeyMap * )*(size_t) ncoords );
- if( keymaps ) {
- for( icoord = 0; icoord < ncoords; icoord++ ) {
- keymaps[ icoord ] = astVerifyKeyMap( astMakePointer( coords[ icoord ] ) );
- }
- }
-
-/* Initialise the StcResourceProfile, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitStcResourceProfile( NULL, sizeof( AstStcResourceProfile ), !class_init,
- &class_vtab, "StcResourceProfile", region,
- ncoords, keymaps );
-
-/* Free resources. */
- keymaps = astFree( keymaps );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new StcResourceProfile's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new StcResourceProfile. */
- return astMakeId( new );
-}
-
-AstStcResourceProfile *astInitStcResourceProfile_( void *mem, size_t size,
- int init, AstStcResourceProfileVtab *vtab,
- const char *name, AstRegion *region,
- int ncoords, AstKeyMap **coords, int *status ) {
-/*
-*+
-* Name:
-* astInitStcResourceProfile
-
-* Purpose:
-* Initialise a StcResourceProfile.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "stcresourceprofile.h"
-* AstStcResourceProfile *astInitStcResourceProfile_( void *mem, size_t size,
-* int init, AstStcResourceProfileVtab *vtab,
-* const char *name, AstRegion *region,
-* int ncoords, AstKeyMap **coords )
-
-* Class Membership:
-* StcResourceProfile initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new StcResourceProfile object. It allocates memory (if necessary) to accommodate
-* the StcResourceProfile plus any additional data associated with the derived class.
-* It then initialises a StcResourceProfile structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a StcResourceProfile at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the StcResourceProfile is to be initialised.
-* This must be of sufficient size to accommodate the StcResourceProfile data
-* (sizeof(StcResourceProfile)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the StcResourceProfile (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the StcResourceProfile
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the StcResourceProfile's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new StcResourceProfile.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-* region
-* A pointer to the Region encapsulated by the StcResourceProfile.
-* ncoords
-* Number of KeyMap pointers supplied in "coords". Can be zero.
-* Ignored if "coords" is NULL.
-* coords
-* Pointer to an array of "ncoords" KeyMap pointers, or NULL if
-* "ncoords" is zero. Each KeyMap defines defines a single <AstroCoords>
-* element, and should have elements with keys given by constants
-* AST__STCNAME, AST__STCVALUE, AST__STCERROR, AST__STCRES, AST__STCSIZE,
-* AST__STCPIXSZ. These elements hold values for the corresponding
-* components of the STC AstroCoords element. Any of these elements may
-* be omitted, but no other elements should be included. All supplied
-* elements should be vector elements, with vector length less than or
-* equal to the number of axes in the supplied Region. The data type of
-* all elements should be "double", except for AST__STCNAME which should
-* be "character string". If no value is available for a given axis, then
-* AST__BAD (or NULL for the AST__STCNAME element) should be stored in
-* the vector at the index corresponding to the axis (trailing axes
-* can be omitted completely from the KeyMap).
-
-* Returned Value:
-* A pointer to the new StcResourceProfile.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstStcResourceProfile *new; /* Pointer to new StcResourceProfile */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitStcResourceProfileVtab( vtab, name );
-
-/* Initialise a Stc structure (the parent class) as the first component
- within the StcResourceProfile structure, allocating memory if necessary. */
- new = (AstStcResourceProfile *) astInitStc( mem, size, 0, (AstStcVtab *) vtab,
- name, region, ncoords, coords );
-
-/* If an error occurred, clean up by deleting the new StcResourceProfile. */
- if ( !astOK ) new = astDelete( new );
-
-/* Return a pointer to the new StcResourceProfile. */
- return new;
-}
-
-AstStcResourceProfile *astLoadStcResourceProfile_( void *mem, size_t size, AstStcResourceProfileVtab *vtab,
- const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadStcResourceProfile
-
-* Purpose:
-* Load a StcResourceProfile.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "stcresourceprofile.h"
-* AstStcResourceProfile *astLoadStcResourceProfile( void *mem, size_t size, AstStcResourceProfileVtab *vtab,
-* const char *name, AstChannel *channel )
-
-* Class Membership:
-* StcResourceProfile loader.
-
-* Description:
-* This function is provided to load a new StcResourceProfile using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* StcResourceProfile structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a StcResourceProfile at the start of the memory
-* passed via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory into which the StcResourceProfile is to be
-* loaded. This must be of sufficient size to accommodate the
-* StcResourceProfile data (sizeof(StcResourceProfile)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the StcResourceProfile (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the StcResourceProfile structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstStcResourceProfile) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new StcResourceProfile. If this is NULL, a pointer
-* to the (static) virtual function table for the StcResourceProfile class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "StcResourceProfile" is used instead.
-
-* Returned Value:
-* A pointer to the new StcResourceProfile.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstStcResourceProfile *new; /* Pointer to the new StcResourceProfile */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this StcResourceProfile. In this case the
- StcResourceProfile belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstStcResourceProfile );
- vtab = &class_vtab;
- name = "StcResourceProfile";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitStcResourceProfileVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built StcResourceProfile. */
- new = astLoadStc( mem, size, (AstStcVtab *) vtab, name, channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "StcResourceProfile" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* There are no values to read. */
-/* ---------------------------- */
-
-/* If an error occurred, clean up by deleting the new StcResourceProfile. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new StcResourceProfile pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-
-
-
-
-
diff --git a/ast-5.3-1/stcresourceprofile.h b/ast-5.3-1/stcresourceprofile.h
deleted file mode 100644
index 15c501e..0000000
--- a/ast-5.3-1/stcresourceprofile.h
+++ /dev/null
@@ -1,223 +0,0 @@
-#if !defined( STCRESOURCEPROFILE_INCLUDED ) /* Include this file only once */
-#define STCRESOURCEPROFILE_INCLUDED
-/*
-*+
-* Name:
-* stcresourceprofile.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the StcResourceProfile class.
-
-* Invocation:
-* #include "stcresourceprofile.h"
-
-* Description:
-* This include file defines the interface to the StcResourceProfile class
-* and provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The StcResourceProfile class is a sub-class of Stc used to describe
-* the coverage of the datasets contained in some VO resource.
-*
-* See http://hea-www.harvard.edu/~arots/nvometa/STC.html
-
-* Inheritance:
-* The StcResourceProfile class inherits from the Stc class.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 26-NOV-2004 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "stc.h" /* Coordinate stcs (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* StcResourceProfile structure. */
-/* ----------------------------- */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstStcResourceProfile {
-
-/* Attributes inherited from the parent class. */
- AstStc stc; /* Parent class structure */
-
-} AstStcResourceProfile;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstStcResourceProfileVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstStcVtab stc_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-} AstStcResourceProfileVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstStcResourceProfileGlobals {
- AstStcResourceProfileVtab Class_Vtab;
- int Class_Init;
-} AstStcResourceProfileGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitStcResourceProfileGlobals_( AstStcResourceProfileGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(StcResourceProfile) /* Check class membership */
-astPROTO_ISA(StcResourceProfile) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstStcResourceProfile *astStcResourceProfile_( void *, int, AstKeyMap **, const char *, int *, ...);
-#else
-AstStcResourceProfile *astStcResourceProfileId_( void *, int, AstKeyMap **, const char *, ... )__attribute__((format(printf,4,5)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstStcResourceProfile *astInitStcResourceProfile_( void *, size_t, int, AstStcResourceProfileVtab *, const char *, AstRegion *, int, AstKeyMap **, int * );
-
-/* Vtab initialiser. */
-void astInitStcResourceProfileVtab_( AstStcResourceProfileVtab *, const char *, int * );
-
-/* Loader. */
-AstStcResourceProfile *astLoadStcResourceProfile_( void *, size_t, AstStcResourceProfileVtab *,
- const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckStcResourceProfile(this) astINVOKE_CHECK(StcResourceProfile,this,0)
-#define astVerifyStcResourceProfile(this) astINVOKE_CHECK(StcResourceProfile,this,1)
-
-/* Test class membership. */
-#define astIsAStcResourceProfile(this) astINVOKE_ISA(StcResourceProfile,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astStcResourceProfile astINVOKE(F,astStcResourceProfile_)
-#else
-#define astStcResourceProfile astINVOKE(F,astStcResourceProfileId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitStcResourceProfile(mem,size,init,vtab,name,region,ncoords,coords) \
-astINVOKE(O,astInitStcResourceProfile_(mem,size,init,vtab,name,region,ncoords,coords,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitStcResourceProfileVtab(vtab,name) astINVOKE(V,astInitStcResourceProfileVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadStcResourceProfile(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadStcResourceProfile_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckStcResourceProfile to validate StcResourceProfile pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/stcschan.c b/ast-5.3-1/stcschan.c
deleted file mode 100644
index 8d4e651..0000000
--- a/ast-5.3-1/stcschan.c
+++ /dev/null
@@ -1,8731 +0,0 @@
-/*
-*class++
-* Name:
-* StcsChan
-
-* Purpose:
-* I/O Channel using STC-S to represent Objects.
-
-* Constructor Function:
-c astStcsChan
-f AST_STCSCHAN
-
-* Description:
-* A StcsChan is a specialised form of Channel which supports STC-S
-* I/O operations. Writing an Object to an StcsChan (using
-c astWrite) will, if the Object is suitable, generate an
-f AST_WRITE) will, if the Object is suitable, generate an
-* STC-S description of that Object, and reading from an StcsChan will
-* create a new Object from its STC-S description.
-*
-* When an STC-S description is read using
-c astRead,
-f AST_READ,
-* the returned AST Object may be 1) a PointList describing the STC
-* AstroCoords (i.e. a single point of interest within the coordinate frame
-* described by the STC-S description), or 2) a Region describing the STC
-* AstrCoordsArea (i.e. an area or volume of interest within the coordinate
-* frame described by the STC-S description), or 3) a KeyMap
-* containing the uninterpreted property values read form the STC-S
-* description, or 4) a KeyMap containing any combination of the first
-* 3 options. The attributes StcsArea, StcsCoords and StcsProps
-* control which of the above is returned by
-c astRead.
-f AST_READ.
-*
-* When an STC-S description is created from an AST Object using
-c astWrite,
-f AST_WRITE,
-* the AST Object must be either a Region or a KeyMap. If it is a
-* Region, it is assumed to define the AstroCoordsArea or (if the
-* Region is a single point) the AstroCoords to write to the STC-S
-* description. If the Object is a KeyMap, it may contain an entry
-* with the key "AREA", holding a Region to be used to define the
-* AstroCoordsArea. It may also contain an entry with the key "COORDS",
-* holding a Region (a PointList) to be used to create the
-* AstroCoords. It may also contain an entry with key "PROPS", holding
-* a KeyMap that contains uninterpreted property values to be used as
-* defaults for any STC-S properties that are not determined by the
-* other supplied Regions. In addition, a KeyMap supplied to
-c astWrite
-f AST_WRITE
-* may itself hold the default STC-S properties (rather than defaults
-* being held in a secondary KeyMap, stored as the "PROPS" entry in the
-* supplied KeyMap).
-*
-* The
-c astRead and astWrite
-f AST_READ and AST_WRITE
-* functions work together so that any Object returned by
-c astRead can immediately be re-written using astWrite.
-f AST_READ can immediately be re-written using AST_WRITE.
-*
-* Normally, when you use an StcsChan, you should provide "source"
-c and "sink" functions which connect it to an external data store
-c by reading and writing the resulting text. These functions
-f and "sink" routines which connect it to an external data store
-f by reading and writing the resulting text. These routines
-* should perform any conversions needed between external character
-c encodings and the internal ASCII encoding. If no such functions
-f encodings and the internal ASCII encoding. If no such routines
-* are supplied, a Channel will read from standard input and write
-* to standard output.
-
-* Support for STC-S is currently based on the IVOA document "STC-S:
-* Space-Time Coordinate (STC) Metadata Linear String Implementation",
-* version 1.30 (dated 5th December 2007), available at
-* http://www.ivoa.net/Documents/latest/STC-S.html. Note, this
-* document is a recommednation only and does not constitute an accepted
-* IVOA standard.
-*
-* The full text of version 1.30 is supported by the StcsChan class,
-* with the following exceptions and provisos:
-*
-* - When reading an STC-S phrase, case is ignored except when reading
-* units strings.
-* - There is no support for multiple intervals specified within a
-* TimeInterval, PositionInterval, SpectralInterval or RedshiftInterval.
-* - If the ET timescale is specified, TT is used instead.
-* - If the TEB timescale is specified, TDB is used instead.
-* - The LOCAL timescale is not supported.
-* - The AST TimeFrame and SkyFrame classes do not currently allow a
-* reference position to be specified. Consequently, any <refpos>
-* specified within the Time or Space sub-phrase of an STC-S document
-* is ignored.
-* - The Convex identifier for the space sub-phrase is not supported.
-* - The GEO_C and GEO_D space frames are not supported.
-* - The UNITSPHERE and SPHER3 space flavours are not supported.
-* - If any Error values are supplied in a space sub-phrase, then the
-* number of values supplied should equal the number of spatial axes,
-* and the values are assumed to specify an error box (i.e. error
-* circles, ellipses, etc, are not supported).
-* - The spectral and redshift sub-phrases do not support the
-* following <refpos> values: LOCAL_GROUP_CENTER, UNKNOWNRefPos,
-* EMBARYCENTER, MOON, MERCURY, VENUS, MARS, JUPITER, SATURN, URANUS,
-* NEPTUNE, PLUTO.
-* - Error values are supported but error ranges are not.
-* - Resolution, PixSize and Size values are ignored.
-* - Space velocity sub-phrases are ignored.
-
-* Inheritance:
-* The StcsChan class inherits from the Channel class.
-
-* Attributes:
-* In addition to those attributes common to all Channels, every
-* StcsChan also has the following attributes:
-*
-* - StcsArea: Return the CoordinateArea component after reading an STC-S?
-* - StcsCoords: Return the Coordinates component after reading an STC-S?
-* - StcsIndent: Controls output of indentation and line feeds
-* - StcsLength: Controls output buffer length
-* - StcsProps: Return the STC-S properties after reading an STC-S?
-
-* Functions:
-c The StcsChan class does not define any new functions beyond those
-f The StcsChan class does not define any new routines beyond those
-* which are applicable to all Channels.
-
-* Copyright:
-* Copyright (C) 2009 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David Berry (Starlink)
-
-* History:
-* 18-DEC-2008 (DSB):
-* Original version.
-* 22-MAY-2008 (DSB):
-* Retain default Equinox values in SkyFrame when reading an STC-S.
-* 30-OCT-2009 (DSB):
-* Make case insensitive (except for units strings).
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS StcsChan
-
-/* Values identifying particular forms of CoordArea */
-#define NULL_ID 1
-#define TIME_INTERVAL_ID 2
-#define START_TIME_ID 3
-#define STOP_TIME_ID 4
-#define POSITION_INTERVAL_ID 5
-#define ALLSKY_ID 6
-#define CIRCLE_ID 7
-#define ELLIPSE_ID 8
-#define BOX_ID 9
-#define POLYGON_ID 10
-#define CONVEX_ID 11
-#define POSITION_ID 12
-#define TIME_ID 13
-#define SPECTRAL_INTERVAL_ID 14
-#define SPECTRAL_ID 15
-#define REDSHIFT_INTERVAL_ID 16
-#define REDSHIFT_ID 17
-#define VELOCITY_INTERVAL_ID 18
-#define UNION_ID 19
-#define INTERSECTION_ID 20
-#define DIFFERENCE_ID 21
-#define NOT_ID 22
-#define VELOCITY_ID 23
-
-/* The number of words used to form an extract from an STC-S description
- for use in an error message. */
-#define NEWORD 10
-
-/* Max length of string returned by GetAttrib */
-#define GETATTRIB_BUFF_LEN 50
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "frame.h" /* Generic cartesian coordinate systems */
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "channel.h" /* Interface for parent class */
-#include "stcschan.h" /* Interface definition for this class */
-#include "loader.h" /* Interface to the global loader */
-#include "skyframe.h" /* Celestial coordinate systems */
-#include "timeframe.h" /* Time coordinate systems */
-#include "specframe.h" /* Spectral coordinate systems */
-#include "wcsmap.h" /* PI-related constants */
-#include "region.h" /* Abstract regions */
-#include "interval.h" /* Axis intervals */
-#include "unitmap.h" /* Unit mappings */
-#include "nullregion.h" /* Boundless regions */
-#include "cmpregion.h" /* Compound regions */
-#include "box.h" /* Box regions */
-#include "prism.h" /* Prism regions */
-#include "circle.h" /* Circle regions */
-#include "ellipse.h" /* Ellipse regions */
-#include "polygon.h" /* Polygon regions */
-#include "pointlist.h" /* Lists of points */
-#include "keymap.h" /* KeyMap interface */
-
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <float.h>
-#include <limits.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Module Types. */
-/* ============= */
-typedef struct WordContext {
- char *line;
- char *wnext;
- char *e;
- char f;
- int done;
- char *words[ NEWORD ];
- int next;
- int close;
- int open;
-} WordContext;
-
-/* Module Variables. */
-/* ================= */
-
-/* Pointers to parent class methods which are extended by this class. */
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->GetAttrib_Buff[ 0 ] = 0; \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(StcsChan)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define getattrib_buff astGLOBAL(StcsChan,GetAttrib_Buff)
-#define class_init astGLOBAL(StcsChan,Class_Init)
-#define class_vtab astGLOBAL(StcsChan,Class_Vtab)
-
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstStcsChanVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-/* Buffer returned by GetAttrib. */
-static char getattrib_buff[ GETATTRIB_BUFF_LEN + 1 ];
-
-#endif
-
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstStcsChan *astStcsChanForId_( const char *(*)( void ),
- char *(*)( const char *(*)( void ), int * ),
- void (*)( const char * ),
- void (*)( void (*)( const char * ), const char *, int * ),
- const char *, ... );
-AstStcsChan *astStcsChanId_( const char *(* source)( void ),
- void (* sink)( const char * ),
- const char *options, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstKeyMap *ReadProps( AstStcsChan *, int * );
-static AstObject *Read( AstChannel *, int * );
-static AstPointList *SinglePointList( AstFrame *, double *, AstRegion *, int *);
-static AstRegion *MakeSpaceRegion( AstKeyMap *, AstFrame *, double, int * );
-static char *AddItem( AstStcsChan *, AstKeyMap *, const char *, const char *, char *, int *, int *, int, int * );
-static char *ContextFragment( WordContext *, char **, int * );
-static char *PutRegionProps( AstStcsChan *, AstKeyMap *, const char *, int, char *, int *, int *, int, int * );
-static char *SourceWrap( const char *(*)( void ), int * );
-static const char *GetNextWord( AstStcsChan *, WordContext *, int * );
-static const char *ReadSpaceArgs( AstStcsChan *, const char *, int, int, WordContext *, AstKeyMap *, int * );
-static double *BoxCorners( AstFrame *, const double[2], const double[2], int * );
-static int GetRegionProps( AstStcsChan *, AstRegion *, AstKeyMap *, int, int, double, int, int * );
-static int SpaceId( const char *, int * );
-static int Write( AstChannel *, AstObject *, int * );
-static int WriteRegion( AstStcsChan *, AstRegion *, AstKeyMap *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void FreeContext( WordContext *, int * );
-static void GetFmt( const char *, AstKeyMap *, int, int, char *, int * );
-static void MapPut0C( AstKeyMap *, const char *, const char *, const char *, int, int * );
-static void MapPut0D( AstKeyMap *, const char *, double, double, int, int * );
-static void SetUnc( AstRegion *, AstRegion *, AstFrame *, int, double, double *, int, int * );
-static void SinkWrap( void (*)( const char * ), const char *, int * );
-static void WriteProps( AstStcsChan *, AstKeyMap *, int * );
-
-static int GetStcsArea( AstStcsChan *, int * );
-static int TestStcsArea( AstStcsChan *, int * );
-static void ClearStcsArea( AstStcsChan *, int * );
-static void SetStcsArea( AstStcsChan *, int, int * );
-
-static int GetStcsCoords( AstStcsChan *, int * );
-static int TestStcsCoords( AstStcsChan *, int * );
-static void ClearStcsCoords( AstStcsChan *, int * );
-static void SetStcsCoords( AstStcsChan *, int, int * );
-
-static int GetStcsProps( AstStcsChan *, int * );
-static int TestStcsProps( AstStcsChan *, int * );
-static void ClearStcsProps( AstStcsChan *, int * );
-static void SetStcsProps( AstStcsChan *, int, int * );
-
-static void ClearAttrib( AstObject *, const char *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-
-static int TestStcsLength( AstStcsChan *, int * );
-static void ClearStcsLength( AstStcsChan *, int * );
-static void SetStcsLength( AstStcsChan *, int, int * );
-static int GetStcsLength( AstStcsChan *, int * );
-
-static int TestStcsIndent( AstStcsChan *, int * );
-static void ClearStcsIndent( AstStcsChan *, int * );
-static void SetStcsIndent( AstStcsChan *, int, int * );
-static int GetStcsIndent( AstStcsChan *, int * );
-
-
-/* Member functions. */
-/* ================= */
-
-static char *AddItem( AstStcsChan *this, AstKeyMap *km, const char *key,
- const char *prefix, char *line, int *nc, int *crem,
- int linelen, int *status ){
-/*
-* Name:
-* AddItem
-
-* Purpose:
-* Add an STC-S property item to a buffer.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* char *AddItem( AstStcsChan *this, AstKeyMap *km, const char *key,
-* const char *prefix, char *line, int *nc, int *crem,
-* int linelen, int *status )
-
-* Class Membership:
-* StcsChan member function
-
-* Description:
-* This function creates a new Box with dimensions specified by the
-* values in the "error" array, centred on a representative position
-* within one of the supplied Regions, and then stores the Box as the
-* uncertainty Region within both the supplied Regions.
-
-* Parameters:
-* this
-* The StcsChan.
-* km
-* Pointer to a KeyMap containing the STC-S properties.
-* key
-* The key name associated with the property to be checked.
-* prefix
-* if not NULL, this is a string that is to be written out before
-* the property value. It should usually include a trailing space.
-* line
-* Pointer to the buffer to recieve the prefix and property value.
-* nc
-* Pointer to an int in which to store the number of characters in
-* the buffer. Updated on exit.
-* crem
-* Pointer to an int in which to store the maximum number of
-* characters before a new line. Ignored if linelen is zero. Updated
-* on exit.
-* linelen
-* The maximum number of character per line, or zero if all text is
-* to be included in a single line.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the buffer. This will usually be "line", but may be
-* different to "line" if it was necessary to expand the memory to make
-* room for the new property.
-
-*/
-
-/* Local Variables: */
- char *result; /* Returned pointer */
- const char *word; /* Property value */
- int len; /* Length of new text */
-
-/* Initialise */
- result = line;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If the KeyMap contains the required property... */
- if( astMapGet0C( km, key, &word ) ) {
-
-/* If required, get the number of characters to be added to the buffer. */
- if( linelen ) {
- len = ( prefix ? strlen( prefix ) : 0 ) + strlen( word );
-
-/* If there is insufficient room left, write out the text through the
- Channel sink function, and start a new line with three spaces. Then
- reset the number of character remaining in the line. */
- if( len > *crem && len < linelen ) {
- astPutNextText( this, result );
- *nc = 0;
- result = astAppendString( result, nc, " " );
- *crem = linelen - 3;
- }
-
-/* Reduce crem to account for the text that is about to be added to the
- line. */
- *crem -= len;
- }
-
-/* Add any supplied prefix to the returned buffer. */
- if( prefix ) result = astAppendString( result, nc, prefix );
-
-/* Add the property value to the returned buffer. */
- result = astAppendString( result, nc, word );
-
-/* Add a traling space to the returned buffer. */
- if( !linelen || len < *crem ) {
- result = astAppendString( result, nc, " " );
- }
- }
-
-/* Return the buffer pointer. */
- return result;
-}
-
-static double *BoxCorners( AstFrame *frm, const double centre[2],
- const double bsize[2], int *status ) {
-/*
-* Name:
-* BoxCorners
-
-* Purpose:
-* Determine the positions of the corners of an STC Box.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* double *BoxCorners( AstFrame *frm, const double centre[2],
-* const double bsize[2], int *status )
-
-* Class Membership:
-* StcsChan member function
-
-* Description:
-* This function returns a pointer to a dynamically allocated array
-* holding the positions of the corners of the STC Box defined by the
-* supplied "centre" and "bsize" arrays.
-
-* Parameters:
-* frm
-* Pointer to the Frame in which the Box is defined. Must be 2-D.
-* centre
-* Two element array holding the Frame co-ordinates at the centre
-* of the Box.
-* bsize
-* Two element array holding the full width and height of the Box.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated array holding the axis values
-* at the four corners, in a form suitable for passing to the
-* astPolygon constructor function. NULL is returned if an error has
-* already occurred, of if this function fails for any reason.
-*/
-
-/* Local Variables: */
- double *result; /* Returned pointer. */
- double bh1[ 2 ]; /* A first point on the bottom horizontal edge */
- double bh2[ 2 ]; /* A second point on the bottom horizontal edge */
- double blc[ 2 ]; /* Position of bottom left corner */
- double brc[ 2 ]; /* Position of bottom right corner */
- double lv1[ 2 ]; /* A first point on the left vertical edge */
- double lv2[ 2 ]; /* A second point on the left vertical edge */
- double pa; /* Position angle of great circle/straight line */
- double rv1[ 2 ]; /* A first point on the right vertical edge */
- double rv2[ 2 ]; /* A second point on the right vertical edge */
- double th1[ 2 ]; /* A first point on the top horizontal edge */
- double th2[ 2 ]; /* A second point on the top horizontal edge */
- double tlc[ 2 ]; /* Position of top left corner */
- double trc[ 2 ]; /* Position of top right corner */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Check the Frame is 2-dimensional. */
- if( astGetNaxes( frm ) != 2 ) {
- astError( AST__BADIN, "astRead(StcsChan): Supplied space frame has "
- "%d axes.", status, astGetNaxes( frm ) );
- astError( AST__BADIN, "astRead(StcsChan): Can only use STC Box regions "
- "with 2-dimensional space frames.", status );
- }
-
-/* Offset away from the centre by half the Box width along a great circle
- initially parallel to the positive first frame axis (i.e. position
- angle +pi/2). The end position goes in "rv1" and the position angle of
- the great circle (or straight line) at that point is returned as the
- function value. NOTE, the use of the words "left" and "right" below is
- vague because it depends on whether we are using a SkyFrame (which has
- a reversed first axis) or a basic Frame. In general, the choice of "left"
- and "right" below is appropriate for a basic Frame. */
- pa = astOffset2( frm, centre, AST__DPIBY2, bsize[ 0 ]/2, rv1 );
-
-/* Turn by 90 degrees and offset away by half the box height. This is done
- so that we have a second point (rv2) to define the great circle (or
- straight line) that forms the first vertical edge of the Box (i.e. the
- great circle or straight line through rv1 and rv2). Note, for spherical
- Frames (i.e. SkyFrames) "rv2" is not necessarily a corner of the box. */
- (void) astOffset2( frm, rv1, pa + AST__DPIBY2, bsize[ 1 ]/2, rv2 );
-
-/* In the same way, get two points on the second vertical Box edge. */
- pa = astOffset2( frm, centre, -AST__DPIBY2, bsize[ 0 ]/2, lv1 );
- (void) astOffset2( frm, lv1, pa + AST__DPIBY2, bsize[ 1 ]/2, lv2 );
-
-/* In the same way, get two points on the top horizontal Box edge. */
- pa = astOffset2( frm, centre, 0.0, bsize[ 1 ]/2, th1 );
- (void) astOffset2( frm, th1, pa + AST__DPIBY2, bsize[ 0 ]/2, th2 );
-
-/* In the same way, get two points on the bottom horizontal Box edge. */
- pa = astOffset2( frm, centre, AST__DPI, bsize[ 1 ]/2, bh1 );
- (void) astOffset2( frm, bh1, pa + AST__DPIBY2, bsize[ 0 ]/2, bh2 );
-
-/* The first corner of the Box is at the intersection of the first
- vertical and top horizontal edges. */
- astIntersect( frm, lv1, lv2, th1, th2, tlc );
-
-/* The top right corner of the Box is at the intersection of the right
- vertical and top horizontal edges. */
- astIntersect( frm, rv1, rv2, th1, th2, trc );
-
-/* The bottom left corner of the Box is at the intersection of the left
- vertical and bottom horizontal edges. */
- astIntersect( frm, lv1, lv2, bh1, bh2, blc );
-
-/* The bottom right corner of the Box is at the intersection of the right
- vertical and bottom horizontal edges. */
- astIntersect( frm, rv1, rv2, bh1, bh2, brc );
-
-/* Gather the corners together into an array suitable for use with
- astPolygon. Make sure the vertices are traversed in an ant-clockwise
- sense whether in a SkyFrame or a basic Frame. */
- result = astMalloc( 8*sizeof( *result ) );
- if( result ) {
- if( astIsASkyFrame( frm ) ) {
- result[ 0 ] = tlc[ 0 ];
- result[ 1 ] = trc[ 0 ];
- result[ 2 ] = brc[ 0 ];
- result[ 3 ] = blc[ 0 ];
- result[ 4 ] = tlc[ 1 ];
- result[ 5 ] = trc[ 1 ];
- result[ 6 ] = brc[ 1 ];
- result[ 7 ] = blc[ 1 ];
- } else {
- result[ 3 ] = tlc[ 0 ];
- result[ 2 ] = trc[ 0 ];
- result[ 1 ] = brc[ 0 ];
- result[ 0 ] = blc[ 0 ];
- result[ 7 ] = tlc[ 1 ];
- result[ 6 ] = trc[ 1 ];
- result[ 5 ] = brc[ 1 ];
- result[ 4 ] = blc[ 1 ];
- }
-
- }
-
-/* Return the pointer. */
- return result;
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a StcsChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* StcsChan member function (over-rides the astClearAttrib protected
-* method inherited from the Channel class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* StcsChan, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the StcsChan.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstStcsChan *this; /* Pointer to the StcsChan structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the StcsChan structure. */
- this = (AstStcsChan *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
- if ( !strcmp( attrib, "stcsarea" ) ) {
- astClearStcsArea( this );
-
- } else if ( !strcmp( attrib, "stcscoords" ) ) {
- astClearStcsCoords( this );
-
- } else if ( !strcmp( attrib, "stcsprop" ) ) {
- astClearStcsProps( this );
-
- } else if ( !strcmp( attrib, "stcsindent" ) ) {
- astClearStcsIndent( this );
-
- } else if ( !strcmp( attrib, "stcslength" ) ) {
- astClearStcsLength( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static char *ContextFragment( WordContext *con, char **buf, int *status ){
-/*
-* Name:
-* ContextFragment
-
-* Purpose:
-* Returns a string holding a fragment of the document being read.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* char *ContextFragment( WordContext *con, char **buf, int *status )
-
-* Class Membership:
-* StcsChan member function
-
-* Description:
-* This function returns a pointer to a string that holds a fragment
-* of the STC-S document currently being read. The fragment ends at
-* the last word read by function GetNextWord, and starts a certain
-* number of words earlier in the document, as specified by the NEWORD
-* macro.
-
-* Parameters:
-* con
-* Pointer to the context structure, managed by GetNextWord.
-* buf
-* Address of a pointer to a dynamically allocated buffer. This
-* pointer should be NULL on the first call to this function, and
-* will be updated by this function. The pointer should be freed
-* using astFree when no longer needed.
-* status
-* Address of the inherited status value.
-
-* Returned Value:
-* A pointer to the buffer.
-*/
-
-/* Local Variables: */
- int i; /* Word count */
- int j; /* Word index */
- int nc; /* Text length */
-
-/* Initialise the number of characters written to the buffer. */
- nc = 0;
-
-/* Get the index of the first word to add to the buffer. The "next"
- component of the context structure holds the index at which the word
- returned by the next call to GetNextWord will be stored. So at the
- moment, this is the index of the oldest word in the cyclic list. */
- j = con->next;
-
-/* Loop round all non-NULL words in the cyclic list. */
- for( i = 0; i < NEWORD; i++ ) {
- if( con->words[ j ] ) {
-
-/* Append this word to the buffer, extending the buffer size as
- necessary. */
- *buf = astAppendString( *buf, &nc, con->words[ j ] );
-
-/* Append a trailingh space. */
- *buf = astAppendString( *buf, &nc, " " );
- }
-
-/* Increment the index of the next word to use in the cyclic list. Wrap
- back to zerp when the end of the list is reached. */
- if( ++j == NEWORD ) j = 0;
- }
-
-/* Remove the final trailing space. */
- if( nc ) (*buf)[ nc - 1 ] = 0;
-
-/* Return a pointer to the supplied buffer. */
- return *buf;
-}
-
-static void FreeContext( WordContext *con, int *status ){
-/*
-* Name:
-* FreeContext
-
-* Purpose:
-* Free the resources used by a word-reading context structure.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* voidFreeContext( WordContext *con, int *status );
-
-* Class Membership:
-* StcsChan member function
-
-* Description:
-* This function frees the resources used by the supplied WordContext
-* structure. This structure is used by GetNextWord to keep track of
-* which word to return next.
-*
-* This function frees the dynamic memory pointers stored within the
-* WordContext structure, but does not free the memory holding the
-* WordContext structure itself.
-
-* Parameters:
-* con
-* Pointer to a structure holding the context.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- int i; /* Word index */
-
-/* Check the supplied pointer. */
- if ( !con ) return;
-
-/* Free the resources. */
- con->line = astFree( con->line );
-
- for( i = 0; i < NEWORD; i++ ) {
- con->words[ i ] = astFree( con->words[ i ] );
- }
-
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a StcsChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* StcsChan member function (over-rides the protected astGetAttrib
-* method inherited from the Channel class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a StcsChan, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the StcsChan.
-* attrib
-* Pointer to a null terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the StcsChan, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the StcsChan. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS; /* Declare the thread specific global data */
- AstStcsChan *this; /* Pointer to the StcsChan structure */
- const char *result; /* Pointer value to return */
- int ival; /* Integer attribute value */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the StcsChan structure. */
- this = (AstStcsChan *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null terminated string in an appropriate
- format. Set "result" to point at the result string. */
-
-/* StcsArea. */
-/* --------- */
- if ( !strcmp( attrib, "stcsarea" ) ) {
- ival = astGetStcsArea( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* StcsCoords. */
-/* ----------- */
- } else if ( !strcmp( attrib, "stcscoords" ) ) {
- ival = astGetStcsCoords( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-
-/* StcsProps. */
-/* ---------- */
- } else if ( !strcmp( attrib, "stcsprops" ) ) {
- ival = astGetStcsProps( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* StcsIndent */
-/* --------- */
- } else if ( !strcmp( attrib, "stcsindent" ) ) {
- ival = astGetStcsIndent( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* StcsLength */
-/* --------- */
- } else if ( !strcmp( attrib, "stcslength" ) ) {
- ival = astGetStcsLength( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-
-}
-
-static void GetFmt( const char *key, AstKeyMap *props, int i, int defdigs,
- char *fmt, int *status ){
-/*
-* Name:
-* GetFmt
-
-* Purpose:
-* Decide how many digits to use when formatting a numerical STC-S
-* property value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* void GetFmt( const char *key, AstKeyMap *props, int i,
-* int defdigs, char *fmt, int *status )
-
-* Class Membership:
-* StcsChan member function
-
-* Description:
-* This function locates the named property in the supplied KeyMap. If
-* it is found, a printf format specifier is generated that matches
-* the value is determined and returned. Otherwise, a default format
-* specified based on the supplied default number of digits is returned.
-
-* Parameters:
-* key
-* The key name associated with the property.
-* km
-* Pointer to a KeyMap containing the STC-S properties.
-* i
-* For vector values, this is the index of the vector element to be
-* checked. Should be zero for scalar values. If "i" is greater
-* than the number of values in the vector, then the number of digits
-* in the first element is found and returned.
-* defdigs
-* The value to return if the KeyMap does not contain an entry with
-* the supplied key.
-* fmt
-* Pointer to a string in which to return the format specifier.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- const char *dot; /* Pointer to decimal point */
- const char *p; /* Pointer to next character */
- const char *word; /* Property value */
- int after0; /* Digits after the decimal point in first word */
- int after; /* Digits after the decimal point in current word */
- int before0; /* Digits before the decimal point in first word */
- int before; /* Digits before the decimal point in current word */
- int exp0; /* Was an exponent found in first word? */
- int exp; /* Was an exponent found in current word? */
- int j; /* Index of current word */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Initialise. */
- exp = 1;
- before = defdigs;
- after = 0;
- exp0 = 0;
- before0 = 0;
- after0 = 0;
-
-/* If the KeyMap contains the required property... */
- if( astMapGet0C( props, key, &word ) ) {
-
-/* Skip over the words in the string. */
- p = word;
- for( j = 0; j <= i; j++ ) {
-
-/* Find the next space or terminating null at the end of the current word.
- Also count the number of digits before and after the decimal point and
- see if the word includes an exponent. */
- exp = 0;
- before = 0;
- after = 0;
- dot = NULL;
-
- while( *p != 0 && *p != ' ' ) {
- if( ! exp ) {
- if( isdigit( *p ) ) {
- if( dot ) {
- after++;
- } else {
- before++;
- }
-
- } else if( *p == '.' ) {
- dot = p;
-
- } else if( *p == 'e' || *p == 'E' ) {
- exp = 1;
- }
- }
- p++;
- }
-
-/* Note the values for the first word. */
- if( j == 0 ) {
- exp0 = exp;
- before0 = before;
- after0 = after;
- }
-
-/* Find the following non-space marking the start of the next word,
- or the terminating null. */
- while( *p != 0 && *p == ' ' ) p++;
-
-/* If we find the terminating null before we have found the i'th word,
- break out of the loop using the first word instead of the i'th word. */
- if( *p == 0 ) {
- exp = exp0;
- before = before0;
- after = after0;
- break;
- }
- }
- }
-
- if( exp ) {
- sprintf( fmt, "%%.%dg", before + after );
- } else {
- sprintf( fmt, "%%.%df", after );
- }
-}
-
-static const char *GetNextWord( AstStcsChan *this, WordContext *con,
- int *status ){
-/*
-* Name:
-* GetNextWord
-
-* Purpose:
-* Get a pointer to the next input word read from an STC-S source.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* const char *GetNextWord( AstStcsChan *this, WordContext *con,
-* int *status )
-
-* Class Membership:
-* StcsChan member function
-
-* Description:
-* This function returns a pointer to the next word of an STC-S
-* description.
-
-* Parameters:
-* this
-* Pointer to the StcsChan, or NULL (to initialise "con").
-* con
-* Pointer to a structure holding context. The structure should be
-* initialised by calling this function with a NULL "this" pointer
-* before making further use of this function. When finished, it
-* should be released using FreeContext.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new word. NULL is returned if an error has already
-* occurred, of if "this" is NULL.
-*/
-
-/* Local Variables: */
- const char *result; /* Returned pointer. */
- int i; /* Word index */
- size_t len; /* Word length */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If no StcChan was supplied, initialise the supplied WordContext. */
- if( !this ) {
- con->e = NULL;
- con->line = NULL;
- con->done = 0;
- con->next = 0;
- con->wnext = NULL;
- con->close = 0;
- con->open = 0;
- for( i = 0; i < NEWORD; i++ ) con->words[ i ] = NULL;
-
-/* Words that end with an opening parenthesis are treated as two words. If the
- previous word ended in an opening parenthesis, it will have been removed by
- the previous call to this function and the "con->open" flag set. In
- this case, we just return a pointer to the second of the two words - a
- single "(" character - and clear the "con->open" flag. */
- } else if( con->open && ! con->done ) {
- con->open = 0;
- result = "(";
-
-/* Likewise deal with words that end with a closing parenthesis. */
- } else if( con->close && ! con->done ) {
- con->close = 0;
- result = ")";
-
-/* Words that begin with an opening parenthesis are treated as two words. If
- the previous word was such an opening parenthesis, the rest of the word
- will have been removed by the previous call to this function and the
- "con->wnext" pointer set to the start of the remaining word. In
- this case, re-instate the original character that was replaced by a
- terminating null when the previous word was returned, return the
- "con->wnext" pointer, and then clear the pointer. */
- } else if( con->wnext && ! con->done ) {
- *(con->wnext) = con->f;
- result = con->wnext;
- con->wnext = NULL;
-
-/* Otherwise... */
- } else {
-
-/* If the previous invocation of this function converted a space
- character into a null character, change it back again. */
- if( con->e ) *(con->e) = ' ';
-
-/* Get a pointer to the next non-white character in the current line of
- input text. */
- result = con->e;
- if( result ) {
- while( *result && isspace( *result ) ) result++;
- }
-
-/* If we have exhausted the current line, get the next line by invoking
- the source function. We loop until we read a line that is not entirely
- blank. */
- while( ( !result || ! *result ) && astOK ) {
-
-/* First free the memory holding the previous line. */
- if( con->line ) con->line = astFree( con->line );
- con->e = NULL;
-
-/* Get the next line of text from the source function. */
- con->line = astGetNextText( this );
- result = con->line;
-
-/* Break when we reach the end of the input text. */
- if( !result ) break;
-
-/* Get a pointer to the first non-white character in the new line. */
- while( *result && isspace( *result ) ) result++;
- }
-
-/* Find the end of the word. */
- if( result && *result ) {
- con->e = (char *) result + 1;
- while( *(con->e) && !isspace( *(con->e) ) ) (con->e)++;
-
-/* If the word is already null-terminated, nullify the "e" pointer to
- indicate this. Otherwise, change the white-space character into a
- null. */
- if( *(con->e) ) {
- *(con->e) = 0;
- len = con->e - result;
- } else {
- con->e = NULL;
- len = strlen( result );
- }
-
-/* Add the word into the cyclic list of words used to form a document
- fragment to include in error and warning messages. */
- con->words[ con->next ] = astStore( con->words[ con->next ],
- result, len + 1 );
- if( ++(con->next) == NEWORD ) con->next = 0;
-
-/* Deal with words that include an opening or closing parenthesis at
- start or end. These words must have 2 or more characters. */
- if( len > 1 ) {
-
-/* If the word ends with an opening parenthesis, replace the parenthesis
- with a null character and set a flag indicating that the next word
- returned should consist of just an opening parenthesis. */
- if( result[ len - 1 ] == '(' ) {
- ((char *) result)[ len - 1 ] = 0;
- con->open = 1;
-
-/* If the word ends with a closing parenthesis, replace the parenthesis
- with a null character and set a flag indicating that the next word
- returned should consist of just a closing parenthesis. */
- } else if( result[ len - 1 ] == ')' ) {
- ((char *) result)[ len - 1 ] = 0;
- con->close = 1;
-
-/* If the word starts with an opening parenthesis, replace the parenthesis
- with a null character and set a flag indicating that the next word
- returned should consist of just a closing parenthesis. */
- } else if( result[ 0 ] == '(' ) {
- con->wnext = ( (char *) result ) + 1;
- con->f = *(con->wnext);
- *(con->wnext) = 0;
- }
- }
-
-/* If we have run out of input words, but we have not yet finished
- interpreting the previous word returned, return a null string, rather
- than a null pointer in order to allow further interpretation of the
- previous word. */
- } else if( ! con->done ) {
- result = "";
- }
- }
-
-/* Return the pointer to the next word. */
- return result;
-}
-
-static int GetRegionProps( AstStcsChan *this, AstRegion *spreg,
- AstKeyMap *spprops, int nspace, int defdigs,
- double scale, int issky, int *status ) {
-/*
-* Name:
-* GetRegionProps
-
-* Purpose:
-* Create STC-S properties to describe a given Region and store in a
-* KeyMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* int GetRegionProps( AstStcsChan *this, AstRegion *spreg,
-* AstKeyMap *spprops, int *status )
-
-* Class Membership:
-* StcsChan member function
-
-* Description:
-* This function creates a set of STC-S properties to describe the
-* supplied spatial (2D) Region, and stores them in the supplied KeyMap.
-
-* Parameters:
-* this
-* The StcsChan being used.
-* spreg
-* The 2-D spatial Region to be described.
-* spprops
-* A KeyMap in which to store the created properties.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Returns the integer code for the spatial region, or NULL_ID if the
-* properties could not be created for any reason.
-
-*/
-
-
-/* Local Variables: */
- AstKeyMap *new_props; /* KeyMap holding component Region properties */
- AstMapping *sreg; /* Simplified Region */
- AstRegion **reg_list; /* Array of component Regioon pointers */
- char *prop; /* Formatted property string */
- char buf[ 100 ]; /* Buffer for formatted values */
- char fmt[ 10 ]; /* Buffer for format specifier */
- double *p; /* Pointer to next axis value */
- double *points; /* Pointer to array of Region axis values */
- double a; /* Circle or ellipse radius */
- double angle; /* Ellipse position angle */
- double b; /* Ellipse radius */
- double centre[ 3 ]; /* Circle or ellipse centre */
- double lbnd[ 3 ]; /* Region lower bounds */
- double ubnd[ 3 ]; /* Region upper bounds */
- int i; /* Loop index */
- int j; /* Loop index */
- int nc; /* Number of characters in "prop" string */
- int np; /* Number of points defining the Region */
- int nreg; /* Number of component Regions */
- int ok; /* Can the Region be written out? */
- int oper; /* Code for CmpRegion boolean operator */
- int spaceid; /* Identifier for STC-S spatial region type */
-
-/* Check inherited status */
- if( !astOK ) return NULL_ID;
-
-/* Initialise */
- spaceid = NULL_ID;
- ok = 1;
- prop = NULL;
-
-/* If the Region has been negated, temporarily negate the Region, and
- write its properties into a new KeyMap by calling this function
- recursively. Then store the new KeyMap in the supplied KeyMap. */
- if( astGetNegated( spreg ) ) {
- spaceid = NOT_ID;
- astNegate( spreg );
- new_props = astKeyMap( " ", status );
-
- if( GetRegionProps( this, spreg, new_props, nspace, defdigs,
- scale, issky, status ) == NULL_ID ) ok = 0;
-
- astMapPut0C( spprops, "ID", "Not", NULL );
- astMapPut0A( spprops, "REGION1", new_props, NULL );
- astMapPut0I( spprops, "NREG", 1, NULL );
- astNegate( spreg );
-
-/* Store properties that are specific to AllSky sub-phrases (i.e. none)... */
- } else if( astIsANullRegion( spreg ) && astGetNegated( spreg ) ) {
- spaceid = ALLSKY_ID;
- astMapPut0C( spprops, "ID", "AllSky", NULL );
-
-/* Store properties that are specific to Circle sub-phrases... */
- } else if( astIsACircle( spreg ) ) {
- spaceid = CIRCLE_ID;
- astMapPut0C( spprops, "ID", "Circle", NULL );
-
-/* Get the geometric parameters of the Circle. */
- astCirclePars( spreg, centre, &a, NULL );
-
-/* Create a string holding the formatted centre axis values, scaling
- to the required units. Use the Frame's Digits attribute to specify
- how many digits to use when formatting the axis values. */
- nc = 0;
- for( i = 0; i < nspace; i++ ) {
- if( centre[ i ] != AST__BAD ) {
- GetFmt( "CENTRE", spprops, i, defdigs, fmt, status );
- (void) sprintf( buf, fmt, scale*centre[ i ] );
- prop = astAppendString( prop, &nc, buf );
- prop = astAppendString( prop, &nc, " " );
-
- } else {
- ok = 0;
- astAddWarning( this, 1, "The supplied Circle contains "
- "one or more bad centre axis values.",
- "astWrite", status );
- break;
- }
- }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
- prop[ nc - 1 ] = 0;
- astMapPut0C( spprops, "CENTRE", prop, NULL );
-
-/* Scale, format and store the radius. */
- if( a != AST__BAD ) {
- GetFmt( "RADIUS", spprops, 0, defdigs, fmt, status );
- (void) sprintf( buf, fmt, scale*a );
- astMapPut0C( spprops, "RADIUS", buf, NULL );
- } else {
- ok = 0;
- astAddWarning( this, 1, "The supplied Circle has an "
- "undefined radius.", "astWrite", status );
- }
-
-/* Store properties that are specific to PositionInterval sub-phrases... */
- } else if( astIsAInterval( spreg ) || astIsABox( spreg ) ) {
- spaceid = POSITION_INTERVAL_ID;
- astMapPut0C( spprops, "ID", "PositionInterval", NULL );
-
-/* Get the bounds of the Region. */
- astGetRegionBounds( spreg, lbnd, ubnd );
-
-/* Create a string holding the formatted low limits, scaling to the
- required units. Use the Frame's Digits attribute to specify how
- many digits to use when formatting the axis values. */
- nc = 0;
- for( i = 0; i < nspace; i++ ) {
- if( lbnd[ i ] == AST__BAD || lbnd[ i ] == DBL_MAX ||
- lbnd[ i ] == -DBL_MAX ) {
- astAddWarning( this, 1, "Spatial axis %d has an undefined "
- "lower limit.", "astWrite", status, i + 1 );
- ok = 0;
- break;
- } else {
- GetFmt( "LOLIMIT", spprops, i, defdigs, fmt, status );
- (void) sprintf( buf, fmt, scale*lbnd[ i ] );
- prop = astAppendString( prop, &nc, buf );
- prop = astAppendString( prop, &nc, " " );
- }
- }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
- prop[ nc - 1 ] = 0;
- astMapPut0C( spprops, "LOLIMIT", prop, NULL );
-
-/* Do the same for the upper limits. */
- nc = 0;
- for( i = 0; i < nspace; i++ ) {
- if( ubnd[ i ] == AST__BAD || ubnd[ i ] == DBL_MAX ||
- ubnd[ i ] == -DBL_MAX ) {
- astAddWarning( this, 1, "Spatial axis %d has an undefined "
- "upper limit.", "astWrite", status, i + 1 );
- ok = 0;
- break;
- } else {
- GetFmt( "HILIMIT", spprops, i, defdigs, fmt, status );
- (void) sprintf( buf, fmt, scale*ubnd[ i ] );
- prop = astAppendString( prop, &nc, buf );
- prop = astAppendString( prop, &nc, " " );
- }
- }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
- prop[ nc - 1 ] = 0;
- astMapPut0C( spprops, "HILIMIT", prop, NULL );
-
-/* Store properties that are specific to Ellipse sub-phrases... */
- } else if( astIsAEllipse( spreg ) ) {
- spaceid = ELLIPSE_ID;
- astMapPut0C( spprops, "ID", "Ellipse", NULL );
-
-/* Get the geometric parameters of the Ellipse. */
- astEllipsePars( spreg, centre, &a, &b, &angle, NULL, NULL );
-
-/* Create a string holding the formatted centre axis values, scaling
- to the required units. Use the Frame's Digits attribute to specify
- how many digits to use when formatting the axis values. */
- nc = 0;
- for( i = 0; i < nspace; i++ ) {
- if( centre[ i ] != AST__BAD ) {
- GetFmt( "CENTRE", spprops, i, defdigs, fmt, status );
- (void) sprintf( buf, fmt, scale*centre[ i ] );
- prop = astAppendString( prop, &nc, buf );
- prop = astAppendString( prop, &nc, " " );
-
- } else {
- ok = 0;
- astAddWarning( this, 1, "The supplied Ellipse contains "
- "one or more bad centre axis values.",
- "astWrite", status );
- break;
- }
- }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
- prop[ nc - 1 ] = 0;
- astMapPut0C( spprops, "CENTRE", prop, NULL );
-
-/* Scale, format and store the two radii. */
- if( a != AST__BAD && b != AST__BAD && angle != AST__BAD ) {
- GetFmt( "RADIUS1", spprops, 0, defdigs, fmt, status );
- (void) sprintf( buf, fmt, scale*a );
- astMapPut0C( spprops, "RADIUS1", buf, NULL );
-
- GetFmt( "RADIUS2", spprops, 0, defdigs, fmt, status );
- (void) sprintf( buf, fmt, scale*b );
- astMapPut0C( spprops, "RADIUS2", buf, NULL );
-
-/* Convert the angle to degrees in the direction required by STC-S,
- format and store. */
- angle *= AST__DR2D;
- if( !issky ) angle = 90 - angle;
- while( angle < 0.0 ) angle += 360.0;
- while( angle >= 360.0 ) angle -= 360.0;
-
- GetFmt( "POSANGLE", spprops, 0, defdigs, fmt, status );
- (void) sprintf( buf, fmt, angle );
- astMapPut0C( spprops, "POSANGLE", buf, NULL );
-
- } else {
- astAddWarning( this, 1, "The gemeotric parameters of the "
- "supplied Ellipse are undefined.",
- "astWrite", status );
- ok = 0;
- }
-
-/* Store properties that are specific to Polygon sub-phrases... */
- } else if( astIsAPolygon( spreg ) ) {
- spaceid = POLYGON_ID;
- astMapPut0C( spprops, "ID", "Polygon", NULL );
-
-/* Get an array holding the axis values at the polygon vertices. */
- astGetRegionPoints( spreg, 0, 0, &np, NULL );
- points = astMalloc( sizeof( double )*np*nspace );
- astGetRegionPoints( spreg, np, nspace, &np, points );
-
-/* Create a string holding the formatted vertex axis values, scaling
- to the required units. Use the Frame's Digits attribute to specify
- how many digits to use when formatting the axis values. */
- GetFmt( "VERTICES", spprops, 0, defdigs, fmt, status );
- nc = 0;
- for( j = 0; j < np; j++ ) {
- p = points + j;
- for( i = 0; i < nspace; i++ ) {
- if( *p != AST__BAD ) {
- (void) sprintf( buf, fmt, scale*(*p) );
- prop = astAppendString( prop, &nc, buf );
- prop = astAppendString( prop, &nc, " " );
- p += np;
- } else {
- astAddWarning( this, 1, "The supplied Polygon contains "
- "one or more bad axis values.", "astWrite",
- status );
- ok = 0;
- break;
- }
- }
- }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
- prop[ nc - 1 ] = 0;
- astMapPut0C( spprops, "VERTICES", prop, NULL );
-
-/* Free resources. */
- points = astFree( points );
-
-/* Store properties that are specific to Position sub-phrases... */
- } else if( astIsAPointList( spreg ) ) {
- spaceid = POSITION_ID;
- astMapPut0C( spprops, "ID", "Position", NULL );
-
-/* Check the PointList contains only a single point. */
- astGetRegionPoints( spreg, 0, 0, &np, NULL );
- if( np > 1 ) {
- astAddWarning( this, 1, "The supplied PointList contains "
- "more than one position.", "astWrite", status );
- ok = 0;
-
-/* If so, get the axis values at the point. */
- } else {
- astGetRegionPoints( spreg, 1, nspace, &np, centre );
-
-/* Create a string holding the formatted axis values, scaling to the
- required units. Use the Frame's Digits attribute to specify how many
- digits to use when formatting the axis values. */
- nc = 0;
- for( i = 0; i < nspace; i++ ) {
- if( centre[ i ] != AST__BAD ) {
- GetFmt( "POSITION", spprops, i, defdigs, fmt, status );
- (void) sprintf( buf, fmt, scale*centre[ i ] );
- prop = astAppendString( prop, &nc, buf );
- prop = astAppendString( prop, &nc, " " );
- p += nspace;
-
- } else {
- astAddWarning( this, 1, "The supplied PointList contains "
- "one or more bad axis values.", "astWrite",
- status );
- ok = 0;
- break;
- }
- }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
- prop[ nc - 1 ] = 0;
- astMapPut0C( spprops, "POSITION", prop, NULL );
- }
-
-/* Store properties that are specific to compound Position sub-phrases... */
- } else {
-
-/* If the Region is not a CmpRegion (e.g. a Prism?) see if simplifying it
- produces a CmpRegion. */
- if( !astIsACmpRegion( spreg ) ) {
- sreg = astSimplify( spreg );
- } else {
- sreg = astClone( spreg );
- }
-
-/* If we now have a CmpRegion, write its properties into a new KeyMap by
- calling this function recursively. Then store the new KeyMap in the
- supplied KeyMap. */
- if( astIsACmpRegion( sreg ) ) {
-
-/* Get the list of Regions that the CmpRegion combines together. This
- also returns the boolean operator with which they are combined. */
- nreg = 0;
- reg_list = NULL;
- oper = astCmpRegionList( (AstCmpRegion *) sreg, &nreg, ®_list );
-
-/* Store compound region type in the supplied KeyMap. */
- if( oper == AST__AND ) {
- spaceid = INTERSECTION_ID;
- astMapPut0C( spprops, "ID", "Intersection", NULL );
- } else if( oper == AST__OR ) {
- spaceid = UNION_ID;
- astMapPut0C( spprops, "ID", "Union", NULL );
- } else {
- spaceid = DIFFERENCE_ID;
- astMapPut0C( spprops, "ID", "Difference", NULL );
- }
-
-/* Loop round each of the combined Regions. */
- for( i = 0; i < nreg; i++ ) {
-
-/* Create a new KeyMap, and then call this function recursively to store
- the properties of the i'th component Region in the new KeyMap. */
- if( ok ) {
- new_props = astKeyMap( " ", status );
- if( GetRegionProps( this, reg_list[ i ], new_props, nspace,
- defdigs, scale, issky, status )
- == NULL_ID ) ok = 0;
-
-/* Store the new KeyMap in the supplied KeyMap. */
- sprintf( buf, "REGION%d", i + 1 );
- astMapPut0A( spprops, buf, new_props, NULL );
-
-/* Free resources. */
- new_props = astAnnul( new_props );
- }
- reg_list[ i ] = astAnnul( reg_list[ i ] );
- }
- reg_list = astFree( reg_list );
- astMapPut0I( spprops, "NREG", nreg, NULL );
-
-/* All other classes of Region are unsupported. */
- } else {
- astAddWarning( this, 1, "The supplied %s cannot be written "
- "out since STC-S does not support %s regions.",
- "astWrite", status, astGetClass( spreg ),
- astGetClass( spreg ) );
- ok = 0;
- }
-
-/* Free resources. */
- sreg = astAnnul( sreg );
- }
-
- if( prop ) prop = astFree( prop );
-
-/* If an error has occurred, return NULL_ID. */
- if( !ok || !astOK ) spaceid = NULL_ID;
-
-/* Return the identifier for the STC-S spatial region type. */
- return spaceid;
-}
-
-void astInitStcsChanVtab_( AstStcsChanVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitStcsChanVtab
-
-* Purpose:
-* Initialise a virtual function table for an StcsChan.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "stcschan.h"
-* void astInitStcsChanVtab( AstStcsChanVtab *vtab, const char *name )
-
-* Class Membership:
-* StcsChan vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the StcsChan class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS; /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstChannelVtab *channel; /* Pointer to Channel component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitChannelVtab( (AstChannelVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAStcsChan) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstChannelVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-
- vtab->ClearStcsArea = ClearStcsArea;
- vtab->GetStcsArea = GetStcsArea;
- vtab->SetStcsArea = SetStcsArea;
- vtab->TestStcsArea = TestStcsArea;
-
- vtab->ClearStcsCoords = ClearStcsCoords;
- vtab->GetStcsCoords = GetStcsCoords;
- vtab->SetStcsCoords = SetStcsCoords;
- vtab->TestStcsCoords = TestStcsCoords;
-
- vtab->ClearStcsProps = ClearStcsProps;
- vtab->GetStcsProps = GetStcsProps;
- vtab->SetStcsProps = SetStcsProps;
- vtab->TestStcsProps = TestStcsProps;
-
- vtab->SetStcsIndent = SetStcsIndent;
- vtab->ClearStcsIndent = ClearStcsIndent;
- vtab->TestStcsIndent = TestStcsIndent;
- vtab->GetStcsIndent = GetStcsIndent;
-
- vtab->SetStcsLength = SetStcsLength;
- vtab->ClearStcsLength = ClearStcsLength;
- vtab->TestStcsLength = TestStcsLength;
- vtab->GetStcsLength = GetStcsLength;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- channel = (AstChannelVtab *) vtab;
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
- channel->Write = Write;
- channel->Read = Read;
-
-/* Declare the Dump function for this class. There is no destructor or
- copy constructor. */
- astSetDump( vtab, Dump, "StcsChan", "STC-S I/O Channel" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static AstRegion *MakeSpaceRegion( AstKeyMap *props, AstFrame *frm,
- double scale, int *status ){
-/*
-* Name:
-* MakeSpaceRegion
-
-* Purpose:
-* Create a Region to describe the space coverage of the STC-S
-* description being read.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* AstRegion *MakeSpaceRegion( AstKeyMap *props, AstFrame *frm,
-* double scale, int *status )
-
-* Class Membership:
-* StcsChan member function
-
-* Description:
-* This function returns a pointer to a new Region that describes the
-* spatial coverage of an STC-S description.
-
-* Parameters:
-* props
-* A KeyMap holding properties read from the STC-S space sub-phrase.
-* frm
-* The Frame in which the Region is to be defined.
-* scale
-* A factor that must be applied to the raw axis values read from the
-* STC-S description in order to convert them into the units used by
-* the supplied Frame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Region pointer.
-
-*/
-
-
-/* Local Variables: */
- AstKeyMap *reg_props; /* KeyMap holding argument properties */
- AstRegion *reg; /* Current argument Region */
- AstRegion *result; /* Returned Region */
- AstRegion *tmp; /* Temporary Region pointer */
- char key[ 20 ]; /* Key for argument region */
- const char *id; /* Sub-phrase identifier */
- double *p; /* Pointer to next axis value */
- double *temp; /* Pointer to array of reordered polygon vertex axis values */
- double *vertices; /* Pointer to array of polygon vertex axis values */
- double val1; /* Scalar value read from KeyMap */
- double val2; /* Scalar value read from KeyMap */
- double val3; /* Scalar value read from KeyMap */
- double vec1[ 10 ]; /* Vector read from KeyMap */
- double vec2[ 10 ]; /* Vector read from KeyMap */
- int iaxis; /* Axis index */
- int ireg; /* Index of argument regions */
- int ivert; /* Vertex index */
- int naxes; /* Number of spatial axes */
- int nreg; /* Number of argument regions */
- int nval; /* Number of values read from KeyMap */
- int nvert; /* Number of vertices */
- int spaceid; /* Integer identifier for spatial shape */
- int oper; /* Boolean operator code for CmpRegion */
-
-/* Initialise */
- result = NULL;
-
-/* Check inherited status */
- if( !astOK ) return result;
-
-/* Temporarily ensure that an error is reported if an attempt is made to
- access a non-existent KeyMap entry. */
- astSetKeyError( props, 1 );
-
-/* Get the space sub-phrase identifier from the properties KeyMap, and
- find the corresponding integer identifier. */
-
- astMapGet0C( props, "ID", &id );
- spaceid = SpaceId( id, status );
-
-/* Get the number of axes in the Frame. */
- naxes = astGetNaxes( frm );
-
-/* Create a suitable Region to enclose the space positions. This
- includes scaling the supplied axis values to the units used by
- the Frame. */
- if( spaceid == POSITION_INTERVAL_ID ) {
- astMapGet1D( props, "DLOLIMIT", naxes, &nval, vec1 );
- astMapGet1D( props, "DHILIMIT", naxes, &nval, vec2 );
-
- for( iaxis = 0; iaxis < naxes; iaxis++ ) {
- vec1[ iaxis ] *= scale;
- vec2[ iaxis ] *= scale;
- }
-
- result = (AstRegion *) astBox( frm, 1, vec1, vec2, NULL, " ", status );
-
- } else if( spaceid == ALLSKY_ID ) {
- result = (AstRegion *) astNullRegion( frm, NULL, "Negated=1", status );
-
- } else if( spaceid == CIRCLE_ID ) {
- astMapGet1D( props, "DCENTRE", naxes, &nval, vec1 );
- astMapGet0D( props, "RADIUS", &val1 );
- for( iaxis = 0; iaxis < naxes; iaxis++ ) vec1[ iaxis ] *= scale;
- val1 *= scale;
- result = (AstRegion *) astCircle( frm, 1, vec1, &val1, NULL, " ",
- status );
-
- } else if( spaceid == ELLIPSE_ID ) {
- astMapGet1D( props, "DCENTRE", naxes, &nval, vec1 );
- astMapGet0D( props, "RADIUS1", &val1 );
- astMapGet0D( props, "RADIUS2", &val2 );
- astMapGet0D( props, "POSANGLE", &val3 );
- for( iaxis = 0; iaxis < naxes; iaxis++ ) vec1[ iaxis ] *= scale;
- vec2[ 0 ] = val1*scale;
- vec2[ 1 ] = val2*scale;
- if( !astIsASkyFrame( frm ) ) val3 = 90.0 - val3;
- val3 *= AST__DD2R;
- result = (AstRegion *) astEllipse( frm, 1, vec1, vec2, &val3, NULL, " ",
- status );
-
- } else if( spaceid == BOX_ID ) {
- astMapGet1D( props, "DCENTRE", naxes, &nval, vec1 );
- astMapGet1D( props, "DBSIZE", naxes, &nval, vec2 );
-
- for( iaxis = 0; iaxis < naxes; iaxis++ ) {
- vec1[ iaxis ] *= scale;
- vec2[ iaxis ] *= scale;
- }
-
- vertices = BoxCorners( frm, vec1, vec2, status );
- result = (AstRegion *) astPolygon( frm, 4, 4, vertices, NULL, " ",
- status );
- vertices = astFree( vertices );
-
- } else if( spaceid == POLYGON_ID ) {
- nval = astMapLength( props, "DVERTICES" );
- temp = astMalloc( sizeof( double )*nval );
- astMapGet1D( props, "DVERTICES", nval, &nval, temp );
-
-/* An STC-S polygon description holds the vertex axis values in the wrong
- order for the AstPolygon constructor. Therefore, transpose the temp
- array (scale them at the same time). */
- vertices = astMalloc( sizeof( double )*nval );
- if( astOK ) {
- nvert = nval/naxes;
- p = temp;
- for( ivert = 0; ivert < nvert; ivert++ ) {
- for( iaxis = 0; iaxis < naxes; iaxis++,p++ ) {
- vertices[ iaxis*nvert + ivert ] = *p*scale;
- }
- }
-
- result = (AstRegion *) astPolygon( frm, nvert, nvert, vertices, NULL,
- " ", status );
- }
-
- vertices = astFree( vertices );
- temp = astFree( temp );
-
- } else if( spaceid == POSITION_ID ) {
- astMapGet1D( props, "DPOSITION", naxes, &nval, vec1 );
- for( iaxis = 0; iaxis < naxes; iaxis++ ) vec1[ iaxis ] *= scale;
- result = (AstRegion *) SinglePointList( frm, vec1, NULL, status );
-
- } else if( spaceid == CONVEX_ID ) {
- astError( AST__INTER, "astRead(StcsChan): No support for Convex in "
- "MakeSpaceRegion (internal AST programming error).", status );
-
-/* All remaining valid space id values are compound - their arguments are held
- within separate KeyMaps nested inside the supplied KeyMap. */
- } else if( spaceid != NULL_ID ) {
-
-/* The number of arguments is defined in the NREG entry. */
- astMapGet0I( props, "NREG", &nreg );
-
-/* Get the CmpRegion operator code. */
- if( spaceid == UNION_ID ) {
- oper = AST__OR;
- } else if( spaceid == INTERSECTION_ID ) {
- oper = AST__AND;
- } else if( spaceid == DIFFERENCE_ID ) {
- oper = AST__XOR;
- } else {
- oper = 0; /* To avoid compiler warnings */
- }
-
-/* Loop over all argument Regions. */
- for( ireg = 0; ireg < nreg; ireg++ ) {
-
-/* Get the KeyMap holding the STC-S properties of the current argument
- region. */
- sprintf( key, "REGION%d", ireg + 1 );
- astMapGet0A( props, key, ®_props );
-
-/* Construct an AST Region from this list of STC-S properties. */
- reg = MakeSpaceRegion( reg_props, frm, scale, status );
-
-/* If we are creating a "Not" element, just negate the argument region
- and return it. */
- if( spaceid == NOT_ID ) {
- astNegate( reg );
- result = astClone( reg );
-
-/* If we are creating a "Union", "Difference" or "Intersection" element,
- combine the first two arguments into a CmpRegion, and then add in each
- subsequent argument. */
- } else {
- if( ireg == 0 ) {
- result = astClone( reg );
- } else {
- tmp = (AstRegion *) astCmpRegion( result, reg, oper, " ",
- status );
- (void) astAnnul( result );
- result = tmp;
- }
- }
-
-/* Free resources */
- reg = astAnnul( reg );
- reg_props = astAnnul( reg_props );
- }
- }
-
-/* Ensure that no error is reported if an attempt is made to access a
- non-existent KeyMap entry. */
- astSetKeyError( props, 0 );
-
-/* Return the Region. */
- return result;
-}
-
-static void MapPut0C( AstKeyMap *km, const char *key, const char *value,
- const char *def, int defs, int *status ){
-/*
-* Name:
-* MapPut0C
-
-* Purpose:
-* Store a text STC-S property in the supplied keymap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* void MapPut0C( AstKeyMap *km, const char *key, const char *value,
-* const char *def, int defs, int *status )
-
-* Class Membership:
-* StcsChan member function.
-
-* Description:
-* This function stors the supplied value in the given KeyMap,
-* handling default values.
-
-* Parameters:
-* km
-* Pointer to the KeyMap in which to store the value.
-* key
-* Pointer to a string holding the property name associated with
-* the value.
-* value
-* The property value. If this is NULL then the function
-* returns without action.
-* def
-* The default property value.
-* defs
-* If zero, then the value is not stored in the KeyMap if the value
-* is equal to the default value.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Check the inherited status */
- if( !astOK ) return;
-
-/* If the value is NULL, ignore the entry. */
- if( value ) {
-
-/* If the value is equal to the default value, and we are NOT storing
- default values, ensure the KeyMap has no entry for the given key. */
- if( astChrMatch( value, def ) && !defs ) {
- astMapRemove( km, key );
-
-/* Otherwise, store the value. */
- } else {
- astMapPut0C( km, key, value, NULL );
- }
- }
-}
-
-static void MapPut0D( AstKeyMap *km, const char *key, double value, double def,
- int defs, int *status ){
-/*
-* Name:
-* MapPut0D
-
-* Purpose:
-* Store a floating point STC-S property in the supplied keymap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* void MapPut0D( AstKeyMap *km, const char *key, double value, double def,
-* int defs, int *status )
-
-* Class Membership:
-* StcsChan member function.
-
-* Description:
-* This function stors the supplied value in the given KeyMap,
-* handling default values.
-
-* Parameters:
-* km
-* Pointer to the KeyMap in which to store the value.
-* key
-* Pointer to a string holding the property name associated with
-* the value.
-* value
-* The property value. If this is AST__BAD then the function
-* returns without action.
-* def
-* The default property value.
-* defs
-* If zero, then the value is not stored in the KeyMap if the value
-* is equal to the default value.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Check the inherited status */
- if( !astOK ) return;
-
-/* If the value is bad, ignore the entry. */
- if( value != AST__BAD ) {
-
-/* If the value is equal to the default value, and we are NOT storing
- default values, ensure the KeyMap has no entry for the given key. */
- if( value == def && !defs ) {
- astMapRemove( km, key );
-
-/* Otherwise, store the value. */
- } else {
- astMapPut0D( km, key, value, NULL );
- }
- }
-}
-
-static char *PutRegionProps( AstStcsChan *this, AstKeyMap *km, const char *id,
- int indent, char *line, int *nc, int *crem,
- int linelen, int *status ){
-/*
-* Name:
-* PutRegionProps
-
-* Purpose:
-* Append STC-S space sub-phrase properties to the end of a string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* char *PutRegionProps( AstStcsChan *this, AstKeyMap *km, const char *id,
-* int indent, char *line, int *nc, int *crem,
-* int linelen, int *status )
-
-* Class Membership:
-* StcsChan member function
-
-* Description:
-* This function converts the STC-S properties for the space sub-phrase
-* supplied in a KeyMap into text, and appends them to the supplied
-* line of text in the order required by STC-S.
-*
-* It is assumed that the sub-phrase identifier has already been put
-* into the string.
-
-* Parameters:
-* this
-* The StcsChan.
-* km
-* Pointer to a KeyMap containing the STC-S properties.
-* id
-* Pointer to the sub-phrase identifier.
-* indent
-* If greater than or equal to zero, then it gives the number of
-* spaces indentation to place before the first word (also indicates
-* that a new-line should follow the last word of the argument). If
-* negative, never use indentation.
-* line
-* Pointer to the buffer to receive the property values.
-* nc
-* Pointer to an int in which to store the number of characaters in
-* the buffer. Updated on exit.
-* crem
-* Pointer to an int in which to store the maximum number of
-* characters before a new line. Ignored if zero. Updated on exit.
-* linelen
-* The maximum number of character per line, or zero if all text is
-* to be included in a single line.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the buffer. This will usually be "line", but may be
-* different to "line" if it was necessary to expand the memory to make
-* room for new properties.
-
-*/
-
-/* Local Variables: */
- AstKeyMap *reg_props;
- char *result;
- char key[ 20 ];
- int i;
- int ireg;
- int nreg;
- int spaceid;
-
-/* Initialise */
- result = line;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Temporarily ensure that an error is reported if an attempt is made to
- access a non-existent KeyMap entry. */
- astSetKeyError( km, 1 );
-
-/* Get the integer code for the space sub-phrase identifier. */
- spaceid = SpaceId( id, status );
-
-/* Do each type of space sub-phrase. */
- if( spaceid == NULL_ID ) {
- astError( AST__INTER, "astWrite(StcsChan): Illegal 'spaceid' value "
- "in function PutRegionProps (internal AST programming "
- "error).", status );
-
- } else if( spaceid == POSITION_INTERVAL_ID ) {
- result = AddItem( this, km, "LOLIMIT", NULL, result, nc, crem, linelen, status );
- result = AddItem( this, km, "HILIMIT", NULL, result, nc, crem, linelen, status );
-
- } else if( spaceid == ALLSKY_ID ) {
-
- } else if( spaceid == CIRCLE_ID ) {
- result = AddItem( this, km, "CENTRE", NULL, result, nc, crem, linelen, status );
- result = AddItem( this, km, "RADIUS", NULL, result, nc, crem, linelen, status );
-
- } else if( spaceid == ELLIPSE_ID ) {
- result = AddItem( this, km, "CENTRE", NULL, result, nc, crem, linelen, status );
- result = AddItem( this, km, "RADIUS1", NULL, result, nc, crem, linelen, status );
- result = AddItem( this, km, "RADIUS2", NULL, result, nc, crem, linelen, status );
- result = AddItem( this, km, "POSANGLE", NULL, result, nc, crem, linelen, status );
-
- } else if( spaceid == BOX_ID ) {
- result = AddItem( this, km, "CENTRE", NULL, result, nc, crem, linelen, status );
- result = AddItem( this, km, "BSIZE", NULL, result, nc, crem, linelen, status );
-
- } else if( spaceid == POLYGON_ID ) {
- result = AddItem( this, km, "VERTICES", NULL, result, nc, crem, linelen, status );
-
- } else if( spaceid == CONVEX_ID ) {
- astError( AST__INTER, "astWrite(StcsChan): No Convex support yet "
- "(internal AST programming error).", status );
-
- } else if( spaceid == POSITION_ID ) {
- result = AddItem( this, km, "POSITION", NULL, result, nc, crem, linelen, status );
-
-/* All remaining space id values are compound regions. */
- } else {
-
-/* Append an opening parenthesis. */
- result = astAppendString( result, nc, "( " );
-
-/* If required, write out the text through the Channel sink function,
- and start a new line. */
- if( indent >= 0 ) {
- astPutNextText( this, result );
- *nc = 0;
- *crem = linelen;
- }
-
-/* Set the indentation for the next level down. */
- if( indent == 0 ) {
- indent = 6;
- } else if( indent > 0 ){
- indent += 3;
- }
-
-/* Loop round all argument Regions. */
- astMapGet0I( km, "NREG", &nreg );
- for( ireg = 0; ireg < nreg; ireg++ ) {
- sprintf( key, "REGION%d", ireg + 1 );
- astMapGet0A( km, key, ®_props );
-
-/* Put any required indentation at the start of the line. */
- if( indent > 0 ) {
- for( i = 0; i < indent; i++ ) {
- result = astAppendString( result, nc, " " );
- }
- *crem -= indent;
- }
-
-/* Append the identifier for the next argument to the string. */
- result = AddItem( this, reg_props, "ID", NULL, result, nc, crem,
- linelen, status );
-
-/* Append the arguments to the string. */
- astMapGet0C( reg_props, "ID", &id );
- result = PutRegionProps( this, reg_props, id, indent, result, nc,
- crem, linelen, status );
-
-/* Write the text out to the sink function, and start a new line. */
- if( indent > 0 ) {
- astPutNextText( this, result );
- *nc = 0;
- *crem = linelen;
- }
-
-/* Free resources. */
- reg_props = astAnnul( reg_props );
- }
-
-/* Decrease any indentation, and then append a closing parenthesis. */
- if( indent > 2 ) {
- indent -= 3;
- for( i = 0; i < indent; i++ ) {
- result = astAppendString( result, nc, " " );
- }
- }
- result = astAppendString( result, nc, ") " );
-
-/* If we are about to return fomr the top-level, start a new line. */
- if( indent > 0 && indent < 6 ) {
- astPutNextText( this, result );
- *nc = 0;
- for( i = 0; i < indent; i++ ) {
- result = astAppendString( result, nc, " " );
- }
- *crem = linelen - indent;
- }
- }
-
-/* Ensure that no error is reported if an attempt is made to access a
- non-existent KeyMap entry. */
- astSetKeyError( km, 0 );
-
-/* Return the buffer pointer. */
- return result;
-}
-
-static AstObject *Read( AstChannel *this_channel, int *status ) {
-/*
-* Name:
-* Read
-
-* Purpose:
-* Read an Object from a Channel.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* AstObject *Read( AstChannel *this_channel, int *status )
-
-* Class Membership:
-* StcsChan member function (over-rides the astRead method
-* inherited from the Channel class).
-
-* Description:
-* This function reads an Object from an StcsChan.
-
-* Parameters:
-* this
-* Pointer to the StcsChan.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Object.
-*/
-
-/* Local Variables: */
- AstFrame *spacefrm; /* Pointer to SpaceFrame for space sub-phrase */
- AstFrameSet *fs; /* Temporary FrameSet */
- AstKeyMap *full_props; /* KeyMap holding all sub-phrase properties */
- AstKeyMap *props; /* KeyMap holding current sub-phrase properties */
- AstObject *new; /* Pointer to returned Object */
- AstObject *obj; /* Pointer to Object extracted from a KeyMap */
- AstPrism *tr; /* Temporary Region pointer */
- AstRegion *full_co; /* Region describing full coord position */
- AstRegion *full_enc; /* Region describing full enclosure */
- AstRegion *red_co; /* Region describing red-shift coord */
- AstRegion *red_enc; /* Region describing red-shift enclosure */
- AstRegion *space_co; /* Region describing space coord */
- AstRegion *space_enc; /* Region describing space enclosure */
- char **words; /* Array of pointers to individual words */
- int nword; /* Number of words returned */
- AstRegion *spec_co; /* Region describing spectral coord */
- AstRegion *spec_enc; /* Region describing spectral enclosure */
- AstRegion *time_co; /* Region describing time coord */
- AstRegion *time_enc; /* Region describing time enclosure */
- AstSpecFrame *redfrm; /* Pointer to SpecFrame for redshift sub-phrase */
- AstSpecFrame *specfrm; /* Pointer to SpecFrame for spectral sub-phrase */
- AstStcsChan *this; /* Pointer to the StcsChan structure */
- AstStdOfRestType sor; /* Standard of rest */
- AstSystemType sys; /* Frame System attribute value */
- AstTimeFrame *tf1; /* Temporary TimeFrame */
- AstTimeFrame *timefrm; /* Pointer to TimeFrame for time sub-phrase */
- AstTimeScaleType ts; /* TimeFrame TimeScale attribute value */
- WordContext con; /* Context for finding next source word */
- char *fbuf; /* Pointer to buffer holding document fragment */
- char *frame; /* Space frame name */
- char *unit; /* Pointer to unit string */
- const char *new_ts; /* Time scale string */
- double epoch; /* Value to use for the Epoch attribue */
- double fill; /* Filling factor */
- double hilim; /* Axis upper limit */
- double lolim; /* Axis lower limit */
- double scale; /* Units scaling factor */
- int nval; /* No. of values read from KeyMap */
- double vals[ 10 ]; /* Values read from KeyMap */
- double start; /* Start time */
- double stop; /* Stop time */
- double time; /* Time value */
- double time_origin; /* Value to use as TimeFrame TimeOrigin*/
- double value; /* Axis value */
- int iaxis; /* Axis index */
- int is_skyframe; /* Is the space frame a SkyFrame? */
- int level; /* Warning reporting level */
- int naxes; /* No. of space Frame axes */
- int nwant; /* Number of objects to return */
- int use_co; /* Do we have a full coordinate position? */
- int use_enc; /* Do we have a full enclosure? */
- int want_co; /* Is the Coordinates component wanted? */
- int want_enc; /* Is the enclosure region wanted? */
- int want_props; /* Are the STC-S properties wanted? */
- const char *cval; /* Pointer to property value */
- const char *type; /* Type of redshift axis */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Obtain a pointer to the StcsChan structure. */
- this = (AstStcsChan *) this_channel;
-
-/* Initialise. */
- epoch = AST__BAD;
- start = AST__BAD;
- stop = AST__BAD;
- time = AST__BAD;
- time_co = NULL;
- time_enc = NULL;
- space_co = NULL;
- space_enc = NULL;
- spec_co = NULL;
- spec_enc = NULL;
- red_co = NULL;
- red_enc = NULL;
- use_co = 1;
- use_enc = 0;
-
-/* Read the STC-S description from the external source, parse it, and
- create a KeyMap containing the parsed property values. */
- full_props = ReadProps( this, status );
-
-/* If the STC-S description contained a time sub-phrase, get the KeyMap
- containing the proprties of the time sub-phrase, and then create AST
- Regions describing the time coordinate value and its enclosing Region. */
- if( astMapGet0A( full_props, "TIME_PROPS", &obj ) ) {
- props = (AstKeyMap *) obj;
-
-/* Create the default TimeFrame */
- timefrm = astTimeFrame( " ", status );
-
-/* Get the TIMESCALE property from the KeyMap, and identify the corresponding
- AST TimeScale. */
- ts = AST__BADTS;
- new_ts = NULL;
- level = 3;
-
- if( astMapGet0C( props, "TIMESCALE", &cval ) ) {
-
- if( astChrMatch( cval, "TT" ) ) {
- ts = AST__TT;
-
- } else if( astChrMatch( cval, "TDT" ) ) {
- ts = AST__TT;
- new_ts = "TT";
-
- } else if( astChrMatch( cval, "ET" ) ) {
- ts = AST__TT;
- new_ts = "TT";
-
- } else if( astChrMatch( cval, "TAI" ) ) {
- ts = AST__TAI;
-
- } else if( astChrMatch( cval, "IAT" ) ) {
- ts = AST__TAI;
- new_ts = "TAI";
-
- } else if( astChrMatch( cval, "UTC" ) ) {
- ts = AST__UTC;
-
- } else if( astChrMatch( cval, "TEB" ) ) {
- ts = AST__TDB;
- new_ts = "TDB";
- level = 1;
-
- } else if( astChrMatch( cval, "TDB" ) ) {
- ts = AST__TDB;
-
- } else if( astChrMatch( cval, "TCG" ) ) {
- ts = AST__TCG;
-
- } else if( astChrMatch( cval, "TCB" ) ) {
- ts = AST__TCB;
-
- } else if( astChrMatch( cval, "LST" ) ) {
- ts = AST__LMST;
-
- } else if( astChrMatch( cval, "nil" ) ) {
- astAddWarning( this, 2, "Time scale defaulting to 'TAI'.",
- "astRead", status );
-
- } else if( astOK ){
- astError( AST__BADIN, "astRead(StcsChan): Unknown time scale '%s'.",
- status, cval );
- }
-
- } else {
- astAddWarning( this, 2, "Time scale defaulting to 'TAI'.",
- "astRead", status );
- }
-
-/* Issue a warning if a different time-scale was substituted for the supplied
- time-scale. */
- if( new_ts ) {
- astAddWarning( this, level, "AST does not support the '%s' time "
- "scale. The '%s' timescale is being used instead.",
- "astRead", status, cval, new_ts );
- }
-
-/* If we got a time scale, set the TimeScale attribute in the TimeFrame
- to the same value. */
- if( ts != AST__BADTS ) astSetTimeScale( timefrm, ts );
-
-/* The AST TimeFrame class has no reference position, so allow any reference
- position but issue a warning for anything other than "TOPOCENTER" and
- "UNKNOWNRefPos". */
- if( !astMapGet0C( props, "REFPOS", &cval ) ) cval = "UNKNOWNRefPos";
- if( !astChrMatch( cval, "TOPOCENTER" ) ) {
- astAddWarning( this, 1, "AST only supports topocentric time frames, "
- "so 'TOPOCENTER' will be used in place of '%s'.",
- "astRead", status, cval );
- }
-
-/* Get the times describes by the time sub-phrase as MJD values. */
- astMapGet0D( props, "MJDSTART", &start );
- astMapGet0D( props, "MJDTIME", &time );
- astMapGet0D( props, "MJDSTOP", &stop );
-
-/* Get the earliest time represented by the time sub-phrase. We use this
- as the TimeOrigin for the TimeFrame, and also as the Epoch for all
- frames. */
- time_origin = start;
- if( time_origin == AST__BAD ) time_origin = time;
- if( time_origin == AST__BAD ) time_origin = stop;
- epoch = time_origin;
-
-/* Store the TimeOrigin value in the TimeFrame, modifying the time values
- accordingly. */
- if( time_origin != AST__BAD ) {
- astSetTimeOrigin( timefrm, time_origin );
- if( start != AST__BAD ) start -= time_origin;
- if( stop != AST__BAD ) stop -= time_origin;
- if( time != AST__BAD ) time -= time_origin;
- }
-
-/* Convert the epoch to TDB. */
- if( epoch != AST__BAD && ts != AST__TDB ) {
- tf1 = astCopy( timefrm );
- astSetTimeScale( tf1, AST__TDB );
- fs = astConvert( timefrm, tf1, "" );
- astTran1( fs, 1, &epoch, 1, &epoch );
- fs = astAnnul( fs );
- tf1 = astAnnul( tf1 );
- }
-
-/* Store the epoch value in the TimeFrame. */
- if( epoch != AST__BAD ) astSetEpoch( timefrm, epoch );
-
-/* Create a suitable Region to describe the enclosure for the time coords */
- if( start != AST__BAD || stop != AST__BAD ) {
- time_enc = (AstRegion *) astInterval( timefrm, &start, &stop,
- NULL, "", status );
- use_enc = 1;
- }
-
-/* Create a suitable Region to describe the time coords contained within
- the above enclosure. */
- if( time != AST__BAD ) {
- time_co = (AstRegion *) SinglePointList( (AstFrame *) timefrm,
- &time, NULL, status);
- } else {
- use_co = 0;
- }
-
-/* If no enclosure Region was created for the time sub-phrase, use a
- copy of any coordinate region. This is because each sub-phrase needs
- to have an enclosure of some sort if they are to be combined in parallel
- into an enclose for the whole CmpFrame. */
- if( ! time_enc && time_co ) time_enc = astCopy( time_co );
-
-/* Set the filling factor. */
- if( time_enc && astMapGet0D( props, "FILLFACTOR", &fill ) ) {
- astSetFillFactor( time_enc, fill );
- }
-
-/* Get the units in which the time error values are given, and get the
- scaling factor that converts them into days. */
- if( astMapGet0C( props, "UNIT", &cval ) ) {
- if( !strcmp( cval, "s" ) ) {
- scale = 1.0/86400.0;
-
- } else if( !strcmp( cval, "d" ) ) {
- scale = 1.0;
-
- } else if( !strcmp( cval, "a" ) ) {
- scale = 365.25;
-
- } else if( !strcmp( cval, "yr" ) ) {
- scale = 365.25;
-
- } else if( !strcmp( cval, "cy" ) ) {
- scale = 36525.0;
-
- } else if( astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Unsupported "
- "units (%s) for the time axis within an "
- "STC-S description.", status, unit );
- }
-
- } else {
- scale = 1.0/86400.0;
- }
-
-/* Associate an uncertainty with the two Regions. */
- if( astMapGet1D( props, "DERROR", 2, &nval, vals ) ) {
- if( nval > 1 ) {
- astAddWarning( this, 1, "An STC-S time sub-phrase contains an "
- "Error range. AST does not support error ranges "
- "so the mid value will be used as the error.",
- "astRead", status );
- vals[ 0 ] = 0.5*( vals[ 0 ] + vals[ 1 ] );
- }
-
- SetUnc( time_enc, time_co, (AstFrame *) timefrm, 0, scale, vals, 1,
- status );
- }
-
-/* Free resources */
- props = astAnnul( props );
- timefrm = astAnnul( timefrm );
- }
-
-/* If the STC-S description contained a space sub-phrase, get the KeyMap
- containing the proprties of the space sub-phrase, and then create AST
- Regions describing the spatial position and its enclosing Region. */
- if( astMapGet0A( full_props, "SPACE_PROPS", &obj ) ) {
- props = (AstKeyMap *) obj;
-
-/* The class of Frame (SkyFrame or basic Frame) is determined by the
- "FLAVOR". */
- is_skyframe = 0;
- if( astMapGet0C( props, "FLAVOUR", &cval ) ) {
-
- if( astChrMatch( cval, "SPHER2" ) ) {
- spacefrm = (AstFrame *) astSkyFrame( "", status );
- is_skyframe = 1;
-
- } else if( astChrMatch( cval, "CART1" ) ) {
- spacefrm = astFrame( 1, "", status );
-
- } else if( astChrMatch( cval, "CART2" ) ) {
- spacefrm = astFrame( 2, "", status );
-
- } else if( astChrMatch( cval, "CART3" ) ) {
- spacefrm = astFrame( 3, "", status );
-
- } else {
- astError( AST__BADIN, "astRead(StcsChan): Unsupported "
- "space 'Flavor' (%s) found in STC-S description.",
- status, cval );
- }
-
- } else {
- spacefrm = (AstFrame *) astSkyFrame( "", status );
- is_skyframe = 1;
- }
-
-/* Consider each supported space frame. Report an error for frames
- not supported by AST. */
- if( astMapGet0C( props, "FRAME", &cval ) ) {
- if( astChrMatch( cval, "ICRS" ) ) {
- sys = AST__ICRS;
-
- } else if( astChrMatch( cval, "FK5" ) ) {
- sys = AST__FK5;
-
- } else if( astChrMatch( cval, "FK4" ) ) {
- sys = AST__FK4;
-
- } else if( astChrMatch( cval, "J2000" ) ) {
- sys = AST__FK5;
-
- } else if( astChrMatch( cval, "B1950" ) ) {
- sys = AST__FK4;
-
- } else if( astChrMatch( cval, "ECLIPTIC" ) ) {
- sys = AST__ECLIPTIC;
-
- } else if( astChrMatch( cval, "GALACTIC" ) ) {
- sys = AST__GALACTIC;
-
- } else if( astChrMatch( cval, "GALACTIC_II" ) ) {
- sys = AST__GALACTIC;
-
- } else if( astChrMatch( cval, "SUPER_GALACTIC" ) ) {
- sys = AST__SUPERGALACTIC;
-
- } else if( astChrMatch( cval, "UNKNOWNFrame" ) ) {
- sys = AST__UNKNOWN;
-
- } else {
- sys = AST__UNKNOWN;
- astAddWarning( this, 1, "'UNKNOWNFrame' being used in place of "
- "unsupported frame '%s' in an STC-S description.",
- "astRead", status, cval );
- }
-
- } else {
- sys = AST__UNKNOWN;
- astAddWarning( this, 1, "Space frame defaulting to 'UNKNOWNFrame' "
- "in an STC-S description.", "astRead", status );
- }
-
-/* We can set the System (only needed for SkyFrames). */
- if( is_skyframe ) {
- astSetSystem( spacefrm, sys );
-
-/* If we have a basic Frame, set the Domain equal to the STC-S frame value. */
- } else {
- astSetDomain( spacefrm, frame );
- }
-
-/* Set the epoch of the space frame. */
- if( epoch != AST__BAD ) astSetEpoch( spacefrm, epoch );
-
-/* The AST Frame and SkyFrame class has no reference position, so for
- SkyFrames we consider "TOPOCENTER" and "UNKNOWN" acceptable and all
- other unsupported. For other Frames we allow any reference position. */
- if( !astMapGet0C( props, "REFPOS", &cval ) ) cval = "UNKNOWNRefPos";
- if( is_skyframe && !astChrMatch( cval, "TOPOCENTER" ) ) {
- astAddWarning( this, 1, "AST only supports topocentric sky frames, "
- "so 'TOPOCENTER' will be used in place of '%s'.",
- "astRead", status, cval );
- }
-
-/* Get the number of spatial axes. */
- naxes = astGetNaxes( spacefrm );
-
-/* Get the units strings. */
- if( !astMapGet0C( props, "UNIT", &cval ) ) {
- if( is_skyframe ) {
- cval = "deg";
- } else {
- cval = "m";
- }
- }
-
-/* In AST, SkyFrames always use radians, so set up a scaling factor to
- convert supplied axis values into radians. */
- if( is_skyframe ) {
-
- if( !strcmp( cval, "deg" ) || !strcmp( cval, "deg deg" ) ) {
- scale = AST__DD2R;
-
- } else if( !strcmp( cval, "arcmin" ) || !strcmp( cval, "arcmin arcmin" ) ) {
- scale = AST__DD2R/60.0;
-
- } else if( !strcmp( cval, "arcsec" ) || !strcmp( cval, "arcsec arcsec" ) ) {
- scale = AST__DD2R/3600.0;
-
- } else if( astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Unsupported "
- "units (%s) for a spherical co-ordinate system "
- "within an STC-S description: '%s'.", status,
- cval, ContextFragment( &con, &fbuf, status ) );
- }
-
-/* Basic Frames can use any of the allowed units, so use a scale factor of
- 1.0. Also set the active unit flag in the space frame to enable intelligent
- units conversion by astConvert etc. */
- } else {
- scale = 1.0;
- astSetActiveUnit( spacefrm, 1 );
-
-/* Basic Frames can have different units on different axes. So split the
- units property up into separate words. */
- words = astChrSplit( cval, &nword );
-
-/* Set values for the Unit attributes of the Frame. Replicate the last
- supplied unit string for any extra axes. */
- for( iaxis = 0; iaxis < naxes; iaxis++ ) {
- if( iaxis < nword ) {
- astSetUnit( spacefrm, iaxis, words[ iaxis ] );
- } else {
- astSetUnit( spacefrm, iaxis, words[ nword - 1 ] );
- }
- }
-
-/* Free resources. */
- for( iaxis = 0; iaxis < nword; iaxis++ ) {
- words[ iaxis ] = astFree( words[ iaxis ] );
- }
- words = astFree( words );
- }
-
-/* Create a suitable Region to enclose the space positions. This
- includes scaling the supplied axis values to the units used by
- the Frame. */
- space_enc = MakeSpaceRegion( props, spacefrm, scale, status );
- if( space_enc ) use_enc = 1;
-
-/* Create a suitable Region to describe the space coords contained within
- the above enclosure. If any sub-phrase has no coordinate value, then
- we cannot produce a PointList describing the complete coordinate set. */
- if( astMapGet1D( props, "DPOSITION", naxes, &nval, vals ) ) {
- for( iaxis = 0; iaxis < nval; iaxis++ ) vals[ iaxis ] *= scale;
- space_co = (AstRegion *) SinglePointList( spacefrm, vals, NULL,
- status);
- } else {
- use_co = 0;
- }
-
-/* If no enclosure Region was created for the space sub-phrase, use a
- copy of any coordinate region. This is because each sub-phrase needs
- to have an enclosure of some sort if they are to be combined in parallel
- into an enclose for the whole CmpFrame. */
- if( ! space_enc && space_co ) space_enc = astCopy( space_co );
-
-/* Set the filling factor. */
- if( space_enc && astMapGet0D( props, "FILLFACTOR", &fill ) ) {
- astSetFillFactor( space_enc, fill );
- }
-
-/* Associate an uncertainty with the two Regions. */
- if( astMapGet1D( props, "DERROR", 2*naxes, &nval, vals ) ) {
- if( nval > naxes ) {
- astAddWarning( this, 1, "An STC-S space sub-phrase contains an "
- "Error range. AST does not support error ranges "
- "so the mid value will be used as the error.",
- "astRead", status );
- for( iaxis = 0; iaxis < naxes; iaxis++ ) {
- vals[ iaxis ] = 0.5*( vals[ iaxis ] + vals[ iaxis + naxes ] );
- }
-
-/* If insufficient error values have been supplied, replicate the last
- one. */
- } else {
- for( iaxis = nval; iaxis < naxes; iaxis++ ) {
- vals[ iaxis ] = vals[ nval - 1 ];
- }
- }
-
-/* Set the uncertainty in the two space regions. */
- SetUnc( space_enc, space_co, (AstFrame *) spacefrm, is_skyframe,
- scale, vals, naxes, status );
- }
-
-/* Free resources */
- props = astAnnul( props );
- spacefrm = astAnnul( spacefrm );
- }
-
-
-
-/* If the STC-S description contained a velocity sub-phrase, issue a
- warning. */
- if( astMapGet0A( full_props, "VELOCITY_PROPS", &obj ) ) {
- astAddWarning( this, 1, "Ignoring a velocity sub-phrase found in "
- "an STC-S description.", "astRead", status );
- obj = astAnnul( obj );
- }
-
-
-/* If the STC-S description contained a spectral sub-phrase, get the KeyMap
- containing the proprties of the spectral sub-phrase, and then create AST
- Regions describing the spectral coordinate value and its enclosing Region. */
- if( astMapGet0A( full_props, "SPECTRAL_PROPS", &obj ) ) {
- props = (AstKeyMap *) obj;
-
-/* Create the default SpecFrame */
- specfrm = astSpecFrame( " ", status );
-
-/* Get the REFPOS property from the KeyMap, and identify the corresponding
- AST StdOfRest. */
- sor = AST__BADSOR;
- if( astMapGet0C( props, "REFPOS", &cval ) ) {
-
- if( astChrMatch( cval, "GEOCENTER" ) ) {
- sor = AST__GESOR;
-
- } else if( astChrMatch( cval, "BARYCENTER" ) ) {
- sor = AST__BYSOR;
-
- } else if( astChrMatch( cval, "HELIOCENTER" ) ) {
- sor = AST__HLSOR;
-
- } else if( astChrMatch( cval, "TOPOCENTER" ) ) {
- sor = AST__TPSOR;
-
- } else if( astChrMatch( cval, "LSR" ) ||
- astChrMatch( cval, "LSRK" ) ) {
- sor = AST__LKSOR;
-
- } else if( astChrMatch( cval, "LSRD" ) ) {
- sor = AST__LDSOR;
-
- } else if( astChrMatch( cval, "GALACTIC_CENTER" ) ) {
- sor = AST__GLSOR;
-
- } else {
- astAddWarning( this, 1, "Using 'HELIOCENTER' in place of "
- "unsupported spectral reference position '%s' "
- "found in an STC-S description.", "astRead",
- status, cval );
- }
-
- } else {
- astAddWarning( this, 2, "Spectral reference position defaulting to "
- "'HELIOCENTER' in an STC-S description.", "astRead",
- status );
- }
-
-/* If we got a ref pos, set the StdOfRest attribute in the SpecFrame. */
- if( sor != AST__BADSOR ) astSetStdOfRest( specfrm, sor );
-
-/* Get the units. */
- if( !astMapGet0C( props, "UNIT", &cval ) ) cval = "Hz";
-
-
-/* Set the spectral system implied by the unit string. */
- if( !cval || !strcmp( cval, "Hz" ) || !strcmp( cval, "MHz" ) ||
- !strcmp( cval, "GHz" ) ) {
- astSetSystem( specfrm, AST__FREQ );
-
- } else if( !strcmp( cval, "m" ) || !strcmp( cval, "mm" ) ||
- !strcmp( cval, "um" ) || !strcmp( cval, "nm" ) ||
- !strcmp( cval, "Angstrom" ) ) {
- astSetSystem( specfrm, AST__WAVELEN );
-
- } else if( !strcmp( cval, "eV" ) || !strcmp( cval, "keV" ) ||
- !strcmp( cval, "MeV" ) ) {
- astSetSystem( specfrm, AST__ENERGY );
-
- } else if( astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Unsupported spectral "
- "units (%s) found within an STC-S description.",
- status, cval );
- }
-
-/* Set the units. */
- astSetUnit( specfrm, 0, cval );
-
-/* Set the epoch */
- if( epoch != AST__BAD ) astSetEpoch( specfrm, epoch );
-
-/* Create a suitable Region to describe the enclosure for the spectral
- coords */
- if( astMapGet0D( props, "LOLIMIT", &lolim ) ) {
- astMapGet0D( props, "HILIMIT", &hilim );
- spec_enc = (AstRegion *) astInterval( specfrm, &lolim, &hilim,
- NULL, "", status );
- use_enc = 1;
- }
-
-/* Create a suitable Region to describe the spectral coords contained within
- the above enclosure. If any sub-phrase has no coordinate value, then
- we cannot produce a PointList describing the complete coordinate set. */
- if( astMapGet0D( props, "SPECTRAL", &value ) ) {
- spec_co = (AstRegion *) SinglePointList( (AstFrame *) specfrm,
- &value, NULL, status);
- } else {
- use_co = 0;
- }
-
-/* If no enclosure Region was created for the spectral sub-phrase, use a
- copy of any coordinate region. This is because each sub-phrase needs
- to have an enclosure of some sort if they are to be combined in parallel
- into an enclose for the whole CmpFrame. */
- if( ! spec_enc && spec_co ) spec_enc = astCopy( spec_co );
-
-/* Set the filling factor. */
- if( spec_enc && astMapGet0D( props, "FILLFACTOR", &fill ) ) {
- astSetFillFactor( spec_enc, fill );
- }
-
-
-/* Associate an uncertainty with the two Regions. */
- if( astMapGet1D( props, "DERROR", 2, &nval, vals ) ) {
- if( nval > 1 ) {
- astAddWarning( this, 1, "An STC-S spectral sub-phrase contains an "
- "Error range. AST does not support error ranges "
- "so the mid value will be used as the error.",
- "astRead", status );
- vals[ 0 ] = 0.5*( vals[ 0 ] + vals[ 1 ] );
- }
-
- SetUnc( spec_enc, spec_co, (AstFrame *) specfrm, 0, 1.0, vals, 1,
- status );
- }
-
-/* Free resources */
- props = astAnnul( props );
- specfrm = astAnnul( specfrm );
- }
-
-
-
-
-/* If the STC-S description contained a redshift sub-phrase, get the KeyMap
- containing the properties of the redshift sub-phrase, and then create AST
- Regions describing the redshift coordinate value and its enclosing Region. */
- if( astMapGet0A( full_props, "REDSHIFT_PROPS", &obj ) ) {
- props = (AstKeyMap *) obj;
-
-/* Create the default SpecFrame */
- redfrm = astSpecFrame( "Domain=REDSHIFT", status );
-
-/* Get the REFPOS property from the KeyMap, and identify the corresponding
- AST StdOfRest. */
- sor = AST__BADSOR;
- if( astMapGet0C( props, "REFPOS", &cval ) ) {
-
- if( astChrMatch( cval, "GEOCENTER" ) ) {
- sor = AST__GESOR;
-
- } else if( astChrMatch( cval, "BARYCENTER" ) ) {
- sor = AST__BYSOR;
-
- } else if( astChrMatch( cval, "HELIOCENTER" ) ) {
- sor = AST__HLSOR;
-
- } else if( astChrMatch( cval, "TOPOCENTER" ) ) {
- sor = AST__TPSOR;
-
- } else if( astChrMatch( cval, "LSR" ) ||
- astChrMatch( cval, "LSRK" ) ) {
- sor = AST__LKSOR;
-
- } else if( astChrMatch( cval, "LSRD" ) ) {
- sor = AST__LDSOR;
-
- } else if( astChrMatch( cval, "GALACTIC_CENTER" ) ) {
- sor = AST__GLSOR;
-
- } else {
- astAddWarning( this, 1, "Using 'HELIOCENTER' in place of "
- "unsupported redshift reference position '%s' "
- "found in an STC-S description.", "astRead",
- status, cval );
- }
-
- } else {
- astAddWarning( this, 2, "Redshift reference position defaulting to "
- "'HELIOCENTER' in an STC-S description.", "astRead",
- status );
- }
-
-/* If we got a ref pos, set the StdOfRest attribute in the SpecFrame. */
- if( sor != AST__BADSOR ) astSetStdOfRest( redfrm, sor );
-
-/* Get the redshift type. */
- if( !astMapGet0C( props, "TYPE", &type ) ) type = "REDSHIFT";
-
-/* Now get the velocity definition, and set the equivalent SpecFrame
- System value. AST only supports optical redshift, so report an error
- or a warning for unsupported combinations. */
- if( astMapGet0C( props, "DOPPLERDEF", &cval ) ){
-
- if( astChrMatch( cval, "OPTICAL" ) ) {
- if( astChrMatch( type, "VELOCITY" ) ){
- astSetSystem( redfrm, AST__VOPTICAL );
- } else {
- astSetSystem( redfrm, AST__REDSHIFT );
- }
-
- } else if( astChrMatch( cval, "RADIO" ) ) {
- if( astChrMatch( type, "VELOCITY" ) ){
- astSetSystem( redfrm, AST__VRADIO );
- } else {
- astSetSystem( redfrm, AST__REDSHIFT );
- astAddWarning( this, 1, "STC-S RADIO redshift not supported. "
- "Assuming OPTICAL redshift instead.", "astRead",
- status );
- }
-
- } else if( astChrMatch( cval, "RELATIVISTIC" ) ) {
- if( astChrMatch( type, "VELOCITY" ) ){
- astSetSystem( redfrm, AST__VREL );
- } else {
- astSetSystem( redfrm, AST__REDSHIFT );
- astAddWarning( this, 1, "STC-S RELATIVISTIC redshift not supported. "
- "Assuming OPTICAL redshift instead.", "astRead",
- status );
- }
-
- } else {
- if( astChrMatch( type, "VELOCITY" ) ){
- astSetSystem( redfrm, AST__VOPTICAL );
- astAddWarning( this, 1, "Doppler velocity definition defaulting"
- " to 'OPTICAL' in an STC-S description.",
- "astRead", status );
-
- } else {
- astSetSystem( redfrm, AST__REDSHIFT );
- }
- }
- }
-
-/* Set the units. */
- if( astChrMatch( type, "VELOCITY" ) ){
- if( astMapGet0C( props, "UNIT", &cval ) ) {
- astSetUnit( redfrm, 0, cval );
- } else {
- astSetUnit( redfrm, 0, "km/s" );
- }
-
- } else if( astMapGet0C( props, "UNIT", &cval ) ) {
- astAddWarning( this, 1, "Ignoring units (%s) specified for REDSHIFT "
- "in an STC-S description.", "astRead", status, cval );
- }
-
-/* Set the epoch */
- if( epoch != AST__BAD ) astSetEpoch( redfrm, epoch );
-
-/* Create a suitable Region to describe the enclosure for the redshift
- coords */
- if( astMapGet0D( props, "LOLIMIT", &lolim ) ) {
- astMapGet0D( props, "HILIMIT", &hilim );
- red_enc = (AstRegion *) astInterval( redfrm, &lolim, &hilim,
- NULL, "", status );
- use_enc = 1;
- }
-
-/* Create a suitable Region to describe the redshift coords contained within
- the above enclosure. If any sub-phrase has no coordinate value, then
- we cannot produce a PointList describing the complete coordinate set. */
- if( astMapGet0D( props, "REDSHIFT", &value ) ) {
- red_co = (AstRegion *) SinglePointList( (AstFrame *) redfrm,
- &value, NULL, status);
- } else {
- use_co = 0;
- }
-
-/* If no enclosure Region was created for the redshift sub-phrase, use a
- copy of any coordinate region. This is because each sub-phrase needs
- to have an enclosure of some sort if they are to be combined in parallel
- into an enclose for the whole CmpFrame. */
- if( ! red_enc && red_co ) red_enc = astCopy( red_co );
-
-/* Set the filling factor. */
- if( red_enc && astMapGet0D( props, "FILLFACTOR", &fill ) ) {
- astSetFillFactor( red_enc, fill );
- }
-
-/* Associate an uncertainty with the two Regions. */
- if( astMapGet1D( props, "DERROR", 2, &nval, vals ) ) {
- if( nval > 1 ) {
- astAddWarning( this, 1, "An STC-S redshift sub-phrase contains an "
- "Error range. AST does not support error ranges "
- "so the mid value will be used as the error.",
- "astRead", status );
- vals[ 0 ] = 0.5*( vals[ 0 ] + vals[ 1 ] );
- }
-
- SetUnc( red_enc, red_co, (AstFrame *) redfrm, 0, 1.0, vals, 1,
- status );
- }
-
-/* Free resources */
- props = astAnnul( props );
- redfrm = astAnnul( redfrm );
- }
-
-/* If a particular position was specified by the STC_S document, create the
- full position from the individual sub-phrase position */
- if( use_co ) {
- new = time_co ? astClone( time_co ) : NULL;
-
- if( space_co ) {
- if( new ) {
- tr = astPrism( new, space_co, "", status );
- (void) astAnnul( new );
- new = (AstObject *) tr;
- } else {
- new = astClone( space_co );
- }
- }
-
- if( spec_co ) {
- if( new ) {
- tr = astPrism( new, spec_co, "", status );
- (void) astAnnul( new );
- new = (AstObject *) tr;
- } else {
- new = astClone( spec_co );
- }
- }
-
- if( red_co ) {
- if( new ) {
- tr = astPrism( new, red_co, "", status );
- (void) astAnnul( new );
- new = (AstObject *) tr;
- } else {
- new = astClone( red_co );
- }
- }
-
- if( new ) {
- full_co = astSimplify( new );
- new = astAnnul( new );
- } else {
- full_co = NULL;
- }
-
- } else {
- full_co = NULL;
- }
-
-/* If an enclosing volume was specified by the STC_S document, create the
- full enclosure Region from the individual sub-phrase enclosure Regions. */
- if( use_enc ) {
- new = time_enc ? astClone( time_enc ) : NULL;
-
- if( space_enc ) {
- if( new ) {
- tr = astPrism( new, space_enc, "", status );
- (void) astAnnul( new );
- new = (AstObject *) tr;
- } else {
- new = astClone( space_enc );
- }
- }
-
- if( spec_enc ) {
- if( new ) {
- tr = astPrism( new, spec_enc, "", status );
- (void) astAnnul( new );
- new = (AstObject *) tr;
- } else {
- new = astClone( spec_enc );
- }
- }
-
- if( red_enc ) {
- if( new ) {
- tr = astPrism( new, red_enc, "", status );
- (void) astAnnul( new );
- new = (AstObject *) tr;
- } else {
- new = astClone( red_enc );
- }
- }
- full_enc = astSimplify( new );
- new = astAnnul( new );
-
- } else {
- full_enc = NULL;
- }
-
-/* See which, and how many, items are to be returned. */
- nwant = 0;
- if( ( want_enc = astGetStcsArea( this ) ) ) nwant++;
- if( ( want_co = astGetStcsCoords( this ) ) ) nwant++;
- if( ( want_props = astGetStcsProps( this ) ) ) nwant++;
-
-/* If one, and only one, of the three items is to be returned, return it. */
- new = NULL;
- if( nwant == 1 ) {
- if( want_enc && full_enc ) {
- new = astClone( full_enc );
- } else if( want_co && full_co ) {
- new = astClone( full_co );
- } else if( want_props && full_props ){
- new = astClone( full_props );
- }
-
-/* If more than one item is to be returned, put them into a KeyMap and
- return the KeyMap. */
- } else if( nwant > 1 ) {
- new = (AstObject *) astKeyMap( " ", status );
- if( want_enc && full_enc ) astMapPut0A( new, "AREA", full_enc, NULL );
- if( want_co && full_co ) astMapPut0A( new, "COORDS", full_co, NULL );
- if( want_props && full_props ) astMapPut0A( new, "PROPS", full_props, NULL );
-
-/* Report an error if nothing is to be returned. */
- } else if( astOK ){
- astError( AST__ATTIN, "astRead(StcsChan): The StcsArea, StcsCoords "
- "and StcsProps attributes indicate that nothing is to be "
- "returned (possible programming error).", status );
- }
-
-/* Free resources */
- if( space_enc ) space_enc = astAnnul( space_enc );
- if( spec_enc ) spec_enc = astAnnul( spec_enc );
- if( time_enc ) time_enc = astAnnul( time_enc );
- if( red_enc ) red_enc = astAnnul( red_enc );
- if( space_co ) space_co = astAnnul( space_co );
- if( spec_co ) spec_co = astAnnul( spec_co );
- if( time_co ) time_co = astAnnul( time_co );
- if( red_co ) red_co = astAnnul( red_co );
- if( full_enc ) full_enc = astAnnul( full_enc );
- if( full_co ) full_co = astAnnul( full_co );
- if( full_props ) full_props = astAnnul( full_props );
-
-/* If an error occurred, clean up by deleting the new Object and
- return a NULL pointer. */
- if ( !astOK ) new = astDelete( new );
-
-/* Return the pointer to the new Object. */
- return new;
-}
-
-static AstKeyMap *ReadProps( AstStcsChan *this, int *status ) {
-/*
-* Name:
-* ReadProps
-
-* Purpose:
-* Read STC-S properties from the source and store in a KeyMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* AstKeyMap *ReadProps( AstStcsChan *this, int *status )
-
-* Class Membership:
-* StcsChan member function
-
-* Description:
-* This function parses the list of space-separated words read from the
-* source function, identifies the purpose of each word within the STC-S
-* description, and stores the words in a returned KeyMap.
-
-* Parameters:
-* this
-* Pointer to the StcsChan.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new KeyMap. This will contain up to five entries
-* with any or all of the following keys: TIME_PROPS, SPACE_PROPS,
-* VELOCITY_PROPS, SPECTRAL_PROPS, REDSHIFT_PROPS. If an entry is absent,
-* it means the STC-S description did not contain the corresponding
-* sub-phrase. The value associated with each of these entries will be a
-* KeyMap. These will contain values for the sub-phrase proprties read
-* from the STC-S description. Properties that are not specified in
-* the STC-S description will not be present in the KeyMap. The values
-* stored in the KeyMap are the words read form the STC-S description
-* without any conversion or other processing.
-*/
-
-/* Local Constants: */
-#define MAXVAL 6
-
-/* Local Variables: */
- AstKeyMap *props; /* KeyMap holding current sub-phrase properties */
- AstKeyMap *result; /* Returned KeyMap holding all properties */
- AstTimeFrame *timefrm; /* Used for unformatting ISO date-times */
- WordContext con; /* Context for finding next source word */
- char *fbuf; /* Pointer to buffer holding document fragment */
- char *prop; /* String holding complete property value */
- const char *subphrase; /* Name of current sub phrase */
- const char *t; /* Temporary character string pointer */
- const char *word; /* Pointer to next source word */
- double val[ MAXVAL ]; /* Array of numerical property values */
- double start; /* Start time (MJD) */
- double stop; /* Stop time (MJD) */
- double time; /* Time value (MJD) */
- double value; /* Axis value */
- int iaxis; /* Axis index */
- int is_jd; /* Is time value a JD rather than an MJD? */
- int nunit; /* Number of units strings supplied */
- int nval; /* Number of numerical values read */
- int naxes; /* No. of space Frame axes */
- int nc; /* Number of characters written to string */
- int new_word; /* Get a new word at the end of the pass? */
- int redid; /* Redshift sub-phrase component identifier */
- int spaceid; /* Space sub-phrase component identifier */
- int specid; /* Spectral sub-phrase component identifier */
- int timeid; /* Time sub-phrase component identifier */
- int velid; /* Velocity sub-phrase component identifier */
-
-/* The stage reached in the parsing of the STC-S description is indicated
- by the "look_for" variable. This variable is allowed the following
- values, indicating the item that is to be checked for next. */
- enum look_for_type {
- ERROR,
- FILL_FACTOR,
- FLAVOUR,
- FRAME,
- LIMITS,
- PIX_SIZE,
- POSITION,
- POSITION_INTERVAL,
- REDSHIFT_IDENTIFIER,
- RED_SPEC_LABEL,
- RED_SPEC_VALUE,
- REFPOS,
- RESOLUTION,
- SIZE,
- SPACE_IDENTIFIER,
- SPECTRAL_IDENTIFIER,
- START,
- STOP,
- TIME,
- TIME_IDENTIFIER,
- TIME_LABEL,
- TIME_SCALE,
- TYPE_DOPPLER,
- UNIT,
- VELOCITY_IDENTIFIER,
- VELOCITY
- } look_for;
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Create the returned KeyMap. */
- result = astKeyMap( " ", status );
-
-/* Initialise the word search context. */
- (void) GetNextWord( NULL, &con, status );
-
-/* Get a pointer to the first word in the STC-S description. */
- word = GetNextWord( this, &con, status );
-
-/* Indicate we are currently looking for the time sub-phrase (the first
- item in an STC-S description). */
- look_for = TIME_IDENTIFIER;
-
-/* Initialise everything else. */
- fbuf = NULL;
- naxes = 0;
- prop = NULL;
- props = NULL;
- redid = NULL_ID;
- spaceid = NULL_ID;
- specid = NULL_ID;
- subphrase = NULL;
- t = NULL;
- timeid = NULL_ID;
- velid = NULL_ID;
- timefrm = NULL;
-
-/* Loop until all words in the STC-S description have been interpreted or
- an error has occurred. */
- while( word && astOK ) {
-
-/* Initialise a flag to indicate that we have interpreted the current word
- sucesfully and so will need to get a new word before the next pass through
- this loop. If it turns out that we cannot interpret the current word
- in this pass, then this flag will be set to zero at some point, thus
- preventing a new word from being acquired and causing another attempt to
- re-interpret the current word in a different context. */
- new_word = 1;
-
-/* If we are currently looking for the time sub-phrase, see if the current
- word is any of the known time sub-phrase identifiers. Is so, move on
- to read the associated sub-phrase component. */
- if( look_for == TIME_IDENTIFIER ) {
-/* ------------------------------------------------------------------ */
-
-/* Assume that we will be moving on to read the fill factor (most time
- sub-phrases start with the fill factor ). */
- look_for = FILL_FACTOR;
-
-/* Now check the word to see if it a known time sub-phrase identifier. */
- if( astChrMatch( word, "TimeInterval" ) ) {
- timeid = TIME_INTERVAL_ID;
-
- } else if( astChrMatch( word, "StartTime" ) ) {
- timeid = START_TIME_ID;
-
- } else if( astChrMatch( word, "StopTime" ) ) {
- timeid = STOP_TIME_ID;
-
- } else if( astChrMatch( word, "Time" ) ) {
- look_for = TIME_SCALE; /* After "Time", we move on to find the
- timeid = TIME_ID; time-scale, not the fill factor */
-
-/* If the word is not a known time sub-phrase identifier, indicate that we
- should attempt to re-interpret the current word as a space sub-phrase
- identifier, rather than getting a new word. */
- } else {
- look_for = SPACE_IDENTIFIER;
- new_word = 0;
- }
-
-/* If we have found a time sub-phrase identifier, create a KeyMap to hold
- the properties of the time sub-phrase, and store the time sub-phrase
- identifier in the new KeyMap. */
- if( timeid != NULL_ID ) {
- subphrase = "time";
- props = astKeyMap( " ", status );
- astMapPut0A( result, "TIME_PROPS", props, NULL );
- astMapPut0C( props, "ID", word, NULL );
- naxes = 1;
- }
-
-
-
-/* If we are currently looking for the space sub-phrase, see if the current
- word is any of the known space sub-phrase identifiers. Is so, move on
- to read the associated sub-phrase component. */
- } else if( look_for == SPACE_IDENTIFIER ) {
-/* ------------------------------------------------------------------ */
-
-/* Indicate we have finished any preceeding time sub-phrase. */
- timeid = NULL_ID;
-
-/* Now check the word to see if it a known space sub-phrase identifier. */
- spaceid = SpaceId( word, status );
-
-/* Decide what to look for next. */
- if( spaceid == POSITION_ID ) {
- look_for = FRAME;
-
- } else if( spaceid != NULL_ID ) {
- look_for = FILL_FACTOR;
-
-/* If the word is not a known space sub-phrase identifier, move on to
- re-interpret it as a Spectral sub-phrase identifier. */
- } else {
- look_for = SPECTRAL_IDENTIFIER;
- new_word = 0;
- }
-
-/* If we have found a space sub-phrase identifier, create a KeyMap to hold
- the properties of the space sub-phrase, and store the space sub-phrase
- identifier in the new KeyMap. */
- if( spaceid != NULL_ID ) {
- subphrase = "space";
- if( props ) props = astAnnul( props );
- props = astKeyMap( " ", status );
- astMapPut0A( result, "SPACE_PROPS", props, NULL );
- astMapPut0C( props, "ID", word, NULL );
- }
-
-
-
-/* If we are currently looking for the velocity sub-phrase, see if the current
- word is any of the known velocity sub-phrase identifiers. Is so, move on
- to read the associated sub-phrase component. */
- } else if( look_for == VELOCITY_IDENTIFIER ) {
-/* ------------------------------------------------------------------ */
-
-/* Indicate we have finished any preceededing space sub-phrase. */
- spaceid = NULL_ID;
-
-/* Now check the word to see if it a known velocity sub-phrase identifier. */
- if( astChrMatch( word, "VelocityInterval" ) ) {
- velid = VELOCITY_INTERVAL_ID;
- look_for = FILL_FACTOR;
-
- } else if( astChrMatch( word, "Velocity" ) ) {
- velid = VELOCITY_ID;
- look_for = VELOCITY;
-
-/* If the word is not a known velocity sub-phrase identifier, move on to
- re-interpret it as a Spectral sub-phrase identifier. */
- } else {
- look_for = SPECTRAL_IDENTIFIER;
- new_word = 0;
- }
-
-/* If we have found a velocity sub-phrase identifier, create a KeyMap to
- hold the properties of the velocity sub-phrase, and store the velocity
- sub-phrase identifier in the new KeyMap. */
- if( velid != NULL_ID ) {
- subphrase = "velocity";
- if( props ) props = astAnnul( props );
- props = astKeyMap( " ", status );
- astMapPut0A( result, "VELOCITY_PROPS", props, NULL );
- astMapPut0C( props, "ID", word, NULL );
- }
-
-
-
-/* If we are currently looking for the spectral sub-phrase, see if the
- word is any of the known spectral sub-phrase identifiers. Is so, move
- on to read the associated sub-phrase component. */
- } else if( look_for == SPECTRAL_IDENTIFIER ) {
-/* ------------------------------------------------------------------ */
-
-/* Indicate we have finished any preceededing velocity sub-phrase. */
- velid = NULL_ID;
-
-/* Now check the word to see if it a known spectral sub-phrase identifier. */
- if( astChrMatch( word, "SpectralInterval" ) ) {
- look_for = FILL_FACTOR; /* Move on to find the fill factor */
- specid = SPECTRAL_INTERVAL_ID;
-
- } else if( astChrMatch( word, "Spectral" ) ) {
- look_for = REFPOS; /* Move on to find the refpos */
- specid = SPECTRAL_ID;
-
-/* If the word is not a known spectral sub-phrase identifier, move on to
- look for the Redshift sub-phrase. */
- } else {
- look_for = REDSHIFT_IDENTIFIER;
- new_word = 0;
- }
-
-/* If we have found a spectral sub-phrase identifier, create a KeyMap to
- hold the properties of the spectral sub-phrase, and store the spectral
- sub-phrase identifier in the new KeyMap. */
- if( specid != NULL_ID ) {
- subphrase = "spectral";
- if( props ) props = astAnnul( props );
- props = astKeyMap( " ", status );
- astMapPut0A( result, "SPECTRAL_PROPS", props, NULL );
- astMapPut0C( props, "ID", word, NULL );
- naxes = 1;
- }
-
-
-
-/* If we are currently looking for the redshift sub-phrase, see if the
- word is any of the known redshift sub-phrase identifiers. Is so, move
- on to read the associated sub-phrase component. */
- } else if( look_for == REDSHIFT_IDENTIFIER ) {
-/* ------------------------------------------------------------------ */
-
-/* Indicate we have finished any preceeding spectral sub-phrase. */
- specid = NULL_ID;
-
-/* Now check the word to see if it a known spectral sub-phrase identifier. */
- if( astChrMatch( word, "RedshiftInterval" ) ) {
- look_for = FILL_FACTOR; /* Move on to find the fill factor */
- redid = REDSHIFT_INTERVAL_ID;
-
- } else if( astChrMatch( word, "Redshift" ) ) {
- look_for = REFPOS; /* Move on to find the refpos */
- redid = REDSHIFT_ID;
-
-/* If the word is not a known redshift sub-phrase identifier, report a
- warning. */
- } else if( word[ 0 ] && astOK ) {
- astError( AST__BADIN, "astRead(%s): Unsupported or irrelevant "
- "word '%s' found in STC-S %s sub-phrase: '%s'.", status,
- astGetClass( this ), word, subphrase,
- ContextFragment( &con, &fbuf, status ) );
- new_word = 0;
- }
-
-/* If we have found a redshift sub-phrase identifier, create a KeyMap to
- hold the properties of the redshift sub-phrase, and store the redshift
- sub-phrase identifier in the new KeyMap. */
- if( redid != NULL_ID ) {
- subphrase = "redshift";
- if( props ) props = astAnnul( props );
- props = astKeyMap( " ", status );
- astMapPut0A( result, "REDSHIFT_PROPS", props, NULL );
- astMapPut0C( props, "ID", word, NULL );
- naxes = 1;
- }
-
-/* Indicate we can now end when we run out of input words. */
- con.done = 1;
-
-
-
-/* If we are currently looking for a fill factor... */
- } else if( look_for == FILL_FACTOR ) {
-/* ------------------------------------------------------------------ */
-
-/* If the current word is "fillfactor" attempt to read the numerical filling
- factor from the next word. If this fails, or if the current word is
- not "fillfactor", indicate that we will be re-interpreting the current
- word in a new context and so do not need a new word. */
- if( astChrMatch( word, "fillfactor" ) ) {
- word = GetNextWord( this, &con, status );
- if( astChr2Double( word ) == AST__BAD ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected a numerical "
- "filling factor, but found '%s' in the %s "
- "sub-phrase of STC-S description: '%s'.", status,
- word, subphrase, ContextFragment( &con, &fbuf,
- status ) );
- new_word = 0;
- }
- } else {
- new_word = 0;
- }
-
-/* If we are reading a time sub-phrase, move on to read the timescale. */
- if( timeid != NULL_ID ) {
- look_for = TIME_SCALE;
-
-/* If we are reading a space sub-phrase, move on to read the frame. */
- } else if( spaceid != NULL_ID ) {
- look_for = FRAME;
-
-/* If we are reading a velocity sub-phrase, move on to read the limits. */
- } else if( velid != NULL_ID ) {
- look_for = LIMITS;
-
-/* Otherwise (i.e. for spectral and redshift sub-phrases) move on to read
- the refpos. */
- } else {
- look_for = REFPOS;
- }
-
-/* If the word was usable, record it as the fillfactor property. */
- if( new_word ) astMapPut0C( props, "FILLFACTOR", word, NULL );
-
-
-
-/* If we are currently looking for a time scale... */
- } else if( look_for == TIME_SCALE ) {
-/* ------------------------------------------------------------------ */
-
-/* If the current word is a recognised STC-S timescale, store it in the
- props KeyMap. Otherwise, indicate that the word can be re-used in the
- next context. */
- if( astChrMatch( word, "TT" ) ||
- astChrMatch( word, "TDT" ) ||
- astChrMatch( word, "ET" ) ||
- astChrMatch( word, "TAI" ) ||
- astChrMatch( word, "IAT" ) ||
- astChrMatch( word, "UTC" ) ||
- astChrMatch( word, "TEB" ) ||
- astChrMatch( word, "TDB" ) ||
- astChrMatch( word, "TCG" ) ||
- astChrMatch( word, "TCB" ) ||
- astChrMatch( word, "LST" ) ||
- astChrMatch( word, "nil" ) ) {
-
- astMapPut0C( props, "TIMESCALE", word, NULL );
-
- } else {
- new_word = 0;
- }
-
-/* Move on to look for a refpos */
- look_for = REFPOS;
-
-
-
-/* If we are currently looking for a space frame... */
- } else if( look_for == FRAME ) {
-/* ------------------------------------------------------------------ */
-
-/* If the current word is a recognised STC-S spatial frame, store it in
- the props KeyMap. Otherwise, indicate that the word can be re-used. */
- if( astChrMatch( word, "ICRS" ) ||
- astChrMatch( word, "FK5" ) ||
- astChrMatch( word, "FK4" ) ||
- astChrMatch( word, "J2000" ) ||
- astChrMatch( word, "B1950" ) ||
- astChrMatch( word, "ECLIPTIC" ) ||
- astChrMatch( word, "GALACTIC" ) ||
- astChrMatch( word, "GALACTIC_II" ) ||
- astChrMatch( word, "SUPER_GALACTIC" ) ||
- astChrMatch( word, "GEO_C" ) ||
- astChrMatch( word, "GEO_D" ) ||
- astChrMatch( word, "UNKNOWNFrame" ) ) {
-
- astMapPut0C( props, "FRAME", word, NULL );
-
- } else {
- new_word = 0;
- }
-
-/* Move on to look for a refpos */
- look_for = REFPOS;
-
-
-
-/* If we are currently looking for a refpos... */
- } else if( look_for == REFPOS ) {
-/* ------------------------------------------------------------------ */
-
-/* If the current word is a recognised STC-S reference position, store it in
- the props KeyMap. Otherwise, indicate that the word can be re-used. The
- first group of reference positions apply to all sub-phrases. */
- if( astChrMatch( word, "GEOCENTER" ) ||
- astChrMatch( word, "BARYCENTER" ) ||
- astChrMatch( word, "HELIOCENTER" ) ||
- astChrMatch( word, "TOPOCENTER" ) ||
- astChrMatch( word, "GALACTIC_CENTER" ) ||
- astChrMatch( word, "EMBARYCENTER" ) ||
- astChrMatch( word, "MOON" ) ||
- astChrMatch( word, "MERCURY" ) ||
- astChrMatch( word, "VENUS" ) ||
- astChrMatch( word, "MARS" ) ||
- astChrMatch( word, "JUPITER" ) ||
- astChrMatch( word, "SATURN" ) ||
- astChrMatch( word, "URANUS" ) ||
- astChrMatch( word, "NEPTUNE" ) ||
- astChrMatch( word, "PLUTO" ) ||
- astChrMatch( word, "UNKNOWNRefPos" ) ) {
-
- astMapPut0C( props, "REFPOS", word, NULL );
-
-/* This group of reference positions apply only to spectral and redshift
- sub-phrases. */
- } else if( astChrMatch( word, "LSR" ) ||
- astChrMatch( word, "LSRK" ) ||
- astChrMatch( word, "LSRD" ) ||
- astChrMatch( word, "LOCAL_GROUP_CENTER" ) ) {
-
- if( specid != NULL_ID || redid != NULL_ID ) {
- astMapPut0C( props, "REFPOS", word, NULL );
-
- } else if( astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Illegal reference "
- "position '%s' found in the %s sub-phrase of "
- "STC-S description: '%s'.", status, word,
- subphrase, ContextFragment( &con, &fbuf, status ) );
- new_word = 0;
- }
-
- } else {
- new_word = 0;
- }
-
-/* Choose what to look for next on the basis of the type of sub-phrase
- currently being interpreted. */
- if( timeid == TIME_INTERVAL_ID ){
- look_for = START; /* Move on to find the start time */
-
- } else if( timeid == START_TIME_ID ){
- look_for = START; /* Move on to find the start time */
-
- } else if( timeid == STOP_TIME_ID ){
- look_for = STOP; /* Move on to find the stop time */
-
- } else if( timeid == TIME_ID ){
- look_for = TIME; /* Move on to find the time */
-
- } else if( spaceid != NULL_ID ){
- look_for = FLAVOUR; /* Move on to find the spatial flavour */
-
- } else if( specid == SPECTRAL_INTERVAL_ID ) {
- look_for = LIMITS; /* Move on to find the spectral limits */
-
- } else if( specid == SPECTRAL_ID ) {
- look_for = RED_SPEC_VALUE; /* Move on to find the spectral value */
-
- } else if( redid == REDSHIFT_INTERVAL_ID ) {
- look_for = TYPE_DOPPLER; /* Move on to find the redshift type */
-
- } else if( redid == REDSHIFT_ID ) {
- look_for = TYPE_DOPPLER; /* Move on to find the redshift type */
-
- } else if( astOK ) { /* Should never happen */
- astError( AST__INTER, "astRead(StcsChan): Sanity check 1 fails in "
- "function ReadProps (AST internal programming error).",
- status );
- new_word = 0;
- }
-
-
-
-
-
-/* If we are currently looking for a start time... */
- } else if( look_for == START ) {
-/* ------------------------------------------------------------------ */
-
-/* Save the current word as the start of the START value. */
- nc = 0;
- prop = astAppendString( prop, &nc, word );
-
-/* If the current word is "JD" or "MJD", the following word should be
- numerical. */
- is_jd = astChrMatch( word, "JD" );
- if( is_jd || astChrMatch( word, "MJD" ) ) {
- word = GetNextWord( this, &con, status );
- value = astChr2Double( word );
- if( value == AST__BAD && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected numerical "
- "value in Start time, but found '%s %s' in STC-S "
- "description: '%s'.", status, prop, word,
- ContextFragment( &con, &fbuf, status ) );
-
-/* Append the second word to the first word. */
- } else {
- prop = astAppendString( prop, &nc, " " );
- prop = astAppendString( prop, &nc, word );
- }
-
-/* Convert JD to MJD if required. */
- start = is_jd ? value - 2400000.5 : value;
-
-/* Otherwise, the current word should be an ISO date. Use a TimeFrame
- to check the string. */
- } else {
- if( !timefrm ) timefrm = astTimeFrame( " ", status );
- if( !astUnformat( timefrm, 0, word, &start ) && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected ISO date "
- "string Start time, but found '%s' in an STC-S "
- "description: '%s'.", status, word,
- ContextFragment( &con, &fbuf, status ) );
- }
- }
-
-/* Record the START property. */
- astMapPut0C( props, "START", prop, NULL );
- astMapPut0D( props, "MJDSTART", start, NULL );
-
-/* Decide what to do next. */
- if( timeid == TIME_INTERVAL_ID ){
- look_for = STOP; /* Move on to find the stop time */
-
- } else if( timeid == START_TIME_ID ){
- look_for = TIME_LABEL; /* Move on to find the "coord" time */
-
- }
-
-
-
-/* If we are currently looking for a stop time... */
- } else if( look_for == STOP ) {
-/* ------------------------------------------------------------------ */
-
-/* Save the current word as the start of the STOP value. */
- nc = 0;
- prop = astAppendString( prop, &nc, word );
-
-/* If the current word is "JD" or "MJD", the following word should be
- numerical. */
- is_jd = astChrMatch( word, "JD" );
- if( is_jd || astChrMatch( word, "MJD" ) ) {
- word = GetNextWord( this, &con, status );
- value = astChr2Double( word );
- if( value == AST__BAD && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected numerical "
- "value in Stop time, but found '%s %s' in STC-S "
- "description: '%s'.", status, prop, word,
- ContextFragment( &con, &fbuf, status ) );
-
-/* Append the second word to the first word. */
- } else {
- prop = astAppendString( prop, &nc, " " );
- prop = astAppendString( prop, &nc, word );
- }
-
-/* Convert JD to MJD if required. */
- stop = is_jd ? value - 2400000.5 : value;
-
-/* Otherwise, the current word should be an ISO date. Use a TimeFrame
- to check the string. */
- } else {
- if( !timefrm ) timefrm = astTimeFrame( " ", status );
- if( !astUnformat( timefrm, 0, word, &stop ) && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected ISO date "
- "string Stop time, but found '%s' in an STC-S "
- "description: '%s'.", status, word,
- ContextFragment( &con, &fbuf, status ) );
- }
- }
-
-/* Record the STOP property. */
- astMapPut0C( props, "STOP", prop, NULL );
- astMapPut0D( props, "MJDSTOP", stop, NULL );
-
-/* Move on to find the "coord" time. */
- look_for = TIME_LABEL;
-
-
-
-/* If we are currently looking for the label before a time coord value... */
- } else if( look_for == TIME_LABEL ) {
-/* ------------------------------------------------------------------ */
- if( astChrMatch( word, "Time" ) ) {
- look_for = TIME;
- } else {
- new_word = 0;
- look_for = UNIT;
- }
-
-
-
-/* If we are currently looking for a time... */
- } else if( look_for == TIME ) {
-/* ------------------------------------------------------------------ */
-
-/* Save the current word as the start of the TIME value. */
- nc = 0;
- prop = astAppendString( prop, &nc, word );
-
-/* If the current word is "JD" or "MJD", the following word should be
- numerical. */
- is_jd = astChrMatch( word, "JD" );
- if( is_jd || astChrMatch( word, "MJD" ) ) {
- word = GetNextWord( this, &con, status );
- value = astChr2Double( word );
- if( value == AST__BAD && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected numerical "
- "value in Time value, but found '%s %s' in STC-S "
- "description: '%s'.", status, prop, word,
- ContextFragment( &con, &fbuf, status ) );
-
-/* Append the second word to the first word. */
- } else {
- prop = astAppendString( prop, &nc, " " );
- prop = astAppendString( prop, &nc, word );
- }
-
-/* Convert JD to MJD if required. */
- time = is_jd ? value - 2400000.5 : value;
-
-/* Otherwise, the current word should be an ISO date. Use a TimeFrame
- to check the string. */
- } else {
- if( !timefrm ) timefrm = astTimeFrame( " ", status );
- if( !astUnformat( timefrm, 0, word, &time ) && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected ISO date "
- "string Time value, but found '%s' in an STC-S "
- "description: '%s'.", status, word,
- ContextFragment( &con, &fbuf, status ) );
- }
- }
-
-/* Record the TIME property. */
- astMapPut0C( props, "TIME", prop, NULL );
- astMapPut0D( props, "MJDTIME", time, NULL );
-
-/* Move on to look for the units. */
- look_for = UNIT;
-
-
-
-/* If we are currently looking for a space "flavor"... */
- } else if( look_for == FLAVOUR ) {
-/* ------------------------------------------------------------------ */
-
-/* If the current word is a recognised flavour value, note how many axis
- values are required to specify a position. Otherwise, indicate that
- the word can be re-used. */
- if( astChrMatch( word, "SPHER2" ) ) {
- naxes = 2;
-
- } else if( astChrMatch( word, "UNITSPHER" ) ) {
- naxes = 2;
-
- } else if( astChrMatch( word, "CART1" ) ) {
- naxes = 1;
-
- } else if( astChrMatch( word, "CART2" ) ) {
- naxes = 2;
-
- } else if( astChrMatch( word, "CART3" ) ) {
- naxes = 3;
-
- } else if( astChrMatch( word, "SPHER3" ) ) {
- naxes = 3;
-
- } else {
- naxes = 2;
- new_word = 0;
- }
-
-/* If the word was recognised as a flavour, store it in the porperties
- KeyMap. */
- if( new_word ) {
- astMapPut0C( props, "FLAVOR", word, NULL );
- astMapPut0C( props, "FLAVOUR", word, NULL );
- }
-
-/* The next set of words to be read from the source function will specify
- the arguments of the region enclosing the spatial positions. This may
- contain nested regions, so use a recursive function to read the
- arguments and store them in the properties KeyMap. */
- if( new_word ) word = GetNextWord( this, &con, status );
- word = ReadSpaceArgs( this, word, spaceid, naxes, &con, props,
- status );
- new_word = 0;
-
-/* Move on to the next look_for (following the region argument list read
- by ReadSpaceArgs). */
- if( spaceid == POSITION_ID ) {
- look_for = UNIT;
- } else {
- look_for = POSITION;
- }
-
-
-
-/* If we are currently looking for interval "lolimit"and "hilimit" ... */
- } else if( look_for == LIMITS ) {
-/* ------------------------------------------------------------------ */
- if( velid != NULL_ID ) {
- t = "velocity";
- look_for = VELOCITY;
-
- } else if( specid != NULL_ID ) {
- t = "spectral";
- look_for = RED_SPEC_LABEL;
-
- } else {
- t = "redshift";
- look_for = RED_SPEC_LABEL;
- }
-
-/* The current word should be a numerical value (the low limit ). */
- if( astChr2Double( word ) == AST__BAD && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected a numerical "
- "value for a %s lolimit, but found '%s' in an STC-S "
- "description: '%s'.", status, t, word,
- ContextFragment( &con, &fbuf, status ) );
- } else {
- astMapPut0C( props, "LOLIMIT", word, NULL );
- }
-
-/* The next word should be a numerical value (the high limit ). */
- word = GetNextWord( this, &con, status );
- if( astChr2Double( word ) == AST__BAD && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected a numerical "
- "value for a %s hilimit, but found '%s' in an STC-S "
- "description: '%s'.", status, t, word,
- ContextFragment( &con, &fbuf, status ) );
- } else {
- astMapPut0C( props, "HILIMIT", word, NULL );
- }
-
-
-
-/* If we are currently looking for the label before a spectral or redshift
- value... */
- } else if( look_for == RED_SPEC_LABEL ) {
-/* ------------------------------------------------------------------ */
- if( specid != NULL_ID && astChrMatch( word, "Spectral" ) ) {
- look_for = RED_SPEC_VALUE;
-
- } else if( redid != NULL_ID && astChrMatch( word, "Redshift" ) ) {
- look_for = RED_SPEC_VALUE;
-
- } else {
- new_word = 0;
- look_for = UNIT;
- }
-
-
-
-/* If we are currently looking for an spectral or redshift value. */
- } else if( look_for == RED_SPEC_VALUE ) {
-/* ------------------------------------------------------------------ */
-
- t = ( specid != NULL_ID ) ? "spectral" : "redshift";
- if( astChr2Double( word ) == AST__BAD && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected a numerical "
- "%s value, but found '%s' in an STC-S "
- "description: '%s'.", status, t, word,
- ContextFragment( &con, &fbuf, status ) );
- } else {
- astMapPut0C( props, ( specid != NULL_ID ) ? "SPECTRAL" : "REDSHIFT",
- word, NULL );
- }
-
-/* Decide what to do next. */
- look_for = UNIT;
-
-
-
-/* If we are currently looking for information needed to create a spatial
- Position ... */
- } else if( look_for == POSITION ) {
-/* ------------------------------------------------------------------ */
-
-/* Check the current word is "Position". If so, get the next word. */
- if( astChrMatch( word, "Position" ) ) {
- word = GetNextWord( this, &con, status );
-
-/* Get a value for every space axis. */
- nc = 0;
- for( iaxis = 0; iaxis < naxes; iaxis++ ) {
- val[ iaxis ] = astChr2Double( word );
- if( val[ iaxis ] == AST__BAD && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected another "
- "axis value for a space Position, but found "
- "'%s' in an STC-S description: '%s'.", status,
- word, ContextFragment( &con, &fbuf, status ) );
- }
- prop = astAppendString( prop, &nc, word );
- prop = astAppendString( prop, &nc, " " );
- word = GetNextWord( this, &con, status );
- }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
- prop[ nc - 1 ] = 0;
- astMapPut0C( props, "POSITION", prop, NULL );
- astMapPut1D( props, "DPOSITION", naxes, val, NULL );
- }
-
-/* Move on to read the "unit" item. */
- new_word = 0;
- look_for = UNIT;
-
-
-
-/* If we are currently looking for the redshift type and doppler
- definition ... */
- } else if( look_for == TYPE_DOPPLER ) {
-/* ------------------------------------------------------------------ */
-
- if( astChrMatch( word, "VELOCITY" ) ||
- astChrMatch( word, "REDSHIFT" ) ) {
- astMapPut0C( props, "TYPE", word, NULL );
- word = GetNextWord( this, &con, status );
- }
-
- if( astChrMatch( word, "OPTICAL" ) ||
- astChrMatch( word, "RADIO" ) ||
- astChrMatch( word, "RELATIVISTIC" ) ) {
- astMapPut0C( props, "DOPPLERDEF", word, NULL );
- } else {
- new_word = 0;
- }
-
-/* Decide what to do next. */
- look_for = ( redid == REDSHIFT_INTERVAL_ID ) ? LIMITS : RED_SPEC_VALUE;
-
-
-
-/* If we are currently looking for a velocity label and value... */
- } else if( look_for == VELOCITY ) {
-/* ------------------------------------------------------------------ */
-
- if( astChrMatch( word, "Velocity" ) ) {
- word = GetNextWord( this, &con, status );
- if( astChr2Double( word ) == AST__BAD && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected a "
- "numerical Velocity value but found 'Velocity %s' "
- "in an STC-S description: '%s'.", status, word,
- ContextFragment( &con, &fbuf, status ) );
- }
-
- } else {
- new_word = 0;
- }
-
- look_for = UNIT;
-
-
-
-/* If we are currently looking for a "unit" string... */
- } else if( look_for == UNIT ) {
-/* ------------------------------------------------------------------ */
-
-/* See if the current word is "unit". If so, read the next word (which
- will be the unit string itself). Otherwise, indicate the current word
- can be re-used. */
- if( astChrMatch( word, "unit" ) ) {
- word = GetNextWord( this, &con, status );
- } else {
- new_word = 0;
- }
-
-/* If we have a unit string... */
- if( new_word ) {
-
-/* Check that the unit string is one of the allowed values (different
- values are allowed for different sub-phrases). Space frames can have
- multiple units strings (one for each axis) so loop round until a string
- is found which is not a valid unit string. */
- nc = 0;
- nunit = 0;
- while( ( timeid != NULL_ID && ( !strcmp( word, "s" ) ||
- !strcmp( word, "d" ) ||
- !strcmp( word, "a" ) ||
- !strcmp( word, "yr" ) ||
- !strcmp( word, "cy" ) ) ) ||
-
- ( spaceid != NULL_ID && ( !strcmp( word, "deg" ) ||
- !strcmp( word, "arcmin" ) ||
- !strcmp( word, "arcsec" ) ||
- !strcmp( word, "m" ) ||
- !strcmp( word, "mm" ) ||
- !strcmp( word, "m" ) ||
- !strcmp( word, "km" ) ||
- !strcmp( word, "AU" ) ||
- !strcmp( word, "pc" ) ||
- !strcmp( word, "kpc" ) ||
- !strcmp( word, "Mpc" ) ) ) ||
-
- ( velid != NULL_ID && ( !strcmp( word, "deg" ) ||
- !strcmp( word, "arcmin" ) ||
- !strcmp( word, "arcsec" ) ||
- !strcmp( word, "m" ) ||
- !strcmp( word, "mm" ) ||
- !strcmp( word, "km" ) ||
- !strcmp( word, "AU" ) ||
- !strcmp( word, "pc" ) ||
- !strcmp( word, "kpc" ) ||
- !strcmp( word, "Mpc" ) ) ) ||
-
- ( !strcmp( word, "Hz" ) ||
- !strcmp( word, "MHz" ) ||
- !strcmp( word, "GHz" ) ||
- !strcmp( word, "m" ) ||
- !strcmp( word, "mm" ) ||
- !strcmp( word, "um" ) ||
- !strcmp( word, "nm" ) ||
- !strcmp( word, "Angstrom" ) ||
- !strcmp( word, "eV" ) ||
- !strcmp( word, "keV" ) ||
- !strcmp( word, "MeV" ) ) ) {
-
- prop = astAppendString( prop, &nc, word );
- prop = astAppendString( prop, &nc, " " );
- nunit++;
- word = GetNextWord( this, &con, status );
- }
-
-/* Report an error if an inappropriate number of valid unit strings was
- found. */
- if( nunit == 0 && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Unsupported "
- "units (%s) for the %s sub-phrase within an "
- "STC-S description: '%s'.", status, word, subphrase,
- ContextFragment( &con, &fbuf, status ) );
-
- } else if( nunit != 1 && nunit != naxes && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Incorrect number of "
- "units string (%d) supplied for the %s sub-phrase within an "
- "STC-S description: '%s'.", status, nunit, subphrase,
- ContextFragment( &con, &fbuf, status ) );
-
-/* Otherwise, remove the trailing space, and store the property value in the
- KeyMap. */
- } else {
- prop[ nc - 1 ] = 0;
- astMapPut0C( props, "UNIT", prop, NULL );
- }
-
-/* The current word is the first word that was not a valid unit string,
- and so can be re-used. */
- new_word = 0;
- }
-
-/* Move on to find the errors. */
- look_for = ERROR;
-
-
-
-/* If we are currently looking for an "Error" string... */
- } else if( look_for == ERROR ) {
-/* ------------------------------------------------------------------ */
-
-/* If the current word is "Error" read all subsequent words until the first
- non-numerical value is encountered. */
- if( astChrMatch( word, "Error" ) ) {
- word = GetNextWord( this, &con, status );
- value = astChr2Double( word );
-
- nc = 0;
- nval = 0;
- while( value != AST__BAD ) {
- if( nval < MAXVAL ) {
- val[ nval++ ] = value;
- prop = astAppendString( prop, &nc, word );
- prop = astAppendString( prop, &nc, " " );
- word = GetNextWord( this, &con, status );
- value = astChr2Double( word );
- } else {
- astError( AST__BADIN, "astRead(StcsChan): Too many (more "
- "than %d) numerical values found for the Error "
- "property of the %s sub-phrase within an STC-S "
- "description: '%s'.", status, MAXVAL, subphrase,
- ContextFragment( &con, &fbuf, status ) );
- break;
- }
- }
-
-/* Report an error if no numerical error values were found. */
- if( nval == 0 && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected a "
- "numerical error value but found 'Error %s' "
- "for the %s sub-phrase within an "
- "STC-S description: '%s'.", status, word, subphrase,
- ContextFragment( &con, &fbuf, status ) );
-
-/* Otherwise, remove the trailing space and store the concatenated
- string of formatted values in the properties KeyMap. Also store a
- corresponding vector of floating point values in the KeyMap. */
- } else {
- prop[ nc - 1 ] = 0;
- astMapPut0C( props, "ERROR", prop, NULL );
- astMapPut1D( props, "DERROR", nval, val, NULL );
- }
- }
-
-/* Indicate that we do not need to get a new word (we can re-use the last
- one that turned out not to be a numerical value above). */
- new_word = 0;
-
-/* Next look for Resolution */
- look_for = RESOLUTION;
-
-
-
-/* If we are currently looking for a "Resolution" string... */
- } else if( look_for == RESOLUTION ) {
-/* ------------------------------------------------------------------ */
-
-/* If the current word is "Resolution" read all subsequent words until the
- first non-numerical value is encountered. */
- if( astChrMatch( word, "Resolution" ) ) {
- word = GetNextWord( this, &con, status );
- value = astChr2Double( word );
-
- nc = 0;
- nval = 0;
- while( value != AST__BAD ) {
- if( nval < MAXVAL ) {
- val[ nval++ ] = value;
- prop = astAppendString( prop, &nc, word );
- prop = astAppendString( prop, &nc, " " );
- word = GetNextWord( this, &con, status );
- value = astChr2Double( word );
- } else {
- astError( AST__BADIN, "astRead(StcsChan): Too many (more "
- "than %d) numerical values found for the Resolution "
- "property of the %s sub-phrase within an STC-S "
- "description: '%s'.", status, MAXVAL, subphrase,
- ContextFragment( &con, &fbuf, status ) );
- break;
- }
- }
-
-/* Report an error if no numerical values were found. */
- if( nval == 0 && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected a "
- "numerical resolution value but found 'Resolution %s' "
- "for the %s sub-phrase within an STC-S description:"
- " '%s'.", status, word, subphrase,
- ContextFragment( &con, &fbuf, status ) );
-
-/* Otherwise, remove the trailing space and store the concatenated
- string of formatted values in the properties KeyMap. Also store a
- corresponding vector of floating point values in the KeyMap. */
- } else {
- prop[ nc - 1 ] = 0;
- astMapPut0C( props, "RESOLUTION", prop, NULL );
- astMapPut1D( props, "DRESOLUTION", nval, val, NULL );
- }
- }
-
-/* Indicate that we do not need to get a new word (we can re-use the last
- one that turned out not to be a numerical value above). */
- new_word = 0;
-
-/* Next look for Size. */
- look_for = SIZE;
-
-
-
-/* If we are currently looking for a spatial "Size" string... */
- } else if( look_for == SIZE ) {
-/* ------------------------------------------------------------------ */
-
-/* If the current word is "Size" read all subsequent words until the
- first non-numerical value is encountered. */
- if( astChrMatch( word, "Size" ) ) {
- word = GetNextWord( this, &con, status );
- value = astChr2Double( word );
-
- nc = 0;
- nval = 0;
- while( value != AST__BAD ) {
- if( nval < MAXVAL ) {
- val[ nval++ ] = value;
- prop = astAppendString( prop, &nc, word );
- prop = astAppendString( prop, &nc, " " );
- word = GetNextWord( this, &con, status );
- value = astChr2Double( word );
- } else {
- astError( AST__BADIN, "astRead(StcsChan): Too many (more "
- "than %d) numerical values found for the Size "
- "property of the %s sub-phrase within an STC-S "
- "description: '%s'.", status, MAXVAL, subphrase,
- ContextFragment( &con, &fbuf, status ) );
- break;
- }
- }
-
-/* Report an error if no numerical values were found. */
- if( nval == 0 && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected a "
- "numerical size value but found 'Size %s' "
- "for the %s sub-phrase within an STC-S description:"
- " '%s'.", status, word, subphrase,
- ContextFragment( &con, &fbuf, status ) );
-
-/* Otherwise, remove the trailing space and store the concatenated
- string of formatted values in the properties KeyMap. Also store a
- corresponding vector of floating point values in the KeyMap. */
- } else {
- prop[ nc - 1 ] = 0;
- astMapPut0C( props, "SIZE", prop, NULL );
- astMapPut1D( props, "DSIZE", nval, val, NULL );
- }
- }
-
-/* Indicate that we do not need to get a new word (we can re-use the last
- one that turned out not to be a numerical value above). */
- new_word = 0;
-
-/* Next look for PixSize. */
- look_for = PIX_SIZE;
-
-
-
-/* If we are currently looking for a "PixSize" string... */
- } else if( look_for == PIX_SIZE ) {
-/* ------------------------------------------------------------------ */
-
-/* If the current word is "PixSize" read all subsequent words until the
- first non-numerical value is encountered. */
- if( astChrMatch( word, "PixSize" ) ) {
- word = GetNextWord( this, &con, status );
- value = astChr2Double( word );
-
- nc = 0;
- nval = 0;
- while( value != AST__BAD ) {
- if( nval < MAXVAL ) {
- val[ nval++ ] = value;
- prop = astAppendString( prop, &nc, word );
- prop = astAppendString( prop, &nc, " " );
- word = GetNextWord( this, &con, status );
- value = astChr2Double( word );
- } else {
- astError( AST__BADIN, "astRead(StcsChan): Too many (more "
- "than %d) numerical values found for the PixSize "
- "property of the %s sub-phrase within an STC-S "
- "description: '%s'.", status, MAXVAL, subphrase,
- ContextFragment( &con, &fbuf, status ) );
- break;
- }
- }
-
-/* Report an error if no numerical values were found. */
- if( nval == 0 && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected a "
- "numerical pixel size but found 'PixSize %s' "
- "for the %s sub-phrase within an STC-S description:"
- " '%s'.", status, word, subphrase,
- ContextFragment( &con, &fbuf, status ) );
-
-/* Otherwise, remove the trailing space and store the concatenated
- string of formatted values in the properties KeyMap. Also store a
- corresponding vector of floating point values in the KeyMap. */
- } else {
- prop[ nc - 1 ] = 0;
- astMapPut0C( props, "PIXSIZE", prop, NULL );
- astMapPut1D( props, "DPIXSIZE", nval, val, NULL );
- }
- }
-
-/* Indicate that we do not need to get a new word (we can re-use the last
- one that turned out not to be a numerical value above). */
- new_word = 0;
-
-/* Next look for the next sub-phrase. */
- if( timeid != NULL_ID ) {
- look_for = SPACE_IDENTIFIER;
-
- } else if( spaceid != NULL_ID ) {
- look_for = VELOCITY_IDENTIFIER;
-
- } else if( velid != NULL_ID ) {
- look_for = SPECTRAL_IDENTIFIER;
-
- } else if( specid != NULL_ID ) {
- look_for = REDSHIFT_IDENTIFIER;
-
- } else {
- break;
- }
-
-
-
-
-/* Report an error for any unknown look_for. */
-/* ------------------------------------------------------------------ */
- } else if( astOK ) {
- astError( AST__INTER, "astRead(StcsChan): Illegal look_for value "
- "(%d) encountered (internal AST programming error).",
- status, look_for );
- }
-
-/* If required, get the next word in the STC-S description. */
- if( new_word ) word = GetNextWord( this, &con, status );
- }
-
-/* Free resources stored in the GetNextWord context structure. */
- con.done = 1;
- (void) GetNextWord( this, &con, status );
- FreeContext( &con, status );
-
-/* Free other resources */
- if( fbuf ) fbuf = astFree( fbuf );
- if( prop ) prop = astFree( prop );
- if( props ) props = astAnnul( props );
- if( timefrm ) timefrm = astAnnul( timefrm );
-
-/* If an error occurred, clean up by deleting the new Object and
- return a NULL pointer. */
- if ( !astOK ) result = astDelete( result );
-
-/* Return the pointer to the properties KeyMap. */
- return result;
-
-/* Undefine Local Constants: */
-#undef MAXVAL
-}
-
-static const char *ReadSpaceArgs( AstStcsChan *this, const char *word,
- int spaceid, int naxes, WordContext *con,
- AstKeyMap *props, int *status ){
-/*
-* Name:
-* ReadSpaceArgs
-
-* Purpose:
-* Read space region arguments from an STC-S description.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* const char *ReadSpaceArgs( AstStcsChan *this, const char *word,
-* int spaceid, int naxes, WordContext *con,
-* AstKeyMap *props, int *status )
-
-* Class Membership:
-* StcsChan member function
-
-* Description:
-* This function parses the list of space-separated words that form
-* the argument list of a spatial region. These words are read from the
-* source function, and stored in the supplied KeyMap using keys that
-* identify their purpose.
-*
-* This function calls itself recursively to handle compound regions.
-
-* Parameters:
-* this
-* Pointer to the StcsChan.
-* word
-* The first word of the argument list.
-* spaceid
-* An integer identifier for the type of spatial region for which
-* arguments are being read.
-* naxes
-* Number of axes in the space frame.
-* con
-* Pointer to a structure holding context for use with the
-* GetNextWord function. On exit, the next word returned by the
-* GetNextWord function will be the first word following the
-* argument list.
-* props
-* Pointer to the KeyMap in which the argument values should be
-* stored.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the next wpord to be interpreted.
-
-*/
-
-
-/* Local Variables: */
- AstKeyMap *new_props; /* KeyMap holding properties of an argument region */
- char *fbuf; /* Pointer to buffer holding document fragment */
- char *prop; /* String property value */
- char key[ 20 ]; /* Key for argument region */
- double *p; /* Pointer to next polygon vertex axis value */
- double *temp; /* Array of polygon vertex axis values */
- double val; /* Single numerical value */
- double vals[ 6 ]; /* List of numerical values */
- int iaxis; /* Axis index */
- int nc; /* Used length of string */
- int new_spaceid; /* Type of next argument region */
- int nreg; /* Number of argument regions found */
- int nvert; /* Number of vertices in polygon */
-
-/* Check inherited status */
- if( !astOK ) return word;
-
-/* Initialise. */
- fbuf = NULL;
- prop = NULL;
- nc = 0;
-
-/* If we are looking for information needed to create a spatial
- Interval... */
- if( spaceid == POSITION_INTERVAL_ID ) {
-
-/* Get a lolimit value for every space axis. */
- for( iaxis = 0; iaxis < naxes; iaxis++ ) {
- vals[ iaxis ] = astChr2Double( word );
- if( vals[ iaxis ] == AST__BAD && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected another "
- "'lolimit' value for a PositionInterval, but found "
- "'%s' in an STC-S description: '%s'.", status, word,
- ContextFragment( con, &fbuf, status ) );
- }
- prop = astAppendString( prop, &nc, word );
- prop = astAppendString( prop, &nc, " " );
- word = GetNextWord( this, con, status );
- }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
- prop[ nc - 1 ] = 0;
- astMapPut0C( props, "LOLIMIT", prop, NULL );
- astMapPut1D( props, "DLOLIMIT", naxes, vals, NULL );
-
-/* Get a hilimit value for every space axis. */
- nc = 0;
- for( iaxis = 0; iaxis < naxes; iaxis++ ) {
- vals[ iaxis ] = astChr2Double( word );
- if( vals[ iaxis ] == AST__BAD && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected another "
- "'hilimit' value for a PositionInterval, but found "
- "'%s' in an STC-S description: '%s'.", status, word,
- ContextFragment( con, &fbuf, status ) );
- }
- prop = astAppendString( prop, &nc, word );
- prop = astAppendString( prop, &nc, " " );
- word = GetNextWord( this, con, status );
- }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
- prop[ nc - 1 ] = 0;
- astMapPut0C( props, "HILIMIT", prop, NULL );
- astMapPut1D( props, "DLOLIMIT", naxes, vals, NULL );
-
-
-
-/* If we are currently looking for information needed to create a spatial
- AllSky ... */
- } else if( spaceid == ALLSKY_ID ) {
-
-
-
-/* If we are currently looking for information needed to create a spatial
- Circle ... */
- } else if( spaceid == CIRCLE_ID ) {
-
-/* Get a centre value for every space axis. */
- nc = 0;
- for( iaxis = 0; iaxis < naxes; iaxis++ ) {
- vals[ iaxis ] = astChr2Double( word );
- if( vals[ iaxis ] == AST__BAD && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected another "
- "'centre' value for a Circle, but found "
- "'%s' in an STC-S description: '%s'.", status, word,
- ContextFragment( con, &fbuf, status ) );
- }
- prop = astAppendString( prop, &nc, word );
- prop = astAppendString( prop, &nc, " " );
- word = GetNextWord( this, con, status );
- }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
- if( astOK ) prop[ nc - 1 ] = 0;
- astMapPut0C( props, "CENTRE", prop, NULL );
- astMapPut1D( props, "DCENTRE", naxes, vals, NULL );
-
-/* Get the radius value. */
- val = astChr2Double( word );
- if( val == AST__BAD && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected a radius "
- "value for a Circle, but found '%s' in an STC-S "
- "description: '%s'.", status, word,
- ContextFragment( con, &fbuf, status ) );
- }
-
-/* Store the property value in the KeyMap. */
- astMapPut0C( props, "RADIUS", word, NULL );
-
-/* Get the next word. */
- word = GetNextWord( this, con, status );
-
-
-
-/* If we are currently looking for information needed to create a spatial
- Ellipse ... */
- } else if( spaceid == ELLIPSE_ID ) {
-
-/* Get a centre value for every space axis. */
- nc = 0;
- for( iaxis = 0; iaxis < naxes; iaxis++ ) {
- vals[ iaxis ] = astChr2Double( word );
- if( vals[ iaxis ] == AST__BAD && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected another "
- "centre value for an Ellipse, but found "
- "'%s' in an STC-S description: '%s'.", status, word,
- ContextFragment( con, &fbuf, status ) );
- }
- prop = astAppendString( prop, &nc, word );
- prop = astAppendString( prop, &nc, " " );
- word = GetNextWord( this, con, status );
- }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
- prop[ nc - 1 ] = 0;
- astMapPut0C( props, "CENTRE", prop, NULL );
- astMapPut1D( props, "DCENTRE", naxes, vals, NULL );
-
-/* Get the first radius value . */
- val = astChr2Double( word );
- if( val == AST__BAD && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected the first "
- "radius value for an Ellipse, but found "
- "'%s' in an STC-S description: '%s'.", status, word,
- ContextFragment( con, &fbuf, status ) );
- }
-
-/* Store the property value in the KeyMap. */
- astMapPut0C( props, "RADIUS1", word, NULL );
-
-/* Get the second radius value . */
- word = GetNextWord( this, con, status );
- val = astChr2Double( word );
- if( val == AST__BAD && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected the second "
- "radius value for an Ellipse, but found "
- "'%s' in an STC-S description: '%s'.", status, word,
- ContextFragment( con, &fbuf, status ) );
- }
-
-/* Store the property value in the KeyMap. */
- astMapPut0C( props, "RADIUS2", word, NULL );
-
-/* Get the position angle value. */
- word = GetNextWord( this, con, status );
- val = astChr2Double( word );
- if( val == AST__BAD && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected the position "
- "angle value for an Ellipse, but found "
- "'%s' in an STC-S description: '%s'.", status, word,
- ContextFragment( con, &fbuf, status ) );
- }
-
-/* Store the property value in the KeyMap. */
- astMapPut0C( props, "POSANGLE", word, NULL );
-
-/* Get the next word. */
- word = GetNextWord( this, con, status );
-
-
-
-/* If we are currently looking for information needed to create a spatial
- Box ... */
- } else if( spaceid == BOX_ID ) {
-
-/* Get a centre value for every space axis. */
- nc = 0;
- for( iaxis = 0; iaxis < naxes; iaxis++ ) {
- vals[ iaxis ] = astChr2Double( word );
- if( vals[ iaxis ] == AST__BAD && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected another "
- "centre value for a Box, but found "
- "'%s' in an STC-S description: '%s'.", status,
- word, ContextFragment( con, &fbuf, status ) );
- }
- prop = astAppendString( prop, &nc, word );
- prop = astAppendString( prop, &nc, " " );
- word = GetNextWord( this, con, status );
- }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
- prop[ nc - 1 ] = 0;
- astMapPut0C( props, "CENTRE", prop, NULL );
- astMapPut1D( props, "DCENTRE", naxes, vals, NULL );
-
-/* Get bsize value for every space axis. */
- nc = 0;
- for( iaxis = 0; iaxis < naxes; iaxis++ ) {
- vals[ iaxis ] = astChr2Double( word );
- if( vals[ iaxis ] == AST__BAD && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected another "
- "'bsize' value for a Box, but found "
- "'%s' in an STC-S description: '%s'.", status,
- word, ContextFragment( con, &fbuf, status ) );
- }
- prop = astAppendString( prop, &nc, word );
- prop = astAppendString( prop, &nc, " " );
- word = GetNextWord( this, con, status );
- }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
- prop[ nc - 1 ] = 0;
- astMapPut0C( props, "BSIZE", prop, NULL );
- astMapPut1D( props, "DBSIZE", naxes, vals, NULL );
-
-
-
-/* If we are currently looking for information needed to create a spatial
- Polygon ... */
- } else if( spaceid == POLYGON_ID ) {
-
-/* Read the first vertex into a dynamically allocated array. */
- temp = astMalloc( sizeof( *temp )*naxes );
- if( temp ) {
- nc = 0;
- p = temp;
- for( iaxis = 0; iaxis < naxes; iaxis++,p++ ) {
- val = astChr2Double( word );
- if( val == AST__BAD && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected another "
- "vertex value for a Polygon, but found "
- "'%s' in an STC-S description: '%s'.", status,
- word, ContextFragment( con, &fbuf, status ) );
- } else {
- *p = val;
- }
- prop = astAppendString( prop, &nc, word );
- prop = astAppendString( prop, &nc, " " );
- word = GetNextWord( this, con, status );
- }
-
-/* Loop round reading remaining vertices, expanding the array as needed. */
- nvert = 1;
- val = astChr2Double( word );
- while( val != AST__BAD && astOK ) {
-
- temp = astGrow( temp, naxes*( nvert + 1 ), sizeof( *temp ) );
- if( astOK ) {
- p = temp + naxes*nvert;
-
- for( iaxis = 0; iaxis < naxes; iaxis++, p++ ) {
- if( val == AST__BAD && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected "
- "another vertex value for a Polygon, but "
- "found '%s' in an STC-S description: '%s'.",
- status, word, ContextFragment( con, &fbuf,
- status ) );
- } else {
- *p = val;
- }
- prop = astAppendString( prop, &nc, word );
- prop = astAppendString( prop, &nc, " " );
- word = GetNextWord( this, con, status );
- val = astChr2Double( word );
- }
- nvert++;
- }
- }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
- prop[ nc - 1 ] = 0;
- astMapPut0C( props, "VERTICES", prop, NULL );
- astMapPut1D( props, "DVERTICES", naxes*nvert, temp, NULL );
- temp = astFree( temp );
- }
-
-
-
-/* If we are currently looking for information needed to create a spatial
- Convex ... */
- } else if( spaceid == CONVEX_ID ) {
- astError( AST__BADIN, "astRead(StcsChan): A Convex was found "
- "within an STC-S description ('Convex' regions "
- "are not yet supported by AST): %s", status,
- ContextFragment( con, &fbuf, status ) );
-
-
-
-/* If we are currently looking for information needed to create a spatial
- Position ... */
- } else if( spaceid == POSITION_ID ) {
-
-/* Get a value for every space axis. */
- nc = 0;
- for( iaxis = 0; iaxis < naxes; iaxis++ ) {
- vals[ iaxis ] = astChr2Double( word );
- if( vals[ iaxis ] == AST__BAD && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected another "
- "axis value for a space Position, but found "
- "'%s' in an STC-S description: '%s'.", status,
- word, ContextFragment( con, &fbuf, status ) );
- }
- prop = astAppendString( prop, &nc, word );
- prop = astAppendString( prop, &nc, " " );
- word = GetNextWord( this, con, status );
- }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
- prop[ nc - 1 ] = 0;
- astMapPut0C( props, "POSITION", prop, NULL );
- astMapPut1D( props, "DPOSITION", naxes, vals, NULL );
-
-
-
-/* All remaining space id values require the argument list to be enclosed
- in parentheses. Report an error if the current word does not start
- with an opening parenthesis. */
- } else if( *word != '(' && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected an opening "
- "parenthesis but found '%s' in an STC-S description: '%s'.",
- status, word, ContextFragment( con, &fbuf, status ) );
-
-/* Skip over the opening parenthesis. If the first word consists of just the
- opening parenthesis, get the next word. */
- } else {
- if( *(++word) == 0 ) word = GetNextWord( this, con, status );
-
-/* Loop round all regions included in the compound region. */
- nreg = 0;
- while( astOK ) {
-
-/* If the next word starts with a closing parenthesis, we have reached
- the end of the argument list. */
- if( *word == ')' ) {
-
-/* Skip over the closing parenthesis. If the word consists of just the
- closing parenthesis, get the next word. */
- if( *(++word) == 0 ) word = GetNextWord( this, con, status );
-
-/* Leave the loop. */
- break;
- }
-
-/* Identify the region type from the current word. */
- new_spaceid = SpaceId( word, status );
- if( new_spaceid == NULL_ID && astOK ) {
- astError( AST__BADIN, "astRead(StcsChan): Expected a "
- "CoordinateArea or a closing parenthesis but found "
- "'%s' in an STC-S description: '%s'.", status, word,
- ContextFragment( con, &fbuf, status ) );
- }
-
-/* Create a new KeyMap to store the properties of the new region. Store
- this new KeyMap in the supplied KeyMap using a key of the form
- "REGION<n>". */
- new_props = astKeyMap( " ", status );
- astMapPut0C( new_props, "ID", word, NULL );
- sprintf( key, "REGION%d", ++nreg );
- astMapPut0A( props, key, new_props, NULL );
-
-/* Get the next word (i.e. the first word of the argument list for the
- region). */
- word = GetNextWord( this, con, status );
-
-/* Call this function recursively to read the argument list. */
- word = ReadSpaceArgs( this, word, new_spaceid, naxes, con,
- new_props, status );
-
-/* Free resources. */
- new_props = astAnnul( new_props );
- }
-
-/* Store the number of regions in the supplied KeyMap. */
- astMapPut0I( props, "NREG", nreg, NULL );
-
-/* Report an error if an in appropriate number of argument Regions were
- supplied. */
- if( spaceid == UNION_ID ) {
- if( nreg < 2 && astOK ){
- astError( AST__BADIN, "astRead(StcsChan): Less than two "
- "CoordinateAreas found within a 'Union' element in an "
- "STC-S description: '%s'.", status,
- ContextFragment( con, &fbuf, status ) );
- }
-
- } else if( spaceid == INTERSECTION_ID ) {
- if( nreg < 2 && astOK ){
- astError( AST__BADIN, "astRead(StcsChan): Less than two "
- "CoordinateAreas found within an 'Intersection' element "
- "in an STC-S description: '%s'.", status,
- ContextFragment( con, &fbuf, status ) );
- }
-
- } else if( spaceid == DIFFERENCE_ID ) {
- if( nreg != 2 && astOK ){
- astError( AST__BADIN, "astRead(StcsChan): %d CoordinateArea(s) "
- "found within a 'Difference' element in an STC-S "
- "description: '%s'.", status, nreg,
- ContextFragment( con, &fbuf, status ) );
- }
-
-
- } else if( spaceid == NOT_ID ) {
- if( nreg != 1 && astOK ){
- astError( AST__BADIN, "astRead(StcsChan): %d CoordinateAreas "
- "found within a 'Not' element in an STC-S description: "
- "'%s'.", status, nreg,
- ContextFragment( con, &fbuf, status ) );
- }
-
-/* Report an error for unknown spaceid values */
- } else if( astOK ) {
- astError( AST__INTER, "astRead(StcsChan): Illegal 'spaceid' value "
- "passed to function ReadSpaceArgs (internal AST "
- "programming error).", status );
- }
- }
-
-/* Free resources */
- if( prop ) prop = astFree( prop );
-
-/* Return a pointer to the next word to be interpreted. */
- return word;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a StcsChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* void SetAttrib( AstObject *this, const char *setting )
-
-* Class Membership:
-* StcsChan member function (over-rides the astSetAttrib protected
-* method inherited from the Channel class).
-
-* Description:
-* This function assigns an attribute value for a StcsChan, the
-* attribute and its value being specified by means of a string of
-* the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in
-* lower case with no white space present. The value to the right
-* of the "=" should be a suitable textual representation of the
-* value to be assigned and this will be interpreted according to
-* the attribute's data type. White space surrounding the value is
-* only significant for string attributes.
-
-* Parameters:
-* this
-* Pointer to the StcsChan.
-* setting
-* Pointer to a null terminated string specifying the new attribute
-* value.
-*/
-
-/* Local Variables: */
- AstStcsChan *this; /* Pointer to the StcsChan structure */
- int ival; /* Integer attribute value */
- int len; /* Length of setting string */
- int nc; /* Number of characters read by "astSscanf" */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the StcsChan structure. */
- this = (AstStcsChan *) this_object;
-
-/* Obtain the length of the setting string. */
- len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
- the setting string and extract the attribute value (or an offset to
- it in the case of string values). In each case, use the value set
- in "nc" to check that the entire string was matched. Once a value
- has been obtained, use the appropriate method to set it. */
-
-/* StcsArea. */
-/* --------- */
- if ( nc = 0,
- ( 1 == astSscanf( setting, "stcsarea= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetStcsArea( this, ival );
-
-/* StcsCoords. */
-/* ----------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "stcscoords= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetStcsCoords( this, ival );
-
-/* StcsProps. */
-/* ----------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "stcsprops= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetStcsProps( this, ival );
-
-/* StcsIndent */
-/* ----------*/
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "stcsindent= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetStcsIndent( this, ival );
-
-/* StcsLength */
-/* ----------*/
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "stcslength= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetStcsLength( this, ival );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-}
-
-static void SetUnc( AstRegion *reg1, AstRegion *reg2, AstFrame *frm,
- int is_skyframe, double scale, double *error, int nax,
- int *status ){
-/*
-* Name:
-* SetUnc
-
-* Purpose:
-* Store an uncertainty Box with a supplied Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* void SetUnc( AstRegion *reg1, AstRegion *reg2, AstFrame *frm,
-* int is_skyframe, double scale, double *error, int nax,
-* int *status )
-
-* Class Membership:
-* StcsChan member function
-
-* Description:
-* This function creates a new Box with dimensions specified by the
-* values in the "error" array, centred on a representative position
-* within one of the supplied Regions, and then stores the Box as the
-* uncertainty Region within both the supplied Regions.
-
-* Parameters:
-* reg1
-* Pointer to a Region to which the error values relate.
-* reg2
-* Pointer to another Region to which the error values relate.
-* frm
-* Pointer to the Frame encapsulated by both Regions.
-* is_skyframe
-* Should be non-zero if "frm" is a SkyFrame.
-* scale
-* A scale factor to apply to the error values before using them.
-* error
-* Pointer to an array of RMS error values, one for each axis in
-* "frm". These are modified on exit. For a SkyFrame, both values
-* (including the longitude axis value) should be given as an
-* arc-distance. This function will convert the arc-distance to
-* a longitude increment using a representative latitude for the
-* region.
-* nax
-* The numner of axes in "frm".
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstBox *unc; /* Uncertainty box */
- double dist; /* Diagonal length of Region bounding box */
- double lbnd[ 6 ]; /* Lower bounds of Region bounding box */
- double spos1[ 6 ]; /* A representative position in the Region */
- double spos2[ 6 ]; /* A second position in the Region */
- double ubnd[ 6 ]; /* Upper bounds of Region bounding box */
- int i; /* Axis index */
-
-/* Check the global error status. Also check an error value was supplied,
- and at least one of the Region pointers is not NULL. */
- if ( !astOK || error[ 0 ] == AST__BAD || ( !reg1 && !reg2 ) ) return;
-
-/* We need a representative position within the region. First get the
- coordinates at opposite corners of the region bounding box. */
- astRegBaseBox( reg1 ? reg1 : reg2, lbnd, ubnd );
-
-/* Find the diagonal length of the bounding box. */
- dist = astDistance( frm, lbnd, ubnd );
-
-/* Offset away from one corner towards the other by half the diagonal
- length. The resulting position returned in spos1 is our representative
- position for the region. */
- astOffset( frm, lbnd, ubnd, dist/2, spos1 );
-
-/* Scale the error values */
- for( i = 0; i < nax; i++ ) error[ i ] *= scale;
-
-/* If the region is defined within a SkyFrame, the supplied longitude
- error value will be an arc-distance value. But we need a longitude
- increment to create an uncertainty Region, so do the conversion. */
- if( is_skyframe ) {
-
-/* Offset away from the representative position found above along the
- first (i.e. longitude) axis by an arc-distance given by the Error
- value. */
- (void) astOffset2( frm, spos1, AST__DPIBY2, error[ 0 ], spos2 );
-
-/* Find the positive axis increment along the first axis. */
- error[ 0 ] = astAxDistance( frm, 1, spos1[ 0 ], spos2[ 0 ] );
- if( error[ 0 ] != AST__BAD ) error[ 0 ] = fabs( error[ 0 ] );
- }
-
-/* The uncertainty Region will be a Box centred at the representative
- position found above. Modify the "error" array to hold the corner
- axis values. */
- for( i = 0; i < nax; i++ ) error[ i ] += spos1[ i ];
-
-/* Create the box, and store it as the uncertainty Region in the supplied
- Region. */
- unc = astBox( frm, 0, spos1, error, NULL, " ", status );
- if( reg1 ) astSetUnc( reg1, unc );
- if( reg2 ) astSetUnc( reg2, unc );
-
-/* Free resources. */
- unc = astAnnul( unc );
-}
-
-static AstPointList *SinglePointList( AstFrame *frm, double *pos,
- AstRegion *unc, int *status){
-/*
-* Name:
-* SinglePointList
-
-* Purpose:
-* Create a PointList holding a single point.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* AstPointList *SinglePointList( AstFrame *frm, double *pos,
-* AstRegion *unc, int *status )
-
-* Class Membership:
-* StcsChan member function
-
-* Description:
-* This function creates a new PointList holding a single supplied
-* position.
-
-* Parameters:
-* frm
-* Pointer to the Frame in which the PointList is defined.
-* pos
-* Array holding the position. The length of this array must equal
-* the number of axes in "frm".
-* unc
-* Pointer to an uncertainty Region to associate with the new
-* PointList, or NULL.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new PointList. NULL is returned if an error has
-* already occurred, of if this function fails for any reason.
-*/
-
-/* Local Variables: */
- AstPointList *result; /* Returned pointer. */
- AstPointSet *pset; /* PointSet holding axis values */
- double **ptr; /* Pointer to PointSet data arrays */
- int i; /* Axis index */
- int nax; /* Number of axes */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get he number of axes. */
- nax = astGetNaxes( frm );
-
-/* Create a PointSet to hold the supplied point, and get a pointer to its
- data arrays. */
- pset = astPointSet( 1, nax, "", status );
- ptr = astGetPoints( pset );
- if( astOK ) {
-
-/* Copy the supplied axis values into the PointSet data arrays. */
- for( i = 0; i < nax; i++ ) ptr[ i ][ 0 ] = pos[ i ];
-
-/* Create the PointList. */
- result = astPointList( frm, pset, unc, "", status );
- }
-
-/* Free resources */
- pset = astAnnul( pset );
-
-/* Return the result. */
- return result;
-}
-
-static void SinkWrap( void (* sink)( const char * ), const char *line, int *status ) {
-/*
-* Name:
-* SinkWrap
-
-* Purpose:
-* Wrapper function to invoke a C StcsChan sink function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* void SinkWrap( void (* sink)( const char * ), const char *line, int *status )
-
-* Class Membership:
-* StcsChan member function.
-
-* Description:
-* This function invokes the sink function whose pointer is
-* supplied in order to write an output line to an external data
-* store.
-
-* Parameters:
-* sink
-* Pointer to a sink function, whose single parameter is a
-* pointer to a const, null-terminated string containing the
-* text to be written, and which returns void. This is the form
-* of StcsChan sink function employed by the C language interface
-* to the AST library.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Invoke the sink function. */
- ( *sink )( line );
-}
-
-static char *SourceWrap( const char *(* source)( void ), int *status ) {
-/*
-* Name:
-* SourceWrap
-
-* Purpose:
-* Wrapper function to invoke a C StcsChan source function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* char *SourceWrap( const char *(* source)( void ), int *status )
-
-* Class Membership:
-* StcsChan member function.
-
-* Description:
-* This function invokes the source function whose pointer is
-* supplied in order to read the next input line from an external
-* data store. It then returns a pointer to a dynamic string
-* containing a copy of the text that was read.
-
-* Parameters:
-* source
-* Pointer to a source function, with no parameters, that
-* returns a pointer to a const, null-terminated string
-* containing the text that it read. This is the form of StcsChan
-* source function employed by the C language interface to the
-* AST library.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated, null terminated string
-* containing a copy of the text that was read. This string must be
-* freed by the caller (using astFree) when no longer required.
-*
-* A NULL pointer will be returned if there is no more input text
-* to read.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- char *result; /* Pointer value to return */
- const char *line; /* Pointer to input line */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Invoke the source function to read the next input line and return a
- pointer to the resulting string. */
- line = ( *source )();
-
-/* If a string was obtained, make a dynamic copy of it and save the
- resulting pointer. */
- if ( line ) result = astString( line, (int) strlen( line ) );
-
-/* Return the result. */
- return result;
-}
-
-static int SpaceId( const char *word, int *status ){
-/*
-* Name:
-* SpaceId
-
-* Purpose:
-* Return the integer identifier for a given textual space identifier.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* int SpaceId( const char *word, int *status )
-
-* Class Membership:
-* StcsChan member function
-
-* Description:
-* This function returns an integer identifier for the given space
-* identifier.
-
-* Parameters:
-* word
-* The word holding the textual space identifier.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The integer space identifier, or NULL_ID if the supplied word was
-* not a known space identifier.
-
-*/
-
-
-/* Local Variables: */
- int spaceid; /* Returned identifier */
-
-/* Check inherited status */
- if( !astOK ) return NULL_ID;
-
- if( astChrMatch( word, "PositionInterval" ) ) {
- spaceid = POSITION_INTERVAL_ID;
-
- } else if( astChrMatch( word, "AllSky" ) ) {
- spaceid = ALLSKY_ID;
-
- } else if( astChrMatch( word, "Circle" ) ) {
- spaceid = CIRCLE_ID;
-
- } else if( astChrMatch( word, "Ellipse" ) ) {
- spaceid = ELLIPSE_ID;
-
- } else if( astChrMatch( word, "Box" ) ) {
- spaceid = BOX_ID;
-
- } else if( astChrMatch( word, "Polygon" ) ) {
- spaceid = POLYGON_ID;
-
- } else if( astChrMatch( word, "Convex" ) ) {
- spaceid = CONVEX_ID;
-
- } else if( astChrMatch( word, "Union" ) ) {
- spaceid = UNION_ID;
-
- } else if( astChrMatch( word, "Intersection" ) ) {
- spaceid = INTERSECTION_ID;
-
- } else if( astChrMatch( word, "Difference" ) ) {
- spaceid = DIFFERENCE_ID;
-
- } else if( astChrMatch( word, "Not" ) ) {
- spaceid = NOT_ID;
-
- } else if( astChrMatch( word, "Position" ) ) {
- spaceid = POSITION_ID;
-
- } else {
- spaceid = NULL_ID;
- }
-
-/* Return the integer space identifier. */
- return spaceid;
-}
-
-static void StoreTimeProp( AstKeyMap *props, AstTimeFrame *frm,
- const char *key, double value, int *status ){
-/*
-* Name:
-* StoreTimeProp
-
-* Purpose:
-* Store a time value as an STC-S property, using the existing format.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* void StoreTimeProp( AstKeyMap *props, AstTimeFrame *frm,
-* const char *key, double value, int *status )
-
-* Class Membership:
-* StcsChan member function.
-
-* Description:
-* This function formats the supplied time value and stores it in
-* the "props" KeyMap, using the supplied key name. If the KeyMap
-* already contains an entry for the given key, the new value is
-* written using the same format. Otherwise, the new value is written
-* as an ISO date and time string.
-
-* Parameters:
-* props
-* Pointer to the KeyMap in which to store the time value.
-* frm
-* Pointer to a TimeFrame that can be used to format the time value.
-* key
-* Pointer to a string holding the property name associated with
-* the time value.
-* value
-* The time value, in the system described by "frm".
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstFrame *fmtfrm; /* Frame defining Format/System for formatted value */
- AstFrame *fs; /* FrameSet connecting Frames */
- const char *fmttxt; /* Formatted text */
- const char *oldval; /* Pointer to old formatted time value */
- const char *p; /* Pointer to next character in formatted value */
- double fmtval; /* The time value in the formatting system */
- int ndp; /* Number of decimal places in formatted value */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* We want a TimeFrame (fmtfrm) that describes how to format the time
- value. If the Format attribute of the supplied TimeFrame has been
- set, use it (and the current System). So just take a clone of the
- supplied frame pointer. */
- if( astTestFormat( frm, 0 ) ) {
- fmtfrm = astClone( frm );
-
-/* If the Format attribute has not been set, we create a copy of the
- supplied TimeFrame, and set its System and Format attributes to
- produce the required format. */
- } else {
- fmtfrm = astCopy( frm );
-
-/* If the KeyMap contains an entry for the specified key, determine the
- format of the time string it contains. */
- if( astMapGet0C( props, key, &oldval ) && oldval ) {
-
-/* See how many digits there are after the decimal place */
- p = strchr( oldval, '.' );
- ndp = 0;
- if( p ) {
- while( *(++p) ) {
- if( isdigit( *p ) ) {
- ndp++;
- } else {
- break;
- }
- }
- }
-
-/* If the string starts with "JD", the time is formatted as a numerical
- Julian date. */
- if( !strncmp( oldval, "JD", 2 ) ) {
- astSetSystem( fmtfrm, AST__JD );
- if( ndp > 0 ) {
- astSet( fmtfrm, "Format=JD %%.%df", status, ndp );
- } else {
- astSetFormat( fmtfrm, 0, "JD %d" );
- }
-
-/* If the string starts with "MJD", the time is formatted as a numerical
- Modified Julian date. */
- } else if( !strncmp( oldval, "MJD", 3 ) ) {
- astSetSystem( fmtfrm, AST__MJD );
- if( ndp > 0 ) {
- astSet( fmtfrm, "Format=MJD %%.%df", status, ndp );
- } else {
- astSetFormat( fmtfrm, 0, "MJD %d" );
- }
-
-/* Otherwise, the current word should be an ISO date. See how many
- decimal paces in the seconds field there are (if any). */
- } else {
- astSet( fmtfrm, "Format=iso.%dT", status, ndp );
- }
-
-/* If the KeyMap does not contain an entry for the specified key, an
- ISO date/time string with 1 decimal place in the seconds field
- is used. */
- } else {
- astSetFormat( fmtfrm, 0, "iso.1T" );
- }
- }
-
-/* Ensure the displayed value is an abolute value. */
- astClearTimeOrigin( fmtfrm );
-
-/* Convert the supplied time value into the required system. */
- fs = astConvert( frm, fmtfrm, "" );
- astTran1( fs, 1, &value, 1, &fmtval );
-
-/* Format the value. */
- fmttxt = astFormat( fmtfrm, 0, fmtval );
-
-/* Store it in the KeyMap. */
- astMapPut0C( props, key, fmttxt, NULL );
-
-/* Free resources. */
- fs = astAnnul( fs );
- fmtfrm = astAnnul( fmtfrm );
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a StcsChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* StcsChan member function (over-rides the astTestAttrib protected
-* method inherited from the Object class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a StcsChan's attributes.
-
-* Parameters:
-* this
-* Pointer to the StcsChan.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstStcsChan *this; /* Pointer to the StcsChan structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the StcsChan structure. */
- this = (AstStcsChan *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
- if ( !strcmp( attrib, "stcsarea" ) ) {
- result = astTestStcsArea( this );
-
- } else if ( !strcmp( attrib, "stcscoords" ) ) {
- result = astTestStcsCoords( this );
-
- } else if ( !strcmp( attrib, "stcsprops" ) ) {
- result = astTestStcsProps( this );
-
- } else if ( !strcmp( attrib, "stcsindent" ) ) {
- result = astTestStcsIndent( this );
-
- } else if ( !strcmp( attrib, "stcslength" ) ) {
- result = astTestStcsLength( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static int Write( AstChannel *this_channel, AstObject *object, int *status ) {
-/*
-* Name:
-* Write
-
-* Purpose:
-* Write an Object to a StcsChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* int Write( AstChannel *this, AstObject *object, int *status )
-
-* Class Membership:
-* StcsChan member function (over-rides the astWrite method
-* inherited from the Channel class).
-
-* Description:
-* This function writes an Object to a StcsChan.
-
-* Parameters:
-* this
-* Pointer to the StcsChan.
-* object
-* Pointer to the Object which is to be written.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The number of Objects written to the StcsChan by this invocation of
-* astWrite.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the AST error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstFrame *frm; /* AREA Frame */
- AstFrameSet *fs; /* FrameSet connecting AREA and COORDS */
- AstKeyMap *props; /* A KeyMap holding the STC-S properties list */
- AstMapping *map; /* Mapping connecting AREA and COORDS */
- AstObject *obj; /* A temporary Object pointer */
- AstRegion *area; /* The Region representing the STC CoordArea */
- AstRegion *coords; /* The Region representing the STC Coords */
- AstRegion *new_coords; /* COORDS Region mapped into frame of AREA */
- AstStcsChan *this; /* Pointer to the StcsChan structure */
- astDECLARE_GLOBALS; /* Declare the thread specific global data */
- const char *class; /* Pointer to string holding object class */
- const char *errclass; /* Type of the failed entry */
- const char *errname; /* Name of the failed entry */
- const char *method; /* Pointer to string holding calling method */
- const char *wantclass; /* The expected type */
- int ret; /* Number of objects read */
-
-/* Initialise. */
- ret = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return ret;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_channel);
-
-/* Obtain a pointer to the StcsChan structure. */
- this = (AstStcsChan *) this_channel;
-
-/* Store the calling method, and object class. */
- method = "astWrite";
- class = astGetClass( this );
-
-/* Initialise */
- area = NULL;
- coords = NULL;
- props = NULL;
-
-/* If the supplied Object is a Region, we will use it to define the AREA
- properties. */
- if( astIsARegion( object ) ) {
- area = (AstRegion *) astClone( object );
-
-/* If the supplied Object is a KeyMap... */
- } else if( astIsAKeyMap( object ) ) {
- errname = NULL;
- wantclass = NULL;
- errclass = NULL;
-
-/* If the supplied KeyMap contains an entry with key "AREA", and if it is
- a Region, use it to define the AREA properties. */
- if( astMapGet0A( (AstKeyMap *) object, "AREA", &obj ) ) {
- if( astIsARegion( obj ) ) {
- area = (AstRegion *) obj;
- } else {
- wantclass = "Region";
- errclass = astGetClass( obj );
- errname = "AREA";
- obj = astAnnul( obj );
- }
- }
-
-/* If the supplied KeyMap contains an entry with key "COORDS", and if it is
- a Region, use it to define the COORDS properties. */
- if( astMapGet0A( (AstKeyMap *) object, "COORDS", &obj ) ) {
- if( astIsARegion( obj ) ) {
- coords = (AstRegion *) obj;
- } else {
- wantclass = "Region";
- errclass = astGetClass( obj );
- errname = "COORDS";
- obj = astAnnul( obj );
- }
- }
-
-/* If the supplied KeyMap contains an entry with key "PROPS", and if it is
- a KeyMap, use it to define values for the properties that cannot be
- determined from the supplied Regions (Resolution, PixSize, etc). */
- if( astMapGet0A( (AstKeyMap *) object, "PROPS", &obj ) ) {
- if( astIsAKeyMap( obj ) ) {
- props = (AstKeyMap *) obj;
- } else {
- wantclass = "KeyMap";
- errclass = astGetClass( obj );
- errname = "PROPS";
- obj = astAnnul( obj );
- }
- }
-
-/* If the supplied KeyMap contains an entry with any of the keys
- "TIME_PROPS", "SPACE_PROPS", "SPECTRAL_PROPS" or "REDSHIFT_PROPS",
- use the supplied KeyMap to define values for all properties. */
- if( astMapGet0A( (AstKeyMap *) object, "TIME_PROPS", &obj ) ||
- astMapGet0A( (AstKeyMap *) object, "SPACE_PROPS", &obj ) ||
- astMapGet0A( (AstKeyMap *) object, "SPECTRAL_PROPS", &obj ) ||
- astMapGet0A( (AstKeyMap *) object, "REDSHIFT_PROPS", &obj ) ) {
- props = astClone( object );
- }
-
-/* Report an error if the Object in the keymap has the wrong type. */
- if( errname && astOK ) {
- astAddWarning( this, 1, "The supplied KeyMap contains a %s "
- "called '%s'. But '%s' should be a %s "
- "(programming error).", method, status,
- errclass, errname, errname, wantclass );
- }
-
-/* Report an error if the keymap contains none of the above. */
- if( !area && !coords && !props && astOK ) {
- astAddWarning( this, 1, "The supplied KeyMap does not "
- "contains anything that can be written out "
- "through a %s.", method, status, class );
- }
-
-/* If both COORDS and AREA were supplied, ensure they are in the same
- Frame by mapping the COORDS Region into the Frame of the AREA Region. */
- if( area && coords ) {
- fs = astConvert( coords, area, " " );
- if( fs ) {
- map = astGetMapping( fs, AST__BASE, AST__CURRENT );
- frm = astGetFrame( fs, AST__CURRENT );
-
- new_coords = astMapRegion( coords, map, frm );
-
- map = astAnnul( map );
- frm = astAnnul( frm );
- coords = astAnnul( coords );
- fs = astAnnul( fs );
-
- coords = new_coords;
-
- } else if( astOK ){
- astAddWarning( this, 1, "Cannot convert between the co-ordinate "
- "frame of the COORDS Region and the co-ordinate "
- "frame of the AREA Region.", method, status );
- }
- }
-
-/* Report an error if the supplied object is neither a KeyMap nor a
- Region. */
- } else if( astOK ) {
- astAddWarning( this, 1, "Failed to write out a %s through a %s. "
- "The %s class cannot be used to write out a %s.",
- method, status, astGetClass( object ), class, class,
- astGetClass( object ) );
- }
-
-
-/* If we do not have a KeyMap in which to store the STC-S properties,
- create one now. */
- if( astOK ) {
- if( ! props ) props = astKeyMap ( " ", status );
-
-/* Determine the set of STC-S properties that describe the COORDS Region,
- and add them into the properties keymap, over-writing any values for the
- same properties that are already in the props keymap. */
- ret = coords ? WriteRegion( this, coords, props, status ) : 1;
-
-/* Determine the set of STC-S properties that describe the AREA Region,
- and add them into the properties keymap, over-writing any values for the
- same properties that are already in the props keymap. NB, we need to
- do AREA after COORDS so that the sub-phrase identifier implied by the
- AREA is used in preference to that implied by the COORDS. */
- if( area && ret ) ret = WriteRegion( this, area, props, status );
-
-/* Convert the properties list into text and write it out through the
- parent Channel's sink function. */
- if( ret ) WriteProps( this, props, status );
- }
-
-/* Free resources. */
- if( area ) area = astAnnul( area );
- if( coords ) coords = astAnnul( coords );
- if( props ) props = astAnnul( props );
-
-/* If an error has occurred, return zero. */
- if( !astOK ) ret = 0;
-
-/* Return the answer. */
- return ret;
-}
-
-static void WriteProps( AstStcsChan *this, AstKeyMap *props, int *status ){
-/*
-* Name:
-* WriteProps
-
-* Purpose:
-* Write out a set of STC-S properties to the sink function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* void WriteProps( AstStcsChan *this, AstKeyMap *props, int *status )
-
-* Class Membership:
-* StcsChan member function
-
-* Description:
-* This function converts the STC-S properties supplied in a KeyMap
-* into text, and writes the text out through the sink function associated
-* with the parent Channel.
-
-* Parameters:
-* this
-* Pointer to the StcsChan.
-* props
-* Pointer to the KeyMap holding the STC-S properties.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstKeyMap *spprops; /* Sub-phrase properties */
- AstObject *obj; /* Generic Object pointer */
- char *line; /* Dynamically allocated buffer for output text */
- const char *id; /* Sub-phrase identifier */
- const char *prefix; /* Prefix for property value */
- int nc; /* Number of characters in "line" */
- int pretty; /* Include new-lines and indentation in returned text? */
- int crem; /* Character remaining on current output line */
- int linelen; /* Line length */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Initialise things. */
- nc = 0;
- line = NULL;
-
-/* See if indentation and new-lines are to be added to the output text to
- make it look pretty. */
- pretty = astGetStcsIndent( this );
-
-/* If so, get the line length to use, and initialise the number of
- remaining characters in the current output line. */
- if( pretty ) {
- linelen = astGetStcsLength( this );
- } else {
- linelen = 0;
- }
- crem = linelen;
-
-/* Add each word in the time sub-phrase into the output buffer, in the
- order defined by the STC-S standard. */
- if( astMapGet0A( props, "TIME_PROPS", &obj ) ) {
- spprops = (AstKeyMap *) obj;
-
- line = AddItem( this, spprops, "ID", NULL, line, &nc, &crem, linelen, status );
- astMapGet0C( spprops, "ID", &id );
-
- line = AddItem( this, spprops, "FILLFACTOR", "fillfactor ", line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "TIMESCALE", NULL, line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "REFPOS", NULL, line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "START", NULL, line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "STOP", NULL, line, &nc, &crem, linelen, status );
-
- prefix = !astChrMatch( id, "Time" ) ? "Time " : NULL;
- line = AddItem( this, spprops, "TIME", prefix, line, &nc, &crem, linelen, status );
-
- line = AddItem( this, spprops, "UNIT", "unit ", line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "ERROR", "Error ", line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "RESOLUTION", "Resolution ", line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "PIXSIZE", "PixSize ", line, &nc, &crem, linelen, status );
-
- spprops = astAnnul( spprops );
-
-/* Write out the time sub-phrase text through the Channel sink function. */
- if( pretty && astChrLen( line ) ) {
- astPutNextText( this, line );
- nc = 0;
- crem = linelen;
- }
- }
-
-/* Add each word in the space sub-phrase into the output buffer, in the
- order defined by the STC-S standard. */
- if( astMapGet0A( props, "SPACE_PROPS", &obj ) ) {
- spprops = (AstKeyMap *) obj;
-
- line = AddItem( this, spprops, "ID", NULL, line, &nc, &crem, linelen, status );
- astMapGet0C( spprops, "ID", &id );
-
- line = AddItem( this, spprops, "FILLFACTOR", "fillfactor ", line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "FRAME", NULL, line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "REFPOS", NULL, line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "FLAVOUR", NULL, line, &nc, &crem, linelen, status );
-
- line = PutRegionProps( this, spprops, id, (pretty ? 0 : -1), line, &nc,
- &crem, linelen, status );
-
- prefix = !astChrMatch( id, "Position" ) ? "Position " : NULL;
- line = AddItem( this, spprops, "POSITION", prefix, line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "UNIT", "unit ", line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "ERROR", "Error ", line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "RESOLUTION", "Resolution ", line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "SIZE", "Size ", line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "PIXSIZE", "PixSize ", line, &nc, &crem, linelen, status );
-
- spprops = astAnnul( spprops );
-
-/* Write out the spatial sub-phrase text through the Channel sink function. */
- if( pretty && astChrLen( line ) ) {
- astPutNextText( this, line );
- nc = 0;
- crem = linelen;
- }
- }
-
-/* Add each word in the spectral sub-phrase into the output buffer, in the
- order defined by the STC-S standard. */
- if( astMapGet0A( props, "SPECTRAL_PROPS", &obj ) ) {
- spprops = (AstKeyMap *) obj;
-
- line = AddItem( this, spprops, "ID", NULL, line, &nc, &crem, linelen, status );
- astMapGet0C( spprops, "ID", &id );
-
- line = AddItem( this, spprops, "FILLFACTOR", "fillfactor ", line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "REFPOS", NULL, line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "LOLIMIT", NULL, line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "HILIMIT", NULL, line, &nc, &crem, linelen, status );
-
- prefix = !astChrMatch( id, "Spectral" ) ? "Spectral " : NULL;
- line = AddItem( this, spprops, "SPECTRAL", prefix, line, &nc, &crem, linelen, status );
-
- line = AddItem( this, spprops, "UNIT", "unit ", line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "ERROR", "Error ", line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "RESOLUTION", "Resolution ", line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "PIXSIZE", "PixSize ", line, &nc, &crem, linelen, status );
-
- spprops = astAnnul( spprops );
-
-/* Write out the spectral sub-phrase text through the Channel sink function. */
- if( pretty && astChrLen( line ) ) {
- astPutNextText( this, line );
- nc = 0;
- crem = linelen;
- }
- }
-
-/* Add each word in the redshift sub-phrase into the output buffer, in the
- order defined by the STC-S standard. */
- if( astMapGet0A( props, "REDSHIFT_PROPS", &obj ) ) {
- spprops = (AstKeyMap *) obj;
-
- line = AddItem( this, spprops, "ID", NULL, line, &nc, &crem, linelen, status );
- astMapGet0C( spprops, "ID", &id );
-
- line = AddItem( this, spprops, "FILLFACTOR", "fillfactor ", line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "REFPOS", NULL, line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "TYPE", NULL, line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "DOPPLERDEF", NULL, line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "LOLIMIT", NULL, line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "HILIMIT", NULL, line, &nc, &crem, linelen, status );
-
- prefix = !astChrMatch( id, "Redshift" ) ? "Redshift " : NULL;
- line = AddItem( this, spprops, "REDSHIFT", prefix, line, &nc, &crem, linelen, status );
-
- line = AddItem( this, spprops, "UNIT", "unit ", line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "ERROR", "Error ", line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "RESOLUTION", "Resolution ", line, &nc, &crem, linelen, status );
- line = AddItem( this, spprops, "PIXSIZE", "PixSize ", line, &nc, &crem, linelen, status );
-
- spprops = astAnnul( spprops );
-
-/* Write out the redshift sub-phrase text through the Channel sink function. */
- if( pretty && astChrLen( line ) ) {
- astPutNextText( this, line );
- nc = 0;
- crem = linelen;
- }
- }
-
-/* Write out any remaining text through the Channel sink function. */
- if( nc && astChrLen( line ) ) astPutNextText( this, line );
-
-/* Free resources. */
- line = astFree( line );
-
-}
-
-static int WriteRegion( AstStcsChan *this, AstRegion *reg, AstKeyMap *props,
- int *status ){
-/*
-* Name:
-* WriteRegion
-
-* Purpose:
-* Convert a Region into a set of STC-S properties and store them in a
-* KeyMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* int WriteRegion( AstStcsChan *this, AstRegion *reg, AstKeyMap *props,
-* int *status )
-
-* Class Membership:
-* StcsChan member function
-
-* Description:
-* This function attempts to convert the supplied Region nto a set of
-* STC-S properties, and stores them in the supplied KeyMap.
-
-* Parameters:
-* this
-* Pointer to the StcsChan being used.
-* reg
-* Pointer to the region to be converted.
-* props
-* Pointer to the KeyMap in which to store the STC-S properties.
-* On exit, each STC-S sub-phrase has an entry in this KeyMap,
-* and each of these entries has a value that is another KeyMap
-* holding the properties for the sub-phrase.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if the conversion was succesful, and
-* zero is returned otherwise.
-*/
-
-/* Local Variables: */
- AstFrame *efrm; /* Pointer to encapsulated Frame */
- AstFrame *pfrm; /* Pointer to primary Frame cntaining an axis */
- AstFrame *spfrm; /* The sub-phrase Frame */
- AstKeyMap *spprops; /* Sub-phrase properties */
- AstMapping *map; /* Base->current Region Mapping */
- AstMapping *sreg; /* Simplified Region */
- AstObject *obj; /* Generic object pointer */
- AstRegion *spreg; /* The sub-phrase Region */
- AstRegion *treg; /* Temporary Region pointer */
- AstRegion *unc; /* Uncertainty region */
- AstRegion *unca; /* Adaptive uncertainty region */
- AstStdOfRestType sor; /* StdOfRest attribute value */
- AstSystemType sys; /* System attribute value */
- char *prop; /* Formatted property string */
- char *unit1; /* Pointer to string holding first axis unit */
- char buf[ 100 ]; /* Buffer for formatted values */
- char fmt[ 10 ]; /* Buffer for format specifier */
- const char *class; /* Class name */
- const char *dom; /* Domain name */
- const char *dopdef; /* DopplerDef value */
- const char *flavour; /* The STC-S flavour for the space frame */
- const char *q; /* Pointer to next character */
- const char *tfrm; /* STC-S string for Frame */
- const char *tsor; /* STC-S string for RefPos */
- const char *tts; /* Time scale label */
- const char *type; /* Redshift Type value */
- const char *unit; /* Unit string */
- double *pcen; /* Pointer to Circle or ellipse centre */
- double equinox; /* The required equinox value */
- double error; /* Axis error value */
- double fill; /* Fill factor */
- double lbnd[ 3 ]; /* Region lower bounds */
- double lim; /* Unlimited bounds value */
- double p1[ 2 ]; /* End point of error line */
- double scale; /* Factor for scaling Region values into required units */
- double ubnd[ 3 ]; /* Region upper bounds */
- int allthesame; /* Do all axes have the same units? */
- int defdigs; /* Default number of digits */
- int defs; /* Include default values in output STC-S? */
- int i; /* Loop index */
- int issky; /* Do the space axes form a SkyFrame? */
- int nax; /* The number of axes */
- int nc; /* Number of characters in "prop" string */
- int nspace; /* Number of space axes */
- int ok; /* Can the Region be written out? */
- int pax; /* Index of axis in primary Frame */
- int redax; /* The index of the redshift axis */
- int retain_units; /* Retain the units/system in properties KeyMap? */
- int spaceax[ 3 ]; /* Indicies of the space axes */
- int spaceid; /* Code for space sub-phrase identifier */
- int specax; /* The index of the spectral axis */
- int timeax; /* Index of time axis */
- int ts; /* Time scale identifier */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Initialise things to avoid comiler warnings. */
- sys = AST__BADSYSTEM;
-
-/* Assume we can do the conversion. */
- ok = 1;
-
-/* See if default values are to be included in the output. */
- defs = ( astGetFull( this ) > 0 );
-
-/* STC-S requires that the spatial shape (circle, box. etc) refers to
- the coordinate system described by the STC-S. This is not quite like
- AST, in that the AST class type (Circle, Box, etc) defines the
- shape of the region in the base Frame, rather than the current Frame.
- So we can only write the Region out using STC-S if the shape in the
- current Frame is the same as the shape in the base Frame. This is the
- case if the simplified Mapping connecting base and current Frames is
- a UnitMap. Get the base->current Mapping from the Region. */
- map = astRegMapping( reg );
-
-/* If it is not UnitMap, see if simplifying the whole Region results in
- the base->current Mapping in the simplified Region being a UnitMap. */
- if( !astIsAUnitMap( map ) ) {
- map = astAnnul( map );
- sreg = astSimplify( reg );
- map = astRegMapping( sreg );
-
-/* If it is still not UnitMap, we cannot write out the region. */
- if( !astIsAUnitMap( map ) ) {
- astAddWarning( this, 1, "The supplied Region does not have a "
- "supported shape within its current coordinate "
- "system.", "astWrite", status );
- ok = 0;
- }
-
- } else {
- sreg = astClone( reg );
- }
- map = astAnnul( map );
-
-/* Store a safe value that can be used to test unbounded axes. */
- lim = sqrt( DBL_MAX );
-
-/* First job is to identify the Time, Space, Spectral and Redshift axes
- in the supplied Region.
- ------------------------------------------------------------------- */
-
-/* Initialise things. */
- timeax = -1;
- nspace = 0;
- issky = 0;
- specax = -1;
- redax = -1;
- prop = NULL;
-
-/* Get a pointer to the Frame encapsulated by the Region. */
- efrm = astRegFrame( sreg );
-
-/* Loop round all axes. */
- nax = astGetNaxes( sreg );
- for( i = 0; i < nax; i++ ) {
-
-/* Get the primary Frame that defines the current axis of the Region. */
- astPrimaryFrame( efrm, i, &pfrm, &pax );
-
-/* Get its class and domain. */
- class = astGetClass( pfrm );
- dom = astGetDomain( pfrm );
- if( astOK ) {
-
-/* The time axis is described by a TimeFrame with any domain. */
- if( !strcmp( class, "TimeFrame" ) ) {
- if( timeax == -1 ) {
- timeax = i;
- } else {
- astAddWarning( this, 1, "More than one time axis found. "
- "Extra axis (axis %d) will be ignored.",
- "astWrite", status, i + 1 );
- }
-
-/* The space axes are described by a SkyFrame or a basic Frame. If a
- mixture of both types are found, report a warning and ignore the later
- axes. */
- } else if( !strcmp( class, "SkyFrame" ) ) {
- if( issky || nspace == 0 ) {
- if( nspace < 2 ) {
- spaceax[ nspace++ ] = i;
- issky = 1;
- } else {
- astAddWarning( this, 1, "More than two sky frame axes "
- "found. Extra axis (axis %d) will be ignored.",
- "astWrite", status, i + 1 );
- }
-
- } else {
- astAddWarning( this, 1, "Mixture of basic and sky frame "
- "axes found. Sky frame axis %d will be "
- "ignored.", "astWrite", status, i + 1 );
- }
-
- } else if( !strcmp( class, "Frame" ) ) {
- if( !issky ) {
- if( nspace < 3 ) {
- spaceax[ nspace++ ] = i;
- } else {
- astAddWarning( this, 1, "More than three basic space frame axes "
- "found. Extra axis (axis %d) will be ignored.",
- "astWrite", status, i + 1 );
- }
-
- } else {
- astAddWarning( this, 1, "Mixture of basic and sky frame "
- "axes found. Basic frame axis %d will be "
- "ignored.", "astWrite", status, i + 1 );
- }
-
-/* The spectral axis is described by a SpecFrame with domain SPECTRUM. */
- } else if( !strcmp( class, "SpecFrame" ) &&
- !strcmp( dom, "SPECTRUM" ) ) {
- if( specax == -1 ) {
- specax = i;
- } else {
- astAddWarning( this, 1, "More than one spectral axis found. "
- "Extra axis (axis %d) will be ignored.",
- "astWrite", status, i + 1 );
- }
-
-/* The redshift axis is described by a SpecFrame with domain REDSHIFT. */
- } else if( !strcmp( class, "SpecFrame" ) &&
- !strcmp( dom, "REDSHIFT" ) ) {
- if( redax == -1 ) {
- redax = i;
- } else {
- astAddWarning( this, 1, "More than one redshift axis found. "
- "Extra axis (axis %d) will be ignored.",
- "astWrite", status, i + 1 );
- }
-
-/* Warn about unused axes. */
- } else {
- astAddWarning( this, 1, "Could not classify axis %d (class=%s "
- "domain=%s). It will be ignored.", "astWrite", status,
- i + 1, class, dom );
- }
- }
-
-/* Free resources. */
- pfrm = astAnnul( pfrm );
- }
- efrm = astAnnul( efrm );
-
-/* Set a flag indicating if there is anything to convert. */
- ok = ok && ( timeax != -1 || nspace > 0 || specax != -1 || redax != -1 );
-
-
-/* Now we have identified the axes, we convert each available STC-S
- sub-phrase, starting with the time sub-phrase.
- ---------------------------------------------------------------- */
- if( timeax != -1 ) {
-
-/* Create a Region by picking the time axis from the supplied Region. */
- spreg = astPickAxes( sreg, 1, &timeax, NULL );
-
-/* Check it is a Region. If not, we cannot convert anything. */
- if( !astIsARegion( spreg ) ) {
- astAddWarning( this, 1, "Cannot determine the region covered by "
- "the time axis.", "astWrite", status );
- ok = 0;
-
-/* Otherwise we add a description of the time sub-phrase to the
- properties keymap. */
- } else {
-
-/* Get a pointer to the Region's time phrase property KeyMap, creating
- one if necessary. */
- if( astMapGet0A( props, "TIME_PROPS", &obj ) ) {
- spprops = (AstKeyMap *) obj;
- } else {
- spprops = astKeyMap( " ", status );
- astMapPut0A( props, "TIME_PROPS", spprops, NULL );
- }
-
-/* Get the Region's fill factor. */
- fill = astGetFillFactor( spreg );
-
-/* Ensure the TimeFrame represents MJD. If not, take a deep copy (to
- avoid changing the supplied Region), and set its system to MJD. */
- if( astGetSystem( spreg ) != AST__MJD ) {
- treg = astCopy( spreg );
- (void) astAnnul( spreg );
- spreg = treg;
- astSetAdaptive( spreg, 1 );
- astSetSystem( spreg, AST__MJD );
- }
-
-/* Get the bounds of the Region (i.e. the time axis coverage). */
- astGetRegionBounds( spreg, lbnd, ubnd );
-
-/* Get a pointer to the time Region's encapsulated Frame. */
- spfrm = astRegFrame( spreg );
-
-/* Report a warning if the sub-phrase Frame is not a TimeFrame */
- if( !astIsATimeFrame( spfrm ) ) {
- ok = 0;
- astAddWarning( this, 1, "The time sub-phrase in the supplied "
- "KeyMap is not described using an AST TimeFrame.",
- "astWrite", status );
-
-/* Store properties that are specific to Time moments... */
- } else if( lbnd[ 0 ] == ubnd[ 0 ] ) {
- astMapPut0C( spprops, "ID", "Time", NULL );
- StoreTimeProp( spprops, (AstTimeFrame *) spfrm, "TIME", lbnd[ 0 ], status );
- fill = AST__BAD;
-
-/* Store properties that are specific to Time intervals... */
- } else if( lbnd[ 0 ] > -lim && ubnd[ 0 ] < lim ) {
- astMapPut0C( spprops, "ID", "TimeInterval", NULL );
- StoreTimeProp( spprops, (AstTimeFrame *) spfrm, "START", lbnd[ 0 ], status );
- StoreTimeProp( spprops, (AstTimeFrame *) spfrm, "STOP", ubnd[ 0 ], status );
-
-/* Store properties that are specific to Start times... */
- } else if( lbnd[ 0 ] > -lim ) {
- astMapPut0C( spprops, "ID", "StartTime", NULL );
- StoreTimeProp( spprops, (AstTimeFrame *) spfrm, "START", lbnd[ 0 ], status );
-
-/* Store properties that are specific to Stop times... */
- } else {
- astMapPut0C( spprops, "ID", "StopTime", NULL );
- StoreTimeProp( spprops, (AstTimeFrame *) spfrm, "STOP", ubnd[ 0 ], status );
-
- }
-
-/* Store properties that are common to all time sub-phrase types. First the
- fill factor. */
- MapPut0D( spprops, "FILLFACTOR", fill, 1.0, defs, status );
-
-/* Now the time scale. */
- ts = astGetTimeScale( spfrm );
- if( ts == AST__TT ) {
- tts = "TT";
-
- } else if( ts == AST__TAI ) {
- tts = "TAI";
-
- } else if( ts == AST__UTC ) {
- tts = "UTC";
-
- } else if( ts == AST__TDB ) {
- tts = "TDB";
-
- } else if( ts == AST__TCG ) {
- tts = "TCG";
-
- } else if( ts == AST__TCB ) {
- tts = "TCB";
-
- } else if( ts == AST__LMST ) {
- tts = "LST";
-
- } else {
- tts = "nil";
- astAddWarning( this, 1, "Timescale '%s' is unsupported by "
- "STC-S.", "astWrite", status,
- astGetC( spfrm, "TimeScale" ) );
- ok = 0;
- }
-
- MapPut0C( spprops, "TIMESCALE", tts, "nil", defs, status );
-
-/* RefPos. The AST TimeFrame class has no reference position, we leave
- unchanged any refpos already in the keymap. If there is no refpos in the
- keymap, we use "TOPOCENTER". */
- if( !astMapHasKey( spprops, "REFPOS" ) ) {
- astMapPut0C( spprops, "REFPOS", "TOPOCENTER", NULL );
- }
-
-/* That's it for the time sub-phrase, unless the supplied Region has an
- explicit (non-default) uncertainty. */
- unc = astGetUnc( spreg, 0 );
- if( unc ) {
-
-/* See if the supplied properties KeyMap contains any item that refers to
- the Unit included in the STC-S description, but which is not updated by
- this function. If it does, we need to retain any units specified
- within the KeyMap. */
- retain_units = ( astMapHasKey( spprops, "RESOLUTION" ) ||
- astMapHasKey( spprops, "PIXSIZE" ) ||
- astMapHasKey( spprops, "SIZE" ) );
-
- if( retain_units ) {
- if( !astMapGet0C( spprops, "UNIT", &unit ) ) unit = "s";
- } else {
- unit = "s";
- }
-
-/* Store the units string */
- MapPut0C( spprops, "UNIT", unit, "s", defs, status );
-
-/* If necessary, map the uncertainty region into the requied units. Take
- a deep copy to avoid changing the supplied Region. */
- if( strcmp( unit, astGetUnit( unc, 0 ) ) ) {
- unca = astCopy( unc );
- astSetAdaptive( unca, 0 );
- astSetUnit( unca, 0, unit );
- } else {
- unca = astClone( unc );
- }
-
-/* Get the bounds of the uncertainty. */
- astGetRegionBounds( unca, lbnd, ubnd );
-
-/* The error is half the width of the bounding box. */
- astMapPut0D( spprops, "ERROR", 0.5*( ubnd[ 0 ] - lbnd[ 0 ] ), NULL );
-
-/* Free resources. */
- unca = astAnnul( unca );
- unc = astAnnul( unc );
- }
-
-/* Free resources. */
- spfrm = astAnnul( spfrm );
- spprops = astAnnul( spprops );
- }
-
-/* Free resources. */
- spreg = astAnnul( spreg );
-
- }
-
-
-/* Now convert the space sub-phrase.
- ---------------------------------------------------------------- */
- if( nspace > 0 && ok ) {
-
-/* Create a Region by picking the space axes from the supplied Region. */
- spreg = astPickAxes( sreg, nspace, spaceax, NULL );
-
-/* Check it is a Region. If not, we cannot convert anything. */
- if( ! astIsARegion( spreg ) ) {
- astAddWarning( this, 1, "Cannot determine the region covered by "
- "the space axes.", "astWrite", status );
- ok = 0;
-
-/* Otherwise we add a description of the space sub-phrase to the
- properties keymap. */
- } else {
-
-/* Get a pointer to the Region's space phrase property KeyMap, creating
- one if necessary. */
- if( astMapGet0A( props, "SPACE_PROPS", &obj ) ) {
- spprops = (AstKeyMap *) obj;
- } else {
- spprops = astKeyMap( " ", status );
- astMapPut0A( props, "SPACE_PROPS", spprops, NULL );
- }
-
-/* If the space frame is a SkyFrame, ensure it refers to a coodinate
- system that is supported by STC-S. Take a deep copy before changing
- anything. */
- if( issky ) {
- sys = astGetSystem( spreg );
- if( sys != AST__FK4 &&
- sys != AST__FK5 &&
- sys != AST__ICRS &&
- sys != AST__ECLIPTIC &&
- sys != AST__GALACTIC &&
- sys != AST__SUPERGALACTIC &&
- sys != AST__UNKNOWN ) {
- treg = astCopy( spreg );
- (void) astAnnul( spreg );
- spreg = treg;
- astSetAdaptive( spreg, 1 );
- astSetSystem( spreg, AST__ICRS );
- }
- }
-
-/* Get a pointer to the Region's encapsulated Frame. */
- spfrm = astRegFrame( spreg );
-
-/* If the supplied Region is defined in a SkyFrame, choose the units to
- use when storing radius, error, etc in the KeyMap. If the props KeyMap
- already contains a unit specification, we use it. Otherwise we use the
- default (degrees). AST uses radians internally, so find the scaling
- factor. */
- if( issky ) {
- if( astMapGet0C( spprops, "UNIT", &unit ) ) {
- if( !strcmp( unit, "arcmin" ) ) {
- scale = AST__DR2D*60.0;
- } else if( !strcmp( unit, "arcsec" ) ) {
- scale = AST__DR2D*3600.0;
- } else {
- unit = "deg";
- scale = AST__DR2D;
- }
- } else {
- unit = "deg";
- scale = AST__DR2D;
- }
-
-/* Store the units string */
- MapPut0C( spprops, "UNIT", unit, "deg", defs, status );
-
-/* If the supplied Region is not defined in a SkyFrame, we will arrange
- that the Region and the KeyMap use the same units, so set a scale
- factor of 1.0. */
- } else {
- scale = 1.0;
-
-/* See if the supplied properties KeyMap contains any item that refers to
- the Unit included in the STC-S description, but which is not updated by
- this function. If it does, we need to retain any units specified
- within the KeyMap. */
- retain_units = ( astMapHasKey( spprops, "RESOLUTION" ) ||
- astMapHasKey( spprops, "PIXSIZE" ) ||
- astMapHasKey( spprops, "SIZE" ) );
-
-/* If so, and if the properties KeyMap already contains a Unit
- specification, we convert the Region to the same units. Take a deep
- copy of the Region first to avoid modifying the supplied Region. */
- if( retain_units ) {
- if( !astMapGet0C( spprops, "UNIT", &unit ) ) unit = "deg";
-
- treg = astCopy( spreg );
- (void) astAnnul( spreg );
- spreg = treg;
-
- for( i = 0; i < nspace; i++ ) {
- astSetUnit( spreg, i, unit );
-
-/* Space frames can have different units on different axes. So look for
- the start of the next word in the Unit propert. This will be the unit
- for the next axis. If there are no more words in the Unit property,
- re-use the last unit value. */
- q = unit;
- while( *q && !isspace( *q ) ) q++;
- while( *q && isspace( *q ) ) q++;
- if( *q ) unit = q;
- }
-
-/* If we are not retaining the units specified in the properties KeyMap, we
- retain the existing Region units instead, and store these units in the
- properties KeyMap. We also check that these units are supported by
- STC-S. */
- } else {
-
- nc = 0;
- allthesame = 1;
- unit1 = NULL;
-
- for( i = 0; i < nspace; i++ ) {
- unit = astGetUnit( spreg, i );
-
- if( !unit1 ) {
- unit1 = astStore( NULL, unit, strlen( unit ) + 1 );
- } else {
- if( strcmp( unit, unit1 ) ) allthesame = 0;
- }
-
- if( strcmp( unit, "deg" ) &&
- strcmp( unit, "arcmin" ) &&
- strcmp( unit, "arcsec" ) &&
- strcmp( unit, "m" ) &&
- strcmp( unit, "mm" ) &&
- strcmp( unit, "km" ) &&
- strcmp( unit, "AU" ) &&
- strcmp( unit, "pc" ) &&
- strcmp( unit, "kpc" ) &&
- strcmp( unit, "Mpc" ) ) {
- astAddWarning( this, 1, "Cannot use spatial units '%s'.",
- "astWrite", status, unit );
- ok = 0;
- break;
- }
- prop = astAppendString( prop, &nc, unit );
- prop = astAppendString( prop, &nc, " " );
- }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
- if( ! allthesame ) {
- prop[ nc - 1 ] = 0;
- astMapPut0C( spprops, "UNIT", prop, NULL );
- } else {
- astMapPut0C( spprops, "UNIT", unit1, NULL );
- }
-
- unit1 = astFree( unit1 );
-
- }
- }
-
-/* Get the fill factor. */
- fill = astGetFillFactor( spreg );
-
-/* Get the default number of digits. This is only used if the supplied
- properties KeyMap does not have a value for the item being stored. If
- it does, the number of digits is inherited form the value int he KeyMap. */
- defdigs = astGetDigits( spfrm );
-
-/* Store properties that are specific to the particular type of Region. */
- spaceid = GetRegionProps( this, spreg, spprops, nspace, defdigs,
- scale, issky, status );
- if( spaceid == NULL_ID ) ok = 0;
-
-/* If the above went OK, store values for the properties that are common
- to all types of space sub-phrase. */
- if( ok ) {
-
-/* First the fill factor. */
- if( spaceid != POSITION_ID ) {
- MapPut0D( spprops, "FILLFACTOR", fill, 1.0, defs, status );
- }
-
-/* Now the coordinate frame. */
- tfrm = NULL;
- sys = astGetSystem( spfrm );
- if( issky ) {
- if( sys == AST__FK4 ){
- tfrm = "B1950";
- equinox = 1950.0;
-
- } else if( sys == AST__FK5 ){
- tfrm = "J2000";
- equinox = 2000.0;
-
- } else if( sys == AST__ICRS ){
- tfrm = "ICRS";
- equinox = AST__BAD;
-
- } else if( sys == AST__ECLIPTIC ){
- tfrm = "ECLIPTIC";
- equinox = 2000.0;
-
- } else if( sys == AST__GALACTIC ){
- tfrm = "GALACTIC";
- equinox = AST__BAD;
-
- } else if( sys == AST__SUPERGALACTIC ){
- tfrm = "SUPER_GALACTIC";
- equinox = AST__BAD;
-
- } else if( sys == AST__UNKNOWN ){
- tfrm = NULL;
- equinox = AST__BAD;
-
- } else {
- tfrm = NULL;
- astAddWarning( this, 1, "Sky system '%s' is "
- "unsupported by STC-S.", "astWrite",
- status, astGetC( spfrm, "System" ) );
- ok = 0;
- }
-
- if( tfrm && equinox != AST__BAD ) {
- if( astGetD( spfrm, "Equinox" ) != equinox ) {
- astAddWarning( this, 1, "STC-S requires an equinox "
- "of %g for the %s frame, but the "
- "supplied %s equinox is %g.", "astWrite",
- status, equinox, tfrm,
- astGetClass( spfrm ),
- astGetD( spfrm, "Equinox" ) );
- ok = 0;
- tfrm = NULL;
- }
- }
- }
-
-/* If we do not yet have a Frame, use the Domain value if it is set (and
- is a legal STC-S Frame). */
- if( ! tfrm ) {
- if( astTestDomain( spfrm ) ) {
- tfrm = astGetDomain( spfrm );
- if( strcmp( tfrm, "ICRS" ) &&
- strcmp( tfrm, "FK5" ) &&
- strcmp( tfrm, "FK4" ) &&
- strcmp( tfrm, "J2000" ) &&
- strcmp( tfrm, "B1950" ) &&
- strcmp( tfrm, "ECLIPTIC" ) &&
- strcmp( tfrm, "GALACTIC" ) &&
- strcmp( tfrm, "GALACTIC_II" ) &&
- strcmp( tfrm, "SUPER_GALACTIC" ) &&
- strcmp( tfrm, "GEO_C" ) &&
- strcmp( tfrm, "GEO_D" ) ){
- astAddWarning( this, 1, "'UNKNOWNFrame' being used in "
- "place of unsupported frame '%s'.",
- "astWrite", status, tfrm );
- tfrm = NULL;
- }
- }
- }
-
-/* Store the Frame name in the props keymap. */
- if( !tfrm ) tfrm = "UNKNOWNFrame";
- astMapPut0C( spprops, "FRAME", tfrm, NULL );
-
-/* RefPos. The AST SkyFrame and Frame classes have no reference position, so
- we leave unchanged any refpos already in the props keymap. If there is
- no refpos in the keymap, we use "TOPOCENTER". */
- if( !astMapHasKey( spprops, "REFPOS" ) ) {
- astMapPut0C( spprops, "REFPOS", "TOPOCENTER", NULL );
- }
-
-/* Flavour. */
- if( issky ) {
- flavour = "SPHER2";
- } else if( nspace == 1 ){
- flavour = "CART1";
- } else if( nspace == 2 ){
- flavour = "CART2";
- } else {
- flavour = "CART3";
- }
- MapPut0C( spprops, "FLAVOUR", flavour, "SPHER2", defs, status );
-
-/* That's it for the space sub-phrase, unless the supplied Region has an
- explicit (non-default) uncertainty. */
- unc = astGetUnc( spreg, 0 );
- if( unc ) {
-
-/* Get the bounds of the uncertainty. */
- astGetRegionBounds( unc, lbnd, ubnd );
-
-/* If its a sky frame, find the position of the centre of the uncertainty
- region. */
- pcen = issky ? astRegCentre( unc, NULL, NULL, 0,
- AST__CURRENT ) : NULL;
-
-/* Find the half-width of the bounding box for each space axis, and
- concatenate their formatted values into a string. If any bound is
- undefined, quit the axis loop with nc=0. We need to convert longitude
- axis values from lingitude increments to arc-distance. */
- nc = 0;
- defdigs = astGetDigits( unc );
-
- for( i = 0; i < nspace; i++ ) {
- if( ubnd[ i ] != AST__BAD && lbnd[ i ] != AST__BAD ){
-
- if( ! issky ) {
- error = 0.5*( ubnd[ i ] - lbnd[ i ] );
- } else {
- if( i == 0 ) {
- p1[ 0 ] = ubnd[ 0 ];
- p1[ 1 ] = pcen[ 1 ];
- } else {
- p1[ 0 ] = pcen[ 0 ];
- p1[ 1 ] = ubnd[ 1 ];
- }
- error = astDistance( spfrm, pcen, p1 );
- }
-
- GetFmt( "ERROR", spprops, i, defdigs, fmt, status );
- (void) sprintf( buf, fmt, scale*error );
- prop = astAppendString( prop, &nc, buf );
- prop = astAppendString( prop, &nc, " " );
-
- } else {
- nc = 0;
- break;
- }
- }
-
-/* If the bounds were all good, store the string holding the formatted
- error values in the properties KeyMap. */
- if( nc > 0 ) {
- prop[ nc - 1 ] = 0;
- astMapPut0C( spprops, "ERROR", prop, NULL );
- }
-
-/* Free resources. */
- pcen = astFree( pcen );
- unc = astAnnul( unc );
- }
- }
-
-/* Free resources. */
- spfrm = astAnnul( spfrm );
- spprops = astAnnul( spprops );
- }
-
-/* Free resources. */
- spreg = astAnnul( spreg );
-
- }
-
-
-
-/* Convert the spectral sub-phrase.
- ---------------------------------------------------------------- */
- if( specax != -1 ) {
-
-/* Create a Region by picking the spectral axis from the supplied Region. */
- spreg = astPickAxes( sreg, 1, &specax, NULL );
-
-/* Check it is a Region. If not, we cannot convert anything. */
- if( !astIsARegion( spreg ) ) {
- astAddWarning( this, 1, "Cannot determine the region covered by "
- "the spectral axis.", "astWrite", status );
- ok = 0;
-
-/* Otherwise we add a description of the spectral sub-phrase to the
- properties keymap. */
- } else {
-
-/* Get a pointer to the Region's spectral phrase property KeyMap, creating
- one if necessary. */
- if( astMapGet0A( props, "SPECTRAL_PROPS", &obj ) ) {
- spprops = (AstKeyMap *) obj;
- } else {
- spprops = astKeyMap( " ", status );
- astMapPut0A( props, "SPECTRAL_PROPS", spprops, NULL );
- }
-
-/* See if the supplied properties KeyMap contains any item that refers to
- the Unit included in the STC-S description, but which is not updated by
- this function. If it does, we need to retain any units specified
- within the KeyMap. */
- retain_units = ( astMapHasKey( spprops, "RESOLUTION" ) ||
- astMapHasKey( spprops, "PIXSIZE" ) ||
- astMapHasKey( spprops, "SIZE" ) );
-
-/* If so, and if the properties KeyMap already contains a Unit specification,
- we convert the Region to the same units and system. Determine the
- required system and units. */
- if( retain_units ) {
- if( !astMapGet0C( spprops, "UNIT", &unit ) ) unit = "Hz";
-
- if( !strcmp( unit, "Hz" ) ||
- !strcmp( unit, "MHz" ) ||
- !strcmp( unit, "GHz" ) ) {
- sys = AST__FREQ;
-
- } else if( !strcmp( unit, "m" ) ||
- !strcmp( unit, "mm" ) ||
- !strcmp( unit, "um" ) ||
- !strcmp( unit, "nm" ) ||
- !strcmp( unit, "Angstrom" ) ) {
- sys = AST__WAVELEN;
-
- } else if( !strcmp( unit, "eV" ) ||
- !strcmp( unit, "keV" ) ||
- !strcmp( unit, "MeV" ) ) {
- sys = AST__ENERGY;
-
- } else {
- astAddWarning( this, 1, "Illegal STC-S units '%s' found in "
- "supplied KeyMap", "astWrite", status, unit );
- ok = 0;
- }
-
-/* If we do not need to retain the units implied by the supplied KeyMap,
- use the Units and system in the supplied Region so long as they are
- supported by STC-S. If not, use a related supported system instead. */
- } else {
- sys = astGetSystem( spreg );
- unit = astGetUnit( spreg, 0 );
-
- if( sys == AST__ENERGY ) {
- sys = AST__ENERGY;
- if( strcmp( unit, "eV" ) &&
- strcmp( unit, "keV" ) &&
- strcmp( unit, "MeV" ) ) unit = "eV";
-
- } else if( sys == AST__WAVELEN || sys == AST__AIRWAVE ||
- sys == AST__VOPTICAL || sys == AST__REDSHIFT ){
- sys = AST__WAVELEN;
- if( strcmp( unit, "m" ) &&
- strcmp( unit, "mm" ) &&
- strcmp( unit, "um" ) &&
- strcmp( unit, "nm" ) &&
- strcmp( unit, "Angstrom" ) ) unit = "m";
-
- } else {
- sys = AST__FREQ;
- if( strcmp( unit, "Hz" ) &&
- strcmp( unit, "MHz" ) &&
- strcmp( unit, "GHz" ) ) unit = "Hz";
-
- }
- }
-
-/* Store the units string */
- MapPut0C( spprops, "UNIT", unit, "Hz", defs, status );
-
-/* If either the System or Unit needs to be changed in the Region, take a
- deep copy first in order to avoid changing the supplied Region. */
- if( sys != astGetSystem( spreg ) ||
- ( unit && strcmp( unit, astGetUnit( spreg, 0 ) ) ) ) {
- treg = astCopy( spreg );
- (void) astAnnul( spreg );
- spreg = treg;
- astSetAdaptive( spreg, 1 );
- astSetSystem( spreg, sys );
- astSetUnit( spreg, 0, unit );
- }
-
-/* Get the Region's fill factor. */
- fill = astGetFillFactor( spreg );
-
-/* Get the bounds of the Region (i.e. the spectral axis coverage). */
- astGetRegionBounds( spreg, lbnd, ubnd );
-
-/* Get a pointer to the spectral Region's encapsulated Frame. */
- spfrm = astRegFrame( spreg );
-
-/* Report a warning if the sub-phrase Frame is not a SpecFrame */
- if( !astIsASpecFrame( spfrm ) ) {
- ok = 0;
- astAddWarning( this, 1, "The spectral sub-phrase in the supplied "
- "KeyMap is not described using an AST SpecFrame.",
- "astWrite", status );
-
-/* Store properties that are specific to spectral positions... */
- } else if( lbnd[ 0 ] == ubnd[ 0 ] ) {
- astMapPut0C( spprops, "ID", "Spectral", NULL );
- astMapPut0D( spprops, "SPECTRAL", lbnd[ 0 ], NULL );
- fill = AST__BAD;
-
-/* Store properties that are specific to Spectral intervals... */
- } else if( lbnd[ 0 ] > -lim && ubnd[ 0 ] < lim ) {
- astMapPut0C( spprops, "ID", "SpectralInterval", NULL );
- astMapPut0D( spprops, "LOLIMIT", lbnd[ 0 ], NULL );
- astMapPut0D( spprops, "HILIMIT", ubnd[ 0 ], NULL );
-
- } else {
- ok = 0;
- astAddWarning( this, 1, "Cannot write out an unbounded "
- "spectral interval.", "astWrite", status );
- }
-
-/* Store properties that are common to all spectral sub-phrase types. First the
- fill factor. */
- MapPut0D( spprops, "FILLFACTOR", fill, 1.0, defs, status );
-
-/* Now the reference position. */
- sor = astGetStdOfRest( spfrm );
- if( sor == AST__GESOR ) {
- tsor = "GEOCENTER";
-
- } else if( sor == AST__BYSOR ) {
- tsor = "BARYCENTER";
-
- } else if( sor == AST__HLSOR ) {
- tsor = "HELIOCENTER";
-
- } else if( sor == AST__TPSOR ) {
- tsor = "TOPOCENTER";
-
- } else if( sor == AST__LKSOR ) {
- tsor = "LSRK";
-
- } else if( sor == AST__LDSOR ) {
- tsor = "LSRD";
-
- } else if( sor == AST__GLSOR ) {
- tsor = "GALACTIC_CENTER";
-
- } else {
- tsor = NULL;
- }
-
- if( !tsor ) tsor = "UNKNOWNRefPos";
- MapPut0C( spprops, "REFPOS", tsor, "UNKNOWNRefPos", defs,
- status );
-
-/* Now the unit string. */
- MapPut0C( spprops, "UNIT", unit, "Hz", defs, status );
-
-/* That's it for the spectral sub-phrase, unless the supplied Region has an
- explicit (non-default) uncertainty. */
- unc = astGetUnc( spreg, 0 );
- if( unc ) {
-
-/* Get the bounds of the uncertainty. */
- astGetRegionBounds( unc, lbnd, ubnd );
-
-/* The error is half the width of the bounding box. */
- astMapPut0D( spprops, "ERROR", 0.5*( ubnd[ 0 ] - lbnd[ 0 ] ), NULL );
-
-/* Free resources. */
- unc = astAnnul( unc );
- }
-
-/* Free resources. */
- spfrm = astAnnul( spfrm );
- spprops = astAnnul( spprops );
- }
-
-/* Free resources. */
- spreg = astAnnul( spreg );
-
- }
-
-
-
-/* Convert the redshift sub-phrase.
- ---------------------------------------------------------------- */
- if( redax != -1 ) {
-
-/* Create a Region by picking the redshift axis from the supplied Region. */
- spreg = astPickAxes( sreg, 1, &redax, NULL );
-
-/* Check it is a Region. If not, we cannot convert anything. */
- if( !astIsARegion( spreg ) ) {
- astAddWarning( this, 1, "Cannot determine the region covered by "
- "the redshift axis.", "astWrite", status );
- ok = 0;
-
-/* Otherwise we add a description of the redshift sub-phrase to the
- properties keymap. */
- } else {
-
-/* Get a pointer to the Region's redshift phrase property KeyMap, creating
- one if necessary. */
- if( astMapGet0A( props, "REDSHIFT_PROPS", &obj ) ) {
- spprops = (AstKeyMap *) obj;
- } else {
- spprops = astKeyMap( " ", status );
- astMapPut0A( props, "REDSHIFT_PROPS", spprops, NULL );
- }
-
-/* See if the supplied properties KeyMap contains any item that refers to
- the system included in the STC-S description, but which is not updated by
- this function. If it does, we need to retain any system specified
- within the KeyMap. */
- retain_units = ( astMapHasKey( spprops, "RESOLUTION" ) ||
- astMapHasKey( spprops, "PIXSIZE" ) ||
- astMapHasKey( spprops, "SIZE" ) );
-
-/* If so, and if the properties KeyMap already contains a DopplerDef or
- Type specification, we convert the Region to the same system. */
- if( retain_units ){
- if( !astMapGet0C( spprops, "DOPPLERDEF", &dopdef ) ) dopdef = "OPTICAL";
- if( !astMapGet0C( spprops, "TYPE", &type ) ) type = "VELOCITY";
-
- if( astChrMatch( type, "VELOCITY" ) ) {
- if( astChrMatch( dopdef, "OPTICAL" ) ) {
- sys = AST__VOPTICAL;
- } else if( astChrMatch( dopdef, "RADIO" ) ) {
- sys = AST__VRADIO;
- } else if( astChrMatch( dopdef, "RELATIVISTIC" ) ) {
- sys = AST__VREL;
- } else {
- astAddWarning( this, 1, "Illegal STC-S DopplerDef '%s' "
- "found in supplied KeyMap", "astWrite", status,
- dopdef );
- ok = 0;
- }
-
- } else if( astChrMatch( type, "REDSHIFT" ) ) {
- if( astChrMatch( dopdef, "OPTICAL" ) ) {
- sys = AST__REDSHIFT;
- } else {
- astAddWarning( this, 1, "Unsupported combination of "
- "DopplerDef='%s' and Type='%s' found in "
- "supplied KeyMap", "astWrite", status, dopdef,
- type );
- ok = 0;
- }
-
- } else {
- astAddWarning( this, 1, "Illegal STC-S Redshift Type '%s' "
- "found in supplied KeyMap", "astWrite", status,
- type );
- ok = 0;
- }
-
-/* If the supplied KeyMap does not imply the required system, use the
- system in the supplied Region. */
- } else {
- sys = astGetSystem( spreg );
- }
-
-/* Choose the requied units. */
- unit = ( sys == AST__REDSHIFT ) ? "": "km/s";
-
-/* Store the units string */
- MapPut0C( spprops, "UNIT", unit, unit, defs, status );
-
-/* If either the System or Unit needs to be changed in the Region, take a
- deep copy first in order to avoid changing the supplied Region. */
- if( sys != astGetSystem( spreg ) ||
- ( unit && strcmp( unit, astGetUnit( spreg, 0 ) ) ) ) {
- treg = astCopy( spreg );
- (void) astAnnul( spreg );
- spreg = treg;
- astSetAdaptive( spreg, 1 );
- astSetSystem( spreg, sys );
- astSetUnit( spreg, 0, unit );
- }
-
-/* Get the Region's fill factor. */
- fill = astGetFillFactor( spreg );
-
-/* Get the bounds of the Region (i.e. the redshift axis coverage). */
- astGetRegionBounds( spreg, lbnd, ubnd );
-
-/* Get a pointer to the spectral Region's encapsulated Frame. */
- spfrm = astRegFrame( spreg );
-
-/* Report a warning if the sub-phrase Frame is not a SpecFrame */
- if( !astIsASpecFrame( spfrm ) ) {
- ok = 0;
- astAddWarning( this, 1, "The redshift sub-phrase in the supplied "
- "KeyMap is not described using an AST SpecFrame.",
- "astWrite", status );
-
-/* Store properties that are specific to redshift positions... */
- } else if( lbnd[ 0 ] == ubnd[ 0 ] ) {
- astMapPut0C( spprops, "ID", "Redshift", NULL );
- astMapPut0D( spprops, "REDSHIFT", lbnd[ 0 ], NULL );
- fill = AST__BAD;
-
-/* Store properties that are specific to Redshift intervals... */
- } else if( lbnd[ 0 ] > -lim && ubnd[ 0 ] < lim ) {
- astMapPut0C( spprops, "ID", "RedshiftInterval", NULL );
- astMapPut0D( spprops, "LOLIMIT", lbnd[ 0 ], NULL );
- astMapPut0D( spprops, "HILIMIT", ubnd[ 0 ], NULL );
-
- } else {
- ok = 0;
- astAddWarning( this, 1, "Cannot write out an unbounded "
- "redshift interval.", "astWrite", status );
- }
-
-/* Store properties that are common to all redshift sub-phrase types. First the
- fill factor. */
- MapPut0D( spprops, "FILLFACTOR", fill, 1.0, defs, status );
-
-/* Now the reference position. */
- sor = astGetStdOfRest( spfrm );
-
- if( sor == AST__GESOR ) {
- tsor = "GEOCENTER";
-
- } else if( sor == AST__BYSOR ) {
- tsor = "BARYCENTER";
-
- } else if( sor == AST__HLSOR ) {
- tsor = "HELIOCENTER";
-
- } else if( sor == AST__TPSOR ) {
- tsor = "TOPOCENTER";
-
- } else if( sor == AST__LKSOR ) {
- tsor = "LSRK";
-
- } else if( sor == AST__LDSOR ) {
- tsor = "LSRD";
-
- } else if( sor == AST__GLSOR ) {
- tsor = "GALACTIC_CENTER";
-
- } else {
- tsor = NULL;
- }
-
- if( !tsor ) tsor = "UNKNOWNRefPos";
- MapPut0C( spprops, "REFPOS", tsor, "UNKNOWNRefPos", defs,
- status );
-
-/* Type and DopplerDef. */
- if( sys == AST__VOPTICAL ) {
- type = "VELOCITY";
- dopdef = "OPTICAL";
-
- } else if( sys == AST__VRADIO ) {
- type = "VELOCITY";
- dopdef = "RADIO";
-
- } else if( sys == AST__VREL ) {
- type = "VELOCITY";
- dopdef = "RELATIVISTIC";
-
- } else {
- type = "REDSHIFT";
- dopdef = "OPTICAL";
- }
- astMapPut0C( spprops, "DOPPLERDEF", dopdef, NULL );
- MapPut0C( spprops, "TYPE", type, "REDSHIFT", defs, status );
-
-/* Now the unit string. */
- MapPut0C( spprops, "UNIT", unit, unit, defs, status );
-
-/* That's it for the redshift sub-phrase, unless the supplied Region has an
- explicit (non-default) uncertainty. */
- unc = astGetUnc( spreg, 0 );
- if( unc ) {
-
-/* Get the bounds of the uncertainty. */
- astGetRegionBounds( unc, lbnd, ubnd );
-
-/* The error is half the width of the bounding box. */
- astMapPut0D( spprops, "ERROR", 0.5*( ubnd[ 0 ] - lbnd[ 0 ] ), NULL );
-
-/* Free resources. */
- unc = astAnnul( unc );
- }
-
-/* Free resources. */
- spfrm = astAnnul( spfrm );
- spprops = astAnnul( spprops );
- }
-
-/* Free resources. */
- spreg = astAnnul( spreg );
-
- }
-
-/* Free resources */
- if( sreg ) sreg = astAnnul( sreg );
- if( prop ) prop = astFree( prop );
-
-/* Return the result. */
- return ok;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/*
-*att++
-* Name:
-* StcsArea
-
-* Purpose:
-* Return the CoordinateArea component when reading an STC-S document?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This is a boolean attribute which controls what is returned
-* by the
-c astRead
-f AST_READ
-* function when it is used to read from an StcsChan.
-* If StcsArea is set non-zero (the default), then a Region
-* representing the STC CoordinateArea will be returned by
-c astRead.
-f AST_READ.
-* If StcsArea is set to zero, then the STC CoordinateArea
-* will not be returned.
-
-* Notes:
-* - Other attributes such as StcsCoords and StcsProps can be used to
-* specify other Objects to be returned by
-c astRead.
-f AST_READ.
-* If more than one of these attributes is set non-zero, then the
-* actual Object returned by
-c astRead
-f AST_READ
-* will be a KeyMap, containing the requested Objects. In this
-* case, the Region representing the STC CoordinateArea will be
-* stored in the returned KeyMap using the key "AREA". If StcsArea
-* is the only attribute to be set non-zero, then the Object returned by
-c astRead
-f AST_READ
-* will be the CoordinateArea Region itself.
-* - The class of Region used to represent the CoordinateArea for each
-* STC-S sub-phrase is determined by the first word in the
-* sub-phrase (the "sub-phrase identifier"). The individual sub-phrase
-* Regions are combined into a single Prism, which is then simplified
-c using astSimplify
-f using AST_SIMPLIFY
-* to form the returned region.
-* - Sub-phrases that represent a single value ( that is, have
-* identifiers "Time", "Position", "Spectral" or "Redshift" ) are
-* considered to be be part of the STC CoordinateArea component.
-* - The TimeFrame used to represent a time STC-S sub-phrase will have
-* its TimeOrigin attribute set to the sub-phrase start time. If no
-* start time is specified by the sub-phrase, then the stop time will be
-* used instead. If no stop time is specified by the sub-phrase, then
-* the single time value specified in the sub-phrase will be used
-* instead. Subsequently clearing the TimeOrigin attribute (or setting
-* its value to zero) will cause the TimeFrame to reprsent absolute times.
-* - The Epoch attribute for the returned Region is set in the same
-* way as the TimeOrigin attribute (see above).
-
-* Applicability:
-* StcsChan
-* All StcsChans have this attribute.
-*att--
-*/
-
-/* This ia a boolean value (0 or 1) with a value of -INT_MAX when
- undefined but yielding a default of 1. */
-astMAKE_CLEAR(StcsChan,StcsArea,stcsarea,-INT_MAX)
-astMAKE_GET(StcsChan,StcsArea,int,1,( this->stcsarea != -INT_MAX ? this->stcsarea : 1 ))
-astMAKE_SET(StcsChan,StcsArea,int,stcsarea,( value != 0 ))
-astMAKE_TEST(StcsChan,StcsArea,( this->stcsarea != -INT_MAX ))
-
-/*
-*att++
-* Name:
-* StcsCoords
-
-* Purpose:
-* Return the Coordinates component when reading an STC-S document?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This is a boolean attribute which controls what is returned
-* by the
-c astRead
-f AST_READ
-* function when it is used to read from an StcsChan.
-* If StcsCoords is set non-zero, then a PointList
-* representing the STC Coordinates will be returned by
-c astRead.
-f AST_READ.
-* If StcsCoords is set to zero (the default), then the STC
-* Coordinates will not be returned.
-
-* Notes:
-* - Other attributes such as StcsArea and StcsProps can be used to
-* specify other Objects to be returned by
-c astRead.
-f AST_READ.
-* If more than one of these attributes is set non-zero, then the
-* actual Object returned by
-c astRead
-f AST_READ
-* will be a KeyMap, containing the requested Objects. In this
-* case, the PointList representing the STC Coordinates will be
-* stored in the returned KeyMap using the key "COORDS". If StcsCoords
-* is the only attribute to be set non-zero, then the Object returned by
-c astRead
-f AST_READ
-* will be the Coordinates PointList itself.
-* - The Coordinates component is specified by the additional axis
-* values embedded within the body of each STC-S sub-phrase that
-* represents an extended area. Sub-phrases that represent a single
-* value ( that is, have identifiers "Time", "Position", "Spectral"
-* or "Redshift" ) are not considered to be be part of the STC
-* Coordinates component.
-* - If the STC-S documents does not contain a Coordinates component,
-* then a NULL object pointer
-f (AST__NULL)
-* will be returned by
-c astRead
-f AST_READ
-* if the Coordinates component is the only object being returned. If
-* other objects are also being returned (see attributes StcsProps and
-* StcsArea), then the returned KeyMap will contain a "COORDS" key
-* only if the Coordinates component is read succesfully.
-* - The TimeFrame used to represent a time STC-S sub-phrase will have
-* its TimeOrigin attribute set to the sub-phrase start time. If no
-* start time is specified by the sub-phrase, then the stop time will be
-* used instead. If no stop time is specified by the sub-phrase, then
-* the single time value specified in the sub-phrase will be used
-* instead. Subsequently clearing the TimeOrigin attribute (or setting
-* its value to zero) will cause the TimeFrame to reprsent absolute times.
-* - The Epoch attribute for the returned Region is set in the same
-* way as the TimeOrigin attribute (see above).
-
-* Applicability:
-* StcsChan
-* All StcsChans have this attribute.
-*att--
-*/
-
-/* This ia a boolean value (0 or 1) with a value of -INT_MAX when
- undefined but yielding a default of zero. */
-astMAKE_CLEAR(StcsChan,StcsCoords,stcscoords,-INT_MAX)
-astMAKE_GET(StcsChan,StcsCoords,int,0,( this->stcscoords != -INT_MAX ? this->stcscoords : 0 ))
-astMAKE_SET(StcsChan,StcsCoords,int,stcscoords,( value != 0 ))
-astMAKE_TEST(StcsChan,StcsCoords,( this->stcscoords != -INT_MAX ))
-
-/*
-*att++
-* Name:
-* StcsProps
-
-* Purpose:
-* Return all properties when reading an STC-S document?
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This is a boolean attribute which controls what is returned
-* by the
-c astRead
-f AST_READ
-* function when it is used to read from an StcsChan.
-* If StcsProps is set non-zero, then a KeyMap containing all the
-* properties read from the STC-S document will be returned by
-c astRead.
-f AST_READ.
-* If StcsProps is set to zero (the default), then the properties
-* will not be returned.
-
-* Notes:
-* - Other attributes such as StcsCoords and StcsArea can be used to
-* specify other Objects to be returned by
-c astRead.
-f AST_READ.
-* If more than one of these attributes is set non-zero, then the
-* actual Object returned by
-c astRead
-f AST_READ
-* will be a KeyMap containing the requested Objects. In this
-* case, the properties KeyMap will be stored in the returned KeyMap
-* using the key "PROPS". If StcsProps is the only attribute to be
-* set non-zero, then the Object returned by
-c astRead
-f AST_READ
-* will be the properties KeyMap itself.
-* - The KeyMap containing the properties will have entries for one or
-* more of the following keys: "TIME_PROPS", "SPACE_PROPS", "SPECTRAL_PROPS"
-* and "REDSHIFT_PROPS". Each of these entries will be another KeyMap
-* containing the properties of the corresponding STC-S sub-phrase.
-
-* Applicability:
-* StcsChan
-* All StcsChans have this attribute.
-*att--
-*/
-
-/* This ia a boolean value (0 or 1) with a value of -INT_MAX when
- undefined but yielding a default of zero. */
-astMAKE_CLEAR(StcsChan,StcsProps,stcsprops,-INT_MAX)
-astMAKE_GET(StcsChan,StcsProps,int,0,( this->stcsprops != -INT_MAX ? this->stcsprops : 0 ))
-astMAKE_SET(StcsChan,StcsProps,int,stcsprops,( value != 0 ))
-astMAKE_TEST(StcsChan,StcsProps,( this->stcsprops != -INT_MAX ))
-
-/*
-*att++
-* Name:
-* StcsIndent
-
-* Purpose:
-* Controls indentation and line splitting of output text.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute controls how the STC-S text is written out to the
-* sink function when writing an AST object to an StcsChan. If it is
-* zero (the default) the entire STC-S description is written out by a
-* single invocation of the sink function. The text supplied to the
-* sink function will not contain any linefeed characters, and each
-* pair of adjacent words will be separated by a single space. The
-* text may thus be arbitrarily large and the StcsLength attribute is
-* ignored.
-*
-* If StcsIndent is non-zero, then the text is written out via
-* multiple calls to the sink function, each call corresponding to a
-* single "line" of text (although no line feed characters will be
-* inserted by AST). The complete STC-S description is broken into
-* lines so that:
-*
-* - the line length specified by attribute StcsLength is not exceeded
-* - each sub-phrase (time, space, etc.) starts on a new line
-* - each argument in a compound spatial region starts on a new line
-*
-* If this causes a sub-phrase to extend to two or more lines, then the
-* second and subsequent lines will be indented by three spaces compared
-* to the first line. In addition, lines within a compound spatial region
-* will have extra indentation to highlight the nesting produced by the
-* parentheses. Each new level of nesting will be indented by a further
-* three spaces.
-f
-f Note, the default value of zero is unlikely to be appropriate when
-f an StcsChan is used within Fortran code. In this case, StcsIndent
-f should usually be set non-zero, and the StcsLength attribute set to
-f the size of the CHARACTER variable used to
-f receive the text returned by AST_GETLINE within the sink function.
-f This avoids the possibility of long lines being truncated invisibly
-f within AST_GETLINE.
-
-* Applicability:
-* StcsChan
-* All StcsChans have this attribute.
-*att--
-*/
-astMAKE_CLEAR(StcsChan,StcsIndent,stcsindent,-1)
-astMAKE_GET(StcsChan,StcsIndent,int,0,(this->stcsindent == -1 ? 0 : this->stcsindent))
-astMAKE_SET(StcsChan,StcsIndent,int,stcsindent,( value ? 1 : 0 ))
-astMAKE_TEST(StcsChan,StcsIndent,( this->stcsindent != -1 ))
-
-/*
-*att++
-* Name:
-* StcsLength
-
-* Purpose:
-* Controls output line length.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer.
-
-* Description:
-* This attribute specifies the maximum length to use when writing out
-* text through the sink function supplied when the StcsChan was created.
-* It is ignored if the StcsIndent attribute is zero (in which case
-* the text supplied to the sink function can be of any length). The
-* default value is 70.
-*
-* The number of characters in each string written out through the sink
-* function will not usually be greater than the value of this attribute
-* (but may be less). However, if any single word in the STC-S
-* description exceeds the specified length, then the word will be
-* written out as a single line.
-*
-f Note, the default value of zero is unlikely to be appropriate when
-f an StcsChan is used within Fortran code. In this case, StcsLength
-f should usually be set to the size of the CHARACTER variable used to
-f receive the text returned by AST_GETLINE within the sink function.
-f In addition, the StcsIndent attribute should be set non-zero. This
-f avoids the possibility of long lines being truncated invisibly
-f within AST_GETLINE.
-
-* Applicability:
-* StcsChan
-* All StcsChans have this attribute.
-*att--
-*/
-astMAKE_CLEAR(StcsChan,StcsLength,stcslength,-INT_MAX)
-astMAKE_GET(StcsChan,StcsLength,int,70,( ( this->stcslength != -INT_MAX ) ? this->stcslength : 70 ))
-astMAKE_SET(StcsChan,StcsLength,int,stcslength,(value<0?0:value))
-astMAKE_TEST(StcsChan,StcsLength,( this->stcslength != -INT_MAX ))
-
-/* Copy constructor. */
-/* ----------------- */
-
-/* Destructor. */
-/* ----------- */
-
-/* Dump function. */
-/* -------------- */
-
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for StcsChan objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the StcsChan class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the Object (an StcsChan) whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstStcsChan *this; /* Pointer to the StcsChan structure */
- int ival; /* Integer value */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the StcsChan structure. */
- this = (AstStcsChan *) this_object;
-
-/* Write out values representing the instance variables for the
- StcsChan class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* StcsArea. */
-/* --------- */
- set = TestStcsArea( this, status );
- ival = set ? GetStcsArea( this, status ) : astGetStcsArea( this );
- astWriteInt( channel, "StcsArea", set, 0, ival,
- ival ? "Read the STC CoordinatesArea component" :
- "Do not read the STC CoordinatesArea component" );
-
-/* StcsCoords. */
-/* ----------- */
- set = TestStcsCoords( this, status );
- ival = set ? GetStcsCoords( this, status ) : astGetStcsCoords( this );
- astWriteInt( channel, "StcsCoords", set, 0, ival,
- ival ? "Read the STC Coordinates component" :
- "Do not read the STC Coordinates component" );
-
-/* StcsProps. */
-/* ---------- */
- set = TestStcsProps( this, status );
- ival = set ? GetStcsProps( this, status ) : astGetStcsProps( this );
- astWriteInt( channel, "StcsProps", set, 0, ival,
- ival ? "Read the STC-S properties" :
- "Do not read the STC-S properties" );
-
-/* StcsIndent */
-/* ---------- */
- set = TestStcsIndent( this, status );
- ival = set ? GetStcsIndent( this, status ) : astGetStcsIndent( this );
- astWriteInt( channel, "StcsInd", set, 0, ival, "STC-S indentation" );
-
-/* StcsLength */
-/* ---------- */
- set = TestStcsLength( this, status );
- ival = set ? GetStcsLength( this, status ) : astGetStcsLength( this );
- astWriteInt( channel, "StcsLen", set, 0, ival, "STC-S buffer length" );
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAStcsChan and astCheckStcsChan functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(StcsChan,Channel)
-astMAKE_CHECK(StcsChan)
-
-AstStcsChan *astStcsChan_( const char *(* source)( void ),
- void (* sink)( const char * ),
- const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astStcsChan
-f AST_STCSCHAN
-
-* Purpose:
-* Create an StcsChan.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "stcschan.h"
-c AstStcsChan *astStcsChan( const char *(* source)( void ),
-c void (* sink)( const char * ),
-c const char *options, ... )
-f RESULT = AST_STCSCHAN( SOURCE, SINK, OPTIONS, STATUS )
-
-* Class Membership:
-* StcsChan constructor.
-
-* Description:
-* This function creates a new StcsChan and optionally initialises
-* its attributes.
-*
-* A StcsChan is a specialised form of Channel which supports STC-S
-* I/O operations. Writing an Object to an StcsChan (using
-c astWrite) will, if the Object is suitable, generate an
-f AST_WRITE) will, if the Object is suitable, generate an
-* STC-S description of that Object, and reading from an StcsChan will
-* create a new Object from its STC-S description.
-*
-* Normally, when you use an StcsChan, you should provide "source"
-c and "sink" functions which connect it to an external data store
-c by reading and writing the resulting text. These functions
-f and "sink" routines which connect it to an external data store
-f by reading and writing the resulting text. These routines
-* should perform any conversions needed between external character
-c encodings and the internal ASCII encoding. If no such functions
-f encodings and the internal ASCII encoding. If no such routines
-* are supplied, a Channel will read from standard input and write
-* to standard output.
-
-* Parameters:
-c source
-f SOURCE = SUBROUTINE (Given)
-c Pointer to a source function that takes no arguments and
-c returns a pointer to a null-terminated string. This function
-c will be used by the StcsChan to obtain lines of input text. On
-c each invocation, it should return a pointer to the next input
-c line read from some external data store, and a NULL pointer
-c when there are no more lines to read.
-c
-c If "source" is NULL, the Channel will read from standard
-c input instead.
-f A source routine, which is a subroutine which takes a single
-f integer error status argument. This routine will be used by
-f the StcsChan to obtain lines of input text. On each
-f invocation, it should read the next input line from some
-f external data store, and then return the resulting text to
-f the AST library by calling AST_PUTLINE. It should supply a
-f negative line length when there are no more lines to read.
-f If an error occurs, it should set its own error status
-f argument to an error value before returning.
-f
-f If the null routine AST_NULL is suppied as the SOURCE value,
-f the Channel will read from standard input instead.
-c sink
-f SINK = SUBROUTINE (Given)
-c Pointer to a sink function that takes a pointer to a
-c null-terminated string as an argument and returns void. This
-c function will be used by the StcsChan to deliver lines of
-c output text. On each invocation, it should deliver the
-c contents of the string supplied to some external data store.
-c
-c If "sink" is NULL, the StcsChan will write to standard output
-c instead.
-f A sink routine, which is a subroutine which takes a single
-f integer error status argument. This routine will be used by
-f the StcsChan to deliver lines of output text. On each
-f invocation, it should obtain the next output line from the
-f AST library by calling AST_GETLINE, and then deliver the
-f resulting text to some external data store. If an error
-f occurs, it should set its own error status argument to an
-f error value before returning.
-f
-f If the null routine AST_NULL is suppied as the SINK value,
-f the Channel will write to standard output instead.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new StcsChan. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new StcsChan. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astStcsChan()
-f AST_STCSCHAN = INTEGER
-* A pointer to the new StcsChan.
-
-* Notes:
-f - The names of the routines supplied for the SOURCE and SINK
-f arguments should appear in EXTERNAL statements in the Fortran
-f routine which invokes AST_STCSCHAN. However, this is not generally
-f necessary for the null routine AST_NULL (so long as the AST_PAR
-f include file has been used).
-* - If the external data source or sink uses a character encoding
-* other than ASCII, the supplied source and sink functions should
-* translate between the external character encoding and the internal
-* ASCII encoding used by AST.
-* - A null Object pointer (AST__NULL) will be returned if this
-* function is invoked with the AST error status set, or if it
-* should fail for any reason.
-f - Note that the null routine AST_NULL (one underscore) is
-f different to AST__NULL (two underscores), which is the null Object
-f pointer.
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS; /* Pointer to thread-specific global data */
- AstStcsChan *new; /* Pointer to new StcsChan */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the StcsChan, allocating memory and initialising the
- virtual function table as well if necessary. This interface is for
- use by other C functions within AST, and uses the standard "wrapper"
- functions included in this class. */
- new = astInitStcsChan( NULL, sizeof( AstStcsChan ), !class_init,
- &class_vtab, "StcsChan", source, SourceWrap,
- sink, SinkWrap );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- StcsChan's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new StcsChan. */
- return new;
-}
-
-AstStcsChan *astStcsChanId_( const char *(* source)( void ),
- void (* sink)( const char * ),
- const char *options, ... ) {
-/*
-* Name:
-* astStcsChanId_
-
-* Purpose:
-* Create an StcsChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcschan.h"
-* AstStcsChan *astStcsChanId_( const char *(* source)( void ),
-* void (* sink)( const char * ),
-* const char *options, ... )
-
-* Class Membership:
-* StcsChan constructor.
-
-* Description:
-* This function implements the external (public) C interface to the
-* astStcsChan constructor function. Another function (astStcsChanForId)
-* should be called to create an StcsChan for use within other languages.
-* Both functions return an ID value (instead of a true C pointer) to
-* external users, and must be provided because astStcsChan_ has a variable
-* argument list which cannot be encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astStcsChan_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astStcsChan_.
-
-* Returned Value:
-* The ID value associated with the new StcsChan.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS; /* Pointer to thread-specific global data */
- AstStcsChan *new; /* Pointer to new StcsChan */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the StcsChan, allocating memory and initialising the
- virtual function table as well if necessary. This interface is for
- use by external C functions and uses the standard "wrapper"
- functions included in this class. */
- new = astInitStcsChan( NULL, sizeof( AstStcsChan ), !class_init,
- &class_vtab, "StcsChan", source, SourceWrap,
- sink, SinkWrap );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- StcsChan's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new StcsChan. */
- return astMakeId( new );
-}
-
-AstStcsChan *astStcsChanForId_( const char *(* source)( void ),
- char *(* source_wrap)( const char *(*)( void ), int * ),
- void (* sink)( const char * ),
- void (* sink_wrap)( void (*)( const char * ),
- const char *, int * ),
- const char *options, ... ) {
-/*
-*+
-* Name:
-* astStcsChanFor
-
-* Purpose:
-* Initialise an StcsChan from a foreign language interface.
-
-* Type:
-* Public function.
-
-* Synopsis:
-* #include "stcschan.h"
-* AstStcsChan *astStcsChanFor( const char *(* source)( void ),
-* char *(* source_wrap)( const char *(*)
-* ( void ), int * ),
-* void (* sink)( const char * ),
-* void (* sink_wrap)( void (*)( const char * ),
-* const char *, int * ),
-* const char *options, ... )
-
-* Class Membership:
-* StcsChan constructor.
-
-* Description:
-* This function creates a new StcsChan from a foreign language
-* interface and optionally initialises its attributes.
-*
-* A StcsChan is a specialised form of Channel which supports STC-S
-* I/O operations. Writing an Object to an StcsChan (using
-c astWrite) will, if the Object is suitable, generate an
-f AST_WRITE) will, if the Object is suitable, generate an
-* STC-S description of that Object, and reading from an StcsChan will
-* create a new Object from its STC-S description.
-*
-* Normally, when you use an StcsChan, you should provide "source"
-c and "sink" functions which connect it to an external data store
-c by reading and writing the resulting text. These functions
-f and "sink" routines which connect it to an external data store
-f by reading and writing the resulting text. These routines
-* should perform any conversions needed between external character
-c encodings and the internal ASCII encoding. If no such functions
-f encodings and the internal ASCII encoding. If no such routines
-* are supplied, a Channel will read from standard input and write
-* to standard output.
-
-* Parameters:
-* source
-* Pointer to a "source" function which will be used to obtain
-* lines of input text. Generally, this will be obtained by
-* casting a pointer to a source function which is compatible
-* with the "source_wrap" wrapper function (below). The pointer
-* should later be cast back to its original type by the
-* "source_wrap" function before the function is invoked.
-*
-* If "source" is NULL, the StcsChan will read from standard
-* input instead.
-* source_wrap
-* Pointer to a function which can be used to invoke the
-* "source" function supplied (above). This wrapper function is
-* necessary in order to hide variations in the nature of the
-* source function, such as may arise when it is supplied by a
-* foreign (non-C) language interface.
-*
-* The single parameter of the "source_wrap" function is a
-* pointer to the "source" function, and it should cast this
-* function pointer (as necessary) and invoke the function with
-* appropriate arguments to obtain the next line of input
-* text. The "source_wrap" function should then return a pointer
-* to a dynamically allocated, null terminated string containing
-* the text that was read. The string will be freed (using
-* astFree) when no longer required and the "source_wrap"
-* function need not concern itself with this. A NULL pointer
-* should be returned if there is no more input to read.
-*
-* If "source_wrap" is NULL, the StcsChan will read from standard
-* input instead.
-* sink
-* Pointer to a "sink" function which will be used to deliver
-* lines of output text. Generally, this will be obtained by
-* casting a pointer to a sink function which is compatible with
-* the "sink_wrap" wrapper function (below). The pointer should
-* later be cast back to its original type by the "sink_wrap"
-* function before the function is invoked.
-*
-* If "sink" is NULL, the StcsChan will write to standard output
-* instead.
-* sink_wrap
-* Pointer to a function which can be used to invoke the "sink"
-* function supplied (above). This wrapper function is necessary
-* in order to hide variations in the nature of the sink
-* function, such as may arise when it is supplied by a foreign
-* (non-C) language interface.
-*
-* The first parameter of the "sink_wrap" function is a pointer
-* to the "sink" function, and the second parameter is a pointer
-* to a const, null-terminated character string containing the
-* text to be written. The "sink_wrap" function should cast the
-* "sink" function pointer (as necessary) and invoke the
-* function with appropriate arguments to deliver the line of
-* output text. The "sink_wrap" function then returns void.
-*
-* If "sink_wrap" is NULL, the Channel will write to standard
-* output instead.
-* options
-* Pointer to a null-terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new StcsChan. The syntax used is identical to
-* that for the astSet function and may include "printf" format
-* specifiers identified by "%" symbols in the normal way.
-* ...
-* If the "options" string contains "%" format specifiers, then
-* an optional list of additional arguments may follow it in
-* order to supply values to be substituted for these
-* specifiers. The rules for supplying these are identical to
-* those for the astSet function (and for the C "printf"
-* function).
-
-* Returned Value:
-* astStcsChanFor()
-* A pointer to the new StcsChan.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-* function is invoked with the global error status set, or if it
-* should fail for any reason.
-* - This function is only available through the public interface
-* to the StcsChan class (not the protected interface) and is
-* intended solely for use in implementing foreign language
-* interfaces to this class.
-*-
-
-* Implememtation Notes:
-* - This function behaves exactly like astStcsChanId_, in that it
-* returns ID values and not true C pointers, but it has two
-* additional arguments. These are pointers to the "wrapper
-* functions" which are needed to accommodate foreign language
-* interfaces.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS; /* Pointer to thread-specific global data */
- AstStcsChan *new; /* Pointer to new StcsChan */
- va_list args; /* Variable argument list */
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialise the StcsChan, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitStcsChan( NULL, sizeof( AstStcsChan ), !class_init,
- &class_vtab, "StcsChan", source, source_wrap,
- sink, sink_wrap );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- StcsChan's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new StcsChan. */
- return astMakeId( new );
-}
-
-AstStcsChan *astInitStcsChan_( void *mem, size_t size, int init,
- AstStcsChanVtab *vtab, const char *name,
- const char *(* source)( void ),
- char *(* source_wrap)( const char *(*)( void ), int * ),
- void (* sink)( const char * ),
- void (* sink_wrap)( void (*)( const char * ),
- const char *, int * ), int *status ) {
-/*
-*+
-* Name:
-* astInitStcsChan
-
-* Purpose:
-* Initialise an StcsChan.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "stcschan.h"
-* AstStcsChan *astInitStcsChan( void *mem, size_t size, int init,
-* AstStcsChanVtab *vtab, const char *name,
-* const char *(* source)( void ),
-* char *(* source_wrap)( const char *(*)( void ), int * ),
-* void (* sink)( const char * ),
-* void (* sink_wrap)( void (*)( const char * ),
-* const char *, int * ) )
-
-* Class Membership:
-* StcsChan initialiser.
-
-* Description:
-* This function is provided for use by class implementations to
-* initialise a new StcsChan object. It allocates memory (if
-* necessary) to accommodate the StcsChan plus any additional data
-* associated with the derived class. It then initialises a
-* StcsChan structure at the start of this memory. If the "init"
-* flag is set, it also initialises the contents of a virtual
-* function table for an StcsChan at the start of the memory passed
-* via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the StcsChan is to be
-* initialised. This must be of sufficient size to accommodate
-* the StcsChan data (sizeof(StcsChan)) plus any data used by the
-* derived class. If a value of NULL is given, this function
-* will allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the StcsChan (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the StcsChan structure, so a valid value must be
-* supplied even if not required for allocating memory.
-* init
-* A boolean flag indicating if the StcsChan's virtual function
-* table is to be initialised. If this value is non-zero, the
-* virtual function table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new StcsChan.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-* source
-* Pointer to a "source" function which will be used to obtain
-* lines of text. Generally, this will be obtained by
-* casting a pointer to a source function which is compatible
-* with the "source_wrap" wrapper function (below). The pointer
-* should later be cast back to its original type by the
-* "source_wrap" function before the function is invoked.
-*
-* If "source" is NULL, the Channel will read from standard
-* input instead.
-* source_wrap
-* Pointer to a function which can be used to invoke the
-* "source" function supplied (above). This wrapper function is
-* necessary in order to hide variations in the nature of the
-* source function, such as may arise when it is supplied by a
-* foreign (non-C) language interface.
-*
-* The single parameter of the "source_wrap" function is a
-* pointer to the "source" function, and it should cast this
-* function pointer (as necessary) and invoke the function with
-* appropriate arguments to obtain the next line of input
-* text. The "source_wrap" function should then return a pointer
-* to a dynamically allocated, null terminated string containing
-* the text that was read. The string will be freed (using
-* astFree) when no longer required and the "source_wrap"
-* function need not concern itself with this. A NULL pointer
-* should be returned if there is no more input to read.
-*
-* If "source_wrap" is NULL, the Channel will read from standard
-* input instead.
-* sink
-* Pointer to a "sink" function which will be used to deliver
-* lines of text. Generally, this will be obtained by
-* casting a pointer to a sink function which is compatible with
-* the "sink_wrap" wrapper function (below). The pointer should
-* later be cast back to its original type by the "sink_wrap"
-* function before the function is invoked.
-*
-* If "sink" is NULL, the contents of the StcsChan will not be
-* written out before being deleted.
-* sink_wrap
-* Pointer to a function which can be used to invoke the "sink"
-* function supplied (above). This wrapper function is necessary
-* in order to hide variations in the nature of the sink
-* function, such as may arise when it is supplied by a foreign
-* (non-C) language interface.
-*
-* The first parameter of the "sink_wrap" function is a pointer
-* to the "sink" function, and the second parameter is a pointer
-* to a const, null-terminated character string containing the
-* text to be written. The "sink_wrap" function should cast the
-* "sink" function pointer (as necessary) and invoke the
-* function with appropriate arguments to deliver the line of
-* output text. The "sink_wrap" function then returns void.
-*
-* If "sink_wrap" is NULL, the Channel will write to standard
-* output instead.
-
-* Returned Value:
-* A pointer to the new StcsChan.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstStcsChan *new; /* Pointer to new StcsChan */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitStcsChanVtab( vtab, name );
-
-/* Initialise a Channel structure (the parent class) as the first
- component within the StcsChan structure, allocating memory if
- necessary. */
- new = (AstStcsChan *) astInitChannel( mem, size, 0,
- (AstChannelVtab *) vtab, name,
- source, source_wrap, sink,
- sink_wrap );
-
- if ( astOK ) {
-
-/* Initialise the StcsChan data. */
-/* ---------------------------- */
- new->stcsarea = -INT_MAX;
- new->stcscoords = -INT_MAX;
- new->stcsprops = -INT_MAX;
- new->stcsindent = -1;
- new->stcslength = -INT_MAX;
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstStcsChan *astLoadStcsChan_( void *mem, size_t size,
- AstStcsChanVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadStcsChan
-
-* Purpose:
-* Load an StcsChan.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "stcschan.h"
-* AstStcsChan *astLoadStcsChan( void *mem, size_t size,
-* AstStcsChanVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* StcsChan loader.
-
-* Description:
-* This function is provided to load a new StcsChan using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* StcsChan structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for an StcsChan at the start of the memory
-* passed via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory into which the StcsChan is to be
-* loaded. This must be of sufficient size to accommodate the
-* StcsChan data (sizeof(StcsChan)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the StcsChan (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the StcsChan structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstStcsChan) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new StcsChan. If this is NULL, a pointer
-* to the (static) virtual function table for the StcsChan class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "StcsChan" is used instead.
-
-* Returned Value:
-* A pointer to the new StcsChan.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS; /* Pointer to thread-specific global data */
- AstStcsChan *new; /* Pointer to the new StcsChan */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this StcsChan. In this case the
- StcsChan belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstStcsChan );
- vtab = &class_vtab;
- name = "StcsChan";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitStcsChanVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built StcsChan. */
- new = astLoadChannel( mem, size, (AstChannelVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "StcsChan" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* StcsArea. */
-/* --------- */
- new->stcsarea = astReadInt( channel, "stcsarea", -INT_MAX );
- if ( TestStcsArea( new, status ) ) SetStcsArea( new, new->stcsarea, status );
-
-/* StcsCoords. */
-/* ----------- */
- new->stcscoords = astReadInt( channel, "stcscoords", -INT_MAX );
- if ( TestStcsCoords( new, status ) ) SetStcsCoords( new, new->stcscoords, status );
-
-/* StcsProps. */
-/* ---------- */
- new->stcsprops = astReadInt( channel, "stcsprops", -INT_MAX );
- if ( TestStcsProps( new, status ) ) SetStcsProps( new, new->stcsprops, status );
-
-/* StcsIndent */
-/* ---------- */
- new->stcsindent = astReadInt( channel, "stcsind", -1 );
-
-/* StcsLength */
-/* ---------- */
- new->stcslength = astReadInt( channel, "stcslen", -INT_MAX );
-
- }
-
-/* If an error occurred, clean up by deleting the new StcsChan. */
- if ( !astOK ) new = astDelete( new );
-
-/* Return the new StcsChan pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/stcschan.h b/ast-5.3-1/stcschan.h
deleted file mode 100644
index c1d4f8c..0000000
--- a/ast-5.3-1/stcschan.h
+++ /dev/null
@@ -1,324 +0,0 @@
-#if !defined( STCSCHAN_INCLUDED ) /* Include this file only once */
-#define STCSCHAN_INCLUDED
-/*
-*+
-* Name:
-* stcschan.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the StcsChan class.
-
-* Invocation:
-* #include "stcschan.h"
-
-* Description:
-* This include file defines the interface to the StcsChan class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The StcsChan class provides facilities for reading and writing AST
-* Objects in the form of STC-S text.
-
-* Inheritance:
-* The StcsChan class inherits from the Channel class.
-
-* Copyright:
-* Copyright (C) 2008 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (JAC, UCLan)
-
-* History:
-* 18-DEC-2008 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "channel.h" /* I/O channels (parent class) */
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros. */
-/* ------- */
-
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-/* Define constants used to size global arrays in this module. */
-/* Define other numerical constants for use in this module. */
-#define AST__STCSCHAN_GETATTRIB_BUFF_LEN 200
-
-/* Type Definitions. */
-/* ================= */
-
-/* StcsChan structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstStcsChan {
-
-/* Attributes inherited from the parent class. */
- AstChannel channel; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- int stcsarea; /* Read the STC CoordinatesArea? */
- int stcscoords; /* Read the STC Coordinates? */
- int stcsprops; /* Read the STC-S properties? */
- int stcsindent; /* Indentat output? */
- int stcslength; /* Line length */
-} AstStcsChan;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstStcsChanVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstChannelVtab channel_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- int (* GetStcsArea)( AstStcsChan *, int * );
- int (* TestStcsArea)( AstStcsChan *, int * );
- void (* ClearStcsArea)( AstStcsChan *, int * );
- void (* SetStcsArea)( AstStcsChan *, int, int * );
-
- int (* GetStcsCoords)( AstStcsChan *, int * );
- int (* TestStcsCoords)( AstStcsChan *, int * );
- void (* ClearStcsCoords)( AstStcsChan *, int * );
- void (* SetStcsCoords)( AstStcsChan *, int, int * );
-
- int (* GetStcsProps)( AstStcsChan *, int * );
- int (* TestStcsProps)( AstStcsChan *, int * );
- void (* ClearStcsProps)( AstStcsChan *, int * );
- void (* SetStcsProps)( AstStcsChan *, int, int * );
-
- int (* GetStcsIndent)( AstStcsChan *, int * );
- int (* TestStcsIndent)( AstStcsChan *, int * );
- void (* ClearStcsIndent)( AstStcsChan *, int * );
- void (* SetStcsIndent)( AstStcsChan *, int, int * );
-
- int (* GetStcsLength)( AstStcsChan *, int * );
- int (* TestStcsLength)( AstStcsChan *, int * );
- void (* ClearStcsLength)( AstStcsChan *, int * );
- void (* SetStcsLength)( AstStcsChan *, int, int * );
-
-} AstStcsChanVtab;
-
-#if defined(THREAD_SAFE)
-typedef struct AstStcsChanGlobals {
- AstStcsChanVtab Class_Vtab;
- int Class_Init;
- char GetAttrib_Buff[ AST__STCSCHAN_GETATTRIB_BUFF_LEN + 1 ];
-} AstStcsChanGlobals;
-
-#endif
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(StcsChan) /* Check class membership */
-astPROTO_ISA(StcsChan) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstStcsChan *astStcsChan_( const char *(*)( void ), void (*)( const char * ),
- const char *, int *, ...);
-#else
-AstStcsChan *astStcsChanId_( const char *(*)( void ), void (*)( const char * ),
- const char *, ... );
-AstStcsChan *astStcsChanForId_( const char *(*)( void ),
- char *(*)( const char *(*)( void ), int * ),
- void (*)( const char * ),
- void (*)( void (*)( const char * ),
- const char *, int * ),
- const char *, ... );
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstStcsChan *astInitStcsChan_( void *, size_t, int, AstStcsChanVtab *,
- const char *, const char *(*)( void ),
- char *(*)( const char *(*)( void ), int * ),
- void (*)( const char * ),
- void (*)( void (*)( const char * ),
- const char *, int * ), int * );
-
-/* Vtab initialiser. */
-void astInitStcsChanVtab_( AstStcsChanVtab *, const char *, int * );
-
-
-
-/* Loader. */
-AstStcsChan *astLoadStcsChan_( void *, size_t, AstStcsChanVtab *,
- const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitStcsChanGlobals_( AstStcsChanGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-
-# if defined(astCLASS) /* Protected */
-int astGetStcsArea_( AstStcsChan *, int * );
-int astTestStcsArea_( AstStcsChan *, int * );
-void astClearStcsArea_( AstStcsChan *, int * );
-void astSetStcsArea_( AstStcsChan *, int, int * );
-
-int astGetStcsCoords_( AstStcsChan *, int * );
-int astTestStcsCoords_( AstStcsChan *, int * );
-void astClearStcsCoords_( AstStcsChan *, int * );
-void astSetStcsCoords_( AstStcsChan *, int, int * );
-
-int astGetStcsProps_( AstStcsChan *, int * );
-int astTestStcsProps_( AstStcsChan *, int * );
-void astClearStcsProps_( AstStcsChan *, int * );
-void astSetStcsProps_( AstStcsChan *, int, int * );
-
-int astGetStcsIndent_( AstStcsChan *, int * );
-int astTestStcsIndent_( AstStcsChan *, int * );
-void astClearStcsIndent_( AstStcsChan *, int * );
-void astSetStcsIndent_( AstStcsChan *, int, int * );
-
-int astGetStcsLength_( AstStcsChan *, int * );
-int astTestStcsLength_( AstStcsChan *, int * );
-void astClearStcsLength_( AstStcsChan *, int * );
-void astSetStcsLength_( AstStcsChan *, int, int * );
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckStcsChan(this) astINVOKE_CHECK(StcsChan,this,0)
-#define astVerifyStcsChan(this) astINVOKE_CHECK(StcsChan,this,1)
-
-/* Test class membership. */
-#define astIsAStcsChan(this) astINVOKE_ISA(StcsChan,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astStcsChan astINVOKE(F,astStcsChan_)
-#else
-#define astStcsChan astINVOKE(F,astStcsChanId_)
-#define astStcsChanFor astINVOKE(F,astStcsChanForId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitStcsChan(mem,size,init,vtab,name,source,source_wrap,sink,sink_wrap) \
-astINVOKE(O,astInitStcsChan_(mem,size,init,vtab,name,source,source_wrap,sink,sink_wrap,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitStcsChanVtab(vtab,name) astINVOKE(V,astInitStcsChanVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadStcsChan(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadStcsChan_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to member functions. */
-/* ------------------------------- */
-/* Here we make use of astCheckStcsChan to validate StcsChan pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-
-#if defined(astCLASS) /* Protected */
-
-#define astClearStcsArea(this) \
-astINVOKE(V,astClearStcsArea_(astCheckStcsChan(this),STATUS_PTR))
-#define astGetStcsArea(this) \
-astINVOKE(V,astGetStcsArea_(astCheckStcsChan(this),STATUS_PTR))
-#define astSetStcsArea(this,value) \
-astINVOKE(V,astSetStcsArea_(astCheckStcsChan(this),value,STATUS_PTR))
-#define astTestStcsArea(this) \
-astINVOKE(V,astTestStcsArea_(astCheckStcsChan(this),STATUS_PTR))
-
-#define astClearStcsCoords(this) \
-astINVOKE(V,astClearStcsCoords_(astCheckStcsChan(this),STATUS_PTR))
-#define astGetStcsCoords(this) \
-astINVOKE(V,astGetStcsCoords_(astCheckStcsChan(this),STATUS_PTR))
-#define astSetStcsCoords(this,value) \
-astINVOKE(V,astSetStcsCoords_(astCheckStcsChan(this),value,STATUS_PTR))
-#define astTestStcsCoords(this) \
-astINVOKE(V,astTestStcsCoords_(astCheckStcsChan(this),STATUS_PTR))
-
-#define astClearStcsProps(this) \
-astINVOKE(V,astClearStcsProps_(astCheckStcsChan(this),STATUS_PTR))
-#define astGetStcsProps(this) \
-astINVOKE(V,astGetStcsProps_(astCheckStcsChan(this),STATUS_PTR))
-#define astSetStcsProps(this,value) \
-astINVOKE(V,astSetStcsProps_(astCheckStcsChan(this),value,STATUS_PTR))
-#define astTestStcsProps(this) \
-astINVOKE(V,astTestStcsProps_(astCheckStcsChan(this),STATUS_PTR))
-
-#define astClearStcsIndent(this) astINVOKE(V,astClearStcsIndent_(astCheckStcsChan(this),STATUS_PTR))
-#define astGetStcsIndent(this) astINVOKE(V,astGetStcsIndent_(astCheckStcsChan(this),STATUS_PTR))
-#define astSetStcsIndent(this,stcsindent) astINVOKE(V,astSetStcsIndent_(astCheckStcsChan(this),stcsindent,STATUS_PTR))
-#define astTestStcsIndent(this) astINVOKE(V,astTestStcsIndent_(astCheckStcsChan(this),STATUS_PTR))
-
-#define astClearStcsLength(this) astINVOKE(V,astClearStcsLength_(astCheckStcsChan(this),STATUS_PTR))
-#define astGetStcsLength(this) astINVOKE(V,astGetStcsLength_(astCheckStcsChan(this),STATUS_PTR))
-#define astSetStcsLength(this,stcslength) astINVOKE(V,astSetStcsLength_(astCheckStcsChan(this),stcslength,STATUS_PTR))
-#define astTestStcsLength(this) astINVOKE(V,astTestStcsLength_(astCheckStcsChan(this),STATUS_PTR))
-
-#endif
-#endif
-
-
-
-
diff --git a/ast-5.3-1/stcsearchlocation.c b/ast-5.3-1/stcsearchlocation.c
deleted file mode 100644
index 32e7073..0000000
--- a/ast-5.3-1/stcsearchlocation.c
+++ /dev/null
@@ -1,806 +0,0 @@
-/*
-*class++
-* Name:
-* StcSearchLocation
-
-* Purpose:
-* Correspond to the IVOA SearchLocation class.
-
-* Constructor Function:
-c astStcSearchLocation
-f AST_STCSEARCHLOCATION
-
-* Description:
-* The StcSearchLocation class is a sub-class of Stc used to describe
-* the coverage of a query.
-*
-* See http://hea-www.harvard.edu/~arots/nvometa/STC.html
-
-* Inheritance:
-* The StcSearchLocation class inherits from the Stc class.
-
-* Attributes:
-* The StcSearchLocation class does not define any new attributes beyond
-* those which are applicable to all Stcs.
-
-* Functions:
-c The StcSearchLocation class does not define any new functions beyond those
-f The StcSearchLocation class does not define any new routines beyond those
-* which are applicable to all Stcs.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 26-NOV-2004 (DSB):
-* Original version.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS StcSearchLocation
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "stc.h" /* Coordinate stcs (parent class) */
-#include "channel.h" /* I/O channels */
-#include "region.h" /* Regions within coordinate systems */
-#include "stcsearchlocation.h" /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(StcSearchLocation)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(StcSearchLocation,Class_Init)
-#define class_vtab astGLOBAL(StcSearchLocation,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstStcSearchLocationVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstStcSearchLocation *astStcSearchLocationId_( void *, int, AstKeyMap **, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static void Dump( AstObject *, AstChannel *, int * );
-
-/* Member functions. */
-/* ================= */
-
-void astInitStcSearchLocationVtab_( AstStcSearchLocationVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitStcSearchLocationVtab
-
-* Purpose:
-* Initialise a virtual function table for a StcSearchLocation.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "stcsearchlocation.h"
-* void astInitStcSearchLocationVtab( AstStcSearchLocationVtab *vtab, const char *name )
-
-* Class Membership:
-* StcSearchLocation vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the StcSearchLocation class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
- AstStcVtab *stc; /* Pointer to Stc component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitStcVtab( (AstStcVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAStcSearchLocation) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstStcVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- mapping = (AstMappingVtab *) vtab;
- stc = (AstStcVtab *) vtab;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
-
-/* Declare the copy constructor, destructor and class dump
- functions. */
- astSetDump( vtab, Dump, "StcSearchLocation", "Query coverage" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-/* None */
-
-/* Destructor. */
-/* ----------- */
-/* None */
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for StcSearchLocation objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the StcSearchLocation class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the StcSearchLocation whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstStcSearchLocation *this; /* Pointer to the StcSearchLocation structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the StcSearchLocation structure. */
- this = (AstStcSearchLocation *) this_object;
-
-/* Write out values representing the instance variables for the
- StcSearchLocation class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* There are no values to write, so return without further action. */
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAStcSearchLocation and astCheckStcSearchLocation functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(StcSearchLocation,Stc)
-astMAKE_CHECK(StcSearchLocation)
-
-AstStcSearchLocation *astStcSearchLocation_( void *region_void, int ncoords,
- AstKeyMap **coords, const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astStcSearchLocation
-f AST_STCSEARCHLOCATION
-
-* Purpose:
-* Create a StcSearchLocation.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "stcsearchlocation.h"
-c AstStcResourceProfile *astStcSearchLocation( AstRegion *region,
-c int ncoords, AstKeyMap *coords[], const char *options, ... )
-f RESULT = AST_STCSEARCHLOCATION( REGION, NCOORDS, COORDS, OPTIONS, STATUS )
-
-* Class Membership:
-* StcSearchLocation constructor.
-
-* Description:
-* This function creates a new StcSearchLocation and optionally initialises its
-* attributes.
-*
-* The StcSearchLocation class is a sub-class of Stc used to describe
-* the coverage of a VO query.
-*
-* See http://hea-www.harvard.edu/~arots/nvometa/STC.html
-
-* Parameters:
-c region
-f REGION = INTEGER (Given)
-* Pointer to the encapsulated Region.
-c ncoords
-f NCOORDS = INTEGER (Given)
-c The length of the "coords" array. Supply zero if "coords" is NULL.
-f The length of the COORDS array. Supply zero if COORDS should be
-f ignored.
-c coords
-f COORDS( NCOORDS ) = INTEGER (Given)
-c Pointer to an array holding "ncoords" AstKeyMap pointers (if "ncoords"
-f An array holding NCOORDS AstKeyMap pointers (if NCOORDS
-* is zero, the supplied value is ignored). Each supplied KeyMap
-* describes the contents of a single STC <AstroCoords> element, and
-* should have elements with keys given by constants AST__STCNAME,
-* AST__STCVALUE, AST__STCERROR, AST__STCRES, AST__STCSIZE,
-* AST__STCPIXSZ. Any of these elements may be omitted, but no other
-* elements should be included. If supplied, the AST__STCNAME element
-* should be a vector of character string pointers holding the "Name"
-* item for each axis in the coordinate system represented by
-c "region".
-f REGION.
-* Any other supplied elements should be scalar elements, each holding
-* a pointer to a Region describing the associated item of ancillary
-* information (error, resolution, size, pixel size or value). These
-* Regions should describe a volume within the coordinate system
-c represented by "region".
-f represented by REGION.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new StcSearchLocation. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new StcSearchLocation. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astStcSearchLocation()
-f AST_STCSEARCHLOCATION = INTEGER
-* A pointer to the new StcSearchLocation.
-
-* Notes:
-* - A deep copy is taken of the supplied Region. This means that
-* any subsequent changes made to the encapsulated Region using the
-* supplied pointer will have no effect on the Stc.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-
-* Status Handling:
-* The protected interface to this function includes an extra
-* parameter at the end of the parameter list descirbed above. This
-* parameter is a pointer to the integer inherited status
-* variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstRegion *region; /* Pointer to Region structure */
- AstStcSearchLocation *new; /* Pointer to new StcSearchLocation */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the Region structure provided. */
- region = astCheckRegion( region_void );
-
-/* Initialise the StcSearchLocation, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitStcSearchLocation( NULL, sizeof( AstStcSearchLocation ), !class_init,
- &class_vtab, "StcSearchLocation", region,
- ncoords, coords );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new StcSearchLocation's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new StcSearchLocation. */
- return new;
-}
-
-AstStcSearchLocation *astStcSearchLocationId_( void *region_void, int ncoords,
- AstKeyMap **coords, const char *options, ... ) {
-/*
-* Name:
-* astStcSearchLocationId_
-
-* Purpose:
-* Create a StcSearchLocation.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "stcsearchlocation.h"
-* AstStcSearchLocation *astStcSearchLocationId_( AstRegion *region,
-* int ncoords, AstKeyMap *coords[], const char *options, ... )
-
-* Class Membership:
-* StcSearchLocation constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astStcSearchLocation constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astStcSearchLocation_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astStcSearchLocation_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astStcSearchLocation_.
-
-* Returned Value:
-* The ID value associated with the new StcSearchLocation.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstKeyMap **keymaps; /* Pointer to array of KeyMap pointers */
- AstRegion *region; /* Pointer to Region structure */
- AstStcSearchLocation *new; /* Pointer to new StcSearchLocation */
- int icoord; /* Keymap index */
- va_list args; /* Variable argument list */
- int *status; /* Pointer to inherited status value */
-
- /* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a Region pointer from the supplied ID and validate the
- pointer to ensure it identifies a valid Region. */
- region = astVerifyRegion( astMakePointer( region_void ) );
-
-/* Obtain pointer from the supplied KeyMap ID's and validate the
- pointers to ensure it identifies a valid KeyMap. */
- keymaps = astMalloc( sizeof( AstKeyMap * )*(size_t) ncoords );
- if( keymaps ) {
- for( icoord = 0; icoord < ncoords; icoord++ ) {
- keymaps[ icoord ] = astVerifyKeyMap( astMakePointer( coords[ icoord ] ) );
- }
- }
-
-/* Initialise the StcSearchLocation, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitStcSearchLocation( NULL, sizeof( AstStcSearchLocation ), !class_init,
- &class_vtab, "StcSearchLocation", region,
- ncoords, keymaps );
-
-/* Free resources. */
- keymaps = astFree( keymaps );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new StcSearchLocation's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new StcSearchLocation. */
- return astMakeId( new );
-}
-
-AstStcSearchLocation *astInitStcSearchLocation_( void *mem, size_t size,
- int init, AstStcSearchLocationVtab *vtab,
- const char *name, AstRegion *region,
- int ncoords, AstKeyMap **coords, int *status ) {
-/*
-*+
-* Name:
-* astInitStcSearchLocation
-
-* Purpose:
-* Initialise a StcSearchLocation.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "stcsearchlocation.h"
-* AstStcSearchLocation *astInitStcSearchLocation_( void *mem, size_t size,
-* int init, AstStcSearchLocationVtab *vtab,
-* const char *name, AstRegion *region,
-* int ncoords, AstKeyMap **coords )
-
-* Class Membership:
-* StcSearchLocation initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new StcSearchLocation object. It allocates memory (if necessary) to accommodate
-* the StcSearchLocation plus any additional data associated with the derived class.
-* It then initialises a StcSearchLocation structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a StcSearchLocation at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the StcSearchLocation is to be initialised.
-* This must be of sufficient size to accommodate the StcSearchLocation data
-* (sizeof(StcSearchLocation)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the StcSearchLocation (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the StcSearchLocation
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the StcSearchLocation's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new StcSearchLocation.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-* region
-* A pointer to the Region encapsulated by the StcSearchLocation.
-* ncoords
-* Number of KeyMap pointers supplied in "coords". Can be zero.
-* Ignored if "coords" is NULL.
-* coords
-* Pointer to an array of "ncoords" KeyMap pointers, or NULL if
-* "ncoords" is zero. Each KeyMap defines defines a single <AstroCoords>
-* element, and should have elements with keys given by constants
-* AST__STCNAME, AST__STCVALUE, AST__STCERROR, AST__STCRES, AST__STCSIZE,
-* AST__STCPIXSZ. These elements hold values for the corresponding
-* components of the STC AstroCoords element. Any of these elements may
-* be omitted, but no other elements should be included. All supplied
-* elements should be vector elements, with vector length less than or
-* equal to the number of axes in the supplied Region. The data type of
-* all elements should be "double", except for AST__STCNAME which should
-* be "character string". If no value is available for a given axis, then
-* AST__BAD (or NULL for the AST__STCNAME element) should be stored in
-* the vector at the index corresponding to the axis (trailing axes
-* can be omitted completely from the KeyMap).
-
-* Returned Value:
-* A pointer to the new StcSearchLocation.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstStcSearchLocation *new; /* Pointer to new StcSearchLocation */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitStcSearchLocationVtab( vtab, name );
-
-/* Initialise a Stc structure (the parent class) as the first component
- within the StcSearchLocation structure, allocating memory if necessary. */
- new = (AstStcSearchLocation *) astInitStc( mem, size, 0, (AstStcVtab *) vtab,
- name, region, ncoords, coords );
-
-/* If an error occurred, clean up by deleting the new StcSearchLocation. */
- if ( !astOK ) new = astDelete( new );
-
-/* Return a pointer to the new StcSearchLocation. */
- return new;
-}
-
-AstStcSearchLocation *astLoadStcSearchLocation_( void *mem, size_t size, AstStcSearchLocationVtab *vtab,
- const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadStcSearchLocation
-
-* Purpose:
-* Load a StcSearchLocation.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "stcsearchlocation.h"
-* AstStcSearchLocation *astLoadStcSearchLocation( void *mem, size_t size, AstStcSearchLocationVtab *vtab,
-* const char *name, AstChannel *channel )
-
-* Class Membership:
-* StcSearchLocation loader.
-
-* Description:
-* This function is provided to load a new StcSearchLocation using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* StcSearchLocation structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a StcSearchLocation at the start of the memory
-* passed via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory into which the StcSearchLocation is to be
-* loaded. This must be of sufficient size to accommodate the
-* StcSearchLocation data (sizeof(StcSearchLocation)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the StcSearchLocation (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the StcSearchLocation structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstStcSearchLocation) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new StcSearchLocation. If this is NULL, a pointer
-* to the (static) virtual function table for the StcSearchLocation class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "StcSearchLocation" is used instead.
-
-* Returned Value:
-* A pointer to the new StcSearchLocation.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstStcSearchLocation *new; /* Pointer to the new StcSearchLocation */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this StcSearchLocation. In this case the
- StcSearchLocation belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstStcSearchLocation );
- vtab = &class_vtab;
- name = "StcSearchLocation";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitStcSearchLocationVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built StcSearchLocation. */
- new = astLoadStc( mem, size, (AstStcVtab *) vtab, name, channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "StcSearchLocation" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* There are no values to read. */
-/* ---------------------------- */
-
-/* If an error occurred, clean up by deleting the new StcSearchLocation. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new StcSearchLocation pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-
-
-
-
-
diff --git a/ast-5.3-1/stcsearchlocation.h b/ast-5.3-1/stcsearchlocation.h
deleted file mode 100644
index e3f37bf..0000000
--- a/ast-5.3-1/stcsearchlocation.h
+++ /dev/null
@@ -1,222 +0,0 @@
-#if !defined( STCSEARCHLOCATION_INCLUDED ) /* Include this file only once */
-#define STCSEARCHLOCATION_INCLUDED
-/*
-*+
-* Name:
-* stcsearchlocation.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the StcSearchLocation class.
-
-* Invocation:
-* #include "stcsearchlocation.h"
-
-* Description:
-* This include file defines the interface to the StcSearchLocation class
-* and provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The StcSearchLocation class is a sub-class of Stc used to describe
-* the coverage of a VO query.
-*
-* See http://hea-www.harvard.edu/~arots/nvometa/STC.html
-
-* Inheritance:
-* The StcSearchLocation class inherits from the Stc class.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 26-NOV-2004 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "stc.h" /* Coordinate stcs (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* StcSearchLocation structure. */
-/* ----------------------------- */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstStcSearchLocation {
-
-/* Attributes inherited from the parent class. */
- AstStc stc; /* Parent class structure */
-
-} AstStcSearchLocation;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstStcSearchLocationVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstStcVtab stc_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-} AstStcSearchLocationVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstStcSearchLocationGlobals {
- AstStcSearchLocationVtab Class_Vtab;
- int Class_Init;
-} AstStcSearchLocationGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitStcSearchLocationGlobals_( AstStcSearchLocationGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(StcSearchLocation) /* Check class membership */
-astPROTO_ISA(StcSearchLocation) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstStcSearchLocation *astStcSearchLocation_( void *, int, AstKeyMap **, const char *, int *, ...);
-#else
-AstStcSearchLocation *astStcSearchLocationId_( void *, int, AstKeyMap **, const char *, ... )__attribute__((format(printf,4,5)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstStcSearchLocation *astInitStcSearchLocation_( void *, size_t, int, AstStcSearchLocationVtab *, const char *, AstRegion *, int, AstKeyMap **, int * );
-
-/* Vtab initialiser. */
-void astInitStcSearchLocationVtab_( AstStcSearchLocationVtab *, const char *, int * );
-
-/* Loader. */
-AstStcSearchLocation *astLoadStcSearchLocation_( void *, size_t, AstStcSearchLocationVtab *, const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckStcSearchLocation(this) astINVOKE_CHECK(StcSearchLocation,this,0)
-#define astVerifyStcSearchLocation(this) astINVOKE_CHECK(StcSearchLocation,this,1)
-
-/* Test class membership. */
-#define astIsAStcSearchLocation(this) astINVOKE_ISA(StcSearchLocation,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astStcSearchLocation astINVOKE(F,astStcSearchLocation_)
-#else
-#define astStcSearchLocation astINVOKE(F,astStcSearchLocationId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitStcSearchLocation(mem,size,init,vtab,name,region,ncoords,coords) \
-astINVOKE(O,astInitStcSearchLocation_(mem,size,init,vtab,name,region,ncoords,coords,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitStcSearchLocationVtab(vtab,name) astINVOKE(V,astInitStcSearchLocationVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadStcSearchLocation(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadStcSearchLocation_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckStcSearchLocation to validate StcSearchLocation pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/sun210.htx_tar b/ast-5.3-1/sun210.htx_tar
deleted file mode 100644
index 31fefe3..0000000
Binary files a/ast-5.3-1/sun210.htx_tar and /dev/null differ
diff --git a/ast-5.3-1/sun210.ps b/ast-5.3-1/sun210.ps
deleted file mode 100644
index 36263e3..0000000
--- a/ast-5.3-1/sun210.ps
+++ /dev/null
@@ -1,140320 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.96.1 Copyright 2007 Radical Eye Software
-%%Title: sun210.dvi
-%%CreationDate: Fri Oct 30 12:47:04 2009
-%%Pages: 570
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 595 842
-%%DocumentFonts: CMR10 CMCSC10 CMBX10 CMR12 CMBX12 CMSL10 CMTT10 CMTI10
-%%+ CMR8 CMSY10 CMR6 CMR9 CMSY8 CMMI10 CMMI9 CMSY9 CMMI7 CMMI8 CMTT12
-%%+ CMTI9 CMTT9 CMMI12 CMBXTI10
-%%DocumentPaperSizes: a4
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips -f sun210
-%DVIPSParameters: dpi=600
-%DVIPSSource: TeX output 2009.10.30:1246
-%%BeginProcSet: tex.pro 0 0
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
-/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
-setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
-restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-%%BeginProcSet: texps.pro 0 0
-%!
-TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
-index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
-exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
-ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
-pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
-div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
-/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
-definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
-sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
-mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
-exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
-forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
-end
-
-%%EndProcSet
-%%BeginProcSet: special.pro 0 0
-%!
-TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
-/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
-/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
-/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
-/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
-X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
-/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
-/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
-{userdict/md get type/dicttype eq{userdict begin md length 10 add md
-maxlength ge{/md md dup length 20 add dict copy def}if end md begin
-/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
-atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
-itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
-transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
-curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
-pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
-if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
--1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
-get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
-yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
-neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
-noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
-90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
-neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
-1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
-2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
--1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
-TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
-Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
-}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
-save N userdict maxlength dict begin/magscale true def normalscale
-currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
-/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
-psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
-psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
-TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def
- at MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll
-newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto
-closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N
-/@beginspecial{SDict begin/SpecialSave save N gsave normalscale
-currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}
-N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs
-neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate
-rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse
-scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg
-lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx
-ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N
-/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{
-pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave
-restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B
-/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1
-setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY
-moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix
-matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc
-savematrix setmatrix}N end
-
-%%EndProcSet
-%%BeginFont: CMBXTI10
-%!PS-AdobeFont-1.1: CMBXTI10 1.0
-%%CreationDate: 1991 Aug 18 17:46:30
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBXTI10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBXTI10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 105 /i put
-readonly def
-/FontBBox{-29 -250 1274 754}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D004B836D34E88C20EEB527CE1124209388A2DF
-E27A8DF298A2693A9D529916AA0B2176E6ED237F69D84A8FEEB36861D1847207
-BE2BD61C6A412FFFEDFF13AFEC32AC7735BCCE5965F5966418A62ECB99112AB3
-3BC938EC590FF6922659125EB67E260BF02885E49BA6019E696D33F0B53606A2
-F515E0C45F323311613A94B838491BAB9FE230C5CC79D22925E3D882799F2707
-C32975A494F0F9513E4D8332E7E54470D9721FBD345CDBB48286F2F19CC6D66E
-BB631DD6476A509167A49CA525A72CA50E82C1D08C2B372DB54C5949C753B632
-2009B761EB90492ACD3CBE6A35CE1B66F3BC4D8DC36827CE4261A703328451D1
-879438479917C1647772999171DCCF1491A1C9086E0C6393506768F8757BD81D
-141C46EB9BF507EEC29962A0072B6C5D8C8588F3D68886CD2606DD3BD2FECCEF
-63245494E93EEA12AAFB06110E54ADC444C7E7619627A48A464394E5DE06EB46
-4C76A2FF010318BBE48B3776C826A265C66515717F7F2E943C60EBAB23D96B5B
-FD514A1C4E79BB3D3D2DEB936F90CD3FABF7B09FF7F564AB5CF4AF6A40E869FD
-395885A88F4A138B3CA6943A2D430BBE43D91F7F17621CAF52FB7161DA3B2003
-82244FB6EE792DCA1722C03392C296C029A2DCC5BAAB3EA03F8DEB039DC83AE1
-763AAB84776A2CCFFAE9EAF0BFDAE417E8BE682D237FFEDAF224AC09C9665019
-165CE32F5349E857177D94AD6396570932E1657ADE4D3FF57A3419946CCD210E
-57E5A1D91CF708395942527D127606350924D71BC21C6F969288B1C8CA3404ED
-E6219985F7301A20621368F74747EAD38990A4C9F2B62913B8FDB93657409FF5
-178DAA7C97C35EAFA47778CE03E863303582D8A99017F26A160DE09CAF559887
-BB7542DAE9D93635D7935E338FFFB7604DEF34DCD58044CED8179C3D5D153580
-B5DFF72BA41025750BC5AAABFCC548DBC3B40AA114A259480F7B979FC60C0A38
-A2A17337F124FC64D6D3B0AE140CD95202F8E25D2A5E87041F837647C29FD3F2
-81F74B7E43F45DA22971625A4876A4A0558D7D3CBDF61767A626695AD266B569
-0F406D8A4873FDB8B9ABE5EA5D5DEDC76A94A2204A79B3BA51C2725ADDDD581A
-103D8F830BB5AAD1B5FF4A270A2D96EFFC09E7DA49F15005486CA3455EAF0AF6
-CD8B3E7AFE65C2572276CB9A466F455B36EFC39717C2BF639972D09B4AD24800
-54315F0B9D482DF70DDDFAE6BA7232743157D0821906ABD931EFD1663FDE6221
-51E9F02CD62A034ED67DEA76CB859C879788F9A1831A1AC4D5D7EC5A09144481
-16CA2CAA7C229DE470982BFF4B7D3A
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMMI12
-%!PS-AdobeFont-1.1: CMMI12 1.100
-%%CreationDate: 1996 Jul 27 08:57:55
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI12) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI12 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 60 /less put
-dup 62 /greater put
-readonly def
-/FontBBox{-30 -250 1026 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
-5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC
-4391C9DF440285B8FC159D0E98D4258FC57892DCC57F7903449E07914FBE9E67
-3C15C2153C061EB541F66C11E7EE77D5D77C0B11E1AC55101DA976CCACAB6993
-EED1406FBB7FF30EAC9E90B90B2AF4EC7C273CA32F11A5C1426FF641B4A2FB2F
-4E68635C93DB835737567FAF8471CBC05078DCD4E40E25A2F4E5AF46C234CF59
-2A1CE8F39E1BA1B2A594355637E474167EAD4D97D51AF0A899B44387E1FD933A
-323AFDA6BA740534A510B4705C0A15647AFBF3E53A82BF320DD96753639BE49C
-2F79A1988863EF977B800C9DB5B42039C23EB86953713F730E03EA22FF7BB2C1
-D97D33FD77B1BDCC2A60B12CF7805CFC90C5B914C0F30A673DF9587F93E47CEA
-5932DD1930560C4F0D97547BCD805D6D854455B13A4D7382A22F562D7C55041F
-0FD294BDAA1834820F894265A667E5C97D95FF152531EF97258F56374502865D
-A1E7C0C5FB7C6FB7D3C43FEB3431095A59FBF6F61CEC6D6DEE09F4EB0FD70D77
-2A8B0A4984C6120293F6B947944BE23259F6EB64303D627353163B6505FC8A60
-00681F7A3968B6CBB49E0420A691258F5E7B07B417157803FCBE9B9FB1F80FD8
-CA0DA1186446DD565542BCCC7D339A1EB34C7F49246E8D72E987EB477C6DB757
-99AF86CEBCD7605C487A00CD2CD093098182DC57B20D78ECE0BECF3A0BF88EBA
-C866DB19F34BBBED6634AFC0F08D2AFB2A92578A6F8B4ADCD6594737FF6EED7D
-5B536DA9E3E2CADB40DB7C600EA4D100D33C3B92B1CF857E012C4EB370BA8295
-55B50047CD58E912E67E22C1B92F41D0BEE742201DF198F3766AE35EA71D8195
-A8C94D661C40D718CB09497485FAA34204229AECFE644C93FFDA54C789E4F751
-3D2519F7CB9E79B2ABE3101DF2EBFAD375469CDC687FB3DC2833EDC0F946B41F
-F28D72FFF2A9B8B0D76DC542537612E2BE0F3FB9601C897386359C55E867A547
-F872005F5C56C6EC5E9685E03D7A82653BE8B69741C4DF332AEEB2AA450B23F3
-EABD5ED060606CC7DB1762632EC3C6C4A66ADAF61A97D949DEA5156B4CF34765
-67AC3F10AE17199A710A882D47979F9D41AA2CB794648BE47479F0B00E18BF04
-923F54CEC1214BAFA39BB65ECB013875899E9901B7882D16D2E2C97AD3353668
-A6070081E4DC627AF9192599F5876369908FBDFA11E8D6CB2E83896E9C897CEC
-FD1D25651D66A333AF531FF74E1B0DEB1E3D1B5B7D3FB9D1C8BF60517B31C8D2
-1C264F44BC9AF3D9BA5280D1618EED96C11ED24F789FAA263394C658DFCA8DE9
-D47D9E188E212F9EC1DCF449DFDAB8437FAB9EA9AF01AE1714E8F932855182
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMBX10
-%!PS-AdobeFont-1.1: CMBX10 1.00B
-%%CreationDate: 1992 Feb 19 19:54:06
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 34 /quotedblright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-dup 58 /colon put
-dup 59 /semicolon put
-dup 60 /exclamdown put
-dup 61 /equal put
-dup 62 /questiondown put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 89 /Y put
-dup 90 /Z put
-dup 92 /quotedblleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 124 /emdash put
-readonly def
-/FontBBox{-301 -250 1164 946}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F00F963068B8B731A88D7740B0DDAED1B3F82
-7DB9DFB4372D3935C286E39EE7AC9FB6A9B5CE4D2FAE1BC0E55AE02BFC464378
-77B9F65C23E3BAB41EFAE344DDC9AB1B3CCBC0618290D83DC756F9D5BEFECB18
-2DB0E39997F264D408BD076F65A50E7E94C9C88D849AB2E92005CFA316ACCD91
-FF524AAD7262B10351C50EBAD08FB4CD55D2E369F6E836C82C591606E1E5C73F
-DE3FA3CAD272C67C6CBF43B66FE4B8677DAFEEA19288428D07FEB1F4001BAA68
-7AAD6DDBE432714E799CFA49D8A1A128F32E8B280524BC8041F1E64ECE4053C4
-9F0AEC699A75B827002E9F95826DB3F643338F858011008E338A899020962176
-CF66A62E3AEF046D91C88C87DEB03CE6CCDF4FB651990F0E86D17409F121773D
-6877DF0085DFB269A3C07AA6660419BD0F0EF3C53DA2318BA1860AB34E28BAC6
-E82DDB1C43E5203AC9DF9277098F2E42C0F7BD03C6D90B629DE97730245B8E8E
-8903B9225098079C55A37E4E59AE2A9E36B6349FA2C09BB1F5F4433E4EEFC75E
-3F9830EB085E7E6FBE2666AC5A398C2DF228062ACF9FCA5656390A15837C4A99
-EC3740D873CFEF2E248B44CA134693A782594DD0692B4DBF1F16C4CDECA692C4
-0E44FDBEF704101118BC53575BF22731E7F7717934AD715AC33B5D3679B784C9
-4046E6CD3C0AD80ED1F65626B14E33CFDA6EB2825DC444FA6209615BC08173FF
-1805BDFCCA4B11F50D6BD483FD8639F9E8D0245B463D65A0F12C26C8A8EE2910
-757696C3F13144D8EA5649816AAD61A949C3A723ABB585990593F20A35CD6B7E
-0FA0AD8551CEE41F61924DC36A464A10A1B14C33FAFB04862E30C66C1BC55665
-6D07D93B8C0D596E109EE2B1AAB479F7FAA35279ADB468A624BE26D527BFF5ED
-E067598E1B8B78188FA4BCFB0B51692D07B0BEBB930C6F0997B437E2C51B876B
-61A563A2673932C2045833FAA35DB22ADE12102335D5DC734AE3AC5EEE6658D7
-92EB62131E1DFBA441F53EFF9021D9D4C491F26BE8F54C61165CAD778CE8695C
-EEAF70E3B20C64D4C2B34A084B5770BAB2A974E898F62BFE90F132A37E2DCA4F
-43E13DB13C94DFA8ECE2B7374827AE168634FA007F8981ADA046CED3448BF453
-FCD9A4F194FA648F9FC0971734BB69CB73439CB0DD021D44A7C11BF295E81733
-4DFBA460FF3D654F9FB337E99E6D66FBA87A817EB9CA1536C84833870E3626DA
-55D48DE850D3E6F6B29DA0E7C9D681283586F208DB8D58042E3A7CE55BE84822
-C98237911453E479EAB65AFEBA3F61A763B40E74535BE56C9D8D06DDF9441741
-5C9D9D917439368736619717FAB4F06E2C329AE0BA411F3FD522D9C33AD8369B
-D7DCC9DF993778482F35F965973DE876FA19E109AA198A00658AB3F0D8E3DDD1
-08A573F2D525202AFC57E05D141E6C0BB811E1FE280EEA002B7A45BB363AD06C
-318D320D2C81AA5DCC842CEF66E7DF7670588CB39C9F42EE7763A3A17372432A
-173BDEF7ECCEA297CCDD76A835C36DCE9DB8F8CB66CC71B4920CF5BF055A5260
-5B41A5373BA6E4F63C85671D979EA5EC30D22163E6D206168A3827F465279870
-CA80E6632872F721BBCC622EE4214BF723551C846765495FA9921E11FE1A950A
-53150C3F5D8595958A47E0B16064CC3AFD65DA294FFD111153F4F233BC5468AE
-69585C16CFBFCA32C4B96C161F47B56661DF84FCD8ADD3EC086CFB6BB5179BC3
-A5469A1CFBC8620BC711F42D0D3139BCE4E38698D9C574450DB43B5A19FA6D54
-0368BA9F7A8DBF96DCD0B8968CD194264E6DD10A958846C278B8C2BAFE7AAF8B
-44C84C955F1A89A13E62A054BC76CABBBF6296DE00A79CD7C8C61C70F127618E
-9975B59A880685E126F57AD80F8F4D376E1B476BDFDAC868FB6AFAD9D694B561
-001623C4D9F55366D053B52F2B09EC08B81901AE0986C5350312E626006038AD
-AC15FE313FCEE1A2E61F8992AC00CA7BB7F997707EA377D37EA6FF35BFBC2866
-A572B31491F9B80445685DBA5E62F166E80589F768FC95BBC79158C23B2F1BD1
-25816F1486A64F76D99A638AC0DC101FDF390811B3C118C2D972B2E7587F6F24
-7F1DB2DD922D237A7D18FF08FD665355CFBBEE799D3BFF11CD94CFFDBA3E725E
-DCF4CDE4307E3B199D91893A365D04F43A5305BDD2538E28A0788E061F3A621A
-B4A04E5063B47F0109C1693A284FA43E8F1EA9B68145FF51C005D3FA40713BA8
-1879BFC3CAA881B9D885A0C1AA8BBEA7EF469AEFA06ECD3C26AABD535E9FBDC5
-CF858BFCD827A42CC5CCC4F1353A38204E89F80CAB3A5536F848EDDE1590A2A0
-EA53A5B5EE4BA2E44C0C4D37FF0C41E493FEDA6F034B72EE3B707AFEB7C95948
-628FF2D0AB46CE262FD48BE38A9EE135DD3B964F2AF6FFF727171FB2CFE03BD8
-F283FB6832C3E3F7CBB8BCAB0832CF2A8E614BBB3247CBFF413C62B66BA53CF6
-7389EECA675BFB2D7009025507988F15A89EA5E8FF18D4EFF6B7F9ED4839B6A4
-4DB456F527A910A57679CAFB925C92C2FD4006211445542DB24AF25F0A8294A0
-F1BA550A79E1DF637DA2BE0CBF54E3BC900DE2705FA5D39117C6D60A211DA570
-1767730698E8B894239BD9C1479A7699323FF448A4F09CBCD2043D643F79E5E2
-CE906E4CB48B87061E31ADC961CA1572AC8421BF39F7B411A9BC24ED53983C6F
-280083C9FDB651061980B7EE9E0BE46BAC8438B7132A178EF85333C42EC96662
-9492603E81D660C04F6E987221B84C126C873E07F3B98AE2A812AC2568AA2E8A
-72C259E99BAB20F278A375F62BBE150E0C31E5503977EC2E48851DB6ACF56291
-7751546B0A823DA0B180607D7E017E26DED254A742FC52B76DA76B749922A186
-E5289E8C05C6A9FAFBBD7636A099EBADF6E5E1F82280DDE4673C718D89139309
-780288A213ECC662AB646F272F2EEFED28C8423DFE4E8A3221F759C38D165583
-EF1402CACD01853182A20C5920BDB3E4A15B06A9E047D14CEC33397CC21CC60C
-CF9CF4590E3E1BAF10124B24938C06687474F6C62A824D7935380221649956FF
-88A63BFEB557BD68DF393A2E217C7AC2E311A5BF6A50CBA00E93CB093D28BBDA
-28E09307384AFD3A366F7207C59FFF6B714557C15537208AABE524C14DCF26DB
-63246401AA21F177D818F42C5BB582410C524971A226064657A2041A3DA2ED06
-32F94AE2EA8809142B01A1EC9BC2F523E666C586B385171FA974D457E21BD6B4
-CE7D97BC179F9152C1A608CEB6684F76369BF1CF68A51D367A90A723FA3C21A3
-93CE8F3EF2282C21BD2937BCDDC2C3C630E2DD7680E6DE9F785B60305B8D25EA
-724D36E8804D23D32D26231ADA92D9CFB30385E568CFE7F16162292FBE411AF6
-011471D6E8CBAF3BE10C9C97E5BCE6AD1D3A8A5836DE65B9C9153197293312B5
-4A60DD8D3D61836E66CCFE1FD45D03903C9B0779E4B4E36A09CCAFE0CC77485C
-D781D40FFCCE6396A1A8DE341290BC7FFF4984F05B49408EDF52087DB2277E13
-7F2A58C22C8C461FC1F4FD9876C37BEC8907EEA94D5B7A3A834A893F4A0FA427
-25459081B39DE1706E43B176F4614809A59EAE6DB99A245E7686D9170DD138F2
-5FCEDB16C53F9A1EB7D3EF0F87134B5B2CDC63F94350AF66B99D6D88B971C421
-CF5DCC2E77F3D1F2E0A4C472F775265A02890E611EFD6E00B33AA12A5AE5FCEC
-AF2B64AC90598627EF76F3E6E06516550597A6AB2B24E1B98BDE81BB8BED7212
-ACEF81E9CB5647C71F086AACCFE9CBC7F758C1A79E2ECC12EC4BD316E15299C7
-B994DD26569C3F59D02CB30D226C4343ABAD9EA2D88285B7B22B0208BEC6586F
-39D785BBE1EE55EA3E57BCD6EECF7C6E283CBE992084945865845B4830C574A5
-C56BFD05346282787AC93C2B52CBE07B15265A351F5E714376A53092DF3237FB
-BB98D1282B1EF524254A2FDDCE13D04C5EAAC3049DBF2AC77C1C803CFB330BB2
-FB902D8F502C1070BCF3625DDC32AF43D17D52C3DD368FFFA3ACB6F957234F35
-5D4BA5EB12B7DEA9C58EBEF0038D215F44ECC89E55970B2C90A9EE1F6F257C8D
-3A8DC632B2698EC9FA8F1BBF5CBE214CF7CD86F0628ABEEDC0E408C651CA6DE2
-8185FBFA5A140F20ECFB7216682BCF6C07C3D6E6EEB72100BA39BD7A0817C182
-CF447D03695C3C72E4CC215C6F69DAC14C3910F52FD1541E62C07148FAAD0F7C
-3D58FE6B8618F1C7307AAC7AD74B5E4E909CB3AE810BB0BB71C36CCC489983CD
-78ED725278A3804F3A7B8EC44AC5E29B380FA0BC679BA5433266E0999FFC8901
-DD81CCF1685E8431D1E2B4C463F3E69E276095C4A8300462AFEE7DCA64679E2E
-E54E5FC5937D004BF511C6A533DF733A5D3BAF7E9538D2382D9860A327D2FA43
-A865B1C0CD1C9E8F723B19458499E96D03B0F4BD979092BE132524367F199A72
-75861A9F7DF99427744216FD374CF3B7A2A9F50E4FBB6258E862FCD77B01A478
-EFB2D1C16EDDB6863CE3E804E238FCA0E7D3C6A7DC8BA3D5CB9DAF2F4E034CAA
-57F7829F432A68A28C89E9222D50337A614FBF2C7D7DA653FD561051A6CC2708
-4629B28AECDC3D44965F8B0035C51A0CC63F41644273EB5D33B024D33BAD164E
-8E0B2F9DC03438BE25EF057AB389B1A2689070433B1070370BA03A0F857516AB
-2C2955FD975B63B145BF3352495CA46D414E839EE8F3DF1C6F46E791ED598976
-A9C8CC0261B26C1F756649B0C5C2C3F8CDB3C13B9F4B1BDE6B3151C5BD3768C3
-99E647FFD0E7BC689237ECC0E7CB1A381FE9BE837D7ABD9B75530A35976C6780
-8773D5BF37E6E304414FDA945AC486E90A8EF4CCB27F3745A10674DDEFC936CA
-5383CDA6CECF420686F058CE8640D139BC32AF6885836206CB9F3409BE19B1F4
-34CD81F9F3FAE5D28FF78B8A23E54CCE995AAFF266F31DE208494FE274B5E189
-ED9ADA98FA28AE0E651871D90F825BA9C8697B85AF093C4C54115AAEC0D35446
-BEC134390F4F4D8675E640C94083259C4C103311000AF4A8D574652BEEB4EC83
-4251D0C95B98E3C17EF12804E33B4337633772107208170DBC37930F10A81700
-E9F27211BE84FCA9DC36DD5238C63E9FB59CE0AC24D6707ACBB8E754DC9F818B
-ECAF847815654FE4F5581337E7B3E3D6E00D4CDC078FA7E57227E6CB2A8E89C3
-191A73B783A88A4D34119408C5A8BEE8999B9F7B857B851E86A4C8CFB14127D5
-DFD02F457F9833A4FEFACDEFFE91C71846CAE6C2EF883EFA77722FE9C2AC96A3
-2DBE0698686DDC6CB127E9584A0129E2014223A296400D76BD4E16460BEE7666
-8E444E7C2D9B21AA21B3295D514CCFF4535364463E02FE721F1FCE09EDEDE7C9
-23619E8C8095B28BB1FE06258949C218F8630DC63C1B1470B5155853AF795293
-4248945425C07CEEC368A0EE5F393D4A3C69F0B14F84C5AB07D8D2F4A276851A
-EE76665B86EF7A5395867BAFDFDF464D7DA211FB202351617F518CDEDCB892C1
-37B64C9854DCFCD46EE3576EF777EDF5F4DEBC8DE6D078253FB3ECC1BB1D5AFE
-AFB067EACD19A3E096CD7B51E6479E3437966712E3A22C2B0D4D9F52312D2858
-BF3480E204603E8E942A569595D3DA4F7B605169357D1414585A681A39D11317
-F92AD00CF91BC1E38D01A745582842534FB117D8AE34B3E15F6615E745646388
-7BCEF4B5A9E85BE4CA3A87BD1390642B5C570E5A2440B128B3FB1E2743F61B1B
-50C4E78797EC8DA645072AE5FA7CC5BA7B34A1B3CAA5CB21712E2F157A13F412
-46259A56A7E7AD0805FE4FF5B1BC654B84AB8C9C588AEC8158382CC5C1A9B064
-D4274BBE9CBF1342B9A49A8A27F95B5151D9BE95F172C5E69551D3A6D9C99FC9
-50156F51A65CCB399BE31F9286C010B76934C7B6C66C53C76D3503281B6524CF
-9C6799D94846040976D21D37FE5E39F1511D28AAC960DA2ED18F9294D04A6AD1
-0AF2357429E77E06B2DCAAD417A93CDA7A3843812B45CE9ED636F3654283A7B4
-C5ABB08C29FACD083762F05280C4B8031187DC9A5479971869782522D6C284EE
-736ED78C53AEF75BAC12E7F72575C62794EFA6BC733C1D97A32DD8122BBCA9BD
-DCBF441B9534653581ECDB8D67BD9D824053F47B17A79EF1C7797F121152DA27
-F7E0C30A4F196ACC607F3034FED002F1CFC9171F7BDB06D4275B1B486CBACF97
-02C2106D145618408B820703C071F566E3BE6EBD87B0957941C9D7F2198F9B93
-EA3F6B5E652E1387BD5539FF79257F2C3A344F12FC0C420176402173CFB488AE
-42D98125AA9F80FBE4AA98CEA26D82B2AF92A0B4E5666CC0DCBC8CEFE64FD108
-10327CBA0CB4AE083C37B2CD9E34F82ED32459B8CF8FBB7D5489524CE700B4FE
-134C24C10DDE4D8C6416318C842A1C44BB27B07D7873E215D22DE13187A4170F
-CF4948670BD1DCEA9A5A83287FF081C2C7C9CEA0B18E275EC93A461526737937
-340E22D7F6A5F2D56B61C94C9025AABB3161322E688A55233F9B76D0A40E0605
-B1950A1D62D23EBC8858DAFD6A782325FC295A42269EBCE8D8E97F71850AE3E6
-58E6A8DF3993DE5BDA1AA68779DAB9DE8153C4E40424148D26F25D34BD803AD2
-FEAE3AA680CD8876AFD47BCC93AF56C9E49E23C71B03EE16A2F9662B82463DA0
-03D96606CA421DC7FB654C1584C4104D39E501E74B1418DF2BEAE3396551F00D
-0237074A2432091C7F9248B6337C6E631D3B1E98E7F7662075DC1CC47E710411
-D954C6159A9E90BBFC52B32C9C6655BAE8DC31B67C64D40B0E33EE896DF2BE31
-867E3AFEB7FE775B6829BDBC30621A48DA40DB251052FAA84DE0A27225D9368A
-9B629B9223A39149199E5B9E3E9BD32B1F8FA828CFCF8F917CBB14A5572C6351
-B5F4E8014F6D4762E444A1DA034E2E3C982E34F0DDCAA35EA0C9B952AE7CFB5B
-D21F93DF8804C960CA3DBB9AD7DC3783CCC38DFFA549465DAB337957259A30A6
-F07573E7BACA54948074FA153CCB1E711FDA97942CD007C25D44932A1F79B3F5
-C146AE22C0DC78586DAD8B091B174174C6B18DA619EA00A4B1F5A958A5407F78
-4BE3C7D11049F8334DA6F4E378FD5A76F8DD93CA73CDC3FCE4CF26AA6203B1F8
-16DD13D9A0AB6AD1AEF8ECF0749A1305E595189D77D1CEA365F34D2231559811
-DF77E0E4EA22A38D256FD0A193C380A08A9525E5E22A26565F8337D5CE0F0221
-F8E2F171D64C2FD71B45F4706E0DE45F95D643377D25E3307A7DF6D5C1D3B2AE
-F86A826C0630E514475BFDD0F2795142EF8D3918F38BBDC90622EC11E3AB2352
-21745D705547E3561C03688734EDB6484C8B213E5B4C151383D0362B5B541D44
-1612284B78EAC5B9712A59B900A963D6073361CEB3DB7B79621062FF4ECA106A
-D9767D53B4E8CD708CC5943CD446D0B46DD536E32CD51A6D84572BB74C003F27
-A569A31370E0EF7F44245A4CCB9D638E439CB5E436F109753AD6BC0651F74F3F
-13CA7A354C3CE6D177D825168CA1366401521F8996500CA2EC2C25F85E5FEDAE
-326655199CC34E399F04656DB6B8E3ED16CEAEECAD789941C132215942193DC3
-2CB1D1348296FF695ED398A8AFA228DFFB30B8339121FAF551722AAC18688992
-B9236474022563D4D40590058965668BCE945393861394D95EDA0BC44D428DBF
-A0B50968ECCB12EB7A1DDCDF9CEFCC61022F916B29D4BD58F46409A85AF63EBC
-3E9BCDFFF15E59381F2CC4FC2453031FBF4AEC3DA8E16B53924312823EDBC736
-67561EEFC674E921DFBA38111AC03530B2C4A7CFBA52E4CD3EA13C5BE87648F9
-0BA7FB99DA5D20960CDBB263E97FB091AFF1E498E12E2E8EE4226D6FADBD03CF
-26B58A92C1F9E37940682B87C52F717EF28C4426B2A68DEF9D2EC48D21643579
-BD412A18D16440283498D4A37820FE67ED7988665A7E6E3A2E9400AB45A407D1
-60307FA1821B64A891EDB44A6AEDBF1DF56206FB00FA210C718F287886E5BBB1
-F3BE095058507243C2558E218C5E031946DC9FE6E082707F29F694ABEE61AB49
-766EE742A5CF1162B8C5DD03CC0F2B71195E49732851018A97077CAE46C5B4C9
-4BF929D9CACD7DAFEB4C5E9659C963018A871FDA4B99753D933181DE10947FFA
-67DD9FC25BA8CF5F96F961604B6E552509E0F26CD3C560DF582069500DFC4180
-38424A141E150FA190ED0DC7129965392E4DD3562C96EA86C9E637123A9FD49D
-F23928D98368A7A6F0BE21D103BE02673D0D861935CDD5830AF92CE7718CE4FA
-E8631D6B85C233C5213D2BF517A2D5DF97D559F3FCD854AB92AAB82B1AE7EF77
-97F850BD824F8A19505861522AD79F9B757C88CF830ADEFE31A61A38A8A369DA
-9F32DE3817664CD623D6A4C1170E9A3622359DAF7325392C0CD669BE5CEC980B
-20D9577DCB329DCCC105CD3108B7FF024D12B5DA83CDE622B9612D7AE4E55410
-72E2EE881E2F887C0C360E894776A064B03B199B8D9DF5920C92592593EB3B0F
-609A2FA0746AAD82F712BFEFA9A41B4F372008AC18D7CFCA0D9A20C209E5DDEF
-79EC20F278F9932504F48D5AF7C649EDEB2DD05EED4AFCFFFA4175CC3F263D1D
-F3DFCC348E168C936D60CFECD934FA8AC172301752531418AA6D6092DE018118
-4614BA276C954A0110856AAD8CF198162B7F5B6CE0E57AD7D59216F9C9F18C25
-DEF6882630983621E807F761F54D2B747D27EA8141CE8B211BA37A0917CBBEBD
-E806A6079B0416637A1F17E6595BD411919BA427EBC900BC4C26193D358E80CF
-97ADC20A69A46B87330BD1F4D7EE56FC49EC893933E56E93EB679EFA151FD756
-CDF399DBDEC3AE6BE323A0B8D0C412AE20579DEAD53228CB133647F90ED654BB
-A1727394F861B7CE346AB5BF9411CDBF9EEB6E402768F7EE12D7015BA6895512
-E66755D22E77F1AFC66BC7E86C995A7B55EC7CFA407E699C2988F0C331037B45
-0A2732477AB8C4DD316831C00D37DED6B0BAFFA8A669F6F9ED86B87B1360CE4A
-EBAE9DF3B6ED0772520F11EC5AB198EEE4AC6B790F166C6C049F5845C0B8E945
-F6BE243B1E5CE283F56F5370719BE00B87C023AD75EEAB1AECD7E59A0D2E4FC0
-E42F6FFEF078F723AF4719F37708DE4DD729FF97466D54D3347370A682FF5A7A
-E5FC06A291E834F41678823AB17E018B96820FF950F35CF42348B9BD05290A0F
-21836D51ACA7226E7FDBAD4E76B1606C7BF7A947F6BA4462A3B55E6BCC031231
-DD02957D12612DD62856B635D18E8D080D2EE3B3478027248A6E0E6F4D1E9EB3
-65534AE7316EFEBC48BCCA9992716FF401F0DA2FD9641F90A674F3C380FC8AD1
-DC6C49FAF7EDC335D12EE4D89AFE9D792203B322342046560001A248F1C6EB5A
-C77E7B0423E7A35BC5BA5A3D00BCDF097B51C5F01351BE8A5B83E92251A21C78
-9D2F9F59EBABC7642167CAE7250C117D238E1C59A11BAD2132FDD9EF02600038
-C51BA12ADB6236ACD1703FF2E7F4E6850B20ADF8791E4498740EDBB9ED6366F9
-C7F055A00EACBEF05E186C75646E17A210C98039CA7ECBD80B2120DFA03AB8B8
-340E91BDBAB68B68873C5D3F75F84B4868859B49962618EFB533D2B7B29A4D1F
-359567B4B421F17A4AB7046D18A8FD2B72C60CE7BC18B03F3313BBED01A92C84
-CA966F995BFB72423CA92BF9FE692513F2D4048A7BF291A7C760D595DD3C4FA4
-F46EB7A8F3DDF8666B4AEC3BDCB8185F4E653FCD22E757D1743AC21CD0523D5B
-40FB7B37A68869EE2241F22839BE0BBA8B474DD7B46C7B07BDE27DF25992E116
-CA4FD485BEE9A3B7DC963D6A5732DCF30CBB4489E3E9DB2B0980107D27908AEB
-5C3954723E8CC58B7213A7A766A791E39338EDB99394E96624861528B2B3DDE3
-BF5BEDEECCB8AFAEDAF8D03500F1CB09462DEDEBD0CD4B3142ED478820182E2E
-D7305E3C6862DB18647FA4C7B861BB91AAFD8FFA5949E9032CF01C55A83DF4D0
-9DDFF4D6511CD14D44452AD029F34572B4628DF7B548422252846978922B78EA
-D67189A3BE5CEF48A62FF71C4C5DBB638B1B192EA57331987426C4096D06A842
-EFD88456C891FB0C6CA22687F08EB410DAE2F3CA22C5D0D21ADDBAC989740543
-4A8522ADA15B8AF4076BB1B7D5DD283E33559BA5D0E03E5749DCCA325FEF531B
-DA11FC4361A4588F4724AE92953FAAB1F89288D7BBE037476C6B6DE6B78223C3
-71E83A197C17A865F85F1E50BD629ADC01949790BC3243CAF7EA5A9E8A003ECA
-8BF6B1354878B6634BE683DBF4509CCD046DA1A9EAA288D5CC463A56F4C8E7D4
-B447491F66DBBC161708F54F7D620FCC555BA64611FFF64931081509FCFA3DF9
-AFB436CB629F1386AA61CB1F1501E9B0C4C5591B090B1BC5A6620258DCC31C3D
-93E69DC3D42DA3270128361762DE5C1DBFCFBE57A51E38C896C79EE98FCF9B21
-35EA92B469B1B3BDE4D504120A309E7FE344187C0761CFC86B0861CAAE985ED0
-4ECF2D9676C7406408FFB73FD400DA21A91F3B5F804CD136463DC6A71630719F
-C4A45752308DBB5E2741124412A246BB643C74E24E0A6CF10F4240EBC27757A4
-3B2B9E5C4611402993A1AE9DB26D651ADA1C1A5FE181317DF233E93E0F11D0E0
-0F25FCD5EC720D58F535EFA362153C378ACED9818890841AF6358F26A1370799
-60ACBBA7127A5A5E9E6324C1B8087D92453447927403C42396C5322635777B5F
-99DF76EC0CC9D3B9B30850856AE324DC905C2393E902E770238C75029B179275
-44678838D28EEF84483EBEE73D4E0B0860A2B0B46F28AC9550C144C4DAA2D335
-38CD1B1700C9D487CEE07A66B977AD0F8350F16A3614E712C5218428688A38E9
-C9B8CCA80FCA358BFA969B847383FFF4A93EC09B2D5DD637853BE78390F61F8E
-5D6BC3285F9E9A26D4EBBAB1E35CEF697AA93F1696FFAEAD345DA573E22F40E6
-B8814756D8A9EACB618D80666E9F37C79EFF082C0B863C23FC885E80DFCCFE0A
-F6DB1446B294E1E3D2768733597973812B01825CC0390CB04A6FA323C6C98558
-64105C46AE092DE031A80B844473E9BB13E470E23B858ED2005829E5D062CB10
-DCE578C393CA6B83AC2FAA34F2747A5AC7026EACD67437A4C1C3352E97C1C0DB
-89FBE531ADC4C06096318F39BC89A75122322F78E8507CE72FBCA85A66BBBC78
-720B4F7076C8FEFDD60CC3B1E315CCCBA6406267ACCAFB4750D68DD67BEDC768
-27634794D041FAB8B3E164B2E36462695FC683810B70025A853D2C5404F8AB59
-CE87D1B6FCB042121A4136D2C8F556004008C2FEBAC898DC3751936EBBE00A42
-90A43E17F07CF588F7025A036D01017D2D346365DB9AB316309360418875EE6D
-8EEE0C70F8B40CF1F40B00F01064B4B23D2B5A3BC08E5803F97E5AA60FB36E36
-46BE3831440B435E0DE07DC286385302AFB71A7F1DB5EDED869CFE50A2E8288C
-C8638373BEDA9D946F94B523F3A1B628EF1F7F2750D2205C3F2E42A3DF2AA36B
-5FC794709EA1124A04AA3A20E5BCC3CFBD0FDF7282E68304765D5E58493B6AAC
-3DBA40C5C16EA10309A9D2C3F20736BB0AF211E8C2A9B15AF48AE282C8BBB3CE
-DA478B58919797640D213E6C220325598A5B5C5E61831E8CD65B4FB6BA4AA07F
-4CB4A93C4312FD5F2026A08BE05A81577004A884C541A009EC21EE88D0F05BFE
-49B5FF6D2C9A1C1870547438EDC4450035DDECC160AA4854501DAC53E9BF5EFB
-DC8EA1B5DAB5BE76C14C9C1467B19107F7FD499E8BC565D2861416BB3496A1C0
-B1A78AF5AC811F11BA15D2B91C7AB30198D460C7DB4ED865327875A88AC195F2
-25E85644D4D4EC961E6B7E680BB9B3CDA389F626AF440A43FFAC680C468105AE
-68BCD8ABB140E99A89F4561376DE5EFCA2C18843C08D1420EB5FA48564D93D48
-3C698DFF9472421F803F31C71B6DACC8C772C835673A81D7A004DCCE980E4579
-6FE471BA1215D2FEB05B53FB4A96C103EA57E37C476C4385BF15BC423DFE2EC8
-E37A17B9AFE7080E8524FB9E17975DDED9AA128AF0971204325492AF04C049C9
-0CE51DED85FF1ADD687B9237C8CBC63FC98E773F4AFF8C76DEC9CC8B2F78183F
-405D22259DF2A97E2079C96E71359CD259ABA948F7CAC02A25AF57124424B614
-3701E8CFCB969ADB8B152790625D4D930465942A7888450B28E3817515CB78EC
-001AF70FC89C9B0B4410F5AFBC0C2E31B392A504D9B837FC11C0AA83CF76D370
-E9FB066154560B0C9B3C88E8E2C2ED0D068B9C2D2A5718A877BE11743AF44B19
-49F7FBA2E06B04009FECF3BD076F61AC82FBE2D73B31EB522E6B84FA92DC4BAC
-8B381257FEF6AD2AAF67E353F85856143FA73D3C16992C92F78F8715494AE00F
-AE45CFE7BA644CD012EF333EB754BB92494F4CB0EF451ADE345544226ACED463
-911BF80A5323189B56DF70A187C3536AF368CDDB842CD99EF9A3057BD74AD5EC
-FFACE34EC4FB0ED013BC413472AEE6B50E2EF8EA98E8481F89F9B5295A3F9695
-D2EBC2591299F8C4BE2314741C3FACEB97A76B6805CDFDF2070D02F09C54BFA7
-BF07F679CF03824A52180D1E2EA60B85E454A8B914E61C8D8C0BB1199CE1A349
-435D1925D8E340D5807D4AE6B2B288B05D36E05B946399E709CF6050F23A70F4
-E94F7410EF5F197CC2405B0CF9C4BE046D87EE5BD3BF2D4B411AA5F1C6EEFE24
-726217B48FC1D21DCA2D02E7F262A51AAA6588D81762E628E34FEDFED71517F7
-6D3C5D727914FE7DBC0843284C7FEAF63DA1CC62A5AE696529B303D6B5259608
-C8A63303AC0493A743A5BB8AEF847D731B181EB8AB1FB6010064E184654EF3D3
-D317FA1DECCC79E0B0534C72E5BE4B73A18004CE4ABB6503CE791306F3DD2A25
-C29642DE8D72887C87399A1FE26C6CFF75A3C43E4EE90D7A8389A5D6FF10DFB2
-0338157062BB9543900665CADCA8192F82866BCF1AA172134D24181BB73C9851
-E50522826FAFFC86930797F4BA66CD6AFDB5445227868A01B4F9A9420A3BE043
-79B5F7D6F9B9D2218E00CD2CCB2FB7F6E44CE49AE8DB889A51C5DE1737E51412
-59352A2FFC350F6D43D40D96BAFDCDE3992CD75B121928FC96FCBACE5D7DD027
-14B09F7D191300C150BF7276A2B2757713ADADC7F0D14BD1CFB447C835DCD990
-0CB64EF703D68ACAD7D4AC5D9F3842C947B525597F933BEA2CC5746FAD83BD81
-10ACD1487806980B3FD59310524CAEC6252DE79183A76831E9F3C2954B6095B3
-579584EA69C8CC7D99F55EB641B5F86BA333CB7B94B9A13FA72DFFA4BE06BE86
-507FCDD92600D37965A14A1E175D90ECBB3B20EC8FF44883EA2264FCBBDBE95D
-3F5085FA68A4252A97F290FBC6695FEE43C6E452A3418F5BFB98AF5FFE3F4D35
-0E47C32B5ED4AE68D13DEB5FBB84F293902B2E96A3FBBE76AC1005A604C5F99F
-1FD73C282980E1BD0E9B8194A329C91D45D5E393DE4CAFEF431183C523D66D1C
-EF5CF4571EE3FC150470E7D41B2A79AE5FEF7C6171B219A5E1B400639A0FEA23
-6FE826B0D28AA7CCA1DC54DC37A427F44CAE4202DFB8D14C9A2CC76244307F44
-93202BB02631C647EDDE6F88164B3AC1B2A722E89BF70271386A7DD95EB18994
-07039945CBE7966B6EAC6953F3D7180C74751DD889F322DB13DE66EDED56AA50
-D711009732E89DAF84DD669B3BEBADAD3CA66CE12C503B8252F6E104E886369E
-F6F24BB1BD6B06F7D1DC70570496FEC30817AC65AFB371588D834B07E5B548AD
-AB22BBE4D4EBED8B179E18E7F1B70609CA2E243C411973A81188D36D378DAF64
-88F70FE302753EC1785181BB3A58AF510128F8C04E75592A7EAFF73038B3A310
-53DDF67A0DCCA664E192A9D4D656970D756076A2C17FB2D79677C6E2655601C2
-032845B719455BBE955717214B8B3B54CE7C0FAD08D1ECFF17308635C31C259D
-8FDD354F89D0BB722322FD683CF9B56FADD4681CD785D10131283F7AECF05347
-2DDA332596BBDD0ADE4B8C3084136036C8BCE902D914A6088AB767D2547DE951
-788AB61F984AEE1F907ED32D7C8E8F959A12587E1DB807EE58512D4792AE2239
-D1BEA21C55A752E5C918E1EA0362659676E99715EEEC6A6130279F5B7964413B
-79BC832AF158C32C10D2F9992F3176906BB59C9050C658C6F11025A6C976EDD5
-057533A619CE19BF64536F7E36676201D38B093F4B8381D60F0EF5049D3D9751
-E157DD2D563CD5C4F2B4A6F804566A63237013815A9E9C518708F026A39B98E0
-DB478CF8BC6D1FADF49481A2ABD4CE9A02AF16B08EB7A9803BB3A4C359348962
-2BE5538D81A7C68373165084A9E287D671F6C64FA91ECAB89292C0E410386BA7
-0D7754CE12D252A82E31F5D329AF4EB5A105A197C57557F42217DB6727476A95
-9EC0D6CBBF9C8A01DAC393B235330D1BAE4E79D99F83FDA591332AC50C6F9C78
-9F596485EAE5F4B490262E5454C9F4945B03B0CC32FEED334787C5D57431F29D
-FC9887E5690F1A4FABBB0A3025068CD0759762108F1FCECF4ADF18EE44158A69
-8F22B3F394E95553ABF58FCE5D183938B858908532897B276CA19F39ADBB04FA
-3F7252F4EF9E404935FA62AC005AE30DF45AD89D0F435ECE364DC351544D21F0
-1362D6CB78855480FCC141A897B1E90A843BCB838B9F07FFB82CB71B74200AD4
-4D42C51FE8037E39E90474E1062322BF86A39B2730E62A3E432F84F58CE0792A
-B6FD67D55A7310F59AEC98BCAADBCD3FA5B028E18CE2552048E94FB122B0415B
-026D62270AD03018A9B9F50D07433855D4786771DCA34ED7210C7AF85EC54829
-24BA5668AF04264843FEE592FCCFA96D113AC56A788B3BBD637F68D23EA0877F
-48E239820F549064C66282C46D530D1F08C312831657846B7641C4FFABA2DC66
-83C3BE45476B53A870A4B6A135F0E48285E44A5EE345524FAE0C877B1A8B96C0
-EEFB12C8D7322BD27CD4FC05F998C94A5286DBB74334FB0AAA3BC4CCE4B3CACB
-48B394E8FD2F67DA6D8F5D8ED00CA6325F1ED18C561748FCBDC3CD23B2325198
-CB1ED09DF41C62D1A4FF8015C595D6FB0AA3D221F37115B1429E22C5E3F108FB
-414E0BFBC58FE96051DF7ACA92E376D6DECFCAE0D1C21A2F534DACFDBA5CA19B
-81C03C6152CBC1430519D24F11DDB589DA8B33FDFEACFFE46B3412C1ACC255A4
-817387B2E9C16D601F1BFE50959C4D490C82BE51BFDBD5637C587AEBD18F203F
-EB72D995B246F3C7F81A27EADFC7871010BBCD52F09BC4141E80BED4E2DC2F0C
-2F106093813A9F65C1A17DAFC58C374D4635B4FC489FF7931FD28DEE7C1BE63F
-6DC22DA882944E2B60FBE5B45E70686E662DBD7FC6D89D0B039EFC7B7117963E
-EDF3A4494F6E9E6E1A9962E66651563E75F932D28D4333122C46F9E4D4FF0853
-C6C1A933FC825743EF318F151BCF5135214F3CF576E2A395CB0ADBAD4E9B95A8
-D93800676704705E9171210C2559D9A234EFF5892A32DC708FDCC92B500B9E7C
-7CFE31307113DCDEE3592AD39B07239B1672F5D749A282E121C498766C73E436
-7D1AD95EAA47DF8B9DA953FA16067B370A8B6ED9632CD25FBEBF5E270AFA120A
-78833DC4DD2FCDBA9B45B095EC54D3A2C0B5BEBFF21BC62869D7A72DFD601870
-FA5BEFB87E448B7A2459592638BD35CBDCD7E8A20766E19A95CA27FEE2AB9A9C
-8020F51D85314B9AA58105B459E1C8A6A54244472E6794A55C71BC1E511F61B7
-0F8169F64E2D9D529FD78274BBF5E293372DC6598DE227E9D3FEC45C982A48F5
-AE805E5F3CFB074BEE0FAF0207513B7A73DE599303B697CF6A82C07F35095A99
-A97ABFF1E810FCAEBB8AC38A4AFAA29DADAFCF4FB3DD9812F2B72FDC1077337C
-2A693EC9EAE4BBF118DB6C82D5AB21E476A7EC24A27D510E49CC195D5B6B55AB
-C97DB4352C67D1BF7B7C95E4AFB0DBEB65863880F006F9C90D694A1DE0ACFE1A
-AE5D3ABE41A314D82199DFCBA4ABF4CA42695F34D48A8E95D522AF81E0E308E1
-67C6C3B13F1AA892A87434929D97468BEED681D64256F0CAB29F448B270DE84B
-DEE1AAF310A1D7C4F2E50ECA1F708ADB7C107F94F2C96F031796C38F61C3CF7F
-D616C00955F1679ABF65A35131FB877514D0A7E1028A6DD96DB5F0EA7575B9B9
-6B896B704D987E1F4EDD3C574AD3C9227DE05BF41EBD6A53C3F464837B93D878
-9254F1B0BDD8DC1CCDFBE56388EAAE668EF46DD8BE9CEA62E8C3A96D2BB8C6D8
-07547FF2482C2C176DFA0D6A07973669E9288332C54E95E2716EBADDF876B52D
-8380A3D57506C5BAFE03533A43084CE05BA615C4DBF36426976707C93D5467C2
-E4859E0E74AF26C810B96310E7A3EA957A49A5C63066B1B7152237B6A535AFAE
-165BE5D0406B3325A6EBEB6A54259277421FC708B70B578086C17E6C8734A33F
-0B0D3A7D0539A8B097EB86CBD646EEBF5C8E949F9B94F2D91DB8306F1DC9C37E
-0F78898C971BF910142DB71DBCF6ACA46819A8B47AF64435ECDAB0516FB6237A
-901E2352E26C146A392438A51F4D1A92400EA1A67864C9B6F21089A3AD215396
-754EA0D93383D6C8768574582C170CA0BD42DA9665BC1C5F66DC514834E1D98E
-42C639F6374122D5C6FADF81BD66C47D98BF9571D9F90C5D1CAA57457F4EDA9E
-1668AB12A189F93D4A40AE0D7EE826DC4A5AD70BBCCEF20D6914225E1EF72A7B
-C9EAE771AA0FD25C0DB686443B8ED1A6D1D26692A74F79B0AFD8D2E48C95D11E
-5F4ABB52DD5C5050D4E73A078091D6D1EFA7F3E98DDB29FDC8FFC4BA01903818
-1CA076F594B31D8DD04CC538223FBFB5C75EF71B11E4EB53021DB199B6CB09DB
-EF34A7CD7103895566ABF54A39899681230244650981221353AB1933FD3940DC
-00FD5F06F9F408264C22B424516D35200DD7B13DB55AC4C48228F05287390EAF
-4DA76B416D9B7F9F994C6202237A63C0DC1A2ACD2EA2E8E47AB8C4A22999C26F
-B0D6620BCB75FFF416F674088CFEFAADFE0544940419A8DEFAC22D639DD014AD
-389DE04C7868A122372AAE67D61D006D873E6A1D0657A2CBBC128CC590A88269
-3842A04749525B55F358262A287F4E3A1DA9CD2AAC68A101C4857295B27CF5E2
-754CE0FC0A36CF1B6E1C26ED08F52B439C3A922E8FEB0715898E5E6A42BDB238
-0D440D598148AA99CF8EA1B04EBD9759F97A7CED07E5F591D0A6A17E24146433
-A38CBB9477025F863E0D8DFA52341CFE8C184753AE403BD2185FFE7F5BCD5B12
-5C42D8FC3EA8D53CEDF414E7614A20609501BECAEB9D942318E78502215FB6CF
-04B81CF5E88D193AAE300A1C90A2DAC666D23FA06A3BEC57350EB9185B9E54B4
-9AE67288C4D008F1F3ED4DABF4145B15BBB388DC472490622CB35C7F6C286BE2
-C0A77907DB98387D1B1B190247E390E16B2CFD5EA707A3264366E0322DCB80F5
-8F82D8E8C1B747F4E7FE928B231F4909FFD2E39CD86C5DCE3A7B1A7CB83A4390
-206B6B1945EF0F48705EDF0331BA68139ACC21274D4C6EB5D5D6FB8CE7B2E05E
-7F5A6C22A2126902E50D071A113D30681A52403F352787841F065E8CF0CC7C67
-D55E9B57155F6F2369C2D425DAB9D2B10DEB9DFB5BD5615CE8B969C0A018CF35
-5BAFC389E312DD856DBCC244332D6BD99D0334F9227466BBECF77618D20E290A
-3348A7B9C141BE89C5A2B278255EDE357C7E55FA1B426FA1B763D5E7079CC440
-41E7539461ACD3931460218DC5ADA1C06594CA45EF81A7D259442B17CE4A8413
-E7C7204CE3DC165A291F139BFC636D006B95448520068FBC4FCD2BC7517EC809
-5CA29F9C47B3E55C87F0EDC30F0616C58284B7D933B310725656BA12B719E636
-F1CC9211FE40277C20F33A8A6A2C05F0405657FA2A4FD6F0769E7F3A02C93A2E
-F431CBF3D7313BABF42DA20734FDBD499ED2C1423A74964874215E0207F1A66C
-03A49FFD47DFFA2A65FE9B47FAEC76D6E2A8055D91C60A84848CA3B4FA763605
-7C12DEAEBB30DFA972B652CEF7CCBF90AAF513BF45CD9F59A3CE7B6C3DA95609
-9C06FA9D04B04C1636CD9E336C94A0AE74251EA8BF458826E9104CBA8544C20A
-FD21087D4D871836C34C0505558503EF25AFFEBC3DA9B0A437B59ACF1B94B7F0
-4399F18A5A3F75A6BBF5AEF2530125B312332E2E5C0D4569A8EEF937BE7014A4
-33B69A36FEDEDA9717A21B5DA1F4D5A9203883C452EED8B7C0B58C15F1445D81
-336B52B5C78439834D4F845CB23B5A752A94BE09D31307CAE989C71C569991FB
-4DD3A5F7FD7E8263A469CA199518348E32528512F6C568FA6AB10ECAEA2AAE6D
-53BC3E3CAB4840A81596D398810B51A673CEC6804E0CE4B158EC57BC24D3F8AA
-E50A1F6979BE10360809324FCF391A92FE0CAB73E151A0CB7F6BB7647DA12A82
-F8441DC693ECE87E1A8E29056D0228F44C89AD998F301B049D082AC3DC66999B
-29325808726B24C2E74553EA4B54A1F161D993C395DB1DFA53DF174444CC763C
-1ADBB0EADDDC6641964824CD576A3D15B36DA9FF58C1C48B0AC937EBF7F37DC9
-111AED872931328A38BE0E2F3D469B71DACB389DB62EFED2EFE99D6C61F64528
-0ADBF69DD44AB796D1FBFA1BFB1E95D5E1D05EC6979814B4271C0273040F9F64
-E5AFEAF041441C5A7FE10376BDCDE5D2214231B73DD103D3018637CF85A7D48B
-886EE0C5CF4D61F795D32F826D246D0E34C66F1363FE24866ECCCB027307B6B8
-D63EE517BE51A3870F5DE415EFFB856A88CEFC86E14D9C105B88C09C994BA927
-ECC43E483B1673C9C37E20737FE1917A92C363960A309C04FB55B1988E78BA7E
-DC83A62F62A4540B3E3E96DF829A471C2B4F26E1439A7FE909451F0AC3E26B7C
-5424CDE840B6B796380951A13BDBB1C8FE1A8025B3F3DA226BCE60EFF46F7410
-5CC075DEA929CB3BC7B452B09702C1DA8C21298BD30042E9E0A6AF4AD002CD56
-7B0240A968974D29C02023EFADC5B26D64E44988BD3656E870897A35D6560076
-4231B1201AD4B5FD02569DB3E73150A86415397511C2837ED74411C14E04502E
-499C6508AF2535A48FCFF58519E8B99C00EB32BF52CE60A39AFEABF871742C13
-56EADADEFEC86BDAD846D8CD131070F746662C891128E5EFC2EBD1881B47EF73
-7D14F8A3A60EF297F01737BDC1092B0022343129D890C0B3FF9A539A76BD59DB
-DA705129201E73DA6C838F88138D1FAD19A2A2E24DC830D5A86630B83D7D9508
-72A46557C14CD1B5564F6B95B44F1E397A9B24E36825F7E8D6010D2C8F8F0A99
-7E7BDFD21A36C298EC79DE1D56BBBBCE238E14848C811AD97A31F87C1BB9F967
-BDD6C056D9122355199F6343A6E9E708A06C569A0341C01B5BE3E2369BD9CF93
-304169CEB92D8276CA792E3E6F65478BA8AE1BCBB5E095D26D7618EB063C1CA5
-EC04F94748CFF5D31AA80A1F62B26FEA29BE66C220F07F2DB9E61A851F76DFF1
-69932ACB58BB1C698C51482FF1D43C0E59AD36B6B859EB949C2883BC08C3B522
-DF698CB969EC2CE8C8FCE65809EF7D3CC936349E574AF42AFF0DB9A4C34CD528
-C2B2955B82ED521ADF4653FFD6FB3CC47F97D25269EF3F63DD3D2F35DC6FD4BC
-A7686C50EEB7BB3EC306A6217BF74AA0034707CD1A6EE7F8244B3CAFD70440A1
-DC3F121F80077D3DEB3F80E3BE25C78FC013F2529E9E4D1FFBE582023D7A4A34
-5787B010B29C1A1D104805756FD4258E042C8647340844F602937216C9909FD3
-38F65529C2AAB59E7ACAE2A30F19A07C545F450BDAE563BD9283C68E45D714A7
-33FE1D41D5D813A288151A0C29D20A4E6613DEEB985ED590820D41EF482D5EBE
-6A33FA6057612F091CFB5968F8CBD0671ADE5D83207AEBB2D6B080AD0AAA3C6E
-FDB99E679ABE42DD5278D4BB680EB4AF4552435AE6D236EE36FF04206BA398B8
-D61EC385ED3FFEE487127983D9CE7EFA204E2E2C7C5210DF963DF6C85A40DED4
-E8C0102FDA57DEAB653F7DF953E78B41DBF03D30B8534E0EADA9340BBE8E4F52
-78770C538481186087F8F0FC954BFDA8CEF492C871D45BE12D4FECF1B54AE8A4
-B70A87355824EE7268005161DC45703D31BB7E24B7A55F8490CED732
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR12
-%!PS-AdobeFont-1.1: CMR12 1.0
-%%CreationDate: 1991 Aug 20 16:38:05
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR12) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR12 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 13 /fl put
-dup 14 /ffi put
-dup 38 /ampersand put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 57 /nine put
-dup 63 /question put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 90 /Z put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-readonly def
-/FontBBox{-34 -251 988 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA04C77322EB2E6A79D73DC194E
-59C120A2DABB9BF72E2CF256DD6EB54EECBA588101ABD933B57CE8A3A0D16B28
-51D7494F73096DF53BDC66BBF896B587DF9643317D5F610CD9088F9849126F23
-DDE030F7B277DD99055C8B119CAE9C99158AC4E150CDFC2C66ED92EBB4CC092A
-AA078CE16247A1335AD332DAA950D20395A7384C33FF72EAA31A5B89766E635F
-45C4C068AD7EE867398F0381B07CB94D29FF097D59FF9961D195A948E3D87C31
-821E9295A56D21875B41988F7A16A1587050C3C71B4E4355BB37F255D6B237CE
-96F25467F70FA19E0F85785FF49068949CCC79F2F8AE57D5F79BB9C5CF5EED5D
-9857B9967D9B96CDCF73D5D65FF75AFABB66734018BAE264597220C89FD17379
-26764A9302D078B4EB0E29178C878FD61007EEA2DDB119AE88C57ECFEF4B71E4
-140A34951DDC3568A84CC92371A789021A103A1A347050FDA6ECF7903F67D213
-1D0C7C474A9053866E9C88E65E6932BA87A73686EAB0019389F84D159809C498
-1E7A30ED942EB211B00DBFF5BCC720F4E276C3339B31B6EABBB078430E6A09BB
-377D3061A20B1EB98796B8607EECBC699445EAA866C38E03ED7D4F3EDBCA1926
-2AF6A41F67AFCFBF3630C943FA111E4CCD988A7363F7C2B75EAF5830B049460E
-0D2B337988F150B9182E989E7750C51BA83DF37685483F86D1F47478883F3F6A
-4B7F768DA5AA89E8F163029ADD4A9209DE8A4F285766C06EA859639B92CCCDCA
-F59B1C2BB8D588CA754D1257BFF76B53984DF4937093AAEF79009D32A29A4C16
-FB610C7D6713482C48D7F9E8410C0F00AD6E67021056B6035534E79F05D14EF2
-4E82E498FC1B42722014C6B17DD12335E62AA3A7E2B9C7696EFB68B5B0BD46FF
-DE521645629F982F465D160C3CF5FE8E5E713DCA6BB454201ABB90F5DA64546A
-7E81240DD20BA52A5641BE7F49591FB4DED72A9F0C5F0E3FEEA3993113FA3573
-AAD8BEA19E295ECD63AC355E493FF904A334CF3C4B2F05D35D1E97B0CADB8FBD
-BDF8BBB565CBD97D3306FCFED92678953C8A14C1CD1D6DF84F34EBB794BF485F
-6D7B029BE279807B4460876AD864CE225AAFAAC07CA5CE89CF435AA949F1B05A
-C3F5BDED3E57529B5F16B278085AD4B08420E86B5A7321E45CF85F66532E5F99
-E9B6C4BA221A4AAE20D6633E0A28B59501410FEEE3E6E473050F688F6032C498
-1F51813EC2625E622EE53A53BA4711B3A46DE390DF26532C4D5FB8F32B125E6D
-07D51A74BE2B345FEACBE3E38C83F63177BEB8F1DD0D928143BBA25AF8CD818B
-8D2AA54444BBCA253D1E3B2944FDE0B5E5ED2053E2CCFDD0D7D3BA97E0879FBA
-6B54E65C3AC870FEBD41E4CAF6CFA5C4D3A58F04576DDB0437B3368BE5EF99C9
-9BF5F0D1A08848AB4642F36D7BF6CACF7694143E15724C1010CDBB5D1BF57F15
-FD5E0FF847B73CF2A6FB1912B353A7736F8CE995842C679E03CB90936239069B
-F801580D8DAEB7F0F7B225DD674A8A9B5BFCEE110A8C0A8CD70A984CC3BF7B6D
-4E21D7B472117EC1F616012248491A5737717390CB8F3D4FEEF179F2D25D4FA6
-8D7053153BA613E1456A800C81D3E7DAB80B2302C29641C8A9A548941070CE3B
-B6573D1253F30ADB7850A2E0980EB519B25EFC55F48D6BAC3E8DED03B7797A87
-E1C4ABC2DBA3703E7CE14B9604840CAAACEF680EA1624570F525BB474A61F699
-37BE7789F0E3E70A2D4537D647E3D592C3609DCB8F8D69B368D373B907038276
-E7C2CB12EC56AC100DB087949E12700BF553003A71FCCEB42D1FBE1C9F54D7D9
-46D54369BF4910824A8ED43C201C7811D6CE6D4B9F80B9BFCCD73FBCB5A371AD
-8CA1C8DEFB68FA5B17C2A1E03CF1E32CD7CACCA8C2477FF7CD07B2A7076458C4
-2185D246390EA42ECB68A3D1B59C0C4D15D7E0C9200A30F397CDAB806E894BE9
-2B550A330484BFFD4E4295231D915DC167B0E6AE459649F2735AC9CD0CCBD75B
-B86FDF8946C6F16D781F877943CE5D7344105C5D6E68D0AEB0D916ED6F0FFB31
-F43EA0D0564FBADD08EE9C27575983A27DE5814610D0A6BE3059D598B872C568
-290A3BBA7E237F20FCC984897882104EAC09DC808B4D067BFC64AF5B9B568ABC
-36E1EE7BD8B802D290C4F1D4A502575289876EA466593D4A19448A9E58068F19
-A827AE46284B7528BE3ED2884D060F95934BDFC43EE060B3E528F05C4517451F
-62B548C21B7111CBCC4B7A586266181767A91463367013FD9858AD9BC51453B2
-441A1D5A4D3F329F5888691EA7EEE0286DD73E7E46BE13E4A1C73051D7D7AD71
-B535DD987127D09899F1512DFB1FFCCD5D4594113A6ECD85A750DA95C221CA70
-6209FD1C073146BC83DFA878355EEF3C29B3B2F6B4584C0B3BE4755DA9EC17A8
-C7BB7AB521E9A301F98ADE64EBFECF08BC19E7B725DE8EDE74DD39EB76105F57
-4F20B42A8A3597E74C5E4E074D1F11817C2A4164FD7CC0C417D0D438621E6993
-F3C6D14EB7FA2A0E7B6EEA91C93F867001F5EB967E072AF47D0980A089ABBD74
-B9334B6E67F0059735AA6217D46215F3B5B65B82B96A09ABC9F87633BAF0CE4F
-1B84D71A52F435652FA08FD405EADED5CB16701CD0731C0AE3DD381F911B7FA6
-897E0ADE8E7861C0BE67D21C92E64F0328FA9D6D4DBC3BAFA6D5B6E6A0A791FC
-26C58DED193F26C0FECE84C1D80BFEDC4111B9B5082ED49EBF0144CA693DB986
-036B42793DD45679C79D475610B876A875DE3237ACB8F5C14AE72A7D5A55A23C
-EBC9C00CC8C98F364B19A259166FFF2369A718DD82C77DE66D0703F706D90B3A
-495D7133178FA6214AF35E63F43E59D7BB251B1F58DCE5174C7FC79AEF610634
-617378A34EF5A8CC75E1E0BC8D9270AF839BDCDFEFDB5FC45AB5E1C5C6E128AF
-B045E23A7D55CBBC911CBACB0947864C29E8E204773E346B3C8A04AD94E1C4E1
-7401269A13ECFFC442CB36E7A813460E74084F4C9F8C5BE067320383AB4E16C6
-CD7FF582C88C97206F8F2177A348F973E37AC87B3BE6F62A7B7633D3861D3203
-57153A1DBCEA06F674D789355FC0785E08F98E9809261EF3CF61E30F3895FCB5
-C296EBD677C1A8546AD76071C1109609EE8EC174E095F0961610DDD78987FEA4
-AD5538F1334AFE06D03D2BB8D82F072A331F115432A1F19023FC1A1FC422EA48
-FB16178DDD19FF1F884DE84674A63E5DF7D8B5CB63234C64BE336CD71604897F
-9D257762EBC5B79E72DED0F38F36506876323C5C79632E965914FC71B73BD0AE
-FEF2EAADA74422BA83405124DBA5D3842A783CB7D541B0057C48384895A42963
-6A9AED15A5BACC748DD935FB252F035A3422F8D0F68510D210C2C0D7ED08B70C
-865029D3FF6FBA9D0770D15838963A386FD6C571EBFBCE7D08B5E73E07920D92
-A09422A17150D02946FF812964F826C12B647DF3135169C81469947580DDEAD3
-066A5F45B6AD472CAE5BBF9F2EED2344C7CBFD7238F73CE719DD3DC5016EBF43
-CB3CF9DEC26DC8089B6302C5A12B1C6B4F3B9EB64B9321BFBE26B15B6A146368
-9B44A744B6C20F48F937BB2D4DAE7E9BC037317C711F2EB7F7C4E3C60BB95060
-B51FBB7F421A64E2B297F24AD7D1F440EF97A4870C831B89C24E183D9D2FA4B7
-9EE818DDD83BE56D10DB8CE787489B9D9A7E3DB93EF4C5B699B8452C9C786478
-E19AC905DE7A99F2500BD0C70EA37B69C4EF579CCB400FC8C16CD5B7E6E4575A
-4895F8001BF11F7D68BF6AB30D278506327972C3B71A08EB3411BD9EF523BE6E
-7ED5C27E8426B2BFFAA95CE557F811BC73B322588BACB5E0BC39FEA701A3F85B
-8D4B5BF47D92F2B3A51C4176399467C2A4C1B862575B8B35090749653D42F361
-CF86B681738106DD501B213B397815E12D84F4A4C6B5A201D426E7601E462BBB
-C0394DC5AD7F137E7EC1403EC2DD427EDAE9143EAD0708E58175FFD5426A900A
-D9A5449EA5145E7DEBED3025394C1C1841EC747B578A2F4DFA92377ADE853440
-71BF551447CEA1982A8B1BD2C845B0FE8187C36941F05AC969BFF7D1F9DEC09F
-CA41DA45F2B7185B3CC34E3601056D23B8C02009BBCCA8424E6FBE82D7450118
-274631744274EA222ED81B7C750A5330B3B46BA0523D20BB647DE888BC644FBA
-768524875C9E7AC767450D19BEB6E593C6AE88585476DDD86EF228595F16C2C2
-8143B46702F15334D97FED2B63BC0E2A2F8755D3971152DB4914C58C52F153F8
-ACE0432436DC37C250CC8710DF036BE081B140DD94FF03F7233E95F9C47515B3
-DB85CCB6CC59853D1E61785F7F7FC782BF0080C3EE64677D64FDA7E0B2A94627
-8E60AEB33E825D1EBDB4117CB450B7FB79146234970E76A4EEBE643F58796184
-BFAB1AB32425FE23DF9779BE52B9C3206433691D5E5197249AD2D2D85CB32CF0
-B1846FF0CA7E78A4A189A7DA09535059A0A87BCC8CDFE85D8133596811E3B2E3
-A126FE300A786EB6708CDEED20C9CD659CFE2CE5C53CDCD569EF94BC1814A520
-1AA4682107B4882DD6E7544B148A6504F82EF0D8FC4782B7C8D736B8DA6E8ADC
-9BA1DBDF6A995E43D4A916D8D14AA0ED29E3FB8284CBEDFCD23DDAADF6ED6667
-B36CBB550070F4DC61D5E248FFB9A0E6D0C1E6E1AAFBEEF059F71F5CFA254A5D
-0302CDA18AACB55809E6581E3509B4132409F649BE9B3107FB31C6DEB92503BD
-F66622A52C00E2C7E3AFFBFA791B1B66799DD09D487A67823BB857F53458B89E
-E56C3A8D3A12E01542362D5803B132EF2BE214CD1212373B85D36BDA3784C79D
-D7E2136408C9061F7FB68B0EF736DD57703308C5F8B1054B21DA6469FA6C71FC
-D652EEE90E4B5AC1D8281217665BA38201EB10F6BBD7C4636D91C87F682625D1
-D5D406A50B70798483D28B2F3C41D31A21B20558A5CE9166FFD6AC2E5C3F6007
-0B77CDCCE8A4E95AED80B3630783DA99059CFC9B9AEE796EE541869B7002CB33
-EB08343F8F20748D2BA77CAFE553BED67C83499FC2B0FF7627339F98ECCC7617
-9ABC2A8D98EF2A2D7F5D2009232CACF2861D6BDD9171DD07A65CC62AE1BE3789
-D32297BB75D31E8BFA7D429CE2A9A147CE886DBFE16AD85F78367B551B740B3A
-D5B804A3D865036DA4A82A1D61D530DBDEEE8F5C8FACC760F24F323B6BA6252C
-0393DC194FF5D19D908DE3B925F5BAB82018F44D83936A5B4DC2C779C5062967
-EBD484293DAF2E6A7E480E03DFF9B56C696CC0CA9E684090F1A77F637EEA1A3B
-D6195268FA8D5A5E51BF4CDA3F39D866123F6347C34AFBD9E46CB6E97DBED3B4
-D358DFA53F44B6F35DF44BD3EA017DD8B10245747BDDEC602D4EFD23AB7004B9
-A1677614D3B3B091E79631EAB5C7CDF20C1BD436696C6E4322B43A5C1522CE7C
-D29D2F8EFA8CC976A598C1CED923CDD4B78213A5DC65BB830D1301F6D12A4D6B
-8FB9D60BCCD2FD29499C0018080AA0490CB5DEBDBE86951AAF7EF3E31207B300
-6CE237FDF45EE4E1CF4CE0D3938A0C47EDBF83F07405A4CC0D32982FD4A3742F
-4A5EAC235B55C532C47F2114EBB0C92BB8FAFD185786A921E1EB4FFB4D4EE0B0
-894A7A55870F146399EC6FCC52A6C77E452D754933002A73EECB16C3018A61F1
-D7131F94696B8D7B23327F64B2E961E08E6CFEE12D30896D281022E06C61A926
-3643335F9E1BA700ECE7E09749462C4742F8B3C3045356015CB19DA4F7A25BFB
-BF1E64A20D27E5F2BC9BD91BFAFE58E91DE8F6FF405837786E62F6432E3B3F25
-5915B787A30E4026896F9CCC4E59DF67E45FA3DF5282D78C2A1BE713404420F2
-978FD54762D992D3D6269FBAF5083A19130F306B8185B771D090C1A984187D6C
-F04A2968524652391F444B507F81C10DD7565C39DEFF14CF7E033751296D3F58
-D6039EFF7CCB5B83190C5876873460C75844B80E5814F00F4A139B4DC22051D0
-D652BB9935B87AD32BA32F7CC90378C58A75D851B0CDF67D02F8DC3A98055380
-D9EFDE44D3FE2A8C27D938767E15AB09102424C244C1457DB57733BA19102F2A
-321E083EDEE209BBD0ADCE44A060A9D74A649668644491AE48A55765D75D4198
-EE34BEC385D4EBCA91B1426A4C863E3599ED5A26225423B55B7691E9158DE18F
-71F29911F33E0922242400AF628DA72BFAEDB9E67AE2EFFA6F513C1130C86B92
-3CBCE096747EA85ADF5E9E1A9275263EB0CB3122529496EF7FD8936FC98F7249
-2C054AE2F03C7FC65DF5FF36564E6973BC0CDE0FCCB981A3A2F88F3FFFBA6334
-9F8FE3385E56C4A4CD12C87068357931F3C25C8E78A7A0A1F8916CFE202329F3
-ECCC48E37DA8DE5D4C7346284A3DF4CB92055F63DA790519801237CF0FE83B9F
-5FDF0B488EE9D0D39875D80DE7AD5E9B3659F839D77EF1389006DDDC0D193AEE
-EC5C35C4D5F4B49963EA9405527415DBC1EDA8536D868C98B4A1D377B06D416B
-DAA92A7B83D78C7137B6316769B0922B59FA96EEE68D6B53228769209B553EFC
-D7D477B0032905B417626E5BEAF5B99466F4DA885C86292E22759E6D10008A63
-6FC01EF558BF5C168AEC491B91A44E2599D0E8CE124524514CE7D85C8EE16474
-F43E92F8318E0D20C1E4F3C94C0BA253B45CE1B75A4C8CEE0E324512248B7572
-09DD7F4E530308A2597744DF5DDE0F595EFA43EA3CEC70A70D5ECC36BB4FCBB0
-2A6D7A7C23710D0BA83E715598CFDD164C8A27018AAD2031E07871CC90122069
-40E10CCD1D252E430B8A198249ACA2FF4EFEC8577A2D1D1B3060E93B522EE044
-D526B3F079748FCBE3F59DE3CBAEF62B71A9EB3B9A02119618A19A0ADD184E95
-5D4F294C857786058B76876391C2B10C02A98D9D9EBF24B17CEAE7E073872D32
-34F75BD0E32E5A6B696D11B922628D812457A0FC5AA599106A6CE8E000438542
-DF76234EBAEBAD4728776CFC0DD4465ED151DEE16B3119CE79C50317B62CCDA0
-FE257A37A8049F268EBFC5E24DD058287244545C2920A9ECC639424387B4D930
-F656BCF3C2EE676DA272287F73A06DAAFDD70F6648780729A9A86CCC785E4623
-BC7FD4BE2CC1EC5585560F2B072F100588177FB47135DEC09B529916B82C3AC5
-D9DE366E5E00C1E821E98AE9A1507097A9152E341D792B86ACAAFC8107E48D17
-19F19EBEAB35AE907B8D5D6A0F0CDA90B96B2BB04AAE2228AB4F873F4BCA8C79
-A9959D73748EF3EEBEAD0FC8276193776C69224184A38327242C84D7AEFAD013
-CFAD7C6C1DE05FD2A0527305E708FFD54E72F733BA384C77A220CCF6035BFC56
-5F8D16D0B9F28DB461D3F48DCEF034D02B089747BC195267B303342BF01AE140
-A5F30EED3F56C7AC702B948AEED75C93424CF3B47DAD20D7E75B7EBA25B9EB31
-42B7D65C1B387D907218F08E6C388E5DB4B29155D30075D72BE3F401940FDA76
-4B1A05414239963EC20CFBA89F4CDCD7BE2F2A33265DB21BAB5CC988CFD11BE1
-4B6527D0B4049AE582C403601460CDD138DC449AF7E8EC16FB9D1C7E3BB1CE44
-68E86BEE15D75A30B3276B15B60A2C8069DD092798283FAF212F7CA2CFECE02D
-99D1D7A83CC640BF879A427CA0264389F7312E6915F53FBB50106012B562C9D3
-FC58B5B7C7C91966F81544849B5CD23B1438A85DC89354B16FC59F672E5045EB
-2CD3E32C96CE19ADE35AD59307E217C92FF23C297502747D4FC1A6A51ADA74A0
-5A34DB9D9C25D44060E7C0FC1004FBBB2E5010EE0DC2BD7048F8C8160DAD7AF7
-453BCDFFF452D3DE7E09C407C36CB3F15C3796FE51308335DC65E4E1AFBF30B9
-7681AC7915968811290A2F4E49F5D0991641109C6E0C2E4750DED4B4144B79A2
-C7356F5F3BC4C0F1DEAFCAB163F8C26353F7D5AD14A81D9EA012E63CF02F93FB
-FF0911C638811D9BD6FF4CB49A9EA8BE82CF09160B63FC65ED85929903D48164
-2A18291E4BEF2958E43914F1753D2C7B2B3C97FA7EDED715F05B0D1DA8B9EBF1
-43F953AF5A9B3E719265AE8239CC4FFEA9FAADBD6E2DECB7D39B133CFFF75E97
-EA34FFA8AC12909E6E23B564037767A7F7D743C81CFBAC9F31A9EEEE5E51E3D6
-48CE6B0BE1E9A0D46F29160C2127298492DCBCB618B2D297F263284F159FA5FA
-F686ABA1081D814035CD803A1E7D335C075B901ED1160EA9B64ED9C1F9C65F94
-AAA11EEA0C8AF61A2AF4511AB16FC7E1411F5BCF3C393462E84A7F564D36D74A
-3896756E4D76E526B679AE3DCBC49F9072F7493EAD1CB21710A4CD84EA9F18E7
-86C5D3AC909427BEF1243719CC102EFC0A46F40297F6851E2DC480282D95F3DF
-0200B15548DEF8D57601ECC98081C733BA1C507D738F451B68A024CC0AE6A785
-F95A0831E2D37B479D2E0F309D60B1D164A30A133AF0CF3AE0FF4EFF1E99D5E9
-7209E1BA09A27F4E102A62E272D01BC5C55A6D6189C084817A3995D4CD2474CA
-8688FC90D0E04F19E5D3744FAF09FAAB2D6A266E197B4890B86021B58D04801B
-36AC9F21ADD711CE23E61DB4E79F47047C7A424353E5DA5121DCCB29AA452F67
-34ED8FC8127ABB32E9E480F9056ED43D347D9BDD41DCCDFABD99C6445838D18A
-FFBFCF8EB1DD227C2BEBC6BCE097298427CFCCDEEF55B3E37F50FF810406F07F
-E77C0D0F48C849741E07E8420AEEF23C43DC9343AF86FD44118865F1967E0F67
-EACD32981EDCCD8F8152C532611B1788A42D353359846210FC5EA61071AF8125
-88548B8F9627114AA123C599801DC839B0058B6D0BD341BDDC51BEE8C2CB245F
-CB17D4C74E289FEAAA947547F47FA369743CBB627C0ACDC7C8195CF5AD024E69
-A9CBC4BC143E2FC31248FA0CB3F702C237EE5C85F53AD2BC39DCFBD72DE6212B
-84300ADDAF562852DB28B4D054C2F308C7FE25ABAB90802A4594601712720FCF
-5C4D492CD39A883F5B5832DEB1E83589DC20BC388E4CEA03FA22AE1C2C09625A
-DFEE57135F86DAE3DB8BFECAEB731224204EE2B3ACD71752B850016C2F1D9F4F
-57311E02F83E68EED20BBBFDBB6972993BF23B7D560E2DB0B3BD1DAE0061F618
-7854A4A4A96376CF30B9332C056F4F754B19A82C2959575E540DF7513F6BE3DA
-D369AF7EFB6C9D5F40C1363E1699E14C55E18E25093588F5142CE60E110657EE
-BF62C0868FF5766F5F398886236F35FFD89E909F6AD0ACC0093E5609856D0189
-3CBD6783B5D6704AA2B06D3BFB14E146DB60590C1FC78BCE82158738A18E72BE
-F671564930F481E3B9058687B1DF14B01D6CF736EDBAEFBAC5A427EBFA03794B
-C493735817FCF7F6C341468F20D8F865257293A8FEFAD10A52DB6A18EFDC09A1
-5B0EE26B3720C08C1ECFBD7BC01C74C552F2D261547CFA65A3BFC2E071C97750
-7FF2D95C27C59AE3301BE516714E69F07CC086C627F6732A7D8497249203636B
-55B52E751E0FE3DF6CCFF815497C38AFA00B3211EA7DAD9110089B0DECD377C2
-B7F8446415B0632F2466373CEF97F89C76C80C592AF551EAC73D7CCDB46903D0
-BB9DBC86F6C2E441491685470B7FE8553CD7A3AC5A0D28E1B2C486744634DEC4
-BDE5B86B232656DA19781547E9A896B11A68E6322E964CC8A7EC22E3AF91B7E0
-9AF2549E220B6FA0B9649668424098AA75EA0A90B790546527B3C6C3DDF52FC2
-2DCB99AE44F020FBC5BDFBDA754A1AA32AA0C0CCFA53765EA45FDAED7DFF2CAB
-EEA13414047C09BD70D488DFB6650DEE63EC53A153877B13093105FE629104DC
-70C556A4F8D9971E7FB67A083B6438348F0A679085039EAC4563E143903EFAB3
-3E9342E8FDFC56BF234FCE1DBA8268A35B57E6D30E26AAF53B6A35F2FB35B48F
-D1395226C222E50E6652684D7BFBB4D7CE6AAB5E4923C8425625522CDF6CDCCF
-423B3B835BEE8E32F827B833AA64AA0769815A03A4F926172BAE556198902818
-4B7395C7E653D999A7E0FBEFC5D0E5635FED826A5D24FB3A9147A54D9CCC6E39
-3562F5F1706699EBBAED3550703B55B0FE102747DA9653643DCF1ED5848DF60F
-CD5F8F261D598321DB4A148C6DA6EA00702B562480A704C2E71CFCE4A2A97D29
-E368D265227430FDCA5F48A4A8D5EE7A213ADDB8FD90872DCB7AD2DCF4EBBE0F
-10BC9AE754BF1098BBE293CA8C20FF7B45B27EFB2FA82A726A4B52E73ADFD0AE
-B6BBD6E3EFA78C96FFF5BC387D9F74FA07AD078C6D38A0EEFCB53A0AEF128343
-5CE0C3372A7EC25228F1CEB24044999EB563663B97330C74831B8EF25A39546A
-DBE84A779B1581DD7E4F3D58618D335CA7ABEEEE71F140038A776AEF523EF986
-545870B820B253813F5013374C87F0AAE821FA11AC5FF0C27CD929FC49E2B413
-1EF3BB49A65BDEA4F6364D691CAD976BA5852A2BAE7072D0A315C6E283C90C81
-6EC7819FEBD0B48FB179B1FCC16B2936C5E9128F26071AEDE920730B0DFE7B08
-28E6434F92514D58B4407B4E5CE59CD2C14451C75BFA4EAF835C40D61DA09671
-F26A9809A6457991B669BFA034F5C6328566E45E4572B80236C4C4F0C1D40004
-663D56B2646D879FC0A4F1198D1C7AAC9DFF8BC35156F276BC8C4259A8DA5A9F
-9B69628937C9AE9101DF676798E823836A211D23610F8B02875FF0C5EC47A732
-5F1B24A455BA51AA19DB7CB18C650D379F5139C3EA3A60237E30B4EC509370EF
-AD5DBE08ABF432E4C4A6A438781FC2040A66CBDDE4B3FF4B3AD3775648122CBB
-6B1029E88C01E2E2EBD9CB0EC696403C0653D2B3002D75BBD38C6D24A9F8A059
-1A21918FC18BDD74698D5DC0790C8399D73605773A053D0D31B844325A56BA94
-AC5BF1E4C62FF6D9B08DB420DED281AAE8AF466197BF842267B322E2028A51A6
-08742198C5711B6F3CB0E475BEFF27E8DC250F8F6CDFB5247E1341F6989DDA09
-0B0698167E3E6F01D936FCE68946B2EB60D1EBC57FC1881F3F3B68860F68B4B0
-124BBF878D5D64E5F20916A1BC7F215DAD6D92D67455C73B558E764CF68CA362
-6A12B3B7F1C4E2B3314742B0FB19585B17EBC756E897BA54354AA72CACCCD09C
-8BDDDA8BDA19E2B9E991DAE922379FBCBCF29272E3659AC77CC99993E7C009B1
-139A2CD4C3DDE2F14DF18DDD8BD9C845B476457F0A4534D680E1CF8F859D53D3
-578F86FE28129D1D9C3740283CDF39B09DDE1EDE265B63A22B6EECC20FFC7939
-388ECABF3C4335E4BE47478A24FCF1D13706EF6233285474A94D03113B5DD48F
-B169C1BF47B7DDA9367EADC60B61519C6E479CCED471E0ADC6834A07749EE2B4
-2AB0320F80C869BBD118D41EDD8496CCB5AC28BAACDB9771A3142ABF3EF29AF1
-CCF29C30B3D9AE45AA7FFCCBF68BDFF0D18773A8365E32D9CFF55EA560E3DF40
-985264AE89531A74BD8E127E8B353D07C2A5D8C7E7D5F443AE233F259BCEF3C9
-8C9F7626408C61EFECFCF64F0524345E516730A9628675C693A7189389AC3F14
-3556EF670A601423FA640248BF387571839E87195BD9CB1271B1276F21AB4A70
-EB142FB25DA6F8EECDAD5B40C75684C95F07A800F41B847CFE6454415B161C59
-6C57B1C79E2284DA41FCD116E6F37EEC95656E197331DBCB9677A365D52D3855
-2FE611105DD2C2D8D27357171684AA286DB4F11D1C4109F1D7AC31ADBE66A556
-D4CB1DD177F0F9D88ED5535A28BDB3BCFAA1A90EF36486536C92EC1638C8FF6F
-0DD1A4D63DF29EB590E9123DAB85DF9AE58E81F7B196165375101E96B25841C7
-B030424C9D0A23FE788E7637840F044DBB8137CC1A6AEF537CF8702E78DA239A
-1F00310E500902F16E6D53003510A34340D31D9CC4716913AF10281A4CBE475C
-0FA814C3EB63FF5FA1B1C33F32A84AB17B80AFDBCBBB6BF1C2F5E24B6A6EBBFC
-820D2BE9AE6B7DB3FAE77BD22A903A6A8A967F8451A4841F07BA55CDD1CD4260
-738C01BA72F553480F89C041ACBB6B90E21AAB64971CBDBFDAAC24DA5052AE1D
-D34B6426C12EEB1947BE9353682AA9DFBC9E69FF5312A8B3861FFA27413981F5
-7228E1969A6F9ACCE2E67CF009B55D47DD2E46570F1B6765342E9843AC6F9F38
-AAB1F8EE5438D007C82A95DB32B8FBFAA09EBF452825F9A83E1EA5FDCFCBC8E5
-02D3087D8A269B9BA9C404AF6F19C66ED45F0A8F0E59548E4902D44BA97676BC
-B5EDE4C5DE24AFBD65FC54DA8559F027D931172DBADD9B7D5A8994E0132D0240
-3495795BBA09011D3CDF143935C9BA2DA28671035F8CB8F0D5A7B6E86694760A
-5B173969663DEDC41A4119990CF1A73501DEEBA0D03FF50610F67721720C2783
-6542027531583AFFDD9173BB0C8FAD6F5895013CE8AB40693B3F86781B7B28CE
-360F65B4B593C016EEAE0E54CEC7C40CB8312F1F295866AF63D2CDE358C2EF11
-8F1A14E012FDE3772321C11D084F8C353AD52A4F7836F75EE68C505F01AEFD8E
-E9F1779DC94F1915F54B1ACDF926C4D74DCC68943A7352DF79AEC6D16C78C03A
-B4F5907272CAD0E54D33FC9C638270A91EA38366F1FDD2822CB6F43CD4EB50C5
-2BEE60F9656BB085FD69BD6000E68018C4D899934F4F8B01C3AEFC2E46A5ADA7
-16B43E4E91141A5D61F92EBE058A62A251947FF96C3B6F49663F7EA2D6E01AA8
-1EED3CD01B5078FCAC48545883CA8368D36EDB44F63C24E31FCFC0ABF9B0FA70
-6FC0FF1E5AFD08D9AC8ADACEEF713CBDC92B89C25254DB9E22EBAC2EF83277E3
-B33B8F5FC784627B804C355D283CDC4AD4F36AF97BDA3F752EFDA08F8A945359
-ECFA936E3CB38180688BEBB439BC52BB7944D37F5461E1FFC444B1A65390665F
-1932899E0BF71B246DB15C3695C7CBF33B7F61E26E906F2736ABD99C29BD45C3
-9B4F1350450D27ED6D008ECDE1C358470DCAA7834A7CCD4FE0EAB64AA8BA5C74
-7E2CA44972638BB3830A7A272D6832A0ED4DB0A6AB1E79FFAC9FF7814C8A747C
-D58428B17B6C6AA690E62B7B44EAFE7DA6E71ADB7D1747DF69DD33604EACED7C
-F273FEE83513E1CDA863289126D79C2B469BDCB2325F8036A1535683F95FAAD7
-AE08E20D0761ED39CD40555B47C8DF045AB774552FE787274E8BDC6688987FB8
-CBBF9D7645D6B2DE4F57B18C53ACF4589FE68B41B917CF69B38A8ECC7760CDE9
-88273727D3D81EC0D1F3F7000197E38F4A5F9A2018527918B2BFC79B4D802487
-97FAA052C99CC8C8A7CA9CD061F5877153FED5772A4305DBB9F2FD576B62AD34
-62E0CC672DC969A5F13D6C1021D6B4C94CA51F44AEA8F125CEF3F8536D7811E9
-643F90A5E33A122224FC4D0F446A080BFB166ADBFE16CB13ADD19FF67ED6A858
-EC976E8782D113C73892B363B219D059D6B68940341C95E8BACB644D0AD16A0E
-2D78A74D4D6B350BB87B30071498397EF3B75C4D5013F4D7C82991BB489E4C21
-F7FBB09ADD951B5010801BFE6E511D9B90DA6EB84DD0C2C6A29812131E599200
-2B36410D88D779DCFFF8093F61075E9D03600B79DBA0CF038910A60BEFC25A15
-0335783812198B168136C9C164F9868B6C121AC2AE1060AF9C03BC6B4037C93D
-CA04B66C02445185FA6E98DCE8AD003F32676B8A63D9388720B2E1C1A6FDCE2C
-BC37BBEC2B343111056B50DD162B64DB4F33B66976958DE0DCCB6956E0ACF112
-DBC21763E905086D75ABBF7208064DEB26F87C283F7E3B65BD8EAC941063C158
-0FB6A76DE2E9D20F1E085652D0BE0DC0536177A0DEC6574B931CBCCC41D0FAEF
-2105AD7684D6D555018795BE42EB0BC5631568701AF7FA8A65D960C42EBED824
-AFE6E2A96668FB441B5D47CCECE2888ABA305EB4CA634DD2E53A49BC9902F9F7
-5F2B7E2F5CCFA7CDFC2ECF8FEC41FC61953F441A2AD85FE42F81C2B7FE067DF5
-A15D63FFF2F0A0DE91C6365A71930DC7ECB6791B5754BF0F4058EA8C8A76CCAD
-7DB11FBEA158903D6E3657F64BA5302D11476711A591ADC421683546CD7B8812
-80421693B42620C2668EB1D8F0B08E8CE974D9465597AA109101F88B342DF0C4
-DFA6374583119B847C8D9BBA9DC59B5564E83128E9043640315EF967D9A7C783
-A3F94B7FE4FC6FF5358C814FE291379F585639BC1A0DB5024F54BF22B02EEF96
-43C37B01C38F262F7060788468E7A1E83466DDDEF78E6777664A452070540FA4
-13EE30E3CE3B5F8A7756BA67083C873C03389A4700755C07CF8A89DCEDA11777
-DEAE579ED01F70DE0F99D07BB9363CC259577AF3FA3D5A673D02B5DB43652999
-22B9AA35C4D377D638E7F040C1539F0A17D37A9D059AA31911612144CBAD8012
-EA27564D7BCF5E321710C327B6D3F161F556297B08A8073EC36C9972803B0225
-12642EFF0D9C216A78AED534E0B832C2A4FAE052F36B0273085B52E4666EDC58
-F644455423F102C2161DCE7A3159479354AAE66ABDE281445B23B54346679263
-355A76EE144C76C12646F9C21E1072E8991FFA2F89E61819CCB21BBE45E66CA1
-D707F7D54FAEE1767C4AC6991AD01974878653E839E6D08E8537A31C256B7FC8
-56EC4D34713CE3A3BEE667E2148D6E854032E1E2A6386F154526B7C7F3670384
-EA2606823DACD84724A94124CE6EAFDFED2FC22754263466D47366EF9B7AE444
-20DF7FF8CF0BFDF952F627148045DEA4FB178507B4CCDEA0F668EA39FCE1FDCD
-89D9302F9737FE7CAA7F93804AF631D8C197BF4B3E81C07CEE4787C4A2736DF8
-2410E10044DB3272CDC28050FF12F9CCAC93F5BABE90CB83A126346FD9E3A121
-5AACF9847332CE1F8D77F5174333A781186CDD5D7A1C587B1AF60BC015D2EABA
-7F67037F662C3487190799D40C5EEA961D5B1F2ABFD628F544DC3A971D0CB4B9
-E78FDCC22DF4670619D3FE1D38F1BEA163575EB00BEED368058584D5E31A3D09
-C60A1917069AA83C7F35A31DBE215F3984659704F92313BD40AD6318808E0897
-7F4A347B29B3F3943EA38FF66026455C52C949DC4674DF291157129062852C64
-98F2D4EAC6995E1CD2F563C1F715313BEF0B5577E4596FD0C02FE29C7F4CDE55
-FBC1B2F7A735BAE6C5CBAFC9D03DDF7DD526F1B4527EBFDB12A06B2D209E462B
-762B2E5CA4B1ADDF98DD874F23381FA376B7F116CE7F1F4C1CF2F42840662EFB
-95BC5035CD6ECD95B4BED82DA1DD0689B4C7F18CEBB2D7C33E50BB856372053A
-1D153C1580F98C2D5E813700DFA8EADB0DFFBC6E9CE035AC579851D282A0C4AD
-B1B1FA1F6F1C694C87E550D1CDEAE83DF259F219D3C06A5DFE646EAAF1D74A41
-700CFDB8313D01B5251B43449516FDBCA68AD69748A20AA028A2F525BA111B12
-88EBA8C67E5B23B606D3C524B2B3A059AA7FD77282FA28C6F6DCA7635F828D74
-20490167EC98BDCEC5D753DE7834696ABA87624038D61B2AAB32578F38DEC9E4
-2751800EE57493C00E6AC97B92287ECA89B03253B3233D815A2B35A21AB9722D
-BB16F31EA9D73286460FB97853355DC4A1589B7025F7829E35B6A294651D020D
-87CAB97991EA91C5A09F4FFA042BA5E1E6C9968CF47EA0BF50D2F984F539C85A
-090B9C6B95EA1AB2F1699A14AC2161BC0A2529E5694F5EB58D908A9B15B0C8E8
-3186490485CBD543E3D5A8041D71BD1C607E50FEC13B4EFC28E98D7E90C53AEB
-120003830BED4EB3505CB0E371EF849813872FAD161399F62B410424B0CE1065
-2033BE50281EAB588C5D3CDCEAF1958DC79D4BDD15CD5FDA46DB0E9EDF9F000B
-909F83B5DAE35F2BDF66165F563E29EBB5686EBD7B0733D83A41763113139973
-301FE4E447B4F33A059D300A471D80EF3FB002107CD56304E4317C450870BFE7
-9035F1BEE06A30B220F25C1040B1E9AFDF20158B1345FE11816004B4F1983ABA
-AE34176148CAC1EAA36F0DB2425EBACE5600B6CFD12FFCCAA364B9E21547FF82
-34DA67D532ECE504CEAC691611AD0E167D8E6C651482B7AD2DB150994BD83B66
-F5C8E4E2501BDEA0F70A06709DB3A2D0A87842A99926EB690E3C66B0754ACA43
-4F523D9F2E2A0089C5C00AA4C455A4F70596B7F2BAABAA5EE63812082E4E8292
-5CCBAD15D10178D48DD38D1C6C4089354EBADE70BA4EB757D85EE21700C3B6DD
-752154C482E5936849F70A2E4C58DAA56CC9B70A0119109936D20DD94B883FC7
-001D087B21DFFD8115CFB6A898DCE84EB9D026BD12382DFD8029D04461134953
-E85949F652F4E1E601FC16906BD4261F019F84E0B5B3B4C8231F1CD44048F280
-7EAC075DDAF1BE658DBB219C05755F6CA8F460428213C6545C6FD631995B229B
-3944E2E11161C664CFF4B484A25C765FAA60394B233BC1F2E8EE1B74D0AAC8F0
-7692151F544D736C904EF1C3BFEC8B2F262E383EC2DA934522CE23961251E498
-CB545CAA9C018B0EDEEED5C33302A0C91EFFA8D2A71851C1703C6C1954953C9A
-EA6930040290F4834729408A243B7AB60FBEBA673F3A03D03E774902B9DB8796
-4FB336D899630CB361DA0A8DC4D6F736CF4FB120DCD06E045B2BCC205FBC9A6F
-7D9C33EDD182953404F3139207546D57286E5BA298AEDD2D8872C5269E9C67BF
-F1832FB403D5359B81CF1D0B873F0863D7BE051DE2B8C3C51E7CDBB802CD7EF0
-1D09E28597A7AECADA737CBA26B2B61325DD56CEA91948B9C21A6CE72669B213
-B1DEC2704E4E97C89C5BC2965FA770E4F12658DD6BD00931233C0FBB38D7A60B
-FE878B2516F363AC230CF3B07839017EF07C665F9A3BCEA9971D9B9531F2ADBC
-355CD844E0A8326288E2AEB99907F839514E204E0AFF8FB25CAAF2EB2E212EA6
-374A96F7DAC15E1A81E93303C9A541BDFB2FD67F1B242FA96DA7DC13CB1DA128
-63B06589B1E6C1AA5271CE6A9A87D7B655C79E6CFC8EC3D6CA372813A9C8497E
-94B670209ED95B38CD3BE3DB5F0A3D8AF723C6ACB1D05AC082E3321541D7FAB2
-4283A65D37A9AE6D6395680BC727678143AA14194B9A2E3E69AEFC177D791902
-8CE650CFA9464D949EAA4CA45E5F81897BF8BDD8921686531684C6BDFC18D46C
-C971826937B67E47B706135BC59ADCF6B603EDE35F91FA71A46AAFD337190DF8
-7DC21E2C9FA91FF575AE5840016C3D4904A5BE24FD41707E22427763F5599F02
-99C447524D9515E6EE09120A28929C51A515685A190D06BC4A3DB809AFAD8A20
-0D5C2BD3E212733BF8A8B9A44464CF9C2AAC58FD013DA91322CA69F3F29A9156
-7C008C33423A16EA20EBD8887B12011690746FE0A92A9E0E0D2BF9E74DDE037D
-1270A065E20037128C026138E3DA53625464EB51494FAC1FE05DCC6663D2D6A5
-A5F25FB3ED580BC79B064DE2B96B47026B65FB63192D85754453867553FE884E
-61DF54C3D1C4E69A65ED8DF4763D029A40AA9A61DEE2D6E0A2A89609A37DC289
-E38C8CAC6A7903C33D76F5118011F8F3B12FA280A896F8131C989ED182256B6B
-CA737EC6240CA28D8F20A44D479BAF7FD914CC736D8837F859B3E23E602ED53A
-EE217E8B959648AB522CEFD1AF09D4C2EE6091CB929216CA398F3F179DF036A6
-2E8F4A1FF27FCF3951F40C7A7FE8D3E397F8C2F6CAB99FF537BDD72A74E58B65
-27109EBDE9AA46D941A3B746BFBBEEE437D04D463D1AE698AE0850EE674510E0
-ADE5BBE05A239E96975371DF52B1991806D88C0FE32AC146F378C861AE63E79E
-86BE778BC24F56C676F72054F70D7F23A029875777C1CD834202CCF0
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTT12
-%!PS-AdobeFont-1.1: CMTT12 1.0
-%%CreationDate: 1991 Aug 20 16:45:46
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT12) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT12 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 95 /underscore put
-readonly def
-/FontBBox{-1 -234 524 695}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F0364CD5660FE13FF01BC20148F9C480BCD0E
-C81D5BFC66F04993DD73F0BE0AB13F53B1BA79FE5F618A4F672B16C06BE3251E
-3BCB599BFA0E6041FBD558475370D693A959259A2699BA6E97CF40435B8E8A4B
-426343E145DF14E59028D4E0941AB537E34024E6CDE0EA9AF8038A3260A0358D
-D5B1DB53582F0DAB7ADE29CF8DBA0992D5A94672DFF91573F38D9BFD1A57E161
-E52DA1B41433C82261E47F79997DF603935D2A187A95F7A25D148FB3C2B6AA32
-6B982C32C6B25867871ED7B38E150031A3DE568C8D3731A779EAAF09AC5CE6C5
-A129C4147E56882B8068DF37C97C761694F1316AF93E33FF7E0B2F1F252735CE
-0D9F7BCE136B06EE967ABE0C8DF24DCBBF99874702ED252B677F407CB39678CC
-85DDFC2F45C552BA967E4158165ED16FECC4E32AC4D3B3EB8046DCDD37C92FDF
-F1F3710BB8EF5CA358ABACA33C7E5ACAD6BF5DC58BDFC3CF09BA2A38291D45A4
-C15FF1916FE2EC47FDC80911EB9C61F5D355BEDFC9DB17588547763AC5F0B1CC
-12D2FFB32E0803D37E3281DA9CE36C5433655526ACFB3A301C56FAB09DF07B5D
-048B47687348DEB96F3F9C53CE56DDD312B93D3918CD92AF53FB9461864D11B8
-0138918D0B1270C54873C4012CDE6F886DB11BCEA04B023EBB43E0D0A06BE725
-741D08B9DB688731A6C9886C15A83C28DADCC81385EA239E045E8F3670CE03DB
-9EE77ED067036595C9F3B1854343BE3A12E486B6E5A2F8AC44FA5378D28DCCEE
-306B0E283AA444423F9A4FF38E2B56DCF67A39CEB2C643DAE86865517D5D0371
-CB8797208ADEC637330A3A57902C9A88EDB75A7C16FA9850075D9F19578EC666
-1353CC1FC512D59DFF847ACCD058E2058E262194FA3370E876BBB803BCC86609
-B8BBDE432EAC6C13261A28739A53C16EFA6271A92A2CD064F081395ED8E128E7
-9067F11414984D2F7BA9E153FAE76ECE849AE1D73D30499ED90D3735941DA9CA
-1AEEC1D3B8A1592D1D8EB167E150D8197C341105DFCF09414CD7F36EDC918BF8
-453512B168390413C5F9731885E06EE7B378C923AEEA80B5C62ECD7274F23284
-B290609EE41FF287DAF03E405DCF3D03FB75E5EC6F1982F71566F7A843C3AAEC
-153355FA4FEEF24E0E5E86E54491E4C5FE16869EC47F14147126748F9A1E6F4E
-E9313BB550258FA93E
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTT9
-%!PS-AdobeFont-1.1: CMTT9 1.0
-%%CreationDate: 1991 Aug 20 16:46:24
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT9) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT9 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 95 /underscore put
-readonly def
-/FontBBox{-6 -233 542 698}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D1E
-2931CE5F5D18C658602059F07BE66E6EFC9239D7AB2FB8A4CBD41675B8ECF279
-650C29E53B14AC0E392A664848C1844B1CECBB2D5CFB72D0916B675C9A9A1E35
-F12696A6F628473C604A95376468E06E295AD6F76CEB939D94113532050B9D5A
-D2F41A9EFB9424D986612313B89EFE9C8A71313340B248F6853B1EDBF02B7F9E
-F447220FE131D7D54CFB8AA1281DBAEA73E665BACB1F164552CC0CEDB63BD4B1
-4A9AE8AC6FA02242DBE8DA46B64B6BFC11762F0784F216FC8B9120D688D1705A
-438B14F5E5DEAF2A98408B3B64620DE3732A4DAE6D08D5D97E34C75DAE19EABD
-BA0796165C1151BCBFB1DF8D29A63A8300DBDB9E3323CB82D0337598B83F4F2B
-A97CF5196D4D1CEC1EDB8966E548C0D9C194C932319610FB43EA1B86322FE641
-AB48770FF13BD475A7267E142388563D1A400419C585B22A9886074687BEDF74
-D905BE8EE440BA2ABF28EAB673399B7F129B9729DD5564C681954621903B84BB
-CAF89AC5ADB2932472DF29ADA2BDBDB4D05F65F28F5F4C529613D61858E0074A
-082A852710A62A147C966F2B85B51B0BE85F11D2057C66FDD61F6C5755367980
-9F4DE680601D4DA41B46F8D2148450000413C27AA39B586B74B977B25F0FD3C0
-4BA1EBFAFDBEC531EA13DFBD6700E53818CE04D23886B8AE75DCC36BCD3189B1
-0D55FAE27D0D126E82AEF31D7B5DF27E58C30BB0867D6D7AC1DA9EFB8A2DF095
-B5B934A68EE122DA0A83B36C952431586B957990206194E89339048AA6EE4C53
-703763505ED57C494DD907D0EEA04F6B1D4C8F3BA778F4E7AA832AAB4D75F024
-61E91C6D25FD6823CB24FC863B44EAE226CBCD81DEE29413023C52E4C515FD30
-4E9CC58955D9F87CEFAFAD73F2027DC0BC9CA76F8C6A3F8704CA70B2392330C9
-DCCEA27BF45555C2D9BC3A0BB5F3D899BD27615BE02CF8EFC5E9CB9C92BBB681
-36AA6264983BE3C6F2545C48C416F14577DF9E6D63EC23246A67AE1A2EF21CA7
-F7FFABD5A306E2A2A78A8659D03CB34940DE84886EF41C8DDE72A41EF93C2801
-2E69B7CCCAF7AC2A85E68F823EDE2054CF9E1CDBF0B0FB41479706C30AE9854C
-89DB5F12A2A3523A255630D7ADB82BCAA224DDD4CCDA372A984265CE
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTI9
-%!PS-AdobeFont-1.1: CMTI9 1.0
-%%CreationDate: 1991 Aug 18 21:08:07
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTI9) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMTI9 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 46 /period put
-dup 97 /a put
-dup 101 /e put
-dup 105 /i put
-dup 118 /v put
-readonly def
-/FontBBox{-35 -250 1148 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9E3948FFB3DF7BFF10C9BDA4EFE5F68A8CB1526990D1357AE6D2F7C2D2EF8496
-4E47B39E6712EB8908A3265E5FAB40567E866C244814449F1E993AAB422C3F1D
-DFA8C7118584F2E5197FD4BFA3A8AE9E953C6CD4672C0FF51E41C3A919749C1A
-F06650DF4C5E17492164BDBCDF22609A74BFA7F69960A64B9F949FFC2A807458
-8579366C4F41BDE1FDFBCC4845FA19BBB6963D65EE8532549274BAEBDFF24FA6
-03235D1BE37C06B1938AF369DA75BF38DDBC87A1FF445EAA16E1895ABE9506B9
-211955753E447865D33CEF007391D2666A046277A30A49804FFCED3FEA5EB2C3
-E52EE14A9F75241EA10C91974CDA6236EB840FD44D6DDE4D9B3266C3B99BD38B
-D835BCA8CB819C073480FB972CC028D218F6A1D344CE1B63F4FBF2C826F412E1
-6E0B05A26125865A14FD7B7030B478BB8BC6BC395335C3BA940E1C348267F4F9
-0AF97BBEE253511940F1048E175D3569F7D05A28851B6F50765FEB6C9654FEDC
-1BF52F535DB5BB90C1BD5D2EBF75E0AEBE82B20507F3C28A03746781018D4EB2
-298E4F2C27ACF73FA73EBE43F014BB575AAD516C0407B29E1653375135ECB74D
-C91372F06FA8EF37C31AF3FA48AE65318EAA6C34830A5377ABB2DFA5DA53A574
-433484BA1466709A4B186761655C8E482833B697673E847C691079E7F1DCB8D6
-1AD91101D757B83E2090337D525AEECB028FB3C9F6A6E6AD2F322CFDC5A833E6
-1CE4EDBF41FD34FD61630581D222F854A76C2EA9FD72796A7C9CC1F6C2FCCD16
-E95CA05826A4ECFADA6A5FB83C41A7131E52BA6585DD6DD78515D8F7327DFC6F
-9404F896CD850A7B3B3D71D485F5459E5A1D5C5BA2A6C6AAA7BC81847D4828E5
-60F546433B6D2E24A2D86D453E4AB77B152506F8F1667924DE76E180B2364426
-1F7032EE5011E95527B4F4FEDCF3402747E80F63C78935097C11F672F0B25AF9
-8EFA8D6630EF519CDE68BC41C28EBE6DFD11485D178EEEF59E10BD23F147A2A3
-4BF925E0799FD8A6409984959B2247A900288B6C01F714A37E646D9A26FD7304
-5F11C7F76E1E6245C363387A6CE7C4D864FFC29216AA33D0B209EFAAAC8A589F
-AFF549A9F9EB94F6A5B5C0F1F805C9ADA61BF970E62F565C84048FCF6B521D02
-C07B6EA4DEA977B78F1FBECC0456EE6B5C7282E9B2A6542C54078437241F2323
-6A8D684806535D67759684FB48E7F9C2CF887CC6C156A56D3381FE06E0798FA2
-BA2042448CC78EEEC8D9A310170C105BD1B14D14E40CD609AE90A3AA656A3733
-E492BA2E6B41D8F99AB678AE3004A5F25F7737798A3992C05E05A1EB0DB6E18B
-5CBC533933132DA50E70A3FA76A55F0F7AAC65E1BD7B938BE4BB0435E54EAB2B
-C339E381392F2586ECE2EAF21EC7739F98C774B94D7BDEA395DA286749024FB7
-80790BA6408114D47FEB5AD960B0DA2BA595DBAA3AE039B77026B696E1E79D36
-8E3CF024B830AEF788342C37AA60E4CC83602470332FEBE0DBD17538C0697BEF
-9AC5C518FBD909B24D8B6FAEF366D02A6C806536B51013F867BB1507EFFA0C49
-A4F1391793C918A09F579C720CAF7F40467CFDE27F71A3DBA09167271226E942
-7D9B5FBB3FAF471B2ADD37A4DA1F96A4BF415020FF93AB38EEE0FC319FF61D0E
-C558FAFBB42D326C701E8F85353C629C03AC71A9C18B14FBD353E3C85B2EE79C
-F6507A829F61272C1749DE0A502A0D81342D24F58A057CB0734785B758504779
-537C6D592F7AA483198E7D2E2841AF263E79E5E9AB20A45B99170A9F2EDF450F
-C1F2E83C22E02014E1A04470145E9D857295B0854A55AEC3D3C296D5BA5E66D6
-C07ECA217D95693D68042A9C17D51B98C144B4DB5B855BC12E3582615AE62A3D
-E2AD013682CFDD6D8DCDB2A9086BDFA58D0EA35B8F2B1CA04C61FC17996F6E89
-063F1A60DCDC03F391CE653610886ED15900F0EF5365AAF8F7929389838C6AA9
-02CF6DF8C4CB6DDA327883DAF58395CEB66453AD5C4E4B1FD14D1B6D9254B271
-0151343D14622E225B9C6F5B5A04A3FE39AC11D5EC0A0B7D32AFF978236BC9D6
-850027DA23A0A7F2C819AFC378171A0BA1F38187FEDC87485CAA529C10F5CA2F
-3F61A49997D481FC8CF011AECB4FA4A8DBFD4A3047245676BE0329090249BC28
-8D3CAF777B58
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMMI8
-%!PS-AdobeFont-1.1: CMMI8 1.100
-%%CreationDate: 1996 Jul 23 07:53:54
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 58 /period put
-dup 76 /L put
-dup 79 /O put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 101 /e put
-dup 102 /f put
-dup 105 /i put
-dup 108 /l put
-dup 110 /n put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-readonly def
-/FontBBox{-24 -250 1110 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
-5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC
-4391C9DF440285B8FC159D0E98D4258FC57892DDF753642CD526A96ACEDA4120
-788F22B1D09F149794E66DD1AC2C2B3BC6FEC59D626F427CD5AE9C54C7F78F62
-C36F49B3C2E5E62AFB56DCEE87445A12A942C14AE618D1FE1B11A9CF9FAA1F32
-617B598CE5058715EF3051E228F72F651040AD99A741F247C68007E68C84E9D1
-D0BF99AA5D777D88A7D3CED2EA67F4AE61E8BC0495E7DA382E82DDB2B009DD63
-532C74E3BE5EC555A014BCBB6AB31B8286D7712E0E926F8696830672B8214E9B
-5D0740C16ADF0AFD47C4938F373575C6CA91E46D88DE24E682DEC44B57EA8AF8
-4E57D45646073250D82C4B50CBBB0B369932618301F3D4186277103B53B3C9E6
-DB42D6B30115F67B9D078220D5752644930643BDF9FACF684EBE13E39B65055E
-B1BD054C324962025EC79E1D155936FE32D9F2224353F2A46C3558EF216F6BB2
-A304BAF752BEEC36C4440B556AEFECF454BA7CBBA7537BCB10EBC21047333A89
-8936419D857CD9F59EBA20B0A3D9BA4A0D3395336B4CDA4BA6451B6E4D1370FA
-D9BDABB7F271BC1C6C48D9DF1E5A6FAE788F5609DE3C48D47A67097C547D9817
-AD3A7CCE2B771843D69F860DA4059A71494281C0AD8D4BAB3F67BB6739723C04
-AE05F9E35B2B2CB9C7874C114F57A185C8563C0DCCA93F8096384D71A2994748
-A3C7C8B8AF54961A8838AD279441D9A5EB6C1FE26C98BD025F353124DA68A827
-AE2AF8D25CA48031C242AA433EEEBB8ABA4B96821786C38BACB5F58C3D5DA011
-85B385124F41AD03466151F55D8DDD97A9E3D47CDF844D7B199E2E53FEED0890
-1B156E50130621D5F9BB1519F270FF5B3F56A55B51AB602AF4CCCB9CAB1DEF9A
-0A8039CCEFBD933FE2FD035B9F0C7E2C4E8FDD18D5A0EDB72A7A181A90C87B68
-BEEAEDB6B041D8B3825220522A5D732025A3C9A0ABF97B8E43D19770B89DFAE0
-6E0B9672C5343287C0CE34C0EEC861A0ADFB0CA6F981074DBDE03FF04497775D
-EFA85F1C5296FA028878BA0654325D9A49E63FE1213D15BC94931376628D3F4D
-13D498AFE975ABAAE6CE5238D6D1B7B3C512285FCB55DD32B0D2BD26F01005A3
-E250F857FBB82E6EA870746E82C150977F6D65834A676FB35B5A0C1B22669268
-15BE1BE02BDDF1755970184563F025842B60584A82EE68B28FEC42EC38ADE1FB
-A7D9846F9473F5B90A72A94CC37C34A6F8165188486270BDE4F77FB9C8D01E22
-44220F591515B4D1DDB2E580FF4A9DBC1551F2455E732433E4924E7832E961E1
-57EE9DE24438DBFFB02AC702B2AC1B5E21A9EB382B4215B3FFF438E133F1FAB4
-952E14834907E3891FD9ACC8BCB8D73182A0D9F833C52CCAA23D8F4CE0D53BFB
-3DF5DD2974F4202381DA84D7F4E60C0BB78D4A492F895A1009217B44D4818D19
-C8486FB1DBCE4EF9E22F86455AA1114974F33FBC805C349DF0543A23138BE750
-864E401F2F4B8A80273325E63456785824CBFFE96030ED13E5DF1BA39A14938C
-52C3C4F13A6601B29E69BB7A5433D5896F72C96FD7E8747F3335D60C20A6192C
-EED9FDF074D67FC602163DD30B24B0EAD4BE34F5B85ADC44DAF646A78FFB8B4A
-5411A3A7BA863127C03D731A3A993F6B3CCE260A43D07A51E436A5C34714E98C
-FB8759DF7A99F37929EE75134C309D057548D1E23D509C512FBF783DE0939C81
-11CBA018B1AF51CC8ECA958F8F8C08385FB259268E1833784BB2796EA77E321D
-31BEB0D65E5EACE1C79D40CEED3A73EEFB73E44D6C634124FA70C317948B87DB
-D8BF5FA6A300A967A8F440136700779E96AF75D6CDBD6E71A90D0B429A3BD20B
-9BCDC33BEAB7F7CE3D06EB1DFC56B8E817FFE644405D0E2EA5676EEC4CB4F962
-632CCD89545375F4E1EE85DA0B4AE1C54757708AC060B68F1980395351AFE413
-1E0A8C155E2D4609238DCED812CAAC20C7AEDF09B136C647DD677733F29F1E13
-C0E362D5E1D07E3F7EFB55490E67696C511CEA05C9C9E1040B0472E4B0A2A7C0
-4EBE71AF9F60FD39AA2034B7F7B0F75C06F59BC0CBF6E239C1AEF505A0A67E29
-A47F5B74ECC9E6E52D9E988EB41B9289364232AFEE31F71F85DD9691ED98B3BF
-AD066C4DE2572347712E09CFBF6A4BC13850B72134D3A03EF23D7658FA25E748
-6EF85C4F458CC8C8EC4D72B9829E1622CED93E125CF521F78D330B4C32066309
-FB9EE455364F4F22583D33FE288774FEFDEFEDAD58011AAFFC3F5F34140C1A53
-62C451127DB52FCA37A6EFBCC2402CF37C7816FD61ED4AD0F04EAA5C3BED6415
-2FC7BC9F5FF00AF26072912D8017A120B0CBD4CC38D34CBC1B01C96AD5584FA4
-9D021F0A12CA1FF0CEE32749AA57322DC4F900E7D1A64C0F14E8BAFC581AB654
-7F06764257AE3DEECB03897F756CD1AFF8CC2B8CF5DEDB84DE27FE65D647D203
-62684B6142B6D75A484E97DB661BECE0E09908573B3CCF706DD80082B87AA58E
-4BBB7F73F9BAB600C0D21F9473A4FB6A1DC61A701F183EB0821ABE76FC002BC2
-A8DF5A75200BE6426F50244E74401015AAACF80ACC9E61355CE6A37955350F3E
-EC1DD6E694E547672AC3F4C2E80AEC5971AF9922BF9EE9B0A0A8DF051236F70C
-73B5000528E555FF80F8824AA73F5523EF414793A1080485DF0905E131D8EEE9
-DA2791AB32AF692294246198ABFF9B7AE7BB57F073CB74F5B6B999F6E1A1592A
-F805CC0F87C988DFCFF7DF498FF6BB361A4A982BABACA25DEFBFA8371B54C183
-A0B9F374EFCD7C2E1BFD41830AF81AD91B15BF7CF57BF802AB1F774DC60B2779
-2449CB7FCAAE00485CECB1C61377EF970BBE0FCDBC93B9E600E42722C265EC9A
-54828FBE5F1EA9EBB42017DF66579AD5F64EC75AA9DFA190ECC9AD929241EBB8
-489EC89EC24757BBBC8FA446DD4B51D4C6ADB4857B0B2437348CCA65CB47CA94
-5C26C15E8939593B1530C37A97826373146DAC8D32875731AFF91FA6619BFC20
-043BF9E9314A6DBA5635F2C05E92FA7CE2C1BAA491A719677E3BA2713F756C36
-F9EBAE900749DB09BA993899823AC3102E9163B96A64416639EA9884759F83D3
-D22D0F64C947861873119C2FBBFF08090A877C5C47B27989EA08487ED73855C8
-90D2EA92B9011BA0E843499316F842CDA7D4ECEB0D1B81B37FA156C4E8F6EE39
-EDB83DCF81B06AA793EECDD2C8801F765BD560CCDD4F9EC2DCCE2FAF0CA2C3AA
-299E765058C6C4BB141B64AC4E158C55A749A9E3C8AB771B6FB44C22F3A9A83C
-48A7050514F1D2C15D42EC19954C5D68E91A22B7B62A4858E22FA22D599CC34C
-ACF7B65EFD2C1E64C090C382A18AA1D275A281D418644D1DCF95805FA1C955CD
-7C9151C1C0232EFA3690273D9AD60CA684FDDD6160894C35CB02A67241670CFE
-1B160FA1DE7BF0BF505202D0287AE5C238AB0F546F0D0B39D7EC8877C16C55AA
-484D949EE6D32888C7538F392FF5C538616853293B9548AC2183246FB243B858
-16B4187C05C2F643E6D5939D54680CE86E0896B8171555F73B60851772E8A50D
-C4FFC74058AFE1102CD69C49BC74BE5785CE0D894A1D7D5A983E6C2E024CFB13
-9D14C5742717170375C51F39416D104A4328DB5EC02D57C8E0AFB8E75B4CC935
-FE5456B73A46F4B006B72E4DCBA5A18F9B2FAE5E8AF54F713B57078E53349380
-8C4F3DA4632E01CA0ED79CE8FBA8106E5D0E8B9869D8DEE86314DF1C9D93C61D
-08F64A7B1B9808B214CF3B7AD23C07AEE94FBA86B95B64FDA62EFF64CE60D715
-715D6975D52594C876A11E6AAA93A50826A366D88C1013569F34732286C131B5
-BF03E4A1EFDF69F5650A6D6B49FE69B709CAB22AEE4FA1FE7DB4D6B0DBF24C1D
-89F3E0697A9B893550CD57FBB87CA933AD02BD2E7E7E232990755208670F6CEA
-8CC718F206C0C1FC6B83FEF75AEB04B08B60740517BA268366673662C9DFDBBE
-F69CBAB754C26E377BDE8F0BD2566264D2CE638E1F49F108D65D8BE857926D08
-4580719D64B5C19FA3F62E9A231EF6A78F5AC65E9486238018A179FA2DF2E472
-9348990402BEF7847F72C883F872269BA46DAD793A4CD4FECCB11198B5EC22BD
-68C81C4EF31D74D43709535E63536FEC23A58CE23924C49E335C65197A73B191
-D8378046BD327178AF86835C47C3D20C15F8521F07A37324FC83062E4258190B
-9B9E16C9736F346010755617B1338A44B3A95DC03D35A2389E5C502F9DF3F3A8
-4D15A67EC2C83D34C3196EA03C6CA5C727460F62FF071CD25A7CC9E1A2F8649B
-6E23FD3704938B7FA85662C39E751A481FF3F7AAF63FF57B7768B02BF2BDC52F
-A260AB5C9EC3D0F618A1FABCEC7678963EF168D3EA4B58D68F4D8489C9DC439B
-23D5504ED042B489DD905E67268AB37475FA87219758027D3C9AC133572B4917
-9E55D0420DF1B5C40442E6033BC3BB1D1B873EC81EBCC3F325B45793D5E167AD
-E6EBDF237EBC5C4602A4E19A76608BB2BEC6A6DFBD2CF3A78C221AB47B841295
-16B218A7DF4F2971D92F48A20AC60330065CEB69CB34702AF91AF9B0D50DE0DB
-91C36856ABBF6961D5740A0C585475C139BC23359255E6A08C5B565E88714BB7
-AC3DB3109C36753FE2D2E4801E859FF2B53E6CE9C523CB3A40EA019A4BDBC721
-C3ABDF17370DA8B61E3CC7E4B550F2D52F964A9AA3FEB4E117DED5B23DC70738
-227F013D89DC649B7FC167392A6763B05B4216B47B054606144ABA97FB2BA77C
-46EF77D5B7D4F5846CBBE247DEDE49C5177D851726E559B38A8362DE62E37A03
-F608F4
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMSY10
-%!PS-AdobeFont-1.1: CMSY10 1.0
-%%CreationDate: 1991 Aug 15 07:20:57
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /minus put
-dup 2 /multiply put
-dup 3 /asteriskmath put
-dup 6 /plusminus put
-dup 15 /bullet put
-dup 24 /similar put
-dup 94 /logicaland put
-dup 106 /bar put
-dup 110 /backslash put
-dup 112 /radical put
-dup 120 /section put
-readonly def
-/FontBBox{-29 -960 1116 775}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A
-27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF
-5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09
-0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730
-DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A
-71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09
-4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C
-515DB70A8D4F6146FE068DC1E5DE8BC57034F4D9A2152A6B38BAEF33DC201A05
-C8314401D1EF6AB12A61389ACC214E61AACCA6B38D58A0B9E1FB847902E51AFB
-CE62D86EE1D33F2FD53457E35DA66C98A14FE772D8C5FDAB8D1215A83F1A4F3C
-085A019B6D8F97B865603CBBB7E8FB7C04DAF888BCEC95A9AB6C3F03616075D4
-DD1978C92FE6D1ABC779157A2E034FDB9A988D9F4C72AD97F1552291BB31A013
-E8F577B52CF63A3190C5B6AB270E4C64222E8180D2F6CF23AC859D280C4D3DA4
-D63A700F84907F61AE44834946E07BB4D8665A72D14C29D2A1DB8C0C7B153C8F
-E2796460A695A3833A4703AB3BF5B456E51CC0902E64A263103F684343398DB6
-7297F4444B30D2C3BA5E8A551D0D1008C83E3DB18F37DCEA196293B34C04638D
-F7E368753D24814A01CB5B0AFB85C35A3509619CB99274A3DA0FD4AF33B54779
-D6ECB9AE98244B24CE6B8FFAF5CC6E187D10D3B6B0E93744DB6FC2C708D62C1E
-277BD48A6A9774DDC86845E59382BB66EBBBFB57B9AD203665C553F43CFD65D8
-F8AEA7217C3FCF0244C21E8BDD9A2ABBB46928871B22CF3F84A12B2B3DFC8E2B
-7180634ED8FBBA144C6272498DF43F8EBF2145988E282A14E4CB76CD0682DE51
-D0AE70167026B6AF59E845AE09F4A078911F58AC509F19302D2759B3881550F2
-1D734E855E688BB05FBC11D4DFD8F8DDD3FF6442CC5E910E0BFD8154201E581D
-9ADCDBAC445A8CCA1909791769A8A51B778B818CBF29A82E420B5C9132452116
-46DA2FE43D657B96338CA7E6C769D815E274497B0EE1361475429632141913D8
-3A190729ED04FF6DB9AB4867E3BF3883010EEA5959CC4DB6A46512C42CD80A98
-C78FEDA271CD20023DAA009C3F198F5FD25359C4ABAB41BE69859718F231580F
-34CAE1D763B2CB6099BD0E006E6E223D434CEE7BBD858CEDD7628CB07BD453B8
-02802B4665C4B03A07ADF391D5ABF4967AC98E74263AD3083DEEADF7EBEABF41
-8064804290B30E8659A550185A2DD33916F9934E63FBCA03F886DDAFA0DDDD61
-CB52E70ABCF9122D8F8DBD1C66EBCEA52FC8CA4CE6EA80083391A6F4E4382B47
-FAAC968BC8934AA98DB914F2E08D4D68153EACD41051156DC5DA54EFA274C75C
-B9EF47A1F6DB353B12E0A8BC1D613FE2BFF9FEC1E351985E86FBFF4208DB19BD
-97B35C7AEF2D7071BF0F5C439BBA99460C0F01BED66D343966176E3ACA1FC178
-D2A523D1FDF6B945EFA9ECC4BA230555E369F000B56723950723C23C01041C35
-6C03E83D5815733173299B8319483617A19D7239D180F6932722C0B75386BF62
-CB51EA37540FC47027AD5C6C859AEEAC2A857B839D3CFD3F17F1F4867C8AB147
-49ADDCE45ABF9453FA42FE1FC2669F453444F4664E14961FA444FD416C91B19F
-DEFDF175B4C773620DEF3285656BF418E19047E7C76D4AFCA4AF5D77D810861E
-3BC8B8B16AC120CE2138902518E20BA550523F0D25807C82583E1BEC256D496E
-125477D072BD3DAEB301A14D24FC0ACDBF35876176A06612AB3882729E9DEF01
-F97DA5D3A4FC8896E74A9491EC01EFE2B83D1D4CD1A67F975BAA5E7FA035DF54
-93382778BA58DF8158B2AF54CDABDF55B9D74297E59F96CCC17B1093B63FFD9C
-2C9DCF52390C2C0568E141478BCFA5565C252BA8AF54B1DB07245FD72138709D
-664271AEF32926C8DAA9A056257A784FD959CF51939F41A0287CE16B957A2A05
-4B228267AC11299DF8A824DD199E1C7E95C125AB194A0C813368D785F1388E73
-95FC71A6A78DA262DDFD0370D2AA9C02113CFADF4BED48F68AD34859C3F1AE93
-B026109F6A132909CF7077E48454E4E09FBE3F4541F54D4FF5A57A392856986C
-91E80E35B66589E2EACE7008BBFA6AF4ACBF2F4882D23F046B62714C6BEAEA2A
-E241069A6816CEC03BAE3D6C06A28AB7416044DE4CFC1B5B14885919D0A6072A
-B8BBB24665554BC9D334189E693968B64C8A2FFE965D38FE33E0BA2C3C45C8C3
-5CCA90F656E830F2B398E23015B7024E80AD2390242BDF4C9E89DA0C359D4CFC
-917042D78D164ECF2F1A83DEA09CBAFD96C371F9BBFD88F5047937C2516C71F2
-3738F84D56671E3270B2AC619938CCF5744BDB2CF0432A1048CE07C78477DD9E
-6D7F8C69E9F9A2B1C9636D4B3EE4F1C44B7F5EB1BCD62AAA0AFE99F8784D6FD7
-0EE86BC1DEA8270205CFD3D45D5D73807C8A60B61F0B14E7FE68207F10
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR10
-%!PS-AdobeFont-1.1: CMR10 1.00B
-%%CreationDate: 1992 Feb 19 19:54:52
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 13 /fl put
-dup 14 /ffi put
-dup 15 /ffl put
-dup 33 /exclam put
-dup 34 /quotedblright put
-dup 36 /dollar put
-dup 37 /percent put
-dup 38 /ampersand put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 42 /asterisk put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-dup 58 /colon put
-dup 59 /semicolon put
-dup 60 /exclamdown put
-dup 61 /equal put
-dup 62 /questiondown put
-dup 63 /question put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 89 /Y put
-dup 90 /Z put
-dup 91 /bracketleft put
-dup 92 /quotedblleft put
-dup 93 /bracketright put
-dup 96 /quoteleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 123 /endash put
-dup 124 /emdash put
-readonly def
-/FontBBox{-251 -250 1009 969}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
-87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
-D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0
-92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C
-295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75
-409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C
-4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF
-2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E
-0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E
-B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008
-24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B
-43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF
-D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575
-5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC
-96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3
-7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3BEFD8D9C400015B65
-0F2F536D035626B1FF0A69D732C7A1836D635C30C06BED4327737029E5BA5830
-B9E88A4024C3326AD2F34F47B54739B48825AD6699F7D117EA4C4AEC4440BF6D
-AA0099DEFD326235965C63647921828BF269ECC87A2B1C8CAD6C78B6E561B007
-97BE2BC7CA32B4534075F6491BE959D1F635463E71679E527F4F456F774B2AF8
-FEF3D8C63B2F8B99FE0F73BA44B3CF15A613471EA3C7A1CD783D3EB41F4ACEE5
-20759B6A4C4466E2D80EF7C7866BAD06E5DF0434D2C607FC82C9EBD4D8902EE4
-0A7617C3AEACCB7CCE00319D0677AA6DB7E0250B51908F966977BD8C8D07FDBD
-F4D058444E7D7D91788DEA997CBE0545902E67194B7BA3CD0BF454FCA60B9A20
-3E6BB526D2D21FBD6D78E21A936F2E123C0F6EF41AA2266CF51B513EBF49D4D9
-2C0C93820A37010A4C8990B3D2551EEBA36E8B8DC122B1432A6BA9A8A674CA2D
-5F3DE1AEC33589A13F6DBEAFAF69B753BC0DA94017AD3D1CE981FF38A306FE6B
-A6A35630A7D636C1FCDB936F6BF93040C2E147714DEA74B7E32E97D4A9A10944
-1F389DAD067D206763C22156CACF1B820A6F71A5AEEB76D95A7BC008F0470EFF
-D7D7BAE7545D44A16A51FBE1975162DB333B696716F8978E6E9589A86B824A07
-95F6BDDC7A0FB3D7EF795BFE39EA4885E6E3173C865CAAF8A0BCF4EC66FA0B06
-A3E04E071686DD0C578DEC9EDFD2ECF8457E0BBB5591AF24A8ED3316CF401C81
-EC70E8F0D3BF4A21529B5E42A049AF60AD5B7DCC6E9908902410779460D7BA86
-5C9C6AEED7A598A024222D4131D025ECA5B3321E2E99BB5B451D663E5E06000E
-FF852435FA696BC421FB7B71F4AC3F060A4244F4405709FAE714D6AA3919B086
-308294FACD400EB49591DDADD04F5B5EA452CFA1356624091215D04D9D086929
-626217F6F167FD5FE4811A15068E576E95B795A7D58C9F45283714284A4F707D
-03DB209B0E863AED1651B06C0C5C5724AE78785F5E53B44DB3512023D9C9F099
-4D01D2A9E965FEDD523240FF4F6ED5767302E55364365B74AAE4A47543F4EFA1
-ACEBCA28D7A70F2404FD9AF6FDFBF9279708EEFD35C4F05D8AB48F2C2EED59E9
-975FE2FC27B882ADE0D3602126EAA1A8567D6BBAC36945795936D156B21F0EBE
-B708B9822A394DB88A3FBABE04BA4D3157ADCC999ED02CDD4D4E57F282D4BCA2
-DE43FF19C7AB7D0A90BC193D8027233258E4F3DB5E8609A92942B5CF2AB05522
-D20EE59212B62B3FF3B60B1D278EC27B3C7B04D1730650FEAD382077FCAE9A89
-5D47D5DDFEF1A22A8E2B92C298ABB82F425AC7752EA3934942FA9A8D024B7E2D
-8328DF72FC99DEF01738890882836514F59489829FB6229A1410C45CAA89F704
-1AE31F8AFA55EB7151BFD6F26FD8DB0BC0356DDB161352C10C138B32278107FD
-5EC219A1C326C0A7733A8A25BDF8D0E2E7EAA26AD43451E013F2F6E53CC3A85C
-AB5CBB66B461289E965B5C4A91CCA1708141D3E0E674227CF6EFCB763871BFF4
-CED6FFBD468E5933E2F6E50D358367A274A10B539A55FAB259A706268BAEC7C2
-6D370D735FFDC9FB7EEE0F879C5AD1918E86DAACB863EB75D154E237004940FD
-777C2F5EE1D2A5A2BF663D135EAD37177406926CD6A707DD72DD3FFDF715BAD2
-1C54896D52CD09B9BE943CAA320B1C907A38C853EB5C1978BCF50B0C1D1FE5FB
-3CA1A507FC68012012BF2B32C3910E3D367BC8E3E7AA7F88A9D9EE87D8FB888D
-47ECF9AB2285BFE6BCE7174188380EA574CD7D94C7AF0FA9BC2BB71B71D8C969
-3151A55E08CA30D5EA41A5CC07C0FA424F64FACB2DF3175DD6763C5A2F431C51
-72E6F0F7EDE3AE90008B6B5F03445EAC9F5882BF044036C2DD237344E5951BE3
-406A36374EB73760BDB5B8BD8E40E34D583FF4941720B2D85BD866FF355ABCC6
-B79DCDCBC7C71C1D979914B878DEBE9F3F51EA090244B766964FE238F087D15C
-119AEC68F80C1D2A286E8FA222D6B8325B093D427DA39E53667604C549D35C3F
-DFEACCC08E8D95473B1A00F5DB8278A0A913EBC3DF5070BCBADAD036EB4805BB
-812525D190B20A652871C797235A7A4817071CADB863BDB8BF991F04D6B0BE85
-8F55098A6C2D40E1F5F9BD3C2277234238964802085B6EA70EE966407FD5A7E5
-CE9F45A7E6DCEB62B7EF8D2AD41B8C224FCB696CE2299B1400B5ECB3BDC15D40
-300AC4BE7C849B6620C8EE25CC25A6FE361D2B63CFACE30E63EED2A5D2F8477A
-D204C249F4B7A35357EB2300C4B1F02F31805F3ACE290FBB94EEF97B44D53B7F
-C203A2EFDCE2009888E5958181FA213F977D3860458B7664FDF8A8A8FCACE950
-D1DB562F52478E88D98CE5DE997E27EE90065B812100A5E33273E54B556B584F
-0625E4CB1B002C5F8CFB7091F22192C613F10E2F0863D67218B3F0E753BB2558
-60A7D0D8B0BAB0BE51F2C94E0A1117237B04C33A9098F71FB52852C0CAC93432
-EE19DD3729C897CC7D082E045DDFFF3CF40C8805970D7E6F14AA3279A30B0F9D
-1664EE599779E1D796FA6A7D64A24930262536951EB3EC0D7ADFAFB2803EAF74
-FDD286B223985E16D560D430C4A9BC9D1E37B39DB1591769665E3E32704F2323
-ADE2F2D938B9D2B4F2162001E9ECEABB845D5ABB15C00511E966A0F9986A8024
-D67ED8F1913AD1EC129433065F781091ABBD6A93A0C6E8DF007BA681AB70099F
-624C796739A3D96095775A375907B4595E19C6E3535342940B3273F4D6339DB2
-F619E06E0B52B69F90166CC1DE866AB70C4024D6FB066E754030266461C5A71B
-840C61F1F6F5473A4182924B883A48A62FF2856FE82E8CE025163ADB2616EB55
-1CBEC3CCAA6A8A75B91926A7E68C2A01FB71C27D7ABBF20FEB4B9D3499E060DD
-DFC5A72CD19E87A8C1671FD9DB53FB66407EB01774CB4B7EBC99E9459459BBC0
-FE69CC2D4255BD09E16BF5219E4E896668B809837E8FA4AE3D2DFC959625A6DF
-EE8087E8968499703FC58B250386F5C6CF9F2DED9B306871A3BDF6EB76DE1025
-CAD398D3C3A7470C6217A9B6DD82A68302F4DC5A72394FA8E875C64CDDF20EF2
-AB3C62453827302B77FA2B876B9011E93DB24109ECDFB08BCCC67F76C22462B9
-4AE3041019379D0EADE8654D2DB8823272B9CFB2202A3A67DC4BE5D54B974DE7
-7562A042152A7DC1E5A453511423B288CEE8EACFE41D10B29A96B5252C058E8F
-B0BD004387BE048350C6C20D8B159A9F6A167AF8B22E4AB57AAF303AF9FAC676
-E7BD6BD032FE0C284A8CE180CFE24E22570F2C1D724C593ECD4C8B0A035BD821
-EB8E262F5F8011279454348966910FB9889D6CB47EAC0844648CD5DE4A9F6AD1
-A6BCEC860DEB1DDCFBDCA01C855AF0E73307D95B4E4B0ECFAE68754FDD1A5A4B
-F5408024CEE2FC6D85B38379498665D4B54043DE9D7B3B704669E766CB30FE6B
-6A3EA29F49647428ABDEA2C263EEACDDD333364533EE4D4BAF93E2B1A7841419
-B2B25DC22D5D0C62E1560347869270AFE440172B2BB963586CB61E969132D881
-1E39A33D5DAC923DEE8E85CDB33E227691A543398A25A3383D4BBB5E7D5365BC
-6B66FFD54819D9A064EF59020001D387E7035245CD0A9DA4681257A05238510A
-F224E2ABE340B1917931E2C4F1224DC694FC869F57425DC219D36046C500CEF0
-E5789E3E99C1F4F644300A1220D2A79865984BA7E636F02AD6B78BE64522BC90
-9D440158455096F784047E10ED44983B5B9D87CEE25522EC371B689F3E021B88
-20EA0E623FE4C91921D4BE6E14A138E733685D7D29E32992633C7221D3601C49
-8CAB875C554E969123882371A917DDF87813E4AE5221B2BA267895BBCE390CD1
-C2F16AC6092DED9CFB567D599036679BE1A6D104ACB7B80F8BE93E126FABB474
-9EE686FDED800D5595D679A3401E218BF3B84CD220CA0511DB3F66D7B5473FEA
-84C3F144608774780D3188CBDA1B1EC60184166441D727666DCEC83F24B1FA28
-1CC2C5D6C8C1ABEF666C6AF22BCD09AD37E69B147EAAC4F4A4321B4AC7FF5FEE
-DF286DFDDE34C7A45B5E0A6415D71B42A23F1E5A4C387F348F28CEFE59BA5D20
-BDF31B70F8431927EFD9048C00D36F23DDCFD84511F7A29B1009D3EE128C71F2
-38FED266DDCE9F1118C2B3E183376ECC1FFB884F0D83FB4D4D8DF734FD90859A
-A9A8DD1C0B56E14CF5E1E6E52B0FD1163A072E3EF47F87514043E4AA5912FB98
-21AE97568A3B363C70B67B6A28108D9AB3EF7B8C04C0C6B68E36166605B56636
-5165421C3162C595EBD857D407195205E7BD43DCCFDDB06AA4EC48F0F4F89839
-56E6AF97D6F7CFA9E35D71D30E44E6F83E9586BC51B85DD383F0720485433B1D
-7EDBF1506023C35AFA6FF14326B5CA6B858910E8FE8E1F88894A4C40F7D4011A
-A40E6157C68A71BA8665D5C345D6F1CC9759FEFCEE7F2B0AD72155339A39715A
-D5FD556C02C721C8011A1D9F2C7B43BAE0EF48D0617EAE4ADD901535985E87FC
-AADB22A11B7BA545796EE2C03AD7F6386EF2CA01BD32C9C23B6445484DE87A63
-46FFB9C7DB9FFDC4B295C924BF3A7A461695735A6E53BBBE8F261FC493A35C92
-183BFA79C39F8B6599934B0B000BE40E42A642D1C9197EF378EA199950C793B9
-7D4D4D2D95D295706268069B8AC3E214B1884D973DA7E3DE77FDE870071B9178
-9F45A79844A7C26FD4749402BAE986E0C29BDBFC5E392F8BF09EE13F3E9D211F
-F35CF5914B16B70079CC5B0C718152CCE2C6552591B66D5E22B4329E08247386
-95E6A4F30DC7E54247F7E69D6A402FBBD7ADB85C3DD65A489F1D00B3B3A6AE4D
-439261CCCF85B85FC9F5276BFB288A8314E51E8664CB5914DA4D24928C45BC54
-B60B2A6EA7E5F7C05669B0B5538B4B356BEBB60124CF64476AD5C4102EE16AD8
-D06682DFB2C8ADBC6D8B7A1A82E9F366D711B2424A450217DDBEC64B8BCA7222
-9459359E165E42BB4B1745CE01DCD011156DF98678F8AB2E4822D0EF1A540149
-B984E97ECEB831F1495C97B4FF65E66DC15F591A70C5FF3F8C5F2BCD4231D2CD
-3A1D944849A9BD0710F5E13189F1E5F1E0BC94C99A0AFE09B8A9BDA6DED9863C
-E52947195BDA1E631C16F135558E4C446015F5410A2997E5AA0730C0B8A64487
-1B7497CB014D51C82F066EB7AB47AD360C26B5FA080C467A6DF7391E176946FC
-228CB794B431923FFA2EC214CF7F578DD1A7A8C9C40B38D20919DD7CB02CEE44
-17DE17133B2BBF5B855F70B4E850BE893226DFD5F0A04D7F7C2EEBC35C796697
-8DC79636E04C8297F177760727E55C44545E19204DACB37A7C3A8EC7DBE1F798
-163A743BBA7C6B87912817A728F8F593C82DF49CF3305290C8D74AF4AF4BEDC5
-25605822EA42FDAC7047BA1120D32107F189274A629D5BCF63D28851D94123A7
-CFDF7BD9DDC51F523CE0FD4B113EFDE8CB8B7822176F4ED431C47FEC3BF39B58
-DB015462B45EE063055DC1A34212526A1D2A04CCBA8DFAE9A440334316FDD47D
-25B6FF2CCBC69FB9F119F5214063A8E36ED59F3EC0F889EF2245A29823DFDF10
-82B2447FE12A9456F841B782BF6A2A31C257ACDA4FC57C85D807F0B0FA3D090F
-59D64BDB56C4760D9253A690437DDFF16619536E9CB512F0B7778F824617E263
-2B154BFF29D72FDD274E5833AB81AB89FCF9E02CE9E403454B6F381D26A50DA7
-176249746F258DDBDF90336B21D0AD0C7D5F79D6DF256621E9C2CBBF7585B266
-3D0CE331B8175E9C6240D850A11B0BA0732A331CBE581DF02074A28303F648FA
-A9E549130B79503A433CD128B961A0F65FB4424860DFEBA4610B21BE418843CF
-C3A3571E8BF031D04301350A63546DC8FC5AFC0B91B14074F8F13183ABC0F7D9
-18A5FA6C69FDF3DBD843E6E8770B7D4D426938901DBA64537D5FBB7A99B44E76
-59F201A6AE8848BF459F3E37D4F41B495DDEDDED20E44D58815F5235782919F4
-DEFF1760A19B7EAE5D0416C52272B5E6A68E61CCAEB4112C08D6AEDAF80C158F
-F7F3602BF867D41C98A102940D8BDDF9683D8869D31FF86CABBEABACC9DF3E30
-4CA445291C3FF6E15CFC67F9F1E840D549FB47025B11EA27211BFE0392F5DED2
-C8A58BCAA99DE800148B160C2F05DD8A47BD25440C14D015202457F810A1420B
-798FA57D04A6B72B0A3B93F48C2EED262721ED3BE1AF9CDA8379D57515A38304
-A5331F353DB1C47BE82A264C2575E572ED00A7E0A5571A6B429D165D16C9F8B9
-C6AC7258E8E3BA5AF74CFA54A5DFD4C807C4111F7D8C9930226DEA13317607D2
-3F99F12FC5E9B2C85A13CD7B8AFCDC6DD6323DD6B2FCB462E2BF6A1A3A35FB08
-B59FD161A2FC7D925AB07DA792811FB23BC31DB40950AFEF5340F5681201F34F
-40252B3635E34F297E523649AACD48E9A2102AFDD5EB6E53C00D0520DD6311D3
-6292B5D6170B96CB7B9119D6156AF9DB7C1999F7865E6CBD0FFCC09D50F1D55E
-93AC2B7BA182CD223A53A0D431DC3A7CF3D9BD4E8C9EFF126275CC801E1A7490
-E0AE144E68364A72ED3C87367F5A93BE4E5E05FC2F5A1E37AB4C0E005574BDE1
-2F35B66FCF1C74FBA65836C2E726417E7D5CCCD2CA833F79EB1D7F2FFF3A4E07
-D054139DA553B24A508670446137080308E4D66FAAFC05285B7F18A76323AC3C
-93B843B7E442A42ECA4F1195BB81004ECC00A86F1A66C1419455DF96B5C18A7D
-E7CC0485B447F3641C240DBD7B6E29890A4CC7DB3E220F8F2FD51334B8799569
-125BB626B1B79AE14F11EFF50B8DBC8AA9046DB569EDB971E664154EA58E1DF9
-5961A86680A454DA8605E4604A83DE22D70870259E42A9A657874F7A36EBB93F
-524C271CE8307994D3EB3E09F2E9F139E4EDA7993C6FAC9D3E0ABF00F4F7AC14
-0406D7683F6084AAD3E0AD0C108EBCA94BDE4814CD025E92AB4A5E4A0D9B2A58
-262713C25212FD84C0D81AD012887B901738332622E09B03AE5304AB4D742E89
-D36D4CF255F53CDF9819AC4CF86B1DAD57681FE8491723651CFB54D3A7B4DBA6
-08746FD44272FF02A8F21ECE5DD433E380DB8125F4417188021036F1638CB6FA
-6D0A084B3A8482C21D47401154BE666EAB29052D669A853D2783BFC473C0789E
-E88381D399A773DE0449DE49FA847E5827D16F9BA6F63660F515328ECC3B438C
-A8BB639F045BD8537184F7A6A1072C101B3FD270811F0496F4A734A69B791F70
-5AC0E1B891EBAEA1FEA231B0A63A2738E74A4649DEF82A717E3C5B054D6CE868
-6ACA07DF4D4306921EDD1E8DE6E378E2F5F669E4BDBE3C58D44712BF76D16BB4
-E4C294CA329839F37839233B7C26FA6D34C259E741D805FE24CA60F53B6D0E10
-6E8065C4FCDDE9FAC42125CF8BEB5CA2A2E9F7DF8DCE38C314EE6FC50E532073
-61986E6D8AEA90F325561BB1080408F541E7034CB507B39230741179720EA9E7
-77BDB6F3A6A2AC629CB5E33EA55462BD33468B242AA1EBE01DDE66CB7B098DFC
-74C64598F12FC3E029C382AD73361F8262CAAAA3309402959E51D150D79D90D2
-21523F67CE1D3257725969F86D73EC7504D824001320918EA45D136BD0C06EB9
-2CDE3D6C4A28B4F69BA1631D5723FC3C6CE7221D0E1A6DAE5395C95C05D67325
-5520BE4B09909EEBCF8049D3C2236A7D9C55EFADF775FEE65D974794CCD7EA60
-E5265EF9A9629FF0F9C414B4441A614B15018CCCC1EBCE5A7D47C14681D78FFB
-FE2A40EF5B090A793AB09F0188B0F8E196C46C68D0111671612E4FC423668E31
-D75231A7C570D6CA6A7AB859978AA1DD206290E4D7650664077151F78FEE3B65
-F28D761C0501A811DF4E86C0ACD7670773688417F167A83A63E3DB9A493871EE
-C44BE19C0501F1A79596BA2CA1CB3224B478F5C03D7484DDAE9DE05C7FE6F085
-3296A235A5DCC97FE907016797CB4B8B59AA50E94EFAEDF43F2B48EB67648BDE
-37BB7382A2EE1D43E0CFBE632779701BF4FD4A072DD4FA8ADFF523705495FD4E
-4599C0602B97FDDAF610AB4ECEBD03D491D915E5A519C253CABFBAAFC8314FAB
-3AB59C80F5770F21717CB2AAD2C4568F62C7D391FB7218CC755CE494380ACA8F
-A2BD1E7150200EB9AE20C0FD1DB8F519A1F2C30D3A8D97B4EC6D30C83A127F35
-C3086603D75FC69E3F0149409D9329FA98471F2E904B7BE1F8402917CCD549E2
-3747A46341D6EF09935E2B9B92F9B92593F5B1A6573BDAC71D89B2E78750B142
-0976D0081689FE99830AE09E9584D407BB748030E33327702A5E4576396460FC
-6FE1D88D1DA9BD79EAD9BF3F3DE9BE3DCB6DD729E7A2BF90DE614A184847B494
-565EBBDB3022FD2FBB08004DEC355F32381F573588FA7DAA1D25D125E5E77F6D
-43DB95D150A3C4A26E36EAEFCBC9FF5E767E29D968E51AE7B86BE1D68F73FB28
-F4342DE9C788E56062FD0B3584EAB404447DBCF1FFA6E4C17D0BAC86ACF2F119
-B01CB95355DB97268519E5111A0B6D8E36C421439C603474965F0B19215745E7
-5220C074F4C51D472663769401AA8EE0B54FF7085E8AF8E177617D059DDDA2B6
-B1F0B37E1AE18C005337D3358185B3B8F2B74A6811B71CEF37328C8D63089AC5
-AE93CFD82B6A28AA57E69CCF7174D1AACDCC11BC6CE1EFD49333DE0BDFE29173
-D802A15C24F230A1258F02E3F1C026C9153F0B575B8EE9B06F40D1FB5C5BB8A6
-0D71FCF1F05C26971F650A2D3BA524D70EA611A1FE613D8B883DCF4B3803B188
-5136FCD635CB8B1453B24CB24A0C8E46EAF00099DFF9E9AA1A8CC442FE914BB3
-9AD671B186CDA7DD7EF4266A5A648EF0E4DAD721300961CB2E7381F857B54DE6
-E11E4BBA99AA1D18850CF0672BF24468156526012339C25C6AAAD1295254DFA7
-47F61A700E814D057BEB65AA6D18B43CF2E0844A8387FB93B000897E7311D55D
-BE9293D7B31256B68545ECEFF76840BDBD4E35142A42026608160C6899FFD1D5
-88F7FC49F77DBF435C7738872C06CB97212183A39D5D67B3F524EA1C3242B459
-EE7B175DD9BD5972249307F27757E2A9980F90803B74ACF4F3B907930F0250FC
-7E3A528ADDE0C8F82E8BE2FA7C9CCFA00D4D30E688A131AC6D62F6EE3B5FA20D
-3DFB5F10A39F34728DAEC6B454D69B7B6D6A60D075580CC6C3D046CBE098FBA2
-695DEDA9B5D297EE34543668BF35EF3866CB9183B00C531C0630E2F2673F1806
-BB4C2358CE221325B074A192DBAE357511650A565433789AF3226004D91E3F25
-4A2C42014069AD0D58B1451EFA5994687C26CF975A5B67CA079BE18F6B05096B
-7D6160BCECDD8E74C237E53DE77D702079C3FF031AD9FE88A948832311BC74F6
-67DA1B65A8A107667B15655D2361F9985E5EC1014EC95CE15F8B24CAE2D2B5DE
-72086CA75EBEFB374C2B7A673DDC128BC179254E9F3CEF1F77199C134402C0EC
-670A510C83566D9C9104488FBF56DCE4BDE25357CFCC3FAE2700844DDD42A928
-E607BAC3AC56F4D607897965947CA3250115546E59770E2D9BFA5E163BCA143F
-7122EEADC5E8DFCC6E2D2DB9E5A640C0414F49A147A469FB011BEFCC2B4294EC
-2E8491C5321F16FBC3C88BFE2005C7A95EBA8EED6103637065C63195A52EB679
-8D106E6A3ACDD0620A54C9F9B1CE3CF76EDA503C1EC64E26D2D0431F7CC17746
-743028B1F0C0CC8AFF6F89885783F9A3F0C192A555494069D23FF0CD910EE91B
-8C99F3575FDBB4129E7DA441D50B939BC396BE10767DAFA062CDA8D8A0EAE275
-0D41609B4CDB4E2FC5035EDCB847B671C6DDD07EB14C9C4D1A9F70EE09A22138
-33D39677A5E8B0A85C11C3BCE0FF707495F7CAFB2E773016FFEF03104377A529
-1A25D74D7D8573AB714431EBFF4FFA84062466A5BDD3973CDEF7D675981D4FF7
-B914889B997A03CB64F9B80E4881989B6D86DBD1D6405D72CE13100A802D8ED5
-CD5BF3210257FF538161C70D35D002C7E84FAF36384FFD6C1B882B673C78B691
-C8D263E92135374A9DF336200F008878533610709EB1CB413D5BF646673D5141
-6D6E59852BFD395B3043D3B91F3765961DEE1C48AFD9FE246F6F4EB19763C303
-2594E02C7F2666A8F396B96960D21CD46B75E9DDFB9A74B00ABCBAC2173D76A5
-7BFD860709B82DD07CEBD95440C90AE4BD999F56E4CC6C07692F95F58F358A96
-8D4694A04FE16A8DACFF0743C1875F3CBC0B64A3B85E07401906D740C06864E2
-20A69ADE0BD9282EA3B8A7447BB5DC5A718EFB229BEDB5B1E46C41DDE1AD5AD1
-7595BC33A1942020F594399645F450D8DCCFF6E74AC99CD04922B762F7BF5877
-050CEE87A64054FFD5C066193B18DAD221FB3300EF1A2019052CB62930A6C8E8
-DA103F126CD881F6C3686A01C20A0A64DA580BB3C1846E12D9A040973B087DAB
-343DE8DE1A519F9B1464ABE131DAA2C544DA34FF6CDC33D628F62668E851BCD4
-B6802CCFB8575DDAD5B98BC77E109F39CC8E0CE132D15BC4B8BC5F235BDB983F
-07A62A1EACDD5F943272B37E0E3B90B951D543F6275A1F79BA3118FC5ECDC0E4
-93091BE4CF8F1A13F5326AF096DA671C0E8BD9931631BF95690677AE506A5339
-AFC10502C2FC1D349B0D7015EC8C5FF0BD7FBF583FC92210B4ECAB6CA9D1ED1E
-B1F8313F67D707757BAE04F14983B88D55B27D9416DE24D59AFBD96F082BD4E8
-6A238ECC361783E79D3CAA12E03B4E0575A870B2AD4C0C9AC678A4878A532C03
-ED66CA0919BA19AD6185193A57D29200F2D60C320358DF9C779561F673CE94FB
-30BF804E1FAB52FE6B3B36621A5871058AB432187072C204ED630DFF588AF5A0
-190D6CBFAD7FFEC300D69553FC8C16415B4DDF6D997A73E111B27B54B576D2E0
-019CDE06FEED4293828FBCF9850136E5A7A3707635CD91D1E741811A1F3C2586
-87FEC52BA590B748A75A38D78482FFEE4CC6D556920EB94A96A1DAF029384DA1
-8EA8322D2E3247D05548A8AE74FA5DD42130B9AFB0354604BFF2852A2B21997B
-7BA7536C5A0BB9A6CD31C36145E186036613405F6BD7A4DFEB5E282E9072A50E
-6CFFCEF4DAF27D45A954084197AA9E33E4A4D4564722A524237E9BA18C7D7861
-7548074048E78BEEEFDE573490766116FE9A4ABCEBE168FA7B46186ACBB78541
-805EBF2A905CC697BCEA3E8D5FCD1F6F24A8C1DD040319760F48E02937893D53
-3BC6695AB5AD2D83A0719397650FFE37548BDF56BB79E1B5C89E820D82FDFB38
-E672A5BD180659309C430B26D432EE2194D580D75C153F7DB436CD6B6FC51A44
-A807416355190534C41E09B808CB53DD280CDFD64D19568E163373DB9150DA95
-6D28DF5EC39658DACF66093059DDC8E23681FFEFA705B56CA1665C66C693A016
-791FD4CFBD4F2F2CCC6D47980D4D348A4A960CE8E74AF3EF831525272B7768A9
-5B1DA74C4396A804D95555A2AE1B684DEA08795363692440E1B8770A62CD0BAD
-72B7E3DBB539BC6B036A445745EB8B269F54F20712B5F234F07AF70FB84A9B31
-8B830564452381C3155B268A9EB2996CC84A8D0C9290CD03553E54B4B02151E2
-54382494B2CDB7BE8A5C4286B4245D0546BDF0D397647FA7C71A15018847CF7E
-23F75E69A88A5B7565F359EBE689C07C47B5A50FCF5216219F067E858E48253B
-A9DA834F94950B1A5B5412B2C829C2E689D2C936EAC9F87A112303BAC082F9B9
-BC825C103C4F01DB005FD6D5B516F062B6CE7387331992C254980BB3E3335E9E
-D214CC6C77933CF5836C8669E9D24CDD9E5E4FC24A4EA46974DC184B262C6D41
-899B7536B71FA3D6C0203AC4AF8475BBC6DB1974870A79467F2851C0A06299A9
-C945EF0872382F429413679CE19F3884A7DF01692544D127A8F50FB74DFFF4FB
-676BFBF1FE4DB88E27406C0639E77C7D7B6CADE321636B10F87CDFDBE940CD78
-CA9EF58CDC8CB8AB946969554963ACC11FE7A028C245D4A210ADC9800B287EAE
-385FEA05BAD452559BA5516B7BE4BF14C02165204DB2DB770732FC00E75D2714
-0A28292288732177AAACA0CA5420E9613183E9D70C256C038FA83BC1E5AB57F8
-B4A1A814FF72DCAAE2E18E310FA2ADDAD57B4CF22B3E14421C7309C88E2D956D
-CA8FEE193B88372B59AF0FDB5CC97AD29CDD80D0247FA29BB3C5BEC1C44242BA
-A3F2F73CF01CDE620351E954DE496945E9E54E007F62E285D894596D59854724
-5545E7251C59182EB3DF455DBC3EEC88560CD1A75CBF0C2B2DBFA09192B26914
-75CBDAA5D5D709980ACFA795DF8C3790BF88DE1F6FCE263CDB4127E89E30D616
-E52F0791D4BE886E10099BC3F0ADD41FD636E40C863AE8A6F9283D5B7C27E7B0
-01F71F66E829476CB7440213DF68BEE5EADBB5D9DAAB4F0AEA3F025B5587FEC8
-A24D6B8F95E69CAD2B7226476750B74F013F1F0F5801128FA0D070DF2AE52C9B
-F8868B466125DC520DBA3A17CAC6C19836956CD6777A06FF4432E0D3A0EEF390
-CDAEDB2D807C67A43D893FB7BD18418A5A15CC476748FDC1DE5C6F4A8607314D
-A82612539E3EC6E15FB19F627E57DA83FB8058AEEC09E7B90E770B99D294B3D8
-E78D3774E6CD9B4E52DFBFFBC89AB73009163B34CC7850C2C9313D3955B29867
-8B1AB6ECAC1E3558964AD66F2EE1B0C41B26EA770298111F4BC19A795D841FFE
-86036CA074BFB85F80D0C5A586D4FB1238A8C60F93BAE298A5EAC26D55D38DA9
-92095801070CD6B5B0EEF6224CD2850AE725E42B672F54FD3C7B72449AA8107A
-1E5C9FC970933D74D2D6FD3FC03E2B56A8745B34CD50B6CD1E3559443271DA9B
-8548D5988296C476D0265120F5FE04FF15D05D1BB0D05DFC0161ABEA805CE619
-1E1A19C96BA1CFE126AF73E6401AC45D646CE1FF6EC73DF0852D4AF39636CCE4
-119F53A808BDB986EAFC8C8FBA94E2B6A73B8C6C2C518BA1E9626DAABF1075BA
-23AF7AD65C141635824C93052DA3ACFE7A4F78EE03D9705DDE497EE90A43A0B0
-5F3D8FB276C5EA974683F1C834EF0D08E371ADD62B15E6691F3BAAA17A3E7FE6
-077DEAC2686CD88C8E277D823F2B3ED4CE621B846C0A40968B5341D59320A10C
-8EABECD761FEA64809BFCAE24F28347AF5281C542637E22EB13FC4B462880202
-3F4CBBB97DCD885E582653A87691C5E3B07C99A2BA90EA830CD0434877C1298C
-706CF38C137B150A3D3BDD91FF67FE1EFFBC68915DE5EAECA6261AA5057738BD
-A15497D2D3B4B61B15B771215A629FE6A6223E39E19380819E43284F3E1D087D
-7CC6AEBB21FC0D3D329DE0FA37D1B3A3A0322A0B4926B3CFD7DFAD0EE18F973A
-91E08EBC9070475804F55E84634C30B0455CC5503A61246FEB234A833AC0C0EA
-E7DCA5A5ACE5B0EAEADC492807BE15781401D4FC3BA47E69B112808907BDF1F8
-D7E7FEFCCA01460429C3779305446E0B489643394196F0B74EFEFEF6EBD6CCA2
-787A82F89951C145BD3E84D0091DE3F2FF4B30DACF2A9B256CF2D17D51051227
-D2EEC4B81E29885973E8685E8F6D9DEFB03E58E77ECEE91E833D99BDB1292158
-D37A2202F805E3856A47CD89B3851AFD0C0230DA10DFF1A3D05AED5A093C56CB
-ACF6162C56F39C0171F8EAB7AFBF3476A9C26B5C25C1C2C329B3918F8AC39A25
-F0F873266BE95A35E98773525A70B9DDAD168A930703DE3E6DBBD851178D5908
-CC9A68B2966D12424EB01E04F1DD4F9720D984A1E7890989D126B4AB9AB72FBB
-D3D1A90E6DD97941C9D673976C9E3D63EE82D870B922E0A5282406BB2E4AEA6E
-348A88E24ECFD3F028574A0061C637BD6CE6CE53D161B760C437332DCEB939D7
-E7B820E4A35A462F9A48389111920C293DE0F129202F22C437778EE114A9913B
-5CF32F9DD78DA38783A240B39BAA0DEE1203EA69EC659DB8F6E772A710CDC28A
-9AFF9897CD3300045048C7B963A43A6ABA107EF492915B791181ABA49ED58EFB
-EF110116976DD0B0AB3FED5E685A2226ECA937B80DBFCB5DE0D5DAF85B77ECD5
-FA1714275C4A8BAC5A5A96979E85C5DF4950EEE8443F3A0A80803B661422A8C3
-8A74D380CCC0D3DA1D0E9DC31060751C7AD6C1748B33C1950C66EA7FD079499F
-FB290FBC6E17968CF20355D47ABC9211699101970493B7F315F2196413530AF5
-4DD48577F5E6B1D12A1B2E9F5DC804635A831EA65303FA9C2D0E1E31A7C1728F
-C546F15D734944F31BDCBF2313D9DCD40BD0C4DB3F69F686ACDA82DFC326F2AF
-8A08C0DFE1685B32EEBEB6C27FE6CDED95550A213F028A682DB03BC0985B1CF0
-40D144F8050D4FDE19BD00686FCE960E2500FA604023B02C0E315FD71D984E52
-CD16CEC7BC46388AA525F2CA06CC11C5321F6C563DFE38C947D8EFAEAC856DB1
-DBA53CFD1136BA8E408CEBEBB20D7C10EA2CFC9CB8EDEF4E34F411BDF74A7871
-37A4CB9D184C10C1798277EC9BBF272204ACA44673C5931F7BCC62DD693F22F2
-2318A90E11A3C29485C3BC88A995C9AD63259B327B613C91D05F2809099FFF99
-D8D596187B7C7DE7DCB5564578565340F9E3F5B3BBCE299D5FA3C66A4D08F5A3
-15C7862F452B43D6DFA9C4DAEEB2BDEB450A5556742928DDDA517A2AFDF0ED51
-8AB160FD0F8164E7E04DF89725860BC50B7DE75CD5B403724169A121F35CEF1D
-6DA72B2F0D908A56ED0AC64A05F927B24037BEC994D471DB81D6AAC668FCB9A9
-A56653914062F7D3FC78BE6B75880B543F66D2762876569913FD12768FFF146D
-3D24BBBC876DF6A53C75D70000C6F8B019CD762D6D2BC64EE7046D2BD1DBD891
-6399F5E7BD1B5CA301F05EA0C21F6BE7FAB614E82A74FCAAEA3D88FAD9AC3978
-CF58980E544F1430AE39BB1F1A8FAD760AAC08E077FD493FFC345B1CD0CD7559
-7C8AB30819492CD58821A743436B4907099EE5310560CED64BACCD834A969591
-329BDFD8D0A45BFCAA2FA61BF44A0ACCF02A88F7C1518EFE9F928A9BC986FB4A
-DDCF42339888846C0A958558E4A4D4930862995E0C457C44FDBA5AF54232EA09
-CCB32EF02DB3F25063B18D66E383ECBBF85A85EF111588746499DA03C9970D19
-51DA7140B40D36B912F74C56DCD1C78F66D59AC960E3F49F1ECDB9EB91998ACA
-240755AD792C3550D76875B2809A4C2F3E48FB05756EA4F3F667EA789318E4D7
-FAFF08731E38FFF69BFAEFEB46565DBA154719778EB6DCC9009167895CFAED3F
-2DA4A34253674F6E0869C657E06E84FA7CAB672148AC0B3211E1C2CF887CC6F1
-0A0E15FC84DD8D86E568B801FA921CB2D001BA12C560CDA46C0F0BCC7F5DF546
-3D4F5D20E44E185DADDE662E35E49169108062654454A40174B7C253689F7ABD
-7633A7CD423EEEA1A17F62C2EF2A44D2308AA4891A52785A6D4954ACB3E3BA3B
-254BC9114D465D8C85EBC2D288733DF4CEFD70EF64EB2E9A18AED697475EAAC4
-4A98A284AFDCF302A086BE220D465791BD0A7C200082FDD8CA24049815DD7476
-850C6D9DD70137BF5E639068D54DF998631798E11ADD52B4AF3A57E4BEC7408F
-DEAD4E652AB782B1B565473AD9693FEFD84A96AA95700254CE575E3A2BE6E360
-92C1C8D4BECC4F35A09D324F2CB2AA9ABBEB698672A9C024D1076DEC7E37B835
-5DA1936F0E70220FFC51173E563736002C715C886533B445FE7105DE8DB38655
-AD1C8CEC4A80EB75BEFC9A94281EE92478DF3B139FE0411CC169CB0C7FFDEFA7
-16E6609FC71D81D41320D79B45A74A4F209356EBD8B9414816D588107CCD5EAE
-F3766056AF8460426DED6AF02CE100550B2EF2EB26C8BD0E200399B921118EB7
-621526D87926638BA9D807EAC971279C873F4858F1923DAB733F03331887D5F9
-7F0A36FD5400989A589FDC5930B2D15FDEEF68188BCD9417DC2B342DE2919CEC
-2FBAD986F778FA02A83165A31DA9A57E3AD10441E66CDFD0C8263092CB9E649A
-9CC820CC956B81087F7243327D95C2865E5DB05DCF0F94C201E4881823DA13C0
-72C31B97BD861E56EB013341DBD550F4E26FB46E68B2979F07067115577C1C13
-E31AC637BC1DC4BCF192A305F228D00EE0DFA8D51983174A99B2906F453FC77A
-F60BDAE2A0DBD9FA830A1D3EC14640270B91581C302F10863BFC0BB296145F98
-9FD475AC909C05EB7E1298B1EF1B5FEFCA6A10F7291A3407736B94DD38482BFC
-BC3B8AC56E70B3B254A0158C9A8E514EBCD5FD7C4CA088C44936F3548D56451B
-6A8E4347D346C5D9B1339ED7628FB3F89444438A6F80B031BB7626139FADADAC
-FBDCA83F8646F347D140667748A838EDC1A5A8FB2C7F08800F815F04183769F2
-C9A8614A640631A7C61A7DECFB6DE6AAE5162BC566444D0A7E7D1D942007E3EA
-1B158FC1685A7CA3088C34E2E9373452D6E219922A4209D84EF43BDF17C9F261
-5562E28E480C3E6976D2B8F6C346E135083D0C4783EA0AB2F06ACB9C831F90C1
-FBD4D5EC84CB1290E3BE9EA183EE572E68F6E2A914E2A4E5BA2229F29DF6F4C7
-88E776969191017973271452055536701EB8F401C2FB25949DB4473D8A523697
-0F88A5268FC4B1508B790DD61DEAD35A42CCEF8656C7DB92FD0E8BA8F79F7F10
-C8B38FD1CE9F485A094E119D090A4B9A970DA1FE5EFBD0BA6524F5874FA8888A
-FBF530AA22371983BEA0D77B054629AE3B1D1FF5D066CA27EED993B5D2FC4F57
-CF2864A413098141464B56DB6E51F24812B862A31E76CC92960451C36CC00B13
-9F5920D9B9F39CE7EDAD22CDE7A27D234EBF39D91FCFDB87555847CFAD4EE711
-B6DF66F45079F9670A6E5617A2668C234C3057CD3A939FBC128B2114B1FB7AA9
-B63D96F47B2E30221253DCA306EBF64999D666EADE0D3C69BAFFFF35DB41BFA9
-55B54E16C578B1FCF8B383D33D5AFEBC9E2806E12D07493DF78B9C7EFD5B892E
-C8DBBAB6F168A65A785A6A30C500E5A8843514C6A7C8280281DA64D38B960190
-ADFC738837D2BAEEEBAC87A61E459D248ABA66B53745F294DD38B7A505F455DD
-4E2025457233763BADD741A6AF5EC610004DADEE3041E09513598D070C481DAA
-D624237D14F43E861DA1EDF8B2034D610BEFD4C01963AD11FA454B3F4946A0F0
-42B65722FD8F047C1391DF886F27382024403AF6E0E8F5BC7F7E0FA0AD851EC5
-8B4D415F531B5413EA9F060C24EBDCA30444406532F775B0A983E0346CF76872
-5A8FA9A2060757B8791BD90835D9AA27706E1A7A2853ED76BC7CF1E1D7E46F81
-C1042A6C577E8F8ECC4CBB1200E8BA8D2DDA863C0FB287B9885094E17A00836B
-1B3B32CE070892CF4BF0D40D40AA39135AC8CC7CF784E7C306BB248083D8911A
-5A10A67712F1230975578CA03A218ABEC6C76992E339338985C51D624CDE420D
-71E86ED65B2F63D02CE09AA13379EB2B04E64C351EB35037782A4FFA2F5F0154
-CA727CE0A21B90DE53AEC9F87D8FE94470A09FA1313AB0982584449F23388363
-CE4A9DBF75D85A1D1F5EDAD209A8D718FCA14CC99BF55ADB9B165135A47BEE9C
-AAD89CE551B6B91BAF61C685AE30604D3BFD35202914D5B70181299EBD921719
-9E019BDCD82F23D4545481AA010C85B8907DFA2E16CD174A1A77E4B6A9DADFAA
-2EFD4EF91904BA0DC5056449C4BAC3F8CD7275DD7D0B972ED1C5FE49EA6CB007
-21392E91904455353C3665F3152548C4D56B3BB4FACE1AC042AA2099DCC382B3
-AAB4A69DF065017C33BFB2B01D96FCACE327528EEB16DABF2C07F4E938B97D2B
-343240B185316FF749E0F8578E4B89B0496DB399E914266521AE9AA633CB7C56
-FE9F4E1288C1A72CB47764F52D869C9AD9763F672DEB14C6BC8731586361A210
-5DA7CA7C7861EB18AD2ADF5BEF65E752834F806DECC29EEC1EE81A2AF2689146
-BBCEC2180C4C662C8AAAA42A84F483E5B999DD6DFFF5A9A7D501AFD0C993256E
-66988935EECADF7DEDB64377D71956A56861C2050AB7AA808F3206C19516C233
-2640FDF04F402D508AD7A6EA00944F0AAC0E3AD50538C817877E29EF5ACA02A7
-63017E53A286BC31DA51D37ED506940AFABB3BC603DD96D67A342D4517DCA0AB
-F56F65EBCA3B3F4AED09CE3B8A8106CCDD7855709D9BA233A333519F78BD73F3
-C4B98FF9F681D12239D0526A6592721CD7302217D3E0F88E8DDE741C7D887CB3
-F8683808CD4D7D594E4F5A18984CFC74CFF31684526CF7D73112EF8AB3BECF9D
-AE3DA2359EE026B9EA5A762AD3D836212AFCE09B5856AEC23ED8670902AF7C61
-EA98D24DBB2C2045C186C008E569CF06D805BD845AF3E4F870E62CD4E93FD9BA
-DEE4065B16130D777547EA07484BD2A0003B52506D55A71AC6FBB422E14FE0A6
-631E9C0C6F6D003236BD5880315BCBA0F5CD09A267CC5D804258A2034155CFDC
-22D22F952FFCD7C1DB06C532775B794EC0FF59F9314BFB6FA11DE4CB94925ED4
-43B772E01BDBA2B578C4A0D88309A9D6A03D60B5B891B40AEE8E02650A706992
-E81EF07F071E21E7B3BA93F8F65111AFD9D3ECBC2437E25A2037FFBE7C18E66C
-1D374AFB3C0E17937EEEB6E5AE26A52E8C4A11464BA2D688B5FC145996A1DF12
-92A391A4E46BB4BDE8C4564745B2689BF4C5F9E722C50A96B80A376F79C7B7DF
-41DEDBEA2EBD898292CD0622217BB62B038118945B564A1ED87FC14A8841E1C3
-72A335EE1CC6BC4EFE24A44F41E7B32C55A0E313E1BCFD69EBA90A9FF5B8C13D
-6C2C4047D40696E784614EB6CB1BB7FB3D67FE03754D3BE29CD591D01F02B0F8
-B9D811E639297A869FA3CDFDFD1B460148535E30B1B9164B2A2BEFD13036B9E5
-460C68837FD00309214ABBDA2F6B7EBE0069228F5A1CAAF41120237B91EFABD4
-E9C8EC82D76771D8D638FB3140B9FB3BD7040733ABC350C75A9C92ABC8345851
-C661846452D72FD47DCBC0C53E4BB50E6B792B3E462E7F3F43346E38CC2FB2AB
-E3C456D0CD0FFE59EBC284FEB82919F5372298DE9B51B9756F8160272715E91F
-7D7249E3B66449E53DC5285A682B755F51DE544E4932FE019A12BA2DE8E39531
-1B3C526C1502E194CC0671003BCB29C303D4DC033A28942466687C41792EBB29
-1EFFCB4990361E8CBB554DBD6FB14BBDD6DD98E97C10EE1A74D758AE802BD9E8
-9687B528DA0CFDC755FF9EA8F994C88C5E111D457B0DBC7654E4794FC399BB8E
-7B8A7DA51208C746CABF4E4388FCB637D24A6EF93B1707D77E3859085A9E3608
-A85C792884AD60D4416E2F644C11E2C922863AC370B076FD7C5483382A5C2D05
-72BB563BFB485FE41BB8479469A592AF7622082DACEF884768B33072EA301531
-3A54F2374DCC03FB2DFD198A47CEC2AF9C8DF9EE11BBC660B26821A5CDA3E6EE
-79F281F38B622B2E3D1779B7D87A86AC56D6E95D278489F383B53934F0F41BAB
-0225840E0B5691BB5A799654F5F0BC86C4ADA541DAAB343D1001B384470AAAC2
-1726FBE4FC5D7F16E0C73B24ABD88AEFA5F4D993740A44FAE3C2E97650414B91
-FA91E1B5FF940B12A07B51222705712D3031F6A3C52966D9BC1E9A91B8A5CCBE
-E26F06D964FFF18725A018BBFBC3FA205A55AD02A41B57DCD1A67F8AD3EC55F7
-019A2C8B13879858A57A3AB376816E5A84C125BA649F82A3298598E3CFEAE75E
-1F7F54D1DE8C415B62FA025C6C3291CFB87DA982D6E50549C12A9C1000A71761
-5975BFAE48535C4908E42C4608E25DD5C00CBFCB5C982A1A260E4CDBB9537F3A
-AC24871DCB91CF0EF748ED8E2BED39BD923618D03ECC0095A1711DAA720558F1
-2F44AAFC7AEC0242F9146AD375763E17A8ED2C72326608D8074799C67BBE062D
-DF82439F0167E3C1AA9207B642D72C3AF151260C5112EADFF1A43B37104520AD
-9199C6DC3BFEDC0641CC0F677757789FCCE08CCDACB9C7713070557551A53D81
-1BF6B50545CBFA1ACA5E1AACC651440EAC6C2F39CECB884D6506E0BF7BAA9768
-13AA548329431C5DF5E31CAB04CBA084DDDD98F21CBE87BFB0F7813F9E061416
-E666E264A94A76F514418F3B43458AD066263391C2C8D21DE06AEBC67EA91615
-304EA84AD69785408D83C5ABB9706B17D2EF42E00E4ACD07443F27B784FFCE81
-68D4F0F3DEE3EC94AA2FA303EC31FE357267B2098DFC1C6468641FBAAC436196
-8C409BE2EBB7B1C9FD3CD0E6438A6E94D245596FB9E4568CFA945AD3500F7D6E
-20B074B38CF5BCE69A503934C671C81803BBEA06D8F360D441084D6288F9C0AB
-8305293CB8F342F3C589AFE082D4CA2B605BB131A401429271B1C80672A1F37D
-196F4333D9086B8954C5B5F8A16AAF68C76AC5C0B9CE65CA1BA715F0B053BF02
-EEC79406E2C5143A9AD69CA6E358AC636CFF2DF700E15E83CA0C6EEB77C3E62C
-080706926BE171E07ABD4BC16E2EA0D9DFF580C90D478A6F9829860753D47B85
-6D08505132D659E524C7DD22C60EE3000D2479ABAAD132F0E4FC239350FC53C0
-9F4725EC06512093F7A2E6F15DBFBD4A29D773B9901D15DB0EE6EA73692F55A2
-10FCD66B25694E77285161FAB2282DFDECDB983D19448048C0D3C11F9BA88E46
-A938048A1C07572142D341D29E3EE6D9C84D89E33B9588DE28DD8EF02495DA6C
-50C6F709CB5BF02D98A603DF91DCB72CC97EDCC976C6037B8882E19303764ED7
-D4D9A3C890102638A8A81873858E29377F82D99DAC7067DFDEEA9A41EFD041A7
-9006681BD107D26534D5025CFBC3AE5EAD6ED7CD73202FD0C19795290CF76984
-CFE283FDB44E9C1D4792CBE073332E3EB3ABC36B443875BBC38CCC07E6927D34
-BB7FA1AC8BADDDE59B179D5B69C1C25F2032963E50CCD2712A0823ACF0FBD85D
-04E516E396A00A08EE1EF678AD8BBDCDC843A19A11DFB2A696520136839DDFDD
-E4E3CAF21914FB51E6D29FCCC0917C4DABB5F09FC722432CB6B5FF4A7915BE9A
-79DA41680211BAEA2424D4E3877C1AF7948DB6DC599A9B76F8AA97A08BDE3A51
-50F0DF9F0C93A26D04B6F8621EC6FC12CBBE55772CA9E8F4924778E35C7A90C4
-DD23EA49A1917E29A57312ACAB38432466281F6BE8F8AE166FA6FB296D28ABD5
-3472889B9BD60EC474876B3BC2050093FE68777362F21A2B996A4EBC86DDB90B
-FF01BD9D9572ED8C874CD9B5D847598E77E97578F2B194B22E7E7B58490AD6F5
-DE58903DC4F4CF2E030696794EBBFBF26FAA5E987BA89CF48A7885F70BFF2E3A
-764BC941BA2CDC13D11CB7CDA4D75BDAEFAFBA74776A091A8B5C0813F5B866ED
-1112648840F5649F28672CD3871F12DADC5A9EF64661A598F58D1AACA6B454A0
-A8124E5DB346A8CAF10FE9FDF27E8236BB8CEEEFDE41403653493A70AD0526B8
-E4B27D6F336A204773399DEA3AC3764F8018433F24B742B361412157C459656A
-3F02E6D2ABA47257C2FFCB2E995BE54EA462C6AF4BDCDACF20B99EF84E7B7893
-6A41219E3887862B3B1A665D8B569A64643B9D46E9206483BF750F233A28C328
-61A574D884DAE594FD821E3C5088C0D426571F37602B05A4DD325588CABC8E9D
-537348D510B36730FC02819EA9D16C095F79CCAC6557D612461E06C125436B04
-EAF3818692A5027F849944EAC60A0B876E4F887AD355E1F053D9B7F3A3721809
-1C9B890F9F76FECAF2D0213972F5E854760FF0EB984971A83E912401B7E8A74A
-1DB586E582846B79C0EA8B86F2264E8A855A345BCD69E68BF402DD75D7B09D06
-AD39E0C3AABDD237F65ADE2A3EAF85EAE56443CBE532C2D350DDE786E23D2523
-95FFD6DD5DC45F833F9FB9A9BBC689BC4E895AB203E74CEF2D79E6EA56A5575F
-ACC1778A021BEB2A5434E841049529D075B689D6C2E100C26D749DFB422E9A29
-39706B5E1CCB15FE881CA79EC7F4FBF8DC894852A01535F217EBA1E5B426E73B
-F216ABD01DFE485D01B75B1F184B94886CC6D3BAC121D354D2728BC04A572B40
-C871448E60D68F282F9CB843757AEA34FE295D77EBF4B6B2D06E6A0906C86827
-B784EB962364120E9E05A266B4802B4DFFA1F4A0D2B4CB1EEC19B40EA8DC7C1A
-EFC27FF75A9D85BC7D644AD32A840608842DB95938B5193BAAC5B11FD4DBA606
-18ACB6BCEEB65D81F5CE26CAAB9BF5099B206E3806E6E7DD2CE0DF830BB7EEDC
-2599C356AB180E21ED848F8B67A2C6C4CDA2DC3E1275F4ED395867EA1C8401F2
-100DC886CC4055213C45B885ABDD5AA73137BC640FC907F08162D3A74F94FE2F
-1EF83DE6BE326DC4857F702E4E34A173766DD04E4FDEA70612A25B0FA009F296
-AEFDAD0CBA0B954D466E784D82C7646B96A7D056E66D1A0A53A496D57C725E12
-355B5BCA2C362B021B4AE1D9033615F8E371022082A7222F2E3BAE0102440DC8
-BFE7ECEF23016F00D49F5D70B1D0F2D682C6D721DF3CE151E4DB12A6FBE7893F
-4835FC32C4FCA08243A3346E4DE790EF3E59863B600209A0C29E849D15516491
-0EF1B77DAD20380F716CE5A4ADBEE9E6876880C47E0F705F6106ADBC22CE7E2A
-2F2250245853563691AAADE6D6EB426B33172FCEF257EA17D6895818A915D4E9
-D37C9ABDC474582F343D14D89EBEDCCB411A8D78A97BA9961A1C12833048FEFA
-A34D7EEBEBFA510383ADEAD76F173852D457248C5570D96FEC7373161DE42FA6
-FE4285C9B5FDD1096B64009EFF8552DF1BF3530315D75AC47B91BA5D18C121A7
-B23FA326CF66CE881AED6CC39250EF04B8CBB6D9BE41C30C54804105D623F035
-963CB66BDBB934D96E8C88FF31B44DD5E1DEADCF558F297024D1083D76FCD4D1
-FEB4D6E37E6BBFE61BC57B6C53EDD5E3062F4ED3A3E2F7FDC3D5E7683405660F
-B185997053FBB39536386B41CA82429613125A6FB9D97C0921278801B7A1A024
-6EBF6CC952EA47AB3BFE21FF39A242B601A8EFFDE9BD013079E94F38EC522D95
-A028FA8EE869EC6F205CD56E803E8B71D3027C95EDE133D1824A67E33E4EE943
-FCE174267837732A1FCB4F4E047AA340CA16D656D58A3C8CF00E543B4A651D40
-D19953915CC1573F92CBB861E4D66D782DB20EC203BC2E6B21F4F92A7CBEBDD7
-8F43CB3E8B6EF199DFFF945B8A492F9E1C6FBCF4E98387AB610CAFFD700AE3CE
-AECE6F8646724B74170764C548BD365F7E94F8CEA7A237490A88979A63D554A5
-CE853BD5AD24173E05FE407FBAAE3C064B99964D8DFA6EDBFB1C7AD1DA79AB85
-FE3B5B3D71414BD5A1FD3CEC3B4124E47B8FC3BD78D28AF2DBBFBDBC5F3C7EBD
-F2CE62BDCFDEE3B25B688D76707E8DEBA532F9F8391C6974BF0D57B4B6025F58
-B32971047F3CFF9C15E7AFEC953DFDA82B57DED07FCD9A6040ABDF23C3ED23DF
-52D32CF9094FC0F739DF0D2EA11A09100FEDDB5D4C0B3924CE259C7179412839
-4484B01A870A08B07CC7C8B586F2097828122D1FB186ED16B267E1B050CB7E36
-6F0D0F2BE0CC1A124C626251F6A4C44824E768E2AAB65C1FC0A1E06679DE0526
-60A1DD8DC114F2BA3C8BF6FB77426BD7AC50C136970FCEF17A77CB14ED54EEED
-0597BA5FFF3929570DFACC87C27EC2A9DB720527093BFB90F7595918C4A72F3B
-3252E9129299080EF38D56A67FBA6B9F057A47140BF2FF882355D0E9CC029B62
-B18097ACAB41ACB815A0FFD7C48BDA41E5239DEA54B528A2261768D0C2A9B03D
-EDB6D92B68050A989D73C4BC029769E9A64BDE03BFCF13C714DD04320BC41AFF
-200D33D9FE1CB42623EF64D3780162C65889386C5EB5172D3E8A95B25CEA017C
-F711E12A66644E4B66F3A139544C54B4F9020E330D4FF3B92084C2CA7D147746
-DD71DB602A89467CA9E138856AC428B3635C910F96AE34F5A0B513F5EB0ACA2C
-D2F6F7686F45736C4C812A80BDE034923ED067D117238C1FCF92CA6715BF244B
-04D7692A05
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMMI7
-%!PS-AdobeFont-1.1: CMMI7 1.100
-%%CreationDate: 1996 Jul 23 07:53:53
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI7) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI7 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 76 /L put
-dup 79 /O put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 101 /e put
-dup 102 /f put
-dup 105 /i put
-dup 108 /l put
-dup 110 /n put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-readonly def
-/FontBBox{0 -250 1171 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D77639DF1232A4D6233A9CAF69B151DFD33F
-C0962EAC6E3EBFB8AD256A3C654EAAF9A50C51BC6FA90B61B60401C235AFAB7B
-B078D20B4B8A6D7F0300CF694E6956FF9C29C84FCC5C9E8890AA56B1BC60E868
-DA8488AC4435E6B5CE34EA88E904D5C978514D7E476BF8971D419363125D4811
-4D886EDDDCDDA8A6B0FDA5CF0603EA9FA5D4393BEBB26E1AB11C2D74FFA6FEE3
-FAFBC6F05B801C1C3276B11080F5023902B56593F3F6B1F37997038F36B9E3AB
-76C2E97E1F492D27A8E99F3E947A47166D0D0D063E4E6A9B535DC9F1BED129C5
-123775D5D68787A58C93009FD5DA55B19511B95168C83429BD2D878207C39770
-012318EA7AA39900C97B9D3859E3D0B04750B8390BF1F1BC29DC22BCAD50ECC6
-A3C633D0937A59E859E5185AF9F56704708D5F1C50F78F43DFAC43C4E7DC9413
-44CEFE43279AFD3C167C942889A352F2FF806C2FF8B3EB4908D50778AA58CFFC
-4D1B14597A06A994ED8414BBE8B26E74D49F6CF54176B7297CDA112A69518050
-01337CBA5478EB984CDD22020DAED9CA8311C33FBCC84177F5CE870E709FC608
-D28B3A7208EFF72988C136142CE79B4E9C7B3FE588E9824ABC6F04D141E589B3
-914A73A42801305439862414F893D5B6C327A7EE2730DEDE6A1597B09C258F05
-261BC634F64C9F8477CD51634BA648FC70F659C90DC042C0D6B68CD1DF36D615
-24F362B85A58D65A8E6DFD583EF9A79A428F2390A0B5398EEB78F4B5A89D9AD2
-A517E0361749554ABD6547072398FFDD863E40501C316F28FDDF8B550FF8D663
-9843D0BEA42289F85BD844891DB42EC7C51229D33EE7E83B1290404C799B8E8C
-889787CDC2B7473D4BEE78E00E265ADB7C0CEA8499FFD6216BF93D037C46264E
-AC4CB4008BBFAA66772352E4EFEB86DB16C78779B78B6475094B9E88EF8696A4
-1F68154AA757BA4B2557DADA0652E1F8872DC24DB43F18EECEAF6BD4CB7283AC
-689599B06C56B323D3A159E8020FFAA681FFA5129E9F5F8636BB23939E0ED812
-E8F614F259F766DDC177A0A446B6C1DA735E428424C7A4D7E506656391F620DE
-75F0119BC4DE2AE1C435A6C95E3CB596E05E514DC9A63DB2B9B7C3270CBFE791
-5AEE48E27C863442D4FE5F04C98E04328DA2B0B36E6DA2A89ABF04268C434274
-8F7A738E6BC6A22D5A4B164885CF227E19B0911221545ED8F265FD01C52EAFDB
-DDBB1C44FCB24D04CA40C618808F55A57CD46DC13CDF0F656AD848C1DD44EE1A
-48B98E0EE1E18F3543EB349A9D397D06130E06FC6FB929270DD59646E4E7943F
-A071BCBECFB18D7825792B29CF15891F7B2C66E8663F206BBFF21EE4F4D93185
-B1D93162375AEF337AEE684A06D6B8774B60D3294B0757E3687FBF25370B19FC
-06427436C2A17F3DED1600B83DD5088119BE41C2E1B3D34EE3DC8FC3B5F44F7E
-30F5BB801976DBC5E227AF39C6CE8F36D3E60780EBDAAC01FD6D564D9529E767
-14446290E248E8AF181BB0A32EE9783E619F9D924B9093B879E667E1AECFED2A
-5A6CCFDA2918F1962B4CC2E432B1252179A67CD25C51129F2213801C4362F2D2
-95E940E08A7AE4CEDCF9CBFDF08B5952310A750A2E0876BD9933881E305439DA
-E90BD9FC5AC7B3B7FDBB209891C418DD34CE2C5A2BA8BE7D41758F797B810C7A
-E8D05491FA2533AFB5C853E32DE0A4B29DD8756436358554AAB440256760BA53
-09706EDFE9A0EB27CE296FA1389345BFD52EB891308518D0859928DB814CE2B1
-26E483A6AFDD9E4D5556FF630FB65254575DF8E72DA0AACE0F384C2953FCDD2A
-F029095274FEE0532611A0C5FF0FFC941B58B785E2B722D3E41E3F78741E0109
-F72F32A6E2AA8CCA6C9A0C3979A3CCCB59D63EBE1090CBAC1A40D6F3251235EB
-7356D2E5D7E2ACA608C651C7A4FEFBD2868F52B3DFAE49D39BFF63139D160A85
-C39081657327C22C3A931613C0DD5524D5EECF42FAF9254CB40ED96DF9F96554
-6B3CD165D762C9CDF3FF7CD10ECAF587D12EA668B893D40AEE0F9621398C792D
-40FD0F00D8A2E983019FFBD3B53B692736635BE31E4E16D28D2447F28A73F602
-B96C0744CF60E9BD111E2FF7BC6E683732D05AD405A758410B9EE62F39975E89
-D5833515981AF9D75A37F91FBA72B289ED766AD95E1C7682FC8891709BD3A921
-AFF13477A1FB29DC97E7F229FD2D4572EC85EF947A581EA3BBED9D6538E04EC3
-BC67B4D25AEC5EC8651538FC4E9875788FB08709DD4CBEF57B4C647A0181439C
-21F881B00ECB6452BD46C28F1642E48F3454FBFC87B7F494FC0713ACDD086D95
-A645A13D4AF3720CEB1FF7E28EEF4932F1DCB0F2E1BA5F151E7BE009FE61615D
-95C03441EA772ACFBE326FF905F472FAEA6273A7F037569029F4F6BED81E8EF4
-4A36F0352723435769BC03999083349B5799560280032DC84ED868F1295CA342
-9058E86432E55F40268615C9E2EAF8D698E87F98FE9197E9B1C6A9E4EEB772EC
-C0A7CFB8F790C917FA90D1AF0C4E1F9ABE9DB2380F7AED8E78C1FBE82E76E8B6
-D6237AD859C708BD33A6656B32076B2F1CD2EABFAC4C75A6DA5C69BFEB955040
-63FC2D9548F24EE128B8548565FF74D64C5C6431DD3A693FBCF1BA1CD9FBB95F
-28C97F598055D1D68FDAF79D3EEBFBA12531177C6E18041B478314D8A387891A
-1EEE740345096934257993037FE2CF6574FE9B7E6E5716E9F72F69BE58198311
-7DCEF3B8B1C409523F9B3BFB0D8922DA07EC5DAB9BD03221F553D51A32FBAF1C
-D35CB8AE05E3A93E91323D4EB655953001644487D6F505B449615593508A9766
-31835141CA10ECB75E747B930AC5C0A01D5B932A4C0FA7416E7A0E443B7E60BC
-6FDA8145EED76AF299492A07E6B521F2C54989978C363904A4C48D490A6A2676
-4FD816FFDEC0EDFD4E8F770A953ECF6A111DC0CA0DCCBA7180C8098AAD99BDF1
-D8B2E5140D2808ED4B0588E33158856F2259CC898AFBD5472F49937A73720CA6
-BBEB1E04EE34531C71D5BD41E69A718F0DED1990EF9C3241B29FE9137A950E71
-9B4B8EA3831163FDFBB27C0240F7A10E7BCCBDCD3D6B23ECBEA07620069C3497
-BEB7C63386890FEE54EE60B93B49860B9E67B299365EB5970D6539A105EF1300
-06B77B94688E0E5BA2E5965BC896600F80847B52C80D93344D348C905A4DE156
-1B5091616EE02B5C8F02507DABD7D773602E63E531A9E3EB8A5229262D9C03C1
-8D76CC23BFA16E6931BB95216090891790965A05317BC09D432F10A565838FCA
-AC1C0C5103CBF39ED79AB1EAF2B02C9CD197B49E9643EAD0C865B075C84BF6E2
-F71E10AFFB9F05E56CBEF06A61FB682C7CE803C57A49BD3654AB4326D06BDC53
-2C352F973DA2D82D257A793992DF20D7649EA76961E89CDEF7B07F5B060FD247
-10CCD26CD6B39F0C6EE988557AB7B14F4306F3869AA35AD7C8DC4562AA96F7FE
-217904CC6399ED6C69DF4A6A3B1DF2174B65275315F0F3DC8772AA416F6BC671
-83F649634B7EA172BE5B3D4F39D738BF23B89C8C0C49AE40ECE799024044F696
-80AB7E8B7BA18179B4051399F81B0FE5185C4BE06698AA4AF103853CEA607160
-6B9D6F7D90B9DA42E9644D20DAE6978BA4EDA80F2D146A41F28AE8B08F603B27
-82C9791DBAFED163DBD7F6CCB11A4CBF053FC850C0E932ADCE6AE96AABC6ED33
-29DFDFA6460BBC74D929090376C98ED514BCA0A8BDDDEFB9EF1D1CA91E555E03
-18430E70AE9AC15C7A403420C1274AA80370762EE20DC2FA0FF1B4D07D47780A
-851D8507CF22E1E4EB45AD4F0A52E259265809F5E52DA74E4C8B2A091A142D1E
-A98875CEE6B59219536FFC757FF99D0A6BE8F4A8155C0869156532E390EDFE3C
-A4ECB006E180C7652869EC62457785CEBF03B1A069F97CED823599C15DC60C5F
-9A31F856BD53428DE3BA000C584C95F69E624C78107E2D7540CE0DD1F5588057
-B51843FB65202233DFBEC04DA1E50088BC93C74E9A63E0C5B2BD655C46946F75
-3F173B2233D371C48510A5454554FD4DCE581E24C717910148FC8B09AFE86266
-5F36B88EE1968F1B80934F36AB16BB2B14446DE04393B9C421B088F235EA2672
-95B91992050520CD4B87530C03631C0E784FC40BE9E612F59E8532BE174D9EA3
-42078AA750E32C2C6B81492DCDFDF765AF01826DD0F87B37233F98C716C50709
-6EC70A29A7A50228A5C2A32EBE46FF8D829A186E2FB7EED0B7EC556BE99A4CC5
-A89BBBB64833CD4537CE067AA55FE88D9ACB18FCD9DBDD8C675FC60CD7B7B6E0
-58436002FA04F7D36CFD33EF7484F43EEFD9C129753E38F7EB81E87CB8DCF5B0
-292D90197007A8D86BA9183F6C65BEAA191D1F18D7FF60BA34136CD07405FE75
-C914878505C7C6674C8194ACEE7366914E288157DAE849067722EB9887ABBE38
-B972A6A9912928B6BFACA746A686C9D0C0DC396BCDAF8EED8A8BEFEBFEEF13D5
-94D2EB97F091E27F8105DEC2AB7CD83F753EE1DB8BD2C735A4F7B1EF0B9EE8FD
-3516277C41F83501F17E8F7146768F06129A47C8ED086CAED746F99039BFFC96
-732C4786BCBB294A04001C758FACB42A8BEAD3FB773EE7F9CAB43617B609D65F
-2977E2940349E9199401FF9679B17E2614C1AB13EF7A1088F251E3DC50945881
-2203556EA28F6D300C5F7914F61F94D5BEC53706B9712A1F56DA76F257ED0DE9
-FC1C4D3CAA09A530AB51F339E188D24E009B0D07571A3215A3E994C1AF64103E
-983A771E41987DF9FAADFFDAC86E94EEEDD2D7D27134A1A5EBB0DBEE6282
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMMI10
-%!PS-AdobeFont-1.1: CMMI10 1.100
-%%CreationDate: 1996 Jul 23 07:53:57
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 22 /mu put
-dup 25 /pi put
-dup 58 /period put
-dup 59 /comma put
-dup 60 /less put
-dup 61 /slash put
-dup 62 /greater put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 78 /N put
-dup 79 /O put
-dup 83 /S put
-dup 86 /V put
-dup 102 /f put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 109 /m put
-dup 115 /s put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-readonly def
-/FontBBox{-32 -250 1048 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321
-990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E
-6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB
-DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721
-59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823
-D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF
-8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808
-6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9
-1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE
-03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909
-95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1
-74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2
-3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8
-47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19
-AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8
-42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8
-40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837
-B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53
-9560176676BD77D63B504843E6B9DB3EC18FCC62037E546FF3874549AABEDABC
-7C29E9200B309A37E5F90D7E629987616751F694BBDEBB9DDC5E1D1520FAD1AB
-6061A81FC25FCDE966D02085C3A53F84C246FBE8A58FA92886394F286FA58CED
-ED951A42DCE8BF447D61FE2F2FF6A4D1544543E3D6EBC020A26571EC0F04D6DC
-128C92BF1B54806E3F47D676D778940D71D25D5FBE66F42775D350FCB92E3E69
-C9AE83139BE00D5C85DE103E6E6AD38AEC32C8839AC3AFFB5EA29DB16661D893
-F489E5BEDA53FCE4252AD180FF42AC4F9091C8F454B3EB0AD8DD336A8296F4EF
-5D7F74D7A4A600AE4A43FECF40E57FA23B750214AA97C41202053493D48883E3
-670B0CD75CA74B4A36643C321AF87753D781FEB88B761CE87B1C8E36FAC7020F
-DA1A9ABDD370615B435BB5A3CC658F657DE25E83599A10ABAEBA0A9C6A7E8E99
-E20F2F16AEC10A06349705B3437EC0E9FA18ABA5763082DFB7C2EE4D13D56B24
-58ED6D93727F9A015F483B6E34DE2291E06AE67E4E700763FC9EFFB543D98DA4
-449F2314B1395F4479B977A0226455CD2210ECC972BA2D458AFA84A59127BBDB
-3882CD6E43210CC25E0B9DF80C0BC0811C2C1F232E79B33A44A955F8034814D8
-306E7204C4672D41BE3A3DA1099BAAFF3E1131580821E1A25C7E1D8D846CF37F
-0DEBB92482BB747B022E4CD9515FE413990A9E7A531E4FBD252D422A19C089CC
-543EA2C4E7AC6AF2B7CABE2E4A990850C0EF0BEF20E7A319C3E7ABFDA4F7DD69
-8183F34350A589BE48B20D2C93BDB7CBD3D174B6421A374BFE3C1D9529ABF99C
-DF892672C8D149F6A7D846989762812C669CF165B4BC219E782E3A717FF838AD
-19E15A7ABF0531B1C2AAE85E11C9261B8865766845CC6C2AAE190806FBA0A5D1
-0BDC9734DD842A4D2967E274BF8E46294331E4B9F3C1C5109DA6E84167EC9311
-CD1D7F035729214E9B0C8C2674B14E781F02646EE8858BE6897BC0EF37E95EF5
-641E71A2350007D85301FC811951821EDEE7AC62B228BA9EC6A71F2ABF9F7162
-4435A92685172C7F804B9492DBF6E541C4B582AA83902999F44AA7D12E4F0A2E
-E458BA2F4AD1E52901C4CAC25841C91510546CB2CCE5C7615AFA072981896657
-5EB6E6FC680DF3BAD9C3E115AEF48FAF1F9B8630F65ED6288714C81AD7E93045
-980C15BB7FF2D395EDF891179901CA7E35FE12CDA9E03F30CA527E8BF3BC2E3A
-9CDFA0ACD2BB2D6EAC1F271BC6C46724D59C9B95361077A23E5788BB47C98BDF
-2F6A0E803DE994C7D8ABCE1F0A90B5A041100B2E311903026E1186079ED84698
-C8370D1D53AE3CBBF6D419AE8138644349C3F9AE6ED7097766E0A01B3DCF3170
-44AD83B53C275ADFA86DB31474E6EDF918C01143286BC506D338A9E53DB6BBEB
-A2ECBF589A23968E493B3AED5475690AA6E76B093E24BBF2F7BF44C0B34D160F
-ABD237E27E9CCC922A9C332A460EAEDC3F536D10BC156323E2BB5C124BADAD07
-BE3C7BD414AEB7084BE22A4B61697C3475B1368970E63B4A2ACF2B8D13639EFD
-0FBB25F0E3E0698E45C04572CFDAE8247BD7AAB6CF0AA3DE2EE2900802B60ABE
-D384004E59CEC8F80EC8A27D4595A4FE311A1169F8191B7B47726D2868C5B409
-9FAA85C1749D0E51EF4832E3DAE72632E835396D6121BB78FB8A369EE9E49393
-DD2A76A5FA4EB8C193E0249B76995FD182439AF117A9F625CEDB749A71B6CE70
-BA428DCD1E8EBE20FD0B0608367B7C04E541C13A9171AE694EB655396AC0E39E
-1F8FFC45F178CE2E8EE5028B8BA6724927F8EEFCE517E42CD06BA66554E08083
-4A17DC0102781607668B2E8C3DB8A4F2279803C7BBCD60B8F589389C6B3B427C
-3CE8D655DDAC52CB0BEBAE00C776D5CD163B217E6FF27AEB2176919BA19FAEA5
-D49CA5AD218523C853375DE37DBB3608F05689600251369E7C02B9A626ED1D37
-87DBE2D65D38FA0AA6EDE4A7C66FF9BCD94B9FFFA414704D5C938675F1EBB1F6
-3F3E08B07E7C6D3B1A81BF920F02D8015D94B57DB694E61026D36BC3CB77B1A4
-77943FA55F1B832A9C72B07AF07B16262F696E2F5CD1FCB6D3866A2A6FCBAD34
-B3FBF40699E0352C66449BAF9D87DCA0F17F390A820285B4DA315F9436A8DD2F
-168A1A6757EB8B0C1628F1BAF805950DF41125D5074081B15410FDBDFA22E00E
-4825B1CC2D75E8ADC3ECDC89E23892EB0DE9D59231170BF3F9E45D175B203684
-F6FD58E0BAB317493FA9567EFF853085BE3EF14B66E95F582B01170CC4D6CFD0
-45090A6D96D98808FE3D388B4E1790C93BC88B8CB2A2CED40118CB2CA728DF3B
-85393866457EF436DD5548E35E0B5866E0403D8FF02E894A7A70A730CF245CB4
-AC7DB2B430C48DC56968BF2609A1CF08CC5CB2303D8B2D92A2BCC9278FBBCCBE
-54E6B76265C4E057566B658931AEC8B27C7E97C9FEE83012A644E5EA613F9AE7
-00CC8B7F4031F6FC83CBF8DFB27971032E56DF3B8E05D8B55C168A2099CDC4FF
-0A6906937376D1400E2A11B76B2E0C8127504EFF5D8812A2648695D72923E9D0
-BE231B8F6948F4FDD1D8C7D798073F44580C21EA66BCBB0D73AC156454D34907
-2D6C1830C2B97C0FBD8796545D7285C897442DD38E0E6EBED608DC787FAE717D
-23918786F642FA7534DAAD8D841D0DDDB048C4D9AA0007710D70F5376BE2C14A
-C7681A68E732B01C899614F3CBC2346566FB71F5F3D83B21C64CE02B4CC4AC9D
-C531E77C84F61722C493D7AAC08B4D0AF596C9381445CD34ED923483D687CA09
-001C76C4D2C5777F1EB1BFB6828F0BDE391C55ECB3393AE4E035EA9BA3E0015F
-5760BD49C1734F924160FEF926F171DF3F4413C2C2BCD47CA1134CF44B0EFBE1
-803A120820588DD5AFA577D126863843E49EF4BD6090651EBFAA29E4151F00F1
-DA63730AEBEFDEF5C574887F7DE4DA9EB571E9F1CDDCDC11890871064026D2D3
-F1B605A56C5ADCD8557993BD360E16D9C85EFE54438F232C023FCB84AED05215
-563D48BB23155C3EF1E6BDA95E46606ADA0162C19DEEF189645181F3BCB5A262
-EC91D182BCFAA6C11677A792A5B6C9DF910CA85FC6EB6EE08CC6D8632AC9EA70
-C67769456542E96635D83E65341AAE511D7025D9C9DF793E14540AB28E638E40
-BC4A8019EB7FF97B58211377C18E732B793819D55540A01D69344567C723B975
-9934F575977D1F288A8D645BCA5772615B56618C86D2ACAB57E8A32CD6BE9095
-7C0A9FE793028E9156E418B4619FF8D987580A79C37095F60F2E2F332CAD6D7D
-4AA75964FC7D060A0CB0E1E2D244233C176F3FA842B9B0D32B759B22C056CB6B
-940CEBE98E99A3F69D8BD0B8615AE0B27156456FC85F3C0B6E9BB4A72C469475
-A1AD2844B1F8FDECD621A9D7FD4E8E37D22DF2522B9BF389FC76B17CBD243C1D
-415ADD7D4A7A30FF556837574DB098CDA4DFAFC71625E03F20789A3C8A8B8882
-BB7AD3449D26A2D3CD08FDAEC6697EFB9C3381EE25494446DC7B0B5B9F129363
-CE0F3D0B817F9EDC2908A6D918F32330689F31785B701F0E5C98A0122FC581BD
-E71AA9D0940D4016A05C8662FDF1C65A4A22AD2AF4AFCBABAE5F8E0EE5F4640D
-1DC58133FE62D38D84C6F2DA83C10A32CAA0A2734B30227DE5E0E654E58CEA34
-F39A4E9433452559323B0D1EF7CBD9D524F48CC01554BE590EB283EB36E98DD6
-38004D516BD7C3C66AAEEB9D934834F618DA833D1E52CF2E8B1EB35C24BE9AE7
-58415CEE5FF8F25F897737D1EC5F9E20613FAEE5FF81780607F7B0B2E1424083
-6961EA7A8106AC710F2A021050DFE7022637B71895DD18AF1DC6ECB616D3CB82
-D1A1D297B68F5E55BA28EDEFB64620B95BE1221F192877DE691A19250A15FA5F
-07CC57D0F9CE9DB6042FF6F33BBB18E3318C3F0AE36E12EC57B0AB7FFA829AB9
-D1FFDC0FAA493A02A40624D40853920F349558A08FC832C83EAF8C04486F4908
-FE59359EAA8097118AFC9BEC2A8B4BB81C168172310A8F67A6AA9D297C45F3B0
-234544A739152D2B71B5E7E5A02625022D6B6F35014F07CE2F1879304D74891C
-CD3366967897749C3BC21D25CA5DDB6D25241980F453FE03B3CA2B26353F1341
-5B96207836015DE2403524E469A9FDB895F7EE37697E5075947027C3C55E914E
-4EF2B76EB8C0F7F4C43C2984E0E24CA103C64CCC93D2690E2DB4AE5078ADBC9A
-695F466082E09A2DC5B2E7F4B166490744C72DCA2617E7608C84328832BF7614
-DDDD369A04FF194BD3F1E44F68043EA5041C99D8559A908DD4243B5E7D3A2BE1
-DB5D560FEEA32E72E087FC688F04C84179EBE29353D65CC810FE2B2B47BF112E
-B2A63768FB38EDC4730398975FA1EAED7F51336F332A6D438C34B7CBF8346D8C
-FCC5392D1F7B1EB5B18632A9F92E6D92650559CF209C6266AEEFCAA1FC27265B
-9A32961A5AF55412F68318C1B082DD53AF70F77F8AD0AAF6ECD66BE4A60A59A2
-4FDBD7C0187A7E3568BA43D804FCE0B13D6CCBC26DE7D641085F47B53442124F
-76FCA95268291208FCA5E264C0D5E064D34831BD0184FD40D10F9ECF427AAB08
-F9DDD9249844C0921714687E5EE0A8B840E1D4F11783A70AC58CB32C0F55073B
-6C4025F515C08DEE9F066E73A805C1B31BD4B6C9CE63A23B34CF2391EDFD5B53
-3B524D7D5B9DEDFA2BFE15911AC09030E5E040A73F6EB4E28907E4924EE33E9D
-67B1282C226C1F3893E1B9A48F652E942B0073093B85524A1FAE3C0BD4357CEA
-48441B4FC4707DE9AC9F102EF340F949D4276CF8A2602310D90358D2FBDFA5A1
-E0AE476F3CEB84E6812231A2DA8B98283BD6E4D7BEB0A79ECC4666C3D25466A9
-6A0200083653C063AC8EA9E1DC92427BF04E19D107E002C4F03C1A4C6467C255
-CD8B8DF2E0A0D010BF7BE9D8A4F1BA862E5FFB7A4CB2CC2E065306341A02DE9A
-1F38478D47C38A07AEE89560670D44CC8C19DC25690145A4EE465B12604A8A96
-4CC01E2B5D8BE39B0AA5991B876A0619F6E3BB3F712293B5A7C785586DBB2204
-4C1A7763165AF3B057D61D10C391053ED6E0655C076C5E2B4F6F01A712C56AA0
-BF1E786DF7F8BE640C94EBA89DCB3B341C61C02DB5535EF2773BEB75D3D8753E
-D2F5893453AA90A829D4C3F3D66B0DC653F3587811E8B5F9E62E81D0C6DE4CA5
-38AA2BC800C838B7D0BDB0E679BBF5F6249F904485BF07B47BCA9B349ADDF151
-AD448E539A1EBBE6F9A7DC484F00EF663C1DD47B8EC13B53CF1604F594C0FDCF
-3739D23A0FEF264FE443D9D4EDDBA4BE0DC73A56B62AC633354F23CEEC0C7E76
-A4951DDDA23FD78563A6C3400E275BBC290C15C6B755679A86921E47CEBADB1A
-47C3DEC5644D0BA3CC6BFC1D204FFDF9D0573620DE5EE074833CE42D21A52147
-69B9262B85EF9D36FF0B37D3DDD67D79433BE3DC79CF95C6AAF3234837D86D9C
-B7CF7D18DB3899D57ED5736565B6E33496953C443000960655860625661E415A
-D09301BE581E6F2AF9EB34C045478CC3B703B8C6E31A60D8BF3698CF01C33641
-49517767897309D558F48E8284B5A954A3291155B752BFFBDF0F564152072378
-B4B7BDB965577C5BDD25C8CDB9CE4FD5A3B5D44A2765BDFEA71A1D506709CFBA
-A7066CFC5A1480E46D12CCCABE567214C83EE3E4F7FB010D594131E4ED9842C5
-06179CA41FD6637EB013AF1263EC14EDEC5EC9235501C54C2DC51F757CE1336F
-C5097BF6C5FF8AE522A9E4F94179F7426A846B37C50606454AF09C0ECB26A781
-EF074683986B10B9238CCC9B92973BF7105FCFAE3E5DE815F907395B0251D481
-D1BBAE5BFDD69470B77D078DEDFD90577FAA7CB18551E154B8489007C516C489
-B82D235086DC907121AE074202EE7EA12DC2F58ACFEDFDAFC024BD98DE725E10
-905BF7081EFFC29F697D495428AF568E303D813B1AAB432C1284DE7EFAE7C819
-62155860FB47412959690E95EDA37376891462D8FBC99533F032E654B88046C9
-31354A02F8E238A6470C451F2045132FB49FF35282BB1EF520D7BEEA0B37AA28
-146DE26218C80EB65CA25EF425A340DC5AE9066892EAA0969BB3986EE81EB7CC
-712814459F1A272C9F9F8801969D330135BA9FB83B167CEAB6EC1BC95F3546B3
-89AF2A2CFC8702866A9F78AD406C804401C327A0550F386F399BEF92C2B18DDF
-BAEDD788FEE1F4BC0BDF65743BD4EE56B0E91A7014C06CD1DEE074C0FC57BDC4
-41BE0F2CA1861F629F83BFDF53C5FCE7F6F13EB4E81A877ECEB34AEA48289ABF
-2DBC2C89624035B7335112D903D2AF5A0F9A78642C963B4A006165E44E4A8C65
-C94B90856ABF2658C6A6E7BE117A7380DC19B35DA4C4DC5FAFCA065CB10772FA
-97DC5D2BC9B02EB192855CF6346D2CBF56569B510A7CFC126BB3FD2B00D7ED86
-2C667F38E300894BD29E442A3E145F340A4E565422AEBA88CB10B571EC4F8D93
-CE7E56B0F12EFEECBDE78BAF8106894DCC9D00EA8A1E7243E7719278BAD83B4D
-D5B0A518BF385162CC3FC6DA8CFCEF4F3814A115EC0B9524FE587EF45EFE7916
-BAD6A1D40CFE8F0428DABD7DD4651B170CD8F9C6ADDE78A57B2835B39AA9412A
-0064F067D77D9E97BCCEE5A30FFDFC49591DE7DB034872A74F0D296AFDBCF69B
-0BDBCE3C8B502B665D8F786D265BD2A64AFA21364BD536920DD1644B0130D18E
-AB26CBE9D91C85BCA872FAF3DAA8749E9C5477E6BE78C6DE49F5E7E105385E1D
-7C2632D0F2DD0E9BE581947E27CBDA5716F38FB6AE65837E6AEE83959A5C63CB
-2D5B00E98189E14999F753C771AFECDCAA4A37882F9F724BE41EC797D13FF4E4
-A296888603851EA53FF59E5FC73EAC1D4E80B91AB149077527408B622EB5A55B
-042D6C7FF304158F56B85C02FC4697FB320AA0D721A7E0934557AADBBBB1A51E
-DA1297DB496716BFEF4D01DA8354BE929AF8644300B0202FEE0F7E609814E5EC
-ED8A68408949A9914AA90579B0DDA8CA648417983CCD59F9203A528091C0EDEC
-696FD08E4D84F336B1F64C480C29CB39B3F1A04A086618B23C04837A1EE3FB3D
-E9530E0FE6334867D9B5371CA88E41731A00590E510169B4FCD90767200B658D
-15C5FC3D43B8AA7DBC75E1B3D86F7B9885A66612AA4BF2FBE5913312B97D06AD
-2EB0E48F22D0C2C3E2EE6F8D1085F0DB844EFDD13C512EFC4F739C91199D78E0
-5CF3110CC73662A718FAEA5F8FAAE845D9F0FFD4EC5541217F1E2CCCC46A639B
-A28F3AAD94B4B6B613DC781ADCB970566D06888C24738248EFA261BC122E2B12
-A00282328D52
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMSY9
-%!PS-AdobeFont-1.1: CMSY9 1.0
-%%CreationDate: 1991 Aug 15 07:22:27
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY9) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY9 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /minus put
-dup 3 /asteriskmath put
-readonly def
-/FontBBox{-30 -958 1146 777}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A
-27D1663E0B62F461F6E40A5D6676D0037D33F24E2FAC2B0009AD3C8350CDF8CC
-65BCA87979C36D14CB552E9A985E48BE4E88ECA16DF418749AF04FDD2B0E1380
-D281BB2476BB45FF30946B247DFD7F57305FA87E50CA338121C71CDFDF927A9C
-77FF14CB4A1D6D80356FB1171ED38C37702350497B44E42CE31DB2F493807DAA
-15B887C671199A54C4C1294BC520F5538C15556BC43C9F62342B121C6DCD6C5F
-491DA47FF360201EE21C08A781ED0589A6DF91B99FE118B9B29E4F068672E52F
-1A06C514D91C4C937D4E642503392B1CD1BF5AF0BCA28EBD840AD76CC39AD7AA
-CF2C057D436A245217829DB786A3D592C0F5A073E44D137405B0D44F7D7356F1
-DFE3D933072E0CA836B5B72B1DDEB8FF86D5F9A2AFDEC789B2FBDAC307F2DBF7
-2B5BE20870A423F85DAC7075769E74EC93D759E9095E4C1FA2D5D8FCE0EB3586
-E193EE511DC1B950972544335EA5B46B3AF5B3FA5B7922DDAEFC5DB52B22CBCA
-7C8ACA790FBE3B57A89D10E84DA86BCA85AD169F0B7F8F93B228EF212069866B
-6D930B7FE660F87BB45A1DFF541F6B8926AFC7FA90E81B7628D4273B10474731
-4F5D42B1C5EEE258EF4C5255BAE05301CF5DA133FDD927D3065ADC77D0187C41
-7F0DC217781C1D37053C2D43C838597E76AB194348E78C59ED1AF4300B3885C2
-3408811AEC8C98E7E7E2E12CECEA0E666C993A48BE5CA6A23524B15433779571
-56CADB29D1963EB1AFE4EDDD12CC64264A6D12E624DC132B00CD3565784EC293
-83B0A827CD6D16BDDE351C14092435A687A98FC4599C6B712CD5809D8A8FB171
-BB2694D50BF5C52E068A58F907F702769A98ED6AA915DA9E56620FC819AF54A0
-30C2B7541C94336DC23F290F8A3C4B37E2C4513CACF349
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMMI9
-%!PS-AdobeFont-1.1: CMMI9 1.100
-%%CreationDate: 1996 Jul 23 07:53:55
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI9) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI9 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 58 /period put
-readonly def
-/FontBBox{-29 -250 1075 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9E394A533A081C36D6F5CA5FED4F9AC9ADE41E04F9FC52E758C9F45A92BED935
-86F9CFDB57732045913A6422AD4206418610C81D882EE493DE9523CC1BFE1505
-DD1390B19BC1947A01B93BC668BE9B2A0E69A968554239B88C00AF9FBDF09CCD
-67D3B2094C11A04762FE8CC1E91D020A28B3C122D24BEAACF82313F4604F2FEF
-6E176D730A879BE45DD0D4996EF0247AEB1CA0AB08FF374D99F06D47B36F9554
-FAD9A2D3CE451B7791C3709D8A1DDDEFBD840C1B42AB824D5A0DFF0E0F15B0B7
-22AEEB877FF489581DA6FA8DA64944555101EB16F7AB0B717E148B7B98D8DBFD
-730C52937E226545CF8DC3E07C5BA30739BAFCD0F2B44275A6D503F582C0FB4F
-449963D0AD2FAFDE33BA3D77BCA9D1DF878DDAFCA2E22CC4BACD542B282164C7
-97C2BDE318AF9D501CA21F6E662E7AAB75A5F24D2C182E598D175D44E88AB19A
-E7CD59584F95B389183EE21B525BF52A3F23C0FE5383A5565A19361D716F508C
-AAB78411CA5A4D27552CC1C435760D5A89D535B71C593E755C616661363308DA
-A683F54ED0C23FB2C225A008392B0B719F66F11A946A090B7C00B662A3C69599
-B4ECB0CC70C85C4BBBF207E0026F6C7A19F2ACFB7A60804FC98A4BFFD7BFFF2B
-9529E6D9D4238002BBC255BC62959D6F3381FE06E0621B879D5FE5B541D45A1E
-759A6E7DC32B1D1632368D09A97039DF255B6492B1B2B7E2C1434E8306ECA7D3
-5A79B6D614B4979F10988BC76ED53A5F45315CD7DA216221F842FD0F3E050DD2
-BAC23C984D506D8F7D614BCB6B244F5F41321549BB0BD041FBF3053307168680
-3435E9C9445A59A7C666418C4F2512C32058B1CE1EA46C7839C6E372F6CC60AE
-2CF46DD2F130B532DE8ECD42D9204500E413799E298CF6426F28D23BB7216BEA
-1A618B3ECC61B44DDEF0BB22D640B47C09AC0DF378CE68FC9CD88BDAE9ED89CB
-431A5CF9C3E9528FEE7A9936C2B1CF7B38DD2B95773F0EA0051607BE1B0B3588
-A8B907A5EF011B4622C5093A7B107DD1EED6FEE9536DECF1CC96E65373D0F433
-30AE3C094654ABF4698C07F8C74E71D023DFD242EE83B1306786124DD8C6BFA7
-801E66CB944BE7EBCB3FE803EC97067AF7AFC8A4E9AC9D11
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMSY8
-%!PS-AdobeFont-1.1: CMSY8 1.0
-%%CreationDate: 1991 Aug 15 07:22:10
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /minus put
-dup 14 /openbullet put
-readonly def
-/FontBBox{-30 -955 1185 779}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFBB2A7C1B5D8E7E8AA0
-5B10EA43D6A8ED61AF5B23D49920D8F79DAB6A59062134D84AC0100187A6CD1F
-80F5DDD9D222ACB1C23326A7656A635C4A241CCD32CBFDF8363206B8AA36E107
-1477F5496111E055C7491002AFF272E46ECC46422F0380D093284870022523FB
-DA1716CC4F2E2CCAD5F173FCBE6EDDB874AD255CD5E5C0F86214393FCB5F5C20
-9C3C2BB5886E36FC3CCC21483C3AC193485A46E9D22BD7201894E4D45ADD9BF1
-CC5CF6A5010B5654AC0BE0DA903DB563B13840BA3015F72E51E3BC80156388BA
-F83C7D393392BCBC227771CDCB976E93302530FA3F4BEF341997D4302A48384A
-CEFFC1559462EA5F60DC05245E8499D8E61397B2C094CEED1AF26EE15A837209
-ECE64FEF41ABE8DDA7BE1F351CF14E07BA8FD40CEFBFC3CE7B9D4912D6FE752D
-9CF163084E688DDCC4AA8920DB579C3683D160EFA6B40388374D5A3649B3C34C
-15DA4DE3AB03095AA746523B99CE6A49ECD5C69F7A4B8E9FCB76807B31D0FAB6
-D9247627402D29D82CA6688DCCAA9CF05CE9D363F1AD1BCDB7E888F07E35D4EA
-3C1B0A9C7C60CE8D1BD0E5B5E4200E6B549131874AE8FE573C1F57C1F020F041
-87F10CCEE6A4AD99BF08C3CD0AA51C97ECE3D78D121F56F0160334E923527791
-79A7DD4CAB8E8986E613DA9B9E1F235F7F2D1C458AD399FA743ABB240D367130
-DC3A912FEBEDA1644188E68ABD6B93EB50111B12D9D6BFC93AEF44588A310392
-171E75C2911C242B8E764603ADF21C9D12BDB1
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR9
-%!PS-AdobeFont-1.1: CMR9 1.0
-%%CreationDate: 1991 Aug 20 16:39:59
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR9) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR9 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 34 /quotedblright put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 58 /colon put
-dup 63 /question put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 87 /W put
-dup 88 /X put
-dup 90 /Z put
-dup 92 /quotedblleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-readonly def
-/FontBBox{-39 -250 1036 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
-87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
-D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0
-92A36FADB679CF58BAFDD3E51DFDD314B91A605515D729EE20C42505FD4E0835
-3C9D365B14C003BC6DD352F0228A8C161F172D2551CD1C67CD0B1B21DED53203
-046FAFF9B1129167921DD82C5964F9DDDFE0D2686875BD075FC81831A941F20E
-C5CD90040A092E559F6D1D3B0E9BB71733595AE0EA6093F986377A96060BF12A
-A1B525CD9FA741FE051DD54A32BECD55A868DD63119A4370F8322CCBEC889BC2
-A723CB4015FC4AA90AE873EA14DE13382CA9CF0D8DFB65F0ABEDFD9A64BB3F4D
-731E2E1C9A1789228FF44116230A70C339C9819676022AB31B5C9C589AE9094B
-09882051AD4637C1710D93E8DD117B4E7B478493B91EA6306FDB3FA6D738AAB1
-49FBB21A00AC2A999C21445DE3177F21D8B6AAB33869C882613EA6B5EC56476B
-5634181ECBF03BFEDB57F079EACE3B334F6F384BDF9D70AEBD592C8ECF21378B
-54A8B5DBF7CB9282E16AA517E14843909339B5E7C55B038BF3BB493F3B884A1C
-C25F9E8FB912CBE23199AD9D2C3E573727701BA301526C66C3617B9514D6F11F
-11930B1D97C17816C85B1BFD9B973A191B33CC3B391815AC46268691C741B2D4
-48A840F1128D9B2F9CF07D0709FE796B23A836417BF7B5B12D67F74453C82F5F
-25F7B30701D6F6D4F4DC623C0C27D6A6FBECC7312A3CD10932FC7C10851C3C52
-24B75DEA8A648B7F34F5711DB0E843C914E25663C510185BC37BDB7593C1C259
-21D8DDAD33982C336BF272BAB2F48E68217403FE9F54877B243614A87E64784D
-2796EE4179FBF96123D1BEE3EF89D682B427BA4F12A1318A57F18BE5DD903815
-26168CF2ACAB48E4B0A6628DE7084F42076CB48636F1094890E895F5CEFF70E7
-E06BC0A2A7BB7E839A3C0B8AFF23D9C0447344336DD1228233C1E2E1854AEF44
-703C32AA0099886908E7BBACA5B0D474A382448944F763768B8E4C29803D3CCB
-4F7DD6768ABE27E0F33C82ACA2C1731960CEFCE1B972C88B145EEFBF0E498813
-97BF1F66935B22136A1A686A4A1A8FFAA4CA95EF05282D9F3939AFD86C020B34
-0AC1373F63A04136A900D331B9BDF5D5091851AC905AC374A31E597335EF0165
-FDE5F91FE810F1CCA3125DEF372385E4571087B0D89701F2FAF69B8E65770328
-1D7F7317E3CA8CF845D1821375D5F18844AD52E00B5C73A670E88E4C362D9040
-C805AC27C17237F7AF177F8945A5E613E60138177F5BA98FA2B6FF994A19AE5E
-384813F4452938BC214F07C01689F63DC45B1E493BD3CEED1488FA823D2ACCFD
-4931EC3B0882548257EEE2778CC0C3264E678D4B04A61C63BAA55822C680DDAE
-0268E96FC74F104DEDB5E83193890747845A68EA3C41ABBC7DB9246CF5DD41BA
-2F22C925631AAD3C1CA1698B5E1212A5941280BDF151CAE45E5A88B3F03D000A
-B47BE5C71F69D254B56A97B229383E8D80A1C1C4E3AA19DBF15DBD91894392A5
-853330042F1498EC981D4BBA1BDC694037E74C539510805F8E156A2E4462BEEC
-C155D3D4DB3D24A440118D97A4254155B6D8E91E2849DCF6C9F299211BB4B9DE
-2095D9407A08572A63B2DBE86EA10FC330B769AFF3E79B015B7A3DAA5885181E
-6E1AE0447BC3F6F1C276B647328D729F23C123DBE4A27CC9BEE18ADEA24E0CC5
-73D7C2A673371F9D5463B5D4FFCBAAADD31A06A062D99CCBD753F22E32F25EE3
-78DC2675A1873AE7165471209989BD073941963BF3977E2494C9075089BE3349
-1B7C82DF6A8C4899078CED9768BE519A07A8B823287EA7482C24793A5650CE73
-31CFC7814A531F11845AB00C1315DDCF2124056054837ED7E8C45A3785BD02CE
-2DECE00EEF161B22754BA3B8F99C91559A5ACC4ADF5905BC323981FD22B6ABA0
-B3B4E3F21434904DCE055AA904FD22A15246D2FA9B45AA630FE90D2835A18CF0
-B10F258BD956DDC388F3BB1DFD388B5968E5897A477786A66D446AC7B1CD440E
-9416678C23A4BEE2957C9542556E3D80E8272C45C5C6F930281BBF9FBF1DB0F2
-4A235CE7A601AE58D61005999C69A6AC3B794A65F29B31E8EFD2210B90966D07
-987B005A7C7D6FCDD5AADEC18BAEAD3B5592518E678D7A7C533CF13044999B9A
-4E173D82B2F4DA82C70EDD06339836B12437F388CFD92139D4562A57D4A4E42E
-7B2E248C75BAD5F8B4907FE6BB512C7AAD6D47CC3F148F6BA06143C62ADAFBB6
-EFB8B15D35695A84B4FB27003DD6C4353260E493B3B67A113390B6F0854589FD
-81663A3DAFADA59AB19D45CC99B7A6E89EB924D43123ADF4C1E5F1E597B330C9
-281021DE105822A99BDD725BAECD8894783AD7F8D114A229A4BF7876AFA39D50
-6FEE8FBC7DCCC98AAAAFAB4D5819690E0D981DA71B757815A57C3FB2270E44C3
-FFAF11EE65C42743C3089226C44A0A410682ADDD59D5308BA9135E110368D563
-DBB2C2870697649F6E469571D44C60EA410FBD0231F8730762B1DF45D530B52E
-CEBE0774DCC257ACAAE647A6E37646D638B973A7318AEF1FA7FB14622119D8DB
-C87CAE045C55F29D81AD136447343D079544637A7991378B2C527A8029A6C468
-F5E204BDDAB1CE7D7B37E724B3008EB0D4E89887145DB5E1F847D185B4E068EE
-36EAEE832EC5A93797EA31B3EB76B2E75E68C574AF4E0C8A6CE66B6C75C3E14B
-F1C8A2AE3C48DBB9E758A7138BEF8E7A6A59E4DAF3D75ADE2C6AE676163EEC26
-9D100D39715AF1CAD99DFA2529F285C9B509DB8E245D044052A6A4176267E82B
-32E7E7B1B19B5819E50037C878D1B3110AC3E1336584CD87FF3E1C155A361174
-69CEEF2B29B3349DC244A26B5C30838E4636FCD0041284EE1CA290B8B5E78424
-69C3A8954CBA48B87BC85BB81702C9451F184AAFCB4FD23499E8125FE2DA1FD1
-1EB046D0E2288E551019845E4CB7C09DAB0B2304D861A007642DE02642F257B6
-81DD7AF9FD59F8A51563EF65E00B84E1F8C6AD018B705E2C2DDF16409D7EC31F
-9FD1C3FDE26EE725B8E06BC27D12A5A4D63ED75760F1F89C8A310BAC0F60111B
-4458A579A70ABD463BCCCF9A8C26B04E1B91D92D2A37C37DCB3E2538DBAC4066
-BA4EBDBA97819E616470DBBECE88068F8E6BA5A5F7422AFDE7E8F21F8E4F6366
-902F2D7C13CB77D30C5F8468A4BD92BF9297C245B659E3229F9092494A0C6A2D
-81FB055483806140DACC2A00A1792E42543E69CF2C318A0D04FD194C7E27532D
-ABAF49E1DA1E113BECD8B90D6C1043286EFF325DDBAEBBC24F95E94382EE0C78
-84D26F56FA509D2DBC831D457BABA8E404F09571E1666CA4F09D200AAE319C34
-F1C433794F1833D4E2DA359F573978DDC12E9130CAC1BB9B5AECC675B1BA29E2
-4E840E43892FFC1DB7940DE9371C69BA87B8126D274B0A5BE760C719C2F42FB0
-8A73AC43448458C9A8A5ADBFEA8CF327C954DEDBFE6F75F2E893981876D1747C
-5F04A9A2B6CEF04324C0BA43F66A17F2D5562DE7C90C60D46A721EF8829EF559
-97C94DFB435BA0196ACF985E333BEA6884D70EEFE9E2B122730FEF3F613F318D
-26503D4E821266BDB1C6FB67CE8C5B427AE30CE0C130907FB007663BE50ACD7D
-E82EE7DB0DF6BB56C87B53B6305BD0E29B32FB620294423ECBE7D1B0F25222B7
-21CD214CA2E6A5AA857C48AF08E90134150FEEE42CDF7792F13B6270F895464A
-7AF9F79813426CAB2FAF3BADEBBA19ADF109E622CE81AF732775375EED9AAFF7
-BDC5AE41AB11FA7B8FD2551FCC7DA4BABA5E857BC53CC29D7D87ED307781D1FF
-DDF1D1F3053FF0BEEE91517FFE5602C946F61EB8BCEDFF04591695D585AC7F26
-F915DD6313566BE9EB4459F3E24570D62E21FB22F46C4E5DCD38FBA541D59C2F
-80B282275606D3170C4E66B37B270BBEE98E8EB3785193FA0FB537A8B164A62F
-D3E7097CF1686AB009B29BE690020D606BBDDA925EF8C34D6DC6B9E1BB65D1B1
-52A3504EA8CA7C517B69E5F28D229BAF77119E61496EC1DDF171E17282B6382F
-F275A7EE47B477C1254826992C7C3F38E2E70AE8BB2AD7A46663FEA33540FE53
-AAFE30AAEBFF0FC38E896D75984BAB9D33EACC3B62DD0E17A6B7DF4F99368CC8
-BE3A05E2A5E57D5CB2845BF8608010067147C851044D866BA3CF6E6C4112694B
-A6820C7768B98905B2AF6DB8EB9C7B3F8E8D6D4A63D98B12E53451F44D2603B3
-C4C9FBE4A59440868939A6EABFDEBFC3B38FF6B8909EBC0BA5B5658559740FC7
-99E3EA6159CD9AA85A060B59C015A7F18C13D0C50E8E35449191E817C6023D13
-D442C142ABDDBEB6190DBF37A408BE3B0F50B14562D5484C5194BC37D5742AA0
-08F6F16672BE598C2D22E165F560668EC511C6EFDC6E8B4293A9BD6061DEF2B0
-D2B901CFC4FE3E2A21350DC8266BD95A7806B274CC072AD8222BA03AD63B7C25
-C33CFC17A0A07AB69940832504D361601313C99B55312E15B8A611B8050F3387
-A56CD120189A6B0876F759CB008988230AF190B45B605C3BF8172EF5C22BDD6F
-0722734AE691BB0E07FF7C9E74BC1BDA920F526FD639A1B3620D561C09D6A966
-7D362B9EF552D4918ECBA3C06D478C7EA29C7B06179D995E18FC48F2748AEAB4
-CC1C18D5E3B392CA0BF5986D00969F628D6CC276E2E56986F9B1FDF7D0730F4C
-C18BDEDC0E8D96C90A15F4022D337982A1499FF2C8C9598C9B4EDD74EC90ACC6
-6CB859C628F42CAEC111C6507AF61DB6930D42DC9E93A1B14BE6DEBE688B0AE8
-7D2DE1CBC807A5EF70D712FFDE20B656A9269B82B246050A5282E2A48AE3E777
-9E3BD02953F2206E1DDCAB16AD0C69AA53278AD28144BBE349ABD1982F3B3644
-BC9402314C9DF8EC3D0C9FE123CC42CBFF32F1D1730474C2E255719724F8BD9F
-8D98AAFD64F24E259B66BA92AC28B6A33D818CF2E3C8320C6AEEEF6E78396DC4
-1FF2E734432C065B00E791BF1323497902C388DBA03A87BFF82AF6DD340287B1
-8B59099469FC5AAACE984C1FF4A9C5B9CE9A146175247F5D07099572732AFFDD
-0137B10851B0E7396957D9AD067ABB06719646DE7DDB9938313E1795826156CC
-8B9F1744FB6BA94BC6206B8329DDD465001065E7835140AF6F70456C69365AED
-E0D57F060BB386494C713D36CC616DB0FBFC0B4F89F476BC601ED31146ED8945
-CDD3B43A9421182FE29F67D563271E7DEC92B5B54BEC53E67A13FE3E27F830C0
-9C9CCE1AB8FDA7B9834D5AD9362842E46BC26F68C2BD5BDC26170F0EDBCBE062
-F5C8DEC1085EC724FF8159DCDD7D3CEF857D62C61F70BB4332D95C1C0EFD87B8
-42964FEDF310386EED3220922ADCF94A444B469398814A0390FF89A4DDF74FED
-B20486CAC60C6611ABC718D08A82BC9C2B69B1BD96F65B5038376628FACE8C62
-5287020B4D87974D5DC3376F9326BB0A42121D0D23856A61F727DD4F0C4B0830
-0D56AF371D5BDD1BB9074C343FCE2C4D6A8F14A5079B317F18A6593885CDF9B7
-ECB8F97DE6E5F1A3E2B1E0751DA00D7CCCB65D6BC44472A720559DE68B437367
-8F3AC9E83DF0307FF540D2AB10C773AE26E838FF4B0315B403FF65FC25CC1DFE
-D8B594B928FC5A8F441351BD524863521188A2D745FC8269AE090E398EB6D10F
-6C10BF5B7F6DB649C5B5F3873BA6FDCD25356EC7F7C04C8D046E3BE0D0B1B4DC
-3BBD20388B78FD1656AA1D99F7C737EA01D43294D9D76256F9DDC2FFD798CAC5
-03BAB9926A88E853D4BDAD24125EE6AC4EAF1F5D1C16579AF2647EF5C36A8AE4
-DE3087B0DF0C07D619E67A7019E11AB95612497980BDA8E0FB3EE9693AE98DA2
-D36B9AC48DC6F992A1317CA3D6A1E464F69BF2942F30D9A06C395F56A08BD456
-30DD3C36E2ABE5C7F7B8BB1CC025A382047049234BF02AC193B5AC6455DC31A8
-5E4CB3F6256D8BCF8544DEB5C9440FBC953123917B1D8FBC8C76BF4E5237B214
-F8BA8742DF7621F1709F6CD0C65F0448F994F61DFE94F050DEEA9E79A0E04C2F
-CF07FF0F415133ADB69D3941AADC37F00E135F60C4C0C002F7F09B51BD3A26E4
-84B0D041300ADF221811D9B0E6194C6E8704A9915D7DD630808A37ADA8BE8694
-B5B8BCEFF541FA556D9C3FA573590533A43F46A03E2F35DBD6BA7C454B3A6597
-C31BDF69D3D9E65D33EA5C7BB351B2E670A4249E88BC103C3EEE2EAC2A710B5D
-F12A8DF3E84AB65AF5810EFB26663ACC404B0CE0257EA225BA3D68B176C2178D
-4C1539256C341887207A76A2D86355E76A05B99365309A7413E5946157E50363
-3AB082CDACB4F07811B80CF93BFD5650A73531D4BC2212E3925DA54443A7BF1E
-B4CCB80D6DB4B143BF02F7C6D20B5F8376B5F14042B6271A9DD6780324823353
-A87BB5E2F8C0B676CB4CB8FFC4759B12DBDA3489345AB56FA0220E7F3317B4E7
-913BF111BEE578952B6606042DF8693684D26254A7E8769C54B91FB6770ED0A8
-116E6B9932227C0F9A0224C531F1DF4B9EB91E4C15F8B2EEEFB89282CCD27A4E
-F8AA1A29C7049B0069049B1532ABFB15819D144826CA55FBA3F2BF2A94E51E4D
-58F73C689FE73166F7D8D4EAF795AF77C3F52671D360105C4F9B7E17CA80A05D
-F4C07A772C1DE605C05F98E342055E6EA94E8B6ADB35AA04CAB65A7BD05AD09F
-42CD1467F779263D813BEA5563ED007C67426D5D23C4D57D139A8F332381F5C8
-21687B9291ABFA1550EF196C16BCF28A256947FEEFCA5549B5C1E17F45EBC75D
-89B8A5199B979A829B3D70ED12595C6A1C6F6238C605167240DC793018AD8AF7
-F5621BD7F7C59BB189E51EC85C88F5A81909F901C25CE71BCD90DC851A650B8A
-A174CF5680678782225B52E2D8850A2E517EA1B68BB34B51ACEE08E8BCEF2526
-644C05FCAFBF3EB5B2B10FAD704FAC196E6B5AC2FE50D2D16442ECF792A312B5
-43813A397234AD3CA16FDD9D5B057DDCB0B89E45686D5C8404360C8FC4BF299D
-F41D729E7EC5FA279EEBFBD3826ACDCD54057A3B8D5654BD6CAA79C982766633
-9C1EFEF52CC674988687C412D4B503406D8451D7B3754BC76276086C13D5F200
-6AA1DA5F664AF2B816488669EA6BFB8DCE11C70CA3C516D3AF20C5DB421E2AD2
-A609CFD9E351D3B23E56DF096449616C58D7DE3BC0E45A32E476B12F47B79134
-31A7EB61839FCC2EBBE75444410DEE389E3A3DD7F67127ABBD0CFB1737311A47
-D066E7D8660023A79DB6BAC4B5B02AF2FD7CE61FC0D95FBB554D5E739A59DD8C
-B51D4ADA0BF511589EFADFAF4497FC56BE52EDE8BA84D1C3D30724107AAABB09
-E638715E7FD8124C5B5EE8324AFBA306FC7E235FD61FA58252992742F4A8F21F
-7D4B6F0F63E801CC92BB8ADC161AC8DC69B64320667283FF0C9C684D736B1CB3
-A2A09348EE623A4D9E121D96FEB1FD968CCE04578F77C18DE1ECF2A2E46B117B
-C8EA2A9FFA396C2B6C5FD8590D4BA6673F9C2A7609EFD8C919185DB2E897B888
-D123FDDC86A2BB22926C90BC41F624B0F47D17EEA5BCC036309AC6C54778983D
-06CC0E25FB8EE7DF1FFB6E913A436DE6707261BB9433E69E2F0F48DF10668AEB
-B78A46DD99747C429AC003EA275F526163F3B10C0CC4B4796B2A5DC9D131754D
-0B6A60A4443CB6B60E2EFA792292A212A3DE22EC61074B174453612701D755FE
-D377718B9875C17C171A8378A11E9F6B6724BD84E30A8DD1D6E1E3781500176D
-B2BA9E98E550529BE1211DC0AF96C3F92685338F5BBED21F7F79EED6AA5718E1
-05742BD1EE3EC4275DF03C38B7DDD125F4944D97E8B9F0C45F50162D085E3897
-B51F2CE7156135C63D466412F7EDEDC7712732615E899C676BE53495C18D6A2A
-884F9C742E4126AA2C693CE89AF3A23B40764422C4B9E03F3C8A4756D23F301F
-DE5A25DC6DD460ABA181D05D7A50085B6A2F9B8EA5009FB98CA3E6E85E876575
-0AD4272AA0BA39BCDD1A1C07A0F7CB40FC0FB4D929AA0CA5C6814B3A145D34DD
-04CDEBE81FAB7C9A793CD68C6A360F5C6485CE9D98E3BC408537067F12AD4E12
-C7A9CCC289EC190972C47CACCC7C92FC3DB6CC5ABD26D41CCF34A168C6F90001
-935AD8CF48F93040C5C56D0C6137FBA4E11A26A0C785C8C86D75BED6646D7F39
-E5152ED51ACDB307CCA9090B777B4A22B87F5A8ABE7E61AEDF4444F36862EEC1
-E60A858EFFE60CD00773C895A43B73D661030C04DBA896332302613656068E55
-E5DD8CAA594F9E6DA689032DDB815D9CC3CCD58DEA8A495831D6009A5B310CAF
-1CFD51713CD953BA762B2129407473E61EAE3FBA19DB930D4F37F9B15D20DE9B
-AF028A0B9E26E6337772752E27236C1C6D4CDC21EB1307F964ED2C8A11ACD955
-6DE59F066CE89C2FDD9938F221FC87503A3B415A55F8732F95CCE3E5210892FE
-882476340B928470EF4C0A93149408B4332F78C8141F202470B5AE115CB85089
-7BD10E1BD39F518FDBFFE3C05197E6FCF7B2FE56AABD47375AF49AB45A5EB1CF
-2D2500141488E194FE1BF7F482C017D1214949749D34EBDE1251384C35836955
-28ACE519D8CF3BE4F34C1CAD02BFABB66ABD734CDB4060BBBA9EA42CA6AF51A4
-1B1860A836B0FC882A38EB6E8EBA7D5B8C062AF7DC1B751F2545D8F5AA4247BB
-539B68097B37F00C4202847648769F2BD50CB1A6EBFE6F8E3DEAD9C8DF15859B
-42802783724A42F62FEE70C268359D5C8E099510F5ED38A64F60915701781582
-95D0B92DFE9E0EEA56F1AC5909364007BD4BC0D67AFF175C65E90C0C20FD6509
-9AE114D29DD14D1D7A57DBCEDFD66C4A83D1AF665B661A3BF653FF7191DE30E8
-23353D7FE5D3D7ABE0CF521B0511C2C9B6A161483ECECDEE5DABE132A63CFFA5
-5278AA9B36B548076ED3F54FD4F6D9C43A91FA5DA8A19295E239B0EFB419BFF0
-55C1DD3E0C8F5CF8CD193AA1E275E2340C8972A35DFF378FD1E223F6A0745AEB
-096315401852937C9F1E032F99B1C0FDD85BD43A3DE81E2BFEA4F40F924CFCEC
-0BCE6E186FB500C4B6E7CCD22B773300C7A9C4E67CE08970153D94A85EAE47DF
-B22081995F86B8C5D23BAF2D9CA490783DCB37747EB59C7E8A18BF34C97E4596
-2B1F76612D3C664A04C0A5B565D05584CAF107EA82F48427597D701AA8E2E9E3
-F0D8490E1EAA751DB392ECA3F6206942BAF8B4869151E464DD94420EEADA9431
-0A975ADC02482F91C466642014F1F7B3A73CF16AB6D56C8FA467A375485400BD
-19E3E5A412431FEC5AC589DBA570162DA730366BCA440AB4A62AF8B9C66E5372
-AD5E54C228F6AF6309F73588CEDEE7108CAB008457A6482D66C32983E262B0EB
-9DF21A5708CF8C3A15638AC4EB9C0EF6F1FD13AD70E11CB0CA3B009981A245F8
-E54DA0D5B52B7F53FB6B6DD9695ACE96A339DFEF43568F9F4CB51563253E3A1C
-A1C5C6D90E1C24265AB7B12700AC173EDAF4AE5B4421C293AF6B00D780DB6FE8
-41F1B1793AC3B2BD88150F2609EC5A5C43728B6EA2A825943BE7A7D4C0B5DCB4
-DBFDF6B49E4EA9041D5A0BAC6F6856ABC8EE5F4CE6A4BA3E78F6210DB56C333B
-C61D9746B06108E4CA75BA834905E805D469EC14255ED554C27C4B026CC23A71
-F9A93B42531FE7E9A0C78DF24FC0D878FD11FCB3AAB8BB6406BA2A942203095F
-7A6F79F9B3B833AB96077E42EBB9BCF491546D821EFAFE0812EF7CA16B135B9D
-8E575F9C75F9A348770CA2E40C235191ED0C07BD769D1697EBB6BF36F39E24B3
-563408CB1EDDBF5B826B778680E28EA6A63B776A9EAFF955A2A217FC174CEDDE
-D8B30EF4C40E93D0DAE3A5A8BF224AF076BD61D0AAEAED47BD5294E3769CA0EF
-6F55109176F64B60BD319EBA14EFF514461C03C2AF861B68B5129667AABFA415
-85EAE9F50BBCDDCAB316DB29AB43B50BF76D33C1C17ED5D984430E13F0DBA8BA
-A78678846B33338DD4F02F99A04FB588160100161A143FE8F37B7372A1412B3C
-ED7EDFC8E9BA9DD2A61E400BCF6662DB1C4B5990B419D50240BA1905C3527BDB
-BF156E924D30B153F7ED128A025D028CCE857B6E0469153C5827DFAC5DF3D0D4
-96AD81BAB911D289B7FBA2EA131DD6677809FB8B4A34C638D6BFCAD4885F6B42
-DB5BD42BA7A29A274AD8BE91E0DA2FEC61B3EDB0A65EF57A87208D57C9E2547A
-00F6A219C988EDF77464A56543C331D399E193A6C0CB2BB50669837F917D9738
-B3E437FB635077EE67DA23A20A7024BCCA2503B7875C1A2EC8F6C8BDF428F5F3
-7115B8022A59DFF716ABFEE26405306E704A5B938DFEBE092F76C96684B8E118
-13E479815093A1E695A3277BFAC4157E1BE32CD0A55E54C53F988CFD93396690
-0EF5F6AD0F99A86100D54A3CD2E99544262234129BA71FD80D79C4C97CD82E2C
-2AC15852F212B68F3B6B82AB181551CD6824C360349D37A86D0F70F1B2572E1D
-A693F9D9A5A563043CBE38CA838974D76D068770D5B9BB5DCCCB153913DA4721
-D697708E8F81C41A9D075828CF12D59E00C7437A457DA236FDD4B98625D43009
-D489779825CEEFB7EC9A43C4E6C63E2644932225C70F4F1B422BE8E5EFDE412C
-D49D7A9E91202E5E2E6A3C6841CCF6D261F774EBC83B2A3E5E7BEF91E7738ACC
-688CB04DC2EF463674CF6BDC832FBCA92834FDB2ADFC29FE85CAF5FA38B4DB15
-F58F70F47459012A41BCCB3E4B05A6A61A62FF7455E58CD2CE7779D089031E06
-F382C8070783D2D7E7C72B3004326CE9E69A6383A2B9D4C90AC2762542C9C340
-B0852A1DF4510F3951E45D877453DA89A09E7420C337FC61B66092C2CAA09F24
-0DA57FCAE295FC7D0456D9D0B696DE192E4BA52423CDB3717AF58F1351FFD1C6
-AEFBBCA745BD6E661A455029CF6FB235692495A0E0494592621D603357E33A7F
-10D6696BA49885355A60C2D537774A6F0C3C8A98E55AC68A0167F6FB8C40AB69
-24E5607A6B1C24865947A1F9E9CC4FC6E3A96DCF652342FCD8537D7F8E0389CE
-2DD4AD950CE2776376B628D7AD36E9594E30B7D182051C2CA128A8D9E81C4A96
-24E9D786F9891DA52ACC290FA032107CB9FE66A02B2EFDFA6BC75F2D33E3E433
-A306D6501444F58F8684E6E7EFB36759FD8B4D6D4E49839F75A7C16EDABF9A95
-6FC34AE1D000C0360226010C95B7C21C3315FBA5A7687CE16BFF60BE63F48535
-C4C8C165523371AAE82848808786E5A9D1590A827D3AC4DA9C72164796942858
-5E152592EDF741AF3F41FB93E310CB88CA9A93C37E3D7FEE677BD10CC1118B43
-49C8E72E4F1E9B60348CB78C1AF5D38ABAD648F38380FED32B44E52C58AE8283
-0EE2614173E26794D75E0310E3299FBC79810EB191D39B3D2890254F43E353BC
-B093D380D8D4BCEED427E26528FCBB6821C739A825E27A116D64E1FBBA8892D4
-790E3BC92E10954F53AB4BC1296ED39647544C6B2B2685C10E16D16A19B1F129
-B0EC0802521F42558F96611C139D1739C8A83F761F561DD3540D31EBADF80863
-6E124DC7FFDF459AE0A5E0654FD7CAAFF80BDBEED8934ECC2AD3D8F729ECA1DC
-3FC10CB3CA7CB8A1E83AD7254AC019AA0AF184857DD498416AE8774016272504
-382403BFE128B7CCBE4895DE5B7F8AC211484DCD4B6EA61001CE481315971F21
-0D36810C3E662D063F1F966AE4D801A87AE77FC117823C097C4327FD25873AC8
-4449E34307578D79B8981CA2FF925DC6C2C26C53A4EC62F045D2DBC1CAFAFD52
-72333A42B3652F67478D67425F39AF28EE40396A777403F0F100B1D068E75756
-3D925DC8C96D2E50BFEACC4BB829C3FFC9D4DB5C141051D4CE5F3DC339F2D01A
-5EC81719FA78A4D90AA3D84B5153C79A5E5188B2CB3F4E25828249ABE39378CA
-CE01D3A062D90E348ED8900BBDA9437F14235D5F523880355B3F5C40605AB0F5
-76077B0E7EFDA132A26A61AEECFC5A6FE7839D1AFA869BD9A731434796458077
-C43FA9020098F09557967674BA76183EFF4D99B97830599E87B7D17D92F60EAF
-7C416971E54BFFE805EDBECCE66B3C8199BADD6381683E1E16360D2AC0932ABC
-8078CA47042550827F26C16AFE835E983F0BEEB095CECAD0CC97CC21E9AE628C
-4E80BD43A6CAC9DD8D99CE8C6FCFB18DA31A6A6E501B6ECE9DC77B56E7E68BC8
-D5F3A8293648AE384442414BE09822848B461E9168F08FCEB6850368C0DBCFE8
-0A87F41294996EDBD66677A763C372C06823CBB34617E7693872332F0E39EAC6
-41CF7E2BFDD0B3C73AC4F1D741A969547E88EA32B906C23AFCA30C719D089956
-48845322E1591FE75ECE794CCE07B818B624A472FD0538BDDAAD1A3938A5FC65
-4393146E0B43CFC59ECF4C82954312906016BE2E1D35208FFFD7400E9FFF64FC
-B2F42D181AA6A72CCB97570DECD3476B06FF4EDA9241B554015BBE99699CBB7C
-F37AAC1EFE738988462B03D9A622F0E2374D050AAD0EEDBFED41E7596AA9B8A1
-80C176F86E29B499D2152D3EFC38F542CCA9AD081273682D676586EC628BE845
-45BF518A29A8348AEE00F3E306FDBE937E90072E2FCBCCACB9408453ACF309E8
-E417A9D4698944B40019962D6E78B2A6E50FDE0C79C4B3FA4A567D51CF73AC67
-DB25BE0B1A812389E396B3E82C290932C623E94A2D4B599BAA371897D31701DF
-11E7E1D4604B99D9119D557D1CDDAC682A33282E72B3F39E4B645EF3656A7DA7
-8BA007D8918E96F8968D72F8F4AB3A4BB083EF8D8AEACA2CF9B111C553EC2213
-A900861497197D66707FD61D70A5DEB33BFA1CCE9AF9BC87951B27B29A31A31C
-5A3D42AFCAD32584917197D61387EE2FDA5EB671261A77C3E72A347F0C7DEB19
-5D206294ED3A7A5193698D10A0783ED43ABAE9C7E9DF2DCB88D061B536B69CE0
-EE5D0C9C519225827E7D41A17B0A9A8FE1CC435B6BBB34CF9117CDEECA996B29
-B915829F0EA5601835A94B8E9DB3FD42EE254A3E300160F1621D34F92A345C30
-0C9851E4E70AE389CBF5BB6123C04C5183FB7335894C56FDB05DF944C36E2969
-439FB1A9E60C0866CAE0B2EE78228A6525E00DF9AD594FC4D0411223AC2C8D26
-031B5F25D1174515D4082E76A4285FDEBB18D6F448F7ABB04F565C78253BBEF1
-E1784A516EB8E9107E0EDD98B0F1F1FD5839C0BCFF363F8208A33787E642DCEE
-DFA66E1B172EE906D0F26B880C0311D5E057392B7621B800BE153A71F8E261EE
-F4CCEEF239E4E4370DCF1AF9731423F97CF1E0C8F409EB259133516708786DCC
-9A8CE05303821ABB3A7ADBFBC9FC798C5DFEFAC6F0B35E087DE4293391472DD6
-64EA434BF8F47E32AD7393DCE0722AC314A49B2B49F803A1F5C891704B5605D3
-D72A4A07B47BABF6DB518A3101F66FCBA28549BE5E29B571F3459FD23ADB2326
-09FFA0BBF337BE64F2B03D4E5D7EDAB882D4B7BFAD4F89DA57AF056676041D8D
-30B4A60519EA2A23FD3F189A1A07F1C6A1B0FEB328461C9728AA97D5A91373C4
-52DE4ABE9947FDEBA7EE8CA20E19D297C959D97292D7001D5A424E4E2AF565E7
-829351FBD96F287092F5C352E69C1DFB49DCB84F397ABA539742E9D9270C313C
-1776961EC2D86332E5233447EF3017308CCB5A98B953A73597D502F1373F1A5C
-3106E0C76CCAD5B4C2E71AEA894E4C8FB81E68703000AEB58A560C30D8717D8F
-453C9972432DE54112CCDF06CD101C1632BC7B6A0139ABEB720844A650B3D1AB
-D061FBCCE31CBB6FAB9D612DA2914063B1B0A225DB8C4E3B3C7DF97275BB59B6
-F108B2544A5A727D638A67E8CA58C0EC67CA3102577FF5741C8E9FD91E66ADCF
-CA0BB3AE3033418FC1F9D27D95D908511AF8D9D6F7449C6297377A7E1A37BF4B
-1CC72748BEE6CB3136C515808AECD726B416476327FB1CDF146329C4352968F2
-A74F0F56A44C9C4C669898013413FF875E5CF5CFDC5561913550CBAD50D6F7F4
-28A1283236F36713E51234B87B290ECA15A385F1400DF09F4F737FAA7786DAC4
-62F2DB0A2CBC650419AF4C25A14B40D95ED4C84C7094C8161DBCDBE0A1E2613C
-10853054FEE8F9ED4031C085AE68BBD3CF002BED32C7475BBA0A5861846FD938
-47227951492372E7CFD09FFBB8E96064854DC09DFC9CDB68AC907A761980CE03
-E47BE5953F4115448B2822844CD8BB4F498ADC44FE6FA4E5EFBB7258A7A82A2D
-651E939D90B8D1AE1AAEBAA5C3F5B0620C7EA0A7D4D433FC5931FC1E457F102C
-371D06DF6668A53E6B37189A6199159FEAB70359DB493A99F9DBC6B3EA63B531
-6564C89C52A14B7B116E1DB82A7F4ECCC3B9C7CEA9D9CCBABF02FD29A80C8CF5
-5409C302B69CF0E608F26E3A55A83F9FE10A0E4EA47B160B678B1C1282BFA0CE
-56053FE37E368404CCDB530D438BCCE8B7BDC95550F95A6ED5879BAED8BC00E0
-BE1CF4FF8809552D9251CF7D102B82F99E00AB1C00FAC475862B8590B7DB11DC
-E8A62EDAD0806E661E16857E06E9D29F012175936349FCCD84486B7BFFB3F162
-66D83647D504084A6D5DE70A0F6F4C1D69D5C2603297404DFEB2C09E5D387062
-995A03231DF1925C6AF1D10407B0752D33477C729597A25E338B0284247472BC
-8DEDDF5EA206D064D63E69BF6609DFC190086DEF8E61F0D6B6038B0D90403D8D
-AD62AF688D4E0DE4A293245E05B6983EB34BA93DBCEFE7CD284B3FFF499D0647
-B33E252DBA8EF6B5143F48A6B39CB0E074941AF5A63FF1D7E892763AA00B6950
-1A3F7D41781B5352EF44DBEA30C5361B2A3F329CCFB40ED8C8166B451080059F
-90A32CC3DA08ECC03467C03C43E8F9DFC8C9036B49BF9A0F0E7B009253FF7F55
-20D268239037B017F3798ED38987AC66A522C115BD56883D69E8D5B227B6906D
-169146F569D2A016946E7E9480A48B2977E0AA7969E1A4808CDD261ADDA68182
-BCB9FB99456EA7A34456EEDEF359F08D9FB948985068C0AE32BA01024E313A35
-7C746857B73BC95A89D045EC32B3E8370942291058E9998FB3890B6786F4A4F8
-79A2A95FC4AA7A4347C5FD9D24BD22E6026A0A1EB7F3EC94B108F35CE6323301
-40541DFBAA75D763468CE3704E69257CB2BC6FC244C54D890CBDA51998F3A1E5
-2B4A9922C07D17A47112858537FD48D3C7D7381DC25C96639EF119B8B5A9C104
-F62BA7873E9376307A007F0D87BF41E1469E4FCCD1D1D51BCC255B1EC7B44EF9
-57653949967F182CF5555710BE94D19A15DEF2B2EA25EA110D40CD2FA83AA365
-59C0249C8C4EB272E423FA361D8FDF2871CFB74E72ED4A4DC7E18041C82F7424
-7B1C0CCB8F3E03978C3C61791CDD2CCA0EA47DAE9E4B8E6405C0A0AC69F0FEDD
-615A40E7DAC6E977E2DAE4DBDDC38670F6BB9661AE96BE8295A897A23A0B9D28
-FAA1F439BDF282ECFEE4F7C49837E7EDBF10B6F224995A2451EECA0A361C84A0
-F2D013D69E8B1E7F22CDBF2A9E1DE6977F6219B636429D378950B2686BDA1084
-CF4E03C3D863A341ED0A82D1DAD7882187284EAA2A7FAB4F528033C16F08526F
-C1B2E6EE8BDC621B8B572FAFEBEE0F187A2C45C0422E6D8FF94AC33B7CD02D42
-5BFE7C49A470838FC2B1BAAEC31F38E51E3D5A750ED30617627E360E60D110AA
-6F2B7B2B8277B32CE89A37658734645977D9EABCD9B5B8BD8B345ABBCA986AB5
-4F2EF966621DEEB355C468EA4F2F2B039C29C886C29C5BE57EB5E1FF508562F3
-F4EA5D103CF33DD1DB0D0B4AEC6941037CFA887C79E7A5EBC6A28D41C6EB713A
-F6D86D45A036ED5C048143BF8CCF07A6D03E9EB95270C197194A7EFD134D03DE
-E524AEE5B938A090B2E2DCDEE4BEBE2A0812D0589247F84FF0A4C54B6740AB61
-EB86DA068E082EDC4FD9B2BE4A31A380FEA3EAC38652EA08A4F3B0F4D4FF228D
-430CDBD34EF8A25C1367554096161D59C0157B1A9E7C292982DBBD62B4C2BA17
-7285D0F61DE7A571A78F42C35DB4341634E249ADE2CF1C7BF1A5BD7F9DD4CC32
-0F2AC9B9CB1942E6E5876B6FCD9A4316C1CA7407579DA79655509ABCAA842F48
-0239CD401A18E677D3C0B48ECDCE557FF66B0815FD01822C188D4F14C8EFC2A5
-C7DE1285AFA93E103A79202EFEA7C4F57D919FC4F9CF21A8F04B30828D6B74EF
-A9D38FD85BC83A40F88CCA010799BA642667E3BBE3B2D10F943331266CBA560C
-FD5B7ACC84719D9E9F326CCFFF5A5597227162E350AD222D03BD79439B11A1FC
-960EAE48DB97C6DF58A42328B05F3D5383AD4DAD2651867A3F83E88829664BB7
-5C92A1B7E4C17C943D90BB6D831D7EBE95B6182C04E8759CA0FDF136D53FE418
-1FA211E6EDE7ACA9151EF686B6064402998D84A138BC8A0BC89FFAF5FCD4B9DB
-5930EEC0A6E497AC265F65C2F8B3DE2768F085B98AEE1F53476CC643F3575827
-7FEC02825D6F064F381873329583355E6718F9E7DBB813AA536F899F5F5FD7C8
-CB56C6B8F23ED18D3E59A266FA92CF59C77847356BAE5AA01D6957B7F02AEFE4
-2D1495D454A1FE4AFD610849B21019EA4F86ED8B3593C8895A9FBB2438172A84
-68B1C646F68E855D67896A20AEBA26D5A6E7C39C3CA6B9350019D91C2D1EA8C8
-38DC94430373C8F23DA7D18578FB3DE8FC511D0D2BFC85123605E0B09EF199A2
-09341AAD1D06D407B71B2D36E2DCA5D22D427190C2331C8C9BB6EC1FA78AD5FE
-90363ACEF0990704FDE3DC7861271846BAC30B51CD2B1D8DB725B0C177804446
-0D2170417E64BE9F281C12F95C2F7E1CF4C137667454228A130ACE5325C2ADB5
-9A4D4D6E554896E5FC7FCFF16A0CC05DF8AB4C86200E95B4B3525EA2427190A8
-9D341EE108F3F33EDB08A0285317A4FF70BDEA9850F8542CC05E700F2351CBE0
-AE35ABCB1847B9F2C76698638F202FC1E8350021A096D8C50A1D71E40557C8E8
-6A0467C24A259669234A954EB7F3E1BB52D2F65C99117C7897FD131436463124
-DF9856AB3B47BEDE555795ED166B15AEFC6B23EAD7C975265E4B6EF2CD17F80E
-CF0A95FA4A88C365AB86BEC3418034770C8A1ADC9006F3DDB5429E0E64D00A87
-FE3654F1EA9C143C3C434F055BEBC0A7ADA16066EE449A33DC6EB2C4FE183468
-A89EB09AC395A17CEBD60E847C9F35BF0E9BBE7A702F
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR6
-%!PS-AdobeFont-1.1: CMR6 1.0
-%%CreationDate: 1991 Aug 20 16:39:02
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR6) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR6 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-readonly def
-/FontBBox{-20 -250 1193 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA17D1AFFF95F4224CF7ECEE45C
-BFB7C8C77C22A01C345078D28D3ECBF804CDC2FE5025FA0D05CCC5EFC0C4F87E
-CBED13DDDF8F34E404F471C6DD2E43331D73E89BBC71E7BF889F6293793FEF5A
-C9DD3792F032E37A364C70914843F7AA314413D022AE3238730B420A7E9D0CF5
-D0E24F501451F9CDECE10AF7E14FF15C4F12F3FCA47DD9CD3C7AEA8D1551017D
-23131C09ED104C052054520268A4FA3C6338BA6CF14C3DE3BAF2EA35296EE3D8
-D6496277E11DFF6076FE64C8A8C3419FA774473D63223FFA41CBAE609C3D976B
-93DFB4079ADC7C4EF07303F93808DDA9F651F61BCCF79555059A44CBAF84A711
-6D98083CEF58230D54AD486C74C4A257FC703ACF918219D0A597A5F680B606E4
-EF94ADF8BF91A5096A806DB64EC96636A98397D22A74932EB7346A9C4B5EE953
-CB3C80AA634BFC28AA938C704BDA8DC4D13551CCFE2B2784BE8BF54502EBA9AF
-D49B79237B9C56310550BC30E9108BB06EAC755D6AA4E688EFE2A0AAB17F20FE
-00CD0BFF1B9CB6BDA0FA3A29A3117388B6686657A150CE6421FD5D420F4F7FB5
-B0DAA1BA19D638676E9CF159AC7325EF17B9F74E082BEF75E10A31C7011C0FFA
-99B797CE549B5C45238DD0FADD6B99D233AC69282DF0D91EA2DBD08CE0083904
-A6D968D5AE3BD159D01BDFF42D16111BC0A517C66B43972080D9DD4F3B9AE7FB
-11B035CE715C1218B2D779761D8D7E9DEBE277531BD58F313EBD27E33BEF9DC5
-50C7821A8BBC3B9FDF899D7EAA0B94493B97AFEAC503EB5ED7A7AB65763C9AE4
-247C7C9B60444EFCA66AB8108DF1085D4F3D758CA672BC89FD250646AAFC9585
-F7F8583BEF48D4A97DCEAABEB778FDFC2AC2789D6F4E1F0D9237205E6210893F
-77BC26458D7CB35B844DE20BC63A4057AEDA379413FB28B0C7C9A6AAC97CEB9D
-5F712AB7B25A697092C13D2042A04EA2FB36836E425CB0C97A9F30C6758FD6F5
-2E4A4AFF054C14C7507A4D90B76F44A240D2709F26814A24C405E59D5109948F
-87A93BFABAFE124C8D58EDF774E060F599847C6DA5E7349BBD7791505BA1AA41
-C047310EA5BE5555F3908ABC457CF1E806AE9D9ED134577DA0DCAA9120B78425
-571445724A1D1BE4A49A88C16F64C3E73CE74A68CE9F413A0186BF50527E3378
-0BDC374D6775CD1A60D04A2936D6613D91023157B2277815D3EACBBD0F5EC49B
-E10FB601A820B3FBFDE967AE881960711947F2C00DF744E3E29D6783D3F10D95
-0140A5B62877AA3A89794368D3866910416393C21EB2C8D48B36A3175ED20B45
-D3389ECE0C0FD0B8219CC0FE131BCADF70835C1ECF5B3B45D25467E7035313D4
-C9D0DA39FEA7F03DD763174C09C7F59D83D484E2C8151DB2A52428C5EA3A0649
-0AE2EA79DE5DC679CF978D3CE71BA42811E1DE2CADA4FD5618AAB6CA11976402
-57E5F5448863B4B0123088E8B1C22853F731BA9797197646BD327D873769B322
-12479C1813D4DEB5E9C7CFE623DC65CC67B381FD18537BD381FE8B0EB0E65407
-D5C970329E61082E5BC69152FE91373CB3773CA987742586E6ED8C3016011724
-E3F5266ACC8161A3E60B779F99C62483289B8F5FAB2A65A2B3EF026F50521673
-94318A800C2BADBE0F256E2B0B1BB9DB90996B17E39E5732E0932EE71D94AFA8
-6B5B0E5DAE5C3DE55A167544D9F315D7DA1DC1DE8B00E14164B941F136801A81
-FDBA98CA9A96D881EE331F4B45FF396B54F7BDF32408863D62F39AABCB5B45DB
-5E1DFB417F9E79FA062244A32D847C0CE041A90A2375EA44ED95DFD6A7BE97A4
-69A896ACA2A8F3D1838AE43D8315F69DEA5DDFDB068CC94C5B0890474075E320
-A5EDFB9E13A5060BD2C45E855F51AEF305CA576A9785324F98652B3340F6858C
-0F936ACC0280DEBC3084E0C3BEA789D8E5CF803B7D72F2E96AD34D947DAFC787
-806C936F0F9D8C7C8C7AF64EBB2EBAD3A97DC56A775279BFE6FE5A17209A5DD7
-BA86A542B70E8AEEE4B53A6A7E389709156BD02E37648648A8C4E6366A255D4F
-B6D33EB9F9A7E96AEFA0E9D68268C3A5A1A8CEC390A244C6CB8F210C608F51B7
-769E52259B2EFBF44DE98ADA262AF6132C829EDE71A0883DC517E14DC0312DB3
-10899A3662CF88797DDE4BE8507121E7EE58D83F0761A5F9DFE463637560BE31
-EA5E7931C115F68D02EE832D60E974D5BB0F6025D28E24058E8E3CEE6B45156A
-70B4C4DB0C784FC5D4A95959C6C71C70233E3EBB696E813A2AE3CB830D6D07E7
-4F790752D9E8E6BD41C3EA514EFF1ACA2DD8D1111BE62A17120A17A6BF806CF0
-9E8FB18AFCBDBF67B15E4D45A3688E4A7108380FD6DE1491CDB932A7A8CBA1C1
-5D6770AEE80289FA6D6CF1460C151A78147DCFE4CF3A0A91BD7A14091CC7BA0B
-87F2E10493A80BC1E88A382088CA09806D7324018B3C832C984EAF9E801F08CB
-AB1EABE8C8A6E14AF293B5776C6F75CCDEA7F25431F902A1247CF5A101BAA8AF
-846E3366916058BAD88CD99BE5369D7CC3B143CDC0E48DA50BD130997962726E
-D50E227D7171951F42C60857453E6574084AFFC583423E902277E7F86BCC93F1
-C7A8CE812F89B20FD8FBED0005CFE83303F61369405336DF24CC15745443E9AD
-8B49D9F29798735EF6892E925C254400DA606C657DE585088692AE468276EEC8
-4544F24C068ADBAE403BB7D643AB02A289097A3E87E464D1E2DB0E7885AE8B96
-44C08FC42CE55281BC901F194CF9FC24755DB18845D8FFE03F70A9A2D70C7097
-46B7CA5F10AAE098D99DFEC165BA71A67381F49D1F09BEEC2C0348A290C1A1EF
-298DC0B5931CEE66FB6836A3C7A09CA9D8B37043478539426F6269EAC21F5ED5
-59AB35645218CDE8946FD4468608D539E0AFC73812F41C6AB6508CB796B50483
-C268C21A06BEA059D0EE331836A4E242E243439655BF0EEB18E45E6DF5BD75D3
-1B5E0112FF2080818146214D1A6F1CF66F2FAB4A4A975B99FE8282FB68D29032
-EA0AA51B2810F66E0B72A8CEC2BAA30E88AEA22B3A30EE6C66A1DF6D4273EF6A
-FA09EC1CA0BE4E156FBCD5029381E0368F42E466B2078639AE281C31F5B282C6
-6F621D7371113AB536EFC242766FAC1696D1902CC514E8444D8C977FEB555E82
-32C08EEEAF5A8820E4341EDCC6E98AB6F0EF6EA5F5CD18D1922FDD273C61ABA3
-1AE8EF4874E27B005CE5D1308EC915999E62E44638BCB9116A69A202392A8463
-CD263C86FDB8E0CF5E25CAFFD32F824F9475232A27862EF2723B84B35DBB0627
-37579F19E21253433D9BF96F4C8841331190F924CBAE983DFB9728B0B896879B
-DE3A0D087C1E16BC93D734757D327C31866CE6B15DD65EC169CC2B9C5FEEE538
-E5B8FFBFD3BE85FDFDFCA09EA4491C539D79D4F7
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTT10
-%!PS-AdobeFont-1.1: CMTT10 1.00B
-%%CreationDate: 1992 Apr 26 10:42:42
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 33 /exclam put
-dup 34 /quotedbl put
-dup 35 /numbersign put
-dup 37 /percent put
-dup 38 /ampersand put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 42 /asterisk put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-dup 58 /colon put
-dup 59 /semicolon put
-dup 60 /less put
-dup 61 /equal put
-dup 62 /greater put
-dup 63 /question put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 89 /Y put
-dup 90 /Z put
-dup 91 /bracketleft put
-dup 92 /backslash put
-dup 93 /bracketright put
-dup 94 /asciicircum put
-dup 95 /underscore put
-dup 96 /quoteleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 123 /braceleft put
-dup 125 /braceright put
-readonly def
-/FontBBox{-4 -235 731 800}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D19
-38DD5C4467F9DD8C5D1A2000B3A6BF2F25629BAEC199AE8BD4BA6ED9BBF7DABF
-D0E153BAB1C17900D4FCE209622ACD19E7C74C2807D0397357ED07AB460D5204
-EB3A45B7AC4D106B7303AD8348853032A745F417943F9B4FED652B835AA49727
-A8B4117AFF1D4BCE831EB510B6851796D0BE6982B76620CB3CE0C22CACDD4593
-F244C14EEC0E5A7C4AC42392F81C01BC4257FE12AF33F4BFEA9108FF11CF9714
-4DD6EC70A2C4C1E4F328A1EB25E43525FB1E16C07E28CC359DF61F426B7D41EA
-6A0C84DD63275395A503AAE908E1C82D389FD12A21E86999799E7F24A994472E
-A10EAE77096709BE0D11AAD24A30D96E15A51D720AFB3B10D2E0AC8DC1A1204B
-E8725E00D7E3A96F9978BC19377034D93D080C4391E579C34FF9FC2379CB119F
-1E5BBEA91AE20F343C6420BE1E2BD0636B04FCCC0BEE0DC2D56D66F06DB22438
-452822CBEAF03EE9EAA8398F276EC0D92A7FB978C17805DB2F4A7DFBA56FD6AF
-8670EB364F01DE8FCAFBAF657D68C3A03112915736CEABAA8BA5C0AC25288369
-5D49BD891FABEFE8699A0AE3ED85B48ACB22229E15623399C93DE7D935734ADA
-DA7A1462C111D44AD53EA35B57E5D0B5FC0B481820E43222DB8EFCD5D30E15F9
-BA304FA879392EE0BCC0E1A61E74B3A1FC3A3D170218D7244580C7AA0DC65D19
-741FA5FE6F8CBF60250ACC27454BBF0897CA4B909C83A56672958752ED4B5E79
-E18660764F155E86F09EFA9F7685F2F5027EC85A775287B30E2069DE4E4D5712
-E7D033481A53A2702BA7542C71062173039030CF28D8B9C63B5596A9B42B33E7
-D922944A38713383D3648A4AF160A3B0C8F3379BA4372BE2E7EA49AABA75AEEE
-C5DDE1D8BF68483C3D21271280ABB91D54CC819680322EAB72E1250A760BC8DC
-FF798F2ABFC4F3539392985C4CB324B00072295FC160818BB0355FDC4F12E39B
-984826450553E3D271F03D8DC2D12A92A4D32034FD16DA13B876D88C8C097384
-46D8D7E41CA1A8979F9B07EC3337E70CBBE3A377235B04C79BBBDB66CE1C1A41
-89DAB7CE91F2FC0CAF6DDAD09992D56F72299068192610EE3DE5DB7CF6366B4C
-D74F414484DCCDBA449BFAADA39D0F27574E604E31CB513B18E3821A33076151
-C2BCB6E957C77A0AECA48C587ABB5E8C7624D56B32F80BBCFDC874AAD6EA5119
-C9B06886F08CC7DE5400E0F52B07483FD4BAF26C1556CA27B259FF3DDF71131F
-DFC05D8B14C28F2073C460B5011B76D84F7917E919E50FEF563B5DEBC5CE6923
-ADB72392C98D03CD978D3FC207A52B91E267E7ED8BB4531E8BBAC113DA68765E
-E23FA502BC71CFB91E4FDCA39BDAEB7FEEC3588B1108CE4A1652B770375724A6
-508376586216289093485CDDBBE68956210B6FFF3953D097D66BA31D19CEF2A4
-35A33AE97547B81426E58F9FFECAB633C6433E86C32130665210F44F10F3A2F4
-EA31540D0BC08EA4DA2DDE3E8CAEBE52A3E8B037632B235D4ECE3CB797A5A939
-12C45C282783F675060040FFE2676A7ED903798EE3B86644EF30D3B461D4EC3A
-A1D2E95C02FF1531D93180F66A13E868C9E1FF1722FEF6C4F304921961D4A10A
-6AE943157B1B0E8871BEA71162E5246080618A96D5B23FFA8F420F2AC74BFB60
-BFA3BAC4AC3A320887D4090FA3EF7071D2E1DD5D70DB98A01B6D315271D10F2B
-3D9256D96FFE8D8BA0F4781B74490C63686397241640B08A08FBE7CC9B1FD0A8
-21CECF0F994CC97AB18411EC8745F5A6AF56010C22E73CFFCB45B82DB68E6552
-2E57A4C06B96C55031442EE1F53373C50E14657ED320D9ECD21ACB26D7535DEA
-D36F68D8479E0B28185EDC21207BFC130315E7341A85018CA22A251ED1BECD7B
-08A33D61A73E061B2B1B6B23FAFFE725F967F1713EB98446A9045AEAE23E725C
-ABF73E2B90F429D6EF62567ED4140AB5648EAACE7DDC8E61B456C36D377418D7
-4BBAD5754ADF5D3023EBF5E35886078B9553406EAD40A1328EF917A05730AF7B
-1D776901B4AEFC3444FD3FF04EFEC96FA9ABCBC841975993E6E829A1732D8E56
-CB51C433510AF8E81CD8693A9561AD2C3F9B9737C698FB07D42C089F720E36B2
-997B18E2BAD498424539316476532E3B730962F63C8BBCB9C6155FAEA379CB8B
-3A95089641FCAB3E3CCC1FE6A2BFA86A8E80668715BBCD87FD41463D2271C067
-0BC3563F0A9991AF367D47239E3B33D9E77E40A9D654BB19617957B378C4A54F
-1309F83F024F5358AA13263A463E6A2A09B87479EBA38D5DA14B98F7F92E81E6
-0632B36123FCC0B5EFC461640D4EE2AF6D3466E7946211354F4AF4523C84F329
-1EC06802E64F16A88592D50A9486DBB8BB60FD5BE6736262D92DAC0D707A5050
-3B10766162EC123B8C1EF25EC6A1E251A260F7A7BD767A6016BE6A48FF43EEE8
-30E190CCF23F253BFB4A400A7135BF9420036747B5F02A7E51314ED9FAB5D38E
-823C41FA2F593245192894F9AFDEF64E851D3F7046D7FA5A5D379AC6CCB6266B
-1C275A70454CCDF89E503F905A3394B5A29C58A29A9D32102DC6140631190E90
-D0B8BA5DD74BB221020A859C078991376AC1C800148818E1ADB0247BAC2B30C8
-A253DA8E5AF589D782E28C8B858FDFF43B8712FDEBA0D521F1F2AF52067D9EEC
-8646EDF30FF7EBDE300812E02982DD71D2B50131B83C9B85FE0B893BE9D76C57
-F8D66647DBBEE5BA35AE21569655E3360F949C0FD7EABEDA4517E4BEBDBF33C4
-E6C4D23E7A85607CD8A22EAAC998C8BDA22B9DA5487677A51D506887E0FC0753
-1920400D848ED4622C1A0362B81EB42D4BE8409C33402FF56B4D4DE84484D405
-3E9E1ED8819D19DEBF16EA2880F7E18457E118F790F743F77DD4D3FD485F4567
-CF519CB64B5EFA0F2FCC33935F34A1B1C0E13A6ECDDE0F46F8806EF6B4BFDA89
-4C96EE8EF41DC6D3639E05D28CDD68BE7FF9B4813C40E2DBD8128C76046745DD
-183723B7C99B280B6F35511F3DF5C68E3EC5C228E0F3D542FBB3E2990882940D
-360ADD51CD6C506E9B0F4B92FA81D66A48D2E0B88B400A61B3A3C63FB901A35B
-794B3FE5F24FA5C19A0ADAE1CFD39989DC526A8D7DF2DB68202B04625EABB9A0
-CEC29A7CD46F89611F20C7AC52EA934CDD51A9283A730FD55316B9F3329CF882
-5204A536E39515D87C8DED692F6F42D0AEED90858D6B353C91E5D77DB4B7BB90
-51DBDB22462DD823FEE6A921F2542E905BFC7DAAE91859F4A426D21D608EB90D
-4F24616124F04B2E02CC30F5B353C1FABEB9D9149845508D7A7A40A2B21C5FC0
-EBDD46DECDBD209C84115E4A70989B497F395856A9BC02051DC3AFFD1961E87C
-6682FD84581D32724B7F74B57A4050311D18E6F2A6829C06BCD200C8F2384FB3
-B5283BA05A4AF66BD5C8A0318518205B3AD5EEB9AB008453AC996486D9CB01FB
-AEDE528ED27726D5264F5C884705815C92A44827F9AEE999C985C55B1172C2AF
-4360499ACDECE51B658BC54C7CD1D710F762AC9B9F55E94801928B6969BC9EDD
-4EF5ECCCEF7ACAED450986E1DF0303B17C3305F9CFDCCF0F5126389D1F914B6B
-65A162D11F45FB3DAF1A392B0969651946F6857A8308311C74CD535B66AB61FE
-E43F9F6289AE48DD67A0267065D11A614E8AC9D1AA50FB6A2903A03802D67C41
-A85BF26F952DD1E778EEB30A7D37430E0AE050D2D53F88A42921297200DC6D5D
-FB5CF37D6C4D36308D7DCCF5F6114F174819CD274AB248A7D0B8A8509462D6F8
-D27060BDE871964E48D5452E267BFC78168B1E730121BFEB15D8C0FE09E4E9AB
-628AFAE2BAB5C1FA0932ED41B943F83EF9FA2D89189CDCE25EB970633E559417
-F5027B2DE02F1E8337CB7F3B20E31477A7488DF661937BF0EF4E27EEDCC5D8A7
-351F095688240347F51F1C5577DA963B5578964110D91459E4A29718926DDE29
-F674A75EFB64F1BF30364C4DE94E69769ADD61A60EB101C4F281066C52D81014
-295AC8472CCC6CE76A2E26E5E55B748744EEB0C86A2C510542257C437AB39624
-AD0B43511B5747DC5C5FF0B01CE677902E9D89BA25235189E734B2DE5C1EFCDC
-2D563CD581045F4222A4DD142E26FA5D265AC6E46156D78342A5725E6B46A1E6
-BCC036CF7E7954A24492D2062DE31854F680770609EA825DF45E2D385892BA73
-1C3E675D38397A61D1DD71FC82319F750AF899CCE1DF03E8DE8A20B2699BB5FA
-54773704F027F85AA19ABF09931BAEDD1B5E68199479AB257658F906D6239A38
-A4B53F752A0755397399DE09BFAF480E21BC00DE5A62DB344A2E2420894C822C
-F4E72B03A65EAC98D8454EB23FD63670C2EA9ADB79E2D39066856A955259CDD8
-DA071C5787C3A6DFA69AC2C23D8A0BE3CC4A5BB3051542BF1EAB0EDEF6762989
-1FF1620616A6A12E3BFBC39612230497222661467DFF903E1C92F1D5503E5B36
-D3E49853E7C387C488A55BB65A8F2211C5B5B15643240329570F42808ECF92E6
-681F49423AC9B53AC09FA055D5A2C09B9CD2F6DAB62C061D81CDF78FCCC74BFA
-7CBB7039AB1545A43C3A159987D17434027C382374F72B3DB70D6982CC6DED4C
-AF695A53A8CCB2C12F1EAF677128F4A384866514BCF60EF5C36FA75EDD1E72BD
-752916711B97DB5AE81CC701CB75C64684FDFE41903E5B3A63F5B782D98AFAF0
-1FB3BFB93C86561C37F92FF273A37FD0669E25541740E873406D684E51C118EC
-B1A01C9D2556319C958CF783CA5C3E7DAA8B81CE19A00E3C3E8D3C7563BE83F2
-A1FCEFE1F6503ABB76A64D0F41E932F1E83EB04895FD8B6B98F2EE8C9474D611
-378EE1ED84E98C0B9BFCAE75EEF6527D77672AB87A3AEF5EF13BBB2C4FBD4ED5
-416529721D339D2561A448BBFE416ABEA7771DEB40EB2C35FA3FD2A307797BC4
-BE8B5D308B76100944FCDD828A141D52AEB2F15ED41221409A24454E90924AFB
-30AA3786E8E88B45E84ED1FBD0CDC019AE0EA86782BA1D37995BFEF4BC9ECFF3
-9E0492AA6CE63ED90E8FBC4273D99D1A82B3326EF1AF658AE54775121A052327
-3F91F8912082BC63D1A910FBBAE56E5936A0FDF1842ECBA57CB7DA0699E40595
-7E4749BAED9D74668EB10312771E7FBE95C469F82B728C6A5D37DC0D55B6E8E5
-CD72563850B0905582FC68A9084021A57617840286C010E1D140499D163908E5
-CBA3D56B4BE7422E13568958FDFDB2C14C298F41C268BC451CBCF4DF5A2126BB
-9585886AACD1FE4041B368EA5BFAE27CF34B975E4F834401B3AC8FF679CEB229
-177F4CC8A5B887FA39BBEBDDA813CFD60168BE35DC0D81C968655D340D1E80D1
-EECD7865CCA8A5A190E3CA768EF9AFE7D98312534AAE8E6FA740CB6A7FDA6944
-955AB6A9F0391D4410A0ABAC6E37CBDDB354E96D775FBA0B2EBF766ABC37699C
-28B6AEE9095D392CEF085EB906D1E069E8C6C31EACFF214AB08AA3A68855882E
-29B67E5F7F0FCEFCCB36C01F0638ADDB71900C49A8BB1F552B2769715738A59C
-C54D46C889B56AB1DDD2A6D69225F760856B09E500C7F3980615666DF8D371F7
-96F3DDE5386E6F1B9FAD8957D2DACAC2399A13F3DBE63CFFFE2AA9693982BA88
-D1AE9AC108D85927812526CF8564D23C714E0E9F02F24018747339FE7F7DC960
-879B5048C61F99190759A672EE57FDE56F5B4A2BCA2E7F7A08B54A7822404A0A
-33DB91CCE89E5298C8A5553F8A3627ECF64EFD36CFD40AED772394FCBE360EA0
-47DD6BDBA85108A108683F123F196287C517E6ED3941F8F8314378AB8A42AC99
-774B050F4FDFD689387378B4B557C0A719BE8EACB8C00DF44F66784582B7DF1C
-751C0434B05AC64C468866DF6964DA63217994395C309A857DF3CCB1918CC422
-24AE05FD2CD4B062B93BE619E0BE1598AF2BE28485E65D78C0F3F225F9DDC477
-D3C5C74258D6B209F867B0D1710D5189F532968C72A0361F2158675F4DF7F835
-EC2968D3D2F1D495DE30106441F93FCCB5E406D141EE8E79EC384CC0185BE78B
-22F0F33682F7014C1AE2C81D7B61654893F73A89B9647581D73F9E72601C4155
-0440DACDAE4E181DA31312AEB888C1E1E4C2DC64AF36D390646FF43A91BF1DC1
-DB92648B31E7136E52F4712196279A5981C96D82181D10DF0C88B665F053FA30
-7392B699E424FC7FA5DD5820D973E70F964F2615D5148FE81BB6F5C8F326D170
-16249F7E4A9BB7710043721FA28E3C006CE6B10CB4C846F5203932808F53A2FE
-B42A53063353DBA5484F4D375E01D3755ADEF10E1B398E048E8774F23AFCA558
-335F945826289C8A723D66B0C6A0A0533FA77F5BFE94731616AADC92CA0658DD
-6BC00965E922501953D66CB2CD22197500A9EBCFE5609F4E2F66F5DE2998B44E
-4ECFA94CF29F820A34B4A417B23C61BB03679D1AC09B21811901F4A72160F10A
-ABC63D877EDB8FDC742589FDEA04F01F03347EAE11BD8D24DC77C143D4F7C358
-0F7E54214A9E716DE0B12256283DA08DDD82CA0E56B902667DB791E196789D0B
-0E8AA11A5CABEA43C4D17CEABC4802A318D19E1FF4E71C4BC733C25B7B79E37A
-C8C392A00A14F225B2C2CDC07475B2919C5442CA095406F7FAF674B3852A5BD3
-B8FFC4D41A62699244FB309333E9F924DD0B3F9FC5817E4E6749FD5665347F29
-887D06CD183684518A5BDBFB16AFB6BEF4A0138F76AC37E6C321D231D5CA38C4
-46A779206A04EF37F0AFA31E2CCE3F67263FBB3D97D2E012C25BAE412F6E7298
-E6886D2EEE8B16F61B37B120729E0470A020D63CF61EFD44B4BE7E0C853EFC25
-2E63D9A69172104D1B7A40F3DE08E174BC894F71373928398114E136F993BD07
-E4B06CCFA7CF22AF501C53839F34B6E4D28E7A2328A44F79864138CF7ADCE044
-A965EEEFCA0BC67CB8D6AFE2FF647E55B0B6E93805BBCA7532E10D27872EDD9C
-B09FA49E3119979EA371E8EA68A8847056CA6135A6F5113937AA3D1FF39A7313
-5B379E814459CC40ABBD6BFEA1D21E72608B1E756921553CAD3DF3FF5856A1AF
-21AF7AE9CCDEFC7A373DB1572F7810122BDC77843D5DFD29CB8E505A3C956BFA
-DB670EC7AC3F620BAA7BC6501709D7E8FBFDF4C427B07197B17EF5B7FB003206
-E768DBB730A613710A8A8A851E302C19EE1CAEC5893A7BC6C51CE68DED095DE2
-B7D01BCDD03ACA32A66C8F3682D2F34F8A6A3AAB335F2EBDE1211ECCEA162C81
-0DBB4540B5D5FEE19E6D81284CE604A9BD3C58DBF7CF5290FCF386D28D540848
-BF72A67B20786A850F3DA9D5EC6CAF367ACF7744BF6EE3DC1D09A3ECC1C837BD
-BC269DF5B67D84550BF0FC8DA0C3DED943EB85EFA6740B03E98D06D9774DB428
-E1599D97D5883500F4C79DBCAD43FA5F1B3A15E14ACCB49511FA8FC2C8D22362
-F610B2D1238FDB9DE44F9B1E24B356CBCCD098D096A52FED8C2415AD191877EA
-46BF23AA5C5E93FEB90B2A828410A0D9B44E7991B70516707D11F7CB368D9704
-6D4FFBEC5146E3ED916E6B55343F5A006FD19D204C1AAFDFC529FF9588C17291
-5A02A456BB18A2C1DB95E2DD55FF92F56B82B0ED52EC40B18C88CC65DB53A20B
-E90646A8799E6323E8827053075BDE18B844793838956FD2DD1B2015366B38CF
-4CF35EFDEE6CFAC1C82082767FE6CAB1AEA3393E197F7960AB2929D8A3B3EA1D
-F3F4C3D87287F2AA02B7B2E3D45E29B64ACA4AD16CB5F2955FC8E5B1ADBED7CE
-19980DFCE38E9F0EFD934AE81D4707FC6A200749E4D592ED8ED6B94386A6288E
-8F1F967706261F54A455EB62E607D489FB5C6C78E8F036E2F1AABBCBABE5BF2E
-1FB18804B46BC83B254FBD675B1110DCBD913D877BA10C6CC95A47A9B259FFF4
-5E3ED20F1D0D8CD6D1689BD0B6BA0F4CBA4FB1F41FE13D7D6296D24FD59EFBB0
-84658739E465622AD4518E896072486C77DFB20597E0E2713EAFB9DE3EA4ED21
-EEBBC01EF63900727E2466A6F1D8268CCC2D350A311F76CEFC805706110EC46E
-1CC2187DAEC7F3D5829A8DE0F9570334BFC64382B16277145EE04F4B34F4644A
-A2984472B4EF947CBF153E64975B6690101687719EB71B6238647F55AFCF36ED
-B40AE1271D094C72A0B100A36B4976FFF3E9E917EE3B429BDE5478F9DBD79EB2
-EC91AEE2A20194779FD6F06A30056CCDDFF6D6A04916E0FC538B9A05DFB718B4
-99821D9486FA27AF9ED83CB7822B4B5DA84ABAE6A1A629310C226FFD0EA4CAE7
-6EF08B3D3D64B996FE67EFC842500819C85E60C667A908D96B9597F3C9006276
-53CED9FE3CA0547AFCB391FF2D8E56630D2D4B6BD74C478819F6B50A07571DB7
-96B3B53F51AAEC1E986DB793610F712D8A0688F6CC14BE3EB1F0A480B23E1726
-EF3DCC55DB084FEA2411683807B65F821B41A456C689ED1F0ADD1AA426544F85
-405DF1E9FC9CD97F2074E22EC2EF1D7EFEA983302B7162E643FCF80B43EA9DAC
-8F8066DEF3C897B0942677E08F21C76CCF82FCFFAFB86A368DBA814D66DB4B71
-3C3CB4DB82CF834587316F3FE874151BB168C832A08FCDF7DE38CEA93E969443
-B7AE46CA113838124B1254CD72E1C1EE2F5D7C07F41A0EA943B432634CE66939
-12034E0014C4C2A424205F45E6229D9A18E625C73D99DE139CAD2EDBCDCD793C
-9605E2CDA2CEEDB9AB8E5C5BF80679816924DAF2F9FB91C2BF8949E410B1C40F
-8202CF709B3C5922982EE5E64C8E64E8A76425E678B5D75985F50B000CD6554B
-44B7C23A3EEEDACCE7025D956EF7C62A42B6F29075A1CCFD080D0037E60921E4
-7533E5CE9EC8606FA2D86B377535641B9810680F55E612E72FF2E29D0EF70352
-7A2F6081170F60ACE4EB9690786CBB6A0C4C8D47987490673BBF6AB375BCD426
-B1F2E2EEB6158A9F937188FC4C7DB43D7E1A9BE88B4571BAAFBBB1FA320A574F
-61D044313B4F408879CEBC68D037EE2A61144AF88D0363403127EB57E396100F
-D66B88C25763C102F78024B47CCBC58D3CD3012E2A4FE8B66DD6D5CA1EF6F110
-C0EFDAEEE437B663F456390595453B3229138B3E44438DBC19C573B3AB3C1A52
-B9DD7081BC886D4476BC8C48F3CABB4041021368DE78455EACB45F884E5738E9
-108F17402183F1292587EDEB58BCC389F0CBEB9FC519B8FE54E66661CEE25E19
-65210B8E1AA6E52906F964B035A0060F654FFF983B99622C558D0E9C87E7BCBF
-0ABC02516300797D53254D25ED3FB28EBB55EF360865E351E5AECDBCB934868B
-2A66BAD3E1996CBBA5E8299D788E3CF52F40094749D1235D7A33D8D5F088F8EE
-67FCDF48E11A11317534CFA7F8B07370C499585EA550DCECCF5F45CA1DE498BF
-1D73D5ED0B85053912C0C01E82C93D52AB0ABAD1D510C8A3C455219AD6679C68
-A5F90F28878173F0A758C0BCF7443DE9EE625C20DC705D50A9B14199CB1FE397
-E632DD86085B15D345431D1893E28125BA59BD0314CD04B3C431EEA8F0398C65
-1ADB99D92E29B892B7F3AE9A221A2CDBECCD6E04751B267B7CB93DBAD18578F3
-17E80F569AD02CBDF4EAE9CD3FE64E6ED68A349C0AD0A9DC78FF3AF41DBDCA4F
-0B0239FDADBC0751D63F691845CD22D6A589BF2B96C0FF910BC5AF4327293BB5
-0350D1C331FDEC33BA49285226815940CF85BE0D2F019F10F09916D4A337CBB3
-E46112C84DC3EAEA3C53E27CF5BAA603928D06B1C462010D85FB6CB759A0ECAB
-46B4D46DC0E91F7C1F08409A11EED50D497B14C30AB61BC8B148ED830D9B6B32
-235DDB9E85B3239D8ECF031A60C2B85E0FDD2FFE81E9683ECD1E484E5A74D463
-357C2329C22BE5267D6C3003342942CAD29FB842DFDF9571B0EFD786F9BDCC2A
-DF53E390CF0C37D5642400833FDF8772275705072564EC633CB8942F18C21446
-3678F63D2EC6E38CBEA040AA6D8BD4037E0130D42B2692B1795A7D2C3BE44C96
-FAAEB73F660FF96052D6FDC8E88B6B4A7E35612F7ECFC1D145B9D82E380A170C
-2B1BC305941013CE1B213431ABFE2926DCDF246918406B3C60A0819A1389D4FB
-477114F7458675F8BD768D4C965DEB05068D3E0C0439529E423FF7087CE68378
-EF6193CD0C0623B728A288D2418FA7669A1A7CEE0B9A312ABE3033A13DF93080
-0FF3659F3458D2517CDD6E353A87E55E436B58ED64478479C6D4ADFBDC023BE8
-F547BF123DC849142D789FF42CC021878B90E9D6D06619D366A27017B55388A2
-669FFB1C5A4F8932C7CD64957F002E23B8A23337EEE684D766F8430030D3C763
-6F319FE3C8FD64106B97E789D19AD7160EA2F737D22E845DFD11EFFBE6D997F4
-C14DEB5AB50A1E78156C9CE1829F23951F31B3DD2B0691680209A0C6188635B1
-4DE9CB8EFD55AAE48CA48FB6C376AE8855D565751C4DE82E140F5D92385DBB03
-45C2D760597C53E7AD9F0EB0D1B17CAFEB5E6104F225900D3A62CAB700EF53AA
-BEE0C19735E5D8B6A13CE0EC8414A13F400C5E0DCAED14247B72DF7863A1D8A4
-0AB5B475AAC573294112482E149F1AD9E2A3F2EC9FD9A123918BAC6569CB96C3
-5E304EB247EDED07586F3F7C0A203311B31A519D815A3FBA267CBFC4AA7ABF4F
-A630BB23A11836E1AE8AE839BCC2947C57977A32D1231B90A0E690254CFD68DA
-0C9BE906AC2DC52C14F27A4925AF8473050EB4A3DD757975A30F624006B99CEE
-D786410EACA5AB126C78B7E1BF3FF4370EE15C3C1FF93AADF571DD570D0AB771
-19E00DAD39C0331E4E7E6FFF0751537863AF3739E8D74465D9521B9B8451211A
-B9C4105EC0012CF87CF933D5C485867E979C78BB628134F94240A33BE21D374E
-7F470A0916AAEA727882ECF48D20E7D05541B4FB1447F7776CFFC30F05E37BF0
-D4531938B5461873F881CA325DCCD57C3FC3A5B957D0347830B14EFC36C6A97B
-2132006EA90842B4E1595EA4F3D5DEA1D2366629EEFB535F4A9B810E87570466
-4A0CF3607546B61562F8D8BCB8E2A02954E6AEE53756F2DD9CD872E656CCF855
-BB83B9457E0B80C866EBD7B7B299A8FF22C69DD4BE84784A1F5384A25A4CCDEC
-47CA332CD8E7B8B43E5DE78956353D12E37AF886F862559C618B49DD26A2B4D7
-0700D76476E8965086F877D8CBC63843BF9C577033A0365CB58D6E145C4DC7DF
-7ED391342EFAC97162281031CB7779082C8D3693DCB09DABD9CFAAD97CFA8F5E
-946FDD15ADCC51D6EB279BE86308E32CAA6BE12CAF04755D849D9D2C322647FE
-9D2B78392B907069AF72B794196C176DC6C6E456F99FA3A72376160EAE5FDA73
-FB392A8B2674A7E7055D9EF2ADF6E4C8A2AD65BB51BABEBB2402F4C4614F4E37
-1AB4F1A00FEFFEC1A70E98887EADC6E3B31FA92F43F10D2D31526C5049EF39DF
-033FE0549ABB449B02E345571FC49FC8A3177F20D518DA588CF68CBA7C6B9222
-2D1CDBB8D599B3BBAE75934159688BDAEFA796DC12541DCA4A57423D8EAEE2F8
-A37B6F1BCE977AEFA8E901B5827B6C10E92A2BDC59DF08B371B0CC107FC8C41B
-1F1E1FB12E5C750FD1C2E1FA5A1B3C1DF3F296C79BAC9A1B5C0E68E539AEFB94
-25860738132CEBE3EF3BC9A2A5FED3C7A450C5D601F849D6E746A1772D9BF886
-E169ACCA26E11A8A3A16295C8A8A8DDD163E815702DE1E1B60C959D1AC4DC634
-6EDFCE82D8F03E99FF54843D46EC8CB471F69E4E15ED1160BAA40C2CA4C5E8DE
-E9C2D9C20026A20D1B50E172CD660129F2C3B60BA984C2EB2DBCD776B3D082B9
-55991545090F10F28E78B3A528E6244215F45C9D0E4F36ABE3A1AC72F97497AF
-9F0FE246B389A8FAB2DAAA0CB7C9B828F0A90903ADE5EDCAFFB80C09722FB3DF
-AB268759C00BDDCA1143B8C0C7868E76EEC9E12F87B56BBC03A9A88B1281BFAC
-46B1DD38C512EC8A61F0321546560EC8B78262F983BD0E9A549779DEE8590FE3
-A143E1F39C10504CD872EA86CB0C413E80C8E14502882665591D0E977ACF4448
-B4A1C8B3223855412EB3F2318FAC5FBD42496DC8691B7171967C5CBD1DCCF2B1
-83AE4D386A0C43C0E1E8F22993C1E1C645EE8CF503035B868BDFF70E2F8EF129
-B52D5EE2029DC77E04EE90843839CE6E4FF4E7CEE84AC44D03EAF3BD94BB79AC
-2D02B961C6983AF44B446A0A66932860C200CFE84B45C180D70DE898CB3B1E7E
-7447109D337783DE82F36AA8C02DF9F104B11568CA69844BC2002859E5CC36F2
-3C2C4BA170F98F0FB505C458958A653ECF30969D2F99E39DF8AB3AB7DFCA6990
-D1D8D223FF9A60DB9E68DE4887D68A9DE05452B3396DF29ECFA30053ABD15B2D
-60BC3233774765AF2E0BB7638355D60D1582B9D61316775DDB4927CA365DEB57
-112118CCDFB49BED39D69943DF11C5E7A5AEBC4F5DEDC76CE47753A5941D2AEA
-8500BC1070BB2C256211468A97D4BA17D612D34343AA1AB7C7B5A9E1F15F787B
-2B30D5F7A87E82AF9B052B28F5738424D54BB9D997CFEB8A46BC24FDBB173B3E
-8EA443CD71DF13B6711287EC6485B9BDEF175C5CBE40D49A9DB300D281F418BD
-80756C07CFEE3F564B7630973C93F9517FA0DD567D72D8C1BD49EE95F143E416
-C80843E7A915DBE131D52F984B60A044A6FF90C02280ADF832D994E46ED3E4B9
-3FBB362FA70A9343F93769838BC7589CFE94E0FF90CD275721268A38E4E75C4D
-A21D72A9A18FBD72D0B1776E319C19F49C4A23FFCEB85E4BDF502C790389CF34
-8F471E04F581C205A231CDAE06AE5509379C6A487D276A1CD86B97ECED33470B
-4109F290848C76ECC6C39FAEE56AF058B4157033DE661FDBE9155FB973A64A42
-7857D2634240072B6D31B4FC4684F8BDA37244536C0C5FFB9F6050E919DB1813
-8834F38552B427ED88C3B44231713D85CEB2FF18094B07E5F7133A42CB495AE4
-AA76A641F95BE5AB96264B5AA16054C1967509202D25959C00D31A965C85A72A
-0135CBD8DA2FC786A78FA769287A18575C45DDBDB66292B1566D7670B9BC07A2
-B3A082F1DB10E958D2C48D36B318581A3BA082CFAA71D34FE0D82A1FFC21E217
-D21F01F76B9F53DC102FF7ACB4AF4EBA17E8EBAF4F8A80C1B6B19EDF118D5456
-C42BB8E0A06F7E93EA6FA2B5C9F96A379ACB3D6F6AD531B087EC18B0C26B88B1
-4A3B71F48DA3AEEC81EE95BAEE578DE349AF07E3D1635D82365231217BC57C84
-ABA6514AFD4688A2B8ACD00EB0C5EA96556A8C08601FEC3A0DA49C46A3ACF4D8
-9D0448894F57E3CCCBDF814E1B6F043E2169C42C1F06D1787BF5264567781387
-5B8DA433EB598419D68A93B9D2CB8FABC0E5412BAA4D61AA79BE778344944B3F
-33A9F72CE4D4E4352C67514EAFEC9084015A39D538C885C4BEBF6DD69DF3CA4A
-165584B4B719431AF0C6521478B31473D67F003D7245E279E841E36790224FBC
-1A0E9A7BE61FF8EEDF8E0594D414F95F268DB20F74DBA7B8E69B102DFC53ED9F
-15E5FCB63BCC7791F44967631FD662E8CB0ECDE45D8E73D777E66F425517B208
-35662DB1798020D7207BBC1778E8BC8DCA33B5594DB58D828728A8F8A4F7F721
-C01E9EAD7F6944D6F76137B828F9CC8C4B7068F2A275EFECE73950659A4F4079
-FF9D60443829FCF1A02A86E26B601BB3459ECD96086625CBF3839610897F9BB0
-A909C0CE853D66BF43A31D22A1317973D7D1CA1F2150FFE5046E5E598FBA704C
-8B42DFB4E154BED8A6B25A4613ED38045046AD6073342D0DE8A6CDAED7055C55
-09799C4A8AAF473E3B39867CD33DC784896E65185539D81111FF069DCACB6830
-D390D19BBA6A0923DA6C42C5AE6362E43999D1F51F16F870B88AF25DA49F6F7F
-B937BD2F6D68C48110FB415DFD11FF4E3DAA27B6F620D38D5A6861F44569FFD7
-3DEE8A02B83A52F7A7694F85127147F71735502962443802EE1278C747E2098D
-871E59D72321B19E488EBD8C3858B6F24C80C5EFA0CD7D60D83513EAB7480AFE
-7BB6439FC3F094C8A75F06D391A2F89CCAB97B709622A243D991CAF954274A2B
-485B3E096B4B29CDFF8F1B38B20C59C58B5E503B4B7C8F7ECE5E80268D441A70
-C04C699D93892EDFABFC9D3577BDA1F4311B965E73B2F0E7DC4F1EAF3E57DC2B
-DEA096F26C6514F08001B043294F1FF6EE52F7C22F2344E8A604CF1CEA564D0B
-455D22A3172656ED7D7ACEF29BC3B6CFA5CDBDF3D68222A7CD88DF73A92CE846
-E473980929E931D9985C2D59320553FC15DA410A0406955F2BE2DE347F28F0D2
-11CC0A234A1A9716CB9E5B38D49DF17E8D2CDB4A65EFDA11ED68A78F697D8787
-A7D287258E982FAB96665BF1DA5ED3DC0AC0DC76CED28E4325D35E2EEAD48870
-702A44899C59386A48ADE3FB78AC8CB20E170853512A987FAE5C97E3E04847E4
-A79F18090A5C76E54F0930735BD38AB5C85F823A02F484A86CA11E32DDD5C722
-A1BDA642C7873947EB32465EC7AA13D3B7483BD6118C7E8489CAF90D6D735202
-648A45E29816EF808BB1CD1CE3DD5C5050D4EAA62755559DF251D8527832D62A
-CBD80EAEBF685C2C04403EC508307FFC90C214E919A10D6AB1DEEBA57F7AE12C
-66B0B433AF7A0D00781821E106B06E3A4BD302C7D2E63C466316B29F3675D826
-8F31B5784194FC3E93B4B9EC73086D7705437252DAED5EECFE5D7E5004F5A3D9
-EFCE8EF2281EBDD763F50D05C57E1A3B7958A4053EDE78C5E5FF8A884502EA60
-F5D191071089C68B2AB5B478A70F61BB3F94A476E46A18C8A5163F5FDE94D514
-000022438B8AEBC536B2FD5F6BE36A292C2354636867D0F057E8060B66DEAEBC
-BE69EA1E18C882438DB9358F985DDC00BA2882B37A9F34993512BFDED60678EC
-43BF2B2C665610861708B37A8C6DA528744B4B96EDA773C9F55106CB19E513FB
-8FA8CC84A7A93F8DC77F8E5C303F7280058886E1CEF5B7AF061DF176F8063FBB
-9146E0B0A06FEF0ED5F5707ED36318B6770FA9CADB16C9A3FF8BC81618C1241A
-FB26DD47F36EB924E86D1F264664EAD6D8A105B2047574CB323D27F6C26E6B27
-D73C08FD70759844209B3FCEE915BEAB36B8CE14A7DEFEA03CC09FA0C65EE76F
-61C24CD89BCACB60CE10BB5A68888110A9224B0DE418FF8185A8150EA81D3AE6
-6E9666E2F919B03850B57EA4BB5D7009153EB44FF2CD80A847AD510A3B5148EF
-A20E78DA6281B8280BBED1A8222066D450BC60E746F6C668A498FB1D8ADAB761
-BEAC17CE0AA4803EF37472B749EA982D60919B8B9939B89F6B4D5C46334BEE37
-4C0256740B1D2D21E7EB2D57C584E7EE5856D8997D6EFD85F4A0C1BE1A9FB8C6
-1DB2BEE1990786B249B602D540FBB4324AA95FF8A1ADBB51456F18C6352B219A
-3E246E4547E021AFF1EB9686EF993B1C81846A73E877DCBF55E83E3680F4EF02
-33EF0FCF2E3717573296108835938CF61D740CCC3F59095D7DC62F9A3A6A9EF4
-1CEA89EBB4D77C3E152781E6D800F9FF396F7AF003BDDDE5A777A63C7087F8C8
-6B46C8AE31807048FC1B3FDCA85F15FCC65C4004031CBF43D97021361FA1BB9A
-9E3B4F9AB019B416EE368C697CFAD0C5C9F98CB8A84FABAA1F4EE75B4059A69E
-C028A59889FB706A122240E5A66E0CD73EF71DFBB1C1C1764EDC20FCA679CE9B
-53CC2B24E1F8EC118350AF6FC5A74D651DC3DC70284018D71FE15757BB9C4ACE
-814FEA293EB49FD9017D82C503EB6501286DDCC39FA79A1997A638B40C0AA028
-1D426E6308541C58427FE4F3967D48EF4B38446AE98179556B9196A417066CEA
-8DE2E49358B3161C17E578F56978FB46CED62C80969676AE0F363A5778BB0F1D
-FBA63EDB19607DCADE0988BBE3079F03279B31D14FB3C92DE1DDCBC39A902C6E
-64A7DC11F569FAFDB26D67A9DDD01C98555CC2D2DC0F32EF43803EF2AE620FA6
-BD01D5AF737934FFBE75EE2F6CED3F66080A1F07356913D2E3CA7906547AA8E6
-E92CC4509AFBC8CCA92305F4D43F92308C8687068EBBAC0A115E71863EA96C22
-65D1E0FAF4FAB2589991944B8852938543D2BCB8A09DA2727308171311D75ADD
-600BBDEF41365A8BE1015C10A4FBDC3EE05DC1D4E6ADDA50AB8C105E425BCCBB
-81D3A30FFFE0E95FEC8EC56DEDC117D7A3872D85006B9CE3E94516C985CD26A7
-CA7958A3F88A9445C098DBD16A17AC530465B888CADBCB31322CEE54E6E47F33
-A7200F57474260378A2923F7E8E1A00C7F728DDDA98225B4ADB1084C21B623DB
-2D2E1F0CB7824CD8DC869554A106ECF0288AAE00EC53670DB84AE24CDC6C819E
-3E9ECA92261CE1BB73D4DCBD47016F1F9BC1C890CD2F310412081492ADB56973
-68B3EFFD3DC07DDD773E98416C96EF574A17DDD774AA6EF821545A1F6DC4B409
-22C68608546EEA3EB76338A308AA60F7A47B953A23B97E502193E3624C5EA150
-EDAC00E9DBF6EF46BE0118BC31B0011C174A13BD7BB68A8F3732AA31DAE28B4F
-CE317A675E8B89A1FC3257CCFE987D4FDD53AB93F3788AACA2FC17C8FC70DDFD
-B0B412C24684D11CBE7E06B7BFCFA1FF44CFC792BA23A4B0BADAC5758036D3EA
-9BFA541065C78DFF818E32088AC17BAEC657F034950C1F5F27E079818EABC3B6
-E49467081F656B040BBF1E704C9D6BD08C9ADDBD50CB276D621E40580E7E26DB
-3448552DC7B3D0D278E9818348744BFFA3251474C17FA63F5DF63FA5D51C60E7
-5A088B061067D5164A6D8E2272B3974BA073B8F0ED6F83131AA7A5DC1A3CF19B
-D3F85E873940FBE4CB8887E65B558AE8E4275F1BE64B52EF085E17324891CF01
-2677978A947939643C4923B889D3076768702F4EA8C43EAEA20C1D166E661F0D
-25D1521F8E9DCD1F93208C4A2F960EB220316C37D8DCD2B34063B64760A10213
-CB367739252455D14C86971AF43387C91D6B6BE549C18CE8E78382D886B79AA8
-05ABE27E8F4CB4CDB98789A48409B9720206D42DE651F4A89656659054FA163D
-9E6C1A9B05796F8390D29FD4591303F959AAB588A0653A11CA61CD21204D6951
-CC4A9BD9EBCAC446A270C7ABA63D7B9CFA26DAD7FF98126CDB11C4B41D5D3F1D
-AD2BAD4F8CFCEBCE8F42C30A38DF70AA3A62BE587241EA7E63E74B83FC5E9053
-566A98566912EB1954CB34CFC25F69914678A04B55DC1A50558857CF75073071
-4DFD733F915D095FC8E50923C1F1CCC0200535A4A1833040924122432940AD64
-0861B3AB620BFFFB49BABFD829ED433E1AB6CEE85E35D251CAA1B6D21E6F0F2E
-BA540FD1F479DD7D5B5BFE047AD1C11417C5E9E3C1882358C3CA02D1F70501DF
-6D8D9BE94CC42DF206630A87612B9A39E42AF674288F008B175761A024E808B2
-7F0DE024624C50FD5C340F17FBA742721BF206CF203062687C447132DA7CBE57
-4A92C312CE71C42EE368589A37A2B3EDCFE3094286103F578144744EA232E0DC
-29C366D7D5B44D13D3BBF74DF14FE9F94C2BA1D9DB14DD6BCBEFE8079A25AEA3
-B7AF8EA791A7C38D9A638EBF8BA01C3BAB49EC816A8D318D501A8BE6231F927A
-A1FB9B2D78B9E087F7D8922069AEB819B555A0066C7480C1776781A29686F454
-812572A1FC1D66EB535590C9082DBE13C347A8A9A3E648AD3E5C6CCE9B9FAB52
-62DAA598EE9603C7C698D13F681752AB8C25A784ABCD03D04BBF73C78BA78063
-596ECC3AFD7199509D5821DAE8FF86F26EB0CEE57796CFFCBFF040194E3D40E8
-61CC6A842016F9D3472594B34B9871AB15110F8459D6353390104D44EC03FBE1
-9BA3DBF5AF46C41A8E39F684C929F7602FF97E232ADAEF0AD3C52D89062A036E
-3163830AB855F4932CA241DABDCF2ED823D7B20B4E2D22DB807DBE871A080824
-C70276ABD6C50F5EB779C0920509CB313EBF5166ED4001F60E053B64D2985B86
-2FB7E8712A50A84EDD5C6F3BECAF87A0F33F6EFA1DE499C9AACED5B08CC037C2
-92755591ED61BE6D88971C7338693BBC2B897471F6C4CFB0FEF30B05369EF0B2
-546744F42351A81A12DC076D0B1B96CEF32BF3F7AF2A4A0C12A8BC8AE5986336
-3D97E99FC81DEBD4DB6EE8E1C3E61CBC35CD3B0BCF39A4ADF0BD5E894445598E
-AD17D6BEFCC2D31A09728DF32F03A16E83D3984CAF90F72C7E4DC70A12A5A793
-1DCB7E530AEAC3D9AC78F575FB0431CE3B50F044C7AB1820D47CDE716D8DACCB
-B5247279442A7CC72351913A2FC4CA637CC0567F4F74E231A5208B0681A4D153
-092F6BC1FBBBA76F83CF85CC551307C979FB46A14D004B60FC48614798B3786D
-9709A5F29F6FB77083A277657C4A61EC2F550BACA09C4C31CDCB9117EC2C3E61
-09029C513EEDEAD4857E3F49E26B4A76821F31EB9893FF5D0201CD866E722275
-3863040F61657640AEC0ABC38525669B2437A53C38861E57A8DF9D0290351A24
-B3AED0F6FA1B96AE0AD03FC8A8E0D8DBD9A4D64DC8B5B66E0AA66D3E533AE7A6
-2B0897CFC73C235E9028C3CE903226682D5CD22B166DDFCBDF0EDED0D419481E
-63751BDB753DE33BF3DD1CB5CD4B6AEC579DFA8B2250B8F62AD439E0827CCA69
-B9D77FB7F30905AF7B2A7EDBA9BE85E9B456942411B1BFD61FF2A5F13DC0236B
-B13CF2A3E068E89665C8A2951F5B3C5B0FD283293E0D26601E526A7CDA9D32E3
-964DAE0B5E6AC2891738800BB565B83E242F5EC1F8C6BE1916FC11AD20FB12A7
-0FEC612E2294D216B214EE79905DCF4333F8D4DA4A9FB03395342F3FCDE1CCAA
-D1553AA753090A3D0538E39BA2F6A3857E5D3E1E3666194F0FACD84B5DE6B996
-45C798251E1728BA9D06F88A46486AA8382399AE28D2888E21F5F42E29F8BA28
-819EA1C6960C6BBAE68D380481F3229506853AFFDEBD810784E259001B0DF98A
-BE2B721DD7D3A2DF3FEBC9C9692725A7CD5970FB4F2AEFF1CD3447388EDC79BB
-6560B6516DC9B33E47441CB8387439C08B7B8440A3DBEA661C210496D0BCE231
-B818A90DCA258496B58E5B57AF5FE8D91220F0E521FB9F1B37E224BA69619991
-D17F81D21888CC23383380360220C386DEEBAE27F1269054E975456337EA88E3
-9C1997F1D317F2D7E19434E96F6BE61E90A9495D2F8D5796AB2A3133A3DED131
-00A84DF55FDB089AF3D273FF79969389BE50EF20E334DDEE2E4CB25A8BF9AAE5
-3A4C8449546224BE40B2B575EDA273A04CEE43EF7947DAA05F841B144F52CB3D
-AED514EA41B85CB8687F517927943469FA7D41E6A6E06263303F4E40BF6B2F41
-AD04452A282010771BA3C6434F20D556C56E2103C65F9CF26DB748BBF4C65B1C
-4A955855BAEC5CB145AAC29A3AFBEEB84895484F4E271EFFC729E0CC4C0343A4
-B615A988DA712BBA26BB7343E3FDB0688126B5B30AB914F478AE8191B4840E96
-7F95B1701871F442C1757AA0A5671AF423A43AF95FCC44BC6C14FDF96E41E9D9
-EF37DF4CE4E75BA397F601DFB67E1627FBABDF6FB031E1D6099C07EB3569FBB7
-7E3CE6B46FAB1B179C2D762557E36A2301D292BC34121152A0F6B87AC15046CC
-862C7488CDAEFCDA7D00A953726FAAA7316615A79235F818A799FCA089F86A9C
-2BD0417C629D8CA85B64B6EEC344B25A66235A9D081C8714CAE2671D53C353E3
-2014CD579C4BEFD7CE79C2C357CFA18154839060414C26A0B7AEF4A559B2FB2C
-A764EA17AFCE7CEC77B92F16E27BED75F22A06F949F291B6A8C942A503F99B64
-1E48FFB46E328F8E8E99792579B1AA87D50B74C7F783A3634240450F7B47F089
-9101149C31A20A0204DD3FE82ABF93D95A36D27AECD5AED88D2195401BE9DC98
-1A1D863AB00AF312B64C2F5687E677B0E01B899A2BFA18BDA9673E8AF15DB462
-D45F7D0F625A4EA5E6640557865D5BB98E11EDF79AC08FE7020D29B95C8DC410
-4B746C76F3E2422739743E5D6F1D01D4788BE203D34D5823F3F2551739A7FD2C
-A0232E8EBF90827D47F381DF815AD6E161D39E90E13C6DB7A1892AB62E598893
-4EE18EF1784CD42AD8AF383647BB9BE4BF22F48125B00B0EE576B5F33CFB0D63
-77B213A874F19E8D52D7C13306EA7EBBBA090F59B799C74B573AAA96816F8AF2
-EB0D4551E59C4B16A6C997E69A711C4FF54A8617051EC8D38D72FDEDCEAA7D43
-3C0C11E590E0A286BEDBFA3707B8D9B697F1D22032D97124B219269EE50CB1F5
-3F4AA8063C6FBF4EC193F758FAAEADF6E5FC1A35DE0E75B3278425B0814AFF33
-4E4BC6FCDC5B0EB1AC41AA0D5813B533B6961CBA4CAA2E9433226743138BD859
-4FCFF8505EF1F0C8572C8A8B2C718454728EF49F3BDB6E159080E96D7647E1C7
-612C75243F3C63FDCDC1FF9C31630424D61F78207445BED8E18BDFBE3D1083E0
-61781011FE156E50B7102F8C01EB7E57B8680FCD2BEF7256895B5A00E74CA5B1
-B5232102E565D1860C68FFAF5CE79F717D30EAF876E53CC30CCE2B20C7D238C0
-8E424382E58FB28A6EF36F52C7B6148FAA0ABBBE11A45475C9580086E79A0B4F
-7DB9EEA941308FA536A760F7A8A8CA60A8671F4B5BD0C8DD2AC84F83382B39DE
-9764A6091894B7D6D1009D16A963130FF0548EF0F03309ECC3B0BE017D65E75B
-52B53ECE1874BB3841B880AAE0723FDAB19E4344FD3866ADE0A3CCE1D03860E8
-E82326934057992F4C9F183DC10BA6A855CA0A5A6D889FD813902279A6429ED5
-085025ACFFC104D92854EF0A74E77F5F92EFD5DF2EA068C11C3E97BBFAFE07EE
-E1D48F33DDFD119A74AFE5FC1333E6ADA912FC01E78872FEECF6AA42C267905D
-300C216DA4AB68896AB6C4
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR8
-%!PS-AdobeFont-1.1: CMR8 1.0
-%%CreationDate: 1991 Aug 20 16:39:40
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-readonly def
-/FontBBox{-36 -250 1070 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA1772CE422BB1D7283AD675B65
-48A7EA0069A883EC1DAA3E1F9ECE7586D6CF0A128CD557C7E5D7AA3EA97EBAD3
-9619D1BFCF4A6D64768741EDEA0A5B0EFBBF347CDCBE2E03D756967A16B613DB
-0FC45FA2A3312E0C46A5FD0466AB097C58FFEEC40601B8395E52775D0AFCD7DB
-8AB317333110531E5C44A4CB4B5ACD571A1A60960B15E450948A5EEA14DD330F
-EA209265DB8E1A1FC80DCD3860323FD26C113B041A88C88A21655878680A4466
-FA10403D24BB97152A49B842C180E4D258C9D48F21D057782D90623116830BA3
-9902B3C5F2F2DD01433B0D7099C07DBDE268D0FFED5169BCD03D48B2F058AD62
-D8678C626DC7A3F352152C99BA963EF95F8AD11DB8B0D351210A17E4C2C55AD8
-9EB64172935D3C20A398F3EEEEC31551966A7438EF3FEE422C6D4E05337620D5
-ACC7B52BED984BFAAD36EF9D20748B05D07BE4414A63975125D272FAD83F76E6
-10FFF8363014BE526D580873C5A42B70FA911EC7B86905F13AFE55EB0273F582
-83158793B8CC296B8DE1DCCF1250FD57CB0E035C7EDA3B0092ED940D37A05493
-2EC54E09B984FCA4AB7D2EA182BCF1263AA244B07EC0EA901C077A059F709F30
-4384CB5FA748F2054FAD9A7A43D4EA427918BD414F766531136B60C3477C6632
-BEFE3897B58C19276A301926C2AEF2756B367319772C9B201C49B4D935A8267B
-041D6F1783B6AEA4DAC4F5B3507D7032AA640AAB12E343A4E9BDCF419C04A721
-3888B25AF4E293AACED9A6BDC78E61DA1C424C6503CC1885F762BADD50DF87A0
-8B6D1BA96CC415579DE9A26786F37C6F37C57E20559A06FBDDAFB7A0421BE3AF
-ED947D999B9B6FCFD973D2A9CFFB2C38CD1F4E83DE081288F2654E747F7E7BE5
-32FF02074DF581DB456CDD381D834EF577A7DC94FFABD35019230545DF24B281
-3C57DEDE6580DFF703681287F31B62A0DF73E0E08FE3E8D4F3BC58079DF85A2F
-9D66DE46A9D3F8F289BD78DD2641DF574F334704A570AC88AD21D0EDA5E7660A
-5ADE393595DB983117680F836913355EAA0C6DBBCED2E7568D988462897B5EB7
-F32692135C9C6ED6E12978DDA350CB2BA64D433A908E31F61761C23FBF18DD4F
-987FA6D14562DDEC9623FE5480255072140CE23ADDC4B0E867FA871B5D1CD62A
-0E07EB4CD8067A363DB0FA8E9A81109A1028A076A716CCEA3D569950E2683B60
-D0E5EB6611DA3DD784FE69E0425E19731170E3FD55E533C4D2D9932B5CC8CE59
-D641D0116334D2360F7A8681ADBB014895484FBDFD0B903E8E15DCB4C5207445
-1AD1EAFF6D9EF7EFD9883B95A6F179D2B108CCA419643B31658A4755658130FE
-E210089026EBFE95DF621F381F7236E4A407F8298A30E5F704C28A1C5F64FBC3
-9991B88BD657CEAD53805B2F61F2264DC7159572C18E5537886145C22574845A
-9A616E5D4C2613192073481EA165A94547E0337ECCEE93ADE0281A913C9B4045
-C3165427682AE888369D9BE2A3333232979FFEE701652CCD553F4909D0A99FC9
-C8C851B968ADBB92C8550384651FC30FD010251D792EBDF4BCE1E241AFEC6B67
-EDC73EECA0BA12DD9A22937CACC49F0AFD3CD7E032C248F70D2D338CBC6E9B34
-205C184BD86663C972E37D05E01137415E2F27F6AA774530FC05BB3DF616356D
-4FD973B3B74C43EBD83CAB8E9F72D1B4278350321E4894587B458BA313029168
-AC14916C7FD5788B4E4A675081CE6046FEA28ABAEFD1ED7C577BB74F66F5D8B2
-2F355DECC234EAB0DF594B9C9F11A3415DC4734AD1E43CB4311C8DB693F2ED84
-C70A36215C4D146DD4DF54FAF65B8C7A2B93498B4A74BE58B40778E4A881DC38
-D180B995251CC4A6AC8C8979536212CF023C0EDA692DDCE760D3A12C108DD40B
-C86B0A2300B94E7AD95EDEEA99AE3A034F21E98FBFA2E31621DB4BEF674CBFD3
-1FD6102118844C29CC3CEDB9A9BB2EA82C5E43934A7BBE72980855283C3BC562
-11292ECCF4805B390FC29C3A5C526D4B365ABAECCD0B5D4C71CEB495B455D836
-548AFE038A03F581390C5AD5814F6E395DAADB1B3E93BE91AEC7BF5CF9220A6A
-91DFED453CB4013B89FBE39B32CEBFD4BF498FDB985407ABBBA84784FBA1EB9A
-41B2B9BEE5865DDC8658920D96B6C26BAD0A67EC5940E5C34A8069B1D31695B2
-C7095A0A5C74A733436960E3F1FFEF9DAB3CFB3842F2BAC3D6498652D3CCD618
-8336FDED8A3FBC5A0B01013E06B10208B94A5BACD939B91A9251F8EFCD0A8970
-A7D19A1CED133D1BD4A1FCC33C0F11E3490B80DDF8471C1BD826ADC77894C7D4
-E69C826EAB793FA6C1C942E9FBFC416213A66B19710A34239758CF055D6C4E31
-39DF5B49A21E433E299C6E03E290CB2BAD44EED9D20C0B39FF6B0AC8D1D8D1CC
-28196F69A3FE2FD78A65DE47387363CB633080D42048FA14A7656346EE34F2B7
-2472024F755C094803EF3AF917C4D7FC183DFCF1D72D73B3BE40BBDF63E621D5
-A07A6FF8C5C5D1946FB877AF00585D260CEC0051128927F0E68FF4743BC2C5C4
-7AE2F82CD28D717E155CD2B8E0880948EAE84A3CCE30B01E8445834FB3D3062E
-CD7E6E84C549D73F735141DCB74390924EF902F7E053BB7C65403B96B8AAA827
-EA8FFF133A6310BEF8EB5EC3F9FF7881EE687E31DCB5749B41933BBE086AADF0
-877FAA01AA390061EFD315FCC44BC099FB6EBAA35070B8A12BD44D474201D42F
-C0C0577AC0AE21FD682D9A50C71CBB8FD5DEFE37AA50B2D69EAB483FE64A7BE1
-920137441DB5EBCBE4D0A1CB7E06B31282DB73B910E33C628EC5267DCE7723FA
-456259380153BA68A817869C62F315C4BC750E47060A0B467455E72C872003E0
-F6E0C3B4023424950373514C099D10AB46348B0CFA3488269451B10CD072DD61
-1FABCA5E1A488917BA120F9207EF7F3E07B473497A77A0043925E52BA328C105
-6D8B680EB5C7648602BE3CAD4C37CD9617C17EA141AAD191CA7FCD23A6C473DE
-9F4B38D38E0909B3C5969F6B592E35ECC11618FE0B8A7DBC2D8A5585DCF4FD20
-47D07DBF38A9439CBD3D17FDE6AACE7C5D2F9F2881D6E3E92A4B51A42E4415AF
-E3784D7921DEEAF969C8BBDD1EB0499A88CEC7C4B098C32FB32C8B95E9C3FF6D
-97269D5D5A1098AC4AB4EAB8839C3AB34521A16203C42550373AEC6A18AFA4F7
-E15946EFB23467C26C09ECFC832B1084414F20D39123FA77522CCEAA63F11857
-D69CEEB988FE3B57C2A5781FC235F72248C628631D9C9BE8AE25E34FE8E3629D
-82EFEAF0BEAF6F237052E4B398AD1AA82CA20EBDC707C3DCBA9450AD2D8BF9BA
-220B4EC5CCA2E03F82555CA52232656942752E80C50A2A339AEAE834010819AD
-E40B332499E2E32DB9EDB7C65964CB10532FCFC0BDF028B0
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMBX12
-%!PS-AdobeFont-1.1: CMBX12 1.0
-%%CreationDate: 1991 Aug 20 16:34:54
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX12) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX12 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 34 /quotedblright put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-dup 63 /question put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 89 /Y put
-dup 90 /Z put
-dup 92 /quotedblleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 124 /emdash put
-readonly def
-/FontBBox{-53 -251 1139 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712
-B1805DA88AE375A04D99598EADFC625BDC1F9C315B6CF28C9BD427F32C745C99
-AEBE70DAAED49EA45AF94F081934AA47894A370D698ABABDA4215500B190AF26
-7FCFB7DDA2BC68605A4EF61ECCA3D61C684B47FFB5887A3BEDE0B4D30E8EBABF
-20980C23312618EB0EAF289B2924FF4A334B85D98FD68545FDADB47F991E7390
-B10EE86A46A5AF8866C010225024D5E5862D49DEB5D8ECCB95D94283C50A363D
-68A49071445610F03CE3600945118A6BC0B3AA4593104E727261C68C4A47F809
-D77E4CF27B3681F6B6F3AC498E45361BF9E01FAF5527F5E3CC790D3084674B3E
-26296F3E03321B5C555D2458578A89E72D3166A3C5D740B3ABB127CF420C316D
-F957873DA04CF0DB25A73574A4DE2E4F2D5D4E8E0B430654CF7F341A1BDB3E26
-77C194764EAD58C585F49EF10843FE020F9FDFD9008D660DE50B9BD7A2A87299
-BC319E66D781101BB956E30643A19B93C8967E1AE4719F300BFE5866F0D6DA5E
-C55E171A24D3B707EFA325D47F473764E99BC8B1108D815CF2ACADFA6C4663E8
-30855D673CE98AB78F5F829F7FA226AB57F07B3E7D4E7CE30ED3B7EB0D3035C5
-148DA8D9FA34483414FDA8E3DC9E6C479E3EEE9A11A0547FC9085FA4631AD19C
-E936E0598E3197207FA7BB6E55CFD5EF72AEC12D9A9675241C7A71316B2E148D
-E2A1732B3627109EA446CB320EBBE2E78281CDF0890E2E72B6711335857F1E23
-337C75E729701E93D5BEC0630CDC7F4E957233EC09F917E5CA703C7E93841598
-0E73843FC6619DE017C8473A6D1B2BE5142DEBA285B98FA1CC5E64D2ADB981E6
-472971848451A245DDF6AA3B8225E9AC8E4630B0FF32D679EC27ACAD85C6394E
-A6F71023B660EE883D8B676837E9EBA4E42BA8F365433A900F1DC3A9F0E88A26
-31BADF9D4A8B8AB7F9551D56B767E0CB134C7A7C3AF4EFAE9BA8007917CA79E0
-8E7B8E95E6955777B6A216B9315B38CEC1C94E82D973C2C03C5E08BF0C4E7EA7
-F04072D0AC8A5CD7046C378382B2A09ADF5573A15AED11C1329E4D332C89025A
-23470B8FEC12FAD9E3D99DEBBC9BC9C20D63A8DEA6D6DF84E4E248C86801F209
-8738DAC9E96292B57F5B55C69231BA247C8BF5C6328935743FBC401C3616C58B
-2B8FB16101F7A710AD5AB745F4F5B77A20EE32D435BCC888FCE3CD9E648D10B9
-8CB5F28384EE11A3CF8DFEAE4D09327B09B26C49F5563CB82A48729EA20AE878
-AB0BA32FA28829138EE25BEEC9C1F5074B29A79CE7CB6F64367CD8A5A931511C
-0179B300ACFB5521324E57A14B97B31F6D1E1FEEAE39CC1345CFC12890C51ADB
-EE1427F2B3BBD0E8937215F1F066998ED86ABDFCF3E614E3354A1A0C54EEC159
-58F976928CEE343C8E91975A59F149E11D53E74B3E38BE9BF42B2A2BEDA73113
-416CA306CA631BE9A259F150ADD9A8EEA7640A9EAA0780F9F1175A80FD531E4C
-EC8A3849C674FFE4380C30E69095E841824E787B740C42E415762BC05150143C
-A11F8270C4875DB0530189CE6E04010FEECFF00D18F008112E0565F19F592378
-ECE719D216001ACCC47FEC09123F566E9F58D7275BCCC05ED6E19707A59A841D
-7C1E6C17603F069B5432D80ACB5FBB9EB8B210E1E58A4CCD7AC302271C3C3C58
-E64C0CBB2E96AC52ADF7C55EFA5492DEDDC73140781C09E8B7B2746B3F178A41
-94B1765A66441406D1F8839423AD7154F853F8F918258D5B9649DE7FB974E2B9
-7831752E86FA4D9B64A7262A4EC9C78FE4C9E14E39EFD4AE26383F6501B2373C
-6368A1F9A2278192F6FC9DE11DB537A94F45DD4C21C7905AC5A3B303B733C091
-28D3576F4EFC863A1E91F6AF21AF44C84B31CFF7A5BB63FF594222D6546CC0D7
-9DFEEAE8B7ECE67C0540278463D488CA27D7EC1BF8908D18D82358B4AF11C60A
-734E394AAA20FCF94AF2B881F805D8BCCA3FBD0749EF20A2C86CB8536A076972
-9CB1C2889E182297B45904FDB6BDCF07C112A827401BE9FE57E49F2C6E647DFA
-7787FD65AEE4903E99DE269E88A998874835D0ADF014612088FE2E5ECE53EA3D
-331F119199C612FF3F72EDC9F09538F4883E52E3DCA31F70E502F7275D3B1ADC
-FE3DA2D65153C4D3305E465C32A651D550B612D3126821FB211285EE2A0B97AD
-11D0F21B20EBCBBD81DE360B8061BF2FC5B2D321C270DB853FDF60F166F794F4
-FB9321D9BB4C392BDB46A037466FD0C461DFDE7D2AA8CCF75E9A79FD19ED8A08
-1B1FFE071F218323135310C62D29299DBDEF5F5C554BBA73D9381A5E3D7DEE6C
-D25AC81527B935FBBC1B04B21A5ED4FC59DE8B6C10FAB4D39D86D33348052CDA
-25E114345A8A05413D39531484087CBF92934AA3AC20A5A19B933463D077AB8C
-85892D23D1BA6B05AB4F4FDD4B61CAED6822A4BE00E79DE49ABA6A22F43CF7E4
-E7E81CDEAE3CFC1F6B197E2777573AD8BA0F8D6F1E31C4478AA60A5FFEFE2FB0
-C27A92049140B1E592FF36244F9CFFBB56D89B4523D024C4CE3EE14A78FDB029
-73246C71C68F1B063619ACA51CB3771E7385E272B4D85A447D07F1294B392768
-CDC97F2E94C67B701E459B0A3F1B0E8131F1207D9FCD34DA7753DBD7CA765231
-DFFB32CA1967A3BCBBC0BB8CA9C7A2BC450955CB208F76857680B4B0F25F0937
-1F5C27902673B5CC9212DA464C2E97C939A30B46FDE0D2AF64AA54B9159C6055
-ADECA637EB7CBB4990F8699D49671EB6715D45B61A87E7B36B6707F71D227CF9
-41C44FE089227A340403071F8AA30E5A1FC2D009C82BEB84E08A8874BDE42B15
-7C11D5585F4AC1C44EDBE20D421982E64E945117CB82FBBA913FBCA3E31D87C3
-6A1C4757572B57CDC478C6C87122E9F6C90FDB5F5F5D802F246C6C6E0B4162F1
-AE0ABB7CB31003CFCC7BCC27065F8BD6BD3E86C2E59B68597186B65A45A8CB5D
-4AADFABDDE456D8F7B6CD064233BCCD2D74D150FD322E788AEC94998080FCAFE
-17FA2532B24F21F58220F860BE6203C7D2DF1961E4747BC669D7E1F7CB7D0714
-56EB2A50B61FA8448514697FA3CD47A6D1979B71C9FF6AA2BA1DF92D286CB4EB
-1E87CD3FCC8C5BEA5D32864CB3116D567146408541DB66D4C9EB53E7126E9C28
-812DEF847D1B0038F97B6FE6D90482FE16CAB59BD919A6437D55CC2790CB0176
-548849B93785C3DF03A79AD2DE11449AECD437EDF63B9C1B4D5900DD81206712
-69AA9B81B7E80A3AEB8449D997E24E95B50ED4D024F803C1C9FE74F32D9B21CF
-C7F0A4902DCCC4809DB0EFEBFFC7E8765611EFA919E88AF7C9EF9D4CBEE4D67C
-35A1FC24A4C07FDF97DCC4F4289F3FC20816713AC68F64B556478DC61E9716A6
-AFAC0BEE693FD4B9CBF6A249EC4B158B7D976030A3E298377981C8362258B373
-309BBC7A29B18BE67E3BCD2CDD0F8DF937DAEAA3B84DD79F902D1A19BB74F8FD
-74B1F7C923F3BC4F5DE58FA8A81C0F7B4AC12AF2E340DC1E032A034A6CDB1E14
-7F476C09F68BEBFB34303AFBCA5DDE73FBBF612ED04870F4E25AF3AC09D4B009
-BC00CFC6B5F3A2743A46BBC511A4112BD332154FAF563EB6F2FDA470554B16A4
-4A30E15E39A579D3026A6E26615B858B6B925FF867553C9EDA802FC11826AFEE
-3315ABBE67B35DA3DC7E1B10252D693D79F9F11E42DD7A6B07E1C5CEE13DA56A
-F37234D87D877C7C59E9E9E3881AD9B43479CC6C3C1BD8387F0FE80A84EB429C
-84463767A8E88D8DB3818C27E940A5E6E99626AE04A11AC018C044736EF99D1E
-478FE9022F9B4C3EC7C23CA196F2E007DE9FB5EBCA32E917C6B6C025FF0B2D87
-440A3E5E5DCC03E9367C2EACE3D8BC58235DCBD67F3C1F09ACCEBC437864B009
-BB7B7A97B0FF1ACF52DD7DF665CE08C615C27FA89FE02CFA057A4D37DCEA4A90
-9F899B7D50DEF62DF60287F5D4E9AD34D38F766A32D8AE413A5EC79A7A1E06E0
-A3DFBF6EE3B89CF49E2608D21D5A9B4AEA6DCBD54B8BE7B7D3677D434F75AD32
-9D9519E3A1868CE2DBECAFEFD435ADBC249CDFCFCF0022D8B9BDD683A26BBD7B
-CCE0C46CB371ED46C072840D9DC759A2E3E5256E2FE0C02E9935C1F0AEECDA8E
-09270BFBCB58AEE312B48545D693A8D67FED462FB1884A9B8A359227F6B98B83
-EEE7638C4C4C49E6B2FD4A345B68BCEAD175FB38C840F24C040DDD23B7CB6C4A
-FE7F1CE9078424610B72BEBF01AC38C59C5B96994299BCBE87CB8EBD252858A1
-A97253A4215E4F2393E05742984773DE6FB721AAFC61416E3488C44302C3CE7A
-5D716482D69DFB85EF789C69CD59EB061A0C82B1E7DC26FF4C9E40CC829329D6
-77125D2D505FC762C4C2BA41D13CB6D4F24CF77FCB6EBA610F2206749F59D00F
-4BC072A8A2256FD9B622E29029A142E4B3A8E73E2A7ADF2892B22E8479F0786C
-63557B164B99F4C86B3855C7A705170DC455486E5E12327605EDC60ADD5577E1
-B6CC53EA84161587753DA9663809F4FD12A5746FF9FE8EF5C7F09D0B4055779B
-6965F1194CF69F654A842808CB9AFAB1690CF47137119F0497AED5F4DB2CB02A
-B76B1AACF790F8847763C93058D476D65D84E52B0D95004009347DC2EFE550D5
-7D0DE92F27958F573B1DFA14412F6FBE4FACAD0560C7084770525F9F3F9D8EA6
-51806A0E49E1E19BC368F9031E41035DFAAC8484F3051AA031FFBB746FFE9681
-44E75F9F41990ABF86AE793BAE3B12E37896613EC8EF0335042F71A2D548805C
-49AA2CC0769B5D6634EE35F06AEE51988D0262EEB97C956A4F0FBAA1C157A2FF
-CD6A7D43107C125DBA1E68B86E391B70945C5F07737D9EA027824EFA2A963D2A
-FA1F641E45411E17D1602D73B5997776EE540BC02237A3BCAB3CAC4B63EB8045
-61BA2F07B3EED152C747E1F90E26F2663DB63A7B0C534F1D96D08237C3A983ED
-14B9C0907ED5D79E675B924E095D59F177D4493FFC3141CD1EBB592118769AD6
-4BB6AA687F275E452C435772286982C8A0EFDADAA79367087E94A86566D1D646
-040EFBCA57B792FB4C709E6679F1550674AF3577902A402D2236BDF1A124862D
-0E6DEA0459AD2A12FA66115C89A530F4495321DBBFA5D500CC75BDF82695ECF8
-75072C11CE4F31D74E042F601CA1CD2916FAF3510121FF590E3EC5300CF36879
-590F6F7C1B3552B1700FBAEE412A7CE39E42730C51168F6E4F6CA1D60446F3E9
-353507DEA03DF4CAD9C4F674AD2EC37BF7F077E7BC2D87DA434FAA25D0E5986C
-0F1FAA70DD0DF742A1A386757CA112509986EAAE5839F95369B1EA8D629E2363
-A584EA90182886644878CEC168634A47DE9C41D1CED9D3D0B2E34CC9615F6CD9
-E201B929BBBE9FEDFD8380B42D7315690D69D0A7D0724A8F4C680B0539A51E22
-3FB87D014F3AD8A1595E8F7287157E94996254ED88618999A9B795AD9731968A
-214919A9DBC5B1CF965903CF2A8DFB9D4CC00F2C0AC0F0E59320ECC1734726BA
-1A4950FFFE0EAD01F5066371FC815A2743822002AB3A625872F5E0FD0BA6007E
-42967C96D8C33F40243C7831309B1D73FCB29E26C11BFFC8AF961C3092D344D4
-36FAC6A5B9D7AD8231A6F0C22A01A715942F8BCB92D0F3FE746EECF376775643
-C23260B5F405C944E7B96331B416877B045BF1B2CC6EF7466BC0120BE79AD225
-333064E57FABBC2A96B4CB91364D8BB70E26D7B20BBE883C8633EB86B25B0342
-095465D254CC33E4D16F438DEC851469D826F3B60B603B1C1EF8925EB54D8F52
-25B709CFC5D0AD62397043C35532740789914EE690D548B16ACD312A240F52CF
-520ECE0F4E4F2A88B93EDAA0DDFAC140BD4B8D28AC4E3968668B922F9E1382C1
-13C8BF2E83DCF712B7AF8F96CAF36F0EDCA6FBF2C53E556852D03C9FCB655A85
-A4BEF3F02045E80AA5CDC5DCD88D191816416640742A0A69B3530A1753384C7A
-5E0BE7DBA7337C3EAF3045362AE7EDD06A4BA28BD4D0ABFE1DD8A96B41206F50
-C3657DC73AFBD7CEF7C280A0E84704EE66AED813136A1B2135A2BACE670DEB2F
-00B89E8362E51939D6FE6E1994736FFE3701A3EEC6DE22D83A54E47AFD8D4BE6
-50731CACDBEAD7B353C7C70A457EB11BD829C318652AAA6E78B448A176684242
-E99CDDEA87CFB7FDE7596F727DF20AD60FA7DA1FAD59D07376BB905506144ECB
-AAABA35B6CA476A4E84717589CE538A34A9CE12A1023B06607461422EBD29198
-D66C3550BABC5CDA548D1D17053ABB1CDE8BAD0E79A5E5446526EB48F943EEBA
-B4CABBB898451495828869636E507D1ED10BF8A078AA1ED0C6F9982F2A12A42E
-940F6F934F5370109DBBEB6DA2221D1CA22322079A0B4CF3D3025B8BCEFE9079
-9B239382EBDB60B029496BC2061CD37DFDE0D7A7C17EAFBB7B5F2C0CCC905003
-8AF3BBF861E2D206272C3BF1D67F81CD2F7766521FCE432498950F9420BCEE04
-944C1DC45679D11D3F54C90B41F2598074343CC0B689D6A257E514944B533532
-83C3AD092BB709993B1912FFF47D416C842E08E9A090469A1104CC802F8740C4
-EDED557C1C140A2929BD11257A385E38FB5D8A5ABB10F452352E64B06299E919
-A0333C30478E204BEE26959C5E72C39FBFF797A570F2A3A6791CC6909EDFAFC5
-CC5AB8F2CCE1BF24F46919B5E84FA1DF9D5EBC0FCE8C23D4FAD6A1549EEAB1F7
-C27E348B8055B997D6E807219E117950A223F7C94B21EBDB8A151192C5E75814
-D9B6A0EEECE02989613C94DF7ACC834F31B53B3BF83F62D15E314092AC96ED9F
-A4B4965FF754F9799FA955486089AEAAF6A65BE8B0A966C34AF7D3E2EA1FD2F8
-26FE9153D82FAC104C1CDBD8DB3DEBED96531426922885005B83D39D401480C2
-5A38158B992389ABFF9567DAC10D4ED00CADE3B8B69FAB0E8B873EF9F2D74FD9
-7D597E9E0FDDFAA60E39B29406D4084319CF68D6E886F781646B5AAA62A3B7AA
-3AB27D7CCC90DF224CD7A5E44740D166F355AAEEDF53B4CBA34E119C6098FCE2
-AF5BF9DA76D2B08F224E1A77007673C78E139304A8BCE38C21B4A9FBA7426833
-EBAAC46A7E3667A17A6684E9C362652B98A5EAF06D040AAEB41D9032E65F1BCC
-108668B04A31E217DFF00BC97E48433D5B3D56415C8DE148ABBCBB6093626DA9
-BE2ED34B7121977FF1191F31A079CC3FD58DD86C9E707AFC21111C6FB65273A4
-109634BC4886C25D71C317634A495FF1743557145F737362B8FEEFED4C4F231E
-BED255AA4022CB77358B1D88E89A9431DC3D28D09DDC916481C16AF44AEB94D3
-A41098A4E76852B63D975A2EF73D38D3714B924BE7BF104AFC213540FD8F0C8A
-CA0E475EA259D0A9B8CAFA377E15547A22626C4AC321BEA264DBC2B90B1F1C9B
-2ECCF142072DE53D41DDDF33B034BBE0EAE3674691E3DD2B1C47E5AA4C14E45C
-EB17EDBBD4573242EE8EE20E0901719F45074BF0FB5BD802FCFB890053D04AFC
-6BC1F29F45364240967EC7C0282200F467248C24E0E84C98FE8A48E3FD5EEDBD
-AFDB87366166CB35EBA1B3B40237EBEB30D3763A8222F5CDAE38303961EBB670
-013034ED410DFAC76D35710542EB127425B72C6AF57124FE44B7403B1B6D0084
-581F93DBEBE7D745E249DDBBD9C66EFA92405B0D6F6C3C4426B608A74D5FD824
-5E2191B88559FF3516ED861C937979916A10E31ACA28BDB1DBC9723086080FA3
-9F51EAC77A2FFCB1B1DDFBE7A9F60D476981EF91C6BE3B44EBC73B10D956E489
-08E3D33B212F5DDF704C663256DE33CDE9F5B496AB777CCFAEAE98618A7549BF
-B99A2008A4307C56CA7EDE662EF177D6134AA3510BC65D07ABBB84E183379A92
-001F96403C36C1BBF8E29DC6D3D0A3D5FB2323FFDB226CDBF6611B5A47E19D42
-757D9A913CCD4F4789E4628942E658D56AC59219152109238C2D5BA83DCF1383
-7C246912923A1B2BE94C59FF0F90C9861F8B76240BDD9DB9690C7178419C82D4
-57927A378385B91F053F3AC241C76BF9A8B82D2AB54D9DCA2335632AACB70BE5
-42C95F45C9608229028D1B30EC9E33AA3A0032B4E27DE9F6805D57F72166BB90
-199FF1935E705DAFED58E479414809E027C175AA68594BBB995E3D4DE2F0E5CB
-DA0DCF4E5DD734FB68CD75DDCF76886CAA5F0159BCD80D026327D973716C1B0E
-ADD57B4DE3DE89E9E5BAECBC73B994C4115DBD51BDD69CC96C26589B56325811
-F2C90FF7F4101FC6AFB7D2D057D6D304A264C1705259BFE151F7CC218D152902
-B9882ABB86FE476460455F2BC4BA77DDAFE36A6E206C4EA4409F29AD197DE5F9
-ABE0F02C8673DF769F386CA30886C6746921F60F98645E317AB07589504BC94A
-1E294F5CBC6D79FEE377DDE16FE24783E7CAF22240508BC19D1B3CFE0396C1D4
-AE60A20FBDA130F26E97FF2D12766950273FE1E0F62D80303C483A3DA022DD75
-DF8B8F035CE89D82A17C063481C0D2AC84FC1F85B48DFC2EEFCED63E0AE6EEEC
-99733208427D4C8FB4BBFD9C16E189F989B0B05A1963179035D0AD785AFF8D6E
-01EB8B95A399DF925CABE4B7C6F8C3B731A8C22D6173D9AA89A86E6989548936
-86D3C16DBFB5A4F91606A7FCB87416D0E739FEC697A2A953DDAFEE08462ABF79
-830613ED1055D4ED0266F1A5CC4242D65A53A5FBDEA2190CBE622C1E206B131B
-DB052E9F330DF6496A6DB5F51C0A98FDBE422743D2E2F4556752040F34ECB36E
-25F94AFBEF1DBDC4E1C29CDC8795203ACFCA8D9E68FE7E2D717CD0F496112C53
-80F07B027A3F4B5953DD2FEE63FCE79D42E5975AC8D22514FF21F53C22F103DC
-9D8C89965A563F10B2DB53EAC3E39C7020C5F72F1A8C507CD08F6E25BA0925E1
-B4412FE92E479BED95C4238CFB5853FD8F9BF2F2EB852E8643AEA49E43D3D2EA
-4AC882D27F0813C946CD47E53904B6788F2398E6C90FB4C4E501F640E7D145F2
-D0F3AB87E46EBFDC939B36ED55F2E83545022AFEEEF8B779C48CB583BBBC7C7E
-A5979EB281FA976D3CE56634EFC2D97FDB2C0A8BF2205C3DFA151392E66AC6F0
-13A47B884B492DBC48EFA6AFDAF32C4C2005763D407105B55DF6CF42A0D3E5C6
-71F0C0A530D50D5199D6F63760DB8366D58DBA5BB566C057C36847F7939ACDF8
-6098ED2A20937FCE73B4B788F12CAC91B55E842929D1F460D38AED1A9EBEE9BC
-EFAE47FBC4CA390BA9BD9CBC6F2BE03A10EA823D8FB337024CDA44621C295569
-449D208C13028AD40AA3E03B100EB8A59F2475B64415782FCA8250B588CE96A2
-0FD879ECF199344EF77C01A22776FC5C2C7AFE5F3E6AC2C3B5AF10912463F866
-0DF436A0F34ADA506692932581008F562424907146EAE3A8CF5106DA0CB29FE6
-34FCB7337741A22D954B7D10DA847C5D21E0310AB853E8F10DFA0164B547A1F8
-021B19A1F68634884B5810E0EB61144A45D1ACE4A7C4F9A9169A672A0F90D489
-19D02C00A5F6D2DE248C814C76F3C77F731D9F5D6C609E1FF64B81675D1D5214
-A7ACAF5803777F32386DDE1662DABAD9283869E9319B3CDACCE58C8E9D9B5B65
-194D92B0DD888AEC7082E23E844D7640A8AF08C6B3E795E2FEEA7136FD137E56
-ACF3A63A3F035C93BDE3FD1F53514BCAE12217117B046FCAB732DD5B71808003
-9519FCA7B9AD901BA54A41BA0295F82DD8E72753C57D4DBB5DDD7BDDF8868288
-70CA2E1E6E760E09DBD6DFF409CE9F87F61C6D234412A50EFDA6B98D92546309
-517F52A1C9C1E398A3DB99B12B5F590A218A76540E2F36CCE555E12B18CBA2A9
-34323F8BC7A1DBFC9DDE24CC31CBE97E7839B47C61459619B00A36BCA49A649A
-1E2EBE5BF6BBA4DD5DBD847278FCFA3B4F22D9E64B361DF3AFD99164FAAA74DD
-C424107F05F524C338056F180D36D410F10B8CDA4DBB37AB79B049A2478C9DB0
-CD0E8C22C02B8CECA74751F2CB725DC729F9171A371503C47DD13464DB19EF0F
-858D75A0904CD81389E43F334C3AC8703BC2889846A1EBBE44604220E9175A68
-0FD28E44AEF1B85C0D48C1921F9F6D4AB8CE9F8AA8958D5FBCEC3389835B0264
-07ACA8D8CEDDC054CB4BEFC1446A6191C6C2DC7DA04975B4DC7AF4BE4FDB8C3D
-7DA8FEC73C63C65397A62C84488745DC5A1C38EAA9AB7216021A279B0D9F5D92
-6B2EBAE5F6C0F63EED02774276B007644D52A1D0B302376A2417F233A400D4D8
-68EE54370C4803FB5341BF408ADD4D8E1932E49087883F5D4E9D009D9B13D4E9
-6C050A465C6E789870455D1FA50D35315CFEFBF31EC8128B3A2614B440EA2165
-7368D99EE33CC2BD4372AEA8109DE68187B6DA97EC0BD3F1E3FB031634CE0D35
-7C9A050954392A93D64927606C832F846DD9420D0D30942AA563FD17AEB9C6A8
-DC903BB60D7D2F0256B6E5C94EA62619E4BCC4E8673F0F14BF127407EFC309A5
-394DED4EF75CEBF13946DA9521E5102418E43C1E8EDE80F1A7B95139F1E81397
-3780A64A77CFFEBEB21A80B6522B4920C65F484119F44934A5121CED9AF3BE8B
-8F6BFFF1180A5B9E49A74412D1B52D8D6D4E5078228DEAA5115A2D9A1F942728
-736CC424EC12DADEF264913EEEE06A7006D23CB4838B0A66858EF0973320BCAF
-627B49CE02556343ACC375E6FE55722B12C8992C290B422409BCB56EB4B7921C
-848A66F9E4D99074E531081DDB99FA83F7FF91EEED3074713E2DE2020550007B
-B63D13C431DCC1796E6C7CB2B7D550B180DE9CF10683842094C99EB0C4987AD3
-38F4DD665D41A5AD9FA72DE8108B2B99065D3C3AFDCF866DE4B5D37564B9407C
-142009B5E495AF0E0FE17FE8EB7F2F67D519528A243ED76D9CB40CC9E69F18D4
-FAA2FB53F1279F48EF60357CA3CB7BEB91F93B06DFCF7C9C121A92C9332B80E0
-6003D277A20E1091C83C4553B8A21245A1D4CFDF653F12B95F8D3E71B1FF9457
-12893834FF808EC2F0ECD53A90C3BC6F7C6C6E5D790AC5B44E64D4C50CAEE526
-83DB5FDD8DC8FD3272DE8098A7BBDD2564B002198E92CDFEF2D0B2F46B44B29C
-BE936CD65E95601067C630921E2274422A7E99A4D12AD1BFF3F28FE2B448FFBF
-FF569FD4D1A5EF0A248EF49AF37FC6DD16A7117C3B3FFE653272BCE3641514EC
-77FA28A9A2FCB9E1D030BB214D97DE21077C9169E28952A9393DC5786AE63281
-AA1C312F9CAED174D8A6232ACE2C22B84F06EC3E5AE4153DBDF43F30488B71A4
-65A783E993B0A449030EAEB1E4088109BE42B57D26B03CB45FF1F11AB70AD1B4
-FCE6F6BE803C9C67369B675BE1198D8500FD66B3CBFB22F7E389E09F53F1F06A
-CFCBE93EC97643C2D39D44D9D115B64A87F2C44657D3A5468F2FB0C622368C27
-3605D02B67C3980904A09FBD3EBD381F21D01AF28AE2F02E5E912CF53C9CCEFC
-7DFB478B06671508EC99F2B3821E04C38AF905B433940C483BC3CCC20A571FB4
-EA0EB10FFD32FE4C5BDB144A9809C6D6E978EBCBD5C1689CD63AAD418FF2EB00
-C07026C402691479BFCEC1C3C9D0EFA023544707BBF0C4F2581EC349C329C8F2
-EC1C185775803127892305355EADC87555C3A5C7C39B88E8D634F6678E66AB4F
-7D6868B5CCAC69AB2F780691329EB50A3A5D0D2D84D2D4340F52CCA827A459A9
-9E52E27FC011C98F02CC13CF1B034603530DA1C61BE456828FDE8F6BD179E3DF
-31D20CF6C2E5C43243E89572B1A13A688984B159B85BABCAA891AFD141E2B4C6
-8A4AB955D06C519844A2AA16F60116668AFABCCEB8026ECA6C5B8401EFE42C28
-26FF175448155F403E56406888563C4CAA16E6BEC75BCC5B1EE5A4F5228A5191
-7A4C66DC74ABC6B947907D770B3302F587295E48916E048A233951FFFAEB38C4
-51D2751FE8D76F8F151E85CBD1411EF20719AD02ABB67763FA408B50A5F161E6
-6FF6E0C7D66D02C7D69B58450C9AD117667A64756125CFDCF8C5E87ACF1BCA88
-F285F1110AED5C105EB4692269716750E611D22CC87659150BDBD816C7945C86
-4CF176404B422F4A332D996C525C81BA60695D7683268516CA298247CDFB8443
-5F59A4742C9947CC3E86452EDA5454650FDE9BD847FF514FC6866D701F504F88
-1EAFAD9864B88B4A94185C738B8CCC7DADFF2DCA7B37E797C632A6E36687410C
-9454EB6AFC522016430BCC3D8109D379B70DDCF9DF5308B6EBFDA5E0FE2DBC0E
-6155E392CA5B7F1DF8B212800AB68A34AF59A84780FB4DA396D1B81AA4D7D1E6
-2A985DAE36862E0F46F7ECCF55D5B5FDF849A3445FB41D260A6C36897ABEDC6F
-81DFE56F96DFF7227EFF86462CDDA3E49A191D07BB154D552341EC1126402062
-0DB07461B3B2021911B417FC2A89EDEE5D3993269DAC7A6DBCEB51468706B12E
-A450153DCAFEC64B75A4ABC010A8109D5A8B6B2126042B908588665A3E08735C
-08D18A82AF444557C62F0CC17161507A46A0C18394F475EEB1CC97477D784546
-1E89D671A4E2457A39F8BECA13B1C3C40C7CC063E38A31A1349C92A7DBC8CD39
-6222232C5CAAE2EEC4818676F8747BA35CCEB287909BFF3468636265206D43C6
-FE79F77DE145BEB6EA506645716B1B2C0EB9989707A04AB4E2A9343D0CC9D3A5
-A295E5337B61E9B20861FD534865E2C21EBE959F323659088E0B969DEAB332AA
-5DE5A8752C9B94B388893F2B4E31DF3092F28E4DC3B8BF395B9683A5200E9F5E
-71C3076DDF1BFB6E43B5F6CB723BF555667DEA7B9A721DD41CF7B4AB95FC6476
-C8F8C3E295227651F7114B9582D10D886F83CC18102FA95137673F99E2E57D78
-9FE74CE4D3195E251E6347066FDE3CFEBC2D853997E467739E2B012DD1F8EFCF
-81F5567AAF667748448E815A08A3ABCE31322D1E87AB3F81C3B7BE8A5C4FE989
-1FB99A0E8DF0D3623F0AC0CC6FEEAB56021F4178849451EBD965EACCF1BFFA89
-B8AB1D92AC2ED3C8780D99A204CAEFBC4B730A9F510299E78790886DC7773E88
-9E7D8B1CEF34CE0A77AED44AAA3E3047064AAFC787041B45AD23554A9C300C46
-7177FC5976757D567D43337D9218AFA47FA00856CD05A14940A3C8B8178C2D06
-ACCC1995E035B98100C89B97220490DF8DABDB77591D5ABD2AF5D10D7474391B
-4B9CC1FFC1B4D9D5C2CF01842D734A727AB551CC08D5C7C90BC2BD8E9A38DCF8
-7495E860AB1F8F81B66C38891CD29C05848A220BA1E0595EC503AF941D1FF94C
-7FA2A0F1FAFBA1A4ADC36A2B3F145C1328A9D0772824357EA2BC8433E42EFFB6
-3990C948397C3D68A11390DA02E774BCFE140E1030C659141C8BB01399F2BD00
-1B96A1CC69F77DF652F68260CEC5B7452C6ED6CCEAF4B120C345650AEFE91700
-C5459550F514380FAD5F0BBA2508C5EB5496363271FE69D649D89A37E9BD04B1
-01432B15DA2AB82CD45D1F086A598E51823E227A745E701C10D7536FD61523E9
-BDED60BBA0EB265F94EB050C045BDD437548EC12B2F46CCC6F543F224644521B
-C7860AF607CF90C134233DF6AA783280B26E5D3BFEB682D3FEEBA0D2665A8337
-475E92C4D98A3B1A3B02F02B17F5DCB550C23947DA98661DBE02A44D03568C9C
-D6B7B96C8BE08FF89DD682B519534D177597CE791172EABC384292E5A1A55078
-DEEA6F352521DE269B40E67D127190B03A1825A882ECC28EBCDF85C78EE0ECCB
-5B9E63DA9FE68A90FF751677EFEC3821BF5184633AFF49178845495A91EB364E
-B1BC1BF93B7A062F018D76D276D4DA317FAA08D4B9A390C8ED7BFB34B2D515F0
-7416402669F4E7E6C4FC90DCB3D0F473648A9C8B172AE87B02C037AA31AE6152
-B73600B468D174CF249E407DB07D0D6220F6065B0CE421267FE06ED007A771C3
-0402B2F981FED37CD212FE893F689AB6373B7EED4DE64B2E867326AF8FBA8AE3
-692EFED1BF9DF46951D5F513F9942679CE7E9A17C620987B975ADE400C9808F4
-35726DE4FAAA1C676B0C83C52E7A027EF9AEC383BC1EDFE71F2D29FBC0B20EAE
-911B7E114124552A44EABCE4EB77A6FA41F1C2BCC8D8A39E5C337B6622A7B57B
-91596504B001F60804921E7C32D38D89124DB7109FC2C4FDC9A25D23ED6B3D78
-255C0E155CFABD8EAF060E8235DE285B9D6055E41C9AB269063B65B2445A6C8F
-73F992135378DFC36CD17589D1157AE2C76C6180FAFFDFEE25541B63F13F170E
-034902C00D6F155D77D7FA27E2C2BA9B579225D032B5BAD19242C976DD0DE208
-2E68FFDACE8DB27CC964A3280452E7EA9E2BCB592D6D2C8D3B3D79F1C8BC3978
-3715E110955004751B83E460D40E7729103AFFD778CABD829CC3048E25510A11
-2DB1879A99BCC146EADF5329079E8F13753CD057CFAE3376E35D5115B0F239DA
-3E024673C3240379D923AD6BB2219772E80CB027CE53C89373EF7ACFE38EF9DB
-61F8BB731AEA052D586DB8258DA7B9920FED3E4C834CD5EBA4261C4072A94184
-59246717250A9A74AAC7899122CB890A0F713B16E2D86BE0AFDD1D4DAEDEC5D2
-ADFB093E29E56DD2A80774BC0F3046E90751D4C59033E34A6E952F617BDAB8DA
-8DB611F32B0B15C9D7D407CAB63A14F04BFDB5EFB63EBAC3A8B69C4E22F7BC02
-9AA197F929A547C293F2ED65ED10B6270300FEDFB21000B1971B7CE06BEEFF27
-66BC049704FBB0254F2742D78EE8290E8A5DD5281EA1597C945D21A231DCCC7E
-4FD43005C57CD36AE310789AAE39BC3CC1A7AC9BC008C291911699DE6E1C2DA0
-B61EA2C6BCEC2F9B547C025837D6B2C90C22F2F992644F803C1DB5591DFE1C9F
-3E92EF348ACE485C11D9A9B082DA6CF912FB5AF73AEA2DAE1BAC6397F21F230C
-92A59DC9EFF4902804E6BE7FB18077227774EC29CDA427091617D12B718BCD64
-9FC339926A2D87C6FAA103CE20078883FC7FE0D3C8E5239DEA54A2D302D788D3
-7AF944D9B59B7BF52648A4C931DD9AA381406672B7DA8F7FAF429692FAD2CD95
-519CD8130239484D4EA1F011588A81946BD7CB413E9379E8657982C714C3F1C4
-E4702EF88446BA8ED439B45693A4DBA81E1D12F51275434C5BC8239D4ED8AB38
-9C1D7903EF56F62E101209C1146EA97F7A9BE7BA458F6E90EEF62B9EE7F4B50B
-742A8E80E29EE926188A8AC8CF1A9B0B1C4613A50F9E5AEEFB3ACE2E1DB154E3
-9412698E054AD73B611F110770DB58470ABD8C6A9E253820FE83098CBB2B9621
-CB6D9CC62F97013A68D7F7F51DAFAF6123580EE28939A913766661A31CC33D41
-D30695DBEC32BC0E9CF9C1CC5A61A6D91228BB1C344EE0945EFE6F1E28AF9D60
-3286FF60A724CD3F2F328594DF427BE835C33BE6A410DAB31A2BFDD3CA0737F3
-72B2022A449B28847F41985FB2CC3ED5DDB440927FB8E6C7B43A476429674279
-A044F4225D1388B2BDE8577546F059FA7F995F43956C072B022CBF9BF329C202
-1685F7C63A7E231CAAFB68981DDD796B0ADA0AA83A1F4984D2D1823141865D70
-0641CB24250EBF0B8E62D60409268DDAD6516C0A6B388C4D2E1167ECDE17482C
-19A8594829DDBA8226E1CC0183D82160CCCB52BC2224C1A6DDF4396A7BB3B3D3
-A68E50C5203151E90F853843CE73DF045A9ACA162F72988DBAFBCEE6E1B1B895
-8DE44B802A52EA92286C9C768EF7C6D8232E2868F996DD98CB2F3408015A5BB0
-8F3A22DDDF5D3485CF883DD0477E80191808E76CB4AAD9A4C3478913BF17C5CD
-34365B7E440A9A0BE07A6CE91A0040719CFAC12ACD31A0611CC567107F1DE5BC
-CFB02E943F6B972C57D6F9F7B306E6ACF0D59AEB788E3B57B1E705E49239EA23
-5A9F11AD1260B80284F988AB7AF8FB0A699F1381BEC667BA8E9EDDC807560FC2
-65E08501EC786C946D5B0D324532F7EA2FB33EC0BB2E2EF84020A6975564DA27
-B679B54219E224E9A65E09B5C289E58BF748FE1D32D4D751484C252CC6FDF193
-0CA498DE4A747EC17678E1D1D4DDB6DE365E712822BAB428FC4D5CB0DD34CD8C
-D9AD902B5858BC574B8774E278E0D45E205E6829E4738D8120C1ACB8383347B5
-7B55D27CF1F8872E06017A7E62C7EB2BD0643587AF29FC3324EEC192196CBF33
-6FE4DD8CD83240F94CC7AC45832BAC58462AA469D195D987D741105B5861AC3B
-EDE19D35680553A33A3944917DAE1A38011E5352E235551D227174C29C4487A0
-5F64DE647D3160ACF30A4D78660C2C00ECCDEDC2AF695C1C7D3FCAA68172481A
-CC6D8DAE26E5AAA3F2B52C04513C4FDA5BD658939E90795BADC3CE44CAAFBAB7
-972D9880BBD9B910F33EC4B8CB86A850635E972A9414E319BB9B327C86532275
-4F7717C999070ED9E6A24EFD2B6494CCCED711EE769C835FA077018C6CE83355
-D5628CB19CF27A09AB5DE60F4D099D1703981407B116C1A736588E71104A11D0
-9695548F1A157D0BB890080F76DD12BA4FB8B8B67383EC9A8764CBED60BBB333
-96276BA0555697223E80ED9F9688788F840900808680C1865FD281F3DCBAD383
-12E920AC49826DA6E0A733374EAD25767DC8A32423505E32B277C8B41CA6898B
-B350E225F43F842262851CCB0BA893BFD81FB440C1E67CF0AD751F1482DEEB74
-F5B4E24FC1E4E4B9C907067DCBF66D2608813092E155F1B9F469CF29013382DE
-BB61D28137A91937BDB6821068814B22473CFFB5F97123ADCD6F39545F59120A
-ED18FBC3222B8A6C4780DA0398AE308FE654FEC978B646912B35EDC8939B7DCD
-F7995199261746C1C4A5A1F4CD031F2C2F15F6887CC0914D185913E3021C995C
-CBB112F46C3E08CF328BB928BFA4543E8BCAF867036BE24B894433754CA06242
-5C52429B475EC45E8611CF03332ABA62DAE7D8EE31E8F9B0690C0E367BF7B013
-940B8AC8D40FCF6D2D2499464AB0D2C16BB6DC0F53C87C115E37178E46E7DB8D
-AE16C117AD668CB7A5F558BCD58628B56CACBF6598CA8B2B90950D8C4B3BF3ED
-4E9F003631BB68B0354C98BDE0811DE1718B0563F02A68C555BE4B3CE2E54BE4
-CA04D230E5F18A7E63EFA5B5D6B3FB1210B6BCD12E9BE069376BE5FED9E60684
-78B73FE4D212044ACE582FD96AB6F1D651815CDB1F6EB6194A82E8840EBF574D
-E7425C4638ED7A79D04F
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTI10
-%!PS-AdobeFont-1.1: CMTI10 1.00B
-%%CreationDate: 1992 Feb 19 19:56:16
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTI10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMTI10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 49 /one put
-dup 50 /two put
-dup 58 /colon put
-dup 67 /C put
-dup 70 /F put
-dup 73 /I put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 87 /W put
-dup 90 /Z put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-readonly def
-/FontBBox{-163 -250 1146 969}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9E3948FFB0B4E70F212EC976D65099D84E0D37A7A771C3101D6AD26A0513378F
-21EC3643079EECE0C9AB54B4772E5DCA82D0D4ACC7F42FB493AA04A3BF4A1BD6
-06ECE186315DBE9CFDCB1A0303E8D3E83027CD3AFA8F0BD466A8E8CA0E7164CF
-55B332FAD43482748DD4A1CB3F40CB1F5E67192B8216A0D8FE30F9F05BF016F5
-B5CC130A4B0796EE065495422FBA55BEE9BFD99D04464D987AC4D237C208FA86
-0B112E55CE7B3782A34BC22E3DE31755D9AFF19E490C8E43B85E17ECE87FA8B9
-1485831624D24F37C39BF9972D74E6EC4784727AC00B9C4A3AD3DA1C22BD6961
-7E0ADAF55422F22ACA5E4DCD4DF9FCD187A566B7FB661D0530454D0DD6C6C50A
-7A3875C6CBF8EC7769F32A1F3F7FC1C072BADEC97794D4E90E0035282A170402
-356E5A9CD9ABD80AC4342A5283E458A7269252F4541CBB6452B39ED54D336D0B
-19928E9CD1AB26AD83EB209E2EC75011A2643813053B5DBB0246097C4821B5F2
-C92554E9140BE35B2DBFCD98809A8EC9FC910FDE9E0D86457C70ACB056EBF90F
-244DC0A5BBD455E15D6E3180311D52CF50B0BF7D0A7F64F3A1821E0AEDBC2E7B
-AEB549FE1D51088C153799C6E089B5D5D65E1C4E2D2B430CDF1FFA23CCB25D95
-5C4DD885310A706B320AB25C8D742C6F29953254FA54DAAEE60ED477877D19BC
-D28E9AB576B0EA088171FD000B60D73B3C57F754BC07EBC9BF751B7D2B32459D
-993861B7C4B0D98C422A11BECEF76F4EFC0ECAEE89723E6CED53E3678D733363
-2DF068AEF0FE7DFB57393BDAA439A6A4C396F86032A98009EAE1247B7DE83B3B
-E46DF2898598FF5E6CA6953127432A967E4FD41CDD60D6E413059A58FA556EF3
-309178B57C16A763CFC9BEEC276944BDEA255789EF4E1ECDE1EA43EEDB955513
-F42EDDCF39AE522A1DC2DC523F046EEC4CCAE25792B702C288732F5B13B5CCE7
-E8B6A1A1DB86B1EA38883E481BEAB54023EDD9BB94E7780DEEA577ADAA169E66
-AB7D8607B409619E79F242CF52E618AC0DAE43317C507CDB27EA8A1472D4E8D9
-17E62C98DFB049C78AD15560CE44A39581BD6B555165091C5D41071212A9D2E3
-05965AA02B8A67AEB04D915DADC1B84A531A1D672AAA06E9F720BA88419A3183
-63D1F9A3BEF8CB2E23CD1F9C003BD7849F093D3B4C83C153A5A790C1F9E37948
-5799C02F004C61A6FFDEAA1F9AE884DDD40DEB1539CFE3C3BE03C7C33CB54D56
-2C2A0F467049797B56D407AA43EE6B8C3F978A7D945A80BF711C12D6BFFA3DED
-35FA8B22E68BBE4FEC5EF5705D30044C578A6F8113AD90DF6EB8C75B8CC7F74F
-CA551C3D4943F2E82A9FEC069BF6CB92D44DA5D5715D4E11DF8F0F44C9504509
-2104847DECF36C46182AA495C81E880C4B3B31654105A8B1117596CCD7B57420
-43C7EC42014311F62536A94E3AC36FA69C5CD12B8D4D3C6BFBC90E67E3B7B7BF
-4A0F6FC16D71B953E6F212F884129C4403A390595DCB1720C2EDAE97DCE2E197
-4DB600960AA50ECB3155C663E1C0450B40754192A74994B5ECE9229C938FD355
-94055C25B53A286A29D908F8048C30EA913B4C833956917729B10CB170DD7DD4
-FB21B1BDE76493D268645A5B75AD0743662DC3DC91B78450836CA39B4DED7CA3
-04611039EE3AC83663E9D1982AA616AE30A1735E9330397539D586B771EA9C6F
-25B786ECA5D52EBAA1B10FF75C785074559225EC8C21365D23F5676689EA11D9
-69D83F6B565A25560412D699513FC9C4CF662366138FE20FB98EB39724C6EE39
-0F6282CACAA7A4B62691B57F199CEC25FB2B0057D6A975D759BA897D23308B86
-C9C38B8F290771DB2CCB3839CECA08618BBBCCB7E4337143CDF48E805A4BB92B
-E35A31DE1A46BA1A1EF934C4817B0C031048D81F84FA6AE74243AEB237B5254E
-D14BEBF55C098230A07AB074B9F12057F83C75729703A8F2285B87C81207805C
-7D22504E6213B0F96217A76B671CF6A6D9544CE16AEF671842A730671C47287E
-0C4A6417E38E14602519FE55365721403155FED97F800689583038D8217656AC
-C1D510FF421F14EEC6FFA5F3122D514579983D5ED82DE1713209D688B5485D68
-661D404BADFE9D1544F43F6E589B922153A46F8AC08F0BEA4006C30C0154D9BC
-B0335DD372A202D570AB13FB684D94C8223F3261C19856D5912C974B5347EF45
-2763EF9C28CDF85C251AC54A677F6761E56EFE8F73DB82E73E237DAAF2A42D91
-C793E3865348FB7EFCE077E222C67ECEE98E7E787A2F2FF9A8A051EDA27B237A
-E0F9CFB00B0D1F9D2B8838B6BADC474C3AB62988950C636ED7E97B322430524F
-96ED0A797D95B46D2E758C6EFC883B282941D8DDEDFE279A3AE60FB97EF810C7
-B46E6E2E3A54D6C20DACA354886C3F383D74F574FCF9B2C7B0FF6168E4DFD795
-5975B60618C30DC93F37D1E653F2C82445AEE2335446ADA0E7E44A42BFBF566E
-A2A2075D08279F8063F693C66B8774A0E5B4CE43DC3826C678B8E75F11214A73
-3FC08C1FF96E99618C61234396A7B4AAB6494D852367B9A7E4D42A339CD3B036
-F0F4DE3894B5911B09E33CDC1BE8FC40A948DBA04BF5C4F9B5329899F8A4F9AD
-9F81D734351E0371A50B3C44ED484402FE74B02B5FA0A2328E2DF74CED6EAC54
-1D23C79D0F4966868935017D843C0B56839D96731E9C7D9D48CD3943A4EF35FE
-4E0A72D046DF5278970339B14765D3586E21FDB9607E319DCC377F64CE8174D3
-262886432732BE2E484D1BA21C11CD3B3722F97341FD620415733EB48B528E2D
-E8D2104B20938F9AD9471139DC419D8512BDF735FE8B1181FEBF9C2427841224
-C95ACAC6F3C639E029F51AC088F08F30DCAE9F3B7AAEBEB02E317EAF43A9E6C3
-6BE19EA3A5FF2310AA615FBB331FFE5229E03BFB30FF8A8D3EC58697336FF8A3
-E8E87856CCD7315A2F6AD278971BE079293DF1ED84D640F36DF123E1637A913C
-D43E46FB70CE7814B968919D3B3AA330BA6B2EA7E0834AA177C241B823A50BEB
-CE28A78F40C12E54F33B907D98F2BBC75C8CA28345D53642DC018A0A879209ED
-94D425137E2C6D6C973240565419AF88B8FC6592FC0862F901A93F9E496D3E09
-E1079909AFDFDBA3ED95B97ECC6A927FC68CCBCA735C3A22C88E4CDE2A8DEAD5
-7098A5776D7B2A015C995BB749C3C9123BE116912ADAF326F7F6B224DD3D20D0
-36A8C76154A61A7E6FD5573E921D0599E80C673E76F46B119CCA9469F56DA90A
-F327C735A8EC5F1EC7E1345578DC7C3E937E9A25B171581B6CEBFB3224B2CE22
-4F6DB70F8B84282DE10AF9632E0C321B47BCFC52E18D4C22D439507C5A0934E5
-2332A12A45E0D522544C7AB646E3FF14619CC719FC55C115426818540DA4AF8F
-4E406E9D6F1EB870E3C63B81ED4E19B69DBAC73F5C8CA7CD4DBB0B59BCA006B8
-764E2D7CF42C150FB01F8ABF766E9F9F13C7270B77EF16009B28CD7D294AECED
-0985A7224B692D79EC89EA25ECDD7854C7D37EDE9B080B2B9019984ACD22B820
-B528DD3150DDE15D02B7AEAC12185B6B18870FC5D421DC4252DED8A81B2CBD51
-00E21F056EEF9D3BD5FAFA6CD9E0FBFB3611D95B4B1B5F9550394BC522931C83
-40CA6C5B2A65696986DE8AE84A7486CC294485F90A7EDAA1C81C0778A1E111D3
-F3178F78865097E9FDEADA149FA7ACF6108531D74367A9A5E250AD6D90C05B1E
-DF3E11CDE1D290CCFDBDD28E23223A97293B664ABAFB63E67EB200809A3075D4
-2C23D63D8C8BFFBC63677592D6B15C679895F855BDC6D503BFB8DF69C3880262
-E2CFA0FD0B461DC069499E6F41905C3CF34E7C0E68DB918658B626699AFB4A55
-EFEAEDF0B1A1C27147FE2CC5686F39923EEE894C1F7F989B3C83F50A61B544CA
-C323429FE5057DEEC6B86AEA47ED7E624E81E007440D94098B61954B827F3567
-60E946F3068812633176738D9CEFB335EAACCF8B5DC67AE9278C8893435C4EC1
-51C58C84AE1FE61317F03B303AB2657CA405AAD17BC67C065CCAFBA929A231E4
-9138B05FE8FD9B9C3A4BAEAA8F1AE9A0BD5298844E8BD3B5DF3362187CEB4D3D
-8330DFA4A4E7B78B6AD944B825872EA1512DA861E25EA39DFA15DCFDE9354BF0
-45A161EEDA2E43000003EF02DC1FD4CB8EADD2688A9267CE14A2758D05065AE2
-0C139EBB392A38B8CD245F6D54D5234489B7174A735596D482EC39E530694CED
-E0D06C6370BD9DADE7FBF8FF7F9C122894B845EFDC0731F6BDA9652B90C3DA7D
-56FC5B2E580DD8EE33A8F4F792BC5545E72589060AC930F228792B4387B2CFD4
-36839E4C936002D583DB5E49B7F7D5FE62945979D871446E3D66A7C749D47B49
-9ED54768330A47A4965497D5B7804AF6BF4C7D5151A4316B28FA680BAE785703
-C4928390F72AC49B3113F6A0C9A70DCE2605506C1322B243A975BD99B8F9121A
-A1691C2DBF4BB8F2FAC8C38E7F12C6EC97245CC529BD7D1E58798E41CF5B2957
-94C7905567DC37D6E9EECBB3053EE2E417861C68B6D569CB5C2B9682CE68D9FF
-17C2EE93E73A696BEAA3F31672C71F810D3E3BAA2BF622F0DFB2FC26A42A2CBB
-A77C9FB9A0A87E65ECC219C518B88B5744A503849E91B3E8F9DE0E19FAB22913
-A2DF65C53B221DC04BAC13EE2EE3DE3E1D2F7F03EFD2942EF772A3310C5052FD
-AC7B7715675F2FA7B66533F15BB4551DA3B747277AE890CC92D7B75F542A2ED5
-29E1A404C05DB8F84B62601A6618283743B62583C42F9E70FDBE26A03023A3B5
-221F5E718CEEF47545E1DA6DEB23E6D94545B7429473266CEB86262CEF02458E
-0FFBDEDDF3CF30D373AF1495978E529A92156932F0112315CF72991AD3DE9494
-A1B69206CCBBEFA3DE3FD6C83B3065597619A78D86D0843D2D8E5F41C3F1386E
-A106B31259D96D37A29333F6378CD08C62963817AD8DB4291357CE8B168F549A
-40819527B90836631679808DABD2184FB39F1BC0F795BD74F3198CD8DA048A76
-334EF308BC4436DB752A902248C0F667B99289C84082D866A28F5211FDD354FD
-F1420299C1015056337A0053F22541D7F8B7719A1FCAC909BF416FBC144B326C
-354AC6FA54B46F50ED1A017A4AD03CBAF4524B5D9FC2A93E68B24188CBBF5301
-DC3BA8BEAD9C5C8F0BAB7E44BE36CBAA9363F4D7AEE5587D065E992B65207DD3
-3A9565ED06965EB9FD804DA494103FBC53BBAFF7A5AC6BCA6E6854DFE3F0F3A4
-294B80F965545092FD28956EF0D74DB4F7C6E90D2041F2EF1813BBDF74140A79
-E772951711390A218675AF7500FD209A64B2D8A1773D29CE77293E9EAE4D2A95
-AE4AC8EDCAA78DC1AEA0A086AB320B01DE0AA76CD13183B71E8ADA5344DDC302
-860E47737DFB1C59396EFDC970A58E07A0ABA0221F46EC134A60858FE3EF0418
-CCD953D6FDD347B9BCE4500CC0B31B319CA6EE1116C26772059D2CF2F253F438
-F154D5D160779A1D01A2BFAAFB059CB9A8B5E9CBD6B74D7D129217EFDB84EB95
-2A16D582EEEE929E75A477E963E1C20C4E459DC03574859BA87D874C9BB6466F
-2C5947D90738FC45DEFA1DDCD43BF922025AA46B882F10674A7D6CA3F96C61B6
-63579A5CD8AC5EF5A28CB05D5F4C70E26EE7082A7C524E54422EDCA62F7D7CD1
-D0BAAC925A01443885DC8800187E38D5832E179790B7C57CD81DDB08F010478B
-5DAB0CEACC8ECF25F9DCF4BA7995C9D27BF91C0A6F44C7BEC22EA80F3468ABB1
-480C86E9BDED1355AB957DA76B8AAD114E2806EC599E0DEE68386EFA08E4E40E
-98EA4D38BC4DB8677783E12B37C67DD232087CA1C69293455382E04ECBCA25BA
-1763C2F0496BF765042CC437282EAF57C739B40F71BFF9C45A4F2B45B5B7F55B
-A4E9C93FEA3F381997313710D788ADCE4855292194F749EA3D7247C67338EEDB
-6056DC28AF2ED5FF35DB3CE777A7A3764D0ACD83AFB617196A679519C9D85236
-7F4F985BCEA64B76740372FB36246D8E53CEB7B7CC748F6580285BE0E0B85730
-EB275D2BDB65245D00879281170E3823240D86C70FE1C6BEB289D03FD6DBDD8C
-46C39D99163D4073AA38BDAFB2CB2862084C8629B7EA4027673282553CA25964
-A3135AE606E53CFE4833A40927BD824F48A61B285087312D7E2F888700AA54FB
-B5129A4B48814229AFE93EF21F015B4013BA53CA5D5AD1CD370EBF878C88F667
-68976E57795E8A04A3530555C3AF78DA4AD992DFAD788B97BD998836721D98AF
-DE896D80423C7320B10F181F202E484B6533B2C69788C9BC98F3E4F5E169F005
-0110D693E3A562834AD6931A520239B01503708422F7F5F99A42D1F12E8172C1
-3177EE3B1947DC6DEA876BF50A6E12306175890760D7403E206AB37AAA921872
-7EA906DD2B279F3D15D2D8CC042E76017B58E9D92BA1050B8CCB239908797140
-CFDF98EB87602BBCA74077E052A34A35E1789CC277D875B358A1A7DB03C5B555
-DA269D4FE7FF46852F67FA08F22614BA16E717729439B41348EBBE5618A390AF
-37C69B5A6854196B271DAB8279D8809BA723A38476D807C0544F8607779851CD
-733CA33D7DB1E925E7EEE0F9579285A25D49C02A5B2CFA46C6ECCA8848D931E0
-241E2577912B7D6BC97A5942460A154DB64E84A34EFE3182784D3F9520418E14
-1221AD8FC9676C9FA23E12E3EB2421229537B294C2DB7DB4F9F7F59528B633B3
-F205B8E44BCD65ABF8460751C008B15C1E29D92731C28C3BAD20A516EAFC8D14
-AC45F03474FFEB3AC30118B9BB65FC294E6B9EBD3639D1112118E21217B42C80
-341656CB34777D289B2535235300B7ADE22D58602F172393390F6D3E89E3582F
-49248453A556B53EA3DAF8D09E31C76D7AFBB424CEAEB4E48A154255FEB491B7
-B1B6C0F6EDE7D0B208BF560ACCF8A979FC8BBE4B9B733BAC4329A81DD7F1A424
-CE70DEA8FB57474B5CBEAA44C7750F423F7CFF87CB396E6BA4DC5A83EE90F4C2
-E6A92C2C688F6B512B0ACD38BD4E9BCCB2A5E44B7C3E5CE85F5228CDD70950C0
-7EB90E1544E28CEF8B6B0EA6D5F41AB63A67389BDAD2E4861116BE6573847059
-B298C4EFEDB1D54C79F497EA66E5A9FAD73BB7E8A9133C13696C88A06BF5D524
-7A004F7DC1A96C5915762D0A074AE8F4BC22CE1A28000744429C246529D2AF72
-07735361C8A0F93B3A9CEA09BFB08860A2830D0959FB29A763C7F4FA3B78332B
-2B54C6D80C49B39C6161EF8BB13C1CF3BA3AE125E7895673CA65A0DCB798E386
-731B0ADF123FD640888864E12CD249A07FF04AB3CB55F5E4872E4EEF6A476C6A
-622B25878A96E96C973CAC19DD8F8F4375C540FCDFC1DA04D68BD8E88A6E93BD
-E456ECF454F77F9872D1E543269827D2ED5BE8D4B6101B210889640337B467BD
-D891E89A0504DE2EC8C2F8A49F79C80CFD7726CB9CBD486D8A7A14D0DB19FBD9
-BE4670E41A51B658D11DCF6D5FEC46DC9881C1F20C093535A503750ABEBD9F40
-C384A08C8A1AC202FDAB1033A1940B3985CE12E12647E961B722AD69AF665B32
-5E8E475EF586D43779313E4BD39F27A3AFE157925B1E70F696091239529394C6
-8F750CA22DC40BEBD46E38525E5F4C29B9DBB2D1A9A6B2A4284FF5CF79E27A92
-8B8250A8C0D42D1E05447957573B427708689D1F4BCC1AF64D3AFD06A9FCA125
-60EA3CD490818D0D1CA41B05FC39E82EE0844FF56CC4D63311D16B9573ACE853
-FCC74A8D23EC47DE262E6AC887D39A47A475E420840B9F2E4A3FF9371733181A
-A334EE427DBD9DE17A2F8D5378D2AF7BC2FA929D0F26D50B80AA434F0E64FBF1
-FF717CAF4B7724B90C540C1A73AEADC3F7FDD93A70D721F30AD9D3A837CE90EF
-53840FB7E372BA60FC7B818203ACD0EF434A0E6BD547A2415D7C0DD3D25EFC62
-1947449D4B32337EC24E58C908BF964BE24473326756CBD5D7D18FB5182C618D
-CB049AFE9CAFFDB2EE905D800CDFCFD74AA00A4D8874949B4F6DCEE16E13858E
-DD85882C2F680CA9CA11F38F9DE96238DB2DD079A320336B7F5803834435D497
-BBC719D3FB98447805DB3F510F4DA24B1ED0F290C88CDB07D876501723734F48
-444FCA19BB8AE24BB9B87F33CAFC6F15937D90AA2E613020ACC4501CF6986B63
-6C16A1273B52E27E2078735E0FDD0F548072DC0564F7CEBB69949F4D05DAD1F4
-D7D2137248308CAFD413A1E6A00EF496B7AAB9C6594DB53ECA2FCF557594353E
-FD0701EA9E9B554810CDE9724166A37EFC9A1EC7C4F723C0DD7DA7DFA85443FB
-469B16EEF3E679889AFC21A16D80E8C6A9278D047853FF7F4121738038D65914
-B418EA2E2571FE7EC9CA59D70241DEF5E8B09915AFBBA748B9230C2D337D0BF6
-C41BAD94FA14E726981F3C7EE5BC19F655494900B71F6A4C1378462F4D074E79
-7BE6D7BDF4E9B081D7E78C4EFC7B1BC75DB6223F3C4108D2E77575B597E4B99B
-9AE6E6169EC1F914250B77EE211A2FCE44234A71C284D2F0F0152D783E8AFDF0
-D8B99EDE6B0B85A2DB35F497C757000D08693FB6850ACADB6E5E06A53588CB2D
-F2FF6F0602E31EDEE36DC55B99BC5C468A55E8E73F2C331654C26EF665A54DE5
-49C4BA3B414447416398C914EFBB78D0C116C2BF46D40685DD9D44B897FAB55C
-AD2482AC00FF814D455D24F9C04B0C74E382262A8B2216B9B2BBE32526D3B96F
-6A285CBDE4A4ED190ED793FF37A36C136C1113F0F7886098306552C925BEE936
-47D29E87D7C05115D50DCA457A3349F56BD6886B0F01C4B84CF262ACBD6897CF
-F8C47EDBC94C34AA4007065D036272A09E46DAA78ABE67A0902B822A643665CB
-60631C1DC479BB23757218C57222234A4C4139603A1B3B0A91153EA68C0E8169
-F05285973741F2CA77D65B89E4514ADB52AD1027A6ADE5A38F6609042D1F17CA
-ADF0E65B3882D79F55CA92BFF9F4CD07C8A520236FA3DE83519C3D73E7C45969
-5022B76A773217F092525042D0A58E1BCFC6A4276AB82746E4B4380235E84E4F
-32EABA1D2EF4839691D46EFEB83310EFE1F1F59F326BD21D18139F439AB7B064
-330ED2E3A87981F1FF97C300CF4991F382A43E483AE5D2BEAE4E934FAAD69A52
-08614B91E001A2CB2817497169F226FF3DF7E1B689C2FA2D88E4A627F5C8EC2C
-7F3F84C9A218D0155A2530298AD7D6785C6390223EC30E9B396EBB9A3BF36C4E
-FA9E2F00AFA13BC844BE7C916F6ED240E2A9991A9B8AF0C09226580AED0BEAF8
-77C6E00681030D1978A77430FAC3C1499741AAF17E95EF9C3381560003A743C4
-E533FB8BA7ADAE0059250337529278F1970E7618570AC01554B1A06FDBDDEB94
-60AC68A68AAACFA99982DC382C427616129B982A13E28C6F1D936EC99BFB973D
-EAA8F33A4759EBC22621D94CBDC81A55FDA622AB9F6C4EAE6B83248DA14F277F
-99F2B4949BCB7BC9B22EA39D273D3B53D8F1A4B67679F5C84758E01D837C9978
-EA108917BA41DDA9963119EEBFA0FEB191334A0491B8D742BFA25B77254AD6B5
-E97C1A6189D1F6A4DB27E47A6794E157AFDA6C6D275E159AA498FC690BAEA95F
-8666A912DCB5943A107DD8370415B50458A2B80013E7AF36BE71F76E4D40A5EE
-FEB8B3D82CF53831DC8DA4930C6BF0FB554905DCD7D68C572C640B99F6A020BA
-108E4B76B8EA6FF7515323DA82F83D97DBD5E4D79CC85425FB8BCAF65480CDF1
-B7195FE79E3290944F025C8D1BBA3568DF9A1C23F713C912B87CC4E82A4A9B85
-2BA58C55C14EB82FA8943E88081D7633E17560A7AF91501AC48E8B6537A6C192
-C9886E9D287121D28C1911735968D124D7CF314B98B0336477CBC2FE6E925DFF
-C1538DD1AA6CE9B8D55B6EADC9FD047CCD41CF56E17F6BBF6DEB2C11DBE5C6C5
-2227A154A9A1776B80F999EED0E5BD0DE46D1261FE47A2C95392830D0CCD2C1E
-3E1BD6C7813848A1C952272B75E6C75987B3FC5A9F908BD43406D93B269B767D
-91AD8D97736BE57234B3F228DD82C996979AD28C19774153D8BD7B3110E74789
-202EF3D4FE0F11057D63C1CC71CB8BE121E67684FAA0AB7E7C442C66DB9A7126
-3B7C1CFEF972CC0C8968C75748418CCF8DD51D92EDC4587FDF09D930483F2ECD
-F5A4ACD1204FEF6F833F344640C4C35771A875381F5D1BB152B4BD02C487D243
-7CACD9614FB18D9D8EA1A31EBD1BA368D6ECDBD8400303B543D12081D1E0EC0C
-B2258F3E608EC7440CB337BAF0ECA6F7018E9FD55CB9512CFA8703C9EE5ED7E1
-B1987182608110758C666DE3CCEA7212CA3E4FF4EC97A346B97F0E4E09E89E58
-17ABE269A8D3E88B05F02B12406EE9BB032BA01A666710E5A0C023BAB0C8779A
-4D75A5C9BF4093A97B663359F790C617006374D68CE6D9D21BE3C1219672EB72
-BB25A6EBBF61AFAA75C3DBE2915F9BEDEECFAF0A207B9A07EF84FC912E977EBA
-334362DA8C082D0083B0268BCF2B7C0B335A6F9F3D48BC5942BF0D6CBE130E14
-7DB1AE22179762267E7B5E2FFE0871C5D9FF74FCC8E05DBC704E1B68A41345B7
-7ADD7DB2CB47DDDAE7B0EC1630D9A2E2E5A56E6F0CEB38AF80260788370D00D0
-7295AEEE325E8D242679EF1937A7E2826312E25C8B276A16E680014B530AE5A9
-096059F4579BB4D1C4D6BA02BDC24BECB4710F616055E440ECB76C1FE3C4CCA9
-707720FA30D47654CB95A940408FC190FC55161E0B6BD39471FEF3060717F58E
-2AEA8DF7FC35C96253C88B52193CFCF2DCB29696585A3EEAED2BE160575B4042
-9845C48F9883305195271D52878E8F7DF2569FFAC7FB415B281DBA57931A1789
-95F324EAD43962F0F952AE70162733AF7D3E5E25F06C3F62D725143E0D523AF9
-8A56D464A6451A1681B02AEBECFFC15622D1ED62BB02A105675FA88D6D21347A
-11FB834CE630DAD592A11466C37DAE1B7E4EAEFE14E136EDD7EDD3E4D92E8024
-38C8D9ADEF9E1CD297F5F9B0B0842DD599271B811533E5DE8053DC46DFBB66F5
-C7C96341E54B0FC4C7022D8740AABF818023CBC00CE7324ED45D9CB0CB047472
-777DA67D96412D52154D96F66BFE7C84D8BACB6F9F74FC98E6ED07A65BAEFD52
-B2EB18B0BA1DDAAAD31A611B944E336583EDBDB7C32B93B34D29C81B28A29224
-C73F9190DA592525994601F76815AE1BFBB8ABDDDA53C603640FD728533D587C
-6A658847908AE9A333FB67715914FE94A4CF310FF7CB0FCDDF32FBEFFAE6FB8C
-38F48A31488107503B11B74729A04153E9B1DCF3D7210E24453F3F32A5F4BBD4
-4D04209EF7E78B7F40710D41C7463293850313027F9BADE5F6D923A4AEDBD51A
-B94EE3168CBC920245D47EB7924FA7182D1264DC03644E5C482446107C73F9CC
-226E54CDDB05AB1ECA3F74FE3C065A50D27BF3FAC51148E70A1D9613FC2E9026
-A49742A1AB33F441AAB1F965AB4723FA6BABC26EC76C80F8BFF453FE0D8B032C
-A6E8898B921C42272C39F0A4754AE0E528250907AFAB97EE834CCF646BF45D9E
-C2AFA77EA1D49A588A8B4C29D393F77ED6D8B4BBB8D8B335062CAFAAB6068265
-6C714B0B1D532072D519CD5E0E1D0E36C4B969F9C4CBF121709C2E66052C2594
-AAC0676B317AD254C54B23F62076D94B4B1D2D7D25073B9066CC9D2592C11999
-BE3B1F81AA3578C12AB62E40E19BA971BBAD041ABBCCB1CC52B2C329CA658D6D
-1C7A4AE5E9A53D5F5C0AA0CC355276249EE590CBE4E5BB498DE144523AFDC597
-5C8AB92E09AC64E135B5FF5592B9CDAAA2FF72AB239503E00F105C452F50FB83
-E3EB3C29BA2637DB8D32EFF22AFEF8344E1BF6E3734D9E15E07469EC8DB7EC43
-1F1C8340992BF0D459A00C864E24D4514A4DF5324182B15AA5ADB781AFC35F52
-ACC6E06313E6669996C091287663B1C937BCA7202FE42BF68D6943D6D33C4BFA
-A181DA5F41834BB816E6118F5AD7B0EFA04FBE31EB75ABBA47554264E576F12B
-B491BAB6F3057549E41440458909FD2570FF0643DFFBF5E742967C816D0A6D19
-833C24BB176B0A9F460DC0326A98C29B47EC79D2C8907207522C7C1E0164C07F
-132C023860F1C7A8CA96E6D9189E33298E704FBB9244B4A8D876C93BB2779A19
-1C72A9E4C15E83A24B2DB28ABBFB95888ECB3236E43FADAD62B7B087BF015875
-3DDCC4232251FBA6BAE04738AE1DB90B39989915944DB5A1F6C4ACC4EF9E7454
-E69C01B58E318128126A646DE0045029B14DA6E94A1B9CEE4FC10F97DFF01214
-F0FFF81FB15E3D9E1B52F2B05289BFF9B69912B5EF839F468781553A49EECD97
-2E13770AE4D085B91DE471BD2640E2403261AD755006CD902A32E283D957BE35
-DFEA27B83C1FA0C1A9F94B51E9D2D96EE504D31E11554525FB48DB3A02549200
-F536D99AA5464397B9EC5AB6857823F5BFA5DC4FDAF3904103C98E0CFF96E732
-32B1B48562F9A374EC18DA983FD4CAEE7F9406F81F002EF5FD3571CB97E390B8
-0CEB821CC2BAD3B16BF81E0B2C25CCB577AF5354F5F5971803711754F32A57A4
-628B7C35862589E2B6A2A9CC89411AF3FE85E7D51DE0E1F08935A341E05FD754
-8E06B874D39586686AB28ECD43FC1F0AAFCB969276D82D4F37A2447E198EA3FD
-1D7CCAF396302399D3B753ED6095E4C9A4F166D958BDEF0081EF1B3CB07C60FE
-761611BE4B997867A1E3E26DA37A42B69E6EB7A4437D6374F8B11104E1B23707
-B5F5FB66CC639ABB4F4715B29765BF5F161BA2D5D8FCA6622E9A26E2E498A5F4
-38158FB48F473ACE1CCE790C0FCC6F366D984DAEC0486F6715DD5F0BB5CCFB19
-8B80406DDA12C0DD65A1EF5E17427114E2ECEB391519908547E03EAA1F699F6C
-3C1CFD8439E20F9E3E0A1CFEAF2B084797887447B6B1C6C5A8372CA66EB6BB68
-AEA7908E1AE75F6BDFE2232857C0E08CA9AB5A2AED21847D5F97334CD8C6A83F
-61B9D31EBC98B29BE807DDDAEF34C894130A9185B59605DE58443699F692C081
-3552D9468E09032E01778661F00665EDF64955B8A49911BEDA0C031D299ED686
-4378C7438517F55F504A93EAFF9911E07987D3AC9E1AC8C2223414A6092ECD8D
-89929C1661154F2D6AC57844C946111880622515B8856B864AB52F64B2A6E0AF
-FDEA020D38443C4DAAC7F530F74277FCFB81B5C101A798B447D73EE22904EBDF
-7980A050BDE54CFBBC323AEA39315FC1376B0CAB8C5A77CA2A93B2A69242C737
-E04BEB1C50A0C3D4AEC9D407DCA484ADC97F32A4AFA66A4403A448A26121E4C3
-90EA7293D6A283F3866E836A1E09817B38536D5C6E2E9FD462CDFFF9A86FDD51
-9F70037610689C9577170EEFF9A4434FED83289E136E5EA6A2D87885601C7231
-DA11AD29DCA9E3839533837AB35AA3682F145AF9895FE7A31885CB3D6D3DDCD3
-2638C959E8547EC2A21E873443E993387E8F7EF27928F06F78C8BF0C4A3E39FD
-7163DD62AF5925852B7557CCBFFD318DE0059428A544ED98A7D9AD0EDB8986FF
-3A48169377F55556750445C36D8C2FDEBD4D871D9B6FEF4A75A4CD0020B2B3BA
-EF5969BD18424B90D2D37BE4343D1ABB3B6177FA6E53E98A9156C07CFA22FD2C
-DEDB12F8C8ED7838A1FE2681E45744471D9252627BBFA8BFC6EEE5B361331695
-3C2BADFFF325EE99F3DD6117282A1F3ED9F4339D47271347163EB784A571C53B
-B32509BE4D5E013011C7B32EBB65C476A1D2E86A809DD53F1C732C79A76CB95F
-03F7114B7184BEF393769EE0EB1E01321E4B9FA34B2A04201FC060EA81B0CBD3
-4EEBA9569D603B49EA889FC7E5BC14B03EF09DD3B8CE8EE59BB8BCB6AEB94D5F
-C65A93BE6516D027CB5DB46B35AC14A283665F7159223A1A4DB14516C0DECCC6
-1407D335537B580C04EAE2D6B49730E87E1536B773999448FBC8CF4ED7079A60
-7D6DA8964AEEB72E9C6BF565618C71DF73D85E54CE22B4B60E4E43A9B5985FC5
-51B15DE98ED1573DA8B73164F662A193F3DEBCE61D68F64A85EBD31D9C1B3B31
-F99D699FD2A138F94208D318295E8DCC4C717B0774135C388576E9960121F16E
-05467DCA248D7C54781EE84C80100AFC3D4288DC587EFA9D94615F035EAAE795
-95BD7053B2682B64871120817CAF1157004B1159D139F8F5C96379CF1753A6D1
-3D9D82D037A26F9493700DE64FB681EDE5E58890187124D2F3C57A9C4976D655
-FEA048C910932C7461B8D885ED9DCE7CB77BF0E57DA07C3BB12367DE24DA95B6
-25EDDE97176C2F6B75BD7A61773679C579CBF9313358EAD2BE69FBCAA7A294D9
-7B5629E626839AE4AEBC03381CF7E0C1E882BC7D27CB3C108FD076D1D502C7C7
-0C54BB693D39FCE7CE9E084912104127D577C5EF8F4AA2816AEB91D448B89159
-1FE260368156783DF360C0142E902CCB57370C4434EF83D3C4BEAB981FB50B8C
-6A89DC8BB57518AE4672229E7035A68F09D81D394864C7BF51A55D11B7A5E9B2
-6EC9B832BC1FE8C42033733422815DECB750BEF1AD45765E706E525122FF3EED
-7C92F6AA55ED063CA465E3243B4C3C1827406F0FC60D8D3A9EE8B8BF2F484114
-3DE7EC7CCB7E89EB00F5D52EDDB2E8DD13B2451C2E6EF58480B44A12A2898AE0
-2339D290CDCBBFFBB2B532C1C80C626CFA12375ED08606E81975633076689A69
-155E2DB375A3954DF5332A552754A4E103F2754A988E83946E15306F7ADF462E
-A4B82AC6DE81234A6DBFEA6A91CBADC7603D5CD631
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMSL10
-%!PS-AdobeFont-1.1: CMSL10 1.0
-%%CreationDate: 1991 Aug 20 16:40:20
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSL10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -9.46 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSL10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 89 /Y put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 124 /emdash put
-readonly def
-/FontBBox{-62 -250 1123 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9429B9D40924DC059325D9D4CC0344F3F997A99E6CC0676735EBCD685AAC9142
-08DAFEC78BB41AFC2F1C219910BDF41D6279284EF600B69776CA15BC8A34347C
-30783C52AFA60FBE3E353E2AE354CF87B558776A22C776C7A0B5AB5CE1F941EF
-C2D9CAC37294BF407A671F10E4743BF842143F4F7DFEE643BA3BBD8BB9E3F24A
-BCCF7F0ADF8BA500620C81033EAE8C4EF2C1DEF13AC575F1B3BBB66F093D3B78
-5412B82B67FFA087AF57182B2230F9F2137180CA58A7D9B2C822FF04BE6CD01D
-43B2CA7058C7B953F6D9B5D6E91ECBAA5CDE1159B0E59C83DBAD96D6C8C8BAB1
-374EF652D10C0F3EE7104472C98DD3572AAF2D45A70BF7061447E21EE3C3BF23
-DF39C2D1B35B42CD5297BEBE6BC94F7C9DC6E61EC67E4F677256FED9064BD3E4
-B51A71B1D27CA4E5AA9E1D8080E6DAB5310711EEF87C40859FA935B19524AE83
-63B163FA8397BDFF443227FEDF7DB27DC35D89FB1C5E435DA0619A5C88AFC73B
-89A2DF5E767C5B536BC7167A840A0C32BD57A14DE69A7D0D819AC36FF32F908A
-5070F32983BB007437E3500799DF5E0AD3710A4C0000F0098D5BE99F2EB9C1C2
-C444FD9552D0DCA098A94B3BF176F511CEE13DB7EFFAED7C47B5ADCF8D4700F5
-7A5FD1B49560969BF5C44F3749370663A04776F749DDD7B50674D93254426C4B
-EFE264BEE7810EC93784B7C01A7F29EFD92547E13A2C7851A2E709FBD5B87850
-4A44F08F56A542DBE072D2FBC58D9E6468E1AB858DC35240E30D31C7AC13D6C5
-7D2BB634BEE96FA0E10F842B11A789F72A333DD6DDCB1BC23227EBC406E50B40
-30AF0C48E6359AB0C46898CDAF1118E46BFF8B00F54EACBC2AC262AB898C42B9
-2E080C10DE923C1A027CA718A83ACB879C37A1B7CBABAA34E7937C1CEC2CBF6F
-55FF0EC9D84EF9670F6B75F605D946C6642F4A54FE50609FD98028BDAC593852
-9980F55F4F16B3F60671472AB434358E6017B225DF2A5B12409320E0C35B9A38
-4A50E8ED725B6E3E92AAAE89FD3C8AB816B3DB2EF4718708DF5DDF5E371F3D63
-3A89D3CE54BD42854F3B204DBAE32DB7F96832C130AC7123FA18C3FFE146EF43
-0872D6B4F52EC27E21C5F4CC79C5090886058F43745C1B8AE1F19CC1A8E7066A
-E67A1E788EAB8DF286DB392D09A53A2DA05E2F09107D17624C8F335267F3EDAB
-632638B61AC51C1240FF13B07E160731EA4C70BF5480DE7E251561DAF06B6310
-D8011A705D5ABD4B28606D48F1A865E1A1CB3AF6BF59B12C48BA3C67A423E17B
-67D206A43CCCF17F0DC7AEB99C5282C227228445B66B8AAE255F94FC094CC8ED
-C6CBFB45E6E46767A1C0A1B877E9D69E737668DFA576999E17CB7E6E1E283995
-B92EB2A388DCAC2FC528474A5A0EB35BA90AA31326EA3FD40283F7192EA6F6BB
-356B8859169931FA48A0869B087BF79312DB8BDCD01F2E343CD6CE6A44752ABD
-BA7CDCDB638701B39B32D0AEE57C7D7223EBA1DB6BCDC6A07FDCA3C38BB429B6
-8F896712AD2574E6144792A529329B849FC2EF9CD9E422A9112C5CB05D1BD513
-DF307B79C7CCA39AE8902F94A4B643C15EAAB8853C01433FEDA20C165F127D46
-AAAA0A27FCC3BDA9681E103C2C8F539D13A817A39219340DE466A37ACE5D4643
-5B0C287A3E6E74F1C1A9BA9F64D0FC9CEA533F4B40C1FEDEE115F8B63552BB86
-585724A76957329E714DCFC9D9D6AFC5AFC2506F258CEE8B152654BE66BA7A5E
-8DCED21DF5A18A17056F5A4E1F00C9D4301C287C5CB8C07EBD49C261D85F6A00
-656FDB9B68F88A096952465893457C6650AA403AC5A2CE22F8AD80AF8712C461
-491754BD849328CD16266C6066E8B147017A334787DA8A02D5E7F70F508968FD
-4038BA55FF1B9B7A12353C1A67397A4F09420857E4869273C913681978911F06
-D06A2211D42026B879FC77C80D31C8DA9C020977B54F17C0FCCCDD46E3F144B7
-F24304B4B385FF15EB1F110A451CDFA3E9D41400AE753D816E0F500A89065C97
-F3C48C0F90F51A70D49A65B71B6E7640BA3B665288506E6EB6B25FB1AE0FE86D
-F15A534D6B0A23612E459ED8D892C6355C67F19F208590D75E4CA2531C7D54BF
-C4BD0D02A620B9345803700184E4BAE6B9AECFA5EB96EB00E3A3103E4F484852
-95A27E80CF42791FEDA2ED2CAAFD9F76BC2DA372555CE32B2FBDC0CC11CED6B5
-6AB508C3A20A613F88BCF7EEF1A3A7E33AAFBD197E29278E47365DB7B2B8A7D4
-4F6F630CE19A5949F1F92DED59EE20B3DECC899659933389D2B20CF40E1564C9
-0B53010BBC619AFA62D13869F31DCDAFAAF267C5262912F8A21AB7EF4E4B401B
-03BD37D730E5DD696536567E7D8BF7328147EB420D67D18B792D4691AFEF9961
-40D78AC041963D98E0F32EE060209019962A0DA3BC9469DECC10323A4CF6DCFE
-AD848FF62C482CB64F36B4A0EB963A41C804E9FC06D678DB1B59580C16E048D3
-344045A303766BB43BCD2097C985FF769C0E0C3879DA69B56CDCE591F27BC78E
-9E5F5D6DB443B46FF0711E85BDDBF21A920BEB5CD8F75CABEF91F738F6F2C913
-A8C49CA9D9AC71CD79C6A5250C0AA9B04DF78D8696D76D2FF99F0E611F92B213
-89FF8528EAE70B60F6B82F7A3FB6E67501A82BB9B81EDC10079A6C5C0FA02CCD
-667A6B415D328AFAFBBF1CEF5BAC0092B6580322336098ED9793B7C2DEB1B12F
-D552351140F6D79473A7C8B51AEFC5682A77BCB3E8678E6A0E77A8454C467254
-E17992583317D59702E6E26FA44BBAB82BB9CAA058C1238B216F3A986DAF2671
-E0C17FD8A986252E4331FB348AD3943F87E86A427B65C39350C7C517668C1EA2
-C1F42968770EB096611780EFFEF9A6860745171BDC91ACD1704446774E5835F2
-7AC02728DA6452F2E861DE0DA25121B08578C3E35E1919BE49D1747D3060953D
-05960730E1658AFBDF5C99B479F89250CF2D538F30492703BBF0C42FEB05D632
-2DB9E4331066EE7308A159B2EA26D7EB8F6E0508F13998BB2303EDCFBF3D2CA0
-EDCEEBA69D99024ED24FDACDDF40A8CFA996A3EECD1DA81FA2F59A8AA8738139
-8A38A5A5FEBDB5CFE4D2D0E6B2BBBFC7048C7AF2F687117BE7E2E33F669DD417
-2CD985DF7D107E733BD9E09AA3F02FD8C99E8AEA4DD70E4DCDB7B82BB3F11CD7
-3C7866D16AF28A3636199A712C0DDC782AD9645866443F5135D8F51C7EE9C2F6
-FD6B9E19A73262D87ACF76DCEB741564E625FDB342CD1F3FA743290D280A5FAA
-05321A4A8399A20046253FA44F875A27367BEEEF2446E2F15967BDDBFBD95450
-512767C8C5779FE85B0C7097CD5D96B69928DA71F3F76D3F4CFD87F827787250
-46E208572A2DAECFC675F69545A463016947F4811C924CBC4B0634E2C001DABA
-CCD4C5DADA558D5421FBDBF8C1C1962E2C0D452DC7A1285C47A4E5CB2DB8D965
-3A16D26BD7C00485C2F17E71369782CA97F1DE49EEC68ED369BB6B9DB1FBDA0A
-4381FE3380B3D68B76F74775CF67FE417546F70EC1D14B2BD1A526EF7FC3C564
-0B955593FF952D2BF090DFBD9290284A2D556D1CD03B5E0E06EF9C48B19ED270
-A01E5DA6CC1B54ADC019D0203D1D769CAE457B5576D9485D7A3BE3F8CA9B7D82
-D08C0D3EBDE7C7ECFF5B31F29848A3DA2009EF053EF7D13A39FA938143BB61D9
-976E9CB791301D076DCF4A5F6E6775B72E662F24EBFAD725B571DB8DBF10A281
-9AC2BDD417106F82850B4FB626C671E71A85491937CE26994B4AE3029B73AF4A
-CEB1E5C27DFBBDA4378786E94826AB2771EE06E56293C58A80136E07D2F6CF5F
-FE275792BCB97C0E4C2A2ED563C841F621BF46F21DEABF69DED06F1647A64ACA
-F31105F6473F239272DF6FF325D8EA93D85679710DF2B3F9D06DE851D7F6D991
-4FAA2C121E8529DBE00CAF32AFA5E39976FE1ED499E7E3AF28801144A0505631
-5301019D5D9C4281D143BE3DCB8F318B5E7613A27D84C66E10104CEA0E25009D
-C9A933476FF02EEE929135B5507878E0275EE14150B4ABB3034915F0D489BD71
-1B3412F39BAE4F3DD3B657EC5D5DDB1AC9F431D3295709653CFCCFE2A4442169
-63596742AD51AD2A21783C21D791DF0269845435F9C3EC91C7444842C0093BC7
-AFF99C782CF7CA23E953CB769780F252466F9BFF5D2B2453E1020E5B49882BAF
-8B68CC2E80E02E700B01815D122A5D271DABB62BFD3C106F6875145104C1C965
-F05DE045332318DB753D8E8276B3C0840D0A9AE3DE793BD9E109AA0D18981C2B
-514F0160799454B94CC2E0E169A6FD483EE46EE5F9CCFB4699411B5CCBDD78C1
-866A15C4B598271C5E2B5013DC6899022B09609C6E497AB1DC236FDF35875F78
-BC99EADC04BBCED190C3A74E59B93F6366256E9E7EA827AE2AF88CB0FACE7BBB
-88C13857598FDF7FAA299AD58F48048F45556233DE5281F4F41515846D766E75
-D85C52F12EC1794234C42F9F0C8DE08E7E80DF76F62BED9230BAAE750B3ED684
-6CC18938753F6D46827B6C375C4AC361A4916C9E4F05D047481F85FCDB6A4CDD
-89912B2948387E8668BE9338DA652452B328C2EBD7A35482671096BB2B6D038C
-C7FB1398759B8396D192C874319DABB76AC95180B7BA1134CCF7CC6901BC75B8
-D13DFB39DCD47A16AFDF933E80A3C18EA76C14579916A17E541F7134AEA52517
-177C622FBF40F7C75060AA4CC058C0BD0AC655D2E818E87AC8C0C0401BCCFC67
-055FD15D025BD403E0106B7D8DE2013E8D3DE96BB1F024E63D0022E59E751665
-6D149F842E7CF2B498AB9F053C60DD220584FF16B9C20C1C8B42FCF6C31E772C
-54C7C63A166F6689B852579723FD25D5AC7CC1CE1B20C34704C226F3459605BF
-83C20E2ADF663E4765EB3C8C05B0B879EC8BC6313FEEB0B2E868807C3C7DA43B
-8348622F780166CFA8B089BA110A43F77CA8C09A3D6FEA31E32052F55173C866
-78A25FE37B3C52DDA874CE9FCC6C94EC2176A8F6908A9D89133BEFD95E79810A
-578FC0A51DD6F2446080129216D1CD462D0C8B5FA8DC9EBB6A3F34246615E5BE
-50E484ACCE9B9E0957CEF1642FC3E14C80BC14BCABADB61EE3E6CD2BB79C4AFD
-675C414F98C0620C7A91E75E2295BD0AB286DECD52F676290D6B5BEA296517F7
-81F6EC5F682C7B6FDD416AC585F2A041906AE1F3A356E97CB9373E8108390708
-184026DD80D0711ACD30510CD81266940A74E9CB78665AC0E15403E499236DE8
-C963042D39AFFCB1C39D72D7CFF89A1A218AF997F1A3B04BF1A9424A7BE78C9D
-ACA267C62C6C3EF01CC9E7710739F8DDA90046E9A4C0411C748F2551AEBBC466
-C93BBC6B9D874153DE5D7BC25F2F0545A223D767CB239772F3AA96593CA5CE9F
-5664DBBE8560E777E2941C9FCD22F65E9E8E556F09B477CE454FD7D1662971EE
-CDE4C5899DD76B0285235AFEF6B1BCD8CB58DCD2E908F41EC8FC56DD66CF1D78
-3EABDAB5A518D272BF1360CDF6D484FB782384908062D29B350EC29847E7081F
-B77F61F8ABF351A7C4B5946F96FFCF73FF1C2FA58D89812CA2C12EB60D0BC9EF
-2B33C65DCCA72054DA8A839FD8E7E3EE98B4A8C5C9B5C3FC9B054A07E7421265
-C06272337BF86115D904851A12A393A46E1EC3B2F7FC9559AB55A25CBD8EA075
-4A97DD79EE3E83C4A586A28A705CF1E0D7470953B163DA693E053CE99F7FA480
-1CE3234047C8D21F9C82CBB504BED56BEFEF93BA2351D9406EC42881CA864CC8
-193B05F6FB0B0FAD790B2B6FD58F05B7269FC9D6534BB9EF6B75DD0E3B9378A7
-C4A97FB7CC1BCBACBBEFBD7FF7DBDF0D6FFF65D299B95790AB84BFCBD6306726
-053253440030C5A5147D1DF6351A6D5D8E18F42124437296DEC1D09532CBAD9D
-97E38C375FC2C71B986C1EF54DB4FB0E2BBE04AC563363D06457A84D567F3335
-A007E37DEDEF877BDD62A39CB156AB379A31B8ED5E3993680BF0AF077BC895FE
-254DE9953A69EE824E49E008B38ABCC20DE80BD6934CE0404FBB2CBE0ED28DB0
-EBBD6D28DC35C8C88CF2FF4491D2F5B0F83B26F85D3692853AD6BEA5785B5981
-6C7E5A4F301BAEC672A34A9DB0D80855FFC4D865CCE845C58D5950E424AF2AF3
-0850269ED7C0C52A6DE92C1935BDB6C02681972D98F99869A30EFF9DDA144FBE
-04C8FE264FB8942304163BAE396DE1BC2B137C35F742C21D465CFDE2B6AB9DA2
-C89935BA16E133C3A81757702A0C490519C413D230A5D33F0AC84CDFB8D7EF40
-120515EF383BE74AFE6A214E056DC98DC560600C9B0A57568AF650E0D2F80FC3
-137992C3C6ACFBABD14A81235CEE0A9BD743E1512D790D11F28FE3D07886AF22
-47BFBE157DC9AFEB5A09D40403643D04256EEA85C39AC1CE909365199CC85BED
-80D5D5ABDCB25506D7EB4B52CD412436896C1DEEC661E48BE16F388BDB4D2673
-D8A9C1242A1B058737CDA19648DFD72134BCF7F6E292381C331269F3947D3A59
-AD9A34B6368FE4CF2D973429FA6F527BB228BF2E37F31E58AF5FFD45A94F7CAC
-DB81642D723C01F3AD25A278D87B27D6A6F32FD56BDA371BAA9B5F864130FE6D
-DF8D73B516F6E20FFAC81ACB0150F5ECC080E0C46A5B5D501FB867D3F0499847
-6E59F2CE715189E81C5E1228DEFF7F5DC760F4D1DDACE3F7149DAF9CBE68ACF9
-C8DA12628C07F29B21D82C7C724CE95A50F95D3D3A86591876A6DA0E36310E0C
-AEA133442C07A4EA0397A69F83BBBB1A4B4E6B8F7BCAA71D8ED9A538A380AF5B
-E8335A514D114A7111D3288610B653468AD721417F01FFE0CA457F4A7E65A4CD
-9158C6E574002D163986F9C4DF3265C1555FBCAE3B40280B7F40E63560CAE3F4
-1737235740D9002F5B2E6F58B5920B99C777788219FAA488A2ED5F8CF4D3811D
-10A321C377C17227460E5091E3D01C185323F3B0839643CC4D9FB150A5EAC0D7
-45DE4919AEAABFEDE466357CF075839B6ED866E89631C7DED2E8292523D28988
-687163F4F69FDF1273237F4C2E5D595190609D39791A11856005E3B56CB30F60
-5C76EDA611F38033850306EFDBFD10111AB4453E529AAAD3D8048A1A60690176
-FD981EE99D52604DA1DDEFD29498FD859CC1AC117D42F62506B5040B8A27D8B3
-63C8257A0D5CBD3FFC332C9A77E9E7640515238FBC96A6A57CA3BDC1BB050D66
-3CE205F1913749357AA9F399DDDD96496CE317762A837E4D60A67F8700C74BD9
-8B38ADC85914B35B6CDBA018C26417ACF4BA101193F158A68947193849A2C3DA
-F5138DDE7937368DBB65FD8A3EC9590B13699A8264F6625CE6660F2B05E18345
-5EBF0D9115A4988036F19451558F7222C478D97E3F06C64B0AF3E6D2637DBFAA
-DA0AE10A3AE1BD15E14DC9FE955ABD16CBDFBE410BC9305A47EFB7551D351A68
-E1E85B5CFDC3E83AD0273E235930D2216CA1A0E2F83F357C70BDA79FB07DDA67
-5FA022F626710D053110EF8FC5A37B14523F7595F2D8B191647F797E3A32F02A
-38EEA80C6DB62EDB165E46A3CF1093E7A840665D3B86632456C4BD58F8F9332A
-5E1C52853F0AF418DD658F6975A8B4A1702FB64FA40AA051B57F2C42B51CF787
-9FE35AC98D25DE3482E5A2B2130C72366187D255EA710256370ED0F188EEA243
-A2B153A52ACFFB3762288DB525E9F1BB08A5EC5C6CB032F78F7CB5D266912B1E
-8967E58AE8FEA5C2798EA3DD31308ACA66A7BC017E888205ECEE59D6D1935419
-B3DFC4BCA4669E983D0A8C40EF8D705D9363678C76712678590DF98741EA2BF1
-01F15D7D47DA60A42FEF198FB18B8EFD1A31BC3ABB57C1D9B1A2D64D9D76D131
-6A0A150D2C0CF681C082A3FD08B2DBF51B64C2523132A1259762FB6F47A524FD
-75B87250DA15D1BE3AC05D3A79A20D19CFBFAD5D9BBD0D6E71E839DD432F48D3
-311AB858F4107EDB50726F9F8A189CA84F7F125CE2DFBB874CF444D2DD165B15
-2E3D6AB03CBB7D9CBE28CA101A6593E0921C052E6DC54D03DE4800128E644C25
-87B781D64B22503B5061D69636D37C237F1B62D568DD42BC69C2D77FD3F78B5E
-07E8284D5B0D4D15F1E8CF70305E8E46DA1CB42EBDADFC8D65E69BD4A46F4F0B
-D6EFB732DD1C6240C7BCE44C99B3BE7254A188F26478CDF12D6EE24F1C2D83F3
-92EAFEADBEEF7E86D30B5D50A978885638A0D1B834D513D554E84F388BBAEF0E
-F4ED0F75065D6F1F9058E581DA7096EFB1900384C0E04236368DC5FF2FAF84EA
-9355CA0AFE2E8DDC76A8B90CE195CB4CC48477471A07F297D0B5DD32AA437DC7
-31A37347F7355516310C073F51B8576EC2F9030F09F6F45075A392C5CB18B650
-509CBCCAD37CFE6AFE232A7A6D21881D667F51420353CF8A7BB09D4B00E23CD2
-AC61DD527F4BD79240650D6BF9EA53A86803E112DAFBFB0BCE3BE6FB117F2B47
-B1B3CF1D90D2BE58A35BB06FC628E5064DC76F01FCFF96FD6076FCEC26A0478A
-3CA8E1891C9BF8D9AC4449A65FF1C7F361BAC8ADA1E32B5AE6DBD18EF4AEF32C
-8F84381E21D7FB6C391BF6386432134EC79A716B2CD4324DAF57B985BFD7FB87
-57CFAC69CCEB4F98137AE626EE1E653C59F697323D62849C0926C2504D60AEBB
-97A5BD2A183EA77695A269A79BAC47697438A71F2E364CB61C0413645F16C57B
-A1593782C0BBEB60653ECA519B0BB5605D25E0040CA4A11C9C2FC2F5E82C0DB3
-EFE49D9203FEFEAEFAD79FB4FAC4595B92DECF7822C56DA3AEF822544EDF1B43
-BA5FC0DFD98490B8C6665BCC871175F24DE30FE67F847EB924B63F12B3DE39BF
-5A33FAAE2E785BC8BA5F8809626260B159EE3624BE39D64D3E1AAC8C762D50A2
-508324FADFE19C54CFDA9BA61BC327B5842BF4FE3D54E5F3ABEF21684B9ABB9D
-EC3E1C5E023F073406D8B4C7AFC103E196EDA2E5A142B80B06DFD09DE99842F2
-DC550FC37307BDB5DCC5E1E80866E49CC170F0A082F4357A94542A5F5FAEAD6A
-A795FDDA3017B981DEBB2F0267CE26BB78BB498385E94B39010B93B23958AE7B
-45386A3E35E9BEC3BE3D2C197A6B7B6BE23E602052B7C58AA264F0EF1D779F04
-5D2E19819BE201F16A8FA515828FEFAFA0CD72C2B4B47ACD10ED87B3D39EF7B9
-2DD0EDA1DDD44699AA11196E48822F11AA7CBCD57B9AAC4E0657B56BAA02B230
-4D1113B8BE0AA09057CB4097B45CE2F2F6709C282586289B30657BDD19C2754B
-23526268EF8B616FF68E39031E5E052630E1B5CA5E7EC5D363ABF0DC0324A3D0
-BB4E888019425A07611FC6ECC14E3D9F13685E241C3C26B295CE8132961E4BCE
-6B570992D73CB110300280AF27DFF5230EBFAB54A1F7A30914C479B720DFAE23
-1E060B4EE82BA4747404BF340AAF3DB62494327A2C342382C053163B4C8CEB73
-BEFB0A64B4BE72F0215037D6848D1F2B2165F569C8B7E2A471068BD9B39F6433
-7FD7F82FB80348AAED8860C5336714017BBD40C465E2CD116D509F5FB570EA1D
-5A28918BDDC6AC918643F79472945930542DA0F3FCE0ED0172E5D7AC01E7C2BE
-C88CEDE2FF908B90E2D0F17409D1BC4429BEAED8FEB64D192C5619536AFA72F4
-88B197C2EC5C3F4E86C4D7063E831800B098C771572344EDC9F6F031C5B535FB
-306C9834BA9D932DA6323C717C9676B13D203D71CA476B98C25B9D0FE5FB1D58
-38190C49E189E207CF980004999C7EB603495836707FF66118D306C4CF690BF8
-2253BBADBBCBC5CF2764D2015D1A8DBB3742238EDFC0015C9BDB5CDB996BD1D4
-6818EFFD831A363AA81C641F502294E56EE5717B297B6CA1A50ED60D8B1CFFB6
-29151463169D30AEB685AC120F6F703B10037398B20B4A19421F5D5E2F2196AD
-A9324CD03D0311278AC5316A25779960046BBF8AFA27A90897E9C93BE55E8E19
-EEE5A9B49983527A21161E1EF849AEDBEB4AA0D16100A82A0C17F747DEB26C63
-529BC7C019524B772959361267CAF66A753C57599A1484DC5DC5B7B8619F9CA8
-3EF20A88BFEAD2D55DF0B9114D8E3F77FBAA8B3E6A9216D1A5C03FE4A2E29571
-A187662A0E75A997128C51FE310CE2563647CE8F7E78D3366B725129063CF456
-4C46451A40D1D01402F1BD9E3ED8CEF26D74AF047A9B8F066E935BEFBD7B74B3
-4F896E5E3F86F6D1B76F0D3C4638751EEFBAE65F116007EC04C6D54F7C66534B
-63368C667BA9DA44E132E6E6750266F0563149E955823D3323FB1D88602C1DAF
-91ABF0CC1CE35D50C204387E622BB33A6F867E65BDB0C79346298AA472CD7894
-4F0F2C997D41CB47C8F485AC5D6D60CAE106A1F70EAC706A065660BE5EB56CFE
-2D0F55C144EDA227D692F99FC92CFCC619B48D774FA5815770720EC9BD945291
-6E992BC1A0DA54D9D37BA4AF917FC2AA55F9361148EF665C3BA2A8455B493423
-BC75A0831E138F085CFB6FE00D4AAA8CE338B8431749A3BF2F9D022E57E34D73
-AB02D498DD1465AFB511B7CE8FC1106FA5AD1254DDDE19F4919D2EC534C499DB
-A5BBE3174AEE7CDB1E0E312E7B3FD2495CAF5E674124515B1179D8E45601FEAE
-B144DB54CE59D6D12D5B5222F365323035373B7F8EEB42924383E6BE093187C8
-47E9F72BC50AA6C43B33E4BE133479AD6E5F9B0684200552AA37D4E5B9D7747A
-8D94B165F5A1DEF256FBA55097BD0F3FD1D7DAB79B2FBA873B1A0ED3BA3698BB
-81EF45AFA1BC17A88E31F8B58618393EB50CB66DCB053D400889B289390513C1
-E65684F9BA2ADF1ABB9186BF3A1F3E6269CEC1AEFED4523B102F440296A6669F
-0004898DD5ED4D136C84CFA893F051217E551D9BB109DC066495FC3D9E21E29C
-61622A8F661164D4572970785027DAC03A03D250EA5A0FE9F0C51F8B116F1984
-68A29ECE9960D050553E874FD559460CE7D3CFD2E8063BEA191F742A881CD532
-2907C967810EA6B4AC72708D62914E0061A51815D321BE8B2CC28A5F1220D46C
-D4CA5E82C7F7E265A204B650B38D17768565CFA0D90DA917B1FED14F8F6D46AD
-E7EDB249CA57EF69995EB897D855170DB24EB306DF5B4C1413605F791C44407A
-22D53D19404B0DAB66CF1071ED8EF6F57A35EEC83CBAADD9584ADD74801ACDC6
-9D7079A183739B7DAEAD055FE8CF8E9981529941002CA30A12C3ED013709A59C
-DFD3FBCA7244393CC27485B72A5D656B74AF298DB699E109D4FFE01D77779CB5
-1DBF65578E675480661D853200C3D666E7854C8EB197AF183C7E719394964212
-0F469E87697D0048F3842431BF10D19361C6F3C0D244335001CB401DA457C734
-5FC96047D1A45669D9FBE9BAF45820F3FE522BF150D53526900D8DF705DF1461
-2AF52B9F9C1CA9FAE4BB64CD641EC8889EDA72B5A50C878D43D3D2E8763C42B5
-D2F151D54B72279AEDC3AA8A5C094CE5AC9CCC6A9982FBA1A8095F8EBA2E6170
-AAF51DE96629DC4E891405F93472CD4AD45D854BA69A672C29BFEE6471D2C667
-0BEA37060BD4790EF53535F68AF9B5C51610C6C803FD9777EEE7F31433C640F0
-4592B5A05BD05AC815AC3F4E7098F7FEA00BD30542EBA0BDC61BE489E11D6F3E
-0A6C9296D0AE9BD7A4A11CDA7CCAB031D76E09B41BA530F761F34A6652B2E404
-49A9DFF71AD0E6A333CAC5D24C95A0F66D4FFFF006E56602D5E911875BCF96C1
-A19ECB6C7BFCB001CA81037386BA7857D60F9A28D2A9ADA240069754F0EA4CF5
-6068BE5772A74D9A0BEC5F1B0C44747476DDD6A68301F2A58A961910DB6D205D
-370F9ABC897FF767C18F1F7D78ADEE0807AC1C4B66AF7DE68BB568233D044A0A
-089E6C8A420129616FE5456B2143AC62725097A19628F3967CD677659FC655B6
-DD22ADC822A5B1FF2761832804158F6BFAD3AA6877DA79C29C3F438E616C1FCF
-C5027493EB503FB22846E6EC21041E47F5F37929A70D384181032D7F9A8EC6BF
-9C77A34E4D5FC83450B3784B77DC7F46507FAD4C59BA798CD9873AC22577B6A6
-9932394D57086C6A2DFFB221D1C65E1FFD8061C035A4B1B5B02CD0230927158C
-07BB76F5B953BF530BB5E9B29ADC1B5C3AAB365FD0D781FB1E3B4A5DBF837ECD
-93E21C5D8B67492C7B424079F9B62F12B9CD58497F38C90BDFA280940A503067
-08BE0093B29A33C68B18AF820BE01657795ED7A06C2580AC06F0493C59AE9177
-EA75CE1AF552894FB296AF2903B323BA15BF4762733563EF6ECE4F2A2A8636EA
-6AB535F95C2F98BB0C3C5509E23A1DC04E0AEF5B91BA3F2BAD1C6C1DC5BCBEC3
-A83674D19785AB8924E9867F0E489EB962BF5F8E3B6170B5690D4C6A1BE521E8
-B09A5BCE219FAEC1418CD14BEA725AA688D6FF28F0211BC4EBB14D1013BAC8B5
-A7F28FD4E0B33CD7E051F8CC27DAC79530A3478C79B43F7B3155F97C10FC84A9
-C4BE63BCC37C7E3CEB7C14717163E902CD957017C0B023E71D04A29E3C424CAF
-2A1EEEB4C7C79842F062E7E668F7AC6F3CCAB7D34FF0B8DFC135348B32F3D040
-0BDC235FF4C0B533116C4A311A4EBE4D93A2DEAA5EE14FF43DB3A1E343B3F04D
-D0D43938DFEBD69A44719AD6A9DF4A53F6B857E96810865950484EAC676C7E24
-34C8ADCD142084E2297C1C32A9388DE6B832926DBEC25957590B05730987C00A
-42E08E3FF9A3A465F2E219E75954582684C15F65A6DF071401E7E58C40CD3AE7
-DCBADE6D8FCA3301D68F0E81C1EBD1E69ED4F2F5DCBBF17656047E887E08BC2A
-1D896E062D59FA6CEEBC56B6723E49F839CDEA7899264A2D1BF7E48ECCEE1EED
-7C86D5BD5CB5D8CFDF3ECE4939A22D2A9032BA745AF2DF5C7F91FE4D866E6324
-518D8C7999C2FDA6779F144462029EFDBC0EA5E201C207C107D39BF611663E41
-5AEC0B37E3092EC37846DB737A84A05A6B88E6654E691939554CBB03563E96A0
-01B8371D4DEE25312E2B0EB90086FC494E179DBC70AC525395231F93B49B04BF
-B93C99D8D3049A9DCE647695761ADABDBC5240337114A90488C6C4B1E209DAA9
-55EB3BC0C965993AC8E2C8D0D0A7E97FA118917B448E0D1A608DA5629ADBBC45
-11519016D530903DDAA1DE7B4282759FB4E41899D94130C3E583695557070AD8
-B9510DEE22EADB8E1D0DC22B85453705F0B6F59B9C30CD2EA845CEB084EF92AF
-D028CD99A8B08FE2CC63AD9EA8779E32FF927A1301BA3E0F77A3D862FE399CB8
-2AFE428564823C894330521CC2FD8462313B06CE2610FB6F033B19B6D50EC0B0
-45B412D291A2C92FB5E0A1B9DFE1C257B18987A793005FA591A3A99A389C5637
-77BD5CA585E4DB46553ABD1A9E6C49648025BFA974221AF71989924191676321
-D8BC0C2FDA627B626E36A6C30ABA8590C560D58A9B278D4BC8FAB9D0680CE874
-BB5C07D5E617EFB06804791F0A5344600711BC9D16D5A75D59597A0EAC2D3007
-429F6D11D53D97187B01DB88944A261B256B74D5BCAFFA4DB3FB8C7B66ADC500
-D97B4A98ADB6A60B375FE6CD4DE92D151827BCFCA63D2271E6319FDCBC91B8A3
-D987FA7614F56AF51467B9D860BF5913AD6D6DD981C41D588066A20556DEBB00
-C37611BA36EA8BDE29C45ABE9CA964D9380AA1B156440A7A9F3D1219430222F1
-E5DED04055F3138849FFE0D2D23CF2A4C16B4373E69E5A9515D52EFE92121CF8
-FE49A53A387AFF37CB668BCADE61593AEE3CCD78A2E40AC7F7AD53FAF0B334EE
-2CE9474C43A8F745E8EB9139C65EBB14CAAE13903F62A33A65D5E29AD45C8A7E
-7589127E9CFA74CAE15C1988CB6D150F5976331FC153CC13610B804C66FDEAA2
-6318A3E31C5E92326CC475289F66B82EA76F1BB29C3152EF979B025DBF8BE049
-128D23C49A094B3C70DF0A6E9C3C5F98774A6DA798013469C92EC09A30751399
-D6544A4ABD87F4750AB1DDF787F46D98E3311B1640F7D7F10BCC77C462A3AFBB
-CAD3CB3954CF53D0A3690CCE3A07AE8653F0DEA5BA711C69D61B58A6F2877E3D
-4C7D4A1D8F797C497318A26E43AB8E4581DCDEF81AA5A470712B421042D59778
-EDFE7A3BC148B5040C8734227B33544D0DF33318351021C1100BA913B3C4A2D0
-799EE051C71F2DE24C59D5BDF818AD5905C0B61AF8008EFFA5CF52473A62F6D9
-86B787A2788837A0D7779D16DEC55F3B83D248B9389407C22B1F4A674B5A14C0
-BD2D691BD9525EC94C2931007C797BCC8E9C4E27345ED46DB4F9BC60C31B3345
-74F21A6D13B857CD9D4B59C8206D6250DDCCE60EA76E688B86DC8C9F2A72C866
-D8CDF56410550C2591E4697ABE86D74A51E0DE671849C5AF50E70636BDDBEC1E
-DDCD74409CB6190338912FFD8BA79880298E54DBA7B2CA3791AEE581901F71F5
-CA2A7E9514C8AC4E789C917D10C18787B2644C5EAC961A9CFC4071554664BBBB
-03F93F9FB8AE1BE31DB2DB66AEDDC36AA2A9417B255937FDD57ED74B5E4E90DD
-CB2EED5E680C87E7D354717B885A7052FF9AA413F79BABCB8BB6CE03939C3D77
-1A11BD9B5B11B28F4AC99A7ED0E9E2AF18589C443D8D7ABC72203ABA0A9A1E56
-5E522ADE675AA4EC12D3797E7E330E3B09C0B69FD3EF30349DEE4F5FCF789994
-11A76A12B413127BA6F03434009E01ABB3DD7AE3AD6C134354D438E169EEAEA3
-5CBE2DB693D6C20C62411B7DCAE4E26B3BAD191B8A9562FE2FB6DF4714DC311F
-E7428D8C9B0D09EAA42F49871513215F10C0B330C75CD71D65273D23D31B1C2C
-05FD731F173504C089AC663533A6C9FABCF602B231A24D5C08396F4EA21D1D8A
-E1213851CC95C91D7626389BB6EAAFDB55B1874F4B23AC40291B69C3BA3536BB
-734C64108A748246661743EB227F8B8BDCB43130C62E327B9A6EE3DEF4431568
-3E082203E4D04910527688E8D8E4C077346C447D827F8EE789023A87BD779495
-7B7F6D86B236BEBFFC90C3BAB159C980BB6630920CA0118043EE85E090EBEA58
-2C95405D8505CD00F6C42E29B543D2AA364E2302560AB9C8F1A888928B11BAFC
-C6841EC5C10B8A89876A92E07EF5C12DB5086F2BCFE425AC1AAD76F7664EC108
-A46C8AABC878C60E66A64335EE4D2CAAF9DE00665D26C3DAD514AFDB9ACDE18B
-77A39416BF26F7E60EFEB4AE20CA3B28FCB2C6052161F3514D7F1C0DD328B598
-62DC3F1F458789DAA88742023271F4C7D8ED4329206624F006B5B8017BA7E853
-8AB2C2E904B11CA6598D971A758CD79BBE09442A22603B8682CC5E2B58FEF657
-B271CCAA51DA95AC0E25E09640813F66F4B7CA1A51BC85E7C60607BE329B634A
-5EC93D93CAC6748B5BDFED18534624A16A04665F44527CB0F95B890196E610AE
-A09A630071E64A7B69F18CAAEC39B093537D2A422766EFE1843B111458483E79
-2B7D8867A42CABBAE2B58E3E6142D2359D038322C1E35E7464888ADD2D2CFE1B
-1C7477BBD81979AAFFFA85038646641D3C5F5B6342031E0F5995A64B83A4DD26
-78433393C9287492BF46FECE53E7AE61D113CDDE8FC4945FD1624C2AE6BBFF96
-5ECE8C0E15DD49894A26A11AD3A509C51E206ACA05A75FAC6D85C4F8F390CA44
-9085E037A3BC1BAC41CF8E02D6007BDB231C78E7853DF2C78B807E59AB6B8F44
-0048F8D44445A6208A41B6C3B2967893ADD900B156724E0AE2B41A26956A99AD
-7E19606708FED04F40460A10439565D7BA4D0B45B4BC6AE343B0ED8422066D6C
-BB7434D6C7AF7F830433F6A70B5044C798F211DC4AE846547C9B273C7ABE3FF0
-4651ABC02DD582603A1404894BAB9DE851F26F44A2F9C794AB433930ED76E008
-8C1255DF316C0C34C7D72709A6A05F0BE2401A305FF999866ED55E662B2ED511
-70897916716FE9EBC6D2F2EC21E7E2DC418742CFEC20C5BA43A72E61B416266B
-16E69B84E384931A7523B02EC41EDCC072F52D8F4E8C9DFF3EED5F287728BF2B
-9427FEBB9CAC80A4BB2EBDC351FD8B3CA28227D9CE812DA6A787EBD0E777AE81
-1A972CB469082AF0DB6FF728E875539CE2204F50C46914877E9F6134F0052635
-5CA45E21C580FBCD0E490F7EF4A968E4C6FD0328285C59A418094967C8DCC3E1
-E1EA2F3B89D05BFFFAB5F79E67EE8AD276076E21B3F5288D2198933B8D6104C0
-70A5B68C9276789BBEFFC6FD3C7A49FFC36F623093A4B017413CC2A0FE7A5EFD
-43B0CDD3FB76D430BDCD5E30636B9C960B95C283C7A68E703CC31AB9E75D7143
-5D0C3F0D80FDE3A90867F09A42BCF7CE30329196142F3800DA8D1A0EF8C1CD5E
-6B7920DB08E81CCED0E852960769A28FAB9D1FB1BE2FBF8F26F339C70025E1E2
-E0B6A9ED330ECE80A5591B27D3307A6CC51DCCCA59613D84FF0971F0AB0741C6
-8A0481459B57CE8D02B906C78E0C13E8F4F98996B55F00F2FBA6C499870037E0
-C46E571A1AAE29D1471F372B406CB2BE78A8C5F6DFD46338146C3A4BFC0F0B2F
-98E8821E0A15647F5D65A178F13D24A698DCEDA7994B17452C67988CBDB916C3
-B037EEE02A9E1B0E7FEC3343ED4CFC33A71CF42ED5CC9E0B85A039CF686171B0
-05F1F59AB4802DE0C70D21B5390FDE1378A4EF3441CA4F9A172AC20FC56B1D9C
-1188244115F0E78254F467E3DFDF3537B382A3B27012887C24E7F1E5ADB02E80
-51C25DBF73B67D0F7FD4EDC1A8BBC8FB7DB2D053AB8B03B30003CC944A146C92
-35795A0BBEF00CC4CEB3A6E51605E0624C7D4E3CE20D9236C33B6C25D96A9560
-4C22EFA98BE24F406C4378C7908AEFCA99D6DC390B1722C53F8D81E6F82C9201
-90694663A3EEE97BB2BC1EA61402B51CBD2DB98BA67DA3CD2C7702DEA81B08E1
-37E15954CF7207567F499507AD6F6441B314E9765663E7B97AB054E5E43FF2E8
-3E55A2BC69B3E329944FBB6A89712F01705355D381971423A8D92AA0F6148122
-79FF6656EAF11DA79AE2ED7CD20CF6C2E5D27CA1A303D26BBFC61B7EED09C267
-AF069F6222AEE8021C055D3925F416A1E87C0D5B5712D368F9197304A3BC0179
-302F7786BF0D917578AF8FF0D0BC8D2622CB00835EE45BFF1A5BABAD64F816E2
-2B019077AF25AF84B110EEBD9F67AA72EF46586F81AD2B0D3778A040D98FA801
-4749531D612DA3B2EB3F15637BB67CBBF510562CA91F5ADDEA8D224105F17041
-DF41FAEC591B36FD5D8E9B1E17B550A139E97101A15C053B8132DD223768DD65
-BCC3E81DBB4AC7562DA15A54597495A5CBB4EC11AC13D1F323305874D4973C34
-9ACE4DE9DF1C1CEC32F6E365930A25B4BD8050066DB87B455C7703D35D3ED5D6
-E4724D69901889BA61A6DC19D9F4F8C3EE4A08D3A5D6D0EC554151275C6C2C9E
-6A97505763BDA178E443A34C2F58C9D0DC25E14785454F0F1FF04C285A92799B
-755FD7A129BD019F68E921A5BDADB28C6ADEC0492F49FF143C836320F5BE027D
-57399677A4E1FCBDC530B03342B476ACA7756E432B05A9E0D19A56FD8CA10C6F
-E10DD88922D75A80DDFFE0047A18CBDE683B22EFBA43B9947FAD6F587BE6A39C
-CFB57B06BE4606B63F8BEE2FBD4BD609FF22843283A486293EB28BFA6AAC988F
-CD5E44A37550CAD6EE9CDE2B11DC2801D07E15D69B58254B43F9E0052C16202C
-FD06FC09DB828A5D662B9FF0A65CBACCA5891BF58E0165B962FE988E5416B01D
-F164CCDD712E451C98B13F4906F91C5D32D90A18A8690A983DE1A16C9A0D0ECE
-CFA7FFD4A70E49510AD7AC05F96905035257FC3A6523D9AFD759741B8F6831F3
-C6986EF4F7E345971DCDE1614E4A6BD6EBE7FB188AFA5F68C73BD8BAE5B080D1
-C8FCFEC5F37BFCE83C83FFE6A28A5A92B467484D5F0E62BA7C1F01F8BE99B963
-1D218C617192829A1CBE4595EEBDBE6C003DF6D2BEC6F7093418F57611FC145E
-F899F25C06203399147E68AD2555FE4AA55D10A74FA21BD1B49B0F8AF69687AB
-82E1B221017ED55B6066D8E5DB67EB34112BF819A9CD0B4889E5EC0CBC29E8DB
-CF1F2144477A21770EAC0A168A0721A5ACD02C8DD52AFFED2D1DC5261D1D31DB
-6A71B466A1E5F0A8B5E7139E6D5A3DAA07D3FDCB5A67FCAB59485237998219EA
-76CF0FCC3FAE0EBE7CEEFB87681B8F767957B3EC013A0FD3865301C00080C402
-16A1EE30488674F4B0C73E974861FDF1C36C01EB39B0EEACC1192BE4D0BC7277
-83D24F76655473BFE2BB37A16ECBB6CDD7049A40585F3A3E6D83E5F2D477D53F
-A61F1896CFB7F9C5F6D6AF66FAE1A930D5B7F1481BDC25B3E90CFEADACD3FA3E
-CC22D0B14D4B7A2D1B20C975847279B907A4D0379184AEF964A6956AC6675E9D
-540DB1E69980BA8E33BF379C3FA2943473E60E8204A50C037E30684460EA326B
-3D2789A8C5521FCE733EB527DABD96A52661401C91229B5EBD90EC2DF899B25C
-7A8FF9703C39B67DF148B753907C4C4BBF79FF317E6E22749CE3BE573992B1DB
-E0D45B61C080EA167DEEA544532421F7CA78AB1C6AE9EB16DA18A166619BF863
-90D4F9BCA5F533E484D4FED76B7A9E7FE259EBCF583936A02E3DE997BEFE1ED8
-1953B7A5F9295967B18AE5AE8C00F8AF334F376693094B30ADFA1389A74CA2BB
-87E621C6025E5C6BADE40F5AC6F6DBF055987E5C5C87660163C3692150A50A1F
-82971F7690B05041B4139753BB90AB544CBBE2BA33FDF9F7FA515464C6013C8F
-865AA1D8353A47799C63F558D4F21FFD59BF4723AA77365000A9F4BBED286E4B
-FDD01B60C88019E2
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMCSC10
-%!PS-AdobeFont-1.1: CMCSC10 1.0
-%%CreationDate: 1991 Aug 18 17:46:49
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMCSC10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMCSC10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 65 /A put
-dup 76 /L put
-dup 82 /R put
-dup 97 /a put
-dup 98 /b put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 104 /h put
-dup 108 /l put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 116 /t put
-dup 117 /u put
-dup 121 /y put
-readonly def
-/FontBBox{14 -250 1077 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A30EB76029337
-900ECFB1390CA5C0C3A04528044F266BA17BE487C79B94FAC6D6484684C5BFEA
-87BCCC77D40AD11552035E95E3007126418ED49B68468B38A14E88E68A267B98
-076F1C9769A5AFBC285E5B158EAC9F926F1D6C0B8F1D57D9C31D25AE27123518
-9D2CD92E5689E0213089BD268DA5E47525CB8EABAA4B78A15AEA34705889AB3A
-FFB8953B5B3482E52BFA0940630ADF8C0AC2177D907324299EE980E850F203CD
-B627962F43D5A678C44243CDE97853BDC6AB45FD5C09AD274DAF89929F583CC9
-CCC24BDFC68B92111055ABA5F26D2DC67C70906F71C2957701D65AE746A60C30
-40E6CB24B97FCDAD0487AE38A201FBF0E41BABD2181981A71940F1E707F91E5D
-C8CA50CB16D8702D188E56D014D92F76CE0B52ABDB9110E32438D2BBF3E6A40B
-7B005F10BB437812CAC6ED2996F7606DC962C4FDE207FF322782C343DF44CEC5
-FF06A55C630C20E9AE1B0D1C5673753C43BA0767D65D1B451CC6380D8BB3C4DC
-81E8FD8AA79BE993218686F29D3CD925566DD587F541A0DA1B1CC3BCEA2E6C7D
-5E1016F6917A871F1BBAD96AF9E867735017119A381FCF33EB2D3E1E7093FD90
-CDB0CED4818CFD9E201A03430CEC713620BE0D3254158931FB657C6AD4B2482A
-0E7D070D7497892E9E942DF58E88CAF0C8221BF36BF7C435BF2C683A4A2EF4CB
-E85820A8AD3486155A40143011BA9D76297F46DEF69ECA4596D6E4CAABF84091
-22A96A4BC78A8DD072FEB759A68A44BE1164638B6D952147EE3C628F9A022060
-1D1941E73310943FA782532ABCCC88593FD63E7E2CECF6665C04DB48D641ABD3
-AE1BB468638681E96394B9E7BED1D13E534B897DB90EA6EC706BAAE06BE2FEFF
-1DFA5258113E9B4CD2D36655973864574E0E8D6291E48A8C62203F679B7ED838
-6F7CBD523C2943ECA994CACE63DBE3C3FC80F475ABF6BD5EDEADE08D828E6B26
-6FE55D18EDED9A2A7B353AB7B1DA738F4F262AF743F8907DEB78362173D5EBEE
-5238175D5CA0BF9CE9B82399D771C12720F18B9B7CFF85D5D20332904A71D4B7
-A174C77F5B8D1E632967E3516A260178E07A1EE092EDD6F348B25AF1F69EC753
-802EE12BAA4E755785F548A7C2B2C1EE4ACCF84E5831BB0D1A1BC7B7E4508C0F
-0156F9BE0189BCDC40D7B2DE6CE5724B03352DDB93E97B862600D0FB9FA3C583
-38C84108D1934D8716E3ED3B064C8CD28FF3E24D6ACE036C592F4F2D010C4A68
-5B338B4380B4F24DF440965836B17F7B46592D24CD8668DE3CD9A027BA1A70FC
-750C51D36FD3B39911A01B48BE87DAE7BC1633C44247502286405A1F13B7717B
-7569ADDBACCEA4AE3E88D1CF3F78060DBD2B7695693902385DDF1B30A71098B6
-7B5CEC9A2FA61779BE27421DFA3B18DDA2E7F038CDB3605EA355E954932EB9ED
-4B7AECF7F33286C2E2B54698563BEC0D14DFBD313802D808B4C69761C1002C64
-8F6E75DBA7A7B0DFDB5B0CBCE27F108C1A8C0989ABA3A290EBA4782CBF8E270E
-A291213DD16D0151D6A493AD2CB1C0EDDAF839A78796B388AD27A8E7CADCB17C
-BF01E25B36A4D9600FD7F8355A7366CAB1E923D60DDE0CDA5813FEC7679E9DE9
-CEE9010A637BF09CA29D4C59E8E43BAF97ABB82E54326D7E2D6246A0B2CE2042
-7B81376AD1FA3552FAB451C905DDDEB8BAEF44EE76EE4D1A9BE715C3FD317028
-EAE42497E8419F83E3278849D441621DBF8A491F66A24AE49B9972C46B2F6C2B
-4463F73E15CEFD43E46B9517E9E1C886404FB41345556A2998516C00B700D053
-0DDCD51F0EC27CB43C84561624757505CF959521FBB7F47051FDF60E1E36247E
-0819273C424165F053C831293B50615EBF3FD01E784431DA1C4DCBFE8A04C5DC
-CCF0F23A51C77291A124A2DD1A167BCA8F3B8FD5B0FAB4546A417C6C63FD265E
-9E9BBEA99A37D3707C99AE85BD75A35EB8B3F97C1052D63337D5FCD7A2E3C133
-A137B80D4ECAF904A35E094996CB722EA00E197C660D915788EF61335C97A1D8
-C8442C42F6076C051F17BD4308154C99ED66D4BDE1D5D3ADA4507B415B4F58C6
-83C155A9DD0C95A97BE9B14BBBD6791E11E170AAB2C2E638EBD33EA7CFE35A5B
-06223215D2A6C806EAE888D600DA4112A09E691FF7AF08F8A00B4FC6E1B0F4EB
-D34E84A1409C474865229BBF39376D62289A2C35F3EF2FE2B4604D7ADAF0755F
-EBA9038FA2C3B6EB6C7F8B343EFF9AE0068EFBB24949CBB8BEC157451D14F86E
-91785EE29B3BE2B1479740090BB4A450CCB1143C5F9271992A90D05E64A31B64
-4745DCB13B4A3EE25939DCBE342F18E625419FA82B5A718780F8B8E86E26DAB3
-9A8F0065CFDE2405DDA7EFCF75D538848C296ED7CF5F03153420D27311003FD2
-F29236C4DCAD83E7C72BE250DF3443CF105C3083275C29673F686B9BCCB41F78
-8491ECC2F9AF90276705BF08F1C0AE18B57EF6C29427C77D11848F6ED88A5FE0
-025DF6383C2B49CDA9C7D20A649F3CA5493B1BE4FAA0BC6A9EABE0EB7AC19A35
-88E0AD4871314D5D202CB25584FFA236ADF1C2DA02566FC44B36926661312276
-8EA1E55BC08807F595E89DE0E3791D27EC975D11159DBD41EDF5D99CF092A991
-268001084E09138095AC768D063804BDE078AD9DFF074207139AC26D23B90AD0
-A571490214CDEC8F090B8A4497A1697DE589C5DF782B56C4083007D697A2B602
-13725A6D4105588509D27A6550F40A379E53B1CAD8050FBC2F77875266498046
-243ADCA1F4860B4EEAB4BAE088BC2AB990508F7F48326214D62975639F9FAE67
-72D82F304C10479AEED5594BFA5E3234C17EED3D7FA1BD2C0C3ABF5CBDC18BED
-6A4F1B3A210BB8281EA848BD5CEDEB93CB4BDCB917C85DE151C92A398E228446
-EB9516265C34437ED5745139AF4B422054D118D0C8BB168C4DDBF152A9BAA3B2
-E3A7B515E35323418B1267E25AB312CC57ADF2BC879B4961F4D331228A6319FB
-E39117D6BE6989C594C3516F7B485BA19C95FBC6C5D2D8123D88705981E02DDC
-8DE2D08FCA03A4DA14CDD45D52209A5F7EFE19043122FF2575C4A10BAEB015C2
-041D4DCFA024373DD96021210ABF2CE0447AE374AB39BBC2523767B5D4D32EB2
-DB0DD9B1EEFFE16B2819182F0335F984740A60BDFBFDAF8BD036640F360B8D0A
-723DF3A2395DC347051BA8260D3DE173F9DCFD0E9C69D88E3BDFB0CF73E2D0E1
-8BE0BCD8933EF4D2DF9F57F3EC894782C366F5F95CFFADD7844585F2F4E7FC0B
-29FBF43D5476A1D8710523A2DF19832A73E5B7D40CA8A476C3E41FD3B5A34366
-F3DC42231743D5AD92BED6AB872F0548B81F0F83A40F1CE45F1A1A7104C1B033
-731CC0B5A96252924415CED4A8FFAD8D5DB42F21F2AC183832551102603C1C8A
-6332ACC319838B9EE080768CB09DE60C6D4007399C6130577FC8925367B73DE5
-0E5D0DA7ABAF518C58FFE632640B039932010B0B621B9D04E7BEA1492034522F
-A80BCBDB6A0B7BC89968F02371164E29F3B62766128AEDABD73FC685F72A6717
-6C77026662A2CE8BF0E7B728107DD61C38C15E3CFB2A79CF957CF3A3AB312E87
-FB7EB8F1FF8605CD0B451BB28BDCD3B145177E5C799D1EA3DC8E24BCD4BCE3D1
-302199DC6EC1B0BEFB8E7AFC228BD5F5E7F05E2B93F33E903724E07212F3B96E
-3E31D8C164B464443C08CD41C51F30A6F310E76E550ACB045B6F530BC73B6C4E
-BDB8785CCC20D84393D447D68415BE0779C72156CECD2A4AB616FBE8B3840A58
-36CA343E3EFA85B98A0AA0FFEDD3921D1D0CDC3AF250B91778C0EB8CDBF2027D
-DD9FEB89105658120513D5BE01DBEE3D8CB662AC0F44BE0E5A1C6A4FC1CD9A07
-C0206B77F84CA48997EEC2002AF7D36A4DB872FDB1BA65BE82B39CC6ABFE9C10
-3163442E2E24C18C4C441915A94911FF5A150BEFD2F88D6CE3AAFDDAE115B64E
-F1DBD90A742149CC8DDE50E3DA10444215015A812DB478CFABD4064265CC61B3
-9B5C9A4DE0BF464DCBC38E736483C2DDE7654F3E2BB7015C3C78A68854DFA1B3
-6700839203AB93FB4A56F3441454B1DF79E79E398084FC7A63CBFAB6628D5504
-725A43221C9F6EEA584F93C12126188E0F74A78D95E390AC27FEE9ABF06B934B
-2542AFEA0B6E648FA461F4D65B5187E326C128155445AA7C065AB7AD2311E16E
-3A5D4614859CF78A6948145405D449A62279F83629085B71782A00969254BD1F
-BED9862FFEBC63103C1A8C4F64A1D1700C7909D81D5199B88ED79A907C503EF4
-E7E46AC957CB4330D39B823C793AE592F0DF06EE26E7FC5CF024E4E3EDE1AA4B
-93AE4C205D93D15DBE10083471AC5F58B3F4A18CA9D4093F4B21CB0D8DC48F1E
-0EE8F82C333E6B6CBA64E915EDD88CAFCD71945F93DBC713F0D6237132615F4A
-C50DA1A760D3D2579A3E3BF1BA9B0D24C0D96669DF652E4F09397509C5CDE8DB
-545806D74D722A2AE74031B3079CEBE922619E4BA181868B2F304DCA9DE05366
-C21BA5AD769FB898DEF6DE248004F4999EBCB8A6EE38FDEB09509BE08E8BDE17
-DD914E47D0418C7A4F66B69AEFF1DF30E85474AF9837908F40239335925AC35A
-88CE8914667AD0185919F0B57D18B2550942C9A89DA77E4EBB86383729239E60
-97809CCE0800D0EFFBCD0912ED69F514F7B3F2DF77F64E9B1012833B84519444
-85BAB11C62D9DD4E6B0306D27E40D90F630431F9F737B7F384F9BC084FB6EC35
-97556AACA6E7F5B9246102C2150212DEA5F6B2D82BBA992960DC158CDC9A5893
-1AE8BB3BCB7DD2C3E33B3F3764259ECDE6DD310BDCC309AA5997B95D0785538A
-94A6370DAD984AF104E6F40E23DB1D13CB10E1749D44C695A3F91D3F2902304C
-7D1615C7846F3580
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-TeXDict begin 39139632 55387786 1000 600 600 (sun210.dvi)
- at start /Fa 150[32 105[{}1 90.9091 /CMBXTI10 rf /Fb 193[91
-1[91 60[{}2 119.552 /CMMI12 rf /Fc 134[50 50 69 50 53
-37 38 39 50 53 48 53 80 27 50 29 27 53 48 29 44 53 42
-53 46 6[58 72 72 99 72 73 66 53 72 72 65 72 75 91 57
-75 49 36 75 75 60 63 73 69 68 72 3[74 1[27 27 1[48 1[48
-1[48 48 48 48 48 2[32 27 2[37 37 27[53 56 11[{}67 83.022
-/CMBX10 rf /Fd 133[52 62 62 85 62 65 46 46 46 62 65 59
-65 98 33 62 36 33 65 59 36 52 65 52 65 59 6[72 1[88 120
-88 88 85 65 86 1[80 91 88 107 73 91 1[42 88 92 76 80
-89 85 83 88 1[55 5[59 3[59 59 59 59 59 59 59 1[39 33
-2[46 46 33 24[98 65 65 68 11[{}67 119.552 /CMR12 rf /Fe
-160[62 95[{}1 119.552 /CMTT12 rf /Ff 160[39 95[{}1 74.7198
-/CMTT9 rf /Fg 137[35 12[24 3[35 3[39 50[24 46[{}5 74.7198
-/CMTI9 rf /Fh 160[51 95[{}1 99.6264 /CMTT12 rf /Fi 138[41
-25 33 32 3[43 1[21 2[24 2[34 33 1[31 30 37 17[54 2[48
-17[20 58[{}15 66.4176 /CMMI8 rf /Fj 145[42 3[23 11[55
-69[65 8[42 11[42 2[65{}7 83.022 /CMSY10 rf /Fk 131[83
-42 37 44 44 60 44 46 32 33 33 44 46 42 46 69 23 44 25
-23 46 42 25 37 46 37 46 42 3[23 42 23 51 62 62 85 62
-62 60 46 61 65 57 65 62 76 52 65 43 30 62 65 54 57 63
-60 59 62 1[39 1[65 1[23 23 42 42 42 42 42 42 42 42 42
-42 42 23 28 23 65 1[32 32 23 65 69 42 1[42 23 18[69 46
-46 48 11[{}88 83.022 /CMR10 rf /Fl 138[39 25 31 31 3[41
-1[21 2[23 2[32 31 1[30 29 36 17[50 2[46 76[{}14 58.1154
-/CMMI7 rf /Fm 153[41 39[65 1[65 1[23 58[{}4 83.022 /CMMI10
-rf /Fn 252[38 2[60{}2 74.7198 /CMSY9 rf /Fo 197[21 58[{}1
-74.7198 /CMMI9 rf /Fp 133[42 45 52 4[43 5[80 1[47 1[31
-52 1[45 15[53 2[56 3[69 73 3[50 40 76 71 58 7[71 45 71
-25 25 32[52 2[55 22[{}25 90.9091 /CMMI10 rf /Fq 241[35
-13[55{}2 66.4176 /CMSY8 rf /Fr 133[34 41 41 55 41 43
-30 30 30 41 43 38 43 64 21 41 23 21 43 38 23 34 43 34
-43 38 4[38 1[47 1[58 79 1[58 55 43 57 1[52 60 58 70 48
-60 1[28 58 60 50 52 59 55 54 58 1[36 4[21 1[38 38 38
-38 1[38 38 38 38 38 21 26 21 60 1[30 30 21 4[38 21[43
-45 11[{}70 74.7198 /CMR9 rf /Fs 198[30 30 30 30 30 30
-30 30 30 30 48[{}10 49.8132 /CMR6 rf /Ft 130[44 1[44
-44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44
-44 44 44 44 44 44 44 44 44 44 1[44 1[44 44 44 44 44 44
-44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44
-44 44 44 1[44 44 44 44 44 44 44 44 44 44 44 44 44 44
-44 44 44 44 44 44 44 44 44 44 44 44 44 1[44 44 44 33[{}88
-83.022 /CMTT10 rf /Fu 135[40 7[76 96[45 8[71 2[45 71
-1[71{}7 90.9091 /CMSY10 rf /Fv 198[35 35 35 35 35 35
-35 35 35 35 48[{}10 66.4176 /CMR8 rf /Fw 131[112 1[50
-59 59 81 59 62 44 44 46 1[62 56 62 93 31 59 34 31 62
-56 34 51 62 50 62 54 4[58 3[85 116 85 86 78 62 84 84
-77 84 88 106 67 2[42 88 88 70 74 86 81 80 85 1[53 5[56
-56 56 56 56 56 56 56 56 56 56 31 37 31 2[44 44 5[58 21[62
-65 11[{}69 99.6264 /CMBX12 rf /Fx 134[44 42 60 42 49
-30 37 38 42 46 46 51 74 23 42 28 28 46 42 28 42 46 42
-42 46 6[56 2[91 1[68 65 51 66 2[70 68 82 3[35 2[59 2[65
-8[28 7[46 46 1[46 28 33 28 31[51 56 11[{}46 90.9091 /CMTI10
-rf /Fy 133[48 48 48 48 48 48 48 48 48 48 48 48 48 48
-48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 1[48
-48 48 48 48 48 48 48 48 1[48 48 48 48 48 48 48 48 48
-48 48 48 48 48 48 48 2[48 48 48 48 48 48 48 48 48 48
-48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48
-48 34[{}83 90.9091 /CMTT10 rf /Fz 131[91 2[48 48 66 48
-51 35 36 36 1[51 45 51 76 25 48 28 25 51 45 28 40 51
-40 51 45 7[68 68 93 68 68 66 51 67 1[62 71 68 83 57 71
-47 33 68 71 59 62 69 66 64 68 7[45 45 45 45 45 45 45
-45 45 45 45 25 30 25 2[35 35 27[51 53 11[{}67 90.9091
-/CMSL10 rf /FA 133[60 71 71 97 71 75 52 53 55 71 75 67
-75 112 37 71 41 37 75 67 41 61 75 60 75 65 6[82 102 102
-139 102 103 94 75 100 101 92 101 105 128 81 105 1[50
-105 106 85 88 103 97 96 102 7[67 67 67 67 67 67 67 67
-67 67 67 37 45 3[52 52 27[75 78 11[{}68 119.552 /CMBX12
-rf /FB 169[122 32[81 1[81 4[45 46[{}4 143.462 /CMBX12
-rf /FC 134[123 3[129 90 92 95 2[116 129 194 65 2[65 1[116
-71 106 129 1[129 113 9[240 175 1[162 129 2[159 3[140
-3[182 183 146 2[168 1[175 23[90 90 65 39[{}30 206.559
-/CMBX12 rf /FD 134[51 51 1[51 54 38 38 38 1[54 49 54
-81 27 51 30 27 54 1[30 43 54 43 54 49 11[73 1[54 72 1[66
-1[73 89 8[75 70 69 73 10[49 3[49 49 49 1[27 33 6[76 25[54
-12[{}40 99.6264 /CMR12 rf /FE 131[105 2[55 55 76 55 58
-41 41 43 55 58 52 58 87 29 55 32 29 58 52 32 48 58 46
-58 51 4[55 2[79 79 108 79 80 73 58 78 1[71 79 82 99 63
-82 1[40 82 82 66 69 80 76 74 79 2[49 1[32 1[29 52 52
-52 52 52 52 52 52 52 52 52 29 35 1[81 1[41 41 5[55 21[58
-61 11[{}72 90.9091 /CMBX10 rf /FF 134[56 3[56 54 1[55
-1[51 58 56 1[47 3[56 1[49 51 57 1[53 56 14[73 5[62 10[74
-65[{}17 90.9091 /CMCSC10 rf /FG 131[91 45 40 48 48 66
-48 51 35 36 36 48 51 45 51 76 25 48 28 25 51 45 28 40
-51 40 51 45 25 3[45 1[56 68 68 93 68 68 66 51 67 71 62
-71 68 83 57 71 47 33 68 71 59 62 69 66 64 68 1[43 43
-71 25 25 25 45 45 45 45 45 45 45 45 45 45 45 25 30 25
-71 45 35 35 25 71 76 2[45 25 17[76 76 51 51 53 11[{}90
-90.9091 /CMR10 rf end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%PaperSize: A4
- end
-%%EndSetup
-%%Page: 1 1
-TeXDict begin 1 0 bop 0 351 a FG(CCLR)m(C)29 b(/)i FF(R)m(utherf)n(ord)
-h(Appleton)h(Labora)-6 b(tor)g(y)1176 b FE(SUN/210.26)0
-464 y FD(P)m(article)34 b(Ph)m(ysics)h(&)d(Astronom)m(y)i(Researc)m(h)g
-(Council)0 577 y(Starlink)f(Pro)5 b(ject)0 690 y(Starlink)33
-b(User)h(Note)e(210.26)2455 927 y FG(R.F.)f(W)-8 b(arren-Smith)31
-b(&)f(D.S.)h(Berry)3039 1040 y(30th)g(Octob)s(er)g(2009)p
-0 1183 3780 12 v 1657 1504 a FC(AST)702 1754 y(A)78 b(Library)e(for)h
-(Handling)520 2003 y(W)-19 b(orld)77 b(Co)6 b(ordinate)78
-b(Systems)1192 2252 y(in)f(Astronom)-6 b(y)1726 2618
-y FB(V5.3)826 2931 y FC(Programmer's)76 b(Guide)999 3134
-y(\(F)-19 b(ortran)78 b(V)-19 b(ersion\))245 3396 y
- gsave currentpoint currentpoint translate -90 neg rotate neg exch neg exch translate
- 245
-3396 a @beginspecial 20 @llx 100 @lly 530 @urx 631 @ury
-1275 @rwi @setspecial
-%%BeginDocument: sun210_figures/fronta_bw.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 20 100 530 631
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:47:36
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-4877 5612 m
-4853 5612 l
-S
-4829 5613 m
-4805 5613 l
-S
-4781 5614 m
-4757 5614 l
-S
-4733 5614 m
-4709 5615 l
-S
-4685 5615 m
-4661 5616 l
-S
-4637 5616 m
-4613 5617 l
-S
-4589 5617 m
-4565 5618 l
-S
-4541 5618 m
-4517 5619 l
-S
-4493 5619 m
-4469 5620 l
-S
-4445 5620 m
-4421 5621 l
-S
-4397 5621 m
-4373 5621 l
-S
-4349 5622 m
-4325 5622 l
-S
-4301 5623 m
-4277 5623 l
-S
-4253 5624 m
-4229 5624 l
-S
-4205 5625 m
-4181 5625 l
-S
-4157 5626 m
-4133 5626 l
-S
-4109 5627 m
-4101 5627 l
-4085 5627 l
-S
-4061 5628 m
-4037 5628 l
-S
-4013 5628 m
-3989 5629 l
-S
-3965 5629 m
-3941 5630 l
-S
-3917 5630 m
-3893 5631 l
-S
-3869 5631 m
-3845 5632 l
-S
-3821 5632 m
-3797 5633 l
-S
-3773 5633 m
-3749 5634 l
-S
-3725 5634 m
-3701 5635 l
-S
-3677 5635 m
-3652 5636 l
-S
-3628 5636 m
-3604 5636 l
-S
-3580 5637 m
-3564 5637 l
-3556 5637 l
-S
-3532 5638 m
-3508 5638 l
-S
-3484 5639 m
-3460 5639 l
-S
-3436 5640 m
-3412 5640 l
-S
-3388 5641 m
-3364 5641 l
-S
-3340 5642 m
-3316 5642 l
-S
-3292 5643 m
-3268 5643 l
-S
-3244 5643 m
-3220 5644 l
-S
-3196 5644 m
-3172 5645 l
-S
-3148 5645 m
-3124 5646 l
-S
-3100 5646 m
-3076 5647 l
-S
-3052 5647 m
-3028 5648 l
-S
-3004 5648 m
-2980 5649 l
-S
-2956 5649 m
-2932 5650 l
-S
-2908 5650 m
-2884 5650 l
-S
-2860 5651 m
-2836 5651 l
-S
-2812 5652 m
-2788 5652 l
-S
-2764 5653 m
-2740 5653 l
-S
-2716 5654 m
-2692 5654 l
-S
-2668 5655 m
-2644 5655 l
-S
-2620 5656 m
-2596 5656 l
-S
-2572 5657 m
-2548 5657 l
-S
-2524 5657 m
-2500 5658 l
-S
-2476 5658 m
-2452 5659 l
-S
-2428 5659 m
-2404 5660 l
-S
-2380 5660 m
-2356 5661 l
-S
-2332 5661 m
-2308 5662 l
-S
-2284 5662 m
-2260 5663 l
-S
-2236 5663 m
-2212 5664 l
-S
-2188 5664 m
-2164 5665 l
-S
-2140 5665 m
-2116 5665 l
-S
-2092 5666 m
-2068 5666 l
-S
-2044 5667 m
-2020 5667 l
-S
-1996 5668 m
-1972 5668 l
-S
-1948 5669 m
-1924 5669 l
-S
-1900 5670 m
-1876 5670 l
-S
-1852 5671 m
-1828 5671 l
-S
-1804 5672 m
-1780 5672 l
-S
-1756 5672 m
-1732 5673 l
-S
-1708 5673 m
-1684 5674 l
-S
-1660 5674 m
-1636 5675 l
-S
-1612 5675 m
-1588 5676 l
-S
-1564 5676 m
-1540 5677 l
-S
-1516 5677 m
-1492 5678 l
-S
-1468 5678 m
-1444 5679 l
-S
-1420 5679 m
-1416 5679 l
-1396 5679 l
-S
-1372 5680 m
-1348 5680 l
-S
-1323 5681 m
-1299 5681 l
-S
-1275 5682 m
-1251 5682 l
-S
-1227 5683 m
-1203 5683 l
-S
-1179 5684 m
-1155 5684 l
-S
-1131 5685 m
-1107 5685 l
-S
-1083 5686 m
-1059 5686 l
-S
-1035 5687 m
-1011 5687 l
-S
-987 5687 m
-963 5688 l
-S
-939 5688 m
-915 5689 l
-S
-891 5689 m
-879 5690 l
-867 5690 l
-S
-843 5690 m
-819 5691 l
-S
-795 5691 m
-771 5692 l
-S
-747 5692 m
-723 5693 l
-S
-699 5693 m
-675 5694 l
-S
-651 5694 m
-627 5694 l
-S
-603 5695 m
-579 5695 l
-S
-555 5696 m
-533 5696 l
-S
-4877 4985 m
-4875 4985 l
-S
-4851 4986 m
-4827 4986 l
-S
-4803 4987 m
-4779 4987 l
-S
-4755 4988 m
-4731 4988 l
-S
-4707 4988 m
-4683 4989 l
-S
-4659 4989 m
-4635 4990 l
-S
-4611 4990 m
-4601 4991 l
-4587 4991 l
-S
-4563 4991 m
-4539 4992 l
-S
-4515 4992 m
-4491 4993 l
-S
-4467 4993 m
-4443 4994 l
-S
-4419 4994 m
-4395 4995 l
-S
-4371 4995 m
-4347 4996 l
-S
-4323 4996 m
-4299 4997 l
-S
-4275 4997 m
-4251 4997 l
-S
-4227 4998 m
-4203 4998 l
-S
-4179 4999 m
-4155 4999 l
-S
-4131 5000 m
-4107 5000 l
-S
-4083 5001 m
-4064 5001 l
-4059 5001 l
-S
-4035 5002 m
-4011 5002 l
-S
-3987 5003 m
-3963 5003 l
-S
-3939 5004 m
-3915 5004 l
-S
-3891 5005 m
-3867 5005 l
-S
-3843 5006 m
-3819 5006 l
-S
-3795 5007 m
-3770 5007 l
-S
-3746 5007 m
-3722 5008 l
-S
-3698 5008 m
-3674 5009 l
-S
-3650 5009 m
-3626 5010 l
-S
-3602 5010 m
-3578 5011 l
-S
-3554 5011 m
-3530 5012 l
-S
-3506 5012 m
-3482 5013 l
-S
-3458 5013 m
-3434 5014 l
-S
-3410 5014 m
-3386 5015 l
-S
-3362 5015 m
-3338 5016 l
-S
-3314 5016 m
-3290 5016 l
-S
-3266 5017 m
-3242 5017 l
-S
-3218 5018 m
-3194 5018 l
-S
-3170 5019 m
-3146 5019 l
-S
-3122 5020 m
-3098 5020 l
-S
-3074 5021 m
-3050 5021 l
-S
-3026 5022 m
-3002 5022 l
-S
-2978 5023 m
-2954 5023 l
-S
-2930 5024 m
-2906 5024 l
-S
-2882 5025 m
-2858 5025 l
-S
-2834 5025 m
-2810 5026 l
-S
-2786 5026 m
-2762 5027 l
-S
-2738 5027 m
-2714 5028 l
-S
-2690 5028 m
-2666 5029 l
-S
-2642 5029 m
-2618 5030 l
-S
-2594 5030 m
-2570 5031 l
-S
-2546 5031 m
-2522 5032 l
-S
-2498 5032 m
-2474 5033 l
-S
-2450 5033 m
-2426 5034 l
-S
-2402 5034 m
-2378 5035 l
-S
-2354 5035 m
-2330 5035 l
-S
-2306 5036 m
-2282 5036 l
-S
-2258 5037 m
-2234 5037 l
-S
-2210 5038 m
-2186 5038 l
-S
-2162 5039 m
-2138 5039 l
-S
-2114 5040 m
-2090 5040 l
-S
-2066 5041 m
-2042 5041 l
-S
-2018 5042 m
-1994 5042 l
-S
-1970 5043 m
-1946 5043 l
-S
-1922 5044 m
-1916 5044 l
-1898 5044 l
-S
-1874 5044 m
-1850 5045 l
-S
-1826 5045 m
-1802 5046 l
-S
-1778 5046 m
-1754 5047 l
-S
-1730 5047 m
-1706 5048 l
-S
-1682 5048 m
-1658 5049 l
-S
-1634 5049 m
-1610 5050 l
-S
-1586 5050 m
-1562 5051 l
-S
-1538 5051 m
-1514 5052 l
-S
-1490 5052 m
-1466 5053 l
-S
-1442 5053 m
-1418 5053 l
-S
-1393 5054 m
-1379 5054 l
-1369 5054 l
-S
-1345 5055 m
-1321 5055 l
-S
-1297 5056 m
-1273 5056 l
-S
-1249 5057 m
-1225 5057 l
-S
-1201 5058 m
-1177 5058 l
-S
-1153 5059 m
-1129 5059 l
-S
-1105 5060 m
-1081 5060 l
-S
-1057 5061 m
-1033 5061 l
-S
-1009 5062 m
-985 5062 l
-S
-961 5063 m
-937 5063 l
-S
-913 5063 m
-889 5064 l
-S
-865 5064 m
-842 5065 l
-841 5065 l
-S
-817 5065 m
-793 5066 l
-S
-769 5066 m
-745 5067 l
-S
-721 5067 m
-697 5068 l
-S
-673 5068 m
-649 5069 l
-S
-625 5069 m
-601 5070 l
-S
-577 5070 m
-553 5071 l
-S
-4873 4359 m
-4849 4359 l
-S
-4825 4360 m
-4801 4360 l
-S
-4777 4361 m
-4753 4361 l
-S
-4729 4362 m
-4705 4362 l
-S
-4681 4362 m
-4657 4363 l
-S
-4633 4363 m
-4609 4364 l
-S
-4585 4364 m
-4563 4365 l
-4561 4365 l
-S
-4537 4365 m
-4513 4366 l
-S
-4489 4366 m
-4465 4367 l
-S
-4441 4367 m
-4417 4368 l
-S
-4393 4368 m
-4369 4369 l
-S
-4345 4369 m
-4321 4370 l
-S
-4297 4370 m
-4273 4371 l
-S
-4249 4371 m
-4225 4372 l
-S
-4201 4372 m
-4177 4373 l
-S
-4153 4373 m
-4129 4374 l
-S
-4105 4374 m
-4081 4375 l
-S
-4057 4375 m
-4033 4375 l
-S
-4009 4376 m
-3985 4376 l
-S
-3961 4377 m
-3937 4377 l
-S
-3913 4378 m
-3889 4378 l
-S
-3865 4379 m
-3841 4379 l
-S
-3816 4380 m
-3792 4380 l
-S
-3768 4381 m
-3744 4381 l
-S
-3720 4382 m
-3696 4382 l
-S
-3672 4383 m
-3648 4383 l
-S
-3624 4384 m
-3600 4384 l
-S
-3576 4385 m
-3552 4385 l
-S
-3528 4386 m
-3504 4386 l
-S
-3480 4387 m
-3456 4387 l
-S
-3432 4387 m
-3408 4388 l
-S
-3384 4388 m
-3360 4389 l
-S
-3336 4389 m
-3312 4390 l
-S
-3288 4390 m
-3264 4391 l
-S
-3240 4391 m
-3216 4392 l
-S
-3192 4392 m
-3168 4393 l
-S
-3144 4393 m
-3120 4394 l
-S
-3096 4394 m
-3072 4395 l
-S
-3048 4395 m
-3024 4396 l
-S
-3000 4396 m
-2976 4397 l
-S
-2952 4397 m
-2928 4398 l
-S
-2904 4398 m
-2880 4399 l
-S
-2856 4399 m
-2832 4400 l
-S
-2808 4400 m
-2784 4400 l
-S
-2760 4401 m
-2736 4401 l
-S
-2712 4402 m
-2688 4402 l
-S
-2664 4403 m
-2640 4403 l
-S
-2616 4404 m
-2592 4404 l
-S
-2568 4405 m
-2544 4405 l
-S
-2520 4406 m
-2496 4406 l
-S
-2472 4407 m
-2448 4407 l
-S
-2424 4408 m
-2416 4408 l
-2400 4408 l
-S
-2376 4409 m
-2352 4409 l
-S
-2328 4410 m
-2304 4410 l
-S
-2280 4411 m
-2256 4411 l
-S
-2232 4412 m
-2208 4412 l
-S
-2184 4413 m
-2160 4413 l
-S
-2136 4413 m
-2112 4414 l
-S
-2088 4414 m
-2064 4415 l
-S
-2040 4415 m
-2016 4416 l
-S
-1992 4416 m
-1968 4417 l
-S
-1944 4417 m
-1920 4418 l
-S
-1896 4418 m
-1879 4419 l
-1872 4419 l
-S
-1848 4419 m
-1824 4420 l
-S
-1800 4420 m
-1776 4421 l
-S
-1752 4421 m
-1728 4422 l
-S
-1704 4422 m
-1680 4423 l
-S
-1656 4423 m
-1632 4424 l
-S
-1608 4424 m
-1584 4425 l
-S
-1560 4425 m
-1536 4426 l
-S
-1512 4426 m
-1488 4426 l
-S
-1464 4427 m
-1439 4427 l
-S
-1415 4428 m
-1391 4428 l
-S
-1367 4429 m
-1343 4429 l
-S
-1319 4430 m
-1295 4430 l
-S
-1271 4431 m
-1247 4431 l
-S
-1223 4432 m
-1199 4432 l
-S
-1175 4433 m
-1151 4433 l
-S
-1127 4434 m
-1103 4434 l
-S
-1079 4435 m
-1055 4435 l
-S
-1031 4436 m
-1007 4436 l
-S
-983 4437 m
-959 4437 l
-S
-935 4438 m
-911 4438 l
-S
-887 4439 m
-863 4439 l
-S
-839 4439 m
-815 4440 l
-S
-791 4440 m
-767 4441 l
-S
-743 4441 m
-719 4442 l
-S
-695 4442 m
-671 4443 l
-S
-647 4443 m
-623 4444 l
-S
-599 4444 m
-575 4445 l
-S
-551 4445 m
-533 4446 l
-S
-4877 3732 m
-4871 3732 l
-S
-4847 3733 m
-4823 3733 l
-S
-4799 3734 m
-4775 3734 l
-S
-4751 3735 m
-4727 3735 l
-S
-4703 3735 m
-4679 3736 l
-S
-4655 3736 m
-4631 3737 l
-S
-4607 3737 m
-4583 3738 l
-S
-4559 3738 m
-4535 3739 l
-S
-4511 3739 m
-4487 3740 l
-S
-4463 3740 m
-4439 3741 l
-S
-4415 3741 m
-4391 3742 l
-S
-4367 3742 m
-4343 3743 l
-S
-4319 3743 m
-4295 3744 l
-S
-4271 3744 m
-4247 3745 l
-S
-4223 3745 m
-4199 3746 l
-S
-4175 3746 m
-4151 3747 l
-S
-4127 3747 m
-4103 3748 l
-S
-4079 3748 m
-4055 3749 l
-S
-4031 3749 m
-4007 3750 l
-S
-3983 3750 m
-3959 3751 l
-S
-3935 3751 m
-3911 3752 l
-S
-3887 3752 m
-3863 3753 l
-S
-3839 3753 m
-3814 3754 l
-S
-3790 3754 m
-3766 3755 l
-S
-3742 3755 m
-3718 3755 l
-S
-3694 3756 m
-3670 3756 l
-S
-3646 3757 m
-3622 3757 l
-S
-3598 3758 m
-3574 3758 l
-S
-3550 3759 m
-3526 3759 l
-S
-3502 3760 m
-3478 3760 l
-S
-3454 3761 m
-3451 3761 l
-3430 3761 l
-S
-3406 3762 m
-3382 3762 l
-S
-3358 3763 m
-3334 3763 l
-S
-3310 3764 m
-3286 3764 l
-S
-3262 3765 m
-3238 3765 l
-S
-3214 3766 m
-3190 3766 l
-S
-3166 3767 m
-3142 3767 l
-S
-3118 3768 m
-3094 3768 l
-S
-3070 3769 m
-3046 3769 l
-S
-3022 3770 m
-2998 3770 l
-S
-2974 3771 m
-2950 3771 l
-S
-2926 3772 m
-2914 3772 l
-2902 3772 l
-S
-2878 3773 m
-2854 3773 l
-S
-2830 3774 m
-2806 3774 l
-S
-2782 3775 m
-2758 3775 l
-S
-2734 3776 m
-2710 3776 l
-S
-2686 3776 m
-2662 3777 l
-S
-2638 3777 m
-2614 3778 l
-S
-2590 3778 m
-2566 3779 l
-S
-2542 3779 m
-2518 3780 l
-S
-2494 3780 m
-2470 3781 l
-S
-2446 3781 m
-2422 3782 l
-S
-2398 3782 m
-2378 3783 l
-2374 3783 l
-S
-2350 3783 m
-2326 3784 l
-S
-2302 3784 m
-2278 3785 l
-S
-2254 3785 m
-2230 3786 l
-S
-2206 3786 m
-2182 3787 l
-S
-2158 3787 m
-2134 3788 l
-S
-2110 3788 m
-2086 3789 l
-S
-2062 3789 m
-2038 3790 l
-S
-2014 3790 m
-1990 3791 l
-S
-1966 3791 m
-1942 3792 l
-S
-1918 3792 m
-1894 3793 l
-S
-1870 3793 m
-1846 3794 l
-S
-1822 3794 m
-1798 3795 l
-S
-1774 3795 m
-1750 3796 l
-S
-1726 3796 m
-1702 3796 l
-S
-1678 3797 m
-1654 3797 l
-S
-1630 3798 m
-1606 3798 l
-S
-1582 3799 m
-1558 3799 l
-S
-1534 3800 m
-1510 3800 l
-S
-1486 3801 m
-1462 3801 l
-S
-1438 3802 m
-1414 3802 l
-S
-1389 3803 m
-1365 3803 l
-S
-1341 3804 m
-1317 3804 l
-S
-1293 3805 m
-1269 3805 l
-S
-1245 3806 m
-1221 3806 l
-S
-1197 3807 m
-1173 3807 l
-S
-1149 3808 m
-1125 3808 l
-S
-1101 3809 m
-1077 3809 l
-S
-1053 3810 m
-1029 3810 l
-S
-1005 3811 m
-981 3811 l
-S
-957 3812 m
-933 3812 l
-S
-909 3813 m
-885 3813 l
-S
-861 3814 m
-837 3814 l
-S
-813 3815 m
-789 3815 l
-S
-765 3816 m
-741 3816 l
-S
-717 3817 m
-693 3817 l
-S
-669 3817 m
-645 3818 l
-S
-621 3818 m
-597 3819 l
-S
-573 3819 m
-549 3820 l
-S
-4869 3105 m
-4845 3106 l
-S
-4821 3106 m
-4797 3107 l
-S
-4773 3107 m
-4749 3108 l
-S
-4725 3108 m
-4701 3109 l
-S
-4677 3109 m
-4653 3110 l
-S
-4629 3110 m
-4605 3111 l
-S
-4581 3111 m
-4557 3112 l
-S
-4533 3112 m
-4509 3113 l
-S
-4485 3113 m
-4461 3114 l
-S
-4437 3114 m
-4413 3115 l
-S
-4389 3115 m
-4365 3116 l
-S
-4341 3116 m
-4317 3117 l
-S
-4293 3117 m
-4269 3118 l
-S
-4245 3118 m
-4221 3119 l
-S
-4197 3119 m
-4173 3120 l
-S
-4149 3120 m
-4125 3121 l
-S
-4101 3121 m
-4077 3122 l
-S
-4053 3122 m
-4029 3123 l
-S
-4005 3123 m
-3981 3124 l
-S
-3957 3124 m
-3950 3124 l
-3933 3125 l
-S
-3909 3125 m
-3885 3126 l
-S
-3861 3126 m
-3837 3127 l
-S
-3813 3127 m
-3789 3128 l
-S
-3764 3128 m
-3740 3129 l
-S
-3716 3129 m
-3692 3130 l
-S
-3668 3130 m
-3644 3131 l
-S
-3620 3131 m
-3596 3132 l
-S
-3572 3132 m
-3548 3133 l
-S
-3524 3133 m
-3500 3134 l
-S
-3476 3134 m
-3452 3135 l
-S
-3428 3135 m
-3413 3135 l
-3404 3136 l
-S
-3380 3136 m
-3356 3137 l
-S
-3332 3137 m
-3308 3138 l
-S
-3284 3138 m
-3260 3139 l
-S
-3236 3139 m
-3212 3140 l
-S
-3188 3140 m
-3164 3141 l
-S
-3140 3141 m
-3116 3142 l
-S
-3092 3142 m
-3068 3143 l
-S
-3044 3143 m
-3020 3144 l
-S
-2996 3144 m
-2972 3145 l
-S
-2948 3145 m
-2924 3146 l
-S
-2900 3146 m
-2876 3147 l
-S
-2852 3147 m
-2828 3148 l
-S
-2804 3148 m
-2780 3149 l
-S
-2756 3149 m
-2732 3150 l
-S
-2708 3150 m
-2684 3151 l
-S
-2660 3151 m
-2636 3152 l
-S
-2612 3152 m
-2588 3152 l
-S
-2564 3153 m
-2540 3153 l
-S
-2516 3154 m
-2492 3154 l
-S
-2468 3155 m
-2444 3155 l
-S
-2420 3156 m
-2396 3156 l
-S
-2372 3157 m
-2348 3157 l
-S
-2324 3158 m
-2300 3158 l
-S
-2276 3159 m
-2252 3159 l
-S
-2228 3160 m
-2204 3160 l
-S
-2180 3161 m
-2156 3161 l
-S
-2132 3162 m
-2108 3162 l
-S
-2084 3163 m
-2060 3163 l
-S
-2036 3164 m
-2012 3164 l
-S
-1988 3165 m
-1964 3165 l
-S
-1940 3166 m
-1916 3166 l
-S
-1892 3167 m
-1868 3167 l
-S
-1844 3168 m
-1820 3168 l
-S
-1796 3169 m
-1772 3169 l
-S
-1748 3170 m
-1724 3170 l
-S
-1700 3171 m
-1676 3171 l
-S
-1652 3172 m
-1628 3172 l
-S
-1604 3173 m
-1580 3173 l
-S
-1556 3174 m
-1532 3174 l
-S
-1508 3175 m
-1484 3175 l
-S
-1460 3176 m
-1436 3176 l
-S
-1412 3177 m
-1388 3177 l
-S
-1364 3178 m
-1340 3178 l
-S
-1315 3179 m
-1291 3179 l
-S
-1267 3180 m
-1265 3180 l
-1243 3180 l
-S
-1219 3181 m
-1195 3181 l
-S
-1171 3182 m
-1147 3182 l
-S
-1123 3183 m
-1099 3183 l
-S
-1075 3184 m
-1051 3184 l
-S
-1027 3185 m
-1003 3185 l
-S
-979 3186 m
-955 3186 l
-S
-931 3187 m
-907 3187 l
-S
-883 3188 m
-859 3188 l
-S
-835 3189 m
-811 3189 l
-S
-787 3190 m
-763 3190 l
-S
-739 3191 m
-728 3191 l
-715 3191 l
-S
-691 3192 m
-667 3192 l
-S
-643 3193 m
-619 3193 l
-S
-595 3194 m
-571 3194 l
-S
-547 3195 m
-533 3195 l
-S
-4877 2479 m
-4867 2479 l
-S
-4843 2479 m
-4819 2480 l
-S
-4795 2480 m
-4771 2481 l
-S
-4747 2481 m
-4723 2482 l
-S
-4699 2482 m
-4675 2483 l
-S
-4651 2483 m
-4627 2484 l
-S
-4603 2484 m
-4579 2485 l
-S
-4555 2485 m
-4531 2486 l
-S
-4507 2486 m
-4483 2487 l
-S
-4459 2487 m
-4448 2488 l
-4435 2488 l
-S
-4411 2488 m
-4387 2489 l
-S
-4363 2489 m
-4339 2490 l
-S
-4315 2490 m
-4291 2491 l
-S
-4267 2491 m
-4243 2492 l
-S
-4219 2492 m
-4195 2493 l
-S
-4171 2493 m
-4147 2494 l
-S
-4123 2494 m
-4099 2495 l
-S
-4075 2495 m
-4051 2496 l
-S
-4027 2496 m
-4003 2497 l
-S
-3979 2497 m
-3955 2498 l
-S
-3931 2498 m
-3911 2499 l
-3907 2499 l
-S
-3883 2499 m
-3859 2500 l
-S
-3835 2500 m
-3811 2501 l
-S
-3787 2501 m
-3763 2502 l
-S
-3739 2502 m
-3715 2503 l
-S
-3691 2503 m
-3667 2504 l
-S
-3642 2504 m
-3618 2505 l
-S
-3594 2505 m
-3570 2506 l
-S
-3546 2506 m
-3522 2507 l
-S
-3498 2507 m
-3474 2508 l
-S
-3450 2508 m
-3426 2509 l
-S
-3402 2509 m
-3378 2510 l
-S
-3354 2510 m
-3330 2511 l
-S
-3306 2511 m
-3282 2512 l
-S
-3258 2512 m
-3234 2513 l
-S
-3210 2513 m
-3186 2514 l
-S
-3162 2514 m
-3138 2515 l
-S
-3114 2515 m
-3090 2516 l
-S
-3066 2516 m
-3042 2517 l
-S
-3018 2517 m
-2994 2518 l
-S
-2970 2519 m
-2946 2519 l
-S
-2922 2520 m
-2898 2520 l
-S
-2874 2521 m
-2850 2521 l
-S
-2826 2522 m
-2802 2522 l
-S
-2778 2523 m
-2754 2523 l
-S
-2730 2524 m
-2706 2524 l
-S
-2682 2525 m
-2658 2525 l
-S
-2634 2526 m
-2610 2526 l
-S
-2586 2527 m
-2562 2527 l
-S
-2538 2528 m
-2514 2528 l
-S
-2490 2529 m
-2466 2529 l
-S
-2442 2530 m
-2418 2530 l
-S
-2394 2531 m
-2370 2531 l
-S
-2346 2532 m
-2322 2532 l
-S
-2298 2533 m
-2274 2533 l
-S
-2250 2534 m
-2226 2534 l
-S
-2202 2535 m
-2178 2535 l
-S
-2154 2536 m
-2130 2536 l
-S
-2106 2537 m
-2082 2537 l
-S
-2058 2538 m
-2034 2538 l
-S
-2010 2539 m
-1986 2539 l
-S
-1962 2540 m
-1938 2540 l
-S
-1914 2541 m
-1890 2541 l
-S
-1866 2542 m
-1842 2542 l
-S
-1818 2543 m
-1794 2543 l
-S
-1770 2544 m
-1763 2544 l
-1746 2544 l
-S
-1722 2545 m
-1698 2545 l
-S
-1674 2546 m
-1650 2546 l
-S
-1626 2547 m
-1602 2547 l
-S
-1578 2548 m
-1554 2548 l
-S
-1530 2549 m
-1506 2549 l
-S
-1482 2550 m
-1458 2550 l
-S
-1434 2551 m
-1410 2551 l
-S
-1386 2552 m
-1362 2552 l
-S
-1338 2553 m
-1314 2553 l
-S
-1290 2554 m
-1266 2554 l
-S
-1242 2555 m
-1226 2555 l
-1218 2555 l
-S
-1194 2556 m
-1170 2556 l
-S
-1145 2557 m
-1121 2557 l
-S
-1097 2558 m
-1073 2558 l
-S
-1049 2559 m
-1025 2559 l
-S
-1001 2560 m
-977 2560 l
-S
-953 2561 m
-929 2561 l
-S
-905 2562 m
-881 2562 l
-S
-857 2563 m
-833 2563 l
-S
-809 2564 m
-785 2564 l
-S
-761 2565 m
-737 2565 l
-S
-713 2566 m
-689 2566 l
-S
-665 2567 m
-641 2567 l
-S
-617 2568 m
-593 2568 l
-S
-569 2569 m
-545 2569 l
-S
-4865 1852 m
-4841 1853 l
-S
-4817 1853 m
-4793 1854 l
-S
-4769 1854 m
-4745 1855 l
-S
-4721 1855 m
-4697 1856 l
-S
-4673 1856 m
-4649 1857 l
-S
-4625 1857 m
-4601 1858 l
-S
-4577 1858 m
-4553 1859 l
-S
-4529 1859 m
-4505 1860 l
-S
-4481 1860 m
-4457 1861 l
-S
-4433 1861 m
-4409 1862 l
-S
-4385 1862 m
-4361 1863 l
-S
-4337 1863 m
-4313 1864 l
-S
-4289 1864 m
-4265 1865 l
-S
-4241 1865 m
-4217 1866 l
-S
-4193 1866 m
-4169 1867 l
-S
-4145 1867 m
-4121 1868 l
-S
-4097 1869 m
-4073 1869 l
-S
-4049 1870 m
-4025 1870 l
-S
-4001 1871 m
-3977 1871 l
-S
-3953 1872 m
-3929 1872 l
-S
-3905 1873 m
-3881 1873 l
-S
-3857 1874 m
-3833 1874 l
-S
-3809 1875 m
-3785 1875 l
-S
-3761 1876 m
-3737 1876 l
-S
-3713 1877 m
-3689 1877 l
-S
-3665 1878 m
-3641 1878 l
-S
-3617 1879 m
-3593 1879 l
-S
-3569 1880 m
-3545 1880 l
-S
-3521 1881 m
-3497 1881 l
-S
-3473 1882 m
-3448 1882 l
-S
-3424 1883 m
-3400 1883 l
-S
-3376 1884 m
-3352 1884 l
-S
-3328 1885 m
-3304 1885 l
-S
-3280 1886 m
-3256 1886 l
-S
-3232 1887 m
-3208 1887 l
-S
-3184 1888 m
-3160 1888 l
-S
-3136 1889 m
-3112 1889 l
-S
-3088 1890 m
-3064 1890 l
-S
-3040 1891 m
-3016 1891 l
-S
-2992 1892 m
-2968 1892 l
-S
-2944 1893 m
-2920 1893 l
-S
-2896 1894 m
-2872 1894 l
-S
-2848 1895 m
-2824 1895 l
-S
-2800 1896 m
-2797 1896 l
-2776 1896 l
-S
-2752 1897 m
-2728 1897 l
-S
-2704 1898 m
-2680 1898 l
-S
-2656 1899 m
-2632 1900 l
-S
-2608 1900 m
-2584 1901 l
-S
-2560 1901 m
-2536 1902 l
-S
-2512 1902 m
-2488 1903 l
-S
-2464 1903 m
-2440 1904 l
-S
-2416 1904 m
-2392 1905 l
-S
-2368 1905 m
-2344 1906 l
-S
-2320 1906 m
-2296 1907 l
-S
-2272 1907 m
-2260 1907 l
-2248 1908 l
-S
-2224 1908 m
-2200 1909 l
-S
-2176 1909 m
-2152 1910 l
-S
-2128 1910 m
-2104 1911 l
-S
-2080 1911 m
-2056 1912 l
-S
-2032 1912 m
-2008 1913 l
-S
-1984 1913 m
-1960 1914 l
-S
-1936 1914 m
-1912 1915 l
-S
-1888 1915 m
-1864 1916 l
-S
-1840 1916 m
-1816 1917 l
-S
-1792 1917 m
-1768 1918 l
-S
-1744 1918 m
-1724 1919 l
-1720 1919 l
-S
-1696 1919 m
-1672 1920 l
-S
-1648 1920 m
-1624 1921 l
-S
-1600 1921 m
-1576 1922 l
-S
-1552 1922 m
-1528 1923 l
-S
-1504 1923 m
-1480 1924 l
-S
-1456 1924 m
-1432 1925 l
-S
-1408 1925 m
-1384 1926 l
-S
-1360 1926 m
-1336 1927 l
-S
-1312 1927 m
-1288 1928 l
-S
-1264 1928 m
-1240 1929 l
-S
-1216 1930 m
-1192 1930 l
-S
-1168 1931 m
-1144 1931 l
-S
-1120 1932 m
-1096 1932 l
-S
-1072 1933 m
-1048 1933 l
-S
-1024 1934 m
-1000 1934 l
-S
-976 1935 m
-952 1935 l
-S
-927 1936 m
-903 1936 l
-S
-879 1937 m
-855 1937 l
-S
-831 1938 m
-807 1938 l
-S
-783 1939 m
-759 1939 l
-S
-735 1940 m
-711 1940 l
-S
-687 1941 m
-663 1941 l
-S
-639 1942 m
-615 1942 l
-S
-591 1943 m
-567 1943 l
-S
-543 1944 m
-533 1944 l
-S
-4877 2742 m
-4876 2728 l
-S
-4875 2704 m
-4873 2680 l
-S
-4872 2656 m
-4870 2632 l
-S
-4869 2608 m
-4867 2584 l
-S
-4866 2560 m
-4864 2536 l
-S
-4863 2512 m
-4861 2488 l
-S
-4860 2464 m
-4858 2440 l
-S
-4857 2416 m
-4855 2392 l
-S
-4854 2368 m
-4852 2344 l
-S
-4851 2320 m
-4849 2296 l
-S
-4848 2273 m
-4846 2249 l
-S
-4845 2225 m
-4843 2201 l
-S
-4842 2177 m
-4840 2153 l
-S
-4838 2129 m
-4838 2121 l
-4837 2105 l
-S
-4835 2081 m
-4834 2057 l
-S
-4832 2033 m
-4831 2009 l
-S
-4829 1985 m
-4828 1961 l
-S
-4826 1937 m
-4825 1913 l
-S
-4823 1889 m
-4822 1865 l
-S
-4820 1841 m
-4819 1817 l
-S
-4817 1793 m
-4816 1777 l
-S
-4502 6121 m
-4501 6113 l
-S
-4500 6089 m
-4498 6065 l
-S
-4497 6041 m
-4496 6017 l
-S
-4494 5993 m
-4493 5969 l
-S
-4491 5945 m
-4490 5921 l
-S
-4489 5897 m
-4488 5888 l
-4487 5874 l
-S
-4486 5850 m
-4484 5826 l
-S
-4483 5802 m
-4482 5778 l
-S
-4480 5754 m
-4479 5730 l
-S
-4477 5706 m
-4476 5682 l
-S
-4475 5658 m
-4473 5634 l
-S
-4472 5610 m
-4470 5586 l
-S
-4469 5562 m
-4468 5538 l
-S
-4466 5514 m
-4465 5490 l
-S
-4463 5466 m
-4462 5442 l
-S
-4461 5418 m
-4459 5394 l
-S
-4458 5370 m
-4457 5351 l
-4456 5346 l
-S
-4455 5322 m
-4454 5298 l
-S
-4452 5274 m
-4451 5250 l
-S
-4449 5226 m
-4448 5202 l
-S
-4446 5178 m
-4445 5155 l
-S
-4444 5131 m
-4442 5107 l
-S
-4441 5083 m
-4439 5059 l
-S
-4438 5035 m
-4436 5011 l
-S
-4435 4987 m
-4434 4963 l
-S
-4432 4939 m
-4431 4915 l
-S
-4429 4891 m
-4428 4867 l
-S
-4426 4843 m
-4425 4819 l
-S
-4424 4795 m
-4422 4771 l
-S
-4421 4747 m
-4419 4723 l
-S
-4418 4699 m
-4416 4675 l
-S
-4415 4651 m
-4414 4627 l
-S
-4412 4603 m
-4411 4579 l
-S
-4409 4555 m
-4408 4531 l
-S
-4406 4507 m
-4405 4484 l
-S
-4403 4460 m
-4402 4436 l
-S
-4401 4412 m
-4399 4388 l
-S
-4398 4364 m
-4396 4340 l
-S
-4395 4316 m
-4393 4292 l
-S
-4392 4268 m
-4390 4244 l
-S
-4389 4220 m
-4388 4196 l
-S
-4386 4172 m
-4385 4148 l
-S
-4383 4124 m
-4382 4100 l
-S
-4380 4076 m
-4379 4052 l
-S
-4377 4028 m
-4376 4004 l
-S
-4374 3980 m
-4373 3956 l
-S
-4372 3932 m
-4370 3908 l
-S
-4369 3884 m
-4367 3860 l
-S
-4366 3836 m
-4364 3813 l
-S
-4363 3789 m
-4361 3765 l
-S
-4360 3741 m
-4358 3717 l
-S
-4357 3693 m
-4355 3669 l
-S
-4354 3645 m
-4353 3621 l
-S
-4351 3597 m
-4350 3573 l
-S
-4348 3549 m
-4347 3525 l
-S
-4345 3501 m
-4344 3477 l
-S
-4342 3453 m
-4341 3429 l
-S
-4339 3405 m
-4338 3381 l
-S
-4336 3357 m
-4335 3333 l
-S
-4333 3309 m
-4332 3285 l
-S
-4330 3261 m
-4329 3237 l
-S
-4327 3213 m
-4327 3206 l
-4326 3190 l
-S
-4324 3166 m
-4323 3142 l
-S
-4321 3118 m
-4320 3094 l
-S
-4318 3070 m
-4317 3046 l
-S
-4316 3022 m
-4314 2998 l
-S
-4313 2974 m
-4311 2950 l
-S
-4310 2926 m
-4308 2902 l
-S
-4307 2878 m
-4305 2854 l
-S
-4304 2830 m
-4302 2806 l
-S
-4301 2782 m
-4299 2758 l
-S
-4298 2734 m
-4296 2710 l
-S
-4295 2686 m
-4294 2670 l
-4293 2662 l
-S
-4292 2638 m
-4290 2614 l
-S
-4289 2590 m
-4287 2567 l
-S
-4286 2543 m
-4284 2519 l
-S
-4283 2495 m
-4281 2471 l
-S
-4280 2447 m
-4278 2423 l
-S
-4277 2399 m
-4275 2375 l
-S
-4274 2351 m
-4272 2327 l
-S
-4270 2303 m
-4269 2279 l
-S
-4267 2255 m
-4266 2231 l
-S
-4264 2207 m
-4263 2183 l
-S
-4261 2159 m
-4260 2135 l
-S
-4258 2111 m
-4257 2087 l
-S
-4255 2063 m
-4254 2039 l
-S
-4252 2015 m
-4251 1991 l
-S
-4249 1968 m
-4248 1944 l
-S
-4246 1920 m
-4245 1896 l
-S
-4243 1872 m
-4242 1848 l
-S
-4240 1824 m
-4239 1800 l
-S
-3923 6120 m
-3921 6096 l
-S
-3920 6072 m
-3918 6048 l
-S
-3917 6024 m
-3916 6000 l
-S
-3914 5976 m
-3913 5952 l
-S
-3912 5928 m
-3910 5904 l
-S
-3909 5880 m
-3907 5856 l
-S
-3906 5832 m
-3905 5808 l
-S
-3903 5784 m
-3902 5760 l
-S
-3900 5736 m
-3899 5712 l
-S
-3898 5688 m
-3896 5664 l
-S
-3895 5640 m
-3893 5616 l
-S
-3892 5592 m
-3890 5568 l
-S
-3889 5544 m
-3888 5521 l
-S
-3886 5497 m
-3885 5473 l
-S
-3883 5449 m
-3882 5425 l
-S
-3881 5401 m
-3879 5377 l
-S
-3878 5353 m
-3876 5329 l
-S
-3875 5305 m
-3874 5281 l
-S
-3872 5257 m
-3871 5233 l
-S
-3869 5209 m
-3868 5185 l
-S
-3866 5161 m
-3865 5137 l
-S
-3864 5113 m
-3862 5089 l
-S
-3861 5065 m
-3859 5041 l
-S
-3858 5017 m
-3857 4993 l
-S
-3855 4969 m
-3854 4945 l
-S
-3852 4921 m
-3851 4897 l
-S
-3849 4873 m
-3848 4849 l
-S
-3847 4826 m
-3845 4802 l
-S
-3844 4778 m
-3842 4754 l
-S
-3841 4730 m
-3839 4706 l
-S
-3838 4682 m
-3836 4658 l
-S
-3835 4634 m
-3834 4610 l
-S
-3832 4586 m
-3831 4562 l
-S
-3829 4538 m
-3828 4514 l
-S
-3826 4490 m
-3825 4466 l
-S
-3823 4442 m
-3822 4418 l
-S
-3821 4394 m
-3819 4370 l
-S
-3818 4346 m
-3816 4322 l
-S
-3815 4298 m
-3814 4290 l
-3813 4274 l
-S
-3812 4250 m
-3810 4226 l
-S
-3809 4202 m
-3808 4178 l
-S
-3806 4155 m
-3805 4131 l
-S
-3803 4107 m
-3802 4083 l
-S
-3800 4059 m
-3799 4035 l
-S
-3797 4011 m
-3796 3987 l
-S
-3794 3963 m
-3793 3939 l
-S
-3792 3915 m
-3790 3891 l
-S
-3789 3867 m
-3787 3843 l
-S
-3786 3819 m
-3784 3795 l
-S
-3783 3771 m
-3782 3754 l
-3781 3747 l
-S
-3780 3723 m
-3778 3699 l
-S
-3777 3675 m
-3775 3651 l
-S
-3774 3627 m
-3772 3603 l
-S
-3771 3579 m
-3770 3555 l
-S
-3768 3531 m
-3767 3508 l
-S
-3765 3484 m
-3764 3460 l
-S
-3762 3436 m
-3761 3412 l
-S
-3759 3388 m
-3758 3364 l
-S
-3756 3340 m
-3755 3316 l
-S
-3753 3292 m
-3752 3268 l
-S
-3750 3244 m
-3749 3220 l
-S
-3747 3196 m
-3746 3172 l
-S
-3744 3148 m
-3743 3124 l
-S
-3741 3100 m
-3740 3076 l
-S
-3738 3052 m
-3737 3028 l
-S
-3735 3004 m
-3734 2980 l
-S
-3732 2956 m
-3731 2932 l
-S
-3730 2908 m
-3728 2885 l
-S
-3727 2861 m
-3725 2837 l
-S
-3724 2813 m
-3722 2789 l
-S
-3721 2765 m
-3719 2741 l
-S
-3718 2717 m
-3716 2693 l
-S
-3715 2669 m
-3713 2645 l
-S
-3712 2621 m
-3710 2597 l
-S
-3709 2573 m
-3707 2549 l
-S
-3706 2525 m
-3704 2501 l
-S
-3703 2477 m
-3701 2453 l
-S
-3699 2429 m
-3698 2405 l
-S
-3696 2381 m
-3695 2357 l
-S
-3693 2333 m
-3692 2309 l
-S
-3690 2286 m
-3689 2262 l
-S
-3687 2238 m
-3686 2214 l
-S
-3684 2190 m
-3683 2166 l
-S
-3681 2142 m
-3680 2118 l
-S
-3678 2094 m
-3677 2070 l
-S
-3675 2046 m
-3674 2022 l
-S
-3672 1998 m
-3671 1974 l
-S
-3669 1950 m
-3668 1926 l
-S
-3666 1902 m
-3665 1878 l
-S
-3663 1854 m
-3662 1830 l
-S
-3660 1806 m
-3658 1782 l
-S
-3343 6102 m
-3341 6078 l
-S
-3340 6054 m
-3339 6030 l
-S
-3337 6006 m
-3336 5982 l
-S
-3334 5958 m
-3333 5934 l
-S
-3332 5910 m
-3332 5910 l
-3330 5887 l
-S
-3329 5863 m
-3327 5839 l
-S
-3326 5815 m
-3325 5791 l
-S
-3323 5767 m
-3322 5743 l
-S
-3320 5719 m
-3319 5695 l
-S
-3318 5671 m
-3316 5647 l
-S
-3315 5623 m
-3313 5599 l
-S
-3312 5575 m
-3311 5551 l
-S
-3309 5527 m
-3308 5503 l
-S
-3306 5479 m
-3305 5455 l
-S
-3304 5431 m
-3302 5407 l
-S
-3301 5383 m
-3300 5374 l
-3299 5359 l
-S
-3298 5335 m
-3296 5311 l
-S
-3295 5287 m
-3294 5263 l
-S
-3292 5239 m
-3291 5215 l
-S
-3289 5191 m
-3288 5168 l
-S
-3287 5144 m
-3285 5120 l
-S
-3284 5096 m
-3282 5072 l
-S
-3281 5048 m
-3279 5024 l
-S
-3278 5000 m
-3277 4976 l
-S
-3275 4952 m
-3274 4928 l
-S
-3272 4904 m
-3271 4880 l
-S
-3269 4856 m
-3268 4838 l
-3268 4832 l
-S
-3267 4808 m
-3265 4784 l
-S
-3264 4760 m
-3262 4736 l
-S
-3261 4712 m
-3259 4688 l
-S
-3258 4664 m
-3256 4640 l
-S
-3255 4616 m
-3254 4592 l
-S
-3252 4568 m
-3251 4544 l
-S
-3249 4520 m
-3248 4497 l
-S
-3246 4473 m
-3245 4449 l
-S
-3244 4425 m
-3242 4401 l
-S
-3241 4377 m
-3239 4353 l
-S
-3238 4329 m
-3236 4305 l
-S
-3235 4281 m
-3233 4257 l
-S
-3232 4233 m
-3231 4209 l
-S
-3229 4185 m
-3228 4161 l
-S
-3226 4137 m
-3225 4113 l
-S
-3223 4089 m
-3222 4065 l
-S
-3220 4041 m
-3219 4017 l
-S
-3217 3993 m
-3216 3969 l
-S
-3214 3945 m
-3213 3921 l
-S
-3212 3897 m
-3210 3873 l
-S
-3209 3849 m
-3207 3826 l
-S
-3206 3802 m
-3204 3778 l
-S
-3203 3754 m
-3201 3730 l
-S
-3200 3706 m
-3198 3682 l
-S
-3197 3658 m
-3195 3634 l
-S
-3194 3610 m
-3192 3586 l
-S
-3191 3562 m
-3190 3538 l
-S
-3188 3514 m
-3187 3490 l
-S
-3185 3466 m
-3184 3442 l
-S
-3182 3418 m
-3181 3394 l
-S
-3179 3370 m
-3178 3346 l
-S
-3176 3322 m
-3175 3298 l
-S
-3173 3274 m
-3172 3250 l
-S
-3170 3226 m
-3169 3203 l
-S
-3167 3179 m
-3166 3155 l
-S
-3164 3131 m
-3163 3107 l
-S
-3161 3083 m
-3160 3059 l
-S
-3158 3035 m
-3157 3011 l
-S
-3155 2987 m
-3154 2963 l
-S
-3152 2939 m
-3151 2915 l
-S
-3149 2891 m
-3148 2867 l
-S
-3146 2843 m
-3145 2819 l
-S
-3143 2795 m
-3142 2771 l
-S
-3141 2747 m
-3139 2723 l
-S
-3138 2699 m
-3137 2694 l
-3136 2675 l
-S
-3135 2651 m
-3133 2627 l
-S
-3131 2603 m
-3130 2580 l
-S
-3128 2556 m
-3127 2532 l
-S
-3125 2508 m
-3124 2484 l
-S
-3122 2460 m
-3121 2436 l
-S
-3119 2412 m
-3118 2388 l
-S
-3116 2364 m
-3115 2340 l
-S
-3113 2316 m
-3112 2292 l
-S
-3110 2268 m
-3109 2244 l
-S
-3107 2220 m
-3106 2196 l
-S
-3104 2172 m
-3103 2158 l
-3103 2148 l
-S
-3101 2124 m
-3100 2100 l
-S
-3098 2076 m
-3097 2052 l
-S
-3095 2028 m
-3094 2004 l
-S
-3092 1981 m
-3091 1957 l
-S
-3089 1933 m
-3088 1909 l
-S
-3086 1885 m
-3084 1861 l
-S
-3083 1837 m
-3081 1813 l
-S
-3080 1789 m
-3079 1777 l
-S
-2765 6121 m
-2764 6109 l
-S
-2763 6085 m
-2761 6061 l
-S
-2760 6037 m
-2759 6013 l
-S
-2757 5989 m
-2756 5965 l
-S
-2755 5941 m
-2753 5921 l
-2753 5917 l
-S
-2752 5893 m
-2750 5869 l
-S
-2749 5845 m
-2748 5821 l
-S
-2746 5797 m
-2745 5773 l
-S
-2743 5749 m
-2742 5725 l
-S
-2741 5701 m
-2739 5677 l
-S
-2738 5653 m
-2736 5629 l
-S
-2735 5605 m
-2733 5581 l
-S
-2732 5557 m
-2731 5534 l
-S
-2729 5510 m
-2728 5486 l
-S
-2726 5462 m
-2725 5438 l
-S
-2724 5414 m
-2722 5390 l
-S
-2721 5366 m
-2719 5342 l
-S
-2718 5318 m
-2717 5294 l
-S
-2715 5270 m
-2714 5246 l
-S
-2712 5222 m
-2711 5198 l
-S
-2709 5174 m
-2708 5150 l
-S
-2707 5126 m
-2705 5102 l
-S
-2704 5078 m
-2702 5054 l
-S
-2701 5030 m
-2699 5006 l
-S
-2698 4982 m
-2697 4958 l
-S
-2695 4934 m
-2694 4910 l
-S
-2692 4886 m
-2691 4862 l
-S
-2689 4839 m
-2688 4815 l
-S
-2687 4791 m
-2685 4767 l
-S
-2684 4743 m
-2682 4719 l
-S
-2681 4695 m
-2679 4671 l
-S
-2678 4647 m
-2677 4623 l
-S
-2675 4599 m
-2674 4575 l
-S
-2672 4551 m
-2671 4527 l
-S
-2669 4503 m
-2668 4479 l
-S
-2666 4455 m
-2665 4431 l
-S
-2664 4407 m
-2662 4383 l
-S
-2661 4359 m
-2659 4335 l
-S
-2658 4311 m
-2656 4287 l
-S
-2655 4263 m
-2653 4239 l
-S
-2652 4215 m
-2651 4191 l
-S
-2649 4168 m
-2648 4144 l
-S
-2646 4120 m
-2645 4096 l
-S
-2643 4072 m
-2642 4048 l
-S
-2640 4024 m
-2639 4000 l
-S
-2637 3976 m
-2636 3952 l
-S
-2634 3928 m
-2633 3904 l
-S
-2632 3880 m
-2630 3856 l
-S
-2629 3832 m
-2627 3808 l
-S
-2626 3784 m
-2625 3778 l
-2624 3760 l
-S
-2623 3736 m
-2621 3712 l
-S
-2620 3688 m
-2618 3664 l
-S
-2617 3640 m
-2615 3616 l
-S
-2614 3592 m
-2612 3568 l
-S
-2611 3544 m
-2610 3521 l
-S
-2608 3497 m
-2607 3473 l
-S
-2605 3449 m
-2604 3425 l
-S
-2602 3401 m
-2601 3377 l
-S
-2599 3353 m
-2598 3329 l
-S
-2596 3305 m
-2595 3281 l
-S
-2593 3257 m
-2592 3242 l
-2592 3233 l
-S
-2590 3209 m
-2589 3185 l
-S
-2587 3161 m
-2586 3137 l
-S
-2584 3113 m
-2583 3089 l
-S
-2581 3065 m
-2580 3041 l
-S
-2578 3017 m
-2577 2993 l
-S
-2575 2969 m
-2574 2945 l
-S
-2572 2921 m
-2571 2898 l
-S
-2569 2874 m
-2568 2850 l
-S
-2566 2826 m
-2565 2802 l
-S
-2563 2778 m
-2562 2754 l
-S
-2560 2730 m
-2559 2706 l
-2559 2706 l
-S
-2557 2682 m
-2556 2658 l
-S
-2554 2634 m
-2553 2610 l
-S
-2551 2586 m
-2550 2562 l
-S
-2548 2538 m
-2547 2514 l
-S
-2545 2490 m
-2544 2466 l
-S
-2542 2442 m
-2541 2418 l
-S
-2539 2394 m
-2538 2370 l
-S
-2536 2346 m
-2535 2322 l
-S
-2533 2299 m
-2532 2275 l
-S
-2530 2251 m
-2529 2227 l
-S
-2527 2203 m
-2526 2179 l
-S
-2524 2155 m
-2523 2131 l
-S
-2521 2107 m
-2520 2083 l
-S
-2518 2059 m
-2517 2035 l
-S
-2515 2011 m
-2514 1987 l
-S
-2512 1963 m
-2511 1939 l
-S
-2509 1915 m
-2507 1891 l
-S
-2506 1867 m
-2504 1843 l
-S
-2503 1819 m
-2501 1795 l
-S
-2186 6115 m
-2184 6091 l
-S
-2183 6067 m
-2182 6043 l
-S
-2180 6019 m
-2179 5995 l
-S
-2177 5971 m
-2176 5947 l
-S
-2175 5923 m
-2173 5900 l
-S
-2172 5876 m
-2170 5852 l
-S
-2169 5828 m
-2168 5804 l
-S
-2166 5780 m
-2165 5756 l
-S
-2163 5732 m
-2162 5708 l
-S
-2161 5684 m
-2159 5660 l
-S
-2158 5636 m
-2156 5612 l
-S
-2155 5588 m
-2154 5564 l
-S
-2152 5540 m
-2151 5516 l
-S
-2149 5492 m
-2148 5468 l
-S
-2147 5444 m
-2145 5420 l
-S
-2144 5396 m
-2142 5372 l
-S
-2141 5348 m
-2139 5324 l
-S
-2138 5300 m
-2137 5276 l
-S
-2135 5252 m
-2134 5228 l
-S
-2132 5205 m
-2131 5181 l
-S
-2129 5157 m
-2128 5133 l
-S
-2127 5109 m
-2125 5085 l
-S
-2124 5061 m
-2122 5037 l
-S
-2121 5013 m
-2120 4989 l
-S
-2118 4965 m
-2117 4941 l
-S
-2115 4917 m
-2114 4893 l
-S
-2112 4869 m
-2112 4861 l
-2111 4845 l
-S
-2110 4821 m
-2108 4797 l
-S
-2107 4773 m
-2105 4749 l
-S
-2104 4725 m
-2102 4701 l
-S
-2101 4677 m
-2099 4653 l
-S
-2098 4629 m
-2097 4605 l
-S
-2095 4581 m
-2094 4557 l
-S
-2092 4533 m
-2091 4510 l
-S
-2089 4486 m
-2088 4462 l
-S
-2086 4438 m
-2085 4414 l
-S
-2084 4390 m
-2082 4366 l
-S
-2081 4342 m
-2080 4325 l
-2079 4318 l
-S
-2078 4294 m
-2076 4270 l
-S
-2075 4246 m
-2073 4222 l
-S
-2072 4198 m
-2071 4174 l
-S
-2069 4150 m
-2068 4126 l
-S
-2066 4102 m
-2065 4078 l
-S
-2063 4054 m
-2062 4030 l
-S
-2060 4006 m
-2059 3982 l
-S
-2057 3958 m
-2056 3934 l
-S
-2054 3910 m
-2053 3886 l
-S
-2052 3863 m
-2050 3839 l
-S
-2049 3815 m
-2047 3791 l
-S
-2046 3767 m
-2044 3743 l
-S
-2043 3719 m
-2041 3695 l
-S
-2040 3671 m
-2038 3647 l
-S
-2037 3623 m
-2035 3599 l
-S
-2034 3575 m
-2032 3551 l
-S
-2031 3527 m
-2030 3503 l
-S
-2028 3479 m
-2027 3455 l
-S
-2025 3431 m
-2024 3407 l
-S
-2022 3383 m
-2021 3359 l
-S
-2019 3335 m
-2018 3311 l
-S
-2016 3287 m
-2015 3263 l
-S
-2013 3239 m
-2012 3216 l
-S
-2010 3192 m
-2009 3168 l
-S
-2007 3144 m
-2006 3120 l
-S
-2004 3096 m
-2003 3072 l
-S
-2001 3048 m
-2000 3024 l
-S
-1998 3000 m
-1997 2976 l
-S
-1995 2952 m
-1994 2928 l
-S
-1992 2904 m
-1991 2880 l
-S
-1989 2856 m
-1988 2832 l
-S
-1986 2808 m
-1985 2784 l
-S
-1983 2760 m
-1982 2736 l
-S
-1980 2712 m
-1979 2688 l
-S
-1977 2664 m
-1976 2640 l
-S
-1974 2617 m
-1973 2593 l
-S
-1971 2569 m
-1970 2545 l
-S
-1968 2521 m
-1967 2497 l
-S
-1965 2473 m
-1964 2449 l
-S
-1962 2425 m
-1961 2401 l
-S
-1959 2377 m
-1958 2353 l
-S
-1956 2329 m
-1955 2305 l
-S
-1953 2281 m
-1952 2257 l
-S
-1950 2233 m
-1949 2209 l
-S
-1947 2185 m
-1947 2182 l
-1946 2161 l
-S
-1944 2137 m
-1943 2113 l
-S
-1941 2089 m
-1940 2065 l
-S
-1938 2041 m
-1937 2018 l
-S
-1935 1994 m
-1933 1970 l
-S
-1932 1946 m
-1930 1922 l
-S
-1929 1898 m
-1927 1874 l
-S
-1926 1850 m
-1924 1826 l
-S
-1923 1802 m
-1921 1778 l
-S
-1606 6098 m
-1604 6074 l
-S
-1603 6050 m
-1602 6026 l
-S
-1600 6002 m
-1599 5978 l
-S
-1598 5954 m
-1597 5944 l
-1596 5930 l
-S
-1595 5906 m
-1593 5882 l
-S
-1592 5858 m
-1591 5834 l
-S
-1589 5810 m
-1588 5786 l
-S
-1586 5762 m
-1585 5738 l
-S
-1583 5714 m
-1582 5690 l
-S
-1581 5666 m
-1579 5642 l
-S
-1578 5618 m
-1576 5594 l
-S
-1575 5571 m
-1574 5547 l
-S
-1572 5523 m
-1571 5499 l
-S
-1569 5475 m
-1568 5451 l
-S
-1567 5427 m
-1566 5408 l
-1565 5403 l
-S
-1564 5379 m
-1562 5355 l
-S
-1561 5331 m
-1560 5307 l
-S
-1558 5283 m
-1557 5259 l
-S
-1555 5235 m
-1554 5211 l
-S
-1552 5187 m
-1551 5163 l
-S
-1550 5139 m
-1548 5115 l
-S
-1547 5091 m
-1545 5067 l
-S
-1544 5043 m
-1542 5019 l
-S
-1541 4995 m
-1540 4971 l
-S
-1538 4947 m
-1537 4923 l
-S
-1535 4899 m
-1534 4876 l
-S
-1532 4852 m
-1531 4828 l
-S
-1530 4804 m
-1528 4780 l
-S
-1527 4756 m
-1525 4732 l
-S
-1524 4708 m
-1522 4684 l
-S
-1521 4660 m
-1519 4636 l
-S
-1518 4612 m
-1517 4588 l
-S
-1515 4564 m
-1514 4540 l
-S
-1512 4516 m
-1511 4492 l
-S
-1509 4468 m
-1508 4444 l
-S
-1507 4420 m
-1505 4396 l
-S
-1504 4372 m
-1502 4348 l
-S
-1501 4324 m
-1499 4300 l
-S
-1498 4276 m
-1496 4252 l
-S
-1495 4228 m
-1493 4205 l
-S
-1492 4181 m
-1491 4157 l
-S
-1489 4133 m
-1488 4109 l
-S
-1486 4085 m
-1485 4061 l
-S
-1483 4037 m
-1482 4013 l
-S
-1480 3989 m
-1479 3965 l
-S
-1477 3941 m
-1476 3917 l
-S
-1475 3893 m
-1473 3869 l
-S
-1472 3845 m
-1470 3821 l
-S
-1469 3797 m
-1467 3773 l
-S
-1466 3749 m
-1464 3725 l
-S
-1463 3701 m
-1461 3677 l
-S
-1460 3653 m
-1458 3629 l
-S
-1457 3605 m
-1455 3581 l
-S
-1454 3558 m
-1452 3534 l
-S
-1451 3510 m
-1449 3486 l
-S
-1448 3462 m
-1447 3438 l
-S
-1445 3414 m
-1444 3390 l
-S
-1442 3366 m
-1441 3342 l
-S
-1439 3318 m
-1438 3294 l
-S
-1436 3270 m
-1436 3266 l
-1435 3246 l
-S
-1433 3222 m
-1432 3198 l
-S
-1430 3174 m
-1429 3150 l
-S
-1427 3126 m
-1426 3102 l
-S
-1424 3078 m
-1423 3054 l
-S
-1421 3030 m
-1420 3006 l
-S
-1418 2982 m
-1417 2958 l
-S
-1415 2935 m
-1414 2911 l
-S
-1412 2887 m
-1411 2863 l
-S
-1409 2839 m
-1408 2815 l
-S
-1406 2791 m
-1405 2767 l
-S
-1403 2743 m
-1403 2730 l
-1402 2719 l
-S
-1400 2695 m
-1399 2671 l
-S
-1397 2647 m
-1396 2623 l
-S
-1394 2599 m
-1393 2575 l
-S
-1391 2551 m
-1390 2527 l
-S
-1388 2503 m
-1387 2479 l
-S
-1385 2455 m
-1384 2431 l
-S
-1382 2407 m
-1381 2383 l
-S
-1379 2359 m
-1378 2336 l
-S
-1376 2312 m
-1375 2288 l
-S
-1373 2264 m
-1372 2240 l
-S
-1370 2216 m
-1369 2194 l
-1369 2192 l
-S
-1367 2168 m
-1366 2144 l
-S
-1364 2120 m
-1363 2096 l
-S
-1361 2072 m
-1360 2048 l
-S
-1358 2024 m
-1356 2000 l
-S
-1355 1976 m
-1353 1952 l
-S
-1352 1928 m
-1350 1904 l
-S
-1349 1880 m
-1347 1856 l
-S
-1346 1832 m
-1344 1808 l
-S
-1343 1784 m
-1342 1777 l
-S
-1028 6121 m
-1027 6104 l
-S
-1026 6080 m
-1025 6056 l
-S
-1023 6032 m
-1022 6008 l
-S
-1020 5984 m
-1019 5960 l
-S
-1018 5937 m
-1016 5913 l
-S
-1015 5889 m
-1013 5865 l
-S
-1012 5841 m
-1011 5817 l
-S
-1009 5793 m
-1008 5769 l
-S
-1006 5745 m
-1005 5721 l
-S
-1004 5697 m
-1002 5673 l
-S
-1001 5649 m
-999 5625 l
-S
-998 5601 m
-997 5577 l
-S
-995 5553 m
-994 5529 l
-S
-992 5505 m
-991 5481 l
-S
-990 5457 m
-988 5433 l
-S
-987 5409 m
-985 5385 l
-S
-984 5361 m
-982 5337 l
-S
-981 5313 m
-980 5289 l
-S
-978 5265 m
-977 5242 l
-S
-975 5218 m
-974 5194 l
-S
-972 5170 m
-971 5146 l
-S
-970 5122 m
-968 5098 l
-S
-967 5074 m
-965 5050 l
-S
-964 5026 m
-962 5002 l
-S
-961 4978 m
-960 4954 l
-S
-958 4930 m
-957 4906 l
-S
-955 4882 m
-954 4858 l
-S
-952 4834 m
-951 4810 l
-S
-950 4786 m
-948 4762 l
-S
-947 4738 m
-945 4714 l
-S
-944 4690 m
-942 4666 l
-S
-941 4642 m
-940 4618 l
-S
-938 4594 m
-937 4571 l
-S
-935 4547 m
-934 4523 l
-S
-932 4499 m
-931 4475 l
-S
-929 4451 m
-928 4427 l
-S
-927 4403 m
-925 4379 l
-S
-924 4355 m
-923 4348 l
-922 4331 l
-S
-921 4307 m
-919 4283 l
-S
-918 4259 m
-916 4235 l
-S
-915 4211 m
-913 4187 l
-S
-912 4163 m
-911 4139 l
-S
-909 4115 m
-908 4091 l
-S
-906 4067 m
-905 4043 l
-S
-903 4019 m
-902 3995 l
-S
-900 3971 m
-899 3947 l
-S
-897 3923 m
-896 3900 l
-S
-895 3876 m
-893 3852 l
-S
-892 3828 m
-891 3813 l
-890 3804 l
-S
-889 3780 m
-887 3756 l
-S
-886 3732 m
-884 3708 l
-S
-883 3684 m
-881 3660 l
-S
-880 3636 m
-878 3612 l
-S
-877 3588 m
-875 3564 l
-S
-874 3540 m
-872 3516 l
-S
-871 3492 m
-869 3468 l
-S
-868 3444 m
-867 3420 l
-S
-865 3396 m
-864 3372 l
-S
-862 3348 m
-861 3324 l
-S
-859 3300 m
-858 3278 l
-858 3277 l
-S
-856 3253 m
-855 3229 l
-S
-853 3205 m
-852 3181 l
-S
-850 3157 m
-849 3133 l
-S
-847 3109 m
-846 3085 l
-S
-844 3061 m
-843 3037 l
-S
-841 3013 m
-840 2989 l
-S
-838 2965 m
-837 2941 l
-S
-835 2917 m
-834 2893 l
-S
-832 2869 m
-831 2845 l
-S
-829 2821 m
-828 2797 l
-S
-826 2773 m
-825 2749 l
-S
-823 2725 m
-822 2701 l
-S
-820 2677 m
-819 2654 l
-S
-817 2630 m
-816 2606 l
-S
-814 2582 m
-813 2558 l
-S
-811 2534 m
-810 2510 l
-S
-808 2486 m
-807 2462 l
-S
-805 2438 m
-804 2414 l
-S
-802 2390 m
-801 2366 l
-S
-799 2342 m
-798 2318 l
-S
-796 2294 m
-795 2270 l
-S
-793 2246 m
-792 2222 l
-S
-790 2198 m
-789 2174 l
-S
-787 2150 m
-786 2126 l
-S
-784 2102 m
-782 2078 l
-S
-781 2055 m
-779 2031 l
-S
-778 2007 m
-776 1983 l
-S
-775 1959 m
-773 1935 l
-S
-772 1911 m
-770 1887 l
-S
-769 1863 m
-767 1839 l
-S
-766 1815 m
-764 1791 l
-S
-4877 6113 m
-4847 6113 l
-S
-4877 5988 m
-4847 5988 l
-S
-4877 5862 m
-4847 5863 l
-S
-4877 5737 m
-4847 5738 l
-S
-4877 5486 m
-4847 5487 l
-S
-4877 5361 m
-4847 5362 l
-S
-4877 5236 m
-4847 5236 l
-S
-4877 5110 m
-4847 5111 l
-S
-4877 4860 m
-4847 4860 l
-S
-4877 4734 m
-4847 4735 l
-S
-4877 4609 m
-4847 4610 l
-S
-4877 4484 m
-4847 4484 l
-S
-4877 4233 m
-4847 4234 l
-S
-4877 4108 m
-4847 4109 l
-S
-4877 3983 m
-4847 3983 l
-S
-4877 3857 m
-4847 3858 l
-S
-4877 3607 m
-4847 3607 l
-S
-4877 3481 m
-4847 3482 l
-S
-4877 3356 m
-4847 3357 l
-S
-4877 3231 m
-4847 3231 l
-S
-4877 2980 m
-4847 2981 l
-S
-4877 2855 m
-4847 2855 l
-S
-4877 2729 m
-4847 2730 l
-S
-4877 2604 m
-4847 2605 l
-S
-4877 2353 m
-4847 2354 l
-S
-4877 2228 m
-4847 2229 l
-S
-4877 2103 m
-4847 2103 l
-S
-4877 1977 m
-4847 1978 l
-S
-4671 1777 m
-4673 1808 l
-S
-4527 1777 m
-4529 1808 l
-S
-4382 1777 m
-4384 1808 l
-S
-4092 1777 m
-4094 1808 l
-S
-3948 1777 m
-3950 1808 l
-S
-3803 1777 m
-3805 1808 l
-S
-3513 1777 m
-3515 1808 l
-S
-3369 1777 m
-3371 1808 l
-S
-3224 1777 m
-3226 1808 l
-S
-2934 1777 m
-2936 1808 l
-S
-2790 1777 m
-2792 1808 l
-S
-2645 1777 m
-2647 1808 l
-S
-2355 1777 m
-2357 1808 l
-S
-2211 1777 m
-2213 1808 l
-S
-2066 1777 m
-2068 1808 l
-S
-1777 1777 m
-1778 1808 l
-S
-1632 1777 m
-1634 1808 l
-S
-1487 1777 m
-1489 1808 l
-S
-1198 1777 m
-1199 1808 l
-S
-1053 1777 m
-1055 1808 l
-S
-908 1777 m
-910 1808 l
-S
-619 1777 m
-621 1808 l
-S
-533 6071 m
-564 6071 l
-S
-533 5946 m
-564 5946 l
-S
-533 5821 m
-564 5821 l
-S
-533 5571 m
-564 5571 l
-S
-533 5446 m
-564 5446 l
-S
-533 5321 m
-564 5321 l
-S
-533 5196 m
-564 5195 l
-S
-533 4946 m
-564 4945 l
-S
-533 4821 m
-564 4820 l
-S
-533 4696 m
-564 4695 l
-S
-533 4571 m
-564 4570 l
-S
-533 4321 m
-564 4320 l
-S
-533 4195 m
-564 4195 l
-S
-533 4070 m
-564 4070 l
-S
-533 3945 m
-564 3945 l
-S
-533 3695 m
-564 3695 l
-S
-533 3570 m
-564 3569 l
-S
-533 3445 m
-564 3444 l
-S
-533 3320 m
-564 3319 l
-S
-533 3070 m
-564 3069 l
-S
-533 2945 m
-564 2944 l
-S
-533 2820 m
-564 2819 l
-S
-533 2695 m
-564 2694 l
-S
-533 2444 m
-564 2444 l
-S
-533 2319 m
-564 2319 l
-S
-533 2194 m
-564 2194 l
-S
-533 2069 m
-564 2068 l
-S
-533 1819 m
-564 1818 l
-S
-4791 6121 m
-4789 6091 l
-S
-4646 6121 m
-4645 6091 l
-S
-4357 6121 m
-4355 6091 l
-S
-4212 6121 m
-4210 6091 l
-S
-4068 6121 m
-4066 6091 l
-S
-3778 6121 m
-3776 6091 l
-S
-3633 6121 m
-3632 6091 l
-S
-3489 6121 m
-3487 6091 l
-S
-3199 6121 m
-3197 6091 l
-S
-3054 6121 m
-3053 6091 l
-S
-2910 6121 m
-2908 6091 l
-S
-2620 6121 m
-2619 6091 l
-S
-2476 6121 m
-2474 6091 l
-S
-2331 6121 m
-2329 6091 l
-S
-2041 6121 m
-2040 6091 l
-S
-1897 6121 m
-1895 6091 l
-S
-1752 6121 m
-1750 6091 l
-S
-1463 6121 m
-1461 6091 l
-S
-1318 6121 m
-1316 6091 l
-S
-1173 6121 m
-1171 6091 l
-S
-884 6121 m
-882 6091 l
-S
-739 6121 m
-737 6091 l
-S
-594 6121 m
-592 6091 l
-S
-4877 1777 m
-4877 2088 l
-4877 2398 l
-4877 2708 l
-4877 3018 l
-4877 3329 l
-4877 3639 l
-4877 3949 l
-4877 4260 l
-4877 4570 l
-4877 4880 l
-4877 5190 l
-4877 5501 l
-4877 5811 l
-4877 6121 l
-S
-4877 6121 m
-4567 6121 l
-4256 6121 l
-3946 6121 l
-3636 6121 l
-3326 6121 l
-3015 6121 l
-2705 6121 l
-2395 6121 l
-2085 6121 l
-1774 6121 l
-1464 6121 l
-1154 6121 l
-843 6121 l
-533 6121 l
-S
-533 6121 m
-533 5811 l
-533 5501 l
-533 5190 l
-533 4880 l
-533 4570 l
-533 4260 l
-533 3949 l
-533 3639 l
-533 3329 l
-533 3018 l
-533 2708 l
-533 2398 l
-533 2088 l
-533 1777 l
-S
-533 1777 m
-843 1777 l
-1154 1777 l
-1464 1777 l
-1774 1777 l
-2085 1777 l
-2395 1777 l
-2705 1777 l
-3015 1777 l
-3326 1777 l
-3636 1777 l
-3946 1777 l
-4256 1777 l
-4567 1777 l
-4877 1777 l
-S
-1 g
-Y
-5029.5 2159.2 m
-4920 2159 l
-4920 2798 l
-5029 2798 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4935 2185 m
-4935 2227 l
-4966 2204 l
-4966 2216 l
-4969 2223 l
-4973 2227 l
-4984 2231 l
-4992 2231 l
-5003 2227 l
-5011 2219 l
-5014 2208 l
-5014 2197 l
-5011 2185 l
-5007 2182 l
-4999 2178 l
-S
-4935 2257 m
-5014 2257 l
-S
-4977 2257 m
-4966 2268 l
-4962 2276 l
-4962 2287 l
-4966 2294 l
-4977 2298 l
-5014 2298 l
-S
-4954 2328 m
-4951 2328 l
-4943 2332 l
-4939 2336 l
-4935 2343 l
-4935 2358 l
-4939 2366 l
-4943 2370 l
-4951 2373 l
-4958 2373 l
-4966 2370 l
-4977 2362 l
-5014 2325 l
-5014 2377 l
-S
-4935 2422 m
-4939 2411 l
-4951 2403 l
-4969 2400 l
-4981 2400 l
-4999 2403 l
-5011 2411 l
-5014 2422 l
-5014 2430 l
-5011 2441 l
-4999 2449 l
-4981 2452 l
-4969 2452 l
-4951 2449 l
-4939 2441 l
-4935 2430 l
-4935 2422 l
-S
-4962 2479 m
-5014 2479 l
-S
-4977 2479 m
-4966 2490 l
-4962 2497 l
-4962 2509 l
-4966 2516 l
-4977 2520 l
-5014 2520 l
-S
-4977 2520 m
-4966 2531 l
-4962 2539 l
-4962 2550 l
-4966 2558 l
-4977 2561 l
-5014 2561 l
-S
-4935 2610 m
-4939 2599 l
-4951 2591 l
-4969 2588 l
-4981 2588 l
-4999 2591 l
-5011 2599 l
-5014 2610 l
-5014 2618 l
-5011 2629 l
-4999 2637 l
-4981 2640 l
-4969 2640 l
-4951 2637 l
-4939 2629 l
-4935 2618 l
-4935 2610 l
-S
-4935 2685 m
-4939 2674 l
-4951 2667 l
-4969 2663 l
-4981 2663 l
-4999 2667 l
-5011 2674 l
-5014 2685 l
-5014 2693 l
-5011 2704 l
-4999 2712 l
-4981 2716 l
-4969 2716 l
-4951 2712 l
-4939 2704 l
-4935 2693 l
-4935 2685 l
-S
-4973 2779 m
-4966 2776 l
-4962 2764 l
-4962 2753 l
-4966 2742 l
-4973 2738 l
-4981 2742 l
-4984 2749 l
-4988 2768 l
-4992 2776 l
-4999 2779 l
-5003 2779 l
-5011 2776 l
-5014 2764 l
-5014 2753 l
-5011 2742 l
-5003 2738 l
-S
-1 g
-Y
-5029.5 3617.3 m
-4920 3617 l
-4920 3847 l
-5029 3847 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4935 3674 m
-4988 3636 l
-4988 3692 l
-S
-4935 3674 m
-5014 3674 l
-S
-4935 3734 m
-4939 3723 l
-4951 3715 l
-4969 3711 l
-4981 3711 l
-4999 3715 l
-5011 3723 l
-5014 3734 l
-5014 3741 l
-5011 3753 l
-4999 3760 l
-4981 3764 l
-4969 3764 l
-4951 3760 l
-4939 3753 l
-4935 3741 l
-4935 3734 l
-S
-4973 3828 m
-4966 3824 l
-4962 3813 l
-4962 3801 l
-4966 3790 l
-4973 3786 l
-4981 3790 l
-4984 3798 l
-4988 3817 l
-4992 3824 l
-4999 3828 l
-5003 3828 l
-5011 3824 l
-5014 3813 l
-5014 3801 l
-5011 3790 l
-5003 3786 l
-S
-1 g
-Y
-5029.5 4870.5 m
-4920 4870 l
-4920 5100 l
-5029 5100 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4954 4893 m
-4951 4893 l
-4943 4897 l
-4939 4901 l
-4935 4908 l
-4935 4923 l
-4939 4931 l
-4943 4934 l
-4951 4938 l
-4958 4938 l
-4966 4934 l
-4977 4927 l
-5014 4889 l
-5014 4942 l
-S
-4935 4987 m
-4939 4976 l
-4951 4968 l
-4969 4964 l
-4981 4964 l
-4999 4968 l
-5011 4976 l
-5014 4987 l
-5014 4995 l
-5011 5006 l
-4999 5013 l
-4981 5017 l
-4969 5017 l
-4951 5013 l
-4939 5006 l
-4935 4995 l
-4935 4987 l
-S
-4973 5081 m
-4966 5077 l
-4962 5066 l
-4962 5055 l
-4966 5043 l
-4973 5040 l
-4981 5043 l
-4984 5051 l
-4988 5070 l
-4992 5077 l
-4999 5081 l
-5003 5081 l
-5011 5077 l
-5014 5066 l
-5014 5055 l
-5011 5043 l
-5003 5040 l
-S
-1 g
-Y
-2562.2 1200.1 m
-2453 1200 l
-2453 1741 l
-2562 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2468 1256 m
-2521 1219 l
-2521 1275 l
-S
-2468 1256 m
-2547 1256 l
-S
-2483 1305 m
-2480 1313 l
-2468 1324 l
-2547 1324 l
-S
-2495 1377 m
-2498 1373 l
-2502 1377 l
-2498 1381 l
-2495 1377 l
-S
-2540 1377 m
-2543 1373 l
-2547 1377 l
-2543 1381 l
-2540 1377 l
-S
-2468 1414 m
-2468 1456 l
-2498 1433 l
-2498 1444 l
-2502 1452 l
-2506 1456 l
-2517 1459 l
-2525 1459 l
-2536 1456 l
-2543 1448 l
-2547 1437 l
-2547 1426 l
-2543 1414 l
-2540 1411 l
-2532 1407 l
-S
-2468 1505 m
-2472 1493 l
-2483 1486 l
-2502 1482 l
-2513 1482 l
-2532 1486 l
-2543 1493 l
-2547 1505 l
-2547 1512 l
-2543 1523 l
-2532 1531 l
-2513 1535 l
-2502 1535 l
-2483 1531 l
-2472 1523 l
-2468 1512 l
-2468 1505 l
-S
-2495 1565 m
-2498 1561 l
-2502 1565 l
-2498 1568 l
-2495 1565 l
-S
-2540 1565 m
-2543 1561 l
-2547 1565 l
-2543 1568 l
-2540 1565 l
-S
-2468 1617 m
-2472 1606 l
-2483 1599 l
-2502 1595 l
-2513 1595 l
-2532 1599 l
-2543 1606 l
-2547 1617 l
-2547 1625 l
-2543 1636 l
-2532 1644 l
-2513 1647 l
-2502 1647 l
-2483 1644 l
-2472 1636 l
-2468 1625 l
-2468 1617 l
-S
-2468 1693 m
-2472 1681 l
-2483 1674 l
-2502 1670 l
-2513 1670 l
-2532 1674 l
-2543 1681 l
-2547 1693 l
-2547 1700 l
-2543 1711 l
-2532 1719 l
-2513 1723 l
-2502 1723 l
-2483 1719 l
-2472 1711 l
-2468 1700 l
-2468 1693 l
-S
-1 g
-Y
-3141.2 1388.1 m
-3032 1388 l
-3032 1741 l
-3141 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3066 1411 m
-3062 1411 l
-3055 1414 l
-3051 1418 l
-3047 1426 l
-3047 1441 l
-3051 1448 l
-3055 1452 l
-3062 1456 l
-3070 1456 l
-3077 1452 l
-3089 1444 l
-3126 1407 l
-3126 1459 l
-S
-3074 1531 m
-3085 1527 l
-3092 1520 l
-3096 1508 l
-3096 1505 l
-3092 1493 l
-3085 1486 l
-3074 1482 l
-3070 1482 l
-3059 1486 l
-3051 1493 l
-3047 1505 l
-3047 1508 l
-3051 1520 l
-3059 1527 l
-3074 1531 l
-3092 1531 l
-3111 1527 l
-3122 1520 l
-3126 1508 l
-3126 1501 l
-3122 1490 l
-3115 1486 l
-S
-3074 1565 m
-3077 1561 l
-3081 1565 l
-3077 1568 l
-3074 1565 l
-S
-3119 1565 m
-3122 1561 l
-3126 1565 l
-3122 1568 l
-3119 1565 l
-S
-3047 1617 m
-3051 1606 l
-3062 1599 l
-3081 1595 l
-3092 1595 l
-3111 1599 l
-3122 1606 l
-3126 1617 l
-3126 1625 l
-3122 1636 l
-3111 1644 l
-3092 1647 l
-3081 1647 l
-3062 1644 l
-3051 1636 l
-3047 1625 l
-3047 1617 l
-S
-3047 1693 m
-3051 1681 l
-3062 1674 l
-3081 1670 l
-3092 1670 l
-3111 1674 l
-3122 1681 l
-3126 1693 l
-3126 1700 l
-3122 1711 l
-3111 1719 l
-3092 1723 l
-3081 1723 l
-3062 1719 l
-3051 1711 l
-3047 1700 l
-3047 1693 l
-S
-1 g
-Y
-3720.2 1388.1 m
-3611 1388 l
-3611 1741 l
-3720 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3645 1411 m
-3641 1411 l
-3634 1414 l
-3630 1418 l
-3626 1426 l
-3626 1441 l
-3630 1448 l
-3634 1452 l
-3641 1456 l
-3649 1456 l
-3656 1452 l
-3668 1444 l
-3705 1407 l
-3705 1459 l
-S
-3626 1501 m
-3630 1490 l
-3637 1486 l
-3645 1486 l
-3653 1490 l
-3656 1497 l
-3660 1512 l
-3664 1523 l
-3671 1531 l
-3679 1535 l
-3690 1535 l
-3698 1531 l
-3701 1527 l
-3705 1516 l
-3705 1501 l
-3701 1490 l
-3698 1486 l
-3690 1482 l
-3679 1482 l
-3671 1486 l
-3664 1493 l
-3660 1505 l
-3656 1520 l
-3653 1527 l
-3645 1531 l
-3637 1531 l
-3630 1527 l
-3626 1516 l
-3626 1501 l
-S
-3653 1565 m
-3656 1561 l
-3660 1565 l
-3656 1568 l
-3653 1565 l
-S
-3698 1565 m
-3701 1561 l
-3705 1565 l
-3701 1568 l
-3698 1565 l
-S
-3626 1617 m
-3630 1606 l
-3641 1599 l
-3660 1595 l
-3671 1595 l
-3690 1599 l
-3701 1606 l
-3705 1617 l
-3705 1625 l
-3701 1636 l
-3690 1644 l
-3671 1647 l
-3660 1647 l
-3641 1644 l
-3630 1636 l
-3626 1625 l
-3626 1617 l
-S
-3626 1693 m
-3630 1681 l
-3641 1674 l
-3660 1670 l
-3671 1670 l
-3690 1674 l
-3701 1681 l
-3705 1693 l
-3705 1700 l
-3701 1711 l
-3690 1719 l
-3671 1723 l
-3660 1723 l
-3641 1719 l
-3630 1711 l
-3626 1700 l
-3626 1693 l
-S
-1 g
-Y
-4299.2 1388.1 m
-4190 1388 l
-4190 1741 l
-4299 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4224 1411 m
-4220 1411 l
-4213 1414 l
-4209 1418 l
-4205 1426 l
-4205 1441 l
-4209 1448 l
-4213 1452 l
-4220 1456 l
-4228 1456 l
-4235 1452 l
-4247 1444 l
-4284 1407 l
-4284 1459 l
-S
-4205 1535 m
-4284 1497 l
-S
-4205 1482 m
-4205 1535 l
-S
-4231 1565 m
-4235 1561 l
-4239 1565 l
-4235 1568 l
-4231 1565 l
-S
-4277 1565 m
-4280 1561 l
-4284 1565 l
-4280 1568 l
-4277 1565 l
-S
-4205 1617 m
-4209 1606 l
-4220 1599 l
-4239 1595 l
-4250 1595 l
-4269 1599 l
-4280 1606 l
-4284 1617 l
-4284 1625 l
-4280 1636 l
-4269 1644 l
-4250 1647 l
-4239 1647 l
-4220 1644 l
-4209 1636 l
-4205 1625 l
-4205 1617 l
-S
-4205 1693 m
-4209 1681 l
-4220 1674 l
-4239 1670 l
-4250 1670 l
-4269 1674 l
-4280 1681 l
-4284 1693 l
-4284 1700 l
-4280 1711 l
-4269 1719 l
-4250 1723 l
-4239 1723 l
-4220 1719 l
-4209 1711 l
-4205 1700 l
-4205 1693 l
-S
-1 g
-Y
-4878.1 1388.1 m
-4769 1388 l
-4769 1741 l
-4878 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4803 1411 m
-4799 1411 l
-4792 1414 l
-4788 1418 l
-4784 1426 l
-4784 1441 l
-4788 1448 l
-4792 1452 l
-4799 1456 l
-4807 1456 l
-4814 1452 l
-4826 1444 l
-4863 1407 l
-4863 1459 l
-S
-4795 1531 m
-4788 1527 l
-4784 1516 l
-4784 1508 l
-4788 1497 l
-4799 1490 l
-4818 1486 l
-4837 1486 l
-4852 1490 l
-4859 1497 l
-4863 1508 l
-4863 1512 l
-4859 1523 l
-4852 1531 l
-4841 1535 l
-4837 1535 l
-4826 1531 l
-4818 1523 l
-4814 1512 l
-4814 1508 l
-4818 1497 l
-4826 1490 l
-4837 1486 l
-S
-4810 1565 m
-4814 1561 l
-4818 1565 l
-4814 1568 l
-4810 1565 l
-S
-4856 1565 m
-4859 1561 l
-4863 1565 l
-4859 1568 l
-4856 1565 l
-S
-4784 1617 m
-4788 1606 l
-4799 1599 l
-4818 1595 l
-4829 1595 l
-4848 1599 l
-4859 1606 l
-4863 1617 l
-4863 1625 l
-4859 1636 l
-4848 1644 l
-4829 1647 l
-4818 1647 l
-4799 1644 l
-4788 1636 l
-4784 1625 l
-4784 1617 l
-S
-4784 1693 m
-4788 1681 l
-4799 1674 l
-4818 1670 l
-4829 1670 l
-4848 1674 l
-4859 1681 l
-4863 1693 l
-4863 1700 l
-4859 1711 l
-4848 1719 l
-4829 1723 l
-4818 1723 l
-4799 1719 l
-4788 1711 l
-4784 1700 l
-4784 1693 l
-S
-1 g
-Y
-1983.3 1388.1 m
-1874 1388 l
-1874 1741 l
-1983 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1889 1414 m
-1889 1456 l
-1919 1433 l
-1919 1444 l
-1923 1452 l
-1927 1456 l
-1938 1459 l
-1946 1459 l
-1957 1456 l
-1964 1448 l
-1968 1437 l
-1968 1426 l
-1964 1414 l
-1961 1411 l
-1953 1407 l
-S
-1904 1493 m
-1901 1501 l
-1889 1512 l
-1968 1512 l
-S
-1916 1565 m
-1919 1561 l
-1923 1565 l
-1919 1568 l
-1916 1565 l
-S
-1961 1565 m
-1964 1561 l
-1968 1565 l
-1964 1568 l
-1961 1565 l
-S
-1889 1617 m
-1893 1606 l
-1904 1599 l
-1923 1595 l
-1934 1595 l
-1953 1599 l
-1964 1606 l
-1968 1617 l
-1968 1625 l
-1964 1636 l
-1953 1644 l
-1934 1647 l
-1923 1647 l
-1904 1644 l
-1893 1636 l
-1889 1625 l
-1889 1617 l
-S
-1889 1693 m
-1893 1681 l
-1904 1674 l
-1923 1670 l
-1934 1670 l
-1953 1674 l
-1964 1681 l
-1968 1693 l
-1968 1700 l
-1964 1711 l
-1953 1719 l
-1934 1723 l
-1923 1723 l
-1904 1719 l
-1893 1711 l
-1889 1700 l
-1889 1693 l
-S
-1 g
-Y
-1404.3 1388.1 m
-1295 1388 l
-1295 1741 l
-1404 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1310 1414 m
-1310 1456 l
-1340 1433 l
-1340 1444 l
-1344 1452 l
-1348 1456 l
-1359 1459 l
-1367 1459 l
-1378 1456 l
-1385 1448 l
-1389 1437 l
-1389 1426 l
-1385 1414 l
-1382 1411 l
-1374 1407 l
-S
-1329 1486 m
-1325 1486 l
-1318 1490 l
-1314 1493 l
-1310 1501 l
-1310 1516 l
-1314 1523 l
-1318 1527 l
-1325 1531 l
-1333 1531 l
-1340 1527 l
-1352 1520 l
-1389 1482 l
-1389 1535 l
-S
-1337 1565 m
-1340 1561 l
-1344 1565 l
-1340 1568 l
-1337 1565 l
-S
-1382 1565 m
-1385 1561 l
-1389 1565 l
-1385 1568 l
-1382 1565 l
-S
-1310 1617 m
-1314 1606 l
-1325 1599 l
-1344 1595 l
-1355 1595 l
-1374 1599 l
-1385 1606 l
-1389 1617 l
-1389 1625 l
-1385 1636 l
-1374 1644 l
-1355 1647 l
-1344 1647 l
-1325 1644 l
-1314 1636 l
-1310 1625 l
-1310 1617 l
-S
-1310 1693 m
-1314 1681 l
-1325 1674 l
-1344 1670 l
-1355 1670 l
-1374 1674 l
-1385 1681 l
-1389 1693 l
-1389 1700 l
-1385 1711 l
-1374 1719 l
-1355 1723 l
-1344 1723 l
-1325 1719 l
-1314 1711 l
-1310 1700 l
-1310 1693 l
-S
-1 g
-Y
-825.3 1388.1 m
-716 1388 l
-716 1741 l
-825 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-731 1414 m
-731 1456 l
-761 1433 l
-761 1444 l
-765 1452 l
-769 1456 l
-780 1459 l
-788 1459 l
-799 1456 l
-807 1448 l
-810 1437 l
-810 1426 l
-807 1414 l
-803 1411 l
-795 1407 l
-S
-731 1490 m
-731 1531 l
-761 1508 l
-761 1520 l
-765 1527 l
-769 1531 l
-780 1535 l
-788 1535 l
-799 1531 l
-807 1523 l
-810 1512 l
-810 1501 l
-807 1490 l
-803 1486 l
-795 1482 l
-S
-758 1565 m
-761 1561 l
-765 1565 l
-761 1568 l
-758 1565 l
-S
-803 1565 m
-807 1561 l
-810 1565 l
-807 1568 l
-803 1565 l
-S
-731 1617 m
-735 1606 l
-746 1599 l
-765 1595 l
-776 1595 l
-795 1599 l
-807 1606 l
-810 1617 l
-810 1625 l
-807 1636 l
-795 1644 l
-776 1647 l
-765 1647 l
-746 1644 l
-735 1636 l
-731 1625 l
-731 1617 l
-S
-731 1693 m
-735 1681 l
-746 1674 l
-765 1670 l
-776 1670 l
-795 1674 l
-807 1681 l
-810 1693 l
-810 1700 l
-807 1711 l
-795 1719 l
-776 1723 l
-765 1723 l
-746 1719 l
-735 1711 l
-731 1700 l
-731 1693 l
-S
-1 g
-Y
-5319.8 3163 m
-5088 3163 l
-5088 4736 l
-5320 4736 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-5119 3194 m
-5251 3194 l
-S
-5119 3194 m
-5119 3251 l
-5126 3269 l
-5132 3276 l
-5144 3282 l
-5157 3282 l
-5169 3276 l
-5176 3269 l
-5182 3251 l
-5182 3194 l
-S
-5182 3238 m
-5251 3282 l
-S
-5119 3320 m
-5126 3326 l
-5119 3332 l
-5113 3326 l
-5119 3320 l
-S
-5163 3326 m
-5251 3326 l
-S
-5163 3445 m
-5263 3445 l
-5282 3439 l
-5288 3432 l
-5295 3420 l
-5295 3401 l
-5288 3389 l
-S
-5182 3445 m
-5169 3432 l
-5163 3420 l
-5163 3401 l
-5169 3389 l
-5182 3376 l
-5201 3370 l
-5213 3370 l
-5232 3376 l
-5245 3389 l
-5251 3401 l
-5251 3420 l
-5245 3432 l
-5232 3445 l
-S
-5119 3495 m
-5251 3495 l
-S
-5188 3495 m
-5169 3514 l
-5163 3526 l
-5163 3545 l
-5169 3558 l
-5188 3564 l
-5251 3564 l
-S
-5119 3620 m
-5226 3620 l
-5245 3627 l
-5251 3639 l
-5251 3652 l
-S
-5163 3602 m
-5163 3645 l
-S
-5163 3858 m
-5251 3858 l
-S
-5182 3858 m
-5169 3846 l
-5163 3833 l
-5163 3815 l
-5169 3802 l
-5182 3789 l
-5201 3783 l
-5213 3783 l
-5232 3789 l
-5245 3802 l
-5251 3815 l
-5251 3833 l
-5245 3846 l
-5232 3858 l
-S
-5182 3971 m
-5169 3965 l
-5163 3946 l
-5163 3927 l
-5169 3909 l
-5182 3902 l
-5194 3909 l
-5201 3921 l
-5207 3952 l
-5213 3965 l
-5226 3971 l
-5232 3971 l
-5245 3965 l
-5251 3946 l
-5251 3927 l
-5245 3909 l
-5232 3902 l
-S
-5182 4084 m
-5169 4071 l
-5163 4059 l
-5163 4040 l
-5169 4028 l
-5182 4015 l
-5201 4009 l
-5213 4009 l
-5232 4015 l
-5245 4028 l
-5251 4040 l
-5251 4059 l
-5245 4071 l
-5232 4084 l
-S
-5201 4122 m
-5201 4197 l
-5188 4197 l
-5176 4190 l
-5169 4184 l
-5163 4172 l
-5163 4153 l
-5169 4140 l
-5182 4128 l
-5201 4122 l
-5213 4122 l
-5232 4128 l
-5245 4140 l
-5251 4153 l
-5251 4172 l
-5245 4184 l
-5232 4197 l
-S
-5163 4241 m
-5251 4241 l
-S
-5188 4241 m
-5169 4259 l
-5163 4272 l
-5163 4291 l
-5169 4303 l
-5188 4309 l
-5251 4309 l
-S
-5182 4422 m
-5169 4416 l
-5163 4397 l
-5163 4378 l
-5169 4360 l
-5182 4353 l
-5194 4360 l
-5201 4372 l
-5207 4403 l
-5213 4416 l
-5226 4422 l
-5232 4422 l
-5245 4416 l
-5251 4397 l
-5251 4378 l
-5245 4360 l
-5232 4353 l
-S
-5119 4460 m
-5126 4466 l
-5119 4472 l
-5113 4466 l
-5119 4460 l
-S
-5163 4466 m
-5251 4466 l
-S
-5163 4541 m
-5169 4529 l
-5182 4516 l
-5201 4510 l
-5213 4510 l
-5232 4516 l
-5245 4529 l
-5251 4541 l
-5251 4560 l
-5245 4573 l
-5232 4585 l
-5213 4591 l
-5201 4591 l
-5182 4585 l
-5169 4573 l
-5163 4560 l
-5163 4541 l
-S
-5163 4635 m
-5251 4635 l
-S
-5188 4635 m
-5169 4654 l
-5163 4667 l
-5163 4685 l
-5169 4698 l
-5188 4704 l
-5251 4704 l
-S
-1 g
-Y
-3240.9 1170.4 m
-3241 982 l
-2170 982 l
-2170 1170 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3210 1014 m
-3210 1145 l
-S
-3210 1014 m
-3166 1014 l
-3147 1020 l
-3134 1033 l
-3128 1045 l
-3122 1064 l
-3122 1095 l
-3128 1114 l
-3134 1127 l
-3147 1139 l
-3166 1145 l
-3210 1145 l
-S
-3084 1095 m
-3009 1095 l
-3009 1083 l
-3015 1070 l
-3022 1064 l
-3034 1058 l
-3053 1058 l
-3066 1064 l
-3078 1076 l
-3084 1095 l
-3084 1108 l
-3078 1127 l
-3066 1139 l
-3053 1145 l
-3034 1145 l
-3022 1139 l
-3009 1127 l
-S
-2896 1076 m
-2909 1064 l
-2921 1058 l
-2940 1058 l
-2953 1064 l
-2965 1076 l
-2972 1095 l
-2972 1108 l
-2965 1127 l
-2953 1139 l
-2940 1145 l
-2921 1145 l
-2909 1139 l
-2896 1127 l
-S
-2853 1014 m
-2853 1145 l
-S
-2809 1014 m
-2802 1020 l
-2796 1014 l
-2802 1008 l
-2809 1014 l
-S
-2802 1058 m
-2802 1145 l
-S
-2752 1058 m
-2752 1145 l
-S
-2752 1083 m
-2733 1064 l
-2721 1058 l
-2702 1058 l
-2690 1064 l
-2683 1083 l
-2683 1145 l
-S
-2564 1058 m
-2564 1145 l
-S
-2564 1076 m
-2577 1064 l
-2589 1058 l
-2608 1058 l
-2621 1064 l
-2633 1076 l
-2639 1095 l
-2639 1108 l
-2633 1127 l
-2621 1139 l
-2608 1145 l
-2589 1145 l
-2577 1139 l
-2564 1127 l
-S
-2508 1014 m
-2508 1120 l
-2502 1139 l
-2489 1145 l
-2477 1145 l
-S
-2527 1058 m
-2483 1058 l
-S
-2445 1014 m
-2439 1020 l
-2433 1014 l
-2439 1008 l
-2445 1014 l
-S
-2439 1058 m
-2439 1145 l
-S
-2364 1058 m
-2376 1064 l
-2389 1076 l
-2395 1095 l
-2395 1108 l
-2389 1127 l
-2376 1139 l
-2364 1145 l
-2345 1145 l
-2333 1139 l
-2320 1127 l
-2314 1108 l
-2314 1095 l
-2320 1076 l
-2333 1064 l
-2345 1058 l
-2364 1058 l
-S
-2270 1058 m
-2270 1145 l
-S
-2270 1083 m
-2251 1064 l
-2239 1058 l
-2220 1058 l
-2207 1064 l
-2201 1083 l
-2201 1145 l
-S
-1 g
-Y
-371.2 1568.5 m
-186 1568 l
-186 6330 l
-371 6330 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-236 1669 m
-226 1664 l
-216 1654 l
-211 1644 l
-211 1624 l
-216 1614 l
-226 1604 l
-236 1599 l
-251 1594 l
-276 1594 l
-291 1599 l
-301 1604 l
-311 1614 l
-316 1624 l
-316 1644 l
-311 1654 l
-301 1664 l
-291 1669 l
-276 1669 l
-S
-276 1644 m
-276 1669 l
-S
-276 1699 m
-276 1759 l
-266 1759 l
-256 1754 l
-251 1749 l
-246 1739 l
-246 1724 l
-251 1714 l
-261 1704 l
-276 1699 l
-286 1699 l
-301 1704 l
-311 1714 l
-316 1724 l
-316 1739 l
-311 1749 l
-301 1759 l
-S
-246 1814 m
-251 1804 l
-261 1794 l
-276 1789 l
-286 1789 l
-301 1794 l
-311 1804 l
-316 1814 l
-316 1829 l
-311 1839 l
-301 1849 l
-286 1854 l
-276 1854 l
-261 1849 l
-251 1839 l
-246 1829 l
-246 1814 l
-S
-261 1944 m
-251 1934 l
-246 1924 l
-246 1909 l
-251 1899 l
-261 1889 l
-276 1884 l
-286 1884 l
-301 1889 l
-311 1899 l
-316 1909 l
-316 1924 l
-311 1934 l
-301 1944 l
-S
-276 1974 m
-276 2035 l
-266 2035 l
-256 2030 l
-251 2025 l
-246 2015 l
-246 2000 l
-251 1990 l
-261 1979 l
-276 1974 l
-286 1974 l
-301 1979 l
-311 1990 l
-316 2000 l
-316 2015 l
-311 2025 l
-301 2035 l
-S
-246 2070 m
-316 2070 l
-S
-266 2070 m
-251 2085 l
-246 2095 l
-246 2110 l
-251 2120 l
-266 2125 l
-316 2125 l
-S
-211 2170 m
-296 2170 l
-311 2175 l
-316 2185 l
-316 2195 l
-S
-246 2155 m
-246 2190 l
-S
-246 2225 m
-316 2225 l
-S
-276 2225 m
-261 2230 l
-251 2240 l
-246 2250 l
-246 2265 l
-S
-211 2285 m
-216 2290 l
-211 2295 l
-206 2290 l
-211 2285 l
-S
-246 2290 m
-316 2290 l
-S
-261 2385 m
-251 2375 l
-246 2365 l
-246 2350 l
-251 2340 l
-261 2330 l
-276 2325 l
-286 2325 l
-301 2330 l
-311 2340 l
-316 2350 l
-316 2365 l
-311 2375 l
-301 2385 l
-S
-246 2556 m
-316 2556 l
-S
-261 2556 m
-251 2546 l
-246 2536 l
-246 2521 l
-251 2511 l
-261 2501 l
-276 2496 l
-286 2496 l
-301 2501 l
-311 2511 l
-316 2521 l
-316 2536 l
-311 2546 l
-301 2556 l
-S
-246 2596 m
-351 2596 l
-S
-261 2596 m
-251 2606 l
-246 2616 l
-246 2631 l
-251 2641 l
-261 2651 l
-276 2656 l
-286 2656 l
-301 2651 l
-311 2641 l
-316 2631 l
-316 2616 l
-311 2606 l
-301 2596 l
-S
-246 2691 m
-351 2691 l
-S
-261 2691 m
-251 2701 l
-246 2711 l
-246 2726 l
-251 2736 l
-261 2746 l
-276 2751 l
-286 2751 l
-301 2746 l
-311 2736 l
-316 2726 l
-316 2711 l
-311 2701 l
-301 2691 l
-S
-246 2842 m
-316 2842 l
-S
-261 2842 m
-251 2832 l
-246 2822 l
-246 2806 l
-251 2796 l
-261 2786 l
-276 2781 l
-286 2781 l
-301 2786 l
-311 2796 l
-316 2806 l
-316 2822 l
-311 2832 l
-301 2842 l
-S
-246 2882 m
-316 2882 l
-S
-276 2882 m
-261 2887 l
-251 2897 l
-246 2907 l
-246 2922 l
-S
-276 2942 m
-276 3002 l
-266 3002 l
-256 2997 l
-251 2992 l
-246 2982 l
-246 2967 l
-251 2957 l
-261 2947 l
-276 2942 l
-286 2942 l
-301 2947 l
-311 2957 l
-316 2967 l
-316 2982 l
-311 2992 l
-301 3002 l
-S
-246 3037 m
-316 3037 l
-S
-266 3037 m
-251 3052 l
-246 3062 l
-246 3077 l
-251 3087 l
-266 3092 l
-316 3092 l
-S
-211 3137 m
-296 3137 l
-311 3142 l
-316 3152 l
-316 3162 l
-S
-246 3122 m
-246 3157 l
-S
-276 3268 m
-276 3328 l
-266 3328 l
-256 3323 l
-251 3318 l
-246 3308 l
-246 3293 l
-251 3283 l
-261 3273 l
-276 3268 l
-286 3268 l
-301 3273 l
-311 3283 l
-316 3293 l
-316 3308 l
-311 3318 l
-301 3328 l
-S
-246 3418 m
-351 3418 l
-S
-261 3418 m
-251 3408 l
-246 3398 l
-246 3383 l
-251 3373 l
-261 3363 l
-276 3358 l
-286 3358 l
-301 3363 l
-311 3373 l
-316 3383 l
-316 3398 l
-311 3408 l
-301 3418 l
-S
-246 3458 m
-296 3458 l
-311 3463 l
-316 3473 l
-316 3488 l
-311 3498 l
-296 3513 l
-S
-246 3513 m
-316 3513 l
-S
-246 3608 m
-316 3608 l
-S
-261 3608 m
-251 3598 l
-246 3588 l
-246 3573 l
-251 3563 l
-261 3553 l
-276 3548 l
-286 3548 l
-301 3553 l
-311 3563 l
-316 3573 l
-316 3588 l
-311 3598 l
-301 3608 l
-S
-211 3654 m
-296 3654 l
-311 3659 l
-316 3669 l
-316 3679 l
-S
-246 3638 m
-246 3674 l
-S
-246 3729 m
-251 3719 l
-261 3709 l
-276 3704 l
-286 3704 l
-301 3709 l
-311 3719 l
-316 3729 l
-316 3744 l
-311 3754 l
-301 3764 l
-286 3769 l
-276 3769 l
-261 3764 l
-251 3754 l
-246 3744 l
-246 3729 l
-S
-246 3804 m
-316 3804 l
-S
-276 3804 m
-261 3809 l
-251 3819 l
-246 3829 l
-246 3844 l
-S
-211 3864 m
-216 3869 l
-211 3874 l
-206 3869 l
-211 3864 l
-S
-246 3869 m
-316 3869 l
-S
-246 3964 m
-316 3964 l
-S
-261 3964 m
-251 3954 l
-246 3944 l
-246 3929 l
-251 3919 l
-261 3909 l
-276 3904 l
-286 3904 l
-301 3909 l
-311 3919 l
-316 3929 l
-316 3944 l
-311 3954 l
-301 3964 l
-S
-211 4004 m
-316 4004 l
-S
-261 4180 m
-251 4170 l
-246 4160 l
-246 4145 l
-251 4135 l
-261 4125 l
-276 4120 l
-286 4120 l
-301 4125 l
-311 4135 l
-316 4145 l
-316 4160 l
-311 4170 l
-301 4180 l
-S
-246 4235 m
-251 4225 l
-261 4215 l
-276 4210 l
-286 4210 l
-301 4215 l
-311 4225 l
-316 4235 l
-316 4250 l
-311 4260 l
-301 4270 l
-286 4275 l
-276 4275 l
-261 4270 l
-251 4260 l
-246 4250 l
-246 4235 l
-S
-246 4330 m
-251 4320 l
-261 4310 l
-276 4305 l
-286 4305 l
-301 4310 l
-311 4320 l
-316 4330 l
-316 4345 l
-311 4355 l
-301 4365 l
-286 4370 l
-276 4370 l
-261 4365 l
-251 4355 l
-246 4345 l
-246 4330 l
-S
-246 4405 m
-316 4405 l
-S
-276 4405 m
-261 4410 l
-251 4420 l
-246 4430 l
-246 4445 l
-S
-211 4526 m
-316 4526 l
-S
-261 4526 m
-251 4516 l
-246 4506 l
-246 4491 l
-251 4481 l
-261 4470 l
-276 4465 l
-286 4465 l
-301 4470 l
-311 4481 l
-316 4491 l
-316 4506 l
-311 4516 l
-301 4526 l
-S
-211 4561 m
-216 4566 l
-211 4571 l
-206 4566 l
-211 4561 l
-S
-246 4566 m
-316 4566 l
-S
-246 4606 m
-316 4606 l
-S
-266 4606 m
-251 4621 l
-246 4631 l
-246 4646 l
-251 4656 l
-266 4661 l
-316 4661 l
-S
-246 4756 m
-316 4756 l
-S
-261 4756 m
-251 4746 l
-246 4736 l
-246 4721 l
-251 4711 l
-261 4701 l
-276 4696 l
-286 4696 l
-301 4701 l
-311 4711 l
-316 4721 l
-316 4736 l
-311 4746 l
-301 4756 l
-S
-211 4801 m
-296 4801 l
-311 4806 l
-316 4816 l
-316 4826 l
-S
-246 4786 m
-246 4821 l
-S
-276 4851 m
-276 4912 l
-266 4912 l
-256 4907 l
-251 4902 l
-246 4892 l
-246 4876 l
-251 4866 l
-261 4856 l
-276 4851 l
-286 4851 l
-301 4856 l
-311 4866 l
-316 4876 l
-316 4892 l
-311 4902 l
-301 4912 l
-S
-261 4997 m
-251 4992 l
-246 4977 l
-246 4962 l
-251 4947 l
-261 4942 l
-271 4947 l
-276 4957 l
-281 4982 l
-286 4992 l
-296 4997 l
-301 4997 l
-311 4992 l
-316 4977 l
-316 4962 l
-311 4947 l
-301 4942 l
-S
-246 5037 m
-251 5032 l
-256 5037 l
-251 5042 l
-246 5037 l
-S
-311 5042 m
-316 5037 l
-311 5032 l
-306 5037 l
-311 5042 l
-321 5042 l
-331 5037 l
-336 5032 l
-S
-276 5157 m
-276 5217 l
-266 5217 l
-256 5212 l
-251 5207 l
-246 5197 l
-246 5182 l
-251 5172 l
-261 5162 l
-276 5157 l
-286 5157 l
-301 5162 l
-311 5172 l
-316 5182 l
-316 5197 l
-311 5207 l
-301 5217 l
-S
-246 5252 m
-351 5252 l
-S
-261 5252 m
-251 5262 l
-246 5272 l
-246 5287 l
-251 5297 l
-261 5308 l
-276 5313 l
-286 5313 l
-301 5308 l
-311 5297 l
-316 5287 l
-316 5272 l
-311 5262 l
-301 5252 l
-S
-246 5368 m
-251 5358 l
-261 5348 l
-276 5343 l
-286 5343 l
-301 5348 l
-311 5358 l
-316 5368 l
-316 5383 l
-311 5393 l
-301 5403 l
-286 5408 l
-276 5408 l
-261 5403 l
-251 5393 l
-246 5383 l
-246 5368 l
-S
-261 5498 m
-251 5488 l
-246 5478 l
-246 5463 l
-251 5453 l
-261 5443 l
-276 5438 l
-286 5438 l
-301 5443 l
-311 5453 l
-316 5463 l
-316 5478 l
-311 5488 l
-301 5498 l
-S
-211 5533 m
-316 5533 l
-S
-266 5533 m
-251 5548 l
-246 5558 l
-246 5573 l
-251 5583 l
-266 5588 l
-316 5588 l
-S
-211 5749 m
-291 5749 l
-306 5744 l
-311 5739 l
-316 5729 l
-316 5718 l
-311 5708 l
-306 5703 l
-291 5698 l
-281 5698 l
-S
-231 5799 m
-226 5809 l
-211 5824 l
-316 5824 l
-S
-246 5949 m
-261 5944 l
-271 5934 l
-276 5919 l
-276 5914 l
-271 5899 l
-261 5889 l
-246 5884 l
-241 5884 l
-226 5889 l
-216 5899 l
-211 5914 l
-211 5919 l
-216 5934 l
-226 5944 l
-246 5949 l
-271 5949 l
-296 5944 l
-311 5934 l
-316 5919 l
-316 5909 l
-311 5894 l
-301 5889 l
-S
-246 6049 m
-261 6044 l
-271 6034 l
-276 6019 l
-276 6014 l
-271 5999 l
-261 5989 l
-246 5984 l
-241 5984 l
-226 5989 l
-216 5999 l
-211 6014 l
-211 6019 l
-216 6034 l
-226 6044 l
-246 6049 l
-271 6049 l
-296 6044 l
-311 6034 l
-316 6019 l
-316 6009 l
-311 5994 l
-301 5989 l
-S
-211 6155 m
-316 6104 l
-S
-211 6084 m
-211 6155 l
-S
-306 6195 m
-311 6190 l
-316 6195 l
-311 6200 l
-306 6195 l
-S
-211 6295 m
-211 6245 l
-256 6240 l
-251 6245 l
-246 6260 l
-246 6275 l
-251 6290 l
-261 6300 l
-276 6305 l
-286 6305 l
-301 6300 l
-311 6290 l
-316 6275 l
-316 6260 l
-311 6245 l
-306 6240 l
-296 6235 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 1307 3396 a
- currentpoint grestore moveto
- 1307 3396 a 1596 3396 a
- gsave currentpoint currentpoint translate -90 neg rotate neg exch neg exch translate
- 1596
-3396 a @beginspecial 30 @llx 189 @lly 477 @urx 603 @ury
-1117 @rwi @setspecial
-%%BeginDocument: sun210_figures/frontb_bw.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 30 189 477 603
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:07:11
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3111 3017 l
-3112 3018 l
-3114 3019 l
-3116 3020 l
-3117 3021 l
-3119 3021 l
-3120 3022 l
-3142 3035 l
-3164 3048 l
-3186 3061 l
-3207 3075 l
-3229 3089 l
-3250 3103 l
-3270 3117 l
-3291 3132 l
-3311 3147 l
-3331 3163 l
-3351 3179 l
-3371 3195 l
-3390 3211 l
-3409 3228 l
-3428 3245 l
-3447 3262 l
-3465 3280 l
-3483 3297 l
-3501 3315 l
-3518 3334 l
-3536 3353 l
-3553 3371 l
-3569 3391 l
-3586 3410 l
-3602 3430 l
-3617 3450 l
-3633 3470 l
-3648 3490 l
-3663 3511 l
-3677 3532 l
-3691 3553 l
-3705 3574 l
-3719 3596 l
-3732 3618 l
-3745 3640 l
-3757 3662 l
-3769 3684 l
-3781 3707 l
-3792 3730 l
-3803 3753 l
-3814 3776 l
-3824 3800 l
-3834 3823 l
-3843 3847 l
-3852 3871 l
-3861 3895 l
-3869 3919 l
-3877 3944 l
-3884 3968 l
-3891 3993 l
-3898 4018 l
-3904 4043 l
-3910 4068 l
-3915 4094 l
-3920 4119 l
-3924 4144 l
-3928 4170 l
-3932 4196 l
-3935 4222 l
-3937 4248 l
-3939 4274 l
-3941 4300 l
-3942 4326 l
-3942 4352 l
-3943 4379 l
-3942 4405 l
-3941 4431 l
-3940 4458 l
-3938 4484 l
-3935 4511 l
-3932 4538 l
-3929 4564 l
-3925 4591 l
-3920 4617 l
-3915 4644 l
-3909 4671 l
-3903 4697 l
-3896 4724 l
-3888 4750 l
-3880 4776 l
-3872 4803 l
-3862 4829 l
-3852 4855 l
-3842 4881 l
-3831 4907 l
-3819 4933 l
-3807 4959 l
-3794 4984 l
-3780 5010 l
-3766 5035 l
-3751 5060 l
-3736 5085 l
-3720 5110 l
-3703 5134 l
-3685 5159 l
-3667 5183 l
-3648 5206 l
-3629 5230 l
-3609 5253 l
-3588 5276 l
-3566 5298 l
-3544 5320 l
-3521 5342 l
-3497 5363 l
-3473 5384 l
-3448 5405 l
-3422 5425 l
-3396 5444 l
-3369 5463 l
-3341 5482 l
-3312 5500 l
-3283 5517 l
-3254 5534 l
-3223 5551 l
-3192 5566 l
-3160 5581 l
-3128 5595 l
-3095 5609 l
-3061 5622 l
-3026 5634 l
-2992 5645 l
-2956 5656 l
-2920 5665 l
-2883 5674 l
-2846 5682 l
-2808 5689 l
-2770 5695 l
-2732 5700 l
-2693 5704 l
-2653 5707 l
-2613 5709 l
-2573 5710 l
-2533 5710 l
-2492 5709 l
-2451 5707 l
-2410 5703 l
-2368 5699 l
-2327 5693 l
-2285 5686 l
-2243 5678 l
-2202 5669 l
-2160 5658 l
-2119 5647 l
-2077 5634 l
-2036 5620 l
-1995 5605 l
-1992 5603 l
-1989 5602 l
-1986 5601 l
-1984 5600 l
-1981 5599 l
-1978 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3110 3018 l
-3110 3019 l
-3111 3021 l
-3112 3022 l
-3112 3023 l
-3113 3025 l
-3113 3026 l
-3122 3046 l
-3129 3067 l
-3137 3087 l
-3145 3108 l
-3152 3129 l
-3159 3150 l
-3166 3171 l
-3172 3192 l
-3179 3213 l
-3185 3234 l
-3191 3256 l
-3196 3277 l
-3202 3299 l
-3207 3320 l
-3212 3342 l
-3217 3364 l
-3222 3386 l
-3226 3408 l
-3230 3430 l
-3234 3452 l
-3238 3475 l
-3242 3497 l
-3245 3519 l
-3248 3542 l
-3251 3564 l
-3254 3587 l
-3257 3610 l
-3259 3632 l
-3261 3655 l
-3263 3678 l
-3265 3700 l
-3266 3723 l
-3268 3746 l
-3269 3769 l
-3270 3792 l
-3270 3815 l
-3271 3838 l
-3271 3861 l
-3271 3884 l
-3271 3907 l
-3271 3929 l
-3270 3952 l
-3269 3975 l
-3268 3998 l
-3267 4021 l
-3266 4044 l
-3264 4067 l
-3263 4090 l
-3261 4113 l
-3259 4136 l
-3256 4158 l
-3254 4181 l
-3251 4204 l
-3248 4227 l
-3245 4249 l
-3242 4272 l
-3238 4294 l
-3234 4317 l
-3230 4339 l
-3226 4362 l
-3222 4384 l
-3217 4406 l
-3212 4429 l
-3207 4451 l
-3202 4473 l
-3197 4495 l
-3191 4517 l
-3186 4538 l
-3180 4560 l
-3173 4582 l
-3167 4603 l
-3160 4625 l
-3154 4646 l
-3146 4667 l
-3139 4688 l
-3132 4709 l
-3124 4730 l
-3116 4751 l
-3108 4771 l
-3100 4792 l
-3092 4812 l
-3083 4832 l
-3074 4852 l
-3065 4872 l
-3055 4892 l
-3046 4912 l
-3036 4931 l
-3026 4950 l
-3016 4970 l
-3005 4989 l
-2995 5007 l
-2984 5026 l
-2973 5044 l
-2962 5063 l
-2950 5081 l
-2938 5099 l
-2926 5116 l
-2914 5134 l
-2902 5151 l
-2889 5168 l
-2876 5185 l
-2863 5202 l
-2849 5218 l
-2836 5234 l
-2822 5250 l
-2808 5266 l
-2793 5281 l
-2778 5296 l
-2764 5311 l
-2748 5326 l
-2733 5340 l
-2717 5355 l
-2701 5368 l
-2685 5382 l
-2668 5395 l
-2652 5408 l
-2634 5421 l
-2617 5433 l
-2599 5445 l
-2581 5457 l
-2563 5468 l
-2544 5479 l
-2526 5489 l
-2506 5499 l
-2487 5509 l
-2467 5519 l
-2447 5528 l
-2426 5536 l
-2405 5544 l
-2384 5552 l
-2362 5559 l
-2340 5566 l
-2318 5572 l
-2295 5578 l
-2272 5583 l
-2248 5587 l
-2224 5591 l
-2200 5595 l
-2175 5598 l
-2150 5600 l
-2124 5601 l
-2098 5602 l
-2072 5602 l
-2045 5602 l
-2017 5600 l
-1989 5598 l
-1987 5598 l
-1985 5598 l
-1983 5597 l
-1981 5597 l
-1979 5597 l
-1977 5597 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3109 3017 l
-3108 3019 l
-3107 3020 l
-3106 3021 l
-3106 3022 l
-3105 3023 l
-3104 3024 l
-3094 3041 l
-3083 3057 l
-3073 3074 l
-3062 3090 l
-3052 3107 l
-3041 3124 l
-3031 3141 l
-3020 3158 l
-3010 3175 l
-2999 3192 l
-2989 3210 l
-2978 3227 l
-2968 3245 l
-2957 3263 l
-2947 3280 l
-2936 3298 l
-2926 3316 l
-2915 3334 l
-2905 3352 l
-2894 3371 l
-2884 3389 l
-2873 3407 l
-2863 3426 l
-2852 3444 l
-2841 3463 l
-2831 3482 l
-2820 3500 l
-2810 3519 l
-2799 3538 l
-2789 3557 l
-2779 3576 l
-2768 3595 l
-2758 3614 l
-2747 3633 l
-2737 3653 l
-2726 3672 l
-2716 3691 l
-2706 3710 l
-2695 3730 l
-2685 3749 l
-2675 3769 l
-2664 3788 l
-2654 3808 l
-2644 3827 l
-2634 3847 l
-2624 3866 l
-2614 3886 l
-2603 3906 l
-2593 3925 l
-2583 3945 l
-2573 3965 l
-2563 3984 l
-2553 4004 l
-2544 4024 l
-2534 4043 l
-2524 4063 l
-2514 4083 l
-2504 4103 l
-2495 4122 l
-2485 4142 l
-2475 4162 l
-2466 4181 l
-2456 4201 l
-2447 4221 l
-2438 4240 l
-2428 4260 l
-2419 4279 l
-2410 4299 l
-2400 4319 l
-2391 4338 l
-2382 4357 l
-2373 4377 l
-2364 4396 l
-2355 4416 l
-2347 4435 l
-2338 4454 l
-2329 4473 l
-2321 4493 l
-2312 4512 l
-2304 4531 l
-2295 4550 l
-2287 4569 l
-2278 4588 l
-2270 4607 l
-2262 4625 l
-2254 4644 l
-2246 4663 l
-2238 4681 l
-2230 4700 l
-2223 4718 l
-2215 4737 l
-2208 4755 l
-2200 4773 l
-2193 4792 l
-2185 4810 l
-2178 4828 l
-2171 4846 l
-2164 4863 l
-2157 4881 l
-2150 4899 l
-2144 4916 l
-2137 4934 l
-2130 4951 l
-2124 4969 l
-2118 4986 l
-2111 5003 l
-2105 5020 l
-2099 5037 l
-2093 5053 l
-2088 5070 l
-2082 5087 l
-2076 5103 l
-2071 5119 l
-2066 5136 l
-2061 5152 l
-2055 5168 l
-2051 5184 l
-2046 5200 l
-2041 5215 l
-2036 5231 l
-2032 5246 l
-2028 5261 l
-2024 5277 l
-2020 5292 l
-2016 5307 l
-2012 5321 l
-2009 5336 l
-2005 5351 l
-2002 5365 l
-1999 5379 l
-1996 5393 l
-1993 5408 l
-1991 5421 l
-1988 5435 l
-1986 5449 l
-1984 5462 l
-1982 5476 l
-1980 5489 l
-1979 5502 l
-1978 5515 l
-1977 5528 l
-1976 5541 l
-1975 5553 l
-1975 5566 l
-1975 5578 l
-1975 5590 l
-1975 5591 l
-1975 5592 l
-1975 5593 l
-1975 5594 l
-1975 5595 l
-1975 5596 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3108 3016 l
-3106 3017 l
-3104 3017 l
-3103 3017 l
-3101 3017 l
-3099 3017 l
-3098 3018 l
-3075 3021 l
-3052 3024 l
-3029 3028 l
-3006 3032 l
-2983 3036 l
-2960 3041 l
-2937 3046 l
-2914 3051 l
-2892 3057 l
-2869 3063 l
-2846 3069 l
-2824 3075 l
-2801 3082 l
-2779 3089 l
-2757 3096 l
-2735 3104 l
-2712 3112 l
-2690 3120 l
-2668 3128 l
-2646 3137 l
-2625 3146 l
-2603 3155 l
-2581 3164 l
-2560 3174 l
-2538 3184 l
-2517 3194 l
-2496 3205 l
-2475 3216 l
-2454 3227 l
-2433 3238 l
-2412 3249 l
-2392 3261 l
-2371 3273 l
-2351 3285 l
-2331 3297 l
-2311 3310 l
-2291 3323 l
-2271 3336 l
-2252 3349 l
-2232 3363 l
-2213 3377 l
-2194 3391 l
-2175 3405 l
-2156 3419 l
-2138 3434 l
-2119 3449 l
-2101 3464 l
-2083 3479 l
-2065 3495 l
-2047 3510 l
-2030 3526 l
-2012 3542 l
-1995 3559 l
-1978 3575 l
-1962 3592 l
-1945 3609 l
-1929 3626 l
-1913 3643 l
-1897 3660 l
-1881 3678 l
-1866 3695 l
-1851 3713 l
-1836 3731 l
-1821 3750 l
-1807 3768 l
-1793 3787 l
-1779 3806 l
-1765 3824 l
-1752 3844 l
-1738 3863 l
-1725 3882 l
-1713 3902 l
-1700 3922 l
-1688 3941 l
-1677 3962 l
-1665 3982 l
-1654 4002 l
-1643 4022 l
-1632 4043 l
-1622 4064 l
-1612 4085 l
-1602 4106 l
-1593 4127 l
-1584 4148 l
-1575 4170 l
-1566 4191 l
-1558 4213 l
-1551 4235 l
-1543 4257 l
-1536 4279 l
-1530 4301 l
-1523 4323 l
-1517 4345 l
-1512 4368 l
-1507 4391 l
-1502 4413 l
-1497 4436 l
-1493 4459 l
-1490 4482 l
-1487 4505 l
-1484 4528 l
-1481 4551 l
-1480 4575 l
-1478 4598 l
-1477 4622 l
-1477 4645 l
-1477 4669 l
-1477 4693 l
-1478 4717 l
-1479 4741 l
-1481 4764 l
-1483 4788 l
-1486 4812 l
-1490 4837 l
-1494 4861 l
-1498 4885 l
-1504 4909 l
-1509 4933 l
-1515 4958 l
-1522 4982 l
-1530 5006 l
-1538 5030 l
-1547 5055 l
-1556 5079 l
-1566 5103 l
-1577 5127 l
-1588 5152 l
-1601 5176 l
-1613 5200 l
-1627 5224 l
-1641 5248 l
-1657 5272 l
-1673 5295 l
-1689 5319 l
-1707 5343 l
-1725 5366 l
-1745 5389 l
-1765 5412 l
-1786 5435 l
-1808 5457 l
-1831 5480 l
-1855 5502 l
-1880 5523 l
-1906 5545 l
-1933 5566 l
-1960 5586 l
-1962 5588 l
-1965 5589 l
-1967 5591 l
-1969 5592 l
-1971 5594 l
-1973 5595 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3108 3015 l
-3106 3014 l
-3104 3014 l
-3103 3013 l
-3101 3012 l
-3100 3011 l
-3098 3010 l
-3076 2998 l
-3053 2987 l
-3030 2975 l
-3007 2965 l
-2984 2954 l
-2961 2944 l
-2938 2934 l
-2914 2925 l
-2890 2916 l
-2866 2907 l
-2842 2899 l
-2818 2891 l
-2794 2883 l
-2769 2876 l
-2745 2869 l
-2720 2863 l
-2695 2857 l
-2671 2852 l
-2646 2846 l
-2620 2842 l
-2595 2837 l
-2570 2833 l
-2545 2830 l
-2519 2827 l
-2494 2824 l
-2468 2822 l
-2443 2820 l
-2417 2819 l
-2392 2818 l
-2366 2817 l
-2340 2817 l
-2315 2818 l
-2289 2818 l
-2263 2820 l
-2237 2821 l
-2211 2824 l
-2186 2826 l
-2160 2829 l
-2134 2833 l
-2109 2837 l
-2083 2842 l
-2057 2847 l
-2032 2852 l
-2006 2858 l
-1981 2865 l
-1955 2872 l
-1930 2879 l
-1905 2887 l
-1880 2896 l
-1855 2905 l
-1830 2914 l
-1805 2925 l
-1780 2935 l
-1756 2946 l
-1732 2958 l
-1707 2970 l
-1683 2983 l
-1660 2996 l
-1636 3010 l
-1612 3024 l
-1589 3039 l
-1566 3054 l
-1543 3070 l
-1521 3087 l
-1499 3104 l
-1477 3122 l
-1455 3140 l
-1433 3159 l
-1412 3178 l
-1391 3198 l
-1371 3218 l
-1351 3239 l
-1331 3261 l
-1312 3283 l
-1293 3306 l
-1274 3329 l
-1256 3353 l
-1238 3378 l
-1221 3403 l
-1204 3429 l
-1188 3455 l
-1172 3482 l
-1156 3509 l
-1142 3537 l
-1128 3565 l
-1114 3594 l
-1101 3624 l
-1089 3654 l
-1077 3685 l
-1066 3716 l
-1055 3748 l
-1046 3780 l
-1037 3812 l
-1028 3846 l
-1021 3879 l
-1014 3914 l
-1008 3948 l
-1003 3983 l
-999 4019 l
-996 4055 l
-993 4091 l
-992 4128 l
-991 4165 l
-992 4202 l
-993 4239 l
-996 4277 l
-999 4315 l
-1003 4354 l
-1009 4392 l
-1015 4431 l
-1023 4470 l
-1032 4509 l
-1041 4548 l
-1052 4587 l
-1065 4625 l
-1078 4664 l
-1092 4703 l
-1108 4742 l
-1124 4780 l
-1142 4818 l
-1161 4856 l
-1181 4894 l
-1202 4931 l
-1225 4968 l
-1248 5004 l
-1273 5040 l
-1298 5075 l
-1325 5110 l
-1353 5144 l
-1382 5178 l
-1412 5210 l
-1442 5242 l
-1474 5273 l
-1507 5304 l
-1540 5333 l
-1575 5361 l
-1610 5389 l
-1646 5415 l
-1682 5441 l
-1719 5465 l
-1757 5488 l
-1796 5511 l
-1835 5532 l
-1874 5552 l
-1914 5571 l
-1955 5588 l
-1957 5589 l
-1960 5591 l
-1963 5592 l
-1966 5593 l
-1969 5594 l
-1972 5595 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3109 3015 l
-3108 3013 l
-3107 3012 l
-3107 3010 l
-3106 3009 l
-3106 3008 l
-3105 3006 l
-3096 2986 l
-3088 2966 l
-3079 2947 l
-3069 2927 l
-3060 2908 l
-3050 2889 l
-3040 2870 l
-3030 2851 l
-3019 2832 l
-3008 2814 l
-2997 2796 l
-2986 2778 l
-2975 2760 l
-2963 2742 l
-2951 2725 l
-2939 2707 l
-2926 2690 l
-2913 2674 l
-2900 2657 l
-2887 2641 l
-2873 2624 l
-2859 2609 l
-2845 2593 l
-2831 2578 l
-2816 2562 l
-2801 2548 l
-2786 2533 l
-2770 2519 l
-2754 2505 l
-2738 2491 l
-2721 2478 l
-2704 2464 l
-2687 2452 l
-2669 2439 l
-2651 2427 l
-2633 2415 l
-2615 2404 l
-2596 2393 l
-2576 2382 l
-2557 2372 l
-2537 2362 l
-2516 2353 l
-2495 2344 l
-2474 2335 l
-2452 2327 l
-2430 2319 l
-2408 2312 l
-2385 2306 l
-2361 2300 l
-2337 2294 l
-2313 2289 l
-2288 2285 l
-2263 2281 l
-2237 2278 l
-2211 2275 l
-2184 2274 l
-2157 2273 l
-2129 2272 l
-2101 2273 l
-2072 2274 l
-2042 2277 l
-2012 2280 l
-1981 2284 l
-1950 2289 l
-1918 2295 l
-1886 2302 l
-1853 2311 l
-1819 2320 l
-1785 2331 l
-1750 2343 l
-1714 2357 l
-1679 2372 l
-1642 2388 l
-1605 2407 l
-1567 2426 l
-1529 2448 l
-1491 2472 l
-1452 2497 l
-1413 2525 l
-1373 2555 l
-1334 2587 l
-1294 2621 l
-1254 2658 l
-1214 2697 l
-1175 2738 l
-1136 2783 l
-1097 2830 l
-1060 2879 l
-1023 2932 l
-987 2987 l
-952 3045 l
-919 3105 l
-888 3169 l
-859 3234 l
-831 3302 l
-829 3307 l
-828 3312 l
-826 3317 l
-824 3322 l
-822 3327 l
-820 3332 l
-819 3337 l
-817 3342 l
-815 3347 l
-813 3352 l
-811 3357 l
-810 3362 l
-808 3367 l
-806 3373 l
-805 3378 l
-803 3383 l
-801 3388 l
-800 3393 l
-798 3398 l
-796 3403 l
-795 3408 l
-793 3414 l
-792 3419 l
-790 3424 l
-789 3429 l
-787 3434 l
-786 3440 l
-784 3445 l
-783 3450 l
-781 3455 l
-780 3461 l
-778 3466 l
-777 3471 l
-775 3476 l
-774 3482 l
-773 3487 l
-771 3492 l
-770 3498 l
-768 3503 l
-767 3508 l
-766 3514 l
-764 3519 l
-763 3524 l
-762 3530 l
-761 3535 l
-759 3540 l
-758 3546 l
-757 3551 l
-756 3557 l
-755 3562 l
-753 3567 l
-752 3573 l
-751 3578 l
-750 3584 l
-749 3589 l
-748 3595 l
-747 3600 l
-746 3606 l
-745 3611 l
-744 3616 l
-743 3622 l
-742 3627 l
-741 3633 l
-740 3638 l
-739 3644 l
-738 3649 l
-737 3655 l
-736 3660 l
-735 3666 l
-734 3672 l
-733 3677 l
-733 3683 l
-732 3688 l
-731 3694 l
-730 3699 l
-729 3705 l
-729 3710 l
-728 3716 l
-727 3722 l
-727 3727 l
-726 3733 l
-725 3738 l
-725 3744 l
-724 3750 l
-723 3755 l
-723 3761 l
-722 3766 l
-722 3772 l
-721 3778 l
-720 3783 l
-720 3789 l
-719 3794 l
-719 3800 l
-719 3806 l
-718 3811 l
-S
-718 3811 m
-718 3817 l
-717 3823 l
-717 3828 l
-716 3834 l
-716 3839 l
-716 3845 l
-715 3851 l
-715 3856 l
-715 3862 l
-715 3868 l
-714 3873 l
-714 3879 l
-714 3885 l
-714 3890 l
-713 3896 l
-713 3902 l
-713 3907 l
-713 3913 l
-713 3918 l
-713 3924 l
-713 3930 l
-713 3935 l
-713 3941 l
-713 3947 l
-713 3952 l
-713 3958 l
-713 3964 l
-713 3969 l
-713 3975 l
-713 3981 l
-713 3986 l
-713 3992 l
-713 3997 l
-713 4003 l
-713 4009 l
-713 4014 l
-714 4020 l
-714 4026 l
-714 4031 l
-714 4037 l
-715 4042 l
-715 4048 l
-715 4054 l
-715 4059 l
-716 4065 l
-716 4071 l
-716 4076 l
-717 4082 l
-717 4087 l
-718 4093 l
-718 4099 l
-718 4104 l
-719 4110 l
-719 4115 l
-720 4121 l
-720 4126 l
-721 4132 l
-721 4137 l
-722 4143 l
-723 4149 l
-723 4154 l
-724 4160 l
-724 4165 l
-725 4171 l
-726 4176 l
-726 4182 l
-727 4187 l
-728 4193 l
-728 4198 l
-729 4204 l
-730 4209 l
-731 4215 l
-731 4220 l
-732 4226 l
-733 4231 l
-734 4237 l
-735 4242 l
-736 4248 l
-737 4253 l
-737 4258 l
-738 4264 l
-739 4269 l
-740 4275 l
-741 4280 l
-742 4285 l
-743 4291 l
-744 4296 l
-745 4302 l
-746 4307 l
-747 4312 l
-748 4318 l
-749 4323 l
-750 4328 l
-751 4334 l
-753 4339 l
-754 4344 l
-755 4350 l
-756 4355 l
-757 4360 l
-758 4365 l
-760 4371 l
-761 4376 l
-762 4381 l
-763 4386 l
-765 4392 l
-766 4397 l
-767 4402 l
-768 4407 l
-770 4412 l
-771 4418 l
-772 4423 l
-774 4428 l
-775 4433 l
-777 4438 l
-778 4443 l
-799 4514 l
-822 4583 l
-848 4649 l
-875 4713 l
-905 4774 l
-936 4833 l
-968 4889 l
-1001 4943 l
-1036 4994 l
-1071 5042 l
-1107 5088 l
-1143 5131 l
-1180 5171 l
-1217 5210 l
-1254 5245 l
-1291 5279 l
-1328 5310 l
-1365 5340 l
-1401 5367 l
-1438 5392 l
-1474 5416 l
-1510 5438 l
-1545 5458 l
-1580 5476 l
-1614 5493 l
-1648 5508 l
-1682 5522 l
-1715 5535 l
-1747 5546 l
-1779 5556 l
-1811 5565 l
-1842 5573 l
-1872 5580 l
-1902 5586 l
-1932 5591 l
-1961 5595 l
-1963 5595 l
-1965 5595 l
-1967 5596 l
-1969 5596 l
-1971 5596 l
-1973 5596 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3110 3015 l
-3111 3014 l
-3111 3013 l
-3112 3012 l
-3113 3010 l
-3114 3009 l
-3114 3008 l
-3125 2992 l
-3135 2976 l
-3146 2960 l
-3156 2945 l
-3166 2929 l
-3176 2914 l
-3187 2899 l
-3197 2884 l
-3207 2869 l
-3217 2854 l
-3228 2839 l
-3238 2825 l
-3248 2811 l
-3258 2796 l
-3268 2782 l
-3278 2769 l
-3288 2755 l
-3298 2741 l
-3308 2728 l
-3318 2715 l
-3328 2702 l
-3338 2689 l
-3348 2676 l
-3358 2664 l
-3368 2652 l
-3378 2639 l
-3388 2628 l
-3398 2616 l
-3408 2604 l
-3417 2593 l
-3427 2582 l
-3437 2571 l
-3447 2560 l
-3457 2550 l
-3466 2539 l
-3476 2529 l
-3486 2519 l
-3496 2510 l
-3506 2500 l
-3515 2491 l
-3525 2482 l
-3535 2473 l
-3545 2465 l
-3555 2457 l
-3565 2449 l
-3574 2441 l
-3584 2434 l
-3594 2427 l
-3604 2420 l
-3614 2413 l
-3625 2407 l
-3635 2401 l
-3645 2395 l
-3656 2390 l
-3666 2385 l
-3677 2380 l
-3687 2376 l
-3698 2372 l
-3709 2368 l
-3721 2365 l
-3732 2362 l
-3744 2360 l
-3755 2358 l
-3768 2357 l
-3780 2356 l
-3793 2356 l
-3806 2356 l
-3819 2357 l
-3833 2359 l
-3848 2361 l
-3863 2364 l
-3878 2368 l
-3895 2373 l
-3912 2379 l
-3930 2386 l
-3949 2395 l
-3969 2405 l
-3991 2416 l
-4014 2430 l
-4038 2446 l
-4065 2465 l
-4093 2486 l
-4125 2511 l
-4159 2541 l
-4196 2576 l
-4238 2618 l
-4283 2669 l
-4287 2673 l
-4290 2677 l
-4294 2681 l
-4297 2685 l
-4301 2689 l
-4304 2693 l
-4308 2698 l
-4312 2702 l
-4315 2706 l
-4319 2711 l
-4323 2716 l
-4326 2720 l
-4330 2725 l
-4334 2730 l
-4338 2734 l
-4342 2739 l
-4346 2744 l
-4349 2749 l
-4353 2755 l
-4357 2760 l
-4361 2765 l
-4365 2770 l
-4369 2776 l
-4373 2781 l
-4378 2787 l
-4382 2793 l
-4386 2798 l
-4390 2804 l
-4394 2810 l
-4399 2816 l
-4403 2822 l
-4407 2829 l
-4411 2835 l
-4416 2841 l
-4420 2848 l
-4425 2855 l
-4429 2861 l
-4434 2868 l
-4438 2875 l
-4443 2882 l
-4447 2889 l
-4452 2897 l
-4456 2904 l
-4461 2912 l
-4466 2919 l
-4470 2927 l
-4475 2935 l
-4480 2943 l
-4485 2951 l
-4489 2960 l
-4494 2968 l
-4499 2977 l
-4504 2986 l
-4509 2994 l
-4514 3003 l
-4519 3013 l
-4524 3022 l
-4529 3032 l
-4534 3041 l
-4539 3051 l
-4544 3061 l
-4549 3071 l
-4554 3082 l
-4559 3092 l
-4564 3103 l
-4569 3114 l
-4574 3125 l
-4579 3136 l
-4584 3148 l
-4589 3159 l
-4594 3171 l
-4599 3183 l
-4605 3196 l
-4610 3208 l
-4615 3221 l
-4620 3234 l
-4625 3247 l
-4630 3261 l
-4635 3274 l
-4640 3288 l
-4645 3302 l
-4649 3317 l
-4654 3331 l
-4659 3346 l
-4664 3362 l
-4669 3377 l
-4673 3393 l
-4678 3409 l
-4682 3425 l
-4687 3441 l
-4691 3458 l
-4695 3475 l
-4700 3493 l
-4704 3510 l
-4708 3528 l
-4712 3547 l
-4715 3565 l
-4719 3584 l
-4723 3603 l
-4726 3623 l
-4729 3643 l
-4732 3663 l
-4735 3683 l
-S
-4735 3683 m
-4738 3704 l
-4741 3725 l
-4743 3747 l
-4745 3768 l
-4747 3790 l
-4749 3813 l
-4751 3835 l
-4752 3858 l
-4753 3881 l
-4754 3905 l
-4754 3929 l
-4755 3953 l
-4755 3978 l
-4754 4002 l
-4754 4027 l
-4753 4053 l
-4751 4078 l
-4750 4104 l
-4748 4130 l
-4745 4157 l
-4743 4183 l
-4740 4210 l
-4736 4237 l
-4732 4264 l
-4728 4292 l
-4723 4319 l
-4718 4347 l
-4713 4375 l
-4707 4403 l
-4701 4431 l
-4694 4459 l
-4686 4488 l
-4679 4516 l
-4671 4545 l
-4662 4573 l
-4653 4602 l
-4643 4630 l
-4633 4659 l
-4623 4687 l
-4612 4716 l
-4600 4744 l
-4589 4772 l
-4576 4800 l
-4564 4828 l
-4550 4856 l
-4537 4883 l
-4523 4911 l
-4509 4938 l
-4494 4965 l
-4479 4992 l
-4463 5018 l
-4447 5044 l
-4431 5070 l
-4414 5095 l
-4397 5121 l
-4380 5146 l
-4363 5170 l
-4345 5194 l
-4327 5218 l
-4309 5241 l
-4290 5264 l
-4271 5287 l
-4252 5309 l
-4233 5331 l
-4214 5352 l
-4195 5373 l
-4175 5393 l
-4155 5413 l
-4136 5433 l
-4116 5452 l
-4096 5471 l
-4076 5489 l
-4056 5507 l
-4036 5524 l
-4016 5541 l
-3996 5558 l
-3976 5574 l
-3956 5589 l
-3936 5604 l
-3916 5619 l
-3896 5634 l
-3876 5648 l
-3856 5661 l
-3837 5674 l
-3817 5687 l
-3798 5700 l
-3778 5712 l
-3759 5723 l
-3740 5735 l
-3721 5746 l
-3702 5756 l
-3684 5767 l
-3665 5777 l
-3647 5786 l
-3629 5795 l
-3611 5804 l
-3593 5813 l
-3575 5822 l
-3558 5830 l
-3540 5838 l
-3523 5845 l
-3506 5852 l
-3489 5859 l
-3473 5866 l
-3456 5873 l
-3440 5879 l
-3424 5885 l
-3408 5891 l
-3392 5897 l
-3377 5902 l
-3362 5907 l
-3346 5912 l
-3331 5917 l
-3317 5922 l
-3302 5926 l
-3288 5931 l
-3273 5935 l
-3259 5939 l
-3246 5943 l
-3232 5946 l
-3218 5950 l
-3205 5953 l
-3192 5956 l
-3179 5960 l
-3166 5963 l
-3153 5965 l
-3141 5968 l
-3128 5971 l
-3116 5973 l
-3104 5976 l
-3092 5978 l
-3081 5980 l
-3069 5982 l
-3058 5984 l
-3046 5986 l
-3035 5988 l
-3024 5989 l
-3014 5991 l
-3003 5993 l
-2992 5994 l
-2982 5995 l
-2972 5997 l
-2962 5998 l
-2952 5999 l
-2942 6000 l
-2932 6001 l
-2923 6002 l
-2913 6003 l
-2904 6004 l
-2895 6005 l
-2885 6006 l
-2876 6006 l
-2868 6007 l
-2859 6008 l
-2850 6008 l
-2842 6009 l
-2833 6009 l
-2825 6009 l
-2817 6010 l
-2809 6010 l
-2801 6010 l
-2793 6011 l
-2785 6011 l
-2777 6011 l
-2770 6011 l
-2762 6011 l
-2755 6011 l
-2747 6012 l
-2740 6012 l
-2733 6012 l
-2726 6012 l
-2719 6011 l
-2712 6011 l
-2705 6011 l
-2699 6011 l
-2692 6011 l
-2685 6011 l
-2679 6011 l
-2673 6010 l
-2666 6010 l
-2660 6010 l
-2654 6010 l
-2648 6009 l
-2642 6009 l
-2636 6009 l
-2630 6008 l
-2624 6008 l
-2618 6008 l
-2613 6007 l
-2607 6007 l
-2601 6006 l
-2596 6006 l
-2590 6006 l
-2585 6005 l
-2580 6005 l
-2575 6004 l
-2569 6004 l
-2564 6003 l
-2559 6003 l
-S
-2559 6003 m
-2554 6002 l
-2549 6002 l
-2544 6001 l
-2539 6001 l
-2535 6000 l
-2530 5999 l
-2468 5991 l
-2415 5981 l
-2369 5971 l
-2328 5960 l
-2292 5950 l
-2260 5939 l
-2232 5928 l
-2206 5918 l
-2184 5907 l
-2163 5896 l
-2144 5886 l
-2127 5875 l
-2112 5865 l
-2098 5855 l
-2085 5844 l
-2073 5834 l
-2063 5823 l
-2053 5813 l
-2044 5803 l
-2036 5792 l
-2028 5782 l
-2021 5771 l
-2015 5761 l
-2010 5750 l
-2004 5739 l
-2000 5728 l
-1996 5717 l
-1992 5706 l
-1989 5695 l
-1986 5684 l
-1983 5673 l
-1981 5661 l
-1979 5650 l
-1978 5638 l
-1977 5626 l
-1976 5615 l
-1975 5603 l
-1975 5602 l
-1975 5601 l
-1975 5600 l
-1975 5599 l
-1975 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3111 3016 l
-3113 3016 l
-3114 3016 l
-3116 3015 l
-3117 3015 l
-3119 3015 l
-3121 3015 l
-3144 3012 l
-3167 3010 l
-3190 3009 l
-3213 3007 l
-3236 3006 l
-3260 3005 l
-3283 3005 l
-3306 3005 l
-3329 3005 l
-3352 3006 l
-3375 3007 l
-3398 3008 l
-3421 3010 l
-3444 3012 l
-3467 3014 l
-3490 3017 l
-3513 3021 l
-3536 3024 l
-3559 3028 l
-3582 3033 l
-3604 3038 l
-3627 3043 l
-3650 3049 l
-3672 3055 l
-3695 3061 l
-3717 3068 l
-3739 3076 l
-3761 3084 l
-3784 3092 l
-3806 3101 l
-3827 3110 l
-3849 3120 l
-3871 3130 l
-3892 3141 l
-3913 3152 l
-3935 3163 l
-3956 3176 l
-3977 3188 l
-3997 3201 l
-4018 3215 l
-4038 3229 l
-4058 3244 l
-4078 3260 l
-4098 3276 l
-4117 3292 l
-4136 3309 l
-4155 3327 l
-4174 3345 l
-4193 3364 l
-4211 3384 l
-4228 3404 l
-4246 3425 l
-4263 3446 l
-4280 3469 l
-4296 3491 l
-4312 3515 l
-4328 3539 l
-4343 3564 l
-4358 3590 l
-4372 3616 l
-4386 3643 l
-4399 3671 l
-4412 3700 l
-4424 3729 l
-4435 3759 l
-4446 3790 l
-4456 3822 l
-4466 3855 l
-4475 3888 l
-4482 3922 l
-4490 3957 l
-4496 3993 l
-4501 4030 l
-4506 4067 l
-4509 4106 l
-4511 4145 l
-4513 4185 l
-4513 4225 l
-4512 4267 l
-4509 4309 l
-4506 4352 l
-4501 4395 l
-4494 4439 l
-4486 4484 l
-4477 4530 l
-4466 4575 l
-4454 4622 l
-4439 4669 l
-4423 4716 l
-4406 4763 l
-4386 4811 l
-4365 4858 l
-4342 4906 l
-4317 4954 l
-4290 5001 l
-4261 5048 l
-4230 5095 l
-4197 5141 l
-4162 5187 l
-4126 5232 l
-4087 5276 l
-4047 5319 l
-4005 5361 l
-3962 5402 l
-3917 5441 l
-3870 5479 l
-3822 5515 l
-3773 5550 l
-3722 5583 l
-3670 5614 l
-3618 5644 l
-3565 5671 l
-3511 5697 l
-3456 5720 l
-3401 5742 l
-3346 5761 l
-3291 5779 l
-3235 5794 l
-3180 5808 l
-3125 5819 l
-3070 5829 l
-3016 5836 l
-2962 5842 l
-2909 5846 l
-2856 5848 l
-2804 5849 l
-2753 5848 l
-2703 5845 l
-2654 5841 l
-2606 5835 l
-2559 5828 l
-2513 5820 l
-2468 5811 l
-2425 5800 l
-2382 5789 l
-2341 5776 l
-2300 5762 l
-2261 5748 l
-2223 5733 l
-2187 5717 l
-2151 5700 l
-2116 5682 l
-2083 5664 l
-2051 5646 l
-2020 5626 l
-1989 5607 l
-1987 5605 l
-1985 5604 l
-1983 5602 l
-1981 5601 l
-1979 5599 l
-1977 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3586 3410 m
-3585 3411 l
-3584 3412 l
-3583 3413 l
-3571 3424 l
-3559 3435 l
-3547 3445 l
-3533 3455 l
-3520 3464 l
-3506 3473 l
-3491 3481 l
-3477 3489 l
-3462 3496 l
-3446 3502 l
-3430 3509 l
-3414 3514 l
-3398 3519 l
-3381 3524 l
-3364 3528 l
-3347 3531 l
-3330 3534 l
-3312 3537 l
-3294 3539 l
-3276 3541 l
-3258 3542 l
-3240 3542 l
-3222 3542 l
-3204 3542 l
-3185 3541 l
-3167 3539 l
-3148 3537 l
-3129 3535 l
-3111 3532 l
-3092 3529 l
-3074 3525 l
-3055 3521 l
-3037 3516 l
-3018 3511 l
-3000 3506 l
-2982 3500 l
-2963 3494 l
-2945 3487 l
-2927 3480 l
-2910 3472 l
-2892 3464 l
-2875 3456 l
-2858 3447 l
-2841 3438 l
-2824 3429 l
-2808 3419 l
-2791 3409 l
-2775 3398 l
-2760 3388 l
-2744 3377 l
-2729 3365 l
-2715 3353 l
-2700 3341 l
-2686 3329 l
-2673 3316 l
-2660 3303 l
-2647 3290 l
-2634 3277 l
-2622 3263 l
-2611 3249 l
-2600 3235 l
-2589 3220 l
-2579 3206 l
-2570 3191 l
-2561 3176 l
-2552 3161 l
-2544 3145 l
-2537 3130 l
-2530 3114 l
-2524 3098 l
-2518 3082 l
-2513 3066 l
-2509 3050 l
-2505 3034 l
-2502 3018 l
-2500 3002 l
-2498 2985 l
-2497 2969 l
-2496 2953 l
-2497 2937 l
-2498 2920 l
-2500 2904 l
-2502 2888 l
-2506 2872 l
-2510 2856 l
-2514 2841 l
-2520 2825 l
-2526 2810 l
-2534 2795 l
-2542 2780 l
-2550 2765 l
-2560 2751 l
-2570 2737 l
-2581 2723 l
-2593 2709 l
-2606 2697 l
-2620 2684 l
-2634 2672 l
-2649 2660 l
-2665 2649 l
-2681 2638 l
-2699 2628 l
-2717 2619 l
-2735 2610 l
-2755 2602 l
-2774 2594 l
-2795 2587 l
-2816 2581 l
-2838 2576 l
-2860 2571 l
-2883 2567 l
-2906 2564 l
-2930 2562 l
-2954 2561 l
-2978 2560 l
-3003 2561 l
-3028 2562 l
-3053 2564 l
-3078 2567 l
-3103 2571 l
-3128 2576 l
-3154 2581 l
-3179 2588 l
-3204 2596 l
-3229 2604 l
-3253 2613 l
-3277 2623 l
-3301 2634 l
-3325 2646 l
-3348 2658 l
-3371 2671 l
-3393 2685 l
-3414 2700 l
-3435 2715 l
-3455 2730 l
-3475 2747 l
-3493 2764 l
-3511 2781 l
-3529 2799 l
-3545 2817 l
-3560 2835 l
-3575 2854 l
-3589 2873 l
-3602 2893 l
-3614 2912 l
-3625 2932 l
-3635 2951 l
-3644 2971 l
-3652 2991 l
-3659 3011 l
-3666 3031 l
-3671 3050 l
-3676 3070 l
-3679 3089 l
-3682 3109 l
-3684 3128 l
-3685 3146 l
-3685 3165 l
-3684 3183 l
-3683 3201 l
-3681 3219 l
-3677 3236 l
-3674 3253 l
-3669 3269 l
-3664 3285 l
-3657 3301 l
-3651 3316 l
-3643 3331 l
-3635 3346 l
-3626 3359 l
-3617 3373 l
-3607 3386 l
-3597 3398 l
-3586 3410 l
-S
-3881 3956 m
-3879 3957 l
-3877 3958 l
-3875 3960 l
-3851 3975 l
-3826 3989 l
-3800 4003 l
-3774 4016 l
-3748 4027 l
-3721 4038 l
-3693 4048 l
-3665 4057 l
-3637 4065 l
-3609 4073 l
-3580 4079 l
-3551 4085 l
-3521 4090 l
-3492 4094 l
-3462 4097 l
-3432 4100 l
-3402 4102 l
-3371 4103 l
-3341 4104 l
-3310 4103 l
-3279 4102 l
-3248 4101 l
-3217 4098 l
-3186 4095 l
-3155 4091 l
-3124 4087 l
-3093 4082 l
-3061 4076 l
-3030 4070 l
-2999 4063 l
-2968 4056 l
-2937 4047 l
-2907 4039 l
-2876 4029 l
-2845 4019 l
-2815 4009 l
-2785 3998 l
-2755 3986 l
-2725 3974 l
-2695 3962 l
-2666 3948 l
-2637 3935 l
-2608 3920 l
-2579 3906 l
-2551 3890 l
-2523 3875 l
-2495 3858 l
-2468 3842 l
-2441 3824 l
-2415 3807 l
-2389 3789 l
-2363 3770 l
-2338 3751 l
-2313 3731 l
-2288 3711 l
-2265 3691 l
-2241 3670 l
-2219 3649 l
-2196 3627 l
-2175 3605 l
-2154 3583 l
-2133 3560 l
-2113 3537 l
-2094 3514 l
-2076 3490 l
-2058 3465 l
-2041 3441 l
-2025 3416 l
-2009 3390 l
-1994 3365 l
-1981 3339 l
-1967 3313 l
-1955 3286 l
-1944 3259 l
-1934 3232 l
-1924 3205 l
-1916 3177 l
-1908 3149 l
-1902 3121 l
-1897 3092 l
-1892 3064 l
-1889 3035 l
-1888 3006 l
-1887 2977 l
-1888 2947 l
-1889 2918 l
-1893 2888 l
-1897 2859 l
-1903 2829 l
-1911 2799 l
-1920 2770 l
-1930 2740 l
-1943 2710 l
-1956 2681 l
-1972 2652 l
-1989 2623 l
-2008 2594 l
-2029 2565 l
-2051 2537 l
-2076 2510 l
-2102 2483 l
-2131 2456 l
-2161 2430 l
-2194 2405 l
-2228 2381 l
-2265 2358 l
-2304 2336 l
-2345 2316 l
-2388 2296 l
-2432 2278 l
-2479 2262 l
-2528 2248 l
-2579 2235 l
-2632 2225 l
-2686 2216 l
-2742 2210 l
-2799 2206 l
-2857 2205 l
-2917 2207 l
-2977 2211 l
-3038 2218 l
-3100 2228 l
-3161 2241 l
-3223 2256 l
-3284 2275 l
-3344 2296 l
-3404 2320 l
-3463 2347 l
-3520 2376 l
-3575 2408 l
-3629 2442 l
-3681 2478 l
-3730 2516 l
-3777 2556 l
-3822 2597 l
-3864 2640 l
-3904 2683 l
-3941 2728 l
-3975 2773 l
-4006 2818 l
-4035 2864 l
-4061 2910 l
-4084 2956 l
-4104 3002 l
-4122 3047 l
-4138 3092 l
-4151 3136 l
-4162 3180 l
-4170 3223 l
-4177 3265 l
-4181 3306 l
-4183 3346 l
-4183 3385 l
-4182 3423 l
-4179 3460 l
-4174 3496 l
-4167 3531 l
-4160 3565 l
-4150 3598 l
-4139 3629 l
-4127 3660 l
-4114 3689 l
-4100 3717 l
-4084 3744 l
-4068 3770 l
-4050 3795 l
-4032 3819 l
-4013 3842 l
-3993 3863 l
-3972 3884 l
-3950 3903 l
-3928 3922 l
-3904 3939 l
-3881 3956 l
-S
-3924 4591 m
-3922 4592 l
-3920 4593 l
-3917 4593 l
-3884 4604 l
-3851 4614 l
-3817 4623 l
-3783 4631 l
-3749 4638 l
-3715 4645 l
-3680 4650 l
-3645 4655 l
-3609 4659 l
-3574 4662 l
-3538 4664 l
-3502 4666 l
-3466 4667 l
-3430 4667 l
-3394 4666 l
-3358 4665 l
-3321 4663 l
-3284 4661 l
-3248 4657 l
-3211 4653 l
-3174 4649 l
-3137 4643 l
-3100 4638 l
-3063 4631 l
-3026 4624 l
-2989 4616 l
-2952 4608 l
-2916 4599 l
-2879 4590 l
-2842 4580 l
-2805 4569 l
-2769 4558 l
-2732 4547 l
-2696 4534 l
-2659 4522 l
-2623 4509 l
-2587 4495 l
-2552 4481 l
-2516 4466 l
-2481 4451 l
-2445 4435 l
-2411 4419 l
-2376 4402 l
-2341 4385 l
-2307 4367 l
-2273 4349 l
-2240 4331 l
-2206 4312 l
-2174 4292 l
-2141 4272 l
-2109 4252 l
-2077 4231 l
-2045 4210 l
-2014 4188 l
-1984 4166 l
-1953 4144 l
-1924 4121 l
-1894 4098 l
-1865 4074 l
-1837 4050 l
-1809 4026 l
-1782 4001 l
-1755 3976 l
-1729 3950 l
-1703 3925 l
-1678 3898 l
-1654 3871 l
-1630 3844 l
-1607 3817 l
-1584 3789 l
-1563 3761 l
-1542 3732 l
-1521 3703 l
-1502 3674 l
-1483 3644 l
-1465 3614 l
-1448 3584 l
-1432 3553 l
-1417 3522 l
-1402 3490 l
-1389 3458 l
-1376 3426 l
-1365 3393 l
-1354 3360 l
-1345 3326 l
-1337 3292 l
-1330 3257 l
-1325 3222 l
-1320 3187 l
-1317 3151 l
-1316 3114 l
-1316 3078 l
-1317 3040 l
-1321 3002 l
-1326 2964 l
-1332 2925 l
-1341 2886 l
-1352 2845 l
-1365 2805 l
-1381 2764 l
-1399 2722 l
-1419 2680 l
-1443 2637 l
-1469 2594 l
-1499 2551 l
-1533 2507 l
-1570 2462 l
-1573 2459 l
-1576 2456 l
-1579 2453 l
-1582 2450 l
-1585 2447 l
-1588 2443 l
-1590 2440 l
-1593 2437 l
-1596 2434 l
-1599 2431 l
-1603 2427 l
-1606 2424 l
-1609 2421 l
-1612 2418 l
-1615 2415 l
-1618 2412 l
-1621 2408 l
-1624 2405 l
-1628 2402 l
-1631 2399 l
-1634 2396 l
-1638 2393 l
-1641 2389 l
-1644 2386 l
-1648 2383 l
-1651 2380 l
-1654 2377 l
-1658 2374 l
-1661 2370 l
-1665 2367 l
-1668 2364 l
-1672 2361 l
-1675 2358 l
-1679 2355 l
-1683 2351 l
-1686 2348 l
-1690 2345 l
-1694 2342 l
-1697 2339 l
-1701 2336 l
-1705 2332 l
-1709 2329 l
-1712 2326 l
-1716 2323 l
-1720 2320 l
-1724 2317 l
-1728 2314 l
-1732 2310 l
-1736 2307 l
-1740 2304 l
-1744 2301 l
-1748 2298 l
-1752 2295 l
-1756 2292 l
-1760 2289 l
-1765 2286 l
-1769 2282 l
-1773 2279 l
-1777 2276 l
-1782 2273 l
-1786 2270 l
-1790 2267 l
-1795 2264 l
-1799 2261 l
-1803 2258 l
-1808 2255 l
-1812 2252 l
-1817 2249 l
-1822 2245 l
-1826 2242 l
-1831 2239 l
-1835 2236 l
-1840 2233 l
-1845 2230 l
-1849 2227 l
-1854 2224 l
-1859 2221 l
-1864 2218 l
-1869 2215 l
-1874 2212 l
-1879 2209 l
-1883 2206 l
-1888 2203 l
-1893 2200 l
-1899 2198 l
-1904 2195 l
-1909 2192 l
-1914 2189 l
-1919 2186 l
-S
-1919 2186 m
-1924 2183 l
-1930 2180 l
-1935 2177 l
-1940 2174 l
-1945 2171 l
-1951 2169 l
-1956 2166 l
-1962 2163 l
-1967 2160 l
-1973 2157 l
-1978 2154 l
-1984 2152 l
-1989 2149 l
-1995 2146 l
-2001 2143 l
-2006 2141 l
-2012 2138 l
-2018 2135 l
-2024 2132 l
-2030 2130 l
-2036 2127 l
-2041 2124 l
-2047 2122 l
-2053 2119 l
-2059 2116 l
-2065 2114 l
-2072 2111 l
-2078 2109 l
-2084 2106 l
-2090 2103 l
-2096 2101 l
-2103 2098 l
-2109 2096 l
-2115 2093 l
-2122 2091 l
-2128 2088 l
-2135 2086 l
-2141 2084 l
-2148 2081 l
-2154 2079 l
-2161 2076 l
-2167 2074 l
-2174 2072 l
-2181 2069 l
-2187 2067 l
-2194 2065 l
-2201 2063 l
-2208 2060 l
-2215 2058 l
-2222 2056 l
-2229 2054 l
-2236 2052 l
-2243 2050 l
-2250 2048 l
-2257 2045 l
-2264 2043 l
-2271 2041 l
-2279 2039 l
-2286 2037 l
-2293 2035 l
-2300 2034 l
-2308 2032 l
-2315 2030 l
-2323 2028 l
-2330 2026 l
-2338 2024 l
-2345 2022 l
-2353 2021 l
-2360 2019 l
-2368 2017 l
-2376 2016 l
-2383 2014 l
-2391 2012 l
-2399 2011 l
-2407 2009 l
-2415 2008 l
-2423 2006 l
-2431 2005 l
-2439 2004 l
-2447 2002 l
-2455 2001 l
-2463 1999 l
-2471 1998 l
-2479 1997 l
-2487 1996 l
-2495 1995 l
-2504 1993 l
-2512 1992 l
-2520 1991 l
-2529 1990 l
-2537 1989 l
-2545 1988 l
-2554 1987 l
-2562 1986 l
-2571 1986 l
-2579 1985 l
-2588 1984 l
-2597 1983 l
-2605 1983 l
-2614 1982 l
-2623 1981 l
-2631 1981 l
-2640 1980 l
-2649 1980 l
-2658 1979 l
-2667 1979 l
-2676 1978 l
-2684 1978 l
-2693 1978 l
-2702 1978 l
-2711 1977 l
-2720 1977 l
-2729 1977 l
-2739 1977 l
-2748 1977 l
-2757 1977 l
-2766 1977 l
-2775 1977 l
-2784 1977 l
-2794 1978 l
-2803 1978 l
-2812 1978 l
-2821 1979 l
-2831 1979 l
-2840 1979 l
-2849 1980 l
-2859 1980 l
-2868 1981 l
-2878 1982 l
-2887 1982 l
-2896 1983 l
-2906 1984 l
-2915 1985 l
-2925 1986 l
-2935 1987 l
-2944 1988 l
-2954 1989 l
-2963 1990 l
-2973 1991 l
-2982 1992 l
-2992 1993 l
-3002 1995 l
-3011 1996 l
-3021 1998 l
-3031 1999 l
-3040 2001 l
-3050 2002 l
-3060 2004 l
-3069 2006 l
-3079 2007 l
-3089 2009 l
-3098 2011 l
-3108 2013 l
-3118 2015 l
-3128 2017 l
-3137 2019 l
-3147 2021 l
-3157 2023 l
-3167 2026 l
-3176 2028 l
-3186 2030 l
-3196 2033 l
-3206 2035 l
-3215 2038 l
-3225 2040 l
-3235 2043 l
-3245 2045 l
-3254 2048 l
-3264 2051 l
-3274 2054 l
-3284 2057 l
-3293 2060 l
-3303 2063 l
-3313 2066 l
-3322 2069 l
-3332 2072 l
-3342 2075 l
-3351 2079 l
-3361 2082 l
-3371 2085 l
-3380 2089 l
-3390 2092 l
-3399 2096 l
-3409 2100 l
-3419 2103 l
-3428 2107 l
-3438 2111 l
-3447 2115 l
-3457 2118 l
-3466 2122 l
-3476 2126 l
-3485 2130 l
-3494 2135 l
-3504 2139 l
-3513 2143 l
-3522 2147 l
-3532 2151 l
-3541 2156 l
-3550 2160 l
-S
-3550 2160 m
-3559 2165 l
-3569 2169 l
-3578 2174 l
-3587 2178 l
-3596 2183 l
-3605 2187 l
-3614 2192 l
-3623 2197 l
-3632 2202 l
-3641 2207 l
-3650 2212 l
-3659 2217 l
-3668 2222 l
-3677 2227 l
-3686 2232 l
-3694 2237 l
-3703 2242 l
-3712 2247 l
-3720 2252 l
-3729 2258 l
-3738 2263 l
-3746 2268 l
-3755 2274 l
-3763 2279 l
-3772 2285 l
-3780 2290 l
-3788 2296 l
-3797 2302 l
-3805 2307 l
-3813 2313 l
-3821 2319 l
-3829 2324 l
-3838 2330 l
-3846 2336 l
-3854 2342 l
-3862 2348 l
-3869 2354 l
-3877 2360 l
-3885 2366 l
-3893 2372 l
-3901 2378 l
-3908 2384 l
-3916 2390 l
-3924 2396 l
-3931 2402 l
-3939 2408 l
-3946 2415 l
-3954 2421 l
-3961 2427 l
-3968 2433 l
-3976 2440 l
-3983 2446 l
-3990 2452 l
-3997 2459 l
-4004 2465 l
-4011 2472 l
-4018 2478 l
-4025 2485 l
-4032 2491 l
-4039 2498 l
-4045 2504 l
-4052 2511 l
-4059 2517 l
-4065 2524 l
-4072 2530 l
-4079 2537 l
-4085 2544 l
-4091 2550 l
-4098 2557 l
-4104 2564 l
-4110 2570 l
-4117 2577 l
-4123 2584 l
-4129 2590 l
-4135 2597 l
-4141 2604 l
-4147 2611 l
-4153 2617 l
-4159 2624 l
-4165 2631 l
-4170 2638 l
-4176 2645 l
-4182 2651 l
-4187 2658 l
-4193 2665 l
-4198 2672 l
-4204 2679 l
-4209 2686 l
-4215 2692 l
-4220 2699 l
-4225 2706 l
-4230 2713 l
-4235 2720 l
-4241 2727 l
-4246 2734 l
-4251 2740 l
-4256 2747 l
-4260 2754 l
-4265 2761 l
-4270 2768 l
-4275 2775 l
-4280 2782 l
-4284 2788 l
-4289 2795 l
-4293 2802 l
-4298 2809 l
-4302 2816 l
-4307 2823 l
-4311 2829 l
-4316 2836 l
-4320 2843 l
-4324 2850 l
-4328 2857 l
-4332 2864 l
-4337 2870 l
-4341 2877 l
-4345 2884 l
-4349 2891 l
-4352 2898 l
-4356 2904 l
-4360 2911 l
-4364 2918 l
-4368 2925 l
-4371 2931 l
-4375 2938 l
-4379 2945 l
-4382 2952 l
-4386 2958 l
-4389 2965 l
-4393 2972 l
-4396 2978 l
-4399 2985 l
-4403 2992 l
-4406 2998 l
-4409 3005 l
-4412 3011 l
-4415 3018 l
-4418 3025 l
-4421 3031 l
-4425 3038 l
-4427 3044 l
-4430 3051 l
-4433 3057 l
-4436 3064 l
-4439 3070 l
-4442 3077 l
-4444 3083 l
-4447 3090 l
-4450 3096 l
-4452 3103 l
-4455 3109 l
-4458 3115 l
-4460 3122 l
-4463 3128 l
-4465 3135 l
-4467 3141 l
-4470 3147 l
-4472 3154 l
-4474 3160 l
-4477 3166 l
-4479 3172 l
-4481 3179 l
-4483 3185 l
-4485 3191 l
-4487 3197 l
-4489 3203 l
-4491 3210 l
-4493 3216 l
-4495 3222 l
-4497 3228 l
-4499 3234 l
-4501 3240 l
-4503 3246 l
-4505 3252 l
-4506 3258 l
-4508 3264 l
-4510 3270 l
-4512 3276 l
-4513 3282 l
-4515 3288 l
-4516 3294 l
-4518 3300 l
-4519 3306 l
-4521 3312 l
-4522 3318 l
-4524 3323 l
-4525 3329 l
-4527 3335 l
-4528 3341 l
-4529 3347 l
-4530 3352 l
-4532 3358 l
-4533 3364 l
-4534 3369 l
-4535 3375 l
-4536 3381 l
-4538 3386 l
-4539 3392 l
-4540 3397 l
-S
-4540 3397 m
-4541 3403 l
-4542 3409 l
-4543 3414 l
-4544 3420 l
-4545 3425 l
-4546 3431 l
-4546 3436 l
-4547 3442 l
-4548 3447 l
-4549 3452 l
-4550 3458 l
-4551 3463 l
-4551 3469 l
-4552 3474 l
-4553 3479 l
-4553 3484 l
-4554 3490 l
-4555 3495 l
-4555 3500 l
-4556 3505 l
-4556 3511 l
-4557 3516 l
-4558 3521 l
-4558 3526 l
-4559 3531 l
-4559 3536 l
-4559 3542 l
-4560 3547 l
-4560 3552 l
-4561 3557 l
-4561 3562 l
-4561 3567 l
-4562 3572 l
-4562 3577 l
-4562 3582 l
-4562 3587 l
-4563 3592 l
-4563 3596 l
-4563 3601 l
-4563 3606 l
-4563 3611 l
-4564 3616 l
-4564 3621 l
-4564 3625 l
-4564 3630 l
-4564 3635 l
-4564 3640 l
-4564 3644 l
-4564 3649 l
-4564 3654 l
-4564 3658 l
-4564 3663 l
-4564 3668 l
-4564 3672 l
-4564 3677 l
-4564 3682 l
-4564 3686 l
-4563 3691 l
-4563 3695 l
-4560 3757 l
-4553 3815 l
-4544 3871 l
-4533 3923 l
-4520 3973 l
-4505 4020 l
-4488 4064 l
-4470 4106 l
-4451 4146 l
-4430 4184 l
-4408 4220 l
-4385 4254 l
-4361 4285 l
-4337 4316 l
-4311 4344 l
-4285 4371 l
-4258 4396 l
-4230 4420 l
-4202 4443 l
-4173 4464 l
-4144 4484 l
-4114 4503 l
-4083 4520 l
-4053 4536 l
-4021 4552 l
-3989 4566 l
-3957 4579 l
-3925 4591 l
-S
-3638 5218 m
-3636 5218 l
-3634 5218 l
-3632 5218 l
-3601 5218 l
-3570 5217 l
-3539 5216 l
-3507 5215 l
-3476 5213 l
-3443 5211 l
-3411 5208 l
-3379 5205 l
-3346 5202 l
-3313 5198 l
-3280 5194 l
-3246 5189 l
-3213 5184 l
-3179 5179 l
-3145 5173 l
-3111 5167 l
-3077 5160 l
-3043 5153 l
-3008 5146 l
-2974 5138 l
-2939 5130 l
-2905 5121 l
-2870 5112 l
-2835 5103 l
-2800 5093 l
-2766 5083 l
-2731 5073 l
-2696 5062 l
-2661 5051 l
-2626 5040 l
-2591 5028 l
-2556 5016 l
-2522 5003 l
-2487 4990 l
-2452 4977 l
-2418 4963 l
-2383 4950 l
-2349 4935 l
-2314 4921 l
-2280 4906 l
-2246 4891 l
-2212 4876 l
-2179 4860 l
-2145 4844 l
-2112 4828 l
-2079 4811 l
-2046 4794 l
-2013 4777 l
-1980 4760 l
-1948 4742 l
-1916 4724 l
-1884 4706 l
-1853 4687 l
-1821 4669 l
-1790 4650 l
-1760 4631 l
-1729 4611 l
-1699 4592 l
-1669 4572 l
-1640 4552 l
-1611 4532 l
-1582 4512 l
-1554 4491 l
-1526 4471 l
-1498 4450 l
-1471 4429 l
-1444 4408 l
-1418 4386 l
-1392 4365 l
-1366 4343 l
-1341 4322 l
-1316 4300 l
-1292 4278 l
-1268 4256 l
-1245 4234 l
-1222 4211 l
-1200 4189 l
-1178 4167 l
-1156 4144 l
-1136 4122 l
-1115 4099 l
-1095 4077 l
-1076 4054 l
-1057 4031 l
-1039 4009 l
-1021 3986 l
-1004 3963 l
-987 3940 l
-971 3918 l
-956 3895 l
-941 3872 l
-926 3850 l
-912 3827 l
-899 3804 l
-886 3782 l
-874 3759 l
-863 3737 l
-852 3714 l
-842 3692 l
-832 3670 l
-823 3648 l
-814 3626 l
-807 3604 l
-799 3582 l
-793 3560 l
-787 3539 l
-781 3517 l
-777 3496 l
-773 3475 l
-769 3454 l
-766 3433 l
-764 3412 l
-763 3391 l
-762 3371 l
-761 3350 l
-762 3330 l
-763 3310 l
-765 3290 l
-767 3270 l
-770 3250 l
-774 3230 l
-779 3210 l
-785 3189 l
-792 3167 l
-802 3140 l
-802 3138 l
-803 3136 l
-804 3134 l
-805 3131 l
-806 3129 l
-807 3126 l
-808 3124 l
-810 3121 l
-811 3118 l
-812 3115 l
-814 3112 l
-815 3108 l
-817 3105 l
-819 3100 l
-820 3096 l
-823 3091 l
-825 3086 l
-828 3080 l
-831 3073 l
-835 3065 l
-840 3055 l
-845 3044 l
-852 3030 l
-862 3011 l
-875 2987 l
-894 2951 l
-896 2948 l
-898 2945 l
-899 2942 l
-901 2938 l
-903 2935 l
-906 2931 l
-908 2927 l
-910 2923 l
-912 2919 l
-915 2915 l
-918 2910 l
-920 2906 l
-923 2901 l
-926 2896 l
-929 2891 l
-933 2885 l
-936 2880 l
-940 2874 l
-944 2868 l
-948 2861 l
-952 2854 l
-956 2847 l
-961 2840 l
-966 2832 l
-972 2823 l
-978 2815 l
-984 2806 l
-990 2796 l
-998 2785 l
-1005 2774 l
-1013 2763 l
-1022 2750 l
-1032 2737 l
-1042 2723 l
-1054 2708 l
-1066 2692 l
-1080 2674 l
-1095 2655 l
-1112 2635 l
-1131 2613 l
-1152 2589 l
-1175 2563 l
-1202 2535 l
-1232 2504 l
-1267 2470 l
-S
-1267 2470 m
-1307 2432 l
-1353 2391 l
-1408 2346 l
-1412 2343 l
-1417 2339 l
-1421 2336 l
-1425 2332 l
-1430 2329 l
-1434 2326 l
-1439 2322 l
-1444 2318 l
-1448 2315 l
-1453 2311 l
-1458 2308 l
-1463 2304 l
-1468 2300 l
-1473 2297 l
-1478 2293 l
-1483 2289 l
-1488 2285 l
-1494 2282 l
-1499 2278 l
-1504 2274 l
-1510 2270 l
-1515 2266 l
-1521 2262 l
-1527 2258 l
-1533 2254 l
-1538 2250 l
-1544 2246 l
-1550 2242 l
-1556 2238 l
-1563 2234 l
-1569 2230 l
-1575 2226 l
-1582 2222 l
-1588 2218 l
-1595 2214 l
-1602 2209 l
-1608 2205 l
-1615 2201 l
-1622 2197 l
-1629 2192 l
-1636 2188 l
-1644 2184 l
-1651 2179 l
-1659 2175 l
-1666 2171 l
-1674 2166 l
-1682 2162 l
-1690 2157 l
-1698 2153 l
-1706 2148 l
-1714 2144 l
-1722 2139 l
-1731 2135 l
-1740 2130 l
-1748 2126 l
-1757 2121 l
-1766 2117 l
-1775 2112 l
-1785 2108 l
-1794 2103 l
-1804 2098 l
-1813 2094 l
-1823 2089 l
-1833 2085 l
-1843 2080 l
-1853 2075 l
-1864 2071 l
-1874 2066 l
-1885 2062 l
-1896 2057 l
-1907 2052 l
-1918 2048 l
-1929 2043 l
-1941 2039 l
-1953 2034 l
-1965 2030 l
-1977 2025 l
-1989 2021 l
-2001 2016 l
-2014 2012 l
-2026 2007 l
-2039 2003 l
-2052 1999 l
-2066 1994 l
-2079 1990 l
-2093 1986 l
-2107 1982 l
-2121 1978 l
-2135 1974 l
-2150 1970 l
-2164 1966 l
-2179 1962 l
-2194 1958 l
-2209 1954 l
-2225 1950 l
-2241 1947 l
-2257 1943 l
-2273 1940 l
-2289 1937 l
-2306 1933 l
-2322 1930 l
-2339 1927 l
-2357 1924 l
-2374 1921 l
-2392 1919 l
-2409 1916 l
-2427 1914 l
-2446 1911 l
-2464 1909 l
-2483 1907 l
-2502 1905 l
-2521 1904 l
-2540 1902 l
-2560 1901 l
-2580 1900 l
-2600 1899 l
-2620 1898 l
-2640 1897 l
-2661 1897 l
-2682 1896 l
-2702 1896 l
-2724 1897 l
-2745 1897 l
-2766 1898 l
-2788 1898 l
-2810 1900 l
-2832 1901 l
-2854 1903 l
-2876 1904 l
-2899 1906 l
-2921 1909 l
-2944 1912 l
-2967 1914 l
-2990 1918 l
-3013 1921 l
-3036 1925 l
-3059 1929 l
-3083 1933 l
-3106 1938 l
-3129 1943 l
-3153 1948 l
-3176 1953 l
-3200 1959 l
-3224 1965 l
-3247 1972 l
-3271 1979 l
-3294 1986 l
-3318 1993 l
-3342 2000 l
-3365 2008 l
-3389 2017 l
-3412 2025 l
-3435 2034 l
-3459 2043 l
-3482 2052 l
-3505 2062 l
-3528 2072 l
-3551 2082 l
-3573 2093 l
-3596 2104 l
-3618 2115 l
-3640 2126 l
-3663 2138 l
-3684 2149 l
-3706 2161 l
-3728 2174 l
-3749 2186 l
-3770 2199 l
-3791 2212 l
-3811 2225 l
-3832 2238 l
-3852 2252 l
-3872 2265 l
-3892 2279 l
-3911 2293 l
-3930 2307 l
-3949 2322 l
-3968 2336 l
-3986 2351 l
-4004 2365 l
-4022 2380 l
-4039 2395 l
-4057 2410 l
-4073 2425 l
-4090 2440 l
-4107 2455 l
-4123 2470 l
-4138 2486 l
-4154 2501 l
-4169 2516 l
-4184 2532 l
-4199 2547 l
-4213 2563 l
-4227 2578 l
-4241 2594 l
-4254 2609 l
-S
-4254 2609 m
-4268 2625 l
-4281 2640 l
-4293 2655 l
-4306 2671 l
-4318 2686 l
-4330 2701 l
-4341 2717 l
-4353 2732 l
-4364 2747 l
-4375 2762 l
-4385 2777 l
-4396 2792 l
-4406 2807 l
-4416 2822 l
-4425 2836 l
-4435 2851 l
-4444 2865 l
-4453 2880 l
-4462 2894 l
-4470 2909 l
-4478 2923 l
-4486 2937 l
-4494 2951 l
-4502 2965 l
-4510 2978 l
-4517 2992 l
-4524 3006 l
-4531 3019 l
-4538 3032 l
-4544 3046 l
-4551 3059 l
-4557 3072 l
-4563 3085 l
-4569 3098 l
-4575 3110 l
-4581 3123 l
-4586 3135 l
-4591 3148 l
-4597 3160 l
-4602 3172 l
-4606 3184 l
-4611 3196 l
-4616 3208 l
-4620 3219 l
-4625 3231 l
-4629 3242 l
-4633 3253 l
-4637 3265 l
-4641 3276 l
-4645 3287 l
-4649 3298 l
-4652 3308 l
-4656 3319 l
-4659 3329 l
-4663 3340 l
-4666 3350 l
-4669 3360 l
-4672 3371 l
-4675 3381 l
-4678 3390 l
-4681 3400 l
-4683 3410 l
-4686 3420 l
-4689 3429 l
-4691 3438 l
-4693 3448 l
-4696 3457 l
-4698 3466 l
-4700 3475 l
-4702 3484 l
-4704 3493 l
-4706 3501 l
-4708 3510 l
-4710 3519 l
-4712 3527 l
-4714 3535 l
-4716 3544 l
-4717 3552 l
-4719 3560 l
-4720 3568 l
-4722 3576 l
-4723 3584 l
-4725 3591 l
-4726 3599 l
-4728 3607 l
-4729 3614 l
-4730 3622 l
-4731 3629 l
-4732 3636 l
-4734 3644 l
-4735 3651 l
-4736 3658 l
-4737 3665 l
-4738 3672 l
-4739 3679 l
-4740 3685 l
-4741 3692 l
-4741 3699 l
-4742 3705 l
-4743 3712 l
-4744 3718 l
-4745 3725 l
-4745 3731 l
-4746 3737 l
-4747 3743 l
-4747 3749 l
-4748 3755 l
-4748 3761 l
-4749 3767 l
-4750 3773 l
-4750 3779 l
-4751 3785 l
-4756 3860 l
-4758 3925 l
-4758 3983 l
-4757 4034 l
-4755 4079 l
-4752 4120 l
-4749 4156 l
-4745 4189 l
-4742 4219 l
-4738 4246 l
-4734 4271 l
-4731 4293 l
-4727 4314 l
-4724 4334 l
-4721 4351 l
-4717 4368 l
-4714 4383 l
-4711 4398 l
-4708 4411 l
-4705 4424 l
-4703 4435 l
-4700 4446 l
-4697 4457 l
-4695 4467 l
-4692 4476 l
-4690 4485 l
-4688 4493 l
-4686 4501 l
-4684 4509 l
-4682 4516 l
-4680 4523 l
-4678 4529 l
-4676 4535 l
-4674 4541 l
-4673 4547 l
-4671 4552 l
-4670 4558 l
-4668 4563 l
-4667 4567 l
-4665 4572 l
-4664 4576 l
-4662 4581 l
-4647 4627 l
-4636 4658 l
-4628 4680 l
-4622 4697 l
-4617 4710 l
-4613 4721 l
-4609 4729 l
-4606 4737 l
-4603 4744 l
-4601 4749 l
-4599 4755 l
-4597 4759 l
-4595 4763 l
-4593 4767 l
-4592 4771 l
-4590 4774 l
-4589 4777 l
-4587 4780 l
-4586 4783 l
-4585 4786 l
-4584 4788 l
-4582 4791 l
-4569 4818 l
-4557 4839 l
-4546 4858 l
-4534 4876 l
-4522 4893 l
-4510 4909 l
-4497 4924 l
-4483 4939 l
-4470 4954 l
-4455 4968 l
-4440 4981 l
-4425 4995 l
-4408 5008 l
-4392 5020 l
-4375 5032 l
-4357 5044 l
-4339 5056 l
-4320 5067 l
-4301 5077 l
-4281 5088 l
-4261 5098 l
-4240 5107 l
-4218 5116 l
-S
-4218 5116 m
-4197 5125 l
-4174 5134 l
-4152 5142 l
-4128 5149 l
-4105 5156 l
-4080 5163 l
-4056 5170 l
-4031 5176 l
-4005 5181 l
-3979 5187 l
-3953 5192 l
-3926 5196 l
-3899 5200 l
-3872 5204 l
-3844 5207 l
-3816 5210 l
-3787 5212 l
-3758 5214 l
-3729 5216 l
-3699 5217 l
-3669 5218 l
-3639 5218 l
-S
-2956 5656 m
-2955 5655 l
-2954 5655 l
-2953 5654 l
-2939 5646 l
-2924 5639 l
-2909 5631 l
-2893 5623 l
-2876 5616 l
-2860 5608 l
-2842 5600 l
-2824 5592 l
-2806 5584 l
-2787 5577 l
-2768 5568 l
-2748 5560 l
-2728 5552 l
-2708 5544 l
-2687 5536 l
-2666 5527 l
-2645 5519 l
-2623 5510 l
-2601 5501 l
-2579 5493 l
-2557 5484 l
-2534 5475 l
-2512 5466 l
-2489 5456 l
-2466 5447 l
-2443 5438 l
-2419 5428 l
-2396 5419 l
-2372 5409 l
-2348 5399 l
-2324 5389 l
-2301 5380 l
-2277 5369 l
-2253 5359 l
-2228 5349 l
-2204 5339 l
-2180 5329 l
-2156 5318 l
-2132 5308 l
-2108 5297 l
-2084 5286 l
-2060 5276 l
-2036 5265 l
-2012 5254 l
-1988 5243 l
-1964 5233 l
-1940 5222 l
-1917 5211 l
-1893 5200 l
-1870 5189 l
-1847 5178 l
-1824 5167 l
-1801 5156 l
-1778 5146 l
-1755 5135 l
-1733 5124 l
-1710 5113 l
-1688 5103 l
-1667 5092 l
-1645 5082 l
-1623 5072 l
-1602 5061 l
-1581 5051 l
-1561 5041 l
-1540 5032 l
-1520 5022 l
-1500 5012 l
-1481 5003 l
-1461 4994 l
-1442 4985 l
-1424 4977 l
-1406 4969 l
-1388 4961 l
-1370 4953 l
-1353 4946 l
-1336 4939 l
-1319 4932 l
-1303 4926 l
-1288 4920 l
-1273 4915 l
-1258 4910 l
-1244 4906 l
-1230 4902 l
-1216 4899 l
-1204 4897 l
-1191 4895 l
-1180 4894 l
-1169 4893 l
-1158 4894 l
-1148 4895 l
-1139 4897 l
-1131 4900 l
-1123 4904 l
-1116 4908 l
-1110 4914 l
-1105 4921 l
-1100 4930 l
-1097 4939 l
-1094 4950 l
-1093 4962 l
-1093 4975 l
-1094 4990 l
-1097 5007 l
-1101 5025 l
-1107 5044 l
-1114 5066 l
-1123 5089 l
-1134 5113 l
-1148 5140 l
-1163 5168 l
-1181 5198 l
-1202 5230 l
-1225 5263 l
-1251 5298 l
-1280 5334 l
-1312 5371 l
-1348 5410 l
-1387 5449 l
-1430 5488 l
-1476 5528 l
-1525 5568 l
-1578 5607 l
-1633 5645 l
-1692 5682 l
-1753 5717 l
-1816 5750 l
-1881 5780 l
-1948 5808 l
-2015 5834 l
-2082 5856 l
-2149 5875 l
-2215 5892 l
-2280 5905 l
-2343 5915 l
-2404 5923 l
-2463 5928 l
-2519 5931 l
-2572 5932 l
-2623 5931 l
-2670 5929 l
-2714 5925 l
-2755 5920 l
-2794 5914 l
-2829 5907 l
-2861 5900 l
-2890 5892 l
-2917 5883 l
-2941 5875 l
-2962 5866 l
-2981 5857 l
-2998 5847 l
-3013 5838 l
-3025 5829 l
-3036 5820 l
-3044 5811 l
-3051 5802 l
-3056 5793 l
-3060 5784 l
-3062 5775 l
-3063 5767 l
-3062 5758 l
-3060 5750 l
-3057 5742 l
-3052 5734 l
-3047 5726 l
-3040 5718 l
-3033 5710 l
-3024 5702 l
-3015 5694 l
-3005 5686 l
-2994 5679 l
-2982 5671 l
-2969 5663 l
-2956 5656 l
-S
-3678 4650 m
-3671 4680 l
-S
-3420 4667 m
-3410 4696 l
-S
-2885 4592 m
-2874 4620 l
-S
-2621 4508 m
-2609 4536 l
-S
-2122 4260 m
-2108 4288 l
-S
-1898 4101 m
-1884 4128 l
-S
-1534 3722 m
-1518 3747 l
-S
-1407 3502 m
-1390 3527 l
-S
-1321 2997 m
-1300 3019 l
-S
-1407 2705 m
-1383 2725 l
-S
-2128 2089 m
-2098 2095 l
-S
-2959 1989 m
-2930 1980 l
-S
-4430 3050 m
-4446 3076 l
-S
-4564 3628 m
-4571 3657 l
-S
-4350 4300 m
-4348 4331 l
-S
-4152 4479 m
-4147 4509 l
-S
-3198 3069 m
-3218 3046 l
-S
-3284 3127 m
-3305 3105 l
-S
-3366 3191 m
-3387 3169 l
-S
-3444 3259 m
-3466 3238 l
-S
-3517 3332 m
-3540 3312 l
-S
-3649 3492 m
-3673 3473 l
-S
-3707 3578 m
-3732 3560 l
-S
-3760 3668 m
-3785 3650 l
-S
-3807 3761 m
-3832 3744 l
-S
-3847 3857 m
-3873 3841 l
-S
-3907 4058 m
-3935 4044 l
-S
-3927 4162 m
-3955 4149 l
-S
-3939 4267 m
-3967 4255 l
-S
-3943 4374 m
-3971 4364 l
-S
-3938 4482 m
-3967 4473 l
-S
-3902 4699 m
-3932 4692 l
-S
-3870 4807 m
-3900 4802 l
-S
-3828 4914 m
-3858 4910 l
-S
-3776 5018 m
-3806 5016 l
-S
-3713 5120 m
-3743 5119 l
-S
-3553 5311 m
-3583 5314 l
-S
-3456 5398 m
-3486 5402 l
-S
-3348 5477 m
-3378 5484 l
-S
-3228 5548 m
-3257 5557 l
-S
-3097 5608 m
-3126 5619 l
-S
-2805 5690 m
-2831 5706 l
-S
-2647 5708 m
-2670 5727 l
-S
-2482 5709 m
-2503 5731 l
-S
-2313 5691 m
-2330 5716 l
-S
-2143 5654 m
-2156 5681 l
-S
-3925 4591 m
-3873 4608 l
-3821 4622 l
-3768 4635 l
-3715 4645 l
-3660 4653 l
-3606 4659 l
-3550 4664 l
-3495 4666 l
-3438 4667 l
-3382 4666 l
-3325 4663 l
-3268 4659 l
-3211 4653 l
-3154 4646 l
-S
-3154 4646 m
-3096 4637 l
-3039 4626 l
-2981 4615 l
-2924 4601 l
-2866 4587 l
-2809 4571 l
-2752 4553 l
-2696 4534 l
-2639 4514 l
-2583 4493 l
-2528 4471 l
-2473 4447 l
-2418 4422 l
-2364 4396 l
-S
-2364 4396 m
-2311 4369 l
-2258 4341 l
-2206 4312 l
-2155 4281 l
-2105 4250 l
-2056 4217 l
-2007 4184 l
-1960 4149 l
-1914 4114 l
-1869 4077 l
-1825 4040 l
-1782 4001 l
-1740 3962 l
-1700 3922 l
-S
-1700 3922 m
-1662 3880 l
-1625 3838 l
-1589 3795 l
-1556 3751 l
-1524 3707 l
-1493 3661 l
-1465 3614 l
-1439 3567 l
-1415 3518 l
-1393 3469 l
-1374 3418 l
-1357 3367 l
-1342 3315 l
-1331 3261 l
-S
-1331 3261 m
-1330 3257 l
-1330 3253 l
-1329 3249 l
-1328 3246 l
-1328 3242 l
-1327 3238 l
-1326 3234 l
-1326 3230 l
-1325 3226 l
-1325 3222 l
-1324 3218 l
-1324 3214 l
-1323 3210 l
-1323 3207 l
-1322 3203 l
-1322 3199 l
-1321 3195 l
-1321 3191 l
-1320 3187 l
-1320 3183 l
-1320 3179 l
-1319 3175 l
-1319 3171 l
-1318 3167 l
-1318 3163 l
-1318 3159 l
-1318 3155 l
-1317 3151 l
-1317 3147 l
-1317 3143 l
-1317 3139 l
-1316 3135 l
-1316 3131 l
-1316 3127 l
-1316 3123 l
-1316 3119 l
-1316 3114 l
-1316 3110 l
-1316 3106 l
-1316 3102 l
-1316 3098 l
-1316 3094 l
-1316 3090 l
-1316 3086 l
-1316 3082 l
-1316 3078 l
-1316 3073 l
-1316 3069 l
-1316 3065 l
-1316 3061 l
-1316 3057 l
-1317 3053 l
-1317 3049 l
-1317 3044 l
-1317 3040 l
-1318 3036 l
-1318 3032 l
-1318 3028 l
-1319 3023 l
-1319 3019 l
-1319 3015 l
-1320 3011 l
-1320 3007 l
-1321 3002 l
-1321 2998 l
-1322 2994 l
-1322 2990 l
-1323 2985 l
-1323 2981 l
-1324 2977 l
-1324 2972 l
-1325 2968 l
-1326 2964 l
-1326 2960 l
-1327 2955 l
-1328 2951 l
-1328 2947 l
-1329 2942 l
-1330 2938 l
-1331 2934 l
-1332 2929 l
-1332 2925 l
-1333 2921 l
-1334 2916 l
-1335 2912 l
-1336 2908 l
-1337 2903 l
-1338 2899 l
-1339 2894 l
-1340 2890 l
-1341 2886 l
-1342 2881 l
-1343 2877 l
-1345 2872 l
-1346 2868 l
-1347 2863 l
-1348 2859 l
-1349 2854 l
-1351 2850 l
-1352 2845 l
-1353 2841 l
-1355 2837 l
-1356 2832 l
-1358 2828 l
-1359 2823 l
-1360 2819 l
-1362 2814 l
-1364 2809 l
-1365 2805 l
-1367 2800 l
-1368 2796 l
-1370 2791 l
-1372 2787 l
-1373 2782 l
-1375 2778 l
-1377 2773 l
-1379 2768 l
-1381 2764 l
-1382 2759 l
-1384 2755 l
-1386 2750 l
-1388 2745 l
-1390 2741 l
-1392 2736 l
-1394 2731 l
-1396 2727 l
-1399 2722 l
-1401 2717 l
-1403 2713 l
-1405 2708 l
-1407 2703 l
-1410 2699 l
-1412 2694 l
-1414 2689 l
-1417 2685 l
-1419 2680 l
-1422 2675 l
-1424 2671 l
-1427 2666 l
-1429 2661 l
-1432 2656 l
-1435 2652 l
-1437 2647 l
-1440 2642 l
-1443 2637 l
-1446 2633 l
-1448 2628 l
-1451 2623 l
-1454 2618 l
-1457 2613 l
-1460 2609 l
-1463 2604 l
-1466 2599 l
-1469 2594 l
-1473 2589 l
-1476 2584 l
-1479 2580 l
-1482 2575 l
-1486 2570 l
-1489 2565 l
-1492 2560 l
-1496 2555 l
-1499 2551 l
-1503 2546 l
-1506 2541 l
-1510 2536 l
-1514 2531 l
-1518 2526 l
-1521 2521 l
-1525 2516 l
-1529 2511 l
-1533 2507 l
-1537 2502 l
-1541 2497 l
-1545 2492 l
-1549 2487 l
-1553 2482 l
-1557 2477 l
-1562 2472 l
-1566 2467 l
-1570 2462 l
-1575 2457 l
-1579 2452 l
-1584 2448 l
-1588 2443 l
-1593 2438 l
-1597 2433 l
-1602 2428 l
-1607 2423 l
-1612 2418 l
-1617 2413 l
-1622 2408 l
-1627 2403 l
-1632 2398 l
-1637 2393 l
-1642 2388 l
-S
-1642 2388 m
-1647 2383 l
-1652 2378 l
-1658 2374 l
-1663 2369 l
-1669 2364 l
-1674 2359 l
-1680 2354 l
-1685 2349 l
-1691 2344 l
-1697 2339 l
-1703 2334 l
-1709 2329 l
-1715 2324 l
-1721 2320 l
-1727 2315 l
-1733 2310 l
-1739 2305 l
-1745 2300 l
-1752 2295 l
-1758 2290 l
-1765 2286 l
-1771 2281 l
-1778 2276 l
-1784 2271 l
-1791 2266 l
-1798 2261 l
-1805 2257 l
-1812 2252 l
-1819 2247 l
-1826 2242 l
-1833 2238 l
-1841 2233 l
-1848 2228 l
-1855 2224 l
-1863 2219 l
-1870 2214 l
-1878 2210 l
-1886 2205 l
-1893 2200 l
-1901 2196 l
-1909 2191 l
-1917 2187 l
-1925 2182 l
-1934 2178 l
-1942 2173 l
-1950 2169 l
-1959 2164 l
-1967 2160 l
-1976 2156 l
-1984 2151 l
-1993 2147 l
-2002 2143 l
-2011 2138 l
-2020 2134 l
-2029 2130 l
-2038 2126 l
-2047 2122 l
-2057 2118 l
-2066 2113 l
-2076 2109 l
-2085 2105 l
-2095 2101 l
-2105 2098 l
-2115 2094 l
-2124 2090 l
-2135 2086 l
-2145 2082 l
-2155 2079 l
-2165 2075 l
-2176 2071 l
-2186 2068 l
-2197 2064 l
-2207 2061 l
-2218 2057 l
-2229 2054 l
-2240 2051 l
-2251 2047 l
-2262 2044 l
-2273 2041 l
-2284 2038 l
-2296 2035 l
-2307 2032 l
-2318 2029 l
-2330 2026 l
-2342 2023 l
-2354 2021 l
-2365 2018 l
-2377 2015 l
-2390 2013 l
-2402 2010 l
-2414 2008 l
-2426 2006 l
-2439 2004 l
-2451 2001 l
-2464 1999 l
-2476 1997 l
-2489 1995 l
-2502 1994 l
-2515 1992 l
-2528 1990 l
-2541 1989 l
-2554 1987 l
-2567 1986 l
-2580 1985 l
-2594 1983 l
-2607 1982 l
-2621 1981 l
-2634 1980 l
-2648 1980 l
-2662 1979 l
-2676 1978 l
-2689 1978 l
-2703 1978 l
-2717 1977 l
-2731 1977 l
-2746 1977 l
-2760 1977 l
-2774 1977 l
-2788 1977 l
-2803 1978 l
-2817 1978 l
-2832 1979 l
-2846 1980 l
-2861 1981 l
-2875 1982 l
-2890 1983 l
-2905 1984 l
-2920 1985 l
-2935 1987 l
-2949 1988 l
-2964 1990 l
-2979 1992 l
-2994 1994 l
-3009 1996 l
-3024 1998 l
-3039 2000 l
-3054 2003 l
-3069 2006 l
-3084 2008 l
-3100 2011 l
-3115 2014 l
-3130 2017 l
-3145 2021 l
-3160 2024 l
-3175 2028 l
-3191 2031 l
-3206 2035 l
-3221 2039 l
-3236 2043 l
-3251 2047 l
-3266 2052 l
-3281 2056 l
-3297 2061 l
-3312 2066 l
-3327 2070 l
-3342 2075 l
-3357 2081 l
-3372 2086 l
-3387 2091 l
-3402 2097 l
-3416 2102 l
-3431 2108 l
-3446 2114 l
-3461 2120 l
-3476 2126 l
-3490 2133 l
-3505 2139 l
-3519 2146 l
-3534 2152 l
-3548 2159 l
-3563 2166 l
-3577 2173 l
-3591 2180 l
-3605 2187 l
-3619 2195 l
-3633 2202 l
-3647 2210 l
-3661 2218 l
-3675 2225 l
-3689 2233 l
-3702 2241 l
-3716 2250 l
-3729 2258 l
-3742 2266 l
-3756 2275 l
-3769 2283 l
-3782 2292 l
-3795 2300 l
-3808 2309 l
-3820 2318 l
-3833 2327 l
-3846 2336 l
-3858 2345 l
-3870 2354 l
-3883 2364 l
-3895 2373 l
-S
-3895 2373 m
-3907 2382 l
-3919 2392 l
-3930 2401 l
-3942 2411 l
-3954 2421 l
-3965 2431 l
-3976 2440 l
-3988 2450 l
-3999 2460 l
-4010 2470 l
-4020 2480 l
-4031 2490 l
-4042 2500 l
-4052 2511 l
-4063 2521 l
-4073 2531 l
-4083 2541 l
-4093 2552 l
-4103 2562 l
-4113 2573 l
-4122 2583 l
-4132 2593 l
-4141 2604 l
-4150 2614 l
-4159 2625 l
-4168 2636 l
-4177 2646 l
-4186 2657 l
-4195 2667 l
-4203 2678 l
-4212 2689 l
-4220 2699 l
-4228 2710 l
-4236 2721 l
-4244 2731 l
-4252 2742 l
-4259 2753 l
-4267 2763 l
-4274 2774 l
-4282 2785 l
-4289 2795 l
-4296 2806 l
-4303 2817 l
-4310 2827 l
-4317 2838 l
-4323 2848 l
-4330 2859 l
-4336 2870 l
-4342 2880 l
-4349 2891 l
-4355 2901 l
-4361 2912 l
-4366 2922 l
-4372 2933 l
-4378 2943 l
-4383 2954 l
-4389 2964 l
-4394 2975 l
-4399 2985 l
-4404 2995 l
-4409 3006 l
-4414 3016 l
-4419 3026 l
-4424 3036 l
-4428 3046 l
-4433 3057 l
-4437 3067 l
-4442 3077 l
-4446 3087 l
-4450 3097 l
-4454 3107 l
-4458 3117 l
-4462 3127 l
-4466 3137 l
-4470 3147 l
-4473 3156 l
-4477 3166 l
-4480 3176 l
-4483 3186 l
-4487 3195 l
-4490 3205 l
-4493 3214 l
-4496 3224 l
-4499 3233 l
-4502 3243 l
-4505 3252 l
-4507 3262 l
-4510 3271 l
-4513 3280 l
-4515 3289 l
-4518 3299 l
-4520 3308 l
-4522 3317 l
-4524 3326 l
-4527 3335 l
-4529 3344 l
-4531 3353 l
-4533 3362 l
-4534 3371 l
-4536 3379 l
-4538 3388 l
-4540 3397 l
-4541 3406 l
-4543 3414 l
-4544 3423 l
-4546 3431 l
-4547 3440 l
-4548 3448 l
-4550 3457 l
-4551 3465 l
-4552 3473 l
-4553 3482 l
-4554 3490 l
-4555 3498 l
-4556 3506 l
-4557 3514 l
-4558 3522 l
-4558 3530 l
-4559 3538 l
-4560 3546 l
-4560 3554 l
-4561 3562 l
-4561 3570 l
-4562 3577 l
-4562 3585 l
-4563 3593 l
-4563 3600 l
-4563 3608 l
-4564 3615 l
-4564 3623 l
-4564 3630 l
-4564 3638 l
-4564 3645 l
-4564 3652 l
-4564 3660 l
-4564 3667 l
-4564 3674 l
-4564 3681 l
-4564 3688 l
-4563 3695 l
-4563 3702 l
-4563 3709 l
-4562 3716 l
-4562 3723 l
-4562 3730 l
-4561 3737 l
-4561 3743 l
-4560 3750 l
-4560 3757 l
-4559 3763 l
-4558 3770 l
-4558 3777 l
-4557 3783 l
-4556 3790 l
-4556 3796 l
-4555 3803 l
-4554 3809 l
-4553 3815 l
-4552 3822 l
-4551 3828 l
-4550 3834 l
-4549 3840 l
-4548 3846 l
-4547 3853 l
-4546 3859 l
-4545 3865 l
-4544 3871 l
-4543 3877 l
-4542 3883 l
-4541 3888 l
-4539 3894 l
-4538 3900 l
-4537 3906 l
-4536 3912 l
-4534 3917 l
-4533 3923 l
-4532 3929 l
-4530 3934 l
-4529 3940 l
-4527 3946 l
-4526 3951 l
-4524 3957 l
-4523 3962 l
-4521 3967 l
-4520 3973 l
-4518 3978 l
-4517 3983 l
-4515 3989 l
-4513 3994 l
-4512 3999 l
-4510 4004 l
-4508 4010 l
-4506 4015 l
-4505 4020 l
-4503 4025 l
-4501 4030 l
-S
-4501 4030 m
-4499 4035 l
-4498 4040 l
-4496 4045 l
-4494 4050 l
-4492 4055 l
-4490 4059 l
-4488 4064 l
-4486 4069 l
-4484 4074 l
-4482 4079 l
-4480 4083 l
-4478 4088 l
-4476 4093 l
-4474 4097 l
-4472 4102 l
-4470 4106 l
-4468 4111 l
-4466 4116 l
-4464 4120 l
-4461 4124 l
-4459 4129 l
-4457 4133 l
-4455 4138 l
-4453 4142 l
-4451 4146 l
-4448 4151 l
-4446 4155 l
-4444 4159 l
-4441 4163 l
-4439 4168 l
-4437 4172 l
-4435 4176 l
-4432 4180 l
-4430 4184 l
-4427 4188 l
-4425 4192 l
-4423 4196 l
-4420 4200 l
-4418 4204 l
-4415 4208 l
-4413 4212 l
-4411 4216 l
-4408 4220 l
-4406 4224 l
-4403 4227 l
-4401 4231 l
-4398 4235 l
-4395 4239 l
-4393 4242 l
-4390 4246 l
-4388 4250 l
-4385 4254 l
-4383 4257 l
-4380 4261 l
-4377 4264 l
-4375 4268 l
-4372 4271 l
-4369 4275 l
-4367 4278 l
-4364 4282 l
-4361 4285 l
-4359 4289 l
-4356 4292 l
-4353 4296 l
-4351 4299 l
-4348 4302 l
-4345 4306 l
-4342 4309 l
-4340 4312 l
-4337 4316 l
-4334 4319 l
-4331 4322 l
-4328 4325 l
-4326 4328 l
-4323 4332 l
-4320 4335 l
-4317 4338 l
-4314 4341 l
-4311 4344 l
-4308 4347 l
-4305 4350 l
-4303 4353 l
-4300 4356 l
-4297 4359 l
-4294 4362 l
-4291 4365 l
-4288 4368 l
-4285 4371 l
-4282 4374 l
-4279 4377 l
-4276 4380 l
-4273 4382 l
-4270 4385 l
-4267 4388 l
-4264 4391 l
-4261 4394 l
-4258 4396 l
-4255 4399 l
-4252 4402 l
-4249 4405 l
-4246 4407 l
-4243 4410 l
-4240 4412 l
-4237 4415 l
-4234 4418 l
-4230 4420 l
-4227 4423 l
-4224 4425 l
-4221 4428 l
-4218 4430 l
-4215 4433 l
-4212 4435 l
-4208 4438 l
-4205 4440 l
-4202 4443 l
-4199 4445 l
-4196 4448 l
-4193 4450 l
-4189 4452 l
-4186 4455 l
-4183 4457 l
-4180 4459 l
-4177 4462 l
-4173 4464 l
-4170 4466 l
-4167 4469 l
-4164 4471 l
-4160 4473 l
-4157 4475 l
-4154 4477 l
-4150 4480 l
-4147 4482 l
-4144 4484 l
-4141 4486 l
-4137 4488 l
-4134 4490 l
-4131 4492 l
-4127 4494 l
-4124 4496 l
-4121 4499 l
-4117 4501 l
-4114 4503 l
-4111 4505 l
-4107 4507 l
-4104 4509 l
-4100 4510 l
-4097 4512 l
-4094 4514 l
-4090 4516 l
-4087 4518 l
-4083 4520 l
-4080 4522 l
-4077 4524 l
-4073 4526 l
-4025 4550 l
-3975 4572 l
-3972 4573 l
-3968 4575 l
-3964 4576 l
-3961 4577 l
-3957 4579 l
-3954 4580 l
-3950 4582 l
-3946 4583 l
-3943 4584 l
-3939 4586 l
-3936 4587 l
-3932 4588 l
-3928 4590 l
-3928 4590 l
-3928 4590 l
-3927 4590 l
-3927 4590 l
-3927 4590 l
-3927 4590 l
-3926 4590 l
-3926 4590 l
-3926 4590 l
-3926 4590 l
-3925 4591 l
-3925 4591 l
-3925 4591 l
-S
-3109 3016 m
-3148 3038 l
-3186 3061 l
-3223 3085 l
-3260 3110 l
-3296 3136 l
-3331 3163 l
-3366 3191 l
-3400 3219 l
-3433 3249 l
-3465 3280 l
-3497 3311 l
-3527 3343 l
-3557 3376 l
-3586 3410 l
-S
-3586 3410 m
-3613 3445 l
-3640 3480 l
-3666 3516 l
-3691 3553 l
-3715 3590 l
-3738 3629 l
-3760 3668 l
-3781 3707 l
-3800 3747 l
-3819 3788 l
-3836 3829 l
-3852 3871 l
-3867 3913 l
-3881 3956 l
-S
-3881 3956 m
-3893 3999 l
-3904 4043 l
-3914 4087 l
-3922 4132 l
-3929 4177 l
-3935 4222 l
-3939 4267 l
-3941 4313 l
-3943 4359 l
-3942 4405 l
-3940 4451 l
-3937 4498 l
-3931 4544 l
-3925 4591 l
-S
-3925 4591 m
-3916 4637 l
-3906 4684 l
-3894 4730 l
-3880 4776 l
-3865 4823 l
-3847 4868 l
-3828 4914 l
-3807 4959 l
-3784 5004 l
-3759 5048 l
-3732 5091 l
-3703 5134 l
-3672 5177 l
-3639 5218 l
-S
-3639 5218 m
-3603 5258 l
-3566 5298 l
-3527 5336 l
-3485 5374 l
-3442 5410 l
-3396 5444 l
-3348 5477 l
-3298 5509 l
-3246 5538 l
-3192 5566 l
-3136 5592 l
-3078 5616 l
-3018 5637 l
-2956 5656 l
-S
-2956 5656 m
-2952 5657 l
-2947 5658 l
-2943 5660 l
-2938 5661 l
-2934 5662 l
-2929 5663 l
-2924 5664 l
-2920 5665 l
-2915 5667 l
-2911 5668 l
-2906 5669 l
-2902 5670 l
-2897 5671 l
-2892 5672 l
-2888 5673 l
-2883 5674 l
-2879 5675 l
-2874 5676 l
-2869 5677 l
-2865 5678 l
-2860 5679 l
-2855 5680 l
-2851 5681 l
-2846 5682 l
-2841 5683 l
-2837 5684 l
-2832 5685 l
-2827 5686 l
-2823 5687 l
-2818 5687 l
-2813 5688 l
-2808 5689 l
-2804 5690 l
-2799 5691 l
-2794 5691 l
-2789 5692 l
-2785 5693 l
-2780 5694 l
-2775 5694 l
-2770 5695 l
-2765 5696 l
-2761 5697 l
-2756 5697 l
-2751 5698 l
-2746 5698 l
-2741 5699 l
-2737 5700 l
-2732 5700 l
-2727 5701 l
-2722 5701 l
-2717 5702 l
-2712 5702 l
-2707 5703 l
-2702 5703 l
-2698 5704 l
-2693 5704 l
-2688 5705 l
-2683 5705 l
-2678 5706 l
-2673 5706 l
-2668 5706 l
-2663 5707 l
-2658 5707 l
-2653 5707 l
-2648 5708 l
-2643 5708 l
-2638 5708 l
-2633 5709 l
-2628 5709 l
-2623 5709 l
-2618 5709 l
-2613 5709 l
-2608 5710 l
-2603 5710 l
-2598 5710 l
-2593 5710 l
-2588 5710 l
-2583 5710 l
-2578 5710 l
-2573 5710 l
-2568 5710 l
-2563 5711 l
-2558 5711 l
-2553 5711 l
-2548 5711 l
-2543 5710 l
-2538 5710 l
-2533 5710 l
-2528 5710 l
-2522 5710 l
-2517 5710 l
-2512 5710 l
-2507 5710 l
-2502 5710 l
-2497 5709 l
-2492 5709 l
-2487 5709 l
-2482 5709 l
-2476 5708 l
-2471 5708 l
-2466 5708 l
-2461 5708 l
-2456 5707 l
-2451 5707 l
-2446 5707 l
-2441 5706 l
-2435 5706 l
-2430 5705 l
-2425 5705 l
-2420 5704 l
-2415 5704 l
-2410 5703 l
-2404 5703 l
-2399 5702 l
-2394 5702 l
-2389 5701 l
-2384 5701 l
-2379 5700 l
-2373 5700 l
-2368 5699 l
-2363 5698 l
-2358 5698 l
-2353 5697 l
-2347 5696 l
-2342 5695 l
-2337 5695 l
-2332 5694 l
-2327 5693 l
-2321 5692 l
-2316 5692 l
-2311 5691 l
-2306 5690 l
-2301 5689 l
-2295 5688 l
-2290 5687 l
-2285 5686 l
-2280 5685 l
-2275 5684 l
-2269 5683 l
-2264 5682 l
-2259 5681 l
-2254 5680 l
-2249 5679 l
-2243 5678 l
-2238 5677 l
-2233 5676 l
-2228 5675 l
-2223 5674 l
-2217 5673 l
-2212 5671 l
-2207 5670 l
-2202 5669 l
-2197 5668 l
-2191 5666 l
-2186 5665 l
-2181 5664 l
-2176 5663 l
-2171 5661 l
-2165 5660 l
-2160 5658 l
-2155 5657 l
-2150 5656 l
-2145 5654 l
-2139 5653 l
-2134 5651 l
-2129 5650 l
-2124 5648 l
-2119 5647 l
-2113 5645 l
-2108 5644 l
-2103 5642 l
-2098 5641 l
-2093 5639 l
-2088 5637 l
-2082 5636 l
-2077 5634 l
-2072 5632 l
-2067 5631 l
-2062 5629 l
-2057 5627 l
-2052 5625 l
-2046 5624 l
-2041 5622 l
-2036 5620 l
-2031 5618 l
-2026 5616 l
-2021 5614 l
-2016 5612 l
-2011 5610 l
-2005 5609 l
-2000 5607 l
-1995 5605 l
-1990 5603 l
-1985 5601 l
-1980 5599 l
-1975 5597 l
-S
-4756 3875 m
-4759 3878 l
-4759 3882 l
-4759 3887 l
-4759 3891 l
-4759 3896 l
-4759 3900 l
-4759 3905 l
-4759 3909 l
-S
-4759 3909 m
-4759 3913 l
-4759 3918 l
-4759 3922 l
-4759 3927 l
-4759 3931 l
-4759 3936 l
-4759 3940 l
-4759 3945 l
-4759 3949 l
-S
-4759 3949 m
-4759 3954 l
-4759 3958 l
-4759 3963 l
-4759 3967 l
-4759 3972 l
-4759 3976 l
-4759 3981 l
-4759 3985 l
-4759 3989 l
-S
-4759 3989 m
-4759 3994 l
-4759 3998 l
-4759 4003 l
-4759 4007 l
-4759 4012 l
-4759 4016 l
-4759 4021 l
-4759 4025 l
-4759 4030 l
-S
-4756 4041 m
-4759 4039 l
-4759 4034 l
-4759 4030 l
-S
-4716 3545 m
-4718 3547 l
-S
-4718 3547 m
-4718 3551 l
-4718 3556 l
-4718 3560 l
-4718 3565 l
-4721 3567 l
-4723 3569 l
-4723 3574 l
-4723 3578 l
-4723 3583 l
-4723 3587 l
-S
-4723 3587 m
-4723 3592 l
-4725 3594 l
-4727 3596 l
-4727 3601 l
-4727 3605 l
-4727 3610 l
-4727 3614 l
-4730 3616 l
-4732 3619 l
-4732 3623 l
-4732 3627 l
-S
-4732 3627 m
-4732 3632 l
-4732 3636 l
-4732 3641 l
-4732 3645 l
-4734 3648 l
-4736 3650 l
-4736 3654 l
-4736 3659 l
-4736 3663 l
-4736 3668 l
-S
-4736 3668 m
-4736 3672 l
-4736 3677 l
-4738 3679 l
-4741 3681 l
-4741 3686 l
-4741 3690 l
-4741 3694 l
-4741 3699 l
-4741 3703 l
-4741 3708 l
-S
-4741 3708 m
-4743 3710 l
-4745 3712 l
-4745 3717 l
-4745 3721 l
-4745 3726 l
-4745 3730 l
-4745 3735 l
-4745 3739 l
-4745 3744 l
-4745 3748 l
-S
-4745 3748 m
-4747 3750 l
-4750 3753 l
-4750 3757 l
-4750 3762 l
-4750 3766 l
-4750 3770 l
-4750 3775 l
-4750 3779 l
-4750 3784 l
-4750 3788 l
-S
-4750 3788 m
-4750 3793 l
-4750 3797 l
-4752 3800 l
-4754 3802 l
-4754 3806 l
-4754 3811 l
-4754 3815 l
-4754 3820 l
-4754 3824 l
-4754 3829 l
-S
-4754 3829 m
-4754 3833 l
-4754 3838 l
-4754 3842 l
-4754 3846 l
-4754 3851 l
-4754 3855 l
-4754 3860 l
-4754 3864 l
-4754 3869 l
-S
-4754 3869 m
-4754 3873 l
-4756 3875 l
-S
-4754 4070 m
-4754 4065 l
-4754 4061 l
-4754 4056 l
-4754 4052 l
-4754 4048 l
-4754 4043 l
-4756 4041 l
-S
-4754 4070 m
-4754 4074 l
-4754 4079 l
-4754 4083 l
-4754 4088 l
-4754 4092 l
-4754 4097 l
-4754 4101 l
-4754 4106 l
-4754 4110 l
-S
-4754 4110 m
-4754 4115 l
-4752 4117 l
-4750 4119 l
-4750 4124 l
-4750 4128 l
-4750 4132 l
-4750 4137 l
-4750 4141 l
-4750 4146 l
-4750 4150 l
-S
-4750 4150 m
-4750 4155 l
-4750 4159 l
-4750 4164 l
-4750 4168 l
-4747 4170 l
-4745 4173 l
-4745 4177 l
-4745 4182 l
-4745 4186 l
-4745 4191 l
-S
-4745 4191 m
-4745 4195 l
-4745 4199 l
-4745 4204 l
-4745 4208 l
-4743 4211 l
-4741 4213 l
-4741 4217 l
-4741 4222 l
-4741 4226 l
-4741 4231 l
-S
-4741 4231 m
-4741 4235 l
-4741 4240 l
-4738 4242 l
-4736 4244 l
-4736 4249 l
-4736 4253 l
-4736 4258 l
-4736 4262 l
-4736 4267 l
-4736 4271 l
-S
-4736 4271 m
-4734 4273 l
-4732 4275 l
-4732 4280 l
-4732 4284 l
-4732 4289 l
-4732 4293 l
-4732 4298 l
-4730 4300 l
-4727 4302 l
-4727 4307 l
-4727 4311 l
-S
-4727 4311 m
-4727 4316 l
-4727 4320 l
-4727 4325 l
-4725 4327 l
-4723 4329 l
-4723 4334 l
-4723 4338 l
-4723 4342 l
-4723 4347 l
-4721 4349 l
-4718 4351 l
-S
-4716 4372 m
-4718 4369 l
-4718 4365 l
-4718 4360 l
-4718 4356 l
-4718 4351 l
-S
-4676 3384 m
-4678 3386 l
-S
-4678 3386 m
-4678 3391 l
-4678 3395 l
-4680 3397 l
-4683 3400 l
-4683 3404 l
-4683 3408 l
-4683 3413 l
-4685 3415 l
-4687 3417 l
-4687 3422 l
-4687 3426 l
-S
-4687 3426 m
-4687 3431 l
-4689 3433 l
-4692 3435 l
-4692 3440 l
-4692 3444 l
-4692 3449 l
-4694 3451 l
-4696 3453 l
-4696 3458 l
-4696 3462 l
-4696 3467 l
-S
-4696 3467 m
-4698 3469 l
-4701 3471 l
-4701 3476 l
-4701 3480 l
-4701 3484 l
-4703 3487 l
-4705 3489 l
-4705 3493 l
-4705 3498 l
-4705 3502 l
-4707 3505 l
-4709 3507 l
-S
-4709 3507 m
-4709 3511 l
-4709 3516 l
-4709 3520 l
-4709 3525 l
-4712 3527 l
-4714 3529 l
-4714 3534 l
-4714 3538 l
-4714 3543 l
-4716 3545 l
-S
-4714 4392 m
-4714 4387 l
-4714 4383 l
-4714 4378 l
-4714 4374 l
-4716 4372 l
-S
-4714 4392 m
-4712 4394 l
-4709 4396 l
-4709 4401 l
-4709 4405 l
-4709 4410 l
-4709 4414 l
-4707 4416 l
-4705 4418 l
-4705 4423 l
-4705 4427 l
-4705 4432 l
-S
-4705 4432 m
-4703 4434 l
-4701 4436 l
-4701 4441 l
-4701 4445 l
-4701 4450 l
-4698 4452 l
-4696 4454 l
-4696 4459 l
-4696 4463 l
-4696 4468 l
-4694 4470 l
-4692 4472 l
-S
-4692 4472 m
-4692 4477 l
-4692 4481 l
-4692 4486 l
-4689 4488 l
-4687 4490 l
-4687 4494 l
-4687 4499 l
-4687 4503 l
-4685 4506 l
-4683 4508 l
-4683 4512 l
-S
-4676 4537 m
-4678 4535 l
-4678 4530 l
-4678 4526 l
-4678 4521 l
-4680 4519 l
-4683 4517 l
-4683 4512 l
-S
-4636 3259 m
-4638 3261 l
-4638 3265 l
-S
-4638 3265 m
-4638 3270 l
-4640 3272 l
-4642 3274 l
-4642 3279 l
-4642 3283 l
-4645 3286 l
-4647 3288 l
-4647 3292 l
-4647 3297 l
-4649 3299 l
-4651 3301 l
-4651 3306 l
-S
-4651 3306 m
-4651 3310 l
-4654 3312 l
-4656 3315 l
-4656 3319 l
-4656 3324 l
-4658 3326 l
-4660 3328 l
-4660 3333 l
-4660 3337 l
-4663 3339 l
-4665 3341 l
-4665 3346 l
-S
-4665 3346 m
-4665 3350 l
-4667 3353 l
-4669 3355 l
-4669 3359 l
-4669 3364 l
-4669 3368 l
-4671 3371 l
-4674 3373 l
-4674 3377 l
-4674 3382 l
-4676 3384 l
-S
-4669 4553 m
-4671 4550 l
-4674 4548 l
-4674 4544 l
-4674 4539 l
-4676 4537 l
-S
-4669 4553 m
-4669 4557 l
-4669 4561 l
-4669 4566 l
-4667 4568 l
-4665 4570 l
-4665 4575 l
-4665 4579 l
-4663 4582 l
-4660 4584 l
-4660 4588 l
-4660 4593 l
-S
-4660 4593 m
-4658 4595 l
-4656 4597 l
-4656 4602 l
-4656 4606 l
-4654 4608 l
-4651 4611 l
-4651 4615 l
-4651 4620 l
-4649 4622 l
-4647 4624 l
-4647 4629 l
-4647 4633 l
-S
-4636 4662 m
-4638 4660 l
-4638 4655 l
-4638 4651 l
-4640 4649 l
-4642 4646 l
-4642 4642 l
-4642 4637 l
-4645 4635 l
-4647 4633 l
-S
-4595 3156 m
-4598 3158 l
-4598 3163 l
-4598 3167 l
-4600 3169 l
-4602 3172 l
-4602 3176 l
-4604 3178 l
-4607 3181 l
-4607 3185 l
-S
-4607 3185 m
-4607 3190 l
-4609 3192 l
-4611 3194 l
-4611 3198 l
-4613 3201 l
-4616 3203 l
-4616 3207 l
-4616 3212 l
-4618 3214 l
-4620 3216 l
-4620 3221 l
-4622 3223 l
-4625 3225 l
-S
-4625 3225 m
-4625 3230 l
-4625 3234 l
-4627 3236 l
-4629 3239 l
-4629 3243 l
-4629 3248 l
-4631 3250 l
-4633 3252 l
-4633 3257 l
-4636 3259 l
-S
-4629 4673 m
-4631 4671 l
-4633 4669 l
-4633 4664 l
-4636 4662 l
-S
-4629 4673 m
-4629 4678 l
-4629 4682 l
-4627 4684 l
-4625 4687 l
-4625 4691 l
-4625 4696 l
-4622 4698 l
-4620 4700 l
-4620 4704 l
-4618 4707 l
-4616 4709 l
-4616 4713 l
-S
-4616 4713 m
-4616 4718 l
-4613 4720 l
-4611 4722 l
-4611 4727 l
-4609 4729 l
-4607 4731 l
-4607 4736 l
-4607 4740 l
-4604 4742 l
-4602 4745 l
-4602 4749 l
-4600 4751 l
-4598 4754 l
-S
-4595 4765 m
-4598 4763 l
-4598 4758 l
-4598 4754 l
-S
-4555 3067 m
-4557 3069 l
-4557 3073 l
-4560 3076 l
-4562 3078 l
-4562 3082 l
-4562 3087 l
-4564 3089 l
-4566 3091 l
-4566 3096 l
-4569 3098 l
-4571 3100 l
-4571 3105 l
-S
-4571 3105 m
-4573 3107 l
-4575 3109 l
-4575 3114 l
-4578 3116 l
-4580 3118 l
-4580 3122 l
-4582 3125 l
-4584 3127 l
-4584 3131 l
-4584 3136 l
-4587 3138 l
-4589 3140 l
-4589 3145 l
-S
-4589 3145 m
-4591 3147 l
-4593 3149 l
-4593 3154 l
-4595 3156 l
-S
-4580 4794 m
-4582 4792 l
-4584 4789 l
-4584 4785 l
-4587 4783 l
-4589 4780 l
-4589 4776 l
-4591 4774 l
-4593 4772 l
-4593 4767 l
-4595 4765 l
-S
-4580 4794 m
-4580 4798 l
-4580 4803 l
-4578 4805 l
-4575 4807 l
-4575 4812 l
-4573 4814 l
-4571 4816 l
-4571 4821 l
-4569 4823 l
-4566 4825 l
-4566 4830 l
-4564 4832 l
-4562 4834 l
-S
-4555 4854 m
-4557 4852 l
-4557 4847 l
-4557 4843 l
-4560 4841 l
-4562 4839 l
-4562 4834 l
-S
-4515 2991 m
-4517 2993 l
-4520 2995 l
-4522 2997 l
-4522 3002 l
-4524 3004 l
-4526 3006 l
-4526 3011 l
-4528 3013 l
-4531 3015 l
-4531 3020 l
-4533 3022 l
-4535 3024 l
-S
-4535 3024 m
-4535 3029 l
-4537 3031 l
-4540 3033 l
-4540 3038 l
-4542 3040 l
-4544 3042 l
-4544 3047 l
-4546 3049 l
-4549 3051 l
-4549 3055 l
-4551 3058 l
-4553 3060 l
-4553 3064 l
-S
-4555 3067 m
-4553 3064 l
-S
-4544 4874 m
-4546 4872 l
-4549 4870 l
-4549 4865 l
-4551 4863 l
-4553 4861 l
-4553 4856 l
-4555 4854 l
-S
-4544 4874 m
-4544 4879 l
-4542 4881 l
-4540 4883 l
-4540 4888 l
-4537 4890 l
-4535 4892 l
-4535 4897 l
-4533 4899 l
-4531 4901 l
-4531 4906 l
-4528 4908 l
-4526 4910 l
-4526 4915 l
-S
-4515 4930 m
-4517 4928 l
-4517 4923 l
-4520 4921 l
-4522 4919 l
-4524 4917 l
-4526 4915 l
-S
-4475 2915 m
-4477 2917 l
-4477 2921 l
-4479 2924 l
-4482 2926 l
-4482 2930 l
-4484 2933 l
-4486 2935 l
-4486 2939 l
-4488 2941 l
-4490 2944 l
-S
-4490 2944 m
-4493 2946 l
-4495 2948 l
-4495 2953 l
-4497 2955 l
-4499 2957 l
-4499 2962 l
-4502 2964 l
-4504 2966 l
-4504 2971 l
-4506 2973 l
-4508 2975 l
-4508 2979 l
-4511 2982 l
-4513 2984 l
-S
-4513 2984 m
-4513 2988 l
-4515 2991 l
-S
-4504 4955 m
-4504 4950 l
-4506 4948 l
-4508 4946 l
-4508 4941 l
-4511 4939 l
-4513 4937 l
-4513 4932 l
-4515 4930 l
-S
-4504 4955 m
-4502 4957 l
-4499 4959 l
-4499 4964 l
-4497 4966 l
-4495 4968 l
-4493 4970 l
-4490 4973 l
-4490 4977 l
-4488 4979 l
-4486 4982 l
-4486 4986 l
-4484 4988 l
-4482 4990 l
-4482 4995 l
-S
-4475 5002 m
-4477 4999 l
-4479 4997 l
-4482 4995 l
-S
-4435 2852 m
-4437 2854 l
-4439 2857 l
-4441 2859 l
-4441 2863 l
-S
-4441 2863 m
-4444 2866 l
-4446 2868 l
-4448 2870 l
-4450 2872 l
-4450 2877 l
-4452 2879 l
-4455 2881 l
-4455 2886 l
-4457 2888 l
-4459 2890 l
-4461 2892 l
-4464 2895 l
-4464 2899 l
-4466 2901 l
-4468 2903 l
-S
-4468 2903 m
-4468 2908 l
-4470 2910 l
-4473 2912 l
-4475 2915 l
-S
-4455 5035 m
-4457 5033 l
-4459 5031 l
-4459 5026 l
-4461 5024 l
-4464 5022 l
-4466 5020 l
-4468 5017 l
-4468 5013 l
-4470 5011 l
-4473 5008 l
-4473 5004 l
-4475 5002 l
-S
-4435 5069 m
-4437 5066 l
-4439 5064 l
-4441 5062 l
-4441 5058 l
-4444 5055 l
-4446 5053 l
-4446 5049 l
-4448 5046 l
-4450 5044 l
-4452 5042 l
-4455 5040 l
-4455 5035 l
-S
-4394 2790 m
-4397 2792 l
-4397 2796 l
-4399 2798 l
-4401 2801 l
-4403 2803 l
-4406 2805 l
-4406 2810 l
-4408 2812 l
-4410 2814 l
-4412 2816 l
-4414 2819 l
-4414 2823 l
-S
-4414 2823 m
-4417 2825 l
-4419 2828 l
-4421 2830 l
-4423 2832 l
-4423 2836 l
-4426 2839 l
-4428 2841 l
-4430 2843 l
-4432 2845 l
-4432 2850 l
-4435 2852 l
-S
-4432 5075 m
-4432 5071 l
-4435 5069 l
-S
-4432 5075 m
-4430 5078 l
-4428 5080 l
-4426 5082 l
-4423 5084 l
-4423 5089 l
-4421 5091 l
-4419 5093 l
-4417 5096 l
-4414 5098 l
-4414 5102 l
-4412 5104 l
-4410 5107 l
-4408 5109 l
-4406 5111 l
-4406 5116 l
-S
-4394 5131 m
-4397 5129 l
-4397 5125 l
-4399 5122 l
-4401 5120 l
-4403 5118 l
-4406 5116 l
-S
-4354 2736 m
-4356 2738 l
-4359 2740 l
-4361 2743 l
-S
-4361 2743 m
-4363 2745 l
-4365 2747 l
-4365 2752 l
-4368 2754 l
-4370 2756 l
-4372 2758 l
-4374 2760 l
-4377 2763 l
-4379 2765 l
-4379 2769 l
-4381 2772 l
-4383 2774 l
-4385 2776 l
-4388 2778 l
-4388 2783 l
-S
-4388 2783 m
-4390 2785 l
-4392 2787 l
-4394 2790 l
-S
-4374 5156 m
-4377 5154 l
-4379 5151 l
-4381 5149 l
-4383 5147 l
-4385 5145 l
-4388 5142 l
-4388 5138 l
-4390 5136 l
-4392 5133 l
-4394 5131 l
-S
-4354 5185 m
-4356 5183 l
-4359 5180 l
-4361 5178 l
-4363 5176 l
-4365 5174 l
-4365 5169 l
-4368 5167 l
-4370 5165 l
-4372 5163 l
-4374 5160 l
-4374 5156 l
-S
-4314 2682 m
-4316 2685 l
-4318 2687 l
-4321 2689 l
-4323 2691 l
-4325 2693 l
-4325 2698 l
-4327 2700 l
-4330 2702 l
-S
-4330 2702 m
-4332 2705 l
-4334 2707 l
-4336 2709 l
-4339 2711 l
-4339 2716 l
-4341 2718 l
-4343 2720 l
-4345 2723 l
-4347 2725 l
-4350 2727 l
-4352 2729 l
-4352 2734 l
-4354 2736 l
-S
-4347 5196 m
-4350 5194 l
-4352 5192 l
-4352 5187 l
-4354 5185 l
-S
-4347 5196 m
-4345 5198 l
-4343 5201 l
-4341 5203 l
-4339 5205 l
-4339 5209 l
-4336 5212 l
-4334 5214 l
-4332 5216 l
-4330 5218 l
-4327 5221 l
-4325 5223 l
-4325 5227 l
-4323 5230 l
-4321 5232 l
-4318 5234 l
-4316 5236 l
-S
-4314 5239 m
-4316 5236 l
-S
-4274 2633 m
-4276 2635 l
-4278 2638 l
-4280 2640 l
-4283 2642 l
-4285 2644 l
-4287 2647 l
-4289 2649 l
-4289 2653 l
-4292 2655 l
-4294 2658 l
-4296 2660 l
-4298 2662 l
-S
-4298 2662 m
-4301 2664 l
-4303 2667 l
-4305 2669 l
-4307 2671 l
-4309 2673 l
-4312 2676 l
-4312 2680 l
-4314 2682 l
-S
-4314 5239 m
-4312 5241 l
-4309 5243 l
-4307 5245 l
-4307 5250 l
-4305 5252 l
-4303 5254 l
-4301 5256 l
-4298 5259 l
-4296 5261 l
-4294 5263 l
-4292 5265 l
-4289 5268 l
-4289 5272 l
-4287 5274 l
-4285 5277 l
-S
-4274 5288 m
-4276 5285 l
-4278 5283 l
-4280 5281 l
-4283 5279 l
-4285 5277 l
-S
-4233 2584 m
-4236 2586 l
-4238 2588 l
-4240 2591 l
-4240 2595 l
-4242 2597 l
-4245 2600 l
-4247 2602 l
-4249 2604 l
-4251 2606 l
-4254 2609 l
-4256 2611 l
-4258 2613 l
-4260 2615 l
-4263 2617 l
-4265 2620 l
-4267 2622 l
-S
-4267 2622 m
-4267 2626 l
-4269 2629 l
-4271 2631 l
-4274 2633 l
-S
-4249 5317 m
-4251 5314 l
-4254 5312 l
-4256 5310 l
-4258 5308 l
-4260 5306 l
-4263 5303 l
-4265 5301 l
-4267 5299 l
-4267 5294 l
-4269 5292 l
-4271 5290 l
-4274 5288 l
-S
-4233 5337 m
-4236 5335 l
-4236 5330 l
-4238 5328 l
-4240 5326 l
-4242 5323 l
-4245 5321 l
-4247 5319 l
-4249 5317 l
-S
-4193 2544 m
-4196 2546 l
-4198 2548 l
-4200 2550 l
-4202 2553 l
-4204 2555 l
-4207 2557 l
-4209 2559 l
-4211 2562 l
-4213 2564 l
-4216 2566 l
-4218 2568 l
-4220 2571 l
-4222 2573 l
-4225 2575 l
-4227 2577 l
-4229 2579 l
-4231 2582 l
-S
-4233 2584 m
-4231 2582 l
-S
-4213 5357 m
-4216 5355 l
-4218 5352 l
-4220 5350 l
-4222 5348 l
-4225 5346 l
-4227 5344 l
-4229 5341 l
-4231 5339 l
-4233 5337 l
-S
-4193 5377 m
-4196 5375 l
-4198 5373 l
-4200 5370 l
-4202 5368 l
-4204 5366 l
-4207 5364 l
-4209 5361 l
-4211 5359 l
-4213 5357 l
-S
-4153 2499 m
-4155 2501 l
-S
-4155 2501 m
-4158 2504 l
-4160 2506 l
-4162 2508 l
-4164 2510 l
-4166 2512 l
-4169 2515 l
-4171 2517 l
-4173 2519 l
-4175 2521 l
-4178 2524 l
-4180 2526 l
-4182 2528 l
-4184 2530 l
-4187 2533 l
-4189 2535 l
-4191 2537 l
-4191 2542 l
-S
-4193 2544 m
-4191 2542 l
-S
-4173 5397 m
-4175 5395 l
-4178 5393 l
-4180 5390 l
-4182 5388 l
-4184 5386 l
-4187 5384 l
-4189 5382 l
-4191 5379 l
-4193 5377 l
-S
-4153 5422 m
-4155 5420 l
-4158 5417 l
-4160 5415 l
-4162 5413 l
-4164 5411 l
-4166 5408 l
-4169 5406 l
-4171 5404 l
-4173 5402 l
-4173 5397 l
-S
-4113 2463 m
-4117 2463 l
-4120 2466 l
-4122 2468 l
-4124 2470 l
-4126 2472 l
-4128 2474 l
-4131 2477 l
-4133 2479 l
-4135 2481 l
-4137 2483 l
-4140 2486 l
-4142 2488 l
-4144 2490 l
-4146 2492 l
-4149 2495 l
-4151 2497 l
-4153 2499 l
-S
-4137 5437 m
-4140 5435 l
-4142 5433 l
-4144 5431 l
-4146 5428 l
-4149 5426 l
-4151 5424 l
-4153 5422 l
-S
-4113 5457 m
-4115 5455 l
-4117 5453 l
-4120 5451 l
-4122 5449 l
-4124 5446 l
-4126 5444 l
-4128 5442 l
-4131 5440 l
-4135 5440 l
-4137 5437 l
-S
-4073 2423 m
-4075 2425 l
-4077 2428 l
-4079 2430 l
-4082 2432 l
-4084 2434 l
-4086 2436 l
-4088 2439 l
-4090 2441 l
-4093 2443 l
-4095 2445 l
-4097 2448 l
-4099 2450 l
-4102 2452 l
-4104 2454 l
-4106 2457 l
-4108 2459 l
-4111 2461 l
-S
-4113 2463 m
-4111 2461 l
-S
-4093 5478 m
-4095 5475 l
-4097 5473 l
-4099 5471 l
-4102 5469 l
-4104 5466 l
-4106 5464 l
-4108 5462 l
-4111 5460 l
-4113 5457 l
-S
-4073 5498 m
-4075 5495 l
-4077 5493 l
-4079 5491 l
-4082 5489 l
-4084 5487 l
-4086 5484 l
-4088 5482 l
-4090 5480 l
-4093 5478 l
-S
-4032 2387 m
-4035 2390 l
-4037 2392 l
-4039 2394 l
-4041 2396 l
-4044 2399 l
-4046 2401 l
-4048 2403 l
-4050 2405 l
-4053 2407 l
-4055 2410 l
-4057 2412 l
-4059 2414 l
-4064 2414 l
-4066 2416 l
-4068 2419 l
-4070 2421 l
-S
-4073 2423 m
-4070 2421 l
-S
-4048 5518 m
-4050 5516 l
-4053 5513 l
-4055 5511 l
-4057 5509 l
-4059 5507 l
-4061 5504 l
-4064 5502 l
-4068 5502 l
-4070 5500 l
-4073 5498 l
-S
-4032 5529 m
-4037 5529 l
-4039 5527 l
-4041 5525 l
-4044 5522 l
-4046 5520 l
-4048 5518 l
-S
-3992 2356 m
-3994 2358 l
-3997 2361 l
-3999 2363 l
-4001 2365 l
-4006 2365 l
-4008 2367 l
-4010 2369 l
-4012 2372 l
-4015 2374 l
-4017 2376 l
-4019 2378 l
-4021 2381 l
-S
-4021 2381 m
-4023 2383 l
-4026 2385 l
-4028 2387 l
-4032 2387 l
-S
-3999 5558 m
-4001 5556 l
-4006 5556 l
-4008 5554 l
-4010 5551 l
-4012 5549 l
-4015 5547 l
-4017 5545 l
-4019 5542 l
-4021 5540 l
-4023 5538 l
-4026 5536 l
-4028 5533 l
-4030 5531 l
-4032 5529 l
-S
-3992 5565 m
-3994 5563 l
-3997 5560 l
-3999 5558 l
-S
-3952 2325 m
-3954 2327 l
-3956 2329 l
-3961 2329 l
-3963 2331 l
-3965 2334 l
-3968 2336 l
-3970 2338 l
-3972 2340 l
-S
-3972 2340 m
-3974 2343 l
-3979 2343 l
-3981 2345 l
-3983 2347 l
-3985 2349 l
-3988 2352 l
-3990 2354 l
-3992 2356 l
-S
-3952 5596 m
-3954 5594 l
-3956 5592 l
-3961 5592 l
-3963 5589 l
-3965 5587 l
-3968 5585 l
-3970 5583 l
-3972 5580 l
-3974 5578 l
-3977 5576 l
-3979 5574 l
-3983 5574 l
-3985 5571 l
-3988 5569 l
-3990 5567 l
-3992 5565 l
-S
-3912 2293 m
-3914 2296 l
-3916 2298 l
-3918 2300 l
-S
-3918 2300 m
-3921 2302 l
-3925 2302 l
-3927 2305 l
-3930 2307 l
-3932 2309 l
-3934 2311 l
-3936 2314 l
-3939 2316 l
-3943 2316 l
-3945 2318 l
-3947 2320 l
-3950 2323 l
-3952 2325 l
-S
-3950 5598 m
-3952 5596 l
-S
-3912 5627 m
-3914 5625 l
-3916 5623 l
-3918 5621 l
-3921 5618 l
-3925 5618 l
-3927 5616 l
-3930 5614 l
-3932 5612 l
-3934 5609 l
-3936 5607 l
-3939 5605 l
-3943 5605 l
-3945 5603 l
-3947 5601 l
-3950 5598 l
-S
-3872 2267 m
-3876 2267 l
-3878 2269 l
-3880 2271 l
-3883 2273 l
-3885 2276 l
-3889 2276 l
-3892 2278 l
-3894 2280 l
-3896 2282 l
-3898 2285 l
-3901 2287 l
-3903 2289 l
-3907 2289 l
-3909 2291 l
-3912 2293 l
-S
-3896 5638 m
-3898 5636 l
-3901 5634 l
-3903 5632 l
-3907 5632 l
-3909 5630 l
-3912 5627 l
-S
-3872 5654 m
-3876 5654 l
-3878 5652 l
-3880 5650 l
-3883 5647 l
-3885 5645 l
-3887 5643 l
-3889 5641 l
-3894 5641 l
-3896 5638 l
-S
-3831 2240 m
-3836 2240 l
-3838 2242 l
-3840 2244 l
-3842 2247 l
-3845 2249 l
-3849 2249 l
-3851 2251 l
-3854 2253 l
-3856 2256 l
-3858 2258 l
-3863 2258 l
-3865 2260 l
-S
-3865 2260 m
-3867 2262 l
-3869 2264 l
-3872 2267 l
-S
-3838 5679 m
-3840 5676 l
-3842 5674 l
-3845 5672 l
-3849 5672 l
-3851 5670 l
-3854 5668 l
-3856 5665 l
-3858 5663 l
-3863 5663 l
-3865 5661 l
-3867 5659 l
-3869 5656 l
-3872 5654 l
-S
-3831 5681 m
-3836 5681 l
-3838 5679 l
-S
-3791 2213 m
-3796 2213 l
-3798 2215 l
-3800 2218 l
-3802 2220 l
-S
-3802 2220 m
-3804 2222 l
-3809 2222 l
-3811 2224 l
-3813 2226 l
-3816 2229 l
-3818 2231 l
-3822 2231 l
-3825 2233 l
-3827 2235 l
-3829 2238 l
-3831 2240 l
-S
-3831 5681 m
-3829 5683 l
-3827 5685 l
-3825 5688 l
-3822 5690 l
-3818 5690 l
-3816 5692 l
-3813 5694 l
-3811 5697 l
-3809 5699 l
-3804 5699 l
-3802 5701 l
-3800 5703 l
-3796 5703 l
-3793 5706 l
-3791 5708 l
-S
-3751 2186 m
-3753 2188 l
-3755 2191 l
-3760 2191 l
-3762 2193 l
-3764 2195 l
-3766 2197 l
-3769 2200 l
-3773 2200 l
-3775 2202 l
-3778 2204 l
-3782 2204 l
-3784 2206 l
-3787 2209 l
-3789 2211 l
-3791 2213 l
-S
-3775 5719 m
-3778 5717 l
-3780 5714 l
-3782 5712 l
-3787 5712 l
-3789 5710 l
-3791 5708 l
-S
-3751 5735 m
-3753 5732 l
-3755 5730 l
-3758 5728 l
-3760 5726 l
-3764 5726 l
-3766 5723 l
-3769 5721 l
-3773 5721 l
-3775 5719 l
-S
-3711 2164 m
-3713 2166 l
-3715 2168 l
-3720 2168 l
-3722 2171 l
-3724 2173 l
-3729 2173 l
-3731 2175 l
-3733 2177 l
-3737 2177 l
-3740 2180 l
-S
-3740 2180 m
-3742 2182 l
-3744 2184 l
-3746 2186 l
-3751 2186 l
-S
-3711 5757 m
-3713 5755 l
-3715 5752 l
-3720 5752 l
-3722 5750 l
-3724 5748 l
-3729 5748 l
-3731 5746 l
-3733 5744 l
-3735 5741 l
-3737 5739 l
-3742 5739 l
-3744 5737 l
-3746 5735 l
-3751 5735 l
-S
-3670 2142 m
-3673 2144 l
-3675 2146 l
-3679 2146 l
-3682 2148 l
-3684 2150 l
-3688 2150 l
-3691 2153 l
-3693 2155 l
-3697 2155 l
-3699 2157 l
-3702 2159 l
-3706 2159 l
-3708 2162 l
-3711 2164 l
-S
-3704 5759 m
-3706 5757 l
-3711 5757 l
-S
-3670 5779 m
-3673 5777 l
-3675 5775 l
-3679 5775 l
-3682 5773 l
-3684 5770 l
-3688 5770 l
-3691 5768 l
-3693 5766 l
-3697 5766 l
-3699 5764 l
-3702 5761 l
-3704 5759 l
-S
-3630 2119 m
-3632 2121 l
-3635 2124 l
-3639 2124 l
-3641 2126 l
-3644 2128 l
-3648 2128 l
-3650 2130 l
-3653 2133 l
-3657 2133 l
-3659 2135 l
-3661 2137 l
-3664 2139 l
-S
-3670 2142 m
-3666 2142 l
-3664 2139 l
-S
-3630 5797 m
-3635 5797 l
-3637 5795 l
-3639 5793 l
-3644 5793 l
-3646 5790 l
-3648 5788 l
-3653 5788 l
-3655 5786 l
-3657 5784 l
-3661 5784 l
-3664 5781 l
-3666 5779 l
-3670 5779 l
-S
-3590 2101 m
-3594 2101 l
-3597 2104 l
-3599 2106 l
-3603 2106 l
-3606 2108 l
-3608 2110 l
-3612 2110 l
-3615 2112 l
-3617 2115 l
-3621 2115 l
-3623 2117 l
-3626 2119 l
-3630 2119 l
-S
-3628 5799 m
-3630 5797 l
-S
-3590 5819 m
-3592 5817 l
-3594 5815 l
-3599 5815 l
-3601 5813 l
-3603 5811 l
-3608 5811 l
-3612 5811 l
-3615 5808 l
-3617 5806 l
-3621 5806 l
-3623 5804 l
-3626 5802 l
-3628 5799 l
-S
-3550 2083 m
-3554 2083 l
-3556 2086 l
-3559 2088 l
-3563 2088 l
-3565 2090 l
-3568 2092 l
-3572 2092 l
-3577 2092 l
-3579 2095 l
-3581 2097 l
-3585 2097 l
-3588 2099 l
-S
-3590 2101 m
-3588 2099 l
-S
-3550 5837 m
-3554 5837 l
-3556 5835 l
-3559 5833 l
-3563 5833 l
-3565 5831 l
-3568 5828 l
-3572 5828 l
-3574 5826 l
-3577 5824 l
-3581 5824 l
-3583 5822 l
-3585 5819 l
-3590 5819 l
-S
-3510 2066 m
-3514 2066 l
-3516 2068 l
-3518 2070 l
-3523 2070 l
-3527 2070 l
-3530 2072 l
-3532 2075 l
-3536 2075 l
-3539 2077 l
-3541 2079 l
-3545 2079 l
-3548 2081 l
-3550 2083 l
-S
-3548 5840 m
-3550 5837 l
-S
-3510 5855 m
-3514 5855 l
-3516 5853 l
-3518 5851 l
-3523 5851 l
-3525 5849 l
-3527 5846 l
-3532 5846 l
-3536 5846 l
-3539 5844 l
-3541 5842 l
-3545 5842 l
-3548 5840 l
-S
-3469 2048 m
-3474 2048 l
-3476 2050 l
-3478 2052 l
-3483 2052 l
-3485 2054 l
-3487 2057 l
-3492 2057 l
-3496 2057 l
-3498 2059 l
-S
-3498 2059 m
-3501 2061 l
-3505 2061 l
-3507 2063 l
-3510 2066 l
-S
-3469 5873 m
-3472 5871 l
-3474 5869 l
-3478 5869 l
-3483 5869 l
-3485 5866 l
-3487 5864 l
-3492 5864 l
-3494 5862 l
-3496 5860 l
-3501 5860 l
-3505 5860 l
-3507 5857 l
-3510 5855 l
-S
-3429 2030 m
-3431 2032 l
-3434 2034 l
-3438 2034 l
-3440 2037 l
-3442 2039 l
-3447 2039 l
-3451 2039 l
-3454 2041 l
-3456 2043 l
-3460 2043 l
-3463 2045 l
-3465 2048 l
-3469 2048 l
-S
-3454 5880 m
-3456 5878 l
-3460 5878 l
-3463 5875 l
-3465 5873 l
-3469 5873 l
-S
-3429 5887 m
-3434 5887 l
-3438 5887 l
-3440 5884 l
-3442 5882 l
-3447 5882 l
-3451 5882 l
-3454 5880 l
-S
-3389 2016 m
-3393 2016 l
-3396 2019 l
-S
-3396 2019 m
-3398 2021 l
-3402 2021 l
-3405 2023 l
-3407 2025 l
-3411 2025 l
-3416 2025 l
-3418 2028 l
-3420 2030 l
-3425 2030 l
-3429 2030 l
-S
-3389 5904 m
-3391 5902 l
-3393 5900 l
-3398 5900 l
-3402 5900 l
-3405 5898 l
-3407 5895 l
-3411 5895 l
-3416 5895 l
-3418 5893 l
-3420 5891 l
-3425 5891 l
-3427 5889 l
-3429 5887 l
-S
-3349 2003 m
-3353 2003 l
-3355 2005 l
-3358 2007 l
-3362 2007 l
-3367 2007 l
-3369 2010 l
-3371 2012 l
-3375 2012 l
-3380 2012 l
-3382 2014 l
-3384 2016 l
-3389 2016 l
-S
-3349 5918 m
-3353 5918 l
-3355 5916 l
-3358 5913 l
-3362 5913 l
-3367 5913 l
-3369 5911 l
-3371 5909 l
-3375 5909 l
-3378 5907 l
-3380 5904 l
-3384 5904 l
-3389 5904 l
-S
-3308 1990 m
-3313 1990 l
-3315 1992 l
-3317 1994 l
-3322 1994 l
-3326 1994 l
-3329 1996 l
-3331 1999 l
-3335 1999 l
-3340 1999 l
-3342 2001 l
-3344 2003 l
-3349 2003 l
-S
-3342 5920 m
-3344 5918 l
-3349 5918 l
-S
-3308 5931 m
-3311 5929 l
-3313 5927 l
-3317 5927 l
-3322 5927 l
-3326 5927 l
-3329 5925 l
-3331 5922 l
-3335 5922 l
-3340 5922 l
-3342 5920 l
-S
-3268 1976 m
-3270 1978 l
-S
-3270 1978 m
-3273 1981 l
-3277 1981 l
-3282 1981 l
-3284 1983 l
-3286 1985 l
-3291 1985 l
-3295 1985 l
-3299 1985 l
-3302 1987 l
-3304 1990 l
-3308 1990 l
-S
-3268 5940 m
-3273 5940 l
-3277 5940 l
-3282 5940 l
-3284 5938 l
-3286 5936 l
-3291 5936 l
-3295 5936 l
-3297 5933 l
-3299 5931 l
-3304 5931 l
-3308 5931 l
-S
-3228 1967 m
-3232 1967 l
-3237 1967 l
-3239 1969 l
-3241 1972 l
-3246 1972 l
-3250 1972 l
-3255 1972 l
-3257 1974 l
-3259 1976 l
-3264 1976 l
-3268 1976 l
-S
-3228 5954 m
-3232 5954 l
-3235 5951 l
-3237 5949 l
-3241 5949 l
-3246 5949 l
-3250 5949 l
-3253 5947 l
-3255 5945 l
-3259 5945 l
-3264 5945 l
-3266 5942 l
-3268 5940 l
-S
-3188 1958 m
-3192 1958 l
-3197 1958 l
-3201 1958 l
-3203 1961 l
-3206 1963 l
-3210 1963 l
-3215 1963 l
-3219 1963 l
-3221 1965 l
-3224 1967 l
-3228 1967 l
-S
-3203 5960 m
-3206 5958 l
-3210 5958 l
-3215 5958 l
-3219 5958 l
-3221 5956 l
-3224 5954 l
-3228 5954 l
-S
-3188 5962 m
-3192 5962 l
-3197 5962 l
-3201 5962 l
-3203 5960 l
-S
-3148 1945 m
-3150 1947 l
-3152 1949 l
-3156 1949 l
-3161 1949 l
-3165 1949 l
-3168 1952 l
-3170 1954 l
-3174 1954 l
-3179 1954 l
-3183 1954 l
-3186 1956 l
-3188 1958 l
-S
-3188 5962 m
-3186 5965 l
-3183 5967 l
-3179 5967 l
-3174 5967 l
-3170 5967 l
-3168 5969 l
-3165 5971 l
-3161 5971 l
-3156 5971 l
-3152 5971 l
-3148 5971 l
-S
-3107 1936 m
-3110 1938 l
-S
-3110 1938 m
-3112 1940 l
-3116 1940 l
-3121 1940 l
-3125 1940 l
-3127 1943 l
-3130 1945 l
-3134 1945 l
-3139 1945 l
-3143 1945 l
-3148 1945 l
-S
-3107 5980 m
-3112 5980 l
-3116 5980 l
-3121 5980 l
-3125 5980 l
-3127 5978 l
-3130 5976 l
-3134 5976 l
-3139 5976 l
-3143 5976 l
-3145 5974 l
-3148 5971 l
-S
-3067 1932 m
-3072 1932 l
-3076 1932 l
-3081 1932 l
-3085 1932 l
-3087 1934 l
-3089 1936 l
-3094 1936 l
-3098 1936 l
-3103 1936 l
-3107 1936 l
-S
-3067 5989 m
-3072 5989 l
-3076 5989 l
-3081 5989 l
-3083 5987 l
-3085 5985 l
-3089 5985 l
-3094 5985 l
-3098 5985 l
-3103 5985 l
-3105 5983 l
-3107 5980 l
-S
-3027 1923 m
-3031 1923 l
-3036 1923 l
-3038 1925 l
-3040 1927 l
-3045 1927 l
-3049 1927 l
-3054 1927 l
-3058 1927 l
-3060 1929 l
-3063 1932 l
-3067 1932 l
-S
-3027 5998 m
-3031 5998 l
-3034 5996 l
-3036 5994 l
-3040 5994 l
-3045 5994 l
-3049 5994 l
-3054 5994 l
-3056 5992 l
-3058 5989 l
-3063 5989 l
-3067 5989 l
-S
-2987 1918 m
-2991 1918 l
-2996 1918 l
-3000 1918 l
-3005 1918 l
-3007 1920 l
-3009 1923 l
-3013 1923 l
-3018 1923 l
-3022 1923 l
-3027 1923 l
-S
-3002 6000 m
-3005 5998 l
-3009 5998 l
-3013 5998 l
-3018 5998 l
-3022 5998 l
-3027 5998 l
-S
-2987 6003 m
-2991 6003 l
-2996 6003 l
-3000 6003 l
-3002 6000 l
-S
-2946 1914 m
-2951 1914 l
-2955 1914 l
-2960 1914 l
-2964 1914 l
-2969 1914 l
-2973 1914 l
-2975 1916 l
-2978 1918 l
-2982 1918 l
-2987 1918 l
-S
-2987 6003 m
-2982 6003 l
-2978 6003 l
-2973 6003 l
-2971 6005 l
-2969 6007 l
-2964 6007 l
-2960 6007 l
-2955 6007 l
-2951 6007 l
-2946 6007 l
-S
-2906 1909 m
-2911 1909 l
-2915 1909 l
-2920 1909 l
-2924 1909 l
-2929 1909 l
-2933 1909 l
-2938 1909 l
-2942 1909 l
-2944 1911 l
-2946 1914 l
-S
-2906 6012 m
-2911 6012 l
-2915 6012 l
-2920 6012 l
-2924 6012 l
-2929 6012 l
-2933 6012 l
-2935 6009 l
-2938 6007 l
-2942 6007 l
-2946 6007 l
-S
-2866 1905 m
-2870 1905 l
-2875 1905 l
-2879 1905 l
-2884 1905 l
-2888 1905 l
-2893 1905 l
-2897 1905 l
-2902 1905 l
-2904 1907 l
-2906 1909 l
-S
-2866 6016 m
-2870 6016 l
-2875 6016 l
-2879 6016 l
-2884 6016 l
-2888 6016 l
-2893 6016 l
-2895 6014 l
-2897 6012 l
-2902 6012 l
-2906 6012 l
-S
-2826 1900 m
-2830 1900 l
-2835 1900 l
-2839 1900 l
-2844 1900 l
-2848 1900 l
-2853 1900 l
-2855 1902 l
-2857 1905 l
-2862 1905 l
-2866 1905 l
-S
-2826 6021 m
-2830 6021 l
-2835 6021 l
-2839 6021 l
-2841 6018 l
-2844 6016 l
-2848 6016 l
-2853 6016 l
-2857 6016 l
-2862 6016 l
-2866 6016 l
-S
-2826 1900 m
-2821 1900 l
-2817 1900 l
-2812 1900 l
-2808 1900 l
-2803 1900 l
-2799 1900 l
-2794 1900 l
-2790 1900 l
-2786 1900 l
-S
-2786 6021 m
-2790 6021 l
-2794 6021 l
-2799 6021 l
-2803 6021 l
-2808 6021 l
-2812 6021 l
-2817 6021 l
-2821 6021 l
-2826 6021 l
-S
-2745 1896 m
-2750 1896 l
-2754 1896 l
-2759 1896 l
-2763 1896 l
-2768 1896 l
-2772 1896 l
-2777 1896 l
-2779 1898 l
-S
-2786 1900 m
-2781 1900 l
-2779 1898 l
-S
-2745 6025 m
-2750 6025 l
-2754 6025 l
-2757 6023 l
-2759 6021 l
-2763 6021 l
-2768 6021 l
-2772 6021 l
-2777 6021 l
-2781 6021 l
-2786 6021 l
-S
-2705 1896 m
-2710 1896 l
-2714 1896 l
-2719 1896 l
-2723 1896 l
-2727 1896 l
-2732 1896 l
-2736 1896 l
-2741 1896 l
-2745 1896 l
-S
-2705 6025 m
-2710 6025 l
-2714 6025 l
-2719 6025 l
-2723 6025 l
-2727 6025 l
-2732 6025 l
-2736 6025 l
-2741 6025 l
-2745 6025 l
-S
-2665 1896 m
-2669 1896 l
-2674 1896 l
-2678 1896 l
-2683 1896 l
-2687 1896 l
-2692 1896 l
-2696 1896 l
-2701 1896 l
-2705 1896 l
-S
-2665 6025 m
-2669 6025 l
-2674 6025 l
-2678 6025 l
-2683 6025 l
-2687 6025 l
-2692 6025 l
-2696 6025 l
-2701 6025 l
-2705 6025 l
-S
-2625 1896 m
-2629 1896 l
-2634 1896 l
-2638 1896 l
-2643 1896 l
-2647 1896 l
-2651 1896 l
-2656 1896 l
-2660 1896 l
-2665 1896 l
-S
-2625 6021 m
-2629 6021 l
-2631 6023 l
-2634 6025 l
-2638 6025 l
-2643 6025 l
-2647 6025 l
-2651 6025 l
-2656 6025 l
-2660 6025 l
-2665 6025 l
-S
-2614 1898 m
-2616 1896 l
-2620 1896 l
-2625 1896 l
-S
-2584 1900 m
-2589 1900 l
-2593 1900 l
-2598 1900 l
-2602 1900 l
-2607 1900 l
-2611 1900 l
-2614 1898 l
-S
-2584 6021 m
-2589 6021 l
-2593 6021 l
-2598 6021 l
-2602 6021 l
-2607 6021 l
-2611 6021 l
-2616 6021 l
-2620 6021 l
-2625 6021 l
-S
-2584 1900 m
-2580 1900 l
-2576 1900 l
-2571 1900 l
-2567 1900 l
-2562 1900 l
-2558 1900 l
-2553 1900 l
-2549 1900 l
-2544 1900 l
-S
-2544 6016 m
-2546 6018 l
-2549 6021 l
-2553 6021 l
-2558 6021 l
-2562 6021 l
-2567 6021 l
-2571 6021 l
-2576 6021 l
-2580 6021 l
-2584 6021 l
-S
-2544 1900 m
-2540 1900 l
-2538 1902 l
-2535 1905 l
-2531 1905 l
-2526 1905 l
-2522 1905 l
-2517 1905 l
-2513 1905 l
-2508 1905 l
-2504 1905 l
-S
-2504 6016 m
-2508 6016 l
-2513 6016 l
-2517 6016 l
-2522 6016 l
-2526 6016 l
-2531 6016 l
-2535 6016 l
-2540 6016 l
-2544 6016 l
-S
-2464 1909 m
-2468 1909 l
-2473 1909 l
-2477 1909 l
-2482 1909 l
-2484 1907 l
-2486 1905 l
-2491 1905 l
-2495 1905 l
-2500 1905 l
-2504 1905 l
-S
-2464 6012 m
-2468 6012 l
-2473 6012 l
-2477 6012 l
-2482 6012 l
-2486 6012 l
-2491 6012 l
-2493 6014 l
-2495 6016 l
-2500 6016 l
-2504 6016 l
-S
-2424 1914 m
-2428 1914 l
-2433 1914 l
-2437 1914 l
-2441 1914 l
-2444 1911 l
-2446 1909 l
-2450 1909 l
-2455 1909 l
-2459 1909 l
-2464 1909 l
-S
-2424 6007 m
-2428 6007 l
-2433 6007 l
-2437 6007 l
-2441 6007 l
-2446 6007 l
-2450 6007 l
-2453 6009 l
-2455 6012 l
-2459 6012 l
-2464 6012 l
-S
-2383 1918 m
-2388 1918 l
-2392 1918 l
-2397 1918 l
-2401 1918 l
-2406 1918 l
-2410 1918 l
-2412 1916 l
-2415 1914 l
-2419 1914 l
-2424 1914 l
-S
-2383 5998 m
-2386 6000 l
-S
-2386 6000 m
-2388 6003 l
-2392 6003 l
-2397 6003 l
-2401 6003 l
-2406 6003 l
-2410 6003 l
-2415 6003 l
-2417 6005 l
-2419 6007 l
-2424 6007 l
-S
-2343 1927 m
-2348 1927 l
-2352 1927 l
-2354 1925 l
-2357 1923 l
-2361 1923 l
-2365 1923 l
-2370 1923 l
-2374 1923 l
-2379 1923 l
-2381 1920 l
-2383 1918 l
-S
-2343 5994 m
-2348 5994 l
-2352 5994 l
-2357 5994 l
-2359 5996 l
-2361 5998 l
-2365 5998 l
-2370 5998 l
-2374 5998 l
-2379 5998 l
-2383 5998 l
-S
-2303 1936 m
-2305 1934 l
-2307 1932 l
-2312 1932 l
-2316 1932 l
-2321 1932 l
-2325 1932 l
-2327 1929 l
-2330 1927 l
-2334 1927 l
-2339 1927 l
-2343 1927 l
-S
-2303 5985 m
-2305 5987 l
-2307 5989 l
-2312 5989 l
-2316 5989 l
-2321 5989 l
-2325 5989 l
-2330 5989 l
-2332 5992 l
-2334 5994 l
-2339 5994 l
-2343 5994 l
-S
-2283 1938 m
-2285 1936 l
-2290 1936 l
-2294 1936 l
-2298 1936 l
-2303 1936 l
-S
-2263 1940 m
-2267 1940 l
-2272 1940 l
-2276 1940 l
-2281 1940 l
-2283 1938 l
-S
-2263 5976 m
-2265 5978 l
-2267 5980 l
-2272 5980 l
-2276 5980 l
-2281 5980 l
-2283 5983 l
-2285 5985 l
-2290 5985 l
-2294 5985 l
-2298 5985 l
-2303 5985 l
-S
-2263 1940 m
-2260 1943 l
-2258 1945 l
-2254 1945 l
-2249 1945 l
-2245 1945 l
-2240 1945 l
-2238 1947 l
-2236 1949 l
-2231 1949 l
-2227 1949 l
-2222 1949 l
-S
-2222 5967 m
-2225 5969 l
-2227 5971 l
-2231 5971 l
-2236 5971 l
-2240 5971 l
-2243 5974 l
-2245 5976 l
-2249 5976 l
-2254 5976 l
-2258 5976 l
-2263 5976 l
-S
-2182 1963 m
-2184 1961 l
-2187 1958 l
-2191 1958 l
-2196 1958 l
-2200 1958 l
-2202 1956 l
-2205 1954 l
-2209 1954 l
-2214 1954 l
-2218 1954 l
-2220 1952 l
-2222 1949 l
-S
-2182 5958 m
-2184 5960 l
-S
-2184 5960 m
-2187 5962 l
-2191 5962 l
-2196 5962 l
-2200 5962 l
-2202 5965 l
-2205 5967 l
-2209 5967 l
-2214 5967 l
-2218 5967 l
-2222 5967 l
-S
-2142 1972 m
-2147 1972 l
-2149 1969 l
-2151 1967 l
-2155 1967 l
-2160 1967 l
-2164 1967 l
-2167 1965 l
-2169 1963 l
-2173 1963 l
-2178 1963 l
-2182 1963 l
-S
-2142 5949 m
-2147 5949 l
-2151 5949 l
-2153 5951 l
-2155 5954 l
-2160 5954 l
-2164 5954 l
-2169 5954 l
-2171 5956 l
-2173 5958 l
-2178 5958 l
-2182 5958 l
-S
-2117 1978 m
-2120 1976 l
-2124 1976 l
-2129 1976 l
-2133 1976 l
-2135 1974 l
-2138 1972 l
-2142 1972 l
-S
-2102 1985 m
-2104 1983 l
-2106 1981 l
-2111 1981 l
-2115 1981 l
-2117 1978 l
-S
-2102 5936 m
-2104 5938 l
-2106 5940 l
-2111 5940 l
-2115 5940 l
-2120 5940 l
-2122 5942 l
-2124 5945 l
-2129 5945 l
-2133 5945 l
-2135 5947 l
-2138 5949 l
-2142 5949 l
-S
-2062 1994 m
-2066 1994 l
-2071 1994 l
-2073 1992 l
-2075 1990 l
-2079 1990 l
-2084 1990 l
-2086 1987 l
-2088 1985 l
-2093 1985 l
-2097 1985 l
-2102 1985 l
-S
-2062 5922 m
-2064 5925 l
-2066 5927 l
-2071 5927 l
-2075 5927 l
-2077 5929 l
-2079 5931 l
-2084 5931 l
-2088 5931 l
-2091 5933 l
-2093 5936 l
-2097 5936 l
-2102 5936 l
-S
-2021 2007 m
-2026 2007 l
-2030 2007 l
-2033 2005 l
-2035 2003 l
-2039 2003 l
-2044 2003 l
-2046 2001 l
-2048 1999 l
-2053 1999 l
-2057 1999 l
-2059 1996 l
-2062 1994 l
-S
-2021 5909 m
-2024 5911 l
-2026 5913 l
-2030 5913 l
-2035 5913 l
-2037 5916 l
-2039 5918 l
-2044 5918 l
-2048 5918 l
-2050 5920 l
-S
-2062 5922 m
-2057 5922 l
-2053 5922 l
-2050 5920 l
-S
-1992 2019 m
-1995 2016 l
-1999 2016 l
-2003 2016 l
-2006 2014 l
-2008 2012 l
-2012 2012 l
-2017 2012 l
-2019 2010 l
-2021 2007 l
-S
-1981 2025 m
-1983 2023 l
-1986 2021 l
-1990 2021 l
-1992 2019 l
-S
-1981 5895 m
-1983 5898 l
-1986 5900 l
-1990 5900 l
-1995 5900 l
-1997 5902 l
-1999 5904 l
-2003 5904 l
-2008 5904 l
-2010 5907 l
-2012 5909 l
-2017 5909 l
-2021 5909 l
-S
-1941 2039 m
-1945 2039 l
-1948 2037 l
-1950 2034 l
-1954 2034 l
-1957 2032 l
-1959 2030 l
-1963 2030 l
-1968 2030 l
-1970 2028 l
-1972 2025 l
-1977 2025 l
-1981 2025 l
-S
-1941 5882 m
-1945 5882 l
-1948 5884 l
-1950 5887 l
-1954 5887 l
-1959 5887 l
-1961 5889 l
-1963 5891 l
-1968 5891 l
-1970 5893 l
-1972 5895 l
-1977 5895 l
-1981 5895 l
-S
-1901 2057 m
-1903 2054 l
-1905 2052 l
-1910 2052 l
-1912 2050 l
-1914 2048 l
-1919 2048 l
-1923 2048 l
-1925 2045 l
-1928 2043 l
-1932 2043 l
-1934 2041 l
-1936 2039 l
-1941 2039 l
-S
-1901 5864 m
-1903 5866 l
-1905 5869 l
-1910 5869 l
-1914 5869 l
-1916 5871 l
-1919 5873 l
-1923 5873 l
-1925 5875 l
-1928 5878 l
-1932 5878 l
-1936 5878 l
-1939 5880 l
-S
-1941 5882 m
-1939 5880 l
-S
-1890 2059 m
-1892 2057 l
-1896 2057 l
-1901 2057 l
-S
-1860 2075 m
-1863 2072 l
-1865 2070 l
-1869 2070 l
-1872 2068 l
-1874 2066 l
-1878 2066 l
-1881 2063 l
-1883 2061 l
-1887 2061 l
-1890 2059 l
-S
-1860 5846 m
-1863 5849 l
-1865 5851 l
-1869 5851 l
-1872 5853 l
-1874 5855 l
-1878 5855 l
-1881 5857 l
-1883 5860 l
-1887 5860 l
-1892 5860 l
-1894 5862 l
-1896 5864 l
-1901 5864 l
-S
-1820 2092 m
-1823 2090 l
-1825 2088 l
-1829 2088 l
-1831 2086 l
-1834 2083 l
-1838 2083 l
-1840 2081 l
-1843 2079 l
-1847 2079 l
-1849 2077 l
-1852 2075 l
-1856 2075 l
-1860 2075 l
-S
-1820 5828 m
-1823 5831 l
-1825 5833 l
-1829 5833 l
-1831 5835 l
-1834 5837 l
-1838 5837 l
-1840 5840 l
-S
-1840 5840 m
-1843 5842 l
-1847 5842 l
-1852 5842 l
-1854 5844 l
-1856 5846 l
-1860 5846 l
-S
-1800 2099 m
-1802 2097 l
-1807 2097 l
-1811 2097 l
-1814 2095 l
-1816 2092 l
-1820 2092 l
-S
-1780 2110 m
-1782 2108 l
-1785 2106 l
-1789 2106 l
-1791 2104 l
-1793 2101 l
-1798 2101 l
-1800 2099 l
-S
-1780 5811 m
-1785 5811 l
-1787 5813 l
-1789 5815 l
-1793 5815 l
-1796 5817 l
-1798 5819 l
-1802 5819 l
-1805 5822 l
-1807 5824 l
-1811 5824 l
-1814 5826 l
-1816 5828 l
-1820 5828 l
-S
-1740 2128 m
-1744 2128 l
-1747 2126 l
-1749 2124 l
-1753 2124 l
-1755 2121 l
-1758 2119 l
-1762 2119 l
-1764 2117 l
-1767 2115 l
-1771 2115 l
-1773 2112 l
-1776 2110 l
-1780 2110 l
-S
-1740 5788 m
-1742 5790 l
-1744 5793 l
-1749 5793 l
-1751 5795 l
-1753 5797 l
-1758 5797 l
-1760 5799 l
-S
-1760 5799 m
-1762 5802 l
-1767 5802 l
-1769 5804 l
-1771 5806 l
-1776 5806 l
-1778 5808 l
-1780 5811 l
-S
-1724 2139 m
-1726 2137 l
-1731 2137 l
-1733 2135 l
-1735 2133 l
-1738 2130 l
-1740 2128 l
-S
-1700 2150 m
-1704 2150 l
-1706 2148 l
-1709 2146 l
-1713 2146 l
-1715 2144 l
-1717 2142 l
-1722 2142 l
-1724 2139 l
-S
-1700 5770 m
-1704 5770 l
-1706 5773 l
-1709 5775 l
-1713 5775 l
-1715 5777 l
-1717 5779 l
-1722 5779 l
-1724 5781 l
-1726 5784 l
-1731 5784 l
-1733 5786 l
-1735 5788 l
-1740 5788 l
-S
-1659 2173 m
-1664 2173 l
-1666 2171 l
-1668 2168 l
-1673 2168 l
-1675 2166 l
-1677 2164 l
-1682 2164 l
-1684 2162 l
-1686 2159 l
-1688 2157 l
-1691 2155 l
-1695 2155 l
-1697 2153 l
-1700 2150 l
-S
-1659 5744 m
-1662 5746 l
-1664 5748 l
-1666 5750 l
-1668 5752 l
-1673 5752 l
-1675 5755 l
-1677 5757 l
-1682 5757 l
-1684 5759 l
-S
-1684 5759 m
-1686 5761 l
-1691 5761 l
-1693 5764 l
-1695 5766 l
-1697 5768 l
-1700 5770 l
-S
-1653 2180 m
-1655 2177 l
-1657 2175 l
-1659 2173 l
-S
-1619 2200 m
-1621 2197 l
-1624 2195 l
-1628 2195 l
-1630 2193 l
-1633 2191 l
-1635 2188 l
-1637 2186 l
-1642 2186 l
-1644 2184 l
-1646 2182 l
-1650 2182 l
-1653 2180 l
-S
-1619 5721 m
-1621 5723 l
-1624 5726 l
-1628 5726 l
-1630 5728 l
-1633 5730 l
-1637 5730 l
-1639 5732 l
-1642 5735 l
-1644 5737 l
-1646 5739 l
-1650 5739 l
-1653 5741 l
-1655 5744 l
-1659 5744 l
-S
-1586 2220 m
-1588 2218 l
-1590 2215 l
-1592 2213 l
-1597 2213 l
-1599 2211 l
-1601 2209 l
-1606 2209 l
-1608 2206 l
-1610 2204 l
-1612 2202 l
-1615 2200 l
-1619 2200 l
-S
-1579 2222 m
-1583 2222 l
-1586 2220 l
-S
-1579 5694 m
-1581 5697 l
-1583 5699 l
-1586 5701 l
-1588 5703 l
-1592 5703 l
-1595 5706 l
-1597 5708 l
-1599 5710 l
-1601 5712 l
-1606 5712 l
-1608 5714 l
-1610 5717 l
-1615 5717 l
-1617 5719 l
-S
-1619 5721 m
-1617 5719 l
-S
-1579 2222 m
-1577 2224 l
-1574 2226 l
-1572 2229 l
-1570 2231 l
-1566 2231 l
-1563 2233 l
-1561 2235 l
-1559 2238 l
-1557 2240 l
-1552 2240 l
-1550 2242 l
-1548 2244 l
-1545 2247 l
-1543 2249 l
-1539 2249 l
-S
-1539 5672 m
-1543 5672 l
-1545 5674 l
-1548 5676 l
-1550 5679 l
-S
-1550 5679 m
-1552 5681 l
-1557 5681 l
-1559 5683 l
-1561 5685 l
-1563 5688 l
-1566 5690 l
-1570 5690 l
-1572 5692 l
-1574 5694 l
-1579 5694 l
-S
-1523 2260 m
-1525 2258 l
-1530 2258 l
-1532 2256 l
-1534 2253 l
-1536 2251 l
-1539 2249 l
-S
-1499 2280 m
-1501 2278 l
-1503 2276 l
-1505 2273 l
-1507 2271 l
-1510 2269 l
-1512 2267 l
-1516 2267 l
-1519 2264 l
-1521 2262 l
-1523 2260 l
-S
-1499 5641 m
-1501 5643 l
-1503 5645 l
-1505 5647 l
-1507 5650 l
-1512 5650 l
-1514 5652 l
-1516 5654 l
-1519 5656 l
-1521 5659 l
-1525 5659 l
-1528 5661 l
-1530 5663 l
-1532 5665 l
-1534 5668 l
-1536 5670 l
-1539 5672 l
-S
-1469 2300 m
-1472 2298 l
-1474 2296 l
-1476 2293 l
-1478 2291 l
-1481 2289 l
-1485 2289 l
-1487 2287 l
-1490 2285 l
-1492 2282 l
-1494 2280 l
-1499 2280 l
-S
-1458 2307 m
-1461 2305 l
-1463 2302 l
-1467 2302 l
-1469 2300 l
-S
-1458 5614 m
-1463 5614 l
-1465 5616 l
-1467 5618 l
-1469 5621 l
-1472 5623 l
-1474 5625 l
-1476 5627 l
-1481 5627 l
-1483 5630 l
-1485 5632 l
-1487 5634 l
-1490 5636 l
-1492 5638 l
-S
-1499 5641 m
-1494 5641 l
-1492 5638 l
-S
-1418 2338 m
-1420 2336 l
-1423 2334 l
-1425 2331 l
-1427 2329 l
-1431 2329 l
-1434 2327 l
-1436 2325 l
-1438 2323 l
-1440 2320 l
-1443 2318 l
-1445 2316 l
-1449 2316 l
-1452 2314 l
-1454 2311 l
-1456 2309 l
-1458 2307 l
-S
-1418 5583 m
-1420 5585 l
-1423 5587 l
-1427 5587 l
-1429 5589 l
-1431 5592 l
-1434 5594 l
-1436 5596 l
-1438 5598 l
-S
-1438 5598 m
-1440 5601 l
-1445 5601 l
-1447 5603 l
-1449 5605 l
-1452 5607 l
-1454 5609 l
-1456 5612 l
-1458 5614 l
-S
-1416 2340 m
-1418 2338 l
-S
-1378 2369 m
-1380 2367 l
-1382 2365 l
-1387 2365 l
-1389 2363 l
-1391 2361 l
-1393 2358 l
-1396 2356 l
-1398 2354 l
-1400 2352 l
-1402 2349 l
-1405 2347 l
-1409 2347 l
-1411 2345 l
-1414 2343 l
-1416 2340 l
-S
-1378 5551 m
-1382 5551 l
-1385 5554 l
-1387 5556 l
-1389 5558 l
-S
-1389 5558 m
-1391 5560 l
-1393 5563 l
-1396 5565 l
-1398 5567 l
-1400 5569 l
-1405 5569 l
-1407 5571 l
-1409 5574 l
-1411 5576 l
-1414 5578 l
-1416 5580 l
-1418 5583 l
-S
-1367 2381 m
-1369 2378 l
-1371 2376 l
-1373 2374 l
-1376 2372 l
-1378 2369 l
-S
-1338 2405 m
-1340 2403 l
-1342 2401 l
-1344 2399 l
-1347 2396 l
-1349 2394 l
-1351 2392 l
-1353 2390 l
-1355 2387 l
-1360 2387 l
-1362 2385 l
-1364 2383 l
-1367 2381 l
-S
-1338 5516 m
-1340 5518 l
-S
-1340 5518 m
-1342 5520 l
-1344 5522 l
-1347 5525 l
-1351 5525 l
-1353 5527 l
-1355 5529 l
-1358 5531 l
-1360 5533 l
-1362 5536 l
-1364 5538 l
-1367 5540 l
-1369 5542 l
-1371 5545 l
-1373 5547 l
-1376 5549 l
-1378 5551 l
-S
-1318 2421 m
-1320 2419 l
-1324 2419 l
-1326 2416 l
-1329 2414 l
-1331 2412 l
-1333 2410 l
-1335 2407 l
-1338 2405 l
-S
-1297 2441 m
-1300 2439 l
-1302 2436 l
-1304 2434 l
-1306 2432 l
-1309 2430 l
-1311 2428 l
-1313 2425 l
-1315 2423 l
-1318 2421 l
-S
-1297 5480 m
-1300 5482 l
-1302 5484 l
-1304 5487 l
-1306 5489 l
-1309 5491 l
-1311 5493 l
-1315 5493 l
-1318 5495 l
-1320 5498 l
-1322 5500 l
-1324 5502 l
-1326 5504 l
-1329 5507 l
-1331 5509 l
-1333 5511 l
-1335 5513 l
-1338 5516 l
-S
-1277 2461 m
-1280 2459 l
-1282 2457 l
-1284 2454 l
-1286 2452 l
-1288 2450 l
-1291 2448 l
-1293 2445 l
-1295 2443 l
-1297 2441 l
-S
-1257 2481 m
-1259 2479 l
-1262 2477 l
-1264 2474 l
-1266 2472 l
-1268 2470 l
-1271 2468 l
-1273 2466 l
-1275 2463 l
-1277 2461 l
-S
-1257 5440 m
-1259 5442 l
-1262 5444 l
-1264 5446 l
-1266 5449 l
-1268 5451 l
-1271 5453 l
-1273 5455 l
-1275 5457 l
-1277 5460 l
-1280 5462 l
-1282 5464 l
-1284 5466 l
-1286 5469 l
-1288 5471 l
-1291 5473 l
-1293 5475 l
-1295 5478 l
-S
-1297 5480 m
-1295 5478 l
-S
-1233 2501 m
-1235 2499 l
-1237 2497 l
-1239 2495 l
-1242 2492 l
-1244 2490 l
-1246 2488 l
-1248 2486 l
-1250 2483 l
-1253 2481 l
-1257 2481 l
-S
-1217 2517 m
-1219 2515 l
-1221 2512 l
-1224 2510 l
-1226 2508 l
-1228 2506 l
-1230 2504 l
-1233 2501 l
-S
-1217 5399 m
-1219 5402 l
-1221 5404 l
-1224 5406 l
-1226 5408 l
-1228 5411 l
-1230 5413 l
-1233 5415 l
-1235 5417 l
-1237 5420 l
-1239 5422 l
-1242 5424 l
-1244 5426 l
-1246 5428 l
-1248 5431 l
-1250 5433 l
-1253 5435 l
-1255 5437 l
-S
-1257 5440 m
-1255 5437 l
-S
-1197 2542 m
-1199 2539 l
-1201 2537 l
-1204 2535 l
-1206 2533 l
-1208 2530 l
-1210 2528 l
-1212 2526 l
-1215 2524 l
-1215 2519 l
-1217 2517 l
-S
-1177 2562 m
-1179 2559 l
-1181 2557 l
-1183 2555 l
-1186 2553 l
-1188 2550 l
-1190 2548 l
-1192 2546 l
-1195 2544 l
-1197 2542 l
-S
-1177 5359 m
-1179 5361 l
-1181 5364 l
-1183 5366 l
-1186 5368 l
-1188 5370 l
-1190 5373 l
-1192 5375 l
-1195 5377 l
-1197 5379 l
-1199 5382 l
-1201 5384 l
-1204 5386 l
-1206 5388 l
-1208 5390 l
-1210 5393 l
-1212 5395 l
-1215 5397 l
-S
-1217 5399 m
-1215 5397 l
-S
-1157 2582 m
-1159 2579 l
-1161 2577 l
-1163 2575 l
-1166 2573 l
-1168 2571 l
-1170 2568 l
-1172 2566 l
-1175 2564 l
-1177 2562 l
-S
-1137 2606 m
-1139 2604 l
-1141 2602 l
-1143 2600 l
-1145 2597 l
-1148 2595 l
-1150 2593 l
-1152 2591 l
-1152 2586 l
-1154 2584 l
-1157 2582 l
-S
-1137 5314 m
-1139 5317 l
-S
-1139 5317 m
-1141 5319 l
-1143 5321 l
-1145 5323 l
-1148 5326 l
-1150 5328 l
-1152 5330 l
-1154 5332 l
-1157 5335 l
-1159 5337 l
-1161 5339 l
-1161 5344 l
-1163 5346 l
-1166 5348 l
-1168 5350 l
-1170 5352 l
-1172 5355 l
-1175 5357 l
-S
-1177 5359 m
-1175 5357 l
-S
-1125 2622 m
-1125 2617 l
-1128 2615 l
-1130 2613 l
-1132 2611 l
-1134 2609 l
-1137 2606 l
-S
-1096 2655 m
-1099 2653 l
-1099 2649 l
-1101 2647 l
-1103 2644 l
-1105 2642 l
-1107 2640 l
-1110 2638 l
-1112 2635 l
-1114 2633 l
-1116 2631 l
-1119 2629 l
-1121 2626 l
-1123 2624 l
-1125 2622 l
-S
-1096 5265 m
-1099 5268 l
-1101 5270 l
-1103 5272 l
-1103 5277 l
-S
-1103 5277 m
-1105 5279 l
-1107 5281 l
-1110 5283 l
-1112 5285 l
-1114 5288 l
-1116 5290 l
-1119 5292 l
-1121 5294 l
-1123 5297 l
-1125 5299 l
-1128 5301 l
-1130 5303 l
-1130 5308 l
-1132 5310 l
-1134 5312 l
-1137 5314 l
-S
-1090 2662 m
-1092 2660 l
-1094 2658 l
-1096 2655 l
-S
-1090 2662 m
-1087 2664 l
-1085 2667 l
-1083 2669 l
-1081 2671 l
-1081 2676 l
-1078 2678 l
-1076 2680 l
-1074 2682 l
-1072 2685 l
-1069 2687 l
-1067 2689 l
-1065 2691 l
-1063 2693 l
-1063 2698 l
-1061 2700 l
-1058 2702 l
-S
-1056 2705 m
-1058 2702 l
-S
-1056 5216 m
-1058 5218 l
-1061 5221 l
-1063 5223 l
-1065 5225 l
-1067 5227 l
-1067 5232 l
-1069 5234 l
-1072 5236 l
-S
-1072 5236 m
-1074 5239 l
-1076 5241 l
-1078 5243 l
-1081 5245 l
-1083 5247 l
-1085 5250 l
-1085 5254 l
-1087 5256 l
-1090 5259 l
-1092 5261 l
-1094 5263 l
-1096 5265 l
-S
-1056 2705 m
-1054 2707 l
-1052 2709 l
-1049 2711 l
-1049 2716 l
-1047 2718 l
-1045 2720 l
-1043 2723 l
-1040 2725 l
-1038 2727 l
-1036 2729 l
-1036 2734 l
-1034 2736 l
-1031 2738 l
-1029 2740 l
-1027 2743 l
-S
-1016 2758 m
-1018 2756 l
-1020 2754 l
-1023 2752 l
-1023 2747 l
-1025 2745 l
-1027 2743 l
-S
-1016 5163 m
-1018 5165 l
-1020 5167 l
-1023 5169 l
-1025 5171 l
-1027 5174 l
-1027 5178 l
-1029 5180 l
-1031 5183 l
-1034 5185 l
-1036 5187 l
-1038 5189 l
-1040 5192 l
-1040 5196 l
-S
-1040 5196 m
-1043 5198 l
-1045 5201 l
-1047 5203 l
-1049 5205 l
-1052 5207 l
-1054 5209 l
-1054 5214 l
-1056 5216 l
-S
-1000 2783 m
-1000 2778 l
-1002 2776 l
-1005 2774 l
-1007 2772 l
-1009 2769 l
-1011 2767 l
-1014 2765 l
-1014 2760 l
-1016 2758 l
-S
-976 2816 m
-978 2814 l
-980 2812 l
-982 2810 l
-982 2805 l
-985 2803 l
-987 2801 l
-989 2798 l
-991 2796 l
-991 2792 l
-994 2790 l
-996 2787 l
-998 2785 l
-1000 2783 l
-S
-976 5104 m
-978 5107 l
-980 5109 l
-982 5111 l
-982 5116 l
-S
-982 5116 m
-985 5118 l
-987 5120 l
-989 5122 l
-991 5125 l
-994 5127 l
-996 5129 l
-996 5133 l
-998 5136 l
-1000 5138 l
-1002 5140 l
-1005 5142 l
-1005 5147 l
-1007 5149 l
-1009 5151 l
-1011 5154 l
-1014 5156 l
-S
-1014 5156 m
-1014 5160 l
-1016 5163 l
-S
-973 2823 m
-973 2819 l
-976 2816 l
-S
-973 2823 m
-971 2825 l
-969 2828 l
-967 2830 l
-964 2832 l
-964 2836 l
-962 2839 l
-960 2841 l
-958 2843 l
-956 2845 l
-956 2850 l
-953 2852 l
-951 2854 l
-951 2859 l
-949 2861 l
-947 2863 l
-S
-935 2879 m
-938 2877 l
-940 2874 l
-942 2872 l
-942 2868 l
-944 2866 l
-947 2863 l
-S
-935 5037 m
-938 5040 l
-938 5044 l
-940 5046 l
-942 5049 l
-942 5053 l
-944 5055 l
-947 5058 l
-949 5060 l
-951 5062 l
-951 5066 l
-953 5069 l
-956 5071 l
-958 5073 l
-960 5075 l
-S
-960 5075 m
-960 5080 l
-962 5082 l
-964 5084 l
-964 5089 l
-967 5091 l
-969 5093 l
-971 5096 l
-973 5098 l
-973 5102 l
-976 5104 l
-S
-920 2903 m
-922 2901 l
-924 2899 l
-926 2897 l
-929 2895 l
-929 2890 l
-931 2888 l
-933 2886 l
-933 2881 l
-935 2879 l
-S
-920 2903 m
-920 2908 l
-918 2910 l
-915 2912 l
-915 2917 l
-913 2919 l
-911 2921 l
-909 2924 l
-906 2926 l
-906 2930 l
-904 2933 l
-902 2935 l
-902 2939 l
-900 2941 l
-897 2944 l
-S
-895 2950 m
-897 2948 l
-897 2944 l
-S
-895 4970 m
-897 4973 l
-897 4977 l
-900 4979 l
-902 4982 l
-902 4986 l
-904 4988 l
-906 4990 l
-909 4993 l
-911 4995 l
-S
-911 4995 m
-911 4999 l
-913 5002 l
-915 5004 l
-915 5008 l
-918 5011 l
-920 5013 l
-922 5015 l
-924 5017 l
-924 5022 l
-926 5024 l
-929 5026 l
-929 5031 l
-931 5033 l
-933 5035 l
-S
-935 5037 m
-933 5035 l
-S
-875 2984 m
-877 2982 l
-880 2979 l
-880 2975 l
-882 2973 l
-884 2971 l
-884 2966 l
-886 2964 l
-888 2962 l
-888 2957 l
-891 2955 l
-893 2953 l
-895 2950 l
-S
-875 2984 m
-875 2988 l
-873 2991 l
-871 2993 l
-871 2997 l
-868 3000 l
-866 3002 l
-866 3006 l
-864 3009 l
-862 3011 l
-862 3015 l
-859 3017 l
-857 3020 l
-857 3024 l
-S
-855 3026 m
-857 3024 l
-S
-855 4894 m
-857 4897 l
-857 4901 l
-859 4903 l
-862 4906 l
-862 4910 l
-864 4912 l
-866 4915 l
-S
-866 4915 m
-866 4919 l
-868 4921 l
-871 4923 l
-871 4928 l
-873 4930 l
-875 4932 l
-875 4937 l
-877 4939 l
-880 4941 l
-880 4946 l
-882 4948 l
-884 4950 l
-884 4955 l
-S
-884 4955 m
-886 4957 l
-888 4959 l
-891 4961 l
-893 4964 l
-893 4968 l
-895 4970 l
-S
-855 3026 m
-853 3029 l
-851 3031 l
-848 3033 l
-848 3038 l
-846 3040 l
-844 3042 l
-844 3047 l
-844 3051 l
-842 3053 l
-839 3055 l
-839 3060 l
-837 3062 l
-835 3064 l
-S
-835 3064 m
-835 3069 l
-833 3071 l
-830 3073 l
-830 3078 l
-828 3080 l
-826 3082 l
-826 3087 l
-824 3089 l
-821 3091 l
-821 3096 l
-819 3098 l
-817 3100 l
-817 3105 l
-S
-815 3107 m
-817 3105 l
-S
-815 4814 m
-817 4816 l
-817 4821 l
-819 4823 l
-821 4825 l
-821 4830 l
-824 4832 l
-826 4834 l
-S
-826 4834 m
-826 4839 l
-828 4841 l
-830 4843 l
-830 4847 l
-833 4850 l
-835 4852 l
-835 4856 l
-837 4859 l
-839 4861 l
-839 4865 l
-842 4868 l
-844 4870 l
-844 4874 l
-S
-844 4874 m
-846 4877 l
-848 4879 l
-848 4883 l
-851 4885 l
-853 4888 l
-853 4892 l
-855 4894 l
-S
-815 3107 m
-813 3109 l
-813 3114 l
-810 3116 l
-808 3118 l
-808 3122 l
-808 3127 l
-806 3129 l
-804 3131 l
-804 3136 l
-801 3138 l
-799 3140 l
-799 3145 l
-S
-799 3145 m
-797 3147 l
-795 3149 l
-795 3154 l
-795 3158 l
-792 3160 l
-790 3163 l
-790 3167 l
-788 3169 l
-786 3172 l
-786 3176 l
-786 3181 l
-783 3183 l
-781 3185 l
-S
-775 3201 m
-777 3198 l
-777 3194 l
-779 3192 l
-781 3190 l
-781 3185 l
-S
-775 4716 m
-777 4718 l
-777 4722 l
-777 4727 l
-779 4729 l
-781 4731 l
-781 4736 l
-783 4738 l
-786 4740 l
-786 4745 l
-786 4749 l
-788 4751 l
-790 4754 l
-S
-790 4754 m
-790 4758 l
-792 4760 l
-795 4763 l
-795 4767 l
-795 4772 l
-797 4774 l
-799 4776 l
-799 4780 l
-801 4783 l
-804 4785 l
-804 4789 l
-806 4792 l
-808 4794 l
-S
-808 4794 m
-808 4798 l
-810 4801 l
-813 4803 l
-813 4807 l
-813 4812 l
-815 4814 l
-S
-768 3225 m
-768 3221 l
-768 3216 l
-770 3214 l
-772 3212 l
-772 3207 l
-772 3203 l
-775 3201 l
-S
-768 3225 m
-766 3227 l
-763 3230 l
-763 3234 l
-761 3236 l
-759 3239 l
-759 3243 l
-759 3248 l
-757 3250 l
-754 3252 l
-754 3257 l
-754 3261 l
-752 3263 l
-750 3265 l
-S
-750 3265 m
-750 3270 l
-750 3274 l
-748 3277 l
-745 3279 l
-745 3283 l
-743 3286 l
-741 3288 l
-741 3292 l
-741 3297 l
-739 3299 l
-737 3301 l
-737 3306 l
-S
-734 3312 m
-737 3310 l
-737 3306 l
-S
-734 4604 m
-737 4606 l
-737 4611 l
-737 4615 l
-739 4617 l
-741 4620 l
-741 4624 l
-741 4629 l
-743 4631 l
-745 4633 l
-S
-745 4633 m
-745 4637 l
-745 4642 l
-748 4644 l
-750 4646 l
-750 4651 l
-750 4655 l
-752 4658 l
-754 4660 l
-754 4664 l
-754 4669 l
-757 4671 l
-759 4673 l
-S
-759 4673 m
-759 4678 l
-759 4682 l
-761 4684 l
-763 4687 l
-763 4691 l
-766 4693 l
-768 4696 l
-768 4700 l
-768 4704 l
-770 4707 l
-772 4709 l
-772 4713 l
-S
-775 4716 m
-772 4713 l
-S
-723 3346 m
-725 3344 l
-728 3341 l
-728 3337 l
-728 3333 l
-728 3328 l
-730 3326 l
-732 3324 l
-732 3319 l
-732 3315 l
-734 3312 l
-S
-723 3346 m
-723 3350 l
-723 3355 l
-721 3357 l
-719 3359 l
-719 3364 l
-719 3368 l
-716 3371 l
-714 3373 l
-714 3377 l
-714 3382 l
-714 3386 l
-S
-714 3386 m
-712 3388 l
-710 3391 l
-710 3395 l
-710 3400 l
-708 3402 l
-705 3404 l
-705 3408 l
-705 3413 l
-705 3417 l
-703 3420 l
-701 3422 l
-701 3426 l
-S
-694 3451 m
-696 3449 l
-696 3444 l
-696 3440 l
-696 3435 l
-699 3433 l
-701 3431 l
-701 3426 l
-S
-694 4470 m
-696 4472 l
-S
-696 4472 m
-696 4477 l
-696 4481 l
-699 4483 l
-701 4486 l
-701 4490 l
-701 4494 l
-701 4499 l
-703 4501 l
-705 4503 l
-705 4508 l
-705 4512 l
-S
-705 4512 m
-705 4517 l
-708 4519 l
-710 4521 l
-710 4526 l
-710 4530 l
-712 4532 l
-714 4535 l
-714 4539 l
-714 4544 l
-714 4548 l
-716 4550 l
-719 4553 l
-S
-719 4553 m
-719 4557 l
-719 4561 l
-721 4564 l
-723 4566 l
-723 4570 l
-723 4575 l
-725 4577 l
-728 4579 l
-728 4584 l
-728 4588 l
-730 4591 l
-732 4593 l
-S
-732 4593 m
-732 4597 l
-732 4602 l
-734 4604 l
-S
-692 3467 m
-692 3462 l
-692 3458 l
-692 3453 l
-694 3451 l
-S
-692 3467 m
-690 3469 l
-687 3471 l
-687 3476 l
-687 3480 l
-687 3484 l
-685 3487 l
-683 3489 l
-683 3493 l
-683 3498 l
-683 3502 l
-683 3507 l
-S
-683 3507 m
-681 3509 l
-678 3511 l
-678 3516 l
-678 3520 l
-678 3525 l
-676 3527 l
-674 3529 l
-674 3534 l
-674 3538 l
-674 3543 l
-674 3547 l
-S
-674 3547 m
-672 3549 l
-670 3551 l
-670 3556 l
-670 3560 l
-670 3565 l
-670 3569 l
-667 3572 l
-665 3574 l
-665 3578 l
-665 3583 l
-665 3587 l
-S
-665 3587 m
-665 3592 l
-665 3596 l
-663 3598 l
-661 3601 l
-661 3605 l
-661 3610 l
-661 3614 l
-661 3619 l
-658 3621 l
-656 3623 l
-656 3627 l
-S
-654 3652 m
-656 3650 l
-656 3645 l
-656 3641 l
-656 3636 l
-656 3632 l
-656 3627 l
-S
-654 4269 m
-656 4271 l
-S
-656 4271 m
-656 4275 l
-656 4280 l
-656 4284 l
-656 4289 l
-656 4293 l
-658 4296 l
-661 4298 l
-661 4302 l
-661 4307 l
-661 4311 l
-S
-661 4311 m
-661 4316 l
-661 4320 l
-663 4322 l
-665 4325 l
-665 4329 l
-665 4334 l
-665 4338 l
-665 4342 l
-665 4347 l
-667 4349 l
-670 4351 l
-S
-670 4351 m
-670 4356 l
-670 4360 l
-670 4365 l
-670 4369 l
-672 4372 l
-674 4374 l
-674 4378 l
-674 4383 l
-674 4387 l
-676 4389 l
-678 4392 l
-S
-678 4392 m
-678 4396 l
-678 4401 l
-678 4405 l
-678 4410 l
-681 4412 l
-683 4414 l
-683 4418 l
-683 4423 l
-683 4427 l
-685 4430 l
-687 4432 l
-S
-687 4432 m
-687 4436 l
-687 4441 l
-687 4445 l
-687 4450 l
-690 4452 l
-692 4454 l
-692 4459 l
-692 4463 l
-692 4468 l
-694 4470 l
-S
-652 3668 m
-652 3663 l
-652 3659 l
-652 3654 l
-654 3652 l
-S
-652 3668 m
-652 3672 l
-652 3677 l
-652 3681 l
-649 3683 l
-647 3686 l
-647 3690 l
-647 3694 l
-647 3699 l
-647 3703 l
-647 3708 l
-S
-647 3708 m
-647 3712 l
-647 3717 l
-645 3719 l
-643 3721 l
-643 3726 l
-643 3730 l
-643 3735 l
-643 3739 l
-643 3744 l
-643 3748 l
-S
-643 3748 m
-643 3753 l
-643 3757 l
-640 3759 l
-638 3762 l
-638 3766 l
-638 3770 l
-638 3775 l
-638 3779 l
-638 3784 l
-638 3788 l
-S
-638 3788 m
-638 3793 l
-638 3797 l
-638 3802 l
-638 3806 l
-638 3811 l
-636 3813 l
-634 3815 l
-634 3820 l
-634 3824 l
-634 3829 l
-S
-634 3829 m
-634 3833 l
-634 3838 l
-634 3842 l
-634 3846 l
-634 3851 l
-634 3855 l
-634 3860 l
-634 3864 l
-634 3869 l
-S
-634 3869 m
-634 3873 l
-634 3878 l
-634 3882 l
-634 3887 l
-634 3891 l
-634 3896 l
-632 3898 l
-629 3900 l
-629 3905 l
-629 3909 l
-S
-629 3909 m
-629 3913 l
-629 3918 l
-629 3922 l
-629 3927 l
-629 3931 l
-629 3936 l
-629 3940 l
-629 3945 l
-629 3949 l
-S
-629 3949 m
-629 3954 l
-629 3958 l
-629 3963 l
-629 3967 l
-629 3972 l
-629 3976 l
-629 3981 l
-629 3985 l
-629 3989 l
-S
-629 3989 m
-629 3994 l
-629 3998 l
-629 4003 l
-629 4007 l
-629 4012 l
-629 4016 l
-629 4021 l
-632 4023 l
-634 4025 l
-634 4030 l
-S
-634 4030 m
-634 4034 l
-634 4039 l
-634 4043 l
-634 4048 l
-634 4052 l
-634 4056 l
-634 4061 l
-634 4065 l
-634 4070 l
-S
-634 4070 m
-634 4074 l
-634 4079 l
-634 4083 l
-634 4088 l
-634 4092 l
-634 4097 l
-634 4101 l
-634 4106 l
-636 4108 l
-638 4110 l
-S
-638 4110 m
-638 4115 l
-638 4119 l
-638 4124 l
-638 4128 l
-638 4132 l
-638 4137 l
-638 4141 l
-638 4146 l
-638 4150 l
-S
-638 4150 m
-638 4155 l
-638 4159 l
-640 4162 l
-643 4164 l
-643 4168 l
-643 4173 l
-643 4177 l
-643 4182 l
-643 4186 l
-643 4191 l
-S
-643 4191 m
-643 4195 l
-643 4199 l
-645 4202 l
-647 4204 l
-647 4208 l
-647 4213 l
-647 4217 l
-647 4222 l
-647 4226 l
-647 4231 l
-S
-647 4231 m
-647 4235 l
-649 4237 l
-652 4240 l
-652 4244 l
-652 4249 l
-652 4253 l
-652 4258 l
-652 4262 l
-652 4267 l
-654 4269 l
-S
-1 g
-3920 4435 m
-3924 4435 l
-3924 4436 l
-3920 4436 l
-3917 4436 m
-3924 4436 l
-3924 4437 l
-3917 4437 l
-3914 4437 m
-3925 4437 l
-3925 4438 l
-3914 4438 l
-3911 4438 m
-3925 4438 l
-3925 4439 l
-3911 4439 l
-3908 4439 m
-3925 4439 l
-3925 4440 l
-3908 4440 l
-3905 4440 m
-3926 4440 l
-3926 4441 l
-3905 4441 l
-3903 4441 m
-3926 4441 l
-3926 4442 l
-3903 4442 l
-3900 4442 m
-3926 4442 l
-3926 4443 l
-3900 4443 l
-3897 4443 m
-3927 4443 l
-3927 4444 l
-3897 4444 l
-3894 4444 m
-3927 4444 l
-3927 4445 l
-3894 4445 l
-3891 4445 m
-3927 4445 l
-3927 4446 l
-3891 4446 l
-3888 4446 m
-3928 4446 l
-3928 4447 l
-3888 4447 l
-3885 4447 m
-3928 4447 l
-3928 4448 l
-3885 4448 l
-3883 4448 m
-3928 4448 l
-3928 4449 l
-3883 4449 l
-3880 4449 m
-3929 4449 l
-3929 4450 l
-3880 4450 l
-3877 4450 m
-3929 4450 l
-3929 4451 l
-3877 4451 l
-3874 4451 m
-3929 4451 l
-3929 4452 l
-3874 4452 l
-3871 4452 m
-3930 4452 l
-3930 4453 l
-3871 4453 l
-3868 4453 m
-3930 4453 l
-3930 4454 l
-3868 4454 l
-3866 4454 m
-3931 4454 l
-3931 4455 l
-3866 4455 l
-3863 4455 m
-3931 4455 l
-3931 4456 l
-3863 4456 l
-3860 4456 m
-3931 4456 l
-3931 4457 l
-3860 4457 l
-3857 4457 m
-3932 4457 l
-3932 4458 l
-3857 4458 l
-3854 4458 m
-3932 4458 l
-3932 4459 l
-3854 4459 l
-3851 4459 m
-3932 4459 l
-3932 4460 l
-3851 4460 l
-3848 4460 m
-3933 4460 l
-3933 4461 l
-3848 4461 l
-3846 4461 m
-3933 4461 l
-3933 4462 l
-3846 4462 l
-3843 4462 m
-3933 4462 l
-3933 4463 l
-3843 4463 l
-3840 4463 m
-3934 4463 l
-3934 4464 l
-3840 4464 l
-3837 4464 m
-3934 4464 l
-3934 4465 l
-3837 4465 l
-3834 4465 m
-3934 4465 l
-3934 4466 l
-3834 4466 l
-3831 4466 m
-3935 4466 l
-3935 4467 l
-3831 4467 l
-3829 4467 m
-3935 4467 l
-3935 4468 l
-3829 4468 l
-3829 4468 m
-3935 4468 l
-3935 4469 l
-3829 4469 l
-3829 4469 m
-3936 4469 l
-3936 4471 l
-3829 4471 l
-3830 4471 m
-3937 4471 l
-3937 4474 l
-3830 4474 l
-3831 4474 m
-3938 4474 l
-3938 4477 l
-3831 4477 l
-3832 4477 m
-3939 4477 l
-3939 4480 l
-3832 4480 l
-3833 4480 m
-3940 4480 l
-3940 4483 l
-3833 4483 l
-3834 4483 m
-3941 4483 l
-3941 4486 l
-3834 4486 l
-3835 4486 m
-3942 4486 l
-3942 4488 l
-3835 4488 l
-3836 4488 m
-3942 4488 l
-3942 4489 l
-3836 4489 l
-3836 4489 m
-3943 4489 l
-3943 4491 l
-3836 4491 l
-3837 4491 m
-3944 4491 l
-3944 4494 l
-3837 4494 l
-3838 4494 m
-3945 4494 l
-3945 4497 l
-3838 4497 l
-3839 4497 m
-3946 4497 l
-3946 4500 l
-3839 4500 l
-3840 4500 m
-3947 4500 l
-3947 4503 l
-3840 4503 l
-3841 4503 m
-3948 4503 l
-3948 4506 l
-3841 4506 l
-3842 4506 m
-3949 4506 l
-3949 4508 l
-3842 4508 l
-3843 4508 m
-3950 4508 l
-3950 4511 l
-3843 4511 l
-3844 4511 m
-3951 4511 l
-3951 4514 l
-3844 4514 l
-3845 4514 m
-3952 4514 l
-3952 4517 l
-3845 4517 l
-3846 4517 m
-3953 4517 l
-3953 4520 l
-3846 4520 l
-3847 4520 m
-3954 4520 l
-3954 4523 l
-3847 4523 l
-3848 4523 m
-3955 4523 l
-3955 4525 l
-3848 4525 l
-3848 4525 m
-3956 4525 l
-3956 4526 l
-3848 4526 l
-3849 4526 m
-3956 4526 l
-3956 4528 l
-3849 4528 l
-3850 4528 m
-3957 4528 l
-3957 4531 l
-3850 4531 l
-3851 4531 m
-3958 4531 l
-3958 4534 l
-3851 4534 l
-3852 4534 m
-3959 4534 l
-3959 4537 l
-3852 4537 l
-3853 4537 m
-3960 4537 l
-3960 4540 l
-3853 4540 l
-3854 4540 m
-3961 4540 l
-3961 4543 l
-3854 4543 l
-3855 4543 m
-3962 4543 l
-3962 4545 l
-3855 4545 l
-3856 4545 m
-3963 4545 l
-3963 4548 l
-3856 4548 l
-3857 4548 m
-3964 4548 l
-3964 4549 l
-3857 4549 l
-3857 4549 m
-3964 4549 l
-3964 4550 l
-3857 4550 l
-3857 4550 m
-3961 4550 l
-3961 4551 l
-3857 4551 l
-3858 4551 m
-3958 4551 l
-3958 4552 l
-3858 4552 l
-3858 4552 m
-3955 4552 l
-3955 4553 l
-3858 4553 l
-3858 4553 m
-3952 4553 l
-3952 4554 l
-3858 4554 l
-3859 4554 m
-3949 4554 l
-3949 4555 l
-3859 4555 l
-3859 4555 m
-3946 4555 l
-3946 4556 l
-3859 4556 l
-3859 4556 m
-3944 4556 l
-3944 4557 l
-3859 4557 l
-3860 4557 m
-3941 4557 l
-3941 4558 l
-3860 4558 l
-3860 4558 m
-3938 4558 l
-3938 4559 l
-3860 4559 l
-3860 4559 m
-3935 4559 l
-3935 4560 l
-3860 4560 l
-3861 4560 m
-3932 4560 l
-3932 4561 l
-3861 4561 l
-3861 4561 m
-3929 4561 l
-3929 4562 l
-3861 4562 l
-3861 4562 m
-3927 4562 l
-3927 4563 l
-3861 4563 l
-3862 4563 m
-3924 4563 l
-3924 4564 l
-3862 4564 l
-3862 4564 m
-3921 4564 l
-3921 4565 l
-3862 4565 l
-3863 4565 m
-3918 4565 l
-3918 4566 l
-3863 4566 l
-3863 4566 m
-3915 4566 l
-3915 4567 l
-3863 4567 l
-3863 4567 m
-3912 4567 l
-3912 4568 l
-3863 4568 l
-3864 4568 m
-3909 4568 l
-3909 4569 l
-3864 4569 l
-3864 4569 m
-3907 4569 l
-3907 4570 l
-3864 4570 l
-3864 4570 m
-3904 4570 l
-3904 4571 l
-3864 4571 l
-3865 4571 m
-3901 4571 l
-3901 4572 l
-3865 4572 l
-3865 4572 m
-3898 4572 l
-3898 4573 l
-3865 4573 l
-3865 4573 m
-3895 4573 l
-3895 4574 l
-3865 4574 l
-3866 4574 m
-3892 4574 l
-3892 4575 l
-3866 4575 l
-3866 4575 m
-3889 4575 l
-3889 4576 l
-3866 4576 l
-3866 4576 m
-3887 4576 l
-3887 4577 l
-3866 4577 l
-3867 4577 m
-3884 4577 l
-3884 4578 l
-3867 4578 l
-3867 4578 m
-3881 4578 l
-3881 4579 l
-3867 4579 l
-3867 4579 m
-3878 4579 l
-3878 4580 l
-3867 4580 l
-3868 4580 m
-3875 4580 l
-3875 4581 l
-3868 4581 l
-3868 4581 m
-3872 4581 l
-3872 4582 l
-3868 4582 l
-Y
-3963.1 4549 m
-3923 4435 l
-3829 4468 l
-3869 4582 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3885 4466 m
-3899 4465 l
-3911 4475 l
-3921 4493 l
-3926 4505 l
-3928 4526 l
-3925 4540 l
-3914 4548 l
-3906 4551 l
-3893 4551 l
-3881 4542 l
-3870 4524 l
-3866 4512 l
-3863 4491 l
-3867 4476 l
-3877 4468 l
-3885 4466 l
-S
-1 g
-3085 4470 m
-3095 4470 l
-3095 4471 l
-3085 4471 l
-3085 4471 m
-3102 4471 l
-3102 4472 l
-3085 4472 l
-3085 4472 m
-3109 4472 l
-3109 4473 l
-3085 4473 l
-3085 4473 m
-3116 4473 l
-3116 4474 l
-3085 4474 l
-3085 4474 m
-3123 4474 l
-3123 4475 l
-3085 4475 l
-3085 4475 m
-3130 4475 l
-3130 4476 l
-3085 4476 l
-3085 4476 m
-3137 4476 l
-3137 4477 l
-3085 4477 l
-3084 4477 m
-3144 4477 l
-3144 4478 l
-3084 4478 l
-3084 4478 m
-3150 4478 l
-3150 4479 l
-3084 4479 l
-3084 4479 m
-3157 4479 l
-3157 4480 l
-3084 4480 l
-3084 4480 m
-3164 4480 l
-3164 4481 l
-3084 4481 l
-3084 4481 m
-3171 4481 l
-3171 4482 l
-3084 4482 l
-3084 4482 m
-3178 4482 l
-3178 4483 l
-3084 4483 l
-3084 4483 m
-3185 4483 l
-3185 4484 l
-3084 4484 l
-3083 4484 m
-3192 4484 l
-3192 4485 l
-3083 4485 l
-3083 4485 m
-3199 4485 l
-3199 4486 l
-3083 4486 l
-3083 4486 m
-3206 4486 l
-3206 4487 l
-3083 4487 l
-3083 4487 m
-3213 4487 l
-3213 4488 l
-3083 4488 l
-3083 4488 m
-3220 4488 l
-3220 4489 l
-3083 4489 l
-3083 4489 m
-3227 4489 l
-3227 4490 l
-3083 4490 l
-3083 4490 m
-3234 4490 l
-3234 4491 l
-3083 4491 l
-3082 4491 m
-3241 4491 l
-3241 4492 l
-3082 4492 l
-3082 4492 m
-3248 4492 l
-3248 4493 l
-3082 4493 l
-3082 4493 m
-3255 4493 l
-3255 4494 l
-3082 4494 l
-3082 4494 m
-3262 4494 l
-3262 4495 l
-3082 4495 l
-3082 4495 m
-3268 4495 l
-3268 4496 l
-3082 4496 l
-3082 4496 m
-3269 4496 l
-3269 4497 l
-3082 4497 l
-3082 4497 m
-3268 4497 l
-3268 4498 l
-3082 4498 l
-3081 4498 m
-3268 4498 l
-3268 4504 l
-3081 4504 l
-3081 4504 m
-3267 4504 l
-3267 4505 l
-3081 4505 l
-3080 4505 m
-3267 4505 l
-3267 4511 l
-3080 4511 l
-3080 4511 m
-3266 4511 l
-3266 4512 l
-3080 4512 l
-3079 4512 m
-3266 4512 l
-3266 4518 l
-3079 4518 l
-3079 4518 m
-3265 4518 l
-3265 4519 l
-3079 4519 l
-3078 4519 m
-3265 4519 l
-3265 4525 l
-3078 4525 l
-3078 4525 m
-3264 4525 l
-3264 4526 l
-3078 4526 l
-3077 4526 m
-3264 4526 l
-3264 4532 l
-3077 4532 l
-3077 4532 m
-3263 4532 l
-3263 4533 l
-3077 4533 l
-3076 4533 m
-3263 4533 l
-3263 4539 l
-3076 4539 l
-3076 4539 m
-3262 4539 l
-3262 4540 l
-3076 4540 l
-3075 4540 m
-3262 4540 l
-3262 4546 l
-3075 4546 l
-3075 4546 m
-3261 4546 l
-3261 4547 l
-3075 4547 l
-3074 4547 m
-3261 4547 l
-3261 4553 l
-3074 4553 l
-3074 4553 m
-3260 4553 l
-3260 4554 l
-3074 4554 l
-3073 4554 m
-3260 4554 l
-3260 4560 l
-3073 4560 l
-3073 4560 m
-3259 4560 l
-3259 4561 l
-3073 4561 l
-3072 4561 m
-3259 4561 l
-3259 4567 l
-3072 4567 l
-3072 4567 m
-3258 4567 l
-3258 4568 l
-3072 4568 l
-3071 4568 m
-3258 4568 l
-3258 4574 l
-3071 4574 l
-3071 4574 m
-3257 4574 l
-3257 4575 l
-3071 4575 l
-3070 4575 m
-3257 4575 l
-3257 4581 l
-3070 4581 l
-3070 4581 m
-3256 4581 l
-3256 4582 l
-3070 4582 l
-3069 4582 m
-3256 4582 l
-3256 4588 l
-3069 4588 l
-3069 4588 m
-3255 4588 l
-3255 4590 l
-3069 4590 l
-3069 4590 m
-3255 4590 l
-3255 4591 l
-3069 4591 l
-3076 4591 m
-3255 4591 l
-3255 4592 l
-3076 4592 l
-3083 4592 m
-3255 4592 l
-3255 4593 l
-3083 4593 l
-3090 4593 m
-3255 4593 l
-3255 4594 l
-3090 4594 l
-3097 4594 m
-3255 4594 l
-3255 4595 l
-3097 4595 l
-3104 4595 m
-3254 4595 l
-3254 4596 l
-3104 4596 l
-3111 4596 m
-3254 4596 l
-3254 4597 l
-3111 4597 l
-3118 4597 m
-3254 4597 l
-3254 4598 l
-3118 4598 l
-3125 4598 m
-3254 4598 l
-3254 4599 l
-3125 4599 l
-3132 4599 m
-3254 4599 l
-3254 4600 l
-3132 4600 l
-3139 4600 m
-3254 4600 l
-3254 4601 l
-3139 4601 l
-3146 4601 m
-3254 4601 l
-3254 4602 l
-3146 4602 l
-3153 4602 m
-3253 4602 l
-3253 4603 l
-3153 4603 l
-3160 4603 m
-3253 4603 l
-3253 4604 l
-3160 4604 l
-3167 4604 m
-3253 4604 l
-3253 4605 l
-3167 4605 l
-3174 4605 m
-3253 4605 l
-3253 4606 l
-3174 4606 l
-3181 4606 m
-3253 4606 l
-3253 4607 l
-3181 4607 l
-3188 4607 m
-3253 4607 l
-3253 4608 l
-3188 4608 l
-3195 4608 m
-3253 4608 l
-3253 4609 l
-3195 4609 l
-3202 4609 m
-3252 4609 l
-3252 4610 l
-3202 4610 l
-3209 4610 m
-3252 4610 l
-3252 4611 l
-3209 4611 l
-3216 4611 m
-3252 4611 l
-3252 4612 l
-3216 4612 l
-3223 4612 m
-3252 4612 l
-3252 4613 l
-3223 4613 l
-3230 4613 m
-3252 4613 l
-3252 4614 l
-3230 4614 l
-3237 4614 m
-3252 4614 l
-3252 4615 l
-3237 4615 l
-3244 4615 m
-3252 4615 l
-3252 4616 l
-3244 4616 l
-Y
-3086.1 4469.8 m
-3069 4590 l
-3251 4616 l
-3268 4496 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3133 4582 m
-3100 4518 l
-3162 4527 l
-S
-3133 4582 m
-3146 4495 l
-S
-3224 4595 m
-3183 4589 l
-3184 4552 l
-3188 4556 l
-3199 4562 l
-3212 4564 l
-3225 4562 l
-3234 4555 l
-3240 4543 l
-3241 4534 l
-3239 4521 l
-3232 4512 l
-3220 4506 l
-3208 4504 l
-3195 4507 l
-3190 4510 l
-3185 4518 l
-S
-1 g
-2354 4208 m
-2358 4208 l
-2358 4209 l
-2354 4209 l
-2354 4209 m
-2360 4209 l
-2360 4210 l
-2354 4210 l
-2353 4210 m
-2362 4210 l
-2362 4211 l
-2353 4211 l
-2353 4211 m
-2364 4211 l
-2364 4212 l
-2353 4212 l
-2352 4212 m
-2366 4212 l
-2366 4213 l
-2352 4213 l
-2352 4213 m
-2368 4213 l
-2368 4214 l
-2352 4214 l
-2351 4214 m
-2370 4214 l
-2370 4215 l
-2351 4215 l
-2351 4215 m
-2372 4215 l
-2372 4216 l
-2351 4216 l
-2350 4216 m
-2374 4216 l
-2374 4217 l
-2350 4217 l
-2350 4217 m
-2376 4217 l
-2376 4218 l
-2350 4218 l
-2349 4218 m
-2378 4218 l
-2378 4219 l
-2349 4219 l
-2349 4219 m
-2380 4219 l
-2380 4220 l
-2349 4220 l
-2348 4220 m
-2382 4220 l
-2382 4221 l
-2348 4221 l
-2348 4221 m
-2384 4221 l
-2384 4222 l
-2348 4222 l
-2347 4222 m
-2386 4222 l
-2386 4223 l
-2347 4223 l
-2347 4223 m
-2388 4223 l
-2388 4224 l
-2347 4224 l
-2346 4224 m
-2390 4224 l
-2390 4225 l
-2346 4225 l
-2346 4225 m
-2392 4225 l
-2392 4226 l
-2346 4226 l
-2345 4226 m
-2394 4226 l
-2394 4227 l
-2345 4227 l
-2345 4227 m
-2396 4227 l
-2396 4228 l
-2345 4228 l
-2344 4228 m
-2398 4228 l
-2398 4229 l
-2344 4229 l
-2344 4229 m
-2400 4229 l
-2400 4230 l
-2344 4230 l
-2343 4230 m
-2402 4230 l
-2402 4231 l
-2343 4231 l
-2343 4231 m
-2404 4231 l
-2404 4232 l
-2343 4232 l
-2342 4232 m
-2406 4232 l
-2406 4233 l
-2342 4233 l
-2342 4233 m
-2408 4233 l
-2408 4234 l
-2342 4234 l
-2341 4234 m
-2410 4234 l
-2410 4235 l
-2341 4235 l
-2341 4235 m
-2412 4235 l
-2412 4236 l
-2341 4236 l
-2340 4236 m
-2414 4236 l
-2414 4237 l
-2340 4237 l
-2340 4237 m
-2416 4237 l
-2416 4238 l
-2340 4238 l
-2339 4238 m
-2418 4238 l
-2418 4239 l
-2339 4239 l
-2339 4239 m
-2420 4239 l
-2420 4240 l
-2339 4240 l
-2338 4240 m
-2422 4240 l
-2422 4241 l
-2338 4241 l
-2338 4241 m
-2424 4241 l
-2424 4242 l
-2338 4242 l
-2337 4242 m
-2426 4242 l
-2426 4243 l
-2337 4243 l
-2337 4243 m
-2428 4243 l
-2428 4244 l
-2337 4244 l
-2336 4244 m
-2430 4244 l
-2430 4245 l
-2336 4245 l
-2336 4245 m
-2432 4245 l
-2432 4246 l
-2336 4246 l
-2335 4246 m
-2434 4246 l
-2434 4247 l
-2335 4247 l
-2335 4247 m
-2436 4247 l
-2436 4248 l
-2335 4248 l
-2334 4248 m
-2438 4248 l
-2438 4249 l
-2334 4249 l
-2334 4249 m
-2440 4249 l
-2440 4250 l
-2334 4250 l
-2333 4250 m
-2442 4250 l
-2442 4251 l
-2333 4251 l
-2333 4251 m
-2444 4251 l
-2444 4252 l
-2333 4252 l
-2332 4252 m
-2446 4252 l
-2446 4253 l
-2332 4253 l
-2332 4253 m
-2448 4253 l
-2448 4254 l
-2332 4254 l
-2331 4254 m
-2450 4254 l
-2450 4255 l
-2331 4255 l
-2331 4255 m
-2452 4255 l
-2452 4256 l
-2331 4256 l
-2330 4256 m
-2454 4256 l
-2454 4257 l
-2330 4257 l
-2330 4257 m
-2456 4257 l
-2456 4258 l
-2330 4258 l
-2329 4258 m
-2458 4258 l
-2458 4259 l
-2329 4259 l
-2329 4259 m
-2460 4259 l
-2460 4260 l
-2329 4260 l
-2328 4260 m
-2462 4260 l
-2462 4261 l
-2328 4261 l
-2328 4261 m
-2464 4261 l
-2464 4262 l
-2328 4262 l
-2327 4262 m
-2466 4262 l
-2466 4263 l
-2327 4263 l
-2327 4263 m
-2468 4263 l
-2468 4264 l
-2327 4264 l
-2326 4264 m
-2470 4264 l
-2470 4265 l
-2326 4265 l
-2326 4265 m
-2472 4265 l
-2472 4266 l
-2326 4266 l
-2325 4266 m
-2474 4266 l
-2474 4267 l
-2325 4267 l
-2325 4267 m
-2476 4267 l
-2476 4268 l
-2325 4268 l
-2324 4268 m
-2478 4268 l
-2478 4269 l
-2324 4269 l
-2324 4269 m
-2480 4269 l
-2480 4270 l
-2324 4270 l
-2323 4270 m
-2482 4270 l
-2482 4271 l
-2323 4271 l
-2323 4271 m
-2484 4271 l
-2484 4272 l
-2323 4272 l
-2322 4272 m
-2486 4272 l
-2486 4273 l
-2322 4273 l
-2322 4273 m
-2488 4273 l
-2488 4274 l
-2322 4274 l
-2321 4274 m
-2490 4274 l
-2490 4275 l
-2321 4275 l
-2321 4275 m
-2492 4275 l
-2492 4276 l
-2321 4276 l
-2320 4276 m
-2494 4276 l
-2494 4277 l
-2320 4277 l
-2320 4277 m
-2496 4277 l
-2496 4278 l
-2320 4278 l
-2319 4278 m
-2498 4278 l
-2498 4279 l
-2319 4279 l
-2319 4279 m
-2500 4279 l
-2500 4280 l
-2319 4280 l
-2318 4280 m
-2502 4280 l
-2502 4281 l
-2318 4281 l
-2318 4281 m
-2504 4281 l
-2504 4282 l
-2318 4282 l
-2317 4282 m
-2506 4282 l
-2506 4283 l
-2317 4283 l
-2317 4283 m
-2508 4283 l
-2508 4284 l
-2317 4284 l
-2316 4284 m
-2510 4284 l
-2510 4285 l
-2316 4285 l
-2316 4285 m
-2512 4285 l
-2512 4286 l
-2316 4286 l
-2315 4286 m
-2514 4286 l
-2514 4287 l
-2315 4287 l
-2315 4287 m
-2516 4287 l
-2516 4288 l
-2315 4288 l
-2314 4288 m
-2518 4288 l
-2518 4289 l
-2314 4289 l
-2314 4289 m
-2520 4289 l
-2520 4290 l
-2314 4290 l
-2313 4290 m
-2520 4290 l
-2520 4292 l
-2313 4292 l
-2312 4292 m
-2519 4292 l
-2519 4294 l
-2312 4294 l
-2311 4294 m
-2518 4294 l
-2518 4296 l
-2311 4296 l
-2310 4296 m
-2517 4296 l
-2517 4298 l
-2310 4298 l
-2309 4298 m
-2516 4298 l
-2516 4300 l
-2309 4300 l
-2308 4300 m
-2515 4300 l
-2515 4302 l
-2308 4302 l
-2307 4302 m
-2514 4302 l
-2514 4304 l
-2307 4304 l
-2306 4304 m
-2513 4304 l
-2513 4306 l
-2306 4306 l
-2305 4306 m
-2512 4306 l
-2512 4308 l
-2305 4308 l
-2304 4308 m
-2511 4308 l
-2511 4310 l
-2304 4310 l
-2303 4310 m
-2510 4310 l
-2510 4312 l
-2303 4312 l
-2302 4312 m
-2509 4312 l
-2509 4314 l
-2302 4314 l
-2301 4314 m
-2508 4314 l
-2508 4316 l
-2301 4316 l
-2301 4316 m
-2508 4316 l
-2508 4317 l
-2301 4317 l
-2303 4317 m
-2507 4317 l
-2507 4318 l
-2303 4318 l
-2305 4318 m
-2506 4318 l
-2506 4319 l
-2305 4319 l
-2307 4319 m
-2506 4319 l
-2506 4320 l
-2307 4320 l
-2309 4320 m
-2505 4320 l
-2505 4321 l
-2309 4321 l
-2311 4321 m
-2505 4321 l
-2505 4322 l
-2311 4322 l
-2313 4322 m
-2504 4322 l
-2504 4323 l
-2313 4323 l
-2315 4323 m
-2504 4323 l
-2504 4324 l
-2315 4324 l
-2317 4324 m
-2503 4324 l
-2503 4325 l
-2317 4325 l
-2319 4325 m
-2503 4325 l
-2503 4326 l
-2319 4326 l
-2321 4326 m
-2502 4326 l
-2502 4327 l
-2321 4327 l
-2323 4327 m
-2502 4327 l
-2502 4328 l
-2323 4328 l
-2325 4328 m
-2501 4328 l
-2501 4329 l
-2325 4329 l
-2327 4329 m
-2501 4329 l
-2501 4330 l
-2327 4330 l
-2329 4330 m
-2500 4330 l
-2500 4331 l
-2329 4331 l
-2331 4331 m
-2500 4331 l
-2500 4332 l
-2331 4332 l
-2333 4332 m
-2499 4332 l
-2499 4333 l
-2333 4333 l
-2335 4333 m
-2499 4333 l
-2499 4334 l
-2335 4334 l
-2337 4334 m
-2498 4334 l
-2498 4335 l
-2337 4335 l
-2339 4335 m
-2498 4335 l
-2498 4336 l
-2339 4336 l
-2341 4336 m
-2497 4336 l
-2497 4337 l
-2341 4337 l
-2343 4337 m
-2497 4337 l
-2497 4338 l
-2343 4338 l
-2345 4338 m
-2496 4338 l
-2496 4339 l
-2345 4339 l
-2347 4339 m
-2496 4339 l
-2496 4340 l
-2347 4340 l
-2349 4340 m
-2495 4340 l
-2495 4341 l
-2349 4341 l
-2351 4341 m
-2495 4341 l
-2495 4342 l
-2351 4342 l
-2353 4342 m
-2494 4342 l
-2494 4343 l
-2353 4343 l
-2355 4343 m
-2494 4343 l
-2494 4344 l
-2355 4344 l
-2357 4344 m
-2493 4344 l
-2493 4345 l
-2357 4345 l
-2359 4345 m
-2493 4345 l
-2493 4346 l
-2359 4346 l
-2361 4346 m
-2492 4346 l
-2492 4347 l
-2361 4347 l
-2363 4347 m
-2492 4347 l
-2492 4348 l
-2363 4348 l
-2365 4348 m
-2491 4348 l
-2491 4349 l
-2365 4349 l
-2367 4349 m
-2491 4349 l
-2491 4350 l
-2367 4350 l
-2369 4350 m
-2490 4350 l
-2490 4351 l
-2369 4351 l
-2371 4351 m
-2490 4351 l
-2490 4352 l
-2371 4352 l
-2373 4352 m
-2489 4352 l
-2489 4353 l
-2373 4353 l
-2375 4353 m
-2489 4353 l
-2489 4354 l
-2375 4354 l
-2377 4354 m
-2488 4354 l
-2488 4355 l
-2377 4355 l
-2379 4355 m
-2488 4355 l
-2488 4356 l
-2379 4356 l
-2381 4356 m
-2487 4356 l
-2487 4357 l
-2381 4357 l
-2383 4357 m
-2487 4357 l
-2487 4358 l
-2383 4358 l
-2385 4358 m
-2486 4358 l
-2486 4359 l
-2385 4359 l
-2387 4359 m
-2486 4359 l
-2486 4360 l
-2387 4360 l
-2389 4360 m
-2485 4360 l
-2485 4361 l
-2389 4361 l
-2391 4361 m
-2485 4361 l
-2485 4362 l
-2391 4362 l
-2393 4362 m
-2484 4362 l
-2484 4363 l
-2393 4363 l
-2395 4363 m
-2484 4363 l
-2484 4364 l
-2395 4364 l
-2397 4364 m
-2483 4364 l
-2483 4365 l
-2397 4365 l
-2399 4365 m
-2483 4365 l
-2483 4366 l
-2399 4366 l
-2401 4366 m
-2482 4366 l
-2482 4367 l
-2401 4367 l
-2403 4367 m
-2482 4367 l
-2482 4368 l
-2403 4368 l
-2405 4368 m
-2481 4368 l
-2481 4369 l
-2405 4369 l
-2407 4369 m
-2481 4369 l
-2481 4370 l
-2407 4370 l
-2409 4370 m
-2480 4370 l
-2480 4371 l
-2409 4371 l
-2411 4371 m
-2480 4371 l
-2480 4372 l
-2411 4372 l
-2413 4372 m
-2479 4372 l
-2479 4373 l
-2413 4373 l
-2415 4373 m
-2479 4373 l
-2479 4374 l
-2415 4374 l
-2417 4374 m
-2478 4374 l
-2478 4375 l
-2417 4375 l
-2419 4375 m
-2478 4375 l
-2478 4376 l
-2419 4376 l
-2421 4376 m
-2477 4376 l
-2477 4377 l
-2421 4377 l
-2423 4377 m
-2477 4377 l
-2477 4378 l
-2423 4378 l
-2425 4378 m
-2476 4378 l
-2476 4379 l
-2425 4379 l
-2427 4379 m
-2476 4379 l
-2476 4380 l
-2427 4380 l
-2429 4380 m
-2475 4380 l
-2475 4381 l
-2429 4381 l
-2431 4381 m
-2475 4381 l
-2475 4382 l
-2431 4382 l
-2433 4382 m
-2474 4382 l
-2474 4383 l
-2433 4383 l
-2435 4383 m
-2474 4383 l
-2474 4384 l
-2435 4384 l
-2437 4384 m
-2473 4384 l
-2473 4385 l
-2437 4385 l
-2439 4385 m
-2473 4385 l
-2473 4386 l
-2439 4386 l
-2441 4386 m
-2472 4386 l
-2472 4387 l
-2441 4387 l
-2443 4387 m
-2472 4387 l
-2472 4388 l
-2443 4388 l
-2445 4388 m
-2471 4388 l
-2471 4389 l
-2445 4389 l
-2447 4389 m
-2471 4389 l
-2471 4390 l
-2447 4390 l
-2449 4390 m
-2470 4390 l
-2470 4391 l
-2449 4391 l
-2451 4391 m
-2470 4391 l
-2470 4392 l
-2451 4392 l
-2453 4392 m
-2469 4392 l
-2469 4393 l
-2453 4393 l
-2455 4393 m
-2469 4393 l
-2469 4394 l
-2455 4394 l
-2457 4394 m
-2468 4394 l
-2468 4395 l
-2457 4395 l
-2459 4395 m
-2468 4395 l
-2468 4396 l
-2459 4396 l
-2461 4396 m
-2467 4396 l
-2467 4397 l
-2461 4397 l
-2463 4397 m
-2467 4397 l
-2467 4398 l
-2463 4398 l
-Y
-2355.3 4208 m
-2301 4316 l
-2466 4398 l
-2520 4290 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2389 4309 m
-2391 4296 l
-2387 4285 l
-2378 4275 l
-2374 4273 l
-2361 4272 l
-2350 4275 l
-2341 4285 l
-2339 4288 l
-2337 4301 l
-2341 4313 l
-2350 4322 l
-2354 4324 l
-2367 4326 l
-2378 4322 l
-2389 4309 l
-2398 4290 l
-2404 4270 l
-2402 4255 l
-2393 4245 l
-2385 4242 l
-2372 4240 l
-2365 4245 l
-S
-2425 4359 m
-2415 4350 l
-2413 4335 l
-2419 4314 l
-2425 4303 l
-2438 4286 l
-2451 4279 l
-2464 4281 l
-2471 4284 l
-2481 4294 l
-2483 4309 l
-2477 4329 l
-2471 4340 l
-2458 4357 l
-2445 4365 l
-2432 4363 l
-2425 4359 l
-S
-1 g
-1733 3720 m
-1736 3720 l
-1736 3721 l
-1733 3721 l
-1732 3721 m
-1737 3721 l
-1737 3722 l
-1732 3722 l
-1731 3722 m
-1738 3722 l
-1738 3723 l
-1731 3723 l
-1730 3723 m
-1739 3723 l
-1739 3724 l
-1730 3724 l
-1729 3724 m
-1740 3724 l
-1740 3725 l
-1729 3725 l
-1728 3725 m
-1741 3725 l
-1741 3726 l
-1728 3726 l
-1727 3726 m
-1742 3726 l
-1742 3727 l
-1727 3727 l
-1726 3727 m
-1742 3727 l
-1742 3728 l
-1726 3728 l
-1725 3728 m
-1743 3728 l
-1743 3729 l
-1725 3729 l
-1723 3729 m
-1744 3729 l
-1744 3730 l
-1723 3730 l
-1722 3730 m
-1745 3730 l
-1745 3731 l
-1722 3731 l
-1721 3731 m
-1746 3731 l
-1746 3732 l
-1721 3732 l
-1720 3732 m
-1747 3732 l
-1747 3733 l
-1720 3733 l
-1719 3733 m
-1748 3733 l
-1748 3734 l
-1719 3734 l
-1718 3734 m
-1749 3734 l
-1749 3735 l
-1718 3735 l
-1717 3735 m
-1750 3735 l
-1750 3736 l
-1717 3736 l
-1716 3736 m
-1751 3736 l
-1751 3737 l
-1716 3737 l
-1715 3737 m
-1752 3737 l
-1752 3738 l
-1715 3738 l
-1714 3738 m
-1753 3738 l
-1753 3739 l
-1714 3739 l
-1713 3739 m
-1754 3739 l
-1754 3740 l
-1713 3740 l
-1712 3740 m
-1755 3740 l
-1755 3741 l
-1712 3741 l
-1711 3741 m
-1756 3741 l
-1756 3742 l
-1711 3742 l
-1710 3742 m
-1757 3742 l
-1757 3743 l
-1710 3743 l
-1709 3743 m
-1758 3743 l
-1758 3744 l
-1709 3744 l
-1708 3744 m
-1759 3744 l
-1759 3745 l
-1708 3745 l
-1707 3745 m
-1760 3745 l
-1760 3746 l
-1707 3746 l
-1706 3746 m
-1761 3746 l
-1761 3747 l
-1706 3747 l
-1705 3747 m
-1762 3747 l
-1762 3748 l
-1705 3748 l
-1704 3748 m
-1763 3748 l
-1763 3749 l
-1704 3749 l
-1703 3749 m
-1764 3749 l
-1764 3750 l
-1703 3750 l
-1702 3750 m
-1765 3750 l
-1765 3751 l
-1702 3751 l
-1701 3751 m
-1766 3751 l
-1766 3752 l
-1701 3752 l
-1700 3752 m
-1767 3752 l
-1767 3753 l
-1700 3753 l
-1699 3753 m
-1768 3753 l
-1768 3754 l
-1699 3754 l
-1697 3754 m
-1769 3754 l
-1769 3755 l
-1697 3755 l
-1696 3755 m
-1770 3755 l
-1770 3756 l
-1696 3756 l
-1695 3756 m
-1771 3756 l
-1771 3757 l
-1695 3757 l
-1694 3757 m
-1772 3757 l
-1772 3758 l
-1694 3758 l
-1693 3758 m
-1773 3758 l
-1773 3759 l
-1693 3759 l
-1692 3759 m
-1774 3759 l
-1774 3760 l
-1692 3760 l
-1691 3760 m
-1775 3760 l
-1775 3761 l
-1691 3761 l
-1690 3761 m
-1776 3761 l
-1776 3762 l
-1690 3762 l
-1689 3762 m
-1776 3762 l
-1776 3763 l
-1689 3763 l
-1688 3763 m
-1777 3763 l
-1777 3764 l
-1688 3764 l
-1687 3764 m
-1778 3764 l
-1778 3765 l
-1687 3765 l
-1686 3765 m
-1779 3765 l
-1779 3766 l
-1686 3766 l
-1685 3766 m
-1780 3766 l
-1780 3767 l
-1685 3767 l
-1684 3767 m
-1781 3767 l
-1781 3768 l
-1684 3768 l
-1683 3768 m
-1782 3768 l
-1782 3769 l
-1683 3769 l
-1682 3769 m
-1783 3769 l
-1783 3770 l
-1682 3770 l
-1681 3770 m
-1784 3770 l
-1784 3771 l
-1681 3771 l
-1680 3771 m
-1785 3771 l
-1785 3772 l
-1680 3772 l
-1679 3772 m
-1786 3772 l
-1786 3773 l
-1679 3773 l
-1678 3773 m
-1787 3773 l
-1787 3774 l
-1678 3774 l
-1677 3774 m
-1788 3774 l
-1788 3775 l
-1677 3775 l
-1676 3775 m
-1789 3775 l
-1789 3776 l
-1676 3776 l
-1675 3776 m
-1790 3776 l
-1790 3777 l
-1675 3777 l
-1674 3777 m
-1791 3777 l
-1791 3778 l
-1674 3778 l
-1673 3778 m
-1792 3778 l
-1792 3779 l
-1673 3779 l
-1671 3779 m
-1793 3779 l
-1793 3780 l
-1671 3780 l
-1670 3780 m
-1794 3780 l
-1794 3781 l
-1670 3781 l
-1669 3781 m
-1795 3781 l
-1795 3782 l
-1669 3782 l
-1668 3782 m
-1796 3782 l
-1796 3783 l
-1668 3783 l
-1667 3783 m
-1797 3783 l
-1797 3784 l
-1667 3784 l
-1666 3784 m
-1798 3784 l
-1798 3785 l
-1666 3785 l
-1665 3785 m
-1799 3785 l
-1799 3786 l
-1665 3786 l
-1664 3786 m
-1800 3786 l
-1800 3787 l
-1664 3787 l
-1663 3787 m
-1801 3787 l
-1801 3788 l
-1663 3788 l
-1662 3788 m
-1802 3788 l
-1802 3789 l
-1662 3789 l
-1661 3789 m
-1803 3789 l
-1803 3790 l
-1661 3790 l
-1660 3790 m
-1804 3790 l
-1804 3791 l
-1660 3791 l
-1659 3791 m
-1805 3791 l
-1805 3792 l
-1659 3792 l
-1658 3792 m
-1806 3792 l
-1806 3793 l
-1658 3793 l
-1657 3793 m
-1807 3793 l
-1807 3794 l
-1657 3794 l
-1656 3794 m
-1808 3794 l
-1808 3795 l
-1656 3795 l
-1655 3795 m
-1809 3795 l
-1809 3796 l
-1655 3796 l
-1654 3796 m
-1810 3796 l
-1810 3797 l
-1654 3797 l
-1653 3797 m
-1810 3797 l
-1810 3798 l
-1653 3798 l
-1652 3798 m
-1811 3798 l
-1811 3799 l
-1652 3799 l
-1651 3799 m
-1812 3799 l
-1812 3800 l
-1651 3800 l
-1650 3800 m
-1813 3800 l
-1813 3801 l
-1650 3801 l
-1649 3801 m
-1814 3801 l
-1814 3802 l
-1649 3802 l
-1648 3802 m
-1815 3802 l
-1815 3803 l
-1648 3803 l
-1647 3803 m
-1816 3803 l
-1816 3804 l
-1647 3804 l
-1647 3804 m
-1817 3804 l
-1817 3805 l
-1647 3805 l
-1647 3805 m
-1818 3805 l
-1818 3806 l
-1647 3806 l
-1648 3806 m
-1819 3806 l
-1819 3807 l
-1648 3807 l
-1649 3807 m
-1820 3807 l
-1820 3808 l
-1649 3808 l
-1650 3808 m
-1821 3808 l
-1821 3809 l
-1650 3809 l
-1651 3809 m
-1822 3809 l
-1822 3810 l
-1651 3810 l
-1652 3810 m
-1823 3810 l
-1823 3811 l
-1652 3811 l
-1653 3811 m
-1824 3811 l
-1824 3812 l
-1653 3812 l
-1654 3812 m
-1825 3812 l
-1825 3813 l
-1654 3813 l
-1655 3813 m
-1826 3813 l
-1826 3814 l
-1655 3814 l
-1656 3814 m
-1827 3814 l
-1827 3815 l
-1656 3815 l
-1657 3815 m
-1828 3815 l
-1828 3816 l
-1657 3816 l
-1658 3816 m
-1829 3816 l
-1829 3817 l
-1658 3817 l
-1659 3817 m
-1830 3817 l
-1830 3818 l
-1659 3818 l
-1660 3818 m
-1831 3818 l
-1831 3819 l
-1660 3819 l
-1661 3819 m
-1832 3819 l
-1832 3820 l
-1661 3820 l
-1662 3820 m
-1833 3820 l
-1833 3821 l
-1662 3821 l
-1663 3821 m
-1834 3821 l
-1834 3822 l
-1663 3822 l
-1664 3822 m
-1835 3822 l
-1835 3823 l
-1664 3823 l
-1665 3823 m
-1836 3823 l
-1836 3824 l
-1665 3824 l
-1666 3824 m
-1837 3824 l
-1837 3825 l
-1666 3825 l
-1667 3825 m
-1838 3825 l
-1838 3826 l
-1667 3826 l
-1668 3826 m
-1839 3826 l
-1839 3827 l
-1668 3827 l
-1669 3827 m
-1840 3827 l
-1840 3828 l
-1669 3828 l
-1670 3828 m
-1841 3828 l
-1841 3829 l
-1670 3829 l
-1671 3829 m
-1842 3829 l
-1842 3830 l
-1671 3830 l
-1672 3830 m
-1843 3830 l
-1843 3831 l
-1672 3831 l
-1673 3831 m
-1844 3831 l
-1844 3832 l
-1673 3832 l
-1674 3832 m
-1844 3832 l
-1844 3833 l
-1674 3833 l
-1675 3833 m
-1845 3833 l
-1845 3834 l
-1675 3834 l
-1676 3834 m
-1846 3834 l
-1846 3835 l
-1676 3835 l
-1677 3835 m
-1847 3835 l
-1847 3836 l
-1677 3836 l
-1678 3836 m
-1848 3836 l
-1848 3837 l
-1678 3837 l
-1679 3837 m
-1849 3837 l
-1849 3838 l
-1679 3838 l
-1680 3838 m
-1850 3838 l
-1850 3839 l
-1680 3839 l
-1681 3839 m
-1851 3839 l
-1851 3840 l
-1681 3840 l
-1682 3840 m
-1852 3840 l
-1852 3841 l
-1682 3841 l
-1682 3841 m
-1853 3841 l
-1853 3842 l
-1682 3842 l
-1683 3842 m
-1854 3842 l
-1854 3843 l
-1683 3843 l
-1684 3843 m
-1855 3843 l
-1855 3844 l
-1684 3844 l
-1685 3844 m
-1856 3844 l
-1856 3845 l
-1685 3845 l
-1686 3845 m
-1857 3845 l
-1857 3846 l
-1686 3846 l
-1687 3846 m
-1858 3846 l
-1858 3847 l
-1687 3847 l
-1688 3847 m
-1859 3847 l
-1859 3848 l
-1688 3848 l
-1689 3848 m
-1860 3848 l
-1860 3849 l
-1689 3849 l
-1690 3849 m
-1861 3849 l
-1861 3850 l
-1690 3850 l
-1691 3850 m
-1862 3850 l
-1862 3851 l
-1691 3851 l
-1692 3851 m
-1863 3851 l
-1863 3852 l
-1692 3852 l
-1693 3852 m
-1864 3852 l
-1864 3853 l
-1693 3853 l
-1694 3853 m
-1865 3853 l
-1865 3854 l
-1694 3854 l
-1695 3854 m
-1866 3854 l
-1866 3855 l
-1695 3855 l
-1696 3855 m
-1867 3855 l
-1867 3856 l
-1696 3856 l
-1697 3856 m
-1868 3856 l
-1868 3857 l
-1697 3857 l
-1698 3857 m
-1869 3857 l
-1869 3858 l
-1698 3858 l
-1699 3858 m
-1870 3858 l
-1870 3859 l
-1699 3859 l
-1700 3859 m
-1871 3859 l
-1871 3860 l
-1700 3860 l
-1701 3860 m
-1872 3860 l
-1872 3861 l
-1701 3861 l
-1702 3861 m
-1873 3861 l
-1873 3862 l
-1702 3862 l
-1703 3862 m
-1874 3862 l
-1874 3863 l
-1703 3863 l
-1704 3863 m
-1875 3863 l
-1875 3864 l
-1704 3864 l
-1705 3864 m
-1876 3864 l
-1876 3865 l
-1705 3865 l
-1706 3865 m
-1877 3865 l
-1877 3866 l
-1706 3866 l
-1707 3866 m
-1878 3866 l
-1878 3867 l
-1707 3867 l
-1708 3867 m
-1878 3867 l
-1878 3868 l
-1708 3868 l
-1709 3868 m
-1879 3868 l
-1879 3869 l
-1709 3869 l
-1710 3869 m
-1880 3869 l
-1880 3870 l
-1710 3870 l
-1711 3870 m
-1881 3870 l
-1881 3871 l
-1711 3871 l
-1712 3871 m
-1882 3871 l
-1882 3872 l
-1712 3872 l
-1713 3872 m
-1883 3872 l
-1883 3873 l
-1713 3873 l
-1714 3873 m
-1884 3873 l
-1884 3874 l
-1714 3874 l
-1715 3874 m
-1885 3874 l
-1885 3875 l
-1715 3875 l
-1716 3875 m
-1886 3875 l
-1886 3876 l
-1716 3876 l
-1717 3876 m
-1887 3876 l
-1887 3877 l
-1717 3877 l
-1718 3877 m
-1888 3877 l
-1888 3878 l
-1718 3878 l
-1718 3878 m
-1889 3878 l
-1889 3879 l
-1718 3879 l
-1719 3879 m
-1890 3879 l
-1890 3880 l
-1719 3880 l
-1720 3880 m
-1891 3880 l
-1891 3881 l
-1720 3881 l
-1721 3881 m
-1892 3881 l
-1892 3882 l
-1721 3882 l
-1722 3882 m
-1893 3882 l
-1893 3883 l
-1722 3883 l
-1723 3883 m
-1894 3883 l
-1894 3884 l
-1723 3884 l
-1724 3884 m
-1895 3884 l
-1895 3885 l
-1724 3885 l
-1725 3885 m
-1896 3885 l
-1896 3886 l
-1725 3886 l
-1726 3886 m
-1897 3886 l
-1897 3887 l
-1726 3887 l
-1727 3887 m
-1898 3887 l
-1898 3888 l
-1727 3888 l
-1728 3888 m
-1899 3888 l
-1899 3889 l
-1728 3889 l
-1729 3889 m
-1900 3889 l
-1900 3890 l
-1729 3890 l
-1730 3890 m
-1901 3890 l
-1901 3891 l
-1730 3891 l
-1731 3891 m
-1902 3891 l
-1902 3892 l
-1731 3892 l
-1732 3892 m
-1903 3892 l
-1903 3893 l
-1732 3893 l
-1733 3893 m
-1904 3893 l
-1904 3894 l
-1733 3894 l
-1734 3894 m
-1905 3894 l
-1905 3895 l
-1734 3895 l
-1735 3895 m
-1906 3895 l
-1906 3896 l
-1735 3896 l
-1736 3896 m
-1907 3896 l
-1907 3897 l
-1736 3897 l
-1737 3897 m
-1908 3897 l
-1908 3898 l
-1737 3898 l
-1738 3898 m
-1909 3898 l
-1909 3899 l
-1738 3899 l
-1739 3899 m
-1910 3899 l
-1910 3900 l
-1739 3900 l
-1740 3900 m
-1911 3900 l
-1911 3901 l
-1740 3901 l
-1741 3901 m
-1912 3901 l
-1912 3902 l
-1741 3902 l
-1742 3902 m
-1913 3902 l
-1913 3903 l
-1742 3903 l
-1743 3903 m
-1912 3903 l
-1912 3904 l
-1743 3904 l
-1744 3904 m
-1911 3904 l
-1911 3905 l
-1744 3905 l
-1745 3905 m
-1910 3905 l
-1910 3906 l
-1745 3906 l
-1746 3906 m
-1909 3906 l
-1909 3907 l
-1746 3907 l
-1747 3907 m
-1908 3907 l
-1908 3908 l
-1747 3908 l
-1748 3908 m
-1907 3908 l
-1907 3909 l
-1748 3909 l
-1749 3909 m
-1906 3909 l
-1906 3910 l
-1749 3910 l
-1750 3910 m
-1905 3910 l
-1905 3911 l
-1750 3911 l
-1751 3911 m
-1904 3911 l
-1904 3912 l
-1751 3912 l
-1752 3912 m
-1903 3912 l
-1903 3913 l
-1752 3913 l
-1753 3913 m
-1902 3913 l
-1902 3914 l
-1753 3914 l
-1753 3914 m
-1901 3914 l
-1901 3915 l
-1753 3915 l
-1754 3915 m
-1900 3915 l
-1900 3916 l
-1754 3916 l
-1755 3916 m
-1899 3916 l
-1899 3917 l
-1755 3917 l
-1756 3917 m
-1898 3917 l
-1898 3918 l
-1756 3918 l
-1757 3918 m
-1897 3918 l
-1897 3919 l
-1757 3919 l
-1758 3919 m
-1896 3919 l
-1896 3920 l
-1758 3920 l
-1759 3920 m
-1895 3920 l
-1895 3921 l
-1759 3921 l
-1760 3921 m
-1894 3921 l
-1894 3922 l
-1760 3922 l
-1761 3922 m
-1893 3922 l
-1893 3923 l
-1761 3923 l
-1762 3923 m
-1892 3923 l
-1892 3924 l
-1762 3924 l
-1763 3924 m
-1891 3924 l
-1891 3925 l
-1763 3925 l
-1764 3925 m
-1890 3925 l
-1890 3926 l
-1764 3926 l
-1765 3926 m
-1889 3926 l
-1889 3927 l
-1765 3927 l
-1766 3927 m
-1888 3927 l
-1888 3928 l
-1766 3928 l
-1767 3928 m
-1887 3928 l
-1887 3929 l
-1767 3929 l
-1768 3929 m
-1886 3929 l
-1886 3930 l
-1768 3930 l
-1769 3930 m
-1885 3930 l
-1885 3931 l
-1769 3931 l
-1770 3931 m
-1883 3931 l
-1883 3932 l
-1770 3932 l
-1771 3932 m
-1882 3932 l
-1882 3933 l
-1771 3933 l
-1772 3933 m
-1881 3933 l
-1881 3934 l
-1772 3934 l
-1773 3934 m
-1880 3934 l
-1880 3935 l
-1773 3935 l
-1774 3935 m
-1879 3935 l
-1879 3936 l
-1774 3936 l
-1775 3936 m
-1878 3936 l
-1878 3937 l
-1775 3937 l
-1776 3937 m
-1877 3937 l
-1877 3938 l
-1776 3938 l
-1777 3938 m
-1876 3938 l
-1876 3939 l
-1777 3939 l
-1778 3939 m
-1875 3939 l
-1875 3940 l
-1778 3940 l
-1779 3940 m
-1874 3940 l
-1874 3941 l
-1779 3941 l
-1780 3941 m
-1873 3941 l
-1873 3942 l
-1780 3942 l
-1781 3942 m
-1872 3942 l
-1872 3943 l
-1781 3943 l
-1782 3943 m
-1871 3943 l
-1871 3944 l
-1782 3944 l
-1783 3944 m
-1870 3944 l
-1870 3945 l
-1783 3945 l
-1784 3945 m
-1869 3945 l
-1869 3946 l
-1784 3946 l
-1785 3946 m
-1868 3946 l
-1868 3947 l
-1785 3947 l
-1786 3947 m
-1867 3947 l
-1867 3948 l
-1786 3948 l
-1787 3948 m
-1866 3948 l
-1866 3949 l
-1787 3949 l
-1788 3949 m
-1865 3949 l
-1865 3950 l
-1788 3950 l
-1789 3950 m
-1864 3950 l
-1864 3951 l
-1789 3951 l
-1789 3951 m
-1863 3951 l
-1863 3952 l
-1789 3952 l
-1790 3952 m
-1862 3952 l
-1862 3953 l
-1790 3953 l
-1791 3953 m
-1861 3953 l
-1861 3954 l
-1791 3954 l
-1792 3954 m
-1860 3954 l
-1860 3955 l
-1792 3955 l
-1793 3955 m
-1859 3955 l
-1859 3956 l
-1793 3956 l
-1794 3956 m
-1858 3956 l
-1858 3957 l
-1794 3957 l
-1795 3957 m
-1857 3957 l
-1857 3958 l
-1795 3958 l
-1796 3958 m
-1856 3958 l
-1856 3959 l
-1796 3959 l
-1797 3959 m
-1854 3959 l
-1854 3960 l
-1797 3960 l
-1798 3960 m
-1853 3960 l
-1853 3961 l
-1798 3961 l
-1799 3961 m
-1852 3961 l
-1852 3962 l
-1799 3962 l
-1800 3962 m
-1851 3962 l
-1851 3963 l
-1800 3963 l
-1801 3963 m
-1850 3963 l
-1850 3964 l
-1801 3964 l
-1802 3964 m
-1849 3964 l
-1849 3965 l
-1802 3965 l
-1803 3965 m
-1848 3965 l
-1848 3966 l
-1803 3966 l
-1804 3966 m
-1847 3966 l
-1847 3967 l
-1804 3967 l
-1805 3967 m
-1846 3967 l
-1846 3968 l
-1805 3968 l
-1806 3968 m
-1845 3968 l
-1845 3969 l
-1806 3969 l
-1807 3969 m
-1844 3969 l
-1844 3970 l
-1807 3970 l
-1808 3970 m
-1843 3970 l
-1843 3971 l
-1808 3971 l
-1809 3971 m
-1842 3971 l
-1842 3972 l
-1809 3972 l
-1810 3972 m
-1841 3972 l
-1841 3973 l
-1810 3973 l
-1811 3973 m
-1840 3973 l
-1840 3974 l
-1811 3974 l
-1812 3974 m
-1839 3974 l
-1839 3975 l
-1812 3975 l
-1813 3975 m
-1838 3975 l
-1838 3976 l
-1813 3976 l
-1814 3976 m
-1837 3976 l
-1837 3977 l
-1814 3977 l
-1815 3977 m
-1836 3977 l
-1836 3978 l
-1815 3978 l
-1816 3978 m
-1835 3978 l
-1835 3979 l
-1816 3979 l
-1817 3979 m
-1834 3979 l
-1834 3980 l
-1817 3980 l
-1818 3980 m
-1833 3980 l
-1833 3981 l
-1818 3981 l
-1819 3981 m
-1832 3981 l
-1832 3982 l
-1819 3982 l
-1820 3982 m
-1831 3982 l
-1831 3983 l
-1820 3983 l
-1821 3983 m
-1830 3983 l
-1830 3984 l
-1821 3984 l
-1822 3984 m
-1829 3984 l
-1829 3985 l
-1822 3985 l
-1823 3985 m
-1828 3985 l
-1828 3986 l
-1823 3986 l
-1824 3986 m
-1827 3986 l
-1827 3987 l
-1824 3987 l
-Y
-1734.3 3720.1 m
-1647 3804 l
-1825 3987 l
-1912 3903 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1686 3796 m
-1689 3805 l
-1688 3823 l
-1751 3762 l
-S
-1729 3865 m
-1761 3898 l
-1768 3856 l
-1776 3865 l
-1785 3869 l
-1791 3869 l
-1803 3863 l
-1809 3857 l
-1815 3845 l
-1815 3834 l
-1809 3822 l
-1801 3813 l
-1789 3807 l
-1783 3807 l
-1774 3809 l
-S
-1816 3955 m
-1787 3925 l
-1811 3896 l
-1811 3901 l
-1817 3913 l
-1826 3922 l
-1837 3928 l
-1849 3929 l
-1861 3923 l
-1867 3917 l
-1873 3905 l
-1873 3894 l
-1868 3882 l
-1859 3873 l
-1847 3867 l
-1841 3866 l
-1832 3869 l
-S
-1 g
-1467 3111 m
-1471 3111 l
-1471 3112 l
-1467 3112 l
-1462 3112 m
-1471 3112 l
-1471 3113 l
-1462 3113 l
-1456 3113 m
-1471 3113 l
-1471 3114 l
-1456 3114 l
-1451 3114 m
-1471 3114 l
-1471 3115 l
-1451 3115 l
-1446 3115 m
-1472 3115 l
-1472 3116 l
-1446 3116 l
-1441 3116 m
-1472 3116 l
-1472 3117 l
-1441 3117 l
-1435 3117 m
-1472 3117 l
-1472 3118 l
-1435 3118 l
-1430 3118 m
-1472 3118 l
-1472 3119 l
-1430 3119 l
-1425 3119 m
-1472 3119 l
-1472 3120 l
-1425 3120 l
-1419 3120 m
-1472 3120 l
-1472 3121 l
-1419 3121 l
-1414 3121 m
-1473 3121 l
-1473 3122 l
-1414 3122 l
-1409 3122 m
-1473 3122 l
-1473 3123 l
-1409 3123 l
-1403 3123 m
-1473 3123 l
-1473 3124 l
-1403 3124 l
-1398 3124 m
-1473 3124 l
-1473 3125 l
-1398 3125 l
-1393 3125 m
-1473 3125 l
-1473 3126 l
-1393 3126 l
-1388 3126 m
-1474 3126 l
-1474 3127 l
-1388 3127 l
-1382 3127 m
-1474 3127 l
-1474 3128 l
-1382 3128 l
-1377 3128 m
-1474 3128 l
-1474 3129 l
-1377 3129 l
-1372 3129 m
-1474 3129 l
-1474 3130 l
-1372 3130 l
-1366 3130 m
-1474 3130 l
-1474 3131 l
-1366 3131 l
-1361 3131 m
-1475 3131 l
-1475 3132 l
-1361 3132 l
-1356 3132 m
-1475 3132 l
-1475 3133 l
-1356 3133 l
-1351 3133 m
-1475 3133 l
-1475 3134 l
-1351 3134 l
-1351 3134 m
-1475 3134 l
-1475 3137 l
-1351 3137 l
-1351 3137 m
-1476 3137 l
-1476 3140 l
-1351 3140 l
-1352 3140 m
-1476 3140 l
-1476 3142 l
-1352 3142 l
-1352 3142 m
-1477 3142 l
-1477 3145 l
-1352 3145 l
-1353 3145 m
-1477 3145 l
-1477 3147 l
-1353 3147 l
-1353 3147 m
-1478 3147 l
-1478 3150 l
-1353 3150 l
-1354 3150 m
-1478 3150 l
-1478 3153 l
-1354 3153 l
-1354 3153 m
-1479 3153 l
-1479 3156 l
-1354 3156 l
-1355 3156 m
-1479 3156 l
-1479 3158 l
-1355 3158 l
-1355 3158 m
-1480 3158 l
-1480 3161 l
-1355 3161 l
-1356 3161 m
-1480 3161 l
-1480 3163 l
-1356 3163 l
-1356 3163 m
-1481 3163 l
-1481 3166 l
-1356 3166 l
-1357 3166 m
-1481 3166 l
-1481 3169 l
-1357 3169 l
-1357 3169 m
-1482 3169 l
-1482 3172 l
-1357 3172 l
-1358 3172 m
-1482 3172 l
-1482 3174 l
-1358 3174 l
-1358 3174 m
-1483 3174 l
-1483 3177 l
-1358 3177 l
-1359 3177 m
-1483 3177 l
-1483 3180 l
-1359 3180 l
-1359 3180 m
-1484 3180 l
-1484 3182 l
-1359 3182 l
-1360 3182 m
-1484 3182 l
-1484 3185 l
-1360 3185 l
-1360 3185 m
-1485 3185 l
-1485 3188 l
-1360 3188 l
-1361 3188 m
-1485 3188 l
-1485 3190 l
-1361 3190 l
-1361 3190 m
-1486 3190 l
-1486 3193 l
-1361 3193 l
-1362 3193 m
-1486 3193 l
-1486 3196 l
-1362 3196 l
-1362 3196 m
-1487 3196 l
-1487 3198 l
-1362 3198 l
-1363 3198 m
-1487 3198 l
-1487 3201 l
-1363 3201 l
-1363 3201 m
-1488 3201 l
-1488 3204 l
-1363 3204 l
-1364 3204 m
-1488 3204 l
-1488 3206 l
-1364 3206 l
-1364 3206 m
-1489 3206 l
-1489 3209 l
-1364 3209 l
-1365 3209 m
-1489 3209 l
-1489 3212 l
-1365 3212 l
-1365 3212 m
-1490 3212 l
-1490 3214 l
-1365 3214 l
-1366 3214 m
-1490 3214 l
-1490 3217 l
-1366 3217 l
-1366 3217 m
-1491 3217 l
-1491 3220 l
-1366 3220 l
-1367 3220 m
-1491 3220 l
-1491 3222 l
-1367 3222 l
-1367 3222 m
-1492 3222 l
-1492 3225 l
-1367 3225 l
-1368 3225 m
-1492 3225 l
-1492 3228 l
-1368 3228 l
-1368 3228 m
-1493 3228 l
-1493 3230 l
-1368 3230 l
-1369 3230 m
-1493 3230 l
-1493 3233 l
-1369 3233 l
-1369 3233 m
-1494 3233 l
-1494 3236 l
-1369 3236 l
-1370 3236 m
-1494 3236 l
-1494 3238 l
-1370 3238 l
-1370 3238 m
-1495 3238 l
-1495 3241 l
-1370 3241 l
-1371 3241 m
-1495 3241 l
-1495 3244 l
-1371 3244 l
-1371 3244 m
-1496 3244 l
-1496 3246 l
-1371 3246 l
-1372 3246 m
-1496 3246 l
-1496 3249 l
-1372 3249 l
-1372 3249 m
-1497 3249 l
-1497 3252 l
-1372 3252 l
-1373 3252 m
-1497 3252 l
-1497 3254 l
-1373 3254 l
-1373 3254 m
-1498 3254 l
-1498 3257 l
-1373 3257 l
-1374 3257 m
-1498 3257 l
-1498 3260 l
-1374 3260 l
-1374 3260 m
-1499 3260 l
-1499 3262 l
-1374 3262 l
-1375 3262 m
-1499 3262 l
-1499 3265 l
-1375 3265 l
-1375 3265 m
-1500 3265 l
-1500 3267 l
-1375 3267 l
-1376 3267 m
-1500 3267 l
-1500 3271 l
-1376 3271 l
-1376 3271 m
-1501 3271 l
-1501 3273 l
-1376 3273 l
-1377 3273 m
-1501 3273 l
-1501 3276 l
-1377 3276 l
-1377 3276 m
-1502 3276 l
-1502 3278 l
-1377 3278 l
-1378 3278 m
-1502 3278 l
-1502 3281 l
-1378 3281 l
-1378 3281 m
-1503 3281 l
-1503 3283 l
-1378 3283 l
-1379 3283 m
-1503 3283 l
-1503 3287 l
-1379 3287 l
-1379 3287 m
-1504 3287 l
-1504 3289 l
-1379 3289 l
-1380 3289 m
-1504 3289 l
-1504 3292 l
-1380 3292 l
-1380 3292 m
-1505 3292 l
-1505 3294 l
-1380 3294 l
-1381 3294 m
-1505 3294 l
-1505 3297 l
-1381 3297 l
-1381 3297 m
-1506 3297 l
-1506 3299 l
-1381 3299 l
-1382 3299 m
-1506 3299 l
-1506 3303 l
-1382 3303 l
-1382 3303 m
-1507 3303 l
-1507 3305 l
-1382 3305 l
-1383 3305 m
-1507 3305 l
-1507 3308 l
-1383 3308 l
-1383 3308 m
-1508 3308 l
-1508 3310 l
-1383 3310 l
-1384 3310 m
-1508 3310 l
-1508 3313 l
-1384 3313 l
-1384 3313 m
-1509 3313 l
-1509 3315 l
-1384 3315 l
-1385 3315 m
-1509 3315 l
-1509 3319 l
-1385 3319 l
-1385 3319 m
-1510 3319 l
-1510 3321 l
-1385 3321 l
-1386 3321 m
-1510 3321 l
-1510 3324 l
-1386 3324 l
-1386 3324 m
-1511 3324 l
-1511 3326 l
-1386 3326 l
-1387 3326 m
-1511 3326 l
-1511 3329 l
-1387 3329 l
-1387 3329 m
-1512 3329 l
-1512 3331 l
-1387 3331 l
-1388 3331 m
-1512 3331 l
-1512 3335 l
-1388 3335 l
-1388 3335 m
-1513 3335 l
-1513 3337 l
-1388 3337 l
-1389 3337 m
-1513 3337 l
-1513 3340 l
-1389 3340 l
-1389 3340 m
-1514 3340 l
-1514 3342 l
-1389 3342 l
-1390 3342 m
-1514 3342 l
-1514 3345 l
-1390 3345 l
-1390 3345 m
-1515 3345 l
-1515 3347 l
-1390 3347 l
-1391 3347 m
-1515 3347 l
-1515 3351 l
-1391 3351 l
-1391 3351 m
-1516 3351 l
-1516 3353 l
-1391 3353 l
-1392 3353 m
-1516 3353 l
-1516 3356 l
-1392 3356 l
-1392 3356 m
-1517 3356 l
-1517 3358 l
-1392 3358 l
-1393 3358 m
-1517 3358 l
-1517 3362 l
-1393 3362 l
-1393 3362 m
-1518 3362 l
-1518 3363 l
-1393 3363 l
-1394 3363 m
-1512 3363 l
-1512 3364 l
-1394 3364 l
-1394 3364 m
-1507 3364 l
-1507 3365 l
-1394 3365 l
-1394 3365 m
-1501 3365 l
-1501 3366 l
-1394 3366 l
-1394 3366 m
-1496 3366 l
-1496 3367 l
-1394 3367 l
-1394 3367 m
-1490 3367 l
-1490 3368 l
-1394 3368 l
-1394 3368 m
-1485 3368 l
-1485 3369 l
-1394 3369 l
-1395 3369 m
-1480 3369 l
-1480 3370 l
-1395 3370 l
-1395 3370 m
-1474 3370 l
-1474 3371 l
-1395 3371 l
-1395 3371 m
-1469 3371 l
-1469 3372 l
-1395 3372 l
-1395 3372 m
-1463 3372 l
-1463 3373 l
-1395 3373 l
-1395 3373 m
-1458 3373 l
-1458 3374 l
-1395 3374 l
-1396 3374 m
-1453 3374 l
-1453 3375 l
-1396 3375 l
-1396 3375 m
-1447 3375 l
-1447 3376 l
-1396 3376 l
-1396 3376 m
-1442 3376 l
-1442 3377 l
-1396 3377 l
-1396 3377 m
-1436 3377 l
-1436 3378 l
-1396 3378 l
-1396 3378 m
-1431 3378 l
-1431 3379 l
-1396 3379 l
-1397 3379 m
-1426 3379 l
-1426 3380 l
-1397 3380 l
-1397 3380 m
-1420 3380 l
-1420 3381 l
-1397 3381 l
-1397 3381 m
-1415 3381 l
-1415 3382 l
-1397 3382 l
-1397 3382 m
-1409 3382 l
-1409 3383 l
-1397 3383 l
-1397 3383 m
-1404 3383 l
-1404 3384 l
-1397 3384 l
-Y
-1470.2 3111.5 m
-1351 3134 l
-1398 3384 l
-1517 3362 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1388 3148 m
-1385 3157 l
-1375 3172 l
-1462 3156 l
-S
-1389 3242 m
-1390 3229 l
-1398 3223 l
-1406 3221 l
-1415 3224 l
-1421 3231 l
-1428 3247 l
-1434 3259 l
-1444 3265 l
-1453 3268 l
-1465 3265 l
-1473 3260 l
-1476 3255 l
-1478 3242 l
-1475 3225 l
-1468 3214 l
-1463 3211 l
-1454 3208 l
-1442 3210 l
-1435 3216 l
-1428 3226 l
-1426 3239 l
-1425 3256 l
-1423 3265 l
-1415 3271 l
-1407 3272 l
-1398 3270 l
-1392 3258 l
-1389 3242 l
-S
-1405 3328 m
-1407 3315 l
-1417 3304 l
-1437 3296 l
-1449 3294 l
-1471 3294 l
-1485 3300 l
-1491 3312 l
-1493 3320 l
-1491 3333 l
-1480 3343 l
-1460 3351 l
-1448 3354 l
-1427 3354 l
-1413 3348 l
-1406 3336 l
-1405 3328 l
-S
-1 g
-1766 2327 m
-1769 2327 l
-1769 2328 l
-1766 2328 l
-1765 2328 m
-1770 2328 l
-1770 2329 l
-1765 2329 l
-1764 2329 m
-1771 2329 l
-1771 2330 l
-1764 2330 l
-1763 2330 m
-1772 2330 l
-1772 2331 l
-1763 2331 l
-1762 2331 m
-1773 2331 l
-1773 2332 l
-1762 2332 l
-1761 2332 m
-1774 2332 l
-1774 2333 l
-1761 2333 l
-1760 2333 m
-1775 2333 l
-1775 2334 l
-1760 2334 l
-1759 2334 m
-1776 2334 l
-1776 2335 l
-1759 2335 l
-1758 2335 m
-1777 2335 l
-1777 2336 l
-1758 2336 l
-1757 2336 m
-1778 2336 l
-1778 2337 l
-1757 2337 l
-1756 2337 m
-1779 2337 l
-1779 2338 l
-1756 2338 l
-1755 2338 m
-1780 2338 l
-1780 2339 l
-1755 2339 l
-1754 2339 m
-1781 2339 l
-1781 2340 l
-1754 2340 l
-1753 2340 m
-1782 2340 l
-1782 2341 l
-1753 2341 l
-1752 2341 m
-1783 2341 l
-1783 2342 l
-1752 2342 l
-1751 2342 m
-1784 2342 l
-1784 2343 l
-1751 2343 l
-1750 2343 m
-1785 2343 l
-1785 2344 l
-1750 2344 l
-1749 2344 m
-1786 2344 l
-1786 2345 l
-1749 2345 l
-1748 2345 m
-1787 2345 l
-1787 2346 l
-1748 2346 l
-1747 2346 m
-1788 2346 l
-1788 2347 l
-1747 2347 l
-1746 2347 m
-1789 2347 l
-1789 2348 l
-1746 2348 l
-1745 2348 m
-1790 2348 l
-1790 2349 l
-1745 2349 l
-1744 2349 m
-1791 2349 l
-1791 2350 l
-1744 2350 l
-1743 2350 m
-1792 2350 l
-1792 2351 l
-1743 2351 l
-1742 2351 m
-1793 2351 l
-1793 2352 l
-1742 2352 l
-1741 2352 m
-1794 2352 l
-1794 2353 l
-1741 2353 l
-1739 2353 m
-1795 2353 l
-1795 2354 l
-1739 2354 l
-1738 2354 m
-1796 2354 l
-1796 2355 l
-1738 2355 l
-1737 2355 m
-1796 2355 l
-1796 2356 l
-1737 2356 l
-1736 2356 m
-1797 2356 l
-1797 2357 l
-1736 2357 l
-1735 2357 m
-1798 2357 l
-1798 2358 l
-1735 2358 l
-1734 2358 m
-1799 2358 l
-1799 2359 l
-1734 2359 l
-1733 2359 m
-1800 2359 l
-1800 2360 l
-1733 2360 l
-1732 2360 m
-1801 2360 l
-1801 2361 l
-1732 2361 l
-1731 2361 m
-1802 2361 l
-1802 2362 l
-1731 2362 l
-1730 2362 m
-1803 2362 l
-1803 2363 l
-1730 2363 l
-1729 2363 m
-1804 2363 l
-1804 2364 l
-1729 2364 l
-1728 2364 m
-1805 2364 l
-1805 2365 l
-1728 2365 l
-1727 2365 m
-1806 2365 l
-1806 2366 l
-1727 2366 l
-1726 2366 m
-1807 2366 l
-1807 2367 l
-1726 2367 l
-1725 2367 m
-1808 2367 l
-1808 2368 l
-1725 2368 l
-1724 2368 m
-1809 2368 l
-1809 2369 l
-1724 2369 l
-1723 2369 m
-1810 2369 l
-1810 2370 l
-1723 2370 l
-1722 2370 m
-1811 2370 l
-1811 2371 l
-1722 2371 l
-1721 2371 m
-1812 2371 l
-1812 2372 l
-1721 2372 l
-1720 2372 m
-1813 2372 l
-1813 2373 l
-1720 2373 l
-1719 2373 m
-1814 2373 l
-1814 2374 l
-1719 2374 l
-1718 2374 m
-1815 2374 l
-1815 2375 l
-1718 2375 l
-1717 2375 m
-1816 2375 l
-1816 2376 l
-1717 2376 l
-1716 2376 m
-1817 2376 l
-1817 2377 l
-1716 2377 l
-1715 2377 m
-1818 2377 l
-1818 2378 l
-1715 2378 l
-1714 2378 m
-1819 2378 l
-1819 2379 l
-1714 2379 l
-1712 2379 m
-1820 2379 l
-1820 2380 l
-1712 2380 l
-1711 2380 m
-1821 2380 l
-1821 2381 l
-1711 2381 l
-1710 2381 m
-1822 2381 l
-1822 2382 l
-1710 2382 l
-1709 2382 m
-1823 2382 l
-1823 2383 l
-1709 2383 l
-1708 2383 m
-1823 2383 l
-1823 2384 l
-1708 2384 l
-1707 2384 m
-1824 2384 l
-1824 2385 l
-1707 2385 l
-1706 2385 m
-1825 2385 l
-1825 2386 l
-1706 2386 l
-1705 2386 m
-1826 2386 l
-1826 2387 l
-1705 2387 l
-1704 2387 m
-1827 2387 l
-1827 2388 l
-1704 2388 l
-1703 2388 m
-1828 2388 l
-1828 2389 l
-1703 2389 l
-1702 2389 m
-1829 2389 l
-1829 2390 l
-1702 2390 l
-1701 2390 m
-1830 2390 l
-1830 2391 l
-1701 2391 l
-1700 2391 m
-1831 2391 l
-1831 2392 l
-1700 2392 l
-1699 2392 m
-1832 2392 l
-1832 2393 l
-1699 2393 l
-1698 2393 m
-1833 2393 l
-1833 2394 l
-1698 2394 l
-1697 2394 m
-1834 2394 l
-1834 2395 l
-1697 2395 l
-1696 2395 m
-1835 2395 l
-1835 2396 l
-1696 2396 l
-1695 2396 m
-1836 2396 l
-1836 2397 l
-1695 2397 l
-1694 2397 m
-1837 2397 l
-1837 2398 l
-1694 2398 l
-1693 2398 m
-1838 2398 l
-1838 2399 l
-1693 2399 l
-1692 2399 m
-1839 2399 l
-1839 2400 l
-1692 2400 l
-1691 2400 m
-1840 2400 l
-1840 2401 l
-1691 2401 l
-1690 2401 m
-1841 2401 l
-1841 2402 l
-1690 2402 l
-1689 2402 m
-1842 2402 l
-1842 2403 l
-1689 2403 l
-1688 2403 m
-1843 2403 l
-1843 2404 l
-1688 2404 l
-1687 2404 m
-1844 2404 l
-1844 2405 l
-1687 2405 l
-1686 2405 m
-1845 2405 l
-1845 2406 l
-1686 2406 l
-1684 2406 m
-1846 2406 l
-1846 2407 l
-1684 2407 l
-1683 2407 m
-1847 2407 l
-1847 2408 l
-1683 2408 l
-1682 2408 m
-1848 2408 l
-1848 2409 l
-1682 2409 l
-1681 2409 m
-1849 2409 l
-1849 2410 l
-1681 2410 l
-1680 2410 m
-1850 2410 l
-1850 2411 l
-1680 2411 l
-1679 2411 m
-1850 2411 l
-1850 2412 l
-1679 2412 l
-1678 2412 m
-1851 2412 l
-1851 2413 l
-1678 2413 l
-1677 2413 m
-1852 2413 l
-1852 2414 l
-1677 2414 l
-1676 2414 m
-1853 2414 l
-1853 2415 l
-1676 2415 l
-1675 2415 m
-1852 2415 l
-1852 2416 l
-1675 2416 l
-1674 2416 m
-1851 2416 l
-1851 2417 l
-1674 2417 l
-1673 2417 m
-1850 2417 l
-1850 2418 l
-1673 2418 l
-1672 2418 m
-1849 2418 l
-1849 2419 l
-1672 2419 l
-1671 2419 m
-1848 2419 l
-1848 2420 l
-1671 2420 l
-1670 2420 m
-1847 2420 l
-1847 2421 l
-1670 2421 l
-1669 2421 m
-1846 2421 l
-1846 2422 l
-1669 2422 l
-1668 2422 m
-1845 2422 l
-1845 2423 l
-1668 2423 l
-1667 2423 m
-1844 2423 l
-1844 2424 l
-1667 2424 l
-1666 2424 m
-1843 2424 l
-1843 2425 l
-1666 2425 l
-1665 2425 m
-1842 2425 l
-1842 2426 l
-1665 2426 l
-1664 2426 m
-1841 2426 l
-1841 2427 l
-1664 2427 l
-1663 2427 m
-1840 2427 l
-1840 2428 l
-1663 2428 l
-1662 2428 m
-1839 2428 l
-1839 2429 l
-1662 2429 l
-1661 2429 m
-1838 2429 l
-1838 2430 l
-1661 2430 l
-1660 2430 m
-1837 2430 l
-1837 2431 l
-1660 2431 l
-1659 2431 m
-1836 2431 l
-1836 2432 l
-1659 2432 l
-1657 2432 m
-1835 2432 l
-1835 2433 l
-1657 2433 l
-1656 2433 m
-1834 2433 l
-1834 2434 l
-1656 2434 l
-1655 2434 m
-1833 2434 l
-1833 2435 l
-1655 2435 l
-1654 2435 m
-1832 2435 l
-1832 2436 l
-1654 2436 l
-1653 2436 m
-1831 2436 l
-1831 2437 l
-1653 2437 l
-1652 2437 m
-1830 2437 l
-1830 2438 l
-1652 2438 l
-1651 2438 m
-1829 2438 l
-1829 2439 l
-1651 2439 l
-1650 2439 m
-1827 2439 l
-1827 2440 l
-1650 2440 l
-1649 2440 m
-1826 2440 l
-1826 2441 l
-1649 2441 l
-1648 2441 m
-1825 2441 l
-1825 2442 l
-1648 2442 l
-1647 2442 m
-1824 2442 l
-1824 2443 l
-1647 2443 l
-1646 2443 m
-1823 2443 l
-1823 2444 l
-1646 2444 l
-1645 2444 m
-1822 2444 l
-1822 2445 l
-1645 2445 l
-1644 2445 m
-1821 2445 l
-1821 2446 l
-1644 2446 l
-1643 2446 m
-1820 2446 l
-1820 2447 l
-1643 2447 l
-1642 2447 m
-1819 2447 l
-1819 2448 l
-1642 2448 l
-1641 2448 m
-1818 2448 l
-1818 2449 l
-1641 2449 l
-1640 2449 m
-1817 2449 l
-1817 2450 l
-1640 2450 l
-1639 2450 m
-1816 2450 l
-1816 2451 l
-1639 2451 l
-1638 2451 m
-1815 2451 l
-1815 2452 l
-1638 2452 l
-1637 2452 m
-1814 2452 l
-1814 2453 l
-1637 2453 l
-1636 2453 m
-1813 2453 l
-1813 2454 l
-1636 2454 l
-1635 2454 m
-1812 2454 l
-1812 2455 l
-1635 2455 l
-1634 2455 m
-1811 2455 l
-1811 2456 l
-1634 2456 l
-1633 2456 m
-1810 2456 l
-1810 2457 l
-1633 2457 l
-1632 2457 m
-1809 2457 l
-1809 2458 l
-1632 2458 l
-1631 2458 m
-1808 2458 l
-1808 2459 l
-1631 2459 l
-1629 2459 m
-1807 2459 l
-1807 2460 l
-1629 2460 l
-1628 2460 m
-1806 2460 l
-1806 2461 l
-1628 2461 l
-1627 2461 m
-1805 2461 l
-1805 2462 l
-1627 2462 l
-1626 2462 m
-1804 2462 l
-1804 2463 l
-1626 2463 l
-1625 2463 m
-1803 2463 l
-1803 2464 l
-1625 2464 l
-1624 2464 m
-1802 2464 l
-1802 2465 l
-1624 2465 l
-1623 2465 m
-1801 2465 l
-1801 2466 l
-1623 2466 l
-1622 2466 m
-1799 2466 l
-1799 2467 l
-1622 2467 l
-1621 2467 m
-1798 2467 l
-1798 2468 l
-1621 2468 l
-1620 2468 m
-1797 2468 l
-1797 2469 l
-1620 2469 l
-1619 2469 m
-1796 2469 l
-1796 2470 l
-1619 2470 l
-1618 2470 m
-1795 2470 l
-1795 2471 l
-1618 2471 l
-1617 2471 m
-1794 2471 l
-1794 2472 l
-1617 2472 l
-1616 2472 m
-1793 2472 l
-1793 2473 l
-1616 2473 l
-1615 2473 m
-1792 2473 l
-1792 2474 l
-1615 2474 l
-1614 2474 m
-1791 2474 l
-1791 2475 l
-1614 2475 l
-1613 2475 m
-1790 2475 l
-1790 2476 l
-1613 2476 l
-1612 2476 m
-1789 2476 l
-1789 2477 l
-1612 2477 l
-1611 2477 m
-1788 2477 l
-1788 2478 l
-1611 2478 l
-1610 2478 m
-1787 2478 l
-1787 2479 l
-1610 2479 l
-1609 2479 m
-1786 2479 l
-1786 2480 l
-1609 2480 l
-1608 2480 m
-1785 2480 l
-1785 2481 l
-1608 2481 l
-1607 2481 m
-1784 2481 l
-1784 2482 l
-1607 2482 l
-1606 2482 m
-1783 2482 l
-1783 2483 l
-1606 2483 l
-1605 2483 m
-1782 2483 l
-1782 2484 l
-1605 2484 l
-1604 2484 m
-1781 2484 l
-1781 2485 l
-1604 2485 l
-1602 2485 m
-1780 2485 l
-1780 2486 l
-1602 2486 l
-1601 2486 m
-1779 2486 l
-1779 2487 l
-1601 2487 l
-1600 2487 m
-1778 2487 l
-1778 2488 l
-1600 2488 l
-1599 2488 m
-1777 2488 l
-1777 2489 l
-1599 2489 l
-1598 2489 m
-1776 2489 l
-1776 2490 l
-1598 2490 l
-1597 2490 m
-1775 2490 l
-1775 2491 l
-1597 2491 l
-1596 2491 m
-1774 2491 l
-1774 2492 l
-1596 2492 l
-1595 2492 m
-1773 2492 l
-1773 2493 l
-1595 2493 l
-1594 2493 m
-1771 2493 l
-1771 2494 l
-1594 2494 l
-1593 2494 m
-1770 2494 l
-1770 2495 l
-1593 2495 l
-1592 2495 m
-1769 2495 l
-1769 2496 l
-1592 2496 l
-1591 2496 m
-1768 2496 l
-1768 2497 l
-1591 2497 l
-1590 2497 m
-1767 2497 l
-1767 2498 l
-1590 2498 l
-1589 2498 m
-1766 2498 l
-1766 2499 l
-1589 2499 l
-1588 2499 m
-1765 2499 l
-1765 2500 l
-1588 2500 l
-1587 2500 m
-1764 2500 l
-1764 2501 l
-1587 2501 l
-1586 2501 m
-1763 2501 l
-1763 2502 l
-1586 2502 l
-1585 2502 m
-1762 2502 l
-1762 2503 l
-1585 2503 l
-1584 2503 m
-1761 2503 l
-1761 2504 l
-1584 2504 l
-1583 2504 m
-1760 2504 l
-1760 2505 l
-1583 2505 l
-1582 2505 m
-1759 2505 l
-1759 2506 l
-1582 2506 l
-1581 2506 m
-1758 2506 l
-1758 2507 l
-1581 2507 l
-1580 2507 m
-1757 2507 l
-1757 2508 l
-1580 2508 l
-1579 2508 m
-1756 2508 l
-1756 2509 l
-1579 2509 l
-1578 2509 m
-1755 2509 l
-1755 2510 l
-1578 2510 l
-1577 2510 m
-1754 2510 l
-1754 2511 l
-1577 2511 l
-1576 2511 m
-1753 2511 l
-1753 2512 l
-1576 2512 l
-1576 2512 m
-1752 2512 l
-1752 2513 l
-1576 2513 l
-1576 2513 m
-1751 2513 l
-1751 2514 l
-1576 2514 l
-1577 2514 m
-1750 2514 l
-1750 2515 l
-1577 2515 l
-1578 2515 m
-1749 2515 l
-1749 2516 l
-1578 2516 l
-1579 2516 m
-1748 2516 l
-1748 2517 l
-1579 2517 l
-1580 2517 m
-1747 2517 l
-1747 2518 l
-1580 2518 l
-1581 2518 m
-1746 2518 l
-1746 2519 l
-1581 2519 l
-1582 2519 m
-1745 2519 l
-1745 2520 l
-1582 2520 l
-1583 2520 m
-1743 2520 l
-1743 2521 l
-1583 2521 l
-1584 2521 m
-1742 2521 l
-1742 2522 l
-1584 2522 l
-1585 2522 m
-1741 2522 l
-1741 2523 l
-1585 2523 l
-1586 2523 m
-1740 2523 l
-1740 2524 l
-1586 2524 l
-1587 2524 m
-1739 2524 l
-1739 2525 l
-1587 2525 l
-1588 2525 m
-1738 2525 l
-1738 2526 l
-1588 2526 l
-1589 2526 m
-1737 2526 l
-1737 2527 l
-1589 2527 l
-1590 2527 m
-1736 2527 l
-1736 2528 l
-1590 2528 l
-1591 2528 m
-1735 2528 l
-1735 2529 l
-1591 2529 l
-1592 2529 m
-1734 2529 l
-1734 2530 l
-1592 2530 l
-1593 2530 m
-1733 2530 l
-1733 2531 l
-1593 2531 l
-1594 2531 m
-1732 2531 l
-1732 2532 l
-1594 2532 l
-1595 2532 m
-1731 2532 l
-1731 2533 l
-1595 2533 l
-1596 2533 m
-1730 2533 l
-1730 2534 l
-1596 2534 l
-1597 2534 m
-1729 2534 l
-1729 2535 l
-1597 2535 l
-1597 2535 m
-1728 2535 l
-1728 2536 l
-1597 2536 l
-1598 2536 m
-1727 2536 l
-1727 2537 l
-1598 2537 l
-1599 2537 m
-1726 2537 l
-1726 2538 l
-1599 2538 l
-1600 2538 m
-1725 2538 l
-1725 2539 l
-1600 2539 l
-1601 2539 m
-1724 2539 l
-1724 2540 l
-1601 2540 l
-1602 2540 m
-1723 2540 l
-1723 2541 l
-1602 2541 l
-1603 2541 m
-1722 2541 l
-1722 2542 l
-1603 2542 l
-1604 2542 m
-1721 2542 l
-1721 2543 l
-1604 2543 l
-1605 2543 m
-1720 2543 l
-1720 2544 l
-1605 2544 l
-1606 2544 m
-1719 2544 l
-1719 2545 l
-1606 2545 l
-1607 2545 m
-1718 2545 l
-1718 2546 l
-1607 2546 l
-1608 2546 m
-1717 2546 l
-1717 2547 l
-1608 2547 l
-1609 2547 m
-1715 2547 l
-1715 2548 l
-1609 2548 l
-1610 2548 m
-1714 2548 l
-1714 2549 l
-1610 2549 l
-1611 2549 m
-1713 2549 l
-1713 2550 l
-1611 2550 l
-1612 2550 m
-1712 2550 l
-1712 2551 l
-1612 2551 l
-1613 2551 m
-1711 2551 l
-1711 2552 l
-1613 2552 l
-1614 2552 m
-1710 2552 l
-1710 2553 l
-1614 2553 l
-1615 2553 m
-1709 2553 l
-1709 2554 l
-1615 2554 l
-1616 2554 m
-1708 2554 l
-1708 2555 l
-1616 2555 l
-1617 2555 m
-1707 2555 l
-1707 2556 l
-1617 2556 l
-1618 2556 m
-1706 2556 l
-1706 2557 l
-1618 2557 l
-1618 2557 m
-1705 2557 l
-1705 2558 l
-1618 2558 l
-1619 2558 m
-1704 2558 l
-1704 2559 l
-1619 2559 l
-1620 2559 m
-1703 2559 l
-1703 2560 l
-1620 2560 l
-1621 2560 m
-1702 2560 l
-1702 2561 l
-1621 2561 l
-1622 2561 m
-1701 2561 l
-1701 2562 l
-1622 2562 l
-1623 2562 m
-1700 2562 l
-1700 2563 l
-1623 2563 l
-1624 2563 m
-1699 2563 l
-1699 2564 l
-1624 2564 l
-1625 2564 m
-1698 2564 l
-1698 2565 l
-1625 2565 l
-1626 2565 m
-1697 2565 l
-1697 2566 l
-1626 2566 l
-1627 2566 m
-1696 2566 l
-1696 2567 l
-1627 2567 l
-1628 2567 m
-1695 2567 l
-1695 2568 l
-1628 2568 l
-1629 2568 m
-1694 2568 l
-1694 2569 l
-1629 2569 l
-1630 2569 m
-1693 2569 l
-1693 2570 l
-1630 2570 l
-1631 2570 m
-1692 2570 l
-1692 2571 l
-1631 2571 l
-1632 2571 m
-1691 2571 l
-1691 2572 l
-1632 2572 l
-1633 2572 m
-1690 2572 l
-1690 2573 l
-1633 2573 l
-1634 2573 m
-1689 2573 l
-1689 2574 l
-1634 2574 l
-1635 2574 m
-1687 2574 l
-1687 2575 l
-1635 2575 l
-1636 2575 m
-1686 2575 l
-1686 2576 l
-1636 2576 l
-1637 2576 m
-1685 2576 l
-1685 2577 l
-1637 2577 l
-1638 2577 m
-1684 2577 l
-1684 2578 l
-1638 2578 l
-1639 2578 m
-1683 2578 l
-1683 2579 l
-1639 2579 l
-1639 2579 m
-1682 2579 l
-1682 2580 l
-1639 2580 l
-1640 2580 m
-1681 2580 l
-1681 2581 l
-1640 2581 l
-1641 2581 m
-1680 2581 l
-1680 2582 l
-1641 2582 l
-1642 2582 m
-1679 2582 l
-1679 2583 l
-1642 2583 l
-1643 2583 m
-1678 2583 l
-1678 2584 l
-1643 2584 l
-1644 2584 m
-1677 2584 l
-1677 2585 l
-1644 2585 l
-1645 2585 m
-1676 2585 l
-1676 2586 l
-1645 2586 l
-1646 2586 m
-1675 2586 l
-1675 2587 l
-1646 2587 l
-1647 2587 m
-1674 2587 l
-1674 2588 l
-1647 2588 l
-1648 2588 m
-1673 2588 l
-1673 2589 l
-1648 2589 l
-1649 2589 m
-1672 2589 l
-1672 2590 l
-1649 2590 l
-1650 2590 m
-1671 2590 l
-1671 2591 l
-1650 2591 l
-1651 2591 m
-1670 2591 l
-1670 2592 l
-1651 2592 l
-1652 2592 m
-1669 2592 l
-1669 2593 l
-1652 2593 l
-1653 2593 m
-1668 2593 l
-1668 2594 l
-1653 2594 l
-1654 2594 m
-1667 2594 l
-1667 2595 l
-1654 2595 l
-1655 2595 m
-1666 2595 l
-1666 2596 l
-1655 2596 l
-1656 2596 m
-1665 2596 l
-1665 2597 l
-1656 2597 l
-1657 2597 m
-1664 2597 l
-1664 2598 l
-1657 2598 l
-1658 2598 m
-1663 2598 l
-1663 2599 l
-1658 2599 l
-1659 2599 m
-1662 2599 l
-1662 2600 l
-1659 2600 l
-Y
-1852.4 2414.5 m
-1768 2327 l
-1576 2512 l
-1660 2600 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1776 2372 m
-1774 2369 l
-1765 2365 l
-1759 2365 l
-1750 2368 l
-1738 2380 l
-1735 2388 l
-1735 2394 l
-1737 2403 l
-1743 2409 l
-1752 2412 l
-1767 2416 l
-1826 2417 l
-1784 2457 l
-S
-1716 2429 m
-1713 2426 l
-1704 2423 l
-1699 2423 l
-1690 2426 l
-1678 2438 l
-1674 2446 l
-1674 2452 l
-1677 2461 l
-1683 2467 l
-1692 2470 l
-1706 2474 l
-1765 2475 l
-1723 2515 l
-S
-1608 2504 m
-1638 2475 l
-1667 2499 l
-1662 2499 l
-1650 2505 l
-1641 2514 l
-1634 2525 l
-1634 2537 l
-1640 2549 l
-1646 2555 l
-1657 2561 l
-1669 2561 l
-1681 2556 l
-1690 2547 l
-1696 2535 l
-1696 2529 l
-1694 2521 l
-S
-1 g
-3771 2313 m
-3774 2313 l
-3774 2314 l
-3771 2314 l
-3770 2314 m
-3776 2314 l
-3776 2315 l
-3770 2315 l
-3769 2315 m
-3777 2315 l
-3777 2316 l
-3769 2316 l
-3769 2316 m
-3778 2316 l
-3778 2317 l
-3769 2317 l
-3768 2317 m
-3779 2317 l
-3779 2318 l
-3768 2318 l
-3767 2318 m
-3781 2318 l
-3781 2319 l
-3767 2319 l
-3766 2319 m
-3782 2319 l
-3782 2320 l
-3766 2320 l
-3766 2320 m
-3783 2320 l
-3783 2321 l
-3766 2321 l
-3765 2321 m
-3785 2321 l
-3785 2322 l
-3765 2322 l
-3764 2322 m
-3786 2322 l
-3786 2323 l
-3764 2323 l
-3763 2323 m
-3787 2323 l
-3787 2324 l
-3763 2324 l
-3763 2324 m
-3789 2324 l
-3789 2325 l
-3763 2325 l
-3762 2325 m
-3790 2325 l
-3790 2326 l
-3762 2326 l
-3761 2326 m
-3791 2326 l
-3791 2327 l
-3761 2327 l
-3760 2327 m
-3792 2327 l
-3792 2328 l
-3760 2328 l
-3760 2328 m
-3794 2328 l
-3794 2329 l
-3760 2329 l
-3759 2329 m
-3795 2329 l
-3795 2330 l
-3759 2330 l
-3758 2330 m
-3796 2330 l
-3796 2331 l
-3758 2331 l
-3757 2331 m
-3798 2331 l
-3798 2332 l
-3757 2332 l
-3756 2332 m
-3799 2332 l
-3799 2333 l
-3756 2333 l
-3756 2333 m
-3800 2333 l
-3800 2334 l
-3756 2334 l
-3755 2334 m
-3801 2334 l
-3801 2335 l
-3755 2335 l
-3754 2335 m
-3803 2335 l
-3803 2336 l
-3754 2336 l
-3753 2336 m
-3804 2336 l
-3804 2337 l
-3753 2337 l
-3753 2337 m
-3805 2337 l
-3805 2338 l
-3753 2338 l
-3752 2338 m
-3807 2338 l
-3807 2339 l
-3752 2339 l
-3751 2339 m
-3808 2339 l
-3808 2340 l
-3751 2340 l
-3750 2340 m
-3809 2340 l
-3809 2341 l
-3750 2341 l
-3750 2341 m
-3811 2341 l
-3811 2342 l
-3750 2342 l
-3749 2342 m
-3812 2342 l
-3812 2343 l
-3749 2343 l
-3748 2343 m
-3813 2343 l
-3813 2344 l
-3748 2344 l
-3747 2344 m
-3814 2344 l
-3814 2345 l
-3747 2345 l
-3747 2345 m
-3816 2345 l
-3816 2346 l
-3747 2346 l
-3746 2346 m
-3817 2346 l
-3817 2347 l
-3746 2347 l
-3745 2347 m
-3818 2347 l
-3818 2348 l
-3745 2348 l
-3744 2348 m
-3820 2348 l
-3820 2349 l
-3744 2349 l
-3744 2349 m
-3821 2349 l
-3821 2350 l
-3744 2350 l
-3743 2350 m
-3822 2350 l
-3822 2351 l
-3743 2351 l
-3742 2351 m
-3824 2351 l
-3824 2352 l
-3742 2352 l
-3741 2352 m
-3825 2352 l
-3825 2353 l
-3741 2353 l
-3740 2353 m
-3826 2353 l
-3826 2354 l
-3740 2354 l
-3740 2354 m
-3827 2354 l
-3827 2355 l
-3740 2355 l
-3739 2355 m
-3829 2355 l
-3829 2356 l
-3739 2356 l
-3738 2356 m
-3830 2356 l
-3830 2357 l
-3738 2357 l
-3737 2357 m
-3831 2357 l
-3831 2358 l
-3737 2358 l
-3737 2358 m
-3833 2358 l
-3833 2359 l
-3737 2359 l
-3736 2359 m
-3834 2359 l
-3834 2360 l
-3736 2360 l
-3735 2360 m
-3835 2360 l
-3835 2361 l
-3735 2361 l
-3734 2361 m
-3837 2361 l
-3837 2362 l
-3734 2362 l
-3734 2362 m
-3838 2362 l
-3838 2363 l
-3734 2363 l
-3733 2363 m
-3839 2363 l
-3839 2364 l
-3733 2364 l
-3732 2364 m
-3840 2364 l
-3840 2365 l
-3732 2365 l
-3731 2365 m
-3842 2365 l
-3842 2366 l
-3731 2366 l
-3731 2366 m
-3843 2366 l
-3843 2367 l
-3731 2367 l
-3730 2367 m
-3844 2367 l
-3844 2368 l
-3730 2368 l
-3729 2368 m
-3846 2368 l
-3846 2369 l
-3729 2369 l
-3728 2369 m
-3847 2369 l
-3847 2370 l
-3728 2370 l
-3727 2370 m
-3848 2370 l
-3848 2371 l
-3727 2371 l
-3727 2371 m
-3850 2371 l
-3850 2372 l
-3727 2372 l
-3726 2372 m
-3851 2372 l
-3851 2373 l
-3726 2373 l
-3725 2373 m
-3852 2373 l
-3852 2374 l
-3725 2374 l
-3724 2374 m
-3853 2374 l
-3853 2375 l
-3724 2375 l
-3724 2375 m
-3855 2375 l
-3855 2376 l
-3724 2376 l
-3723 2376 m
-3856 2376 l
-3856 2377 l
-3723 2377 l
-3722 2377 m
-3857 2377 l
-3857 2378 l
-3722 2378 l
-3721 2378 m
-3859 2378 l
-3859 2379 l
-3721 2379 l
-3721 2379 m
-3860 2379 l
-3860 2380 l
-3721 2380 l
-3720 2380 m
-3861 2380 l
-3861 2381 l
-3720 2381 l
-3719 2381 m
-3862 2381 l
-3862 2382 l
-3719 2382 l
-3718 2382 m
-3864 2382 l
-3864 2383 l
-3718 2383 l
-3718 2383 m
-3865 2383 l
-3865 2384 l
-3718 2384 l
-3717 2384 m
-3866 2384 l
-3866 2385 l
-3717 2385 l
-3716 2385 m
-3868 2385 l
-3868 2386 l
-3716 2386 l
-3715 2386 m
-3869 2386 l
-3869 2387 l
-3715 2387 l
-3715 2387 m
-3870 2387 l
-3870 2388 l
-3715 2388 l
-3714 2388 m
-3872 2388 l
-3872 2389 l
-3714 2389 l
-3713 2389 m
-3873 2389 l
-3873 2390 l
-3713 2390 l
-3712 2390 m
-3874 2390 l
-3874 2391 l
-3712 2391 l
-3711 2391 m
-3875 2391 l
-3875 2392 l
-3711 2392 l
-3711 2392 m
-3877 2392 l
-3877 2393 l
-3711 2393 l
-3710 2393 m
-3878 2393 l
-3878 2394 l
-3710 2394 l
-3709 2394 m
-3879 2394 l
-3879 2395 l
-3709 2395 l
-3708 2395 m
-3881 2395 l
-3881 2396 l
-3708 2396 l
-3708 2396 m
-3882 2396 l
-3882 2397 l
-3708 2397 l
-3707 2397 m
-3883 2397 l
-3883 2398 l
-3707 2398 l
-3706 2398 m
-3885 2398 l
-3885 2399 l
-3706 2399 l
-3705 2399 m
-3886 2399 l
-3886 2400 l
-3705 2400 l
-3705 2400 m
-3887 2400 l
-3887 2401 l
-3705 2401 l
-3704 2401 m
-3888 2401 l
-3888 2402 l
-3704 2402 l
-3703 2402 m
-3890 2402 l
-3890 2403 l
-3703 2403 l
-3702 2403 m
-3891 2403 l
-3891 2404 l
-3702 2404 l
-3702 2404 m
-3892 2404 l
-3892 2405 l
-3702 2405 l
-3701 2405 m
-3894 2405 l
-3894 2406 l
-3701 2406 l
-3700 2406 m
-3895 2406 l
-3895 2407 l
-3700 2407 l
-3699 2407 m
-3896 2407 l
-3896 2408 l
-3699 2408 l
-3699 2408 m
-3898 2408 l
-3898 2409 l
-3699 2409 l
-3699 2409 m
-3899 2409 l
-3899 2410 l
-3699 2410 l
-3700 2410 m
-3900 2410 l
-3900 2411 l
-3700 2411 l
-3701 2411 m
-3901 2411 l
-3901 2412 l
-3701 2412 l
-3702 2412 m
-3903 2412 l
-3903 2413 l
-3702 2413 l
-3704 2413 m
-3904 2413 l
-3904 2414 l
-3704 2414 l
-3705 2414 m
-3905 2414 l
-3905 2415 l
-3705 2415 l
-3706 2415 m
-3907 2415 l
-3907 2416 l
-3706 2416 l
-3708 2416 m
-3908 2416 l
-3908 2417 l
-3708 2417 l
-3709 2417 m
-3909 2417 l
-3909 2418 l
-3709 2418 l
-3710 2418 m
-3911 2418 l
-3911 2419 l
-3710 2419 l
-3712 2419 m
-3912 2419 l
-3912 2420 l
-3712 2420 l
-3713 2420 m
-3913 2420 l
-3913 2421 l
-3713 2421 l
-3714 2421 m
-3914 2421 l
-3914 2422 l
-3714 2422 l
-3715 2422 m
-3916 2422 l
-3916 2423 l
-3715 2423 l
-3717 2423 m
-3917 2423 l
-3917 2424 l
-3717 2424 l
-3718 2424 m
-3918 2424 l
-3918 2425 l
-3718 2425 l
-3719 2425 m
-3920 2425 l
-3920 2426 l
-3719 2426 l
-3721 2426 m
-3921 2426 l
-3921 2427 l
-3721 2427 l
-3722 2427 m
-3922 2427 l
-3922 2428 l
-3722 2428 l
-3723 2428 m
-3923 2428 l
-3923 2429 l
-3723 2429 l
-3725 2429 m
-3925 2429 l
-3925 2430 l
-3725 2430 l
-3726 2430 m
-3926 2430 l
-3926 2431 l
-3726 2431 l
-3727 2431 m
-3927 2431 l
-3927 2432 l
-3727 2432 l
-3728 2432 m
-3929 2432 l
-3929 2433 l
-3728 2433 l
-3730 2433 m
-3930 2433 l
-3930 2434 l
-3730 2434 l
-3731 2434 m
-3931 2434 l
-3931 2435 l
-3731 2435 l
-3732 2435 m
-3933 2435 l
-3933 2436 l
-3732 2436 l
-3734 2436 m
-3934 2436 l
-3934 2437 l
-3734 2437 l
-3735 2437 m
-3935 2437 l
-3935 2438 l
-3735 2438 l
-3736 2438 m
-3936 2438 l
-3936 2439 l
-3736 2439 l
-3738 2439 m
-3938 2439 l
-3938 2440 l
-3738 2440 l
-3739 2440 m
-3939 2440 l
-3939 2441 l
-3739 2441 l
-3740 2441 m
-3940 2441 l
-3940 2442 l
-3740 2442 l
-3741 2442 m
-3942 2442 l
-3942 2443 l
-3741 2443 l
-3743 2443 m
-3943 2443 l
-3943 2444 l
-3743 2444 l
-3744 2444 m
-3944 2444 l
-3944 2445 l
-3744 2445 l
-3745 2445 m
-3946 2445 l
-3946 2446 l
-3745 2446 l
-3747 2446 m
-3947 2446 l
-3947 2447 l
-3747 2447 l
-3748 2447 m
-3948 2447 l
-3948 2448 l
-3748 2448 l
-3749 2448 m
-3949 2448 l
-3949 2449 l
-3749 2449 l
-3751 2449 m
-3951 2449 l
-3951 2450 l
-3751 2450 l
-3752 2450 m
-3952 2450 l
-3952 2451 l
-3752 2451 l
-3753 2451 m
-3953 2451 l
-3953 2452 l
-3753 2452 l
-3754 2452 m
-3955 2452 l
-3955 2453 l
-3754 2453 l
-3756 2453 m
-3956 2453 l
-3956 2454 l
-3756 2454 l
-3757 2454 m
-3957 2454 l
-3957 2455 l
-3757 2455 l
-3758 2455 m
-3959 2455 l
-3959 2456 l
-3758 2456 l
-3760 2456 m
-3960 2456 l
-3960 2457 l
-3760 2457 l
-3761 2457 m
-3961 2457 l
-3961 2458 l
-3761 2458 l
-3762 2458 m
-3962 2458 l
-3962 2459 l
-3762 2459 l
-3764 2459 m
-3964 2459 l
-3964 2460 l
-3764 2460 l
-3765 2460 m
-3965 2460 l
-3965 2461 l
-3765 2461 l
-3766 2461 m
-3966 2461 l
-3966 2462 l
-3766 2462 l
-3767 2462 m
-3968 2462 l
-3968 2463 l
-3767 2463 l
-3769 2463 m
-3969 2463 l
-3969 2464 l
-3769 2464 l
-3770 2464 m
-3970 2464 l
-3970 2465 l
-3770 2465 l
-3771 2465 m
-3972 2465 l
-3972 2466 l
-3771 2466 l
-3773 2466 m
-3973 2466 l
-3973 2467 l
-3773 2467 l
-3774 2467 m
-3974 2467 l
-3974 2468 l
-3774 2468 l
-3775 2468 m
-3975 2468 l
-3975 2469 l
-3775 2469 l
-3777 2469 m
-3977 2469 l
-3977 2470 l
-3777 2470 l
-3778 2470 m
-3978 2470 l
-3978 2471 l
-3778 2471 l
-3779 2471 m
-3979 2471 l
-3979 2472 l
-3779 2472 l
-3780 2472 m
-3981 2472 l
-3981 2473 l
-3780 2473 l
-3782 2473 m
-3982 2473 l
-3982 2474 l
-3782 2474 l
-3783 2474 m
-3983 2474 l
-3983 2475 l
-3783 2475 l
-3784 2475 m
-3984 2475 l
-3984 2476 l
-3784 2476 l
-3786 2476 m
-3984 2476 l
-3984 2477 l
-3786 2477 l
-3787 2477 m
-3984 2477 l
-3984 2478 l
-3787 2478 l
-3788 2478 m
-3983 2478 l
-3983 2479 l
-3788 2479 l
-3790 2479 m
-3982 2479 l
-3982 2480 l
-3790 2480 l
-3791 2480 m
-3981 2480 l
-3981 2481 l
-3791 2481 l
-3792 2481 m
-3981 2481 l
-3981 2482 l
-3792 2482 l
-3793 2482 m
-3980 2482 l
-3980 2483 l
-3793 2483 l
-3795 2483 m
-3979 2483 l
-3979 2484 l
-3795 2484 l
-3796 2484 m
-3978 2484 l
-3978 2485 l
-3796 2485 l
-3797 2485 m
-3978 2485 l
-3978 2486 l
-3797 2486 l
-3799 2486 m
-3977 2486 l
-3977 2487 l
-3799 2487 l
-3800 2487 m
-3976 2487 l
-3976 2488 l
-3800 2488 l
-3801 2488 m
-3975 2488 l
-3975 2489 l
-3801 2489 l
-3803 2489 m
-3975 2489 l
-3975 2490 l
-3803 2490 l
-3804 2490 m
-3974 2490 l
-3974 2491 l
-3804 2491 l
-3805 2491 m
-3973 2491 l
-3973 2492 l
-3805 2492 l
-3806 2492 m
-3972 2492 l
-3972 2493 l
-3806 2493 l
-3808 2493 m
-3972 2493 l
-3972 2494 l
-3808 2494 l
-3809 2494 m
-3971 2494 l
-3971 2495 l
-3809 2495 l
-3810 2495 m
-3970 2495 l
-3970 2496 l
-3810 2496 l
-3812 2496 m
-3969 2496 l
-3969 2497 l
-3812 2497 l
-3813 2497 m
-3969 2497 l
-3969 2498 l
-3813 2498 l
-3814 2498 m
-3968 2498 l
-3968 2499 l
-3814 2499 l
-3816 2499 m
-3967 2499 l
-3967 2500 l
-3816 2500 l
-3817 2500 m
-3966 2500 l
-3966 2501 l
-3817 2501 l
-3818 2501 m
-3965 2501 l
-3965 2502 l
-3818 2502 l
-3819 2502 m
-3965 2502 l
-3965 2503 l
-3819 2503 l
-3821 2503 m
-3964 2503 l
-3964 2504 l
-3821 2504 l
-3822 2504 m
-3963 2504 l
-3963 2505 l
-3822 2505 l
-3823 2505 m
-3962 2505 l
-3962 2506 l
-3823 2506 l
-3825 2506 m
-3962 2506 l
-3962 2507 l
-3825 2507 l
-3826 2507 m
-3961 2507 l
-3961 2508 l
-3826 2508 l
-3827 2508 m
-3960 2508 l
-3960 2509 l
-3827 2509 l
-3829 2509 m
-3959 2509 l
-3959 2510 l
-3829 2510 l
-3830 2510 m
-3959 2510 l
-3959 2511 l
-3830 2511 l
-3831 2511 m
-3958 2511 l
-3958 2512 l
-3831 2512 l
-3832 2512 m
-3957 2512 l
-3957 2513 l
-3832 2513 l
-3834 2513 m
-3956 2513 l
-3956 2514 l
-3834 2514 l
-3835 2514 m
-3956 2514 l
-3956 2515 l
-3835 2515 l
-3836 2515 m
-3955 2515 l
-3955 2516 l
-3836 2516 l
-3838 2516 m
-3954 2516 l
-3954 2517 l
-3838 2517 l
-3839 2517 m
-3953 2517 l
-3953 2518 l
-3839 2518 l
-3840 2518 m
-3953 2518 l
-3953 2519 l
-3840 2519 l
-3842 2519 m
-3952 2519 l
-3952 2520 l
-3842 2520 l
-3843 2520 m
-3951 2520 l
-3951 2521 l
-3843 2521 l
-3844 2521 m
-3950 2521 l
-3950 2522 l
-3844 2522 l
-3845 2522 m
-3950 2522 l
-3950 2523 l
-3845 2523 l
-3847 2523 m
-3949 2523 l
-3949 2524 l
-3847 2524 l
-3848 2524 m
-3948 2524 l
-3948 2525 l
-3848 2525 l
-3849 2525 m
-3947 2525 l
-3947 2526 l
-3849 2526 l
-3851 2526 m
-3946 2526 l
-3946 2527 l
-3851 2527 l
-3852 2527 m
-3946 2527 l
-3946 2528 l
-3852 2528 l
-3853 2528 m
-3945 2528 l
-3945 2529 l
-3853 2529 l
-3855 2529 m
-3944 2529 l
-3944 2530 l
-3855 2530 l
-3856 2530 m
-3943 2530 l
-3943 2531 l
-3856 2531 l
-3857 2531 m
-3943 2531 l
-3943 2532 l
-3857 2532 l
-3858 2532 m
-3942 2532 l
-3942 2533 l
-3858 2533 l
-3860 2533 m
-3941 2533 l
-3941 2534 l
-3860 2534 l
-3861 2534 m
-3940 2534 l
-3940 2535 l
-3861 2535 l
-3862 2535 m
-3940 2535 l
-3940 2536 l
-3862 2536 l
-3864 2536 m
-3939 2536 l
-3939 2537 l
-3864 2537 l
-3865 2537 m
-3938 2537 l
-3938 2538 l
-3865 2538 l
-3866 2538 m
-3937 2538 l
-3937 2539 l
-3866 2539 l
-3868 2539 m
-3937 2539 l
-3937 2540 l
-3868 2540 l
-3869 2540 m
-3936 2540 l
-3936 2541 l
-3869 2541 l
-3870 2541 m
-3935 2541 l
-3935 2542 l
-3870 2542 l
-3871 2542 m
-3934 2542 l
-3934 2543 l
-3871 2543 l
-3873 2543 m
-3934 2543 l
-3934 2544 l
-3873 2544 l
-3874 2544 m
-3933 2544 l
-3933 2545 l
-3874 2545 l
-3875 2545 m
-3932 2545 l
-3932 2546 l
-3875 2546 l
-3877 2546 m
-3931 2546 l
-3931 2547 l
-3877 2547 l
-3878 2547 m
-3931 2547 l
-3931 2548 l
-3878 2548 l
-3879 2548 m
-3930 2548 l
-3930 2549 l
-3879 2549 l
-3881 2549 m
-3929 2549 l
-3929 2550 l
-3881 2550 l
-3882 2550 m
-3928 2550 l
-3928 2551 l
-3882 2551 l
-3883 2551 m
-3927 2551 l
-3927 2552 l
-3883 2552 l
-3884 2552 m
-3927 2552 l
-3927 2553 l
-3884 2553 l
-3886 2553 m
-3926 2553 l
-3926 2554 l
-3886 2554 l
-3887 2554 m
-3925 2554 l
-3925 2555 l
-3887 2555 l
-3888 2555 m
-3924 2555 l
-3924 2556 l
-3888 2556 l
-3890 2556 m
-3924 2556 l
-3924 2557 l
-3890 2557 l
-3891 2557 m
-3923 2557 l
-3923 2558 l
-3891 2558 l
-3892 2558 m
-3922 2558 l
-3922 2559 l
-3892 2559 l
-3894 2559 m
-3921 2559 l
-3921 2560 l
-3894 2560 l
-3895 2560 m
-3921 2560 l
-3921 2561 l
-3895 2561 l
-3896 2561 m
-3920 2561 l
-3920 2562 l
-3896 2562 l
-3897 2562 m
-3919 2562 l
-3919 2563 l
-3897 2563 l
-3899 2563 m
-3918 2563 l
-3918 2564 l
-3899 2564 l
-3900 2564 m
-3918 2564 l
-3918 2565 l
-3900 2565 l
-3901 2565 m
-3917 2565 l
-3917 2566 l
-3901 2566 l
-3903 2566 m
-3916 2566 l
-3916 2567 l
-3903 2567 l
-3904 2567 m
-3915 2567 l
-3915 2568 l
-3904 2568 l
-3905 2568 m
-3915 2568 l
-3915 2569 l
-3905 2569 l
-3907 2569 m
-3914 2569 l
-3914 2570 l
-3907 2570 l
-3908 2570 m
-3913 2570 l
-3913 2571 l
-3908 2571 l
-3909 2571 m
-3912 2571 l
-3912 2572 l
-3909 2572 l
-Y
-3772.3 2312.9 m
-3699 2409 l
-3911 2572 l
-3984 2476 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3741 2394 m
-3739 2398 l
-3737 2407 l
-3738 2413 l
-3742 2421 l
-3755 2431 l
-3764 2433 l
-3770 2432 l
-3779 2428 l
-3784 2422 l
-3785 2412 l
-3786 2397 l
-3779 2339 l
-3825 2374 l
-S
-3838 2495 m
-3858 2400 l
-S
-3792 2459 m
-3838 2495 l
-S
-3878 2525 m
-3870 2514 l
-3871 2499 l
-3881 2480 l
-3888 2470 l
-3905 2456 l
-3919 2451 l
-3931 2456 l
-3938 2461 l
-3945 2472 l
-3944 2487 l
-3935 2506 l
-3927 2516 l
-3911 2530 l
-3897 2535 l
-3885 2530 l
-3878 2525 l
-S
-1 g
-4405 3855 m
-4409 3855 l
-4409 3856 l
-4405 3856 l
-4405 3856 m
-4412 3856 l
-4412 3857 l
-4405 3857 l
-4404 3857 m
-4415 3857 l
-4415 3858 l
-4404 3858 l
-4404 3858 m
-4418 3858 l
-4418 3859 l
-4404 3859 l
-4404 3859 m
-4421 3859 l
-4421 3860 l
-4404 3860 l
-4403 3860 m
-4424 3860 l
-4424 3861 l
-4403 3861 l
-4403 3861 m
-4427 3861 l
-4427 3862 l
-4403 3862 l
-4403 3862 m
-4429 3862 l
-4429 3863 l
-4403 3863 l
-4402 3863 m
-4432 3863 l
-4432 3864 l
-4402 3864 l
-4402 3864 m
-4435 3864 l
-4435 3865 l
-4402 3865 l
-4402 3865 m
-4438 3865 l
-4438 3866 l
-4402 3866 l
-4401 3866 m
-4441 3866 l
-4441 3867 l
-4401 3867 l
-4401 3867 m
-4444 3867 l
-4444 3868 l
-4401 3868 l
-4401 3868 m
-4447 3868 l
-4447 3869 l
-4401 3869 l
-4400 3869 m
-4449 3869 l
-4449 3870 l
-4400 3870 l
-4400 3870 m
-4452 3870 l
-4452 3871 l
-4400 3871 l
-4399 3871 m
-4455 3871 l
-4455 3872 l
-4399 3872 l
-4399 3872 m
-4458 3872 l
-4458 3873 l
-4399 3873 l
-4399 3873 m
-4461 3873 l
-4461 3874 l
-4399 3874 l
-4398 3874 m
-4464 3874 l
-4464 3875 l
-4398 3875 l
-4398 3875 m
-4467 3875 l
-4467 3876 l
-4398 3876 l
-4398 3876 m
-4469 3876 l
-4469 3877 l
-4398 3877 l
-4397 3877 m
-4472 3877 l
-4472 3878 l
-4397 3878 l
-4397 3878 m
-4475 3878 l
-4475 3879 l
-4397 3879 l
-4397 3879 m
-4478 3879 l
-4478 3880 l
-4397 3880 l
-4396 3880 m
-4481 3880 l
-4481 3881 l
-4396 3881 l
-4396 3881 m
-4484 3881 l
-4484 3882 l
-4396 3882 l
-4396 3882 m
-4487 3882 l
-4487 3883 l
-4396 3883 l
-4395 3883 m
-4489 3883 l
-4489 3884 l
-4395 3884 l
-4395 3884 m
-4492 3884 l
-4492 3885 l
-4395 3885 l
-4395 3885 m
-4495 3885 l
-4495 3886 l
-4395 3886 l
-4394 3886 m
-4498 3886 l
-4498 3887 l
-4394 3887 l
-4394 3887 m
-4501 3887 l
-4501 3888 l
-4394 3888 l
-4393 3888 m
-4504 3888 l
-4504 3889 l
-4393 3889 l
-4393 3889 m
-4507 3889 l
-4507 3890 l
-4393 3890 l
-4393 3890 m
-4509 3890 l
-4509 3891 l
-4393 3891 l
-4392 3891 m
-4512 3891 l
-4512 3892 l
-4392 3892 l
-4392 3892 m
-4515 3892 l
-4515 3893 l
-4392 3893 l
-4392 3893 m
-4518 3893 l
-4518 3894 l
-4392 3894 l
-4391 3894 m
-4521 3894 l
-4521 3895 l
-4391 3895 l
-4391 3895 m
-4521 3895 l
-4521 3897 l
-4391 3897 l
-4390 3897 m
-4520 3897 l
-4520 3899 l
-4390 3899 l
-4390 3899 m
-4519 3899 l
-4519 3900 l
-4390 3900 l
-4389 3900 m
-4519 3900 l
-4519 3902 l
-4389 3902 l
-4389 3902 m
-4518 3902 l
-4518 3903 l
-4389 3903 l
-4388 3903 m
-4518 3903 l
-4518 3905 l
-4388 3905 l
-4387 3905 m
-4517 3905 l
-4517 3908 l
-4387 3908 l
-4386 3908 m
-4516 3908 l
-4516 3911 l
-4386 3911 l
-4385 3911 m
-4515 3911 l
-4515 3914 l
-4385 3914 l
-4384 3914 m
-4514 3914 l
-4514 3917 l
-4384 3917 l
-4383 3917 m
-4513 3917 l
-4513 3919 l
-4383 3919 l
-4383 3919 m
-4512 3919 l
-4512 3920 l
-4383 3920 l
-4382 3920 m
-4512 3920 l
-4512 3922 l
-4382 3922 l
-4381 3922 m
-4511 3922 l
-4511 3925 l
-4381 3925 l
-4380 3925 m
-4510 3925 l
-4510 3928 l
-4380 3928 l
-4379 3928 m
-4509 3928 l
-4509 3931 l
-4379 3931 l
-4378 3931 m
-4508 3931 l
-4508 3934 l
-4378 3934 l
-4377 3934 m
-4507 3934 l
-4507 3937 l
-4377 3937 l
-4376 3937 m
-4506 3937 l
-4506 3939 l
-4376 3939 l
-4375 3939 m
-4505 3939 l
-4505 3942 l
-4375 3942 l
-4374 3942 m
-4504 3942 l
-4504 3945 l
-4374 3945 l
-4373 3945 m
-4503 3945 l
-4503 3948 l
-4373 3948 l
-4372 3948 m
-4502 3948 l
-4502 3951 l
-4372 3951 l
-4371 3951 m
-4501 3951 l
-4501 3954 l
-4371 3954 l
-4370 3954 m
-4500 3954 l
-4500 3956 l
-4370 3956 l
-4369 3956 m
-4500 3956 l
-4500 3957 l
-4369 3957 l
-4369 3957 m
-4499 3957 l
-4499 3959 l
-4369 3959 l
-4368 3959 m
-4498 3959 l
-4498 3962 l
-4368 3962 l
-4367 3962 m
-4497 3962 l
-4497 3965 l
-4367 3965 l
-4366 3965 m
-4496 3965 l
-4496 3968 l
-4366 3968 l
-4365 3968 m
-4495 3968 l
-4495 3971 l
-4365 3971 l
-4364 3971 m
-4494 3971 l
-4494 3973 l
-4364 3973 l
-4363 3973 m
-4494 3973 l
-4494 3974 l
-4363 3974 l
-4363 3974 m
-4493 3974 l
-4493 3976 l
-4363 3976 l
-4362 3976 m
-4492 3976 l
-4492 3979 l
-4362 3979 l
-4361 3979 m
-4491 3979 l
-4491 3982 l
-4361 3982 l
-4360 3982 m
-4490 3982 l
-4490 3985 l
-4360 3985 l
-4359 3985 m
-4489 3985 l
-4489 3988 l
-4359 3988 l
-4358 3988 m
-4488 3988 l
-4488 3990 l
-4358 3990 l
-4357 3990 m
-4488 3990 l
-4488 3991 l
-4357 3991 l
-4357 3991 m
-4487 3991 l
-4487 3993 l
-4357 3993 l
-4356 3993 m
-4487 3993 l
-4487 3994 l
-4356 3994 l
-4356 3994 m
-4486 3994 l
-4486 3996 l
-4356 3996 l
-4355 3996 m
-4485 3996 l
-4485 3999 l
-4355 3999 l
-4354 3999 m
-4484 3999 l
-4484 4002 l
-4354 4002 l
-4353 4002 m
-4483 4002 l
-4483 4005 l
-4353 4005 l
-4352 4005 m
-4482 4005 l
-4482 4007 l
-4352 4007 l
-4351 4007 m
-4482 4007 l
-4482 4008 l
-4351 4008 l
-4351 4008 m
-4481 4008 l
-4481 4010 l
-4351 4010 l
-4350 4010 m
-4481 4010 l
-4481 4011 l
-4350 4011 l
-4350 4011 m
-4480 4011 l
-4480 4013 l
-4350 4013 l
-4349 4013 m
-4480 4013 l
-4480 4014 l
-4349 4014 l
-4349 4014 m
-4479 4014 l
-4479 4016 l
-4349 4016 l
-4348 4016 m
-4478 4016 l
-4478 4019 l
-4348 4019 l
-4347 4019 m
-4477 4019 l
-4477 4022 l
-4347 4022 l
-4346 4022 m
-4476 4022 l
-4476 4024 l
-4346 4024 l
-4345 4024 m
-4476 4024 l
-4476 4025 l
-4345 4025 l
-4345 4025 m
-4475 4025 l
-4475 4027 l
-4345 4027 l
-4344 4027 m
-4475 4027 l
-4475 4028 l
-4344 4028 l
-4344 4028 m
-4474 4028 l
-4474 4030 l
-4344 4030 l
-4343 4030 m
-4474 4030 l
-4474 4031 l
-4343 4031 l
-4343 4031 m
-4473 4031 l
-4473 4033 l
-4343 4033 l
-4342 4033 m
-4472 4033 l
-4472 4036 l
-4342 4036 l
-4341 4036 m
-4471 4036 l
-4471 4039 l
-4341 4039 l
-4340 4039 m
-4470 4039 l
-4470 4041 l
-4340 4041 l
-4339 4041 m
-4470 4041 l
-4470 4042 l
-4339 4042 l
-4339 4042 m
-4469 4042 l
-4469 4044 l
-4339 4044 l
-4338 4044 m
-4469 4044 l
-4469 4045 l
-4338 4045 l
-4338 4045 m
-4468 4045 l
-4468 4047 l
-4338 4047 l
-4337 4047 m
-4468 4047 l
-4468 4048 l
-4337 4048 l
-4337 4048 m
-4467 4048 l
-4467 4050 l
-4337 4050 l
-4336 4050 m
-4467 4050 l
-4467 4051 l
-4336 4051 l
-4336 4051 m
-4466 4051 l
-4466 4053 l
-4336 4053 l
-4335 4053 m
-4465 4053 l
-4465 4056 l
-4335 4056 l
-4334 4056 m
-4464 4056 l
-4464 4058 l
-4334 4058 l
-4333 4058 m
-4464 4058 l
-4464 4059 l
-4333 4059 l
-4333 4059 m
-4463 4059 l
-4463 4061 l
-4333 4061 l
-4332 4061 m
-4463 4061 l
-4463 4062 l
-4332 4062 l
-4332 4062 m
-4462 4062 l
-4462 4064 l
-4332 4064 l
-4331 4064 m
-4462 4064 l
-4462 4065 l
-4331 4065 l
-4331 4065 m
-4461 4065 l
-4461 4067 l
-4331 4067 l
-4330 4067 m
-4461 4067 l
-4461 4068 l
-4330 4068 l
-4330 4068 m
-4460 4068 l
-4460 4070 l
-4330 4070 l
-4329 4070 m
-4460 4070 l
-4460 4071 l
-4329 4071 l
-4329 4071 m
-4459 4071 l
-4459 4073 l
-4329 4073 l
-4328 4073 m
-4458 4073 l
-4458 4075 l
-4328 4075 l
-4327 4075 m
-4458 4075 l
-4458 4076 l
-4327 4076 l
-4327 4076 m
-4457 4076 l
-4457 4078 l
-4327 4078 l
-4326 4078 m
-4457 4078 l
-4457 4079 l
-4326 4079 l
-4326 4079 m
-4456 4079 l
-4456 4081 l
-4326 4081 l
-4325 4081 m
-4456 4081 l
-4456 4082 l
-4325 4082 l
-4325 4082 m
-4455 4082 l
-4455 4084 l
-4325 4084 l
-4324 4084 m
-4455 4084 l
-4455 4085 l
-4324 4085 l
-4324 4085 m
-4454 4085 l
-4454 4087 l
-4324 4087 l
-4323 4087 m
-4454 4087 l
-4454 4088 l
-4323 4088 l
-4323 4088 m
-4453 4088 l
-4453 4090 l
-4323 4090 l
-4322 4090 m
-4452 4090 l
-4452 4092 l
-4322 4092 l
-4321 4092 m
-4452 4092 l
-4452 4093 l
-4321 4093 l
-4321 4093 m
-4451 4093 l
-4451 4095 l
-4321 4095 l
-4320 4095 m
-4451 4095 l
-4451 4096 l
-4320 4096 l
-4320 4096 m
-4450 4096 l
-4450 4098 l
-4320 4098 l
-4319 4098 m
-4450 4098 l
-4450 4099 l
-4319 4099 l
-4319 4099 m
-4449 4099 l
-4449 4101 l
-4319 4101 l
-4318 4101 m
-4449 4101 l
-4449 4102 l
-4318 4102 l
-4318 4102 m
-4448 4102 l
-4448 4104 l
-4318 4104 l
-4317 4104 m
-4448 4104 l
-4448 4105 l
-4317 4105 l
-4317 4105 m
-4447 4105 l
-4447 4107 l
-4317 4107 l
-4317 4107 m
-4447 4107 l
-4447 4108 l
-4317 4108 l
-4319 4108 m
-4446 4108 l
-4446 4109 l
-4319 4109 l
-4322 4109 m
-4446 4109 l
-4446 4110 l
-4322 4110 l
-4325 4110 m
-4445 4110 l
-4445 4111 l
-4325 4111 l
-4328 4111 m
-4445 4111 l
-4445 4112 l
-4328 4112 l
-4331 4112 m
-4445 4112 l
-4445 4113 l
-4331 4113 l
-4334 4113 m
-4444 4113 l
-4444 4114 l
-4334 4114 l
-4337 4114 m
-4444 4114 l
-4444 4115 l
-4337 4115 l
-4340 4115 m
-4444 4115 l
-4444 4116 l
-4340 4116 l
-4342 4116 m
-4443 4116 l
-4443 4117 l
-4342 4117 l
-4345 4117 m
-4443 4117 l
-4443 4118 l
-4345 4118 l
-4348 4118 m
-4443 4118 l
-4443 4119 l
-4348 4119 l
-4351 4119 m
-4442 4119 l
-4442 4120 l
-4351 4120 l
-4354 4120 m
-4442 4120 l
-4442 4121 l
-4354 4121 l
-4357 4121 m
-4442 4121 l
-4442 4122 l
-4357 4122 l
-4360 4122 m
-4441 4122 l
-4441 4123 l
-4360 4123 l
-4363 4123 m
-4441 4123 l
-4441 4124 l
-4363 4124 l
-4365 4124 m
-4441 4124 l
-4441 4125 l
-4365 4125 l
-4368 4125 m
-4440 4125 l
-4440 4126 l
-4368 4126 l
-4371 4126 m
-4440 4126 l
-4440 4127 l
-4371 4127 l
-4374 4127 m
-4440 4127 l
-4440 4128 l
-4374 4128 l
-4377 4128 m
-4439 4128 l
-4439 4129 l
-4377 4129 l
-4380 4129 m
-4439 4129 l
-4439 4130 l
-4380 4130 l
-4383 4130 m
-4438 4130 l
-4438 4131 l
-4383 4131 l
-4386 4131 m
-4438 4131 l
-4438 4132 l
-4386 4132 l
-4388 4132 m
-4438 4132 l
-4438 4133 l
-4388 4133 l
-4391 4133 m
-4437 4133 l
-4437 4134 l
-4391 4134 l
-4394 4134 m
-4437 4134 l
-4437 4135 l
-4394 4135 l
-4397 4135 m
-4437 4135 l
-4437 4136 l
-4397 4136 l
-4400 4136 m
-4436 4136 l
-4436 4137 l
-4400 4137 l
-4403 4137 m
-4436 4137 l
-4436 4138 l
-4403 4138 l
-4406 4138 m
-4436 4138 l
-4436 4139 l
-4406 4139 l
-4409 4139 m
-4435 4139 l
-4435 4140 l
-4409 4140 l
-4411 4140 m
-4435 4140 l
-4435 4141 l
-4411 4141 l
-4414 4141 m
-4435 4141 l
-4435 4142 l
-4414 4142 l
-4417 4142 m
-4434 4142 l
-4434 4143 l
-4417 4143 l
-4420 4143 m
-4434 4143 l
-4434 4144 l
-4420 4144 l
-4423 4144 m
-4434 4144 l
-4434 4145 l
-4423 4145 l
-4426 4145 m
-4433 4145 l
-4433 4146 l
-4426 4146 l
-4429 4146 m
-4433 4146 l
-4433 4147 l
-4429 4147 l
-Y
-4520.4 3895 m
-4406 3855 l
-4317 4107 l
-4432 4147 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4412 3888 m
-4397 3931 l
-4437 3919 l
-4433 3930 l
-4434 3940 l
-4436 3945 l
-4447 3953 l
-4455 3956 l
-4468 3956 l
-4478 3951 l
-4487 3941 l
-4491 3929 l
-4491 3916 l
-4488 3910 l
-4482 3904 l
-S
-4399 3976 m
-4392 3983 l
-4376 3990 l
-4459 4019 l
-S
-4343 4085 m
-4357 4045 l
-4393 4054 l
-4388 4057 l
-4380 4067 l
-4376 4079 l
-4376 4092 l
-4381 4103 l
-4391 4111 l
-4399 4113 l
-4412 4114 l
-4423 4109 l
-4431 4098 l
-4435 4086 l
-4435 4073 l
-4433 4068 l
-4426 4061 l
-S
-1 g
-2971 2971 m
-2974 2971 l
-2974 2972 l
-2971 2972 l
-2970 2972 m
-2976 2972 l
-2976 2973 l
-2970 2973 l
-2970 2973 m
-2978 2973 l
-2978 2974 l
-2970 2974 l
-2969 2974 m
-2980 2974 l
-2980 2975 l
-2969 2975 l
-2969 2975 m
-2982 2975 l
-2982 2976 l
-2969 2976 l
-2968 2976 m
-2984 2976 l
-2984 2977 l
-2968 2977 l
-2968 2977 m
-2985 2977 l
-2985 2978 l
-2968 2978 l
-2967 2978 m
-2987 2978 l
-2987 2979 l
-2967 2979 l
-2966 2979 m
-2989 2979 l
-2989 2980 l
-2966 2980 l
-2966 2980 m
-2991 2980 l
-2991 2981 l
-2966 2981 l
-2965 2981 m
-2993 2981 l
-2993 2982 l
-2965 2982 l
-2965 2982 m
-2994 2982 l
-2994 2983 l
-2965 2983 l
-2964 2983 m
-2996 2983 l
-2996 2984 l
-2964 2984 l
-2964 2984 m
-2998 2984 l
-2998 2985 l
-2964 2985 l
-2963 2985 m
-3000 2985 l
-3000 2986 l
-2963 2986 l
-2963 2986 m
-3002 2986 l
-3002 2987 l
-2963 2987 l
-2962 2987 m
-3003 2987 l
-3003 2988 l
-2962 2988 l
-2961 2988 m
-3005 2988 l
-3005 2989 l
-2961 2989 l
-2961 2989 m
-3007 2989 l
-3007 2990 l
-2961 2990 l
-2960 2990 m
-3009 2990 l
-3009 2991 l
-2960 2991 l
-2960 2991 m
-3011 2991 l
-3011 2992 l
-2960 2992 l
-2959 2992 m
-3013 2992 l
-3013 2993 l
-2959 2993 l
-2959 2993 m
-3014 2993 l
-3014 2994 l
-2959 2994 l
-2958 2994 m
-3016 2994 l
-3016 2995 l
-2958 2995 l
-2958 2995 m
-3018 2995 l
-3018 2996 l
-2958 2996 l
-2957 2996 m
-3020 2996 l
-3020 2997 l
-2957 2997 l
-2956 2997 m
-3022 2997 l
-3022 2998 l
-2956 2998 l
-2956 2998 m
-3023 2998 l
-3023 2999 l
-2956 2999 l
-2955 2999 m
-3025 2999 l
-3025 3000 l
-2955 3000 l
-2955 3000 m
-3027 3000 l
-3027 3001 l
-2955 3001 l
-2954 3001 m
-3029 3001 l
-3029 3002 l
-2954 3002 l
-2954 3002 m
-3031 3002 l
-3031 3003 l
-2954 3003 l
-2953 3003 m
-3032 3003 l
-3032 3004 l
-2953 3004 l
-2953 3004 m
-3034 3004 l
-3034 3005 l
-2953 3005 l
-2952 3005 m
-3036 3005 l
-3036 3006 l
-2952 3006 l
-2951 3006 m
-3038 3006 l
-3038 3007 l
-2951 3007 l
-2951 3007 m
-3040 3007 l
-3040 3008 l
-2951 3008 l
-2950 3008 m
-3042 3008 l
-3042 3009 l
-2950 3009 l
-2950 3009 m
-3043 3009 l
-3043 3010 l
-2950 3010 l
-2949 3010 m
-3045 3010 l
-3045 3011 l
-2949 3011 l
-2949 3011 m
-3047 3011 l
-3047 3012 l
-2949 3012 l
-2948 3012 m
-3049 3012 l
-3049 3013 l
-2948 3013 l
-2948 3013 m
-3051 3013 l
-3051 3014 l
-2948 3014 l
-2947 3014 m
-3052 3014 l
-3052 3015 l
-2947 3015 l
-2946 3015 m
-3054 3015 l
-3054 3016 l
-2946 3016 l
-2946 3016 m
-3056 3016 l
-3056 3017 l
-2946 3017 l
-2945 3017 m
-3058 3017 l
-3058 3018 l
-2945 3018 l
-2945 3018 m
-3060 3018 l
-3060 3019 l
-2945 3019 l
-2944 3019 m
-3061 3019 l
-3061 3020 l
-2944 3020 l
-2944 3020 m
-3063 3020 l
-3063 3021 l
-2944 3021 l
-2943 3021 m
-3065 3021 l
-3065 3022 l
-2943 3022 l
-2943 3022 m
-3067 3022 l
-3067 3023 l
-2943 3023 l
-2942 3023 m
-3069 3023 l
-3069 3024 l
-2942 3024 l
-2941 3024 m
-3071 3024 l
-3071 3025 l
-2941 3025 l
-2941 3025 m
-3072 3025 l
-3072 3026 l
-2941 3026 l
-2940 3026 m
-3074 3026 l
-3074 3027 l
-2940 3027 l
-2940 3027 m
-3076 3027 l
-3076 3028 l
-2940 3028 l
-2939 3028 m
-3078 3028 l
-3078 3029 l
-2939 3029 l
-2939 3029 m
-3080 3029 l
-3080 3030 l
-2939 3030 l
-2938 3030 m
-3081 3030 l
-3081 3031 l
-2938 3031 l
-2938 3031 m
-3083 3031 l
-3083 3032 l
-2938 3032 l
-2937 3032 m
-3085 3032 l
-3085 3033 l
-2937 3033 l
-2936 3033 m
-3087 3033 l
-3087 3034 l
-2936 3034 l
-2936 3034 m
-3089 3034 l
-3089 3035 l
-2936 3035 l
-2935 3035 m
-3090 3035 l
-3090 3036 l
-2935 3036 l
-2935 3036 m
-3092 3036 l
-3092 3037 l
-2935 3037 l
-2934 3037 m
-3094 3037 l
-3094 3038 l
-2934 3038 l
-2934 3038 m
-3096 3038 l
-3096 3039 l
-2934 3039 l
-2933 3039 m
-3098 3039 l
-3098 3040 l
-2933 3040 l
-2933 3040 m
-3099 3040 l
-3099 3041 l
-2933 3041 l
-2932 3041 m
-3101 3041 l
-3101 3042 l
-2932 3042 l
-2931 3042 m
-3103 3042 l
-3103 3043 l
-2931 3043 l
-2931 3043 m
-3105 3043 l
-3105 3044 l
-2931 3044 l
-2930 3044 m
-3107 3044 l
-3107 3045 l
-2930 3045 l
-2930 3045 m
-3109 3045 l
-3109 3046 l
-2930 3046 l
-2929 3046 m
-3110 3046 l
-3110 3047 l
-2929 3047 l
-2929 3047 m
-3112 3047 l
-3112 3048 l
-2929 3048 l
-2928 3048 m
-3114 3048 l
-3114 3049 l
-2928 3049 l
-2928 3049 m
-3116 3049 l
-3116 3050 l
-2928 3050 l
-2927 3050 m
-3118 3050 l
-3118 3051 l
-2927 3051 l
-2926 3051 m
-3119 3051 l
-3119 3052 l
-2926 3052 l
-2926 3052 m
-3121 3052 l
-3121 3053 l
-2926 3053 l
-2925 3053 m
-3123 3053 l
-3123 3054 l
-2925 3054 l
-2925 3054 m
-3125 3054 l
-3125 3055 l
-2925 3055 l
-2924 3055 m
-3127 3055 l
-3127 3056 l
-2924 3056 l
-2924 3056 m
-3128 3056 l
-3128 3057 l
-2924 3057 l
-2923 3057 m
-3130 3057 l
-3130 3058 l
-2923 3058 l
-2923 3058 m
-3132 3058 l
-3132 3059 l
-2923 3059 l
-2922 3059 m
-3134 3059 l
-3134 3060 l
-2922 3060 l
-2921 3060 m
-3136 3060 l
-3136 3061 l
-2921 3061 l
-2921 3061 m
-3138 3061 l
-3138 3062 l
-2921 3062 l
-2920 3062 m
-3139 3062 l
-3139 3063 l
-2920 3063 l
-2920 3063 m
-3141 3063 l
-3141 3064 l
-2920 3064 l
-2919 3064 m
-3143 3064 l
-3143 3065 l
-2919 3065 l
-2919 3065 m
-3145 3065 l
-3145 3066 l
-2919 3066 l
-2918 3066 m
-3147 3066 l
-3147 3067 l
-2918 3067 l
-2918 3067 m
-3148 3067 l
-3148 3068 l
-2918 3068 l
-2917 3068 m
-3150 3068 l
-3150 3069 l
-2917 3069 l
-2916 3069 m
-3152 3069 l
-3152 3070 l
-2916 3070 l
-2916 3070 m
-3154 3070 l
-3154 3071 l
-2916 3071 l
-2915 3071 m
-3156 3071 l
-3156 3072 l
-2915 3072 l
-2915 3072 m
-3157 3072 l
-3157 3073 l
-2915 3073 l
-2914 3073 m
-3159 3073 l
-3159 3074 l
-2914 3074 l
-2914 3074 m
-3161 3074 l
-3161 3075 l
-2914 3075 l
-2913 3075 m
-3163 3075 l
-3163 3076 l
-2913 3076 l
-2913 3076 m
-3165 3076 l
-3165 3077 l
-2913 3077 l
-2913 3077 m
-3167 3077 l
-3167 3078 l
-2913 3078 l
-2914 3078 m
-3168 3078 l
-3168 3079 l
-2914 3079 l
-2916 3079 m
-3170 3079 l
-3170 3080 l
-2916 3080 l
-2918 3080 m
-3172 3080 l
-3172 3081 l
-2918 3081 l
-2920 3081 m
-3174 3081 l
-3174 3082 l
-2920 3082 l
-2922 3082 m
-3176 3082 l
-3176 3083 l
-2922 3083 l
-2923 3083 m
-3177 3083 l
-3177 3084 l
-2923 3084 l
-2925 3084 m
-3179 3084 l
-3179 3085 l
-2925 3085 l
-2927 3085 m
-3181 3085 l
-3181 3086 l
-2927 3086 l
-2929 3086 m
-3183 3086 l
-3183 3087 l
-2929 3087 l
-2931 3087 m
-3185 3087 l
-3185 3088 l
-2931 3088 l
-2933 3088 m
-3186 3088 l
-3186 3089 l
-2933 3089 l
-2934 3089 m
-3188 3089 l
-3188 3090 l
-2934 3090 l
-2936 3090 m
-3190 3090 l
-3190 3091 l
-2936 3091 l
-2938 3091 m
-3192 3091 l
-3192 3092 l
-2938 3092 l
-2940 3092 m
-3194 3092 l
-3194 3093 l
-2940 3093 l
-2942 3093 m
-3196 3093 l
-3196 3094 l
-2942 3094 l
-2943 3094 m
-3197 3094 l
-3197 3095 l
-2943 3095 l
-2945 3095 m
-3199 3095 l
-3199 3096 l
-2945 3096 l
-2947 3096 m
-3201 3096 l
-3201 3097 l
-2947 3097 l
-2949 3097 m
-3203 3097 l
-3203 3098 l
-2949 3098 l
-2951 3098 m
-3205 3098 l
-3205 3099 l
-2951 3099 l
-2953 3099 m
-3206 3099 l
-3206 3100 l
-2953 3100 l
-2954 3100 m
-3208 3100 l
-3208 3101 l
-2954 3101 l
-2956 3101 m
-3210 3101 l
-3210 3102 l
-2956 3102 l
-2958 3102 m
-3212 3102 l
-3212 3103 l
-2958 3103 l
-2960 3103 m
-3214 3103 l
-3214 3104 l
-2960 3104 l
-2962 3104 m
-3215 3104 l
-3215 3105 l
-2962 3105 l
-2963 3105 m
-3217 3105 l
-3217 3106 l
-2963 3106 l
-2965 3106 m
-3219 3106 l
-3219 3107 l
-2965 3107 l
-2967 3107 m
-3221 3107 l
-3221 3108 l
-2967 3108 l
-2969 3108 m
-3223 3108 l
-3223 3109 l
-2969 3109 l
-2971 3109 m
-3224 3109 l
-3224 3110 l
-2971 3110 l
-2973 3110 m
-3224 3110 l
-3224 3111 l
-2973 3111 l
-2974 3111 m
-3224 3111 l
-3224 3112 l
-2974 3112 l
-2976 3112 m
-3223 3112 l
-3223 3113 l
-2976 3113 l
-2978 3113 m
-3223 3113 l
-3223 3114 l
-2978 3114 l
-2980 3114 m
-3222 3114 l
-3222 3115 l
-2980 3115 l
-2982 3115 m
-3222 3115 l
-3222 3116 l
-2982 3116 l
-2983 3116 m
-3221 3116 l
-3221 3117 l
-2983 3117 l
-2985 3117 m
-3221 3117 l
-3221 3118 l
-2985 3118 l
-2987 3118 m
-3220 3118 l
-3220 3119 l
-2987 3119 l
-2989 3119 m
-3220 3119 l
-3220 3120 l
-2989 3120 l
-2991 3120 m
-3219 3120 l
-3219 3121 l
-2991 3121 l
-2993 3121 m
-3218 3121 l
-3218 3122 l
-2993 3122 l
-2994 3122 m
-3218 3122 l
-3218 3123 l
-2994 3123 l
-2996 3123 m
-3217 3123 l
-3217 3124 l
-2996 3124 l
-2998 3124 m
-3217 3124 l
-3217 3125 l
-2998 3125 l
-3000 3125 m
-3216 3125 l
-3216 3126 l
-3000 3126 l
-3002 3126 m
-3216 3126 l
-3216 3127 l
-3002 3127 l
-3004 3127 m
-3215 3127 l
-3215 3128 l
-3004 3128 l
-3005 3128 m
-3215 3128 l
-3215 3129 l
-3005 3129 l
-3007 3129 m
-3214 3129 l
-3214 3130 l
-3007 3130 l
-3009 3130 m
-3214 3130 l
-3214 3131 l
-3009 3131 l
-3011 3131 m
-3213 3131 l
-3213 3132 l
-3011 3132 l
-3013 3132 m
-3212 3132 l
-3212 3133 l
-3013 3133 l
-3014 3133 m
-3212 3133 l
-3212 3134 l
-3014 3134 l
-3016 3134 m
-3211 3134 l
-3211 3135 l
-3016 3135 l
-3018 3135 m
-3211 3135 l
-3211 3136 l
-3018 3136 l
-3020 3136 m
-3210 3136 l
-3210 3137 l
-3020 3137 l
-3022 3137 m
-3210 3137 l
-3210 3138 l
-3022 3138 l
-3024 3138 m
-3209 3138 l
-3209 3139 l
-3024 3139 l
-3025 3139 m
-3209 3139 l
-3209 3140 l
-3025 3140 l
-3027 3140 m
-3208 3140 l
-3208 3141 l
-3027 3141 l
-3029 3141 m
-3208 3141 l
-3208 3142 l
-3029 3142 l
-3031 3142 m
-3207 3142 l
-3207 3143 l
-3031 3143 l
-3033 3143 m
-3206 3143 l
-3206 3144 l
-3033 3144 l
-3034 3144 m
-3206 3144 l
-3206 3145 l
-3034 3145 l
-3036 3145 m
-3205 3145 l
-3205 3146 l
-3036 3146 l
-3038 3146 m
-3205 3146 l
-3205 3147 l
-3038 3147 l
-3040 3147 m
-3204 3147 l
-3204 3148 l
-3040 3148 l
-3042 3148 m
-3204 3148 l
-3204 3149 l
-3042 3149 l
-3044 3149 m
-3203 3149 l
-3203 3150 l
-3044 3150 l
-3045 3150 m
-3203 3150 l
-3203 3151 l
-3045 3151 l
-3047 3151 m
-3202 3151 l
-3202 3152 l
-3047 3152 l
-3049 3152 m
-3202 3152 l
-3202 3153 l
-3049 3153 l
-3051 3153 m
-3201 3153 l
-3201 3154 l
-3051 3154 l
-3053 3154 m
-3200 3154 l
-3200 3155 l
-3053 3155 l
-3054 3155 m
-3200 3155 l
-3200 3156 l
-3054 3156 l
-3056 3156 m
-3199 3156 l
-3199 3157 l
-3056 3157 l
-3058 3157 m
-3199 3157 l
-3199 3158 l
-3058 3158 l
-3060 3158 m
-3198 3158 l
-3198 3159 l
-3060 3159 l
-3062 3159 m
-3198 3159 l
-3198 3160 l
-3062 3160 l
-3064 3160 m
-3197 3160 l
-3197 3161 l
-3064 3161 l
-3065 3161 m
-3197 3161 l
-3197 3162 l
-3065 3162 l
-3067 3162 m
-3196 3162 l
-3196 3163 l
-3067 3163 l
-3069 3163 m
-3195 3163 l
-3195 3164 l
-3069 3164 l
-3071 3164 m
-3195 3164 l
-3195 3165 l
-3071 3165 l
-3073 3165 m
-3194 3165 l
-3194 3166 l
-3073 3166 l
-3074 3166 m
-3194 3166 l
-3194 3167 l
-3074 3167 l
-3076 3167 m
-3193 3167 l
-3193 3168 l
-3076 3168 l
-3078 3168 m
-3193 3168 l
-3193 3169 l
-3078 3169 l
-3080 3169 m
-3192 3169 l
-3192 3170 l
-3080 3170 l
-3082 3170 m
-3192 3170 l
-3192 3171 l
-3082 3171 l
-3084 3171 m
-3191 3171 l
-3191 3172 l
-3084 3172 l
-3085 3172 m
-3191 3172 l
-3191 3173 l
-3085 3173 l
-3087 3173 m
-3190 3173 l
-3190 3174 l
-3087 3174 l
-3089 3174 m
-3189 3174 l
-3189 3175 l
-3089 3175 l
-3091 3175 m
-3189 3175 l
-3189 3176 l
-3091 3176 l
-3093 3176 m
-3188 3176 l
-3188 3177 l
-3093 3177 l
-3095 3177 m
-3188 3177 l
-3188 3178 l
-3095 3178 l
-3096 3178 m
-3187 3178 l
-3187 3179 l
-3096 3179 l
-3098 3179 m
-3187 3179 l
-3187 3180 l
-3098 3180 l
-3100 3180 m
-3186 3180 l
-3186 3181 l
-3100 3181 l
-3102 3181 m
-3186 3181 l
-3186 3182 l
-3102 3182 l
-3104 3182 m
-3185 3182 l
-3185 3183 l
-3104 3183 l
-3105 3183 m
-3185 3183 l
-3185 3184 l
-3105 3184 l
-3107 3184 m
-3184 3184 l
-3184 3185 l
-3107 3185 l
-3109 3185 m
-3183 3185 l
-3183 3186 l
-3109 3186 l
-3111 3186 m
-3183 3186 l
-3183 3187 l
-3111 3187 l
-3113 3187 m
-3182 3187 l
-3182 3188 l
-3113 3188 l
-3115 3188 m
-3182 3188 l
-3182 3189 l
-3115 3189 l
-3116 3189 m
-3181 3189 l
-3181 3190 l
-3116 3190 l
-3118 3190 m
-3181 3190 l
-3181 3191 l
-3118 3191 l
-3120 3191 m
-3180 3191 l
-3180 3192 l
-3120 3192 l
-3122 3192 m
-3180 3192 l
-3180 3193 l
-3122 3193 l
-3124 3193 m
-3179 3193 l
-3179 3194 l
-3124 3194 l
-3125 3194 m
-3179 3194 l
-3179 3195 l
-3125 3195 l
-3127 3195 m
-3178 3195 l
-3178 3196 l
-3127 3196 l
-3129 3196 m
-3177 3196 l
-3177 3197 l
-3129 3197 l
-3131 3197 m
-3177 3197 l
-3177 3198 l
-3131 3198 l
-3133 3198 m
-3176 3198 l
-3176 3199 l
-3133 3199 l
-3135 3199 m
-3176 3199 l
-3176 3200 l
-3135 3200 l
-3136 3200 m
-3175 3200 l
-3175 3201 l
-3136 3201 l
-3138 3201 m
-3175 3201 l
-3175 3202 l
-3138 3202 l
-3140 3202 m
-3174 3202 l
-3174 3203 l
-3140 3203 l
-3142 3203 m
-3174 3203 l
-3174 3204 l
-3142 3204 l
-3144 3204 m
-3173 3204 l
-3173 3205 l
-3144 3205 l
-3145 3205 m
-3173 3205 l
-3173 3206 l
-3145 3206 l
-3147 3206 m
-3172 3206 l
-3172 3207 l
-3147 3207 l
-3149 3207 m
-3171 3207 l
-3171 3208 l
-3149 3208 l
-3151 3208 m
-3171 3208 l
-3171 3209 l
-3151 3209 l
-3153 3209 m
-3170 3209 l
-3170 3210 l
-3153 3210 l
-3155 3210 m
-3170 3210 l
-3170 3211 l
-3155 3211 l
-3156 3211 m
-3169 3211 l
-3169 3212 l
-3156 3212 l
-3158 3212 m
-3169 3212 l
-3169 3213 l
-3158 3213 l
-3160 3213 m
-3168 3213 l
-3168 3214 l
-3160 3214 l
-3162 3214 m
-3168 3214 l
-3168 3215 l
-3162 3215 l
-3164 3215 m
-3167 3215 l
-3167 3216 l
-3164 3216 l
-Y
-2972 2970.9 m
-2913 3077 l
-3166 3216 l
-3224 3110 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2964 3028 m
-3030 3065 l
-S
-3093 3124 m
-3095 3111 l
-3092 3099 l
-3083 3090 l
-3079 3088 l
-3066 3085 l
-3055 3088 l
-3045 3097 l
-3043 3101 l
-3041 3114 l
-3044 3125 l
-3053 3135 l
-3057 3137 l
-3070 3139 l
-3081 3136 l
-3093 3124 l
-3103 3105 l
-3109 3085 l
-3108 3070 l
-3099 3060 l
-3092 3056 l
-3079 3054 l
-3071 3059 l
-S
-3126 3175 m
-3117 3166 l
-3116 3151 l
-3122 3130 l
-3128 3119 l
-3142 3103 l
-3156 3096 l
-3169 3099 l
-3176 3103 l
-3185 3112 l
-3186 3127 l
-3180 3148 l
-3174 3159 l
-3160 3175 l
-3146 3182 l
-3133 3179 l
-3126 3175 l
-S
-1 g
-3473 3317 m
-3476 3317 l
-3476 3318 l
-3473 3318 l
-3472 3318 m
-3476 3318 l
-3476 3319 l
-3472 3319 l
-3471 3319 m
-3477 3319 l
-3477 3320 l
-3471 3320 l
-3470 3320 m
-3478 3320 l
-3478 3321 l
-3470 3321 l
-3469 3321 m
-3479 3321 l
-3479 3322 l
-3469 3322 l
-3467 3322 m
-3480 3322 l
-3480 3323 l
-3467 3323 l
-3466 3323 m
-3480 3323 l
-3480 3324 l
-3466 3324 l
-3465 3324 m
-3481 3324 l
-3481 3325 l
-3465 3325 l
-3464 3325 m
-3482 3325 l
-3482 3326 l
-3464 3326 l
-3463 3326 m
-3483 3326 l
-3483 3327 l
-3463 3327 l
-3461 3327 m
-3484 3327 l
-3484 3328 l
-3461 3328 l
-3460 3328 m
-3485 3328 l
-3485 3329 l
-3460 3329 l
-3459 3329 m
-3485 3329 l
-3485 3330 l
-3459 3330 l
-3458 3330 m
-3486 3330 l
-3486 3331 l
-3458 3331 l
-3457 3331 m
-3487 3331 l
-3487 3332 l
-3457 3332 l
-3455 3332 m
-3488 3332 l
-3488 3333 l
-3455 3333 l
-3454 3333 m
-3489 3333 l
-3489 3334 l
-3454 3334 l
-3453 3334 m
-3490 3334 l
-3490 3335 l
-3453 3335 l
-3452 3335 m
-3490 3335 l
-3490 3336 l
-3452 3336 l
-3451 3336 m
-3491 3336 l
-3491 3337 l
-3451 3337 l
-3449 3337 m
-3492 3337 l
-3492 3338 l
-3449 3338 l
-3448 3338 m
-3493 3338 l
-3493 3339 l
-3448 3339 l
-3447 3339 m
-3494 3339 l
-3494 3340 l
-3447 3340 l
-3446 3340 m
-3494 3340 l
-3494 3341 l
-3446 3341 l
-3445 3341 m
-3495 3341 l
-3495 3342 l
-3445 3342 l
-3443 3342 m
-3496 3342 l
-3496 3343 l
-3443 3343 l
-3442 3343 m
-3497 3343 l
-3497 3344 l
-3442 3344 l
-3441 3344 m
-3498 3344 l
-3498 3345 l
-3441 3345 l
-3440 3345 m
-3499 3345 l
-3499 3346 l
-3440 3346 l
-3438 3346 m
-3499 3346 l
-3499 3347 l
-3438 3347 l
-3437 3347 m
-3500 3347 l
-3500 3348 l
-3437 3348 l
-3436 3348 m
-3501 3348 l
-3501 3349 l
-3436 3349 l
-3435 3349 m
-3502 3349 l
-3502 3350 l
-3435 3350 l
-3434 3350 m
-3503 3350 l
-3503 3351 l
-3434 3351 l
-3432 3351 m
-3504 3351 l
-3504 3352 l
-3432 3352 l
-3431 3352 m
-3504 3352 l
-3504 3353 l
-3431 3353 l
-3430 3353 m
-3505 3353 l
-3505 3354 l
-3430 3354 l
-3429 3354 m
-3506 3354 l
-3506 3355 l
-3429 3355 l
-3428 3355 m
-3507 3355 l
-3507 3356 l
-3428 3356 l
-3426 3356 m
-3508 3356 l
-3508 3357 l
-3426 3357 l
-3425 3357 m
-3508 3357 l
-3508 3358 l
-3425 3358 l
-3424 3358 m
-3509 3358 l
-3509 3359 l
-3424 3359 l
-3423 3359 m
-3510 3359 l
-3510 3360 l
-3423 3360 l
-3422 3360 m
-3511 3360 l
-3511 3361 l
-3422 3361 l
-3420 3361 m
-3512 3361 l
-3512 3362 l
-3420 3362 l
-3419 3362 m
-3513 3362 l
-3513 3363 l
-3419 3363 l
-3418 3363 m
-3513 3363 l
-3513 3364 l
-3418 3364 l
-3417 3364 m
-3514 3364 l
-3514 3365 l
-3417 3365 l
-3416 3365 m
-3515 3365 l
-3515 3366 l
-3416 3366 l
-3414 3366 m
-3516 3366 l
-3516 3367 l
-3414 3367 l
-3413 3367 m
-3517 3367 l
-3517 3368 l
-3413 3368 l
-3412 3368 m
-3518 3368 l
-3518 3369 l
-3412 3369 l
-3411 3369 m
-3518 3369 l
-3518 3370 l
-3411 3370 l
-3409 3370 m
-3519 3370 l
-3519 3371 l
-3409 3371 l
-3408 3371 m
-3520 3371 l
-3520 3372 l
-3408 3372 l
-3407 3372 m
-3521 3372 l
-3521 3373 l
-3407 3373 l
-3406 3373 m
-3522 3373 l
-3522 3374 l
-3406 3374 l
-3405 3374 m
-3522 3374 l
-3522 3375 l
-3405 3375 l
-3403 3375 m
-3523 3375 l
-3523 3376 l
-3403 3376 l
-3402 3376 m
-3524 3376 l
-3524 3377 l
-3402 3377 l
-3401 3377 m
-3525 3377 l
-3525 3378 l
-3401 3378 l
-3400 3378 m
-3526 3378 l
-3526 3379 l
-3400 3379 l
-3399 3379 m
-3527 3379 l
-3527 3380 l
-3399 3380 l
-3397 3380 m
-3527 3380 l
-3527 3381 l
-3397 3381 l
-3396 3381 m
-3528 3381 l
-3528 3382 l
-3396 3382 l
-3395 3382 m
-3529 3382 l
-3529 3383 l
-3395 3383 l
-3394 3383 m
-3530 3383 l
-3530 3384 l
-3394 3384 l
-3393 3384 m
-3531 3384 l
-3531 3385 l
-3393 3385 l
-3391 3385 m
-3532 3385 l
-3532 3386 l
-3391 3386 l
-3390 3386 m
-3532 3386 l
-3532 3387 l
-3390 3387 l
-3389 3387 m
-3533 3387 l
-3533 3388 l
-3389 3388 l
-3388 3388 m
-3534 3388 l
-3534 3389 l
-3388 3389 l
-3387 3389 m
-3535 3389 l
-3535 3390 l
-3387 3390 l
-3385 3390 m
-3536 3390 l
-3536 3391 l
-3385 3391 l
-3384 3391 m
-3537 3391 l
-3537 3392 l
-3384 3392 l
-3383 3392 m
-3537 3392 l
-3537 3393 l
-3383 3393 l
-3382 3393 m
-3538 3393 l
-3538 3394 l
-3382 3394 l
-3381 3394 m
-3539 3394 l
-3539 3395 l
-3381 3395 l
-3381 3395 m
-3540 3395 l
-3540 3396 l
-3381 3396 l
-3381 3396 m
-3541 3396 l
-3541 3397 l
-3381 3397 l
-3382 3397 m
-3541 3397 l
-3541 3398 l
-3382 3398 l
-3383 3398 m
-3542 3398 l
-3542 3399 l
-3383 3399 l
-3384 3399 m
-3543 3399 l
-3543 3400 l
-3384 3400 l
-3385 3400 m
-3544 3400 l
-3544 3401 l
-3385 3401 l
-3385 3401 m
-3545 3401 l
-3545 3402 l
-3385 3402 l
-3386 3402 m
-3546 3402 l
-3546 3403 l
-3386 3403 l
-3387 3403 m
-3546 3403 l
-3546 3404 l
-3387 3404 l
-3388 3404 m
-3547 3404 l
-3547 3405 l
-3388 3405 l
-3389 3405 m
-3548 3405 l
-3548 3406 l
-3389 3406 l
-3390 3406 m
-3549 3406 l
-3549 3407 l
-3390 3407 l
-3390 3407 m
-3550 3407 l
-3550 3408 l
-3390 3408 l
-3391 3408 m
-3551 3408 l
-3551 3409 l
-3391 3409 l
-3392 3409 m
-3551 3409 l
-3551 3410 l
-3392 3410 l
-3393 3410 m
-3552 3410 l
-3552 3411 l
-3393 3411 l
-3394 3411 m
-3553 3411 l
-3553 3412 l
-3394 3412 l
-3395 3412 m
-3554 3412 l
-3554 3413 l
-3395 3413 l
-3395 3413 m
-3555 3413 l
-3555 3414 l
-3395 3414 l
-3396 3414 m
-3555 3414 l
-3555 3415 l
-3396 3415 l
-3397 3415 m
-3556 3415 l
-3556 3416 l
-3397 3416 l
-3398 3416 m
-3557 3416 l
-3557 3417 l
-3398 3417 l
-3399 3417 m
-3558 3417 l
-3558 3418 l
-3399 3418 l
-3400 3418 m
-3559 3418 l
-3559 3419 l
-3400 3419 l
-3400 3419 m
-3560 3419 l
-3560 3420 l
-3400 3420 l
-3401 3420 m
-3560 3420 l
-3560 3421 l
-3401 3421 l
-3402 3421 m
-3561 3421 l
-3561 3422 l
-3402 3422 l
-3403 3422 m
-3562 3422 l
-3562 3423 l
-3403 3423 l
-3404 3423 m
-3563 3423 l
-3563 3424 l
-3404 3424 l
-3405 3424 m
-3564 3424 l
-3564 3425 l
-3405 3425 l
-3405 3425 m
-3565 3425 l
-3565 3426 l
-3405 3426 l
-3406 3426 m
-3565 3426 l
-3565 3427 l
-3406 3427 l
-3407 3427 m
-3566 3427 l
-3566 3428 l
-3407 3428 l
-3408 3428 m
-3567 3428 l
-3567 3429 l
-3408 3429 l
-3409 3429 m
-3568 3429 l
-3568 3430 l
-3409 3430 l
-3410 3430 m
-3569 3430 l
-3569 3432 l
-3410 3432 l
-3411 3432 m
-3570 3432 l
-3570 3433 l
-3411 3433 l
-3412 3433 m
-3571 3433 l
-3571 3434 l
-3412 3434 l
-3413 3434 m
-3572 3434 l
-3572 3435 l
-3413 3435 l
-3414 3435 m
-3573 3435 l
-3573 3436 l
-3414 3436 l
-3414 3436 m
-3574 3436 l
-3574 3437 l
-3414 3437 l
-3415 3437 m
-3574 3437 l
-3574 3438 l
-3415 3438 l
-3416 3438 m
-3575 3438 l
-3575 3439 l
-3416 3439 l
-3417 3439 m
-3576 3439 l
-3576 3440 l
-3417 3440 l
-3418 3440 m
-3577 3440 l
-3577 3441 l
-3418 3441 l
-3419 3441 m
-3578 3441 l
-3578 3442 l
-3419 3442 l
-3419 3442 m
-3579 3442 l
-3579 3443 l
-3419 3443 l
-3420 3443 m
-3579 3443 l
-3579 3444 l
-3420 3444 l
-3421 3444 m
-3580 3444 l
-3580 3445 l
-3421 3445 l
-3422 3445 m
-3581 3445 l
-3581 3446 l
-3422 3446 l
-3423 3446 m
-3582 3446 l
-3582 3447 l
-3423 3447 l
-3424 3447 m
-3583 3447 l
-3583 3449 l
-3424 3449 l
-3425 3449 m
-3584 3449 l
-3584 3450 l
-3425 3450 l
-3426 3450 m
-3585 3450 l
-3585 3451 l
-3426 3451 l
-3427 3451 m
-3586 3451 l
-3586 3452 l
-3427 3452 l
-3428 3452 m
-3587 3452 l
-3587 3453 l
-3428 3453 l
-3429 3453 m
-3588 3453 l
-3588 3455 l
-3429 3455 l
-3430 3455 m
-3589 3455 l
-3589 3456 l
-3430 3456 l
-3431 3456 m
-3590 3456 l
-3590 3457 l
-3431 3457 l
-3432 3457 m
-3591 3457 l
-3591 3458 l
-3432 3458 l
-3433 3458 m
-3592 3458 l
-3592 3459 l
-3433 3459 l
-3434 3459 m
-3593 3459 l
-3593 3461 l
-3434 3461 l
-3435 3461 m
-3594 3461 l
-3594 3462 l
-3435 3462 l
-3436 3462 m
-3595 3462 l
-3595 3463 l
-3436 3463 l
-3437 3463 m
-3596 3463 l
-3596 3464 l
-3437 3464 l
-3438 3464 m
-3597 3464 l
-3597 3465 l
-3438 3465 l
-3439 3465 m
-3598 3465 l
-3598 3467 l
-3439 3467 l
-3440 3467 m
-3599 3467 l
-3599 3468 l
-3440 3468 l
-3441 3468 m
-3600 3468 l
-3600 3469 l
-3441 3469 l
-3442 3469 m
-3601 3469 l
-3601 3470 l
-3442 3470 l
-3443 3470 m
-3602 3470 l
-3602 3472 l
-3443 3472 l
-3444 3472 m
-3603 3472 l
-3603 3473 l
-3444 3473 l
-3445 3473 m
-3604 3473 l
-3604 3474 l
-3445 3474 l
-3446 3474 m
-3605 3474 l
-3605 3475 l
-3446 3475 l
-3447 3475 m
-3606 3475 l
-3606 3476 l
-3447 3476 l
-3448 3476 m
-3607 3476 l
-3607 3478 l
-3448 3478 l
-3449 3478 m
-3608 3478 l
-3608 3479 l
-3449 3479 l
-3450 3479 m
-3609 3479 l
-3609 3480 l
-3450 3480 l
-3451 3480 m
-3610 3480 l
-3610 3481 l
-3451 3481 l
-3452 3481 m
-3611 3481 l
-3611 3482 l
-3452 3482 l
-3453 3482 m
-3612 3482 l
-3612 3484 l
-3453 3484 l
-3454 3484 m
-3613 3484 l
-3613 3485 l
-3454 3485 l
-3455 3485 m
-3614 3485 l
-3614 3486 l
-3455 3486 l
-3456 3486 m
-3615 3486 l
-3615 3487 l
-3456 3487 l
-3457 3487 m
-3616 3487 l
-3616 3488 l
-3457 3488 l
-3458 3488 m
-3616 3488 l
-3616 3489 l
-3458 3489 l
-3458 3489 m
-3617 3489 l
-3617 3490 l
-3458 3490 l
-3459 3490 m
-3618 3490 l
-3618 3491 l
-3459 3491 l
-3460 3491 m
-3619 3491 l
-3619 3492 l
-3460 3492 l
-3461 3492 m
-3620 3492 l
-3620 3493 l
-3461 3493 l
-3462 3493 m
-3621 3493 l
-3621 3494 l
-3462 3494 l
-3463 3494 m
-3621 3494 l
-3621 3495 l
-3463 3495 l
-3463 3495 m
-3622 3495 l
-3622 3496 l
-3463 3496 l
-3464 3496 m
-3623 3496 l
-3623 3497 l
-3464 3497 l
-3465 3497 m
-3624 3497 l
-3624 3498 l
-3465 3498 l
-3466 3498 m
-3625 3498 l
-3625 3499 l
-3466 3499 l
-3467 3499 m
-3626 3499 l
-3626 3500 l
-3467 3500 l
-3468 3500 m
-3626 3500 l
-3626 3501 l
-3468 3501 l
-3468 3501 m
-3627 3501 l
-3627 3502 l
-3468 3502 l
-3469 3502 m
-3628 3502 l
-3628 3503 l
-3469 3503 l
-3470 3503 m
-3629 3503 l
-3629 3504 l
-3470 3504 l
-3471 3504 m
-3630 3504 l
-3630 3505 l
-3471 3505 l
-3472 3505 m
-3630 3505 l
-3630 3506 l
-3472 3506 l
-3473 3506 m
-3631 3506 l
-3631 3507 l
-3473 3507 l
-3473 3507 m
-3632 3507 l
-3632 3508 l
-3473 3508 l
-3474 3508 m
-3633 3508 l
-3633 3509 l
-3474 3509 l
-3475 3509 m
-3634 3509 l
-3634 3510 l
-3475 3510 l
-3476 3510 m
-3635 3510 l
-3635 3511 l
-3476 3511 l
-3477 3511 m
-3635 3511 l
-3635 3512 l
-3477 3512 l
-3477 3512 m
-3636 3512 l
-3636 3513 l
-3477 3513 l
-3478 3513 m
-3637 3513 l
-3637 3514 l
-3478 3514 l
-3479 3514 m
-3638 3514 l
-3638 3515 l
-3479 3515 l
-3480 3515 m
-3639 3515 l
-3639 3516 l
-3480 3516 l
-3481 3516 m
-3640 3516 l
-3640 3517 l
-3481 3517 l
-3482 3517 m
-3640 3517 l
-3640 3518 l
-3482 3518 l
-3482 3518 m
-3641 3518 l
-3641 3519 l
-3482 3519 l
-3483 3519 m
-3642 3519 l
-3642 3520 l
-3483 3520 l
-3484 3520 m
-3643 3520 l
-3643 3521 l
-3484 3521 l
-3485 3521 m
-3644 3521 l
-3644 3522 l
-3485 3522 l
-3486 3522 m
-3644 3522 l
-3644 3523 l
-3486 3523 l
-3487 3523 m
-3645 3523 l
-3645 3524 l
-3487 3524 l
-3487 3524 m
-3646 3524 l
-3646 3525 l
-3487 3525 l
-3488 3525 m
-3647 3525 l
-3647 3526 l
-3488 3526 l
-3489 3526 m
-3648 3526 l
-3648 3527 l
-3489 3527 l
-3490 3527 m
-3649 3527 l
-3649 3528 l
-3490 3528 l
-3491 3528 m
-3649 3528 l
-3649 3529 l
-3491 3529 l
-3492 3529 m
-3650 3529 l
-3650 3530 l
-3492 3530 l
-3492 3530 m
-3651 3530 l
-3651 3531 l
-3492 3531 l
-3493 3531 m
-3652 3531 l
-3652 3532 l
-3493 3532 l
-3494 3532 m
-3653 3532 l
-3653 3533 l
-3494 3533 l
-3495 3533 m
-3654 3533 l
-3654 3534 l
-3495 3534 l
-3496 3534 m
-3654 3534 l
-3654 3535 l
-3496 3535 l
-3497 3535 m
-3655 3535 l
-3655 3536 l
-3497 3536 l
-3497 3536 m
-3656 3536 l
-3656 3537 l
-3497 3537 l
-3498 3537 m
-3657 3537 l
-3657 3538 l
-3498 3538 l
-3499 3538 m
-3658 3538 l
-3658 3539 l
-3499 3539 l
-3500 3539 m
-3658 3539 l
-3658 3540 l
-3500 3540 l
-3501 3540 m
-3659 3540 l
-3659 3541 l
-3501 3541 l
-3502 3541 m
-3657 3541 l
-3657 3542 l
-3502 3542 l
-3502 3542 m
-3656 3542 l
-3656 3543 l
-3502 3543 l
-3503 3543 m
-3655 3543 l
-3655 3544 l
-3503 3544 l
-3504 3544 m
-3654 3544 l
-3654 3545 l
-3504 3545 l
-3505 3545 m
-3652 3545 l
-3652 3546 l
-3505 3546 l
-3506 3546 m
-3651 3546 l
-3651 3547 l
-3506 3547 l
-3506 3547 m
-3650 3547 l
-3650 3548 l
-3506 3548 l
-3507 3548 m
-3649 3548 l
-3649 3549 l
-3507 3549 l
-3508 3549 m
-3648 3549 l
-3648 3550 l
-3508 3550 l
-3509 3550 m
-3646 3550 l
-3646 3551 l
-3509 3551 l
-3510 3551 m
-3645 3551 l
-3645 3552 l
-3510 3552 l
-3511 3552 m
-3644 3552 l
-3644 3553 l
-3511 3553 l
-3511 3553 m
-3643 3553 l
-3643 3554 l
-3511 3554 l
-3512 3554 m
-3642 3554 l
-3642 3555 l
-3512 3555 l
-3513 3555 m
-3640 3555 l
-3640 3556 l
-3513 3556 l
-3514 3556 m
-3639 3556 l
-3639 3557 l
-3514 3557 l
-3515 3557 m
-3638 3557 l
-3638 3558 l
-3515 3558 l
-3516 3558 m
-3637 3558 l
-3637 3559 l
-3516 3559 l
-3516 3559 m
-3636 3559 l
-3636 3560 l
-3516 3560 l
-3517 3560 m
-3634 3560 l
-3634 3561 l
-3517 3561 l
-3518 3561 m
-3633 3561 l
-3633 3562 l
-3518 3562 l
-3519 3562 m
-3632 3562 l
-3632 3563 l
-3519 3563 l
-3520 3563 m
-3631 3563 l
-3631 3564 l
-3520 3564 l
-3521 3564 m
-3630 3564 l
-3630 3565 l
-3521 3565 l
-3521 3565 m
-3628 3565 l
-3628 3566 l
-3521 3566 l
-3522 3566 m
-3627 3566 l
-3627 3567 l
-3522 3567 l
-3523 3567 m
-3626 3567 l
-3626 3568 l
-3523 3568 l
-3524 3568 m
-3625 3568 l
-3625 3569 l
-3524 3569 l
-3525 3569 m
-3623 3569 l
-3623 3570 l
-3525 3570 l
-3526 3570 m
-3622 3570 l
-3622 3571 l
-3526 3571 l
-3526 3571 m
-3621 3571 l
-3621 3572 l
-3526 3572 l
-3527 3572 m
-3620 3572 l
-3620 3573 l
-3527 3573 l
-3528 3573 m
-3619 3573 l
-3619 3574 l
-3528 3574 l
-3529 3574 m
-3617 3574 l
-3617 3575 l
-3529 3575 l
-3530 3575 m
-3616 3575 l
-3616 3576 l
-3530 3576 l
-3531 3576 m
-3615 3576 l
-3615 3577 l
-3531 3577 l
-3531 3577 m
-3614 3577 l
-3614 3578 l
-3531 3578 l
-3532 3578 m
-3613 3578 l
-3613 3579 l
-3532 3579 l
-3533 3579 m
-3611 3579 l
-3611 3580 l
-3533 3580 l
-3534 3580 m
-3610 3580 l
-3610 3581 l
-3534 3581 l
-3535 3581 m
-3609 3581 l
-3609 3582 l
-3535 3582 l
-3535 3582 m
-3608 3582 l
-3608 3583 l
-3535 3583 l
-3536 3583 m
-3607 3583 l
-3607 3584 l
-3536 3584 l
-3537 3584 m
-3605 3584 l
-3605 3585 l
-3537 3585 l
-3538 3585 m
-3604 3585 l
-3604 3586 l
-3538 3586 l
-3539 3586 m
-3603 3586 l
-3603 3587 l
-3539 3587 l
-3540 3587 m
-3602 3587 l
-3602 3588 l
-3540 3588 l
-3540 3588 m
-3601 3588 l
-3601 3589 l
-3540 3589 l
-3541 3589 m
-3599 3589 l
-3599 3590 l
-3541 3590 l
-3542 3590 m
-3598 3590 l
-3598 3591 l
-3542 3591 l
-3543 3591 m
-3597 3591 l
-3597 3592 l
-3543 3592 l
-3544 3592 m
-3596 3592 l
-3596 3593 l
-3544 3593 l
-3545 3593 m
-3594 3593 l
-3594 3594 l
-3545 3594 l
-3545 3594 m
-3593 3594 l
-3593 3595 l
-3545 3595 l
-3546 3595 m
-3592 3595 l
-3592 3596 l
-3546 3596 l
-3547 3596 m
-3591 3596 l
-3591 3597 l
-3547 3597 l
-3548 3597 m
-3590 3597 l
-3590 3598 l
-3548 3598 l
-3549 3598 m
-3588 3598 l
-3588 3599 l
-3549 3599 l
-3550 3599 m
-3587 3599 l
-3587 3600 l
-3550 3600 l
-3550 3600 m
-3586 3600 l
-3586 3601 l
-3550 3601 l
-3551 3601 m
-3585 3601 l
-3585 3602 l
-3551 3602 l
-3552 3602 m
-3584 3602 l
-3584 3603 l
-3552 3603 l
-3553 3603 m
-3582 3603 l
-3582 3604 l
-3553 3604 l
-3554 3604 m
-3581 3604 l
-3581 3605 l
-3554 3605 l
-3555 3605 m
-3580 3605 l
-3580 3606 l
-3555 3606 l
-3555 3606 m
-3579 3606 l
-3579 3607 l
-3555 3607 l
-3556 3607 m
-3578 3607 l
-3578 3608 l
-3556 3608 l
-3557 3608 m
-3576 3608 l
-3576 3609 l
-3557 3609 l
-3558 3609 m
-3575 3609 l
-3575 3610 l
-3558 3610 l
-3559 3610 m
-3574 3610 l
-3574 3611 l
-3559 3611 l
-3560 3611 m
-3573 3611 l
-3573 3612 l
-3560 3612 l
-3560 3612 m
-3572 3612 l
-3572 3613 l
-3560 3613 l
-3561 3613 m
-3570 3613 l
-3570 3614 l
-3561 3614 l
-3562 3614 m
-3569 3614 l
-3569 3615 l
-3562 3615 l
-3563 3615 m
-3568 3615 l
-3568 3616 l
-3563 3616 l
-3564 3616 m
-3567 3616 l
-3567 3617 l
-3564 3617 l
-Y
-3474.6 3317.5 m
-3381 3395 l
-3565 3617 l
-3658 3540 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3446 3368 m
-3494 3426 l
-S
-3518 3515 m
-3509 3517 l
-3498 3510 l
-3492 3503 l
-3488 3491 l
-3492 3476 l
-3505 3460 l
-3522 3447 l
-3537 3439 l
-3549 3440 l
-3560 3447 l
-3563 3451 l
-3567 3463 l
-3566 3475 l
-3559 3486 l
-3556 3488 l
-3544 3493 l
-3532 3492 l
-3521 3485 l
-3518 3482 l
-3513 3470 l
-3515 3458 l
-3522 3447 l
-S
-3543 3564 m
-3538 3552 l
-3542 3538 l
-3556 3521 l
-3566 3513 l
-3584 3503 l
-3599 3502 l
-3611 3509 l
-3616 3515 l
-3621 3527 l
-3616 3542 l
-3603 3558 l
-3593 3566 l
-3574 3576 l
-3559 3578 l
-3548 3571 l
-3543 3564 l
-S
-1 g
-3809 3828 m
-3815 3828 l
-3815 3829 l
-3809 3829 l
-3806 3829 m
-3816 3829 l
-3816 3830 l
-3806 3830 l
-3803 3830 m
-3816 3830 l
-3816 3831 l
-3803 3831 l
-3799 3831 m
-3816 3831 l
-3816 3832 l
-3799 3832 l
-3796 3832 m
-3816 3832 l
-3816 3833 l
-3796 3833 l
-3793 3833 m
-3817 3833 l
-3817 3834 l
-3793 3834 l
-3789 3834 m
-3817 3834 l
-3817 3835 l
-3789 3835 l
-3786 3835 m
-3817 3835 l
-3817 3836 l
-3786 3836 l
-3782 3836 m
-3818 3836 l
-3818 3837 l
-3782 3837 l
-3779 3837 m
-3818 3837 l
-3818 3838 l
-3779 3838 l
-3776 3838 m
-3818 3838 l
-3818 3839 l
-3776 3839 l
-3772 3839 m
-3819 3839 l
-3819 3840 l
-3772 3840 l
-3769 3840 m
-3819 3840 l
-3819 3841 l
-3769 3841 l
-3765 3841 m
-3819 3841 l
-3819 3842 l
-3765 3842 l
-3762 3842 m
-3819 3842 l
-3819 3843 l
-3762 3843 l
-3759 3843 m
-3820 3843 l
-3820 3844 l
-3759 3844 l
-3755 3844 m
-3820 3844 l
-3820 3845 l
-3755 3845 l
-3752 3845 m
-3820 3845 l
-3820 3846 l
-3752 3846 l
-3748 3846 m
-3821 3846 l
-3821 3847 l
-3748 3847 l
-3745 3847 m
-3821 3847 l
-3821 3848 l
-3745 3848 l
-3742 3848 m
-3821 3848 l
-3821 3849 l
-3742 3849 l
-3738 3849 m
-3822 3849 l
-3822 3850 l
-3738 3850 l
-3735 3850 m
-3822 3850 l
-3822 3851 l
-3735 3851 l
-3731 3851 m
-3822 3851 l
-3822 3852 l
-3731 3852 l
-3728 3852 m
-3822 3852 l
-3822 3853 l
-3728 3853 l
-3725 3853 m
-3823 3853 l
-3823 3854 l
-3725 3854 l
-3721 3854 m
-3823 3854 l
-3823 3855 l
-3721 3855 l
-3718 3855 m
-3823 3855 l
-3823 3856 l
-3718 3856 l
-3714 3856 m
-3824 3856 l
-3824 3857 l
-3714 3857 l
-3711 3857 m
-3824 3857 l
-3824 3858 l
-3711 3858 l
-3708 3858 m
-3824 3858 l
-3824 3859 l
-3708 3859 l
-3704 3859 m
-3825 3859 l
-3825 3860 l
-3704 3860 l
-3701 3860 m
-3825 3860 l
-3825 3861 l
-3701 3861 l
-3698 3861 m
-3825 3861 l
-3825 3862 l
-3698 3862 l
-3698 3862 m
-3825 3862 l
-3825 3863 l
-3698 3863 l
-3698 3863 m
-3826 3863 l
-3826 3866 l
-3698 3866 l
-3699 3866 m
-3827 3866 l
-3827 3869 l
-3699 3869 l
-3700 3869 m
-3828 3869 l
-3828 3873 l
-3700 3873 l
-3701 3873 m
-3829 3873 l
-3829 3876 l
-3701 3876 l
-3702 3876 m
-3830 3876 l
-3830 3879 l
-3702 3879 l
-3703 3879 m
-3831 3879 l
-3831 3883 l
-3703 3883 l
-3704 3883 m
-3832 3883 l
-3832 3886 l
-3704 3886 l
-3705 3886 m
-3833 3886 l
-3833 3889 l
-3705 3889 l
-3706 3889 m
-3834 3889 l
-3834 3893 l
-3706 3893 l
-3707 3893 m
-3835 3893 l
-3835 3896 l
-3707 3896 l
-3708 3896 m
-3836 3896 l
-3836 3899 l
-3708 3899 l
-3709 3899 m
-3837 3899 l
-3837 3903 l
-3709 3903 l
-3710 3903 m
-3838 3903 l
-3838 3906 l
-3710 3906 l
-3711 3906 m
-3839 3906 l
-3839 3909 l
-3711 3909 l
-3712 3909 m
-3840 3909 l
-3840 3913 l
-3712 3913 l
-3713 3913 m
-3841 3913 l
-3841 3916 l
-3713 3916 l
-3714 3916 m
-3842 3916 l
-3842 3919 l
-3714 3919 l
-3715 3919 m
-3842 3919 l
-3842 3920 l
-3715 3920 l
-3715 3920 m
-3843 3920 l
-3843 3923 l
-3715 3923 l
-3716 3923 m
-3844 3923 l
-3844 3926 l
-3716 3926 l
-3717 3926 m
-3845 3926 l
-3845 3929 l
-3717 3929 l
-3718 3929 m
-3845 3929 l
-3845 3930 l
-3718 3930 l
-3718 3930 m
-3846 3930 l
-3846 3933 l
-3718 3933 l
-3719 3933 m
-3847 3933 l
-3847 3936 l
-3719 3936 l
-3720 3936 m
-3848 3936 l
-3848 3939 l
-3720 3939 l
-3721 3939 m
-3848 3939 l
-3848 3940 l
-3721 3940 l
-3721 3940 m
-3849 3940 l
-3849 3943 l
-3721 3943 l
-3722 3943 m
-3850 3943 l
-3850 3946 l
-3722 3946 l
-3723 3946 m
-3851 3946 l
-3851 3949 l
-3723 3949 l
-3724 3949 m
-3851 3949 l
-3851 3950 l
-3724 3950 l
-3724 3950 m
-3852 3950 l
-3852 3953 l
-3724 3953 l
-3725 3953 m
-3853 3953 l
-3853 3956 l
-3725 3956 l
-3726 3956 m
-3854 3956 l
-3854 3959 l
-3726 3959 l
-3727 3959 m
-3854 3959 l
-3854 3960 l
-3727 3960 l
-3727 3960 m
-3855 3960 l
-3855 3963 l
-3727 3963 l
-3728 3963 m
-3856 3963 l
-3856 3966 l
-3728 3966 l
-3729 3966 m
-3857 3966 l
-3857 3969 l
-3729 3969 l
-3730 3969 m
-3857 3969 l
-3857 3970 l
-3730 3970 l
-3730 3970 m
-3858 3970 l
-3858 3973 l
-3730 3973 l
-3731 3973 m
-3859 3973 l
-3859 3976 l
-3731 3976 l
-3732 3976 m
-3860 3976 l
-3860 3979 l
-3732 3979 l
-3733 3979 m
-3860 3979 l
-3860 3980 l
-3733 3980 l
-3733 3980 m
-3861 3980 l
-3861 3983 l
-3733 3983 l
-3734 3983 m
-3862 3983 l
-3862 3986 l
-3734 3986 l
-3735 3986 m
-3863 3986 l
-3863 3989 l
-3735 3989 l
-3736 3989 m
-3863 3989 l
-3863 3990 l
-3736 3990 l
-3736 3990 m
-3864 3990 l
-3864 3993 l
-3736 3993 l
-3737 3993 m
-3865 3993 l
-3865 3996 l
-3737 3996 l
-3738 3996 m
-3866 3996 l
-3866 3999 l
-3738 3999 l
-3739 3999 m
-3866 3999 l
-3866 4000 l
-3739 4000 l
-3739 4000 m
-3867 4000 l
-3867 4003 l
-3739 4003 l
-3740 4003 m
-3868 4003 l
-3868 4006 l
-3740 4006 l
-3741 4006 m
-3869 4006 l
-3869 4009 l
-3741 4009 l
-3742 4009 m
-3869 4009 l
-3869 4010 l
-3742 4010 l
-3742 4010 m
-3870 4010 l
-3870 4013 l
-3742 4013 l
-3743 4013 m
-3871 4013 l
-3871 4016 l
-3743 4016 l
-3744 4016 m
-3871 4016 l
-3871 4017 l
-3744 4017 l
-3744 4017 m
-3872 4017 l
-3872 4019 l
-3744 4019 l
-3745 4019 m
-3872 4019 l
-3872 4020 l
-3745 4020 l
-3745 4020 m
-3873 4020 l
-3873 4023 l
-3745 4023 l
-3746 4023 m
-3874 4023 l
-3874 4026 l
-3746 4026 l
-3747 4026 m
-3874 4026 l
-3874 4027 l
-3747 4027 l
-3747 4027 m
-3875 4027 l
-3875 4029 l
-3747 4029 l
-3748 4029 m
-3875 4029 l
-3875 4030 l
-3748 4030 l
-3748 4030 m
-3876 4030 l
-3876 4033 l
-3748 4033 l
-3749 4033 m
-3877 4033 l
-3877 4036 l
-3749 4036 l
-3750 4036 m
-3877 4036 l
-3877 4037 l
-3750 4037 l
-3750 4037 m
-3878 4037 l
-3878 4039 l
-3750 4039 l
-3751 4039 m
-3878 4039 l
-3878 4040 l
-3751 4040 l
-3751 4040 m
-3879 4040 l
-3879 4043 l
-3751 4043 l
-3752 4043 m
-3880 4043 l
-3880 4046 l
-3752 4046 l
-3753 4046 m
-3880 4046 l
-3880 4047 l
-3753 4047 l
-3753 4047 m
-3881 4047 l
-3881 4049 l
-3753 4049 l
-3754 4049 m
-3881 4049 l
-3881 4050 l
-3754 4050 l
-3754 4050 m
-3882 4050 l
-3882 4053 l
-3754 4053 l
-3755 4053 m
-3883 4053 l
-3883 4056 l
-3755 4056 l
-3756 4056 m
-3883 4056 l
-3883 4057 l
-3756 4057 l
-3756 4057 m
-3884 4057 l
-3884 4059 l
-3756 4059 l
-3757 4059 m
-3884 4059 l
-3884 4060 l
-3757 4060 l
-3757 4060 m
-3885 4060 l
-3885 4063 l
-3757 4063 l
-3758 4063 m
-3886 4063 l
-3886 4066 l
-3758 4066 l
-3759 4066 m
-3886 4066 l
-3886 4067 l
-3759 4067 l
-3759 4067 m
-3887 4067 l
-3887 4069 l
-3759 4069 l
-3760 4069 m
-3887 4069 l
-3887 4070 l
-3760 4070 l
-3760 4070 m
-3888 4070 l
-3888 4073 l
-3760 4073 l
-3761 4073 m
-3889 4073 l
-3889 4076 l
-3761 4076 l
-3762 4076 m
-3889 4076 l
-3889 4077 l
-3762 4077 l
-3762 4077 m
-3890 4077 l
-3890 4079 l
-3762 4079 l
-3763 4079 m
-3890 4079 l
-3890 4080 l
-3763 4080 l
-3763 4080 m
-3891 4080 l
-3891 4083 l
-3763 4083 l
-3764 4083 m
-3892 4083 l
-3892 4086 l
-3764 4086 l
-3765 4086 m
-3892 4086 l
-3892 4087 l
-3765 4087 l
-3765 4087 m
-3893 4087 l
-3893 4089 l
-3765 4089 l
-3766 4089 m
-3893 4089 l
-3893 4090 l
-3766 4090 l
-3766 4090 m
-3894 4090 l
-3894 4093 l
-3766 4093 l
-3767 4093 m
-3895 4093 l
-3895 4096 l
-3767 4096 l
-3768 4096 m
-3895 4096 l
-3895 4097 l
-3768 4097 l
-3768 4097 m
-3896 4097 l
-3896 4099 l
-3768 4099 l
-3769 4099 m
-3896 4099 l
-3896 4100 l
-3769 4100 l
-3769 4100 m
-3897 4100 l
-3897 4103 l
-3769 4103 l
-3770 4103 m
-3897 4103 l
-3897 4104 l
-3770 4104 l
-3770 4104 m
-3897 4104 l
-3897 4105 l
-3770 4105 l
-3770 4105 m
-3894 4105 l
-3894 4106 l
-3770 4106 l
-3771 4106 m
-3891 4106 l
-3891 4107 l
-3771 4107 l
-3771 4107 m
-3888 4107 l
-3888 4108 l
-3771 4108 l
-3771 4108 m
-3884 4108 l
-3884 4109 l
-3771 4109 l
-3772 4109 m
-3881 4109 l
-3881 4110 l
-3772 4110 l
-3772 4110 m
-3878 4110 l
-3878 4111 l
-3772 4111 l
-3772 4111 m
-3874 4111 l
-3874 4112 l
-3772 4112 l
-3772 4112 m
-3871 4112 l
-3871 4113 l
-3772 4113 l
-3773 4113 m
-3868 4113 l
-3868 4114 l
-3773 4114 l
-3773 4114 m
-3864 4114 l
-3864 4115 l
-3773 4115 l
-3773 4115 m
-3861 4115 l
-3861 4116 l
-3773 4116 l
-3774 4116 m
-3858 4116 l
-3858 4117 l
-3774 4117 l
-3774 4117 m
-3854 4117 l
-3854 4118 l
-3774 4118 l
-3774 4118 m
-3851 4118 l
-3851 4119 l
-3774 4119 l
-3775 4119 m
-3848 4119 l
-3848 4120 l
-3775 4120 l
-3775 4120 m
-3844 4120 l
-3844 4121 l
-3775 4121 l
-3775 4121 m
-3841 4121 l
-3841 4122 l
-3775 4122 l
-3775 4122 m
-3838 4122 l
-3838 4123 l
-3775 4123 l
-3776 4123 m
-3835 4123 l
-3835 4124 l
-3776 4124 l
-3776 4124 m
-3831 4124 l
-3831 4125 l
-3776 4125 l
-3776 4125 m
-3828 4125 l
-3828 4126 l
-3776 4126 l
-3777 4126 m
-3825 4126 l
-3825 4127 l
-3777 4127 l
-3777 4127 m
-3821 4127 l
-3821 4128 l
-3777 4128 l
-3777 4128 m
-3818 4128 l
-3818 4129 l
-3777 4129 l
-3778 4129 m
-3815 4129 l
-3815 4130 l
-3778 4130 l
-3778 4130 m
-3811 4130 l
-3811 4131 l
-3778 4131 l
-3778 4131 m
-3808 4131 l
-3808 4132 l
-3778 4132 l
-3778 4132 m
-3805 4132 l
-3805 4133 l
-3778 4133 l
-3779 4133 m
-3801 4133 l
-3801 4134 l
-3779 4134 l
-3779 4134 m
-3798 4134 l
-3798 4135 l
-3779 4135 l
-3779 4135 m
-3795 4135 l
-3795 4136 l
-3779 4136 l
-3780 4136 m
-3791 4136 l
-3791 4137 l
-3780 4137 l
-3780 4137 m
-3788 4137 l
-3788 4138 l
-3780 4138 l
-3780 4138 m
-3785 4138 l
-3785 4139 l
-3780 4139 l
-Y
-3814.4 3827.7 m
-3698 3862 l
-3781 4139 l
-3897 4104 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3768 3863 m
-3790 3935 l
-S
-3753 3986 m
-3766 4030 l
-3791 3996 l
-3794 4008 l
-3801 4015 l
-3806 4018 l
-3819 4018 l
-3827 4016 l
-3838 4008 l
-3843 3998 l
-3844 3985 l
-3840 3973 l
-3833 3962 l
-3827 3959 l
-3818 3957 l
-S
-3781 4082 m
-3782 4069 l
-3791 4057 l
-3810 4047 l
-3822 4043 l
-3843 4041 l
-3858 4046 l
-3865 4057 l
-3868 4065 l
-3867 4078 l
-3858 4089 l
-3839 4099 l
-3827 4103 l
-3806 4105 l
-3791 4101 l
-3784 4090 l
-3781 4082 l
-S
-1 g
-3582 5053 m
-3585 5053 l
-3585 5054 l
-3582 5054 l
-3581 5054 m
-3586 5054 l
-3586 5055 l
-3581 5055 l
-3580 5055 m
-3587 5055 l
-3587 5056 l
-3580 5056 l
-3579 5056 m
-3588 5056 l
-3588 5057 l
-3579 5057 l
-3578 5057 m
-3590 5057 l
-3590 5058 l
-3578 5058 l
-3578 5058 m
-3591 5058 l
-3591 5059 l
-3578 5059 l
-3577 5059 m
-3592 5059 l
-3592 5060 l
-3577 5060 l
-3576 5060 m
-3593 5060 l
-3593 5061 l
-3576 5061 l
-3575 5061 m
-3594 5061 l
-3594 5062 l
-3575 5062 l
-3574 5062 m
-3596 5062 l
-3596 5063 l
-3574 5063 l
-3573 5063 m
-3597 5063 l
-3597 5064 l
-3573 5064 l
-3573 5064 m
-3598 5064 l
-3598 5065 l
-3573 5065 l
-3572 5065 m
-3599 5065 l
-3599 5066 l
-3572 5066 l
-3571 5066 m
-3600 5066 l
-3600 5067 l
-3571 5067 l
-3570 5067 m
-3602 5067 l
-3602 5068 l
-3570 5068 l
-3569 5068 m
-3603 5068 l
-3603 5069 l
-3569 5069 l
-3568 5069 m
-3604 5069 l
-3604 5070 l
-3568 5070 l
-3568 5070 m
-3605 5070 l
-3605 5071 l
-3568 5071 l
-3567 5071 m
-3607 5071 l
-3607 5072 l
-3567 5072 l
-3566 5072 m
-3608 5072 l
-3608 5073 l
-3566 5073 l
-3565 5073 m
-3609 5073 l
-3609 5074 l
-3565 5074 l
-3564 5074 m
-3610 5074 l
-3610 5075 l
-3564 5075 l
-3563 5075 m
-3611 5075 l
-3611 5076 l
-3563 5076 l
-3563 5076 m
-3613 5076 l
-3613 5077 l
-3563 5077 l
-3562 5077 m
-3614 5077 l
-3614 5078 l
-3562 5078 l
-3561 5078 m
-3615 5078 l
-3615 5079 l
-3561 5079 l
-3560 5079 m
-3616 5079 l
-3616 5080 l
-3560 5080 l
-3559 5080 m
-3617 5080 l
-3617 5081 l
-3559 5081 l
-3558 5081 m
-3619 5081 l
-3619 5082 l
-3558 5082 l
-3558 5082 m
-3620 5082 l
-3620 5083 l
-3558 5083 l
-3557 5083 m
-3621 5083 l
-3621 5084 l
-3557 5084 l
-3556 5084 m
-3622 5084 l
-3622 5085 l
-3556 5085 l
-3555 5085 m
-3624 5085 l
-3624 5086 l
-3555 5086 l
-3554 5086 m
-3625 5086 l
-3625 5087 l
-3554 5087 l
-3553 5087 m
-3626 5087 l
-3626 5088 l
-3553 5088 l
-3553 5088 m
-3627 5088 l
-3627 5089 l
-3553 5089 l
-3552 5089 m
-3628 5089 l
-3628 5090 l
-3552 5090 l
-3551 5090 m
-3630 5090 l
-3630 5091 l
-3551 5091 l
-3550 5091 m
-3631 5091 l
-3631 5092 l
-3550 5092 l
-3549 5092 m
-3632 5092 l
-3632 5093 l
-3549 5093 l
-3548 5093 m
-3633 5093 l
-3633 5094 l
-3548 5094 l
-3548 5094 m
-3634 5094 l
-3634 5095 l
-3548 5095 l
-3547 5095 m
-3636 5095 l
-3636 5096 l
-3547 5096 l
-3546 5096 m
-3637 5096 l
-3637 5097 l
-3546 5097 l
-3545 5097 m
-3638 5097 l
-3638 5098 l
-3545 5098 l
-3544 5098 m
-3639 5098 l
-3639 5099 l
-3544 5099 l
-3544 5099 m
-3641 5099 l
-3641 5100 l
-3544 5100 l
-3543 5100 m
-3642 5100 l
-3642 5101 l
-3543 5101 l
-3542 5101 m
-3643 5101 l
-3643 5102 l
-3542 5102 l
-3541 5102 m
-3644 5102 l
-3644 5103 l
-3541 5103 l
-3540 5103 m
-3645 5103 l
-3645 5104 l
-3540 5104 l
-3539 5104 m
-3647 5104 l
-3647 5105 l
-3539 5105 l
-3539 5105 m
-3648 5105 l
-3648 5106 l
-3539 5106 l
-3538 5106 m
-3649 5106 l
-3649 5107 l
-3538 5107 l
-3537 5107 m
-3650 5107 l
-3650 5108 l
-3537 5108 l
-3536 5108 m
-3651 5108 l
-3651 5109 l
-3536 5109 l
-3535 5109 m
-3653 5109 l
-3653 5110 l
-3535 5110 l
-3534 5110 m
-3654 5110 l
-3654 5111 l
-3534 5111 l
-3534 5111 m
-3655 5111 l
-3655 5112 l
-3534 5112 l
-3533 5112 m
-3656 5112 l
-3656 5113 l
-3533 5113 l
-3532 5113 m
-3658 5113 l
-3658 5114 l
-3532 5114 l
-3531 5114 m
-3659 5114 l
-3659 5115 l
-3531 5115 l
-3530 5115 m
-3660 5115 l
-3660 5116 l
-3530 5116 l
-3529 5116 m
-3661 5116 l
-3661 5117 l
-3529 5117 l
-3529 5117 m
-3662 5117 l
-3662 5118 l
-3529 5118 l
-3528 5118 m
-3664 5118 l
-3664 5119 l
-3528 5119 l
-3527 5119 m
-3665 5119 l
-3665 5120 l
-3527 5120 l
-3526 5120 m
-3666 5120 l
-3666 5121 l
-3526 5121 l
-3525 5121 m
-3667 5121 l
-3667 5122 l
-3525 5122 l
-3524 5122 m
-3668 5122 l
-3668 5123 l
-3524 5123 l
-3524 5123 m
-3670 5123 l
-3670 5124 l
-3524 5124 l
-3523 5124 m
-3671 5124 l
-3671 5125 l
-3523 5125 l
-3522 5125 m
-3672 5125 l
-3672 5126 l
-3522 5126 l
-3521 5126 m
-3673 5126 l
-3673 5127 l
-3521 5127 l
-3520 5127 m
-3675 5127 l
-3675 5128 l
-3520 5128 l
-3519 5128 m
-3676 5128 l
-3676 5129 l
-3519 5129 l
-3519 5129 m
-3677 5129 l
-3677 5130 l
-3519 5130 l
-3518 5130 m
-3677 5130 l
-3677 5131 l
-3518 5131 l
-3517 5131 m
-3676 5131 l
-3676 5132 l
-3517 5132 l
-3516 5132 m
-3676 5132 l
-3676 5133 l
-3516 5133 l
-3515 5133 m
-3675 5133 l
-3675 5134 l
-3515 5134 l
-3514 5134 m
-3674 5134 l
-3674 5135 l
-3514 5135 l
-3514 5135 m
-3673 5135 l
-3673 5136 l
-3514 5136 l
-3513 5136 m
-3672 5136 l
-3672 5137 l
-3513 5137 l
-3512 5137 m
-3671 5137 l
-3671 5138 l
-3512 5138 l
-3511 5138 m
-3671 5138 l
-3671 5139 l
-3511 5139 l
-3510 5139 m
-3670 5139 l
-3670 5140 l
-3510 5140 l
-3509 5140 m
-3669 5140 l
-3669 5141 l
-3509 5141 l
-3509 5141 m
-3668 5141 l
-3668 5142 l
-3509 5142 l
-3508 5142 m
-3667 5142 l
-3667 5143 l
-3508 5143 l
-3507 5143 m
-3666 5143 l
-3666 5144 l
-3507 5144 l
-3506 5144 m
-3666 5144 l
-3666 5145 l
-3506 5145 l
-3505 5145 m
-3665 5145 l
-3665 5146 l
-3505 5146 l
-3505 5146 m
-3664 5146 l
-3664 5147 l
-3505 5147 l
-3504 5147 m
-3663 5147 l
-3663 5148 l
-3504 5148 l
-3503 5148 m
-3662 5148 l
-3662 5149 l
-3503 5149 l
-3502 5149 m
-3661 5149 l
-3661 5150 l
-3502 5150 l
-3501 5150 m
-3661 5150 l
-3661 5151 l
-3501 5151 l
-3500 5151 m
-3660 5151 l
-3660 5152 l
-3500 5152 l
-3500 5152 m
-3659 5152 l
-3659 5153 l
-3500 5153 l
-3499 5153 m
-3658 5153 l
-3658 5154 l
-3499 5154 l
-3498 5154 m
-3657 5154 l
-3657 5155 l
-3498 5155 l
-3497 5155 m
-3656 5155 l
-3656 5156 l
-3497 5156 l
-3496 5156 m
-3656 5156 l
-3656 5157 l
-3496 5157 l
-3495 5157 m
-3655 5157 l
-3655 5158 l
-3495 5158 l
-3495 5158 m
-3654 5158 l
-3654 5159 l
-3495 5159 l
-3494 5159 m
-3653 5159 l
-3653 5160 l
-3494 5160 l
-3493 5160 m
-3652 5160 l
-3652 5161 l
-3493 5161 l
-3492 5161 m
-3651 5161 l
-3651 5162 l
-3492 5162 l
-3491 5162 m
-3651 5162 l
-3651 5163 l
-3491 5163 l
-3490 5163 m
-3650 5163 l
-3650 5164 l
-3490 5164 l
-3490 5164 m
-3649 5164 l
-3649 5165 l
-3490 5165 l
-3489 5165 m
-3648 5165 l
-3648 5166 l
-3489 5166 l
-3488 5166 m
-3647 5166 l
-3647 5167 l
-3488 5167 l
-3487 5167 m
-3647 5167 l
-3647 5168 l
-3487 5168 l
-3486 5168 m
-3646 5168 l
-3646 5169 l
-3486 5169 l
-3485 5169 m
-3645 5169 l
-3645 5170 l
-3485 5170 l
-3485 5170 m
-3644 5170 l
-3644 5171 l
-3485 5171 l
-3484 5171 m
-3643 5171 l
-3643 5172 l
-3484 5172 l
-3483 5172 m
-3642 5172 l
-3642 5173 l
-3483 5173 l
-3482 5173 m
-3642 5173 l
-3642 5174 l
-3482 5174 l
-3481 5174 m
-3641 5174 l
-3641 5175 l
-3481 5175 l
-3480 5175 m
-3640 5175 l
-3640 5176 l
-3480 5176 l
-3480 5176 m
-3639 5176 l
-3639 5177 l
-3480 5177 l
-3479 5177 m
-3638 5177 l
-3638 5178 l
-3479 5178 l
-3478 5178 m
-3637 5178 l
-3637 5179 l
-3478 5179 l
-3477 5179 m
-3637 5179 l
-3637 5180 l
-3477 5180 l
-3476 5180 m
-3636 5180 l
-3636 5181 l
-3476 5181 l
-3475 5181 m
-3635 5181 l
-3635 5182 l
-3475 5182 l
-3475 5182 m
-3634 5182 l
-3634 5183 l
-3475 5183 l
-3474 5183 m
-3633 5183 l
-3633 5184 l
-3474 5184 l
-3473 5184 m
-3632 5184 l
-3632 5185 l
-3473 5185 l
-3472 5185 m
-3632 5185 l
-3632 5186 l
-3472 5186 l
-3471 5186 m
-3631 5186 l
-3631 5187 l
-3471 5187 l
-3470 5187 m
-3630 5187 l
-3630 5188 l
-3470 5188 l
-3470 5188 m
-3629 5188 l
-3629 5189 l
-3470 5189 l
-3469 5189 m
-3628 5189 l
-3628 5190 l
-3469 5190 l
-3468 5190 m
-3627 5190 l
-3627 5191 l
-3468 5191 l
-3467 5191 m
-3627 5191 l
-3627 5192 l
-3467 5192 l
-3466 5192 m
-3626 5192 l
-3626 5193 l
-3466 5193 l
-3466 5193 m
-3625 5193 l
-3625 5194 l
-3466 5194 l
-3466 5194 m
-3624 5194 l
-3624 5195 l
-3466 5195 l
-3467 5195 m
-3623 5195 l
-3623 5196 l
-3467 5196 l
-3468 5196 m
-3622 5196 l
-3622 5197 l
-3468 5197 l
-3469 5197 m
-3622 5197 l
-3622 5198 l
-3469 5198 l
-3470 5198 m
-3621 5198 l
-3621 5199 l
-3470 5199 l
-3471 5199 m
-3620 5199 l
-3620 5200 l
-3471 5200 l
-3473 5200 m
-3619 5200 l
-3619 5201 l
-3473 5201 l
-3474 5201 m
-3618 5201 l
-3618 5202 l
-3474 5202 l
-3475 5202 m
-3618 5202 l
-3618 5203 l
-3475 5203 l
-3476 5203 m
-3617 5203 l
-3617 5204 l
-3476 5204 l
-3477 5204 m
-3616 5204 l
-3616 5205 l
-3477 5205 l
-3479 5205 m
-3615 5205 l
-3615 5206 l
-3479 5206 l
-3480 5206 m
-3614 5206 l
-3614 5207 l
-3480 5207 l
-3481 5207 m
-3613 5207 l
-3613 5208 l
-3481 5208 l
-3482 5208 m
-3613 5208 l
-3613 5209 l
-3482 5209 l
-3483 5209 m
-3612 5209 l
-3612 5210 l
-3483 5210 l
-3485 5210 m
-3611 5210 l
-3611 5211 l
-3485 5211 l
-3486 5211 m
-3610 5211 l
-3610 5212 l
-3486 5212 l
-3487 5212 m
-3609 5212 l
-3609 5213 l
-3487 5213 l
-3488 5213 m
-3608 5213 l
-3608 5214 l
-3488 5214 l
-3489 5214 m
-3608 5214 l
-3608 5215 l
-3489 5215 l
-3491 5215 m
-3607 5215 l
-3607 5216 l
-3491 5216 l
-3492 5216 m
-3606 5216 l
-3606 5217 l
-3492 5217 l
-3493 5217 m
-3605 5217 l
-3605 5218 l
-3493 5218 l
-3494 5218 m
-3604 5218 l
-3604 5219 l
-3494 5219 l
-3495 5219 m
-3603 5219 l
-3603 5220 l
-3495 5220 l
-3496 5220 m
-3603 5220 l
-3603 5221 l
-3496 5221 l
-3498 5221 m
-3602 5221 l
-3602 5222 l
-3498 5222 l
-3499 5222 m
-3601 5222 l
-3601 5223 l
-3499 5223 l
-3500 5223 m
-3600 5223 l
-3600 5224 l
-3500 5224 l
-3501 5224 m
-3599 5224 l
-3599 5225 l
-3501 5225 l
-3502 5225 m
-3598 5225 l
-3598 5226 l
-3502 5226 l
-3504 5226 m
-3598 5226 l
-3598 5227 l
-3504 5227 l
-3505 5227 m
-3597 5227 l
-3597 5228 l
-3505 5228 l
-3506 5228 m
-3596 5228 l
-3596 5229 l
-3506 5229 l
-3507 5229 m
-3595 5229 l
-3595 5230 l
-3507 5230 l
-3508 5230 m
-3594 5230 l
-3594 5231 l
-3508 5231 l
-3510 5231 m
-3593 5231 l
-3593 5232 l
-3510 5232 l
-3511 5232 m
-3593 5232 l
-3593 5233 l
-3511 5233 l
-3512 5233 m
-3592 5233 l
-3592 5234 l
-3512 5234 l
-3513 5234 m
-3591 5234 l
-3591 5235 l
-3513 5235 l
-3514 5235 m
-3590 5235 l
-3590 5236 l
-3514 5236 l
-3516 5236 m
-3589 5236 l
-3589 5237 l
-3516 5237 l
-3517 5237 m
-3589 5237 l
-3589 5238 l
-3517 5238 l
-3518 5238 m
-3588 5238 l
-3588 5239 l
-3518 5239 l
-3519 5239 m
-3587 5239 l
-3587 5240 l
-3519 5240 l
-3520 5240 m
-3586 5240 l
-3586 5241 l
-3520 5241 l
-3522 5241 m
-3585 5241 l
-3585 5242 l
-3522 5242 l
-3523 5242 m
-3584 5242 l
-3584 5243 l
-3523 5243 l
-3524 5243 m
-3584 5243 l
-3584 5244 l
-3524 5244 l
-3525 5244 m
-3583 5244 l
-3583 5245 l
-3525 5245 l
-3526 5245 m
-3582 5245 l
-3582 5246 l
-3526 5246 l
-3527 5246 m
-3581 5246 l
-3581 5247 l
-3527 5247 l
-3529 5247 m
-3580 5247 l
-3580 5248 l
-3529 5248 l
-3530 5248 m
-3579 5248 l
-3579 5249 l
-3530 5249 l
-3531 5249 m
-3579 5249 l
-3579 5250 l
-3531 5250 l
-3532 5250 m
-3578 5250 l
-3578 5251 l
-3532 5251 l
-3533 5251 m
-3577 5251 l
-3577 5252 l
-3533 5252 l
-3535 5252 m
-3576 5252 l
-3576 5253 l
-3535 5253 l
-3536 5253 m
-3575 5253 l
-3575 5254 l
-3536 5254 l
-3537 5254 m
-3574 5254 l
-3574 5255 l
-3537 5255 l
-3538 5255 m
-3574 5255 l
-3574 5256 l
-3538 5256 l
-3539 5256 m
-3573 5256 l
-3573 5257 l
-3539 5257 l
-3541 5257 m
-3572 5257 l
-3572 5258 l
-3541 5258 l
-3542 5258 m
-3571 5258 l
-3571 5259 l
-3542 5259 l
-3543 5259 m
-3570 5259 l
-3570 5260 l
-3543 5260 l
-3544 5260 m
-3569 5260 l
-3569 5261 l
-3544 5261 l
-3545 5261 m
-3569 5261 l
-3569 5262 l
-3545 5262 l
-3547 5262 m
-3568 5262 l
-3568 5263 l
-3547 5263 l
-3548 5263 m
-3567 5263 l
-3567 5264 l
-3548 5264 l
-3549 5264 m
-3566 5264 l
-3566 5265 l
-3549 5265 l
-3550 5265 m
-3565 5265 l
-3565 5266 l
-3550 5266 l
-3551 5266 m
-3564 5266 l
-3564 5267 l
-3551 5267 l
-3553 5267 m
-3564 5267 l
-3564 5268 l
-3553 5268 l
-3554 5268 m
-3563 5268 l
-3563 5269 l
-3554 5269 l
-3555 5269 m
-3562 5269 l
-3562 5270 l
-3555 5270 l
-3556 5270 m
-3561 5270 l
-3561 5271 l
-3556 5271 l
-3557 5271 m
-3560 5271 l
-3560 5272 l
-3557 5272 l
-Y
-3676.6 5130.1 m
-3583 5053 l
-3466 5194 l
-3559 5272 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3578 5086 m
-3548 5121 l
-3590 5123 l
-3582 5133 l
-3580 5142 l
-3580 5148 l
-3587 5159 l
-3594 5165 l
-3606 5169 l
-3618 5168 l
-3629 5161 l
-3637 5152 l
-3642 5139 l
-3641 5133 l
-3638 5125 l
-S
-3514 5163 m
-3525 5156 l
-3540 5158 l
-3559 5168 l
-3568 5176 l
-3582 5192 l
-3586 5207 l
-3581 5219 l
-3576 5226 l
-3565 5233 l
-3550 5231 l
-3531 5221 l
-3521 5213 l
-3508 5196 l
-3504 5182 l
-3508 5170 l
-3514 5163 l
-S
-1 g
-2996 5490 m
-3001 5490 l
-3001 5491 l
-2996 5491 l
-2992 5491 m
-3001 5491 l
-3001 5492 l
-2992 5492 l
-2989 5492 m
-3001 5492 l
-3001 5493 l
-2989 5493 l
-2985 5493 m
-3002 5493 l
-3002 5494 l
-2985 5494 l
-2982 5494 m
-3002 5494 l
-3002 5495 l
-2982 5495 l
-2978 5495 m
-3002 5495 l
-3002 5496 l
-2978 5496 l
-2975 5496 m
-3002 5496 l
-3002 5497 l
-2975 5497 l
-2971 5497 m
-3003 5497 l
-3003 5498 l
-2971 5498 l
-2968 5498 m
-3003 5498 l
-3003 5499 l
-2968 5499 l
-2964 5499 m
-3003 5499 l
-3003 5500 l
-2964 5500 l
-2961 5500 m
-3004 5500 l
-3004 5501 l
-2961 5501 l
-2957 5501 m
-3004 5501 l
-3004 5502 l
-2957 5502 l
-2954 5502 m
-3004 5502 l
-3004 5503 l
-2954 5503 l
-2950 5503 m
-3004 5503 l
-3004 5504 l
-2950 5504 l
-2947 5504 m
-3005 5504 l
-3005 5505 l
-2947 5505 l
-2943 5505 m
-3005 5505 l
-3005 5506 l
-2943 5506 l
-2939 5506 m
-3005 5506 l
-3005 5507 l
-2939 5507 l
-2936 5507 m
-3006 5507 l
-3006 5508 l
-2936 5508 l
-2932 5508 m
-3006 5508 l
-3006 5509 l
-2932 5509 l
-2929 5509 m
-3006 5509 l
-3006 5510 l
-2929 5510 l
-2925 5510 m
-3006 5510 l
-3006 5511 l
-2925 5511 l
-2922 5511 m
-3007 5511 l
-3007 5512 l
-2922 5512 l
-2918 5512 m
-3007 5512 l
-3007 5513 l
-2918 5513 l
-2915 5513 m
-3007 5513 l
-3007 5514 l
-2915 5514 l
-2911 5514 m
-3008 5514 l
-3008 5515 l
-2911 5515 l
-2908 5515 m
-3008 5515 l
-3008 5516 l
-2908 5516 l
-2904 5516 m
-3008 5516 l
-3008 5517 l
-2904 5517 l
-2901 5517 m
-3008 5517 l
-3008 5518 l
-2901 5518 l
-2897 5518 m
-3009 5518 l
-3009 5519 l
-2897 5519 l
-2894 5519 m
-3009 5519 l
-3009 5520 l
-2894 5520 l
-2890 5520 m
-3009 5520 l
-3009 5521 l
-2890 5521 l
-2887 5521 m
-3010 5521 l
-3010 5522 l
-2887 5522 l
-2883 5522 m
-3010 5522 l
-3010 5523 l
-2883 5523 l
-2879 5523 m
-3010 5523 l
-3010 5524 l
-2879 5524 l
-2876 5524 m
-3010 5524 l
-3010 5525 l
-2876 5525 l
-2872 5525 m
-3011 5525 l
-3011 5526 l
-2872 5526 l
-2869 5526 m
-3011 5526 l
-3011 5527 l
-2869 5527 l
-2865 5527 m
-3011 5527 l
-3011 5528 l
-2865 5528 l
-2862 5528 m
-3012 5528 l
-3012 5529 l
-2862 5529 l
-2858 5529 m
-3012 5529 l
-3012 5530 l
-2858 5530 l
-2855 5530 m
-3012 5530 l
-3012 5531 l
-2855 5531 l
-2851 5531 m
-3012 5531 l
-3012 5532 l
-2851 5532 l
-2848 5532 m
-3013 5532 l
-3013 5533 l
-2848 5533 l
-2844 5533 m
-3013 5533 l
-3013 5534 l
-2844 5534 l
-2841 5534 m
-3013 5534 l
-3013 5535 l
-2841 5535 l
-2837 5535 m
-3014 5535 l
-3014 5536 l
-2837 5536 l
-2834 5536 m
-3014 5536 l
-3014 5537 l
-2834 5537 l
-2830 5537 m
-3014 5537 l
-3014 5538 l
-2830 5538 l
-2827 5538 m
-3014 5538 l
-3014 5539 l
-2827 5539 l
-2827 5539 m
-3015 5539 l
-3015 5540 l
-2827 5540 l
-2827 5540 m
-3015 5540 l
-3015 5542 l
-2827 5542 l
-2827 5542 m
-3016 5542 l
-3016 5543 l
-2827 5543 l
-2828 5543 m
-3016 5543 l
-3016 5546 l
-2828 5546 l
-2828 5546 m
-3017 5546 l
-3017 5547 l
-2828 5547 l
-2829 5547 m
-3017 5547 l
-3017 5549 l
-2829 5549 l
-2829 5549 m
-3018 5549 l
-3018 5550 l
-2829 5550 l
-2830 5550 m
-3018 5550 l
-3018 5553 l
-2830 5553 l
-2830 5553 m
-3019 5553 l
-3019 5554 l
-2830 5554 l
-2831 5554 m
-3019 5554 l
-3019 5556 l
-2831 5556 l
-2831 5556 m
-3020 5556 l
-3020 5557 l
-2831 5557 l
-2832 5557 m
-3020 5557 l
-3020 5560 l
-2832 5560 l
-2832 5560 m
-3021 5560 l
-3021 5561 l
-2832 5561 l
-2833 5561 m
-3021 5561 l
-3021 5563 l
-2833 5563 l
-2833 5563 m
-3022 5563 l
-3022 5564 l
-2833 5564 l
-2834 5564 m
-3022 5564 l
-3022 5567 l
-2834 5567 l
-2834 5567 m
-3023 5567 l
-3023 5568 l
-2834 5568 l
-2835 5568 m
-3023 5568 l
-3023 5570 l
-2835 5570 l
-2835 5570 m
-3024 5570 l
-3024 5571 l
-2835 5571 l
-2836 5571 m
-3024 5571 l
-3024 5574 l
-2836 5574 l
-2836 5574 m
-3025 5574 l
-3025 5575 l
-2836 5575 l
-2837 5575 m
-3025 5575 l
-3025 5577 l
-2837 5577 l
-2837 5577 m
-3026 5577 l
-3026 5578 l
-2837 5578 l
-2838 5578 m
-3026 5578 l
-3026 5581 l
-2838 5581 l
-2838 5581 m
-3027 5581 l
-3027 5582 l
-2838 5582 l
-2839 5582 m
-3027 5582 l
-3027 5584 l
-2839 5584 l
-2839 5584 m
-3028 5584 l
-3028 5585 l
-2839 5585 l
-2840 5585 m
-3028 5585 l
-3028 5588 l
-2840 5588 l
-2840 5588 m
-3029 5588 l
-3029 5589 l
-2840 5589 l
-2841 5589 m
-3029 5589 l
-3029 5591 l
-2841 5591 l
-2841 5591 m
-3030 5591 l
-3030 5592 l
-2841 5592 l
-2842 5592 m
-3030 5592 l
-3030 5595 l
-2842 5595 l
-2842 5595 m
-3031 5595 l
-3031 5596 l
-2842 5596 l
-2843 5596 m
-3031 5596 l
-3031 5598 l
-2843 5598 l
-2843 5598 m
-3032 5598 l
-3032 5599 l
-2843 5599 l
-2844 5599 m
-3032 5599 l
-3032 5602 l
-2844 5602 l
-2844 5602 m
-3033 5602 l
-3033 5603 l
-2844 5603 l
-2845 5603 m
-3033 5603 l
-3033 5605 l
-2845 5605 l
-2845 5605 m
-3034 5605 l
-3034 5606 l
-2845 5606 l
-2846 5606 m
-3034 5606 l
-3034 5607 l
-2846 5607 l
-2846 5607 m
-3030 5607 l
-3030 5608 l
-2846 5608 l
-2846 5608 m
-3027 5608 l
-3027 5609 l
-2846 5609 l
-2846 5609 m
-3023 5609 l
-3023 5610 l
-2846 5610 l
-2847 5610 m
-3020 5610 l
-3020 5611 l
-2847 5611 l
-2847 5611 m
-3016 5611 l
-3016 5612 l
-2847 5612 l
-2847 5612 m
-3013 5612 l
-3013 5613 l
-2847 5613 l
-2848 5613 m
-3009 5613 l
-3009 5614 l
-2848 5614 l
-2848 5614 m
-3006 5614 l
-3006 5615 l
-2848 5615 l
-2848 5615 m
-3002 5615 l
-3002 5616 l
-2848 5616 l
-2848 5616 m
-2999 5616 l
-2999 5617 l
-2848 5617 l
-2849 5617 m
-2995 5617 l
-2995 5618 l
-2849 5618 l
-2849 5618 m
-2991 5618 l
-2991 5619 l
-2849 5619 l
-2849 5619 m
-2988 5619 l
-2988 5620 l
-2849 5620 l
-2850 5620 m
-2984 5620 l
-2984 5621 l
-2850 5621 l
-2850 5621 m
-2981 5621 l
-2981 5622 l
-2850 5622 l
-2850 5622 m
-2977 5622 l
-2977 5623 l
-2850 5623 l
-2850 5623 m
-2974 5623 l
-2974 5624 l
-2850 5624 l
-2851 5624 m
-2970 5624 l
-2970 5625 l
-2851 5625 l
-2851 5625 m
-2967 5625 l
-2967 5626 l
-2851 5626 l
-2851 5626 m
-2963 5626 l
-2963 5627 l
-2851 5627 l
-2852 5627 m
-2960 5627 l
-2960 5628 l
-2852 5628 l
-2852 5628 m
-2956 5628 l
-2956 5629 l
-2852 5629 l
-2852 5629 m
-2953 5629 l
-2953 5630 l
-2852 5630 l
-2852 5630 m
-2949 5630 l
-2949 5631 l
-2852 5631 l
-2853 5631 m
-2945 5631 l
-2945 5632 l
-2853 5632 l
-2853 5632 m
-2942 5632 l
-2942 5633 l
-2853 5633 l
-2853 5633 m
-2938 5633 l
-2938 5634 l
-2853 5634 l
-2854 5634 m
-2935 5634 l
-2935 5635 l
-2854 5635 l
-2854 5635 m
-2931 5635 l
-2931 5636 l
-2854 5636 l
-2854 5636 m
-2928 5636 l
-2928 5637 l
-2854 5637 l
-2854 5637 m
-2924 5637 l
-2924 5638 l
-2854 5638 l
-2855 5638 m
-2921 5638 l
-2921 5639 l
-2855 5639 l
-2855 5639 m
-2917 5639 l
-2917 5640 l
-2855 5640 l
-2855 5640 m
-2914 5640 l
-2914 5641 l
-2855 5641 l
-2856 5641 m
-2910 5641 l
-2910 5642 l
-2856 5642 l
-2856 5642 m
-2907 5642 l
-2907 5643 l
-2856 5643 l
-2856 5643 m
-2903 5643 l
-2903 5644 l
-2856 5644 l
-2856 5644 m
-2899 5644 l
-2899 5645 l
-2856 5645 l
-2857 5645 m
-2896 5645 l
-2896 5646 l
-2857 5646 l
-2857 5646 m
-2892 5646 l
-2892 5647 l
-2857 5647 l
-2857 5647 m
-2889 5647 l
-2889 5648 l
-2857 5648 l
-2858 5648 m
-2885 5648 l
-2885 5649 l
-2858 5649 l
-2858 5649 m
-2882 5649 l
-2882 5650 l
-2858 5650 l
-2858 5650 m
-2878 5650 l
-2878 5651 l
-2858 5651 l
-2858 5651 m
-2875 5651 l
-2875 5652 l
-2858 5652 l
-2859 5652 m
-2871 5652 l
-2871 5653 l
-2859 5653 l
-2859 5653 m
-2868 5653 l
-2868 5654 l
-2859 5654 l
-2859 5654 m
-2864 5654 l
-2864 5655 l
-2859 5655 l
-Y
-3033.1 5606.1 m
-3000 5490 l
-2827 5539 l
-2860 5655 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2940 5537 m
-2941 5528 l
-2952 5521 l
-2960 5518 l
-2973 5519 l
-2985 5529 l
-2995 5548 l
-3000 5568 l
-3001 5585 l
-2995 5595 l
-2984 5603 l
-2980 5604 l
-2967 5603 l
-2957 5597 l
-2949 5586 l
-2948 5582 l
-2949 5569 l
-2955 5559 l
-2965 5551 l
-2969 5550 l
-2983 5551 l
-2993 5557 l
-3000 5568 l
-S
-2884 5540 m
-2897 5541 l
-2909 5550 l
-2918 5569 l
-2922 5581 l
-2923 5603 l
-2919 5617 l
-2908 5624 l
-2900 5627 l
-2887 5626 l
-2875 5616 l
-2866 5597 l
-2862 5585 l
-2860 5564 l
-2865 5550 l
-2876 5542 l
-2884 5540 l
-S
-1 g
-1950 5410 m
-1955 5410 l
-1955 5411 l
-1950 5411 l
-1949 5411 m
-1957 5411 l
-1957 5412 l
-1949 5412 l
-1949 5412 m
-1960 5412 l
-1960 5413 l
-1949 5413 l
-1948 5413 m
-1962 5413 l
-1962 5414 l
-1948 5414 l
-1948 5414 m
-1965 5414 l
-1965 5415 l
-1948 5415 l
-1948 5415 m
-1967 5415 l
-1967 5416 l
-1948 5416 l
-1947 5416 m
-1970 5416 l
-1970 5417 l
-1947 5417 l
-1947 5417 m
-1972 5417 l
-1972 5418 l
-1947 5418 l
-1946 5418 m
-1975 5418 l
-1975 5419 l
-1946 5419 l
-1946 5419 m
-1977 5419 l
-1977 5420 l
-1946 5420 l
-1946 5420 m
-1980 5420 l
-1980 5421 l
-1946 5421 l
-1945 5421 m
-1982 5421 l
-1982 5422 l
-1945 5422 l
-1945 5422 m
-1985 5422 l
-1985 5423 l
-1945 5423 l
-1944 5423 m
-1987 5423 l
-1987 5424 l
-1944 5424 l
-1944 5424 m
-1990 5424 l
-1990 5425 l
-1944 5425 l
-1944 5425 m
-1992 5425 l
-1992 5426 l
-1944 5426 l
-1943 5426 m
-1995 5426 l
-1995 5427 l
-1943 5427 l
-1943 5427 m
-1997 5427 l
-1997 5428 l
-1943 5428 l
-1942 5428 m
-2000 5428 l
-2000 5429 l
-1942 5429 l
-1942 5429 m
-2002 5429 l
-2002 5430 l
-1942 5430 l
-1942 5430 m
-2004 5430 l
-2004 5431 l
-1942 5431 l
-1941 5431 m
-2007 5431 l
-2007 5432 l
-1941 5432 l
-1941 5432 m
-2009 5432 l
-2009 5433 l
-1941 5433 l
-1940 5433 m
-2012 5433 l
-2012 5434 l
-1940 5434 l
-1940 5434 m
-2014 5434 l
-2014 5435 l
-1940 5435 l
-1940 5435 m
-2017 5435 l
-2017 5436 l
-1940 5436 l
-1939 5436 m
-2019 5436 l
-2019 5437 l
-1939 5437 l
-1939 5437 m
-2022 5437 l
-2022 5438 l
-1939 5438 l
-1939 5438 m
-2024 5438 l
-2024 5439 l
-1939 5439 l
-1938 5439 m
-2027 5439 l
-2027 5440 l
-1938 5440 l
-1938 5440 m
-2029 5440 l
-2029 5441 l
-1938 5441 l
-1937 5441 m
-2032 5441 l
-2032 5442 l
-1937 5442 l
-1937 5442 m
-2034 5442 l
-2034 5443 l
-1937 5443 l
-1937 5443 m
-2037 5443 l
-2037 5444 l
-1937 5444 l
-1936 5444 m
-2039 5444 l
-2039 5445 l
-1936 5445 l
-1936 5445 m
-2042 5445 l
-2042 5446 l
-1936 5446 l
-1935 5446 m
-2044 5446 l
-2044 5447 l
-1935 5447 l
-1935 5447 m
-2047 5447 l
-2047 5448 l
-1935 5448 l
-1935 5448 m
-2049 5448 l
-2049 5449 l
-1935 5449 l
-1934 5449 m
-2052 5449 l
-2052 5450 l
-1934 5450 l
-1934 5450 m
-2054 5450 l
-2054 5451 l
-1934 5451 l
-1933 5451 m
-2057 5451 l
-2057 5452 l
-1933 5452 l
-1933 5452 m
-2059 5452 l
-2059 5453 l
-1933 5453 l
-1933 5453 m
-2062 5453 l
-2062 5454 l
-1933 5454 l
-1932 5454 m
-2064 5454 l
-2064 5455 l
-1932 5455 l
-1932 5455 m
-2067 5455 l
-2067 5456 l
-1932 5456 l
-1931 5456 m
-2069 5456 l
-2069 5457 l
-1931 5457 l
-1931 5457 m
-2072 5457 l
-2072 5458 l
-1931 5458 l
-1931 5458 m
-2074 5458 l
-2074 5459 l
-1931 5459 l
-1930 5459 m
-2077 5459 l
-2077 5460 l
-1930 5460 l
-1930 5460 m
-2079 5460 l
-2079 5461 l
-1930 5461 l
-1929 5461 m
-2082 5461 l
-2082 5462 l
-1929 5462 l
-1929 5462 m
-2084 5462 l
-2084 5463 l
-1929 5463 l
-1929 5463 m
-2087 5463 l
-2087 5464 l
-1929 5464 l
-1928 5464 m
-2089 5464 l
-2089 5465 l
-1928 5465 l
-1928 5465 m
-2092 5465 l
-2092 5466 l
-1928 5466 l
-1927 5466 m
-2094 5466 l
-2094 5467 l
-1927 5467 l
-1927 5467 m
-2097 5467 l
-2097 5468 l
-1927 5468 l
-1927 5468 m
-2099 5468 l
-2099 5469 l
-1927 5469 l
-1926 5469 m
-2102 5469 l
-2102 5470 l
-1926 5470 l
-1926 5470 m
-2104 5470 l
-2104 5471 l
-1926 5471 l
-1925 5471 m
-2107 5471 l
-2107 5472 l
-1925 5472 l
-1925 5472 m
-2109 5472 l
-2109 5473 l
-1925 5473 l
-1925 5473 m
-2112 5473 l
-2112 5474 l
-1925 5474 l
-1924 5474 m
-2114 5474 l
-2114 5475 l
-1924 5475 l
-1924 5475 m
-2117 5475 l
-2117 5476 l
-1924 5476 l
-1923 5476 m
-2119 5476 l
-2119 5477 l
-1923 5477 l
-1923 5477 m
-2122 5477 l
-2122 5478 l
-1923 5478 l
-1923 5478 m
-2121 5478 l
-2121 5479 l
-1923 5479 l
-1922 5479 m
-2121 5479 l
-2121 5481 l
-1922 5481 l
-1921 5481 m
-2120 5481 l
-2120 5483 l
-1921 5483 l
-1921 5483 m
-2119 5483 l
-2119 5484 l
-1921 5484 l
-1920 5484 m
-2119 5484 l
-2119 5486 l
-1920 5486 l
-1919 5486 m
-2118 5486 l
-2118 5488 l
-1919 5488 l
-1919 5488 m
-2117 5488 l
-2117 5489 l
-1919 5489 l
-1918 5489 m
-2117 5489 l
-2117 5491 l
-1918 5491 l
-1917 5491 m
-2116 5491 l
-2116 5493 l
-1917 5493 l
-1917 5493 m
-2115 5493 l
-2115 5494 l
-1917 5494 l
-1916 5494 m
-2115 5494 l
-2115 5496 l
-1916 5496 l
-1915 5496 m
-2114 5496 l
-2114 5498 l
-1915 5498 l
-1915 5498 m
-2113 5498 l
-2113 5499 l
-1915 5499 l
-1914 5499 m
-2113 5499 l
-2113 5501 l
-1914 5501 l
-1913 5501 m
-2112 5501 l
-2112 5503 l
-1913 5503 l
-1913 5503 m
-2111 5503 l
-2111 5504 l
-1913 5504 l
-1912 5504 m
-2111 5504 l
-2111 5506 l
-1912 5506 l
-1911 5506 m
-2110 5506 l
-2110 5508 l
-1911 5508 l
-1911 5508 m
-2109 5508 l
-2109 5509 l
-1911 5509 l
-1910 5509 m
-2109 5509 l
-2109 5511 l
-1910 5511 l
-1909 5511 m
-2108 5511 l
-2108 5513 l
-1909 5513 l
-1909 5513 m
-2107 5513 l
-2107 5514 l
-1909 5514 l
-1908 5514 m
-2107 5514 l
-2107 5516 l
-1908 5516 l
-1907 5516 m
-2106 5516 l
-2106 5518 l
-1907 5518 l
-1907 5518 m
-2105 5518 l
-2105 5519 l
-1907 5519 l
-1906 5519 m
-2105 5519 l
-2105 5521 l
-1906 5521 l
-1906 5521 m
-2104 5521 l
-2104 5522 l
-1906 5522 l
-1906 5522 m
-2104 5522 l
-2104 5523 l
-1906 5523 l
-1908 5523 m
-2103 5523 l
-2103 5524 l
-1908 5524 l
-1911 5524 m
-2103 5524 l
-2103 5525 l
-1911 5525 l
-1913 5525 m
-2103 5525 l
-2103 5526 l
-1913 5526 l
-1916 5526 m
-2102 5526 l
-2102 5527 l
-1916 5527 l
-1918 5527 m
-2102 5527 l
-2102 5528 l
-1918 5528 l
-1921 5528 m
-2101 5528 l
-2101 5529 l
-1921 5529 l
-1923 5529 m
-2101 5529 l
-2101 5530 l
-1923 5530 l
-1926 5530 m
-2101 5530 l
-2101 5531 l
-1926 5531 l
-1928 5531 m
-2100 5531 l
-2100 5532 l
-1928 5532 l
-1931 5532 m
-2100 5532 l
-2100 5533 l
-1931 5533 l
-1933 5533 m
-2099 5533 l
-2099 5534 l
-1933 5534 l
-1936 5534 m
-2099 5534 l
-2099 5535 l
-1936 5535 l
-1938 5535 m
-2099 5535 l
-2099 5536 l
-1938 5536 l
-1941 5536 m
-2098 5536 l
-2098 5537 l
-1941 5537 l
-1943 5537 m
-2098 5537 l
-2098 5538 l
-1943 5538 l
-1946 5538 m
-2097 5538 l
-2097 5539 l
-1946 5539 l
-1948 5539 m
-2097 5539 l
-2097 5540 l
-1948 5540 l
-1951 5540 m
-2097 5540 l
-2097 5541 l
-1951 5541 l
-1953 5541 m
-2096 5541 l
-2096 5542 l
-1953 5542 l
-1956 5542 m
-2096 5542 l
-2096 5543 l
-1956 5543 l
-1958 5543 m
-2095 5543 l
-2095 5544 l
-1958 5544 l
-1961 5544 m
-2095 5544 l
-2095 5545 l
-1961 5545 l
-1963 5545 m
-2095 5545 l
-2095 5546 l
-1963 5546 l
-1966 5546 m
-2094 5546 l
-2094 5547 l
-1966 5547 l
-1968 5547 m
-2094 5547 l
-2094 5548 l
-1968 5548 l
-1971 5548 m
-2093 5548 l
-2093 5549 l
-1971 5549 l
-1973 5549 m
-2093 5549 l
-2093 5550 l
-1973 5550 l
-1976 5550 m
-2093 5550 l
-2093 5551 l
-1976 5551 l
-1978 5551 m
-2092 5551 l
-2092 5552 l
-1978 5552 l
-1981 5552 m
-2092 5552 l
-2092 5553 l
-1981 5553 l
-1983 5553 m
-2091 5553 l
-2091 5554 l
-1983 5554 l
-1986 5554 m
-2091 5554 l
-2091 5555 l
-1986 5555 l
-1988 5555 m
-2091 5555 l
-2091 5556 l
-1988 5556 l
-1991 5556 m
-2090 5556 l
-2090 5557 l
-1991 5557 l
-1993 5557 m
-2090 5557 l
-2090 5558 l
-1993 5558 l
-1996 5558 m
-2089 5558 l
-2089 5559 l
-1996 5559 l
-1998 5559 m
-2089 5559 l
-2089 5560 l
-1998 5560 l
-2001 5560 m
-2089 5560 l
-2089 5561 l
-2001 5561 l
-2003 5561 m
-2088 5561 l
-2088 5562 l
-2003 5562 l
-2006 5562 m
-2088 5562 l
-2088 5563 l
-2006 5563 l
-2008 5563 m
-2087 5563 l
-2087 5564 l
-2008 5564 l
-2011 5564 m
-2087 5564 l
-2087 5565 l
-2011 5565 l
-2013 5565 m
-2087 5565 l
-2087 5566 l
-2013 5566 l
-2016 5566 m
-2086 5566 l
-2086 5567 l
-2016 5567 l
-2018 5567 m
-2086 5567 l
-2086 5568 l
-2018 5568 l
-2021 5568 m
-2085 5568 l
-2085 5569 l
-2021 5569 l
-2023 5569 m
-2085 5569 l
-2085 5570 l
-2023 5570 l
-2026 5570 m
-2085 5570 l
-2085 5571 l
-2026 5571 l
-2028 5571 m
-2084 5571 l
-2084 5572 l
-2028 5572 l
-2031 5572 m
-2084 5572 l
-2084 5573 l
-2031 5573 l
-2033 5573 m
-2083 5573 l
-2083 5574 l
-2033 5574 l
-2036 5574 m
-2083 5574 l
-2083 5575 l
-2036 5575 l
-2038 5575 m
-2083 5575 l
-2083 5576 l
-2038 5576 l
-2041 5576 m
-2082 5576 l
-2082 5577 l
-2041 5577 l
-2043 5577 m
-2082 5577 l
-2082 5578 l
-2043 5578 l
-2046 5578 m
-2081 5578 l
-2081 5579 l
-2046 5579 l
-2048 5579 m
-2081 5579 l
-2081 5580 l
-2048 5580 l
-2051 5580 m
-2081 5580 l
-2081 5581 l
-2051 5581 l
-2053 5581 m
-2080 5581 l
-2080 5582 l
-2053 5582 l
-2056 5582 m
-2080 5582 l
-2080 5583 l
-2056 5583 l
-2058 5583 m
-2079 5583 l
-2079 5584 l
-2058 5584 l
-2061 5584 m
-2079 5584 l
-2079 5585 l
-2061 5585 l
-2063 5585 m
-2079 5585 l
-2079 5586 l
-2063 5586 l
-2066 5586 m
-2078 5586 l
-2078 5587 l
-2066 5587 l
-2068 5587 m
-2078 5587 l
-2078 5588 l
-2068 5588 l
-2071 5588 m
-2077 5588 l
-2077 5589 l
-2071 5589 l
-2073 5589 m
-2077 5589 l
-2077 5590 l
-2073 5590 l
-Y
-1950.7 5409.6 m
-1906 5522 l
-2076 5590 l
-2121 5478 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1993 5507 m
-1993 5494 l
-1989 5483 l
-1979 5475 l
-1975 5473 l
-1962 5472 l
-1951 5477 l
-1942 5487 l
-1941 5491 l
-1940 5504 l
-1944 5515 l
-1955 5524 l
-1958 5525 l
-1972 5526 l
-1982 5521 l
-1993 5507 l
-2000 5488 l
-2004 5467 l
-2001 5452 l
-1991 5444 l
-1983 5441 l
-1970 5440 l
-1963 5446 l
-S
-2032 5555 m
-2022 5546 l
-2019 5531 l
-2023 5510 l
-2027 5499 l
-2039 5481 l
-2052 5472 l
-2065 5473 l
-2072 5476 l
-2083 5485 l
-2086 5500 l
-2082 5521 l
-2077 5532 l
-2065 5550 l
-2053 5559 l
-2040 5558 l
-2032 5555 l
-S
-1 g
-Y
-467.2 2211.2 m
-282 2211 l
-282 5715 l
-467 5715 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-307 2236 m
-412 2236 l
-S
-307 2236 m
-307 2301 l
-S
-357 2236 m
-357 2276 l
-S
-412 2236 m
-412 2301 l
-S
-357 2387 m
-347 2377 l
-342 2367 l
-342 2352 l
-347 2341 l
-357 2331 l
-372 2326 l
-382 2326 l
-397 2331 l
-407 2341 l
-412 2352 l
-412 2367 l
-407 2377 l
-397 2387 l
-S
-307 2422 m
-412 2422 l
-S
-307 2457 m
-312 2462 l
-307 2467 l
-302 2462 l
-307 2457 l
-S
-342 2462 m
-412 2462 l
-S
-342 2502 m
-447 2502 l
-S
-357 2502 m
-347 2512 l
-342 2522 l
-342 2537 l
-347 2547 l
-357 2557 l
-372 2562 l
-382 2562 l
-397 2557 l
-407 2547 l
-412 2537 l
-412 2522 l
-407 2512 l
-397 2502 l
-S
-307 2602 m
-392 2602 l
-407 2607 l
-412 2617 l
-412 2627 l
-S
-342 2587 m
-342 2622 l
-S
-307 2652 m
-312 2657 l
-307 2662 l
-302 2657 l
-307 2652 l
-S
-342 2657 m
-412 2657 l
-S
-357 2752 m
-347 2742 l
-342 2732 l
-342 2717 l
-347 2707 l
-357 2697 l
-372 2692 l
-382 2692 l
-397 2697 l
-407 2707 l
-412 2717 l
-412 2732 l
-407 2742 l
-397 2752 l
-S
-357 2923 m
-347 2913 l
-342 2903 l
-342 2888 l
-347 2878 l
-357 2868 l
-372 2863 l
-382 2863 l
-397 2868 l
-407 2878 l
-412 2888 l
-412 2903 l
-407 2913 l
-397 2923 l
-S
-342 2978 m
-347 2968 l
-357 2958 l
-372 2953 l
-382 2953 l
-397 2958 l
-407 2968 l
-412 2978 l
-412 2993 l
-407 3003 l
-397 3013 l
-382 3018 l
-372 3018 l
-357 3013 l
-347 3003 l
-342 2993 l
-342 2978 l
-S
-342 3073 m
-347 3063 l
-357 3053 l
-372 3048 l
-382 3048 l
-397 3053 l
-407 3063 l
-412 3073 l
-412 3088 l
-407 3098 l
-397 3108 l
-382 3113 l
-372 3113 l
-357 3108 l
-347 3098 l
-342 3088 l
-342 3073 l
-S
-342 3148 m
-412 3148 l
-S
-372 3148 m
-357 3153 l
-347 3163 l
-342 3174 l
-342 3189 l
-S
-307 3269 m
-412 3269 l
-S
-357 3269 m
-347 3259 l
-342 3249 l
-342 3234 l
-347 3224 l
-357 3214 l
-372 3209 l
-382 3209 l
-397 3214 l
-407 3224 l
-412 3234 l
-412 3249 l
-407 3259 l
-397 3269 l
-S
-307 3304 m
-312 3309 l
-307 3314 l
-302 3309 l
-307 3304 l
-S
-342 3309 m
-412 3309 l
-S
-342 3349 m
-412 3349 l
-S
-362 3349 m
-347 3364 l
-342 3374 l
-342 3389 l
-347 3399 l
-362 3404 l
-412 3404 l
-S
-342 3499 m
-412 3499 l
-S
-357 3499 m
-347 3489 l
-342 3479 l
-342 3464 l
-347 3454 l
-357 3444 l
-372 3439 l
-382 3439 l
-397 3444 l
-407 3454 l
-412 3464 l
-412 3479 l
-407 3489 l
-397 3499 l
-S
-307 3544 m
-392 3544 l
-407 3549 l
-412 3559 l
-412 3569 l
-S
-342 3529 m
-342 3564 l
-S
-372 3595 m
-372 3655 l
-362 3655 l
-352 3650 l
-347 3645 l
-342 3635 l
-342 3620 l
-347 3610 l
-357 3600 l
-372 3595 l
-382 3595 l
-397 3600 l
-407 3610 l
-412 3620 l
-412 3635 l
-407 3645 l
-397 3655 l
-S
-357 3740 m
-347 3735 l
-342 3720 l
-342 3705 l
-347 3690 l
-357 3685 l
-367 3690 l
-372 3700 l
-377 3725 l
-382 3735 l
-392 3740 l
-397 3740 l
-407 3735 l
-412 3720 l
-412 3705 l
-407 3690 l
-397 3685 l
-S
-342 3780 m
-347 3775 l
-352 3780 l
-347 3785 l
-342 3780 l
-S
-407 3785 m
-412 3780 l
-407 3775 l
-402 3780 l
-407 3785 l
-417 3785 l
-427 3780 l
-432 3775 l
-S
-342 3905 m
-412 3905 l
-S
-362 3905 m
-347 3920 l
-342 3930 l
-342 3945 l
-347 3955 l
-362 3960 l
-412 3960 l
-S
-362 3960 m
-347 3975 l
-342 3985 l
-342 4000 l
-347 4011 l
-362 4016 l
-412 4016 l
-S
-372 4051 m
-372 4111 l
-362 4111 l
-352 4106 l
-347 4101 l
-342 4091 l
-342 4076 l
-347 4066 l
-357 4056 l
-372 4051 l
-382 4051 l
-397 4056 l
-407 4066 l
-412 4076 l
-412 4091 l
-407 4101 l
-397 4111 l
-S
-342 4201 m
-412 4201 l
-S
-357 4201 m
-347 4191 l
-342 4181 l
-342 4166 l
-347 4156 l
-357 4146 l
-372 4141 l
-382 4141 l
-397 4146 l
-407 4156 l
-412 4166 l
-412 4181 l
-407 4191 l
-397 4201 l
-S
-342 4241 m
-412 4241 l
-S
-362 4241 m
-347 4256 l
-342 4266 l
-342 4281 l
-347 4291 l
-362 4296 l
-412 4296 l
-S
-372 4411 m
-372 4472 l
-362 4472 l
-352 4467 l
-347 4462 l
-342 4452 l
-342 4437 l
-347 4427 l
-357 4417 l
-372 4411 l
-382 4411 l
-397 4417 l
-407 4427 l
-412 4437 l
-412 4452 l
-407 4462 l
-397 4472 l
-S
-342 4562 m
-447 4562 l
-S
-357 4562 m
-347 4552 l
-342 4542 l
-342 4527 l
-347 4517 l
-357 4507 l
-372 4502 l
-382 4502 l
-397 4507 l
-407 4517 l
-412 4527 l
-412 4542 l
-407 4552 l
-397 4562 l
-S
-342 4602 m
-392 4602 l
-407 4607 l
-412 4617 l
-412 4632 l
-407 4642 l
-392 4657 l
-S
-342 4657 m
-412 4657 l
-S
-307 4692 m
-312 4697 l
-307 4702 l
-302 4697 l
-307 4692 l
-S
-342 4697 m
-412 4697 l
-S
-342 4737 m
-412 4737 l
-S
-362 4737 m
-347 4752 l
-342 4762 l
-342 4777 l
-347 4787 l
-362 4792 l
-412 4792 l
-S
-342 4853 m
-347 4843 l
-357 4833 l
-372 4827 l
-382 4827 l
-397 4833 l
-407 4843 l
-412 4853 l
-412 4868 l
-407 4878 l
-397 4888 l
-382 4893 l
-372 4893 l
-357 4888 l
-347 4878 l
-342 4868 l
-342 4853 l
-S
-342 4923 m
-412 4978 l
-S
-342 4978 m
-412 4923 l
-S
-307 5133 m
-387 5133 l
-402 5128 l
-407 5123 l
-412 5113 l
-412 5103 l
-407 5093 l
-402 5088 l
-387 5083 l
-377 5083 l
-S
-332 5173 m
-327 5173 l
-317 5178 l
-312 5183 l
-307 5193 l
-307 5213 l
-312 5223 l
-317 5228 l
-327 5233 l
-337 5233 l
-347 5228 l
-362 5218 l
-412 5168 l
-412 5238 l
-S
-307 5299 m
-312 5284 l
-327 5274 l
-352 5269 l
-367 5269 l
-392 5274 l
-407 5284 l
-412 5299 l
-412 5309 l
-407 5324 l
-392 5334 l
-367 5339 l
-352 5339 l
-327 5334 l
-312 5324 l
-307 5309 l
-307 5299 l
-S
-307 5399 m
-312 5384 l
-327 5374 l
-352 5369 l
-367 5369 l
-392 5374 l
-407 5384 l
-412 5399 l
-412 5409 l
-407 5424 l
-392 5434 l
-367 5439 l
-352 5439 l
-327 5434 l
-312 5424 l
-307 5409 l
-307 5399 l
-S
-307 5499 m
-312 5484 l
-327 5474 l
-352 5469 l
-367 5469 l
-392 5474 l
-407 5484 l
-412 5499 l
-412 5509 l
-407 5524 l
-392 5534 l
-367 5539 l
-352 5539 l
-327 5534 l
-312 5524 l
-307 5509 l
-307 5499 l
-S
-402 5579 m
-407 5574 l
-412 5579 l
-407 5584 l
-402 5579 l
-S
-307 5649 m
-312 5634 l
-327 5624 l
-352 5619 l
-367 5619 l
-392 5624 l
-407 5634 l
-412 5649 l
-412 5659 l
-407 5675 l
-392 5685 l
-367 5690 l
-352 5690 l
-327 5685 l
-312 5675 l
-307 5659 l
-307 5649 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 2527 3396 a
- currentpoint grestore moveto
- 2527 3396 a 2703 3396 a
- gsave currentpoint currentpoint translate -90 neg rotate neg exch neg exch translate
- 2703
-3396 a @beginspecial 22 @llx 206 @lly 490 @urx 605 @ury
-1170 @rwi @setspecial
-%%BeginDocument: sun210_figures/frontc_bw.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 22 206 490 605
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:48:46
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-4877 3093 m
-4662 3178 l
-4355 3300 l
-4048 3421 l
-3740 3543 l
-3433 3665 l
-3126 3786 l
-2819 3908 l
-2512 4029 l
-2205 4151 l
-2203 4152 l
-2202 4152 l
-2200 4153 l
-2199 4154 l
-2197 4154 l
-2195 4155 l
-2194 4155 l
-2192 4156 l
-2191 4157 l
-2189 4157 l
-2188 4158 l
-2186 4159 l
-2184 4159 l
-2183 4160 l
-2181 4160 l
-2180 4161 l
-2178 4162 l
-2177 4162 l
-2175 4163 l
-2173 4164 l
-2172 4164 l
-2170 4165 l
-2169 4165 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-4059 1777 m
-4039 1803 l
-3834 2062 l
-3628 2321 l
-3423 2580 l
-3218 2839 l
-3013 3098 l
-2808 3357 l
-2602 3616 l
-2397 3875 l
-2192 4134 l
-2191 4135 l
-2190 4137 l
-2189 4138 l
-2188 4139 l
-2187 4141 l
-2186 4142 l
-2185 4143 l
-2184 4145 l
-2183 4146 l
-2182 4147 l
-2181 4149 l
-2180 4150 l
-2178 4151 l
-2177 4152 l
-2176 4154 l
-2175 4155 l
-2174 4156 l
-2173 4158 l
-2172 4159 l
-2171 4160 l
-2170 4162 l
-2169 4163 l
-2168 4164 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-2519 1777 m
-2510 1837 l
-2462 2164 l
-2414 2491 l
-2365 2818 l
-2317 3145 l
-2269 3472 l
-2221 3799 l
-2172 4125 l
-2172 4127 l
-2172 4129 l
-2172 4130 l
-2171 4132 l
-2171 4134 l
-2171 4135 l
-2171 4137 l
-2171 4139 l
-2170 4140 l
-2170 4142 l
-2170 4144 l
-2170 4146 l
-2169 4147 l
-2169 4149 l
-2169 4151 l
-2169 4152 l
-2168 4154 l
-2168 4156 l
-2168 4157 l
-2168 4159 l
-2167 4161 l
-2167 4162 l
-2167 4164 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1221 1777 m
-1300 1977 l
-1422 2284 l
-1543 2591 l
-1665 2899 l
-1786 3206 l
-1908 3513 l
-2030 3821 l
-2151 4128 l
-2152 4130 l
-2152 4131 l
-2153 4133 l
-2154 4134 l
-2154 4136 l
-2155 4137 l
-2156 4139 l
-2156 4140 l
-2157 4142 l
-2157 4144 l
-2158 4145 l
-2159 4147 l
-2159 4148 l
-2160 4150 l
-2161 4151 l
-2161 4153 l
-2162 4155 l
-2162 4156 l
-2163 4158 l
-2164 4159 l
-2164 4161 l
-2165 4162 l
-2166 4164 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 2871 m
-581 2909 l
-840 3114 l
-1099 3319 l
-1357 3525 l
-1616 3730 l
-1875 3935 l
-2134 4141 l
-2135 4142 l
-2137 4143 l
-2138 4144 l
-2139 4145 l
-2141 4146 l
-2142 4147 l
-2143 4148 l
-2145 4149 l
-2146 4150 l
-2147 4151 l
-2149 4152 l
-2150 4153 l
-2151 4154 l
-2153 4155 l
-2154 4156 l
-2155 4157 l
-2157 4158 l
-2158 4160 l
-2159 4161 l
-2160 4162 l
-2162 4163 l
-2163 4164 l
-2164 4165 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 3925 m
-818 3967 l
-1145 4015 l
-1472 4064 l
-1799 4112 l
-2126 4160 l
-2127 4161 l
-2129 4161 l
-2131 4161 l
-2132 4161 l
-2134 4162 l
-2136 4162 l
-2137 4162 l
-2139 4162 l
-2141 4163 l
-2142 4163 l
-2144 4163 l
-2146 4163 l
-2147 4164 l
-2149 4164 l
-2151 4164 l
-2152 4164 l
-2154 4165 l
-2156 4165 l
-2157 4165 l
-2159 4165 l
-2161 4165 l
-2162 4166 l
-2164 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 4813 m
-592 4790 l
-900 4668 l
-1207 4547 l
-1514 4425 l
-1821 4303 l
-2128 4182 l
-2130 4181 l
-2131 4180 l
-2133 4180 l
-2134 4179 l
-2136 4178 l
-2137 4178 l
-2139 4177 l
-2141 4177 l
-2142 4176 l
-2144 4175 l
-2145 4175 l
-2147 4174 l
-2148 4173 l
-2150 4173 l
-2152 4172 l
-2153 4172 l
-2155 4171 l
-2156 4170 l
-2158 4170 l
-2159 4169 l
-2161 4169 l
-2163 4168 l
-2164 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-618 6121 m
-705 6012 l
-910 5753 l
-1115 5494 l
-1320 5235 l
-1525 4976 l
-1730 4717 l
-1936 4458 l
-2141 4199 l
-2142 4197 l
-2143 4196 l
-2144 4195 l
-2145 4193 l
-2146 4192 l
-2147 4191 l
-2148 4189 l
-2149 4188 l
-2150 4187 l
-2151 4186 l
-2152 4184 l
-2153 4183 l
-2154 4182 l
-2155 4180 l
-2156 4179 l
-2158 4178 l
-2159 4176 l
-2160 4175 l
-2161 4174 l
-2162 4172 l
-2163 4171 l
-2164 4170 l
-2165 4168 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-S
-1878 6121 m
-1919 5842 l
-1967 5515 l
-2016 5188 l
-2064 4861 l
-2112 4534 l
-2160 4207 l
-2161 4206 l
-2161 4204 l
-2161 4202 l
-2161 4201 l
-2162 4199 l
-2162 4197 l
-2162 4196 l
-2162 4194 l
-2163 4192 l
-2163 4191 l
-2163 4189 l
-2163 4187 l
-2164 4186 l
-2164 4184 l
-2164 4182 l
-2164 4181 l
-2165 4179 l
-2165 4177 l
-2165 4176 l
-2165 4174 l
-2166 4172 l
-2166 4171 l
-2166 4169 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-S
-2940 6121 m
-2911 6049 l
-2790 5741 l
-2668 5434 l
-2546 5127 l
-2425 4819 l
-2303 4512 l
-2182 4205 l
-2181 4203 l
-2180 4202 l
-2180 4200 l
-2179 4198 l
-2179 4197 l
-2178 4195 l
-2177 4194 l
-2177 4192 l
-2176 4191 l
-2175 4189 l
-2175 4188 l
-2174 4186 l
-2174 4184 l
-2173 4183 l
-2172 4181 l
-2172 4180 l
-2171 4178 l
-2170 4177 l
-2170 4175 l
-2169 4173 l
-2169 4172 l
-2168 4170 l
-2167 4169 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2166 4166 l
-2166 4166 l
-S
-4631 6121 m
-4529 6040 l
-4270 5835 l
-4011 5629 l
-3752 5424 l
-3493 5219 l
-3234 5013 l
-2975 4808 l
-2717 4603 l
-2458 4397 l
-2199 4192 l
-2197 4191 l
-2196 4190 l
-2195 4189 l
-2194 4188 l
-2192 4187 l
-2191 4186 l
-2190 4185 l
-2188 4184 l
-2187 4183 l
-2186 4182 l
-2184 4180 l
-2183 4179 l
-2182 4178 l
-2180 4177 l
-2179 4176 l
-2178 4175 l
-2176 4174 l
-2175 4173 l
-2174 4172 l
-2172 4171 l
-2171 4170 l
-2170 4169 l
-2168 4168 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4166 l
-2166 4166 l
-S
-4877 4567 m
-4822 4559 l
-4495 4511 l
-4168 4462 l
-3841 4414 l
-3514 4366 l
-3188 4317 l
-2861 4269 l
-2534 4221 l
-2207 4172 l
-2206 4172 l
-2204 4172 l
-2202 4172 l
-2201 4171 l
-2199 4171 l
-2197 4171 l
-2196 4171 l
-2194 4170 l
-2192 4170 l
-2191 4170 l
-2189 4170 l
-2187 4169 l
-2186 4169 l
-2184 4169 l
-2182 4169 l
-2181 4168 l
-2179 4168 l
-2177 4168 l
-2176 4168 l
-2174 4167 l
-2172 4167 l
-2171 4167 l
-2169 4167 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-4877 2504 m
-4876 2503 l
-4872 2496 l
-4868 2489 l
-4864 2482 l
-4860 2476 l
-4855 2469 l
-4851 2462 l
-4847 2456 l
-4843 2449 l
-4838 2442 l
-4834 2436 l
-4830 2429 l
-4826 2423 l
-4821 2416 l
-4817 2409 l
-4812 2403 l
-4808 2396 l
-4804 2390 l
-4799 2383 l
-4795 2377 l
-4790 2370 l
-4786 2364 l
-4781 2357 l
-4777 2351 l
-4772 2344 l
-4768 2338 l
-4763 2331 l
-4759 2325 l
-4754 2318 l
-4750 2312 l
-4745 2306 l
-4740 2299 l
-4736 2293 l
-4731 2286 l
-4726 2280 l
-4722 2274 l
-4717 2267 l
-4712 2261 l
-4708 2255 l
-4703 2248 l
-4698 2242 l
-4693 2236 l
-4689 2230 l
-4684 2223 l
-4679 2217 l
-4674 2211 l
-4669 2205 l
-4664 2198 l
-4659 2192 l
-4655 2186 l
-4650 2180 l
-4645 2174 l
-4640 2168 l
-4635 2161 l
-4630 2155 l
-4625 2149 l
-4620 2143 l
-4615 2137 l
-4610 2131 l
-4605 2125 l
-4600 2119 l
-4595 2113 l
-4589 2107 l
-4584 2101 l
-4579 2095 l
-4574 2089 l
-4569 2083 l
-4564 2077 l
-4559 2071 l
-4553 2065 l
-4548 2059 l
-4543 2053 l
-4538 2047 l
-4532 2041 l
-4527 2036 l
-4522 2030 l
-4517 2024 l
-4511 2018 l
-4506 2012 l
-4501 2006 l
-4495 2001 l
-4490 1995 l
-4484 1989 l
-4479 1983 l
-4474 1978 l
-4468 1972 l
-4463 1966 l
-4457 1960 l
-4452 1955 l
-4446 1949 l
-4441 1943 l
-4435 1938 l
-4430 1932 l
-4424 1927 l
-4419 1921 l
-4413 1915 l
-4407 1910 l
-4402 1904 l
-4396 1899 l
-4391 1893 l
-4385 1888 l
-4379 1882 l
-4374 1877 l
-4368 1871 l
-4362 1866 l
-4357 1860 l
-4351 1855 l
-4345 1849 l
-4339 1844 l
-4334 1839 l
-4328 1833 l
-4322 1828 l
-4316 1823 l
-4310 1817 l
-4305 1812 l
-4299 1807 l
-4293 1801 l
-4287 1796 l
-4281 1791 l
-4275 1786 l
-4269 1780 l
-4266 1777 l
-S
-4675 6121 m
-4678 6117 l
-4683 6111 l
-4688 6104 l
-4693 6098 l
-4698 6092 l
-4702 6086 l
-4707 6079 l
-4712 6073 l
-4717 6067 l
-4721 6060 l
-4726 6054 l
-4731 6048 l
-4735 6041 l
-4740 6035 l
-4745 6028 l
-4749 6022 l
-4754 6016 l
-4758 6009 l
-4763 6003 l
-4767 5996 l
-4772 5990 l
-4776 5983 l
-4781 5977 l
-4785 5970 l
-4790 5964 l
-4794 5957 l
-4799 5951 l
-4803 5944 l
-4808 5938 l
-4812 5931 l
-4816 5925 l
-4821 5918 l
-4825 5911 l
-4829 5905 l
-4834 5898 l
-4838 5892 l
-4842 5885 l
-4846 5878 l
-4851 5872 l
-4855 5865 l
-4859 5858 l
-4863 5852 l
-4867 5845 l
-4872 5838 l
-4876 5831 l
-4877 5829 l
-S
-4854 3102 m
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3101 l
-4853 3101 l
-4853 3101 l
-4853 3100 l
-4853 3100 l
-4853 3099 l
-4853 3099 l
-4852 3098 l
-4852 3098 l
-4852 3097 l
-4852 3097 l
-4852 3096 l
-4851 3096 l
-4849 3089 l
-4846 3082 l
-4843 3076 l
-4841 3069 l
-4838 3063 l
-4835 3056 l
-4832 3049 l
-4830 3043 l
-4827 3036 l
-4824 3029 l
-4821 3023 l
-4818 3016 l
-4816 3010 l
-4813 3003 l
-4810 2997 l
-4807 2990 l
-4804 2983 l
-4801 2977 l
-4798 2970 l
-4795 2964 l
-4792 2957 l
-4789 2951 l
-4786 2944 l
-4783 2938 l
-4780 2931 l
-4777 2925 l
-4774 2918 l
-4771 2912 l
-4768 2905 l
-4764 2899 l
-4761 2893 l
-4758 2886 l
-4755 2880 l
-4752 2873 l
-4748 2867 l
-4745 2860 l
-4742 2854 l
-4739 2848 l
-4735 2841 l
-4732 2835 l
-4729 2829 l
-4726 2822 l
-4722 2816 l
-4719 2809 l
-4715 2803 l
-4712 2797 l
-4709 2791 l
-4705 2784 l
-4702 2778 l
-4698 2772 l
-4695 2765 l
-4691 2759 l
-4688 2753 l
-4684 2747 l
-4681 2740 l
-4677 2734 l
-4674 2728 l
-4670 2722 l
-4667 2715 l
-4663 2709 l
-4659 2703 l
-4656 2697 l
-4652 2691 l
-4648 2684 l
-4645 2678 l
-4641 2672 l
-4637 2666 l
-4634 2660 l
-4630 2654 l
-4626 2648 l
-4622 2642 l
-4619 2635 l
-4615 2629 l
-4611 2623 l
-4607 2617 l
-4603 2611 l
-4599 2605 l
-4596 2599 l
-4592 2593 l
-4588 2587 l
-4584 2581 l
-4580 2575 l
-4576 2569 l
-4572 2563 l
-4568 2557 l
-4564 2551 l
-4560 2545 l
-4556 2539 l
-4552 2533 l
-4548 2527 l
-4544 2522 l
-4540 2516 l
-4536 2510 l
-4531 2504 l
-4527 2498 l
-4523 2492 l
-4519 2486 l
-4515 2481 l
-4511 2475 l
-4506 2469 l
-4502 2463 l
-4498 2457 l
-4494 2452 l
-4489 2446 l
-4485 2440 l
-4481 2434 l
-4477 2428 l
-4472 2423 l
-4468 2417 l
-4464 2411 l
-4459 2406 l
-4455 2400 l
-4451 2394 l
-4446 2389 l
-4442 2383 l
-4437 2377 l
-4433 2372 l
-4428 2366 l
-4424 2360 l
-4419 2355 l
-4415 2349 l
-4410 2344 l
-4406 2338 l
-4401 2333 l
-4397 2327 l
-4392 2321 l
-4388 2316 l
-4383 2310 l
-4378 2305 l
-4374 2299 l
-4369 2294 l
-4365 2289 l
-4360 2283 l
-4355 2278 l
-4351 2272 l
-4346 2267 l
-4341 2261 l
-4336 2256 l
-4332 2251 l
-4327 2245 l
-4322 2240 l
-4317 2235 l
-4313 2229 l
-4308 2224 l
-4303 2219 l
-4298 2213 l
-4293 2208 l
-4288 2203 l
-4283 2197 l
-4279 2192 l
-4274 2187 l
-4269 2182 l
-4264 2177 l
-4259 2171 l
-4254 2166 l
-4249 2161 l
-4244 2156 l
-4239 2151 l
-4234 2146 l
-4229 2140 l
-4224 2135 l
-4219 2130 l
-4214 2125 l
-4209 2120 l
-4204 2115 l
-4199 2110 l
-4194 2105 l
-4188 2100 l
-4183 2095 l
-4178 2090 l
-4173 2085 l
-4168 2080 l
-4163 2075 l
-4157 2070 l
-4152 2065 l
-S
-4152 2065 m
-4147 2060 l
-4142 2055 l
-4137 2050 l
-4131 2045 l
-4126 2041 l
-4121 2036 l
-4115 2031 l
-4110 2026 l
-4105 2021 l
-4100 2016 l
-4094 2012 l
-4089 2007 l
-4083 2002 l
-4078 1997 l
-4073 1993 l
-4067 1988 l
-4062 1983 l
-4056 1978 l
-4051 1974 l
-4046 1969 l
-4040 1964 l
-4035 1960 l
-4029 1955 l
-4024 1951 l
-4018 1946 l
-4013 1941 l
-4007 1937 l
-4002 1932 l
-3996 1928 l
-3991 1923 l
-3985 1919 l
-3979 1914 l
-3974 1910 l
-3968 1905 l
-3963 1901 l
-3957 1896 l
-3951 1892 l
-3946 1887 l
-3940 1883 l
-3934 1879 l
-3929 1874 l
-3923 1870 l
-3917 1865 l
-3912 1861 l
-3906 1857 l
-3900 1852 l
-3894 1848 l
-3889 1844 l
-3883 1840 l
-3877 1835 l
-3871 1831 l
-3866 1827 l
-3860 1823 l
-3854 1818 l
-3848 1814 l
-3842 1810 l
-3836 1806 l
-3831 1802 l
-3825 1798 l
-3819 1794 l
-3813 1790 l
-3807 1785 l
-3801 1781 l
-3795 1777 l
-S
-4297 6121 m
-4298 6120 l
-4302 6115 l
-4307 6110 l
-4312 6105 l
-4317 6099 l
-4322 6094 l
-4326 6088 l
-4331 6083 l
-4336 6078 l
-4341 6072 l
-4345 6067 l
-4350 6062 l
-4355 6056 l
-4359 6051 l
-4364 6045 l
-4369 6040 l
-4373 6034 l
-4378 6029 l
-4383 6023 l
-4387 6018 l
-4392 6012 l
-4396 6007 l
-4401 6001 l
-4405 5996 l
-4410 5990 l
-4414 5985 l
-4419 5979 l
-4423 5973 l
-4428 5968 l
-4432 5962 l
-4437 5956 l
-4441 5951 l
-4446 5945 l
-4450 5940 l
-4454 5934 l
-4459 5928 l
-4463 5922 l
-4468 5917 l
-4472 5911 l
-4476 5905 l
-4480 5900 l
-4485 5894 l
-4489 5888 l
-4493 5882 l
-4498 5877 l
-4502 5871 l
-4506 5865 l
-4510 5859 l
-4514 5853 l
-4519 5847 l
-4523 5842 l
-4527 5836 l
-4531 5830 l
-4535 5824 l
-4539 5818 l
-4543 5812 l
-4547 5806 l
-4551 5800 l
-4555 5795 l
-4560 5789 l
-4564 5783 l
-4568 5777 l
-4572 5771 l
-4575 5765 l
-4579 5759 l
-4583 5753 l
-4587 5747 l
-4591 5741 l
-4595 5735 l
-4599 5729 l
-4603 5723 l
-4607 5717 l
-4611 5711 l
-4614 5704 l
-4618 5698 l
-4622 5692 l
-4626 5686 l
-4629 5680 l
-4633 5674 l
-4637 5668 l
-4641 5662 l
-4644 5656 l
-4648 5649 l
-4652 5643 l
-4655 5637 l
-4659 5631 l
-4663 5625 l
-4666 5619 l
-4670 5612 l
-4673 5606 l
-4677 5600 l
-4681 5594 l
-4684 5587 l
-4688 5581 l
-4691 5575 l
-4695 5569 l
-4698 5562 l
-4701 5556 l
-4705 5550 l
-4708 5543 l
-4712 5537 l
-4715 5531 l
-4718 5524 l
-4722 5518 l
-4725 5512 l
-4729 5505 l
-4732 5499 l
-4735 5493 l
-4738 5486 l
-4742 5480 l
-4745 5474 l
-4748 5467 l
-4751 5461 l
-4755 5454 l
-4758 5448 l
-4761 5441 l
-4764 5435 l
-4767 5429 l
-4770 5422 l
-4773 5416 l
-4777 5409 l
-4780 5403 l
-4783 5396 l
-4786 5390 l
-4789 5383 l
-4792 5377 l
-4795 5370 l
-4798 5364 l
-4801 5357 l
-4804 5351 l
-4807 5344 l
-4809 5337 l
-4812 5331 l
-4815 5324 l
-4818 5318 l
-4821 5311 l
-4824 5305 l
-4827 5298 l
-4829 5291 l
-4832 5285 l
-4835 5278 l
-4838 5271 l
-4840 5265 l
-4843 5258 l
-4846 5252 l
-4848 5245 l
-4851 5238 l
-4854 5232 l
-4856 5225 l
-4859 5218 l
-4862 5212 l
-4864 5205 l
-4867 5198 l
-4869 5191 l
-4872 5185 l
-4874 5178 l
-4877 5171 l
-4877 5171 l
-S
-4877 3162 m
-4877 3162 l
-4874 3155 l
-4872 3149 l
-4869 3142 l
-4867 3135 l
-4864 3129 l
-4862 3122 l
-4859 3115 l
-4856 3109 l
-4854 3102 l
-S
-4585 3208 m
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3207 l
-4584 3207 l
-4584 3206 l
-4584 3206 l
-4584 3205 l
-4584 3205 l
-4584 3205 l
-4583 3204 l
-4583 3204 l
-4583 3203 l
-4583 3203 l
-4581 3197 l
-4578 3191 l
-4576 3185 l
-4573 3179 l
-4571 3173 l
-4568 3167 l
-4566 3161 l
-4563 3155 l
-4561 3149 l
-4558 3143 l
-4556 3137 l
-4553 3131 l
-4551 3125 l
-4548 3119 l
-4545 3114 l
-4543 3108 l
-4540 3102 l
-4538 3096 l
-4535 3090 l
-4532 3084 l
-4529 3078 l
-4527 3072 l
-4524 3067 l
-4521 3061 l
-4519 3055 l
-4516 3049 l
-4513 3043 l
-4510 3037 l
-4507 3032 l
-4505 3026 l
-4502 3020 l
-4499 3014 l
-4496 3008 l
-4493 3003 l
-4490 2997 l
-4487 2991 l
-4484 2985 l
-4482 2980 l
-4479 2974 l
-4476 2968 l
-4473 2962 l
-4470 2957 l
-4467 2951 l
-4464 2945 l
-4461 2939 l
-4458 2934 l
-4454 2928 l
-4451 2922 l
-4448 2917 l
-4445 2911 l
-4442 2905 l
-4439 2900 l
-4436 2894 l
-4433 2889 l
-4429 2883 l
-4426 2877 l
-4423 2872 l
-4420 2866 l
-4417 2860 l
-4413 2855 l
-4410 2849 l
-4407 2844 l
-4404 2838 l
-4400 2833 l
-4397 2827 l
-4394 2822 l
-4390 2816 l
-4387 2811 l
-4384 2805 l
-4380 2800 l
-4377 2794 l
-4373 2789 l
-4370 2783 l
-4366 2778 l
-4363 2772 l
-4360 2767 l
-4356 2761 l
-4353 2756 l
-4349 2750 l
-4346 2745 l
-4342 2740 l
-4339 2734 l
-4335 2729 l
-4331 2723 l
-4328 2718 l
-4324 2713 l
-4321 2707 l
-4317 2702 l
-4313 2697 l
-4310 2691 l
-4306 2686 l
-4302 2681 l
-4299 2675 l
-4295 2670 l
-4291 2665 l
-4287 2660 l
-4284 2654 l
-4280 2649 l
-4276 2644 l
-4272 2639 l
-4269 2633 l
-4265 2628 l
-4261 2623 l
-4257 2618 l
-4253 2613 l
-4249 2607 l
-4246 2602 l
-4242 2597 l
-4238 2592 l
-4234 2587 l
-4230 2582 l
-4226 2577 l
-4222 2571 l
-4218 2566 l
-4214 2561 l
-4210 2556 l
-4206 2551 l
-4202 2546 l
-4198 2541 l
-4194 2536 l
-4190 2531 l
-4186 2526 l
-4182 2521 l
-4178 2516 l
-4174 2511 l
-4170 2506 l
-4166 2501 l
-4161 2496 l
-4157 2491 l
-4153 2486 l
-4149 2481 l
-4145 2476 l
-4141 2471 l
-4136 2467 l
-4132 2462 l
-4128 2457 l
-4124 2452 l
-4119 2447 l
-4115 2442 l
-4111 2437 l
-4107 2433 l
-4102 2428 l
-4098 2423 l
-4094 2418 l
-4089 2413 l
-4085 2409 l
-4081 2404 l
-4076 2399 l
-4072 2394 l
-4067 2390 l
-4063 2385 l
-4059 2380 l
-4054 2376 l
-4050 2371 l
-4045 2366 l
-4041 2362 l
-4036 2357 l
-4032 2352 l
-4027 2348 l
-4023 2343 l
-4018 2338 l
-4014 2334 l
-4009 2329 l
-4005 2325 l
-4000 2320 l
-3995 2316 l
-3991 2311 l
-3986 2307 l
-3982 2302 l
-3977 2298 l
-3972 2293 l
-3968 2289 l
-3963 2284 l
-3958 2280 l
-3954 2275 l
-S
-3954 2275 m
-3949 2271 l
-3944 2266 l
-3940 2262 l
-3935 2258 l
-3930 2253 l
-3925 2249 l
-3921 2244 l
-3916 2240 l
-3911 2236 l
-3906 2231 l
-3901 2227 l
-3897 2223 l
-3892 2218 l
-3887 2214 l
-3882 2210 l
-3877 2206 l
-3872 2201 l
-3867 2197 l
-3863 2193 l
-3858 2189 l
-3853 2185 l
-3848 2180 l
-3843 2176 l
-3838 2172 l
-3833 2168 l
-3828 2164 l
-3823 2160 l
-3818 2156 l
-3813 2152 l
-3808 2147 l
-3803 2143 l
-3798 2139 l
-3793 2135 l
-3788 2131 l
-3783 2127 l
-3778 2123 l
-3773 2119 l
-3768 2115 l
-3763 2111 l
-3758 2107 l
-3752 2103 l
-3747 2099 l
-3742 2096 l
-3737 2092 l
-3732 2088 l
-3727 2084 l
-3722 2080 l
-3716 2076 l
-3711 2072 l
-3706 2068 l
-3701 2065 l
-3696 2061 l
-3690 2057 l
-3685 2053 l
-3680 2049 l
-3675 2046 l
-3669 2042 l
-3664 2038 l
-3659 2035 l
-3654 2031 l
-3648 2027 l
-3643 2024 l
-3638 2020 l
-3632 2016 l
-3627 2013 l
-3622 2009 l
-3616 2005 l
-3611 2002 l
-3606 1998 l
-3600 1995 l
-3595 1991 l
-3589 1988 l
-3584 1984 l
-3579 1980 l
-3573 1977 l
-3568 1974 l
-3562 1970 l
-3557 1967 l
-3551 1963 l
-3546 1960 l
-3540 1956 l
-3535 1953 l
-3529 1949 l
-3524 1946 l
-3518 1943 l
-3513 1939 l
-3507 1936 l
-3502 1933 l
-3496 1929 l
-3491 1926 l
-3485 1923 l
-3480 1920 l
-3474 1916 l
-3468 1913 l
-3463 1910 l
-3457 1907 l
-3452 1903 l
-3446 1900 l
-3440 1897 l
-3435 1894 l
-3429 1891 l
-3424 1888 l
-3418 1885 l
-3412 1881 l
-3407 1878 l
-3401 1875 l
-3395 1872 l
-3390 1869 l
-3384 1866 l
-3378 1863 l
-3372 1860 l
-3367 1857 l
-3361 1854 l
-3355 1851 l
-3349 1848 l
-3344 1845 l
-3338 1842 l
-3332 1840 l
-3326 1837 l
-3321 1834 l
-3315 1831 l
-3309 1828 l
-3303 1825 l
-3297 1822 l
-3292 1820 l
-3286 1817 l
-3280 1814 l
-3274 1811 l
-3268 1809 l
-3262 1806 l
-3257 1803 l
-3251 1800 l
-3245 1798 l
-3239 1795 l
-3233 1792 l
-3227 1790 l
-3221 1787 l
-3215 1785 l
-3210 1782 l
-3204 1779 l
-3199 1777 l
-S
-1133 1777 m
-1133 1778 l
-1127 1780 l
-1121 1783 l
-1115 1785 l
-1109 1788 l
-1104 1791 l
-1098 1793 l
-1092 1796 l
-1086 1798 l
-1080 1801 l
-1074 1804 l
-1068 1807 l
-1062 1809 l
-1057 1812 l
-1051 1815 l
-1045 1818 l
-1039 1820 l
-1033 1823 l
-1028 1826 l
-1022 1829 l
-1016 1832 l
-1010 1835 l
-1004 1837 l
-999 1840 l
-993 1843 l
-987 1846 l
-981 1849 l
-976 1852 l
-970 1855 l
-964 1858 l
-958 1861 l
-953 1864 l
-947 1867 l
-941 1870 l
-936 1873 l
-930 1876 l
-924 1879 l
-919 1882 l
-913 1885 l
-907 1889 l
-902 1892 l
-896 1895 l
-890 1898 l
-885 1901 l
-879 1904 l
-874 1908 l
-868 1911 l
-862 1914 l
-857 1917 l
-851 1920 l
-846 1924 l
-840 1927 l
-835 1930 l
-829 1934 l
-823 1937 l
-818 1940 l
-812 1944 l
-807 1947 l
-801 1950 l
-796 1954 l
-790 1957 l
-785 1961 l
-780 1964 l
-774 1968 l
-769 1971 l
-763 1974 l
-758 1978 l
-752 1981 l
-747 1985 l
-742 1988 l
-736 1992 l
-731 1996 l
-725 1999 l
-720 2003 l
-715 2006 l
-709 2010 l
-704 2014 l
-699 2017 l
-693 2021 l
-688 2025 l
-683 2028 l
-677 2032 l
-672 2036 l
-667 2039 l
-662 2043 l
-656 2047 l
-651 2051 l
-646 2054 l
-641 2058 l
-635 2062 l
-630 2066 l
-625 2069 l
-620 2073 l
-615 2077 l
-609 2081 l
-604 2085 l
-599 2089 l
-594 2093 l
-589 2097 l
-584 2100 l
-579 2104 l
-573 2108 l
-568 2112 l
-563 2116 l
-558 2120 l
-553 2124 l
-548 2128 l
-543 2132 l
-538 2136 l
-533 2140 l
-S
-3884 6121 m
-3886 6119 l
-3891 6115 l
-3896 6111 l
-3901 6106 l
-3906 6102 l
-3910 6098 l
-3915 6093 l
-3920 6089 l
-3925 6085 l
-3930 6080 l
-3934 6076 l
-3939 6072 l
-3944 6067 l
-3948 6063 l
-3953 6058 l
-3958 6054 l
-3962 6050 l
-3967 6045 l
-3972 6041 l
-3976 6036 l
-3981 6032 l
-3986 6027 l
-3990 6023 l
-3995 6018 l
-3999 6013 l
-4004 6009 l
-4009 6004 l
-4013 6000 l
-4018 5995 l
-4022 5991 l
-4027 5986 l
-4031 5981 l
-4036 5977 l
-4040 5972 l
-4045 5967 l
-4049 5963 l
-4054 5958 l
-4058 5953 l
-4062 5949 l
-4067 5944 l
-4071 5939 l
-4076 5935 l
-4080 5930 l
-4084 5925 l
-4089 5920 l
-4093 5915 l
-4097 5911 l
-4102 5906 l
-4106 5901 l
-4110 5896 l
-4115 5891 l
-4119 5887 l
-4123 5882 l
-4127 5877 l
-4132 5872 l
-4136 5867 l
-4140 5862 l
-4144 5857 l
-4148 5852 l
-4153 5847 l
-4157 5843 l
-4161 5838 l
-4165 5833 l
-4169 5828 l
-4173 5823 l
-4177 5818 l
-4182 5813 l
-4186 5808 l
-4190 5803 l
-4194 5798 l
-4198 5793 l
-4202 5788 l
-4206 5783 l
-4210 5777 l
-4214 5772 l
-4218 5767 l
-4222 5762 l
-4226 5757 l
-4230 5752 l
-4234 5747 l
-4237 5742 l
-4241 5737 l
-4245 5731 l
-4249 5726 l
-4253 5721 l
-4257 5716 l
-4261 5711 l
-4264 5706 l
-4268 5700 l
-4272 5695 l
-4276 5690 l
-4280 5685 l
-4283 5679 l
-4287 5674 l
-4291 5669 l
-4295 5664 l
-4298 5658 l
-4302 5653 l
-4306 5648 l
-4309 5642 l
-4313 5637 l
-4317 5632 l
-4320 5626 l
-4324 5621 l
-4327 5616 l
-4331 5610 l
-4335 5605 l
-4338 5600 l
-4342 5594 l
-4345 5589 l
-4349 5583 l
-4352 5578 l
-4356 5572 l
-4359 5567 l
-4363 5562 l
-4366 5556 l
-4370 5551 l
-4373 5545 l
-4376 5540 l
-4380 5534 l
-4383 5529 l
-4387 5523 l
-4390 5518 l
-4393 5512 l
-4397 5507 l
-4400 5501 l
-4403 5496 l
-4406 5490 l
-4410 5484 l
-4413 5479 l
-4416 5473 l
-4419 5468 l
-4423 5462 l
-4426 5457 l
-4429 5451 l
-4432 5445 l
-4435 5440 l
-4439 5434 l
-4442 5428 l
-4445 5423 l
-4448 5417 l
-4451 5411 l
-4454 5406 l
-4457 5400 l
-4460 5394 l
-4463 5389 l
-4466 5383 l
-4469 5377 l
-4472 5372 l
-4475 5366 l
-4478 5360 l
-4481 5354 l
-4484 5349 l
-4487 5343 l
-4490 5337 l
-4493 5331 l
-4496 5326 l
-4499 5320 l
-4501 5314 l
-4504 5308 l
-4507 5302 l
-4510 5297 l
-4513 5291 l
-4516 5285 l
-4518 5279 l
-4521 5273 l
-4524 5267 l
-4526 5261 l
-4529 5256 l
-4532 5250 l
-4535 5244 l
-4537 5238 l
-4540 5232 l
-4543 5226 l
-4545 5220 l
-4548 5214 l
-4550 5208 l
-4553 5203 l
-4555 5197 l
-4558 5191 l
-4561 5185 l
-4563 5179 l
-4566 5173 l
-4568 5167 l
-4571 5161 l
-4573 5155 l
-4575 5149 l
-4578 5143 l
-4580 5137 l
-4583 5131 l
-4585 5125 l
-4587 5119 l
-4590 5113 l
-4592 5107 l
-4594 5101 l
-4597 5095 l
-4599 5089 l
-4601 5083 l
-4604 5077 l
-S
-4604 5077 m
-4606 5071 l
-4608 5065 l
-4610 5059 l
-4612 5053 l
-4615 5047 l
-4617 5040 l
-4619 5034 l
-4621 5028 l
-4623 5022 l
-4625 5016 l
-4627 5010 l
-4630 5004 l
-4632 4998 l
-4634 4992 l
-4636 4986 l
-4638 4979 l
-4640 4973 l
-4642 4967 l
-4644 4961 l
-4646 4955 l
-4648 4949 l
-4650 4942 l
-4651 4936 l
-4653 4930 l
-4655 4924 l
-4657 4918 l
-4659 4912 l
-4661 4905 l
-4663 4899 l
-4664 4893 l
-4666 4887 l
-4668 4881 l
-4670 4874 l
-4672 4868 l
-4673 4862 l
-4675 4856 l
-4677 4850 l
-4678 4843 l
-4680 4837 l
-4682 4831 l
-4683 4825 l
-4685 4818 l
-4687 4812 l
-4688 4806 l
-4690 4800 l
-4691 4793 l
-4693 4787 l
-4694 4781 l
-4696 4774 l
-4697 4768 l
-4699 4762 l
-4700 4756 l
-4702 4749 l
-4703 4743 l
-4705 4737 l
-4706 4730 l
-4707 4724 l
-4709 4718 l
-4710 4711 l
-4712 4705 l
-4713 4699 l
-4714 4693 l
-4715 4686 l
-4717 4680 l
-4718 4674 l
-4719 4667 l
-4720 4661 l
-4722 4655 l
-4723 4648 l
-4724 4642 l
-4725 4636 l
-4726 4629 l
-4728 4623 l
-4729 4616 l
-4730 4610 l
-4731 4604 l
-4732 4597 l
-4733 4591 l
-4734 4585 l
-4735 4578 l
-4736 4572 l
-4737 4565 l
-4738 4559 l
-4739 4553 l
-4740 4546 l
-4741 4540 l
-4742 4534 l
-4743 4527 l
-4744 4521 l
-4744 4514 l
-4745 4508 l
-4746 4502 l
-4747 4495 l
-4748 4489 l
-4749 4482 l
-4749 4476 l
-4750 4470 l
-4751 4463 l
-4752 4457 l
-4752 4450 l
-4753 4444 l
-4754 4437 l
-4754 4431 l
-4755 4425 l
-4756 4418 l
-4756 4412 l
-4757 4405 l
-4757 4399 l
-4758 4392 l
-4759 4386 l
-4759 4380 l
-4760 4373 l
-4760 4367 l
-4761 4360 l
-4761 4354 l
-4762 4347 l
-4762 4341 l
-4762 4334 l
-4763 4328 l
-4763 4322 l
-4764 4315 l
-4764 4309 l
-4764 4302 l
-4765 4296 l
-4765 4289 l
-4765 4283 l
-4765 4276 l
-4766 4270 l
-4766 4264 l
-4766 4257 l
-4766 4251 l
-4767 4244 l
-4767 4238 l
-4767 4231 l
-4767 4225 l
-4767 4218 l
-4767 4212 l
-4768 4205 l
-4768 4199 l
-4768 4193 l
-4768 4186 l
-4768 4180 l
-4768 4173 l
-4768 4167 l
-4768 4160 l
-4768 4154 l
-4768 4147 l
-4768 4141 l
-4768 4134 l
-4768 4128 l
-4767 4122 l
-4767 4115 l
-4767 4109 l
-4767 4102 l
-4767 4096 l
-4767 4089 l
-4766 4083 l
-4766 4076 l
-4766 4070 l
-4766 4063 l
-4766 4057 l
-4765 4051 l
-4765 4044 l
-4765 4038 l
-4764 4031 l
-4764 4025 l
-4764 4018 l
-4763 4012 l
-4763 4005 l
-4762 3999 l
-4762 3993 l
-4762 3986 l
-4761 3980 l
-4761 3973 l
-4760 3967 l
-4760 3960 l
-4759 3954 l
-4759 3947 l
-4758 3941 l
-4757 3935 l
-4757 3928 l
-4756 3922 l
-4756 3915 l
-4755 3909 l
-4754 3902 l
-4754 3896 l
-4753 3890 l
-4752 3883 l
-4752 3877 l
-4751 3870 l
-4750 3864 l
-4749 3858 l
-4749 3851 l
-4748 3845 l
-4747 3838 l
-4746 3832 l
-4745 3826 l
-4745 3819 l
-4744 3813 l
-S
-4744 3813 m
-4743 3806 l
-4742 3800 l
-4741 3794 l
-4740 3787 l
-4739 3781 l
-4738 3774 l
-4737 3768 l
-4736 3762 l
-4735 3755 l
-4734 3749 l
-4733 3742 l
-4732 3736 l
-4731 3730 l
-4730 3723 l
-4729 3717 l
-4728 3711 l
-4726 3704 l
-4725 3698 l
-4724 3692 l
-4723 3685 l
-4722 3679 l
-4721 3673 l
-4719 3666 l
-4718 3660 l
-4717 3654 l
-4715 3647 l
-4714 3641 l
-4713 3635 l
-4712 3628 l
-4710 3622 l
-4709 3616 l
-4707 3609 l
-4706 3603 l
-4705 3597 l
-4703 3590 l
-4702 3584 l
-4700 3578 l
-4699 3572 l
-4697 3565 l
-4696 3559 l
-4694 3553 l
-4693 3546 l
-4691 3540 l
-4690 3534 l
-4688 3528 l
-4687 3521 l
-4685 3515 l
-4683 3509 l
-4682 3503 l
-4680 3496 l
-4678 3490 l
-4677 3484 l
-4675 3478 l
-4673 3471 l
-4672 3465 l
-4670 3459 l
-4668 3453 l
-4666 3447 l
-4665 3440 l
-4663 3434 l
-4661 3428 l
-4659 3422 l
-4657 3416 l
-4655 3409 l
-4653 3403 l
-4652 3397 l
-4650 3391 l
-4648 3385 l
-4646 3379 l
-4644 3372 l
-4642 3366 l
-4640 3360 l
-4638 3354 l
-4636 3348 l
-4634 3342 l
-4632 3336 l
-4630 3330 l
-4628 3323 l
-4625 3317 l
-4623 3311 l
-4621 3305 l
-4619 3299 l
-4617 3293 l
-4615 3287 l
-4613 3281 l
-4610 3275 l
-4608 3269 l
-4606 3263 l
-4604 3257 l
-4601 3251 l
-4599 3244 l
-4597 3238 l
-4594 3232 l
-4592 3226 l
-4590 3220 l
-4587 3214 l
-4585 3208 l
-S
-4316 3315 m
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3314 l
-4316 3314 l
-4316 3314 l
-4316 3314 l
-4316 3313 l
-4316 3313 l
-4315 3313 l
-4315 3312 l
-4315 3312 l
-4315 3311 l
-4315 3311 l
-4315 3311 l
-4315 3310 l
-4314 3310 l
-4312 3305 l
-4310 3299 l
-4308 3294 l
-4306 3289 l
-4304 3283 l
-4301 3278 l
-4299 3273 l
-4297 3267 l
-4295 3262 l
-4293 3257 l
-4290 3252 l
-4288 3246 l
-4255 3173 l
-4219 3101 l
-4181 3031 l
-4140 2961 l
-4097 2893 l
-4052 2827 l
-4004 2762 l
-3954 2699 l
-3902 2638 l
-3848 2579 l
-3792 2521 l
-3734 2466 l
-3674 2412 l
-3612 2361 l
-3549 2312 l
-3484 2265 l
-3417 2220 l
-3349 2178 l
-3279 2138 l
-3208 2101 l
-3135 2066 l
-3062 2033 l
-2987 2003 l
-2912 1976 l
-2835 1952 l
-2758 1930 l
-2680 1911 l
-2602 1894 l
-2522 1880 l
-2443 1869 l
-2363 1861 l
-2283 1856 l
-2203 1853 l
-2122 1853 l
-2042 1856 l
-1962 1862 l
-1882 1870 l
-1803 1881 l
-1724 1895 l
-1645 1912 l
-1567 1932 l
-1490 1954 l
-1414 1979 l
-1338 2006 l
-1264 2036 l
-1190 2069 l
-1118 2104 l
-1047 2142 l
-978 2182 l
-909 2224 l
-843 2269 l
-778 2316 l
-714 2366 l
-653 2417 l
-593 2471 l
-535 2526 l
-533 2528 l
-S
-533 5804 m
-572 5842 l
-631 5896 l
-692 5948 l
-755 5998 l
-819 6046 l
-885 6092 l
-930 6121 l
-S
-3403 6121 m
-3459 6085 l
-3525 6039 l
-3589 5990 l
-3652 5940 l
-3712 5887 l
-3771 5832 l
-3828 5776 l
-3883 5717 l
-3936 5656 l
-3986 5594 l
-4035 5530 l
-4081 5464 l
-4125 5397 l
-4166 5328 l
-4205 5258 l
-4242 5186 l
-4276 5114 l
-4308 5040 l
-4337 4965 l
-4363 4889 l
-4387 4812 l
-4408 4735 l
-4426 4657 l
-4442 4578 l
-4455 4498 l
-4465 4419 l
-4472 4339 l
-4477 4258 l
-4479 4178 l
-4478 4098 l
-4474 4018 l
-4467 3937 l
-4458 3858 l
-4446 3778 l
-4431 3699 l
-4414 3621 l
-4393 3543 l
-4370 3466 l
-4345 3390 l
-4316 3315 l
-S
-4048 3421 m
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4047 3421 l
-4047 3420 l
-4047 3420 l
-4047 3420 l
-4047 3419 l
-4047 3419 l
-4047 3419 l
-4046 3418 l
-4046 3418 l
-4046 3418 l
-4046 3417 l
-4046 3417 l
-4044 3412 l
-4042 3408 l
-4040 3403 l
-4038 3398 l
-4036 3394 l
-4035 3389 l
-4033 3384 l
-4031 3380 l
-4029 3375 l
-4027 3371 l
-4025 3366 l
-4023 3361 l
-3994 3297 l
-3962 3234 l
-3929 3172 l
-3893 3112 l
-3856 3052 l
-3816 2994 l
-3774 2938 l
-3731 2883 l
-3685 2829 l
-3638 2777 l
-3589 2727 l
-3538 2678 l
-3486 2632 l
-3432 2587 l
-3376 2544 l
-3319 2503 l
-3261 2464 l
-3201 2427 l
-3140 2392 l
-3078 2359 l
-3014 2328 l
-2950 2300 l
-2885 2274 l
-2819 2250 l
-2752 2229 l
-2684 2209 l
-2616 2193 l
-2547 2178 l
-2478 2166 l
-2408 2156 l
-2338 2149 l
-2268 2144 l
-2198 2142 l
-2128 2142 l
-2058 2145 l
-1988 2150 l
-1918 2157 l
-1848 2167 l
-1779 2179 l
-1710 2194 l
-1642 2211 l
-1575 2230 l
-1508 2252 l
-1442 2276 l
-1377 2302 l
-1312 2331 l
-1249 2362 l
-1187 2395 l
-1126 2430 l
-1067 2467 l
-1008 2506 l
-951 2547 l
-896 2591 l
-842 2636 l
-790 2683 l
-739 2731 l
-690 2782 l
-643 2834 l
-598 2888 l
-554 2943 l
-533 2972 l
-S
-533 5361 m
-539 5369 l
-582 5425 l
-626 5479 l
-673 5532 l
-721 5583 l
-771 5632 l
-823 5680 l
-876 5726 l
-931 5769 l
-987 5811 l
-1045 5851 l
-1104 5889 l
-1165 5925 l
-1226 5959 l
-1289 5991 l
-1353 6020 l
-1418 6047 l
-1484 6072 l
-1550 6095 l
-1617 6115 l
-1641 6121 l
-S
-2692 6121 m
-2727 6112 l
-2794 6091 l
-2861 6068 l
-2926 6043 l
-2991 6015 l
-3055 5985 l
-3117 5953 l
-3179 5919 l
-3239 5883 l
-3298 5845 l
-3355 5805 l
-3412 5762 l
-3466 5718 l
-3519 5672 l
-3571 5624 l
-3620 5574 l
-3668 5523 l
-3714 5470 l
-3759 5416 l
-3801 5359 l
-3842 5302 l
-3880 5243 l
-3916 5183 l
-3951 5121 l
-3983 5059 l
-4012 4995 l
-4040 4931 l
-4065 4865 l
-4089 4799 l
-4109 4732 l
-4128 4664 l
-4144 4595 l
-4158 4526 l
-4169 4457 l
-4178 4387 l
-4184 4317 l
-4188 4247 l
-4190 4177 l
-4189 4106 l
-4186 4036 l
-4180 3966 l
-4172 3896 l
-4161 3827 l
-4148 3758 l
-4133 3689 l
-4115 3621 l
-4095 3554 l
-4072 3487 l
-4048 3421 l
-S
-3779 3527 m
-3779 3527 l
-3779 3527 l
-3778 3527 l
-3778 3526 l
-3778 3526 l
-3778 3526 l
-3778 3525 l
-3778 3525 l
-3778 3525 l
-3778 3525 l
-3778 3524 l
-3777 3524 l
-3776 3520 l
-3774 3516 l
-3773 3512 l
-3771 3508 l
-3769 3504 l
-3768 3500 l
-3766 3496 l
-3764 3492 l
-3763 3488 l
-3761 3484 l
-3759 3480 l
-3758 3476 l
-3733 3421 l
-3706 3367 l
-3677 3314 l
-3647 3262 l
-3614 3212 l
-3580 3162 l
-3545 3113 l
-3507 3066 l
-3468 3020 l
-3428 2976 l
-3386 2933 l
-3342 2891 l
-3297 2851 l
-3251 2812 l
-3203 2775 l
-3154 2740 l
-3104 2707 l
-3053 2675 l
-3001 2645 l
-2947 2617 l
-2893 2591 l
-2838 2567 l
-2782 2544 l
-2726 2524 l
-2668 2505 l
-2610 2489 l
-2552 2474 l
-2493 2462 l
-2433 2452 l
-2374 2444 l
-2314 2437 l
-2254 2433 l
-2194 2431 l
-2133 2431 l
-2073 2434 l
-2013 2438 l
-1953 2444 l
-1894 2453 l
-1834 2463 l
-1775 2476 l
-1717 2490 l
-1659 2507 l
-1602 2526 l
-1545 2546 l
-1489 2569 l
-1434 2593 l
-1380 2620 l
-1327 2648 l
-1275 2678 l
-1224 2710 l
-1174 2743 l
-1125 2779 l
-1077 2816 l
-1031 2854 l
-986 2895 l
-943 2936 l
-901 2980 l
-861 3024 l
-822 3070 l
-785 3118 l
-749 3166 l
-715 3216 l
-683 3267 l
-653 3319 l
-624 3372 l
-598 3426 l
-573 3481 l
-550 3537 l
-533 3583 l
-S
-533 4749 m
-542 4775 l
-564 4831 l
-588 4886 l
-614 4940 l
-642 4994 l
-672 5046 l
-703 5098 l
-736 5148 l
-771 5197 l
-808 5245 l
-846 5292 l
-886 5337 l
-928 5380 l
-970 5423 l
-1015 5464 l
-1060 5503 l
-1107 5540 l
-1156 5576 l
-1205 5611 l
-1256 5643 l
-1308 5674 l
-1361 5703 l
-1415 5730 l
-1469 5755 l
-1525 5778 l
-1581 5800 l
-1638 5819 l
-1696 5836 l
-1754 5852 l
-1813 5865 l
-1872 5876 l
-1931 5886 l
-1991 5893 l
-2051 5898 l
-2111 5901 l
-2172 5902 l
-2232 5900 l
-2292 5897 l
-2352 5892 l
-2412 5884 l
-2471 5875 l
-2530 5863 l
-2589 5849 l
-2647 5834 l
-2705 5816 l
-2762 5796 l
-2818 5775 l
-2873 5751 l
-2928 5726 l
-2981 5698 l
-3034 5669 l
-3086 5638 l
-3136 5605 l
-3186 5571 l
-3234 5534 l
-3280 5496 l
-3326 5457 l
-3370 5416 l
-3413 5373 l
-3454 5329 l
-3493 5284 l
-3531 5237 l
-3568 5189 l
-3602 5140 l
-3635 5089 l
-3666 5038 l
-3696 4985 l
-3723 4931 l
-3749 4877 l
-3772 4821 l
-3794 4765 l
-3814 4708 l
-3832 4651 l
-3848 4593 l
-3861 4534 l
-3873 4475 l
-3883 4415 l
-3890 4356 l
-3896 4296 l
-3899 4235 l
-3901 4175 l
-3900 4115 l
-3897 4055 l
-3892 3995 l
-3885 3935 l
-3876 3875 l
-3865 3816 l
-3852 3757 l
-3837 3699 l
-3819 3641 l
-3800 3584 l
-3779 3528 l
-S
-3510 3634 m
-3510 3634 l
-3510 3633 l
-3510 3633 l
-3510 3633 l
-3510 3633 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3631 l
-3509 3631 l
-3508 3628 l
-3506 3624 l
-3505 3621 l
-3504 3618 l
-3502 3614 l
-3501 3611 l
-3499 3608 l
-3498 3605 l
-3497 3601 l
-3495 3598 l
-3494 3595 l
-3492 3591 l
-3472 3546 l
-3449 3501 l
-3425 3456 l
-3400 3413 l
-3373 3371 l
-3345 3329 l
-3315 3289 l
-3284 3249 l
-3251 3211 l
-3218 3174 l
-3183 3138 l
-3146 3103 l
-3109 3070 l
-3070 3038 l
-3030 3007 l
-2990 2978 l
-2948 2950 l
-2905 2924 l
-2862 2899 l
-2817 2875 l
-2772 2853 l
-2726 2833 l
-2680 2815 l
-2632 2798 l
-2585 2782 l
-2536 2768 l
-2488 2756 l
-2438 2746 l
-2389 2738 l
-2339 2731 l
-2289 2726 l
-2239 2722 l
-2189 2720 l
-2139 2721 l
-2089 2722 l
-2039 2726 l
-1989 2731 l
-1939 2738 l
-1890 2747 l
-1841 2757 l
-1792 2770 l
-1744 2784 l
-1696 2799 l
-1649 2816 l
-1602 2835 l
-1556 2855 l
-1511 2877 l
-1467 2901 l
-1423 2926 l
-1381 2953 l
-1339 2981 l
-1299 3010 l
-1259 3041 l
-1220 3073 l
-1183 3107 l
-1147 3141 l
-1112 3177 l
-1078 3215 l
-1046 3253 l
-1015 3292 l
-985 3333 l
-957 3375 l
-930 3417 l
-905 3460 l
-881 3505 l
-859 3550 l
-839 3595 l
-820 3642 l
-802 3689 l
-786 3737 l
-772 3785 l
-760 3834 l
-749 3883 l
-740 3932 l
-733 3982 l
-727 4032 l
-724 4082 l
-722 4132 l
-721 4182 l
-723 4232 l
-726 4282 l
-731 4332 l
-737 4382 l
-746 4432 l
-756 4481 l
-768 4530 l
-781 4578 l
-796 4626 l
-813 4673 l
-831 4720 l
-851 4766 l
-873 4811 l
-896 4856 l
-921 4900 l
-947 4943 l
-975 4984 l
-1004 5025 l
-1034 5065 l
-1066 5104 l
-1100 5142 l
-1134 5178 l
-1170 5213 l
-1207 5247 l
-1245 5280 l
-1284 5311 l
-1324 5341 l
-1366 5370 l
-1408 5397 l
-1451 5423 l
-1495 5447 l
-1540 5469 l
-1585 5490 l
-1632 5510 l
-1679 5528 l
-1726 5544 l
-1774 5558 l
-1823 5571 l
-1872 5582 l
-1921 5591 l
-1971 5599 l
-2020 5605 l
-2070 5609 l
-2121 5612 l
-2171 5612 l
-2221 5611 l
-2271 5609 l
-2321 5604 l
-2371 5598 l
-2420 5590 l
-2470 5580 l
-2519 5569 l
-2567 5556 l
-2615 5541 l
-2662 5525 l
-2709 5507 l
-2755 5487 l
-2801 5466 l
-2846 5443 l
-2889 5419 l
-2932 5393 l
-2975 5365 l
-3016 5336 l
-3056 5306 l
-3095 5275 l
-3133 5242 l
-3169 5208 l
-3205 5172 l
-3239 5135 l
-3272 5098 l
-3304 5059 l
-3334 5019 l
-3363 4977 l
-3390 4935 l
-3416 4892 l
-3441 4849 l
-3464 4804 l
-3485 4758 l
-3505 4712 l
-3523 4665 l
-3539 4618 l
-3554 4570 l
-3567 4522 l
-3579 4473 l
-3589 4423 l
-3597 4374 l
-3603 4324 l
-3608 4274 l
-3611 4224 l
-3612 4174 l
-3611 4124 l
-3609 4073 l
-3605 4023 l
-3599 3973 l
-3591 3924 l
-3582 3874 l
-S
-3582 3874 m
-3571 3825 l
-3558 3777 l
-3544 3729 l
-3528 3681 l
-3510 3634 l
-S
-3241 3740 m
-3241 3740 l
-3241 3740 l
-3241 3740 l
-3241 3740 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3738 l
-3241 3738 l
-3240 3738 l
-3239 3735 l
-3238 3733 l
-3237 3730 l
-3236 3727 l
-3235 3725 l
-3234 3722 l
-3233 3720 l
-3232 3717 l
-3231 3714 l
-3229 3712 l
-3228 3709 l
-3227 3706 l
-3211 3670 l
-3193 3634 l
-3174 3598 l
-3153 3564 l
-3132 3530 l
-3109 3497 l
-3085 3464 l
-3060 3433 l
-3034 3402 l
-3007 3373 l
-2979 3344 l
-2950 3316 l
-2920 3289 l
-2889 3264 l
-2858 3239 l
-2825 3216 l
-2792 3193 l
-2757 3172 l
-2723 3152 l
-2687 3134 l
-2651 3116 l
-2614 3100 l
-2577 3085 l
-2539 3071 l
-2501 3059 l
-2462 3048 l
-2423 3038 l
-2384 3030 l
-2344 3023 l
-2305 3018 l
-2265 3014 l
-2225 3011 l
-2185 3010 l
-2144 3010 l
-2104 3011 l
-2064 3014 l
-2024 3018 l
-1985 3024 l
-1945 3031 l
-1906 3039 l
-1867 3049 l
-1828 3060 l
-1790 3072 l
-1752 3086 l
-1715 3101 l
-1678 3118 l
-1642 3135 l
-1607 3154 l
-1572 3174 l
-1538 3195 l
-1505 3218 l
-1472 3241 l
-1440 3266 l
-1410 3292 l
-1380 3319 l
-1351 3346 l
-1323 3375 l
-1296 3405 l
-1270 3436 l
-1245 3467 l
-1221 3500 l
-1199 3533 l
-1178 3567 l
-1157 3602 l
-1138 3637 l
-1121 3673 l
-1104 3710 l
-1089 3747 l
-1075 3785 l
-1062 3823 l
-1051 3861 l
-1041 3900 l
-1033 3939 l
-1026 3979 l
-1020 4019 l
-1015 4059 l
-1012 4099 l
-1011 4139 l
-1010 4179 l
-1011 4219 l
-1014 4259 l
-1018 4299 l
-1023 4339 l
-1030 4379 l
-1038 4418 l
-1047 4457 l
-1058 4496 l
-1070 4534 l
-1084 4572 l
-1098 4609 l
-1114 4646 l
-1132 4682 l
-1150 4718 l
-1170 4753 l
-1191 4787 l
-1213 4821 l
-1236 4854 l
-1261 4885 l
-1286 4916 l
-1313 4947 l
-1340 4976 l
-1369 5004 l
-1399 5031 l
-1429 5057 l
-1460 5082 l
-1493 5106 l
-1526 5129 l
-1560 5151 l
-1594 5171 l
-1629 5191 l
-1665 5209 l
-1702 5226 l
-1739 5241 l
-1776 5255 l
-1814 5268 l
-1853 5280 l
-1892 5290 l
-1931 5299 l
-1970 5306 l
-2010 5313 l
-2050 5317 l
-2090 5321 l
-2130 5323 l
-2170 5323 l
-2210 5322 l
-2250 5320 l
-2290 5317 l
-2330 5312 l
-2370 5305 l
-2409 5297 l
-2448 5288 l
-2487 5278 l
-2525 5266 l
-2563 5253 l
-2601 5239 l
-2638 5223 l
-2674 5206 l
-2710 5188 l
-2745 5168 l
-2779 5147 l
-2813 5126 l
-2846 5102 l
-2878 5078 l
-2909 5053 l
-2939 5027 l
-2969 4999 l
-2997 4971 l
-3025 4942 l
-3051 4911 l
-3076 4880 l
-3101 4848 l
-3124 4815 l
-3146 4782 l
-3166 4747 l
-3186 4712 l
-3204 4676 l
-3221 4640 l
-3237 4603 l
-3252 4566 l
-3265 4528 l
-3277 4489 l
-3287 4451 l
-3296 4411 l
-3304 4372 l
-3311 4332 l
-3316 4293 l
-3319 4253 l
-3322 4212 l
-3323 4172 l
-3322 4132 l
-3320 4092 l
-3317 4052 l
-3312 4012 l
-3306 3972 l
-3299 3933 l
-S
-3299 3933 m
-3290 3894 l
-3280 3855 l
-3268 3816 l
-3256 3778 l
-3241 3741 l
-S
-2973 3847 m
-2973 3847 l
-2972 3847 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3845 l
-2972 3845 l
-2972 3845 l
-2971 3843 l
-2970 3841 l
-2970 3839 l
-2969 3837 l
-2968 3835 l
-2967 3833 l
-2966 3831 l
-2965 3829 l
-2965 3827 l
-2964 3825 l
-2963 3823 l
-2962 3821 l
-2950 3794 l
-2936 3767 l
-2922 3740 l
-2907 3714 l
-2890 3689 l
-2873 3664 l
-2856 3640 l
-2837 3616 l
-2817 3593 l
-2797 3571 l
-2776 3549 l
-2754 3529 l
-2732 3509 l
-2709 3489 l
-2685 3471 l
-2660 3453 l
-2635 3437 l
-2610 3421 l
-2584 3406 l
-2557 3392 l
-2530 3379 l
-2502 3366 l
-2474 3355 l
-2446 3345 l
-2417 3336 l
-2388 3328 l
-2359 3320 l
-2330 3314 l
-2300 3309 l
-2270 3305 l
-2240 3302 l
-2210 3300 l
-2180 3299 l
-2150 3299 l
-2120 3300 l
-2090 3302 l
-2060 3305 l
-2030 3310 l
-2000 3315 l
-1971 3321 l
-1942 3328 l
-1913 3337 l
-1884 3346 l
-1856 3356 l
-1828 3368 l
-1800 3380 l
-1773 3393 l
-1747 3407 l
-1721 3422 l
-1695 3438 l
-1670 3455 l
-1646 3473 l
-1622 3491 l
-1599 3510 l
-1576 3530 l
-1555 3551 l
-1534 3573 l
-1514 3595 l
-1494 3618 l
-1476 3642 l
-1458 3666 l
-1441 3691 l
-1425 3717 l
-1410 3743 l
-1395 3769 l
-1382 3796 l
-1370 3824 l
-1358 3852 l
-1348 3880 l
-1338 3909 l
-1330 3938 l
-1323 3967 l
-1316 3996 l
-1311 4026 l
-1306 4056 l
-1303 4086 l
-1301 4116 l
-1300 4146 l
-1299 4176 l
-1300 4206 l
-1302 4236 l
-1305 4266 l
-1309 4296 l
-1314 4326 l
-1320 4355 l
-1327 4384 l
-1335 4413 l
-1344 4442 l
-1354 4471 l
-1365 4499 l
-1377 4526 l
-1390 4553 l
-1404 4580 l
-1419 4606 l
-1435 4632 l
-1451 4657 l
-1469 4682 l
-1487 4706 l
-1506 4729 l
-1526 4752 l
-1547 4773 l
-1568 4795 l
-1591 4815 l
-1613 4835 l
-1637 4853 l
-1661 4871 l
-1686 4889 l
-1711 4905 l
-1737 4920 l
-1764 4935 l
-1790 4948 l
-1818 4961 l
-1846 4972 l
-1874 4983 l
-1902 4993 l
-1931 5001 l
-1960 5009 l
-1990 5016 l
-2019 5021 l
-2049 5026 l
-2079 5030 l
-2109 5032 l
-2139 5034 l
-2169 5034 l
-2199 5033 l
-2229 5032 l
-2259 5029 l
-2289 5025 l
-2319 5021 l
-2348 5015 l
-2378 5008 l
-2407 5000 l
-2436 4991 l
-2464 4981 l
-2492 4971 l
-2520 4959 l
-2547 4946 l
-2574 4932 l
-2600 4918 l
-2626 4902 l
-2651 4886 l
-2676 4868 l
-2700 4850 l
-2723 4831 l
-2746 4812 l
-2768 4791 l
-2790 4770 l
-2810 4748 l
-2830 4725 l
-2849 4702 l
-2867 4678 l
-2884 4653 l
-2901 4628 l
-2916 4602 l
-2931 4576 l
-2945 4549 l
-2958 4522 l
-2969 4494 l
-2980 4466 l
-2990 4437 l
-2999 4409 l
-3007 4380 l
-3014 4350 l
-3020 4321 l
-3025 4291 l
-3028 4261 l
-3031 4231 l
-3033 4201 l
-3034 4171 l
-3033 4141 l
-3032 4111 l
-3029 4081 l
-3026 4051 l
-3021 4021 l
-3016 3991 l
-S
-3016 3991 m
-3009 3962 l
-3001 3933 l
-2993 3904 l
-2983 3875 l
-2973 3847 l
-S
-2704 3953 m
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3952 l
-2703 3952 l
-2703 3952 l
-2703 3951 l
-2702 3950 l
-2702 3948 l
-2701 3947 l
-2701 3946 l
-2700 3944 l
-2700 3943 l
-2699 3942 l
-2699 3940 l
-2698 3939 l
-2697 3938 l
-2697 3936 l
-2689 3918 l
-2680 3900 l
-2670 3882 l
-2660 3865 l
-2649 3848 l
-2638 3832 l
-2626 3815 l
-2613 3800 l
-2600 3784 l
-2587 3769 l
-2573 3755 l
-2558 3741 l
-2543 3728 l
-2528 3715 l
-2512 3703 l
-2496 3691 l
-2479 3680 l
-2462 3669 l
-2445 3659 l
-2427 3650 l
-2409 3641 l
-2390 3633 l
-2372 3626 l
-2353 3619 l
-2334 3613 l
-2314 3607 l
-2295 3602 l
-2275 3598 l
-2255 3595 l
-2236 3592 l
-2216 3590 l
-2196 3589 l
-2176 3588 l
-2155 3588 l
-2135 3589 l
-2115 3590 l
-2095 3592 l
-2076 3595 l
-2056 3599 l
-2036 3603 l
-2017 3608 l
-1997 3613 l
-1978 3619 l
-1959 3626 l
-1941 3634 l
-1922 3642 l
-1904 3651 l
-1887 3660 l
-1869 3670 l
-1852 3681 l
-1836 3692 l
-1819 3704 l
-1803 3716 l
-1788 3729 l
-1773 3742 l
-1759 3756 l
-1745 3771 l
-1731 3786 l
-1718 3801 l
-1706 3817 l
-1694 3833 l
-1683 3850 l
-1672 3867 l
-1662 3884 l
-1652 3902 l
-1644 3920 l
-1635 3938 l
-1628 3957 l
-1621 3975 l
-1614 3995 l
-1609 4014 l
-1604 4033 l
-1600 4053 l
-1596 4073 l
-1593 4093 l
-1591 4112 l
-1589 4133 l
-1589 4153 l
-1588 4173 l
-1589 4193 l
-1590 4213 l
-1592 4233 l
-1595 4253 l
-1598 4273 l
-1602 4292 l
-1607 4312 l
-1612 4331 l
-1618 4350 l
-1625 4369 l
-1632 4388 l
-1640 4406 l
-1649 4424 l
-1658 4442 l
-1668 4460 l
-1679 4477 l
-1690 4494 l
-1701 4510 l
-1714 4526 l
-1726 4541 l
-1740 4556 l
-1753 4571 l
-1768 4585 l
-1783 4599 l
-1798 4612 l
-1813 4624 l
-1830 4636 l
-1846 4648 l
-1863 4659 l
-1880 4669 l
-1898 4679 l
-1916 4688 l
-1934 4696 l
-1953 4704 l
-1971 4711 l
-1990 4717 l
-2010 4723 l
-2029 4728 l
-2049 4733 l
-2068 4736 l
-2088 4739 l
-2108 4742 l
-2128 4743 l
-2148 4744 l
-2168 4745 l
-2188 4744 l
-2208 4743 l
-2228 4741 l
-2248 4739 l
-2268 4736 l
-2288 4732 l
-2307 4727 l
-2327 4722 l
-2346 4716 l
-2365 4710 l
-2384 4702 l
-2402 4695 l
-2420 4686 l
-2438 4677 l
-2456 4667 l
-2473 4657 l
-2490 4646 l
-2506 4634 l
-2522 4622 l
-2538 4610 l
-2553 4597 l
-2568 4583 l
-2582 4569 l
-2596 4554 l
-2609 4539 l
-2621 4523 l
-2634 4507 l
-2645 4491 l
-2656 4474 l
-2666 4457 l
-2676 4439 l
-2685 4421 l
-2694 4403 l
-2702 4385 l
-2709 4366 l
-2716 4347 l
-2722 4328 l
-2727 4308 l
-2731 4289 l
-2735 4269 l
-2739 4249 l
-2741 4229 l
-2743 4209 l
-2744 4189 l
-2745 4169 l
-2744 4149 l
-2743 4129 l
-2742 4109 l
-2739 4089 l
-2736 4069 l
-2733 4050 l
-S
-2733 4050 m
-2728 4030 l
-2723 4011 l
-2717 3991 l
-2711 3972 l
-2704 3953 l
-S
-2435 4060 m
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2434 4058 l
-2434 4057 l
-2434 4057 l
-2434 4056 l
-2433 4055 l
-2433 4055 l
-2433 4054 l
-2432 4053 l
-2432 4053 l
-2432 4052 l
-2432 4051 l
-2427 4042 l
-2423 4033 l
-2418 4024 l
-2413 4016 l
-2408 4007 l
-2402 3999 l
-2396 3991 l
-2390 3983 l
-2383 3975 l
-2377 3968 l
-2370 3961 l
-2362 3954 l
-2355 3947 l
-2347 3941 l
-2339 3935 l
-2331 3929 l
-2323 3923 l
-2314 3918 l
-2305 3913 l
-2297 3908 l
-2288 3904 l
-2278 3900 l
-2269 3896 l
-2260 3893 l
-2250 3890 l
-2240 3887 l
-2231 3884 l
-2221 3882 l
-2211 3881 l
-2201 3879 l
-2191 3878 l
-2181 3878 l
-2171 3877 l
-2161 3877 l
-2151 3878 l
-2141 3878 l
-2131 3879 l
-2121 3881 l
-2111 3882 l
-2101 3885 l
-2092 3887 l
-2082 3890 l
-2072 3893 l
-2063 3896 l
-2054 3900 l
-2044 3904 l
-2035 3909 l
-2027 3913 l
-2018 3918 l
-2009 3924 l
-2001 3929 l
-1993 3935 l
-1985 3941 l
-1977 3948 l
-1970 3954 l
-1963 3961 l
-1956 3969 l
-1949 3976 l
-1942 3984 l
-1936 3992 l
-1930 4000 l
-1925 4008 l
-1919 4016 l
-1914 4025 l
-1909 4034 l
-1905 4043 l
-1901 4052 l
-1897 4061 l
-1894 4071 l
-1890 4080 l
-1888 4090 l
-1885 4100 l
-1883 4110 l
-1881 4120 l
-1880 4129 l
-1879 4139 l
-1878 4149 l
-1877 4159 l
-1877 4170 l
-1878 4180 l
-1878 4190 l
-1879 4200 l
-1881 4210 l
-1882 4219 l
-1884 4229 l
-1887 4239 l
-1889 4249 l
-1892 4258 l
-1896 4268 l
-1899 4277 l
-1903 4286 l
-1908 4295 l
-1912 4304 l
-1917 4313 l
-1923 4322 l
-1928 4330 l
-1934 4338 l
-1940 4346 l
-1946 4354 l
-1953 4361 l
-1960 4369 l
-1967 4376 l
-1974 4383 l
-1982 4389 l
-1990 4395 l
-1998 4401 l
-2006 4407 l
-2015 4412 l
-2023 4418 l
-2032 4422 l
-2041 4427 l
-2050 4431 l
-2059 4435 l
-2069 4439 l
-2078 4442 l
-2088 4445 l
-2098 4447 l
-2107 4449 l
-2117 4451 l
-2127 4453 l
-2137 4454 l
-2147 4455 l
-2157 4455 l
-2167 4456 l
-2177 4455 l
-2187 4455 l
-2197 4454 l
-2207 4453 l
-2217 4451 l
-2227 4449 l
-2237 4447 l
-2247 4444 l
-2256 4441 l
-2266 4438 l
-2275 4434 l
-2284 4430 l
-2293 4426 l
-2302 4422 l
-2311 4417 l
-2320 4412 l
-2328 4406 l
-2336 4400 l
-2344 4394 l
-2352 4388 l
-2360 4381 l
-2367 4375 l
-2374 4368 l
-2381 4360 l
-2388 4353 l
-2394 4345 l
-2400 4337 l
-2406 4329 l
-2411 4320 l
-2416 4312 l
-2421 4303 l
-2426 4294 l
-2430 4285 l
-2434 4276 l
-2438 4266 l
-2441 4257 l
-2444 4247 l
-2447 4237 l
-2449 4228 l
-2451 4218 l
-2452 4208 l
-2454 4198 l
-2455 4188 l
-2455 4178 l
-2455 4168 l
-2455 4158 l
-2455 4148 l
-2454 4138 l
-2453 4128 l
-2451 4118 l
-2450 4108 l
-S
-2450 4108 m
-2447 4098 l
-2445 4088 l
-2442 4079 l
-2439 4069 l
-2435 4060 l
-S
-2166 4166 m
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-3682 3323 m
-3655 3337 l
-S
-3559 3132 m
-3534 3150 l
-S
-3412 2959 m
-3390 2980 l
-S
-3057 2677 m
-3041 2704 l
-S
-2855 2574 m
-2843 2602 l
-S
-2642 2498 m
-2633 2527 l
-S
-2194 2431 m
-2193 2462 l
-S
-1967 2443 m
-1971 2473 l
-S
-1744 2483 m
-1751 2513 l
-S
-1323 2650 m
-1338 2677 l
-S
-1132 2773 m
-1151 2798 l
-S
-960 2920 m
-981 2942 l
-S
-678 3275 m
-704 3291 l
-S
-575 3477 m
-603 3489 l
-S
-651 5010 m
-678 4995 l
-S
-774 5201 m
-799 5183 l
-S
-921 5374 m
-943 5353 l
-S
-1276 5655 m
-1291 5629 l
-S
-1478 5759 m
-1490 5731 l
-S
-1691 5835 m
-1700 5806 l
-S
-2139 5901 m
-2140 5871 l
-S
-2366 5890 m
-2362 5860 l
-S
-2589 5849 m
-2582 5820 l
-S
-3010 5683 m
-2995 5656 l
-S
-3200 5560 m
-3182 5535 l
-S
-3373 5413 m
-3352 5391 l
-S
-3655 5058 m
-3628 5042 l
-S
-3758 4856 m
-3730 4844 l
-S
-3834 4642 m
-3805 4634 l
-S
-3900 4194 m
-3870 4193 l
-S
-3889 3967 m
-3859 3971 l
-S
-3848 3744 m
-3819 3751 l
-S
-4787 3129 m
-4799 3156 l
-S
-4719 3155 m
-4732 3183 l
-S
-4652 3182 m
-4665 3209 l
-S
-4518 3235 m
-4531 3263 l
-S
-4451 3262 m
-4463 3289 l
-S
-4384 3288 m
-4396 3316 l
-S
-4249 3341 m
-4262 3369 l
-S
-4182 3368 m
-4195 3396 l
-S
-4115 3395 m
-4127 3422 l
-S
-3980 3448 m
-3993 3476 l
-S
-3913 3474 m
-3926 3502 l
-S
-3846 3501 m
-3859 3529 l
-S
-3712 3554 m
-3724 3582 l
-S
-3645 3581 m
-3657 3609 l
-S
-3577 3608 m
-3590 3635 l
-S
-3443 3661 m
-3456 3688 l
-S
-3376 3687 m
-3388 3715 l
-S
-3309 3714 m
-3321 3742 l
-S
-3174 3767 m
-3187 3795 l
-S
-3107 3794 m
-3120 3821 l
-S
-3040 3820 m
-3052 3848 l
-S
-2905 3874 m
-2918 3901 l
-S
-2838 3900 m
-2851 3928 l
-S
-2771 3927 m
-2784 3955 l
-S
-2637 3980 m
-2649 4008 l
-S
-2570 4007 m
-2582 4034 l
-S
-2502 4033 m
-2515 4061 l
-S
-2368 4087 m
-2381 4114 l
-S
-2301 4113 m
-2313 4141 l
-S
-2234 4140 m
-2246 4167 l
-S
-3779 3528 m
-3754 3468 l
-3727 3409 l
-3697 3351 l
-3666 3294 l
-3632 3239 l
-3596 3185 l
-3559 3132 l
-3519 3080 l
-3478 3031 l
-3434 2982 l
-3389 2936 l
-3342 2891 l
-3294 2848 l
-3244 2807 l
-S
-3244 2807 m
-3192 2767 l
-3139 2730 l
-3085 2694 l
-3029 2661 l
-2972 2630 l
-2914 2601 l
-2855 2574 l
-2795 2549 l
-2734 2527 l
-2673 2507 l
-2610 2489 l
-2547 2473 l
-2484 2460 l
-2420 2450 l
-S
-2420 2450 m
-2355 2441 l
-2291 2436 l
-2226 2432 l
-2161 2431 l
-2096 2432 l
-2032 2436 l
-1967 2443 l
-1903 2451 l
-1839 2462 l
-1775 2476 l
-1713 2492 l
-1650 2510 l
-1589 2530 l
-1528 2553 l
-S
-1528 2553 m
-1468 2578 l
-1409 2605 l
-1351 2635 l
-1295 2666 l
-1239 2700 l
-1185 2735 l
-1132 2773 l
-1081 2813 l
-1031 2854 l
-983 2898 l
-936 2943 l
-892 2990 l
-849 3038 l
-807 3088 l
-S
-807 3088 m
-768 3140 l
-731 3193 l
-695 3247 l
-662 3303 l
-631 3360 l
-602 3418 l
-575 3477 l
-550 3537 l
-533 3583 l
-S
-533 4749 m
-554 4805 l
-S
-554 4805 m
-579 4865 l
-606 4924 l
-636 4982 l
-667 5038 l
-701 5094 l
-736 5148 l
-774 5201 l
-814 5252 l
-855 5302 l
-899 5350 l
-944 5397 l
-991 5442 l
-1039 5485 l
-1089 5526 l
-S
-1089 5526 m
-1141 5566 l
-1194 5603 l
-1248 5638 l
-1304 5672 l
-1361 5703 l
-1419 5732 l
-1478 5759 l
-1538 5784 l
-1599 5806 l
-1660 5826 l
-1723 5844 l
-1786 5859 l
-1849 5872 l
-1913 5883 l
-S
-1913 5883 m
-1977 5891 l
-2042 5897 l
-2107 5901 l
-2172 5902 l
-2237 5900 l
-2301 5896 l
-2366 5890 l
-2430 5881 l
-2494 5870 l
-2557 5857 l
-2620 5841 l
-2683 5823 l
-2744 5803 l
-2805 5780 l
-S
-2805 5780 m
-2865 5755 l
-2924 5728 l
-2981 5698 l
-3038 5667 l
-3094 5633 l
-3148 5597 l
-3200 5560 l
-3252 5520 l
-3302 5478 l
-3350 5435 l
-3396 5390 l
-3441 5343 l
-3484 5294 l
-3526 5244 l
-S
-3526 5244 m
-3565 5193 l
-3602 5140 l
-3638 5085 l
-3671 5030 l
-3702 4973 l
-3731 4915 l
-3758 4856 l
-3783 4796 l
-3805 4735 l
-3825 4673 l
-3843 4611 l
-3858 4548 l
-3871 4484 l
-3882 4420 l
-S
-3882 4420 m
-3890 4356 l
-3896 4291 l
-3900 4226 l
-3901 4161 l
-3899 4096 l
-3895 4032 l
-3889 3967 l
-3881 3903 l
-3869 3839 l
-3856 3775 l
-3840 3712 l
-3822 3650 l
-3802 3588 l
-3800 3584 l
-3799 3580 l
-3797 3575 l
-3795 3571 l
-3794 3567 l
-3792 3562 l
-3791 3558 l
-3789 3554 l
-3787 3549 l
-3786 3545 l
-3784 3541 l
-3782 3536 l
-3781 3532 l
-3780 3532 l
-3780 3531 l
-3780 3531 l
-3780 3531 l
-3780 3530 l
-3780 3530 l
-3780 3530 l
-3780 3530 l
-3779 3529 l
-3779 3529 l
-3779 3529 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-S
-4877 3093 m
-4873 3094 l
-4854 3102 l
-S
-4854 3102 m
-4835 3110 l
-4815 3117 l
-4796 3125 l
-4777 3132 l
-4758 3140 l
-4739 3148 l
-4719 3155 l
-4700 3163 l
-4681 3170 l
-4662 3178 l
-4643 3186 l
-4624 3193 l
-4604 3201 l
-4585 3208 l
-S
-4585 3208 m
-4566 3216 l
-4547 3224 l
-4528 3231 l
-4508 3239 l
-4489 3246 l
-4470 3254 l
-4451 3262 l
-4432 3269 l
-4412 3277 l
-4393 3284 l
-4374 3292 l
-4355 3300 l
-4336 3307 l
-4316 3315 l
-S
-4316 3315 m
-4297 3322 l
-4278 3330 l
-4259 3338 l
-4240 3345 l
-4220 3353 l
-4201 3360 l
-4182 3368 l
-4163 3376 l
-4144 3383 l
-4124 3391 l
-4105 3398 l
-4086 3406 l
-4067 3414 l
-4048 3421 l
-S
-4048 3421 m
-4028 3429 l
-4009 3436 l
-3990 3444 l
-3971 3452 l
-3952 3459 l
-3932 3467 l
-3913 3474 l
-3894 3482 l
-3875 3490 l
-3856 3497 l
-3836 3505 l
-3817 3512 l
-3798 3520 l
-3779 3528 l
-S
-3779 3528 m
-3760 3535 l
-3740 3543 l
-3721 3551 l
-3702 3558 l
-3683 3566 l
-3664 3573 l
-3645 3581 l
-3625 3589 l
-3606 3596 l
-3587 3604 l
-3568 3611 l
-3549 3619 l
-3529 3627 l
-3510 3634 l
-S
-3510 3634 m
-3491 3642 l
-3472 3649 l
-3453 3657 l
-3433 3665 l
-3414 3672 l
-3395 3680 l
-3376 3687 l
-3357 3695 l
-3337 3703 l
-3318 3710 l
-3299 3718 l
-3280 3725 l
-3261 3733 l
-3241 3741 l
-S
-3241 3741 m
-3222 3748 l
-3203 3756 l
-3184 3763 l
-3165 3771 l
-3145 3779 l
-3126 3786 l
-3107 3794 l
-3088 3801 l
-3069 3809 l
-3049 3817 l
-3030 3824 l
-3011 3832 l
-2992 3839 l
-2973 3847 l
-S
-2973 3847 m
-2953 3855 l
-2934 3862 l
-2915 3870 l
-2896 3877 l
-2877 3885 l
-2857 3893 l
-2838 3900 l
-2819 3908 l
-2800 3915 l
-2781 3923 l
-2762 3931 l
-2742 3938 l
-2723 3946 l
-2704 3953 l
-S
-2704 3953 m
-2685 3961 l
-2666 3969 l
-2646 3976 l
-2627 3984 l
-2608 3991 l
-2589 3999 l
-2570 4007 l
-2550 4014 l
-2531 4022 l
-2512 4029 l
-2493 4037 l
-2474 4045 l
-2454 4052 l
-2435 4060 l
-S
-2435 4060 m
-2416 4068 l
-2397 4075 l
-2378 4083 l
-2358 4090 l
-2339 4098 l
-2320 4106 l
-2301 4113 l
-2282 4121 l
-2262 4128 l
-2243 4136 l
-2224 4144 l
-2205 4151 l
-2186 4159 l
-2166 4166 l
-S
-2166 4166 m
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1 g
-3911 3420 m
-3914 3420 l
-3914 3421 l
-3911 3421 l
-3908 3421 m
-3914 3421 l
-3914 3422 l
-3908 3422 l
-3906 3422 m
-3915 3422 l
-3915 3423 l
-3906 3423 l
-3903 3423 m
-3915 3423 l
-3915 3424 l
-3903 3424 l
-3901 3424 m
-3916 3424 l
-3916 3425 l
-3901 3425 l
-3898 3425 m
-3916 3425 l
-3916 3426 l
-3898 3426 l
-3896 3426 m
-3916 3426 l
-3916 3427 l
-3896 3427 l
-3893 3427 m
-3917 3427 l
-3917 3428 l
-3893 3428 l
-3891 3428 m
-3917 3428 l
-3917 3429 l
-3891 3429 l
-3888 3429 m
-3918 3429 l
-3918 3430 l
-3888 3430 l
-3886 3430 m
-3918 3430 l
-3918 3431 l
-3886 3431 l
-3883 3431 m
-3918 3431 l
-3918 3432 l
-3883 3432 l
-3881 3432 m
-3919 3432 l
-3919 3433 l
-3881 3433 l
-3878 3433 m
-3919 3433 l
-3919 3434 l
-3878 3434 l
-3876 3434 m
-3920 3434 l
-3920 3435 l
-3876 3435 l
-3873 3435 m
-3920 3435 l
-3920 3436 l
-3873 3436 l
-3871 3436 m
-3920 3436 l
-3920 3437 l
-3871 3437 l
-3868 3437 m
-3921 3437 l
-3921 3438 l
-3868 3438 l
-3866 3438 m
-3921 3438 l
-3921 3439 l
-3866 3439 l
-3863 3439 m
-3922 3439 l
-3922 3440 l
-3863 3440 l
-3861 3440 m
-3922 3440 l
-3922 3441 l
-3861 3441 l
-3858 3441 m
-3922 3441 l
-3922 3442 l
-3858 3442 l
-3856 3442 m
-3923 3442 l
-3923 3443 l
-3856 3443 l
-3853 3443 m
-3923 3443 l
-3923 3444 l
-3853 3444 l
-3851 3444 m
-3924 3444 l
-3924 3445 l
-3851 3445 l
-3848 3445 m
-3924 3445 l
-3924 3446 l
-3848 3446 l
-3846 3446 m
-3924 3446 l
-3924 3447 l
-3846 3447 l
-3843 3447 m
-3925 3447 l
-3925 3448 l
-3843 3448 l
-3841 3448 m
-3925 3448 l
-3925 3449 l
-3841 3449 l
-3838 3449 m
-3926 3449 l
-3926 3450 l
-3838 3450 l
-3836 3450 m
-3926 3450 l
-3926 3451 l
-3836 3451 l
-3833 3451 m
-3926 3451 l
-3926 3452 l
-3833 3452 l
-3831 3452 m
-3927 3452 l
-3927 3453 l
-3831 3453 l
-3828 3453 m
-3927 3453 l
-3927 3454 l
-3828 3454 l
-3826 3454 m
-3927 3454 l
-3927 3455 l
-3826 3455 l
-3823 3455 m
-3928 3455 l
-3928 3456 l
-3823 3456 l
-3821 3456 m
-3928 3456 l
-3928 3457 l
-3821 3457 l
-3818 3457 m
-3929 3457 l
-3929 3458 l
-3818 3458 l
-3816 3458 m
-3929 3458 l
-3929 3459 l
-3816 3459 l
-3813 3459 m
-3929 3459 l
-3929 3460 l
-3813 3460 l
-3811 3460 m
-3930 3460 l
-3930 3461 l
-3811 3461 l
-3808 3461 m
-3930 3461 l
-3930 3462 l
-3808 3462 l
-3806 3462 m
-3931 3462 l
-3931 3463 l
-3806 3463 l
-3803 3463 m
-3931 3463 l
-3931 3464 l
-3803 3464 l
-3801 3464 m
-3931 3464 l
-3931 3465 l
-3801 3465 l
-3801 3465 m
-3932 3465 l
-3932 3467 l
-3801 3467 l
-3801 3467 m
-3933 3467 l
-3933 3468 l
-3801 3468 l
-3802 3468 m
-3933 3468 l
-3933 3470 l
-3802 3470 l
-3802 3470 m
-3934 3470 l
-3934 3471 l
-3802 3471 l
-3803 3471 m
-3934 3471 l
-3934 3472 l
-3803 3472 l
-3803 3472 m
-3935 3472 l
-3935 3473 l
-3803 3473 l
-3804 3473 m
-3935 3473 l
-3935 3475 l
-3804 3475 l
-3804 3475 m
-3936 3475 l
-3936 3476 l
-3804 3476 l
-3805 3476 m
-3936 3476 l
-3936 3477 l
-3805 3477 l
-3805 3477 m
-3937 3477 l
-3937 3478 l
-3805 3478 l
-3806 3478 m
-3937 3478 l
-3937 3480 l
-3806 3480 l
-3806 3480 m
-3938 3480 l
-3938 3481 l
-3806 3481 l
-3807 3481 m
-3938 3481 l
-3938 3482 l
-3807 3482 l
-3807 3482 m
-3939 3482 l
-3939 3483 l
-3807 3483 l
-3808 3483 m
-3939 3483 l
-3939 3485 l
-3808 3485 l
-3808 3485 m
-3940 3485 l
-3940 3486 l
-3808 3486 l
-3809 3486 m
-3940 3486 l
-3940 3487 l
-3809 3487 l
-3809 3487 m
-3941 3487 l
-3941 3488 l
-3809 3488 l
-3810 3488 m
-3941 3488 l
-3941 3490 l
-3810 3490 l
-3810 3490 m
-3942 3490 l
-3942 3491 l
-3810 3491 l
-3811 3491 m
-3942 3491 l
-3942 3492 l
-3811 3492 l
-3811 3492 m
-3943 3492 l
-3943 3493 l
-3811 3493 l
-3812 3493 m
-3943 3493 l
-3943 3495 l
-3812 3495 l
-3812 3495 m
-3944 3495 l
-3944 3496 l
-3812 3496 l
-3813 3496 m
-3944 3496 l
-3944 3497 l
-3813 3497 l
-3813 3497 m
-3945 3497 l
-3945 3498 l
-3813 3498 l
-3814 3498 m
-3945 3498 l
-3945 3500 l
-3814 3500 l
-3814 3500 m
-3946 3500 l
-3946 3501 l
-3814 3501 l
-3815 3501 m
-3946 3501 l
-3946 3502 l
-3815 3502 l
-3815 3502 m
-3947 3502 l
-3947 3503 l
-3815 3503 l
-3816 3503 m
-3947 3503 l
-3947 3505 l
-3816 3505 l
-3816 3505 m
-3948 3505 l
-3948 3506 l
-3816 3506 l
-3817 3506 m
-3948 3506 l
-3948 3507 l
-3817 3507 l
-3817 3507 m
-3949 3507 l
-3949 3508 l
-3817 3508 l
-3818 3508 m
-3949 3508 l
-3949 3510 l
-3818 3510 l
-3818 3510 m
-3950 3510 l
-3950 3511 l
-3818 3511 l
-3819 3511 m
-3950 3511 l
-3950 3512 l
-3819 3512 l
-3819 3512 m
-3950 3512 l
-3950 3513 l
-3819 3513 l
-3820 3513 m
-3950 3513 l
-3950 3514 l
-3820 3514 l
-3820 3514 m
-3948 3514 l
-3948 3515 l
-3820 3515 l
-3820 3515 m
-3946 3515 l
-3946 3516 l
-3820 3516 l
-3821 3516 m
-3943 3516 l
-3943 3517 l
-3821 3517 l
-3821 3517 m
-3941 3517 l
-3941 3518 l
-3821 3518 l
-3822 3518 m
-3938 3518 l
-3938 3519 l
-3822 3519 l
-3822 3519 m
-3936 3519 l
-3936 3520 l
-3822 3520 l
-3822 3520 m
-3933 3520 l
-3933 3521 l
-3822 3521 l
-3823 3521 m
-3931 3521 l
-3931 3522 l
-3823 3522 l
-3823 3522 m
-3928 3522 l
-3928 3523 l
-3823 3523 l
-3824 3523 m
-3926 3523 l
-3926 3524 l
-3824 3524 l
-3824 3524 m
-3923 3524 l
-3923 3525 l
-3824 3525 l
-3824 3525 m
-3921 3525 l
-3921 3526 l
-3824 3526 l
-3825 3526 m
-3918 3526 l
-3918 3527 l
-3825 3527 l
-3825 3527 m
-3916 3527 l
-3916 3528 l
-3825 3528 l
-3826 3528 m
-3913 3528 l
-3913 3529 l
-3826 3529 l
-3826 3529 m
-3911 3529 l
-3911 3530 l
-3826 3530 l
-3826 3530 m
-3908 3530 l
-3908 3531 l
-3826 3531 l
-3827 3531 m
-3906 3531 l
-3906 3532 l
-3827 3532 l
-3827 3532 m
-3903 3532 l
-3903 3533 l
-3827 3533 l
-3828 3533 m
-3901 3533 l
-3901 3534 l
-3828 3534 l
-3828 3534 m
-3898 3534 l
-3898 3535 l
-3828 3535 l
-3828 3535 m
-3896 3535 l
-3896 3536 l
-3828 3536 l
-3829 3536 m
-3893 3536 l
-3893 3537 l
-3829 3537 l
-3829 3537 m
-3891 3537 l
-3891 3538 l
-3829 3538 l
-3830 3538 m
-3888 3538 l
-3888 3539 l
-3830 3539 l
-3830 3539 m
-3886 3539 l
-3886 3540 l
-3830 3540 l
-3830 3540 m
-3883 3540 l
-3883 3541 l
-3830 3541 l
-3831 3541 m
-3881 3541 l
-3881 3542 l
-3831 3542 l
-3831 3542 m
-3878 3542 l
-3878 3543 l
-3831 3543 l
-3832 3543 m
-3876 3543 l
-3876 3544 l
-3832 3544 l
-3832 3544 m
-3873 3544 l
-3873 3545 l
-3832 3545 l
-3832 3545 m
-3871 3545 l
-3871 3546 l
-3832 3546 l
-3833 3546 m
-3868 3546 l
-3868 3547 l
-3833 3547 l
-3833 3547 m
-3866 3547 l
-3866 3548 l
-3833 3548 l
-3834 3548 m
-3863 3548 l
-3863 3549 l
-3834 3549 l
-3834 3549 m
-3861 3549 l
-3861 3550 l
-3834 3550 l
-3834 3550 m
-3858 3550 l
-3858 3551 l
-3834 3551 l
-3835 3551 m
-3856 3551 l
-3856 3552 l
-3835 3552 l
-3835 3552 m
-3853 3552 l
-3853 3553 l
-3835 3553 l
-3836 3553 m
-3851 3553 l
-3851 3554 l
-3836 3554 l
-3836 3554 m
-3848 3554 l
-3848 3555 l
-3836 3555 l
-3836 3555 m
-3846 3555 l
-3846 3556 l
-3836 3556 l
-3837 3556 m
-3843 3556 l
-3843 3557 l
-3837 3557 l
-3837 3557 m
-3841 3557 l
-3841 3558 l
-3837 3558 l
-Y
-3913.2 3420.2 m
-3801 3465 l
-3838 3558 l
-3950 3513 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3833 3502 m
-3832 3488 l
-3841 3476 l
-3859 3464 l
-3870 3460 l
-3891 3456 l
-3906 3459 l
-3915 3469 l
-3918 3477 l
-3919 3490 l
-3910 3502 l
-3892 3514 l
-3880 3519 l
-3860 3523 l
-3845 3519 l
-3836 3509 l
-3833 3502 l
-S
-1 g
-3305 2646 m
-3308 2646 l
-3308 2647 l
-3305 2647 l
-3304 2647 m
-3309 2647 l
-3309 2648 l
-3304 2648 l
-3304 2648 m
-3310 2648 l
-3310 2649 l
-3304 2649 l
-3303 2649 m
-3311 2649 l
-3311 2650 l
-3303 2650 l
-3302 2650 m
-3313 2650 l
-3313 2651 l
-3302 2651 l
-3301 2651 m
-3314 2651 l
-3314 2652 l
-3301 2652 l
-3300 2652 m
-3315 2652 l
-3315 2653 l
-3300 2653 l
-3300 2653 m
-3317 2653 l
-3317 2654 l
-3300 2654 l
-3299 2654 m
-3318 2654 l
-3318 2655 l
-3299 2655 l
-3298 2655 m
-3319 2655 l
-3319 2656 l
-3298 2656 l
-3297 2656 m
-3320 2656 l
-3320 2657 l
-3297 2657 l
-3296 2657 m
-3322 2657 l
-3322 2658 l
-3296 2658 l
-3296 2658 m
-3323 2658 l
-3323 2659 l
-3296 2659 l
-3295 2659 m
-3324 2659 l
-3324 2660 l
-3295 2660 l
-3294 2660 m
-3325 2660 l
-3325 2661 l
-3294 2661 l
-3293 2661 m
-3327 2661 l
-3327 2662 l
-3293 2662 l
-3292 2662 m
-3328 2662 l
-3328 2663 l
-3292 2663 l
-3292 2663 m
-3329 2663 l
-3329 2664 l
-3292 2664 l
-3291 2664 m
-3331 2664 l
-3331 2665 l
-3291 2665 l
-3290 2665 m
-3332 2665 l
-3332 2666 l
-3290 2666 l
-3289 2666 m
-3333 2666 l
-3333 2667 l
-3289 2667 l
-3288 2667 m
-3334 2667 l
-3334 2668 l
-3288 2668 l
-3288 2668 m
-3336 2668 l
-3336 2669 l
-3288 2669 l
-3287 2669 m
-3337 2669 l
-3337 2670 l
-3287 2670 l
-3286 2670 m
-3338 2670 l
-3338 2671 l
-3286 2671 l
-3285 2671 m
-3340 2671 l
-3340 2672 l
-3285 2672 l
-3284 2672 m
-3341 2672 l
-3341 2673 l
-3284 2673 l
-3284 2673 m
-3342 2673 l
-3342 2674 l
-3284 2674 l
-3283 2674 m
-3343 2674 l
-3343 2675 l
-3283 2675 l
-3282 2675 m
-3345 2675 l
-3345 2676 l
-3282 2676 l
-3281 2676 m
-3346 2676 l
-3346 2677 l
-3281 2677 l
-3281 2677 m
-3347 2677 l
-3347 2678 l
-3281 2678 l
-3280 2678 m
-3348 2678 l
-3348 2679 l
-3280 2679 l
-3279 2679 m
-3350 2679 l
-3350 2680 l
-3279 2680 l
-3278 2680 m
-3351 2680 l
-3351 2681 l
-3278 2681 l
-3277 2681 m
-3352 2681 l
-3352 2682 l
-3277 2682 l
-3277 2682 m
-3354 2682 l
-3354 2683 l
-3277 2683 l
-3276 2683 m
-3355 2683 l
-3355 2684 l
-3276 2684 l
-3275 2684 m
-3356 2684 l
-3356 2685 l
-3275 2685 l
-3274 2685 m
-3357 2685 l
-3357 2686 l
-3274 2686 l
-3273 2686 m
-3359 2686 l
-3359 2687 l
-3273 2687 l
-3273 2687 m
-3360 2687 l
-3360 2688 l
-3273 2688 l
-3272 2688 m
-3361 2688 l
-3361 2689 l
-3272 2689 l
-3271 2689 m
-3363 2689 l
-3363 2690 l
-3271 2690 l
-3270 2690 m
-3364 2690 l
-3364 2691 l
-3270 2691 l
-3269 2691 m
-3365 2691 l
-3365 2692 l
-3269 2692 l
-3269 2692 m
-3366 2692 l
-3366 2693 l
-3269 2693 l
-3268 2693 m
-3368 2693 l
-3368 2694 l
-3268 2694 l
-3267 2694 m
-3369 2694 l
-3369 2695 l
-3267 2695 l
-3266 2695 m
-3370 2695 l
-3370 2696 l
-3266 2696 l
-3265 2696 m
-3371 2696 l
-3371 2697 l
-3265 2697 l
-3265 2697 m
-3373 2697 l
-3373 2698 l
-3265 2698 l
-3264 2698 m
-3374 2698 l
-3374 2699 l
-3264 2699 l
-3263 2699 m
-3375 2699 l
-3375 2700 l
-3263 2700 l
-3262 2700 m
-3377 2700 l
-3377 2701 l
-3262 2701 l
-3261 2701 m
-3378 2701 l
-3378 2702 l
-3261 2702 l
-3261 2702 m
-3379 2702 l
-3379 2703 l
-3261 2703 l
-3260 2703 m
-3380 2703 l
-3380 2704 l
-3260 2704 l
-3259 2704 m
-3382 2704 l
-3382 2705 l
-3259 2705 l
-3258 2705 m
-3383 2705 l
-3383 2706 l
-3258 2706 l
-3257 2706 m
-3384 2706 l
-3384 2707 l
-3257 2707 l
-3257 2707 m
-3385 2707 l
-3385 2708 l
-3257 2708 l
-3256 2708 m
-3385 2708 l
-3385 2709 l
-3256 2709 l
-3255 2709 m
-3385 2709 l
-3385 2710 l
-3255 2710 l
-3254 2710 m
-3384 2710 l
-3384 2711 l
-3254 2711 l
-3254 2711 m
-3383 2711 l
-3383 2712 l
-3254 2712 l
-3253 2712 m
-3382 2712 l
-3382 2713 l
-3253 2713 l
-3252 2713 m
-3382 2713 l
-3382 2714 l
-3252 2714 l
-3251 2714 m
-3381 2714 l
-3381 2715 l
-3251 2715 l
-3250 2715 m
-3380 2715 l
-3380 2716 l
-3250 2716 l
-3250 2716 m
-3379 2716 l
-3379 2717 l
-3250 2717 l
-3249 2717 m
-3378 2717 l
-3378 2718 l
-3249 2718 l
-3248 2718 m
-3378 2718 l
-3378 2719 l
-3248 2719 l
-3247 2719 m
-3377 2719 l
-3377 2720 l
-3247 2720 l
-3246 2720 m
-3376 2720 l
-3376 2721 l
-3246 2721 l
-3246 2721 m
-3375 2721 l
-3375 2722 l
-3246 2722 l
-3245 2722 m
-3374 2722 l
-3374 2723 l
-3245 2723 l
-3244 2723 m
-3374 2723 l
-3374 2724 l
-3244 2724 l
-3243 2724 m
-3373 2724 l
-3373 2725 l
-3243 2725 l
-3242 2725 m
-3372 2725 l
-3372 2726 l
-3242 2726 l
-3242 2726 m
-3371 2726 l
-3371 2727 l
-3242 2727 l
-3241 2727 m
-3370 2727 l
-3370 2728 l
-3241 2728 l
-3240 2728 m
-3370 2728 l
-3370 2729 l
-3240 2729 l
-3239 2729 m
-3369 2729 l
-3369 2730 l
-3239 2730 l
-3238 2730 m
-3368 2730 l
-3368 2731 l
-3238 2731 l
-3238 2731 m
-3367 2731 l
-3367 2732 l
-3238 2732 l
-3237 2732 m
-3367 2732 l
-3367 2733 l
-3237 2733 l
-3236 2733 m
-3366 2733 l
-3366 2734 l
-3236 2734 l
-3235 2734 m
-3365 2734 l
-3365 2735 l
-3235 2735 l
-3234 2735 m
-3364 2735 l
-3364 2736 l
-3234 2736 l
-3234 2736 m
-3363 2736 l
-3363 2737 l
-3234 2737 l
-3233 2737 m
-3363 2737 l
-3363 2738 l
-3233 2738 l
-3232 2738 m
-3362 2738 l
-3362 2739 l
-3232 2739 l
-3231 2739 m
-3361 2739 l
-3361 2740 l
-3231 2740 l
-3231 2740 m
-3360 2740 l
-3360 2741 l
-3231 2741 l
-3231 2741 m
-3359 2741 l
-3359 2742 l
-3231 2742 l
-3232 2742 m
-3359 2742 l
-3359 2743 l
-3232 2743 l
-3233 2743 m
-3358 2743 l
-3358 2744 l
-3233 2744 l
-3234 2744 m
-3357 2744 l
-3357 2745 l
-3234 2745 l
-3236 2745 m
-3356 2745 l
-3356 2746 l
-3236 2746 l
-3237 2746 m
-3355 2746 l
-3355 2747 l
-3237 2747 l
-3238 2747 m
-3355 2747 l
-3355 2748 l
-3238 2748 l
-3239 2748 m
-3354 2748 l
-3354 2749 l
-3239 2749 l
-3241 2749 m
-3353 2749 l
-3353 2750 l
-3241 2750 l
-3242 2750 m
-3352 2750 l
-3352 2751 l
-3242 2751 l
-3243 2751 m
-3352 2751 l
-3352 2752 l
-3243 2752 l
-3245 2752 m
-3351 2752 l
-3351 2753 l
-3245 2753 l
-3246 2753 m
-3350 2753 l
-3350 2754 l
-3246 2754 l
-3247 2754 m
-3349 2754 l
-3349 2755 l
-3247 2755 l
-3248 2755 m
-3348 2755 l
-3348 2756 l
-3248 2756 l
-3250 2756 m
-3348 2756 l
-3348 2757 l
-3250 2757 l
-3251 2757 m
-3347 2757 l
-3347 2758 l
-3251 2758 l
-3252 2758 m
-3346 2758 l
-3346 2759 l
-3252 2759 l
-3253 2759 m
-3345 2759 l
-3345 2760 l
-3253 2760 l
-3255 2760 m
-3344 2760 l
-3344 2761 l
-3255 2761 l
-3256 2761 m
-3344 2761 l
-3344 2762 l
-3256 2762 l
-3257 2762 m
-3343 2762 l
-3343 2763 l
-3257 2763 l
-3259 2763 m
-3342 2763 l
-3342 2764 l
-3259 2764 l
-3260 2764 m
-3341 2764 l
-3341 2765 l
-3260 2765 l
-3261 2765 m
-3340 2765 l
-3340 2766 l
-3261 2766 l
-3262 2766 m
-3340 2766 l
-3340 2767 l
-3262 2767 l
-3264 2767 m
-3339 2767 l
-3339 2768 l
-3264 2768 l
-3265 2768 m
-3338 2768 l
-3338 2769 l
-3265 2769 l
-3266 2769 m
-3337 2769 l
-3337 2770 l
-3266 2770 l
-3267 2770 m
-3337 2770 l
-3337 2771 l
-3267 2771 l
-3269 2771 m
-3336 2771 l
-3336 2772 l
-3269 2772 l
-3270 2772 m
-3335 2772 l
-3335 2773 l
-3270 2773 l
-3271 2773 m
-3334 2773 l
-3334 2774 l
-3271 2774 l
-3273 2774 m
-3333 2774 l
-3333 2775 l
-3273 2775 l
-3274 2775 m
-3333 2775 l
-3333 2776 l
-3274 2776 l
-3275 2776 m
-3332 2776 l
-3332 2777 l
-3275 2777 l
-3276 2777 m
-3331 2777 l
-3331 2778 l
-3276 2778 l
-3278 2778 m
-3330 2778 l
-3330 2779 l
-3278 2779 l
-3279 2779 m
-3329 2779 l
-3329 2780 l
-3279 2780 l
-3280 2780 m
-3329 2780 l
-3329 2781 l
-3280 2781 l
-3281 2781 m
-3328 2781 l
-3328 2782 l
-3281 2782 l
-3283 2782 m
-3327 2782 l
-3327 2783 l
-3283 2783 l
-3284 2783 m
-3326 2783 l
-3326 2784 l
-3284 2784 l
-3285 2784 m
-3325 2784 l
-3325 2785 l
-3285 2785 l
-3287 2785 m
-3325 2785 l
-3325 2786 l
-3287 2786 l
-3288 2786 m
-3324 2786 l
-3324 2787 l
-3288 2787 l
-3289 2787 m
-3323 2787 l
-3323 2788 l
-3289 2788 l
-3290 2788 m
-3322 2788 l
-3322 2789 l
-3290 2789 l
-3292 2789 m
-3322 2789 l
-3322 2790 l
-3292 2790 l
-3293 2790 m
-3321 2790 l
-3321 2791 l
-3293 2791 l
-3294 2791 m
-3320 2791 l
-3320 2792 l
-3294 2792 l
-3295 2792 m
-3319 2792 l
-3319 2793 l
-3295 2793 l
-3297 2793 m
-3318 2793 l
-3318 2794 l
-3297 2794 l
-3298 2794 m
-3318 2794 l
-3318 2795 l
-3298 2795 l
-3299 2795 m
-3317 2795 l
-3317 2796 l
-3299 2796 l
-3301 2796 m
-3316 2796 l
-3316 2797 l
-3301 2797 l
-3302 2797 m
-3315 2797 l
-3315 2798 l
-3302 2798 l
-3303 2798 m
-3314 2798 l
-3314 2799 l
-3303 2799 l
-3304 2799 m
-3314 2799 l
-3314 2800 l
-3304 2800 l
-3306 2800 m
-3313 2800 l
-3313 2801 l
-3306 2801 l
-3307 2801 m
-3312 2801 l
-3312 2802 l
-3307 2802 l
-3308 2802 m
-3311 2802 l
-3311 2803 l
-3308 2803 l
-Y
-3306.2 2646.3 m
-3231 2741 l
-3310 2803 l
-3385 2708 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3274 2727 m
-3272 2731 l
-3270 2740 l
-3270 2746 l
-3274 2754 l
-3287 2764 l
-3297 2766 l
-3302 2766 l
-3311 2762 l
-3316 2755 l
-3318 2746 l
-3319 2731 l
-3312 2672 l
-3358 2709 l
-S
-1 g
-2393 2280 m
-2403 2280 l
-2403 2281 l
-2393 2281 l
-2393 2281 m
-2410 2281 l
-2410 2282 l
-2393 2282 l
-2393 2282 m
-2417 2282 l
-2417 2283 l
-2393 2283 l
-2393 2283 m
-2423 2283 l
-2423 2284 l
-2393 2284 l
-2393 2284 m
-2430 2284 l
-2430 2285 l
-2393 2285 l
-2392 2285 m
-2437 2285 l
-2437 2286 l
-2392 2286 l
-2392 2286 m
-2444 2286 l
-2444 2287 l
-2392 2287 l
-2392 2287 m
-2450 2287 l
-2450 2288 l
-2392 2288 l
-2392 2288 m
-2457 2288 l
-2457 2289 l
-2392 2289 l
-2392 2289 m
-2464 2289 l
-2464 2290 l
-2392 2290 l
-2392 2290 m
-2471 2290 l
-2471 2291 l
-2392 2291 l
-2391 2291 m
-2477 2291 l
-2477 2292 l
-2391 2292 l
-2391 2292 m
-2484 2292 l
-2484 2293 l
-2391 2293 l
-2391 2293 m
-2491 2293 l
-2491 2294 l
-2391 2294 l
-2391 2294 m
-2497 2294 l
-2497 2295 l
-2391 2295 l
-2391 2295 m
-2498 2295 l
-2498 2296 l
-2391 2296 l
-2391 2296 m
-2497 2296 l
-2497 2298 l
-2391 2298 l
-2390 2298 m
-2497 2298 l
-2497 2303 l
-2390 2303 l
-2390 2303 m
-2496 2303 l
-2496 2305 l
-2390 2305 l
-2389 2305 m
-2496 2305 l
-2496 2310 l
-2389 2310 l
-2389 2310 m
-2495 2310 l
-2495 2312 l
-2389 2312 l
-2388 2312 m
-2495 2312 l
-2495 2317 l
-2388 2317 l
-2388 2317 m
-2494 2317 l
-2494 2318 l
-2388 2318 l
-2387 2318 m
-2494 2318 l
-2494 2324 l
-2387 2324 l
-2387 2324 m
-2493 2324 l
-2493 2325 l
-2387 2325 l
-2386 2325 m
-2493 2325 l
-2493 2331 l
-2386 2331 l
-2386 2331 m
-2492 2331 l
-2492 2332 l
-2386 2332 l
-2385 2332 m
-2492 2332 l
-2492 2338 l
-2385 2338 l
-2385 2338 m
-2491 2338 l
-2491 2339 l
-2385 2339 l
-2384 2339 m
-2491 2339 l
-2491 2345 l
-2384 2345 l
-2383 2345 m
-2490 2345 l
-2490 2352 l
-2383 2352 l
-2382 2352 m
-2489 2352 l
-2489 2359 l
-2382 2359 l
-2381 2359 m
-2488 2359 l
-2488 2366 l
-2381 2366 l
-2380 2366 m
-2487 2366 l
-2487 2372 l
-2380 2372 l
-2379 2372 m
-2487 2372 l
-2487 2373 l
-2379 2373 l
-2379 2373 m
-2486 2373 l
-2486 2379 l
-2379 2379 l
-2378 2379 m
-2486 2379 l
-2486 2380 l
-2378 2380 l
-2378 2380 m
-2485 2380 l
-2485 2386 l
-2378 2386 l
-2377 2386 m
-2485 2386 l
-2485 2387 l
-2377 2387 l
-2377 2387 m
-2484 2387 l
-2484 2393 l
-2377 2393 l
-2376 2393 m
-2484 2393 l
-2484 2394 l
-2376 2394 l
-2376 2394 m
-2483 2394 l
-2483 2400 l
-2376 2400 l
-2376 2400 m
-2483 2400 l
-2483 2401 l
-2376 2401 l
-2382 2401 m
-2482 2401 l
-2482 2402 l
-2382 2402 l
-2389 2402 m
-2482 2402 l
-2482 2403 l
-2389 2403 l
-2396 2403 m
-2482 2403 l
-2482 2404 l
-2396 2404 l
-2403 2404 m
-2482 2404 l
-2482 2405 l
-2403 2405 l
-2410 2405 m
-2482 2405 l
-2482 2406 l
-2410 2406 l
-2417 2406 m
-2482 2406 l
-2482 2407 l
-2417 2407 l
-2424 2407 m
-2482 2407 l
-2482 2408 l
-2424 2408 l
-2431 2408 m
-2481 2408 l
-2481 2409 l
-2431 2409 l
-2438 2409 m
-2481 2409 l
-2481 2410 l
-2438 2410 l
-2445 2410 m
-2481 2410 l
-2481 2411 l
-2445 2411 l
-2452 2411 m
-2481 2411 l
-2481 2412 l
-2452 2412 l
-2459 2412 m
-2481 2412 l
-2481 2413 l
-2459 2413 l
-2466 2413 m
-2481 2413 l
-2481 2414 l
-2466 2414 l
-2473 2414 m
-2481 2414 l
-2481 2415 l
-2473 2415 l
-Y
-2393.8 2279.7 m
-2376 2400 l
-2480 2415 l
-2497 2295 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2441 2392 m
-2408 2328 l
-2470 2337 l
-S
-2441 2392 m
-2453 2305 l
-S
-1 g
-1513 2399 m
-1517 2399 l
-1517 2400 l
-1513 2400 l
-1510 2400 m
-1517 2400 l
-1517 2401 l
-1510 2401 l
-1508 2401 m
-1518 2401 l
-1518 2402 l
-1508 2402 l
-1505 2402 m
-1518 2402 l
-1518 2403 l
-1505 2403 l
-1503 2403 m
-1518 2403 l
-1518 2404 l
-1503 2404 l
-1500 2404 m
-1519 2404 l
-1519 2405 l
-1500 2405 l
-1498 2405 m
-1519 2405 l
-1519 2406 l
-1498 2406 l
-1495 2406 m
-1520 2406 l
-1520 2407 l
-1495 2407 l
-1493 2407 m
-1520 2407 l
-1520 2408 l
-1493 2408 l
-1490 2408 m
-1520 2408 l
-1520 2409 l
-1490 2409 l
-1488 2409 m
-1521 2409 l
-1521 2410 l
-1488 2410 l
-1485 2410 m
-1521 2410 l
-1521 2411 l
-1485 2411 l
-1482 2411 m
-1522 2411 l
-1522 2412 l
-1482 2412 l
-1480 2412 m
-1522 2412 l
-1522 2413 l
-1480 2413 l
-1477 2413 m
-1522 2413 l
-1522 2414 l
-1477 2414 l
-1475 2414 m
-1523 2414 l
-1523 2415 l
-1475 2415 l
-1472 2415 m
-1523 2415 l
-1523 2416 l
-1472 2416 l
-1470 2416 m
-1524 2416 l
-1524 2417 l
-1470 2417 l
-1467 2417 m
-1524 2417 l
-1524 2418 l
-1467 2418 l
-1465 2418 m
-1524 2418 l
-1524 2419 l
-1465 2419 l
-1462 2419 m
-1525 2419 l
-1525 2420 l
-1462 2420 l
-1460 2420 m
-1525 2420 l
-1525 2421 l
-1460 2421 l
-1457 2421 m
-1526 2421 l
-1526 2422 l
-1457 2422 l
-1454 2422 m
-1526 2422 l
-1526 2423 l
-1454 2423 l
-1452 2423 m
-1526 2423 l
-1526 2424 l
-1452 2424 l
-1449 2424 m
-1527 2424 l
-1527 2425 l
-1449 2425 l
-1447 2425 m
-1527 2425 l
-1527 2426 l
-1447 2426 l
-1444 2426 m
-1528 2426 l
-1528 2427 l
-1444 2427 l
-1442 2427 m
-1528 2427 l
-1528 2428 l
-1442 2428 l
-1439 2428 m
-1528 2428 l
-1528 2429 l
-1439 2429 l
-1437 2429 m
-1529 2429 l
-1529 2430 l
-1437 2430 l
-1434 2430 m
-1529 2430 l
-1529 2431 l
-1434 2431 l
-1432 2431 m
-1530 2431 l
-1530 2432 l
-1432 2432 l
-1429 2432 m
-1530 2432 l
-1530 2433 l
-1429 2433 l
-1427 2433 m
-1530 2433 l
-1530 2434 l
-1427 2434 l
-1427 2434 m
-1531 2434 l
-1531 2436 l
-1427 2436 l
-1427 2436 m
-1532 2436 l
-1532 2437 l
-1427 2437 l
-1428 2437 m
-1532 2437 l
-1532 2439 l
-1428 2439 l
-1428 2439 m
-1533 2439 l
-1533 2440 l
-1428 2440 l
-1429 2440 m
-1533 2440 l
-1533 2441 l
-1429 2441 l
-1429 2441 m
-1534 2441 l
-1534 2442 l
-1429 2442 l
-1430 2442 m
-1534 2442 l
-1534 2444 l
-1430 2444 l
-1430 2444 m
-1535 2444 l
-1535 2445 l
-1430 2445 l
-1431 2445 m
-1535 2445 l
-1535 2446 l
-1431 2446 l
-1431 2446 m
-1536 2446 l
-1536 2447 l
-1431 2447 l
-1432 2447 m
-1536 2447 l
-1536 2449 l
-1432 2449 l
-1432 2449 m
-1537 2449 l
-1537 2450 l
-1432 2450 l
-1433 2450 m
-1537 2450 l
-1537 2451 l
-1433 2451 l
-1433 2451 m
-1538 2451 l
-1538 2452 l
-1433 2452 l
-1434 2452 m
-1538 2452 l
-1538 2454 l
-1434 2454 l
-1434 2454 m
-1539 2454 l
-1539 2455 l
-1434 2455 l
-1435 2455 m
-1539 2455 l
-1539 2456 l
-1435 2456 l
-1435 2456 m
-1540 2456 l
-1540 2457 l
-1435 2457 l
-1436 2457 m
-1540 2457 l
-1540 2459 l
-1436 2459 l
-1436 2459 m
-1541 2459 l
-1541 2460 l
-1436 2460 l
-1437 2460 m
-1541 2460 l
-1541 2461 l
-1437 2461 l
-1437 2461 m
-1542 2461 l
-1542 2462 l
-1437 2462 l
-1438 2462 m
-1542 2462 l
-1542 2464 l
-1438 2464 l
-1438 2464 m
-1543 2464 l
-1543 2465 l
-1438 2465 l
-1439 2465 m
-1543 2465 l
-1543 2466 l
-1439 2466 l
-1439 2466 m
-1544 2466 l
-1544 2467 l
-1439 2467 l
-1440 2467 m
-1544 2467 l
-1544 2469 l
-1440 2469 l
-1440 2469 m
-1545 2469 l
-1545 2470 l
-1440 2470 l
-1441 2470 m
-1545 2470 l
-1545 2471 l
-1441 2471 l
-1441 2471 m
-1546 2471 l
-1546 2472 l
-1441 2472 l
-1442 2472 m
-1546 2472 l
-1546 2474 l
-1442 2474 l
-1442 2474 m
-1547 2474 l
-1547 2475 l
-1442 2475 l
-1443 2475 m
-1547 2475 l
-1547 2476 l
-1443 2476 l
-1443 2476 m
-1548 2476 l
-1548 2477 l
-1443 2477 l
-1444 2477 m
-1548 2477 l
-1548 2479 l
-1444 2479 l
-1444 2479 m
-1549 2479 l
-1549 2480 l
-1444 2480 l
-1445 2480 m
-1549 2480 l
-1549 2481 l
-1445 2481 l
-1445 2481 m
-1550 2481 l
-1550 2482 l
-1445 2482 l
-1446 2482 m
-1550 2482 l
-1550 2484 l
-1446 2484 l
-1446 2484 m
-1551 2484 l
-1551 2485 l
-1446 2485 l
-1447 2485 m
-1551 2485 l
-1551 2486 l
-1447 2486 l
-1447 2486 m
-1552 2486 l
-1552 2487 l
-1447 2487 l
-1448 2487 m
-1552 2487 l
-1552 2489 l
-1448 2489 l
-1448 2489 m
-1553 2489 l
-1553 2490 l
-1448 2490 l
-1449 2490 m
-1553 2490 l
-1553 2491 l
-1449 2491 l
-1449 2491 m
-1554 2491 l
-1554 2492 l
-1449 2492 l
-1450 2492 m
-1554 2492 l
-1554 2494 l
-1450 2494 l
-1450 2494 m
-1555 2494 l
-1555 2495 l
-1450 2495 l
-1451 2495 m
-1555 2495 l
-1555 2496 l
-1451 2496 l
-1451 2496 m
-1556 2496 l
-1556 2497 l
-1451 2497 l
-1452 2497 m
-1556 2497 l
-1556 2499 l
-1452 2499 l
-1452 2499 m
-1557 2499 l
-1557 2500 l
-1452 2500 l
-1453 2500 m
-1557 2500 l
-1557 2501 l
-1453 2501 l
-1453 2501 m
-1558 2501 l
-1558 2502 l
-1453 2502 l
-1454 2502 m
-1558 2502 l
-1558 2504 l
-1454 2504 l
-1454 2504 m
-1559 2504 l
-1559 2505 l
-1454 2505 l
-1455 2505 m
-1559 2505 l
-1559 2506 l
-1455 2506 l
-1455 2506 m
-1560 2506 l
-1560 2507 l
-1455 2507 l
-1456 2507 m
-1560 2507 l
-1560 2509 l
-1456 2509 l
-1456 2509 m
-1561 2509 l
-1561 2510 l
-1456 2510 l
-1457 2510 m
-1561 2510 l
-1561 2511 l
-1457 2511 l
-1457 2511 m
-1561 2511 l
-1561 2512 l
-1457 2512 l
-1458 2512 m
-1559 2512 l
-1559 2513 l
-1458 2513 l
-1458 2513 m
-1556 2513 l
-1556 2514 l
-1458 2514 l
-1458 2514 m
-1554 2514 l
-1554 2515 l
-1458 2515 l
-1459 2515 m
-1551 2515 l
-1551 2516 l
-1459 2516 l
-1459 2516 m
-1549 2516 l
-1549 2517 l
-1459 2517 l
-1460 2517 m
-1546 2517 l
-1546 2518 l
-1460 2518 l
-1460 2518 m
-1544 2518 l
-1544 2519 l
-1460 2519 l
-1460 2519 m
-1541 2519 l
-1541 2520 l
-1460 2520 l
-1461 2520 m
-1539 2520 l
-1539 2521 l
-1461 2521 l
-1461 2521 m
-1537 2521 l
-1537 2522 l
-1461 2522 l
-1462 2522 m
-1534 2522 l
-1534 2523 l
-1462 2523 l
-1462 2523 m
-1532 2523 l
-1532 2524 l
-1462 2524 l
-1462 2524 m
-1529 2524 l
-1529 2525 l
-1462 2525 l
-1463 2525 m
-1527 2525 l
-1527 2526 l
-1463 2526 l
-1463 2526 m
-1524 2526 l
-1524 2527 l
-1463 2527 l
-1464 2527 m
-1522 2527 l
-1522 2528 l
-1464 2528 l
-1464 2528 m
-1519 2528 l
-1519 2529 l
-1464 2529 l
-1464 2529 m
-1517 2529 l
-1517 2530 l
-1464 2530 l
-1465 2530 m
-1514 2530 l
-1514 2531 l
-1465 2531 l
-1465 2531 m
-1512 2531 l
-1512 2532 l
-1465 2532 l
-1466 2532 m
-1509 2532 l
-1509 2533 l
-1466 2533 l
-1466 2533 m
-1507 2533 l
-1507 2534 l
-1466 2534 l
-1466 2534 m
-1505 2534 l
-1505 2535 l
-1466 2535 l
-1467 2535 m
-1502 2535 l
-1502 2536 l
-1467 2536 l
-1467 2536 m
-1500 2536 l
-1500 2537 l
-1467 2537 l
-1468 2537 m
-1497 2537 l
-1497 2538 l
-1468 2538 l
-1468 2538 m
-1495 2538 l
-1495 2539 l
-1468 2539 l
-1468 2539 m
-1492 2539 l
-1492 2540 l
-1468 2540 l
-1469 2540 m
-1490 2540 l
-1490 2541 l
-1469 2541 l
-1469 2541 m
-1487 2541 l
-1487 2542 l
-1469 2542 l
-1470 2542 m
-1485 2542 l
-1485 2543 l
-1470 2543 l
-1470 2543 m
-1482 2543 l
-1482 2544 l
-1470 2544 l
-1470 2544 m
-1480 2544 l
-1480 2545 l
-1470 2545 l
-1471 2545 m
-1477 2545 l
-1477 2546 l
-1471 2546 l
-1471 2546 m
-1475 2546 l
-1475 2547 l
-1471 2547 l
-Y
-1560.7 2511 m
-1516 2399 l
-1427 2434 l
-1472 2547 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1461 2452 m
-1462 2443 l
-1472 2434 l
-1479 2431 l
-1493 2430 l
-1505 2439 l
-1517 2457 l
-1524 2476 l
-1527 2493 l
-1522 2504 l
-1512 2513 l
-1508 2514 l
-1495 2515 l
-1484 2510 l
-1475 2500 l
-1474 2496 l
-1473 2483 l
-1478 2472 l
-1488 2464 l
-1492 2462 l
-1505 2461 l
-1516 2466 l
-1524 2476 l
-S
-1 g
-721 2958 m
-724 2958 l
-724 2959 l
-721 2959 l
-720 2959 m
-725 2959 l
-725 2960 l
-720 2960 l
-719 2960 m
-726 2960 l
-726 2961 l
-719 2961 l
-718 2961 m
-728 2961 l
-728 2962 l
-718 2962 l
-718 2962 m
-729 2962 l
-729 2963 l
-718 2963 l
-717 2963 m
-730 2963 l
-730 2964 l
-717 2964 l
-716 2964 m
-731 2964 l
-731 2965 l
-716 2965 l
-715 2965 m
-733 2965 l
-733 2966 l
-715 2966 l
-714 2966 m
-734 2966 l
-734 2967 l
-714 2967 l
-714 2967 m
-735 2967 l
-735 2968 l
-714 2968 l
-713 2968 m
-737 2968 l
-737 2969 l
-713 2969 l
-712 2969 m
-738 2969 l
-738 2970 l
-712 2970 l
-711 2970 m
-739 2970 l
-739 2971 l
-711 2971 l
-710 2971 m
-740 2971 l
-740 2972 l
-710 2972 l
-710 2972 m
-742 2972 l
-742 2973 l
-710 2973 l
-709 2973 m
-743 2973 l
-743 2974 l
-709 2974 l
-708 2974 m
-744 2974 l
-744 2975 l
-708 2975 l
-707 2975 m
-746 2975 l
-746 2976 l
-707 2976 l
-706 2976 m
-747 2976 l
-747 2977 l
-706 2977 l
-706 2977 m
-748 2977 l
-748 2978 l
-706 2978 l
-705 2978 m
-749 2978 l
-749 2979 l
-705 2979 l
-704 2979 m
-751 2979 l
-751 2980 l
-704 2980 l
-703 2980 m
-752 2980 l
-752 2981 l
-703 2981 l
-702 2981 m
-753 2981 l
-753 2982 l
-702 2982 l
-702 2982 m
-754 2982 l
-754 2983 l
-702 2983 l
-701 2983 m
-756 2983 l
-756 2984 l
-701 2984 l
-700 2984 m
-757 2984 l
-757 2985 l
-700 2985 l
-699 2985 m
-758 2985 l
-758 2986 l
-699 2986 l
-698 2986 m
-760 2986 l
-760 2987 l
-698 2987 l
-698 2987 m
-761 2987 l
-761 2988 l
-698 2988 l
-697 2988 m
-762 2988 l
-762 2989 l
-697 2989 l
-696 2989 m
-763 2989 l
-763 2990 l
-696 2990 l
-695 2990 m
-765 2990 l
-765 2991 l
-695 2991 l
-694 2991 m
-766 2991 l
-766 2992 l
-694 2992 l
-694 2992 m
-767 2992 l
-767 2993 l
-694 2993 l
-693 2993 m
-769 2993 l
-769 2994 l
-693 2994 l
-692 2994 m
-770 2994 l
-770 2995 l
-692 2995 l
-691 2995 m
-771 2995 l
-771 2996 l
-691 2996 l
-691 2996 m
-772 2996 l
-772 2997 l
-691 2997 l
-690 2997 m
-774 2997 l
-774 2998 l
-690 2998 l
-689 2998 m
-775 2998 l
-775 2999 l
-689 2999 l
-688 2999 m
-776 2999 l
-776 3000 l
-688 3000 l
-687 3000 m
-778 3000 l
-778 3001 l
-687 3001 l
-687 3001 m
-779 3001 l
-779 3002 l
-687 3002 l
-686 3002 m
-780 3002 l
-780 3003 l
-686 3003 l
-685 3003 m
-781 3003 l
-781 3004 l
-685 3004 l
-684 3004 m
-783 3004 l
-783 3005 l
-684 3005 l
-683 3005 m
-784 3005 l
-784 3006 l
-683 3006 l
-683 3006 m
-785 3006 l
-785 3007 l
-683 3007 l
-682 3007 m
-786 3007 l
-786 3008 l
-682 3008 l
-681 3008 m
-788 3008 l
-788 3009 l
-681 3009 l
-680 3009 m
-789 3009 l
-789 3010 l
-680 3010 l
-679 3010 m
-790 3010 l
-790 3011 l
-679 3011 l
-679 3011 m
-792 3011 l
-792 3012 l
-679 3012 l
-678 3012 m
-793 3012 l
-793 3013 l
-678 3013 l
-677 3013 m
-794 3013 l
-794 3014 l
-677 3014 l
-676 3014 m
-795 3014 l
-795 3015 l
-676 3015 l
-675 3015 m
-797 3015 l
-797 3016 l
-675 3016 l
-675 3016 m
-798 3016 l
-798 3017 l
-675 3017 l
-674 3017 m
-799 3017 l
-799 3018 l
-674 3018 l
-673 3018 m
-801 3018 l
-801 3019 l
-673 3019 l
-672 3019 m
-802 3019 l
-802 3020 l
-672 3020 l
-671 3020 m
-803 3020 l
-803 3021 l
-671 3021 l
-671 3021 m
-804 3021 l
-804 3022 l
-671 3022 l
-670 3022 m
-806 3022 l
-806 3023 l
-670 3023 l
-669 3023 m
-807 3023 l
-807 3024 l
-669 3024 l
-668 3024 m
-808 3024 l
-808 3025 l
-668 3025 l
-667 3025 m
-809 3025 l
-809 3026 l
-667 3026 l
-667 3026 m
-811 3026 l
-811 3027 l
-667 3027 l
-666 3027 m
-812 3027 l
-812 3028 l
-666 3028 l
-665 3028 m
-813 3028 l
-813 3029 l
-665 3029 l
-664 3029 m
-815 3029 l
-815 3030 l
-664 3030 l
-663 3030 m
-816 3030 l
-816 3031 l
-663 3031 l
-663 3031 m
-817 3031 l
-817 3032 l
-663 3032 l
-662 3032 m
-818 3032 l
-818 3033 l
-662 3033 l
-661 3033 m
-817 3033 l
-817 3034 l
-661 3034 l
-660 3034 m
-817 3034 l
-817 3035 l
-660 3035 l
-660 3035 m
-816 3035 l
-816 3036 l
-660 3036 l
-660 3036 m
-815 3036 l
-815 3037 l
-660 3037 l
-661 3037 m
-814 3037 l
-814 3038 l
-661 3038 l
-662 3038 m
-813 3038 l
-813 3039 l
-662 3039 l
-663 3039 m
-813 3039 l
-813 3040 l
-663 3040 l
-665 3040 m
-812 3040 l
-812 3041 l
-665 3041 l
-666 3041 m
-811 3041 l
-811 3042 l
-666 3042 l
-667 3042 m
-810 3042 l
-810 3043 l
-667 3043 l
-668 3043 m
-809 3043 l
-809 3044 l
-668 3044 l
-670 3044 m
-809 3044 l
-809 3045 l
-670 3045 l
-671 3045 m
-808 3045 l
-808 3046 l
-671 3046 l
-672 3046 m
-807 3046 l
-807 3047 l
-672 3047 l
-673 3047 m
-806 3047 l
-806 3048 l
-673 3048 l
-675 3048 m
-805 3048 l
-805 3049 l
-675 3049 l
-676 3049 m
-805 3049 l
-805 3050 l
-676 3050 l
-677 3050 m
-804 3050 l
-804 3051 l
-677 3051 l
-679 3051 m
-803 3051 l
-803 3052 l
-679 3052 l
-680 3052 m
-802 3052 l
-802 3053 l
-680 3053 l
-681 3053 m
-802 3053 l
-802 3054 l
-681 3054 l
-682 3054 m
-801 3054 l
-801 3055 l
-682 3055 l
-684 3055 m
-800 3055 l
-800 3056 l
-684 3056 l
-685 3056 m
-799 3056 l
-799 3057 l
-685 3057 l
-686 3057 m
-798 3057 l
-798 3058 l
-686 3058 l
-687 3058 m
-798 3058 l
-798 3059 l
-687 3059 l
-689 3059 m
-797 3059 l
-797 3060 l
-689 3060 l
-690 3060 m
-796 3060 l
-796 3061 l
-690 3061 l
-691 3061 m
-795 3061 l
-795 3062 l
-691 3062 l
-692 3062 m
-794 3062 l
-794 3063 l
-692 3063 l
-694 3063 m
-794 3063 l
-794 3064 l
-694 3064 l
-695 3064 m
-793 3064 l
-793 3065 l
-695 3065 l
-696 3065 m
-792 3065 l
-792 3066 l
-696 3066 l
-698 3066 m
-791 3066 l
-791 3067 l
-698 3067 l
-699 3067 m
-790 3067 l
-790 3068 l
-699 3068 l
-700 3068 m
-790 3068 l
-790 3069 l
-700 3069 l
-701 3069 m
-789 3069 l
-789 3070 l
-701 3070 l
-703 3070 m
-788 3070 l
-788 3071 l
-703 3071 l
-704 3071 m
-787 3071 l
-787 3072 l
-704 3072 l
-705 3072 m
-786 3072 l
-786 3073 l
-705 3073 l
-706 3073 m
-786 3073 l
-786 3074 l
-706 3074 l
-708 3074 m
-785 3074 l
-785 3075 l
-708 3075 l
-709 3075 m
-784 3075 l
-784 3076 l
-709 3076 l
-710 3076 m
-783 3076 l
-783 3077 l
-710 3077 l
-711 3077 m
-782 3077 l
-782 3078 l
-711 3078 l
-713 3078 m
-782 3078 l
-782 3079 l
-713 3079 l
-714 3079 m
-781 3079 l
-781 3080 l
-714 3080 l
-715 3080 m
-780 3080 l
-780 3081 l
-715 3081 l
-717 3081 m
-779 3081 l
-779 3082 l
-717 3082 l
-718 3082 m
-779 3082 l
-779 3083 l
-718 3083 l
-719 3083 m
-778 3083 l
-778 3084 l
-719 3084 l
-720 3084 m
-777 3084 l
-777 3085 l
-720 3085 l
-722 3085 m
-776 3085 l
-776 3086 l
-722 3086 l
-723 3086 m
-775 3086 l
-775 3087 l
-723 3087 l
-724 3087 m
-775 3087 l
-775 3088 l
-724 3088 l
-725 3088 m
-774 3088 l
-774 3089 l
-725 3089 l
-727 3089 m
-773 3089 l
-773 3090 l
-727 3090 l
-728 3090 m
-772 3090 l
-772 3091 l
-728 3091 l
-729 3091 m
-771 3091 l
-771 3092 l
-729 3092 l
-730 3092 m
-771 3092 l
-771 3093 l
-730 3093 l
-732 3093 m
-770 3093 l
-770 3094 l
-732 3094 l
-733 3094 m
-769 3094 l
-769 3095 l
-733 3095 l
-734 3095 m
-768 3095 l
-768 3096 l
-734 3096 l
-736 3096 m
-767 3096 l
-767 3097 l
-736 3097 l
-737 3097 m
-767 3097 l
-767 3098 l
-737 3098 l
-738 3098 m
-766 3098 l
-766 3099 l
-738 3099 l
-739 3099 m
-765 3099 l
-765 3100 l
-739 3100 l
-741 3100 m
-764 3100 l
-764 3101 l
-741 3101 l
-742 3101 m
-763 3101 l
-763 3102 l
-742 3102 l
-743 3102 m
-763 3102 l
-763 3103 l
-743 3103 l
-744 3103 m
-762 3103 l
-762 3104 l
-744 3104 l
-746 3104 m
-761 3104 l
-761 3105 l
-746 3105 l
-747 3105 m
-760 3105 l
-760 3106 l
-747 3106 l
-748 3106 m
-759 3106 l
-759 3107 l
-748 3107 l
-749 3107 m
-759 3107 l
-759 3108 l
-749 3108 l
-751 3108 m
-758 3108 l
-758 3109 l
-751 3109 l
-752 3109 m
-757 3109 l
-757 3110 l
-752 3110 l
-753 3110 m
-756 3110 l
-756 3111 l
-753 3111 l
-Y
-817.3 3032.5 m
-722 2958 l
-660 3036 l
-755 3111 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-709 3001 m
-720 2993 l
-730 2995 l
-736 3000 l
-740 3009 l
-738 3018 l
-731 3034 l
-727 3046 l
-728 3058 l
-732 3066 l
-742 3074 l
-751 3076 l
-757 3075 l
-768 3068 l
-778 3055 l
-783 3043 l
-782 3037 l
-778 3028 l
-768 3020 l
-759 3019 l
-747 3020 l
-736 3027 l
-723 3038 l
-714 3042 l
-705 3040 l
-699 3035 l
-695 3026 l
-699 3014 l
-709 3001 l
-S
-1 g
-1009 5498 m
-1013 5498 l
-1013 5499 l
-1009 5499 l
-1008 5499 m
-1014 5499 l
-1014 5500 l
-1008 5500 l
-1007 5500 m
-1015 5500 l
-1015 5501 l
-1007 5501 l
-1006 5501 m
-1017 5501 l
-1017 5502 l
-1006 5502 l
-1006 5502 m
-1018 5502 l
-1018 5503 l
-1006 5503 l
-1005 5503 m
-1019 5503 l
-1019 5504 l
-1005 5504 l
-1004 5504 m
-1020 5504 l
-1020 5505 l
-1004 5505 l
-1003 5505 m
-1022 5505 l
-1022 5506 l
-1003 5506 l
-1002 5506 m
-1023 5506 l
-1023 5507 l
-1002 5507 l
-1002 5507 m
-1024 5507 l
-1024 5508 l
-1002 5508 l
-1001 5508 m
-1025 5508 l
-1025 5509 l
-1001 5509 l
-1000 5509 m
-1027 5509 l
-1027 5510 l
-1000 5510 l
-999 5510 m
-1028 5510 l
-1028 5511 l
-999 5511 l
-998 5511 m
-1029 5511 l
-1029 5512 l
-998 5512 l
-998 5512 m
-1030 5512 l
-1030 5513 l
-998 5513 l
-997 5513 m
-1032 5513 l
-1032 5514 l
-997 5514 l
-996 5514 m
-1033 5514 l
-1033 5515 l
-996 5515 l
-995 5515 m
-1034 5515 l
-1034 5516 l
-995 5516 l
-994 5516 m
-1035 5516 l
-1035 5517 l
-994 5517 l
-994 5517 m
-1037 5517 l
-1037 5518 l
-994 5518 l
-993 5518 m
-1038 5518 l
-1038 5519 l
-993 5519 l
-992 5519 m
-1039 5519 l
-1039 5520 l
-992 5520 l
-991 5520 m
-1040 5520 l
-1040 5521 l
-991 5521 l
-990 5521 m
-1042 5521 l
-1042 5522 l
-990 5522 l
-990 5522 m
-1043 5522 l
-1043 5523 l
-990 5523 l
-989 5523 m
-1044 5523 l
-1044 5524 l
-989 5524 l
-988 5524 m
-1045 5524 l
-1045 5525 l
-988 5525 l
-987 5525 m
-1047 5525 l
-1047 5526 l
-987 5526 l
-986 5526 m
-1048 5526 l
-1048 5527 l
-986 5527 l
-986 5527 m
-1049 5527 l
-1049 5528 l
-986 5528 l
-985 5528 m
-1050 5528 l
-1050 5529 l
-985 5529 l
-984 5529 m
-1052 5529 l
-1052 5530 l
-984 5530 l
-983 5530 m
-1053 5530 l
-1053 5531 l
-983 5531 l
-982 5531 m
-1054 5531 l
-1054 5532 l
-982 5532 l
-982 5532 m
-1055 5532 l
-1055 5533 l
-982 5533 l
-981 5533 m
-1057 5533 l
-1057 5534 l
-981 5534 l
-980 5534 m
-1058 5534 l
-1058 5535 l
-980 5535 l
-979 5535 m
-1059 5535 l
-1059 5536 l
-979 5536 l
-978 5536 m
-1061 5536 l
-1061 5537 l
-978 5537 l
-978 5537 m
-1062 5537 l
-1062 5538 l
-978 5538 l
-977 5538 m
-1063 5538 l
-1063 5539 l
-977 5539 l
-976 5539 m
-1064 5539 l
-1064 5540 l
-976 5540 l
-975 5540 m
-1066 5540 l
-1066 5541 l
-975 5541 l
-974 5541 m
-1067 5541 l
-1067 5542 l
-974 5542 l
-974 5542 m
-1068 5542 l
-1068 5543 l
-974 5543 l
-973 5543 m
-1069 5543 l
-1069 5544 l
-973 5544 l
-972 5544 m
-1071 5544 l
-1071 5545 l
-972 5545 l
-971 5545 m
-1072 5545 l
-1072 5546 l
-971 5546 l
-970 5546 m
-1073 5546 l
-1073 5547 l
-970 5547 l
-970 5547 m
-1074 5547 l
-1074 5548 l
-970 5548 l
-969 5548 m
-1076 5548 l
-1076 5549 l
-969 5549 l
-968 5549 m
-1077 5549 l
-1077 5550 l
-968 5550 l
-967 5550 m
-1078 5550 l
-1078 5551 l
-967 5551 l
-966 5551 m
-1079 5551 l
-1079 5552 l
-966 5552 l
-966 5552 m
-1081 5552 l
-1081 5553 l
-966 5553 l
-965 5553 m
-1082 5553 l
-1082 5554 l
-965 5554 l
-964 5554 m
-1083 5554 l
-1083 5555 l
-964 5555 l
-963 5555 m
-1084 5555 l
-1084 5556 l
-963 5556 l
-962 5556 m
-1086 5556 l
-1086 5557 l
-962 5557 l
-962 5557 m
-1087 5557 l
-1087 5558 l
-962 5558 l
-961 5558 m
-1088 5558 l
-1088 5559 l
-961 5559 l
-960 5559 m
-1089 5559 l
-1089 5560 l
-960 5560 l
-959 5560 m
-1091 5560 l
-1091 5561 l
-959 5561 l
-958 5561 m
-1092 5561 l
-1092 5562 l
-958 5562 l
-958 5562 m
-1093 5562 l
-1093 5563 l
-958 5563 l
-957 5563 m
-1094 5563 l
-1094 5564 l
-957 5564 l
-956 5564 m
-1096 5564 l
-1096 5565 l
-956 5565 l
-955 5565 m
-1097 5565 l
-1097 5566 l
-955 5566 l
-954 5566 m
-1098 5566 l
-1098 5567 l
-954 5567 l
-954 5567 m
-1099 5567 l
-1099 5568 l
-954 5568 l
-953 5568 m
-1101 5568 l
-1101 5569 l
-953 5569 l
-952 5569 m
-1102 5569 l
-1102 5570 l
-952 5570 l
-951 5570 m
-1103 5570 l
-1103 5571 l
-951 5571 l
-950 5571 m
-1105 5571 l
-1105 5572 l
-950 5572 l
-950 5572 m
-1106 5572 l
-1106 5573 l
-950 5573 l
-949 5573 m
-1107 5573 l
-1107 5574 l
-949 5574 l
-948 5574 m
-1108 5574 l
-1108 5575 l
-948 5575 l
-947 5575 m
-1110 5575 l
-1110 5576 l
-947 5576 l
-946 5576 m
-1111 5576 l
-1111 5577 l
-946 5577 l
-946 5577 m
-1112 5577 l
-1112 5578 l
-946 5578 l
-945 5578 m
-1113 5578 l
-1113 5579 l
-945 5579 l
-944 5579 m
-1115 5579 l
-1115 5580 l
-944 5580 l
-943 5580 m
-1116 5580 l
-1116 5581 l
-943 5581 l
-942 5581 m
-1117 5581 l
-1117 5582 l
-942 5582 l
-942 5582 m
-1118 5582 l
-1118 5583 l
-942 5583 l
-941 5583 m
-1120 5583 l
-1120 5584 l
-941 5584 l
-940 5584 m
-1121 5584 l
-1121 5585 l
-940 5585 l
-939 5585 m
-1122 5585 l
-1122 5586 l
-939 5586 l
-938 5586 m
-1123 5586 l
-1123 5587 l
-938 5587 l
-938 5587 m
-1125 5587 l
-1125 5588 l
-938 5588 l
-937 5588 m
-1126 5588 l
-1126 5589 l
-937 5589 l
-936 5589 m
-1127 5589 l
-1127 5590 l
-936 5590 l
-935 5590 m
-1128 5590 l
-1128 5591 l
-935 5591 l
-935 5591 m
-1130 5591 l
-1130 5592 l
-935 5592 l
-935 5592 m
-1131 5592 l
-1131 5593 l
-935 5593 l
-936 5593 m
-1132 5593 l
-1132 5594 l
-936 5594 l
-937 5594 m
-1133 5594 l
-1133 5595 l
-937 5595 l
-938 5595 m
-1135 5595 l
-1135 5596 l
-938 5596 l
-939 5596 m
-1136 5596 l
-1136 5597 l
-939 5597 l
-941 5597 m
-1137 5597 l
-1137 5598 l
-941 5598 l
-942 5598 m
-1138 5598 l
-1138 5599 l
-942 5599 l
-943 5599 m
-1140 5599 l
-1140 5600 l
-943 5600 l
-944 5600 m
-1141 5600 l
-1141 5601 l
-944 5601 l
-946 5601 m
-1142 5601 l
-1142 5602 l
-946 5602 l
-947 5602 m
-1143 5602 l
-1143 5603 l
-947 5603 l
-948 5603 m
-1145 5603 l
-1145 5604 l
-948 5604 l
-949 5604 m
-1146 5604 l
-1146 5605 l
-949 5605 l
-951 5605 m
-1147 5605 l
-1147 5606 l
-951 5606 l
-952 5606 m
-1148 5606 l
-1148 5607 l
-952 5607 l
-953 5607 m
-1148 5607 l
-1148 5608 l
-953 5608 l
-954 5608 m
-1148 5608 l
-1148 5609 l
-954 5609 l
-956 5609 m
-1147 5609 l
-1147 5610 l
-956 5610 l
-957 5610 m
-1146 5610 l
-1146 5611 l
-957 5611 l
-958 5611 m
-1145 5611 l
-1145 5612 l
-958 5612 l
-959 5612 m
-1144 5612 l
-1144 5613 l
-959 5613 l
-961 5613 m
-1144 5613 l
-1144 5614 l
-961 5614 l
-962 5614 m
-1143 5614 l
-1143 5615 l
-962 5615 l
-963 5615 m
-1142 5615 l
-1142 5616 l
-963 5616 l
-964 5616 m
-1141 5616 l
-1141 5617 l
-964 5617 l
-966 5617 m
-1140 5617 l
-1140 5618 l
-966 5618 l
-967 5618 m
-1140 5618 l
-1140 5619 l
-967 5619 l
-968 5619 m
-1139 5619 l
-1139 5620 l
-968 5620 l
-969 5620 m
-1138 5620 l
-1138 5621 l
-969 5621 l
-971 5621 m
-1137 5621 l
-1137 5622 l
-971 5622 l
-972 5622 m
-1136 5622 l
-1136 5623 l
-972 5623 l
-973 5623 m
-1136 5623 l
-1136 5624 l
-973 5624 l
-974 5624 m
-1135 5624 l
-1135 5625 l
-974 5625 l
-976 5625 m
-1134 5625 l
-1134 5626 l
-976 5626 l
-977 5626 m
-1133 5626 l
-1133 5627 l
-977 5627 l
-978 5627 m
-1132 5627 l
-1132 5628 l
-978 5628 l
-979 5628 m
-1132 5628 l
-1132 5629 l
-979 5629 l
-981 5629 m
-1131 5629 l
-1131 5630 l
-981 5630 l
-982 5630 m
-1130 5630 l
-1130 5631 l
-982 5631 l
-983 5631 m
-1129 5631 l
-1129 5632 l
-983 5632 l
-984 5632 m
-1128 5632 l
-1128 5633 l
-984 5633 l
-986 5633 m
-1128 5633 l
-1128 5634 l
-986 5634 l
-987 5634 m
-1127 5634 l
-1127 5635 l
-987 5635 l
-988 5635 m
-1126 5635 l
-1126 5636 l
-988 5636 l
-989 5636 m
-1125 5636 l
-1125 5637 l
-989 5637 l
-991 5637 m
-1124 5637 l
-1124 5638 l
-991 5638 l
-992 5638 m
-1124 5638 l
-1124 5639 l
-992 5639 l
-993 5639 m
-1123 5639 l
-1123 5640 l
-993 5640 l
-994 5640 m
-1122 5640 l
-1122 5641 l
-994 5641 l
-996 5641 m
-1121 5641 l
-1121 5642 l
-996 5642 l
-997 5642 m
-1120 5642 l
-1120 5643 l
-997 5643 l
-998 5643 m
-1120 5643 l
-1120 5644 l
-998 5644 l
-999 5644 m
-1119 5644 l
-1119 5645 l
-999 5645 l
-1001 5645 m
-1118 5645 l
-1118 5646 l
-1001 5646 l
-1002 5646 m
-1117 5646 l
-1117 5647 l
-1002 5647 l
-1003 5647 m
-1116 5647 l
-1116 5648 l
-1003 5648 l
-1004 5648 m
-1116 5648 l
-1116 5649 l
-1004 5649 l
-1005 5649 m
-1115 5649 l
-1115 5650 l
-1005 5650 l
-1007 5650 m
-1114 5650 l
-1114 5651 l
-1007 5651 l
-1008 5651 m
-1113 5651 l
-1113 5652 l
-1008 5652 l
-1009 5652 m
-1112 5652 l
-1112 5653 l
-1009 5653 l
-1010 5653 m
-1112 5653 l
-1112 5654 l
-1010 5654 l
-1012 5654 m
-1111 5654 l
-1111 5655 l
-1012 5655 l
-1013 5655 m
-1110 5655 l
-1110 5656 l
-1013 5656 l
-1014 5656 m
-1109 5656 l
-1109 5657 l
-1014 5657 l
-1015 5657 m
-1108 5657 l
-1108 5658 l
-1015 5658 l
-1017 5658 m
-1108 5658 l
-1108 5659 l
-1017 5659 l
-1018 5659 m
-1107 5659 l
-1107 5660 l
-1018 5660 l
-1019 5660 m
-1106 5660 l
-1106 5661 l
-1019 5661 l
-1020 5661 m
-1105 5661 l
-1105 5662 l
-1020 5662 l
-1022 5662 m
-1104 5662 l
-1104 5663 l
-1022 5663 l
-1023 5663 m
-1104 5663 l
-1104 5664 l
-1023 5664 l
-1024 5664 m
-1103 5664 l
-1103 5665 l
-1024 5665 l
-1025 5665 m
-1102 5665 l
-1102 5666 l
-1025 5666 l
-1027 5666 m
-1101 5666 l
-1101 5667 l
-1027 5667 l
-1028 5667 m
-1100 5667 l
-1100 5668 l
-1028 5668 l
-1029 5668 m
-1100 5668 l
-1100 5669 l
-1029 5669 l
-1030 5669 m
-1099 5669 l
-1099 5670 l
-1030 5670 l
-1032 5670 m
-1098 5670 l
-1098 5671 l
-1032 5671 l
-1033 5671 m
-1097 5671 l
-1097 5672 l
-1033 5672 l
-1034 5672 m
-1096 5672 l
-1096 5673 l
-1034 5673 l
-1035 5673 m
-1096 5673 l
-1096 5674 l
-1035 5674 l
-1037 5674 m
-1095 5674 l
-1095 5675 l
-1037 5675 l
-1038 5675 m
-1094 5675 l
-1094 5676 l
-1038 5676 l
-1039 5676 m
-1093 5676 l
-1093 5677 l
-1039 5677 l
-1040 5677 m
-1092 5677 l
-1092 5678 l
-1040 5678 l
-1042 5678 m
-1092 5678 l
-1092 5679 l
-1042 5679 l
-1043 5679 m
-1091 5679 l
-1091 5680 l
-1043 5680 l
-1044 5680 m
-1090 5680 l
-1090 5681 l
-1044 5681 l
-1045 5681 m
-1089 5681 l
-1089 5682 l
-1045 5682 l
-1047 5682 m
-1088 5682 l
-1088 5683 l
-1047 5683 l
-1048 5683 m
-1088 5683 l
-1088 5684 l
-1048 5684 l
-1049 5684 m
-1087 5684 l
-1087 5685 l
-1049 5685 l
-1050 5685 m
-1086 5685 l
-1086 5686 l
-1050 5686 l
-1052 5686 m
-1085 5686 l
-1085 5687 l
-1052 5687 l
-1053 5687 m
-1084 5687 l
-1084 5688 l
-1053 5688 l
-1054 5688 m
-1084 5688 l
-1084 5689 l
-1054 5689 l
-1055 5689 m
-1083 5689 l
-1083 5690 l
-1055 5690 l
-1057 5690 m
-1082 5690 l
-1082 5691 l
-1057 5691 l
-1058 5691 m
-1081 5691 l
-1081 5692 l
-1058 5692 l
-1059 5692 m
-1080 5692 l
-1080 5693 l
-1059 5693 l
-1060 5693 m
-1080 5693 l
-1080 5694 l
-1060 5694 l
-1062 5694 m
-1079 5694 l
-1079 5695 l
-1062 5695 l
-1063 5695 m
-1078 5695 l
-1078 5696 l
-1063 5696 l
-1064 5696 m
-1077 5696 l
-1077 5697 l
-1064 5697 l
-1065 5697 m
-1076 5697 l
-1076 5698 l
-1065 5698 l
-1067 5698 m
-1076 5698 l
-1076 5699 l
-1067 5699 l
-1068 5699 m
-1075 5699 l
-1075 5700 l
-1068 5700 l
-1069 5700 m
-1074 5700 l
-1074 5701 l
-1069 5701 l
-1070 5701 m
-1073 5701 l
-1073 5702 l
-1070 5702 l
-Y
-1010.5 5497.6 m
-935 5592 l
-1072 5702 l
-1148 5607 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-972 5579 m
-976 5588 l
-978 5605 l
-1033 5537 l
-S
-1050 5663 m
-1054 5591 l
-1103 5630 l
-S
-1050 5663 m
-1105 5594 l
-S
-1 g
-1830 5898 m
-1841 5898 l
-1841 5899 l
-1830 5899 l
-1830 5899 m
-1847 5899 l
-1847 5900 l
-1830 5900 l
-1830 5900 m
-1854 5900 l
-1854 5901 l
-1830 5901 l
-1830 5901 m
-1861 5901 l
-1861 5902 l
-1830 5902 l
-1829 5902 m
-1867 5902 l
-1867 5903 l
-1829 5903 l
-1829 5903 m
-1874 5903 l
-1874 5904 l
-1829 5904 l
-1829 5904 m
-1881 5904 l
-1881 5905 l
-1829 5905 l
-1829 5905 m
-1887 5905 l
-1887 5906 l
-1829 5906 l
-1829 5906 m
-1894 5906 l
-1894 5907 l
-1829 5907 l
-1829 5907 m
-1901 5907 l
-1901 5908 l
-1829 5908 l
-1829 5908 m
-1907 5908 l
-1907 5909 l
-1829 5909 l
-1828 5909 m
-1914 5909 l
-1914 5910 l
-1828 5910 l
-1828 5910 m
-1921 5910 l
-1921 5911 l
-1828 5911 l
-1828 5911 m
-1927 5911 l
-1927 5912 l
-1828 5912 l
-1828 5912 m
-1934 5912 l
-1934 5913 l
-1828 5913 l
-1828 5913 m
-1941 5913 l
-1941 5914 l
-1828 5914 l
-1828 5914 m
-1947 5914 l
-1947 5915 l
-1828 5915 l
-1827 5915 m
-1954 5915 l
-1954 5916 l
-1827 5916 l
-1827 5916 m
-1961 5916 l
-1961 5917 l
-1827 5917 l
-1827 5917 m
-1967 5917 l
-1967 5918 l
-1827 5918 l
-1827 5918 m
-1974 5918 l
-1974 5919 l
-1827 5919 l
-1827 5919 m
-1981 5919 l
-1981 5920 l
-1827 5920 l
-1827 5920 m
-1987 5920 l
-1987 5921 l
-1827 5921 l
-1827 5921 m
-1994 5921 l
-1994 5922 l
-1827 5922 l
-1826 5922 m
-2000 5922 l
-2000 5923 l
-1826 5923 l
-1826 5923 m
-2000 5923 l
-2000 5929 l
-1826 5929 l
-1825 5929 m
-2000 5929 l
-2000 5930 l
-1825 5930 l
-1825 5930 m
-1999 5930 l
-1999 5936 l
-1825 5936 l
-1824 5936 m
-1999 5936 l
-1999 5937 l
-1824 5937 l
-1824 5937 m
-1998 5937 l
-1998 5942 l
-1824 5942 l
-1823 5942 m
-1998 5942 l
-1998 5943 l
-1823 5943 l
-1823 5943 m
-1997 5943 l
-1997 5949 l
-1823 5949 l
-1822 5949 m
-1997 5949 l
-1997 5950 l
-1822 5950 l
-1822 5950 m
-1996 5950 l
-1996 5956 l
-1822 5956 l
-1821 5956 m
-1996 5956 l
-1996 5957 l
-1821 5957 l
-1821 5957 m
-1995 5957 l
-1995 5963 l
-1821 5963 l
-1820 5963 m
-1994 5963 l
-1994 5969 l
-1820 5969 l
-1819 5969 m
-1994 5969 l
-1994 5970 l
-1819 5970 l
-1819 5970 m
-1993 5970 l
-1993 5976 l
-1819 5976 l
-1818 5976 m
-1993 5976 l
-1993 5977 l
-1818 5977 l
-1818 5977 m
-1992 5977 l
-1992 5983 l
-1818 5983 l
-1817 5983 m
-1991 5983 l
-1991 5990 l
-1817 5990 l
-1816 5990 m
-1990 5990 l
-1990 5996 l
-1816 5996 l
-1815 5996 m
-1990 5996 l
-1990 5997 l
-1815 5997 l
-1815 5997 m
-1989 5997 l
-1989 6003 l
-1815 6003 l
-1814 6003 m
-1989 6003 l
-1989 6004 l
-1814 6004 l
-1814 6004 m
-1988 6004 l
-1988 6010 l
-1814 6010 l
-1813 6010 m
-1987 6010 l
-1987 6017 l
-1813 6017 l
-1813 6017 m
-1986 6017 l
-1986 6018 l
-1813 6018 l
-1819 6018 m
-1986 6018 l
-1986 6019 l
-1819 6019 l
-1826 6019 m
-1986 6019 l
-1986 6020 l
-1826 6020 l
-1832 6020 m
-1986 6020 l
-1986 6021 l
-1832 6021 l
-1839 6021 m
-1986 6021 l
-1986 6022 l
-1839 6022 l
-1845 6022 m
-1986 6022 l
-1986 6023 l
-1845 6023 l
-1852 6023 m
-1986 6023 l
-1986 6024 l
-1852 6024 l
-1858 6024 m
-1985 6024 l
-1985 6025 l
-1858 6025 l
-1865 6025 m
-1985 6025 l
-1985 6026 l
-1865 6026 l
-1871 6026 m
-1985 6026 l
-1985 6027 l
-1871 6027 l
-1878 6027 m
-1985 6027 l
-1985 6028 l
-1878 6028 l
-1884 6028 m
-1985 6028 l
-1985 6029 l
-1884 6029 l
-1891 6029 m
-1985 6029 l
-1985 6030 l
-1891 6030 l
-1897 6030 m
-1984 6030 l
-1984 6031 l
-1897 6031 l
-1904 6031 m
-1984 6031 l
-1984 6032 l
-1904 6032 l
-1910 6032 m
-1984 6032 l
-1984 6033 l
-1910 6033 l
-1917 6033 m
-1984 6033 l
-1984 6034 l
-1917 6034 l
-1923 6034 m
-1984 6034 l
-1984 6035 l
-1923 6035 l
-1930 6035 m
-1984 6035 l
-1984 6036 l
-1930 6036 l
-1936 6036 m
-1984 6036 l
-1984 6037 l
-1936 6037 l
-1943 6037 m
-1983 6037 l
-1983 6038 l
-1943 6038 l
-1949 6038 m
-1983 6038 l
-1983 6039 l
-1949 6039 l
-1956 6039 m
-1983 6039 l
-1983 6040 l
-1956 6040 l
-1962 6040 m
-1983 6040 l
-1983 6041 l
-1962 6041 l
-1969 6041 m
-1983 6041 l
-1983 6042 l
-1969 6042 l
-1975 6042 m
-1983 6042 l
-1983 6043 l
-1975 6043 l
-Y
-1830.7 5897.6 m
-1813 6017 l
-1982 6043 l
-2000 5923 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1838 5987 m
-1846 5993 l
-1856 6007 l
-1869 5920 l
-S
-1962 6010 m
-1956 6018 l
-1943 6020 l
-1935 6019 l
-1923 6013 l
-1917 5999 l
-1916 5978 l
-1919 5957 l
-1925 5941 l
-1935 5934 l
-1948 5932 l
-1952 5933 l
-1964 5939 l
-1971 5948 l
-1973 5961 l
-1973 5965 l
-1967 5977 l
-1957 5984 l
-1944 5986 l
-1940 5986 l
-1928 5980 l
-1921 5970 l
-1919 5957 l
-S
-1 g
-2892 5791 m
-2896 5791 l
-2896 5792 l
-2892 5792 l
-2889 5792 m
-2896 5792 l
-2896 5793 l
-2889 5793 l
-2887 5793 m
-2897 5793 l
-2897 5794 l
-2887 5794 l
-2884 5794 m
-2897 5794 l
-2897 5795 l
-2884 5795 l
-2882 5795 m
-2897 5795 l
-2897 5796 l
-2882 5796 l
-2879 5796 m
-2898 5796 l
-2898 5797 l
-2879 5797 l
-2877 5797 m
-2898 5797 l
-2898 5798 l
-2877 5798 l
-2874 5798 m
-2899 5798 l
-2899 5799 l
-2874 5799 l
-2872 5799 m
-2899 5799 l
-2899 5800 l
-2872 5800 l
-2869 5800 m
-2899 5800 l
-2899 5801 l
-2869 5801 l
-2867 5801 m
-2900 5801 l
-2900 5802 l
-2867 5802 l
-2864 5802 m
-2900 5802 l
-2900 5803 l
-2864 5803 l
-2861 5803 m
-2901 5803 l
-2901 5804 l
-2861 5804 l
-2859 5804 m
-2901 5804 l
-2901 5805 l
-2859 5805 l
-2856 5805 m
-2901 5805 l
-2901 5806 l
-2856 5806 l
-2854 5806 m
-2902 5806 l
-2902 5807 l
-2854 5807 l
-2851 5807 m
-2902 5807 l
-2902 5808 l
-2851 5808 l
-2849 5808 m
-2903 5808 l
-2903 5809 l
-2849 5809 l
-2846 5809 m
-2903 5809 l
-2903 5810 l
-2846 5810 l
-2844 5810 m
-2903 5810 l
-2903 5811 l
-2844 5811 l
-2841 5811 m
-2904 5811 l
-2904 5812 l
-2841 5812 l
-2839 5812 m
-2904 5812 l
-2904 5813 l
-2839 5813 l
-2836 5813 m
-2904 5813 l
-2904 5814 l
-2836 5814 l
-2834 5814 m
-2905 5814 l
-2905 5815 l
-2834 5815 l
-2831 5815 m
-2905 5815 l
-2905 5816 l
-2831 5816 l
-2828 5816 m
-2906 5816 l
-2906 5817 l
-2828 5817 l
-2826 5817 m
-2906 5817 l
-2906 5818 l
-2826 5818 l
-2823 5818 m
-2906 5818 l
-2906 5819 l
-2823 5819 l
-2821 5819 m
-2907 5819 l
-2907 5820 l
-2821 5820 l
-2818 5820 m
-2907 5820 l
-2907 5821 l
-2818 5821 l
-2816 5821 m
-2908 5821 l
-2908 5822 l
-2816 5822 l
-2813 5822 m
-2908 5822 l
-2908 5823 l
-2813 5823 l
-2811 5823 m
-2908 5823 l
-2908 5824 l
-2811 5824 l
-2808 5824 m
-2909 5824 l
-2909 5825 l
-2808 5825 l
-2806 5825 m
-2909 5825 l
-2909 5826 l
-2806 5826 l
-2803 5826 m
-2910 5826 l
-2910 5827 l
-2803 5827 l
-2801 5827 m
-2910 5827 l
-2910 5828 l
-2801 5828 l
-2798 5828 m
-2910 5828 l
-2910 5829 l
-2798 5829 l
-2795 5829 m
-2911 5829 l
-2911 5830 l
-2795 5830 l
-2793 5830 m
-2911 5830 l
-2911 5831 l
-2793 5831 l
-2790 5831 m
-2911 5831 l
-2911 5832 l
-2790 5832 l
-2788 5832 m
-2912 5832 l
-2912 5833 l
-2788 5833 l
-2785 5833 m
-2912 5833 l
-2912 5834 l
-2785 5834 l
-2783 5834 m
-2913 5834 l
-2913 5835 l
-2783 5835 l
-2780 5835 m
-2913 5835 l
-2913 5836 l
-2780 5836 l
-2778 5836 m
-2913 5836 l
-2913 5837 l
-2778 5837 l
-2775 5837 m
-2914 5837 l
-2914 5838 l
-2775 5838 l
-2773 5838 m
-2914 5838 l
-2914 5839 l
-2773 5839 l
-2770 5839 m
-2915 5839 l
-2915 5840 l
-2770 5840 l
-2768 5840 m
-2915 5840 l
-2915 5841 l
-2768 5841 l
-2765 5841 m
-2915 5841 l
-2915 5842 l
-2765 5842 l
-2762 5842 m
-2916 5842 l
-2916 5843 l
-2762 5843 l
-2760 5843 m
-2916 5843 l
-2916 5844 l
-2760 5844 l
-2757 5844 m
-2917 5844 l
-2917 5845 l
-2757 5845 l
-2755 5845 m
-2917 5845 l
-2917 5846 l
-2755 5846 l
-2752 5846 m
-2917 5846 l
-2917 5847 l
-2752 5847 l
-2750 5847 m
-2918 5847 l
-2918 5848 l
-2750 5848 l
-2747 5848 m
-2918 5848 l
-2918 5849 l
-2747 5849 l
-2745 5849 m
-2918 5849 l
-2918 5850 l
-2745 5850 l
-2742 5850 m
-2919 5850 l
-2919 5851 l
-2742 5851 l
-2740 5851 m
-2919 5851 l
-2919 5852 l
-2740 5852 l
-2737 5852 m
-2920 5852 l
-2920 5853 l
-2737 5853 l
-2735 5853 m
-2920 5853 l
-2920 5854 l
-2735 5854 l
-2735 5854 m
-2920 5854 l
-2920 5855 l
-2735 5855 l
-2735 5855 m
-2921 5855 l
-2921 5857 l
-2735 5857 l
-2736 5857 m
-2922 5857 l
-2922 5860 l
-2736 5860 l
-2737 5860 m
-2923 5860 l
-2923 5862 l
-2737 5862 l
-2738 5862 m
-2924 5862 l
-2924 5865 l
-2738 5865 l
-2739 5865 m
-2925 5865 l
-2925 5867 l
-2739 5867 l
-2740 5867 m
-2926 5867 l
-2926 5870 l
-2740 5870 l
-2741 5870 m
-2927 5870 l
-2927 5872 l
-2741 5872 l
-2742 5872 m
-2927 5872 l
-2927 5873 l
-2742 5873 l
-2742 5873 m
-2928 5873 l
-2928 5875 l
-2742 5875 l
-2743 5875 m
-2929 5875 l
-2929 5877 l
-2743 5877 l
-2744 5877 m
-2929 5877 l
-2929 5878 l
-2744 5878 l
-2744 5878 m
-2930 5878 l
-2930 5880 l
-2744 5880 l
-2745 5880 m
-2931 5880 l
-2931 5882 l
-2745 5882 l
-2746 5882 m
-2931 5882 l
-2931 5883 l
-2746 5883 l
-2746 5883 m
-2932 5883 l
-2932 5885 l
-2746 5885 l
-2747 5885 m
-2933 5885 l
-2933 5887 l
-2747 5887 l
-2748 5887 m
-2933 5887 l
-2933 5888 l
-2748 5888 l
-2748 5888 m
-2934 5888 l
-2934 5890 l
-2748 5890 l
-2749 5890 m
-2934 5890 l
-2934 5891 l
-2749 5891 l
-2749 5891 m
-2935 5891 l
-2935 5892 l
-2749 5892 l
-2750 5892 m
-2935 5892 l
-2935 5893 l
-2750 5893 l
-2750 5893 m
-2936 5893 l
-2936 5895 l
-2750 5895 l
-2751 5895 m
-2936 5895 l
-2936 5896 l
-2751 5896 l
-2751 5896 m
-2937 5896 l
-2937 5897 l
-2751 5897 l
-2752 5897 m
-2937 5897 l
-2937 5898 l
-2752 5898 l
-2752 5898 m
-2938 5898 l
-2938 5900 l
-2752 5900 l
-2753 5900 m
-2938 5900 l
-2938 5901 l
-2753 5901 l
-2753 5901 m
-2939 5901 l
-2939 5902 l
-2753 5902 l
-2754 5902 m
-2939 5902 l
-2939 5903 l
-2754 5903 l
-2754 5903 m
-2939 5903 l
-2939 5904 l
-2754 5904 l
-2754 5904 m
-2939 5904 l
-2939 5905 l
-2754 5905 l
-2755 5905 m
-2937 5905 l
-2937 5906 l
-2755 5906 l
-2755 5906 m
-2934 5906 l
-2934 5907 l
-2755 5907 l
-2756 5907 m
-2932 5907 l
-2932 5908 l
-2756 5908 l
-2756 5908 m
-2929 5908 l
-2929 5909 l
-2756 5909 l
-2756 5909 m
-2927 5909 l
-2927 5910 l
-2756 5910 l
-2757 5910 m
-2924 5910 l
-2924 5911 l
-2757 5911 l
-2757 5911 m
-2922 5911 l
-2922 5912 l
-2757 5912 l
-2758 5912 m
-2919 5912 l
-2919 5913 l
-2758 5913 l
-2758 5913 m
-2917 5913 l
-2917 5914 l
-2758 5914 l
-2758 5914 m
-2914 5914 l
-2914 5915 l
-2758 5915 l
-2759 5915 m
-2912 5915 l
-2912 5916 l
-2759 5916 l
-2759 5916 m
-2909 5916 l
-2909 5917 l
-2759 5917 l
-2760 5917 m
-2906 5917 l
-2906 5918 l
-2760 5918 l
-2760 5918 m
-2904 5918 l
-2904 5919 l
-2760 5919 l
-2760 5919 m
-2901 5919 l
-2901 5920 l
-2760 5920 l
-2761 5920 m
-2899 5920 l
-2899 5921 l
-2761 5921 l
-2761 5921 m
-2896 5921 l
-2896 5922 l
-2761 5922 l
-2762 5922 m
-2894 5922 l
-2894 5923 l
-2762 5923 l
-2762 5923 m
-2891 5923 l
-2891 5924 l
-2762 5924 l
-2762 5924 m
-2889 5924 l
-2889 5925 l
-2762 5925 l
-2763 5925 m
-2886 5925 l
-2886 5926 l
-2763 5926 l
-2763 5926 m
-2884 5926 l
-2884 5927 l
-2763 5927 l
-2764 5927 m
-2881 5927 l
-2881 5928 l
-2764 5928 l
-2764 5928 m
-2879 5928 l
-2879 5929 l
-2764 5929 l
-2764 5929 m
-2876 5929 l
-2876 5930 l
-2764 5930 l
-2765 5930 m
-2874 5930 l
-2874 5931 l
-2765 5931 l
-2765 5931 m
-2871 5931 l
-2871 5932 l
-2765 5932 l
-2766 5932 m
-2869 5932 l
-2869 5933 l
-2766 5933 l
-2766 5933 m
-2866 5933 l
-2866 5934 l
-2766 5934 l
-2766 5934 m
-2864 5934 l
-2864 5935 l
-2766 5935 l
-2767 5935 m
-2861 5935 l
-2861 5936 l
-2767 5936 l
-2767 5936 m
-2859 5936 l
-2859 5937 l
-2767 5937 l
-2768 5937 m
-2856 5937 l
-2856 5938 l
-2768 5938 l
-2768 5938 m
-2854 5938 l
-2854 5939 l
-2768 5939 l
-2768 5939 m
-2851 5939 l
-2851 5940 l
-2768 5940 l
-2769 5940 m
-2849 5940 l
-2849 5941 l
-2769 5941 l
-2769 5941 m
-2846 5941 l
-2846 5942 l
-2769 5942 l
-2770 5942 m
-2843 5942 l
-2843 5943 l
-2770 5943 l
-2770 5943 m
-2841 5943 l
-2841 5944 l
-2770 5944 l
-2770 5944 m
-2838 5944 l
-2838 5945 l
-2770 5945 l
-2771 5945 m
-2836 5945 l
-2836 5946 l
-2771 5946 l
-2771 5946 m
-2833 5946 l
-2833 5947 l
-2771 5947 l
-2772 5947 m
-2831 5947 l
-2831 5948 l
-2772 5948 l
-2772 5948 m
-2828 5948 l
-2828 5949 l
-2772 5949 l
-2772 5949 m
-2826 5949 l
-2826 5950 l
-2772 5950 l
-2773 5950 m
-2823 5950 l
-2823 5951 l
-2773 5951 l
-2773 5951 m
-2821 5951 l
-2821 5952 l
-2773 5952 l
-2774 5952 m
-2818 5952 l
-2818 5953 l
-2774 5953 l
-2774 5953 m
-2816 5953 l
-2816 5954 l
-2774 5954 l
-2774 5954 m
-2813 5954 l
-2813 5955 l
-2774 5955 l
-2775 5955 m
-2811 5955 l
-2811 5956 l
-2775 5956 l
-2775 5956 m
-2808 5956 l
-2808 5957 l
-2775 5957 l
-2776 5957 m
-2806 5957 l
-2806 5958 l
-2776 5958 l
-2776 5958 m
-2803 5958 l
-2803 5959 l
-2776 5959 l
-2776 5959 m
-2801 5959 l
-2801 5960 l
-2776 5960 l
-2777 5960 m
-2798 5960 l
-2798 5961 l
-2777 5961 l
-2777 5961 m
-2796 5961 l
-2796 5962 l
-2777 5962 l
-2778 5962 m
-2793 5962 l
-2793 5963 l
-2778 5963 l
-2778 5963 m
-2791 5963 l
-2791 5964 l
-2778 5964 l
-2778 5964 m
-2788 5964 l
-2788 5965 l
-2778 5965 l
-2779 5965 m
-2786 5965 l
-2786 5966 l
-2779 5966 l
-2779 5966 m
-2783 5966 l
-2783 5967 l
-2779 5967 l
-Y
-2939 5903.9 m
-2895 5791 l
-2735 5854 l
-2780 5967 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2887 5830 m
-2878 5829 l
-2862 5822 l
-2894 5904 l
-S
-2796 5848 m
-2809 5847 l
-2816 5854 l
-2819 5861 l
-2818 5871 l
-2812 5878 l
-2798 5888 l
-2788 5896 l
-2783 5907 l
-2782 5916 l
-2787 5928 l
-2794 5934 l
-2799 5936 l
-2812 5936 l
-2828 5930 l
-2838 5921 l
-2840 5916 l
-2841 5906 l
-2837 5895 l
-2830 5889 l
-2819 5884 l
-2806 5885 l
-2789 5887 l
-2779 5886 l
-2772 5880 l
-2769 5872 l
-2770 5863 l
-2780 5854 l
-2796 5848 l
-S
-1 g
-3616 5200 m
-3619 5200 l
-3619 5201 l
-3616 5201 l
-3615 5201 m
-3620 5201 l
-3620 5202 l
-3615 5202 l
-3614 5202 m
-3621 5202 l
-3621 5203 l
-3614 5203 l
-3613 5203 m
-3623 5203 l
-3623 5204 l
-3613 5204 l
-3612 5204 m
-3624 5204 l
-3624 5205 l
-3612 5205 l
-3612 5205 m
-3625 5205 l
-3625 5206 l
-3612 5206 l
-3611 5206 m
-3626 5206 l
-3626 5207 l
-3611 5207 l
-3610 5207 m
-3628 5207 l
-3628 5208 l
-3610 5208 l
-3609 5208 m
-3629 5208 l
-3629 5209 l
-3609 5209 l
-3608 5209 m
-3630 5209 l
-3630 5210 l
-3608 5210 l
-3608 5210 m
-3631 5210 l
-3631 5211 l
-3608 5211 l
-3607 5211 m
-3633 5211 l
-3633 5212 l
-3607 5212 l
-3606 5212 m
-3634 5212 l
-3634 5213 l
-3606 5213 l
-3605 5213 m
-3635 5213 l
-3635 5214 l
-3605 5214 l
-3604 5214 m
-3636 5214 l
-3636 5215 l
-3604 5215 l
-3604 5215 m
-3638 5215 l
-3638 5216 l
-3604 5216 l
-3603 5216 m
-3639 5216 l
-3639 5217 l
-3603 5217 l
-3602 5217 m
-3640 5217 l
-3640 5218 l
-3602 5218 l
-3601 5218 m
-3641 5218 l
-3641 5219 l
-3601 5219 l
-3600 5219 m
-3643 5219 l
-3643 5220 l
-3600 5220 l
-3600 5220 m
-3644 5220 l
-3644 5221 l
-3600 5221 l
-3599 5221 m
-3645 5221 l
-3645 5222 l
-3599 5222 l
-3598 5222 m
-3647 5222 l
-3647 5223 l
-3598 5223 l
-3597 5223 m
-3648 5223 l
-3648 5224 l
-3597 5224 l
-3596 5224 m
-3649 5224 l
-3649 5225 l
-3596 5225 l
-3596 5225 m
-3650 5225 l
-3650 5226 l
-3596 5226 l
-3595 5226 m
-3652 5226 l
-3652 5227 l
-3595 5227 l
-3594 5227 m
-3653 5227 l
-3653 5228 l
-3594 5228 l
-3593 5228 m
-3654 5228 l
-3654 5229 l
-3593 5229 l
-3592 5229 m
-3655 5229 l
-3655 5230 l
-3592 5230 l
-3592 5230 m
-3657 5230 l
-3657 5231 l
-3592 5231 l
-3591 5231 m
-3658 5231 l
-3658 5232 l
-3591 5232 l
-3590 5232 m
-3659 5232 l
-3659 5233 l
-3590 5233 l
-3589 5233 m
-3660 5233 l
-3660 5234 l
-3589 5234 l
-3588 5234 m
-3662 5234 l
-3662 5235 l
-3588 5235 l
-3588 5235 m
-3663 5235 l
-3663 5236 l
-3588 5236 l
-3587 5236 m
-3664 5236 l
-3664 5237 l
-3587 5237 l
-3586 5237 m
-3665 5237 l
-3665 5238 l
-3586 5238 l
-3585 5238 m
-3667 5238 l
-3667 5239 l
-3585 5239 l
-3584 5239 m
-3668 5239 l
-3668 5240 l
-3584 5240 l
-3584 5240 m
-3669 5240 l
-3669 5241 l
-3584 5241 l
-3583 5241 m
-3670 5241 l
-3670 5242 l
-3583 5242 l
-3582 5242 m
-3672 5242 l
-3672 5243 l
-3582 5243 l
-3581 5243 m
-3673 5243 l
-3673 5244 l
-3581 5244 l
-3580 5244 m
-3674 5244 l
-3674 5245 l
-3580 5245 l
-3580 5245 m
-3676 5245 l
-3676 5246 l
-3580 5246 l
-3579 5246 m
-3677 5246 l
-3677 5247 l
-3579 5247 l
-3578 5247 m
-3678 5247 l
-3678 5248 l
-3578 5248 l
-3577 5248 m
-3679 5248 l
-3679 5249 l
-3577 5249 l
-3576 5249 m
-3681 5249 l
-3681 5250 l
-3576 5250 l
-3575 5250 m
-3682 5250 l
-3682 5251 l
-3575 5251 l
-3575 5251 m
-3683 5251 l
-3683 5252 l
-3575 5252 l
-3574 5252 m
-3684 5252 l
-3684 5253 l
-3574 5253 l
-3573 5253 m
-3686 5253 l
-3686 5254 l
-3573 5254 l
-3572 5254 m
-3687 5254 l
-3687 5255 l
-3572 5255 l
-3571 5255 m
-3688 5255 l
-3688 5256 l
-3571 5256 l
-3571 5256 m
-3689 5256 l
-3689 5257 l
-3571 5257 l
-3570 5257 m
-3691 5257 l
-3691 5258 l
-3570 5258 l
-3569 5258 m
-3692 5258 l
-3692 5259 l
-3569 5259 l
-3568 5259 m
-3693 5259 l
-3693 5260 l
-3568 5260 l
-3567 5260 m
-3694 5260 l
-3694 5261 l
-3567 5261 l
-3567 5261 m
-3696 5261 l
-3696 5262 l
-3567 5262 l
-3566 5262 m
-3697 5262 l
-3697 5263 l
-3566 5263 l
-3565 5263 m
-3698 5263 l
-3698 5264 l
-3565 5264 l
-3564 5264 m
-3699 5264 l
-3699 5265 l
-3564 5265 l
-3563 5265 m
-3701 5265 l
-3701 5266 l
-3563 5266 l
-3563 5266 m
-3702 5266 l
-3702 5267 l
-3563 5267 l
-3562 5267 m
-3703 5267 l
-3703 5268 l
-3562 5268 l
-3561 5268 m
-3705 5268 l
-3705 5269 l
-3561 5269 l
-3560 5269 m
-3706 5269 l
-3706 5270 l
-3560 5270 l
-3559 5270 m
-3707 5270 l
-3707 5271 l
-3559 5271 l
-3559 5271 m
-3708 5271 l
-3708 5272 l
-3559 5272 l
-3558 5272 m
-3710 5272 l
-3710 5273 l
-3558 5273 l
-3557 5273 m
-3711 5273 l
-3711 5274 l
-3557 5274 l
-3556 5274 m
-3712 5274 l
-3712 5275 l
-3556 5275 l
-3555 5275 m
-3712 5275 l
-3712 5276 l
-3555 5276 l
-3555 5276 m
-3711 5276 l
-3711 5277 l
-3555 5277 l
-3554 5277 m
-3711 5277 l
-3711 5278 l
-3554 5278 l
-3553 5278 m
-3710 5278 l
-3710 5279 l
-3553 5279 l
-3552 5279 m
-3709 5279 l
-3709 5280 l
-3552 5280 l
-3551 5280 m
-3708 5280 l
-3708 5281 l
-3551 5281 l
-3551 5281 m
-3707 5281 l
-3707 5282 l
-3551 5282 l
-3550 5282 m
-3707 5282 l
-3707 5283 l
-3550 5283 l
-3549 5283 m
-3706 5283 l
-3706 5284 l
-3549 5284 l
-3548 5284 m
-3705 5284 l
-3705 5285 l
-3548 5285 l
-3547 5285 m
-3704 5285 l
-3704 5286 l
-3547 5286 l
-3547 5286 m
-3703 5286 l
-3703 5287 l
-3547 5287 l
-3546 5287 m
-3703 5287 l
-3703 5288 l
-3546 5288 l
-3545 5288 m
-3702 5288 l
-3702 5289 l
-3545 5289 l
-3544 5289 m
-3701 5289 l
-3701 5290 l
-3544 5290 l
-3543 5290 m
-3700 5290 l
-3700 5291 l
-3543 5291 l
-3543 5291 m
-3699 5291 l
-3699 5292 l
-3543 5292 l
-3542 5292 m
-3699 5292 l
-3699 5293 l
-3542 5293 l
-3541 5293 m
-3698 5293 l
-3698 5294 l
-3541 5294 l
-3540 5294 m
-3697 5294 l
-3697 5295 l
-3540 5295 l
-3539 5295 m
-3696 5295 l
-3696 5296 l
-3539 5296 l
-3538 5296 m
-3695 5296 l
-3695 5298 l
-3538 5298 l
-3537 5298 m
-3694 5298 l
-3694 5299 l
-3537 5299 l
-3536 5299 m
-3693 5299 l
-3693 5300 l
-3536 5300 l
-3535 5300 m
-3692 5300 l
-3692 5301 l
-3535 5301 l
-3534 5301 m
-3691 5301 l
-3691 5303 l
-3534 5303 l
-3533 5303 m
-3690 5303 l
-3690 5304 l
-3533 5304 l
-3532 5304 m
-3689 5304 l
-3689 5305 l
-3532 5305 l
-3531 5305 m
-3688 5305 l
-3688 5306 l
-3531 5306 l
-3530 5306 m
-3687 5306 l
-3687 5308 l
-3530 5308 l
-3529 5308 m
-3686 5308 l
-3686 5309 l
-3529 5309 l
-3528 5309 m
-3685 5309 l
-3685 5310 l
-3528 5310 l
-3527 5310 m
-3684 5310 l
-3684 5311 l
-3527 5311 l
-3526 5311 m
-3683 5311 l
-3683 5313 l
-3526 5313 l
-3525 5313 m
-3682 5313 l
-3682 5314 l
-3525 5314 l
-3524 5314 m
-3681 5314 l
-3681 5315 l
-3524 5315 l
-3523 5315 m
-3680 5315 l
-3680 5316 l
-3523 5316 l
-3522 5316 m
-3679 5316 l
-3679 5318 l
-3522 5318 l
-3521 5318 m
-3678 5318 l
-3678 5319 l
-3521 5319 l
-3520 5319 m
-3677 5319 l
-3677 5320 l
-3520 5320 l
-3519 5320 m
-3676 5320 l
-3676 5321 l
-3519 5321 l
-3518 5321 m
-3675 5321 l
-3675 5323 l
-3518 5323 l
-3517 5323 m
-3674 5323 l
-3674 5324 l
-3517 5324 l
-3516 5324 m
-3673 5324 l
-3673 5325 l
-3516 5325 l
-3515 5325 m
-3672 5325 l
-3672 5326 l
-3515 5326 l
-3514 5326 m
-3672 5326 l
-3672 5327 l
-3514 5327 l
-3514 5327 m
-3671 5327 l
-3671 5328 l
-3514 5328 l
-3513 5328 m
-3670 5328 l
-3670 5329 l
-3513 5329 l
-3512 5329 m
-3669 5329 l
-3669 5330 l
-3512 5330 l
-3511 5330 m
-3668 5330 l
-3668 5331 l
-3511 5331 l
-3510 5331 m
-3668 5331 l
-3668 5332 l
-3510 5332 l
-3510 5332 m
-3667 5332 l
-3667 5333 l
-3510 5333 l
-3509 5333 m
-3666 5333 l
-3666 5334 l
-3509 5334 l
-3508 5334 m
-3665 5334 l
-3665 5335 l
-3508 5335 l
-3507 5335 m
-3664 5335 l
-3664 5336 l
-3507 5336 l
-3506 5336 m
-3664 5336 l
-3664 5337 l
-3506 5337 l
-3506 5337 m
-3663 5337 l
-3663 5338 l
-3506 5338 l
-3505 5338 m
-3662 5338 l
-3662 5339 l
-3505 5339 l
-3504 5339 m
-3661 5339 l
-3661 5340 l
-3504 5340 l
-3503 5340 m
-3660 5340 l
-3660 5341 l
-3503 5341 l
-3502 5341 m
-3660 5341 l
-3660 5342 l
-3502 5342 l
-3502 5342 m
-3659 5342 l
-3659 5343 l
-3502 5343 l
-3502 5343 m
-3658 5343 l
-3658 5344 l
-3502 5344 l
-3503 5344 m
-3657 5344 l
-3657 5345 l
-3503 5345 l
-3504 5345 m
-3656 5345 l
-3656 5346 l
-3504 5346 l
-3505 5346 m
-3656 5346 l
-3656 5347 l
-3505 5347 l
-3507 5347 m
-3655 5347 l
-3655 5348 l
-3507 5348 l
-3508 5348 m
-3654 5348 l
-3654 5349 l
-3508 5349 l
-3509 5349 m
-3653 5349 l
-3653 5350 l
-3509 5350 l
-3510 5350 m
-3652 5350 l
-3652 5351 l
-3510 5351 l
-3512 5351 m
-3652 5351 l
-3652 5352 l
-3512 5352 l
-3513 5352 m
-3651 5352 l
-3651 5353 l
-3513 5353 l
-3514 5353 m
-3650 5353 l
-3650 5354 l
-3514 5354 l
-3515 5354 m
-3649 5354 l
-3649 5355 l
-3515 5355 l
-3517 5355 m
-3648 5355 l
-3648 5356 l
-3517 5356 l
-3518 5356 m
-3648 5356 l
-3648 5357 l
-3518 5357 l
-3519 5357 m
-3647 5357 l
-3647 5358 l
-3519 5358 l
-3520 5358 m
-3646 5358 l
-3646 5359 l
-3520 5359 l
-3522 5359 m
-3645 5359 l
-3645 5360 l
-3522 5360 l
-3523 5360 m
-3644 5360 l
-3644 5361 l
-3523 5361 l
-3524 5361 m
-3644 5361 l
-3644 5362 l
-3524 5362 l
-3525 5362 m
-3643 5362 l
-3643 5363 l
-3525 5363 l
-3527 5363 m
-3642 5363 l
-3642 5364 l
-3527 5364 l
-3528 5364 m
-3641 5364 l
-3641 5365 l
-3528 5365 l
-3529 5365 m
-3640 5365 l
-3640 5366 l
-3529 5366 l
-3530 5366 m
-3640 5366 l
-3640 5367 l
-3530 5367 l
-3532 5367 m
-3639 5367 l
-3639 5368 l
-3532 5368 l
-3533 5368 m
-3638 5368 l
-3638 5369 l
-3533 5369 l
-3534 5369 m
-3637 5369 l
-3637 5370 l
-3534 5370 l
-3535 5370 m
-3636 5370 l
-3636 5371 l
-3535 5371 l
-3537 5371 m
-3636 5371 l
-3636 5372 l
-3537 5372 l
-3538 5372 m
-3635 5372 l
-3635 5373 l
-3538 5373 l
-3539 5373 m
-3634 5373 l
-3634 5374 l
-3539 5374 l
-3540 5374 m
-3633 5374 l
-3633 5375 l
-3540 5375 l
-3542 5375 m
-3633 5375 l
-3633 5376 l
-3542 5376 l
-3543 5376 m
-3632 5376 l
-3632 5377 l
-3543 5377 l
-3544 5377 m
-3631 5377 l
-3631 5378 l
-3544 5378 l
-3545 5378 m
-3630 5378 l
-3630 5379 l
-3545 5379 l
-3547 5379 m
-3629 5379 l
-3629 5380 l
-3547 5380 l
-3548 5380 m
-3629 5380 l
-3629 5381 l
-3548 5381 l
-3549 5381 m
-3628 5381 l
-3628 5382 l
-3549 5382 l
-3550 5382 m
-3627 5382 l
-3627 5383 l
-3550 5383 l
-3551 5383 m
-3626 5383 l
-3626 5384 l
-3551 5384 l
-3553 5384 m
-3625 5384 l
-3625 5385 l
-3553 5385 l
-3554 5385 m
-3625 5385 l
-3625 5386 l
-3554 5386 l
-3555 5386 m
-3624 5386 l
-3624 5387 l
-3555 5387 l
-3556 5387 m
-3623 5387 l
-3623 5388 l
-3556 5388 l
-3558 5388 m
-3622 5388 l
-3622 5389 l
-3558 5389 l
-3559 5389 m
-3621 5389 l
-3621 5390 l
-3559 5390 l
-3560 5390 m
-3621 5390 l
-3621 5391 l
-3560 5391 l
-3561 5391 m
-3620 5391 l
-3620 5392 l
-3561 5392 l
-3563 5392 m
-3619 5392 l
-3619 5393 l
-3563 5393 l
-3564 5393 m
-3618 5393 l
-3618 5394 l
-3564 5394 l
-3565 5394 m
-3617 5394 l
-3617 5395 l
-3565 5395 l
-3566 5395 m
-3617 5395 l
-3617 5396 l
-3566 5396 l
-3568 5396 m
-3616 5396 l
-3616 5397 l
-3568 5397 l
-3569 5397 m
-3615 5397 l
-3615 5398 l
-3569 5398 l
-3570 5398 m
-3614 5398 l
-3614 5399 l
-3570 5399 l
-3571 5399 m
-3613 5399 l
-3613 5400 l
-3571 5400 l
-3573 5400 m
-3613 5400 l
-3613 5401 l
-3573 5401 l
-3574 5401 m
-3612 5401 l
-3612 5402 l
-3574 5402 l
-3575 5402 m
-3611 5402 l
-3611 5403 l
-3575 5403 l
-3576 5403 m
-3610 5403 l
-3610 5404 l
-3576 5404 l
-3578 5404 m
-3609 5404 l
-3609 5405 l
-3578 5405 l
-3579 5405 m
-3609 5405 l
-3609 5406 l
-3579 5406 l
-3580 5406 m
-3608 5406 l
-3608 5407 l
-3580 5407 l
-3581 5407 m
-3607 5407 l
-3607 5408 l
-3581 5408 l
-3583 5408 m
-3606 5408 l
-3606 5409 l
-3583 5409 l
-3584 5409 m
-3605 5409 l
-3605 5410 l
-3584 5410 l
-3585 5410 m
-3605 5410 l
-3605 5411 l
-3585 5411 l
-3586 5411 m
-3604 5411 l
-3604 5412 l
-3586 5412 l
-3588 5412 m
-3603 5412 l
-3603 5413 l
-3588 5413 l
-3589 5413 m
-3602 5413 l
-3602 5414 l
-3589 5414 l
-3590 5414 m
-3601 5414 l
-3601 5415 l
-3590 5415 l
-3591 5415 m
-3601 5415 l
-3601 5416 l
-3591 5416 l
-3593 5416 m
-3600 5416 l
-3600 5417 l
-3593 5417 l
-3594 5417 m
-3599 5417 l
-3599 5418 l
-3594 5418 l
-3595 5418 m
-3598 5418 l
-3598 5419 l
-3595 5419 l
-Y
-3711.6 5275 m
-3617 5200 l
-3502 5343 l
-3597 5419 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3631 5243 m
-3627 5240 l
-3618 5238 l
-3612 5239 l
-3604 5243 l
-3593 5256 l
-3592 5265 l
-3592 5271 l
-3596 5279 l
-3603 5284 l
-3612 5286 l
-3627 5288 l
-3685 5281 l
-3649 5327 l
-S
-3549 5311 m
-3560 5304 l
-3575 5305 l
-3594 5315 l
-3604 5323 l
-3618 5339 l
-3622 5353 l
-3618 5366 l
-3613 5372 l
-3602 5380 l
-3587 5378 l
-3568 5369 l
-3558 5361 l
-3544 5344 l
-3539 5330 l
-3544 5318 l
-3549 5311 l
-S
-1 g
-3938 4336 m
-3946 4336 l
-3946 4337 l
-3938 4337 l
-3938 4337 m
-3953 4337 l
-3953 4338 l
-3938 4338 l
-3938 4338 m
-3960 4338 l
-3960 4339 l
-3938 4339 l
-3938 4339 m
-3967 4339 l
-3967 4340 l
-3938 4340 l
-3938 4340 m
-3973 4340 l
-3973 4341 l
-3938 4341 l
-3938 4341 m
-3980 4341 l
-3980 4342 l
-3938 4342 l
-3937 4342 m
-3987 4342 l
-3987 4343 l
-3937 4343 l
-3937 4343 m
-3994 4343 l
-3994 4344 l
-3937 4344 l
-3937 4344 m
-4001 4344 l
-4001 4345 l
-3937 4345 l
-3937 4345 m
-4007 4345 l
-4007 4346 l
-3937 4346 l
-3937 4346 m
-4014 4346 l
-4014 4347 l
-3937 4347 l
-3937 4347 m
-4021 4347 l
-4021 4348 l
-3937 4348 l
-3936 4348 m
-4028 4348 l
-4028 4349 l
-3936 4349 l
-3936 4349 m
-4035 4349 l
-4035 4350 l
-3936 4350 l
-3936 4350 m
-4041 4350 l
-4041 4351 l
-3936 4351 l
-3936 4351 m
-4048 4351 l
-4048 4352 l
-3936 4352 l
-3936 4352 m
-4055 4352 l
-4055 4353 l
-3936 4353 l
-3936 4353 m
-4059 4353 l
-4059 4354 l
-3936 4354 l
-3936 4354 m
-4059 4354 l
-4059 4355 l
-3936 4355 l
-3935 4355 m
-4059 4355 l
-4059 4357 l
-3935 4357 l
-3935 4357 m
-4058 4357 l
-4058 4361 l
-3935 4361 l
-3934 4361 m
-4058 4361 l
-4058 4364 l
-3934 4364 l
-3934 4364 m
-4057 4364 l
-4057 4368 l
-3934 4368 l
-3933 4368 m
-4057 4368 l
-4057 4371 l
-3933 4371 l
-3933 4371 m
-4056 4371 l
-4056 4374 l
-3933 4374 l
-3932 4374 m
-4056 4374 l
-4056 4377 l
-3932 4377 l
-3932 4377 m
-4055 4377 l
-4055 4381 l
-3932 4381 l
-3931 4381 m
-4055 4381 l
-4055 4384 l
-3931 4384 l
-3931 4384 m
-4054 4384 l
-4054 4387 l
-3931 4387 l
-3930 4387 m
-4054 4387 l
-4054 4390 l
-3930 4390 l
-3930 4390 m
-4053 4390 l
-4053 4394 l
-3930 4394 l
-3929 4394 m
-4053 4394 l
-4053 4397 l
-3929 4397 l
-3929 4397 m
-4052 4397 l
-4052 4400 l
-3929 4400 l
-3928 4400 m
-4052 4400 l
-4052 4404 l
-3928 4404 l
-3928 4404 m
-4051 4404 l
-4051 4407 l
-3928 4407 l
-3927 4407 m
-4051 4407 l
-4051 4410 l
-3927 4410 l
-3927 4410 m
-4050 4410 l
-4050 4413 l
-3927 4413 l
-3926 4413 m
-4050 4413 l
-4050 4417 l
-3926 4417 l
-3926 4417 m
-4049 4417 l
-4049 4420 l
-3926 4420 l
-3925 4420 m
-4049 4420 l
-4049 4423 l
-3925 4423 l
-3925 4423 m
-4048 4423 l
-4048 4426 l
-3925 4426 l
-3924 4426 m
-4048 4426 l
-4048 4430 l
-3924 4430 l
-3924 4430 m
-4047 4430 l
-4047 4432 l
-3924 4432 l
-3923 4432 m
-4047 4432 l
-4047 4437 l
-3923 4437 l
-3923 4437 m
-4046 4437 l
-4046 4439 l
-3923 4439 l
-3922 4439 m
-4046 4439 l
-4046 4443 l
-3922 4443 l
-3922 4443 m
-4045 4443 l
-4045 4445 l
-3922 4445 l
-3921 4445 m
-4045 4445 l
-4045 4450 l
-3921 4450 l
-3921 4450 m
-4044 4450 l
-4044 4452 l
-3921 4452 l
-3920 4452 m
-4044 4452 l
-4044 4456 l
-3920 4456 l
-3920 4456 m
-4043 4456 l
-4043 4458 l
-3920 4458 l
-3919 4458 m
-4043 4458 l
-4043 4463 l
-3919 4463 l
-3919 4463 m
-4042 4463 l
-4042 4465 l
-3919 4465 l
-3918 4465 m
-4042 4465 l
-4042 4470 l
-3918 4470 l
-3918 4470 m
-4041 4470 l
-4041 4471 l
-3918 4471 l
-3917 4471 m
-4041 4471 l
-4041 4476 l
-3917 4476 l
-3917 4476 m
-4040 4476 l
-4040 4478 l
-3917 4478 l
-3916 4478 m
-4040 4478 l
-4040 4483 l
-3916 4483 l
-3916 4483 m
-4039 4483 l
-4039 4484 l
-3916 4484 l
-3915 4484 m
-4039 4484 l
-4039 4489 l
-3915 4489 l
-3915 4489 m
-4038 4489 l
-4038 4491 l
-3915 4491 l
-3914 4491 m
-4038 4491 l
-4038 4496 l
-3914 4496 l
-3914 4496 m
-4037 4496 l
-4037 4497 l
-3914 4497 l
-3913 4497 m
-4037 4497 l
-4037 4503 l
-3913 4503 l
-3913 4503 m
-4036 4503 l
-4036 4504 l
-3913 4504 l
-3912 4504 m
-4036 4504 l
-4036 4509 l
-3912 4509 l
-3912 4509 m
-4035 4509 l
-4035 4510 l
-3912 4510 l
-3911 4510 m
-4035 4510 l
-4035 4516 l
-3911 4516 l
-3911 4516 m
-4034 4516 l
-4034 4517 l
-3911 4517 l
-3911 4517 m
-4034 4517 l
-4034 4518 l
-3911 4518 l
-3917 4518 m
-4034 4518 l
-4034 4519 l
-3917 4519 l
-3924 4519 m
-4034 4519 l
-4034 4520 l
-3924 4520 l
-3931 4520 m
-4034 4520 l
-4034 4521 l
-3931 4521 l
-3937 4521 m
-4034 4521 l
-4034 4522 l
-3937 4522 l
-3944 4522 m
-4033 4522 l
-4033 4523 l
-3944 4523 l
-3951 4523 m
-4033 4523 l
-4033 4524 l
-3951 4524 l
-3957 4524 m
-4033 4524 l
-4033 4525 l
-3957 4525 l
-3964 4525 m
-4033 4525 l
-4033 4526 l
-3964 4526 l
-3971 4526 m
-4033 4526 l
-4033 4527 l
-3971 4527 l
-3977 4527 m
-4033 4527 l
-4033 4528 l
-3977 4528 l
-3984 4528 m
-4033 4528 l
-4033 4529 l
-3984 4529 l
-3991 4529 m
-4032 4529 l
-4032 4530 l
-3991 4530 l
-3997 4530 m
-4032 4530 l
-4032 4531 l
-3997 4531 l
-4004 4531 m
-4032 4531 l
-4032 4532 l
-4004 4532 l
-4011 4532 m
-4032 4532 l
-4032 4533 l
-4011 4533 l
-4017 4533 m
-4032 4533 l
-4032 4534 l
-4017 4534 l
-4024 4534 m
-4032 4534 l
-4032 4535 l
-4024 4535 l
-Y
-4058.5 4353.6 m
-3939 4336 l
-3911 4517 l
-4031 4535 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3972 4366 m
-3968 4365 l
-3959 4368 l
-3954 4372 l
-3949 4379 l
-3947 4396 l
-3949 4405 l
-3953 4410 l
-3961 4415 l
-3969 4416 l
-3978 4413 l
-3991 4407 l
-4039 4372 l
-4030 4430 l
-S
-3960 4449 m
-3956 4448 l
-3947 4451 l
-3942 4454 l
-3937 4462 l
-3934 4478 l
-3937 4487 l
-3941 4492 l
-3948 4497 l
-3956 4499 l
-3965 4496 l
-3979 4489 l
-4026 4454 l
-4018 4512 l
-S
-1 g
-2292 3957 m
-2296 3957 l
-2296 3958 l
-2292 3958 l
-2289 3958 m
-2296 3958 l
-2296 3959 l
-2289 3959 l
-2287 3959 m
-2297 3959 l
-2297 3960 l
-2287 3960 l
-2284 3960 m
-2297 3960 l
-2297 3961 l
-2284 3961 l
-2282 3961 m
-2297 3961 l
-2297 3962 l
-2282 3962 l
-2279 3962 m
-2298 3962 l
-2298 3963 l
-2279 3963 l
-2277 3963 m
-2298 3963 l
-2298 3964 l
-2277 3964 l
-2274 3964 m
-2299 3964 l
-2299 3965 l
-2274 3965 l
-2272 3965 m
-2299 3965 l
-2299 3966 l
-2272 3966 l
-2269 3966 m
-2299 3966 l
-2299 3967 l
-2269 3967 l
-2267 3967 m
-2300 3967 l
-2300 3968 l
-2267 3968 l
-2264 3968 m
-2300 3968 l
-2300 3969 l
-2264 3969 l
-2262 3969 m
-2301 3969 l
-2301 3970 l
-2262 3970 l
-2259 3970 m
-2301 3970 l
-2301 3971 l
-2259 3971 l
-2256 3971 m
-2301 3971 l
-2301 3972 l
-2256 3972 l
-2254 3972 m
-2302 3972 l
-2302 3973 l
-2254 3973 l
-2251 3973 m
-2302 3973 l
-2302 3974 l
-2251 3974 l
-2249 3974 m
-2303 3974 l
-2303 3975 l
-2249 3975 l
-2246 3975 m
-2303 3975 l
-2303 3976 l
-2246 3976 l
-2244 3976 m
-2303 3976 l
-2303 3977 l
-2244 3977 l
-2241 3977 m
-2304 3977 l
-2304 3978 l
-2241 3978 l
-2239 3978 m
-2304 3978 l
-2304 3979 l
-2239 3979 l
-2236 3979 m
-2305 3979 l
-2305 3980 l
-2236 3980 l
-2234 3980 m
-2305 3980 l
-2305 3981 l
-2234 3981 l
-2231 3981 m
-2305 3981 l
-2305 3982 l
-2231 3982 l
-2229 3982 m
-2306 3982 l
-2306 3983 l
-2229 3983 l
-2226 3983 m
-2306 3983 l
-2306 3984 l
-2226 3984 l
-2224 3984 m
-2307 3984 l
-2307 3985 l
-2224 3985 l
-2221 3985 m
-2307 3985 l
-2307 3986 l
-2221 3986 l
-2218 3986 m
-2307 3986 l
-2307 3987 l
-2218 3987 l
-2216 3987 m
-2308 3987 l
-2308 3988 l
-2216 3988 l
-2213 3988 m
-2308 3988 l
-2308 3989 l
-2213 3989 l
-2211 3989 m
-2308 3989 l
-2308 3990 l
-2211 3990 l
-2208 3990 m
-2309 3990 l
-2309 3991 l
-2208 3991 l
-2206 3991 m
-2309 3991 l
-2309 3992 l
-2206 3992 l
-2203 3992 m
-2310 3992 l
-2310 3993 l
-2203 3993 l
-2201 3993 m
-2310 3993 l
-2310 3994 l
-2201 3994 l
-2198 3994 m
-2310 3994 l
-2310 3995 l
-2198 3995 l
-2196 3995 m
-2311 3995 l
-2311 3996 l
-2196 3996 l
-2193 3996 m
-2311 3996 l
-2311 3997 l
-2193 3997 l
-2191 3997 m
-2312 3997 l
-2312 3998 l
-2191 3998 l
-2188 3998 m
-2312 3998 l
-2312 3999 l
-2188 3999 l
-2186 3999 m
-2312 3999 l
-2312 4000 l
-2186 4000 l
-2183 4000 m
-2313 4000 l
-2313 4001 l
-2183 4001 l
-2180 4001 m
-2313 4001 l
-2313 4002 l
-2180 4002 l
-2178 4002 m
-2314 4002 l
-2314 4003 l
-2178 4003 l
-2175 4003 m
-2314 4003 l
-2314 4004 l
-2175 4004 l
-2173 4004 m
-2314 4004 l
-2314 4005 l
-2173 4005 l
-2170 4005 m
-2315 4005 l
-2315 4006 l
-2170 4006 l
-2168 4006 m
-2315 4006 l
-2315 4007 l
-2168 4007 l
-2165 4007 m
-2316 4007 l
-2316 4008 l
-2165 4008 l
-2163 4008 m
-2316 4008 l
-2316 4009 l
-2163 4009 l
-2160 4009 m
-2316 4009 l
-2316 4010 l
-2160 4010 l
-2158 4010 m
-2317 4010 l
-2317 4011 l
-2158 4011 l
-2155 4011 m
-2317 4011 l
-2317 4012 l
-2155 4012 l
-2153 4012 m
-2318 4012 l
-2318 4013 l
-2153 4013 l
-2150 4013 m
-2318 4013 l
-2318 4014 l
-2150 4014 l
-2147 4014 m
-2318 4014 l
-2318 4015 l
-2147 4015 l
-2145 4015 m
-2319 4015 l
-2319 4016 l
-2145 4016 l
-2142 4016 m
-2319 4016 l
-2319 4017 l
-2142 4017 l
-2140 4017 m
-2320 4017 l
-2320 4018 l
-2140 4018 l
-2137 4018 m
-2320 4018 l
-2320 4019 l
-2137 4019 l
-2135 4019 m
-2320 4019 l
-2320 4020 l
-2135 4020 l
-2132 4020 m
-2321 4020 l
-2321 4021 l
-2132 4021 l
-2130 4021 m
-2321 4021 l
-2321 4022 l
-2130 4022 l
-2127 4022 m
-2321 4022 l
-2321 4023 l
-2127 4023 l
-2125 4023 m
-2322 4023 l
-2322 4024 l
-2125 4024 l
-2122 4024 m
-2322 4024 l
-2322 4025 l
-2122 4025 l
-2120 4025 m
-2323 4025 l
-2323 4026 l
-2120 4026 l
-2117 4026 m
-2323 4026 l
-2323 4027 l
-2117 4027 l
-2115 4027 m
-2323 4027 l
-2323 4028 l
-2115 4028 l
-2112 4028 m
-2324 4028 l
-2324 4029 l
-2112 4029 l
-2109 4029 m
-2324 4029 l
-2324 4030 l
-2109 4030 l
-2107 4030 m
-2325 4030 l
-2325 4031 l
-2107 4031 l
-2104 4031 m
-2325 4031 l
-2325 4032 l
-2104 4032 l
-2102 4032 m
-2325 4032 l
-2325 4033 l
-2102 4033 l
-2099 4033 m
-2326 4033 l
-2326 4034 l
-2099 4034 l
-2097 4034 m
-2326 4034 l
-2326 4035 l
-2097 4035 l
-2094 4035 m
-2327 4035 l
-2327 4036 l
-2094 4036 l
-2092 4036 m
-2327 4036 l
-2327 4037 l
-2092 4037 l
-2089 4037 m
-2327 4037 l
-2327 4038 l
-2089 4038 l
-2087 4038 m
-2328 4038 l
-2328 4039 l
-2087 4039 l
-2084 4039 m
-2328 4039 l
-2328 4040 l
-2084 4040 l
-2082 4040 m
-2329 4040 l
-2329 4041 l
-2082 4041 l
-2079 4041 m
-2329 4041 l
-2329 4042 l
-2079 4042 l
-2077 4042 m
-2329 4042 l
-2329 4043 l
-2077 4043 l
-2074 4043 m
-2330 4043 l
-2330 4044 l
-2074 4044 l
-2071 4044 m
-2330 4044 l
-2330 4045 l
-2071 4045 l
-2069 4045 m
-2331 4045 l
-2331 4046 l
-2069 4046 l
-2066 4046 m
-2331 4046 l
-2331 4047 l
-2066 4047 l
-2064 4047 m
-2331 4047 l
-2331 4048 l
-2064 4048 l
-2061 4048 m
-2332 4048 l
-2332 4049 l
-2061 4049 l
-2059 4049 m
-2332 4049 l
-2332 4050 l
-2059 4050 l
-2056 4050 m
-2333 4050 l
-2333 4051 l
-2056 4051 l
-2054 4051 m
-2333 4051 l
-2333 4052 l
-2054 4052 l
-2051 4052 m
-2333 4052 l
-2333 4053 l
-2051 4053 l
-2049 4053 m
-2334 4053 l
-2334 4054 l
-2049 4054 l
-2046 4054 m
-2334 4054 l
-2334 4055 l
-2046 4055 l
-2044 4055 m
-2334 4055 l
-2334 4056 l
-2044 4056 l
-2041 4056 m
-2335 4056 l
-2335 4057 l
-2041 4057 l
-2038 4057 m
-2335 4057 l
-2335 4058 l
-2038 4058 l
-2036 4058 m
-2336 4058 l
-2336 4059 l
-2036 4059 l
-2033 4059 m
-2336 4059 l
-2336 4060 l
-2033 4060 l
-2031 4060 m
-2336 4060 l
-2336 4061 l
-2031 4061 l
-2028 4061 m
-2337 4061 l
-2337 4062 l
-2028 4062 l
-2026 4062 m
-2337 4062 l
-2337 4063 l
-2026 4063 l
-2023 4063 m
-2338 4063 l
-2338 4064 l
-2023 4064 l
-2021 4064 m
-2338 4064 l
-2338 4065 l
-2021 4065 l
-2018 4065 m
-2338 4065 l
-2338 4066 l
-2018 4066 l
-2016 4066 m
-2339 4066 l
-2339 4067 l
-2016 4067 l
-2013 4067 m
-2339 4067 l
-2339 4068 l
-2013 4068 l
-2011 4068 m
-2340 4068 l
-2340 4069 l
-2011 4069 l
-2008 4069 m
-2340 4069 l
-2340 4070 l
-2008 4070 l
-2006 4070 m
-2338 4070 l
-2338 4071 l
-2006 4071 l
-2003 4071 m
-2335 4071 l
-2335 4072 l
-2003 4072 l
-2000 4072 m
-2333 4072 l
-2333 4073 l
-2000 4073 l
-1998 4073 m
-2330 4073 l
-2330 4074 l
-1998 4074 l
-1995 4074 m
-2328 4074 l
-2328 4075 l
-1995 4075 l
-1993 4075 m
-2325 4075 l
-2325 4076 l
-1993 4076 l
-1990 4076 m
-2323 4076 l
-2323 4077 l
-1990 4077 l
-1988 4077 m
-2320 4077 l
-2320 4078 l
-1988 4078 l
-1985 4078 m
-2318 4078 l
-2318 4079 l
-1985 4079 l
-1983 4079 m
-2315 4079 l
-2315 4080 l
-1983 4080 l
-1980 4080 m
-2312 4080 l
-2312 4081 l
-1980 4081 l
-1978 4081 m
-2310 4081 l
-2310 4082 l
-1978 4082 l
-1975 4082 m
-2307 4082 l
-2307 4083 l
-1975 4083 l
-1973 4083 m
-2305 4083 l
-2305 4084 l
-1973 4084 l
-1970 4084 m
-2302 4084 l
-2302 4085 l
-1970 4085 l
-1968 4085 m
-2300 4085 l
-2300 4086 l
-1968 4086 l
-1965 4086 m
-2297 4086 l
-2297 4087 l
-1965 4087 l
-1962 4087 m
-2295 4087 l
-2295 4088 l
-1962 4088 l
-1960 4088 m
-2292 4088 l
-2292 4089 l
-1960 4089 l
-1957 4089 m
-2290 4089 l
-2290 4090 l
-1957 4090 l
-1955 4090 m
-2287 4090 l
-2287 4091 l
-1955 4091 l
-1952 4091 m
-2285 4091 l
-2285 4092 l
-1952 4092 l
-1950 4092 m
-2282 4092 l
-2282 4093 l
-1950 4093 l
-1947 4093 m
-2280 4093 l
-2280 4094 l
-1947 4094 l
-1945 4094 m
-2277 4094 l
-2277 4095 l
-1945 4095 l
-1942 4095 m
-2275 4095 l
-2275 4096 l
-1942 4096 l
-1940 4096 m
-2272 4096 l
-2272 4097 l
-1940 4097 l
-1937 4097 m
-2270 4097 l
-2270 4098 l
-1937 4098 l
-1935 4098 m
-2267 4098 l
-2267 4099 l
-1935 4099 l
-1932 4099 m
-2265 4099 l
-2265 4100 l
-1932 4100 l
-1930 4100 m
-2262 4100 l
-2262 4101 l
-1930 4101 l
-1930 4101 m
-2259 4101 l
-2259 4102 l
-1930 4102 l
-1930 4102 m
-2257 4102 l
-2257 4103 l
-1930 4103 l
-1930 4103 m
-2254 4103 l
-2254 4104 l
-1930 4104 l
-1931 4104 m
-2252 4104 l
-2252 4105 l
-1931 4105 l
-1931 4105 m
-2249 4105 l
-2249 4106 l
-1931 4106 l
-1931 4106 m
-2247 4106 l
-2247 4107 l
-1931 4107 l
-1932 4107 m
-2244 4107 l
-2244 4108 l
-1932 4108 l
-1932 4108 m
-2242 4108 l
-2242 4109 l
-1932 4109 l
-1933 4109 m
-2239 4109 l
-2239 4110 l
-1933 4110 l
-1933 4110 m
-2237 4110 l
-2237 4111 l
-1933 4111 l
-1933 4111 m
-2234 4111 l
-2234 4112 l
-1933 4112 l
-1934 4112 m
-2232 4112 l
-2232 4113 l
-1934 4113 l
-1934 4113 m
-2229 4113 l
-2229 4114 l
-1934 4114 l
-1935 4114 m
-2227 4114 l
-2227 4115 l
-1935 4115 l
-1935 4115 m
-2224 4115 l
-2224 4116 l
-1935 4116 l
-1935 4116 m
-2222 4116 l
-2222 4117 l
-1935 4117 l
-1936 4117 m
-2219 4117 l
-2219 4118 l
-1936 4118 l
-1936 4118 m
-2217 4118 l
-2217 4119 l
-1936 4119 l
-1937 4119 m
-2214 4119 l
-2214 4120 l
-1937 4120 l
-1937 4120 m
-2212 4120 l
-2212 4121 l
-1937 4121 l
-1937 4121 m
-2209 4121 l
-2209 4122 l
-1937 4122 l
-1938 4122 m
-2207 4122 l
-2207 4123 l
-1938 4123 l
-1938 4123 m
-2204 4123 l
-2204 4124 l
-1938 4124 l
-1938 4124 m
-2201 4124 l
-2201 4125 l
-1938 4125 l
-1939 4125 m
-2199 4125 l
-2199 4126 l
-1939 4126 l
-1939 4126 m
-2196 4126 l
-2196 4127 l
-1939 4127 l
-1940 4127 m
-2194 4127 l
-2194 4128 l
-1940 4128 l
-1940 4128 m
-2191 4128 l
-2191 4129 l
-1940 4129 l
-1940 4129 m
-2189 4129 l
-2189 4130 l
-1940 4130 l
-1941 4130 m
-2186 4130 l
-2186 4131 l
-1941 4131 l
-1941 4131 m
-2184 4131 l
-2184 4132 l
-1941 4132 l
-1942 4132 m
-2181 4132 l
-2181 4133 l
-1942 4133 l
-1942 4133 m
-2179 4133 l
-2179 4134 l
-1942 4134 l
-1942 4134 m
-2176 4134 l
-2176 4135 l
-1942 4135 l
-1943 4135 m
-2174 4135 l
-2174 4136 l
-1943 4136 l
-1943 4136 m
-2171 4136 l
-2171 4137 l
-1943 4137 l
-1944 4137 m
-2169 4137 l
-2169 4138 l
-1944 4138 l
-1944 4138 m
-2166 4138 l
-2166 4139 l
-1944 4139 l
-1944 4139 m
-2164 4139 l
-2164 4140 l
-1944 4140 l
-1945 4140 m
-2161 4140 l
-2161 4141 l
-1945 4141 l
-1945 4141 m
-2159 4141 l
-2159 4142 l
-1945 4142 l
-1945 4142 m
-2156 4142 l
-2156 4143 l
-1945 4143 l
-1946 4143 m
-2154 4143 l
-2154 4144 l
-1946 4144 l
-1946 4144 m
-2151 4144 l
-2151 4145 l
-1946 4145 l
-1947 4145 m
-2149 4145 l
-2149 4146 l
-1947 4146 l
-1947 4146 m
-2146 4146 l
-2146 4147 l
-1947 4147 l
-1947 4147 m
-2143 4147 l
-2143 4148 l
-1947 4148 l
-1948 4148 m
-2141 4148 l
-2141 4149 l
-1948 4149 l
-1948 4149 m
-2138 4149 l
-2138 4150 l
-1948 4150 l
-1949 4150 m
-2136 4150 l
-2136 4151 l
-1949 4151 l
-1949 4151 m
-2133 4151 l
-2133 4152 l
-1949 4152 l
-1949 4152 m
-2131 4152 l
-2131 4153 l
-1949 4153 l
-1950 4153 m
-2128 4153 l
-2128 4154 l
-1950 4154 l
-1950 4154 m
-2126 4154 l
-2126 4155 l
-1950 4155 l
-1951 4155 m
-2123 4155 l
-2123 4156 l
-1951 4156 l
-1951 4156 m
-2121 4156 l
-2121 4157 l
-1951 4157 l
-1951 4157 m
-2118 4157 l
-2118 4158 l
-1951 4158 l
-1952 4158 m
-2116 4158 l
-2116 4159 l
-1952 4159 l
-1952 4159 m
-2113 4159 l
-2113 4160 l
-1952 4160 l
-1952 4160 m
-2111 4160 l
-2111 4161 l
-1952 4161 l
-1953 4161 m
-2108 4161 l
-2108 4162 l
-1953 4162 l
-1953 4162 m
-2106 4162 l
-2106 4163 l
-1953 4163 l
-1954 4163 m
-2103 4163 l
-2103 4164 l
-1954 4164 l
-1954 4164 m
-2101 4164 l
-2101 4165 l
-1954 4165 l
-1954 4165 m
-2098 4165 l
-2098 4166 l
-1954 4166 l
-1955 4166 m
-2096 4166 l
-2096 4167 l
-1955 4167 l
-1955 4167 m
-2093 4167 l
-2093 4168 l
-1955 4168 l
-1956 4168 m
-2091 4168 l
-2091 4169 l
-1956 4169 l
-1956 4169 m
-2088 4169 l
-2088 4170 l
-1956 4170 l
-1956 4170 m
-2085 4170 l
-2085 4171 l
-1956 4171 l
-1957 4171 m
-2083 4171 l
-2083 4172 l
-1957 4172 l
-1957 4172 m
-2080 4172 l
-2080 4173 l
-1957 4173 l
-1958 4173 m
-2078 4173 l
-2078 4174 l
-1958 4174 l
-1958 4174 m
-2075 4174 l
-2075 4175 l
-1958 4175 l
-1958 4175 m
-2073 4175 l
-2073 4176 l
-1958 4176 l
-1959 4176 m
-2070 4176 l
-2070 4177 l
-1959 4177 l
-1959 4177 m
-2068 4177 l
-2068 4178 l
-1959 4178 l
-1959 4178 m
-2065 4178 l
-2065 4179 l
-1959 4179 l
-1960 4179 m
-2063 4179 l
-2063 4180 l
-1960 4180 l
-1960 4180 m
-2060 4180 l
-2060 4181 l
-1960 4181 l
-1961 4181 m
-2058 4181 l
-2058 4182 l
-1961 4182 l
-1961 4182 m
-2055 4182 l
-2055 4183 l
-1961 4183 l
-1961 4183 m
-2053 4183 l
-2053 4184 l
-1961 4184 l
-1962 4184 m
-2050 4184 l
-2050 4185 l
-1962 4185 l
-1962 4185 m
-2048 4185 l
-2048 4186 l
-1962 4186 l
-1963 4186 m
-2045 4186 l
-2045 4187 l
-1963 4187 l
-1963 4187 m
-2043 4187 l
-2043 4188 l
-1963 4188 l
-1963 4188 m
-2040 4188 l
-2040 4189 l
-1963 4189 l
-1964 4189 m
-2038 4189 l
-2038 4190 l
-1964 4190 l
-1964 4190 m
-2035 4190 l
-2035 4191 l
-1964 4191 l
-1965 4191 m
-2033 4191 l
-2033 4192 l
-1965 4192 l
-1965 4192 m
-2030 4192 l
-2030 4193 l
-1965 4193 l
-1965 4193 m
-2027 4193 l
-2027 4194 l
-1965 4194 l
-1966 4194 m
-2025 4194 l
-2025 4195 l
-1966 4195 l
-1966 4195 m
-2022 4195 l
-2022 4196 l
-1966 4196 l
-1966 4196 m
-2020 4196 l
-2020 4197 l
-1966 4197 l
-1967 4197 m
-2017 4197 l
-2017 4198 l
-1967 4198 l
-1967 4198 m
-2015 4198 l
-2015 4199 l
-1967 4199 l
-1968 4199 m
-2012 4199 l
-2012 4200 l
-1968 4200 l
-1968 4200 m
-2010 4200 l
-2010 4201 l
-1968 4201 l
-1968 4201 m
-2007 4201 l
-2007 4202 l
-1968 4202 l
-1969 4202 m
-2005 4202 l
-2005 4203 l
-1969 4203 l
-1969 4203 m
-2002 4203 l
-2002 4204 l
-1969 4204 l
-1970 4204 m
-2000 4204 l
-2000 4205 l
-1970 4205 l
-1970 4205 m
-1997 4205 l
-1997 4206 l
-1970 4206 l
-1970 4206 m
-1995 4206 l
-1995 4207 l
-1970 4207 l
-1971 4207 m
-1992 4207 l
-1992 4208 l
-1971 4208 l
-1971 4208 m
-1990 4208 l
-1990 4209 l
-1971 4209 l
-1972 4209 m
-1987 4209 l
-1987 4210 l
-1972 4210 l
-1972 4210 m
-1985 4210 l
-1985 4211 l
-1972 4211 l
-1972 4211 m
-1982 4211 l
-1982 4212 l
-1972 4212 l
-1973 4212 m
-1980 4212 l
-1980 4213 l
-1973 4213 l
-1973 4213 m
-1977 4213 l
-1977 4214 l
-1973 4214 l
-Y
-2339.2 4069.2 m
-2295 3957 l
-1930 4101 l
-1974 4214 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2242 4027 m
-2250 4037 l
-2261 4042 l
-2274 4041 l
-2278 4040 l
-2288 4031 l
-2293 4020 l
-2292 4007 l
-2291 4003 l
-2282 3993 l
-2271 3988 l
-2258 3989 l
-2254 3991 l
-2244 3999 l
-2239 4010 l
-2242 4027 l
-2249 4046 l
-2261 4064 l
-2273 4073 l
-2286 4072 l
-2294 4069 l
-2304 4061 l
-2305 4051 l
-S
-2180 4020 m
-2194 4019 l
-2206 4028 l
-2217 4046 l
-2222 4057 l
-2226 4078 l
-2223 4093 l
-2213 4101 l
-2205 4104 l
-2192 4105 l
-2179 4097 l
-2168 4079 l
-2163 4067 l
-2159 4046 l
-2162 4031 l
-2173 4023 l
-2180 4020 l
-S
-2129 4072 m
-2134 4074 l
-2132 4079 l
-2127 4077 l
-2129 4072 l
-S
-2147 4118 m
-2153 4121 l
-2150 4126 l
-2145 4124 l
-2147 4118 l
-S
-2064 4066 m
-2077 4065 l
-2089 4074 l
-2101 4092 l
-2106 4103 l
-2109 4124 l
-2106 4139 l
-2096 4148 l
-2088 4151 l
-2075 4151 l
-2063 4143 l
-2051 4125 l
-2047 4113 l
-2043 4092 l
-2046 4078 l
-2056 4069 l
-2064 4066 l
-S
-1986 4097 m
-1999 4096 l
-2012 4105 l
-2023 4122 l
-2028 4134 l
-2032 4155 l
-2029 4170 l
-2018 4178 l
-2011 4181 l
-1998 4182 l
-1985 4173 l
-1974 4156 l
-1969 4144 l
-1965 4123 l
-1968 4108 l
-1978 4100 l
-1986 4097 l
-S
-1 g
-2732 3782 m
-2736 3782 l
-2736 3783 l
-2732 3783 l
-2729 3783 m
-2736 3783 l
-2736 3784 l
-2729 3784 l
-2727 3784 m
-2737 3784 l
-2737 3785 l
-2727 3785 l
-2724 3785 m
-2737 3785 l
-2737 3786 l
-2724 3786 l
-2722 3786 m
-2737 3786 l
-2737 3787 l
-2722 3787 l
-2719 3787 m
-2738 3787 l
-2738 3788 l
-2719 3788 l
-2717 3788 m
-2738 3788 l
-2738 3789 l
-2717 3789 l
-2714 3789 m
-2739 3789 l
-2739 3790 l
-2714 3790 l
-2712 3790 m
-2739 3790 l
-2739 3791 l
-2712 3791 l
-2709 3791 m
-2739 3791 l
-2739 3792 l
-2709 3792 l
-2707 3792 m
-2740 3792 l
-2740 3793 l
-2707 3793 l
-2704 3793 m
-2740 3793 l
-2740 3794 l
-2704 3794 l
-2702 3794 m
-2741 3794 l
-2741 3795 l
-2702 3795 l
-2699 3795 m
-2741 3795 l
-2741 3796 l
-2699 3796 l
-2697 3796 m
-2741 3796 l
-2741 3797 l
-2697 3797 l
-2694 3797 m
-2742 3797 l
-2742 3798 l
-2694 3798 l
-2692 3798 m
-2742 3798 l
-2742 3799 l
-2692 3799 l
-2689 3799 m
-2743 3799 l
-2743 3800 l
-2689 3800 l
-2687 3800 m
-2743 3800 l
-2743 3801 l
-2687 3801 l
-2684 3801 m
-2743 3801 l
-2743 3802 l
-2684 3802 l
-2682 3802 m
-2744 3802 l
-2744 3803 l
-2682 3803 l
-2679 3803 m
-2744 3803 l
-2744 3804 l
-2679 3804 l
-2677 3804 m
-2745 3804 l
-2745 3805 l
-2677 3805 l
-2674 3805 m
-2745 3805 l
-2745 3806 l
-2674 3806 l
-2672 3806 m
-2745 3806 l
-2745 3807 l
-2672 3807 l
-2669 3807 m
-2746 3807 l
-2746 3808 l
-2669 3808 l
-2667 3808 m
-2746 3808 l
-2746 3809 l
-2667 3809 l
-2664 3809 m
-2747 3809 l
-2747 3810 l
-2664 3810 l
-2662 3810 m
-2747 3810 l
-2747 3811 l
-2662 3811 l
-2659 3811 m
-2747 3811 l
-2747 3812 l
-2659 3812 l
-2657 3812 m
-2748 3812 l
-2748 3813 l
-2657 3813 l
-2654 3813 m
-2748 3813 l
-2748 3814 l
-2654 3814 l
-2652 3814 m
-2749 3814 l
-2749 3815 l
-2652 3815 l
-2649 3815 m
-2749 3815 l
-2749 3816 l
-2649 3816 l
-2646 3816 m
-2749 3816 l
-2749 3817 l
-2646 3817 l
-2644 3817 m
-2750 3817 l
-2750 3818 l
-2644 3818 l
-2641 3818 m
-2750 3818 l
-2750 3819 l
-2641 3819 l
-2639 3819 m
-2750 3819 l
-2750 3820 l
-2639 3820 l
-2636 3820 m
-2751 3820 l
-2751 3821 l
-2636 3821 l
-2634 3821 m
-2751 3821 l
-2751 3822 l
-2634 3822 l
-2631 3822 m
-2752 3822 l
-2752 3823 l
-2631 3823 l
-2629 3823 m
-2752 3823 l
-2752 3824 l
-2629 3824 l
-2626 3824 m
-2752 3824 l
-2752 3825 l
-2626 3825 l
-2624 3825 m
-2753 3825 l
-2753 3826 l
-2624 3826 l
-2621 3826 m
-2753 3826 l
-2753 3827 l
-2621 3827 l
-2619 3827 m
-2754 3827 l
-2754 3828 l
-2619 3828 l
-2616 3828 m
-2754 3828 l
-2754 3829 l
-2616 3829 l
-2614 3829 m
-2754 3829 l
-2754 3830 l
-2614 3830 l
-2611 3830 m
-2755 3830 l
-2755 3831 l
-2611 3831 l
-2609 3831 m
-2755 3831 l
-2755 3832 l
-2609 3832 l
-2606 3832 m
-2756 3832 l
-2756 3833 l
-2606 3833 l
-2604 3833 m
-2756 3833 l
-2756 3834 l
-2604 3834 l
-2601 3834 m
-2756 3834 l
-2756 3835 l
-2601 3835 l
-2599 3835 m
-2757 3835 l
-2757 3836 l
-2599 3836 l
-2596 3836 m
-2757 3836 l
-2757 3837 l
-2596 3837 l
-2594 3837 m
-2758 3837 l
-2758 3838 l
-2594 3838 l
-2591 3838 m
-2758 3838 l
-2758 3839 l
-2591 3839 l
-2589 3839 m
-2758 3839 l
-2758 3840 l
-2589 3840 l
-2586 3840 m
-2759 3840 l
-2759 3841 l
-2586 3841 l
-2584 3841 m
-2759 3841 l
-2759 3842 l
-2584 3842 l
-2581 3842 m
-2760 3842 l
-2760 3843 l
-2581 3843 l
-2579 3843 m
-2760 3843 l
-2760 3844 l
-2579 3844 l
-2576 3844 m
-2760 3844 l
-2760 3845 l
-2576 3845 l
-2574 3845 m
-2761 3845 l
-2761 3846 l
-2574 3846 l
-2571 3846 m
-2761 3846 l
-2761 3847 l
-2571 3847 l
-2569 3847 m
-2762 3847 l
-2762 3848 l
-2569 3848 l
-2566 3848 m
-2762 3848 l
-2762 3849 l
-2566 3849 l
-2564 3849 m
-2762 3849 l
-2762 3850 l
-2564 3850 l
-2564 3850 m
-2763 3850 l
-2763 3852 l
-2564 3852 l
-2564 3852 m
-2764 3852 l
-2764 3853 l
-2564 3853 l
-2565 3853 m
-2764 3853 l
-2764 3855 l
-2565 3855 l
-2566 3855 m
-2765 3855 l
-2765 3858 l
-2566 3858 l
-2567 3858 m
-2766 3858 l
-2766 3860 l
-2567 3860 l
-2568 3860 m
-2767 3860 l
-2767 3863 l
-2568 3863 l
-2569 3863 m
-2768 3863 l
-2768 3865 l
-2569 3865 l
-2570 3865 m
-2769 3865 l
-2769 3868 l
-2570 3868 l
-2571 3868 m
-2770 3868 l
-2770 3870 l
-2571 3870 l
-2572 3870 m
-2771 3870 l
-2771 3873 l
-2572 3873 l
-2573 3873 m
-2772 3873 l
-2772 3875 l
-2573 3875 l
-2574 3875 m
-2773 3875 l
-2773 3878 l
-2574 3878 l
-2575 3878 m
-2774 3878 l
-2774 3880 l
-2575 3880 l
-2576 3880 m
-2775 3880 l
-2775 3883 l
-2576 3883 l
-2577 3883 m
-2776 3883 l
-2776 3885 l
-2577 3885 l
-2578 3885 m
-2777 3885 l
-2777 3888 l
-2578 3888 l
-2579 3888 m
-2778 3888 l
-2778 3890 l
-2579 3890 l
-2580 3890 m
-2779 3890 l
-2779 3893 l
-2580 3893 l
-2581 3893 m
-2780 3893 l
-2780 3894 l
-2581 3894 l
-2581 3894 m
-2780 3894 l
-2780 3895 l
-2581 3895 l
-2582 3895 m
-2779 3895 l
-2779 3896 l
-2582 3896 l
-2582 3896 m
-2777 3896 l
-2777 3897 l
-2582 3897 l
-2582 3897 m
-2774 3897 l
-2774 3898 l
-2582 3898 l
-2583 3898 m
-2772 3898 l
-2772 3899 l
-2583 3899 l
-2583 3899 m
-2769 3899 l
-2769 3900 l
-2583 3900 l
-2584 3900 m
-2767 3900 l
-2767 3901 l
-2584 3901 l
-2584 3901 m
-2764 3901 l
-2764 3902 l
-2584 3902 l
-2584 3902 m
-2762 3902 l
-2762 3903 l
-2584 3903 l
-2585 3903 m
-2759 3903 l
-2759 3904 l
-2585 3904 l
-2585 3904 m
-2757 3904 l
-2757 3905 l
-2585 3905 l
-2586 3905 m
-2754 3905 l
-2754 3906 l
-2586 3906 l
-2586 3906 m
-2752 3906 l
-2752 3907 l
-2586 3907 l
-2586 3907 m
-2749 3907 l
-2749 3908 l
-2586 3908 l
-2587 3908 m
-2747 3908 l
-2747 3909 l
-2587 3909 l
-2587 3909 m
-2744 3909 l
-2744 3910 l
-2587 3910 l
-2588 3910 m
-2741 3910 l
-2741 3911 l
-2588 3911 l
-2588 3911 m
-2739 3911 l
-2739 3912 l
-2588 3912 l
-2588 3912 m
-2736 3912 l
-2736 3913 l
-2588 3913 l
-2589 3913 m
-2734 3913 l
-2734 3914 l
-2589 3914 l
-2589 3914 m
-2731 3914 l
-2731 3915 l
-2589 3915 l
-2590 3915 m
-2729 3915 l
-2729 3916 l
-2590 3916 l
-2590 3916 m
-2726 3916 l
-2726 3917 l
-2590 3917 l
-2590 3917 m
-2724 3917 l
-2724 3918 l
-2590 3918 l
-2591 3918 m
-2721 3918 l
-2721 3919 l
-2591 3919 l
-2591 3919 m
-2719 3919 l
-2719 3920 l
-2591 3920 l
-2592 3920 m
-2716 3920 l
-2716 3921 l
-2592 3921 l
-2592 3921 m
-2714 3921 l
-2714 3922 l
-2592 3922 l
-2592 3922 m
-2711 3922 l
-2711 3923 l
-2592 3923 l
-2593 3923 m
-2708 3923 l
-2708 3924 l
-2593 3924 l
-2593 3924 m
-2706 3924 l
-2706 3925 l
-2593 3925 l
-2594 3925 m
-2703 3925 l
-2703 3926 l
-2594 3926 l
-2594 3926 m
-2701 3926 l
-2701 3927 l
-2594 3927 l
-2594 3927 m
-2698 3927 l
-2698 3928 l
-2594 3928 l
-2595 3928 m
-2696 3928 l
-2696 3929 l
-2595 3929 l
-2595 3929 m
-2693 3929 l
-2693 3930 l
-2595 3930 l
-2596 3930 m
-2691 3930 l
-2691 3931 l
-2596 3931 l
-2596 3931 m
-2688 3931 l
-2688 3932 l
-2596 3932 l
-2596 3932 m
-2686 3932 l
-2686 3933 l
-2596 3933 l
-2597 3933 m
-2683 3933 l
-2683 3934 l
-2597 3934 l
-2597 3934 m
-2681 3934 l
-2681 3935 l
-2597 3935 l
-2598 3935 m
-2678 3935 l
-2678 3936 l
-2598 3936 l
-2598 3936 m
-2675 3936 l
-2675 3937 l
-2598 3937 l
-2598 3937 m
-2673 3937 l
-2673 3938 l
-2598 3938 l
-2599 3938 m
-2670 3938 l
-2670 3939 l
-2599 3939 l
-2599 3939 m
-2668 3939 l
-2668 3940 l
-2599 3940 l
-2600 3940 m
-2665 3940 l
-2665 3941 l
-2600 3941 l
-2600 3941 m
-2663 3941 l
-2663 3942 l
-2600 3942 l
-2600 3942 m
-2660 3942 l
-2660 3943 l
-2600 3943 l
-2601 3943 m
-2658 3943 l
-2658 3944 l
-2601 3944 l
-2601 3944 m
-2655 3944 l
-2655 3945 l
-2601 3945 l
-2602 3945 m
-2653 3945 l
-2653 3946 l
-2602 3946 l
-2602 3946 m
-2650 3946 l
-2650 3947 l
-2602 3947 l
-2602 3947 m
-2648 3947 l
-2648 3948 l
-2602 3948 l
-2603 3948 m
-2645 3948 l
-2645 3949 l
-2603 3949 l
-2603 3949 m
-2642 3949 l
-2642 3950 l
-2603 3950 l
-2604 3950 m
-2640 3950 l
-2640 3951 l
-2604 3951 l
-2604 3951 m
-2637 3951 l
-2637 3952 l
-2604 3952 l
-2604 3952 m
-2635 3952 l
-2635 3953 l
-2604 3953 l
-2605 3953 m
-2632 3953 l
-2632 3954 l
-2605 3954 l
-2605 3954 m
-2630 3954 l
-2630 3955 l
-2605 3955 l
-2606 3955 m
-2627 3955 l
-2627 3956 l
-2606 3956 l
-2606 3956 m
-2625 3956 l
-2625 3957 l
-2606 3957 l
-2606 3957 m
-2622 3957 l
-2622 3958 l
-2606 3958 l
-2607 3958 m
-2620 3958 l
-2620 3959 l
-2607 3959 l
-2607 3959 m
-2617 3959 l
-2617 3960 l
-2607 3960 l
-2608 3960 m
-2615 3960 l
-2615 3961 l
-2608 3961 l
-2608 3961 m
-2612 3961 l
-2612 3962 l
-2608 3962 l
-Y
-2779.5 3894.8 m
-2735 3782 l
-2564 3850 l
-2609 3962 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2675 3824 m
-2714 3808 l
-2732 3842 l
-2726 3840 l
-2713 3840 l
-2701 3845 l
-2691 3853 l
-2687 3864 l
-2687 3877 l
-2690 3885 l
-2699 3895 l
-2710 3900 l
-2723 3899 l
-2735 3895 l
-2745 3886 l
-2747 3881 l
-2748 3871 l
-S
-2625 3844 m
-2638 3843 l
-2645 3849 l
-2648 3857 l
-2647 3866 l
-2641 3873 l
-2627 3883 l
-2617 3892 l
-2612 3903 l
-2611 3912 l
-2616 3924 l
-2623 3930 l
-2628 3932 l
-2641 3932 l
-2657 3925 l
-2667 3917 l
-2669 3911 l
-2670 3902 l
-2666 3891 l
-2659 3884 l
-2648 3880 l
-2635 3880 l
-2617 3883 l
-2608 3882 l
-2601 3876 l
-2598 3868 l
-2599 3858 l
-2609 3850 l
-2625 3844 l
-S
-1 g
-3269 3569 m
-3273 3569 l
-3273 3570 l
-3269 3570 l
-3267 3570 m
-3273 3570 l
-3273 3571 l
-3267 3571 l
-3264 3571 m
-3274 3571 l
-3274 3572 l
-3264 3572 l
-3262 3572 m
-3274 3572 l
-3274 3573 l
-3262 3573 l
-3259 3573 m
-3274 3573 l
-3274 3574 l
-3259 3574 l
-3257 3574 m
-3275 3574 l
-3275 3575 l
-3257 3575 l
-3254 3575 m
-3275 3575 l
-3275 3576 l
-3254 3576 l
-3252 3576 m
-3276 3576 l
-3276 3577 l
-3252 3577 l
-3249 3577 m
-3276 3577 l
-3276 3578 l
-3249 3578 l
-3247 3578 m
-3276 3578 l
-3276 3579 l
-3247 3579 l
-3244 3579 m
-3277 3579 l
-3277 3580 l
-3244 3580 l
-3242 3580 m
-3277 3580 l
-3277 3581 l
-3242 3581 l
-3239 3581 m
-3278 3581 l
-3278 3582 l
-3239 3582 l
-3237 3582 m
-3278 3582 l
-3278 3583 l
-3237 3583 l
-3234 3583 m
-3278 3583 l
-3278 3584 l
-3234 3584 l
-3232 3584 m
-3279 3584 l
-3279 3585 l
-3232 3585 l
-3229 3585 m
-3279 3585 l
-3279 3586 l
-3229 3586 l
-3227 3586 m
-3280 3586 l
-3280 3587 l
-3227 3587 l
-3224 3587 m
-3280 3587 l
-3280 3588 l
-3224 3588 l
-3222 3588 m
-3280 3588 l
-3280 3589 l
-3222 3589 l
-3219 3589 m
-3281 3589 l
-3281 3590 l
-3219 3590 l
-3217 3590 m
-3281 3590 l
-3281 3591 l
-3217 3591 l
-3214 3591 m
-3282 3591 l
-3282 3592 l
-3214 3592 l
-3212 3592 m
-3282 3592 l
-3282 3593 l
-3212 3593 l
-3209 3593 m
-3282 3593 l
-3282 3594 l
-3209 3594 l
-3207 3594 m
-3283 3594 l
-3283 3595 l
-3207 3595 l
-3204 3595 m
-3283 3595 l
-3283 3596 l
-3204 3596 l
-3202 3596 m
-3284 3596 l
-3284 3597 l
-3202 3597 l
-3199 3597 m
-3284 3597 l
-3284 3598 l
-3199 3598 l
-3197 3598 m
-3284 3598 l
-3284 3599 l
-3197 3599 l
-3194 3599 m
-3285 3599 l
-3285 3600 l
-3194 3600 l
-3192 3600 m
-3285 3600 l
-3285 3601 l
-3192 3601 l
-3189 3601 m
-3286 3601 l
-3286 3602 l
-3189 3602 l
-3187 3602 m
-3286 3602 l
-3286 3603 l
-3187 3603 l
-3184 3603 m
-3286 3603 l
-3286 3604 l
-3184 3604 l
-3182 3604 m
-3287 3604 l
-3287 3605 l
-3182 3605 l
-3179 3605 m
-3287 3605 l
-3287 3606 l
-3179 3606 l
-3177 3606 m
-3288 3606 l
-3288 3607 l
-3177 3607 l
-3174 3607 m
-3288 3607 l
-3288 3608 l
-3174 3608 l
-3172 3608 m
-3288 3608 l
-3288 3609 l
-3172 3609 l
-3169 3609 m
-3289 3609 l
-3289 3610 l
-3169 3610 l
-3167 3610 m
-3289 3610 l
-3289 3611 l
-3167 3611 l
-3164 3611 m
-3290 3611 l
-3290 3612 l
-3164 3612 l
-3162 3612 m
-3290 3612 l
-3290 3613 l
-3162 3613 l
-3159 3613 m
-3290 3613 l
-3290 3614 l
-3159 3614 l
-3157 3614 m
-3291 3614 l
-3291 3615 l
-3157 3615 l
-3154 3615 m
-3291 3615 l
-3291 3616 l
-3154 3616 l
-3152 3616 m
-3292 3616 l
-3292 3617 l
-3152 3617 l
-3149 3617 m
-3292 3617 l
-3292 3618 l
-3149 3618 l
-3147 3618 m
-3292 3618 l
-3292 3619 l
-3147 3619 l
-3144 3619 m
-3293 3619 l
-3293 3620 l
-3144 3620 l
-3142 3620 m
-3293 3620 l
-3293 3621 l
-3142 3621 l
-3139 3621 m
-3294 3621 l
-3294 3622 l
-3139 3622 l
-3137 3622 m
-3294 3622 l
-3294 3623 l
-3137 3623 l
-3134 3623 m
-3294 3623 l
-3294 3624 l
-3134 3624 l
-3132 3624 m
-3295 3624 l
-3295 3625 l
-3132 3625 l
-3129 3625 m
-3295 3625 l
-3295 3626 l
-3129 3626 l
-3127 3626 m
-3296 3626 l
-3296 3627 l
-3127 3627 l
-3124 3627 m
-3296 3627 l
-3296 3628 l
-3124 3628 l
-3122 3628 m
-3296 3628 l
-3296 3629 l
-3122 3629 l
-3119 3629 m
-3297 3629 l
-3297 3630 l
-3119 3630 l
-3117 3630 m
-3297 3630 l
-3297 3631 l
-3117 3631 l
-3114 3631 m
-3298 3631 l
-3298 3632 l
-3114 3632 l
-3112 3632 m
-3298 3632 l
-3298 3633 l
-3112 3633 l
-3109 3633 m
-3298 3633 l
-3298 3634 l
-3109 3634 l
-3107 3634 m
-3299 3634 l
-3299 3635 l
-3107 3635 l
-3104 3635 m
-3299 3635 l
-3299 3636 l
-3104 3636 l
-3102 3636 m
-3300 3636 l
-3300 3637 l
-3102 3637 l
-3102 3637 m
-3300 3637 l
-3300 3639 l
-3102 3639 l
-3102 3639 m
-3301 3639 l
-3301 3640 l
-3102 3640 l
-3103 3640 m
-3301 3640 l
-3301 3641 l
-3103 3641 l
-3103 3641 m
-3302 3641 l
-3302 3643 l
-3103 3643 l
-3104 3643 m
-3302 3643 l
-3302 3644 l
-3104 3644 l
-3104 3644 m
-3303 3644 l
-3303 3645 l
-3104 3645 l
-3105 3645 m
-3303 3645 l
-3303 3646 l
-3105 3646 l
-3105 3646 m
-3304 3646 l
-3304 3648 l
-3105 3648 l
-3106 3648 m
-3304 3648 l
-3304 3649 l
-3106 3649 l
-3106 3649 m
-3305 3649 l
-3305 3650 l
-3106 3650 l
-3107 3650 m
-3305 3650 l
-3305 3651 l
-3107 3651 l
-3107 3651 m
-3306 3651 l
-3306 3653 l
-3107 3653 l
-3108 3653 m
-3306 3653 l
-3306 3654 l
-3108 3654 l
-3108 3654 m
-3307 3654 l
-3307 3655 l
-3108 3655 l
-3109 3655 m
-3307 3655 l
-3307 3656 l
-3109 3656 l
-3109 3656 m
-3308 3656 l
-3308 3658 l
-3109 3658 l
-3110 3658 m
-3308 3658 l
-3308 3659 l
-3110 3659 l
-3110 3659 m
-3309 3659 l
-3309 3661 l
-3110 3661 l
-3111 3661 m
-3310 3661 l
-3310 3663 l
-3111 3663 l
-3112 3663 m
-3310 3663 l
-3310 3664 l
-3112 3664 l
-3112 3664 m
-3311 3664 l
-3311 3666 l
-3112 3666 l
-3113 3666 m
-3312 3666 l
-3312 3668 l
-3113 3668 l
-3114 3668 m
-3312 3668 l
-3312 3669 l
-3114 3669 l
-3114 3669 m
-3313 3669 l
-3313 3671 l
-3114 3671 l
-3115 3671 m
-3314 3671 l
-3314 3673 l
-3115 3673 l
-3116 3673 m
-3314 3673 l
-3314 3674 l
-3116 3674 l
-3116 3674 m
-3315 3674 l
-3315 3676 l
-3116 3676 l
-3117 3676 m
-3316 3676 l
-3316 3679 l
-3117 3679 l
-3118 3679 m
-3317 3679 l
-3317 3681 l
-3118 3681 l
-3119 3681 m
-3317 3681 l
-3317 3682 l
-3119 3682 l
-3119 3682 m
-3317 3682 l
-3317 3683 l
-3119 3683 l
-3119 3683 m
-3315 3683 l
-3315 3684 l
-3119 3684 l
-3120 3684 m
-3312 3684 l
-3312 3685 l
-3120 3685 l
-3120 3685 m
-3310 3685 l
-3310 3686 l
-3120 3686 l
-3121 3686 m
-3307 3686 l
-3307 3687 l
-3121 3687 l
-3121 3687 m
-3305 3687 l
-3305 3688 l
-3121 3688 l
-3121 3688 m
-3302 3688 l
-3302 3689 l
-3121 3689 l
-3122 3689 m
-3300 3689 l
-3300 3690 l
-3122 3690 l
-3122 3690 m
-3297 3690 l
-3297 3691 l
-3122 3691 l
-3123 3691 m
-3295 3691 l
-3295 3692 l
-3123 3692 l
-3123 3692 m
-3292 3692 l
-3292 3693 l
-3123 3693 l
-3123 3693 m
-3290 3693 l
-3290 3694 l
-3123 3694 l
-3124 3694 m
-3287 3694 l
-3287 3695 l
-3124 3695 l
-3124 3695 m
-3285 3695 l
-3285 3696 l
-3124 3696 l
-3124 3696 m
-3282 3696 l
-3282 3697 l
-3124 3697 l
-3125 3697 m
-3280 3697 l
-3280 3698 l
-3125 3698 l
-3125 3698 m
-3277 3698 l
-3277 3699 l
-3125 3699 l
-3126 3699 m
-3275 3699 l
-3275 3700 l
-3126 3700 l
-3126 3700 m
-3272 3700 l
-3272 3701 l
-3126 3701 l
-3126 3701 m
-3270 3701 l
-3270 3702 l
-3126 3702 l
-3127 3702 m
-3267 3702 l
-3267 3703 l
-3127 3703 l
-3127 3703 m
-3265 3703 l
-3265 3704 l
-3127 3704 l
-3128 3704 m
-3262 3704 l
-3262 3705 l
-3128 3705 l
-3128 3705 m
-3259 3705 l
-3259 3706 l
-3128 3706 l
-3128 3706 m
-3257 3706 l
-3257 3707 l
-3128 3707 l
-3129 3707 m
-3254 3707 l
-3254 3708 l
-3129 3708 l
-3129 3708 m
-3252 3708 l
-3252 3709 l
-3129 3709 l
-3130 3709 m
-3249 3709 l
-3249 3710 l
-3130 3710 l
-3130 3710 m
-3247 3710 l
-3247 3711 l
-3130 3711 l
-3130 3711 m
-3244 3711 l
-3244 3712 l
-3130 3712 l
-3131 3712 m
-3242 3712 l
-3242 3713 l
-3131 3713 l
-3131 3713 m
-3239 3713 l
-3239 3714 l
-3131 3714 l
-3131 3714 m
-3237 3714 l
-3237 3715 l
-3131 3715 l
-3132 3715 m
-3234 3715 l
-3234 3716 l
-3132 3716 l
-3132 3716 m
-3232 3716 l
-3232 3717 l
-3132 3717 l
-3133 3717 m
-3229 3717 l
-3229 3718 l
-3133 3718 l
-3133 3718 m
-3227 3718 l
-3227 3719 l
-3133 3719 l
-3133 3719 m
-3224 3719 l
-3224 3720 l
-3133 3720 l
-3134 3720 m
-3222 3720 l
-3222 3721 l
-3134 3721 l
-3134 3721 m
-3219 3721 l
-3219 3722 l
-3134 3722 l
-3135 3722 m
-3217 3722 l
-3217 3723 l
-3135 3723 l
-3135 3723 m
-3214 3723 l
-3214 3724 l
-3135 3724 l
-3135 3724 m
-3212 3724 l
-3212 3725 l
-3135 3725 l
-3136 3725 m
-3209 3725 l
-3209 3726 l
-3136 3726 l
-3136 3726 m
-3207 3726 l
-3207 3727 l
-3136 3727 l
-3137 3727 m
-3204 3727 l
-3204 3728 l
-3137 3728 l
-3137 3728 m
-3202 3728 l
-3202 3729 l
-3137 3729 l
-3137 3729 m
-3199 3729 l
-3199 3730 l
-3137 3730 l
-3138 3730 m
-3197 3730 l
-3197 3731 l
-3138 3731 l
-3138 3731 m
-3194 3731 l
-3194 3732 l
-3138 3732 l
-3138 3732 m
-3192 3732 l
-3192 3733 l
-3138 3733 l
-3139 3733 m
-3189 3733 l
-3189 3734 l
-3139 3734 l
-3139 3734 m
-3187 3734 l
-3187 3735 l
-3139 3735 l
-3140 3735 m
-3184 3735 l
-3184 3736 l
-3140 3736 l
-3140 3736 m
-3182 3736 l
-3182 3737 l
-3140 3737 l
-3140 3737 m
-3179 3737 l
-3179 3738 l
-3140 3738 l
-3141 3738 m
-3177 3738 l
-3177 3739 l
-3141 3739 l
-3141 3739 m
-3174 3739 l
-3174 3740 l
-3141 3740 l
-3142 3740 m
-3172 3740 l
-3172 3741 l
-3142 3741 l
-3142 3741 m
-3169 3741 l
-3169 3742 l
-3142 3742 l
-3142 3742 m
-3167 3742 l
-3167 3743 l
-3142 3743 l
-3143 3743 m
-3164 3743 l
-3164 3744 l
-3143 3744 l
-3143 3744 m
-3162 3744 l
-3162 3745 l
-3143 3745 l
-3144 3745 m
-3159 3745 l
-3159 3746 l
-3144 3746 l
-3144 3746 m
-3157 3746 l
-3157 3747 l
-3144 3747 l
-3144 3747 m
-3154 3747 l
-3154 3748 l
-3144 3748 l
-3145 3748 m
-3152 3748 l
-3152 3749 l
-3145 3749 l
-3145 3749 m
-3149 3749 l
-3149 3750 l
-3145 3750 l
-Y
-3317 3681.9 m
-3272 3569 l
-3102 3637 l
-3146 3750 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3213 3611 m
-3251 3596 l
-3269 3629 l
-3264 3627 l
-3250 3627 l
-3239 3632 l
-3229 3640 l
-3224 3651 l
-3225 3665 l
-3228 3672 l
-3236 3682 l
-3247 3687 l
-3260 3686 l
-3272 3682 l
-3282 3673 l
-3284 3668 l
-3285 3659 l
-S
-3136 3655 m
-3136 3646 l
-3147 3637 l
-3154 3634 l
-3167 3633 l
-3180 3642 l
-3191 3660 l
-3199 3679 l
-3201 3696 l
-3197 3707 l
-3187 3716 l
-3183 3717 l
-3170 3718 l
-3159 3713 l
-3150 3703 l
-3149 3699 l
-3148 3686 l
-3153 3675 l
-3163 3667 l
-3167 3665 l
-3180 3664 l
-3191 3669 l
-3199 3679 l
-S
-1 g
-4344 3144 m
-4348 3144 l
-4348 3145 l
-4344 3145 l
-4341 3145 m
-4348 3145 l
-4348 3146 l
-4341 3146 l
-4339 3146 m
-4349 3146 l
-4349 3147 l
-4339 3147 l
-4336 3147 m
-4349 3147 l
-4349 3148 l
-4336 3148 l
-4334 3148 m
-4350 3148 l
-4350 3149 l
-4334 3149 l
-4331 3149 m
-4350 3149 l
-4350 3150 l
-4331 3150 l
-4329 3150 m
-4350 3150 l
-4350 3151 l
-4329 3151 l
-4326 3151 m
-4351 3151 l
-4351 3152 l
-4326 3152 l
-4324 3152 m
-4351 3152 l
-4351 3153 l
-4324 3153 l
-4321 3153 m
-4352 3153 l
-4352 3154 l
-4321 3154 l
-4319 3154 m
-4352 3154 l
-4352 3155 l
-4319 3155 l
-4316 3155 m
-4352 3155 l
-4352 3156 l
-4316 3156 l
-4314 3156 m
-4353 3156 l
-4353 3157 l
-4314 3157 l
-4311 3157 m
-4353 3157 l
-4353 3158 l
-4311 3158 l
-4308 3158 m
-4354 3158 l
-4354 3159 l
-4308 3159 l
-4306 3159 m
-4354 3159 l
-4354 3160 l
-4306 3160 l
-4303 3160 m
-4354 3160 l
-4354 3161 l
-4303 3161 l
-4301 3161 m
-4355 3161 l
-4355 3162 l
-4301 3162 l
-4298 3162 m
-4355 3162 l
-4355 3163 l
-4298 3163 l
-4296 3163 m
-4356 3163 l
-4356 3164 l
-4296 3164 l
-4293 3164 m
-4356 3164 l
-4356 3165 l
-4293 3165 l
-4291 3165 m
-4356 3165 l
-4356 3166 l
-4291 3166 l
-4288 3166 m
-4357 3166 l
-4357 3167 l
-4288 3167 l
-4286 3167 m
-4357 3167 l
-4357 3168 l
-4286 3168 l
-4283 3168 m
-4358 3168 l
-4358 3169 l
-4283 3169 l
-4281 3169 m
-4358 3169 l
-4358 3170 l
-4281 3170 l
-4278 3170 m
-4358 3170 l
-4358 3171 l
-4278 3171 l
-4275 3171 m
-4359 3171 l
-4359 3172 l
-4275 3172 l
-4273 3172 m
-4359 3172 l
-4359 3173 l
-4273 3173 l
-4270 3173 m
-4360 3173 l
-4360 3174 l
-4270 3174 l
-4268 3174 m
-4360 3174 l
-4360 3175 l
-4268 3175 l
-4265 3175 m
-4360 3175 l
-4360 3176 l
-4265 3176 l
-4263 3176 m
-4361 3176 l
-4361 3177 l
-4263 3177 l
-4260 3177 m
-4361 3177 l
-4361 3178 l
-4260 3178 l
-4258 3178 m
-4362 3178 l
-4362 3179 l
-4258 3179 l
-4255 3179 m
-4362 3179 l
-4362 3180 l
-4255 3180 l
-4253 3180 m
-4362 3180 l
-4362 3181 l
-4253 3181 l
-4250 3181 m
-4363 3181 l
-4363 3182 l
-4250 3182 l
-4248 3182 m
-4363 3182 l
-4363 3183 l
-4248 3183 l
-4245 3183 m
-4364 3183 l
-4364 3184 l
-4245 3184 l
-4242 3184 m
-4364 3184 l
-4364 3185 l
-4242 3185 l
-4240 3185 m
-4364 3185 l
-4364 3186 l
-4240 3186 l
-4237 3186 m
-4365 3186 l
-4365 3187 l
-4237 3187 l
-4235 3187 m
-4365 3187 l
-4365 3188 l
-4235 3188 l
-4232 3188 m
-4366 3188 l
-4366 3189 l
-4232 3189 l
-4230 3189 m
-4366 3189 l
-4366 3190 l
-4230 3190 l
-4227 3190 m
-4366 3190 l
-4366 3191 l
-4227 3191 l
-4225 3191 m
-4367 3191 l
-4367 3192 l
-4225 3192 l
-4222 3192 m
-4367 3192 l
-4367 3193 l
-4222 3193 l
-4220 3193 m
-4368 3193 l
-4368 3194 l
-4220 3194 l
-4217 3194 m
-4368 3194 l
-4368 3195 l
-4217 3195 l
-4215 3195 m
-4368 3195 l
-4368 3196 l
-4215 3196 l
-4212 3196 m
-4369 3196 l
-4369 3197 l
-4212 3197 l
-4209 3197 m
-4369 3197 l
-4369 3198 l
-4209 3198 l
-4207 3198 m
-4370 3198 l
-4370 3199 l
-4207 3199 l
-4204 3199 m
-4370 3199 l
-4370 3200 l
-4204 3200 l
-4202 3200 m
-4370 3200 l
-4370 3201 l
-4202 3201 l
-4199 3201 m
-4371 3201 l
-4371 3202 l
-4199 3202 l
-4197 3202 m
-4371 3202 l
-4371 3203 l
-4197 3203 l
-4194 3203 m
-4372 3203 l
-4372 3204 l
-4194 3204 l
-4192 3204 m
-4372 3204 l
-4372 3205 l
-4192 3205 l
-4189 3205 m
-4372 3205 l
-4372 3206 l
-4189 3206 l
-4187 3206 m
-4373 3206 l
-4373 3207 l
-4187 3207 l
-4184 3207 m
-4373 3207 l
-4373 3208 l
-4184 3208 l
-4182 3208 m
-4374 3208 l
-4374 3209 l
-4182 3209 l
-4179 3209 m
-4374 3209 l
-4374 3210 l
-4179 3210 l
-4177 3210 m
-4374 3210 l
-4374 3211 l
-4177 3211 l
-4177 3211 m
-4375 3211 l
-4375 3213 l
-4177 3213 l
-4177 3213 m
-4376 3213 l
-4376 3214 l
-4177 3214 l
-4178 3214 m
-4376 3214 l
-4376 3216 l
-4178 3216 l
-4178 3216 m
-4377 3216 l
-4377 3217 l
-4178 3217 l
-4179 3217 m
-4377 3217 l
-4377 3218 l
-4179 3218 l
-4179 3218 m
-4378 3218 l
-4378 3219 l
-4179 3219 l
-4180 3219 m
-4378 3219 l
-4378 3221 l
-4180 3221 l
-4180 3221 m
-4379 3221 l
-4379 3222 l
-4180 3222 l
-4181 3222 m
-4379 3222 l
-4379 3223 l
-4181 3223 l
-4181 3223 m
-4380 3223 l
-4380 3224 l
-4181 3224 l
-4182 3224 m
-4380 3224 l
-4380 3226 l
-4182 3226 l
-4182 3226 m
-4381 3226 l
-4381 3227 l
-4182 3227 l
-4183 3227 m
-4381 3227 l
-4381 3228 l
-4183 3228 l
-4183 3228 m
-4382 3228 l
-4382 3229 l
-4183 3229 l
-4184 3229 m
-4382 3229 l
-4382 3231 l
-4184 3231 l
-4184 3231 m
-4383 3231 l
-4383 3232 l
-4184 3232 l
-4185 3232 m
-4383 3232 l
-4383 3233 l
-4185 3233 l
-4185 3233 m
-4384 3233 l
-4384 3235 l
-4185 3235 l
-4186 3235 m
-4384 3235 l
-4384 3236 l
-4186 3236 l
-4186 3236 m
-4385 3236 l
-4385 3237 l
-4186 3237 l
-4187 3237 m
-4385 3237 l
-4385 3238 l
-4187 3238 l
-4187 3238 m
-4386 3238 l
-4386 3240 l
-4187 3240 l
-4188 3240 m
-4386 3240 l
-4386 3241 l
-4188 3241 l
-4188 3241 m
-4387 3241 l
-4387 3242 l
-4188 3242 l
-4189 3242 m
-4387 3242 l
-4387 3243 l
-4189 3243 l
-4189 3243 m
-4388 3243 l
-4388 3245 l
-4189 3245 l
-4190 3245 m
-4388 3245 l
-4388 3246 l
-4190 3246 l
-4190 3246 m
-4389 3246 l
-4389 3247 l
-4190 3247 l
-4191 3247 m
-4389 3247 l
-4389 3248 l
-4191 3248 l
-4191 3248 m
-4390 3248 l
-4390 3250 l
-4191 3250 l
-4192 3250 m
-4390 3250 l
-4390 3251 l
-4192 3251 l
-4192 3251 m
-4391 3251 l
-4391 3253 l
-4192 3253 l
-4193 3253 m
-4392 3253 l
-4392 3255 l
-4193 3255 l
-4194 3255 m
-4392 3255 l
-4392 3256 l
-4194 3256 l
-4194 3256 m
-4392 3256 l
-4392 3257 l
-4194 3257 l
-4194 3257 m
-4390 3257 l
-4390 3258 l
-4194 3258 l
-4195 3258 m
-4388 3258 l
-4388 3259 l
-4195 3259 l
-4195 3259 m
-4385 3259 l
-4385 3260 l
-4195 3260 l
-4196 3260 m
-4383 3260 l
-4383 3261 l
-4196 3261 l
-4196 3261 m
-4380 3261 l
-4380 3262 l
-4196 3262 l
-4196 3262 m
-4378 3262 l
-4378 3263 l
-4196 3263 l
-4197 3263 m
-4375 3263 l
-4375 3264 l
-4197 3264 l
-4197 3264 m
-4373 3264 l
-4373 3265 l
-4197 3265 l
-4198 3265 m
-4370 3265 l
-4370 3266 l
-4198 3266 l
-4198 3266 m
-4368 3266 l
-4368 3267 l
-4198 3267 l
-4198 3267 m
-4365 3267 l
-4365 3268 l
-4198 3268 l
-4199 3268 m
-4363 3268 l
-4363 3269 l
-4199 3269 l
-4199 3269 m
-4360 3269 l
-4360 3270 l
-4199 3270 l
-4199 3270 m
-4357 3270 l
-4357 3271 l
-4199 3271 l
-4200 3271 m
-4355 3271 l
-4355 3272 l
-4200 3272 l
-4200 3272 m
-4352 3272 l
-4352 3273 l
-4200 3273 l
-4201 3273 m
-4350 3273 l
-4350 3274 l
-4201 3274 l
-4201 3274 m
-4347 3274 l
-4347 3275 l
-4201 3275 l
-4201 3275 m
-4345 3275 l
-4345 3276 l
-4201 3276 l
-4202 3276 m
-4342 3276 l
-4342 3277 l
-4202 3277 l
-4202 3277 m
-4340 3277 l
-4340 3278 l
-4202 3278 l
-4203 3278 m
-4337 3278 l
-4337 3279 l
-4203 3279 l
-4203 3279 m
-4335 3279 l
-4335 3280 l
-4203 3280 l
-4203 3280 m
-4332 3280 l
-4332 3281 l
-4203 3281 l
-4204 3281 m
-4330 3281 l
-4330 3282 l
-4204 3282 l
-4204 3282 m
-4327 3282 l
-4327 3283 l
-4204 3283 l
-4205 3283 m
-4325 3283 l
-4325 3284 l
-4205 3284 l
-4205 3284 m
-4322 3284 l
-4322 3285 l
-4205 3285 l
-4205 3285 m
-4320 3285 l
-4320 3286 l
-4205 3286 l
-4206 3286 m
-4317 3286 l
-4317 3287 l
-4206 3287 l
-4206 3287 m
-4315 3287 l
-4315 3288 l
-4206 3288 l
-4206 3288 m
-4312 3288 l
-4312 3289 l
-4206 3289 l
-4207 3289 m
-4310 3289 l
-4310 3290 l
-4207 3290 l
-4207 3290 m
-4307 3290 l
-4307 3291 l
-4207 3291 l
-4208 3291 m
-4305 3291 l
-4305 3292 l
-4208 3292 l
-4208 3292 m
-4302 3292 l
-4302 3293 l
-4208 3293 l
-4208 3293 m
-4300 3293 l
-4300 3294 l
-4208 3294 l
-4209 3294 m
-4297 3294 l
-4297 3295 l
-4209 3295 l
-4209 3295 m
-4295 3295 l
-4295 3296 l
-4209 3296 l
-4210 3296 m
-4292 3296 l
-4292 3297 l
-4210 3297 l
-4210 3297 m
-4289 3297 l
-4289 3298 l
-4210 3298 l
-4210 3298 m
-4287 3298 l
-4287 3299 l
-4210 3299 l
-4211 3299 m
-4284 3299 l
-4284 3300 l
-4211 3300 l
-4211 3300 m
-4282 3300 l
-4282 3301 l
-4211 3301 l
-4212 3301 m
-4279 3301 l
-4279 3302 l
-4212 3302 l
-4212 3302 m
-4277 3302 l
-4277 3303 l
-4212 3303 l
-4212 3303 m
-4274 3303 l
-4274 3304 l
-4212 3304 l
-4213 3304 m
-4272 3304 l
-4272 3305 l
-4213 3305 l
-4213 3305 m
-4269 3305 l
-4269 3306 l
-4213 3306 l
-4213 3306 m
-4267 3306 l
-4267 3307 l
-4213 3307 l
-4214 3307 m
-4264 3307 l
-4264 3308 l
-4214 3308 l
-4214 3308 m
-4262 3308 l
-4262 3309 l
-4214 3309 l
-4215 3309 m
-4259 3309 l
-4259 3310 l
-4215 3310 l
-4215 3310 m
-4257 3310 l
-4257 3311 l
-4215 3311 l
-4215 3311 m
-4254 3311 l
-4254 3312 l
-4215 3312 l
-4216 3312 m
-4252 3312 l
-4252 3313 l
-4216 3313 l
-4216 3313 m
-4249 3313 l
-4249 3314 l
-4216 3314 l
-4217 3314 m
-4247 3314 l
-4247 3315 l
-4217 3315 l
-4217 3315 m
-4244 3315 l
-4244 3316 l
-4217 3316 l
-4217 3316 m
-4242 3316 l
-4242 3317 l
-4217 3317 l
-4218 3317 m
-4239 3317 l
-4239 3318 l
-4218 3318 l
-4218 3318 m
-4237 3318 l
-4237 3319 l
-4218 3319 l
-4219 3319 m
-4234 3319 l
-4234 3320 l
-4219 3320 l
-4219 3320 m
-4232 3320 l
-4232 3321 l
-4219 3321 l
-4219 3321 m
-4229 3321 l
-4229 3322 l
-4219 3322 l
-4220 3322 m
-4227 3322 l
-4227 3323 l
-4220 3323 l
-4220 3323 m
-4224 3323 l
-4224 3324 l
-4220 3324 l
-Y
-4392 3256.1 m
-4347 3144 l
-4177 3211 l
-4221 3324 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4288 3185 m
-4326 3170 l
-4344 3203 l
-4339 3201 l
-4325 3202 l
-4314 3206 l
-4304 3215 l
-4299 3226 l
-4300 3239 l
-4303 3247 l
-4311 3257 l
-4322 3261 l
-4335 3261 l
-4347 3256 l
-4357 3247 l
-4359 3242 l
-4360 3233 l
-S
-4260 3218 m
-4259 3215 l
-4252 3208 l
-4246 3206 l
-4237 3205 l
-4221 3211 l
-4215 3218 l
-4213 3224 l
-4212 3233 l
-4215 3241 l
-4222 3247 l
-4235 3256 l
-4289 3279 l
-4234 3301 l
-S
-1 g
-4877 2933 m
-4878 2933 l
-4878 2934 l
-4877 2934 l
-4874 2934 m
-4878 2934 l
-4878 2935 l
-4874 2935 l
-4872 2935 m
-4878 2935 l
-4878 2936 l
-4872 2936 l
-4869 2936 m
-4878 2936 l
-4878 2937 l
-4869 2937 l
-4867 2937 m
-4878 2937 l
-4878 2938 l
-4867 2938 l
-4864 2938 m
-4878 2938 l
-4878 2939 l
-4864 2939 l
-4862 2939 m
-4878 2939 l
-4878 2940 l
-4862 2940 l
-4859 2940 m
-4878 2940 l
-4878 2941 l
-4859 2941 l
-4856 2941 m
-4878 2941 l
-4878 2942 l
-4856 2942 l
-4854 2942 m
-4878 2942 l
-4878 2943 l
-4854 2943 l
-4851 2943 m
-4878 2943 l
-4878 2944 l
-4851 2944 l
-4849 2944 m
-4878 2944 l
-4878 2945 l
-4849 2945 l
-4846 2945 m
-4878 2945 l
-4878 2946 l
-4846 2946 l
-4844 2946 m
-4878 2946 l
-4878 2947 l
-4844 2947 l
-4841 2947 m
-4878 2947 l
-4878 2948 l
-4841 2948 l
-4839 2948 m
-4878 2948 l
-4878 2949 l
-4839 2949 l
-4836 2949 m
-4878 2949 l
-4878 2950 l
-4836 2950 l
-4833 2950 m
-4878 2950 l
-4878 2951 l
-4833 2951 l
-4831 2951 m
-4878 2951 l
-4878 2952 l
-4831 2952 l
-4828 2952 m
-4878 2952 l
-4878 2953 l
-4828 2953 l
-4826 2953 m
-4878 2953 l
-4878 2954 l
-4826 2954 l
-4823 2954 m
-4878 2954 l
-4878 2955 l
-4823 2955 l
-4821 2955 m
-4878 2955 l
-4878 2956 l
-4821 2956 l
-4818 2956 m
-4878 2956 l
-4878 2957 l
-4818 2957 l
-4816 2957 m
-4878 2957 l
-4878 2958 l
-4816 2958 l
-4813 2958 m
-4878 2958 l
-4878 2959 l
-4813 2959 l
-4810 2959 m
-4878 2959 l
-4878 2960 l
-4810 2960 l
-4808 2960 m
-4878 2960 l
-4878 2961 l
-4808 2961 l
-4805 2961 m
-4878 2961 l
-4878 2962 l
-4805 2962 l
-4803 2962 m
-4878 2962 l
-4878 2963 l
-4803 2963 l
-4800 2963 m
-4878 2963 l
-4878 2964 l
-4800 2964 l
-4798 2964 m
-4878 2964 l
-4878 2965 l
-4798 2965 l
-4795 2965 m
-4878 2965 l
-4878 2966 l
-4795 2966 l
-4793 2966 m
-4878 2966 l
-4878 2967 l
-4793 2967 l
-4790 2967 m
-4878 2967 l
-4878 2968 l
-4790 2968 l
-4788 2968 m
-4878 2968 l
-4878 2969 l
-4788 2969 l
-4785 2969 m
-4878 2969 l
-4878 2970 l
-4785 2970 l
-4782 2970 m
-4878 2970 l
-4878 2971 l
-4782 2971 l
-4780 2971 m
-4878 2971 l
-4878 2972 l
-4780 2972 l
-4777 2972 m
-4878 2972 l
-4878 2973 l
-4777 2973 l
-4775 2973 m
-4878 2973 l
-4878 2974 l
-4775 2974 l
-4772 2974 m
-4878 2974 l
-4878 2975 l
-4772 2975 l
-4770 2975 m
-4878 2975 l
-4878 2976 l
-4770 2976 l
-4767 2976 m
-4878 2976 l
-4878 2977 l
-4767 2977 l
-4765 2977 m
-4878 2977 l
-4878 2978 l
-4765 2978 l
-4762 2978 m
-4878 2978 l
-4878 2979 l
-4762 2979 l
-4759 2979 m
-4878 2979 l
-4878 2980 l
-4759 2980 l
-4757 2980 m
-4878 2980 l
-4878 2981 l
-4757 2981 l
-4754 2981 m
-4878 2981 l
-4878 2982 l
-4754 2982 l
-4752 2982 m
-4878 2982 l
-4878 2983 l
-4752 2983 l
-4749 2983 m
-4878 2983 l
-4878 2984 l
-4749 2984 l
-4747 2984 m
-4878 2984 l
-4878 2985 l
-4747 2985 l
-4744 2985 m
-4878 2985 l
-4878 2986 l
-4744 2986 l
-4742 2986 m
-4878 2986 l
-4878 2987 l
-4742 2987 l
-4739 2987 m
-4878 2987 l
-4878 2988 l
-4739 2988 l
-4736 2988 m
-4878 2988 l
-4878 2989 l
-4736 2989 l
-4734 2989 m
-4878 2989 l
-4878 2990 l
-4734 2990 l
-4731 2990 m
-4878 2990 l
-4878 2991 l
-4731 2991 l
-4729 2991 m
-4878 2991 l
-4878 2992 l
-4729 2992 l
-4726 2992 m
-4878 2992 l
-4878 2993 l
-4726 2993 l
-4724 2993 m
-4878 2993 l
-4878 2994 l
-4724 2994 l
-4721 2994 m
-4878 2994 l
-4878 2995 l
-4721 2995 l
-4719 2995 m
-4878 2995 l
-4878 2996 l
-4719 2996 l
-4716 2996 m
-4878 2996 l
-4878 2997 l
-4716 2997 l
-4714 2997 m
-4878 2997 l
-4878 2998 l
-4714 2998 l
-4714 2998 m
-4878 2998 l
-4878 2999 l
-4714 2999 l
-4714 2999 m
-4878 2999 l
-4878 3001 l
-4714 3001 l
-4715 3001 m
-4878 3001 l
-4878 3004 l
-4715 3004 l
-4716 3004 m
-4878 3004 l
-4878 3006 l
-4716 3006 l
-4717 3006 m
-4878 3006 l
-4878 3009 l
-4717 3009 l
-4718 3009 m
-4878 3009 l
-4878 3011 l
-4718 3011 l
-4719 3011 m
-4878 3011 l
-4878 3014 l
-4719 3014 l
-4720 3014 m
-4878 3014 l
-4878 3016 l
-4720 3016 l
-4721 3016 m
-4878 3016 l
-4878 3019 l
-4721 3019 l
-4722 3019 m
-4878 3019 l
-4878 3021 l
-4722 3021 l
-4723 3021 m
-4878 3021 l
-4878 3024 l
-4723 3024 l
-4724 3024 m
-4878 3024 l
-4878 3026 l
-4724 3026 l
-4725 3026 m
-4878 3026 l
-4878 3029 l
-4725 3029 l
-4726 3029 m
-4878 3029 l
-4878 3031 l
-4726 3031 l
-4727 3031 m
-4878 3031 l
-4878 3034 l
-4727 3034 l
-4728 3034 m
-4878 3034 l
-4878 3036 l
-4728 3036 l
-4729 3036 m
-4878 3036 l
-4878 3039 l
-4729 3039 l
-4730 3039 m
-4878 3039 l
-4878 3041 l
-4730 3041 l
-4731 3041 m
-4878 3041 l
-4878 3043 l
-4731 3043 l
-4731 3043 m
-4878 3043 l
-4878 3044 l
-4731 3044 l
-4732 3044 m
-4878 3044 l
-4878 3045 l
-4732 3045 l
-4732 3045 m
-4878 3045 l
-4878 3046 l
-4732 3046 l
-4733 3046 m
-4878 3046 l
-4878 3047 l
-4733 3047 l
-4733 3047 m
-4878 3047 l
-4878 3048 l
-4733 3048 l
-4733 3048 m
-4878 3048 l
-4878 3049 l
-4733 3049 l
-4734 3049 m
-4878 3049 l
-4878 3050 l
-4734 3050 l
-4734 3050 m
-4878 3050 l
-4878 3051 l
-4734 3051 l
-4735 3051 m
-4878 3051 l
-4878 3052 l
-4735 3052 l
-4735 3052 m
-4878 3052 l
-4878 3053 l
-4735 3053 l
-4735 3053 m
-4878 3053 l
-4878 3054 l
-4735 3054 l
-4736 3054 m
-4878 3054 l
-4878 3055 l
-4736 3055 l
-4736 3055 m
-4878 3055 l
-4878 3056 l
-4736 3056 l
-4737 3056 m
-4878 3056 l
-4878 3057 l
-4737 3057 l
-4737 3057 m
-4878 3057 l
-4878 3058 l
-4737 3058 l
-4737 3058 m
-4878 3058 l
-4878 3059 l
-4737 3059 l
-4738 3059 m
-4878 3059 l
-4878 3060 l
-4738 3060 l
-4738 3060 m
-4878 3060 l
-4878 3061 l
-4738 3061 l
-4739 3061 m
-4878 3061 l
-4878 3062 l
-4739 3062 l
-4739 3062 m
-4878 3062 l
-4878 3063 l
-4739 3063 l
-4739 3063 m
-4878 3063 l
-4878 3064 l
-4739 3064 l
-4740 3064 m
-4878 3064 l
-4878 3065 l
-4740 3065 l
-4740 3065 m
-4875 3065 l
-4875 3066 l
-4740 3066 l
-4741 3066 m
-4873 3066 l
-4873 3067 l
-4741 3067 l
-4741 3067 m
-4870 3067 l
-4870 3068 l
-4741 3068 l
-4741 3068 m
-4868 3068 l
-4868 3069 l
-4741 3069 l
-4742 3069 m
-4865 3069 l
-4865 3070 l
-4742 3070 l
-4742 3070 m
-4863 3070 l
-4863 3071 l
-4742 3071 l
-4743 3071 m
-4860 3071 l
-4860 3072 l
-4743 3072 l
-4743 3072 m
-4858 3072 l
-4858 3073 l
-4743 3073 l
-4743 3073 m
-4855 3073 l
-4855 3074 l
-4743 3074 l
-4744 3074 m
-4853 3074 l
-4853 3075 l
-4744 3075 l
-4744 3075 m
-4850 3075 l
-4850 3076 l
-4744 3076 l
-4745 3076 m
-4848 3076 l
-4848 3077 l
-4745 3077 l
-4745 3077 m
-4845 3077 l
-4845 3078 l
-4745 3078 l
-4745 3078 m
-4842 3078 l
-4842 3079 l
-4745 3079 l
-4746 3079 m
-4840 3079 l
-4840 3080 l
-4746 3080 l
-4746 3080 m
-4837 3080 l
-4837 3081 l
-4746 3081 l
-4747 3081 m
-4835 3081 l
-4835 3082 l
-4747 3082 l
-4747 3082 m
-4832 3082 l
-4832 3083 l
-4747 3083 l
-4747 3083 m
-4830 3083 l
-4830 3084 l
-4747 3084 l
-4748 3084 m
-4827 3084 l
-4827 3085 l
-4748 3085 l
-4748 3085 m
-4825 3085 l
-4825 3086 l
-4748 3086 l
-4749 3086 m
-4822 3086 l
-4822 3087 l
-4749 3087 l
-4749 3087 m
-4820 3087 l
-4820 3088 l
-4749 3088 l
-4749 3088 m
-4817 3088 l
-4817 3089 l
-4749 3089 l
-4750 3089 m
-4815 3089 l
-4815 3090 l
-4750 3090 l
-4750 3090 m
-4812 3090 l
-4812 3091 l
-4750 3091 l
-4751 3091 m
-4810 3091 l
-4810 3092 l
-4751 3092 l
-4751 3092 m
-4807 3092 l
-4807 3093 l
-4751 3093 l
-4751 3093 m
-4805 3093 l
-4805 3094 l
-4751 3094 l
-4752 3094 m
-4802 3094 l
-4802 3095 l
-4752 3095 l
-4752 3095 m
-4800 3095 l
-4800 3096 l
-4752 3096 l
-4753 3096 m
-4797 3096 l
-4797 3097 l
-4753 3097 l
-4753 3097 m
-4795 3097 l
-4795 3098 l
-4753 3098 l
-4753 3098 m
-4792 3098 l
-4792 3099 l
-4753 3099 l
-4754 3099 m
-4790 3099 l
-4790 3100 l
-4754 3100 l
-4754 3100 m
-4787 3100 l
-4787 3101 l
-4754 3101 l
-4755 3101 m
-4785 3101 l
-4785 3102 l
-4755 3102 l
-4755 3102 m
-4782 3102 l
-4782 3103 l
-4755 3103 l
-4755 3103 m
-4780 3103 l
-4780 3104 l
-4755 3104 l
-4756 3104 m
-4777 3104 l
-4777 3105 l
-4756 3105 l
-4756 3105 m
-4775 3105 l
-4775 3106 l
-4756 3106 l
-4757 3106 m
-4772 3106 l
-4772 3107 l
-4757 3107 l
-4757 3107 m
-4770 3107 l
-4770 3108 l
-4757 3108 l
-4757 3108 m
-4767 3108 l
-4767 3109 l
-4757 3109 l
-4758 3109 m
-4765 3109 l
-4765 3110 l
-4758 3110 l
-4758 3110 m
-4762 3110 l
-4762 3111 l
-4758 3111 l
-Y
-4929.5 3043.2 m
-4885 2931 l
-4714 2998 l
-4759 3111 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4825 2972 m
-4864 2957 l
-4882 2990 l
-4876 2988 l
-4863 2989 l
-4851 2993 l
-4841 3002 l
-4836 3013 l
-4837 3026 l
-4840 3034 l
-4849 3044 l
-4860 3048 l
-4873 3048 l
-4884 3043 l
-4895 3035 l
-4897 3029 l
-4898 3020 l
-S
-4771 2994 m
-4784 2993 l
-4796 3002 l
-4808 3020 l
-4812 3031 l
-4816 3052 l
-4813 3067 l
-4803 3075 l
-4795 3078 l
-4782 3079 l
-4770 3071 l
-4758 3053 l
-4753 3041 l
-4750 3020 l
-4753 3005 l
-4763 2997 l
-4771 2994 l
-S
-1 g
-Y
-362 3391.6 m
-207 3392 l
-207 4507 l
-362 4507 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-228 3413 m
-316 3413 l
-S
-228 3413 m
-228 3467 l
-S
-270 3413 m
-270 3446 l
-S
-228 3488 m
-316 3488 l
-S
-228 3546 m
-287 3488 l
-S
-266 3509 m
-316 3546 l
-S
-228 3621 m
-228 3580 l
-266 3575 l
-262 3580 l
-258 3592 l
-258 3605 l
-262 3617 l
-270 3626 l
-283 3630 l
-291 3630 l
-303 3626 l
-312 3617 l
-316 3605 l
-316 3592 l
-312 3580 l
-308 3575 l
-299 3571 l
-S
-258 3726 m
-345 3726 l
-S
-270 3726 m
-262 3734 l
-258 3742 l
-258 3755 l
-262 3763 l
-270 3772 l
-283 3776 l
-291 3776 l
-303 3772 l
-312 3763 l
-316 3755 l
-316 3742 l
-312 3734 l
-303 3726 l
-S
-258 3822 m
-262 3813 l
-270 3805 l
-283 3801 l
-291 3801 l
-303 3805 l
-312 3813 l
-316 3822 l
-316 3834 l
-312 3843 l
-303 3851 l
-291 3855 l
-283 3855 l
-270 3851 l
-262 3843 l
-258 3834 l
-258 3822 l
-S
-228 3884 m
-316 3884 l
-S
-258 3964 m
-316 3964 l
-S
-270 3964 m
-262 3955 l
-258 3947 l
-258 3935 l
-262 3926 l
-270 3918 l
-283 3914 l
-291 3914 l
-303 3918 l
-312 3926 l
-316 3935 l
-316 3947 l
-312 3955 l
-303 3964 l
-S
-258 3997 m
-316 3997 l
-S
-283 3997 m
-270 4001 l
-262 4010 l
-258 4018 l
-258 4031 l
-S
-258 4118 m
-316 4118 l
-S
-283 4118 m
-270 4123 l
-262 4131 l
-258 4139 l
-258 4152 l
-S
-283 4169 m
-283 4219 l
-274 4219 l
-266 4214 l
-262 4210 l
-258 4202 l
-258 4189 l
-262 4181 l
-270 4173 l
-283 4169 l
-291 4169 l
-303 4173 l
-312 4181 l
-316 4189 l
-316 4202 l
-312 4210 l
-303 4219 l
-S
-258 4294 m
-324 4294 l
-337 4290 l
-341 4285 l
-345 4277 l
-345 4265 l
-341 4256 l
-S
-270 4294 m
-262 4285 l
-258 4277 l
-258 4265 l
-262 4256 l
-270 4248 l
-283 4244 l
-291 4244 l
-303 4248 l
-312 4256 l
-316 4265 l
-316 4277 l
-312 4285 l
-303 4294 l
-S
-228 4323 m
-232 4327 l
-228 4331 l
-224 4327 l
-228 4323 l
-S
-258 4327 m
-316 4327 l
-S
-258 4377 m
-262 4369 l
-270 4361 l
-283 4356 l
-291 4356 l
-303 4361 l
-312 4369 l
-316 4377 l
-316 4390 l
-312 4398 l
-303 4407 l
-291 4411 l
-283 4411 l
-270 4407 l
-262 4398 l
-258 4390 l
-258 4377 l
-S
-258 4440 m
-316 4440 l
-S
-274 4440 m
-262 4453 l
-258 4461 l
-258 4473 l
-262 4482 l
-274 4486 l
-316 4486 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 3678 3396 a
- currentpoint grestore moveto
- 3678 3396 a 1633 4700 a FA(Abstract)0
-4962 y FG(The)40 b(AST)g(library)h(pro)m(vides)f(a)h(comprehensiv)m(e)h
-(range)f(of)g(facilities)i(for)d(attac)m(hing)j(w)m(orld)e(co)s
-(ordinate)0 5075 y(systems)c(to)h(astronomical)h(data,)h(for)d
-(retrieving)h(and)f(in)m(terpreting)h(that)g(information)f(in)g(a)h(v)
--5 b(ariet)m(y)38 b(of)0 5188 y(formats,)31 b(including)f(FITS-W)m(CS,)
-g(and)g(for)g(generating)i(graphical)f(output)f(based)g(on)g(it.)0
-5351 y(This)38 b(programmer's)g(man)m(ual)h(should)f(b)s(e)g(of)g(in)m
-(terest)i(to)g(an)m(y)m(one)f(writing)g(astronomical)h(applications)0
-5464 y(whic)m(h)g(need)h(to)h(manipulate)f(co)s(ordinate)g(system)g
-(data,)j(esp)s(ecially)e(celestial)i(or)d(sp)s(ectral)g(co)s(ordinate)0
-5576 y(systems.)g(AST)29 b(is)i(p)s(ortable)f(and)g(en)m(vironmen)m
-(t-indep)s(enden)m(t.)p eop end
-%%Page: 2 2
-TeXDict begin 2 1 bop 0 52 a FG(ii)3245 b Fz(SUN/210.26)0
-5670 y FG(Cop)m(yrigh)m(t)31 b(\(C\))g(2009)h(Science)f(&)f(T)-8
-b(ec)m(hnology)32 b(F)-8 b(acilities)34 b(Council)p eop
-end
-%%Page: 3 3
-TeXDict begin 3 2 bop 0 52 a Fz(CONTENTS)3186 b FG(iii)0
-351 y FA(Con)l(ten)l(ts)0 556 y FE(1)84 b(In)m(tro)s(duction)3015
-b(1)136 669 y FG(1.1)94 b(What)32 b(Problems)e(Do)s(es)h(AST)e(T)-8
-b(ac)m(kle?)54 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151
-b(1)136 782 y(1.2)94 b(Other)30 b(Design)i(Ob)5 b(jectiv)m(es)44
-b(.)i(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151
-b(2)136 895 y(1.3)94 b(What)32 b(Do)s(es)e(\\AST")h(Stand)f(F)-8
-b(or?)81 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151
-b(4)0 1100 y FE(2)84 b(Ov)m(erview)35 b(of)g(AST)f(Concepts)2343
-b(5)136 1213 y FG(2.1)94 b(Relationships)31 b(Bet)m(w)m(een)i(Co)s
-(ordinate)d(Systems)79 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151 b(5)136 1326
-y(2.2)94 b(Mappings)31 b(Av)-5 b(ailable)95 b(.)45 b(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151 b(5)136
-1439 y(2.3)94 b(Comp)s(ound)29 b(Mappings)c(.)45 b(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151 b(6)136 1552
-y(2.4)94 b(Represen)m(ting)31 b(Co)s(ordinate)g(Systems)k(.)45
-b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151 b(7)136 1665 y(2.5)94
-b(Net)m(w)m(orks)32 b(of)f(Co)s(ordinate)f(Systems)77
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151 b(9)136 1778
-y(2.6)94 b(Input/Output)29 b(F)-8 b(acilities)85 b(.)46
-b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(11)136 1891 y(2.7)94 b(Pro)s(ducing)30 b(Graphical)h(Output)80
-b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(12)0
-2096 y FE(3)84 b(Ho)m(w)35 b(T)-9 b(o.)18 b(.)f(.)3059
-b(15)136 2209 y FG(3.1)94 b(.)16 b(.)f(.)h(Obtain)30
-b(and)g(Install)g(AST)91 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)106 b(15)136 2322 y(3.2)94 b(.)16 b(.)f(.)h(Structure)29
-b(an)h(AST)g(Program)92 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(15)136 2435 y(3.3)94 b(.)16 b(.)f(.)h(Build)30 b(an)g(AST)g(Program)
-38 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(16)136 2548 y(3.4)94 b(.)16 b(.)f(.)h(Read)30 b(a)h(W)m(CS)f
-(Calibration)h(from)f(a)h(Dataset)55 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(16)136 2661 y(3.5)94 b(.)16 b(.)f(.)h(V)-8 b(alidate)32
-b(W)m(CS)f(Information)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(17)136 2774 y(3.6)94 b(.)16 b(.)f(.)h(Displa)m(y)31
-b(AST)f(Data)92 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)106 b(17)136 2888 y(3.7)94 b(.)16 b(.)f(.)h(Con)m(v)m(ert)31
-b(Bet)m(w)m(een)h(Pixel)f(and)f(W)-8 b(orld)31 b(Co)s(ordinates)93
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(17)136 3001 y(3.8)94 b(.)16 b(.)f(.)h(T)-8 b(est)31
-b(if)f(a)h(W)m(CS)f(is)h(a)f(Celestial)i(Co)s(ordinate)f(System)69
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(18)136 3114 y(3.9)94 b(.)16 b(.)f(.)h(T)-8 b(est)31
-b(if)f(a)h(W)m(CS)f(is)h(a)f(Sp)s(ectral)h(Co)s(ordinate)f(System)82
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(18)136 3227 y(3.10)49 b(.)16 b(.)f(.)h(F)-8 b(ormat)31
-b(Co)s(ordinates)g(for)f(Displa)m(y)60 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)106 b(19)136 3340 y(3.11)49 b(.)16 b(.)f(.)h(Displa)m(y)31
-b(Co)s(ordinates)g(as)f(they)h(are)f(T)-8 b(ransformed)84
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)106 b(19)136 3453 y(3.12)49 b(.)16 b(.)f(.)h(Read)30
-b(Co)s(ordinates)h(En)m(tered)f(b)m(y)g(a)h(User)69 b(.)46
-b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)106 b(20)136 3566 y(3.13)49 b(.)16
-b(.)f(.)h(Create)31 b(a)g(New)f(W)m(CS)h(Calibration)63
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(21)136 3679
-y(3.14)49 b(.)16 b(.)f(.)h(Mo)s(dify)30 b(a)h(W)m(CS)f(Calibration)36
-b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(23)136
-3792 y(3.15)49 b(.)16 b(.)f(.)h(W)-8 b(rite)31 b(a)g(Mo)s(di\014ed)f(W)
-m(CS)g(Calibration)h(to)h(a)e(Dataset)44 b(.)h(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(25)136 3905
-y(3.16)49 b(.)16 b(.)f(.)h(Displa)m(y)31 b(a)g(Graphical)g(Co)s
-(ordinate)g(Grid)56 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(27)136
-4018 y(3.17)49 b(.)16 b(.)f(.)h(Switc)m(h)30 b(to)h(Plot)g(a)g
-(Di\013eren)m(t)h(Celestial)g(Co)s(ordinate)f(Grid)89
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(29)136 4131 y(3.18)49 b(.)16 b(.)f(.)h(Giv)m(e)31 b(a)g(User)g(Con)m
-(trol)g(Ov)m(er)f(the)h(App)s(earance)f(of)g(a)h(Plot)46
-b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(30)0 4336 y FE(4)84 b(An)35 b(AST)g(Ob)6 b(ject)34
-b(Primer)2457 b(33)136 4449 y FG(4.1)94 b(AST)30 b(Ob)5
-b(jects)76 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)106 b(33)136 4562 y(4.2)94 b(Ob)5
-b(ject)31 b(Creation)g(and)f(P)m(oin)m(ters)57 b(.)46
-b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(33)136
-4675 y(4.3)94 b(The)30 b(Ob)5 b(ject)31 b(Hierarc)m(h)m(y)79
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(34)136 4788 y(4.4)94 b(Displa)m(ying)32 b(Ob)5 b(jects)54
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)106 b(35)136 4901 y(4.5)94 b(Getting)32 b(A)m(ttribute)g(V)-8
-b(alues)25 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(36)136 5015 y(4.6)94 b(Setting)32 b(A)m(ttribute)f(V)-8
-b(alues)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(36)136 5128 y(4.7)94 b(T)-8 b(esting,)32 b(Clearing)f(and)f
-(Defaulting)h(A)m(ttributes)57 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(37)136
-5241 y(4.8)94 b(T)-8 b(ransforming)30 b(Co)s(ordinates)52
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(38)136 5354 y(4.9)94 b(Managing)32 b(Ob)5 b(ject)31
-b(P)m(oin)m(ters)45 b(.)h(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)106 b(40)136 5467 y(4.10)49 b(AST)30 b(P)m(oin)m(ter)i(Con)m
-(texts|Begin)g(and)e(End)80 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(40)136 5580 y(4.11)49 b(Exp)s(orting,)31 b(Imp)s(orting)e(and)h
-(Exempting)g(AST)g(P)m(oin)m(ters)87 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(41)136 5693
-y(4.12)49 b(Cop)m(ying)31 b(Ob)5 b(jects)73 b(.)46 b(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(41)p eop end
-%%Page: 4 4
-TeXDict begin 4 3 bop 0 52 a FG(iv)3190 b Fz(CONTENTS)136
-351 y FG(4.13)49 b(Error)30 b(Detection)43 b(.)i(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(42)0 556 y FE(5)84 b(In)m(ter-Relating)35 b(Co)s(ordinate)f(Systems)h
-(\(Mappings\))1377 b(45)136 669 y FG(5.1)94 b(The)30
-b(Mapping)h(Class)h(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)106 b(45)136 782 y(5.2)94 b(The)30
-b(Mapping)h(Mo)s(del)64 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)106 b(46)136 895 y(5.3)94 b(Input)29
-b(and)h(Output)f(Co)s(ordinate)i(Num)m(b)s(ers)76 b(.)46
-b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)106 b(46)136 1008 y(5.4)94 b(F)-8
-b(orw)m(ard)31 b(and)f(In)m(v)m(erse)h(T)-8 b(ransformations)24
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(46)136 1121 y(5.5)94
-b(In)m(v)m(erting)32 b(Mappings)g(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(47)136 1234
-y(5.6)94 b(Finding)31 b(the)f(Rate)i(of)e(Change)g(of)h(a)g(Mapping)f
-(Output)83 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)106 b(47)136 1347 y(5.7)94 b(Rep)s(orting)31
-b(Co)s(ordinate)f(T)-8 b(ransformations)38 b(.)45 b(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(47)136 1461 y(5.8)94 b(Handling)31 b(Missing)g(\(Bad\))g(Co)s
-(ordinate)g(V)-8 b(alues)84 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(48)136
-1574 y(5.9)94 b(Example|the)31 b(UnitMap)68 b(.)46 b(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(48)136 1687
-y(5.10)49 b(Example|the)31 b(P)m(ermMap)36 b(.)46 b(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(49)0 1891 y FE(6)84
-b(Comp)s(ound)36 b(Mappings)f(\(CmpMaps\))1968 b(53)136
-2004 y FG(6.1)94 b(Com)m(bining)31 b(Mappings)f(in)g(Series)90
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(53)136
-2118 y(6.2)94 b(Com)m(bining)31 b(Mappings)f(in)g(P)m(arallel)89
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(54)136
-2231 y(6.3)94 b(The)30 b(Comp)s(onen)m(t)g(Mappings)e(.)46
-b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(54)136 2344 y(6.4)94 b(Creating)31 b(More)h(Complex)e(Mappings)67
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(55)136 2457
-y(6.5)94 b(Example|T)-8 b(ransforming)30 b(Bet)m(w)m(een)j(Tw)m(o)d
-(Calibrated)h(Images)73 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)106 b(55)136 2570 y(6.6)94 b(Ov)m(er-Complex)31
-b(Comp)s(ound)d(Mappings)58 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(56)136 2683 y(6.7)94 b(Simplifying)30 b(Comp)s(ound)e(Mappings)41
-b(.)k(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(56)0 2888
-y FE(7)84 b(Represen)m(ting)36 b(Co)s(ordinate)e(Systems)i(\(F)-9
-b(rames\))1543 b(59)136 3001 y FG(7.1)94 b(The)30 b(F)-8
-b(rame)32 b(Mo)s(del)24 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(59)136 3114 y(7.2)94
-b(Creating)31 b(a)g(F)-8 b(rame)40 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(59)136
-3227 y(7.3)94 b(Using)31 b(a)g(F)-8 b(rame)31 b(as)g(a)f(Mapping)84
-b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(60)136
-3340 y(7.4)94 b(F)-8 b(rame)32 b(Axis)e(A)m(ttributes)54
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(60)136 3453 y(7.5)94 b(F)-8 b(rame)32 b(A)m(ttributes)49
-b(.)d(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)106 b(61)136 3566 y(7.6)94 b(F)-8 b(ormatting)33
-b(Axis)d(V)-8 b(alues)80 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)106 b(63)136 3679 y(7.7)94 b(Normalising)32
-b(F)-8 b(rame)31 b(Co)s(ordinates)38 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)106 b(64)136 3792 y(7.8)94 b(Reading)31 b(F)-8
-b(ormatted)32 b(Axis)f(V)-8 b(alues)38 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)106 b(64)136 3905 y(7.9)94 b(P)m(erm)m(uting)31
-b(F)-8 b(rame)32 b(Axes)g(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)106 b(68)136 4018 y(7.10)49 b(Selecting)32
-b(F)-8 b(rame)32 b(Axes)24 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)106 b(68)136 4131 y(7.11)49 b(Calculating)32
-b(Distances,)g(Angles)f(and)f(O\013sets)65 b(.)46 b(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(69)136 4244 y(7.12)49 b(The)30 b(Domain)h(A)m(ttribute)48
-b(.)e(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(71)136 4358 y(7.13)49 b(Con)m(v)m(en)m(tions)32 b(for)e(Domain)h
-(Names)42 b(.)k(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(73)136 4471 y(7.14)49 b(The)30 b(Unit)h(A)m(ttribute)39
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)106 b(74)345 4584 y(7.14.1)61 b(The)30 b(Syn)m(tax)h(for)f(Unit)h
-(Strings)i(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(75)345
-4697 y(7.14.2)61 b(Side-e\013ects)32 b(of)f(Changing)f(the)g(Unit)h
-(attribute)86 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)106 b(76)0 4901 y FE(8)84 b(Celestial)34
-b(Co)s(ordinate)h(Systems)g(\(SkyF)-9 b(rames\))1584
-b(79)136 5015 y FG(8.1)94 b(The)30 b(SkyF)-8 b(rame)31
-b(Mo)s(del)90 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)106 b(79)136 5128 y(8.2)94 b(Creating)31 b(a)g(SkyF)-8
-b(rame)35 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)106 b(79)136 5241 y(8.3)94 b(Sp)s(ecifying)30
-b(a)h(P)m(articular)h(Celestial)g(Co)s(ordinate)e(System)83
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(80)136 5354 y(8.4)94 b(A)m(ttributes)32 b(whic)m(h)e(Qualify)g
-(Celestial)i(Co)s(ordinate)f(Systems)k(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(80)136 5467 y(8.5)94
-b(Using)31 b(Default)h(SkyF)-8 b(rame)30 b(A)m(ttributes)g(.)46
-b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(81)136 5580 y(8.6)94
-b(F)-8 b(ormatting)33 b(Celestial)f(Co)s(ordinates)51
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(82)136
-5693 y(8.7)94 b(Reading)31 b(F)-8 b(ormatted)32 b(Celestial)g(Co)s
-(ordinates)80 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(84)p eop end
-%%Page: 5 5
-TeXDict begin 5 4 bop 0 52 a Fz(CONTENTS)3214 b FG(v)136
-351 y(8.8)94 b(Represen)m(ting)31 b(O\013sets)g(from)f(a)h(Sp)s
-(eci\014ed)e(Sky)h(P)m(osition)65 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(87)0 559 y FE(9)84
-b(Sp)s(ectral)35 b(Co)s(ordinate)g(Systems)g(\(Sp)s(ecF)-9
-b(rames\))1553 b(89)136 673 y FG(9.1)94 b(The)30 b(Sp)s(ecF)-8
-b(rame)31 b(Mo)s(del)52 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)106 b(89)136 787 y(9.2)94 b(Creating)31
-b(a)g(Sp)s(ecF)-8 b(rame)67 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)106 b(89)136 900 y(9.3)94 b(Sp)s(ecifying)30
-b(a)h(P)m(articular)h(Sp)s(ectral)e(Co)s(ordinate)g(System)c(.)45
-b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(89)136 1014 y(9.4)94 b(A)m(ttributes)32 b(whic)m(h)e(Qualify)g(Sp)s
-(ectral)g(Co)s(ordinate)h(Systems)48 b(.)e(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(90)136 1128 y(9.5)94
-b(Using)31 b(Default)h(Sp)s(ecF)-8 b(rame)30 b(A)m(ttributes)63
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(91)136 1242 y(9.6)94
-b(Creating)31 b(Sp)s(ectral)g(Cub)s(es)43 b(.)j(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(92)136 1355 y(9.7)94
-b(Handling)31 b(Dual-Sideband)f(Sp)s(ectra)67 b(.)45
-b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(93)0 1563 y
-FE(10)32 b(Time)j(Systems)g(\(TimeF)-9 b(rames\))2215
-b(95)136 1677 y FG(10.1)49 b(The)30 b(TimeF)-8 b(rame)32
-b(Mo)s(del)d(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)106 b(95)136 1791 y(10.2)49 b(Creating)31 b(a)g(TimeF)-8
-b(rame)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(95)136 1904 y(10.3)49 b(Sp)s(ecifying)30 b(a)h(P)m(articular)h
-(Time)e(System)51 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(95)136 2018 y(10.4)49 b(A)m(ttributes)32 b(whic)m(h)e(Qualify)g(Time)
-g(Co)s(ordinate)h(Systems)26 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(96)0 2226 y FE(11)32
-b(Comp)s(ound)k(F)-9 b(rames)35 b(\(CmpF)-9 b(rames\))2009
-b(97)136 2340 y FG(11.1)49 b(Creating)31 b(a)g(CmpF)-8
-b(rame)59 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)106 b(97)136 2453 y(11.2)49 b(The)30 b(A)m(ttributes)h(of)g(a)g
-(CmpF)-8 b(rame)56 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(97)0 2661 y FE(12)32 b(An)j(In)m(tro)s(duction)h(to)e(Co)s(ordinate)h
-(System)g(Con)m(v)m(ersions)1170 b(99)136 2775 y FG(12.1)49
-b(Con)m(v)m(erting)32 b(b)s(et)m(w)m(een)f(Celestial)h(Co)s(ordinate)f
-(Systems)d(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)106 b(99)136 2889 y(12.2)49 b(Con)m(v)m(erting)32
-b(b)s(et)m(w)m(een)f(Sp)s(ectral)f(Co)s(ordinate)h(Systems)41
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)60 b(101)136 3003 y(12.3)49 b(Con)m(v)m(erting)32
-b(b)s(et)m(w)m(een)f(Time)f(Co)s(ordinate)h(Systems)89
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)60 b(103)136 3116 y(12.4)49 b(Handling)31 b(SkyF)-8
-b(rame)31 b(Axis)f(P)m(erm)m(utations)h(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(103)136 3230 y(12.5)49 b(Con)m(v)m(erting)32 b(Bet)m(w)m(een)g(F)-8
-b(rames)49 b(.)c(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(104)136 3344 y(12.6)49 b(The)30 b(Choice)h(of)g(Alignmen)m(t)g
-(System)56 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(104)0 3552 y FE(13)32 b(Co)s(ordinate)j(System)g(Net)m(w)m(orks)g
-(\(F)-9 b(rameSets\))1553 b(107)136 3665 y FG(13.1)49
-b(The)30 b(F)-8 b(rameSet)32 b(Mo)s(del)40 b(.)45 b(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(107)136
-3779 y(13.2)49 b(Creating)31 b(a)g(F)-8 b(rameSet)56
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(108)136 3893 y(13.3)49 b(Adding)30 b(New)h(F)-8 b(rames)31
-b(to)g(a)g(F)-8 b(rameSet)43 b(.)j(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(108)136 4007 y(13.4)49 b(The)30 b(Base)i(and)e(Curren)m(t)f(F)-8
-b(rames)27 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(109)136 4120 y(13.5)49 b(Referring)31 b(to)g(the)f(Base)i(and)e
-(Curren)m(t)f(F)-8 b(rames)43 b(.)j(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(110)136
-4234 y(13.6)49 b(Using)31 b(a)g(F)-8 b(rameSet)31 b(as)g(a)g(Mapping)d
-(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(111)136
-4348 y(13.7)49 b(Extracting)32 b(a)f(Mapping)f(from)g(a)h(F)-8
-b(rameSet)81 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(111)136 4462
-y(13.8)49 b(Using)31 b(a)g(F)-8 b(rameSet)31 b(as)g(a)g(F)-8
-b(rame)60 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(112)136 4575 y(13.9)49 b(Extracting)32 b(a)f(F)-8 b(rame)31
-b(from)f(a)h(F)-8 b(rameSet)42 b(.)k(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(113)136 4689 y(13.10)t(Remo)m(ving)32 b(a)f(F)-8 b(rame)31
-b(from)f(a)h(F)-8 b(rameSet)70 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(113)0 4897 y FE(14)32 b(Higher)j(Lev)m(el)g(Op)s(erations)g(on)g(F)-9
-b(rameSets)1708 b(115)136 5011 y FG(14.1)49 b(Creating)31
-b(F)-8 b(rameSets)32 b(with)e(AST)p Fy(_)p FG(CONVER)-8
-b(T)83 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)60 b(115)136 5124 y(14.2)49 b(Con)m(v)m(erting)
-32 b(b)s(et)m(w)m(een)f(F)-8 b(rameSet)31 b(Co)s(ordinate)g(Systems)63
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-60 b(116)136 5238 y(14.3)49 b(Example|Registering)32
-b(Tw)m(o)f(Images)50 b(.)c(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(118)136 5352 y(14.4)49 b(Re-De\014ning)31 b(a)g(F)-8
-b(rameSet)32 b(Co)s(ordinate)e(System)59 b(.)46 b(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(120)136 5466 y(14.5)49 b(Example|Binning)31 b(an)f(Image)87
-b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(121)136
-5579 y(14.6)49 b(Main)m(taining)33 b(the)d(In)m(tegrit)m(y)i(of)f(F)-8
-b(rameSets)32 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(122)136
-5693 y(14.7)49 b(Merging)32 b(F)-8 b(rameSets)42 b(.)k(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(124)p
-eop end
-%%Page: 6 6
-TeXDict begin 6 5 bop 0 52 a FG(vi)3190 b Fz(CONTENTS)0
-351 y FE(15)32 b(Sa)m(ving)k(and)f(Restoring)g(Ob)6 b(jects)35
-b(\(Channels\))1585 b(127)136 465 y FG(15.1)49 b(The)30
-b(Channel)g(Mo)s(del)87 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)60 b(127)136 578 y(15.2)49 b(Creating)31
-b(a)g(Channel)f(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)60 b(127)136 692 y(15.3)49 b(W)-8 b(riting)32
-b(Ob)5 b(jects)30 b(to)i(a)e(Channel)47 b(.)f(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)60 b(128)136 805 y(15.4)49 b(Reading)31
-b(Ob)5 b(jects)31 b(from)f(a)g(Channel)64 b(.)45 b(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)60 b(128)136 918 y(15.5)49 b(Sa)m(ving)31
-b(and)f(Restoring)h(Multiple)g(Ob)5 b(jects)34 b(.)45
-b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)60 b(129)136 1032 y(15.6)49 b(V)-8
-b(alidating)33 b(Input)77 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(129)136 1145 y(15.7)49
-b(Storing)31 b(an)f(ID)h(String)f(with)g(an)g(Ob)5 b(ject)62
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(129)136 1259 y(15.8)49
-b(The)30 b(T)-8 b(extual)32 b(Output)d(F)-8 b(ormat)31
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(130)136 1372 y(15.9)49 b(Con)m(trolling)32 b(the)f(Amoun)m(t)f(of)h
-(Output)59 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(132)136
-1485 y(15.10)t(Con)m(trolling)32 b(Commen)m(ting)k(.)46
-b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(134)136 1599 y(15.11)t(Editing)31 b(T)-8 b(extual)31
-b(Output)69 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)60 b(134)136 1712 y(15.12)t(Mixing)32 b(Ob)5 b(jects)30
-b(with)g(other)h(T)-8 b(ext)33 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)60 b(135)136 1826 y(15.13)t(Reading)31 b(Ob)5 b(jects)31
-b(from)f(Files)71 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-60 b(135)136 1939 y(15.14)t(W)-8 b(riting)32 b(Ob)5 b(jects)30
-b(to)i(Files)54 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)60 b(137)136 2053 y(15.15)t(Reading)31 b(and)f(W)-8
-b(riting)32 b(Ob)5 b(jects)30 b(to)h(other)g(Places)71
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)60 b(137)0 2259 y FE(16)32 b(Storing)k(AST)e(Ob)6
-b(jects)35 b(in)g(FITS)f(Headers)h(\(FitsChans\))1146
-b(139)136 2372 y FG(16.1)49 b(The)30 b(Nativ)m(e)j(FITS)c(Enco)s(ding)
-74 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(139)136 2486 y(16.2)49 b(The)30 b(FitsChan)h(Mo)s(del)47
-b(.)e(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(139)136 2599 y(16.3)49 b(Creating)31 b(a)g(FitsChan)62
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(140)136 2713 y(16.4)49 b(Addressing)30 b(Cards)f(in)h(a)h(FitsChan)93
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(141)136
-2826 y(16.5)49 b(W)-8 b(riting)32 b(Nativ)m(e)g(Ob)5
-b(jects)31 b(to)g(a)g(FitsChan)71 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(142)136 2939 y(16.6)49 b(Extracting)32 b(Individual)d(Cards)h(from)g
-(a)g(FitsChan)60 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(142)136 3053 y(16.7)49
-b(The)30 b(Nativ)m(e)j(FitsChan)d(Output)f(F)-8 b(ormat)29
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(143)136 3166 y(16.8)49
-b(Adding)30 b(Individual)g(Cards)f(to)i(a)g(FitsChan)83
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)60 b(144)136 3280 y(16.9)49 b(Adding)30
-b(Concatenated)i(Cards)d(to)i(a)g(FitsChan)84 b(.)46
-b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)60 b(145)136 3393 y(16.10)t(Reading)31 b(Nativ)m(e)i(Ob)5
-b(jects)30 b(F)-8 b(rom)31 b(a)g(FitsChan)63 b(.)46 b(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(145)136 3507 y(16.11)t(Sa)m(ving)31 b(and)f(Restoring)h(Multiple)g
-(Ob)5 b(jects)31 b(in)f(a)h(FitsChan)89 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(145)136 3620 y(16.12)t(Mixing)32
-b(Nativ)m(e)g(Ob)5 b(jects)30 b(with)g(Other)g(FITS)g(Cards)62
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)60 b(146)136 3733 y(16.13)t(Finding)31 b(and)e(Changing)h
-(Cards)g(in)g(a)h(FitsChan)62 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(146)136
-3847 y(16.14)t(Source)31 b(and)e(Sink)h(Routines)h(for)f(FitsChans)58
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)60 b(147)0 4053 y FE(17)32 b(Using)k(F)-9
-b(oreign)36 b(FITS)e(Enco)s(dings)2079 b(149)136 4167
-y FG(17.1)49 b(The)30 b(F)-8 b(oreign)32 b(FITS)e(Enco)s(dings)73
-b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(149)136
-4280 y(17.2)49 b(Limitations)32 b(of)f(F)-8 b(oreign)31
-b(Enco)s(dings)51 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(150)136 4393 y(17.3)49 b(Iden)m(tifying)31 b(F)-8 b(oreign)32
-b(Enco)s(dings)d(on)i(Input)86 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(151)136 4507 y(17.4)49 b(Reading)31 b(F)-8 b(oreign)32
-b(W)m(CS)e(Information)h(from)f(a)g(FITS)g(Header)67
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(153)136 4620 y(17.5)49 b(Remo)m(ving)32 b(W)m(CS)e(Information)h
-(from)e(FITS)h(Headers|the)h(Destructiv)m(e)h(Read)62
-b(.)46 b(.)g(.)f(.)h(.)60 b(154)136 4734 y(17.6)49 b(Propagating)32
-b(W)m(CS)e(Information)h(through)e(Data)j(Pro)s(cessing)f(Steps)90
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(155)136
-4847 y(17.7)49 b(W)-8 b(riting)32 b(F)-8 b(oreign)32
-b(W)m(CS)e(Information)g(to)i(a)e(FITS)g(Header)50 b(.)c(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(156)0
-5053 y FE(18)32 b(Storing)k(AST)e(Ob)6 b(jects)35 b(as)g(XML)g
-(\(XmlChan\))1565 b(159)136 5167 y FG(18.1)49 b(Reading)31
-b(IV)m(O)m(A)g(Space-Time-Co)s(ordinates)h(XML)e(\(STC-X\))h
-(Descriptions)56 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)60 b(160)0
-5373 y FE(19)32 b(Reading)k(and)f(writing)f(STC-S)g(descriptions)i
-(\(StcsChans\))1047 b(163)0 5580 y(20)32 b(Creating)j(Y)-9
-b(our)35 b(Own)f(Priv)-6 b(ate)35 b(Mappings)h(\(In)m(traMaps\))1139
-b(165)136 5693 y FG(20.1)49 b(The)30 b(Need)h(for)f(Extensibilit)m(y)j
-(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(165)p eop end
-%%Page: 7 7
-TeXDict begin 7 6 bop 0 52 a Fz(CONTENTS)3163 b FG(vii)136
-351 y(20.2)49 b(The)30 b(In)m(traMap)h(Mo)s(del)39 b(.)45
-b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(165)136 466 y(20.3)49 b(Limitations)32 b(of)f(In)m(traMaps)89
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(165)136 580 y(20.4)49 b(W)-8 b(riting)32 b(a)f(T)-8
-b(ransformation)30 b(Routine)79 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(166)136 694 y(20.5)49 b(Registering)32 b(a)f(T)-8 b(ransformation)30
-b(Routine)78 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(167)136
-808 y(20.6)49 b(Creating)31 b(an)g(In)m(traMap)73 b(.)46
-b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(168)136 923 y(20.7)49 b(Restricted)32 b(Implemen)m(tations)f(of)g(T)
--8 b(ransformation)30 b(Routines)69 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)60 b(169)136 1037 y(20.8)49 b(V)-8
-b(ariable)32 b(Num)m(b)s(ers)d(of)i(Co)s(ordinates)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(170)136 1151
-y(20.9)49 b(Adapting)31 b(a)g(T)-8 b(ransformation)30
-b(Routine)h(to)g(Individual)e(In)m(traMaps)84 b(.)46
-b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(171)136
-1265 y(20.10)t(Simplifying)30 b(In)m(traMaps)58 b(.)46
-b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(171)136 1380 y(20.11)t(W)-8 b(riting)32 b(and)e(Reading)h(In)m
-(traMaps)26 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(173)136 1494 y(20.12)t(Managing)32 b(T)-8 b(ransformation)31
-b(Routines)f(in)g(Libraries)38 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(173)0 1705
-y FE(21)32 b(Pro)s(ducing)37 b(Graphical)e(Output)f(\(Plots\))1813
-b(175)136 1819 y FG(21.1)49 b(The)30 b(Plot)i(Mo)s(del)j(.)45
-b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)60 b(175)136 1933 y(21.2)49 b(Plotting)32 b(Sym)m(b)s(ols)51
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)60 b(175)136 2047 y(21.3)49 b(Plotting)32 b(Geo)s(desic)g(Curv)m
-(es)80 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(176)136 2162 y(21.4)49 b(Plotting)32 b(Curv)m(es)e(P)m(arallel)i(to)f
-(Axes)81 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(177)136 2276 y(21.5)49 b(Plotting)32 b(Generalized)g(Curv)m(es)38
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(177)136 2390 y(21.6)49 b(Clipping)d(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(177)136 2505 y(21.7)49 b(Using)31 b(a)g(Plot)g(as)g(a)f(Mapping)24
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(178)136 2619 y(21.8)49 b(Using)31 b(a)g(Plot)g(as)g(a)f(F)-8
-b(rame)56 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-60 b(178)136 2733 y(21.9)49 b(Regions)32 b(of)e(V)-8
-b(alid)32 b(Ph)m(ysical)f(Co)s(ordinates)67 b(.)45 b(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)60 b(179)136 2847 y(21.10)t(Plotting)32 b(Borders)75
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)60 b(179)136 2962 y(21.11)t(Plotting)32 b(T)-8
-b(ext)61 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)60 b(180)136 3076 y(21.12)t(Plotting)32
-b(a)f(Grid)54 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)60 b(180)136 3190 y(21.13)t(Con)m(trolling)32
-b(the)f(App)s(earance)f(of)g(Sub-strings)43 b(.)j(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(180)136 3304 y(21.14)t(Pro)s(ducing)30 b(Logarithmic)h(Axes)91
-b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(181)136
-3419 y(21.15)t(Cho)s(osing)30 b(a)h(Graphics)f(P)m(ac)m(k)-5
-b(age)61 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(182)0 3629 y FE(22)32 b(Compiling)k(and)e(Linking)i(Soft)m(w)m(are)e
-(that)g(Uses)i(AST)1290 b(183)136 3744 y FG(22.1)49 b(Accessing)32
-b(AST)e(Include)f(Files)h(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)60 b(183)136 3858 y(22.2)49 b(Linking)31 b(with)f(AST)f(F)-8
-b(acilities)62 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(183)136 3972 y(22.3)49 b(Building)31 b(AD)m(AM)h(Applications)f(that)
-g(Use)g(AST)e(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(184)0 4183 y FE(A)d(The)35
-b(AST)g(Class)f(Hierarc)m(h)m(y)2307 b(185)0 4393 y(B)62
-b(AST)35 b(Routine)g(Descriptions)2277 b(187)0 4604 y(C)60
-b(AST)35 b(A)m(ttribute)f(Descriptions)2207 b(381)0 4815
-y(D)56 b(AST)35 b(Class)g(Descriptions)2403 b(477)0 5025
-y(E)67 b(UNIX)35 b(Command)g(Descriptions)2101 b(519)0
-5236 y(F)70 b(FITS-W)m(CS)34 b(Co)m(v)m(erage)2523 b(523)136
-5350 y FG(F.1)80 b(P)m(ap)s(er)31 b(I)f(-)g(General)i(Linear)e(Co)s
-(ordinates)c(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(523)345
-5464 y(F.1.1)92 b(Requiremen)m(ts)31 b(for)f(a)h(Successful)f(W)-8
-b(rite)32 b(Op)s(eration)61 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)60 b(523)345 5579 y(F.1.2)92 b(Use)31
-b(and)f(Choice)h(of)f(CTYPE)p Fx(i)39 b FG(k)m(eyw)m(ords)71
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)60 b(523)345 5693 y(F.1.3)92 b(Choice)31
-b(of)g(Reference)g(P)m(oin)m(t)57 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)60 b(525)p eop end
-%%Page: 8 8
-TeXDict begin 8 7 bop 0 52 a FG(viii)3140 b Fz(CONTENTS)345
-351 y FG(F.1.4)92 b(Choice)31 b(of)g(Axis)f(Ordering)49
-b(.)d(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(525)345
-465 y(F.1.5)92 b(Alternate)32 b(Axis)f(Descriptions)50
-b(.)c(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(525)136 579 y(F.2)80
-b(P)m(ap)s(er)31 b(I)s(I)e(-)i(Celestial)h(Co)s(ordinates)h(.)46
-b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(526)345 693
-y(F.2.1)92 b(Requiremen)m(ts)31 b(for)f(a)h(Successful)f(W)-8
-b(rite)32 b(Op)s(eration)61 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)60 b(526)345 807 y(F.2.2)92 b(Choice)31
-b(of)g(LONPOLE/LA)-8 b(TPOLE)36 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(526)345 922 y(F.2.3)92 b(User)31 b(De\014ned)f(Fiducial)h(P)m(oin)m
-(ts)82 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(528)345 1036
-y(F.2.4)92 b(Common)30 b(Non-Standard)g(F)-8 b(eatures)54
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)60 b(528)136 1150 y(F.3)80 b(P)m(ap)s(er)31
-b(I)s(I)s(I)d(-)j(Sp)s(ectral)f(Co)s(ordinates)82 b(.)45
-b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(529)345 1264
-y(F.3.1)92 b(Requiremen)m(ts)31 b(for)f(a)h(Successful)f(W)-8
-b(rite)32 b(Op)s(eration)61 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)60 b(529)345 1378 y(F.3.2)92 b(Common)30
-b(Non-Standard)g(F)-8 b(eatures)54 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(529)136 1492 y(F.4)80 b(P)m(ap)s(er)31 b(IV)f(-)h(Co)s(ordinate)f
-(Distortions)78 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(531)345 1606 y(F.4.1)92 b(The)30 b(\\-SIP")h(distortion)g(co)s(de)76
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(531)0 1815 y
-FE(G)54 b(Changes)35 b(and)g(New)f(F)-9 b(eatures)2239
-b(532)136 1929 y FG(G.1)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.1)
-47 b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(532)136 2043 y(G.2)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.2)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(533)136 2157 y(G.3)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.3)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(534)136 2272 y(G.4)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.4)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(535)136 2386 y(G.5)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.5)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(536)136 2500 y(G.6)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.6)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(537)136 2614 y(G.7)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.7)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(539)136 2728 y(G.8)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-2)
-42 b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(540)136
-2842 y(G.9)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-3)42
-b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(540)136
-2956 y(G.10)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-4)42
-b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(541)136
-3070 y(G.11)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-5)42
-b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(541)136
-3184 y(G.12)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-7)42
-b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(541)136
-3298 y(G.13)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-8)42
-b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(542)136
-3412 y(G.14)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-13)68
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(542)136
-3526 y(G.15)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V2.0)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(543)136 3640 y(G.16)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.0)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(545)136 3754 y(G.17)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.1)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(547)136 3868 y(G.18)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.2)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(548)136 3982 y(G.19)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.3)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(549)136 4096 y(G.20)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.4)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(550)136 4210 y(G.21)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.5)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(551)136 4324 y(G.22)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.6)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(552)136 4438 y(G.23)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.7)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(552)136 4553 y(G.24)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.0)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(552)136 4667 y(G.25)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.1)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(553)136 4781 y(G.26)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.2)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(553)136 4895 y(G.27)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.3)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(554)136 5009 y(G.28)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.4)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(555)136 5123 y(G.29)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.5)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(556)136 5237 y(G.30)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.6)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(557)136 5351 y(G.31)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V5.0)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(557)136 5465 y(G.32)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V5.1)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(557)136 5579 y(G.33)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V5.2)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(558)136 5693 y(G.34)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V5.3)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(559)p eop end
-%%Page: 9 9
-TeXDict begin 9 8 bop 0 52 a Fz(SUN/210.26)3224 b FG(ix)136
-351 y(G.35)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V5.3-1)42
-b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(560)p
-eop end
-%%Page: 10 10
-TeXDict begin 10 9 bop 0 52 a FG(x)3247 b Fz(SUN/210.26)p
-eop end
-%%Page: 1 11
-TeXDict begin 1 10 bop 3734 52 a FG(1)p 945 709 1890
-12 v 1755 898 a FA(AST)1202 1047 y(A)45 b(Library)g(for)g(Handling)1097
-1196 y(W)-11 b(orld)45 b(Co)t(ordinate)h(Systems)1486
-1346 y(in)f(Astronom)l(y)1753 1592 y(V5.3)p 945 1783
-V 994 2176 a Fx(This)33 b(is)g(the)g(F)-7 b(ortr)i(an)35
-b(version)e(of)g(this)g(do)-5 b(cument.)1101 2289 y(F)e(or)34
-b(the)f(C)g(version,)g(ple)-5 b(ase)33 b(se)-5 b(e)33
-b(SUN/211.)0 2865 y FA(1)135 b(In)l(tro)t(duction)0 3112
-y FG(W)-8 b(elcome)30 b(to)d(the)h(AST)e(library)-8 b(.)40
-b(If)26 b(y)m(ou)i(are)f(writing)g(soft)m(w)m(are)i(for)e(astronom)m(y)
-h(and)e(need)h(to)h(use)f(celestial)0 3225 y(co)s(ordinates)k(\()p
-Fx(e.g.)g FG(RA)f(and)g(Dec\),)i(sp)s(ectral)f(co)s(ordinates)h(\()p
-Fx(e.g.)e FG(w)m(a)m(v)m(elength,)j(frequency)-8 b(,)31
-b Fx(etc.)p FG(\),)g(or)f(other)0 3338 y(co)s(ordinate)i(system)f
-(information,)g(then)g(this)g(library)f(should)g(b)s(e)h(of)g(in)m
-(terest.)43 b(It)31 b(pro)m(vides)g(solutions)h(for)0
-3450 y(most)i(of)f(the)h(problems)e(y)m(ou)i(will)g(meet)g(and)e(allo)m
-(ws)j(y)m(ou)f(to)g(write)f(robust)g(and)f(\015exible)i(soft)m(w)m
-(are.)51 b(It)33 b(is)0 3563 y(able)e(to)g(read)f(and)g(write)h(W)m(CS)
-f(information)h(in)f(a)h(v)-5 b(ariet)m(y)31 b(of)g(formats,)g
-(including)f(FITS-W)m(CS.)0 3848 y Fw(1.1)112 b(What)38
-b(Problems)g(Do)s(es)f(AST)h(T)-9 b(ac)m(kle?)0 4064
-y FG(Here)43 b(are)h(some)f(of)g(the)g(main)g(problems)f(y)m(ou)h(ma)m
-(y)h(face)g(when)e(handling)g(w)m(orld)h(co)s(ordinate)g(system)0
-4177 y(\(W)m(CS\))31 b(information)g(and)f(the)g(solutions)h(that)g
-(AST)f(pro)m(vides:)0 4416 y FE(1.)47 b(The)34 b(V)-9
-b(ariet)m(y)35 b(of)g(Co)s(ordinate)g(Systems)227 4529
-y FG(Astronomers)29 b(use)g(a)g(wide)g(range)g(of)g(di\013ering)g(co)s
-(ordinate)h(systems)f(to)h(describ)s(e)e(p)s(ositions)h(within)227
-4642 y(a)24 b(v)-5 b(ariet)m(y)25 b(of)e(ph)m(ysical)h(domains.)39
-b(F)-8 b(or)24 b(instance,)h(there)f(are)g(a)g(large)g(n)m(um)m(b)s(er)
-e(of)i(celestial)i(co)s(ordinate)227 4755 y(systems)35
-b(in)g(use)f(within)h(astronom)m(y)h(to)f(describ)s(e)f(p)s(ositions)h
-(on)g(the)g(sky)-8 b(.)55 b(Understanding)34 b(these,)227
-4868 y(and)24 b(kno)m(wing)h(ho)m(w)f(to)h(con)m(v)m(ert)h(co)s
-(ordinates)f(b)s(et)m(w)m(een)g(them,)h(can)f(require)f(considerable)h
-(exp)s(ertise.)227 4981 y(It)34 b(can)g(also)g(b)s(e)f(di\016cult)h(to)
-g(decide)g(whic)m(h)f(of)h(them)f(y)m(our)h(soft)m(w)m(are)h(should)e
-(supp)s(ort.)48 b(The)33 b(same)227 5094 y(applies)25
-b(to)h(co)s(ordinate)g(systems)f(describing)f(other)h(domains,)h(suc)m
-(h)f(as)g(p)s(osition)g(within)g(an)f(electro-)227 5207
-y(magnetic)32 b(sp)s(ectrum.)227 5354 y FE(Solution.)69
-b FG(AST)39 b(has)h(built-in)f(kno)m(wledge)i(of)f(man)m(y)f(co)s
-(ordinate)i(systems)f(and)f(allo)m(ws)i(y)m(ou)f(to)227
-5467 y(con)m(v)m(ert)30 b(freely)e(b)s(et)m(w)m(een)h(them)f(without)g
-(sp)s(ecialist)h(kno)m(wledge.)41 b(This)28 b(a)m(v)m(oids)h(the)f
-(need)g(to)h(em)m(b)s(ed)227 5580 y(details)43 b(of)e(sp)s(eci\014c)g
-(co)s(ordinate)h(systems)f(in)g(y)m(our)g(soft)m(w)m(are.)75
-b(Y)-8 b(ou)42 b(also)g(b)s(ene\014t)f(automatically)227
-5693 y(when)30 b(new)g(co)s(ordinate)h(systems)f(are)h(added)f(to)h
-(AST.)p eop end
-%%Page: 2 12
-TeXDict begin 2 11 bop 0 52 a FG(2)2856 b Fz(1)91 b(INTR)m(ODUCTION)0
-351 y FE(2.)47 b(Storing)35 b(and)g(Retrieving)g(W)m(CS)g(Information)
-227 464 y FG(Storing)44 b(co)s(ordinate)h(system)f(information)g(in)f
-(astronomical)j(datasets)f(and)e(retrieving)h(it)g(later)227
-577 y(can)35 b(presen)m(t)g(a)g(considerable)g(c)m(hallenge.)56
-b(T)m(ypically)-8 b(,)37 b(it)f(requires)e(kno)m(wledge)h(of)g(rather)g
-(complex)227 690 y(con)m(v)m(en)m(tions)f(\()p Fx(e.g.)d
-FG(FITS\))g(whic)m(h)h(are)g(lo)m(w-lev)m(el,)j(often)d(mis-in)m
-(terpreted)g(and)f(ma)m(y)h(b)s(e)f(sub)5 b(ject)32 b(to)227
-803 y(c)m(hange.)66 b(Exc)m(hanging)39 b(information)g(with)f(other)g
-(soft)m(w)m(are)i(systems)e(is)h(further)e(complicated)j(b)m(y)227
-916 y(the)31 b(n)m(um)m(b)s(er)e(of)h(di\013eren)m(t)h(con)m(v)m(en)m
-(tions)i(in)d(use.)227 1085 y FE(Solution.)48 b FG(AST)32
-b(com)m(bines)h(a)f(unifying)g(high-lev)m(el)i(description)f(of)g(W)m
-(CS)f(information)h(with)f(the)227 1198 y(abilit)m(y)k(to)f(sa)m(v)m(e)
-i(and)c(restore)j(this)e(using)g(a)h(v)-5 b(ariet)m(y)36
-b(of)f(formats.)53 b(Details)36 b(of)f(the)g(formats,)h(whic)m(h)227
-1310 y(include)29 b(FITS,)f(are)h(handled)e(in)m(ternally)j(b)m(y)e
-(AST.)g(This)g(frees)h(y)m(ou)g(from)f(the)h(need)f(to)h(understand)227
-1423 y(them)k(or)g(em)m(b)s(ed)g(the)g(details)h(in)f(y)m(our)g(soft)m
-(w)m(are.)50 b(Again,)35 b(y)m(ou)e(b)s(ene\014t)f(automatically)k
-(when)c(new)227 1536 y(formats)f(are)g(added)e(to)i(AST.)0
-1761 y FE(3.)47 b(Generating)35 b(Graphical)g(Output)227
-1874 y FG(Pro)s(ducing)40 b(graphical)h(displa)m(ys)g(in)m(v)m(olving)h
-(curvilinear)e(co)s(ordinate)i(systems,)h(suc)m(h)d(as)h(celestial)227
-1987 y(co)s(ordinate)i(grids,)j(can)c(b)s(e)g(complicated.)78
-b(P)m(articular)44 b(di\016culties)f(arise)f(when)g(handling)f(large)
-227 2100 y(areas)35 b(of)e(sky)-8 b(,)35 b(the)f(p)s(olar)f(regions)h
-(and)f(discon)m(tin)m(uous)h(\()p Fx(e.g.)f FG(segmen)m(ted\))i(sky)e
-(pro)5 b(jections.)51 b(Ev)m(en)227 2213 y(just)30 b(n)m(um)m(b)s
-(ering)f(and)h(lab)s(elling)h(curvilinear)g(axes)g(is)f(rarely)h
-(straigh)m(tforw)m(ard.)227 2382 y FE(Solution.)73 b
-FG(AST)40 b(pro)m(vides)h(plotting)h(facilities)h(esp)s(ecially)f
-(designed)f(for)g(use)g(with)f(curvilinear)227 2495 y(co)s(ordinate)35
-b(systems.)49 b(These)33 b(include)h(the)f(plotting)i(of)e(axes)h(and)f
-(complete)i(lab)s(elled)f(co)s(ordinate)227 2607 y(grids.)65
-b(A)39 b(large)h(n)m(um)m(b)s(er)d(of)i(options)g(are)g(pro)m(vided)f
-(for)h(tailoring)h(the)e(output)h(to)g(y)m(our)g(sp)s(eci\014c)227
-2720 y(needs.)0 2945 y FE(4.)47 b(Aligning)35 b(Data)g(from)g
-(Di\013eren)m(t)g(Sources)227 3058 y FG(One)h(of)g(the)h(main)f(uses)f
-(of)i(co)s(ordinate)g(systems)f(is)g(to)h(facilitate)i(the)d(in)m
-(ter-comparison)h(of)g(data)227 3171 y(from)29 b(di\013eren)m(t)g
-(sources.)40 b(A)29 b(t)m(ypical)h(use)f(migh)m(t)g(b)s(e)g(to)g(plot)g
-(\(sa)m(y\))i(radio)e(con)m(tours)g(o)m(v)m(er)h(an)f(optical)227
-3284 y(image.)61 b(In)37 b(practice,)j(ho)m(w)m(ev)m(er,)g(di\013eren)m
-(t)d(celestial)i(co)s(ordinate)f(systems)f(ma)m(y)g(ha)m(v)m(e)h(b)s
-(een)e(used,)227 3397 y(making)31 b(accurate)h(alignmen)m(t)g(far)e
-(from)g(simple.)227 3566 y FE(Solution)h FG(AST)f(pro)m(vides)h(a)g
-(one-step)g(metho)s(d)g(of)f(aligning)i(datasets,)g(searc)m(hing)g(for)
-e(all)i(p)s(ossible)227 3679 y(in)m(termediate)39 b(co)s(ordinate)g
-(systems.)62 b(This)37 b(mak)m(es)h(it)g(simple)g(to)g(directly)h(in)m
-(ter-relate)g(the)f(pixel)227 3792 y(co)s(ordinates)31
-b(of)g(di\013eren)m(t)g(datasets.)0 4016 y FE(5.)47 b(Handling)35
-b(Di\013eren)m(t)g(T)m(yp)s(es)g(of)g(Co)s(ordinate)f(System)227
-4129 y FG(Not)44 b(all)g(co)s(ordinate)g(systems)e(used)h(in)f
-(astronom)m(y)i(are)f(celestial)j(ones,)g(so)d(if)g(y)m(ou)g(are)g
-(writing)227 4242 y(general-purp)s(ose)35 b(soft)m(w)m(are)h(suc)m(h)f
-(as)g(\(sa)m(y\))h(a)g(displa)m(y)f(to)s(ol,)i(y)m(ou)f(ma)m(y)f(also)h
-(need)f(to)g(handle)g(axes)227 4355 y(represen)m(ting)43
-b(w)m(a)m(v)m(elength,)48 b(distance,)e(time)d(or)f(whatev)m(er)h(else)
-h(comes)f(along.)77 b(Ob)m(viously)-8 b(,)46 b(y)m(ou)227
-4468 y(w)m(ould)30 b(prefer)g(not)h(to)g(handle)f(eac)m(h)h(one)g(as)g
-(a)f(sp)s(ecial)h(case.)227 4637 y FE(Solution)h FG(AST)f(uses)g(the)g
-(same)h(\015exible)f(high-lev)m(el)j(mo)s(del)d(to)h(describ)s(e)e(all)
-j(t)m(yp)s(es)e(of)h(co)s(ordinate)227 4750 y(system.)48
-b(This)32 b(allo)m(ws)i(y)m(ou)f(to)g(write)g(soft)m(w)m(are)h(that)g
-(handles)e(di\013eren)m(t)h(kinds)f(of)g(co)s(ordinate)i(axis)227
-4863 y(without)d(in)m(tro)s(ducing)f(sp)s(ecial)h(cases.)0
-5218 y Fw(1.2)112 b(Other)38 b(Design)g(Ob)6 b(jectiv)m(es)0
-5467 y FG(As)43 b(w)m(ell)i(as)f(its)f(scien)m(ti\014c)i(ob)5
-b(jectiv)m(es,)49 b(the)44 b(AST)e(library's)i(design)f(includes)g(a)h
-(n)m(um)m(b)s(er)e(of)i(tec)m(hnical)0 5580 y(criteria)c(in)m(tended)e
-(to)h(mak)m(e)g(it)g(applicable)h(to)f(as)g(wide)f(a)h(range)f(of)h
-(pro)5 b(jects)39 b(as)f(p)s(ossible.)65 b(The)38 b(main)0
-5693 y(considerations)31 b(are)g(describ)s(ed)e(here:)p
-eop end
-%%Page: 3 13
-TeXDict begin 3 12 bop 0 52 a Fz(1.2)92 b(Other)30 b(Design)h(Ob)5
-b(jectiv)m(es)2551 b FG(3)111 351 y(1.)46 b FE(Minim)m(um)36
-b(Soft)m(w)m(are)e(Dep)s(endencies.)41 b FG(The)30 b(AST)f(library)h
-(dep)s(ends)f(on)h(no)g(other)g(other)h(soft-)227 464
-y(w)m(are)411 431 y Fv(1)451 464 y FG(.)111 680 y(2.)46
-b FE(En)m(vironmen)m(t)d(Indep)s(endence.)61 b FG(AST)37
-b(is)g(designed)g(so)g(that)h(it)g(can)f(op)s(erate)h(in)f(a)h(v)-5
-b(ariet)m(y)38 b(of)227 793 y(\\programming)31 b(en)m(vironmen)m(ts")g
-(and)f(is)g(not)h(tied)g(to)g(an)m(y)g(particular)g(one.)41
-b(T)-8 b(o)31 b(allo)m(w)g(this,)g(it)g(uses)227 906
-y(simple,)g(\015exible)f(in)m(terfaces)i(to)f(obtain)g(the)g(follo)m
-(wing)h(services:)336 1154 y Fu(\017)46 b FE(Data)37
-b(Storage.)45 b FG(Data)34 b(I/O)e(op)s(erations)h(are)f(based)g(on)g
-(text)h(and/or)f(FITS)g(headers.)45 b(This)427 1267 y(mak)m(es)24
-b(it)g(easy)g(to)g(in)m(terface)h(to)e(a)h(wide)f(v)-5
-b(ariet)m(y)25 b(of)e(astronomical)i(data)f(formats)f(in)g(a)g(mac)m
-(hine-)427 1380 y(indep)s(enden)m(t)29 b(w)m(a)m(y)-8
-b(.)336 1541 y Fu(\017)46 b FE(Graphics.)74 b FG(Graphical)42
-b(output)f(is)g(pro)s(duced)f Fx(via)h FG(a)h(simple)f(generic)h
-(graphics)g(in)m(terface,)427 1653 y(whic)m(h)48 b(ma)m(y)h(easily)h(b)
-s(e)d(re-implemen)m(ted)i(o)m(v)m(er)h(di\013eren)m(t)f(graphics)f
-(systems.)94 b(AST)48 b(pro-)427 1766 y(vides)32 b(a)g(default)g
-(implemen)m(tation)h(based)f(on)f(the)h(widely-used)g(PGPLOT)f
-(graphics)g(system)427 1879 y(\(SUN/15\).)336 2040 y
-Fu(\017)46 b FE(Error)39 b(Handling.)52 b FG(Error)33
-b(messages)i(are)f(written)h(to)f(standard)f(error)h(b)m(y)g(default,)h
-(but)f(go)427 2153 y(through)k(a)i(simple)e(generic)i(in)m(terface)h
-(similar)e(to)g(that)h(used)e(for)g(graphics)h(\(ab)s(o)m(v)m(e\).)68
-b(This)427 2265 y(p)s(ermits)33 b(error)h(message)h(deliv)m(ery)f
-Fx(via)g FG(other)g(routes)g(when)f(necessary)h(\()p
-Fx(e.g.)51 b FG(in)33 b(a)i(graphical)427 2378 y(in)m(terface\).)111
-2627 y(3.)46 b FE(Multiple)33 b(Language)f(Supp)s(ort.)40
-b FG(AST)28 b(has)g(b)s(een)g(designed)g(to)h(b)s(e)e(called)j(from)e
-(more)g(than)g(one)227 2739 y(language.)61 b(Both)37
-b(F)-8 b(ortran)37 b(and)f(C)g(in)m(terfaces)i(are)f(a)m(v)-5
-b(ailable)39 b(\(see)e(SUN/211)i(for)d(the)h(C)f(v)m(ersion\))227
-2852 y(and)30 b(use)g(from)g(C++)f(is)i(also)g(straigh)m(tforw)m(ard)g
-(if)g(the)f(C)g(in)m(terface)i(is)e(included)g(using:)427
-3087 y Ft(extern)41 b("C")i({)427 3187 y(#include)e("ast.h")427
-3286 y(})227 3535 y FG(A)d(JNI)g(in)m(terface)i(\(kno)m(wn)e(as)g
-(\\JNIAST")g(-)g(see)h(h)m(ttp://www.starlink.ac.uk/jniast/\))i(has)d
-(also)227 3648 y(b)s(een)30 b(dev)m(elop)s(ed)h(b)m(y)f(Starlink)g
-(whic)m(h)g(allo)m(ws)i(AST)e(to)h(b)s(e)e(used)h(from)g(Ja)m(v)-5
-b(a.)111 3864 y(4.)46 b FE(Ob)6 b(ject)44 b(Orien)m(ted)g(Design.)66
-b FG(AST)38 b(uses)g(\\ob)5 b(ject)40 b(orien)m(ted")g(tec)m(hniques)f
-(in)m(ternally)h(in)e(order)227 3977 y(to)h(pro)m(vide)f(a)g
-(\015exible)h(and)e(easily-extended)i(programming)f(mo)s(del.)63
-b(A)38 b(fairly)h(traditional)g(call-)227 4090 y(ing)f(in)m(terface)h
-(is)e(pro)m(vided,)i(ho)m(w)m(ev)m(er,)i(so)d(that)g(the)f(library's)h
-(facilities)h(are)f(easily)h(accessible)g(to)227 4202
-y(programmers)30 b(using)g(F)-8 b(ortran)31 b(and)f(C.)111
-4419 y(5.)46 b FE(P)m(ortabilit)m(y)-9 b(.)52 b FG(AST)33
-b(is)h(implemen)m(ted)h(en)m(tirely)g(in)e(ANSI)h(standard)f(C)h(and,)g
-(when)f(called)i Fx(via)f FG(its)227 4531 y(C)c(in)m(terface,)i(mak)m
-(es)g(no)e(explicit)i(use)e(of)g(an)m(y)h(mac)m(hine-dep)s(enden)m(t)f
-(facilities.)227 4696 y(The)42 b(F)-8 b(ortran)43 b(in)m(terface)g(is,)
-j(una)m(v)m(oidably)-8 b(,)46 b(mac)m(hine)d(dep)s(enden)m(t.)75
-b(Ho)m(w)m(ev)m(er,)48 b(the)42 b(p)s(oten)m(tial)i(for)227
-4809 y(problems)34 b(has)f(b)s(een)h(minimised)f(b)m(y)h(encapsulating)
-h(the)f(in)m(terface)i(la)m(y)m(er)g(in)d(a)i(compact)g(set)g(of)f(C)
-227 4922 y(macros)f(whic)m(h)g(facilitate)i(its)e(transfer)f(to)i
-(other)f(platforms.)47 b(No)33 b(F)-8 b(ortran)34 b(compiler)f(is)f
-(needed)h(to)227 5035 y(build)d(the)g(library)-8 b(.)227
-5199 y(Curren)m(tly)g(,)33 b(AST)f(is)h(supp)s(orted)d(b)m(y)j
-(Starlink)f(on)h(PC)f(Lin)m(ux,)g(Sun)f(Solaris)i(and)f(T)-8
-b(ru64)33 b(Unix)f(\(for-)227 5312 y(merly)f(DEC)f(UNIX\))h(platforms.)
-p 0 5425 1512 4 v 104 5479 a Fs(1)138 5510 y Fr(It)26
-b(no)n(w)g(comes)h(with)f(a)h(minimal)g(cut-do)n(wn)e(v)n(ersion)h(of)h
-(the)f(widely-a)n(v)l(ailable)h(SLALIB)e(p)r(ositional)j(astronom)n(y)e
-(library)0 5602 y(\(SUN/67\),)h(including)f(just)h(those)g(functions)g
-(needed)e(b)n(y)h(AST,)g(and)g(the)g(previous)h(dep)r(endency)e(on)h
-(SLALIB)g(is)h(no)g(longer)0 5693 y(presen)n(t)p eop
-end
-%%Page: 4 14
-TeXDict begin 4 13 bop 0 52 a FG(4)2856 b Fz(1)91 b(INTR)m(ODUCTION)0
-351 y Fw(1.3)112 b(What)38 b(Do)s(es)g(\\AST")f(Stand)h(F)-9
-b(or?)0 573 y FG(The)20 b(library)h(name)g(\\AST")g(stands)f(for)h
-(\\AST)-8 b(rometry)21 b(Library".)37 b(The)20 b(name)h(arose)h(when)d
-(it)j(w)m(as)f(though)m(t)0 686 y(that)36 b(kno)m(wledge)g(of)f
-(\\astrometry")h(\()p Fx(i.e.)f FG(celestial)j(co)s(ordinate)d
-(systems\))h(w)m(ould)e(form)h(the)g(bulk)f(of)h(the)0
-799 y(library)-8 b(.)40 b(In)27 b(fact,)i(it)f(turns)e(out)i(that)g
-(astrometry)h(forms)e(only)g(a)h(minor)f(comp)s(onen)m(t,)i(but)e(the)h
-(name)f(AST)0 911 y(has)j(stuc)m(k.)p eop end
-%%Page: 5 15
-TeXDict begin 5 14 bop 3734 52 a FG(5)0 351 y FA(2)135
-b(Ov)l(erview)46 b(of)f(AST)f(Concepts)0 605 y FG(This)37
-b(section)i(presen)m(ts)f(a)g(brief)f(o)m(v)m(erview)i(of)f(AST)f
-(concepts.)64 b(It)38 b(is)g(in)m(tended)f(as)h(a)g(basic)g(orien)m
-(tation)0 718 y(course)31 b(b)s(efore)f(y)m(ou)g(mo)m(v)m(e)i(on)e(to)h
-(the)g(more)g(tec)m(hnical)h(considerations)f(in)f(subsequen)m(t)g
-(sections.)0 1015 y Fw(2.1)112 b(Relationships)39 b(Bet)m(w)m(een)e(Co)
-s(ordinate)h(Systems)0 1237 y FG(The)33 b(relationships)h(b)s(et)m(w)m
-(een)g(co)s(ordinate)h(systems)f(are)g(represen)m(ted)f(in)h(AST)f(b)m
-(y)g(Ob)5 b(jects)34 b(called)h(Map-)0 1350 y(pings.)j(A)24
-b(Mapping)f(do)s(es)h(not)g(represen)m(t)f(a)i(co)s(ordinate)f(system)g
-(itself,)i(but)d(merely)h(the)g(pro)s(cess)f(b)m(y)h(whic)m(h)0
-1463 y(y)m(ou)31 b(mo)m(v)m(e)h(from)d(one)i(co)s(ordinate)g(system)g
-(to)g(another)g(related)g(one.)0 1627 y(A)43 b(con)m(v)m(enien)m(t)h
-(picture)f(of)f(a)h(Mapping)g(is)f(as)h(a)g(\\blac)m(k)h(b)s(o)m(x")f
-(\(Figure)g(1\))g(in)m(to)h(whic)m(h)e(y)m(ou)h(can)f(feed)0
-1740 y(sets)f(of)g(co)s(ordinates.)144 b(F)-8 b(or)42
-b(eac)m(h)g(set)f(y)m(ou)g(feed)g(in,)i(the)e(Mapping)g(returns)e(a)i
-(corresp)s(onding)f(set)h(of)744 2867 y @beginspecial
-118 @llx 85 @lly 511 @urx 258 @ury 2751 @rwi @setspecial
-%%BeginDocument: sun210_figures/mapping.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 118 85 511 258
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/05 15:19:04
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-3923.75 2106.95 m
-3923.75 2181.35 3863.75 2242.55 3788.15 2242.55 c
-2378.15 2242.55 l
-2303.75 2242.55 2242.55 2181.35 2242.55 2106.95 c
-2242.55 1296.95 l
-2242.55 1222.55 2303.75 1161.35 2378.15 1161.35 c
-3788.15 1161.35 l
-3863.75 1161.35 3923.75 1222.55 3923.75 1296.95 c
-f*
-1 g
-3858.95 2163.35 m
-3858.95 2236.55 3798.95 2296.55 3725.75 2296.55 c
-2322.95 2296.55 l
-2248.55 2296.55 2188.55 2236.55 2188.55 2163.35 c
-2188.55 1359.35 l
-2188.55 1286.15 2248.55 1226.15 2321.75 1226.15 c
-3725.75 1226.15 l
-3798.95 1226.15 3858.95 1286.15 3858.95 1359.35 c
-f*
-8 w
-1 J
-1 j
-0 g
-3858.95 2163.35 m
-3858.95 2236.55 3798.95 2296.55 3725.75 2296.55 c
-2322.95 2296.55 l
-2248.55 2296.55 2188.55 2236.55 2188.55 2163.35 c
-2188.55 1359.35 l
-2188.55 1286.15 2248.55 1226.15 2321.75 1226.15 c
-3725.75 1226.15 l
-3798.95 1226.15 3858.95 1286.15 3858.95 1359.35 c
-h
-S
-3863.75 2052.95 318 15.5999 re
-Y
-3861.35 2061.35 m
-4174.55 2061.35 l
-S
-0 0 6120 7920 re
-Y
-3902.15 2061.35 m
-3902.15 2084.15 3884.15 2102.15 3862.55 2102.15 c
-3840.95 2102.15 3822.95 2084.15 3822.95 2061.35 c
-3822.95 2039.75 3840.95 2021.75 3862.55 2021.75 c
-3884.15 2021.75 3902.15 2039.75 3902.15 2061.35 c
-f*
-4133.75 2013.35 m
-4151.75 2061.35 l
-4133.75 2108.15 l
-4286.15 2061.35 l
-f*
-3863.75 1752.95 315.6 15.5999 re
-Y
-3861.35 1761.35 m
-4172.15 1761.35 l
-S
-0 0 6120 7920 re
-Y
-3902.15 1761.35 m
-3902.15 1784.15 3884.15 1802.15 3862.55 1802.15 c
-3840.95 1802.15 3822.95 1784.15 3822.95 1761.35 c
-3822.95 1739.75 3840.95 1721.75 3862.55 1721.75 c
-3884.15 1721.75 3902.15 1739.75 3902.15 1761.35 c
-f*
-4131.35 1713.35 m
-4149.35 1761.35 l
-4131.35 1808.15 l
-4283.75 1761.35 l
-f*
-3863.75 1452.95 318 15.5999 re
-Y
-3861.35 1461.35 m
-4174.55 1461.35 l
-S
-0 0 6120 7920 re
-Y
-3902.15 1461.35 m
-3902.15 1484.15 3884.15 1502.15 3862.55 1502.15 c
-3840.95 1502.15 3822.95 1484.15 3822.95 1461.35 c
-3822.95 1439.75 3840.95 1421.75 3862.55 1421.75 c
-3884.15 1421.75 3902.15 1439.75 3902.15 1461.35 c
-f*
-4133.75 1413.35 m
-4151.75 1461.35 l
-4133.75 1508.15 l
-4286.15 1461.35 l
-f*
-1763.75 2052.95 318 15.5999 re
-Y
-1761.35 2061.35 m
-2074.55 2061.35 l
-S
-0 0 6120 7920 re
-Y
-1802.15 2061.35 m
-1802.15 2084.15 1784.15 2102.15 1762.55 2102.15 c
-1740.95 2102.15 1722.95 2084.15 1722.95 2061.35 c
-1722.95 2039.75 1740.95 2021.75 1762.55 2021.75 c
-1784.15 2021.75 1802.15 2039.75 1802.15 2061.35 c
-f*
-2033.75 2013.35 m
-2051.75 2061.35 l
-2033.75 2108.15 l
-2186.15 2061.35 l
-f*
-1763.75 1452.95 318 15.5999 re
-Y
-1761.35 1461.35 m
-2074.55 1461.35 l
-S
-0 0 6120 7920 re
-Y
-1802.15 1461.35 m
-1802.15 1484.15 1784.15 1502.15 1762.55 1502.15 c
-1740.95 1502.15 1722.95 1484.15 1722.95 1461.35 c
-1722.95 1439.75 1740.95 1421.75 1762.55 1421.75 c
-1784.15 1421.75 1802.15 1439.75 1802.15 1461.35 c
-f*
-2033.75 1413.35 m
-2051.75 1461.35 l
-2033.75 1508.15 l
-2186.15 1461.35 l
-f*
-q[1 0 0 1 0 0]concat
-44 93 true[1 0 0 1 -1379 -1821]@85 imagemask
-+92B at s6q-1s8W,g
-+92B at s6p"Qs8Vus!!iQ(^]4?:s8RTL!!3-"!!!!"s8Duu!!3-!zs8Duu!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!3-!!!!!"s8Duu!!E9$!!!!$s8RTL!"],0^]4B7s8Vus+92B at s6q-1s8W,g+92B at s6p~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -1425 -1821]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-66 94 true[1 0 0 1 -1495 -1791]@85 imagemask
-J,fQKhuE`W!.Y%K
-s53kW!!!Q0s8V!W!!!!"s8VQgz!<<(Lz!!%NKz!!!"KrVuouz5Q1W_z!'gA]
-z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]"979Z!!!!`r"&i*
-z5Q!bGrr<$!!'gC2s8Tk7!!#7^rr>:Q!!!!`s7cR)p](9o5QBXA#Q+Q%!'gM!!!E3#!!#7`J,fWM
-!!!!`rr<$!s*t(L5Q1W_!.Vca!'gA]!!#7A!!#7]!!!!`huEaAqu?]s+7K715PtK]!$Ct9!'gA]!!!Q)!!#7]!!!!0
-qu?^]qu?]s&,ZD-5PtK]!!iK'!'gA]!!!9'!!#7]!!!!(rVup_qu?]s#QFc(5PtK]!!iN(!'gA]!!!-$
-!!#7]!!!!$s*t)6qu?]s"93lO5PtK]!!E7O!'gA]!!!-$J,hh3!!!!$s*t)6qu?]s"96.:5PtK]!!E8:
-!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s"96.:5PtK]!!E8:!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s#QMR>5PtK]!!iP>
-!'gA]!!!9(^]6Us!!!!(s1eV!qu?]s#QMR>5PtK]!"]*[!'gA]!!!Q0J,hh3!!!!0s*t)6qu?]s+9-ik
-5PtK]!$D5k!'gA]!!",@!!#7]!!!!`rr<$`qu?]sJ,]KK5Q1W_!.XtJ!'gJ`!!*&u!!#7`J,fWMqu?^]
-s1eU:s82isJ,eF,#QOQ!!<<#m!"],!!.Y%Hrr at QKn,Rt<r."bHs53lAs85+]s8Tk7#QO]Ds8W+L!!*&s&-)\0!!!!@qud!!rVuou"8i3"s7cQo!!%BHJ,eF,!!!!=!"]*[!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 64 true[1 0 0 1 -1565 -1820]@85 imagemask
-!!!9(J-!Fc!!!!@
-s53qIzJ,f9ErVuou!<<)u!WTq8!!3-"rrN/t!!!-$s8RZMs*t(Ss8W,8s8V!W&-)\0iW&r9!"],!
-#P%il!!!Q0^]F92n,NG1s*t)ts53kW+9)<@+917!!$D4@!"]+F!!#7_!!!9(^]4@!rVup's1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!
-s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$
-^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!
-qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!%NH
-!!!-$^]4 at aqu?^%s1eU7s82is#QMR>!WW&t!"]+F!!iQ%!!%NK^]8laqu at 9-s1eVas82j-s8Tk7~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -1635 -1820]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-88 97 true[1 0 0 1 -1189 -1651]@85 imagemask
-z!$D6Vz
-!!!!$s8W&uz!!#7`s8V!Wz!WW3"s7cQo!!!!(s8W-!rr<$!!!", at s8W-!^]4?7!.Y%KJ-Z,D
-zs8VQg!'g5Y!!!-$s1eU7#Q=]'!!iQ'!!!!"rr<$!&-)D)!!!"K^]4@!s6p!g!!",!!!%NK^]4?7
-!"\Q!!<<(Lz"8Diss8N'!!!!!"qu?ctrVuou!!!"J!!E9!z!!#4`#QOQ!z!$;1Os6p!gz%fd.?
-n,NFg!!!!'!$D7!zz5QAM!z!!!!`s1eU7z!!%NKJ,fQLz!.Y$!zz
-s8N'!z!!!$!rr<$!z!!*'!zz!WW-!z!!!!"s8Duuz!!!'"rVuouz
-!!E9!zz"989!z!!!!$s82isz!!!9(qu?]sz!!iQ!zz#QOQ!z!!!!(s7cQo
-z!!!9(p](9oz!!iQ!zz&-)D)z!!!!0s6p!gz!!!Q0n,NFgz!"],!
-zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0
-s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!z
-z#QO8nz!!!!(s6p!gz!!!9(p](9oz!!iQ!zz#QOQ!z!!!!$s7cQo
-z!!!-$p](9oz!!E9!zz"989!z!!!!"s82isz!$21 at qu?]sz*Wc<?
-z!!!!?!<<#uz!!#1_s8Duuz!'UC4rr<$!z4og*4z!!!"J!'gL6z!!%HJ5Q?66z
-!.4bgs*t(Lzqu at i=^]4?7!!!#s!"]+fz!!2ut#QN]^z"8i-$s6p!g!!!!$qu?j!p](9o
-!!!9%!!3,pz!"\u-!<;rsz+8c*=J,TEJ!!!!`qu?^]rr<$!!!%NH!!", at J,fQL!<;rs!"]+F
-!!!!"s82is#QO8n!!!-$qu?]ts7cQo!!iQ%!!!$!rVuou+926=!!#7`J,fS!s82is!$D71!!E9$qu?]s
-#QOf(+92B=!!!!"s8W-!s5X"W!!!"Ks8W,u!;lfs!!!Q0s8V!WHiO-H!!3-"rVup\z!"]+F!!#+~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -1283 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -1352 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -1422 -1653]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-69 97 true[1 0 0 1 -1469 -1652]@85 imagemask
-!!!'"n,_GI!!!!0
-s8E&sz5QCb7rr<$!!<<*!_>iEn!!3-"s5F"U!!!9(s8VWhs*t([s8W,ps8VQg+926=rVuom!$D7!
-!'gM`p]*PY^]4oFqu?_Hs*t(Ss6p!gJ,]KK"97ij!<<#u!!E8Z!!3,t!!!'"huEfXp](9ps53kXs6p!g
-!WV'X"97ij!!3,X!!E8Z!!!'"huElZhuE`Xs53k^s53kW!WV'X#QMR>!!3,X!!iP>!!!'"huF#^^]4?8s53kfs*t(L
-!WV'X&-%.[!!3,X!"]*[!!!'"huF;fJ,fQMs53kfs*t(L!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"
-s53kfrr<$!!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"s53kfrr<$!!WV'X#QFc(!!3,X!!iN(!!!'"
-huF#^!!!!"s53k^rr<$!!WV'X#QFc(!!3,X!!E6$!!!'"huElZJ,fQMs53kZs*t(L!WV'X!WRZM!!3,X!!3+M!!!'"
-huEfXJ,fQMs53kWs1eU7!WV'X!<9h7!!3,X!!%Ma!!!'"huEb,huE`Xs53kW5MuMA"979Z!$C\1!!E8Z
-!!",1!!!-$huE`fp](:!s53kW#Q+Q%&-(Pf!!E-!!"]+f!!!'!!!", at huE`Ws*t)6s53kW!.Vcas8V!W
-!!#7Q"9&8X!!!!0s8VWhhuE`W#QOh_s53kW!!3-"JcFX.!!!!`rW3&Wz!!!'"huE`W!!!!"s53kWz!WV'X
-z!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kW
-z!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W
-!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!$s53kWz#QN]^z"98DZz!!E9$huE`W
-!!!-$s53kWz5QBXAz!!E8Zz!!!"KhuE`Wz&)[Efz!!2!Xz!!!!A!!~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -1538 -1653]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -1578 -1653]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -1647 -1652]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -1710 -1652]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -1748 -1652]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -1811 -1652]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-96 97 true[1 0 0 1 -4574 -1819]@85 imagemask
-z!"]*[z
-z"98E#zz+92B@^]4?7zs8W-!p](9o!!!!$s8W-!rVuou!!!!0s82lss*t(L!!!!`
-s1eUVs53kW!!!"KrVup#s6p!g!!!'"p](9os82is!!!-$n,NFgJ,TEJ!!!9(^]4?7+9)<@!!!Q0J,fQL
-&-%.[!!", at z#QMR>!!#7_z"979Z!!%NHz!WVWh!!*&oz!WVop!!3,pz!<;rs!!E8jz
-!.XtJ!!E8jz!.XtJ!!iP^z!'gJ`!"]+Fz!'gL6!"]+Fz!$D5k!$D6Vz!$D6V
-!$D5kz!"]+F!'gL6z!"]+f!'gJ`z!!iP^!.Y"Kz!!iPn!.Y"Kz!!iPn!<<#u
-z!!E8r!<<#uz!!E8r!<<#uz!!E8r!WW-!z!!E9!!WW-!z!!3,t!WW&tz!!3,t!WW&t
-z!!3,t"989!z!!3-!"989!z!!3-!"989!z!!3-!"989!z!!3-!"98,rz
-!!*&u"98,rz!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!
-#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!
-#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!
-z!!*&u"989!z!!*&u"989!z!!3-!"989!z!!3-!"989!z!!3-!"989!z
-!!3-!!WW&tz!!3,t!WW&tz!!3,t!WW-!z!!E9!!WW-!z!!E9!!<<#uz!!E8r!<<#uz
-!!E8r!<<'!z!!iQ!!.Y"Kz!!iPn!.Y"Kz!!iPn!'gL6z!!iP^!'gL6z!"]+f
-!$D5kz!"]+F!$D6Vz!$D6V!"]+Fz!$D5k!"]+fz!'gL6!!iP^z!'gJ`!!E8j
-z!.XtJ!!3,hz!.XtJ!!3,pz!<;rs!!*&sz!WVop!!%NHz"97ij!!#7_z"979Z!!", at z#QMR>!!!Q0^]4?7+9-ik!!!9(huE`W
-5Q:]`!!!-$n,NFgJ,TEJ!!!$!qu?]ts7cQo!!!"Krr<$(s6p!g!!!!@s1eUVs1eU7!!!!0s82otrr<$!
-!!!!$s8W-!qu?]szJ,fQKn,NFgz+92B@^]4?7z!WW2tzz!"]*[z~>
-Q
-q[1 0 0 1 0 0]concat
-67 64 true[1 0 0 1 -4675 -1820]@85 imagemask
-!!!9(J-!Fc!!!!@
-s53qIzJ,f9ErVuou!<<)u!WTq8!!3-"rrN/t!!!-$s8RZMs*t(Ss8W,8s8V!W&-)\0iW&r9!"],!
-#P%il!!!Q0^]F92n,NG1s*t)ts53kW+9)<@+917!!$D4@!"]+F!!#7_!!!9(^]4@!rVup's1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!
-s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$
-^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!
-qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!%NH
-!!!-$^]4 at aqu?^%s1eU7s82is#QMR>!WW&t!"]+F!!iQ%!!%NK^]8laqu at 9-s1eVas82j-s8Tk7~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -4745 -1820]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-66 94 true[1 0 0 1 -4784 -1791]@85 imagemask
-J,fQKhuE`W!.Y%K
-s53kW!!!Q0s8V!W!!!!"s8VQgz!<<(Lz!!%NKz!!!"KrVuouz5Q1W_z!'gA]
-z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]"979Z!!!!`r"&i*
-z5Q!bGrr<$!!'gC2s8Tk7!!#7^rr>:Q!!!!`s7cR)p](9o5QBXA#Q+Q%!'gM!!!E3#!!#7`J,fWM
-!!!!`rr<$!s*t(L5Q1W_!.Vca!'gA]!!#7A!!#7]!!!!`huEaAqu?]s+7K715PtK]!$Ct9!'gA]!!!Q)!!#7]!!!!0
-qu?^]qu?]s&,ZD-5PtK]!!iK'!'gA]!!!9'!!#7]!!!!(rVup_qu?]s#QFc(5PtK]!!iN(!'gA]!!!-$
-!!#7]!!!!$s*t)6qu?]s"93lO5PtK]!!E7O!'gA]!!!-$J,hh3!!!!$s*t)6qu?]s"96.:5PtK]!!E8:
-!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s"96.:5PtK]!!E8:!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s#QMR>5PtK]!!iP>
-!'gA]!!!9(^]6Us!!!!(s1eV!qu?]s#QMR>5PtK]!"]*[!'gA]!!!Q0J,hh3!!!!0s*t)6qu?]s+9-ik
-5PtK]!$D5k!'gA]!!",@!!#7]!!!!`rr<$`qu?]sJ,]KK5Q1W_!.XtJ!'gJ`!!*&u!!#7`J,fWMqu?^]
-s1eU:s82isJ,eF,#QOQ!!<<#m!"],!!.Y%Hrr at QKn,Rt<r."bHs53lAs85+]s8Tk7#QO]Ds8W+L!!*&s&-)\0!!!!@qud!!rVuou"8i3"s7cQo!!%BHJ,eF,!!!!=!"]*[!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 64 true[1 0 0 1 -4854 -1820]@85 imagemask
-!!!9(J-!Fc!!!!@
-s53qIzJ,f9ErVuou!<<)u!WTq8!!3-"rrN/t!!!-$s8RZMs*t(Ss8W,8s8V!W&-)\0iW&r9!"],!
-#P%il!!!Q0^]F92n,NG1s*t)ts53kW+9)<@+917!!$D4@!"]+F!!#7_!!!9(^]4@!rVup's1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!
-s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$
-^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!
-qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!%NH
-!!!-$^]4 at aqu?^%s1eU7s82is#QMR>!WW&t!"]+F!!iQ%!!%NK^]8laqu at 9-s1eVas82j-s8Tk7~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -4923 -1820]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-88 97 true[1 0 0 1 -4430 -1651]@85 imagemask
-z!$D6Vz
-!!!!$s8W&uz!!#7`s8V!Wz!WW3"s7cQo!!!!(s8W-!rr<$!!!", at s8W-!^]4?7!.Y%KJ-Z,D
-zs8VQg!'g5Y!!!-$s1eU7#Q=]'!!iQ'!!!!"rr<$!&-)D)!!!"K^]4@!s6p!g!!",!!!%NK^]4?7
-!"\Q!!<<(Lz"8Diss8N'!!!!!"qu?ctrVuou!!!"J!!E9!z!!#4`#QOQ!z!$;1Os6p!gz%fd.?
-n,NFg!!!!'!$D7!zz5QAM!z!!!!`s1eU7z!!%NKJ,fQLz!.Y$!zz
-s8N'!z!!!$!rr<$!z!!*'!zz!WW-!z!!!!"s8Duuz!!!'"rVuouz
-!!E9!zz"989!z!!!!$s82isz!!!9(qu?]sz!!iQ!zz#QOQ!z!!!!(s7cQo
-z!!!9(p](9oz!!iQ!zz&-)D)z!!!!0s6p!gz!!!Q0n,NFgz!"],!
-zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0
-s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!z
-z#QO8nz!!!!(s6p!gz!!!9(p](9oz!!iQ!zz#QOQ!z!!!!$s7cQo
-z!!!-$p](9oz!!E9!zz"989!z!!!!"s82isz!$21 at qu?]sz*Wc<?
-z!!!!?!<<#uz!!#1_s8Duuz!'UC4rr<$!z4og*4z!!!"J!'gL6z!!%HJ5Q?66z
-!.4bgs*t(Lzqu at i=^]4?7!!!#s!"]+fz!!2ut#QN]^z"8i-$s6p!g!!!!$qu?j!p](9o
-!!!9%!!3,pz!"\u-!<;rsz+8c*=J,TEJ!!!!`qu?^]rr<$!!!%NH!!", at J,fQL!<;rs!"]+F
-!!!!"s82is#QO8n!!!-$qu?]ts7cQo!!iQ%!!!$!rVuou+926=!!#7`J,fS!s82is!$D71!!E9$qu?]s
-#QOf(+92B=!!!!"s8W-!s5X"W!!!"Ks8W,u!;lfs!!!Q0s8V!WHiO-H!!3-"rVup\z!"]+F!!#+~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -4524 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -4593 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -4664 -1653]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-69 97 true[1 0 0 1 -4710 -1652]@85 imagemask
-!!!'"n,_GI!!!!0
-s8E&sz5QCb7rr<$!!<<*!_>iEn!!3-"s5F"U!!!9(s8VWhs*t([s8W,ps8VQg+926=rVuom!$D7!
-!'gM`p]*PY^]4oFqu?_Hs*t(Ss6p!gJ,]KK"97ij!<<#u!!E8Z!!3,t!!!'"huEfXp](9ps53kXs6p!g
-!WV'X"97ij!!3,X!!E8Z!!!'"huElZhuE`Xs53k^s53kW!WV'X#QMR>!!3,X!!iP>!!!'"huF#^^]4?8s53kfs*t(L
-!WV'X&-%.[!!3,X!"]*[!!!'"huF;fJ,fQMs53kfs*t(L!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"
-s53kfrr<$!!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"s53kfrr<$!!WV'X#QFc(!!3,X!!iN(!!!'"
-huF#^!!!!"s53k^rr<$!!WV'X#QFc(!!3,X!!E6$!!!'"huElZJ,fQMs53kZs*t(L!WV'X!WRZM!!3,X!!3+M!!!'"
-huEfXJ,fQMs53kWs1eU7!WV'X!<9h7!!3,X!!%Ma!!!'"huEb,huE`Xs53kW5MuMA"979Z!$C\1!!E8Z
-!!",1!!!-$huE`fp](:!s53kW#Q+Q%&-(Pf!!E-!!"]+f!!!'!!!", at huE`Ws*t)6s53kW!.Vcas8V!W
-!!#7Q"9&8X!!!!0s8VWhhuE`W#QOh_s53kW!!3-"JcFX.!!!!`rW3&Wz!!!'"huE`W!!!!"s53kWz!WV'X
-z!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kW
-z!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W
-!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!$s53kWz#QN]^z"98DZz!!E9$huE`W
-!!!-$s53kWz5QBXAz!!E8Zz!!!"KhuE`Wz&)[Efz!!2!Xz!!!!A!!~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -4779 -1653]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -4819 -1653]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -4889 -1652]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -4951 -1652]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -4989 -1652]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -5052 -1652]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-0.201248 i
-2711.08 1704.82 m
-2702.03 1705.43 2700.01 1707.44 2692.97 1722.33 c
-2642.86 1836.42 l
-2638.83 1836.42 l
-2596.97 1737.83 l
-2584.09 1708.45 2581.68 1705.43 2572.02 1704.82 c
-2572.02 1701 l
-2611.87 1701 l
-2611.87 1704.8 l
-2602.21 1704.8 2598.18 1707.42 2598.18 1713.07 c
-2598.18 1715.49 2598.79 1718.31 2599.79 1720.92 c
-2609.05 1745 l
-2661.78 1745 l
-2670.03 1725.15 l
-2672.44 1719.51 2673.85 1714.48 2673.85 1711.46 c
-2673.85 1709.65 2672.64 1707.44 2671.03 1706.63 c
-2668.62 1705.23 2667.01 1704.8 2659.76 1704.8 c
-2659.76 1701 l
-2711.08 1701 l
-h
-2612.47 1753 m
-2635.61 1808.06 l
-2658.96 1753 l
-h
-2714.3 1701 m
-f*
-2763.31 1701 m
-f*
-2898 1816.32 m
-2898 1725.15 l
-2898 1708.45 2895.67 1705.83 2880.33 1704.82 c
-2880.33 1701 l
-2936.68 1701 l
-2936.68 1704.82 l
-2921.99 1705.83 2919 1708.65 2919 1722.94 c
-2919 1812.29 l
-2919 1826.58 2921.64 1829.2 2936.68 1830.4 c
-2936.68 1834 l
-2896.63 1834 l
-2852.15 1732.6 l
-2805.67 1834 l
-2765.82 1834 l
-2765.82 1830 l
-2782.32 1829.02 2785 1826.65 2785 1812.29 c
-2785 1730.58 l
-2785 1709.85 2782.17 1706.03 2765.42 1704.82 c
-2765.42 1701 l
-2812.71 1701 l
-2812.71 1705 l
-2797.21 1705.8 2794 1710.4 2794 1730.58 c
-2794 1811.69 l
-2844.31 1701 l
-2847.12 1701 l
-h
-2941.91 1701 m
-f*
-3029.95 1714.28 m
-3026.53 1711.47 3024.12 1709.99 3021.1 1709.99 c
-3016.47 1709.99 3015 1712.92 3015 1722.13 c
-3015 1761.37 l
-3015 1771.64 3014.01 1777.27 3011.24 1781.9 c
-3007.01 1789.55 2998.36 1794.01 2986.08 1794.01 c
-2975.82 1794.01 2966.16 1791.03 2960.52 1786.13 c
-2955.49 1781.9 2952 1776.07 2952 1771.03 c
-2952 1766.41 2955.94 1762.38 2960.92 1762.38 c
-2965.75 1762.38 2969.98 1766.41 2969.98 1770.83 c
-2969.98 1771.64 2969.78 1772.64 2969.58 1774.05 c
-2969.18 1775.86 2969 1777.47 2969 1778.88 c
-2969 1784.32 2975.43 1789.01 2983.46 1789.01 c
-2993.33 1789.01 2999 1783.08 2999 1772.04 c
-2999 1759.76 l
-2967.83 1747.29 2964.39 1745.68 2955.69 1738.03 c
-2951.26 1734 2948.45 1727.16 2948.45 1720.52 c
-2948.45 1707.84 2957.1 1698.99 2969.58 1698.99 c
-2978.43 1698.99 2986.68 1703.21 2998.96 1713.68 c
-2999.97 1703.01 3003.59 1698.99 3011.84 1698.99 c
-3018.68 1698.99 3022.91 1701.4 3029.95 1709.05 c
-h
-2999 1725.75 m
-2999 1719.51 2997.95 1717.7 2993.53 1715.09 c
-2988.7 1712.27 2983.06 1710.99 2978.84 1710.99 c
-2971.79 1710.99 2966.18 1717.69 2966.18 1726.16 c
-2966.18 1726.96 l
-2966.18 1738.83 2974.49 1746.08 2999 1754.93 c
-h
-3030.35 1701 m
-f*
-3031.81 1780.09 m
-3033.62 1780.29 3035.03 1780.29 3036.84 1780.29 c
-3043.69 1780.29 3045 1778.28 3045 1768.82 c
-3045 1674.64 l
-3045 1664.17 3042.8 1661.96 3031.01 1660.75 c
-3031.01 1658 l
-3079.71 1658 l
-3079.71 1662 l
-3064.61 1662.19 3062 1664.25 3062 1676.05 c
-3062 1707.64 l
-3069.24 1701 3073.87 1698.99 3082.32 1698.99 c
-3106.27 1698.99 3124 1721.53 3124 1750.71 c
-3124 1775.66 3110.16 1794.01 3090.98 1794.01 c
-3079.71 1794.01 3070.85 1789.05 3062 1777.68 c
-3062 1793.17 l
-3060.79 1793.57 l
-3050.12 1789.35 3042.88 1786.73 3031.81 1783.31 c
-h
-3062 1768.22 m
-3062 1774.25 3073.27 1782.01 3082.53 1782.01 c
-3097.42 1782.01 3107 1766.52 3107 1742.66 c
-3107 1720.52 3097.25 1704.99 3082.93 1704.99 c
-3073.47 1704.99 3062 1712.47 3062 1718.71 c
-h
-3130.62 1701 m
-f*
-3130.81 1780.09 m
-3132.62 1780.29 3134.03 1780.29 3135.84 1780.29 c
-3142.69 1780.29 3144 1778.28 3144 1768.82 c
-3144 1674.64 l
-3144 1664.17 3141.8 1661.96 3130.01 1660.75 c
-3130.01 1658 l
-3178.71 1658 l
-3178.71 1662 l
-3163.61 1662.19 3161 1664.25 3161 1676.05 c
-3161 1707.64 l
-3168.24 1701 3172.87 1698.99 3181.32 1698.99 c
-3205.27 1698.99 3223 1721.53 3223 1750.71 c
-3223 1775.66 3209.16 1794.01 3189.98 1794.01 c
-3178.71 1794.01 3169.85 1789.05 3161 1777.68 c
-3161 1793.17 l
-3159.79 1793.57 l
-3149.12 1789.35 3141.88 1786.73 3130.81 1783.31 c
-h
-3161 1768.22 m
-3161 1774.25 3172.27 1782.01 3181.53 1782.01 c
-3196.42 1782.01 3206 1766.52 3206 1742.66 c
-3206 1720.52 3196.25 1704.99 3181.93 1704.99 c
-3172.47 1704.99 3161 1712.47 3161 1718.71 c
-h
-3229.62 1701 m
-f*
-3265.22 1793.57 m
-3234.02 1782.51 l
-3234.02 1779.49 l
-3235.64 1779.69 l
-3238.05 1780.09 3240.67 1779.8 3242.48 1779.8 c
-3247.31 1779.8 3249 1776.71 3249 1768.22 c
-3249 1721.53 l
-3249 1707.04 3247 1704.82 3233.22 1704.02 c
-3233.22 1701 l
-3280.92 1701 l
-3280.92 1704.02 l
-3267.63 1705.02 3266 1707.04 3266 1721.53 c
-3266 1792.97 l
-h
-3255.96 1839 m
-3250.33 1839 3245 1834.12 3245 1828.19 c
-3245 1822.35 3249.73 1818 3255.76 1818 c
-3261.8 1818 3266 1822.4 3266 1828.19 c
-3266 1833.82 3261.47 1839 3255.96 1839 c
-h
-3285.95 1701 m
-f*
-3288.22 1781.1 m
-3289.63 1781.7 3291.44 1781.9 3293.65 1781.9 c
-3299.29 1781.9 3301 1778.88 3301 1769.02 c
-3301 1719.11 l
-3301 1707.64 3298.8 1704.82 3288.62 1704.02 c
-3288.62 1701 l
-3331.29 1701 l
-3331.29 1704.02 l
-3321.02 1704.82 3318 1707.24 3318 1714.48 c
-3318 1771.03 l
-3327.46 1780.09 3332.09 1783.01 3338.73 1783.01 c
-3348.59 1783.01 3353 1776.61 3353 1762.98 c
-3353 1720.92 l
-3353 1708.24 3350.47 1704.82 3340.75 1704.02 c
-3340.75 1701 l
-3382.61 1701 l
-3382.61 1704.02 l
-3372.74 1705.02 3370 1707.44 3370 1717.3 c
-3370 1763.39 l
-3370 1782.3 3361.27 1794.01 3346.58 1794.01 c
-3337.32 1794.01 3331.08 1790.5 3317.4 1777.27 c
-3317.4 1793.17 l
-3315.99 1793.57 l
-3306.13 1789.95 3299.29 1787.74 3288.22 1784.52 c
-h
-3385.62 1701 m
-f*
-3479.59 1779 m
-3479.59 1787 l
-3464.09 1787 l
-3460.07 1787 3457.05 1787.58 3453.02 1788.95 c
-3448.59 1790.56 l
-3443.16 1792.57 3437.73 1794.01 3432.5 1794.01 c
-3413.78 1794.01 3399.25 1779.33 3399.25 1760.77 c
-3399.25 1748.09 3404.38 1740.44 3417.6 1733.8 c
-3414.79 1730.99 3411.97 1728.37 3408.95 1725.75 c
-3402.31 1719.92 3400.06 1715.89 3400.06 1711.87 c
-3400.06 1707.44 3402.19 1705.23 3410.36 1701.2 c
-3395.87 1690.74 3391 1684.1 3391 1676.65 c
-3391 1665.98 3406.33 1657 3425.45 1657 c
-3439.94 1657 3455.24 1661.88 3465.7 1670.01 c
-3473.95 1676.45 3478 1683.09 3478 1691.14 c
-3478 1703.62 3468.45 1712.07 3453.43 1712.67 c
-3427.46 1713.88 l
-3416.6 1714.28 3411.77 1716.09 3411.77 1719.31 c
-3411.77 1723.34 3418.41 1730.38 3423.84 1731.99 c
-3427.67 1731.59 l
-3431.29 1731.19 3434.1 1731 3435.31 1731 c
-3442.36 1731 3450.2 1733.81 3456.24 1738.84 c
-3463.49 1744.47 3466 1751.72 3466 1762.18 c
-3466 1767.99 3465.18 1772.59 3462.88 1779 c
-h
-3414.58 1700.6 m
-3421.43 1699.19 3437.32 1697.98 3447.19 1697.98 c
-3465.5 1697.98 3472 1695.57 3472 1688.12 c
-3472 1676.45 3456.76 1668 3433.9 1668 c
-3416.19 1668 3405 1674.07 3405 1683.29 c
-3405 1687.92 3406.76 1690.94 3414.58 1700.6 c
-h
-3415.59 1769.02 m
-3415.59 1780.9 3421.23 1788.01 3430.48 1788.01 c
-3436.72 1788.01 3441.95 1784.57 3445.17 1778.48 c
-3449 1771.44 3451 1762.38 3451 1754.13 c
-3451 1743.06 3445.25 1736 3436.32 1736 c
-3423.84 1736 3415.59 1749.09 3415.59 1768.42 c
-h
-3485.62 1701 m
-f*
-q[1 0 0 1 0 0]concat
-76 93 true[1 0 0 1 -2731 -2481]@85 imagemask
-5QCc`s*t(L!!#7`
-s8W+Lz5QCc`s*t(L!!!$!s8VQgz!$D7 at z!!!!0s8Duuz!"],-z!!!!(s7cQo
-z!!iQ!z!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz
-!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$
-s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!g
-z!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jzhuE`Zs6p!g!!(pW
-!!E8j!!!!"huE`Zs6p!g!!2!X!!E8j!!!!"huE`Zs6p!g!!2!X!!E8j!!!!"huE`Zs6p!g!!D-Z!!E8j!!!!$huE`Z
-s6p!g!!hE^!!E8j!!!!(huE`Zs6p!g!"[uf!!E8j!!!!`huE`Zs6p!g!WV'X!!E9$s8W-!huE`Zs8W-!
-s8V!W!!E9$s8W-!huE`Zs8W-!s8V!W!!E9$s8W-!huE`Zs6p!g!WV'X!!E8j!!!!`huE`Zs6p!g!$C,!
-!!E8j!!!!0huE`Zs6p!g!!hE^!!E8j!!!!$huE`Zs6p!g!!D-Z!!E8j!!!!$huE`Zs6p!g!!2!X!!E8j!!!!"huE`Z
-s6p!g!!2!X!!E8j!!!!"huE`Zs6p!g!!(pW!!E8jzhuE`Zs6p!gz!!E8jz!!!!$s6p!g
-z!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!g!!!"<
-!!E8jz!,qo?s6p!g!!!#g!!E8jz!:Tsjs6p!g!!!#g!!E8jz!:Tsjs6p!g!!!&h!!E8j
-z!Up'ks6p!g!!!,j!!E8jz"7Q9ms6p!g!!!8n!!iPnz&+BQ(s6p!g!!",1!"],)z
-J+*F[s82is!!iPn!'gM`s8W-!s6p-js8W-!s8W,g5QCc`s8W-!s6r8Qs8W-!s8W,g5QCc`s8W-!s6p~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -2809 -2480]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -2879 -2481]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-97 65 true[1 0 0 1 -2927 -2479]@85 imagemask
-z^]4?7(]XO9
-z!Pe[8!#tt=z!!2!X!!#+]z!!!,Z!!!!_z!!!!$n,NFgIK0?Jz"7Q9j!.OtK
-z!!i9!!!%KKz!!!9!!!!$!z!!!!0qu?]ss*t(Lz&,ZD-!WRZMz!"]&/!!3,8
-z!!",?!!!'"^]4?7!!!!@rr<$$s1eU7z5Q:]`"979Zz!'gL6!!E8Zz!!#7`J,fiSn,NFg!!!"K
-s1eU>s6p!gzJ,d:a&-),!z!<;f/!"],)z!!*&nhuF;ep](9o!!!$!j59nZr;6Np!!!!"
-s5WSK+8l$:z!WV-J!'gC/z!!E8;p]*PRIK0?J!!!-$_"[mopc\ZX!!!!$s+("IJ+,Z&z
-#QK>P!.XK&z!!iOSIK4le*rl9@!!!Q0!.FqJi#dIL!!!!0rr>7`s54E<z&,lPn!WV'g^]4?7!$D1?++aI-
-&&8/F!!",?!$?dl^^%XT!!!!`qu at 7[s*t at 4z5PtKl_uG5hhuE`W!'gA]#KQjp"7Q9j!!%ND!!h]e
-!!2Qh!!!"Kp](EZrr<)hzJ+*F?s8N'"p](9o!<;Ng"98?#!;HNo!!*&g!!3-!!!)co!!!'"huEfX
-qu?_E!!!!"s53kWs82isHiO-H!WV'X!<;rs!.FnJ!!E8:!!%ND!!#1_!!!-$^]4 at ap](:X!!!!(s*t(LJ+s!D*rl9@
-#QK;S!<;Ng!$;1@!!iOS!!*&g!!"*k!!!Q0!!!$!huE`fJ,fQ[rr<$"s53kW%tFW[+9)<@!WV'X!!g:>
-!$D1?!!3,8!!!8>!!",?!!!-$^]4?>huEaAqu?^!s1eU7#N,R^5PtK]#QK;S!!D-Z!.XnH!!iOS!!!,j
-!!%NH!!!9(J,fQOn,NIgqu?^-s*t(L"8Dirs82is+9-ik!!Dur!WW&t!$D6V!!!-!!!E9#!!%NKhuE`frW!3's1e[8s8Duu5Q:^*s8VQns8W+L!<<(L+92B1#QOi(J,oWLJ,~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -3026 -2480]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -3089 -2481]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-69 97 true[1 0 0 1 -3135 -2480]@85 imagemask
-!!!'"n,_GI!!!!0
-s8E&sz5QCb7rr<$!!<<*!_>iEn!!3-"s5F"U!!!9(s8VWhs*t([s8W,ps8VQg+926=rVuom!$D7!
-!'gM`p]*PY^]4oFqu?_Hs*t(Ss6p!gJ,]KK"97ij!<<#u!!E8Z!!3,t!!!'"huEfXp](9ps53kXs6p!g
-!WV'X"97ij!!3,X!!E8Z!!!'"huElZhuE`Xs53k^s53kW!WV'X#QMR>!!3,X!!iP>!!!'"huF#^^]4?8s53kfs*t(L
-!WV'X&-%.[!!3,X!"]*[!!!'"huF;fJ,fQMs53kfs*t(L!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"
-s53kfrr<$!!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"s53kfrr<$!!WV'X#QFc(!!3,X!!iN(!!!'"
-huF#^!!!!"s53k^rr<$!!WV'X#QFc(!!3,X!!E6$!!!'"huElZJ,fQMs53kZs*t(L!WV'X!WRZM!!3,X!!3+M!!!'"
-huEfXJ,fQMs53kWs1eU7!WV'X!<9h7!!3,X!!%Ma!!!'"huEb,huE`Xs53kW5MuMA"979Z!$C\1!!E8Z
-!!",1!!!-$huE`fp](:!s53kW#Q+Q%&-(Pf!!E-!!"]+f!!!'!!!", at huE`Ws*t)6s53kW!.Vcas8V!W
-!!#7Q"9&8X!!!!0s8VWhhuE`W#QOh_s53kW!!3-"JcFX.!!!!`rW3&Wz!!!'"huE`W!!!!"s53kWz!WV'X
-z!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kW
-z!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W
-!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!$s53kWz#QN]^z"98DZz!!E9$huE`W
-!!!-$s53kWz5QBXAz!!E8Zz!!!"KhuE`Wz&)[Efz!!2!Xz!!!!A!!~>
-Q
-q[1 0 0 1 0 0]concat
-44 93 true[1 0 0 1 -2821 -861]@85 imagemask
-+92B at s6q-1s8W,g
-+92B at s6p"Qs8Vus!!iQ(^]4?:s8RTL!!3-"!!!!"s8Duu!!3-!zs8Duu!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!3-!!!!!"s8Duu!!E9$!!!!$s8RTL!"],0^]4B7s8Vus+92B at s6q-1s8W,g+92B at s6p~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -2868 -861]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-67 65 true[1 0 0 1 -2937 -859]@85 imagemask
-z(]XO9z
-!&srYz!!#+]z!!!"HzzIK0?Jz!.FnJz!!*$!z!!!$!z!!!!"
-rr<$!z!WRZMz!!3+Mz!!!-$^]4?7!!!!$s1eU7z#QMR>z!!iP^z!!!Q0
-huE`W!!!!0s6p!gz&-),!z!$D71z!!",?p](9o!!!!`r:g6lz5Q#m/z!'g7+z!!%ND
-HiO-H!!!"Kpc\ZXzs6r2Pz!<;OQz!!3,X*rl9@!!!'"i#_q!!!!!"s54E<z"96.I
-J,fQL!!E8:&&8/F!!!9(J-Wji!!!!(s*t?iz#QK;VhuE`W!"])0"5j.Z!!!Q0!!D]j!!!!@rVuug
-z+8u6 at n,NFg!'gG_!VcWp!!#7]!!)co!!!!`qu?`pzJ+s!DHiO-H!.XbD!.4bH!!*&o!!%HJ!!!$!n,NGPzs6p!g4obQ_!WV'X!'^G`!!3,X!!")@!!!-$huEa!J,fQOs1eU7%tFW[
-#QMR>!"XS[!!iOS!!!PF!!!Q0J,fQS^]4?Fs*t(L#N,R^+9)<@!!hE^!$D4@!!!,j!!#7`!!!!$n,NGQ
-rr<$!"8DirJ,]KK!!Dur!<<'!!!!9%!!3-"J,fQ[rW!3's53kW5Q?6Us8Vus!WW2X+92B=!!3-"hu~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -3007 -860]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -3069 -861]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -3116 -860]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -3171 -860]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-1 i
-16 w
-2513.75 2386.55 896.4 25.2 re
-Y
-2511.35 2399.75 m
-3401.75 2399.75 l
-S
-0 0 6120 7920 re
-Y
-3374.15 2357.75 m
-3387.35 2399.75 l
-3374.15 2441.75 l
-3473.75 2399.75 l
-f*
-2585.75 1006.55 897.6 25.2 re
-Y
-3476.15 1019.75 m
-2583.35 1019.75 l
-S
-0 0 6120 7920 re
-Y
-2613.35 1061.75 m
-2600.15 1019.75 l
-2613.35 977.75 l
-2513.75 1019.75 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 379 3063 a(Figure)31 b(1:)41 b(A)30 b(Mapping)h(view)m(ed)
-g(as)f(a)h(\\blac)m(k)h(b)s(o)m(x")f(for)f(transforming)g(co)s
-(ordinates.)0 3376 y(transformed)d(co)s(ordinates.)41
-b(Since)28 b(eac)m(h)i(set)f(of)f(co)s(ordinates)h(represen)m(ts)f(a)h
-(p)s(oin)m(t)f(in)g(a)h(co)s(ordinate)g(space,)0 3489
-y(the)f(Mapping)f(acts)h(to)g(in)m(ter-relate)i(corresp)s(onding)d(p)s
-(ositions)g(in)g(the)h(t)m(w)m(o)g(spaces,)h(although)f(what)f(these)0
-3602 y(spaces)h(represen)m(t)g(is)f(unsp)s(eci\014ed.)38
-b(Notice)30 b(that)e(a)g(Mapping)g(need)f(not)h(ha)m(v)m(e)h(the)e
-(same)h(n)m(um)m(b)s(er)f(of)g(input)0 3715 y(and)h(output)h(co)s
-(ordinates.)41 b(That)29 b(is,)g(the)g(t)m(w)m(o)h(co)s(ordinate)g
-(spaces)f(whic)m(h)g(it)g(in)m(ter-relates)i(need)e(not)g(ha)m(v)m(e)0
-3828 y(the)i(same)f(n)m(um)m(b)s(er)f(of)i(dimensions.)0
-3991 y(In)38 b(man)m(y)h(cases,)k(the)c(transformation)g(can,)j(in)c
-(principle,)j(b)s(e)e(p)s(erformed)e(in)i(either)g(direction:)59
-b(either)0 4104 y(from)35 b(the)h Fx(input)g FG(co)s(ordinate)h(space)f
-(to)h(the)f Fx(output,)h FG(or)f Fx(vic)-5 b(e)37 b(versa.)57
-b FG(The)36 b(\014rst)f(of)h(these)g(is)g(termed)f(the)0
-4217 y Fx(forwar)-5 b(d)33 b FG(transformation)e(and)e(the)i(other)g
-(the)f Fx(inverse)g FG(transformation.)0 4381 y FE(F)-9
-b(urther)35 b(reading:)40 b FG(F)-8 b(or)32 b(a)e(more)h(complete)h
-(discussion)d(of)i(Mappings,)f(see)h Fu(x)p FG(5.)0 4677
-y Fw(2.2)112 b(Mappings)40 b(Av)-6 b(ailable)0 4900 y
-FG(The)35 b(basic)h(concept)h(of)f(a)g(Mapping)g(\()p
-Fu(x)p FG(2.1\))i(is)e(rather)f(generic)i(and)e(ob)m(viously)h(it)h(is)
-f(necessary)g(to)g(ha)m(v)m(e)0 5013 y(sp)s(eci\014c)31
-b(Mappings)g(that)g(implemen)m(t)h(sp)s(eci\014c)e(relationships)i(b)s
-(et)m(w)m(een)f(co)s(ordinate)h(systems.)42 b(AST)31
-b(pro-)0 5126 y(vides)26 b(a)h(range)g(of)f(these,)i(to)g(p)s(erform)d
-(transformations)h(suc)m(h)g(as)h(the)g(follo)m(wing)g(and,)g(where)f
-(appropriate,)0 5239 y(their)k(in)m(v)m(erses:)136 5504
-y Fu(\017)46 b FG(Con)m(v)m(ersions)31 b(b)s(et)m(w)m(een)g(v)-5
-b(arious)30 b(celestial)j(co)s(ordinate)f(systems)e(\(the)h(SlaMap\).)
-136 5693 y Fu(\017)46 b FG(Con)m(v)m(ersions)31 b(b)s(et)m(w)m(een)g(v)
--5 b(arious)30 b(sp)s(ectral)h(co)s(ordinate)g(systems)g(\(the)g(Sp)s
-(ecMap)f(and)f(GrismMap\).)p eop end
-%%Page: 6 16
-TeXDict begin 6 15 bop 0 52 a FG(6)2171 b Fz(2)92 b(O)m(VER)-10
-b(VIEW)30 b(OF)h(AST)e(CONCEPTS)854 1039 y @beginspecial
-44 @llx 119 @lly 541 @urx 306 @ury 2485 @rwi @setspecial
-%%BeginDocument: sun210_figures/series.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 44 119 541 306
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:38:48
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5033.75 2775.35 m
-5033.75 2900.15 4932.95 3000.95 4808.15 3000.95 c
-1178.15 3000.95 l
-1053.35 3000.95 952.55 2900.15 952.55 2775.35 c
-952.55 1425.35 l
-952.55 1300.55 1053.35 1199.75 1178.15 1199.75 c
-4808.15 1199.75 l
-4932.95 1199.75 5033.75 1300.55 5033.75 1425.35 c
-f*
-1 g
-4968.95 2831.75 m
-4968.95 2955.35 4869.35 3054.95 4744.55 3054.95 c
-1122.95 3054.95 l
-998.15 3054.95 898.55 2955.35 898.55 2831.75 c
-898.55 1487.75 l
-898.55 1364.15 998.15 1264.55 1122.95 1264.55 c
-4744.55 1264.55 l
-4869.35 1264.55 4968.95 1364.15 4968.95 1487.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-4968.95 2831.75 m
-4968.95 2955.35 4869.35 3054.95 4744.55 3054.95 c
-1122.95 3054.95 l
-998.15 3054.95 898.55 2955.35 898.55 2831.75 c
-898.55 1487.75 l
-898.55 1364.15 998.15 1264.55 1122.95 1264.55 c
-4744.55 1264.55 l
-4869.35 1264.55 4968.95 1364.15 4968.95 1487.75 c
-h
-S
-903.35 2212.55 319.2 15.5999 re
-Y
-900.95 2220.95 m
-1215.35 2220.95 l
-S
-0 0 6120 7920 re
-Y
-942.95 2222.15 m
-942.95 2243.75 924.95 2261.75 903.35 2261.75 c
-880.55 2261.75 862.55 2243.75 862.55 2222.15 c
-862.55 2200.55 880.55 2182.55 903.35 2182.55 c
-924.95 2182.55 942.95 2200.55 942.95 2222.15 c
-f*
-1173.35 2172.95 m
-1192.55 2220.95 l
-1173.35 2268.95 l
-1325.75 2220.95 l
-f*
-0.564706 g
-2793.35 2331.35 m
-2793.35 2402.15 2735.75 2460.95 2663.75 2460.95 c
-1524.95 2460.95 l
-1452.95 2460.95 1395.35 2402.15 1395.35 2331.35 c
-1395.35 1552.55 l
-1395.35 1480.55 1452.95 1422.95 1524.95 1422.95 c
-2663.75 1422.95 l
-2735.75 1422.95 2793.35 1480.55 2793.35 1552.55 c
-f*
-1 g
-2728.55 2386.55 m
-2728.55 2457.35 2672.15 2514.95 2600.15 2514.95 c
-1469.75 2514.95 l
-1398.95 2514.95 1341.35 2457.35 1341.35 2386.55 c
-1341.35 1614.95 l
-1341.35 1545.35 1398.95 1487.75 1469.75 1487.75 c
-2600.15 1487.75 l
-2670.95 1487.75 2728.55 1545.35 2728.55 1614.95 c
-f*
-0 g
-2728.55 2386.55 m
-2728.55 2457.35 2672.15 2514.95 2600.15 2514.95 c
-1469.75 2514.95 l
-1398.95 2514.95 1341.35 2457.35 1341.35 2386.55 c
-1341.35 1614.95 l
-1341.35 1545.35 1398.95 1487.75 1469.75 1487.75 c
-2600.15 1487.75 l
-2670.95 1487.75 2728.55 1545.35 2728.55 1614.95 c
-h
-S
-0.564706 g
-4624.55 2327.75 m
-4624.55 2400.95 4564.55 2460.95 4491.35 2460.95 c
-3359.75 2460.95 l
-3286.55 2460.95 3226.55 2400.95 3226.55 2327.75 c
-3226.55 1527.35 l
-3226.55 1454.15 3286.55 1394.15 3359.75 1394.15 c
-4491.35 1394.15 l
-4564.55 1394.15 4624.55 1454.15 4624.55 1527.35 c
-f*
-1 g
-4559.75 2382.95 m
-4559.75 2456.15 4500.95 2514.95 4427.75 2514.95 c
-3304.55 2514.95 l
-3231.35 2514.95 3172.55 2456.15 3172.55 2382.95 c
-3172.55 1590.95 l
-3172.55 1517.75 3231.35 1458.95 3304.55 1458.95 c
-4427.75 1458.95 l
-4500.95 1458.95 4559.75 1517.75 4559.75 1590.95 c
-f*
-0 g
-4559.75 2382.95 m
-4559.75 2456.15 4500.95 2514.95 4427.75 2514.95 c
-3304.55 2514.95 l
-3231.35 2514.95 3172.55 2456.15 3172.55 2382.95 c
-3172.55 1590.95 l
-3172.55 1517.75 3231.35 1458.95 3304.55 1458.95 c
-4427.75 1458.95 l
-4500.95 1458.95 4559.75 1517.75 4559.75 1590.95 c
-h
-S
-903.35 1792.55 319.2 15.5999 re
-Y
-900.95 1800.95 m
-1215.35 1800.95 l
-S
-0 0 6120 7920 re
-Y
-942.95 1802.15 m
-942.95 1823.75 924.95 1841.75 903.35 1841.75 c
-880.55 1841.75 862.55 1823.75 862.55 1802.15 c
-862.55 1780.55 880.55 1762.55 903.35 1762.55 c
-924.95 1762.55 942.95 1780.55 942.95 1802.15 c
-f*
-1173.35 1752.95 m
-1192.55 1800.95 l
-1173.35 1848.95 l
-1325.75 1800.95 l
-f*
-2724.95 2272.55 340.8 15.5999 re
-Y
-2722.55 2280.95 m
-3058.55 2280.95 l
-S
-0 0 6120 7920 re
-Y
-2763.35 2282.15 m
-2763.35 2303.75 2745.35 2321.75 2723.75 2321.75 c
-2702.15 2321.75 2684.15 2303.75 2684.15 2282.15 c
-2684.15 2260.55 2702.15 2242.55 2723.75 2242.55 c
-2745.35 2242.55 2763.35 2260.55 2763.35 2282.15 c
-f*
-3017.75 2232.95 m
-3035.75 2280.95 l
-3017.75 2328.95 l
-3170.15 2280.95 l
-f*
-2724.95 1672.55 339.6 15.5999 re
-Y
-2722.55 1680.95 m
-3057.35 1680.95 l
-S
-0 0 6120 7920 re
-Y
-2763.35 1682.15 m
-2763.35 1703.75 2745.35 1721.75 2723.75 1721.75 c
-2702.15 1721.75 2684.15 1703.75 2684.15 1682.15 c
-2684.15 1660.55 2702.15 1642.55 2723.75 1642.55 c
-2745.35 1642.55 2763.35 1660.55 2763.35 1682.15 c
-f*
-3016.55 1632.95 m
-3034.55 1680.95 l
-3016.55 1728.95 l
-3168.95 1680.95 l
-f*
-2724.95 1974.95 340.8 15.5999 re
-Y
-2722.55 1983.35 m
-3058.55 1983.35 l
-S
-0 0 6120 7920 re
-Y
-2763.35 1984.55 m
-2763.35 2006.15 2745.35 2024.15 2723.75 2024.15 c
-2702.15 2024.15 2684.15 2006.15 2684.15 1984.55 c
-2684.15 1962.95 2702.15 1944.95 2723.75 1944.95 c
-2745.35 1944.95 2763.35 1962.95 2763.35 1984.55 c
-f*
-3017.75 1936.55 m
-3035.75 1983.35 l
-3017.75 2031.35 l
-3170.15 1983.35 l
-f*
-4558.55 2216.15 304.8 15.5999 re
-Y
-4556.15 2224.55 m
-4856.15 2224.55 l
-S
-0 0 6120 7920 re
-Y
-4596.95 2225.75 m
-4596.95 2247.35 4578.95 2265.35 4557.35 2265.35 c
-4535.75 2265.35 4517.75 2247.35 4517.75 2225.75 c
-4517.75 2204.15 4535.75 2186.15 4557.35 2186.15 c
-4578.95 2186.15 4596.95 2204.15 4596.95 2225.75 c
-f*
-4816.55 2177.75 m
-4834.55 2224.55 l
-4816.55 2272.55 l
-4968.95 2224.55 l
-f*
-4558.55 1791.35 304.8 15.5999 re
-Y
-4556.15 1799.75 m
-4856.15 1799.75 l
-S
-0 0 6120 7920 re
-Y
-4596.95 1800.95 m
-4596.95 1822.55 4578.95 1840.55 4557.35 1840.55 c
-4535.75 1840.55 4517.75 1822.55 4517.75 1800.95 c
-4517.75 1779.35 4535.75 1761.35 4557.35 1761.35 c
-4578.95 1761.35 4596.95 1779.35 4596.95 1800.95 c
-f*
-4816.55 1751.75 m
-4834.55 1799.75 l
-4816.55 1847.75 l
-4968.95 1799.75 l
-f*
-0.2 i
-1742 2064.14 m
-1742 1982.6 l
-1742 1967.66 1739.88 1965.32 1725.94 1964.42 c
-1725.94 1961 l
-1776.34 1961 l
-1776.34 1964.42 l
-1763.2 1965.32 1761 1967.84 1761 1980.62 c
-1761 2060.54 l
-1761 2073.32 1763.29 2075.66 1776.34 2076.74 c
-1776.34 2080 l
-1740.52 2080 l
-1700.74 1989.26 l
-1659.16 2080 l
-1623.52 2080 l
-1623.52 2077 l
-1638.28 2076.09 1641 2073.89 1641 2060.54 c
-1641 1987.46 l
-1641 1968.92 1638.43 1965.5 1623.16 1964.42 c
-1623.16 1961 l
-1665.46 1961 l
-1665.46 1964 l
-1651.6 1964.73 1649 1968.95 1649 1987.46 c
-1649 2060 l
-1693.72 1961 l
-1696.24 1961 l
-h
-1781.02 1961 m
-f*
-1860.56 1972.88 m
-1857.5 1970.36 1855.34 1969.2 1852.64 1969.2 c
-1848.5 1969.2 1847 1971.78 1847 1979.9 c
-1847 2015 l
-1847 2024.18 1846.16 2029.22 1843.82 2033.36 c
-1840.04 2040.2 1832.3 2043.8 1821.32 2043.8 c
-1812.14 2043.8 1803.5 2041.28 1798.46 2037.14 c
-1793.96 2033.36 1791 2028.14 1791 2023.64 c
-1791 2019.5 1794.46 2015.9 1798.82 2015.9 c
-1803.14 2015.9 1806.92 2019.5 1806.92 2023.46 c
-1806.92 2024.18 1806.74 2025.08 1806.56 2026.34 c
-1806.2 2027.96 1806 2029.4 1806 2030.66 c
-1806 2035.52 1811.77 2039.8 1818.98 2039.8 c
-1827.8 2039.8 1832 2034.47 1832 2024.54 c
-1832 2013.56 l
-1804.76 2002.4 1801.75 2000.96 1794.14 1994.12 c
-1790.18 1990.52 1787.66 1984.4 1787.66 1978.46 c
-1787.66 1967.12 1795.4 1959.2 1806.56 1959.2 c
-1814.48 1959.2 1821.86 1962.98 1832.84 1972.34 c
-1833.74 1962.8 1836.98 1959.2 1844.36 1959.2 c
-1850.48 1959.2 1854.26 1961.36 1860.56 1968.2 c
-h
-1832 1983.14 m
-1832 1977.56 1831.23 1975.94 1827.98 1973.6 c
-1823.66 1971.08 1818.62 1969.2 1814.84 1969.2 c
-1808.54 1969.2 1803.48 1975.51 1803.48 1983.5 c
-1803.48 1984.22 l
-1803.48 1994.84 1810.7 2001.32 1832 2009.24 c
-h
-1860.92 1961 m
-f*
-1862.62 2031.74 m
-1864.24 2031.92 1865.5 2031.92 1867.12 2031.92 c
-1873.24 2031.92 1875 2030.12 1875 2021.66 c
-1875 1937.42 l
-1875 1928.06 1872.94 1926.08 1861.9 1925 c
-1861.9 1922 l
-1905.46 1922 l
-1905.46 1925 l
-1891.96 1925.18 1890 1927.19 1890 1938.68 c
-1890 1966.94 l
-1896.34 1961 1900.4 1959.2 1907.8 1959.2 c
-1929.22 1959.2 1945 1979.36 1945 2005.46 c
-1945 2027.78 1932.65 2043.8 1915.54 2043.8 c
-1905.61 2043.8 1897.8 2039.48 1890 2029.58 c
-1890 2043.44 l
-1888.54 2043.8 l
-1879 2040.02 1872.52 2037.68 1862.62 2034.62 c
-h
-1890 2021.12 m
-1890 2026.52 1899.87 2032.8 1907.98 2032.8 c
-1921.3 2032.8 1930 2019.2 1930 1998.26 c
-1930 1978.46 1921.23 1964.2 1908.34 1964.2 c
-1899.88 1964.2 1890 1971.09 1890 1976.84 c
-h
-1951 1961 m
-f*
-1952.62 2031.74 m
-1954.24 2031.92 1955.5 2031.92 1957.12 2031.92 c
-1963.24 2031.92 1965 2030.12 1965 2021.66 c
-1965 1937.42 l
-1965 1928.06 1962.94 1926.08 1951.9 1925 c
-1951.9 1922 l
-1995.46 1922 l
-1995.46 1925 l
-1981.96 1925.18 1980 1927.19 1980 1938.68 c
-1980 1966.94 l
-1986.34 1961 1990.4 1959.2 1997.8 1959.2 c
-2019.22 1959.2 2035 1979.36 2035 2005.46 c
-2035 2027.78 2022.65 2043.8 2005.54 2043.8 c
-1995.61 2043.8 1987.8 2039.48 1980 2029.58 c
-1980 2043.44 l
-1978.54 2043.8 l
-1969 2040.02 1962.52 2037.68 1952.62 2034.62 c
-h
-1980 2021.12 m
-1980 2026.52 1989.87 2032.8 1997.98 2032.8 c
-2011.3 2032.8 2020 2019.2 2020 1998.26 c
-2020 1978.46 2011.23 1964.2 1998.34 1964.2 c
-1989.88 1964.2 1980 1971.09 1980 1976.84 c
-h
-2041 1961 m
-f*
-2072.5 2043.8 m
-2044.6 2033.9 l
-2044.6 2031.2 l
-2046.04 2031.38 l
-2048.2 2031.74 2050.54 2031.72 2052.16 2031.72 c
-2056.48 2031.72 2058 2028.89 2058 2021.12 c
-2058 1979.36 l
-2058 1966.4 2056.21 1964.42 2043.88 1963.7 c
-2043.88 1961 l
-2086.54 1961 l
-2086.54 1963.7 l
-2074.66 1964.6 2073 1966.4 2073 1979.36 c
-2073 2043.26 l
-h
-2064.22 2084 m
-2059.18 2084 2055 2079.83 2055 2074.76 c
-2055 2069.54 2058.98 2066 2064.04 2066 c
-2069.44 2066 2074 2069.78 2074 2074.76 c
-2074 2079.8 2069.59 2084 2064.22 2084 c
-h
-2091.04 1961 m
-f*
-2093.88 2032.64 m
-2095.14 2033.18 2096.76 2033.36 2098.74 2033.36 c
-2103.78 2033.36 2105 2030.66 2105 2021.84 c
-2105 1977.2 l
-2105 1966.94 2103.09 1964.42 2094.24 1963.7 c
-2094.24 1961 l
-2132.4 1961 l
-2132.4 1963.7 l
-2123.22 1964.42 2120 1966.58 2120 1973.06 c
-2120 2023.64 l
-2128.7 2031.74 2132.95 2033.8 2139.06 2033.8 c
-2147.88 2033.8 2152 2028.25 2152 2016.44 c
-2152 1978.82 l
-2152 1967.48 2149.7 1964.42 2140.86 1963.7 c
-2140.86 1961 l
-2178.3 1961 l
-2178.3 1963.7 l
-2169.48 1964.6 2167 1966.76 2167 1975.58 c
-2167 2016.8 l
-2167 2033.72 2159.2 2043.8 2146.08 2043.8 c
-2137.64 2043.8 2131.94 2040.74 2119.46 2029.22 c
-2119.46 2043.44 l
-2118.72 2043.8 l
-2109.9 2040.56 2103.78 2038.58 2093.88 2035.7 c
-h
-2181 1961 m
-f*
-2265.6 2031 m
-2265.6 2038 l
-2251.74 2038 l
-2248.14 2038 2245.44 2038.5 2241.84 2039.66 c
-2237.88 2041.1 l
-2233.02 2042.9 2228.16 2043.8 2223.48 2043.8 c
-2206.74 2043.8 2193.38 2030.84 2193.38 2014.46 c
-2193.38 2003.12 2198.07 1996.28 2210.16 1990.34 c
-2207.64 1987.82 2205.12 1985.48 2202.42 1983.14 c
-2196.48 1977.92 2194.1 1974.32 2194.1 1970.72 c
-2194.1 1966.76 2196.09 1964.78 2203.68 1961.18 c
-2190.72 1951.82 2186 1945.88 2186 1939.22 c
-2186 1929.68 2199.88 1922 2217.18 1922 c
-2230.14 1922 2243.82 1926.23 2253.18 1933.28 c
-2260.56 1939.04 2264 1944.98 2264 1952.18 c
-2264 1963.34 2255.53 1970.9 2242.2 1971.44 c
-2218.98 1972.52 l
-2209.26 1972.88 2204.94 1974.5 2204.94 1977.38 c
-2204.94 1980.98 2210.88 1987.28 2215.74 1988.72 c
-2219.16 1988.36 l
-2222.4 1988 2224.92 1988 2226 1988 c
-2232.3 1988 2239.32 1990.46 2244.72 1994.84 c
-2251.2 1999.88 2254 2006.36 2254 2015.72 c
-2254 2021 2253.12 2025.18 2250.66 2031 c
-h
-2207.46 1960.64 m
-2213.58 1959.38 2227.8 1958.3 2236.62 1958.3 c
-2253 1958.3 2259 1956.14 2259 1949.48 c
-2259 1939.04 2245.3 1932 2224.74 1932 c
-2208.9 1932 2199 1937.23 2199 1945.16 c
-2199 1949.3 2200.55 1952 2207.46 1960.64 c
-h
-2208.36 2021.84 m
-2208.36 2032.46 2213.4 2038.8 2221.68 2038.8 c
-2227.26 2038.8 2231.94 2035.73 2234.82 2030.3 c
-2238.24 2024 2240 2015.9 2240 2008.52 c
-2240 1998.62 2234.87 1993 2226.9 1993 c
-2215.74 1993 2208.36 2004.43 2208.36 2021.3 c
-h
-2271 1961 m
-f*
-2316 1961 m
-f*
-2443.08 1964.42 m
-2434.98 1964.96 2433.18 1966.76 2426.88 1980.08 c
-2382.06 2082.16 l
-2378.46 2082.16 l
-2341.02 1993.94 l
-2329.5 1967.66 2327.34 1964.96 2318.7 1964.42 c
-2318.7 1961 l
-2354.34 1961 l
-2354.34 1964.82 l
-2345.7 1964.82 2342.1 1967.03 2342.1 1971.8 c
-2342.1 1973.96 2342.64 1976.48 2343.54 1978.82 c
-2351.82 2000 l
-2398.98 2000 l
-2406.36 1982.6 l
-2408.52 1977.56 2409.78 1973.06 2409.78 1970.36 c
-2409.78 1968.74 2408.7 1966.76 2407.26 1966.04 c
-2405.1 1964.78 2403.66 1964.82 2397.18 1964.82 c
-2397.18 1961 l
-2443.08 1961 l
-h
-2354.88 2007 m
-2375.58 2056.76 l
-2396.46 2007 l
-h
-2445.96 1961 m
-f*
-3607 2064.14 m
-3607 1982.6 l
-3607 1967.66 3604.88 1965.32 3590.94 1964.42 c
-3590.94 1961 l
-3641.34 1961 l
-3641.34 1964.42 l
-3628.2 1965.32 3626 1967.84 3626 1980.62 c
-3626 2060.54 l
-3626 2073.32 3628.29 2075.66 3641.34 2076.74 c
-3641.34 2080 l
-3605.52 2080 l
-3565.74 1989.26 l
-3524.16 2080 l
-3488.52 2080 l
-3488.52 2077 l
-3503.28 2076.09 3506 2073.89 3506 2060.54 c
-3506 1987.46 l
-3506 1968.92 3503.43 1965.5 3488.16 1964.42 c
-3488.16 1961 l
-3530.46 1961 l
-3530.46 1964 l
-3516.6 1964.73 3514 1968.95 3514 1987.46 c
-3514 2060 l
-3558.72 1961 l
-3561.24 1961 l
-h
-3646.02 1961 m
-f*
-3726.56 1972.88 m
-3723.5 1970.36 3721.34 1969.2 3718.64 1969.2 c
-3714.5 1969.2 3713 1971.78 3713 1979.9 c
-3713 2015 l
-3713 2024.18 3712.16 2029.22 3709.82 2033.36 c
-3706.04 2040.2 3698.3 2043.8 3687.32 2043.8 c
-3678.14 2043.8 3669.5 2041.28 3664.46 2037.14 c
-3659.96 2033.36 3657 2028.14 3657 2023.64 c
-3657 2019.5 3660.46 2015.9 3664.82 2015.9 c
-3669.14 2015.9 3672.92 2019.5 3672.92 2023.46 c
-3672.92 2024.18 3672.74 2025.08 3672.56 2026.34 c
-3672.2 2027.96 3672 2029.4 3672 2030.66 c
-3672 2035.52 3677.77 2039.8 3684.98 2039.8 c
-3693.8 2039.8 3698 2034.47 3698 2024.54 c
-3698 2013.56 l
-3670.76 2002.4 3667.75 2000.96 3660.14 1994.12 c
-3656.18 1990.52 3653.66 1984.4 3653.66 1978.46 c
-3653.66 1967.12 3661.4 1959.2 3672.56 1959.2 c
-3680.48 1959.2 3687.86 1962.98 3698.84 1972.34 c
-3699.74 1962.8 3702.98 1959.2 3710.36 1959.2 c
-3716.48 1959.2 3720.26 1961.36 3726.56 1968.2 c
-h
-3698 1983.14 m
-3698 1977.56 3697.23 1975.94 3693.98 1973.6 c
-3689.66 1971.08 3684.62 1969.2 3680.84 1969.2 c
-3674.54 1969.2 3669.48 1975.51 3669.48 1983.5 c
-3669.48 1984.22 l
-3669.48 1994.84 3676.7 2001.32 3698 2009.24 c
-h
-3726.92 1961 m
-f*
-3727.62 2031.74 m
-3729.24 2031.92 3730.5 2031.92 3732.12 2031.92 c
-3738.24 2031.92 3740 2030.12 3740 2021.66 c
-3740 1937.42 l
-3740 1928.06 3737.94 1926.08 3726.9 1925 c
-3726.9 1922 l
-3770.46 1922 l
-3770.46 1925 l
-3756.96 1925.18 3755 1927.19 3755 1938.68 c
-3755 1966.94 l
-3761.34 1961 3765.4 1959.2 3772.8 1959.2 c
-3794.22 1959.2 3810 1979.36 3810 2005.46 c
-3810 2027.78 3797.65 2043.8 3780.54 2043.8 c
-3770.61 2043.8 3762.8 2039.48 3755 2029.58 c
-3755 2043.44 l
-3753.54 2043.8 l
-3744 2040.02 3737.52 2037.68 3727.62 2034.62 c
-h
-3755 2021.12 m
-3755 2026.52 3764.87 2032.8 3772.98 2032.8 c
-3786.3 2032.8 3795 2019.2 3795 1998.26 c
-3795 1978.46 3786.23 1964.2 3773.34 1964.2 c
-3764.88 1964.2 3755 1971.09 3755 1976.84 c
-h
-3816 1961 m
-f*
-3817.62 2031.74 m
-3819.24 2031.92 3820.5 2031.92 3822.12 2031.92 c
-3828.24 2031.92 3830 2030.12 3830 2021.66 c
-3830 1937.42 l
-3830 1928.06 3827.94 1926.08 3816.9 1925 c
-3816.9 1922 l
-3860.46 1922 l
-3860.46 1925 l
-3846.96 1925.18 3845 1927.19 3845 1938.68 c
-3845 1966.94 l
-3851.34 1961 3855.4 1959.2 3862.8 1959.2 c
-3884.22 1959.2 3900 1979.36 3900 2005.46 c
-3900 2027.78 3887.65 2043.8 3870.54 2043.8 c
-3860.61 2043.8 3852.8 2039.48 3845 2029.58 c
-3845 2043.44 l
-3843.54 2043.8 l
-3834 2040.02 3827.52 2037.68 3817.62 2034.62 c
-h
-3845 2021.12 m
-3845 2026.52 3854.87 2032.8 3862.98 2032.8 c
-3876.3 2032.8 3885 2019.2 3885 1998.26 c
-3885 1978.46 3876.23 1964.2 3863.34 1964.2 c
-3854.88 1964.2 3845 1971.09 3845 1976.84 c
-h
-3906 1961 m
-f*
-3937.5 2043.8 m
-3909.6 2033.9 l
-3909.6 2031.2 l
-3911.04 2031.38 l
-3913.2 2031.74 3915.54 2031.72 3917.16 2031.72 c
-3921.48 2031.72 3923 2028.89 3923 2021.12 c
-3923 1979.36 l
-3923 1966.4 3921.21 1964.42 3908.88 1963.7 c
-3908.88 1961 l
-3951.54 1961 l
-3951.54 1963.7 l
-3939.66 1964.6 3938 1966.4 3938 1979.36 c
-3938 2043.26 l
-h
-3929.22 2084 m
-3924.18 2084 3920 2079.83 3920 2074.76 c
-3920 2069.54 3923.98 2066 3929.04 2066 c
-3934.44 2066 3939 2069.78 3939 2074.76 c
-3939 2079.8 3934.59 2084 3929.22 2084 c
-h
-3956.04 1961 m
-f*
-3958.88 2032.64 m
-3960.14 2033.18 3961.76 2033.36 3963.74 2033.36 c
-3968.78 2033.36 3970 2030.66 3970 2021.84 c
-3970 1977.2 l
-3970 1966.94 3968.09 1964.42 3959.24 1963.7 c
-3959.24 1961 l
-3997.4 1961 l
-3997.4 1963.7 l
-3988.22 1964.42 3985 1966.58 3985 1973.06 c
-3985 2023.64 l
-3993.7 2031.74 3997.95 2033.8 4004.06 2033.8 c
-4012.88 2033.8 4017 2028.25 4017 2016.44 c
-4017 1978.82 l
-4017 1967.48 4014.7 1964.42 4005.86 1963.7 c
-4005.86 1961 l
-4043.3 1961 l
-4043.3 1963.7 l
-4034.48 1964.6 4032 1966.76 4032 1975.58 c
-4032 2016.8 l
-4032 2033.72 4024.2 2043.8 4011.08 2043.8 c
-4002.64 2043.8 3996.94 2040.74 3984.46 2029.22 c
-3984.46 2043.44 l
-3983.72 2043.8 l
-3974.9 2040.56 3968.78 2038.58 3958.88 2035.7 c
-h
-4046 1961 m
-f*
-4130.6 2031 m
-4130.6 2038 l
-4116.74 2038 l
-4113.14 2038 4110.44 2038.5 4106.84 2039.66 c
-4102.88 2041.1 l
-4098.02 2042.9 4093.16 2043.8 4088.48 2043.8 c
-4071.74 2043.8 4058.38 2030.84 4058.38 2014.46 c
-4058.38 2003.12 4063.07 1996.28 4075.16 1990.34 c
-4072.64 1987.82 4070.12 1985.48 4067.42 1983.14 c
-4061.48 1977.92 4059.1 1974.32 4059.1 1970.72 c
-4059.1 1966.76 4061.09 1964.78 4068.68 1961.18 c
-4055.72 1951.82 4051 1945.88 4051 1939.22 c
-4051 1929.68 4064.88 1922 4082.18 1922 c
-4095.14 1922 4108.82 1926.23 4118.18 1933.28 c
-4125.56 1939.04 4129 1944.98 4129 1952.18 c
-4129 1963.34 4120.53 1970.9 4107.2 1971.44 c
-4083.98 1972.52 l
-4074.26 1972.88 4069.94 1974.5 4069.94 1977.38 c
-4069.94 1980.98 4075.88 1987.28 4080.74 1988.72 c
-4084.16 1988.36 l
-4087.4 1988 4089.92 1988 4091 1988 c
-4097.3 1988 4104.32 1990.46 4109.72 1994.84 c
-4116.2 1999.88 4119 2006.36 4119 2015.72 c
-4119 2021 4118.12 2025.18 4115.66 2031 c
-h
-4072.46 1960.64 m
-4078.58 1959.38 4092.8 1958.3 4101.62 1958.3 c
-4118 1958.3 4124 1956.14 4124 1949.48 c
-4124 1939.04 4110.3 1932 4089.74 1932 c
-4073.9 1932 4064 1937.23 4064 1945.16 c
-4064 1949.3 4065.55 1952 4072.46 1960.64 c
-h
-4073.36 2021.84 m
-4073.36 2032.46 4078.4 2038.8 4086.68 2038.8 c
-4092.26 2038.8 4096.94 2035.73 4099.82 2030.3 c
-4103.24 2024 4105 2015.9 4105 2008.52 c
-4105 1998.62 4099.87 1993 4091.9 1993 c
-4080.74 1993 4073.36 2004.43 4073.36 2021.3 c
-h
-4136 1961 m
-f*
-4181 1961 m
-f*
-4184.06 2080 m
-4184.06 2077 l
-4199.18 2076.09 4201 2074.07 4201 2060.54 c
-4201 1980.62 l
-4201 1967.3 4198.71 1964.96 4184.06 1964.42 c
-4184.06 1961 l
-4244.18 1961 l
-4271 1961 4288 1973.42 4288 1993.4 c
-4288 2001.32 4284.85 2008.52 4278.92 2013.74 c
-4273.52 2018.6 4268.66 2020.94 4256.96 2023.64 c
-4266.32 2025.98 4270.1 2027.78 4274.42 2031.56 c
-4278.92 2035.52 4282 2042.18 4282 2049.56 c
-4282 2069.72 4265.85 2080 4234.46 2080 c
-h
-4220 2019.68 m
-4236.94 2019.68 4244.78 2018.78 4251.56 2016.26 c
-4262 2012.12 4267 2004.74 4267 1993.22 c
-4267 1983.5 4263.23 1976.48 4256.06 1972.34 c
-4250.3 1968.92 4243.1 1968 4230.5 1968 c
-4222.22 1968 4220 1969.55 4220 1975.04 c
-h
-4220 2026.88 m
-4220 2068.1 l
-4220 2071.88 4221.16 2073 4223.66 2073 c
-4231.58 2073 l
-4252.28 2073 4263 2064.71 4263 2048.84 c
-4263 2034.8 4253.55 2026.88 4236.8 2026.88 c
-h
-4301.06 1961 m
-f*
-2645.6 2822 m
-2643.98 2862.52 l
-2640.2 2862.52 l
-2639.12 2858.84 2636.24 2856.58 2632.82 2856.58 c
-2631.02 2856.58 2628.5 2857.17 2625.62 2858.36 c
-2616.8 2861.24 2607.98 2862.52 2599.16 2862.52 c
-2585.3 2862.52 2571.08 2857.36 2560.1 2848.46 c
-2546.42 2837.12 2539 2820.02 2539 2799.5 c
-2539 2762.96 2562.96 2738.48 2598.8 2738.48 c
-2619.14 2738.48 2636.96 2746.76 2647.94 2761.34 c
-2644.7 2764.58 l
-2631.38 2751.8 2619.5 2746.48 2604.56 2746.48 c
-2593.76 2746.48 2584.04 2749.69 2576.48 2755.94 c
-2565.86 2764.76 2560 2780.96 2560 2801.84 c
-2560 2834.42 2576.71 2855.52 2602.76 2855.52 c
-2613.2 2855.52 2622.38 2851.73 2629.58 2844.5 c
-2635.34 2838.74 2638.04 2833.7 2641.46 2822 c
-h
-2654.06 2741 m
-f*
-2657.14 2812.64 m
-2659.48 2813.18 2660.92 2813.36 2662.9 2813.36 c
-2667.58 2813.36 2669 2810.48 2669 2801.84 c
-2669 2756.3 l
-2669 2746.58 2666.52 2743.88 2656.6 2743.7 c
-2656.6 2741 l
-2696.56 2741 l
-2696.56 2744 l
-2687.02 2744.35 2684 2746.27 2684 2753.06 c
-2684 2803.82 l
-2684 2804.18 2685.23 2805.44 2686.66 2806.88 c
-2690.98 2811.2 2699.08 2814.8 2705.74 2814.8 c
-2713.48 2814.8 2718 2808.2 2718 2795.54 c
-2718 2756.48 l
-2718 2746.4 2715.93 2744.42 2705.2 2743.7 c
-2705.2 2741 l
-2745.52 2741 l
-2745.52 2744 l
-2735.26 2744.18 2733 2747.17 2733 2758.1 c
-2733 2803.46 l
-2738.28 2811.2 2743.91 2814.8 2752.18 2814.8 c
-2762.44 2814.8 2766 2809.85 2766 2794.64 c
-2766 2756.66 l
-2766 2746.4 2764.52 2744.96 2753.8 2743.7 c
-2753.8 2741 l
-2793.22 2741 l
-2793.22 2743.7 l
-2788.54 2744.06 l
-2783.14 2744.42 2781 2747.66 2781 2754.68 c
-2781 2791.76 l
-2781 2813 2773.91 2823.8 2759.92 2823.8 c
-2749.48 2823.8 2740.3 2819.12 2730.58 2808.68 c
-2727.34 2818.94 2721.22 2823.8 2711.5 2823.8 c
-2703.31 2823.8 2698.57 2821.46 2683.28 2809.94 c
-2683.28 2823.44 l
-2682.34 2823.8 l
-2673.16 2820.38 2667.04 2818.4 2657.14 2815.7 c
-h
-2794.04 2741 m
-f*
-2794.62 2811.74 m
-2796.24 2811.92 2797.5 2811.92 2799.12 2811.92 c
-2805.24 2811.92 2807 2810.12 2807 2801.66 c
-2807 2717.42 l
-2807 2708.06 2804.94 2706.08 2793.9 2705 c
-2793.9 2702 l
-2837.46 2702 l
-2837.46 2705 l
-2823.96 2705.18 2822 2707.19 2822 2718.68 c
-2822 2746.94 l
-2828.34 2741 2832.4 2739.2 2839.8 2739.2 c
-2861.22 2739.2 2877 2759.36 2877 2785.46 c
-2877 2807.78 2864.65 2823.8 2847.54 2823.8 c
-2837.61 2823.8 2829.8 2819.48 2822 2809.58 c
-2822 2823.44 l
-2820.54 2823.8 l
-2811 2820.02 2804.52 2817.68 2794.62 2814.62 c
-h
-2822 2801.12 m
-2822 2806.52 2831.87 2812.8 2839.98 2812.8 c
-2853.3 2812.8 2862 2799.2 2862 2778.26 c
-2862 2758.46 2853.23 2744.2 2840.34 2744.2 c
-2831.88 2744.2 2822 2751.09 2822 2756.84 c
-h
-2883 2741 m
-f*
-3004 2844.14 m
-3004 2762.6 l
-3004 2747.66 3001.88 2745.32 2987.94 2744.42 c
-2987.94 2741 l
-3038.34 2741 l
-3038.34 2744.42 l
-3025.2 2745.32 3023 2747.84 3023 2760.62 c
-3023 2840.54 l
-3023 2853.32 3025.29 2855.66 3038.34 2856.74 c
-3038.34 2860 l
-3002.52 2860 l
-2962.74 2769.26 l
-2921.16 2860 l
-2885.52 2860 l
-2885.52 2857 l
-2900.28 2856.09 2903 2853.89 2903 2840.54 c
-2903 2767.46 l
-2903 2748.92 2900.43 2745.5 2885.16 2744.42 c
-2885.16 2741 l
-2927.46 2741 l
-2927.46 2744 l
-2913.6 2744.73 2911 2748.95 2911 2767.46 c
-2911 2840 l
-2955.72 2741 l
-2958.24 2741 l
-h
-3043.02 2741 m
-f*
-3123.56 2752.88 m
-3120.5 2750.36 3118.34 2749.2 3115.64 2749.2 c
-3111.5 2749.2 3110 2751.78 3110 2759.9 c
-3110 2795 l
-3110 2804.18 3109.16 2809.22 3106.82 2813.36 c
-3103.04 2820.2 3095.3 2823.8 3084.32 2823.8 c
-3075.14 2823.8 3066.5 2821.28 3061.46 2817.14 c
-3056.96 2813.36 3054 2808.14 3054 2803.64 c
-3054 2799.5 3057.46 2795.9 3061.82 2795.9 c
-3066.14 2795.9 3069.92 2799.5 3069.92 2803.46 c
-3069.92 2804.18 3069.74 2805.08 3069.56 2806.34 c
-3069.2 2807.96 3069 2809.4 3069 2810.66 c
-3069 2815.52 3074.77 2819.8 3081.98 2819.8 c
-3090.8 2819.8 3095 2814.47 3095 2804.54 c
-3095 2793.56 l
-3067.76 2782.4 3064.75 2780.96 3057.14 2774.12 c
-3053.18 2770.52 3050.66 2764.4 3050.66 2758.46 c
-3050.66 2747.12 3058.4 2739.2 3069.56 2739.2 c
-3077.48 2739.2 3084.86 2742.98 3095.84 2752.34 c
-3096.74 2742.8 3099.98 2739.2 3107.36 2739.2 c
-3113.48 2739.2 3117.26 2741.36 3123.56 2748.2 c
-h
-3095 2763.14 m
-3095 2757.56 3094.23 2755.94 3090.98 2753.6 c
-3086.66 2751.08 3081.62 2749.2 3077.84 2749.2 c
-3071.54 2749.2 3066.48 2755.51 3066.48 2763.5 c
-3066.48 2764.22 l
-3066.48 2774.84 3073.7 2781.32 3095 2789.24 c
-h
-3123.92 2741 m
-f*
-3124.62 2811.74 m
-3126.24 2811.92 3127.5 2811.92 3129.12 2811.92 c
-3135.24 2811.92 3137 2810.12 3137 2801.66 c
-3137 2717.42 l
-3137 2708.06 3134.94 2706.08 3123.9 2705 c
-3123.9 2702 l
-3167.46 2702 l
-3167.46 2705 l
-3153.96 2705.18 3152 2707.19 3152 2718.68 c
-3152 2746.94 l
-3158.34 2741 3162.4 2739.2 3169.8 2739.2 c
-3191.22 2739.2 3207 2759.36 3207 2785.46 c
-3207 2807.78 3194.65 2823.8 3177.54 2823.8 c
-3167.61 2823.8 3159.8 2819.48 3152 2809.58 c
-3152 2823.44 l
-3150.54 2823.8 l
-3141 2820.02 3134.52 2817.68 3124.62 2814.62 c
-h
-3152 2801.12 m
-3152 2806.52 3161.87 2812.8 3169.98 2812.8 c
-3183.3 2812.8 3192 2799.2 3192 2778.26 c
-3192 2758.46 3183.23 2744.2 3170.34 2744.2 c
-3161.88 2744.2 3152 2751.09 3152 2756.84 c
-h
-3213 2741 m
-f*
-1 i
-483.35 2212.55 319.2 15.5999 re
-Y
-480.95 2220.95 m
-795.35 2220.95 l
-S
-0 0 6120 7920 re
-Y
-522.95 2222.15 m
-522.95 2243.75 504.95 2261.75 483.35 2261.75 c
-460.55 2261.75 442.55 2243.75 442.55 2222.15 c
-442.55 2200.55 460.55 2182.55 483.35 2182.55 c
-504.95 2182.55 522.95 2200.55 522.95 2222.15 c
-f*
-753.35 2172.95 m
-772.55 2220.95 l
-753.35 2268.95 l
-905.75 2220.95 l
-f*
-483.35 1792.55 319.2 15.5999 re
-Y
-480.95 1800.95 m
-795.35 1800.95 l
-S
-0 0 6120 7920 re
-Y
-522.95 1802.15 m
-522.95 1823.75 504.95 1841.75 483.35 1841.75 c
-460.55 1841.75 442.55 1823.75 442.55 1802.15 c
-442.55 1780.55 460.55 1762.55 483.35 1762.55 c
-504.95 1762.55 522.95 1780.55 522.95 1802.15 c
-f*
-753.35 1752.95 m
-772.55 1800.95 l
-753.35 1848.95 l
-905.75 1800.95 l
-f*
-4966.55 2212.55 333.6 16.7996 re
-Y
-4966.55 2222.15 m
-5291.75 2220.95 l
-S
-0 0 6120 7920 re
-Y
-5004.95 2223.35 m
-5004.95 2244.95 4986.95 2262.95 4965.35 2262.95 c
-4942.55 2262.95 4924.55 2244.95 4924.55 2223.35 c
-4924.55 2201.75 4942.55 2183.75 4965.35 2183.75 c
-4986.95 2183.75 5004.95 2201.75 5004.95 2223.35 c
-f*
-5253.35 2172.95 m
-5272.55 2220.95 l
-5253.35 2268.95 l
-5405.75 2220.95 l
-f*
-4968.95 1791.35 330 16.7996 re
-Y
-4968.95 1799.75 m
-5290.55 1800.95 l
-S
-0 0 6120 7920 re
-Y
-5007.35 1800.95 m
-5007.35 1822.55 4989.35 1840.55 4967.75 1840.55 c
-4944.95 1840.55 4926.95 1822.55 4926.95 1800.95 c
-4926.95 1779.35 4944.95 1761.35 4967.75 1761.35 c
-4989.35 1761.35 5007.35 1779.35 5007.35 1800.95 c
-f*
-5253.35 1752.95 m
-5272.55 1800.95 l
-5253.35 1848.95 l
-5405.75 1800.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 1235 a FG(Figure)36 b(2:)52 b(A)35 b(CmpMap)g(\(comp)s
-(ound)f(Mapping\))i(comp)s(osed)g(of)f(t)m(w)m(o)i(comp)s(onen)m(t)f
-(Mappings)f(joined)h(in)0 1348 y(series.)j(The)25 b(output)g(co)s
-(ordinates)g(of)h(the)f(\014rst)f(Mapping)h(feed)g(in)m(to)i(the)e
-(input)f(co)s(ordinates)i(of)f(the)g(second)0 1461 y(one,)31
-b(so)g(that)g(the)f(whole)h(en)m(tit)m(y)h(b)s(eha)m(v)m(es)f(lik)m(e)g
-(a)g(single)g(Mapping.)136 1838 y Fu(\017)46 b FG(Con)m(v)m(ersions)31
-b(b)s(et)m(w)m(een)g(v)-5 b(arious)30 b(time)i(systems)e(\(the)h
-(TimeMap\).)136 2030 y Fu(\017)46 b FG(Con)m(v)m(ersion)31
-b(b)s(et)m(w)m(een)f(2-dimensional)h(spherical)f(celestial)i(co)s
-(ordinates)f(\(longitude)g(and)e(latitude\))227 2143
-y(and)h(a)h(3-dimensional)g(v)m(ectorial)i(p)s(ositions)d(\(the)h
-(SphMap\).)136 2336 y Fu(\017)46 b FG(V)-8 b(arious)26
-b(pro)5 b(jections)25 b(of)g(the)h(celestial)h(sphere)d(on)h(to)h
-(2-dimensional)f(co)s(ordinate)h(spaces|)p Fx(i.e.)f
-FG(map)227 2449 y(pro)5 b(jections)31 b(\(the)g(DssMap)g(and)f
-(WcsMap\).)136 2641 y Fu(\017)46 b FG(P)m(erm)m(utation,)32
-b(in)m(tro)s(duction)f(and)f(elimination)h(of)g(co)s(ordinates)g(\(the)
-g(P)m(ermMap\).)136 2833 y Fu(\017)46 b FG(V)-8 b(arious)21
-b(linear)g(co)s(ordinate)g(transformations)f(\(the)h(MatrixMap,)j
-(WinMap,)f(ShiftMap)d(and)g(Zo)s(omMap\).)136 3026 y
-Fu(\017)46 b FG(General)32 b(N-dimensional)f(p)s(olynomial)f
-(transformations)h(\(the)g(P)m(olyMap\).)136 3218 y Fu(\017)46
-b FG(Lo)s(okup)30 b(tables)h(\(the)g(LutMap\).)136 3411
-y Fu(\017)46 b FG(General-purp)s(ose)24 b(transformations)h(expressed)f
-(using)f(arithmetic)j(op)s(erations)f(and)e(functions)h(sim-)227
-3524 y(ilar)31 b(to)g(those)g(a)m(v)-5 b(ailable)33 b(in)d(F)-8
-b(ortran)31 b(\(the)g(MathMap\).)136 3716 y Fu(\017)46
-b FG(T)-8 b(ransformations)33 b(for)f(in)m(ternal)i(use)e(within)h(a)g
-(program,)g(based)g(on)f(priv)-5 b(ate)34 b(transformation)f(rou-)227
-3829 y(tines)e(whic)m(h)f(y)m(ou)h(write)f(y)m(ourself)h(in)f(F)-8
-b(ortran)31 b(\(the)g(In)m(traMap\).)0 4098 y FE(F)-9
-b(urther)34 b(reading:)41 b FG(F)-8 b(or)30 b(a)g(more)g(complete)h
-(description)f(of)g(eac)m(h)h(of)f(the)g(Mappings)g(men)m(tioned)g(ab)s
-(o)m(v)m(e,)0 4211 y(see)42 b(its)h(en)m(try)f(in)f(App)s(endix)g(D.)75
-b(In)41 b(addition,)46 b(see)c(the)g(discussion)f(of)h(the)h(P)m
-(ermMap)f(in)f Fu(x)p FG(5.10,)47 b(the)0 4324 y(UnitMap)28
-b(in)f Fu(x)p FG(5.9)i(and)e(the)g(In)m(traMap)h(in)f
-Fu(x)p FG(20.)41 b(The)27 b(Zo)s(omMap)g(is)h(used)e(as)i(an)f(example)
-h(throughout)f Fu(x)p FG(4.)0 4625 y Fw(2.3)112 b(Comp)s(ound)39
-b(Mappings)0 4850 y FG(The)27 b(Mappings)f(describ)s(ed)g(in)h
-Fu(x)p FG(2.2)i(pro)m(vide)e(a)g(set)h(of)f(basic)h(building)e(blo)s(c)
-m(ks)h(from)g(whic)m(h)g(more)g(complex)0 4963 y(Mappings)f(ma)m(y)h(b)
-s(e)e(constructed.)40 b(The)25 b(k)m(ey)i(to)g(doing)f(this)g(is)g(a)h
-(t)m(yp)s(e)f(of)g(Mapping)g(called)i(a)e(CmpMap,)g(or)0
-5076 y(comp)s(ound)k(Mapping.)42 b(A)31 b(CmpMap's)f(role)i(is,)f(in)g
-(principle,)g(v)m(ery)g(simple:)42 b(it)32 b(allo)m(ws)g(an)m(y)f
-(other)h(pair)e(of)0 5189 y(Mappings)c(to)h(b)s(e)e(joined)h(together)h
-(in)m(to)g(a)f(single)h(en)m(tit)m(y)h(whic)m(h)e(b)s(eha)m(v)m(es)g
-(as)g(if)g(it)h(w)m(ere)f(a)h(single)f(Mapping.)0 5302
-y(A)k(CmpMap)g(is)g(therefore)h(a)g(con)m(tainer)h(for)e(another)g
-(pair)h(of)f(Mappings.)0 5467 y(A)c(pair)h(of)f(Mappings)g(ma)m(y)h(b)s
-(e)f(com)m(bined)g(using)g(a)h(CmpMap)f(in)g(either)g(of)h(t)m(w)m(o)h
-(w)m(a)m(ys.)40 b(The)26 b(\014rst)f(of)i(these,)0 5580
-y Fx(in)g(series,)e FG(is)f(illustrated)g(in)g(Figure)g(2.)116
-b(Here,)26 b(the)e(transformations)g(implemen)m(ted)g(b)m(y)g(eac)m(h)h
-(comp)s(onen)m(t)0 5693 y(Mapping)i(are)g(p)s(erformed)e(one)h(after)i
-(the)e(other,)i(with)e(the)h(output)f(from)h(the)f(\014rst)g(Mapping)h
-(feeding)f(in)m(to)p eop end
-%%Page: 7 17
-TeXDict begin 7 16 bop 0 52 a Fz(2.4)92 b(Represen)m(ting)31
-b(Co)s(ordinate)f(Systems)2188 b FG(7)918 1916 y @beginspecial
-152 @llx 155 @lly 463 @urx 420 @ury 2332 @rwi @setspecial
-%%BeginDocument: sun210_figures/parallel.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 152 155 463 420
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/05 14:50:56
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-4253.75 3863.75 m
-4253.75 4016.15 4128.95 4140.95 3976.55 4140.95 c
-2309.75 4140.95 l
-2157.35 4140.95 2032.55 4016.15 2032.55 3863.75 c
-2032.55 1836.95 l
-2032.55 1684.55 2157.35 1559.75 2309.75 1559.75 c
-3976.55 1559.75 l
-4128.95 1559.75 4253.75 1684.55 4253.75 1836.95 c
-f*
-1 g
-4188.95 3918.95 m
-4188.95 4071.35 4065.35 4194.95 3912.95 4194.95 c
-2254.55 4194.95 l
-2102.15 4194.95 1978.55 4071.35 1978.55 3918.95 c
-1978.55 1900.55 l
-1978.55 1748.15 2102.15 1624.55 2254.55 1624.55 c
-3912.95 1624.55 l
-4065.35 1624.55 4188.95 1748.15 4188.95 1900.55 c
-f*
-8 w
-1 J
-1 j
-0 g
-4188.95 3918.95 m
-4188.95 4071.35 4065.35 4194.95 3912.95 4194.95 c
-2254.55 4194.95 l
-2102.15 4194.95 1978.55 4071.35 1978.55 3918.95 c
-1978.55 1900.55 l
-1978.55 1748.15 2102.15 1624.55 2254.55 1624.55 c
-3912.95 1624.55 l
-4065.35 1624.55 4188.95 1748.15 4188.95 1900.55 c
-h
-S
-1983.35 3352.55 308.4 103.2 re
-Y
-1983.35 3360.95 m
-2283.35 3448.55 l
-S
-0 0 6120 7920 re
-Y
-2022.95 3362.15 m
-2022.95 3383.75 2004.95 3401.75 1983.35 3401.75 c
-1960.55 3401.75 1942.55 3383.75 1942.55 3362.15 c
-1942.55 3340.55 1960.55 3322.55 1983.35 3322.55 c
-2004.95 3322.55 2022.95 3340.55 2022.95 3362.15 c
-f*
-2259.35 3392.15 m
-2265.35 3442.55 l
-2234.15 3482.15 l
-2393.75 3479.75 l
-f*
-0.564706 g
-3833.75 3651.35 m
-3833.75 3722.15 3776.15 3780.95 3704.15 3780.95 c
-2582.15 3780.95 l
-2510.15 3780.95 2452.55 3722.15 2452.55 3651.35 c
-2452.55 2872.55 l
-2452.55 2800.55 2510.15 2742.95 2582.15 2742.95 c
-3704.15 2742.95 l
-3776.15 2742.95 3833.75 2800.55 3833.75 2872.55 c
-f*
-1 g
-3768.95 3706.55 m
-3768.95 3777.35 3712.55 3834.95 3640.55 3834.95 c
-2526.95 3834.95 l
-2456.15 3834.95 2398.55 3777.35 2398.55 3706.55 c
-2398.55 2934.95 l
-2398.55 2865.35 2456.15 2807.75 2526.95 2807.75 c
-3640.55 2807.75 l
-3711.35 2807.75 3768.95 2865.35 3768.95 2934.95 c
-f*
-0 g
-3768.95 3706.55 m
-3768.95 3777.35 3712.55 3834.95 3640.55 3834.95 c
-2526.95 3834.95 l
-2456.15 3834.95 2398.55 3777.35 2398.55 3706.55 c
-2398.55 2934.95 l
-2398.55 2865.35 2456.15 2807.75 2526.95 2807.75 c
-3640.55 2807.75 l
-3711.35 2807.75 3768.95 2865.35 3768.95 2934.95 c
-h
-S
-0.564706 g
-3833.75 2325.35 m
-3833.75 2367.35 3800.15 2400.95 3758.15 2400.95 c
-2528.15 2400.95 l
-2486.15 2400.95 2452.55 2367.35 2452.55 2325.35 c
-2452.55 1875.35 l
-2452.55 1833.35 2486.15 1799.75 2528.15 1799.75 c
-3758.15 1799.75 l
-3800.15 1799.75 3833.75 1833.35 3833.75 1875.35 c
-f*
-1 g
-3768.95 2381.75 m
-3768.95 2422.55 3736.55 2454.95 3694.55 2454.95 c
-2472.95 2454.95 l
-2430.95 2454.95 2398.55 2422.55 2398.55 2381.75 c
-2398.55 1937.75 l
-2398.55 1896.95 2430.95 1864.55 2472.95 1864.55 c
-3694.55 1864.55 l
-3736.55 1864.55 3768.95 1896.95 3768.95 1937.75 c
-f*
-0 g
-3768.95 2381.75 m
-3768.95 2422.55 3736.55 2454.95 3694.55 2454.95 c
-2472.95 2454.95 l
-2430.95 2454.95 2398.55 2422.55 2398.55 2381.75 c
-2398.55 1937.75 l
-2398.55 1896.95 2430.95 1864.55 2472.95 1864.55 c
-3694.55 1864.55 l
-3736.55 1864.55 3768.95 1896.95 3768.95 1937.75 c
-h
-S
-1983.35 2932.55 320.4 190.8 re
-Y
-1983.35 2940.95 m
-2295.35 3123.35 l
-S
-0 0 6120 7920 re
-Y
-2022.95 2942.15 m
-2022.95 2963.75 2004.95 2981.75 1983.35 2981.75 c
-1960.55 2981.75 1942.55 2963.75 1942.55 2942.15 c
-1942.55 2920.55 1960.55 2902.55 1983.35 2902.55 c
-2004.95 2902.55 2022.95 2920.55 2022.95 2942.15 c
-f*
-2285.75 3062.15 m
-2277.35 3112.55 l
-2237.75 3144.95 l
-2393.75 3179.75 l
-f*
-0.2 i
-2762 3384.14 m
-2762 3302.6 l
-2762 3287.66 2759.88 3285.32 2745.94 3284.42 c
-2745.94 3281 l
-2796.34 3281 l
-2796.34 3284.42 l
-2783.2 3285.32 2781 3287.84 2781 3300.62 c
-2781 3380.54 l
-2781 3393.32 2783.29 3395.66 2796.34 3396.74 c
-2796.34 3400 l
-2760.52 3400 l
-2720.74 3309.26 l
-2679.16 3400 l
-2643.52 3400 l
-2643.52 3397 l
-2658.28 3396.09 2661 3393.89 2661 3380.54 c
-2661 3307.46 l
-2661 3288.92 2658.43 3285.5 2643.16 3284.42 c
-2643.16 3281 l
-2685.46 3281 l
-2685.46 3284 l
-2671.6 3284.73 2669 3288.95 2669 3307.46 c
-2669 3380 l
-2713.72 3281 l
-2716.24 3281 l
-h
-2801.02 3281 m
-f*
-2880.56 3292.88 m
-2877.5 3290.36 2875.34 3289.2 2872.64 3289.2 c
-2868.5 3289.2 2867 3291.78 2867 3299.9 c
-2867 3335 l
-2867 3344.18 2866.16 3349.22 2863.82 3353.36 c
-2860.04 3360.2 2852.3 3363.8 2841.32 3363.8 c
-2832.14 3363.8 2823.5 3361.28 2818.46 3357.14 c
-2813.96 3353.36 2811 3348.14 2811 3343.64 c
-2811 3339.5 2814.46 3335.9 2818.82 3335.9 c
-2823.14 3335.9 2826.92 3339.5 2826.92 3343.46 c
-2826.92 3344.18 2826.74 3345.08 2826.56 3346.34 c
-2826.2 3347.96 2826 3349.4 2826 3350.66 c
-2826 3355.52 2831.77 3359.8 2838.98 3359.8 c
-2847.8 3359.8 2852 3354.47 2852 3344.54 c
-2852 3333.56 l
-2824.76 3322.4 2821.75 3320.96 2814.14 3314.12 c
-2810.18 3310.52 2807.66 3304.4 2807.66 3298.46 c
-2807.66 3287.12 2815.4 3279.2 2826.56 3279.2 c
-2834.48 3279.2 2841.86 3282.98 2852.84 3292.34 c
-2853.74 3282.8 2856.98 3279.2 2864.36 3279.2 c
-2870.48 3279.2 2874.26 3281.36 2880.56 3288.2 c
-h
-2852 3303.14 m
-2852 3297.56 2851.23 3295.94 2847.98 3293.6 c
-2843.66 3291.08 2838.62 3289.2 2834.84 3289.2 c
-2828.54 3289.2 2823.48 3295.51 2823.48 3303.5 c
-2823.48 3304.22 l
-2823.48 3314.84 2830.7 3321.32 2852 3329.24 c
-h
-2880.92 3281 m
-f*
-2882.62 3351.74 m
-2884.24 3351.92 2885.5 3351.92 2887.12 3351.92 c
-2893.24 3351.92 2895 3350.12 2895 3341.66 c
-2895 3257.42 l
-2895 3248.06 2892.94 3246.08 2881.9 3245 c
-2881.9 3242 l
-2925.46 3242 l
-2925.46 3245 l
-2911.96 3245.18 2910 3247.19 2910 3258.68 c
-2910 3286.94 l
-2916.34 3281 2920.4 3279.2 2927.8 3279.2 c
-2949.22 3279.2 2965 3299.36 2965 3325.46 c
-2965 3347.78 2952.65 3363.8 2935.54 3363.8 c
-2925.61 3363.8 2917.8 3359.48 2910 3349.58 c
-2910 3363.44 l
-2908.54 3363.8 l
-2899 3360.02 2892.52 3357.68 2882.62 3354.62 c
-h
-2910 3341.12 m
-2910 3346.52 2919.87 3352.8 2927.98 3352.8 c
-2941.3 3352.8 2950 3339.2 2950 3318.26 c
-2950 3298.46 2941.23 3284.2 2928.34 3284.2 c
-2919.88 3284.2 2910 3291.09 2910 3296.84 c
-h
-2971 3281 m
-f*
-2972.62 3351.74 m
-2974.24 3351.92 2975.5 3351.92 2977.12 3351.92 c
-2983.24 3351.92 2985 3350.12 2985 3341.66 c
-2985 3257.42 l
-2985 3248.06 2982.94 3246.08 2971.9 3245 c
-2971.9 3242 l
-3015.46 3242 l
-3015.46 3245 l
-3001.96 3245.18 3000 3247.19 3000 3258.68 c
-3000 3286.94 l
-3006.34 3281 3010.4 3279.2 3017.8 3279.2 c
-3039.22 3279.2 3055 3299.36 3055 3325.46 c
-3055 3347.78 3042.65 3363.8 3025.54 3363.8 c
-3015.61 3363.8 3007.8 3359.48 3000 3349.58 c
-3000 3363.44 l
-2998.54 3363.8 l
-2989 3360.02 2982.52 3357.68 2972.62 3354.62 c
-h
-3000 3341.12 m
-3000 3346.52 3009.87 3352.8 3017.98 3352.8 c
-3031.3 3352.8 3040 3339.2 3040 3318.26 c
-3040 3298.46 3031.23 3284.2 3018.34 3284.2 c
-3009.88 3284.2 3000 3291.09 3000 3296.84 c
-h
-3061 3281 m
-f*
-3092.5 3363.8 m
-3064.6 3353.9 l
-3064.6 3351.2 l
-3066.04 3351.38 l
-3068.2 3351.74 3070.54 3351.72 3072.16 3351.72 c
-3076.48 3351.72 3078 3348.89 3078 3341.12 c
-3078 3299.36 l
-3078 3286.4 3076.21 3284.42 3063.88 3283.7 c
-3063.88 3281 l
-3106.54 3281 l
-3106.54 3283.7 l
-3094.66 3284.6 3093 3286.4 3093 3299.36 c
-3093 3363.26 l
-h
-3084.22 3404 m
-3079.18 3404 3075 3399.83 3075 3394.76 c
-3075 3389.54 3078.98 3386 3084.04 3386 c
-3089.44 3386 3094 3389.78 3094 3394.76 c
-3094 3399.8 3089.59 3404 3084.22 3404 c
-h
-3111.04 3281 m
-f*
-3113.88 3352.64 m
-3115.14 3353.18 3116.76 3353.36 3118.74 3353.36 c
-3123.78 3353.36 3125 3350.66 3125 3341.84 c
-3125 3297.2 l
-3125 3286.94 3123.09 3284.42 3114.24 3283.7 c
-3114.24 3281 l
-3152.4 3281 l
-3152.4 3283.7 l
-3143.22 3284.42 3140 3286.58 3140 3293.06 c
-3140 3343.64 l
-3148.7 3351.74 3152.95 3353.8 3159.06 3353.8 c
-3167.88 3353.8 3172 3348.25 3172 3336.44 c
-3172 3298.82 l
-3172 3287.48 3169.7 3284.42 3160.86 3283.7 c
-3160.86 3281 l
-3198.3 3281 l
-3198.3 3283.7 l
-3189.48 3284.6 3187 3286.76 3187 3295.58 c
-3187 3336.8 l
-3187 3353.72 3179.2 3363.8 3166.08 3363.8 c
-3157.64 3363.8 3151.94 3360.74 3139.46 3349.22 c
-3139.46 3363.44 l
-3138.72 3363.8 l
-3129.9 3360.56 3123.78 3358.58 3113.88 3355.7 c
-h
-3201 3281 m
-f*
-3285.6 3351 m
-3285.6 3358 l
-3271.74 3358 l
-3268.14 3358 3265.44 3358.5 3261.84 3359.66 c
-3257.88 3361.1 l
-3253.02 3362.9 3248.16 3363.8 3243.48 3363.8 c
-3226.74 3363.8 3213.38 3350.84 3213.38 3334.46 c
-3213.38 3323.12 3218.07 3316.28 3230.16 3310.34 c
-3227.64 3307.82 3225.12 3305.48 3222.42 3303.14 c
-3216.48 3297.92 3214.1 3294.32 3214.1 3290.72 c
-3214.1 3286.76 3216.09 3284.78 3223.68 3281.18 c
-3210.72 3271.82 3206 3265.88 3206 3259.22 c
-3206 3249.68 3219.88 3242 3237.18 3242 c
-3250.14 3242 3263.82 3246.23 3273.18 3253.28 c
-3280.56 3259.04 3284 3264.98 3284 3272.18 c
-3284 3283.34 3275.53 3290.9 3262.2 3291.44 c
-3238.98 3292.52 l
-3229.26 3292.88 3224.94 3294.5 3224.94 3297.38 c
-3224.94 3300.98 3230.88 3307.28 3235.74 3308.72 c
-3239.16 3308.36 l
-3242.4 3308 3244.92 3308 3246 3308 c
-3252.3 3308 3259.32 3310.46 3264.72 3314.84 c
-3271.2 3319.88 3274 3326.36 3274 3335.72 c
-3274 3341 3273.12 3345.18 3270.66 3351 c
-h
-3227.46 3280.64 m
-3233.58 3279.38 3247.8 3278.3 3256.62 3278.3 c
-3273 3278.3 3279 3276.14 3279 3269.48 c
-3279 3259.04 3265.3 3252 3244.74 3252 c
-3228.9 3252 3219 3257.23 3219 3265.16 c
-3219 3269.3 3220.55 3272 3227.46 3280.64 c
-h
-3228.36 3341.84 m
-3228.36 3352.46 3233.4 3358.8 3241.68 3358.8 c
-3247.26 3358.8 3251.94 3355.73 3254.82 3350.3 c
-3258.24 3344 3260 3335.9 3260 3328.52 c
-3260 3318.62 3254.87 3313 3246.9 3313 c
-3235.74 3313 3228.36 3324.43 3228.36 3341.3 c
-h
-3291 3281 m
-f*
-3336 3281 m
-f*
-3463.08 3284.42 m
-3454.98 3284.96 3453.18 3286.76 3446.88 3300.08 c
-3402.06 3402.16 l
-3398.46 3402.16 l
-3361.02 3313.94 l
-3349.5 3287.66 3347.34 3284.96 3338.7 3284.42 c
-3338.7 3281 l
-3374.34 3281 l
-3374.34 3284.82 l
-3365.7 3284.82 3362.1 3287.03 3362.1 3291.8 c
-3362.1 3293.96 3362.64 3296.48 3363.54 3298.82 c
-3371.82 3320 l
-3418.98 3320 l
-3426.36 3302.6 l
-3428.52 3297.56 3429.78 3293.06 3429.78 3290.36 c
-3429.78 3288.74 3428.7 3286.76 3427.26 3286.04 c
-3425.1 3284.78 3423.66 3284.82 3417.18 3284.82 c
-3417.18 3281 l
-3463.08 3281 l
-h
-3374.88 3327 m
-3395.58 3376.76 l
-3416.46 3327 l
-h
-3465.96 3281 m
-f*
-2827 2184.14 m
-2827 2102.6 l
-2827 2087.66 2824.88 2085.32 2810.94 2084.42 c
-2810.94 2081 l
-2861.34 2081 l
-2861.34 2084.42 l
-2848.2 2085.32 2846 2087.84 2846 2100.62 c
-2846 2180.54 l
-2846 2193.32 2848.29 2195.66 2861.34 2196.74 c
-2861.34 2200 l
-2825.52 2200 l
-2785.74 2109.26 l
-2744.16 2200 l
-2708.52 2200 l
-2708.52 2197 l
-2723.28 2196.09 2726 2193.89 2726 2180.54 c
-2726 2107.46 l
-2726 2088.92 2723.43 2085.5 2708.16 2084.42 c
-2708.16 2081 l
-2750.46 2081 l
-2750.46 2084 l
-2736.6 2084.73 2734 2088.95 2734 2107.46 c
-2734 2180 l
-2778.72 2081 l
-2781.24 2081 l
-h
-2866.02 2081 m
-f*
-2946.56 2092.88 m
-2943.5 2090.36 2941.34 2089.2 2938.64 2089.2 c
-2934.5 2089.2 2933 2091.78 2933 2099.9 c
-2933 2135 l
-2933 2144.18 2932.16 2149.22 2929.82 2153.36 c
-2926.04 2160.2 2918.3 2163.8 2907.32 2163.8 c
-2898.14 2163.8 2889.5 2161.28 2884.46 2157.14 c
-2879.96 2153.36 2877 2148.14 2877 2143.64 c
-2877 2139.5 2880.46 2135.9 2884.82 2135.9 c
-2889.14 2135.9 2892.92 2139.5 2892.92 2143.46 c
-2892.92 2144.18 2892.74 2145.08 2892.56 2146.34 c
-2892.2 2147.96 2892 2149.4 2892 2150.66 c
-2892 2155.52 2897.77 2159.8 2904.98 2159.8 c
-2913.8 2159.8 2918 2154.47 2918 2144.54 c
-2918 2133.56 l
-2890.76 2122.4 2887.75 2120.96 2880.14 2114.12 c
-2876.18 2110.52 2873.66 2104.4 2873.66 2098.46 c
-2873.66 2087.12 2881.4 2079.2 2892.56 2079.2 c
-2900.48 2079.2 2907.86 2082.98 2918.84 2092.34 c
-2919.74 2082.8 2922.98 2079.2 2930.36 2079.2 c
-2936.48 2079.2 2940.26 2081.36 2946.56 2088.2 c
-h
-2918 2103.14 m
-2918 2097.56 2917.23 2095.94 2913.98 2093.6 c
-2909.66 2091.08 2904.62 2089.2 2900.84 2089.2 c
-2894.54 2089.2 2889.48 2095.51 2889.48 2103.5 c
-2889.48 2104.22 l
-2889.48 2114.84 2896.7 2121.32 2918 2129.24 c
-h
-2946.92 2081 m
-f*
-2947.62 2151.74 m
-2949.24 2151.92 2950.5 2151.92 2952.12 2151.92 c
-2958.24 2151.92 2960 2150.12 2960 2141.66 c
-2960 2057.42 l
-2960 2048.06 2957.94 2046.08 2946.9 2045 c
-2946.9 2042 l
-2990.46 2042 l
-2990.46 2045 l
-2976.96 2045.18 2975 2047.19 2975 2058.68 c
-2975 2086.94 l
-2981.34 2081 2985.4 2079.2 2992.8 2079.2 c
-3014.22 2079.2 3030 2099.36 3030 2125.46 c
-3030 2147.78 3017.65 2163.8 3000.54 2163.8 c
-2990.61 2163.8 2982.8 2159.48 2975 2149.58 c
-2975 2163.44 l
-2973.54 2163.8 l
-2964 2160.02 2957.52 2157.68 2947.62 2154.62 c
-h
-2975 2141.12 m
-2975 2146.52 2984.87 2152.8 2992.98 2152.8 c
-3006.3 2152.8 3015 2139.2 3015 2118.26 c
-3015 2098.46 3006.23 2084.2 2993.34 2084.2 c
-2984.88 2084.2 2975 2091.09 2975 2096.84 c
-h
-3036 2081 m
-f*
-3037.62 2151.74 m
-3039.24 2151.92 3040.5 2151.92 3042.12 2151.92 c
-3048.24 2151.92 3050 2150.12 3050 2141.66 c
-3050 2057.42 l
-3050 2048.06 3047.94 2046.08 3036.9 2045 c
-3036.9 2042 l
-3080.46 2042 l
-3080.46 2045 l
-3066.96 2045.18 3065 2047.19 3065 2058.68 c
-3065 2086.94 l
-3071.34 2081 3075.4 2079.2 3082.8 2079.2 c
-3104.22 2079.2 3120 2099.36 3120 2125.46 c
-3120 2147.78 3107.65 2163.8 3090.54 2163.8 c
-3080.61 2163.8 3072.8 2159.48 3065 2149.58 c
-3065 2163.44 l
-3063.54 2163.8 l
-3054 2160.02 3047.52 2157.68 3037.62 2154.62 c
-h
-3065 2141.12 m
-3065 2146.52 3074.87 2152.8 3082.98 2152.8 c
-3096.3 2152.8 3105 2139.2 3105 2118.26 c
-3105 2098.46 3096.23 2084.2 3083.34 2084.2 c
-3074.88 2084.2 3065 2091.09 3065 2096.84 c
-h
-3126 2081 m
-f*
-3157.5 2163.8 m
-3129.6 2153.9 l
-3129.6 2151.2 l
-3131.04 2151.38 l
-3133.2 2151.74 3135.54 2151.72 3137.16 2151.72 c
-3141.48 2151.72 3143 2148.89 3143 2141.12 c
-3143 2099.36 l
-3143 2086.4 3141.21 2084.42 3128.88 2083.7 c
-3128.88 2081 l
-3171.54 2081 l
-3171.54 2083.7 l
-3159.66 2084.6 3158 2086.4 3158 2099.36 c
-3158 2163.26 l
-h
-3149.22 2204 m
-3144.18 2204 3140 2199.83 3140 2194.76 c
-3140 2189.54 3143.98 2186 3149.04 2186 c
-3154.44 2186 3159 2189.78 3159 2194.76 c
-3159 2199.8 3154.59 2204 3149.22 2204 c
-h
-3176.04 2081 m
-f*
-3178.88 2152.64 m
-3180.14 2153.18 3181.76 2153.36 3183.74 2153.36 c
-3188.78 2153.36 3190 2150.66 3190 2141.84 c
-3190 2097.2 l
-3190 2086.94 3188.09 2084.42 3179.24 2083.7 c
-3179.24 2081 l
-3217.4 2081 l
-3217.4 2083.7 l
-3208.22 2084.42 3205 2086.58 3205 2093.06 c
-3205 2143.64 l
-3213.7 2151.74 3217.95 2153.8 3224.06 2153.8 c
-3232.88 2153.8 3237 2148.25 3237 2136.44 c
-3237 2098.82 l
-3237 2087.48 3234.7 2084.42 3225.86 2083.7 c
-3225.86 2081 l
-3263.3 2081 l
-3263.3 2083.7 l
-3254.48 2084.6 3252 2086.76 3252 2095.58 c
-3252 2136.8 l
-3252 2153.72 3244.2 2163.8 3231.08 2163.8 c
-3222.64 2163.8 3216.94 2160.74 3204.46 2149.22 c
-3204.46 2163.44 l
-3203.72 2163.8 l
-3194.9 2160.56 3188.78 2158.58 3178.88 2155.7 c
-h
-3266 2081 m
-f*
-3350.6 2151 m
-3350.6 2158 l
-3336.74 2158 l
-3333.14 2158 3330.44 2158.5 3326.84 2159.66 c
-3322.88 2161.1 l
-3318.02 2162.9 3313.16 2163.8 3308.48 2163.8 c
-3291.74 2163.8 3278.38 2150.84 3278.38 2134.46 c
-3278.38 2123.12 3283.07 2116.28 3295.16 2110.34 c
-3292.64 2107.82 3290.12 2105.48 3287.42 2103.14 c
-3281.48 2097.92 3279.1 2094.32 3279.1 2090.72 c
-3279.1 2086.76 3281.09 2084.78 3288.68 2081.18 c
-3275.72 2071.82 3271 2065.88 3271 2059.22 c
-3271 2049.68 3284.88 2042 3302.18 2042 c
-3315.14 2042 3328.82 2046.23 3338.18 2053.28 c
-3345.56 2059.04 3349 2064.98 3349 2072.18 c
-3349 2083.34 3340.53 2090.9 3327.2 2091.44 c
-3303.98 2092.52 l
-3294.26 2092.88 3289.94 2094.5 3289.94 2097.38 c
-3289.94 2100.98 3295.88 2107.28 3300.74 2108.72 c
-3304.16 2108.36 l
-3307.4 2108 3309.92 2108 3311 2108 c
-3317.3 2108 3324.32 2110.46 3329.72 2114.84 c
-3336.2 2119.88 3339 2126.36 3339 2135.72 c
-3339 2141 3338.12 2145.18 3335.66 2151 c
-h
-3292.46 2080.64 m
-3298.58 2079.38 3312.8 2078.3 3321.62 2078.3 c
-3338 2078.3 3344 2076.14 3344 2069.48 c
-3344 2059.04 3330.3 2052 3309.74 2052 c
-3293.9 2052 3284 2057.23 3284 2065.16 c
-3284 2069.3 3285.55 2072 3292.46 2080.64 c
-h
-3293.36 2141.84 m
-3293.36 2152.46 3298.4 2158.8 3306.68 2158.8 c
-3312.26 2158.8 3316.94 2155.73 3319.82 2150.3 c
-3323.24 2144 3325 2135.9 3325 2128.52 c
-3325 2118.62 3319.87 2113 3311.9 2113 c
-3300.74 2113 3293.36 2124.43 3293.36 2141.3 c
-h
-3356 2081 m
-f*
-3401 2081 m
-f*
-3404.06 2200 m
-3404.06 2197 l
-3419.18 2196.09 3421 2194.07 3421 2180.54 c
-3421 2100.62 l
-3421 2087.3 3418.71 2084.96 3404.06 2084.42 c
-3404.06 2081 l
-3464.18 2081 l
-3491 2081 3508 2093.42 3508 2113.4 c
-3508 2121.32 3504.85 2128.52 3498.92 2133.74 c
-3493.52 2138.6 3488.66 2140.94 3476.96 2143.64 c
-3486.32 2145.98 3490.1 2147.78 3494.42 2151.56 c
-3498.92 2155.52 3502 2162.18 3502 2169.56 c
-3502 2189.72 3485.85 2200 3454.46 2200 c
-h
-3440 2139.68 m
-3456.94 2139.68 3464.78 2138.78 3471.56 2136.26 c
-3482 2132.12 3487 2124.74 3487 2113.22 c
-3487 2103.5 3483.23 2096.48 3476.06 2092.34 c
-3470.3 2088.92 3463.1 2088 3450.5 2088 c
-3442.22 2088 3440 2089.55 3440 2095.04 c
-h
-3440 2146.88 m
-3440 2188.1 l
-3440 2191.88 3441.16 2193 3443.66 2193 c
-3451.58 2193 l
-3472.28 2193 3483 2184.71 3483 2168.84 c
-3483 2154.8 3473.55 2146.88 3456.8 2146.88 c
-h
-3521.06 2081 m
-f*
-2825.6 4082 m
-2823.98 4122.52 l
-2820.2 4122.52 l
-2819.12 4118.84 2816.24 4116.58 2812.82 4116.58 c
-2811.02 4116.58 2808.5 4117.17 2805.62 4118.36 c
-2796.8 4121.24 2787.98 4122.52 2779.16 4122.52 c
-2765.3 4122.52 2751.08 4117.36 2740.1 4108.46 c
-2726.42 4097.12 2719 4080.02 2719 4059.5 c
-2719 4022.96 2742.96 3998.48 2778.8 3998.48 c
-2799.14 3998.48 2816.96 4006.76 2827.94 4021.34 c
-2824.7 4024.58 l
-2811.38 4011.8 2799.5 4006.48 2784.56 4006.48 c
-2773.76 4006.48 2764.04 4009.69 2756.48 4015.94 c
-2745.86 4024.76 2740 4040.96 2740 4061.84 c
-2740 4094.42 2756.71 4115.52 2782.76 4115.52 c
-2793.2 4115.52 2802.38 4111.73 2809.58 4104.5 c
-2815.34 4098.74 2818.04 4093.7 2821.46 4082 c
-h
-2834.06 4001 m
-f*
-2837.14 4072.64 m
-2839.48 4073.18 2840.92 4073.36 2842.9 4073.36 c
-2847.58 4073.36 2849 4070.48 2849 4061.84 c
-2849 4016.3 l
-2849 4006.58 2846.52 4003.88 2836.6 4003.7 c
-2836.6 4001 l
-2876.56 4001 l
-2876.56 4004 l
-2867.02 4004.35 2864 4006.27 2864 4013.06 c
-2864 4063.82 l
-2864 4064.18 2865.23 4065.44 2866.66 4066.88 c
-2870.98 4071.2 2879.08 4074.8 2885.74 4074.8 c
-2893.48 4074.8 2898 4068.2 2898 4055.54 c
-2898 4016.48 l
-2898 4006.4 2895.93 4004.42 2885.2 4003.7 c
-2885.2 4001 l
-2925.52 4001 l
-2925.52 4004 l
-2915.26 4004.18 2913 4007.17 2913 4018.1 c
-2913 4063.46 l
-2918.28 4071.2 2923.91 4074.8 2932.18 4074.8 c
-2942.44 4074.8 2946 4069.85 2946 4054.64 c
-2946 4016.66 l
-2946 4006.4 2944.52 4004.96 2933.8 4003.7 c
-2933.8 4001 l
-2973.22 4001 l
-2973.22 4003.7 l
-2968.54 4004.06 l
-2963.14 4004.42 2961 4007.66 2961 4014.68 c
-2961 4051.76 l
-2961 4073 2953.91 4083.8 2939.92 4083.8 c
-2929.48 4083.8 2920.3 4079.12 2910.58 4068.68 c
-2907.34 4078.94 2901.22 4083.8 2891.5 4083.8 c
-2883.31 4083.8 2878.57 4081.46 2863.28 4069.94 c
-2863.28 4083.44 l
-2862.34 4083.8 l
-2853.16 4080.38 2847.04 4078.4 2837.14 4075.7 c
-h
-2974.04 4001 m
-f*
-2974.62 4071.74 m
-2976.24 4071.92 2977.5 4071.92 2979.12 4071.92 c
-2985.24 4071.92 2987 4070.12 2987 4061.66 c
-2987 3977.42 l
-2987 3968.06 2984.94 3966.08 2973.9 3965 c
-2973.9 3962 l
-3017.46 3962 l
-3017.46 3965 l
-3003.96 3965.18 3002 3967.19 3002 3978.68 c
-3002 4006.94 l
-3008.34 4001 3012.4 3999.2 3019.8 3999.2 c
-3041.22 3999.2 3057 4019.36 3057 4045.46 c
-3057 4067.78 3044.65 4083.8 3027.54 4083.8 c
-3017.61 4083.8 3009.8 4079.48 3002 4069.58 c
-3002 4083.44 l
-3000.54 4083.8 l
-2991 4080.02 2984.52 4077.68 2974.62 4074.62 c
-h
-3002 4061.12 m
-3002 4066.52 3011.87 4072.8 3019.98 4072.8 c
-3033.3 4072.8 3042 4059.2 3042 4038.26 c
-3042 4018.46 3033.23 4004.2 3020.34 4004.2 c
-3011.88 4004.2 3002 4011.09 3002 4016.84 c
-h
-3063 4001 m
-f*
-3184 4104.14 m
-3184 4022.6 l
-3184 4007.66 3181.88 4005.32 3167.94 4004.42 c
-3167.94 4001 l
-3218.34 4001 l
-3218.34 4004.42 l
-3205.2 4005.32 3203 4007.84 3203 4020.62 c
-3203 4100.54 l
-3203 4113.32 3205.29 4115.66 3218.34 4116.74 c
-3218.34 4120 l
-3182.52 4120 l
-3142.74 4029.26 l
-3101.16 4120 l
-3065.52 4120 l
-3065.52 4117 l
-3080.28 4116.09 3083 4113.89 3083 4100.54 c
-3083 4027.46 l
-3083 4008.92 3080.43 4005.5 3065.16 4004.42 c
-3065.16 4001 l
-3107.46 4001 l
-3107.46 4004 l
-3093.6 4004.73 3091 4008.95 3091 4027.46 c
-3091 4100 l
-3135.72 4001 l
-3138.24 4001 l
-h
-3223.02 4001 m
-f*
-3303.56 4012.88 m
-3300.5 4010.36 3298.34 4009.2 3295.64 4009.2 c
-3291.5 4009.2 3290 4011.78 3290 4019.9 c
-3290 4055 l
-3290 4064.18 3289.16 4069.22 3286.82 4073.36 c
-3283.04 4080.2 3275.3 4083.8 3264.32 4083.8 c
-3255.14 4083.8 3246.5 4081.28 3241.46 4077.14 c
-3236.96 4073.36 3234 4068.14 3234 4063.64 c
-3234 4059.5 3237.46 4055.9 3241.82 4055.9 c
-3246.14 4055.9 3249.92 4059.5 3249.92 4063.46 c
-3249.92 4064.18 3249.74 4065.08 3249.56 4066.34 c
-3249.2 4067.96 3249 4069.4 3249 4070.66 c
-3249 4075.52 3254.77 4079.8 3261.98 4079.8 c
-3270.8 4079.8 3275 4074.47 3275 4064.54 c
-3275 4053.56 l
-3247.76 4042.4 3244.75 4040.96 3237.14 4034.12 c
-3233.18 4030.52 3230.66 4024.4 3230.66 4018.46 c
-3230.66 4007.12 3238.4 3999.2 3249.56 3999.2 c
-3257.48 3999.2 3264.86 4002.98 3275.84 4012.34 c
-3276.74 4002.8 3279.98 3999.2 3287.36 3999.2 c
-3293.48 3999.2 3297.26 4001.36 3303.56 4008.2 c
-h
-3275 4023.14 m
-3275 4017.56 3274.23 4015.94 3270.98 4013.6 c
-3266.66 4011.08 3261.62 4009.2 3257.84 4009.2 c
-3251.54 4009.2 3246.48 4015.51 3246.48 4023.5 c
-3246.48 4024.22 l
-3246.48 4034.84 3253.7 4041.32 3275 4049.24 c
-h
-3303.92 4001 m
-f*
-3304.62 4071.74 m
-3306.24 4071.92 3307.5 4071.92 3309.12 4071.92 c
-3315.24 4071.92 3317 4070.12 3317 4061.66 c
-3317 3977.42 l
-3317 3968.06 3314.94 3966.08 3303.9 3965 c
-3303.9 3962 l
-3347.46 3962 l
-3347.46 3965 l
-3333.96 3965.18 3332 3967.19 3332 3978.68 c
-3332 4006.94 l
-3338.34 4001 3342.4 3999.2 3349.8 3999.2 c
-3371.22 3999.2 3387 4019.36 3387 4045.46 c
-3387 4067.78 3374.65 4083.8 3357.54 4083.8 c
-3347.61 4083.8 3339.8 4079.48 3332 4069.58 c
-3332 4083.44 l
-3330.54 4083.8 l
-3321 4080.02 3314.52 4077.68 3304.62 4074.62 c
-h
-3332 4061.12 m
-3332 4066.52 3341.87 4072.8 3349.98 4072.8 c
-3363.3 4072.8 3372 4059.2 3372 4038.26 c
-3372 4018.46 3363.23 4004.2 3350.34 4004.2 c
-3341.88 4004.2 3332 4011.09 3332 4016.84 c
-h
-3393 4001 m
-f*
-1 i
-3773.75 3382.55 330 104.4 re
-Y
-3773.75 3479.75 m
-4095.35 3390.95 l
-S
-0 0 6120 7920 re
-Y
-3812.15 3480.95 m
-3812.15 3502.55 3794.15 3520.55 3772.55 3520.55 c
-3750.95 3520.55 3732.95 3502.55 3732.95 3480.95 c
-3732.95 3459.35 3750.95 3441.35 3772.55 3441.35 c
-3794.15 3441.35 3812.15 3459.35 3812.15 3480.95 c
-f*
-4046.15 3354.95 m
-4077.35 3395.75 l
-4071.35 3447.35 l
-4205.75 3360.95 l
-f*
-3773.75 2988.95 339.6 190.8 re
-Y
-3773.75 3179.75 m
-4104.95 2997.35 l
-S
-0 0 6120 7920 re
-Y
-3812.15 3180.95 m
-3812.15 3202.55 3794.15 3220.55 3772.55 3220.55 c
-3750.95 3220.55 3732.95 3202.55 3732.95 3180.95 c
-3732.95 3159.35 3750.95 3141.35 3772.55 3141.35 c
-3794.15 3141.35 3812.15 3159.35 3812.15 3180.95 c
-f*
-4049.75 2973.35 m
-4088.15 3005.75 l
-4096.55 3056.15 l
-4205.75 2940.95 l
-f*
-1973.75 2225.75 342 294 re
-Y
-1973.75 2519.75 m
-2307.35 2234.15 l
-S
-0 0 6120 7920 re
-Y
-2012.15 2520.95 m
-2012.15 2542.55 1994.15 2560.55 1972.55 2560.55 c
-1950.95 2560.55 1932.95 2542.55 1932.95 2520.95 c
-1932.95 2499.35 1950.95 2481.35 1972.55 2481.35 c
-1994.15 2481.35 2012.15 2499.35 2012.15 2520.95 c
-f*
-2247.35 2223.35 m
-2291.75 2247.35 l
-2308.55 2294.15 l
-2393.75 2159.75 l
-f*
-3773.75 2151.35 342 295.2 re
-Y
-3773.75 2159.75 m
-4107.35 2446.55 l
-S
-0 0 6120 7920 re
-Y
-3812.15 2160.95 m
-3812.15 2182.55 3794.15 2200.55 3772.55 2200.55 c
-3750.95 2200.55 3732.95 2182.55 3732.95 2160.95 c
-3732.95 2139.35 3750.95 2121.35 3772.55 2121.35 c
-3794.15 2121.35 3812.15 2139.35 3812.15 2160.95 c
-f*
-4108.55 2384.15 m
-4091.75 2432.15 l
-4047.35 2456.15 l
-4193.75 2519.75 l
-f*
-4203.35 3352.55 319.2 15.5999 re
-Y
-4200.95 3360.95 m
-4515.35 3360.95 l
-S
-0 0 6120 7920 re
-Y
-4242.95 3362.15 m
-4242.95 3383.75 4224.95 3401.75 4203.35 3401.75 c
-4180.55 3401.75 4162.55 3383.75 4162.55 3362.15 c
-4162.55 3340.55 4180.55 3322.55 4203.35 3322.55 c
-4224.95 3322.55 4242.95 3340.55 4242.95 3362.15 c
-f*
-4473.35 3312.95 m
-4492.55 3360.95 l
-4473.35 3408.95 l
-4625.75 3360.95 l
-f*
-4203.35 2932.55 319.2 15.5999 re
-Y
-4200.95 2940.95 m
-4515.35 2940.95 l
-S
-0 0 6120 7920 re
-Y
-4242.95 2942.15 m
-4242.95 2963.75 4224.95 2981.75 4203.35 2981.75 c
-4180.55 2981.75 4162.55 2963.75 4162.55 2942.15 c
-4162.55 2920.55 4180.55 2902.55 4203.35 2902.55 c
-4224.95 2902.55 4242.95 2920.55 4242.95 2942.15 c
-f*
-4473.35 2892.95 m
-4492.55 2940.95 l
-4473.35 2988.95 l
-4625.75 2940.95 l
-f*
-4203.35 2512.55 319.2 15.5999 re
-Y
-4200.95 2520.95 m
-4515.35 2520.95 l
-S
-0 0 6120 7920 re
-Y
-4242.95 2522.15 m
-4242.95 2543.75 4224.95 2561.75 4203.35 2561.75 c
-4180.55 2561.75 4162.55 2543.75 4162.55 2522.15 c
-4162.55 2500.55 4180.55 2482.55 4203.35 2482.55 c
-4224.95 2482.55 4242.95 2500.55 4242.95 2522.15 c
-f*
-4473.35 2472.95 m
-4492.55 2520.95 l
-4473.35 2568.95 l
-4625.75 2520.95 l
-f*
-1563.35 3352.55 319.2 15.5999 re
-Y
-1560.95 3360.95 m
-1875.35 3360.95 l
-S
-0 0 6120 7920 re
-Y
-1602.95 3362.15 m
-1602.95 3383.75 1584.95 3401.75 1563.35 3401.75 c
-1540.55 3401.75 1522.55 3383.75 1522.55 3362.15 c
-1522.55 3340.55 1540.55 3322.55 1563.35 3322.55 c
-1584.95 3322.55 1602.95 3340.55 1602.95 3362.15 c
-f*
-1833.35 3312.95 m
-1852.55 3360.95 l
-1833.35 3408.95 l
-1985.75 3360.95 l
-f*
-1563.35 2932.55 319.2 15.5999 re
-Y
-1560.95 2940.95 m
-1875.35 2940.95 l
-S
-0 0 6120 7920 re
-Y
-1602.95 2942.15 m
-1602.95 2963.75 1584.95 2981.75 1563.35 2981.75 c
-1540.55 2981.75 1522.55 2963.75 1522.55 2942.15 c
-1522.55 2920.55 1540.55 2902.55 1563.35 2902.55 c
-1584.95 2902.55 1602.95 2920.55 1602.95 2942.15 c
-f*
-1833.35 2892.95 m
-1852.55 2940.95 l
-1833.35 2988.95 l
-1985.75 2940.95 l
-f*
-1563.35 2512.55 319.2 15.5999 re
-Y
-1560.95 2520.95 m
-1875.35 2520.95 l
-S
-0 0 6120 7920 re
-Y
-1602.95 2522.15 m
-1602.95 2543.75 1584.95 2561.75 1563.35 2561.75 c
-1540.55 2561.75 1522.55 2543.75 1522.55 2522.15 c
-1522.55 2500.55 1540.55 2482.55 1563.35 2482.55 c
-1584.95 2482.55 1602.95 2500.55 1602.95 2522.15 c
-f*
-1833.35 2472.95 m
-1852.55 2520.95 l
-1833.35 2568.95 l
-1985.75 2520.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 2112 a(Figure)30 b(3:)41 b(A)30 b(CmpMap)g(comp)s(osed)f
-(of)h(t)m(w)m(o)i(Mappings)e(joined)f(in)h(parallel.)42
-b(Eac)m(h)30 b(comp)s(onen)m(t)h(Mapping)0 2225 y(acts)g(on)g(a)f
-(complemen)m(tary)i(subset)e(of)g(the)h(input)e(and)h(output)g(co)s
-(ordinates.)0 2604 y(the)g(second.)41 b(The)29 b(second)h(w)m(a)m(y)-8
-b(,)32 b Fx(in)g(p)-5 b(ar)g(al)5 b(lel,)33 b FG(is)d(sho)m(wn)f(in)h
-(Figure)g(3.)82 b(In)29 b(this)h(case,)h(eac)m(h)h(Mapping)d(acts)0
-2717 y(on)h(a)h(complemen)m(tary)h(subset)d(of)i(the)g(input)e(and)h
-(output)g(co)s(ordinates.)2572 2684 y Fv(2)0 2884 y FG(The)c(CmpMap)g
-(forms)g(the)h(k)m(ey)g(to)h(building)e(arbitrarily)h(complex)g
-(Mappings)g(b)s(ecause)f(it)i(is)e(itself)i(a)f(form)0
-2997 y(of)39 b(Mapping.)64 b(This)38 b(means)g(that)h(a)g(CmpMap)e(ma)m
-(y)i(con)m(tain)h(other)e(CmpMaps)g(as)g(comp)s(onen)m(ts)h(\()p
-Fx(e.g.)0 3110 y FG(Figure)d(4\).)58 b(This)34 b(nesting)i(of)g
-(CmpMaps)f(can)h(b)s(e)f(rep)s(eated)h(inde\014nitely)-8
-b(,)37 b(so)f(that)g(complex)h(Mappings)0 3223 y(ma)m(y)f(b)s(e)f
-(built)g(in)g(a)h(hierarc)m(hical)g(manner)f(out)g(of)h(simp)s(er)e
-(ones.)56 b(This)34 b(giv)m(es)j(AST)e(great)h(\015exibilit)m(y)h(in)0
-3336 y(the)31 b(co)s(ordinate)g(transformations)f(it)h(can)g(describ)s
-(e.)0 3503 y FE(F)-9 b(urther)28 b(reading:)38 b FG(F)-8
-b(or)26 b(a)f(more)g(complete)h(description)f(of)g(CmpMaps,)g(see)g
-Fu(x)p FG(6.)40 b(Also)25 b(see)g(the)g(CmpMap)0 3616
-y(en)m(try)31 b(in)f(App)s(endix)e(D.)0 3925 y Fw(2.4)112
-b(Represen)m(ting)38 b(Co)s(ordinate)g(Systems)0 4153
-y FG(While)45 b(Mappings)f(\()p Fu(x)p FG(2.1\))i(represen)m(t)e(the)h
-(relationships)f(b)s(et)m(w)m(een)h(co)s(ordinate)g(systems)f(in)g
-(AST,)f(the)0 4266 y(co)s(ordinate)32 b(systems)f(themselv)m(es)h(are)g
-(represen)m(ted)f(b)m(y)g(Ob)5 b(jects)31 b(called)h(F)-8
-b(rames)32 b(\(Figure)g(5\).)86 b(A)32 b(F)-8 b(rame)0
-4379 y(is)41 b(similar)g(in)f(concept)i(to)f(the)g(frame)g(y)m(ou)g
-(migh)m(t)g(dra)m(w)g(around)e(a)i(graph.)71 b(It)41
-b(con)m(tains)h(information)0 4492 y(ab)s(out)32 b(the)h(lab)s(els)g
-(whic)m(h)g(app)s(ear)f(on)h(the)g(axes,)h(the)f(axis)g(units,)g(a)g
-(title,)i(kno)m(wledge)f(of)f(ho)m(w)g(to)g(format)0
-4605 y(the)43 b(co)s(ordinate)i(v)-5 b(alues)43 b(on)g(eac)m(h)i(axis,)
-i Fx(etc.)79 b FG(An)43 b(AST)f(F)-8 b(rame)45 b(is)e(not,)k(ho)m(w)m
-(ev)m(er,)h(restricted)c(to)g(t)m(w)m(o)0 4718 y(dimensions)30
-b(and)f(ma)m(y)i(ha)m(v)m(e)h(an)m(y)f(n)m(um)m(b)s(er)e(of)h(axes.)0
-4885 y(A)37 b(basic)h(F)-8 b(rame)38 b(ma)m(y)g(b)s(e)f(used)f(to)i
-(represen)m(t)g(a)f(Cartesian)h(co)s(ordinate)g(system)g(b)m(y)f
-(setting)h(v)-5 b(alues)38 b(for)0 4998 y(its)d Fx(attributes)g
-FG(\(all)h(AST)e(Ob)5 b(jects)34 b(ha)m(v)m(e)i(v)-5
-b(alues)35 b(asso)s(ciated)h(with)e(them)h(called)g(attributes,)i(whic)
-m(h)d(ma)m(y)0 5111 y(b)s(e)e(set)h(and)e(enquired\).)46
-b(Usually)-8 b(,)34 b(this)f(w)m(ould)f(in)m(v)m(olv)m(e)i(setting)g
-(appropriate)e(axis)h(lab)s(els)f(and)g(units,)h(for)0
-5224 y(example.)47 b(Routines)32 b(are)h(pro)m(vided)f(for)f(use)h
-(with)g(F)-8 b(rames)33 b(to)g(p)s(erform)e(op)s(erations)h(suc)m(h)g
-(as)h(formatting)0 5337 y(co)s(ordinate)e(v)-5 b(alues)31
-b(as)g(text,)g(calculating)i(distances)e(b)s(et)m(w)m(een)g(p)s(oin)m
-(ts,)f(in)m(terc)m(hanging)i(axes,)f Fx(etc.)p 0 5425
-1512 4 v 104 5479 a Fs(2)138 5510 y Fr(A)k(pair)h(of)h(Mappings)f(can)g
-(b)r(e)g(com)n(bined)f(in)h(a)g(third)f(w)n(a)n(y)h(using)g(a)g(T)-6
-b(ranMap.)65 b(A)35 b(T)-6 b(ranMap)36 b(allo)n(ws)i(the)d(forw)n(ard)0
-5602 y(transformation)d(of)f(one)f(Mapping)h(to)f(b)r(e)g(com)n(bined)g
-(with)g(the)g(in)n(v)n(erse)g(transformation)i(of)f(another)f(to)g(pro)
-r(duce)g(a)g(single)0 5693 y(Mapping.)p eop end
-%%Page: 8 18
-TeXDict begin 8 17 bop 0 52 a FG(8)2171 b Fz(2)92 b(O)m(VER)-10
-b(VIEW)30 b(OF)h(AST)e(CONCEPTS)557 2242 y @beginspecial
-38 @llx 119 @lly 571 @urx 462 @ury 3198 @rwi @setspecial
-%%BeginDocument: sun210_figures/complex.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 38 119 571 462
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/05 15:49:04
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5333.75 4140.95 m
-5333.75 4372.55 5145.35 4560.95 4913.75 4560.95 c
-1312.55 4560.95 l
-1080.95 4560.95 892.55 4372.55 892.55 4140.95 c
-892.55 1619.75 l
-892.55 1388.15 1080.95 1199.75 1312.55 1199.75 c
-4913.75 1199.75 l
-5145.35 1199.75 5333.75 1388.15 5333.75 1619.75 c
-f*
-1 g
-5268.95 4196.15 m
-5268.95 4427.75 5081.75 4614.95 4850.15 4614.95 c
-1257.35 4614.95 l
-1025.75 4614.95 838.55 4427.75 838.55 4196.15 c
-838.55 1683.35 l
-838.55 1451.75 1025.75 1264.55 1257.35 1264.55 c
-4850.15 1264.55 l
-5081.75 1264.55 5268.95 1451.75 5268.95 1683.35 c
-f*
-8 w
-1 J
-1 j
-0 g
-5268.95 4196.15 m
-5268.95 4427.75 5081.75 4614.95 4850.15 4614.95 c
-1257.35 4614.95 l
-1025.75 4614.95 838.55 4427.75 838.55 4196.15 c
-838.55 1683.35 l
-838.55 1451.75 1025.75 1264.55 1257.35 1264.55 c
-4850.15 1264.55 l
-5081.75 1264.55 5268.95 1451.75 5268.95 1683.35 c
-h
-S
-0.564706 g
-4913.75 3743.75 m
-4913.75 3896.15 4788.95 4020.95 4636.55 4020.95 c
-2969.75 4020.95 l
-2817.35 4020.95 2692.55 3896.15 2692.55 3743.75 c
-2692.55 1716.95 l
-2692.55 1564.55 2817.35 1439.75 2969.75 1439.75 c
-4636.55 1439.75 l
-4788.95 1439.75 4913.75 1564.55 4913.75 1716.95 c
-f*
-1 g
-4848.95 3798.95 m
-4848.95 3951.35 4725.35 4074.95 4572.95 4074.95 c
-2914.55 4074.95 l
-2762.15 4074.95 2638.55 3951.35 2638.55 3798.95 c
-2638.55 1780.55 l
-2638.55 1628.15 2762.15 1504.55 2914.55 1504.55 c
-4572.95 1504.55 l
-4725.35 1504.55 4848.95 1628.15 4848.95 1780.55 c
-f*
-0 g
-4848.95 3798.95 m
-4848.95 3951.35 4725.35 4074.95 4572.95 4074.95 c
-2914.55 4074.95 l
-2762.15 4074.95 2638.55 3951.35 2638.55 3798.95 c
-2638.55 1780.55 l
-2638.55 1628.15 2762.15 1504.55 2914.55 1504.55 c
-4572.95 1504.55 l
-4725.35 1504.55 4848.95 1628.15 4848.95 1780.55 c
-h
-S
-0.564706 g
-4493.75 2205.35 m
-4493.75 2247.35 4460.15 2280.95 4418.15 2280.95 c
-3188.15 2280.95 l
-3146.15 2280.95 3112.55 2247.35 3112.55 2205.35 c
-3112.55 1755.35 l
-3112.55 1713.35 3146.15 1679.75 3188.15 1679.75 c
-4418.15 1679.75 l
-4460.15 1679.75 4493.75 1713.35 4493.75 1755.35 c
-f*
-1 g
-4428.95 2261.75 m
-4428.95 2302.55 4396.55 2334.95 4354.55 2334.95 c
-3132.95 2334.95 l
-3090.95 2334.95 3058.55 2302.55 3058.55 2261.75 c
-3058.55 1817.75 l
-3058.55 1776.95 3090.95 1744.55 3132.95 1744.55 c
-4354.55 1744.55 l
-4396.55 1744.55 4428.95 1776.95 4428.95 1817.75 c
-f*
-0 g
-4428.95 2261.75 m
-4428.95 2302.55 4396.55 2334.95 4354.55 2334.95 c
-3132.95 2334.95 l
-3090.95 2334.95 3058.55 2302.55 3058.55 2261.75 c
-3058.55 1817.75 l
-3058.55 1776.95 3090.95 1744.55 3132.95 1744.55 c
-4354.55 1744.55 l
-4396.55 1744.55 4428.95 1776.95 4428.95 1817.75 c
-h
-S
-843.35 3052.55 319.2 15.5999 re
-Y
-840.95 3060.95 m
-1155.35 3060.95 l
-S
-0 0 6120 7920 re
-Y
-882.95 3062.15 m
-882.95 3083.75 864.95 3101.75 843.35 3101.75 c
-820.55 3101.75 802.55 3083.75 802.55 3062.15 c
-802.55 3040.55 820.55 3022.55 843.35 3022.55 c
-864.95 3022.55 882.95 3040.55 882.95 3062.15 c
-f*
-1113.35 3012.95 m
-1132.55 3060.95 l
-1113.35 3108.95 l
-1265.75 3060.95 l
-f*
-0.564706 g
-2393.75 3225.35 m
-2393.75 3299.75 2333.75 3360.95 2258.15 3360.95 c
-1448.15 3360.95 l
-1373.75 3360.95 1312.55 3299.75 1312.55 3225.35 c
-1312.55 2355.35 l
-1312.55 2280.95 1373.75 2219.75 1448.15 2219.75 c
-2258.15 2219.75 l
-2333.75 2219.75 2393.75 2280.95 2393.75 2355.35 c
-f*
-1 g
-2328.95 3281.75 m
-2328.95 3354.95 2270.15 3414.95 2195.75 3414.95 c
-1391.75 3414.95 l
-1318.55 3414.95 1258.55 3354.95 1258.55 3281.75 c
-1258.55 2417.75 l
-1258.55 2344.55 1318.55 2284.55 1391.75 2284.55 c
-2195.75 2284.55 l
-2268.95 2284.55 2328.95 2344.55 2328.95 2417.75 c
-f*
-0 g
-2328.95 3281.75 m
-2328.95 3354.95 2270.15 3414.95 2195.75 3414.95 c
-1391.75 3414.95 l
-1318.55 3414.95 1258.55 3354.95 1258.55 3281.75 c
-1258.55 2417.75 l
-1258.55 2344.55 1318.55 2284.55 1391.75 2284.55 c
-2195.75 2284.55 l
-2268.95 2284.55 2328.95 2344.55 2328.95 2417.75 c
-h
-S
-843.35 2632.55 319.2 15.5999 re
-Y
-840.95 2640.95 m
-1155.35 2640.95 l
-S
-0 0 6120 7920 re
-Y
-882.95 2642.15 m
-882.95 2663.75 864.95 2681.75 843.35 2681.75 c
-820.55 2681.75 802.55 2663.75 802.55 2642.15 c
-802.55 2620.55 820.55 2602.55 843.35 2602.55 c
-864.95 2602.55 882.95 2620.55 882.95 2642.15 c
-f*
-1113.35 2592.95 m
-1132.55 2640.95 l
-1113.35 2688.95 l
-1265.75 2640.95 l
-f*
-0.2 i
-1502 2904.14 m
-1502 2822.6 l
-1502 2807.66 1499.88 2805.32 1485.94 2804.42 c
-1485.94 2801 l
-1536.34 2801 l
-1536.34 2804.42 l
-1523.2 2805.32 1521 2807.84 1521 2820.62 c
-1521 2900.54 l
-1521 2913.32 1523.29 2915.66 1536.34 2916.74 c
-1536.34 2920 l
-1500.52 2920 l
-1460.74 2829.26 l
-1419.16 2920 l
-1383.52 2920 l
-1383.52 2917 l
-1398.28 2916.09 1401 2913.89 1401 2900.54 c
-1401 2827.46 l
-1401 2808.92 1398.43 2805.5 1383.16 2804.42 c
-1383.16 2801 l
-1425.46 2801 l
-1425.46 2804 l
-1411.6 2804.73 1409 2808.95 1409 2827.46 c
-1409 2900 l
-1453.72 2801 l
-1456.24 2801 l
-h
-1541.02 2801 m
-f*
-1620.56 2812.88 m
-1617.5 2810.36 1615.34 2809.2 1612.64 2809.2 c
-1608.5 2809.2 1607 2811.78 1607 2819.9 c
-1607 2855 l
-1607 2864.18 1606.16 2869.22 1603.82 2873.36 c
-1600.04 2880.2 1592.3 2883.8 1581.32 2883.8 c
-1572.14 2883.8 1563.5 2881.28 1558.46 2877.14 c
-1553.96 2873.36 1551 2868.14 1551 2863.64 c
-1551 2859.5 1554.46 2855.9 1558.82 2855.9 c
-1563.14 2855.9 1566.92 2859.5 1566.92 2863.46 c
-1566.92 2864.18 1566.74 2865.08 1566.56 2866.34 c
-1566.2 2867.96 1566 2869.4 1566 2870.66 c
-1566 2875.52 1571.77 2879.8 1578.98 2879.8 c
-1587.8 2879.8 1592 2874.47 1592 2864.54 c
-1592 2853.56 l
-1564.76 2842.4 1561.75 2840.96 1554.14 2834.12 c
-1550.18 2830.52 1547.66 2824.4 1547.66 2818.46 c
-1547.66 2807.12 1555.4 2799.2 1566.56 2799.2 c
-1574.48 2799.2 1581.86 2802.98 1592.84 2812.34 c
-1593.74 2802.8 1596.98 2799.2 1604.36 2799.2 c
-1610.48 2799.2 1614.26 2801.36 1620.56 2808.2 c
-h
-1592 2823.14 m
-1592 2817.56 1591.23 2815.94 1587.98 2813.6 c
-1583.66 2811.08 1578.62 2809.2 1574.84 2809.2 c
-1568.54 2809.2 1563.48 2815.51 1563.48 2823.5 c
-1563.48 2824.22 l
-1563.48 2834.84 1570.7 2841.32 1592 2849.24 c
-h
-1620.92 2801 m
-f*
-1622.62 2871.74 m
-1624.24 2871.92 1625.5 2871.92 1627.12 2871.92 c
-1633.24 2871.92 1635 2870.12 1635 2861.66 c
-1635 2777.42 l
-1635 2768.06 1632.94 2766.08 1621.9 2765 c
-1621.9 2762 l
-1665.46 2762 l
-1665.46 2765 l
-1651.96 2765.18 1650 2767.19 1650 2778.68 c
-1650 2806.94 l
-1656.34 2801 1660.4 2799.2 1667.8 2799.2 c
-1689.22 2799.2 1705 2819.36 1705 2845.46 c
-1705 2867.78 1692.65 2883.8 1675.54 2883.8 c
-1665.61 2883.8 1657.8 2879.48 1650 2869.58 c
-1650 2883.44 l
-1648.54 2883.8 l
-1639 2880.02 1632.52 2877.68 1622.62 2874.62 c
-h
-1650 2861.12 m
-1650 2866.52 1659.87 2872.8 1667.98 2872.8 c
-1681.3 2872.8 1690 2859.2 1690 2838.26 c
-1690 2818.46 1681.23 2804.2 1668.34 2804.2 c
-1659.88 2804.2 1650 2811.09 1650 2816.84 c
-h
-1711 2801 m
-f*
-1712.62 2871.74 m
-1714.24 2871.92 1715.5 2871.92 1717.12 2871.92 c
-1723.24 2871.92 1725 2870.12 1725 2861.66 c
-1725 2777.42 l
-1725 2768.06 1722.94 2766.08 1711.9 2765 c
-1711.9 2762 l
-1755.46 2762 l
-1755.46 2765 l
-1741.96 2765.18 1740 2767.19 1740 2778.68 c
-1740 2806.94 l
-1746.34 2801 1750.4 2799.2 1757.8 2799.2 c
-1779.22 2799.2 1795 2819.36 1795 2845.46 c
-1795 2867.78 1782.65 2883.8 1765.54 2883.8 c
-1755.61 2883.8 1747.8 2879.48 1740 2869.58 c
-1740 2883.44 l
-1738.54 2883.8 l
-1729 2880.02 1722.52 2877.68 1712.62 2874.62 c
-h
-1740 2861.12 m
-1740 2866.52 1749.87 2872.8 1757.98 2872.8 c
-1771.3 2872.8 1780 2859.2 1780 2838.26 c
-1780 2818.46 1771.23 2804.2 1758.34 2804.2 c
-1749.88 2804.2 1740 2811.09 1740 2816.84 c
-h
-1801 2801 m
-f*
-1832.5 2883.8 m
-1804.6 2873.9 l
-1804.6 2871.2 l
-1806.04 2871.38 l
-1808.2 2871.74 1810.54 2871.72 1812.16 2871.72 c
-1816.48 2871.72 1818 2868.89 1818 2861.12 c
-1818 2819.36 l
-1818 2806.4 1816.21 2804.42 1803.88 2803.7 c
-1803.88 2801 l
-1846.54 2801 l
-1846.54 2803.7 l
-1834.66 2804.6 1833 2806.4 1833 2819.36 c
-1833 2883.26 l
-h
-1824.22 2924 m
-1819.18 2924 1815 2919.83 1815 2914.76 c
-1815 2909.54 1818.98 2906 1824.04 2906 c
-1829.44 2906 1834 2909.78 1834 2914.76 c
-1834 2919.8 1829.59 2924 1824.22 2924 c
-h
-1851.04 2801 m
-f*
-1853.88 2872.64 m
-1855.14 2873.18 1856.76 2873.36 1858.74 2873.36 c
-1863.78 2873.36 1865 2870.66 1865 2861.84 c
-1865 2817.2 l
-1865 2806.94 1863.09 2804.42 1854.24 2803.7 c
-1854.24 2801 l
-1892.4 2801 l
-1892.4 2803.7 l
-1883.22 2804.42 1880 2806.58 1880 2813.06 c
-1880 2863.64 l
-1888.7 2871.74 1892.95 2873.8 1899.06 2873.8 c
-1907.88 2873.8 1912 2868.25 1912 2856.44 c
-1912 2818.82 l
-1912 2807.48 1909.7 2804.42 1900.86 2803.7 c
-1900.86 2801 l
-1938.3 2801 l
-1938.3 2803.7 l
-1929.48 2804.6 1927 2806.76 1927 2815.58 c
-1927 2856.8 l
-1927 2873.72 1919.2 2883.8 1906.08 2883.8 c
-1897.64 2883.8 1891.94 2880.74 1879.46 2869.22 c
-1879.46 2883.44 l
-1878.72 2883.8 l
-1869.9 2880.56 1863.78 2878.58 1853.88 2875.7 c
-h
-1941 2801 m
-f*
-2025.6 2871 m
-2025.6 2878 l
-2011.74 2878 l
-2008.14 2878 2005.44 2878.5 2001.84 2879.66 c
-1997.88 2881.1 l
-1993.02 2882.9 1988.16 2883.8 1983.48 2883.8 c
-1966.74 2883.8 1953.38 2870.84 1953.38 2854.46 c
-1953.38 2843.12 1958.07 2836.28 1970.16 2830.34 c
-1967.64 2827.82 1965.12 2825.48 1962.42 2823.14 c
-1956.48 2817.92 1954.1 2814.32 1954.1 2810.72 c
-1954.1 2806.76 1956.09 2804.78 1963.68 2801.18 c
-1950.72 2791.82 1946 2785.88 1946 2779.22 c
-1946 2769.68 1959.88 2762 1977.18 2762 c
-1990.14 2762 2003.82 2766.23 2013.18 2773.28 c
-2020.56 2779.04 2024 2784.98 2024 2792.18 c
-2024 2803.34 2015.53 2810.9 2002.2 2811.44 c
-1978.98 2812.52 l
-1969.26 2812.88 1964.94 2814.5 1964.94 2817.38 c
-1964.94 2820.98 1970.88 2827.28 1975.74 2828.72 c
-1979.16 2828.36 l
-1982.4 2828 1984.92 2828 1986 2828 c
-1992.3 2828 1999.32 2830.46 2004.72 2834.84 c
-2011.2 2839.88 2014 2846.36 2014 2855.72 c
-2014 2861 2013.12 2865.18 2010.66 2871 c
-h
-1967.46 2800.64 m
-1973.58 2799.38 1987.8 2798.3 1996.62 2798.3 c
-2013 2798.3 2019 2796.14 2019 2789.48 c
-2019 2779.04 2005.3 2772 1984.74 2772 c
-1968.9 2772 1959 2777.23 1959 2785.16 c
-1959 2789.3 1960.55 2792 1967.46 2800.64 c
-h
-1968.36 2861.84 m
-1968.36 2872.46 1973.4 2878.8 1981.68 2878.8 c
-1987.26 2878.8 1991.94 2875.73 1994.82 2870.3 c
-1998.24 2864 2000 2855.9 2000 2848.52 c
-2000 2838.62 1994.87 2833 1986.9 2833 c
-1975.74 2833 1968.36 2844.43 1968.36 2861.3 c
-h
-2031 2801 m
-f*
-2076 2801 m
-f*
-2203.08 2804.42 m
-2194.98 2804.96 2193.18 2806.76 2186.88 2820.08 c
-2142.06 2922.16 l
-2138.46 2922.16 l
-2101.02 2833.94 l
-2089.5 2807.66 2087.34 2804.96 2078.7 2804.42 c
-2078.7 2801 l
-2114.34 2801 l
-2114.34 2804.82 l
-2105.7 2804.82 2102.1 2807.03 2102.1 2811.8 c
-2102.1 2813.96 2102.64 2816.48 2103.54 2818.82 c
-2111.82 2840 l
-2158.98 2840 l
-2166.36 2822.6 l
-2168.52 2817.56 2169.78 2813.06 2169.78 2810.36 c
-2169.78 2808.74 2168.7 2806.76 2167.26 2806.04 c
-2165.1 2804.78 2163.66 2804.82 2157.18 2804.82 c
-2157.18 2801 l
-2203.08 2801 l
-h
-2114.88 2847 m
-2135.58 2896.76 l
-2156.46 2847 l
-h
-2205.96 2801 m
-f*
-2705.6 4382 m
-2703.98 4422.52 l
-2700.2 4422.52 l
-2699.12 4418.84 2696.24 4416.58 2692.82 4416.58 c
-2691.02 4416.58 2688.5 4417.17 2685.62 4418.36 c
-2676.8 4421.24 2667.98 4422.52 2659.16 4422.52 c
-2645.3 4422.52 2631.08 4417.36 2620.1 4408.46 c
-2606.42 4397.12 2599 4380.02 2599 4359.5 c
-2599 4322.96 2622.96 4298.48 2658.8 4298.48 c
-2679.14 4298.48 2696.96 4306.76 2707.94 4321.34 c
-2704.7 4324.58 l
-2691.38 4311.8 2679.5 4306.48 2664.56 4306.48 c
-2653.76 4306.48 2644.04 4309.69 2636.48 4315.94 c
-2625.86 4324.76 2620 4340.96 2620 4361.84 c
-2620 4394.42 2636.71 4415.52 2662.76 4415.52 c
-2673.2 4415.52 2682.38 4411.73 2689.58 4404.5 c
-2695.34 4398.74 2698.04 4393.7 2701.46 4382 c
-h
-2714.06 4301 m
-f*
-2717.14 4372.64 m
-2719.48 4373.18 2720.92 4373.36 2722.9 4373.36 c
-2727.58 4373.36 2729 4370.48 2729 4361.84 c
-2729 4316.3 l
-2729 4306.58 2726.52 4303.88 2716.6 4303.7 c
-2716.6 4301 l
-2756.56 4301 l
-2756.56 4304 l
-2747.02 4304.35 2744 4306.27 2744 4313.06 c
-2744 4363.82 l
-2744 4364.18 2745.23 4365.44 2746.66 4366.88 c
-2750.98 4371.2 2759.08 4374.8 2765.74 4374.8 c
-2773.48 4374.8 2778 4368.2 2778 4355.54 c
-2778 4316.48 l
-2778 4306.4 2775.93 4304.42 2765.2 4303.7 c
-2765.2 4301 l
-2805.52 4301 l
-2805.52 4304 l
-2795.26 4304.18 2793 4307.17 2793 4318.1 c
-2793 4363.46 l
-2798.28 4371.2 2803.91 4374.8 2812.18 4374.8 c
-2822.44 4374.8 2826 4369.85 2826 4354.64 c
-2826 4316.66 l
-2826 4306.4 2824.52 4304.96 2813.8 4303.7 c
-2813.8 4301 l
-2853.22 4301 l
-2853.22 4303.7 l
-2848.54 4304.06 l
-2843.14 4304.42 2841 4307.66 2841 4314.68 c
-2841 4351.76 l
-2841 4373 2833.91 4383.8 2819.92 4383.8 c
-2809.48 4383.8 2800.3 4379.12 2790.58 4368.68 c
-2787.34 4378.94 2781.22 4383.8 2771.5 4383.8 c
-2763.31 4383.8 2758.57 4381.46 2743.28 4369.94 c
-2743.28 4383.44 l
-2742.34 4383.8 l
-2733.16 4380.38 2727.04 4378.4 2717.14 4375.7 c
-h
-2854.04 4301 m
-f*
-2854.62 4371.74 m
-2856.24 4371.92 2857.5 4371.92 2859.12 4371.92 c
-2865.24 4371.92 2867 4370.12 2867 4361.66 c
-2867 4277.42 l
-2867 4268.06 2864.94 4266.08 2853.9 4265 c
-2853.9 4262 l
-2897.46 4262 l
-2897.46 4265 l
-2883.96 4265.18 2882 4267.19 2882 4278.68 c
-2882 4306.94 l
-2888.34 4301 2892.4 4299.2 2899.8 4299.2 c
-2921.22 4299.2 2937 4319.36 2937 4345.46 c
-2937 4367.78 2924.65 4383.8 2907.54 4383.8 c
-2897.61 4383.8 2889.8 4379.48 2882 4369.58 c
-2882 4383.44 l
-2880.54 4383.8 l
-2871 4380.02 2864.52 4377.68 2854.62 4374.62 c
-h
-2882 4361.12 m
-2882 4366.52 2891.87 4372.8 2899.98 4372.8 c
-2913.3 4372.8 2922 4359.2 2922 4338.26 c
-2922 4318.46 2913.23 4304.2 2900.34 4304.2 c
-2891.88 4304.2 2882 4311.09 2882 4316.84 c
-h
-2943 4301 m
-f*
-3064 4404.14 m
-3064 4322.6 l
-3064 4307.66 3061.88 4305.32 3047.94 4304.42 c
-3047.94 4301 l
-3098.34 4301 l
-3098.34 4304.42 l
-3085.2 4305.32 3083 4307.84 3083 4320.62 c
-3083 4400.54 l
-3083 4413.32 3085.29 4415.66 3098.34 4416.74 c
-3098.34 4420 l
-3062.52 4420 l
-3022.74 4329.26 l
-2981.16 4420 l
-2945.52 4420 l
-2945.52 4417 l
-2960.28 4416.09 2963 4413.89 2963 4400.54 c
-2963 4327.46 l
-2963 4308.92 2960.43 4305.5 2945.16 4304.42 c
-2945.16 4301 l
-2987.46 4301 l
-2987.46 4304 l
-2973.6 4304.73 2971 4308.95 2971 4327.46 c
-2971 4400 l
-3015.72 4301 l
-3018.24 4301 l
-h
-3103.02 4301 m
-f*
-3183.56 4312.88 m
-3180.5 4310.36 3178.34 4309.2 3175.64 4309.2 c
-3171.5 4309.2 3170 4311.78 3170 4319.9 c
-3170 4355 l
-3170 4364.18 3169.16 4369.22 3166.82 4373.36 c
-3163.04 4380.2 3155.3 4383.8 3144.32 4383.8 c
-3135.14 4383.8 3126.5 4381.28 3121.46 4377.14 c
-3116.96 4373.36 3114 4368.14 3114 4363.64 c
-3114 4359.5 3117.46 4355.9 3121.82 4355.9 c
-3126.14 4355.9 3129.92 4359.5 3129.92 4363.46 c
-3129.92 4364.18 3129.74 4365.08 3129.56 4366.34 c
-3129.2 4367.96 3129 4369.4 3129 4370.66 c
-3129 4375.52 3134.77 4379.8 3141.98 4379.8 c
-3150.8 4379.8 3155 4374.47 3155 4364.54 c
-3155 4353.56 l
-3127.76 4342.4 3124.75 4340.96 3117.14 4334.12 c
-3113.18 4330.52 3110.66 4324.4 3110.66 4318.46 c
-3110.66 4307.12 3118.4 4299.2 3129.56 4299.2 c
-3137.48 4299.2 3144.86 4302.98 3155.84 4312.34 c
-3156.74 4302.8 3159.98 4299.2 3167.36 4299.2 c
-3173.48 4299.2 3177.26 4301.36 3183.56 4308.2 c
-h
-3155 4323.14 m
-3155 4317.56 3154.23 4315.94 3150.98 4313.6 c
-3146.66 4311.08 3141.62 4309.2 3137.84 4309.2 c
-3131.54 4309.2 3126.48 4315.51 3126.48 4323.5 c
-3126.48 4324.22 l
-3126.48 4334.84 3133.7 4341.32 3155 4349.24 c
-h
-3183.92 4301 m
-f*
-3184.62 4371.74 m
-3186.24 4371.92 3187.5 4371.92 3189.12 4371.92 c
-3195.24 4371.92 3197 4370.12 3197 4361.66 c
-3197 4277.42 l
-3197 4268.06 3194.94 4266.08 3183.9 4265 c
-3183.9 4262 l
-3227.46 4262 l
-3227.46 4265 l
-3213.96 4265.18 3212 4267.19 3212 4278.68 c
-3212 4306.94 l
-3218.34 4301 3222.4 4299.2 3229.8 4299.2 c
-3251.22 4299.2 3267 4319.36 3267 4345.46 c
-3267 4367.78 3254.65 4383.8 3237.54 4383.8 c
-3227.61 4383.8 3219.8 4379.48 3212 4369.58 c
-3212 4383.44 l
-3210.54 4383.8 l
-3201 4380.02 3194.52 4377.68 3184.62 4374.62 c
-h
-3212 4361.12 m
-3212 4366.52 3221.87 4372.8 3229.98 4372.8 c
-3243.3 4372.8 3252 4359.2 3252 4338.26 c
-3252 4318.46 3243.23 4304.2 3230.34 4304.2 c
-3221.88 4304.2 3212 4311.09 3212 4316.84 c
-h
-3273 4301 m
-f*
-1 i
-423.35 3052.55 319.2 15.5999 re
-Y
-420.95 3060.95 m
-735.35 3060.95 l
-S
-0 0 6120 7920 re
-Y
-462.95 3062.15 m
-462.95 3083.75 444.95 3101.75 423.35 3101.75 c
-400.55 3101.75 382.55 3083.75 382.55 3062.15 c
-382.55 3040.55 400.55 3022.55 423.35 3022.55 c
-444.95 3022.55 462.95 3040.55 462.95 3062.15 c
-f*
-693.35 3012.95 m
-712.55 3060.95 l
-693.35 3108.95 l
-845.75 3060.95 l
-f*
-0.564706 g
-4493.75 3531.35 m
-4493.75 3602.15 4436.15 3660.95 4364.15 3660.95 c
-3242.15 3660.95 l
-3170.15 3660.95 3112.55 3602.15 3112.55 3531.35 c
-3112.55 2752.55 l
-3112.55 2680.55 3170.15 2622.95 3242.15 2622.95 c
-4364.15 2622.95 l
-4436.15 2622.95 4493.75 2680.55 4493.75 2752.55 c
-f*
-1 g
-4428.95 3586.55 m
-4428.95 3657.35 4372.55 3714.95 4300.55 3714.95 c
-3186.95 3714.95 l
-3116.15 3714.95 3058.55 3657.35 3058.55 3586.55 c
-3058.55 2814.95 l
-3058.55 2745.35 3116.15 2687.75 3186.95 2687.75 c
-4300.55 2687.75 l
-4371.35 2687.75 4428.95 2745.35 4428.95 2814.95 c
-f*
-0 g
-4428.95 3586.55 m
-4428.95 3657.35 4372.55 3714.95 4300.55 3714.95 c
-3186.95 3714.95 l
-3116.15 3714.95 3058.55 3657.35 3058.55 3586.55 c
-3058.55 2814.95 l
-3058.55 2745.35 3116.15 2687.75 3186.95 2687.75 c
-4300.55 2687.75 l
-4371.35 2687.75 4428.95 2745.35 4428.95 2814.95 c
-h
-S
-423.35 2632.55 319.2 15.5999 re
-Y
-420.95 2640.95 m
-735.35 2640.95 l
-S
-0 0 6120 7920 re
-Y
-462.95 2642.15 m
-462.95 2663.75 444.95 2681.75 423.35 2681.75 c
-400.55 2681.75 382.55 2663.75 382.55 2642.15 c
-382.55 2620.55 400.55 2602.55 423.35 2602.55 c
-444.95 2602.55 462.95 2620.55 462.95 2642.15 c
-f*
-693.35 2592.95 m
-712.55 2640.95 l
-693.35 2688.95 l
-845.75 2640.95 l
-f*
-2643.35 3232.55 308.4 103.2 re
-Y
-2643.35 3240.95 m
-2943.35 3328.55 l
-S
-0 0 6120 7920 re
-Y
-2682.95 3242.15 m
-2682.95 3263.75 2664.95 3281.75 2643.35 3281.75 c
-2620.55 3281.75 2602.55 3263.75 2602.55 3242.15 c
-2602.55 3220.55 2620.55 3202.55 2643.35 3202.55 c
-2664.95 3202.55 2682.95 3220.55 2682.95 3242.15 c
-f*
-2919.35 3272.15 m
-2925.35 3322.55 l
-2894.15 3362.15 l
-3053.75 3359.75 l
-f*
-2643.35 2812.55 320.4 190.8 re
-Y
-2643.35 2820.95 m
-2955.35 3003.35 l
-S
-0 0 6120 7920 re
-Y
-2682.95 2822.15 m
-2682.95 2843.75 2664.95 2861.75 2643.35 2861.75 c
-2620.55 2861.75 2602.55 2843.75 2602.55 2822.15 c
-2602.55 2800.55 2620.55 2782.55 2643.35 2782.55 c
-2664.95 2782.55 2682.95 2800.55 2682.95 2822.15 c
-f*
-2945.75 2942.15 m
-2937.35 2992.55 l
-2897.75 3024.95 l
-3053.75 3059.75 l
-f*
-0.2 i
-3427 3264.14 m
-3427 3182.6 l
-3427 3167.66 3424.88 3165.32 3410.94 3164.42 c
-3410.94 3161 l
-3461.34 3161 l
-3461.34 3164.42 l
-3448.2 3165.32 3446 3167.84 3446 3180.62 c
-3446 3260.54 l
-3446 3273.32 3448.29 3275.66 3461.34 3276.74 c
-3461.34 3280 l
-3425.52 3280 l
-3385.74 3189.26 l
-3344.16 3280 l
-3308.52 3280 l
-3308.52 3277 l
-3323.28 3276.09 3326 3273.89 3326 3260.54 c
-3326 3187.46 l
-3326 3168.92 3323.43 3165.5 3308.16 3164.42 c
-3308.16 3161 l
-3350.46 3161 l
-3350.46 3164 l
-3336.6 3164.73 3334 3168.95 3334 3187.46 c
-3334 3260 l
-3378.72 3161 l
-3381.24 3161 l
-h
-3466.02 3161 m
-f*
-3546.56 3172.88 m
-3543.5 3170.36 3541.34 3169.2 3538.64 3169.2 c
-3534.5 3169.2 3533 3171.78 3533 3179.9 c
-3533 3215 l
-3533 3224.18 3532.16 3229.22 3529.82 3233.36 c
-3526.04 3240.2 3518.3 3243.8 3507.32 3243.8 c
-3498.14 3243.8 3489.5 3241.28 3484.46 3237.14 c
-3479.96 3233.36 3477 3228.14 3477 3223.64 c
-3477 3219.5 3480.46 3215.9 3484.82 3215.9 c
-3489.14 3215.9 3492.92 3219.5 3492.92 3223.46 c
-3492.92 3224.18 3492.74 3225.08 3492.56 3226.34 c
-3492.2 3227.96 3492 3229.4 3492 3230.66 c
-3492 3235.52 3497.77 3239.8 3504.98 3239.8 c
-3513.8 3239.8 3518 3234.47 3518 3224.54 c
-3518 3213.56 l
-3490.76 3202.4 3487.75 3200.96 3480.14 3194.12 c
-3476.18 3190.52 3473.66 3184.4 3473.66 3178.46 c
-3473.66 3167.12 3481.4 3159.2 3492.56 3159.2 c
-3500.48 3159.2 3507.86 3162.98 3518.84 3172.34 c
-3519.74 3162.8 3522.98 3159.2 3530.36 3159.2 c
-3536.48 3159.2 3540.26 3161.36 3546.56 3168.2 c
-h
-3518 3183.14 m
-3518 3177.56 3517.23 3175.94 3513.98 3173.6 c
-3509.66 3171.08 3504.62 3169.2 3500.84 3169.2 c
-3494.54 3169.2 3489.48 3175.51 3489.48 3183.5 c
-3489.48 3184.22 l
-3489.48 3194.84 3496.7 3201.32 3518 3209.24 c
-h
-3546.92 3161 m
-f*
-3547.62 3231.74 m
-3549.24 3231.92 3550.5 3231.92 3552.12 3231.92 c
-3558.24 3231.92 3560 3230.12 3560 3221.66 c
-3560 3137.42 l
-3560 3128.06 3557.94 3126.08 3546.9 3125 c
-3546.9 3122 l
-3590.46 3122 l
-3590.46 3125 l
-3576.96 3125.18 3575 3127.19 3575 3138.68 c
-3575 3166.94 l
-3581.34 3161 3585.4 3159.2 3592.8 3159.2 c
-3614.22 3159.2 3630 3179.36 3630 3205.46 c
-3630 3227.78 3617.65 3243.8 3600.54 3243.8 c
-3590.61 3243.8 3582.8 3239.48 3575 3229.58 c
-3575 3243.44 l
-3573.54 3243.8 l
-3564 3240.02 3557.52 3237.68 3547.62 3234.62 c
-h
-3575 3221.12 m
-3575 3226.52 3584.87 3232.8 3592.98 3232.8 c
-3606.3 3232.8 3615 3219.2 3615 3198.26 c
-3615 3178.46 3606.23 3164.2 3593.34 3164.2 c
-3584.88 3164.2 3575 3171.09 3575 3176.84 c
-h
-3636 3161 m
-f*
-3637.62 3231.74 m
-3639.24 3231.92 3640.5 3231.92 3642.12 3231.92 c
-3648.24 3231.92 3650 3230.12 3650 3221.66 c
-3650 3137.42 l
-3650 3128.06 3647.94 3126.08 3636.9 3125 c
-3636.9 3122 l
-3680.46 3122 l
-3680.46 3125 l
-3666.96 3125.18 3665 3127.19 3665 3138.68 c
-3665 3166.94 l
-3671.34 3161 3675.4 3159.2 3682.8 3159.2 c
-3704.22 3159.2 3720 3179.36 3720 3205.46 c
-3720 3227.78 3707.65 3243.8 3690.54 3243.8 c
-3680.61 3243.8 3672.8 3239.48 3665 3229.58 c
-3665 3243.44 l
-3663.54 3243.8 l
-3654 3240.02 3647.52 3237.68 3637.62 3234.62 c
-h
-3665 3221.12 m
-3665 3226.52 3674.87 3232.8 3682.98 3232.8 c
-3696.3 3232.8 3705 3219.2 3705 3198.26 c
-3705 3178.46 3696.23 3164.2 3683.34 3164.2 c
-3674.88 3164.2 3665 3171.09 3665 3176.84 c
-h
-3726 3161 m
-f*
-3757.5 3243.8 m
-3729.6 3233.9 l
-3729.6 3231.2 l
-3731.04 3231.38 l
-3733.2 3231.74 3735.54 3231.72 3737.16 3231.72 c
-3741.48 3231.72 3743 3228.89 3743 3221.12 c
-3743 3179.36 l
-3743 3166.4 3741.21 3164.42 3728.88 3163.7 c
-3728.88 3161 l
-3771.54 3161 l
-3771.54 3163.7 l
-3759.66 3164.6 3758 3166.4 3758 3179.36 c
-3758 3243.26 l
-h
-3749.22 3284 m
-3744.18 3284 3740 3279.83 3740 3274.76 c
-3740 3269.54 3743.98 3266 3749.04 3266 c
-3754.44 3266 3759 3269.78 3759 3274.76 c
-3759 3279.8 3754.59 3284 3749.22 3284 c
-h
-3776.04 3161 m
-f*
-3778.88 3232.64 m
-3780.14 3233.18 3781.76 3233.36 3783.74 3233.36 c
-3788.78 3233.36 3790 3230.66 3790 3221.84 c
-3790 3177.2 l
-3790 3166.94 3788.09 3164.42 3779.24 3163.7 c
-3779.24 3161 l
-3817.4 3161 l
-3817.4 3163.7 l
-3808.22 3164.42 3805 3166.58 3805 3173.06 c
-3805 3223.64 l
-3813.7 3231.74 3817.95 3233.8 3824.06 3233.8 c
-3832.88 3233.8 3837 3228.25 3837 3216.44 c
-3837 3178.82 l
-3837 3167.48 3834.7 3164.42 3825.86 3163.7 c
-3825.86 3161 l
-3863.3 3161 l
-3863.3 3163.7 l
-3854.48 3164.6 3852 3166.76 3852 3175.58 c
-3852 3216.8 l
-3852 3233.72 3844.2 3243.8 3831.08 3243.8 c
-3822.64 3243.8 3816.94 3240.74 3804.46 3229.22 c
-3804.46 3243.44 l
-3803.72 3243.8 l
-3794.9 3240.56 3788.78 3238.58 3778.88 3235.7 c
-h
-3866 3161 m
-f*
-3950.6 3231 m
-3950.6 3238 l
-3936.74 3238 l
-3933.14 3238 3930.44 3238.5 3926.84 3239.66 c
-3922.88 3241.1 l
-3918.02 3242.9 3913.16 3243.8 3908.48 3243.8 c
-3891.74 3243.8 3878.38 3230.84 3878.38 3214.46 c
-3878.38 3203.12 3883.07 3196.28 3895.16 3190.34 c
-3892.64 3187.82 3890.12 3185.48 3887.42 3183.14 c
-3881.48 3177.92 3879.1 3174.32 3879.1 3170.72 c
-3879.1 3166.76 3881.09 3164.78 3888.68 3161.18 c
-3875.72 3151.82 3871 3145.88 3871 3139.22 c
-3871 3129.68 3884.88 3122 3902.18 3122 c
-3915.14 3122 3928.82 3126.23 3938.18 3133.28 c
-3945.56 3139.04 3949 3144.98 3949 3152.18 c
-3949 3163.34 3940.53 3170.9 3927.2 3171.44 c
-3903.98 3172.52 l
-3894.26 3172.88 3889.94 3174.5 3889.94 3177.38 c
-3889.94 3180.98 3895.88 3187.28 3900.74 3188.72 c
-3904.16 3188.36 l
-3907.4 3188 3909.92 3188 3911 3188 c
-3917.3 3188 3924.32 3190.46 3929.72 3194.84 c
-3936.2 3199.88 3939 3206.36 3939 3215.72 c
-3939 3221 3938.12 3225.18 3935.66 3231 c
-h
-3892.46 3160.64 m
-3898.58 3159.38 3912.8 3158.3 3921.62 3158.3 c
-3938 3158.3 3944 3156.14 3944 3149.48 c
-3944 3139.04 3930.3 3132 3909.74 3132 c
-3893.9 3132 3884 3137.23 3884 3145.16 c
-3884 3149.3 3885.55 3152 3892.46 3160.64 c
-h
-3893.36 3221.84 m
-3893.36 3232.46 3898.4 3238.8 3906.68 3238.8 c
-3912.26 3238.8 3916.94 3235.73 3919.82 3230.3 c
-3923.24 3224 3925 3215.9 3925 3208.52 c
-3925 3198.62 3919.87 3193 3911.9 3193 c
-3900.74 3193 3893.36 3204.43 3893.36 3221.3 c
-h
-3956 3161 m
-f*
-4001 3161 m
-f*
-4004.06 3280 m
-4004.06 3277 l
-4019.18 3276.09 4021 3274.07 4021 3260.54 c
-4021 3180.62 l
-4021 3167.3 4018.71 3164.96 4004.06 3164.42 c
-4004.06 3161 l
-4064.18 3161 l
-4091 3161 4108 3173.42 4108 3193.4 c
-4108 3201.32 4104.85 3208.52 4098.92 3213.74 c
-4093.52 3218.6 4088.66 3220.94 4076.96 3223.64 c
-4086.32 3225.98 4090.1 3227.78 4094.42 3231.56 c
-4098.92 3235.52 4102 3242.18 4102 3249.56 c
-4102 3269.72 4085.85 3280 4054.46 3280 c
-h
-4040 3219.68 m
-4056.94 3219.68 4064.78 3218.78 4071.56 3216.26 c
-4082 3212.12 4087 3204.74 4087 3193.22 c
-4087 3183.5 4083.23 3176.48 4076.06 3172.34 c
-4070.3 3168.92 4063.1 3168 4050.5 3168 c
-4042.22 3168 4040 3169.55 4040 3175.04 c
-h
-4040 3226.88 m
-4040 3268.1 l
-4040 3271.88 4041.16 3273 4043.66 3273 c
-4051.58 3273 l
-4072.28 3273 4083 3264.71 4083 3248.84 c
-4083 3234.8 4073.55 3226.88 4056.8 3226.88 c
-h
-4121.06 3161 m
-f*
-3487 2064.14 m
-3487 1982.6 l
-3487 1967.66 3484.88 1965.32 3470.94 1964.42 c
-3470.94 1961 l
-3521.34 1961 l
-3521.34 1964.42 l
-3508.2 1965.32 3506 1967.84 3506 1980.62 c
-3506 2060.54 l
-3506 2073.32 3508.29 2075.66 3521.34 2076.74 c
-3521.34 2080 l
-3485.52 2080 l
-3445.74 1989.26 l
-3404.16 2080 l
-3368.52 2080 l
-3368.52 2077 l
-3383.28 2076.09 3386 2073.89 3386 2060.54 c
-3386 1987.46 l
-3386 1968.92 3383.43 1965.5 3368.16 1964.42 c
-3368.16 1961 l
-3410.46 1961 l
-3410.46 1964 l
-3396.6 1964.73 3394 1968.95 3394 1987.46 c
-3394 2060 l
-3438.72 1961 l
-3441.24 1961 l
-h
-3526.02 1961 m
-f*
-3606.56 1972.88 m
-3603.5 1970.36 3601.34 1969.2 3598.64 1969.2 c
-3594.5 1969.2 3593 1971.78 3593 1979.9 c
-3593 2015 l
-3593 2024.18 3592.16 2029.22 3589.82 2033.36 c
-3586.04 2040.2 3578.3 2043.8 3567.32 2043.8 c
-3558.14 2043.8 3549.5 2041.28 3544.46 2037.14 c
-3539.96 2033.36 3537 2028.14 3537 2023.64 c
-3537 2019.5 3540.46 2015.9 3544.82 2015.9 c
-3549.14 2015.9 3552.92 2019.5 3552.92 2023.46 c
-3552.92 2024.18 3552.74 2025.08 3552.56 2026.34 c
-3552.2 2027.96 3552 2029.4 3552 2030.66 c
-3552 2035.52 3557.77 2039.8 3564.98 2039.8 c
-3573.8 2039.8 3578 2034.47 3578 2024.54 c
-3578 2013.56 l
-3550.76 2002.4 3547.75 2000.96 3540.14 1994.12 c
-3536.18 1990.52 3533.66 1984.4 3533.66 1978.46 c
-3533.66 1967.12 3541.4 1959.2 3552.56 1959.2 c
-3560.48 1959.2 3567.86 1962.98 3578.84 1972.34 c
-3579.74 1962.8 3582.98 1959.2 3590.36 1959.2 c
-3596.48 1959.2 3600.26 1961.36 3606.56 1968.2 c
-h
-3578 1983.14 m
-3578 1977.56 3577.23 1975.94 3573.98 1973.6 c
-3569.66 1971.08 3564.62 1969.2 3560.84 1969.2 c
-3554.54 1969.2 3549.48 1975.51 3549.48 1983.5 c
-3549.48 1984.22 l
-3549.48 1994.84 3556.7 2001.32 3578 2009.24 c
-h
-3606.92 1961 m
-f*
-3607.62 2031.74 m
-3609.24 2031.92 3610.5 2031.92 3612.12 2031.92 c
-3618.24 2031.92 3620 2030.12 3620 2021.66 c
-3620 1937.42 l
-3620 1928.06 3617.94 1926.08 3606.9 1925 c
-3606.9 1922 l
-3650.46 1922 l
-3650.46 1925 l
-3636.96 1925.18 3635 1927.19 3635 1938.68 c
-3635 1966.94 l
-3641.34 1961 3645.4 1959.2 3652.8 1959.2 c
-3674.22 1959.2 3690 1979.36 3690 2005.46 c
-3690 2027.78 3677.65 2043.8 3660.54 2043.8 c
-3650.61 2043.8 3642.8 2039.48 3635 2029.58 c
-3635 2043.44 l
-3633.54 2043.8 l
-3624 2040.02 3617.52 2037.68 3607.62 2034.62 c
-h
-3635 2021.12 m
-3635 2026.52 3644.87 2032.8 3652.98 2032.8 c
-3666.3 2032.8 3675 2019.2 3675 1998.26 c
-3675 1978.46 3666.23 1964.2 3653.34 1964.2 c
-3644.88 1964.2 3635 1971.09 3635 1976.84 c
-h
-3696 1961 m
-f*
-3697.62 2031.74 m
-3699.24 2031.92 3700.5 2031.92 3702.12 2031.92 c
-3708.24 2031.92 3710 2030.12 3710 2021.66 c
-3710 1937.42 l
-3710 1928.06 3707.94 1926.08 3696.9 1925 c
-3696.9 1922 l
-3740.46 1922 l
-3740.46 1925 l
-3726.96 1925.18 3725 1927.19 3725 1938.68 c
-3725 1966.94 l
-3731.34 1961 3735.4 1959.2 3742.8 1959.2 c
-3764.22 1959.2 3780 1979.36 3780 2005.46 c
-3780 2027.78 3767.65 2043.8 3750.54 2043.8 c
-3740.61 2043.8 3732.8 2039.48 3725 2029.58 c
-3725 2043.44 l
-3723.54 2043.8 l
-3714 2040.02 3707.52 2037.68 3697.62 2034.62 c
-h
-3725 2021.12 m
-3725 2026.52 3734.87 2032.8 3742.98 2032.8 c
-3756.3 2032.8 3765 2019.2 3765 1998.26 c
-3765 1978.46 3756.23 1964.2 3743.34 1964.2 c
-3734.88 1964.2 3725 1971.09 3725 1976.84 c
-h
-3786 1961 m
-f*
-3817.5 2043.8 m
-3789.6 2033.9 l
-3789.6 2031.2 l
-3791.04 2031.38 l
-3793.2 2031.74 3795.54 2031.72 3797.16 2031.72 c
-3801.48 2031.72 3803 2028.89 3803 2021.12 c
-3803 1979.36 l
-3803 1966.4 3801.21 1964.42 3788.88 1963.7 c
-3788.88 1961 l
-3831.54 1961 l
-3831.54 1963.7 l
-3819.66 1964.6 3818 1966.4 3818 1979.36 c
-3818 2043.26 l
-h
-3809.22 2084 m
-3804.18 2084 3800 2079.83 3800 2074.76 c
-3800 2069.54 3803.98 2066 3809.04 2066 c
-3814.44 2066 3819 2069.78 3819 2074.76 c
-3819 2079.8 3814.59 2084 3809.22 2084 c
-h
-3836.04 1961 m
-f*
-3838.88 2032.64 m
-3840.14 2033.18 3841.76 2033.36 3843.74 2033.36 c
-3848.78 2033.36 3850 2030.66 3850 2021.84 c
-3850 1977.2 l
-3850 1966.94 3848.09 1964.42 3839.24 1963.7 c
-3839.24 1961 l
-3877.4 1961 l
-3877.4 1963.7 l
-3868.22 1964.42 3865 1966.58 3865 1973.06 c
-3865 2023.64 l
-3873.7 2031.74 3877.95 2033.8 3884.06 2033.8 c
-3892.88 2033.8 3897 2028.25 3897 2016.44 c
-3897 1978.82 l
-3897 1967.48 3894.7 1964.42 3885.86 1963.7 c
-3885.86 1961 l
-3923.3 1961 l
-3923.3 1963.7 l
-3914.48 1964.6 3912 1966.76 3912 1975.58 c
-3912 2016.8 l
-3912 2033.72 3904.2 2043.8 3891.08 2043.8 c
-3882.64 2043.8 3876.94 2040.74 3864.46 2029.22 c
-3864.46 2043.44 l
-3863.72 2043.8 l
-3854.9 2040.56 3848.78 2038.58 3838.88 2035.7 c
-h
-3926 1961 m
-f*
-4010.6 2031 m
-4010.6 2038 l
-3996.74 2038 l
-3993.14 2038 3990.44 2038.5 3986.84 2039.66 c
-3982.88 2041.1 l
-3978.02 2042.9 3973.16 2043.8 3968.48 2043.8 c
-3951.74 2043.8 3938.38 2030.84 3938.38 2014.46 c
-3938.38 2003.12 3943.07 1996.28 3955.16 1990.34 c
-3952.64 1987.82 3950.12 1985.48 3947.42 1983.14 c
-3941.48 1977.92 3939.1 1974.32 3939.1 1970.72 c
-3939.1 1966.76 3941.09 1964.78 3948.68 1961.18 c
-3935.72 1951.82 3931 1945.88 3931 1939.22 c
-3931 1929.68 3944.88 1922 3962.18 1922 c
-3975.14 1922 3988.82 1926.23 3998.18 1933.28 c
-4005.56 1939.04 4009 1944.98 4009 1952.18 c
-4009 1963.34 4000.53 1970.9 3987.2 1971.44 c
-3963.98 1972.52 l
-3954.26 1972.88 3949.94 1974.5 3949.94 1977.38 c
-3949.94 1980.98 3955.88 1987.28 3960.74 1988.72 c
-3964.16 1988.36 l
-3967.4 1988 3969.92 1988 3971 1988 c
-3977.3 1988 3984.32 1990.46 3989.72 1994.84 c
-3996.2 1999.88 3999 2006.36 3999 2015.72 c
-3999 2021 3998.12 2025.18 3995.66 2031 c
-h
-3952.46 1960.64 m
-3958.58 1959.38 3972.8 1958.3 3981.62 1958.3 c
-3998 1958.3 4004 1956.14 4004 1949.48 c
-4004 1939.04 3990.3 1932 3969.74 1932 c
-3953.9 1932 3944 1937.23 3944 1945.16 c
-3944 1949.3 3945.55 1952 3952.46 1960.64 c
-h
-3953.36 2021.84 m
-3953.36 2032.46 3958.4 2038.8 3966.68 2038.8 c
-3972.26 2038.8 3976.94 2035.73 3979.82 2030.3 c
-3983.24 2024 3985 2015.9 3985 2008.52 c
-3985 1998.62 3979.87 1993 3971.9 1993 c
-3960.74 1993 3953.36 2004.43 3953.36 2021.3 c
-h
-4016 1961 m
-f*
-4061 1961 m
-f*
-4172.6 2042 m
-4170.98 2082.52 l
-4167.2 2082.52 l
-4166.12 2078.84 4163.24 2076.58 4159.82 2076.58 c
-4158.02 2076.58 4155.5 2077.17 4152.62 2078.36 c
-4143.8 2081.24 4134.98 2082.52 4126.16 2082.52 c
-4112.3 2082.52 4098.08 2077.36 4087.1 2068.46 c
-4073.42 2057.12 4066 2040.02 4066 2019.5 c
-4066 1982.96 4089.96 1958.48 4125.8 1958.48 c
-4146.14 1958.48 4163.96 1966.76 4174.94 1981.34 c
-4171.7 1984.58 l
-4158.38 1971.8 4146.5 1966.48 4131.56 1966.48 c
-4120.76 1966.48 4111.04 1969.69 4103.48 1975.94 c
-4092.86 1984.76 4087 2000.96 4087 2021.84 c
-4087 2054.42 4103.71 2075.52 4129.76 2075.52 c
-4140.2 2075.52 4149.38 2071.73 4156.58 2064.5 c
-4162.34 2058.74 4165.04 2053.7 4168.46 2042 c
-h
-4181.06 1961 m
-f*
-3485.6 3962 m
-3483.98 4002.52 l
-3480.2 4002.52 l
-3479.12 3998.84 3476.24 3996.58 3472.82 3996.58 c
-3471.02 3996.58 3468.5 3997.17 3465.62 3998.36 c
-3456.8 4001.24 3447.98 4002.52 3439.16 4002.52 c
-3425.3 4002.52 3411.08 3997.36 3400.1 3988.46 c
-3386.42 3977.12 3379 3960.02 3379 3939.5 c
-3379 3902.96 3402.96 3878.48 3438.8 3878.48 c
-3459.14 3878.48 3476.96 3886.76 3487.94 3901.34 c
-3484.7 3904.58 l
-3471.38 3891.8 3459.5 3886.48 3444.56 3886.48 c
-3433.76 3886.48 3424.04 3889.69 3416.48 3895.94 c
-3405.86 3904.76 3400 3920.96 3400 3941.84 c
-3400 3974.42 3416.71 3995.52 3442.76 3995.52 c
-3453.2 3995.52 3462.38 3991.73 3469.58 3984.5 c
-3475.34 3978.74 3478.04 3973.7 3481.46 3962 c
-h
-3494.06 3881 m
-f*
-3497.14 3952.64 m
-3499.48 3953.18 3500.92 3953.36 3502.9 3953.36 c
-3507.58 3953.36 3509 3950.48 3509 3941.84 c
-3509 3896.3 l
-3509 3886.58 3506.52 3883.88 3496.6 3883.7 c
-3496.6 3881 l
-3536.56 3881 l
-3536.56 3884 l
-3527.02 3884.35 3524 3886.27 3524 3893.06 c
-3524 3943.82 l
-3524 3944.18 3525.23 3945.44 3526.66 3946.88 c
-3530.98 3951.2 3539.08 3954.8 3545.74 3954.8 c
-3553.48 3954.8 3558 3948.2 3558 3935.54 c
-3558 3896.48 l
-3558 3886.4 3555.93 3884.42 3545.2 3883.7 c
-3545.2 3881 l
-3585.52 3881 l
-3585.52 3884 l
-3575.26 3884.18 3573 3887.17 3573 3898.1 c
-3573 3943.46 l
-3578.28 3951.2 3583.91 3954.8 3592.18 3954.8 c
-3602.44 3954.8 3606 3949.85 3606 3934.64 c
-3606 3896.66 l
-3606 3886.4 3604.52 3884.96 3593.8 3883.7 c
-3593.8 3881 l
-3633.22 3881 l
-3633.22 3883.7 l
-3628.54 3884.06 l
-3623.14 3884.42 3621 3887.66 3621 3894.68 c
-3621 3931.76 l
-3621 3953 3613.91 3963.8 3599.92 3963.8 c
-3589.48 3963.8 3580.3 3959.12 3570.58 3948.68 c
-3567.34 3958.94 3561.22 3963.8 3551.5 3963.8 c
-3543.31 3963.8 3538.57 3961.46 3523.28 3949.94 c
-3523.28 3963.44 l
-3522.34 3963.8 l
-3513.16 3960.38 3507.04 3958.4 3497.14 3955.7 c
-h
-3634.04 3881 m
-f*
-3634.62 3951.74 m
-3636.24 3951.92 3637.5 3951.92 3639.12 3951.92 c
-3645.24 3951.92 3647 3950.12 3647 3941.66 c
-3647 3857.42 l
-3647 3848.06 3644.94 3846.08 3633.9 3845 c
-3633.9 3842 l
-3677.46 3842 l
-3677.46 3845 l
-3663.96 3845.18 3662 3847.19 3662 3858.68 c
-3662 3886.94 l
-3668.34 3881 3672.4 3879.2 3679.8 3879.2 c
-3701.22 3879.2 3717 3899.36 3717 3925.46 c
-3717 3947.78 3704.65 3963.8 3687.54 3963.8 c
-3677.61 3963.8 3669.8 3959.48 3662 3949.58 c
-3662 3963.44 l
-3660.54 3963.8 l
-3651 3960.02 3644.52 3957.68 3634.62 3954.62 c
-h
-3662 3941.12 m
-3662 3946.52 3671.87 3952.8 3679.98 3952.8 c
-3693.3 3952.8 3702 3939.2 3702 3918.26 c
-3702 3898.46 3693.23 3884.2 3680.34 3884.2 c
-3671.88 3884.2 3662 3891.09 3662 3896.84 c
-h
-3723 3881 m
-f*
-3844 3984.14 m
-3844 3902.6 l
-3844 3887.66 3841.88 3885.32 3827.94 3884.42 c
-3827.94 3881 l
-3878.34 3881 l
-3878.34 3884.42 l
-3865.2 3885.32 3863 3887.84 3863 3900.62 c
-3863 3980.54 l
-3863 3993.32 3865.29 3995.66 3878.34 3996.74 c
-3878.34 4000 l
-3842.52 4000 l
-3802.74 3909.26 l
-3761.16 4000 l
-3725.52 4000 l
-3725.52 3997 l
-3740.28 3996.09 3743 3993.89 3743 3980.54 c
-3743 3907.46 l
-3743 3888.92 3740.43 3885.5 3725.16 3884.42 c
-3725.16 3881 l
-3767.46 3881 l
-3767.46 3884 l
-3753.6 3884.73 3751 3888.95 3751 3907.46 c
-3751 3980 l
-3795.72 3881 l
-3798.24 3881 l
-h
-3883.02 3881 m
-f*
-3963.56 3892.88 m
-3960.5 3890.36 3958.34 3889.2 3955.64 3889.2 c
-3951.5 3889.2 3950 3891.78 3950 3899.9 c
-3950 3935 l
-3950 3944.18 3949.16 3949.22 3946.82 3953.36 c
-3943.04 3960.2 3935.3 3963.8 3924.32 3963.8 c
-3915.14 3963.8 3906.5 3961.28 3901.46 3957.14 c
-3896.96 3953.36 3894 3948.14 3894 3943.64 c
-3894 3939.5 3897.46 3935.9 3901.82 3935.9 c
-3906.14 3935.9 3909.92 3939.5 3909.92 3943.46 c
-3909.92 3944.18 3909.74 3945.08 3909.56 3946.34 c
-3909.2 3947.96 3909 3949.4 3909 3950.66 c
-3909 3955.52 3914.77 3959.8 3921.98 3959.8 c
-3930.8 3959.8 3935 3954.47 3935 3944.54 c
-3935 3933.56 l
-3907.76 3922.4 3904.75 3920.96 3897.14 3914.12 c
-3893.18 3910.52 3890.66 3904.4 3890.66 3898.46 c
-3890.66 3887.12 3898.4 3879.2 3909.56 3879.2 c
-3917.48 3879.2 3924.86 3882.98 3935.84 3892.34 c
-3936.74 3882.8 3939.98 3879.2 3947.36 3879.2 c
-3953.48 3879.2 3957.26 3881.36 3963.56 3888.2 c
-h
-3935 3903.14 m
-3935 3897.56 3934.23 3895.94 3930.98 3893.6 c
-3926.66 3891.08 3921.62 3889.2 3917.84 3889.2 c
-3911.54 3889.2 3906.48 3895.51 3906.48 3903.5 c
-3906.48 3904.22 l
-3906.48 3914.84 3913.7 3921.32 3935 3929.24 c
-h
-3963.92 3881 m
-f*
-3964.62 3951.74 m
-3966.24 3951.92 3967.5 3951.92 3969.12 3951.92 c
-3975.24 3951.92 3977 3950.12 3977 3941.66 c
-3977 3857.42 l
-3977 3848.06 3974.94 3846.08 3963.9 3845 c
-3963.9 3842 l
-4007.46 3842 l
-4007.46 3845 l
-3993.96 3845.18 3992 3847.19 3992 3858.68 c
-3992 3886.94 l
-3998.34 3881 4002.4 3879.2 4009.8 3879.2 c
-4031.22 3879.2 4047 3899.36 4047 3925.46 c
-4047 3947.78 4034.65 3963.8 4017.54 3963.8 c
-4007.61 3963.8 3999.8 3959.48 3992 3949.58 c
-3992 3963.44 l
-3990.54 3963.8 l
-3981 3960.02 3974.52 3957.68 3964.62 3954.62 c
-h
-3992 3941.12 m
-3992 3946.52 4001.87 3952.8 4009.98 3952.8 c
-4023.3 3952.8 4032 3939.2 4032 3918.26 c
-4032 3898.46 4023.23 3884.2 4010.34 3884.2 c
-4001.88 3884.2 3992 3891.09 3992 3896.84 c
-h
-4053 3881 m
-f*
-1 i
-4433.75 3262.55 330 104.4 re
-Y
-4433.75 3359.75 m
-4755.35 3270.95 l
-S
-0 0 6120 7920 re
-Y
-4472.15 3360.95 m
-4472.15 3382.55 4454.15 3400.55 4432.55 3400.55 c
-4410.95 3400.55 4392.95 3382.55 4392.95 3360.95 c
-4392.95 3339.35 4410.95 3321.35 4432.55 3321.35 c
-4454.15 3321.35 4472.15 3339.35 4472.15 3360.95 c
-f*
-4706.15 3234.95 m
-4737.35 3275.75 l
-4731.35 3327.35 l
-4865.75 3240.95 l
-f*
-4433.75 2868.95 339.6 190.8 re
-Y
-4433.75 3059.75 m
-4764.95 2877.35 l
-S
-0 0 6120 7920 re
-Y
-4472.15 3060.95 m
-4472.15 3082.55 4454.15 3100.55 4432.55 3100.55 c
-4410.95 3100.55 4392.95 3082.55 4392.95 3060.95 c
-4392.95 3039.35 4410.95 3021.35 4432.55 3021.35 c
-4454.15 3021.35 4472.15 3039.35 4472.15 3060.95 c
-f*
-4709.75 2853.35 m
-4748.15 2885.75 l
-4756.55 2936.15 l
-4865.75 2820.95 l
-f*
-2633.75 2105.75 342 294 re
-Y
-2633.75 2399.75 m
-2967.35 2114.15 l
-S
-0 0 6120 7920 re
-Y
-2672.15 2400.95 m
-2672.15 2422.55 2654.15 2440.55 2632.55 2440.55 c
-2610.95 2440.55 2592.95 2422.55 2592.95 2400.95 c
-2592.95 2379.35 2610.95 2361.35 2632.55 2361.35 c
-2654.15 2361.35 2672.15 2379.35 2672.15 2400.95 c
-f*
-2907.35 2103.35 m
-2951.75 2127.35 l
-2968.55 2174.15 l
-3053.75 2039.75 l
-f*
-4433.75 2031.35 342 295.2 re
-Y
-4433.75 2039.75 m
-4767.35 2326.55 l
-S
-0 0 6120 7920 re
-Y
-4472.15 2040.95 m
-4472.15 2062.55 4454.15 2080.55 4432.55 2080.55 c
-4410.95 2080.55 4392.95 2062.55 4392.95 2040.95 c
-4392.95 2019.35 4410.95 2001.35 4432.55 2001.35 c
-4454.15 2001.35 4472.15 2019.35 4472.15 2040.95 c
-f*
-4768.55 2264.15 m
-4751.75 2312.15 l
-4707.35 2336.15 l
-4853.75 2399.75 l
-f*
-4863.35 3232.55 319.2 15.5999 re
-Y
-4860.95 3240.95 m
-5175.35 3240.95 l
-S
-0 0 6120 7920 re
-Y
-4902.95 3242.15 m
-4902.95 3263.75 4884.95 3281.75 4863.35 3281.75 c
-4840.55 3281.75 4822.55 3263.75 4822.55 3242.15 c
-4822.55 3220.55 4840.55 3202.55 4863.35 3202.55 c
-4884.95 3202.55 4902.95 3220.55 4902.95 3242.15 c
-f*
-5133.35 3192.95 m
-5152.55 3240.95 l
-5133.35 3288.95 l
-5285.75 3240.95 l
-f*
-4863.35 2812.55 319.2 15.5999 re
-Y
-4860.95 2820.95 m
-5175.35 2820.95 l
-S
-0 0 6120 7920 re
-Y
-4902.95 2822.15 m
-4902.95 2843.75 4884.95 2861.75 4863.35 2861.75 c
-4840.55 2861.75 4822.55 2843.75 4822.55 2822.15 c
-4822.55 2800.55 4840.55 2782.55 4863.35 2782.55 c
-4884.95 2782.55 4902.95 2800.55 4902.95 2822.15 c
-f*
-5133.35 2772.95 m
-5152.55 2820.95 l
-5133.35 2868.95 l
-5285.75 2820.95 l
-f*
-4863.35 2392.55 319.2 15.5999 re
-Y
-4860.95 2400.95 m
-5175.35 2400.95 l
-S
-0 0 6120 7920 re
-Y
-4902.95 2402.15 m
-4902.95 2423.75 4884.95 2441.75 4863.35 2441.75 c
-4840.55 2441.75 4822.55 2423.75 4822.55 2402.15 c
-4822.55 2380.55 4840.55 2362.55 4863.35 2362.55 c
-4884.95 2362.55 4902.95 2380.55 4902.95 2402.15 c
-f*
-5133.35 2352.95 m
-5152.55 2400.95 l
-5133.35 2448.95 l
-5285.75 2400.95 l
-f*
-2333.75 3231.35 206.4 16.7996 re
-Y
-2333.75 3239.75 m
-2531.75 3240.95 l
-S
-0 0 6120 7920 re
-Y
-2372.15 3240.95 m
-2372.15 3262.55 2354.15 3280.55 2332.55 3280.55 c
-2310.95 3280.55 2292.95 3262.55 2292.95 3240.95 c
-2292.95 3219.35 2310.95 3201.35 2332.55 3201.35 c
-2354.15 3201.35 2372.15 3219.35 2372.15 3240.95 c
-f*
-2493.35 3192.95 m
-2512.55 3240.95 l
-2493.35 3288.95 l
-2645.75 3240.95 l
-f*
-2333.75 2811.35 206.4 16.7996 re
-Y
-2333.75 2819.75 m
-2531.75 2820.95 l
-S
-0 0 6120 7920 re
-Y
-2372.15 2820.95 m
-2372.15 2842.55 2354.15 2860.55 2332.55 2860.55 c
-2310.95 2860.55 2292.95 2842.55 2292.95 2820.95 c
-2292.95 2799.35 2310.95 2781.35 2332.55 2781.35 c
-2354.15 2781.35 2372.15 2799.35 2372.15 2820.95 c
-f*
-2493.35 2772.95 m
-2512.55 2820.95 l
-2493.35 2868.95 l
-2645.75 2820.95 l
-f*
-2333.75 2391.35 206.4 16.7996 re
-Y
-2333.75 2399.75 m
-2531.75 2400.95 l
-S
-0 0 6120 7920 re
-Y
-2372.15 2400.95 m
-2372.15 2422.55 2354.15 2440.55 2332.55 2440.55 c
-2310.95 2440.55 2292.95 2422.55 2292.95 2400.95 c
-2292.95 2379.35 2310.95 2361.35 2332.55 2361.35 c
-2354.15 2361.35 2372.15 2379.35 2372.15 2400.95 c
-f*
-2493.35 2352.95 m
-2512.55 2400.95 l
-2493.35 2448.95 l
-2645.75 2400.95 l
-f*
-5283.35 3232.55 319.2 15.5999 re
-Y
-5280.95 3240.95 m
-5595.35 3240.95 l
-S
-0 0 6120 7920 re
-Y
-5322.95 3242.15 m
-5322.95 3263.75 5304.95 3281.75 5283.35 3281.75 c
-5260.55 3281.75 5242.55 3263.75 5242.55 3242.15 c
-5242.55 3220.55 5260.55 3202.55 5283.35 3202.55 c
-5304.95 3202.55 5322.95 3220.55 5322.95 3242.15 c
-f*
-5553.35 3192.95 m
-5572.55 3240.95 l
-5553.35 3288.95 l
-5705.75 3240.95 l
-f*
-5283.35 2812.55 319.2 15.5999 re
-Y
-5280.95 2820.95 m
-5595.35 2820.95 l
-S
-0 0 6120 7920 re
-Y
-5322.95 2822.15 m
-5322.95 2843.75 5304.95 2861.75 5283.35 2861.75 c
-5260.55 2861.75 5242.55 2843.75 5242.55 2822.15 c
-5242.55 2800.55 5260.55 2782.55 5283.35 2782.55 c
-5304.95 2782.55 5322.95 2800.55 5322.95 2822.15 c
-f*
-5553.35 2772.95 m
-5572.55 2820.95 l
-5553.35 2868.95 l
-5705.75 2820.95 l
-f*
-5283.35 2392.55 319.2 15.5999 re
-Y
-5280.95 2400.95 m
-5595.35 2400.95 l
-S
-0 0 6120 7920 re
-Y
-5322.95 2402.15 m
-5322.95 2423.75 5304.95 2441.75 5283.35 2441.75 c
-5260.55 2441.75 5242.55 2423.75 5242.55 2402.15 c
-5242.55 2380.55 5260.55 2362.55 5283.35 2362.55 c
-5304.95 2362.55 5322.95 2380.55 5322.95 2402.15 c
-f*
-5553.35 2352.95 m
-5572.55 2400.95 l
-5553.35 2448.95 l
-5705.75 2400.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 2438 a FG(Figure)h(4:)41 b(CmpMaps)28
-b(\(comp)s(ound)h(Mappings\))h(ma)m(y)g(b)s(e)f(nested)g(in)g(order)g
-(to)i(construct)f(complex)g(Map-)0 2551 y(pings)g(out)g(of)h(simpler)f
-(building)g(blo)s(c)m(ks.)1012 4887 y @beginspecial 141
- at llx 322 @lly 422 @urx 581 @ury 2107 @rwi @setspecial
-%%BeginDocument: sun210_figures/frames.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 141 322 422 581
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:50:26
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-2266.55 5424.95 m
-2266.55 5477.75 2223.35 5522.15 2169.35 5522.15 c
-1582.55 5522.15 l
-1529.75 5522.15 1485.35 5477.75 1485.35 5424.95 c
-1485.35 4778.15 l
-1485.35 4725.35 1529.75 4680.95 1582.55 4680.95 c
-2169.35 4680.95 l
-2223.35 4680.95 2266.55 4725.35 2266.55 4778.15 c
-f*
-1 g
-2201.75 5480.15 m
-2201.75 5532.95 2159.75 5576.15 2105.75 5576.15 c
-1527.35 5576.15 l
-1474.55 5576.15 1431.35 5532.95 1431.35 5480.15 c
-1431.35 4841.75 l
-1431.35 4788.95 1474.55 4745.75 1527.35 4745.75 c
-2105.75 4745.75 l
-2158.55 4745.75 2201.75 4788.95 2201.75 4841.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-2201.75 5480.15 m
-2201.75 5532.95 2159.75 5576.15 2105.75 5576.15 c
-1527.35 5576.15 l
-1474.55 5576.15 1431.35 5532.95 1431.35 5480.15 c
-1431.35 4841.75 l
-1431.35 4788.95 1474.55 4745.75 1527.35 4745.75 c
-2105.75 4745.75 l
-2158.55 4745.75 2201.75 4788.95 2201.75 4841.75 c
-h
-S
-2019.35 4731.35 15.5999 849.6 re
-Y
-2026.55 5583.35 m
-2026.55 4738.55 l
-S
-2026.55 5212.55 189.6 15.5999 re
-Y
-2024.15 5220.95 m
-2208.95 5220.95 l
-S
-0 0 6120 7920 re
-Y
-2064.95 5222.15 m
-2064.95 5243.75 2046.95 5261.75 2025.35 5261.75 c
-2002.55 5261.75 1984.55 5243.75 1984.55 5222.15 c
-1984.55 5200.55 2002.55 5182.55 2025.35 5182.55 c
-2046.95 5182.55 2064.95 5200.55 2064.95 5222.15 c
-f*
-2244.95 5222.15 m
-2244.95 5243.75 2226.95 5261.75 2205.35 5261.75 c
-2182.55 5261.75 2164.55 5243.75 2164.55 5222.15 c
-2164.55 5200.55 2182.55 5182.55 2205.35 5182.55 c
-2226.95 5182.55 2244.95 5200.55 2244.95 5222.15 c
-f*
-2026.55 4972.55 189.6 15.5999 re
-Y
-2024.15 4980.95 m
-2208.95 4980.95 l
-S
-0 0 6120 7920 re
-Y
-2064.95 4982.15 m
-2064.95 5003.75 2046.95 5021.75 2025.35 5021.75 c
-2002.55 5021.75 1984.55 5003.75 1984.55 4982.15 c
-1984.55 4960.55 2002.55 4942.55 2025.35 4942.55 c
-2046.95 4942.55 2064.95 4960.55 2064.95 4982.15 c
-f*
-2244.95 4982.15 m
-2244.95 5003.75 2226.95 5021.75 2205.35 5021.75 c
-2182.55 5021.75 2164.55 5003.75 2164.55 4982.15 c
-2164.55 4960.55 2182.55 4942.55 2205.35 4942.55 c
-2226.95 4942.55 2244.95 4960.55 2244.95 4982.15 c
-f*
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -1530 -5401]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -1615 -5401]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -1677 -5399]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -1747 -5401]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -1863 -5399]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -1569 -5179]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -1671 -5179]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -1741 -5179]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -1779 -5178]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-39 95 true[1 0 0 1 -1851 -5179]@85 imagemask
-J,fQKrdXtJs8E-#
-s8N'!5QCKY!$D7!!!!Q0huE`^s1eU7#QMR>!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:J-Z+i!8n+^^]8`m
-s1eUVs8Tk7#QOh>!!3-"^]4 at as1eU7+90+V!!iP>!!!'"^]4?7J%u$a!$AuV!!!8>!!!!$^]4?7!.Y%~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -2316 -5179]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-39 95 true[1 0 0 1 -2403 -5179]@85 imagemask
-J,fQKrdXtJs8E-#
-s8N'!5QCKY!$D7!!!!Q0huE`^s1eU7#QMR>!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:J-Z+i!8n+^^]8`m
-s1eUVs8Tk7#QOh>!!3-"^]4 at as1eU7+90+V!!iP>!!!'"^]4?7J%u$a!$AuV!!!8>!!!!$^]4?7!.Y%~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -2316 -4939]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-66 95 true[1 0 0 1 -2387 -4939]@85 imagemask
-&-)\0s8W,W!"],0
-s8W-!huF#^s8W-!s6p!js8W-!s8VQg!WW3"s8W,o!!*'!s8W-!p](;Ds8W-!s7cQo5QCc`s8Vus!$D7@
-s8W,s!!!Q0s8W-!rVup's8W-!s8Duu#J^<>!!)uu!!D-Z!!!!@!!!&hz%fcS0p](9o!!e#S!.4bH
-!!!+O!!#1_!!!!$J,fQkz!Pe[8%tFW[!!'e7!!g:>!!!#7!!!,Zz!!!!"n,NFgz!;HNoz!!%BH
-z!!!!_zz*rl9 at z!"XS[z!!!8>z!!!!(huE`Wz"7Q9jz!!2ip
-z!!!#szzIK0?Jz!'^G`z!!"*kz!!!!@^]4?7z&)[Efz!!hun
-z!!!8nz!!!!$p](9oz!W2otz!!3'!z!!!$!zzIt.M!z!.TM!z!!#7!
-z!!!!`huE`Wz+5d,!z!$C\1z!!!Q)z!!!!0p](9oz&,ZD-z!!iE%
-z!!!9'z!!!!(rVuouz"9/?$z!!E6$z!!!-$J,fQL!!!!$s*t(Lz!WRZM
-z!!3,8z!!!'"^]4?7!!!!"s1eU7z!WTq8z!!3,Xz!!!'"huEfY!!!!"s53k^z!WV'X
-#64`(!!3,X!!e#S!!!'"huF"4!!!!$s53kZ^]4?7"979Z"2Fm:!!E8Z!!D-Z!!!9(huEf9!!!!(s53kX
-n,NFg&-'EF!Up'h!"]+F!!)co!!",@^]4B4!!!!`s1eU7IK0?J5Q?66!.OtK!.Y$!!!#66!!3-"!!!!`
-^]4K:rr<$!+7K7 at s8Duu!"]&/s8Vus!!!9(s8W,s!!!!$s8W-!p](9o!WW3"s6p!g!!*'!s8V!W!!!"Ks8W,7z+92B at z!"],0rVuou!!!-$s7cQozJ,d:az!"\u-!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -1568 -4944]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -1670 -4944]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -1740 -4944]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -1778 -4943]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-66 95 true[1 0 0 1 -1833 -4944]@85 imagemask
-&-)\0s8W,W!"],0
-s8W-!huF#^s8W-!s6p!js8W-!s8VQg!WW3"s8W,o!!*'!s8W-!p](;Ds8W-!s7cQo5QCc`s8Vus!$D7@
-s8W,s!!!Q0s8W-!rVup's8W-!s8Duu#J^<>!!)uu!!D-Z!!!!@!!!&hz%fcS0p](9o!!e#S!.4bH
-!!!+O!!#1_!!!!$J,fQkz!Pe[8%tFW[!!'e7!!g:>!!!#7!!!,Zz!!!!"n,NFgz!;HNoz!!%BH
-z!!!!_zz*rl9 at z!"XS[z!!!8>z!!!!(huE`Wz"7Q9jz!!2ip
-z!!!#szzIK0?Jz!'^G`z!!"*kz!!!!@^]4?7z&)[Efz!!hun
-z!!!8nz!!!!$p](9oz!W2otz!!3'!z!!!$!zzIt.M!z!.TM!z!!#7!
-z!!!!`huE`Wz+5d,!z!$C\1z!!!Q)z!!!!0p](9oz&,ZD-z!!iE%
-z!!!9'z!!!!(rVuouz"9/?$z!!E6$z!!!-$J,fQL!!!!$s*t(Lz!WRZM
-z!!3,8z!!!'"^]4?7!!!!"s1eU7z!WTq8z!!3,Xz!!!'"huEfY!!!!"s53k^z!WV'X
-#64`(!!3,X!!e#S!!!'"huF"4!!!!$s53kZ^]4?7"979Z"2Fm:!!E8Z!!D-Z!!!9(huEf9!!!!(s53kX
-n,NFg&-'EF!Up'h!"]+F!!)co!!",@^]4B4!!!!`s1eU7IK0?J5Q?66!.OtK!.Y$!!!#66!!3-"!!!!`
-^]4K:rr<$!+7K7 at s8Duu!"]&/s8Vus!!!9(s8W,s!!!!$s8W-!p](9o!WW3"s6p!g!!*'!s8V!W!!!"Ks8W,7z+92B at z!"],0rVuou!!!-$s7cQozJ,d:az!"\u-!!!!~>
-Q
-0.564706 g
-4055.75 4824.95 m
-4055.75 4883.75 4008.95 4930.55 3950.15 4930.55 c
-3140.15 4930.55 l
-3081.35 4930.55 3034.55 4883.75 3034.55 4824.95 c
-3034.55 4194.95 l
-3034.55 4136.15 3081.35 4089.35 3140.15 4089.35 c
-3950.15 4089.35 l
-4008.95 4089.35 4055.75 4136.15 4055.75 4194.95 c
-f*
-1 g
-3990.95 4881.35 m
-3990.95 4938.95 3945.35 4984.55 3887.75 4984.55 c
-3083.75 4984.55 l
-3026.15 4984.55 2980.55 4938.95 2980.55 4881.35 c
-2980.55 4257.35 l
-2980.55 4199.75 3026.15 4154.15 3083.75 4154.15 c
-3887.75 4154.15 l
-3945.35 4154.15 3990.95 4199.75 3990.95 4257.35 c
-f*
-0 g
-3990.95 4881.35 m
-3990.95 4938.95 3945.35 4984.55 3887.75 4984.55 c
-3083.75 4984.55 l
-3026.15 4984.55 2980.55 4938.95 2980.55 4881.35 c
-2980.55 4257.35 l
-2980.55 4199.75 3026.15 4154.15 3083.75 4154.15 c
-3887.75 4154.15 l
-3945.35 4154.15 3990.95 4199.75 3990.95 4257.35 c
-h
-S
-3808.55 4139.75 15.5999 849.6 re
-Y
-3815.75 4991.75 m
-3815.75 4146.95 l
-S
-3815.75 4620.95 190.8 15.5999 re
-Y
-3813.35 4629.35 m
-3998.15 4629.35 l
-S
-0 0 6120 7920 re
-Y
-3855.35 4630.55 m
-3855.35 4653.35 3837.35 4671.35 3815.75 4671.35 c
-3792.95 4671.35 3774.95 4653.35 3774.95 4630.55 c
-3774.95 4608.95 3792.95 4590.95 3815.75 4590.95 c
-3837.35 4590.95 3855.35 4608.95 3855.35 4630.55 c
-f*
-4035.35 4630.55 m
-4035.35 4653.35 4017.35 4671.35 3995.75 4671.35 c
-3972.95 4671.35 3954.95 4653.35 3954.95 4630.55 c
-3954.95 4608.95 3972.95 4590.95 3995.75 4590.95 c
-4017.35 4590.95 4035.35 4608.95 4035.35 4630.55 c
-f*
-3815.75 4380.95 190.8 15.5999 re
-Y
-3813.35 4389.35 m
-3998.15 4389.35 l
-S
-0 0 6120 7920 re
-Y
-3855.35 4390.55 m
-3855.35 4413.35 3837.35 4431.35 3815.75 4431.35 c
-3792.95 4431.35 3774.95 4413.35 3774.95 4390.55 c
-3774.95 4368.95 3792.95 4350.95 3815.75 4350.95 c
-3837.35 4350.95 3855.35 4368.95 3855.35 4390.55 c
-f*
-4035.35 4390.55 m
-4035.35 4413.35 4017.35 4431.35 3995.75 4431.35 c
-3972.95 4431.35 3954.95 4413.35 3954.95 4390.55 c
-3954.95 4368.95 3972.95 4350.95 3995.75 4350.95 c
-4017.35 4350.95 4035.35 4368.95 4035.35 4390.55 c
-f*
-q[1 0 0 1 0 0]concat
-72 100 true[1 0 0 1 -3071 -4806]@85 imagemask
-#CldSIt.M!!!e#S
-5QC``!!!8>!WW3"huE`^^`WUVs82is#N5X^s8W*!!!iQ(s1n[7^]4W>s82j%s6p!ns8V!W!WVop#QOgS
-!!%NH!!iQ'!!!!`rW!3'qu?]s+9)<Gs7cQo!"]*[#QO8n!!!9(^^'nt!!!!(s54.^^]4?7"97iqs*t(L
-!!E8j#QFc(!!!'"p]pg!!!!!"s7ciuz!WW'&qu?]s!!3,t#Q+Q%!!!'"rWi2u!!!!"s8E8uz!WW-(n,NFg
-!!3-!#Oh]n!!!'"rs/#n!!!!$s8N>^z"98B+huE`W!!E9$#N,R^!!!9(rs-=>!!!!0s8N>>z
-+92?G^]4?7!'gM`#J^<>!!%NKrs+&S!!!'"s8N=S!!!!$s8W*!z&-)\/z!'gM`rVuou!!*'!
-s8Duu!!!-$s8W&u!!!!0s8W,sz5QCc`qu?]s!<<*!s7cQo!!iQ(s8Vio!!!Q0s8W,g!!!!`s8W-!n,NFgs8W-!
-s53kW"98E$s8V!W!!iQ(s8W,7!!", at s8W-!J,fR6s8W-!rr<$!J,fQKs8Duu!WW3"s8Vus!!E9$s8W,o
-!!!9(s8W-!n,NG!s8W-!s1eU7&-)\0s8N'!!$D7 at s8Vus!!#7`s8W,g!!!"Ks8W-!^]4?7J,fQKrr<$!
-!<<*!s82is!!*'!s8VQg!!!'"s8W,7!!!!"s8W-!z!WW3"qu?]s!!3-"s6p!g!!!-$s8Tk7!!!!$s8W*!z
-"98E!z!!E9$p](9o!:U*js53kW!!)Kjs8Tk7!!!&h"98CO!!!!"n,r^jz!Up3krVuou!!D]m
-s82is!!!,j"989!!!!!(n,`Rez#Ohcop](9o!"\Q"s7cQo!!!Q!!WVop!!!!@n,WL`z+7K:1
-p](9o!'frQs7cQo!!#7Q!.XbD!!!"Kn,Rt9zs6p"Qqu?]s!WVWh5PtK]!!E8j!$D1?!!!9(n,O!u!!!!0s6p"!rr<$!+91g1#QK;S!.Y%<!!E8Z!!3-"n,NIg
-n,N^ns6p!gJ,TF4s8VQg!'gM`s8RlD!!!Q0s8Virn,NFjs8W,7!Up'h!.Y%J!!2Qh!!!9(huEfI~>
-Q
-q[1 0 0 1 0 0]concat
-76 95 true[1 0 0 1 -3149 -4809]@85 imagemask
-+92B at p`KP9s6q-1
-s8Vj9s8W,g+92B at p`KP9s6pR!s8VQns8W,7!WW3"!!*'!s*t+Ls8DuuJ,fNK!.Y%H!!%NKrr<%Ks82is
-J,fKJ!'gM]!!*'!qu?^]s82iss8Vus!'gM]!!3-"p](:Ys82j!s8VQg!'gM]!!E9$huEaAs82j%s8V!W
-!'gM]!"],0^]4@!s82j-s8RTL!'gM]!$D7 at J,fR6s82j]s8N'!!'gM]!.Y%J!!!!`s82kHs82is!'gM]!<<)s!!!!`
-s82ots7cQo!'gM]!WW2h!!!!`s83!!s53kW!'gM]#QOh^!!!!`s83E-s1eU7!'gM]&-)Z[!!!!`s83u=
-s*t(L!'gM_5QC``!!!!`s8G7_rVuou!'gM`J,fEH!!!!`s8W-!qu?]s!'gM`s8Vio!!!!`s8W-!n,NFg
-!'gM`s8V!W!!!!`s8DuthuE`W!'gM]s8Tk7!!!!`s87BHJ,fQL!'gM]5Q?66!!!!`s83u=z!'gM]&,lP/!!!!`
-s83-"z!'gM]"8i-!!!!!`s82oqz!'gM]!<)ru!!!!`s82kHz!'gM]!'bu6!!!!`s82j=
-^]4?7!'gM]!"[uf!!!!`s82j%n,NFg!'gM]!!Dur!!!!`s82j!qu?]s!'gM]!!3'!!!!!`s82isrr<$!
-!'gM]!!%M!!!!!`s82isJ%u$a!'gM]!!#7Q!!!!`s82is5PP3Y!'gM]!!#7_!!!!`s82isJ,b$!!'gM]!!3-"huEaA
-s82j]s8W*!!'gM]!'gM`rr<$`s82j]s8W*!!'gM]!'gM`rr<$`s82isz!'gM]z!!!!`s82is
-z!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!", at s82isz+92B=z!!", at s82isz+92B=z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 94 true[1 0 0 1 -3228 -4780]@85 imagemask
-!$C\1z!!%NJ
-z!!!'"s*t(L!!!!$s8Tk7z#QOh^z!"],0n,NFg!!", at s7cQo!!!!@s8Vusz5QC9O
-z!'gMAIK0?J!!#7`i'%,@!!!!`s56*Az5QBX`z!'gMA%tFW[!!", at i"(><!!!!@s54-t
-z+917(^]4?7!"]+F"5j.Z!!!9(J-4^0!!!!"rW!&Yz!!!!"n,NFgz!Up'hz!!2ipz!!!#o
-zzp](9oz!;lfsz!!%BHz!!!"HzzIK0?Jz!<)ruz!!*$!
-z!!!'"z!!!!"rr<$!z"93lOz!!E7Oz!!!-$J,fQL!!!!(s1eU7z#QMR>
-z!"]+fz!!!Q0huE`W!!!!0s53kWz+91g1z!$D71z!!#7`n,NFg!!!!`s7cQoz5QCKY
-z!.Y%Hz!!%NKqu?]s!!!$!s82iszs8W&uz!<<)uz!!3-"rVuou!!!'"s8N'!
-!!!!$s8UsVz"98DYJ,fQL!!E9$O+731!!!9(s,V[1!!!!(s8Rkiz&-)Y7^]4?7!"],0#J^<>
-!!", at rr_0Z!!!!@s8E,Yz+92<Bn,NFg!'gM]!Up'h!!#7`quQ9e!!!"Ks82omzJ,f9Dp](9o!.Y%D!;HNo
-!!*'!n,W at d!!!$!s6p#9!!!!"s8VQgIK0?J!WW2X!.FnJ!!3-"huGq@!!!-$s1eV!!!!!$s8Tk7*rl9@
-#QOh>!$;1@!!iQ(J,g[A!!!Q0s*t([J,fQ[s8RTL&&8/F+92?@!"ZjF!$D7@!!!8>!!#7`rVup'huEaA
-s8Duu#N,R^5QC]_!!D]j!.Y%H!!!,j!!%NKqu?^!n,NIgs82is"8Diss8Vus!!iE%!WW3!!!!9'!!iQ(rr<$@rr>:`s8Virs8V"As8W,o"98DZ5QCc`p]LQri'78As7c]rs53~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -3297 -4809]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -3383 -4809]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -3445 -4807]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -3515 -4809]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -3631 -4807]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-92 93 true[1 0 0 1 -3429 -4587]@85 imagemask
-5QCc`s*t(L#QOhn
-5QCc`s*t(L#QOhn5QCc`s*t(L&-)\!!<<*!huE`W+92?@!$D7 at z5QCKY!"],-zJ,f!<!!iQ%
-zJ,eF,!!iQ!zs8Tk7!!iQ!!!!!"s8RTL!!E8j!!!!$s8N'!!!E8j!!!!$s8Duu!!E8j!!!!(
-s82is!!E8j!!!!0s7cQo!!E8j!!!!@s7cQo!!E8j!!!!@s6p!g!!E8j!!!!`s53kW!!E8j!!!"Ks1eU7!!E8j!!!$!
-s*t(L!!E8j!!!'"s*t(L!!E8j!!!'"rr<$!!!E8j!!!-$rVuou!!E8j!!!9(qu?]s!!E8j!!!Q0p](9o
-!!E8j!!!Q0n,NFg!!E8j!!", at n,NFg!!E8j!!#7`huE`W!!E8j!!%NK^]4?7!!E8j!!*'!J,fQL!!E8j
-!!*'!z!!E8j!!3-"z!!E8j!!E9#z!!E8j!!iQ%z!!E8j!!iQ!z!!E8j!"],!z!!E8j
-!$D71z!!E8j!'gMAz!!E8j!'gM!z!!E8j!.Y$!z!!E8j!<<'!z!!E8j!WW-!
-z!!E8j"98?#z!!E8j"989!z!!E8j#QOQ!z!!E9$s8VQgz!!E9$s8V!Wz
-!!E9$s8W&uz!!E9$s8W,Wz!!E9$s8W,oz!!E8j"98E$z!!E8j!!iQ(^]4?7!!E8j!!*'!huE`W
-!!E8j!!", at p](9o!!E8j!!!9(qu?]s!!E8j!!!-$rVuou!!E8j!!!$!rr<$!!!E8j!!!"Ks*t(L!!E8j
-!!!!`s*t(L!!E8j!!!!`s1eU7!!E8j!!!!@s1eU7!!E8j!!!!@s53kW!!E8j!!!!0s53kW!!E8j!!!!0
-s53kW!!E8j!!!!0s53kW!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(
-s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g
-!!E8j!!!!(s6p!g!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!@s1eU7!!E8j
-!!!!@s1eU7!!E8j!!!!`s1eU7!!E8j!!!!`s*t(L!!E8j!!!"Krr<$!!!E8j!!!$!rr<$!!!E8j!!!'"rVuou!!iPn!!!9(qu?]s!!iQ!!!", at n,NFg!!iQ!!!*'!huE`W!"],/!$D7 at J,fQL
-!'gM`s8W-!z"98E$s8W,oz5QCc`s8W,7z5QCc`s8W&uz5QCc`s8RTLz~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -3524 -4587]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-82 74 true[1 0 0 1 -4137 -4585]@85 imagemask
-!!!$!huE`W&&8/F
-!"],/!!!!`n,NFgJ,fP!!!%ND!!!'"s8V!W!<;rs!!E9$s7cQps82is&-(QPqu?j!rVup?s*tX[!!E9#
-!!#7_!!iOS#QOf(!.XnH"96.As8N'!s7cQps54Ffrr<*"p](<on.5R!J-#]>!!%N<&,:X)"979Z!.Xbc
-n/m/cs53kW5PuV]%tFob^]4?Vr'.t-J.M[q!!",?5C`uh&-'EF!"]&nJ-Wk3s*t(L&-%+Z#J_G]J,fQSs*k"N^`WT,
-!!!9(rW!&95Q?66!!E9#!!C#$rr<$!"989!"2I/$!!!!$s82j!^jl at a!!!'"qu?]sJ,]KK!!3,p!!!"K
-rr<$!!<;fo!!%NKzs7cQo!.XtJ!!!$!p](9oJ,TEJ!!%ND!!!$!rVuou!.XbD!!*&uzJ,B9H
-!<<#u!!!!`qu?]ss8Duu!!#7]!!!$!rVuou!'gG_!!*&uz+8u6?!<<#u!!!!@rVuous8Duu!!",@!!!$!rVuou
-!$D4@!!*&uz+9)<@!<<#u!!!!@s*t(Ls8Duu!!", at J,fTLrVuou!'gL6!!*&uz5QAM!!<<#u
-!!!!`s1eU7s8Duu!!#7`huEb,rVuou!'gMA!!%NKzJ,eF,!.Y"K!!!"Ks6p!gJ,]KK!!%KJn,NH<
-rr<$!!.Ot;!!#7`zrr;`n!'gJ`!!!#uJ+s!D5Q?66!!)qHp](:Ys*t(L!W7HF!!", at J,fQMr'1)Z!$D5k!!!&p
-5PtK]&-'EF!!E!\rVup/s1eU7"8Eu;!!!9(^]4?>n/qZ1!!iP^!!!8n+9)<@"979Z!"[uurr<$$s6p!g
-+5d\0J,fWMn,NGQ^^pHq!!*&o!!#7!#QK;S!.XnH!<7QSs1eU75Q1W`rr<0$^]4?Vrr<<'!!E8:!!!Q0
-i#hjs"979Z!!iQ(s7cQps53kW!WW3"n,NLhn,NFgJ,fQ,!!3,h!!!!@s8RTL!<;Ng!!!9(rVuous7cQo!!%N,z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-62 107 true[1 0 0 1 -4147 -4345]@85 imagemask
-!!!$!huE`W!!!Q0
-rVuou!!#7`s*t(L!!*'!s53kW!!E9$s7cQo!!iQ(s82is!"],0s8N'!!'gMQ+9-ik!.Y$a"96.:!<<'!
-!<:sW!WW-!!.XJ<!WW&t!'g5Y"98,r!$D+=#QO8n!"]&/#QO8n!"]&/&-(Pf!!iN(+90+V!!iOS+90+V
-!!E7O+90+V!!E8:5Q?66!!E8Z5Q?66!!3,XJ,b$!!!3,XJ,]KK!!3,hJ,]KK!!3,hJ,]KK!!*&os8N'!!!*&os8N'!
-!!*&os8Duu!!*&os8Duu!!*&os8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu
-!!*&ss8Duu!!*&ss8Duu!!*&sJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,t5Q:]`!!3,p5Q:]`
-!!E8r+9)<@!!E8r+9)<@!!E8r+9-ik!!iQ!&-%.[!!iPn#QK;S!"],!#QMR>!"],!"96.:!$D7!!WV'X!$D7!!WV'X
-!'gM!!<;Ng!'gM!!.XbD!.Y$!!'gA]!<<(L!$D1?!WW0"!!iN("98?#!!E7O"98?#!!3,X#QO]%!!%ND
-&-)D)!!", at +91g1!!!9(s8V!W!!!$!s8Tk7!!!!`s8RTL!!!!(s8N'!!!!!(s8Duu!!!!0s82is!!!!@
-s7cQo!!!!`s53kW!!!"Ks1eU7!!!$!rr<$!!!!'"rVuou!!!-$p](9o!!!9(huE`W!!!Q0^]4?7!!", at z!!%NH
-z!!*&oz!!3,Xz!!E8:z!!iN(z!"]&/z!"\u-z!$Ct9z!'frQ
-z!'fBAz!.Vcaz!.TM!!!Dur!<3$!!"]&/!<3$!!$D1?!<)ru!'gJ`!<)ru!.Y"K!<)ru
-!<<'!!<)ru!WW0"!<)ru"98B$!<3$!#QOf(!<3$!&-)V/!.TM!5QC]_!.VcaJ,fEH!'fBBs8Vio!$D+Ds8VQg!"],0s8Tk7!!iQ(s8RTL!!E9$s8Duu!!*'!s6p!g!!#7`s*t(L!!!'"n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-96 93 true[1 0 0 1 -3414 -4352]@85 imagemask
-5QCc`s8V!Wz
-5QCc`s8W+Lz5QCc`s8W,sz!.Y%Ks8W-!J,fQL!$D7 at s8W-!n,NFg!!iQ(!!E9$qu?]s!!E9!
-!!!Q0s*t(L!!E9!!!!$!s53kW!!E8r!!!!@s6p!g!!3,p!!!!(s82is!!3,p!!!!"s8Duu!!3,pz
-J,b$!!!3,pz5QAM!!!3,pz+917!!!3,pz#QO8n!!3,pz"98,r!!3,pz!WW&t!!3,pz
-!<;rs!!3,pz!.XtJ!!3,pz!.Y"K!!3,pz!'gJ`!!3,pz!$D5k!!3,pz!$D6V
-!!3,pz!"]+F!!3,pz!!iP^!!3,pz!!iP^!!3,pz!!iPn!!3,pz!!E8j!!3,p
-z!!E8r!!3,pz!!3,p!!3,pz!!3,p!!3,pz!!3,t!!3,pz!!3,t!!3,pz!!*&s!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!%NJ!!3,pz
-!!%NJ!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!*'!!!3,pz!!*&u!!3,pz!!*&u!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!3-!!!3,pz!!3,t!!3,pz!!3,t!!3,pz
-!!E9!!!3,pz!!E9!!!3,pz!!E8r!!3,pz!!iQ!!!3,pz!!iQ!!!3,pz!"],!!!3,pz
-!"],!!!3,pz!$D7!!!3,pz!$D7!!!3,pz!'gM!!!3,pz!.Y$!!!3,pz!<<(L
-!!3,pz!<<'!!!3,pz!WW-!!!3,pz"989!!!3,pz#QO]%!!3,pz&-)D)!!3,p
-z+91g1!!3,pzJ,eF,!!3,pzs8Tk7!!3,p!!!!"s8N'!!!3,p!!!!(s8Duu!!3,p!!!!@s7cQo!!E8r!!!"Ks6p!g!!E9!!!!-$s1eU7!!iQ%!!", at rr<$!!"],0!!iQ(qu?]s
-!$D7 at s8W-!n,NFg!WW3"s8W-!J,fQL5QCc`s8W,oz5QCc`s8W+Lz5QCc`s8Tk7z~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -3515 -4351]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-58 65 true[1 0 0 1 -3577 -4351]@85 imagemask
-!!!'"p](9o!!!Q0
-rr<$!!!#7`s1eU7!!*'!s53kW!!3-"s7cQo!!E9$s82is!"],0s8Duu!$D7 at s8N'!!$D7 at s8RTL!'gM`
-s8Tk7!.Y%H!'fBA!<<)W!!hun!<<(L!!D]j!WW0"!!)co!WW-!!!%BH"989!!!#+]"98,r!!"&?#QO8n
-!!!N0#QN]^!!!6(#QN]^!!!7S&-'EF!!!+O&-%.[!!!&8&-%.[!!!$"&,uV0z+9)<@z+9)<@z+8u6?
-z+8u6?z+8u6?z+8u6?z+8u6?z+8c*=z+8c*=z+8c*=z+8c*=
-z+8c*=z+8c*=z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z#Q+Q%
-z#Q=]'z#Q=]'z"9&9#!!2Qh"9&9#!!i9!!WN-"!"\u-!WN-"!"]&/!<3$!!$D1?!<7QL!$D4@!.TM!!'gJ`!'e7!!'gJ`!$C,!!'gG_!$C,!!'gG_!"\Q!!.XtJ!!i9!!.XnH!!E-!
-!.XbD!!)uu!<;Ng!!%M!!WV'X!!#7Q"96.:!!!Q0s8RTL!!!-$s8Duu!!!$!s7cQo!!!!@s1eU7~>
-Q
-0.564706 g
-2662.55 3959.75 m
-2662.55 4018.55 2615.75 4065.35 2556.95 4065.35 c
-1746.95 4065.35 l
-1688.15 4065.35 1641.35 4018.55 1641.35 3959.75 c
-1641.35 3329.75 l
-1641.35 3270.95 1688.15 3224.15 1746.95 3224.15 c
-2556.95 3224.15 l
-2615.75 3224.15 2662.55 3270.95 2662.55 3329.75 c
-f*
-1 g
-2597.75 4016.15 m
-2597.75 4073.75 2552.15 4119.35 2494.55 4119.35 c
-1690.55 4119.35 l
-1632.95 4119.35 1587.35 4073.75 1587.35 4016.15 c
-1587.35 3392.15 l
-1587.35 3334.55 1632.95 3288.95 1690.55 3288.95 c
-2494.55 3288.95 l
-2552.15 3288.95 2597.75 3334.55 2597.75 3392.15 c
-f*
-0 g
-2597.75 4016.15 m
-2597.75 4073.75 2552.15 4119.35 2494.55 4119.35 c
-1690.55 4119.35 l
-1632.95 4119.35 1587.35 4073.75 1587.35 4016.15 c
-1587.35 3392.15 l
-1587.35 3334.55 1632.95 3288.95 1690.55 3288.95 c
-2494.55 3288.95 l
-2552.15 3288.95 2597.75 3334.55 2597.75 3392.15 c
-h
-S
-2415.35 3274.55 15.5999 849.6 re
-Y
-2422.55 4127.75 m
-2422.55 3281.75 l
-S
-2422.55 3520.55 177.6 243.6 re
-Y
-2422.55 3764.15 m
-2591.75 3528.95 l
-S
-0 0 6120 7920 re
-Y
-2460.95 3765.35 m
-2460.95 3788.15 2442.95 3806.15 2421.35 3806.15 c
-2398.55 3806.15 2380.55 3788.15 2380.55 3765.35 c
-2380.55 3743.75 2398.55 3725.75 2421.35 3725.75 c
-2442.95 3725.75 2460.95 3743.75 2460.95 3765.35 c
-f*
-2631.35 3528.95 m
-2631.35 3551.75 2613.35 3569.75 2591.75 3569.75 c
-2568.95 3569.75 2550.95 3551.75 2550.95 3528.95 c
-2550.95 3507.35 2568.95 3489.35 2591.75 3489.35 c
-2613.35 3489.35 2631.35 3507.35 2631.35 3528.95 c
-f*
-2422.55 3515.75 182.4 252 re
-Y
-2422.55 3524.15 m
-2596.55 3767.75 l
-S
-0 0 6120 7920 re
-Y
-2460.95 3525.35 m
-2460.95 3548.15 2442.95 3566.15 2421.35 3566.15 c
-2398.55 3566.15 2380.55 3548.15 2380.55 3525.35 c
-2380.55 3503.75 2398.55 3485.75 2421.35 3485.75 c
-2442.95 3485.75 2460.95 3503.75 2460.95 3525.35 c
-f*
-2634.95 3767.75 m
-2634.95 3790.55 2616.95 3808.55 2595.35 3808.55 c
-2572.55 3808.55 2554.55 3790.55 2554.55 3767.75 c
-2554.55 3746.15 2572.55 3728.15 2595.35 3728.15 c
-2616.95 3728.15 2634.95 3746.15 2634.95 3767.75 c
-f*
-q[1 0 0 1 0 0]concat
-72 100 true[1 0 0 1 -1677 -3941]@85 imagemask
-#CldSIt.M!!!e#S
-5QC``!!!8>!WW3"huE`^^`WUVs82is#N5X^s8W*!!!iQ(s1n[7^]4W>s82j%s6p!ns8V!W!WVop#QOgS
-!!%NH!!iQ'!!!!`rW!3'qu?]s+9)<Gs7cQo!"]*[#QO8n!!!9(^^'nt!!!!(s54.^^]4?7"97iqs*t(L
-!!E8j#QFc(!!!'"p]pg!!!!!"s7ciuz!WW'&qu?]s!!3,t#Q+Q%!!!'"rWi2u!!!!"s8E8uz!WW-(n,NFg
-!!3-!#Oh]n!!!'"rs/#n!!!!$s8N>^z"98B+huE`W!!E9$#N,R^!!!9(rs-=>!!!!0s8N>>z
-+92?G^]4?7!'gM`#J^<>!!%NKrs+&S!!!'"s8N=S!!!!$s8W*!z&-)\/z!'gM`rVuou!!*'!
-s8Duu!!!-$s8W&u!!!!0s8W,sz5QCc`qu?]s!<<*!s7cQo!!iQ(s8Vio!!!Q0s8W,g!!!!`s8W-!n,NFgs8W-!
-s53kW"98E$s8V!W!!iQ(s8W,7!!", at s8W-!J,fR6s8W-!rr<$!J,fQKs8Duu!WW3"s8Vus!!E9$s8W,o
-!!!9(s8W-!n,NG!s8W-!s1eU7&-)\0s8N'!!$D7 at s8Vus!!#7`s8W,g!!!"Ks8W-!^]4?7J,fQKrr<$!
-!<<*!s82is!!*'!s8VQg!!!'"s8W,7!!!!"s8W-!z!WW3"qu?]s!!3-"s6p!g!!!-$s8Tk7!!!!$s8W*!z
-"98E!z!!E9$p](9o!:U*js53kW!!)Kjs8Tk7!!!&h"98CO!!!!"n,r^jz!Up3krVuou!!D]m
-s82is!!!,j"989!!!!!(n,`Rez#Ohcop](9o!"\Q"s7cQo!!!Q!!WVop!!!!@n,WL`z+7K:1
-p](9o!'frQs7cQo!!#7Q!.XbD!!!"Kn,Rt9zs6p"Qqu?]s!WVWh5PtK]!!E8j!$D1?!!!9(n,O!u!!!!0s6p"!rr<$!+91g1#QK;S!.Y%<!!E8Z!!3-"n,NIg
-n,N^ns6p!gJ,TF4s8VQg!'gM`s8RlD!!!Q0s8Virn,NFjs8W,7!Up'h!.Y%J!!2Qh!!!9(huEfI~>
-Q
-q[1 0 0 1 0 0]concat
-76 95 true[1 0 0 1 -1755 -3944]@85 imagemask
-+92B at p`KP9s6q-1
-s8Vj9s8W,g+92B at p`KP9s6pR!s8VQns8W,7!WW3"!!*'!s*t+Ls8DuuJ,fNK!.Y%H!!%NKrr<%Ks82is
-J,fKJ!'gM]!!*'!qu?^]s82iss8Vus!'gM]!!3-"p](:Ys82j!s8VQg!'gM]!!E9$huEaAs82j%s8V!W
-!'gM]!"],0^]4@!s82j-s8RTL!'gM]!$D7 at J,fR6s82j]s8N'!!'gM]!.Y%J!!!!`s82kHs82is!'gM]!<<)s!!!!`
-s82ots7cQo!'gM]!WW2h!!!!`s83!!s53kW!'gM]#QOh^!!!!`s83E-s1eU7!'gM]&-)Z[!!!!`s83u=
-s*t(L!'gM_5QC``!!!!`s8G7_rVuou!'gM`J,fEH!!!!`s8W-!qu?]s!'gM`s8Vio!!!!`s8W-!n,NFg
-!'gM`s8V!W!!!!`s8DuthuE`W!'gM]s8Tk7!!!!`s87BHJ,fQL!'gM]5Q?66!!!!`s83u=z!'gM]&,lP/!!!!`
-s83-"z!'gM]"8i-!!!!!`s82oqz!'gM]!<)ru!!!!`s82kHz!'gM]!'bu6!!!!`s82j=
-^]4?7!'gM]!"[uf!!!!`s82j%n,NFg!'gM]!!Dur!!!!`s82j!qu?]s!'gM]!!3'!!!!!`s82isrr<$!
-!'gM]!!%M!!!!!`s82isJ%u$a!'gM]!!#7Q!!!!`s82is5PP3Y!'gM]!!#7_!!!!`s82isJ,b$!!'gM]!!3-"huEaA
-s82j]s8W*!!'gM]!'gM`rr<$`s82j]s8W*!!'gM]!'gM`rr<$`s82isz!'gM]z!!!!`s82is
-z!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!", at s82isz+92B=z!!", at s82isz+92B=z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 94 true[1 0 0 1 -1833 -3915]@85 imagemask
-!$C\1z!!%NJ
-z!!!'"s*t(L!!!!$s8Tk7z#QOh^z!"],0n,NFg!!", at s7cQo!!!!@s8Vusz5QC9O
-z!'gMAIK0?J!!#7`i'%,@!!!!`s56*Az5QBX`z!'gMA%tFW[!!", at i"(><!!!!@s54-t
-z+917(^]4?7!"]+F"5j.Z!!!9(J-4^0!!!!"rW!&Yz!!!!"n,NFgz!Up'hz!!2ipz!!!#o
-zzp](9oz!;lfsz!!%BHz!!!"HzzIK0?Jz!<)ruz!!*$!
-z!!!'"z!!!!"rr<$!z"93lOz!!E7Oz!!!-$J,fQL!!!!(s1eU7z#QMR>
-z!"]+fz!!!Q0huE`W!!!!0s53kWz+91g1z!$D71z!!#7`n,NFg!!!!`s7cQoz5QCKY
-z!.Y%Hz!!%NKqu?]s!!!$!s82iszs8W&uz!<<)uz!!3-"rVuou!!!'"s8N'!
-!!!!$s8UsVz"98DYJ,fQL!!E9$O+731!!!9(s,V[1!!!!(s8Rkiz&-)Y7^]4?7!"],0#J^<>
-!!", at rr_0Z!!!!@s8E,Yz+92<Bn,NFg!'gM]!Up'h!!#7`quQ9e!!!"Ks82omzJ,f9Dp](9o!.Y%D!;HNo
-!!*'!n,W at d!!!$!s6p#9!!!!"s8VQgIK0?J!WW2X!.FnJ!!3-"huGq@!!!-$s1eV!!!!!$s8Tk7*rl9@
-#QOh>!$;1@!!iQ(J,g[A!!!Q0s*t([J,fQ[s8RTL&&8/F+92?@!"ZjF!$D7@!!!8>!!#7`rVup'huEaA
-s8Duu#N,R^5QC]_!!D]j!.Y%H!!!,j!!%NKqu?^!n,NIgs82is"8Diss8Vus!!iE%!WW3!!!!9'!!iQ(rr<$@rr>:`s8Virs8V"As8W,o"98DZ5QCc`p]LQri'78As7c]rs53~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -1904 -3944]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -1988 -3944]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2051 -3942]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2121 -3944]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2238 -3942]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-92 93 true[1 0 0 1 -2036 -3722]@85 imagemask
-5QCc`s*t(L#QOhn
-5QCc`s*t(L#QOhn5QCc`s*t(L&-)\!!<<*!huE`W+92?@!$D7 at z5QCKY!"],-zJ,f!<!!iQ%
-zJ,eF,!!iQ!zs8Tk7!!iQ!!!!!"s8RTL!!E8j!!!!$s8N'!!!E8j!!!!$s8Duu!!E8j!!!!(
-s82is!!E8j!!!!0s7cQo!!E8j!!!!@s7cQo!!E8j!!!!@s6p!g!!E8j!!!!`s53kW!!E8j!!!"Ks1eU7!!E8j!!!$!
-s*t(L!!E8j!!!'"s*t(L!!E8j!!!'"rr<$!!!E8j!!!-$rVuou!!E8j!!!9(qu?]s!!E8j!!!Q0p](9o
-!!E8j!!!Q0n,NFg!!E8j!!", at n,NFg!!E8j!!#7`huE`W!!E8j!!%NK^]4?7!!E8j!!*'!J,fQL!!E8j
-!!*'!z!!E8j!!3-"z!!E8j!!E9#z!!E8j!!iQ%z!!E8j!!iQ!z!!E8j!"],!z!!E8j
-!$D71z!!E8j!'gMAz!!E8j!'gM!z!!E8j!.Y$!z!!E8j!<<'!z!!E8j!WW-!
-z!!E8j"98?#z!!E8j"989!z!!E8j#QOQ!z!!E9$s8VQgz!!E9$s8V!Wz
-!!E9$s8W&uz!!E9$s8W,Wz!!E9$s8W,oz!!E8j"98E$z!!E8j!!iQ(^]4?7!!E8j!!*'!huE`W
-!!E8j!!", at p](9o!!E8j!!!9(qu?]s!!E8j!!!-$rVuou!!E8j!!!$!rr<$!!!E8j!!!"Ks*t(L!!E8j
-!!!!`s*t(L!!E8j!!!!`s1eU7!!E8j!!!!@s1eU7!!E8j!!!!@s53kW!!E8j!!!!0s53kW!!E8j!!!!0
-s53kW!!E8j!!!!0s53kW!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(
-s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g
-!!E8j!!!!(s6p!g!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!@s1eU7!!E8j
-!!!!@s1eU7!!E8j!!!!`s1eU7!!E8j!!!!`s*t(L!!E8j!!!"Krr<$!!!E8j!!!$!rr<$!!!E8j!!!'"rVuou!!iPn!!!9(qu?]s!!iQ!!!", at n,NFg!!iQ!!!*'!huE`W!"],/!$D7 at J,fQL
-!'gM`s8W-!z"98E$s8W,oz5QCc`s8W,7z5QCc`s8W&uz5QCc`s8RTLz~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -2130 -3722]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-62 107 true[1 0 0 1 -2754 -3720]@85 imagemask
-!!!$!huE`W!!!Q0
-rVuou!!#7`s*t(L!!*'!s53kW!!E9$s7cQo!!iQ(s82is!"],0s8N'!!'gMQ+9-ik!.Y$a"96.:!<<'!
-!<:sW!WW-!!.XJ<!WW&t!'g5Y"98,r!$D+=#QO8n!"]&/#QO8n!"]&/&-(Pf!!iN(+90+V!!iOS+90+V
-!!E7O+90+V!!E8:5Q?66!!E8Z5Q?66!!3,XJ,b$!!!3,XJ,]KK!!3,hJ,]KK!!3,hJ,]KK!!*&os8N'!!!*&os8N'!
-!!*&os8Duu!!*&os8Duu!!*&os8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu
-!!*&ss8Duu!!*&ss8Duu!!*&sJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,t5Q:]`!!3,p5Q:]`
-!!E8r+9)<@!!E8r+9)<@!!E8r+9-ik!!iQ!&-%.[!!iPn#QK;S!"],!#QMR>!"],!"96.:!$D7!!WV'X!$D7!!WV'X
-!'gM!!<;Ng!'gM!!.XbD!.Y$!!'gA]!<<(L!$D1?!WW0"!!iN("98?#!!E7O"98?#!!3,X#QO]%!!%ND
-&-)D)!!", at +91g1!!!9(s8V!W!!!$!s8Tk7!!!!`s8RTL!!!!(s8N'!!!!!(s8Duu!!!!0s82is!!!!@
-s7cQo!!!!`s53kW!!!"Ks1eU7!!!$!rr<$!!!!'"rVuou!!!-$p](9o!!!9(huE`W!!!Q0^]4?7!!", at z!!%NH
-z!!*&oz!!3,Xz!!E8:z!!iN(z!"]&/z!"\u-z!$Ct9z!'frQ
-z!'fBAz!.Vcaz!.TM!!!Dur!<3$!!"]&/!<3$!!$D1?!<)ru!'gJ`!<)ru!.Y"K!<)ru
-!<<'!!<)ru!WW0"!<)ru"98B$!<3$!#QOf(!<3$!&-)V/!.TM!5QC]_!.VcaJ,fEH!'fBBs8Vio!$D+Ds8VQg!"],0s8Tk7!!iQ(s8RTL!!E9$s8Duu!!*'!s6p!g!!#7`s*t(L!!!'"n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-82 74 true[1 0 0 1 -2743 -3480]@85 imagemask
-!!!$!huE`W&&8/F
-!"],/!!!!`n,NFgJ,fP!!!%ND!!!'"s8V!W!<;rs!!E9$s7cQps82is&-(QPqu?j!rVup?s*tX[!!E9#
-!!#7_!!iOS#QOf(!.XnH"96.As8N'!s7cQps54Ffrr<*"p](<on.5R!J-#]>!!%N<&,:X)"979Z!.Xbc
-n/m/cs53kW5PuV]%tFob^]4?Vr'.t-J.M[q!!",?5C`uh&-'EF!"]&nJ-Wk3s*t(L&-%+Z#J_G]J,fQSs*k"N^`WT,
-!!!9(rW!&95Q?66!!E9#!!C#$rr<$!"989!"2I/$!!!!$s82j!^jl at a!!!'"qu?]sJ,]KK!!3,p!!!"K
-rr<$!!<;fo!!%NKzs7cQo!.XtJ!!!$!p](9oJ,TEJ!!%ND!!!$!rVuou!.XbD!!*&uzJ,B9H
-!<<#u!!!!`qu?]ss8Duu!!#7]!!!$!rVuou!'gG_!!*&uz+8u6?!<<#u!!!!@rVuous8Duu!!",@!!!$!rVuou
-!$D4@!!*&uz+9)<@!<<#u!!!!@s*t(Ls8Duu!!", at J,fTLrVuou!'gL6!!*&uz5QAM!!<<#u
-!!!!`s1eU7s8Duu!!#7`huEb,rVuou!'gMA!!%NKzJ,eF,!.Y"K!!!"Ks6p!gJ,]KK!!%KJn,NH<
-rr<$!!.Ot;!!#7`zrr;`n!'gJ`!!!#uJ+s!D5Q?66!!)qHp](:Ys*t(L!W7HF!!", at J,fQMr'1)Z!$D5k!!!&p
-5PtK]&-'EF!!E!\rVup/s1eU7"8Eu;!!!9(^]4?>n/qZ1!!iP^!!!8n+9)<@"979Z!"[uurr<$$s6p!g
-+5d\0J,fWMn,NGQ^^pHq!!*&o!!#7!#QK;S!.XnH!<7QSs1eU75Q1W`rr<0$^]4?Vrr<<'!!E8:!!!Q0
-i#hjs"979Z!!iQ(s7cQps53kW!WW3"n,NLhn,NFgJ,fQ,!!3,h!!!!@s8RTL!<;Ng!!!9(rVuous7cQo!!%N,z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-96 93 true[1 0 0 1 -2019 -3487]@85 imagemask
-5QCc`s8V!Wz
-5QCc`s8W+Lz5QCc`s8W,sz!.Y%Ks8W-!J,fQL!$D7 at s8W-!n,NFg!!iQ(!!E9$qu?]s!!E9!
-!!!Q0s*t(L!!E9!!!!$!s53kW!!E8r!!!!@s6p!g!!3,p!!!!(s82is!!3,p!!!!"s8Duu!!3,pz
-J,b$!!!3,pz5QAM!!!3,pz+917!!!3,pz#QO8n!!3,pz"98,r!!3,pz!WW&t!!3,pz
-!<;rs!!3,pz!.XtJ!!3,pz!.Y"K!!3,pz!'gJ`!!3,pz!$D5k!!3,pz!$D6V
-!!3,pz!"]+F!!3,pz!!iP^!!3,pz!!iP^!!3,pz!!iPn!!3,pz!!E8j!!3,p
-z!!E8r!!3,pz!!3,p!!3,pz!!3,p!!3,pz!!3,t!!3,pz!!3,t!!3,pz!!*&s!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!%NJ!!3,pz
-!!%NJ!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!*'!!!3,pz!!*&u!!3,pz!!*&u!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!3-!!!3,pz!!3,t!!3,pz!!3,t!!3,pz
-!!E9!!!3,pz!!E9!!!3,pz!!E8r!!3,pz!!iQ!!!3,pz!!iQ!!!3,pz!"],!!!3,pz
-!"],!!!3,pz!$D7!!!3,pz!$D7!!!3,pz!'gM!!!3,pz!.Y$!!!3,pz!<<(L
-!!3,pz!<<'!!!3,pz!WW-!!!3,pz"989!!!3,pz#QO]%!!3,pz&-)D)!!3,p
-z+91g1!!3,pzJ,eF,!!3,pzs8Tk7!!3,p!!!!"s8N'!!!3,p!!!!(s8Duu!!3,p!!!!@s7cQo!!E8r!!!"Ks6p!g!!E9!!!!-$s1eU7!!iQ%!!", at rr<$!!"],0!!iQ(qu?]s
-!$D7 at s8W-!n,NFg!WW3"s8W-!J,fQL5QCc`s8W,oz5QCc`s8W+Lz5QCc`s8Tk7z~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2121 -3486]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-58 65 true[1 0 0 1 -2184 -3486]@85 imagemask
-!!!'"p](9o!!!Q0
-rr<$!!!#7`s1eU7!!*'!s53kW!!3-"s7cQo!!E9$s82is!"],0s8Duu!$D7 at s8N'!!$D7 at s8RTL!'gM`
-s8Tk7!.Y%H!'fBA!<<)W!!hun!<<(L!!D]j!WW0"!!)co!WW-!!!%BH"989!!!#+]"98,r!!"&?#QO8n
-!!!N0#QN]^!!!6(#QN]^!!!7S&-'EF!!!+O&-%.[!!!&8&-%.[!!!$"&,uV0z+9)<@z+9)<@z+8u6?
-z+8u6?z+8u6?z+8u6?z+8u6?z+8c*=z+8c*=z+8c*=z+8c*=
-z+8c*=z+8c*=z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z#Q+Q%
-z#Q=]'z#Q=]'z"9&9#!!2Qh"9&9#!!i9!!WN-"!"\u-!WN-"!"]&/!<3$!!$D1?!<7QL!$D4@!.TM!!'gJ`!'e7!!'gJ`!$C,!!'gG_!$C,!!'gG_!"\Q!!.XtJ!!i9!!.XnH!!E-!
-!.XbD!!)uu!<;Ng!!%M!!WV'X!!#7Q"96.:!!!Q0s8RTL!!!-$s8Duu!!!$!s7cQo!!!!@s1eU7~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -1413 -5707]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-40 120 true[1 0 0 1 -1483 -5686]@85 imagemask
-$ig8-!"Ju/!!!O[
-!!!!0huE`W"7Q9j!!2ut!!!#uz56(Z`!$?^k!!!Pf!!!!(n,NFg"8Dir!!2ut!!!#szrVuou
-!.OtK!!%M!!!!!`^]4?75MuMA!$C,!!!",1!!!!0p](9o&,6,)!"\u-!!!9'!!!!(rVuou#QFc(!!iN(
-!!!9(J,fQOs*t(L"96.:!!E8:!!!-$huE`Zs53kW"979Z!!3,h!!!'"n,NFhs6p!g!WVop!!3,p!!!'"p](9ps82is
-!WW&t!!3,t!!!$!qu?]ss8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&u!!!$!rr<$!s8N'!!<<'!
-!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!
-!!!$!rr<$!s8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&s!!!$!qu?]ts82is!WW&t!!3,p!!!'"p](9ps7cQo
-!WVWh!!3,h!!!'"n,NFhs53kW"979Z!!E8:!!!-$^]4?:s1eU7"93lO!!iOS!!!9(!!!!(rr<$!#Q=]'
-!"\u-!!!Q-!!!!0p](9o+7K71!$C\1!!",!!!!!`^]4?75JR7!!.TM!!!*$!!!!#u!!!!"qu?]s"8Dir
-!!D]j!!!8^!!!!0^]4?75C`_6!.FnJ!!)os!!!,r!!!!(huE`W&&8/F!"T&0!!!E-!!!!)z~>
-Q
-q[1 0 0 1 0 0]concat
-73 97 true[1 0 0 1 -2960 -5116]@85 imagemask
-!&+BQ&,lP/!!!!]
-!!%NKhuE`W!'UAbs8Vus!!!!`!!iQ(rr<$!!'e7 at s8W,7!!!!`i'6]qs53kW!'g7.^^'o7!!!!`rVqBM
-s82is!'gM`!!3-!!!!!`s8Duus8N'!!'gM_!!*'!J,fR6s8DuuJ,d:a!'gM]!!%NK^]4@!s82is5QBXA
-!'gM]!!#7`n,NGQs82is5QC3Q!'gM]!!#7`p](:Ys82is+92*9!'gM]!!", at qu?^]s82is+926=!'gM]!!", at qu?^]
-s82is+92<?!'gM]!!", at rVup_s82is&-)V/!'gM]!!!Q0rr<$`s82is&-)Y0!'gM]!!!Q0rr<$`s82is
-&-)Y0!'gM]!!!Q0rr<$`s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[
-!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6
-s82is&-)Z[!'gM]!!!Q0s*t)6s82is+92?@!'gM]!!", at rr<$`s82is+92?@!'gM]!!", at rr<$`s82is
-+92<?!'gM]!!", at rVup_s82is5QC]_!'gM]!!#7`rVup_s82is5QCW]!'gM]!!%NKqu?^]s82isJ,f9D
-!'gM_!!%NKp](:Ys8Duus8VQg!'gM`!!3-"n,NGQs8RTMs8V!W!'gM`^]XW:^]4@!s8V!fs8Tk7!'gM`pj`>DJ,fR6
-s8Duts8N'!!'gM]s8W,u!!!!`s87BHs82is!'gM]5QCcQ!!!!`s83E-s53kW!'gM]#QOgS!!!!`s82ot
-qu?]s!'gM]!"ZjF!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!#7`s82isz5QCc]z!!#7`s82isz5QCc]z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-40 120 true[1 0 0 1 -3037 -5095]@85 imagemask
-$ig8-!"Ju/!!!O[
-!!!!0huE`W"7Q9j!!2ut!!!#uz56(Z`!$?^k!!!Pf!!!!(n,NFg"8Dir!!2ut!!!#szrVuou
-!.OtK!!%M!!!!!`^]4?75MuMA!$C,!!!",1!!!!0p](9o&,6,)!"\u-!!!9'!!!!(rVuou#QFc(!!iN(
-!!!9(J,fQOs*t(L"96.:!!E8:!!!-$huE`Zs53kW"979Z!!3,h!!!'"n,NFhs6p!g!WVop!!3,p!!!'"p](9ps82is
-!WW&t!!3,t!!!$!qu?]ss8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&u!!!$!rr<$!s8N'!!<<'!
-!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!
-!!!$!rr<$!s8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&s!!!$!qu?]ts82is!WW&t!!3,p!!!'"p](9ps7cQo
-!WVWh!!3,h!!!'"n,NFhs53kW"979Z!!E8:!!!-$^]4?:s1eU7"93lO!!iOS!!!9(!!!!(rr<$!#Q=]'
-!"\u-!!!Q-!!!!0p](9o+7K71!$C\1!!",!!!!!`^]4?75JR7!!.TM!!!*$!!!!#u!!!!"qu?]s"8Dir
-!!D]j!!!8^!!!!0^]4?75C`_6!.FnJ!!)os!!!,r!!!!(huE`W&&8/F!"T&0!!!E-!!!!)z~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -1580 -4260]@85 imagemask
-!!!!0rVuou!!!$!
-s53kW!!!9(s82is!!", at s8N'!!!%NKs8RTL!!*'!s8V!W!!3-"s8VQg!!iQ(s8Vio!"],0s8W&u!$D7@
-rW3$!!$D7 at n,P\'!'gM`^]5I,!.Y%KJ,fhi!<<*!!!!,Z!<<)u!!!&h!WW2t!!!#W!WW2p!!!!a"98Dr
-z"98Djz#QOh^z#QOh^z#QOh>z&-)[Fz&-)[Fz&-)Z[z&-)Z[z&-)Z[
-z+92?@z+92?@z+92?@z+92?@z+92?@z+92?@z+92<?z+92<?
-z+92<?z+92<?z+92<?z+92<?z+92<?z&-)V/z&-)V/z&-)V/
-z&-)V/z#QOc'!!D]j#QOc'!"]&/#QOc'!$D4@"98?#!'gL6"98B$!'gL6"98B$!.Y$a!WW0"!.Y$a!WW0"!.Y$a!<<'!!.Y$a!.Y$!
-!.Y$a!.Y$!!.Y$a!'gL6!.Y$a!$D6V!.Y$a!"]+F!.Y$!!"]+f!.Y$!!!iP^!.Y"K!!3,h!.Y"K!!*&o
-!<<#u!!%NJ!WW&t!!", at L]@,L!!!Q0s8V!W!!!-$s8Tk7!!!$!s8N'!!!!!0s7cQozIfKHK~>
-Q
-q[1 0 0 1 0 0]concat
-40 120 true[1 0 0 1 -1643 -4239]@85 imagemask
-$ig8-!"Ju/!!!O[
-!!!!0huE`W"7Q9j!!2ut!!!#uz56(Z`!$?^k!!!Pf!!!!(n,NFg"8Dir!!2ut!!!#szrVuou
-!.OtK!!%M!!!!!`^]4?75MuMA!$C,!!!",1!!!!0p](9o&,6,)!"\u-!!!9'!!!!(rVuou#QFc(!!iN(
-!!!9(J,fQOs*t(L"96.:!!E8:!!!-$huE`Zs53kW"979Z!!3,h!!!'"n,NFhs6p!g!WVop!!3,p!!!'"p](9ps82is
-!WW&t!!3,t!!!$!qu?]ss8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&u!!!$!rr<$!s8N'!!<<'!
-!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!
-!!!$!rr<$!s8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&s!!!$!qu?]ts82is!WW&t!!3,p!!!'"p](9ps7cQo
-!WVWh!!3,h!!!'"n,NFhs53kW"979Z!!E8:!!!-$^]4?:s1eU7"93lO!!iOS!!!9(!!!!(rr<$!#Q=]'
-!"\u-!!!Q-!!!!0p](9o+7K71!$C\1!!",!!!!!`^]4?75JR7!!.TM!!!*$!!!!#u!!!!"qu?]s"8Dir
-!!D]j!!!8^!!!!0^]4?75C`_6!.FnJ!!)os!!!,r!!!!(huE`W&&8/F!"T&0!!!E-!!!!)z~>
-Q
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 5083 a(Figure)49 b(5:)77 b(\(a\))50 b(A)f(basic)f(F)-8
-b(rame)50 b(is)e(used)g(to)h(represen)m(t)g(a)g(Cartesian)g(co)s
-(ordinate)g(system,)k(here)c(2-)0 5196 y(dimensional.)78
-b(\(b\))43 b(A)g(SkyF)-8 b(rame)44 b(represen)m(ts)e(a)i(\(spherical\))
-f(celestial)j(co)s(ordinate)e(system.)78 b(\(c\))44 b(The)0
-5309 y(axis)31 b(order)f(of)g(an)m(y)h(F)-8 b(rame)31
-b(ma)m(y)g(b)s(e)f(p)s(erm)m(uted)f(to)i(matc)m(h)h(the)e(co)s
-(ordinate)h(space)g(it)g(describ)s(es.)p eop end
-%%Page: 9 19
-TeXDict begin 9 18 bop 0 52 a Fz(2.5)92 b(Net)m(w)m(orks)32
-b(of)e(Co)s(ordinate)h(Systems)2229 b FG(9)1291 1620
-y @beginspecial 215 @llx 202 @lly 384 @urx 394 @ury 1436
- at rwi @setspecial
-%%BeginDocument: sun210_figures/cmpframe.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 215 202 384 394
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 17:24:02
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-3657.35 3700.55 m
-3657.35 3800.15 3576.95 3880.55 3477.35 3880.55 c
-2396.15 3880.55 l
-2296.55 3880.55 2216.15 3800.15 2216.15 3700.55 c
-2216.15 2210.15 l
-2216.15 2110.55 2296.55 2030.15 2396.15 2030.15 c
-3477.35 2030.15 l
-3576.95 2030.15 3657.35 2110.55 3657.35 2210.15 c
-f*
-1 g
-3592.55 3755.75 m
-3592.55 3854.15 3513.35 3934.55 3413.75 3934.55 c
-2340.95 3934.55 l
-2241.35 3934.55 2162.15 3854.15 2162.15 3755.75 c
-2162.15 2273.75 l
-2162.15 2174.15 2241.35 2094.95 2340.95 2094.95 c
-3413.75 2094.95 l
-3513.35 2094.95 3592.55 2174.15 3592.55 2273.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-3592.55 3755.75 m
-3592.55 3854.15 3513.35 3934.55 3413.75 3934.55 c
-2340.95 3934.55 l
-2241.35 3934.55 2162.15 3854.15 2162.15 3755.75 c
-2162.15 2273.75 l
-2162.15 2174.15 2241.35 2094.95 2340.95 2094.95 c
-3413.75 2094.95 l
-3513.35 2094.95 3592.55 2174.15 3592.55 2273.75 c
-h
-S
-0.564706 g
-3297.35 3532.55 m
-3297.35 3591.35 3250.55 3638.15 3191.75 3638.15 c
-2381.75 3638.15 l
-2322.95 3638.15 2276.15 3591.35 2276.15 3532.55 c
-2276.15 2902.55 l
-2276.15 2843.75 2322.95 2796.95 2381.75 2796.95 c
-3191.75 2796.95 l
-3250.55 2796.95 3297.35 2843.75 3297.35 2902.55 c
-f*
-1 g
-3232.55 3588.95 m
-3232.55 3646.55 3186.95 3692.15 3129.35 3692.15 c
-2325.35 3692.15 l
-2267.75 3692.15 2222.15 3646.55 2222.15 3588.95 c
-2222.15 2964.95 l
-2222.15 2907.35 2267.75 2861.75 2325.35 2861.75 c
-3129.35 2861.75 l
-3186.95 2861.75 3232.55 2907.35 3232.55 2964.95 c
-f*
-0 g
-3232.55 3588.95 m
-3232.55 3646.55 3186.95 3692.15 3129.35 3692.15 c
-2325.35 3692.15 l
-2267.75 3692.15 2222.15 3646.55 2222.15 3588.95 c
-2222.15 2964.95 l
-2222.15 2907.35 2267.75 2861.75 2325.35 2861.75 c
-3129.35 2861.75 l
-3186.95 2861.75 3232.55 2907.35 3232.55 2964.95 c
-h
-S
-3050.15 2847.35 15.5999 849.6 re
-Y
-3057.35 3699.35 m
-3057.35 2854.55 l
-S
-3057.35 3088.55 188.4 248.4 re
-Y
-3057.35 3336.95 m
-3237.35 3096.95 l
-S
-0 0 6120 7920 re
-Y
-3095.75 3338.15 m
-3095.75 3360.95 3077.75 3378.95 3056.15 3378.95 c
-3034.55 3378.95 3016.55 3360.95 3016.55 3338.15 c
-3016.55 3316.55 3034.55 3298.55 3056.15 3298.55 c
-3077.75 3298.55 3095.75 3316.55 3095.75 3338.15 c
-f*
-3275.75 3098.15 m
-3275.75 3120.95 3257.75 3138.95 3236.15 3138.95 c
-3214.55 3138.95 3196.55 3120.95 3196.55 3098.15 c
-3196.55 3076.55 3214.55 3058.55 3236.15 3058.55 c
-3257.75 3058.55 3275.75 3076.55 3275.75 3098.15 c
-f*
-3057.35 3088.55 188.4 248.4 re
-Y
-3057.35 3096.95 m
-3237.35 3336.95 l
-S
-0 0 6120 7920 re
-Y
-3095.75 3098.15 m
-3095.75 3120.95 3077.75 3138.95 3056.15 3138.95 c
-3034.55 3138.95 3016.55 3120.95 3016.55 3098.15 c
-3016.55 3076.55 3034.55 3058.55 3056.15 3058.55 c
-3077.75 3058.55 3095.75 3076.55 3095.75 3098.15 c
-f*
-3275.75 3338.15 m
-3275.75 3360.95 3257.75 3378.95 3236.15 3378.95 c
-3214.55 3378.95 3196.55 3360.95 3196.55 3338.15 c
-3196.55 3316.55 3214.55 3298.55 3236.15 3298.55 c
-3257.75 3298.55 3275.75 3316.55 3275.75 3338.15 c
-f*
-q[1 0 0 1 0 0]concat
-72 100 true[1 0 0 1 -2333 -3514]@85 imagemask
-#CldSIt.M!!!e#S
-5QC``!!!8>!WW3"huE`^^`WUVs82is#N5X^s8W*!!!iQ(s1n[7^]4W>s82j%s6p!ns8V!W!WVop#QOgS
-!!%NH!!iQ'!!!!`rW!3'qu?]s+9)<Gs7cQo!"]*[#QO8n!!!9(^^'nt!!!!(s54.^^]4?7"97iqs*t(L
-!!E8j#QFc(!!!'"p]pg!!!!!"s7ciuz!WW'&qu?]s!!3,t#Q+Q%!!!'"rWi2u!!!!"s8E8uz!WW-(n,NFg
-!!3-!#Oh]n!!!'"rs/#n!!!!$s8N>^z"98B+huE`W!!E9$#N,R^!!!9(rs-=>!!!!0s8N>>z
-+92?G^]4?7!'gM`#J^<>!!%NKrs+&S!!!'"s8N=S!!!!$s8W*!z&-)\/z!'gM`rVuou!!*'!
-s8Duu!!!-$s8W&u!!!!0s8W,sz5QCc`qu?]s!<<*!s7cQo!!iQ(s8Vio!!!Q0s8W,g!!!!`s8W-!n,NFgs8W-!
-s53kW"98E$s8V!W!!iQ(s8W,7!!", at s8W-!J,fR6s8W-!rr<$!J,fQKs8Duu!WW3"s8Vus!!E9$s8W,o
-!!!9(s8W-!n,NG!s8W-!s1eU7&-)\0s8N'!!$D7 at s8Vus!!#7`s8W,g!!!"Ks8W-!^]4?7J,fQKrr<$!
-!<<*!s82is!!*'!s8VQg!!!'"s8W,7!!!!"s8W-!z!WW3"qu?]s!!3-"s6p!g!!!-$s8Tk7!!!!$s8W*!z
-"98E!z!!E9$p](9o!:U*js53kW!!)Kjs8Tk7!!!&h"98CO!!!!"n,r^jz!Up3krVuou!!D]m
-s82is!!!,j"989!!!!!(n,`Rez#Ohcop](9o!"\Q"s7cQo!!!Q!!WVop!!!!@n,WL`z+7K:1
-p](9o!'frQs7cQo!!#7Q!.XbD!!!"Kn,Rt9zs6p"Qqu?]s!WVWh5PtK]!!E8j!$D1?!!!9(n,O!u!!!!0s6p"!rr<$!+91g1#QK;S!.Y%<!!E8Z!!3-"n,NIg
-n,N^ns6p!gJ,TF4s8VQg!'gM`s8RlD!!!Q0s8Virn,NFjs8W,7!Up'h!.Y%J!!2Qh!!!9(huEfI~>
-Q
-q[1 0 0 1 0 0]concat
-76 95 true[1 0 0 1 -2409 -3517]@85 imagemask
-+92B at p`KP9s6q-1
-s8Vj9s8W,g+92B at p`KP9s6pR!s8VQns8W,7!WW3"!!*'!s*t+Ls8DuuJ,fNK!.Y%H!!%NKrr<%Ks82is
-J,fKJ!'gM]!!*'!qu?^]s82iss8Vus!'gM]!!3-"p](:Ys82j!s8VQg!'gM]!!E9$huEaAs82j%s8V!W
-!'gM]!"],0^]4@!s82j-s8RTL!'gM]!$D7 at J,fR6s82j]s8N'!!'gM]!.Y%J!!!!`s82kHs82is!'gM]!<<)s!!!!`
-s82ots7cQo!'gM]!WW2h!!!!`s83!!s53kW!'gM]#QOh^!!!!`s83E-s1eU7!'gM]&-)Z[!!!!`s83u=
-s*t(L!'gM_5QC``!!!!`s8G7_rVuou!'gM`J,fEH!!!!`s8W-!qu?]s!'gM`s8Vio!!!!`s8W-!n,NFg
-!'gM`s8V!W!!!!`s8DuthuE`W!'gM]s8Tk7!!!!`s87BHJ,fQL!'gM]5Q?66!!!!`s83u=z!'gM]&,lP/!!!!`
-s83-"z!'gM]"8i-!!!!!`s82oqz!'gM]!<)ru!!!!`s82kHz!'gM]!'bu6!!!!`s82j=
-^]4?7!'gM]!"[uf!!!!`s82j%n,NFg!'gM]!!Dur!!!!`s82j!qu?]s!'gM]!!3'!!!!!`s82isrr<$!
-!'gM]!!%M!!!!!`s82isJ%u$a!'gM]!!#7Q!!!!`s82is5PP3Y!'gM]!!#7_!!!!`s82isJ,b$!!'gM]!!3-"huEaA
-s82j]s8W*!!'gM]!'gM`rr<$`s82j]s8W*!!'gM]!'gM`rr<$`s82isz!'gM]z!!!!`s82is
-z!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!", at s82isz+92B=z!!", at s82isz+92B=z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 94 true[1 0 0 1 -2489 -3488]@85 imagemask
-!$C\1z!!%NJ
-z!!!'"s*t(L!!!!$s8Tk7z#QOh^z!"],0n,NFg!!", at s7cQo!!!!@s8Vusz5QC9O
-z!'gMAIK0?J!!#7`i'%,@!!!!`s56*Az5QBX`z!'gMA%tFW[!!", at i"(><!!!!@s54-t
-z+917(^]4?7!"]+F"5j.Z!!!9(J-4^0!!!!"rW!&Yz!!!!"n,NFgz!Up'hz!!2ipz!!!#o
-zzp](9oz!;lfsz!!%BHz!!!"HzzIK0?Jz!<)ruz!!*$!
-z!!!'"z!!!!"rr<$!z"93lOz!!E7Oz!!!-$J,fQL!!!!(s1eU7z#QMR>
-z!"]+fz!!!Q0huE`W!!!!0s53kWz+91g1z!$D71z!!#7`n,NFg!!!!`s7cQoz5QCKY
-z!.Y%Hz!!%NKqu?]s!!!$!s82iszs8W&uz!<<)uz!!3-"rVuou!!!'"s8N'!
-!!!!$s8UsVz"98DYJ,fQL!!E9$O+731!!!9(s,V[1!!!!(s8Rkiz&-)Y7^]4?7!"],0#J^<>
-!!", at rr_0Z!!!!@s8E,Yz+92<Bn,NFg!'gM]!Up'h!!#7`quQ9e!!!"Ks82omzJ,f9Dp](9o!.Y%D!;HNo
-!!*'!n,W at d!!!$!s6p#9!!!!"s8VQgIK0?J!WW2X!.FnJ!!3-"huGq@!!!-$s1eV!!!!!$s8Tk7*rl9@
-#QOh>!$;1@!!iQ(J,g[A!!!Q0s*t([J,fQ[s8RTL&&8/F+92?@!"ZjF!$D7@!!!8>!!#7`rVup'huEaA
-s8Duu#N,R^5QC]_!!D]j!.Y%H!!!,j!!%NKqu?^!n,NIgs82is"8Diss8Vus!!iE%!WW3!!!!9'!!iQ(rr<$@rr>:`s8Virs8V"As8W,o"98DZ5QCc`p]LQri'78As7c]rs53~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -2558 -3517]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -2643 -3517]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2706 -3515]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2777 -3517]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2892 -3515]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-92 93 true[1 0 0 1 -2691 -3295]@85 imagemask
-5QCc`s*t(L#QOhn
-5QCc`s*t(L#QOhn5QCc`s*t(L&-)\!!<<*!huE`W+92?@!$D7 at z5QCKY!"],-zJ,f!<!!iQ%
-zJ,eF,!!iQ!zs8Tk7!!iQ!!!!!"s8RTL!!E8j!!!!$s8N'!!!E8j!!!!$s8Duu!!E8j!!!!(
-s82is!!E8j!!!!0s7cQo!!E8j!!!!@s7cQo!!E8j!!!!@s6p!g!!E8j!!!!`s53kW!!E8j!!!"Ks1eU7!!E8j!!!$!
-s*t(L!!E8j!!!'"s*t(L!!E8j!!!'"rr<$!!!E8j!!!-$rVuou!!E8j!!!9(qu?]s!!E8j!!!Q0p](9o
-!!E8j!!!Q0n,NFg!!E8j!!", at n,NFg!!E8j!!#7`huE`W!!E8j!!%NK^]4?7!!E8j!!*'!J,fQL!!E8j
-!!*'!z!!E8j!!3-"z!!E8j!!E9#z!!E8j!!iQ%z!!E8j!!iQ!z!!E8j!"],!z!!E8j
-!$D71z!!E8j!'gMAz!!E8j!'gM!z!!E8j!.Y$!z!!E8j!<<'!z!!E8j!WW-!
-z!!E8j"98?#z!!E8j"989!z!!E8j#QOQ!z!!E9$s8VQgz!!E9$s8V!Wz
-!!E9$s8W&uz!!E9$s8W,Wz!!E9$s8W,oz!!E8j"98E$z!!E8j!!iQ(^]4?7!!E8j!!*'!huE`W
-!!E8j!!", at p](9o!!E8j!!!9(qu?]s!!E8j!!!-$rVuou!!E8j!!!$!rr<$!!!E8j!!!"Ks*t(L!!E8j
-!!!!`s*t(L!!E8j!!!!`s1eU7!!E8j!!!!@s1eU7!!E8j!!!!@s53kW!!E8j!!!!0s53kW!!E8j!!!!0
-s53kW!!E8j!!!!0s53kW!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(
-s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g
-!!E8j!!!!(s6p!g!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!@s1eU7!!E8j
-!!!!@s1eU7!!E8j!!!!`s1eU7!!E8j!!!!`s*t(L!!E8j!!!"Krr<$!!!E8j!!!$!rr<$!!!E8j!!!'"rVuou!!iPn!!!9(qu?]s!!iQ!!!", at n,NFg!!iQ!!!*'!huE`W!"],/!$D7 at J,fQL
-!'gM`s8W-!z"98E$s8W,oz5QCc`s8W,7z5QCc`s8W&uz5QCc`s8RTLz~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -2785 -3295]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-62 107 true[1 0 0 1 -3768 -3293]@85 imagemask
-!!!$!huE`W!!!Q0
-rVuou!!#7`s*t(L!!*'!s53kW!!E9$s7cQo!!iQ(s82is!"],0s8N'!!'gMQ+9-ik!.Y$a"96.:!<<'!
-!<:sW!WW-!!.XJ<!WW&t!'g5Y"98,r!$D+=#QO8n!"]&/#QO8n!"]&/&-(Pf!!iN(+90+V!!iOS+90+V
-!!E7O+90+V!!E8:5Q?66!!E8Z5Q?66!!3,XJ,b$!!!3,XJ,]KK!!3,hJ,]KK!!3,hJ,]KK!!*&os8N'!!!*&os8N'!
-!!*&os8Duu!!*&os8Duu!!*&os8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu
-!!*&ss8Duu!!*&ss8Duu!!*&sJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,t5Q:]`!!3,p5Q:]`
-!!E8r+9)<@!!E8r+9)<@!!E8r+9-ik!!iQ!&-%.[!!iPn#QK;S!"],!#QMR>!"],!"96.:!$D7!!WV'X!$D7!!WV'X
-!'gM!!<;Ng!'gM!!.XbD!.Y$!!'gA]!<<(L!$D1?!WW0"!!iN("98?#!!E7O"98?#!!3,X#QO]%!!%ND
-&-)D)!!", at +91g1!!!9(s8V!W!!!$!s8Tk7!!!!`s8RTL!!!!(s8N'!!!!!(s8Duu!!!!0s82is!!!!@
-s7cQo!!!!`s53kW!!!"Ks1eU7!!!$!rr<$!!!!'"rVuou!!!-$p](9o!!!9(huE`W!!!Q0^]4?7!!", at z!!%NH
-z!!*&oz!!3,Xz!!E8:z!!iN(z!"]&/z!"\u-z!$Ct9z!'frQ
-z!'fBAz!.Vcaz!.TM!!!Dur!<3$!!"]&/!<3$!!$D1?!<)ru!'gJ`!<)ru!.Y"K!<)ru
-!<<'!!<)ru!WW0"!<)ru"98B$!<3$!#QOf(!<3$!&-)V/!.TM!5QC]_!.VcaJ,fEH!'fBBs8Vio!$D+Ds8VQg!"],0s8Tk7!!iQ(s8RTL!!E9$s8Duu!!*'!s6p!g!!#7`s*t(L!!!'"n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-79 106 true[1 0 0 1 -3756 -2453]@85 imagemask
-z!!!!(n,NFg
-z!$D1?"979Z!!!!`rr<0$huE`W!<<(L!WVWh!!!'"s1e[8n,NFg!WW2X!<;fo!!!-$s6p$gp](9o
-#QOhn!<;rs!!!9(s7cSDqu?]s&-)\)!.XtJ!!!Q0s7cRYrVuou+92B=!'gJ`!!",@"8i- at rr<$!5PtQ[
-!$D5k!!#7Y!.4bWs*t(L5O\Z%!"]+F!!#7A!'UAfs1eU7J%u%*!!iP^!!%Ma!$2+Bs53kWIt.M?!!E8j!!%M!!"Ju2
-s6p!grr<$/!!3,h!!*$!!"Ju0s7cQorVup.!!*&o!!)uuzs82itrVuou!!%NH!!2utzJ,TEK
-qu?]s!!#7_!!2utz5Q:]aqu?]s!!",@!!2utz+9-inp](9o!!!Q0J-5QHz&-'EIp](9o
-!!!Q0^]X?3z#QN]an,NFg!!!9(i!8`Oz"97iqn,NFg!!!-$n-AF_z!WVWon,NFg!!!'"p]o^Wz
-!<;g!huE`W!!!$!r"%]cz!.XnWhuE`W!!!"KrX[oez!'gGn^]4?7!!!!`rsumFz!'gJo
-^]4?7!!!!@s.@(,z!$D65^]4?7!!!!0s5/>,z!"]+eJ,fQL!!!!(s8RTLz!!iQ(J,fQL
-!!!!$s8RTLz!!E9$z!!!!"s8N'!z!!3-"zzs8N'!z!!*'!zzs8Duuz
-!!%NJzzJ,TEJz!!#7_zz5Q1W_z!!",=zz+8c*=z!!!Q-
-zz&,ZD-z!!!9%zz#P\9!z!!!,rzz"8Dirz!!!,rz
-z"7Q9jz!!!8nzz#Oh]nz!!!8nzz#N,R^z!!!Pfzz&)[Efz
-!!!Pfzz+2 at jV!!!"D!!"+Vz!-eJD+2 at jV!!!!Y!!#66z!&srY5C`_6!!!!]!!#66
-z!'C5]IfKHK!!!!_!!%KKz!'UA_rr<$!!!!!@!!3'!z!$?^nrVuou!!!!@^^'i=z
-!$CtXqu?]s!!!!0s8Vusz!"],0qu?]s!!!!0s8Vioz!!iQ(p](9o!!!!(s8VQgz!!E9$huE`W!!!!"s8Tk7z!!3-"J,fQLzJ,]KKz!!#7]zz&+BQ!z~>
-Q
-q[1 0 0 1 0 0]concat
-96 93 true[1 0 0 1 -2675 -3060]@85 imagemask
-5QCc`s8V!Wz
-5QCc`s8W+Lz5QCc`s8W,sz!.Y%Ks8W-!J,fQL!$D7 at s8W-!n,NFg!!iQ(!!E9$qu?]s!!E9!
-!!!Q0s*t(L!!E9!!!!$!s53kW!!E8r!!!!@s6p!g!!3,p!!!!(s82is!!3,p!!!!"s8Duu!!3,pz
-J,b$!!!3,pz5QAM!!!3,pz+917!!!3,pz#QO8n!!3,pz"98,r!!3,pz!WW&t!!3,pz
-!<;rs!!3,pz!.XtJ!!3,pz!.Y"K!!3,pz!'gJ`!!3,pz!$D5k!!3,pz!$D6V
-!!3,pz!"]+F!!3,pz!!iP^!!3,pz!!iP^!!3,pz!!iPn!!3,pz!!E8j!!3,p
-z!!E8r!!3,pz!!3,p!!3,pz!!3,p!!3,pz!!3,t!!3,pz!!3,t!!3,pz!!*&s!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!%NJ!!3,pz
-!!%NJ!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!*'!!!3,pz!!*&u!!3,pz!!*&u!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!3-!!!3,pz!!3,t!!3,pz!!3,t!!3,pz
-!!E9!!!3,pz!!E9!!!3,pz!!E8r!!3,pz!!iQ!!!3,pz!!iQ!!!3,pz!"],!!!3,pz
-!"],!!!3,pz!$D7!!!3,pz!$D7!!!3,pz!'gM!!!3,pz!.Y$!!!3,pz!<<(L
-!!3,pz!<<'!!!3,pz!WW-!!!3,pz"989!!!3,pz#QO]%!!3,pz&-)D)!!3,p
-z+91g1!!3,pzJ,eF,!!3,pzs8Tk7!!3,p!!!!"s8N'!!!3,p!!!!(s8Duu!!3,p!!!!@s7cQo!!E8r!!!"Ks6p!g!!E9!!!!-$s1eU7!!iQ%!!", at rr<$!!"],0!!iQ(qu?]s
-!$D7 at s8W-!n,NFg!WW3"s8W-!J,fQL5QCc`s8W,oz5QCc`s8W+Lz5QCc`s8Tk7z~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2777 -3059]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-58 65 true[1 0 0 1 -2839 -3059]@85 imagemask
-!!!'"p](9o!!!Q0
-rr<$!!!#7`s1eU7!!*'!s53kW!!3-"s7cQo!!E9$s82is!"],0s8Duu!$D7 at s8N'!!$D7 at s8RTL!'gM`
-s8Tk7!.Y%H!'fBA!<<)W!!hun!<<(L!!D]j!WW0"!!)co!WW-!!!%BH"989!!!#+]"98,r!!"&?#QO8n
-!!!N0#QN]^!!!6(#QN]^!!!7S&-'EF!!!+O&-%.[!!!&8&-%.[!!!$"&,uV0z+9)<@z+9)<@z+8u6?
-z+8u6?z+8u6?z+8u6?z+8u6?z+8c*=z+8c*=z+8c*=z+8c*=
-z+8c*=z+8c*=z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z#Q+Q%
-z#Q=]'z#Q=]'z"9&9#!!2Qh"9&9#!!i9!!WN-"!"\u-!WN-"!"]&/!<3$!!$D1?!<7QL!$D4@!.TM!!'gJ`!'e7!!'gJ`!$C,!!'gG_!$C,!!'gG_!"\Q!!.XtJ!!i9!!.XnH!!E-!
-!.XbD!!)uu!<;Ng!!%M!!WV'X!!#7Q"96.:!!!Q0s8RTL!!!-$s8Duu!!!$!s7cQo!!!!@s1eU7~>
-Q
-0.564706 g
-3297.35 2610.95 m
-3297.35 2648.15 3267.35 2678.15 3230.15 2678.15 c
-2343.35 2678.15 l
-2306.15 2678.15 2276.15 2648.15 2276.15 2610.95 c
-2276.15 2204.15 l
-2276.15 2166.95 2306.15 2136.95 2343.35 2136.95 c
-3230.15 2136.95 l
-3267.35 2136.95 3297.35 2166.95 3297.35 2204.15 c
-f*
-1 g
-3232.55 2666.15 m
-3232.55 2703.35 3203.75 2732.15 3166.55 2732.15 c
-2288.15 2732.15 l
-2252.15 2732.15 2222.15 2703.35 2222.15 2666.15 c
-2222.15 2267.75 l
-2222.15 2230.55 2252.15 2201.75 2288.15 2201.75 c
-3166.55 2201.75 l
-3202.55 2201.75 3232.55 2230.55 3232.55 2267.75 c
-f*
-0 g
-3232.55 2666.15 m
-3232.55 2703.35 3203.75 2732.15 3166.55 2732.15 c
-2288.15 2732.15 l
-2252.15 2732.15 2222.15 2703.35 2222.15 2666.15 c
-2222.15 2267.75 l
-2222.15 2230.55 2252.15 2201.75 2288.15 2201.75 c
-3166.55 2201.75 l
-3202.55 2201.75 3232.55 2230.55 3232.55 2267.75 c
-h
-S
-3050.15 2187.35 15.5999 549.6 re
-Y
-3057.35 2739.35 m
-3057.35 2194.55 l
-S
-3057.35 2368.55 189.6 15.5999 re
-Y
-3054.95 2376.95 m
-3239.75 2376.95 l
-S
-0 0 6120 7920 re
-Y
-3095.75 2378.15 m
-3095.75 2400.95 3077.75 2418.95 3056.15 2418.95 c
-3034.55 2418.95 3016.55 2400.95 3016.55 2378.15 c
-3016.55 2356.55 3034.55 2338.55 3056.15 2338.55 c
-3077.75 2338.55 3095.75 2356.55 3095.75 2378.15 c
-f*
-3275.75 2378.15 m
-3275.75 2400.95 3257.75 2418.95 3236.15 2418.95 c
-3214.55 2418.95 3196.55 2400.95 3196.55 2378.15 c
-3196.55 2356.55 3214.55 2338.55 3236.15 2338.55 c
-3257.75 2338.55 3275.75 2356.55 3275.75 2378.15 c
-f*
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -2581 -2562]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -2666 -2562]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2729 -2560]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2798 -2562]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2915 -2560]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-130 95 true[1 0 0 1 -2289 -2338]@85 imagemask
-z!&+BQ!!!#7
-zz!!"tYzhuE`Wz!!!"Dz!T3qXzzGQ7^D!!2!Xzz!.4bH
-!!!&hzz!!)os!!!!$n,NFgz!!!#sz"7Q9jzzrVuou!!Durzz
-!WE'!!!!9!zz!!3*"!!!!(p](9oz!!!'"z&,ZD-z!!!!$rr<$!!"\u-zz"93lO
-!!!Q-zz!!iOS!!!!@rVuouz!!!9(J,fQL+8u6?z!!!!(s1eU7!$D1?zz
-&-'EF!!#7`zz!"]+F!!!!`rr<$!z!!!Q0huE`WJ,]KKz!!!!@s53kW!.Y$!z
-z+91g1!!%NKJ,fQLz!$D71!!!$!s*t(Lz!!#7`n,NFgs8Tk7z!!!!`s7cQo!WW28zz
-J,f9D!!3-"^]4?7z!.Y%D!!!'"s53kWz!!%NKqu?^!s8V!Wz!!!$!s82is"98DZz
-zs8Vus!!E8qn,NFgz!<<&t!!!9(p[A._z!!3-!rVup's7>^[z!!!'"r-n\H&-(\b
-z!!!!"s87?H!"]+ip](9oz"989`!!!Q0iV3BQz!!E8r5C`_Us2"U5z!!!-$pcj9/+901Tz
-!!!!(s7d[d!$D5kqu?]sz#QO98^]6V!JGoNKz!"],!+2 at k@s+#Ouz!!!Q0i"*U'J,]Lt
-z!!!!0s54FG!.Y"KIfKHKz+917(huJ9+!'^G`z!$D6V#Oh`nrW#._z!!",@^^'?/
-s8E!_J,fQL!!!!`s*t4@!<;rs++O=kz5Q?69p]:Em!$?^kz!'gL6"8Dosqu at hSz!!%NK!!2iss7cR)
-^]4?7!!!"Krr<)t"98,r&)[EfzJ,]KKqucug!!hE^z!<<#u!;m*%n,N^Oz!!*&u!!*!'
-s6p!nn,NFg!!!'"qu?_G#QN]^"7Q9j!!!!"s82isIh2S;!!D]jz!WW&t!.POZ^]4K3z!!E8r
-!!#5*s1eU8p](9o!!!-$p](:YTDu\,!VcWp!!!!$s6p!g+.rR`!!)osz#QO8n!$AuUJ,fTIz!!iPn!!",@
-rr<$!rVuou!!!9(huE`fs8N'!!.FnJ!!!!0s53kW&-)Y0!!%HJz&-(Pf!!iQ'!!!"Kz!$D6V
-!!!9(rVuou56(Z`!!",@^]4?>s8Duu!'^G`!!!!@s*t(L"989!!!#66z5Q?66!!E9!!!!!@J,fQL
-!'gL6!!!-$p](9o++O=k!!#7`!!!!$s7cQo!"ZjF!!!"Krr<$!"98,r!!!PFzJ,TEJ!!E8j!!!!0huE`W!.XtJ
-!!!9(n,NFg#N,R^!!*&u!!!!(s53kW!!hE^!!!$!qu?]s&-(Pf!!!8nzs82is!"]+f!!!!$n,NFg
-!WW&t!!!Q0^]4?7"7Q9j!!3,p!!!!@s1eU7!!2ip!!!-$p](9o+90+V!!!&p!!!!$s6p!g!'gL6!!!!"
-qu?]s"97ij!!#7`J,fQL!W2ot!!iPn!!!!`rr<$!!!)os!!!9(huE`WJ,]KK!!!#u!!!!0s53kW!.XtJzrVuou
-&-(Pf!!*&uz!<)ru!$D6V!!!$!rVuou!!*$!!!",@^]4?8s8Duu!!!$!!!!!`s1eU7!WW&tz
-s*t(LJ,d:a!!E9!z!<7QL!.Y$a!!!9(rVuou!!*&7!!*'!^]4?>s8Duu!!!'"huElZs53kW+92?@
-!!!!$s7cR)s8Vus!.Y%KhuE`W5QC``J,fQKi",kfs8RTL!WW3"^jlCas54Ffs8W+L!!3-"s1j-as8V!fs8W-!J,fWMs8Tk~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -2423 -2339]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-67 65 true[1 0 0 1 -2484 -2338]@85 imagemask
-z(]XO9z
-!&srYz!!#+]z!!!"HzzIK0?Jz!.FnJz!!*$!z!!!$!z!!!!"
-rr<$!z!WRZMz!!3+Mz!!!-$^]4?7!!!!$s1eU7z#QMR>z!!iP^z!!!Q0
-huE`W!!!!0s6p!gz&-),!z!$D71z!!",?p](9o!!!!`r:g6lz5Q#m/z!'g7+z!!%ND
-HiO-H!!!"Kpc\ZXzs6r2Pz!<;OQz!!3,X*rl9@!!!'"i#_q!!!!!"s54E<z"96.I
-J,fQL!!E8:&&8/F!!!9(J-Wji!!!!(s*t?iz#QK;VhuE`W!"])0"5j.Z!!!Q0!!D]j!!!!@rVuug
-z+8u6 at n,NFg!'gG_!VcWp!!#7]!!)co!!!!`qu?`pzJ+s!DHiO-H!.XbD!.4bH!!*&o!!%HJ!!!$!n,NGPzs6p!g4obQ_!WV'X!'^G`!!3,X!!")@!!!-$huEa!J,fQOs1eU7%tFW[
-#QMR>!"XS[!!iOS!!!PF!!!Q0J,fQS^]4?Fs*t(L#N,R^+9)<@!!hE^!$D4@!!!,j!!#7`!!!!$n,NGQ
-rr<$!"8DirJ,]KK!!Dur!<<'!!!!9%!!3-"J,fQ[rW!3's53kW5Q?6Us8Vus!WW2X+92B=!!3-"hu~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2553 -2339]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-36 95 true[1 0 0 1 -2616 -2340]@85 imagemask
-+92B at n/q]1s6p'h
-s8N'!5QCKY!"]+f!!!9(huE`^s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!iP>!!!9(^]4?Fs1eUVs8Tk7+92AV!$D7@^]4E8s1eU7+90+V!!3,8!!!!`^]4?7#J^<~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2655 -2339]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -2718 -2340]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-66 95 true[1 0 0 1 -2787 -2309]@85 imagemask
-!!!-$huE`W!!!"K
-s8N'!!!!!"s8W,Wz&-)\0qu?]s!$D7 at s8N'!!!%NKs8W,7!!!$!s8W-!n,NFhs8W-!s7cQo"98DZ
-!'gG_!!iQ'!!!'"!!!9(n,NFg5C`_Es1eU7!!hE^&-%.[!!!&h!"])0zp](j(z!-eJSrVuou
-!!#+]&,ZD-!!!!?!!iE%z%KHb3z!"T&7qu?]s!!!6("8i-!!!!!(J-#QJz#ClgRz!!e#SIK0?J
-!!!7S!.OtK!!!!(J,g[Az%tFWjJ,fQL!$?^k#J^<>!!%M!!!D-Z!!!Q0!!!&h"98E$rr<$!F8u:?
-s8N'!!.Y%Ks8W&u!!3-"s8W,s!!!9(s8W-!qu?^-s8W-!s7cQo+92B at s8V!W!$D7 at s8W,7!!#7`s8W-!
-!!!!`s8W-!n,NFg5QCc_z!$D4 at z!!",1z!!!!@huE`Wz&)[Efz!!hE^z!!!,Zz
-!!!!"n,NFgz!:Tsgz!!%6Dz!!!!]zz*WQ0?z!"XS[z!!!8mrVuou
-!!!!$s8V!Wz#QOi!z!"],0rVuou!!#7`!WN-"!!!"KquD5^!!!!"s6p"1huE`W"979Z&+BQ!
-!!E8:!"\i)!!!9(^]4W;!!!!0s*t(Squ?]s&,uV0#Q=]'!$D4@!!E3#!!",?!!!-$!!!!`rVup#rr<$!5Q1W_"9/?$
-!'gA]!!E7O!!#7]!!!-$J,fR6qu?^!s*t(L5PtK]"93lO!'gA]!!E7O!!#7]!!!-$J,fR6p](:!s*t(L
-5PP3Y#QK;S!'g5Y!!iOS!!#7Y!!!9(J,fQkp](:)s*t(L+8>g9&,uV0!$Ct9!"])0!!!Q)!!",@!!!!0
-qu?^=rr<$!#Q+Q%+8u6?!!iE%!'gG_!!!-#!!#7]!!!!$rVuqJs8Tk7!WN-"s8W,7!!*%L!WW3"^]4 at a^]XW:s1eU75N!(Ps8Tk7!"],0s1eU7!!!-$s82iszs8VQgz!'gJ`!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -2857 -2339]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-68 95 true[1 0 0 1 -2897 -2340]@85 imagemask
-J,fQJ"98E$n:1K<
-rWE3#s6pR!s7cSDs8Tk8s8RTL#QOc'!<<'!!!E9!!!%NJ!!!'"p](;DrVup!s7cQo5Q1W_!WVWh!'gA]
-!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]
-!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]
-!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]s
-s6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!
-n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!
-n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!3,h!!#7_!!!'"huEaArr<$"s53kW5QAM!"979Z!'gMA!!E8Z
-!!#7^n,N^n^]4@!rVQX+s1eU75Q(N]5QAM!!'gC2s8W+L!!#7]5QCc`J,fR6r#bt=rr<$!5Pu&ls8Duu
-!'gA`s8Vus!!#7]!WW2p!!!!`quD6HhuE`W5PtKls*t(L!'gA]z!!#7]z!!!!`qu?]sz5PtK]z
-!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz
-5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`
-qu?]sz5PtK]z!'gA]z!!%NHz!!!$!qu?]s!!!"Ks82iszJ,fEHz!'gM]z!!!9(qu?]szs82isz!"\u-z!!!&tzz49,?]!!!!~>
-Q
-3346.55 2079.35 15.5999 1860 re
-Y
-3353.75 3941.75 m
-3353.75 2087.75 l
-S
-3237.35 3328.55 129.6 15.5999 re
-Y
-3234.95 3336.95 m
-3359.75 3336.95 l
-S
-0 0 6120 7920 re
-Y
-3275.75 3338.15 m
-3275.75 3360.95 3257.75 3378.95 3236.15 3378.95 c
-3214.55 3378.95 3196.55 3360.95 3196.55 3338.15 c
-3196.55 3316.55 3214.55 3298.55 3236.15 3298.55 c
-3257.75 3298.55 3275.75 3316.55 3275.75 3338.15 c
-f*
-3395.75 3338.15 m
-3395.75 3360.95 3377.75 3378.95 3356.15 3378.95 c
-3334.55 3378.95 3316.55 3360.95 3316.55 3338.15 c
-3316.55 3316.55 3334.55 3298.55 3356.15 3298.55 c
-3377.75 3298.55 3395.75 3316.55 3395.75 3338.15 c
-f*
-3237.35 3088.55 129.6 15.5999 re
-Y
-3234.95 3096.95 m
-3359.75 3096.95 l
-S
-0 0 6120 7920 re
-Y
-3275.75 3098.15 m
-3275.75 3120.95 3257.75 3138.95 3236.15 3138.95 c
-3214.55 3138.95 3196.55 3120.95 3196.55 3098.15 c
-3196.55 3076.55 3214.55 3058.55 3236.15 3058.55 c
-3257.75 3058.55 3275.75 3076.55 3275.75 3098.15 c
-f*
-3395.75 3098.15 m
-3395.75 3120.95 3377.75 3138.95 3356.15 3138.95 c
-3334.55 3138.95 3316.55 3120.95 3316.55 3098.15 c
-3316.55 3076.55 3334.55 3058.55 3356.15 3058.55 c
-3377.75 3058.55 3395.75 3076.55 3395.75 3098.15 c
-f*
-3237.35 2368.55 129.6 15.5999 re
-Y
-3234.95 2376.95 m
-3359.75 2376.95 l
-S
-0 0 6120 7920 re
-Y
-3275.75 2378.15 m
-3275.75 2400.95 3257.75 2418.95 3236.15 2418.95 c
-3214.55 2418.95 3196.55 2400.95 3196.55 2378.15 c
-3196.55 2356.55 3214.55 2338.55 3236.15 2338.55 c
-3257.75 2338.55 3275.75 2356.55 3275.75 2378.15 c
-f*
-3395.75 2378.15 m
-3395.75 2400.95 3377.75 2418.95 3356.15 2418.95 c
-3334.55 2418.95 3316.55 2400.95 3316.55 2378.15 c
-3316.55 2356.55 3334.55 2338.55 3356.15 2338.55 c
-3377.75 2338.55 3395.75 2356.55 3395.75 2378.15 c
-f*
-3357.35 3328.55 249.6 15.5999 re
-Y
-3354.95 3336.95 m
-3599.75 3336.95 l
-S
-0 0 6120 7920 re
-Y
-3395.75 3338.15 m
-3395.75 3360.95 3377.75 3378.95 3356.15 3378.95 c
-3334.55 3378.95 3316.55 3360.95 3316.55 3338.15 c
-3316.55 3316.55 3334.55 3298.55 3356.15 3298.55 c
-3377.75 3298.55 3395.75 3316.55 3395.75 3338.15 c
-f*
-3635.75 3338.15 m
-3635.75 3360.95 3617.75 3378.95 3596.15 3378.95 c
-3574.55 3378.95 3556.55 3360.95 3556.55 3338.15 c
-3556.55 3316.55 3574.55 3298.55 3596.15 3298.55 c
-3617.75 3298.55 3635.75 3316.55 3635.75 3338.15 c
-f*
-3357.35 2368.55 248.4 188.4 re
-Y
-3357.35 2376.95 m
-3597.35 2556.95 l
-S
-0 0 6120 7920 re
-Y
-3395.75 2378.15 m
-3395.75 2400.95 3377.75 2418.95 3356.15 2418.95 c
-3334.55 2418.95 3316.55 2400.95 3316.55 2378.15 c
-3316.55 2356.55 3334.55 2338.55 3356.15 2338.55 c
-3377.75 2338.55 3395.75 2356.55 3395.75 2378.15 c
-f*
-3635.75 2558.15 m
-3635.75 2580.95 3617.75 2598.95 3596.15 2598.95 c
-3574.55 2598.95 3556.55 2580.95 3556.55 2558.15 c
-3556.55 2536.55 3574.55 2518.55 3596.15 2518.55 c
-3617.75 2518.55 3635.75 2536.55 3635.75 2558.15 c
-f*
-3357.35 2908.55 248.4 188.4 re
-Y
-3357.35 3096.95 m
-3597.35 2916.95 l
-S
-0 0 6120 7920 re
-Y
-3395.75 3098.15 m
-3395.75 3120.95 3377.75 3138.95 3356.15 3138.95 c
-3334.55 3138.95 3316.55 3120.95 3316.55 3098.15 c
-3316.55 3076.55 3334.55 3058.55 3356.15 3058.55 c
-3377.75 3058.55 3395.75 3076.55 3395.75 3098.15 c
-f*
-3635.75 2918.15 m
-3635.75 2940.95 3617.75 2958.95 3596.15 2958.95 c
-3574.55 2958.95 3556.55 2940.95 3556.55 2918.15 c
-3556.55 2896.55 3574.55 2878.55 3596.15 2878.55 c
-3617.75 2878.55 3635.75 2896.55 3635.75 2918.15 c
-f*
-q[1 0 0 1 0 0]concat
-82 74 true[1 0 0 1 -3758 -2873]@85 imagemask
-!!!$!huE`W&&8/F
-!"],/!!!!`n,NFgJ,fP!!!%ND!!!'"s8V!W!<;rs!!E9$s7cQps82is&-(QPqu?j!rVup?s*tX[!!E9#
-!!#7_!!iOS#QOf(!.XnH"96.As8N'!s7cQps54Ffrr<*"p](<on.5R!J-#]>!!%N<&,:X)"979Z!.Xbc
-n/m/cs53kW5PuV]%tFob^]4?Vr'.t-J.M[q!!",?5C`uh&-'EF!"]&nJ-Wk3s*t(L&-%+Z#J_G]J,fQSs*k"N^`WT,
-!!!9(rW!&95Q?66!!E9#!!C#$rr<$!"989!"2I/$!!!!$s82j!^jl at a!!!'"qu?]sJ,]KK!!3,p!!!"K
-rr<$!!<;fo!!%NKzs7cQo!.XtJ!!!$!p](9oJ,TEJ!!%ND!!!$!rVuou!.XbD!!*&uzJ,B9H
-!<<#u!!!!`qu?]ss8Duu!!#7]!!!$!rVuou!'gG_!!*&uz+8u6?!<<#u!!!!@rVuous8Duu!!",@!!!$!rVuou
-!$D4@!!*&uz+9)<@!<<#u!!!!@s*t(Ls8Duu!!", at J,fTLrVuou!'gL6!!*&uz5QAM!!<<#u
-!!!!`s1eU7s8Duu!!#7`huEb,rVuou!'gMA!!%NKzJ,eF,!.Y"K!!!"Ks6p!gJ,]KK!!%KJn,NH<
-rr<$!!.Ot;!!#7`zrr;`n!'gJ`!!!#uJ+s!D5Q?66!!)qHp](:Ys*t(L!W7HF!!", at J,fQMr'1)Z!$D5k!!!&p
-5PtK]&-'EF!!E!\rVup/s1eU7"8Eu;!!!9(^]4?>n/qZ1!!iP^!!!8n+9)<@"979Z!"[uurr<$$s6p!g
-+5d\0J,fWMn,NGQ^^pHq!!*&o!!#7!#QK;S!.XnH!<7QSs1eU75Q1W`rr<0$^]4?Vrr<<'!!E8:!!!Q0
-i#hjs"979Z!!iQ(s7cQps53kW!WW3"n,NLhn,NFgJ,fQ,!!3,h!!!!@s8RTL!<;Ng!!!9(rVuous7cQo!!%N,z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-96 100 true[1 0 0 1 -2325 -3767]@85 imagemask
-z!!!Q)z
-z!!iQ(n,NFgz!.Y%Krr<$!z"98E$s1eU7z+92B at s7cQozJ,fQKs82is!!!!"
-s8W-!s8N'!!!!!(s8W+Ms8Tk7!!!!0s8VQg#QN]^!!!!`s8RTL!<;Ng!!!"Ks8Duu!$D+=!!!$!s7cQo
-!!iK'!!!'"s6p!g!!E6$!!!9(s53kW!!*%L!!!Q0s*t(L!!%Ma!!", at rr<$!!!",!!!", at rr<$!!!!Q!!!#7`rVuou
-!!!9!!!%NKqu?]s!!!-!!!*'!qu?]s!!!'!!!3-"p](9o!!!$!!!3-"p](9o!!!"J!!E9$n,NFg!!!!]
-!!E9$n,NFg!!!!9!!iQ(huE`Wz!!iQ(huE`Wz!"],0huE`Wz!"],0^]4?7z!$D7@
-^]4?7z!$D7@^]4?7z!'gM`^]4?7z!'gM`J,fQLz!'gM`J,fQLz!.Y%KJ,fQLz!.Y%K
-J,fQLz!.Y%KJ,fQLz!<<*!J,fQLz!<<*!J,fQLz!<<*!J,fQLz!<<*!z
-z!<<*!zz!<<*!zz!WW3"zz!WW3"zz!WW3"zz
-!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"zz
-!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"
-zz!<<*!zz!<<*!zz!<<*!zz!<<*!zz!<<*!z
-z!<<*!J,fQLz!.Y%KJ,fQLz!.Y%KJ,fQLz!.Y%KJ,fQLz!'gM`J,fQLz!'gM`J,fQL
-!!!!]!'gM`J,fQL!!!"H!$D7@^]4?7!!!"H!$D7@^]4?7!!!#s!$D7@^]4?7!!!#s!"],0^]4?7!!!&t
-!"],0^]4?7!!!&t!!iQ(huE`W!!!-!!!iQ(huE`W!!!-!!!E9$huE`W!!!9%!!3-"n,NFg!!!Q-!!3-"
-n,NFg!!!Q-!!*'!n,NFg!!",=!!%NKp](9o!!#7]!!%NKp](9o!!#7]!!#7`qu?]s!!%NH!!", at qu?]s!!*&s!!!Q0
-rVuou!!3,t!!!9(rVuou!!E9!!!!-$rr<$!!!iQ%!!!'"s*t(L!"],-!!!$!s1eU7!$D7=!!!"Ks53kW
-!.Y%H!!!!`s6p!g!<<)s!!!!0s7cQo"98E!!!!!(s8Duu&-)\-!!!!"s8RTL5Q?B6zJ,f!=s82oq
-z+92B at s6p$dz#QOi(s*t+Iz!WW3"qu?_Ez!$D7 at huEb)z!!*&s!!!!]~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2426 -3770]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-73 96 true[1 0 0 1 -2543 -3741]@85 imagemask
-+92B at s*t(L!!",@
-s8W+Lz+92B at s*t(L!!", at s8Vioz"98E$^]4?7!!!$!s8RTLz!.Y%Kz!!!!`s8Duu
-z!'gM_z!!!!`s8Duuz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`
-s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82j=
-^]4?7!'gM]!WW&t!!!!`s83-%s*t(L!'gM]&-)[f!!!!`s83u=s6p!g!'gM]J,fQD!!!!`s8;oss8Duu
-!'gM^s8W-!!!!!`s8W!=s8N'!!'gM`n-B!nJ,fR6s8Tk8s8Tk7!'gM`J,oWLhuEaAs8N'!s8V!W!'gM`!!%NKn,NGQ
-s8DuuJ,f!<!'gM]!!#7`p](:Ys82is5QCKY!'gM]!!#7`qu?^]s82is+926=!'gM]!!", at rVup_s82is
-+92<?!'gM]!!", at rVup_s82is+92<?!'gM]!!", at rr<$`s82is&-)Y0!'gM]!!!Q0rr<$`s82is&-)Y0
-!'gM]!!!Q0rr<$`s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6
-s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is
-&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0rr<$`s82is&-)Y0!'gM]!!!Q0rr<$`s82is+92?@
-!'gM]!!", at rr<$`s82is+92<?!'gM]!!", at rVup_s82is+92<?!'gM]!!", at qu?^]s8Duu5QCW]!'gM_!!#7`p](:Ys8N'!5QCKY!'gM`J,k*!n,NGQs8Tk7
-J,f!<!'gM`huNfWhuEaAs8DEfs8V!W!'gM^qud!!^]4 at as8;m-s8RTL!<<)sJ,fQK!!!-$s87BHs8Duu
-+92B=5QCc]!!", at s83u=s7cQo+92B=&-)[f!!", at s83!!s*t(Lz!<<#uz!!!!0^]4?7~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -2619 -3770]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -2706 -3770]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2768 -3768]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2839 -3770]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2955 -3768]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 1816 a(Figure)39 b(6:)57 b(A)39 b(CmpF)-8
-b(rame)38 b(\(comp)s(ound)f(F)-8 b(rame\))40 b(formed)e(b)m(y)g(com)m
-(bining)h(t)m(w)m(o)h(simpler)e(F)-8 b(rames.)65 b(Note)0
-1929 y(ho)m(w)29 b(the)g(sp)s(ecial)g(relationship)g(whic)m(h)f(exists)
-h(b)s(et)m(w)m(een)h(the)f(RA)f(and)g(Dec)i(axes)f(is)g(preserv)m(ed)f
-(within)h(this)0 2042 y(data)35 b(structure.)53 b(As)34
-b(with)h(comp)s(ound)e(Mappings)h(\(Figure)h(4\),)i(CmpF)-8
-b(rames)34 b(ma)m(y)h(b)s(e)f(nested)h(in)f(order)0 2155
-y(to)d(build)e(more)i(complex)g(F)-8 b(rames.)0 2531
-y(There)35 b(are)g(sev)m(eral)i(more)e(sp)s(ecialised)h(forms)f(of)g(F)
--8 b(rame,)38 b(whic)m(h)d(pro)m(vide)g(the)h(additional)g
-(functionalit)m(y)0 2644 y(required)j(when)f(handling)h(co)s(ordinates)
-h(within)f(some)h(sp)s(eci\014c)f(ph)m(ysical)i(domain.)68
-b(This)38 b(ranges)i(from)0 2757 y(tasks)33 b(suc)m(h)g(as)g
-(formatting)h(axis)f(v)-5 b(alues,)34 b(to)g(complex)f(tasks)h(suc)m(h)
-e(as)h(determining)g(the)g(transformation)0 2870 y(b)s(et)m(w)m(een)43
-b(an)m(y)g(pair)f(of)h(related)h(co)s(ordinate)f(systems.)77
-b(F)-8 b(or)44 b(instance,)i(the)d(SkyF)-8 b(rame)43
-b(\(Figure)g(5b,c\),)0 2983 y(represen)m(ts)33 b(celestial)j(co)s
-(ordinate)e(systems,)h(the)e(Sp)s(ecF)-8 b(rame)34 b(represen)m(ts)f
-(sp)s(ectral)h(co)s(ordinate)g(systems,)0 3096 y(and)42
-b(the)i(TimeF)-8 b(rame)44 b(represen)m(ts)f(time)h(co)s(ordinate)f
-(systems.)79 b(All)44 b(these)f(pro)m(vide)h(a)f(wide)g(range)g(of)0
-3209 y(di\013eren)m(t)f(systems)f(for)g(describing)g(p)s(ositions)g
-(within)g(their)g(asso)s(ciated)i(ph)m(ysical)e(domain,)j(and)d(these)0
-3321 y(ma)m(y)31 b(b)s(e)f(selected)i(b)m(y)e(setting)h(appropriate)g
-(attributes.)0 3486 y(As)c(with)h(comp)s(ound)e(Mappings)h(\()p
-Fu(x)p FG(2.3\),)j(it)e(is)g(p)s(ossible)f(to)h(merge)g(t)m(w)m(o)h(F)
--8 b(rames)28 b(together)h(to)f(form)f(a)h(com-)0 3599
-y(p)s(ound)f(F)-8 b(rame,)30 b(or)f(CmpF)-8 b(rame,)30
-b(in)e(whic)m(h)h(b)s(oth)f(sets)i(of)f(axes)h(are)f(com)m(bined.)41
-b(One)28 b(could,)i(for)f(example,)0 3712 y(ha)m(v)m(e)j(celestial)i
-(co)s(ordinates)e(on)f(t)m(w)m(o)i(axes)f(and)e(an)h(unrelated)h(co)s
-(ordinate)g(\(w)m(a)m(v)m(elength,)i(p)s(erhaps\))c(on)h(a)0
-3825 y(third)c(\(Figure)h(6\).)41 b(Kno)m(wledge)28 b(of)g(the)g
-(relationships)g(b)s(et)m(w)m(een)g(the)g(axes)g(is)g(preserv)m(ed)f
-(in)m(ternally)i(b)m(y)e(the)0 3938 y(pro)s(cess)j(of)g(constructing)h
-(the)g(CmpF)-8 b(rame)30 b(whic)m(h)g(represen)m(ts)h(them.)0
-4102 y FE(F)-9 b(urther)31 b(reading:)39 b FG(F)-8 b(or)28
-b(a)g(more)f(complete)i(description)e(of)h(F)-8 b(rames)28
-b(see)g Fu(x)p FG(7,)h(for)e(SkyF)-8 b(rames)27 b(see)h
-Fu(x)p FG(8)g(and)0 4215 y(for)h(Sp)s(ecF)-8 b(rames)29
-b(see)h Fu(x)p FG(9.)41 b(Also)29 b(see)h(the)f(F)-8
-b(rame,)31 b(SkyF)-8 b(rame,)29 b(Sp)s(ecF)-8 b(rame,)30
-b(TimeF)-8 b(rame)30 b(and)f(CmpF)-8 b(rame)0 4328 y(en)m(tries)31
-b(in)f(App)s(endix)f(D.)0 4627 y Fw(2.5)112 b(Net)m(w)m(orks)37
-b(of)h(Co)s(ordinate)g(Systems)0 4851 y FG(Mappings)h(and)f(F)-8
-b(rames)40 b(ma)m(y)f(b)s(e)f(connected)i(together)h(to)e(form)g(net)m
-(w)m(orks)g(called)h(F)-8 b(rameSets,)43 b(whic)m(h)0
-4964 y(are)c(used)f(to)i(represen)m(t)f(sets)g(of)g(in)m(ter-related)i
-(co)s(ordinate)e(systems)g(\(Figure)h(7\).)133 b(A)39
-b(F)-8 b(rameSet)40 b(ma)m(y)0 5077 y(b)s(e)33 b(extended)h(b)m(y)f
-(adding)h(a)g(new)f(F)-8 b(rame)35 b(to)f(it,)i(together)f(with)e(an)h
-(asso)s(ciated)h(Mapping)f(whic)m(h)f(relates)0 5190
-y(the)h(new)e(co)s(ordinate)j(system)e(to)h(one)g(whic)m(h)f(is)g
-(already)h(presen)m(t.)50 b(This)33 b(pro)s(cess)f(ensures)h(that)h
-(there)f(is)0 5303 y(alw)m(a)m(ys)e(exactly)h(one)e(path,)f
-Fx(via)h FG(Mappings,)g(b)s(et)m(w)m(een)g(an)m(y)g(pair)g(of)f(F)-8
-b(rames.)42 b(A)29 b(function)h(is)f(pro)m(vided)h(for)0
-5416 y(iden)m(tifying)h(this)f(path)g(and)g(returning)g(the)g(complete)
-i(Mapping.)0 5580 y(One)42 b(of)h(the)f(F)-8 b(rames)44
-b(in)e(a)h(F)-8 b(rameSet)43 b(is)g(termed)f(its)h Fx(b)-5
-b(ase)43 b FG(F)-8 b(rame.)78 b(This)42 b(underlies)f(the)i(F)-8
-b(rameSet's)0 5693 y(purp)s(ose,)38 b(whic)m(h)g(is)f(to)i(calibrate)g
-(datasets)g(and)e(other)h(en)m(tities)i(b)m(y)d(attac)m(hing)j(co)s
-(ordinate)f(systems)f(to)p eop end
-%%Page: 10 20
-TeXDict begin 10 19 bop 0 52 a FG(10)2126 b Fz(2)92 b(O)m(VER)-10
-b(VIEW)30 b(OF)h(AST)e(CONCEPTS)612 4135 y @beginspecial
-107 @llx 108 @lly 516 @urx 547 @ury 3067 @rwi @setspecial
-%%BeginDocument: sun210_figures/frameset.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 107 108 516 547
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 17:14:16
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5153.75 4907.75 m
-5153.75 5184.95 4928.15 5410.55 4650.95 5410.55 c
-1635.35 5410.55 l
-1358.15 5410.55 1132.55 5184.95 1132.55 4907.75 c
-1132.55 1592.15 l
-1132.55 1314.95 1358.15 1089.35 1635.35 1089.35 c
-4650.95 1089.35 l
-4928.15 1089.35 5153.75 1314.95 5153.75 1592.15 c
-f*
-1 g
-5088.95 4964.15 m
-5088.95 5240.15 4864.55 5464.55 4588.55 5464.55 c
-1578.95 5464.55 l
-1302.95 5464.55 1078.55 5240.15 1078.55 4964.15 c
-1078.55 1654.55 l
-1078.55 1378.55 1302.95 1154.15 1578.95 1154.15 c
-4588.55 1154.15 l
-4864.55 1154.15 5088.95 1378.55 5088.95 1654.55 c
-f*
-8 w
-1 J
-1 j
-0 g
-5088.95 4964.15 m
-5088.95 5240.15 4864.55 5464.55 4588.55 5464.55 c
-1578.95 5464.55 l
-1302.95 5464.55 1078.55 5240.15 1078.55 4964.15 c
-1078.55 1654.55 l
-1078.55 1378.55 1302.95 1154.15 1578.95 1154.15 c
-4588.55 1154.15 l
-4864.55 1154.15 5088.95 1378.55 5088.95 1654.55 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1563.35 5256.95 l
-1451.75 5256.95 1360.55 5165.75 1360.55 5055.35 c
-1360.55 4917.35 l
-1360.55 4806.95 1451.75 4715.75 1563.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-f*
-0 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-h
-S
-0.201248 i
-1539.33 5152 m
-1425.22 5152 l
-1425.22 5147 l
-1439.11 5146.2 1443 5143.18 1443 5132.72 c
-1443 5035.32 l
-1443 5024.85 1440.17 5022.64 1425.22 5021.03 c
-1425.22 5016 l
-1497.67 5016 l
-1497.67 5021 l
-1479.15 5021.81 1476 5024.23 1476 5035.32 c
-1476 5082.21 l
-1496.22 5081.81 1503.55 5074.36 1506.32 5051.02 c
-1511.35 5051.02 l
-1511.35 5119.04 l
-1506.32 5119.04 l
-1502.76 5096.1 1495.82 5089.05 1476 5089.05 c
-1476 5135.74 l
-1476 5143.19 1478.52 5145 1488.41 5145 c
-1507.13 5145 1518.8 5141.64 1525.04 5134.74 c
-1529.47 5129.71 1531.68 5124.27 1534.5 5111.59 c
-1539.33 5111.59 l
-h
-1544.96 5016 m
-f*
-1589.19 5109 m
-1550.84 5109 l
-1550.84 5103.95 l
-1559.49 5102.74 1562 5100.12 1562 5092.07 c
-1562 5032.9 l
-1562 5024.65 1559.93 5022.44 1550.84 5020.83 c
-1550.84 5016 l
-1604.37 5016 l
-1604.37 5020.83 l
-1592.09 5021.63 1590 5024.25 1590 5036.73 c
-1590 5074.76 l
-1590 5085.23 1595.49 5093.88 1601.95 5093.88 c
-1603.56 5093.88 1605.37 5092.47 1607.59 5089.25 c
-1611.41 5083.82 1614.43 5082.01 1619.66 5082.01 c
-1627.11 5082.01 1632.34 5087.64 1632.34 5095.29 c
-1632.34 5104.55 1625.5 5111.41 1616.04 5111.41 c
-1606.1 5111.41 1598.54 5106.12 1589.19 5092.27 c
-h
-1634.35 5016 m
-f*
-1729.19 5028.88 m
-1727.18 5026.87 l
-1726.57 5026.26 1725.97 5026.06 1724.96 5026.06 c
-1722.15 5026.06 1721 5027.67 1721 5031.09 c
-1721 5083.62 l
-1721 5100.73 1705.6 5111.42 1680.89 5111.42 c
-1658.15 5111.42 1642.85 5101.06 1642.85 5085.83 c
-1642.85 5077.38 1647.69 5072.55 1655.94 5072.55 c
-1663.99 5072.55 1669.62 5077.38 1669.62 5084.22 c
-1669.62 5087.04 1668.61 5089.66 1666 5092.88 c
-1664.19 5094.89 1663.58 5096.1 1663.58 5097.3 c
-1663.58 5101.53 1669.02 5104.42 1676.26 5104.42 c
-1688.14 5104.42 1693.86 5099.08 1693.86 5087.04 c
-1693.86 5072.35 l
-1669.91 5065.1 1660.29 5061.48 1652.51 5056.45 c
-1643.46 5050.41 1639 5043.37 1639 5034.52 c
-1639 5022.24 1648.27 5013.18 1661.17 5013.18 c
-1672.84 5013.18 1682.1 5017.21 1693.17 5027.27 c
-1695.38 5017.01 1699.81 5013.18 1709.67 5013.18 c
-1718.32 5013.18 1724.56 5016.4 1732.21 5024.65 c
-h
-1693 5036.13 m
-1687.55 5029.89 1683.52 5027.47 1678.68 5027.47 c
-1672.64 5027.47 1668 5032.91 1668 5040.96 c
-1668 5052.63 1676.61 5060.88 1693 5065.31 c
-h
-1734.62 5016 m
-f*
-1776.4 5109 m
-1737.7 5109 l
-1737.7 5103.95 l
-1746.55 5102.74 1749 5100.32 1749 5092.07 c
-1749 5032.9 l
-1749 5024.65 1746.74 5022.44 1737.7 5020.83 c
-1737.7 5016 l
-1786 5016 l
-1786 5020.83 l
-1778.95 5021.84 1777 5024.65 1777 5032.3 c
-1777 5086.03 l
-1777 5087.04 1779.87 5090.66 1782.18 5092.88 c
-1786.4 5096.1 1790.02 5098.42 1793.65 5098.42 c
-1801.5 5098.42 1805 5093.59 1805 5081 c
-1805 5032.3 l
-1805 5024.05 1802.68 5021.43 1794.85 5020.83 c
-1794.85 5016 l
-1841.95 5016 l
-1841.95 5020.83 l
-1834.9 5021.64 1833 5024.65 1833 5032.3 c
-1833 5086.03 l
-1833 5087.04 1835.73 5090.46 1837.92 5092.68 c
-1842.35 5096.1 1845.97 5098.42 1849.59 5098.42 c
-1857.24 5098.42 1860 5093.38 1860 5081 c
-1860 5032.3 l
-1860 5023.85 1857.85 5021.43 1850.4 5020.83 c
-1850.4 5016 l
-1898.3 5016 l
-1898.3 5021 l
-1890.45 5021.4 1888 5023.78 1888 5032.3 c
-1888 5082.81 l
-1888 5100.12 1877.43 5111.42 1861.07 5111.42 c
-1849.59 5111.42 1841.95 5106.73 1831.48 5093.68 c
-1825.44 5106.36 1818.4 5111.42 1805.72 5111.42 c
-1792.95 5111.42 1783.98 5105.91 1776.4 5093.68 c
-h
-1901.64 5016 m
-f*
-1979.9 5041.16 m
-1971.65 5031.29 1965.61 5027.18 1956.96 5027.18 c
-1949.31 5027.18 1943.27 5030.77 1939.25 5037.94 c
-1935.43 5044.54 1933.82 5051.56 1933.01 5066 c
-1983.73 5066 l
-1982.52 5082.36 1979.5 5091.43 1973.26 5099.12 c
-1966.82 5106.96 1957.36 5111.42 1946.09 5111.42 c
-1920.94 5111.42 1904.03 5091.4 1904.03 5061.88 c
-1904.03 5032.5 1920.53 5013.18 1945.49 5013.18 c
-1961.79 5013.18 1971.65 5019.42 1984.73 5038.34 c
-h
-1932 5073 m
-1932.61 5096.96 1936.23 5104.42 1946.09 5104.42 c
-1951.93 5104.42 1955.55 5101.38 1957.16 5095.49 c
-1958.17 5091.67 1958.57 5086.03 1958.97 5075.77 c
-1958.97 5073 l
-h
-1988.35 5016 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -5016]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4722.95 4254.95 m
-4722.95 4366.55 4631.75 4457.75 4520.15 4457.75 c
-4023.35 4457.75 l
-3911.75 4457.75 3820.55 4366.55 3820.55 4254.95 c
-3820.55 4118.15 l
-3820.55 4006.55 3911.75 3915.35 4023.35 3915.35 c
-4520.15 3915.35 l
-4631.75 3915.35 4722.95 4006.55 4722.95 4118.15 c
-f*
-1 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-f*
-16 w
-0 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-h
-S
-0.201248 i
-3999.33 4353 m
-3885.22 4353 l
-3885.22 4348 l
-3899.11 4347.2 3903 4344.18 3903 4333.72 c
-3903 4236.32 l
-3903 4225.85 3900.17 4223.64 3885.22 4222.03 c
-3885.22 4217 l
-3957.67 4217 l
-3957.67 4222 l
-3939.15 4222.81 3936 4225.23 3936 4236.32 c
-3936 4283.21 l
-3956.22 4282.81 3963.55 4275.36 3966.32 4252.02 c
-3971.35 4252.02 l
-3971.35 4320.04 l
-3966.32 4320.04 l
-3962.76 4297.1 3955.82 4290.05 3936 4290.05 c
-3936 4336.74 l
-3936 4344.19 3938.52 4346 3948.41 4346 c
-3967.13 4346 3978.8 4342.64 3985.04 4335.74 c
-3989.47 4330.71 3991.68 4325.27 3994.5 4312.59 c
-3999.33 4312.59 l
-h
-4004.96 4217 m
-f*
-4049.19 4310 m
-4010.84 4310 l
-4010.84 4304.95 l
-4019.49 4303.74 4022 4301.12 4022 4293.07 c
-4022 4233.9 l
-4022 4225.65 4019.93 4223.44 4010.84 4221.83 c
-4010.84 4217 l
-4064.37 4217 l
-4064.37 4221.83 l
-4052.09 4222.63 4050 4225.25 4050 4237.73 c
-4050 4275.76 l
-4050 4286.23 4055.49 4294.88 4061.95 4294.88 c
-4063.56 4294.88 4065.37 4293.47 4067.59 4290.25 c
-4071.41 4284.82 4074.43 4283.01 4079.66 4283.01 c
-4087.11 4283.01 4092.34 4288.64 4092.34 4296.29 c
-4092.34 4305.55 4085.5 4312.41 4076.04 4312.41 c
-4066.1 4312.41 4058.54 4307.12 4049.19 4293.27 c
-h
-4094.35 4217 m
-f*
-4189.19 4229.88 m
-4187.18 4227.87 l
-4186.57 4227.26 4185.97 4227.06 4184.96 4227.06 c
-4182.15 4227.06 4181 4228.67 4181 4232.09 c
-4181 4284.62 l
-4181 4301.73 4165.6 4312.42 4140.89 4312.42 c
-4118.15 4312.42 4102.85 4302.06 4102.85 4286.83 c
-4102.85 4278.38 4107.69 4273.55 4115.94 4273.55 c
-4123.99 4273.55 4129.62 4278.38 4129.62 4285.22 c
-4129.62 4288.04 4128.61 4290.66 4126 4293.88 c
-4124.19 4295.89 4123.58 4297.1 4123.58 4298.3 c
-4123.58 4302.53 4129.02 4305.42 4136.26 4305.42 c
-4148.14 4305.42 4153.86 4300.08 4153.86 4288.04 c
-4153.86 4273.35 l
-4129.91 4266.1 4120.29 4262.48 4112.51 4257.45 c
-4103.46 4251.41 4099 4244.37 4099 4235.52 c
-4099 4223.24 4108.27 4214.18 4121.17 4214.18 c
-4132.84 4214.18 4142.1 4218.21 4153.17 4228.27 c
-4155.38 4218.01 4159.81 4214.18 4169.67 4214.18 c
-4178.32 4214.18 4184.56 4217.4 4192.21 4225.65 c
-h
-4153 4237.13 m
-4147.55 4230.89 4143.52 4228.47 4138.68 4228.47 c
-4132.64 4228.47 4128 4233.91 4128 4241.96 c
-4128 4253.63 4136.61 4261.88 4153 4266.31 c
-h
-4194.62 4217 m
-f*
-4236.4 4310 m
-4197.7 4310 l
-4197.7 4304.95 l
-4206.55 4303.74 4209 4301.32 4209 4293.07 c
-4209 4233.9 l
-4209 4225.65 4206.74 4223.44 4197.7 4221.83 c
-4197.7 4217 l
-4246 4217 l
-4246 4221.83 l
-4238.95 4222.84 4237 4225.65 4237 4233.3 c
-4237 4287.03 l
-4237 4288.04 4239.87 4291.66 4242.18 4293.88 c
-4246.4 4297.1 4250.02 4299.42 4253.65 4299.42 c
-4261.5 4299.42 4265 4294.59 4265 4282 c
-4265 4233.3 l
-4265 4225.05 4262.68 4222.43 4254.85 4221.83 c
-4254.85 4217 l
-4301.95 4217 l
-4301.95 4221.83 l
-4294.9 4222.64 4293 4225.65 4293 4233.3 c
-4293 4287.03 l
-4293 4288.04 4295.73 4291.46 4297.92 4293.68 c
-4302.35 4297.1 4305.97 4299.42 4309.59 4299.42 c
-4317.24 4299.42 4320 4294.38 4320 4282 c
-4320 4233.3 l
-4320 4224.85 4317.85 4222.43 4310.4 4221.83 c
-4310.4 4217 l
-4358.3 4217 l
-4358.3 4222 l
-4350.45 4222.4 4348 4224.78 4348 4233.3 c
-4348 4283.81 l
-4348 4301.12 4337.43 4312.42 4321.07 4312.42 c
-4309.59 4312.42 4301.95 4307.73 4291.48 4294.68 c
-4285.44 4307.36 4278.4 4312.42 4265.72 4312.42 c
-4252.95 4312.42 4243.98 4306.91 4236.4 4294.68 c
-h
-4361.64 4217 m
-f*
-4439.9 4242.16 m
-4431.65 4232.29 4425.61 4228.18 4416.96 4228.18 c
-4409.31 4228.18 4403.27 4231.77 4399.25 4238.94 c
-4395.43 4245.54 4393.82 4252.56 4393.01 4267 c
-4443.73 4267 l
-4442.52 4283.36 4439.5 4292.43 4433.26 4300.12 c
-4426.82 4307.96 4417.36 4312.42 4406.09 4312.42 c
-4380.94 4312.42 4364.03 4292.4 4364.03 4262.88 c
-4364.03 4233.5 4380.53 4214.18 4405.49 4214.18 c
-4421.79 4214.18 4431.65 4220.42 4444.73 4239.34 c
-h
-4392 4274 m
-4392.61 4297.96 4396.23 4305.42 4406.09 4305.42 c
-4411.93 4305.42 4415.55 4302.38 4417.16 4296.49 c
-4418.17 4292.67 4418.57 4287.03 4418.97 4276.77 c
-4418.97 4274 l
-h
-4448.35 4217 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4484 -4215]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-2447.75 1960.55 m
-2447.75 2070.95 2356.55 2162.15 2244.95 2162.15 c
-1749.35 2162.15 l
-1637.75 2162.15 1546.55 2070.95 1546.55 1960.55 c
-1546.55 1822.55 l
-1546.55 1712.15 1637.75 1620.95 1749.35 1620.95 c
-2244.95 1620.95 l
-2356.55 1620.95 2447.75 1712.15 2447.75 1822.55 c
-f*
-1 g
-2378.15 2016.95 m
-2378.15 2123.75 2289.35 2211.35 2180.15 2211.35 c
-1695.35 2211.35 l
-1586.15 2211.35 1497.35 2123.75 1497.35 2016.95 c
-1497.35 1884.95 l
-1497.35 1778.15 1586.15 1690.55 1695.35 1690.55 c
-2180.15 1690.55 l
-2289.35 1690.55 2378.15 1778.15 2378.15 1884.95 c
-f*
-0 g
-2378.15 2016.95 m
-2378.15 2123.75 2289.35 2211.35 2180.15 2211.35 c
-1695.35 2211.35 l
-1586.15 2211.35 1497.35 2123.75 1497.35 2016.95 c
-1497.35 1884.95 l
-1497.35 1778.15 1586.15 1690.55 1695.35 1690.55 c
-2180.15 1690.55 l
-2289.35 1690.55 2378.15 1778.15 2378.15 1884.95 c
-h
-S
-0.201248 i
-1725.33 2057 m
-1611.22 2057 l
-1611.22 2052 l
-1625.11 2051.2 1629 2048.18 1629 2037.72 c
-1629 1940.32 l
-1629 1929.85 1626.17 1927.64 1611.22 1926.03 c
-1611.22 1921 l
-1683.67 1921 l
-1683.67 1926 l
-1665.15 1926.81 1662 1929.23 1662 1940.32 c
-1662 1987.21 l
-1682.22 1986.81 1689.55 1979.36 1692.32 1956.02 c
-1697.35 1956.02 l
-1697.35 2024.04 l
-1692.32 2024.04 l
-1688.76 2001.1 1681.82 1994.05 1662 1994.05 c
-1662 2040.74 l
-1662 2048.19 1664.52 2050 1674.41 2050 c
-1693.13 2050 1704.8 2046.64 1711.04 2039.74 c
-1715.47 2034.71 1717.68 2029.27 1720.5 2016.59 c
-1725.33 2016.59 l
-h
-1730.96 1921 m
-f*
-1774.19 2014 m
-1735.84 2014 l
-1735.84 2008.95 l
-1744.49 2007.74 1747 2005.12 1747 1997.07 c
-1747 1937.9 l
-1747 1929.65 1744.93 1927.44 1735.84 1925.83 c
-1735.84 1921 l
-1789.37 1921 l
-1789.37 1925.83 l
-1777.09 1926.63 1775 1929.25 1775 1941.73 c
-1775 1979.76 l
-1775 1990.23 1780.49 1998.88 1786.95 1998.88 c
-1788.56 1998.88 1790.37 1997.47 1792.59 1994.25 c
-1796.41 1988.82 1799.43 1987.01 1804.66 1987.01 c
-1812.11 1987.01 1817.34 1992.64 1817.34 2000.29 c
-1817.34 2009.55 1810.5 2016.41 1801.04 2016.41 c
-1791.1 2016.41 1783.54 2011.12 1774.19 1997.27 c
-h
-1819.35 1921 m
-f*
-1914.19 1933.88 m
-1912.18 1931.87 l
-1911.57 1931.26 1910.97 1931.06 1909.96 1931.06 c
-1907.15 1931.06 1906 1932.67 1906 1936.09 c
-1906 1988.62 l
-1906 2005.73 1890.6 2016.42 1865.89 2016.42 c
-1843.15 2016.42 1827.85 2006.06 1827.85 1990.83 c
-1827.85 1982.38 1832.69 1977.55 1840.94 1977.55 c
-1848.99 1977.55 1854.62 1982.38 1854.62 1989.22 c
-1854.62 1992.04 1853.61 1994.66 1851 1997.88 c
-1849.19 1999.89 1848.58 2001.1 1848.58 2002.3 c
-1848.58 2006.53 1854.02 2009.42 1861.26 2009.42 c
-1873.14 2009.42 1878.86 2004.08 1878.86 1992.04 c
-1878.86 1977.35 l
-1854.91 1970.1 1845.29 1966.48 1837.51 1961.45 c
-1828.46 1955.41 1824 1948.37 1824 1939.52 c
-1824 1927.24 1833.27 1918.18 1846.17 1918.18 c
-1857.84 1918.18 1867.1 1922.21 1878.17 1932.27 c
-1880.38 1922.01 1884.81 1918.18 1894.67 1918.18 c
-1903.32 1918.18 1909.56 1921.4 1917.21 1929.65 c
-h
-1878 1941.13 m
-1872.55 1934.89 1868.52 1932.47 1863.68 1932.47 c
-1857.64 1932.47 1853 1937.91 1853 1945.96 c
-1853 1957.63 1861.61 1965.88 1878 1970.31 c
-h
-1919.62 1921 m
-f*
-1961.4 2014 m
-1922.7 2014 l
-1922.7 2008.95 l
-1931.55 2007.74 1934 2005.32 1934 1997.07 c
-1934 1937.9 l
-1934 1929.65 1931.74 1927.44 1922.7 1925.83 c
-1922.7 1921 l
-1971 1921 l
-1971 1925.83 l
-1963.95 1926.84 1962 1929.65 1962 1937.3 c
-1962 1991.03 l
-1962 1992.04 1964.87 1995.66 1967.18 1997.88 c
-1971.4 2001.1 1975.02 2003.42 1978.65 2003.42 c
-1986.5 2003.42 1990 1998.59 1990 1986 c
-1990 1937.3 l
-1990 1929.05 1987.68 1926.43 1979.85 1925.83 c
-1979.85 1921 l
-2026.95 1921 l
-2026.95 1925.83 l
-2019.9 1926.64 2018 1929.65 2018 1937.3 c
-2018 1991.03 l
-2018 1992.04 2020.73 1995.46 2022.92 1997.68 c
-2027.35 2001.1 2030.97 2003.42 2034.59 2003.42 c
-2042.24 2003.42 2045 1998.38 2045 1986 c
-2045 1937.3 l
-2045 1928.85 2042.85 1926.43 2035.4 1925.83 c
-2035.4 1921 l
-2083.3 1921 l
-2083.3 1926 l
-2075.45 1926.4 2073 1928.78 2073 1937.3 c
-2073 1987.81 l
-2073 2005.12 2062.43 2016.42 2046.07 2016.42 c
-2034.59 2016.42 2026.95 2011.73 2016.48 1998.68 c
-2010.44 2011.36 2003.4 2016.42 1990.72 2016.42 c
-1977.95 2016.42 1968.98 2010.91 1961.4 1998.68 c
-h
-2086.64 1921 m
-f*
-2165.9 1946.16 m
-2157.65 1936.29 2151.61 1932.18 2142.96 1932.18 c
-2135.31 1932.18 2129.27 1935.77 2125.25 1942.94 c
-2121.43 1949.54 2119.82 1956.56 2119.01 1971 c
-2169.73 1971 l
-2168.52 1987.36 2165.5 1996.43 2159.26 2004.12 c
-2152.82 2011.96 2143.36 2016.42 2132.09 2016.42 c
-2106.94 2016.42 2090.03 1996.4 2090.03 1966.88 c
-2090.03 1937.5 2106.53 1918.18 2131.49 1918.18 c
-2147.79 1918.18 2157.65 1924.42 2170.73 1943.34 c
-h
-2118 1978 m
-2118.61 2001.96 2122.23 2009.42 2132.09 2009.42 c
-2137.93 2009.42 2141.55 2006.38 2143.16 2000.49 c
-2144.17 1996.67 2144.57 1991.03 2144.97 1980.77 c
-2144.97 1978 l
-h
-2174.35 1921 m
-f*
-q[1 0 0 1 0 0]concat
-66 97 true[1 0 0 1 -2209 -1921]@85 imagemask
-z"98D:z
-!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z
-"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$
-s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!
-s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!
-s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7++O=k"98D:!"XS[!!E9$
-^]4n\!!!-$s1eU>huE`Zs8Tk7"7Q9j"98D:!!D]j!!E9$^]4E1!!!-$s1eU7qu?^!s8Tk7!;lfs"98D:!!%HJ!!E9$
-^]4@!!!!-$s1eU75C`_9s8Tk7!$?^k"98D:!!!PF!!E9$^]4?FhuElZs1eU7#Oh]qs8Tk7!!D]j"98D:
-!!!,r!!E9$^]4?8qu?j!s1eU7!;lg!s8Tk7!!%HJ"98D:!!!"K!!E9$^]4?75C`k9s1eU7!$?^ns8Tk7
-!!"+V"98D:!!!!0huj#Z^]4?7#N,^as1eU7!!D]ms8Tk7!!!,r"98D:!!!!"qud!!^]4?7!;ls!s1eU7!!%HMs8Tk7
-!!!"K"98D:z56Lrc^]4?7!$?jns1eU7!!!PIs8Tk7!!!!0j8].pz#NPja^]4?7!!Dims1eU7
-!!!&ss8Tk7!!!!"qu?]3z!<<*!^]4?7!!%NKs1eU7!!!!`s8Tk7z5QCc!z!$D7@^]4?7
-!!!Q0s1eU7!!!!(s8Tk7z#QOh>z!!E9$^]4?7!!!'"s1eU7zs8Tk7z!<<)7z!!%NK^]4?7
-!!!!`s1eU7z+90+Vz!$D6Vz!!!Q0^]4?7!!!!(s1eU7z"96.:z!!E8:!!~>
-Q
-1 i
-0.564706 g
-3804.95 3548.15 m
-3804.95 3658.55 3713.75 3749.75 3602.15 3749.75 c
-3106.55 3749.75 l
-2994.95 3749.75 2903.75 3658.55 2903.75 3548.15 c
-2903.75 3410.15 l
-2903.75 3299.75 2994.95 3208.55 3106.55 3208.55 c
-3602.15 3208.55 l
-3713.75 3208.55 3804.95 3299.75 3804.95 3410.15 c
-f*
-1 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-f*
-8 w
-0 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-h
-S
-0.201248 i
-3082.33 3645 m
-2968.22 3645 l
-2968.22 3640 l
-2982.11 3639.2 2986 3636.18 2986 3625.72 c
-2986 3528.32 l
-2986 3517.85 2983.17 3515.64 2968.22 3514.03 c
-2968.22 3509 l
-3040.67 3509 l
-3040.67 3514 l
-3022.15 3514.81 3019 3517.23 3019 3528.32 c
-3019 3575.21 l
-3039.22 3574.81 3046.55 3567.36 3049.32 3544.02 c
-3054.35 3544.02 l
-3054.35 3612.04 l
-3049.32 3612.04 l
-3045.76 3589.1 3038.82 3582.05 3019 3582.05 c
-3019 3628.74 l
-3019 3636.19 3021.52 3638 3031.41 3638 c
-3050.13 3638 3061.8 3634.64 3068.04 3627.74 c
-3072.47 3622.71 3074.68 3617.27 3077.5 3604.59 c
-3082.33 3604.59 l
-h
-3087.96 3509 m
-f*
-3131.19 3602 m
-3092.84 3602 l
-3092.84 3596.95 l
-3101.49 3595.74 3104 3593.12 3104 3585.07 c
-3104 3525.9 l
-3104 3517.65 3101.93 3515.44 3092.84 3513.83 c
-3092.84 3509 l
-3146.37 3509 l
-3146.37 3513.83 l
-3134.09 3514.63 3132 3517.25 3132 3529.73 c
-3132 3567.76 l
-3132 3578.23 3137.49 3586.88 3143.95 3586.88 c
-3145.56 3586.88 3147.37 3585.47 3149.59 3582.25 c
-3153.41 3576.82 3156.43 3575.01 3161.66 3575.01 c
-3169.11 3575.01 3174.34 3580.64 3174.34 3588.29 c
-3174.34 3597.55 3167.5 3604.41 3158.04 3604.41 c
-3148.1 3604.41 3140.54 3599.12 3131.19 3585.27 c
-h
-3176.35 3509 m
-f*
-3271.19 3521.88 m
-3269.18 3519.87 l
-3268.57 3519.26 3267.97 3519.06 3266.96 3519.06 c
-3264.15 3519.06 3263 3520.67 3263 3524.09 c
-3263 3576.62 l
-3263 3593.73 3247.6 3604.42 3222.89 3604.42 c
-3200.15 3604.42 3184.85 3594.06 3184.85 3578.83 c
-3184.85 3570.38 3189.69 3565.55 3197.94 3565.55 c
-3205.99 3565.55 3211.62 3570.38 3211.62 3577.22 c
-3211.62 3580.04 3210.61 3582.66 3208 3585.88 c
-3206.19 3587.89 3205.58 3589.1 3205.58 3590.3 c
-3205.58 3594.53 3211.02 3597.42 3218.26 3597.42 c
-3230.14 3597.42 3235.86 3592.08 3235.86 3580.04 c
-3235.86 3565.35 l
-3211.91 3558.1 3202.29 3554.48 3194.51 3549.45 c
-3185.46 3543.41 3181 3536.37 3181 3527.52 c
-3181 3515.24 3190.27 3506.18 3203.17 3506.18 c
-3214.84 3506.18 3224.1 3510.21 3235.17 3520.27 c
-3237.38 3510.01 3241.81 3506.18 3251.67 3506.18 c
-3260.32 3506.18 3266.56 3509.4 3274.21 3517.65 c
-h
-3235 3529.13 m
-3229.55 3522.89 3225.52 3520.47 3220.68 3520.47 c
-3214.64 3520.47 3210 3525.91 3210 3533.96 c
-3210 3545.63 3218.61 3553.88 3235 3558.31 c
-h
-3276.62 3509 m
-f*
-3318.4 3602 m
-3279.7 3602 l
-3279.7 3596.95 l
-3288.55 3595.74 3291 3593.32 3291 3585.07 c
-3291 3525.9 l
-3291 3517.65 3288.74 3515.44 3279.7 3513.83 c
-3279.7 3509 l
-3328 3509 l
-3328 3513.83 l
-3320.95 3514.84 3319 3517.65 3319 3525.3 c
-3319 3579.03 l
-3319 3580.04 3321.87 3583.66 3324.18 3585.88 c
-3328.4 3589.1 3332.02 3591.42 3335.65 3591.42 c
-3343.5 3591.42 3347 3586.59 3347 3574 c
-3347 3525.3 l
-3347 3517.05 3344.68 3514.43 3336.85 3513.83 c
-3336.85 3509 l
-3383.95 3509 l
-3383.95 3513.83 l
-3376.9 3514.64 3375 3517.65 3375 3525.3 c
-3375 3579.03 l
-3375 3580.04 3377.73 3583.46 3379.92 3585.68 c
-3384.35 3589.1 3387.97 3591.42 3391.59 3591.42 c
-3399.24 3591.42 3402 3586.38 3402 3574 c
-3402 3525.3 l
-3402 3516.85 3399.85 3514.43 3392.4 3513.83 c
-3392.4 3509 l
-3440.3 3509 l
-3440.3 3514 l
-3432.45 3514.4 3430 3516.78 3430 3525.3 c
-3430 3575.81 l
-3430 3593.12 3419.43 3604.42 3403.07 3604.42 c
-3391.59 3604.42 3383.95 3599.73 3373.48 3586.68 c
-3367.44 3599.36 3360.4 3604.42 3347.72 3604.42 c
-3334.95 3604.42 3325.98 3598.91 3318.4 3586.68 c
-h
-3443.64 3509 m
-f*
-3523.9 3534.16 m
-3515.65 3524.29 3509.61 3520.18 3500.96 3520.18 c
-3493.31 3520.18 3487.27 3523.77 3483.25 3530.94 c
-3479.43 3537.54 3477.82 3544.56 3477.01 3559 c
-3527.73 3559 l
-3526.52 3575.36 3523.5 3584.43 3517.26 3592.12 c
-3510.82 3599.96 3501.36 3604.42 3490.09 3604.42 c
-3464.94 3604.42 3448.03 3584.4 3448.03 3554.88 c
-3448.03 3525.5 3464.53 3506.18 3489.49 3506.18 c
-3505.79 3506.18 3515.65 3512.42 3528.73 3531.34 c
-h
-3476 3566 m
-3476.61 3589.96 3480.23 3597.42 3490.09 3597.42 c
-3495.93 3597.42 3499.55 3594.38 3501.16 3588.49 c
-3502.17 3584.67 3502.57 3579.03 3502.97 3568.77 c
-3502.97 3566 l
-h
-3532.35 3509 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -3509]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-0.564706 g
-3962.15 2110.55 m
-3962.15 2220.95 3870.95 2312.15 3759.35 2312.15 c
-3263.75 2312.15 l
-3152.15 2312.15 3060.95 2220.95 3060.95 2110.55 c
-3060.95 1972.55 l
-3060.95 1862.15 3152.15 1770.95 3263.75 1770.95 c
-3759.35 1770.95 l
-3870.95 1770.95 3962.15 1862.15 3962.15 1972.55 c
-f*
-1 g
-3897.35 2168.15 m
-3897.35 2277.35 3808.55 2366.15 3698.15 2366.15 c
-3207.35 2366.15 l
-3095.75 2366.15 3006.95 2277.35 3006.95 2168.15 c
-3006.95 2033.75 l
-3006.95 1924.55 3095.75 1835.75 3207.35 1835.75 c
-3696.95 1835.75 l
-3808.55 1835.75 3897.35 1924.55 3897.35 2033.75 c
-f*
-0 g
-3897.35 2168.15 m
-3897.35 2277.35 3808.55 2366.15 3698.15 2366.15 c
-3207.35 2366.15 l
-3095.75 2366.15 3006.95 2277.35 3006.95 2168.15 c
-3006.95 2033.75 l
-3006.95 1924.55 3095.75 1835.75 3207.35 1835.75 c
-3696.95 1835.75 l
-3808.55 1835.75 3897.35 1924.55 3897.35 2033.75 c
-h
-S
-0.201248 i
-3239.33 2207 m
-3125.22 2207 l
-3125.22 2202 l
-3139.11 2201.2 3143 2198.18 3143 2187.72 c
-3143 2090.32 l
-3143 2079.85 3140.17 2077.64 3125.22 2076.03 c
-3125.22 2071 l
-3197.67 2071 l
-3197.67 2076 l
-3179.15 2076.81 3176 2079.23 3176 2090.32 c
-3176 2137.21 l
-3196.22 2136.81 3203.55 2129.36 3206.32 2106.02 c
-3211.35 2106.02 l
-3211.35 2174.04 l
-3206.32 2174.04 l
-3202.76 2151.1 3195.82 2144.05 3176 2144.05 c
-3176 2190.74 l
-3176 2198.19 3178.52 2200 3188.41 2200 c
-3207.13 2200 3218.8 2196.64 3225.04 2189.74 c
-3229.47 2184.71 3231.68 2179.27 3234.5 2166.59 c
-3239.33 2166.59 l
-h
-3244.96 2071 m
-f*
-3289.19 2164 m
-3250.84 2164 l
-3250.84 2158.95 l
-3259.49 2157.74 3262 2155.12 3262 2147.07 c
-3262 2087.9 l
-3262 2079.65 3259.93 2077.44 3250.84 2075.83 c
-3250.84 2071 l
-3304.37 2071 l
-3304.37 2075.83 l
-3292.09 2076.63 3290 2079.25 3290 2091.73 c
-3290 2129.76 l
-3290 2140.23 3295.49 2148.88 3301.95 2148.88 c
-3303.56 2148.88 3305.37 2147.47 3307.59 2144.25 c
-3311.41 2138.82 3314.43 2137.01 3319.66 2137.01 c
-3327.11 2137.01 3332.34 2142.64 3332.34 2150.29 c
-3332.34 2159.55 3325.5 2166.41 3316.04 2166.41 c
-3306.1 2166.41 3298.54 2161.12 3289.19 2147.27 c
-h
-3334.35 2071 m
-f*
-3428.19 2083.88 m
-3426.18 2081.87 l
-3425.57 2081.26 3424.97 2081.06 3423.96 2081.06 c
-3421.15 2081.06 3420 2082.67 3420 2086.09 c
-3420 2138.62 l
-3420 2155.73 3404.6 2166.42 3379.89 2166.42 c
-3357.15 2166.42 3341.85 2156.06 3341.85 2140.83 c
-3341.85 2132.38 3346.69 2127.55 3354.94 2127.55 c
-3362.99 2127.55 3368.62 2132.38 3368.62 2139.22 c
-3368.62 2142.04 3367.61 2144.66 3365 2147.88 c
-3363.19 2149.89 3362.58 2151.1 3362.58 2152.3 c
-3362.58 2156.53 3368.02 2159.42 3375.26 2159.42 c
-3387.14 2159.42 3392.86 2154.08 3392.86 2142.04 c
-3392.86 2127.35 l
-3368.91 2120.1 3359.29 2116.48 3351.51 2111.45 c
-3342.46 2105.41 3338 2098.37 3338 2089.52 c
-3338 2077.24 3347.27 2068.18 3360.17 2068.18 c
-3371.84 2068.18 3381.1 2072.21 3392.17 2082.27 c
-3394.38 2072.01 3398.81 2068.18 3408.67 2068.18 c
-3417.32 2068.18 3423.56 2071.4 3431.21 2079.65 c
-h
-3392 2091.13 m
-3386.55 2084.89 3382.52 2082.47 3377.68 2082.47 c
-3371.64 2082.47 3367 2087.91 3367 2095.96 c
-3367 2107.63 3375.61 2115.88 3392 2120.31 c
-h
-3433.62 2071 m
-f*
-3476.4 2164 m
-3437.7 2164 l
-3437.7 2158.95 l
-3446.55 2157.74 3449 2155.32 3449 2147.07 c
-3449 2087.9 l
-3449 2079.65 3446.74 2077.44 3437.7 2075.83 c
-3437.7 2071 l
-3486 2071 l
-3486 2075.83 l
-3478.95 2076.84 3477 2079.65 3477 2087.3 c
-3477 2141.03 l
-3477 2142.04 3479.87 2145.66 3482.18 2147.88 c
-3486.4 2151.1 3490.02 2153.42 3493.65 2153.42 c
-3501.5 2153.42 3505 2148.59 3505 2136 c
-3505 2087.3 l
-3505 2079.05 3502.68 2076.43 3494.85 2075.83 c
-3494.85 2071 l
-3541.95 2071 l
-3541.95 2075.83 l
-3534.9 2076.64 3533 2079.65 3533 2087.3 c
-3533 2141.03 l
-3533 2142.04 3535.73 2145.46 3537.92 2147.68 c
-3542.35 2151.1 3545.97 2153.42 3549.59 2153.42 c
-3557.24 2153.42 3560 2148.38 3560 2136 c
-3560 2087.3 l
-3560 2078.85 3557.85 2076.43 3550.4 2075.83 c
-3550.4 2071 l
-3598.3 2071 l
-3598.3 2076 l
-3590.45 2076.4 3588 2078.78 3588 2087.3 c
-3588 2137.81 l
-3588 2155.12 3577.43 2166.42 3561.07 2166.42 c
-3549.59 2166.42 3541.95 2161.73 3531.48 2148.68 c
-3525.44 2161.36 3518.4 2166.42 3505.72 2166.42 c
-3492.95 2166.42 3483.98 2160.91 3476.4 2148.68 c
-h
-3601.64 2071 m
-f*
-3680.9 2096.16 m
-3672.65 2086.29 3666.61 2082.18 3657.96 2082.18 c
-3650.31 2082.18 3644.27 2085.77 3640.25 2092.94 c
-3636.43 2099.54 3634.82 2106.56 3634.01 2121 c
-3684.73 2121 l
-3683.52 2137.36 3680.5 2146.43 3674.26 2154.12 c
-3667.82 2161.96 3658.36 2166.42 3647.09 2166.42 c
-3621.94 2166.42 3605.03 2146.4 3605.03 2116.88 c
-3605.03 2087.5 3621.53 2068.18 3646.49 2068.18 c
-3662.79 2068.18 3672.65 2074.42 3685.73 2093.34 c
-h
-3633 2128 m
-3633.61 2151.96 3637.23 2159.42 3647.09 2159.42 c
-3652.93 2159.42 3656.55 2156.38 3658.16 2150.49 c
-3659.17 2146.67 3659.57 2141.03 3659.97 2130.77 c
-3659.97 2128 l
-h
-3689.35 2071 m
-f*
-q[1 0 0 1 0 0]concat
-66 96 true[1 0 0 1 -3723 -2070]@85 imagemask
-!!*'!z!!!9(
-s7cQo!!!!`s8W*!zs8W-!^]4?7!WW3"s7cQo!!E9$s8W&u!!!9(s8W-!!!!!0s8W-!s1eU7&-)\0
-s8V!W!$D7 at s56-2!!", at s8N'(p](:9s8Vus!W2ot+92B1!!)uu!$D7 at huEb,!!", at s*t(L5C`_Es8N'!
-!'e7!&-)P-!!"+V!!iQ!!!!!@huElZhuE`W+5d,"s*t(L!"\Q!!&srY!!!Q!z!!!!0p](9oz&,6,)z
-!"\i)z!!!Q-z!!!!0qu?]sz&,ZD-z!$D+=z!!",?z!!!!@rVuouz
-5Q1W_z!'gG_z!!%NJz!!!$!rVuou!!!!"s8Duuz"98?#z!!iQ'z!!!Q0
-rVuou!!!!@s8DuuzJ,fEHz!<<)sz!!E9$qu?]s!!", at s82is!!!$!s8Vio!!!!(s8W,ozJ,fQK
-p](9o5QCc`s6p!hs8W-!s8VQg!WW3"s8W,W!!*'!s8W-!huEcWs8W-!s1eU7s8W-!s8RTL!.Y%Ks8W+L
-!!%NKs8W-!!!!"Ks8W-!rVuouJ,fQKs82is!'gM`s8Vio!!#7`s8W,g!!!!`s8W-!^]4?7+92B at s*t(L
-!$D7 at s8Duu!!", at s8Vio!!!!@s8W,Wz&-)\0z!"],0n,NFg!!!Q0qu?]s!!!!0^]4?7z#J^<>z
-!!g:>z!!!8^z!!!!$huE`Wz"5j.Zz!!D-Zz!!!,jz!!!!"n,NFgz
-!Up'hz!!2Qhz!!!#ozzs8W-!s6p!g!<<*!s8VQg!!*'!s8W,o!!!"Ks8W-!p](9o
-J,fQKs7cQo!.Y%Ks8Vus!!#7`s8W,s!!!!`s8W-!qu?]s5QCc`s8Duu!'gM`s8W&u!!", at s8W,u!!!!@
-s8W-!rr<$!+92B at s8N'!!$D7 at s8W*!!!!Q0s8W-!J,fQ[s8W-!s*t(L&-)\0s8RTL!!iQ(s8W,7~>
-Q
-1 i
-1751.75 4750.55 m
-1751.75 4758.95 1751.75 4758.95 1751.75 4750.55 c
-1751.75 4602.95 1791.35 4461.35 1863.35 4360.55 c
-S
-1804.55 4366.55 m
-1853.75 4382.15 l
-1878.95 4427.75 l
-1940.15 4280.15 l
-f*
-2244.95 3784.55 m
-2334.95 3666.95 2519.75 3582.95 2740.55 3561.35 c
-S
-2699.75 3518.15 m
-2721.35 3564.95 l
-2705.75 3612.95 l
-2854.55 3556.55 l
-f*
-2855.75 3413.75 m
-2625.35 3369.35 2448.95 3267.35 2384.15 3140.15 c
-S
-2360.15 3190.55 m
-2399.75 3158.15 l
-2450.15 3160.55 l
-2357.75 3030.95 l
-f*
-2178.95 2306.15 m
-2232.95 2368.55 2274.95 2441.75 2302.55 2520.95 c
-S
-2168.15 2369.75 m
-2189.75 2322.95 l
-2237.75 2303.75 l
-2097.35 2226.95 l
-f*
-2831.75 5164.55 m
-2729.75 5264.15 2584.55 5321.75 2430.95 5321.75 c
-2326.55 5321.75 2224.55 5295.35 2136.95 5244.95 c
-S
-2766.95 5158.55 m
-2814.95 5174.15 l
-2838.95 5219.75 l
-2902.55 5073.35 l
-f*
-3186.95 4588.55 m
-3275.75 4414.55 3440.15 4289.75 3635.75 4250.15 c
-S
-3591.35 4210.55 m
-3616.55 4256.15 l
-3604.55 4306.55 l
-3748.55 4235.75 l
-f*
-3302.15 3256.55 m
-3302.15 3262.55 3302.15 3262.55 3302.15 3255.35 c
-3302.15 3064.55 3456.95 2896.55 3682.55 2846.15 c
-S
-3638.15 2810.15 m
-3664.55 2853.35 l
-3654.95 2902.55 l
-3797.75 2830.55 l
-f*
-4030.55 2122.55 m
-4202.15 2176.55 4323.35 2344.55 4332.95 2540.15 c
-S
-4058.15 2181.35 m
-4048.55 2130.95 l
-4076.15 2088.95 l
-3917.75 2105.75 l
-f*
-0.564706 g
-3638.15 4764.95 m
-3503.75 4800.95 l
-3599.75 4857.35 l
-3446.15 4865.75 l
-3488.15 4936.55 l
-3340.55 4916.15 l
-3323.75 4986.95 l
-3203.75 4942.55 l
-3128.15 5006.15 l
-3052.55 4942.55 l
-2932.55 4986.95 l
-2914.55 4916.15 l
-2765.75 4936.55 l
-2810.15 4865.75 l
-2656.55 4857.35 l
-2752.55 4800.95 l
-2616.95 4764.95 l
-2752.55 4730.15 l
-2656.55 4673.75 l
-2810.15 4664.15 l
-2765.75 4594.55 l
-2914.55 4614.95 l
-2932.55 4542.95 l
-3052.55 4588.55 l
-3128.15 4524.95 l
-3203.75 4588.55 l
-3323.75 4542.95 l
-3340.55 4614.95 l
-3488.15 4594.55 l
-3446.15 4664.15 l
-3599.75 4673.75 l
-3503.75 4730.15 l
-f*
-1 g
-3578.15 4824.95 m
-3443.75 4860.95 l
-3539.75 4917.35 l
-3386.15 4925.75 l
-3428.15 4996.55 l
-3280.55 4976.15 l
-3263.75 5046.95 l
-3143.75 5002.55 l
-3068.15 5066.15 l
-2992.55 5002.55 l
-2872.55 5046.95 l
-2854.55 4976.15 l
-2705.75 4996.55 l
-2750.15 4925.75 l
-2596.55 4917.35 l
-2692.55 4860.95 l
-2556.95 4824.95 l
-2692.55 4790.15 l
-2596.55 4733.75 l
-2750.15 4724.15 l
-2705.75 4654.55 l
-2854.55 4674.95 l
-2872.55 4602.95 l
-2992.55 4648.55 l
-3068.15 4584.95 l
-3143.75 4648.55 l
-3263.75 4602.95 l
-3280.55 4674.95 l
-3428.15 4654.55 l
-3386.15 4724.15 l
-3539.75 4733.75 l
-3443.75 4790.15 l
-f*
-0 g
-3578.15 4824.95 m
-3443.75 4860.95 l
-3539.75 4917.35 l
-3386.15 4925.75 l
-3428.15 4996.55 l
-3280.55 4976.15 l
-3263.75 5046.95 l
-3143.75 5002.55 l
-3068.15 5066.15 l
-2992.55 5002.55 l
-2872.55 5046.95 l
-2854.55 4976.15 l
-2705.75 4996.55 l
-2750.15 4925.75 l
-2596.55 4917.35 l
-2692.55 4860.95 l
-2556.95 4824.95 l
-2692.55 4790.15 l
-2596.55 4733.75 l
-2750.15 4724.15 l
-2705.75 4654.55 l
-2854.55 4674.95 l
-2872.55 4602.95 l
-2992.55 4648.55 l
-3068.15 4584.95 l
-3143.75 4648.55 l
-3263.75 4602.95 l
-3280.55 4674.95 l
-3428.15 4654.55 l
-3386.15 4724.15 l
-3539.75 4733.75 l
-3443.75 4790.15 l
-3578.15 4824.95 l
-3539.75 4824.95 l
-3417.35 4793.75 l
-3506.15 4740.95 l
-3368.15 4733.75 l
-3408.95 4667.75 l
-3273.35 4685.75 l
-3256.55 4617.35 l
-3141.35 4659.35 l
-3068.15 4596.95 l
-2994.95 4659.35 l
-2879.75 4617.35 l
-2861.75 4685.75 l
-2726.15 4667.75 l
-2766.95 4733.75 l
-2630.15 4740.95 l
-2718.95 4793.75 l
-2596.55 4824.95 l
-2717.75 4857.35 l
-2630.15 4910.15 l
-2766.95 4917.35 l
-2726.15 4983.35 l
-2861.75 4964.15 l
-2879.75 5033.75 l
-2994.95 4990.55 l
-3068.15 5052.95 l
-3141.35 4990.55 l
-3256.55 5033.75 l
-3273.35 4964.15 l
-3408.95 4983.35 l
-3368.15 4917.35 l
-3506.15 4910.15 l
-3417.35 4857.35 l
-3539.75 4824.95 l
-3578.15 4824.95 l
-f*
-0.2 i
-2890.08 4876.76 m
-2870.08 4802.52 l
-2867.52 4793.88 2864.48 4791.64 2854.08 4791 c
-2854.08 4787 l
-2904 4787 l
-2904 4791 l
-2894.72 4791.48 2892.48 4792.76 2892.48 4797.88 c
-2892.48 4799.64 2892.8 4801.4 2893.76 4805.08 c
-2893.92 4805.88 l
-2894.08 4806.68 l
-2913.76 4878.52 l
-2916.16 4886.84 2918.56 4889.08 2926.72 4890.04 c
-2926.72 4894 l
-2892.8 4894 l
-2843.2 4817.24 l
-2834.56 4894 l
-2799.2 4894 l
-2799.2 4890 l
-2809.28 4889.52 2810.72 4888.89 2810.72 4884.44 c
-2810.72 4882.2 2810.08 4879.32 2808.96 4875.16 c
-2791.52 4815.48 l
-2785.12 4794.68 2784 4792.92 2775.36 4791 c
-2775.36 4787 l
-2808.48 4787 l
-2808.48 4791 l
-2798.24 4792.28 2795.68 4794.2 2795.68 4800.76 c
-2795.68 4803.48 2796.48 4807.48 2798.72 4815.48 c
-2814.88 4874.52 l
-2825.6 4785.08 l
-2830.08 4785.08 l
-h
-2922.24 4787 m
-f*
-2991.44 4807.32 m
-2984.88 4798.52 2982.48 4795.76 2979.92 4795.76 c
-2978.64 4795.76 2978 4796.86 2978 4798.52 c
-2978 4802.52 2979.44 4809.08 2983.44 4822.2 c
-2994.8 4859.96 l
-2977.04 4858.84 l
-2974.16 4849.4 l
-2972.72 4857.56 2969.2 4861.08 2962.32 4861.08 c
-2942.64 4861.08 2919 4830.27 2919 4805.24 c
-2919 4793.08 2925.74 4784.92 2935.92 4784.92 c
-2945.68 4784.92 2953.04 4790.68 2962.16 4806.04 c
-2960.24 4799.48 2960 4797.56 2960 4795.32 c
-2960 4789.4 2964.76 4784.76 2970.64 4784.76 c
-2978.16 4784.76 2985.52 4791 2994.8 4804.92 c
-h
-2964.56 4854.2 m
-2968.08 4853.88 2970.56 4851 2970.56 4846.68 c
-2970.56 4837.08 2965.24 4819.32 2958.96 4808.28 c
-2954.64 4800.44 2949.84 4795.92 2945.52 4795.92 c
-2941.36 4795.92 2938 4799.75 2938 4804.92 c
-2938 4813.24 2943.42 4829.24 2950.16 4841.08 c
-2954.96 4849.56 2960.24 4854.52 2964.56 4854.2 c
-h
-3002 4787 m
-f*
-3036.56 4860.92 m
-3020.24 4858.36 3014 4857.4 3005.68 4856.44 c
-3005.68 4852 l
-3012.88 4851.69 3014.32 4851.07 3014.32 4848.12 c
-3014.32 4846.52 3013.04 4840.76 3010.8 4832.44 c
-2994.8 4770.36 l
-2991.76 4759.8 2990.48 4758.84 2982.8 4759 c
-2982.8 4754 l
-3022.64 4754 l
-3022.64 4759 l
-3014.64 4759.14 3012.24 4760.16 3012.24 4763.64 c
-3012.24 4765.88 3013.36 4770.68 3016.4 4781.88 c
-3017.52 4785.72 3017.52 4786.04 3018.16 4788.44 c
-3023.76 4785.56 3025.68 4784.92 3029.04 4784.92 c
-3050.8 4784.92 3073.36 4813.88 3073.36 4841.56 c
-3073.36 4853.4 3066.64 4861.08 3056.08 4861.08 c
-3046.96 4861.08 3039.92 4855.92 3030.48 4842.52 c
-h
-3047.12 4849.56 m
-3051.28 4849.24 3053.68 4845.56 3053.36 4840.44 c
-3052.72 4829.88 3047.6 4814.04 3041.84 4803.64 c
-3036.88 4795 3031.76 4789.92 3026.32 4789.92 c
-3022.8 4789.92 3020.08 4792.75 3020.08 4796.28 c
-3020.08 4799 3021.84 4805.56 3026.16 4820.12 c
-3029.68 4831.8 3031.12 4835.8 3033.52 4839.48 c
-3037.52 4845.72 3042.96 4849.88 3047.12 4849.56 c
-h
-3082 4787 m
-f*
-3117.56 4860.92 m
-3101.24 4858.36 3095 4857.4 3086.68 4856.44 c
-3086.68 4852 l
-3093.88 4851.69 3095.32 4851.07 3095.32 4848.12 c
-3095.32 4846.52 3094.04 4840.76 3091.8 4832.44 c
-3075.8 4770.36 l
-3072.76 4759.8 3071.48 4758.84 3063.8 4759 c
-3063.8 4754 l
-3103.64 4754 l
-3103.64 4759 l
-3095.64 4759.14 3093.24 4760.16 3093.24 4763.64 c
-3093.24 4765.88 3094.36 4770.68 3097.4 4781.88 c
-3098.52 4785.72 3098.52 4786.04 3099.16 4788.44 c
-3104.76 4785.56 3106.68 4784.92 3110.04 4784.92 c
-3131.8 4784.92 3154.36 4813.88 3154.36 4841.56 c
-3154.36 4853.4 3147.64 4861.08 3137.08 4861.08 c
-3127.96 4861.08 3120.92 4855.92 3111.48 4842.52 c
-h
-3128.12 4849.56 m
-3132.28 4849.24 3134.68 4845.56 3134.36 4840.44 c
-3133.72 4829.88 3128.6 4814.04 3122.84 4803.64 c
-3117.88 4795 3112.76 4789.92 3107.32 4789.92 c
-3103.8 4789.92 3101.08 4792.75 3101.08 4796.28 c
-3101.08 4799 3102.84 4805.56 3107.16 4820.12 c
-3110.68 4831.8 3112.12 4835.8 3114.52 4839.48 c
-3118.52 4845.72 3123.96 4849.88 3128.12 4849.56 c
-h
-3163 4787 m
-f*
-3196.56 4809.56 m
-3194.32 4806.36 l
-3190.16 4800.12 3186.48 4796.56 3184.08 4796.56 c
-3182.8 4796.56 3182 4797.77 3182 4799.16 c
-3182 4800.6 3182.62 4804.76 3183.12 4807.48 c
-3197.68 4860.92 l
-3189.22 4859 3178.26 4857.4 3166.04 4856.44 c
-3166.04 4852 l
-3167.44 4852 l
-3172.24 4852 3175.48 4850.44 3175.48 4847.48 c
-3175.48 4846.2 3174.71 4843.8 3173.68 4841.08 c
-3164.4 4806.68 l
-3163.12 4802.04 3163 4797.88 3163 4795.64 c
-3163 4789.56 3167.2 4785.56 3173.36 4785.56 c
-3182.96 4785.56 3188.88 4790.36 3200.08 4807.32 c
-h
-3192.88 4896.4 m
-3187.44 4896.4 3183 4891.46 3183 4886.04 c
-3183 4879.8 3187.26 4875.4 3193.04 4875.4 c
-3199.12 4875.4 3204 4879.86 3204 4885.56 c
-3204 4891.48 3199 4896.4 3192.88 4896.4 c
-h
-3206.48 4787 m
-f*
-3281.36 4808.6 m
-3274.96 4798.68 3272.88 4796.56 3270.16 4796.56 c
-3268.88 4796.56 3268 4797.63 3268 4799.16 c
-3268 4800.76 3268.94 4804.12 3271.92 4813.08 c
-3277.68 4830.52 l
-3280.24 4838.04 3282 4845.08 3282 4848.92 c
-3282 4856.76 3277.78 4861.08 3270.16 4861.08 c
-3264.24 4861.08 3258.48 4858.62 3254.16 4854.36 c
-3248.24 4848.76 3245.2 4844.92 3234.48 4829.08 c
-3244.72 4860.76 l
-3234.48 4858.52 3221.68 4856.92 3212.72 4856.6 c
-3212.72 4851.8 l
-3219.44 4851.65 3221.36 4850.92 3221.36 4848.12 c
-3221.36 4846.2 3219.12 4837.72 3214 4819.64 c
-3210.32 4806.68 3209.2 4802.52 3205.04 4787 c
-3224.4 4787 l
-3231.92 4814.68 3237.68 4828.6 3247.6 4841.56 c
-3250.8 4845.88 3255.76 4849.08 3258.64 4849.08 c
-3260.72 4849.08 3263 4847.63 3263 4846.04 c
-3263 4845.56 3262.54 4844.28 3261.84 4842.68 c
-3253.04 4816.12 l
-3250.48 4808.44 3249 4799.32 3249 4795.16 c
-3249 4789.08 3252.84 4785.56 3259.44 4785.56 c
-3269.04 4785.56 3275.6 4791 3284.88 4806.52 c
-h
-3294.96 4787 m
-f*
-3372.48 4856 m
-3354.72 4856 l
-3349.28 4859.58 3344.48 4861.08 3337.12 4861.08 c
-3317.44 4861.08 3301 4848.05 3301 4831.8 c
-3301 4823.64 3305.35 4817.88 3314.4 4814.2 c
-3301.28 4806.84 3299 4804.6 3299 4798.68 c
-3299 4793.56 3301.89 4790.52 3308.96 4788.12 c
-3299.04 4785.72 3295.84 4784.44 3292 4781.4 c
-3289.44 4779.16 3288 4775.32 3288 4771.48 c
-3288 4761.08 3299.56 4755 3317.76 4755 c
-3340.32 4755 3356 4764.72 3356 4778.52 c
-3356 4788.28 3349.6 4793.56 3332.16 4798.52 c
-3323.68 4800.92 l
-3318.56 4802.36 3315 4804.6 3315 4807 c
-3315 4809.56 3317.68 4812.28 3320 4812.28 c
-3320.8 4812.28 3321.92 4812.24 3323.2 4812.12 c
-3324.96 4811.64 3326.24 4811 3328.16 4811 c
-3335.2 4811 3342.4 4813.09 3348.48 4816.92 c
-3357.76 4822.2 3363 4830.36 3363 4839.96 c
-3363 4842.64 3362.59 4844.32 3361.76 4847 c
-3372.48 4847 l
-h
-3314.4 4786.04 m
-3316.32 4785.88 3328.48 4781.72 3332 4780.12 c
-3336.48 4777.88 3339 4775.16 3339 4771 c
-3339 4763.96 3331.8 4760 3319.36 4760 c
-3308.96 4760 3302 4765.1 3302 4772.44 c
-3302 4775.48 3303.32 4778.2 3306.24 4781.24 c
-3308.32 4783.32 3313.12 4786.2 3314.4 4786.04 c
-h
-3336.8 4856.08 m
-3340.96 4856.08 3344 4852.19 3344 4846.52 c
-3344 4841.08 3342.08 4833.4 3339.36 4827.48 c
-3336 4820.12 3331.84 4816 3326.88 4816 c
-3322.56 4816 3320 4819.52 3320 4825.88 c
-3320 4832.28 3322.79 4842.04 3326.24 4848.12 c
-3329.28 4853.4 3332.64 4856.08 3336.8 4856.08 c
-h
-3376 4787 m
-f*
-1 i
-0.564706 g
-2708.15 3969.35 m
-2573.75 4006.55 l
-2669.75 4061.75 l
-2516.15 4071.35 l
-2558.15 4140.95 l
-2410.55 4120.55 l
-2393.75 4192.55 l
-2273.75 4146.95 l
-2198.15 4210.55 l
-2122.55 4146.95 l
-2002.55 4192.55 l
-1984.55 4120.55 l
-1835.75 4140.95 l
-1880.15 4071.35 l
-1726.55 4061.75 l
-1822.55 4006.55 l
-1686.95 3969.35 l
-1822.55 3934.55 l
-1726.55 3878.15 l
-1880.15 3869.75 l
-1835.75 3800.15 l
-1984.55 3819.35 l
-2002.55 3748.55 l
-2122.55 3792.95 l
-2198.15 3729.35 l
-2273.75 3792.95 l
-2393.75 3748.55 l
-2410.55 3819.35 l
-2558.15 3800.15 l
-2516.15 3869.75 l
-2669.75 3878.15 l
-2573.75 3934.55 l
-f*
-1 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-f*
-0 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-2648.15 4029.35 l
-2609.75 4029.35 l
-2487.35 3998.15 l
-2576.15 3946.55 l
-2438.15 3938.15 l
-2478.95 3872.15 l
-2343.35 3891.35 l
-2326.55 3821.75 l
-2211.35 3864.95 l
-2138.15 3802.55 l
-2064.95 3864.95 l
-1949.75 3821.75 l
-1931.75 3891.35 l
-1796.15 3872.15 l
-1836.95 3938.15 l
-1700.15 3946.55 l
-1788.95 3998.15 l
-1666.55 4029.35 l
-1787.75 4061.75 l
-1700.15 4114.55 l
-1836.95 4121.75 l
-1796.15 4188.95 l
-1931.75 4169.75 l
-1949.75 4238.15 l
-2064.95 4196.15 l
-2138.15 4258.55 l
-2211.35 4196.15 l
-2326.55 4238.15 l
-2343.35 4169.75 l
-2478.95 4188.95 l
-2438.15 4121.75 l
-2576.15 4114.55 l
-2487.35 4061.75 l
-2609.75 4029.35 l
-2648.15 4029.35 l
-f*
-0.2 i
-1960.08 4080.76 m
-1940.08 4006.52 l
-1937.52 3997.88 1934.48 3995.64 1924.08 3995 c
-1924.08 3991 l
-1974 3991 l
-1974 3995 l
-1964.72 3995.48 1962.48 3996.76 1962.48 4001.88 c
-1962.48 4003.64 1962.8 4005.4 1963.76 4009.08 c
-1963.92 4009.88 l
-1964.08 4010.68 l
-1983.76 4082.52 l
-1986.16 4090.84 1988.56 4093.08 1996.72 4094.04 c
-1996.72 4098 l
-1962.8 4098 l
-1913.2 4021.24 l
-1904.56 4098 l
-1869.2 4098 l
-1869.2 4094 l
-1879.28 4093.52 1880.72 4092.89 1880.72 4088.44 c
-1880.72 4086.2 1880.08 4083.32 1878.96 4079.16 c
-1861.52 4019.48 l
-1855.12 3998.68 1854 3996.92 1845.36 3995 c
-1845.36 3991 l
-1878.48 3991 l
-1878.48 3995 l
-1868.24 3996.28 1865.68 3998.2 1865.68 4004.76 c
-1865.68 4007.48 1866.48 4011.48 1868.72 4019.48 c
-1884.88 4078.52 l
-1895.6 3989.08 l
-1900.08 3989.08 l
-h
-1992.24 3991 m
-f*
-2061.44 4011.32 m
-2054.88 4002.52 2052.48 3999.76 2049.92 3999.76 c
-2048.64 3999.76 2048 4000.86 2048 4002.52 c
-2048 4006.52 2049.44 4013.08 2053.44 4026.2 c
-2064.8 4063.96 l
-2047.04 4062.84 l
-2044.16 4053.4 l
-2042.72 4061.56 2039.2 4065.08 2032.32 4065.08 c
-2012.64 4065.08 1989 4034.27 1989 4009.24 c
-1989 3997.08 1995.74 3988.92 2005.92 3988.92 c
-2015.68 3988.92 2023.04 3994.68 2032.16 4010.04 c
-2030.24 4003.48 2030 4001.56 2030 3999.32 c
-2030 3993.4 2034.76 3988.76 2040.64 3988.76 c
-2048.16 3988.76 2055.52 3995 2064.8 4008.92 c
-h
-2034.56 4058.2 m
-2038.08 4057.88 2040.56 4055 2040.56 4050.68 c
-2040.56 4041.08 2035.24 4023.32 2028.96 4012.28 c
-2024.64 4004.44 2019.84 3999.92 2015.52 3999.92 c
-2011.36 3999.92 2008 4003.75 2008 4008.92 c
-2008 4017.24 2013.42 4033.24 2020.16 4045.08 c
-2024.96 4053.56 2030.24 4058.52 2034.56 4058.2 c
-h
-2072 3991 m
-f*
-2106.56 4064.92 m
-2090.24 4062.36 2084 4061.4 2075.68 4060.44 c
-2075.68 4056 l
-2082.88 4055.69 2084.32 4055.07 2084.32 4052.12 c
-2084.32 4050.52 2083.04 4044.76 2080.8 4036.44 c
-2064.8 3974.36 l
-2061.76 3963.8 2060.48 3962.84 2052.8 3963 c
-2052.8 3958 l
-2092.64 3958 l
-2092.64 3963 l
-2084.64 3963.14 2082.24 3964.16 2082.24 3967.64 c
-2082.24 3969.88 2083.36 3974.68 2086.4 3985.88 c
-2087.52 3989.72 2087.52 3990.04 2088.16 3992.44 c
-2093.76 3989.56 2095.68 3988.92 2099.04 3988.92 c
-2120.8 3988.92 2143.36 4017.88 2143.36 4045.56 c
-2143.36 4057.4 2136.64 4065.08 2126.08 4065.08 c
-2116.96 4065.08 2109.92 4059.92 2100.48 4046.52 c
-h
-2117.12 4053.56 m
-2121.28 4053.24 2123.68 4049.56 2123.36 4044.44 c
-2122.72 4033.88 2117.6 4018.04 2111.84 4007.64 c
-2106.88 3999 2101.76 3993.92 2096.32 3993.92 c
-2092.8 3993.92 2090.08 3996.75 2090.08 4000.28 c
-2090.08 4003 2091.84 4009.56 2096.16 4024.12 c
-2099.68 4035.8 2101.12 4039.8 2103.52 4043.48 c
-2107.52 4049.72 2112.96 4053.88 2117.12 4053.56 c
-h
-2152 3991 m
-f*
-2187.56 4064.92 m
-2171.24 4062.36 2165 4061.4 2156.68 4060.44 c
-2156.68 4056 l
-2163.88 4055.69 2165.32 4055.07 2165.32 4052.12 c
-2165.32 4050.52 2164.04 4044.76 2161.8 4036.44 c
-2145.8 3974.36 l
-2142.76 3963.8 2141.48 3962.84 2133.8 3963 c
-2133.8 3958 l
-2173.64 3958 l
-2173.64 3963 l
-2165.64 3963.14 2163.24 3964.16 2163.24 3967.64 c
-2163.24 3969.88 2164.36 3974.68 2167.4 3985.88 c
-2168.52 3989.72 2168.52 3990.04 2169.16 3992.44 c
-2174.76 3989.56 2176.68 3988.92 2180.04 3988.92 c
-2201.8 3988.92 2224.36 4017.88 2224.36 4045.56 c
-2224.36 4057.4 2217.64 4065.08 2207.08 4065.08 c
-2197.96 4065.08 2190.92 4059.92 2181.48 4046.52 c
-h
-2198.12 4053.56 m
-2202.28 4053.24 2204.68 4049.56 2204.36 4044.44 c
-2203.72 4033.88 2198.6 4018.04 2192.84 4007.64 c
-2187.88 3999 2182.76 3993.92 2177.32 3993.92 c
-2173.8 3993.92 2171.08 3996.75 2171.08 4000.28 c
-2171.08 4003 2172.84 4009.56 2177.16 4024.12 c
-2180.68 4035.8 2182.12 4039.8 2184.52 4043.48 c
-2188.52 4049.72 2193.96 4053.88 2198.12 4053.56 c
-h
-2233 3991 m
-f*
-2266.56 4013.56 m
-2264.32 4010.36 l
-2260.16 4004.12 2256.48 4000.56 2254.08 4000.56 c
-2252.8 4000.56 2252 4001.77 2252 4003.16 c
-2252 4004.6 2252.62 4008.76 2253.12 4011.48 c
-2267.68 4064.92 l
-2259.22 4063 2248.26 4061.4 2236.04 4060.44 c
-2236.04 4056 l
-2237.44 4056 l
-2242.24 4056 2245.48 4054.44 2245.48 4051.48 c
-2245.48 4050.2 2244.71 4047.8 2243.68 4045.08 c
-2234.4 4010.68 l
-2233.12 4006.04 2233 4001.88 2233 3999.64 c
-2233 3993.56 2237.2 3989.56 2243.36 3989.56 c
-2252.96 3989.56 2258.88 3994.36 2270.08 4011.32 c
-h
-2262.88 4100.4 m
-2257.44 4100.4 2253 4095.46 2253 4090.04 c
-2253 4083.8 2257.26 4079.4 2263.04 4079.4 c
-2269.12 4079.4 2274 4083.86 2274 4089.56 c
-2274 4095.48 2269 4100.4 2262.88 4100.4 c
-h
-2276.48 3991 m
-f*
-2351.36 4012.6 m
-2344.96 4002.68 2342.88 4000.56 2340.16 4000.56 c
-2338.88 4000.56 2338 4001.63 2338 4003.16 c
-2338 4004.76 2338.94 4008.12 2341.92 4017.08 c
-2347.68 4034.52 l
-2350.24 4042.04 2352 4049.08 2352 4052.92 c
-2352 4060.76 2347.78 4065.08 2340.16 4065.08 c
-2334.24 4065.08 2328.48 4062.62 2324.16 4058.36 c
-2318.24 4052.76 2315.2 4048.92 2304.48 4033.08 c
-2314.72 4064.76 l
-2304.48 4062.52 2291.68 4060.92 2282.72 4060.6 c
-2282.72 4055.8 l
-2289.44 4055.65 2291.36 4054.92 2291.36 4052.12 c
-2291.36 4050.2 2289.12 4041.72 2284 4023.64 c
-2280.32 4010.68 2279.2 4006.52 2275.04 3991 c
-2294.4 3991 l
-2301.92 4018.68 2307.68 4032.6 2317.6 4045.56 c
-2320.8 4049.88 2325.76 4053.08 2328.64 4053.08 c
-2330.72 4053.08 2333 4051.63 2333 4050.04 c
-2333 4049.56 2332.54 4048.28 2331.84 4046.68 c
-2323.04 4020.12 l
-2320.48 4012.44 2319 4003.32 2319 3999.16 c
-2319 3993.08 2322.84 3989.56 2329.44 3989.56 c
-2339.04 3989.56 2345.6 3995 2354.88 4010.52 c
-h
-2364.96 3991 m
-f*
-2442.48 4060 m
-2424.72 4060 l
-2419.28 4063.58 2414.48 4065.08 2407.12 4065.08 c
-2387.44 4065.08 2371 4052.05 2371 4035.8 c
-2371 4027.64 2375.35 4021.88 2384.4 4018.2 c
-2371.28 4010.84 2369 4008.6 2369 4002.68 c
-2369 3997.56 2371.89 3994.52 2378.96 3992.12 c
-2369.04 3989.72 2365.84 3988.44 2362 3985.4 c
-2359.44 3983.16 2358 3979.32 2358 3975.48 c
-2358 3965.08 2369.56 3959 2387.76 3959 c
-2410.32 3959 2426 3968.72 2426 3982.52 c
-2426 3992.28 2419.6 3997.56 2402.16 4002.52 c
-2393.68 4004.92 l
-2388.56 4006.36 2385 4008.6 2385 4011 c
-2385 4013.56 2387.68 4016.28 2390 4016.28 c
-2390.8 4016.28 2391.92 4016.24 2393.2 4016.12 c
-2394.96 4015.64 2396.24 4015 2398.16 4015 c
-2405.2 4015 2412.4 4017.09 2418.48 4020.92 c
-2427.76 4026.2 2433 4034.36 2433 4043.96 c
-2433 4046.64 2432.59 4048.32 2431.76 4051 c
-2442.48 4051 l
-h
-2384.4 3990.04 m
-2386.32 3989.88 2398.48 3985.72 2402 3984.12 c
-2406.48 3981.88 2409 3979.16 2409 3975 c
-2409 3967.96 2401.8 3964 2389.36 3964 c
-2378.96 3964 2372 3969.1 2372 3976.44 c
-2372 3979.48 2373.32 3982.2 2376.24 3985.24 c
-2378.32 3987.32 2383.12 3990.2 2384.4 3990.04 c
-h
-2406.8 4060.08 m
-2410.96 4060.08 2414 4056.19 2414 4050.52 c
-2414 4045.08 2412.08 4037.4 2409.36 4031.48 c
-2406 4024.12 2401.84 4020 2396.88 4020 c
-2392.56 4020 2390 4023.52 2390 4029.88 c
-2390 4036.28 2392.79 4046.04 2396.24 4052.12 c
-2399.28 4057.4 2402.64 4060.08 2406.8 4060.08 c
-h
-2446 3991 m
-f*
-1 i
-0.564706 g
-2894.15 2729.75 m
-2758.55 2765.75 l
-2854.55 2822.15 l
-2700.95 2830.55 l
-2744.15 2901.35 l
-2596.55 2880.95 l
-2578.55 2951.75 l
-2458.55 2907.35 l
-2384.15 2970.95 l
-2307.35 2907.35 l
-2187.35 2951.75 l
-2169.35 2880.95 l
-2020.55 2901.35 l
-2064.95 2830.55 l
-1911.35 2822.15 l
-2007.35 2765.75 l
-1871.75 2729.75 l
-2007.35 2694.95 l
-1911.35 2638.55 l
-2064.95 2630.15 l
-2020.55 2559.35 l
-2169.35 2579.75 l
-2187.35 2508.95 l
-2307.35 2553.35 l
-2384.15 2489.75 l
-2458.55 2553.35 l
-2578.55 2508.95 l
-2596.55 2579.75 l
-2744.15 2559.35 l
-2700.95 2630.15 l
-2854.55 2638.55 l
-2758.55 2694.95 l
-f*
-1 g
-2834.15 2789.75 m
-2698.55 2825.75 l
-2794.55 2882.15 l
-2640.95 2890.55 l
-2684.15 2961.35 l
-2536.55 2940.95 l
-2518.55 3011.75 l
-2398.55 2967.35 l
-2324.15 3030.95 l
-2247.35 2967.35 l
-2127.35 3011.75 l
-2109.35 2940.95 l
-1960.55 2961.35 l
-2004.95 2890.55 l
-1851.35 2882.15 l
-1947.35 2825.75 l
-1811.75 2789.75 l
-1947.35 2754.95 l
-1851.35 2698.55 l
-2004.95 2690.15 l
-1960.55 2619.35 l
-2109.35 2639.75 l
-2127.35 2568.95 l
-2247.35 2613.35 l
-2324.15 2549.75 l
-2398.55 2613.35 l
-2518.55 2568.95 l
-2536.55 2639.75 l
-2684.15 2619.35 l
-2640.95 2690.15 l
-2794.55 2698.55 l
-2698.55 2754.95 l
-f*
-0 g
-2834.15 2789.75 m
-2698.55 2825.75 l
-2794.55 2882.15 l
-2640.95 2890.55 l
-2684.15 2961.35 l
-2536.55 2940.95 l
-2518.55 3011.75 l
-2398.55 2967.35 l
-2324.15 3030.95 l
-2247.35 2967.35 l
-2127.35 3011.75 l
-2109.35 2940.95 l
-1960.55 2961.35 l
-2004.95 2890.55 l
-1851.35 2882.15 l
-1947.35 2825.75 l
-1811.75 2789.75 l
-1947.35 2754.95 l
-1851.35 2698.55 l
-2004.95 2690.15 l
-1960.55 2619.35 l
-2109.35 2639.75 l
-2127.35 2568.95 l
-2247.35 2613.35 l
-2324.15 2549.75 l
-2398.55 2613.35 l
-2518.55 2568.95 l
-2536.55 2639.75 l
-2684.15 2619.35 l
-2640.95 2690.15 l
-2794.55 2698.55 l
-2698.55 2754.95 l
-2834.15 2789.75 l
-2794.55 2789.75 l
-2672.15 2758.55 l
-2760.95 2705.75 l
-2624.15 2698.55 l
-2663.75 2632.55 l
-2528.15 2650.55 l
-2511.35 2582.15 l
-2396.15 2624.15 l
-2324.15 2561.75 l
-2249.75 2624.15 l
-2134.55 2582.15 l
-2117.75 2650.55 l
-1980.95 2632.55 l
-2021.75 2698.55 l
-1884.95 2705.75 l
-1973.75 2758.55 l
-1851.35 2789.75 l
-1972.55 2822.15 l
-1884.95 2874.95 l
-2021.75 2882.15 l
-1980.95 2948.15 l
-2117.75 2930.15 l
-2134.55 2998.55 l
-2249.75 2956.55 l
-2324.15 3018.95 l
-2396.15 2956.55 l
-2511.35 2998.55 l
-2528.15 2930.15 l
-2663.75 2948.15 l
-2624.15 2882.15 l
-2760.95 2874.95 l
-2672.15 2822.15 l
-2794.55 2789.75 l
-2834.15 2789.75 l
-f*
-0.2 i
-2145.08 2840.76 m
-2125.08 2766.52 l
-2122.52 2757.88 2119.48 2755.64 2109.08 2755 c
-2109.08 2751 l
-2159 2751 l
-2159 2755 l
-2149.72 2755.48 2147.48 2756.76 2147.48 2761.88 c
-2147.48 2763.64 2147.8 2765.4 2148.76 2769.08 c
-2148.92 2769.88 l
-2149.08 2770.68 l
-2168.76 2842.52 l
-2171.16 2850.84 2173.56 2853.08 2181.72 2854.04 c
-2181.72 2858 l
-2147.8 2858 l
-2098.2 2781.24 l
-2089.56 2858 l
-2054.2 2858 l
-2054.2 2854 l
-2064.28 2853.52 2065.72 2852.89 2065.72 2848.44 c
-2065.72 2846.2 2065.08 2843.32 2063.96 2839.16 c
-2046.52 2779.48 l
-2040.12 2758.68 2039 2756.92 2030.36 2755 c
-2030.36 2751 l
-2063.48 2751 l
-2063.48 2755 l
-2053.24 2756.28 2050.68 2758.2 2050.68 2764.76 c
-2050.68 2767.48 2051.48 2771.48 2053.72 2779.48 c
-2069.88 2838.52 l
-2080.6 2749.08 l
-2085.08 2749.08 l
-h
-2177.24 2751 m
-f*
-2247.44 2771.32 m
-2240.88 2762.52 2238.48 2759.76 2235.92 2759.76 c
-2234.64 2759.76 2234 2760.86 2234 2762.52 c
-2234 2766.52 2235.44 2773.08 2239.44 2786.2 c
-2250.8 2823.96 l
-2233.04 2822.84 l
-2230.16 2813.4 l
-2228.72 2821.56 2225.2 2825.08 2218.32 2825.08 c
-2198.64 2825.08 2175 2794.27 2175 2769.24 c
-2175 2757.08 2181.74 2748.92 2191.92 2748.92 c
-2201.68 2748.92 2209.04 2754.68 2218.16 2770.04 c
-2216.24 2763.48 2216 2761.56 2216 2759.32 c
-2216 2753.4 2220.76 2748.76 2226.64 2748.76 c
-2234.16 2748.76 2241.52 2755 2250.8 2768.92 c
-h
-2220.56 2818.2 m
-2224.08 2817.88 2226.56 2815 2226.56 2810.68 c
-2226.56 2801.08 2221.24 2783.32 2214.96 2772.28 c
-2210.64 2764.44 2205.84 2759.92 2201.52 2759.92 c
-2197.36 2759.92 2194 2763.75 2194 2768.92 c
-2194 2777.24 2199.42 2793.24 2206.16 2805.08 c
-2210.96 2813.56 2216.24 2818.52 2220.56 2818.2 c
-h
-2258 2751 m
-f*
-2291.56 2824.92 m
-2275.24 2822.36 2269 2821.4 2260.68 2820.44 c
-2260.68 2816 l
-2267.88 2815.69 2269.32 2815.07 2269.32 2812.12 c
-2269.32 2810.52 2268.04 2804.76 2265.8 2796.44 c
-2249.8 2734.36 l
-2246.76 2723.8 2245.48 2722.84 2237.8 2723 c
-2237.8 2718 l
-2277.64 2718 l
-2277.64 2723 l
-2269.64 2723.14 2267.24 2724.16 2267.24 2727.64 c
-2267.24 2729.88 2268.36 2734.68 2271.4 2745.88 c
-2272.52 2749.72 2272.52 2750.04 2273.16 2752.44 c
-2278.76 2749.56 2280.68 2748.92 2284.04 2748.92 c
-2305.8 2748.92 2328.36 2777.88 2328.36 2805.56 c
-2328.36 2817.4 2321.64 2825.08 2311.08 2825.08 c
-2301.96 2825.08 2294.92 2819.92 2285.48 2806.52 c
-h
-2302.12 2813.56 m
-2306.28 2813.24 2308.68 2809.56 2308.36 2804.44 c
-2307.72 2793.88 2302.6 2778.04 2296.84 2767.64 c
-2291.88 2759 2286.76 2753.92 2281.32 2753.92 c
-2277.8 2753.92 2275.08 2756.75 2275.08 2760.28 c
-2275.08 2763 2276.84 2769.56 2281.16 2784.12 c
-2284.68 2795.8 2286.12 2799.8 2288.52 2803.48 c
-2292.52 2809.72 2297.96 2813.88 2302.12 2813.56 c
-h
-2337 2751 m
-f*
-2371.56 2824.92 m
-2355.24 2822.36 2349 2821.4 2340.68 2820.44 c
-2340.68 2816 l
-2347.88 2815.69 2349.32 2815.07 2349.32 2812.12 c
-2349.32 2810.52 2348.04 2804.76 2345.8 2796.44 c
-2329.8 2734.36 l
-2326.76 2723.8 2325.48 2722.84 2317.8 2723 c
-2317.8 2718 l
-2357.64 2718 l
-2357.64 2723 l
-2349.64 2723.14 2347.24 2724.16 2347.24 2727.64 c
-2347.24 2729.88 2348.36 2734.68 2351.4 2745.88 c
-2352.52 2749.72 2352.52 2750.04 2353.16 2752.44 c
-2358.76 2749.56 2360.68 2748.92 2364.04 2748.92 c
-2385.8 2748.92 2408.36 2777.88 2408.36 2805.56 c
-2408.36 2817.4 2401.64 2825.08 2391.08 2825.08 c
-2381.96 2825.08 2374.92 2819.92 2365.48 2806.52 c
-h
-2382.12 2813.56 m
-2386.28 2813.24 2388.68 2809.56 2388.36 2804.44 c
-2387.72 2793.88 2382.6 2778.04 2376.84 2767.64 c
-2371.88 2759 2366.76 2753.92 2361.32 2753.92 c
-2357.8 2753.92 2355.08 2756.75 2355.08 2760.28 c
-2355.08 2763 2356.84 2769.56 2361.16 2784.12 c
-2364.68 2795.8 2366.12 2799.8 2368.52 2803.48 c
-2372.52 2809.72 2377.96 2813.88 2382.12 2813.56 c
-h
-2417 2751 m
-f*
-2452.56 2773.56 m
-2450.32 2770.36 l
-2446.16 2764.12 2442.48 2760.56 2440.08 2760.56 c
-2438.8 2760.56 2438 2761.77 2438 2763.16 c
-2438 2764.6 2438.62 2768.76 2439.12 2771.48 c
-2453.68 2824.92 l
-2445.22 2823 2434.26 2821.4 2422.04 2820.44 c
-2422.04 2816 l
-2423.44 2816 l
-2428.24 2816 2431.48 2814.44 2431.48 2811.48 c
-2431.48 2810.2 2430.71 2807.8 2429.68 2805.08 c
-2420.4 2770.68 l
-2419.12 2766.04 2419 2761.88 2419 2759.64 c
-2419 2753.56 2423.2 2749.56 2429.36 2749.56 c
-2438.96 2749.56 2444.88 2754.36 2456.08 2771.32 c
-h
-2448.88 2860.4 m
-2443.44 2860.4 2439 2855.46 2439 2850.04 c
-2439 2843.8 2443.26 2839.4 2449.04 2839.4 c
-2455.12 2839.4 2460 2843.86 2460 2849.56 c
-2460 2855.48 2455 2860.4 2448.88 2860.4 c
-h
-2462.48 2751 m
-f*
-2536.36 2772.6 m
-2529.96 2762.68 2527.88 2760.56 2525.16 2760.56 c
-2523.88 2760.56 2523 2761.63 2523 2763.16 c
-2523 2764.76 2523.94 2768.12 2526.92 2777.08 c
-2532.68 2794.52 l
-2535.24 2802.04 2537 2809.08 2537 2812.92 c
-2537 2820.76 2532.78 2825.08 2525.16 2825.08 c
-2519.24 2825.08 2513.48 2822.62 2509.16 2818.36 c
-2503.24 2812.76 2500.2 2808.92 2489.48 2793.08 c
-2499.72 2824.76 l
-2489.48 2822.52 2476.68 2820.92 2467.72 2820.6 c
-2467.72 2815.8 l
-2474.44 2815.65 2476.36 2814.92 2476.36 2812.12 c
-2476.36 2810.2 2474.12 2801.72 2469 2783.64 c
-2465.32 2770.68 2464.2 2766.52 2460.04 2751 c
-2479.4 2751 l
-2486.92 2778.68 2492.68 2792.6 2502.6 2805.56 c
-2505.8 2809.88 2510.76 2813.08 2513.64 2813.08 c
-2515.72 2813.08 2518 2811.63 2518 2810.04 c
-2518 2809.56 2517.54 2808.28 2516.84 2806.68 c
-2508.04 2780.12 l
-2505.48 2772.44 2504 2763.32 2504 2759.16 c
-2504 2753.08 2507.84 2749.56 2514.44 2749.56 c
-2524.04 2749.56 2530.6 2755 2539.88 2770.52 c
-h
-2549.96 2751 m
-f*
-2627.48 2820 m
-2609.72 2820 l
-2604.28 2823.58 2599.48 2825.08 2592.12 2825.08 c
-2572.44 2825.08 2556 2812.05 2556 2795.8 c
-2556 2787.64 2560.35 2781.88 2569.4 2778.2 c
-2556.28 2770.84 2554 2768.6 2554 2762.68 c
-2554 2757.56 2556.89 2754.52 2563.96 2752.12 c
-2554.04 2749.72 2550.84 2748.44 2547 2745.4 c
-2544.44 2743.16 2543 2739.32 2543 2735.48 c
-2543 2725.08 2554.56 2719 2572.76 2719 c
-2595.32 2719 2611 2728.72 2611 2742.52 c
-2611 2752.28 2604.6 2757.56 2587.16 2762.52 c
-2578.68 2764.92 l
-2573.56 2766.36 2570 2768.6 2570 2771 c
-2570 2773.56 2572.68 2776.28 2575 2776.28 c
-2575.8 2776.28 2576.92 2776.24 2578.2 2776.12 c
-2579.96 2775.64 2581.24 2775 2583.16 2775 c
-2590.2 2775 2597.4 2777.09 2603.48 2780.92 c
-2612.76 2786.2 2618 2794.36 2618 2803.96 c
-2618 2806.64 2617.59 2808.32 2616.76 2811 c
-2627.48 2811 l
-h
-2569.4 2750.04 m
-2571.32 2749.88 2583.48 2745.72 2587 2744.12 c
-2591.48 2741.88 2594 2739.16 2594 2735 c
-2594 2727.96 2586.8 2724 2574.36 2724 c
-2563.96 2724 2557 2729.1 2557 2736.44 c
-2557 2739.48 2558.32 2742.2 2561.24 2745.24 c
-2563.32 2747.32 2568.12 2750.2 2569.4 2750.04 c
-h
-2591.8 2820.08 m
-2595.96 2820.08 2599 2816.19 2599 2810.52 c
-2599 2805.08 2597.08 2797.4 2594.36 2791.48 c
-2591 2784.12 2586.84 2780 2581.88 2780 c
-2577.56 2780 2575 2783.52 2575 2789.88 c
-2575 2796.28 2577.79 2806.04 2581.24 2812.12 c
-2584.28 2817.4 2587.64 2820.08 2591.8 2820.08 c
-h
-2631 2751 m
-f*
-1 i
-0.564706 g
-4908.95 2769.35 m
-4773.35 2806.55 l
-4869.35 2861.75 l
-4715.75 2871.35 l
-4758.95 2940.95 l
-4611.35 2920.55 l
-4593.35 2992.55 l
-4473.35 2946.95 l
-4398.95 3010.55 l
-4322.15 2946.95 l
-4202.15 2992.55 l
-4185.35 2920.55 l
-4036.55 2940.95 l
-4079.75 2871.35 l
-3926.15 2861.75 l
-4022.15 2806.55 l
-3887.75 2769.35 l
-4022.15 2734.55 l
-3926.15 2678.15 l
-4079.75 2669.75 l
-4036.55 2600.15 l
-4185.35 2619.35 l
-4202.15 2548.55 l
-4322.15 2592.95 l
-4398.95 2529.35 l
-4473.35 2592.95 l
-4593.35 2548.55 l
-4611.35 2619.35 l
-4758.95 2600.15 l
-4715.75 2669.75 l
-4869.35 2678.15 l
-4773.35 2734.55 l
-f*
-1 g
-4848.95 2829.35 m
-4713.35 2866.55 l
-4809.35 2921.75 l
-4655.75 2931.35 l
-4698.95 3000.95 l
-4551.35 2980.55 l
-4533.35 3052.55 l
-4413.35 3006.95 l
-4338.95 3070.55 l
-4262.15 3006.95 l
-4142.15 3052.55 l
-4125.35 2980.55 l
-3976.55 3000.95 l
-4019.75 2931.35 l
-3866.15 2921.75 l
-3962.15 2866.55 l
-3827.75 2829.35 l
-3962.15 2794.55 l
-3866.15 2738.15 l
-4019.75 2729.75 l
-3976.55 2660.15 l
-4125.35 2679.35 l
-4142.15 2608.55 l
-4262.15 2652.95 l
-4338.95 2589.35 l
-4413.35 2652.95 l
-4533.35 2608.55 l
-4551.35 2679.35 l
-4698.95 2660.15 l
-4655.75 2729.75 l
-4809.35 2738.15 l
-4713.35 2794.55 l
-f*
-0 g
-4848.95 2829.35 m
-4713.35 2866.55 l
-4809.35 2921.75 l
-4655.75 2931.35 l
-4698.95 3000.95 l
-4551.35 2980.55 l
-4533.35 3052.55 l
-4413.35 3006.95 l
-4338.95 3070.55 l
-4262.15 3006.95 l
-4142.15 3052.55 l
-4125.35 2980.55 l
-3976.55 3000.95 l
-4019.75 2931.35 l
-3866.15 2921.75 l
-3962.15 2866.55 l
-3827.75 2829.35 l
-3962.15 2794.55 l
-3866.15 2738.15 l
-4019.75 2729.75 l
-3976.55 2660.15 l
-4125.35 2679.35 l
-4142.15 2608.55 l
-4262.15 2652.95 l
-4338.95 2589.35 l
-4413.35 2652.95 l
-4533.35 2608.55 l
-4551.35 2679.35 l
-4698.95 2660.15 l
-4655.75 2729.75 l
-4809.35 2738.15 l
-4713.35 2794.55 l
-4848.95 2829.35 l
-4809.35 2829.35 l
-4686.95 2798.15 l
-4775.75 2746.55 l
-4638.95 2738.15 l
-4678.55 2672.15 l
-4544.15 2691.35 l
-4526.15 2621.75 l
-4410.95 2664.95 l
-4338.95 2602.55 l
-4264.55 2664.95 l
-4149.35 2621.75 l
-4132.55 2691.35 l
-3995.75 2672.15 l
-4037.75 2738.15 l
-3899.75 2746.55 l
-3988.55 2798.15 l
-3866.15 2829.35 l
-3987.35 2861.75 l
-3899.75 2914.55 l
-4037.75 2921.75 l
-3995.75 2988.95 l
-4132.55 2969.75 l
-4149.35 3038.15 l
-4264.55 2996.15 l
-4338.95 3058.55 l
-4410.95 2996.15 l
-4526.15 3038.15 l
-4544.15 2969.75 l
-4678.55 2988.95 l
-4638.95 2921.75 l
-4775.75 2914.55 l
-4686.95 2861.75 l
-4809.35 2829.35 l
-4848.95 2829.35 l
-f*
-0.2 i
-4160.08 2880.76 m
-4140.08 2806.52 l
-4137.52 2797.88 4134.48 2795.64 4124.08 2795 c
-4124.08 2791 l
-4174 2791 l
-4174 2795 l
-4164.72 2795.48 4162.48 2796.76 4162.48 2801.88 c
-4162.48 2803.64 4162.8 2805.4 4163.76 2809.08 c
-4163.92 2809.88 l
-4164.08 2810.68 l
-4183.76 2882.52 l
-4186.16 2890.84 4188.56 2893.08 4196.72 2894.04 c
-4196.72 2898 l
-4162.8 2898 l
-4113.2 2821.24 l
-4104.56 2898 l
-4069.2 2898 l
-4069.2 2894 l
-4079.28 2893.52 4080.72 2892.89 4080.72 2888.44 c
-4080.72 2886.2 4080.08 2883.32 4078.96 2879.16 c
-4061.52 2819.48 l
-4055.12 2798.68 4054 2796.92 4045.36 2795 c
-4045.36 2791 l
-4078.48 2791 l
-4078.48 2795 l
-4068.24 2796.28 4065.68 2798.2 4065.68 2804.76 c
-4065.68 2807.48 4066.48 2811.48 4068.72 2819.48 c
-4084.88 2878.52 l
-4095.6 2789.08 l
-4100.08 2789.08 l
-h
-4192.24 2791 m
-f*
-4262.44 2811.32 m
-4255.88 2802.52 4253.48 2799.76 4250.92 2799.76 c
-4249.64 2799.76 4249 2800.86 4249 2802.52 c
-4249 2806.52 4250.44 2813.08 4254.44 2826.2 c
-4265.8 2863.96 l
-4248.04 2862.84 l
-4245.16 2853.4 l
-4243.72 2861.56 4240.2 2865.08 4233.32 2865.08 c
-4213.64 2865.08 4190 2834.27 4190 2809.24 c
-4190 2797.08 4196.74 2788.92 4206.92 2788.92 c
-4216.68 2788.92 4224.04 2794.68 4233.16 2810.04 c
-4231.24 2803.48 4231 2801.56 4231 2799.32 c
-4231 2793.4 4235.76 2788.76 4241.64 2788.76 c
-4249.16 2788.76 4256.52 2795 4265.8 2808.92 c
-h
-4235.56 2858.2 m
-4239.08 2857.88 4241.56 2855 4241.56 2850.68 c
-4241.56 2841.08 4236.24 2823.32 4229.96 2812.28 c
-4225.64 2804.44 4220.84 2799.92 4216.52 2799.92 c
-4212.36 2799.92 4209 2803.75 4209 2808.92 c
-4209 2817.24 4214.42 2833.24 4221.16 2845.08 c
-4225.96 2853.56 4231.24 2858.52 4235.56 2858.2 c
-h
-4273 2791 m
-f*
-4306.56 2864.92 m
-4290.24 2862.36 4284 2861.4 4275.68 2860.44 c
-4275.68 2856 l
-4282.88 2855.69 4284.32 2855.07 4284.32 2852.12 c
-4284.32 2850.52 4283.04 2844.76 4280.8 2836.44 c
-4264.8 2774.36 l
-4261.76 2763.8 4260.48 2762.84 4252.8 2763 c
-4252.8 2758 l
-4292.64 2758 l
-4292.64 2763 l
-4284.64 2763.14 4282.24 2764.16 4282.24 2767.64 c
-4282.24 2769.88 4283.36 2774.68 4286.4 2785.88 c
-4287.52 2789.72 4287.52 2790.04 4288.16 2792.44 c
-4293.76 2789.56 4295.68 2788.92 4299.04 2788.92 c
-4320.8 2788.92 4343.36 2817.88 4343.36 2845.56 c
-4343.36 2857.4 4336.64 2865.08 4326.08 2865.08 c
-4316.96 2865.08 4309.92 2859.92 4300.48 2846.52 c
-h
-4317.12 2853.56 m
-4321.28 2853.24 4323.68 2849.56 4323.36 2844.44 c
-4322.72 2833.88 4317.6 2818.04 4311.84 2807.64 c
-4306.88 2799 4301.76 2793.92 4296.32 2793.92 c
-4292.8 2793.92 4290.08 2796.75 4290.08 2800.28 c
-4290.08 2803 4291.84 2809.56 4296.16 2824.12 c
-4299.68 2835.8 4301.12 2839.8 4303.52 2843.48 c
-4307.52 2849.72 4312.96 2853.88 4317.12 2853.56 c
-h
-4352 2791 m
-f*
-4386.56 2864.92 m
-4370.24 2862.36 4364 2861.4 4355.68 2860.44 c
-4355.68 2856 l
-4362.88 2855.69 4364.32 2855.07 4364.32 2852.12 c
-4364.32 2850.52 4363.04 2844.76 4360.8 2836.44 c
-4344.8 2774.36 l
-4341.76 2763.8 4340.48 2762.84 4332.8 2763 c
-4332.8 2758 l
-4372.64 2758 l
-4372.64 2763 l
-4364.64 2763.14 4362.24 2764.16 4362.24 2767.64 c
-4362.24 2769.88 4363.36 2774.68 4366.4 2785.88 c
-4367.52 2789.72 4367.52 2790.04 4368.16 2792.44 c
-4373.76 2789.56 4375.68 2788.92 4379.04 2788.92 c
-4400.8 2788.92 4423.36 2817.88 4423.36 2845.56 c
-4423.36 2857.4 4416.64 2865.08 4406.08 2865.08 c
-4396.96 2865.08 4389.92 2859.92 4380.48 2846.52 c
-h
-4397.12 2853.56 m
-4401.28 2853.24 4403.68 2849.56 4403.36 2844.44 c
-4402.72 2833.88 4397.6 2818.04 4391.84 2807.64 c
-4386.88 2799 4381.76 2793.92 4376.32 2793.92 c
-4372.8 2793.92 4370.08 2796.75 4370.08 2800.28 c
-4370.08 2803 4371.84 2809.56 4376.16 2824.12 c
-4379.68 2835.8 4381.12 2839.8 4383.52 2843.48 c
-4387.52 2849.72 4392.96 2853.88 4397.12 2853.56 c
-h
-4432 2791 m
-f*
-4467.56 2813.56 m
-4465.32 2810.36 l
-4461.16 2804.12 4457.48 2800.56 4455.08 2800.56 c
-4453.8 2800.56 4453 2801.77 4453 2803.16 c
-4453 2804.6 4453.62 2808.76 4454.12 2811.48 c
-4468.68 2864.92 l
-4460.22 2863 4449.26 2861.4 4437.04 2860.44 c
-4437.04 2856 l
-4438.44 2856 l
-4443.24 2856 4446.48 2854.44 4446.48 2851.48 c
-4446.48 2850.2 4445.71 2847.8 4444.68 2845.08 c
-4435.4 2810.68 l
-4434.12 2806.04 4434 2801.88 4434 2799.64 c
-4434 2793.56 4438.2 2789.56 4444.36 2789.56 c
-4453.96 2789.56 4459.88 2794.36 4471.08 2811.32 c
-h
-4463.88 2900.4 m
-4458.44 2900.4 4454 2895.46 4454 2890.04 c
-4454 2883.8 4458.26 2879.4 4464.04 2879.4 c
-4470.12 2879.4 4475 2883.86 4475 2889.56 c
-4475 2895.48 4470 2900.4 4463.88 2900.4 c
-h
-4477.48 2791 m
-f*
-4551.36 2812.6 m
-4544.96 2802.68 4542.88 2800.56 4540.16 2800.56 c
-4538.88 2800.56 4538 2801.63 4538 2803.16 c
-4538 2804.76 4538.94 2808.12 4541.92 2817.08 c
-4547.68 2834.52 l
-4550.24 2842.04 4552 2849.08 4552 2852.92 c
-4552 2860.76 4547.78 2865.08 4540.16 2865.08 c
-4534.24 2865.08 4528.48 2862.62 4524.16 2858.36 c
-4518.24 2852.76 4515.2 2848.92 4504.48 2833.08 c
-4514.72 2864.76 l
-4504.48 2862.52 4491.68 2860.92 4482.72 2860.6 c
-4482.72 2855.8 l
-4489.44 2855.65 4491.36 2854.92 4491.36 2852.12 c
-4491.36 2850.2 4489.12 2841.72 4484 2823.64 c
-4480.32 2810.68 4479.2 2806.52 4475.04 2791 c
-4494.4 2791 l
-4501.92 2818.68 4507.68 2832.6 4517.6 2845.56 c
-4520.8 2849.88 4525.76 2853.08 4528.64 2853.08 c
-4530.72 2853.08 4533 2851.63 4533 2850.04 c
-4533 2849.56 4532.54 2848.28 4531.84 2846.68 c
-4523.04 2820.12 l
-4520.48 2812.44 4519 2803.32 4519 2799.16 c
-4519 2793.08 4522.84 2789.56 4529.44 2789.56 c
-4539.04 2789.56 4545.6 2795 4554.88 2810.52 c
-h
-4564.96 2791 m
-f*
-4642.48 2860 m
-4624.72 2860 l
-4619.28 2863.58 4614.48 2865.08 4607.12 2865.08 c
-4587.44 2865.08 4571 2852.05 4571 2835.8 c
-4571 2827.64 4575.35 2821.88 4584.4 2818.2 c
-4571.28 2810.84 4569 2808.6 4569 2802.68 c
-4569 2797.56 4571.89 2794.52 4578.96 2792.12 c
-4569.04 2789.72 4565.84 2788.44 4562 2785.4 c
-4559.44 2783.16 4558 2779.32 4558 2775.48 c
-4558 2765.08 4569.56 2759 4587.76 2759 c
-4610.32 2759 4626 2768.72 4626 2782.52 c
-4626 2792.28 4619.6 2797.56 4602.16 2802.52 c
-4593.68 2804.92 l
-4588.56 2806.36 4585 2808.6 4585 2811 c
-4585 2813.56 4587.68 2816.28 4590 2816.28 c
-4590.8 2816.28 4591.92 2816.24 4593.2 2816.12 c
-4594.96 2815.64 4596.24 2815 4598.16 2815 c
-4605.2 2815 4612.4 2817.09 4618.48 2820.92 c
-4627.76 2826.2 4633 2834.36 4633 2843.96 c
-4633 2846.64 4632.59 2848.32 4631.76 2851 c
-4642.48 2851 l
-h
-4584.4 2790.04 m
-4586.32 2789.88 4598.48 2785.72 4602 2784.12 c
-4606.48 2781.88 4609 2779.16 4609 2775 c
-4609 2767.96 4601.8 2764 4589.36 2764 c
-4578.96 2764 4572 2769.1 4572 2776.44 c
-4572 2779.48 4573.32 2782.2 4576.24 2785.24 c
-4578.32 2787.32 4583.12 2790.2 4584.4 2790.04 c
-h
-4606.8 2860.08 m
-4610.96 2860.08 4614 2856.19 4614 2850.52 c
-4614 2845.08 4612.08 2837.4 4609.36 2831.48 c
-4606 2824.12 4601.84 2820 4596.88 2820 c
-4592.56 2820 4590 2823.52 4590 2829.88 c
-4590 2836.28 4592.79 2846.04 4596.24 2852.12 c
-4599.28 2857.4 4602.64 2860.08 4606.8 2860.08 c
-h
-4646 2791 m
-f*
-1 i
-1 g
-1836.95 1421.75 m
-1919.75 1421.75 l
-1919.75 1268.15 l
-2086.55 1268.15 l
-2086.55 1421.75 l
-2166.95 1421.75 l
-2003.75 1572.95 l
-f*
-0 g
-1836.95 1421.75 m
-1919.75 1421.75 l
-1919.75 1268.15 l
-2086.55 1268.15 l
-2086.55 1421.75 l
-2166.95 1421.75 l
-2003.75 1572.95 l
-1836.95 1421.75 l
-1863.35 1432.55 l
-2003.75 1559.75 l
-2141.75 1432.55 l
-2075.75 1432.55 l
-2075.75 1278.95 l
-1929.35 1278.95 l
-1929.35 1432.55 l
-1863.35 1432.55 l
-1836.95 1421.75 l
-f*
-0.2 i
-2275.88 1447 m
-2275.88 1442 l
-2288.3 1441.29 2292 1438.45 2292 1429.4 c
-2292 1342.28 l
-2292 1333.1 2289.25 1330.94 2275.88 1329.5 c
-2275.88 1325 l
-2333.84 1325 l
-2364.26 1325 2384 1338.5 2384 1358.84 c
-2384 1367.12 2380.73 1374.32 2374.7 1379.9 c
-2368.4 1385.48 2362.28 1388 2349.68 1390.7 c
-2370.56 1396.82 2378 1404.2 2378 1417.88 c
-2378 1436.42 2361.55 1447 2331.5 1447 c
-h
-2321 1386.74 m
-2325.92 1386.74 l
-2344.46 1386.74 2353 1377.2 2353 1357.22 c
-2353 1339.76 2345.77 1331 2331.5 1331 c
-2323.58 1331 2321 1333.99 2321 1341.74 c
-h
-2321 1432.46 m
-2321 1438.94 2323.39 1442 2330.24 1442 c
-2342.84 1442 2349 1434.03 2349 1416.62 c
-2349 1397.72 2343.08 1392.68 2321 1392.14 c
-h
-2393.06 1325 m
-f*
-2478.14 1336.52 m
-2476.34 1334.72 l
-2475.8 1334.18 2475.26 1334 2474.36 1334 c
-2471.84 1334 2471 1335.44 2471 1338.5 c
-2471 1385.48 l
-2471 1400.78 2457.16 1410.16 2434.94 1410.16 c
-2414.6 1410.16 2400.92 1400.97 2400.92 1387.46 c
-2400.92 1379.9 2405.24 1375.58 2412.62 1375.58 c
-2419.82 1375.58 2424.86 1379.9 2424.86 1386.02 c
-2424.86 1388.54 2423.96 1390.88 2421.62 1393.76 c
-2420 1395.56 2419.46 1396.64 2419.46 1397.72 c
-2419.46 1401.5 2424.32 1404.16 2430.8 1404.16 c
-2441.42 1404.16 2446 1399.37 2446 1388.54 c
-2446 1375.4 l
-2424.89 1368.92 2416.41 1365.68 2409.56 1361.18 c
-2401.46 1355.78 2398 1349.48 2398 1341.56 c
-2398 1330.58 2406.07 1322.48 2417.3 1322.48 c
-2427.74 1322.48 2436.02 1326.08 2445.92 1335.08 c
-2447.9 1325.9 2451.86 1322.48 2460.68 1322.48 c
-2468.42 1322.48 2474 1325.36 2480.84 1332.74 c
-h
-2446 1343 m
-2441.04 1337.42 2437.37 1335.26 2432.96 1335.26 c
-2427.56 1335.26 2424 1340.12 2424 1347.32 c
-2424 1357.76 2431.57 1365.14 2446 1369.1 c
-h
-2483 1325 m
-f*
-2544.22 1383.68 m
-2544.22 1409.8 l
-2540.24 1409.8 l
-2539.16 1407.08 2538.08 1406.2 2535.74 1406.2 c
-2534.66 1406.2 2533.04 1406.55 2530.16 1407.44 c
-2524.4 1409.42 2520.26 1410.16 2516.12 1410.16 c
-2499.74 1410.16 2488 1398.99 2488 1383.86 c
-2488 1371.98 2495.34 1363.7 2513.42 1355.96 c
-2525.84 1350.56 2531 1346.06 2531 1340.3 c
-2531 1333.28 2525.48 1328.48 2517.2 1328.48 c
-2504.6 1328.48 2496.32 1336.62 2492.54 1352.36 c
-2487.5 1352.36 l
-2487.5 1322.66 l
-2492 1322.66 l
-2493.98 1326.44 2495.06 1327.7 2496.68 1327.7 c
-2497.58 1327.7 2499.02 1327.34 2500.82 1326.62 c
-2506.04 1324.46 2515.22 1322.48 2520.26 1322.48 c
-2536.64 1322.48 2548 1333.64 2548 1349.84 c
-2548 1362.62 2541.15 1370.54 2523.14 1377.92 c
-2510.9 1383.14 2506 1387.64 2506 1393.76 c
-2506 1399.7 2510.98 1404.16 2517.74 1404.16 c
-2522.6 1404.16 2527.28 1402.19 2531.24 1398.44 c
-2535.02 1394.84 2537 1391.42 2539.7 1383.68 c
-h
-2553.02 1325 m
-f*
-2624.36 1347.5 m
-2616.98 1338.68 2611.58 1335.48 2603.84 1335.48 c
-2597 1335.48 2591.6 1338.53 2588 1344.62 c
-2584.58 1350.36 2583.14 1356.45 2582.42 1369 c
-2627.78 1369 l
-2626.7 1383.99 2624 1392.3 2618.42 1399.34 c
-2612.66 1406.36 2604.2 1410.16 2594.12 1410.16 c
-2571.62 1410.16 2556.5 1392.33 2556.5 1366.04 c
-2556.5 1339.76 2571.26 1322.48 2593.58 1322.48 c
-2608.16 1322.48 2616.98 1328.06 2628.68 1344.98 c
-h
-2581.52 1376 m
-2582.06 1397.42 2585.3 1404.16 2594.12 1404.16 c
-2599.34 1404.16 2602.58 1401.42 2604.02 1396.1 c
-2604.92 1392.68 2605.28 1387.64 2605.64 1378.46 c
-2605.64 1376 l
-h
-2631.92 1325 m
-f*
-2678 1325 m
-f*
-2781.94 1447 m
-2679.88 1447 l
-2679.88 1442 l
-2692.3 1441.29 2696 1438.63 2696 1429.4 c
-2696 1342.28 l
-2696 1332.92 2693.44 1330.94 2679.88 1329.5 c
-2679.88 1325 l
-2744.68 1325 l
-2744.68 1330 l
-2728.12 1330.69 2725 1332.77 2725 1342.28 c
-2725 1384.22 l
-2743.28 1383.86 2749.91 1377.2 2752.42 1356.32 c
-2756.92 1356.32 l
-2756.92 1417.16 l
-2752.42 1417.16 l
-2749.19 1396.64 2742.92 1390.34 2725 1390.34 c
-2725 1432.1 l
-2725 1438.76 2727.32 1441 2736.4 1441 c
-2753.14 1441 2763.58 1437.8 2769.16 1431.2 c
-2773.12 1426.7 2775.1 1421.84 2777.62 1410.5 c
-2781.94 1410.5 l
-h
-2786.98 1325 m
-f*
-2826.28 1408 m
-2792.22 1408 l
-2792.22 1403.66 l
-2799.96 1402.58 2802 1400.24 2802 1393.04 c
-2802 1340.12 l
-2802 1332.74 2800.19 1330.76 2792.22 1329.32 c
-2792.22 1325 l
-2840.1 1325 l
-2840.1 1329.32 l
-2829.12 1330.04 2827 1332.38 2827 1343.54 c
-2827 1377.56 l
-2827 1386.92 2832.02 1394.66 2837.94 1394.66 c
-2839.38 1394.66 2841 1393.4 2842.98 1390.52 c
-2846.4 1385.66 2849.1 1384.04 2853.78 1384.04 c
-2860.44 1384.04 2865.12 1389.08 2865.12 1395.92 c
-2865.12 1404.2 2859 1410.16 2850.54 1410.16 c
-2841.55 1410.16 2834.73 1405.47 2826.28 1393.22 c
-h
-2866.92 1325 m
-f*
-2953.14 1336.52 m
-2951.34 1334.72 l
-2950.8 1334.18 2950.26 1334 2949.36 1334 c
-2946.84 1334 2946 1335.44 2946 1338.5 c
-2946 1385.48 l
-2946 1400.78 2932.16 1410.16 2909.94 1410.16 c
-2889.6 1410.16 2875.92 1400.97 2875.92 1387.46 c
-2875.92 1379.9 2880.24 1375.58 2887.62 1375.58 c
-2894.82 1375.58 2899.86 1379.9 2899.86 1386.02 c
-2899.86 1388.54 2898.96 1390.88 2896.62 1393.76 c
-2895 1395.56 2894.46 1396.64 2894.46 1397.72 c
-2894.46 1401.5 2899.32 1404.16 2905.8 1404.16 c
-2916.42 1404.16 2921 1399.37 2921 1388.54 c
-2921 1375.4 l
-2899.89 1368.92 2891.41 1365.68 2884.56 1361.18 c
-2876.46 1355.78 2873 1349.48 2873 1341.56 c
-2873 1330.58 2881.07 1322.48 2892.3 1322.48 c
-2902.74 1322.48 2911.02 1326.08 2920.92 1335.08 c
-2922.9 1325.9 2926.86 1322.48 2935.68 1322.48 c
-2943.42 1322.48 2949 1325.36 2955.84 1332.74 c
-h
-2921 1343 m
-2916.04 1337.42 2912.37 1335.26 2907.96 1335.26 c
-2902.56 1335.26 2899 1340.12 2899 1347.32 c
-2899 1357.76 2906.57 1365.14 2921 1369.1 c
-h
-2958 1325 m
-f*
-2995.46 1408 m
-2960.73 1408 l
-2960.73 1403.66 l
-2968.65 1402.58 2971 1400.42 2971 1393.04 c
-2971 1340.12 l
-2971 1332.74 2968.95 1330.76 2960.73 1329.32 c
-2960.73 1325 l
-3003.93 1325 l
-3003.93 1329.32 l
-2997.63 1330.22 2996 1332.74 2996 1339.58 c
-2996 1387.64 l
-2996 1388.54 2998.51 1391.78 3000.51 1393.76 c
-3004.29 1396.64 3007.53 1398.16 3010.77 1398.16 c
-3017.79 1398.16 3021 1394 3021 1383.14 c
-3021 1339.58 l
-3021 1332.2 3018.9 1329.86 3011.85 1329.32 c
-3011.85 1325 l
-3053.97 1325 l
-3053.97 1329.32 l
-3047.67 1330.04 3046 1332.74 3046 1339.58 c
-3046 1387.64 l
-3046 1388.54 3048.43 1391.6 3050.37 1393.58 c
-3054.33 1396.64 3057.57 1398.16 3060.81 1398.16 c
-3067.65 1398.16 3070 1393.82 3070 1383.14 c
-3070 1339.58 l
-3070 1332.02 3068.1 1329.86 3061.53 1329.32 c
-3061.53 1325 l
-3104.37 1325 l
-3104.37 1329 l
-3097.35 1329.37 3095 1331.6 3095 1339.58 c
-3095 1384.76 l
-3095 1400.24 3085.6 1410.16 3071.07 1410.16 c
-3060.81 1410.16 3053.97 1406.01 3044.61 1394.48 c
-3039.21 1405.82 3032.91 1410.16 3021.57 1410.16 c
-3010.2 1410.16 3002.21 1405.29 2995.46 1394.48 c
-h
-3107.94 1325 m
-f*
-3180.36 1347.5 m
-3172.98 1338.68 3167.58 1335.48 3159.84 1335.48 c
-3153 1335.48 3147.6 1338.53 3144 1344.62 c
-3140.58 1350.36 3139.14 1356.45 3138.42 1369 c
-3183.78 1369 l
-3182.7 1383.99 3180 1392.3 3174.42 1399.34 c
-3168.66 1406.36 3160.2 1410.16 3150.12 1410.16 c
-3127.62 1410.16 3112.5 1392.33 3112.5 1366.04 c
-3112.5 1339.76 3127.26 1322.48 3149.58 1322.48 c
-3164.16 1322.48 3172.98 1328.06 3184.68 1344.98 c
-h
-3137.52 1376 m
-3138.06 1397.42 3141.3 1404.16 3150.12 1404.16 c
-3155.34 1404.16 3158.58 1401.42 3160.02 1396.1 c
-3160.92 1392.68 3161.28 1387.64 3161.64 1378.46 c
-3161.64 1376 l
-h
-3187.92 1325 m
-f*
-1 i
-2272.55 1289.75 914.4 15.5999 re
-f
-0.2 i
-3784.26 5016.36 m
-3773.64 5005.2 3767.88 5000.88 3759.06 4997.46 c
-3753.84 4995.3 3747.9 4994.58 3742.86 4994.58 c
-3730.98 4994.58 3719.64 5000.74 3714.42 5009.88 c
-3709.2 5019.42 3707 5032.2 3707 5050.38 c
-3707 5087.64 3718.23 5107.7 3739.8 5107.7 c
-3748.26 5107.7 3756 5104.38 3763.74 5097.36 c
-3771.48 5090.52 3775.62 5084.4 3781.92 5070.72 c
-3786.42 5070.72 l
-3786.42 5113.16 l
-3781.56 5113.16 l
-3778.86 5106.43 3777.06 5104.56 3773.64 5104.56 c
-3771.84 5104.56 3769.5 5105.28 3765.36 5107.08 c
-3754.92 5111.4 3746.1 5113.7 3737.46 5113.7 c
-3701.64 5113.7 3675 5085.84 3675 5048.76 c
-3675 5011.68 3701.21 4985.58 3738.54 4985.58 c
-3759.24 4985.58 3771.48 4991.88 3789.66 5011.86 c
-h
-3795.96 4989 m
-f*
-3859.18 4986.66 m
-3866.78 4989.36 3871.02 4990.08 3882.5 4991.34 c
-3893.66 4992.6 l
-3893.66 4997 l
-3885.74 4997.35 3884 4999.63 3884 5007.18 c
-3884 5072 l
-3847.4 5072 l
-3847.4 5067.66 l
-3856.4 5066.94 3859 5064.78 3859 5057.04 c
-3859 5006.1 l
-3852.88 5000.16 3849.18 4998.48 3843.8 4998.48 c
-3836.42 4998.48 3834 5002 3834 5010.96 c
-3834 5072 l
-3799.88 5072 l
-3799.88 5067.66 l
-3807.26 5066.22 3809 5064.6 3809 5057.04 c
-3809 5011.68 l
-3809 4995.84 3817.89 4986.48 3832.64 4986.48 c
-3842.16 4986.48 3848.56 4989.36 3859.18 4998.36 c
-h
-3897.08 4989 m
-f*
-3935.28 5072 m
-3901.22 5072 l
-3901.22 5067.66 l
-3908.96 5066.58 3911 5064.24 3911 5057.04 c
-3911 5004.12 l
-3911 4996.74 3909.19 4994.76 3901.22 4993.32 c
-3901.22 4989 l
-3949.1 4989 l
-3949.1 4993.32 l
-3938.12 4994.04 3936 4996.38 3936 5007.54 c
-3936 5041.56 l
-3936 5050.92 3941.02 5058.66 3946.94 5058.66 c
-3948.38 5058.66 3950 5057.4 3951.98 5054.52 c
-3955.4 5049.66 3958.1 5048.04 3962.78 5048.04 c
-3969.44 5048.04 3974.12 5053.08 3974.12 5059.92 c
-3974.12 5068.2 3968 5074.16 3959.54 5074.16 c
-3950.55 5074.16 3943.73 5069.47 3935.28 5057.22 c
-h
-3975.92 4989 m
-f*
-4016.28 5072 m
-3982.22 5072 l
-3982.22 5067.66 l
-3989.96 5066.58 3992 5064.24 3992 5057.04 c
-3992 5004.12 l
-3992 4996.74 3990.19 4994.76 3982.22 4993.32 c
-3982.22 4989 l
-4030.1 4989 l
-4030.1 4993.32 l
-4019.12 4994.04 4017 4996.38 4017 5007.54 c
-4017 5041.56 l
-4017 5050.92 4022.02 5058.66 4027.94 5058.66 c
-4029.38 5058.66 4031 5057.4 4032.98 5054.52 c
-4036.4 5049.66 4039.1 5048.04 4043.78 5048.04 c
-4050.44 5048.04 4055.12 5053.08 4055.12 5059.92 c
-4055.12 5068.2 4049 5074.16 4040.54 5074.16 c
-4031.55 5074.16 4024.73 5069.47 4016.28 5057.22 c
-h
-4056.92 4989 m
-f*
-4128.36 5011.5 m
-4120.98 5002.68 4115.58 4999.48 4107.84 4999.48 c
-4101 4999.48 4095.6 5002.53 4092 5008.62 c
-4088.58 5014.36 4087.14 5020.45 4086.42 5033 c
-4131.78 5033 l
-4130.7 5047.99 4128 5056.3 4122.42 5063.34 c
-4116.66 5070.36 4108.2 5074.16 4098.12 5074.16 c
-4075.62 5074.16 4060.5 5056.33 4060.5 5030.04 c
-4060.5 5003.76 4075.26 4986.48 4097.58 4986.48 c
-4112.16 4986.48 4120.98 4992.06 4132.68 5008.98 c
-h
-4085.52 5040 m
-4086.06 5061.42 4089.3 5068.16 4098.12 5068.16 c
-4103.34 5068.16 4106.58 5065.42 4108.02 5060.1 c
-4108.92 5056.68 4109.28 5051.64 4109.64 5042.46 c
-4109.64 5040 l
-h
-4135.92 4989 m
-f*
-4173.82 5072 m
-4139.78 5072 l
-4139.78 5067.66 l
-4147.7 5066.4 4149 5064.6 4149 5057.04 c
-4149 5004.12 l
-4149 4996.56 4147.61 4994.94 4139.78 4993.32 c
-4139.78 4989 l
-4183.16 4989 l
-4183.16 4993.32 l
-4176.5 4994.22 4174 4996.92 4174 5003.58 c
-4174 5051.64 l
-4174 5052.36 4175.4 5054.16 4177.4 5055.96 c
-4181.36 5059.92 4185.68 5062.16 4190 5062.16 c
-4196.12 5062.16 4199 5057.27 4199 5047.14 c
-4199 5003.58 l
-4199 4996.92 4196.71 4994.04 4190.72 4993.32 c
-4190.72 4989 l
-4233.02 4989 l
-4233.02 4993.32 l
-4226 4993.86 4224 4996.02 4224 5003.58 c
-4224 5048.76 l
-4224 5064.24 4214.54 5074.16 4199.9 5074.16 c
-4188.96 5074.16 4180.57 5069.11 4173.82 5058.48 c
-h
-4236.08 4989 m
-f*
-4290.9 5072 m
-4274 5072 l
-4274 5102.4 l
-4269.48 5102.4 l
-4258.5 5086.92 4251.3 5078.82 4239.6 5068.92 c
-4239.6 5064 l
-4249 5064 l
-4249 5005.74 l
-4249 4994.04 4256.73 4986.84 4269.12 4986.84 c
-4281.18 4986.84 4288.38 4992.24 4295.76 5007 c
-4291.26 5008.98 l
-4287.66 5002.14 4284.78 4999.84 4281 4999.84 c
-4275.96 4999.84 4274 5002.83 4274 5009.88 c
-4274 5064 l
-4290.9 5064 l
-h
-4295.94 4989 m
-f*
-4341 4989 m
-f*
-4445.94 5111 m
-4343.88 5111 l
-4343.88 5106 l
-4356.3 5105.29 4360 5102.63 4360 5093.4 c
-4360 5006.28 l
-4360 4996.92 4357.44 4994.94 4343.88 4993.5 c
-4343.88 4989 l
-4408.68 4989 l
-4408.68 4994 l
-4392.12 4994.69 4389 4996.77 4389 5006.28 c
-4389 5048.22 l
-4407.28 5047.86 4413.91 5041.2 4416.42 5020.32 c
-4420.92 5020.32 l
-4420.92 5081.16 l
-4416.42 5081.16 l
-4413.19 5060.64 4406.92 5054.34 4389 5054.34 c
-4389 5096.1 l
-4389 5102.76 4391.32 5105 4400.4 5105 c
-4417.14 5105 4427.58 5101.8 4433.16 5095.2 c
-4437.12 5090.7 4439.1 5085.84 4441.62 5074.5 c
-4445.94 5074.5 l
-h
-4450.98 4989 m
-f*
-4490.28 5072 m
-4456.22 5072 l
-4456.22 5067.66 l
-4463.96 5066.58 4466 5064.24 4466 5057.04 c
-4466 5004.12 l
-4466 4996.74 4464.19 4994.76 4456.22 4993.32 c
-4456.22 4989 l
-4504.1 4989 l
-4504.1 4993.32 l
-4493.12 4994.04 4491 4996.38 4491 5007.54 c
-4491 5041.56 l
-4491 5050.92 4496.02 5058.66 4501.94 5058.66 c
-4503.38 5058.66 4505 5057.4 4506.98 5054.52 c
-4510.4 5049.66 4513.1 5048.04 4517.78 5048.04 c
-4524.44 5048.04 4529.12 5053.08 4529.12 5059.92 c
-4529.12 5068.2 4523 5074.16 4514.54 5074.16 c
-4505.55 5074.16 4498.73 5069.47 4490.28 5057.22 c
-h
-4530.92 4989 m
-f*
-4616.14 5000.52 m
-4614.34 4998.72 l
-4613.8 4998.18 4613.26 4998 4612.36 4998 c
-4609.84 4998 4609 4999.44 4609 5002.5 c
-4609 5049.48 l
-4609 5064.78 4595.16 5074.16 4572.94 5074.16 c
-4552.6 5074.16 4538.92 5064.97 4538.92 5051.46 c
-4538.92 5043.9 4543.24 5039.58 4550.62 5039.58 c
-4557.82 5039.58 4562.86 5043.9 4562.86 5050.02 c
-4562.86 5052.54 4561.96 5054.88 4559.62 5057.76 c
-4558 5059.56 4557.46 5060.64 4557.46 5061.72 c
-4557.46 5065.5 4562.32 5068.16 4568.8 5068.16 c
-4579.42 5068.16 4584 5063.37 4584 5052.54 c
-4584 5039.4 l
-4562.89 5032.92 4554.41 5029.68 4547.56 5025.18 c
-4539.46 5019.78 4536 5013.48 4536 5005.56 c
-4536 4994.58 4544.07 4986.48 4555.3 4986.48 c
-4565.74 4986.48 4574.02 4990.08 4583.92 4999.08 c
-4585.9 4989.9 4589.86 4986.48 4598.68 4986.48 c
-4606.42 4986.48 4612 4989.36 4618.84 4996.74 c
-h
-4584 5007 m
-4579.04 5001.42 4575.37 4999.26 4570.96 4999.26 c
-4565.56 4999.26 4562 5004.12 4562 5011.32 c
-4562 5021.76 4569.57 5029.14 4584 5033.1 c
-h
-4621 4989 m
-f*
-4658.46 5072 m
-4623.73 5072 l
-4623.73 5067.66 l
-4631.65 5066.58 4634 5064.42 4634 5057.04 c
-4634 5004.12 l
-4634 4996.74 4631.95 4994.76 4623.73 4993.32 c
-4623.73 4989 l
-4666.93 4989 l
-4666.93 4993.32 l
-4660.63 4994.22 4659 4996.74 4659 5003.58 c
-4659 5051.64 l
-4659 5052.54 4661.51 5055.78 4663.51 5057.76 c
-4667.29 5060.64 4670.53 5062.16 4673.77 5062.16 c
-4680.79 5062.16 4684 5058 4684 5047.14 c
-4684 5003.58 l
-4684 4996.2 4681.9 4993.86 4674.85 4993.32 c
-4674.85 4989 l
-4716.97 4989 l
-4716.97 4993.32 l
-4710.67 4994.04 4709 4996.74 4709 5003.58 c
-4709 5051.64 l
-4709 5052.54 4711.43 5055.6 4713.37 5057.58 c
-4717.33 5060.64 4720.57 5062.16 4723.81 5062.16 c
-4730.65 5062.16 4733 5057.82 4733 5047.14 c
-4733 5003.58 l
-4733 4996.02 4731.1 4993.86 4724.53 4993.32 c
-4724.53 4989 l
-4767.37 4989 l
-4767.37 4993 l
-4760.35 4993.37 4758 4995.6 4758 5003.58 c
-4758 5048.76 l
-4758 5064.24 4748.6 5074.16 4734.07 5074.16 c
-4723.81 5074.16 4716.97 5070.01 4707.61 5058.48 c
-4702.21 5069.82 4695.91 5074.16 4684.57 5074.16 c
-4673.2 5074.16 4665.21 5069.29 4658.46 5058.48 c
-h
-4770.94 4989 m
-f*
-4843.36 5011.5 m
-4835.98 5002.68 4830.58 4999.48 4822.84 4999.48 c
-4816 4999.48 4810.6 5002.53 4807 5008.62 c
-4803.58 5014.36 4802.14 5020.45 4801.42 5033 c
-4846.78 5033 l
-4845.7 5047.99 4843 5056.3 4837.42 5063.34 c
-4831.66 5070.36 4823.2 5074.16 4813.12 5074.16 c
-4790.62 5074.16 4775.5 5056.33 4775.5 5030.04 c
-4775.5 5003.76 4790.26 4986.48 4812.58 4986.48 c
-4827.16 4986.48 4835.98 4992.06 4847.68 5008.98 c
-h
-4800.52 5040 m
-4801.06 5061.42 4804.3 5068.16 4813.12 5068.16 c
-4818.34 5068.16 4821.58 5065.42 4823.02 5060.1 c
-4823.92 5056.68 4824.28 5051.64 4824.64 5042.46 c
-4824.64 5040 l
-h
-4850.92 4989 m
-f*
-1 i
-3665.75 4954.55 1184.4 15.5999 re
-f
-1 g
-4048.55 4732.55 m
-4130.15 4732.55 l
-4130.15 4581.35 l
-4295.75 4581.35 l
-4295.75 4732.55 l
-4378.55 4732.55 l
-4211.75 4886.15 l
-f*
-0 g
-4048.55 4732.55 m
-4130.15 4732.55 l
-4130.15 4581.35 l
-4295.75 4581.35 l
-4295.75 4732.55 l
-4378.55 4732.55 l
-4211.75 4886.15 l
-4048.55 4732.55 l
-4073.75 4742.15 l
-4211.75 4871.75 l
-4353.35 4742.15 l
-4286.15 4742.15 l
-4286.15 4590.95 l
-4139.75 4590.95 l
-4139.75 4742.15 l
-4073.75 4742.15 l
-4048.55 4732.55 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 4331 a FG(Figure)35 b(7:)50 b(A)34 b(F)-8
-b(rameSet)36 b(is)f(a)g(net)m(w)m(ork)g(of)g(F)-8 b(rames)35
-b(in)m(ter-connected)h(b)m(y)f(Mappings)f(suc)m(h)g(that)i(there)e(is)0
-4444 y(exactly)e(one)f(con)m(v)m(ersion)g(path,)g Fx(via)f
-FG(Mappings,)h(b)s(et)m(w)m(een)g(an)m(y)f(pair)h(of)f(F)-8
-b(rames.)p eop end
-%%Page: 11 21
-TeXDict begin 11 20 bop 0 52 a Fz(2.6)92 b(Input/Output)28
-b(F)-8 b(acilities)2547 b FG(11)0 351 y(them.)43 b(In)30
-b(this)h(con)m(text,)j(the)d(base)g(F)-8 b(rame)32 b(represen)m(ts)f
-(the)h(\\nativ)m(e")h(co)s(ordinate)f(system)f(\(for)h(example,)0
-464 y(the)43 b(pixel)h(co)s(ordinates)g(of)f(an)g(image\).)81
-b(Similarly)-8 b(,)48 b(one)43 b(F)-8 b(rame)44 b(is)f(termed)h(the)f
-Fx(curr)-5 b(ent)44 b FG(F)-8 b(rame)44 b(and)0 577 y(represen)m(ts)39
-b(the)g(\\curren)m(tly-selected")j(co)s(ordinates.)68
-b(It)39 b(migh)m(t,)k(t)m(ypically)-8 b(,)43 b(b)s(e)c(a)g(celestial)j
-(or)d(sp)s(ectral)0 690 y(co)s(ordinate)30 b(system)g(and)f(w)m(ould)g
-(b)s(e)g(used)g(during)f(in)m(teractions)j(with)f(a)f(user,)h(as)f
-(when)g(plotting)h(axes)h(on)0 803 y(a)h(graph)f(or)g(pro)s(ducing)g(a)
-h(table)g(of)g(results.)44 b(Other)31 b(F)-8 b(rames)32
-b(within)f(the)h(F)-8 b(rameSet)32 b(represen)m(t)g(a)g(library)0
-916 y(of)f(alternativ)m(e)h(co)s(ordinate)g(systems)e(whic)m(h)g(a)h
-(soft)m(w)m(are)h(user)d(can)i(select)h(b)m(y)e(making)h(them)f(curren)
-m(t.)0 1063 y FE(F)-9 b(urther)41 b(reading:)52 b FG(F)-8
-b(or)37 b(a)f(more)h(complete)g(description)f(of)g(F)-8
-b(rameSets,)39 b(see)e Fu(x)p FG(13)g(and)e Fu(x)p FG(14.)59
-b(Also)37 b(see)0 1176 y(the)31 b(F)-8 b(rameSet)31 b(en)m(try)g(in)f
-(App)s(endix)e(D.)0 1447 y Fw(2.6)112 b(Input/Output)38
-b(F)-9 b(acilities)0 1653 y FG(AST)44 b(allo)m(ws)h(y)m(ou)g(to)g(con)m
-(v)m(ert)h(an)m(y)f(kind)e(of)i(Ob)5 b(ject)44 b(in)m(to)h(a)g(stream)g
-(of)f(text)h(whic)m(h)g(con)m(tains)g(a)g(full)0 1766
-y(description)32 b(of)g(that)h(Ob)5 b(ject.)45 b(This)31
-b(text)i(ma)m(y)g(b)s(e)e(written)h(out)g(b)m(y)g(one)g(program)g(and)f
-(read)h(bac)m(k)h(in)f(b)m(y)0 1879 y(another,)f(th)m(us)f(allo)m(wing)
-i(the)e(original)i(Ob)5 b(ject)31 b(to)g(b)s(e)e(reconstructed.)0
-2027 y(The)35 b(\014lter)h(whic)m(h)g(con)m(v)m(erts)h(Ob)5
-b(jects)35 b(in)m(to)i(text)g(and)e(bac)m(k)i(again)f(is)g(itself)h(a)f
-(kind)f(of)h(Ob)5 b(ject,)37 b(called)g(a)0 2139 y(Channel.)i(A)26
-b(Channel)g(pro)m(vides)g(a)h(n)m(um)m(b)s(er)e(of)h(options)h(for)f
-(con)m(trolling)i(the)f(information)g(con)m(ten)m(t)h(of)e(the)0
-2252 y(text,)k(suc)m(h)e(as)h(the)f(addition)h(of)f(commen)m(ts)i(for)e
-(h)m(uman)f(in)m(terpretation.)42 b(It)28 b(is)h(also)g(p)s(ossible)f
-(to)h(in)m(tercept)0 2365 y(the)e(text)i(b)s(eing)e(pro)s(cessed)f(b)m
-(y)i(a)f(Channel)g(so)g(that)h(it)g(ma)m(y)g(b)s(e)e(redirected)i
-(to/from)g(an)m(y)g(c)m(hosen)g(external)0 2478 y(data)j(store,)g(suc)m
-(h)f(as)h(a)g(text)g(\014le,)g(an)f(astronomical)i(dataset,)g(or)f(a)f
-(net)m(w)m(ork)h(connection.)0 2626 y(The)42 b(text)i(format)f(used)e
-(b)m(y)i(the)g(basic)g(Channel)e(class)j(is)e(p)s(eculiar)h(to)g(the)g
-(AST)f(library)g(-)h(no)f(other)0 2739 y(soft)m(w)m(are)28
-b(will)f(understand)e(it.)40 b(Ho)m(w)m(ev)m(er,)30 b(more)d(sp)s
-(ecialised)h(forms)e(of)h(Channel)f(are)h(pro)m(vided)f(whic)m(h)h(use)
-0 2852 y(text)k(formats)g(more)f(widely)h(understo)s(o)s(d.)0
-2999 y(T)-8 b(o)37 b(further)f(facilitate)k(the)d(storage)h(of)g(co)s
-(ordinate)f(system)g(information)h(in)e(astronomical)j(datasets,)h(a)0
-3112 y(more)d(sp)s(ecialised)g(form)f(of)h(Channel)e(called)j(a)f
-(FitsChan)f(is)h(pro)m(vided.)59 b(Instead)36 b(of)h(using)f
-(free-format)0 3225 y(text,)46 b(a)c(FitsChan)g(con)m(v)m(erts)h(AST)e
-(Ob)5 b(jects)42 b(to)g(and)g(from)f(FITS)g(header)h(cards.)74
-b(It)42 b(also)h(allo)m(ws)g(the)0 3338 y(information)36
-b(to)g(b)s(e)f(enco)s(ded)h(in)f(the)h(FITS)f(cards)h(in)f(a)h(n)m(um)m
-(b)s(er)e(of)i(w)m(a)m(ys)h(\(called)g Fx(enc)-5 b(o)g(dings)p
-FG(\),)39 b(so)d(that)0 3451 y(W)m(CS)30 b(information)h(from)f(a)h(v)
--5 b(ariet)m(y)31 b(of)g(sources)f(can)h(b)s(e)f(handled.)0
-3598 y(Another)41 b(sub-class)g(of)g(Channel,)i(called)f(XmlChan,)h(is)
-f(a)f(sp)s(ecialised)h(form)e(of)h(Channel)f(that)i(stores)0
-3711 y(the)g(text)g(in)f(the)h(form)f(of)h(XML)g(markup.)73
-b(Curren)m(tly)-8 b(,)44 b(t)m(w)m(o)f(markup)d(formats)i(are)g(pro)m
-(vided)f(b)m(y)g(the)0 3824 y(XmlChan)35 b(class,)i(one)f(is)f(closely)
-i(related)f(to)g(the)g(text)g(format)g(pro)s(duced)e(b)m(y)h(the)g
-(basic)h(Channel)f(class)0 3937 y(\(curren)m(tly)-8 b(,)34
-b(no)f(sc)m(hema)g(or)f(DTD)h(is)g(a)m(v)-5 b(ailable)35
-b(describing)d(this)h(format\).)48 b(The)32 b(other)g(is)h(a)g(subset)f
-(of)h(an)0 4050 y(early)j(draft)e(of)h(the)h(IV)m(O)m(A)f
-(Space-Time-Co)s(ordinates)h(XML)g(\(STC-X\))f(sc)m(hema)g(\(V1.20\))j
-(describ)s(ed)c(at)0 4163 y(h)m(ttp://www.iv)m(oa.net/Do)s(cumen)m
-(ts/WD/STC/STC-200502)q(25)q(.h)m(tml)2605 4130 y Fv(3)2644
-4163 y FG(.)40 b(The)29 b(v)m(ersion)g(of)g(STC-X)f(that)0
-4276 y(has)k(b)s(een)f(adopted)h(b)m(y)g(the)g(IV)m(O)m(A)h(di\013ers)e
-(in)h(sev)m(eral)h(signi\014can)m(t)g(resp)s(ects)f(from)f(V1.20,)k
-(and)c(therefore)0 4389 y(this)f(XmlChan)g(format)h(is)f(of)h
-(historical)g(in)m(terest)h(only)-8 b(.)0 4536 y(Finally)g(,)37
-b(the)e(StcsChan)f(class)i(pro)m(vides)e(facilities)j(for)e(reading)f
-(and)h(writing)f(IV)m(O)m(A)i(STC-S)d(region)i(de-)0
-4649 y(scriptions.)48 b(STC-S)31 b(\(see)67 b(h)m(ttp://www.iv)m
-(oa.net/Do)s(cumen)m(ts/latest/STC-S.h)m(tml\))38 b(is)33
-b(a)g(linear)g(string)0 4762 y(syn)m(tax)e(that)g(allo)m(ws)h(simple)e
-(sp)s(eci\014cation)h(of)g(STC)e(metadata.)42 b(AST)30
-b(supp)s(orts)e(a)j(subset)f(of)g(the)h(STC-S)0 4875
-y(sp)s(eci\014cation,)f(allo)m(wing)h(an)e(STC-S)f(description)h(of)g
-(a)h(region)f(within)g(an)g(AST-supp)s(orted)e(astronomical)0
-4988 y(co)s(ordinate)k(system)g(to)g(b)s(e)f(con)m(v)m(erted)h(in)m(to)
-h(an)e(equiv)-5 b(alen)m(t)32 b(AST)e(Region)h(ob)5 b(ject,)31
-b(and)f(vice-v)m(ersa.)0 5135 y FE(F)-9 b(urther)35 b(reading:)40
-b FG(F)-8 b(or)31 b(a)g(more)g(complete)g(description)g(of)f(Channels)g
-(see)g Fu(x)p FG(15)i(and)e(for)g(FitsChans)g(see)0 5248
-y Fu(x)p FG(16)e(and)e Fu(x)p FG(17.)41 b(Also)27 b(see)h(the)f
-(Channel)f(and)g(FitsChan)h(en)m(tries)g(in)g(App)s(endix)e(D)i(and)f
-(the)h(Enco)s(ding)f(en)m(try)0 5361 y(in)k(App)s(endix)f(C.)p
-0 5425 1512 4 v 104 5479 a Fs(3)138 5510 y Fr(XML)19
-b(do)r(cumen)n(ts)g(whic)n(h)g(use)g(only)g(the)g(subset)g(of)g(the)g
-(STC)h(sc)n(hema)f(supp)r(orted)g(b)n(y)f(AST)g(can)i(b)r(e)e(read)i(b)
-n(y)e(the)g(XmlChan)0 5602 y(class)31 b(to)f(pro)r(duce)f(corresp)r
-(onding)i(AST)e(ob)t(jects)i(\(sub)r(classes)g(of)g(the)e(Stc)g
-(class\).)48 b(Ho)n(w)n(ev)n(er,)31 b(the)e(rev)n(erse)h(is)g(not)g(p)r
-(ossible.)0 5693 y(That)c(is,)h(AST)e(ob)t(jects)i(can)e(not)h(curren)n
-(tly)f(b)r(e)g(written)h(out)g(in)g(the)f(form)h(of)h(STC)f(do)r(cumen)
-n(ts.)p eop end
-%%Page: 12 22
-TeXDict begin 12 21 bop 0 52 a FG(12)2126 b Fz(2)92 b(O)m(VER)-10
-b(VIEW)30 b(OF)h(AST)e(CONCEPTS)720 260 y
- gsave currentpoint currentpoint translate -90 neg rotate neg exch neg exch translate
- 720 260 a @beginspecial
-97 @llx 220 @lly 409 @urx 571 @ury 2496 @rwi @setspecial
-%%BeginDocument: sun210_figures/gridplot_bw.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 97 220 409 571
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:41:51
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2984 3317 l
-2985 3318 l
-2986 3319 l
-2987 3319 l
-2988 3320 l
-2990 3320 l
-2991 3321 l
-3005 3329 l
-3020 3338 l
-3034 3347 l
-3049 3356 l
-3063 3365 l
-3077 3375 l
-3091 3385 l
-3105 3395 l
-3118 3405 l
-3132 3415 l
-3145 3426 l
-3158 3436 l
-3171 3447 l
-3184 3459 l
-3197 3470 l
-3209 3482 l
-3222 3493 l
-3234 3505 l
-3246 3517 l
-3257 3530 l
-3269 3542 l
-3280 3555 l
-3291 3568 l
-3302 3581 l
-3313 3594 l
-3324 3607 l
-3334 3621 l
-3344 3634 l
-3354 3648 l
-3364 3662 l
-3373 3676 l
-3382 3691 l
-3391 3705 l
-3400 3720 l
-3409 3735 l
-3417 3750 l
-3425 3765 l
-3433 3780 l
-3441 3795 l
-3448 3810 l
-3455 3826 l
-3462 3842 l
-3469 3858 l
-3475 3873 l
-3481 3890 l
-3487 3906 l
-3492 3922 l
-3497 3938 l
-3502 3955 l
-3507 3971 l
-3512 3988 l
-3516 4005 l
-3519 4022 l
-3523 4039 l
-3526 4056 l
-3529 4073 l
-3532 4090 l
-3534 4107 l
-3536 4125 l
-3538 4142 l
-3539 4159 l
-3540 4177 l
-3541 4194 l
-3541 4212 l
-3541 4230 l
-3541 4247 l
-3541 4265 l
-3540 4283 l
-3538 4301 l
-3537 4318 l
-3535 4336 l
-3532 4354 l
-3529 4372 l
-3526 4390 l
-3523 4407 l
-3519 4425 l
-3515 4443 l
-3510 4461 l
-3505 4479 l
-3500 4496 l
-3494 4514 l
-3488 4531 l
-3481 4549 l
-3474 4567 l
-3467 4584 l
-3459 4601 l
-3451 4618 l
-3442 4636 l
-3433 4653 l
-3423 4670 l
-3413 4686 l
-3403 4703 l
-3392 4720 l
-3381 4736 l
-3369 4752 l
-3357 4768 l
-3344 4784 l
-3331 4800 l
-3318 4815 l
-3304 4831 l
-3289 4846 l
-3274 4860 l
-3259 4875 l
-3243 4889 l
-3227 4903 l
-3210 4917 l
-3193 4931 l
-3175 4944 l
-3157 4956 l
-3138 4969 l
-3119 4981 l
-3100 4993 l
-3080 5004 l
-3059 5015 l
-3038 5025 l
-3017 5035 l
-2995 5045 l
-2973 5054 l
-2951 5063 l
-2928 5071 l
-2904 5078 l
-2880 5085 l
-2856 5092 l
-2832 5098 l
-2807 5103 l
-2782 5108 l
-2756 5112 l
-2730 5115 l
-2704 5118 l
-2678 5120 l
-2651 5121 l
-2624 5122 l
-2597 5122 l
-2569 5121 l
-2542 5120 l
-2514 5117 l
-2487 5114 l
-2459 5110 l
-2431 5106 l
-2403 5100 l
-2375 5094 l
-2347 5087 l
-2319 5079 l
-2292 5071 l
-2264 5061 l
-2237 5051 l
-2235 5050 l
-2233 5050 l
-2231 5049 l
-2229 5048 l
-2227 5047 l
-2225 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2983 3318 l
-2983 3319 l
-2983 3320 l
-2984 3321 l
-2984 3322 l
-2984 3323 l
-2984 3324 l
-2985 3337 l
-2986 3351 l
-2987 3364 l
-2988 3378 l
-2989 3392 l
-2990 3406 l
-2991 3420 l
-2991 3434 l
-2992 3448 l
-2992 3462 l
-2992 3476 l
-2992 3490 l
-2992 3504 l
-2992 3518 l
-2992 3533 l
-2992 3547 l
-2992 3561 l
-2991 3576 l
-2991 3590 l
-2990 3605 l
-2989 3619 l
-2988 3634 l
-2988 3648 l
-2986 3663 l
-2985 3678 l
-2984 3692 l
-2983 3707 l
-2982 3722 l
-2980 3736 l
-2978 3751 l
-2977 3766 l
-2975 3780 l
-2973 3795 l
-2971 3810 l
-2969 3825 l
-2967 3839 l
-2965 3854 l
-2963 3869 l
-2961 3884 l
-2958 3899 l
-2956 3913 l
-2953 3928 l
-2950 3943 l
-2948 3958 l
-2945 3972 l
-2942 3987 l
-2939 4002 l
-2936 4016 l
-2933 4031 l
-2929 4046 l
-2926 4060 l
-2923 4075 l
-2919 4089 l
-2916 4104 l
-2912 4119 l
-2908 4133 l
-2904 4147 l
-2900 4162 l
-2897 4176 l
-2893 4191 l
-2888 4205 l
-2884 4219 l
-2880 4233 l
-2876 4247 l
-2871 4262 l
-2867 4276 l
-2862 4290 l
-2858 4304 l
-2853 4317 l
-2848 4331 l
-2843 4345 l
-2838 4359 l
-2833 4372 l
-2828 4386 l
-2823 4400 l
-2818 4413 l
-2812 4426 l
-2807 4440 l
-2802 4453 l
-2796 4466 l
-2790 4479 l
-2785 4492 l
-2779 4505 l
-2773 4518 l
-2767 4531 l
-2761 4543 l
-2755 4556 l
-2749 4568 l
-2743 4581 l
-2737 4593 l
-2730 4605 l
-2724 4617 l
-2717 4629 l
-2711 4641 l
-2704 4653 l
-2697 4664 l
-2691 4676 l
-2684 4687 l
-2677 4699 l
-2670 4710 l
-2662 4721 l
-2655 4732 l
-2648 4743 l
-2641 4753 l
-2633 4764 l
-2626 4774 l
-2618 4785 l
-2610 4795 l
-2602 4805 l
-2594 4815 l
-2586 4825 l
-2578 4834 l
-2570 4844 l
-2562 4853 l
-2554 4862 l
-2545 4871 l
-2537 4880 l
-2528 4888 l
-2519 4897 l
-2510 4905 l
-2501 4913 l
-2492 4921 l
-2483 4929 l
-2474 4937 l
-2464 4944 l
-2455 4951 l
-2445 4958 l
-2435 4965 l
-2425 4972 l
-2415 4978 l
-2405 4984 l
-2394 4990 l
-2384 4996 l
-2373 5001 l
-2362 5006 l
-2351 5011 l
-2340 5016 l
-2328 5020 l
-2317 5025 l
-2305 5028 l
-2293 5032 l
-2281 5035 l
-2268 5038 l
-2256 5041 l
-2243 5043 l
-2230 5045 l
-2229 5045 l
-2228 5045 l
-2227 5045 l
-2226 5045 l
-2225 5045 l
-2224 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2982 3317 l
-2981 3318 l
-2980 3318 l
-2979 3318 l
-2978 3319 l
-2977 3319 l
-2976 3320 l
-2963 3325 l
-2950 3331 l
-2936 3336 l
-2923 3342 l
-2910 3348 l
-2896 3355 l
-2883 3361 l
-2870 3368 l
-2857 3374 l
-2844 3381 l
-2831 3388 l
-2818 3396 l
-2805 3403 l
-2792 3410 l
-2779 3418 l
-2766 3426 l
-2754 3434 l
-2741 3442 l
-2728 3450 l
-2716 3458 l
-2703 3467 l
-2691 3475 l
-2678 3484 l
-2666 3493 l
-2654 3502 l
-2642 3511 l
-2630 3520 l
-2618 3529 l
-2606 3539 l
-2594 3548 l
-2582 3558 l
-2570 3567 l
-2559 3577 l
-2547 3587 l
-2535 3597 l
-2524 3608 l
-2513 3618 l
-2501 3628 l
-2490 3639 l
-2479 3649 l
-2468 3660 l
-2457 3671 l
-2446 3682 l
-2436 3693 l
-2425 3704 l
-2415 3715 l
-2404 3726 l
-2394 3737 l
-2384 3749 l
-2373 3760 l
-2363 3772 l
-2353 3783 l
-2344 3795 l
-2334 3807 l
-2324 3819 l
-2315 3831 l
-2305 3843 l
-2296 3855 l
-2287 3867 l
-2278 3879 l
-2269 3892 l
-2260 3904 l
-2252 3916 l
-2243 3929 l
-2235 3942 l
-2226 3954 l
-2218 3967 l
-2210 3980 l
-2202 3992 l
-2194 4005 l
-2187 4018 l
-2179 4031 l
-2172 4044 l
-2165 4057 l
-2158 4070 l
-2151 4083 l
-2144 4096 l
-2137 4110 l
-2131 4123 l
-2125 4136 l
-2118 4150 l
-2112 4163 l
-2107 4176 l
-2101 4190 l
-2095 4203 l
-2090 4217 l
-2085 4231 l
-2080 4244 l
-2075 4258 l
-2070 4271 l
-2066 4285 l
-2062 4299 l
-2058 4312 l
-2054 4326 l
-2050 4340 l
-2046 4354 l
-2043 4368 l
-2040 4381 l
-2037 4395 l
-2034 4409 l
-2032 4423 l
-2029 4437 l
-2027 4451 l
-2025 4465 l
-2024 4479 l
-2022 4493 l
-2021 4507 l
-2020 4521 l
-2019 4535 l
-2019 4548 l
-2019 4562 l
-2019 4576 l
-2019 4590 l
-2019 4604 l
-2020 4618 l
-2021 4632 l
-2022 4646 l
-2024 4660 l
-2026 4674 l
-2028 4688 l
-2031 4702 l
-2033 4716 l
-2036 4730 l
-2040 4744 l
-2044 4758 l
-2048 4771 l
-2052 4785 l
-2057 4799 l
-2062 4813 l
-2068 4827 l
-2073 4840 l
-2080 4854 l
-2086 4868 l
-2094 4881 l
-2101 4895 l
-2109 4908 l
-2117 4922 l
-2126 4935 l
-2136 4949 l
-2146 4962 l
-2156 4975 l
-2167 4988 l
-2178 5001 l
-2190 5014 l
-2203 5027 l
-2216 5039 l
-2217 5040 l
-2218 5041 l
-2219 5042 l
-2220 5043 l
-2221 5044 l
-2222 5045 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2982 3316 l
-2981 3316 l
-2980 3315 l
-2979 3315 l
-2978 3314 l
-2977 3313 l
-2976 3313 l
-2961 3305 l
-2946 3297 l
-2930 3290 l
-2915 3282 l
-2899 3275 l
-2884 3268 l
-2868 3262 l
-2852 3256 l
-2836 3250 l
-2820 3244 l
-2804 3238 l
-2788 3233 l
-2772 3228 l
-2755 3223 l
-2739 3219 l
-2722 3214 l
-2706 3210 l
-2689 3207 l
-2672 3203 l
-2656 3200 l
-2639 3197 l
-2622 3194 l
-2605 3192 l
-2588 3190 l
-2571 3188 l
-2554 3187 l
-2537 3185 l
-2520 3185 l
-2502 3184 l
-2485 3184 l
-2468 3184 l
-2451 3184 l
-2433 3184 l
-2416 3185 l
-2399 3186 l
-2382 3188 l
-2364 3190 l
-2347 3192 l
-2330 3194 l
-2313 3197 l
-2295 3200 l
-2278 3203 l
-2261 3207 l
-2244 3211 l
-2227 3215 l
-2210 3220 l
-2193 3225 l
-2176 3231 l
-2159 3236 l
-2143 3242 l
-2126 3249 l
-2109 3255 l
-2093 3263 l
-2076 3270 l
-2060 3278 l
-2044 3286 l
-2028 3294 l
-2012 3303 l
-1996 3313 l
-1980 3322 l
-1965 3332 l
-1949 3342 l
-1934 3353 l
-1919 3364 l
-1904 3376 l
-1889 3388 l
-1875 3400 l
-1860 3412 l
-1846 3425 l
-1832 3439 l
-1818 3452 l
-1805 3466 l
-1792 3481 l
-1779 3496 l
-1766 3511 l
-1753 3527 l
-1741 3543 l
-1729 3559 l
-1718 3576 l
-1707 3593 l
-1696 3611 l
-1685 3629 l
-1675 3647 l
-1665 3666 l
-1655 3685 l
-1646 3704 l
-1638 3724 l
-1629 3744 l
-1621 3765 l
-1614 3786 l
-1607 3807 l
-1600 3828 l
-1594 3850 l
-1589 3873 l
-1584 3895 l
-1579 3918 l
-1576 3941 l
-1572 3965 l
-1569 3989 l
-1567 4013 l
-1566 4037 l
-1565 4061 l
-1564 4086 l
-1564 4111 l
-1565 4136 l
-1567 4162 l
-1569 4187 l
-1572 4213 l
-1576 4239 l
-1580 4265 l
-1585 4291 l
-1591 4317 l
-1598 4343 l
-1605 4369 l
-1613 4395 l
-1622 4421 l
-1632 4447 l
-1642 4473 l
-1653 4499 l
-1665 4524 l
-1678 4550 l
-1691 4575 l
-1705 4600 l
-1720 4625 l
-1736 4649 l
-1753 4673 l
-1770 4697 l
-1788 4720 l
-1806 4743 l
-1826 4765 l
-1846 4787 l
-1866 4808 l
-1888 4829 l
-1909 4849 l
-1932 4869 l
-1955 4888 l
-1978 4907 l
-2002 4924 l
-2027 4941 l
-2052 4958 l
-2077 4973 l
-2103 4988 l
-2129 5002 l
-2156 5016 l
-2182 5028 l
-2209 5040 l
-2211 5041 l
-2213 5042 l
-2215 5043 l
-2217 5043 l
-2219 5044 l
-2221 5045 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2983 3316 l
-2983 3315 l
-2983 3314 l
-2983 3313 l
-2983 3312 l
-2983 3311 l
-2982 3310 l
-2981 3297 l
-2979 3283 l
-2977 3270 l
-2976 3257 l
-2974 3244 l
-2971 3231 l
-2969 3218 l
-2967 3205 l
-2964 3192 l
-2962 3179 l
-2959 3167 l
-2956 3154 l
-2953 3142 l
-2950 3130 l
-2947 3117 l
-2943 3105 l
-2940 3093 l
-2936 3081 l
-2932 3069 l
-2928 3057 l
-2924 3046 l
-2920 3034 l
-2915 3023 l
-2911 3012 l
-2906 3000 l
-2901 2989 l
-2896 2978 l
-2890 2967 l
-2885 2957 l
-2879 2946 l
-2873 2936 l
-2867 2925 l
-2861 2915 l
-2855 2905 l
-2848 2895 l
-2841 2885 l
-2834 2876 l
-2827 2866 l
-2819 2857 l
-2811 2848 l
-2803 2839 l
-2795 2830 l
-2786 2821 l
-2778 2813 l
-2768 2804 l
-2759 2796 l
-2749 2788 l
-2739 2781 l
-2729 2773 l
-2718 2766 l
-2707 2759 l
-2695 2752 l
-2684 2745 l
-2671 2739 l
-2659 2733 l
-2645 2727 l
-2632 2722 l
-2618 2717 l
-2603 2712 l
-2588 2707 l
-2572 2703 l
-2556 2700 l
-2539 2696 l
-2521 2694 l
-2503 2691 l
-2483 2689 l
-2464 2688 l
-2443 2687 l
-2421 2687 l
-2399 2688 l
-2375 2690 l
-2351 2692 l
-2326 2695 l
-2299 2700 l
-2271 2705 l
-2242 2712 l
-2212 2720 l
-2180 2729 l
-2148 2741 l
-2113 2754 l
-2077 2769 l
-2040 2787 l
-2002 2807 l
-1962 2829 l
-1920 2855 l
-1878 2884 l
-1834 2917 l
-1831 2919 l
-1828 2922 l
-1825 2924 l
-1822 2927 l
-1819 2930 l
-1816 2932 l
-1812 2935 l
-1809 2937 l
-1806 2940 l
-1803 2943 l
-1800 2945 l
-1797 2948 l
-1793 2951 l
-1790 2954 l
-1787 2956 l
-1784 2959 l
-1781 2962 l
-1777 2965 l
-1774 2968 l
-1771 2971 l
-1768 2974 l
-1765 2976 l
-1761 2979 l
-1758 2982 l
-1755 2985 l
-1752 2988 l
-1749 2991 l
-1745 2994 l
-1742 2998 l
-1739 3001 l
-1736 3004 l
-1732 3007 l
-1729 3010 l
-1726 3013 l
-1723 3017 l
-1720 3020 l
-1716 3023 l
-1713 3026 l
-1710 3030 l
-1707 3033 l
-1703 3036 l
-1700 3040 l
-1697 3043 l
-1694 3047 l
-1691 3050 l
-1687 3054 l
-1684 3057 l
-1681 3061 l
-1678 3064 l
-1675 3068 l
-1671 3071 l
-1668 3075 l
-1665 3079 l
-1662 3082 l
-1659 3086 l
-1655 3090 l
-1652 3094 l
-1649 3097 l
-1646 3101 l
-1643 3105 l
-1640 3109 l
-1636 3113 l
-1633 3117 l
-1630 3121 l
-1627 3125 l
-1624 3129 l
-1621 3133 l
-1618 3137 l
-1614 3141 l
-1611 3145 l
-1608 3149 l
-1605 3153 l
-1602 3157 l
-1599 3161 l
-1596 3165 l
-1593 3170 l
-1590 3174 l
-1587 3178 l
-1584 3183 l
-1581 3187 l
-1578 3191 l
-1575 3196 l
-1572 3200 l
-1569 3204 l
-1566 3209 l
-1563 3213 l
-1560 3218 l
-1557 3222 l
-1554 3227 l
-1551 3231 l
-1548 3236 l
-1545 3241 l
-1542 3245 l
-1539 3250 l
-1536 3255 l
-1534 3259 l
-1531 3264 l
-1528 3269 l
-1525 3274 l
-1522 3279 l
-1519 3283 l
-1517 3288 l
-1514 3293 l
-S
-1514 3293 m
-1511 3298 l
-1508 3303 l
-1506 3308 l
-1503 3313 l
-1500 3318 l
-1498 3323 l
-1495 3328 l
-1492 3333 l
-1490 3338 l
-1487 3343 l
-1485 3348 l
-1482 3353 l
-1479 3359 l
-1477 3364 l
-1474 3369 l
-1472 3374 l
-1469 3379 l
-1467 3385 l
-1465 3390 l
-1462 3395 l
-1460 3401 l
-1457 3406 l
-1455 3411 l
-1453 3417 l
-1450 3422 l
-1448 3428 l
-1446 3433 l
-1443 3438 l
-1441 3444 l
-1439 3449 l
-1437 3455 l
-1435 3461 l
-1432 3466 l
-1430 3472 l
-1428 3477 l
-1426 3483 l
-1424 3488 l
-1422 3494 l
-1420 3500 l
-1418 3505 l
-1416 3511 l
-1414 3517 l
-1412 3522 l
-1410 3528 l
-1408 3534 l
-1407 3540 l
-1405 3545 l
-1403 3551 l
-1401 3557 l
-1399 3563 l
-1398 3569 l
-1396 3574 l
-1394 3580 l
-1393 3586 l
-1391 3592 l
-1390 3598 l
-1388 3604 l
-1386 3609 l
-1385 3615 l
-1383 3621 l
-1382 3627 l
-1381 3633 l
-1379 3639 l
-1378 3645 l
-1376 3651 l
-1375 3657 l
-1374 3663 l
-1373 3669 l
-1371 3675 l
-1370 3681 l
-1369 3687 l
-1368 3693 l
-1367 3699 l
-1365 3705 l
-1364 3711 l
-1363 3717 l
-1362 3723 l
-1361 3729 l
-1360 3735 l
-1359 3741 l
-1359 3747 l
-1358 3753 l
-1357 3759 l
-1356 3765 l
-1355 3771 l
-1354 3777 l
-1354 3783 l
-1353 3789 l
-1352 3795 l
-1352 3801 l
-1351 3807 l
-1350 3813 l
-1350 3819 l
-1349 3825 l
-1349 3831 l
-1348 3837 l
-1348 3843 l
-1347 3849 l
-1347 3855 l
-1347 3861 l
-1346 3867 l
-1346 3873 l
-1346 3879 l
-1345 3885 l
-1345 3891 l
-1345 3897 l
-1345 3902 l
-1345 3908 l
-1344 3914 l
-1344 3920 l
-1344 3926 l
-1344 3932 l
-1344 3938 l
-1344 3944 l
-1344 3950 l
-1344 3956 l
-1344 3961 l
-1344 3967 l
-1345 3973 l
-1345 3979 l
-1345 3985 l
-1345 3991 l
-1345 3996 l
-1346 4002 l
-1346 4008 l
-1346 4014 l
-1346 4019 l
-1347 4025 l
-1347 4031 l
-1348 4037 l
-1348 4042 l
-1348 4048 l
-1349 4054 l
-1349 4059 l
-1350 4065 l
-1350 4071 l
-1351 4076 l
-1352 4082 l
-1352 4087 l
-1353 4093 l
-1354 4098 l
-1354 4104 l
-1355 4109 l
-1356 4115 l
-1356 4120 l
-1357 4126 l
-1358 4131 l
-1359 4137 l
-1360 4142 l
-1360 4148 l
-1361 4153 l
-1362 4158 l
-1363 4164 l
-1364 4169 l
-1365 4174 l
-1366 4180 l
-1367 4185 l
-1368 4190 l
-1369 4195 l
-1370 4201 l
-1371 4206 l
-1372 4211 l
-1373 4216 l
-1374 4221 l
-1375 4226 l
-1377 4231 l
-1378 4236 l
-1379 4242 l
-1380 4247 l
-1381 4252 l
-1383 4257 l
-1384 4262 l
-1385 4267 l
-1386 4271 l
-1388 4276 l
-1389 4281 l
-1390 4286 l
-1392 4291 l
-1393 4296 l
-1394 4301 l
-1396 4305 l
-1397 4310 l
-1399 4315 l
-1400 4320 l
-1401 4324 l
-1403 4329 l
-1404 4334 l
-1406 4338 l
-1407 4343 l
-1409 4348 l
-1410 4352 l
-1412 4357 l
-1413 4361 l
-1415 4366 l
-1416 4370 l
-1418 4375 l
-1420 4379 l
-1421 4384 l
-1423 4388 l
-S
-1423 4388 m
-1424 4392 l
-1426 4397 l
-1428 4401 l
-1429 4406 l
-1431 4410 l
-1433 4414 l
-1434 4418 l
-1436 4423 l
-1438 4427 l
-1439 4431 l
-1441 4435 l
-1443 4439 l
-1445 4443 l
-1446 4448 l
-1448 4452 l
-1450 4456 l
-1452 4460 l
-1453 4464 l
-1455 4468 l
-1457 4472 l
-1483 4525 l
-1509 4575 l
-1537 4620 l
-1564 4662 l
-1592 4701 l
-1620 4736 l
-1647 4769 l
-1674 4798 l
-1701 4825 l
-1727 4850 l
-1753 4872 l
-1778 4893 l
-1802 4911 l
-1826 4928 l
-1849 4944 l
-1871 4958 l
-1893 4970 l
-1914 4981 l
-1935 4991 l
-1955 5001 l
-1975 5009 l
-1994 5016 l
-2012 5022 l
-2030 5028 l
-2048 5032 l
-2065 5037 l
-2082 5040 l
-2098 5043 l
-2114 5045 l
-2130 5047 l
-2145 5048 l
-2160 5048 l
-2174 5049 l
-2189 5048 l
-2203 5048 l
-2216 5046 l
-2217 5046 l
-2218 5046 l
-2219 5046 l
-2220 5046 l
-2221 5046 l
-2222 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2984 3316 l
-2985 3316 l
-2986 3316 l
-2987 3315 l
-2988 3315 l
-2989 3315 l
-2990 3314 l
-3003 3309 l
-3017 3304 l
-3030 3299 l
-3044 3295 l
-3058 3291 l
-3071 3286 l
-3085 3282 l
-3099 3279 l
-3113 3275 l
-3126 3272 l
-3140 3268 l
-3154 3265 l
-3168 3263 l
-3182 3260 l
-3195 3258 l
-3209 3255 l
-3223 3254 l
-3237 3252 l
-3251 3250 l
-3265 3249 l
-3279 3248 l
-3293 3247 l
-3307 3247 l
-3321 3247 l
-3335 3247 l
-3349 3247 l
-3363 3247 l
-3377 3248 l
-3391 3249 l
-3405 3251 l
-3419 3252 l
-3433 3254 l
-3447 3257 l
-3461 3259 l
-3475 3262 l
-3489 3265 l
-3502 3269 l
-3516 3273 l
-3530 3277 l
-3544 3281 l
-3558 3286 l
-3572 3292 l
-3586 3297 l
-3600 3304 l
-3614 3310 l
-3627 3317 l
-3641 3324 l
-3655 3332 l
-3668 3341 l
-3682 3349 l
-3695 3359 l
-3709 3368 l
-3722 3379 l
-3736 3389 l
-3749 3401 l
-3762 3413 l
-3775 3425 l
-3788 3438 l
-3801 3452 l
-3814 3467 l
-3826 3482 l
-3839 3498 l
-3851 3514 l
-3863 3532 l
-3875 3550 l
-3886 3569 l
-3897 3588 l
-3908 3609 l
-3919 3631 l
-3929 3653 l
-3939 3677 l
-3949 3701 l
-3958 3727 l
-3966 3753 l
-3974 3781 l
-3981 3809 l
-3988 3839 l
-3993 3870 l
-3998 3903 l
-4002 3936 l
-4005 3971 l
-4007 4006 l
-4007 4043 l
-4007 4082 l
-4005 4121 l
-4001 4161 l
-3996 4203 l
-3989 4245 l
-3980 4289 l
-3969 4333 l
-3957 4378 l
-3942 4423 l
-3925 4469 l
-3905 4515 l
-3884 4561 l
-3860 4607 l
-3834 4653 l
-3805 4698 l
-3774 4742 l
-3741 4785 l
-3706 4827 l
-3669 4868 l
-3631 4907 l
-3590 4944 l
-3549 4979 l
-3506 5012 l
-3462 5043 l
-3417 5072 l
-3372 5098 l
-3327 5122 l
-3281 5144 l
-3236 5163 l
-3190 5181 l
-3146 5196 l
-3101 5209 l
-3058 5220 l
-3015 5229 l
-2973 5236 l
-2932 5242 l
-2892 5246 l
-2854 5248 l
-2816 5249 l
-2779 5249 l
-2744 5247 l
-2710 5245 l
-2677 5241 l
-2645 5237 l
-2615 5232 l
-2585 5226 l
-2557 5219 l
-2529 5211 l
-2503 5203 l
-2478 5195 l
-2454 5186 l
-2430 5176 l
-2408 5167 l
-2387 5156 l
-2366 5146 l
-2346 5135 l
-2327 5124 l
-2309 5112 l
-2292 5101 l
-2276 5089 l
-2260 5077 l
-2245 5064 l
-2230 5052 l
-2229 5051 l
-2228 5050 l
-2227 5049 l
-2226 5048 l
-2225 5047 l
-2224 5047 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-3302 3581 m
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3301 3582 l
-3301 3582 l
-3300 3583 l
-3299 3584 l
-3299 3584 l
-3298 3585 l
-3298 3585 l
-3297 3586 l
-3297 3586 l
-3296 3587 l
-3295 3588 l
-3295 3588 l
-3294 3589 l
-3286 3596 l
-3277 3603 l
-3268 3610 l
-3259 3617 l
-3249 3623 l
-3239 3628 l
-3229 3634 l
-3218 3639 l
-3207 3643 l
-3196 3648 l
-3185 3651 l
-3174 3655 l
-3162 3658 l
-3150 3661 l
-3138 3663 l
-3126 3665 l
-3114 3666 l
-3101 3668 l
-3089 3669 l
-3076 3669 l
-3064 3669 l
-3051 3669 l
-3038 3669 l
-3025 3668 l
-3012 3666 l
-2999 3665 l
-2986 3663 l
-2974 3661 l
-2961 3658 l
-2948 3655 l
-2935 3652 l
-2922 3649 l
-2909 3645 l
-2897 3641 l
-2884 3636 l
-2872 3632 l
-2859 3627 l
-2847 3621 l
-2835 3616 l
-2823 3610 l
-2811 3604 l
-2799 3597 l
-2787 3591 l
-2776 3584 l
-2765 3577 l
-2754 3569 l
-2743 3562 l
-2733 3554 l
-2722 3546 l
-2712 3537 l
-2703 3529 l
-2693 3520 l
-2684 3511 l
-2675 3502 l
-2666 3493 l
-2658 3483 l
-2650 3473 l
-2642 3464 l
-2635 3454 l
-2628 3443 l
-2621 3433 l
-2615 3423 l
-2609 3412 l
-2604 3401 l
-2599 3391 l
-2594 3380 l
-2590 3369 l
-2586 3358 l
-2583 3347 l
-2580 3335 l
-2577 3324 l
-2575 3313 l
-2574 3302 l
-2573 3290 l
-2573 3279 l
-2573 3268 l
-2573 3256 l
-2574 3245 l
-2576 3234 l
-2578 3223 l
-2581 3212 l
-2584 3201 l
-2588 3190 l
-2592 3179 l
-2597 3169 l
-2603 3158 l
-2609 3148 l
-2616 3138 l
-2623 3128 l
-2631 3119 l
-2639 3110 l
-2648 3101 l
-2658 3092 l
-2668 3084 l
-2678 3076 l
-2689 3068 l
-2701 3061 l
-2713 3054 l
-2726 3048 l
-2739 3042 l
-2753 3036 l
-2767 3031 l
-2782 3027 l
-2796 3023 l
-2812 3020 l
-2828 3017 l
-2844 3014 l
-2860 3013 l
-2877 3012 l
-2894 3011 l
-2911 3012 l
-2928 3012 l
-2945 3014 l
-2963 3016 l
-2980 3019 l
-2998 3022 l
-3015 3026 l
-3033 3031 l
-3050 3036 l
-3067 3042 l
-3084 3049 l
-3101 3056 l
-3118 3064 l
-3134 3072 l
-3150 3081 l
-3165 3090 l
-3181 3100 l
-3195 3110 l
-3210 3121 l
-3223 3132 l
-3236 3144 l
-3249 3156 l
-3261 3168 l
-3273 3181 l
-3284 3193 l
-3294 3206 l
-3303 3220 l
-3312 3233 l
-3321 3247 l
-3328 3260 l
-3335 3274 l
-3342 3288 l
-3347 3302 l
-3352 3315 l
-3357 3329 l
-3360 3343 l
-3363 3356 l
-3366 3370 l
-3367 3383 l
-3369 3396 l
-3369 3409 l
-3369 3422 l
-3368 3435 l
-3367 3447 l
-3365 3459 l
-3362 3471 l
-3359 3482 l
-3356 3494 l
-3352 3505 l
-3347 3515 l
-3342 3526 l
-3337 3536 l
-3331 3545 l
-3324 3555 l
-3317 3564 l
-3310 3572 l
-3302 3581 l
-S
-3500 3947 m
-3500 3947 l
-3500 3947 l
-3500 3947 l
-3500 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3498 3948 l
-3496 3949 l
-3495 3950 l
-3494 3951 l
-3493 3951 l
-3492 3952 l
-3490 3953 l
-3489 3954 l
-3488 3954 l
-3487 3955 l
-3486 3956 l
-3484 3957 l
-3483 3957 l
-3466 3968 l
-3448 3977 l
-3430 3986 l
-3412 3994 l
-3393 4002 l
-3374 4008 l
-3354 4015 l
-3335 4020 l
-3315 4025 l
-3295 4030 l
-3275 4034 l
-3254 4037 l
-3234 4040 l
-3213 4042 l
-3192 4044 l
-3171 4045 l
-3149 4045 l
-3128 4045 l
-3107 4045 l
-3085 4044 l
-3064 4042 l
-3042 4041 l
-3021 4038 l
-2999 4035 l
-2977 4032 l
-2956 4028 l
-2934 4024 l
-2913 4019 l
-2891 4014 l
-2870 4008 l
-2848 4002 l
-2827 3996 l
-2806 3989 l
-2785 3981 l
-2764 3974 l
-2743 3966 l
-2722 3957 l
-2701 3948 l
-2681 3939 l
-2661 3929 l
-2641 3919 l
-2621 3909 l
-2601 3898 l
-2582 3887 l
-2563 3876 l
-2544 3864 l
-2526 3852 l
-2507 3839 l
-2489 3826 l
-2472 3813 l
-2454 3800 l
-2437 3786 l
-2421 3772 l
-2405 3758 l
-2389 3743 l
-2373 3728 l
-2358 3713 l
-2343 3697 l
-2329 3681 l
-2315 3665 l
-2302 3649 l
-2289 3632 l
-2277 3615 l
-2265 3598 l
-2254 3581 l
-2243 3563 l
-2233 3545 l
-2224 3527 l
-2215 3509 l
-2207 3490 l
-2199 3472 l
-2192 3453 l
-2186 3433 l
-2181 3414 l
-2176 3395 l
-2172 3375 l
-2169 3355 l
-2166 3335 l
-2165 3315 l
-2164 3295 l
-2164 3274 l
-2166 3254 l
-2168 3233 l
-2171 3213 l
-2175 3192 l
-2180 3172 l
-2186 3151 l
-2194 3130 l
-2202 3110 l
-2212 3089 l
-2223 3069 l
-2235 3049 l
-2249 3029 l
-2264 3009 l
-2280 2990 l
-2297 2971 l
-2316 2952 l
-2336 2934 l
-2358 2916 l
-2382 2899 l
-2406 2883 l
-2433 2867 l
-2461 2853 l
-2490 2839 l
-2521 2826 l
-2553 2814 l
-2586 2804 l
-2622 2795 l
-2658 2787 l
-2695 2781 l
-2734 2777 l
-2774 2774 l
-2814 2773 l
-2856 2775 l
-2898 2778 l
-2940 2783 l
-2983 2790 l
-3026 2799 l
-3068 2810 l
-3111 2824 l
-3153 2839 l
-3194 2856 l
-3234 2876 l
-3273 2897 l
-3312 2920 l
-3348 2944 l
-3383 2970 l
-3417 2997 l
-3449 3025 l
-3479 3054 l
-3507 3084 l
-3533 3115 l
-3557 3146 l
-3580 3178 l
-3600 3209 l
-3618 3241 l
-3634 3273 l
-3649 3305 l
-3662 3336 l
-3672 3368 l
-3681 3398 l
-3689 3429 l
-3695 3458 l
-3699 3487 l
-3701 3516 l
-3703 3544 l
-3703 3571 l
-3701 3597 l
-3699 3623 l
-3695 3647 l
-3690 3671 l
-3684 3694 l
-3677 3717 l
-3669 3738 l
-3661 3759 l
-3651 3779 l
-3640 3798 l
-3629 3816 l
-3617 3834 l
-3605 3851 l
-3591 3867 l
-3577 3882 l
-3563 3896 l
-3548 3910 l
-3532 3923 l
-3516 3935 l
-3500 3947 l
-S
-3529 4372 m
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3526 4373 l
-3525 4374 l
-3523 4374 l
-3521 4375 l
-3520 4375 l
-3518 4376 l
-3516 4376 l
-3515 4377 l
-3513 4377 l
-3511 4378 l
-3510 4378 l
-3508 4379 l
-3507 4380 l
-3483 4387 l
-3460 4393 l
-3436 4399 l
-3413 4404 l
-3389 4408 l
-3364 4412 l
-3340 4415 l
-3316 4418 l
-3291 4420 l
-3266 4421 l
-3241 4422 l
-3216 4423 l
-3191 4423 l
-3166 4422 l
-3140 4421 l
-3115 4420 l
-3090 4418 l
-3064 4415 l
-3038 4412 l
-3013 4409 l
-2987 4405 l
-2961 4401 l
-2936 4396 l
-2910 4391 l
-2884 4385 l
-2859 4379 l
-2833 4372 l
-2808 4366 l
-2782 4358 l
-2757 4351 l
-2731 4343 l
-2706 4334 l
-2681 4325 l
-2656 4316 l
-2631 4306 l
-2606 4297 l
-2581 4286 l
-2557 4276 l
-2532 4265 l
-2508 4253 l
-2484 4242 l
-2460 4229 l
-2436 4217 l
-2413 4204 l
-2390 4191 l
-2367 4178 l
-2344 4164 l
-2322 4150 l
-2299 4136 l
-2277 4121 l
-2256 4107 l
-2234 4091 l
-2213 4076 l
-2192 4060 l
-2172 4044 l
-2152 4028 l
-2132 4011 l
-2113 3994 l
-2094 3977 l
-2075 3959 l
-2057 3942 l
-2039 3923 l
-2022 3905 l
-2005 3887 l
-1989 3868 l
-1973 3849 l
-1957 3829 l
-1942 3809 l
-1928 3790 l
-1914 3769 l
-1901 3749 l
-1888 3728 l
-1876 3707 l
-1864 3686 l
-1853 3664 l
-1843 3642 l
-1833 3620 l
-1824 3598 l
-1816 3575 l
-1809 3552 l
-1802 3529 l
-1797 3505 l
-1792 3481 l
-1788 3457 l
-1785 3432 l
-1783 3407 l
-1782 3382 l
-1782 3356 l
-1783 3330 l
-1785 3304 l
-1789 3277 l
-1794 3250 l
-1800 3222 l
-1808 3194 l
-1818 3166 l
-1829 3137 l
-1842 3108 l
-1858 3079 l
-1875 3049 l
-1895 3019 l
-1917 2989 l
-1941 2958 l
-1969 2927 l
-2000 2896 l
-2034 2865 l
-2072 2835 l
-2114 2805 l
-2117 2803 l
-2120 2801 l
-2123 2798 l
-2127 2796 l
-2130 2794 l
-2133 2792 l
-2136 2790 l
-2140 2788 l
-2143 2786 l
-2146 2784 l
-2150 2782 l
-2153 2780 l
-2156 2778 l
-2160 2775 l
-2163 2773 l
-2167 2771 l
-2170 2769 l
-2174 2767 l
-2177 2765 l
-2181 2763 l
-2185 2761 l
-2188 2759 l
-2192 2757 l
-2195 2755 l
-2199 2753 l
-2203 2751 l
-2207 2749 l
-2210 2747 l
-2214 2745 l
-2218 2743 l
-2222 2741 l
-2226 2739 l
-2229 2737 l
-2233 2735 l
-2237 2734 l
-2241 2732 l
-2245 2730 l
-2249 2728 l
-2253 2726 l
-2257 2724 l
-2261 2722 l
-2265 2720 l
-2270 2718 l
-2274 2717 l
-2278 2715 l
-2282 2713 l
-2286 2711 l
-2291 2709 l
-2295 2708 l
-2299 2706 l
-2304 2704 l
-2308 2702 l
-2312 2700 l
-2317 2699 l
-2321 2697 l
-2326 2695 l
-2330 2694 l
-2335 2692 l
-2339 2690 l
-2344 2689 l
-2348 2687 l
-2353 2685 l
-2358 2684 l
-2362 2682 l
-2367 2681 l
-2372 2679 l
-S
-2372 2679 m
-2376 2677 l
-2381 2676 l
-2386 2674 l
-2391 2673 l
-2396 2671 l
-2400 2670 l
-2405 2668 l
-2410 2667 l
-2415 2666 l
-2420 2664 l
-2425 2663 l
-2430 2661 l
-2435 2660 l
-2440 2659 l
-2446 2657 l
-2451 2656 l
-2456 2655 l
-2461 2653 l
-2466 2652 l
-2472 2651 l
-2477 2650 l
-2482 2649 l
-2487 2647 l
-2493 2646 l
-2498 2645 l
-2504 2644 l
-2509 2643 l
-2514 2642 l
-2520 2641 l
-2525 2640 l
-2531 2639 l
-2537 2638 l
-2542 2637 l
-2548 2636 l
-2553 2635 l
-2559 2634 l
-2565 2633 l
-2570 2633 l
-2576 2632 l
-2582 2631 l
-2588 2630 l
-2593 2630 l
-2599 2629 l
-2605 2628 l
-2611 2627 l
-2617 2627 l
-2623 2626 l
-2629 2626 l
-2635 2625 l
-2641 2625 l
-2647 2624 l
-2653 2624 l
-2659 2623 l
-2665 2623 l
-2671 2623 l
-2677 2622 l
-2683 2622 l
-2689 2622 l
-2696 2621 l
-2702 2621 l
-2708 2621 l
-2714 2621 l
-2721 2621 l
-2727 2621 l
-2733 2621 l
-2739 2621 l
-2746 2621 l
-2752 2621 l
-2759 2621 l
-2765 2621 l
-2771 2621 l
-2778 2621 l
-2784 2621 l
-2791 2622 l
-2797 2622 l
-2804 2622 l
-2810 2623 l
-2817 2623 l
-2823 2623 l
-2830 2624 l
-2836 2624 l
-2843 2625 l
-2850 2625 l
-2856 2626 l
-2863 2627 l
-2869 2627 l
-2876 2628 l
-2883 2629 l
-2889 2630 l
-2896 2631 l
-2903 2631 l
-2909 2632 l
-2916 2633 l
-2923 2634 l
-2929 2635 l
-2936 2636 l
-2943 2637 l
-2950 2639 l
-2956 2640 l
-2963 2641 l
-2970 2642 l
-2977 2644 l
-2983 2645 l
-2990 2646 l
-2997 2648 l
-3004 2649 l
-3010 2651 l
-3017 2652 l
-3024 2654 l
-3031 2655 l
-3038 2657 l
-3044 2659 l
-3051 2660 l
-3058 2662 l
-3065 2664 l
-3071 2666 l
-3078 2668 l
-3085 2670 l
-3092 2672 l
-3098 2674 l
-3105 2676 l
-3112 2678 l
-3119 2680 l
-3125 2682 l
-3132 2684 l
-3139 2687 l
-3146 2689 l
-3152 2691 l
-3159 2694 l
-3166 2696 l
-3172 2698 l
-3179 2701 l
-3186 2703 l
-3192 2706 l
-3199 2709 l
-3205 2711 l
-3212 2714 l
-3219 2717 l
-3225 2719 l
-3232 2722 l
-3238 2725 l
-3245 2728 l
-3251 2731 l
-3258 2734 l
-3264 2737 l
-3271 2740 l
-3277 2743 l
-3284 2746 l
-3290 2749 l
-3296 2752 l
-3303 2755 l
-3309 2758 l
-3315 2762 l
-3322 2765 l
-3328 2768 l
-3334 2772 l
-3340 2775 l
-3347 2778 l
-3353 2782 l
-3359 2785 l
-3365 2789 l
-3371 2792 l
-3377 2796 l
-3383 2800 l
-3389 2803 l
-3395 2807 l
-3401 2811 l
-3407 2814 l
-3413 2818 l
-3419 2822 l
-3425 2826 l
-3431 2829 l
-3437 2833 l
-3442 2837 l
-3448 2841 l
-3454 2845 l
-3460 2849 l
-3465 2853 l
-3471 2857 l
-3476 2861 l
-3482 2865 l
-3488 2869 l
-3493 2873 l
-3499 2878 l
-3504 2882 l
-3509 2886 l
-3515 2890 l
-3520 2894 l
-3525 2899 l
-3531 2903 l
-3536 2907 l
-3541 2911 l
-3546 2916 l
-3551 2920 l
-3556 2925 l
-3562 2929 l
-3567 2933 l
-3572 2938 l
-3577 2942 l
-S
-3577 2942 m
-3581 2947 l
-3586 2951 l
-3591 2956 l
-3596 2960 l
-3601 2965 l
-3606 2969 l
-3610 2974 l
-3615 2978 l
-3620 2983 l
-3624 2987 l
-3629 2992 l
-3633 2996 l
-3638 3001 l
-3642 3006 l
-3647 3010 l
-3651 3015 l
-3655 3020 l
-3660 3024 l
-3664 3029 l
-3668 3034 l
-3672 3038 l
-3676 3043 l
-3681 3048 l
-3685 3052 l
-3689 3057 l
-3693 3062 l
-3697 3067 l
-3701 3071 l
-3705 3076 l
-3708 3081 l
-3712 3086 l
-3716 3090 l
-3720 3095 l
-3724 3100 l
-3727 3105 l
-3731 3109 l
-3734 3114 l
-3738 3119 l
-3742 3124 l
-3745 3128 l
-3749 3133 l
-3752 3138 l
-3755 3143 l
-3759 3147 l
-3762 3152 l
-3765 3157 l
-3769 3162 l
-3772 3166 l
-3775 3171 l
-3778 3176 l
-3781 3181 l
-3784 3185 l
-3787 3190 l
-3791 3195 l
-3793 3200 l
-3796 3204 l
-3799 3209 l
-3802 3214 l
-3805 3219 l
-3808 3223 l
-3811 3228 l
-3813 3233 l
-3816 3238 l
-3819 3242 l
-3821 3247 l
-3824 3252 l
-3827 3256 l
-3829 3261 l
-3832 3266 l
-3834 3270 l
-3837 3275 l
-3839 3280 l
-3842 3284 l
-3844 3289 l
-3846 3294 l
-3849 3298 l
-3851 3303 l
-3853 3307 l
-3855 3312 l
-3858 3317 l
-3860 3321 l
-3862 3326 l
-3864 3330 l
-3866 3335 l
-3868 3339 l
-3870 3344 l
-3872 3348 l
-3874 3353 l
-3876 3358 l
-3878 3362 l
-3880 3366 l
-3882 3371 l
-3883 3375 l
-3885 3380 l
-3887 3384 l
-3889 3389 l
-3890 3393 l
-3892 3398 l
-3894 3402 l
-3895 3406 l
-3897 3411 l
-3899 3415 l
-3900 3419 l
-3902 3424 l
-3903 3428 l
-3905 3432 l
-3906 3437 l
-3907 3441 l
-3909 3445 l
-3910 3450 l
-3912 3454 l
-3913 3458 l
-3914 3462 l
-3916 3467 l
-3917 3471 l
-3918 3475 l
-3919 3479 l
-3920 3483 l
-3922 3488 l
-3923 3492 l
-3924 3496 l
-3925 3500 l
-3926 3504 l
-3927 3508 l
-3928 3512 l
-3929 3516 l
-3930 3520 l
-3931 3524 l
-3932 3528 l
-3933 3532 l
-3934 3536 l
-3935 3540 l
-3936 3544 l
-3937 3548 l
-3938 3552 l
-3938 3556 l
-3939 3560 l
-3940 3564 l
-3941 3568 l
-3941 3572 l
-3942 3576 l
-3950 3629 l
-3956 3679 l
-3958 3727 l
-3957 3772 l
-3955 3815 l
-3950 3855 l
-3944 3893 l
-3936 3930 l
-3926 3964 l
-3916 3996 l
-3904 4027 l
-3891 4055 l
-3877 4083 l
-3863 4108 l
-3847 4133 l
-3831 4156 l
-3814 4177 l
-3797 4197 l
-3779 4217 l
-3760 4235 l
-3741 4252 l
-3722 4268 l
-3702 4283 l
-3681 4297 l
-3661 4310 l
-3640 4322 l
-3618 4334 l
-3596 4344 l
-3574 4354 l
-3552 4363 l
-3529 4372 l
-S
-3338 4792 m
-3338 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3336 4792 l
-3336 4792 l
-3336 4792 l
-3335 4792 l
-3333 4792 l
-3332 4792 l
-3330 4792 l
-3329 4792 l
-3327 4792 l
-3326 4792 l
-3324 4792 l
-3323 4792 l
-3321 4792 l
-3320 4792 l
-3318 4792 l
-3316 4792 l
-3295 4792 l
-3273 4791 l
-3251 4790 l
-3229 4789 l
-3207 4787 l
-3185 4786 l
-3162 4783 l
-3139 4781 l
-3116 4778 l
-3093 4775 l
-3070 4772 l
-3047 4769 l
-3023 4765 l
-3000 4761 l
-2976 4756 l
-2952 4751 l
-2928 4746 l
-2904 4741 l
-2880 4736 l
-2856 4730 l
-2832 4724 l
-2808 4717 l
-2784 4711 l
-2760 4704 l
-2736 4697 l
-2711 4689 l
-2687 4682 l
-2663 4674 l
-2639 4665 l
-2614 4657 l
-2590 4648 l
-2566 4639 l
-2542 4630 l
-2518 4621 l
-2494 4611 l
-2470 4601 l
-2446 4591 l
-2423 4581 l
-2399 4570 l
-2376 4560 l
-2352 4549 l
-2329 4537 l
-2306 4526 l
-2283 4514 l
-2260 4503 l
-2237 4491 l
-2215 4478 l
-2192 4466 l
-2170 4453 l
-2148 4441 l
-2126 4428 l
-2105 4415 l
-2083 4401 l
-2062 4388 l
-2041 4375 l
-2021 4361 l
-2000 4347 l
-1980 4333 l
-1960 4319 l
-1940 4305 l
-1921 4290 l
-1902 4276 l
-1883 4261 l
-1864 4246 l
-1846 4232 l
-1828 4217 l
-1810 4202 l
-1793 4187 l
-1776 4171 l
-1759 4156 l
-1743 4141 l
-1727 4125 l
-1711 4110 l
-1696 4094 l
-1681 4079 l
-1666 4063 l
-1652 4048 l
-1638 4032 l
-1624 4016 l
-1611 4000 l
-1598 3985 l
-1586 3969 l
-1574 3953 l
-1562 3937 l
-1551 3921 l
-1540 3906 l
-1530 3890 l
-1520 3874 l
-1510 3858 l
-1501 3843 l
-1492 3827 l
-1484 3811 l
-1476 3796 l
-1469 3780 l
-1462 3765 l
-1455 3749 l
-1449 3734 l
-1443 3719 l
-1438 3703 l
-1433 3688 l
-1429 3673 l
-1425 3658 l
-1421 3643 l
-1418 3629 l
-1416 3614 l
-1414 3599 l
-1412 3585 l
-1411 3571 l
-1410 3556 l
-1410 3542 l
-1410 3528 l
-1411 3514 l
-1412 3500 l
-1414 3486 l
-1416 3473 l
-1419 3459 l
-1422 3444 l
-1427 3430 l
-1432 3414 l
-1439 3395 l
-1440 3393 l
-1441 3391 l
-1441 3389 l
-1442 3388 l
-1443 3386 l
-1444 3383 l
-1445 3381 l
-1446 3379 l
-1447 3376 l
-1448 3373 l
-1450 3370 l
-1451 3367 l
-1453 3363 l
-1455 3359 l
-1457 3354 l
-1460 3348 l
-1463 3341 l
-1468 3333 l
-1473 3322 l
-1480 3308 l
-1491 3289 l
-1507 3259 l
-1509 3256 l
-1510 3254 l
-1512 3251 l
-1514 3248 l
-1515 3245 l
-1517 3241 l
-1519 3238 l
-1522 3234 l
-1524 3231 l
-1526 3227 l
-1529 3223 l
-1531 3219 l
-1534 3214 l
-1537 3210 l
-1540 3205 l
-1543 3200 l
-1547 3194 l
-1551 3188 l
-1555 3182 l
-1559 3176 l
-1564 3169 l
-1568 3162 l
-1574 3154 l
-1580 3146 l
-1586 3138 l
-1593 3128 l
-1600 3118 l
-1608 3108 l
-1617 3096 l
-1627 3084 l
-1638 3070 l
-S
-1638 3070 m
-1650 3056 l
-1664 3040 l
-1679 3023 l
-1696 3004 l
-1716 2983 l
-1739 2960 l
-1765 2935 l
-1796 2908 l
-1832 2877 l
-1875 2844 l
-1926 2807 l
-1930 2804 l
-1934 2801 l
-1939 2798 l
-1943 2796 l
-1947 2793 l
-1952 2790 l
-1956 2787 l
-1960 2784 l
-1965 2781 l
-1970 2778 l
-1974 2775 l
-1979 2773 l
-1984 2770 l
-1989 2767 l
-1994 2764 l
-1999 2761 l
-2004 2758 l
-2009 2755 l
-2014 2752 l
-2020 2748 l
-2025 2745 l
-2030 2742 l
-2036 2739 l
-2042 2736 l
-2047 2733 l
-2053 2730 l
-2059 2727 l
-2065 2724 l
-2071 2720 l
-2077 2717 l
-2084 2714 l
-2090 2711 l
-2096 2708 l
-2103 2705 l
-2110 2701 l
-2116 2698 l
-2123 2695 l
-2130 2692 l
-2137 2689 l
-2144 2685 l
-2152 2682 l
-2159 2679 l
-2166 2676 l
-2174 2673 l
-2182 2669 l
-2190 2666 l
-2198 2663 l
-2206 2660 l
-2214 2657 l
-2222 2654 l
-2231 2651 l
-2239 2647 l
-2248 2644 l
-2257 2641 l
-2266 2638 l
-2275 2635 l
-2284 2632 l
-2293 2629 l
-2303 2626 l
-2312 2623 l
-2322 2621 l
-2332 2618 l
-2342 2615 l
-2353 2612 l
-2363 2610 l
-2373 2607 l
-2384 2604 l
-2395 2602 l
-2406 2599 l
-2417 2597 l
-2428 2595 l
-2440 2592 l
-2451 2590 l
-2463 2588 l
-2475 2586 l
-2487 2584 l
-2499 2582 l
-2512 2580 l
-2524 2578 l
-2537 2577 l
-2550 2575 l
-2563 2574 l
-2576 2573 l
-2589 2571 l
-2602 2570 l
-2616 2569 l
-2630 2569 l
-2644 2568 l
-2658 2567 l
-2672 2567 l
-2686 2567 l
-2701 2567 l
-2715 2567 l
-2730 2567 l
-2745 2567 l
-2760 2568 l
-2775 2568 l
-2790 2569 l
-2806 2570 l
-2821 2571 l
-2837 2573 l
-2852 2574 l
-2868 2576 l
-2884 2578 l
-2900 2580 l
-2916 2583 l
-2932 2585 l
-2948 2588 l
-2964 2591 l
-2980 2594 l
-2997 2598 l
-3013 2601 l
-3029 2605 l
-3046 2609 l
-3062 2613 l
-3078 2618 l
-3095 2623 l
-3111 2628 l
-3128 2633 l
-3144 2638 l
-3160 2644 l
-3177 2649 l
-3193 2655 l
-3209 2662 l
-3225 2668 l
-3241 2675 l
-3257 2682 l
-3273 2689 l
-3289 2696 l
-3305 2703 l
-3320 2711 l
-3336 2719 l
-3351 2727 l
-3366 2735 l
-3381 2743 l
-3396 2752 l
-3411 2760 l
-3426 2769 l
-3440 2778 l
-3455 2787 l
-3469 2797 l
-3483 2806 l
-3497 2815 l
-3510 2825 l
-3524 2835 l
-3537 2845 l
-3550 2855 l
-3563 2865 l
-3575 2875 l
-3588 2885 l
-3600 2895 l
-3612 2906 l
-3624 2916 l
-3636 2927 l
-3647 2937 l
-3658 2948 l
-3670 2958 l
-3680 2969 l
-3691 2980 l
-3701 2990 l
-3712 3001 l
-3722 3012 l
-3731 3023 l
-3741 3033 l
-3750 3044 l
-3760 3055 l
-3769 3066 l
-3777 3076 l
-3786 3087 l
-3794 3098 l
-3803 3108 l
-3811 3119 l
-3818 3129 l
-3826 3140 l
-3834 3150 l
-3841 3161 l
-3848 3171 l
-3855 3181 l
-3862 3192 l
-3868 3202 l
-3875 3212 l
-3881 3222 l
-3887 3232 l
-3893 3242 l
-3899 3252 l
-3905 3262 l
-3910 3271 l
-3916 3281 l
-S
-3916 3281 m
-3921 3291 l
-3926 3300 l
-3931 3309 l
-3936 3319 l
-3940 3328 l
-3945 3337 l
-3949 3346 l
-3954 3355 l
-3958 3364 l
-3962 3373 l
-3966 3382 l
-3970 3391 l
-3974 3399 l
-3977 3408 l
-3981 3416 l
-3984 3425 l
-3988 3433 l
-3991 3441 l
-3994 3449 l
-3997 3457 l
-4000 3465 l
-4003 3473 l
-4006 3481 l
-4009 3489 l
-4012 3496 l
-4014 3504 l
-4017 3512 l
-4019 3519 l
-4022 3526 l
-4024 3533 l
-4026 3541 l
-4028 3548 l
-4030 3555 l
-4032 3562 l
-4034 3569 l
-4036 3575 l
-4038 3582 l
-4040 3589 l
-4042 3595 l
-4043 3602 l
-4045 3608 l
-4047 3615 l
-4048 3621 l
-4050 3627 l
-4051 3633 l
-4053 3639 l
-4054 3645 l
-4055 3651 l
-4057 3657 l
-4058 3663 l
-4059 3669 l
-4060 3675 l
-4061 3680 l
-4062 3686 l
-4064 3691 l
-4065 3697 l
-4066 3702 l
-4066 3707 l
-4067 3713 l
-4068 3718 l
-4069 3723 l
-4070 3728 l
-4071 3733 l
-4072 3738 l
-4072 3743 l
-4073 3748 l
-4074 3753 l
-4074 3758 l
-4075 3762 l
-4076 3767 l
-4076 3772 l
-4077 3776 l
-4078 3781 l
-4078 3785 l
-4079 3790 l
-4079 3794 l
-4080 3799 l
-4080 3803 l
-4085 3859 l
-4087 3907 l
-4088 3949 l
-4087 3987 l
-4086 4019 l
-4084 4049 l
-4082 4075 l
-4080 4098 l
-4077 4119 l
-4075 4138 l
-4072 4156 l
-4070 4172 l
-4067 4186 l
-4065 4199 l
-4063 4212 l
-4060 4223 l
-4058 4234 l
-4056 4244 l
-4054 4253 l
-4052 4262 l
-4050 4270 l
-4048 4277 l
-4047 4284 l
-4028 4352 l
-4016 4390 l
-4008 4413 l
-4002 4429 l
-3997 4441 l
-3994 4451 l
-3991 4458 l
-3988 4465 l
-3986 4470 l
-3984 4474 l
-3982 4478 l
-3981 4482 l
-3980 4485 l
-3978 4488 l
-3977 4491 l
-3976 4493 l
-3975 4495 l
-3974 4498 l
-3973 4500 l
-3972 4501 l
-3971 4503 l
-3971 4505 l
-3970 4507 l
-3969 4508 l
-3968 4510 l
-3968 4511 l
-3967 4513 l
-3966 4514 l
-3966 4515 l
-3965 4517 l
-3964 4518 l
-3964 4519 l
-3963 4521 l
-3962 4522 l
-3962 4523 l
-3961 4524 l
-3960 4525 l
-3960 4526 l
-3959 4528 l
-3959 4529 l
-3958 4530 l
-3958 4531 l
-3950 4545 l
-3942 4557 l
-3933 4569 l
-3925 4580 l
-3916 4591 l
-3907 4602 l
-3897 4612 l
-3887 4622 l
-3877 4632 l
-3866 4641 l
-3855 4650 l
-3844 4659 l
-3832 4667 l
-3820 4675 l
-3807 4683 l
-3794 4691 l
-3780 4698 l
-3767 4706 l
-3752 4712 l
-3738 4719 l
-3723 4725 l
-3708 4731 l
-3692 4737 l
-3676 4743 l
-3660 4748 l
-3643 4753 l
-3627 4757 l
-3609 4762 l
-3592 4766 l
-3574 4770 l
-3556 4773 l
-3537 4776 l
-3518 4779 l
-3499 4782 l
-3480 4784 l
-3461 4786 l
-3441 4788 l
-3421 4789 l
-3400 4790 l
-3380 4791 l
-3359 4792 l
-3338 4792 l
-S
-2880 5085 m
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2879 5085 l
-2878 5084 l
-2878 5084 l
-2877 5083 l
-2876 5083 l
-2876 5083 l
-2875 5082 l
-2874 5082 l
-2874 5082 l
-2873 5081 l
-2872 5081 l
-2871 5080 l
-2871 5080 l
-2861 5075 l
-2850 5069 l
-2839 5064 l
-2828 5059 l
-2816 5053 l
-2804 5048 l
-2791 5043 l
-2778 5037 l
-2765 5031 l
-2752 5026 l
-2738 5020 l
-2724 5015 l
-2710 5009 l
-2696 5003 l
-2681 4997 l
-2666 4991 l
-2651 4985 l
-2636 4979 l
-2620 4973 l
-2605 4967 l
-2589 4960 l
-2573 4954 l
-2557 4948 l
-2541 4941 l
-2525 4935 l
-2509 4928 l
-2492 4921 l
-2476 4915 l
-2459 4908 l
-2442 4901 l
-2426 4894 l
-2409 4887 l
-2392 4880 l
-2376 4873 l
-2359 4865 l
-2342 4858 l
-2325 4851 l
-2309 4843 l
-2292 4836 l
-2275 4829 l
-2259 4821 l
-2242 4814 l
-2225 4806 l
-2209 4799 l
-2192 4791 l
-2176 4784 l
-2160 4776 l
-2144 4768 l
-2127 4761 l
-2111 4753 l
-2096 4746 l
-2080 4738 l
-2064 4731 l
-2049 4723 l
-2033 4716 l
-2018 4709 l
-2003 4701 l
-1988 4694 l
-1973 4687 l
-1959 4680 l
-1945 4673 l
-1930 4666 l
-1916 4660 l
-1903 4653 l
-1889 4647 l
-1876 4641 l
-1863 4635 l
-1850 4629 l
-1837 4623 l
-1825 4618 l
-1813 4612 l
-1801 4607 l
-1789 4603 l
-1778 4598 l
-1767 4594 l
-1756 4590 l
-1746 4587 l
-1736 4584 l
-1726 4581 l
-1717 4579 l
-1708 4577 l
-1699 4576 l
-1691 4575 l
-1683 4575 l
-1676 4575 l
-1669 4575 l
-1663 4577 l
-1657 4579 l
-1652 4582 l
-1647 4585 l
-1643 4589 l
-1639 4594 l
-1636 4600 l
-1634 4607 l
-1633 4615 l
-1632 4624 l
-1633 4633 l
-1634 4644 l
-1636 4656 l
-1640 4669 l
-1644 4683 l
-1650 4699 l
-1657 4716 l
-1666 4734 l
-1676 4753 l
-1688 4773 l
-1702 4795 l
-1718 4818 l
-1735 4842 l
-1755 4867 l
-1778 4893 l
-1802 4919 l
-1829 4947 l
-1859 4974 l
-1891 5002 l
-1925 5029 l
-1962 5056 l
-2001 5083 l
-2043 5108 l
-2085 5132 l
-2130 5155 l
-2175 5175 l
-2222 5194 l
-2268 5211 l
-2315 5226 l
-2361 5238 l
-2407 5248 l
-2451 5256 l
-2494 5263 l
-2536 5267 l
-2575 5270 l
-2613 5271 l
-2649 5270 l
-2682 5269 l
-2713 5266 l
-2742 5263 l
-2769 5259 l
-2793 5254 l
-2816 5249 l
-2836 5243 l
-2855 5238 l
-2871 5232 l
-2886 5225 l
-2899 5219 l
-2911 5213 l
-2920 5206 l
-2929 5200 l
-2936 5194 l
-2941 5187 l
-2946 5181 l
-2949 5175 l
-2951 5169 l
-2952 5163 l
-2952 5157 l
-2951 5151 l
-2949 5145 l
-2946 5140 l
-2943 5134 l
-2938 5128 l
-2933 5123 l
-2928 5117 l
-2921 5112 l
-2914 5107 l
-2907 5101 l
-2898 5096 l
-2890 5091 l
-2880 5085 l
-S
-3421 4402 m
-3413 4431 l
-S
-3307 4418 m
-3299 4448 l
-S
-3191 4423 m
-3182 4452 l
-S
-3073 4416 m
-3063 4445 l
-S
-2953 4399 m
-2942 4428 l
-S
-2714 4337 m
-2703 4365 l
-S
-2598 4293 m
-2586 4321 l
-S
-2484 4242 m
-2471 4269 l
-S
-2374 4183 m
-2361 4210 l
-S
-2270 4117 m
-2256 4144 l
-S
-2081 3965 m
-2067 3992 l
-S
-1999 3880 m
-1984 3906 l
-S
-1928 3790 m
-1912 3815 l
-S
-1868 3693 m
-1851 3718 l
-S
-1822 3590 m
-1804 3615 l
-S
-1781 3365 m
-1761 3387 l
-S
-1796 3241 m
-1774 3262 l
-S
-1842 3108 m
-1819 3128 l
-S
-1933 2968 m
-1908 2985 l
-S
-2086 2825 m
-2058 2838 l
-S
-2673 2622 m
-2643 2620 l
-S
-3103 2675 m
-3081 2654 l
-S
-3509 2886 m
-3537 2898 l
-S
-3785 3187 m
-3805 3210 l
-S
-3920 3482 m
-3933 3510 l
-S
-3939 3918 m
-3942 3948 l
-S
-3887 4065 m
-3887 4095 l
-S
-3814 4177 m
-3812 4207 l
-S
-3728 4263 m
-3725 4293 l
-S
-3633 4326 m
-3627 4356 l
-S
-3043 3352 m
-3063 3330 l
-S
-3100 3391 m
-3121 3369 l
-S
-3155 3434 m
-3177 3413 l
-S
-3207 3480 m
-3230 3459 l
-S
-3256 3529 m
-3279 3509 l
-S
-3345 3636 m
-3369 3617 l
-S
-3384 3693 m
-3409 3676 l
-S
-3419 3753 m
-3445 3737 l
-S
-3450 3816 m
-3476 3800 l
-S
-3477 3880 m
-3504 3865 l
-S
-3518 4015 m
-3545 4002 l
-S
-3531 4084 m
-3559 4072 l
-S
-3539 4155 m
-3567 4144 l
-S
-3541 4227 m
-3570 4217 l
-S
-3538 4299 m
-3567 4290 l
-S
-3514 4445 m
-3544 4438 l
-S
-3493 4517 m
-3523 4512 l
-S
-3465 4588 m
-3495 4585 l
-S
-3430 4658 m
-3460 4656 l
-S
-3387 4726 m
-3418 4726 l
-S
-3281 4854 m
-3311 4857 l
-S
-3216 4913 m
-3246 4917 l
-S
-3143 4966 m
-3173 4973 l
-S
-3063 5013 m
-3092 5022 l
-S
-2975 5053 m
-3003 5064 l
-S
-2779 5108 m
-2805 5124 l
-S
-2673 5120 m
-2697 5139 l
-S
-2563 5121 m
-2584 5142 l
-S
-2450 5109 m
-2468 5133 l
-S
-2336 5084 m
-2350 5111 l
-S
-3529 4372 m
-3483 4387 l
-3436 4399 l
-3389 4408 l
-3340 4415 l
-3291 4420 l
-3241 4422 l
-3191 4423 l
-3140 4421 l
-3090 4418 l
-3038 4412 l
-2987 4405 l
-2936 4396 l
-2884 4385 l
-2833 4372 l
-S
-2833 4372 m
-2782 4358 l
-2731 4343 l
-2681 4325 l
-2631 4306 l
-2581 4286 l
-2532 4265 l
-2484 4242 l
-2436 4217 l
-2390 4191 l
-2344 4164 l
-2299 4136 l
-2256 4107 l
-2213 4076 l
-2172 4044 l
-S
-2172 4044 m
-2132 4011 l
-2094 3977 l
-2057 3942 l
-2022 3905 l
-1989 3868 l
-1957 3829 l
-1928 3790 l
-1901 3749 l
-1876 3707 l
-1853 3664 l
-1833 3620 l
-1832 3617 l
-1831 3614 l
-1829 3610 l
-1828 3607 l
-1827 3604 l
-1826 3601 l
-1824 3598 l
-1823 3594 l
-1822 3591 l
-1821 3588 l
-1820 3585 l
-1819 3581 l
-1817 3578 l
-1816 3575 l
-1815 3572 l
-1814 3568 l
-1813 3565 l
-1812 3562 l
-1811 3558 l
-1810 3555 l
-1809 3552 l
-1808 3549 l
-1807 3545 l
-1806 3542 l
-1805 3539 l
-1804 3535 l
-1803 3532 l
-1802 3529 l
-1801 3525 l
-1801 3522 l
-1800 3518 l
-1799 3515 l
-1798 3512 l
-1797 3508 l
-1797 3505 l
-1796 3501 l
-1795 3498 l
-1794 3495 l
-1794 3491 l
-1793 3488 l
-1792 3484 l
-1792 3481 l
-S
-1792 3481 m
-1791 3477 l
-1790 3474 l
-1790 3471 l
-1789 3467 l
-1789 3464 l
-1788 3460 l
-1788 3457 l
-1787 3453 l
-1787 3450 l
-1786 3446 l
-1786 3443 l
-1785 3439 l
-1785 3436 l
-1785 3432 l
-1784 3428 l
-1784 3425 l
-1784 3421 l
-1783 3418 l
-1783 3414 l
-1783 3411 l
-1783 3407 l
-1782 3403 l
-1782 3400 l
-1782 3396 l
-1782 3393 l
-1782 3389 l
-1782 3385 l
-1782 3382 l
-1781 3378 l
-1781 3374 l
-1781 3371 l
-1781 3367 l
-1781 3364 l
-1781 3360 l
-1782 3356 l
-1782 3352 l
-1782 3349 l
-1782 3345 l
-1782 3341 l
-1782 3338 l
-1782 3334 l
-1783 3330 l
-1783 3326 l
-1783 3323 l
-1784 3319 l
-1784 3315 l
-1784 3311 l
-1785 3308 l
-1785 3304 l
-1786 3300 l
-1786 3296 l
-1787 3292 l
-1787 3289 l
-1788 3285 l
-1788 3281 l
-1789 3277 l
-1789 3273 l
-1790 3269 l
-1791 3265 l
-1791 3262 l
-1792 3258 l
-1793 3254 l
-1794 3250 l
-1795 3246 l
-1795 3242 l
-1796 3238 l
-1797 3234 l
-1798 3230 l
-1799 3226 l
-1800 3222 l
-1801 3218 l
-1802 3214 l
-1803 3210 l
-1805 3206 l
-1806 3202 l
-1807 3198 l
-1808 3194 l
-1809 3190 l
-1811 3186 l
-1812 3182 l
-1814 3178 l
-1815 3174 l
-1816 3170 l
-1818 3166 l
-1819 3162 l
-1821 3158 l
-1822 3154 l
-1824 3150 l
-1826 3146 l
-1827 3142 l
-1829 3137 l
-1831 3133 l
-1833 3129 l
-1835 3125 l
-1836 3121 l
-1838 3117 l
-1840 3113 l
-1842 3108 l
-1844 3104 l
-1846 3100 l
-1849 3096 l
-1851 3092 l
-1853 3087 l
-1855 3083 l
-1858 3079 l
-1860 3075 l
-1862 3070 l
-1865 3066 l
-1867 3062 l
-1870 3058 l
-1872 3053 l
-1875 3049 l
-1878 3045 l
-1880 3041 l
-1883 3036 l
-1886 3032 l
-1889 3028 l
-1892 3023 l
-1895 3019 l
-1898 3015 l
-1901 3010 l
-1904 3006 l
-1907 3002 l
-1910 2997 l
-1913 2993 l
-1917 2989 l
-1920 2984 l
-1923 2980 l
-1927 2975 l
-1930 2971 l
-1934 2967 l
-1938 2962 l
-1941 2958 l
-1945 2953 l
-1949 2949 l
-1953 2945 l
-1957 2940 l
-1961 2936 l
-1965 2931 l
-1969 2927 l
-1973 2923 l
-1978 2918 l
-1982 2914 l
-1986 2909 l
-1991 2905 l
-1995 2901 l
-2000 2896 l
-2005 2892 l
-2009 2887 l
-2014 2883 l
-2019 2879 l
-2024 2874 l
-2029 2870 l
-2034 2865 l
-2039 2861 l
-2045 2857 l
-2050 2852 l
-2055 2848 l
-2061 2844 l
-2066 2839 l
-2072 2835 l
-2078 2831 l
-2084 2826 l
-2090 2822 l
-2096 2818 l
-2102 2813 l
-2108 2809 l
-2114 2805 l
-2120 2801 l
-2127 2796 l
-2133 2792 l
-2140 2788 l
-2146 2784 l
-2153 2780 l
-2160 2775 l
-2167 2771 l
-2174 2767 l
-2181 2763 l
-2188 2759 l
-2195 2755 l
-2203 2751 l
-2210 2747 l
-2218 2743 l
-2226 2739 l
-2233 2735 l
-2241 2732 l
-2249 2728 l
-2257 2724 l
-2265 2720 l
-2274 2717 l
-2282 2713 l
-2291 2709 l
-2299 2706 l
-2308 2702 l
-2317 2699 l
-2326 2695 l
-S
-2326 2695 m
-2335 2692 l
-2344 2689 l
-2353 2685 l
-2362 2682 l
-2372 2679 l
-2381 2676 l
-2391 2673 l
-2400 2670 l
-2410 2667 l
-2420 2664 l
-2430 2661 l
-2440 2659 l
-2451 2656 l
-2461 2653 l
-2472 2651 l
-2482 2649 l
-2493 2646 l
-2504 2644 l
-2514 2642 l
-2525 2640 l
-2537 2638 l
-2548 2636 l
-2559 2634 l
-2570 2633 l
-2582 2631 l
-2593 2630 l
-2605 2628 l
-2617 2627 l
-2629 2626 l
-2641 2625 l
-2653 2624 l
-2665 2623 l
-2677 2622 l
-2689 2622 l
-2702 2621 l
-2714 2621 l
-2727 2621 l
-2739 2621 l
-2752 2621 l
-2765 2621 l
-2778 2621 l
-2791 2622 l
-2804 2622 l
-2817 2623 l
-2830 2624 l
-2843 2625 l
-2856 2626 l
-2869 2627 l
-2883 2629 l
-2896 2631 l
-2909 2632 l
-2923 2634 l
-2936 2636 l
-2950 2639 l
-2963 2641 l
-2977 2644 l
-2990 2646 l
-3004 2649 l
-3017 2652 l
-3031 2655 l
-3044 2659 l
-3058 2662 l
-3071 2666 l
-3085 2670 l
-3098 2674 l
-3112 2678 l
-3125 2682 l
-3139 2687 l
-3152 2691 l
-3166 2696 l
-3179 2701 l
-3192 2706 l
-3205 2711 l
-3219 2717 l
-3232 2722 l
-3245 2728 l
-3258 2734 l
-3271 2740 l
-3284 2746 l
-3296 2752 l
-3309 2758 l
-3322 2765 l
-3334 2772 l
-3347 2778 l
-3359 2785 l
-3371 2792 l
-3383 2800 l
-3395 2807 l
-3407 2814 l
-3419 2822 l
-3431 2829 l
-3442 2837 l
-3454 2845 l
-3465 2853 l
-3476 2861 l
-3488 2869 l
-3499 2878 l
-3509 2886 l
-3520 2894 l
-3531 2903 l
-3541 2911 l
-3551 2920 l
-3562 2929 l
-3572 2938 l
-3581 2947 l
-3591 2956 l
-3601 2965 l
-3610 2974 l
-3620 2983 l
-3629 2992 l
-3638 3001 l
-3647 3010 l
-3655 3020 l
-3664 3029 l
-3672 3038 l
-3681 3048 l
-3689 3057 l
-3697 3067 l
-3705 3076 l
-3712 3086 l
-3720 3095 l
-3727 3105 l
-3734 3114 l
-3742 3124 l
-3749 3133 l
-3755 3143 l
-3762 3152 l
-3769 3162 l
-3775 3171 l
-3781 3181 l
-3787 3190 l
-3793 3200 l
-3799 3209 l
-3805 3219 l
-3811 3228 l
-3816 3238 l
-3821 3247 l
-3827 3256 l
-3832 3266 l
-3837 3275 l
-3842 3284 l
-3846 3294 l
-3851 3303 l
-3855 3312 l
-3860 3321 l
-3864 3330 l
-3868 3339 l
-3872 3348 l
-3876 3358 l
-3880 3366 l
-3883 3375 l
-3887 3384 l
-3890 3393 l
-3894 3402 l
-3897 3411 l
-3900 3419 l
-3903 3428 l
-3906 3437 l
-3909 3445 l
-3912 3454 l
-3914 3462 l
-3917 3471 l
-3919 3479 l
-3922 3488 l
-3924 3496 l
-3926 3504 l
-3928 3512 l
-3930 3520 l
-3932 3528 l
-3934 3536 l
-3936 3544 l
-3938 3552 l
-3939 3560 l
-3941 3568 l
-3942 3576 l
-3944 3583 l
-3945 3591 l
-3946 3599 l
-3947 3606 l
-3948 3614 l
-3949 3621 l
-3950 3629 l
-3951 3636 l
-3952 3643 l
-3953 3650 l
-3954 3658 l
-3954 3665 l
-3955 3672 l
-3956 3679 l
-3956 3686 l
-3956 3693 l
-3957 3700 l
-3957 3706 l
-3957 3713 l
-3958 3720 l
-3958 3727 l
-S
-3958 3727 m
-3958 3733 l
-3958 3740 l
-3958 3746 l
-3958 3753 l
-3958 3759 l
-3958 3765 l
-3957 3772 l
-3957 3778 l
-3957 3784 l
-3956 3790 l
-3956 3797 l
-3956 3803 l
-3955 3809 l
-3955 3815 l
-3954 3821 l
-3954 3826 l
-3953 3832 l
-3952 3838 l
-3952 3844 l
-3951 3849 l
-3950 3855 l
-3949 3861 l
-3948 3866 l
-3948 3872 l
-3947 3877 l
-3946 3883 l
-3945 3888 l
-3944 3893 l
-3943 3899 l
-3942 3904 l
-3940 3909 l
-3939 3914 l
-3938 3919 l
-3937 3924 l
-3936 3930 l
-3934 3935 l
-3933 3940 l
-3932 3944 l
-3931 3949 l
-3929 3954 l
-3928 3959 l
-3926 3964 l
-3925 3968 l
-3923 3973 l
-3922 3978 l
-3920 3982 l
-3919 3987 l
-3917 3992 l
-3916 3996 l
-3914 4001 l
-3912 4005 l
-3911 4009 l
-3909 4014 l
-3907 4018 l
-3906 4022 l
-3904 4027 l
-3902 4031 l
-3900 4035 l
-3899 4039 l
-3897 4043 l
-3895 4047 l
-3893 4051 l
-3891 4055 l
-3889 4059 l
-3887 4063 l
-3885 4067 l
-3883 4071 l
-3881 4075 l
-3879 4079 l
-3877 4083 l
-3875 4086 l
-3873 4090 l
-3871 4094 l
-3869 4097 l
-3867 4101 l
-3865 4105 l
-3863 4108 l
-3860 4112 l
-3858 4115 l
-3856 4119 l
-3854 4122 l
-3852 4126 l
-3849 4129 l
-3847 4133 l
-3845 4136 l
-3843 4139 l
-3840 4143 l
-3838 4146 l
-3836 4149 l
-3833 4152 l
-3831 4156 l
-3829 4159 l
-3826 4162 l
-3824 4165 l
-3821 4168 l
-3819 4171 l
-3817 4174 l
-3814 4177 l
-3812 4180 l
-3809 4183 l
-3807 4186 l
-3804 4189 l
-3802 4192 l
-3799 4195 l
-3797 4197 l
-3794 4200 l
-3792 4203 l
-3789 4206 l
-3787 4209 l
-3784 4211 l
-3781 4214 l
-3779 4217 l
-3776 4219 l
-3774 4222 l
-3771 4225 l
-3768 4227 l
-3766 4230 l
-3763 4232 l
-3760 4235 l
-3758 4237 l
-3755 4240 l
-3752 4242 l
-3749 4245 l
-3747 4247 l
-3744 4249 l
-3741 4252 l
-3738 4254 l
-3736 4256 l
-3733 4259 l
-3730 4261 l
-3727 4263 l
-3725 4266 l
-3722 4268 l
-3719 4270 l
-3716 4272 l
-3713 4274 l
-3710 4276 l
-3708 4279 l
-3705 4281 l
-3702 4283 l
-3699 4285 l
-3696 4287 l
-3693 4289 l
-3690 4291 l
-3687 4293 l
-3684 4295 l
-3681 4297 l
-3679 4299 l
-3676 4301 l
-3673 4303 l
-3670 4304 l
-3667 4306 l
-3664 4308 l
-3661 4310 l
-3658 4312 l
-3655 4314 l
-3652 4315 l
-3649 4317 l
-3646 4319 l
-3643 4321 l
-3640 4322 l
-3637 4324 l
-3634 4326 l
-3631 4327 l
-3627 4329 l
-3624 4331 l
-3621 4332 l
-3618 4334 l
-3615 4335 l
-3612 4337 l
-3609 4338 l
-3606 4340 l
-3603 4341 l
-3600 4343 l
-3596 4344 l
-3593 4346 l
-3590 4347 l
-3587 4349 l
-3584 4350 l
-3581 4352 l
-3578 4353 l
-3574 4354 l
-3571 4356 l
-3568 4357 l
-3565 4358 l
-3562 4360 l
-3558 4361 l
-3555 4362 l
-3552 4363 l
-3549 4365 l
-3546 4366 l
-3542 4367 l
-3539 4368 l
-3536 4370 l
-3533 4371 l
-3532 4371 l
-3532 4371 l
-3532 4371 l
-3532 4371 l
-S
-3532 4371 m
-3532 4371 l
-3531 4371 l
-3531 4371 l
-3531 4371 l
-3531 4371 l
-3530 4372 l
-3530 4372 l
-3530 4372 l
-3530 4372 l
-S
-2983 3317 m
-3009 3332 l
-3034 3347 l
-3060 3363 l
-3084 3380 l
-3108 3397 l
-3132 3415 l
-3155 3434 l
-3178 3453 l
-3200 3473 l
-3222 3493 l
-3243 3514 l
-3263 3536 l
-3283 3558 l
-3302 3581 l
-S
-3302 3581 m
-3321 3604 l
-3339 3628 l
-3356 3652 l
-3373 3676 l
-3389 3702 l
-3405 3727 l
-3419 3753 l
-3433 3780 l
-3446 3807 l
-3459 3834 l
-3470 3862 l
-3481 3890 l
-3491 3918 l
-3500 3947 l
-S
-3500 3947 m
-3508 3976 l
-3516 4005 l
-3522 4034 l
-3528 4064 l
-3532 4094 l
-3536 4125 l
-3539 4155 l
-3541 4186 l
-3541 4216 l
-3541 4247 l
-3540 4278 l
-3537 4310 l
-3534 4341 l
-3529 4372 l
-S
-3529 4372 m
-3524 4403 l
-3517 4434 l
-3509 4465 l
-3500 4496 l
-3489 4527 l
-3478 4558 l
-3465 4588 l
-3451 4618 l
-3435 4648 l
-3418 4678 l
-3400 4707 l
-3381 4736 l
-3360 4764 l
-3338 4792 l
-S
-3338 4792 m
-3314 4819 l
-3289 4846 l
-3263 4871 l
-3235 4896 l
-3206 4921 l
-3175 4944 l
-3143 4966 l
-3110 4987 l
-3075 5007 l
-3038 5025 l
-3001 5043 l
-2962 5058 l
-2922 5073 l
-2880 5085 l
-S
-2880 5085 m
-2838 5096 l
-2794 5105 l
-2750 5113 l
-2704 5118 l
-2658 5121 l
-2610 5122 l
-2563 5121 l
-2514 5117 l
-2466 5111 l
-2417 5103 l
-2368 5093 l
-2319 5079 l
-2271 5064 l
-2223 5046 l
-S
-4073 3746 m
-4075 3748 l
-S
-4075 3748 m
-4075 3753 l
-4075 3757 l
-4075 3762 l
-4075 3766 l
-4075 3770 l
-4075 3775 l
-4077 3777 l
-4079 3779 l
-4079 3784 l
-4079 3788 l
-S
-4079 3788 m
-4079 3793 l
-4079 3797 l
-4079 3802 l
-4079 3806 l
-4079 3811 l
-4079 3815 l
-4082 3817 l
-4084 3820 l
-4084 3824 l
-4084 3829 l
-S
-4084 3829 m
-4084 3833 l
-4084 3838 l
-4084 3842 l
-4084 3846 l
-4084 3851 l
-4084 3855 l
-4084 3860 l
-4084 3864 l
-4084 3869 l
-S
-4084 3869 m
-4084 3873 l
-4084 3878 l
-4086 3880 l
-4088 3882 l
-4088 3887 l
-4088 3891 l
-4088 3896 l
-4088 3900 l
-4088 3905 l
-4088 3909 l
-S
-4088 3909 m
-4088 3913 l
-4088 3918 l
-4088 3922 l
-4088 3927 l
-4088 3931 l
-4088 3936 l
-4088 3940 l
-4088 3945 l
-4088 3949 l
-S
-4088 3949 m
-4088 3954 l
-4088 3958 l
-4088 3963 l
-4088 3967 l
-4088 3972 l
-4088 3976 l
-4088 3981 l
-4088 3985 l
-4088 3989 l
-S
-4088 3989 m
-4088 3994 l
-4088 3998 l
-4088 4003 l
-4088 4007 l
-4088 4012 l
-4088 4016 l
-4086 4018 l
-4084 4021 l
-4084 4025 l
-4084 4030 l
-S
-4084 4030 m
-4084 4034 l
-4084 4039 l
-4084 4043 l
-4084 4048 l
-4084 4052 l
-4084 4056 l
-4084 4061 l
-4084 4065 l
-4084 4070 l
-S
-4084 4070 m
-4084 4074 l
-4084 4079 l
-4082 4081 l
-4079 4083 l
-4079 4088 l
-4079 4092 l
-4079 4097 l
-4079 4101 l
-4079 4106 l
-4079 4110 l
-S
-4079 4110 m
-4079 4115 l
-4079 4119 l
-4077 4121 l
-4075 4124 l
-4075 4128 l
-4075 4132 l
-4075 4137 l
-4075 4141 l
-4075 4146 l
-4075 4150 l
-S
-4073 4153 m
-4075 4150 l
-S
-4032 3563 m
-4035 3565 l
-4035 3569 l
-4035 3574 l
-4037 3576 l
-4039 3578 l
-4039 3583 l
-4039 3587 l
-S
-4039 3587 m
-4039 3592 l
-4041 3594 l
-4044 3596 l
-4044 3601 l
-4044 3605 l
-4044 3610 l
-4046 3612 l
-4048 3614 l
-4048 3619 l
-4048 3623 l
-4048 3627 l
-S
-4048 3627 m
-4050 3630 l
-4053 3632 l
-4053 3636 l
-4053 3641 l
-4053 3645 l
-4055 3648 l
-4057 3650 l
-4057 3654 l
-4057 3659 l
-4057 3663 l
-4057 3668 l
-S
-4057 3668 m
-4059 3670 l
-4061 3672 l
-4061 3677 l
-4061 3681 l
-4061 3686 l
-4061 3690 l
-4064 3692 l
-4066 3694 l
-4066 3699 l
-4066 3703 l
-4066 3708 l
-S
-4066 3708 m
-4066 3712 l
-4066 3717 l
-4068 3719 l
-4070 3721 l
-4070 3726 l
-4070 3730 l
-4070 3735 l
-4070 3739 l
-4070 3744 l
-4073 3746 l
-S
-4073 4153 m
-4070 4155 l
-4070 4159 l
-4070 4164 l
-4070 4168 l
-4070 4173 l
-4070 4177 l
-4068 4179 l
-4066 4182 l
-4066 4186 l
-4066 4191 l
-S
-4066 4191 m
-4066 4195 l
-4066 4199 l
-4066 4204 l
-4064 4206 l
-4061 4208 l
-4061 4213 l
-4061 4217 l
-4061 4222 l
-4061 4226 l
-4059 4229 l
-4057 4231 l
-S
-4057 4231 m
-4057 4235 l
-4057 4240 l
-4057 4244 l
-4057 4249 l
-4055 4251 l
-4053 4253 l
-4053 4258 l
-4053 4262 l
-4053 4267 l
-4050 4269 l
-4048 4271 l
-S
-4048 4271 m
-4048 4275 l
-4048 4280 l
-4048 4284 l
-4046 4287 l
-4044 4289 l
-4044 4293 l
-4044 4298 l
-4044 4302 l
-4041 4305 l
-4039 4307 l
-4039 4311 l
-S
-4032 4336 m
-4035 4334 l
-4035 4329 l
-4035 4325 l
-4037 4322 l
-4039 4320 l
-4039 4316 l
-4039 4311 l
-S
-3992 3442 m
-3994 3444 l
-3994 3449 l
-3994 3453 l
-3997 3455 l
-3999 3458 l
-3999 3462 l
-3999 3467 l
-S
-3999 3467 m
-4001 3469 l
-4003 3471 l
-4003 3476 l
-4006 3478 l
-4008 3480 l
-4008 3484 l
-4008 3489 l
-4010 3491 l
-4012 3493 l
-4012 3498 l
-4012 3502 l
-4015 3505 l
-4017 3507 l
-S
-4017 3507 m
-4017 3511 l
-4017 3516 l
-4019 3518 l
-4021 3520 l
-4021 3525 l
-4021 3529 l
-4023 3531 l
-4026 3534 l
-4026 3538 l
-4026 3543 l
-4028 3545 l
-4030 3547 l
-S
-4030 3547 m
-4030 3551 l
-4030 3556 l
-4030 3560 l
-4032 3563 l
-S
-4030 4351 m
-4030 4347 l
-4030 4342 l
-4030 4338 l
-4032 4336 l
-S
-4030 4351 m
-4028 4354 l
-4026 4356 l
-4026 4360 l
-4026 4365 l
-4023 4367 l
-4021 4369 l
-4021 4374 l
-4021 4378 l
-4019 4380 l
-4017 4383 l
-4017 4387 l
-4017 4392 l
-S
-4017 4392 m
-4015 4394 l
-4012 4396 l
-4012 4401 l
-4012 4405 l
-4010 4407 l
-4008 4410 l
-4008 4414 l
-4008 4418 l
-4006 4421 l
-4003 4423 l
-4003 4427 l
-4001 4430 l
-3999 4432 l
-S
-3992 4456 m
-3994 4454 l
-3994 4450 l
-3994 4445 l
-3997 4443 l
-3999 4441 l
-3999 4436 l
-3999 4432 l
-S
-3952 3353 m
-3954 3355 l
-3954 3359 l
-3956 3362 l
-3959 3364 l
-3959 3368 l
-3961 3371 l
-3963 3373 l
-3963 3377 l
-3965 3379 l
-3968 3382 l
-3968 3386 l
-S
-3968 3386 m
-3970 3388 l
-3972 3391 l
-3972 3395 l
-3972 3400 l
-3974 3402 l
-3977 3404 l
-3977 3408 l
-3979 3411 l
-3981 3413 l
-3981 3417 l
-3983 3420 l
-3985 3422 l
-3985 3426 l
-S
-3985 3426 m
-3985 3431 l
-3988 3433 l
-3990 3435 l
-3990 3440 l
-3992 3442 l
-S
-3985 4472 m
-3985 4468 l
-3988 4465 l
-3990 4463 l
-3990 4459 l
-3992 4456 l
-S
-3985 4472 m
-3985 4477 l
-3983 4479 l
-3981 4481 l
-3981 4486 l
-3979 4488 l
-3977 4490 l
-3977 4494 l
-3974 4497 l
-3972 4499 l
-3972 4503 l
-3972 4508 l
-3970 4510 l
-3968 4512 l
-S
-3952 4546 m
-3954 4544 l
-3954 4539 l
-3956 4537 l
-3959 4535 l
-3959 4530 l
-3961 4528 l
-3963 4526 l
-3963 4521 l
-3965 4519 l
-3968 4517 l
-3968 4512 l
-S
-3912 3272 m
-3914 3274 l
-3914 3279 l
-3916 3281 l
-3918 3283 l
-3918 3288 l
-3921 3290 l
-3923 3292 l
-3923 3297 l
-3925 3299 l
-3927 3301 l
-3927 3306 l
-S
-3927 3306 m
-3930 3308 l
-3932 3310 l
-3932 3315 l
-3934 3317 l
-3936 3319 l
-3936 3324 l
-3939 3326 l
-3941 3328 l
-3941 3333 l
-3943 3335 l
-3945 3337 l
-3945 3341 l
-3947 3344 l
-3950 3346 l
-S
-3950 3346 m
-3950 3350 l
-3952 3353 l
-S
-3950 4553 m
-3950 4548 l
-3952 4546 l
-S
-3950 4553 m
-3947 4555 l
-3945 4557 l
-3945 4561 l
-3943 4564 l
-3941 4566 l
-3941 4570 l
-3939 4573 l
-3936 4575 l
-3936 4579 l
-3934 4582 l
-3932 4584 l
-3932 4588 l
-3930 4591 l
-3927 4593 l
-S
-3912 4626 m
-3914 4624 l
-3914 4620 l
-3916 4617 l
-3918 4615 l
-3918 4611 l
-3921 4608 l
-3923 4606 l
-3923 4602 l
-3925 4599 l
-3927 4597 l
-3927 4593 l
-S
-3872 3205 m
-3874 3207 l
-3874 3212 l
-3876 3214 l
-3878 3216 l
-3878 3221 l
-3880 3223 l
-3883 3225 l
-S
-3883 3225 m
-3885 3227 l
-3887 3230 l
-3887 3234 l
-3889 3236 l
-3892 3239 l
-3894 3241 l
-3896 3243 l
-3896 3248 l
-3898 3250 l
-3901 3252 l
-3901 3257 l
-3903 3259 l
-3905 3261 l
-3905 3265 l
-S
-3905 3265 m
-3907 3268 l
-3909 3270 l
-3912 3272 l
-S
-3905 4633 m
-3907 4631 l
-3909 4629 l
-3912 4626 l
-S
-3905 4633 m
-3905 4637 l
-3903 4640 l
-3901 4642 l
-3901 4646 l
-3898 4649 l
-3896 4651 l
-3896 4655 l
-3894 4658 l
-3892 4660 l
-3889 4662 l
-3887 4664 l
-3887 4669 l
-3885 4671 l
-3883 4673 l
-S
-3872 4693 m
-3874 4691 l
-3874 4687 l
-3876 4684 l
-3878 4682 l
-3878 4678 l
-3880 4675 l
-3883 4673 l
-S
-3831 3147 m
-3834 3149 l
-3836 3152 l
-3838 3154 l
-3838 3158 l
-3840 3160 l
-3842 3163 l
-3845 3165 l
-3847 3167 l
-3847 3172 l
-3849 3174 l
-3851 3176 l
-3854 3178 l
-3856 3181 l
-3856 3185 l
-S
-3856 3185 m
-3858 3187 l
-3860 3190 l
-3863 3192 l
-3865 3194 l
-3865 3198 l
-3867 3201 l
-3869 3203 l
-3872 3205 l
-S
-3856 4713 m
-3858 4711 l
-3860 4709 l
-3863 4707 l
-3865 4704 l
-3865 4700 l
-3867 4698 l
-3869 4696 l
-3872 4693 l
-S
-3831 4751 m
-3834 4749 l
-3836 4747 l
-3838 4745 l
-3838 4740 l
-3840 4738 l
-3842 4736 l
-3845 4734 l
-3847 4731 l
-3847 4727 l
-3849 4725 l
-3851 4722 l
-3854 4720 l
-3856 4718 l
-3856 4713 l
-S
-3791 3093 m
-3793 3096 l
-3796 3098 l
-3798 3100 l
-3798 3105 l
-S
-3798 3105 m
-3800 3107 l
-3802 3109 l
-3804 3111 l
-3807 3114 l
-3809 3116 l
-3811 3118 l
-3811 3122 l
-3813 3125 l
-3816 3127 l
-3818 3129 l
-3820 3131 l
-3822 3134 l
-3825 3136 l
-3825 3140 l
-3827 3143 l
-3829 3145 l
-S
-3831 3147 m
-3829 3145 l
-S
-3829 4754 m
-3831 4751 l
-S
-3829 4754 m
-3827 4756 l
-3825 4758 l
-3825 4763 l
-3822 4765 l
-3820 4767 l
-3818 4769 l
-3816 4772 l
-3813 4774 l
-3811 4776 l
-3811 4780 l
-3809 4783 l
-3807 4785 l
-3804 4787 l
-3802 4789 l
-3800 4792 l
-3798 4794 l
-S
-3791 4805 m
-3793 4803 l
-3796 4801 l
-3798 4798 l
-3798 4794 l
-S
-3751 3044 m
-3753 3047 l
-3755 3049 l
-3758 3051 l
-3760 3053 l
-3762 3055 l
-3762 3060 l
-3764 3062 l
-3766 3064 l
-S
-3766 3064 m
-3769 3067 l
-3771 3069 l
-3773 3071 l
-3775 3073 l
-3778 3076 l
-3780 3078 l
-3782 3080 l
-3784 3082 l
-3784 3087 l
-3787 3089 l
-3789 3091 l
-3791 3093 l
-S
-3766 4834 m
-3769 4832 l
-3771 4830 l
-3773 4827 l
-3775 4825 l
-3778 4823 l
-3780 4821 l
-3782 4818 l
-3784 4816 l
-3784 4812 l
-3787 4810 l
-3789 4807 l
-3791 4805 l
-S
-3751 4854 m
-3753 4852 l
-3755 4850 l
-3758 4847 l
-3760 4845 l
-3762 4843 l
-3762 4839 l
-3764 4836 l
-3766 4834 l
-S
-3711 3000 m
-3713 3002 l
-3715 3004 l
-3717 3006 l
-3720 3009 l
-3722 3011 l
-3724 3013 l
-3726 3015 l
-3729 3017 l
-3731 3020 l
-3731 3024 l
-S
-3731 3024 m
-3733 3026 l
-3735 3029 l
-3737 3031 l
-3740 3033 l
-3742 3035 l
-3744 3038 l
-3746 3040 l
-3749 3042 l
-3751 3044 l
-S
-3731 4874 m
-3733 4872 l
-3735 4870 l
-3737 4868 l
-3740 4865 l
-3742 4863 l
-3744 4861 l
-3746 4859 l
-3749 4856 l
-3751 4854 l
-S
-3711 4899 m
-3713 4897 l
-3715 4894 l
-3717 4892 l
-3720 4890 l
-3722 4888 l
-3724 4885 l
-3726 4883 l
-3729 4881 l
-3731 4879 l
-3731 4874 l
-S
-3670 2959 m
-3673 2962 l
-3675 2964 l
-3677 2966 l
-3679 2968 l
-3682 2971 l
-3684 2973 l
-3686 2975 l
-3688 2977 l
-3691 2979 l
-3693 2982 l
-3695 2984 l
-S
-3695 2984 m
-3697 2986 l
-3699 2988 l
-3702 2991 l
-3704 2993 l
-3706 2995 l
-3708 2997 l
-3711 3000 l
-S
-3695 4915 m
-3697 4912 l
-3699 4910 l
-3702 4908 l
-3704 4906 l
-3706 4903 l
-3708 4901 l
-3711 4899 l
-S
-3670 4939 m
-3673 4937 l
-3675 4935 l
-3677 4932 l
-3679 4930 l
-3682 4928 l
-3684 4926 l
-3686 4923 l
-3688 4921 l
-3691 4919 l
-3693 4917 l
-3695 4915 l
-S
-3630 2924 m
-3635 2924 l
-3637 2926 l
-3639 2928 l
-3641 2930 l
-3644 2933 l
-3646 2935 l
-3648 2937 l
-3650 2939 l
-3653 2941 l
-3655 2944 l
-S
-3655 2944 m
-3657 2946 l
-3659 2948 l
-3661 2950 l
-3664 2953 l
-3666 2955 l
-3668 2957 l
-3670 2959 l
-S
-3655 4955 m
-3657 4953 l
-3659 4950 l
-3661 4948 l
-3664 4946 l
-3666 4944 l
-3668 4941 l
-3670 4939 l
-S
-3630 4975 m
-3635 4975 l
-3637 4973 l
-3639 4970 l
-3641 4968 l
-3644 4966 l
-3646 4964 l
-3648 4961 l
-3650 4959 l
-3653 4957 l
-3655 4955 l
-S
-3590 2888 m
-3592 2890 l
-3594 2892 l
-3599 2892 l
-3601 2895 l
-3603 2897 l
-3606 2899 l
-3608 2901 l
-3610 2903 l
-S
-3610 2903 m
-3612 2906 l
-3615 2908 l
-3617 2910 l
-3619 2912 l
-3621 2915 l
-3623 2917 l
-3626 2919 l
-3628 2921 l
-3630 2924 l
-S
-3610 4995 m
-3612 4993 l
-3615 4990 l
-3617 4988 l
-3619 4986 l
-3621 4984 l
-3623 4982 l
-3626 4979 l
-3628 4977 l
-3630 4975 l
-S
-3590 5011 m
-3592 5008 l
-3594 5006 l
-3599 5006 l
-3601 5004 l
-3603 5002 l
-3606 4999 l
-3608 4997 l
-3610 4995 l
-S
-3550 2857 m
-3554 2857 l
-3556 2859 l
-3559 2861 l
-3561 2863 l
-S
-3561 2863 m
-3563 2866 l
-3565 2868 l
-3568 2870 l
-3572 2870 l
-3574 2872 l
-3577 2874 l
-3579 2877 l
-3581 2879 l
-3583 2881 l
-3585 2883 l
-3588 2886 l
-3590 2888 l
-S
-3561 5035 m
-3563 5033 l
-3565 5031 l
-3568 5028 l
-3572 5028 l
-3574 5026 l
-3577 5024 l
-3579 5022 l
-3581 5020 l
-3583 5017 l
-3585 5015 l
-3588 5013 l
-3590 5011 l
-S
-3550 5042 m
-3554 5042 l
-3556 5040 l
-3559 5037 l
-3561 5035 l
-S
-3510 2825 m
-3512 2828 l
-3514 2830 l
-3518 2830 l
-3521 2832 l
-3523 2834 l
-3525 2836 l
-3527 2839 l
-3530 2841 l
-3532 2843 l
-3536 2843 l
-3539 2845 l
-3541 2848 l
-3543 2850 l
-3545 2852 l
-3548 2854 l
-3550 2857 l
-S
-3510 5073 m
-3512 5071 l
-3514 5069 l
-3518 5069 l
-3521 5066 l
-3523 5064 l
-3525 5062 l
-3527 5060 l
-3530 5058 l
-3532 5055 l
-3536 5055 l
-3539 5053 l
-3541 5051 l
-3543 5049 l
-3545 5046 l
-3548 5044 l
-3550 5042 l
-S
-3469 2798 m
-3474 2798 l
-3476 2801 l
-3478 2803 l
-3480 2805 l
-3483 2807 l
-3487 2807 l
-3489 2810 l
-3492 2812 l
-3494 2814 l
-3496 2816 l
-3501 2816 l
-3503 2819 l
-3505 2821 l
-3507 2823 l
-S
-3510 2825 m
-3507 2823 l
-S
-3507 5075 m
-3510 5073 l
-S
-3469 5100 m
-3474 5100 l
-3476 5098 l
-3478 5096 l
-3480 5093 l
-3483 5091 l
-3487 5091 l
-3489 5089 l
-3492 5087 l
-3494 5084 l
-3496 5082 l
-3501 5082 l
-3503 5080 l
-3505 5078 l
-3507 5075 l
-S
-3429 2772 m
-3431 2774 l
-3434 2776 l
-3438 2776 l
-3440 2778 l
-3442 2781 l
-3447 2781 l
-3449 2783 l
-S
-3449 2783 m
-3451 2785 l
-3454 2787 l
-3456 2790 l
-3460 2790 l
-3463 2792 l
-3465 2794 l
-3467 2796 l
-3469 2798 l
-S
-3449 5116 m
-3451 5113 l
-3454 5111 l
-3456 5109 l
-3460 5109 l
-3463 5107 l
-3465 5104 l
-3467 5102 l
-3469 5100 l
-S
-3429 5127 m
-3431 5125 l
-3434 5122 l
-3438 5122 l
-3440 5120 l
-3442 5118 l
-3447 5118 l
-3449 5116 l
-S
-3389 2749 m
-3393 2749 l
-3396 2752 l
-3398 2754 l
-3402 2754 l
-3405 2756 l
-3407 2758 l
-3411 2758 l
-3413 2760 l
-3416 2763 l
-3418 2765 l
-3420 2767 l
-3425 2767 l
-3427 2769 l
-3429 2772 l
-S
-3389 5149 m
-3393 5149 l
-3396 5147 l
-3398 5145 l
-3402 5145 l
-3405 5142 l
-3407 5140 l
-3411 5140 l
-3413 5138 l
-3416 5136 l
-3418 5133 l
-3420 5131 l
-3425 5131 l
-3427 5129 l
-3429 5127 l
-S
-3349 2727 m
-3353 2727 l
-3355 2729 l
-3358 2731 l
-3362 2731 l
-3364 2734 l
-3367 2736 l
-3371 2736 l
-3373 2738 l
-3375 2740 l
-3380 2740 l
-3382 2743 l
-S
-3382 2743 m
-3384 2745 l
-3387 2747 l
-3389 2749 l
-S
-3382 5156 m
-3384 5154 l
-3387 5151 l
-3389 5149 l
-S
-3349 5171 m
-3353 5171 l
-3355 5169 l
-3358 5167 l
-3362 5167 l
-3364 5165 l
-3367 5163 l
-3371 5163 l
-3373 5160 l
-3375 5158 l
-3380 5158 l
-3382 5156 l
-S
-3308 2705 m
-3311 2707 l
-3313 2709 l
-3317 2709 l
-3320 2711 l
-3322 2714 l
-3326 2714 l
-3329 2716 l
-3331 2718 l
-3335 2718 l
-3337 2720 l
-3340 2723 l
-3344 2723 l
-3346 2725 l
-3349 2727 l
-S
-3308 5194 m
-3311 5192 l
-3313 5189 l
-3317 5189 l
-3320 5187 l
-3322 5185 l
-3326 5185 l
-3329 5183 l
-3331 5180 l
-3335 5180 l
-3337 5178 l
-3340 5176 l
-3344 5176 l
-3346 5174 l
-3349 5171 l
-S
-3268 2687 m
-3273 2687 l
-3275 2689 l
-3277 2691 l
-3282 2691 l
-3284 2693 l
-3286 2696 l
-3291 2696 l
-3293 2698 l
-3295 2700 l
-3299 2700 l
-3302 2702 l
-S
-3308 2705 m
-3304 2705 l
-3302 2702 l
-S
-3302 5196 m
-3304 5194 l
-3308 5194 l
-S
-3268 5212 m
-3273 5212 l
-3275 5209 l
-3277 5207 l
-3282 5207 l
-3284 5205 l
-3286 5203 l
-3291 5203 l
-3293 5201 l
-3295 5198 l
-3299 5198 l
-3302 5196 l
-S
-3228 2669 m
-3232 2669 l
-3235 2671 l
-3237 2673 l
-3241 2673 l
-3244 2676 l
-3246 2678 l
-3250 2678 l
-3253 2680 l
-3255 2682 l
-3259 2682 l
-3264 2682 l
-3266 2685 l
-3268 2687 l
-S
-3228 5230 m
-3232 5230 l
-3235 5227 l
-3237 5225 l
-3241 5225 l
-3244 5223 l
-3246 5221 l
-3250 5221 l
-3253 5218 l
-3255 5216 l
-3259 5216 l
-3264 5216 l
-3266 5214 l
-3268 5212 l
-S
-3188 2655 m
-3192 2655 l
-3197 2655 l
-3199 2658 l
-3201 2660 l
-3206 2660 l
-3210 2660 l
-3212 2662 l
-S
-3212 2662 m
-3215 2664 l
-3219 2664 l
-3221 2667 l
-3224 2669 l
-3228 2669 l
-S
-3212 5236 m
-3215 5234 l
-3219 5234 l
-3221 5232 l
-3224 5230 l
-3228 5230 l
-S
-3188 5243 m
-3192 5243 l
-3197 5243 l
-3199 5241 l
-3201 5239 l
-3206 5239 l
-3210 5239 l
-3212 5236 l
-S
-3148 2638 m
-3150 2640 l
-3152 2642 l
-3156 2642 l
-3161 2642 l
-3163 2644 l
-3165 2647 l
-3170 2647 l
-3174 2647 l
-3177 2649 l
-3179 2651 l
-3183 2651 l
-3186 2653 l
-3188 2655 l
-S
-3148 5261 m
-3150 5259 l
-3152 5256 l
-3156 5256 l
-3161 5256 l
-3163 5254 l
-3165 5252 l
-3170 5252 l
-3174 5252 l
-3177 5250 l
-3179 5247 l
-3183 5247 l
-3186 5245 l
-3188 5243 l
-S
-3107 2624 m
-3110 2626 l
-3112 2629 l
-3116 2629 l
-3121 2629 l
-3123 2631 l
-3125 2633 l
-3130 2633 l
-3134 2633 l
-3136 2635 l
-3139 2638 l
-3143 2638 l
-3148 2638 l
-S
-3107 5274 m
-3110 5272 l
-3112 5270 l
-3116 5270 l
-3121 5270 l
-3123 5268 l
-3125 5265 l
-3130 5265 l
-3134 5265 l
-3136 5263 l
-3139 5261 l
-3143 5261 l
-3148 5261 l
-S
-3067 2615 m
-3072 2615 l
-3076 2615 l
-3078 2617 l
-3081 2620 l
-3085 2620 l
-3089 2620 l
-3092 2622 l
-S
-3107 2624 m
-3103 2624 l
-3098 2624 l
-3094 2624 l
-3092 2622 l
-S
-3092 5277 m
-3094 5274 l
-3098 5274 l
-3103 5274 l
-3107 5274 l
-S
-3067 5283 m
-3072 5283 l
-3076 5283 l
-3078 5281 l
-3081 5279 l
-3085 5279 l
-3089 5279 l
-3092 5277 l
-S
-3027 2606 m
-3031 2606 l
-3036 2606 l
-3040 2606 l
-3043 2609 l
-3045 2611 l
-3049 2611 l
-3054 2611 l
-3058 2611 l
-3060 2613 l
-3063 2615 l
-3067 2615 l
-S
-3027 5292 m
-3031 5292 l
-3036 5292 l
-3040 5292 l
-3043 5290 l
-3045 5288 l
-3049 5288 l
-3054 5288 l
-3058 5288 l
-3060 5285 l
-3063 5283 l
-3067 5283 l
-S
-2987 2597 m
-2991 2597 l
-2996 2597 l
-3000 2597 l
-3005 2597 l
-3007 2600 l
-3009 2602 l
-3013 2602 l
-3018 2602 l
-3022 2602 l
-3025 2604 l
-3027 2606 l
-S
-2987 5301 m
-2991 5301 l
-2996 5301 l
-3000 5301 l
-3005 5301 l
-3007 5299 l
-3009 5297 l
-3013 5297 l
-3018 5297 l
-3022 5297 l
-3025 5294 l
-3027 5292 l
-S
-2946 2588 m
-2951 2588 l
-2955 2588 l
-2960 2588 l
-2962 2591 l
-2964 2593 l
-2969 2593 l
-2973 2593 l
-2978 2593 l
-2982 2593 l
-2984 2595 l
-2987 2597 l
-S
-2946 5310 m
-2951 5310 l
-2955 5310 l
-2960 5310 l
-2962 5308 l
-2964 5306 l
-2969 5306 l
-2973 5306 l
-2978 5306 l
-2982 5306 l
-2984 5303 l
-2987 5301 l
-S
-2906 2579 m
-2908 2582 l
-S
-2908 2582 m
-2911 2584 l
-2915 2584 l
-2920 2584 l
-2924 2584 l
-2929 2584 l
-2933 2584 l
-2935 2586 l
-2938 2588 l
-2942 2588 l
-2946 2588 l
-S
-2908 5317 m
-2911 5314 l
-2915 5314 l
-2920 5314 l
-2924 5314 l
-2929 5314 l
-2933 5314 l
-2935 5312 l
-2938 5310 l
-2942 5310 l
-2946 5310 l
-S
-2906 5319 m
-2908 5317 l
-S
-2866 2575 m
-2870 2575 l
-2875 2575 l
-2877 2577 l
-2879 2579 l
-2884 2579 l
-2888 2579 l
-2893 2579 l
-2897 2579 l
-2902 2579 l
-2906 2579 l
-S
-2906 5319 m
-2902 5319 l
-2897 5319 l
-2893 5319 l
-2888 5319 l
-2884 5319 l
-2879 5319 l
-2877 5321 l
-2875 5323 l
-2870 5323 l
-2866 5323 l
-S
-2826 2571 m
-2830 2571 l
-2835 2571 l
-2837 2573 l
-2839 2575 l
-2844 2575 l
-2848 2575 l
-2853 2575 l
-2857 2575 l
-2862 2575 l
-2866 2575 l
-S
-2826 5328 m
-2830 5328 l
-2835 5328 l
-2837 5326 l
-2839 5323 l
-2844 5323 l
-2848 5323 l
-2853 5323 l
-2857 5323 l
-2862 5323 l
-2866 5323 l
-S
-2786 2571 m
-2790 2571 l
-2794 2571 l
-2799 2571 l
-2803 2571 l
-2808 2571 l
-2812 2571 l
-2817 2571 l
-2821 2571 l
-2826 2571 l
-S
-2786 5328 m
-2790 5328 l
-2794 5328 l
-2799 5328 l
-2803 5328 l
-2808 5328 l
-2812 5328 l
-2817 5328 l
-2821 5328 l
-2826 5328 l
-S
-2745 2566 m
-2750 2566 l
-2754 2566 l
-2759 2566 l
-2763 2566 l
-2768 2566 l
-2772 2566 l
-2774 2568 l
-2777 2571 l
-2781 2571 l
-2786 2571 l
-S
-2745 5332 m
-2750 5332 l
-2754 5332 l
-2759 5332 l
-2763 5332 l
-2768 5332 l
-2772 5332 l
-2774 5330 l
-2777 5328 l
-2781 5328 l
-2786 5328 l
-S
-2705 2566 m
-2710 2566 l
-2714 2566 l
-2719 2566 l
-2723 2566 l
-2727 2566 l
-2732 2566 l
-2736 2566 l
-2741 2566 l
-2745 2566 l
-S
-2705 5332 m
-2710 5332 l
-2714 5332 l
-2719 5332 l
-2723 5332 l
-2727 5332 l
-2732 5332 l
-2736 5332 l
-2741 5332 l
-2745 5332 l
-S
-2665 2566 m
-2669 2566 l
-2674 2566 l
-2678 2566 l
-2683 2566 l
-2687 2566 l
-2692 2566 l
-2696 2566 l
-2701 2566 l
-2705 2566 l
-S
-2665 5332 m
-2669 5332 l
-2674 5332 l
-2678 5332 l
-2683 5332 l
-2687 5332 l
-2692 5332 l
-2696 5332 l
-2701 5332 l
-2705 5332 l
-S
-2625 2571 m
-2629 2571 l
-2634 2571 l
-2636 2568 l
-2638 2566 l
-2643 2566 l
-2647 2566 l
-2651 2566 l
-2656 2566 l
-2660 2566 l
-2665 2566 l
-S
-2625 5328 m
-2629 5328 l
-2634 5328 l
-2636 5330 l
-2638 5332 l
-2643 5332 l
-2647 5332 l
-2651 5332 l
-2656 5332 l
-2660 5332 l
-2665 5332 l
-S
-2584 2571 m
-2589 2571 l
-2593 2571 l
-2598 2571 l
-2602 2571 l
-2607 2571 l
-2611 2571 l
-2616 2571 l
-2620 2571 l
-2625 2571 l
-S
-2584 5328 m
-2589 5328 l
-2593 5328 l
-2598 5328 l
-2602 5328 l
-2607 5328 l
-2611 5328 l
-2616 5328 l
-2620 5328 l
-2625 5328 l
-S
-2544 2575 m
-2549 2575 l
-2553 2575 l
-2558 2575 l
-2562 2575 l
-2567 2575 l
-2571 2575 l
-2573 2573 l
-2576 2571 l
-2580 2571 l
-2584 2571 l
-S
-2544 5323 m
-2549 5323 l
-2553 5323 l
-2558 5323 l
-2562 5323 l
-2567 5323 l
-2571 5323 l
-2573 5326 l
-2576 5328 l
-2580 5328 l
-2584 5328 l
-S
-2504 2579 m
-2508 2579 l
-2513 2579 l
-2517 2579 l
-2522 2579 l
-2526 2579 l
-2531 2579 l
-2533 2577 l
-2535 2575 l
-2540 2575 l
-2544 2575 l
-S
-2504 5319 m
-2508 5319 l
-2513 5319 l
-2517 5319 l
-2522 5319 l
-2526 5319 l
-2531 5319 l
-2533 5321 l
-2535 5323 l
-2540 5323 l
-2544 5323 l
-S
-2502 2582 m
-2504 2579 l
-S
-2464 2588 m
-2468 2588 l
-2473 2588 l
-2475 2586 l
-2477 2584 l
-2482 2584 l
-2486 2584 l
-2491 2584 l
-2495 2584 l
-2500 2584 l
-2502 2582 l
-S
-2464 5310 m
-2468 5310 l
-2473 5310 l
-2475 5312 l
-2477 5314 l
-2482 5314 l
-2486 5314 l
-2491 5314 l
-2495 5314 l
-2500 5314 l
-2502 5317 l
-S
-2504 5319 m
-2502 5317 l
-S
-2424 2597 m
-2426 2595 l
-2428 2593 l
-2433 2593 l
-2437 2593 l
-2441 2593 l
-2446 2593 l
-2448 2591 l
-2450 2588 l
-2455 2588 l
-2459 2588 l
-2464 2588 l
-S
-2424 5301 m
-2426 5303 l
-2428 5306 l
-2433 5306 l
-2437 5306 l
-2441 5306 l
-2446 5306 l
-2448 5308 l
-2450 5310 l
-2455 5310 l
-2459 5310 l
-2464 5310 l
-S
-2383 2606 m
-2386 2604 l
-2388 2602 l
-2392 2602 l
-2397 2602 l
-2401 2602 l
-2403 2600 l
-2406 2597 l
-2410 2597 l
-2415 2597 l
-2419 2597 l
-2424 2597 l
-S
-2383 5292 m
-2386 5294 l
-2388 5297 l
-2392 5297 l
-2397 5297 l
-2401 5297 l
-2403 5299 l
-2406 5301 l
-2410 5301 l
-2415 5301 l
-2419 5301 l
-2424 5301 l
-S
-2343 2615 m
-2348 2615 l
-2350 2613 l
-2352 2611 l
-2357 2611 l
-2361 2611 l
-2365 2611 l
-2368 2609 l
-2370 2606 l
-2374 2606 l
-2379 2606 l
-2383 2606 l
-S
-2343 5283 m
-2348 5283 l
-2350 5285 l
-2352 5288 l
-2357 5288 l
-2361 5288 l
-2365 5288 l
-2368 5290 l
-2370 5292 l
-2374 5292 l
-2379 5292 l
-2383 5292 l
-S
-2319 2622 m
-2321 2620 l
-2325 2620 l
-2330 2620 l
-2332 2617 l
-2334 2615 l
-2339 2615 l
-2343 2615 l
-S
-2303 2624 m
-2307 2624 l
-2312 2624 l
-2316 2624 l
-2319 2622 l
-S
-2303 5274 m
-2307 5274 l
-2312 5274 l
-2316 5274 l
-2319 5277 l
-S
-2319 5277 m
-2321 5279 l
-2325 5279 l
-2330 5279 l
-2332 5281 l
-2334 5283 l
-2339 5283 l
-2343 5283 l
-S
-2303 2624 m
-2301 2626 l
-2298 2629 l
-2294 2629 l
-2290 2629 l
-2287 2631 l
-2285 2633 l
-2281 2633 l
-2276 2633 l
-2274 2635 l
-2272 2638 l
-2267 2638 l
-2263 2638 l
-S
-2263 5261 m
-2267 5261 l
-2272 5261 l
-2274 5263 l
-2276 5265 l
-2281 5265 l
-2285 5265 l
-2287 5268 l
-2290 5270 l
-2294 5270 l
-2298 5270 l
-2301 5272 l
-2303 5274 l
-S
-2222 2655 m
-2225 2653 l
-2227 2651 l
-2231 2651 l
-2234 2649 l
-2236 2647 l
-2240 2647 l
-2245 2647 l
-2247 2644 l
-2249 2642 l
-2254 2642 l
-2258 2642 l
-2260 2640 l
-2263 2638 l
-S
-2222 5243 m
-2225 5245 l
-2227 5247 l
-2231 5247 l
-2234 5250 l
-2236 5252 l
-2240 5252 l
-2245 5252 l
-2247 5254 l
-2249 5256 l
-2254 5256 l
-2258 5256 l
-2260 5259 l
-2263 5261 l
-S
-2198 2662 m
-2200 2660 l
-2205 2660 l
-2209 2660 l
-2211 2658 l
-2214 2655 l
-2218 2655 l
-2222 2655 l
-S
-2182 2669 m
-2187 2669 l
-2189 2667 l
-2191 2664 l
-2196 2664 l
-2198 2662 l
-S
-2182 5230 m
-2187 5230 l
-2189 5232 l
-2191 5234 l
-2196 5234 l
-2198 5236 l
-S
-2198 5236 m
-2200 5239 l
-2205 5239 l
-2209 5239 l
-2211 5241 l
-2214 5243 l
-2218 5243 l
-2222 5243 l
-S
-2142 2687 m
-2144 2685 l
-2147 2682 l
-2151 2682 l
-2155 2682 l
-2158 2680 l
-2160 2678 l
-2164 2678 l
-2167 2676 l
-2169 2673 l
-2173 2673 l
-2176 2671 l
-2178 2669 l
-2182 2669 l
-S
-2142 5212 m
-2144 5214 l
-2147 5216 l
-2151 5216 l
-2155 5216 l
-2158 5218 l
-2160 5221 l
-2164 5221 l
-2167 5223 l
-2169 5225 l
-2173 5225 l
-2176 5227 l
-2178 5230 l
-2182 5230 l
-S
-2109 2702 m
-2111 2700 l
-2115 2700 l
-2117 2698 l
-2120 2696 l
-2124 2696 l
-2126 2693 l
-2129 2691 l
-2133 2691 l
-2135 2689 l
-2138 2687 l
-2142 2687 l
-S
-2102 2705 m
-2106 2705 l
-2109 2702 l
-S
-2102 5194 m
-2106 5194 l
-2109 5196 l
-S
-2109 5196 m
-2111 5198 l
-2115 5198 l
-2117 5201 l
-2120 5203 l
-2124 5203 l
-2126 5205 l
-2129 5207 l
-2133 5207 l
-2135 5209 l
-2138 5212 l
-2142 5212 l
-S
-2102 2705 m
-2100 2707 l
-2097 2709 l
-2093 2709 l
-2091 2711 l
-2088 2714 l
-2084 2714 l
-2082 2716 l
-2079 2718 l
-2075 2718 l
-2073 2720 l
-2071 2723 l
-2066 2723 l
-2064 2725 l
-2062 2727 l
-S
-2062 5171 m
-2064 5174 l
-2066 5176 l
-2071 5176 l
-2073 5178 l
-2075 5180 l
-2079 5180 l
-2082 5183 l
-2084 5185 l
-2088 5185 l
-2091 5187 l
-2093 5189 l
-2097 5189 l
-2100 5192 l
-2102 5194 l
-S
-2028 2743 m
-2030 2740 l
-2035 2740 l
-2037 2738 l
-2039 2736 l
-2044 2736 l
-2046 2734 l
-2048 2731 l
-2053 2731 l
-2055 2729 l
-2057 2727 l
-2062 2727 l
-S
-2021 2749 m
-2024 2747 l
-2026 2745 l
-2028 2743 l
-S
-2021 5149 m
-2024 5151 l
-2026 5154 l
-2028 5156 l
-S
-2028 5156 m
-2030 5158 l
-2035 5158 l
-2037 5160 l
-2039 5163 l
-2044 5163 l
-2046 5165 l
-2048 5167 l
-2053 5167 l
-2055 5169 l
-2057 5171 l
-2062 5171 l
-S
-1981 2772 m
-1983 2769 l
-1986 2767 l
-1990 2767 l
-1992 2765 l
-1995 2763 l
-1997 2760 l
-1999 2758 l
-2003 2758 l
-2006 2756 l
-2008 2754 l
-2012 2754 l
-2015 2752 l
-2017 2749 l
-2021 2749 l
-S
-1981 5127 m
-1983 5129 l
-1986 5131 l
-1990 5131 l
-1992 5133 l
-1995 5136 l
-1997 5138 l
-1999 5140 l
-2003 5140 l
-2006 5142 l
-2008 5145 l
-2012 5145 l
-2015 5147 l
-2017 5149 l
-2021 5149 l
-S
-1961 2783 m
-1963 2781 l
-1968 2781 l
-1970 2778 l
-1972 2776 l
-1977 2776 l
-1979 2774 l
-1981 2772 l
-S
-1941 2798 m
-1943 2796 l
-1945 2794 l
-1948 2792 l
-1950 2790 l
-1954 2790 l
-1957 2787 l
-1959 2785 l
-1961 2783 l
-S
-1941 5100 m
-1943 5102 l
-1945 5104 l
-1948 5107 l
-1950 5109 l
-1954 5109 l
-1957 5111 l
-1959 5113 l
-1961 5116 l
-S
-1961 5116 m
-1963 5118 l
-1968 5118 l
-1970 5120 l
-1972 5122 l
-1977 5122 l
-1979 5125 l
-1981 5127 l
-S
-1903 2823 m
-1905 2821 l
-1907 2819 l
-1910 2816 l
-1914 2816 l
-1916 2814 l
-1919 2812 l
-1921 2810 l
-1923 2807 l
-1928 2807 l
-1930 2805 l
-1932 2803 l
-1934 2801 l
-1936 2798 l
-1941 2798 l
-S
-1901 2825 m
-1903 2823 l
-S
-1901 5073 m
-1903 5075 l
-S
-1903 5075 m
-1905 5078 l
-1907 5080 l
-1910 5082 l
-1914 5082 l
-1916 5084 l
-1919 5087 l
-1921 5089 l
-1923 5091 l
-1928 5091 l
-1930 5093 l
-1932 5096 l
-1934 5098 l
-1936 5100 l
-1941 5100 l
-S
-1901 2825 m
-1898 2828 l
-1896 2830 l
-1892 2830 l
-1890 2832 l
-1887 2834 l
-1885 2836 l
-1883 2839 l
-1881 2841 l
-1878 2843 l
-1874 2843 l
-1872 2845 l
-1869 2848 l
-1867 2850 l
-1865 2852 l
-1863 2854 l
-1860 2857 l
-S
-1860 5042 m
-1863 5044 l
-1865 5046 l
-1867 5049 l
-1869 5051 l
-1872 5053 l
-1874 5055 l
-1878 5055 l
-1881 5058 l
-1883 5060 l
-1885 5062 l
-1887 5064 l
-1890 5066 l
-1892 5069 l
-1896 5069 l
-1898 5071 l
-1901 5073 l
-S
-1849 2863 m
-1852 2861 l
-1854 2859 l
-1856 2857 l
-1860 2857 l
-S
-1820 2888 m
-1823 2886 l
-1825 2883 l
-1827 2881 l
-1829 2879 l
-1831 2877 l
-1834 2874 l
-1836 2872 l
-1838 2870 l
-1843 2870 l
-1845 2868 l
-1847 2866 l
-1849 2863 l
-S
-1820 5011 m
-1823 5013 l
-1825 5015 l
-1827 5017 l
-1829 5020 l
-1831 5022 l
-1834 5024 l
-1836 5026 l
-1838 5028 l
-1843 5028 l
-1845 5031 l
-1847 5033 l
-1849 5035 l
-S
-1849 5035 m
-1852 5037 l
-1854 5040 l
-1856 5042 l
-1860 5042 l
-S
-1800 2903 m
-1802 2901 l
-1805 2899 l
-1807 2897 l
-1809 2895 l
-1811 2892 l
-1816 2892 l
-1818 2890 l
-1820 2888 l
-S
-1780 2924 m
-1782 2921 l
-1785 2919 l
-1787 2917 l
-1789 2915 l
-1791 2912 l
-1793 2910 l
-1796 2908 l
-1798 2906 l
-1800 2903 l
-S
-1780 4975 m
-1782 4977 l
-1785 4979 l
-1787 4982 l
-1789 4984 l
-1791 4986 l
-1793 4988 l
-1796 4990 l
-1798 4993 l
-1800 4995 l
-S
-1800 4995 m
-1802 4997 l
-1805 4999 l
-1807 5002 l
-1809 5004 l
-1811 5006 l
-1816 5006 l
-1818 5008 l
-1820 5011 l
-S
-1755 2944 m
-1758 2941 l
-1760 2939 l
-1762 2937 l
-1764 2935 l
-1767 2933 l
-1769 2930 l
-1771 2928 l
-1773 2926 l
-1776 2924 l
-1780 2924 l
-S
-1740 2959 m
-1742 2957 l
-1744 2955 l
-1747 2953 l
-1749 2950 l
-1751 2948 l
-1753 2946 l
-1755 2944 l
-S
-1740 4939 m
-1742 4941 l
-1744 4944 l
-1747 4946 l
-1749 4948 l
-1751 4950 l
-1753 4953 l
-1755 4955 l
-S
-1755 4955 m
-1758 4957 l
-1760 4959 l
-1762 4961 l
-1764 4964 l
-1767 4966 l
-1769 4968 l
-1771 4970 l
-1773 4973 l
-1776 4975 l
-1780 4975 l
-S
-1715 2984 m
-1717 2982 l
-1720 2979 l
-1722 2977 l
-1724 2975 l
-1726 2973 l
-1729 2971 l
-1731 2968 l
-1733 2966 l
-1735 2964 l
-1738 2962 l
-1740 2959 l
-S
-1700 3000 m
-1702 2997 l
-1704 2995 l
-1706 2993 l
-1709 2991 l
-1711 2988 l
-1713 2986 l
-1715 2984 l
-S
-1700 4899 m
-1702 4901 l
-1704 4903 l
-1706 4906 l
-1709 4908 l
-1711 4910 l
-1713 4912 l
-1715 4915 l
-S
-1715 4915 m
-1717 4917 l
-1720 4919 l
-1722 4921 l
-1724 4923 l
-1726 4926 l
-1729 4928 l
-1731 4930 l
-1733 4932 l
-1735 4935 l
-1738 4937 l
-1740 4939 l
-S
-1679 3024 m
-1679 3020 l
-1682 3017 l
-1684 3015 l
-1686 3013 l
-1688 3011 l
-1691 3009 l
-1693 3006 l
-1695 3004 l
-1697 3002 l
-1700 3000 l
-S
-1659 3044 m
-1662 3042 l
-1664 3040 l
-1666 3038 l
-1668 3035 l
-1671 3033 l
-1673 3031 l
-1675 3029 l
-1677 3026 l
-1679 3024 l
-S
-1659 4854 m
-1662 4856 l
-1664 4859 l
-1666 4861 l
-1668 4863 l
-1671 4865 l
-1673 4868 l
-1675 4870 l
-1677 4872 l
-1679 4874 l
-S
-1679 4874 m
-1679 4879 l
-1682 4881 l
-1684 4883 l
-1686 4885 l
-1688 4888 l
-1691 4890 l
-1693 4892 l
-1695 4894 l
-1697 4897 l
-1700 4899 l
-S
-1644 3064 m
-1646 3062 l
-1648 3060 l
-1648 3055 l
-1650 3053 l
-1653 3051 l
-1655 3049 l
-1657 3047 l
-1659 3044 l
-S
-1619 3093 m
-1621 3091 l
-1624 3089 l
-1626 3087 l
-1626 3082 l
-1628 3080 l
-1630 3078 l
-1633 3076 l
-1635 3073 l
-1637 3071 l
-1639 3069 l
-1642 3067 l
-1644 3064 l
-S
-1619 4805 m
-1621 4807 l
-1624 4810 l
-1626 4812 l
-1626 4816 l
-1628 4818 l
-1630 4821 l
-1633 4823 l
-1635 4825 l
-1637 4827 l
-1639 4830 l
-1642 4832 l
-1644 4834 l
-S
-1644 4834 m
-1646 4836 l
-1648 4839 l
-1648 4843 l
-1650 4845 l
-1653 4847 l
-1655 4850 l
-1657 4852 l
-1659 4854 l
-S
-1612 3105 m
-1612 3100 l
-1615 3098 l
-1617 3096 l
-1619 3093 l
-S
-1612 3105 m
-1610 3107 l
-1608 3109 l
-1606 3111 l
-1604 3114 l
-1601 3116 l
-1599 3118 l
-1599 3122 l
-1597 3125 l
-1595 3127 l
-1592 3129 l
-1590 3131 l
-1588 3134 l
-1586 3136 l
-1586 3140 l
-1583 3143 l
-1581 3145 l
-S
-1579 3147 m
-1581 3145 l
-S
-1579 4751 m
-1581 4754 l
-S
-1581 4754 m
-1583 4756 l
-1586 4758 l
-1586 4763 l
-1588 4765 l
-1590 4767 l
-1592 4769 l
-1595 4772 l
-1597 4774 l
-1599 4776 l
-1599 4780 l
-1601 4783 l
-1604 4785 l
-1606 4787 l
-1608 4789 l
-1610 4792 l
-1612 4794 l
-S
-1612 4794 m
-1612 4798 l
-1615 4801 l
-1617 4803 l
-1619 4805 l
-S
-1579 3147 m
-1577 3149 l
-1574 3152 l
-1572 3154 l
-1572 3158 l
-1570 3160 l
-1568 3163 l
-1566 3165 l
-1563 3167 l
-1563 3172 l
-1561 3174 l
-1559 3176 l
-1557 3178 l
-1554 3181 l
-1554 3185 l
-S
-1539 3205 m
-1541 3203 l
-1543 3201 l
-1545 3198 l
-1545 3194 l
-1548 3192 l
-1550 3190 l
-1552 3187 l
-1554 3185 l
-S
-1539 4693 m
-1541 4696 l
-1543 4698 l
-1545 4700 l
-1545 4704 l
-1548 4707 l
-1550 4709 l
-1552 4711 l
-1554 4713 l
-S
-1554 4713 m
-1554 4718 l
-1557 4720 l
-1559 4722 l
-1561 4725 l
-1563 4727 l
-1563 4731 l
-1566 4734 l
-1568 4736 l
-1570 4738 l
-1572 4740 l
-1572 4745 l
-1574 4747 l
-1577 4749 l
-1579 4751 l
-S
-1528 3225 m
-1530 3223 l
-1532 3221 l
-1532 3216 l
-1534 3214 l
-1536 3212 l
-1536 3207 l
-1539 3205 l
-S
-1528 3225 m
-1525 3227 l
-1523 3230 l
-1523 3234 l
-1521 3236 l
-1519 3239 l
-1516 3241 l
-1514 3243 l
-1514 3248 l
-1512 3250 l
-1510 3252 l
-1510 3257 l
-1507 3259 l
-1505 3261 l
-1505 3265 l
-S
-1499 3272 m
-1501 3270 l
-1503 3268 l
-1505 3265 l
-S
-1499 4626 m
-1501 4629 l
-1503 4631 l
-1505 4633 l
-S
-1505 4633 m
-1505 4637 l
-1507 4640 l
-1510 4642 l
-1510 4646 l
-1512 4649 l
-1514 4651 l
-1514 4655 l
-1516 4658 l
-1519 4660 l
-1521 4662 l
-1523 4664 l
-1523 4669 l
-1525 4671 l
-1528 4673 l
-S
-1528 4673 m
-1530 4675 l
-1532 4678 l
-1532 4682 l
-1534 4684 l
-1536 4687 l
-1536 4691 l
-1539 4693 l
-S
-1483 3306 m
-1483 3301 l
-1485 3299 l
-1487 3297 l
-1487 3292 l
-1490 3290 l
-1492 3288 l
-1492 3283 l
-1494 3281 l
-1496 3279 l
-1496 3274 l
-1499 3272 l
-S
-1483 3306 m
-1481 3308 l
-1478 3310 l
-1478 3315 l
-1476 3317 l
-1474 3319 l
-1474 3324 l
-1472 3326 l
-1469 3328 l
-1469 3333 l
-1467 3335 l
-1465 3337 l
-1465 3341 l
-1463 3344 l
-1461 3346 l
-S
-1458 3353 m
-1461 3350 l
-1461 3346 l
-S
-1458 4546 m
-1461 4548 l
-1461 4553 l
-S
-1461 4553 m
-1463 4555 l
-1465 4557 l
-1465 4561 l
-1467 4564 l
-1469 4566 l
-1469 4570 l
-1472 4573 l
-1474 4575 l
-1474 4579 l
-1476 4582 l
-1478 4584 l
-1478 4588 l
-1481 4591 l
-1483 4593 l
-S
-1483 4593 m
-1483 4597 l
-1485 4599 l
-1487 4602 l
-1487 4606 l
-1490 4608 l
-1492 4611 l
-1492 4615 l
-1494 4617 l
-1496 4620 l
-1496 4624 l
-1499 4626 l
-S
-1443 3386 m
-1443 3382 l
-1445 3379 l
-1447 3377 l
-1447 3373 l
-1449 3371 l
-1452 3368 l
-1452 3364 l
-1454 3362 l
-1456 3359 l
-1456 3355 l
-1458 3353 l
-S
-1443 3386 m
-1440 3388 l
-1438 3391 l
-1438 3395 l
-1438 3400 l
-1436 3402 l
-1434 3404 l
-1434 3408 l
-1431 3411 l
-1429 3413 l
-1429 3417 l
-1427 3420 l
-1425 3422 l
-1425 3426 l
-S
-1418 3442 m
-1420 3440 l
-1420 3435 l
-1423 3433 l
-1425 3431 l
-1425 3426 l
-S
-1418 4456 m
-1420 4459 l
-1420 4463 l
-1423 4465 l
-1425 4468 l
-1425 4472 l
-S
-1425 4472 m
-1425 4477 l
-1427 4479 l
-1429 4481 l
-1429 4486 l
-1431 4488 l
-1434 4490 l
-1434 4494 l
-1436 4497 l
-1438 4499 l
-1438 4503 l
-1438 4508 l
-1440 4510 l
-1443 4512 l
-S
-1443 4512 m
-1443 4517 l
-1445 4519 l
-1447 4521 l
-1447 4526 l
-1449 4528 l
-1452 4530 l
-1452 4535 l
-1454 4537 l
-1456 4539 l
-1456 4544 l
-1458 4546 l
-S
-1411 3467 m
-1411 3462 l
-1411 3458 l
-1414 3455 l
-1416 3453 l
-1416 3449 l
-1416 3444 l
-1418 3442 l
-S
-1411 3467 m
-1409 3469 l
-1407 3471 l
-1407 3476 l
-1405 3478 l
-1402 3480 l
-1402 3484 l
-1402 3489 l
-1400 3491 l
-1398 3493 l
-1398 3498 l
-1398 3502 l
-1396 3505 l
-1393 3507 l
-S
-1393 3507 m
-1393 3511 l
-1393 3516 l
-1391 3518 l
-1389 3520 l
-1389 3525 l
-1389 3529 l
-1387 3531 l
-1385 3534 l
-1385 3538 l
-1385 3543 l
-1382 3545 l
-1380 3547 l
-S
-1378 3563 m
-1380 3560 l
-1380 3556 l
-1380 3551 l
-1380 3547 l
-S
-1378 4336 m
-1380 4338 l
-1380 4342 l
-1380 4347 l
-1380 4351 l
-S
-1380 4351 m
-1382 4354 l
-1385 4356 l
-1385 4360 l
-1385 4365 l
-1387 4367 l
-1389 4369 l
-1389 4374 l
-1389 4378 l
-1391 4380 l
-1393 4383 l
-1393 4387 l
-1393 4392 l
-S
-1393 4392 m
-1396 4394 l
-1398 4396 l
-1398 4401 l
-1398 4405 l
-1400 4407 l
-1402 4410 l
-1402 4414 l
-1402 4418 l
-1405 4421 l
-1407 4423 l
-1407 4427 l
-1409 4430 l
-1411 4432 l
-S
-1411 4432 m
-1411 4436 l
-1411 4441 l
-1414 4443 l
-1416 4445 l
-1416 4450 l
-1416 4454 l
-1418 4456 l
-S
-1371 3587 m
-1371 3583 l
-1371 3578 l
-1373 3576 l
-1376 3574 l
-1376 3569 l
-1376 3565 l
-1378 3563 l
-S
-1371 3587 m
-1371 3592 l
-1369 3594 l
-1367 3596 l
-1367 3601 l
-1367 3605 l
-1367 3610 l
-1364 3612 l
-1362 3614 l
-1362 3619 l
-1362 3623 l
-1362 3627 l
-S
-1362 3627 m
-1360 3630 l
-1358 3632 l
-1358 3636 l
-1358 3641 l
-1358 3645 l
-1355 3648 l
-1353 3650 l
-1353 3654 l
-1353 3659 l
-1353 3663 l
-1353 3668 l
-S
-1353 3668 m
-1351 3670 l
-1349 3672 l
-1349 3677 l
-1349 3681 l
-1349 3686 l
-1349 3690 l
-1347 3692 l
-1344 3694 l
-1344 3699 l
-1344 3703 l
-1344 3708 l
-S
-1338 3746 m
-1340 3744 l
-1340 3739 l
-1340 3735 l
-1340 3730 l
-1340 3726 l
-1340 3721 l
-1342 3719 l
-1344 3717 l
-1344 3712 l
-1344 3708 l
-S
-1338 4153 m
-1340 4155 l
-1340 4159 l
-1340 4164 l
-1340 4168 l
-1340 4173 l
-1340 4177 l
-1342 4179 l
-1344 4182 l
-1344 4186 l
-1344 4191 l
-S
-1344 4191 m
-1344 4195 l
-1344 4199 l
-1344 4204 l
-1347 4206 l
-1349 4208 l
-1349 4213 l
-1349 4217 l
-1349 4222 l
-1349 4226 l
-1351 4229 l
-1353 4231 l
-S
-1353 4231 m
-1353 4235 l
-1353 4240 l
-1353 4244 l
-1353 4249 l
-1355 4251 l
-1358 4253 l
-1358 4258 l
-1358 4262 l
-1358 4267 l
-1360 4269 l
-1362 4271 l
-S
-1362 4271 m
-1362 4275 l
-1362 4280 l
-1362 4284 l
-1364 4287 l
-1367 4289 l
-1367 4293 l
-1367 4298 l
-1367 4302 l
-1369 4305 l
-1371 4307 l
-1371 4311 l
-S
-1371 4311 m
-1371 4316 l
-1371 4320 l
-1373 4322 l
-1376 4325 l
-1376 4329 l
-1376 4334 l
-1378 4336 l
-S
-1335 3748 m
-1338 3746 l
-S
-1335 3748 m
-1335 3753 l
-1335 3757 l
-1335 3762 l
-1335 3766 l
-1335 3770 l
-1335 3775 l
-1333 3777 l
-1331 3779 l
-1331 3784 l
-1331 3788 l
-S
-1331 3788 m
-1331 3793 l
-1331 3797 l
-1331 3802 l
-1331 3806 l
-1331 3811 l
-1331 3815 l
-1329 3817 l
-1326 3820 l
-1326 3824 l
-1326 3829 l
-S
-1326 3829 m
-1326 3833 l
-1326 3838 l
-1326 3842 l
-1326 3846 l
-1326 3851 l
-1326 3855 l
-1326 3860 l
-1326 3864 l
-1326 3869 l
-S
-1326 3869 m
-1326 3873 l
-1326 3878 l
-1324 3880 l
-1322 3882 l
-1322 3887 l
-1322 3891 l
-1322 3896 l
-1322 3900 l
-1322 3905 l
-1322 3909 l
-S
-1322 3909 m
-1322 3913 l
-1322 3918 l
-1322 3922 l
-1322 3927 l
-1322 3931 l
-1322 3936 l
-1322 3940 l
-1322 3945 l
-1322 3949 l
-S
-1322 3949 m
-1322 3954 l
-1322 3958 l
-1322 3963 l
-1322 3967 l
-1322 3972 l
-1322 3976 l
-1322 3981 l
-1322 3985 l
-1322 3989 l
-S
-1322 3989 m
-1322 3994 l
-1322 3998 l
-1322 4003 l
-1322 4007 l
-1322 4012 l
-1322 4016 l
-1324 4018 l
-1326 4021 l
-1326 4025 l
-1326 4030 l
-S
-1326 4030 m
-1326 4034 l
-1326 4039 l
-1326 4043 l
-1326 4048 l
-1326 4052 l
-1326 4056 l
-1326 4061 l
-1326 4065 l
-1326 4070 l
-S
-1326 4070 m
-1326 4074 l
-1326 4079 l
-1329 4081 l
-1331 4083 l
-1331 4088 l
-1331 4092 l
-1331 4097 l
-1331 4101 l
-1331 4106 l
-1331 4110 l
-S
-1331 4110 m
-1331 4115 l
-1331 4119 l
-1333 4121 l
-1335 4124 l
-1335 4128 l
-1335 4132 l
-1335 4137 l
-1335 4141 l
-1335 4146 l
-1335 4150 l
-S
-1338 4153 m
-1335 4150 l
-S
-1 g
-3879 3594 m
-3928 3594 l
-3928 3595 l
-3879 3595 l
-3842 3595 m
-3928 3595 l
-3928 3596 l
-3842 3596 l
-3806 3596 m
-3928 3596 l
-3928 3597 l
-3806 3597 l
-3806 3597 m
-3928 3597 l
-3928 3614 l
-3806 3614 l
-3806 3614 m
-3929 3614 l
-3929 3636 l
-3806 3636 l
-3807 3636 m
-3929 3636 l
-3929 3655 l
-3807 3655 l
-3807 3655 m
-3930 3655 l
-3930 3674 l
-3807 3674 l
-3808 3674 m
-3930 3674 l
-3930 3696 l
-3808 3696 l
-3808 3696 m
-3931 3696 l
-3931 3712 l
-3808 3712 l
-3809 3712 m
-3931 3712 l
-3931 3737 l
-3809 3737 l
-3809 3737 m
-3932 3737 l
-3932 3750 l
-3809 3750 l
-3810 3750 m
-3932 3750 l
-3932 3778 l
-3810 3778 l
-3810 3778 m
-3933 3778 l
-3933 3788 l
-3810 3788 l
-3811 3788 m
-3933 3788 l
-3933 3819 l
-3811 3819 l
-3811 3819 m
-3934 3819 l
-3934 3826 l
-3811 3826 l
-3812 3826 m
-3934 3826 l
-3934 3861 l
-3812 3861 l
-3812 3861 m
-3934 3861 l
-3934 3862 l
-3812 3862 l
-3812 3862 m
-3894 3862 l
-3894 3863 l
-3812 3863 l
-3812 3863 m
-3854 3863 l
-3854 3864 l
-3812 3864 l
-Y
-3927.5 3593.7 m
-3806 3597 l
-3813 3864 l
-3934 3861 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3824 3626 m
-3825 3672 l
-3858 3646 l
-3858 3658 l
-3863 3666 l
-3867 3670 l
-3879 3674 l
-3888 3674 l
-3900 3670 l
-3908 3661 l
-3912 3648 l
-3912 3636 l
-3907 3623 l
-3903 3619 l
-3895 3615 l
-S
-3826 3726 m
-3830 3713 l
-3843 3705 l
-3863 3700 l
-3876 3699 l
-3897 3703 l
-3910 3711 l
-3914 3724 l
-3914 3732 l
-3911 3745 l
-3898 3753 l
-3877 3758 l
-3865 3758 l
-3844 3755 l
-3831 3747 l
-3827 3734 l
-3826 3726 l
-S
-3829 3809 m
-3832 3797 l
-3845 3788 l
-3866 3783 l
-3878 3783 l
-3899 3787 l
-3912 3795 l
-3916 3807 l
-3917 3815 l
-3913 3828 l
-3900 3837 l
-3880 3841 l
-3867 3842 l
-3846 3838 l
-3833 3830 l
-3829 3818 l
-3829 3809 l
-S
-1 g
-2463 2687 m
-2467 2687 l
-2467 2688 l
-2463 2688 l
-2460 2688 m
-2467 2688 l
-2467 2689 l
-2460 2689 l
-2458 2689 m
-2468 2689 l
-2468 2690 l
-2458 2690 l
-2455 2690 m
-2468 2690 l
-2468 2691 l
-2455 2691 l
-2453 2691 m
-2468 2691 l
-2468 2692 l
-2453 2692 l
-2450 2692 m
-2469 2692 l
-2469 2693 l
-2450 2693 l
-2448 2693 m
-2469 2693 l
-2469 2694 l
-2448 2694 l
-2445 2694 m
-2470 2694 l
-2470 2695 l
-2445 2695 l
-2442 2695 m
-2470 2695 l
-2470 2696 l
-2442 2696 l
-2440 2696 m
-2470 2696 l
-2470 2697 l
-2440 2697 l
-2437 2697 m
-2471 2697 l
-2471 2698 l
-2437 2698 l
-2435 2698 m
-2471 2698 l
-2471 2699 l
-2435 2699 l
-2432 2699 m
-2472 2699 l
-2472 2700 l
-2432 2700 l
-2430 2700 m
-2472 2700 l
-2472 2701 l
-2430 2701 l
-2427 2701 m
-2472 2701 l
-2472 2702 l
-2427 2702 l
-2424 2702 m
-2473 2702 l
-2473 2703 l
-2424 2703 l
-2422 2703 m
-2473 2703 l
-2473 2704 l
-2422 2704 l
-2419 2704 m
-2473 2704 l
-2473 2705 l
-2419 2705 l
-2417 2705 m
-2474 2705 l
-2474 2706 l
-2417 2706 l
-2414 2706 m
-2474 2706 l
-2474 2707 l
-2414 2707 l
-2412 2707 m
-2475 2707 l
-2475 2708 l
-2412 2708 l
-2409 2708 m
-2475 2708 l
-2475 2709 l
-2409 2709 l
-2406 2709 m
-2475 2709 l
-2475 2710 l
-2406 2710 l
-2404 2710 m
-2476 2710 l
-2476 2711 l
-2404 2711 l
-2401 2711 m
-2476 2711 l
-2476 2712 l
-2401 2712 l
-2399 2712 m
-2477 2712 l
-2477 2713 l
-2399 2713 l
-2396 2713 m
-2477 2713 l
-2477 2714 l
-2396 2714 l
-2394 2714 m
-2477 2714 l
-2477 2715 l
-2394 2715 l
-2391 2715 m
-2478 2715 l
-2478 2716 l
-2391 2716 l
-2388 2716 m
-2478 2716 l
-2478 2717 l
-2388 2717 l
-2386 2717 m
-2479 2717 l
-2479 2718 l
-2386 2718 l
-2383 2718 m
-2479 2718 l
-2479 2719 l
-2383 2719 l
-2381 2719 m
-2479 2719 l
-2479 2720 l
-2381 2720 l
-2378 2720 m
-2480 2720 l
-2480 2721 l
-2378 2721 l
-2376 2721 m
-2480 2721 l
-2480 2722 l
-2376 2722 l
-2373 2722 m
-2480 2722 l
-2480 2723 l
-2373 2723 l
-2371 2723 m
-2481 2723 l
-2481 2724 l
-2371 2724 l
-2368 2724 m
-2481 2724 l
-2481 2725 l
-2368 2725 l
-2365 2725 m
-2482 2725 l
-2482 2726 l
-2365 2726 l
-2363 2726 m
-2482 2726 l
-2482 2727 l
-2363 2727 l
-2360 2727 m
-2482 2727 l
-2482 2728 l
-2360 2728 l
-2358 2728 m
-2483 2728 l
-2483 2729 l
-2358 2729 l
-2355 2729 m
-2483 2729 l
-2483 2730 l
-2355 2730 l
-2353 2730 m
-2484 2730 l
-2484 2731 l
-2353 2731 l
-2350 2731 m
-2484 2731 l
-2484 2732 l
-2350 2732 l
-2347 2732 m
-2484 2732 l
-2484 2733 l
-2347 2733 l
-2345 2733 m
-2485 2733 l
-2485 2734 l
-2345 2734 l
-2342 2734 m
-2485 2734 l
-2485 2735 l
-2342 2735 l
-2340 2735 m
-2486 2735 l
-2486 2736 l
-2340 2736 l
-2337 2736 m
-2486 2736 l
-2486 2737 l
-2337 2737 l
-2335 2737 m
-2486 2737 l
-2486 2738 l
-2335 2738 l
-2332 2738 m
-2487 2738 l
-2487 2739 l
-2332 2739 l
-2329 2739 m
-2487 2739 l
-2487 2740 l
-2329 2740 l
-2327 2740 m
-2487 2740 l
-2487 2741 l
-2327 2741 l
-2324 2741 m
-2488 2741 l
-2488 2742 l
-2324 2742 l
-2322 2742 m
-2488 2742 l
-2488 2743 l
-2322 2743 l
-2319 2743 m
-2489 2743 l
-2489 2744 l
-2319 2744 l
-2317 2744 m
-2489 2744 l
-2489 2745 l
-2317 2745 l
-2314 2745 m
-2489 2745 l
-2489 2746 l
-2314 2746 l
-2311 2746 m
-2490 2746 l
-2490 2747 l
-2311 2747 l
-2309 2747 m
-2490 2747 l
-2490 2748 l
-2309 2748 l
-2306 2748 m
-2491 2748 l
-2491 2749 l
-2306 2749 l
-2304 2749 m
-2491 2749 l
-2491 2750 l
-2304 2750 l
-2301 2750 m
-2491 2750 l
-2491 2751 l
-2301 2751 l
-2299 2751 m
-2492 2751 l
-2492 2752 l
-2299 2752 l
-2296 2752 m
-2492 2752 l
-2492 2753 l
-2296 2753 l
-2294 2753 m
-2493 2753 l
-2493 2754 l
-2294 2754 l
-2291 2754 m
-2493 2754 l
-2493 2755 l
-2291 2755 l
-2288 2755 m
-2493 2755 l
-2493 2756 l
-2288 2756 l
-2286 2756 m
-2494 2756 l
-2494 2757 l
-2286 2757 l
-2283 2757 m
-2494 2757 l
-2494 2758 l
-2283 2758 l
-2281 2758 m
-2494 2758 l
-2494 2759 l
-2281 2759 l
-2278 2759 m
-2495 2759 l
-2495 2760 l
-2278 2760 l
-2276 2760 m
-2495 2760 l
-2495 2761 l
-2276 2761 l
-2273 2761 m
-2496 2761 l
-2496 2762 l
-2273 2762 l
-2270 2762 m
-2496 2762 l
-2496 2763 l
-2270 2763 l
-2268 2763 m
-2496 2763 l
-2496 2764 l
-2268 2764 l
-2265 2764 m
-2497 2764 l
-2497 2765 l
-2265 2765 l
-2263 2765 m
-2497 2765 l
-2497 2766 l
-2263 2766 l
-2260 2766 m
-2498 2766 l
-2498 2767 l
-2260 2767 l
-2258 2767 m
-2498 2767 l
-2498 2768 l
-2258 2768 l
-2255 2768 m
-2498 2768 l
-2498 2769 l
-2255 2769 l
-2252 2769 m
-2499 2769 l
-2499 2770 l
-2252 2770 l
-2250 2770 m
-2499 2770 l
-2499 2771 l
-2250 2771 l
-2247 2771 m
-2500 2771 l
-2500 2772 l
-2247 2772 l
-2245 2772 m
-2500 2772 l
-2500 2773 l
-2245 2773 l
-2242 2773 m
-2500 2773 l
-2500 2774 l
-2242 2774 l
-2240 2774 m
-2501 2774 l
-2501 2775 l
-2240 2775 l
-2237 2775 m
-2501 2775 l
-2501 2776 l
-2237 2776 l
-2234 2776 m
-2501 2776 l
-2501 2777 l
-2234 2777 l
-2232 2777 m
-2502 2777 l
-2502 2778 l
-2232 2778 l
-2229 2778 m
-2502 2778 l
-2502 2779 l
-2229 2779 l
-2227 2779 m
-2503 2779 l
-2503 2780 l
-2227 2780 l
-2224 2780 m
-2503 2780 l
-2503 2781 l
-2224 2781 l
-2222 2781 m
-2503 2781 l
-2503 2782 l
-2222 2782 l
-2219 2782 m
-2504 2782 l
-2504 2783 l
-2219 2783 l
-2217 2783 m
-2504 2783 l
-2504 2784 l
-2217 2784 l
-2217 2784 m
-2505 2784 l
-2505 2787 l
-2217 2787 l
-2218 2787 m
-2506 2787 l
-2506 2789 l
-2218 2789 l
-2218 2789 m
-2507 2789 l
-2507 2790 l
-2218 2790 l
-2219 2790 m
-2507 2790 l
-2507 2792 l
-2219 2792 l
-2220 2792 m
-2508 2792 l
-2508 2795 l
-2220 2795 l
-2221 2795 m
-2509 2795 l
-2509 2797 l
-2221 2797 l
-2222 2797 m
-2510 2797 l
-2510 2800 l
-2222 2800 l
-2223 2800 m
-2510 2800 l
-2510 2801 l
-2223 2801 l
-2223 2801 m
-2508 2801 l
-2508 2802 l
-2223 2802 l
-2224 2802 m
-2505 2802 l
-2505 2803 l
-2224 2803 l
-2224 2803 m
-2503 2803 l
-2503 2804 l
-2224 2804 l
-2224 2804 m
-2500 2804 l
-2500 2805 l
-2224 2805 l
-2225 2805 m
-2498 2805 l
-2498 2806 l
-2225 2806 l
-2225 2806 m
-2495 2806 l
-2495 2807 l
-2225 2807 l
-2225 2807 m
-2492 2807 l
-2492 2808 l
-2225 2808 l
-2226 2808 m
-2490 2808 l
-2490 2809 l
-2226 2809 l
-2226 2809 m
-2487 2809 l
-2487 2810 l
-2226 2810 l
-2227 2810 m
-2485 2810 l
-2485 2811 l
-2227 2811 l
-2227 2811 m
-2482 2811 l
-2482 2812 l
-2227 2812 l
-2227 2812 m
-2480 2812 l
-2480 2813 l
-2227 2813 l
-2228 2813 m
-2477 2813 l
-2477 2814 l
-2228 2814 l
-2228 2814 m
-2474 2814 l
-2474 2815 l
-2228 2815 l
-2229 2815 m
-2472 2815 l
-2472 2816 l
-2229 2816 l
-2229 2816 m
-2469 2816 l
-2469 2817 l
-2229 2817 l
-2229 2817 m
-2467 2817 l
-2467 2818 l
-2229 2818 l
-2230 2818 m
-2464 2818 l
-2464 2819 l
-2230 2819 l
-2230 2819 m
-2462 2819 l
-2462 2820 l
-2230 2820 l
-2231 2820 m
-2459 2820 l
-2459 2821 l
-2231 2821 l
-2231 2821 m
-2457 2821 l
-2457 2822 l
-2231 2822 l
-2231 2822 m
-2454 2822 l
-2454 2823 l
-2231 2823 l
-2232 2823 m
-2451 2823 l
-2451 2824 l
-2232 2824 l
-2232 2824 m
-2449 2824 l
-2449 2825 l
-2232 2825 l
-2232 2825 m
-2446 2825 l
-2446 2826 l
-2232 2826 l
-2233 2826 m
-2444 2826 l
-2444 2827 l
-2233 2827 l
-2233 2827 m
-2441 2827 l
-2441 2828 l
-2233 2828 l
-2234 2828 m
-2439 2828 l
-2439 2829 l
-2234 2829 l
-2234 2829 m
-2436 2829 l
-2436 2830 l
-2234 2830 l
-2234 2830 m
-2433 2830 l
-2433 2831 l
-2234 2831 l
-2235 2831 m
-2431 2831 l
-2431 2832 l
-2235 2832 l
-2235 2832 m
-2428 2832 l
-2428 2833 l
-2235 2833 l
-2236 2833 m
-2426 2833 l
-2426 2834 l
-2236 2834 l
-2236 2834 m
-2423 2834 l
-2423 2835 l
-2236 2835 l
-2236 2835 m
-2421 2835 l
-2421 2836 l
-2236 2836 l
-2237 2836 m
-2418 2836 l
-2418 2837 l
-2237 2837 l
-2237 2837 m
-2415 2837 l
-2415 2838 l
-2237 2838 l
-2238 2838 m
-2413 2838 l
-2413 2839 l
-2238 2839 l
-2238 2839 m
-2410 2839 l
-2410 2840 l
-2238 2840 l
-2238 2840 m
-2408 2840 l
-2408 2841 l
-2238 2841 l
-2239 2841 m
-2405 2841 l
-2405 2842 l
-2239 2842 l
-2239 2842 m
-2403 2842 l
-2403 2843 l
-2239 2843 l
-2239 2843 m
-2400 2843 l
-2400 2844 l
-2239 2844 l
-2240 2844 m
-2397 2844 l
-2397 2845 l
-2240 2845 l
-2240 2845 m
-2395 2845 l
-2395 2846 l
-2240 2846 l
-2241 2846 m
-2392 2846 l
-2392 2847 l
-2241 2847 l
-2241 2847 m
-2390 2847 l
-2390 2848 l
-2241 2848 l
-2241 2848 m
-2387 2848 l
-2387 2849 l
-2241 2849 l
-2242 2849 m
-2385 2849 l
-2385 2850 l
-2242 2850 l
-2242 2850 m
-2382 2850 l
-2382 2851 l
-2242 2851 l
-2243 2851 m
-2380 2851 l
-2380 2852 l
-2243 2852 l
-2243 2852 m
-2377 2852 l
-2377 2853 l
-2243 2853 l
-2243 2853 m
-2374 2853 l
-2374 2854 l
-2243 2854 l
-2244 2854 m
-2372 2854 l
-2372 2855 l
-2244 2855 l
-2244 2855 m
-2369 2855 l
-2369 2856 l
-2244 2856 l
-2245 2856 m
-2367 2856 l
-2367 2857 l
-2245 2857 l
-2245 2857 m
-2364 2857 l
-2364 2858 l
-2245 2858 l
-2245 2858 m
-2362 2858 l
-2362 2859 l
-2245 2859 l
-2246 2859 m
-2359 2859 l
-2359 2860 l
-2246 2860 l
-2246 2860 m
-2356 2860 l
-2356 2861 l
-2246 2861 l
-2246 2861 m
-2354 2861 l
-2354 2862 l
-2246 2862 l
-2247 2862 m
-2351 2862 l
-2351 2863 l
-2247 2863 l
-2247 2863 m
-2349 2863 l
-2349 2864 l
-2247 2864 l
-2248 2864 m
-2346 2864 l
-2346 2865 l
-2248 2865 l
-2248 2865 m
-2344 2865 l
-2344 2866 l
-2248 2866 l
-2248 2866 m
-2341 2866 l
-2341 2867 l
-2248 2867 l
-2249 2867 m
-2338 2867 l
-2338 2868 l
-2249 2868 l
-2249 2868 m
-2336 2868 l
-2336 2869 l
-2249 2869 l
-2250 2869 m
-2333 2869 l
-2333 2870 l
-2250 2870 l
-2250 2870 m
-2331 2870 l
-2331 2871 l
-2250 2871 l
-2250 2871 m
-2328 2871 l
-2328 2872 l
-2250 2872 l
-2251 2872 m
-2326 2872 l
-2326 2873 l
-2251 2873 l
-2251 2873 m
-2323 2873 l
-2323 2874 l
-2251 2874 l
-2252 2874 m
-2321 2874 l
-2321 2875 l
-2252 2875 l
-2252 2875 m
-2318 2875 l
-2318 2876 l
-2252 2876 l
-2252 2876 m
-2315 2876 l
-2315 2877 l
-2252 2877 l
-2253 2877 m
-2313 2877 l
-2313 2878 l
-2253 2878 l
-2253 2878 m
-2310 2878 l
-2310 2879 l
-2253 2879 l
-2253 2879 m
-2308 2879 l
-2308 2880 l
-2253 2880 l
-2254 2880 m
-2305 2880 l
-2305 2881 l
-2254 2881 l
-2254 2881 m
-2303 2881 l
-2303 2882 l
-2254 2882 l
-2255 2882 m
-2300 2882 l
-2300 2883 l
-2255 2883 l
-2255 2883 m
-2297 2883 l
-2297 2884 l
-2255 2884 l
-2255 2884 m
-2295 2884 l
-2295 2885 l
-2255 2885 l
-2256 2885 m
-2292 2885 l
-2292 2886 l
-2256 2886 l
-2256 2886 m
-2290 2886 l
-2290 2887 l
-2256 2887 l
-2257 2887 m
-2287 2887 l
-2287 2888 l
-2257 2888 l
-2257 2888 m
-2285 2888 l
-2285 2889 l
-2257 2889 l
-2257 2889 m
-2282 2889 l
-2282 2890 l
-2257 2890 l
-2258 2890 m
-2279 2890 l
-2279 2891 l
-2258 2891 l
-2258 2891 m
-2277 2891 l
-2277 2892 l
-2258 2892 l
-2259 2892 m
-2274 2892 l
-2274 2893 l
-2259 2893 l
-2259 2893 m
-2272 2893 l
-2272 2894 l
-2259 2894 l
-2259 2894 m
-2269 2894 l
-2269 2895 l
-2259 2895 l
-2260 2895 m
-2267 2895 l
-2267 2896 l
-2260 2896 l
-2260 2896 m
-2264 2896 l
-2264 2897 l
-2260 2897 l
-Y
-2509.9 2800 m
-2466 2687 l
-2217 2784 l
-2261 2897 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2456 2731 m
-2455 2727 l
-2448 2721 l
-2442 2719 l
-2433 2718 l
-2418 2724 l
-2411 2731 l
-2409 2736 l
-2408 2746 l
-2411 2753 l
-2418 2760 l
-2430 2768 l
-2484 2792 l
-2430 2813 l
-S
-2336 2756 m
-2396 2795 l
-2338 2818 l
-S
-2336 2756 m
-2368 2838 l
-S
-2274 2780 m
-2287 2780 l
-2299 2788 l
-2311 2806 l
-2315 2818 l
-2319 2839 l
-2316 2853 l
-2305 2862 l
-2298 2865 l
-2284 2866 l
-2272 2857 l
-2261 2839 l
-2256 2827 l
-2252 2806 l
-2256 2792 l
-2266 2783 l
-2274 2780 l
-S
-1 g
-1926 3331 m
-1931 3331 l
-1931 3332 l
-1926 3332 l
-1921 3332 m
-1932 3332 l
-1932 3333 l
-1921 3333 l
-1916 3333 m
-1932 3333 l
-1932 3334 l
-1916 3334 l
-1910 3334 m
-1932 3334 l
-1932 3335 l
-1910 3335 l
-1905 3335 m
-1932 3335 l
-1932 3336 l
-1905 3336 l
-1900 3336 m
-1932 3336 l
-1932 3337 l
-1900 3337 l
-1895 3337 m
-1932 3337 l
-1932 3338 l
-1895 3338 l
-1890 3338 m
-1933 3338 l
-1933 3339 l
-1890 3339 l
-1884 3339 m
-1933 3339 l
-1933 3340 l
-1884 3340 l
-1879 3340 m
-1933 3340 l
-1933 3341 l
-1879 3341 l
-1874 3341 m
-1933 3341 l
-1933 3342 l
-1874 3342 l
-1869 3342 m
-1933 3342 l
-1933 3343 l
-1869 3343 l
-1864 3343 m
-1934 3343 l
-1934 3344 l
-1864 3344 l
-1858 3344 m
-1934 3344 l
-1934 3345 l
-1858 3345 l
-1853 3345 m
-1934 3345 l
-1934 3346 l
-1853 3346 l
-1848 3346 m
-1934 3346 l
-1934 3347 l
-1848 3347 l
-1843 3347 m
-1934 3347 l
-1934 3348 l
-1843 3348 l
-1838 3348 m
-1935 3348 l
-1935 3349 l
-1838 3349 l
-1832 3349 m
-1935 3349 l
-1935 3350 l
-1832 3350 l
-1827 3350 m
-1935 3350 l
-1935 3351 l
-1827 3351 l
-1822 3351 m
-1935 3351 l
-1935 3352 l
-1822 3352 l
-1817 3352 m
-1935 3352 l
-1935 3353 l
-1817 3353 l
-1812 3353 m
-1936 3353 l
-1936 3354 l
-1812 3354 l
-1812 3354 m
-1936 3354 l
-1936 3359 l
-1812 3359 l
-1812 3359 m
-1937 3359 l
-1937 3360 l
-1812 3360 l
-1813 3360 m
-1937 3360 l
-1937 3364 l
-1813 3364 l
-1813 3364 m
-1938 3364 l
-1938 3365 l
-1813 3365 l
-1814 3365 m
-1938 3365 l
-1938 3369 l
-1814 3369 l
-1814 3369 m
-1939 3369 l
-1939 3370 l
-1814 3370 l
-1815 3370 m
-1939 3370 l
-1939 3375 l
-1815 3375 l
-1815 3375 m
-1940 3375 l
-1940 3376 l
-1815 3376 l
-1816 3376 m
-1940 3376 l
-1940 3380 l
-1816 3380 l
-1816 3380 m
-1941 3380 l
-1941 3381 l
-1816 3381 l
-1817 3381 m
-1941 3381 l
-1941 3385 l
-1817 3385 l
-1817 3385 m
-1942 3385 l
-1942 3386 l
-1817 3386 l
-1818 3386 m
-1942 3386 l
-1942 3390 l
-1818 3390 l
-1818 3390 m
-1943 3390 l
-1943 3392 l
-1818 3392 l
-1819 3392 m
-1943 3392 l
-1943 3396 l
-1819 3396 l
-1819 3396 m
-1944 3396 l
-1944 3397 l
-1819 3397 l
-1820 3397 m
-1944 3397 l
-1944 3401 l
-1820 3401 l
-1820 3401 m
-1945 3401 l
-1945 3402 l
-1820 3402 l
-1821 3402 m
-1945 3402 l
-1945 3406 l
-1821 3406 l
-1821 3406 m
-1946 3406 l
-1946 3408 l
-1821 3408 l
-1822 3408 m
-1946 3408 l
-1946 3412 l
-1822 3412 l
-1822 3412 m
-1947 3412 l
-1947 3413 l
-1822 3413 l
-1823 3413 m
-1947 3413 l
-1947 3417 l
-1823 3417 l
-1823 3417 m
-1948 3417 l
-1948 3418 l
-1823 3418 l
-1824 3418 m
-1948 3418 l
-1948 3422 l
-1824 3422 l
-1824 3422 m
-1949 3422 l
-1949 3424 l
-1824 3424 l
-1825 3424 m
-1949 3424 l
-1949 3427 l
-1825 3427 l
-1825 3427 m
-1950 3427 l
-1950 3429 l
-1825 3429 l
-1826 3429 m
-1950 3429 l
-1950 3433 l
-1826 3433 l
-1826 3433 m
-1951 3433 l
-1951 3434 l
-1826 3434 l
-1827 3434 m
-1951 3434 l
-1951 3438 l
-1827 3438 l
-1827 3438 m
-1952 3438 l
-1952 3440 l
-1827 3440 l
-1828 3440 m
-1952 3440 l
-1952 3443 l
-1828 3443 l
-1828 3443 m
-1953 3443 l
-1953 3445 l
-1828 3445 l
-1829 3445 m
-1953 3445 l
-1953 3448 l
-1829 3448 l
-1829 3448 m
-1954 3448 l
-1954 3450 l
-1829 3450 l
-1830 3450 m
-1954 3450 l
-1954 3454 l
-1830 3454 l
-1830 3454 m
-1955 3454 l
-1955 3456 l
-1830 3456 l
-1831 3456 m
-1955 3456 l
-1955 3459 l
-1831 3459 l
-1831 3459 m
-1956 3459 l
-1956 3461 l
-1831 3461 l
-1832 3461 m
-1956 3461 l
-1956 3464 l
-1832 3464 l
-1832 3464 m
-1957 3464 l
-1957 3466 l
-1832 3466 l
-1833 3466 m
-1957 3466 l
-1957 3470 l
-1833 3470 l
-1833 3470 m
-1958 3470 l
-1958 3472 l
-1833 3472 l
-1834 3472 m
-1958 3472 l
-1958 3475 l
-1834 3475 l
-1834 3475 m
-1959 3475 l
-1959 3477 l
-1834 3477 l
-1835 3477 m
-1959 3477 l
-1959 3480 l
-1835 3480 l
-1835 3480 m
-1960 3480 l
-1960 3482 l
-1835 3482 l
-1836 3482 m
-1960 3482 l
-1960 3485 l
-1836 3485 l
-1836 3485 m
-1961 3485 l
-1961 3487 l
-1836 3487 l
-1837 3487 m
-1961 3487 l
-1961 3491 l
-1837 3491 l
-1837 3491 m
-1962 3491 l
-1962 3493 l
-1837 3493 l
-1838 3493 m
-1962 3493 l
-1962 3496 l
-1838 3496 l
-1838 3496 m
-1963 3496 l
-1963 3498 l
-1838 3498 l
-1839 3498 m
-1963 3498 l
-1963 3501 l
-1839 3501 l
-1839 3501 m
-1964 3501 l
-1964 3503 l
-1839 3503 l
-1840 3503 m
-1964 3503 l
-1964 3507 l
-1840 3507 l
-1840 3507 m
-1965 3507 l
-1965 3509 l
-1840 3509 l
-1841 3509 m
-1965 3509 l
-1965 3512 l
-1841 3512 l
-1841 3512 m
-1966 3512 l
-1966 3514 l
-1841 3514 l
-1842 3514 m
-1966 3514 l
-1966 3517 l
-1842 3517 l
-1842 3517 m
-1967 3517 l
-1967 3519 l
-1842 3519 l
-1843 3519 m
-1967 3519 l
-1967 3522 l
-1843 3522 l
-1843 3522 m
-1968 3522 l
-1968 3525 l
-1843 3525 l
-1844 3525 m
-1968 3525 l
-1968 3528 l
-1844 3528 l
-1844 3528 m
-1969 3528 l
-1969 3530 l
-1844 3530 l
-1845 3530 m
-1969 3530 l
-1969 3533 l
-1845 3533 l
-1845 3533 m
-1970 3533 l
-1970 3535 l
-1845 3535 l
-1846 3535 m
-1970 3535 l
-1970 3538 l
-1846 3538 l
-1846 3538 m
-1971 3538 l
-1971 3541 l
-1846 3541 l
-1847 3541 m
-1971 3541 l
-1971 3544 l
-1847 3544 l
-1847 3544 m
-1972 3544 l
-1972 3546 l
-1847 3546 l
-1848 3546 m
-1972 3546 l
-1972 3549 l
-1848 3549 l
-1848 3549 m
-1973 3549 l
-1973 3551 l
-1848 3551 l
-1849 3551 m
-1973 3551 l
-1973 3554 l
-1849 3554 l
-1849 3554 m
-1974 3554 l
-1974 3557 l
-1849 3557 l
-1850 3557 m
-1974 3557 l
-1974 3559 l
-1850 3559 l
-1850 3559 m
-1975 3559 l
-1975 3562 l
-1850 3562 l
-1851 3562 m
-1975 3562 l
-1975 3565 l
-1851 3565 l
-1851 3565 m
-1976 3565 l
-1976 3567 l
-1851 3567 l
-1852 3567 m
-1976 3567 l
-1976 3570 l
-1852 3570 l
-1852 3570 m
-1977 3570 l
-1977 3573 l
-1852 3573 l
-1853 3573 m
-1977 3573 l
-1977 3575 l
-1853 3575 l
-1853 3575 m
-1978 3575 l
-1978 3578 l
-1853 3578 l
-1854 3578 m
-1978 3578 l
-1978 3581 l
-1854 3581 l
-1854 3581 m
-1978 3581 l
-1978 3582 l
-1854 3582 l
-1854 3582 m
-1973 3582 l
-1973 3583 l
-1854 3583 l
-1855 3583 m
-1968 3583 l
-1968 3584 l
-1855 3584 l
-1855 3584 m
-1963 3584 l
-1963 3585 l
-1855 3585 l
-1855 3585 m
-1958 3585 l
-1958 3586 l
-1855 3586 l
-1855 3586 m
-1953 3586 l
-1953 3587 l
-1855 3587 l
-1855 3587 m
-1947 3587 l
-1947 3588 l
-1855 3588 l
-1855 3588 m
-1942 3588 l
-1942 3589 l
-1855 3589 l
-1856 3589 m
-1937 3589 l
-1937 3590 l
-1856 3590 l
-1856 3590 m
-1932 3590 l
-1932 3591 l
-1856 3591 l
-1856 3591 m
-1927 3591 l
-1927 3592 l
-1856 3592 l
-1856 3592 m
-1922 3592 l
-1922 3593 l
-1856 3593 l
-1856 3593 m
-1916 3593 l
-1916 3594 l
-1856 3594 l
-1857 3594 m
-1911 3594 l
-1911 3595 l
-1857 3595 l
-1857 3595 m
-1906 3595 l
-1906 3596 l
-1857 3596 l
-1857 3596 m
-1901 3596 l
-1901 3597 l
-1857 3597 l
-1857 3597 m
-1896 3597 l
-1896 3598 l
-1857 3598 l
-1857 3598 m
-1891 3598 l
-1891 3599 l
-1857 3599 l
-1858 3599 m
-1885 3599 l
-1885 3600 l
-1858 3600 l
-1858 3600 m
-1880 3600 l
-1880 3601 l
-1858 3601 l
-1858 3601 m
-1875 3601 l
-1875 3602 l
-1858 3602 l
-1858 3602 m
-1870 3602 l
-1870 3603 l
-1858 3603 l
-1858 3603 m
-1865 3603 l
-1865 3604 l
-1858 3604 l
-Y
-1930.7 3331.2 m
-1812 3354 l
-1859 3604 l
-1978 3581 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1848 3368 m
-1846 3377 l
-1836 3392 l
-1922 3375 l
-S
-1849 3461 m
-1851 3448 l
-1858 3443 l
-1867 3441 l
-1876 3444 l
-1881 3451 l
-1888 3467 l
-1895 3478 l
-1905 3485 l
-1914 3487 l
-1926 3485 l
-1933 3479 l
-1937 3475 l
-1938 3461 l
-1935 3445 l
-1929 3434 l
-1924 3430 l
-1915 3428 l
-1903 3430 l
-1895 3436 l
-1889 3445 l
-1887 3459 l
-1886 3476 l
-1883 3485 l
-1876 3490 l
-1868 3492 l
-1859 3489 l
-1852 3478 l
-1849 3461 l
-S
-1866 3548 m
-1867 3535 l
-1878 3524 l
-1898 3516 l
-1910 3514 l
-1931 3514 l
-1945 3520 l
-1952 3531 l
-1953 3539 l
-1952 3553 l
-1941 3563 l
-1921 3571 l
-1909 3573 l
-1887 3573 l
-1874 3567 l
-1867 3556 l
-1866 3548 l
-S
-1 g
-2178 3840 m
-2182 3840 l
-2182 3841 l
-2178 3841 l
-2178 3841 m
-2183 3841 l
-2183 3842 l
-2178 3842 l
-2177 3842 m
-2184 3842 l
-2184 3843 l
-2177 3843 l
-2176 3843 m
-2186 3843 l
-2186 3844 l
-2176 3844 l
-2175 3844 m
-2187 3844 l
-2187 3845 l
-2175 3845 l
-2174 3845 m
-2188 3845 l
-2188 3846 l
-2174 3846 l
-2174 3846 m
-2189 3846 l
-2189 3847 l
-2174 3847 l
-2173 3847 m
-2191 3847 l
-2191 3848 l
-2173 3848 l
-2172 3848 m
-2192 3848 l
-2192 3849 l
-2172 3849 l
-2171 3849 m
-2193 3849 l
-2193 3850 l
-2171 3850 l
-2170 3850 m
-2194 3850 l
-2194 3851 l
-2170 3851 l
-2170 3851 m
-2196 3851 l
-2196 3852 l
-2170 3852 l
-2169 3852 m
-2197 3852 l
-2197 3853 l
-2169 3853 l
-2168 3853 m
-2198 3853 l
-2198 3854 l
-2168 3854 l
-2167 3854 m
-2199 3854 l
-2199 3855 l
-2167 3855 l
-2166 3855 m
-2201 3855 l
-2201 3856 l
-2166 3856 l
-2166 3856 m
-2202 3856 l
-2202 3857 l
-2166 3857 l
-2165 3857 m
-2203 3857 l
-2203 3858 l
-2165 3858 l
-2164 3858 m
-2204 3858 l
-2204 3859 l
-2164 3859 l
-2163 3859 m
-2206 3859 l
-2206 3860 l
-2163 3860 l
-2162 3860 m
-2207 3860 l
-2207 3861 l
-2162 3861 l
-2162 3861 m
-2208 3861 l
-2208 3862 l
-2162 3862 l
-2161 3862 m
-2209 3862 l
-2209 3863 l
-2161 3863 l
-2160 3863 m
-2211 3863 l
-2211 3864 l
-2160 3864 l
-2159 3864 m
-2212 3864 l
-2212 3865 l
-2159 3865 l
-2158 3865 m
-2213 3865 l
-2213 3866 l
-2158 3866 l
-2158 3866 m
-2214 3866 l
-2214 3867 l
-2158 3867 l
-2157 3867 m
-2216 3867 l
-2216 3868 l
-2157 3868 l
-2156 3868 m
-2217 3868 l
-2217 3869 l
-2156 3869 l
-2155 3869 m
-2218 3869 l
-2218 3870 l
-2155 3870 l
-2154 3870 m
-2219 3870 l
-2219 3871 l
-2154 3871 l
-2154 3871 m
-2221 3871 l
-2221 3872 l
-2154 3872 l
-2153 3872 m
-2222 3872 l
-2222 3873 l
-2153 3873 l
-2152 3873 m
-2223 3873 l
-2223 3874 l
-2152 3874 l
-2151 3874 m
-2224 3874 l
-2224 3875 l
-2151 3875 l
-2150 3875 m
-2226 3875 l
-2226 3876 l
-2150 3876 l
-2150 3876 m
-2227 3876 l
-2227 3877 l
-2150 3877 l
-2149 3877 m
-2228 3877 l
-2228 3878 l
-2149 3878 l
-2148 3878 m
-2229 3878 l
-2229 3879 l
-2148 3879 l
-2147 3879 m
-2231 3879 l
-2231 3880 l
-2147 3880 l
-2146 3880 m
-2232 3880 l
-2232 3881 l
-2146 3881 l
-2146 3881 m
-2233 3881 l
-2233 3882 l
-2146 3882 l
-2145 3882 m
-2234 3882 l
-2234 3883 l
-2145 3883 l
-2144 3883 m
-2236 3883 l
-2236 3884 l
-2144 3884 l
-2143 3884 m
-2237 3884 l
-2237 3885 l
-2143 3885 l
-2143 3885 m
-2238 3885 l
-2238 3886 l
-2143 3886 l
-2142 3886 m
-2239 3886 l
-2239 3887 l
-2142 3887 l
-2141 3887 m
-2241 3887 l
-2241 3888 l
-2141 3888 l
-2140 3888 m
-2242 3888 l
-2242 3889 l
-2140 3889 l
-2139 3889 m
-2243 3889 l
-2243 3890 l
-2139 3890 l
-2139 3890 m
-2244 3890 l
-2244 3891 l
-2139 3891 l
-2138 3891 m
-2246 3891 l
-2246 3892 l
-2138 3892 l
-2137 3892 m
-2247 3892 l
-2247 3893 l
-2137 3893 l
-2136 3893 m
-2248 3893 l
-2248 3894 l
-2136 3894 l
-2135 3894 m
-2249 3894 l
-2249 3895 l
-2135 3895 l
-2135 3895 m
-2251 3895 l
-2251 3896 l
-2135 3896 l
-2134 3896 m
-2252 3896 l
-2252 3897 l
-2134 3897 l
-2133 3897 m
-2253 3897 l
-2253 3898 l
-2133 3898 l
-2132 3898 m
-2254 3898 l
-2254 3899 l
-2132 3899 l
-2131 3899 m
-2256 3899 l
-2256 3900 l
-2131 3900 l
-2131 3900 m
-2257 3900 l
-2257 3901 l
-2131 3901 l
-2130 3901 m
-2258 3901 l
-2258 3902 l
-2130 3902 l
-2129 3902 m
-2259 3902 l
-2259 3903 l
-2129 3903 l
-2128 3903 m
-2261 3903 l
-2261 3904 l
-2128 3904 l
-2127 3904 m
-2262 3904 l
-2262 3905 l
-2127 3905 l
-2127 3905 m
-2263 3905 l
-2263 3906 l
-2127 3906 l
-2126 3906 m
-2264 3906 l
-2264 3907 l
-2126 3907 l
-2125 3907 m
-2266 3907 l
-2266 3908 l
-2125 3908 l
-2124 3908 m
-2267 3908 l
-2267 3909 l
-2124 3909 l
-2123 3909 m
-2268 3909 l
-2268 3910 l
-2123 3910 l
-2123 3910 m
-2269 3910 l
-2269 3911 l
-2123 3911 l
-2122 3911 m
-2271 3911 l
-2271 3912 l
-2122 3912 l
-2121 3912 m
-2272 3912 l
-2272 3913 l
-2121 3913 l
-2120 3913 m
-2273 3913 l
-2273 3914 l
-2120 3914 l
-2119 3914 m
-2274 3914 l
-2274 3915 l
-2119 3915 l
-2119 3915 m
-2276 3915 l
-2276 3916 l
-2119 3916 l
-2118 3916 m
-2277 3916 l
-2277 3917 l
-2118 3917 l
-2117 3917 m
-2278 3917 l
-2278 3918 l
-2117 3918 l
-2116 3918 m
-2279 3918 l
-2279 3919 l
-2116 3919 l
-2115 3919 m
-2281 3919 l
-2281 3920 l
-2115 3920 l
-2115 3920 m
-2282 3920 l
-2282 3921 l
-2115 3921 l
-2114 3921 m
-2283 3921 l
-2283 3922 l
-2114 3922 l
-2113 3922 m
-2284 3922 l
-2284 3923 l
-2113 3923 l
-2112 3923 m
-2286 3923 l
-2286 3924 l
-2112 3924 l
-2111 3924 m
-2287 3924 l
-2287 3925 l
-2111 3925 l
-2111 3925 m
-2288 3925 l
-2288 3926 l
-2111 3926 l
-2110 3926 m
-2289 3926 l
-2289 3927 l
-2110 3927 l
-2109 3927 m
-2291 3927 l
-2291 3928 l
-2109 3928 l
-2108 3928 m
-2292 3928 l
-2292 3929 l
-2108 3929 l
-2107 3929 m
-2293 3929 l
-2293 3930 l
-2107 3930 l
-2107 3930 m
-2294 3930 l
-2294 3931 l
-2107 3931 l
-2106 3931 m
-2296 3931 l
-2296 3932 l
-2106 3932 l
-2105 3932 m
-2297 3932 l
-2297 3933 l
-2105 3933 l
-2104 3933 m
-2298 3933 l
-2298 3934 l
-2104 3934 l
-2104 3934 m
-2299 3934 l
-2299 3935 l
-2104 3935 l
-2104 3935 m
-2301 3935 l
-2301 3936 l
-2104 3936 l
-2105 3936 m
-2302 3936 l
-2302 3937 l
-2105 3937 l
-2106 3937 m
-2303 3937 l
-2303 3938 l
-2106 3938 l
-2107 3938 m
-2304 3938 l
-2304 3939 l
-2107 3939 l
-2109 3939 m
-2306 3939 l
-2306 3940 l
-2109 3940 l
-2110 3940 m
-2307 3940 l
-2307 3941 l
-2110 3941 l
-2111 3941 m
-2308 3941 l
-2308 3942 l
-2111 3942 l
-2112 3942 m
-2309 3942 l
-2309 3943 l
-2112 3943 l
-2114 3943 m
-2311 3943 l
-2311 3944 l
-2114 3944 l
-2115 3944 m
-2312 3944 l
-2312 3945 l
-2115 3945 l
-2116 3945 m
-2313 3945 l
-2313 3946 l
-2116 3946 l
-2117 3946 m
-2314 3946 l
-2314 3947 l
-2117 3947 l
-2119 3947 m
-2316 3947 l
-2316 3948 l
-2119 3948 l
-2120 3948 m
-2317 3948 l
-2317 3949 l
-2120 3949 l
-2121 3949 m
-2318 3949 l
-2318 3950 l
-2121 3950 l
-2122 3950 m
-2319 3950 l
-2319 3951 l
-2122 3951 l
-2124 3951 m
-2321 3951 l
-2321 3952 l
-2124 3952 l
-2125 3952 m
-2322 3952 l
-2322 3953 l
-2125 3953 l
-2126 3953 m
-2323 3953 l
-2323 3954 l
-2126 3954 l
-2127 3954 m
-2324 3954 l
-2324 3955 l
-2127 3955 l
-2129 3955 m
-2326 3955 l
-2326 3956 l
-2129 3956 l
-2130 3956 m
-2327 3956 l
-2327 3957 l
-2130 3957 l
-2131 3957 m
-2328 3957 l
-2328 3958 l
-2131 3958 l
-2132 3958 m
-2329 3958 l
-2329 3959 l
-2132 3959 l
-2134 3959 m
-2331 3959 l
-2331 3960 l
-2134 3960 l
-2135 3960 m
-2332 3960 l
-2332 3961 l
-2135 3961 l
-2136 3961 m
-2333 3961 l
-2333 3962 l
-2136 3962 l
-2138 3962 m
-2334 3962 l
-2334 3963 l
-2138 3963 l
-2139 3963 m
-2336 3963 l
-2336 3964 l
-2139 3964 l
-2140 3964 m
-2337 3964 l
-2337 3965 l
-2140 3965 l
-2141 3965 m
-2338 3965 l
-2338 3966 l
-2141 3966 l
-2143 3966 m
-2339 3966 l
-2339 3967 l
-2143 3967 l
-2144 3967 m
-2341 3967 l
-2341 3968 l
-2144 3968 l
-2145 3968 m
-2342 3968 l
-2342 3969 l
-2145 3969 l
-2146 3969 m
-2343 3969 l
-2343 3970 l
-2146 3970 l
-2148 3970 m
-2344 3970 l
-2344 3971 l
-2148 3971 l
-2149 3971 m
-2346 3971 l
-2346 3972 l
-2149 3972 l
-2150 3972 m
-2347 3972 l
-2347 3973 l
-2150 3973 l
-2151 3973 m
-2348 3973 l
-2348 3974 l
-2151 3974 l
-2153 3974 m
-2349 3974 l
-2349 3975 l
-2153 3975 l
-2154 3975 m
-2351 3975 l
-2351 3976 l
-2154 3976 l
-2155 3976 m
-2352 3976 l
-2352 3977 l
-2155 3977 l
-2156 3977 m
-2353 3977 l
-2353 3978 l
-2156 3978 l
-2158 3978 m
-2354 3978 l
-2354 3979 l
-2158 3979 l
-2159 3979 m
-2356 3979 l
-2356 3980 l
-2159 3980 l
-2160 3980 m
-2357 3980 l
-2357 3981 l
-2160 3981 l
-2161 3981 m
-2358 3981 l
-2358 3982 l
-2161 3982 l
-2163 3982 m
-2359 3982 l
-2359 3983 l
-2163 3983 l
-2164 3983 m
-2361 3983 l
-2361 3984 l
-2164 3984 l
-2165 3984 m
-2362 3984 l
-2362 3985 l
-2165 3985 l
-2166 3985 m
-2363 3985 l
-2363 3986 l
-2166 3986 l
-2168 3986 m
-2364 3986 l
-2364 3987 l
-2168 3987 l
-2169 3987 m
-2366 3987 l
-2366 3988 l
-2169 3988 l
-2170 3988 m
-2367 3988 l
-2367 3989 l
-2170 3989 l
-2172 3989 m
-2368 3989 l
-2368 3990 l
-2172 3990 l
-2173 3990 m
-2369 3990 l
-2369 3991 l
-2173 3991 l
-2174 3991 m
-2371 3991 l
-2371 3992 l
-2174 3992 l
-2175 3992 m
-2372 3992 l
-2372 3993 l
-2175 3993 l
-2177 3993 m
-2373 3993 l
-2373 3994 l
-2177 3994 l
-2178 3994 m
-2374 3994 l
-2374 3995 l
-2178 3995 l
-2179 3995 m
-2376 3995 l
-2376 3996 l
-2179 3996 l
-2180 3996 m
-2377 3996 l
-2377 3997 l
-2180 3997 l
-2182 3997 m
-2378 3997 l
-2378 3998 l
-2182 3998 l
-2183 3998 m
-2379 3998 l
-2379 3999 l
-2183 3999 l
-2184 3999 m
-2379 3999 l
-2379 4000 l
-2184 4000 l
-2185 4000 m
-2379 4000 l
-2379 4001 l
-2185 4001 l
-2187 4001 m
-2378 4001 l
-2378 4002 l
-2187 4002 l
-2188 4002 m
-2377 4002 l
-2377 4003 l
-2188 4003 l
-2189 4003 m
-2376 4003 l
-2376 4004 l
-2189 4004 l
-2190 4004 m
-2375 4004 l
-2375 4005 l
-2190 4005 l
-2192 4005 m
-2375 4005 l
-2375 4006 l
-2192 4006 l
-2193 4006 m
-2374 4006 l
-2374 4007 l
-2193 4007 l
-2194 4007 m
-2373 4007 l
-2373 4008 l
-2194 4008 l
-2195 4008 m
-2372 4008 l
-2372 4009 l
-2195 4009 l
-2197 4009 m
-2371 4009 l
-2371 4010 l
-2197 4010 l
-2198 4010 m
-2371 4010 l
-2371 4011 l
-2198 4011 l
-2199 4011 m
-2370 4011 l
-2370 4012 l
-2199 4012 l
-2200 4012 m
-2369 4012 l
-2369 4013 l
-2200 4013 l
-2202 4013 m
-2368 4013 l
-2368 4014 l
-2202 4014 l
-2203 4014 m
-2367 4014 l
-2367 4015 l
-2203 4015 l
-2204 4015 m
-2367 4015 l
-2367 4016 l
-2204 4016 l
-2206 4016 m
-2366 4016 l
-2366 4017 l
-2206 4017 l
-2207 4017 m
-2365 4017 l
-2365 4018 l
-2207 4018 l
-2208 4018 m
-2364 4018 l
-2364 4019 l
-2208 4019 l
-2209 4019 m
-2363 4019 l
-2363 4020 l
-2209 4020 l
-2211 4020 m
-2363 4020 l
-2363 4021 l
-2211 4021 l
-2212 4021 m
-2362 4021 l
-2362 4022 l
-2212 4022 l
-2213 4022 m
-2361 4022 l
-2361 4023 l
-2213 4023 l
-2214 4023 m
-2360 4023 l
-2360 4024 l
-2214 4024 l
-2216 4024 m
-2359 4024 l
-2359 4025 l
-2216 4025 l
-2217 4025 m
-2358 4025 l
-2358 4026 l
-2217 4026 l
-2218 4026 m
-2358 4026 l
-2358 4027 l
-2218 4027 l
-2219 4027 m
-2357 4027 l
-2357 4028 l
-2219 4028 l
-2221 4028 m
-2356 4028 l
-2356 4029 l
-2221 4029 l
-2222 4029 m
-2355 4029 l
-2355 4030 l
-2222 4030 l
-2223 4030 m
-2354 4030 l
-2354 4031 l
-2223 4031 l
-2224 4031 m
-2354 4031 l
-2354 4032 l
-2224 4032 l
-2226 4032 m
-2353 4032 l
-2353 4033 l
-2226 4033 l
-2227 4033 m
-2352 4033 l
-2352 4034 l
-2227 4034 l
-2228 4034 m
-2351 4034 l
-2351 4035 l
-2228 4035 l
-2229 4035 m
-2350 4035 l
-2350 4036 l
-2229 4036 l
-2231 4036 m
-2350 4036 l
-2350 4037 l
-2231 4037 l
-2232 4037 m
-2349 4037 l
-2349 4038 l
-2232 4038 l
-2233 4038 m
-2348 4038 l
-2348 4039 l
-2233 4039 l
-2234 4039 m
-2347 4039 l
-2347 4040 l
-2234 4040 l
-2236 4040 m
-2346 4040 l
-2346 4041 l
-2236 4041 l
-2237 4041 m
-2346 4041 l
-2346 4042 l
-2237 4042 l
-2238 4042 m
-2345 4042 l
-2345 4043 l
-2238 4043 l
-2240 4043 m
-2344 4043 l
-2344 4044 l
-2240 4044 l
-2241 4044 m
-2343 4044 l
-2343 4045 l
-2241 4045 l
-2242 4045 m
-2342 4045 l
-2342 4046 l
-2242 4046 l
-2243 4046 m
-2341 4046 l
-2341 4047 l
-2243 4047 l
-2245 4047 m
-2341 4047 l
-2341 4048 l
-2245 4048 l
-2246 4048 m
-2340 4048 l
-2340 4049 l
-2246 4049 l
-2247 4049 m
-2339 4049 l
-2339 4050 l
-2247 4050 l
-2248 4050 m
-2338 4050 l
-2338 4051 l
-2248 4051 l
-2250 4051 m
-2337 4051 l
-2337 4052 l
-2250 4052 l
-2251 4052 m
-2337 4052 l
-2337 4053 l
-2251 4053 l
-2252 4053 m
-2336 4053 l
-2336 4054 l
-2252 4054 l
-2253 4054 m
-2335 4054 l
-2335 4055 l
-2253 4055 l
-2255 4055 m
-2334 4055 l
-2334 4056 l
-2255 4056 l
-2256 4056 m
-2333 4056 l
-2333 4057 l
-2256 4057 l
-2257 4057 m
-2333 4057 l
-2333 4058 l
-2257 4058 l
-2258 4058 m
-2332 4058 l
-2332 4059 l
-2258 4059 l
-2260 4059 m
-2331 4059 l
-2331 4060 l
-2260 4060 l
-2261 4060 m
-2330 4060 l
-2330 4061 l
-2261 4061 l
-2262 4061 m
-2329 4061 l
-2329 4062 l
-2262 4062 l
-2263 4062 m
-2329 4062 l
-2329 4063 l
-2263 4063 l
-2265 4063 m
-2328 4063 l
-2328 4064 l
-2265 4064 l
-2266 4064 m
-2327 4064 l
-2327 4065 l
-2266 4065 l
-2267 4065 m
-2326 4065 l
-2326 4066 l
-2267 4066 l
-2268 4066 m
-2325 4066 l
-2325 4067 l
-2268 4067 l
-2270 4067 m
-2325 4067 l
-2325 4068 l
-2270 4068 l
-2271 4068 m
-2324 4068 l
-2324 4069 l
-2271 4069 l
-2272 4069 m
-2323 4069 l
-2323 4070 l
-2272 4070 l
-2274 4070 m
-2322 4070 l
-2322 4071 l
-2274 4071 l
-2275 4071 m
-2321 4071 l
-2321 4072 l
-2275 4072 l
-2276 4072 m
-2320 4072 l
-2320 4073 l
-2276 4073 l
-2277 4073 m
-2320 4073 l
-2320 4074 l
-2277 4074 l
-2279 4074 m
-2319 4074 l
-2319 4075 l
-2279 4075 l
-2280 4075 m
-2318 4075 l
-2318 4076 l
-2280 4076 l
-2281 4076 m
-2317 4076 l
-2317 4077 l
-2281 4077 l
-2282 4077 m
-2316 4077 l
-2316 4078 l
-2282 4078 l
-2284 4078 m
-2316 4078 l
-2316 4079 l
-2284 4079 l
-2285 4079 m
-2315 4079 l
-2315 4080 l
-2285 4080 l
-2286 4080 m
-2314 4080 l
-2314 4081 l
-2286 4081 l
-2287 4081 m
-2313 4081 l
-2313 4082 l
-2287 4082 l
-2289 4082 m
-2312 4082 l
-2312 4083 l
-2289 4083 l
-2290 4083 m
-2312 4083 l
-2312 4084 l
-2290 4084 l
-2291 4084 m
-2311 4084 l
-2311 4085 l
-2291 4085 l
-2292 4085 m
-2310 4085 l
-2310 4086 l
-2292 4086 l
-2294 4086 m
-2309 4086 l
-2309 4087 l
-2294 4087 l
-2295 4087 m
-2308 4087 l
-2308 4088 l
-2295 4088 l
-2296 4088 m
-2308 4088 l
-2308 4089 l
-2296 4089 l
-2297 4089 m
-2307 4089 l
-2307 4090 l
-2297 4090 l
-2299 4090 m
-2306 4090 l
-2306 4091 l
-2299 4091 l
-2300 4091 m
-2305 4091 l
-2305 4092 l
-2300 4092 l
-2301 4092 m
-2304 4092 l
-2304 4093 l
-2301 4093 l
-Y
-2179.8 3839.8 m
-2104 3935 l
-2303 4093 l
-2379 3999 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2141 3921 m
-2145 3930 l
-2147 3947 l
-2202 3879 l
-S
-2203 3965 m
-2200 3968 l
-2198 3977 l
-2199 3983 l
-2203 3992 l
-2216 4002 l
-2225 4004 l
-2231 4003 l
-2239 4000 l
-2245 3993 l
-2247 3984 l
-2248 3969 l
-2241 3910 l
-2287 3947 l
-S
-2271 4046 m
-2264 4035 l
-2266 4020 l
-2275 4001 l
-2283 3992 l
-2299 3978 l
-2314 3973 l
-2326 3978 l
-2333 3983 l
-2340 3994 l
-2339 4009 l
-2329 4028 l
-2321 4038 l
-2305 4052 l
-2290 4056 l
-2278 4052 l
-2271 4046 l
-S
-1 g
-2789 4191 m
-2795 4191 l
-2795 4192 l
-2789 4192 l
-2789 4192 m
-2799 4192 l
-2799 4193 l
-2789 4193 l
-2789 4193 m
-2802 4193 l
-2802 4194 l
-2789 4194 l
-2789 4194 m
-2806 4194 l
-2806 4195 l
-2789 4195 l
-2788 4195 m
-2810 4195 l
-2810 4196 l
-2788 4196 l
-2788 4196 m
-2814 4196 l
-2814 4197 l
-2788 4197 l
-2788 4197 m
-2817 4197 l
-2817 4198 l
-2788 4198 l
-2788 4198 m
-2821 4198 l
-2821 4199 l
-2788 4199 l
-2787 4199 m
-2825 4199 l
-2825 4200 l
-2787 4200 l
-2787 4200 m
-2829 4200 l
-2829 4201 l
-2787 4201 l
-2787 4201 m
-2833 4201 l
-2833 4202 l
-2787 4202 l
-2786 4202 m
-2836 4202 l
-2836 4203 l
-2786 4203 l
-2786 4203 m
-2840 4203 l
-2840 4204 l
-2786 4204 l
-2786 4204 m
-2844 4204 l
-2844 4205 l
-2786 4205 l
-2786 4205 m
-2848 4205 l
-2848 4206 l
-2786 4206 l
-2785 4206 m
-2851 4206 l
-2851 4207 l
-2785 4207 l
-2785 4207 m
-2855 4207 l
-2855 4208 l
-2785 4208 l
-2785 4208 m
-2859 4208 l
-2859 4209 l
-2785 4209 l
-2785 4209 m
-2863 4209 l
-2863 4210 l
-2785 4210 l
-2784 4210 m
-2866 4210 l
-2866 4211 l
-2784 4211 l
-2784 4211 m
-2870 4211 l
-2870 4212 l
-2784 4212 l
-2784 4212 m
-2874 4212 l
-2874 4213 l
-2784 4213 l
-2784 4213 m
-2878 4213 l
-2878 4214 l
-2784 4214 l
-2783 4214 m
-2882 4214 l
-2882 4215 l
-2783 4215 l
-2783 4215 m
-2885 4215 l
-2885 4216 l
-2783 4216 l
-2783 4216 m
-2889 4216 l
-2889 4217 l
-2783 4217 l
-2782 4217 m
-2893 4217 l
-2893 4218 l
-2782 4218 l
-2782 4218 m
-2897 4218 l
-2897 4219 l
-2782 4219 l
-2782 4219 m
-2900 4219 l
-2900 4220 l
-2782 4220 l
-2782 4220 m
-2904 4220 l
-2904 4221 l
-2782 4221 l
-2781 4221 m
-2908 4221 l
-2908 4222 l
-2781 4222 l
-2781 4222 m
-2912 4222 l
-2912 4223 l
-2781 4223 l
-2781 4223 m
-2915 4223 l
-2915 4224 l
-2781 4224 l
-2781 4224 m
-2919 4224 l
-2919 4225 l
-2781 4225 l
-2780 4225 m
-2923 4225 l
-2923 4226 l
-2780 4226 l
-2780 4226 m
-2927 4226 l
-2927 4227 l
-2780 4227 l
-2780 4227 m
-2931 4227 l
-2931 4228 l
-2780 4228 l
-2780 4228 m
-2934 4228 l
-2934 4229 l
-2780 4229 l
-2779 4229 m
-2938 4229 l
-2938 4230 l
-2779 4230 l
-2779 4230 m
-2942 4230 l
-2942 4231 l
-2779 4231 l
-2779 4231 m
-2946 4231 l
-2946 4232 l
-2779 4232 l
-2778 4232 m
-2949 4232 l
-2949 4233 l
-2778 4233 l
-2778 4233 m
-2953 4233 l
-2953 4234 l
-2778 4234 l
-2778 4234 m
-2957 4234 l
-2957 4235 l
-2778 4235 l
-2778 4235 m
-2961 4235 l
-2961 4236 l
-2778 4236 l
-2777 4236 m
-2964 4236 l
-2964 4237 l
-2777 4237 l
-2777 4237 m
-2964 4237 l
-2964 4240 l
-2777 4240 l
-2776 4240 m
-2964 4240 l
-2964 4241 l
-2776 4241 l
-2776 4241 m
-2963 4241 l
-2963 4244 l
-2776 4244 l
-2775 4244 m
-2963 4244 l
-2963 4245 l
-2775 4245 l
-2775 4245 m
-2962 4245 l
-2962 4247 l
-2775 4247 l
-2774 4247 m
-2962 4247 l
-2962 4249 l
-2774 4249 l
-2774 4249 m
-2961 4249 l
-2961 4251 l
-2774 4251 l
-2773 4251 m
-2961 4251 l
-2961 4253 l
-2773 4253 l
-2773 4253 m
-2960 4253 l
-2960 4255 l
-2773 4255 l
-2772 4255 m
-2960 4255 l
-2960 4256 l
-2772 4256 l
-2772 4256 m
-2959 4256 l
-2959 4259 l
-2772 4259 l
-2771 4259 m
-2959 4259 l
-2959 4260 l
-2771 4260 l
-2771 4260 m
-2958 4260 l
-2958 4262 l
-2771 4262 l
-2770 4262 m
-2958 4262 l
-2958 4264 l
-2770 4264 l
-2770 4264 m
-2957 4264 l
-2957 4266 l
-2770 4266 l
-2769 4266 m
-2957 4266 l
-2957 4268 l
-2769 4268 l
-2769 4268 m
-2956 4268 l
-2956 4270 l
-2769 4270 l
-2768 4270 m
-2956 4270 l
-2956 4271 l
-2768 4271 l
-2768 4271 m
-2955 4271 l
-2955 4274 l
-2768 4274 l
-2767 4274 m
-2955 4274 l
-2955 4275 l
-2767 4275 l
-2767 4275 m
-2954 4275 l
-2954 4277 l
-2767 4277 l
-2766 4277 m
-2954 4277 l
-2954 4279 l
-2766 4279 l
-2766 4279 m
-2953 4279 l
-2953 4281 l
-2766 4281 l
-2765 4281 m
-2953 4281 l
-2953 4283 l
-2765 4283 l
-2765 4283 m
-2952 4283 l
-2952 4285 l
-2765 4285 l
-2764 4285 m
-2952 4285 l
-2952 4287 l
-2764 4287 l
-2764 4287 m
-2951 4287 l
-2951 4289 l
-2764 4289 l
-2763 4289 m
-2951 4289 l
-2951 4290 l
-2763 4290 l
-2763 4290 m
-2950 4290 l
-2950 4292 l
-2763 4292 l
-2762 4292 m
-2950 4292 l
-2950 4294 l
-2762 4294 l
-2762 4294 m
-2949 4294 l
-2949 4296 l
-2762 4296 l
-2761 4296 m
-2949 4296 l
-2949 4298 l
-2761 4298 l
-2761 4298 m
-2948 4298 l
-2948 4300 l
-2761 4300 l
-2760 4300 m
-2948 4300 l
-2948 4302 l
-2760 4302 l
-2760 4302 m
-2947 4302 l
-2947 4304 l
-2760 4304 l
-2759 4304 m
-2947 4304 l
-2947 4305 l
-2759 4305 l
-2759 4305 m
-2946 4305 l
-2946 4307 l
-2759 4307 l
-2759 4307 m
-2946 4307 l
-2946 4308 l
-2759 4308 l
-2759 4308 m
-2946 4308 l
-2946 4309 l
-2759 4309 l
-2762 4309 m
-2945 4309 l
-2945 4310 l
-2762 4310 l
-2766 4310 m
-2945 4310 l
-2945 4311 l
-2766 4311 l
-2770 4311 m
-2945 4311 l
-2945 4312 l
-2770 4312 l
-2774 4312 m
-2945 4312 l
-2945 4313 l
-2774 4313 l
-2777 4313 m
-2944 4313 l
-2944 4314 l
-2777 4314 l
-2781 4314 m
-2944 4314 l
-2944 4315 l
-2781 4315 l
-2785 4315 m
-2944 4315 l
-2944 4316 l
-2785 4316 l
-2789 4316 m
-2944 4316 l
-2944 4317 l
-2789 4317 l
-2793 4317 m
-2943 4317 l
-2943 4318 l
-2793 4318 l
-2796 4318 m
-2943 4318 l
-2943 4319 l
-2796 4319 l
-2800 4319 m
-2943 4319 l
-2943 4320 l
-2800 4320 l
-2804 4320 m
-2943 4320 l
-2943 4321 l
-2804 4321 l
-2808 4321 m
-2942 4321 l
-2942 4322 l
-2808 4322 l
-2811 4322 m
-2942 4322 l
-2942 4323 l
-2811 4323 l
-2815 4323 m
-2942 4323 l
-2942 4324 l
-2815 4324 l
-2819 4324 m
-2941 4324 l
-2941 4325 l
-2819 4325 l
-2823 4325 m
-2941 4325 l
-2941 4326 l
-2823 4326 l
-2827 4326 m
-2941 4326 l
-2941 4327 l
-2827 4327 l
-2830 4327 m
-2941 4327 l
-2941 4328 l
-2830 4328 l
-2834 4328 m
-2940 4328 l
-2940 4329 l
-2834 4329 l
-2838 4329 m
-2940 4329 l
-2940 4330 l
-2838 4330 l
-2842 4330 m
-2940 4330 l
-2940 4331 l
-2842 4331 l
-2846 4331 m
-2940 4331 l
-2940 4332 l
-2846 4332 l
-2849 4332 m
-2939 4332 l
-2939 4333 l
-2849 4333 l
-2853 4333 m
-2939 4333 l
-2939 4334 l
-2853 4334 l
-2857 4334 m
-2939 4334 l
-2939 4335 l
-2857 4335 l
-2861 4335 m
-2939 4335 l
-2939 4336 l
-2861 4336 l
-2864 4336 m
-2938 4336 l
-2938 4337 l
-2864 4337 l
-2868 4337 m
-2938 4337 l
-2938 4338 l
-2868 4338 l
-2872 4338 m
-2938 4338 l
-2938 4339 l
-2872 4339 l
-2876 4339 m
-2937 4339 l
-2937 4340 l
-2876 4340 l
-2880 4340 m
-2937 4340 l
-2937 4341 l
-2880 4341 l
-2883 4341 m
-2937 4341 l
-2937 4342 l
-2883 4342 l
-2887 4342 m
-2937 4342 l
-2937 4343 l
-2887 4343 l
-2891 4343 m
-2936 4343 l
-2936 4344 l
-2891 4344 l
-2895 4344 m
-2936 4344 l
-2936 4345 l
-2895 4345 l
-2898 4345 m
-2936 4345 l
-2936 4346 l
-2898 4346 l
-2902 4346 m
-2936 4346 l
-2936 4347 l
-2902 4347 l
-2906 4347 m
-2935 4347 l
-2935 4348 l
-2906 4348 l
-2910 4348 m
-2935 4348 l
-2935 4349 l
-2910 4349 l
-2914 4349 m
-2935 4349 l
-2935 4350 l
-2914 4350 l
-2917 4350 m
-2935 4350 l
-2935 4351 l
-2917 4351 l
-2921 4351 m
-2934 4351 l
-2934 4352 l
-2921 4352 l
-2925 4352 m
-2934 4352 l
-2934 4353 l
-2925 4353 l
-2929 4353 m
-2934 4353 l
-2934 4354 l
-2929 4354 l
-Y
-2790.2 4190.9 m
-2759 4308 l
-2933 4354 l
-2964 4237 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2836 4298 m
-2829 4305 l
-2816 4306 l
-2808 4304 l
-2797 4296 l
-2792 4282 l
-2793 4261 l
-2799 4241 l
-2807 4226 l
-2817 4220 l
-2830 4219 l
-2834 4220 l
-2845 4227 l
-2851 4237 l
-2852 4250 l
-2851 4254 l
-2844 4266 l
-2834 4272 l
-2821 4272 l
-2817 4271 l
-2806 4264 l
-2800 4254 l
-2799 4241 l
-S
-2885 4324 m
-2874 4317 l
-2869 4302 l
-2870 4281 l
-2873 4269 l
-2883 4250 l
-2894 4240 l
-2907 4239 l
-2915 4241 l
-2926 4248 l
-2931 4263 l
-2930 4284 l
-2927 4296 l
-2917 4315 l
-2906 4325 l
-2893 4326 l
-2885 4324 l
-S
-1 g
-3525 4216 m
-3529 4216 l
-3529 4217 l
-3525 4217 l
-3522 4217 m
-3529 4217 l
-3529 4218 l
-3522 4218 l
-3519 4218 m
-3530 4218 l
-3530 4219 l
-3519 4219 l
-3516 4219 m
-3530 4219 l
-3530 4220 l
-3516 4220 l
-3513 4220 m
-3530 4220 l
-3530 4221 l
-3513 4221 l
-3510 4221 m
-3531 4221 l
-3531 4222 l
-3510 4222 l
-3507 4222 m
-3531 4222 l
-3531 4223 l
-3507 4223 l
-3504 4223 m
-3531 4223 l
-3531 4224 l
-3504 4224 l
-3502 4224 m
-3532 4224 l
-3532 4225 l
-3502 4225 l
-3499 4225 m
-3532 4225 l
-3532 4226 l
-3499 4226 l
-3496 4226 m
-3532 4226 l
-3532 4227 l
-3496 4227 l
-3493 4227 m
-3533 4227 l
-3533 4228 l
-3493 4228 l
-3490 4228 m
-3533 4228 l
-3533 4229 l
-3490 4229 l
-3487 4229 m
-3533 4229 l
-3533 4230 l
-3487 4230 l
-3484 4230 m
-3534 4230 l
-3534 4231 l
-3484 4231 l
-3481 4231 m
-3534 4231 l
-3534 4232 l
-3481 4232 l
-3479 4232 m
-3534 4232 l
-3534 4233 l
-3479 4233 l
-3476 4233 m
-3535 4233 l
-3535 4234 l
-3476 4234 l
-3473 4234 m
-3535 4234 l
-3535 4235 l
-3473 4235 l
-3470 4235 m
-3536 4235 l
-3536 4236 l
-3470 4236 l
-3467 4236 m
-3536 4236 l
-3536 4237 l
-3467 4237 l
-3464 4237 m
-3536 4237 l
-3536 4238 l
-3464 4238 l
-3461 4238 m
-3537 4238 l
-3537 4239 l
-3461 4239 l
-3458 4239 m
-3537 4239 l
-3537 4240 l
-3458 4240 l
-3456 4240 m
-3537 4240 l
-3537 4241 l
-3456 4241 l
-3453 4241 m
-3538 4241 l
-3538 4242 l
-3453 4242 l
-3450 4242 m
-3538 4242 l
-3538 4243 l
-3450 4243 l
-3447 4243 m
-3538 4243 l
-3538 4244 l
-3447 4244 l
-3444 4244 m
-3539 4244 l
-3539 4245 l
-3444 4245 l
-3441 4245 m
-3539 4245 l
-3539 4246 l
-3441 4246 l
-3438 4246 m
-3539 4246 l
-3539 4247 l
-3438 4247 l
-3435 4247 m
-3540 4247 l
-3540 4248 l
-3435 4248 l
-3433 4248 m
-3540 4248 l
-3540 4249 l
-3433 4249 l
-3433 4249 m
-3540 4249 l
-3540 4250 l
-3433 4250 l
-3433 4250 m
-3541 4250 l
-3541 4252 l
-3433 4252 l
-3434 4252 m
-3541 4252 l
-3541 4253 l
-3434 4253 l
-3434 4253 m
-3542 4253 l
-3542 4255 l
-3434 4255 l
-3435 4255 m
-3543 4255 l
-3543 4258 l
-3435 4258 l
-3436 4258 m
-3544 4258 l
-3544 4261 l
-3436 4261 l
-3437 4261 m
-3545 4261 l
-3545 4264 l
-3437 4264 l
-3438 4264 m
-3546 4264 l
-3546 4267 l
-3438 4267 l
-3439 4267 m
-3547 4267 l
-3547 4269 l
-3439 4269 l
-3440 4269 m
-3547 4269 l
-3547 4270 l
-3440 4270 l
-3440 4270 m
-3548 4270 l
-3548 4272 l
-3440 4272 l
-3441 4272 m
-3548 4272 l
-3548 4273 l
-3441 4273 l
-3441 4273 m
-3549 4273 l
-3549 4275 l
-3441 4275 l
-3442 4275 m
-3550 4275 l
-3550 4278 l
-3442 4278 l
-3443 4278 m
-3551 4278 l
-3551 4281 l
-3443 4281 l
-3444 4281 m
-3552 4281 l
-3552 4284 l
-3444 4284 l
-3445 4284 m
-3553 4284 l
-3553 4287 l
-3445 4287 l
-3446 4287 m
-3554 4287 l
-3554 4289 l
-3446 4289 l
-3447 4289 m
-3554 4289 l
-3554 4290 l
-3447 4290 l
-3447 4290 m
-3555 4290 l
-3555 4292 l
-3447 4292 l
-3448 4292 m
-3555 4292 l
-3555 4293 l
-3448 4293 l
-3448 4293 m
-3556 4293 l
-3556 4295 l
-3448 4295 l
-3449 4295 m
-3557 4295 l
-3557 4298 l
-3449 4298 l
-3450 4298 m
-3558 4298 l
-3558 4301 l
-3450 4301 l
-3451 4301 m
-3559 4301 l
-3559 4304 l
-3451 4304 l
-3452 4304 m
-3560 4304 l
-3560 4306 l
-3452 4306 l
-3453 4306 m
-3560 4306 l
-3560 4307 l
-3453 4307 l
-3453 4307 m
-3561 4307 l
-3561 4309 l
-3453 4309 l
-3454 4309 m
-3561 4309 l
-3561 4310 l
-3454 4310 l
-3454 4310 m
-3562 4310 l
-3562 4312 l
-3454 4312 l
-3455 4312 m
-3563 4312 l
-3563 4315 l
-3455 4315 l
-3456 4315 m
-3564 4315 l
-3564 4318 l
-3456 4318 l
-3457 4318 m
-3565 4318 l
-3565 4321 l
-3457 4321 l
-3458 4321 m
-3566 4321 l
-3566 4324 l
-3458 4324 l
-3459 4324 m
-3567 4324 l
-3567 4326 l
-3459 4326 l
-3460 4326 m
-3567 4326 l
-3567 4327 l
-3460 4327 l
-3460 4327 m
-3568 4327 l
-3568 4329 l
-3460 4329 l
-3461 4329 m
-3568 4329 l
-3568 4330 l
-3461 4330 l
-3461 4330 m
-3569 4330 l
-3569 4331 l
-3461 4331 l
-3461 4331 m
-3566 4331 l
-3566 4332 l
-3461 4332 l
-3462 4332 m
-3563 4332 l
-3563 4333 l
-3462 4333 l
-3462 4333 m
-3560 4333 l
-3560 4334 l
-3462 4334 l
-3462 4334 m
-3557 4334 l
-3557 4335 l
-3462 4335 l
-3463 4335 m
-3554 4335 l
-3554 4336 l
-3463 4336 l
-3463 4336 m
-3551 4336 l
-3551 4337 l
-3463 4337 l
-3463 4337 m
-3549 4337 l
-3549 4338 l
-3463 4338 l
-3464 4338 m
-3546 4338 l
-3546 4339 l
-3464 4339 l
-3464 4339 m
-3543 4339 l
-3543 4340 l
-3464 4340 l
-3464 4340 m
-3540 4340 l
-3540 4341 l
-3464 4341 l
-3465 4341 m
-3537 4341 l
-3537 4342 l
-3465 4342 l
-3465 4342 m
-3534 4342 l
-3534 4343 l
-3465 4343 l
-3465 4343 m
-3531 4343 l
-3531 4344 l
-3465 4344 l
-3466 4344 m
-3528 4344 l
-3528 4345 l
-3466 4345 l
-3466 4345 m
-3525 4345 l
-3525 4346 l
-3466 4346 l
-3467 4346 m
-3523 4346 l
-3523 4347 l
-3467 4347 l
-3467 4347 m
-3520 4347 l
-3520 4348 l
-3467 4348 l
-3467 4348 m
-3517 4348 l
-3517 4349 l
-3467 4349 l
-3468 4349 m
-3514 4349 l
-3514 4350 l
-3468 4350 l
-3468 4350 m
-3511 4350 l
-3511 4351 l
-3468 4351 l
-3468 4351 m
-3508 4351 l
-3508 4352 l
-3468 4352 l
-3469 4352 m
-3505 4352 l
-3505 4353 l
-3469 4353 l
-3469 4353 m
-3502 4353 l
-3502 4354 l
-3469 4354 l
-3469 4354 m
-3499 4354 l
-3499 4355 l
-3469 4355 l
-3470 4355 m
-3497 4355 l
-3497 4356 l
-3470 4356 l
-3470 4356 m
-3494 4356 l
-3494 4357 l
-3470 4357 l
-3470 4357 m
-3491 4357 l
-3491 4358 l
-3470 4358 l
-3471 4358 m
-3488 4358 l
-3488 4359 l
-3471 4359 l
-3471 4359 m
-3485 4359 l
-3485 4360 l
-3471 4360 l
-3471 4360 m
-3482 4360 l
-3482 4361 l
-3471 4361 l
-3472 4361 m
-3479 4361 l
-3479 4362 l
-3472 4362 l
-3472 4362 m
-3476 4362 l
-3476 4363 l
-3472 4363 l
-Y
-3568 4330.1 m
-3528 4216 l
-3433 4249 l
-3473 4363 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3490 4247 m
-3503 4246 l
-3515 4256 l
-3526 4274 l
-3530 4286 l
-3533 4307 l
-3530 4321 l
-3519 4329 l
-3511 4332 l
-3498 4332 l
-3486 4323 l
-3475 4305 l
-3471 4293 l
-3468 4272 l
-3472 4257 l
-3482 4249 l
-3490 4247 l
-S
-1 g
-2845 3271 m
-2847 3271 l
-2847 3272 l
-2845 3272 l
-2845 3272 m
-2849 3272 l
-2849 3273 l
-2845 3273 l
-2844 3273 m
-2851 3273 l
-2851 3274 l
-2844 3274 l
-2843 3274 m
-2853 3274 l
-2853 3275 l
-2843 3275 l
-2843 3275 m
-2855 3275 l
-2855 3276 l
-2843 3276 l
-2842 3276 m
-2856 3276 l
-2856 3277 l
-2842 3277 l
-2842 3277 m
-2858 3277 l
-2858 3278 l
-2842 3278 l
-2841 3278 m
-2860 3278 l
-2860 3279 l
-2841 3279 l
-2841 3279 m
-2862 3279 l
-2862 3280 l
-2841 3280 l
-2840 3280 m
-2864 3280 l
-2864 3281 l
-2840 3281 l
-2840 3281 m
-2865 3281 l
-2865 3282 l
-2840 3282 l
-2839 3282 m
-2867 3282 l
-2867 3283 l
-2839 3283 l
-2838 3283 m
-2869 3283 l
-2869 3284 l
-2838 3284 l
-2838 3284 m
-2871 3284 l
-2871 3285 l
-2838 3285 l
-2837 3285 m
-2873 3285 l
-2873 3286 l
-2837 3286 l
-2837 3286 m
-2874 3286 l
-2874 3287 l
-2837 3287 l
-2836 3287 m
-2876 3287 l
-2876 3288 l
-2836 3288 l
-2836 3288 m
-2878 3288 l
-2878 3289 l
-2836 3289 l
-2835 3289 m
-2880 3289 l
-2880 3290 l
-2835 3290 l
-2835 3290 m
-2882 3290 l
-2882 3291 l
-2835 3291 l
-2834 3291 m
-2883 3291 l
-2883 3292 l
-2834 3292 l
-2834 3292 m
-2885 3292 l
-2885 3293 l
-2834 3293 l
-2833 3293 m
-2887 3293 l
-2887 3294 l
-2833 3294 l
-2832 3294 m
-2889 3294 l
-2889 3295 l
-2832 3295 l
-2832 3295 m
-2891 3295 l
-2891 3296 l
-2832 3296 l
-2831 3296 m
-2892 3296 l
-2892 3297 l
-2831 3297 l
-2831 3297 m
-2894 3297 l
-2894 3298 l
-2831 3298 l
-2830 3298 m
-2896 3298 l
-2896 3299 l
-2830 3299 l
-2830 3299 m
-2898 3299 l
-2898 3300 l
-2830 3300 l
-2829 3300 m
-2900 3300 l
-2900 3301 l
-2829 3301 l
-2829 3301 m
-2902 3301 l
-2902 3302 l
-2829 3302 l
-2828 3302 m
-2903 3302 l
-2903 3303 l
-2828 3303 l
-2827 3303 m
-2905 3303 l
-2905 3304 l
-2827 3304 l
-2827 3304 m
-2907 3304 l
-2907 3305 l
-2827 3305 l
-2826 3305 m
-2909 3305 l
-2909 3306 l
-2826 3306 l
-2826 3306 m
-2911 3306 l
-2911 3307 l
-2826 3307 l
-2825 3307 m
-2912 3307 l
-2912 3308 l
-2825 3308 l
-2825 3308 m
-2914 3308 l
-2914 3309 l
-2825 3309 l
-2824 3309 m
-2916 3309 l
-2916 3310 l
-2824 3310 l
-2824 3310 m
-2918 3310 l
-2918 3311 l
-2824 3311 l
-2823 3311 m
-2920 3311 l
-2920 3312 l
-2823 3312 l
-2822 3312 m
-2921 3312 l
-2921 3313 l
-2822 3313 l
-2822 3313 m
-2923 3313 l
-2923 3314 l
-2822 3314 l
-2821 3314 m
-2925 3314 l
-2925 3315 l
-2821 3315 l
-2821 3315 m
-2927 3315 l
-2927 3316 l
-2821 3316 l
-2820 3316 m
-2929 3316 l
-2929 3317 l
-2820 3317 l
-2820 3317 m
-2930 3317 l
-2930 3318 l
-2820 3318 l
-2819 3318 m
-2932 3318 l
-2932 3319 l
-2819 3319 l
-2819 3319 m
-2934 3319 l
-2934 3320 l
-2819 3320 l
-2818 3320 m
-2936 3320 l
-2936 3321 l
-2818 3321 l
-2817 3321 m
-2938 3321 l
-2938 3322 l
-2817 3322 l
-2817 3322 m
-2939 3322 l
-2939 3323 l
-2817 3323 l
-2816 3323 m
-2941 3323 l
-2941 3324 l
-2816 3324 l
-2816 3324 m
-2943 3324 l
-2943 3325 l
-2816 3325 l
-2815 3325 m
-2945 3325 l
-2945 3326 l
-2815 3326 l
-2815 3326 m
-2947 3326 l
-2947 3327 l
-2815 3327 l
-2814 3327 m
-2949 3327 l
-2949 3328 l
-2814 3328 l
-2814 3328 m
-2950 3328 l
-2950 3329 l
-2814 3329 l
-2813 3329 m
-2952 3329 l
-2952 3330 l
-2813 3330 l
-2812 3330 m
-2954 3330 l
-2954 3331 l
-2812 3331 l
-2812 3331 m
-2956 3331 l
-2956 3332 l
-2812 3332 l
-2811 3332 m
-2958 3332 l
-2958 3333 l
-2811 3333 l
-2811 3333 m
-2959 3333 l
-2959 3334 l
-2811 3334 l
-2810 3334 m
-2961 3334 l
-2961 3335 l
-2810 3335 l
-2810 3335 m
-2963 3335 l
-2963 3336 l
-2810 3336 l
-2809 3336 m
-2965 3336 l
-2965 3337 l
-2809 3337 l
-2809 3337 m
-2967 3337 l
-2967 3338 l
-2809 3338 l
-2808 3338 m
-2968 3338 l
-2968 3339 l
-2808 3339 l
-2808 3339 m
-2970 3339 l
-2970 3340 l
-2808 3340 l
-2807 3340 m
-2972 3340 l
-2972 3341 l
-2807 3341 l
-2806 3341 m
-2974 3341 l
-2974 3342 l
-2806 3342 l
-2806 3342 m
-2976 3342 l
-2976 3343 l
-2806 3343 l
-2805 3343 m
-2977 3343 l
-2977 3344 l
-2805 3344 l
-2805 3344 m
-2979 3344 l
-2979 3345 l
-2805 3345 l
-2804 3345 m
-2981 3345 l
-2981 3346 l
-2804 3346 l
-2804 3346 m
-2983 3346 l
-2983 3347 l
-2804 3347 l
-2803 3347 m
-2985 3347 l
-2985 3348 l
-2803 3348 l
-2803 3348 m
-2986 3348 l
-2986 3349 l
-2803 3349 l
-2802 3349 m
-2988 3349 l
-2988 3350 l
-2802 3350 l
-2801 3350 m
-2990 3350 l
-2990 3351 l
-2801 3351 l
-2801 3351 m
-2992 3351 l
-2992 3352 l
-2801 3352 l
-2800 3352 m
-2994 3352 l
-2994 3353 l
-2800 3353 l
-2800 3353 m
-2995 3353 l
-2995 3354 l
-2800 3354 l
-2799 3354 m
-2997 3354 l
-2997 3355 l
-2799 3355 l
-2799 3355 m
-2999 3355 l
-2999 3356 l
-2799 3356 l
-2798 3356 m
-3001 3356 l
-3001 3357 l
-2798 3357 l
-2798 3357 m
-3003 3357 l
-3003 3358 l
-2798 3358 l
-2797 3358 m
-3005 3358 l
-3005 3359 l
-2797 3359 l
-2796 3359 m
-3006 3359 l
-3006 3360 l
-2796 3360 l
-2796 3360 m
-3008 3360 l
-3008 3361 l
-2796 3361 l
-2795 3361 m
-3010 3361 l
-3010 3362 l
-2795 3362 l
-2795 3362 m
-3012 3362 l
-3012 3363 l
-2795 3363 l
-2794 3363 m
-3014 3363 l
-3014 3364 l
-2794 3364 l
-2794 3364 m
-3015 3364 l
-3015 3365 l
-2794 3365 l
-2793 3365 m
-3017 3365 l
-3017 3366 l
-2793 3366 l
-2793 3366 m
-3019 3366 l
-3019 3367 l
-2793 3367 l
-2792 3367 m
-3021 3367 l
-3021 3368 l
-2792 3368 l
-2791 3368 m
-3023 3368 l
-3023 3369 l
-2791 3369 l
-2791 3369 m
-3024 3369 l
-3024 3370 l
-2791 3370 l
-2790 3370 m
-3026 3370 l
-3026 3371 l
-2790 3371 l
-2790 3371 m
-3028 3371 l
-3028 3372 l
-2790 3372 l
-2789 3372 m
-3030 3372 l
-3030 3373 l
-2789 3373 l
-2789 3373 m
-3032 3373 l
-3032 3374 l
-2789 3374 l
-2788 3374 m
-3033 3374 l
-3033 3375 l
-2788 3375 l
-2788 3375 m
-3035 3375 l
-3035 3376 l
-2788 3376 l
-2787 3376 m
-3037 3376 l
-3037 3377 l
-2787 3377 l
-2787 3377 m
-3039 3377 l
-3039 3378 l
-2787 3378 l
-2787 3378 m
-3041 3378 l
-3041 3379 l
-2787 3379 l
-2788 3379 m
-3042 3379 l
-3042 3380 l
-2788 3380 l
-2790 3380 m
-3044 3380 l
-3044 3381 l
-2790 3381 l
-2792 3381 m
-3046 3381 l
-3046 3382 l
-2792 3382 l
-2794 3382 m
-3048 3382 l
-3048 3383 l
-2794 3383 l
-2796 3383 m
-3050 3383 l
-3050 3384 l
-2796 3384 l
-2797 3384 m
-3052 3384 l
-3052 3385 l
-2797 3385 l
-2799 3385 m
-3053 3385 l
-3053 3386 l
-2799 3386 l
-2801 3386 m
-3055 3386 l
-3055 3387 l
-2801 3387 l
-2803 3387 m
-3057 3387 l
-3057 3388 l
-2803 3388 l
-2805 3388 m
-3059 3388 l
-3059 3389 l
-2805 3389 l
-2806 3389 m
-3061 3389 l
-3061 3390 l
-2806 3390 l
-2808 3390 m
-3062 3390 l
-3062 3391 l
-2808 3391 l
-2810 3391 m
-3064 3391 l
-3064 3392 l
-2810 3392 l
-2812 3392 m
-3066 3392 l
-3066 3393 l
-2812 3393 l
-2814 3393 m
-3068 3393 l
-3068 3394 l
-2814 3394 l
-2816 3394 m
-3070 3394 l
-3070 3395 l
-2816 3395 l
-2817 3395 m
-3071 3395 l
-3071 3396 l
-2817 3396 l
-2819 3396 m
-3073 3396 l
-3073 3397 l
-2819 3397 l
-2821 3397 m
-3075 3397 l
-3075 3398 l
-2821 3398 l
-2823 3398 m
-3077 3398 l
-3077 3399 l
-2823 3399 l
-2825 3399 m
-3079 3399 l
-3079 3400 l
-2825 3400 l
-2826 3400 m
-3080 3400 l
-3080 3401 l
-2826 3401 l
-2828 3401 m
-3082 3401 l
-3082 3402 l
-2828 3402 l
-2830 3402 m
-3084 3402 l
-3084 3403 l
-2830 3403 l
-2832 3403 m
-3086 3403 l
-3086 3404 l
-2832 3404 l
-2834 3404 m
-3088 3404 l
-3088 3405 l
-2834 3405 l
-2835 3405 m
-3089 3405 l
-3089 3406 l
-2835 3406 l
-2837 3406 m
-3091 3406 l
-3091 3407 l
-2837 3407 l
-2839 3407 m
-3093 3407 l
-3093 3408 l
-2839 3408 l
-2841 3408 m
-3095 3408 l
-3095 3409 l
-2841 3409 l
-2843 3409 m
-3097 3409 l
-3097 3410 l
-2843 3410 l
-2845 3410 m
-3098 3410 l
-3098 3411 l
-2845 3411 l
-2846 3411 m
-3099 3411 l
-3099 3412 l
-2846 3412 l
-2848 3412 m
-3098 3412 l
-3098 3413 l
-2848 3413 l
-2850 3413 m
-3097 3413 l
-3097 3414 l
-2850 3414 l
-2852 3414 m
-3097 3414 l
-3097 3415 l
-2852 3415 l
-2854 3415 m
-3096 3415 l
-3096 3416 l
-2854 3416 l
-2855 3416 m
-3096 3416 l
-3096 3417 l
-2855 3417 l
-2857 3417 m
-3095 3417 l
-3095 3418 l
-2857 3418 l
-2859 3418 m
-3095 3418 l
-3095 3419 l
-2859 3419 l
-2861 3419 m
-3094 3419 l
-3094 3420 l
-2861 3420 l
-2863 3420 m
-3093 3420 l
-3093 3421 l
-2863 3421 l
-2864 3421 m
-3093 3421 l
-3093 3422 l
-2864 3422 l
-2866 3422 m
-3092 3422 l
-3092 3423 l
-2866 3423 l
-2868 3423 m
-3092 3423 l
-3092 3424 l
-2868 3424 l
-2870 3424 m
-3091 3424 l
-3091 3425 l
-2870 3425 l
-2872 3425 m
-3091 3425 l
-3091 3426 l
-2872 3426 l
-2874 3426 m
-3090 3426 l
-3090 3427 l
-2874 3427 l
-2875 3427 m
-3090 3427 l
-3090 3428 l
-2875 3428 l
-2877 3428 m
-3089 3428 l
-3089 3429 l
-2877 3429 l
-2879 3429 m
-3088 3429 l
-3088 3430 l
-2879 3430 l
-2881 3430 m
-3088 3430 l
-3088 3431 l
-2881 3431 l
-2883 3431 m
-3087 3431 l
-3087 3432 l
-2883 3432 l
-2884 3432 m
-3087 3432 l
-3087 3433 l
-2884 3433 l
-2886 3433 m
-3086 3433 l
-3086 3434 l
-2886 3434 l
-2888 3434 m
-3086 3434 l
-3086 3435 l
-2888 3435 l
-2890 3435 m
-3085 3435 l
-3085 3436 l
-2890 3436 l
-2892 3436 m
-3085 3436 l
-3085 3437 l
-2892 3437 l
-2893 3437 m
-3084 3437 l
-3084 3438 l
-2893 3438 l
-2895 3438 m
-3083 3438 l
-3083 3439 l
-2895 3439 l
-2897 3439 m
-3083 3439 l
-3083 3440 l
-2897 3440 l
-2899 3440 m
-3082 3440 l
-3082 3441 l
-2899 3441 l
-2901 3441 m
-3082 3441 l
-3082 3442 l
-2901 3442 l
-2903 3442 m
-3081 3442 l
-3081 3443 l
-2903 3443 l
-2904 3443 m
-3081 3443 l
-3081 3444 l
-2904 3444 l
-2906 3444 m
-3080 3444 l
-3080 3445 l
-2906 3445 l
-2908 3445 m
-3080 3445 l
-3080 3446 l
-2908 3446 l
-2910 3446 m
-3079 3446 l
-3079 3447 l
-2910 3447 l
-2912 3447 m
-3078 3447 l
-3078 3448 l
-2912 3448 l
-2913 3448 m
-3078 3448 l
-3078 3449 l
-2913 3449 l
-2915 3449 m
-3077 3449 l
-3077 3450 l
-2915 3450 l
-2917 3450 m
-3077 3450 l
-3077 3451 l
-2917 3451 l
-2919 3451 m
-3076 3451 l
-3076 3452 l
-2919 3452 l
-2921 3452 m
-3076 3452 l
-3076 3453 l
-2921 3453 l
-2922 3453 m
-3075 3453 l
-3075 3454 l
-2922 3454 l
-2924 3454 m
-3075 3454 l
-3075 3455 l
-2924 3455 l
-2926 3455 m
-3074 3455 l
-3074 3456 l
-2926 3456 l
-2928 3456 m
-3073 3456 l
-3073 3457 l
-2928 3457 l
-2930 3457 m
-3073 3457 l
-3073 3458 l
-2930 3458 l
-2932 3458 m
-3072 3458 l
-3072 3459 l
-2932 3459 l
-2933 3459 m
-3072 3459 l
-3072 3460 l
-2933 3460 l
-2935 3460 m
-3071 3460 l
-3071 3461 l
-2935 3461 l
-2937 3461 m
-3071 3461 l
-3071 3462 l
-2937 3462 l
-2939 3462 m
-3070 3462 l
-3070 3463 l
-2939 3463 l
-2941 3463 m
-3070 3463 l
-3070 3464 l
-2941 3464 l
-2942 3464 m
-3069 3464 l
-3069 3465 l
-2942 3465 l
-2944 3465 m
-3068 3465 l
-3068 3466 l
-2944 3466 l
-2946 3466 m
-3068 3466 l
-3068 3467 l
-2946 3467 l
-2948 3467 m
-3067 3467 l
-3067 3468 l
-2948 3468 l
-2950 3468 m
-3067 3468 l
-3067 3469 l
-2950 3469 l
-2951 3469 m
-3066 3469 l
-3066 3470 l
-2951 3470 l
-2953 3470 m
-3066 3470 l
-3066 3471 l
-2953 3471 l
-2955 3471 m
-3065 3471 l
-3065 3472 l
-2955 3472 l
-2957 3472 m
-3065 3472 l
-3065 3473 l
-2957 3473 l
-2959 3473 m
-3064 3473 l
-3064 3474 l
-2959 3474 l
-2961 3474 m
-3063 3474 l
-3063 3475 l
-2961 3475 l
-2962 3475 m
-3063 3475 l
-3063 3476 l
-2962 3476 l
-2964 3476 m
-3062 3476 l
-3062 3477 l
-2964 3477 l
-2966 3477 m
-3062 3477 l
-3062 3478 l
-2966 3478 l
-2968 3478 m
-3061 3478 l
-3061 3479 l
-2968 3479 l
-2970 3479 m
-3061 3479 l
-3061 3480 l
-2970 3480 l
-2971 3480 m
-3060 3480 l
-3060 3481 l
-2971 3481 l
-2973 3481 m
-3060 3481 l
-3060 3482 l
-2973 3482 l
-2975 3482 m
-3059 3482 l
-3059 3483 l
-2975 3483 l
-2977 3483 m
-3058 3483 l
-3058 3484 l
-2977 3484 l
-2979 3484 m
-3058 3484 l
-3058 3485 l
-2979 3485 l
-2980 3485 m
-3057 3485 l
-3057 3486 l
-2980 3486 l
-2982 3486 m
-3057 3486 l
-3057 3487 l
-2982 3487 l
-2984 3487 m
-3056 3487 l
-3056 3488 l
-2984 3488 l
-2986 3488 m
-3056 3488 l
-3056 3489 l
-2986 3489 l
-2988 3489 m
-3055 3489 l
-3055 3490 l
-2988 3490 l
-2990 3490 m
-3055 3490 l
-3055 3491 l
-2990 3491 l
-2991 3491 m
-3054 3491 l
-3054 3492 l
-2991 3492 l
-2993 3492 m
-3053 3492 l
-3053 3493 l
-2993 3493 l
-2995 3493 m
-3053 3493 l
-3053 3494 l
-2995 3494 l
-2997 3494 m
-3052 3494 l
-3052 3495 l
-2997 3495 l
-2999 3495 m
-3052 3495 l
-3052 3496 l
-2999 3496 l
-3000 3496 m
-3051 3496 l
-3051 3497 l
-3000 3497 l
-3002 3497 m
-3051 3497 l
-3051 3498 l
-3002 3498 l
-3004 3498 m
-3050 3498 l
-3050 3499 l
-3004 3499 l
-3006 3499 m
-3050 3499 l
-3050 3500 l
-3006 3500 l
-3008 3500 m
-3049 3500 l
-3049 3501 l
-3008 3501 l
-3009 3501 m
-3048 3501 l
-3048 3502 l
-3009 3502 l
-3011 3502 m
-3048 3502 l
-3048 3503 l
-3011 3503 l
-3013 3503 m
-3047 3503 l
-3047 3504 l
-3013 3504 l
-3015 3504 m
-3047 3504 l
-3047 3505 l
-3015 3505 l
-3017 3505 m
-3046 3505 l
-3046 3506 l
-3017 3506 l
-3019 3506 m
-3046 3506 l
-3046 3507 l
-3019 3507 l
-3020 3507 m
-3045 3507 l
-3045 3508 l
-3020 3508 l
-3022 3508 m
-3045 3508 l
-3045 3509 l
-3022 3509 l
-3024 3509 m
-3044 3509 l
-3044 3510 l
-3024 3510 l
-3026 3510 m
-3043 3510 l
-3043 3511 l
-3026 3511 l
-3028 3511 m
-3043 3511 l
-3043 3512 l
-3028 3512 l
-3029 3512 m
-3042 3512 l
-3042 3513 l
-3029 3513 l
-3031 3513 m
-3042 3513 l
-3042 3514 l
-3031 3514 l
-3033 3514 m
-3041 3514 l
-3041 3515 l
-3033 3515 l
-3035 3515 m
-3041 3515 l
-3041 3516 l
-3035 3516 l
-3037 3516 m
-3040 3516 l
-3040 3517 l
-3037 3517 l
-Y
-2845.9 3271.5 m
-2787 3378 l
-3039 3517 l
-3098 3411 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2838 3329 m
-2904 3366 l
-S
-2967 3424 m
-2969 3411 l
-2966 3400 l
-2957 3390 l
-2953 3388 l
-2940 3386 l
-2929 3389 l
-2919 3398 l
-2917 3402 l
-2915 3415 l
-2918 3426 l
-2927 3436 l
-2931 3438 l
-2944 3440 l
-2955 3437 l
-2967 3424 l
-2977 3406 l
-2983 3386 l
-2982 3371 l
-2973 3361 l
-2966 3357 l
-2953 3354 l
-2945 3360 l
-S
-3000 3476 m
-2991 3466 l
-2990 3451 l
-2996 3431 l
-3002 3420 l
-3016 3404 l
-3029 3397 l
-3042 3399 l
-3050 3403 l
-3059 3413 l
-3060 3428 l
-3054 3448 l
-3047 3459 l
-3034 3476 l
-3020 3483 l
-3007 3480 l
-3000 3476 l
-S
-1 g
-3190 3488 m
-3192 3488 l
-3192 3489 l
-3190 3489 l
-3189 3489 m
-3193 3489 l
-3193 3490 l
-3189 3490 l
-3187 3490 m
-3194 3490 l
-3194 3491 l
-3187 3491 l
-3186 3491 m
-3195 3491 l
-3195 3492 l
-3186 3492 l
-3185 3492 m
-3196 3492 l
-3196 3493 l
-3185 3493 l
-3184 3493 m
-3197 3493 l
-3197 3494 l
-3184 3494 l
-3183 3494 m
-3197 3494 l
-3197 3495 l
-3183 3495 l
-3181 3495 m
-3198 3495 l
-3198 3496 l
-3181 3496 l
-3180 3496 m
-3199 3496 l
-3199 3497 l
-3180 3497 l
-3179 3497 m
-3200 3497 l
-3200 3498 l
-3179 3498 l
-3178 3498 m
-3201 3498 l
-3201 3499 l
-3178 3499 l
-3176 3499 m
-3202 3499 l
-3202 3500 l
-3176 3500 l
-3175 3500 m
-3202 3500 l
-3202 3501 l
-3175 3501 l
-3174 3501 m
-3203 3501 l
-3203 3502 l
-3174 3502 l
-3173 3502 m
-3204 3502 l
-3204 3503 l
-3173 3503 l
-3172 3503 m
-3205 3503 l
-3205 3504 l
-3172 3504 l
-3170 3504 m
-3206 3504 l
-3206 3505 l
-3170 3505 l
-3169 3505 m
-3207 3505 l
-3207 3506 l
-3169 3506 l
-3168 3506 m
-3207 3506 l
-3207 3507 l
-3168 3507 l
-3167 3507 m
-3208 3507 l
-3208 3508 l
-3167 3508 l
-3166 3508 m
-3209 3508 l
-3209 3509 l
-3166 3509 l
-3164 3509 m
-3210 3509 l
-3210 3510 l
-3164 3510 l
-3163 3510 m
-3211 3510 l
-3211 3511 l
-3163 3511 l
-3162 3511 m
-3212 3511 l
-3212 3512 l
-3162 3512 l
-3161 3512 m
-3212 3512 l
-3212 3513 l
-3161 3513 l
-3159 3513 m
-3213 3513 l
-3213 3514 l
-3159 3514 l
-3158 3514 m
-3214 3514 l
-3214 3515 l
-3158 3515 l
-3157 3515 m
-3215 3515 l
-3215 3516 l
-3157 3516 l
-3156 3516 m
-3216 3516 l
-3216 3517 l
-3156 3517 l
-3155 3517 m
-3216 3517 l
-3216 3518 l
-3155 3518 l
-3153 3518 m
-3217 3518 l
-3217 3519 l
-3153 3519 l
-3152 3519 m
-3218 3519 l
-3218 3520 l
-3152 3520 l
-3151 3520 m
-3219 3520 l
-3219 3521 l
-3151 3521 l
-3150 3521 m
-3220 3521 l
-3220 3522 l
-3150 3522 l
-3149 3522 m
-3221 3522 l
-3221 3523 l
-3149 3523 l
-3147 3523 m
-3221 3523 l
-3221 3524 l
-3147 3524 l
-3146 3524 m
-3222 3524 l
-3222 3525 l
-3146 3525 l
-3145 3525 m
-3223 3525 l
-3223 3526 l
-3145 3526 l
-3144 3526 m
-3224 3526 l
-3224 3527 l
-3144 3527 l
-3142 3527 m
-3225 3527 l
-3225 3528 l
-3142 3528 l
-3141 3528 m
-3226 3528 l
-3226 3529 l
-3141 3529 l
-3140 3529 m
-3226 3529 l
-3226 3530 l
-3140 3530 l
-3139 3530 m
-3227 3530 l
-3227 3531 l
-3139 3531 l
-3138 3531 m
-3228 3531 l
-3228 3532 l
-3138 3532 l
-3136 3532 m
-3229 3532 l
-3229 3533 l
-3136 3533 l
-3135 3533 m
-3230 3533 l
-3230 3534 l
-3135 3534 l
-3134 3534 m
-3231 3534 l
-3231 3535 l
-3134 3535 l
-3133 3535 m
-3231 3535 l
-3231 3536 l
-3133 3536 l
-3132 3536 m
-3232 3536 l
-3232 3537 l
-3132 3537 l
-3130 3537 m
-3233 3537 l
-3233 3538 l
-3130 3538 l
-3129 3538 m
-3234 3538 l
-3234 3539 l
-3129 3539 l
-3128 3539 m
-3235 3539 l
-3235 3540 l
-3128 3540 l
-3127 3540 m
-3236 3540 l
-3236 3541 l
-3127 3541 l
-3125 3541 m
-3236 3541 l
-3236 3542 l
-3125 3542 l
-3124 3542 m
-3237 3542 l
-3237 3543 l
-3124 3543 l
-3123 3543 m
-3238 3543 l
-3238 3544 l
-3123 3544 l
-3122 3544 m
-3239 3544 l
-3239 3545 l
-3122 3545 l
-3121 3545 m
-3240 3545 l
-3240 3546 l
-3121 3546 l
-3119 3546 m
-3240 3546 l
-3240 3547 l
-3119 3547 l
-3118 3547 m
-3241 3547 l
-3241 3548 l
-3118 3548 l
-3117 3548 m
-3242 3548 l
-3242 3549 l
-3117 3549 l
-3116 3549 m
-3243 3549 l
-3243 3550 l
-3116 3550 l
-3115 3550 m
-3244 3550 l
-3244 3551 l
-3115 3551 l
-3113 3551 m
-3245 3551 l
-3245 3552 l
-3113 3552 l
-3112 3552 m
-3245 3552 l
-3245 3553 l
-3112 3553 l
-3111 3553 m
-3246 3553 l
-3246 3554 l
-3111 3554 l
-3110 3554 m
-3247 3554 l
-3247 3555 l
-3110 3555 l
-3108 3555 m
-3248 3555 l
-3248 3556 l
-3108 3556 l
-3107 3556 m
-3249 3556 l
-3249 3557 l
-3107 3557 l
-3106 3557 m
-3250 3557 l
-3250 3558 l
-3106 3558 l
-3105 3558 m
-3250 3558 l
-3250 3559 l
-3105 3559 l
-3104 3559 m
-3251 3559 l
-3251 3560 l
-3104 3560 l
-3102 3560 m
-3252 3560 l
-3252 3561 l
-3102 3561 l
-3101 3561 m
-3253 3561 l
-3253 3562 l
-3101 3562 l
-3100 3562 m
-3254 3562 l
-3254 3563 l
-3100 3563 l
-3099 3563 m
-3255 3563 l
-3255 3564 l
-3099 3564 l
-3098 3564 m
-3255 3564 l
-3255 3565 l
-3098 3565 l
-3098 3565 m
-3256 3565 l
-3256 3566 l
-3098 3566 l
-3098 3566 m
-3257 3566 l
-3257 3567 l
-3098 3567 l
-3099 3567 m
-3258 3567 l
-3258 3568 l
-3099 3568 l
-3100 3568 m
-3259 3568 l
-3259 3569 l
-3100 3569 l
-3101 3569 m
-3260 3569 l
-3260 3570 l
-3101 3570 l
-3102 3570 m
-3260 3570 l
-3260 3571 l
-3102 3571 l
-3102 3571 m
-3261 3571 l
-3261 3572 l
-3102 3572 l
-3103 3572 m
-3262 3572 l
-3262 3573 l
-3103 3573 l
-3104 3573 m
-3263 3573 l
-3263 3574 l
-3104 3574 l
-3105 3574 m
-3264 3574 l
-3264 3575 l
-3105 3575 l
-3106 3575 m
-3265 3575 l
-3265 3576 l
-3106 3576 l
-3107 3576 m
-3265 3576 l
-3265 3577 l
-3107 3577 l
-3107 3577 m
-3266 3577 l
-3266 3578 l
-3107 3578 l
-3108 3578 m
-3267 3578 l
-3267 3579 l
-3108 3579 l
-3109 3579 m
-3268 3579 l
-3268 3580 l
-3109 3580 l
-3110 3580 m
-3269 3580 l
-3269 3581 l
-3110 3581 l
-3111 3581 m
-3269 3581 l
-3269 3582 l
-3111 3582 l
-3111 3582 m
-3270 3582 l
-3270 3583 l
-3111 3583 l
-3112 3583 m
-3271 3583 l
-3271 3584 l
-3112 3584 l
-3113 3584 m
-3272 3584 l
-3272 3585 l
-3113 3585 l
-3114 3585 m
-3273 3585 l
-3273 3586 l
-3114 3586 l
-3115 3586 m
-3274 3586 l
-3274 3587 l
-3115 3587 l
-3116 3587 m
-3274 3587 l
-3274 3588 l
-3116 3588 l
-3116 3588 m
-3275 3588 l
-3275 3589 l
-3116 3589 l
-3117 3589 m
-3276 3589 l
-3276 3590 l
-3117 3590 l
-3118 3590 m
-3277 3590 l
-3277 3591 l
-3118 3591 l
-3119 3591 m
-3278 3591 l
-3278 3592 l
-3119 3592 l
-3120 3592 m
-3279 3592 l
-3279 3594 l
-3120 3594 l
-3121 3594 m
-3280 3594 l
-3280 3595 l
-3121 3595 l
-3122 3595 m
-3281 3595 l
-3281 3596 l
-3122 3596 l
-3123 3596 m
-3282 3596 l
-3282 3597 l
-3123 3597 l
-3124 3597 m
-3283 3597 l
-3283 3598 l
-3124 3598 l
-3125 3598 m
-3284 3598 l
-3284 3600 l
-3125 3600 l
-3126 3600 m
-3285 3600 l
-3285 3601 l
-3126 3601 l
-3127 3601 m
-3286 3601 l
-3286 3602 l
-3127 3602 l
-3128 3602 m
-3287 3602 l
-3287 3603 l
-3128 3603 l
-3129 3603 m
-3288 3603 l
-3288 3604 l
-3129 3604 l
-3130 3604 m
-3289 3604 l
-3289 3606 l
-3130 3606 l
-3131 3606 m
-3290 3606 l
-3290 3607 l
-3131 3607 l
-3132 3607 m
-3291 3607 l
-3291 3608 l
-3132 3608 l
-3133 3608 m
-3292 3608 l
-3292 3609 l
-3133 3609 l
-3134 3609 m
-3293 3609 l
-3293 3610 l
-3134 3610 l
-3134 3610 m
-3294 3610 l
-3294 3611 l
-3134 3611 l
-3135 3611 m
-3294 3611 l
-3294 3612 l
-3135 3612 l
-3136 3612 m
-3295 3612 l
-3295 3613 l
-3136 3613 l
-3137 3613 m
-3296 3613 l
-3296 3614 l
-3137 3614 l
-3138 3614 m
-3297 3614 l
-3297 3615 l
-3138 3615 l
-3139 3615 m
-3298 3615 l
-3298 3617 l
-3139 3617 l
-3140 3617 m
-3299 3617 l
-3299 3618 l
-3140 3618 l
-3141 3618 m
-3300 3618 l
-3300 3619 l
-3141 3619 l
-3142 3619 m
-3301 3619 l
-3301 3620 l
-3142 3620 l
-3143 3620 m
-3302 3620 l
-3302 3621 l
-3143 3621 l
-3143 3621 m
-3303 3621 l
-3303 3622 l
-3143 3622 l
-3144 3622 m
-3303 3622 l
-3303 3623 l
-3144 3623 l
-3145 3623 m
-3304 3623 l
-3304 3624 l
-3145 3624 l
-3146 3624 m
-3305 3624 l
-3305 3625 l
-3146 3625 l
-3147 3625 m
-3306 3625 l
-3306 3626 l
-3147 3626 l
-3148 3626 m
-3307 3626 l
-3307 3627 l
-3148 3627 l
-3148 3627 m
-3308 3627 l
-3308 3628 l
-3148 3628 l
-3149 3628 m
-3308 3628 l
-3308 3629 l
-3149 3629 l
-3150 3629 m
-3309 3629 l
-3309 3630 l
-3150 3630 l
-3151 3630 m
-3310 3630 l
-3310 3631 l
-3151 3631 l
-3152 3631 m
-3311 3631 l
-3311 3632 l
-3152 3632 l
-3152 3632 m
-3312 3632 l
-3312 3633 l
-3152 3633 l
-3153 3633 m
-3313 3633 l
-3313 3634 l
-3153 3634 l
-3154 3634 m
-3313 3634 l
-3313 3635 l
-3154 3635 l
-3155 3635 m
-3314 3635 l
-3314 3636 l
-3155 3636 l
-3156 3636 m
-3315 3636 l
-3315 3637 l
-3156 3637 l
-3157 3637 m
-3316 3637 l
-3316 3638 l
-3157 3638 l
-3157 3638 m
-3317 3638 l
-3317 3639 l
-3157 3639 l
-3158 3639 m
-3318 3639 l
-3318 3640 l
-3158 3640 l
-3159 3640 m
-3318 3640 l
-3318 3641 l
-3159 3641 l
-3160 3641 m
-3319 3641 l
-3319 3642 l
-3160 3642 l
-3161 3642 m
-3320 3642 l
-3320 3643 l
-3161 3643 l
-3162 3643 m
-3321 3643 l
-3321 3644 l
-3162 3644 l
-3162 3644 m
-3322 3644 l
-3322 3645 l
-3162 3645 l
-3163 3645 m
-3322 3645 l
-3322 3646 l
-3163 3646 l
-3164 3646 m
-3323 3646 l
-3323 3647 l
-3164 3647 l
-3165 3647 m
-3324 3647 l
-3324 3648 l
-3165 3648 l
-3166 3648 m
-3325 3648 l
-3325 3649 l
-3166 3649 l
-3166 3649 m
-3326 3649 l
-3326 3650 l
-3166 3650 l
-3167 3650 m
-3327 3650 l
-3327 3651 l
-3167 3651 l
-3168 3651 m
-3327 3651 l
-3327 3652 l
-3168 3652 l
-3169 3652 m
-3328 3652 l
-3328 3653 l
-3169 3653 l
-3170 3653 m
-3329 3653 l
-3329 3654 l
-3170 3654 l
-3171 3654 m
-3330 3654 l
-3330 3655 l
-3171 3655 l
-3171 3655 m
-3331 3655 l
-3331 3656 l
-3171 3656 l
-3172 3656 m
-3332 3656 l
-3332 3657 l
-3172 3657 l
-3173 3657 m
-3332 3657 l
-3332 3658 l
-3173 3658 l
-3174 3658 m
-3333 3658 l
-3333 3659 l
-3174 3659 l
-3175 3659 m
-3334 3659 l
-3334 3660 l
-3175 3660 l
-3175 3660 m
-3335 3660 l
-3335 3661 l
-3175 3661 l
-3176 3661 m
-3336 3661 l
-3336 3662 l
-3176 3662 l
-3177 3662 m
-3337 3662 l
-3337 3663 l
-3177 3663 l
-3178 3663 m
-3337 3663 l
-3337 3664 l
-3178 3664 l
-3179 3664 m
-3338 3664 l
-3338 3665 l
-3179 3665 l
-3180 3665 m
-3339 3665 l
-3339 3666 l
-3180 3666 l
-3180 3666 m
-3340 3666 l
-3340 3667 l
-3180 3667 l
-3181 3667 m
-3341 3667 l
-3341 3668 l
-3181 3668 l
-3182 3668 m
-3342 3668 l
-3342 3669 l
-3182 3669 l
-3183 3669 m
-3342 3669 l
-3342 3670 l
-3183 3670 l
-3184 3670 m
-3343 3670 l
-3343 3671 l
-3184 3671 l
-3184 3671 m
-3344 3671 l
-3344 3672 l
-3184 3672 l
-3185 3672 m
-3345 3672 l
-3345 3673 l
-3185 3673 l
-3186 3673 m
-3346 3673 l
-3346 3674 l
-3186 3674 l
-3187 3674 m
-3347 3674 l
-3347 3675 l
-3187 3675 l
-3188 3675 m
-3347 3675 l
-3347 3676 l
-3188 3676 l
-3189 3676 m
-3348 3676 l
-3348 3677 l
-3189 3677 l
-3189 3677 m
-3349 3677 l
-3349 3678 l
-3189 3678 l
-3190 3678 m
-3350 3678 l
-3350 3679 l
-3190 3679 l
-3191 3679 m
-3351 3679 l
-3351 3680 l
-3191 3680 l
-3192 3680 m
-3351 3680 l
-3351 3681 l
-3192 3681 l
-3193 3681 m
-3352 3681 l
-3352 3682 l
-3193 3682 l
-3194 3682 m
-3353 3682 l
-3353 3683 l
-3194 3683 l
-3194 3683 m
-3354 3683 l
-3354 3684 l
-3194 3684 l
-3195 3684 m
-3355 3684 l
-3355 3685 l
-3195 3685 l
-3196 3685 m
-3356 3685 l
-3356 3686 l
-3196 3686 l
-3197 3686 m
-3356 3686 l
-3356 3687 l
-3197 3687 l
-3198 3687 m
-3357 3687 l
-3357 3688 l
-3198 3688 l
-3198 3688 m
-3358 3688 l
-3358 3689 l
-3198 3689 l
-3199 3689 m
-3359 3689 l
-3359 3690 l
-3199 3690 l
-3200 3690 m
-3360 3690 l
-3360 3691 l
-3200 3691 l
-3201 3691 m
-3361 3691 l
-3361 3692 l
-3201 3692 l
-3202 3692 m
-3361 3692 l
-3361 3693 l
-3202 3693 l
-3203 3693 m
-3362 3693 l
-3362 3694 l
-3203 3694 l
-3203 3694 m
-3363 3694 l
-3363 3695 l
-3203 3695 l
-3204 3695 m
-3364 3695 l
-3364 3696 l
-3204 3696 l
-3205 3696 m
-3365 3696 l
-3365 3697 l
-3205 3697 l
-3206 3697 m
-3366 3697 l
-3366 3698 l
-3206 3698 l
-3207 3698 m
-3366 3698 l
-3366 3699 l
-3207 3699 l
-3207 3699 m
-3367 3699 l
-3367 3700 l
-3207 3700 l
-3208 3700 m
-3368 3700 l
-3368 3701 l
-3208 3701 l
-3209 3701 m
-3369 3701 l
-3369 3702 l
-3209 3702 l
-3210 3702 m
-3370 3702 l
-3370 3703 l
-3210 3703 l
-3211 3703 m
-3371 3703 l
-3371 3704 l
-3211 3704 l
-3212 3704 m
-3371 3704 l
-3371 3705 l
-3212 3705 l
-3212 3705 m
-3372 3705 l
-3372 3706 l
-3212 3706 l
-3213 3706 m
-3373 3706 l
-3373 3707 l
-3213 3707 l
-3214 3707 m
-3374 3707 l
-3374 3708 l
-3214 3708 l
-3215 3708 m
-3375 3708 l
-3375 3709 l
-3215 3709 l
-3216 3709 m
-3375 3709 l
-3375 3710 l
-3216 3710 l
-3216 3710 m
-3375 3710 l
-3375 3711 l
-3216 3711 l
-3217 3711 m
-3374 3711 l
-3374 3712 l
-3217 3712 l
-3218 3712 m
-3373 3712 l
-3373 3713 l
-3218 3713 l
-3219 3713 m
-3372 3713 l
-3372 3714 l
-3219 3714 l
-3220 3714 m
-3371 3714 l
-3371 3715 l
-3220 3715 l
-3221 3715 m
-3369 3715 l
-3369 3716 l
-3221 3716 l
-3221 3716 m
-3368 3716 l
-3368 3717 l
-3221 3717 l
-3222 3717 m
-3367 3717 l
-3367 3718 l
-3222 3718 l
-3223 3718 m
-3366 3718 l
-3366 3719 l
-3223 3719 l
-3224 3719 m
-3365 3719 l
-3365 3720 l
-3224 3720 l
-3225 3720 m
-3363 3720 l
-3363 3721 l
-3225 3721 l
-3226 3721 m
-3362 3721 l
-3362 3722 l
-3226 3722 l
-3226 3722 m
-3361 3722 l
-3361 3723 l
-3226 3723 l
-3227 3723 m
-3360 3723 l
-3360 3724 l
-3227 3724 l
-3228 3724 m
-3359 3724 l
-3359 3725 l
-3228 3725 l
-3229 3725 m
-3357 3725 l
-3357 3726 l
-3229 3726 l
-3230 3726 m
-3356 3726 l
-3356 3727 l
-3230 3727 l
-3230 3727 m
-3355 3727 l
-3355 3728 l
-3230 3728 l
-3231 3728 m
-3354 3728 l
-3354 3729 l
-3231 3729 l
-3232 3729 m
-3353 3729 l
-3353 3730 l
-3232 3730 l
-3233 3730 m
-3351 3730 l
-3351 3731 l
-3233 3731 l
-3234 3731 m
-3350 3731 l
-3350 3732 l
-3234 3732 l
-3235 3732 m
-3349 3732 l
-3349 3733 l
-3235 3733 l
-3235 3733 m
-3348 3733 l
-3348 3734 l
-3235 3734 l
-3236 3734 m
-3347 3734 l
-3347 3735 l
-3236 3735 l
-3237 3735 m
-3345 3735 l
-3345 3736 l
-3237 3736 l
-3238 3736 m
-3344 3736 l
-3344 3737 l
-3238 3737 l
-3239 3737 m
-3343 3737 l
-3343 3738 l
-3239 3738 l
-3239 3738 m
-3342 3738 l
-3342 3739 l
-3239 3739 l
-3240 3739 m
-3341 3739 l
-3341 3740 l
-3240 3740 l
-3241 3740 m
-3339 3740 l
-3339 3741 l
-3241 3741 l
-3242 3741 m
-3338 3741 l
-3338 3742 l
-3242 3742 l
-3243 3742 m
-3337 3742 l
-3337 3743 l
-3243 3743 l
-3244 3743 m
-3336 3743 l
-3336 3744 l
-3244 3744 l
-3244 3744 m
-3335 3744 l
-3335 3745 l
-3244 3745 l
-3245 3745 m
-3333 3745 l
-3333 3746 l
-3245 3746 l
-3246 3746 m
-3332 3746 l
-3332 3747 l
-3246 3747 l
-3247 3747 m
-3331 3747 l
-3331 3748 l
-3247 3748 l
-3248 3748 m
-3330 3748 l
-3330 3749 l
-3248 3749 l
-3248 3749 m
-3328 3749 l
-3328 3750 l
-3248 3750 l
-3249 3750 m
-3327 3750 l
-3327 3751 l
-3249 3751 l
-3250 3751 m
-3326 3751 l
-3326 3752 l
-3250 3752 l
-3251 3752 m
-3325 3752 l
-3325 3753 l
-3251 3753 l
-3252 3753 m
-3324 3753 l
-3324 3754 l
-3252 3754 l
-3253 3754 m
-3322 3754 l
-3322 3755 l
-3253 3755 l
-3253 3755 m
-3321 3755 l
-3321 3756 l
-3253 3756 l
-3254 3756 m
-3320 3756 l
-3320 3757 l
-3254 3757 l
-3255 3757 m
-3319 3757 l
-3319 3758 l
-3255 3758 l
-3256 3758 m
-3318 3758 l
-3318 3759 l
-3256 3759 l
-3257 3759 m
-3316 3759 l
-3316 3760 l
-3257 3760 l
-3258 3760 m
-3315 3760 l
-3315 3761 l
-3258 3761 l
-3258 3761 m
-3314 3761 l
-3314 3762 l
-3258 3762 l
-3259 3762 m
-3313 3762 l
-3313 3763 l
-3259 3763 l
-3260 3763 m
-3312 3763 l
-3312 3764 l
-3260 3764 l
-3261 3764 m
-3310 3764 l
-3310 3765 l
-3261 3765 l
-3262 3765 m
-3309 3765 l
-3309 3766 l
-3262 3766 l
-3262 3766 m
-3308 3766 l
-3308 3767 l
-3262 3767 l
-3263 3767 m
-3307 3767 l
-3307 3768 l
-3263 3768 l
-3264 3768 m
-3306 3768 l
-3306 3769 l
-3264 3769 l
-3265 3769 m
-3304 3769 l
-3304 3770 l
-3265 3770 l
-3266 3770 m
-3303 3770 l
-3303 3771 l
-3266 3771 l
-3267 3771 m
-3302 3771 l
-3302 3772 l
-3267 3772 l
-3267 3772 m
-3301 3772 l
-3301 3773 l
-3267 3773 l
-3268 3773 m
-3300 3773 l
-3300 3774 l
-3268 3774 l
-3269 3774 m
-3298 3774 l
-3298 3775 l
-3269 3775 l
-3270 3775 m
-3297 3775 l
-3297 3776 l
-3270 3776 l
-3271 3776 m
-3296 3776 l
-3296 3777 l
-3271 3777 l
-3271 3777 m
-3295 3777 l
-3295 3778 l
-3271 3778 l
-3272 3778 m
-3294 3778 l
-3294 3779 l
-3272 3779 l
-3273 3779 m
-3292 3779 l
-3292 3780 l
-3273 3780 l
-3274 3780 m
-3291 3780 l
-3291 3781 l
-3274 3781 l
-3275 3781 m
-3290 3781 l
-3290 3782 l
-3275 3782 l
-3276 3782 m
-3289 3782 l
-3289 3783 l
-3276 3783 l
-3276 3783 m
-3288 3783 l
-3288 3784 l
-3276 3784 l
-3277 3784 m
-3286 3784 l
-3286 3785 l
-3277 3785 l
-3278 3785 m
-3285 3785 l
-3285 3786 l
-3278 3786 l
-3279 3786 m
-3284 3786 l
-3284 3787 l
-3279 3787 l
-3280 3787 m
-3283 3787 l
-3283 3788 l
-3280 3788 l
-Y
-3191.3 3488.2 m
-3098 3565 l
-3281 3788 l
-3375 3710 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3163 3539 m
-3211 3597 l
-S
-3235 3685 m
-3226 3687 l
-3214 3680 l
-3209 3674 l
-3204 3662 l
-3209 3647 l
-3222 3631 l
-3238 3617 l
-3254 3610 l
-3266 3611 l
-3277 3618 l
-3279 3621 l
-3284 3634 l
-3283 3645 l
-3276 3657 l
-3273 3659 l
-3260 3664 l
-3249 3663 l
-3238 3656 l
-3235 3653 l
-3230 3640 l
-3231 3629 l
-3238 3617 l
-S
-3260 3735 m
-3255 3723 l
-3259 3708 l
-3273 3692 l
-3282 3684 l
-3301 3674 l
-3316 3672 l
-3327 3679 l
-3333 3686 l
-3337 3698 l
-3333 3712 l
-3320 3729 l
-3310 3737 l
-3291 3747 l
-3276 3749 l
-3265 3742 l
-3260 3735 l
-S
-1 g
-3431 3818 m
-3434 3818 l
-3434 3819 l
-3431 3819 l
-3427 3819 m
-3435 3819 l
-3435 3820 l
-3427 3820 l
-3424 3820 m
-3435 3820 l
-3435 3821 l
-3424 3821 l
-3421 3821 m
-3435 3821 l
-3435 3822 l
-3421 3822 l
-3417 3822 m
-3436 3822 l
-3436 3823 l
-3417 3823 l
-3414 3823 m
-3436 3823 l
-3436 3824 l
-3414 3824 l
-3411 3824 m
-3436 3824 l
-3436 3825 l
-3411 3825 l
-3407 3825 m
-3437 3825 l
-3437 3826 l
-3407 3826 l
-3404 3826 m
-3437 3826 l
-3437 3827 l
-3404 3827 l
-3401 3827 m
-3437 3827 l
-3437 3828 l
-3401 3828 l
-3397 3828 m
-3437 3828 l
-3437 3829 l
-3397 3829 l
-3394 3829 m
-3438 3829 l
-3438 3830 l
-3394 3830 l
-3391 3830 m
-3438 3830 l
-3438 3831 l
-3391 3831 l
-3387 3831 m
-3438 3831 l
-3438 3832 l
-3387 3832 l
-3384 3832 m
-3439 3832 l
-3439 3833 l
-3384 3833 l
-3381 3833 m
-3439 3833 l
-3439 3834 l
-3381 3834 l
-3377 3834 m
-3439 3834 l
-3439 3835 l
-3377 3835 l
-3374 3835 m
-3440 3835 l
-3440 3836 l
-3374 3836 l
-3371 3836 m
-3440 3836 l
-3440 3837 l
-3371 3837 l
-3367 3837 m
-3440 3837 l
-3440 3838 l
-3367 3838 l
-3364 3838 m
-3440 3838 l
-3440 3839 l
-3364 3839 l
-3361 3839 m
-3441 3839 l
-3441 3840 l
-3361 3840 l
-3357 3840 m
-3441 3840 l
-3441 3841 l
-3357 3841 l
-3354 3841 m
-3441 3841 l
-3441 3842 l
-3354 3842 l
-3351 3842 m
-3442 3842 l
-3442 3843 l
-3351 3843 l
-3347 3843 m
-3442 3843 l
-3442 3844 l
-3347 3844 l
-3344 3844 m
-3442 3844 l
-3442 3845 l
-3344 3845 l
-3341 3845 m
-3442 3845 l
-3442 3846 l
-3341 3846 l
-3337 3846 m
-3443 3846 l
-3443 3847 l
-3337 3847 l
-3334 3847 m
-3443 3847 l
-3443 3848 l
-3334 3848 l
-3331 3848 m
-3443 3848 l
-3443 3849 l
-3331 3849 l
-3327 3849 m
-3444 3849 l
-3444 3850 l
-3327 3850 l
-3324 3850 m
-3444 3850 l
-3444 3851 l
-3324 3851 l
-3321 3851 m
-3444 3851 l
-3444 3852 l
-3321 3852 l
-3318 3852 m
-3445 3852 l
-3445 3853 l
-3318 3853 l
-3318 3853 m
-3445 3853 l
-3445 3856 l
-3318 3856 l
-3318 3856 m
-3446 3856 l
-3446 3857 l
-3318 3857 l
-3319 3857 m
-3446 3857 l
-3446 3859 l
-3319 3859 l
-3319 3859 m
-3447 3859 l
-3447 3860 l
-3319 3860 l
-3320 3860 m
-3447 3860 l
-3447 3862 l
-3320 3862 l
-3320 3862 m
-3448 3862 l
-3448 3864 l
-3320 3864 l
-3321 3864 m
-3448 3864 l
-3448 3866 l
-3321 3866 l
-3321 3866 m
-3449 3866 l
-3449 3867 l
-3321 3867 l
-3322 3867 m
-3449 3867 l
-3449 3869 l
-3322 3869 l
-3322 3869 m
-3450 3869 l
-3450 3870 l
-3322 3870 l
-3323 3870 m
-3450 3870 l
-3450 3872 l
-3323 3872 l
-3323 3872 m
-3451 3872 l
-3451 3874 l
-3323 3874 l
-3324 3874 m
-3451 3874 l
-3451 3876 l
-3324 3876 l
-3324 3876 m
-3452 3876 l
-3452 3877 l
-3324 3877 l
-3325 3877 m
-3452 3877 l
-3452 3879 l
-3325 3879 l
-3325 3879 m
-3453 3879 l
-3453 3880 l
-3325 3880 l
-3326 3880 m
-3453 3880 l
-3453 3882 l
-3326 3882 l
-3326 3882 m
-3454 3882 l
-3454 3884 l
-3326 3884 l
-3327 3884 m
-3454 3884 l
-3454 3886 l
-3327 3886 l
-3327 3886 m
-3455 3886 l
-3455 3887 l
-3327 3887 l
-3328 3887 m
-3455 3887 l
-3455 3889 l
-3328 3889 l
-3328 3889 m
-3456 3889 l
-3456 3891 l
-3328 3891 l
-3329 3891 m
-3456 3891 l
-3456 3892 l
-3329 3892 l
-3329 3892 m
-3457 3892 l
-3457 3894 l
-3329 3894 l
-3330 3894 m
-3457 3894 l
-3457 3896 l
-3330 3896 l
-3330 3896 m
-3458 3896 l
-3458 3897 l
-3330 3897 l
-3331 3897 m
-3458 3897 l
-3458 3899 l
-3331 3899 l
-3331 3899 m
-3459 3899 l
-3459 3901 l
-3331 3901 l
-3332 3901 m
-3459 3901 l
-3459 3902 l
-3332 3902 l
-3332 3902 m
-3460 3902 l
-3460 3904 l
-3332 3904 l
-3333 3904 m
-3460 3904 l
-3460 3906 l
-3333 3906 l
-3333 3906 m
-3461 3906 l
-3461 3907 l
-3333 3907 l
-3334 3907 m
-3461 3907 l
-3461 3909 l
-3334 3909 l
-3334 3909 m
-3462 3909 l
-3462 3911 l
-3334 3911 l
-3335 3911 m
-3462 3911 l
-3462 3913 l
-3335 3913 l
-3335 3913 m
-3463 3913 l
-3463 3914 l
-3335 3914 l
-3336 3914 m
-3463 3914 l
-3463 3916 l
-3336 3916 l
-3336 3916 m
-3464 3916 l
-3464 3917 l
-3336 3917 l
-3337 3917 m
-3464 3917 l
-3464 3919 l
-3337 3919 l
-3337 3919 m
-3465 3919 l
-3465 3921 l
-3337 3921 l
-3338 3921 m
-3465 3921 l
-3465 3923 l
-3338 3923 l
-3338 3923 m
-3466 3923 l
-3466 3924 l
-3338 3924 l
-3339 3924 m
-3466 3924 l
-3466 3926 l
-3339 3926 l
-3339 3926 m
-3467 3926 l
-3467 3928 l
-3339 3928 l
-3340 3928 m
-3467 3928 l
-3467 3929 l
-3340 3929 l
-3340 3929 m
-3468 3929 l
-3468 3931 l
-3340 3931 l
-3341 3931 m
-3468 3931 l
-3468 3933 l
-3341 3933 l
-3341 3933 m
-3469 3933 l
-3469 3934 l
-3341 3934 l
-3342 3934 m
-3469 3934 l
-3469 3936 l
-3342 3936 l
-3342 3936 m
-3470 3936 l
-3470 3938 l
-3342 3938 l
-3343 3938 m
-3470 3938 l
-3470 3939 l
-3343 3939 l
-3343 3939 m
-3471 3939 l
-3471 3941 l
-3343 3941 l
-3344 3941 m
-3471 3941 l
-3471 3943 l
-3344 3943 l
-3344 3943 m
-3472 3943 l
-3472 3944 l
-3344 3944 l
-3345 3944 m
-3472 3944 l
-3472 3946 l
-3345 3946 l
-3345 3946 m
-3473 3946 l
-3473 3948 l
-3345 3948 l
-3346 3948 m
-3473 3948 l
-3473 3949 l
-3346 3949 l
-3346 3949 m
-3474 3949 l
-3474 3951 l
-3346 3951 l
-3347 3951 m
-3474 3951 l
-3474 3953 l
-3347 3953 l
-3347 3953 m
-3475 3953 l
-3475 3954 l
-3347 3954 l
-3348 3954 m
-3475 3954 l
-3475 3956 l
-3348 3956 l
-3348 3956 m
-3476 3956 l
-3476 3958 l
-3348 3958 l
-3349 3958 m
-3476 3958 l
-3476 3959 l
-3349 3959 l
-3349 3959 m
-3477 3959 l
-3477 3961 l
-3349 3961 l
-3350 3961 m
-3477 3961 l
-3477 3963 l
-3350 3963 l
-3350 3963 m
-3478 3963 l
-3478 3965 l
-3350 3965 l
-3351 3965 m
-3478 3965 l
-3478 3966 l
-3351 3966 l
-3351 3966 m
-3479 3966 l
-3479 3968 l
-3351 3968 l
-3352 3968 m
-3479 3968 l
-3479 3970 l
-3352 3970 l
-3352 3970 m
-3480 3970 l
-3480 3971 l
-3352 3971 l
-3353 3971 m
-3480 3971 l
-3480 3973 l
-3353 3973 l
-3353 3973 m
-3481 3973 l
-3481 3975 l
-3353 3975 l
-3354 3975 m
-3481 3975 l
-3481 3976 l
-3354 3976 l
-3354 3976 m
-3482 3976 l
-3482 3978 l
-3354 3978 l
-3355 3978 m
-3482 3978 l
-3482 3980 l
-3355 3980 l
-3355 3980 m
-3483 3980 l
-3483 3981 l
-3355 3981 l
-3356 3981 m
-3483 3981 l
-3483 3983 l
-3356 3983 l
-3356 3983 m
-3484 3983 l
-3484 3985 l
-3356 3985 l
-3357 3985 m
-3484 3985 l
-3484 3986 l
-3357 3986 l
-3357 3986 m
-3485 3986 l
-3485 3988 l
-3357 3988 l
-3358 3988 m
-3485 3988 l
-3485 3990 l
-3358 3990 l
-3358 3990 m
-3486 3990 l
-3486 3991 l
-3358 3991 l
-3359 3991 m
-3486 3991 l
-3486 3993 l
-3359 3993 l
-3359 3993 m
-3487 3993 l
-3487 3995 l
-3359 3995 l
-3360 3995 m
-3487 3995 l
-3487 3996 l
-3360 3996 l
-3360 3996 m
-3488 3996 l
-3488 3998 l
-3360 3998 l
-3361 3998 m
-3488 3998 l
-3488 4000 l
-3361 4000 l
-3361 4000 m
-3489 4000 l
-3489 4002 l
-3361 4002 l
-3362 4002 m
-3489 4002 l
-3489 4003 l
-3362 4003 l
-3362 4003 m
-3490 4003 l
-3490 4005 l
-3362 4005 l
-3363 4005 m
-3490 4005 l
-3490 4006 l
-3363 4006 l
-3363 4006 m
-3491 4006 l
-3491 4008 l
-3363 4008 l
-3364 4008 m
-3491 4008 l
-3491 4010 l
-3364 4010 l
-3364 4010 m
-3492 4010 l
-3492 4012 l
-3364 4012 l
-3365 4012 m
-3492 4012 l
-3492 4013 l
-3365 4013 l
-3365 4013 m
-3493 4013 l
-3493 4015 l
-3365 4015 l
-3366 4015 m
-3493 4015 l
-3493 4016 l
-3366 4016 l
-3366 4016 m
-3494 4016 l
-3494 4018 l
-3366 4018 l
-3367 4018 m
-3494 4018 l
-3494 4020 l
-3367 4020 l
-3367 4020 m
-3495 4020 l
-3495 4022 l
-3367 4022 l
-3368 4022 m
-3495 4022 l
-3495 4023 l
-3368 4023 l
-3368 4023 m
-3496 4023 l
-3496 4025 l
-3368 4025 l
-3369 4025 m
-3496 4025 l
-3496 4026 l
-3369 4026 l
-3369 4026 m
-3497 4026 l
-3497 4029 l
-3369 4029 l
-3370 4029 m
-3497 4029 l
-3497 4030 l
-3370 4030 l
-3370 4030 m
-3498 4030 l
-3498 4032 l
-3370 4032 l
-3371 4032 m
-3498 4032 l
-3498 4033 l
-3371 4033 l
-3371 4033 m
-3499 4033 l
-3499 4035 l
-3371 4035 l
-3372 4035 m
-3499 4035 l
-3499 4037 l
-3372 4037 l
-3372 4037 m
-3500 4037 l
-3500 4039 l
-3372 4039 l
-3373 4039 m
-3500 4039 l
-3500 4040 l
-3373 4040 l
-3373 4040 m
-3501 4040 l
-3501 4042 l
-3373 4042 l
-3374 4042 m
-3501 4042 l
-3501 4043 l
-3374 4043 l
-3374 4043 m
-3502 4043 l
-3502 4045 l
-3374 4045 l
-3375 4045 m
-3502 4045 l
-3502 4047 l
-3375 4047 l
-3375 4047 m
-3503 4047 l
-3503 4049 l
-3375 4049 l
-3376 4049 m
-3503 4049 l
-3503 4050 l
-3376 4050 l
-3376 4050 m
-3504 4050 l
-3504 4052 l
-3376 4052 l
-3377 4052 m
-3504 4052 l
-3504 4053 l
-3377 4053 l
-3377 4053 m
-3505 4053 l
-3505 4055 l
-3377 4055 l
-3378 4055 m
-3505 4055 l
-3505 4057 l
-3378 4057 l
-3378 4057 m
-3506 4057 l
-3506 4059 l
-3378 4059 l
-3379 4059 m
-3506 4059 l
-3506 4060 l
-3379 4060 l
-3379 4060 m
-3507 4060 l
-3507 4062 l
-3379 4062 l
-3380 4062 m
-3507 4062 l
-3507 4063 l
-3380 4063 l
-3380 4063 m
-3508 4063 l
-3508 4066 l
-3380 4066 l
-3381 4066 m
-3508 4066 l
-3508 4067 l
-3381 4067 l
-3381 4067 m
-3509 4067 l
-3509 4069 l
-3381 4069 l
-3382 4069 m
-3509 4069 l
-3509 4070 l
-3382 4070 l
-3382 4070 m
-3510 4070 l
-3510 4072 l
-3382 4072 l
-3383 4072 m
-3510 4072 l
-3510 4073 l
-3383 4073 l
-3383 4073 m
-3511 4073 l
-3511 4076 l
-3383 4076 l
-3384 4076 m
-3511 4076 l
-3511 4077 l
-3384 4077 l
-3384 4077 m
-3512 4077 l
-3512 4079 l
-3384 4079 l
-3385 4079 m
-3512 4079 l
-3512 4080 l
-3385 4080 l
-3385 4080 m
-3513 4080 l
-3513 4082 l
-3385 4082 l
-3386 4082 m
-3513 4082 l
-3513 4083 l
-3386 4083 l
-3386 4083 m
-3514 4083 l
-3514 4086 l
-3386 4086 l
-3387 4086 m
-3514 4086 l
-3514 4087 l
-3387 4087 l
-3387 4087 m
-3515 4087 l
-3515 4089 l
-3387 4089 l
-3388 4089 m
-3515 4089 l
-3515 4090 l
-3388 4090 l
-3388 4090 m
-3516 4090 l
-3516 4092 l
-3388 4092 l
-3389 4092 m
-3516 4092 l
-3516 4093 l
-3389 4093 l
-3389 4093 m
-3517 4093 l
-3517 4094 l
-3389 4094 l
-3389 4094 m
-3516 4094 l
-3516 4095 l
-3389 4095 l
-3389 4095 m
-3513 4095 l
-3513 4096 l
-3389 4096 l
-3390 4096 m
-3510 4096 l
-3510 4097 l
-3390 4097 l
-3390 4097 m
-3507 4097 l
-3507 4098 l
-3390 4098 l
-3390 4098 m
-3503 4098 l
-3503 4099 l
-3390 4099 l
-3391 4099 m
-3500 4099 l
-3500 4100 l
-3391 4100 l
-3391 4100 m
-3497 4100 l
-3497 4101 l
-3391 4101 l
-3391 4101 m
-3493 4101 l
-3493 4102 l
-3391 4102 l
-3391 4102 m
-3490 4102 l
-3490 4103 l
-3391 4103 l
-3392 4103 m
-3487 4103 l
-3487 4104 l
-3392 4104 l
-3392 4104 m
-3483 4104 l
-3483 4105 l
-3392 4105 l
-3392 4105 m
-3480 4105 l
-3480 4106 l
-3392 4106 l
-3393 4106 m
-3477 4106 l
-3477 4107 l
-3393 4107 l
-3393 4107 m
-3473 4107 l
-3473 4108 l
-3393 4108 l
-3393 4108 m
-3470 4108 l
-3470 4109 l
-3393 4109 l
-3394 4109 m
-3467 4109 l
-3467 4110 l
-3394 4110 l
-3394 4110 m
-3463 4110 l
-3463 4111 l
-3394 4111 l
-3394 4111 m
-3460 4111 l
-3460 4112 l
-3394 4112 l
-3394 4112 m
-3457 4112 l
-3457 4113 l
-3394 4113 l
-3395 4113 m
-3454 4113 l
-3454 4114 l
-3395 4114 l
-3395 4114 m
-3450 4114 l
-3450 4115 l
-3395 4115 l
-3395 4115 m
-3447 4115 l
-3447 4116 l
-3395 4116 l
-3396 4116 m
-3444 4116 l
-3444 4117 l
-3396 4117 l
-3396 4117 m
-3440 4117 l
-3440 4118 l
-3396 4118 l
-3396 4118 m
-3437 4118 l
-3437 4119 l
-3396 4119 l
-3397 4119 m
-3434 4119 l
-3434 4120 l
-3397 4120 l
-3397 4120 m
-3430 4120 l
-3430 4121 l
-3397 4121 l
-3397 4121 m
-3427 4121 l
-3427 4122 l
-3397 4122 l
-3397 4122 m
-3424 4122 l
-3424 4123 l
-3397 4123 l
-3398 4123 m
-3420 4123 l
-3420 4124 l
-3398 4124 l
-3398 4124 m
-3417 4124 l
-3417 4125 l
-3398 4125 l
-3398 4125 m
-3414 4125 l
-3414 4126 l
-3398 4126 l
-3399 4126 m
-3410 4126 l
-3410 4127 l
-3399 4127 l
-3399 4127 m
-3407 4127 l
-3407 4128 l
-3399 4128 l
-3399 4128 m
-3404 4128 l
-3404 4129 l
-3399 4129 l
-Y
-3433.7 3818.2 m
-3318 3853 l
-3400 4129 l
-3516 4094 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3388 3854 m
-3409 3926 l
-S
-3372 3976 m
-3385 4020 l
-3410 3987 l
-3414 3999 l
-3420 4005 l
-3425 4008 l
-3438 4009 l
-3446 4006 l
-3457 3999 l
-3463 3988 l
-3463 3975 l
-3460 3963 l
-3452 3952 l
-3447 3949 l
-3438 3948 l
-S
-3401 4072 m
-3401 4059 l
-3411 4047 l
-3430 4037 l
-3442 4034 l
-3463 4032 l
-3477 4036 l
-3485 4047 l
-3487 4055 l
-3487 4068 l
-3477 4080 l
-3458 4090 l
-3446 4093 l
-3425 4095 l
-3411 4091 l
-3403 4080 l
-3401 4072 l
-S
-1 g
-3282 4627 m
-3285 4627 l
-3285 4628 l
-3282 4628 l
-3281 4628 m
-3286 4628 l
-3286 4629 l
-3281 4629 l
-3280 4629 m
-3287 4629 l
-3287 4630 l
-3280 4630 l
-3279 4630 m
-3288 4630 l
-3288 4631 l
-3279 4631 l
-3278 4631 m
-3290 4631 l
-3290 4632 l
-3278 4632 l
-3277 4632 m
-3291 4632 l
-3291 4633 l
-3277 4633 l
-3277 4633 m
-3292 4633 l
-3292 4634 l
-3277 4634 l
-3276 4634 m
-3293 4634 l
-3293 4635 l
-3276 4635 l
-3275 4635 m
-3294 4635 l
-3294 4636 l
-3275 4636 l
-3274 4636 m
-3296 4636 l
-3296 4637 l
-3274 4637 l
-3273 4637 m
-3297 4637 l
-3297 4638 l
-3273 4638 l
-3272 4638 m
-3298 4638 l
-3298 4639 l
-3272 4639 l
-3272 4639 m
-3299 4639 l
-3299 4640 l
-3272 4640 l
-3271 4640 m
-3300 4640 l
-3300 4641 l
-3271 4641 l
-3270 4641 m
-3302 4641 l
-3302 4642 l
-3270 4642 l
-3269 4642 m
-3303 4642 l
-3303 4643 l
-3269 4643 l
-3268 4643 m
-3304 4643 l
-3304 4644 l
-3268 4644 l
-3267 4644 m
-3305 4644 l
-3305 4645 l
-3267 4645 l
-3267 4645 m
-3306 4645 l
-3306 4646 l
-3267 4646 l
-3266 4646 m
-3308 4646 l
-3308 4647 l
-3266 4647 l
-3265 4647 m
-3309 4647 l
-3309 4648 l
-3265 4648 l
-3264 4648 m
-3310 4648 l
-3310 4649 l
-3264 4649 l
-3263 4649 m
-3311 4649 l
-3311 4650 l
-3263 4650 l
-3262 4650 m
-3312 4650 l
-3312 4651 l
-3262 4651 l
-3262 4651 m
-3314 4651 l
-3314 4652 l
-3262 4652 l
-3261 4652 m
-3315 4652 l
-3315 4653 l
-3261 4653 l
-3260 4653 m
-3316 4653 l
-3316 4654 l
-3260 4654 l
-3259 4654 m
-3317 4654 l
-3317 4655 l
-3259 4655 l
-3258 4655 m
-3318 4655 l
-3318 4656 l
-3258 4656 l
-3257 4656 m
-3320 4656 l
-3320 4657 l
-3257 4657 l
-3257 4657 m
-3321 4657 l
-3321 4658 l
-3257 4658 l
-3256 4658 m
-3322 4658 l
-3322 4659 l
-3256 4659 l
-3255 4659 m
-3323 4659 l
-3323 4660 l
-3255 4660 l
-3254 4660 m
-3324 4660 l
-3324 4661 l
-3254 4661 l
-3253 4661 m
-3326 4661 l
-3326 4662 l
-3253 4662 l
-3252 4662 m
-3327 4662 l
-3327 4663 l
-3252 4663 l
-3252 4663 m
-3328 4663 l
-3328 4664 l
-3252 4664 l
-3251 4664 m
-3329 4664 l
-3329 4665 l
-3251 4665 l
-3250 4665 m
-3330 4665 l
-3330 4666 l
-3250 4666 l
-3249 4666 m
-3332 4666 l
-3332 4667 l
-3249 4667 l
-3248 4667 m
-3333 4667 l
-3333 4668 l
-3248 4668 l
-3247 4668 m
-3334 4668 l
-3334 4669 l
-3247 4669 l
-3247 4669 m
-3335 4669 l
-3335 4670 l
-3247 4670 l
-3246 4670 m
-3336 4670 l
-3336 4671 l
-3246 4671 l
-3245 4671 m
-3338 4671 l
-3338 4672 l
-3245 4672 l
-3244 4672 m
-3339 4672 l
-3339 4673 l
-3244 4673 l
-3243 4673 m
-3340 4673 l
-3340 4674 l
-3243 4674 l
-3242 4674 m
-3341 4674 l
-3341 4675 l
-3242 4675 l
-3241 4675 m
-3342 4675 l
-3342 4676 l
-3241 4676 l
-3241 4676 m
-3344 4676 l
-3344 4677 l
-3241 4677 l
-3240 4677 m
-3345 4677 l
-3345 4678 l
-3240 4678 l
-3239 4678 m
-3346 4678 l
-3346 4679 l
-3239 4679 l
-3238 4679 m
-3347 4679 l
-3347 4680 l
-3238 4680 l
-3237 4680 m
-3348 4680 l
-3348 4681 l
-3237 4681 l
-3236 4681 m
-3350 4681 l
-3350 4682 l
-3236 4682 l
-3236 4682 m
-3351 4682 l
-3351 4683 l
-3236 4683 l
-3235 4683 m
-3352 4683 l
-3352 4684 l
-3235 4684 l
-3234 4684 m
-3353 4684 l
-3353 4685 l
-3234 4685 l
-3233 4685 m
-3354 4685 l
-3354 4686 l
-3233 4686 l
-3232 4686 m
-3356 4686 l
-3356 4687 l
-3232 4687 l
-3231 4687 m
-3357 4687 l
-3357 4688 l
-3231 4688 l
-3231 4688 m
-3358 4688 l
-3358 4689 l
-3231 4689 l
-3230 4689 m
-3359 4689 l
-3359 4690 l
-3230 4690 l
-3229 4690 m
-3360 4690 l
-3360 4691 l
-3229 4691 l
-3228 4691 m
-3362 4691 l
-3362 4692 l
-3228 4692 l
-3227 4692 m
-3363 4692 l
-3363 4693 l
-3227 4693 l
-3226 4693 m
-3364 4693 l
-3364 4694 l
-3226 4694 l
-3226 4694 m
-3365 4694 l
-3365 4695 l
-3226 4695 l
-3225 4695 m
-3366 4695 l
-3366 4696 l
-3225 4696 l
-3224 4696 m
-3368 4696 l
-3368 4697 l
-3224 4697 l
-3223 4697 m
-3369 4697 l
-3369 4698 l
-3223 4698 l
-3222 4698 m
-3370 4698 l
-3370 4699 l
-3222 4699 l
-3221 4699 m
-3371 4699 l
-3371 4700 l
-3221 4700 l
-3221 4700 m
-3372 4700 l
-3372 4701 l
-3221 4701 l
-3220 4701 m
-3374 4701 l
-3374 4702 l
-3220 4702 l
-3219 4702 m
-3375 4702 l
-3375 4703 l
-3219 4703 l
-3218 4703 m
-3376 4703 l
-3376 4704 l
-3218 4704 l
-3217 4704 m
-3376 4704 l
-3376 4705 l
-3217 4705 l
-3216 4705 m
-3376 4705 l
-3376 4706 l
-3216 4706 l
-3216 4706 m
-3375 4706 l
-3375 4707 l
-3216 4707 l
-3215 4707 m
-3374 4707 l
-3374 4708 l
-3215 4708 l
-3214 4708 m
-3373 4708 l
-3373 4709 l
-3214 4709 l
-3213 4709 m
-3372 4709 l
-3372 4710 l
-3213 4710 l
-3212 4710 m
-3372 4710 l
-3372 4711 l
-3212 4711 l
-3211 4711 m
-3371 4711 l
-3371 4712 l
-3211 4712 l
-3211 4712 m
-3370 4712 l
-3370 4713 l
-3211 4713 l
-3210 4713 m
-3369 4713 l
-3369 4714 l
-3210 4714 l
-3209 4714 m
-3368 4714 l
-3368 4715 l
-3209 4715 l
-3208 4715 m
-3367 4715 l
-3367 4716 l
-3208 4716 l
-3207 4716 m
-3367 4716 l
-3367 4717 l
-3207 4717 l
-3206 4717 m
-3366 4717 l
-3366 4718 l
-3206 4718 l
-3206 4718 m
-3365 4718 l
-3365 4719 l
-3206 4719 l
-3205 4719 m
-3364 4719 l
-3364 4720 l
-3205 4720 l
-3204 4720 m
-3363 4720 l
-3363 4721 l
-3204 4721 l
-3203 4721 m
-3362 4721 l
-3362 4722 l
-3203 4722 l
-3202 4722 m
-3362 4722 l
-3362 4723 l
-3202 4723 l
-3201 4723 m
-3361 4723 l
-3361 4724 l
-3201 4724 l
-3200 4724 m
-3360 4724 l
-3360 4725 l
-3200 4725 l
-3200 4725 m
-3359 4725 l
-3359 4726 l
-3200 4726 l
-3199 4726 m
-3358 4726 l
-3358 4727 l
-3199 4727 l
-3198 4727 m
-3358 4727 l
-3358 4728 l
-3198 4728 l
-3197 4728 m
-3357 4728 l
-3357 4729 l
-3197 4729 l
-3196 4729 m
-3356 4729 l
-3356 4730 l
-3196 4730 l
-3195 4730 m
-3355 4730 l
-3355 4731 l
-3195 4731 l
-3195 4731 m
-3354 4731 l
-3354 4732 l
-3195 4732 l
-3194 4732 m
-3353 4732 l
-3353 4733 l
-3194 4733 l
-3193 4733 m
-3353 4733 l
-3353 4734 l
-3193 4734 l
-3192 4734 m
-3352 4734 l
-3352 4735 l
-3192 4735 l
-3191 4735 m
-3351 4735 l
-3351 4736 l
-3191 4736 l
-3190 4736 m
-3350 4736 l
-3350 4737 l
-3190 4737 l
-3190 4737 m
-3349 4737 l
-3349 4738 l
-3190 4738 l
-3189 4738 m
-3348 4738 l
-3348 4739 l
-3189 4739 l
-3188 4739 m
-3348 4739 l
-3348 4740 l
-3188 4740 l
-3187 4740 m
-3347 4740 l
-3347 4741 l
-3187 4741 l
-3186 4741 m
-3346 4741 l
-3346 4742 l
-3186 4742 l
-3185 4742 m
-3345 4742 l
-3345 4743 l
-3185 4743 l
-3185 4743 m
-3344 4743 l
-3344 4744 l
-3185 4744 l
-3184 4744 m
-3344 4744 l
-3344 4745 l
-3184 4745 l
-3183 4745 m
-3343 4745 l
-3343 4746 l
-3183 4746 l
-3182 4746 m
-3342 4746 l
-3342 4747 l
-3182 4747 l
-3181 4747 m
-3341 4747 l
-3341 4748 l
-3181 4748 l
-3180 4748 m
-3340 4748 l
-3340 4749 l
-3180 4749 l
-3180 4749 m
-3339 4749 l
-3339 4750 l
-3180 4750 l
-3179 4750 m
-3339 4750 l
-3339 4751 l
-3179 4751 l
-3178 4751 m
-3338 4751 l
-3338 4752 l
-3178 4752 l
-3177 4752 m
-3337 4752 l
-3337 4753 l
-3177 4753 l
-3176 4753 m
-3336 4753 l
-3336 4754 l
-3176 4754 l
-3175 4754 m
-3335 4754 l
-3335 4755 l
-3175 4755 l
-3175 4755 m
-3334 4755 l
-3334 4756 l
-3175 4756 l
-3174 4756 m
-3334 4756 l
-3334 4757 l
-3174 4757 l
-3173 4757 m
-3333 4757 l
-3333 4758 l
-3173 4758 l
-3172 4758 m
-3332 4758 l
-3332 4759 l
-3172 4759 l
-3171 4759 m
-3331 4759 l
-3331 4760 l
-3171 4760 l
-3170 4760 m
-3330 4760 l
-3330 4762 l
-3170 4762 l
-3169 4762 m
-3329 4762 l
-3329 4763 l
-3169 4763 l
-3168 4763 m
-3328 4763 l
-3328 4764 l
-3168 4764 l
-3167 4764 m
-3327 4764 l
-3327 4765 l
-3167 4765 l
-3166 4765 m
-3326 4765 l
-3326 4766 l
-3166 4766 l
-3165 4766 m
-3325 4766 l
-3325 4767 l
-3165 4767 l
-3165 4767 m
-3325 4767 l
-3325 4768 l
-3165 4768 l
-3165 4768 m
-3324 4768 l
-3324 4769 l
-3165 4769 l
-3166 4769 m
-3323 4769 l
-3323 4770 l
-3166 4770 l
-3167 4770 m
-3322 4770 l
-3322 4771 l
-3167 4771 l
-3168 4771 m
-3321 4771 l
-3321 4772 l
-3168 4772 l
-3169 4772 m
-3320 4772 l
-3320 4773 l
-3169 4773 l
-3171 4773 m
-3320 4773 l
-3320 4774 l
-3171 4774 l
-3172 4774 m
-3319 4774 l
-3319 4775 l
-3172 4775 l
-3173 4775 m
-3318 4775 l
-3318 4776 l
-3173 4776 l
-3174 4776 m
-3317 4776 l
-3317 4777 l
-3174 4777 l
-3175 4777 m
-3316 4777 l
-3316 4778 l
-3175 4778 l
-3177 4778 m
-3316 4778 l
-3316 4779 l
-3177 4779 l
-3178 4779 m
-3315 4779 l
-3315 4780 l
-3178 4780 l
-3179 4780 m
-3314 4780 l
-3314 4781 l
-3179 4781 l
-3180 4781 m
-3313 4781 l
-3313 4782 l
-3180 4782 l
-3181 4782 m
-3312 4782 l
-3312 4783 l
-3181 4783 l
-3183 4783 m
-3311 4783 l
-3311 4784 l
-3183 4784 l
-3184 4784 m
-3311 4784 l
-3311 4785 l
-3184 4785 l
-3185 4785 m
-3310 4785 l
-3310 4786 l
-3185 4786 l
-3186 4786 m
-3309 4786 l
-3309 4787 l
-3186 4787 l
-3187 4787 m
-3308 4787 l
-3308 4788 l
-3187 4788 l
-3189 4788 m
-3307 4788 l
-3307 4789 l
-3189 4789 l
-3190 4789 m
-3306 4789 l
-3306 4790 l
-3190 4790 l
-3191 4790 m
-3306 4790 l
-3306 4791 l
-3191 4791 l
-3192 4791 m
-3305 4791 l
-3305 4792 l
-3192 4792 l
-3193 4792 m
-3304 4792 l
-3304 4793 l
-3193 4793 l
-3195 4793 m
-3303 4793 l
-3303 4794 l
-3195 4794 l
-3196 4794 m
-3302 4794 l
-3302 4795 l
-3196 4795 l
-3197 4795 m
-3302 4795 l
-3302 4796 l
-3197 4796 l
-3198 4796 m
-3301 4796 l
-3301 4797 l
-3198 4797 l
-3199 4797 m
-3300 4797 l
-3300 4798 l
-3199 4798 l
-3201 4798 m
-3299 4798 l
-3299 4799 l
-3201 4799 l
-3202 4799 m
-3298 4799 l
-3298 4800 l
-3202 4800 l
-3203 4800 m
-3297 4800 l
-3297 4801 l
-3203 4801 l
-3204 4801 m
-3297 4801 l
-3297 4802 l
-3204 4802 l
-3205 4802 m
-3296 4802 l
-3296 4803 l
-3205 4803 l
-3207 4803 m
-3295 4803 l
-3295 4804 l
-3207 4804 l
-3208 4804 m
-3294 4804 l
-3294 4805 l
-3208 4805 l
-3209 4805 m
-3293 4805 l
-3293 4806 l
-3209 4806 l
-3210 4806 m
-3292 4806 l
-3292 4807 l
-3210 4807 l
-3212 4807 m
-3292 4807 l
-3292 4808 l
-3212 4808 l
-3213 4808 m
-3291 4808 l
-3291 4809 l
-3213 4809 l
-3214 4809 m
-3290 4809 l
-3290 4810 l
-3214 4810 l
-3215 4810 m
-3289 4810 l
-3289 4811 l
-3215 4811 l
-3216 4811 m
-3288 4811 l
-3288 4812 l
-3216 4812 l
-3218 4812 m
-3288 4812 l
-3288 4813 l
-3218 4813 l
-3219 4813 m
-3287 4813 l
-3287 4814 l
-3219 4814 l
-3220 4814 m
-3286 4814 l
-3286 4815 l
-3220 4815 l
-3221 4815 m
-3285 4815 l
-3285 4816 l
-3221 4816 l
-3222 4816 m
-3284 4816 l
-3284 4817 l
-3222 4817 l
-3224 4817 m
-3283 4817 l
-3283 4818 l
-3224 4818 l
-3225 4818 m
-3283 4818 l
-3283 4819 l
-3225 4819 l
-3226 4819 m
-3282 4819 l
-3282 4820 l
-3226 4820 l
-3227 4820 m
-3281 4820 l
-3281 4821 l
-3227 4821 l
-3228 4821 m
-3280 4821 l
-3280 4822 l
-3228 4822 l
-3230 4822 m
-3279 4822 l
-3279 4823 l
-3230 4823 l
-3231 4823 m
-3278 4823 l
-3278 4824 l
-3231 4824 l
-3232 4824 m
-3278 4824 l
-3278 4825 l
-3232 4825 l
-3233 4825 m
-3277 4825 l
-3277 4826 l
-3233 4826 l
-3234 4826 m
-3276 4826 l
-3276 4827 l
-3234 4827 l
-3236 4827 m
-3275 4827 l
-3275 4828 l
-3236 4828 l
-3237 4828 m
-3274 4828 l
-3274 4829 l
-3237 4829 l
-3238 4829 m
-3274 4829 l
-3274 4830 l
-3238 4830 l
-3239 4830 m
-3273 4830 l
-3273 4831 l
-3239 4831 l
-3240 4831 m
-3272 4831 l
-3272 4832 l
-3240 4832 l
-3242 4832 m
-3271 4832 l
-3271 4833 l
-3242 4833 l
-3243 4833 m
-3270 4833 l
-3270 4834 l
-3243 4834 l
-3244 4834 m
-3269 4834 l
-3269 4835 l
-3244 4835 l
-3245 4835 m
-3269 4835 l
-3269 4836 l
-3245 4836 l
-3246 4836 m
-3268 4836 l
-3268 4837 l
-3246 4837 l
-3248 4837 m
-3267 4837 l
-3267 4838 l
-3248 4838 l
-3249 4838 m
-3266 4838 l
-3266 4839 l
-3249 4839 l
-3250 4839 m
-3265 4839 l
-3265 4840 l
-3250 4840 l
-3251 4840 m
-3264 4840 l
-3264 4841 l
-3251 4841 l
-3252 4841 m
-3264 4841 l
-3264 4842 l
-3252 4842 l
-3254 4842 m
-3263 4842 l
-3263 4843 l
-3254 4843 l
-3255 4843 m
-3262 4843 l
-3262 4844 l
-3255 4844 l
-3256 4844 m
-3261 4844 l
-3261 4845 l
-3256 4845 l
-3257 4845 m
-3260 4845 l
-3260 4846 l
-3257 4846 l
-Y
-3375.8 4704.2 m
-3283 4627 l
-3165 4768 l
-3259 4846 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3277 4660 m
-3247 4695 l
-3289 4698 l
-3281 4707 l
-3279 4716 l
-3280 4722 l
-3287 4733 l
-3293 4739 l
-3305 4743 l
-3317 4742 l
-3328 4735 l
-3336 4726 l
-3341 4713 l
-3341 4708 l
-3337 4699 l
-S
-3213 4737 m
-3224 4730 l
-3239 4732 l
-3258 4742 l
-3267 4750 l
-3281 4767 l
-3285 4781 l
-3280 4793 l
-3275 4800 l
-3264 4807 l
-3249 4805 l
-3230 4795 l
-3220 4787 l
-3207 4770 l
-3203 4756 l
-3207 4744 l
-3213 4737 l
-S
-1 g
-2920 4919 m
-2925 4919 l
-2925 4920 l
-2920 4920 l
-2916 4920 m
-2925 4920 l
-2925 4921 l
-2916 4921 l
-2913 4921 m
-2925 4921 l
-2925 4922 l
-2913 4922 l
-2909 4922 m
-2926 4922 l
-2926 4923 l
-2909 4923 l
-2906 4923 m
-2926 4923 l
-2926 4924 l
-2906 4924 l
-2902 4924 m
-2926 4924 l
-2926 4925 l
-2902 4925 l
-2899 4925 m
-2927 4925 l
-2927 4926 l
-2899 4926 l
-2895 4926 m
-2927 4926 l
-2927 4927 l
-2895 4927 l
-2892 4927 m
-2927 4927 l
-2927 4928 l
-2892 4928 l
-2888 4928 m
-2927 4928 l
-2927 4929 l
-2888 4929 l
-2885 4929 m
-2928 4929 l
-2928 4930 l
-2885 4930 l
-2881 4930 m
-2928 4930 l
-2928 4931 l
-2881 4931 l
-2878 4931 m
-2928 4931 l
-2928 4932 l
-2878 4932 l
-2874 4932 m
-2929 4932 l
-2929 4933 l
-2874 4933 l
-2871 4933 m
-2929 4933 l
-2929 4934 l
-2871 4934 l
-2867 4934 m
-2929 4934 l
-2929 4935 l
-2867 4935 l
-2864 4935 m
-2929 4935 l
-2929 4936 l
-2864 4936 l
-2860 4936 m
-2930 4936 l
-2930 4937 l
-2860 4937 l
-2857 4937 m
-2930 4937 l
-2930 4938 l
-2857 4938 l
-2853 4938 m
-2930 4938 l
-2930 4939 l
-2853 4939 l
-2850 4939 m
-2931 4939 l
-2931 4940 l
-2850 4940 l
-2846 4940 m
-2931 4940 l
-2931 4941 l
-2846 4941 l
-2843 4941 m
-2931 4941 l
-2931 4942 l
-2843 4942 l
-2839 4942 m
-2931 4942 l
-2931 4943 l
-2839 4943 l
-2836 4943 m
-2932 4943 l
-2932 4944 l
-2836 4944 l
-2832 4944 m
-2932 4944 l
-2932 4945 l
-2832 4945 l
-2829 4945 m
-2932 4945 l
-2932 4946 l
-2829 4946 l
-2825 4946 m
-2933 4946 l
-2933 4947 l
-2825 4947 l
-2822 4947 m
-2933 4947 l
-2933 4948 l
-2822 4948 l
-2818 4948 m
-2933 4948 l
-2933 4949 l
-2818 4949 l
-2815 4949 m
-2933 4949 l
-2933 4950 l
-2815 4950 l
-2811 4950 m
-2934 4950 l
-2934 4951 l
-2811 4951 l
-2808 4951 m
-2934 4951 l
-2934 4952 l
-2808 4952 l
-2804 4952 m
-2934 4952 l
-2934 4953 l
-2804 4953 l
-2801 4953 m
-2935 4953 l
-2935 4954 l
-2801 4954 l
-2797 4954 m
-2935 4954 l
-2935 4955 l
-2797 4955 l
-2794 4955 m
-2935 4955 l
-2935 4956 l
-2794 4956 l
-2790 4956 m
-2935 4956 l
-2935 4957 l
-2790 4957 l
-2787 4957 m
-2936 4957 l
-2936 4958 l
-2787 4958 l
-2783 4958 m
-2936 4958 l
-2936 4959 l
-2783 4959 l
-2780 4959 m
-2936 4959 l
-2936 4960 l
-2780 4960 l
-2776 4960 m
-2937 4960 l
-2937 4961 l
-2776 4961 l
-2773 4961 m
-2937 4961 l
-2937 4962 l
-2773 4962 l
-2769 4962 m
-2937 4962 l
-2937 4963 l
-2769 4963 l
-2766 4963 m
-2937 4963 l
-2937 4964 l
-2766 4964 l
-2762 4964 m
-2938 4964 l
-2938 4965 l
-2762 4965 l
-2759 4965 m
-2938 4965 l
-2938 4966 l
-2759 4966 l
-2755 4966 m
-2938 4966 l
-2938 4967 l
-2755 4967 l
-2752 4967 m
-2939 4967 l
-2939 4968 l
-2752 4968 l
-2752 4968 m
-2939 4968 l
-2939 4971 l
-2752 4971 l
-2752 4971 m
-2940 4971 l
-2940 4972 l
-2752 4972 l
-2753 4972 m
-2940 4972 l
-2940 4974 l
-2753 4974 l
-2753 4974 m
-2941 4974 l
-2941 4976 l
-2753 4976 l
-2754 4976 m
-2941 4976 l
-2941 4978 l
-2754 4978 l
-2754 4978 m
-2942 4978 l
-2942 4979 l
-2754 4979 l
-2755 4979 m
-2942 4979 l
-2942 4981 l
-2755 4981 l
-2755 4981 m
-2943 4981 l
-2943 4983 l
-2755 4983 l
-2756 4983 m
-2943 4983 l
-2943 4985 l
-2756 4985 l
-2756 4985 m
-2944 4985 l
-2944 4986 l
-2756 4986 l
-2757 4986 m
-2944 4986 l
-2944 4988 l
-2757 4988 l
-2757 4988 m
-2945 4988 l
-2945 4990 l
-2757 4990 l
-2758 4990 m
-2945 4990 l
-2945 4992 l
-2758 4992 l
-2758 4992 m
-2946 4992 l
-2946 4993 l
-2758 4993 l
-2759 4993 m
-2946 4993 l
-2946 4995 l
-2759 4995 l
-2759 4995 m
-2947 4995 l
-2947 4997 l
-2759 4997 l
-2760 4997 m
-2947 4997 l
-2947 4999 l
-2760 4999 l
-2760 4999 m
-2948 4999 l
-2948 5000 l
-2760 5000 l
-2761 5000 m
-2948 5000 l
-2948 5002 l
-2761 5002 l
-2761 5002 m
-2949 5002 l
-2949 5004 l
-2761 5004 l
-2762 5004 m
-2949 5004 l
-2949 5006 l
-2762 5006 l
-2762 5006 m
-2950 5006 l
-2950 5007 l
-2762 5007 l
-2763 5007 m
-2950 5007 l
-2950 5009 l
-2763 5009 l
-2763 5009 m
-2951 5009 l
-2951 5011 l
-2763 5011 l
-2764 5011 m
-2951 5011 l
-2951 5013 l
-2764 5013 l
-2764 5013 m
-2952 5013 l
-2952 5015 l
-2764 5015 l
-2765 5015 m
-2952 5015 l
-2952 5016 l
-2765 5016 l
-2765 5016 m
-2953 5016 l
-2953 5018 l
-2765 5018 l
-2766 5018 m
-2953 5018 l
-2953 5020 l
-2766 5020 l
-2766 5020 m
-2954 5020 l
-2954 5022 l
-2766 5022 l
-2767 5022 m
-2954 5022 l
-2954 5023 l
-2767 5023 l
-2767 5023 m
-2955 5023 l
-2955 5025 l
-2767 5025 l
-2768 5025 m
-2955 5025 l
-2955 5026 l
-2768 5026 l
-2768 5026 m
-2956 5026 l
-2956 5029 l
-2768 5029 l
-2769 5029 m
-2956 5029 l
-2956 5030 l
-2769 5030 l
-2769 5030 m
-2957 5030 l
-2957 5032 l
-2769 5032 l
-2770 5032 m
-2957 5032 l
-2957 5033 l
-2770 5033 l
-2770 5033 m
-2958 5033 l
-2958 5035 l
-2770 5035 l
-2770 5035 m
-2958 5035 l
-2958 5036 l
-2770 5036 l
-2771 5036 m
-2957 5036 l
-2957 5037 l
-2771 5037 l
-2771 5037 m
-2953 5037 l
-2953 5038 l
-2771 5038 l
-2771 5038 m
-2950 5038 l
-2950 5039 l
-2771 5039 l
-2772 5039 m
-2946 5039 l
-2946 5040 l
-2772 5040 l
-2772 5040 m
-2943 5040 l
-2943 5041 l
-2772 5041 l
-2772 5041 m
-2939 5041 l
-2939 5042 l
-2772 5042 l
-2772 5042 m
-2936 5042 l
-2936 5043 l
-2772 5043 l
-2773 5043 m
-2932 5043 l
-2932 5044 l
-2773 5044 l
-2773 5044 m
-2929 5044 l
-2929 5045 l
-2773 5045 l
-2773 5045 m
-2925 5045 l
-2925 5046 l
-2773 5046 l
-2774 5046 m
-2922 5046 l
-2922 5047 l
-2774 5047 l
-2774 5047 m
-2918 5047 l
-2918 5048 l
-2774 5048 l
-2774 5048 m
-2915 5048 l
-2915 5049 l
-2774 5049 l
-2774 5049 m
-2911 5049 l
-2911 5050 l
-2774 5050 l
-2775 5050 m
-2908 5050 l
-2908 5051 l
-2775 5051 l
-2775 5051 m
-2904 5051 l
-2904 5052 l
-2775 5052 l
-2775 5052 m
-2901 5052 l
-2901 5053 l
-2775 5053 l
-2775 5053 m
-2897 5053 l
-2897 5054 l
-2775 5054 l
-2776 5054 m
-2894 5054 l
-2894 5055 l
-2776 5055 l
-2776 5055 m
-2890 5055 l
-2890 5056 l
-2776 5056 l
-2776 5056 m
-2887 5056 l
-2887 5057 l
-2776 5057 l
-2777 5057 m
-2883 5057 l
-2883 5058 l
-2777 5058 l
-2777 5058 m
-2880 5058 l
-2880 5059 l
-2777 5059 l
-2777 5059 m
-2876 5059 l
-2876 5060 l
-2777 5060 l
-2777 5060 m
-2873 5060 l
-2873 5061 l
-2777 5061 l
-2778 5061 m
-2869 5061 l
-2869 5062 l
-2778 5062 l
-2778 5062 m
-2866 5062 l
-2866 5063 l
-2778 5063 l
-2778 5063 m
-2862 5063 l
-2862 5064 l
-2778 5064 l
-2779 5064 m
-2859 5064 l
-2859 5065 l
-2779 5065 l
-2779 5065 m
-2855 5065 l
-2855 5066 l
-2779 5066 l
-2779 5066 m
-2852 5066 l
-2852 5067 l
-2779 5067 l
-2779 5067 m
-2848 5067 l
-2848 5068 l
-2779 5068 l
-2780 5068 m
-2845 5068 l
-2845 5069 l
-2780 5069 l
-2780 5069 m
-2841 5069 l
-2841 5070 l
-2780 5070 l
-2780 5070 m
-2838 5070 l
-2838 5071 l
-2780 5071 l
-2781 5071 m
-2834 5071 l
-2834 5072 l
-2781 5072 l
-2781 5072 m
-2831 5072 l
-2831 5073 l
-2781 5073 l
-2781 5073 m
-2827 5073 l
-2827 5074 l
-2781 5074 l
-2781 5074 m
-2824 5074 l
-2824 5075 l
-2781 5075 l
-2782 5075 m
-2820 5075 l
-2820 5076 l
-2782 5076 l
-2782 5076 m
-2817 5076 l
-2817 5077 l
-2782 5077 l
-2782 5077 m
-2813 5077 l
-2813 5078 l
-2782 5078 l
-2783 5078 m
-2810 5078 l
-2810 5079 l
-2783 5079 l
-2783 5079 m
-2806 5079 l
-2806 5080 l
-2783 5080 l
-2783 5080 m
-2803 5080 l
-2803 5081 l
-2783 5081 l
-2783 5081 m
-2799 5081 l
-2799 5082 l
-2783 5082 l
-2784 5082 m
-2796 5082 l
-2796 5083 l
-2784 5083 l
-2784 5083 m
-2792 5083 l
-2792 5084 l
-2784 5084 l
-2784 5084 m
-2789 5084 l
-2789 5085 l
-2784 5085 l
-Y
-2957.5 5035.7 m
-2924 4919 l
-2752 4968 l
-2785 5085 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2864 4967 m
-2866 4958 l
-2877 4950 l
-2885 4948 l
-2898 4948 l
-2909 4958 l
-2919 4977 l
-2925 4997 l
-2925 5014 l
-2920 5025 l
-2909 5032 l
-2905 5033 l
-2892 5033 l
-2881 5027 l
-2874 5016 l
-2873 5012 l
-2873 4999 l
-2879 4989 l
-2890 4981 l
-2894 4980 l
-2907 4981 l
-2917 4986 l
-2925 4997 l
-S
-2808 4970 m
-2822 4970 l
-2833 4980 l
-2843 4999 l
-2846 5011 l
-2848 5032 l
-2843 5046 l
-2832 5054 l
-2824 5056 l
-2811 5056 l
-2800 5046 l
-2790 5027 l
-2787 5015 l
-2785 4994 l
-2789 4979 l
-2800 4972 l
-2808 4970 l
-S
-1 g
-2198 4859 m
-2203 4859 l
-2203 4860 l
-2198 4860 l
-2198 4860 m
-2205 4860 l
-2205 4861 l
-2198 4861 l
-2197 4861 m
-2208 4861 l
-2208 4862 l
-2197 4862 l
-2197 4862 m
-2210 4862 l
-2210 4863 l
-2197 4863 l
-2196 4863 m
-2213 4863 l
-2213 4864 l
-2196 4864 l
-2196 4864 m
-2215 4864 l
-2215 4865 l
-2196 4865 l
-2196 4865 m
-2218 4865 l
-2218 4866 l
-2196 4866 l
-2195 4866 m
-2220 4866 l
-2220 4867 l
-2195 4867 l
-2195 4867 m
-2223 4867 l
-2223 4868 l
-2195 4868 l
-2194 4868 m
-2225 4868 l
-2225 4869 l
-2194 4869 l
-2194 4869 m
-2228 4869 l
-2228 4870 l
-2194 4870 l
-2194 4870 m
-2230 4870 l
-2230 4871 l
-2194 4871 l
-2193 4871 m
-2233 4871 l
-2233 4872 l
-2193 4872 l
-2193 4872 m
-2235 4872 l
-2235 4873 l
-2193 4873 l
-2192 4873 m
-2238 4873 l
-2238 4874 l
-2192 4874 l
-2192 4874 m
-2240 4874 l
-2240 4875 l
-2192 4875 l
-2192 4875 m
-2243 4875 l
-2243 4876 l
-2192 4876 l
-2191 4876 m
-2245 4876 l
-2245 4877 l
-2191 4877 l
-2191 4877 m
-2248 4877 l
-2248 4878 l
-2191 4878 l
-2190 4878 m
-2250 4878 l
-2250 4879 l
-2190 4879 l
-2190 4879 m
-2253 4879 l
-2253 4880 l
-2190 4880 l
-2190 4880 m
-2255 4880 l
-2255 4881 l
-2190 4881 l
-2189 4881 m
-2258 4881 l
-2258 4882 l
-2189 4882 l
-2189 4882 m
-2260 4882 l
-2260 4883 l
-2189 4883 l
-2188 4883 m
-2263 4883 l
-2263 4884 l
-2188 4884 l
-2188 4884 m
-2265 4884 l
-2265 4885 l
-2188 4885 l
-2188 4885 m
-2268 4885 l
-2268 4886 l
-2188 4886 l
-2187 4886 m
-2270 4886 l
-2270 4887 l
-2187 4887 l
-2187 4887 m
-2273 4887 l
-2273 4888 l
-2187 4888 l
-2186 4888 m
-2275 4888 l
-2275 4889 l
-2186 4889 l
-2186 4889 m
-2278 4889 l
-2278 4890 l
-2186 4890 l
-2186 4890 m
-2280 4890 l
-2280 4891 l
-2186 4891 l
-2185 4891 m
-2283 4891 l
-2283 4892 l
-2185 4892 l
-2185 4892 m
-2285 4892 l
-2285 4893 l
-2185 4893 l
-2184 4893 m
-2288 4893 l
-2288 4894 l
-2184 4894 l
-2184 4894 m
-2290 4894 l
-2290 4895 l
-2184 4895 l
-2184 4895 m
-2293 4895 l
-2293 4896 l
-2184 4896 l
-2183 4896 m
-2295 4896 l
-2295 4897 l
-2183 4897 l
-2183 4897 m
-2298 4897 l
-2298 4898 l
-2183 4898 l
-2182 4898 m
-2300 4898 l
-2300 4899 l
-2182 4899 l
-2182 4899 m
-2303 4899 l
-2303 4900 l
-2182 4900 l
-2182 4900 m
-2305 4900 l
-2305 4901 l
-2182 4901 l
-2181 4901 m
-2308 4901 l
-2308 4902 l
-2181 4902 l
-2181 4902 m
-2310 4902 l
-2310 4903 l
-2181 4903 l
-2180 4903 m
-2313 4903 l
-2313 4904 l
-2180 4904 l
-2180 4904 m
-2315 4904 l
-2315 4905 l
-2180 4905 l
-2180 4905 m
-2318 4905 l
-2318 4906 l
-2180 4906 l
-2179 4906 m
-2320 4906 l
-2320 4907 l
-2179 4907 l
-2179 4907 m
-2323 4907 l
-2323 4908 l
-2179 4908 l
-2178 4908 m
-2325 4908 l
-2325 4909 l
-2178 4909 l
-2178 4909 m
-2328 4909 l
-2328 4910 l
-2178 4910 l
-2178 4910 m
-2330 4910 l
-2330 4911 l
-2178 4911 l
-2177 4911 m
-2333 4911 l
-2333 4912 l
-2177 4912 l
-2177 4912 m
-2335 4912 l
-2335 4913 l
-2177 4913 l
-2176 4913 m
-2338 4913 l
-2338 4914 l
-2176 4914 l
-2176 4914 m
-2340 4914 l
-2340 4915 l
-2176 4915 l
-2176 4915 m
-2343 4915 l
-2343 4916 l
-2176 4916 l
-2175 4916 m
-2345 4916 l
-2345 4917 l
-2175 4917 l
-2175 4917 m
-2348 4917 l
-2348 4918 l
-2175 4918 l
-2174 4918 m
-2350 4918 l
-2350 4919 l
-2174 4919 l
-2174 4919 m
-2353 4919 l
-2353 4920 l
-2174 4920 l
-2174 4920 m
-2355 4920 l
-2355 4921 l
-2174 4921 l
-2173 4921 m
-2358 4921 l
-2358 4922 l
-2173 4922 l
-2173 4922 m
-2360 4922 l
-2360 4923 l
-2173 4923 l
-2172 4923 m
-2363 4923 l
-2363 4924 l
-2172 4924 l
-2172 4924 m
-2365 4924 l
-2365 4925 l
-2172 4925 l
-2172 4925 m
-2368 4925 l
-2368 4926 l
-2172 4926 l
-2171 4926 m
-2370 4926 l
-2370 4927 l
-2171 4927 l
-2171 4927 m
-2370 4927 l
-2370 4928 l
-2171 4928 l
-2170 4928 m
-2370 4928 l
-2370 4930 l
-2170 4930 l
-2170 4930 m
-2369 4930 l
-2369 4931 l
-2170 4931 l
-2169 4931 m
-2369 4931 l
-2369 4932 l
-2169 4932 l
-2169 4932 m
-2368 4932 l
-2368 4933 l
-2169 4933 l
-2168 4933 m
-2368 4933 l
-2368 4935 l
-2168 4935 l
-2168 4935 m
-2367 4935 l
-2367 4936 l
-2168 4936 l
-2167 4936 m
-2367 4936 l
-2367 4937 l
-2167 4937 l
-2167 4937 m
-2366 4937 l
-2366 4938 l
-2167 4938 l
-2166 4938 m
-2366 4938 l
-2366 4940 l
-2166 4940 l
-2166 4940 m
-2365 4940 l
-2365 4941 l
-2166 4941 l
-2165 4941 m
-2365 4941 l
-2365 4942 l
-2165 4942 l
-2165 4942 m
-2364 4942 l
-2364 4943 l
-2165 4943 l
-2164 4943 m
-2364 4943 l
-2364 4945 l
-2164 4945 l
-2164 4945 m
-2363 4945 l
-2363 4946 l
-2164 4946 l
-2163 4946 m
-2363 4946 l
-2363 4947 l
-2163 4947 l
-2163 4947 m
-2362 4947 l
-2362 4948 l
-2163 4948 l
-2162 4948 m
-2362 4948 l
-2362 4950 l
-2162 4950 l
-2162 4950 m
-2361 4950 l
-2361 4951 l
-2162 4951 l
-2161 4951 m
-2361 4951 l
-2361 4952 l
-2161 4952 l
-2161 4952 m
-2360 4952 l
-2360 4953 l
-2161 4953 l
-2160 4953 m
-2360 4953 l
-2360 4955 l
-2160 4955 l
-2160 4955 m
-2359 4955 l
-2359 4956 l
-2160 4956 l
-2159 4956 m
-2359 4956 l
-2359 4957 l
-2159 4957 l
-2159 4957 m
-2358 4957 l
-2358 4958 l
-2159 4958 l
-2158 4958 m
-2358 4958 l
-2358 4959 l
-2158 4959 l
-2158 4959 m
-2357 4959 l
-2357 4961 l
-2158 4961 l
-2157 4961 m
-2357 4961 l
-2357 4962 l
-2157 4962 l
-2157 4962 m
-2356 4962 l
-2356 4963 l
-2157 4963 l
-2156 4963 m
-2356 4963 l
-2356 4964 l
-2156 4964 l
-2156 4964 m
-2355 4964 l
-2355 4966 l
-2156 4966 l
-2155 4966 m
-2355 4966 l
-2355 4967 l
-2155 4967 l
-2155 4967 m
-2354 4967 l
-2354 4968 l
-2155 4968 l
-2154 4968 m
-2354 4968 l
-2354 4969 l
-2154 4969 l
-2154 4969 m
-2353 4969 l
-2353 4971 l
-2154 4971 l
-2154 4971 m
-2353 4971 l
-2353 4972 l
-2154 4972 l
-2156 4972 m
-2352 4972 l
-2352 4973 l
-2156 4973 l
-2158 4973 m
-2352 4973 l
-2352 4974 l
-2158 4974 l
-2161 4974 m
-2351 4974 l
-2351 4975 l
-2161 4975 l
-2163 4975 m
-2351 4975 l
-2351 4976 l
-2163 4976 l
-2166 4976 m
-2351 4976 l
-2351 4977 l
-2166 4977 l
-2168 4977 m
-2350 4977 l
-2350 4978 l
-2168 4978 l
-2171 4978 m
-2350 4978 l
-2350 4979 l
-2171 4979 l
-2173 4979 m
-2349 4979 l
-2349 4980 l
-2173 4980 l
-2176 4980 m
-2349 4980 l
-2349 4981 l
-2176 4981 l
-2178 4981 m
-2349 4981 l
-2349 4982 l
-2178 4982 l
-2181 4982 m
-2348 4982 l
-2348 4983 l
-2181 4983 l
-2183 4983 m
-2348 4983 l
-2348 4984 l
-2183 4984 l
-2186 4984 m
-2347 4984 l
-2347 4985 l
-2186 4985 l
-2188 4985 m
-2347 4985 l
-2347 4986 l
-2188 4986 l
-2190 4986 m
-2346 4986 l
-2346 4987 l
-2190 4987 l
-2193 4987 m
-2346 4987 l
-2346 4988 l
-2193 4988 l
-2195 4988 m
-2346 4988 l
-2346 4989 l
-2195 4989 l
-2198 4989 m
-2345 4989 l
-2345 4990 l
-2198 4990 l
-2200 4990 m
-2345 4990 l
-2345 4991 l
-2200 4991 l
-2203 4991 m
-2344 4991 l
-2344 4992 l
-2203 4992 l
-2205 4992 m
-2344 4992 l
-2344 4993 l
-2205 4993 l
-2208 4993 m
-2344 4993 l
-2344 4994 l
-2208 4994 l
-2210 4994 m
-2343 4994 l
-2343 4995 l
-2210 4995 l
-2213 4995 m
-2343 4995 l
-2343 4996 l
-2213 4996 l
-2215 4996 m
-2342 4996 l
-2342 4997 l
-2215 4997 l
-2218 4997 m
-2342 4997 l
-2342 4998 l
-2218 4998 l
-2220 4998 m
-2342 4998 l
-2342 4999 l
-2220 4999 l
-2222 4999 m
-2341 4999 l
-2341 5000 l
-2222 5000 l
-2225 5000 m
-2341 5000 l
-2341 5001 l
-2225 5001 l
-2227 5001 m
-2340 5001 l
-2340 5002 l
-2227 5002 l
-2230 5002 m
-2340 5002 l
-2340 5003 l
-2230 5003 l
-2232 5003 m
-2340 5003 l
-2340 5004 l
-2232 5004 l
-2235 5004 m
-2339 5004 l
-2339 5005 l
-2235 5005 l
-2237 5005 m
-2339 5005 l
-2339 5006 l
-2237 5006 l
-2240 5006 m
-2338 5006 l
-2338 5007 l
-2240 5007 l
-2242 5007 m
-2338 5007 l
-2338 5008 l
-2242 5008 l
-2245 5008 m
-2338 5008 l
-2338 5009 l
-2245 5009 l
-2247 5009 m
-2337 5009 l
-2337 5010 l
-2247 5010 l
-2250 5010 m
-2337 5010 l
-2337 5011 l
-2250 5011 l
-2252 5011 m
-2336 5011 l
-2336 5012 l
-2252 5012 l
-2255 5012 m
-2336 5012 l
-2336 5013 l
-2255 5013 l
-2257 5013 m
-2335 5013 l
-2335 5014 l
-2257 5014 l
-2259 5014 m
-2335 5014 l
-2335 5015 l
-2259 5015 l
-2262 5015 m
-2335 5015 l
-2335 5016 l
-2262 5016 l
-2264 5016 m
-2334 5016 l
-2334 5017 l
-2264 5017 l
-2267 5017 m
-2334 5017 l
-2334 5018 l
-2267 5018 l
-2269 5018 m
-2333 5018 l
-2333 5019 l
-2269 5019 l
-2272 5019 m
-2333 5019 l
-2333 5020 l
-2272 5020 l
-2274 5020 m
-2333 5020 l
-2333 5021 l
-2274 5021 l
-2277 5021 m
-2332 5021 l
-2332 5022 l
-2277 5022 l
-2279 5022 m
-2332 5022 l
-2332 5023 l
-2279 5023 l
-2282 5023 m
-2331 5023 l
-2331 5024 l
-2282 5024 l
-2284 5024 m
-2331 5024 l
-2331 5025 l
-2284 5025 l
-2287 5025 m
-2331 5025 l
-2331 5026 l
-2287 5026 l
-2289 5026 m
-2330 5026 l
-2330 5027 l
-2289 5027 l
-2291 5027 m
-2330 5027 l
-2330 5028 l
-2291 5028 l
-2294 5028 m
-2329 5028 l
-2329 5029 l
-2294 5029 l
-2296 5029 m
-2329 5029 l
-2329 5030 l
-2296 5030 l
-2299 5030 m
-2329 5030 l
-2329 5031 l
-2299 5031 l
-2301 5031 m
-2328 5031 l
-2328 5032 l
-2301 5032 l
-2304 5032 m
-2328 5032 l
-2328 5033 l
-2304 5033 l
-2306 5033 m
-2327 5033 l
-2327 5034 l
-2306 5034 l
-2309 5034 m
-2327 5034 l
-2327 5035 l
-2309 5035 l
-2311 5035 m
-2327 5035 l
-2327 5036 l
-2311 5036 l
-2314 5036 m
-2326 5036 l
-2326 5037 l
-2314 5037 l
-2316 5037 m
-2326 5037 l
-2326 5038 l
-2316 5038 l
-2319 5038 m
-2325 5038 l
-2325 5039 l
-2319 5039 l
-2321 5039 m
-2325 5039 l
-2325 5040 l
-2321 5040 l
-Y
-2199 4858.8 m
-2154 4971 l
-2324 5040 l
-2370 4927 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2241 4957 m
-2242 4943 l
-2237 4932 l
-2227 4924 l
-2223 4922 l
-2210 4922 l
-2199 4926 l
-2190 4936 l
-2189 4940 l
-2188 4953 l
-2193 4964 l
-2203 4973 l
-2207 4974 l
-2220 4975 l
-2231 4970 l
-2241 4957 l
-2249 4937 l
-2252 4916 l
-2249 4901 l
-2239 4893 l
-2232 4890 l
-2218 4889 l
-2211 4895 l
-S
-2280 5004 m
-2270 4995 l
-2267 4981 l
-2271 4960 l
-2276 4948 l
-2287 4930 l
-2300 4922 l
-2313 4922 l
-2321 4926 l
-2331 4934 l
-2334 4949 l
-2330 4970 l
-2325 4981 l
-2314 4999 l
-2301 5008 l
-2288 5007 l
-2280 5004 l
-S
-1 g
-974 2200 m
-1160 2200 l
-1160 5703 l
-974 5703 l
-Y
-1159.9 2200 m
-974 2200 l
-974 5703 l
-1160 5703 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1000 2225 m
-1105 2225 l
-S
-1000 2225 m
-1000 2290 l
-S
-1050 2225 m
-1050 2265 l
-S
-1105 2225 m
-1105 2290 l
-S
-1050 2375 m
-1040 2365 l
-1035 2355 l
-1035 2340 l
-1040 2330 l
-1050 2320 l
-1065 2315 l
-1075 2315 l
-1090 2320 l
-1100 2330 l
-1105 2340 l
-1105 2355 l
-1100 2365 l
-1090 2375 l
-S
-1000 2411 m
-1105 2411 l
-S
-1000 2446 m
-1005 2451 l
-1000 2456 l
-995 2451 l
-1000 2446 l
-S
-1035 2451 m
-1105 2451 l
-S
-1035 2491 m
-1140 2491 l
-S
-1050 2491 m
-1040 2501 l
-1035 2511 l
-1035 2526 l
-1040 2536 l
-1050 2546 l
-1065 2551 l
-1075 2551 l
-1090 2546 l
-1100 2536 l
-1105 2526 l
-1105 2511 l
-1100 2501 l
-1090 2491 l
-S
-1000 2591 m
-1085 2591 l
-1100 2596 l
-1105 2606 l
-1105 2616 l
-S
-1035 2576 m
-1035 2611 l
-S
-1000 2641 m
-1005 2646 l
-1000 2651 l
-995 2646 l
-1000 2641 l
-S
-1035 2646 m
-1105 2646 l
-S
-1050 2741 m
-1040 2731 l
-1035 2721 l
-1035 2706 l
-1040 2696 l
-1050 2686 l
-1065 2681 l
-1075 2681 l
-1090 2686 l
-1100 2696 l
-1105 2706 l
-1105 2721 l
-1100 2731 l
-1090 2741 l
-S
-1050 2912 m
-1040 2902 l
-1035 2892 l
-1035 2877 l
-1040 2867 l
-1050 2857 l
-1065 2852 l
-1075 2852 l
-1090 2857 l
-1100 2867 l
-1105 2877 l
-1105 2892 l
-1100 2902 l
-1090 2912 l
-S
-1035 2967 m
-1040 2957 l
-1050 2947 l
-1065 2942 l
-1075 2942 l
-1090 2947 l
-1100 2957 l
-1105 2967 l
-1105 2982 l
-1100 2992 l
-1090 3002 l
-1075 3007 l
-1065 3007 l
-1050 3002 l
-1040 2992 l
-1035 2982 l
-1035 2967 l
-S
-1035 3062 m
-1040 3052 l
-1050 3042 l
-1065 3037 l
-1075 3037 l
-1090 3042 l
-1100 3052 l
-1105 3062 l
-1105 3077 l
-1100 3087 l
-1090 3097 l
-1075 3102 l
-1065 3102 l
-1050 3097 l
-1040 3087 l
-1035 3077 l
-1035 3062 l
-S
-1035 3137 m
-1105 3137 l
-S
-1065 3137 m
-1050 3142 l
-1040 3152 l
-1035 3162 l
-1035 3177 l
-S
-1000 3258 m
-1105 3258 l
-S
-1050 3258 m
-1040 3248 l
-1035 3238 l
-1035 3222 l
-1040 3212 l
-1050 3202 l
-1065 3197 l
-1075 3197 l
-1090 3202 l
-1100 3212 l
-1105 3222 l
-1105 3238 l
-1100 3248 l
-1090 3258 l
-S
-1000 3293 m
-1005 3298 l
-1000 3303 l
-995 3298 l
-1000 3293 l
-S
-1035 3298 m
-1105 3298 l
-S
-1035 3338 m
-1105 3338 l
-S
-1055 3338 m
-1040 3353 l
-1035 3363 l
-1035 3378 l
-1040 3388 l
-1055 3393 l
-1105 3393 l
-S
-1035 3488 m
-1105 3488 l
-S
-1050 3488 m
-1040 3478 l
-1035 3468 l
-1035 3453 l
-1040 3443 l
-1050 3433 l
-1065 3428 l
-1075 3428 l
-1090 3433 l
-1100 3443 l
-1105 3453 l
-1105 3468 l
-1100 3478 l
-1090 3488 l
-S
-1000 3533 m
-1085 3533 l
-1100 3538 l
-1105 3548 l
-1105 3558 l
-S
-1035 3518 m
-1035 3553 l
-S
-1065 3583 m
-1065 3643 l
-1055 3643 l
-1045 3638 l
-1040 3633 l
-1035 3623 l
-1035 3608 l
-1040 3598 l
-1050 3588 l
-1065 3583 l
-1075 3583 l
-1090 3588 l
-1100 3598 l
-1105 3608 l
-1105 3623 l
-1100 3633 l
-1090 3643 l
-S
-1050 3729 m
-1040 3724 l
-1035 3709 l
-1035 3694 l
-1040 3679 l
-1050 3674 l
-1060 3679 l
-1065 3689 l
-1070 3714 l
-1075 3724 l
-1085 3729 l
-1090 3729 l
-1100 3724 l
-1105 3709 l
-1105 3694 l
-1100 3679 l
-1090 3674 l
-S
-1035 3769 m
-1040 3764 l
-1045 3769 l
-1040 3774 l
-1035 3769 l
-S
-1100 3774 m
-1105 3769 l
-1100 3764 l
-1095 3769 l
-1100 3774 l
-1110 3774 l
-1120 3769 l
-1125 3764 l
-S
-1035 3894 m
-1105 3894 l
-S
-1055 3894 m
-1040 3909 l
-1035 3919 l
-1035 3934 l
-1040 3944 l
-1055 3949 l
-1105 3949 l
-S
-1055 3949 m
-1040 3964 l
-1035 3974 l
-1035 3989 l
-1040 3999 l
-1055 4004 l
-1105 4004 l
-S
-1065 4039 m
-1065 4100 l
-1055 4100 l
-1045 4095 l
-1040 4090 l
-1035 4080 l
-1035 4065 l
-1040 4054 l
-1050 4044 l
-1065 4039 l
-1075 4039 l
-1090 4044 l
-1100 4054 l
-1105 4065 l
-1105 4080 l
-1100 4090 l
-1090 4100 l
-S
-1035 4190 m
-1105 4190 l
-S
-1050 4190 m
-1040 4180 l
-1035 4170 l
-1035 4155 l
-1040 4145 l
-1050 4135 l
-1065 4130 l
-1075 4130 l
-1090 4135 l
-1100 4145 l
-1105 4155 l
-1105 4170 l
-1100 4180 l
-1090 4190 l
-S
-1035 4230 m
-1105 4230 l
-S
-1055 4230 m
-1040 4245 l
-1035 4255 l
-1035 4270 l
-1040 4280 l
-1055 4285 l
-1105 4285 l
-S
-1065 4400 m
-1065 4460 l
-1055 4460 l
-1045 4455 l
-1040 4450 l
-1035 4440 l
-1035 4425 l
-1040 4415 l
-1050 4405 l
-1065 4400 l
-1075 4400 l
-1090 4405 l
-1100 4415 l
-1105 4425 l
-1105 4440 l
-1100 4450 l
-1090 4460 l
-S
-1035 4551 m
-1140 4551 l
-S
-1050 4551 m
-1040 4541 l
-1035 4531 l
-1035 4516 l
-1040 4506 l
-1050 4496 l
-1065 4491 l
-1075 4491 l
-1090 4496 l
-1100 4506 l
-1105 4516 l
-1105 4531 l
-1100 4541 l
-1090 4551 l
-S
-1035 4591 m
-1085 4591 l
-1100 4596 l
-1105 4606 l
-1105 4621 l
-1100 4631 l
-1085 4646 l
-S
-1035 4646 m
-1105 4646 l
-S
-1000 4681 m
-1005 4686 l
-1000 4691 l
-995 4686 l
-1000 4681 l
-S
-1035 4686 m
-1105 4686 l
-S
-1035 4726 m
-1105 4726 l
-S
-1055 4726 m
-1040 4741 l
-1035 4751 l
-1035 4766 l
-1040 4776 l
-1055 4781 l
-1105 4781 l
-S
-1035 4841 m
-1040 4831 l
-1050 4821 l
-1065 4816 l
-1075 4816 l
-1090 4821 l
-1100 4831 l
-1105 4841 l
-1105 4856 l
-1100 4866 l
-1090 4876 l
-1075 4881 l
-1065 4881 l
-1050 4876 l
-1040 4866 l
-1035 4856 l
-1035 4841 l
-S
-1035 4912 m
-1105 4967 l
-S
-1035 4967 m
-1105 4912 l
-S
-1000 5122 m
-1080 5122 l
-1095 5117 l
-1100 5112 l
-1105 5102 l
-1105 5092 l
-1100 5082 l
-1095 5077 l
-1080 5072 l
-1070 5072 l
-S
-1025 5162 m
-1020 5162 l
-1010 5167 l
-1005 5172 l
-1000 5182 l
-1000 5202 l
-1005 5212 l
-1010 5217 l
-1020 5222 l
-1030 5222 l
-1040 5217 l
-1055 5207 l
-1105 5157 l
-1105 5227 l
-S
-1000 5287 m
-1005 5272 l
-1020 5262 l
-1045 5257 l
-1060 5257 l
-1085 5262 l
-1100 5272 l
-1105 5287 l
-1105 5297 l
-1100 5313 l
-1085 5323 l
-1060 5328 l
-1045 5328 l
-1020 5323 l
-1005 5313 l
-1000 5297 l
-1000 5287 l
-S
-1000 5388 m
-1005 5373 l
-1020 5363 l
-1045 5358 l
-1060 5358 l
-1085 5363 l
-1100 5373 l
-1105 5388 l
-1105 5398 l
-1100 5413 l
-1085 5423 l
-1060 5428 l
-1045 5428 l
-1020 5423 l
-1005 5413 l
-1000 5398 l
-1000 5388 l
-S
-1000 5488 m
-1005 5473 l
-1020 5463 l
-1045 5458 l
-1060 5458 l
-1085 5463 l
-1100 5473 l
-1105 5488 l
-1105 5498 l
-1100 5513 l
-1085 5523 l
-1060 5528 l
-1045 5528 l
-1020 5523 l
-1005 5513 l
-1000 5498 l
-1000 5488 l
-S
-1095 5568 m
-1100 5563 l
-1105 5568 l
-1100 5573 l
-1095 5568 l
-S
-1000 5638 m
-1005 5623 l
-1020 5613 l
-1045 5608 l
-1060 5608 l
-1085 5613 l
-1100 5623 l
-1105 5638 l
-1105 5648 l
-1100 5663 l
-1085 5673 l
-1060 5678 l
-1045 5678 l
-1020 5673 l
-1005 5663 l
-1000 5648 l
-1000 5638 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 2800 260 a
- currentpoint grestore moveto
- 2800 260 a 0 2494 a FG(Figure)41
-b(8:)62 b(A)41 b(lab)s(elled)h(co)s(ordinate)g(grid)e(for)h(an)g
-(all-sky)g(zenithal)h(equal)g(area)g(pro)5 b(jection)41
-b(in)g(ecliptic)0 2607 y(co)s(ordinates.)g(This)30 b(w)m(as)h(comp)s
-(osed)f(and)g(dra)m(wn)f Fx(via)i FG(a)f(Plot)i(using)e(a)g(single)h
-(subroutine)f(call.)0 2997 y Fw(2.7)112 b(Pro)s(ducing)38
-b(Graphical)h(Output)0 3240 y FG(Graphical)24 b(output)e(is)i(supp)s
-(orted)d(b)m(y)i(a)g(sp)s(ecialised)h(form)f(of)g(F)-8
-b(rameSet)24 b(called)g(a)g(Plot,)h(whose)e(base)h(F)-8
-b(rame)0 3353 y(corresp)s(onds)28 b(with)g(the)h(nativ)m(e)i(co)s
-(ordinates)e(of)g(the)h(underlying)d(graphics)i(system.)41
-b(Plotting)30 b(op)s(erations)0 3466 y(are)f(sp)s(eci\014ed)e(in)h
-Fx(physic)-5 b(al)33 b(c)-5 b(o)g(or)g(dinates)32 b FG(whic)m(h)c
-(corresp)s(ond)f(with)h(the)g(Plot's)i(curren)m(t)e(F)-8
-b(rame.)41 b(T)m(ypically)-8 b(,)0 3579 y(this)30 b(migh)m(t)h(b)s(e)f
-(a)h(celestial)i(co)s(ordinate)e(system.)0 3757 y(Op)s(erations,)43
-b(suc)m(h)d(as)h(dra)m(wing)g(lines,)i(are)e(automatically)j
-(transformed)c(from)g(ph)m(ysical)h(to)h(graphical)0
-3870 y(co)s(ordinates)30 b(b)s(efore)f(plotting,)h(using)f(an)g
-(adaptiv)m(e)i(algorithm)f(whic)m(h)f(ensures)f(smo)s(oth)h(curv)m(es)g
-(\(b)s(ecause)0 3983 y(the)44 b(transformation)f(is)h(usually)f
-(non-linear\).)80 b(\\Missing")45 b(co)s(ordinates)f(\()p
-Fx(e.g.)f FG(graphical)h(co)s(ordinates)0 4096 y(whic)m(h)31
-b(do)g(not)g(pro)5 b(ject)31 b(on)g(to)h(the)f(celestial)i(sphere\),)e
-(discon)m(tin)m(uities)i(and)d(generalised)i(clipping)f(are)h(all)0
-4209 y(consisten)m(tly)37 b(handled.)56 b(It)36 b(is)g(p)s(ossible,)h
-(for)e(example,)j(to)f(plot)f(in)g(equatorial)h(co)s(ordinates)g(and)e
-(clip)h(in)0 4321 y(galactic)30 b(co)s(ordinates.)41
-b(The)27 b(usual)g(plotting)h(op)s(erations)g(are)g(pro)m(vided)f
-(\(text,)i(mark)m(ers\),)g(but)d(a)i(geo)s(desic)0 4434
-y(curv)m(e)i(replaces)g(the)f(primitiv)m(e)h(straigh)m(t)g(line)g
-(elemen)m(t.)42 b(There)29 b(is)g(also)h(a)g(separate)g(function)f(for)
-g(dra)m(wing)0 4547 y(axis)i(lines,)g(since)f(these)h(are)g(normally)g
-(not)f(geo)s(desics.)0 4725 y(In)c(addition)h(to)h(dra)m(wing)e(co)s
-(ordinate)i(grids)e(o)m(v)m(er)i(an)f(area)g(of)g(the)g(sky)-8
-b(,)28 b(another)f(common)g(use)g(of)g(the)g(Plot)0 4838
-y(class)j(is)g(to)g(pro)s(duce)e(line)i(plots)g(suc)m(h)f(as)h(\015ux)f
-(against)h(w)m(a)m(v)m(elength,)j(displacemen)m(t)d(again)h(time,)f
-Fx(etc)p FG(.)41 b(F)-8 b(or)0 4951 y(these)33 b(situations)g(the)f
-(curren)m(t)g(F)-8 b(rame)34 b(of)e(the)g(Plot)i(w)m(ould)e(b)s(e)f(a)i
-(comp)s(ound)e(F)-8 b(rame)33 b(\(CmpF)-8 b(rame\))33
-b(con-)0 5064 y(taining)d(a)h(pair)e(of)h(1-dimensional)h(F)-8
-b(rames)30 b(-)g(the)g(\014rst)f(represen)m(ting)h(the)g(X)g(axis)g
-(quan)m(tit)m(y)i(\(w)m(a)m(v)m(elength,)0 5177 y(time,)g(etc\),)i(and)
-c(the)i(second)f(represen)m(ting)h(the)f(Y)h(axis)f(quan)m(tit)m(y)i
-(\(\015ux,)e(displacemen)m(t,)i(etc\).)45 b(The)31 b(Plot)0
-5289 y(class)g(includes)f(an)g(option)h(for)f(axes)h(to)g(b)s(e)f
-(plotted)h(logarithmically)-8 b(.)0 5467 y(P)m(erhaps)36
-b(the)h(most)f(useful)g(graphics)g(function)h(a)m(v)-5
-b(ailable)38 b(is)f(for)f(dra)m(wing)g(fully)g(annotated)i(co)s
-(ordinate)0 5580 y(grids)d(\()p Fx(e.g.)f FG(Figure)i(8\).)109
-b(This)35 b(uses)f(a)h(general)h(algorithm)g(whic)m(h)f(do)s(es)g(not)g
-(dep)s(end)e(on)i(kno)m(wledge)h(of)0 5693 y(the)d(co)s(ordinates)g(b)s
-(eing)g(represen)m(ted,)g(so)g(can)g(also)h(handle)e
-(programmer-de\014ned)g(co)s(ordinate)h(systems.)p eop
-end
-%%Page: 13 23
-TeXDict begin 13 22 bop 0 52 a Fz(2.7)92 b(Pro)s(ducing)29
-b(Graphical)j(Output)2329 b FG(13)0 351 y(Grids)39 b(for)h(all-sky)g
-(pro)5 b(jections,)43 b(including)c(p)s(olar)h(regions,)j(can)c(b)s(e)h
-(dra)m(wn)e(and)h(most)h(asp)s(ects)g(of)g(the)0 464
-y(output)30 b(\(colour,)i(line)e(st)m(yle,)i Fx(etc.)p
-FG(\))41 b(can)30 b(b)s(e)g(adjusted)g(b)m(y)g(setting)h(appropriate)g
-(Plot)g(attributes.)0 627 y FE(F)-9 b(urther)47 b(reading:)61
-b FG(F)-8 b(or)42 b(a)f(more)g(complete)h(description)f(of)g(Plots)g
-(and)g(ho)m(w)f(to)i(pro)s(duce)e(graphical)0 740 y(output,)30
-b(see)h Fu(x)p FG(21.)42 b(Also)31 b(see)g(the)g(Plot)g(en)m(try)g(in)f
-(App)s(endix)e(D.)p eop end
-%%Page: 14 24
-TeXDict begin 14 23 bop 0 52 a FG(14)2126 b Fz(2)92 b(O)m(VER)-10
-b(VIEW)30 b(OF)h(AST)e(CONCEPTS)p eop end
-%%Page: 15 25
-TeXDict begin 15 24 bop 3689 52 a FG(15)0 351 y FA(3)135
-b(Ho)l(w)45 b(T)-11 b(o.)23 b(.)g(.)0 613 y FG(F)-8 b(or)29
-b(those)g(of)f(y)m(ou)g(with)g(a)h(plane)f(to)h(catc)m(h,)h(this)f
-(section)g(pro)m(vides)f(some)h(instan)m(t)g(templates)g(and)f(recip)s
-(es)0 725 y(for)22 b(p)s(erforming)f(the)i(most)f(commonly-required)h
-(op)s(erations)f(using)g(AST,)g(but)f(without)h(going)i(in)m(to)f
-(detail.)0 838 y(The)35 b(examples)h(giv)m(en)g(\(sort)g(of)7
-b(\))36 b(follo)m(w)g(on)f(from)g(eac)m(h)i(other,)g(so)e(y)m(ou)h
-(should)e(b)s(e)h(able)g(to)h(construct)g(a)0 951 y(v)-5
-b(ariet)m(y)30 b(of)f(programs)f(b)m(y)g(piecing)i(them)e(together.)42
-b(Note)30 b(that)f(some)g(of)f(them)h(app)s(ear)f(longer)h(than)f(they)
-0 1064 y(actually)h(are,)f(b)s(ecause)f(w)m(e)h(ha)m(v)m(e)g(included)f
-(plen)m(t)m(y)g(of)h(commen)m(ts)g(and)e(a)i(few)f(options)g(that)h(y)m
-(ou)f(probably)0 1177 y(w)m(on't)k(need.)0 1346 y(If)g(an)m(y)g(of)g
-(this)g(material)h(has)f(y)m(ou)g(completely)i(ba\017ed,)e(then)g(y)m
-(ou)g(ma)m(y)h(w)m(an)m(t)g(to)f(read)g(the)g(in)m(tro)s(duction)0
-1459 y(to)36 b(AST)f(programming)g(concepts)i(in)e Fu(x)p
-FG(4)h(\014rst.)55 b(Otherwise,)37 b(references)f(to)g(more)g(detailed)
-g(reading)g(are)0 1571 y(giv)m(en)31 b(after)g(eac)m(h)h(example,)f
-(just)f(in)g(case)h(they)g(don't)f(quite)h(do)f(what)h(y)m(ou)f(w)m(an)
-m(t.)0 1884 y Fw(3.1)112 b(.)19 b(.)g(.)g(Obtain)38 b(and)g(Install)g
-(AST)0 2114 y FG(The)h(AST)g(library)g(is)h(a)m(v)-5
-b(ailable)42 b(b)s(oth)c(as)i(a)g(stand-alone)h(pac)m(k)-5
-b(age)41 b(and)e(also)i(as)f(part)f(of)h(the)g(Starlink)0
-2227 y(Soft)m(w)m(are)26 b(Collection)763 2194 y Fv(4)804
-2227 y FG(.)39 b(If)24 b(y)m(our)h(site)g(has)f(the)h(Starlink)g(Soft)m
-(w)m(are)g(Collection)i(installed)e(then)g(AST)e(should)0
-2340 y(already)31 b(b)s(e)f(a)m(v)-5 b(ailable.)0 2508
-y(If)30 b(not,)h(y)m(ou)f(can)h(do)m(wnload)g(the)f(AST)g(library)g(b)m
-(y)g(itself)h(from)f(h)m(ttp://www.starlink.ac.uk/ast/.)0
-2821 y Fw(3.2)112 b(.)19 b(.)g(.)g(Structure)37 b(an)h(AST)f(Program)0
-3051 y FG(An)30 b(AST)g(program)g(normally)g(has)g(the)h(follo)m(wing)h
-(structure:)0 3318 y Ft(*)87 b(Include)40 b(the)j(interface)d(to)i(the)
-h(AST)f(library.)262 3417 y(INCLUDE)e('AST_PAR')0 3616
-y(*)87 b(Declare)40 b(an)j(integer)e(status)g(variable.)262
-3716 y(INTEGER)f(STATUS)262 3816 y(<maybe)h(other)g(declarations>)0
-4015 y(*)87 b(Initialise)39 b(the)k(status)e(to)h(zero.)262
-4115 y(STATUS)f(=)i(0)262 4214 y(<maybe)e(some)h(Fortran)e(statements>)
-0 4413 y(*)87 b(Enclose)40 b(the)j(parts)e(which)h(use)g(AST)h(between)
-d(AST_BEGIN)g(and)i(AST_END)f(calls.)262 4513 y(CALL)g(AST_BEGIN\()f
-(STATUS)h(\))262 4613 y(<Fortran)f(statements)f(which)j(use)g(AST>)262
-4712 y(CALL)f(AST_END\()g(STATUS)g(\))262 4912 y(<maybe)g(more)h
-(Fortran)e(statements>)262 5011 y(END)0 5291 y FG(The)32
-b(use)g(of)h(AST)p Fy(_)p FG(BEGIN)f(and)g(AST)p Fy(_)p
-FG(END)g(is)h(optional,)h(but)e(has)g(the)h(e\013ect)h(of)f(tidying)g
-(up)e(after)i(y)m(ou)0 5404 y(ha)m(v)m(e)g(\014nished)e(using)g(AST,)g
-(so)i(is)f(normally)g(recommended.)45 b(F)-8 b(or)32
-b(more)g(details)h(of)f(this,)h(see)f Fu(x)p FG(4.10.)48
-b(F)-8 b(or)0 5517 y(details)31 b(of)g(ho)m(w)f(to)h(access)h(the)f
-(AST)p Fy(_)p FG(P)-8 b(AR)29 b(include)i(\014le,)f(see)h
-Fu(x)p FG(22.1.)p 0 5607 1512 4 v 104 5661 a Fs(4)138
-5693 y Fr(The)26 b(Starlink)g(Soft)n(w)n(are)g(Collection)i(can)e(b)r
-(e)f(do)n(wnloaded)i(from)f(h)n(ttp://www.starlink.ac.uk/Do)n(wnload/.)
-p eop end
-%%Page: 16 26
-TeXDict begin 16 25 bop 0 52 a FG(16)3035 b Fz(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)0 351 y Fw(3.3)112 b(.)19 b(.)g(.)g(Build)38
-b(an)g(AST)f(Program)0 558 y FG(T)-8 b(o)31 b(build)e(a)i(simple)f(AST)
-g(program)g(that)h(do)s(esn't)f(use)g(graphics,)h(use:)227
-749 y Ft(f77)43 b(program.f)c(-L/star/lib)h(-I/star/include)d
-(`ast_link`)i(-o)k(program)0 954 y FG(On)33 b(Lin)m(ux)f(systems)i(y)m
-(ou)g(should)e(usually)h(use)g Fy(g77)47 b(-fno-second-underscore)28
-b FG(in)33 b(place)h(of)g Fy(f77)e FG(-)i(see)0 1067
-y(\\Soft)m(w)m(are)e(dev)m(elopmen)m(t)g(on)e(Lin)m(ux")g(in)g
-(SUN/212.)0 1215 y(T)-8 b(o)31 b(build)e(a)i(program)f(whic)m(h)g(uses)
-g(PGPLOT)g(for)g(graphics,)g(use:)227 1406 y Ft(f77)43
-b(program.f)c(-L/star/lib)h(`ast_link)f(-pgplot`)i(-o)h(program)0
-1611 y FG(again)31 b(using)f Fy(g77)47 b(-fno-second-underscore)25
-b FG(in)30 b(place)h(of)f Fy(f77)g FG(on)g(Lin)m(ux)g(systems.)0
-1759 y(F)-8 b(or)37 b(more)f(details)h(ab)s(out)f(accessing)h(AST)e
-(include)h(\014les,)i(see)e Fu(x)p FG(22.1.)60 b(F)-8
-b(or)36 b(more)h(details)g(ab)s(out)e(linking)0 1872
-y(programs,)30 b(see)h Fu(x)p FG(22.2)i(and)c(the)i(description)f(of)h
-(the)f(\\ast)p Fy(_)p FG(link")i(command)e(in)g(App)s(endix)f(E.)0
-2144 y Fw(3.4)112 b(.)19 b(.)g(.)g(Read)38 b(a)f(W)m(CS)h(Calibration)g
-(from)g(a)g(Dataset)0 2351 y FG(Precisely)27 b(ho)m(w)e(y)m(ou)h
-(extract)h(w)m(orld)f(co)s(ordinate)g(system)g(\(W)m(CS\))h
-(information)f(from)f(a)h(dataset)h(ob)m(viously)0 2464
-y(dep)s(ends)36 b(on)i(what)h(t)m(yp)s(e)f(of)g(dataset)i(it)e(is.)65
-b(Usually)-8 b(,)41 b(ho)m(w)m(ev)m(er,)h(y)m(ou)c(should)f(b)s(e)h
-(able)h(to)g(obtain)f(a)h(set)0 2577 y(of)33 b(FITS)f(header)h(cards)g
-(whic)m(h)f(con)m(tain)j(the)e(W)m(CS)g(information)g(\(and)f(probably)
-h(m)m(uc)m(h)g(more)g(b)s(esides\).)0 2690 y(Supp)s(ose)27
-b(that)i(CARDS)g(is)g(an)f(arra)m(y)i(of)f(c)m(haracter)h(strings)f
-(con)m(taining)h(a)f(complete)h(set)g(of)f(FITS)f(header)0
-2802 y(cards)i(and)g(NCARD)h(is)f(the)h(n)m(um)m(b)s(er)e(of)h(cards.)
-41 b(Then)29 b(pro)s(ceed)h(as)h(follo)m(ws:)262 2994
-y Ft(INTEGER)40 b(FITSCHAN,)g(ICARD,)h(NCARD,)g(WCSINFO)262
-3093 y(CHARACTER)e(*)44 b(\()f(80)f(\))i(CARDS\()d(NCARD)g(\))262
-3292 y(...)0 3492 y(*)87 b(Create)41 b(a)i(FitsChan)d(and)j(fill)f(it)g
-(with)g(FITS)g(header)f(cards.)262 3591 y(FITSCHAN)f(=)j
-(AST_FITSCHAN\()38 b(AST_NULL,)i(AST_NULL,)g(')j(',)g(STATUS)e(\))262
-3691 y(DO)h(1)h(ICARD)f(=)h(1,)g(NCARD)392 3791 y(CALL)f(AST_PUTFITS\()
-d(FITSCHAN,)h(CARDS\()h(ICARD)g(\),)i(.FALSE.,)d(STATUS)h(\))44
-3890 y(1)174 b(CONTINUE)0 4090 y(*)87 b(Rewind)41 b(the)h(FitsChan)e
-(and)j(read)f(WCS)g(information)d(from)j(it.)262 4189
-y(CALL)f(AST_CLEAR\()f(FITSCHAN,)g('Card',)g(STATUS)i(\))262
-4289 y(WCSINFO)e(=)j(AST_READ\()d(FITSCHAN,)g(STATUS)h(\))0
-4493 y FG(The)25 b(result)g(should)g(b)s(e)f(a)i(p)s(oin)m(ter,)h(W)m
-(CSINF)m(O,)f(to)g(a)g(F)-8 b(rameSet)26 b(whic)m(h)f(con)m(tains)i
-(the)f(W)m(CS)f(information.)0 4606 y(This)h(p)s(oin)m(ter)h(can)g(no)m
-(w)g(b)s(e)f(used)g(to)i(p)s(erform)d(man)m(y)i(useful)g(tasks,)h(some)
-f(of)g(whic)m(h)g(are)g(illustrated)h(in)e(the)0 4719
-y(follo)m(wing)32 b(recip)s(es.)0 4867 y(Some)j(datasets)i(whic)m(h)e
-(do)g(not)h(easily)h(yield)e(FITS)g(header)g(cards)g(ma)m(y)h(require)f
-(a)h(di\013eren)m(t)g(approac)m(h,)0 4980 y(p)s(ossibly)d(in)m(v)m
-(olving)i(use)f(of)f(a)i(Channel)d(or)i(XmlChan)f(\()p
-Fu(x)p FG(15\))j(rather)d(than)h(a)g(FitsChan.)51 b(In)33
-b(the)h(case)g(of)0 5093 y(the)h(Starlink)g(NDF)h(data)f(format,)i(for)
-d(example,)j(all)f(the)f(ab)s(o)m(v)m(e)h(ma)m(y)g(b)s(e)e(replaced)h
-(b)m(y)g(a)g(single)h(call)g(to)0 5206 y(the)e(routine)g(NDF)p
-Fy(_)p FG(GTW)m(CS|see)h(SUN/33.)52 b(The)33 b(whole)h(pro)s(cess)f
-(can)h(probably)f(b)s(e)g(encapsulated)i(in)0 5319 y(a)c(similar)f(w)m
-(a)m(y)i(for)e(most)h(other)f(data)h(systems,)g(whether)f(they)g(use)g
-(FITS)g(header)g(cards)g(or)h(not.)0 5467 y(F)-8 b(or)26
-b(more)g(details)h(ab)s(out)e(reading)h(W)m(CS)f(information)h(from)f
-(datasets,)j(see)e Fu(x)p FG(17.3)i(and)d Fu(x)p FG(17.4.)41
-b(F)-8 b(or)26 b(a)g(more)0 5580 y(general)37 b(description)f(of)g
-(FitsChans)f(and)h(their)f(use)h(with)g(FITS)f(header)g(cards,)j(see)e
-Fu(x)p FG(16)h(and)e Fu(x)p FG(17.)59 b(F)-8 b(or)0 5693
-y(more)31 b(details)g(ab)s(out)f(F)-8 b(rameSets,)32
-b(see)f Fu(x)p FG(13)g(and)f Fu(x)p FG(14.)p eop end
-%%Page: 17 27
-TeXDict begin 17 26 bop 0 52 a Fz(3.5)92 b(.)15 b(.)h(.)f(V)-8
-b(alidate)33 b(W)m(CS)d(Information)2295 b FG(17)0 351
-y Fw(3.5)112 b(.)19 b(.)g(.)g(V)-9 b(alidate)38 b(W)m(CS)f(Information)
-0 587 y FG(Once)d(y)m(ou)h(ha)m(v)m(e)h(read)e(W)m(CS)g(information)h
-(from)f(a)h(dataset,)i(as)d(in)g Fu(x)p FG(3.4,)j(y)m(ou)e(ma)m(y)g
-(wish)f(to)h(c)m(hec)m(k)h(that)0 700 y(y)m(ou)c(ha)m(v)m(e)h(b)s(een)e
-(successful.)45 b(The)31 b(follo)m(wing)j(will)e(detect)h(and)e
-(classify)i(the)f(things)f(that)i(migh)m(t)f(p)s(ossibly)0
-813 y(go)f(wrong:)262 1090 y Ft(IF)42 b(\()h(STATUS)f(.NE.)f(0)j(\))f
-(THEN)392 1190 y(<an)g(error)e(occurred)f(\(a)j(message)e(will)h(have)g
-(been)g(issued\)>)262 1289 y(ELSE)f(IF)i(\()g(WCSINFO)e(.EQ.)h
-(AST__NULL)e(\))j(THEN)392 1389 y(<there)e(was)i(no)f(WCS)h
-(information)c(present>)262 1489 y(ELSE)i(IF)i(\()g(AST_GETC\()d
-(WCSINFO,)h('Class',)f(STATUS)h(\))i(.NE.)f('FrameSet')d(\))44
-b(THEN)392 1588 y(<something)c(unexpected)f(was)k(read)e(\(i.e.)h(not)g
-(a)h(FrameSet\)>)262 1688 y(ELSE)392 1788 y(<WCS)f(information)d(was)k
-(read)f(OK>)262 1887 y(END)g(IF)0 2178 y FG(F)-8 b(or)34
-b(more)f(information)h(ab)s(out)f(detecting)h(errors)f(in)g(AST)f
-(routines,)i(see)g Fu(x)p FG(4.13.)51 b(F)-8 b(or)34
-b(details)g(of)g(ho)m(w)f(to)0 2291 y(v)-5 b(alidate)32
-b(input)d(data)i(read)g(b)m(y)f(AST,)g(see)h Fu(x)p FG(15.6)h(and)e
-Fu(x)p FG(17.4.)0 2616 y Fw(3.6)112 b(.)19 b(.)g(.)g(Displa)m(y)38
-b(AST)f(Data)0 2852 y FG(If)g(y)m(ou)h(ha)m(v)m(e)h(a)f(p)s(oin)m(ter)f
-(to)i(an)m(y)f(AST)e(Ob)5 b(ject,)40 b(y)m(ou)e(can)g(displa)m(y)g(the)
-g(data)g(stored)g(in)f(that)h(Ob)5 b(ject)38 b(in)0 2965
-y(textual)32 b(form)e(as)g(follo)m(ws:)262 3242 y Ft(CALL)41
-b(AST_SHOW\()f(WCSINFO,)h(STATUS)g(\))0 3533 y FG(Here,)28
-b(w)m(e)f(ha)m(v)m(e)h(used)e(a)h(p)s(oin)m(ter)f(to)i(the)e(F)-8
-b(rameSet)28 b(whic)m(h)f(w)m(e)g(read)f(earlier)i(\()p
-Fu(x)p FG(3.4\).)41 b(The)26 b(result)h(is)f(written)0
-3646 y(to)31 b(the)g(program's)f(standard)f(output)h(stream.)42
-b(This)29 b(can)i(b)s(e)f(v)m(ery)g(useful)g(during)f(debugging.)0
-3819 y(F)-8 b(or)40 b(more)g(details)g(ab)s(out)f(using)g(AST)p
-Fy(_)p FG(SHO)m(W,)g(see)h Fu(x)p FG(4.4.)69 b(F)-8 b(or)40
-b(information)f(ab)s(out)g(in)m(terpreting)h(the)0 3931
-y(output,)30 b(also)i(see)f Fu(x)p FG(15.8.)0 4257 y
-Fw(3.7)112 b(.)19 b(.)g(.)g(Con)m(v)m(ert)37 b(Bet)m(w)m(een)g(Pixel)g
-(and)i(W)-9 b(orld)37 b(Co)s(ordinates)0 4492 y FG(Y)-8
-b(ou)39 b(ma)m(y)h(use)f(a)g(p)s(oin)m(ter)g(to)h(a)f(F)-8
-b(rameSet,)43 b(suc)m(h)38 b(as)i(w)m(e)f(read)g(in)g
-Fu(x)p FG(3.4,)k(to)c(transform)g(a)g(set)g(of)h(p)s(oin)m(ts)0
-4605 y(b)s(et)m(w)m(een)h(the)f(pixel)h(co)s(ordinates)g(of)f(an)g
-(image)i(and)d(the)i(asso)s(ciated)h(w)m(orld)e(co)s(ordinates.)71
-b(If)39 b(y)m(ou)i(are)0 4718 y(w)m(orking)31 b(in)f(t)m(w)m(o)h
-(dimensions,)f(pro)s(ceed)g(as)h(follo)m(ws:)262 4996
-y Ft(INTEGER)40 b(N)262 5095 y(DOUBLE)h(PRECISION)e(XPIXEL\()i(N)i(\),)
-g(YPIXEL\()e(N)i(\))262 5195 y(DOUBLE)e(PRECISION)e(XWORLD\()i(N)i(\),)
-g(YWORLD\()e(N)i(\))262 5394 y(...)262 5593 y(CALL)e(AST_TRAN2\()f
-(WCSINFO,)g(N,)j(XPIXEL,)e(YPIXEL,)f(.TRUE.,)218 5693
-y(:)1220 b(XWORLD,)41 b(YWORLD,)f(STATUS)h(\))p eop end
-%%Page: 18 28
-TeXDict begin 18 27 bop 0 52 a FG(18)3035 b Fz(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)0 351 y FG(Here,)31 b(N)g(is)f(the)h(n)m(um)m(b)s(er)e
-(of)i(p)s(oin)m(ts)f(to)h(b)s(e)f(transformed,)g(XPIXEL)g(and)g(YPIXEL)
-g(hold)g(the)h(pixel)g(co)s(or-)0 464 y(dinates,)i(and)f(XW)m(ORLD)i
-(and)d(YW)m(ORLD)j(receiv)m(e)g(the)f(returned)e(w)m(orld)h(co)s
-(ordinates.)3169 431 y Fv(5)3256 464 y FG(T)-8 b(o)33
-b(transform)0 577 y(in)c(the)g(opp)s(osite)h(direction,)g(in)m(terc)m
-(hange)h(the)e(t)m(w)m(o)i(pairs)d(of)i(arra)m(ys)f(\(so)h(that)g(the)f
-(w)m(orld)g(co)s(ordinates)h(are)0 690 y(giv)m(en)h(as)g(input\))f(and)
-g(c)m(hange)h(the)g(\014fth)e(argumen)m(t)i(of)f(AST)p
-Fy(_)p FG(TRAN2)g(to)h(.F)-10 b(ALSE..)0 876 y(T)i(o)35
-b(transform)f(p)s(oin)m(ts)h(in)f(one)h(dimension,)g(use)f(AST)p
-Fy(_)p FG(TRAN1.)53 b(In)34 b(an)m(y)h(other)g(n)m(um)m(b)s(er)e(of)i
-(dimensions)0 989 y(\(or)j(if)g(the)g(n)m(um)m(b)s(er)f(of)h
-(dimensions)f(is)h(initially)i(unkno)m(wn\),)f(use)e(AST)p
-Fy(_)p FG(TRANN.)h(These)f(routines)h(are)0 1102 y(describ)s(ed)29
-b(in)h(App)s(endix)f(B.)0 1289 y(F)-8 b(or)30 b(more)f(information)h
-(ab)s(out)f(transforming)g(co)s(ordinates,)h(see)g Fu(x)p
-FG(4.8)h(and)d Fu(x)p FG(13.6.)43 b(F)-8 b(or)30 b(details)g(of)f(ho)m
-(w)h(to)0 1401 y(handle)g(missing)g(co)s(ordinates,)i(see)e
-Fu(x)p FG(5.8.)0 1774 y Fw(3.8)112 b(.)19 b(.)g(.)g(T)-9
-b(est)37 b(if)g(a)h(W)m(CS)f(is)h(a)g(Celestial)g(Co)s(ordinate)g
-(System)0 2030 y FG(The)25 b(w)m(orld)g(co)s(ordinate)h(system)f(\(W)m
-(CS\))h(curren)m(tly)f(asso)s(ciated)i(with)e(an)g(image)h(ma)m(y)g
-(often)g(b)s(e)e(a)i(celestial)0 2143 y(co)s(ordinate)42
-b(system,)i(but)d(this)g(need)f(not)i(necessarily)g(b)s(e)e(the)i
-(case.)74 b(F)-8 b(or)42 b(instance,)i(instead)e(of)f(righ)m(t)0
-2256 y(ascension)31 b(and)f(declination,)j(an)d(image)i(migh)m(t)g(ha)m
-(v)m(e)g(a)f(W)m(CS)f(with)h(axes)g(represen)m(ting)g(w)m(a)m(v)m
-(elength)i(and)0 2369 y(slit)e(p)s(osition,)g(or)f(ma)m(yb)s(e)h(just)e
-(plain)i(old)f(pixels.)0 2555 y(If)43 b(y)m(ou)h(ha)m(v)m(e)h(obtained)
-e(a)h(W)m(CS)g(calibration)h(for)e(an)g(image,)49 b(as)43
-b(in)h Fu(x)p FG(3.4,)k(in)43 b(the)h(form)f(of)h(a)f(p)s(oin)m(ter)0
-2668 y(W)m(CSINF)m(O)25 b(to)g(a)g(F)-8 b(rameSet,)26
-b(then)e(y)m(ou)h(ma)m(y)g(determine)f(if)h(the)f(curren)m(t)g(co)s
-(ordinate)h(system)g(is)f(a)h(celestial)0 2781 y(one)31
-b(or)f(not,)h(as)g(follo)m(ws:)262 3101 y Ft(INTEGER)40
-b(FRAME)262 3201 y(LOGICAL)g(ISSKY)262 3400 y(...)0 3599
-y(*)87 b(Obtain)41 b(a)i(pointer)e(to)h(the)h(current)e(Frame)g(and)h
-(determine)e(if)j(it)g(is)g(a)0 3699 y(*)87 b(SkyFrame.)262
-3798 y(FRAME)41 b(=)i(AST_GETFRAME\()38 b(WCSINFO,)j(AST__CURRENT,)d
-(STATUS)j(\))262 3898 y(ISSKY)g(=)i(AST_ISASKYFRAME\()37
-b(FRAME,)k(STATUS)g(\))262 3998 y(CALL)g(AST_ANNUL\()f(FRAME,)h(STATUS)
-g(\))0 4331 y FG(This)c(will)h(set)g(ISSKY)e(to)i(.TR)m(UE.)g(if)g(the)
-f(W)m(CS)h(is)f(a)h(celestial)i(co)s(ordinate)f(system,)g(and)e(to)h
-(.F)-10 b(ALSE.)0 4444 y(otherwise.)0 4816 y Fw(3.9)112
-b(.)19 b(.)g(.)g(T)-9 b(est)37 b(if)g(a)h(W)m(CS)f(is)h(a)g(Sp)s
-(ectral)g(Co)s(ordinate)g(System)0 5073 y FG(T)-8 b(esting)26
-b(for)f(a)g(sp)s(ectral)g(co)s(ordinate)h(system)f(is)g(basically)i
-(the)e(same)g(as)h(testing)g(for)f(a)g(celestial)j(co)s(ordinate)0
-5186 y(system)23 b(\(see)h(the)e(previous)h(section\).)39
-b(The)23 b(one)g(di\013erence)g(is)g(that)g(y)m(ou)g(use)f(the)h(AST)p
-Fy(_)p FG(ISASPECFRAME)0 5298 y(routine)30 b(in)g(place)i(of)e(the)h
-(AST)p Fy(_)p FG(ISASKYFRAME)e(routine.)p 0 5425 1512
-4 v 104 5479 a Fs(5)138 5510 y Fr(By)f(pixel)g(co)r(ordinates,)j(w)n(e)
-e(mean)f(a)h(co)r(ordinate)g(system)f(in)g(whic)n(h)h(the)e(\014rst)h
-(pixel)h(in)f(the)g(image)h(is)g(cen)n(tred)e(on)i(\(1,1\))0
-5602 y(and)c(eac)n(h)g(pixel)g(is)g(a)h(unit)e(square.)35
-b(Note)25 b(that)f(the)h(w)n(orld)h(co)r(ordinates)g(will)g(not)f
-(necessarily)i(b)r(e)e(celestial)h(co)r(ordinates,)h(but)0
-5693 y(if)f(they)f(are,)i(then)e(they)g(will)i(b)r(e)e(in)h(radians.)p
-eop end
-%%Page: 19 29
-TeXDict begin 19 28 bop 0 52 a Fz(3.10)93 b(.)15 b(.)g(.)h(F)-8
-b(ormat)31 b(Co)s(ordinates)g(for)f(Displa)m(y)2052 b
-FG(19)0 351 y Fw(3.10)112 b(.)19 b(.)g(.)g(F)-9 b(ormat)38
-b(Co)s(ordinates)g(for)f(Displa)m(y)0 572 y FG(Once)44
-b(y)m(ou)g(ha)m(v)m(e)h(con)m(v)m(erted)h(pixel)e(co)s(ordinates)g(in)m
-(to)h(w)m(orld)f(co)s(ordinates)h(\()p Fu(x)p FG(3.7\),)k(y)m(ou)c(ma)m
-(y)f(w)m(an)m(t)h(to)0 685 y(format)35 b(them)g(as)g(text)g(b)s(efore)g
-(displa)m(ying)g(them.)54 b(T)m(ypically)-8 b(,)37 b(this)e(w)m(ould)f
-(con)m(v)m(ert)j(from)d(\(sa)m(y\))i(radians)0 798 y(in)m(to)d
-(something)g(more)g(comprehensible.)47 b(Using)32 b(the)h(F)-8
-b(rameSet)34 b(p)s(oin)m(ter)e(W)m(CSINF)m(O)h(obtained)g(in)f
-Fu(x)p FG(3.4)0 911 y(and)e(a)h(pair)f(of)g(w)m(orld)g(co)s(ordinates)i
-(XW)e(and)g(YW)h(\()p Fx(e.g.)f FG(see)h Fu(x)p FG(3.7\),)i(y)m(ou)d
-(could)h(pro)s(ceed)f(as)g(follo)m(ws:)262 1156 y Ft(CHARACTER)39
-b(*)44 b(\()f(20)f(\))i(XTEXT,)d(YTEXT)262 1256 y(DOUBLE)g(PRECISION)e
-(XW,)k(YW)262 1455 y(...)262 1655 y(XTEXT)e(=)i(AST_FORMAT\()c
-(WCSINFO,)i(1,)h(XW,)h(STATUS)e(\))262 1754 y(YTEXT)g(=)i(AST_FORMAT\()
-c(WCSINFO,)i(2,)h(YW,)h(STATUS)e(\))262 1954 y(WRITE)g(\()i(*,)g(199)f
-(\))h(XTEXT,)f(YTEXT)44 2053 y(199)86 b(FORMAT\()40 b('Position)g(=)j
-(',)g(A,)g(',)g(',)f(A)h(\))0 2312 y FG(Here,)31 b(the)g(second)f
-(argumen)m(t)h(to)g(AST)p Fy(_)p FG(F)m(ORMA)-8 b(T)30
-b(is)h(the)f(axis)h(n)m(um)m(b)s(er.)0 2474 y(With)d(celestial)i(co)s
-(ordinates,)e(this)g(will)f(usually)g(result)g(in)g(sexagesimal)j
-(notation,)f(suc)m(h)e(as)g(\\12:34:56.7".)0 2587 y(Ho)m(w)m(ev)m(er,)e
-(the)c(same)h(metho)s(d)e(ma)m(y)i(b)s(e)e(applied)h(to)h(an)m(y)f(t)m
-(yp)s(e)g(of)g(co)s(ordinates)h(and)f(appropriate)g(formatting)0
-2700 y(will)31 b(b)s(e)e(emplo)m(y)m(ed.)0 2862 y(F)-8
-b(or)36 b(more)g(information)g(ab)s(out)f(formatting)h(co)s(ordinate)g
-(v)-5 b(alues)36 b(and)f(ho)m(w)g(to)i(con)m(trol)f(the)g(st)m(yle)h
-(of)e(for-)0 2975 y(matting)27 b(used,)f(see)h Fu(x)p
-FG(7.6)g(and)e Fu(x)p FG(8.6.)41 b(If)25 b(necessary)-8
-b(,)28 b(also)f(see)f Fu(x)p FG(7.7)i(for)d(details)i(of)f(ho)m(w)g(to)
-g(\\normalise")i(a)e(set)0 3088 y(of)31 b(co)s(ordinates)g(so)g(that)g
-(they)f(lie)i(within)e(the)g(standard)g(range)h(\()p
-Fx(e.g.)f FG(0)h(to)g(24)g(hours)f(for)g(righ)m(t)h(ascension)0
-3201 y(and)f Fu(\006)p FG(90)338 3168 y Fq(\016)408 3201
-y FG(for)g(declination\).)0 3493 y Fw(3.11)112 b(.)19
-b(.)g(.)g(Displa)m(y)38 b(Co)s(ordinates)h(as)f(they)f(are)h(T)-9
-b(ransformed)0 3713 y FG(In)41 b(addition)h(to)g(formatting)g(co)s
-(ordinates)g(as)g(part)g(of)f(a)h(program's)g(output,)i(y)m(ou)e(ma)m
-(y)g(also)g(w)m(an)m(t)h(to)0 3826 y(examine)35 b(co)s(ordinate)f(v)-5
-b(alues)34 b(while)g(debugging)g(y)m(our)g(program.)51
-b(T)-8 b(o)34 b(sa)m(v)m(e)i(time,)f(y)m(ou)f(can)g(\\ea)m(v)m(esdrop")
-0 3939 y(on)e(the)g(co)s(ordinate)h(v)-5 b(alues)33 b(b)s(eing)f(pro)s
-(cessed)f(ev)m(ery)i(time)g(they)f(are)h(transformed.)45
-b(F)-8 b(or)33 b(example,)g(when)0 4052 y(using)38 b(the)g(F)-8
-b(rameSet)40 b(p)s(oin)m(ter)e(W)m(CSINF)m(O)h(obtained)g(in)f
-Fu(x)p FG(3.4)i(to)f(transform)e(co)s(ordinates)i(\()p
-Fu(x)p FG(3.7\),)k(y)m(ou)0 4165 y(could)30 b(insp)s(ect)h(the)f(co)s
-(ordinate)h(v)-5 b(alues)31 b(as)g(follo)m(ws:)262 4411
-y Ft(CALL)41 b(AST_SET\()g(WCSINFO,)f('Report=1',)f(STATUS)i(\))262
-4511 y(CALL)g(AST_TRAN2\()f(WCSINFO,)g(N,)j(XPIXEL,)e(YPIXEL,)f
-(.TRUE.,)218 4610 y(:)1220 b(XWORLD,)41 b(YWORLD,)f(STATUS)h(\))0
-4869 y FG(By)32 b(setting)h(the)f(F)-8 b(rameSet's)33
-b(Rep)s(ort)e(attribute)h(to)h(1,)f(co)s(ordinate)h(transformations)f
-(are)g(automatically)0 4982 y(displa)m(y)m(ed)f(on)f(the)h(program's)f
-(standard)g(output)g(stream,)h(appropriately)f(formatted,)h(for)g
-(example:)227 5241 y Fy(\(42.1087,)46 b(20.2717\))f(-->)i(\(2:06:03.0,)
-e(34:22:39\))227 5354 y(\(43.0197,)h(21.1705\))f(-->)i(\(2:08:20.6,)e
-(35:31:24\))227 5467 y(\(43.9295,)h(22.0716\))f(-->)i(\(2:10:38.1,)e
-(36:40:09\))227 5580 y(\(44.8382,)h(22.9753\))f(-->)i(\(2:12:55.6,)e
-(37:48:55\))227 5693 y(\(45.7459,)h(23.8814\))f(-->)i(\(2:15:13.1,)e
-(38:57:40\))p eop end
-%%Page: 20 30
-TeXDict begin 20 29 bop 0 52 a FG(20)3035 b Fz(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)227 351 y Fy(\(46.6528,)46 b(24.7901\))f(-->)i
-(\(2:17:30.6,)e(40:06:25\))227 464 y(\(47.5589,)h(25.7013\))f(-->)i
-(\(2:19:48.1,)e(41:15:11\))227 577 y(\(48.4644,)h(26.6149\))f(-->)i
-(\(2:22:05.6,)e(42:23:56\))227 690 y(\(49.3695,)h(27.5311\))f(-->)i
-(\(2:24:23.1,)e(43:32:41\))227 803 y(\(50.2742,)h(28.4499\))f(-->)i
-(\(2:26:40.6,)e(44:41:27\))0 1074 y FG(F)-8 b(or)38 b(a)f(complete)h
-(description)f(of)g(the)g(Rep)s(ort)f(attribute,)k(see)d(its)g(en)m
-(try)g(in)g(App)s(endix)e(C.)59 b(F)-8 b(or)38 b(further)0
-1187 y(details)31 b(of)g(ho)m(w)f(to)h(set)g(and)f(enquire)g(attribute)
-h(v)-5 b(alues,)31 b(see)g Fu(x)p FG(4.6)h(and)e Fu(x)p
-FG(4.5.)0 1490 y Fw(3.12)112 b(.)19 b(.)g(.)g(Read)38
-b(Co)s(ordinates)g(En)m(tered)f(b)m(y)h(a)f(User)0 1716
-y FG(In)c(addition)g(to)h(writing)g(out)f(co)s(ordinate)h(v)-5
-b(alues)34 b(generated)g(b)m(y)g(y)m(our)f(program)g(\()p
-Fu(x)p FG(3.10\),)k(y)m(ou)d(ma)m(y)g(also)0 1829 y(need)c(to)h(accept)
-h(co)s(ordinates)f(en)m(tered)g(b)m(y)f(a)h(user,)f(or)g(p)s(erhaps)f
-(read)h(from)g(a)h(\014le.)41 b(In)29 b(this)i(case,)g(y)m(ou)g(will)0
-1942 y(probably)g(w)m(an)m(t)i(to)g(allo)m(w)g(\\free-format")h(input,)
-d(so)h(that)h(the)f(user)f(has)h(some)g(\015exibilit)m(y)h(in)f(the)g
-(format)0 2055 y(that)f(can)g(b)s(e)e(used.)40 b(Y)-8
-b(ou)31 b(will)g(probably)e(also)j(w)m(an)m(t)f(to)g(detect)h(an)m(y)f
-(t)m(yping)f(errors.)0 2220 y(Let's)f(assume)g(that)g(y)m(ou)g(w)m(an)m
-(t)h(to)f(read)g(a)g(n)m(um)m(b)s(er)e(of)i(lines)g(of)g(text,)h(eac)m
-(h)g(con)m(taining)h(the)d(w)m(orld)h(co)s(ordi-)0 2333
-y(nates)g(of)g(a)g(single)g(p)s(oin)m(t,)g(and)f(to)h(split)g(eac)m(h)g
-(line)g(in)m(to)h(individual)d(n)m(umerical)i(co)s(ordinate)h(v)-5
-b(alues.)40 b(Using)0 2446 y(the)31 b(F)-8 b(rameSet)31
-b(p)s(oin)m(ter)g(W)m(CSINF)m(O)f(obtained)h(earlier)g(\()p
-Fu(x)p FG(3.4\),)i(y)m(ou)e(could)f(pro)s(ceed)h(as)f(follo)m(ws:)262
-2704 y Ft(CHARACTER)39 b(TEXT)j(*)h(\()h(80)e(\))262
-2804 y(DOUBLE)f(PRECISION)e(COORD\()j(10)g(\))262 2903
-y(INTEGER)e(IAXIS,)h(N,)i(NAXES,)e(T)262 3103 y(...)0
-3302 y(*)87 b(Obtain)41 b(the)h(number)f(of)i(coordinate)d(axes)h(\(if)
-i(not)f(already)f(known\).)262 3402 y(NAXES)g(=)i(AST_GETI\()d
-(WCSINFO,)g('Naxes',)h(STATUS)g(\))0 3601 y(*)87 b(Loop)42
-b(to)g(read)g(each)g(line)g(of)h(input)f(text,)f(in)i(this)f(case)g
-(from)g(the)0 3700 y(*)87 b(standard)40 b(input)i(channel)e(\(your)i
-(programming)d(environment)g(will)j(probably)0 3800 y(*)87
-b(provide)40 b(a)k(better)d(way)h(of)h(reading)e(text)g(than)h(this\).)
-f(Set)i(the)f(index)g(T)h(to)0 3900 y(*)87 b(the)42 b(start)g(of)g
-(each)g(line)g(read.)44 3999 y(2)174 b(CONTINUE)262 4099
-y(READ\()41 b(*,)i('\(A\)',)e(END=99)g(\))i(TEXT)262
-4199 y(T)g(=)g(1)0 4398 y(*)87 b(Attempt)40 b(to)j(read)f(a)h
-(coordinate)d(for)i(each)g(axis.)262 4497 y(DO)g(3)h(IAXIS)f(=)h(1,)g
-(NAXES)392 4597 y(N)g(=)h(AST_UNFORMAT\()38 b(WCSINFO,)i(IAXIS,)h
-(TEXT\()h(T)h(:)g(\),)g(COORD\()e(IAXIS)g(\),)218 4697
-y(:)915 b(STATUS)41 b(\))0 4896 y(*)87 b(If)43 b(nothing)d(was)j(read)e
-(and)i(this)f(is)h(not)f(the)g(first)g(axis)g(and)g(the)g(end)h(of)0
-4996 y(*)87 b(the)42 b(text)g(has)g(not)h(been)f(reached,)e(try)i
-(stepping)f(over)g(a)j(separator)c(and)0 5095 y(*)87
-b(reading)40 b(again.)392 5195 y(IF)j(\()g(\()g(N)h(.EQ.)d(0)j(\))f
-(.AND.)e(\()j(IAXIS)d(.GT.)h(1)h(\))g(.AND.)218 5295
-y(:)348 b(\()43 b(T)h(.LT.)d(LEN\()h(STRING)g(\))h(\))g(\))g(THEN)523
-5394 y(T)g(=)g(T)h(+)f(1)523 5494 y(N)g(=)g(AST_UNFORMAT\()c(WCSINFO,)h
-(IAXIS,)h(TEXT\()g(T)j(:)f(\),)1308 5593 y(COORD\()e(IAXIS)g(\),)i
-(STATUS)e(\))392 5693 y(END)i(IF)p eop end
-%%Page: 21 31
-TeXDict begin 21 30 bop 0 52 a Fz(3.13)93 b(.)15 b(.)g(.)h(Create)31
-b(a)g(New)f(W)m(CS)h(Calibration)2055 b FG(21)0 451 y
-Ft(*)87 b(Quit)42 b(if)g(nothing)f(was)h(read,)g(otherwise)e(move)i(on)
-h(to)f(the)h(next)f(coordinate.)392 551 y(IF)h(\()g(N)g(.EQ.)f(0)h(\))h
-(GO)e(TO)h(4)392 650 y(T)g(=)h(T)f(+)g(N)44 750 y(3)174
-b(CONTINUE)44 849 y(4)g(CONTINUE)0 1049 y(*)87 b(Test)42
-b(for)g(the)g(possible)f(errors)g(that)h(may)g(occur...)0
-1248 y(*)87 b(Error)41 b(detected)g(by)h(AST)h(\(a)f(message)f(will)h
-(have)g(been)g(issued\).)262 1348 y(IF)g(\()h(STATUS)f(.NE.)f(0)j(\))f
-(THEN)392 1447 y(GO)g(TO)g(99)0 1646 y(*)87 b(Error)41
-b(in)i(input)f(data)f(at)i(character)d(TEXT\()i(T)h(+)g(N)g(:)g(T)g(+)h
-(N)f(\).)262 1746 y(ELSE)e(IF)i(\()g(\()h(T)f(.LT.)f(LEN\()g(STRING)f
-(\))i(\))g(.OR.)f(\()h(N)g(.EQ.)f(0)h(\))h(\))f(THEN)392
-1846 y(<handle)e(the)h(error,)f(or)i(report)e(your)h(own)h(message)d
-(here>)392 1945 y(GO)j(TO)g(99)262 2145 y(ELSE)392 2244
-y(<coordinates)c(were)j(read)g(OK>)262 2344 y(END)g(IF)0
-2543 y(*)87 b(Return)41 b(to)i(read)f(the)g(next)g(input)f(line.)262
-2643 y(GO)h(TO)h(2)44 2742 y(99)130 b(CONTINUE)0 3034
-y FG(This)24 b(algorithm)i(has)f(the)g(adv)-5 b(an)m(tage)27
-b(of)e(accepting)i(free-format)f(input)e(in)g(whatev)m(er)i(st)m(yle)g
-(is)f(appropriate)0 3147 y(for)i(the)h(w)m(orld)g(co)s(ordinates)g(in)f
-(use)h(\(under)e(the)i(con)m(trol)h(of)f(the)g(F)-8 b(rameSet)29
-b(whose)e(p)s(oin)m(ter)h(y)m(ou)g(pro)m(vide\).)0 3259
-y(F)-8 b(or)23 b(example,)i(w)m(a)m(v)m(elength)f(v)-5
-b(alues)23 b(migh)m(t)f(b)s(e)g(read)g(as)g(\015oating)h(p)s(oin)m(t)g
-(n)m(um)m(b)s(ers)d(\()p Fx(e.g.)i FG(\\1.047")j(or)d(\\4787"\),)0
-3372 y(whereas)33 b(celestial)j(p)s(ositions)e(could)f(b)s(e)g(giv)m
-(en)i(in)e(sexagesimal)i(format)f(\()p Fx(e.g.)f FG(\\12:34:56")38
-b(or)33 b(\\12)i(34.5"\))0 3485 y(and)d(w)m(ould)h(b)s(e)f(con)m(v)m
-(erted)i(in)m(to)g(radians.)48 b(Individual)32 b(co)s(ordinate)h(v)-5
-b(alues)34 b(ma)m(y)f(b)s(e)f(separated)i(b)m(y)e(white)0
-3598 y(space)f(and/or)f(an)m(y)h(non-am)m(biguous)f(separator)h(c)m
-(haracter,)h(suc)m(h)e(as)h(a)g(comma.)0 3771 y(F)-8
-b(or)34 b(more)g(information)f(on)g(reading)h(co)s(ordinate)g(v)-5
-b(alues)34 b(using)f(the)g(AST)p Fy(_)p FG(UNF)m(ORMA)-8
-b(T)34 b(function,)g(see)0 3884 y Fu(x)p FG(7.8.)50 b(F)-8
-b(or)34 b(details)g(of)g(ho)m(w)f(sexagesimal)i(formats)e(are)h
-(handled,)f(and)f(the)i(forms)e(of)i(input)e(that)h(ma)m(y)h(b)s(e)0
-3996 y(used)c(for)g(for)g(celestial)j(co)s(ordinates,)e(see)g
-Fu(x)p FG(8.7.)0 4322 y Fw(3.13)112 b(.)19 b(.)g(.)g(Create)37
-b(a)h(New)f(W)m(CS)g(Calibration)0 4558 y FG(This)29
-b(section)h(describ)s(es)f(ho)m(w)g(to)h(add)f(a)h(W)m(CS)f
-(calibration)i(to)f(a)g(data)g(set)g(whic)m(h)f(y)m(ou)g(are)h
-(creating)h(from)0 4671 y(scratc)m(h,)h(rather)e(than)g(mo)s(difying)g
-(an)g(existing)h(data)g(set.)0 4843 y(In)d(most)g(common)h(cases,)h
-(the)e(simplest)g(w)m(a)m(y)i(to)f(create)g(a)g(new)f(W)m(CS)g
-(calibration)i(from)e(scratc)m(h)h(is)f(prob-)0 4956
-y(ably)i(to)h(create)h(a)e(set)h(of)f(strings)g(describing)g(the)g
-(required)g(calibration)h(in)f(terms)g(of)g(the)h(k)m(eyw)m(ords)f
-(used)0 5069 y(b)m(y)k(the)g(FITS)g(W)m(CS)g(standard,)g(and)g(then)g
-(con)m(v)m(ert)h(these)g(strings)f(in)m(to)h(an)f(AST)f(F)-8
-b(rameSet)36 b(describing)0 5182 y(the)d(calibration.)48
-b(This)32 b(F)-8 b(rameSet)33 b(can)g(then)f(b)s(e)g(used)g(for)g(man)m
-(y)h(other)f(purp)s(oses,)g(or)g(simply)g(stored)h(in)0
-5295 y(the)e(data)g(set.)0 5467 y(The)h(full)h(FITS-W)m(CS)g(standard)f
-(is)h(quite)g(in)m(v)m(olv)m(ed,)j(curren)m(tly)d(running)e(to)i(four)g
-(separate)h(pap)s(ers,)e(but)0 5580 y(the)42 b(basic)g(k)m(ernel)g(is)g
-(quite)g(simple,)j(in)m(v)m(olving)e(the)f(follo)m(wing)i(k)m(eyw)m
-(ords)e(\(all)h(of)f(whic)m(h)f(end)g(with)h(an)0 5693
-y(in)m(teger)32 b(axis)f(index,)f(indicated)h(b)s(elo)m(w)f(b)m(y)h
-Fp(<)25 b(i)g(>)p FG(\):)p eop end
-%%Page: 22 32
-TeXDict begin 22 31 bop 0 52 a FG(22)3035 b Fz(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)0 351 y FE(CRPIX<i>)227 464 y FG(hold)30
-b(the)h(pixel)g(co)s(ordinates)g(at)g(a)g(reference)f(p)s(oin)m(t)0
-652 y FE(CR)-12 b(V)g(AL<i>)227 765 y FG(hold)30 b(the)h(corresp)s
-(onding)e(W)m(CS)i(co)s(ordinates)g(at)g(the)f(reference)h(p)s(oin)m(t)
-0 953 y FE(CTYPE<i>)227 1065 y FG(name)i(the)f(quan)m(tit)m(y)h
-(represen)m(ted)f(b)m(y)h(the)f(W)m(CS)g(axes,)i(together)f(with)f(the)
-h(pro)5 b(jection)32 b(algorithm)227 1178 y(used)e(to)h(con)m(v)m(ert)h
-(the)e(scaled)i(and)d(rotated)j(pixel)f(co)s(ordinates)g(to)g(W)m(CS)f
-(co)s(ordinates.)0 1366 y FE(CD<i>)p Fy(_)p FE(<j>)227
-1479 y FG(a)i(set)g(of)f(k)m(eyw)m(ords)h(whic)m(h)e(sp)s(ecify)h(the)h
-(elemen)m(ts)g(of)g(a)f(matrix.)44 b(This)30 b(matrix)i(scales)g(pixel)
-g(o\013sets)227 1592 y(from)41 b(the)f(reference)i(p)s(oin)m(t)e(in)m
-(to)i(the)f(o\013sets)h(required)e(as)h(input)e(b)m(y)i(the)g(pro)5
-b(jection)41 b(algorithm)227 1705 y(sp)s(eci\014ed)e(b)m(y)g(the)h
-(CTYPE)e(k)m(eyw)m(ords.)68 b(This)39 b(matrix)g(sp)s(eci\014es)g(the)h
-(scale)g(and)f(rotation)i(of)e(the)227 1818 y(image.)63
-b(If)36 b(there)i(is)f(no)g(rotation)h(the)g(o\013-diagonal)h(elemen)m
-(ts)g(of)e(the)g(matrix)h(\()p Fx(e.g.)60 b FG(CD1)p
-Fy(_)p FG(2)38 b(and)227 1931 y(CD2)p Fy(_)p FG(1\))32
-b(can)e(b)s(e)g(omitted.)0 2193 y(As)37 b(an)h(example)g(consider)f
-(the)h(common)g(case)g(of)g(a)g(simple)f(2D)i(image)g(of)e(the)h(sky)f
-(in)g(whic)m(h)h(north)e(is)0 2306 y(parallel)f(to)f(the)g(second)g
-(pixel)g(axis)g(and)f(east)i(parallel)f(to)h(the)f(\(negativ)m(e\))i
-(\014rst)d(pixel)h(axis.)51 b(The)33 b(image)0 2419 y(scale)27
-b(is)f(1.2)h(arc-seconds)f(p)s(er)f(pixel)h(on)f(b)s(oth)g(axes,)j(and)
-d(the)h(image)h(is)f(presumed)e(to)i(ha)m(v)m(e)h(b)s(een)e(obtained)0
-2532 y(with)35 b(a)h(tangen)m(t)g(plane)f(pro)5 b(jection.)56
-b(F)-8 b(urthermore,)37 b(it)f(is)f(kno)m(wn)g(that)g(pixel)h(co)s
-(ordinates)g(\(100.5,98.4\))0 2645 y(corresp)s(ond)31
-b(to)j(an)e(RA)h(of)f(11:00:10)k(and)c(a)h(Dec.)48 b(of)33
-b(-23:26:02.)51 b(A)33 b(suitable)g(set)g(of)f(FITS-W)m(CS)h(header)0
-2758 y(cards)d(could)h(b)s(e:)227 3007 y Ft(CTYPE1)85
-b(=)43 b('RA---TAN')301 b(/)43 b(Axis)f(1)h(represents)d(RA)j(with)f(a)
-h(tan)f(projection)227 3107 y(CTYPE2)85 b(=)43 b('DEC--TAN')301
-b(/)43 b(Axis)f(2)h(represents)d(Dec)i(with)g(a)h(tan)g(projection)227
-3206 y(CRPIX1)85 b(=)43 b(100.5)521 b(/)43 b(Pixel)f(coordinates)d(of)k
-(reference)c(point)227 3306 y(CRPIX2)85 b(=)43 b(98.4)565
-b(/)43 b(Pixel)f(coordinates)d(of)k(reference)c(point)227
-3406 y(CRVAL1)85 b(=)43 b(165.04167)345 b(/)43 b(Degrees)e(equivalent)e
-(of)k("11:00:10")d(hours)227 3505 y(CRVAL2)85 b(=)43
-b(-23.433889)301 b(/)43 b(Decimal)e(equivalent)e(of)k("-23:26:02")c
-(degrees)227 3605 y(CD1_1)129 b(=)43 b(-0.0003333333)169
-b(/)43 b(Decimal)e(degrees)g(equivalent)e(of)k(-1.2)f(arc-seconds)227
-3704 y(CD2_2)129 b(=)43 b(0.0003333333)213 b(/)43 b(Decimal)e(degrees)g
-(equivalent)e(of)k(1.2)f(arc-seconds)0 3967 y FG(Notes:)136
-4204 y Fu(\017)k FG(a)37 b(FITS)f(header)g(card)h(b)s(egins)f(with)g
-(the)g(k)m(eyw)m(ord)h(name)g(starting)g(at)g(column)g(1,)h(has)f(an)f
-(equals)227 4317 y(sign)31 b(in)f(column)g(9,)h(and)f(the)g(k)m(eyw)m
-(ord)h(v)-5 b(alue)31 b(in)f(columns)g(11)h(to)g(80.)136
-4505 y Fu(\017)46 b FG(string)31 b(v)-5 b(alues)30 b(m)m(ust)h(b)s(e)e
-(enclosed)i(in)f(single)h(quotes.)136 4693 y Fu(\017)46
-b FG(celestial)33 b(longitude)e(and)f(latitude)h(m)m(ust)g(b)s(oth)e(b)
-s(e)h(sp)s(eci\014ed)g(in)g(decimal)h(degrees.)136 4881
-y Fu(\017)46 b FG(the)28 b(CD1)p Fy(_)p FG(1)g(v)-5 b(alue)29
-b(is)e(negativ)m(e)j(to)f(indicate)f(that)h(RA)e(increases)i(as)e(the)h
-(\014rst)f(pixel)h(axis)g(decreases.)136 5068 y Fu(\017)46
-b FG(the)31 b(\(RA,Dec\))h(co)s(ordinates)g(will)e(b)s(e)g(tak)m(en)h
-(as)g(ICRS)e(co)s(ordinates.)42 b(F)-8 b(or)31 b(FK5)g(y)m(ou)f(should)
-g(add:)427 5268 y Ft(RADESYS)41 b(=)i('FK5')427 5367
-y(EQUINOX)e(=)i(2005.6)227 5580 y FG(The)38 b(EQUINO)m(X)f(v)-5
-b(alue)39 b(defaults)e(to)i(J2000.0)h(if)d(omitted.)64
-b(FK4)38 b(can)g(also)h(b)s(e)e(used)g(in)h(place)g(of)227
-5693 y(FK5,)31 b(in)f(whic)m(h)g(case)i(EQUINO)m(X)e(defaults)h(to)g
-(B1950.0.)p eop end
-%%Page: 23 33
-TeXDict begin 23 32 bop 0 52 a Fz(3.14)93 b(.)15 b(.)g(.)h(Mo)s(dify)30
-b(a)h(W)m(CS)f(Calibration)2240 b FG(23)0 351 y(Once)21
-b(y)m(ou)g(ha)m(v)m(e)h(created)g(these)f(FITS-W)m(CS)g(header)f(card)h
-(strings,)i(y)m(ou)e(should)f(store)h(them)g(in)f(a)i(FitsChan)0
-464 y(and)33 b(then)g(read)g(the)h(corresp)s(onding)e(F)-8
-b(rameSet)34 b(from)f(the)h(FitsChan.)49 b(Ho)m(w)35
-b(to)f(do)f(this)g(is)h(describ)s(ed)e(in)0 577 y Fu(x)p
-FG(3.4.)0 736 y(Ha)m(ving)g(created)g(the)f(W)m(CS)f(calibration,)j(y)m
-(ou)e(ma)m(y)g(w)m(an)m(t)h(to)f(store)g(it)h(in)e(a)h(data)h(\014le.)
-41 b(Ho)m(w)32 b(to)f(do)g(this)f(is)0 849 y(describ)s(ed)f(in)h
-Fu(x)p FG(3.15\).)768 816 y Fv(6)0 1008 y FG(If)39 b(the)h(required)f
-(W)m(CS)h(calibration)h(cannot)g(b)s(e)e(describ)s(ed)g(as)h(a)g(set)g
-(of)g(FITS-W)m(CS)g(headers,)i(then)d(a)0 1121 y(di\013eren)m(t)f
-(approac)m(h)f(is)g(necessary)-8 b(.)61 b(In)37 b(this)g(case,)j(y)m
-(ou)d(should)f(\014rst)g(create)j(a)e(F)-8 b(rame)38
-b(describing)f(pixel)0 1234 y(co)s(ordinates,)42 b(and)c(store)h(this)g
-(F)-8 b(rame)39 b(in)g(a)g(new)f(F)-8 b(rameSet.)67 b(Y)-8
-b(ou)39 b(should)f(then)g(create)i(a)f(new)g(F)-8 b(rame)0
-1347 y(describing)33 b(the)h(w)m(orld)f(co)s(ordinate)h(system.)50
-b(This)33 b(F)-8 b(rame)34 b(ma)m(y)g(b)s(e)f(a)h(sp)s(eci\014c)f(sub)s
-(class)g(of)g(F)-8 b(rame)35 b(suc)m(h)0 1460 y(as)c(a)f(SkyF)-8
-b(rame)31 b(for)f(celestial)j(co)s(ordinates,)e(a)g(Sp)s(ecF)-8
-b(rame)31 b(for)f(sp)s(ectral)g(co)s(ordinates,)i(a)e(Timeframe)h(for)0
-1573 y(time)40 b(co)s(ordinates,)j(or)d(a)g(CmpF)-8 b(rame)39
-b(for)h(a)g(com)m(bination)h(of)f(di\013eren)m(t)g(co)s(ordinates.)69
-b(Y)-8 b(ou)40 b(also)h(need)0 1685 y(to)35 b(create)g(a)g(suitable)f
-(Mapping)g(whic)m(h)g(transforms)f(pixel)h(co)s(ordinates)h(in)m(to)g
-(w)m(orld)f(co)s(ordinates.)52 b(AST)0 1798 y(pro)m(vides)32
-b(man)m(y)f(di\013eren)m(t)i(t)m(yp)s(es)e(of)h(Mappings,)g(all)h(of)f
-(whic)m(h)f(can)h(b)s(e)f(com)m(bined)h(together)h(in)f(arbitrary)0
-1911 y(fashions)c(to)g(create)i(more)e(complicated)h(Mappings.)40
-b(The)27 b(W)m(CS)h(F)-8 b(rame)29 b(should)e(then)h(b)s(e)f(added)g
-(in)m(to)i(the)0 2024 y(F)-8 b(rameSet,)32 b(using)e(the)g(Mapping)h
-(to)g(connect)g(the)g(W)m(CS)f(F)-8 b(rame)31 b(with)f(the)h(pixel)g(F)
--8 b(rame.)0 2312 y Fw(3.14)112 b(.)19 b(.)g(.)g(Mo)s(dify)38
-b(a)g(W)m(CS)f(Calibration)0 2530 y FG(The)c(usual)g(reason)g(for)h
-(wishing)e(to)j(mo)s(dify)d(the)i(W)m(CS)f(calibration)i(asso)s(ciated)
-g(with)e(a)h(dataset)g(is)g(that)0 2643 y(the)24 b(data)g(ha)m(v)m(e)h
-(b)s(een)e(geometrically)k(transformed)22 b(in)i(some)g(w)m(a)m(y)h
-(\(here,)g(w)m(e)f(will)g(assume)g(a)g(2-dimensional)0
-2755 y(image)36 b(dataset\).)54 b(This)33 b(causes)i(the)f(image)i
-(features)e(\(stars,)i(galaxies,)i Fx(etc.)p FG(\))52
-b(to)35 b(mo)m(v)m(e)h(with)d(resp)s(ect)i(to)0 2868
-y(the)29 b(grid)g(of)g(pixels)g(whic)m(h)f(they)h(o)s(ccup)m(y)-8
-b(,)30 b(so)g(that)f(an)m(y)g(co)s(ordinate)h(systems)f(previously)f
-(asso)s(ciated)j(with)0 2981 y(the)g(image)g(b)s(ecome)g(in)m(v)-5
-b(alid.)0 3140 y(T)d(o)34 b(correct)g(for)f(this,)g(it)h(is)f
-(necessary)g(to)h(set)g(up)e(a)h(Mapping)g(whic)m(h)g(expresses)g(the)g
-(p)s(ositions)g(of)g(image)0 3253 y(features)e(in)f(the)g(new)g(data)h
-(grid)f(in)g(terms)h(of)f(their)h(p)s(ositions)f(in)g(the)g(old)h
-(grid.)40 b(In)30 b(b)s(oth)g(cases,)h(the)g(grid)0 3366
-y(co)s(ordinates)f(w)m(e)g(use)g(will)f(ha)m(v)m(e)i(the)f(\014rst)f
-(pixel)h(cen)m(tred)g(at)g(\(1,1\))h(with)f(eac)m(h)g(pixel)g(b)s(eing)
-f(a)h(unit)f(square.)0 3525 y(AST)j(allo)m(ws)h(y)m(ou)g(to)g(correct)g
-(for)f(an)m(y)h(t)m(yp)s(e)f(of)h(geometrical)i(transformation)e(in)f
-(this)g(w)m(a)m(y)-8 b(,)34 b(so)f(long)g(as)f(a)0 3638
-y(suitable)c(Mapping)g(to)g(describ)s(e)f(it)i(can)f(b)s(e)f
-(constructed.)40 b(F)-8 b(or)28 b(purp)s(oses)e(of)i(illustration,)h(w)
-m(e)g(will)f(assume)0 3751 y(here)33 b(that)g(the)g(new)f(image)i(co)s
-(ordinates)f(XNEW)g(and)f(YNEW)i(can)f(b)s(e)f(expressed)g(in)g(terms)h
-(of)f(the)h(old)0 3864 y(co)s(ordinates)e(X)m(OLD)g(and)f(YOLD)g(as)h
-(follo)m(ws:)262 4098 y Ft(DOUBLE)41 b(PRECISION)e(XNEW,)j(XOLD,)g
-(YNEW,)f(YOLD)262 4198 y(DOUBLE)g(PRECISION)e(M\()k(4)g(\),)g(Z\()g(2)g
-(\))262 4397 y(...)262 4596 y(XNEW)e(=)j(XOLD)e(*)h(M\()f(1)i(\))f(+)g
-(YOLD)f(*)h(M\()g(2)g(\))g(+)g(Z\()g(1)g(\))262 4696
-y(YNEW)e(=)j(XOLD)e(*)h(M\()f(3)i(\))f(+)g(YOLD)f(*)h(M\()g(4)g(\))g(+)
-g(Z\()g(2)g(\))0 4943 y FG(where)32 b(M)g(is)g(a)h(2)p
-Fu(\002)p FG(2)g(transformation)f(matrix)g(and)g(Z)g(represen)m(ts)g(a)
-g(shift)g(of)g(origin.)47 b(This)31 b(is)h(therefore)h(a)0
-5056 y(general)c(linear)e(co)s(ordinate)i(transformation)f(whic)m(h)f
-(can)h(represen)m(t)f(displacemen)m(t,)j(rotation,)f(magni\014ca-)0
-5169 y(tion)i(and)f(shear.)0 5328 y(In)c(AST,)h(it)g(can)g(b)s(e)f
-(represen)m(ted)h(b)m(y)g(concatenating)i(t)m(w)m(o)g(Mappings.)39
-b(The)26 b(\014rst)g(is)h(a)h(MatrixMap,)h(whic)m(h)0
-5441 y(implemen)m(ts)i(the)f(matrix)h(m)m(ultiplication.)42
-b(The)30 b(second)g(is)g(a)h(WinMap,)g(whic)m(h)f(linearly)h
-(transforms)e(one)p 0 5516 1512 4 v 104 5570 a Fs(6)138
-5602 y Fr(If)23 b(y)n(ou)g(are)h(writing)g(the)e(W)n(CS)h(calibration)i
-(to)e(a)h(FITS)f(\014le)g(y)n(ou)f(ob)n(viously)h(ha)n(v)n(e)g(the)g(c)
-n(hoice)g(of)h(storing)g(the)f(FITS-W)n(CS)0 5693 y(cards)j(directly)-6
-b(.)p eop end
-%%Page: 24 34
-TeXDict begin 24 33 bop 0 52 a FG(24)3035 b Fz(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)0 351 y FG(co)s(ordinate)31 b(windo)m(w)f(on)g(to)h
-(another,)f(but)g(will)g(b)s(e)g(used)f(here)h(simply)g(to)h(implemen)m
-(t)f(the)h(shift)f(of)g(origin)0 464 y(\(alternativ)m(ely)-8
-b(,)37 b(a)c(ShiftMap)f(could)g(ha)m(v)m(e)i(b)s(een)e(used)g(in)g
-(place)i(of)e(a)h(WinMap\).)48 b(These)33 b(Mappings)f(ma)m(y)0
-577 y(b)s(e)e(constructed)g(and)g(concatenated)j(as)d(follo)m(ws:)262
-768 y Ft(DOUBLE)41 b(PRECISION)e(INA\()j(2)i(\),)e(INB\()g(2)h(\),)g
-(OUTA\()f(2)h(\),)g(OUTB\()e(2)i(\))262 868 y(INTEGER)d(MATRIXMAP,)g
-(WINMAP)262 1067 y(...)0 1266 y(*)87 b(Set)42 b(up)h(the)f(corners)f
-(of)i(a)g(unit)f(square.)262 1366 y(DATA)f(INA)i(/)g(2)g(*)g(0.0D0)f(/)
-262 1465 y(DATA)f(INB)i(/)g(2)g(*)g(1.0D0)f(/)0 1665
-y(*)87 b(The)42 b(MatrixMap)e(may)i(be)h(constructed)c(directly)h(from)
-i(the)h(matrix)e(M.)262 1764 y(MATRIXMAP)e(=)44 b(AST_MATRIXMAP\()37
-b(2,)43 b(2,)g(0,)g(M,)f(')i(',)e(STATUS)f(\))0 1963
-y(*)87 b(For)42 b(the)g(WinMap,)f(we)i(take)f(the)g(coordinates)d(of)k
-(the)f(corners)f(of)i(a)g(unit)0 2063 y(*)87 b(square)41
-b(\(window\))f(and)i(then)g(shift)g(them)g(by)h(the)f(required)e
-(amounts.)262 2163 y(OUTA\()h(1)i(\))g(=)h(INA\()d(1)j(\))f(+)g(Z\()g
-(1)g(\))262 2262 y(OUTA\()e(2)i(\))g(=)h(INA\()d(2)j(\))f(+)g(Z\()g(2)g
-(\))262 2362 y(OUTB\()e(1)i(\))g(=)h(INB\()d(1)j(\))f(+)g(Z\()g(1)g(\))
-262 2462 y(OUTB\()e(2)i(\))g(=)h(INB\()d(2)j(\))f(+)g(Z\()g(2)g(\))0
-2661 y(*)87 b(The)42 b(WinMap)f(will)h(then)g(implement)e(this)i
-(shift.)262 2760 y(WINMAP)f(=)i(AST_WINMAP\()c(2,)k(INA,)f(INB,)f
-(OUTA,)h(OUTB,)f(')j(',)e(STATUS)g(\))0 2960 y(*)87 b(Join)42
-b(the)g(two)g(Mappings)f(together,)f(so)i(that)g(they)g(are)g(applied)f
-(one)i(after)0 3059 y(*)87 b(the)42 b(other.)262 3159
-y(NEWMAP)f(=)i(AST_CMPMAP\()c(MATRIXMAP,)g(WINMAP,)i(1,)i(')g(',)g
-(STATUS)e(\))0 3363 y FG(Y)-8 b(ou)33 b(migh)m(t,)i(of)e(course,)h
-(create)h(an)m(y)e(other)g(form)g(of)g(Mapping)g(dep)s(ending)e(on)i
-(the)g(t)m(yp)s(e)h(of)f(geometrical)0 3476 y(transformation)g(in)m(v)m
-(olv)m(ed.)51 b(F)-8 b(or)33 b(an)g(o)m(v)m(erview)i(of)e(the)g
-(Mappings)g(pro)m(vided)g(b)m(y)g(AST,)f(see)i Fu(x)p
-FG(2.2,)h(and)e(for)0 3589 y(a)g(description)g(of)f(the)h(capabilities)
-i(of)e(eac)m(h)g(class)h(of)f(Mapping,)g(see)g(its)g(en)m(try)g(in)f
-(App)s(endix)f(D.)48 b(F)-8 b(or)34 b(an)0 3702 y(o)m(v)m(erview)e(of)f
-(ho)m(w)f(individual)g(Mappings)g(ma)m(y)h(b)s(e)f(com)m(bined,)g(see)h
-Fu(x)p FG(2.3)h(\()p Fu(x)p FG(6)g(giv)m(es)f(more)g(details\).)0
-3850 y(Assuming)21 b(y)m(ou)h(ha)m(v)m(e)h(obtained)e(a)h(W)m(CS)g
-(calibration)h(for)e(y)m(our)h(original)h(image)f(in)g(the)f(form)g(of)
-h(a)g(p)s(oin)m(ter)g(to)0 3963 y(a)g(F)-8 b(rameSet,)25
-b(W)m(CSINF)m(O1)d(\()p Fu(x)p FG(3.4\),)k(the)21 b(Mapping)h(created)g
-(ab)s(o)m(v)m(e)h(ma)m(y)f(b)s(e)f(used)g(to)h(pro)s(duce)e(a)i
-(calibration)0 4076 y(for)30 b(the)h(new)f(image)h(as)g(follo)m(ws:)262
-4267 y Ft(INTEGER)40 b(WCSINFO1,)g(WCSINFO2)262 4466
-y(...)0 4665 y(*)87 b(If)43 b(necessary,)c(make)j(a)h(copy)f(of)h(the)f
-(WCS)g(calibration,)d(since)j(we)g(are)0 4765 y(*)87
-b(about)41 b(to)i(alter)f(it.)262 4865 y(WCSINFO2)e(=)j(AST_COPY\()d
-(WCSINFO1,)g(STATUS)h(\))0 5064 y(*)87 b(Re-map)41 b(the)h(base)g
-(Frame)g(so)g(that)g(it)h(refers)e(to)i(the)f(new)h(data)f(grid)0
-5163 y(*)87 b(instead)40 b(of)j(the)g(old)f(one.)262
-5263 y(CALL)f(AST_REMAPFRAME\()d(WCSINFO2,)i(AST__BASE,)f(NEWMAP,)i
-(STATUS)g(\))0 5467 y FG(This)24 b(will)h(pro)s(duce)f(a)h(p)s(oin)m
-(ter,)i(W)m(CSINF)m(O2,)g(to)f(a)f(new)f(F)-8 b(rameSet)26
-b(in)f(whic)m(h)g(all)h(the)f(co)s(ordinate)g(systems)0
-5580 y(asso)s(ciated)34 b(with)e(the)g(original)i(image)g(are)e(mo)s
-(di\014ed)g(so)g(that)h(they)g(are)g(correctly)g(registered)g(with)g(y)
-m(our)0 5693 y(new)d(image)h(instead.)p eop end
-%%Page: 25 35
-TeXDict begin 25 34 bop 0 52 a Fz(3.15)93 b(.)15 b(.)g(.)h(W)-8
-b(rite)32 b(a)e(Mo)s(di\014ed)g(W)m(CS)g(Calibration)h(to)h(a)e
-(Dataset)1399 b FG(25)0 351 y(F)-8 b(or)26 b(more)e(information)h(ab)s
-(out)g(re-mapping)f(the)h(F)-8 b(rames)26 b(within)e(a)h(F)-8
-b(rameSet,)28 b(see)d Fu(x)p FG(14.4.)41 b(Also)25 b(see)h
-Fu(x)p FG(14.5)0 464 y(for)35 b(a)g(similar)g(example)g(to)h(the)f(ab)s
-(o)m(v)m(e,)i(applicable)f(to)f(the)g(case)h(of)f(reducing)f(the)h
-(size)h(of)f(an)g(image)h(b)m(y)0 577 y(binning.)0 872
-y Fw(3.15)112 b(.)19 b(.)g(.)g(W)-9 b(rite)36 b(a)i(Mo)s(di\014ed)h(W)m
-(CS)e(Calibration)i(to)e(a)h(Dataset)0 1094 y FG(If)g(y)m(ou)h(ha)m(v)m
-(e)g(mo)s(di\014ed)f(the)g(W)m(CS)h(calibration)g(asso)s(ciated)h(with)
-e(a)h(dataset,)j(suc)m(h)c(as)h(in)f(the)h(example)0
-1207 y(ab)s(o)m(v)m(e)32 b(\()p Fu(x)p FG(3.14\),)h(then)d(y)m(ou)h
-(will)f(need)g(to)i(write)e(the)h(mo)s(di\014ed)e(v)m(ersion)i(out)f
-(along)i(with)e(an)m(y)h(new)e(data.)0 1371 y(In)c(the)h(same)g(w)m(a)m
-(y)h(as)f(when)f(reading)h(a)g(W)m(CS)g(calibration)h(\()p
-Fu(x)p FG(3.4\),)i(ho)m(w)d(y)m(ou)g(do)g(this)g(will)g(dep)s(end)e(on)
-i(y)m(our)0 1483 y(data)k(system,)g(but)f(w)m(e)h(will)g(assume)f(that)
-h(y)m(ou)g(wish)e(to)j(generate)f(a)g(set)g(of)g(FITS)f(header)g(cards)
-g(that)h(can)0 1596 y(b)s(e)35 b(stored)i(with)e(the)h(data.)59
-b(Y)-8 b(ou)36 b(should)f(usually)h(mak)m(e)h(preparations)f(for)g
-(doing)g(this)g(when)f(y)m(ou)h(\014rst)0 1709 y(read)f(the)g(W)m(CS)g
-(calibration)h(from)f(y)m(our)f(input)g(dataset)j(b)m(y)d(mo)s(difying)
-h(the)g(example)g(giv)m(en)h(in)f Fu(x)p FG(3.4)h(as)0
-1822 y(follo)m(ws:)262 2073 y Ft(INTEGER)k(FITSCHAN1,)g(WCSINFO1)262
-2172 y(CHARACTER)f(*)44 b(\()f(20)f(\))i(ENCODE)262 2372
-y(...)0 2571 y(*)87 b(Create)41 b(an)i(input)e(FitsChan)f(and)j(fill)f
-(it)g(with)g(FITS)g(header)f(cards.)h(Note,)0 2671 y(*)87
-b(if)43 b(you)f(have)g(all)g(the)g(header)g(cards)f(in)i(a)g(single)e
-(string,)g(use)h(AST_PUTCARDS)d(in)0 2770 y(*)87 b(place)41
-b(of)i(AST_PUTFITS.)262 2870 y(FITSCHAN1)c(=)44 b(AST_FITSCHAN\()38
-b(AST_NULL,)i(AST_NULL,)f(')44 b(',)e(STATUS)g(\))262
-2969 y(DO)g(1)h(ICARD)f(=)h(1,)g(NCARD)392 3069 y(CALL)f(AST_PUTFITS\()
-d(FITSCHAN1,)g(CARDS\()i(ICARD)h(\),)h(.FALSE.,)d(STATUS)h(\))44
-3169 y(1)174 b(CONTINUE)0 3368 y(*)87 b(Note)42 b(which)f(encoding)f
-(has)j(been)f(used)g(for)g(the)g(WCS)h(information.)262
-3468 y(ENCODE)e(=)i(AST_GETC\()d(FITSCHAN1,)f('Encoding',)g(STATUS)i
-(\);)0 3667 y(*)87 b(Rewind)41 b(the)h(input)g(FitsChan)e(and)i(read)g
-(the)h(WCS)f(information)d(from)j(it.)262 3766 y(CALL)f(AST_CLEAR\()f
-(FITSCHAN1,)f('Card',)i(STATUS)g(\))262 3866 y(WCSINFO1)f(=)j
-(AST_READ\()d(FITSCHAN1,)f(STATUS)i(\))0 4130 y FG(Note)33
-b(ho)m(w)e(w)m(e)h(ha)m(v)m(e)h(added)e(an)g(enquiry)g(to)h(determine)g
-(ho)m(w)f(the)h(W)m(CS)g(information)f(is)h(enco)s(ded)f(in)g(the)0
-4243 y(input)38 b(FITS)f(cards,)k(storing)e(the)f(resulting)h(string)f
-(in)g(the)h(ENCODE)f(v)-5 b(ariable.)66 b(This)38 b(m)m(ust)g(b)s(e)g
-(done)0 4356 y FE(b)s(efore)30 b FG(actually)i(reading)f(the)f(W)m(CS)h
-(calibration.)0 4519 y(Once)e(y)m(ou)h(ha)m(v)m(e)h(pro)s(duced)d(a)i
-(mo)s(di\014ed)e(W)m(CS)i(calibration)h(for)e(the)h(output)f(dataset)i
-(\()p Fx(e.g.)e Fu(x)p FG(3.14\),)j(in)d(the)0 4632 y(form)39
-b(of)h(a)h(F)-8 b(rameSet)41 b(iden)m(ti\014ed)f(b)m(y)f(the)i(p)s(oin)
-m(ter)e(W)m(CSINF)m(O2,)44 b(y)m(ou)c(can)g(pro)s(duce)f(a)h(new)g
-(FitsChan)0 4745 y(con)m(taining)32 b(the)e(output)g(FITS)g(header)g
-(cards)g(as)h(follo)m(ws:)262 4996 y Ft(INTEGER)40 b(FITSCHAN2,)g
-(JUNK,)h(WCSINFO2)262 5195 y(...)0 5394 y(*)87 b(Make)42
-b(a)h(copy)f(of)h(the)f(input)f(FitsChan,)f(AFTER)i(the)g(WCS)g
-(information)e(has)0 5494 y(*)87 b(been)42 b(read)g(from)g(it.)g(This)g
-(will)g(propagate)e(all)i(the)g(input)g(FITS)g(header)0
-5593 y(*)87 b(cards,)41 b(apart)g(from)h(those)g(describing)d(the)k
-(WCS)f(calibration.)262 5693 y(FITSCHAN2)d(=)44 b(AST_COPY\()39
-b(FITSCHAN1,)h(STATUS)h(\))p eop end
-%%Page: 26 36
-TeXDict begin 26 35 bop 0 52 a FG(26)3035 b Fz(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)0 451 y Ft(*)87 b(If)43 b(necessary,)c(make)j
-(modifications)c(to)43 b(the)f(cards)g(in)g(FITSCHAN2)0
-551 y(*)87 b(\(e.g.)41 b(you)i(might)e(need)h(to)h(change)e(NAXIS1,)g
-(NAXIS2,)f(etc.,)i(to)h(account)d(for)0 650 y(*)87 b(a)43
-b(change)e(in)i(image)e(size\).)g(You)i(probably)d(only)i(need)g(to)h
-(do)f(this)g(if)h(your)0 750 y(*)87 b(data)42 b(system)f(does)h(not)g
-(provide)f(these)g(facilities)f(itself.)262 849 y(<details)g(not)i
-(shown)g(-)h(see)f(below>)0 1049 y(*)87 b(Alternatively,)38
-b(if)k(your)g(data)g(system)f(handles)g(the)h(propagation)d(of)k(FITS)0
-1148 y(*)87 b(header)41 b(cards)g(to)i(the)f(output)g(dataset)e(for)j
-(you,)f(then)f(simply)h(create)f(an)0 1248 y(*)87 b(empty)41
-b(FitsChan)g(to)h(contain)f(the)h(output)f(WCS)i(information)c(alone.)0
-1348 y(*)218 b(FITSCHAN2)39 b(=)44 b(AST_FITSCHAN\()38
-b(AST_NULL,)i(AST_NULL,)f(')44 b(',)e(STATUS)g(\))0 1547
-y(*)87 b(Rewind)41 b(the)h(new)h(FitsChan)d(\(if)i(necessary\))e(and)i
-(attempt)f(to)h(write)g(the)0 1646 y(*)87 b(output)41
-b(WCS)h(information)d(to)k(it)g(using)e(the)i(same)f(encoding)e(method)
-h(as)i(the)0 1746 y(*)87 b(input)41 b(dataset.)262 1846
-y(CALL)g(AST_SET\()g(FITSCHAN2,)e('Card=1,)h(Encoding=')g(//)j(ENCODE,)
-d(STATUS)h(\))262 1945 y(IF)h(\()h(AST_WRITE\()d(FITSCHAN2,)f
-(WCSINFO2,)h(STATUS)h(\))i(.EQ.)f(0)i(\))f(THEN)0 2145
-y(*)87 b(If)43 b(this)e(didn't)h(work)f(\(the)h(WCS)h(FrameSet)d(has)i
-(become)f(too)i(complex\),)d(then)0 2244 y(*)87 b(use)42
-b(the)g(native)g(AST)g(encoding)e(instead.)392 2344 y(CALL)i
-(AST_SETC\()e(FITSCHAN2,)g('Encoding',)f('NATIVE',)g(STATUS)j(\);)392
-2443 y(JUNK)g(=)h(AST_WRITE\()d(FITSCHAN2,)f(WCSINFO2,)h(STATUS)h(\);)
-262 2543 y(END)h(IF)0 2799 y FG(F)-8 b(or)40 b(details)f(of)g(ho)m(w)g
-(to)g(mo)s(dify)f(the)h(con)m(ten)m(ts)i(of)e(the)g(output)f(FitsChan)h
-(in)f(other)h(w)m(a)m(ys,)j(suc)m(h)d(as)g(b)m(y)0 2912
-y(adding,)30 b(o)m(v)m(er-writing)i(or)f(deleting)g(header)f(cards,)h
-(see)g Fu(x)p FG(16.4,)h Fu(x)p FG(16.9,)h Fu(x)p FG(16.8)f(and)e
-Fu(x)p FG(16.13.)0 3073 y(Once)38 b(y)m(ou)h(ha)m(v)m(e)g(assem)m(bled)
-g(the)f(output)g(FITS)g(cards,)i(y)m(ou)f(ma)m(y)f(retriev)m(e)i(them)e
-(from)g(the)h(FitsChan)0 3186 y(that)31 b(con)m(tains)h(them)e(as)g
-(follo)m(ws:)262 3428 y Ft(CHARACTER)39 b(*)44 b(\()f(80)f(\))i(CARD)
-262 3627 y(...)262 3827 y(CALL)d(AST_CLEAR\()f(FITSCHAN2,)f('Card',)i
-(STATUS)g(\))44 3926 y(5)174 b(CONTINUE)262 4026 y(IF)42
-b(\()h(AST_FINDFITS\()c(FITSCHAN2,)g('\045f',)j(CARD,)f(.TRUE.,)g
-(STATUS)g(\))i(\))g(THEN)392 4126 y(WRITE)f(\()h(*,)g('\(A\)')e(\))i
-(CARD)392 4225 y(GO)g(TO)g(5)262 4325 y(END)f(IF)0 4580
-y FG(Here,)35 b(w)m(e)e(ha)m(v)m(e)h(simply)f(written)g(eac)m(h)h(card)
-f(to)h(the)g(standard)e(output)h(unit,)g(but)g(y)m(ou)g(w)m(ould)g(ob)m
-(viously)0 4693 y(replace)e(this)g(with)f(a)g(subroutine)g(call)h(to)g
-(store)g(the)g(cards)f(in)g(y)m(our)h(output)f(dataset.)0
-4854 y(F)-8 b(or)44 b(data)f(systems)g(that)g(do)g(not)g(use)g(FITS)f
-(header)g(cards,)k(a)e(di\013eren)m(t)f(approac)m(h)g(ma)m(y)g(b)s(e)g
-(needed,)0 4967 y(p)s(ossibly)33 b(in)m(v)m(olving)i(use)f(of)f(a)i
-(Channel)d(or)i(XmlChan)f(\()p Fu(x)p FG(15\))j(rather)d(than)h(a)g
-(FitsChan.)51 b(In)33 b(the)h(case)g(of)0 5080 y(the)29
-b(Starlink)g(NDF)h(data)f(format,)h(for)f(example,)h(all)g(of)f(the)g
-(ab)s(o)m(v)m(e)h(ma)m(y)g(b)s(e)e(replaced)i(b)m(y)f(a)g(single)g
-(call)i(to)0 5193 y(the)e(routine)f(NDF)p Fy(_)p FG(PTW)m(CS|see)h
-(SUN/33.)41 b(The)28 b(whole)h(pro)s(cess)f(can)h(probably)e(b)s(e)h
-(encapsulated)h(in)f(a)0 5306 y(similar)j(w)m(a)m(y)g(for)f(most)h
-(other)g(data)g(systems,)f(whether)g(they)h(use)f(FITS)f(header)h
-(cards)h(or)f(not.)0 5467 y(F)-8 b(or)46 b(an)f(o)m(v)m(erview)i(of)f
-(ho)m(w)f(to)h(propagate)h(W)m(CS)e(information)h(through)e(data)i(pro)
-s(cessing)g(steps,)j(see)0 5580 y Fu(x)p FG(17.6.)42
-b(F)-8 b(or)29 b(more)f(information)g(ab)s(out)g(writing)g(W)m(CS)g
-(information)g(to)h(FitsChans,)f(see)h Fu(x)p FG(16.5)h(and)d
-Fu(x)p FG(17.7.)0 5693 y(F)-8 b(or)40 b(information)g(ab)s(out)f(the)h
-(options)f(for)h(enco)s(ding)f(W)m(CS)g(information)h(in)f(FITS)g
-(header)g(cards,)j(see)p eop end
-%%Page: 27 37
-TeXDict begin 27 36 bop 0 52 a Fz(3.16)93 b(.)15 b(.)g(.)h(Displa)m(y)
-31 b(a)g(Graphical)g(Co)s(ordinate)g(Grid)1836 b FG(27)507
-3235 y @beginspecial 15 @llx 138 @lly 489 @urx 648 @ury
-3318 @rwi @setspecial
-%%BeginDocument: sun210_figures/overgrid_bw.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 15 138 489 648
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1998/06/15 11:01:49
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-543.14 1777.49 4343.48 4343.48 re
-Y
-q[10 0 0 10 0 0]concat
-51 51 8[0.117417 0 0 0.117417 -6.377 -20.871]@85 image
-ai*)CcFL:2^:pAF
-UQ^:nNA^b:+92BA!!!!W='%;#B9T+/eC<sPjPU!ZlH]G0s8W,5Z`_$V`5KC(Z`&\DZZfIX-3/'Jz
-!!$8[Je2a7NO-R\n':4eqWe+1g&M*Ps8TEmY+;N*W3`7oZ]gB4>X8>n!(Hqg$3150!,%:8'k4,4R*!Y'
-jQ,CTn))XJs8W-!s+lkeSZ&<SZ\Xg$I:o)N$9Jt&'`\46zB8CaNK!VeYg!n^4cL9iOeDJdUs8W-!NIlA1LnfQR
-ChurK"Y1,a"Vh";!!!0&"TSOYCk<UX^:CtgeF2\`p#"H[eFikAs8W+iI9^5dB1urC7K<TR5l_Grz
-"TSN&$=[h'I8Pg,Y0#SCcL9iZs7Pj<lMpnas8S:!;*d9*4#SSh!#nTi+=dF'&-)\1!'=7)I@,5&Jsb'@
-lH/,Ep#P2plK[['s8W-!s"Qti.iSHg'`\469KPp;4%<:0!!!a'9MA,b&9<3*Y/J'-cHbM9lIkY!hq@;ps8W-!.gc7V
-z!!!!rEbn3B9O`DM&6F:#Eeo-0Ed+jmaj/ehalMOOlJM'Ug#W25s8W*!zz+@^0P2F1f3
-G at tP^Lja)kW/Z4bNL790\^]odhtlWkcLp8OjT#8[s8N'!z!!#;i at U*/(@WII!W+W8hY'lMENH1T#
-ZcTc=n'p%ZlLjH8qVTffs8W-!rr>,i2?3^W=)<(nJmrPEJs3OOS\Cl;\UC#hI<*HOeCip_cLpJ`p%@DBp#"'ps8W-!
-0kY<=4#%(O;+>"lI<UmBUTV>6^:CduB6&uUS^+CPqUt>jhq@;flK['k`7b1js8W+(Jp1[?Eah+NGAMkT
-I>t#4Z`^X0\[-mI>b/%#\]Naos6A\6hs/n`n*fPplMpnas8T$bJpiVk;/CGs>\o4*NMF4j`3-GrW3_kI
-R%q4+g"Gijn+HA2cK+iejR:d?s8W-!s,DGdR$3nsI<UK`7\bQpR)IL\^<+m8W0=0Y`4itNjQc$kjT#8Kn*93'lH0)+
-s8W-!Z]1?IR'V3WJs1"eLjc5?\[/HQ\\u%]Z^mJte at si:n)X0&lK[I1n)*3`g&M*Ps8W+tSUtmAQrfZR
-UPOo.Y+<+uUV=:\e at El-UTVPgcJS<kjQ-16jT#8VlK[j!s8W-!s8T7)JoZ[!@[!aMR&I@%PI%g1ft#DX
-`3Z"jY--('`8pUPn+u>1p$2SMn(He%s8W-!s-SdiEa4EaW3`XoUQ_(4URfNVlIj[^Y+qAOajf"s^=;W:lLjGqqXrqB
-lL4cQs8W-!USsBDSZ],_ZamE0W0=!_\_5liZam$aUSt-0g!o<Jhs]Y+p##62s8UC5s8W-!s8W+o^;Rsm
-PJkDRaksh=W2$o0cIBeXaj/SXUYj#>n*9c7jOrGep$2SBeDK?es8W-!s8UTZUVt*]cICP.eDJcteDJBi
-hp1]9adp_`hr!MfjR;C,p%n.Gs8)TgalNL%s8W-!s2<F/alLS$cIp^sai)l^eC<!tlK$IEcIC@^lMB31jR;1&qWdAB
-jQ-?ohuE`Vs8W-!^<+[RjQ,CTfu2RsalM@)cK*L#jQ,"Tajf5*lLjW7qX<_GlL3fpg&L-9s8W-!s8W,@
-eEZ>VlJK/0hs]X`e?7KSjM]a/n(HUpg$e"jqWdq<n*frLlK%X7lK&!Fs8W-!s8VBAeFhn`am.R?hpg05
-ZfLT.akuRPhpg`JlJLmllK\'=s8)ERn+tr1g&M*Ps8W-!s4P-3n':de`6RZ:jQb$sn+Gu,g!mb9hrNk`lK&!As7P(<
-n)*U,qVUtks8W-!s8W-!p%@5'htl6`g$dhZs6nIjp!3$`jQ,dun)Wd1ak>tEp#"j'qYK+,n'qC;s8W-!
-s8W,PlK%F,p!hman(I0_lH\;*g%sdjn+GSqhs/_alK[j2p%A"Hs7Q6Rp&G'ls8W-!s8UC5cK`^#hp1-P
-n*f_jhs//5hrOIkp$1i2lMC2HqX=:\p$1i2n,M\&s8W-!s8W-!s52_keDJsEcJRp[eF1]$jNd&OlMC2MjQc4,s8)cq
-p#PT1qX<nAp&G'ls8W-!s8W-!g%FX[hr":[n'ph+ft#5in)Wd&lK\67n(I"+lK[["n*9!&lMp/!n,NFf
-s8W-!s8W,[lI>+Khph>aqZ#jGai*YteC<sPht>mqp##'"jRrB<n+Gu!g&L?es8W-!s8W-!s8V05hs0[`
-n+H/Bn)WBJjOr5OlK\6=p$25Hn*f`+qWdAGs6oXRjOsS5s8W-!s8W-!s6B(+jQc4&s8)Ebn*eBDht?(,qX<,+jPTh!
-lLjH-eFi+qlL3F+p&G'ls8W-!s8W-!n(I0plK[I,qX=+McK+'Tg#))kp%mt=jSJQGlK[HqlK%X<hrNk`
-s8W-!s8W-!s8W,an*g,+qYKLBlMBt`cMHVup$_SHlK[[2lL4E!lLk#Rs6A\AjOsS5s8W-!s8W-!s8Vcl
-jRrQLs8W,qg!nO/p$^T!p%n at Ss5`8;lL4T7hp1-ZlMo/pjT#8[s8W-!s8W-!s6oFAqWdb7n*f`1eC<d*htl71jR;R6
-qWdqMs7Q'Mp&FL\ouZ:ps8W-!s8W-!s8W-!lMpPWs8(FKs6ALklL4E=jRq4+lL4$,qXs^Mp&F=Rp%A1]
-jR<-Ks8W-!s8W-!s8W,qn,N(Wp$_ALs4$N+n)X0<s53\GqYL6gs8)3Fp&F=Gn+HABs8W-!s8W-!s8W-!
-s8VBFs8VQ\s7Q'GlJM(!jPTh!s6An,lL4cLp%n.<n*9rLn)Ws;s8W-!s8W-!s8W-!s4Q]+qYK[RlK%$`p%@D=qXsmL
-aoCYks6B:RqXsm]lK\'BlI>k6s8W-!s8W-!s8W-!lL4TLg%G47lLji8p#PE!n*f06lMp>Gp&FmWp&F^R
-lL3fUs8W-!s8W-!s8W-!s8W,fn+HPMp%n at SjNd5oeGoC<p%@5"n*g;Vp$25HlMp>Ahs17As8W-!s8W-!
-s8W-!s8VQQqVV/1g!9'Tn*g;Vn+u>Ghs0LflK\'Bp&G'glK\'=lMpnas8W-!s8W-!s8W-!s5_l%g$edpqYKm]hr"Ip
-s6p!Kp%mA<p#PT<s6p!fqXs=Ws8W-!s8W-!s8W-!s8W-!g#))fp$2DRp"B3&n+H/Lg&LO0s6oXGs6oXR
-n*g,1p!3U;s8W-!s8W-!s8W-!s8W,qn+Gc7jT"N<n,Mk6jR<-Khs0n7qYKmXp#PfBcMICus8W-!s8W-!
-s8W-!s8W-!s8Vcbht?[Bs6AnGp&F+Ln*fr!qX<M6hs^7,p%@eHhs\M`s8W-!s8W-!s8W-!s8W-!rr~>
-Q
-5.04 w
-1 J
-1 j
-0 g
-2283 1777 m
-2286 1812 l
-2290 1870 l
-2293 1927 l
-2296 1985 l
-2299 2042 l
-2301 2100 l
-2302 2158 l
-2303 2216 l
-2303 2274 l
-2302 2332 l
-2301 2390 l
-2299 2448 l
-2297 2506 l
-2294 2564 l
-2291 2622 l
-2287 2680 l
-2282 2738 l
-2277 2796 l
-2271 2854 l
-2265 2913 l
-2258 2971 l
-2250 3029 l
-2242 3087 l
-2233 3145 l
-2223 3202 l
-2213 3260 l
-2203 3318 l
-2192 3376 l
-2180 3433 l
-2167 3491 l
-2154 3548 l
-2141 3606 l
-2126 3663 l
-2112 3720 l
-2096 3777 l
-2080 3834 l
-2063 3891 l
-2046 3948 l
-2028 4004 l
-2010 4061 l
-1991 4117 l
-1971 4173 l
-1951 4229 l
-1930 4284 l
-1909 4340 l
-1887 4395 l
-1865 4451 l
-1841 4505 l
-1818 4560 l
-1816 4564 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1813 4570 l
-1813 4570 l
-S
-1911 1777 m
-1913 1784 l
-1924 1834 l
-1935 1885 l
-1945 1936 l
-1955 1987 l
-1964 2038 l
-1973 2089 l
-1981 2141 l
-1989 2193 l
-1997 2244 l
-2004 2296 l
-2010 2349 l
-2016 2401 l
-2021 2453 l
-2026 2506 l
-2031 2559 l
-2035 2611 l
-2038 2664 l
-2041 2717 l
-2044 2770 l
-2045 2824 l
-2047 2877 l
-2048 2931 l
-2048 2984 l
-2048 3038 l
-2047 3092 l
-2046 3145 l
-2044 3199 l
-2042 3253 l
-2039 3307 l
-2035 3362 l
-2031 3416 l
-2027 3470 l
-2022 3524 l
-2016 3579 l
-2010 3633 l
-2003 3688 l
-1996 3742 l
-1988 3797 l
-1979 3851 l
-1970 3906 l
-1961 3960 l
-1950 4015 l
-1940 4070 l
-1928 4124 l
-1916 4179 l
-1904 4233 l
-1891 4288 l
-1877 4342 l
-1863 4397 l
-1848 4451 l
-1832 4506 l
-1816 4560 l
-1815 4564 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1813 4570 l
-1813 4570 l
-S
-1433 1777 m
-1446 1809 l
-1464 1851 l
-1482 1893 l
-1499 1935 l
-1516 1978 l
-1532 2020 l
-1549 2063 l
-1564 2106 l
-1580 2149 l
-1595 2193 l
-1610 2236 l
-1624 2280 l
-1638 2324 l
-1651 2368 l
-1665 2413 l
-1677 2457 l
-1690 2502 l
-1702 2547 l
-1714 2592 l
-1725 2637 l
-1736 2682 l
-1746 2728 l
-1756 2773 l
-1766 2819 l
-1775 2865 l
-1784 2911 l
-1793 2958 l
-1801 3004 l
-1808 3051 l
-1816 3097 l
-1822 3144 l
-1829 3191 l
-1835 3239 l
-1840 3286 l
-1845 3333 l
-1850 3381 l
-1854 3429 l
-1857 3477 l
-1861 3525 l
-1863 3573 l
-1866 3621 l
-1867 3670 l
-1869 3718 l
-1870 3767 l
-1870 3816 l
-1870 3865 l
-1869 3914 l
-1868 3963 l
-1866 4012 l
-1864 4062 l
-1862 4111 l
-1859 4161 l
-1855 4210 l
-1851 4260 l
-1846 4310 l
-1841 4360 l
-1835 4410 l
-1829 4460 l
-1822 4511 l
-1815 4561 l
-1814 4565 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-732 1777 m
-733 1778 l
-758 1811 l
-782 1843 l
-807 1876 l
-831 1908 l
-855 1941 l
-878 1974 l
-902 2007 l
-925 2041 l
-948 2074 l
-971 2108 l
-993 2141 l
-1015 2175 l
-1037 2209 l
-1059 2243 l
-1081 2278 l
-1102 2312 l
-1123 2347 l
-1143 2382 l
-1164 2417 l
-1184 2452 l
-1204 2487 l
-1224 2522 l
-1243 2558 l
-1262 2593 l
-1281 2629 l
-1300 2665 l
-1318 2701 l
-1336 2738 l
-1354 2774 l
-1371 2811 l
-1388 2847 l
-1405 2884 l
-1422 2921 l
-1438 2958 l
-1454 2995 l
-1470 3033 l
-1485 3070 l
-1500 3108 l
-1515 3146 l
-1530 3184 l
-1544 3222 l
-1558 3260 l
-1571 3299 l
-1584 3338 l
-1597 3376 l
-1610 3415 l
-1622 3454 l
-1634 3493 l
-1645 3533 l
-1657 3572 l
-1667 3612 l
-1678 3651 l
-1688 3691 l
-1698 3731 l
-1707 3772 l
-1716 3812 l
-1725 3852 l
-1733 3893 l
-1741 3934 l
-1749 3975 l
-1756 4016 l
-1763 4057 l
-1769 4098 l
-1775 4140 l
-1781 4181 l
-1786 4223 l
-1791 4265 l
-1795 4307 l
-1799 4349 l
-1803 4392 l
-1806 4434 l
-1809 4477 l
-1811 4519 l
-1813 4562 l
-1813 4565 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 2622 m
-551 2630 l
-577 2656 l
-602 2682 l
-628 2709 l
-653 2736 l
-678 2762 l
-703 2789 l
-728 2816 l
-753 2843 l
-777 2870 l
-801 2897 l
-825 2925 l
-849 2952 l
-873 2979 l
-896 3007 l
-920 3034 l
-943 3062 l
-966 3090 l
-988 3118 l
-1011 3146 l
-1033 3174 l
-1055 3202 l
-1077 3230 l
-1099 3258 l
-1120 3287 l
-1142 3315 l
-1163 3344 l
-1184 3372 l
-1204 3401 l
-1225 3430 l
-1245 3459 l
-1265 3488 l
-1285 3517 l
-1304 3546 l
-1324 3575 l
-1343 3605 l
-1362 3634 l
-1381 3664 l
-1399 3693 l
-1417 3723 l
-1435 3753 l
-1453 3783 l
-1470 3813 l
-1488 3843 l
-1505 3873 l
-1521 3903 l
-1538 3934 l
-1554 3964 l
-1570 3995 l
-1586 4026 l
-1601 4056 l
-1616 4087 l
-1631 4118 l
-1646 4150 l
-1661 4181 l
-1675 4212 l
-1689 4244 l
-1702 4275 l
-1715 4307 l
-1728 4339 l
-1741 4370 l
-1754 4402 l
-1766 4435 l
-1778 4467 l
-1789 4499 l
-1800 4532 l
-1811 4564 l
-1812 4567 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 3506 m
-561 3518 l
-588 3538 l
-615 3558 l
-642 3577 l
-669 3597 l
-696 3616 l
-723 3636 l
-749 3656 l
-776 3675 l
-802 3695 l
-828 3714 l
-854 3734 l
-880 3754 l
-906 3773 l
-932 3793 l
-957 3813 l
-982 3832 l
-1008 3852 l
-1033 3872 l
-1057 3891 l
-1082 3911 l
-1107 3931 l
-1131 3950 l
-1156 3970 l
-1180 3990 l
-1204 4010 l
-1228 4029 l
-1251 4049 l
-1275 4069 l
-1298 4089 l
-1321 4108 l
-1344 4128 l
-1367 4148 l
-1390 4168 l
-1413 4188 l
-1435 4207 l
-1457 4227 l
-1480 4247 l
-1501 4267 l
-1523 4287 l
-1545 4307 l
-1566 4327 l
-1588 4346 l
-1609 4366 l
-1630 4386 l
-1650 4406 l
-1671 4426 l
-1691 4446 l
-1711 4466 l
-1731 4486 l
-1751 4506 l
-1771 4526 l
-1791 4546 l
-1810 4567 l
-1811 4568 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 4183 m
-554 4186 l
-584 4197 l
-615 4208 l
-645 4219 l
-675 4229 l
-705 4240 l
-735 4250 l
-765 4260 l
-795 4271 l
-825 4281 l
-855 4291 l
-884 4301 l
-914 4311 l
-943 4320 l
-973 4330 l
-1002 4340 l
-1031 4349 l
-1060 4358 l
-1089 4368 l
-1118 4377 l
-1147 4386 l
-1176 4395 l
-1204 4403 l
-1233 4412 l
-1261 4421 l
-1290 4429 l
-1318 4438 l
-1346 4446 l
-1374 4454 l
-1402 4462 l
-1430 4470 l
-1457 4478 l
-1485 4486 l
-1513 4493 l
-1540 4501 l
-1567 4508 l
-1595 4515 l
-1622 4523 l
-1649 4530 l
-1676 4536 l
-1702 4543 l
-1729 4550 l
-1756 4556 l
-1782 4563 l
-1809 4569 l
-1810 4570 l
-1812 4570 l
-1812 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 4696 m
-548 4696 l
-582 4697 l
-617 4698 l
-651 4698 l
-685 4699 l
-719 4699 l
-753 4699 l
-788 4698 l
-822 4698 l
-855 4697 l
-889 4696 l
-923 4695 l
-957 4693 l
-990 4692 l
-1024 4690 l
-1058 4688 l
-1091 4685 l
-1124 4683 l
-1158 4680 l
-1191 4677 l
-1224 4674 l
-1257 4670 l
-1290 4666 l
-1323 4663 l
-1356 4658 l
-1389 4654 l
-1421 4649 l
-1454 4644 l
-1487 4639 l
-1519 4633 l
-1551 4628 l
-1584 4622 l
-1616 4615 l
-1648 4609 l
-1680 4602 l
-1712 4595 l
-1744 4587 l
-1776 4580 l
-1808 4572 l
-1810 4571 l
-1812 4571 l
-1812 4570 l
-1812 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 5102 m
-557 5098 l
-596 5089 l
-634 5079 l
-672 5068 l
-710 5058 l
-748 5047 l
-786 5035 l
-823 5024 l
-861 5012 l
-899 4999 l
-936 4987 l
-974 4974 l
-1011 4960 l
-1048 4947 l
-1085 4933 l
-1122 4918 l
-1159 4904 l
-1196 4889 l
-1233 4873 l
-1270 4857 l
-1306 4841 l
-1343 4825 l
-1379 4808 l
-1416 4790 l
-1452 4773 l
-1488 4755 l
-1524 4736 l
-1560 4717 l
-1595 4698 l
-1631 4678 l
-1666 4658 l
-1702 4638 l
-1737 4617 l
-1772 4596 l
-1807 4574 l
-1809 4573 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 5444 m
-564 5435 l
-605 5414 l
-646 5394 l
-687 5373 l
-728 5352 l
-769 5330 l
-810 5308 l
-850 5285 l
-890 5262 l
-931 5239 l
-971 5215 l
-1011 5191 l
-1050 5166 l
-1090 5141 l
-1129 5115 l
-1169 5089 l
-1208 5063 l
-1247 5036 l
-1285 5008 l
-1324 4981 l
-1362 4952 l
-1400 4923 l
-1438 4894 l
-1476 4865 l
-1514 4834 l
-1551 4804 l
-1588 4773 l
-1625 4741 l
-1662 4709 l
-1699 4677 l
-1735 4644 l
-1771 4610 l
-1807 4576 l
-1809 4574 l
-1812 4572 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-S
-543 5757 m
-554 5749 l
-597 5720 l
-640 5690 l
-683 5660 l
-726 5629 l
-768 5598 l
-810 5567 l
-852 5535 l
-893 5502 l
-935 5469 l
-976 5435 l
-1017 5401 l
-1057 5367 l
-1098 5332 l
-1138 5297 l
-1178 5261 l
-1217 5224 l
-1256 5187 l
-1295 5150 l
-1334 5112 l
-1372 5074 l
-1410 5035 l
-1448 4996 l
-1486 4956 l
-1523 4916 l
-1559 4876 l
-1596 4835 l
-1632 4793 l
-1668 4751 l
-1703 4709 l
-1738 4666 l
-1773 4622 l
-1807 4578 l
-1810 4575 l
-1812 4572 l
-1812 4572 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-543 6064 m
-569 6042 l
-613 6005 l
-656 5967 l
-700 5929 l
-742 5890 l
-785 5851 l
-827 5812 l
-868 5772 l
-910 5731 l
-951 5691 l
-991 5649 l
-1031 5607 l
-1071 5565 l
-1110 5522 l
-1149 5479 l
-1188 5436 l
-1226 5392 l
-1264 5347 l
-1301 5302 l
-1338 5257 l
-1375 5211 l
-1411 5165 l
-1446 5118 l
-1482 5071 l
-1516 5024 l
-1551 4976 l
-1584 4928 l
-1618 4879 l
-1651 4830 l
-1683 4781 l
-1715 4731 l
-1746 4681 l
-1777 4630 l
-1808 4579 l
-1810 4576 l
-1812 4572 l
-1812 4572 l
-1812 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-804 6121 m
-831 6091 l
-871 6046 l
-911 6000 l
-950 5954 l
-989 5907 l
-1027 5860 l
-1065 5813 l
-1102 5765 l
-1139 5717 l
-1175 5669 l
-1211 5620 l
-1246 5571 l
-1280 5521 l
-1315 5471 l
-1348 5421 l
-1381 5371 l
-1414 5320 l
-1445 5269 l
-1477 5218 l
-1508 5166 l
-1538 5114 l
-1567 5062 l
-1597 5009 l
-1625 4957 l
-1653 4903 l
-1681 4850 l
-1707 4797 l
-1734 4743 l
-1759 4689 l
-1784 4635 l
-1809 4580 l
-1811 4576 l
-1812 4572 l
-1812 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1061 6121 m
-1070 6107 l
-1104 6057 l
-1138 6007 l
-1171 5956 l
-1203 5905 l
-1235 5854 l
-1266 5803 l
-1297 5751 l
-1327 5700 l
-1356 5648 l
-1384 5596 l
-1412 5544 l
-1440 5491 l
-1467 5439 l
-1493 5386 l
-1518 5333 l
-1543 5280 l
-1567 5227 l
-1591 5173 l
-1614 5120 l
-1636 5066 l
-1658 5013 l
-1679 4959 l
-1700 4905 l
-1720 4851 l
-1739 4797 l
-1758 4743 l
-1776 4689 l
-1793 4634 l
-1810 4580 l
-1811 4576 l
-1813 4572 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1301 6121 m
-1308 6108 l
-1334 6057 l
-1360 6006 l
-1384 5955 l
-1408 5904 l
-1432 5853 l
-1455 5802 l
-1477 5751 l
-1498 5700 l
-1519 5649 l
-1539 5598 l
-1558 5547 l
-1577 5495 l
-1595 5444 l
-1613 5393 l
-1630 5342 l
-1646 5291 l
-1662 5240 l
-1677 5189 l
-1691 5138 l
-1705 5087 l
-1718 5036 l
-1731 4985 l
-1743 4934 l
-1755 4883 l
-1766 4832 l
-1776 4782 l
-1786 4731 l
-1795 4680 l
-1804 4630 l
-1812 4579 l
-1812 4576 l
-1813 4572 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1567 6121 m
-1568 6117 l
-1585 6070 l
-1601 6023 l
-1617 5976 l
-1632 5929 l
-1646 5882 l
-1659 5835 l
-1672 5789 l
-1685 5742 l
-1697 5696 l
-1708 5650 l
-1718 5603 l
-1728 5557 l
-1738 5512 l
-1747 5466 l
-1755 5420 l
-1763 5375 l
-1770 5329 l
-1776 5284 l
-1783 5239 l
-1788 5194 l
-1793 5149 l
-1798 5104 l
-1802 5060 l
-1805 5015 l
-1808 4971 l
-1811 4927 l
-1813 4883 l
-1814 4839 l
-1815 4795 l
-1816 4751 l
-1816 4708 l
-1816 4664 l
-1815 4621 l
-1814 4578 l
-1813 4575 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1922 6121 m
-1923 6116 l
-1930 6076 l
-1937 6037 l
-1943 5998 l
-1949 5959 l
-1954 5921 l
-1958 5882 l
-1962 5844 l
-1966 5806 l
-1969 5768 l
-1971 5730 l
-1973 5693 l
-1975 5655 l
-1976 5618 l
-1976 5581 l
-1976 5544 l
-1976 5508 l
-1975 5471 l
-1974 5435 l
-1972 5399 l
-1970 5363 l
-1967 5327 l
-1964 5292 l
-1961 5256 l
-1957 5221 l
-1953 5186 l
-1948 5150 l
-1943 5116 l
-1938 5081 l
-1932 5046 l
-1926 5012 l
-1920 4978 l
-1913 4943 l
-1906 4909 l
-1898 4875 l
-1890 4842 l
-1882 4808 l
-1874 4774 l
-1865 4741 l
-1855 4708 l
-1846 4675 l
-1836 4642 l
-1826 4609 l
-1815 4576 l
-1814 4574 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-S
-2562 6121 m
-2562 6116 l
-2562 6089 l
-2562 6062 l
-2562 6035 l
-2561 6009 l
-2560 5983 l
-2558 5957 l
-2556 5931 l
-2553 5906 l
-2550 5880 l
-2546 5855 l
-2543 5830 l
-2538 5806 l
-2534 5781 l
-2529 5757 l
-2523 5733 l
-2517 5709 l
-2511 5685 l
-2505 5661 l
-2498 5638 l
-2491 5615 l
-2483 5591 l
-2476 5568 l
-2468 5545 l
-2459 5523 l
-2451 5500 l
-2442 5477 l
-2432 5455 l
-2423 5432 l
-2413 5410 l
-2403 5388 l
-2392 5366 l
-2381 5344 l
-2370 5322 l
-2359 5300 l
-2348 5279 l
-2336 5257 l
-2324 5236 l
-2311 5214 l
-2299 5193 l
-2286 5171 l
-2273 5150 l
-2260 5129 l
-2246 5108 l
-2232 5087 l
-2218 5066 l
-2204 5045 l
-2190 5024 l
-2175 5003 l
-2160 4982 l
-2145 4961 l
-2129 4941 l
-2114 4920 l
-2098 4899 l
-2082 4879 l
-2066 4858 l
-2049 4838 l
-2033 4817 l
-2016 4797 l
-1999 4776 l
-1981 4756 l
-1964 4736 l
-1946 4715 l
-1928 4695 l
-1910 4675 l
-1892 4655 l
-1873 4634 l
-1855 4614 l
-1836 4594 l
-1817 4574 l
-1815 4572 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4570 l
-1813 4570 l
-1813 4570 l
-S
-4454 1777 m
-4454 1785 l
-4454 1798 l
-4454 1810 l
-4454 1822 l
-4453 1834 l
-4453 1847 l
-4453 1859 l
-4453 1871 l
-4452 1882 l
-4452 1894 l
-4452 1906 l
-4451 1918 l
-4451 1929 l
-4451 1941 l
-4450 1952 l
-4450 1964 l
-4449 1975 l
-4449 1986 l
-4448 1998 l
-4448 2009 l
-4447 2020 l
-4447 2031 l
-4446 2042 l
-4446 2053 l
-4445 2064 l
-4445 2075 l
-4444 2086 l
-4443 2096 l
-4443 2107 l
-4442 2118 l
-4442 2128 l
-4441 2139 l
-4440 2149 l
-4440 2159 l
-4439 2170 l
-4428 2309 l
-4415 2438 l
-4401 2558 l
-4385 2670 l
-4369 2775 l
-4352 2874 l
-4334 2966 l
-4316 3052 l
-4297 3134 l
-4278 3210 l
-4259 3283 l
-4240 3351 l
-4221 3416 l
-4201 3477 l
-4182 3534 l
-4163 3589 l
-4143 3641 l
-4124 3691 l
-4105 3738 l
-4085 3783 l
-4066 3825 l
-4047 3866 l
-4028 3905 l
-4009 3942 l
-3990 3977 l
-3971 4011 l
-3952 4043 l
-3933 4074 l
-3914 4104 l
-3895 4132 l
-3876 4159 l
-3858 4185 l
-3839 4210 l
-3820 4234 l
-3801 4257 l
-3783 4279 l
-3764 4300 l
-3745 4320 l
-3726 4340 l
-3708 4358 l
-3689 4376 l
-3670 4393 l
-3651 4410 l
-3633 4425 l
-3614 4441 l
-3595 4455 l
-3576 4469 l
-3557 4482 l
-3538 4495 l
-3519 4507 l
-3500 4519 l
-3481 4531 l
-3462 4541 l
-3442 4552 l
-3423 4561 l
-3404 4571 l
-3384 4580 l
-3365 4589 l
-3345 4597 l
-3325 4605 l
-3306 4612 l
-3286 4619 l
-3266 4626 l
-3246 4632 l
-3226 4638 l
-3206 4644 l
-3186 4649 l
-3165 4654 l
-3145 4659 l
-3125 4663 l
-3104 4668 l
-3083 4671 l
-3063 4675 l
-3042 4678 l
-3021 4681 l
-3000 4684 l
-2979 4687 l
-2958 4689 l
-2936 4691 l
-2915 4693 l
-2894 4694 l
-2872 4696 l
-2850 4697 l
-2828 4698 l
-2807 4698 l
-2785 4699 l
-2762 4699 l
-2740 4699 l
-2718 4699 l
-2696 4699 l
-2673 4698 l
-2650 4697 l
-2628 4696 l
-2605 4695 l
-2582 4694 l
-2559 4692 l
-2536 4690 l
-2513 4689 l
-2489 4686 l
-2466 4684 l
-2442 4682 l
-2418 4679 l
-2395 4676 l
-2371 4674 l
-2347 4670 l
-2323 4667 l
-2298 4664 l
-2274 4660 l
-2250 4657 l
-2225 4653 l
-2201 4649 l
-2176 4644 l
-2151 4640 l
-2126 4636 l
-2101 4631 l
-2076 4626 l
-2050 4621 l
-2025 4616 l
-2000 4611 l
-1974 4606 l
-1948 4601 l
-1922 4595 l
-1896 4589 l
-1870 4583 l
-1844 4577 l
-1818 4571 l
-1816 4571 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-4071 1777 m
-4067 1810 l
-4057 1881 l
-4046 1950 l
-4034 2018 l
-4021 2084 l
-4007 2148 l
-3993 2211 l
-3979 2273 l
-3963 2333 l
-3947 2392 l
-3931 2450 l
-3914 2506 l
-3897 2561 l
-3879 2615 l
-3860 2667 l
-3842 2719 l
-3822 2769 l
-3803 2818 l
-3783 2866 l
-3762 2913 l
-3742 2959 l
-3721 3004 l
-3699 3048 l
-3678 3091 l
-3656 3134 l
-3633 3175 l
-3611 3215 l
-3588 3255 l
-3565 3293 l
-3542 3331 l
-3518 3368 l
-3494 3404 l
-3470 3440 l
-3446 3474 l
-3421 3508 l
-3397 3541 l
-3372 3574 l
-3347 3606 l
-3321 3637 l
-3296 3667 l
-3270 3697 l
-3245 3726 l
-3219 3754 l
-3192 3782 l
-3166 3810 l
-3140 3836 l
-3113 3863 l
-3086 3888 l
-3059 3913 l
-3032 3938 l
-3005 3962 l
-2978 3985 l
-2950 4008 l
-2922 4030 l
-2895 4052 l
-2867 4074 l
-2839 4094 l
-2811 4115 l
-2782 4135 l
-2754 4154 l
-2725 4174 l
-2697 4192 l
-2668 4210 l
-2639 4228 l
-2610 4246 l
-2581 4263 l
-2552 4279 l
-2522 4295 l
-2493 4311 l
-2463 4326 l
-2433 4341 l
-2404 4356 l
-2374 4370 l
-2344 4384 l
-2314 4398 l
-2283 4411 l
-2253 4424 l
-2223 4436 l
-2192 4448 l
-2162 4460 l
-2131 4472 l
-2100 4483 l
-2069 4493 l
-2038 4504 l
-2007 4514 l
-1976 4524 l
-1945 4534 l
-1914 4543 l
-1882 4552 l
-1851 4560 l
-1819 4569 l
-1817 4569 l
-1815 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-3631 1777 m
-3622 1824 l
-3610 1887 l
-3597 1950 l
-3583 2011 l
-3568 2072 l
-3553 2132 l
-3537 2191 l
-3521 2249 l
-3504 2307 l
-3486 2363 l
-3468 2419 l
-3450 2474 l
-3431 2528 l
-3411 2582 l
-3391 2635 l
-3370 2687 l
-3349 2738 l
-3328 2789 l
-3306 2839 l
-3283 2888 l
-3260 2936 l
-3237 2984 l
-3213 3031 l
-3189 3078 l
-3165 3123 l
-3140 3168 l
-3115 3213 l
-3089 3256 l
-3063 3300 l
-3037 3342 l
-3010 3384 l
-2984 3425 l
-2956 3466 l
-2929 3506 l
-2901 3545 l
-2873 3584 l
-2845 3622 l
-2816 3659 l
-2787 3696 l
-2758 3733 l
-2728 3769 l
-2699 3804 l
-2669 3839 l
-2639 3873 l
-2608 3907 l
-2578 3940 l
-2547 3972 l
-2516 4004 l
-2484 4036 l
-2453 4067 l
-2421 4098 l
-2389 4128 l
-2357 4157 l
-2325 4186 l
-2292 4215 l
-2260 4243 l
-2227 4270 l
-2194 4298 l
-2160 4324 l
-2127 4350 l
-2094 4376 l
-2060 4401 l
-2026 4426 l
-1992 4451 l
-1958 4475 l
-1923 4498 l
-1889 4521 l
-1854 4544 l
-1820 4566 l
-1817 4568 l
-1815 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-3251 1777 m
-3241 1834 l
-3230 1898 l
-3218 1960 l
-3205 2023 l
-3192 2084 l
-3178 2146 l
-3164 2206 l
-3149 2266 l
-3133 2326 l
-3116 2385 l
-3099 2444 l
-3082 2502 l
-3063 2559 l
-3045 2616 l
-3025 2673 l
-3005 2728 l
-2985 2784 l
-2964 2839 l
-2942 2893 l
-2920 2947 l
-2898 3000 l
-2875 3052 l
-2851 3105 l
-2827 3156 l
-2803 3207 l
-2778 3258 l
-2753 3308 l
-2727 3357 l
-2700 3406 l
-2674 3454 l
-2647 3502 l
-2619 3549 l
-2591 3596 l
-2563 3642 l
-2534 3688 l
-2505 3733 l
-2476 3778 l
-2446 3822 l
-2416 3866 l
-2386 3909 l
-2355 3951 l
-2324 3993 l
-2292 4035 l
-2260 4076 l
-2228 4117 l
-2196 4157 l
-2163 4196 l
-2130 4235 l
-2096 4274 l
-2063 4312 l
-2029 4349 l
-1995 4386 l
-1960 4423 l
-1926 4459 l
-1891 4494 l
-1855 4529 l
-1820 4564 l
-1817 4566 l
-1815 4569 l
-1815 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2919 1777 m
-2914 1822 l
-2907 1885 l
-2898 1949 l
-2890 2012 l
-2880 2074 l
-2870 2137 l
-2859 2199 l
-2848 2261 l
-2836 2322 l
-2823 2383 l
-2809 2444 l
-2795 2505 l
-2781 2565 l
-2765 2625 l
-2749 2685 l
-2733 2744 l
-2715 2803 l
-2698 2861 l
-2679 2919 l
-2660 2977 l
-2641 3034 l
-2621 3091 l
-2600 3148 l
-2579 3204 l
-2557 3260 l
-2535 3315 l
-2512 3370 l
-2489 3425 l
-2465 3479 l
-2440 3533 l
-2415 3586 l
-2390 3639 l
-2364 3692 l
-2338 3744 l
-2311 3795 l
-2283 3847 l
-2255 3898 l
-2227 3948 l
-2198 3998 l
-2169 4047 l
-2139 4096 l
-2109 4145 l
-2079 4193 l
-2048 4241 l
-2016 4288 l
-1985 4335 l
-1952 4381 l
-1920 4427 l
-1887 4473 l
-1853 4518 l
-1819 4562 l
-1817 4565 l
-1815 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2606 1777 m
-2606 1788 l
-2604 1850 l
-2602 1912 l
-2599 1973 l
-2595 2035 l
-2590 2096 l
-2585 2158 l
-2579 2219 l
-2573 2280 l
-2566 2341 l
-2558 2402 l
-2550 2463 l
-2541 2524 l
-2531 2584 l
-2521 2645 l
-2510 2705 l
-2499 2765 l
-2487 2825 l
-2474 2885 l
-2461 2944 l
-2447 3004 l
-2432 3063 l
-2417 3122 l
-2401 3181 l
-2385 3239 l
-2367 3297 l
-2350 3355 l
-2332 3413 l
-2313 3471 l
-2293 3528 l
-2273 3585 l
-2253 3642 l
-2232 3698 l
-2210 3755 l
-2188 3810 l
-2165 3866 l
-2142 3922 l
-2118 3977 l
-2093 4031 l
-2068 4086 l
-2042 4140 l
-2016 4194 l
-1990 4247 l
-1963 4300 l
-1935 4353 l
-1907 4406 l
-1878 4458 l
-1849 4509 l
-1819 4561 l
-1817 4565 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2890 6121 m
-2892 6118 l
-2906 6096 l
-2920 6075 l
-2934 6054 l
-2948 6032 l
-2962 6011 l
-2976 5989 l
-2990 5968 l
-3003 5946 l
-3017 5924 l
-3031 5902 l
-3044 5880 l
-3058 5858 l
-3071 5836 l
-3084 5814 l
-3097 5792 l
-3111 5770 l
-3124 5748 l
-3137 5725 l
-3150 5703 l
-3162 5681 l
-3175 5658 l
-3188 5635 l
-3200 5613 l
-3213 5590 l
-3225 5567 l
-3238 5545 l
-3250 5522 l
-3262 5499 l
-3274 5476 l
-3286 5453 l
-3298 5430 l
-3310 5407 l
-3322 5384 l
-3334 5360 l
-3345 5337 l
-3357 5314 l
-3368 5291 l
-3380 5267 l
-3391 5244 l
-3402 5220 l
-3413 5197 l
-3424 5173 l
-3435 5150 l
-3446 5126 l
-3457 5103 l
-3468 5079 l
-3478 5055 l
-3489 5032 l
-3499 5008 l
-3509 4984 l
-3519 4961 l
-3530 4937 l
-3540 4913 l
-3549 4889 l
-3559 4865 l
-3569 4841 l
-3579 4817 l
-3588 4793 l
-3598 4769 l
-3607 4745 l
-3616 4721 l
-3625 4697 l
-3634 4673 l
-3643 4649 l
-3652 4625 l
-3661 4601 l
-3670 4577 l
-3678 4553 l
-3687 4529 l
-3695 4505 l
-3704 4481 l
-3712 4457 l
-3720 4433 l
-3728 4409 l
-3736 4385 l
-3744 4361 l
-3751 4337 l
-3759 4312 l
-3766 4288 l
-3774 4264 l
-3781 4240 l
-3788 4216 l
-3796 4192 l
-3803 4168 l
-3810 4144 l
-3816 4120 l
-3823 4096 l
-3830 4072 l
-3836 4048 l
-3843 4024 l
-3849 4000 l
-3855 3976 l
-3861 3953 l
-3868 3929 l
-3874 3905 l
-3879 3881 l
-3885 3857 l
-3891 3833 l
-3896 3810 l
-3902 3786 l
-3907 3762 l
-3913 3738 l
-3918 3715 l
-3923 3691 l
-3928 3668 l
-3933 3644 l
-3938 3621 l
-3942 3597 l
-3947 3574 l
-3952 3550 l
-3956 3527 l
-3960 3504 l
-3965 3480 l
-3969 3457 l
-3973 3434 l
-3977 3411 l
-3981 3387 l
-3985 3364 l
-3989 3341 l
-3992 3318 l
-3996 3295 l
-3999 3272 l
-4003 3249 l
-4006 3227 l
-4009 3204 l
-4012 3181 l
-4015 3158 l
-4018 3136 l
-4021 3113 l
-4024 3091 l
-4026 3068 l
-4029 3046 l
-4032 3023 l
-4034 3001 l
-4036 2979 l
-4039 2957 l
-4041 2934 l
-4043 2912 l
-4045 2890 l
-4047 2868 l
-4049 2846 l
-4051 2825 l
-4052 2803 l
-4054 2781 l
-4055 2759 l
-4057 2738 l
-4058 2716 l
-4060 2695 l
-4061 2673 l
-4062 2652 l
-4063 2631 l
-4064 2609 l
-4065 2588 l
-4066 2567 l
-4067 2546 l
-4068 2525 l
-4068 2504 l
-4069 2483 l
-4069 2462 l
-4070 2442 l
-4070 2421 l
-4070 2401 l
-4071 2380 l
-4071 2360 l
-4071 2339 l
-4071 2319 l
-4071 2299 l
-4071 2279 l
-4071 2259 l
-4071 2239 l
-4070 2219 l
-4070 2199 l
-4069 2179 l
-4069 2159 l
-4068 2140 l
-4068 2120 l
-4067 2100 l
-4066 2081 l
-4066 2062 l
-4065 2042 l
-4064 2023 l
-4063 2004 l
-4062 1985 l
-4061 1966 l
-4060 1947 l
-4059 1928 l
-4057 1910 l
-4056 1891 l
-4055 1872 l
-4053 1854 l
-4052 1835 l
-4050 1817 l
-4049 1799 l
-4047 1781 l
-4047 1777 l
-S
-868 1777 m
-823 1845 l
-772 1921 l
-722 1998 l
-672 2076 l
-623 2155 l
-573 2235 l
-543 2285 l
-S
-2598 6121 m
-2601 6118 l
-2611 6104 l
-2620 6091 l
-2630 6078 l
-2639 6064 l
-2649 6051 l
-2658 6038 l
-2668 6024 l
-2677 6011 l
-2686 5997 l
-2696 5984 l
-2705 5970 l
-2714 5956 l
-2724 5943 l
-2733 5929 l
-2742 5915 l
-2751 5901 l
-2761 5887 l
-2770 5874 l
-2779 5860 l
-2788 5846 l
-2797 5832 l
-2806 5818 l
-2815 5804 l
-2824 5790 l
-2833 5775 l
-2842 5761 l
-2850 5747 l
-2859 5733 l
-2868 5719 l
-2877 5704 l
-2886 5690 l
-2894 5676 l
-2903 5661 l
-2912 5647 l
-2920 5633 l
-2929 5618 l
-2937 5604 l
-2946 5589 l
-2954 5574 l
-2963 5560 l
-2971 5545 l
-2979 5531 l
-2988 5516 l
-2996 5501 l
-3004 5487 l
-3012 5472 l
-3020 5457 l
-3028 5442 l
-3037 5427 l
-3045 5412 l
-3053 5398 l
-3061 5383 l
-3068 5368 l
-3076 5353 l
-3084 5338 l
-3092 5323 l
-3100 5308 l
-3108 5293 l
-3115 5278 l
-3123 5263 l
-3130 5247 l
-3138 5232 l
-3146 5217 l
-3153 5202 l
-3160 5187 l
-3168 5172 l
-3175 5156 l
-3183 5141 l
-3190 5126 l
-3197 5111 l
-3204 5095 l
-3211 5080 l
-3218 5065 l
-3225 5049 l
-3233 5034 l
-3239 5018 l
-3246 5003 l
-3253 4988 l
-3260 4972 l
-3267 4957 l
-3274 4941 l
-3280 4926 l
-3287 4910 l
-3294 4895 l
-3300 4879 l
-3307 4864 l
-3313 4848 l
-3320 4833 l
-3326 4817 l
-3332 4802 l
-3339 4786 l
-3345 4771 l
-3351 4755 l
-3357 4739 l
-3364 4724 l
-3370 4708 l
-3376 4693 l
-3382 4677 l
-3388 4661 l
-3393 4646 l
-3399 4630 l
-3405 4614 l
-3411 4599 l
-3417 4583 l
-3422 4567 l
-3428 4552 l
-3433 4536 l
-3439 4521 l
-3444 4505 l
-3450 4489 l
-3455 4474 l
-3461 4458 l
-3466 4442 l
-3471 4427 l
-3476 4411 l
-3481 4395 l
-3487 4380 l
-3492 4364 l
-3497 4348 l
-3502 4333 l
-3506 4317 l
-3511 4301 l
-3516 4286 l
-3521 4270 l
-3526 4254 l
-3530 4239 l
-3535 4223 l
-3540 4208 l
-3544 4192 l
-3549 4176 l
-3553 4161 l
-3557 4145 l
-3562 4130 l
-3566 4114 l
-3570 4098 l
-3574 4083 l
-3579 4067 l
-3583 4052 l
-3587 4036 l
-3591 4021 l
-3595 4005 l
-3599 3990 l
-3603 3974 l
-3606 3959 l
-3610 3943 l
-3614 3928 l
-3618 3912 l
-3621 3897 l
-3625 3882 l
-3628 3866 l
-3632 3851 l
-3635 3836 l
-3639 3820 l
-3642 3805 l
-3645 3790 l
-3649 3774 l
-3652 3759 l
-3655 3744 l
-3658 3728 l
-3661 3713 l
-3664 3698 l
-3667 3683 l
-3670 3668 l
-3673 3653 l
-3676 3637 l
-3679 3622 l
-3682 3607 l
-3684 3592 l
-3687 3577 l
-3690 3562 l
-3692 3547 l
-3695 3532 l
-3697 3517 l
-3700 3502 l
-3702 3487 l
-3705 3472 l
-3707 3457 l
-3709 3443 l
-3711 3428 l
-3714 3413 l
-3716 3398 l
-3718 3383 l
-3720 3369 l
-3722 3354 l
-3724 3339 l
-3726 3325 l
-3728 3310 l
-3730 3295 l
-3731 3281 l
-3733 3266 l
-3735 3252 l
-3737 3237 l
-3738 3223 l
-3740 3208 l
-3741 3194 l
-3743 3180 l
-3744 3165 l
-3746 3151 l
-S
-3746 3151 m
-3747 3137 l
-3749 3122 l
-3750 3108 l
-3751 3094 l
-3752 3080 l
-3754 3065 l
-3755 3051 l
-3756 3037 l
-3757 3023 l
-3758 3009 l
-3759 2995 l
-3760 2981 l
-3761 2967 l
-3762 2953 l
-3763 2940 l
-3763 2926 l
-3764 2912 l
-3765 2898 l
-3765 2884 l
-3766 2871 l
-3767 2857 l
-3767 2843 l
-3768 2830 l
-3768 2816 l
-3769 2803 l
-3769 2789 l
-3770 2776 l
-3770 2762 l
-3770 2749 l
-3771 2736 l
-3771 2722 l
-3771 2709 l
-3771 2696 l
-3771 2682 l
-3771 2669 l
-3772 2656 l
-3772 2643 l
-3772 2630 l
-3772 2617 l
-3771 2604 l
-3771 2591 l
-3771 2578 l
-3771 2565 l
-3771 2552 l
-3771 2539 l
-3770 2527 l
-3770 2514 l
-3770 2501 l
-3769 2488 l
-3769 2476 l
-3769 2463 l
-3768 2451 l
-3768 2438 l
-3767 2426 l
-3766 2413 l
-3766 2401 l
-3765 2389 l
-3765 2376 l
-3764 2364 l
-3763 2352 l
-3762 2339 l
-3762 2327 l
-3761 2315 l
-3760 2303 l
-3759 2291 l
-3758 2279 l
-3757 2267 l
-3756 2255 l
-3756 2243 l
-3755 2231 l
-3753 2220 l
-3752 2208 l
-3751 2196 l
-3750 2184 l
-3749 2173 l
-3748 2161 l
-3747 2150 l
-3745 2138 l
-3744 2127 l
-3743 2115 l
-3742 2104 l
-3740 2092 l
-3739 2081 l
-3738 2070 l
-3736 2058 l
-3735 2047 l
-3733 2036 l
-3732 2025 l
-3730 2014 l
-3729 2003 l
-3727 1992 l
-3726 1981 l
-3724 1970 l
-3722 1959 l
-3721 1948 l
-3719 1937 l
-3717 1927 l
-3716 1916 l
-3714 1905 l
-3712 1895 l
-3710 1884 l
-3709 1874 l
-3707 1863 l
-3705 1853 l
-3703 1842 l
-3701 1832 l
-3699 1821 l
-3697 1811 l
-3695 1801 l
-3693 1791 l
-3691 1780 l
-3691 1777 l
-S
-1826 1777 m
-1793 1806 l
-1747 1847 l
-1702 1889 l
-1657 1933 l
-1612 1979 l
-1567 2026 l
-1523 2075 l
-1478 2125 l
-1434 2177 l
-1389 2230 l
-1345 2285 l
-1301 2341 l
-1258 2398 l
-1214 2456 l
-1171 2515 l
-1128 2576 l
-1085 2637 l
-1042 2700 l
-1000 2763 l
-958 2827 l
-916 2893 l
-875 2959 l
-834 3025 l
-793 3093 l
-752 3161 l
-712 3230 l
-672 3299 l
-633 3369 l
-594 3439 l
-555 3510 l
-543 3532 l
-S
-2210 6121 m
-2215 6114 l
-2222 6106 l
-2228 6099 l
-2235 6091 l
-2241 6083 l
-2248 6076 l
-2254 6068 l
-2261 6060 l
-2267 6052 l
-2273 6044 l
-2280 6036 l
-2286 6029 l
-2293 6021 l
-2299 6013 l
-2305 6005 l
-2312 5997 l
-2318 5989 l
-2324 5981 l
-2331 5973 l
-2337 5965 l
-2343 5957 l
-2349 5948 l
-2356 5940 l
-2362 5932 l
-2368 5924 l
-2375 5916 l
-2381 5908 l
-2387 5899 l
-2393 5891 l
-2399 5883 l
-2406 5874 l
-2412 5866 l
-2418 5858 l
-2424 5849 l
-2430 5841 l
-2436 5833 l
-2442 5824 l
-2449 5816 l
-2455 5807 l
-2461 5799 l
-2467 5790 l
-2473 5782 l
-2479 5773 l
-2485 5764 l
-2491 5756 l
-2497 5747 l
-2503 5739 l
-2509 5730 l
-2515 5721 l
-2521 5713 l
-2527 5704 l
-2533 5695 l
-2539 5686 l
-2545 5678 l
-2550 5669 l
-2556 5660 l
-2562 5651 l
-2568 5642 l
-2574 5633 l
-2580 5625 l
-2586 5616 l
-2591 5607 l
-2597 5598 l
-2603 5589 l
-2609 5580 l
-2614 5571 l
-2620 5562 l
-2626 5553 l
-2631 5544 l
-2637 5535 l
-2643 5526 l
-2648 5517 l
-2654 5508 l
-2660 5498 l
-2665 5489 l
-2671 5480 l
-2676 5471 l
-2682 5462 l
-2687 5453 l
-2693 5443 l
-2698 5434 l
-2704 5425 l
-2709 5416 l
-2715 5406 l
-2720 5397 l
-2725 5388 l
-2731 5378 l
-2736 5369 l
-2742 5360 l
-2747 5350 l
-2752 5341 l
-2757 5332 l
-2763 5322 l
-2768 5313 l
-2773 5303 l
-2778 5294 l
-2784 5284 l
-2789 5275 l
-2794 5265 l
-2799 5256 l
-2804 5246 l
-2809 5237 l
-2814 5227 l
-2820 5218 l
-2825 5208 l
-2830 5199 l
-2835 5189 l
-2840 5179 l
-2845 5170 l
-2850 5160 l
-2854 5151 l
-2859 5141 l
-2864 5131 l
-2869 5122 l
-2874 5112 l
-2879 5102 l
-2884 5093 l
-2888 5083 l
-2893 5073 l
-2898 5063 l
-2903 5054 l
-2907 5044 l
-2912 5034 l
-2917 5024 l
-2921 5015 l
-2926 5005 l
-2931 4995 l
-2935 4985 l
-2940 4976 l
-2944 4966 l
-2949 4956 l
-2953 4946 l
-2958 4936 l
-2962 4926 l
-2967 4917 l
-2971 4907 l
-2976 4897 l
-2980 4887 l
-2984 4877 l
-2989 4867 l
-2993 4857 l
-2997 4847 l
-3001 4838 l
-3006 4828 l
-3010 4818 l
-3014 4808 l
-3018 4798 l
-3022 4788 l
-3027 4778 l
-3031 4768 l
-3035 4758 l
-3039 4748 l
-3043 4738 l
-3047 4728 l
-3051 4718 l
-3055 4708 l
-3059 4698 l
-3063 4688 l
-3067 4678 l
-3071 4669 l
-3074 4659 l
-3078 4649 l
-3082 4639 l
-3086 4629 l
-3090 4619 l
-3093 4609 l
-3097 4599 l
-3101 4589 l
-3104 4579 l
-3108 4569 l
-3112 4559 l
-3115 4549 l
-3119 4539 l
-3123 4529 l
-3126 4519 l
-3130 4509 l
-3133 4499 l
-3137 4489 l
-3140 4479 l
-3143 4469 l
-3147 4459 l
-3150 4449 l
-3153 4439 l
-3157 4429 l
-3160 4419 l
-3163 4409 l
-3167 4399 l
-3170 4389 l
-3173 4379 l
-3176 4369 l
-3179 4359 l
-3183 4349 l
-3186 4339 l
-3189 4329 l
-3192 4319 l
-3195 4309 l
-3198 4299 l
-3201 4289 l
-3204 4279 l
-S
-3204 4279 m
-3207 4269 l
-3210 4259 l
-3213 4249 l
-3216 4239 l
-3218 4229 l
-3221 4219 l
-3224 4209 l
-3227 4199 l
-3230 4189 l
-3232 4180 l
-3235 4170 l
-3238 4160 l
-3240 4150 l
-3243 4140 l
-3246 4130 l
-3248 4120 l
-3251 4110 l
-3253 4100 l
-3256 4091 l
-3258 4081 l
-3261 4071 l
-3263 4061 l
-3266 4051 l
-3268 4041 l
-3270 4031 l
-3273 4022 l
-3275 4012 l
-3277 4002 l
-3280 3992 l
-3282 3982 l
-3284 3973 l
-3286 3963 l
-3289 3953 l
-3291 3943 l
-3293 3934 l
-3295 3924 l
-3297 3914 l
-3299 3904 l
-3301 3895 l
-3303 3885 l
-3305 3875 l
-3307 3866 l
-3309 3856 l
-3311 3846 l
-3313 3837 l
-3315 3827 l
-3317 3817 l
-3319 3808 l
-3320 3798 l
-3322 3788 l
-3324 3779 l
-3326 3769 l
-3328 3760 l
-3329 3750 l
-3331 3741 l
-3333 3731 l
-3334 3722 l
-3336 3712 l
-3337 3702 l
-3339 3693 l
-3340 3684 l
-3342 3674 l
-3343 3665 l
-3345 3655 l
-3346 3646 l
-3348 3636 l
-3349 3627 l
-3351 3618 l
-3352 3608 l
-3353 3599 l
-3355 3589 l
-3356 3580 l
-3357 3571 l
-3358 3561 l
-3360 3552 l
-3361 3543 l
-3362 3534 l
-3363 3524 l
-3364 3515 l
-3365 3506 l
-3367 3497 l
-3368 3488 l
-3369 3478 l
-3370 3469 l
-3371 3460 l
-3372 3451 l
-3373 3442 l
-3374 3433 l
-3375 3424 l
-3375 3415 l
-3376 3405 l
-3377 3396 l
-3378 3387 l
-3379 3378 l
-3380 3369 l
-3380 3360 l
-3381 3351 l
-3382 3342 l
-3383 3334 l
-3383 3325 l
-3384 3316 l
-3385 3307 l
-3385 3298 l
-3386 3289 l
-3386 3280 l
-3387 3272 l
-3387 3263 l
-3388 3254 l
-3389 3245 l
-3389 3236 l
-3389 3228 l
-3390 3219 l
-3390 3210 l
-3391 3202 l
-3391 3193 l
-3391 3184 l
-3392 3176 l
-3392 3167 l
-3392 3159 l
-3393 3150 l
-3393 3141 l
-3393 3133 l
-3393 3124 l
-3394 3116 l
-3394 3107 l
-3394 3099 l
-3394 3091 l
-3394 3082 l
-3394 3074 l
-3394 3065 l
-3394 3057 l
-3395 3049 l
-3395 3040 l
-3395 3032 l
-3395 3024 l
-3395 3016 l
-3394 3007 l
-3394 2999 l
-3394 2991 l
-3394 2983 l
-3394 2975 l
-3394 2966 l
-3394 2958 l
-3394 2950 l
-3393 2942 l
-3393 2934 l
-3393 2926 l
-3393 2918 l
-3393 2910 l
-3392 2902 l
-3392 2894 l
-3392 2886 l
-3391 2878 l
-3391 2870 l
-3391 2862 l
-3390 2855 l
-3390 2847 l
-3389 2839 l
-3389 2831 l
-3388 2823 l
-3388 2816 l
-3387 2808 l
-3387 2800 l
-3386 2793 l
-3386 2785 l
-3385 2777 l
-3385 2770 l
-3384 2762 l
-3384 2754 l
-3383 2747 l
-3382 2739 l
-3382 2732 l
-3381 2724 l
-3380 2717 l
-3380 2709 l
-3379 2702 l
-3378 2695 l
-3377 2687 l
-3377 2680 l
-3376 2672 l
-3375 2665 l
-3374 2658 l
-3373 2651 l
-3373 2643 l
-3372 2636 l
-3371 2629 l
-3370 2622 l
-3369 2615 l
-3368 2607 l
-3367 2600 l
-3366 2593 l
-3365 2586 l
-3364 2579 l
-3363 2572 l
-3362 2565 l
-3361 2558 l
-3360 2551 l
-3359 2544 l
-3358 2537 l
-S
-3358 2537 m
-3357 2530 l
-3356 2523 l
-3355 2517 l
-3354 2510 l
-3352 2503 l
-3351 2496 l
-3350 2489 l
-3349 2483 l
-3348 2476 l
-3347 2469 l
-3345 2463 l
-3344 2456 l
-3343 2449 l
-3342 2443 l
-3340 2436 l
-3339 2430 l
-3338 2423 l
-3336 2417 l
-3335 2410 l
-3334 2404 l
-3332 2397 l
-3331 2391 l
-3330 2384 l
-3328 2378 l
-3327 2372 l
-3325 2365 l
-3324 2359 l
-3322 2353 l
-3321 2347 l
-3319 2340 l
-3318 2334 l
-3316 2328 l
-3315 2322 l
-3313 2316 l
-3312 2310 l
-3310 2303 l
-3309 2297 l
-3307 2291 l
-3306 2285 l
-3304 2279 l
-3302 2273 l
-3301 2267 l
-3299 2261 l
-3298 2256 l
-3296 2250 l
-3294 2244 l
-3293 2238 l
-3291 2232 l
-3289 2226 l
-3287 2221 l
-3286 2215 l
-3284 2209 l
-3282 2203 l
-3281 2198 l
-3279 2192 l
-3277 2187 l
-3275 2181 l
-3273 2175 l
-3272 2170 l
-3270 2164 l
-3268 2159 l
-3266 2153 l
-3264 2148 l
-3262 2142 l
-3261 2137 l
-3259 2132 l
-3257 2126 l
-3255 2121 l
-3253 2116 l
-3251 2110 l
-3249 2105 l
-3247 2100 l
-3245 2094 l
-3243 2089 l
-3241 2084 l
-3239 2079 l
-3237 2074 l
-3235 2069 l
-3233 2064 l
-3231 2059 l
-3229 2053 l
-3227 2048 l
-3225 2043 l
-3223 2038 l
-3221 2034 l
-3219 2029 l
-3217 2024 l
-3215 2019 l
-3213 2014 l
-3211 2009 l
-3208 2004 l
-3206 1999 l
-3204 1995 l
-3202 1990 l
-3200 1985 l
-3198 1981 l
-3196 1976 l
-3193 1971 l
-3191 1967 l
-3189 1962 l
-3187 1957 l
-3185 1953 l
-3182 1948 l
-3180 1944 l
-3178 1939 l
-3176 1935 l
-3173 1930 l
-3171 1926 l
-3169 1922 l
-3167 1917 l
-3164 1913 l
-3162 1908 l
-3160 1904 l
-3157 1900 l
-3155 1896 l
-3153 1891 l
-3150 1887 l
-3148 1883 l
-3146 1879 l
-3143 1875 l
-3141 1870 l
-3139 1866 l
-3136 1862 l
-3134 1858 l
-3131 1854 l
-3129 1850 l
-3127 1846 l
-3124 1842 l
-3122 1838 l
-3119 1834 l
-3117 1830 l
-3114 1827 l
-3112 1823 l
-3110 1819 l
-3107 1815 l
-3105 1811 l
-3102 1807 l
-3100 1804 l
-3097 1800 l
-3095 1796 l
-3092 1793 l
-3090 1789 l
-3087 1785 l
-3085 1782 l
-3082 1778 l
-3082 1777 l
-S
-2296 2538 m
-2295 2538 l
-2295 2538 l
-2295 2538 l
-2293 2538 l
-2290 2538 l
-2258 2546 l
-2226 2555 l
-2193 2565 l
-2160 2578 l
-2126 2593 l
-2093 2609 l
-2060 2627 l
-2026 2647 l
-1992 2668 l
-1958 2691 l
-1925 2715 l
-1891 2741 l
-1857 2769 l
-1823 2798 l
-1789 2828 l
-1755 2859 l
-1721 2892 l
-1687 2926 l
-1654 2962 l
-1620 2998 l
-1587 3036 l
-1554 3074 l
-1520 3114 l
-1487 3155 l
-1455 3197 l
-1422 3239 l
-1390 3283 l
-1357 3327 l
-1325 3372 l
-1294 3418 l
-1262 3465 l
-1231 3512 l
-1200 3560 l
-1170 3609 l
-1140 3658 l
-1110 3708 l
-1080 3759 l
-1051 3809 l
-1022 3861 l
-994 3912 l
-966 3964 l
-939 4017 l
-912 4070 l
-885 4122 l
-859 4176 l
-834 4229 l
-809 4283 l
-784 4336 l
-760 4390 l
-737 4444 l
-714 4498 l
-692 4552 l
-671 4606 l
-650 4659 l
-630 4713 l
-610 4767 l
-592 4820 l
-574 4873 l
-557 4926 l
-543 4969 l
-S
-1633 6121 m
-1679 6086 l
-1733 6042 l
-1787 5995 l
-1841 5945 l
-1895 5893 l
-1949 5839 l
-2003 5782 l
-2056 5722 l
-2109 5660 l
-2161 5596 l
-2212 5530 l
-2262 5461 l
-2311 5391 l
-2359 5319 l
-2405 5245 l
-2450 5170 l
-2494 5093 l
-2536 5015 l
-2576 4936 l
-2614 4857 l
-2650 4776 l
-2685 4695 l
-2717 4614 l
-2747 4532 l
-2775 4450 l
-2801 4369 l
-2825 4288 l
-2846 4207 l
-2866 4127 l
-2883 4048 l
-2897 3970 l
-2910 3893 l
-2920 3818 l
-2929 3743 l
-2935 3671 l
-2939 3600 l
-2941 3531 l
-2941 3463 l
-2939 3398 l
-2936 3335 l
-2930 3274 l
-2923 3215 l
-2914 3159 l
-2904 3104 l
-2892 3053 l
-2878 3003 l
-2863 2956 l
-2847 2912 l
-2829 2870 l
-2811 2830 l
-2791 2793 l
-2770 2759 l
-2748 2727 l
-2724 2697 l
-2701 2670 l
-2676 2645 l
-2650 2623 l
-2624 2604 l
-2597 2586 l
-2569 2571 l
-2540 2559 l
-2511 2548 l
-2482 2540 l
-2452 2535 l
-2421 2531 l
-2391 2529 l
-2359 2530 l
-2328 2533 l
-2296 2538 l
-S
-2149 3569 m
-2149 3569 l
-2149 3569 l
-2149 3569 l
-2148 3569 l
-2147 3569 l
-2130 3570 l
-2114 3571 l
-2096 3573 l
-2079 3577 l
-2062 3581 l
-2044 3587 l
-2026 3594 l
-2008 3601 l
-1990 3610 l
-1971 3619 l
-1953 3629 l
-1934 3641 l
-1915 3653 l
-1897 3666 l
-1878 3680 l
-1859 3695 l
-1840 3710 l
-1821 3726 l
-1802 3744 l
-1783 3761 l
-1764 3780 l
-1745 3799 l
-1726 3819 l
-1708 3840 l
-1689 3861 l
-1670 3883 l
-1652 3906 l
-1633 3929 l
-1615 3952 l
-1597 3976 l
-1579 4001 l
-1562 4026 l
-1544 4052 l
-1527 4078 l
-1510 4104 l
-1493 4131 l
-1476 4158 l
-1460 4186 l
-1444 4213 l
-1428 4242 l
-1413 4270 l
-1397 4299 l
-1383 4327 l
-1368 4356 l
-1354 4385 l
-1340 4415 l
-1326 4444 l
-1313 4474 l
-1301 4503 l
-1288 4533 l
-1276 4563 l
-1265 4592 l
-1254 4622 l
-1243 4651 l
-1233 4681 l
-1224 4710 l
-1215 4739 l
-1206 4768 l
-1198 4797 l
-1190 4826 l
-1183 4854 l
-1176 4883 l
-1170 4910 l
-1165 4938 l
-1160 4965 l
-1156 4992 l
-1152 5019 l
-1149 5045 l
-1146 5071 l
-1144 5096 l
-1143 5121 l
-1142 5145 l
-1142 5169 l
-1143 5192 l
-1144 5215 l
-1146 5237 l
-1148 5258 l
-1151 5279 l
-1155 5299 l
-1160 5318 l
-1165 5337 l
-1171 5355 l
-1178 5372 l
-1185 5388 l
-1193 5404 l
-1201 5419 l
-1211 5432 l
-1220 5445 l
-1231 5458 l
-1242 5469 l
-1254 5479 l
-1267 5488 l
-1280 5496 l
-1294 5504 l
-1309 5510 l
-1324 5515 l
-1340 5519 l
-1356 5523 l
-1373 5525 l
-1390 5526 l
-1408 5525 l
-1427 5524 l
-1446 5522 l
-1466 5518 l
-1486 5513 l
-1506 5508 l
-1527 5501 l
-1549 5492 l
-1571 5483 l
-1593 5473 l
-1615 5461 l
-1638 5448 l
-1661 5434 l
-1684 5419 l
-1708 5403 l
-1731 5385 l
-1755 5367 l
-1779 5347 l
-1803 5326 l
-1826 5304 l
-1850 5282 l
-1874 5258 l
-1898 5233 l
-1921 5207 l
-1945 5180 l
-1968 5153 l
-1991 5124 l
-2014 5095 l
-2036 5065 l
-2058 5034 l
-2079 5002 l
-2101 4970 l
-2121 4937 l
-2141 4904 l
-2161 4870 l
-2180 4835 l
-2199 4800 l
-2216 4765 l
-2234 4729 l
-2250 4694 l
-2266 4657 l
-2281 4621 l
-2295 4585 l
-2309 4549 l
-2322 4512 l
-2334 4476 l
-2345 4440 l
-2355 4404 l
-2365 4368 l
-2373 4333 l
-2381 4298 l
-2388 4263 l
-2394 4229 l
-2400 4195 l
-2404 4162 l
-2408 4129 l
-2410 4097 l
-2412 4066 l
-2413 4035 l
-2414 4005 l
-2413 3976 l
-2412 3948 l
-2410 3920 l
-2407 3894 l
-2403 3868 l
-2399 3844 l
-2393 3820 l
-2388 3797 l
-2381 3775 l
-2374 3755 l
-2366 3735 l
-2357 3716 l
-2348 3699 l
-2338 3682 l
-2328 3667 l
-2317 3653 l
-2306 3640 l
-2294 3628 l
-2281 3617 l
-2268 3607 l
-2255 3599 l
-2241 3591 l
-2227 3585 l
-2212 3579 l
-2197 3575 l
-2181 3572 l
-2166 3570 l
-2149 3569 l
-S
-543 1777 m
-853 1777 l
-1164 1777 l
-1474 1777 l
-1784 1777 l
-2094 1777 l
-2405 1777 l
-2715 1777 l
-3025 1777 l
-3335 1777 l
-3646 1777 l
-3956 1777 l
-4266 1777 l
-4288 1777 l
-4310 1777 l
-4333 1777 l
-4355 1777 l
-4377 1777 l
-4399 1777 l
-4421 1777 l
-4443 1777 l
-4466 1777 l
-4488 1777 l
-4489 1777 l
-4491 1777 l
-4492 1777 l
-4494 1777 l
-4496 1777 l
-4497 1777 l
-4499 1777 l
-4500 1777 l
-4502 1777 l
-4502 1777 l
-4502 1777 l
-4502 1777 l
-S
-3299 6121 m
-3299 6121 l
-3299 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3297 6121 l
-3296 6121 l
-3294 6121 l
-3293 6121 l
-3291 6121 l
-3269 6121 l
-3247 6121 l
-3225 6121 l
-3202 6121 l
-3180 6121 l
-3158 6121 l
-3136 6121 l
-3114 6121 l
-3092 6121 l
-3069 6121 l
-3047 6121 l
-3025 6121 l
-2715 6121 l
-2405 6121 l
-2094 6121 l
-1784 6121 l
-1474 6121 l
-1164 6121 l
-853 6121 l
-543 6121 l
-S
-543 6121 m
-543 5811 l
-543 5500 l
-543 5190 l
-543 4880 l
-543 4570 l
-543 4259 l
-543 3949 l
-543 3639 l
-543 3329 l
-543 3018 l
-543 2708 l
-543 2398 l
-543 2088 l
-543 1777 l
-S
-4505 1818 m
-4505 1813 l
-4505 1809 l
-4505 1804 l
-4505 1800 l
-4505 1795 l
-4505 1791 l
-4505 1786 l
-4505 1782 l
-4505 1777 l
-S
-4505 1858 m
-4505 1853 l
-4505 1849 l
-4505 1845 l
-4505 1840 l
-4505 1836 l
-4505 1831 l
-4505 1827 l
-4505 1822 l
-4505 1818 l
-S
-4505 1898 m
-4505 1894 l
-4505 1889 l
-4505 1885 l
-4505 1880 l
-4505 1876 l
-4505 1871 l
-4505 1867 l
-4505 1862 l
-4505 1858 l
-S
-4505 1938 m
-4505 1934 l
-4505 1929 l
-4505 1925 l
-4505 1920 l
-4505 1916 l
-4505 1912 l
-4505 1907 l
-4505 1903 l
-4505 1898 l
-S
-4500 1979 m
-4500 1974 l
-4500 1970 l
-4500 1965 l
-4500 1961 l
-4500 1956 l
-4500 1952 l
-4502 1950 l
-4505 1947 l
-4505 1943 l
-4505 1938 l
-S
-4500 2019 m
-4500 2014 l
-4500 2010 l
-4500 2005 l
-4500 2001 l
-4500 1996 l
-4500 1992 l
-4500 1988 l
-4500 1983 l
-4500 1979 l
-S
-4500 2059 m
-4500 2055 l
-4500 2050 l
-4500 2046 l
-4500 2041 l
-4500 2037 l
-4500 2032 l
-4500 2028 l
-4500 2023 l
-4500 2019 l
-S
-4500 2099 m
-4500 2095 l
-4500 2090 l
-4500 2086 l
-4500 2081 l
-4500 2077 l
-4500 2072 l
-4500 2068 l
-4500 2063 l
-4500 2059 l
-S
-4500 2139 m
-4500 2135 l
-4500 2131 l
-4500 2126 l
-4500 2122 l
-4500 2117 l
-4500 2113 l
-4500 2108 l
-4500 2104 l
-4500 2099 l
-S
-4496 2180 m
-4496 2175 l
-4496 2171 l
-4496 2166 l
-4496 2162 l
-4496 2157 l
-4496 2153 l
-4496 2148 l
-4498 2146 l
-4500 2144 l
-4500 2139 l
-S
-4496 2220 m
-4496 2215 l
-4496 2211 l
-4496 2206 l
-4496 2202 l
-4496 2198 l
-4496 2193 l
-4496 2189 l
-4496 2184 l
-4496 2180 l
-S
-4491 2260 m
-4491 2256 l
-4493 2253 l
-4496 2251 l
-4496 2247 l
-4496 2242 l
-4496 2238 l
-4496 2233 l
-4496 2229 l
-4496 2224 l
-4496 2220 l
-S
-4491 2300 m
-4491 2296 l
-4491 2291 l
-4491 2287 l
-4491 2282 l
-4491 2278 l
-4491 2274 l
-4491 2269 l
-4491 2265 l
-4491 2260 l
-S
-4487 2341 m
-4489 2338 l
-4491 2336 l
-4491 2332 l
-4491 2327 l
-4491 2323 l
-4491 2318 l
-4491 2314 l
-4491 2309 l
-4491 2305 l
-4491 2300 l
-S
-4487 2341 m
-4487 2345 l
-4487 2349 l
-4487 2354 l
-4487 2358 l
-4487 2363 l
-4487 2367 l
-4487 2372 l
-4487 2376 l
-4487 2381 l
-S
-4482 2421 m
-4482 2416 l
-4482 2412 l
-4484 2410 l
-S
-4487 2381 m
-4487 2385 l
-4487 2390 l
-4487 2394 l
-4487 2399 l
-4487 2403 l
-4487 2408 l
-4484 2410 l
-S
-4482 2461 m
-4482 2457 l
-4482 2452 l
-4482 2448 l
-4482 2443 l
-4482 2439 l
-4482 2434 l
-4482 2430 l
-4482 2425 l
-4482 2421 l
-S
-4478 2501 m
-4478 2497 l
-4478 2492 l
-4478 2488 l
-4478 2484 l
-4478 2479 l
-4478 2475 l
-4480 2472 l
-4482 2470 l
-4482 2466 l
-4482 2461 l
-S
-4473 2542 m
-4473 2537 l
-4473 2533 l
-4473 2528 l
-4476 2526 l
-4478 2524 l
-4478 2519 l
-4478 2515 l
-4478 2510 l
-4478 2506 l
-4478 2501 l
-S
-4469 2582 m
-4471 2580 l
-4473 2577 l
-4473 2573 l
-4473 2568 l
-4473 2564 l
-4473 2559 l
-4473 2555 l
-4473 2551 l
-4473 2546 l
-4473 2542 l
-S
-4469 2622 m
-4469 2618 l
-4469 2613 l
-4469 2609 l
-4469 2604 l
-4469 2600 l
-4469 2595 l
-4469 2591 l
-4469 2586 l
-4469 2582 l
-S
-4464 2662 m
-4464 2658 l
-4464 2653 l
-4464 2649 l
-4464 2644 l
-4464 2640 l
-4464 2635 l
-4464 2631 l
-4467 2629 l
-4469 2627 l
-4469 2622 l
-S
-4460 2702 m
-4460 2698 l
-4460 2694 l
-4460 2689 l
-4460 2685 l
-4460 2680 l
-4460 2676 l
-4462 2673 l
-4464 2671 l
-4464 2667 l
-4464 2662 l
-S
-4455 2743 m
-4455 2738 l
-4455 2734 l
-4455 2729 l
-4455 2725 l
-4455 2720 l
-4458 2718 l
-4460 2716 l
-4460 2711 l
-4460 2707 l
-4460 2702 l
-S
-4451 2783 m
-4451 2778 l
-4451 2774 l
-4451 2770 l
-4451 2765 l
-4451 2761 l
-4453 2758 l
-4455 2756 l
-4455 2752 l
-4455 2747 l
-4455 2743 l
-S
-4446 2823 m
-4446 2819 l
-4446 2814 l
-4446 2810 l
-4446 2805 l
-4446 2801 l
-4449 2799 l
-4451 2796 l
-4451 2792 l
-4451 2787 l
-4451 2783 l
-S
-4442 2863 m
-4442 2859 l
-4442 2854 l
-4442 2850 l
-4442 2845 l
-4442 2841 l
-4444 2839 l
-S
-4446 2823 m
-4446 2828 l
-4446 2832 l
-4446 2837 l
-4444 2839 l
-S
-4438 2904 m
-4438 2899 l
-4438 2895 l
-4438 2890 l
-4438 2886 l
-4438 2881 l
-4438 2877 l
-4440 2875 l
-4442 2872 l
-4442 2868 l
-4442 2863 l
-S
-4429 2944 m
-4431 2942 l
-4433 2939 l
-4433 2935 l
-4433 2930 l
-4433 2926 l
-4433 2921 l
-4433 2917 l
-4433 2913 l
-4435 2910 l
-4438 2908 l
-4438 2904 l
-S
-4424 2984 m
-4424 2980 l
-4424 2975 l
-4426 2973 l
-4429 2971 l
-4429 2966 l
-4429 2962 l
-4429 2957 l
-4429 2953 l
-4429 2948 l
-4429 2944 l
-S
-4420 3024 m
-4420 3020 l
-4420 3015 l
-4420 3011 l
-4422 3009 l
-4424 3006 l
-4424 3002 l
-4424 2997 l
-4424 2993 l
-4424 2988 l
-4424 2984 l
-S
-4415 3064 m
-4415 3060 l
-4415 3056 l
-4415 3051 l
-4415 3047 l
-4415 3042 l
-4417 3040 l
-4420 3038 l
-4420 3033 l
-4420 3029 l
-4420 3024 l
-S
-4406 3105 m
-4406 3100 l
-4408 3098 l
-4411 3096 l
-4411 3091 l
-4411 3087 l
-4411 3082 l
-4411 3078 l
-4411 3073 l
-4411 3069 l
-4413 3067 l
-4415 3064 l
-S
-4402 3145 m
-4402 3140 l
-4402 3136 l
-4402 3131 l
-4402 3127 l
-4404 3125 l
-S
-4406 3105 m
-4406 3109 l
-4406 3114 l
-4406 3118 l
-4406 3123 l
-4404 3125 l
-S
-4393 3185 m
-4395 3183 l
-4397 3181 l
-4397 3176 l
-4397 3172 l
-4397 3167 l
-4397 3163 l
-4397 3158 l
-4400 3156 l
-4402 3154 l
-4402 3149 l
-4402 3145 l
-S
-4388 3225 m
-4388 3221 l
-4388 3216 l
-4388 3212 l
-4391 3210 l
-4393 3207 l
-4393 3203 l
-4393 3199 l
-4393 3194 l
-4393 3190 l
-4393 3185 l
-S
-4379 3266 m
-4379 3261 l
-4382 3259 l
-4384 3257 l
-4384 3252 l
-4384 3248 l
-4384 3243 l
-4384 3239 l
-4386 3236 l
-4388 3234 l
-4388 3230 l
-4388 3225 l
-S
-4375 3306 m
-4375 3301 l
-4375 3297 l
-4375 3292 l
-4375 3288 l
-4377 3286 l
-4379 3283 l
-4379 3279 l
-4379 3274 l
-4379 3270 l
-4379 3266 l
-S
-4366 3346 m
-4366 3341 l
-4366 3337 l
-4368 3335 l
-4370 3333 l
-4370 3328 l
-4370 3324 l
-4370 3319 l
-4370 3315 l
-4373 3312 l
-4375 3310 l
-4375 3306 l
-S
-4357 3386 m
-4359 3384 l
-4362 3382 l
-4362 3377 l
-4362 3373 l
-4362 3368 l
-4362 3364 l
-4364 3362 l
-S
-4366 3346 m
-4366 3350 l
-4366 3355 l
-4366 3359 l
-4364 3362 l
-S
-4353 3426 m
-4353 3422 l
-4353 3417 l
-4353 3413 l
-4353 3409 l
-4355 3406 l
-4357 3404 l
-4357 3400 l
-4357 3395 l
-4357 3391 l
-4357 3386 l
-S
-4344 3467 m
-4344 3462 l
-4344 3458 l
-4344 3453 l
-4346 3451 l
-4348 3449 l
-4348 3444 l
-4348 3440 l
-4348 3435 l
-4348 3431 l
-4350 3429 l
-4353 3426 l
-S
-4335 3507 m
-4335 3502 l
-4335 3498 l
-4337 3496 l
-4339 3493 l
-4339 3489 l
-4339 3484 l
-4339 3480 l
-4339 3476 l
-4341 3473 l
-4344 3471 l
-4344 3467 l
-S
-4326 3547 m
-4326 3543 l
-4328 3540 l
-4330 3538 l
-4330 3534 l
-4330 3529 l
-4330 3525 l
-4330 3520 l
-4333 3518 l
-4335 3516 l
-4335 3511 l
-4335 3507 l
-S
-4317 3587 m
-4317 3583 l
-4319 3581 l
-4321 3578 l
-4321 3574 l
-4321 3569 l
-4321 3565 l
-4324 3563 l
-S
-4326 3547 m
-4326 3552 l
-4326 3556 l
-4326 3560 l
-4324 3563 l
-S
-4308 3627 m
-4308 3623 l
-4310 3621 l
-4312 3619 l
-4312 3614 l
-4312 3610 l
-4312 3605 l
-4315 3603 l
-4317 3601 l
-4317 3596 l
-4317 3592 l
-4317 3587 l
-S
-4299 3668 m
-4299 3663 l
-4301 3661 l
-4303 3659 l
-4303 3654 l
-4303 3650 l
-4303 3645 l
-4306 3643 l
-4308 3641 l
-4308 3636 l
-4308 3632 l
-4308 3627 l
-S
-4290 3708 m
-4290 3703 l
-4292 3701 l
-4295 3699 l
-4295 3695 l
-4295 3690 l
-4295 3686 l
-4297 3683 l
-4299 3681 l
-4299 3677 l
-4299 3672 l
-4299 3668 l
-S
-4281 3748 m
-4281 3744 l
-4281 3739 l
-4283 3737 l
-S
-4283 3737 m
-4286 3735 l
-4286 3730 l
-4286 3726 l
-4286 3721 l
-4288 3719 l
-4290 3717 l
-4290 3712 l
-4290 3708 l
-S
-4272 3788 m
-4272 3784 l
-4272 3779 l
-4274 3777 l
-4277 3775 l
-4277 3770 l
-4277 3766 l
-4277 3762 l
-4279 3759 l
-4281 3757 l
-4281 3753 l
-4281 3748 l
-S
-4263 3829 m
-4263 3824 l
-4263 3820 l
-4263 3815 l
-4265 3813 l
-4268 3811 l
-4268 3806 l
-4268 3802 l
-4268 3797 l
-4270 3795 l
-4272 3793 l
-4272 3788 l
-S
-4250 3869 m
-4252 3867 l
-4254 3864 l
-4254 3860 l
-4254 3855 l
-4254 3851 l
-4257 3849 l
-4259 3846 l
-4259 3842 l
-4259 3838 l
-4259 3833 l
-4261 3831 l
-4263 3829 l
-S
-4241 3909 m
-4241 3905 l
-4243 3902 l
-S
-4243 3902 m
-4245 3900 l
-4245 3896 l
-4245 3891 l
-4245 3887 l
-4248 3884 l
-4250 3882 l
-4250 3878 l
-4250 3873 l
-4250 3869 l
-S
-4232 3949 m
-4232 3945 l
-4232 3940 l
-4232 3936 l
-4234 3934 l
-4236 3931 l
-4236 3927 l
-4236 3922 l
-4239 3920 l
-4241 3918 l
-4241 3913 l
-4241 3909 l
-S
-4219 3989 m
-4221 3987 l
-4223 3985 l
-4223 3981 l
-4223 3976 l
-4223 3972 l
-4225 3969 l
-4228 3967 l
-4228 3963 l
-4228 3958 l
-4228 3954 l
-4230 3951 l
-4232 3949 l
-S
-4210 4030 m
-4210 4025 l
-4210 4021 l
-4212 4018 l
-4214 4016 l
-4214 4012 l
-4214 4007 l
-4214 4003 l
-4216 4001 l
-4219 3998 l
-4219 3994 l
-4219 3989 l
-S
-4196 4070 m
-4198 4068 l
-4201 4065 l
-4201 4061 l
-4201 4056 l
-4201 4052 l
-4203 4050 l
-S
-4203 4050 m
-4205 4048 l
-4205 4043 l
-4205 4039 l
-4207 4036 l
-4210 4034 l
-4210 4030 l
-S
-4187 4110 m
-4187 4106 l
-4187 4101 l
-4190 4099 l
-4192 4097 l
-4192 4092 l
-4192 4088 l
-4192 4083 l
-4194 4081 l
-4196 4079 l
-4196 4074 l
-4196 4070 l
-S
-4174 4150 m
-4174 4146 l
-4176 4144 l
-4178 4141 l
-4178 4137 l
-4178 4132 l
-4181 4130 l
-4183 4128 l
-4183 4124 l
-4183 4119 l
-4183 4115 l
-4185 4112 l
-4187 4110 l
-S
-4160 4191 m
-4163 4188 l
-S
-4163 4188 m
-4165 4186 l
-4165 4182 l
-4165 4177 l
-4167 4175 l
-4169 4173 l
-4169 4168 l
-4169 4164 l
-4172 4161 l
-4174 4159 l
-4174 4155 l
-4174 4150 l
-S
-4152 4231 m
-4152 4226 l
-4152 4222 l
-4154 4220 l
-4156 4217 l
-4156 4213 l
-4156 4208 l
-4158 4206 l
-4160 4204 l
-4160 4199 l
-4160 4195 l
-4160 4191 l
-S
-4138 4271 m
-4138 4266 l
-4140 4264 l
-4143 4262 l
-4143 4258 l
-4143 4253 l
-4145 4251 l
-4147 4249 l
-4147 4244 l
-4147 4240 l
-4147 4235 l
-4149 4233 l
-4152 4231 l
-S
-4125 4311 m
-4125 4307 l
-4127 4304 l
-4129 4302 l
-4129 4298 l
-4129 4293 l
-4131 4291 l
-4134 4289 l
-4134 4284 l
-4134 4280 l
-4136 4278 l
-4138 4275 l
-4138 4271 l
-S
-4111 4351 m
-4114 4349 l
-4116 4347 l
-4116 4342 l
-4116 4338 l
-4118 4336 l
-4120 4334 l
-4120 4329 l
-4120 4325 l
-4122 4322 l
-S
-4125 4311 m
-4125 4316 l
-4125 4320 l
-4122 4322 l
-S
-4098 4392 m
-4100 4389 l
-4102 4387 l
-4102 4383 l
-4102 4378 l
-4105 4376 l
-4107 4374 l
-4107 4369 l
-4107 4365 l
-4109 4363 l
-4111 4360 l
-4111 4356 l
-4111 4351 l
-S
-4085 4432 m
-4087 4430 l
-4089 4427 l
-4089 4423 l
-4089 4418 l
-4091 4416 l
-4093 4414 l
-4093 4409 l
-4093 4405 l
-4096 4403 l
-4098 4401 l
-4098 4396 l
-4098 4392 l
-S
-4071 4472 m
-4073 4470 l
-4076 4468 l
-4076 4463 l
-4076 4459 l
-4078 4456 l
-4080 4454 l
-4080 4450 l
-4080 4445 l
-4082 4443 l
-S
-4085 4432 m
-4085 4436 l
-4085 4441 l
-4082 4443 l
-S
-4058 4512 m
-4060 4510 l
-4062 4508 l
-4062 4503 l
-4062 4499 l
-4064 4497 l
-4067 4494 l
-4067 4490 l
-4067 4485 l
-4069 4483 l
-4071 4481 l
-4071 4477 l
-4071 4472 l
-S
-4044 4552 m
-4047 4550 l
-4049 4548 l
-4049 4544 l
-4049 4539 l
-4051 4537 l
-4053 4535 l
-4053 4530 l
-4053 4526 l
-4055 4523 l
-4058 4521 l
-4058 4517 l
-4058 4512 l
-S
-4031 4593 m
-4031 4588 l
-4033 4586 l
-4035 4584 l
-4035 4579 l
-4035 4575 l
-4038 4573 l
-4040 4570 l
-4040 4566 l
-4040 4561 l
-4042 4559 l
-S
-4044 4552 m
-4044 4557 l
-4042 4559 l
-S
-4017 4633 m
-4017 4628 l
-4017 4624 l
-4020 4622 l
-4022 4620 l
-4022 4615 l
-4024 4613 l
-4026 4611 l
-4026 4606 l
-4026 4602 l
-4029 4599 l
-4031 4597 l
-4031 4593 l
-S
-4000 4673 m
-4002 4671 l
-S
-4002 4671 m
-4004 4669 l
-4004 4664 l
-4006 4662 l
-4009 4660 l
-4009 4655 l
-4009 4651 l
-4011 4649 l
-4013 4646 l
-4013 4642 l
-4013 4637 l
-4015 4635 l
-4017 4633 l
-S
-3986 4713 m
-3988 4711 l
-3991 4709 l
-3991 4704 l
-3991 4700 l
-3993 4698 l
-3995 4695 l
-3995 4691 l
-3995 4687 l
-3997 4684 l
-4000 4682 l
-4000 4678 l
-4000 4673 l
-S
-3973 4754 m
-3973 4749 l
-3973 4745 l
-3975 4742 l
-3977 4740 l
-3977 4736 l
-3979 4733 l
-3982 4731 l
-3982 4727 l
-3982 4722 l
-3984 4720 l
-3986 4718 l
-3986 4713 l
-S
-3955 4794 m
-3957 4792 l
-3959 4789 l
-3959 4785 l
-3959 4780 l
-3962 4778 l
-S
-3962 4778 m
-3964 4776 l
-3964 4771 l
-3966 4769 l
-3968 4767 l
-3968 4763 l
-3968 4758 l
-3971 4756 l
-3973 4754 l
-S
-3942 4834 m
-3942 4830 l
-3944 4827 l
-3946 4825 l
-3946 4821 l
-3946 4816 l
-3948 4814 l
-3950 4812 l
-3950 4807 l
-3953 4805 l
-3955 4803 l
-3955 4798 l
-3955 4794 l
-S
-3924 4874 m
-3926 4872 l
-3928 4870 l
-3928 4865 l
-3928 4861 l
-3930 4859 l
-3933 4856 l
-3933 4852 l
-3935 4850 l
-3937 4847 l
-3937 4843 l
-3937 4838 l
-3939 4836 l
-3942 4834 l
-S
-3910 4914 m
-3910 4910 l
-3910 4906 l
-3912 4903 l
-3915 4901 l
-3915 4897 l
-3917 4894 l
-3919 4892 l
-3919 4888 l
-3919 4883 l
-3921 4881 l
-S
-3924 4874 m
-3924 4879 l
-3921 4881 l
-S
-3892 4955 m
-3892 4950 l
-3895 4948 l
-3897 4946 l
-3897 4941 l
-3899 4939 l
-3901 4937 l
-3901 4932 l
-3901 4928 l
-3904 4926 l
-3906 4923 l
-3906 4919 l
-3908 4917 l
-3910 4914 l
-S
-3874 4995 m
-3877 4993 l
-3879 4990 l
-3879 4986 l
-3879 4981 l
-3881 4979 l
-S
-3881 4979 m
-3883 4977 l
-3883 4973 l
-3886 4970 l
-3888 4968 l
-3888 4964 l
-3890 4961 l
-3892 4959 l
-3892 4955 l
-S
-3857 5035 m
-3859 5033 l
-3861 5031 l
-3861 5026 l
-3863 5024 l
-3866 5022 l
-3866 5017 l
-3868 5015 l
-3870 5013 l
-3870 5008 l
-3870 5004 l
-3872 5002 l
-3874 4999 l
-3874 4995 l
-S
-3843 5075 m
-3843 5071 l
-3843 5066 l
-3845 5064 l
-3848 5062 l
-3848 5057 l
-3850 5055 l
-3852 5053 l
-3852 5049 l
-3854 5046 l
-3857 5044 l
-3857 5040 l
-3857 5035 l
-S
-3825 5116 m
-3825 5111 l
-3828 5109 l
-3830 5107 l
-3830 5102 l
-3830 5098 l
-3832 5095 l
-3834 5093 l
-3834 5089 l
-3836 5086 l
-3839 5084 l
-3839 5080 l
-3841 5078 l
-S
-3843 5075 m
-3841 5078 l
-S
-3807 5156 m
-3807 5151 l
-3810 5149 l
-3812 5147 l
-3812 5142 l
-3812 5138 l
-3814 5136 l
-3816 5133 l
-3816 5129 l
-3819 5127 l
-3821 5124 l
-3821 5120 l
-3823 5118 l
-3825 5116 l
-S
-3790 5196 m
-3790 5191 l
-3792 5189 l
-3794 5187 l
-3794 5183 l
-3796 5180 l
-3799 5178 l
-3799 5174 l
-3799 5169 l
-3801 5167 l
-S
-3801 5167 m
-3803 5165 l
-3803 5160 l
-3805 5158 l
-3807 5156 l
-S
-3772 5236 m
-3772 5232 l
-3774 5229 l
-3776 5227 l
-3776 5223 l
-3776 5218 l
-3778 5216 l
-3781 5214 l
-3781 5209 l
-3783 5207 l
-3785 5205 l
-3785 5200 l
-3787 5198 l
-3790 5196 l
-S
-3754 5276 m
-3754 5272 l
-3754 5267 l
-3756 5265 l
-3758 5263 l
-3758 5259 l
-3761 5256 l
-S
-3761 5256 m
-3763 5254 l
-3763 5250 l
-3765 5247 l
-3767 5245 l
-3767 5241 l
-3769 5238 l
-3772 5236 l
-S
-3731 5317 m
-3734 5314 l
-3736 5312 l
-3736 5308 l
-3738 5305 l
-3740 5303 l
-3740 5299 l
-3743 5297 l
-3745 5294 l
-3745 5290 l
-3747 5288 l
-3749 5285 l
-3749 5281 l
-3752 5279 l
-3754 5276 l
-S
-3714 5357 m
-3716 5355 l
-3718 5352 l
-3718 5348 l
-3718 5343 l
-3720 5341 l
-S
-3720 5341 m
-3723 5339 l
-3723 5334 l
-3725 5332 l
-3727 5330 l
-3727 5326 l
-3729 5323 l
-3731 5321 l
-3731 5317 l
-S
-3696 5397 m
-3696 5393 l
-3698 5390 l
-3700 5388 l
-3700 5384 l
-3702 5381 l
-3705 5379 l
-3705 5375 l
-3707 5372 l
-3709 5370 l
-3709 5366 l
-3711 5364 l
-3714 5361 l
-3714 5357 l
-S
-3673 5437 m
-3676 5435 l
-3678 5433 l
-3678 5428 l
-3680 5426 l
-S
-3680 5426 m
-3682 5424 l
-3682 5419 l
-3685 5417 l
-3687 5415 l
-3687 5410 l
-3689 5408 l
-3691 5406 l
-3691 5402 l
-3694 5399 l
-3696 5397 l
-S
-3656 5477 m
-3656 5473 l
-3658 5471 l
-3660 5469 l
-3660 5464 l
-3662 5462 l
-3664 5460 l
-3664 5455 l
-3667 5453 l
-3669 5451 l
-3669 5446 l
-3671 5444 l
-3673 5442 l
-3673 5437 l
-S
-3633 5518 m
-3635 5515 l
-3638 5513 l
-3638 5509 l
-3640 5507 l
-S
-3640 5507 m
-3642 5504 l
-3642 5500 l
-3644 5498 l
-3647 5495 l
-3647 5491 l
-3649 5489 l
-3651 5486 l
-3651 5482 l
-3653 5480 l
-3656 5477 l
-S
-3615 5558 m
-3615 5553 l
-3618 5551 l
-3620 5549 l
-3620 5545 l
-3622 5542 l
-3624 5540 l
-3624 5536 l
-3626 5533 l
-3629 5531 l
-3629 5527 l
-3631 5524 l
-3633 5522 l
-3633 5518 l
-S
-3593 5598 m
-3595 5596 l
-3597 5594 l
-3597 5589 l
-3600 5587 l
-S
-3600 5587 m
-3602 5585 l
-3602 5580 l
-3604 5578 l
-3606 5576 l
-3606 5571 l
-3609 5569 l
-3611 5567 l
-3611 5562 l
-3613 5560 l
-3615 5558 l
-S
-3575 5638 m
-3575 5634 l
-3577 5632 l
-3580 5629 l
-3580 5625 l
-3582 5623 l
-3584 5620 l
-3584 5616 l
-3586 5614 l
-3588 5612 l
-3588 5607 l
-3591 5605 l
-3593 5603 l
-3593 5598 l
-S
-3553 5679 m
-3553 5674 l
-3555 5672 l
-3557 5670 l
-3557 5665 l
-3559 5663 l
-S
-3559 5663 m
-3562 5661 l
-3562 5656 l
-3564 5654 l
-3566 5652 l
-3568 5650 l
-3571 5647 l
-3571 5643 l
-3573 5641 l
-3575 5638 l
-S
-3530 5719 m
-3533 5717 l
-3535 5714 l
-3535 5710 l
-3537 5708 l
-3539 5705 l
-3539 5701 l
-3542 5699 l
-3544 5696 l
-3544 5692 l
-3546 5690 l
-3548 5688 l
-3548 5683 l
-3551 5681 l
-3553 5679 l
-S
-3508 5759 m
-3510 5757 l
-3513 5755 l
-3513 5750 l
-3515 5748 l
-3517 5746 l
-3517 5741 l
-3519 5739 l
-S
-3519 5739 m
-3521 5737 l
-3521 5732 l
-3524 5730 l
-3526 5728 l
-3526 5723 l
-3528 5721 l
-3530 5719 l
-S
-3486 5799 m
-3488 5797 l
-3490 5795 l
-3490 5790 l
-3492 5788 l
-3495 5786 l
-3495 5781 l
-3497 5779 l
-3499 5777 l
-3499 5772 l
-3501 5770 l
-3504 5768 l
-3506 5766 l
-3508 5763 l
-3508 5759 l
-S
-3463 5839 m
-3466 5837 l
-3468 5835 l
-3468 5831 l
-3470 5828 l
-3472 5826 l
-3472 5822 l
-3475 5819 l
-3477 5817 l
-3479 5815 l
-S
-3479 5815 m
-3481 5813 l
-3481 5808 l
-3483 5806 l
-3486 5804 l
-3486 5799 l
-S
-3441 5880 m
-3443 5877 l
-3445 5875 l
-3445 5871 l
-3448 5868 l
-3450 5866 l
-3450 5862 l
-3452 5860 l
-3454 5857 l
-3454 5853 l
-3457 5851 l
-3459 5848 l
-3461 5846 l
-3463 5844 l
-3463 5839 l
-S
-3419 5920 m
-3421 5918 l
-3423 5915 l
-3423 5911 l
-3425 5909 l
-3428 5906 l
-3428 5902 l
-3430 5900 l
-3432 5898 l
-3432 5893 l
-3434 5891 l
-3437 5889 l
-3439 5886 l
-S
-3441 5880 m
-3441 5884 l
-3439 5886 l
-S
-3396 5960 m
-3396 5956 l
-3399 5953 l
-S
-3399 5953 m
-3401 5951 l
-3401 5947 l
-3403 5944 l
-3405 5942 l
-3408 5940 l
-3410 5938 l
-3410 5933 l
-3412 5931 l
-3414 5929 l
-3414 5924 l
-3416 5922 l
-3419 5920 l
-S
-3370 6000 m
-3372 5998 l
-3374 5996 l
-3376 5994 l
-3378 5991 l
-3378 5987 l
-3381 5985 l
-3383 5982 l
-3383 5978 l
-3385 5976 l
-3387 5974 l
-3390 5971 l
-3392 5969 l
-3392 5965 l
-3394 5962 l
-3396 5960 l
-S
-3347 6041 m
-3349 6038 l
-3352 6036 l
-3352 6032 l
-3354 6029 l
-3356 6027 l
-3356 6023 l
-3358 6020 l
-S
-3358 6020 m
-3361 6018 l
-3363 6016 l
-3365 6014 l
-3365 6009 l
-3367 6007 l
-3370 6005 l
-3370 6000 l
-S
-3325 6081 m
-3325 6076 l
-3327 6074 l
-3329 6072 l
-3329 6067 l
-3332 6065 l
-3334 6063 l
-3336 6061 l
-3338 6058 l
-3338 6054 l
-3340 6052 l
-3343 6049 l
-3345 6047 l
-3347 6045 l
-3347 6041 l
-S
-3298 6121 m
-3300 6119 l
-3303 6116 l
-3303 6112 l
-3305 6110 l
-3307 6108 l
-3309 6105 l
-3311 6103 l
-3311 6099 l
-3314 6096 l
-3316 6094 l
-3316 6090 l
-3318 6087 l
-S
-3318 6087 m
-3320 6085 l
-3323 6083 l
-3325 6081 l
-S
-1 g
-Y
-2232.6 1612.9 m
-2233 1734 l
-2333 1734 l
-2333 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2279 1717 m
-2266 1713 l
-2258 1701 l
-2253 1680 l
-2253 1667 l
-2258 1646 l
-2266 1634 l
-2279 1630 l
-2287 1630 l
-2299 1634 l
-2308 1646 l
-2312 1667 l
-2312 1680 l
-2308 1701 l
-2299 1713 l
-2287 1717 l
-2279 1717 l
-S
-1 g
-Y
-1873.8 1612.9 m
-1874 1734 l
-1936 1734 l
-1936 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-1895 1701 m
-1903 1705 l
-1916 1717 l
-1916 1630 l
-S
-1 g
-Y
-1382.7 1612.9 m
-1383 1734 l
-1483 1734 l
-1483 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-1408 1696 m
-1408 1701 l
-1412 1709 l
-1416 1713 l
-1424 1717 l
-1441 1717 l
-1450 1713 l
-1454 1709 l
-1458 1701 l
-1458 1692 l
-1454 1684 l
-1445 1671 l
-1404 1630 l
-1462 1630 l
-S
-1 g
-Y
-682.1 1612.9 m
-682 1734 l
-782 1734 l
-782 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-711 1717 m
-757 1717 l
-732 1684 l
-745 1684 l
-753 1680 l
-757 1676 l
-761 1663 l
-761 1655 l
-757 1642 l
-749 1634 l
-736 1630 l
-724 1630 l
-711 1634 l
-707 1638 l
-703 1646 l
-S
-1 g
-Y
-2514.3 1612.9 m
-2514 1734 l
-2698 1734 l
-2698 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2539 1696 m
-2539 1701 l
-2544 1709 l
-2548 1713 l
-2556 1717 l
-2573 1717 l
-2581 1713 l
-2585 1709 l
-2589 1701 l
-2589 1692 l
-2585 1684 l
-2577 1671 l
-2535 1630 l
-2594 1630 l
-S
-2627 1717 m
-2673 1717 l
-2648 1684 l
-2660 1684 l
-2669 1680 l
-2673 1676 l
-2677 1663 l
-2677 1655 l
-2673 1642 l
-2665 1634 l
-2652 1630 l
-2640 1630 l
-2627 1634 l
-2623 1638 l
-2619 1646 l
-S
-1 g
-Y
-2826.8 1612.9 m
-2827 1734 l
-3011 1734 l
-3011 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2852 1696 m
-2852 1701 l
-2856 1709 l
-2860 1713 l
-2869 1717 l
-2885 1717 l
-2894 1713 l
-2898 1709 l
-2902 1701 l
-2902 1692 l
-2898 1684 l
-2889 1671 l
-2848 1630 l
-2906 1630 l
-S
-2935 1696 m
-2935 1701 l
-2940 1709 l
-2944 1713 l
-2952 1717 l
-2969 1717 l
-2977 1713 l
-2981 1709 l
-2985 1701 l
-2985 1692 l
-2981 1684 l
-2973 1671 l
-2931 1630 l
-2990 1630 l
-S
-1 g
-Y
-3158.7 1612.9 m
-3159 1734 l
-3317 1734 l
-3317 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-3184 1696 m
-3184 1701 l
-3188 1709 l
-3192 1713 l
-3200 1717 l
-3217 1717 l
-3226 1713 l
-3230 1709 l
-3234 1701 l
-3234 1692 l
-3230 1684 l
-3221 1671 l
-3180 1630 l
-3238 1630 l
-S
-3276 1701 m
-3284 1705 l
-3297 1717 l
-3297 1630 l
-S
-1 g
-Y
-3539 1612.9 m
-3539 1734 l
-3723 1734 l
-3723 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-3564 1696 m
-3564 1701 l
-3568 1709 l
-3572 1713 l
-3581 1717 l
-3597 1717 l
-3606 1713 l
-3610 1709 l
-3614 1701 l
-3614 1692 l
-3610 1684 l
-3602 1671 l
-3560 1630 l
-3618 1630 l
-S
-3668 1717 m
-3656 1713 l
-3648 1701 l
-3643 1680 l
-3643 1667 l
-3648 1646 l
-3656 1634 l
-3668 1630 l
-3677 1630 l
-3689 1634 l
-3698 1646 l
-3702 1667 l
-3702 1680 l
-3698 1701 l
-3689 1713 l
-3677 1717 l
-3668 1717 l
-S
-1 g
-Y
-3992.1 1612.9 m
-3992 1734 l
-4159 1734 l
-4159 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-4013 1701 m
-4021 1705 l
-4034 1717 l
-4034 1630 l
-S
-4138 1688 m
-4134 1676 l
-4126 1667 l
-4113 1663 l
-4109 1663 l
-4097 1667 l
-4088 1676 l
-4084 1688 l
-4084 1692 l
-4088 1705 l
-4097 1713 l
-4109 1717 l
-4113 1717 l
-4126 1713 l
-4134 1705 l
-4138 1688 l
-4138 1667 l
-4134 1646 l
-4126 1634 l
-4113 1630 l
-4105 1630 l
-4092 1634 l
-4088 1642 l
-S
-1 g
-Y
-4375 1612.9 m
-4375 1734 l
-4546 1734 l
-4546 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-4396 1701 m
-4404 1705 l
-4417 1717 l
-4417 1630 l
-S
-4488 1717 m
-4475 1713 l
-4471 1705 l
-4471 1696 l
-4475 1688 l
-4484 1684 l
-4500 1680 l
-4513 1676 l
-4521 1667 l
-4525 1659 l
-4525 1646 l
-4521 1638 l
-4517 1634 l
-4504 1630 l
-4488 1630 l
-4475 1634 l
-4471 1638 l
-4467 1646 l
-4467 1659 l
-4471 1667 l
-4479 1676 l
-4492 1680 l
-4509 1684 l
-4517 1688 l
-4521 1696 l
-4521 1705 l
-4517 1713 l
-4504 1717 l
-4488 1717 l
-S
-1 g
-Y
-324.3 2215.9 m
-324 2337 l
-508 2337 l
-508 2216 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-395 2320 m
-354 2320 l
-349 2283 l
-354 2287 l
-366 2291 l
-379 2291 l
-391 2287 l
-399 2279 l
-404 2266 l
-404 2258 l
-399 2245 l
-391 2237 l
-379 2233 l
-366 2233 l
-354 2237 l
-349 2241 l
-345 2249 l
-S
-454 2320 m
-441 2316 l
-433 2304 l
-429 2283 l
-429 2270 l
-433 2249 l
-441 2237 l
-454 2233 l
-462 2233 l
-475 2237 l
-483 2249 l
-487 2270 l
-487 2283 l
-483 2304 l
-475 2316 l
-462 2320 l
-454 2320 l
-S
-1 g
-Y
-328.5 3463.3 m
-328 3584 l
-508 3584 l
-508 3463 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-399 3555 m
-395 3564 l
-383 3568 l
-374 3568 l
-362 3564 l
-354 3551 l
-349 3530 l
-349 3509 l
-354 3493 l
-362 3484 l
-374 3480 l
-379 3480 l
-391 3484 l
-399 3493 l
-404 3505 l
-404 3509 l
-399 3522 l
-391 3530 l
-379 3534 l
-374 3534 l
-362 3530 l
-354 3522 l
-349 3509 l
-S
-454 3568 m
-441 3564 l
-433 3551 l
-429 3530 l
-429 3518 l
-433 3497 l
-441 3484 l
-454 3480 l
-462 3480 l
-475 3484 l
-483 3497 l
-487 3518 l
-487 3530 l
-483 3551 l
-475 3564 l
-462 3568 l
-454 3568 l
-S
-1 g
-Y
-324.3 4900 m
-324 5021 l
-508 5021 l
-508 4900 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-404 5004 m
-362 4917 l
-S
-345 5004 m
-404 5004 l
-S
-454 5004 m
-441 5000 l
-433 4988 l
-429 4967 l
-429 4954 l
-433 4933 l
-441 4921 l
-454 4917 l
-462 4917 l
-475 4921 l
-483 4933 l
-487 4954 l
-487 4967 l
-483 4988 l
-475 5000 l
-462 5004 l
-454 5004 l
-S
-1 g
-Y
-2021.5 1398.2 m
-2022 1553 l
-3070 1553 l
-3070 1398 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2042 1532 m
-2042 1444 l
-S
-2042 1532 m
-2080 1532 l
-2093 1528 l
-2097 1524 l
-2101 1515 l
-2101 1507 l
-2097 1498 l
-2093 1494 l
-2080 1490 l
-2042 1490 l
-S
-2072 1490 m
-2101 1444 l
-S
-2126 1532 m
-2130 1528 l
-2134 1532 l
-2130 1536 l
-2126 1532 l
-S
-2130 1503 m
-2130 1444 l
-S
-2209 1503 m
-2209 1436 l
-2205 1423 l
-2201 1419 l
-2193 1415 l
-2180 1415 l
-2172 1419 l
-S
-2209 1490 m
-2201 1498 l
-2193 1503 l
-2180 1503 l
-2172 1498 l
-2164 1490 l
-2159 1478 l
-2159 1469 l
-2164 1457 l
-2172 1448 l
-2180 1444 l
-2193 1444 l
-2201 1448 l
-2209 1457 l
-S
-2243 1532 m
-2243 1444 l
-S
-2243 1486 m
-2255 1498 l
-2264 1503 l
-2276 1503 l
-2285 1498 l
-2289 1486 l
-2289 1444 l
-S
-2326 1532 m
-2326 1461 l
-2331 1448 l
-2339 1444 l
-2347 1444 l
-S
-2314 1503 m
-2343 1503 l
-S
-2485 1503 m
-2485 1444 l
-S
-2485 1490 m
-2477 1498 l
-2468 1503 l
-2456 1503 l
-2448 1498 l
-2439 1490 l
-2435 1478 l
-2435 1469 l
-2439 1457 l
-2448 1448 l
-2456 1444 l
-2468 1444 l
-2477 1448 l
-2485 1457 l
-S
-2560 1490 m
-2556 1498 l
-2544 1503 l
-2531 1503 l
-2519 1498 l
-2514 1490 l
-2519 1482 l
-2527 1478 l
-2548 1473 l
-2556 1469 l
-2560 1461 l
-2560 1457 l
-2556 1448 l
-2544 1444 l
-2531 1444 l
-2519 1448 l
-2514 1457 l
-S
-2636 1490 m
-2627 1498 l
-2619 1503 l
-2606 1503 l
-2598 1498 l
-2590 1490 l
-2585 1478 l
-2585 1469 l
-2590 1457 l
-2598 1448 l
-2606 1444 l
-2619 1444 l
-2627 1448 l
-2636 1457 l
-S
-2661 1478 m
-2711 1478 l
-2711 1486 l
-2707 1494 l
-2702 1498 l
-2694 1503 l
-2681 1503 l
-2673 1498 l
-2665 1490 l
-2661 1478 l
-2661 1469 l
-2665 1457 l
-2673 1448 l
-2681 1444 l
-2694 1444 l
-2702 1448 l
-2711 1457 l
-S
-2740 1503 m
-2740 1444 l
-S
-2740 1486 m
-2752 1498 l
-2761 1503 l
-2773 1503 l
-2782 1498 l
-2786 1486 l
-2786 1444 l
-S
-2861 1490 m
-2857 1498 l
-2844 1503 l
-2832 1503 l
-2819 1498 l
-2815 1490 l
-2819 1482 l
-2828 1478 l
-2849 1473 l
-2857 1469 l
-2861 1461 l
-2861 1457 l
-2857 1448 l
-2844 1444 l
-2832 1444 l
-2819 1448 l
-2815 1457 l
-S
-2886 1532 m
-2890 1528 l
-2894 1532 l
-2890 1536 l
-2886 1532 l
-S
-2890 1503 m
-2890 1444 l
-S
-2940 1503 m
-2932 1498 l
-2924 1490 l
-2920 1478 l
-2920 1469 l
-2924 1457 l
-2932 1448 l
-2940 1444 l
-2953 1444 l
-2961 1448 l
-2970 1457 l
-2974 1469 l
-2974 1478 l
-2970 1490 l
-2961 1498 l
-2953 1503 l
-2940 1503 l
-S
-3003 1503 m
-3003 1444 l
-S
-3003 1486 m
-3016 1498 l
-3024 1503 l
-3036 1503 l
-3045 1498 l
-3049 1486 l
-3049 1444 l
-S
-1 g
-Y
-285 3592.2 m
-160 3592 l
-160 4306 l
-285 4306 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-181 3613 m
-268 3613 l
-S
-181 3613 m
-181 3642 l
-185 3655 l
-193 3663 l
-201 3667 l
-214 3672 l
-235 3672 l
-247 3667 l
-256 3663 l
-264 3655 l
-268 3642 l
-268 3613 l
-S
-235 3697 m
-235 3747 l
-227 3747 l
-218 3743 l
-214 3738 l
-210 3730 l
-210 3718 l
-214 3709 l
-222 3701 l
-235 3697 l
-243 3697 l
-256 3701 l
-264 3709 l
-268 3718 l
-268 3730 l
-264 3738 l
-256 3747 l
-S
-222 3822 m
-214 3814 l
-210 3805 l
-210 3793 l
-214 3784 l
-222 3776 l
-235 3772 l
-243 3772 l
-256 3776 l
-264 3784 l
-268 3793 l
-268 3805 l
-264 3814 l
-256 3822 l
-S
-181 3851 m
-268 3851 l
-S
-181 3880 m
-185 3885 l
-181 3889 l
-176 3885 l
-181 3880 l
-S
-210 3885 m
-268 3885 l
-S
-210 3918 m
-268 3918 l
-S
-227 3918 m
-214 3931 l
-210 3939 l
-210 3951 l
-214 3960 l
-227 3964 l
-268 3964 l
-S
-210 4043 m
-268 4043 l
-S
-222 4043 m
-214 4035 l
-210 4027 l
-210 4014 l
-214 4006 l
-222 3997 l
-235 3993 l
-243 3993 l
-256 3997 l
-264 4006 l
-268 4014 l
-268 4027 l
-264 4035 l
-256 4043 l
-S
-181 4081 m
-252 4081 l
-264 4085 l
-268 4093 l
-268 4102 l
-S
-210 4068 m
-210 4098 l
-S
-181 4123 m
-185 4127 l
-181 4131 l
-176 4127 l
-181 4123 l
-S
-210 4127 m
-268 4127 l
-S
-210 4177 m
-214 4169 l
-222 4160 l
-235 4156 l
-243 4156 l
-256 4160 l
-264 4169 l
-268 4177 l
-268 4189 l
-264 4198 l
-256 4206 l
-243 4210 l
-235 4210 l
-222 4206 l
-214 4198 l
-210 4189 l
-210 4177 l
-S
-210 4240 m
-268 4240 l
-S
-227 4240 m
-214 4252 l
-210 4261 l
-210 4273 l
-214 4281 l
-227 4286 l
-268 4286 l
-S
-1 g
-Y
-924.3 6283 m
-924 6468 l
-4172 6468 l
-4172 6283 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-949 6443 m
-949 6338 l
-S
-949 6443 m
-1015 6443 l
-S
-949 6393 m
-989 6393 l
-S
-1040 6443 m
-1040 6338 l
-S
-1110 6443 m
-1040 6373 l
-S
-1065 6398 m
-1110 6338 l
-S
-1200 6443 m
-1150 6443 l
-1145 6398 l
-1150 6403 l
-1165 6408 l
-1180 6408 l
-1195 6403 l
-1205 6393 l
-1210 6378 l
-1210 6368 l
-1205 6353 l
-1195 6343 l
-1180 6338 l
-1165 6338 l
-1150 6343 l
-1145 6348 l
-1140 6358 l
-S
-1380 6393 m
-1370 6403 l
-1360 6408 l
-1345 6408 l
-1335 6403 l
-1325 6393 l
-1320 6378 l
-1320 6368 l
-1325 6353 l
-1335 6343 l
-1345 6338 l
-1360 6338 l
-1370 6343 l
-1380 6353 l
-S
-1436 6408 m
-1426 6403 l
-1415 6393 l
-1410 6378 l
-1410 6368 l
-1415 6353 l
-1426 6343 l
-1436 6338 l
-1451 6338 l
-1461 6343 l
-1471 6353 l
-1476 6368 l
-1476 6378 l
-1471 6393 l
-1461 6403 l
-1451 6408 l
-1436 6408 l
-S
-1531 6408 m
-1521 6403 l
-1511 6393 l
-1506 6378 l
-1506 6368 l
-1511 6353 l
-1521 6343 l
-1531 6338 l
-1546 6338 l
-1556 6343 l
-1566 6353 l
-1571 6368 l
-1571 6378 l
-1566 6393 l
-1556 6403 l
-1546 6408 l
-1531 6408 l
-S
-1606 6408 m
-1606 6338 l
-S
-1606 6378 m
-1611 6393 l
-1621 6403 l
-1631 6408 l
-1646 6408 l
-S
-1726 6443 m
-1726 6338 l
-S
-1726 6393 m
-1716 6403 l
-1706 6408 l
-1691 6408 l
-1681 6403 l
-1671 6393 l
-1666 6378 l
-1666 6368 l
-1671 6353 l
-1681 6343 l
-1691 6338 l
-1706 6338 l
-1716 6343 l
-1726 6353 l
-S
-1761 6443 m
-1766 6438 l
-1771 6443 l
-1766 6448 l
-1761 6443 l
-S
-1766 6408 m
-1766 6338 l
-S
-1806 6408 m
-1806 6338 l
-S
-1806 6388 m
-1821 6403 l
-1831 6408 l
-1847 6408 l
-1857 6403 l
-1862 6388 l
-1862 6338 l
-S
-1957 6408 m
-1957 6338 l
-S
-1957 6393 m
-1947 6403 l
-1937 6408 l
-1922 6408 l
-1912 6403 l
-1902 6393 l
-1897 6378 l
-1897 6368 l
-1902 6353 l
-1912 6343 l
-1922 6338 l
-1937 6338 l
-1947 6343 l
-1957 6353 l
-S
-2002 6443 m
-2002 6358 l
-2007 6343 l
-2017 6338 l
-2027 6338 l
-S
-1987 6408 m
-2022 6408 l
-S
-2052 6378 m
-2112 6378 l
-2112 6388 l
-2107 6398 l
-2102 6403 l
-2092 6408 l
-2077 6408 l
-2067 6403 l
-2057 6393 l
-2052 6378 l
-2052 6368 l
-2057 6353 l
-2067 6343 l
-2077 6338 l
-2092 6338 l
-2102 6343 l
-2112 6353 l
-S
-2197 6393 m
-2192 6403 l
-2177 6408 l
-2162 6408 l
-2147 6403 l
-2142 6393 l
-2147 6383 l
-2157 6378 l
-2182 6373 l
-2192 6368 l
-2197 6358 l
-2197 6353 l
-2192 6343 l
-2177 6338 l
-2162 6338 l
-2147 6343 l
-2142 6353 l
-S
-2237 6408 m
-2232 6403 l
-2237 6398 l
-2242 6403 l
-2237 6408 l
-S
-2242 6343 m
-2237 6338 l
-2232 6343 l
-2237 6348 l
-2242 6343 l
-2242 6333 l
-2237 6323 l
-2232 6318 l
-S
-2363 6408 m
-2363 6338 l
-S
-2363 6388 m
-2378 6403 l
-2388 6408 l
-2403 6408 l
-2413 6403 l
-2418 6388 l
-2418 6338 l
-S
-2418 6388 m
-2433 6403 l
-2443 6408 l
-2458 6408 l
-2468 6403 l
-2473 6388 l
-2473 6338 l
-S
-2508 6378 m
-2568 6378 l
-2568 6388 l
-2563 6398 l
-2558 6403 l
-2548 6408 l
-2533 6408 l
-2523 6403 l
-2513 6393 l
-2508 6378 l
-2508 6368 l
-2513 6353 l
-2523 6343 l
-2533 6338 l
-2548 6338 l
-2558 6343 l
-2568 6353 l
-S
-2658 6408 m
-2658 6338 l
-S
-2658 6393 m
-2648 6403 l
-2638 6408 l
-2623 6408 l
-2613 6403 l
-2603 6393 l
-2598 6378 l
-2598 6368 l
-2603 6353 l
-2613 6343 l
-2623 6338 l
-2638 6338 l
-2648 6343 l
-2658 6353 l
-S
-2699 6408 m
-2699 6338 l
-S
-2699 6388 m
-2714 6403 l
-2724 6408 l
-2739 6408 l
-2749 6403 l
-2754 6388 l
-2754 6338 l
-S
-2869 6378 m
-2929 6378 l
-2929 6388 l
-2924 6398 l
-2919 6403 l
-2909 6408 l
-2894 6408 l
-2884 6403 l
-2874 6393 l
-2869 6378 l
-2869 6368 l
-2874 6353 l
-2884 6343 l
-2894 6338 l
-2909 6338 l
-2919 6343 l
-2929 6353 l
-S
-3019 6408 m
-3019 6303 l
-S
-3019 6393 m
-3009 6403 l
-2999 6408 l
-2984 6408 l
-2974 6403 l
-2964 6393 l
-2959 6378 l
-2959 6368 l
-2964 6353 l
-2974 6343 l
-2984 6338 l
-2999 6338 l
-3009 6343 l
-3019 6353 l
-S
-3059 6408 m
-3059 6358 l
-3064 6343 l
-3074 6338 l
-3090 6338 l
-3100 6343 l
-3115 6358 l
-S
-3115 6408 m
-3115 6338 l
-S
-3150 6443 m
-3155 6438 l
-3160 6443 l
-3155 6448 l
-3150 6443 l
-S
-3155 6408 m
-3155 6338 l
-S
-3195 6408 m
-3195 6338 l
-S
-3195 6388 m
-3210 6403 l
-3220 6408 l
-3235 6408 l
-3245 6403 l
-3250 6388 l
-3250 6338 l
-S
-3310 6408 m
-3300 6403 l
-3290 6393 l
-3285 6378 l
-3285 6368 l
-3290 6353 l
-3300 6343 l
-3310 6338 l
-3325 6338 l
-3335 6343 l
-3345 6353 l
-3350 6368 l
-3350 6378 l
-3345 6393 l
-3335 6403 l
-3325 6408 l
-3310 6408 l
-S
-3380 6408 m
-3435 6338 l
-S
-3435 6408 m
-3380 6338 l
-S
-3591 6443 m
-3591 6363 l
-3586 6348 l
-3581 6343 l
-3571 6338 l
-3561 6338 l
-3551 6343 l
-3546 6348 l
-3541 6363 l
-3541 6373 l
-S
-3631 6418 m
-3631 6423 l
-3636 6433 l
-3641 6438 l
-3651 6443 l
-3671 6443 l
-3681 6438 l
-3686 6433 l
-3691 6423 l
-3691 6413 l
-3686 6403 l
-3676 6388 l
-3626 6338 l
-3696 6338 l
-S
-3756 6443 m
-3741 6438 l
-3731 6423 l
-3726 6398 l
-3726 6383 l
-3731 6358 l
-3741 6343 l
-3756 6338 l
-3766 6338 l
-3781 6343 l
-3791 6358 l
-3796 6383 l
-3796 6398 l
-3791 6423 l
-3781 6438 l
-3766 6443 l
-3756 6443 l
-S
-3856 6443 m
-3841 6438 l
-3831 6423 l
-3826 6398 l
-3826 6383 l
-3831 6358 l
-3841 6343 l
-3856 6338 l
-3866 6338 l
-3881 6343 l
-3891 6358 l
-3896 6383 l
-3896 6398 l
-3891 6423 l
-3881 6438 l
-3866 6443 l
-3856 6443 l
-S
-3957 6443 m
-3942 6438 l
-3932 6423 l
-3927 6398 l
-3927 6383 l
-3932 6358 l
-3942 6343 l
-3957 6338 l
-3967 6338 l
-3982 6343 l
-3992 6358 l
-3997 6383 l
-3997 6398 l
-3992 6423 l
-3982 6438 l
-3967 6443 l
-3957 6443 l
-S
-4037 6348 m
-4032 6343 l
-4037 6338 l
-4042 6343 l
-4037 6348 l
-S
-4107 6443 m
-4092 6438 l
-4082 6423 l
-4077 6398 l
-4077 6383 l
-4082 6358 l
-4092 6343 l
-4107 6338 l
-4117 6338 l
-4132 6343 l
-4142 6358 l
-4147 6383 l
-4147 6398 l
-4142 6423 l
-4132 6438 l
-4117 6443 l
-4107 6443 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 263 3431 a(Figure)31 b(9:)41 b(An)30 b(example)h(of)g(a)g
-(displa)m(y)m(ed)g(image)g(with)f(a)h(co)s(ordinate)g(grid)f(plotted)i
-(o)m(v)m(er)f(it.)0 3786 y Fu(x)p FG(16.1,)46 b Fu(x)p
-FG(17.1,)f(and)40 b(the)h(description)g(of)g(the)g(Enco)s(ding)f
-(attribute)i(in)f(App)s(endix)e(C.)71 b(F)-8 b(or)42
-b(a)f(complete)0 3899 y(understanding)24 b(of)i(FitsChans)g(and)f
-(their)h(use)g(with)g(FITS)f(header)h(cards,)g(y)m(ou)h(should)e(read)g
-Fu(x)p FG(16)j(and)d Fu(x)p FG(17.)0 4178 y Fw(3.16)112
-b(.)19 b(.)g(.)g(Displa)m(y)38 b(a)g(Graphical)h(Co)s(ordinate)f(Grid)0
-4390 y FG(A)i(common)g(requiremen)m(t)g(when)f(displa)m(ying)h(image)h
-(data)f(is)g(to)h(plot)f(an)g(asso)s(ciated)h(co)s(ordinate)g(grid)0
-4503 y(\()p Fx(e.g.)27 b FG(Figure)h(9\))h(o)m(v)m(er)f(the)g(displa)m
-(y)m(ed)g(image.)81 b(The)27 b(use)g(of)h(AST)e(in)i(suc)m(h)f
-(circumstances)h(is)g(indep)s(enden)m(t)0 4616 y(of)33
-b(the)g(underlying)e(graphics)i(system,)h(so)f(starting)g(up)f(the)h
-(graphics)f(system,)i(setting)g(up)e(a)h(co)s(ordinate)0
-4729 y(system,)j(displa)m(ying)f(the)g(image,)i(and)d(closing)h(do)m
-(wn)g(afterw)m(ards)f(can)h(all)g(b)s(e)f(done)h(using)f(the)g
-(graphics)0 4842 y(routines)c(y)m(ou)h(w)m(ould)f(normally)h(use.)0
-4995 y(Ho)m(w)m(ev)m(er,)44 b(displa)m(ying)39 b(an)h(image)g(at)g(a)g
-(precise)f(lo)s(cation)i(can)f(b)s(e)e(a)i(little)h(\014ddly)d(with)h
-(some)g(graphics)0 5108 y(systems,)29 b(and)f(ob)m(viously)h(the)g
-(grid)f(dra)m(wn)g(b)m(y)g(AST)g(will)h(not)g(b)s(e)f(accurately)i
-(registered)f(with)f(the)h(image)0 5221 y(unless)c(this)h(is)g(done)f
-(correctly)-8 b(.)41 b(In)25 b(the)h(follo)m(wing)i(template,)g(w)m(e)e
-(therefore)h(illustrate)g(b)s(oth)e(steps,)h(basing)0
-5334 y(the)39 b(image)g(displa)m(y)g(on)f(the)h(PGPLOT)f(graphics)g
-(pac)m(k)-5 b(age.)2176 5301 y Fv(7)2283 5334 y FG(Plotting)40
-b(a)e(co)s(ordinate)i(grid)e(with)g(AST)0 5447 y(then)30
-b(b)s(ecomes)h(a)f(relativ)m(ely)j(minor)d(part)g(of)h(what)f(is)g
-(almost)i(a)f(complete)h(graphics)e(program.)p 0 5516
-1512 4 v 104 5570 a Fs(7)138 5602 y Fr(An)37 b(in)n(terface)i(is)g(pro)
-n(vided)e(with)h(AST)g(that)g(allo)n(ws)i(it)e(to)g(use)g(PGPLOT)h
-(\(SUN/15\))f(for)g(its)h(graphics,)j(although)0 5693
-y(in)n(terfaces)27 b(to)f(other)g(graphics)g(systems)g(ma)n(y)f(also)i
-(b)r(e)f(written.)p eop end
-%%Page: 28 38
-TeXDict begin 28 37 bop 0 52 a FG(28)3035 b Fz(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)0 351 y FG(Once)32 b(again,)j(w)m(e)e(assume)f(that)h
-(a)g(p)s(oin)m(ter,)h(W)m(CSINF)m(O,)f(to)g(a)g(suitable)g(F)-8
-b(rameSet)34 b(asso)s(ciated)g(with)e(the)0 464 y(image)g(has)e
-(already)h(b)s(een)e(obtained)i(\()p Fu(x)p FG(3.4\).)262
-712 y Ft(DOUBLE)41 b(PRECISION)e(BBOX\()j(4)h(\))262
-811 y(INTEGER)d(NX,)j(NY,)f(PGBEG,)f(PLOT)262 911 y(REAL)g(DATA\()h
-(NX,)g(NY)h(\),)g(GBOX\()e(4)j(\),)e(HI,)h(LO,)f(SCALE,)f(TR\()h(6)i
-(\))262 1011 y(REAL)d(X1,)i(X2,)f(XLEFT,)f(XRIGHT,)g(Y1,)h(Y2,)h
-(YBOTTOM,)d(YTOP)262 1210 y(...)0 1409 y(*)87 b(Access)41
-b(the)h(image)g(data,)f(which)h(we)h(assume)e(will)h(be)g(stored)f(in)i
-(the)g(real)0 1509 y(*)87 b(2-dimensional)38 b(array)j(DATA)h(with)g
-(dimension)e(sizes)i(NX)g(and)h(NY.)f(Also)0 1608 y(*)87
-b(derive)41 b(limits)g(for)h(scaling)f(it,)h(which)g(we)h(assign)e(to)h
-(the)h(variables)d(HI)0 1708 y(*)87 b(and)42 b(LO.)262
-1808 y(<this)f(stage)h(depends)e(on)j(your)f(data)g(system,)f(so)h(is)h
-(not)f(shown>)0 2007 y(*)87 b(Open)42 b(PGPLOT)f(using)g(the)i(device)e
-(given)g(by)i(environment)c(variable)0 2106 y(*)87 b(PGPLOT_DEV)39
-b(and)k(check)e(for)h(success.)262 2206 y(IF)g(\()h(PGBEG\()f(0,)g(')h
-(',)g(1,)g(1)g(\))g(.EQ.)f(1)h(\))h(THEN)0 2405 y(*)87
-b(Clear)41 b(the)i(screen)e(and)h(ensure)f(equal)h(scales)f(on)i(both)e
-(axes.)392 2505 y(CALL)h(PGPAGE)392 2605 y(CALL)g(PGWNAD\()f(0.0,)h
-(1.0,)g(0.0,)g(1.0)g(\))0 2804 y(*)87 b(Obtain)41 b(the)h(extent)f(of)i
-(the)f(plotting)f(area)h(\(not)g(strictly)e(necessary)g(for)0
-2903 y(*)87 b(PGPLOT,)40 b(but)j(possibly)d(for)i(other)g(graphics)e
-(systems\).)g(From)i(this,)g(derive)0 3003 y(*)87 b(the)42
-b(display)f(scale)g(in)i(graphics)d(units)i(per)g(pixel)g(so)g(that)g
-(the)h(image)0 3103 y(*)87 b(will)42 b(fit)g(within)f(the)h(display)f
-(area.)392 3202 y(CALL)h(PGQWIN\()f(X1,)h(X2,)h(Y1,)f(Y2)h(\))392
-3302 y(SCALE)f(=)h(MIN\()f(\()h(X2)g(-)g(X1)g(\))g(/)g(NX,)f(\()i(Y2)e
-(-)i(Y1)e(\))h(/)h(NY)e(\))0 3501 y(*)87 b(Calculate)40
-b(the)i(extent)f(of)i(the)f(area)g(in)h(graphics)d(units)i(that)g(the)g
-(image)0 3601 y(*)87 b(will)42 b(occupy,)e(so)j(as)g(to)g(centre)e(it)i
-(within)e(the)h(display)f(area.)392 3700 y(XLEFT)129
-b(=)43 b(0.5)f(*)i(\()f(X1)g(+)g(X2)g(-)g(NX)f(*)i(SCALE)d(\))392
-3800 y(XRIGHT)85 b(=)43 b(0.5)f(*)i(\()f(X1)g(+)g(X2)g(+)g(NX)f(*)i
-(SCALE)d(\))392 3900 y(YBOTTOM)g(=)i(0.5)f(*)i(\()f(Y1)g(+)g(Y2)g(-)g
-(NY)f(*)i(SCALE)d(\))392 3999 y(YTOP)173 b(=)43 b(0.5)f(*)i(\()f(Y1)g
-(+)g(Y2)g(+)g(NY)f(*)i(SCALE)d(\))0 4199 y(*)87 b(Set)42
-b(up)h(a)g(PGPLOT)e(coordinate)f(transformation)d(matrix)k(and)i
-(display)e(the)0 4298 y(*)87 b(image)41 b(data)h(as)h(a)g(grey)f(scale)
-g(map)g(\(these)f(details)g(are)h(specific)e(to)0 4398
-y(*)87 b(PGPLOT\).)392 4497 y(TR\()43 b(1)g(\))g(=)g(XLEFT)f(-)h(0.5)f
-(*)h(SCALE)392 4597 y(TR\()g(2)g(\))g(=)g(SCALE)392 4697
-y(TR\()g(3)g(\))g(=)g(0.0)392 4796 y(TR\()g(4)g(\))g(=)g(YBOTTOM)e(-)i
-(0.5)f(*)i(SCALE)392 4896 y(TR\()f(5)g(\))g(=)g(0.0)392
-4996 y(TR\()g(6)g(\))g(=)g(SCALE)392 5095 y(CALL)f(PGGRAY\()f(DATA,)g
-(NX,)i(NY,)f(1,)h(NX,)f(1,)h(NY,)f(HI,)h(LO,)f(TR)h(\))0
-5295 y(*)87 b(BEGINNING)40 b(OF)i(AST)h(BIT)0 5394 y(*)87
-b(================)o(==)o(==)0 5494 y(*)g(Store)41 b(the)i(locations)c
-(of)k(the)g(bottom)e(left)h(and)g(top)g(right)g(corners)f(of)h(the)0
-5593 y(*)87 b(region)41 b(used)h(to)h(display)d(the)j(image,)e(in)h
-(graphics)f(coordinates.)392 5693 y(GBOX\()h(1)h(\))g(=)g(XLEFT)p
-eop end
-%%Page: 29 39
-TeXDict begin 29 38 bop 0 52 a Fz(3.17)93 b(.)15 b(.)g(.)h(Switc)m(h)30
-b(to)h(Plot)h(a)e(Di\013eren)m(t)i(Celestial)g(Co)s(ordinate)f(Grid)
-1232 b FG(29)392 351 y Ft(GBOX\()42 b(2)h(\))g(=)g(YBOTTOM)392
-451 y(GBOX\()f(3)h(\))g(=)g(XRIGHT)392 551 y(GBOX\()f(4)h(\))g(=)g
-(YTOP)0 750 y(*)87 b(Similarly,)39 b(store)j(the)g(locations)e(of)j
-(the)f(image's)f(bottom)g(left)h(and)g(top)0 849 y(*)87
-b(right)41 b(corners,)g(in)h(pixel)g(coordinates)d(--)k(with)f(the)g
-(first)f(pixel)h(centred)0 949 y(*)87 b(at)43 b(\(1,1\).)392
-1049 y(BBOX\()f(1)h(\))g(=)g(0.5D0)392 1148 y(BBOX\()f(2)h(\))g(=)g
-(0.5D0)392 1248 y(BBOX\()f(3)h(\))g(=)g(NX)g(+)g(0.5D0)392
-1348 y(BBOX\()f(4)h(\))g(=)g(NY)g(+)g(0.5D0)0 1547 y(*)87
-b(Create)41 b(a)i(Plot,)f(based)f(on)i(the)f(FrameSet)e(associated)g
-(with)i(the)0 1646 y(*)87 b(image.)41 b(This)h(attaches)e(the)i(Plot)g
-(to)h(the)f(graphics)f(surface)f(so)j(that)f(it)0 1746
-y(*)87 b(matches)40 b(the)j(displayed)d(image.)h(Specify)f(that)i(a)i
-(complete)c(set)i(of)h(grid)0 1846 y(*)87 b(lines)41
-b(should)g(be)i(drawn)f(\(rather)e(than)i(just)g(coordinate)e(axes\).)
-392 1945 y(PLOT)i(=)h(AST_PLOT\()d(WCSINFO,)h(GBOX,)g(BBOX,)h
-('Grid=1',)d(STATUS)j(\))0 2145 y(*)87 b(Optionally,)39
-b(we)k(can)f(now)g(set)h(other)e(Plot)h(attributes)d(to)k(control)e
-(the)0 2244 y(*)87 b(appearance)39 b(of)k(the)f(grid.)g(The)g(values)f
-(assigned)g(here)g(use)i(the)0 2344 y(*)87 b(colour/font)39
-b(indices)h(defined)h(by)i(the)f(underlying)e(graphics)g(system.)392
-2443 y(CALL)i(AST_SET\()e(PLOT,)i('Colour\(grid\)=2,)37
-b(Font\(textlab\)=3')o(,)h(STATUS)j(\))0 2643 y(*)87
-b(Use)42 b(the)g(Plot)g(to)h(draw)f(the)g(coordinate)e(grid.)392
-2742 y(CALL)i(AST_GRID\()e(PLOT,)i(STATUS)f(\))392 2942
-y(<maybe)g(some)h(more)g(AST)h(graphics)d(here>)0 3141
-y(*)87 b(Annul)41 b(the)i(Plot)f(when)f(finished)g(\(or)h(use)g(the)h
-(AST_BEGIN/AST_EN)o(D)0 3240 y(*)87 b(technique)40 b(shown)h
-(earlier\).)392 3340 y(CALL)h(AST_ANNUL\()e(PLOT,)h(STATUS)g(\))0
-3539 y(*)87 b(END)42 b(OF)h(AST)f(BIT)0 3639 y(*)87 b(==============)0
-3838 y(*)g(Close)41 b(down)h(the)h(graphics)d(system.)392
-3938 y(CALL)i(PGEND)262 4037 y(END)g(IF)0 4260 y FG(Note)27
-b(that)g(once)g(y)m(ou)f(ha)m(v)m(e)h(set)g(up)d(a)j(Plot)g(whic)m(h)e
-(is)h(aligned)h(with)f(a)g(displa)m(y)m(ed)h(image,)h(y)m(ou)e(ma)m(y)h
-(also)g(use)0 4373 y(it)36 b(to)g(generate)h(further)d(graphical)i
-(output)e(of)i(y)m(our)f(o)m(wn,)i(sp)s(eci\014ed)d(in)h(the)h(image's)
-g(w)m(orld)g(co)s(ordinate)0 4486 y(system)h(\(suc)m(h)f(as)h(mark)m
-(ers)g(to)g(represen)m(t)g(astronomical)h(ob)5 b(jects,)39
-b(annotation,)h Fx(etc.)p FG(\).)59 b(There)36 b(is)h(also)g(a)0
-4599 y(range)32 b(of)g(Plot)h(attributes)f(whic)m(h)g(giv)m(es)h(con)m
-(trol)g(o)m(v)m(er)g(most)f(asp)s(ects)g(of)g(the)g(output's)g(app)s
-(earance.)45 b(F)-8 b(or)0 4712 y(details)31 b(of)g(the)f(facilities)j
-(a)m(v)-5 b(ailable,)33 b(see)e Fu(x)p FG(21)h(and)d(the)i(description)
-f(of)h(the)f(Plot)i(class)f(in)f(App)s(endix)f(D.)0 4864
-y(F)-8 b(or)24 b(details)h(of)f(ho)m(w)g(to)g(build)f(a)h(graphics)g
-(program)f(whic)m(h)h(uses)f(PGPLOT,)g(see)h Fu(x)p FG(3.3)h(and)f(the)
-f(description)0 4977 y(of)31 b(the)f(ast)p Fy(_)p FG(link)h(command)f
-(in)g(App)s(endix)f(E.)0 5256 y Fw(3.17)112 b(.)19 b(.)g(.)g(Switc)m(h)
-37 b(to)g(Plot)g(a)h(Di\013eren)m(t)f(Celestial)h(Co)s(ordinate)h(Grid)
-0 5467 y FG(Once)32 b(y)m(ou)f(ha)m(v)m(e)i(set)f(up)f(a)h(Plot)g(to)h
-(dra)m(w)e(a)h(co)s(ordinate)g(grid)g(\()p Fu(x)p FG(3.16\),)i(it)e(is)
-g(a)g(simple)g(matter)g(to)g(c)m(hange)0 5580 y(things)39
-b(so)g(that)h(the)g(grid)e(represen)m(ts)i(a)f(di\013eren)m(t)h
-(celestial)h(co)s(ordinate)f(system.)68 b(F)-8 b(or)40
-b(example,)i(after)0 5693 y(creating)32 b(the)e(Plot)i(with)e(AST)p
-Fy(_)p FG(PLOT,)e(y)m(ou)j(could)f(use:)p eop end
-%%Page: 30 40
-TeXDict begin 30 39 bop 0 52 a FG(30)3035 b Fz(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)262 351 y Ft(CALL)41 b(AST_SET\()g(PLOT,)g
-('System=Galactic')o(,)c(STATUS)k(\))0 600 y FG(or:)262
-825 y Ft(CALL)g(AST_SET\()g(PLOT,)g('System=FK5,)e(Equinox=J2010',)e
-(STATUS)k(\))0 1062 y FG(and)i(an)m(y)i(axes)g(and/or)f(grid)f(dra)m
-(wn)h(subsequen)m(tly)f(w)m(ould)h(represen)m(t)g(the)g(new)g
-(celestial)j(co)s(ordinate)0 1175 y(system)37 b(y)m(ou)g(sp)s
-(eci\014ed.)60 b(Note,)40 b(ho)m(w)m(ev)m(er,)h(that)c(this)g(will)g
-(only)g(w)m(ork)h(if)e(the)i(original)g(grid)e(represen)m(ted)0
-1288 y(celestial)g(co)s(ordinates)e(of)g(some)g(kind)f(\(see)h
-Fu(x)p FG(3.8)h(for)f(ho)m(w)f(to)i(determine)e(if)h(this)f(is)h(the)g
-(case)3314 1255 y Fv(8)3354 1288 y FG(\).)51 b(If)33
-b(it)h(did)0 1401 y(not,)d(y)m(ou)g(will)f(get)i(an)e(error)g(message.)
-0 1564 y(F)-8 b(or)37 b(more)g(information)f(ab)s(out)h(the)f
-(celestial)j(co)s(ordinate)e(systems)g(a)m(v)-5 b(ailable,)40
-b(see)d(the)g(descriptions)f(of)0 1677 y(the)31 b(System,)f(Equino)m(x)
-g(and)g(Ep)s(o)s(c)m(h)g(attributes)h(in)f(App)s(endix)e(C.)0
-1970 y Fw(3.18)112 b(.)19 b(.)g(.)g(Giv)m(e)38 b(a)f(User)h(Con)m(trol)
-f(Ov)m(er)h(the)f(App)s(earance)i(of)e(a)h(Plot)0 2192
-y FG(The)21 b(idea)h(of)g(using)f(a)h(Plot's)g(attributes)g(to)h(con)m
-(trol)f(the)g(app)s(earance)g(of)g(the)f(graphical)i(output)e(it)h(pro)
-s(duces)0 2305 y(\()p Fu(x)p FG(3.16)36 b(and)c Fu(x)p
-FG(3.17\))k(can)e(easily)g(b)s(e)f(extended)g(to)h(allo)m(w)h(the)f
-(user)e(of)i(a)f(program)h(complete)g(con)m(trol)h(o)m(v)m(er)0
-2417 y(suc)m(h)30 b(matters.)0 2580 y(F)-8 b(or)39 b(instance,)i(if)d
-(the)g(\014le)g(\\plot.con\014g")i(con)m(tains)f(a)g(series)f(of)g
-(plotting)h(options)g(in)f(the)g(form)f(of)i(Plot)0 2693
-y(attribute)c(assignmen)m(ts)f(\(see)h(b)s(elo)m(w)f(for)g(an)g
-(example\),)i(then)e(w)m(e)g(could)g(create)h(a)g(Plot)g(and)e
-(implemen)m(t)0 2806 y(these)e(assignmen)m(ts)g(b)s(efore)f(pro)s
-(ducing)f(the)h(graphical)i(output)e(as)g(follo)m(ws:)262
-3055 y Ft(CHARACTER)39 b(LINE\()j(120)g(\))262 3155 y(INTEGER)e(BASE)
-262 3354 y(...)0 3553 y(*)87 b(Create)41 b(a)i(Plot)f(and)g(define)f
-(the)i(default)d(appearance)g(of)j(the)f(graphical)0
-3653 y(*)87 b(output)41 b(it)i(will)f(produce.)262 3753
-y(PLOT)f(=)j(AST_PLOT\()39 b(WCSINFO,)i(GBOX,)g(PBOX,)218
-3852 y(:)740 b('Grid=1,)41 b(Colour\(grid\)=2,)c(Font\(textlab\)=3',)
-218 3952 y(:)740 b(STATUS)42 b(\))0 4151 y(*)87 b(Obtain)41
-b(the)h(value)g(of)g(any)h(Plot)f(attributes)d(we)k(want)f(to)h
-(preserve.)262 4251 y(BASE)e(=)j(AST_GETI\()39 b(PLOT,)j('Base',)f
-(STATUS)g(\))0 4450 y(*)87 b(Open)42 b(the)g(plot)g(configuration)c
-(file,)k(if)g(it)h(exists.)262 4550 y(OPEN)e(\()j(1,)e(FILE)g(=)h
-('plot.config',)38 b(STATUS)j(=)j('OLD',)d(ERR)h(=)h(8)g(\))0
-4749 y(*)87 b(Read)42 b(each)g(line)g(of)g(text)g(and)h(use)f(it)h(to)f
-(set)h(new)f(Plot)g(attribute)0 4849 y(*)87 b(values.)40
-b(Close)i(the)g(file)g(when)g(done.)44 4948 y(6)174 b(CONTINUE)392
-5048 y(READ)42 b(\()h(1,)g('\(A\)',)e(END)i(=)g(7)g(\))g(LINE)392
-5147 y(CALL)f(AST_SET\()e(PLOT,)i(LINE,)g(STATUS)f(\))262
-5247 y(GO)h(TO)h(6)44 5347 y(7)174 b(CLOSE)41 b(\()i(1)g(\))44
-5446 y(8)174 b(CONTINUE)p 0 5607 1512 4 v 104 5661 a
-Fs(8)138 5693 y Fr(Note)26 b(that)f(the)h(metho)r(ds)f(applied)h(to)g
-(a)g(F)-6 b(rameSet)26 b(ma)n(y)f(b)r(e)g(used)h(equally)f(w)n(ell)i
-(with)f(a)g(Plot.)p eop end
-%%Page: 31 41
-TeXDict begin 31 40 bop 0 52 a Fz(3.18)93 b(.)15 b(.)g(.)h(Giv)m(e)31
-b(a)g(User)g(Con)m(trol)g(Ov)m(er)f(the)h(App)s(earance)f(of)g(a)h
-(Plot)1260 b FG(31)0 351 y Ft(*)87 b(Restore)40 b(any)j(attribute)d
-(values)h(we)i(are)f(preserving.)262 451 y(CALL)f(AST_SETI\()f(PLOT,)i
-('Base',)f(BASE,)g(STATUS)g(\))0 650 y(*)87 b(Produce)40
-b(the)j(graphical)d(output)h(\(e.g.\).)262 750 y(CALL)g(AST_GRID\()f
-(PLOT,)i(STATUS)f(\))0 1012 y FG(Notice)g(that)f(w)m(e)f(tak)m(e)i
-(care)f(that)f(the)h(Plot's)g(Base)g(attribute)f(is)h(preserv)m(ed)e
-(so)i(that)f(the)g(user)g(cannot)0 1125 y(c)m(hange)31
-b(it.)41 b(This)29 b(is)h(b)s(ecause)g(graphical)h(output)e(will)i(not)
-f(b)s(e)f(pro)s(duced)g(successfully)g(if)h(the)g(base)h(F)-8
-b(rame)0 1238 y(do)s(es)30 b(not)h(describ)s(e)e(the)i(plotting)g
-(surface)g(to)g(whic)m(h)f(w)m(e)h(attac)m(hed)h(the)f(Plot)g(when)e(w)
-m(e)i(created)g(it.)0 1401 y(The)21 b(arrangemen)m(t)i(sho)m(wn)d(ab)s
-(o)m(v)m(e)j(allo)m(ws)g(the)f(con)m(ten)m(ts)h(of)f(the)g
-(\\plot.con\014g")h(\014le)f(to)g(con)m(trol)h(most)f(asp)s(ects)0
-1514 y(of)33 b(the)f(graphical)i(output)e(pro)s(duced)f(\(including)h
-(the)h(co)s(ordinate)g(system)g(used;)g(the)f(colour,)i(line)f(st)m
-(yle,)0 1626 y(thic)m(kness)22 b(and)f(fon)m(t)i(used)e(for)g(eac)m(h)i
-(comp)s(onen)m(t;)i(the)d(p)s(ositioning)g(of)g(axes)g(and)g(tic)m(k)h
-(marks;)h(the)e(precision,)0 1739 y(format)31 b(and)e(p)s(ositioning)i
-(of)g(lab)s(els;)f Fx(etc.)p FG(\))41 b Fx(via)30 b FG(assignmen)m(ts)h
-(of)g(the)g(form:)227 1988 y Ft(System=Galactic,)37 b(Equinox)k(=)i
-(2001)227 2088 y(Border)e(=)j(1,)e(Colour\()f(border)g(\))i(=)g(1)227
-2188 y(Colour\()e(grid)h(\))h(=)g(2)227 2287 y(DrawAxes)e(=)i(1)227
-2387 y(Colour\()e(axes)h(\))h(=)g(3)227 2487 y(Digits)e(=)j(8)227
-2586 y(Labelling)c(=)j(Interior)0 2849 y FG(F)-8 b(or)32
-b(a)g(more)f(sophisticated)h(in)m(terface,)i(y)m(ou)d(could)h(ob)m
-(viously)g(p)s(erform)d(pre-pro)s(cessing)i(on)g(this)g(input|)0
-2961 y(for)38 b(example,)j(to)d(translate)h(w)m(ords)f(lik)m(e)h
-(\\red",)i(\\green")e(and)e(\\blue")i(in)m(to)g(colour)f(indices,)i(to)
-f(p)s(ermit)0 3074 y(commen)m(ts)31 b(and)f(blank)g(lines,)h
-Fx(etc.)0 3237 y FG(F)-8 b(or)30 b(a)g(full)f(list)h(of)f(the)h
-(attributes)g(that)g(ma)m(y)g(b)s(e)e(used)h(to)h(con)m(trol)h(the)e
-(app)s(earance)h(of)f(graphical)i(output,)0 3350 y(see)24
-b(the)f(description)g(of)g(the)h(Plot)g(class)g(in)e(App)s(endix)g(D.)
-38 b(F)-8 b(or)24 b(a)g(complete)g(description)g(of)f(eac)m(h)h
-(individual)0 3463 y(attribute)31 b(\()p Fx(e.g.)f FG(those)h(ab)s(o)m
-(v)m(e\),)h(see)f(the)g(attribute's)g(en)m(try)g(in)f(App)s(endix)e(C.)
-p eop end
-%%Page: 32 42
-TeXDict begin 32 41 bop 0 52 a FG(32)3035 b Fz(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)p eop end
-%%Page: 33 43
-TeXDict begin 33 42 bop 3689 52 a FG(33)0 351 y FA(4)135
-b(An)44 b(AST)g(Ob)7 b(ject)45 b(Primer)0 604 y FG(The)38
-b(AST)h(library)f(deals)i(throughout)e(with)h(en)m(tities)i(called)f
-(Ob)5 b(jects)39 b(and)f(a)i(basic)f(understanding)e(of)0
-716 y(ho)m(w)j(to)i(handle)e(these)g(is)h(needed)f(b)s(efore)g(y)m(ou)h
-(can)f(use)h(the)f(library)g(e\013ectiv)m(ely)-8 b(.)74
-b(If)40 b(y)m(ou)h(are)g(already)0 829 y(familiar)34
-b(with)f(an)g(ob)5 b(ject-orien)m(ted)35 b(language,)g(suc)m(h)e(as)g
-(C++,)g(few)g(of)g(the)h(concepts)f(should)g(seem)g(new)0
-942 y(to)c(y)m(ou.)40 b(Be)29 b(a)m(w)m(are,)i(ho)m(w)m(ev)m(er,)f
-(that)f(AST)f(is)g(designed)g(to)h(b)s(e)f(used)f Fx(via)h
-FG(fairly)h(con)m(v)m(en)m(tional)i(F)-8 b(ortran)29
-b(and)0 1055 y(C)h(in)m(terfaces,)i(so)f(some)f(things)h(ha)m(v)m(e)g
-(to)g(b)s(e)f(done)g(a)h(little)h(di\013eren)m(tly)-8
-b(.)0 1217 y(If)24 b(y)m(ou)h(are)g(not)g(already)g(familiar)h(with)e
-(ob)5 b(ject-orien)m(ted)27 b(programming,)e(then)g(don't)f(w)m(orry|w)
-m(e)h(will)g(not)0 1330 y(emphasise)33 b(this)g(asp)s(ect)h(more)f
-(than)g(is)g(necessary)h(and)f(will)g(not)h(assume)f(an)m(y)g(bac)m
-(kground)g(kno)m(wledge.)0 1443 y(Instead,)f(this)f(section)i(concen)m
-(trates)g(on)f(presen)m(ting)g(all)g(the)g(fundamen)m(tal)f
-(information)h(y)m(ou)g(will)f(need,)0 1556 y(explaining)37
-b(ho)m(w)g(AST)f(Ob)5 b(jects)36 b(b)s(eha)m(v)m(e)i(and)e(ho)m(w)g(to)
-i(manipulate)f(them)f(from)g(con)m(v)m(en)m(tional)k(F)-8
-b(ortran)0 1669 y(programs.)0 1831 y(If)40 b(y)m(ou)h(lik)m(e)g(to)g
-(read)g(do)s(cumen)m(ts)f(from)g(co)m(v)m(er)i(to)f(co)m(v)m(er,)k
-(then)40 b(y)m(ou)g(can)h(consider)f(this)g(section)i(as)f(an)0
-1944 y(in)m(tro)s(duction)32 b(to)h(the)f(programming)g(tec)m(hniques)h
-(used)e(in)h(the)g(rest)g(of)h(the)f(do)s(cumen)m(t.)46
-b(Otherwise,)32 b(y)m(ou)0 2057 y(ma)m(y)f(prefer)f(to)h(skim)f
-(through)g(it)g(on)h(a)f(\014rst)g(reading)h(and)e(return)h(to)h(it)g
-(later)g(as)g(reference)f(material.)0 2350 y Fw(4.1)112
-b(AST)38 b(Ob)6 b(jects)0 2571 y FG(An)37 b(AST)h(Ob)5
-b(ject)37 b(is)h(an)g(en)m(tit)m(y)i(whic)m(h)d(is)h(used)f(to)i(store)
-f(information)g(and)f(Ob)5 b(jects)38 b(come)h(in)e(v)-5
-b(arious)0 2683 y(kinds,)34 b(called)h Fx(classes,)h
-FG(according)e(to)h(the)f(sort)g(of)g(information)g(they)h(hold.)50
-b(Throughout)33 b(this)h(section,)0 2796 y(w)m(e)i(will)g(mak)m(e)g
-(use)g(of)f(a)h(simple)g(Ob)5 b(ject)35 b(b)s(elonging)h(to)g(the)g
-(\\Zo)s(omMap")g(class)h(to)f(illustrate)h(man)m(y)e(of)0
-2909 y(the)c(basic)f(concepts.)0 3071 y(A)i(Zo)s(omMap)g(is)g(an)g(Ob)5
-b(ject)32 b(that)g(con)m(tains)i(a)e(recip)s(e)g(for)g(con)m(v)m
-(erting)h(co)s(ordinates)g(b)s(et)m(w)m(een)f(t)m(w)m(o)i(h)m(yp)s(o-)0
-3184 y(thetical)e(co)s(ordinate)g(systems.)40 b(It)31
-b(do)s(es)f(this)g(b)m(y)g(m)m(ultiplying)h(all)h(the)e(co)s(ordinate)h
-(v)-5 b(alues)31 b(b)m(y)f(a)h(constan)m(t)0 3297 y(called)40
-b(the)f Fx(Zo)-5 b(om)41 b(factor.)66 b FG(A)39 b(Zo)s(omMap)g(is)f(a)h
-(v)m(ery)g(simple)g(Ob)5 b(ject)39 b(whic)m(h)f(exists)h(mainly)g(for)f
-(use)h(in)0 3410 y(examples.)h(It)27 b(allo)m(ws)i(us)d(to)i
-(illustrate)g(the)f(w)m(a)m(ys)h(in)f(whic)m(h)g(Ob)5
-b(jects)27 b(are)g(manipulated)g(and)g(to)h(in)m(tro)s(duce)0
-3523 y(the)38 b(concept)h(of)e(a)i(Mapping|a)f(recip)s(e)f(for)h(con)m
-(v)m(erting)h(co)s(ordinates|whic)m(h)f(is)g(fundamen)m(tal)g(to)g(the)
-0 3636 y(w)m(a)m(y)31 b(the)g(AST)f(library)g(w)m(orks.)0
-3929 y Fw(4.2)112 b(Ob)6 b(ject)38 b(Creation)g(and)g(P)m(oin)m(ters)0
-4149 y FG(Let)31 b(us)f(\014rst)f(consider)h(ho)m(w)h(to)g(create)h(a)f
-(Zo)s(omMap.)40 b(This)30 b(is)g(done)h(v)m(ery)f(simply)g(as)h(follo)m
-(ws:)262 4397 y Ft(INCLUDE)40 b('AST_PAR')262 4496 y(INTEGER)g(STATUS,)
-h(ZOOMMAP)262 4695 y(STATUS)g(=)i(0)262 4895 y(...)262
-5094 y(ZOOMMAP)d(=)j(AST_ZOOMMAP\()c(2,)k(5.0D0,)e(')i(',)g(STATUS)e
-(\))0 5354 y FG(The)24 b(\014rst)h(step)g(is)g(to)g(include)g(the)g
-(\014le)g(AST)p Fy(_)p FG(P)-8 b(AR)25 b(whic)m(h)f(de\014nes)g(the)i
-(in)m(terface)g(to)g(the)f(AST)f(library)h(and,)0 5467
-y(amongst)37 b(other)g(things,)g(declares)h(AST)p Fy(_)p
-FG(ZOOMMAP)c(to)j(b)s(e)f(an)g(in)m(teger)i(function.)58
-b(W)-8 b(e)38 b(then)d(declare)0 5580 y(an)f(in)m(teger)i(v)-5
-b(ariable)35 b(ZOOMMAP)f(to)h(receiv)m(e)i(the)d(result)h(and)e(an)i
-(in)m(teger)h(ST)-8 b(A)g(TUS)33 b(v)-5 b(ariable)36
-b(to)f(hold)0 5693 y(the)h(error)f(status,)i(whic)m(h)f(w)m(e)g
-(initialise)h(to)g(zero.)57 b(Next,)38 b(w)m(e)e(in)m(v)m(ok)m(e)h(AST)
-p Fy(_)p FG(ZOOMMAP)e(to)h(create)h(the)p eop end
-%%Page: 34 44
-TeXDict begin 34 43 bop 0 52 a FG(34)2393 b Fz(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)0 351 y FG(Zo)s(omMap.)72 b(The)40
-b(pattern)g(is)h(the)g(same)g(for)f(all)i(other)f(classes)h(of)e(AST)g
-(Ob)5 b(ject|y)m(ou)41 b(simply)g(pre\014x)0 464 y(\\AST)p
-Fy(_)p FG(")30 b(to)h(the)g(class)g(name)g(to)g(obtain)f(the)h
-(function)f(that)h(creates)h(the)e(Ob)5 b(ject.)0 618
-y(These)23 b(functions)g(are)h(called)h Fx(c)-5 b(onstructor)28
-b(functions,)d FG(or)f(simply)f Fx(c)-5 b(onstructors)26
-b FG(\(y)m(ou)e(can)g(\014nd)e(an)h(individ-)0 731 y(ual)g(description)
-g(of)h(all)f(AST)g(functions)f(in)h(App)s(endix)f(B\))h(and)g(the)g
-(argumen)m(ts)g(passed)g(to)h(the)f(constructor)0 844
-y(are)35 b(used)g(to)h(initialise)g(the)g(new)e(Ob)5
-b(ject.)55 b(In)35 b(this)g(case,)i(w)m(e)f(sp)s(ecify)f(2)g(as)g(the)h
-(n)m(um)m(b)s(er)d(of)j(co)s(ordinates)0 957 y(\()p Fx(i.e.)26
-b FG(w)m(e)g(are)h(going)g(to)f(w)m(ork)g(in)g(a)g(2-dimensional)h
-(space\))g(and)e(5.0D0)j(as)f(the)f(Zo)s(om)f(factor)i(to)g(b)s(e)e
-(applied.)0 1070 y(Note)31 b(that)f(this)f(is)g(a)h(F)-8
-b(ortran)30 b(double)f(precision)h(v)-5 b(alue.)41 b(W)-8
-b(e)30 b(will)g(return)e(to)j(the)e(\014nal)g(t)m(w)m(o)i(argumen)m
-(ts,)f(a)0 1183 y(blank)g(string)g(and)g(the)h(error)f(status,)h
-(shortly)f(\()p Fu(x)p FG(4.6)i(and)e Fu(x)p FG(4.13\).)0
-1336 y(The)38 b(in)m(teger)h(v)-5 b(alue)39 b(returned)d(b)m(y)i(the)h
-(constructor)f(is)g(termed)g(an)g Fx(Obje)-5 b(ct)39
-b(p)-5 b(ointer)40 b FG(or,)g(in)e(this)g(case,)j(a)0
-1449 y Fx(Zo)-5 b(omMap)45 b(p)-5 b(ointer.)78 b FG(This)41
-b(p)s(oin)m(ter)h(is)h(not)f(an)g(Ob)5 b(ject)43 b(itself,)j(but)41
-b(is)i(a)f(v)-5 b(alue)43 b(used)e(to)i(refer)f(to)h(the)0
-1562 y(Ob)5 b(ject.)41 b(Y)-8 b(ou)30 b(should)f(b)s(e)g(careful)i(not)
-f(to)h(mo)s(dify)e(an)m(y)h(Ob)5 b(ject)30 b(p)s(oin)m(ter)g(y)m
-(ourself,)g(as)h(this)e(ma)m(y)i(render)e(it)0 1675 y(in)m(v)-5
-b(alid.)54 b(Instead,)36 b(y)m(ou)f(p)s(erform)e(all)j(subsequen)m(t)e
-(op)s(erations)h(on)f(the)h(Ob)5 b(ject)35 b(b)m(y)f(passing)h(this)f
-(p)s(oin)m(ter)0 1788 y(to)d(other)g(AST)e(routines.)0
-2068 y Fw(4.3)112 b(The)38 b(Ob)6 b(ject)38 b(Hierarc)m(h)m(y)0
-2281 y FG(No)m(w)d(that)g(w)m(e)g(ha)m(v)m(e)h(created)f(our)f(\014rst)
-f(Zo)s(omMap,)j(let)f(us)f(examine)h(ho)m(w)g(it)f(relates)i(to)f
-(other)g(kinds)e(of)0 2393 y(Ob)5 b(ject)31 b(b)s(efore)e(in)m(v)m
-(estigating)34 b(what)c(w)m(e)h(can)g(do)f(with)g(it.)0
-2547 y(W)-8 b(e)28 b(ha)m(v)m(e)f(so)g(far)f(indicated)h(that)h(a)e(Zo)
-s(omMap)h(is)f(a)h(kind)f(of)h(Ob)5 b(ject)26 b(and)g(ha)m(v)m(e)i
-(also)f(men)m(tioned)g(that)g(it)g(is)0 2660 y(a)g(kind)f(of)h(Mapping)
-g(as)g(w)m(ell.)41 b(These)26 b(statemen)m(ts)j(can)e(b)s(e)f(represen)
-m(ted)h(v)m(ery)g(simply)g(using)f(the)h(follo)m(wing)0
-2773 y(hierarc)m(h)m(y:)227 2986 y Ft(Object)358 3086
-y(Mapping)489 3186 y(ZoomMap)0 3412 y FG(whic)m(h)34
-b(is)g(a)h(w)m(a)m(y)g(of)g(stating)g(that)g(a)g(Zo)s(omMap)f(is)g(a)h
-(sp)s(ecial)g(class)g(of)f(Mapping,)h(while)g(a)f(Mapping,)i(in)0
-3525 y(turn,)g(is)g(a)g(sp)s(ecial)g(class)g(of)g(Ob)5
-b(ject.)56 b(This)35 b(is)h(exactly)h(lik)m(e)g(sa)m(ying)f(that)g(an)g
-(Oak)f(is)h(a)g(sp)s(ecial)g(form)f(of)0 3638 y(T)-8
-b(ree,)30 b(while)g(a)f(T)-8 b(ree,)31 b(in)e(turn,)g(is)g(a)h(sp)s
-(ecial)g(form)f(of)g(Plan)m(t.)41 b(This)29 b(ma)m(y)h(seem)g(almost)g
-(trivial,)h(but)e(b)s(efore)0 3751 y(y)m(ou)e(turn)f(to)h(read)g
-(something)g(less)g(dull,)g(b)s(e)f(assured)g(that)i(it)f(is)g(a)g(v)m
-(ery)g(imp)s(ortan)m(t)g(idea)g(to)h(k)m(eep)f(in)g(mind)0
-3864 y(in)j(what)g(follo)m(ws.)0 4018 y(If)i(w)m(e)i(lo)s(ok)f(at)g
-(some)h(of)f(the)g(other)g(Ob)5 b(jects)32 b(used)g(b)m(y)h(the)g(AST)f
-(library)-8 b(,)34 b(w)m(e)f(can)g(see)g(ho)m(w)g(these)g(are)h(all)0
-4131 y(related)d(in)f(a)h(similar)g(w)m(a)m(y)g(\(don't)g(w)m(orry)f
-(ab)s(out)g(what)g(they)h(do)f(at)h(this)g(stage\):)227
-4344 y Ft(Object)358 4444 y(Mapping)489 4543 y(Frame)620
-4643 y(FrameSet)750 4742 y(Plot)489 4842 y(UnitMap)489
-4942 y(ZoomMap)358 5041 y(Channel)489 5141 y(FitsChan)489
-5241 y(XmlChan)0 5467 y FG(Notice)c(that)e(there)g(are)h(sev)m(eral)g
-(di\013eren)m(t)f(t)m(yp)s(es)g(of)g(Mapping)g(a)m(v)-5
-b(ailable)27 b(\()p Fx(i.e.)e FG(there)g(are)g(classes)h(of)f(Ob)5
-b(ject)0 5580 y(inden)m(ted)26 b(b)s(eneath)g(the)g(\\Mapping")h
-(heading\))g(and,)f(in)g(addition,)i(other)e(t)m(yp)s(es)g(of)g(Ob)5
-b(ject)27 b(whic)m(h)f(are)g(not)0 5693 y(Mappings|Channels)j(for)h
-(instance)h(\(whic)m(h)g(are)g(at)g(the)f(same)h(hierarc)m(hical)h(lev)
-m(el)g(as)f(Mappings\).)p eop end
-%%Page: 35 45
-TeXDict begin 35 44 bop 0 52 a Fz(4.4)92 b(Displa)m(ying)32
-b(Ob)5 b(jects)2727 b FG(35)0 351 y(The)28 b(most)g(sp)s(ecialised)h
-(Ob)5 b(ject)28 b(w)m(e)h(ha)m(v)m(e)h(sho)m(wn)d(here)h(is)h(the)f
-(Plot)h(\(whic)m(h)f(w)m(e)h(will)g(not)f(discuss)f(in)h(detail)0
-464 y(un)m(til)h Fu(x)p FG(21\).)42 b(As)29 b(y)m(ou)g(can)g(see,)h(a)f
-(Plot)h(is)e(a)i(F)-8 b(rameSet.)16 b(.)g(.)44 b(and)28
-b(a)h(F)-8 b(rame.)17 b(.)e(.)44 b(and)28 b(a)h(Mapping.)16
-b(.)f(.)44 b(and,)29 b(lik)m(e)0 577 y(ev)m(erything)i(else,)h
-(ultimately)g(an)e(Ob)5 b(ject.)0 740 y(What)30 b(this)f(means)g(is)h
-(that)g(y)m(ou)f(can)h(use)f(a)g(Plot)i(not)e(only)h(for)f(its)g(o)m
-(wn)h(sp)s(ecialised)g(b)s(eha)m(viour,)f(but)g(also)0
-853 y(whenev)m(er)34 b(an)m(y)g(of)g(these)g(other)g(less-sp)s
-(ecialised)h(classes)g(of)f(Ob)5 b(ject)34 b(is)g(called)h(for.)51
-b(The)33 b(general)i(rule)e(is)0 965 y(that)f(an)f(Ob)5
-b(ject)31 b(of)h(a)f(particular)h(class)g(ma)m(y)g(substitute)f(for)g
-(an)m(y)h(of)f(the)g(classes)i(app)s(earing)e(ab)s(o)m(v)m(e)h(it)g(in)
-0 1078 y(this)d(hierarc)m(h)m(y)-8 b(.)42 b(The)29 b(Ob)5
-b(ject)30 b(is)f(then)h(said)f(to)i Fx(inherit)f FG(the)g(b)s(eha)m
-(viour)f(of)h(these)g(higher)f(classes.)41 b(W)-8 b(e)31
-b(can)0 1191 y(therefore)g(use)f(our)g(Zo)s(omMap)g(whenev)m(er)g(a)h
-(Zo)s(omMap,)g(a)f(Mapping)h(or)f(an)g(Ob)5 b(ject)31
-b(is)f(called)i(for.)0 1354 y(Sometimes,)41 b(this)d(can)h(lead)f(to)h
-(some)g(sp)s(ectacular)g(short-cuts)f(b)m(y)g(a)m(v)m(oiding)i(the)e
-(need)g(to)h(break)f(large)0 1467 y(Ob)5 b(jects)43 b(do)m(wn)f(in)g
-(order)h(to)g(access)h(their)f(comp)s(onen)m(ts.)78 b(With)43
-b(some)g(practice)h(and)e(a)h(little)i(lateral)0 1580
-y(thinking)30 b(y)m(ou)h(should)e(so)s(on)h(b)s(e)g(able)h(to)g(sp)s
-(ot)f(opp)s(ortunities)g(for)g(this.)0 1742 y(Y)-8 b(ou)34
-b(can)g(\014nd)d(the)j(full)f Fx(class)j(hier)-5 b(ar)g(chy)p
-FG(,)37 b(as)c(this)h(is)f(called,)j(for)d(the)g(AST)g(library)g(in)g
-(App)s(endix)f(A)h(and)0 1855 y(y)m(ou)d(ma)m(y)h(need)f(to)h(refer)f
-(to)h(it)f(o)s(ccasionally)j(un)m(til)d(y)m(ou)h(are)f(familiar)h(with)
-f(the)g(classes)h(y)m(ou)g(need)f(to)h(use.)0 2148 y
-Fw(4.4)112 b(Displa)m(ying)39 b(Ob)6 b(jects)0 2369 y
-FG(Let)32 b(us)f(no)m(w)h(return)e(to)j(the)f(Zo)s(omMap)f(that)i(w)m
-(e)f(created)h(earlier)f(\()p Fu(x)p FG(4.2\))i(and)d(examine)h(what)g
-(it's)g(made)0 2482 y(of.)46 b(There)32 b(is)g(a)g(routine)g(for)g
-(doing)g(this,)h(called)g(AST)p Fy(_)p FG(SHO)m(W,)f(whic)m(h)g(is)g
-(pro)m(vided)g(mainly)g(for)g(lo)s(oking)0 2595 y(at)f(Ob)5
-b(jects)30 b(while)h(y)m(ou)g(are)f(debugging)h(programs.)0
-2758 y(If)42 b(y)m(ou)h(consult)g(the)g(description)g(of)g(AST)p
-Fy(_)p FG(SHO)m(W)f(in)g(App)s(endix)f(B,)47 b(y)m(ou)c(will)g(\014nd)e
-(that)j(it)f(tak)m(es)h(a)0 2870 y(p)s(oin)m(ter)33 b(to)h(an)f(Ob)5
-b(ject)33 b(as)h(its)f(argumen)m(t)h(\(in)f(addition)h(to)g(the)f
-(usual)g(ST)-8 b(A)g(TUS)32 b(argumen)m(t\).)50 b(Although)0
-2983 y(w)m(e)27 b(ha)m(v)m(e)h(only)f(a)g(Zo)s(omMap)f(p)s(oin)m(ter)h
-(a)m(v)-5 b(ailable,)30 b(fortunately)d(this)f(is)h(not)g(a)g(problem.)
-39 b(If)26 b(y)m(ou)h(refer)f(to)h(the)0 3096 y(brief)h(class)i
-(hierarc)m(h)m(y)f(describ)s(ed)f(ab)s(o)m(v)m(e)i(\()p
-Fu(x)p FG(4.3\),)i(y)m(ou)d(will)g(see)g(that)h(a)f(Zo)s(omMap)g(is)f
-(an)h(Ob)5 b(ject,)30 b(alb)s(eit)f(a)0 3209 y(sp)s(ecialised)k(one,)h
-(so)f(it)g(inherits)f(the)h(prop)s(erties)f(of)h(all)g(Ob)5
-b(jects)33 b(and)f(can)h(b)s(e)f(substituted)g(wherev)m(er)h(an)0
-3322 y(Ob)5 b(ject)37 b(is)f(required.)58 b(W)-8 b(e)38
-b(can)f(therefore)g(pass)f(our)g(Zo)s(omMap)g(p)s(oin)m(ter)h(directly)
-g(to)g(AST)p Fy(_)p FG(SHO)m(W,)f(as)0 3435 y(follo)m(ws:)262
-3683 y Ft(CALL)41 b(AST_SHOW\()f(ZOOMMAP,)h(STATUS)g(\))0
-3945 y FG(The)j(output)h(from)f(this)h(will)g(app)s(ear)f(on)h(the)f
-(standard)g(output)h(stream)g(and)f(should)g(lo)s(ok)h(lik)m(e)h(the)0
-4058 y(follo)m(wing:)227 4306 y Ft(Begin)c(ZoomMap)358
-4406 y(Nin)g(=)i(2)227 4505 y(IsA)f(Mapping)358 4605
-y(Zoom)f(=)h(5)227 4704 y(End)g(ZoomMap)0 4966 y FG(Here,)e(the)e
-(\\Begin")i(and)d(\\End")g(lines)h(mark)f(the)h(b)s(eginning)e(and)h
-(end)g(of)h(the)g(Zo)s(omMap,)i(while)d(the)0 5079 y(v)-5
-b(alues)34 b(2)g(and)f(5)h(are)h(simply)e(the)h(v)-5
-b(alues)34 b(w)m(e)g(supplied)f(to)h(initialise)i(it)e(\()p
-Fu(x)p FG(4.2\).)53 b(These)33 b(ha)m(v)m(e)i(b)s(een)e(giv)m(en)0
-5192 y(simple)d(names)h(to)g(mak)m(e)g(them)f(easy)h(to)h(refer)e(to.)0
-5354 y(The)38 b(line)h(in)g(the)f(middle)h(whic)m(h)f(sa)m(ys)h(\\IsA)g
-(Mapping")g(is)g(a)g(dividing)g(line)g(b)s(et)m(w)m(een)g(the)g(t)m(w)m
-(o)h(v)-5 b(alues.)0 5467 y(It)36 b(indicates)h(that)g(the)f(\\Nin")h
-(v)-5 b(alue)36 b(is)g(a)g(prop)s(ert)m(y)g(shared)f(b)m(y)h(all)h
-(Mappings,)g(so)g(the)f(Zo)s(omMap)g(has)0 5580 y(inherited)k(this)g
-(from)g(its)h Fx(p)-5 b(ar)g(ent)44 b(class)d FG(\(Mapping\).)71
-b(The)40 b(\\Zo)s(om")h(v)-5 b(alue,)44 b(ho)m(w)m(ev)m(er,)g(is)d(sp)s
-(eci\014c)f(to)h(a)0 5693 y(Zo)s(omMap)30 b(and)g(isn't)h(shared)e(b)m
-(y)i(other)f(kinds)g(of)g(Mappings.)p eop end
-%%Page: 36 46
-TeXDict begin 36 45 bop 0 52 a FG(36)2393 b Fz(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)0 351 y Fw(4.5)112 b(Getting)37
-b(A)m(ttribute)g(V)-9 b(alues)0 579 y FG(W)h(e)31 b(sa)m(w)f(ab)s(o)m
-(v)m(e)h(\()p Fu(x)p FG(4.4\))h(ho)m(w)e(to)h(displa)m(y)f(the)g(in)m
-(ternal)g(v)-5 b(alues)30 b(of)g(an)g(Ob)5 b(ject,)31
-b(but)e(what)g(ab)s(out)h(accessing)0 692 y(these)c(v)-5
-b(alues)26 b(from)e(a)i(program?)39 b(Not)26 b(all)g(in)m(ternal)g(Ob)5
-b(ject)26 b(v)-5 b(alues)26 b(are)f(accessible)i(in)e(this)h(w)m(a)m(y)
--8 b(,)28 b(but)c(man)m(y)0 805 y(are.)50 b(Those)33
-b(that)g(are,)i(are)f(called)g Fx(attributes)p FG(.)50
-b(A)33 b(description)h(of)f(all)h(the)f(attributes)h(used)f(b)m(y)g
-(the)g(AST)0 918 y(library)d(can)h(b)s(e)e(found)g(in)h(App)s(endix)f
-(C.)0 1086 y(A)m(ttributes)e(come)h(in)e(sev)m(eral)h(data)h(t)m(yp)s
-(es)e(\(c)m(haracter)i(string,)g(in)m(teger,)h(b)s(o)s(olean)d(and)g
-(\015oating)h(p)s(oin)m(t\))g(and)0 1198 y(there)32 b(is)g(a)g
-(standard)f(w)m(a)m(y)h(of)g(obtaining)h(their)f(v)-5
-b(alues.)45 b(As)31 b(an)h(example,)h(consider)f(obtaining)g(the)g(v)-5
-b(alue)0 1311 y(of)31 b(the)f(Nin)g(attribute)h(for)g(the)f(Zo)s(omMap)
-g(created)i(earlier.)42 b(This)29 b(could)i(b)s(e)e(done)h(as)h(follo)m
-(ws:)262 1574 y Ft(INTEGER)40 b(NIN)262 1773 y(...)262
-1973 y(NIN)i(=)h(AST_GETI\()d(ZOOMMAP,)g('Nin',)h(STATUS)g(\))0
-2249 y FG(Here,)g(the)e(in)m(teger)g(function)f(AST)p
-Fy(_)p FG(GETI)g(is)g(used)g(to)h(extract)g(the)g(attribute)g(v)-5
-b(alue)39 b(b)m(y)f(giving)h(it)g(the)0 2362 y(Zo)s(omMap)30
-b(p)s(oin)m(ter)h(and)e(the)i(attribute)g(name)f(\(attribute)h(names)g
-(are)f(not)h(case)g(sensitiv)m(e,)h(but)d(w)m(e)i(ha)m(v)m(e)0
-2475 y(used)26 b(consisten)m(t)h(capitalisation)i(in)d(this)h(do)s
-(cumen)m(t)f(in)g(order)g(to)h(iden)m(tify)f(them\).)40
-b(Remem)m(b)s(er)26 b(to)h(use)f(the)0 2588 y(AST)p Fy(_)p
-FG(P)-8 b(AR)30 b(include)g(\014le)g(to)h(sa)m(v)m(e)h(ha)m(ving)f(to)g
-(declare)h(AST)p Fy(_)p FG(GETI)d(as)h(in)m(teger)i(y)m(ourself.)0
-2755 y(If)h(w)m(e)h(had)g(w)m(an)m(ted)g(the)g(v)-5 b(alue)34
-b(of)g(the)g(Zo)s(om)f(attribute,)j(w)m(e)e(w)m(ould)f(probably)g(ha)m
-(v)m(e)i(used)e(AST)p Fy(_)p FG(GETD)0 2868 y(instead,)e(this)f(b)s
-(eing)g(a)h(double)f(precision)g(v)m(ersion)h(of)g(the)f(same)h
-(function,)f(for)h(example:)262 3131 y Ft(DOUBLE)41 b(PRECISION)e(ZOOM)
-262 3330 y(...)262 3529 y(ZOOM)i(=)j(AST_GETD\()39 b(ZOOMMAP,)i
-('Zoom',)f(STATUS)i(\))0 3805 y FG(Ho)m(w)m(ev)m(er,)33
-b(w)m(e)d(could)h(equally)g(w)m(ell)g(ha)m(v)m(e)h(read)e(the)h(Nin)f
-(v)-5 b(alue)31 b(as)f(double)g(precision,)h(or)f(the)h(Zo)s(om)f(v)-5
-b(alue)0 3918 y(as)31 b(an)f(in)m(teger,)i(or)e(whatev)m(er)h(w)m(e)g
-(w)m(an)m(ted.)0 4086 y(The)41 b(data)h(t)m(yp)s(e)g(y)m(ou)g(w)m(an)m
-(t)g(returned)f(is)h(sp)s(eci\014ed)e(simply)i(b)m(y)f(replacing)h(the)
-g(\014nal)f(c)m(haracter)j(of)d(the)0 4198 y(AST)p Fy(_)p
-FG(GETx)31 b(function)h(name)g(with)g(C)g(\(c)m(haracter\),)k(D)c
-(\(double)g(precision\),)i(I)e(\(in)m(teger\),)j(L)d(\(logical\))j(or)0
-4311 y(R)k(\(real\).)70 b(If)39 b(p)s(ossible,)j(the)e(v)-5
-b(alue)40 b(is)g(con)m(v)m(erted)h(to)f(the)g(t)m(yp)s(e)g(y)m(ou)g(w)m
-(an)m(t.)69 b(If)39 b(not,)k(an)c(error)g(message)0 4424
-y(will)34 b(result.)52 b(In)34 b(con)m(v)m(erting)i(from)d(in)m(teger)j
-(to)f(logical,)i(zero)e(is)f(regarded)g(as)h(.F)-10 b(ALSE.)34
-b(and)g(non-zero)g(as)0 4537 y(.TR)m(UE..)50 b(Note)35
-b(that)f(all)g(\015oating)g(p)s(oin)m(t)g(v)-5 b(alues)33
-b(are)h(stored)f(in)m(ternally)i(as)e(double)g(precision.)50
-b(Bo)s(olean)0 4650 y(v)-5 b(alues)31 b(are)f(stored)h(as)g(in)m
-(tegers,)g(but)f(only)h(tak)m(e)h(the)e(v)-5 b(alues)31
-b(1)g(and)e(0)i(\(for)g(true/false\).)0 4959 y Fw(4.6)112
-b(Setting)38 b(A)m(ttribute)e(V)-9 b(alues)0 5187 y FG(Some)37
-b(attribute)h(v)-5 b(alues)38 b(are)f(read-only)h(and)e(cannot)i(b)s(e)
-f(altered)h(after)f(an)g(Ob)5 b(ject)38 b(has)f(b)s(een)f(created.)0
-5300 y(The)23 b(Nin)h(attribute)h(of)f(a)h(Zo)s(omMap)f(\(describing)g
-(the)g(n)m(um)m(b)s(er)e(of)j(co)s(ordinates\))g(is)f(lik)m(e)h(this.)
-39 b(It)24 b(is)g(de\014ned)0 5413 y(when)29 b(the)i(Zo)s(omMap)f(is)h
-(created,)g(but)f(cannot)h(then)f(b)s(e)g(altered.)0
-5580 y(Other)g(attributes,)i(ho)m(w)m(ev)m(er,)g(can)f(b)s(e)f(mo)s
-(di\014ed)g(whenev)m(er)g(y)m(ou)h(w)m(an)m(t.)43 b(A)31
-b(Zo)s(omMap's)f(Zo)s(om)h(attribute)0 5693 y(is)f(lik)m(e)i(this.)41
-b(If)30 b(w)m(e)g(w)m(an)m(ted)i(to)f(c)m(hange)g(it,)g(this)g(could)f
-(b)s(e)g(done)g(simply)g(as)g(follo)m(ws:)p eop end
-%%Page: 37 47
-TeXDict begin 37 46 bop 0 52 a Fz(4.7)92 b(T)-8 b(esting,)32
-b(Clearing)e(and)g(Defaulting)i(A)m(ttributes)1740 b
-FG(37)262 351 y Ft(CALL)41 b(AST_SETD\()f(ZOOMMAP,)h('Zoom',)f(99.6D0,)
-h(STATUS)g(\))0 607 y FG(whic)m(h)31 b(sets)h(the)g(v)-5
-b(alue)32 b(to)g(99.6)h(\(double)e(precision\).)45 b(As)32
-b(when)e(getting)j(an)f(attribute)g(v)-5 b(alue)32 b(\()p
-Fu(x)p FG(4.5\),)i(y)m(ou)0 720 y(ha)m(v)m(e)e(a)f(c)m(hoice)h(of)f
-(whic)m(h)g(data)g(t)m(yp)s(e)g(y)m(ou)g(will)g(use)f(to)i(supply)d
-(the)i(new)f(v)-5 b(alue.)42 b(F)-8 b(or)32 b(instance,)f(y)m(ou)g
-(could)0 833 y(use)f(an)g(in)m(teger)i(v)-5 b(alue,)31
-b(as)g(in:)262 1075 y Ft(CALL)41 b(AST_SETI\()f(ZOOMMAP,)h('Zoom',)f
-(99,)j(STATUS)e(\))0 1331 y FG(and)31 b(the)h(necessary)h(data)f(con)m
-(v)m(ersion)i(w)m(ould)d(o)s(ccur.)45 b(Y)-8 b(ou)33
-b(sp)s(ecify)e(the)i(data)f(t)m(yp)s(e)g(y)m(ou)h(w)m(an)m(t)f(to)h
-(supply)0 1444 y(simply)41 b(b)m(y)h(replacing)g(the)g(\014nal)g(c)m
-(haracter)h(of)f(the)g(AST)p Fy(_)p FG(SETx)e(routine)h(name)h(with)g
-(C)f(\(c)m(haracter\),)0 1557 y(D)f(\(double)f(precision\),)j(I)d(\(in)
-m(teger\),)44 b(L)39 b(\(logical\))j(or)d(R)h(\(real\).)68
-b(Setting)40 b(a)g(b)s(o)s(olean)f(attribute)h(to)g(an)m(y)0
-1670 y(non-zero)31 b(in)m(teger)h(causes)e(it)h(to)h(tak)m(e)f(the)g(v)
--5 b(alue)31 b(1.)0 1831 y(An)h(alternativ)m(e)j(w)m(a)m(y)e(of)f
-(setting)i(attribute)f(v)-5 b(alues)32 b(for)g(Ob)5 b(jects)32
-b(is)h(to)g(use)f(the)g(AST)p Fy(_)p FG(SET)e(routine)j(\()p
-Fx(i.e.)0 1944 y FG(with)e(no)f(\014nal)h(c)m(haracter)h(sp)s(ecifying)
-f(a)g(data)h(t)m(yp)s(e\).)42 b(In)30 b(this)h(case,)h(y)m(ou)g(supply)
-d(the)i(attribute)h(v)-5 b(alues)31 b(in)0 2057 y(a)36
-b(c)m(haracter)h(string.)55 b(The)35 b(big)g(adv)-5 b(an)m(tage)37
-b(of)f(this)f(metho)s(d)g(is)g(that)h(y)m(ou)f(can)h(assign)f(v)-5
-b(alues)36 b(to)g(sev)m(eral)0 2170 y(attributes)31 b(at)h(once,)f
-(separating)h(them)e(with)h(commas.)42 b(This)30 b(also)h(reads)g(more)
-f(naturally)h(in)g(programs.)0 2283 y(F)-8 b(or)31 b(example:)262
-2525 y Ft(CALL)41 b(AST_SET\()g(ZOOMMAP,)f('Zoom=99.6,)f(Report=1',)g
-(STATUS)j(\))0 2781 y FG(w)m(ould)h(set)g(v)-5 b(alues)43
-b(for)g(b)s(oth)f(the)h(Zo)s(om)g(attribute)g(and)g(the)g(Rep)s(ort)f
-(attribute)i(\(ab)s(out)f(whic)m(h)f(more)0 2894 y(shortly|)p
-Fu(x)p FG(4.8\).)80 b(Y)-8 b(ou)43 b(don't)g(really)g(ha)m(v)m(e)h(to)g
-(w)m(orry)e(ab)s(out)g(data)i(t)m(yp)s(es)f(with)f(this)h(metho)s(d,)i
-(as)e(an)m(y)0 3007 y(c)m(haracter)29 b(represen)m(tation)f(will)f(do)g
-(\(although)g(y)m(ou)h(m)m(ust)f(use)f(0/1)i(instead)g(of)f(.TR)m
-(UE./.F)-10 b(ALSE.,)29 b(whic)m(h)0 3120 y(are)i(not)f(supp)s
-(orted\).)0 3281 y(Finally)-8 b(,)38 b(a)e(v)m(ery)g(con)m(v)m(enien)m
-(t)h(w)m(a)m(y)f(of)g(setting)g(attribute)g(v)-5 b(alues)36
-b(is)f(to)h(do)g(so)f(at)h(the)g(same)g(time)g(as)f(y)m(ou)0
-3394 y(create)42 b(an)f(Ob)5 b(ject.)72 b(Ev)m(ery)41
-b(Ob)5 b(ject)40 b(constructor)h(function)g(has)f(a)h(p)s(en)m
-(ultimate)h(c)m(haracter)g(argumen)m(t)0 3507 y(whic)m(h)25
-b(allo)m(ws)i(y)m(ou)f(to)g(do)f(this.)39 b(Although)26
-b(y)m(ou)g(can)f(simply)g(lea)m(v)m(e)j(this)e(blank,)g(it)g(is)f(an)h
-(ideal)g(opp)s(ortunit)m(y)0 3620 y(to)f(initialise)h(the)e(Ob)5
-b(ject)24 b(to)h(ha)m(v)m(e)g(just)f(the)g(attributes)h(y)m(ou)f(w)m
-(an)m(t.)40 b(F)-8 b(or)24 b(example,)j(w)m(e)d(migh)m(t)h(ha)m(v)m(e)g
-(created)0 3733 y(our)30 b(original)h(Zo)s(omMap)g(with:)262
-3975 y Ft(ZOOMMAP)40 b(=)j(AST_ZOOMMAP\()c(2,)k(5.0D0,)e('Report=1',)e
-(STATUS)i(\))0 4231 y FG(and)30 b(it)h(w)m(ould)f(then)g(start)h(life)g
-(with)f(its)h(Rep)s(ort)f(attribute)h(set)g(to)g(1.)0
-4522 y Fw(4.7)112 b(T)-9 b(esting,)38 b(Clearing)g(and)g(Defaulting)h
-(A)m(ttributes)0 4742 y FG(Y)-8 b(ou)29 b(can)f(use)h(the)f(AST)p
-Fy(_)p FG(GETx)f(family)i(of)g(routines)f(\()p Fu(x)p
-FG(4.5\))i(to)f(get)h(a)f(v)-5 b(alue)28 b(for)g(an)m(y)h(Ob)5
-b(ject)29 b(attribute)g(at)0 4854 y(an)m(y)i(time,)h(regardless)f(of)g
-(whether)f(a)h(v)-5 b(alue)31 b(has)g(previously)f(b)s(een)g(set)h(for)
-g(it.)42 b(If)30 b(no)h(v)-5 b(alue)31 b(has)g(b)s(een)f(set,)0
-4967 y(the)h(AST)e(library)h(will)h(generate)h(a)f(suitable)f(default)h
-(v)-5 b(alue.)0 5128 y(Often,)47 b(the)c(default)h(v)-5
-b(alue)44 b(of)f(an)h(attribute)g(will)g(not)f(simply)g(b)s(e)g
-(trivial)i(\(zero)f(or)g(blank\))f(but)g(ma)m(y)0 5241
-y(in)m(v)m(olv)m(e)h(considerable)e(pro)s(cessing)f(to)i(calculate.)76
-b(Wherev)m(er)43 b(p)s(ossible,)h(defaults)d(are)h(designed)g(to)g(b)s
-(e)0 5354 y(real-life,)c(sensible)d(v)-5 b(alues)36 b(that)f(con)m(v)m
-(ey)i(information)e(ab)s(out)g(the)h(state)g(of)f(the)h(Ob)5
-b(ject.)55 b(In)34 b(particular,)0 5467 y(they)24 b(ma)m(y)h(often)f(b)
-s(e)f(based)h(on)f(the)i(v)-5 b(alues)24 b(of)g(other)g(attributes,)i
-(so)e(their)g(v)-5 b(alues)24 b(ma)m(y)h(c)m(hange)g(in)e(resp)s(onse)0
-5580 y(to)31 b(c)m(hanges)h(in)e(these)h(other)g(attributes.)41
-b(The)30 b(Zo)s(omMap)h(class)g(that)g(w)m(e)g(ha)m(v)m(e)h(studied)d
-(so)i(far)f(is)h(a)g(little)0 5693 y(to)s(o)g(simple)f(to)i(sho)m(w)e
-(this)g(b)s(eha)m(viour,)g(but)g(w)m(e)h(will)g(meet)g(it)g(later)g
-(on.)p eop end
-%%Page: 38 48
-TeXDict begin 38 47 bop 0 52 a FG(38)2393 b Fz(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)0 351 y FG(An)i(attribute)i(that)f(returns)f(a)
-h(default)g(v)-5 b(alue)33 b(in)g(this)g(w)m(a)m(y)g(is)g(said)g(to)h
-(b)s(e)e Fx(un-set.)47 b FG(Con)m(v)m(ersely)-8 b(,)35
-b(once)f(an)0 464 y(explicit)d(v)-5 b(alue)30 b(has)g(b)s(een)e
-(assigned)i(to)h(an)e(attribute,)i(it)f(b)s(ecomes)g
-Fx(set)g FG(and)f(will)h(alw)m(a)m(ys)h(return)e(precisely)0
-577 y(that)i(v)-5 b(alue,)31 b(nev)m(er)g(a)g(default.)0
-738 y(The)41 b(distinction)i(b)s(et)m(w)m(een)f(set)h(and)e(un-set)h
-(attributes)g(is)g(imp)s(ortan)m(t)g(and)f(a\013ects)j(the)e(b)s(eha)m
-(viour)f(of)0 851 y(sev)m(eral)f(k)m(ey)g(routines)f(in)f(the)h(AST)f
-(library)-8 b(.)67 b(Y)-8 b(ou)39 b(can)g(test)h(if)f(an)g(attribute)g
-(is)g(set)h(using)e(the)h(logical)0 964 y(function)30
-b(AST)p Fy(_)p FG(TEST,)e(as)j(in:)262 1205 y Ft(IF)42
-b(\()h(AST_TEST\()d(ZOOMMAP,)h('Report',)e(STATUS)j(\))h(\))g(THEN)392
-1305 y(<the)f(Report)f(attribute)f(is)j(set>)262 1404
-y(END)f(IF)0 1659 y FG(\(as)26 b(usual,)g(remem)m(b)s(er)f(to)h
-(include)f(the)h(AST)p Fy(_)p FG(P)-8 b(AR)24 b(\014le)i(to)g(declare)g
-(the)g(function)f(as)g(LOGICAL,)g(or)g(mak)m(e)0 1772
-y(this)30 b(declaration)i(y)m(ourself)7 b(\).)0 1933
-y(Once)31 b(an)f(attribute)h(is)g(set,)g(y)m(ou)g(can)g(return)f(it)h
-(to)g(its)g(un-set)g(state)h(using)e(AST)p Fy(_)p FG(CLEAR.)f(The)h
-(e\013ect)i(is)0 2045 y(as)f(if)f(it)h(had)f(nev)m(er)g(b)s(een)g(set)h
-(in)f(the)g(\014rst)g(place.)42 b(F)-8 b(or)31 b(example:)262
-2287 y Ft(CALL)41 b(AST_CLEAR\()f(ZOOMMAP,)g('Report',)g(STATUS)h(\))0
-2541 y FG(w)m(ould)30 b(ensure)g(that)h(the)f(default)h(v)-5
-b(alue)31 b(of)f(the)h(Rep)s(ort)f(attribute)h(is)f(used)g(subsequen)m
-(tly)-8 b(.)0 2832 y Fw(4.8)112 b(T)-9 b(ransforming)39
-b(Co)s(ordinates)0 3051 y FG(W)-8 b(e)28 b(no)m(w)g(ha)m(v)m(e)g(the)f
-(necessary)h(apparatus)f(to)h(start)g(using)e(our)h(Zo)s(omMap)g(to)h
-(sho)m(w)f(what)g(it)h(is)f(really)h(for.)0 3164 y(Here,)h(w)m(e)e
-(will)g(also)h(encoun)m(ter)g(a)g(routine)f(that)g(is)g(a)h(little)h
-(more)e(fussy)f(ab)s(out)h(the)g(t)m(yp)s(e)g(of)g(p)s(oin)m(ter)h(it)f
-(will)0 3277 y(accept.)0 3438 y(The)33 b(purp)s(ose)g(of)h(a)g(Zo)s
-(omMap)g(is)g(to)h(m)m(ultiply)f(co)s(ordinates)h(b)m(y)f(a)g(constan)m
-(t)h(zo)s(om)g(factor.)52 b(T)-8 b(o)35 b(witness)0 3551
-y(this)30 b(in)g(action,)i(w)m(e)f(will)g(\014rst)e(set)i(the)g(Rep)s
-(ort)f(attribute)h(for)f(our)g(Zo)s(omMap)g(to)i(a)e(non-zero)h(v)-5
-b(alue:)262 3792 y Ft(CALL)41 b(AST_SET\()g(ZOOMMAP,)f('Report=1',)f
-(STATUS)i(\))0 4047 y FG(This)32 b(b)s(o)s(olean)h(\(in)m(teger\))i
-(attribute,)f(whic)m(h)e(is)h(presen)m(t)g(in)f(all)i(Mappings)f(\(and)
-f(a)h(Zo)s(omMap)g(is)g(a)g(Map-)0 4160 y(ping\),)28
-b(causes)f(the)g(automatic)h(displa)m(y)f(of)g(all)g(co)s(ordinate)h(v)
--5 b(alues)27 b(that)g(the)g(Mapping)g(con)m(v)m(erts.)41
-b(It)27 b(is)f(not)0 4273 y(a)32 b(go)s(o)s(d)f(idea)h(to)g(lea)m(v)m
-(e)h(this)f(feature)f(turned)g(on)g(in)g(a)h(\014nished)d(program,)j
-(but)e(it)i(can)g(sa)m(v)m(e)h(a)f(lot)g(of)f(w)m(ork)0
-4385 y(during)e(debugging.)0 4546 y(Our)d(next)h(step)g(is)g(to)h(set)g
-(up)e(some)h(co)s(ordinates)h(for)f(the)g(Zo)s(omMap)g(to)h(w)m(ork)f
-(on,)h(using)e(t)m(w)m(o)j(arra)m(ys)e(XIN)0 4659 y(and)h(YIN,)i(and)e
-(t)m(w)m(o)j(arra)m(ys)e(to)h(receiv)m(e)g(the)g(transformed)e(co)s
-(ordinates,)i(X)m(OUT)f(and)g(YOUT.)g(Note)h(that)0 4772
-y(these)h(arra)m(ys)g(are)f(double)g(precision,)h(as)g(are)f(all)i(co)s
-(ordinate)f(data)g(pro)s(cessed)f(b)m(y)g(the)h(AST)e(library:)262
-5013 y Ft(DOUBLE)41 b(PRECISION)e(XIN\()j(10)h(\),)g(YIN\()f(10)h(\),)f
-(XOUT\()g(10)h(\),)f(YOUT\()g(10)h(\))262 5113 y(DATA)e(XIN)i(/)g(0D0,)
-f(1D0,)g(2D0,)g(3D0,)g(4D0,)g(5D0,)g(6D0,)f(7D0,)h(8D0,)g(9D0)h(/)262
-5213 y(DATA)e(YIN)i(/)g(0D0,)f(2D0,)g(4D0,)g(6D0,)g(8D0,)g(10D0,)f
-(12D0,)h(14D0,)f(16D0,)h(18D0)g(/)0 5467 y FG(W)-8 b(e)29
-b(will)f(no)m(w)g(use)g(the)g(routine)g(AST)p Fy(_)p
-FG(TRAN2)f(to)h(transform)g(the)g(input)f(co)s(ordinates.)40
-b(This)27 b(is)h(the)g(most)0 5580 y(commonly-used)c(\(2-dimensional\))
-i(co)s(ordinate)e(transformation)h(routine.)38 b(If)24
-b(y)m(ou)g(lo)s(ok)g(at)h(its)f(description)0 5693 y(in)33
-b(App)s(endix)e(B,)k(y)m(ou)e(will)g(see)h(that)g(it)f(requires)g(a)g
-(p)s(oin)m(ter)h(to)f(a)h(Mapping,)g(so)f(w)m(e)h(cannot)f(supply)f
-(just)p eop end
-%%Page: 39 49
-TeXDict begin 39 48 bop 0 52 a Fz(4.8)92 b(T)-8 b(ransforming)30
-b(Co)s(ordinates)2442 b FG(39)0 351 y(an)m(y)37 b(old)f(Ob)5
-b(ject)37 b(p)s(oin)m(ter,)h(as)e(w)m(e)h(could)f(with)g(the)h
-(routines)f(discussed)f(previously)-8 b(.)59 b(If)36
-b(w)m(e)g(passed)g(it)h(a)0 464 y(p)s(oin)m(ter)30 b(to)h(an)g
-(inappropriate)f(Ob)5 b(ject,)31 b(an)f(error)g(message)h(w)m(ould)g
-(result.)0 624 y(F)-8 b(ortunately)g(,)39 b(a)c(Zo)s(omMap)g(is)g(a)h
-(Mapping)f(\(App)s(endix)f(A\),)j(so)e(w)m(e)h(can)f(use)g(it)g(with)g
-(AST)p Fy(_)p FG(TRAN2)g(to)0 737 y(transform)30 b(our)g(co)s
-(ordinates,)h(as)f(follo)m(ws:)262 973 y Ft(CALL)41 b(AST_TRAN2\()f
-(ZOOMMAP,)g(10,)j(XIN,)e(YIN,)h(.TRUE.,)f(XOUT,)h(YOUT,)f(STATUS)g(\))0
-1222 y FG(Here,)31 b(10)g(is)f(the)g(n)m(um)m(b)s(er)f(of)h(p)s(oin)m
-(ts)g(w)m(e)g(w)m(an)m(t)h(to)g(transform)e(and)h(the)g(\014fth)f
-(argumen)m(t)h(v)-5 b(alue)31 b(of)f(.TR)m(UE.)0 1335
-y(indicates)h(that)g(w)m(e)g(w)m(an)m(t)g(to)g(transform)f(in)g(the)h
-Fx(forwar)-5 b(d)33 b FG(direction)e(\(from)f(input)f(to)j(output\).)0
-1494 y(Because)d(our)d(Zo)s(omMap's)h(Rep)s(ort)g(attribute)h(is)f(set)
-h(to)g(1,)h(this)e(will)g(cause)h(the)f(e\013ects)i(of)e(the)g(Zo)s
-(omMap)0 1607 y(on)j(the)h(co)s(ordinates)g(to)g(b)s(e)f(displa)m(y)m
-(ed)h(on)f(the)h(standard)e(output)h(stream:)227 1843
-y Ft(\(0,)43 b(0\))f(-->)h(\(0,)f(0\))227 1943 y(\(1,)h(2\))f(-->)h
-(\(5,)f(10\))227 2042 y(\(2,)h(4\))f(-->)h(\(10,)f(20\))227
-2142 y(\(3,)h(6\))f(-->)h(\(15,)f(30\))227 2242 y(\(4,)h(8\))f(-->)h
-(\(20,)f(40\))227 2341 y(\(5,)h(10\))f(-->)g(\(25,)g(50\))227
-2441 y(\(6,)h(12\))f(-->)g(\(30,)g(60\))227 2540 y(\(7,)h(14\))f(-->)g
-(\(35,)g(70\))227 2640 y(\(8,)h(16\))f(-->)g(\(40,)g(80\))227
-2740 y(\(9,)h(18\))f(-->)g(\(45,)g(90\))0 2989 y FG(This)31
-b(sho)m(ws)g(the)g(co)s(ordinate)i(v)-5 b(alues)32 b(of)f(eac)m(h)i(p)s
-(oin)m(t)e(b)s(oth)g(b)s(efore)g(and)g(after)h(the)f(Zo)s(omMap)h(is)f
-(applied.)0 3102 y(Y)-8 b(ou)33 b(can)h(see)f(that)h(eac)m(h)g(co)s
-(ordinate)f(v)-5 b(alue)34 b(has)e(b)s(een)h(m)m(ultiplied)g(b)m(y)g
-(the)g(factor)h(5)f(determined)f(b)m(y)h(the)0 3215 y(Zo)s(om)h
-(attribute)i(v)-5 b(alue.)54 b(The)34 b(transformed)g(co)s(ordinates)h
-(are)g(no)m(w)g(stored)g(in)f(the)h(X)m(OUT)g(and)f(YOUT)0
-3328 y(arra)m(ys.)0 3487 y(If)d(w)m(e)h(w)m(an)m(ted)h(to)f(transform)f
-(in)g(the)h(opp)s(osite)g(direction,)h(w)m(e)f(need)f(simply)h(c)m
-(hange)g(the)g(\014fth)f(argumen)m(t)0 3600 y(of)j(AST)p
-Fy(_)p FG(TRAN2)f(from)h(.TR)m(UE.)g(to)h(.F)-10 b(ALSE..)51
-b(W)-8 b(e)35 b(can)f(also)h(feed)f(the)g(output)f(co)s(ordinates)i
-(from)e(the)0 3713 y(ab)s(o)m(v)m(e)f(bac)m(k)f(in)m(to)g(the)g
-(routine:)262 3949 y Ft(CALL)41 b(AST_TRAN2\()f(ZOOMMAP,)g(10,)j(XOUT,)
-e(YOUT,)h(.FALSE.,)e(XIN,)i(YIN,)g(STATUS)f(\))0 4198
-y FG(The)30 b(output)g(w)m(ould)g(then)g(lo)s(ok)h(lik)m(e:)227
-4434 y Ft(\(0,)43 b(0\))f(-->)h(\(0,)f(0\))227 4534 y(\(5,)h(10\))f
-(-->)g(\(1,)h(2\))227 4633 y(\(10,)f(20\))h(-->)f(\(2,)g(4\))227
-4733 y(\(15,)g(30\))h(-->)f(\(3,)g(6\))227 4833 y(\(20,)g(40\))h(-->)f
-(\(4,)g(8\))227 4932 y(\(25,)g(50\))h(-->)f(\(5,)g(10\))227
-5032 y(\(30,)g(60\))h(-->)f(\(6,)g(12\))227 5132 y(\(35,)g(70\))h(-->)f
-(\(7,)g(14\))227 5231 y(\(40,)g(80\))h(-->)f(\(8,)g(16\))227
-5331 y(\(45,)g(90\))h(-->)f(\(9,)g(18\))0 5580 y FG(This)35
-b(is)h(termed)f(the)h Fx(inverse)g FG(transformation)g(\(w)m(e)h(ha)m
-(v)m(e)g(con)m(v)m(erted)g(from)e(output)g(to)i(input\))e(and)g(y)m(ou)
-0 5693 y(can)c(see)g(that)g(the)f(original)i(co)s(ordinates)f(ha)m(v)m
-(e)g(b)s(een)f(reco)m(v)m(ered)i(b)m(y)e(dividing)g(b)m(y)h(the)f(Zo)s
-(om)g(factor.)p eop end
-%%Page: 40 50
-TeXDict begin 40 49 bop 0 52 a FG(40)2393 b Fz(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)0 351 y Fw(4.9)112 b(Managing)40
-b(Ob)6 b(ject)37 b(P)m(oin)m(ters)0 561 y FG(So)30 b(far,)f(w)m(e)i(ha)
-m(v)m(e)f(lo)s(ok)m(ed)h(at)g(creating)g(Ob)5 b(jects)29
-b(and)g(using)h(them)f(in)h(v)-5 b(arious)29 b(simple)h(w)m(a)m(ys)g
-(but)f(ha)m(v)m(e)i(not)0 674 y(y)m(et)h(considered)e(ho)m(w)g(to)h
-(get)h(rid)d(of)i(them)f(again.)0 824 y(Ev)m(ery)22 b(Ob)5
-b(ject)22 b(consumes)g(v)-5 b(arious)21 b(computer)h(resources)g
-(\(principally)g(memory\))g(and)g(should)e(b)s(e)i(disp)s(osed)0
-937 y(of)35 b(when)g(it)h(is)f(no)g(longer)h(required,)g(so)g(as)f(to)h
-(free)g(up)e(these)i(resources.)56 b(One)34 b(w)m(a)m(y)j(of)e(doing)h
-(this)f(\(not)0 1050 y(necessarily)26 b(the)f(b)s(est|)p
-Fu(x)p FG(4.10\))i(is)e(to)h Fx(annul)g FG(eac)m(h)g(Ob)5
-b(ject)25 b(p)s(oin)m(ter)g(once)h(y)m(ou)f(ha)m(v)m(e)i(\014nished)c
-(with)i(it,)i(using)0 1163 y(AST)p Fy(_)p FG(ANNUL.)j(F)-8
-b(or)31 b(example:)262 1364 y Ft(CALL)41 b(AST_ANNUL\()f(ZOOMMAP,)g
-(STATUS)h(\))0 1579 y FG(This)26 b(indicates)i(that)g(y)m(ou)f(ha)m(v)m
-(e)h(\014nished)e(with)h(the)g(p)s(oin)m(ter)g(and)f(sets)i(it)f(to)h
-(the)f(n)m(ull)g(v)-5 b(alue)28 b(AST)p Fy(__)p FG(NULL)0
-1692 y(\(as)k(de\014ned)f(in)g(the)h(AST)p Fy(_)p FG(P)-8
-b(AR)31 b(include)h(\014le\),)g(so)g(that)h(an)m(y)f(attempt)g(to)h
-(use)e(it)i(again)f(will)g(generate)i(an)0 1805 y(error)c(message.)0
-1956 y(In)36 b(general,)41 b(this)c(pro)s(cess)g(ma)m(y)g(not)h(delete)
-g(the)g(Ob)5 b(ject,)39 b(b)s(ecause)e(there)h(ma)m(y)f(still)i(b)s(e)d
-(other)i(p)s(oin)m(ters)0 2069 y(asso)s(ciated)26 b(with)f(it.)39
-b(Ho)m(w)m(ev)m(er,)28 b(eac)m(h)e(Ob)5 b(ject)25 b(main)m(tains)h(a)f
-(coun)m(t)h(of)f(the)g(n)m(um)m(b)s(er)e(of)i(p)s(oin)m(ters)g(asso)s
-(ciated)0 2182 y(with)30 b(it)h(and)f(will)g(b)s(e)g(deleted)h(if)f(y)m
-(ou)h(ann)m(ul)f(the)g(\014nal)g(p)s(oin)m(ter.)41 b(Using)30
-b(AST)p Fy(_)p FG(ANNUL)g(consisten)m(tly)i(will)0 2294
-y(therefore)k(ensure)e(that)i(all)g(Ob)5 b(jects)35 b(are)g(disp)s
-(osed)f(of)i(at)g(the)f(correct)h(time.)56 b(Y)-8 b(ou)36
-b(can)f(determine)g(ho)m(w)0 2407 y(man)m(y)30 b(p)s(oin)m(ters)h(are)f
-(asso)s(ciated)i(with)e(an)h(Ob)5 b(ject)30 b(b)m(y)g(examining)h(its)g
-(\(read-only\))h(RefCoun)m(t)e(attribute.)0 2683 y Fw(4.10)112
-b(AST)38 b(P)m(oin)m(ter)e(Con)m(texts|Begin)i(and)g(End)0
-2893 y FG(The)30 b(use)g(of)g(AST)p Fy(_)p FG(ANNUL)g(\()p
-Fu(x)p FG(4.9\))j(is)d(not)h(completely)h(fo)s(olpro)s(of,)e(ho)m(w)m
-(ev)m(er.)43 b(Consider)29 b(the)i(follo)m(wing:)262
-3094 y Ft(CALL)41 b(AST_SHOW\()f(AST_ZOOMMAP\()f(2,)k(5.ODO,)e(')i(',)g
-(STATUS)e(\),)i(STATUS)e(\))0 3308 y FG(This)29 b(creates)i(a)f(Zo)s
-(omMap)g(and)f(displa)m(ys)h(it)g(on)g(standard)f(output)g(\()p
-Fu(x)p FG(4.4\).)43 b(Using)30 b(function)g(in)m(v)m(o)s(cations)0
-3421 y(as)39 b(argumen)m(ts)h(to)f(other)h(routines)f(in)f(this)h(w)m
-(a)m(y)h(is)f(v)m(ery)h(con)m(v)m(enien)m(t)h(b)s(ecause)e(it)g(a)m(v)m
-(oids)i(the)e(need)g(for)0 3534 y(in)m(termediate)k(p)s(oin)m(ter)d(v)
--5 b(ariables.)73 b(Ho)m(w)m(ev)m(er,)46 b(the)41 b(p)s(oin)m(ter)g
-(generated)h(b)m(y)f(AST)p Fy(_)p FG(ZOOMMAP)f(is)h(still)0
-3647 y(activ)m(e,)f(and)35 b(since)h(w)m(e)h(ha)m(v)m(e)g(not)f(stored)
-g(its)g(v)-5 b(alue,)38 b(w)m(e)f(cannot)f(use)g(AST)p
-Fy(_)p FG(ANNUL)f(to)i(ann)m(ul)e(it.)58 b(The)0 3760
-y(Zo)s(omMap)30 b(will)h(therefore)g(sta)m(y)g(around)f(un)m(til)g(the)
-h(end)f(of)g(the)h(program.)0 3911 y(A)44 b(simple)g(w)m(a)m(y)i(to)f
-(a)m(v)m(oid)g(this)f(problem)g(is)g(to)h(enclose)h(all)f(use)f(of)g
-(AST)f(routines)i(b)s(et)m(w)m(een)f(calls)i(to)0 4024
-y(AST)p Fy(_)p FG(BEGIN)30 b(and)g(AST)p Fy(_)p FG(END,)g(for)g
-(example:)262 4225 y Ft(CALL)41 b(AST_BEGIN\()f(STATUS)h(\))262
-4325 y(CALL)g(AST_SHOW\()f(AST_ZOOMMAP\()f(2,)k(5.ODO,)e(')i(',)g
-(STATUS)e(\),)i(STATUS)e(\))262 4424 y(CALL)g(AST_END\()g(STATUS)g(\))0
-4639 y FG(When)22 b(the)f(AST)p Fy(_)p FG(END)h(call)h(executes,)i(ev)m
-(ery)d(Ob)5 b(ject)22 b(p)s(oin)m(ter)g(created)h(since)f(the)g
-(previous)f(AST)p Fy(_)p FG(BEGIN)0 4752 y(call)33 b(is)e
-(automatically)j(ann)m(ulled)d(and)g(an)m(y)g(Ob)5 b(jects)32
-b(left)g(without)f(p)s(oin)m(ters)g(are)h(deleted.)44
-b(This)30 b(pro)m(vides)0 4865 y(a)d(simple)f(solution)h(to)h(managing)
-f(Ob)5 b(jects)26 b(and)g(their)h(p)s(oin)m(ters,)g(and)f(allo)m(ws)i
-(y)m(ou)e(to)i(create)g(Ob)5 b(jects)26 b(v)m(ery)0 4978
-y(freely)39 b(without)g(needing)g(to)h(k)m(eep)g(detailed)g(trac)m(k)g
-(of)f(eac)m(h)i(one.)67 b(Because)40 b(this)f(is)g(so)g(con)m(v)m
-(enien)m(t,)44 b(w)m(e)0 5091 y(implicitly)32 b(assume)f(that)h(AST)p
-Fy(_)p FG(BEGIN)e(and)h(AST)p Fy(_)p FG(END)f(are)i(used)e(in)g(most)i
-(of)f(the)g(examples)h(giv)m(en)g(in)0 5203 y(this)j(do)s(cumen)m(t.)56
-b(P)m(oin)m(ter)37 b(managemen)m(t)g(is)f(not)g(generally)g(sho)m(wn)f
-(explicitly)i(unless)e(it)h(is)g(particularly)0 5316
-y(relev)-5 b(an)m(t)32 b(to)f(the)f(p)s(oin)m(t)h(b)s(eing)f
-(illustrated.)0 5467 y(If)35 b(necessary)-8 b(,)38 b(calls)f(to)g(AST)p
-Fy(_)p FG(BEGIN)e(and)g(AST)p Fy(_)p FG(END)g(ma)m(y)i(b)s(e)e(nested,)
-i(lik)m(e)g(IF.)16 b(.)f(.)g(ENDIF)37 b(blo)s(c)m(ks)f(in)0
-5580 y(F)-8 b(ortran,)28 b(to)f(de\014ne)f(a)h(series)g(of)g(AST)e(p)s
-(oin)m(ter)i(con)m(texts.)41 b(Eac)m(h)27 b(call)h(to)f(AST)p
-Fy(_)p FG(END)f(will)h(then)f(ann)m(ul)g(only)0 5693
-y(those)31 b(Ob)5 b(ject)30 b(p)s(oin)m(ters)h(created)g(since)g(the)f
-(matc)m(hing)i(call)f(to)h(AST)p Fy(_)p FG(BEGIN.)p eop
-end
-%%Page: 41 51
-TeXDict begin 41 50 bop 0 52 a Fz(4.11)93 b(Exp)s(orting,)30
-b(Imp)s(orting)f(and)h(Exempting)g(AST)g(P)m(oin)m(ters)1372
-b FG(41)0 351 y Fw(4.11)112 b(Exp)s(orting,)38 b(Imp)s(orting)f(and)i
-(Exempting)f(AST)f(P)m(oin)m(ters)0 570 y FG(The)k(AST)p
-Fy(_)p FG(EXPOR)-8 b(T)39 b(routine)j(allo)m(ws)g(y)m(ou)g(to)g(exp)s
-(ort)e(particular)i(p)s(oin)m(ters)f(from)g(one)g(AST)g(con)m(text)0
-682 y(\()p Fu(x)p FG(4.10\))33 b(to)e(the)g(next)f(outer)h(one,)g(as)f
-(follo)m(ws:)262 919 y Ft(CALL)41 b(AST_EXPORT\()e(ZOOMMAP,)i(STATUS)g
-(\))0 1169 y FG(This)c(w)m(ould)h(iden)m(tify)h(the)f(p)s(oin)m(ter)g
-(stored)h(in)e(ZOOMMAP)h(as)g(b)s(eing)g(required)g(after)g(the)g(end)g
-(of)g(the)0 1282 y(curren)m(t)33 b(AST)f(con)m(text.)50
-b(It)32 b(causes)i(an)m(y)f(p)s(oin)m(ters)f(nominated)h(in)g(this)g(w)
-m(a)m(y)g(to)h(surviv)m(e)f(the)g(next)g(call)h(to)0
-1394 y(AST)p Fy(_)p FG(END)28 b(\(but)g(only)h(one)g(suc)m(h)f(call\))j
-(unscathed,)d(so)h(that)g(they)g(are)g(a)m(v)-5 b(ailable)31
-b(to)e(the)g(next)g(outer)g(con-)0 1507 y(text.)38 b(This)20
-b(facilit)m(y)i(is)f(not)f(needed)g(often,)j(but)d(is)g(in)m(v)-5
-b(aluable)21 b(when)e(the)i(purp)s(ose)d(of)j(y)m(our)f(AST)p
-Fy(_)p FG(BEGIN.)15 b(.)h(.)f(AST)p Fy(_)p FG(END)0 1620
-y(blo)s(c)m(k)33 b(is)g(basically)h(to)g(generate)g(an)f(Ob)5
-b(ject)33 b(p)s(oin)m(ter.)48 b(Without)33 b(this,)h(there)f(is)g(no)g
-(w)m(a)m(y)g(of)g(getting)i(that)0 1733 y(p)s(oin)m(ter)30
-b(out.)0 1893 y(The)24 b(AST)p Fy(_)p FG(IMPOR)-8 b(T)24
-b(routine)g(can)h(b)s(e)f(used)g(in)g(a)h(similar)g(manner)f(to)i(imp)s
-(ort)e(a)h(p)s(oin)m(ter)f(in)m(to)i(the)f(curren)m(t)0
-2006 y(con)m(text,)32 b(so)f(that)g(it)g(is)f(deleted)i(when)d(the)h
-(curren)m(t)h(con)m(text)h(is)e(closed)h(using)f(AST)p
-Fy(_)p FG(END.)0 2165 y(Sometimes,)36 b(y)m(ou)e(ma)m(y)g(also)h(w)m
-(an)m(t)f(to)h(exempt)f(a)g(p)s(oin)m(ter)g(from)f(all)i(the)f
-(e\013ects)h(of)f(AST)f(con)m(texts.)53 b(Y)-8 b(ou)0
-2278 y(should)33 b(not)h(need)g(to)g(do)g(this)g(often,)h(but)e(it)h
-(will)h(pro)m(v)m(e)f(essen)m(tial)i(if)e(y)m(ou)g(ev)m(er)g(need)g(to)
-h(write)f(a)g(library)0 2391 y(of)j(routines)g(that)g(stores)h(AST)e(p)
-s(oin)m(ters)h(as)g(part)g(of)g(its)g(o)m(wn)g(in)m(ternal)h(data.)61
-b(Without)38 b(some)f(form)f(of)0 2504 y(exemption,)28
-b(the)f(caller)h(of)f(y)m(our)g(routines)f(could)h(cause)g(the)g(p)s
-(oin)m(ters)g(y)m(ou)g(ha)m(v)m(e)g(stored)g(to)h(b)s(e)e(ann)m(ulled|)
-0 2617 y(th)m(us)31 b(corrupting)h(y)m(our)f(in)m(ternal)i(data|simply)
-f(b)m(y)f(using)h(AST)p Fy(_)p FG(END.)f(T)-8 b(o)32
-b(a)m(v)m(oid)i(this,)e(y)m(ou)g(should)f(use)0 2730
-y(AST)p Fy(_)p FG(EXEMPT)e(on)h(eac)m(h)i(p)s(oin)m(ter)e(that)h(y)m
-(ou)g(store,)g(for)f(example:)262 2966 y Ft(CALL)41 b(AST_EXEMPT\()e
-(ZOOMMAP,)i(STATUS)g(\))0 3216 y FG(This)c(will)i(prev)m(en)m(t)g(the)f
-(p)s(oin)m(ter)g(b)s(eing)g(a\013ected)i(b)m(y)e(an)m(y)h(subsequen)m
-(t)e(use)h(of)g(AST)p Fy(_)p FG(END.)g(Of)g(course,)0
-3329 y(it)f(then)f(b)s(ecomes)h(y)m(our)f(resp)s(onsibilit)m(y)h(to)g
-(ann)m(ul)f(this)g(p)s(oin)m(ter)h(\(using)f(AST)p Fy(_)p
-FG(ANNUL\))h(when)e(it)i(is)g(no)0 3442 y(longer)31 b(required.)0
-3730 y Fw(4.12)112 b(Cop)m(ying)38 b(Ob)6 b(jects)0 3949
-y FG(The)22 b(AST)g(library)g(mak)m(es)i(extensiv)m(e)g(use)f(of)f(p)s
-(oin)m(ters,)j(not)e(only)g(for)f(accessing)i(Ob)5 b(jects)23
-b(directly)-8 b(,)26 b(but)c(also)0 4061 y(as)31 b(a)g(means)g(of)g
-(storing)h(Ob)5 b(jects)30 b(inside)h(other)g(Ob)5 b(jects)31
-b(\(a)h(n)m(um)m(b)s(er)d(of)i(classes)h(of)f(Ob)5 b(ject)31
-b(are)h(designed)0 4174 y(to)j(hold)e(collections)k(of)d(other)g(Ob)5
-b(jects\).)52 b(Rather)34 b(than)g(cop)m(y)h(an)f(Ob)5
-b(ject)34 b(in)g(its)g(en)m(tiret)m(y)-8 b(,)37 b(a)e(p)s(oin)m(ter)f
-(to)0 4287 y(the)d(in)m(terior)g(Ob)5 b(ject)30 b(is)h(simply)f(stored)
-g(in)g(the)h(enclosing)g(Ob)5 b(ject.)0 4447 y(This)30
-b(means)g(that)h(Ob)5 b(jects)30 b(ma)m(y)h(frequen)m(tly)f(not)h(b)s
-(e)f(completely)i(indep)s(enden)m(t)d(of)h(eac)m(h)i(other)e(b)s
-(ecause,)0 4560 y(for)d(instance,)i(they)e(b)s(oth)g(con)m(tain)i(p)s
-(oin)m(ters)e(to)h(the)f(same)h(sub-Ob)5 b(ject.)39 b(In)27
-b(this)g(situation,)i(c)m(hanging)f(one)0 4673 y(Ob)5
-b(ject)31 b(\(sa)m(y)g(assigning)g(an)f(attribute)h(v)-5
-b(alue\))31 b(ma)m(y)g(a\013ect)h(the)f(other)f(one)h
-Fx(via)g FG(the)f(common)h(Ob)5 b(ject.)0 4832 y(It)32
-b(is)f(di\016cult)g(to)i(describ)s(e)e(all)h(cases)g(where)f(this)h(ma)
-m(y)g(happ)s(en,)e(so)i(y)m(ou)f(should)g(alw)m(a)m(ys)i(b)s(e)e(alert)
-h(to)g(the)0 4945 y(p)s(ossibilit)m(y)-8 b(.)40 b(F)-8
-b(ortunately)g(,)27 b(there)e(is)f(a)h(simple)f(solution.)39
-b(If)24 b(y)m(ou)g(require)g(t)m(w)m(o)i(Ob)5 b(jects)24
-b(to)h(b)s(e)e(indep)s(enden)m(t,)0 5058 y(then)30 b(simply)g(use)g
-(AST)p Fy(_)p FG(COPY)f(to)i(mak)m(e)g(a)g(cop)m(y)g(of)g(one,)g
-Fx(e.g:)262 5295 y Ft(INTEGER)40 b(ZOOMMAP1,)g(ZOOMMAP2)262
-5494 y(...)262 5693 y(ZOOMMAP2)g(=)j(AST_COPY\()d(ZOOMMAP1,)g(STATUS)h
-(\))p eop end
-%%Page: 42 52
-TeXDict begin 42 51 bop 0 52 a FG(42)2393 b Fz(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)0 351 y FG(This)g(pro)s(cess)h(will)h(create)h
-(a)f(true)f(cop)m(y)h(of)f(an)m(y)h(Ob)5 b(ject)31 b(and)g(return)f(a)i
-(p)s(oin)m(ter)f(to)h(the)g(cop)m(y)-8 b(.)44 b(This)31
-b(cop)m(y)0 464 y(will)25 b(not)g(con)m(tain)h(an)m(y)f(p)s(oin)m(ters)
-f(to)h(an)m(y)g(comp)s(onen)m(t)g(of)g(the)g(original)h(Ob)5
-b(ject)24 b(\(ev)m(erything)i(is)f(duplicated\),)0 577
-y(so)g(y)m(ou)g(can)h(then)e(mo)s(dify)g(it)i(safely)-8
-b(,)27 b(without)e(fear)g(of)g(a\013ecting)i(either)e(the)h(original)g
-(or)f(an)m(y)g(other)g(Ob)5 b(ject.)0 915 y Fw(4.13)112
-b(Error)37 b(Detection)0 1156 y FG(If)c(an)h(error)f(o)s(ccurs)h(in)f
-(an)h(AST)f(routine)g(\(for)h(example,)i(if)d(y)m(ou)h(supply)f(an)g
-(in)m(v)-5 b(alid)35 b(argumen)m(t,)g(suc)m(h)e(as)0
-1269 y(a)f(p)s(oin)m(ter)f(to)i(the)e(wrong)g(class)i(of)e(Ob)5
-b(ject\),)33 b(an)e(error)g(message)i(will)f(b)s(e)f(written)g(to)h
-(the)g(standard)f(error)0 1382 y(stream)g(and)f(the)g(function)g(will)h
-(immediately)h(return.)0 1558 y(T)-8 b(o)36 b(indicate)g(that)g(an)f
-(error)g(has)g(o)s(ccurred,)h(eac)m(h)h(AST)d(routine)i(that)g(can)f(p)
-s(oten)m(tially)i(fail)f(has)f(a)h(\014nal)0 1671 y(in)m(teger)e
-Fx(err)-5 b(or)36 b(status)d FG(argumen)m(t)g(called)h(ST)-8
-b(A)g(TUS.)32 b(This)g(is)g(b)s(oth)g(an)g(input)g(and)f(an)i(output)f
-(argumen)m(t.)0 1784 y(Normally)-8 b(,)29 b(y)m(ou)d(should)f(declare)j
-(a)e(single)h(error)f(status)g(v)-5 b(ariable)27 b(and)f(pass)g(it)g
-(as)h(the)f(ST)-8 b(A)g(TUS)26 b(argumen)m(t)0 1896 y(to)39
-b(ev)m(ery)g(AST)f(routine)g(y)m(ou)h(in)m(v)m(ok)m(e.)66
-b(This)37 b(v)-5 b(ariable)39 b(m)m(ust)g(initially)g(b)s(e)f(cleared)h
-(\()p Fx(i.e)f FG(set)h(to)g(zero)3620 1863 y Fv(9)3699
-1896 y FG(to)0 2009 y(indicate)30 b(no)e(error\).)41
-b(If)28 b(an)h(error)f(o)s(ccurs,)h(the)g(ST)-8 b(A)g(TUS)28
-b(argumen)m(t)h(is)g(returned)f(set)h(to)h(a)f(di\013eren)m(t)g
-Fx(err)-5 b(or)0 2122 y(value)p FG(,)31 b(whic)m(h)f(allo)m(ws)h(y)m
-(ou)g(to)g(detect)h(the)f(error,)f(as)g(follo)m(ws:)262
-2411 y Ft(STATUS)41 b(=)i(0)262 2610 y(...)262 2810 y(ZOOMMAP)d(=)j
-(AST_ZOOMMAP\()c(2,)k(5.0D0,)e('Title=My)f(ZoomMap',)g(STATUS)h(\))262
-2909 y(IF)h(\()h(STATUS)f(.NE.)f(0)j(\))f(THEN)392 3009
-y(<an)g(error)e(has)h(occurred>)262 3109 y(END)g(IF)0
-3411 y FG(In)33 b(this)h(example,)h(an)f(error)f(w)m(ould)g(b)s(e)g
-(detected)i(b)s(ecause)f(w)m(e)g(ha)m(v)m(e)h(attempted)g(to)f(set)h(a)
-f(v)-5 b(alue)34 b(for)f(the)0 3524 y(Title)e(attribute)g(of)g(a)g(Zo)s
-(omMap)f(and)g(a)g(Zo)s(omMap)h(do)s(es)f(not)g(ha)m(v)m(e)i(suc)m(h)e
-(an)g(attribute.)0 3700 y(A)c(consequence)i(of)e(the)h(error)e(status)i
-(v)-5 b(ariable)27 b(ST)-8 b(A)g(TUS)26 b(b)s(eing)g(set)h(to)g(an)f
-(error)g(v)-5 b(alue)27 b(is)f(that)h(almost)h(all)0
-3813 y(AST)f(routines)h(will)g(subsequen)m(tly)g(cease)h(to)g(function)
-e(and)g(will)i(instead)f(simply)f(return)g(without)h(action.)0
-3925 y(This)k(means)h(that)h(y)m(ou)f(do)g(not)g(need)g(to)h(c)m(hec)m
-(k)g(for)f(errors)g(v)m(ery)g(frequen)m(tly)-8 b(.)49
-b(Instead,)34 b(y)m(ou)f(can)h(usually)0 4038 y(simply)25
-b(in)m(v)m(ok)m(e)j(a)e(succession)g(of)g(AST)g(routines.)39
-b(If)25 b(an)h(error)f(o)s(ccurs)h(in)f(an)m(y)h(of)g(them,)h(the)f
-(follo)m(wing)h(ones)0 4151 y(will)k(do)f(nothing)g(and)g(y)m(ou)h(can)
-f(c)m(hec)m(k)i(for)f(the)f(error)g(at)h(the)g(end,)f(for)g(example:)
-262 4440 y Ft(STATUS)41 b(=)i(0)262 4639 y(...)262 4839
-y(CALL)e(AST_ROUTINEA\()e(...)j(,)h(STATUS)e(\))262 4938
-y(CALL)g(AST_ROUTINEB\()e(...)j(,)h(STATUS)e(\))262 5038
-y(CALL)g(AST_ROUTINEC\()e(...)j(,)h(STATUS)e(\))262 5138
-y(IF)h(\()h(STATUS)f(.NE.)f(0)j(\))f(THEN)392 5237 y(<an)g(error)e(has)
-h(occurred>)262 5337 y(END)g(IF)p 0 5425 1512 4 v 104
-5479 a Fs(9)138 5510 y Fr(W)-6 b(e)26 b(will)i(assume)f(throughout)f
-(that)g(the)g(\\OK")g(v)l(alue)g(is)h(zero,)h(as)f(it)f(curren)n(tly)g
-(is.)37 b(Ho)n(w)n(ev)n(er,)26 b(a)h(di\013eren)n(t)f(v)l(alue)g
-(could,)0 5602 y(in)k(principle,)i(b)r(e)f(used)f(if)h(the)f(en)n
-(vironmen)n(t)f(in)h(whic)n(h)h(AST)f(is)h(running)e(requires)i(it.)48
-b(T)-6 b(o)31 b(allo)n(w)h(for)f(this)g(p)r(ossibilit)n(y)-6
-b(,)32 b(y)n(ou)0 5693 y(migh)n(t)26 b(prefer)g(to)g(use)f(a)h
-(parameter)h(constan)n(t)e(to)h(represen)n(t)g(the)f(v)l(alue)h(zero)g
-(when)f(testing)i(for)f(errors.)p eop end
-%%Page: 43 53
-TeXDict begin 43 52 bop 0 52 a Fz(4.13)93 b(Error)29
-b(Detection)2812 b FG(43)0 351 y(There)32 b(are,)h(ho)m(w)m(ev)m(er,)h
-(a)f(few)f(routines)g(whic)m(h)g(do)g(not)g(adhere)g(to)h(this)f
-(general)h(rule)f(and)g(whic)m(h)g(will)g(at-)0 464 y(tempt)21
-b(to)g(execute)g(if)f(their)h(ST)-8 b(A)g(TUS)20 b(argumen)m(t)g(is)h
-(initially)g(set.)38 b(These)20 b(routines,)j(suc)m(h)d(as)g(AST)p
-Fy(_)p FG(ANNUL,)0 577 y(are)31 b(concerned)f(with)g(cleaning)i(up)d
-(and)h(reco)m(v)m(ering)i(resources.)41 b(F)-8 b(or)31
-b(example,)g(in)g(the)f(follo)m(wing:)262 826 y Ft(STATUS)41
-b(=)i(0)262 1025 y(...)262 1225 y(ZOOMMAP)d(=)j(AST_ZOOMMAP\()c(2,)k
-(5.0D0,)e(')i(',)g(STATUS)e(\))262 1424 y(CALL)g(AST_ROUTINEX\()e(...)j
-(,)h(STATUS)e(\))262 1524 y(CALL)g(AST_ROUTINEY\()e(...)j(,)h(STATUS)e
-(\))262 1623 y(CALL)g(AST_ROUTINEZ\()e(...)j(,)h(STATUS)e(\))262
-1822 y(CALL)g(AST_ANNUL\()f(ZOOMMAP,)g(STATUS)h(\))262
-1922 y(IF)h(\()h(STATUS)f(.NE.)f(0)j(\))f(THEN)392 2022
-y(<an)g(error)e(has)h(occurred>)262 2121 y(END)g(IF)0
-2384 y FG(AST)p Fy(_)p FG(ANNUL)49 b(will)h(execute)h(normally)e(in)h
-(order)f(to)h(reco)m(v)m(er)h(the)f(resources)f(asso)s(ciated)i(with)e
-(the)0 2497 y(Zo)s(omMap)36 b(that)h(w)m(as)f(created)i(earlier,)g
-(regardless)f(of)f(whether)g(an)g(error)f(has)h(o)s(ccurred)g(in)f(an)m
-(y)i(of)f(the)0 2609 y(in)m(termediate)30 b(routines.)40
-b(Routines)28 b(whic)m(h)g(b)s(eha)m(v)m(e)h(in)f(this)g(w)m(a)m(y)i
-(are)e(noted)h(in)f(the)g(relev)-5 b(an)m(t)30 b(descriptions)0
-2722 y(in)g(App)s(endix)f(B.)0 2885 y(If)d(a)h(serious)f(error)g(o)s
-(ccurs,)h(y)m(ou)g(will)g(probably)f(w)m(an)m(t)h(to)g(ab)s(ort)f(y)m
-(our)h(program,)g(but)f(sometimes)h(y)m(ou)g(ma)m(y)0
-2998 y(w)m(an)m(t)39 b(to)f(reco)m(v)m(er)i(and)d(carry)g(on.)63
-b(This)37 b(is)h(simply)f(done)h(b)m(y)f(resetting)i(y)m(our)f(error)f
-(status)h(v)-5 b(ariable)39 b(to)0 3111 y(zero,)31 b(whereup)s(on)e
-(the)h(AST)g(routines)g(y)m(ou)h(pass)f(it)h(to)g(will)g(execute)g
-(normally)g(again.)p eop end
-%%Page: 44 54
-TeXDict begin 44 53 bop 0 52 a FG(44)2393 b Fz(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)p eop end
-%%Page: 45 55
-TeXDict begin 45 54 bop 3689 52 a FG(45)0 351 y FA(5)135
-b(In)l(ter-Relating)47 b(Co)t(ordinate)f(Systems)g(\(Mappings\))0
-615 y FG(In)37 b Fu(x)p FG(4)i(w)m(e)g(used)e(the)h(Zo)s(omMap)g(as)h
-(an)e(example)i(of)f(a)h(Mapping.)64 b(W)-8 b(e)39 b(sa)m(w)f(ho)m(w)g
-(it)h(could)f(b)s(e)f(used)h(to)0 728 y(transform)32
-b(co)s(ordinates)h(from)f(its)g(input)g(to)h(its)f(output)g(and)g(bac)m
-(k)h(again)g(\()p Fu(x)p FG(4.8\).)49 b(W)-8 b(e)34 b(also)f(sa)m(w)g
-(ho)m(w)f(its)0 841 y(b)s(eha)m(viour)37 b(could)g(b)s(e)f(con)m
-(trolled)j(b)m(y)e(setting)h(v)-5 b(arious)38 b(attributes,)h(suc)m(h)e
-(as)g(the)h(Zo)s(om)f(factor)h(and)e(the)0 954 y(Rep)s(ort)30
-b(attribute)h(that)g(made)g(it)f(displa)m(y)h(co)s(ordinate)g(v)-5
-b(alues)31 b(as)g(it)g(transformed)e(them.)0 1125 y(In)c(this)g
-(section,)j(w)m(e)e(will)f(lo)s(ok)h(at)g(Mappings)f(a)h(bit)g(more)f
-(thoroughly)h(and)e(explore)i(the)g(b)s(eha)m(viour)f(whic)m(h)0
-1238 y(is)37 b(common)h(to)g(all)g(the)f(Mappings)g(pro)m(vided)g(b)m
-(y)g(AST.)g(This)f(is)h(go)s(o)s(d)g(bac)m(kground)g(for)g(what)g
-(follo)m(ws,)0 1350 y(b)s(ecause)42 b(man)m(y)h(of)f(the)h(Ob)5
-b(jects)42 b(w)m(e)h(discuss)e(later)j(will)e(also)i(turn)d(out)i(to)g
-(b)s(e)e(Mappings)h(in)g(v)-5 b(arious)0 1463 y(disguises.)0
-1783 y Fw(5.1)112 b(The)38 b(Mapping)h(Class)0 2016 y
-FG(Before)28 b(w)m(e)g(start,)h(it)f(is)f(w)m(orth)h(taking)g(a)g(quic)
-m(k)g(lo)s(ok)g(at)g(the)g(Mapping)f(class)h(as)g(a)f(whole)h(and)f
-(some)h(of)f(the)0 2128 y(sub-classes)k(it)f(con)m(tains:)370
-2414 y Fy(Mapping)514 2527 y(CmpMap)514 2640 y(DssMap)514
-2753 y(GrismMap)514 2866 y(IntraMap)514 2979 y(LutMap)514
-3092 y(MathMap)514 3204 y(MatrixMap)514 3317 y(PermMap)514
-3430 y(PolyMap)514 3543 y(SlaMap)514 3656 y(SpecMap)514
-3769 y(TimeMap)514 3882 y(UnitMap)514 3995 y(WcsMap)514
-4108 y(ZoomMap)514 4334 y(Frame)657 4447 y(<various)45
-b(types)i(of)g(Frame>)0 4732 y FG(The)29 b(F)-8 b(rame)30
-b(sub-class)f(has)g(b)s(een)g(separated)h(out)f(here)g(b)s(ecause)h(it)
-g(is)f(co)m(v)m(ered)i(in)e(detail)h(in)f Fu(x)p FG(7.)41
-b(W)-8 b(e)31 b(start)0 4845 y(b)m(y)f(lo)s(oking)h(at)h(the)e(paren)m
-(t)h(class,)g(Mapping.)0 5016 y(AST)20 b(do)s(es)h(not)h(pro)m(vide)f
-(a)g(function)g(to)h(create)h(a)e(basic)h(Mapping)f(\()p
-Fx(i.e.)g FG(the)g(AST)p Fy(_)p FG(MAPPING)g(constructor)0
-5128 y(do)s(es)36 b(not)g(exist\).)60 b(This)35 b(is)h(b)s(ecause)h
-(the)f(Mapping)g(class)h(itself)g(is)f(\\virtual")i(and)d(basic)i
-(Mappings)f(are)0 5241 y(of)j(no)h(use)f(in)f(themselv)m(es.)69
-b(The)39 b(Mapping)g(class)h(serv)m(es)g(simply)f(to)h(con)m(tain)g
-(the)g(v)-5 b(arious)39 b(sp)s(ecialised)0 5354 y(Mappings)23
-b(that)i(exist.)39 b(Ho)m(w)m(ev)m(er,)27 b(it)e(pro)m(vides)e(more)h
-(than)g(just)f(a)h(con)m(v)m(enien)m(t)i(heading)d(for)h(them)f(b)s
-(ecause)0 5467 y(it)34 b(b)s(esto)m(ws)f(all)h(classes)h(of)e(Mapping)g
-(with)g(common)h(prop)s(erties)e(\()p Fx(e.g.)h FG(attributes\))h(and)f
-(b)s(eha)m(viour.)49 b(By)0 5580 y(examining)37 b(the)g(Mapping)g
-(class,)i(w)m(e)e(are)h(therefore)f(examining)g(the)g(things)g(that)g
-(all)h(other)f(Mappings)0 5693 y(ha)m(v)m(e)32 b(in)e(common.)p
-eop end
-%%Page: 46 56
-TeXDict begin 46 55 bop 0 52 a FG(46)1020 b Fz(5)92 b(INTER-RELA)-8
-b(TING)30 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(MAPPINGS\))0
-351 y Fw(5.2)112 b(The)38 b(Mapping)h(Mo)s(del)0 571
-y FG(The)32 b(concept)i(of)f(a)g(Mapping)g(w)m(as)g(illustrated)h(in)e
-(Figure)h(1.)49 b(It)33 b(is)g(a)g(blac)m(k)h(b)s(o)m(x)e(whic)m(h)h(y)
-m(ou)g(can)g(supply)0 684 y(with)d(a)h(set)g(of)g(co)s(ordinate)g(v)-5
-b(alues)31 b(in)g(return)e(for)h(a)h(set)h(of)e(transformed)g(co)s
-(ordinates.)42 b(The)30 b(t)m(w)m(o)i(sets)f(are)0 797
-y(termed)c Fx(input)g FG(and)f Fx(output)i FG(co)s(ordinates.)40
-b(Y)-8 b(ou)28 b(can)f(also)h(go)g(bac)m(k)f(the)g(other)g(w)m(a)m(y)h
-(and)f(transform)f(output)0 910 y(co)s(ordinates)31 b(bac)m(k)g(in)m
-(to)h(input)d(co)s(ordinates,)i(as)g(w)m(e)g(sa)m(w)g(in)f
-Fu(x)p FG(4.8.)0 1201 y Fw(5.3)112 b(Input)38 b(and)g(Output)g(Co)s
-(ordinate)g(Num)m(b)s(ers)0 1421 y FG(In)30 b(general,)h(the)g(n)m(um)m
-(b)s(er)e(of)h(co)s(ordinates)h(y)m(ou)g(feed)f(in)m(to)h(a)g(Mapping)f
-(to)h(represen)m(t)g(a)f(single)h(p)s(oin)m(t)g(need)0
-1534 y(not)38 b(b)s(e)f(the)h(same)g(as)g(the)g(n)m(um)m(b)s(er)f(that)
-h(comes)h(out.)63 b(Often)37 b(these)h(n)m(um)m(b)s(ers)f(will)h(b)s(e)
-f(the)h(same,)i(and)0 1647 y(often)32 b(they)h(will)f(b)s(oth)f(equal)i
-(2)f(\(b)s(ecause)g(2-dimensional)h(co)s(ordinate)g(systems)f(are)g
-(common\),)h(but)f(this)0 1760 y(needn't)e(necessarily)i(b)s(e)d(the)i
-(case.)0 1921 y(The)42 b(n)m(um)m(b)s(er)g(of)g(co)s(ordinates)i
-(required)e(to)h(sp)s(ecify)f(an)h(input)f(p)s(oin)m(t)g(is)h(represen)
-m(ted)g(b)m(y)f(the)h(in)m(teger)0 2034 y(attribute)26
-b(Nin)f(and)g(the)g(n)m(um)m(b)s(er)f(required)h(to)h(sp)s(ecify)f(an)g
-(output)g(p)s(oin)m(t)g(is)h(represen)m(ted)f(b)m(y)g(Nout.)40
-b(These)0 2147 y(are)j(read-only)f(attributes)h(common)f(to)h(all)g
-(Mappings.)76 b(Generally)-8 b(,)47 b(their)42 b(v)-5
-b(alues)43 b(are)f(\014xed)g(when)f(a)0 2260 y(Mapping)30
-b(is)h(created.)0 2421 y(In)20 b Fu(x)p FG(4.2,)25 b(w)m(e)d(sa)m(w)f
-(ho)m(w)g(the)g(Nin)g(attribute)h(for)f(a)g(Zo)s(omMap)h(w)m(as)f
-(initialised)h(b)m(y)f(the)h(call)g(to)g(the)f(constructor)0
-2534 y(function)35 b(AST)p Fy(_)p FG(ZOOMMAP)f(whic)m(h)h(created)h
-(it.)56 b(In)35 b(this)g(case,)j(the)d(Nout)h(attribute)g(w)m(as)f(not)
-h(needed)0 2647 y(and)31 b(it)h(implicitly)h(to)s(ok)f(the)g(same)g(v)
--5 b(alue)32 b(as)f(Nout,)i(but)e(w)m(e)h(could)f(ha)m(v)m(e)i
-(enquired)e(ab)s(out)g(its)h(v)-5 b(alue)32 b(had)0 2760
-y(w)m(e)f(w)m(an)m(ted,)g(as)g(follo)m(ws:)262 3004 y
-Ft(INCLUDE)40 b('AST_PAR')262 3103 y(INTEGER)g(NOUT,)i(STATUS,)e
-(ZOOMMAP)262 3303 y(STATUS)h(=)i(0)262 3502 y(...)262
-3701 y(NOUT)e(=)j(AST_GETI\()39 b(ZOOMMAP,)i('Nout',)f(STATUS)i(\))0
-3992 y Fw(5.4)112 b(F)-9 b(orw)m(ard)38 b(and)g(In)m(v)m(erse)g(T)-9
-b(ransformations)0 4212 y FG(W)h(e)37 b(stated)g(earlier)f(that)h(a)f
-(Mapping)g(ma)m(y)g(b)s(e)f(used)g(to)i(transform)e(co)s(ordinates)h
-(either)h(from)e(input)g(to)0 4325 y(output,)30 b(or)h
-Fx(vic)-5 b(e)32 b(versa.)41 b FG(These)30 b(are)h(termed)f(its)h
-Fx(forwar)-5 b(d)33 b FG(and)c Fx(inverse)i FG(transformations.)0
-4487 y(This)f(statemen)m(t)i(w)m(as)f(not)g(quite)f(accurate,)j(ho)m(w)
-m(ev)m(er,)f(b)s(ecause)e(in)h(general)g(Mappings)f(are)h(only)g
-FE(p)s(oten-)0 4600 y(tially)j FG(capable)h(of)f(w)m(orking)h(in)e(b)s
-(oth)h(directions.)52 b(In)34 b(practice,)i(co)s(ordinate)f
-(transformation)g(ma)m(y)f(only)0 4713 y(b)s(e)i(feasible)i(in)e(one)h
-(direction)h(or)f(the)g(other)g(b)s(ecause)g(some)g(functions)f(are)h
-(not)g(easily)h(in)m(v)m(erted)g(\(they)0 4825 y(ma)m(y)29
-b(b)s(e)g(m)m(ulti-v)-5 b(alued,)30 b(for)e(instance\).)42
-b(Allo)m(w)m(ance)31 b(m)m(ust)e(b)s(e)f(made)h(for)f(this,)i(so)f(eac)
-m(h)h(Mapping)f(has)f(t)m(w)m(o)0 4938 y(read-only)36
-b(b)s(o)s(olean)g(\(in)m(teger\))i(attributes,)g(T)-8
-b(ranF)g(orw)m(ard)36 b(and)g(T)-8 b(ranIn)m(v)m(erse,)37
-b(whic)m(h)f(indicate)h(whether)0 5051 y(eac)m(h)32 b(transformation)e
-(is)h(a)m(v)-5 b(ailable.)0 5213 y(A)29 b(transformation)h(is)f(a)m(v)
--5 b(ailable)31 b(if)e(the)g(corresp)s(onding)f(attribute)i(is)f
-(non-zero,)h(otherwise)g(it)g(is)f(not.)3604 5180 y Fv(10)3719
-5213 y FG(If)0 5326 y(y)m(ou)f(enquire)f(ab)s(out)h(the)f(v)-5
-b(alue)28 b(of)g(these)g(attributes,)h(a)f(v)-5 b(alue)28
-b(of)g(0)g(or)g(1)g(is)g(returned.)38 b(A)m(ttempting)29
-b(to)g(use)0 5438 y(a)i(Mapping)f(to)h(apply)f(a)h(transformation)g
-(whic)m(h)f(is)g(not)h(a)m(v)-5 b(ailable)33 b(will)d(result)h(in)f(an)
-g(error.)p 0 5516 1512 4 v 73 5570 a Fs(10)138 5602 y
-Fr(Most)23 b(of)g(the)e(Mappings)i(pro)n(vided)e(b)n(y)g(the)g(AST)h
-(library)g(w)n(ork)g(in)g(b)r(oth)g(directions,)i(although)e(the)f
-(LutMap)h(can)g(b)r(eha)n(v)n(e)0 5693 y(otherwise.)p
-eop end
-%%Page: 47 57
-TeXDict begin 47 56 bop 0 52 a Fz(5.5)92 b(In)m(v)m(erting)31
-b(Mappings)2706 b FG(47)0 351 y Fw(5.5)112 b(In)m(v)m(erting)38
-b(Mappings)0 580 y FG(An)28 b(imp)s(ortan)m(t)g(attribute,)i(common)f
-(to)g(all)g(Mappings,)g(is)f(the)g(In)m(v)m(ert)h(\015ag.)41
-b(This)27 b(is)h(a)h(b)s(o)s(olean)f(\(in)m(teger\))0
-693 y(attribute)37 b(that)h(can)f(b)s(e)f(assigned)h(a)g(new)f(v)-5
-b(alue)38 b(at)f(an)m(y)g(time.)61 b(If)36 b(it)h(is)g(non-zero,)i(it)f
-(has)e(the)h(e\013ect)h(of)0 806 y(in)m(terc)m(hanging)33
-b(the)e(Mapping's)g(input)f(and)g(output)h(co)s(ordinates)h(and)e(the)h
-(Mapping)g(is)h(then)e(said)h(to)h(b)s(e)0 918 y Fx(inverte)-5
-b(d.)41 b FG(By)31 b(default,)g(the)f(In)m(v)m(ert)h(attribute)g(is)g
-(zero.)0 1086 y(There)41 b(is)g(no)g(magic)h(in)f(this.)72
-b(There)41 b(is)g(no)g(fancy)g(arithmetic)h(in)m(v)m(olv)m(ed)h(in)e
-(in)m(v)m(erting)h(mathematical)0 1199 y(functions,)32
-b(for)f(instance.)45 b(The)31 b(In)m(v)m(ert)i(\015ag)e(is)h(simply)f
-(a)h(switc)m(h)g(that)h(in)m(terc)m(hanges)g(a)f(Mapping's)f(input)0
-1312 y(and)37 b(output)g(p)s(orts.)61 b(If)37 b(it)h(is)g(non-zero,)i
-(the)d(Mapping's)h(Nin)f(and)g(Nout)h(attributes)g(are)g(sw)m(app)s
-(ed,)g(its)0 1425 y(T)-8 b(ranF)g(orw)m(ard)28 b(and)g(T)-8
-b(ranIn)m(v)m(erse)28 b(attributes)h(are)g(sw)m(app)s(ed,)f(and)f(when)
-g(y)m(ou)i(ask)g(for)f(what)g(w)m(as)g(once)h(the)0 1538
-y(forw)m(ard)h(transformation)h(y)m(ou)g(get)h(the)f(in)m(v)m(erse)h
-(transformation)f(instead)g(\(and)f Fx(vic)-5 b(e)33
-b(versa)p FG(\).)43 b(When)30 b(y)m(ou)0 1650 y(return)f(the)i(In)m(v)m
-(ert)g(attribute)g(to)g(zero,)g(or)g(clear)g(it,)g(the)g(Mapping)f
-(returns)f(to)i(its)g(original)h(b)s(eha)m(viour.)0 1818
-y(Often,)e(the)f(actual)i(v)-5 b(alue)30 b(of)g(the)f(In)m(v)m(ert)h
-(attribute)h(is)e(unimp)s(ortan)m(t)g(and)g(y)m(ou)h(simply)f(wish)f
-(to)j(in)m(v)m(ert)f(its)0 1931 y(b)s(o)s(olean)i(sense,)i(so)e(that)h
-(what)g(w)m(as)f(the)h(Mapping's)f(input)g(b)s(ecomes)h(its)f(output)g
-(and)g Fx(vic)-5 b(e)34 b(versa.)47 b FG(This)0 2044
-y(is)30 b(most)h(easily)h(accomplished)f(using)f(AST)p
-Fy(_)p FG(INVER)-8 b(T,)29 b(as)i(follo)m(ws:)262 2307
-y Ft(INTEGER)40 b(MAPPING)262 2506 y(...)262 2706 y(CALL)h
-(AST_INVERT\()e(MAPPING,)i(STATUS)g(\))0 2982 y FG(If)36
-b(the)g(Mapping)g(y)m(ou)h(ha)m(v)m(e)g(happ)s(ens)e(to)i(b)s(e)e(the)i
-(wrong)e(w)m(a)m(y)j(around,)e(AST)p Fy(_)p FG(INVER)-8
-b(T)36 b(allo)m(ws)h(y)m(ou)g(to)0 3095 y(correct)32
-b(the)e(problem.)0 3404 y Fw(5.6)112 b(Finding)39 b(the)f(Rate)f(of)g
-(Change)i(of)f(a)f(Mapping)i(Output)0 3633 y FG(The)33
-b(AST)p Fy(_)p FG(RA)-8 b(TE)32 b(function)i(can)f(b)s(e)g(used)g(to)h
-(\014nd)e(the)i(rate)g(of)f(c)m(hange)i(of)f(an)m(y)f(Mapping)h(output)
-f(with)0 3746 y(resp)s(ect)27 b(to)h(an)m(y)f(Mapping)g(input,)g(at)g
-(a)h(giv)m(en)g(input)d(p)s(osition.)40 b(The)27 b(metho)s(d)f(used)g
-(pro)s(duces)g(go)s(o)s(d)g(accu-)0 3859 y(racy)31 b(\(t)m(ypically)j
-(a)d(relativ)m(e)i(error)e(of)g(10E-10)i(or)e(less\))g(but)g(ma)m(y)g
-(require)g(the)g(Mapping)g(to)h(b)s(e)e(ev)-5 b(aluated)0
-3972 y(100)32 b(or)e(more)h(times.)41 b(An)30 b(estimate)i(of)f(the)f
-(second)h(deriv)-5 b(ativ)m(e)31 b(is)g(also)g(pro)s(duced)e(b)m(y)h
-(this)g(function.)0 4281 y Fw(5.7)112 b(Rep)s(orting)38
-b(Co)s(ordinate)g(T)-9 b(ransformations)0 4509 y FG(W)h(e)24
-b(ha)m(v)m(e)g(already)g(seen)e(\()p Fu(x)p FG(4.8\))k(ho)m(w)c(the)h
-(b)s(o)s(olean)g(\(in)m(teger\))i(Rep)s(ort)e(attribute)g(of)g(a)h
-(Mapping)e(w)m(orks.)39 b(If)22 b(it)0 4622 y(is)g(non-zero,)j(the)d
-(op)s(eration)g(of)g(transforming)g(a)g(set)h(of)f(co)s(ordinates)h
-(will)f(result)g(in)g(a)g(rep)s(ort)g(b)s(eing)f(written)0
-4735 y(to)31 b(standard)f(output.)42 b(This)29 b(will)i(displa)m(y)g
-(the)g(co)s(ordinate)h(v)-5 b(alues)31 b(b)s(efore)f(and)g(after)h
-(transformation.)42 b(It)0 4848 y(can)35 b(sa)m(v)m(e)h(considerable)f
-(time)g(during)e(program)h(dev)m(elopmen)m(t)i(b)m(y)e(eliminating)i
-(the)e(need)h(to)g(add)e(lo)s(ops)0 4961 y(and)d(output)g(statemen)m
-(ts)i(to)f(y)m(our)f(program.)0 5128 y(In)h(a)g(\014nished)f(program,)i
-(ho)m(w)m(ev)m(er,)h(y)m(ou)f(should)e(b)s(e)h(careful)g(that)h(the)g
-(Rep)s(ort)f(attribute)h(is)f(not)h(set)g(to)g(a)0 5241
-y(non-zero)g(v)-5 b(alue)31 b(unless)g(y)m(ou)g(w)m(an)m(t)i(to)e(see)h
-(the)g(output)e(\(there)i(ma)m(y)g(often)g(b)s(e)e(rather)h(a)h(lot)g
-(of)f(this!\).)44 b(T)-8 b(o)0 5354 y(help)33 b(prev)m(en)m(t)i(un)m(w)
-m(an)m(ted)f(output)g(b)s(eing)f(pro)s(duced)f(b)m(y)i(acciden)m(t,)j
-(the)d(Rep)s(ort)f(attribute)i(is)f(un)m(usual)f(in)0
-5467 y(that)d(its)f(v)-5 b(alue)30 b(is)f(not)g(preserv)m(ed)g(when)f
-(a)i(Mapping)f(is)g(copied)g(using)g(AST)p Fy(_)p FG(COPY)f(\()p
-Fu(x)p FG(4.12\).)42 b(Instead,)30 b(it)0 5580 y(rev)m(erts)h(to)g(its)
-g(default)g(of)f(zero)h(\()p Fx(i.e.)f FG(un-set\))h(in)f(the)h(cop)m
-(y)-8 b(.)42 b(It)30 b(also)i(rev)m(erts)f(to)g(zero)g(when)e(a)i
-(Mapping)f(is)0 5693 y(written)g(out,)h Fx(e.g.)f FG(to)h(a)g(\014le)f
-(using)g(a)h(Channel)f(\()p Fu(x)p FG(15\).)p eop end
-%%Page: 48 58
-TeXDict begin 48 57 bop 0 52 a FG(48)1020 b Fz(5)92 b(INTER-RELA)-8
-b(TING)30 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(MAPPINGS\))0
-351 y Fw(5.8)112 b(Handling)39 b(Missing)g(\(Bad\))e(Co)s(ordinate)h(V)
--9 b(alues)0 589 y FG(Ev)m(en)27 b(when)e(co)s(ordinates)i(can,)h(in)e
-(principle,)h(b)s(e)f(transformed)g(in)g(either)h(direction)g(b)m(y)f
-(a)h(Mapping,)g(there)0 701 y(ma)m(y)39 b(still)g(b)s(e)f(instances)h
-(where)f(sp)s(eci\014c)g(co)s(ordinate)i(v)-5 b(alues)39
-b(cannot)g(b)s(e)f(handled.)64 b(F)-8 b(or)39 b(example,)i(the)0
-814 y(Mapping)33 b(ma)m(y)h(b)s(e)f(mathematically)j(in)m(tractable)f
-(\()p Fx(e.g.)e FG(singular\))h(in)f(certain)h(places,)h(or)e(it)h(ma)m
-(y)g(map)f(a)0 927 y(subset)f(of)g(one)h(space)g(on)f(to)h(another,)h
-(so)f(that)g(some)f(p)s(oin)m(ts)h(in)f(one)g(space)h(are)g(not)g
-(represen)m(ted)f(in)g(the)0 1040 y(other.)43 b(Sky)31
-b(pro)5 b(jections)32 b(often)f(sho)m(w)g(this)g(b)s(eha)m(viour,)g
-(since)h(it)g(is)f(quite)g(common)h(to)g(pro)5 b(ject)31
-b(only)h(half)0 1153 y(of)38 b(the)f(celestial)j(sphere)d(on)g(to)h(t)m
-(w)m(o)h(dimensions,)f(omitting)h(p)s(oin)m(ts)e(on)g(the)h(opp)s
-(osite)g(side)f(of)g(the)h(sky)-8 b(.)0 1266 y(There)30
-b(are)h(man)m(y)f(other)h(examples.)0 1439 y(T)-8 b(o)36
-b(indicate)h(when)e(co)s(ordinates)h(cannot)h(b)s(e)e(transformed,)i
-(for)e(whatev)m(er)i(reason,)g(AST)f(substitutes)f(a)0
-1552 y(sp)s(ecial)42 b(output)f(co)s(ordinate)i(v)-5
-b(alue)42 b(giv)m(en)g(b)m(y)g(the)f(parameter)h(constan)m(t)h(AST)p
-Fy(__)p FG(BAD)e(\(as)h(de\014ned)f(in)0 1665 y(the)e(AST)p
-Fy(_)p FG(P)-8 b(AR)38 b(include)h(\014le\).)66 b(Before)40
-b(making)f(use)g(of)g(co)s(ordinates)g(generated)h(b)m(y)f(an)m(y)g(of)
-g(the)g(AST)0 1778 y(transformation)31 b(routines,)f(therefore,)h(y)m
-(ou)g(ma)m(y)g(need)f(to)h(c)m(hec)m(k)h(for)e(the)h(presence)f(of)h
-(this)f(v)-5 b(alue.)0 1952 y(Because)39 b(co)s(ordinates)f(with)f(the)
-g(v)-5 b(alue)38 b(AST)p Fy(__)p FG(BAD)f(can)h(b)s(e)f(generated)h(in)
-f(this)h(w)m(a)m(y)-8 b(,)40 b(all)f(other)e(AST)0 2065
-y(routines)f(are)h(also)g(capable)g(of)f(recognising)h(this)f(v)-5
-b(alue)37 b(and)e(handling)h(it)h(appropriately)-8 b(.)58
-b(The)36 b(co)s(ordi-)0 2178 y(nate)d(transformation)g(routines)g(do)f
-(this)h(b)m(y)g(propagating)g(an)m(y)g(missing)g(input)f(co)s(ordinate)
-h(information)0 2290 y(through)26 b(to)i(their)f(output.)40
-b(This)26 b(means)h(that)h(if)f(y)m(ou)g(supply)f(co)s(ordinates)i
-(with)f(the)g(v)-5 b(alue)27 b(AST)p Fy(__)p FG(BAD,)0
-2403 y(the)d(returned)f(co)s(ordinates)i(are)f(also)h(lik)m(ely)h(to)f
-(con)m(tain)g(this)f(v)-5 b(alue.)39 b(Here,)26 b(for)e(example,)i(is)e
-(what)g(happ)s(ens)0 2516 y(if)30 b(y)m(ou)h(use)f(a)h(Zo)s(omMap)f
-(\(with)h(Zo)s(om)f(factor)h(5\))g(to)g(transform)f(suc)m(h)g(a)h(set)g
-(of)f(co)s(ordinates:)227 2798 y Ft(\(0,)43 b(0\))f(-->)h(\(0,)f(0\))
-227 2897 y(\(<bad>,)f(2\))i(-->)f(\(<bad>,)f(10\))227
-2997 y(\(2,)i(4\))f(-->)h(\(10,)f(20\))227 3097 y(\(3,)h(6\))f(-->)h
-(\(15,)f(30\))227 3196 y(\(4,)h(<bad>\))e(-->)h(\(20,)g(<bad>\))227
-3296 y(\(5,)h(10\))f(-->)g(\(25,)g(50\))227 3395 y(\(<bad>,)f(<bad>\))g
-(-->)h(\(<bad>,)f(<bad>\))227 3495 y(\(7,)i(14\))f(-->)g(\(35,)g(70\))
-227 3595 y(\(8,)h(16\))f(-->)g(\(40,)g(80\))227 3694
-y(\(9,)h(18\))f(-->)g(\(45,)g(90\))0 3989 y FG(The)37
-b(AST)p Fy(__)p FG(BAD)h(v)-5 b(alue)39 b(is)f(represen)m(ted)g(b)m(y)g
-(the)g(string)g(\\)p Fp(<)p FG(bad)p Fp(>)p FG(".)63
-b(This)37 b(is)h(a)h(case)g(of)f(\\garbage)i(in,)0 4102
-y(garbage)32 b(out")f(but)e(at)i(least)h(it's)f(consisten)m(t)h
-(garbage)f(that)g(y)m(ou)g(can)g(recognise!)0 4275 y(Note)22
-b(ho)m(w)f(the)g(presence)f(of)h(the)g(AST)p Fy(__)p
-FG(BAD)f(v)-5 b(alue)22 b(in)e(one)h(input)f(dimension)g(do)s(es)g(not)
-h(necessarily)h(result)0 4388 y(in)32 b(the)h(loss)f(of)h(information)g
-(for)f(all)h(output)f(dimensions.)46 b(Sometimes,)34
-b(suc)m(h)e(loss)h(will)f(b)s(e)g(una)m(v)m(oidable,)0
-4501 y(but)21 b(in)h(general)g(an)g(attempt)h(is)f(made)g(to)g(preserv)
-m(e)g(information)g(as)g(far)g(as)g(p)s(ossible.)37 b(The)22
-b(exact)h(b)s(eha)m(viour)0 4614 y(will)31 b(dep)s(end)d(on)j(the)f
-(Mapping)h(in)m(v)m(olv)m(ed.)0 4944 y Fw(5.9)112 b(Example|the)39
-b(UnitMap)0 5181 y FG(The)31 b(UnitMap)i(is)f(the)g(simplest)g(of)g
-(Mappings.)45 b(It)32 b(is)g(a)g(n)m(ull)g(Mapping.)46
-b(Its)31 b(purp)s(ose)g(is)h(simply)f(to)i(cop)m(y)0
-5294 y(co)s(ordinate)e(v)-5 b(alues,)31 b(unaltered,)g(from)f(its)g
-(input)g(to)h(its)g(output)f(and)f Fx(vic)-5 b(e)33 b(versa.)0
-5467 y FG(A)j(UnitMap)g(has)g(no)f(additional)i(attributes)g(b)s(ey)m
-(ond)e(those)h(of)g(a)g(basic)g(Mapping.)57 b(Its)36
-b(Nin)g(and)f(Nout)0 5580 y(attributes)e(are)g(alw)m(a)m(ys)h(equal)g
-(and)e(are)h(sp)s(eci\014ed)f(b)m(y)g(the)h(\014rst)f(argumen)m(t)h
-(supplied)e(to)j(its)f(constructor.)0 5693 y(F)-8 b(or)31
-b(example:)p eop end
-%%Page: 49 59
-TeXDict begin 49 58 bop 0 52 a Fz(5.10)93 b(Example|the)30
-b(P)m(ermMap)2452 b FG(49)262 351 y Ft(INTEGER)40 b(UNITMAP)262
-551 y(...)262 750 y(UNITMAP)g(=)j(AST_UNITMAP\()c(2,)k(')g(',)g(STATUS)
-e(\))0 1006 y FG(will)28 b(create)h(a)f(UnitMap)f(that)i(copies)f
-(2-dimensional)g(co)s(ordinates.)41 b(In)m(v)m(erting)28
-b(a)g(UnitMap)f(has)h(no)f(e\013ect)0 1119 y(b)s(ey)m(ond)j(c)m
-(hanging)h(the)g(v)-5 b(alue)30 b(of)h(its)g(In)m(v)m(ert)g(attribute.)
-0 1280 y(The)i(main)g(use)g(of)h(a)f(UnitMap)h(is)g(to)g(allo)m(w)h(a)e
-(Mapping)h(to)g(b)s(e)f(supplied)f(when)g(one)i(is)f(required)g(\(as)h
-(an)0 1393 y(argumen)m(t)d(to)g(a)g(routine,)f(for)g(example\))i(but)e
-(y)m(ou)g(wish)g(it)h(to)g(lea)m(v)m(e)i(co)s(ordinate)e(v)-5
-b(alues)31 b(unc)m(hanged.)0 1684 y Fw(5.10)112 b(Example|the)39
-b(P)m(ermMap)0 1904 y FG(The)28 b(P)m(ermMap)g(is)h(a)f(rather)g(more)h
-(complicated)h(Mapping)e(than)g(w)m(e)h(ha)m(v)m(e)g(met)g(previously)
--8 b(.)40 b(Its)28 b(purp)s(ose)0 2016 y(is)34 b(to)g(c)m(hange)h(the)f
-(order,)h(or)f(n)m(um)m(b)s(er,)f(of)h(co)s(ordinates.)52
-b(It)34 b(is)g(also)h(able)f(to)h(substitute)e(\014xed)h(v)-5
-b(alues)34 b(for)0 2129 y(co)s(ordinates.)0 2291 y(T)-8
-b(o)41 b(illustrate)g(its)g(action,)j(supp)s(ose)39 b(our)g(input)h(co)
-s(ordinates)h(are)f(denoted)h(b)m(y)f(\()p Fp(x)2992
-2305 y Fv(1)3031 2291 y Fp(;)15 b(x)3123 2305 y Fv(2)3163
-2291 y Fp(;)g(x)3255 2305 y Fv(3)3295 2291 y Fp(;)g(x)3387
-2305 y Fv(4)3427 2291 y FG(\))40 b(in)g(a)h(4-)0 2403
-y(dimensional)27 b(space)h(and)e(supp)s(ose)g(our)g(output)h(co)s
-(ordinates)h(are)f(to)h(b)s(e)e(\()p Fp(x)2645 2417 y
-Fv(4)2685 2403 y Fp(;)15 b(x)2777 2417 y Fv(1)2817 2403
-y Fp(;)g(x)2909 2417 y Fv(2)2948 2403 y Fp(;)g(x)3040
-2417 y Fv(3)3080 2403 y FG(\).)40 b(Our)26 b(P)m(ermMap,)0
-2516 y(therefore,)31 b(should)e(rotate)j(the)f(co)s(ordinate)g(v)-5
-b(alues)31 b(b)m(y)f(one)h(p)s(osition.)0 2678 y(T)-8
-b(o)23 b(create)g(suc)m(h)f(a)g(P)m(ermMap,)j(w)m(e)d(\014rst)f(set)i
-(up)e(t)m(w)m(o)i(in)m(teger)h(arra)m(ys.)38 b(One)22
-b(of)g(these,)i(OUTPERM,)e(con)m(trols)0 2790 y(the)f(selection)i(of)e
-(input)f(co)s(ordinates)i(for)e(use)h(in)g(the)g(output)f(and)h(the)g
-(other,)i(INPERM,)e(con)m(trols)i(selection)0 2903 y(of)31
-b(output)f(co)s(ordinates)h(for)f(use)g(in)g(the)g(input:)262
-3146 y Ft(INTEGER)40 b(OUTPERM\()g(4)k(\),)e(INPERM\()f(4)i(\))262
-3246 y(DATA)e(OUTPERM)g(/)i(4,)g(1,)g(2,)g(3)g(/)262
-3345 y(DATA)e(INPERM)h(/)h(2,)f(3,)h(4,)g(1)g(/)0 3601
-y FG(Note)32 b(that)e(the)h(n)m(um)m(b)s(ers)d(w)m(e)j(store)g(in)f
-(these)h(arra)m(ys)f(are)h(the)f(indices)g(of)h(the)f(co)s(ordinates)h
-(that)g(w)m(e)g(w)m(an)m(t)0 3714 y(to)36 b(select.)57
-b(W)-8 b(e)36 b(ha)m(v)m(e)h(c)m(hosen)e(these)h(so)f(that)h(the)g
-(forw)m(ard)e(and)h(in)m(v)m(erse)h(transformations)f(will)h(p)s
-(erform)0 3827 y(complemen)m(tary)c(p)s(erm)m(utations)e(on)g(the)h(co)
-s(ordinates.)0 3988 y(The)f(P)m(ermMap)h(is)f(then)g(created)h(b)m(y)g
-(passing)f(these)h(arra)m(ys)g(to)g(its)f(constructor,)h(as)g(follo)m
-(ws:)262 4231 y Ft(INTEGER)40 b(PERMMAP)262 4331 y(DOUBLE)h(PRECISION)e
-(DUMMY\()j(1)h(\))262 4530 y(...)262 4729 y(PERMMAP)d(=)j
-(AST_PERMMAP\()c(4,)k(INPERM,)d(4,)j(OUTPERM,)d(DUMMY,)i(')h(',)g
-(STATUS)e(\))0 4985 y FG(\(the)23 b(\014fth)f(argumen)m(t)h(is)f(not)h
-(b)s(eing)f(used,)i(so)f(a)g(dumm)m(y)e(arra)m(y)i(has)g(b)s(een)f
-(supplied\).)37 b(Note)24 b(that)f(w)m(e)g(sp)s(ecify)0
-5098 y(the)30 b(n)m(um)m(b)s(er)f(of)h(input)g(and)f(output)h(co)s
-(ordinates)h(separately)-8 b(,)32 b(but)d(set)i(b)s(oth)e(to)i(4)g(in)f
-(this)g(example.)41 b(The)0 5211 y(resulting)30 b(P)m(ermMap)h(w)m
-(ould)f(ha)m(v)m(e)i(the)f(follo)m(wing)g(e\013ect)h(when)e(used)f(to)i
-(transform)f(co)s(ordinates:)227 5467 y Fy(Forward:)370
-5580 y(\(1,)47 b(2,)h(3,)f(4\))g(-->)g(\(4,)g(1,)g(2,)g(3\))370
-5693 y(\(2,)g(4,)h(6,)f(8\))g(-->)g(\(8,)g(2,)g(4,)g(6\))p
-eop end
-%%Page: 50 60
-TeXDict begin 50 59 bop 0 52 a FG(50)1020 b Fz(5)92 b(INTER-RELA)-8
-b(TING)30 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(MAPPINGS\))370
-351 y Fy(\(3,)47 b(6,)h(9,)f(12\))g(-->)g(\(12,)f(3,)h(6,)h(9\))370
-464 y(\(4,)f(8,)h(12,)e(16\))h(-->)g(\(16,)g(4,)g(8,)g(12\))370
-577 y(\(5,)g(10,)g(15,)g(20\))g(-->)g(\(20,)g(5,)g(10,)g(15\))227
-803 y(Inverse:)370 916 y(\(4,)g(1,)h(2,)f(3\))g(-->)g(\(1,)g(2,)g(3,)g
-(4\))370 1029 y(\(8,)g(2,)h(4,)f(6\))g(-->)g(\(2,)g(4,)g(6,)g(8\))370
-1142 y(\(12,)g(3,)g(6,)g(9\))h(-->)f(\(3,)f(6,)i(9,)f(12\))370
-1255 y(\(16,)g(4,)g(8,)g(12\))g(-->)g(\(4,)g(8,)g(12,)g(16\))370
-1367 y(\(20,)g(5,)g(10,)g(15\))g(-->)g(\(5,)g(10,)g(15,)g(20\))0
-1598 y FG(If)27 b(the)g(n)m(um)m(b)s(er)e(of)j(input)e(and)g(output)h
-(co)s(ordinates)g(are)h(unequal)e(so,)j(also,)f(will)g(b)s(e)e(the)h
-(size)h(of)f(the)h(OUT-)0 1711 y(PERM)36 b(and)f(INPERM)g(arra)m(ys.)57
-b(This)35 b(means,)j(ho)m(w)m(ev)m(er,)g(that)e(w)m(e)h(cannot)f
-(\014ll)g(them)f(with)h(co)s(ordinate)0 1824 y(indices)27
-b(so)h(that)f(they)g(p)s(erform)f(complemen)m(tary)i(p)s(erm)m
-(utations,)g(b)s(ecause)f(one)h(transformation)f(will)h(lose)0
-1937 y(information)i(\(discard)g(a)g(co)s(ordinate\))g(that)h(the)f
-(other)f(cannot)i(reco)m(v)m(er.)42 b(T)-8 b(o)30 b(giv)m(e)h(an)f
-(example,)h(consider)0 2050 y(the)g(follo)m(wing:)262
-2268 y Ft(INTEGER)40 b(OUTPERM\()g(3)k(\),)e(INPERM\()f(4)i(\))262
-2367 y(DOUBLE)e(PRECISION)e(CONST\()j(1)h(\))262 2467
-y(DATA)e(OUTPERM)g(/)i(4,)g(3,)g(2)g(/)262 2567 y(DATA)e(INPERM)h(/)h
-(-1,)f(3,)h(2,)g(1)g(/)262 2666 y(DATA)e(CONST)h(/)h(99.004D0)d(/)0
-2897 y FG(In)h(this)h(case,)k(the)d(forw)m(ard)e(transformation)h(will)
-h(c)m(hange)g(\()p Fp(x)2274 2911 y Fv(1)2313 2897 y
-Fp(;)15 b(x)2405 2911 y Fv(2)2445 2897 y Fp(;)g(x)2537
-2911 y Fv(3)2577 2897 y Fp(;)g(x)2669 2911 y Fv(4)2709
-2897 y FG(\))42 b(in)m(to)h(\()p Fp(x)3069 2911 y Fv(4)3109
-2897 y Fp(;)15 b(x)3201 2911 y Fv(3)3241 2897 y Fp(;)g(x)3333
-2911 y Fv(2)3372 2897 y FG(\))43 b(and)e(will)0 3010
-y(discard)31 b Fp(x)367 3024 y Fv(1)406 3010 y FG(.)43
-b(The)30 b(in)m(v)m(erse)i(transformation)g(restores)f(the)h(original)g
-(co)s(ordinate)g(order,)f(but)f(has)h(no)g(v)-5 b(alue)0
-3123 y(to)31 b(assign)g(to)g(the)f(\014rst)g(co)s(ordinate.)42
-b(In)29 b(this)i(case,)g(the)g(n)m(um)m(b)s(er)e(en)m(tered)i(in)f(the)
-g(INPERM)h(arra)m(y)g(is)f Fu(\000)p FG(1.)0 3278 y(This)36
-b(negativ)m(e)i(v)-5 b(alue)37 b(indicates)h(that)f(the)g(co)s
-(ordinate)g(v)-5 b(alue)37 b(should)e(b)s(e)h(obtained)h(b)m(y)f
-(addressing)g(the)0 3391 y(CONST)j(arra)m(y)h(using)f(an)h(index)g(of)g
-(1)g(\(the)h(absolute)f(v)-5 b(alue\).)71 b(This)39 b(arra)m(y)-8
-b(,)43 b(ignored)d(in)g(the)g(previous)0 3504 y(example,)31
-b(ma)m(y)g(then)f(b)s(e)g(used)g(to)h(supply)e(a)h(v)-5
-b(alue)31 b(for)f(the)h(missing)f(co)s(ordinate.)0 3659
-y(The)g(constructor)h(function:)262 3876 y Ft(PERMMAP)40
-b(=)j(AST_PERMMAP\()c(4,)k(INPERM,)d(3,)j(OUTPERM,)d(CONST,)i(')h(',)g
-(STATUS)e(\))0 4107 y FG(will)31 b(then)f(create)i(a)e(P)m(ermMap)h
-(with)f(the)h(follo)m(wing)h(e\013ect)g(when)d(used)h(to)h(transform)e
-(co)s(ordinates:)227 4338 y Fy(Forward:)370 4451 y(\(1,)47
-b(2,)h(3,)f(4\))g(-->)g(\(4,)g(3,)g(2\))370 4564 y(\(2,)g(4,)h(6,)f
-(8\))g(-->)g(\(8,)g(6,)g(4\))370 4677 y(\(3,)g(6,)h(9,)f(12\))g(-->)g
-(\(12,)f(9,)h(6\))370 4790 y(\(4,)g(8,)h(12,)e(16\))h(-->)g(\(16,)g
-(12,)g(8\))370 4903 y(\(5,)g(10,)g(15,)g(20\))g(-->)g(\(20,)g(15,)g
-(10\))227 5128 y(Inverse:)370 5241 y(\(4,)g(3,)h(2\))f(-->)g(\(99.004,)
-e(2,)i(3,)h(4\))370 5354 y(\(8,)f(6,)h(4\))f(-->)g(\(99.004,)e(4,)i(6,)
-h(8\))370 5467 y(\(12,)f(9,)g(6\))g(-->)g(\(99.004,)f(6,)h(9,)g(12\))
-370 5580 y(\(16,)g(12,)g(8\))g(-->)g(\(99.004,)f(8,)h(12,)g(16\))370
-5693 y(\(20,)g(15,)g(10\))g(-->)g(\(99.004,)e(10,)i(15,)g(20\))p
-eop end
-%%Page: 51 61
-TeXDict begin 51 60 bop 0 52 a Fz(5.10)93 b(Example|the)30
-b(P)m(ermMap)2452 b FG(51)0 351 y(The)26 b(CONST)f(arra)m(y)i(ma)m(y)g
-(con)m(tain)g(more)g(than)f(one)g(v)-5 b(alue)27 b(if)g(necessary)f
-(and)g(ma)m(y)h(b)s(e)f(addressed)f(b)m(y)h(b)s(oth)0
-464 y(the)32 b(INPERM)h(and)e(OUTPERM)h(arra)m(ys)h(using)e(co)s
-(ordinate)i(indices)g Fu(\000)p FG(1,)g Fu(\000)p FG(2,)g
-Fu(\000)p FG(3,)f Fx(etc.)g FG(to)h(refer)f(to)h(the)0
-577 y(\014rst,)d(second,)h(third,)e Fx(etc.)h FG(elemen)m(ts.)0
-740 y(If)37 b(there)h(is)g(no)g(suitable)g(replacemen)m(t)h(v)-5
-b(alue)39 b(that)f(can)g(b)s(e)f(supplied)g Fx(via)h
-FG(the)g(CONST)e(arra)m(y)-8 b(,)41 b(a)d(v)-5 b(alue)0
-853 y(of)38 b(zero)i(ma)m(y)f(b)s(e)e(en)m(tered)i(in)m(to)g(the)g
-(OUTPERM)f(and/or)g(INPERM)g(arra)m(ys.)65 b(This)38
-b(causes)g(the)h(v)-5 b(alue)0 966 y(AST)p Fy(__)p FG(BAD)36
-b(to)h(b)s(e)e(used)h(for)g(the)g(a\013ected)i(co)s(ordinate)f(\(as)g
-(de\014ned)e(in)h(the)g(AST)p Fy(_)p FG(P)-8 b(AR)36
-b(include)g(\014le\),)0 1079 y(th)m(us)30 b(indicating)h(a)g(missing)f
-(co)s(ordinate)h(v)-5 b(alue)31 b(\()p Fu(x)p FG(5.8\).)0
-1241 y(The)k(principle)g(use)f(for)h(a)h(P)m(ermMap)g(lies)g(in)e(matc)
-m(hing)j(a)e(co)s(ordinate)h(system)g(to)g(a)f(data)h(arra)m(y)g(where)
-0 1354 y(there)25 b(is)f(a)h(c)m(hoice)h(of)f(storage)h(order)e(for)g
-(the)h(data.)39 b(P)m(ermMaps)25 b(are)g(also)g(useful)f(for)g
-(discarding)g(un)m(w)m(an)m(ted)0 1467 y(co)s(ordinates)34
-b(so)f(as)g(to)h(reduce)f(the)g(n)m(um)m(b)s(er)f(of)h(dimensions,)h
-(suc)m(h)f(as)g(when)f(selecting)j(a)e(\\slice")i(from)e(a)0
-1580 y(m)m(ulti-dimensional)e(arra)m(y)-8 b(.)p eop end
-%%Page: 52 62
-TeXDict begin 52 61 bop 0 52 a FG(52)1020 b Fz(5)92 b(INTER-RELA)-8
-b(TING)30 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(MAPPINGS\))p
-eop end
-%%Page: 53 63
-TeXDict begin 53 62 bop 3689 52 a FG(53)0 351 y FA(6)135
-b(Comp)t(ound)44 b(Mappings)h(\(CmpMaps\))0 601 y FG(W)-8
-b(e)45 b(no)m(w)g(turn)e(to)i(a)g(rather)f(sp)s(ecial)h(form)e(of)i
-(Mapping,)j(the)c(CmpMap.)82 b(The)43 b(Mappings)i(w)m(e)f(ha)m(v)m(e)0
-714 y(considered)h(so)g(far)f(ha)m(v)m(e)i(b)s(een)e(atomic,)50
-b(in)45 b(the)f(sense)h(that)g(they)g(p)s(erform)f(pre-de\014ned)f
-(elemen)m(tary)0 827 y(transformations.)k(A)32 b(CmpMap,)h(ho)m(w)m(ev)
-m(er,)h(is)e(a)h(comp)s(ound)e(Mapping.)47 b(In)31 b(essence,)j(it)f
-(is)g(a)f(framew)m(ork)0 940 y(for)h(con)m(taining)h(other)f(Mappings)g
-(and)f(its)i(purp)s(ose)d(is)i(to)g(allo)m(w)i(those)e(Mappings)g(to)g
-(w)m(ork)g(together)i(in)0 1053 y(v)-5 b(arious)34 b(com)m(binations)h
-(while)g(app)s(earing)e(as)i(a)f(single)h(Ob)5 b(ject.)52
-b(A)35 b(CmpMap's)e(b)s(eha)m(viour)h(is)g(therefore)0
-1166 y(not)d(pre-de\014ned,)e(but)g(is)i(determined)f(b)m(y)g(the)h
-(other)f(Mappings)h(it)f(con)m(tains.)0 1455 y Fw(6.1)112
-b(Com)m(bining)39 b(Mappings)g(in)f(Series)0 1674 y FG(Consider)f(a)h
-(simple)g(example)g(based)g(on)f(t)m(w)m(o)i(2-dimensional)g(co)s
-(ordinate)g(systems.)62 b(Supp)s(ose)36 b(that)j(to)0
-1786 y(con)m(v)m(ert)28 b(from)e(one)g(to)h(the)f(other)h(w)m(e)g(m)m
-(ust)f(sw)m(ap)g(the)g(co)s(ordinate)h(order)f(and)g(m)m(ultiply)g(b)s
-(oth)g(co)s(ordinates)0 1899 y(b)m(y)i(5,)i(so)e(that)i(the)e(co)s
-(ordinates)h(\()p Fp(x)1251 1913 y Fv(1)1291 1899 y Fp(;)15
-b(x)1383 1913 y Fv(2)1423 1899 y FG(\))29 b(transform)e(in)m(to)j(\(5)p
-Fp(x)2217 1913 y Fv(2)2257 1899 y Fp(;)15 b FG(5)p Fp(x)2394
-1913 y Fv(1)2434 1899 y FG(\).)41 b(This)27 b(can)i(b)s(e)f(done)g(in)g
-(t)m(w)m(o)i(stages:)111 2151 y(1.)46 b(Apply)30 b(a)h(P)m(ermMap)f(\()
-p Fu(x)p FG(5.10\))j(to)f(sw)m(ap)e(the)g(co)s(ordinate)i(order.)111
-2335 y(2.)46 b(Apply)30 b(a)h(Zo)s(omMap)f(\()p Fu(x)p
-FG(4.8\))j(to)e(m)m(ultiply)f(b)s(oth)g(co)s(ordinate)h(v)-5
-b(alues)31 b(b)m(y)f(the)h(constan)m(t)g(5.)0 2587 y(The)44
-b(P)m(ermMap)h(and)f(Zo)s(omMap)h(are)g(then)g(said)f(to)i(op)s(erate)f
-Fx(in)h(series,)i FG(b)s(ecause)d(they)g(are)g(applied)0
-2699 y(sequen)m(tially)32 b(\()p Fx(c.f.)f FG(Figure)g(2\).)43
-b(W)-8 b(e)32 b(can)f(create)h(a)g(CmpMap)d(that)j(applies)f(these)g
-(Mappings)g(in)f(series)h(as)0 2812 y(follo)m(ws:)262
-3050 y Ft(INCLUDE)40 b('AST_PAR')262 3150 y(INTEGER)g(CMPMAP,)h
-(PERMMAP,)f(STATUS,)h(ZOOMMAP)262 3250 y(INTEGER)f(INPERM\()h(2)i(\),)g
-(OUTPERM\()d(2)j(\),)g(CONST\()e(1)i(\))262 3349 y(DATA)e(INPERM)h(/)h
-(1,)f(2)i(/)262 3449 y(DATA)d(OUTPERM)g(/)i(1,)g(2)g(/)262
-3648 y(STATUS)e(=)i(0)262 3847 y(...)0 4047 y(*)87 b(Create)41
-b(the)h(individual)e(Mappings.)262 4146 y(PERMMAP)g(=)j(AST_PERMMAP\()c
-(2,)k(INPERM,)d(2,)j(OUTPERM,)d(CONST,)i(')h(',)g(STATUS)e(\))262
-4246 y(ZOOMMAP)f(=)j(AST_ZOOMMAP\()c(2,)k(5.0D0,)e(')i(',)g(STATUS)e
-(\))0 4445 y(*)87 b(Combine)40 b(them)i(in)h(series.)262
-4545 y(CMPMAP)e(=)i(AST_CMPMAP\()c(PERMMAP,)h(ZOOMMAP,)g(.TRUE.,)h(')i
-(',)g(STATUS)e(\))0 4744 y(*)87 b(Annul)41 b(the)i(individual)c
-(Mapping)i(pointers.)262 4844 y(CALL)g(AST_ANNUL\()f(PERMMAP,)g(STATUS)
-h(\))262 4943 y(CALL)g(AST_ANNUL\()f(ZOOMMAP,)g(STATUS)h(\))0
-5194 y FG(Here,)c(the)e(third)f(argumen)m(t)i(\(.TR)m(UE.\))g(of)g(the)
-f(constructor)g(function)g(AST)p Fy(_)p FG(CMPMAP)f(indicates)i(\\in)0
-5307 y(series".)0 5467 y(When)28 b(used)f(to)i(transform)e(co)s
-(ordinates)i(in)f(the)g(forw)m(ard)f(direction,)j(the)e(resulting)g
-(CmpMap)f(will)i(apply)0 5580 y(the)i(\014rst)f(comp)s(onen)m(t)i
-(Mapping)f(\(the)g(P)m(ermMap\))h(and)e(then)h(the)g(second)g(one)g
-(\(the)h(Zo)s(omMap\).)43 b(When)0 5693 y(transforming)29
-b(in)g(the)g(in)m(v)m(erse)h(direction,)h(it)e(will)h(apply)f(the)g
-(second)g(one)h(\(in)f(the)h(in)m(v)m(erse)g(direction\))g(and)p
-eop end
-%%Page: 54 64
-TeXDict begin 54 63 bop 0 52 a FG(54)1891 b Fz(6)91 b(COMPOUND)31
-b(MAPPINGS)f(\(CMPMAPS\))0 351 y FG(then)40 b(the)g(\014rst)f(one)h
-(\(also)h(in)f(the)g(in)m(v)m(erse)h(direction\).)70
-b(In)40 b(general,)j(although)e(not)f(in)f(this)h(particular)0
-464 y(example,)c(the)e(order)f(in)h(whic)m(h)g(the)g(t)m(w)m(o)h(comp)s
-(onen)m(t)f(Mappings)g(are)g(supplied)f(is)h(signi\014can)m(t.)52
-b(Clearly)-8 b(,)0 577 y(also,)37 b(the)d(Nout)h(attribute)h(\(n)m(um)m
-(b)s(er)d(of)i(output)f(co)s(ordinates\))i(for)e(the)h(\014rst)e
-(Mapping)i(m)m(ust)f(equal)h(the)0 690 y(Nin)30 b(attribute)h(\(n)m(um)
-m(b)s(er)f(of)g(input)g(co)s(ordinates\))h(for)f(the)h(second)f(one.)0
-975 y Fw(6.2)112 b(Com)m(bining)39 b(Mappings)g(in)f(P)m(arallel)0
-1190 y FG(Connecting)21 b(t)m(w)m(o)i(Mappings)e(in)f(series)h(\()p
-Fu(x)p FG(6.1\))j(is)d(not)g(the)g(only)g(w)m(a)m(y)h(of)f(com)m
-(bining)h(them.)37 b(The)21 b(alternativ)m(e,)0 1303
-y Fx(in)27 b(p)-5 b(ar)g(al)5 b(lel,)27 b FG(in)m(v)m(olv)m(es)f
-(applying)e(the)g(t)m(w)m(o)h(Mappings)f(at)h(once)g(but)e(on)h
-(di\013eren)m(t)g(subsets)f(of)h(the)h(co)s(ordinate)0
-1416 y(v)-5 b(alues.)0 1573 y(Consider,)40 b(for)f(example,)j(a)d(set)h
-(of)f(3-dimensional)h(co)s(ordinates)f(and)g(supp)s(ose)e(w)m(e)i(wish)
-g(to)g(transform)0 1686 y(them)d(b)m(y)h(sw)m(apping)f(the)g(\014rst)g
-(t)m(w)m(o)i(co)s(ordinate)f(v)-5 b(alues)36 b(and)g(m)m(ultiplying)h
-(the)g(\014nal)f(one)g(b)m(y)h(5,)h(so)f(that)0 1799
-y(\()p Fp(x)87 1813 y Fv(1)127 1799 y Fp(;)15 b(x)219
-1813 y Fv(2)259 1799 y Fp(;)g(x)351 1813 y Fv(3)390 1799
-y FG(\))29 b(transforms)e(in)m(to)i(\()p Fp(x)1174 1813
-y Fv(2)1214 1799 y Fp(;)15 b(x)1306 1813 y Fv(1)1346
-1799 y Fp(;)g FG(5)p Fp(x)1483 1813 y Fv(3)1523 1799
-y FG(\).)40 b(Again,)30 b(w)m(e)e(can)h(p)s(erform)e(eac)m(h)i(of)f
-(these)h(steps)f(individually)0 1912 y(using)34 b(exactly)j(the)d(same)
-i(P)m(ermMap)f(and)f(Zo)s(omMap)g(as)h(used)f(earlier)i(\()p
-Fu(x)p FG(6.1\).)55 b(In)34 b(this)h(case,)i(ho)m(w)m(ev)m(er,)0
-2025 y(these)31 b(individual)f(Mappings)g(are)h(applied)f(in)g
-(parallel)h(\()p Fx(c.f.)f FG(Figure)h(3\).)0 2181 y(Creating)g(a)g
-(CmpMap)e(for)h(this)h(purp)s(ose)d(is)j(also)g(v)m(ery)g(simple:)262
-2407 y Ft(CMPMAP)41 b(=)i(AST_CMPMAP\()c(PERMMAP,)h(ZOOMMAP,)g
-(.FALSE.,)h(')i(',)g(STATUS)e(\))0 2646 y FG(The)27 b(only)g
-(di\013erence)h(is)g(that)g(the)f(third)g(argumen)m(t)g(of)h(AST)p
-Fy(_)p FG(CMPMAP)f(is)g(no)m(w)g(.F)-10 b(ALSE.,)29 b(meaning)e(\\in)0
-2759 y(parallel".)0 2916 y(As)h(b)s(efore,)g(the)g(order)f(in)g(whic)m
-(h)h(the)g(t)m(w)m(o)h(comp)s(onen)m(t)f(Mappings)f(are)h(supplied)f
-(is)g(signi\014can)m(t.)41 b(The)27 b(\014rst)0 3029
-y(one)j(acts)g(on)g(the)f(lo)m(w)m(er-n)m(um)m(b)s(ered)h(input)f(co)s
-(ordinate)h(v)-5 b(alues)30 b(\(ho)m(w)m(ev)m(er)h(man)m(y)e(it)h
-(needs\))g(and)f(pro)s(duces)0 3141 y(the)d(lo)m(w)m(er-n)m(um)m(b)s
-(ered)g(output)f(co)s(ordinates,)i(while)f(the)g(second)f(Mapping)h
-(acts)h(on)e(the)h(higher-n)m(um)m(b)s(ered)0 3254 y(input)f(co)s
-(ordinates)i(\(ho)m(w)m(ev)m(er)h(man)m(y)e(remain\))h(and)f(generates)
-h(the)g(remaining)f(higher-n)m(um)m(b)s(ered)f(output)0
-3367 y(co)s(ordinates.)48 b(When)32 b(the)h(CmpMap)e(transforms)h(co)s
-(ordinates)h(in)f(the)h(in)m(v)m(erse)g(direction,)h(b)s(oth)e(comp)s
-(o-)0 3480 y(nen)m(t)f(Mappings)f(are)g(applied)h(to)g(the)f(same)h(co)
-s(ordinates,)g(but)f(in)g(the)h(in)m(v)m(erse)g(direction.)0
-3637 y(Note)j(that)f(the)g(Nin)f(and)g(Nout)h(attributes)h(of)e(the)h
-(comp)s(onen)m(t)g(Mappings)f(\()p Fx(i.e.)h FG(the)g(n)m(um)m(b)s(ers)
-e(of)h(input)0 3750 y(and)e(output)g(co)s(ordinates\))h(will)g(sum)e
-(to)i(giv)m(e)h(the)f(Nin)f(and)g(Nout)h(attributes)g(of)f(the)h(o)m(v)
-m(erall)h(CmpMap.)0 4035 y Fw(6.3)112 b(The)38 b(Comp)s(onen)m(t)g
-(Mappings)0 4250 y FG(A)24 b(CmpMap)f(do)s(es)g(not)h(store)g(copies)h
-(of)f(its)g(comp)s(onen)m(t)g(Mappings,)h(but)e(simply)g(holds)g(p)s
-(oin)m(ters)h(to)g(them.)0 4363 y(In)h(th)g(example)h(ab)s(o)m(v)m(e)h
-(\()p Fu(x)p FG(6.1\),)i(w)m(e)c(w)m(ere)h(free)g(to)g(ann)m(ul)f(the)h
-(individual)e(Mapping)i(p)s(oin)m(ters)f(after)h(creating)0
-4476 y(the)g(CmpMap)e(b)s(ecause)i(the)f(p)s(oin)m(ters)h(held)f(in)m
-(ternally)h(b)m(y)f(the)h(CmpMap)f(increased)g(the)h(reference)g(coun)m
-(t)0 4589 y(\(RefCoun)m(t)46 b(attribute\))g(of)g(eac)m(h)h(comp)s
-(onen)m(t)e(Mapping)h(b)m(y)f(one.)87 b(The)45 b(individual)f(comp)s
-(onen)m(ts)i(are)0 4702 y(therefore)40 b(not)f(deleted)h(b)m(y)f(AST)p
-Fy(_)p FG(ANNUL,)g(but)g(retained)g(un)m(til)h(the)f(CmpMap)g(itself)h
-(is)f(deleted)h(and)0 4815 y(ann)m(uls)e(the)i(p)s(oin)m(ters)e(it)i
-(holds.)66 b(Consisten)m(t)39 b(use)g(of)g(AST)p Fy(_)p
-FG(ANNUL)g(\()p Fu(x)p FG(4.9\))i(and/or)e(p)s(oin)m(ter)g(con)m(texts)
-0 4928 y(\()p Fu(x)p FG(4.10\))33 b(will)e(therefore)g(ensure)e(that)i
-(all)g(Ob)5 b(jects)31 b(are)g(deleted)g(at)g(the)f(appropriate)h
-(time.)0 5085 y(Note)e(that)f(access)h(to)f(a)g(CmpMap's)e(comp)s(onen)
-m(t)i(Mappings)f(is)h(not)f(generally)i(a)m(v)-5 b(ailable)30
-b(unless)d(p)s(oin)m(ters)0 5197 y(to)22 b(them)f(are)h(retained)g
-(when)e(the)h(CmpMap)g(is)g(created.)39 b(If)21 b(suc)m(h)g(p)s(oin)m
-(ters)g(are)g(retained,)j(then)d(subsequen)m(t)0 5310
-y(mo)s(di\014cations)35 b(to)g(the)f(individual)g(comp)s(onen)m(ts)h
-(can)g(b)s(e)e(used)h(to)h(indirectly)g(mo)s(dify)f(the)g(b)s(eha)m
-(viour)g(of)0 5423 y(the)d(o)m(v)m(erall)h(CmpMap.)0
-5580 y(There)22 b(is)h(an)g(imp)s(ortan)m(t)g(exception)h(to)g(this,)g
-(ho)m(w)m(ev)m(er,)i(b)s(ecause)d(a)g(CmpMap)f(retains)h(a)h(cop)m(y)f
-(of)g(the)g(initial)0 5693 y(In)m(v)m(ert)33 b(\015ag)f(settings)h(of)g
-(eac)m(h)g(of)f(its)h(comp)s(onen)m(ts)f(and)g(uses)g(these)g(in)g
-(order)g(to)h(ignore)g(an)m(y)f(subsequen)m(t)p eop end
-%%Page: 55 65
-TeXDict begin 55 64 bop 0 52 a Fz(6.4)92 b(Creating)31
-b(More)g(Complex)f(Mappings)2105 b FG(55)0 351 y(external)33
-b(c)m(hanges.)47 b(This)31 b(means)h(that)h(y)m(ou)f(ma)m(y)h(in)m(v)m
-(ert)g(either)f(comp)s(onen)m(t)h(Mapping)f(b)s(efore)f(inserting)0
-464 y(it)d(in)m(to)g(a)f(CmpMap)f(and)h(need)g(not)g(w)m(orry)g(if)g(y)
-m(ou)g(un-in)m(v)m(ert)h(it)f(again)h(later.)41 b(The)27
-b(CmpMap's)f(b)s(eha)m(viour)0 577 y(will)31 b(not)f(b)s(e)g
-(a\013ected)i(b)m(y)e(the)h(later)g(action.)0 866 y Fw(6.4)112
-b(Creating)38 b(More)g(Complex)g(Mappings)0 1084 y FG(Because)33
-b(a)f(CmpMap)f(is)h(itself)h(a)f(Mapping,)g(an)m(y)h(existing)f(CmpMap)
-f(can)i(substitute)e(\()p Fu(x)p FG(4.3\))j(as)e(a)h(com-)0
-1197 y(p)s(onen)m(t)d(Mapping)f(when)g(constructing)i(a)f(new)g(CmpMap)
-f(using)g(AST)p Fy(_)p FG(CMPMAP)-8 b(.)30 b(This)f(has)h(the)g
-(e\013ect)0 1310 y(of)42 b(nesting)f(one)h(CmpMap)f(inside)g(another)g
-(and)g(op)s(ens)g(up)f(man)m(y)i(new)f(p)s(ossibilities.)74
-b(F)-8 b(or)43 b(example,)0 1423 y(com)m(bining)31 b(three)f(Mappings)h
-(in)f(series)g(can)h(b)s(e)f(accomplished)h(as)f(follo)m(ws:)262
-1659 y Ft(INTEGER)40 b(MAP1,)i(MAP2,)f(MAP3)262 1858
-y(...)262 2057 y(CMPMAP)g(=)i(AST_CMPMAP\()c(MAP1,)i(AST_CMPMAP\()e
-(MAP2,)j(MAP3,)f(.TRUE.,)g(')i(',)g(STATUS)e(\),)218
-2157 y(:)915 b(.TRUE.,)41 b(')i(',)f(STATUS)g(\))0 2406
-y FG(The)26 b(w)m(a)m(y)h(in)e(whic)m(h)h(the)g(individual)g(comp)s
-(onen)m(t)g(Mappings)g(are)h(group)s(ed)e(within)g(the)h(nested)g
-(CmpMaps)0 2519 y(is)k(not)h(usually)f(imp)s(ortan)m(t.)0
-2679 y(A)d(similar)h(tec)m(hnique)g(can)g(b)s(e)f(used)f(to)i(com)m
-(bine)g(m)m(ultiple)g(Mappings)g(in)f(parallel)h(and,)g(of)f(course,)i
-(mixed)0 2791 y(series)k(and)g(parallel)h(com)m(binations)g(are)g(also)
-g(p)s(ossible)f(\(Figure)g(4\).)50 b(There)33 b(is)g(no)g(built-in)g
-(limit)h(to)f(ho)m(w)0 2904 y(man)m(y)23 b(CmpMaps)f(ma)m(y)i(b)s(e)e
-(nested)h(in)g(this)g(w)m(a)m(y)-8 b(,)26 b(so)d(this)g(mec)m(hanism)h
-(pro)m(vides)f(an)g(inde\014nitely)g(extensible)0 3017
-y(metho)s(d)30 b(of)g(building)g(complex)h(Mappings)f(out)h(of)f(the)h
-(elemen)m(tal)h(building)e(blo)s(c)m(ks)h(pro)m(vided)f(b)m(y)g(AST.)0
-3177 y(In)i(practice,)i(y)m(ou)f(migh)m(t)h(not)e(need)h(to)g
-(construct)g(suc)m(h)f(complex)h(CmpMaps)f(y)m(ourself)h(v)m(ery)g
-(frequen)m(tly)-8 b(,)0 3290 y(but)27 b(they)h(will)g(often)g(b)s(e)e
-(returned)h(b)m(y)g(AST)g(routines.)40 b(Nested)28 b(CmpMaps)f
-(underlie)f(the)i(library's)g(en)m(tire)0 3403 y(abilit)m(y)k(to)f
-(represen)m(t)f(a)h(wide)f(range)h(of)g(di\013eren)m(t)f(co)s(ordinate)
-i(transformations.)0 3691 y Fw(6.5)112 b(Example|T)-9
-b(ransforming)40 b(Bet)m(w)m(een)d(Tw)m(o)g(Calibrated)i(Images)0
-3909 y FG(Consider,)27 b(as)f(a)h(practical)i(example)e(of)f(CmpMaps,)h
-(t)m(w)m(o)h(images)f(of)g(the)g(sky)-8 b(.)39 b(Supp)s(ose)25
-b(that)i(for)g(eac)m(h)g(im-)0 4022 y(age)h(w)m(e)g(ha)m(v)m(e)h(a)e
-(Mapping)g(whic)m(h)g(con)m(v)m(erts)i(from)e(pixel)g(co)s(ordinates)h
-(to)g(a)f(standard)g(celestial)j(co)s(ordinate)0 4135
-y(system,)38 b(sa)m(y)e(FK5)h(\(J2000.0\).)60 b(If)36
-b(w)m(e)g(wish)f(to)i(in)m(ter-compare)g(these)g(images,)h(w)m(e)f(can)
-f(do)g(so)g(b)m(y)g(using)0 4248 y(this)c(celestial)j(co)s(ordinate)f
-(system)f(to)g(align)g(them.)47 b(That)33 b(is,)g(w)m(e)g(\014rst)f
-(con)m(v)m(ert)i(from)e(pixel)h(co)s(ordinates)0 4361
-y(in)i(the)h(\014rst)f(image)h(in)m(to)h(FK5)f(co)s(ordinates)g(and)f
-(w)m(e)h(then)f(con)m(v)m(ert)i(from)e(FK5)h(co)s(ordinates)h(in)m(to)f
-(pixel)0 4474 y(co)s(ordinates)31 b(in)f(the)h(second)f(image.)0
-4633 y(If)23 b(MAP)-8 b(A)24 b(and)e(MAPB)i(are)f(p)s(oin)m(ters)g(to)h
-(our)f(t)m(w)m(o)h(original)g(Mappings,)h(w)m(e)e(could)g(form)g(a)h
-(CmpMap)e(whic)m(h)0 4746 y(transforms)32 b(directly)i(b)s(et)m(w)m
-(een)g(the)f(pixel)g(co)s(ordinates)h(of)g(the)f(\014rst)f(and)h
-(second)g(images)h(b)m(y)f(com)m(bining)0 4859 y(these)e(Mappings,)f
-(as)h(follo)m(ws:)262 5095 y Ft(INTEGER)40 b(ALIGNMAP,)g(MAPA,)i(MAPB)
-262 5295 y(...)262 5494 y(CALL)f(AST_INVERT\()e(MAPB,)j(STATUS)f(\))262
-5593 y(ALIGNMAP)f(=)j(AST_CMPMAP\()c(MAPA,)j(MAPB,)f(.TRUE.,)g(')i(',)g
-(STATUS)e(\))262 5693 y(CALL)g(AST_INVERT\()e(MAPB,)j(STATUS)f(\))p
-eop end
-%%Page: 56 66
-TeXDict begin 56 65 bop 0 52 a FG(56)1891 b Fz(6)91 b(COMPOUND)31
-b(MAPPINGS)f(\(CMPMAPS\))0 351 y FG(Here,)g(w)m(e)g(ha)m(v)m(e)g(used)e
-(AST)p Fy(_)p FG(INVER)-8 b(T)28 b(\()p Fu(x)p FG(5.5\))k(to)e(in)m(v)m
-(ert)g(MAPB)f(b)s(efore)g(inserting)g(it)h(in)m(to)g(the)f(CmpMap)0
-464 y(b)s(ecause,)43 b(as)e(supplied,)h(it)e(con)m(v)m(erted)i(in)e
-(the)h(wrong)f(direction.)71 b(Afterw)m(ards,)43 b(w)m(e)e(in)m(v)m
-(ert)g(it)g(again)h(to)0 577 y(return)26 b(it)i(to)f(its)h(original)g
-(state.)41 b(The)27 b(CmpMap,)g(ho)m(w)m(ev)m(er,)i(will)f(ignore)f
-(this)g(subsequen)m(t)g(c)m(hange)h(\()p Fu(x)p FG(6.3\).)0
-751 y(The)d(forw)m(ard)f(transformation)i(of)f(the)g(resulting)g
-(CmpMap)g(will)g(no)m(w)g(transform)g(from)f(pixel)i(co)s(ordinates)0
-864 y(in)j(the)g(\014rst)g(image)h(to)g(pixel)g(co)s(ordinates)f(in)g
-(the)h(second)f(image,)i(while)e(its)h(in)m(v)m(erse)g(transformation)f
-(will)0 977 y(con)m(v)m(ert)j(in)e(the)h(opp)s(osite)f(direction.)0
-1307 y Fw(6.6)112 b(Ov)m(er-Complex)39 b(Comp)s(ound)g(Mappings)0
-1545 y FG(While)h(a)f(CmpMap)f(pro)m(vides)h(a)g(v)m(ery)g(\015exible)h
-(w)m(a)m(y)f(of)g(constructing)h(arbitrarily)f(complex)h(Mappings)0
-1658 y(\()p Fu(x)p FG(6.4\),)34 b(it)e(unfortunately)f(also)h(pro)m
-(vides)g(an)f(opp)s(ortunit)m(y)g(for)g(represen)m(ting)h(simple)f
-(Mappings)g(in)h(com-)0 1771 y(plex)d(w)m(a)m(ys.)41
-b(Sometimes,)30 b(unnecessary)e(complexit)m(y)j(can)e(b)s(e)f
-(di\016cult)h(to)g(a)m(v)m(oid)h(but)f(can)g(obscure)f(imp)s(or-)0
-1884 y(tan)m(t)j(simpli\014cations.)0 2058 y(Consider)46
-b(the)g(example)h(ab)s(o)m(v)m(e)h(\()p Fu(x)p FG(6.5\),)53
-b(in)46 b(whic)m(h)g(w)m(e)h(in)m(ter-related)h(t)m(w)m(o)g(images)f
-(of)g(the)f(sky)h Fx(via)f FG(a)0 2171 y(CmpMap.)38 b(If)26
-b(the)g(t)m(w)m(o)h(images)g(turned)e(out)h(to)h(b)s(e)e(simply)h
-(o\013set)h(from)e(eac)m(h)i(other)g(b)m(y)e(a)i(shift)e(along)i(eac)m
-(h)0 2284 y(pixel)g(axis,)h(then)e(this)h(approac)m(h)g(w)m(ould)f
-(align)h(them)g(correctly)-8 b(,)29 b(but)d(it)h(w)m(ould)g(b)s(e)f
-(ine\016cien)m(t.)40 b(This)26 b(is)h(b)s(e-)0 2397 y(cause)c(it)g(w)m
-(ould)f(in)m(tro)s(duce)g(unnecessary)g(and)g(exp)s(ensiv)m(e)g
-(transformations)h(to)g(and)f(from)g(an)g(in)m(termediate)0
-2510 y(celestial)33 b(co)s(ordinate)e(system,)g(whereas)f(a)h(simple)f
-(shift)g(of)h(pixel)f(origin)h(w)m(ould)f(su\016ce.)0
-2683 y(Recognising)41 b(that)f(a)f(simpler)g(and)g(more)h(e\016cien)m
-(t)h(solution)e(exists)h(ob)m(viously)g(requires)f(a)h(little)h(more)0
-2796 y(than)34 b(simply)g(joining)h(t)m(w)m(o)h(Mappings)f(end-to-end.)
-53 b(W)-8 b(e)36 b(m)m(ust)e(also)i(determine)f(whether)f(the)g
-(resulting)0 2909 y(CmpMap)c(is)h(more)g(complex)h(than)f(it)h(needs)e
-(to)i(b)s(e,)f Fx(i.e.)f FG(con)m(tains)i(redundan)m(t)e(information.)
-43 b(If)31 b(it)g(is,)h(w)m(e)0 3022 y(then)e(need)g(a)h(w)m(a)m(y)g
-(to)g(simplify)f(it.)0 3196 y(The)41 b(problem)g(is)g(not)h(alw)m(a)m
-(ys)h(just)e(one)g(of)h(e\016ciency)-8 b(,)46 b(ho)m(w)m(ev)m(er.)75
-b(Sometimes)42 b(w)m(e)g(ma)m(y)g(also)h(need)e(to)0
-3309 y(kno)m(w)c(something)g(ab)s(out)f(the)h(actual)h(form)f(a)g
-(Mapping)f(tak)m(es|)p Fx(i.e.)i FG(the)f(nature)f(of)h(the)g(op)s
-(erations)g(it)0 3422 y(p)s(erforms.)i(Unnecessary)29
-b(complexit)m(y)h(can)f(obscure)g(this,)g(but)f(suc)m(h)h(complexit)m
-(y)h(can)g(easily)g(accum)m(ulate)0 3535 y(during)f(normal)h(data)i
-(pro)s(cessing.)0 3709 y(F)-8 b(or)35 b(example,)i(a)e(Mapping)f(that)h
-(transforms)f(pixel)h(co)s(ordinates)g(in)m(to)h(p)s(ositions)e(on)h
-(the)g(sky)f(migh)m(t)h(b)s(e)0 3822 y(rep)s(eatedly)29
-b(mo)s(di\014ed)e(as)i(c)m(hanges)g(are)g(made)g(to)g(the)g(shap)s(e)e
-(and)h(size)i(of)e(the)h(image.)41 b(T)m(ypically)-8
-b(,)31 b(on)d(eac)m(h)0 3934 y(o)s(ccasion,)e(another)d(Mapping)g(will)
-h(b)s(e)e(concatenated)j(to)f(re\015ect)g(what)f(has)f(happ)s(ened)g
-(to)h(the)h(image.)39 b(This)0 4047 y(could)26 b(so)s(on)g(mak)m(e)h
-(it)f(di\016cult)g(to)g(discern)g(the)g(o)m(v)m(erall)i(nature)e(of)g
-(the)g(transformation)g(from)g(the)g(complex)0 4160 y(CmpMap)37
-b(that)h(accum)m(ulates.)65 b(If)37 b(only)h(shifts)f(of)h(origin)g(w)m
-(ere)h(in)m(v)m(olv)m(ed)g(on)f(eac)m(h)h(o)s(ccasion,)i(ho)m(w)m(ev)m
-(er,)0 4273 y(they)31 b(could)f(b)s(e)g(com)m(bined)g(in)m(to)i(a)e
-(single)h(shift)f(whic)m(h)h(could)f(b)s(e)g(represen)m(ted)g(m)m(uc)m
-(h)g(more)h(simply)-8 b(.)0 4447 y(Supp)s(ose)37 b(w)m(e)j(no)m(w)f(w)m
-(an)m(ted)h(to)g(represen)m(t)f(our)g(image's)h(celestial)i(co)s
-(ordinate)e(calibration)h(using)d(FITS)0 4560 y(con)m(v)m(en)m(tions)h
-(\()p Fu(x)p FG(17\).)64 b(This)36 b(requires)h(AST)g(to)h(determine)f
-(whether)g(the)g(Mapping)h(whic)m(h)f(relates)h(pixel)0
-4673 y(co)s(ordinate)33 b(to)g(sky)f(p)s(ositions)g(conforms)g(to)g
-(the)h(FITS)e(mo)s(del)h(\(for)g(example,)i(whether)d(it)i(is)f(equiv)
--5 b(alen)m(t)0 4786 y(to)31 b(applying)f(a)h(single)g(set)f(of)h
-(shifts)e(and)h(scale)i(factors)f(follo)m(w)m(ed)g(b)m(y)g(a)f(map)g
-(pro)5 b(jection\).)42 b(Clearly)-8 b(,)31 b(there)0
-4899 y(is)f(an)h(imp)s(ortan)m(t)f(use)g(here)h(for)f(some)g(means)h
-(of)f(simplifying)g(the)h(in)m(ternal)g(structure)f(of)h(a)f(CmpMap.)0
-5229 y Fw(6.7)112 b(Simplifying)40 b(Comp)s(ound)f(Mappings)0
-5467 y FG(The)47 b(abilit)m(y)i(to)f(simplify)f(comp)s(ound)f(Mappings)
-i(is)f(pro)m(vided)g(b)m(y)h(the)f(AST)p Fy(_)p FG(SIMPLIFY)g
-(function.)0 5580 y(This)40 b(function)g(encapsulates)i(a)f(n)m(um)m(b)
-s(er)e(of)i(heuristics)g(for)f(con)m(v)m(erting)i(Mappings,)i(or)c(com)
-m(binations)0 5693 y(of)e(Mappings)f(within)g(a)g(CmpMap,)i(in)m(to)f
-(simpler,)h(equiv)-5 b(alen)m(t)39 b(ones.)62 b(When)37
-b(applied)g(to)h(a)g(CmpMap,)p eop end
-%%Page: 57 67
-TeXDict begin 57 66 bop 0 52 a Fz(6.7)92 b(Simplifying)30
-b(Comp)s(ound)e(Mappings)2148 b FG(57)592 1403 y @beginspecial
-43 @llx 353 @lly 522 @urx 564 @ury 3113 @rwi @setspecial
-%%BeginDocument: sun210_figures/simpexamp.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 43 353 522 564
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/19 15:31:00
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-3233.75 5340.95 m
-3233.75 5373.35 3206.15 5400.95 3173.75 5400.95 c
-2452.55 5400.95 l
-2420.15 5400.95 2392.55 5373.35 2392.55 5340.95 c
-2392.55 4979.75 l
-2392.55 4947.35 2420.15 4919.75 2452.55 4919.75 c
-3173.75 4919.75 l
-3206.15 4919.75 3233.75 4947.35 3233.75 4979.75 c
-f*
-1 g
-3168.95 5396.15 m
-3168.95 5428.55 3142.55 5454.95 3110.15 5454.95 c
-2397.35 5454.95 l
-2364.95 5454.95 2338.55 5428.55 2338.55 5396.15 c
-2338.55 5043.35 l
-2338.55 5010.95 2364.95 4984.55 2397.35 4984.55 c
-3110.15 4984.55 l
-3142.55 4984.55 3168.95 5010.95 3168.95 5043.35 c
-f*
-8 w
-1 J
-1 j
-0 g
-3168.95 5396.15 m
-3168.95 5428.55 3142.55 5454.95 3110.15 5454.95 c
-2397.35 5454.95 l
-2364.95 5454.95 2338.55 5428.55 2338.55 5396.15 c
-2338.55 5043.35 l
-2338.55 5010.95 2364.95 4984.55 2397.35 4984.55 c
-3110.15 4984.55 l
-3142.55 4984.55 3168.95 5010.95 3168.95 5043.35 c
-h
-S
-0.564706 g
-2693.75 4320.95 m
-2693.75 4353.35 2667.35 4380.95 2633.75 4380.95 c
-2272.55 4380.95 l
-2240.15 4380.95 2212.55 4353.35 2212.55 4320.95 c
-2212.55 3719.75 l
-2212.55 3687.35 2240.15 3659.75 2272.55 3659.75 c
-2633.75 3659.75 l
-2667.35 3659.75 2693.75 3687.35 2693.75 3719.75 c
-f*
-1 g
-2628.95 4376.15 m
-2628.95 4408.55 2603.75 4434.95 2570.15 4434.95 c
-2217.35 4434.95 l
-2184.95 4434.95 2158.55 4408.55 2158.55 4376.15 c
-2158.55 3783.35 l
-2158.55 3750.95 2184.95 3724.55 2217.35 3724.55 c
-2570.15 3724.55 l
-2602.55 3724.55 2628.95 3750.95 2628.95 3783.35 c
-f*
-0 g
-2628.95 4376.15 m
-2628.95 4408.55 2603.75 4434.95 2570.15 4434.95 c
-2217.35 4434.95 l
-2184.95 4434.95 2158.55 4408.55 2158.55 4376.15 c
-2158.55 3783.35 l
-2158.55 3750.95 2184.95 3724.55 2217.35 3724.55 c
-2570.15 3724.55 l
-2602.55 3724.55 2628.95 3750.95 2628.95 3783.35 c
-h
-S
-0.564706 g
-3473.75 4320.95 m
-3473.75 4353.35 3447.35 4380.95 3413.75 4380.95 c
-3052.55 4380.95 l
-3020.15 4380.95 2992.55 4353.35 2992.55 4320.95 c
-2992.55 3719.75 l
-2992.55 3687.35 3020.15 3659.75 3052.55 3659.75 c
-3413.75 3659.75 l
-3447.35 3659.75 3473.75 3687.35 3473.75 3719.75 c
-f*
-1 g
-3408.95 4376.15 m
-3408.95 4408.55 3383.75 4434.95 3350.15 4434.95 c
-2997.35 4434.95 l
-2964.95 4434.95 2938.55 4408.55 2938.55 4376.15 c
-2938.55 3783.35 l
-2938.55 3750.95 2964.95 3724.55 2997.35 3724.55 c
-3350.15 3724.55 l
-3382.55 3724.55 3408.95 3750.95 3408.95 3783.35 c
-f*
-0 g
-3408.95 4376.15 m
-3408.95 4408.55 3383.75 4434.95 3350.15 4434.95 c
-2997.35 4434.95 l
-2964.95 4434.95 2938.55 4408.55 2938.55 4376.15 c
-2938.55 3783.35 l
-2938.55 3750.95 2964.95 3724.55 2997.35 3724.55 c
-3350.15 3724.55 l
-3382.55 3724.55 3408.95 3750.95 3408.95 3783.35 c
-h
-S
-0.564706 g
-1793.75 5468.15 m
-1793.75 5530.55 1743.35 5580.95 1680.95 5580.95 c
-1005.35 5580.95 l
-942.95 5580.95 892.55 5530.55 892.55 5468.15 c
-892.55 3652.55 l
-892.55 3590.15 942.95 3539.75 1005.35 3539.75 c
-1680.95 3539.75 l
-1743.35 3539.75 1793.75 3590.15 1793.75 3652.55 c
-f*
-1 g
-1728.95 5523.35 m
-1728.95 5584.55 1679.75 5634.95 1618.55 5634.95 c
-948.95 5634.95 l
-887.75 5634.95 838.55 5584.55 838.55 5523.35 c
-838.55 3716.15 l
-838.55 3653.75 887.75 3604.55 948.95 3604.55 c
-1618.55 3604.55 l
-1679.75 3604.55 1728.95 3653.75 1728.95 3716.15 c
-f*
-0 g
-1728.95 5523.35 m
-1728.95 5584.55 1679.75 5634.95 1618.55 5634.95 c
-948.95 5634.95 l
-887.75 5634.95 838.55 5584.55 838.55 5523.35 c
-838.55 3716.15 l
-838.55 3653.75 887.75 3604.55 948.95 3604.55 c
-1618.55 3604.55 l
-1679.75 3604.55 1728.95 3653.75 1728.95 3716.15 c
-h
-S
-473.75 5151.35 254.4 15.5999 re
-Y
-471.35 5159.75 m
-720.95 5159.75 l
-S
-0 0 6120 7920 re
-Y
-512.15 5160.95 m
-512.15 5182.55 494.15 5200.55 472.55 5200.55 c
-450.95 5200.55 432.95 5182.55 432.95 5160.95 c
-432.95 5139.35 450.95 5121.35 472.55 5121.35 c
-494.15 5121.35 512.15 5139.35 512.15 5160.95 c
-f*
-681.35 5111.75 m
-699.35 5159.75 l
-681.35 5207.75 l
-833.75 5159.75 l
-f*
-473.75 4611.35 254.4 15.5999 re
-Y
-471.35 4619.75 m
-720.95 4619.75 l
-S
-0 0 6120 7920 re
-Y
-512.15 4620.95 m
-512.15 4642.55 494.15 4660.55 472.55 4660.55 c
-450.95 4660.55 432.95 4642.55 432.95 4620.95 c
-432.95 4599.35 450.95 4581.35 472.55 4581.35 c
-494.15 4581.35 512.15 4599.35 512.15 4620.95 c
-f*
-681.35 4571.75 m
-699.35 4619.75 l
-681.35 4667.75 l
-833.75 4619.75 l
-f*
-473.75 4071.35 254.4 15.5999 re
-Y
-471.35 4079.75 m
-720.95 4079.75 l
-S
-0 0 6120 7920 re
-Y
-512.15 4080.95 m
-512.15 4102.55 494.15 4120.55 472.55 4120.55 c
-450.95 4120.55 432.95 4102.55 432.95 4080.95 c
-432.95 4059.35 450.95 4041.35 472.55 4041.35 c
-494.15 4041.35 512.15 4059.35 512.15 4080.95 c
-f*
-681.35 4031.75 m
-699.35 4079.75 l
-681.35 4127.75 l
-833.75 4079.75 l
-f*
-1733.75 5151.35 495.6 64.7996 re
-Y
-1733.75 5159.75 m
-2220.95 5208.95 l
-S
-0 0 6120 7920 re
-Y
-1772.15 5160.95 m
-1772.15 5182.55 1754.15 5200.55 1732.55 5200.55 c
-1710.95 5200.55 1692.95 5182.55 1692.95 5160.95 c
-1692.95 5139.35 1710.95 5121.35 1732.55 5121.35 c
-1754.15 5121.35 1772.15 5139.35 1772.15 5160.95 c
-f*
-2186.15 5157.35 m
-2200.55 5206.55 l
-2177.75 5252.15 l
-2333.75 5219.75 l
-f*
-1733.75 4325.75 342 294 re
-Y
-1733.75 4619.75 m
-2067.35 4334.15 l
-S
-0 0 6120 7920 re
-Y
-1772.15 4620.95 m
-1772.15 4642.55 1754.15 4660.55 1732.55 4660.55 c
-1710.95 4660.55 1692.95 4642.55 1692.95 4620.95 c
-1692.95 4599.35 1710.95 4581.35 1732.55 4581.35 c
-1754.15 4581.35 1772.15 4599.35 1772.15 4620.95 c
-f*
-2007.35 4323.35 m
-2051.75 4347.35 l
-2068.55 4394.15 l
-2153.75 4259.75 l
-f*
-1733.75 3935.75 322.8 151.2 re
-Y
-1733.75 4079.75 m
-2048.15 3944.15 l
-S
-0 0 6120 7920 re
-Y
-1772.15 4080.95 m
-1772.15 4102.55 1754.15 4120.55 1732.55 4120.55 c
-1710.95 4120.55 1692.95 4102.55 1692.95 4080.95 c
-1692.95 4059.35 1710.95 4041.35 1732.55 4041.35 c
-1754.15 4041.35 1772.15 4059.35 1772.15 4080.95 c
-f*
-1995.35 3916.55 m
-2031.35 3952.55 l
-2032.55 4002.95 l
-2153.75 3899.75 l
-f*
-833.75 4670.15 811.2 489.6 re
-Y
-833.75 5159.75 m
-1636.55 4678.55 l
-S
-0 0 6120 7920 re
-Y
-872.15 5160.95 m
-872.15 5182.55 854.15 5200.55 832.55 5200.55 c
-810.95 5200.55 792.95 5182.55 792.95 5160.95 c
-792.95 5139.35 810.95 5121.35 832.55 5121.35 c
-854.15 5121.35 872.15 5139.35 872.15 5160.95 c
-f*
-1578.95 4656.95 m
-1618.55 4688.15 l
-1626.95 4738.55 l
-1733.75 4619.75 l
-f*
-833.75 4611.35 811.2 490.8 re
-Y
-833.75 4619.75 m
-1636.55 5102.15 l
-S
-0 0 6120 7920 re
-Y
-872.15 4620.95 m
-872.15 4642.55 854.15 4660.55 832.55 4660.55 c
-810.95 4660.55 792.95 4642.55 792.95 4620.95 c
-792.95 4599.35 810.95 4581.35 832.55 4581.35 c
-854.15 4581.35 872.15 4599.35 872.15 4620.95 c
-f*
-1626.95 5040.95 m
-1618.55 5091.35 l
-1578.95 5122.55 l
-1733.75 5159.75 l
-f*
-833.75 4071.35 795.6 15.5999 re
-Y
-831.35 4079.75 m
-1622.15 4079.75 l
-S
-0 0 6120 7920 re
-Y
-1581.35 4031.75 m
-1599.35 4079.75 l
-1581.35 4127.75 l
-1733.75 4079.75 l
-f*
-0.564706 g
-4853.75 5468.15 m
-4853.75 5530.55 4803.35 5580.95 4740.95 5580.95 c
-4065.35 5580.95 l
-4002.95 5580.95 3952.55 5530.55 3952.55 5468.15 c
-3952.55 3652.55 l
-3952.55 3590.15 4002.95 3539.75 4065.35 3539.75 c
-4740.95 3539.75 l
-4803.35 3539.75 4853.75 3590.15 4853.75 3652.55 c
-f*
-1 g
-4788.95 5523.35 m
-4788.95 5584.55 4739.75 5634.95 4678.55 5634.95 c
-4008.95 5634.95 l
-3947.75 5634.95 3898.55 5584.55 3898.55 5523.35 c
-3898.55 3716.15 l
-3898.55 3653.75 3947.75 3604.55 4008.95 3604.55 c
-4678.55 3604.55 l
-4739.75 3604.55 4788.95 3653.75 4788.95 3716.15 c
-f*
-0 g
-4788.95 5523.35 m
-4788.95 5584.55 4739.75 5634.95 4678.55 5634.95 c
-4008.95 5634.95 l
-3947.75 5634.95 3898.55 5584.55 3898.55 5523.35 c
-3898.55 3716.15 l
-3898.55 3653.75 3947.75 3604.55 4008.95 3604.55 c
-4678.55 3604.55 l
-4739.75 3604.55 4788.95 3653.75 4788.95 3716.15 c
-h
-S
-3173.75 5160.95 613.2 65.9998 re
-Y
-3173.75 5219.75 m
-3778.55 5169.35 l
-S
-0 0 6120 7920 re
-Y
-3212.15 5220.95 m
-3212.15 5242.55 3194.15 5260.55 3172.55 5260.55 c
-3150.95 5260.55 3132.95 5242.55 3132.95 5220.95 c
-3132.95 5199.35 3150.95 5181.35 3172.55 5181.35 c
-3194.15 5181.35 3212.15 5199.35 3212.15 5220.95 c
-f*
-3737.75 5124.95 m
-3759.35 5170.55 l
-3746.15 5219.75 l
-3893.75 5159.75 l
-f*
-3413.75 4251.35 396 301.2 re
-Y
-3413.75 4259.75 m
-3801.35 4552.55 l
-S
-0 0 6120 7920 re
-Y
-3452.15 4260.95 m
-3452.15 4282.55 3434.15 4300.55 3412.55 4300.55 c
-3390.95 4300.55 3372.95 4282.55 3372.95 4260.95 c
-3372.95 4239.35 3390.95 4221.35 3412.55 4221.35 c
-3434.15 4221.35 3452.15 4239.35 3452.15 4260.95 c
-f*
-3800.15 4491.35 m
-3785.75 4539.35 l
-3742.55 4566.95 l
-3893.75 4619.75 l
-f*
-3413.75 3891.35 380.4 156 re
-Y
-3413.75 3899.75 m
-3785.75 4040.15 l
-S
-0 0 6120 7920 re
-Y
-3452.15 3900.95 m
-3452.15 3922.55 3434.15 3940.55 3412.55 3940.55 c
-3390.95 3940.55 3372.95 3922.55 3372.95 3900.95 c
-3372.95 3879.35 3390.95 3861.35 3412.55 3861.35 c
-3434.15 3861.35 3452.15 3879.35 3452.15 3900.95 c
-f*
-3767.75 3981.35 m
-3768.95 4031.75 l
-3734.15 4070.15 l
-3893.75 4079.75 l
-f*
-4793.75 5151.35 315.6 15.5999 re
-Y
-4791.35 5159.75 m
-5102.15 5159.75 l
-S
-0 0 6120 7920 re
-Y
-4832.15 5160.95 m
-4832.15 5182.55 4814.15 5200.55 4792.55 5200.55 c
-4770.95 5200.55 4752.95 5182.55 4752.95 5160.95 c
-4752.95 5139.35 4770.95 5121.35 4792.55 5121.35 c
-4814.15 5121.35 4832.15 5139.35 4832.15 5160.95 c
-f*
-5061.35 5111.75 m
-5079.35 5159.75 l
-5061.35 5207.75 l
-5213.75 5159.75 l
-f*
-4793.75 4611.35 315.6 15.5999 re
-Y
-4791.35 4619.75 m
-5102.15 4619.75 l
-S
-0 0 6120 7920 re
-Y
-4832.15 4620.95 m
-4832.15 4642.55 4814.15 4660.55 4792.55 4660.55 c
-4770.95 4660.55 4752.95 4642.55 4752.95 4620.95 c
-4752.95 4599.35 4770.95 4581.35 4792.55 4581.35 c
-4814.15 4581.35 4832.15 4599.35 4832.15 4620.95 c
-f*
-5061.35 4571.75 m
-5079.35 4619.75 l
-5061.35 4667.75 l
-5213.75 4619.75 l
-f*
-4793.75 4071.35 315.6 15.5999 re
-Y
-4791.35 4079.75 m
-5102.15 4079.75 l
-S
-0 0 6120 7920 re
-Y
-4832.15 4080.95 m
-4832.15 4102.55 4814.15 4120.55 4792.55 4120.55 c
-4770.95 4120.55 4752.95 4102.55 4752.95 4080.95 c
-4752.95 4059.35 4770.95 4041.35 4792.55 4041.35 c
-4814.15 4041.35 4832.15 4059.35 4832.15 4080.95 c
-f*
-5061.35 4031.75 m
-5079.35 4079.75 l
-5061.35 4127.75 l
-5213.75 4079.75 l
-f*
-3893.75 4670.15 811.2 489.6 re
-Y
-3893.75 5159.75 m
-4696.55 4678.55 l
-S
-0 0 6120 7920 re
-Y
-3932.15 5160.95 m
-3932.15 5182.55 3914.15 5200.55 3892.55 5200.55 c
-3870.95 5200.55 3852.95 5182.55 3852.95 5160.95 c
-3852.95 5139.35 3870.95 5121.35 3892.55 5121.35 c
-3914.15 5121.35 3932.15 5139.35 3932.15 5160.95 c
-f*
-4638.95 4656.95 m
-4678.55 4688.15 l
-4686.95 4738.55 l
-4793.75 4619.75 l
-f*
-3893.75 4611.35 811.2 490.8 re
-Y
-3893.75 4619.75 m
-4696.55 5102.15 l
-S
-0 0 6120 7920 re
-Y
-3932.15 4620.95 m
-3932.15 4642.55 3914.15 4660.55 3892.55 4660.55 c
-3870.95 4660.55 3852.95 4642.55 3852.95 4620.95 c
-3852.95 4599.35 3870.95 4581.35 3892.55 4581.35 c
-3914.15 4581.35 3932.15 4599.35 3932.15 4620.95 c
-f*
-4686.95 5040.95 m
-4678.55 5091.35 l
-4638.95 5122.55 l
-4793.75 5159.75 l
-f*
-3893.75 4071.35 795.6 15.5999 re
-Y
-3891.35 4079.75 m
-4682.15 4079.75 l
-S
-0 0 6120 7920 re
-Y
-4641.35 4031.75 m
-4659.35 4079.75 l
-4641.35 4127.75 l
-4793.75 4079.75 l
-f*
-2633.75 4251.35 194.4 15.5999 re
-Y
-2631.35 4259.75 m
-2820.95 4259.75 l
-S
-0 0 6120 7920 re
-Y
-2672.15 4260.95 m
-2672.15 4282.55 2654.15 4300.55 2632.55 4300.55 c
-2610.95 4300.55 2592.95 4282.55 2592.95 4260.95 c
-2592.95 4239.35 2610.95 4221.35 2632.55 4221.35 c
-2654.15 4221.35 2672.15 4239.35 2672.15 4260.95 c
-f*
-2781.35 4211.75 m
-2799.35 4259.75 l
-2781.35 4307.75 l
-2933.75 4259.75 l
-f*
-2633.75 3891.35 194.4 15.5999 re
-Y
-2631.35 3899.75 m
-2820.95 3899.75 l
-S
-0 0 6120 7920 re
-Y
-2672.15 3900.95 m
-2672.15 3922.55 2654.15 3940.55 2632.55 3940.55 c
-2610.95 3940.55 2592.95 3922.55 2592.95 3900.95 c
-2592.95 3879.35 2610.95 3861.35 2632.55 3861.35 c
-2654.15 3861.35 2672.15 3879.35 2672.15 3900.95 c
-f*
-2781.35 3851.75 m
-2799.35 3899.75 l
-2781.35 3947.75 l
-2933.75 3899.75 l
-f*
-q[1 0 0 1 0 0]concat
-89 106 true[1 0 0 1 -939 -5340]@85 imagemask
-"98E$s8Tk7z
-"98E$s8Tk7z"98E$s8Tk7z!'gM`s6p!gz!!E9$rr<$!z!!*'!rVuouz!!%NK
-p](9oz!!#7`p](9oz!!#7`n,NFgz!!#7`n,NFgz!!#7`n,NFgz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at n,NE<z!!", at s8W,uz!!", at s8W-!huE`W!!", at s8W-!qu?]s!!", at s8W-!rr<$!
-!!", at s8W-!s1eU7!!", at qu@9-s6p!g!!", at huEcWs82is!!", at huEa!s8Duu!!", at huE`^s8N'!!!",@
-huE`Xs8RTL!!", at huE`Ws8Tk7!!", at huE`WJ,eF,!!", at huE`W5QC3Q!!", at huE`W+91g1!!", at huE`W
-&-)D)!!", at huE`W#QOQ!!!", at huE`W#QO]%!!", at huE`W"989!!!", at huE`W"98?#!!", at huE`W!WW-!!!", at huE`W
-!WW0"!!", at huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W!<<'!!!", at huE`W!<<(L!!", at huE`W!<<(L
-!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!",@
-huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!WW1M!!", at huE`W!WW0"!!",@
-huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W"98B$!!", at huE`W"98?#!!", at huE`W#QOc'!!", at huE`W
-#QO]%!!", at huE`W&-)P-!!", at huE`W+92*9!!", at huE`W5QCKY!!", at huE`WJ,f!<!!", at huE`Ws8V!W
-!!", at huE`Xs8Tk7!!#7`huE`^s8RTL!!#7`huEaAs8N'!!!%NKn,NLhs82is!!%NKp],gDs6p!g!!*'!s8W-!s53kW
-!!iQ(s8W-!rr<$!!.Y%Ks8W-!qu?]s"98E$s8W-!huE`W"98E$s8W,uz"98E$s8W*!z~>
-Q
-q[1 0 0 1 0 0]concat
-71 76 true[1 0 0 1 -1028 -5338]@85 imagemask
-z56(Z`z
-&-)P-z!.Y%KJ,fQL!!3-"s53kW!!!9(s8Vio!!!!0s8W,uz+92B at rr<$!!.Y%Ks8RTL!!*'!
-s8W,W!!!$!s8W-!n,NFhs8W-!s7cQo"98E$KE(iL!!iQ(n,OR.!!!9(s1eU:rVup/s8N'!!<3$!+926=
-!!%M!!$D79!!!!@J,g\kn,NFg&&800s53kW!!hE^5QAM!!!!,Z!.Y$a!!!!"n,Rt<J,fQL!Up)=rr<$!!!)cos8N'!
-!!!"D!<<#uz495E\z!'C8]qu?]s!!"&?s82is!!!!-!<;foz!!3,pz!!!'"p](9o
-!!!!"s6p!gz!WVWhz!!3,hz!!!'"n,NFg!!!!"s53kWz!WV'Xz!!3,Xz
-!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!<:sWz!!*&Wz
-!!!$!s8W-!s8VQgs8W-!s8W,g!<<*!s8W-!huJ9,s8W-!s53m,s8W-!s8V!WJ)C;,!$D7!!'fBA!!",@
-huH""!!!!@s53lAhuE`W+90+V+7K71!$D6V!$C\1!!#7`^]4o7!!!!`s1eUFp](9o5Q?66#P\9!!'gL6
-!!i9!!!%NKJ,f]L!!!"Krr<$"qu?]ss8N'!!WE'!!<<#u!!*$!!!3,t!!!"KJ,fWMqu?]s5JR7$s7cQo!$C,!&-),!!!!Q)!$D7!!!!!(
-s24m:^]4?7!WW3"s*t(L!!*'!s8Duu!!!!`s8Vioz#QOh^z!!*'!z!!!!$huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-57 74 true[1 0 0 1 -1100 -5340]@85 imagemask
-&-)\0s1eU7&-)\0
-s1eU7&-)\0p](9o!.Y%K^]4?7!"],0z!!iQ'z!!E9!z!!E9!z!!3,tz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,tz!!3,tz!!3-!z!!3-!z!!3-"z!!3-"
-!!)co!!E8uJ-5cN!!E8u^^'i=!!iQ"i",hf#S6t1pcncY&-)\)IfKEJ&-)\)J,fP!"98Dr5QCb6!.Y%D
-+92 at k!"],)&-)Y0!!3,p#QOf(!!%ND"98B$!!!Q)!WW-!!!!,r!<;rs!!!"D!'g5Yz!!@`O~>
-Q
-q[1 0 0 1 0 0]concat
-127 74 true[1 0 0 1 -1154 -5340]@85 imagemask
-#QOi(s+(.Ls8VR!
-s8W,u#QOi(s+(.Ls8VR!s8W,u!WW3"n,P]Qs8E!/s8W,o!"],0J,fWMs7cQoJ,fKJ!!E9$!!!"Ks53kW
-+926=!!E9#!!!"Ks53kW#QOQ!!!3-!!!!!`s1eU7#QOQ!!!3,t!!!!`s1eU7#QO8n!!*&s!!!!@s1eU7
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"979Z!!*&s!!!!`s*t(L"979Z!!*&s!!!!`s1eU7#QN]^!!*&u!!!!`s1eU7#QN]^!!*'!!!!!`s53kW
-#QN]^!!*'!J,fS!s6p!g#QMR>!!3-"^]4 at as7cQo&-'EF!!3,sn,NIgrql`r&-'EF!!3,qp](<or-n\H+9-ik!!E8rrr<*"r',]35Q?66"98Dr5JRO(p`JDos8N'!"98Dr+9"M)p]pg0s8N'!"98Dr
-&-)\0n,r^js8Duu!'gMY"98E$huWlXs82is!!iQ!!WW3"huJ9,s82is!!*&o!.Y%K^]6V!s7cQo!!",9
-!$D7@!!!Q0s53kW!!!,r!"],/!!!-$s1eU7!!!"D!!3,p!!!"Krr<$!z!!!N0!!!!"huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -1277 -5340]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -1427 -5338]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -1491 -5305]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-89 106 true[1 0 0 1 -3999 -5340]@85 imagemask
-"98E$s8Tk7z
-"98E$s8Tk7z"98E$s8Tk7z!'gM`s6p!gz!!E9$rr<$!z!!*'!rVuouz!!%NK
-p](9oz!!#7`p](9oz!!#7`n,NFgz!!#7`n,NFgz!!#7`n,NFgz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at n,NE<z!!", at s8W,uz!!", at s8W-!huE`W!!", at s8W-!qu?]s!!", at s8W-!rr<$!
-!!", at s8W-!s1eU7!!", at qu@9-s6p!g!!", at huEcWs82is!!", at huEa!s8Duu!!", at huE`^s8N'!!!",@
-huE`Xs8RTL!!", at huE`Ws8Tk7!!", at huE`WJ,eF,!!", at huE`W5QC3Q!!", at huE`W+91g1!!", at huE`W
-&-)D)!!", at huE`W#QOQ!!!", at huE`W#QO]%!!", at huE`W"989!!!", at huE`W"98?#!!", at huE`W!WW-!!!", at huE`W
-!WW0"!!", at huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W!<<'!!!", at huE`W!<<(L!!", at huE`W!<<(L
-!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!",@
-huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!WW1M!!", at huE`W!WW0"!!",@
-huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W"98B$!!", at huE`W"98?#!!", at huE`W#QOc'!!", at huE`W
-#QO]%!!", at huE`W&-)P-!!", at huE`W+92*9!!", at huE`W5QCKY!!", at huE`WJ,f!<!!", at huE`Ws8V!W
-!!", at huE`Xs8Tk7!!#7`huE`^s8RTL!!#7`huEaAs8N'!!!%NKn,NLhs82is!!%NKp],gDs6p!g!!*'!s8W-!s53kW
-!!iQ(s8W-!rr<$!!.Y%Ks8W-!qu?]s"98E$s8W-!huE`W"98E$s8W,uz"98E$s8W*!z~>
-Q
-q[1 0 0 1 0 0]concat
-71 76 true[1 0 0 1 -4088 -5338]@85 imagemask
-z56(Z`z
-&-)P-z!.Y%KJ,fQL!!3-"s53kW!!!9(s8Vio!!!!0s8W,uz+92B at rr<$!!.Y%Ks8RTL!!*'!
-s8W,W!!!$!s8W-!n,NFhs8W-!s7cQo"98E$KE(iL!!iQ(n,OR.!!!9(s1eU:rVup/s8N'!!<3$!+926=
-!!%M!!$D79!!!!@J,g\kn,NFg&&800s53kW!!hE^5QAM!!!!,Z!.Y$a!!!!"n,Rt<J,fQL!Up)=rr<$!!!)cos8N'!
-!!!"D!<<#uz495E\z!'C8]qu?]s!!"&?s82is!!!!-!<;foz!!3,pz!!!'"p](9o
-!!!!"s6p!gz!WVWhz!!3,hz!!!'"n,NFg!!!!"s53kWz!WV'Xz!!3,Xz
-!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!<:sWz!!*&Wz
-!!!$!s8W-!s8VQgs8W-!s8W,g!<<*!s8W-!huJ9,s8W-!s53m,s8W-!s8V!WJ)C;,!$D7!!'fBA!!",@
-huH""!!!!@s53lAhuE`W+90+V+7K71!$D6V!$C\1!!#7`^]4o7!!!!`s1eUFp](9o5Q?66#P\9!!'gL6
-!!i9!!!%NKJ,f]L!!!"Krr<$"qu?]ss8N'!!WE'!!<<#u!!*$!!!3,t!!!"KJ,fWMqu?]s5JR7$s7cQo!$C,!&-),!!!!Q)!$D7!!!!!(
-s24m:^]4?7!WW3"s*t(L!!*'!s8Duu!!!!`s8Vioz#QOh^z!!*'!z!!!!$huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-57 74 true[1 0 0 1 -4160 -5340]@85 imagemask
-&-)\0s1eU7&-)\0
-s1eU7&-)\0p](9o!.Y%K^]4?7!"],0z!!iQ'z!!E9!z!!E9!z!!3,tz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,tz!!3,tz!!3-!z!!3-!z!!3-"z!!3-"
-!!)co!!E8uJ-5cN!!E8u^^'i=!!iQ"i",hf#S6t1pcncY&-)\)IfKEJ&-)\)J,fP!"98Dr5QCb6!.Y%D
-+92 at k!"],)&-)Y0!!3,p#QOf(!!%ND"98B$!!!Q)!WW-!!!!,r!<;rs!!!"D!'g5Yz!!@`O~>
-Q
-q[1 0 0 1 0 0]concat
-127 74 true[1 0 0 1 -4214 -5340]@85 imagemask
-#QOi(s+(.Ls8VR!
-s8W,u#QOi(s+(.Ls8VR!s8W,u!WW3"n,P]Qs8E!/s8W,o!"],0J,fWMs7cQoJ,fKJ!!E9$!!!"Ks53kW
-+926=!!E9#!!!"Ks53kW#QOQ!!!3-!!!!!`s1eU7#QOQ!!!3,t!!!!`s1eU7#QO8n!!*&s!!!!@s1eU7
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"979Z!!*&s!!!!`s*t(L"979Z!!*&s!!!!`s1eU7#QN]^!!*&u!!!!`s1eU7#QN]^!!*'!!!!!`s53kW
-#QN]^!!*'!J,fS!s6p!g#QMR>!!3-"^]4 at as7cQo&-'EF!!3,sn,NIgrql`r&-'EF!!3,qp](<or-n\H+9-ik!!E8rrr<*"r',]35Q?66"98Dr5JRO(p`JDos8N'!"98Dr+9"M)p]pg0s8N'!"98Dr
-&-)\0n,r^js8Duu!'gMY"98E$huWlXs82is!!iQ!!WW3"huJ9,s82is!!*&o!.Y%K^]6V!s7cQo!!",9
-!$D7@!!!Q0s53kW!!!,r!"],/!!!-$s1eU7!!!"D!!3,p!!!"Krr<$!z!!!N0!!!!"huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -4337 -5340]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -4487 -5338]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -4551 -5305]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-116 108 true[1 0 0 1 -2464 -5158]@85 imagemask
-z!!#7`qu?]s
-zz#QOi(huE`Wz!!!"Ks8W,szz!!3-"s8W+Lzz#QOi(s8V!Wz
-!!!!@s8W-!s7cQoz!!#7`s8W-!qu?]sz!<<*!!!3-"z!!!!"s8VQg!$D5kz!!!-$
-s*t(L"96.:z!!iQ'zs53kWz&-)P-!!!!`n,NFg!!!!@s7cQo!!!Q)z!!", at n,NFg!!iE%z
-!'gMAz"8i-!zJ,d:a!!!!"rVuou!!!"Ks*t(L!!!$!z!!*'!z!!%KKz!<<'!
-z!.TM!zs8Duuz5C`_6!!!'"rVuou!!!!@^]4?7!!3,tz!!"+Vz"989!z
-!"ZjF!!!!$s82isz&)[Ef!!!-$p](9o!!!!0huE`W!!E8rz!!!Pfz#QOQ!z!!hE^!!!!(s7cQo
-z#Oh]n!!!9(p](9o!!!!(n,NFg!!iPnz!!!8nz#QO8nz!!hun!!!!(s6p!gz
-"7Q9j!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir
-!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$
-p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o
-!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!
-z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz
-&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!
-z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z
-!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!g
-z"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz
-"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir
-!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$
-p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o
-!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!
-z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!9!z
-&-),!z!!iE%!!!!0s6p!gz#Q+Q%!!!Q0n,NFg!!!!(qu?]s!$D71z!!!9%z+92*9
-z!"]&/!!!!@s7cQoz&,lP/!!#7`qu?]s!!!!@rr<$!!'gM]z!!#7`J,fQLs8W*!z
-!.Y$a!!!-$s8Tk7!!!!$s8Vio!.Y%Ks8Duu!!#7`s8RTSs8W-!s53kW!WW3"s6p9ns8W-!huE`Xs8W-!n-B!ns8W,W!!!'"s8W,g~>
-Q
-q[1 0 0 1 0 0]concat
-81 74 true[1 0 0 1 -2579 -5160]@85 imagemask
-"98E$rrN0"s8RTO
-s8W-!!WW3"s*t.Ms8W&us8W-!!!!Q0s1eUFs8V!W!!iQ(!!!-$s*t(L"98?#!!3-"!!!!"s8Duu!<<'!
-!!!'"qu?]ss8N'!!!*&s!!!$!rVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"K
-rVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!
-qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou
-!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ
-!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs
-!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!
-qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou
-!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]s
-s8Duu!!*&u!!!$!qu?]s!<<'!!!*&szs8RTL!<;rs!!!$!s1eU8s82is!!3-"huEfXp](9o!WW2p
-!!E8r!!!!$s8Diq#QOQ!!!!9(r-n\gs6p!g"98E!5Oe^Qn,NFjs8W!=s8W,W!!!-$s83E-s8V!W!!%NK
-r!39%s1eU7!!iQ%"98E$J,fQL!<;rss8W*!z+8c+gs8Duu!!!!$qu at i=p](9o!!!"H!!iP^z!!!Q1!'C5]!!!~>
-Q
-q[1 0 0 1 0 0]concat
-43 109 true[1 0 0 1 -2660 -5160]@85 imagemask
-"98E$s54"Zs8W,W
-!WW3"s1eU>s8Vio!!3-"huE`Ws8Tk7!!%NKJ,fQLJ,b$!!!%NKz5Q:]`!!#7`z5Q:]`!!#7`
-z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z
-5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z
-5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`
-!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`
-z5Q:]`!!#7`z5Q:]`!!%NKzJ,]KK!W`9#!!!,ms8N'!"98E$!!!$!s8N'!!$D7@!!!!$s8N'!!!%NK
-z+9)<@!!!-$z!.OtK!!!!0zzzzzzzzzz
-zzzzzzzzzzzzzzzz
-zzzzz"+U at O!!",1z5PP3Y!!%NHzJ,TEJ!!*'!zs8N'!!!*'!zs8N'!!!*'!zs8N'!!!%NJzJ,TEJ!!#7]z+8>g9!!!Pf!!!~>
-Q
-q[1 0 0 1 0 0]concat
-48 95 true[1 0 0 1 -2704 -5158]@85 imagemask
-!!!!]z"979Z
-!!!9(p](9o+92<?!!#7`s*t(L5QCc!!!%NKs53kWs8W,g!!*'!kP,#Ws8N)s!!3-!!'C5^s82j<!!3,p
-!"T&1s7cQu!!E8r!!!!$s7cQo!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$
-s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$
-s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g
-!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j
-!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!9(s8W,g#QOi(s6p-js8W,g!WW3"s6p#<s8W,g
-!'gMQ!!!!@s6p!g!"],!!!!!(s6p!g!!E8j!!!!"s6p!g!!*&gzJ+*F<!!#7Qz+7K71!!",1
-z&+BQ!!!!8nz#Oh]n!!!,jz!Up'h!!!#gz!:Tsg!!!"<z!&+BQ!!!!A!!!~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -2750 -5160]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -2898 -5158]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -2962 -5125]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-98 106 true[1 0 0 1 -2385 -4560]@85 imagemask
-&-)\0s8W-!s8W,u
-!"],0s8W-!s8W-!rW!3's8W-!s8W-!s8E!'s8W-!s8W-!s8W&u"98E$s8W-!s8W,u!!3-"s8W-!s8W-!
-rW!!!s53kW!!!!`s8N'!s8V!Wz!WW0"!.Y%<z!!#7`!!#7`p](9o!!!!0rr<$`s7cQoz
-#QFc(+926=z!!E6$!"],/z!!!'"!!!Q0rr<$!zs*t(Ss8N'!z!.TM!"98COz!!#66!!3-"
-^]4?7!!!!`J,fWMs1eU7z++O=ks8V!Wz!$?^k!.Y%<z!!!O[!!%NKn,NFg!!!!0J,fR6
-s7cQoz#J^<>+926=z!!g:>!"],/z!!!8>!!!Q0rVuou!!!!$^]4?>s8N'!z"2Fm:
-"98COz!!C":!!E9$J,fQL!!!&8!!!'"s1eU7zzs8V!Wzz!.Y%<zz!!%NKn,NFg
-z!!!!`s7cQozz+926=zz!$D7=zz!!!Q0rVuouz!!!!(s8N'!
-zz"98COzz!!E9$J,fQLz!!!'"s1eU7zzs8V!Wzz!<<)W
-zz!!%NKn,NFgz!!!!`s7cQozz+92*9zz!$D7=zz!!!Q0rVuouz
-!!!!(s8N'!zz#QOf(zz!!E9$J,fQLz!!!'"s1eU7zzs8Tk7z
-z!<<)Wzz!!%NKn,NFgz!!!!`s7cQozz5QCKYzz!$D7=z
-z!!!Q0rVuouz!!!!(s8Duuzz#QOf(zz!!E9$J,fQLz!!!'"s1eU7z!!!!"
-s8Tk7zz!<<)Wzz!!%NKn,NFgz!!!!`s6p!gzz5QCKYzz
-!$D7=zz!!!Q0qu?]sz!!!!(s8Duuzz#QOf(zz!!E9$J,fQLz
-!!!'"s*t(Lz!!!!"s8Tk7zz!<<)Wzz!!%NKhuE`Wz!!!!`s6p!gzz5QCKY
-zz!$D7=zn,NFg!!!Q0qu?]s!:Tsg!!!!0s8Duu!!)coz#QOf(!!!#oz!!E9$
-zGQ7^D!!!'"s*t(L!-eJD!!!!"s8Tk7!!%BHz!<<)W!!!"Hz!!%NKhuE`WHiO-H!!!"K
-s6p!g!.FnJz5QCKY!!%HJz!$D79!!!"Kz!!!Q0qu?]sIfKHK!!!!0s8Duu!'bu6z#QOf(!!#7!z!!E9$!!!!`huE`W!!!-$s*t(L5O\XQ!!!!"s8Tk7!'gA]
-z!<<)7!!#7`z!!%NKhuEaAs53kW!!!"Ks6p!g5QC]_z5QC3Q!$D7 at s8W-!s8W,o!!",@
-s8W-!s8W-!qu?^=s8W-!s8W-!s8Duu+92B at s8W-!s8W&u!$D7 at s8W-!s8W,u!!", at s8W-!s8W-!rVu~>
-Q
-q[1 0 0 1 0 0]concat
-70 76 true[1 0 0 1 -2490 -4558]@85 imagemask
-zp](9oz
-5QBXAz!WW3!z!"],0s*t(L!!#7`s8V!W!!!"Ks5F"Q!!!!"s8E!?qu?]s"98,r#QFc(!!iP^
-!!3+M!!",@^]4B7^]4@!s*t(LJ)C;,J,]KK!'frQ!.XtJ!!",9!!*&s!!!!@qu?ctp](9o&,ZD0s7cQo
-!"]&/"97ij!!!9(!!iPn!!!!(rr<<(huE`W"93l^s53kW!!E7O&-(Pf!!!-$^`WTl!!!!"s1f`V^]4?7!WV(Bs1eU7
-!!3,X5Q?66!!!'"n3?r'!!!!"s6tO<J,fQL!<;P<rr<$!!!*&gJ,]KK!!!$!pj`;Dzs7h*Dz
-!<;iorVuou!!*&os8Duu!!!$!q#C<nzs8;orz!<;usrVuou!!*&ss8Duu!!!$!r;ZZpz
-s8;opz!<;usqu?]s!!*&ss82is!!!$!r;ZZpzs8;opz!WW)tqu?]s!!3,ts82is!!!'"r."VE!!!!"
-s87BEz!WVqEqu?]s!!E8rJ,B9H!!!-$pj`2A!!!!$s7ehVz"98-\qu?]s!!iPn5Q1W_!!!9(
-n/qW0!!!!(s6q-0z&-(Q0rVuou!"]+f&,lP/!!!Q0^^pGF!!!!@s1em>z+9-irs*t(L!'gL6
-"93lO!!#7`!!3,8!!!"KrW!!!^]4?7s8Duus53kW!<;rs!.XJ<!!3,p!!#7Q!!!-$n,NG1qu?^%s53kW&,lP/+90+V!!iN(!'gL6!!!'"
-^]FK7zs8F,?qu?]s!'gM`s6p!g!!!Q0s8Tk7!!!!$s8W*!z!'gMQz!!!#sz~>
-Q
-q[1 0 0 1 0 0]concat
-70 76 true[1 0 0 1 -2570 -4558]@85 imagemask
-zp](9oz
-5QBXAz!WW3!z!"],0s*t(L!!#7`s8V!W!!!"Ks5F"Q!!!!"s8E!?qu?]s"98,r#QFc(!!iP^
-!!3+M!!",@^]4B7^]4@!s*t(LJ)C;,J,]KK!'frQ!.XtJ!!",9!!*&s!!!!@qu?ctp](9o&,ZD0s7cQo
-!"]&/"97ij!!!9(!!iPn!!!!(rr<<(huE`W"93l^s53kW!!E7O&-(Pf!!!-$^`WTl!!!!"s1f`V^]4?7!WV(Bs1eU7
-!!3,X5Q?66!!!'"n3?r'!!!!"s6tO<J,fQL!<;P<rr<$!!!*&gJ,]KK!!!$!pj`;Dzs7h*Dz
-!<;iorVuou!!*&os8Duu!!!$!q#C<nzs8;orz!<;usrVuou!!*&ss8Duu!!!$!r;ZZpz
-s8;opz!<;usqu?]s!!*&ss82is!!!$!r;ZZpzs8;opz!WW)tqu?]s!!3,ts82is!!!'"r."VE!!!!"
-s87BEz!WVqEqu?]s!!E8rJ,B9H!!!-$pj`2A!!!!$s7ehVz"98-\qu?]s!!iPn5Q1W_!!!9(
-n/qW0!!!!(s6q-0z&-(Q0rVuou!"]+f&,lP/!!!Q0^^pGF!!!!@s1em>z+9-irs*t(L!'gL6
-"93lO!!#7`!!3,8!!!"KrW!!!^]4?7s8Duus53kW!<;rs!.XJ<!!3,p!!#7Q!!!-$n,NG1qu?^%s53kW&,lP/+90+V!!iN(!'gL6!!!'"
-^]FK7zs8F,?qu?]s!'gM`s6p!g!!!Q0s8Tk7!!!!$s8W*!z!'gMQz!!!#sz~>
-Q
-q[1 0 0 1 0 0]concat
-127 74 true[1 0 0 1 -2642 -4560]@85 imagemask
-#QOi(s+(.Ls8VR!
-s8W,u#QOi(s+(.Ls8VR!s8W,u!WW3"n,P]Qs8E!/s8W,o!"],0J,fWMs7cQoJ,fKJ!!E9$!!!"Ks53kW
-+926=!!E9#!!!"Ks53kW#QOQ!!!3-!!!!!`s1eU7#QOQ!!!3,t!!!!`s1eU7#QO8n!!*&s!!!!@s1eU7
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"979Z!!*&s!!!!`s*t(L"979Z!!*&s!!!!`s1eU7#QN]^!!*&u!!!!`s1eU7#QN]^!!*'!!!!!`s53kW
-#QN]^!!*'!J,fS!s6p!g#QMR>!!3-"^]4 at as7cQo&-'EF!!3,sn,NIgrql`r&-'EF!!3,qp](<or-n\H+9-ik!!E8rrr<*"r',]35Q?66"98Dr5JRO(p`JDos8N'!"98Dr+9"M)p]pg0s8N'!"98Dr
-&-)\0n,r^js8Duu!'gMY"98E$huWlXs82is!!iQ!!WW3"huJ9,s82is!!*&o!.Y%K^]6V!s7cQo!!",9
-!$D7@!!!Q0s53kW!!!,r!"],/!!!-$s1eU7!!!"D!!3,p!!!"Krr<$!z!!!N0!!!!"huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -2766 -4560]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -2917 -4558]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -2979 -4525]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-51 75 true[1 0 0 1 -3067 -4558]@85 imagemask
-!!!!]!!!!=!$D7!
-!!!u at s8Vus!$D7 at s8N'!+92?Os1eUVs53m,huFl!J,g\\!$D1?!!i9!+8c*="8i- at p](9rrW"&0!!!'"
-!$C\1!!3*"+5d,!!<7Qk^]4?7s*u3,!!!$!^`S(,!!*&7++O=k!<9hVJ,fQLs54t!!!!$!i#_q!!!3,X
-*WQ0?!WV(!!!!!$s54pu!!!9(i#Vju!"]+f)uos=+917=!!!!`s1eU7!!%NK^]4?7!WW28!!!!(s8RTL!!!Q0s*t(L
-!'gM`zs8W*!!!!-$s8Duu!!iQ(qu?]s+92B9!!!"Ks8VQg!!*'!s53kW"98E$J,fQSs8W*!!!!Q0
-s82is!$D7 at n,NFgJ,fQ,!!!$!s8RTL!!*'!rVuou!WW2t!!!!$s8VQg!!!9(s1eU7!!iQ(z&-)V/
-!!!!0s7cQo!!!Q0huE`W!$D6Vz+9-ik!#tt\rr<$!)uq)[!!!!]!$D+=!!#+]+8c*=!'C6'qu?]sHiP8`!!!"H!$Ct9!!%BH&,6,)!;HO)p](9op](j"!!!&p!!i9!!!2ip#Q+Q%"8Diuqu?^!p](Eo
-!!!9!!!3'!!"\i)!<3$!+8>g9J%u&6p](:Yn,`Ra!!", at s8Vio!!iQ(rceDC!WW2h2uipY5Q?66!!~>
-Q
-q[1 0 0 1 0 0]concat
-82 67 true[1 0 0 1 -2313 -4020]@85 imagemask
-&-)\-!!!-$s8N'@
-s8W*!!!iQ(s+!?6s8N'!&-)\0^d%l!rr<$0s8W,75QCc`!!!Q0s8TkVs8W&u!!iQ(s*tX[s82is"98E$
-!!*%Lz!'frQ!.VcazJ)C;,+7K71!!!$!J,fQ[p](9o!!3*"!!!9%z"9&9#!!E3#!!!!(
-qu?]s!WN-"!!!Q)zs*t(L!$C\1!!!"K^]4?75MuMA!!#7A!!!"K^]4?7!$C\1!!*%Lz&,6,)!WN-"!!!!(
-qu?^!rVuou!!!-#!!!Q-z!!3*"!$Ct9z!<9h75O\XQzJ)C<VhuE`W!!!!`n,WL(z
-!!",9!WRZMz!"\u0rr<$!z#Q=u-z!!!!$rt##-z!!!$!TC;g\z!!%NKhuE`W
-z!'gM!zz+9-ikz!!!!0rr<$!z!!!9'zz!!iK'zz&,uV0z!!!!@
-s*t(Lz!!#7`^]4?7z!.Y%,zzs.Ac\z!!!'"&,6,)z!!E3*qu?]sz
-#Q+]'z!!!!@p]:DFz!!#7Q!.Vcaz!.Wo,5MuMAzs1eUVn,NFg!!!'"J,g,Tz
-!!E3#!!iE%z#Q+Q%"9&9#!!!!0p](9prr<$!!!",1!!!$!J,fQL!'fBA!!%MazJ%u$a!'fBA!!!$!J,fQL
-+7K71!!3*"!!!!0p](9o"9&9#!!!9%!!!!(qu?]s!!E3#!!!Q)z!WN-"!<<)u!!!-$s6p!js8W*!
-!"],0qu?j!s8N'!&-)\-!!E9$rr<$0s8Vus"98E$!!!Q0s82j!s8W*!!"],0qu?cts8Duu"98Dj!!~>
-Q
-q[1 0 0 1 0 0]concat
-65 112 true[1 0 0 1 -2408 -4018]@85 imagemask
-!$D79z!!3-"
-s*t(L!!!9(s8Vio!!!!0s8W,uz5QCc`s1eU7!'gM`s8VQg!!%NKs1f`O!!!$!s8N'$rVuous8Vus
-!<3$!!<<)g!!%Ma!!*'!huEa!huEcWs*t(L&+BQ!J,]KK!!i9!!.XnH!!!9%!!#7Q!!!!$rVup'z
-!WE'!z!!*$!z!!!$!J,fQLzJ%u$az!.Vcaz!!#7Az!!!!`huE`Wz5O\XQz
-!$C\1z!!",1z!!!!@p](9oz+8>g9z!"\i)z!!!Q-z!!!!0qu?]sz
-&,ZD-z!"\u-z!!!Q-z!!!!0rVuouz&,lP/z!"]&/z!!!Q/z!!!!0
-rVuouz&,lP/z!$D1?z!!",?z!!!!@rVuouz+8u6?z!$D1?z!!#7_z!!!!`
-rVuouzJ,TEJz!.XtJz!!*&sz!!!$!qu?]s!!!!"s82isz"989!z!!E9!
-z!!!9(p](9o!!!!0s7cQoz+92*9z!.Y%<z!!*'!n,NFg!!!'"s53kW!!!!(s8V!W
-z+92AVz!.Y%KJ,fQL!!3-"s*t(L!!!9(s8N'!!!!!`s8W&u!!!!$s8W,sz5QCc`p](9o#QOi(s6p!g
-#QOi(s8V!W!!iQ(s8W,7!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s82is!!3-"s8Vio!!!'"s8W,Wz
-s8W-!J,fQL!<<*!qu?]s!!%NKs53kW!!!"Ks8N'!z5QC3Qz!'gG_z!!"+Vz!!!!@
-^]4?7z&&8/Fz!"[ufz!!!8^z!!!!(n,NFgz#Oh]nz!!Durz!!!,rz!!!!"
-qu?]sz!W2otz!!)uuz!!!#uzzIfKHKz!.Y%Ks8Tk7!!#7`s8W,W!!!!`
-s8W-!huE`W5QCc`s6p!g!$D7 at s8VQg!!", at s8W,o!!!!0s8W-!p](9o&-)\0s7cQo!!iQ(s8Vus!!!9(
-s8W,s!!!!$s8W-!rVuou"98E$s8Duu!!3-"s8W*!z!!!!0zz#64`(z!!@`Oz!!!$"~>
-Q
-q[1 0 0 1 0 0]concat
-82 67 true[1 0 0 1 -3033 -4020]@85 imagemask
-&-)\-!!!-$s8N'@
-s8W*!!!iQ(s+!?6s8N'!&-)\0^d%l!rr<$0s8W,75QCc`!!!Q0s8TkVs8W&u!!iQ(s*tX[s82is"98E$
-!!*%Lz!'frQ!.VcazJ)C;,+7K71!!!$!J,fQ[p](9o!!3*"!!!9%z"9&9#!!E3#!!!!(
-qu?]s!WN-"!!!Q)zs*t(L!$C\1!!!"K^]4?75MuMA!!#7A!!!"K^]4?7!$C\1!!*%Lz&,6,)!WN-"!!!!(
-qu?^!rVuou!!!-#!!!Q-z!!3*"!$Ct9z!<9h75O\XQzJ)C<VhuE`W!!!!`n,WL(z
-!!",9!WRZMz!"\u0rr<$!z#Q=u-z!!!!$rt##-z!!!$!TC;g\z!!%NKhuE`W
-z!'gM!zz+9-ikz!!!!0rr<$!z!!!9'zz!!iK'zz&,uV0z!!!!@
-s*t(Lz!!#7`^]4?7z!.Y%,zzs.Ac\z!!!'"&,6,)z!!E3*qu?]sz
-#Q+]'z!!!!@p]:DFz!!#7Q!.Vcaz!.Wo,5MuMAzs1eUVn,NFg!!!'"J,g,Tz
-!!E3#!!iE%z#Q+Q%"9&9#!!!!0p](9prr<$!!!",1!!!$!J,fQL!'fBA!!%MazJ%u$a!'fBA!!!$!J,fQL
-+7K71!!3*"!!!!0p](9o"9&9#!!!9%!!!!(qu?]s!!E3#!!!Q)z!WN-"!<<)u!!!-$s6p!js8W*!
-!"],0qu?j!s8N'!&-)\-!!E9$rr<$0s8Vus"98E$!!!Q0s82j!s8W*!!"],0qu?cts8Duu"98Dj!!~>
-Q
-q[1 0 0 1 0 0]concat
-79 110 true[1 0 0 1 -3120 -4018]@85 imagemask
-z&-'EFz
-!!%NKqu?]s!!!!$s8W*!z!"],0s1eU7!!!!`quHcTz!.XJ<5PP3Y!!!$!huFksz!WRZM
-#Q=]'!!!-$!!!-$z#Q=]'!WRZM!!!Q/!!!'"^]4?7+8c*=!<:sW!!#7Y!!!"Kn,NFg5PP3Y!.XJ<
-!!%N<!!!!`p](9os6p!g!'gA]!!*&W!!!!@qu?]ts53kW!$D1?!!3,X!!!!@rVup#s1eU7!"])0!!E8:!!!!0rr<$(
-s1eU7!"]*[!!iOS!!!!(s*t(Ss*t(L!!iOS!"]*[!!!!(s1eUFs*t(L!!iP>!"])0!!!!$s53l!rr<$!
-!!E8Z!$D4@!!!!$s53l!rr<$!!!E8j!'gJ`!!!!$s6p"QrVuou!!3,h!'gG_!!!!"s6p"QrVuou!!3,p
-!.XtJ!!!!"s7cSDrVuou!!3,p!.XtJ!!!!"s7cSDrVuou!!3,p!.XtJ!!!!"s82lsrVuou!!3,t!<;rszs82ls
-qu?]s!!*&s!<;rszs82lsqu?]s!!*&s!<;rszs82lsqu?]s!!*&u!WW&tzs8E'!qu?]s
-!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u
-!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!
-qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E#uqu?]s!!*&s!<;rszs82lsqu?]s
-!!*&s!<;rszs82lsrVuou!!3,t!<<#u!!!!"s82lsrVuou!!3,t!.XtJ!!!!"s7cSDrVuou!!3,p
-!.XtJ!!!!"s7cSDrVuou!!3,p!.XtJ!!!!"s7cRYrVuou!!3,h!'gJ`!!!!$s6p"Qrr<$!!!E8j!$D4@!!!!$s6p"1
-rr<$!!!E8Z!$D4@!!!!$s53l!s*t(L!!iP^!"]*[!!!!(s1eUFs*t(L!!iP>!!iOS!!!!(s*t(Ss1eU7
-!!iOS!!iP>!!!!0s*t(Os1eU7!"])0!!E8:!!!!0rr<$"s53kW!$D1?!!3,X!!!!@rVuous6p!g!'gA]
-!!%N<!!!!`p](9oJ+*F<!'g5Y!!#7Y!!!"Kn,NFg+8c*=!<:sW!!",=!!!$!huE`W&,lP/!WTq8!!!9(!!!-$J,fQL"9/?$#QFc(!!!'"J,g,Zz!<:sW+8c*=
-!!!"Kn,P]Bz!$D+>s53kW!!!!0s8W+Lz!!E9$rr<$!zJ,f9Dz!!!Q0^]4?7~>
-Q
-q[1 0 0 1 0 0]concat
-24 18 true[1 0 0 1 -3209 -4018]@85 imagemask
-!"ZjF5O\Z&p]1?l!WW-"s8E-#rr`<$"98B's8N3$rr`<$!WW-"s8E#uquD6A!'frQ&&8~>
-Q
-q[1 0 0 1 0 0]concat
-71 108 true[1 0 0 1 -3248 -4020]@85 imagemask
-s8W-!s8W,s!<<*!
-s8W-!rW)uus8W-!s8E"Js8W-!s8W*!5QCc`s8W-!!$D7 at s8W-!rr<T0s8W-!s8RTSs8W-!s8W+L"98E$
-s8W-!^]FK8s8W-!s1eX7s8W-!s8Tk7J,fQKs8W,W!'^G`!!!!@huFjLz#Oh^(^]4?7!!2Qh#N,R^
-!!!#g!!D]jzp](Ekz!-eJEqu?]s!!#+]!<)ru!!!!=!!%KKz)uot'z!"Ju/++O=kz!"ZjF
-z!!!8^z!!!!$n,NFgz!VcWpz!!)osz!!!"Jzz56(Z`z!$?^k
-z!!!PFz!!!!(huE`Wz"7Q9jz!!Durz!!!&tzzrVuouz!.OtK
-z!!#66z!!!!@^]4?7z+5d,!z!"[ufz!!!8nz!!!!$p](9oz"8i-!z!!3'!
-z!!!$!zzs*t(Lz!.Vcaz!!%Maz!!!!`huE`Wz+7K71z!$Ct9
-z!!!Q)z!!!!0qu?]sz#Q=]'z!!iK'z!!!9(z!!!!$s*t(Lz"93lO
-z!!3,8z!!!'"^]4?7!!!!"s53kWz!<:sWz!!*&gz!!!$!n,NFgzs6p!gz!<;fo
-z!!%NDz!!!"Kp](9ozJ,B9Hz!.XnHz!!%NHz!!!"Kqu?]szJ,TEJ
-z!.XtJn,NFg!!%NJ!:Tsg!!!"KrW)]nzJ,TFmz!<<#uGQ7^D!!*&u!.4bH!!!$!rW#%\
-zs8E!^z!WW-!56(Z`!!3-!!$;1@!!!-$qu at gh!!!!$s82j=J,fQL#QO]%&&8/F!"],-!"[uf!!", at p](Qg!!!!`s7cR!p](9oJ,f9D"8i-!!<<)g!!E3#!!E9$n,NLh
-J,g,[s53kWs6p#<s8Tk7!.Y%Ks8W,7!!#7`s8W-!J,fR6s8W-!rr<$!+92B at s8Duu!!iQ(s8Vus!!!-$
-s8W,o!!!!"s8W-!huE`W!.Y%Ks1eU7!!#7`s8N'!!!!!0s8Vusz!WW2hz!!#7`z~>
-Q
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 1599 a(Figure)38 b(10:)56 b(An)37 b(o)m(v)m(er-complex)j
-(comp)s(ound)c(Mapping,)k(consisting)e(of)g(P)m(ermMaps,)i(Zo)s(omMaps)
-d(and)g(a)0 1712 y(UnitMap,)28 b(whic)m(h)e(can)g(b)s(e)g(simpli\014ed)
-f(to)i(b)s(ecome)f(a)h(single)g(UnitMap.)40 b(The)25
-b(enclosing)i(nested)f(CmpMaps)0 1825 y(ha)m(v)m(e)32
-b(b)s(een)d(omitted)j(for)e(clarit)m(y)-8 b(.)0 2194
-y(AST)p Fy(_)p FG(SIMPLIFY)25 b(tries)h(to)h(reduce)f(the)g(n)m(um)m(b)
-s(er)e(of)j(individual)e(Mappings)h(within)f(it)i(b)m(y)f(merging)g
-(neigh-)0 2307 y(b)s(ouring)21 b(comp)s(onen)m(t)i(Mappings)g
-(together.)39 b(It)23 b(will)g(do)g(this)f(with)h(b)s(oth)f(series)g
-(and)h(parallel)g(com)m(binations)0 2419 y(of)31 b(Mappings,)f(or)g(b)s
-(oth,)g(and)g(will)h(handle)f(CmpMaps)f(nested)h(to)h(an)m(y)g(depth)f
-(\()p Fu(x)p FG(6.4\).)0 2579 y(T)-8 b(o)30 b(illustrate)h(ho)m(w)e
-(AST)p Fy(_)p FG(SIMPLIFY)f(w)m(orks,)i(consider)f(the)h(com)m
-(bination)h(of)e(Mappings)g(sho)m(wn)g(in)g(Fig-)0 2692
-y(ure)h(10.)82 b(If)30 b(this)g(w)m(ere)h(con)m(tained)g(in)f(a)h
-(CmpMap,)f(it)h(could)f(b)s(e)g(simpli\014ed)g(as)g(follo)m(ws:)262
-2930 y Ft(INTEGER)40 b(SIMPLER)262 3129 y(...)262 3328
-y(SIMPLER)g(=)j(AST_SIMPLIFY\()c(CMPMAP,)h(STATUS)h(\);)0
-3579 y FG(In)34 b(this)g(case,)j(the)d(result)g(w)m(ould)g(b)s(e)g(a)h
-(simple)f(3-dimensional)h(UnitMap)g(\(the)g(iden)m(tit)m(y)h
-(Mapping\).)53 b(T)-8 b(o)0 3692 y(reac)m(h)44 b(this)f(conclusion,)48
-b(AST)p Fy(_)p FG(SIMPLIFY)42 b(will)h(ha)m(v)m(e)i(made)e(a)h(n)m(um)m
-(b)s(er)e(of)i(deductions,)i(roughly)d(as)0 3805 y(follo)m(ws:)111
-4056 y(1.)j(The)37 b(t)m(w)m(o)h(2-dimensional)g(Zo)s(omMaps)f(in)g
-(series)g(are)h(equiv)-5 b(alen)m(t)38 b(to)g(a)g(single)f(Zo)s(omMap)g
-(with)g(a)227 4169 y(com)m(bined)31 b(Zo)s(om)f(factor)h(of)g(unit)m(y)
--8 b(.)41 b(This,)30 b(in)g(turn,)f(is)i(equiv)-5 b(alen)m(t)32
-b(to)f(a)f(2-dimensional)i(UnitMap.)111 4354 y(2.)46
-b(This)32 b(UnitMap)h(in)f(parallel)i(with)e(the)g(other)h
-(1-dimensional)g(UnitMap)g(is)g(equiv)-5 b(alen)m(t)34
-b(to)f(a)g(single)227 4467 y(3-dimensional)d(UnitMap.)40
-b(This)28 b(UnitMap,)i(sandwic)m(hed)e(b)s(et)m(w)m(een)h(an)m(y)g
-(other)g(pair)g(of)f(Mappings,)227 4580 y(can)j(then)f(b)s(e)g
-(eliminated.)111 4765 y(3.)46 b(The)h(remaining)g(t)m(w)m(o)h(P)m
-(ermMaps)f(in)f(series)h(are)h(equiv)-5 b(alen)m(t)48
-b(to)f(a)h(single)f(3-dimensional)h(P)m(er-)227 4877
-y(mMap.)e(When)32 b(these)h(are)f(com)m(bined,)h(the)g(resulting)f(P)m
-(ermMap)g(is)g(found)f(to)i(b)s(e)f(equiv)-5 b(alen)m(t)33
-b(to)g(a)227 4990 y(3-dimensional)f(UnitMap.)0 5241 y(This)43
-b(example)i(is)f(a)h(little)h(con)m(triv)m(ed,)j(but)44
-b(illustrates)h(ho)m(w)f(AST)p Fy(_)p FG(SIMPLIFY)f(can)h(deal)h(with)f
-(ev)m(en)0 5354 y(quite)34 b(complicated)g(comp)s(ound)e(Mappings)h
-(through)g(a)g(series)h(of)f(incremen)m(tal)h(simpli\014cations.)50
-b(Where)0 5467 y(p)s(ossible,)32 b(this)g(will)g(result)g(in)g(either)g
-(a)h(simpler)e(comp)s(ound)g(Mapping)h(or,)g(if)g(feasible,)i(an)e
-(atomic)h(\(non-)0 5580 y(comp)s(ound\))d(Mapping,)h(as)g(here.)42
-b(If)30 b(no)h(simpli\014cation)h(is)f(p)s(ossible,)f(AST)p
-Fy(_)p FG(SIMPLIFY)g(will)h(just)g(return)0 5693 y(a)g(p)s(oin)m(ter)f
-(to)h(the)g(original)g(Mapping.)p eop end
-%%Page: 58 68
-TeXDict begin 58 67 bop 0 52 a FG(58)1891 b Fz(6)91 b(COMPOUND)31
-b(MAPPINGS)f(\(CMPMAPS\))0 351 y FG(Although)41 b(AST)p
-Fy(_)p FG(SIMPLIFY)e(cannot)i(iden)m(tify)g(ev)m(ery)g
-(simpli\014cation)h(that)f(is)f(theoretically)k(p)s(ossible,)0
-464 y(su\016cien)m(t)31 b(rules)f(are)h(included)e(to)i(deal)g(with)f
-(the)h(most)g(common)f(and)g(imp)s(ortan)m(t)g(cases.)p
-eop end
-%%Page: 59 69
-TeXDict begin 59 68 bop 3689 52 a FG(59)0 351 y FA(7)135
-b(Represen)l(ting)46 b(Co)t(ordinate)g(Systems)g(\(F)-11
-b(rames\))0 600 y FG(An)32 b(AST)f(F)-8 b(rame)33 b(is)f(an)f(Ob)5
-b(ject)32 b(that)h(is)f(used)f(to)i(represen)m(t)f(a)g(co)s(ordinate)h
-(system.)45 b(Con)m(trast)33 b(this)f(with)0 713 y(a)c(Mapping)g(\()p
-Fu(x)p FG(5\),)j(whic)m(h)d(is)g(used)f(to)i(describ)s(e)e(ho)m(w)h(to)
-h(con)m(v)m(ert)h(b)s(et)m(w)m(een)f(co)s(ordinate)g(systems.)40
-b(The)27 b(t)m(w)m(o)0 826 y(concepts)k(are)g(complemen)m(tary)h(and)d
-(w)m(e)i(will)g(see)g(ho)m(w)f(they)h(w)m(ork)f(together)i(in)e
-Fu(x)p FG(13.)0 985 y(In)d(this)h(section)g(w)m(e)g(will)g(discuss)f
-(only)h(basic)g(F)-8 b(rames,)29 b(whic)m(h)f(represen)m(t)g(Cartesian)
-g(co)s(ordinate)g(systems.)0 1098 y(More)34 b(sp)s(ecialised)f(t)m(yp)s
-(es)g(of)g(F)-8 b(rame)34 b(\()p Fx(e.g.)f FG(the)g(SkyF)-8
-b(rame,)34 b(whic)m(h)e(represen)m(ts)h(celestial)j(co)s(ordinate)e
-(sys-)0 1211 y(tems,)i(and)e(the)h(Sp)s(ecF)-8 b(rame,)36
-b(whic)m(h)f(represen)m(ts)f(sp)s(ectral)h(co)s(ordinate)g(systems\))g
-(are)g(co)m(v)m(ered)i(later)e(\()p Fu(x)p FG(8)0 1324
-y(and)24 b Fu(x)p FG(9\))h(and,)g(naturally)-8 b(,)27
-b(inherit)d(the)g(prop)s(erties)g(and)g(b)s(eha)m(viour)g(of)g(the)h
-(simple)f(F)-8 b(rames)25 b(discussed)e(here.)0 1612
-y Fw(7.1)112 b(The)38 b(F)-9 b(rame)38 b(Mo)s(del)0 1830
-y FG(The)30 b(b)s(est)f(w)m(a)m(y)i(to)g(think)f(ab)s(out)g(a)g(F)-8
-b(rame)32 b(is)e(lik)m(e)h(the)g(frame)f(that)g(y)m(ou)h(w)m(ould)f
-(plot)g(around)g(a)g(graph.)40 b(In)0 1942 y(t)m(w)m(o)34
-b(dimensions,)f(y)m(ou)g(w)m(ould)g(ha)m(v)m(e)h(an)e(\\)p
-Fp(x)p FG(")i(and)e(a)h(\\)p Fp(y)s FG(")g(axis,)h(a)g(title)g(on)e
-(the)h(graph)g(and)f(lab)s(els)h(on)f(the)0 2055 y(axes,)g(together)h
-(with)e(an)g(indication)h(of)g(the)f(ph)m(ysical)h(units)f(b)s(eing)g
-(plotted.)44 b(The)30 b(v)-5 b(alues)32 b(mark)m(ed)f(along)0
-2168 y(eac)m(h)37 b(axis)f(w)m(ould)g(b)s(e)f(formatted)h(in)f(a)h(h)m
-(uman-readable)g(w)m(a)m(y)-8 b(.)58 b(The)35 b(frame)h(around)f(a)h
-(graph)f(therefore)0 2281 y(de\014nes)e(a)h(co)s(ordinate)h(space)g
-(within)e(whic)m(h)h(y)m(ou)g(can)h(lo)s(cate)g(p)s(oin)m(ts,)g(dra)m
-(w)f(lines,)h(calculate)i(distances,)0 2394 y Fx(etc.)0
-2553 y FG(An)30 b(AST)h(F)-8 b(rame)31 b(w)m(orks)g(in)g(m)m(uc)m(h)f
-(the)h(same)h(w)m(a)m(y)-8 b(,)32 b(em)m(b)s(o)s(dying)e(all)i(of)f
-(these)g(concepts)h(and)e(a)h(few)g(more.)0 2666 y(It)f(also)h(allo)m
-(ws)g(an)m(y)f(n)m(um)m(b)s(er)f(of)h(axes,)h(whic)m(h)e(means)h(that)h
-(a)f(F)-8 b(rame)31 b(can)f(represen)m(t)g(co)s(ordinate)g(systems)0
-2779 y(with)g(an)m(y)h(n)m(um)m(b)s(er)e(of)h(dimensions.)40
-b(Y)-8 b(ou)31 b(sp)s(ecify)f(ho)m(w)h(man)m(y)f(when)g(y)m(ou)g
-(create)i(it.)0 2938 y(Remem)m(b)s(er)25 b(that)h(the)f(basic)h(F)-8
-b(rame)26 b(w)m(e)g(are)g(considering)f(here)g(is)h(completely)h
-(general.)40 b(It)25 b(kno)m(ws)g(nothing)0 3051 y(of)e(celestial)i(co)
-s(ordinates,)g(for)e(example,)i(and)d(all)h(its)g(axes)h(are)f(equiv)-5
-b(alen)m(t.)39 b(It)23 b(can)g(b)s(e)f(adapted)h(to)g(describ)s(e)0
-3164 y(an)m(y)30 b(general)g(purp)s(ose)e(Cartesian)h(co)s(ordinate)i
-(system)e(b)m(y)g(setting)i(its)e(attributes,)i(suc)m(h)e(as)g(its)h
-(Title)g(and)0 3277 y(axis)h(Lab)s(els,)f Fx(etc.)g FG(to)h
-(appropriate)g(v)-5 b(alues.)0 3565 y Fw(7.2)112 b(Creating)38
-b(a)g(F)-9 b(rame)0 3782 y FG(Creating)31 b(a)g(F)-8
-b(rame)31 b(is)f(straigh)m(tforw)m(ard)i(and)d(follo)m(ws)j(the)e
-(usual)g(pattern:)262 4017 y Ft(INCLUDE)40 b('AST_PAR')262
-4116 y(INTEGER)g(FRAME,)h(STATUS)262 4315 y(STATUS)g(=)i(0)262
-4515 y(...)262 4714 y(FRAME)e(=)i(AST_FRAME\()d(2,)i(')i(',)e(STATUS)f
-(\))0 4962 y FG(The)24 b(\014rst)g(argumen)m(t)h(of)g(the)g(AST)p
-Fy(_)p FG(FRAME)f(constructor)i(function)e(sp)s(eci\014es)g(the)h(n)m
-(um)m(b)s(er)f(of)g(axes)i(whic)m(h)0 5075 y(the)31 b(F)-8
-b(rame)31 b(should)e(ha)m(v)m(e.)0 5362 y Fw(7.3)112
-b(Using)38 b(a)g(F)-9 b(rame)39 b(as)f(a)f(Mapping)0
-5580 y FG(W)-8 b(e)38 b(should)d(brie\015y)h(p)s(oin)m(t)g(out)h(that)g
-(the)f(F)-8 b(rame)38 b(w)m(e)f(created)g(ab)s(o)m(v)m(e)h(\()p
-Fu(x)p FG(7.2\))g(is)f(also)g(a)g(Mapping)f(\()p Fu(x)p
-FG(5.1\))0 5693 y(and)30 b(therefore)h(inherits)f(the)g(prop)s(erties)g
-(and)g(b)s(eha)m(viour)g(common)g(to)h(other)g(Mappings.)p
-eop end
-%%Page: 60 70
-TeXDict begin 60 69 bop 0 52 a FG(60)1200 b Fz(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))0 351 y
-FG(One)k(w)m(a)m(y)h(to)g(see)g(this)f(is)g(to)h(set)g(the)f(F)-8
-b(rame's)34 b(Rep)s(ort)f(attribute)h(\(inherited)f(from)g(the)g
-(Mapping)g(class\))0 464 y(to)d(a)g(non-zero)g(v)-5 b(alue)30
-b(and)f(pass)g(the)g(F)-8 b(rame)31 b(p)s(oin)m(ter)e(to)h(a)g(co)s
-(ordinate)g(transformation)g(routine,)g(suc)m(h)f(as)0
-577 y(AST)p Fy(_)p FG(TRAN2.)262 836 y Ft(DOUBLE)41 b(PRECISION)e
-(XIN\()j(5)i(\),)e(YIN\()g(5)h(\),)g(XOUT\()f(5)h(\),)g(YOUT\()e(5)i
-(\))262 936 y(DATA)e(XIN)i(/)g(0D0,)f(1D0,)g(2D0,)g(3D0,)g(4D0,)g(5D0)g
-(/)262 1036 y(DATA)f(YIN)i(/)g(0D0,)f(2D0,)g(4D0,)g(6D0,)g(8D0,)g(10D0)
-g(/)262 1235 y(CALL)f(AST_SET\()g(FRAME,)g('Report=1',)e(STATUS)i(\))
-262 1335 y(CALL)g(AST_TRAN2\()f(FRAME,)h(5,)i(XIN,)f(YIN,)g(.TRUE.,)e
-(XOUT,)i(YOUT,)f(STATUS)g(\))0 1607 y FG(The)30 b(resulting)g(output)g
-(migh)m(t)h(then)g(lo)s(ok)f(lik)m(e)i(this:)227 1880
-y Fy(\(1,)47 b(2\))g(-->)g(\(1,)g(2\))227 1993 y(\(2,)g(4\))g(-->)g
-(\(2,)g(4\))227 2106 y(\(3,)g(6\))g(-->)g(\(3,)g(6\))227
-2218 y(\(4,)g(8\))g(-->)g(\(4,)g(8\))227 2331 y(\(5,)g(10\))g(-->)g
-(\(5,)g(10\))0 2604 y FG(This)39 b(is)h(not)g(v)m(ery)g(exciting)h(b)s
-(ecause)e(a)i(F)-8 b(rame)40 b(implemen)m(ts)g(an)g(iden)m(tit)m(y)h
-(transformation)f(just)f(lik)m(e)i(a)0 2717 y(UnitMap)c(\()p
-Fu(x)p FG(5.9\).)60 b(Ho)m(w)m(ev)m(er,)40 b(it)d(illustrates)g(that)g
-(a)f(F)-8 b(rame)37 b(can)g(b)s(e)e(used)h(as)g(a)h(Mapping)f(and)f
-(that)i(its)0 2830 y(Nin)30 b(and)g(Nout)h(attributes)g(are)g(b)s(oth)e
-(equal)i(to)g(the)g(n)m(um)m(b)s(er)e(of)h(F)-8 b(rame)32
-b(axes.)0 2996 y(When)d(w)m(e)i(consider)e(more)h(sp)s(ecialised)g(F)-8
-b(rames)31 b(\()p Fx(e.g.)e Fu(x)p FG(13\),)j(w)m(e)e(will)g(see)h
-(that)f(using)f(them)h(as)g(Mappings)0 3109 y(can)h(b)s(e)e(v)m(ery)i
-(useful)f(indeed.)0 3414 y Fw(7.4)112 b(F)-9 b(rame)39
-b(Axis)e(A)m(ttributes)0 3640 y FG(F)-8 b(rames)36 b(ha)m(v)m(e)h(a)e
-(n)m(um)m(b)s(er)f(of)i(attributes)g(whic)m(h)f(can)g(tak)m(e)i(m)m
-(ultiple)f(v)-5 b(alues,)37 b(one)f(for)f(eac)m(h)i(axis.)56
-b(These)0 3753 y(separate)42 b(v)-5 b(alues)42 b(are)g(iden)m(ti\014ed)
-g(b)m(y)f(app)s(ending)f(the)i(axis)g(n)m(um)m(b)s(er)e(in)h(paren)m
-(theses)h(to)g(the)g(attribute)0 3866 y(name.)76 b(F)-8
-b(or)43 b(example,)j(the)c(Lab)s(el\(1\))h(attribute)g(is)f(a)h(c)m
-(haracter)g(string)f(con)m(taining)i(the)e(lab)s(el)h(whic)m(h)0
-3979 y(app)s(ears)30 b(on)g(the)g(\014rst)g(axis.)0 4145
-y(Axis)k(attributes)h(are)g(accessed)g(in)f(the)g(same)h(w)m(a)m(y)g
-(as)f(all)h(other)g(attributes)f(\()p Fu(x)p FG(4.5,)k
-Fu(x)p FG(4.6)d(and)f Fu(x)p FG(4.7\).)54 b(F)-8 b(or)0
-4258 y(example,)31 b(the)g(Lab)s(el)f(on)g(the)h(second)f(axis)h(migh)m
-(t)g(b)s(e)f(obtained)h(as)f(follo)m(ws:)262 4517 y Ft(CHARACTER)39
-b(*)44 b(\()f(70)f(\))i(LABEL)262 4716 y(...)262 4916
-y(LABEL)d(=)i(AST_GETC\()d(FRAME,)h('Label\(2\)',)e(STATUS)i(\))0
-5188 y FG(Other)33 b(attribute)h(access)h(routines)f(\(AST)p
-Fy(_)p FG(SETx,)f(AST)p Fy(_)p FG(TEST)e(and)i(AST)p
-Fy(_)p FG(CLEAR\))g(ma)m(y)h(also)g(b)s(e)f(ap-)0 5301
-y(plied)d(to)h(axis)g(attributes)g(in)f(the)h(same)g(w)m(a)m(y)-8
-b(.)0 5467 y(If)27 b(the)h(axis)g(n)m(um)m(b)s(er)f(is)g(stored)h(in)f
-(a)h(program)g(v)-5 b(ariable,)29 b(then)e(its)i(v)-5
-b(alue)28 b(m)m(ust)f(b)s(e)g(formatted)i(to)f(generate)0
-5580 y(a)43 b(suitable)h(attribute)f(name)g(b)s(efore)g(using)f(this)h
-(to)h(access)g(the)f(attribute)h(itself.)79 b(F)-8 b(or)43
-b(example,)k(the)0 5693 y(follo)m(wing)32 b(will)f(prin)m(t)f(out)g
-(the)h(Lab)s(el)f(v)-5 b(alue)31 b(for)f(eac)m(h)i(axis)e(of)h(a)g(F)-8
-b(rame:)p eop end
-%%Page: 61 71
-TeXDict begin 61 70 bop 0 52 a Fz(7.5)92 b(F)-8 b(rame)31
-b(A)m(ttributes)2794 b FG(61)262 351 y Ft(CHARACTER)39
-b(*)44 b(\()f(10)f(\))i(AXIS)262 451 y(INTEGER)c(IAXIS)262
-650 y(...)262 849 y(DO)i(1)h(IAXIS)f(=)h(1,)g(AST_GETI\()d(FRAME,)h
-('Naxes',)f(STATUS)h(\))392 949 y(WRITE)h(\()h(AXIS,)e('\()i(I10)g(\)')
-f(\))i(IAXIS)392 1049 y(LABEL)e(=)h(AST_GETC\()d(FRAME,)h('Label\(')f
-(//)j(AXIS)f(//)h('\)',)f(STATUS)f(\))392 1148 y(WRITE)h(\()h(*,)g(199)
-f(\))h(IAXIS,)e(LABEL)44 1248 y(199)216 b(FORMAT)41 b(\()j('Label)d(',)
-h(I2,)h(':)g(',)f(A)h(\))44 1348 y(1)174 b(CONTINUE)0
-1642 y FG(Note)32 b(the)e(use)g(of)h(the)f(Naxes)i(attribute)f(to)g
-(determine)f(the)h(n)m(um)m(b)s(er)e(of)h(F)-8 b(rame)32
-b(axes.)0 1815 y(The)e(output)g(from)g(this)g(migh)m(t)h(lo)s(ok)g(lik)
-m(e)h(the)e(follo)m(wing:)227 2109 y Fy(Label)94 b(1:)48
-b(Axis)e(1)227 2222 y(Label)94 b(2:)48 b(Axis)e(2)0 2516
-y FG(In)25 b(this)h(case,)i(the)e(F)-8 b(rame's)26 b(default)g(axis)h
-(Lab)s(els)e(ha)m(v)m(e)i(b)s(een)e(rev)m(ealed)i(as)f(rather)g
-(un-exciting.)40 b(Normally)-8 b(,)0 2629 y(y)m(ou)22
-b(w)m(ould)f(set)g(m)m(uc)m(h)h(more)f(useful)g(v)-5
-b(alues,)23 b(t)m(ypically)g(when)e(y)m(ou)g(create)i(the)f(F)-8
-b(rame|p)s(erhaps)20 b(something)0 2742 y(lik)m(e:)262
-3023 y Ft(FRAME)41 b(=)i(AST_FRAME\()d(2,)i('Label\(1\)=Offset)37
-b(from)42 b(centre)f(of)i(field,')e(//)1220 3123 y('Unit\(1\))g(=mm,')g
-(//)1220 3222 y('Label\(2\)=Transmi)o(ssi)o(on)c(coefficient,')h(//)
-1220 3322 y('Unit\(2\))j(=\045',)h(STATUS)f(\))0 3616
-y FG(Here,)28 b(w)m(e)e(ha)m(v)m(e)h(also)g(set)f(the)g(\(c)m(haracter)
-i(string\))e(Unit)g(attribute)h(for)f(eac)m(h)h(axis)f(to)h(describ)s
-(e)e(the)h(ph)m(ysical)0 3729 y(units)31 b(represen)m(ted)g(on)h(that)g
-(axis.)44 b(All)32 b(the)g(attribute)g(assignmen)m(ts)g(ha)m(v)m(e)h(b)
-s(een)e(com)m(bined)g(in)m(to)i(a)f(single)0 3842 y(string,)f
-(separated)f(b)m(y)h(commas.)0 4171 y Fw(7.5)112 b(F)-9
-b(rame)39 b(A)m(ttributes)0 4408 y FG(W)-8 b(e)37 b(will)g(no)m(w)f
-(brie\015y)g(outline)g(the)h(v)-5 b(arious)36 b(attributes)h(asso)s
-(ciated)h(with)d(a)i(F)-8 b(rame)37 b(\(this)g(is,)h(of)e(course,)0
-4521 y(in)e(addition)g(to)h(those)g(inherited)f(from)f(the)i(Mapping)f
-(class\).)53 b(W)-8 b(e)35 b(will)g(not)f(delv)m(e)h(to)s(o)g(deeply)f
-(in)m(to)h(the)0 4634 y(details)22 b(of)g(eac)m(h)g(attribute,)i(for)d
-(whic)m(h)g(y)m(ou)h(should)e(consult)i(the)f(appropriate)h
-(description)f(in)g(App)s(endix)f(C.)0 4747 y(Instead,)30
-b(w)m(e)h(aim)g(simply)f(to)h(sk)m(etc)m(h)h(the)e(range)h(of)g
-(facilities)h(a)m(v)-5 b(ailable:)227 5041 y FE(Naxes)427
-5154 y FG(A)31 b(read-only)g(in)m(teger)g(giving)g(the)g(n)m(um)m(b)s
-(er)e(of)i(F)-8 b(rame)31 b(axes.)227 5310 y FE(Title)427
-5423 y FG(A)g(string)f(describing)g(the)h(co)s(ordinate)g(system)f
-(whic)m(h)h(the)f(F)-8 b(rame)31 b(represen)m(ts.)227
-5580 y FE(Lab)s(el\(axis\))427 5693 y FG(A)g(lab)s(el)f(string)h(for)f
-(eac)m(h)h(axis.)p eop end
-%%Page: 62 72
-TeXDict begin 62 71 bop 0 52 a FG(62)1200 b Fz(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))227 351
-y FE(Unit\(axis\))427 464 y FG(A)g(string)g(describing)g(the)g(ph)m
-(ysical)h(units)e(on)h(eac)m(h)h(axis.)41 b(Y)-8 b(ou)29
-b(can)g(c)m(ho)s(ose)h(whether)e(to)427 577 y(mak)m(e)33
-b(this)e(attribute)h(\\activ)m(e")j(or)c(\\passiv)m(e")i(\(using)e(AST)
-p Fy(_)p FG(SET)-8 b(A)m(CTIVEUNIT)30 b(\).)i(If)427
-690 y(activ)m(e,)j(its)c(v)-5 b(alue)32 b(will)g(b)s(e)f(tak)m(en)i(in)
-m(to)f(accoun)m(t)h(when)d(\014nding)g(the)i(Mapping)g(b)s(et)m(w)m
-(een)427 803 y(t)m(w)m(o)40 b(F)-8 b(rames)40 b(\()p
-Fx(e.g.)65 b FG(a)39 b(scaling)h(of)f(0.001)i(w)m(ould)d(b)s(e)g(used)g
-(to)i(connect)f(t)m(w)m(o)h(axis)f(with)427 916 y(units)30
-b(of)h(\\km")h(and)e(\\m"\).)42 b(If)31 b(passiv)m(e,)g(its)g(v)-5
-b(alue)32 b(is)e(ignored.)42 b(Its)31 b(use)f(is)h(describ)s(ed)e(in)
-427 1029 y(more)i(detail)g(in)f Fu(x)p FG(7.14.)227 1160
-y FE(Sym)m(b)s(ol\(axis\))427 1273 y FG(A)j(string)f(con)m(taining)i(a)
-f(\\short)f(form")h(sym)m(b)s(ol)f(\()p Fx(e.g.)g FG(lik)m(e)h(\\X")h
-(or)e(\\Y"\))i(used)d(to)i(rep-)427 1386 y(resen)m(t)e(the)g(quan)m
-(tit)m(y)g(plotted)h(on)e(eac)m(h)h(axis.)227 1517 y
-FE(Digits/Digits\(axis\))427 1630 y FG(The)g(preferred)f(n)m(um)m(b)s
-(er)h(of)g(digits)h(of)g(precision)f(to)i(b)s(e)d(used)h(when)g
-(formatting)h(v)-5 b(alues)427 1743 y(for)30 b(displa)m(y)h(on)f(eac)m
-(h)i(axis.)227 1875 y FE(F)-9 b(ormat\(axis\))427 1987
-y FG(A)45 b(string)g(con)m(taining)h(a)g Fx(format)h(sp)-5
-b(e)g(ci\014er)46 b FG(whic)m(h)f(determines)f(exactly)j(ho)m(w)e(v)-5
-b(alues)427 2100 y(should)40 b(b)s(e)h(formatted)g(for)g(displa)m(y)g
-(on)g(eac)m(h)h(axis)g(\()p Fu(x)p FG(7.6\).)75 b(If)40
-b(this)h(attribute)h(is)f(un-)427 2213 y(set,)f(the)d(formatting)i(is)e
-(based)g(on)g(the)g(Digits)i(v)-5 b(alue,)40 b(otherwise)d(the)h(F)-8
-b(ormat)38 b(string)427 2326 y(o)m(v)m(er-rides)32 b(the)e(Digits)i(v)
--5 b(alue.)227 2458 y FE(Direction\(axis\))427 2570 y
-FG(A)35 b(b)s(o)s(olean)g(\(in)m(teger\))i(v)-5 b(alue)36
-b(whic)m(h)e(indicates)i(in)f(whic)m(h)f(direction)i(eac)m(h)g(axis)f
-(should)427 2683 y(b)s(e)27 b(plotted.)40 b(If)27 b(it)h(is)f(non-zero)
-h(\(the)g(default\),)h(the)e(axis)h(should)e(b)s(e)h(plotted)h(in)f
-(the)h(con-)427 2796 y(v)m(en)m(tional)34 b(direction|)p
-Fx(i.e.)e FG(increasing)g(to)h(the)e(righ)m(t)i(for)e(the)h(abscissa)g
-(and)g(increasing)427 2909 y(up)m(w)m(ards)37 b(for)g(the)g(ordinate.)
-62 b(If)37 b(it)h(is)g(zero,)i(the)d(axis)h(should)e(b)s(e)h(plotted)h
-(in)f(rev)m(erse.)427 3022 y(This)d(attribute)h(is)f(pro)m(vided)h(as)f
-(a)h(hin)m(t)f(only)h(and)f(programs)g(are)h(free)f(to)h(ignore)g(it)g
-(if)427 3135 y(they)c(wish.)227 3266 y FE(Domain)427
-3379 y FG(A)37 b(c)m(haracter)i(string)d(whic)m(h)h(iden)m(ti\014es)g
-(the)g Fx(physic)-5 b(al)41 b(domain)d FG(to)g(whic)m(h)e(the)h(F)-8
-b(rame's)427 3492 y(co)s(ordinate)31 b(system)g(applies.)41
-b(The)30 b(primary)f(purp)s(ose)f(of)j(this)f(attribute)h(is)g(to)g
-(prev)m(en)m(t)427 3605 y(un)m(w)m(an)m(ted)24 b(con)m(v)m(ersions)h
-(from)e(o)s(ccurring)g(b)s(et)m(w)m(een)i(co)s(ordinate)f(systems)g
-(whic)m(h)f(are)h(not)427 3718 y(related.)42 b(Its)30
-b(use)g(is)h(describ)s(ed)e(in)h(more)h(detail)g(in)f
-Fu(x)p FG(7.12.)227 3849 y FE(System)427 3962 y FG(A)37
-b(c)m(haracter)h(string)f(whic)m(h)f(iden)m(ti\014es)h(the)g(sp)s
-(eci\014c)f(co)s(ordinate)h(system)g(used)f(to)h(de-)427
-4075 y(scrib)s(e)f(p)s(ositions)h(within)f(the)h(ph)m(ysical)g(domain)f
-(represen)m(ted)h(b)m(y)f(the)h(F)-8 b(rame.)60 b(F)-8
-b(or)38 b(a)427 4188 y(simple)21 b(F)-8 b(rame,)23 b(this)e(attribute)g
-(curren)m(tly)g(has)f(a)h(\014xed)f(v)-5 b(alue)21 b(of)f
-(\\Cartesian",)k(but)c(could)427 4301 y(in)30 b(principle)f(b)s(e)h
-(extended)g(to)g(include)g(options)g(suc)m(h)g(as)g(\\P)m(olar",)i
-(\\Cylindrical",)f Fx(etc)p FG(.)427 4414 y(More)26 b(sp)s(ecialised)f
-(F)-8 b(rames)25 b(suc)m(h)f(as)h(the)g(SkyF)-8 b(rame,)26
-b(TimeF)-8 b(rame)26 b(and)e(Sp)s(ecF)-8 b(rame,)26 b(re-)427
-4527 y(de\014ne)j(the)g(allo)m(w)m(ed)i(v)-5 b(alues)29
-b(to)h(b)s(e)e(appropriate)i(to)f(the)h(domain)f(whic)m(h)f(they)i
-(describ)s(e.)427 4640 y(F)-8 b(or)35 b(instance,)i(the)d(SkyF)-8
-b(rame)35 b(allo)m(ws)h(v)-5 b(alues)35 b(suc)m(h)f(as)h(\\FK4")g(and)f
-(\\Galactic",)40 b(and)427 4753 y(the)31 b(Sp)s(ecF)-8
-b(rame)30 b(allo)m(ws)i(v)-5 b(alues)31 b(suc)m(h)f(as)h(\\frequency")f
-(and)g(\\w)m(a)m(v)m(elength".)227 4884 y FE(Ep)s(o)s(c)m(h)427
-4997 y FG(This)d(v)-5 b(alue)28 b(is)g(used)e(to)j(qualify)e(a)h(co)s
-(ordinate)h(system)e(b)m(y)h(giving)g(the)g(momen)m(t)g(in)f(time)427
-5110 y(when)i(the)i(co)s(ordinates)g(are)f(correct.)42
-b(Usually)-8 b(,)31 b(this)g(will)f(b)s(e)g(the)g(date)h(of)f(observ)-5
-b(ation.)427 5223 y(The)37 b(Ep)s(o)s(c)m(h)f(v)-5 b(alue)37
-b(is)g(imp)s(ortan)m(t)g(in)g(cases)g(where)g(co)s(ordinates)g(systems)
-g(mo)m(v)m(e)h(with)427 5336 y(resp)s(ect)f(to)g(eac)m(h)g(other)g(o)m
-(v)m(er)g(time.)60 b(An)36 b(example)h(of)f(t)m(w)m(o)i(suc)m(h)e(co)s
-(ordinate)h(systems)427 5449 y(are)31 b(the)g(FK4)f(and)g(FK5)h
-(celestial)i(co)s(ordinate)e(systems.)227 5580 y FE(ObsLon)427
-5693 y FG(Sp)s(eci\014es)40 b(the)g(longitude)h(of)g(the)f(observ)m(er)
-h(\(assumed)f(to)h(b)s(e)f(on)g(the)g(surface)h(of)f(the)p
-eop end
-%%Page: 63 73
-TeXDict begin 63 72 bop 0 52 a Fz(7.6)92 b(F)-8 b(ormatting)32
-b(Axis)f(V)-8 b(alues)2541 b FG(63)427 351 y(earth\).)77
-b(The)41 b(basic)i(F)-8 b(rame)43 b(class)g(do)s(es)e(not)i(use)e(this)
-h(v)-5 b(alue,)46 b(but)41 b(sp)s(ecialised)i(sub-)427
-464 y(classes)32 b(ma)m(y)-8 b(.)45 b(F)-8 b(or)32 b(instance,)g(the)f
-(Sp)s(ecF)-8 b(rame)32 b(class)g(uses)e(it)i(to)g(calculate)i(the)d
-(relativ)m(e)427 577 y(v)m(elo)s(cit)m(y)26 b(of)e(the)f(observ)m(er)h
-(and)f(the)g(cen)m(tre)i(of)f(the)f(earth)h(for)f(use)g(in)g(con)m(v)m
-(erting)j(b)s(et)m(w)m(een)427 690 y(standards)k(of)g(rest.)227
-835 y FE(ObsLat)427 948 y FG(Sp)s(eci\014es)g(the)h(latitude)g(of)f
-(the)h(observ)m(er.)41 b(Use)31 b(in)f(conjunction)g(with)g(ObsLon.)0
-1205 y(There)i(are)h(also)g(some)g(further)f(F)-8 b(rame)33
-b(attributes,)h(not)f(describ)s(ed)e(ab)s(o)m(v)m(e,)k(whic)m(h)d(are)h
-(imp)s(ortan)m(t)f(when)0 1318 y(F)-8 b(rames)37 b(are)g(used)e(as)i
-(templates)h(to)f(searc)m(h)g(for)f(other)g(F)-8 b(rames.)60
-b(Their)35 b(use)h(go)s(es)h(b)s(ey)m(ond)f(the)g(presen)m(t)0
-1431 y(discussion.)0 1723 y Fw(7.6)112 b(F)-9 b(ormatting)38
-b(Axis)g(V)-9 b(alues)0 1943 y FG(The)23 b(co)s(ordinate)h(v)-5
-b(alues)24 b(asso)s(ciated)h(with)e(eac)m(h)i(axis)f(of)g(a)g(F)-8
-b(rame)24 b(are)g(stored)g(\()p Fx(e.g.)f FG(within)g(y)m(our)g
-(program\))0 2056 y(as)33 b(double)g(precision)g(v)-5
-b(alues.)50 b(The)32 b(F)-8 b(rame)34 b(class)g(therefore)g(pro)m
-(vides)f(a)h(function,)f(AST)p Fy(_)p FG(F)m(ORMA)-8
-b(T,)34 b(to)0 2169 y(con)m(v)m(ert)e(these)f(v)-5 b(alues)30
-b(in)m(to)i(formatted)f(strings)f(for)g(displa)m(y:)262
-2413 y Ft(CHARACTER)39 b(*)44 b(\()f(50)f(\))i(STRING)262
-2513 y(DOUBLE)d(PRECISION)e(VALUE)262 2712 y(...)262
-2911 y(STRING)i(=)i(AST_FORMAT\()c(FRAME,)i(IAXIS,)g(VALUE,)g(STATUS)g
-(\))0 3169 y FG(Here,)33 b(the)e(AST)p Fy(_)p FG(F)m(ORMA)-8
-b(T)32 b(c)m(haracter)h(function)e(is)h(passed)f(a)h(F)-8
-b(rame)33 b(p)s(oin)m(ter,)f(the)g(n)m(um)m(b)s(er)e(of)i(an)f(axis)0
-3282 y(\(IAXIS\))21 b(and)f(a)h(double)f(precision)h(v)-5
-b(alue)21 b(to)h(format)f(\(V)-10 b(ALUE\).)22 b(It)e(returns)g(a)h(c)m
-(haracter)h(string)f(con)m(taining)0 3395 y(the)31 b(formatted)g(v)-5
-b(alue.)0 3556 y(By)45 b(default,)j(the)d(formatting)h(applied)e(will)h
-(b)s(e)f(determined)g(b)m(y)g(the)h(F)-8 b(rame's)46
-b(Digits)g(attribute)f(and)0 3669 y(will)30 b(normally)g(displa)m(y)g
-(results)f(with)h(sev)m(en)g(digits)g(of)g(precision)g(\(corresp)s
-(onding)f(appro)m(ximately)i(to)f(the)0 3782 y(F)-8 b(ortran)33
-b(REAL)f(data)h(t)m(yp)s(e)f(on)g(man)m(y)g(mac)m(hines\).)48
-b(Setting)32 b(a)h(di\013eren)m(t)g(Digits)g(v)-5 b(alue,)34
-b(ho)m(w)m(ev)m(er,)g(allo)m(ws)0 3895 y(y)m(ou)40 b(to)g(adjust)e(the)
-i(precision)f(as)g(necessary)h(to)g(suit)f(the)g(accuracy)i(of)e(the)h
-(co)s(ordinate)g(data)g(y)m(ou)f(are)0 4008 y(pro)s(cessing.)i(If)30
-b(\014ner)g(con)m(trol)i(is)f(needed,)f(it)i(is)e(also)i(p)s(ossible)e
-(to)h(set)h(a)f(Digits)h(v)-5 b(alue)31 b(for)f(eac)m(h)i(individual)0
-4121 y(axis)j(b)m(y)g(app)s(ending)e(an)h(axis)h(n)m(um)m(b)s(er)f(to)h
-(the)g(attribute)g(name)g(\()p Fx(e.g.)f FG(\\Digits\(2\)"\).)58
-b(If)34 b(this)g(is)h(done,)h(it)0 4234 y(o)m(v)m(er-rides)c(the)e
-(e\013ect)i(of)f(the)f(F)-8 b(rame's)32 b(main)e(Digits)i(v)-5
-b(alue)31 b(for)f(that)h(axis.)0 4395 y(Ev)m(en)40 b(\014ner)e(con)m
-(trol)j(is)f(p)s(ossible)f(b)m(y)h(setting)h(the)e(\(c)m(haracter)j
-(string\))e(F)-8 b(ormat)41 b(attribute)f(for)g(a)g(F)-8
-b(rame)0 4508 y(axis.)65 b(The)38 b(string)g(giv)m(en)h(should)f(con)m
-(tain)h(a)g Fx(format)i(sp)-5 b(e)g(ci\014er)40 b FG(whic)m(h)e
-(explicitly)i(determines)e(ho)m(w)g(the)0 4621 y(v)-5
-b(alues)36 b(on)g(that)h(axis)f(should)f(b)s(e)h(formatted.)58
-b(This)35 b(will)i(o)m(v)m(er-ride)g(the)f(e\013ects)i(of)e(an)m(y)g
-(Digits)i(v)-5 b(alue)3679 4588 y Fv(11)3754 4621 y FG(.)0
-4734 y(Unfortunately)36 b(for)f(F)-8 b(ortran)36 b(programmers,)g(this)
-f(m)m(ust)h(b)s(e)e(a)i(C)f(language)i(format)f(sp)s(eci\014er,)3411
-4701 y Fv(12)3522 4734 y FG(so)f(y)m(ou)0 4847 y(migh)m(t)c(\014nd)e
-(the)h(Digits)i(approac)m(h)f(preferable.)0 5008 y(The)d(simplest)g(t)m
-(yp)s(e)g(of)h(format)f(sp)s(eci\014er)g(tak)m(es)h(the)g(form)e
-(\\\045m.nG",)i(where)f(\\m")h(and)e(\\n")i(are)f(in)m(tegers)0
-5121 y(giving)d(the)g(minim)m(um)e(\014eld)h(width)g(in)g(c)m
-(haracters)i(and)e(the)g(n)m(um)m(b)s(er)f(of)i(signi\014can)m(t)g
-(digits)g(to)g(displa)m(y)g(\()p Fx(e.g.)0 5234 y FG(\\\04510.5G"\).)31
-b(The)d("n")g(v)-5 b(alue)28 b(ma)m(y)h(b)s(e)e(replaced)i(b)m(y)e(an)h
-(asterisk,)i(in)d(whic)m(h)h(case)h(the)f(v)-5 b(alue)29
-b(of)f(the)g(Digits)0 5347 y(attribute)42 b(is)e(used)g(to)i(determine)
-f(the)g(n)m(um)m(b)s(er)f(of)h(signi\014can)m(t)g(digits)h(to)f(displa)
-m(y)-8 b(.)73 b(Other)41 b(formatting)p 0 5425 1512 4
-v 73 5479 a Fs(11)138 5510 y Fr(The)25 b(exception)g(to)g(this)g(rule)g
-(is)h(that)e(if)i(the)e(F)-6 b(ormat)26 b(v)l(alue)e(includes)h(a)g
-(precision)h(of)g(\\)p Fo(:)p Fn(\003)p Fr(",)h(then)d(Digits)i(will)g
-(b)r(e)f(used)f(to)0 5602 y(determine)i(the)f(actual)h(precision)h
-(used.)73 5661 y Fs(12)138 5693 y Fr(This)g(is)f(a)g(consequence)f(of)i
-(implemen)n(ting)f(the)f(AST)g(library)h(in)g(C.)p eop
-end
-%%Page: 64 74
-TeXDict begin 64 73 bop 0 52 a FG(64)1200 b Fz(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))0 351 y
-FG(options)38 b(are)h(also)g(p)s(ossible)f(and)f(if)h(y)m(ou)h(need)f
-(to)g(use)g(them)g(y)m(ou)h(ma)m(y)f(wish)g(to)h(consult)f(a)g(b)s(o)s
-(ok)g(on)g(C)0 464 y(\(see)28 b(the)f(\\prin)m(tf)7 b(")27
-b(function\),)h(remem)m(b)s(ering)f(that)g(y)m(ou)g(w)m(an)m(t)h(to)g
-(format)f(a)g(double)g(precision)g(\(C)g(double\))0 577
-y(v)-5 b(alue.)0 736 y(It)40 b(is)g(recommended)f(that)h(y)m(ou)g(use)g
-(AST)p Fy(_)p FG(F)m(ORMA)-8 b(T)40 b(whenev)m(er)f(y)m(ou)h(displa)m
-(y)g(formatted)h(co)s(ordinate)0 849 y(v)-5 b(alues,)50
-b(ev)m(en)c(although)f(y)m(ou)h(could)f(format)h(them)f(y)m(ourself)h
-(using)f(a)h(WRITE)e(statemen)m(t.)88 b(This)44 b(is)0
-961 y(b)s(ecause)34 b(it)g(puts)f(the)h(F)-8 b(rame)35
-b(in)e(con)m(trol)i(of)f(formatting.)52 b(When)34 b(y)m(ou)g(start)g
-(to)h(handle)e(more)h(elab)s(orate)0 1074 y(F)-8 b(rames)40
-b(\(represen)m(ting,)j(sa)m(y)-8 b(,)44 b(celestial)e(co)s
-(ordinates\),)h(y)m(ou)d(will)g(need)f(di\013eren)m(t)h(formatting)h
-(metho)s(ds.)0 1187 y(This)30 b(approac)m(h)g(deliv)m(ers)h(them)g
-(without)f(an)m(y)h(c)m(hange)g(to)g(y)m(our)g(soft)m(w)m(are.)0
-1346 y(Y)-8 b(ou)35 b(should)e(also)j(consider)e(regularly)h(using)e
-(the)i(AST)p Fy(_)p FG(NORM)e(routine,)j(describ)s(ed)d(b)s(elo)m(w)i
-(\()p Fu(x)p FG(7.7\),)j(for)0 1459 y(an)m(y)31 b(v)-5
-b(alues)30 b(that)h(will)g(b)s(e)f(made)g(visible)h(to)g(the)g(user)e
-(of)i(y)m(our)f(soft)m(w)m(are.)0 1746 y Fw(7.7)112 b(Normalising)39
-b(F)-9 b(rame)38 b(Co)s(ordinates)0 1963 y FG(The)f(routine)g(AST)p
-Fy(_)p FG(NORM)f(is)h(pro)m(vided)g(to)g(cop)s(e)h(with)e(the)i(fact)g
-(that)f(some)h(co)s(ordinate)g(systems)f(do)0 2076 y(not)31
-b(extend)g(inde\014nitely)f(in)g(all)i(directions.)42
-b(Some)31 b(ma)m(y)g(ha)m(v)m(e)h(b)s(oundaries,)d(outside)i(whic)m(h)g
-(co)s(ordinates)0 2189 y(are)j(meaningless,)i(while)e(others)f(wrap)g
-(around)g(on)h(themselv)m(es,)i(so)e(that)g(after)h(a)f(certain)h
-(distance)f(y)m(ou)0 2302 y(return)25 b(to)j(the)e(b)s(eginning)g
-(again)h(\(co)s(ordinate)h(systems)e(based)g(on)h(circles)g(and)f
-(spheres,)h(for)f(instance\).)40 b(A)0 2415 y(basic)29
-b(F)-8 b(rame)30 b(has)e(no)h(suc)m(h)f(complications,)j(but)d(other)h
-(more)g(sp)s(ecialised)h(F)-8 b(rames)29 b(\(suc)m(h)g(as)g(SkyF)-8
-b(rames,)0 2528 y(represen)m(ting)31 b(the)f(celestial)j(sphere|)p
-Fu(x)p FG(8\))e(do.)0 2686 y(The)f(role)i(pla)m(y)m(ed)g(b)m(y)f(AST)p
-Fy(_)p FG(NORM)f(is)h(to)g Fx(normalise)i FG(an)m(y)e(arbitrary)g(set)g
-(of)g(co)s(ordinates)h(b)m(y)f(con)m(v)m(erting)0 2799
-y(them)41 b(in)m(to)i(a)f(set)g(whic)m(h)f(is)h(\\within)f(b)s(ounds",)
-i(in)m(terpreted)f(according)g(to)h(the)e(particular)h(F)-8
-b(rame)43 b(in)0 2912 y(question.)i(F)-8 b(or)32 b(example,)h(on)f(the)
-g(celestial)i(sphere,)d(a)h(righ)m(t)g(ascension)h(v)-5
-b(alue)32 b(of)g(24)g(hours)f(or)g(more)h(can)0 3025
-y(ha)m(v)m(e)e(a)g(suitable)f(m)m(ultiple)h(of)f(24)h(hours)e
-(subtracted)h(without)g(a\013ecting)i(its)f(meaning)f(and)f(AST)p
-Fy(_)p FG(NORM)0 3138 y(w)m(ould)k(p)s(erform)e(this)i(task.)46
-b(Similarly)-8 b(,)34 b(negativ)m(e)g(v)-5 b(alues)32
-b(of)g(righ)m(t)h(ascension)f(w)m(ould)g(ha)m(v)m(e)h(a)g(m)m(ultiple)f
-(of)0 3251 y(24)26 b(hours)f(added,)h(so)f(that)h(the)g(result)f(lies)i
-(in)e(the)g(range)h(zero)g(to)h(24)f(hours.)38 b(The)25
-b(co)s(ordinates)h(in)f(question)0 3364 y(are)31 b(mo)s(di\014ed)e(in)h
-(place)h(b)m(y)g(AST)p Fy(_)p FG(NORM,)e(as)i(follo)m(ws:)262
-3596 y Ft(DOUBLE)41 b(PRECISION)e(POINT\()j(2)h(\))262
-3795 y(...)262 3994 y(CALL)e(AST_NORM\()f(FRAME,)h(POINT,)h(STATUS)f
-(\))0 4240 y FG(If)31 b(the)h(co)s(ordinates)g(supplied)e(are)i
-(initially)h(OK,)e(as)g(they)h(w)m(ould)f(alw)m(a)m(ys)i(b)s(e)e(with)g
-(a)h(basic)g(F)-8 b(rame,)33 b(then)0 4353 y(they)e(are)f(returned)g
-(unc)m(hanged.)0 4511 y(Because)39 b(the)g(main)e(purp)s(ose)g(of)h
-(AST)p Fy(_)p FG(NORM)f(is)h(to)h(con)m(v)m(ert)g(co)s(ordinates)g(in)m
-(to)g(the)f(preferred)f(range)0 4624 y(for)j(h)m(uman)g(consumption,)j
-(its)e(use)g(is)g(almost)g(alw)m(a)m(ys)i(appropriate)d(immediately)i
-(b)s(efore)f(formatting)0 4737 y(co)s(ordinate)33 b(v)-5
-b(alues)32 b(for)g(displa)m(y)h(using)e(AST)p Fy(_)p
-FG(F)m(ORMA)-8 b(T)33 b(\()p Fu(x)p FG(7.6\).)48 b(Ev)m(en)32
-b(if)g(the)h(F)-8 b(rame)33 b(in)e(question)i(do)s(es)0
-4850 y(not)d(restrict)g(the)g(range)g(of)f(co)s(ordinates,)i(so)f(that)
-g(AST)p Fy(_)p FG(NORM)e(do)s(es)h(nothing,)h(using)f(it)h(will)g(allo)
-m(w)h(y)m(ou)0 4963 y(to)j(pro)s(cess)e(other)h(more)g(sp)s(ecialised)g
-(F)-8 b(rames,)35 b(where)d(normalisation)i(is)f(imp)s(ortan)m(t,)h
-(without)f(c)m(hanging)0 5076 y(y)m(our)d(soft)m(w)m(are.)0
-5363 y Fw(7.8)112 b(Reading)39 b(F)-9 b(ormatted)37 b(Axis)h(V)-9
-b(alues)0 5580 y FG(The)41 b(pro)s(cess)h(of)g(con)m(v)m(erting)i(a)e
-(formatted)g(co)s(ordinate)h(v)-5 b(alue)42 b(for)g(a)g(F)-8
-b(rame)43 b(axis,)j(suc)m(h)41 b(as)h(migh)m(t)h(b)s(e)0
-5693 y(pro)s(duced)35 b(b)m(y)i(AST)p Fy(_)p FG(F)m(ORMA)-8
-b(T)37 b(\()p Fu(x)p FG(7.6\),)k(bac)m(k)d(in)m(to)g(a)f(n)m(umerical)h
-(\(double)f(precision\))g(v)-5 b(alue)38 b(ready)f(for)p
-eop end
-%%Page: 65 75
-TeXDict begin 65 74 bop 0 52 a Fz(7.8)92 b(Reading)31
-b(F)-8 b(ormatted)32 b(Axis)e(V)-8 b(alues)2217 b FG(65)0
-351 y(pro)s(cessing)25 b(is)g(p)s(erformed)f(b)m(y)h(AST)p
-Fy(_)p FG(UNF)m(ORMA)-8 b(T.)25 b(Ho)m(w)m(ev)m(er,)k(although)c(this)g
-(pro)s(cess)g(is)g(essen)m(tially)i(the)0 464 y(in)m(v)m(erse)k(of)g
-(that)g(p)s(erformed)d(b)m(y)j(AST)p Fy(_)p FG(F)m(ORMA)-8
-b(T,)30 b(there)h(are)g(a)f(n)m(um)m(b)s(er)f(of)i(additional)g
-(di\016culties)g(that)0 577 y(m)m(ust)f(b)s(e)g(addressed)f(in)h
-(practice.)0 749 y(The)c(main)h(use)f(for)g(AST)p Fy(_)p
-FG(UNF)m(ORMA)-8 b(T)27 b(is)g(in)f(reading)h(formatted)g(co)s
-(ordinate)h(v)-5 b(alues)27 b(whic)m(h)f(ha)m(v)m(e)i(b)s(een)0
-861 y(en)m(tered)34 b(b)m(y)f(the)h(user)f(of)g(a)h(program,)g(or)g
-(read)f(from)g(a)h(\014le.)49 b(As)34 b(suc)m(h,)g(w)m(e)g(can)f
-(rarely)h(assume)f(that)h(the)0 974 y(v)-5 b(alues)23
-b(are)f(neatly)h(formatted)g(in)f(the)h(w)m(a)m(y)g(that)g(AST)p
-Fy(_)p FG(F)m(ORMA)-8 b(T)22 b(w)m(ould)g(pro)s(duce.)37
-b(Instead,)24 b(it)e(is)h(usually)0 1087 y(desirable)29
-b(to)h(allo)m(w)h(considerable)f(\015exibilit)m(y)g(in)f(the)h(form)f
-(of)g(input)f(that)i(can)g(b)s(e)f(accommo)s(dated,)i(so)e(as)0
-1200 y(to)i(p)s(ermit)e(\\free-format")i(data)g(input)e(b)m(y)g(the)h
-(user.)40 b(In)29 b(addition,)i(w)m(e)f(ma)m(y)h(need)e(to)i(extract)g
-(individual)0 1313 y(co)s(ordinate)g(v)-5 b(alues)31
-b(em)m(b)s(edded)e(in)h(other)h(textual)h(data.)0 1485
-y(Underlying)e(these)g(requiremen)m(ts)h(is)f(the)g(ro)s(ot)h
-(di\016cult)m(y)f(that)h(the)g(textual)g(format)g(used)e(to)i(represen)
-m(t)f(a)0 1598 y(co)s(ordinate)g(v)-5 b(alue)29 b(will)g(dep)s(end)f
-(on)g(the)i(class)f(of)g(F)-8 b(rame)30 b(w)m(e)g(are)f(considering.)40
-b(F)-8 b(or)30 b(example,)g(for)f(a)g(basic)0 1710 y(F)-8
-b(rame,)29 b(AST)p Fy(_)p FG(UNF)m(ORMA)-8 b(T)28 b(ma)m(y)g(ha)m(v)m
-(e)h(to)f(read)g(a)g(v)-5 b(alue)28 b(lik)m(e)g(\\1.25E-6",)k(whereas)
-27 b(a)h(more)g(sp)s(ecialised)0 1823 y(F)-8 b(rame)37
-b(represen)m(ting)f(celestial)j(co)s(ordinates)e(ma)m(y)f(ha)m(v)m(e)i
-(to)e(handle)g(a)g(v)-5 b(alue)37 b(lik)m(e)g(\\-07d)g(49m)g(13s".)59
-b(Of)0 1936 y(course,)31 b(the)f(format)h(migh)m(t)g(also)g(dep)s(end)e
-(on)h(whic)m(h)h(axis)f(is)h(b)s(eing)f(considered.)0
-2108 y(Ideally)-8 b(,)47 b(w)m(e)42 b(w)m(ould)g(lik)m(e)i(to)f(write)f
-(soft)m(w)m(are)i(that)f(can)f(handle)g(an)m(y)h(kind)e(of)i(F)-8
-b(rame.)77 b(Ho)m(w)m(ev)m(er,)48 b(this)0 2221 y(mak)m(es)39
-b(it)f(a)g(little)i(more)e(di\016cult)f(to)i(analyse)f(textual)h(input)
-e(data)i(to)f(extract)h(individual)f(co)s(ordinate)0
-2334 y(v)-5 b(alues,)29 b(since)g(w)m(e)g(cannot)g(mak)m(e)g
-(assumptions)e(ab)s(out)h(ho)m(w)h(the)f(v)-5 b(alues)29
-b(are)f(formatted.)41 b(It)29 b(w)m(ould)f(not)g(b)s(e)0
-2446 y(safe,)39 b(for)d(example,)j(simply)c(to)j(assume)e(that)h(the)f
-(v)-5 b(alues)37 b(b)s(eing)f(read)g(are)h(separated)g(b)m(y)f(white)h
-(space.)0 2559 y(This)h(is)i(not)f(just)g(b)s(ecause)g(they)h(migh)m(t)
-g(b)s(e)e(separated)i(b)m(y)f(some)h(other)f(c)m(haracter,)44
-b(but)38 b(also)i(b)s(ecause)0 2672 y(celestial)c(co)s(ordinate)e(v)-5
-b(alues)34 b(migh)m(t)g(themselv)m(es)h(con)m(tain)g(spaces.)51
-b(In)32 b(fact,)k(to)e(b)s(e)f(completely)i(safe,)g(w)m(e)0
-2785 y(cannot)i(mak)m(e)h(an)m(y)f(assumptions)g(ab)s(out)f(ho)m(w)h(a)
-g(formatted)h(co)s(ordinate)f(v)-5 b(alue)38 b(is)f(separated)g(from)f
-(the)0 2898 y(surrounding)28 b(text,)k(except)f(that)g(it)g(should)e(b)
-s(e)h(separated)h(in)f(some)h(w)m(a)m(y)g(whic)m(h)f(is)h(not)f(am)m
-(biguous.)0 3070 y(This)22 b(is)i(the)f(v)m(ery)g(basic)h(assumption)e
-(up)s(on)g(whic)m(h)h(AST)p Fy(_)p FG(UNF)m(ORMA)-8 b(T)23
-b(w)m(orks.)39 b(It)23 b(is)g(in)m(v)m(ok)m(ed)i(as)e(follo)m(ws:)262
-3345 y Ft(INTEGER)40 b(N)262 3544 y(...)262 3743 y(N)j(=)g
-(AST_UNFORMAT\()38 b(FRAME,)j(IAXIS,)g(STRING,)g(VALUE,)g(STATUS)g(\))0
-4032 y FG(It)36 b(is)h(supplied)e(with)h(a)h(F)-8 b(rame)37
-b(p)s(oin)m(ter)f(\(FRAME\),)i(the)f(n)m(um)m(b)s(er)e(of)h(an)g(axis)h
-(\(IAXIS\))f(and)g(a)h(c)m(harac-)0 4145 y(ter)e(string)g(to)g(b)s(e)f
-(read)h(\(STRING\).)g(If)f(it)i(succeeds)f(in)f(reading)h(a)g(v)-5
-b(alue,)37 b(AST)p Fy(_)p FG(UNF)m(ORMA)-8 b(T)35 b(returns)0
-4258 y(the)h(resulting)g(co)s(ordinate)h Fx(via)f FG(its)g(p)s(en)m
-(ultimate)g(argumen)m(t)h(\(V)-10 b(ALUE\).)36 b(The)g(returned)e
-(function)i(v)-5 b(alue)0 4371 y(indicates)31 b(ho)m(w)g(man)m(y)f(c)m
-(haracters)i(w)m(ere)f(read)f(from)g(the)h(string)f(in)g(order)g(to)h
-(obtain)g(this)f(result.)0 4542 y(The)g(string)g(is)h(read)f(as)h
-(follo)m(ws:)111 4831 y(1.)46 b(An)m(y)31 b(white)f(space)h(at)g(the)g
-(start)g(is)f(skipp)s(ed)f(o)m(v)m(er.)111 5036 y(2.)46
-b(F)-8 b(urther)22 b(c)m(haracters)i(are)e(considered,)i(one)f(at)f(a)h
-(time,)i(un)m(til)d(the)g(next)h(c)m(haracter)h(no)e(longer)g(matc)m
-(hes)227 5149 y(an)m(y)35 b(of)g(the)f(acceptable)j(forms)d(of)g(input)
-g(\(giv)m(en)h(the)g(c)m(haracters)h(that)f(precede)g(it\).)53
-b(The)34 b(longest)227 5262 y(sequence)d(of)g(c)m(haracters)g(whic)m(h)
-g(matc)m(hes)g(is)f(then)h(considered)f(\\read".)111
-5467 y(3.)46 b(If)29 b(a)g(suitable)h(sequence)f(of)g(c)m(haracters)i
-(w)m(as)e(read)g(successfully)-8 b(,)30 b(it)g(is)f(con)m(v)m(erted)h
-(in)m(to)g(a)g(co)s(ordinate)227 5580 y(v)-5 b(alue)29
-b(whic)m(h)e(is)h(returned.)38 b(An)m(y)28 b(white)g(space)g(follo)m
-(wing)i(this)d(sequence)i(is)e(then)h(skipp)s(ed)e(o)m(v)m(er)j(and)227
-5693 y(the)i(total)h(n)m(um)m(b)s(er)d(of)i(c)m(haracters)g(consumed)f
-(is)h(returned)e(as)h(the)h(function)f(v)-5 b(alue.)p
-eop end
-%%Page: 66 76
-TeXDict begin 66 75 bop 0 52 a FG(66)1200 b Fz(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))111 351
-y FG(4.)46 b(If)38 b(the)g(sequence)g(of)g(c)m(haracters)h(read)f(is)g
-(empt)m(y)-8 b(,)41 b(or)d(insu\016cien)m(t)g(to)h(de\014ne)e(a)h(co)s
-(ordinate)h(v)-5 b(alue,)227 464 y(then)38 b(the)g(string)f(do)s(es)h
-(not)g(con)m(tain)h(a)f(v)-5 b(alue)38 b(to)h(read.)63
-b(In)37 b(this)g(case,)k(the)d(read)g(is)g(ab)s(orted)f(and)227
-577 y(AST)p Fy(_)p FG(UNF)m(ORMA)-8 b(T)31 b(returns)e(a)i(function)f
-(v)-5 b(alue)31 b(of)f(zero)i(and)d(no)i(co)s(ordinate)g(v)-5
-b(alue.)41 b(Ho)m(w)m(ev)m(er,)33 b(it)227 690 y(returns)c(without)i
-(error.)0 923 y(Note)43 b(that)f(failing)h(to)f(read)g(a)g(co)s
-(ordinate)g(v)-5 b(alue)42 b(do)s(es)g(not)g(constitute)h(an)e(error,)k
-(at)d(least)h(so)f(far)f(as)0 1036 y(AST)p Fy(_)p FG(UNF)m(ORMA)-8
-b(T)41 b(is)g(concerned.)73 b(Ho)m(w)m(ev)m(er,)45 b(an)c(error)g(can)g
-(o)s(ccur)g(if)g(the)g(sequence)g(of)g(c)m(haracters)0
-1148 y(read)36 b(app)s(ears)g(to)h(ha)m(v)m(e)g(the)f(correct)i(form)e
-(but)f(cannot)i(b)s(e)f(con)m(v)m(erted)h(in)m(to)g(a)g(v)-5
-b(alid)37 b(co)s(ordinate)g(v)-5 b(alue.)0 1261 y(T)m(ypically)d(,)31
-b(this)e(will)h(b)s(e)e(b)s(ecause)h(it)h(violates)h(some)e(constrain)m
-(t,)i(suc)m(h)e(as)g(a)h(limit)g(on)f(the)g(v)-5 b(alue)30
-b(of)f(one)g(of)0 1374 y(its)i(\014elds.)40 b(The)30
-b(resulting)g(error)g(message)i(will)f(giv)m(e)g(details.)0
-1530 y(F)-8 b(or)22 b(an)m(y)f(giv)m(en)h(F)-8 b(rame)22
-b(axis,)h(AST)p Fy(_)p FG(UNF)m(ORMA)-8 b(T)21 b(do)s(es)g(not)g
-(necessarily)h(alw)m(a)m(ys)g(use)f(the)g(same)g(algorithm)0
-1643 y(for)29 b(con)m(v)m(erting)j(the)e(sequence)g(of)f(c)m(haracters)
-i(it)g(reads)e(in)m(to)i(a)f(co)s(ordinate)g(v)-5 b(alue.)41
-b(This)29 b(is)g(b)s(ecause)h(some)0 1755 y(forms)44
-b(of)g(input)f(\(particularly)i(free-format)g(input\))f(can)g(b)s(e)g
-(am)m(biguous)g(and)g(migh)m(t)h(b)s(e)e(in)m(terpreted)0
-1868 y(in)d(sev)m(eral)i(w)m(a)m(ys)g(dep)s(ending)d(on)i(the)g(con)m
-(text.)73 b(F)-8 b(or)42 b(example,)i(the)d(celestial)i(longitude)f
-(\\12:34:56.7")0 1981 y(could)h(represen)m(t)g(an)g(angle)g(in)g
-(degrees)g(or)g(a)g(righ)m(t)h(ascension)f(in)g(hours.)77
-b(T)-8 b(o)43 b(decide)g(whic)m(h)g(to)h(use,)0 2094
-y(AST)p Fy(_)p FG(UNF)m(ORMA)-8 b(T)44 b(ma)m(y)g(examine)g(the)g(F)-8
-b(rame's)44 b(attributes)g(and,)i(in)e(particular,)j(the)c(appropriate)
-0 2207 y(F)-8 b(ormat\(axis\))30 b(string)d(whic)m(h)g(is)g(used)f(b)m
-(y)h(AST)p Fy(_)p FG(F)m(ORMA)-8 b(T)27 b(when)g(formatting)h(co)s
-(ordinate)g(v)-5 b(alues)27 b(\()p Fu(x)p FG(7.6\).)0
-2320 y(This)39 b(is)h(done)g(in)g(order)f(that)i(AST)p
-Fy(_)p FG(F)m(ORMA)-8 b(T)40 b(and)g(AST)p Fy(_)p FG(UNF)m(ORMA)-8
-b(T)40 b(should)f(complemen)m(t)i(eac)m(h)0 2433 y(other|so)26
-b(that)g(formatting)g(a)f(v)-5 b(alue)26 b(and)f(then)g(un-formatting)g
-(it)h(will)f(yield)h(the)f(original)i(v)-5 b(alue,)27
-b(sub)5 b(ject)0 2546 y(to)31 b(an)m(y)g(rounding)e(error.)0
-2701 y(T)-8 b(o)31 b(giv)m(e)h(a)f(simple)f(\(but)g(crucially)i
-(incomplete!\))42 b(example,)32 b(consider)e(reading)h(a)g(v)-5
-b(alue)31 b(for)f(the)g(axis)h(of)g(a)0 2814 y(basic)g(F)-8
-b(rame,)31 b(as)g(follo)m(ws:)262 3033 y Ft(N)43 b(=)g(AST_UNFORMAT\()
-38 b(FRAME,)j(IAXIS,)g(')i(1.5E6)129 b(-99.0',)41 b(VALUE,)g(STATUS)g
-(\))0 3266 y FG(AST)p Fy(_)p FG(UNF)m(ORMA)-8 b(T)28
-b(will)g(skip)g(o)m(v)m(er)h(the)f(initial)h(space)f(in)g(the)g(string)
-g(supplied)e(and)h(then)h(examine)g(eac)m(h)0 3379 y(successiv)m(e)36
-b(c)m(haracter.)55 b(It)35 b(will)g(accept)h(the)f(sequence)g(\\1.5E6")
-i(as)e(input,)g(but)f(reject)i(the)e(space)i(whic)m(h)0
-3492 y(follo)m(ws)k(b)s(ecause)f(it)g(do)s(es)g(not)g(form)f(part)h(of)
-g(the)g(format)g(of)g(a)g(\015oating)h(p)s(oin)m(t)f(n)m(um)m(b)s(er.)
-65 b(It)39 b(will)g(then)0 3605 y(con)m(v)m(ert)i(the)e(c)m(haracters)i
-(\\1.5E6")g(in)m(to)f(a)g(co)s(ordinate)g(v)-5 b(alue)40
-b(and)e(skip)h(o)m(v)m(er)h(the)g(three)f(spaces)h(whic)m(h)0
-3718 y(follo)m(w)j(them.)75 b(The)41 b(returned)f(function)i(v)-5
-b(alue)42 b(will)g(therefore)g(b)s(e)f(9,)k(equal)d(to)h(the)e(total)j
-(n)m(um)m(b)s(er)c(of)0 3831 y(c)m(haracters)33 b(consumed.)45
-b(This)31 b(result)h(ma)m(y)h(b)s(e)e(used)g(to)i(address)e(the)h
-(string)g(during)f(a)h(subsequen)m(t)f(read,)0 3943 y(so)g(as)f(to)h
-(commence)h(reading)e(at)h(the)g(start)g(of)f(\\-99.0".)0
-4099 y(Most)43 b(imp)s(ortan)m(tly)-8 b(,)46 b(ho)m(w)m(ev)m(er,)h
-(note)c(that)g(if)f(the)g(user)g(of)g(a)h(program)f(mistak)m(enly)h(en)
-m(ters)g(the)f(string)0 4212 y(\\)32 b(1.5R6.)16 b(.)g(.)f(")43
-b(instead)32 b(of)f(\\)h(1.5E6.)17 b(.)e(.)g(",)32 b(a)g(co)s(ordinate)
-g(v)-5 b(alue)31 b(of)h(1.5)g(and)e(a)i(function)f(result)g(of)g(4)h
-(will)f(b)s(e)0 4325 y(returned,)26 b(b)s(ecause)g(the)h(\\R")f(w)m
-(ould)g(prematurely)g(terminate)h(the)g(attempt)g(to)g(read)f(the)g(v)
--5 b(alue.)40 b(Because)0 4438 y(this)30 b(sort)g(of)g(mistak)m(e)h(do)
-s(es)e(not)h(automatically)j(result)d(in)f(an)h(error)f(but)g(can)h
-(pro)s(duce)f(incorrect)h(results,)0 4550 y(it)c(is)g
-FE(vital)f FG(to)i(c)m(hec)m(k)g(the)f(returned)e(function)i(v)-5
-b(alue)26 b(to)h(ensure)d(that)j(the)f(exp)s(ected)g(n)m(um)m(b)s(er)e
-(of)i(c)m(haracters)0 4663 y(ha)m(v)m(e)i(b)s(een)f(read.)40
-b(F)-8 b(or)28 b(example,)g(if)g(the)f(string)g(is)h(exp)s(ected)f(to)h
-(con)m(tain)h(exactly)g(one)e(v)-5 b(alue,)29 b(and)d(nothing)0
-4776 y(else,)31 b(then)g(the)f(follo)m(wing)i(w)m(ould)e(su\016ce:)262
-4996 y Ft(N)43 b(=)g(AST_UNFORMAT\()38 b(FRAME,)j(IAXIS,)g(STRING,)g
-(VALUE,)g(STATUS)g(\))262 5095 y(IF)h(\()h(STATUS)f(.EQ.)f(0)j(\))f
-(THEN)392 5195 y(IF)g(\()g(N)g(.LT.)f(LEN\()g(STRING)f(\))j(\))f(THEN)
-523 5295 y(<error)e(in)i(input)e(data>)392 5394 y(ELSE)523
-5494 y(<value)g(read)h(correctly>)392 5593 y(END)h(IF)262
-5693 y(END)f(IF)p eop end
-%%Page: 67 77
-TeXDict begin 67 76 bop 0 52 a Fz(7.8)92 b(Reading)31
-b(F)-8 b(ormatted)32 b(Axis)e(V)-8 b(alues)2217 b FG(67)0
-351 y(If)27 b(AST)p Fy(_)p FG(UNF)m(ORMA)-8 b(T)28 b(do)s(es)g(not)f
-(detect)i(an)f(error)f(itself,)j(w)m(e)e(c)m(hec)m(k)h(that)f(it)g(has)
-g(read)f(to)i(the)e(end)g(of)h(the)0 464 y(string.)41
-b(If)30 b(this)g(rev)m(eals)i(an)e(error,)g(the)h(v)-5
-b(alue)31 b(of)f(N)h(indicates)g(where)f(it)h(o)s(ccurred.)0
-632 y(Another)22 b(common)g(requiremen)m(t)g(is)g(to)g(obtain)h(a)f(p)s
-(osition)g(b)m(y)g(reading)g(a)g(list)g(of)g(co)s(ordinates)h(from)e(a)
-h(string)0 745 y(whic)m(h)30 b(con)m(tains)i(one)f(v)-5
-b(alue)32 b(for)e(eac)m(h)i(axis)f(of)g(a)g(F)-8 b(rame.)43
-b(W)-8 b(e)32 b(assume)e(that)i(the)e(v)-5 b(alues)31
-b(are)h(separated)f(in)0 858 y(some)26 b(unam)m(biguous)f(manner,)i(p)s
-(erhaps)d(using)h(white)h(space)h(and/or)e(some)i(unsp)s(eci\014ed)d
-(single-c)m(haracter)0 971 y(separator.)49 b(The)33 b(c)m(hoice)i(of)e
-(separator)h(is)f(up)f(to)i(the)f(data)h(supplier,)f(who)f(m)m(ust)h(c)
-m(ho)s(ose)h(it)g(so)f(as)g(not)h(to)0 1084 y(con\015ict)c(with)g(the)g
-(format)g(of)g(the)f(co)s(ordinate)i(v)-5 b(alues,)30
-b(but)f(our)h(soft)m(w)m(are)h(do)s(es)e(not)h(need)f(to)i(kno)m(w)f
-(what)0 1197 y(it)h(is.)41 b(The)30 b(follo)m(wing)h(is)g(a)g(template)
-g(algorithm)h(for)e(reading)g(data)h(in)f(this)h(form:)262
-1461 y Ft(INTEGER)40 b(I)262 1561 y(DOUBLE)h(PRECISION)e(VALUES\()i(10)
-i(\))262 1760 y(...)0 1959 y(*)87 b(Initialise)39 b(the)k(string)e
-(index.)262 2059 y(I)i(=)g(1)0 2258 y(*)87 b(Obtain)41
-b(the)h(number)f(of)i(Frame)f(axes)g(and)g(loop)g(through)e(them.)262
-2358 y(DO)i(1)h(IAXIS)f(=)h(1,)g(AST_GETI\()d(FRAME,)h('Naxes',)f
-(STATUS)h(\))0 2557 y(*)87 b(Attempt)40 b(to)j(read)f(a)h(value)f(for)g
-(this)g(axis.)392 2657 y(N)h(=)h(AST_UNFORMAT\()38 b(FRAME,)j(IAXIS,)g
-(STRING\()g(I)i(:)g(\),)218 2756 y(:)915 b(VALUES\()41
-b(IAXIS)g(\),)i(STATUS)e(\))0 2956 y(*)87 b(If)43 b(nothing)d(was)j
-(read)e(and)i(this)f(is)h(not)f(the)g(first)g(axis)g(and)g(the)g(end)h
-(of)0 3055 y(*)87 b(the)42 b(string)f(has)i(not)f(been)g(reached,)e
-(try)i(stepping)f(over)h(a)h(separator)d(and)0 3155 y(*)87
-b(reading)40 b(again.)392 3255 y(IF)j(\()g(\()g(N)h(.EQ.)d(0)j(\))f
-(.AND.)e(\()j(IAXIS)d(.GT.)h(1)h(\))g(.AND.)218 3354
-y(:)348 b(\()43 b(I)h(.LT.)d(LEN\()h(STRING)g(\))h(\))g(\))g(THEN)523
-3454 y(I)g(=)g(I)h(+)f(1)523 3553 y(N)g(=)g(AST_UNFORMAT\()c(FRAME,)i
-(IAXIS,)g(STRING\()f(I)k(:)f(\),)218 3653 y(:)1046 b(VALUES\()40
-b(IAXIS)i(\),)h(STATUS)e(\))392 3753 y(END)i(IF)0 3952
-y(*)87 b(Quit)42 b(if)g(nothing)f(was)h(read,)g(otherwise)e(move)i(on)h
-(to)f(the)h(next)f(value.)392 4052 y(IF)h(\()g(N)g(.EQ.)f(0)h(\))h(GO)e
-(TO)h(2)392 4151 y(I)g(=)h(I)f(+)g(N)44 4251 y(1)174
-b(CONTINUE)44 4350 y(2)g(CONTINUE)0 4550 y(*)87 b(Check)41
-b(for)i(possible)d(errors.)262 4649 y(IF)i(\()h(STATUS)f(.EQ.)f(0)j(\))
-f(THEN)392 4749 y(IF)g(\()g(\()g(I)h(.LT.)d(LEN\()h(STRING)g(\))h(\))g
-(.OR.)f(\()h(N)g(.EQ.)f(0)h(\))g(\))h(THEN)523 4849 y(<error)d(in)i
-(input)e(data>)392 4948 y(ELSE)523 5048 y(<values)g(read)h(correctly>)
-392 5147 y(END)h(IF)262 5247 y(END)f(IF)0 5525 y FG(In)30
-b(this)g(case,)i(the)e(v)-5 b(alue)31 b(of)g(I)f(will)g(indicate)i(the)
-e(lo)s(cation)i(of)f(an)m(y)g(input)e(error.)0 5693 y(Note)i(that)f
-(this)g(algorithm)g(is)g(insensitiv)m(e)h(to)f(the)g(precise)g(format)g
-(of)f(the)h(data)g(and)f(will)h(therefore)g(w)m(ork)p
-eop end
-%%Page: 68 78
-TeXDict begin 68 77 bop 0 52 a FG(68)1200 b Fz(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))0 351 y
-FG(with)35 b(an)m(y)h(class)g(of)g(F)-8 b(rame)36 b(and)f(an)m(y)g
-(reasonably)h(unam)m(biguous)f(input)f(data.)57 b(F)-8
-b(or)36 b(example,)h(here)f(is)f(a)0 464 y(range)c(of)f(suitable)h
-(input)f(data)h(for)f(a)h(3-dimensional)g(basic)g(F)-8
-b(rame:)227 703 y Ft(1)43 b(2.5)g(3)227 803 y(3.1,3.2,3.3)227
-903 y(1.5,)f(2.6,)g(-9.9e2)227 1002 y(-1.1+0.4-1.8)402
-1102 y(.1/.2/.3)271 1201 y(44.0)g(;)h(55.1)f(-14)0 1491
-y Fw(7.9)112 b(P)m(erm)m(uting)38 b(F)-9 b(rame)38 b(Axes)0
-1710 y FG(Once)29 b(a)g(F)-8 b(rame)30 b(has)f(b)s(een)f(created,)i(it)
-g(is)f(not)g(p)s(ossible)f(to)i(c)m(hange)g(the)f(n)m(um)m(b)s(er)f(of)
-h(axes)g(it)h(con)m(tains,)g(but)0 1823 y(it)k(is)g(p)s(ossible)g(to)h
-(c)m(hange)g(the)f(order)f(in)h(whic)m(h)f(these)i(axes)f(o)s(ccur.)51
-b(T)-8 b(o)35 b(do)f(so,)h(an)f(in)m(teger)h Fx(p)-5
-b(ermutation)0 1936 y(arr)g(ay)32 b FG(is)f(\014lled)f(with)g(the)h(n)m
-(um)m(b)s(ers)e(of)h(the)h(axes)g(so)f(as)h(to)g(sp)s(ecify)f(the)h
-(new)e(order,)i Fx(e.g:)262 2175 y Ft(INTEGER)40 b(PERM\()i(2)h(\))262
-2275 y(DATA)e(PERM)h(/)i(2,)e(1)h(/)0 2527 y FG(In)21
-b(this)g(case,)j(the)d(axes)h(of)g(a)f(2-dimensional)h(F)-8
-b(rame)23 b(could)e(b)s(e)g(in)m(terc)m(hanged)h(b)m(y)f(passing)g
-(this)g(p)s(erm)m(utation)0 2640 y(arra)m(y)45 b(to)f(the)h(AST)p
-Fy(_)p FG(PERMAXES)e(function.)81 b(That)44 b(is,)k(an)c(\()p
-Fp(x)2380 2654 y Fv(1)2420 2640 y Fp(;)15 b(x)2512 2654
-y Fv(2)2552 2640 y FG(\))44 b(co)s(ordinate)h(system)f(w)m(ould)g(b)s
-(e)0 2753 y(c)m(hanged)31 b(in)m(to)g(an)g(\()p Fp(x)749
-2767 y Fv(2)788 2753 y Fp(;)15 b(x)880 2767 y Fv(1)920
-2753 y FG(\))31 b(co)s(ordinate)g(system)g(b)m(y:)262
-2992 y Ft(CALL)41 b(AST_PERMAXES\()e(FRAME,)i(PERM,)g(STATUS)g(\))0
-3244 y FG(If)36 b(the)h(axes)g(are)g(p)s(erm)m(uted)e(more)i(than)f
-(once,)j(the)e(e\013ects)h(are)f(cum)m(ulativ)m(e.)60
-b(Y)-8 b(ou)37 b(are,)i(of)e(course,)h(not)0 3357 y(restricted)31
-b(to)g(F)-8 b(rames)31 b(with)f(only)h(t)m(w)m(o)h(axes.)0
-3647 y Fw(7.10)112 b(Selecting)38 b(F)-9 b(rame)38 b(Axes)0
-3866 y FG(An)31 b(alternativ)m(e)j(to)f(c)m(hanging)g(the)e(n)m(um)m(b)
-s(er)g(of)h(F)-8 b(rame)32 b(axes,)h(whic)m(h)f(is)f(not)h(allo)m(w)m
-(ed,)i(is)e(to)h(create)g(a)f(new)0 3979 y(F)-8 b(rame)34
-b(b)m(y)f(selecting)i(axes)f(from)e(an)h(existing)h(one.)50
-b(The)32 b(metho)s(d)h(of)g(doing)g(this)g(is)g(v)m(ery)h(similar)f(to)
-h(the)0 4091 y(w)m(a)m(y)25 b(AST)p Fy(_)p FG(PERMAXES)f(is)g(used)g
-(\()p Fu(x)p FG(7.9\),)k(in)c(that)h(w)m(e)g(supply)e(an)i(in)m(teger)h
-(arra)m(y)f(\014lled)f(with)g(the)h(n)m(um)m(b)s(ers)0
-4204 y(of)36 b(the)f(axes)i(w)m(e)e(w)m(an)m(t,)j(in)e(their)f(new)g
-(order.)56 b(In)35 b(this)g(case,)j(ho)m(w)m(ev)m(er,)h(the)c(n)m(um)m
-(b)s(er)f(of)i(arra)m(y)g(elemen)m(ts)0 4317 y(need)30
-b(not)h(equal)g(the)f(n)m(um)m(b)s(er)f(of)i(F)-8 b(rame)31
-b(axes.)0 4478 y(F)-8 b(or)26 b(example,)i(w)m(e)e(could)g(select)h
-(axes)f(3)g(and)f(2)h(\(in)g(that)g(order\))f(from)g(a)h(3-dimensional)
-h(F)-8 b(rame)26 b(as)g(follo)m(ws:)262 4717 y Ft(INTEGER)40
-b(FRAME1,)h(FRAME2,)g(MAPPING,)f(PICK\()h(2)j(\))262
-4816 y(DATA)d(PICK)h(/)i(3,)e(2)h(/)262 5016 y(...)262
-5215 y(FRAME2)e(=)i(AST_PICKAXES\()38 b(FRAME1,)j(2,)h(PICK,)g
-(MAPPING,)e(STATUS)h(\))0 5467 y FG(This)20 b(w)m(ould)h(return)e(a)i
-(p)s(oin)m(ter)g(to)h(a)f(2-dimensional)h(F)-8 b(rame)21
-b(\(FRAME2\))i(whic)m(h)d(con)m(tains)i(the)f(information)0
-5580 y(asso)s(ciated)34 b(with)e(axes)h(3)f(and)g(2,)i(in)e(that)h
-(order,)f(from)g(the)g(original)i(F)-8 b(rame)33 b(\(FRAME1\).)48
-b(The)32 b(original)0 5693 y(F)-8 b(rame)35 b(is)g(not)f(altered)i(b)m
-(y)e(this)g(pro)s(cess.)53 b(Bew)m(are,)37 b(ho)m(w)m(ev)m(er,)g(that)e
-(the)f(axis)h(information)g(ma)m(y)g(still)g(b)s(e)p
-eop end
-%%Page: 69 79
-TeXDict begin 69 78 bop 0 52 a Fz(7.11)93 b(Calculating)31
-b(Distances,)h(Angles)f(and)f(O\013sets)1774 b FG(69)0
-351 y(shared)29 b(b)m(y)h(b)s(oth)f(F)-8 b(rames,)31
-b(so)f(if)g(y)m(ou)g(wish)f(to)i(alter)g(either)f(of)g(them)g(indep)s
-(enden)m(tly)f(y)m(ou)h(ma)m(y)h(\014rst)e(need)0 464
-y(to)i(use)f(AST)p Fy(_)p FG(COPY)f(\()p Fu(x)p FG(4.12\))k(to)e(mak)m
-(e)g(an)g(indep)s(enden)m(t)e(cop)m(y)-8 b(.)0 634 y(In)38
-b(addition)h(to)g(the)g(new)g(F)-8 b(rame)39 b(p)s(oin)m(ter,)i(AST)p
-Fy(_)p FG(PICKAXES)c(will)i(also)h(return)d(a)j(p)s(oin)m(ter)e(to)i(a)
-f(new)0 747 y(Mapping)c Fx(via)f FG(its)h(fourth)f(argumen)m(t.)54
-b(This)34 b(Mapping)g(will)h(in)m(ter-relate)i(the)e(t)m(w)m(o)h(F)-8
-b(rames.)55 b(By)34 b(this)h(w)m(e)0 860 y(mean)22 b(that)h(its)f(forw)
-m(ard)g(transformation)h(will)f(con)m(v)m(ert)i(co)s(ordinates)f
-(originally)g(in)f(the)g(co)s(ordinate)h(system)0 973
-y(represen)m(ted)36 b(b)m(y)h(FRAME1)g(in)m(to)h(that)f(represen)m(ted)
-f(b)m(y)g(FRAME2,)k(while)c(its)h(in)m(v)m(erse)g(transformation)0
-1086 y(will)26 b(con)m(v)m(ert)g(in)f(the)h(opp)s(osite)f(direction.)40
-b(In)24 b(this)h(particular)h(case,)h(the)f(Mapping)f(w)m(ould)g(b)s(e)
-g(a)g(P)m(ermMap)0 1199 y(\()p Fu(x)p FG(5.10\))33 b(and)d(w)m(ould)g
-(implemen)m(t)h(the)f(follo)m(wing)i(transformations:)227
-1483 y Fy(Forward:)370 1595 y(\(1,)47 b(2,)h(3\))f(-->)g(\(3,)g(2\))370
-1708 y(\(2,)g(4,)h(6\))f(-->)g(\(6,)g(4\))370 1821 y(\(3,)g(6,)h(9\))f
-(-->)g(\(9,)g(6\))370 1934 y(\(4,)g(8,)h(12\))e(-->)h(\(12,)g(8\))370
-2047 y(\(5,)g(10,)g(15\))g(-->)g(\(15,)g(10\))227 2273
-y(Inverse:)370 2386 y(\(3,)g(2\))h(-->)e(\(<bad>,)g(2,)h(3\))370
-2499 y(\(6,)g(4\))h(-->)e(\(<bad>,)g(4,)h(6\))370 2612
-y(\(9,)g(6\))h(-->)e(\(<bad>,)g(6,)h(9\))370 2725 y(\(12,)g(8\))g(-->)g
-(\(<bad>,)f(8,)h(12\))370 2838 y(\(15,)g(10\))g(-->)g(\(<bad>,)f(10,)h
-(15\))0 3121 y FG(This)35 b(is)h(our)g(\014rst)f(in)m(tro)s(duction)h
-(to)h(the)f(idea)h(of)f(in)m(ter-relating)i(pairs)e(of)g(F)-8
-b(rames)37 b Fx(via)f FG(a)h(Mapping,)g(but)0 3234 y(this)30
-b(will)h(assume)f(a)h(cen)m(tral)h(role)f(later)g(on.)0
-3404 y(Note)42 b(that)f(when)f(using)g(AST)p Fy(_)p FG(PICKAXES,)f(it)i
-(is)g(also)g(p)s(ossible)g(to)g(request)g(more)g(axes)g(than)f(there)0
-3517 y(w)m(ere)f(in)f(the)h(original)g(F)-8 b(rame.)66
-b(This)38 b(will)h(in)m(v)m(olv)m(e)h(selecting)h(axes)e(from)f(the)g
-(original)i(F)-8 b(rame)40 b(that)f(do)0 3630 y(not)i(exist.)71
-b(T)-8 b(o)40 b(do)h(this,)h(the)f(corresp)s(onding)e(axis)i(n)m(um)m
-(b)s(er)e(\(in)h(the)h(PICK)e(arra)m(y\))i(should)e(b)s(e)h(set)h(to)0
-3743 y(zero)30 b(and)e(the)i(e\013ect)g(is)g(to)f(in)m(tro)s(duce)g(an)
-g(additional)i(new)d(axis)i(whic)m(h)f(is)g(not)g(deriv)m(ed)g(from)g
-(the)g(original)0 3856 y(F)-8 b(rame.)41 b(This)28 b(axis)h(will)h(ha)m
-(v)m(e)g(default)f(v)-5 b(alues)29 b(for)g(all)g(its)h(attributes.)40
-b(Y)-8 b(ou)30 b(will)f(need)f(to)i(do)f(this)f(b)s(ecause)0
-3969 y(AST)p Fy(_)p FG(PICKAXES)g(do)s(es)i(not)h(allo)m(w)h(y)m(ou)e
-(to)i(select)f(an)m(y)g(of)g(the)f(original)i(axes)f(more)f(than)g
-(once.)3475 3936 y Fv(13)0 4286 y Fw(7.11)112 b(Calculating)39
-b(Distances,)f(Angles)g(and)g(O\013sets)0 4518 y FG(Some)e(complemen)m
-(tary)g(routines)g(are)g(pro)m(vided)f(for)g(use)h(with)f(F)-8
-b(rames)36 b(to)h(allo)m(w)g(y)m(ou)e(to)i(p)s(erform)d(geo-)0
-4631 y(metric)d(op)s(erations)g(without)f(needing)h(to)g(kno)m(w)f(the)
-h(nature)f(of)h(the)f(co)s(ordinate)i(system)e(represen)m(ted)h(b)m(y)0
-4744 y(the)g(F)-8 b(rame.)0 4914 y(Routines)29 b(can)h(b)s(e)f(used)f
-(to)i(\014nd)e(the)h(distance)h(b)s(et)m(w)m(een)g(t)m(w)m(o)g(p)s(oin)
-m(ts,)g(and)e(to)i(o\013set)h(a)e(sp)s(eci\014ed)g(distance)0
-5027 y(along)k(a)f(line)h(joining)f(t)m(w)m(o)h(p)s(oin)m(ts,)f
-Fx(etc.)45 b FG(In)31 b(essence,)j(these)e(de\014ne)f(the)h(metric)h
-(of)f(the)g(co)s(ordinate)h(space)0 5140 y(whic)m(h)d(the)h(F)-8
-b(rame)31 b(represen)m(ts.)41 b(In)29 b(the)i(case)g(of)g(a)g(basic)f
-(F)-8 b(rame,)32 b(this)e(is)h(a)f(Cartesian)h(metric.)0
-5310 y(The)36 b(\014rst)f(of)i(these)g(routines,)h(AST)p
-Fy(_)p FG(DIST)-8 b(ANCE,)35 b(returns)g(a)i(double)f(precision)h
-(distance)g(v)-5 b(alue)36 b(when)0 5423 y(supplied)29
-b(with)h(the)h(F)-8 b(rame)31 b(co)s(ordinates)g(of)g(t)m(w)m(o)g(p)s
-(oin)m(ts.)41 b(F)-8 b(or)31 b(example:)p 0 5516 1512
-4 v 73 5570 a Fs(13)138 5602 y Fr(It)i(will)i(probably)e(not)h(b)r(e)f
-(ob)n(vious)h(wh)n(y)f(this)g(restriction)i(is)f(necessary)-6
-b(,)36 b(but)c(consider)j(creating)f(a)g(F)-6 b(rame)34
-b(with)f(one)0 5693 y(longitude)26 b(axis)g(and)g(t)n(w)n(o)g(latitude)
-f(axes.)35 b(Whic)n(h)25 b(latitude)h(axis)h(should)e(b)r(e)h(asso)r
-(ciated)h(with)f(the)g(longitude)g(axis?)p eop end
-%%Page: 70 80
-TeXDict begin 70 79 bop 0 52 a FG(70)1200 b Fz(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))262 351
-y Ft(DOUBLE)41 b(PRECISION)e(DIST,)j(POINT1\()f(2)i(\),)g(POINT2\()d(2)
-j(\))262 451 y(DATA)e(POINT1)h(/)h(0D0,)f(0D0)g(/)262
-551 y(DATA)f(POINT2)h(/)h(1D0,)f(1D0)g(/)262 750 y(...)262
-949 y(DIST)f(=)j(AST_DISTANCE\()38 b(FRAME,)j(POINT1,)g(POINT2,)f
-(STATUS)h(\))0 1202 y FG(This)29 b(calculates)i(the)f(distance)g(b)s
-(et)m(w)m(een)g(the)g(origin)g(\(0,0\))h(and)e(a)h(p)s(oin)m(t)f(at)h
-(p)s(osition)g(\(1,1\).)42 b(In)29 b(this)g(case,)0 1315
-y(the)j(result,)h(as)f(y)m(ou)g(w)m(ould)g(exp)s(ect,)h(is)1400
-1250 y Fu(p)1476 1315 y FG(2.)46 b(Ho)m(w)m(ev)m(er,)34
-b(this)e(is)g(only)g(true)g(for)g(the)g(Cartesian)h(co)s(ordinate)0
-1428 y(system)26 b(whic)m(h)f(a)i(basic)f(F)-8 b(rame)26
-b(represen)m(ts.)40 b(In)25 b(general,)i(AST)p Fy(_)p
-FG(DIST)-8 b(ANCE)25 b(will)h(calculate)i(the)e(geo)s(desic)0
-1541 y(distance)35 b(b)s(et)m(w)m(een)f(the)g(t)m(w)m(o)h(p)s(oin)m
-(ts,)g(so)f(that)h(with)e(a)h(more)g(sp)s(ecialised)h(F)-8
-b(rame)35 b(\(suc)m(h)e(as)i(a)f(SkyF)-8 b(rame,)0 1654
-y(represen)m(ting)31 b(the)f(celestial)j(sphere\))d(a)h(great-circle)i
-(distance)e(migh)m(t)g(b)s(e)f(returned.)0 1814 y(The)39
-b(AST)p Fy(_)p FG(OFFSET)g(routine)h(is)g(really)h(the)f(in)m(v)m(erse)
-g(of)h(AST)p Fy(_)p FG(DIST)-8 b(ANCE.)39 b(Giv)m(en)h(t)m(w)m(o)i(p)s
-(oin)m(ts)d(in)h(a)0 1927 y(F)-8 b(rame,)40 b(it)d(calculates)i(the)f
-(co)s(ordinates)f(of)g(a)h(third)e(p)s(oin)m(t)h(whic)m(h)f(is)h
-(o\013set)h(a)g(sp)s(eci\014ed)e(distance)i(a)m(w)m(a)m(y)0
-2040 y(from)30 b(the)g(\014rst)g(p)s(oin)m(t)g(along)i(the)e(geo)s
-(desic)i(joining)f(it)f(to)i(the)e(second)h(one.)41 b(F)-8
-b(or)31 b(example:)262 2279 y Ft(DOUBLE)41 b(PRECISION)e(POINT1\()i(2)i
-(\),)g(POINT2\()e(2)i(\),)g(POINT3\()d(2)k(\))262 2379
-y(DATA)d(POINT1)h(/)h(0D0,)f(0D0)g(/)262 2479 y(DATA)f(POINT2)h(/)h
-(1D0,)f(1D0)g(/)262 2678 y(...)262 2877 y(CALL)f(AST_OFFSET\()e(FRAME,)
-j(POINT1,)e(POINT2,)h(0.5D0,)g(POINT3,)g(STATUS)g(\))0
-3130 y FG(This)28 b(w)m(ould)h(\014ll)g(the)h(POINT3)f(arra)m(y)g(with)
-g(the)g(co)s(ordinates)h(of)g(a)f(p)s(oin)m(t)g(whic)m(h)g(is)h
-(o\013set)g(0.5)g(units)f(a)m(w)m(a)m(y)0 3243 y(from)35
-b(the)h(origin)g(\(0,0\))i(in)e(the)f(direction)i(of)f(the)g(p)s
-(osition)g(\(1,1\).)58 b(Again,)39 b(this)c(is)h(a)g(simple)g(result)g
-(in)f(a)0 3356 y(Cartesian)j(F)-8 b(rame,)40 b(as)e(v)-5
-b(arying)38 b(the)f(o\013set)i(will)f(trace)g(out)g(a)g(straigh)m(t)g
-(line.)63 b(On)36 b(the)i(celestial)i(sphere,)0 3469
-y(ho)m(w)m(ev)m(er)32 b(\()p Fx(e.g.)e FG(using)g(a)g(SkyF)-8
-b(rame\),)32 b(it)f(w)m(ould)f(trace)h(out)g(a)g(great)g(circle.)0
-3629 y(The)d(routines)h(AST)p Fy(_)p FG(AXDIST)-8 b(ANCE)27
-b(and)h(AST)p Fy(_)p FG(AX)m(OFFSET)g(are)h(similar)g(to)h(AST)p
-Fy(_)p FG(DIST)-8 b(ANCE)27 b(and)0 3742 y(AST)p Fy(_)p
-FG(OFFSET,)g(except)i(that)g(the)g(curv)m(es)f(whic)m(h)g(they)h(use)e
-(as)i(\\straigh)m(t)h(lines")f(are)g(not)f(geo)s(desics,)i(but)0
-3855 y(curv)m(es)25 b(parallel)i(to)f(a)f(sp)s(eci\014ed)g(axis)1284
-3822 y Fv(14)1359 3855 y FG(.)39 b(One)25 b(reason)h(for)f(using)f
-(these)i(routines)f(is)h(to)g(deal)f(with)g(the)h(cyclic)0
-3968 y(am)m(biguit)m(y)32 b(of)e(longitude)h(and)f(latitude)h(axes.)0
-4128 y(The)42 b(AST)p Fy(_)p FG(OFFSET2)f(routine)h(is)h(similar)f(to)h
-(AST)p Fy(_)p FG(OFFSET,)e(but)h(instead)g(of)h(using)f(the)g(geo)s
-(desic)0 4241 y(whic)m(h)31 b(passes)g(through)g(t)m(w)m(o)h(p)s
-(ositions,)g(it)g(uses)e(the)i(geo)s(desic)g(whic)m(h)f(passes)g(at)h
-(a)g(giv)m(en)g(p)s(osition)f(angle)0 4354 y(through)f(the)g(starting)h
-(p)s(osition.)0 4515 y(P)m(osition)40 b(angles)g(are)g(alw)m(a)m(ys)g
-(measured)f(from)f(the)h(p)s(ositiv)m(e)h(direction)g(of)f(the)g
-(second)g(F)-8 b(rame)40 b(axis)g(to)0 4627 y(the)g(required)f(line,)k
-(with)d(p)s(ositiv)m(e)h(angles)g(b)s(eing)e(in)h(the)g(same)g(sense)g
-(as)h(rotation)g(from)e(the)h(p)s(ositiv)m(e)0 4740 y(direction)g(of)f
-(the)h(second)f(axis)h(to)g(the)f(p)s(ositiv)m(e)h(direction)g(of)g
-(the)f(\014rst)f(F)-8 b(rame)41 b(axis.)67 b(This)39
-b(de\014nition)0 4853 y(applies)27 b(to)h(all)g(classes)g(of)f(F)-8
-b(rame,)29 b(including)e(SkyF)-8 b(rame.)40 b(The)27
-b(default)g(ordering)g(of)g(axes)h(in)f(a)g(SkyF)-8 b(rame)0
-4966 y(mak)m(es)35 b(the)f(second)g(axis)g(equiv)-5 b(alen)m(t)36
-b(to)e(north,)h(and)e(so)h(the)h(de\014nition)e(of)h(p)s(osition)g
-(angle)h(giv)m(en)g(ab)s(o)m(v)m(e)0 5079 y(corresp)s(onds)30
-b(to)h(the)h(normal)f(astronomical)h(usage,)g(\\from)f(north,)g
-(through)f(east".)44 b(Ho)m(w)m(ev)m(er,)34 b(it)d(should)0
-5192 y(b)s(e)j(remem)m(b)s(ered)g(that)i(it)f(is)g(p)s(ossible)f(to)i
-(p)s(erm)m(ute)e(the)h(axes)h(of)f(a)g(SkyF)-8 b(rame)35
-b(\(or)g(indeed)g(an)m(y)g(F)-8 b(rame\),)0 5305 y(so)32
-b(that)h(north)e(b)s(ecomes)h(axis)g(1.)46 b(In)31 b(this)h(case,)h(an)
-f(AST)f(\\p)s(osition)h(angle")i(w)m(ould)d(b)s(e)h(the)g(angle)g
-(\\from)0 5418 y(east,)c(through)d(north".)39 b(Alw)m(a)m(ys)27
-b(tak)m(e)g(the)f(axis)g(ordering)f(in)m(to)i(accoun)m(t)g(when)e
-(deriving)g(an)h(astronomical)0 5531 y(p)s(osition)k(angle)i(from)e(an)
-g(AST)g(p)s(osition)g(angle.)p 0 5607 1512 4 v 73 5661
-a Fs(14)138 5693 y Fr(F)-6 b(or)26 b(instance,)g(a)g(line)h(of)f
-(constan)n(t)g(Declination)g(is)g(not)g(a)g(geo)r(desic)p
-eop end
-%%Page: 71 81
-TeXDict begin 71 80 bop 0 52 a Fz(7.12)93 b(The)29 b(Domain)j(A)m
-(ttribute)2534 b FG(71)0 351 y(Within)35 b(a)f(Cartesian)h(co)s
-(ordinate)h(system,)f(the)g(p)s(osition)f(angle)i(of)e(a)h(geo)s(desic)
-h(\()p Fx(i.e.)e FG(a)h(straigh)m(t)g(line\))g(is)0 464
-y(constan)m(t)40 b(along)g(its)g(en)m(tire)f(length,)j(but)c(this)h(is)
-g(not)g(necessarily)h(true)f(of)g(other)g(co)s(ordinate)h(systems.)0
-577 y(Within)e(a)f(spherical)h(co)s(ordinate)g(system,)i(for)d
-(instance,)j(the)d(p)s(osition)h(angle)g(of)g(a)f(geo)s(desic)i(will)f
-(v)-5 b(ary)0 690 y(along)40 b(its)e(length)h(\(except)h(for)e(the)h
-(sp)s(ecial)g(cases)g(of)g(a)g(meridian)f(and)g(the)g(equator\).)66
-b(In)38 b(addition)h(to)0 803 y(returning)28 b(the)h(required)f
-(o\013set)i(p)s(osition,)f(the)g(AST)p Fy(_)p FG(OFFSET2)f(routine)h
-(returns)f(the)h(p)s(osition)f(angle)i(of)0 916 y(the)f(geo)s(desic)i
-(at)f(the)f(o\013set)i(p)s(osition.)40 b(This)28 b(is)i(useful)e(if)h
-(y)m(ou)h(w)m(an)m(t)g(to)g(trace)g(out)g(a)f(path)g(whic)m(h)g(in)m(v)
-m(olv)m(es)0 1029 y(turning)34 b(through)f(sp)s(eci\014ed)h(angles.)54
-b(F)-8 b(or)35 b(instance,)h(tracing)g(out)e(a)h(rectangle)h(in)e(whic)
-m(h)h(eac)m(h)g(side)g(is)f(a)0 1142 y(geo)s(desic)c(in)m(v)m(olv)m(es)
-h(turning)d(through)g(90)i(degrees)g(at)f(the)h(corners.)40
-b(T)-8 b(o)29 b(do)g(this,)g(use)g(AST)p Fy(_)p FG(OFFSET2)f(to)0
-1255 y(calculate)36 b(the)f(p)s(osition)f(of)g(eac)m(h)h(corner,)h(and)
-d(then)h(add)f(\(or)i(subtract\))f(90)h(degrees)g(from)e(the)h(p)s
-(osition)0 1367 y(angle)d(returned)f(b)m(y)g(AST)p Fy(_)p
-FG(OFFSET2.)0 1527 y(The)36 b(AST)p Fy(_)p FG(ANGLE)g(routine)h
-(calculates)i(the)e(angle)h(subtended)d(b)m(y)h(t)m(w)m(o)i(p)s(oin)m
-(ts,)h(at)e(a)g(third)f(p)s(oin)m(t.)60 b(If)0 1640 y(used)32
-b(with)g(a)h(2-dimensional)h(F)-8 b(rame)33 b(the)g(returned)f(angle)h
-(is)g(signed)g(to)g(indicate)h(the)f(sense)f(of)h(rotation)0
-1753 y(\(clo)s(c)m(kwise)j(or)e(an)m(ti-clo)s(c)m(kwise\))j(in)d
-(taking)h(the)f(\\shortest)h(route")f(from)g(the)g(\014rst)f(p)s(oin)m
-(t)h(to)h(the)f(second.)0 1866 y(If)29 b(the)h(F)-8 b(rame)31
-b(has)e(more)h(than)f(2)h(axes,)h(the)f(result)f(is)h(un-signed)f(and)g
-(is)h(alw)m(a)m(ys)h(in)e(the)h(range)g(zero)h(to)f Fp(\031)s
-FG(.)0 2026 y(The)22 b(AST)p Fy(_)p FG(AXANGLE)h(routine)g(is)f
-(similar)h(to)h(AST)p Fy(_)p FG(AXANGLE,)f(but)f(the)h(\\reference)g
-(direction",)j(from)0 2138 y(whic)m(h)k(angles)h(are)g(measured,)f(is)h
-(a)f(sp)s(eci\014ed)g(axis.)0 2298 y(The)22 b(AST)p Fy(_)p
-FG(RESOL)-10 b(VE)21 b(routine)i(resolv)m(es)h(a)f(giv)m(en)h
-(displacemen)m(t)g(within)e(a)h(F)-8 b(rame)24 b(in)m(to)g(t)m(w)m(o)g
-(comp)s(onen)m(ts,)0 2411 y(parallel)31 b(and)f(p)s(erp)s(endicular)f
-(to)i(a)f(giv)m(en)i(reference)f(direction.)0 2571 y(The)k(displacemen)
-m(t)h(is)g(sp)s(eci\014ed)e(b)m(y)i(t)m(w)m(o)g(p)s(ositions)g(within)f
-(the)g(F)-8 b(rame;)39 b(the)d(starting)g(and)f(ending)g(p)s(o-)0
-2684 y(sitions.)61 b(The)36 b(reference)h(direction)h(is)f(de\014ned)f
-(b)m(y)g(the)h(geo)s(desic)i(curv)m(e)e(passing)f(through)h(the)g
-(starting)0 2796 y(p)s(osition)23 b(and)f(a)g(third)g(sp)s(eci\014ed)g
-(p)s(osition.)38 b(The)22 b(lengths)h(of)g(the)f(t)m(w)m(o)i(comp)s
-(onen)m(ts)f(are)g(returned,)g(together)0 2909 y(with)30
-b(the)h(p)s(osition)f(on)g(the)h(reference)g(geo)s(desic)g(whic)m(h)f
-(is)h(closest)h(to)f(the)f(third)g(supplied)f(p)s(oin)m(t.)0
-3198 y Fw(7.12)112 b(The)38 b(Domain)h(A)m(ttribute)0
-3416 y FG(The)26 b(Domain)i(attribute)f(is)g(one)g(of)g(the)g(most)g
-(imp)s(ortan)m(t)g(prop)s(erties)f(of)h(a)g(F)-8 b(rame,)28
-b(although)g(the)e(concept)0 3529 y(it)j(expresses)e(can)i(sometimes)g
-(seem)f(a)g(little)i(subtle.)40 b(W)-8 b(e)29 b(will)f(in)m(tro)s(duce)
-g(it)h(here,)f(but)g(its)g(true)g(v)-5 b(alue)28 b(will)0
-3642 y(probably)i(not)g(b)s(ecome)h(apparen)m(t)g(un)m(til)f(later)i
-(\()p Fu(x)p FG(14.2\).)0 3802 y(T)-8 b(o)32 b(understand)e(the)h(need)
-h(for)f(the)g(Domain)i(attribute,)g(consider)e(using)g(di\013eren)m(t)h
-(F)-8 b(rames)32 b(to)g(represen)m(t)0 3915 y(the)f(follo)m(wing)g
-(di\013eren)m(t)g(co)s(ordinate)g(systems)g(asso)s(ciated)h(with)e(a)g
-(CCD)h(image:)111 4165 y(1.)46 b(A)31 b(co)s(ordinate)g(system)f(based)
-h(on)f(pixel)g(n)m(um)m(b)s(ers.)111 4350 y(2.)46 b(P)m(ositions)32
-b(on)e(the)h(CCD)f(c)m(hip,)g(measured)g(in)g Fp(\026)p
-FG(m.)111 4534 y(3.)46 b(P)m(ositions)32 b(in)e(the)h(fo)s(cal)g(plane)
-f(of)h(the)f(telescop)s(e,)i(measured)e(in)g(mm.)111
-4719 y(4.)46 b(A)31 b(celestial)i(co)s(ordinate)e(system,)g(measured)e
-(in)i(radians.)0 4969 y(If)h(w)m(e)g(had)g(t)m(w)m(o)i(suc)m(h)d(CCD)h
-(images,)i(w)m(e)f(migh)m(t)g(legitimately)i(w)m(an)m(t)e(to)g(align)g
-(them)f(pixel-for-pixel)i(\()p Fx(i.e.)0 5082 y FG(using)41
-b(the)i(co)s(ordinate)f(system)h(based)e(on)h(pixel)g(n)m(um)m(b)s
-(ers\))f(in)h(order)f(to,)46 b(sa)m(y)-8 b(,)46 b(divide)c(b)m(y)g(a)g
-(\015at-\014eld)0 5195 y(exp)s(osure.)d(W)-8 b(e)31 b(migh)m(t)f
-(similarly)f(consider)g(aligning)h(them)g(using)e(an)m(y)i(of)f(the)g
-(other)h(co)s(ordinate)f(systems)0 5308 y(so)f(as)f(to)i(ac)m(hiev)m(e)
-h(di\013eren)m(t)e(results.)39 b(F)-8 b(or)28 b(example,)h(w)m(e)f
-(migh)m(t)h(consider)e(merging)h(separate)g(images)h(from)0
-5420 y(a)i(CCD)f(mosaic)h(b)m(y)g(using)e(fo)s(cal)j(plane)e(p)s
-(ositions.)0 5580 y(It)g(w)m(ould)f(ob)m(viously)h(not)g(b)s(e)f
-(legitimate,)k(ho)m(w)m(ev)m(er,)e(to)g(directly)f(compare)g(p)s
-(ositions)g(in)f(one)h(image)h(mea-)0 5693 y(sured)e(in)g(pixels)h
-(with)g(p)s(ositions)f(in)h(the)g(other)g(measured)f(in)h(mm,)f(nor)h
-(to)g(equate)h(c)m(hip)f(p)s(ositions)g(in)f Fp(\026)p
-FG(m)p eop end
-%%Page: 72 82
-TeXDict begin 72 81 bop 0 52 a FG(72)1200 b Fz(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))0 351 y
-FG(with)39 b(sky)f(co)s(ordinates)i(in)e(radians.)66
-b(If)38 b(w)m(e)i(w)m(an)m(ted)f(to)h(in)m(ter-compare)g(these)f(co)s
-(ordinates,)j(w)m(e)e(w)m(ould)0 464 y(need)26 b(to)h(do)f(it)h
-(indirectly)-8 b(,)28 b(using)e(other)h(information)f(based)g(on)h(the)
-f(exp)s(erimen)m(tal)h(set-up.)39 b(F)-8 b(or)28 b(instance,)0
-577 y(w)m(e)k(migh)m(t)h(need)f(to)g(kno)m(w)g(the)h(size)f(of)g(the)h
-(pixels)f(expressed)f(in)h(mm)f(and)g(the)i(orien)m(tation)h(of)e(the)g
-(CCD)0 690 y(c)m(hip)e(in)h(the)f(fo)s(cal)h(plane.)0
-846 y(Note)24 b(that)g(it)f(is)g(not)h(simply)e(the)h(di\013erence)h
-(in)e(ph)m(ysical)i(units)e(whic)m(h)h(prev)m(en)m(ts)g(certain)h(co)s
-(ordinates)g(from)0 959 y(b)s(eing)36 b(directly)i(in)m(ter-compared)f
-(\(b)s(ecause)g(the)g(appropriate)g(unit)f(scaling)i(factors)f(could)g
-(b)s(e)f(included)0 1072 y(without)28 b(an)m(y)g(additional)h
-(information\).)41 b(Neither)28 b(is)h(it)f(the)g(fact)h(that)g
-(di\013eren)m(t)f(co)s(ordinate)h(systems)f(are)0 1185
-y(in)36 b(use)g(\(b)s(ecause)g(w)m(e)h(could)f(legitimately)j(in)m
-(ter-compare)f(t)m(w)m(o)f(di\013eren)m(t)g(celestial)h(co)s(ordinate)f
-(systems)0 1298 y(without)e(an)m(y)g(extra)g(information\).)55
-b(Instead,)36 b(it)f(is)g(the)g(di\013eren)m(t)g(nature)g(of)g(the)g
-(co)s(ordinate)h(spaces)f(to)0 1411 y(whic)m(h)30 b(these)h(co)s
-(ordinate)g(systems)g(ha)m(v)m(e)g(b)s(een)f(applied.)0
-1567 y(W)-8 b(e)45 b(normally)f(express)g(this)f(b)m(y)h(sa)m(ying)h
-(that)f(the)g(co)s(ordinate)h(systems)f(apply)g(to)g(di\013eren)m(t)h
-Fx(physic)-5 b(al)0 1680 y(domains)p FG(.)87 b(Although)45
-b(w)m(e)h(ma)m(y)f(establish)h Fx(ad)h(ho)-5 b(c)46 b
-FG(relationships)g(b)s(et)m(w)m(een)f(co)s(ordinates)h(in)f(di\013eren)
-m(t)0 1793 y(ph)m(ysical)34 b(domains,)g(they)g(are)g(not)f(in)m
-(trinsically)i(related)f(to)g(eac)m(h)h(other)f(and)f(w)m(e)g(need)h
-(to)g(supply)e(extra)0 1906 y(information)f(b)s(efore)f(w)m(e)g(can)h
-(con)m(v)m(ert)h(co)s(ordinates)f(b)s(et)m(w)m(een)g(them.)0
-2062 y(In)22 b(AST,)g(the)g(role)h(of)g(the)g(\(c)m(haracter)h
-(string\))f(Domain)g(attribute)g(is)g(to)g(assign)f(F)-8
-b(rames)24 b(to)f(their)f(resp)s(ectiv)m(e)0 2175 y(ph)m(ysical)31
-b(domains.)40 b(The)30 b(w)m(a)m(y)i(it)f(op)s(erates)f(is)h(as)f
-(follo)m(ws:)136 2411 y Fu(\017)46 b FG(Co)s(ordinate)27
-b(systems)g(whic)m(h)g(apply)f(to)i(the)f(same)g(ph)m(ysical)h(domain)e
-(\()p Fx(i.e.)h FG(whose)g(F)-8 b(rames)27 b(ha)m(v)m(e)h(the)227
-2524 y(same)j(Domain)g(v)-5 b(alue\))31 b(can)g(b)s(e)f(directly)h(in)m
-(ter-compared.)227 2671 y(If)e(the)h(domain)f(has)g(sev)m(eral)h(co)s
-(ordinate)h(systems)e(asso)s(ciated)i(with)e(it)g(\()p
-Fx(e.g.)g FG(the)h(celestial)i(sphere\),)227 2784 y(then)h(a)h(co)s
-(ordinate)g(con)m(v)m(ersion)g(ma)m(y)g(b)s(e)e(in)m(v)m(olv)m(ed.)51
-b(Otherwise,)34 b(co)s(ordinate)g(v)-5 b(alues)33 b(ma)m(y)h(simply)227
-2897 y(b)s(e)c(equated.)136 3078 y Fu(\017)46 b FG(Co)s(ordinate)40
-b(systems)f(whic)m(h)h(apply)f(to)h(di\013eren)m(t)g(ph)m(ysical)g
-(domains)f(\()p Fx(i.e.)h FG(whose)f(F)-8 b(rames)40
-b(ha)m(v)m(e)227 3191 y(di\013eren)m(t)31 b(Domain)g(v)-5
-b(alues\))31 b(cannot)g(b)s(e)f(directly)h(in)m(ter-compared.)227
-3338 y(If)39 b(an)m(y)g(relationship)g(do)s(es)g(exist)g(b)s(et)m(w)m
-(een)h(suc)m(h)e(co)s(ordinate)i(systems|and)e(it)i(need)f(not|then)227
-3451 y(additional)j(information)g(m)m(ust)f(b)s(e)g(supplied)f(in)h
-(order)f(to)i(establish)g(the)f(relationship)h(b)s(et)m(w)m(een)227
-3563 y(them)36 b(in)g(an)m(y)h(particular)f(case.)60
-b(W)-8 b(e)37 b(will)g(see)f(later)i(\()p Fu(x)p FG(13\))g(ho)m(w)e(to)
-h(establish)f(suc)m(h)g(relationships)227 3676 y(b)s(et)m(w)m(een)31
-b(F)-8 b(rames)31 b(in)f(di\013eren)m(t)h(domains.)0
-3913 y(With)g(the)g(basic)g(F)-8 b(rames)32 b(w)m(e)f(are)g
-(considering)g(here,)g(eac)m(h)h(ph)m(ysical)g(domain)e(only)h(has)g(a)
-g(single)g(\(Carte-)0 4025 y(sian\))k(co)s(ordinate)g(system)g(asso)s
-(ciated)h(with)e(it,)i(so)f(that)g(if)f(t)m(w)m(o)i(suc)m(h)e(F)-8
-b(rames)35 b(ha)m(v)m(e)h(the)f(same)g(Domain)0 4138
-y(v)-5 b(alue,)36 b(their)f(co)s(ordinate)h(systems)e(will)h(b)s(e)f
-(iden)m(tical)j(and)d(ma)m(y)h(simply)f(b)s(e)g(equated.)54
-b(With)35 b(more)g(sp)s(e-)0 4251 y(cialised)30 b(F)-8
-b(rames,)31 b(ho)m(w)m(ev)m(er,)f(more)g(than)e(one)i(co)s(ordinate)f
-(system)g(ma)m(y)h(apply)f(to)g(eac)m(h)h(domain.)41
-b(In)28 b(suc)m(h)0 4364 y(cases,)k(a)e(co)s(ordinate)i(con)m(v)m
-(ersion)f(ma)m(y)g(need)f(to)h(b)s(e)f(p)s(erformed.)0
-4520 y(When)37 b(a)g(basic)h(F)-8 b(rame)38 b(is)f(created,)j(its)e
-(Domain)f(attribute)h(defaults)f(to)h(a)g(blank)e(string.)61
-b(This)37 b(means)0 4633 y(that)h(all)h(suc)m(h)e(F)-8
-b(rames)38 b(b)s(elong)g(to)g(the)g(same)g(\(n)m(ull\))g(domain)g(b)m
-(y)f(default)h(and)f(therefore)h(describ)s(e)f(the)0
-4746 y(same)d(unsp)s(eci\014ed)f(ph)m(ysical)i(co)s(ordinate)f(space.)
-53 b(In)33 b(order)h(to)h(assign)f(a)h(F)-8 b(rame)35
-b(to)f(a)h(di\013eren)m(t)f(domain,)0 4859 y(y)m(ou)h(simply)g(need)f
-(to)i(set)f(its)g(Domain)h(v)-5 b(alue.)54 b(This)34
-b(is)h(normally)g(most)g(con)m(v)m(enien)m(tly)j(done)c(when)g(it)h(is)
-0 4972 y(created,)d(as)e(follo)m(ws:)262 5195 y Ft(FRAME1)41
-b(=)i(AST_FRAME\()c(2,)k('Domain=CCD_CHIP)o(,')37 b(//)1264
-5295 y('Unit\(1\)=micron,)o(')h(//)1264 5394 y('Unit\(2\)=micron')o(,)g
-(STATUS)j(\))262 5494 y(FRAME2)g(=)i(AST_FRAME\()c(2,)k
-('Domain=FOCAL_PL)o(ANE)o(,')37 b(//)1264 5593 y('Unit\(1\)=mm,')h(//)
-1264 5693 y('Unit\(2\)=mm',)g(STATUS)j(\))p eop end
-%%Page: 73 83
-TeXDict begin 73 82 bop 0 52 a Fz(7.13)93 b(Con)m(v)m(en)m(tions)31
-b(for)f(Domain)h(Names)2175 b FG(73)0 351 y(Here,)44
-b(w)m(e)d(ha)m(v)m(e)h(created)g(t)m(w)m(o)g(F)-8 b(rames)41
-b(in)f(di\013eren)m(t)i(ph)m(ysical)f(domains.)71 b(Although)41
-b(their)g(co)s(ordinate)0 464 y(v)-5 b(alues)30 b(all)h(ha)m(v)m(e)h
-(units)d(of)h(length,)h(they)g(cannot)f(b)s(e)g(directly)h(in)m
-(ter-compared)g(\(b)s(ecause)f(their)g(axes)h(ma)m(y)0
-577 y(b)s(e)f(rotated)h(with)f(resp)s(ect)h(to)g(eac)m(h)g(other,)g
-(for)f(instance\).)0 736 y(All)j(Domain)h(v)-5 b(alues)33
-b(are)h(automatically)h(con)m(v)m(erted)g(to)e(upp)s(er)e(case)j(and)e
-(white)h(space)h(is)e(remo)m(v)m(ed,)j(but)0 849 y(there)h(are)g(no)g
-(other)g(restrictions)g(on)g(the)g(names)g(y)m(ou)g(ma)m(y)g(use)f(to)i
-(lab)s(el)f(di\013eren)m(t)g(ph)m(ysical)g(domains.)0
-962 y(F)-8 b(rom)31 b(a)g(practical)h(p)s(oin)m(t)e(of)h(view,)f(ho)m
-(w)m(ev)m(er,)i(it)f(is)g(w)m(orth)f(follo)m(wing)i(a)f(few)f(con)m(v)m
-(en)m(tions)i(\()p Fu(x)p FG(7.13\).)0 1251 y Fw(7.13)112
-b(Con)m(v)m(en)m(tions)38 b(for)g(Domain)g(Names)0 1469
-y FG(When)31 b(c)m(ho)s(osing)g(a)h(v)-5 b(alue)31 b(for)g(the)g
-(Domain)h(attribute)f(of)g(a)g(F)-8 b(rame,)33 b(it)e(ob)m(viously)h
-(mak)m(es)f(sense)g(to)h(a)m(v)m(oid)0 1582 y(generic)d(names)g(whic)m
-(h)f(migh)m(t)h(clash)g(with)f(those)h(used)e(for)i(similar)f(\(but)g
-(subtly)g(di\013eren)m(t!\))41 b(purp)s(oses)27 b(b)m(y)0
-1695 y(other)i(programmers.)40 b(If)28 b(y)m(ou)h(are)h(dev)m(eloping)g
-(soft)m(w)m(are)g(for)e(an)h(instrumen)m(t,)g(for)g(example,)h(and)e(w)
-m(an)m(t)i(to)0 1808 y(iden)m(tify)25 b(an)f(instrumen)m(tal)h(co)s
-(ordinate)g(system,)h(then)e(it)h(is)g(sensible)f(to)h(add)f(a)h
-(distinguishing)f(pre\014x.)38 b(F)-8 b(or)0 1920 y(instance,)25
-b(y)m(ou)f(migh)m(t)f(use)g Fp(<)p FG(INST)p Fp(>)p Fy(_)p
-FG(F)m(OCAL)p Fy(_)p FG(PLANE,)e(where)i Fp(<)p FG(INST)p
-Fp(>)f FG(\()p Fx(e.g.)g FG(an)h(acron)m(ym\))h(iden)m(ti\014es)0
-2033 y(y)m(our)30 b(instrumen)m(t.)0 2193 y(F)-8 b(or)37
-b(some)g(purp)s(oses,)g(ho)m(w)m(ev)m(er,)j(a)d(standard)e(c)m(hoice)k
-(of)e(Domain)g(name)g(is)f(desirable)h(so)g(that)g(di\013eren)m(t)0
-2306 y(items)29 b(of)g(soft)m(w)m(are)h(can)e(comm)m(unicate.)42
-b(F)-8 b(or)29 b(this)g(purp)s(ose,)e(the)i(follo)m(wing)h(Domain)f
-(names)f(are)h(reserv)m(ed)0 2419 y(b)m(y)h(AST)g(and)g(the)g(use)g
-(recommended)g(b)s(elo)m(w)h(should)e(b)s(e)h(carefully)h(observ)m(ed:)
-227 2668 y FE(GRAPHICS)427 2781 y FG(Iden)m(ti\014es)25
-b(the)g(co)s(ordinate)g(space)g(used)f(b)m(y)g(an)h(underlying)e
-(computer)i(graphics)f(system)427 2893 y(to)f(sp)s(ecify)e(plotting)i
-(op)s(erations.)38 b(T)m(ypically)-8 b(,)25 b(when)c(p)s(erforming)f
-(graphical)j(op)s(erations,)427 3006 y(AST)29 b(is)h(used)g(to)g
-(de\014ne)g(additional)g(co)s(ordinate)h(systems)f(whic)m(h)g(are)g
-(related)h(to)g(these)427 3119 y(\\nativ)m(e")g(graphical)e(co)s
-(ordinates.)41 b(Plotting)30 b(ma)m(y)f(b)s(e)f(carried)g(out)h(in)f
-(an)m(y)h(of)f(these)h(co-)427 3232 y(ordinate)g(systems,)f(but)f(the)h
-(GRAPHICS)f(domain)h(iden)m(ti\014es)g(the)g(nativ)m(e)h(co)s
-(ordinates)427 3345 y(through)h(whic)m(h)g(AST)g(comm)m(unicates)i
-(with)e(the)g(underlying)g(graphics)g(system.)227 3488
-y FE(GRID)427 3601 y FG(Iden)m(ti\014es)35 b(the)f(instan)m(taneous)i
-Fx(data)i(grid)c FG(used)g(to)h(store)g(and)f(handle)g(data,)j
-(together)427 3714 y(with)f(an)f(asso)s(ciated)i(co)s(ordinate)g
-(system.)56 b(In)35 b(this)h(co)s(ordinate)g(system,)i(the)d(\014rst)g
-(el-)427 3827 y(emen)m(t)f(stored)f(in)g(an)g(arra)m(y)h(of)f(data)h
-(alw)m(a)m(ys)h(has)d(a)i(co)s(ordinate)g(v)-5 b(alue)34
-b(of)f(unit)m(y)g(at)h(its)427 3940 y(cen)m(tre)e(and)d(all)j(elemen)m
-(ts)f(ha)m(v)m(e)h(unit)e(exten)m(t.)42 b(This)30 b(applies)g(to)h(all)
-h(dimensions.)427 4067 y(If)h(data)g(are)g(copied)g(or)g(transformed)f
-(to)i(a)f(new)f(data)h(grid)g(\(b)m(y)g(whatev)m(er)g(means\),)h(or)427
-4180 y(a)29 b(subset)e(of)i(the)f(original)h(grid)f(is)h(extracted,)h
-(then)e(the)g(same)h(rules)e(apply)h(to)h(the)f(cop)m(y)427
-4293 y(or)f(subset.)40 b(Its)27 b(\014rst)f(elemen)m(t)j(therefore)e
-(has)g(GRID)h(co)s(ordinate)g(v)-5 b(alues)27 b(of)h(unit)m(y)f(at)h
-(its)427 4406 y(cen)m(tre.)62 b(Note)38 b(that)f(this)g(means)g(that)g
-(GRID)g(co)s(ordinates)h(remain)f(attac)m(hed)h(to)g(the)427
-4519 y(\014rst)c(elemen)m(t)i(of)f(the)f(data)h(grid)g(and)f(not)g(to)i
-(its)e(data)i(con)m(ten)m(t)g(\()p Fx(e.g.)e FG(the)h(features)f(in)427
-4632 y(an)d(image\).)227 4775 y FE(PIXEL)427 4888 y FG(Iden)m(ti\014es)
-42 b(an)f(arra)m(y)h(of)f(pixels)h(and)e(an)h(asso)s(ciated)i
-Fx(pixel-b)-5 b(ase)g(d)43 b FG(co)s(ordinate)f(system)427
-5001 y(whic)m(h)37 b(is)g(related)g(to)h(the)f(GRID)g(co)s(ordinate)h
-(system)f(\(ab)s(o)m(v)m(e\))h(simply)f(b)m(y)f(a)i(shift)e(of)427
-5114 y(origin)30 b(along)g(eac)m(h)g(axis.)41 b(This)29
-b(shift)g(ma)m(y)g(b)s(e)g(in)m(tegral,)i(fractional,)g(p)s(ositiv)m
-(e,)g(negativ)m(e)427 5226 y(or)g(zero.)41 b(The)30 b(data)h(elemen)m
-(ts)h(retain)f(their)f(unit)g(exten)m(t)i(along)f(eac)m(h)h(axis.)427
-5354 y(Because)g(the)f(amoun)m(t)f(of)h(shift)f(is)h(unsp)s(eci\014ed,)
-e(the)h(PIXEL)g(domain)g(is)h(distinct)g(from)427 5467
-y(the)g(GRID)h(domain.)42 b(The)30 b(relationship)h(b)s(et)m(w)m(een)h
-(them)f(con)m(tains)h(a)f(degree)g(of)h(uncer-)427 5580
-y(tain)m(t)m(y)-8 b(,)36 b(suc)m(h)c(as)g(t)m(ypically)i(arises)f(from)
-f(the)h(di\013eren)m(t)f(con)m(v)m(en)m(tions)j(used)c(b)m(y)i
-(di\013eren)m(t)427 5693 y(soft)m(w)m(are)j(systems.)51
-b(F)-8 b(or)35 b(instance,)h(in)e(some)g(soft)m(w)m(are)h(the)g
-(\014rst)e(pixel)h(is)g(regarded)g(as)p eop end
-%%Page: 74 84
-TeXDict begin 74 83 bop 0 52 a FG(74)1200 b Fz(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))427 351
-y FG(b)s(eing)21 b(cen)m(tred)h(at)h(\(1,1\),)i(while)d(in)f(other)g
-(soft)m(w)m(are)i(it)f(is)g(at)g(\(0.5,0.5\).)41 b(In)21
-b(addition,)j(some)427 464 y(soft)m(w)m(are)31 b(pac)m(k)-5
-b(ages)31 b(implemen)m(t)f(a)f(\\pixel)h(origin")h(whic)m(h)d(allo)m
-(ws)j(pixel)f(co)s(ordinates)f(to)427 577 y(start)i(at)g(an)g
-(arbitrary)f(v)-5 b(alue.)427 704 y(The)41 b(GRID)h(domain)g(\(whic)m
-(h)g(corresp)s(onds)e(with)h(the)h(pixel-n)m(um)m(b)s(ering)f(con)m(v)m
-(en)m(tion)427 817 y(used)20 b(b)m(y)h(FITS\))g(is)f(a)i(sp)s(ecial)f
-(case)h(of)f(the)g(PIXEL)f(domain)h(and)f(a)m(v)m(oids)j(this)d
-(uncertain)m(t)m(y)-8 b(.)427 930 y(In)35 b(general,)j(additional)f
-(information)f(is)g(required)e(in)i(order)f(to)h(con)m(v)m(ert)h(from)f
-(one)f(to)427 1043 y(the)c(other.)227 1185 y FE(SKY)427
-1298 y FG(Iden)m(ti\014es)26 b(the)g(domain)f(whic)m(h)h(con)m(tains)h
-(all)f(equiv)-5 b(alen)m(t)27 b(celestial)h(co)s(ordinate)f(systems.)
-427 1410 y(Because)33 b(these)e(are)g(represen)m(ted)g(in)g(AST)f(b)m
-(y)h(SkyF)-8 b(rames)31 b(\()p Fu(x)p FG(8\),)i(it)e(should)f(b)s(e)g
-(no)h(sur-)427 1523 y(prise)d(that)g(the)g(default)g(Domain)g(v)-5
-b(alue)29 b(for)e(a)h(SkyF)-8 b(rame)28 b(is)g(SKY.)g(Since)f(there)h
-(is)g(only)427 1636 y(one)j(sky)-8 b(,)31 b(y)m(ou)f(probably)g(w)m
-(on't)h(need)f(to)h(c)m(hange)h(this)e(v)m(ery)h(often.)227
-1778 y FE(SPECTR)m(UM)427 1891 y FG(Iden)m(ti\014es)22
-b(the)g(domain)f(used)g(to)h(describ)s(e)f(p)s(ositions)h(within)f(an)g
-(electro-magnetic)k(sp)s(ec-)427 2004 y(trum.)52 b(The)34
-b(AST)g(Sp)s(ecF)-8 b(rame)35 b(\()p Fu(x)p FG(9\))h(class)f(describ)s
-(es)e(p)s(ositions)i(within)f(this)g(domain,)427 2117
-y(allo)m(wing)42 b(a)f(wide)f(range)h(of)f(di\013eren)m(t)h(co)s
-(ordinate)g(systems)f(to)h(b)s(e)f(used)g(\(frequency)-8
-b(,)427 2229 y(w)m(a)m(v)m(elength,)33 b Fx(etc)p FG(\).)41
-b(The)30 b(default)g(Domain)i(v)-5 b(alue)31 b(for)f(a)g(Sp)s(ecF)-8
-b(rame)31 b(is)f(SPECTR)m(UM.)227 2371 y FE(TIME)427
-2484 y FG(Iden)m(ti\014es)g(the)g(domain)f(used)g(to)h(describ)s(e)g
-(momen)m(ts)g(in)f(time.)41 b(The)29 b(AST)g(TimeF)-8
-b(rame)427 2597 y(class)32 b(describ)s(es)f(p)s(ositions)g(within)g
-(this)g(domain,)g(allo)m(wing)i(a)f(wide)f(range)g(of)h(di\013eren)m(t)
-427 2710 y(co)s(ordinate)g(systems)e(and)g(timescales)i(to)g(b)s(e)d
-(used.)41 b(The)30 b(default)g(Domain)i(v)-5 b(alue)31
-b(for)f(a)427 2823 y(TimeF)-8 b(rame)32 b(is)e(TIME.)0
-3067 y(Although)h(w)m(e)h(ha)m(v)m(e)h(dra)m(wn)d(a)i(necessary)g
-(distinction)g(here)f(b)s(et)m(w)m(een)h(the)f(GRID)h(and)f(PIXEL)f
-(domains,)0 3180 y(w)m(e)35 b(will)g(con)m(tin)m(ue)g(to)h(refer)e(in)g
-(general)h(terms)g(to)g(image)g(\\pixels")h(and)e(\\pixel)h(co)s
-(ordinates")h(whenev)m(er)0 3293 y(this)30 b(distinction)g(is)g(not)g
-(imp)s(ortan)m(t.)40 b(This)29 b(should)g(not)h(b)s(e)f(tak)m(en)i(to)f
-(imply)g(that)g(the)g(GRID)g(con)m(v)m(en)m(tion)0 3405
-y(for)42 b(n)m(um)m(b)s(ering)f(pixels)h(is)g(excluded|in)f(fact,)46
-b(it)d(is)f(usually)f(to)i(b)s(e)e(preferred)g(\(at)i(the)f(lev)m(el)i
-(of)e(data)0 3518 y(handling)30 b(b)s(eing)g(discussed)f(in)h(this)g
-(do)s(cumen)m(t\))h(and)f(w)m(e)h(recommend)f(it.)0 3805
-y Fw(7.14)112 b(The)38 b(Unit)g(A)m(ttribute)0 4022 y
-FG(Eac)m(h)44 b(axis)g(of)f(a)h(F)-8 b(rame)44 b(has)f(a)h(Unit)f
-(attribute)h(whic)m(h)g(holds)e(the)i(ph)m(ysical)g(units)e(used)h(to)h
-(describ)s(e)0 4135 y(p)s(ositions)36 b(on)f(the)h(axis.)57
-b(The)36 b(index)f(of)h(the)g(axis)g(to)g(whic)m(h)g(the)g(attribute)g
-(refers)f(should)g(normally)h(b)s(e)0 4248 y(placed)j(in)f(paren)m
-(theses)h(follo)m(wing)h(the)f(attribute)h(name)e(\(\\Unit\(2\)")k(for)
-c(instance\).)67 b(Ho)m(w)m(ev)m(er,)43 b(if)38 b(the)0
-4361 y(F)-8 b(rame)31 b(has)f(only)h(a)g(single)g(axis,)g(then)f(the)g
-(axis)h(index)f(can)h(b)s(e)f(omitted.)0 4519 y(In)f(v)m(ersions)h(of)g
-(AST)f(prior)g(to)i(v)m(ersion)f(2.0,)h(the)f(Unit)g(attribute)g(w)m
-(as)g(nothing)g(more)g(than)f(a)i(descriptiv)m(e)0 4632
-y(string)g(in)m(tended)g(purely)g(for)g(h)m(uman)g(readers|no)g(part)g
-(of)g(the)h(AST)e(system)i(used)e(the)i(Unit)f(string)h(for)0
-4744 y(an)m(y)41 b(purp)s(ose)e(\(other)i(than)g(inclusion)f(in)h(axis)
-g(lab)s(els)g(pro)s(duced)e(b)m(y)i(the)f(Plot)i(class\).)73
-b(In)40 b(particular,)0 4857 y(no)g(accoun)m(t)h(w)m(as)f(tak)m(en)h
-(of)e(the)h(Unit)g(attribute)h(when)d(\014nding)h(the)g(Mapping)h(b)s
-(et)m(w)m(een)g(t)m(w)m(o)h(F)-8 b(rames.)0 4970 y(Th)m(us)30
-b(if)h(the)g(con)m(v)m(ersion)i(b)s(et)m(w)m(een)e(a)h(pair)f(of)g
-(1-dimensional)h(F)-8 b(rames)32 b(represen)m(ting)f(v)m(elo)s(cit)m(y)
-i(w)m(as)f(found)0 5083 y(\(using)f(AST)p Fy(_)p FG(CONVER)-8
-b(T)30 b(\))i(the)g(returned)e(Mapping)i(w)m(ould)f(alw)m(a)m(ys)i(b)s
-(e)e(a)g(UnitMap,)i(ev)m(en)f(if)g(the)f(Unit)0 5196
-y(attributes)f(of)g(the)g(t)m(w)m(o)h(F)-8 b(rames)30
-b(w)m(ere)g(\\km/h")g(and)f(\\m/s".)42 b(This)28 b(b)s(eha)m(viour)i
-(is)f(referred)g(to)h(b)s(elo)m(w)g(as)g(a)0 5309 y Fx(p)-5
-b(assive)38 b FG(Unit)31 b(attribute.)0 5467 y(As)38
-b(of)f(AST)g(v)m(ersion)h(2.0,)j(a)d(facilit)m(y)h(exists)g(whic)m(h)e
-(allo)m(ws)i(the)f(Unit)f(attribute)i(to)f(b)s(e)f Fx(active)7
-b FG(;)41 b(that)d(is,)0 5580 y(di\013erences)30 b(in)g(the)g(Unit)g
-(attribute)h(ma)m(y)f(b)s(e)f(tak)m(en)i(in)m(to)g(accoun)m(t)g(when)e
-(\014nding)g(the)h(Mapping)g(b)s(et)m(w)m(een)0 5693
-y(t)m(w)m(o)k(F)-8 b(rames.)48 b(In)32 b(order)g(to)i(minimise)e(the)h
-(risk)f(of)h(breaking)g(older)f(soft)m(w)m(are,)j(the)e
-Fx(default)42 b FG(b)s(eha)m(viour)32 b(of)p eop end
-%%Page: 75 85
-TeXDict begin 75 84 bop 0 52 a Fz(7.14)93 b(The)29 b(Unit)i(A)m
-(ttribute)2667 b FG(75)0 351 y(simple)28 b(F)-8 b(rames)29
-b(and)f(SkyF)-8 b(rames)28 b(is)h(unc)m(hanged)f(from)f(previous)h(v)m
-(ersions)h(\()p Fx(i.e.)39 b FG(they)29 b(ha)m(v)m(e)g(passiv)m(e)g
-(Unit)0 464 y(attributes\).)41 b(Ho)m(w)m(ev)m(er,)30
-b(the)e(new)f(routines)g(AST)p Fy(_)p FG(SET)-8 b(A)m(CTIVEUNIT)26
-b(and)g(AST)p Fy(_)p FG(GET)-8 b(A)m(CTIVEUNIT)0 577
-y(allo)m(w)27 b(this)f(default)f(b)s(eha)m(viour)g(to)i(b)s(e)e(c)m
-(hanged.)39 b(The)25 b(Sp)s(ecF)-8 b(rame)26 b(and)f(TimeF)-8
-b(rame)27 b(classes)f Fx(always)35 b FG(ha)m(v)m(e)0
-690 y(an)30 b(activ)m(e)j(Unit)d(attribute)i(\(attempts)f(to)g(c)m
-(hange)h(this)e(are)h(ignored\).)0 856 y(F)-8 b(or)24
-b(instance,)h(consider)e(the)h(ab)s(o)m(v)m(e)g(example)g(of)f(t)m(w)m
-(o)i(1-dimensional)f(F)-8 b(rames)24 b(describing)e(v)m(elo)s(cit)m(y)
--8 b(.)42 b(These)0 969 y(F)-8 b(rames)31 b(can)g(b)s(e)f(created)h(as)
-g(follo)m(ws:)262 1227 y Ft(INTEGER)40 b(FRAME1,)h(FRAME2)262
-1426 y(FRAME1)g(=)i(AST_FRAME\()c(1,)k('Domain=VELOCITY)o(,Un)o(it)o
-(=k)o(m/h)o(')37 b(\))262 1526 y(FRAME2)k(=)i(AST_FRAME\()c(1,)k
-('Domain=VELOCITY)o(,Un)o(it)o(=m)o(/s')37 b(\))0 1897
-y FG(By)g(default,)i(these)f(F)-8 b(rames)37 b(ha)m(v)m(e)i(passiv)m(e)
-e(Unit)g(attributes,)j(and)c(so)h(an)g(attempt)h(to)g(\014nd)d(a)j
-(Mapping)0 2010 y(b)s(et)m(w)m(een)c(them)f(w)m(ould)h(ignore)g(the)f
-(di\013erence)h(in)f(their)h(Unit)f(attributes)h(and)f(return)f(a)i
-(unit)f(Mapping.)0 2123 y(T)-8 b(o)29 b(a)m(v)m(oid)i(this,)e(w)m(e)h
-(indicate)g(that)f(w)m(e)g(w)m(an)m(t)h(these)g(F)-8
-b(rames)29 b(to)h(ha)m(v)m(e)g Fx(active)36 b FG(Unit)29
-b(attributes,)h(as)f(follo)m(ws:)262 2381 y Ft(CALL)41
-b(AST_SETACTIVEUNIT)o(\()d(FRAME1,)i(.TRUE.,)h(STATUS)g(\))262
-2480 y(CALL)g(AST_SETACTIVEUNIT)o(\()d(FRAME2,)i(.TRUE.,)h(STATUS)g(\))
-0 2752 y FG(If)30 b(w)m(e)h(then)f(\014nd)f(the)h(Mapping)h(b)s(et)m(w)
-m(een)g(them)f(as)g(follo)m(ws:)262 3010 y Ft(INTEGER)40
-b(CVT)262 3110 y(...)262 3209 y(CVT)i(=)h(AST_CONVERT\()c(FRAME1,)h
-(FRAME2,)h(')i(',)g(STATUS)e(\))0 3481 y FG(the)20 b(Mapping)h(con)m
-(tained)g(within)f(the)g(F)-8 b(rameSet)22 b(returned)d(b)m(y)h(AST)p
-Fy(_)p FG(CONVER)-8 b(T)19 b(will)i(b)s(e)e(a)i(one-dimensional)0
-3594 y(Zo)s(omMap)33 b(whic)m(h)g(simply)f(scales)j(its)e(input)f(\(a)i
-(v)m(elo)s(cit)m(y)i(in)d Fp(k)s(m=h)p FG(\))h(b)m(y)f(a)g(factor)h(of)
-g(0.278)h(to)e(create)i(its)0 3706 y(output)30 b(\(a)h(v)m(elo)s(cit)m
-(y)i(in)d Fp(m=s)p FG(\).)0 3872 y(In)43 b(fact)i(w)m(e)g(need)f(not)g
-(ha)m(v)m(e)h(set)g(the)f(Unit)g(attribute)h(activ)m(e)h(in)e(FRAME1)h
-(since)f(the)h(b)s(eha)m(viour)e(of)0 3985 y(AST)p Fy(_)p
-FG(CONVER)-8 b(T)29 b(is)h(determined)g(b)m(y)h(its)f(TO)g(F)-8
-b(rame)31 b(\(the)g(second)g(F)-8 b(rame)31 b(argumen)m(t\).)0
-4285 y FE(7.14.1)106 b(The)34 b(Syn)m(tax)h(for)g(Unit)g(Strings)0
-4511 y FG(Con)m(v)m(ersion)28 b(b)s(et)m(w)m(een)g(units)e(systems)h
-(relies)h(on)f(the)h(use)e(of)i(a)f(sp)s(eci\014c)g(syn)m(tax)h(for)f
-(the)g(Unit)h(attribute.)40 b(If)0 4624 y(the)32 b(v)-5
-b(alue)32 b(of)g(the)g(Unit)g(attribute)g(do)s(es)g(not)g(conform)g(to)
-g(this)g(syn)m(tax,)h(then)e(an)h(error)f(will)h(b)s(e)f(rep)s(orted)0
-4737 y(if)k(an)g(attempt)h(is)f(made)g(to)g(use)g(it)h(to)f(determine)g
-(an)g(in)m(ter-unit)h(Mapping)e(\(this)i(will)f(nev)m(er)g(happ)s(en)e
-(if)0 4850 y(the)e(Unit)f(attribute)h(is)g Fx(p)-5 b(assive)7
-b FG(\).)0 5016 y(The)20 b(adopted)h(syn)m(tax)g(is)f(that)i(describ)s
-(ed)d(in)h(FITS-W)m(CS)g(pap)s(er)g(I)g("Represen)m(tation)i(of)f(W)-8
-b(orld)21 b(Co)s(ordinate)0 5128 y(in)35 b(FITS")g(b)m(y)g(Greisen)h(&)
-f(Calabretta.)57 b(W)-8 b(e)37 b(distinguish)d(here)h(b)s(et)m(w)m(een)
-h(\\basic")h(units)e(and)f(\\deriv)m(ed")0 5241 y(units:)43
-b(deriv)m(ed)32 b(units)f(are)h(de\014ned)f(in)h(terms)f(of)h(other)g
-(units)g(\(either)g(deriv)m(ed)g(or)g(basic\),)h(whereas)f(basic)0
-5354 y(units)40 b(ha)m(v)m(e)h(no)f(suc)m(h)g(de\014nitions.)69
-b(Deriv)m(ed)41 b(units)f(ma)m(y)h(b)s(e)e(represen)m(ted)h(b)m(y)g
-(their)h(o)m(wn)f Fx(symb)-5 b(ol)51 b FG(\()p Fx(e.g.)0
-5467 y FG(\\Jy"|the)23 b(Jansky\))g(or)f(b)m(y)h(a)f
-Fx(mathematic)-5 b(al)29 b(expr)-5 b(ession)31 b FG(whic)m(h)22
-b(com)m(bines)h(other)g(sym)m(b)s(ols)f(and)g(constan)m(ts)0
-5580 y(to)37 b(form)f(a)h(de\014nition)g(of)f(the)h(unit)f(\()p
-Fx(e.g.)59 b FG(\\km/s"|kilometres)39 b(p)s(er)c(second\).)60
-b(Unit)37 b(sym)m(b)s(ols)f(ma)m(y)h(b)s(e)0 5693 y(pre\014xed)29
-b(b)m(y)h(a)h(string)g(represen)m(ting)f(a)h(standard)f(m)m(ultiple)h
-(or)f(sub-m)m(ultiple.)p eop end
-%%Page: 76 86
-TeXDict begin 76 85 bop 0 52 a FG(76)1200 b Fz(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))0 351 y
-FG(In)k(addition)h(to)h(the)f(unit)g(sym)m(b)s(ols)f(listed)i(in)f
-(FITS-W)m(CS)f(P)m(ap)s(er)h(I,)g(an)m(y)g(other)g(arbitrary)g(unit)g
-(sym)m(b)s(ol)0 464 y(ma)m(y)41 b(b)s(e)e(used,)j(with)d(the)i(pro)m
-(viso)f(that)h(it)f(will)g(not)h(b)s(e)e(p)s(ossible)g(to)i(con)m(v)m
-(ert)h(b)s(et)m(w)m(een)e(F)-8 b(rames)41 b(using)0 577
-y(suc)m(h)31 b(units.)41 b(The)31 b(exception)h(to)g(this)f(is)g(if)g
-(b)s(oth)f(F)-8 b(rames)31 b(refer)g(to)h(the)f(same)g(unkno)m(wn)f
-(unit)g(string.)43 b(F)-8 b(or)0 690 y(instance,)44 b(an)c(axis)h(with)
-f(unkno)m(wn)f(unit)h(sym)m(b)s(ol)h("\015op")f Fx(c)-5
-b(ould)51 b FG(b)s(e)40 b(con)m(v)m(erted)i(to)f(an)g(axis)g(with)f
-(unit)0 803 y("M\015op")31 b(\(Mega-\015op\).)0 966 y(Unit)37
-b(sym)m(b)s(ols)g(\(optionally)i(pre\014xed)d(with)g(a)i(m)m(ultiple)g
-(or)f(sub-m)m(ultiple\))g(can)g(b)s(e)g(com)m(bined)g(together)0
-1079 y(using)i(a)h(limited)h(range)f(of)g(mathematical)i(op)s(erators)e
-(and)f(functions,)j(to)e(pro)s(duce)f(new)g(units.)68
-b(Suc)m(h)0 1191 y(expressions)39 b(ma)m(y)i(also)f(con)m(tain)h(paren)
-m(theses)f(and)f(n)m(umerical)h(constan)m(ts)h(\(these)f(ma)m(y)h
-(optionally)g(use)0 1304 y(\\scien)m(ti\014c")33 b(notation)e
-(including)f(an)g(\\E")i(c)m(haracter)g(to)f(represen)m(t)f(the)h(p)s
-(o)m(w)m(er)f(of)h(10\).)0 1467 y(The)g(follo)m(wing)j(tables)e(list)h
-(the)f(sym)m(b)s(ols)f(for)h(the)g(basic)g(and)f(deriv)m(ed)h(units)f
-(whic)m(h)h(ma)m(y)g(b)s(e)g(included)f(in)0 1580 y(a)e(units)f
-(string,)i(the)f(standard)f(pre\014xes)g(for)g(m)m(ultiples)h(and)g
-(sub-m)m(ultiples,)g(and)f(the)h(strings)f(whic)m(h)h(ma)m(y)0
-1693 y(b)s(e)h(used)f(to)i(represen)m(t)g(mathematical)i(op)s(erators)d
-(and)g(functions.)p 977 1814 1827 4 v 975 1926 4 113
-v 1654 1893 a FD(Basic)j(units)p 2801 1926 V 977 1930
-1827 4 v 975 2043 4 113 v 1258 2009 a FG(Quan)m(tit)m(y)p
-1894 2043 V 1894 2043 V 332 w(Sym)m(b)s(ol)p 2289 2043
-V 99 w(F)-8 b(ull)31 b(Name)p 2801 2043 V 977 2046 1827
-4 v 975 2159 4 113 v 1026 2125 a(length)p 1894 2159 V
-672 w(m)p 2289 2159 V 319 w(metre)p 2801 2159 V 975 2272
-V 1026 2238 a(mass)p 1894 2272 V 726 w(g)p 2289 2272
-V 350 w(gram)p 2801 2272 V 975 2385 V 1026 2351 a(time)p
-1894 2385 V 743 w(s)p 2289 2385 V 359 w(second)p 2801
-2385 V 975 2498 V 1026 2464 a(plane)g(angle)p 1894 2498
-V 470 w(rad)p 2289 2498 V 263 w(radian)p 2801 2498 V
-975 2611 V 1026 2577 a(solid)g(angle)p 1894 2611 V 500
-w(sr)p 2289 2611 V 323 w(steradian)p 2801 2611 V 975
-2723 V 1026 2690 a(temp)s(erature)p 1894 2723 V 431 w(K)p
-2289 2723 V 324 w(Kelvin)p 2801 2723 V 975 2836 V 1026
-2802 a(electric)i(curren)m(t)p 1894 2836 V 319 w(A)p
-2289 2836 V 327 w(Amp)s(ere)p 2801 2836 V 975 2949 V
-1026 2915 a(amoun)m(t)e(of)g(substance)p 1894 2949 V
-99 w(mol)p 2289 2949 V 249 w(mole)p 2801 2949 V 975 3062
-V 1026 3028 a(luminous)f(in)m(tensit)m(y)p 1894 3062
-V 189 w(cd)p 2289 3062 V 304 w(candela)p 2801 3062 V
-977 3065 1827 4 v 0 3487 a FE(7.14.2)106 b(Side-e\013ects)35
-b(of)g(Changing)g(the)f(Unit)h(attribute)0 3709 y FG(If)c(an)g(Axis)h
-(has)f(an)g(activ)m(e)j(Unit)e(attribute,)g(c)m(hanging)h(its)f(v)-5
-b(alue)31 b(\(either)i(b)m(y)e(setting)i(a)e(new)g(v)-5
-b(alue)32 b(or)g(b)m(y)0 3822 y(clearing)h(it)g(so)f(that)g(the)g
-(default)g(v)-5 b(alue)33 b(is)e(re-instated\))j(ma)m(y)e(cause)h(the)f
-(Lab)s(el)f(and)h(Sym)m(b)s(ol)f(attributes)0 3934 y(to)45
-b(b)s(e)f(c)m(hanged)h(accordingly)-8 b(.)84 b(F)-8 b(or)45
-b(instance,)k(if)44 b(an)h(Axis)f(has)g(Unit,)49 b(Lab)s(el)44
-b(and)g(Sym)m(b)s(ol)f(of)i(\\Hz",)0 4047 y(\\F)-8 b(requency")31
-b(and)d(\\n)m(u",)i(then)f(c)m(hanging)h(its)g(Unit)f(attribute)h(to)g
-(\\log\(Hz\)")j(will)c(cause)h(AST)e(to)i(c)m(hange)0
-4160 y(its)i(Lab)s(el)g(and)f(Sym)m(b)s(ol)g(to)h(\\log\(F)-8
-b(requency\)")35 b(and)c(\\Log\(n)m(u\)".)47 b(These)31
-b(c)m(hanges)i(are)f(only)g(made)g(if)f(the)0 4273 y(Unit)h(attribute)h
-(is)g(activ)m(e,)i(and)c(a)i(Mapping)f(can)h(b)s(e)e(found)g(from)h
-(the)g(old)h(units)e(to)i(the)g(new)f(units.)45 b(On)0
-4386 y(the)39 b(other)g(hand,)h(c)m(hanging)g(the)f(Unit)g(from)f
-(\\Hz")i(to)g(\\MHz")h(w)m(ould)d(not)h(cause)h(an)m(y)f(c)m(hange)h
-(to)f(the)0 4499 y(Lab)s(el)30 b(or)h(Sym)m(b)s(ol)e(attributes.)p
-eop end
-%%Page: 77 87
-TeXDict begin 77 86 bop 0 52 a Fz(7.14)93 b(The)29 b(Unit)i(A)m
-(ttribute)2667 b FG(77)p 0 272 3999 4 v -2 384 4 113
-v 1712 351 a FD(Deriv)m(ed)34 b(units)p 3996 384 V 0
-388 3999 4 v -2 501 4 113 v 298 467 a FG(Quan)m(tit)m(y)p
-949 501 V 949 501 V 396 w(Sym)m(b)s(ol)p 1441 501 V 432
-w(F)-8 b(ull)31 b(Name)p 2522 501 V 875 w(De\014nition)p
-3996 501 V 0 504 3999 4 v -2 617 4 113 v 50 583 a(area)p
-949 617 V 785 w(barn)p 1441 617 V 309 w(barn)p 2522 617
-V 897 w(1.0E-28)i(m**2)p 3996 617 V -2 730 V 50 696 a(area)p
-949 730 V 785 w(pix)p 1441 730 V 368 w(pixel)p 2522 730
-V 3996 730 V -2 843 V 50 809 a(area)p 949 843 V 785 w(pixel)p
-1441 843 V 303 w(pixel)p 2522 843 V 3996 843 V -2 956
-V 50 922 a(electric)f(capacitance)p 949 956 V 181 w(F)p
-1441 956 V 433 w(F)-8 b(arad)p 2522 956 V 852 w(C/V)p
-3996 956 V -2 1069 V 50 1035 a(electric)32 b(c)m(harge)p
-949 1069 V 384 w(C)p 1441 1069 V 426 w(Coulom)m(b)p 2522
-1069 V 724 w(A)f(s)p 3996 1069 V -2 1181 V 50 1148 a(electric)h
-(conductance)p 949 1181 V 149 w(S)p 1441 1181 V 441 w(Siemens)p
-2522 1181 V 761 w(A/V)p 3996 1181 V -2 1294 V 50 1261
-a(electric)g(p)s(oten)m(tial)p 949 1294 V 286 w(V)p 1441
-1294 V 424 w(V)-8 b(olt)p 2522 1294 V 915 w(J/C)p 3996
-1294 V -2 1407 V 50 1373 a(electric)32 b(resistance)p
-949 1407 V 254 w(Ohm)p 1441 1407 V 294 w(Ohm)p 2522 1407
-V 882 w(V/A)p 3996 1407 V -2 1520 V 50 1486 a(energy)p
-949 1520 V 691 w(J)p 1441 1520 V 445 w(Joule)p 2522 1520
-V 872 w(N)f(m)p 3996 1520 V -2 1633 V 50 1599 a(energy)p
-949 1633 V 691 w(Ry)p 1441 1633 V 377 w(Rydb)s(erg)p
-2522 1633 V 739 w(13.605692)j(eV)p 3996 1633 V -2 1746
-V 50 1712 a(energy)p 949 1746 V 691 w(eV)p 1441 1746
-V 384 w(electron-V)-8 b(olt)p 2522 1746 V 573 w(1.60217733E-19)36
-b(J)p 3996 1746 V -2 1859 V 50 1825 a(energy)p 949 1859
-V 691 w(erg)p 1441 1859 V 371 w(erg)p 2522 1859 V 959
-w(1.0E-7)c(J)p 3996 1859 V -2 1972 V 50 1938 a(ev)m(en)m(ts)p
-949 1972 V 707 w(coun)m(t)p 1441 1972 V 273 w(coun)m(t)p
-2522 1972 V 3996 1972 V -2 2085 V 50 2051 a(ev)m(en)m(ts)p
-949 2085 V 707 w(ct)p 1441 2085 V 417 w(coun)m(t)p 2522
-2085 V 3996 2085 V -2 2198 V 50 2164 a(ev)m(en)m(ts)p
-949 2198 V 707 w(ph)p 1441 2198 V 390 w(photon)p 2522
-2198 V 3996 2198 V -2 2311 V 50 2277 a(ev)m(en)m(ts)p
-949 2311 V 707 w(photon)p 1441 2311 V 214 w(photon)p
-2522 2311 V 3996 2311 V -2 2423 V 50 2390 a(\015ux)d(densit)m(y)p
-949 2423 V 489 w(Jy)p 1441 2423 V 397 w(Jansky)p 2522
-2423 V 805 w(1.0E-26)k(W)d(/m**2)i(/Hz)p 3996 2423 V
--2 2536 V 50 2503 a(\015ux)d(densit)m(y)p 949 2536 V
-489 w(R)p 1441 2536 V 425 w(Ra)m(yleigh)p 2522 2536 V
-737 w(1.0E10/\(4*PI\))34 b(photon.m**-2)e(/s/sr)p 3996
-2536 V -2 2649 V 50 2615 a(\015ux)d(densit)m(y)p 949
-2649 V 489 w(mag)p 1441 2649 V 326 w(magnitude)p 2522
-2649 V 3996 2649 V -2 2762 V 50 2728 a(force)p 949 2762
-V 762 w(N)p 1441 2762 V 424 w(Newton)p 2522 2762 V 775
-w(kg)i(m/s**2)p 3996 2762 V -2 2875 V 50 2841 a(frequency)p
-949 2875 V 569 w(Hz)p 1441 2875 V 384 w(Hertz)p 2522
-2875 V 861 w(1/s)p 3996 2875 V -2 2988 V 50 2954 a(illuminance)p
-949 2988 V 497 w(lx)p 1441 2988 V 419 w(lux)p 2522 2988
-V 956 w(lm/m**2)p 3996 2988 V -2 3101 V 50 3067 a(inductance)p
-949 3101 V 522 w(H)p 1441 3101 V 424 w(Henry)p 2522 3101
-V 837 w(Wb/A)p 3996 3101 V -2 3214 V 50 3180 a(length)p
-949 3214 V 704 w(A)m(U)p 1441 3214 V 359 w(astronomical)h(unit)p
-2522 3214 V 382 w(1.49598E11)i(m)p 3996 3214 V -2 3327
-V 50 3293 a(length)p 949 3327 V 704 w(Angstrom)p 1441
-3327 V 100 w(Angstrom)p 2522 3327 V 688 w(1.0E-10)f(m)p
-3996 3327 V -2 3440 V 50 3406 a(length)p 949 3440 V 704
-w(lyr)p 1441 3440 V 383 w(ligh)m(t)e(y)m(ear)p 2522 3440
-V 705 w(9.460730E15)k(m)p 3996 3440 V -2 3553 V 50 3519
-a(length)p 949 3553 V 704 w(p)s(c)p 1441 3553 V 398 w(parsec)p
-2522 3553 V 832 w(3.0867E16)f(m)p 3996 3553 V -2 3665
-V 50 3632 a(length)p 949 3665 V 704 w(solRad)p 1441 3665
-V 223 w(solar)d(radius)p 2522 3665 V 618 w(6.9599E8)i(m)p
-3996 3665 V -2 3778 V 50 3745 a(luminosit)m(y)p 949 3778
-V 537 w(solLum)p 1441 3778 V 202 w(solar)e(luminosit)m(y)p
-2522 3778 V 448 w(3.8268E26)j(W)p 3996 3778 V -2 3891
-V 50 3857 a(luminous)29 b(\015ux)p 949 3891 V 412 w(lm)p
-1441 3891 V 391 w(lumen)p 2522 3891 V 837 w(cd)h(sr)p
-3996 3891 V -2 4004 V 50 3970 a(magnetic)i(\014eld)p
-949 4004 V 395 w(G)p 1441 4004 V 421 w(Gauss)p 2522 4004
-V 841 w(1.0E-4)g(T)p 3996 4004 V -2 4117 V 50 4083 a(magnetic)g(\015ux)
-p 949 4117 V 412 w(Wb)p 1441 4117 V 348 w(W)-8 b(eb)s(er)p
-2522 4117 V 825 w(V)31 b(s)p 3996 4117 V -2 4230 V 50
-4196 a(mass)p 949 4230 V 758 w(solMass)p 1441 4230 V
-186 w(solar)g(mass)p 2522 4230 V 669 w(1.9891E30)j(kg)p
-3996 4230 V -2 4343 V 50 4309 a(mass)p 949 4343 V 758
-w(u)p 1441 4343 V 441 w(uni\014ed)29 b(atomic)j(mass)e(unit)p
-2522 4343 V 99 w(1.6605387E-27)35 b(kg)p 3996 4343 V
--2 4456 V 50 4422 a(magnetic)d(\015ux)d(densit)m(y)p
-949 4456 V 100 w(T)p 1441 4456 V 426 w(T)-8 b(esla)p
-2522 4456 V 876 w(Wb/m**2)p 3996 4456 V -2 4569 V 50
-4535 a(plane)30 b(angle)p 949 4569 V 503 w(arcmin)p 1441
-4569 V 219 w(arc-min)m(ute)p 2522 4569 V 654 w(1/60)i(deg)p
-3996 4569 V -2 4682 V 50 4648 a(plane)e(angle)p 949 4682
-V 503 w(arcsec)p 1441 4682 V 255 w(arc-second)p 2522
-4682 V 666 w(1/3600)j(deg)p 3996 4682 V -2 4795 V 50
-4761 a(plane)d(angle)p 949 4795 V 503 w(mas)p 1441 4795
-V 335 w(milli-arcsecond)p 2522 4795 V 490 w(1/3600000)35
-b(deg)p 3996 4795 V -2 4908 V 50 4874 a(plane)30 b(angle)p
-949 4908 V 503 w(deg)p 1441 4908 V 356 w(degree)p 2522
-4908 V 828 w(pi/180)i(rad)p 3996 4908 V -2 5020 V 50
-4987 a(p)s(o)m(w)m(er)p 949 5020 V 716 w(W)p 1441 5020
-V 399 w(W)-8 b(att)p 2522 5020 V 880 w(J/s)p 3996 5020
-V -2 5133 V 50 5099 a(pressure,)29 b(stress)p 949 5133
-V 352 w(P)m(a)p 1441 5133 V 388 w(P)m(ascal)p 2522 5133
-V 830 w(N/m**2)p 3996 5133 V -2 5246 V 50 5212 a(time)p
-949 5246 V 775 w(a)p 1441 5246 V 447 w(y)m(ear)p 2522
-5246 V 914 w(31557600)34 b(s)p 3996 5246 V -2 5359 V
-50 5325 a(time)p 949 5359 V 775 w(d)p 1441 5359 V 441
-w(da)m(y)p 2522 5359 V 939 w(86400)f(s)p 3996 5359 V
--2 5472 V 50 5438 a(time)p 949 5472 V 775 w(h)p 1441
-5472 V 441 w(hour)p 2522 5472 V 897 w(3600)f(s)p 3996
-5472 V -2 5585 V 50 5551 a(time)p 949 5585 V 775 w(yr)p
-1441 5585 V 408 w(y)m(ear)p 2522 5585 V 914 w(31557600)i(s)p
-3996 5585 V -2 5698 V 50 5664 a(time)p 949 5698 V 775
-w(min)p 1441 5698 V 340 w(min)m(ute)p 2522 5698 V 805
-w(60)d(s)p 3996 5698 V -2 5811 V 949 5811 V 1001 5777
-a(D)p 1441 5811 V 423 w(Deb)m(y)m(e)p 2522 5811 V 838
-w(1.0E-29/3)j(C.m)p 3996 5811 V 0 5814 3999 4 v eop end
-%%Page: 78 88
-TeXDict begin 78 87 bop 0 52 a FG(78)1200 b Fz(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))p 617 871
-2546 4 v 615 984 4 113 v 1083 950 a FD(Pre\014xes)35
-b(for)d(m)m(ultiples)i(&)f(sub-m)m(ultiples)p 3161 984
-V 617 987 2546 4 v 615 1100 4 113 v 667 1066 a FG(Sub-m)m(ultiple)99
-b(Name)i(Pre\014x)p 1888 1100 V 1888 1100 V 99 w(Sub-m)m(ultiple)e
-(Name)h(Pre\014x)p 3161 1100 V 617 1103 2546 4 v 615
-1216 4 113 v 667 1183 a(10)757 1150 y Fq(\000)p Fv(1)1274
-1183 y FG(deci)174 b(d)p 1888 1216 V 285 w(10)517 b(deca)153
-b(da)p 3161 1216 V 615 1329 V 667 1295 a(10)757 1262
-y Fq(\000)p Fv(2)1274 1295 y FG(cen)m(ti)142 b(c)p 1888
-1329 V 296 w(10)2030 1262 y Fv(2)2547 1295 y FG(hecto)118
-b(h)p 3161 1329 V 615 1442 V 667 1408 a(10)757 1375 y
-Fq(\000)p Fv(3)1274 1408 y FG(milli)154 b(m)p 1888 1442
-V 260 w(10)2030 1375 y Fv(3)2547 1408 y FG(kilo)186 b(k)p
-3161 1442 V 615 1555 V 667 1521 a(10)757 1488 y Fq(\000)p
-Fv(6)1274 1521 y FG(micro)108 b(u)p 1888 1555 V 285 w(10)2030
-1488 y Fv(6)2547 1521 y FG(mega)123 b(M)p 3161 1555 V
-615 1668 V 667 1634 a(10)757 1601 y Fq(\000)p Fv(9)1274
-1634 y FG(nano)138 b(n)p 1888 1668 V 285 w(10)2030 1601
-y Fv(9)2547 1634 y FG(giga)169 b(G)p 3161 1668 V 615
-1781 V 667 1747 a(10)757 1714 y Fq(\000)p Fv(12)1274
-1747 y FG(pico)g(p)p 1888 1781 V 285 w(10)2030 1714 y
-Fv(12)2547 1747 y FG(tera)k(T)p 3161 1781 V 615 1894
-V 667 1860 a(10)757 1827 y Fq(\000)p Fv(15)1274 1860
-y FG(fem)m(to)109 b(f)p 1888 1894 V 308 w(10)2030 1827
-y Fv(15)2547 1860 y FG(p)s(eta)155 b(P)p 3161 1894 V
-615 2007 V 667 1973 a(10)757 1940 y Fq(\000)p Fv(18)1274
-1973 y FG(atto)170 b(a)p 1888 2007 V 291 w(10)2030 1940
-y Fv(18)2547 1973 y FG(exa)196 b(E)p 3161 2007 V 615
-2120 V 667 2086 a(10)757 2053 y Fq(\000)p Fv(21)1274
-2086 y FG(zepto)119 b(z)p 1888 2120 V 296 w(10)2030 2053
-y Fv(21)2547 2086 y FG(zetta)134 b(Z)p 3161 2120 V 615
-2233 V 667 2199 a(10)757 2166 y Fq(\000)p Fv(24)1274
-2199 y FG(y)m(o)s(cto)117 b(y)p 1888 2233 V 288 w(10)2030
-2166 y Fv(24)2547 2199 y FG(y)m(otta)124 b(Y)p 3161 2233
-V 617 2236 2546 4 v 590 3621 2601 4 v 588 3734 4 113
-v 1116 3700 a FD(Mathematical)33 b(op)s(erators)f(&)h(functions)p
-3188 3734 V 590 3737 2601 4 v 588 3850 4 113 v 746 3816
-a FG(String)p 1143 3850 V 1143 3850 V 1008 w(Meaning)p
-3188 3850 V 590 3853 2601 4 v 588 3966 4 113 v 639 3932
-a(sym1)e(sym2)p 1143 3966 V 115 w(m)m(ultiplication)h(\(a)f(space\))p
-3188 3966 V 588 4079 V 639 4045 a(sym1*sym2)p 1143 4079
-V 101 w(m)m(ultiplication)h(\(an)f(asterisk\))p 3188
-4079 V 588 4192 V 639 4158 a(sym1.sym2)p 1143 4192 V
-121 w(m)m(ultiplication)h(\(a)f(dot\))p 3188 4192 V 588
-4305 V 639 4271 a(sym1/sym2)p 1143 4305 V 101 w(division)p
-3188 4305 V 588 4418 V 639 4384 a(sym1**y)p 1143 4418
-V 213 w(exp)s(onen)m(tiation)g(\()p Fp(y)j FG(m)m(ust)c(b)s(e)g(a)g(n)m
-(umerical)h(constan)m(t\))p 3188 4418 V 588 4531 V 639
-4497 a(sym1)p Fy(^)p FG(y)p 1143 4531 V 255 w(exp)s(onen)m(tiation)g
-(\()p Fp(y)j FG(m)m(ust)c(b)s(e)g(a)g(n)m(umerical)h(constan)m(t\))p
-3188 4531 V 588 4644 V 639 4610 a(log\(sym1\))p 1143
-4644 V 166 w(common)f(logarithm)p 3188 4644 V 588 4756
-V 639 4723 a(ln\(sym1\))p 1143 4756 V 205 w(natural)g(logarithm)p
-3188 4756 V 588 4869 V 639 4836 a(exp\(sym1\))p 1143
-4869 V 142 w(exp)s(onen)m(tial)p 3188 4869 V 588 4982
-V 639 4948 a(sqrt\(sym1\))p 1143 4982 V 126 w(square)g(ro)s(ot)p
-3188 4982 V 590 4986 2601 4 v eop end
-%%Page: 79 89
-TeXDict begin 79 88 bop 3689 52 a FG(79)0 351 y FA(8)135
-b(Celestial)47 b(Co)t(ordinate)f(Systems)g(\(SkyF)-11
-b(rames\))0 628 y FG(A)45 b(F)-8 b(rame)47 b(whic)m(h)e(is)g(sp)s
-(ecialised)h(for)f(represen)m(ting)g(co)s(ordinate)h(systems)g(on)f
-(the)g(celestial)j(sphere)c(is)0 741 y(ob)m(viously)30
-b(of)g(great)g(imp)s(ortance)g(in)f(astronom)m(y)-8 b(.)42
-b(The)29 b(SkyF)-8 b(rame)30 b(is)f(suc)m(h)g(a)h(F)-8
-b(rame.)41 b(In)29 b(this)g(section)i(w)m(e)0 854 y(examine)e(the)f
-(additional)h(prop)s(erties)f(and)g(b)s(eha)m(viour)f(of)i(a)f(SkyF)-8
-b(rame)29 b(that)g(distinguish)e(it)i(from)e(a)i(basic)0
-967 y(F)-8 b(rame)31 b(\()p Fu(x)p FG(7\).)0 1315 y Fw(8.1)112
-b(The)38 b(SkyF)-9 b(rame)39 b(Mo)s(del)0 1561 y FG(A)28
-b(SkyF)-8 b(rame)27 b(is,)i(of)e(course,)i(a)f(F)-8 b(rame)28
-b(\()p Fu(x)p FG(7\))h(and)e(also)h(a)g(Mapping)f(\()p
-Fu(x)p FG(5\),)j(so)e(it)g(inherits)f(all)h(the)g(prop)s(erties)0
-1674 y(and)d(b)s(eha)m(viour)h(of)g(these)h(t)m(w)m(o)g(ancestral)g
-(classes.)41 b(When)25 b(used)h(as)g(a)g(Mapping,)h(a)g(SkyF)-8
-b(rame)26 b(implemen)m(ts)0 1787 y(a)41 b(unit)g(transformation,)j
-(exactly)f(lik)m(e)f(a)g(basic)f(F)-8 b(rame)42 b(\()p
-Fu(x)p FG(7.3\))h(or)e(a)h(UnitMap,)i(so)d(this)g(asp)s(ect)h(of)f(its)
-0 1900 y(b)s(eha)m(viour)30 b(is)g(not)h(of)g(great)g(imp)s(ortance.)0
-2079 y(When)k(used)g(as)h(a)g(F)-8 b(rame,)39 b(ho)m(w)m(ev)m(er,)f(a)f
-(SkyF)-8 b(rame)36 b(represen)m(ts)f(a)h(2-dimensional)h
-Fx(spheric)-5 b(al)38 b FG(co)s(ordinate)0 2192 y(system,)31
-b(in)g(whic)m(h)f(the)h(shortest)g(distance)g(b)s(et)m(w)m(een)h(t)m(w)
-m(o)g(p)s(oin)m(ts)e(is)h(a)g(great)h(circle.)43 b(A)31
-b(SkyF)-8 b(rame)31 b(there-)0 2304 y(fore)41 b(alw)m(a)m(ys)h(has)e
-(exactly)i(t)m(w)m(o)g(axes)g(whic)m(h)e(represen)m(t)g(the)h
-(longitude)g(and)f(latitude)i(of)f(a)g(co)s(ordinate)0
-2417 y(system)31 b(residing)f(on)g(the)h(celestial)i(sphere.)41
-b(Man)m(y)31 b(suc)m(h)f(co)s(ordinate)i(systems)e(can)h(b)s(e)f
-(represen)m(ted)h(b)m(y)f(a)0 2530 y(SkyF)-8 b(rame,)31
-b(as)g(w)m(e)f(will)h(see)g(shortly)-8 b(.)0 2709 y(A)32
-b(SkyF)-8 b(rame)32 b(can)f(represen)m(t)h(an)m(y)g(of)g(the)f
-(commonly)i(used)d(celestial)k(co)s(ordinate)f(systems.)44
-b(Optionally)-8 b(,)0 2822 y(the)29 b(origin)g(of)g(the)g
-(longitude/latitude)i(system)e(can)g(b)s(e)f(mo)m(v)m(ed)i(to)g(an)m(y)
-f(sp)s(eci\014ed)f(p)s(oin)m(t)h(in)f(the)h(standard)0
-2935 y(celestial)k(system,)e(allo)m(wing)h(a)f(SkyF)-8
-b(rame)30 b(to)h(represen)m(t)g(o\013sets)g(from)f(a)h(sp)s(eci\014ed)e
-(sky)i(p)s(osition.)0 3114 y(When)c(it)g(is)h(\014rst)e(created,)j(a)e
-(SkyF)-8 b(rame's)28 b(axes)g(are)f(alw)m(a)m(ys)i(in)e(the)g(order)f
-(\(longitude,)j(latitude\))f(but)f(this)0 3227 y(can)36
-b(b)s(e)e(c)m(hanged,)k(if)d(required,)h(b)m(y)f(using)g(the)g(AST)p
-Fy(_)p FG(PERMAXES)f(routine)i(\()p Fu(x)p FG(7.9\).)57
-b(The)35 b(order)g(of)g(the)0 3340 y(axes)e(can)g(b)s(e)f(determined)h
-(at)g(an)m(y)g(time)h(using)e(the)h(LatAxis)g(and)f(LonAxis)h
-(attributes.)48 b(A)33 b(SkyF)-8 b(rame's)0 3453 y(co)s(ordinate)40
-b(v)-5 b(alues)40 b(are)f(alw)m(a)m(ys)i(stored)e(as)h(angles)g(in)e
-(\(double)i(precision\))f(radians,)i(regardless)f(of)f(the)0
-3566 y(setting)31 b(of)g(the)g(Unit)f(attribute.)0 3914
-y Fw(8.2)112 b(Creating)38 b(a)g(SkyF)-9 b(rame)0 4160
-y FG(The)20 b(SkyF)-8 b(rame)21 b(constructor)g(function)f(is)h
-(particularly)g(simple)f(and)g(a)h(SkyF)-8 b(rame)21
-b(with)f(default)h(attributes)0 4273 y(is)30 b(created)i(as)e(follo)m
-(ws:)262 4571 y Ft(INCLUDE)40 b('AST_PAR')262 4671 y(INTEGER)g
-(SKYFRAME,)g(STATUS)262 4870 y(STATUS)h(=)i(0)262 5069
-y(...)262 5269 y(SKYFRAME)d(=)j(AST_SKYFRAME\()38 b(')43
-b(',)g(STATUS)e(\))0 5580 y FG(Suc)m(h)33 b(a)h(SkyF)-8
-b(rame)35 b(w)m(ould)e(represen)m(t)h(the)g(default)g(celestial)j(co)s
-(ordinate)d(system)g(whic)m(h,)h(at)f(presen)m(t,)h(is)0
-5693 y(the)c(ICRS)e(system)h(\(the)h(default)g(w)m(as)g("FK5\(J2000\)")
-i(in)e(v)m(ersions)f(of)h(AST)e(prior)h(to)h(3.0\).)p
-eop end
-%%Page: 80 90
-TeXDict begin 80 89 bop 0 52 a FG(80)1229 b Fz(8)91 b(CELESTIAL)29
-b(COORDINA)-8 b(TE)29 b(SYSTEMS)g(\(SKYFRAMES\))0 351
-y Fw(8.3)112 b(Sp)s(ecifying)39 b(a)f(P)m(articular)f(Celestial)i(Co)s
-(ordinate)f(System)0 579 y FG(F)-8 b(or)41 b(man)m(y)g(purp)s(oses,)h
-(the)e(ICRS)g(co)s(ordinate)h(system)g(is)g(p)s(erfectly)f(adequate.)73
-b(In)40 b(order)g(to)h(supp)s(ort)0 692 y(con)m(v)m(ersion)27
-b(b)s(et)m(w)m(een)e(a)h(v)-5 b(ariet)m(y)27 b(of)e(celestial)j(co)s
-(ordinate)e(systems,)g(ho)m(w)m(ev)m(er,)i(y)m(ou)e(can)f(create)i
-(SkyF)-8 b(rames)0 805 y(that)31 b(represen)m(t)f(an)m(y)h(of)g(these.)
-0 971 y(Selection)48 b(of)f(a)g(particular)h(co)s(ordinate)f(system)g
-(is)g(p)s(erformed)e(simply)i(b)m(y)f(setting)i(a)f(v)-5
-b(alue)48 b(for)e(the)0 1084 y(SkyF)-8 b(rame's)23 b(\(c)m(haracter)h
-(string\))e(System)g(attribute.)39 b(This)21 b(setting)j(is)e(most)h
-(con)m(v)m(enien)m(tly)h(done)e(when)f(the)0 1197 y(SkyF)-8
-b(rame)31 b(is)f(created.)42 b(F)-8 b(or)31 b(example,)h(a)e(SkyF)-8
-b(rame)31 b(represen)m(ting)g(the)f(old)h(FK4)g(\(B1950.0\))j(co)s
-(ordinate)0 1310 y(system)d(w)m(ould)f(b)s(e)f(created)j(b)m(y:)262
-1571 y Ft(SKYFRAME)40 b(=)j(AST_SKYFRAME\()38 b('System=FK4',)g(STATUS)
-j(\))0 1846 y FG(Note)48 b(that)g(sp)s(ecifying)f(\\System=FK4")h(also)
-g(c)m(hanges)g(the)f(asso)s(ciated)h(equino)m(x)g(\(from)f(J2000.0)i
-(to)0 1959 y(B1950.0\).)76 b(This)41 b(is)g(b)s(ecause)g(the)g(default)
-h(v)-5 b(alue)42 b(of)f(the)g(SkyF)-8 b(rame's)42 b(Equino)m(x)f
-(attribute)h(\()p Fu(x)p FG(8.4\))h(de-)0 2072 y(p)s(ends)29
-b(on)h(the)g(System)h(attribute)g(setting.)0 2238 y(Y)-8
-b(ou)30 b(ma)m(y)g(c)m(hange)h(the)e(System)h(v)-5 b(alue)30
-b(at)g(an)m(y)g(time,)g(although)g(this)g(is)f(not)h(usually)f(needed.)
-40 b(The)29 b(v)-5 b(alues)0 2351 y(supp)s(orted)40 b(are)h(set)h(out)g
-(in)f(the)h(attribute's)g(description)f(in)g(App)s(endix)f(C)h(and)g
-(include)g(a)h(v)-5 b(ariet)m(y)42 b(of)0 2464 y(equatorial)32
-b(co)s(ordinate)f(systems,)g(together)h(with)e(ecliptic)i(and)e
-(galactic)j(co)s(ordinates.)0 2631 y(General)43 b(spherical)g(co)s
-(ordinates)g(are)g(supp)s(orted)e(b)m(y)h(sp)s(ecifying)g
-(\\System=unkno)m(wn".)76 b(Y)-8 b(ou)43 b(should)0 2744
-y(note,)32 b(though,)g(that)g(no)f(Mapping)g(can)h(b)s(e)f(created)h
-(to)g(con)m(v)m(ert)h(b)s(et)m(w)m(een)f(\\unkno)m(wn")f(co)s
-(ordinates)h(and)0 2857 y(an)m(y)f(of)f(the)h(other)f(celestial)j(co)s
-(ordinate)f(systems)e(\(see)h Fu(x)p FG(12)h(\).)0 3164
-y Fw(8.4)112 b(A)m(ttributes)37 b(whic)m(h)g(Qualify)i(Celestial)g(Co)s
-(ordinate)f(Systems)0 3391 y FG(Man)m(y)30 b(celestial)h(co)s(ordinate)
-f(systems)f(ha)m(v)m(e)i(some)e(additional)h(free)f(parameters)h(whic)m
-(h)e(serv)m(e)i(to)g(iden)m(tify)0 3504 y(a)f(particular)f(co)s
-(ordinate)h(system)g(from)f(amongst)h(a)f(broader)g(class)h(of)f
-(related)i(co)s(ordinate)f(systems.)40 b(F)-8 b(or)0
-3617 y(example,)24 b(the)e(FK5)h(\(J2010.0\))h(system)e(is)g
-(distinguished)f(from)g(the)h(FK5)h(\(J2000.0\))h(system)e(b)m(y)g(a)g
-(di\013eren)m(t)0 3730 y(equino)m(x|and)34 b(the)g(co)s(ordinates)g(of)
-g(a)h(\014xed)e(astronomical)i(source)f(w)m(ould)g(ha)m(v)m(e)h
-(di\013eren)m(t)f(v)-5 b(alues)34 b(when)0 3843 y(expressed)c(in)g
-(these)h(t)m(w)m(o)g(systems.)0 4010 y(In)26 b(AST,)f(these)i(free)g
-(parameters)f(are)h(represen)m(ted)f(b)m(y)h(additional)g(SkyF)-8
-b(rame)27 b(attributes,)h(eac)m(h)f(of)g(whic)m(h)0 4123
-y(has)j(a)g(default)g(appropriate)g(to)g(\()p Fx(i.e.)g
-FG(de\014ned)e(b)m(y\))i(the)g(setting)h(of)f(the)g(main)g(System)g
-(attribute.)41 b(Eac)m(h)30 b(of)0 4235 y(these)c Fx(qualifying)i
-(attributes)e FG(ma)m(y)-8 b(,)28 b(ho)m(w)m(ev)m(er,)g(b)s(e)d
-(assigned)h(an)f(explicit)i(v)-5 b(alue)26 b(so)f(as)h(to)g(select)h(a)
-f(particular)0 4348 y(co)s(ordinate)38 b(system.)62 b(Note,)41
-b(it)d(is)f(usually)g(b)s(est)g(to)h(assign)g(explicit)h(v)-5
-b(alues)37 b(whenev)m(er)h(p)s(ossible)f(rather)0 4461
-y(than)28 b(relying)i(on)e(defaults.)40 b(A)m(ttribute)30
-b(should)e(only)h(b)s(e)f(left)h(at)g(their)g(default)g(v)-5
-b(alue)29 b(if)g(y)m(ou)g(\\don't)g(care")0 4574 y(what)e(v)-5
-b(alue)27 b(is)g(used.)39 b(In)26 b(certain)i(circumstances)g
-(\(particularly)-8 b(,)29 b(when)d(aligning)i(t)m(w)m(o)g(F)-8
-b(rames\),)29 b(a)e(default)0 4687 y(v)-5 b(alue)37 b(for)g(an)g
-(attribute)h(ma)m(y)f(b)s(e)g(replaced)g(b)m(y)g(the)g(v)-5
-b(alue)37 b(from)g(another)g(similar)g(F)-8 b(rame.)62
-b(Suc)m(h)36 b(v)-5 b(alue)0 4800 y(replacemen)m(t)28
-b(can)e(b)s(e)g(prev)m(en)m(ted)h(b)m(y)f(assigning)h(an)f(explicit)h
-(v)-5 b(alue)27 b(to)g(the)g(attribute,)h(rather)e(than)g(simply)0
-4913 y(relying)31 b(on)f(the)h(default.)0 5080 y(The)f(main)g(SkyF)-8
-b(rame)31 b(attributes)g(whic)m(h)f(qualify)g(the)h(System)f(attribute)
-h(are:)227 5354 y FE(Ep)s(o)s(c)m(h)427 5467 y FG(This)i(attribute)h
-(is)g(inherited)f(from)g(the)h(F)-8 b(rame)34 b(class.)51
-b(It)34 b(giv)m(es)g(the)g(momen)m(t)g(in)f(time)427
-5580 y(when)27 b(the)h(co)s(ordinates)h(are)f(correct)h(for)e(the)h
-(astronomical)i(source)e(under)e(study)h(\(usu-)427 5693
-y(ally)32 b(the)e(date)h(of)g(observ)-5 b(ation\).)p
-eop end
-%%Page: 81 91
-TeXDict begin 81 90 bop 0 52 a Fz(8.5)92 b(Using)31 b(Default)g(SkyF)-8
-b(rame)31 b(A)m(ttributes)2067 b FG(81)227 351 y FE(Equino)m(x)427
-464 y FG(This)39 b(v)-5 b(alue)40 b(is)f(used)f(to)i(qualify)g
-(celestial)i(co)s(ordinate)e(systems)f(that)h(are)g(notionally)427
-577 y(based)27 b(on)g(the)g(Earth's)g(equator)h(and/or)f(the)h
-(ecliptic)h(\(the)e(plane)g(of)h(the)f(Earth's)g(orbit)427
-690 y(around)36 b(the)g(Sun\).)58 b(The)36 b(p)s(osition)h(of)f(either)
-h(of)g(these)g(planes)f(is)h(di\016cult)f(to)i(sp)s(ecify)427
-803 y(precisely)-8 b(,)30 b(so)e(in)g(practice)i(a)e(mo)s(del)g
-Fx(me)-5 b(an)29 b FG(equator)g(and/or)f(ecliptic)i(are)e(used)g
-(instead.)427 916 y(These,)41 b(together)g(with)d(the)i(p)s(oin)m(t)f
-(on)f(the)h(sky)g(that)h(de\014nes)e(the)h(co)s(ordinate)h(origin)427
-1029 y(\(termed)i(the)g Fx(me)-5 b(an)45 b(e)-5 b(quinox)p
-FG(\))42 b(mo)m(v)m(e)h(with)f(time)g(according)h(to)g(some)f(mo)s(del)
-f(whic)m(h)427 1142 y(smo)s(othes)33 b(out)g(the)h(more)f(rapid)f
-(\015uctuations.)48 b(The)33 b(SkyF)-8 b(rame)33 b(class)h(supp)s(orts)
-d(b)s(oth)427 1255 y(the)g(old)f(FK4)h(mo)s(del)f(and)g(the)h(new)m(er)
-f(FK5)h(one.)427 1385 y(Co)s(ordinates)c(expressed)f(in)g(an)m(y)h(of)g
-(these)g(systems)f(v)-5 b(ary)27 b(with)f(time)h(due)f(to)h(mo)m(v)m
-(emen)m(t)427 1497 y(\(b)m(y)33 b(de\014nition\))g(of)g(the)g(co)s
-(ordinate)g(system)g(itself,)h(and)f(m)m(ust)f(therefore)h(b)s(e)f
-(quali\014ed)427 1610 y(b)m(y)i(a)h(momen)m(t)g(in)e(time)i(\(the)g
-Fx(ep)-5 b(o)g(ch)38 b(of)e(the)g(me)-5 b(an)37 b(e)-5
-b(quinox,)36 b FG(or)e(\\equino)m(x")h(for)f(short\))427
-1723 y(whic)m(h)c(sp)s(eci\014es)f(the)g(p)s(osition)h(of)g(the)f(mo)s
-(del)h(co)s(ordinate)g(system)g(on)f(the)h(sky)-8 b(.)40
-b(This)29 b(is)427 1836 y(the)i(role)g(of)f(the)h(Equino)m(x)f
-(attribute.)427 1966 y(Note)i(that)f(it)h(is)e(quite)h(v)-5
-b(alid)31 b(and)f(common)h(to)h(relate)g(the)f(p)s(osition)f(of)h(a)g
-(source)g(to)g(an)427 2079 y(equino)m(x)36 b(other)g(than)f(the)g(date)
-h(of)g(observ)-5 b(ation.)56 b(Usually)36 b(a)f(standard)g(equino)m(x)h
-(suc)m(h)427 2192 y(as)27 b(J2000.0)i(is)d(used,)h(meaning)g(that)g
-(the)g(co)s(ordinates)g(are)g(referred)f(to)h(axes)g(de\014ned)e(b)m(y)
-427 2305 y(where)32 b(the)h(mo)s(del)f(mean)h(equator)g(and)f(ecliptic)
-i(w)m(ould)e(lie)h(on)g(the)f(sky)h(at)g(the)g(Julian)427
-2418 y(ep)s(o)s(c)m(h)d(J2000.0.)0 2683 y(F)-8 b(or)32
-b(further)d(details)j(of)f(these)h(attributes)f(y)m(ou)h(should)e
-(consult)h(their)g(descriptions)g(in)f(App)s(endix)g(C)g(and)0
-2796 y(for)g(details)i(of)e(the)h(System)f(settings)i(for)e(whic)m(h)g
-(they)h(are)g(relev)-5 b(an)m(t,)32 b(see)f(the)g(description)f(of)h
-(the)g(System)0 2909 y(attribute)41 b(\(also)h(in)f(App)s(endix)e(C\).)
-71 b(F)-8 b(or)41 b(the)g(in)m(terested)h(reader,)h(an)e(excellen)m(t)i
-(o)m(v)m(erview)f(of)f(celestial)0 3022 y(co)s(ordinate)31
-b(systems)g(can)f(also)i(b)s(e)d(found)g(in)h(the)h(do)s(cumen)m
-(tation)g(for)f(the)h(SLALIB)f(library)g(\(SUN/67\).)0
-3185 y(The)c(v)-5 b(alue)28 b(of)f(these)g(qualifying)g(attributes)h
-(is)f(most)g(con)m(v)m(enien)m(tly)i(set)f(at)f(the)h(same)f(time)g(as)
-h(the)f(System)0 3298 y(v)-5 b(alue,)31 b Fx(e.g.)f FG(when)f(a)i(SkyF)
--8 b(rame)31 b(is)f(created.)42 b(F)-8 b(or)31 b(instance:)262
-3550 y Ft(SKYFRAME)40 b(=)j(AST_SKYFRAME\()38 b('System=Ecliptic,)f
-(Equinox=J2005.5')o(,)g(STATUS)k(\))0 3815 y FG(w)m(ould)22
-b(create)h(a)g(SkyF)-8 b(rame)22 b(represen)m(ting)g(an)g(ecliptic)i
-(co)s(ordinate)f(system)f(referred)f(to)i(the)f(mean)g(equino)m(x)0
-3928 y(and)30 b(ecliptic)i(of)e(Julian)g(ep)s(o)s(c)m(h)h(J2005.5.)0
-4092 y(Note)38 b(that)f(it)h(do)s(es)e(no)h(harm)f(to)h(assign)g(v)-5
-b(alues)37 b(to)h(qualifying)f(attributes)g(whic)m(h)g(are)g(not)g
-(relev)-5 b(an)m(t)38 b(to)0 4205 y(the)28 b(main)g(System)g(v)-5
-b(alue.)41 b(An)m(y)28 b(suc)m(h)g(v)-5 b(alues)28 b(are)h(stored,)g
-(but)e(are)h(not)h(used)e(unless)h(the)g(System)g(v)-5
-b(alue)28 b(is)0 4318 y(later)j(set)g(so)g(that)g(they)f(b)s(ecome)h
-(relev)-5 b(an)m(t.)0 4614 y Fw(8.5)112 b(Using)38 b(Default)h(SkyF)-9
-b(rame)38 b(A)m(ttributes)0 4837 y FG(The)43 b(default)i(v)-5
-b(alues)44 b(supplied)f(for)g(man)m(y)h(SkyF)-8 b(rame)45
-b(attributes)f(will)g(dep)s(end)f(on)h(the)g(v)-5 b(alue)44
-b(of)g(the)0 4950 y(SkyF)-8 b(rame's)29 b(System)f(attribute.)41
-b(In)28 b(practice,)i(this)f(means)f(that)h(there)g(is)g(usually)f
-(little)i(need)f(to)g(sp)s(ecify)0 5063 y(man)m(y)44
-b(of)g(these)g(attributes)g(explicitly)h(unless)e(y)m(ou)h(ha)m(v)m(e)h
-(some)f(sp)s(ecial)g(requiremen)m(t.)81 b(This)43 b(can)h(b)s(e)0
-5176 y(illustrated)31 b(b)m(y)f(using)g(AST)p Fy(_)p
-FG(SHO)m(W)g(to)h(examine)g(a)g(SkyF)-8 b(rame,)31 b(as)f(follo)m(ws:)
-262 5428 y Ft(CALL)41 b(AST_SHOW\()f(AST_SKYFRAME\()f('System=FK4-NO-)o
-(E,)e(Epoch=1958',)i(STATUS)i(\),)i(STATUS)e(\))0 5693
-y FG(The)30 b(output)g(from)g(this)g(migh)m(t)h(lo)s(ok)g(lik)m(e)h
-(the)e(follo)m(wing:)p eop end
-%%Page: 82 92
-TeXDict begin 82 91 bop 0 52 a FG(82)1229 b Fz(8)91 b(CELESTIAL)29
-b(COORDINA)-8 b(TE)29 b(SYSTEMS)g(\(SKYFRAMES\))275 351
-y Fy(Begin)46 b(SkyFrame)428 b(#)47 b(Description)e(of)i(celestial)e
-(coordinate)g(system)227 464 y(#)143 b(Title)47 b(=)g("FK4)g
-(equatorial)e(coordinates;)f(no)j(E-terms;)f(mean)g(equinox)g(B1950.0;)
-227 577 y(epoch)h(B1958.0")141 b(#)47 b(Title)f(of)i(coordinate)d
-(system)418 690 y(Naxes)i(=)g(2)143 b(#)47 b(Number)f(of)i(coordinate)d
-(axes)227 803 y(#)143 b(Domain)46 b(=)i("SKY")285 b(#)47
-b(Coordinate)e(system)h(domain)418 916 y(Epoch)h(=)g(1958)381
-b(#)47 b(Besselian)e(epoch)i(of)g(observation)227 1029
-y(#)143 b(Lbl1)47 b(=)g("Right)f(ascension")189 b(#)47
-b(Label)f(for)h(axis)g(1)227 1142 y(#)143 b(Lbl2)47 b(=)g
-("Declination")379 b(#)47 b(Label)f(for)h(axis)g(2)418
-1255 y(System)f(=)i("FK4-NO-E")427 b(#)47 b(Coordinate)e(system)h(type)
-227 1367 y(#)143 b(Uni1)47 b(=)g("hh:mm:ss.s")427 b(#)47
-b(Units)f(for)h(axis)g(1)227 1480 y(#)143 b(Uni2)47 b(=)g("ddd:mm:ss")
-93 b(#)47 b(Units)g(for)f(axis)h(2)227 1593 y(#)143 b(Dir1)47
-b(=)g(0)191 b(#)47 b(Plot)g(axis)g(1)g(in)g(reverse)f(direction)227
-1706 y(#)143 b(Bot2)47 b(=)g(-1.5707963267949)235 b(#)47
-b(Lowest)f(legal)g(axis)h(value)227 1819 y(#)143 b(Top2)47
-b(=)g(1.5707963267949)283 b(#)47 b(Highest)f(legal)g(axis)h(value)418
-1932 y(Ax1)g(=)334 b(#)47 b(Axis)g(number)f(1)561 2045
-y(Begin)h(SkyAxis)189 b(#)47 b(Celestial)e(coordinate)g(axis)561
-2158 y(End)i(SkyAxis)418 2271 y(Ax2)g(=)334 b(#)47 b(Axis)g(number)f(2)
-561 2384 y(Begin)h(SkyAxis)189 b(#)47 b(Celestial)e(coordinate)g(axis)
-561 2497 y(End)i(SkyAxis)275 2609 y(IsA)g(Frame)285 b(#)47
-b(Coordinate)e(system)h(description)227 2722 y(#)143
-b(Eqnox)47 b(=)g(1950)381 b(#)47 b(Besselian)e(epoch)i(of)g(mean)g
-(equinox)275 2835 y(End)g(SkyFrame)0 3083 y FG(Note)40
-b(that)f(the)g(defaults)g(\(indicated)h(b)m(y)e(the)h(\\)p
-Fy(#)p FG(")h(commen)m(t)f(c)m(haracter)i(at)e(the)g(start)g(of)g(the)g
-(line\))h(for)0 3196 y(attributes)32 b(suc)m(h)g(as)g(the)g(Title,)h
-(axis)f(Lab)s(els)g(and)f(F)-8 b(ormat)33 b(sp)s(eci\014ers)e(are)h
-(all)h(set)f(to)g(v)-5 b(alues)32 b(appropriate)0 3309
-y(for)e(the)h(particular)f(equatorial)i(co)s(ordinate)g(system)e(that)h
-(the)g(SkyF)-8 b(rame)30 b(represen)m(ts.)0 3468 y(This)41
-b(means,)j(for)d(example,)k(that)d(if)f(w)m(e)h(w)m(ere)g(to)g(use)f
-(this)g(SkyF)-8 b(rame)42 b(to)g(format)f(a)h(righ)m(t)g(ascension)0
-3581 y(v)-5 b(alue)36 b(stored)f(in)g(radians)g(using)g(AST)p
-Fy(_)p FG(F)m(ORMA)-8 b(T)36 b(\()p Fu(x)p FG(7.6\),)j(it)d(w)m(ould)f
-(automatically)j(result)e(in)f(a)g(string)0 3694 y(in)f(sexagesimal)i
-(notation)f(\(suc)m(h)f(as)h(\\12:14:35.7"\))k(suitable)34
-b(for)g(displa)m(y)-8 b(.)53 b(If)33 b(w)m(e)i(c)m(hanged)f(the)h(v)-5
-b(alue)34 b(of)0 3807 y(the)29 b(SkyF)-8 b(rame's)30
-b(Digits)g(attribute)g(\(whic)m(h)f(is)g(inherited)g(from)f(the)h(F)-8
-b(rame)30 b(class\),)h(the)e(n)m(um)m(b)s(er)f(of)h(digits)0
-3920 y(app)s(earing)h(w)m(ould)g(also)h(c)m(hange)h(accordingly)-8
-b(.)0 4079 y(These)24 b(c)m(hoices)i(w)m(ould)e(b)s(e)f(appropriate)i
-(for)f(a)g(System)g(v)-5 b(alue)25 b(of)f(\\FK4-NO-E",)j(but)c(if)h(a)h
-(di\013eren)m(t)g(System)0 4192 y(v)-5 b(alue)31 b(w)m(ere)g(set,)g
-(the)g(defaults)g(w)m(ould)f(b)s(e)g(corresp)s(ondingly)g(di\013eren)m
-(t.)42 b(F)-8 b(or)31 b(example,)h(ecliptic)g(longitude)0
-4305 y(is)39 b(traditionally)h(expressed)f(in)f(degrees,)k(so)d
-(setting)h(\\System=ecliptic")h(w)m(ould)d(result)h(in)g(co)s(ordinate)
-0 4417 y(v)-5 b(alues)31 b(b)s(eing)f(formatted)h(as)f(degrees)h(b)m(y)
-f(default.)0 4577 y(Of)35 b(course,)j(if)e(y)m(ou)h(do)f(not)g(lik)m(e)
-h(an)m(y)g(of)f(these)h(defaults,)g(y)m(ou)g(ma)m(y)f(alw)m(a)m(ys)i(o)
-m(v)m(er-ride)f(them)f(b)m(y)g(setting)0 4689 y(explicit)c(attribute)f
-(v)-5 b(alues)31 b(y)m(ourself.)0 4977 y Fw(8.6)112 b(F)-9
-b(ormatting)38 b(Celestial)g(Co)s(ordinates)0 5195 y
-FG(SkyF)-8 b(rames)21 b(use)g(AST)p Fy(_)p FG(F)m(ORMA)-8
-b(T)21 b(for)f(formatting)i(co)s(ordinate)g(v)-5 b(alues)21
-b(in)f(the)h(same)h(w)m(a)m(y)f(as)h(other)f(F)-8 b(rames)0
-5308 y(\()p Fu(x)p FG(7.6\).)61 b(Ho)m(w)m(ev)m(er,)40
-b(they)d(o\013er)g(a)f(di\013eren)m(t)h(set)g(of)g(formatting)g
-(options)g(more)f(appropriate)h(to)g(celestial)0 5421
-y(co)s(ordinates.)0 5580 y(The)e(Digits)i(attribute)g(of)e(a)i(SkyF)-8
-b(rame)36 b(b)s(eha)m(v)m(es)g(in)f(essen)m(tially)j(the)e(same)g(w)m
-(a)m(y)g(as)g(for)f(a)h(basic)h(F)-8 b(rame)0 5693 y(\()p
-Fu(x)p FG(7.6\),)28 b(so)d(the)g(precision)f(with)h(whic)m(h)f
-(celestial)j(co)s(ordinates)e(are)g(displa)m(y)m(ed)g(can)g(also)h(b)s
-(e)e(adjusted)f(in)i(this)p eop end
-%%Page: 83 93
-TeXDict begin 83 92 bop 0 52 a Fz(8.6)92 b(F)-8 b(ormatting)32
-b(Celestial)h(Co)s(ordinates)2158 b FG(83)0 351 y(w)m(a)m(y)-8
-b(.)50 b(Ho)m(w)m(ev)m(er,)35 b(the)e(range)h(of)f(format)g(sp)s
-(eci\014ers)f(that)h(can)g(b)s(e)g(giv)m(en)g(for)g(the)g(F)-8
-b(ormat\(axis\))35 b(attribute,)0 464 y(and)30 b(the)g(default)h
-(format)g(resulting)f(from)g(an)m(y)h(particular)f(Digits)i(v)-5
-b(alue,)31 b(is)g(di\013eren)m(t.)0 624 y(The)f(syn)m(tax)h(of)f(SkyF)
--8 b(rame)31 b(format)g(sp)s(eci\014ers)e(is)i(detailed)g(under)e(the)h
-(description)h(of)f(the)h(F)-8 b(ormat\(axis\))0 737
-y(attribute)31 b(in)f(App)s(endix)e(C.)40 b(Brie\015y)-8
-b(,)31 b(ho)m(w)m(ev)m(er,)h(it)e(allo)m(ws)i(celestial)g(co)s
-(ordinates)f(to)g(b)s(e)e(expressed)h(either)0 850 y(as)h(angles)g(or)f
-(times)h(and)f(to)h(include)f(one)h(or)f(more)h(of)f(the)h(\014elds:)
-336 1100 y Fu(\017)46 b FG(degrees)31 b(or)g(hours)336
-1243 y Fu(\017)46 b FG(arc-min)m(utes)31 b(or)g(min)m(utes)336
-1386 y Fu(\017)46 b FG(arc-seconds)31 b(or)g(seconds)0
-1637 y(with)h(a)h(sp)s(eci\014ed)e(n)m(um)m(b)s(er)h(of)g(decimal)h
-(places)h(for)e(the)g(\014nal)g(\014eld.)47 b(A)32 b(range)h(of)f
-(\014eld)g(separators)h(is)g(also)0 1750 y(a)m(v)-5 b(ailable,)33
-b(as)e(the)f(follo)m(wing)i(examples)f(sho)m(w:)p 811
-1916 2158 4 v 809 2029 4 113 v 861 1995 a FE(F)-9 b(ormat)35
-b(Sp)s(eci\014er)p 1667 2029 V 100 w(Example)g(F)-9 b(ormatted)34
-b(V)-9 b(alue)p 2967 2029 V 811 2033 2158 4 v 811 2049
-V 809 2162 4 113 v 861 2128 a Fy(d)p 1667 2162 V 809
-w(219)p 2967 2162 V 809 2275 V 861 2241 a(d.3)p 1667
-2275 V 713 w(219.123)p 2967 2275 V 809 2388 V 861 2354
-a(dm)p 1667 2388 V 761 w(219:05)p 2967 2388 V 809 2501
-V 861 2467 a(dm.2)p 1667 2501 V 665 w(219:05.44)p 2967
-2501 V 809 2614 V 861 2580 a(dms)p 1667 2614 V 713 w(219:05:42)p
-2967 2614 V 809 2727 V 861 2693 a(hms.1)p 1667 2727 V
-617 w(15:44:13.8)p 2967 2727 V 809 2839 V 861 2806 a(bdms.2)p
-1667 2839 V 569 w(219)47 b(05)g(42.81)p 2967 2839 V 809
-2952 V 861 2919 a(lhms.3)p 1667 2952 V 569 w(15h44m13.88s)p
-2967 2952 V 809 3065 V 861 3031 a(+zlhms)p 1667 3065
-V 569 w(+06h10m44s)p 2967 3065 V 809 3178 V 861 3144
-a(ms.1)p 1667 3178 V 665 w(13145:42.8)p 2967 3178 V 809
-3291 V 861 3257 a(lmst.3)p 1667 3291 V 569 w(876m22.854s)p
-2967 3291 V 809 3404 V 861 3370 a(s.2)p 1667 3404 V 713
-w(788742.81)p 2967 3404 V 811 3407 2158 4 v 0 3616 a
-FG(Note)32 b(the)e(follo)m(wing)i(k)m(ey)f(p)s(oin)m(ts:)136
-3867 y Fu(\017)46 b FG(The)f(required)f(\014elds)g(are)i(sp)s
-(eci\014ed)e(using)h(c)m(haracters)h(c)m(hosen)g(from)e(either)i
-(\\dms")f(or)f(\\hms")227 3979 y(according)36 b(to)f(whether)e(the)i(v)
--5 b(alue)35 b(is)f(to)h(b)s(e)f(formatted)h(as)f(an)g(angle)i(\(in)e
-(degrees\))h(or)g(a)f(time)h(\(in)227 4092 y(hours\).)136
-4277 y Fu(\017)46 b FG(If)38 b(no)g(degrees)g(or)g(hours)f(\014eld)h
-(is)g(required,)i(the)e(distinction)g(b)s(et)m(w)m(een)h(angle)g(and)f
-(time)g(ma)m(y)h(b)s(e)227 4390 y(made)31 b(b)m(y)f(including)g(\\t")h
-(to)h(request)e(time.)136 4575 y Fu(\017)46 b FG(The)35
-b(n)m(um)m(b)s(er)g(of)g(decimal)i(places)f(\(for)g(the)g(\014nal)f
-(\014eld\))g(is)h(indicated)g(using)f(\\)p Fy(.)p FG(")57
-b(follo)m(w)m(ed)37 b(b)m(y)f(an)227 4687 y(in)m(teger.)k(An)23
-b(asterisk)i(can)e(b)s(e)g(used)g(in)g(place)i(of)f(an)f(in)m(teger,)k
-(in)c(whic)m(h)g(case)i(the)f(n)m(um)m(b)s(er)e(of)h(decimal)227
-4800 y(places)34 b(is)g(c)m(hosen)f(so)h(that)g(the)f(total)i(n)m(um)m
-(b)s(er)d(of)h(digits)h(in)f(the)h(formatted)g(v)-5 b(alue)33
-b(is)h(equal)f(to)h(the)227 4913 y(v)-5 b(alue)31 b(of)g(the)f(Digits)i
-(attribute.)136 5098 y Fu(\017)46 b FG(\\b")31 b(causes)f(\014elds)g
-(to)g(b)s(e)g(separated)g(b)m(y)g(blanks,)g(while)g(\\l")h(causes)g
-(them)f(to)g(b)s(e)g(separated)g(b)m(y)g(the)227 5211
-y(appropriate)h(letters)g(\(the)g(default)g(b)s(eing)f(a)g(colon\).)136
-5395 y Fu(\017)46 b FG(\\z")32 b(causes)f(padding)e(with)h(leading)h
-(zeros.)136 5580 y Fu(\017)46 b FG(\\+")41 b(cause)g(a)g(plus)f(sign)g
-(to)i(b)s(e)d(pre\014xed)h(to)h(p)s(ositiv)m(e)h(v)-5
-b(alues)40 b(\(negativ)m(e)j(v)-5 b(alues)41 b(alw)m(a)m(ys)h(ha)m(v)m
-(e)g(a)227 5693 y(min)m(us)30 b(sign\).)p eop end
-%%Page: 84 94
-TeXDict begin 84 93 bop 0 52 a FG(84)1229 b Fz(8)91 b(CELESTIAL)29
-b(COORDINA)-8 b(TE)29 b(SYSTEMS)g(\(SKYFRAMES\))0 351
-y FG(The)42 b(formatting)i(p)s(erformed)d(b)m(y)h(a)h(SkyF)-8
-b(rame)43 b(is)f(also)i(in\015uenced)d(b)m(y)i(the)g(AsTime\(axis\))g
-(attribute,)0 464 y(whic)m(h)31 b(has)f(a)h(b)s(o)s(olean)g(\(in)m
-(teger\))i(v)-5 b(alue)32 b(for)e(eac)m(h)i(SkyF)-8 b(rame)32
-b(axis.)42 b(It)31 b(determines)g(whether)f(the)h(default)0
-577 y(format)d(sp)s(eci\014er)g(for)f(an)h(axis)g(will)h(presen)m(t)f
-(v)-5 b(alues)28 b(as)g(angles)h(\()p Fx(e.g.)f FG(in)f(degrees\))i(if)
-f(it)g(is)g(zero,)i(or)e(as)g(times)0 690 y(\()p Fx(e.g.)i
-FG(in)g(hours\))g(if)g(it)h(is)f(non-zero.)0 879 y(The)44
-b(default)h(AsTime)g(v)-5 b(alue)45 b(dep)s(ends)e(on)h(the)h
-(celestial)i(co)s(ordinate)f(system)f(whic)m(h)f(the)h(SkyF)-8
-b(rame)0 992 y(represen)m(ts)45 b(whic)m(h,)k(in)44 b(turn,)k(dep)s
-(ends)43 b(on)i(its)h(System)e(attribute)i(v)-5 b(alue.)85
-b(F)-8 b(or)46 b(example,)k(equatorial)0 1105 y(longitude)34
-b(v)-5 b(alues)34 b(\(righ)m(t)h(ascension\))f(are)g(normally)g
-(expressed)f(in)h(hours,)f(whereas)h(ecliptic)h(longitudes)0
-1218 y(are)c(normally)f(expressed)g(in)g(degrees,)h(so)g(their)f
-(default)h(AsTime)f(v)-5 b(alues)31 b(will)g(re\015ect)g(this)f
-(di\013erence.)0 1408 y(The)h(v)-5 b(alue)32 b(of)g(the)g(AsTime)f
-(attribute)i(ma)m(y)f(b)s(e)f(set)h(explicitly)h(to)g(o)m(v)m(er-ride)g
-(these)f(defaults)f(if)h(required,)0 1521 y(with)e(the)g(formatting)h
-(precision)g(b)s(eing)f(determined)g(b)m(y)g(the)g
-(Digits/Digits\(axis\))35 b(v)-5 b(alue.)41 b(Alternativ)m(ely)-8
-b(,)0 1633 y(the)37 b(F)-8 b(ormat\(axis\))40 b(attribute)e(ma)m(y)g(b)
-s(e)e(set)i(explicitly)h(to)f(sp)s(ecify)f(b)s(oth)f(the)i(format)f
-(and)g(precision)g(re-)0 1746 y(quired.)63 b(Setting)39
-b(an)f(explicit)i(F)-8 b(ormat)39 b(v)-5 b(alue)39 b(alw)m(a)m(ys)h(o)m
-(v)m(er-rides)f(the)g(e\013ects)g(of)f(b)s(oth)g(the)g(Digits)i(and)0
-1859 y(AsTime)d(attributes)g(\(unless)g(the)g(F)-8 b(ormat)38
-b(v)-5 b(alue)38 b(do)s(es)e(not)h(sp)s(ecify)g(the)g(required)f(n)m
-(um)m(b)s(er)f(of)i(decimal)0 1972 y(places,)31 b(in)f(whic)m(h)h(case)
-g(Digits)h(is)e(used)g(to)h(determine)g(the)f(default)h(n)m(um)m(b)s
-(er)e(of)h(decimal)i(places\))0 2355 y Fw(8.7)112 b(Reading)39
-b(F)-9 b(ormatted)37 b(Celestial)i(Co)s(ordinates)0 2616
-y FG(The)f(pro)s(cess)g(of)g(con)m(v)m(erting)j(formatted)d(celestial)j
-(co)s(ordinates,)h(suc)m(h)c(as)g(migh)m(t)i(b)s(e)d(pro)s(duced)g(b)m
-(y)h(the)0 2729 y(AST)p Fy(_)p FG(F)m(ORMA)-8 b(T)22
-b(function)f(\()p Fu(x)p FG(8.6\),)26 b(in)m(to)d(n)m(umerical)f
-(\(double)g(precision\))g(co)s(ordinate)h(v)-5 b(alues)22
-b(is)g(p)s(erformed)0 2842 y(b)m(y)44 b(using)g(AST)p
-Fy(_)p FG(UNF)m(ORMA)-8 b(T)45 b(\()p Fu(x)p FG(7.8\))i(and)c(passing)h
-(it)h(a)g(p)s(oin)m(ter)g(to)g(a)f(SkyF)-8 b(rame.)84
-b(The)43 b(use)i(of)f(a)0 2955 y(SkyF)-8 b(rame)26 b(means)g(that)h
-(the)f(range)g(of)g(input)f(formats)h(accepted)h(is)f(appropriate)g(to)
-h(p)s(ositions)f(on)g(the)g(sky)0 3068 y(expressed)k(as)g(angles)i
-(and/or)e(times,)h(while)g(the)f(returned)f(v)-5 b(alue)31
-b(is)g(in)f(radians.)0 3257 y(The)g(follo)m(wing)i(describ)s(es)d(the)i
-(forms)f(of)g(celestial)j(co)s(ordinate)e(whic)m(h)f(are)h(supp)s
-(orted:)136 3600 y Fu(\017)46 b FG(Y)-8 b(ou)36 b(ma)m(y)g(supply)e(an)
-h(optional)h(sign,)h(follo)m(w)m(ed)g(b)m(y)e(b)s(et)m(w)m(een)h(one)f
-(and)g(three)g(\014elds)g(represen)m(ting)227 3712 y(either)c(degrees,)
-g(arc-min)m(utes,)h(arc-seconds)f(or)f(hours,)g(min)m(utes,)g(seconds)h
-(\()p Fx(e.g.)f FG(\\)p Fu(\000)p FG(12)h(42)g(03"\).)136
-3954 y Fu(\017)46 b FG(Eac)m(h)35 b(\014eld)e(should)g(consist)h(of)g
-(a)g(sequence)g(of)g(one)g(or)f(more)h(digits,)i(whic)m(h)d(ma)m(y)h
-(include)g(leading)227 4066 y(zeros.)46 b(A)m(t)33 b(most)g(one)f
-(\014eld)g(ma)m(y)g(con)m(tain)h(a)g(decimal)g(p)s(oin)m(t,)f(in)g
-(whic)m(h)g(case)h(it)f(is)g(tak)m(en)h(to)g(b)s(e)e(the)227
-4179 y(\014nal)37 b(\014eld)f(\()p Fx(e.g.)g FG(decimal)i(degrees)f
-(migh)m(t)g(b)s(e)f(giv)m(en)i(as)e(\\124.707",)43 b(while)36
-b(degrees)h(and)f(decimal)227 4292 y(arc-min)m(utes)31
-b(migh)m(t)h(b)s(e)d(giv)m(en)j(as)e(\\)p Fu(\000)p FG(13)i(33.8"\).)
-136 4533 y Fu(\017)46 b FG(The)23 b(\014rst)g(\014eld)g(giv)m(en)h(ma)m
-(y)g(tak)m(e)h(an)m(y)f(v)-5 b(alue,)25 b(allo)m(wing)g(angles)g(and)d
-(times)i(outside)g(the)g(con)m(v)m(en)m(tional)227 4646
-y(ranges)i(to)h(b)s(e)e(represen)m(ted.)39 b(Ho)m(w)m(ev)m(er,)29
-b(subsequen)m(t)c(\014elds)h(m)m(ust)f(ha)m(v)m(e)i(v)-5
-b(alues)26 b(of)g(less)h(than)e(60)i(\()p Fx(e.g.)227
-4759 y FG(\\720)32 b(45)g(31")f(is)g(v)-5 b(alid,)31
-b(whereas)f(\\11)h(45)h(61")f(is)g(not\).)136 5000 y
-Fu(\017)46 b FG(Fields)26 b(ma)m(y)g(b)s(e)e(separated)h(b)m(y)g(white)
-h(space)f(or)g(b)m(y)g(\\:")39 b(\(colon\),)28 b(but)d(the)g(c)m(hoice)
-i(of)e(separator)h(m)m(ust)227 5113 y(b)s(e)h(used)g(consisten)m(tly)h
-(throughout)f(the)h(v)-5 b(alue.)40 b(Additional)28 b(white)g(space)f
-(ma)m(y)h(b)s(e)f(presen)m(t)g(around)227 5226 y(\014elds)j(and)g
-(separators)h(\()p Fx(e.g.)f FG(\\)p Fu(\000)g FG(2:)h(04)g(:)g
-(7.1"\).)136 5467 y Fu(\017)46 b FG(The)39 b(follo)m(wing)h(\014eld)e
-(iden)m(ti\014cation)j(c)m(haracters)f(ma)m(y)f(b)s(e)f(used)g(as)h
-(separators)h(to)f(replace)h(those)227 5580 y(ab)s(o)m(v)m(e)32
-b(\(or)f(ma)m(y)g(b)s(e)f(app)s(ended)f(to)i(the)g(\014nal)f
-(\014eld\),)h(in)f(order)g(to)i(iden)m(tify)f(the)f(\014eld)h(to)g
-(whic)m(h)f(they)227 5693 y(are)h(app)s(ended:)p eop
-end
-%%Page: 85 95
-TeXDict begin 85 94 bop 0 52 a Fz(8.7)92 b(Reading)31
-b(F)-8 b(ormatted)32 b(Celestial)g(Co)s(ordinates)1834
-b FG(85)477 339 y(d)124 b({)101 b(degrees)477 452 y(h)124
-b({)101 b(hours)477 565 y(m)e({)i(min)m(utes)30 b(\(of)h(arc)g(or)f
-(time\))477 678 y(s)139 b({)101 b(seconds)30 b(\(of)h(arc)g(or)f
-(time\))477 791 y Fy(')127 b FG({)101 b(arc-min)m(utes)477
-904 y Fy(")127 b FG({)101 b(arc-seconds)227 1113 y(Either)42
-b(lo)m(w)m(er)h(or)f(upp)s(er)e(case)j(ma)m(y)g(b)s(e)e(used.)75
-b(Fields)42 b(m)m(ust)g(b)s(e)f(giv)m(en)i(in)f(order)g(of)g
-(decreasing)227 1226 y(signi\014cance)32 b(\()p Fx(e.g.)e
-FG(\\)p Fu(\000)p FG(11D)h(3)p Fy(')g FG(14.4)p Fy(")p
-FG(")h(or)e(\\22h14m11.2s"\).)136 1417 y Fu(\017)46 b
-FG(The)30 b(presence)h(of)f(certain)i(\014eld)e(iden)m(ti\014cation)i
-(c)m(haracters)g(indicates)f(whether)f(the)g(v)-5 b(alue)31
-b(is)g(to)g(b)s(e)227 1529 y(in)m(terpreted)d(as)g(an)f(angle)h(or)g(a)
-g(time)g(\(with)f(24)i(hours)d(corresp)s(onding)g(to)i(360)h
-(degrees\),)g(as)f(follo)m(ws:)477 1743 y(d)99 b({)h(angle)477
-1856 y Fy(')i FG({)e(angle)477 1969 y Fy(")i FG({)e(angle)477
-2082 y(h)f({)h(time)227 2296 y(Incompatible)36 b(angle/time)i(iden)m
-(ti\014cation)f(c)m(haracters)g(ma)m(y)f(not)g(b)s(e)e(mixed)i(\()p
-Fx(e.g.)f FG(\\10h14)p Fy(')p FG(3)p Fy(")p FG(")i(is)227
-2409 y(not)e(v)-5 b(alid\).)56 b(The)34 b(remaining)h(\014eld)g(iden)m
-(ti\014cation)h(c)m(haracters)h(and)d(separators)h(do)g(not)g(sp)s
-(ecify)g(a)227 2522 y(preference)c(for)f(an)g(angle)h(or)g(a)f(time)i
-(and)d(ma)m(y)i(b)s(e)f(used)g(with)g(either.)136 2713
-y Fu(\017)46 b FG(If)38 b(no)h(preference)g(for)f(an)h(angle)g(or)g(a)g
-(time)h(is)e(expressed)g(an)m(ywhere)h(within)f(the)h(v)-5
-b(alue,)42 b(then)c(it)227 2826 y(is)i(in)m(terpreted)g(as)h(an)e
-(angle)i(if)f(the)g(F)-8 b(ormat)42 b(attribute)e(string)g(asso)s
-(ciated)h(with)f(the)g(SkyF)-8 b(rame)227 2939 y(axis)38
-b(generates)g(an)f(angle)h(and)e(as)h(a)h(time)f(otherwise.)61
-b(This)36 b(ensures)g(that)i(v)-5 b(alues)37 b(pro)s(duced)f(b)m(y)227
-3052 y(AST)p Fy(_)p FG(F)m(ORMA)-8 b(T)31 b(\()p Fu(x)p
-FG(8.6\))h(are)f(correctly)h(in)m(terpreted)e(b)m(y)h(AST)p
-Fy(_)p FG(UNF)m(ORMA)-8 b(T.)136 3243 y Fu(\017)46 b
-FG(Fields)c(ma)m(y)h(b)s(e)e(omitted,)k(in)d(whic)m(h)f(case)i(they)e
-(default)h(to)h(zero.)75 b(The)41 b(remaining)h(\014elds)f(ma)m(y)227
-3356 y(b)s(e)g(iden)m(ti\014ed)h(b)m(y)g(using)f(appropriate)h(\014eld)
-f(iden)m(ti\014cation)j(c)m(haracters)f(\(see)g(ab)s(o)m(v)m(e\))g
-(and/or)f(b)m(y)227 3469 y(adding)36 b(extra)g(colon)h(separators)g
-(\(e.g.)59 b(\\)p Fu(\000)p FG(05m13s")37 b(is)f(equiv)-5
-b(alen)m(t)38 b(to)f(\\)p Fu(\000)p FG(:05:13"\).)60
-b(If)36 b(a)g(\014eld)f(is)227 3581 y(not)j(iden)m(ti\014ed)f
-(explicitly)-8 b(,)41 b(it)c(is)g(assumed)g(that)g(adjacen)m(t)i
-(\014elds)d(ha)m(v)m(e)j(b)s(een)d(giv)m(en,)k(after)e(taking)227
-3694 y(accoun)m(t)32 b(of)f(an)m(y)f(extra)h(separator)g(c)m
-(haracters.)43 b(F)-8 b(or)31 b(example:)477 3903 y(10d)242
-b({)100 b(degrees)477 4016 y(10d12)152 b({)100 b(degrees)31
-b(and)e(arc-min)m(utes)477 4129 y(11:14)p Fy(")130 b
-FG({)100 b(arc-min)m(utes)31 b(and)f(arc-seconds)477
-4242 y(9h13s)161 b({)100 b(hours)29 b(and)h(seconds)g(of)g(time)477
-4355 y(:45:33)153 b({)100 b(min)m(utes)30 b(and)g(seconds)g(\(of)h(arc)
-g(or)f(time\))477 4468 y(:55:)243 b({)100 b(min)m(utes)30
-b(\(of)h(arc)g(or)f(time\))477 4581 y(::13)243 b({)100
-b(seconds)30 b(\(of)h(arc)g(or)f(time\))477 4694 y Fu(\000)p
-FG(6::2.5)102 b({)e(degrees/hours)30 b(and)g(seconds)g(\(of)h(arc)g(or)
-f(time\))477 4806 y(07m14)127 b({)100 b(min)m(utes)30
-b(and)g(seconds)g(\(of)h(arc)g(or)f(time\))477 4919 y
-Fu(\000)p FG(8:14)p Fy(')104 b FG({)c(degrees)31 b(and)e(arc-min)m
-(utes)477 5032 y Fu(\000)p FG(h3:14)101 b({)f(min)m(utes)30
-b(and)g(seconds)g(of)h(time)477 5145 y(h:2.1)192 b({)100
-b(seconds)30 b(of)g(time)136 5354 y Fu(\017)46 b FG(If)32
-b(\014elds)g(are)h(omitted)g(in)f(suc)m(h)g(a)h(w)m(a)m(y)g(that)g(the)
-g(remaining)f(ones)h(cannot)g(b)s(e)f(iden)m(ti\014ed)g(uniquely)227
-5467 y(\(e.g.)56 b(\\01:02"\),)39 b(then)c(the)g(\014rst)f(\014eld)h
-(\(either)h(giv)m(en)f(explicitly)i(or)e(implied)g(b)m(y)f(an)h(extra)h
-(leading)227 5580 y(colon)c(separator\))g(is)f(tak)m(en)h(to)g(b)s(e)e
-(the)h(most)g(signi\014can)m(t)h(\014eld)f(that)g(AST)p
-Fy(_)p FG(F)m(ORMA)-8 b(T)31 b(w)m(ould)g(pro-)227 5693
-y(duce)h(when)e(formatting)j(a)f(v)-5 b(alue)32 b(\(using)f(the)h(F)-8
-b(ormat)33 b(attribute)f(asso)s(ciated)h(with)e(the)h(SkyF)-8
-b(rame)p eop end
-%%Page: 86 96
-TeXDict begin 86 95 bop 0 52 a FG(86)1229 b Fz(8)91 b(CELESTIAL)29
-b(COORDINA)-8 b(TE)29 b(SYSTEMS)g(\(SKYFRAMES\))227 351
-y FG(axis\).)41 b(By)29 b(default,)g(this)g(means)f(that)h(the)g
-(\014rst)f(\014eld)g(will)g(normally)h(b)s(e)f(in)m(terpreted)h(as)f
-(degrees)h(or)227 464 y(hours.)40 b(Ho)m(w)m(ev)m(er,)32
-b(if)e(this)g(do)s(es)g(not)g(result)g(in)f(consisten)m(t)j(\014eld)d
-(iden)m(ti\014cation,)j(then)e(the)g(last)h(\014eld)227
-577 y(\(either)k(giv)m(en)h(explicitly)g(or)e(implied)g(b)m(y)h(an)f
-(extra)h(trailing)g(colon)h(separator\))f(is)f(tak)m(en)i(to)f(to)g(b)s
-(e)227 690 y(the)c(least)g(signi\014can)m(t)h(\014eld)e(that)h(AST)p
-Fy(_)p FG(F)m(ORMA)-8 b(T)30 b(w)m(ould)g(pro)s(duce.)0
-976 y(This)c(\014nal)g(con)m(v)m(en)m(tion)i(is)f(in)m(tended)f(to)h
-(ensure)f(that)h(v)-5 b(alues)27 b(formatted)g(b)m(y)f(AST)p
-Fy(_)p FG(F)m(ORMA)-8 b(T)27 b(whic)m(h)f(con-)0 1089
-y(tain)21 b(less)h(than)e(three)h(\014elds)g(will)g(b)s(e)f(correctly)i
-(in)m(terpreted)g(if)e(read)h(bac)m(k)h(using)e(AST)p
-Fy(_)p FG(UNF)m(ORMA)-8 b(T,)22 b(ev)m(en)0 1202 y(if)h(they)g(do)g
-(not)g(con)m(tain)h(\014eld)f(iden)m(ti\014cation)h(c)m(haracters.)40
-b(Ho)m(w)m(ev)m(er,)27 b(it)c(also)h(a\013ects)h(other)e(forms)f(of)h
-(input.)0 1315 y(F)-8 b(or)34 b(example,)h(if)f(the)f(F)-8
-b(ormat\(axis\))36 b(string)d(w)m(ere)h(set)g(to)g(\\mst.1")h(\(pro)s
-(ducing)e(t)m(w)m(o)h(\014elds)f(represen)m(ting)0 1428
-y(min)m(utes)25 b(and)f(seconds)h(of)g(time\),)i(then)d(formatted)i
-(input)e(w)m(ould)g(b)s(e)g(in)m(terpreted)h(b)m(y)g(AST)p
-Fy(_)p FG(UNF)m(ORMA)-8 b(T)0 1541 y(as)31 b(follo)m(ws:)277
-1801 y(12)g(13)123 b({)100 b(min)m(utes)31 b(and)f(seconds)277
-1914 y(12)244 b({)100 b(min)m(utes)277 2027 y(:13)219
-b({)100 b(seconds)277 2140 y Fu(\000)p FG(18:)148 b({)100
-b(min)m(utes)277 2253 y(12.8)174 b({)100 b(min)m(utes)277
-2366 y(1)31 b(2)g(3)137 b({)100 b(hours,)30 b(min)m(utes)g(and)g
-(seconds)277 2592 y(4)p Fy(')241 b FG({)100 b(arc-min)m(utes)277
-2705 y(60::)p Fy(")146 b FG({)100 b(degrees)277 2818
-y Fu(\000)p FG(23:)p Fy(")g FG({)g(arc-min)m(utes)277
-2930 y Fu(\000)p FG(33h)122 b({)100 b(hours)0 3214 y(\(in)36
-b(the)h(last)g(four)f(cases,)i(explicit)g(\014eld)e(iden)m
-(ti\014cation)i(has)e(b)s(een)f(giv)m(en)j(whic)m(h)e(o)m(v)m(errides)h
-(the)f(implicit)0 3327 y(iden)m(ti\014cation\).)0 3498
-y(Alternativ)m(ely)-8 b(,)32 b(if)d(the)g(F)-8 b(ormat\(axis\))32
-b(string)c(w)m(ere)i(set)f(to)h(\\s.3")g(\(pro)s(ducing)e(only)h(an)g
-(arc-seconds)g(\014eld\),)0 3611 y(then)h(formatted)h(input)e(w)m(ould)
-i(b)s(e)e(in)m(terpreted)i(b)m(y)f(AST)p Fy(_)p FG(UNF)m(ORMA)-8
-b(T)31 b(as)g(follo)m(ws:)277 3889 y(12.8)152 b({)100
-b(arc-seconds)277 4002 y(12)31 b(13)101 b({)f(arc-min)m(utes)31
-b(and)f(arc-seconds)277 4115 y(:12)197 b({)100 b(arc-seconds)277
-4228 y(13:)197 b({)100 b(arc-min)m(utes)277 4340 y(1)31
-b(2)g(3)115 b({)100 b(degrees,)31 b(arc-min)m(utes)g(and)f(arc-seconds)
-0 4619 y(In)h(general,)i(if)f(y)m(ou)g(are)g(preparing)e(formatted)j
-(input)d(data)j(con)m(taining)g(celestial)h(co)s(ordinates)e(and)f
-(wish)0 4732 y(to)26 b(omit)g(certain)g(\014elds,)g(then)f(y)m(ou)h
-(are)g(advised)f(to)h(iden)m(tify)g(clearly)h(those)e(that)h(y)m(ou)g
-(do)f(pro)m(vide)h(b)m(y)f(using)0 4845 y(the)30 b(appropriate)g
-(\014eld)g(iden)m(ti\014cation)i(c)m(haracters)f(and/or)f(extra)h
-(colon)g(separators.)41 b(This)30 b(prev)m(en)m(ts)g(y)m(ou)0
-4958 y(dep)s(ending)38 b(on)i(the)g(implicit)h(\014eld)f(iden)m
-(ti\014cation)h(describ)s(ed)e(ab)s(o)m(v)m(e)i(whic)m(h,)i(in)c(turn,)
-j(dep)s(ends)c(on)i(an)0 5071 y(appropriate)30 b(F)-8
-b(ormat\(axis\))33 b(string)e(ha)m(ving)g(b)s(een)e(set.)0
-5241 y(When)j(writing)f(soft)m(w)m(are,)j(it)e(is)g(also)h(a)f(go)s(o)s
-(d)g(idea)g(to)g(set)h(the)f(F)-8 b(ormat\(axis\))34
-b(string)e(so)g(that)g(data)g(input)0 5354 y(will)37
-b(b)s(e)e(as)i(simple)f(as)h(p)s(ossible)e(for)h(the)h(user.)58
-b(Unless)36 b(some)h(sp)s(ecial)f(e\013ect)i(is)f(desired,)g(this)f
-(normally)0 5467 y(means)28 b(that)h(it)f(should)f(con)m(tain)i(\\d")g
-(or)f(\\h")g(to)h(ensure)e(that)i(the)f(\014rst)f(\014eld)h(en)m(tered)
-g(b)m(y)g(the)g(user)g(will)g(b)s(e)0 5580 y(in)m(terpreted)g(as)g
-(degrees)g(or)g(hours,)f(unless)g(otherwise)h(iden)m(ti\014ed.)40
-b(This)27 b(is)g(the)h(normal)g(b)s(eha)m(viour)f(unless)0
-5693 y(an)j(explicit)i(F)-8 b(ormat\(axis\))33 b(v)-5
-b(alue)31 b(has)f(b)s(een)g(set)g(to)i(o)m(v)m(erride)f(the)g(default.)
-p eop end
-%%Page: 87 97
-TeXDict begin 87 96 bop 0 52 a Fz(8.8)92 b(Represen)m(ting)31
-b(O\013sets)g(from)e(a)i(Sp)s(eci\014ed)f(Sky)f(P)m(osition)1466
-b FG(87)0 351 y Fw(8.8)112 b(Represen)m(ting)38 b(O\013sets)g(from)g(a)
-g(Sp)s(eci\014ed)h(Sky)f(P)m(osition)0 573 y FG(A)e(SkyF)-8
-b(rame)37 b(can)f(b)s(e)f(mo)s(di\014ed)g(so)i(that)f(its)h(longitude)f
-(and)g(latitude)h(axes)g(are)f(referred)f(to)i(an)f(origin)0
-686 y(at)c(an)m(y)g(sp)s(eci\014ed)e(sky)i(p)s(osition.)43
-b(Suc)m(h)31 b(a)h(co)s(ordinate)g(system)f(is)h(referred)e(to)i(as)g
-(an)f(\\o\013set")j(co)s(ordinate)0 799 y(sy)m(etem.)54
-b(First,)36 b(the)e(System)g(attribute)h(should)f(b)s(e)f(set)i(to)g
-(represen)m(t)g(the)f(celestial)j(co)s(ordinate)e(system)0
-911 y(in)40 b(whic)m(h)g(the)g(origin)h(is)f(to)h(b)s(e)f(sp)s
-(eci\014ed.)69 b(Then)40 b(the)g(SkyRef)g(attribute)h(should)e(b)s(e)h
-(set)g(to)h(hold)f(the)0 1024 y(co)s(ordinates)31 b(of)g(the)f(origin)h
-(within)f(the)g(selected)i(celestial)h(co)s(ordinate)e(system.)0
-1187 y(By)21 b(default,)i(\\north")f(in)e(the)h(new)g(o\013set)h(co)s
-(ordinate)f(system)g(is)g(parallel)h(to)g(north)e(in)h(the)g(original)h
-(celestial)0 1300 y(co)s(ordinate)38 b(system.)60 b(Ho)m(w)m(ev)m(er,)
-40 b(the)d(direction)h(of)f(north)f(in)g(the)h(o\013set)h(system)f(can)
-g(b)s(e)f(con)m(trolled)j(b)m(y)0 1413 y(assigning)k(a)g(v)-5
-b(alue)43 b(to)h(the)f(SkyRefP)f(attribute.)78 b(This)42
-b(attribute)h(should)f(b)s(e)g(assigned)h(the)g(celestial)0
-1526 y(co)s(ordinates)29 b(of)g(a)g(p)s(oin)m(t)g(whic)m(h)f(is)h(on)f
-(the)h(zero)h(longitude)f(meridian)f(and)g(whic)m(h)h(has)f(non-zero)h
-(latitude.)0 1689 y(By)36 b(default,)i(the)e(p)s(osition)f(giv)m(en)i
-(b)m(y)f(the)g(SkyRef)f(attribute)h(is)g(used)f(as)h(the)g(origin)g(of)
-g(the)g(new)f(longi-)0 1801 y(tude/latitude)26 b(system,)g(but)e(an)h
-(option)g(exists)g(to)h(use)e(it)h(as)g(the)g(north)f(p)s(ole)h(of)f
-(the)h(system)g(instead.)39 b(This)0 1914 y(option)25
-b(is)f(con)m(trolled)h(b)m(y)g(the)f(SkyRefIs)f(attribute.)40
-b(The)23 b(c)m(hoice)j(of)e(v)-5 b(alue)25 b(for)f(SkyRefIs)f(dep)s
-(ends)g(on)h(what)0 2027 y(sort)31 b(of)h(o\013set)g(co)s(ordinate)g
-(system)f(y)m(ou)h(w)m(an)m(t.)44 b(Setting)31 b(SkyRefIs)g(to)h
-(\\Origin")f(\(the)h(default\))g(pro)s(duces)0 2140 y(an)39
-b(o\013set)i(co)s(ordinate)g(system)e(whic)m(h)h(is)f(appro)m(ximately)
-i(Cartesian)f(close)h(to)f(the)g(sp)s(eci\014ed)f(p)s(osition.)0
-2253 y(Setting)33 b(SkyRefIs)f(to)h(\\P)m(ole")i(pro)s(duces)c(an)h
-(o\013set)h(co)s(ordinate)h(system)e(whic)m(h)g(is)h(appro)m(ximately)g
-(P)m(olar)0 2366 y(close)f(to)f(the)f(sp)s(eci\014ed)g(p)s(osition.)p
-eop end
-%%Page: 88 98
-TeXDict begin 88 97 bop 0 52 a FG(88)1229 b Fz(8)91 b(CELESTIAL)29
-b(COORDINA)-8 b(TE)29 b(SYSTEMS)g(\(SKYFRAMES\))p eop
-end
-%%Page: 89 99
-TeXDict begin 89 98 bop 3689 52 a FG(89)0 351 y FA(9)135
-b(Sp)t(ectral)45 b(Co)t(ordinate)h(Systems)f(\(Sp)t(ecF)-11
-b(rames\))0 588 y FG(The)35 b(Sp)s(ecF)-8 b(rame)35 b(is)h(a)f(F)-8
-b(rame)37 b(whic)m(h)e(is)g(sp)s(ecialised)h(for)f(represen)m(ting)h
-(co)s(ordinate)g(systems)f(whic)m(h)g(de-)0 701 y(scrib)s(e)24
-b(a)i(p)s(osition)f(within)f(an)h(electro-magnetic)k(sp)s(ectrum.)37
-b(In)25 b(this)f(section)i(w)m(e)g(examine)f(the)h(additional)0
-814 y(prop)s(erties)k(and)g(b)s(eha)m(viour)g(of)g(a)h(Sp)s(ecF)-8
-b(rame)30 b(that)h(distinguish)f(it)h(from)f(a)h(basic)f(F)-8
-b(rame)32 b(\()p Fu(x)p FG(7\).)0 1084 y Fw(9.1)112 b(The)38
-b(Sp)s(ecF)-9 b(rame)39 b(Mo)s(del)0 1289 y FG(As)30
-b(for)g(a)g(SkyF)-8 b(rame,)31 b(a)g(Sp)s(ecF)-8 b(rame)30
-b(is)g(a)g(F)-8 b(rame)31 b(\()p Fu(x)p FG(7\))h(and)d(also)i(a)g
-(Mapping)f(\()p Fu(x)p FG(5\),)i(so)e(it)h(inherits)e(all)i(the)0
-1402 y(prop)s(erties)c(and)f(b)s(eha)m(viour)h(of)h(these)g(t)m(w)m(o)g
-(ancestral)h(classes.)41 b(When)27 b(used)f(as)i(a)f(Mapping,)h(a)g(Sp)
-s(ecF)-8 b(rame)0 1515 y(implemen)m(ts)26 b(a)f(unit)g(transformation,)
-h(exactly)h(lik)m(e)g(a)e(basic)h(F)-8 b(rame)26 b(\()p
-Fu(x)p FG(7.3\))h(or)e(a)h(UnitMap,)h(so)e(this)g(asp)s(ect)0
-1628 y(of)31 b(its)f(b)s(eha)m(viour)g(is)h(not)f(of)h(great)g(imp)s
-(ortance.)0 1775 y(When)25 b(used)f(as)i(a)f(F)-8 b(rame,)28
-b(ho)m(w)m(ev)m(er,)g(a)d(Sp)s(ecF)-8 b(rame)26 b(represen)m(ts)f(a)g
-(wide)g(range)h(of)f(di\013eren)m(t)h(1-dimensional)0
-1888 y(co)s(ordinate)42 b(system)f(whic)m(h)g(can)g(b)s(e)g(used)f(to)i
-(describ)s(e)f(p)s(ositions)g(within)f(a)i(sp)s(ectrum.)72
-b(The)40 b(options)0 2001 y(a)m(v)-5 b(ailable)33 b(largely)f(mirror)e
-(those)h(describ)s(ed)e(in)i(the)f(FITS-W)m(CS)h(pap)s(er)e(I)s(I)s(I)g
-Fx(R)-5 b(epr)g(esentations)36 b(of)d(sp)-5 b(e)g(ctr)g(al)0
-2114 y(c)g(o)g(or)g(dinates)36 b(in)c(FITS)42 b FG(\(Greisen,)31
-b(V)-8 b(aldes,)32 b(Calabretta)g(&)e(Allen\).)0 2383
-y Fw(9.2)112 b(Creating)38 b(a)g(Sp)s(ecF)-9 b(rame)0
-2589 y FG(The)37 b(Sp)s(ecF)-8 b(rame)38 b(constructor)f(function)h(is)
-f(particularly)h(simple)f(and)g(a)h(Sp)s(ecF)-8 b(rame)38
-b(with)f(default)g(at-)0 2702 y(tributes)30 b(is)h(created)g(as)g
-(follo)m(ws:)262 2887 y Ft(INCLUDE)40 b('AST_PAR')262
-2987 y(INTEGER)g(SPECFRAME,)g(STATUS)262 3186 y(STATUS)h(=)i(0)262
-3385 y(...)262 3585 y(SPECFRAME)c(=)44 b(AST_SPECFRAME\()37
-b(')44 b(',)e(STATUS)f(\))0 3783 y FG(Suc)m(h)c(a)i(Sp)s(ecF)-8
-b(rame)38 b(w)m(ould)g(represen)m(t)g(the)h(default)f(co)s(ordinate)h
-(system)f(whic)m(h)g(is)g(helio)s(cen)m(tric)i(w)m(a)m(v)m(e-)0
-3896 y(length)28 b(in)g(metres)g(\(i.e.)41 b(w)m(a)m(v)m(elength)30
-b(corrected)f(to)f(tak)m(e)i(in)m(to)e(accoun)m(t)i(the)d(Doppler)h
-(shift)g(caused)g(b)m(y)f(the)0 4009 y(v)m(elo)s(cit)m(y)33
-b(of)d(the)h(observ)m(er)g(around)e(the)h(sun\).)0 4279
-y Fw(9.3)112 b(Sp)s(ecifying)39 b(a)f(P)m(articular)f(Sp)s(ectral)h(Co)
-s(ordinate)g(System)0 4485 y FG(Selection)48 b(of)f(a)g(particular)h
-(co)s(ordinate)f(system)g(is)g(p)s(erformed)e(simply)i(b)m(y)f(setting)
-i(a)f(v)-5 b(alue)48 b(for)e(the)0 4597 y(Sp)s(ecF)-8
-b(rame's)33 b(\(c)m(haracter)h(string\))f(System)f(attribute.)47
-b(This)32 b(setting)h(is)g(most)g(con)m(v)m(enien)m(tly)h(done)e(when)0
-4710 y(the)d(Sp)s(ecF)-8 b(rame)28 b(is)h(created.)41
-b(F)-8 b(or)29 b(example,)h(a)e(Sp)s(ecF)-8 b(rame)29
-b(represen)m(ting)g(Energy)f(w)m(ould)g(b)s(e)g(created)h(b)m(y:)262
-4896 y Ft(SPECFRAME)39 b(=)44 b(AST_SPECFRAME\()37 b('System=Energy',)g
-(STATUS)k(\))0 5095 y FG(Note)24 b(that)f(sp)s(ecifying)f
-(\\System=Energy")g(also)i(c)m(hanges)f(the)f(asso)s(ciated)i(Unit)f
-(\(from)f(metres)h(to)g(Joules\).)0 5207 y(This)40 b(is)h(b)s(ecause)g
-(the)g(default)g(v)-5 b(alue)42 b(of)f(the)g(Sp)s(ecF)-8
-b(rame's)42 b(Unit)f(attribute)h(dep)s(ends)d(on)h(the)i(System)0
-5320 y(attribute)31 b(setting.)0 5467 y(Y)-8 b(ou)30
-b(ma)m(y)g(c)m(hange)h(the)e(System)h(v)-5 b(alue)30
-b(at)g(an)m(y)g(time,)g(although)g(this)g(is)f(not)h(usually)f(needed.)
-40 b(The)29 b(v)-5 b(alues)0 5580 y(supp)s(orted)40 b(are)h(set)h(out)g
-(in)f(the)h(attribute's)g(description)f(in)g(App)s(endix)f(C)h(and)g
-(include)g(a)h(v)-5 b(ariet)m(y)42 b(of)0 5693 y(v)m(elo)s(cit)m(y)33
-b(systems,)d(together)i(with)e(frequency)-8 b(,)31 b(w)m(a)m(v)m
-(elength,)i(energy)-8 b(,)31 b(w)m(a)m(v)m(e-n)m(um)m(b)s(er,)h
-Fx(etc)p FG(.)p eop end
-%%Page: 90 100
-TeXDict begin 90 99 bop 0 52 a FG(90)1201 b Fz(9)91 b(SPECTRAL)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(SPECFRAMES\))0 351
-y Fw(9.4)112 b(A)m(ttributes)37 b(whic)m(h)g(Qualify)i(Sp)s(ectral)f
-(Co)s(ordinate)g(Systems)0 597 y FG(Man)m(y)30 b(sp)s(ectral)f(co)s
-(ordinate)i(systems)e(ha)m(v)m(e)h(some)g(additional)g(free)g
-(parameters)f(whic)m(h)g(serv)m(e)h(to)g(iden)m(tify)0
-710 y(a)f(particular)f(co)s(ordinate)h(system)g(from)f(amongst)h(a)f
-(broader)g(class)h(of)f(related)i(co)s(ordinate)f(systems.)40
-b(F)-8 b(or)0 823 y(example,)37 b(the)e(v)m(elo)s(cit)m(y)i(systems)e
-(are)g(all)g(parameterised)h(b)m(y)e(a)h(rest)g(frequency|the)g
-(frequency)f(whic)m(h)0 936 y(de\014nes)41 b(zero)i(v)m(elo)s(cit)m(y)
--8 b(,)48 b(and)42 b(all)h(co)s(ordinate)g(systems)f(are)g(quali\014ed)
-g(b)m(y)g(a)g(`standard)g(of)g(rest")h(whic)m(h)0 1049
-y(indicates)31 b(the)g(rest)f(frame)h(to)g(whic)m(h)f(the)g(v)-5
-b(alues)31 b(refer.)0 1228 y(In)23 b(AST,)g(these)g(free)h(parameters)g
-(are)f(represen)m(ted)h(b)m(y)f(additional)h(Sp)s(ecF)-8
-b(rame)24 b(attributes,)i(eac)m(h)e(of)g(whic)m(h)0 1341
-y(has)30 b(a)g(default)g(appropriate)g(to)g(\()p Fx(i.e.)g
-FG(de\014ned)e(b)m(y\))i(the)g(setting)h(of)f(the)g(main)g(System)g
-(attribute.)41 b(Eac)m(h)30 b(of)0 1454 y(these)c Fx(qualifying)i
-(attributes)e FG(ma)m(y)-8 b(,)28 b(ho)m(w)m(ev)m(er,)g(b)s(e)d
-(assigned)h(an)f(explicit)i(v)-5 b(alue)26 b(so)f(as)h(to)g(select)h(a)
-f(particular)0 1566 y(co)s(ordinate)38 b(system.)62 b(Note,)41
-b(it)d(is)f(usually)g(b)s(est)g(to)h(assign)g(explicit)h(v)-5
-b(alues)37 b(whenev)m(er)h(p)s(ossible)f(rather)0 1679
-y(than)28 b(relying)i(on)e(defaults.)40 b(A)m(ttribute)30
-b(should)e(only)h(b)s(e)f(left)h(at)g(their)g(default)g(v)-5
-b(alue)29 b(if)g(y)m(ou)g(\\don't)g(care")0 1792 y(what)e(v)-5
-b(alue)27 b(is)g(used.)39 b(In)26 b(certain)i(circumstances)g
-(\(particularly)-8 b(,)29 b(when)d(aligning)i(t)m(w)m(o)g(F)-8
-b(rames\),)29 b(a)e(default)0 1905 y(v)-5 b(alue)37 b(for)g(an)g
-(attribute)h(ma)m(y)f(b)s(e)g(replaced)g(b)m(y)g(the)g(v)-5
-b(alue)37 b(from)g(another)g(similar)g(F)-8 b(rame.)62
-b(Suc)m(h)36 b(v)-5 b(alue)0 2018 y(replacemen)m(t)28
-b(can)e(b)s(e)g(prev)m(en)m(ted)h(b)m(y)f(assigning)h(an)f(explicit)h
-(v)-5 b(alue)27 b(to)g(the)g(attribute,)h(rather)e(than)g(simply)0
-2131 y(relying)31 b(on)f(the)h(default.)0 2310 y(The)f(main)g(Sp)s(ecF)
--8 b(rame)31 b(attributes)g(whic)m(h)f(qualify)g(the)h(System)f
-(attribute)h(are:)227 2622 y FE(Ep)s(o)s(c)m(h)427 2735
-y FG(This)i(attribute)h(is)g(inherited)f(from)g(the)h(F)-8
-b(rame)34 b(class.)51 b(It)34 b(giv)m(es)g(the)g(momen)m(t)g(in)f(time)
-427 2848 y(when)27 b(the)h(co)s(ordinates)h(are)f(correct)h(for)e(the)h
-(astronomical)i(source)e(under)e(study)h(\(usu-)427 2961
-y(ally)f(the)f(date)h(of)f(observ)-5 b(ation\).)40 b(It)26
-b(is)f(needed)f(in)h(order)g(to)h(calculate)h(the)e(Doppler)h(shift)427
-3074 y(pro)s(duced)g(b)m(y)h(the)h(v)m(elo)s(cit)m(y)i(of)d(the)h
-(observ)m(er)f(relativ)m(e)j(to)e(the)g(cen)m(tre)g(of)g(the)f(earth,)i
-(and)427 3186 y(of)i(the)f(earth)h(relativ)m(e)h(to)g(the)e(sun.)227
-3349 y FE(StdOfRest)427 3462 y FG(This)25 b(sp)s(eci\014es)g(the)g
-(rest)h(frame)f(in)g(whic)m(h)g(the)h(co)s(ordinates)g(are)g(correct.)
-40 b(T)-8 b(ransforming)427 3575 y(b)s(et)m(w)m(een)29
-b(di\013eren)m(t)g(standards)f(of)g(rest)h(in)m(v)m(olv)m(es)h(taking)g
-(accoun)m(t)g(of)e(the)h(Doppler)g(shift)427 3688 y(in)m(tro)s(duced)h
-(b)m(y)g(the)h(relativ)m(e)h(motion)f(of)g(the)g(t)m(w)m(o)g(standards)
-f(of)g(rest.)227 3850 y FE(RestF)-9 b(req)427 3963 y
-FG(Sp)s(eci\014es)26 b(the)g(frequency)g(whic)m(h)f(corresp)s(ond)g(to)
-i(zero)g(v)m(elo)s(cit)m(y)-8 b(.)42 b(When)26 b(setting)h(a)g(v)-5
-b(alue)427 4076 y(for)42 b(this)g(attribute,)47 b(the)42
-b(v)-5 b(alue)43 b(ma)m(y)g(b)s(e)e(supplied)g(as)i(a)g(w)m(a)m(v)m
-(elength)h(\(including)e(an)427 4189 y(indication)34
-b(of)f(the)h(units)e(b)s(eing)h(used,)g(\\nm")g(\\Angstrom",)i
-Fx(etc.)p FG(\),)f(whic)m(h)f(will)h(b)s(e)e(au-)427
-4302 y(tomatically)i(b)s(e)29 b(con)m(v)m(erted)j(to)f(a)g(frequency)-8
-b(.)227 4465 y FE(RefRA)427 4577 y FG(Sp)s(eci\014es)42
-b(the)h(RA)g(\(FK5)g(J2000\))h(of)f(the)g(source.)78
-b(This)41 b(is)i(used)f(when)f(con)m(v)m(erting)427 4690
-y(b)s(et)m(w)m(een)28 b(standards)d(of)i(rest.)40 b(It)27
-b(sp)s(eci\014es)f(the)h(direction)h(along)f(whic)m(h)g(the)g(comp)s
-(onen)m(t)427 4803 y(of)k(the)f(relativ)m(e)j(v)m(elo)s(cit)m(y)g(of)d
-(the)h(t)m(w)m(o)h(standards)d(of)h(rest)h(is)f(tak)m(en.)227
-4966 y FE(RefDec)427 5079 y FG(Sp)s(eci\014es)24 b(the)h(Dec)g(\(FK5)g
-(J2000\))i(of)d(the)h(source.)39 b(Used)24 b(in)g(conjunction)h(with)f
-(REFRA.)227 5241 y FE(SourceV)-9 b(el)427 5354 y FG(This)32
-b(de\014nes)g(the)i(\\source")g(standard)e(of)h(rest.)48
-b(This)32 b(is)h(a)h(rest)f(frame)g(whic)m(h)f(is)h(mo)m(v-)427
-5467 y(ing)38 b(to)m(w)m(ards)g(the)g(p)s(osition)f(giv)m(en)i(b)m(y)e
-(RefRA)g(and)g(RefDec,)k(at)d(a)g(v)m(elo)s(cit)m(y)i(giv)m(en)e(b)m(y)
-427 5580 y(SourceV)-8 b(el.)52 b(The)33 b(v)m(elo)s(cit)m(y)j(is)e
-(stored)g(in)m(ternally)h(as)f(a)g(helio)s(cen)m(tric)h(v)m(elo)s(cit)m
-(y)-8 b(,)38 b(but)33 b(can)427 5693 y(b)s(e)d(giv)m(en)h(in)f(an)m(y)h
-(of)g(the)f(other)h(supp)s(orted)d(standards)i(of)g(rest.)p
-eop end
-%%Page: 91 101
-TeXDict begin 91 100 bop 0 52 a Fz(9.5)92 b(Using)31
-b(Default)g(Sp)s(ecF)-8 b(rame)31 b(A)m(ttributes)2029
-b FG(91)0 351 y(F)-8 b(or)32 b(further)d(details)j(of)f(these)h
-(attributes)f(y)m(ou)h(should)e(consult)h(their)g(descriptions)g(in)f
-(App)s(endix)g(C)g(and)0 464 y(for)g(details)i(of)e(the)h(System)f
-(settings)i(for)e(whic)m(h)g(they)h(are)g(relev)-5 b(an)m(t,)32
-b(see)f(the)g(description)f(of)h(the)g(System)0 577 y(attribute)g
-(\(also)h(in)e(App)s(endix)e(C\).)0 742 y(Note)38 b(that)f(it)h(do)s
-(es)e(no)h(harm)f(to)h(assign)g(v)-5 b(alues)37 b(to)h(qualifying)f
-(attributes)g(whic)m(h)g(are)g(not)g(relev)-5 b(an)m(t)38
-b(to)0 855 y(the)28 b(main)g(System)g(v)-5 b(alue.)41
-b(An)m(y)28 b(suc)m(h)g(v)-5 b(alues)28 b(are)h(stored,)g(but)e(are)h
-(not)h(used)e(unless)h(the)g(System)g(v)-5 b(alue)28
-b(is)0 968 y(later)j(set)g(so)g(that)g(they)f(b)s(ecome)h(relev)-5
-b(an)m(t.)0 1270 y Fw(9.5)112 b(Using)38 b(Default)h(Sp)s(ecF)-9
-b(rame)38 b(A)m(ttributes)0 1495 y FG(The)j(default)g(v)-5
-b(alues)42 b(supplied)e(for)h(man)m(y)g(Sp)s(ecF)-8 b(rame)42
-b(attributes)f(will)h(dep)s(end)e(on)h(the)g(v)-5 b(alue)42
-b(of)f(the)0 1608 y(Sp)s(ecF)-8 b(rame's)26 b(System)f(attribute.)40
-b(In)25 b(practice,)j(this)e(means)f(that)i(there)f(is)f(usually)h
-(little)h(need)e(to)i(sp)s(ecify)0 1721 y(man)m(y)44
-b(of)g(these)g(attributes)g(explicitly)h(unless)e(y)m(ou)h(ha)m(v)m(e)h
-(some)f(sp)s(ecial)g(requiremen)m(t.)81 b(This)43 b(can)h(b)s(e)0
-1834 y(illustrated)31 b(b)m(y)f(using)g(AST)p Fy(_)p
-FG(SHO)m(W)g(to)h(examine)g(a)g(Sp)s(ecF)-8 b(rame,)31
-b(as)f(follo)m(ws:)262 2090 y Ft(CALL)41 b(AST_SHOW\()f
-(AST_SPECFRAME\()e('System=Vopt,)g(RestFreq=250)h(GHz',)i(STATUS)h(\),)
-218 2190 y(:)653 b(STATUS)41 b(\))0 2460 y FG(The)30
-b(output)g(from)g(this)g(migh)m(t)h(lo)s(ok)g(lik)m(e)h(the)e(follo)m
-(wing:)275 2730 y Fy(Begin)46 b(SpecFrame)380 b(#)47
-b(Description)e(of)i(spectral)f(coordinate)f(system)227
-2843 y(#)143 b(Title)47 b(=)g("Optical)f(velocity,)f(rest)h(frequency)g
-(=)h(250)g(GHz")333 b(#)48 b(Title)227 2956 y(of)f(coordinate)e(system)
-418 3068 y(Naxes)i(=)g(1)143 b(#)47 b(Number)f(of)i(coordinate)d(axes)
-227 3181 y(#)143 b(Domain)46 b(=)i("SPECTRUM")427 b(#)47
-b(Coordinate)e(system)h(domain)227 3294 y(#)143 b(Epoch)47
-b(=)g(2000)381 b(#)47 b(Julian)f(epoch)h(of)g(observation)227
-3407 y(#)143 b(Lbl1)47 b(=)g("Optical)f(velocity")93
-b(#)47 b(Label)g(for)g(axis)f(1)418 3520 y(System)g(=)i("VOPT")237
-b(#)47 b(Coordinate)e(system)h(type)227 3633 y(#)143
-b(Uni1)47 b(=)g("km/s")333 b(#)47 b(Units)g(for)f(axis)h(1)418
-3746 y(Ax1)g(=)334 b(#)47 b(Axis)g(number)f(1)561 3859
-y(Begin)h(Axis)333 b(#)47 b(Coordinate)e(axis)561 3972
-y(End)i(Axis)275 4085 y(IsA)g(Frame)285 b(#)47 b(Coordinate)e(system)h
-(description)227 4198 y(#)143 b(SoR)47 b(=)h("Heliocentric")378
-b(#)47 b(Standard)f(of)h(rest)418 4311 y(RstFrq)f(=)i(250000000000)331
-b(#)47 b(Rest)g(frequency)e(\(Hz\))275 4423 y(End)i(SpecFrame)0
-4693 y FG(Note)40 b(that)f(the)g(defaults)g(\(indicated)h(b)m(y)e(the)h
-(\\)p Fy(#)p FG(")h(commen)m(t)f(c)m(haracter)i(at)e(the)g(start)g(of)g
-(the)g(line\))h(for)0 4806 y(attributes)30 b(suc)m(h)g(as)g(the)g
-(Title,)h(axis)g(Lab)s(els)e(and)g(Unit)h(sp)s(eci\014ers)g(are)g(all)h
-(set)f(to)h(v)-5 b(alues)30 b(appropriate)g(for)0 4919
-y(the)h(particular)f(v)m(elo)s(cit)m(y)j(system)e(that)g(the)f(Sp)s
-(ecF)-8 b(rame)31 b(represen)m(ts.)0 5084 y(These)25
-b(c)m(hoices)i(w)m(ould)e(b)s(e)f(appropriate)i(for)e(a)i(System)f(v)-5
-b(alue)26 b(of)f(\\V)-8 b(opt",)28 b(but)d(if)g(a)g(di\013eren)m(t)h
-(System)f(v)-5 b(alue)0 5197 y(w)m(ere)32 b(set,)g(the)g(defaults)f(w)m
-(ould)g(b)s(e)g(corresp)s(ondingly)f(di\013eren)m(t.)44
-b(F)-8 b(or)32 b(example,)h(b)m(y)e(default)h(frequency)e(is)0
-5310 y(measured)j(in)g(units)h(of)f(GHz,)j(not)e Fp(k)s(m=s)p
-FG(,)h(so)f(setting)g(\\System=freq")g(w)m(ould)g(c)m(hange)h(the)e
-(appropriate)0 5423 y(line)e(ab)s(o)m(v)m(e)g(from:)227
-5693 y Fy(#)143 b(Uni1)47 b(=)g("km/s")333 b(#)47 b(Units)g(for)f(axis)
-h(1)p eop end
-%%Page: 92 102
-TeXDict begin 92 101 bop 0 52 a FG(92)1201 b Fz(9)91
-b(SPECTRAL)29 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(SPECFRAMES\))0
-351 y FG(to)227 598 y Fy(#)143 b(Uni1)47 b(=)g("GHz")381
-b(#)47 b(Units)g(for)f(axis)h(1)0 844 y FG(Of)35 b(course,)j(if)e(y)m
-(ou)h(do)f(not)g(lik)m(e)h(an)m(y)g(of)f(these)h(defaults,)g(y)m(ou)g
-(ma)m(y)f(alw)m(a)m(ys)i(o)m(v)m(er-ride)f(them)f(b)m(y)g(setting)0
-957 y(explicit)41 b(attribute)f(v)-5 b(alues)40 b(y)m(ourself.)68
-b(F)-8 b(or)40 b(instance,)j(y)m(ou)c(ma)m(y)h(c)m(ho)s(ose)h(to)f(ha)m
-(v)m(e)h(y)m(our)e(frequency)g(axis)0 1070 y(expressed)30
-b(in)g(\\kHz")i(rather)e(than)g(\\GHz".)43 b(T)-8 b(o)30
-b(do)h(this)f(simply)g(set)h(the)f(attribute)h(v)-5 b(alue)31
-b(as)g(follo)m(ws:)262 1303 y Ft(CALL)41 b(AST_SETC\()f(SPECFRAME,)g
-('Unit',)g('kHz',)i(STATUS)f(\))0 1549 y FG(No)26 b(error)g(will)g(b)s
-(e)f(rep)s(orted)g(if)g(y)m(ou)h(acciden)m(tally)j(set)d(an)g
-(inappropriate)f(Unit)h(v)-5 b(alue)26 b(\(sa)m(y)h("J")f(-)g
-(Joules\)|)0 1662 y(after)e(all,)j(AST)c(cannot)i(tell)g(what)f(y)m(ou)
-g(are)g(ab)s(out)g(to)h(do,)g(and)f(y)m(ou)g Fx(may)33
-b FG(b)s(e)23 b(ab)s(out)h(to)g(c)m(hange)i(the)e(System)0
-1775 y(v)-5 b(alue)21 b(to)g(\\Energy".)38 b(Ho)m(w)m(ev)m(er,)25
-b(an)20 b(error)g Fx(wil)5 b(l)30 b FG(b)s(e)20 b(rep)s(orted)g(if)g(y)
-m(ou)h(attempt)g(to)g(\014nd)e(a)i(con)m(v)m(ersion)h(b)s(et)m(w)m(een)
-0 1888 y(t)m(w)m(o)39 b(Sp)s(ecF)-8 b(rames)38 b(\(for)g(instance)h
-(using)e(AST)p Fy(_)p FG(CONVER)-8 b(T)37 b(\))h(if)g(either)g(Sp)s
-(ecF)-8 b(rame)38 b(has)g(a)g(Unit)g(v)-5 b(alue)0 2001
-y(whic)m(h)30 b(is)h(inappropriate)f(for)g(its)h(System)f(v)-5
-b(alue.)0 2159 y(Sp)s(ecF)d(rame)33 b(attributes,)i(lik)m(e)f(all)g
-(other)g(attributes,)h(all)f(ha)m(v)m(e)g(default)f(v)-5
-b(alue.)50 b(Ho)m(w)m(ev)m(er,)36 b(b)s(e)c(a)m(w)m(are)j(that)0
-2272 y(for)d(some)h(attributes)h(these)f(default)g(v)-5
-b(alues)32 b(can)h(nev)m(er)g(b)s(e)f(more)h(than)f(\\a)i(legal)g(n)m
-(umerical)g(v)-5 b(alue")33 b(and)0 2385 y(ha)m(v)m(e)h(no)e
-(astronomical)i(signi\014cance.)47 b(F)-8 b(or)34 b(instance,)f(the)g
-(RefRA)f(and)g(RefDec)i(attributes)f(\(whic)m(h)f(giv)m(e)0
-2498 y(the)39 b(source)g(p)s(osition\))g(b)s(oth)f(ha)m(v)m(e)i(a)f
-(default)g(v)-5 b(alue)39 b(of)f(zero.)67 b(So)38 b(unless)g(y)m(our)h
-(source)g(happ)s(ens)e(to)i(b)s(e)0 2611 y(at)d(that)g(p)s(oin)m(t)f
-(\(highly)h(unlik)m(ely!\))57 b(y)m(ou)35 b(will)h(need)f(to)h(set)g
-(new)f(v)-5 b(alues.)56 b(Lik)m(ewise,)38 b(the)d(RestF)-8
-b(req)37 b(\(rest)0 2724 y(frequency\))k(attribute)h(has)f(an)g
-(arbitrary)g(default)g(v)-5 b(alue)41 b(of)h(1.0E5)g(GHz.)74
-b(Some)41 b(op)s(erations)h(are)f(not)0 2837 y(a\013ected)31
-b(b)m(y)e(inappropriate)f(v)-5 b(alues)30 b(for)f(these)g(attributes)h
-(\(for)f(instance,)i(con)m(v)m(erting)f(from)f(frequency)g(to)0
-2950 y(w)m(a)m(v)m(elength,)41 b(c)m(hanging)c(axis)g(units,)h
-Fx(etc)5 b FG(\),)39 b(but)c(some)i(are.)60 b(F)-8 b(or)37
-b(instance,)j(con)m(v)m(erting)e(from)e(frequency)0 3063
-y(to)29 b(v)m(elo)s(cit)m(y)h(requires)d(a)i(correct)g(rest)f
-(frequency)-8 b(,)28 b(mo)m(ving)h(b)s(et)m(w)m(een)g(di\013eren)m(t)f
-(standards)f(of)h(rest)g(requires)0 3175 y(a)40 b(correct)g(source)g(p)
-s(osition.)67 b(The)39 b(moral)h(is,)i(alw)m(a)m(ys)f(set)f(explicit)g
-(v)-5 b(alues)40 b(for)f(as)h(man)m(y)f(attributes)h(as)0
-3288 y(p)s(ossible.)0 3576 y Fw(9.6)112 b(Creating)38
-b(Sp)s(ectral)g(Cub)s(es)0 3793 y FG(Y)-8 b(ou)25 b(can)g(use)g(a)g(Sp)
-s(ecF)-8 b(rame)25 b(to)g(describ)s(e)f(the)h(sp)s(ectral)g(axis)g(in)f
-(a)h(data)h(cub)s(e)e(con)m(taining)i(t)m(w)m(o)g(spatial)g(axes)0
-3906 y(and)36 b(a)h(sp)s(ectral)g(axis.)59 b(T)-8 b(o)37
-b(do)g(this)f(y)m(ou)h(w)m(ould)f(create)i(an)f(appropriate)f(Sp)s(ecF)
--8 b(rame,)39 b(together)f(with)e(a)0 4019 y(2-dimensional)30
-b(F)-8 b(rame)31 b(\(often)f(a)g(SkyF)-8 b(rame\))30
-b(to)g(describ)s(e)f(the)h(spatial)g(axes.)41 b(Y)-8
-b(ou)30 b(w)m(ould)g(then)f(com)m(bine)0 4132 y(these)i(t)m(w)m(o)h(F)
--8 b(rames)31 b(together)h(in)m(to)f(a)g(single)g(CmpF)-8
-b(rame.)262 4365 y Ft(INTEGER)40 b(SKYFRAME)262 4464
-y(INTEGER)g(SPECFRAME)262 4564 y(INTEGER)g(CMPFRAME)262
-4664 y(...)262 4763 y(SKYFRAME)g(=)j(AST_SKYFRAME\()38
-b('Epoch=J2002',)g(STATUS)j(\))262 4863 y(SPECFRAME)e(=)44
-b(AST_SPECFRAME\()37 b('System=Freq,StdO)o(fR)o(est)o(=L)o(SRK)o(',)218
-4963 y(:)1176 b(STATUS)41 b(\))262 5062 y(CMPFRAME)f(=)j
-(AST_CMPFRAME\()38 b(SKYFRAME,)i(SPECFRAME,)f(')44 b(',)e(STATUS)g(\))0
-5308 y FG(In)30 b(the)g(resulting)h(CmpF)-8 b(rame,)30
-b(axis)h(1)f(will)h(b)s(e)f(RA,)g(axis)h(2)g(will)g(b)s(e)e(Dec)j(and)d
-(axis)i(3)g(will)g(b)s(e)e(F)-8 b(requency)g(.)0 5421
-y(If)30 b(this)g(is)h(not)f(the)h(order)f(y)m(ou)g(w)m(an)m(t,)i(y)m
-(ou)f(can)f(p)s(erm)m(ute)g(the)h(axes)g(using)f(AST)p
-Fy(_)p FG(PERMAXES.)0 5580 y(There)36 b(is)g(one)g(p)s(oten)m(tial)i
-(problem)e(with)f(this)h(approac)m(h)h(if)f(y)m(ou)h(are)f(in)m
-(terested)h(in)f(un)m(usually)g(high)f(ac-)0 5693 y(curacy)-8
-b(.)53 b(Con)m(v)m(ersion)34 b(b)s(et)m(w)m(een)h(di\013eren)m(t)f
-(standards)g(of)g(rest)g(in)m(v)m(olv)m(es)i(taking)f(accoun)m(t)h(of)e
-(the)g(Doppler)p eop end
-%%Page: 93 103
-TeXDict begin 93 102 bop 0 52 a Fz(9.7)92 b(Handling)30
-b(Dual-Sideband)g(Sp)s(ectra)2175 b FG(93)0 351 y(shift)37
-b(caused)g(b)m(y)f(the)i(relativ)m(e)h(motion)e(of)g(the)g(t)m(w)m(o)i
-(standards)d(of)h(rest.)60 b(A)m(t)38 b(some)g(p)s(oin)m(t)f(this)f(in)
-m(v)m(olv)m(es)0 464 y(\014nding)26 b(the)h(comp)s(onen)m(t)g(of)h(the)
-f(relativ)m(e)i(v)m(elo)s(cit)m(y)h(in)d(the)g(direction)h(of)f(in)m
-(terest.)41 b(F)-8 b(or)28 b(a)f(Sp)s(ecF)-8 b(rame,)29
-b(this)0 577 y(direction)g(is)f(alw)m(a)m(ys)i(giv)m(en)g(b)m(y)e(the)g
-(RefRA)h(and)f(RefDec)h(attributes,)h(ev)m(en)f(if)f(the)h(Sp)s(ecF)-8
-b(rame)28 b(is)h(em)m(b)s(ed-)0 690 y(ded)j(within)g(a)h(CmpF)-8
-b(rame)32 b(as)h(ab)s(o)m(v)m(e.)49 b(It)33 b(w)m(ould)f(b)s(e)g(more)h
-(appropriate)f(if)h(this)f(\\direction)i(of)f(in)m(terest")0
-803 y(w)m(as)c(sp)s(eci\014ed)f(b)m(y)h(the)g(v)-5 b(alues)29
-b(passed)g(in)m(to)g(the)g(CmpF)-8 b(rame)29 b(on)g(the)g(RA)g(and)f
-(DEC)h(axes,)h(allo)m(wing)g(eac)m(h)0 916 y(pixel)h(within)f(a)g(data)
-h(cub)s(e)f(to)h(ha)m(v)m(e)h(a)e(sligh)m(tly)i(di\013eren)m(t)f
-(correction)h(for)e(Doppler)g(shift.)0 1072 y(Unfortunately)-8
-b(,)37 b(the)d(Sp)s(ecF)-8 b(rame)35 b(class)h(cannot)f(do)f(this)h
-(\(since)g(it)g(is)g(purely)e(a)i(1-dimensional)h(F)-8
-b(rame\),)0 1185 y(and)26 b(so)h(some)g(small)g(degree)g(of)g(error)f
-(will)h(b)s(e)f(in)m(tro)s(duced)g(when)g(con)m(v)m(erting)i(b)s(et)m
-(w)m(een)g(standards)d(of)i(rest,)0 1298 y(the)32 b(size)h(of)f(the)g
-(error)f(v)-5 b(arying)32 b(from)f(pixel)h(to)h(pixel.)45
-b(It)32 b(is)g(hop)s(ed)f(that)h(at)h(some)f(p)s(oin)m(t)g(in)f(the)h
-(future)f(a)0 1411 y(sub-class)g(of)g(CmpF)-8 b(rame)30
-b(\(a)i(Sp)s(ecCub)s(eF)-8 b(rame\))30 b(will)h(b)s(e)f(added)g(to)i
-(AST)e(whic)m(h)g(allo)m(ws)i(for)f(this)f(spatial)0
-1524 y(v)-5 b(ariation)32 b(in)e(Doppler)g(shift.)0 1680
-y(The)40 b(maxim)m(um)g(v)m(elo)s(cit)m(y)j(error)d(in)m(tro)s(duced)f
-(b)m(y)i(this)f(problem)f(is)i(of)f(the)h(order)f(of)g
-Fp(V)47 b Fu(\003)27 b Fp(S)5 b(I)i(N)j FG(\()p Fp(F)j(O)s(V)21
-b FG(\),)0 1793 y(where)33 b Fp(F)13 b(O)s(V)53 b FG(is)33
-b(the)g(angular)h(\014eld)e(of)i(view,)g(and)e Fp(V)54
-b FG(is)33 b(the)g(relativ)m(e)i(v)m(elo)s(cit)m(y)h(of)d(the)h(t)m(w)m
-(o)g(standards)e(of)0 1906 y(rest.)56 b(As)35 b(an)g(example,)i(when)e
-(correcting)h(from)f(the)h(observ)m(ers)f(rest)h(frame)f(\(i.e.)56
-b(the)36 b(top)s(o)s(cen)m(tric)g(rest)0 2019 y(frame\))f(to)h(the)f
-(kinematic)h(lo)s(cal)h(standard)d(of)h(rest)g(the)g(maxim)m(um)g(v)-5
-b(alue)35 b(of)g Fp(V)55 b FG(is)35 b(ab)s(out)g(20)h
-Fp(k)s(m=s)p FG(,)g(so)0 2132 y(for)c(5)h(arc-min)m(ute)g(\014eld)f(of)
-h(view)f(the)h(maxim)m(um)f(v)m(elo)s(cit)m(y)j(error)d(in)m(tro)s
-(duced)g(b)m(y)g(the)h(correction)g(will)g(b)s(e)0 2245
-y(ab)s(out)c(0.03)j Fp(k)s(m=s)p FG(.)40 b(As)30 b(another)g(example,)h
-(the)f(maxim)m(um)f(error)g(when)g(correcting)i(from)e(the)h(observ)m
-(ers)0 2357 y(rest)h(frame)f(to)h(the)g(lo)s(cal)g(group)f(is)g(ab)s
-(out)g(5)h Fp(k)s(m=s)g FG(o)m(v)m(er)g(a)g(1)g(degree)g(\014eld)f(of)g
-(view.)0 2641 y Fw(9.7)112 b(Handling)39 b(Dual-Sideband)h(Sp)s(ectra)0
-2856 y FG(Dual)32 b(sideband)d(sup)s(er-hetero)s(dyne)h(receiv)m(ers)i
-(pro)s(duce)e(sp)s(ectra)h(in)f(whic)m(h)h(eac)m(h)h(c)m(hannel)g(con)m
-(tains)g(con-)0 2969 y(tributions)27 b(from)g(t)m(w)m(o)i(di\013eren)m
-(t)f(frequencies,)g(referred)f(to)h(as)f(the)h(\\upp)s(er)e(sideband)g
-(frequency")h(and)g(the)0 3082 y(\\lo)m(w)m(er)i(sideband)d
-(frequency".)40 b(In)26 b(the)i(rest)f(frame)h(of)f(the)h(observ)m(er)f
-(\(top)s(o)s(cen)m(tric\),)j(these)e(are)g(related)g(to)0
-3195 y(eac)m(h)k(other)e(as)h(follo)m(ws:)1544 3518 y
-Fm(f)1585 3530 y Fl(lsb)1694 3518 y Fk(=)23 b(2)p Fm(:f)1888
-3530 y Fl(LO)2007 3518 y Fj(\000)18 b Fm(f)2131 3530
-y Fl(usb)3446 3518 y Fk(\(1\))0 3754 y FG(where)34 b
-Fp(f)312 3768 y Fi(LO)454 3754 y FG(is)h(a)g(\014xed)e(frequency)i(kno)
-m(wn)f(as)h(the)f(\\lo)s(cal)j(oscillator)g(frequency".)53
-b(In)34 b(other)h(w)m(ords,)g(the)0 3867 y(lo)s(cal)30
-b(oscillator)g(frequency)e(is)g(alw)m(a)m(ys)i(mid-w)m(a)m(y)f(b)s(et)m
-(w)m(een)g(an)m(y)g(pair)f(of)g(corresp)s(onding)f(upp)s(er)g(and)g(lo)
-m(w)m(er)0 3980 y(sideband)37 b(frequencies)822 3947
-y Fv(15)897 3980 y FG(.)63 b(If)38 b(y)m(ou)g(w)m(an)m(t)h(to)f
-(describ)s(e)g(the)g(sp)s(ectral)g(axis)h(of)f(suc)m(h)f(a)i(sp)s
-(ectrum)e(using)g(a)0 4093 y(Sp)s(ecF)-8 b(rame)31 b(y)m(ou)h(m)m(ust)f
-(c)m(ho)s(ose)h(whether)f(y)m(ou)g(w)m(an)m(t)h(the)g(Sp)s(ecF)-8
-b(rame)31 b(to)h(describ)s(e)f Fp(f)3029 4108 y Fi(l)q(sb)3148
-4093 y FG(or)h Fp(f)3306 4108 y Fi(usb)3444 4093 y FG(-)f(a)h(basic)0
-4206 y(Sp)s(ecF)-8 b(rame)42 b(cannot)g(describ)s(e)f(b)s(oth)f
-(sidebands)g(sim)m(ultaneously)-8 b(.)76 b(Ho)m(w)m(ev)m(er,)46
-b(there)c(is)f(a)h(sub-class)f(of)0 4319 y(Sp)s(ecF)-8
-b(rame,)31 b(called)g(DSBSp)s(ecF)-8 b(rame,)32 b(whic)m(h)e(o)m(v)m
-(ercomes)i(this)f(di\016cult)m(y)-8 b(.)0 4475 y(A)33
-b(DSBSp)s(ecF)-8 b(rame)33 b(has)f(a)h(SideBand)f(attribute)h(whic)m(h)
-f(indicates)i(if)e(the)h(DSBSp)s(ecF)-8 b(rame)33 b(is)f(curren)m(tly)0
-4588 y(b)s(eing)k(used)f(to)i(describ)s(e)f(the)h(upp)s(er)d(or)i(lo)m
-(w)m(er)i(sideband)d(sp)s(ectral)i(axis.)59 b(The)35
-b(v)-5 b(alue)37 b(of)g(this)f(attribute)0 4701 y(can)k(b)s(e)f(c)m
-(hanged)h(at)h(an)m(y)f(time.)69 b(If)39 b(y)m(ou)h(use)g(the)g(AST)p
-Fy(_)p FG(CONVER)-8 b(T)38 b(function)h(to)i(\014nd)d(the)i(Mapping)0
-4814 y(b)s(et)m(w)m(een)f(t)m(w)m(o)g(DSBSp)s(ecF)-8
-b(rames,)40 b(the)f(setting)g(for)e(the)i(t)m(w)m(o)g(SideBand)e
-(attributes)i(will)f(b)s(e)f(tak)m(en)i(in)m(to)0 4927
-y(accoun)m(t.)j(Th)m(us,)29 b(if)h(y)m(ou)h(tak)m(e)g(a)g(cop)m(y)g(of)
-f(a)g(DSBSp)s(ecF)-8 b(rame,)31 b(toggle)h(its)f(SideBand)e(attribute,)
-i(and)f(then)0 5040 y(use)36 b(AST)p Fy(_)p FG(CONVER)-8
-b(T)34 b(to)j(\014nd)e(a)h(Mapping)g(from)g(the)g(original)h(to)g(the)f
-(mo)s(di\014ed)f(cop)m(y)-8 b(,)39 b(the)d(resulting)0
-5153 y(Mapping)f(will)g(b)s(e)f(of)h(the)g(form)g(of)g(equation)h(1)f
-(\(if)g(the)g(DSBSp)s(ecF)-8 b(rame)36 b(has)e(its)i(StdOfRest)e
-(attribute)0 5266 y(set)d(to)g(\\T)-8 b(op)s(o)s(cen)m(tric"\).)0
-5422 y(In)28 b(general,)j(when)d(\014nding)g(a)i(Mapping)f(b)s(et)m(w)m
-(een)h(t)m(w)m(o)g(arbitrary)f(DSBSp)s(ecF)-8 b(rames,)30
-b(the)g(total)h(Mapping)0 5535 y(is)f(made)h(of)f(of)h(three)f(parts)h
-(in)f(series:)p 0 5607 1512 4 v 73 5661 a Fs(15)138 5693
-y Fr(Note,)c(this)g(simple)g(relationship)h(only)f(applies)g(if)g(all)h
-(frequencies)f(are)g(top)r(o)r(cen)n(tric.)p eop end
-%%Page: 94 104
-TeXDict begin 94 103 bop 0 52 a FG(94)1201 b Fz(9)91
-b(SPECTRAL)29 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(SPECFRAMES\))111
-351 y FG(1.)46 b(A)38 b(Mapping)f(whic)m(h)g(con)m(v)m(erts)h(the)g
-(\014rst)e(DSBSp)s(ecF)-8 b(rame)38 b(in)m(to)g(its)f(upp)s(er)f
-(sideband)g(represen)m(ta-)227 464 y(tion.)41 b(If)30
-b(the)g(DSBSp)s(ecF)-8 b(rame)30 b(already)h(represen)m(ts)f(its)g(upp)
-s(er)e(sideband,)h(this)h(Mapping)g(will)g(b)s(e)f(a)227
-577 y(UnitMap.)111 765 y(2.)46 b(A)25 b(Mapping)g(whic)m(h)f(con)m(v)m
-(erts)i(from)e(the)h(\014rst)f(to)i(the)f(second)f(DSBSp)s(ecF)-8
-b(rame,)27 b(treating)f(them)f(as)f(if)227 878 y(they)30
-b(w)m(ere)h(b)s(oth)e(basic)h(Sp)s(ecF)-8 b(rames.)41
-b(This)29 b(tak)m(es)i(accoun)m(t)h(of)e(an)m(y)g(di\013erence)g(in)g
-(units,)f(standard)227 991 y(of)i(rest,)g(system,)f Fx(etc)36
-b FG(b)s(et)m(w)m(een)31 b(the)f(t)m(w)m(o)i(DSBSp)s(ecF)-8
-b(rames.)111 1178 y(3.)46 b(A)25 b(Mapping)g(whic)m(h)f(con)m(v)m(erts)
-j(the)e(second)f(DSBSp)s(ecF)-8 b(rame)26 b(from)e(its)h(upp)s(er)e
-(sideband)h(represen)m(ta-)227 1291 y(tion)g(to)h(its)e(curren)m(t)h
-(sideband.)37 b(If)23 b(the)h(DSBSp)s(ecF)-8 b(rame)24
-b(curren)m(tly)f(represen)m(ts)h(its)g(upp)s(er)d(sideband,)227
-1404 y(this)31 b(Mapping)f(will)h(b)s(e)e(a)i(UnitMap.)0
-1666 y(If)h(an)h(attempt)h(is)f(made)f(to)i(\014nd)d(the)i(Mapping)g(b)
-s(et)m(w)m(een)g(a)g(DSBSp)s(ecF)-8 b(rame)34 b(and)e(a)h(basic)g(Sp)s
-(ecF)-8 b(rame,)0 1779 y(then)34 b(the)g(DSBSp)s(ecF)-8
-b(rame)34 b(will)g(b)s(e)g(treated)h(lik)m(e)g(a)f(basic)g(Sp)s(ecF)-8
-b(rame.)52 b(In)33 b(other)h(w)m(ords,)h(the)f(returned)0
-1892 y(Mapping)42 b(will)g(not)h(b)s(e)e(a\013ected)i(b)m(y)f(the)g
-(setting)i(of)e(the)g(SideBand)f(attribute)i(\(or)f(an)m(y)h(of)f(the)g
-(other)0 2005 y(attributes)31 b(sp)s(eci\014c)f(to)h(the)g(DSBSp)s(ecF)
--8 b(rame)31 b(class\).)0 2168 y(In)41 b(practice,)46
-b(the)c(lo)s(cal)h(oscillator)h(frequency)e(for)f(a)h(dual)g(sideband)e
-(instrumen)m(t)i(ma)m(y)g(not)g(b)s(e)f(easily)0 2281
-y(a)m(v)-5 b(ailable)31 b(to)f(an)f(observ)m(er.)40 b(Instead,)30
-b(it)f(is)g(common)g(practice)h(to)g(sp)s(ecify)f(the)g(sp)s(ectral)g
-(p)s(osition)g(of)g(some)0 2394 y(cen)m(tral)k(feature)g(in)f(the)g
-(observ)-5 b(ation)33 b(\(commonly)g(the)f(cen)m(tre)h(of)f(the)h
-(instrumen)m(t)e(passband\),)h(together)0 2507 y(with)23
-b(an)g(\\in)m(termediate)i(frequency".)39 b(T)-8 b(ogether,)26
-b(these)e(t)m(w)m(o)g(v)-5 b(alues)24 b(allo)m(w)g(the)g(lo)s(cal)g
-(oscillator)i(frequency)0 2619 y(to)21 b(b)s(e)f(determined.)37
-b(The)20 b(in)m(termediate)i(frequency)d(is)i(the)f(di\013erence)h(b)s
-(et)m(w)m(een)g(the)f(top)s(o)s(cen)m(tric)i(frequency)0
-2732 y(at)31 b(the)g(cen)m(tral)g(sp)s(ectral)g(p)s(osition)g(and)e
-(the)i(top)s(o)s(cen)m(tric)g(frequency)f(of)h(the)f(lo)s(cal)i
-(oscillator.)43 b(So:)1528 3081 y Fm(f)1569 3093 y Fl(LO)1693
-3081 y Fk(=)23 b Fm(f)1822 3093 y Fl(centr)r(al)2062
-3081 y Fk(+)18 b Fm(f)2186 3093 y Fl(if)3446 3081 y Fk(\(2\))0
-3343 y FG(The)29 b(DSBSp)s(ecF)-8 b(rame)30 b(class)h(uses)e(the)h
-(DSBCen)m(tre)g(attribute)g(to)g(sp)s(ecify)g(the)g(cen)m(tral)g(sp)s
-(ectral)g(p)s(osition)0 3456 y(\()p Fp(f)80 3471 y Fi(centr)r(al)309
-3456 y FG(\),)43 b(and)d(the)h(IF)g(attribute)g(to)g(sp)s(ecify)f(the)h
-(in)m(termediate)h(frequency)e(\()p Fp(f)2932 3471 y
-Fi(if)3001 3456 y FG(\).)72 b(The)40 b(DSBCen)m(tre)0
-3569 y(v)-5 b(alue)35 b(is)f(giv)m(en)h(and)f(returned)f(in)h(the)g(sp)
-s(ectral)h(system)f(describ)s(ed)f(b)m(y)i(the)f(DSBSp)s(ecF)-8
-b(rame)35 b(\(th)m(us)f(y)m(ou)0 3682 y(do)k(not)g(need)f(to)h
-(calculate)j(the)c(corresp)s(onding)g(top)s(o)s(cen)m(tric)i(frequency)
-e(y)m(ourself)h(-)g(this)g(will)g(b)s(e)f(done)0 3795
-y(automatically)28 b(b)m(y)e(the)g(DSBSp)s(ecF)-8 b(rame)26
-b(when)f(y)m(ou)h(assign)f(a)h(new)g(v)-5 b(alue)26 b(to)g(the)g
-(DSBCen)m(tre)g(attribute\).)0 3908 y(The)j(v)-5 b(alue)30
-b(assigned)f(to)i(the)e(IF)h(attribute)g(should)e(alw)m(a)m(ys)j(b)s(e)
-e(a)h(top)s(o)s(cen)m(tric)g(frequency)f(in)g(units)g(of)h(Hz,)0
-4021 y(ho)m(w)m(ev)m(er)38 b(a)f(negativ)m(e)h(v)-5 b(alue)37
-b(ma)m(y)g(b)s(e)f(giv)m(en)h(to)g(indicate)h(that)f(the)f(DSBCen)m
-(tre)h(v)-5 b(alue)37 b(is)g(in)f(the)g(upp)s(er)0 4134
-y(sideband)g(\(that)j(is,)h(if)d Fp(I)7 b(F)50 b(<)37
-b FG(0)h(then)f Fp(f)1447 4149 y Fi(centr)r(al)1713 4134
-y Fp(>)g(f)1866 4148 y Fi(LO)1973 4134 y FG(\).)63 b(A)37
-b(p)s(ositiv)m(e)i(v)-5 b(alue)38 b(for)f(IF)h(indicates)g(that)g(the)0
-4247 y(DSBCen)m(tre)31 b(v)-5 b(alue)31 b(is)f(in)g(the)h(lo)m(w)m(er)h
-(sideband)d(\(that)i(is,)g(if)f Fp(I)7 b(F)39 b(>)25
-b FG(0)30 b(then)g Fp(f)2685 4262 y Fi(centr)r(al)2939
-4247 y Fp(<)25 b(f)3080 4261 y Fi(LO)3187 4247 y FG(\).)p
-eop end
-%%Page: 95 105
-TeXDict begin 95 104 bop 3689 52 a FG(95)0 351 y FA(10)135
-b(Time)45 b(Systems)h(\(TimeF)-11 b(rames\))0 597 y FG(The)23
-b(TimeF)-8 b(rame)25 b(is)f(a)h(F)-8 b(rame)25 b(whic)m(h)e(is)h(sp)s
-(ecialised)h(for)f(represen)m(ting)g(momen)m(ts)g(in)g(time.)39
-b(In)23 b(this)h(section)0 710 y(w)m(e)31 b(examine)g(the)g(additional)
-h(prop)s(erties)e(and)f(b)s(eha)m(viour)i(of)f(a)h(TimeF)-8
-b(rame)32 b(that)f(distinguish)f(it)h(from)f(a)0 823
-y(basic)h(F)-8 b(rame)31 b(\()p Fu(x)p FG(7\).)0 1105
-y Fw(10.1)112 b(The)38 b(TimeF)-9 b(rame)39 b(Mo)s(del)0
-1319 y FG(As)29 b(for)f(a)i(SkyF)-8 b(rame,)29 b(a)h(TimeF)-8
-b(rame)29 b(is)g(a)h(F)-8 b(rame)29 b(\()p Fu(x)p FG(7\))i(and)d(also)i
-(a)f(Mapping)g(\()p Fu(x)p FG(5\),)i(so)e(it)g(inherits)g(all)g(the)0
-1432 y(prop)s(erties)c(and)g(b)s(eha)m(viour)g(of)h(these)g(t)m(w)m(o)h
-(ancestral)g(classes.)40 b(When)25 b(used)g(as)h(a)g(Mapping,)g(a)g
-(TimeF)-8 b(rame)0 1545 y(implemen)m(ts)26 b(a)f(unit)g
-(transformation,)h(exactly)h(lik)m(e)g(a)e(basic)h(F)-8
-b(rame)26 b(\()p Fu(x)p FG(7.3\))h(or)e(a)h(UnitMap,)h(so)e(this)g(asp)
-s(ect)0 1658 y(of)31 b(its)f(b)s(eha)m(viour)g(is)h(not)f(of)h(great)g
-(imp)s(ortance.)0 1813 y(When)23 b(used)g(as)h(a)g(F)-8
-b(rame,)26 b(ho)m(w)m(ev)m(er,)g(a)e(TimeF)-8 b(rame)25
-b(represen)m(ts)e(a)h(wide)f(range)h(of)g(di\013eren)m(t)g
-(1-dimensional)0 1926 y(co)s(ordinate)30 b(system)f(whic)m(h)f(can)h(b)
-s(e)g(used)f(to)h(describ)s(e)g(momen)m(ts)g(in)f(time.)41
-b(Absolute)30 b(times)f(and)f(relativ)m(e)0 2039 y(\(i.e.)41
-b(elapsed\))28 b(times)g(are)g(supp)s(orted)e(\(attribute)i
-(TimeOrigin\),)g(as)g(are)g(a)g(range)g(of)f(di\013eren)m(t)h(time)g
-(scales)0 2152 y(\(attribute)39 b(TimeScale\).)65 b(An)37
-b(absolute)i(or)f(relativ)m(e)i(v)-5 b(alue)38 b(in)f(an)m(y)i(time)f
-(scale)h(can)g(b)s(e)e(represen)m(ted)h(in)0 2265 y(di\013eren)m(t)23
-b(forms)e(suc)m(h)h(as)g(Mo)s(di\014ed)g(Julian)g(Date,)k(Julian)21
-b(Ep)s(o)s(c)m(h,)j Fx(etc)j FG(\(attribute)c(System\).)38
-b(AST)22 b(extends)0 2378 y(the)30 b(de\014nition)f(of)g(these)h
-(systems)g(to)g(allo)m(w)h(them)e(to)h(b)s(e)f(used)g(with)g(an)m(y)g
-(unit)g(of)h(time)g(\(attribute)h(Unit\).)0 2491 y(The)i(TimeF)-8
-b(rame)35 b(class)g(also)g(allo)m(ws)g(times)g(to)g(formatted)f(as)g
-(either)h(a)f(simple)g(\015oating)h(p)s(oin)m(t)f(v)-5
-b(alue)34 b(or)0 2604 y(as)d(a)f(Gregorian)i(date)f(and)f(time)h(of)f
-(da)m(y)h(\(attribute)g(F)-8 b(ormat\).)0 2886 y Fw(10.2)112
-b(Creating)38 b(a)g(TimeF)-9 b(rame)0 3100 y FG(The)33
-b(TimeF)-8 b(rame)35 b(constructor)f(function)f(is)h(particularly)g
-(simple)g(and)f(a)h(TimeF)-8 b(rame)34 b(with)g(default)f(at-)0
-3213 y(tributes)d(is)h(created)g(as)g(follo)m(ws:)262
-3433 y Ft(INCLUDE)40 b('AST_PAR')262 3533 y(INTEGER)g(TIMEFRAME,)g
-(STATUS)262 3732 y(STATUS)h(=)i(0)262 3931 y(...)262
-4130 y(TIMEFRAME)c(=)44 b(AST_TIMEFRAME\()37 b(')44 b(',)e(STATUS)f(\))
-0 4364 y FG(Suc)m(h)25 b(a)g(TimeF)-8 b(rame)27 b(w)m(ould)e(represen)m
-(t)g(the)h(default)f(co)s(ordinate)h(system)g(whic)m(h)f(is)g(Mo)s
-(di\014ed)g(Julian)g(Date)0 4476 y(\(with)30 b(the)h(usual)f(units)g
-(of)g(da)m(ys\))h(in)f(the)h(In)m(ternational)g(A)m(tomic)i(Time)d(\(T)
--8 b(AI\))31 b(time)g(scale.)0 4759 y Fw(10.3)112 b(Sp)s(ecifying)39
-b(a)f(P)m(articular)f(Time)h(System)0 4973 y FG(By)28
-b(setting)g(the)g(System)f(attribute)h(appropriately)-8
-b(,)29 b(the)f(TimeF)-8 b(rame)28 b(can)g(represen)m(t)f(Julian)h
-(Date,)h(Mo)s(d-)0 5086 y(i\014ed)37 b(Julian)h(Date,)k(Julian)37
-b(Ep)s(o)s(c)m(h)g(or)h(Besselian)h(Ep)s(o)s(c)m(h)e(\(the)i(time)f
-(scale)h(is)f(sp)s(eci\014ed)f(b)m(y)h(a)g(separate)0
-5199 y(attribute)31 b(called)h(TimeScale\).)0 5354 y(Selection)d(of)f
-(a)h(particular)f(co)s(ordinate)h(system)f(is)f(p)s(erformed)g(simply)g
-(b)m(y)h(setting)h(a)f(v)-5 b(alue)28 b(for)g(the)g(Time-)0
-5467 y(F)-8 b(rame's)35 b(\(c)m(haracter)h(string\))f(System)f
-(attribute.)53 b(This)33 b(setting)j(is)e(most)g(con)m(v)m(enien)m(tly)
-j(done)d(when)f(the)0 5580 y(TimeF)-8 b(rame)31 b(is)f(created.)42
-b(F)-8 b(or)30 b(example,)h(a)g(TimeF)-8 b(rame)30 b(represen)m(ting)h
-(Julian)e(Ep)s(o)s(c)m(h)g(w)m(ould)h(b)s(e)f(created)0
-5693 y(b)m(y:)p eop end
-%%Page: 96 106
-TeXDict begin 96 105 bop 0 52 a FG(96)2068 b Fz(10)92
-b(TIME)30 b(SYSTEMS)f(\(TIMEFRAMES\))262 351 y Ft(TIMEFRAME)39
-b(=)44 b(AST_TIMEFRAME\()37 b('System=JEPOCH',)g(STATUS)k(\))0
-614 y FG(Note)35 b(that)f(sp)s(ecifying)g(\\System=JEPOCH")f(also)i(c)m
-(hanges)g(the)f(asso)s(ciated)h(default)f(Unit)g(\(from)f(da)m(ys)0
-727 y(to)g(y)m(ears\).)46 b(This)31 b(is)h(b)s(ecause)g(the)h(default)f
-(v)-5 b(alue)32 b(of)g(the)g(TimeF)-8 b(rame's)33 b(Unit)g(attribute)f
-(dep)s(ends)e(on)i(the)0 839 y(System)e(attribute)h(setting.)0
-1002 y(Y)-8 b(ou)30 b(ma)m(y)g(c)m(hange)h(the)e(System)h(v)-5
-b(alue)30 b(at)g(an)m(y)g(time,)g(although)g(this)g(is)f(not)h(usually)
-f(needed.)40 b(The)29 b(v)-5 b(alues)0 1115 y(supp)s(orted)29
-b(are)h(set)h(out)g(in)f(the)g(attribute's)i(description)e(in)g(App)s
-(endix)f(C.)0 1408 y Fw(10.4)112 b(A)m(ttributes)37 b(whic)m(h)g
-(Qualify)i(Time)f(Co)s(ordinate)h(Systems)0 1630 y FG(Time)f(co)s
-(ordinate)i(systems)e(require)g(some)h(additional)g(free)f(parameters)h
-(to)g(iden)m(tify)g(a)g(particular)f(co-)0 1743 y(ordinate)c(system)g
-(from)f(amongst)i(a)f(broader)f(class)h(of)g(related)h(co)s(ordinate)f
-(systems.)51 b(F)-8 b(or)34 b(example,)i(all)0 1856 y(TimeF)-8
-b(rames)29 b(are)f(quali\014ed)g(b)m(y)g(the)g(time)h(scale)g(\(that)h
-(is,)e(the)h(ph)m(ysical)f(pro)s(cess)g(used)f(to)i(de\014ne)e(the)h
-(\015o)m(w)0 1968 y(of)j(time\),)g(and)f(some)h(require)f(the)g(p)s
-(osition)h(of)f(the)h(observ)m(er's)g(clo)s(c)m(k.)0
-2131 y(In)42 b(AST,)g(these)h(free)f(parameters)h(are)g(represen)m(ted)
-f(b)m(y)h(additional)g(TimeF)-8 b(rame)43 b(attributes,)k(eac)m(h)c(of)
-0 2244 y(whic)m(h)35 b(has)g(a)g(default)g(appropriate)h(to)f(\()p
-Fx(i.e.)g FG(de\014ned)f(b)m(y\))i(the)f(setting)h(of)f(the)h(main)f
-(System)f(attribute.)0 2357 y(Eac)m(h)e(of)g(these)g
-Fx(qualifying)h(attributes)g FG(ma)m(y)-8 b(,)33 b(ho)m(w)m(ev)m(er,)g
-(b)s(e)e(assigned)h(an)f(explicit)i(v)-5 b(alue)32 b(so)g(as)g(to)g
-(select)h(a)0 2470 y(particular)27 b(co)s(ordinate)h(system.)40
-b(Note,)29 b(it)f(is)f(usually)g(b)s(est)g(to)h(assign)f(explicit)h(v)
--5 b(alues)28 b(whenev)m(er)f(p)s(ossible)0 2583 y(rather)f(than)g
-(relying)h(on)f(defaults.)40 b(A)m(ttribute)27 b(should)f(only)g(b)s(e)
-g(left)h(at)g(their)f(default)h(v)-5 b(alue)27 b(if)f(y)m(ou)h(\\don't)
-0 2696 y(care")33 b(what)f(v)-5 b(alue)33 b(is)f(used.)45
-b(In)32 b(certain)h(circumstances)f(\(particularly)-8
-b(,)34 b(when)e(aligning)h(t)m(w)m(o)g(F)-8 b(rames\),)34
-b(a)0 2809 y(default)f(v)-5 b(alue)33 b(for)g(an)f(attribute)i(ma)m(y)f
-(b)s(e)g(replaced)g(b)m(y)f(the)h(v)-5 b(alue)34 b(from)e(another)h
-(similar)g(F)-8 b(rame.)49 b(Suc)m(h)0 2922 y(v)-5 b(alue)31
-b(replacemen)m(t)h(can)e(b)s(e)g(prev)m(en)m(ted)h(b)m(y)f(assigning)h
-(an)f(explicit)i(v)-5 b(alue)31 b(to)g(the)f(attribute,)i(rather)e
-(than)0 3034 y(simply)g(relying)h(on)f(the)g(default.)0
-3197 y(The)g(main)g(TimeF)-8 b(rame)32 b(attributes)e(whic)m(h)h
-(qualify)f(the)h(System)f(attribute)h(are:)227 3460 y
-FE(TimeScale)427 3572 y FG(This)f(sp)s(eci\014es)g(the)g(time)i(scale.)
-227 3719 y FE(L)-9 b(TO\013set)427 3831 y FG(This)32
-b(sp)s(eci\014es)g(the)h(o\013set)g(from)f(Lo)s(cal)h(Time)g(to)g(UTC)f
-(in)g(hours)f(\(time)j(zones)f(east)g(of)427 3944 y(Green)m(wic)m(h)c
-(ha)m(v)m(e)f(p)s(ositiv)m(e)h(v)-5 b(alues\).)40 b(Note,)30
-b(AST)c(uses)h(the)h(v)-5 b(alue)27 b(as)h(supplied)e(without)427
-4057 y(making)31 b(an)m(y)g(correction)g(for)g(da)m(yligh)m(t)h(sa)m
-(ving.)227 4203 y FE(TimeOrigin)427 4316 y FG(This)h(sp)s(eci\014es)g
-(the)g(zero)h(p)s(oin)m(t)g(from)e(whic)m(h)h(time)h(v)-5
-b(alues)34 b(are)g(measured,)f(within)g(the)427 4429
-y(system)39 b(sp)s(eci\014ed)e(b)m(y)h(the)h(System)f(attribute.)65
-b(Th)m(us,)39 b(a)g(v)-5 b(alue)39 b(ofzero)g(\(the)g(default\))427
-4542 y(indicates)g(that)g(time)g(v)-5 b(alues)38 b(represen)m(t)h
-(absolute)g(times.)64 b(Non-zero)40 b(v)-5 b(alues)38
-b(ma)m(y)h(b)s(e)427 4655 y(used)26 b(to)g(indicate)i(that)e(the)h
-(TimeF)-8 b(rame)27 b(represen)m(ts)f(elapsed)g(time)h(since)g(the)f
-(sp)s(eci\014ed)427 4768 y(origin.)0 5030 y(F)-8 b(or)32
-b(further)d(details)j(of)f(these)h(attributes)f(y)m(ou)h(should)e
-(consult)h(their)g(descriptions)g(in)f(App)s(endix)g(C)g(and)0
-5143 y(for)g(details)i(of)e(the)h(System)f(settings)i(for)e(whic)m(h)g
-(they)h(are)g(relev)-5 b(an)m(t,)32 b(see)f(the)g(description)f(of)h
-(the)g(System)0 5256 y(attribute)g(\(also)h(in)e(App)s(endix)e(C\).)0
-5419 y(Note)38 b(that)f(it)h(do)s(es)e(no)h(harm)f(to)h(assign)g(v)-5
-b(alues)37 b(to)h(qualifying)f(attributes)g(whic)m(h)g(are)g(not)g
-(relev)-5 b(an)m(t)38 b(to)0 5532 y(the)c(main)f(System)g(or)g
-(TimeScale)i(v)-5 b(alue.)50 b(An)m(y)34 b(suc)m(h)f(v)-5
-b(alues)33 b(are)h(stored,)h(but)e(are)g(not)h(used)f(unless)f(the)0
-5645 y(System)e(and/or)g(TimeScale)i(v)-5 b(alue)31 b(is)f(later)h(set)
-g(so)g(that)g(they)g(b)s(ecome)f(relev)-5 b(an)m(t.)p
-eop end
-%%Page: 97 107
-TeXDict begin 97 106 bop 3689 52 a FG(97)0 351 y FA(11)135
-b(Comp)t(ound)44 b(F)-11 b(rames)45 b(\(CmpF)-11 b(rames\))0
-610 y FG(W)j(e)29 b(no)m(w)f(turn)f(to)i(a)f(rather)g(sp)s(ecial)g
-(form)g(of)g(Mapping,)h(the)f(CmpF)-8 b(rame.)39 b(The)28
-b(F)-8 b(rames)29 b(w)m(e)f(ha)m(v)m(e)h(consid-)0 723
-y(ered)k(so)h(far)f(ha)m(v)m(e)h(b)s(een)e(atomic,)k(in)d(the)h(sense)f
-(that)h(they)f(represen)m(t)g(pre-de\014ned)f(elemen)m(tary)j(ph)m
-(ysical)0 836 y(domains.)53 b(A)35 b(CmpF)-8 b(rame,)36
-b(ho)m(w)m(ev)m(er,)i(is)c(a)h(comp)s(ound)f(F)-8 b(rame.)54
-b(In)34 b(essence,)j(it)e(is)g(a)g(structure)f(for)h(con-)0
-949 y(taining)45 b(other)f(F)-8 b(rames)45 b(and)e(its)h(purp)s(ose)e
-(is)i(to)h(allo)m(w)h(those)e(F)-8 b(rames)45 b(to)f(w)m(ork)g
-(together)i(in)d(v)-5 b(arious)0 1062 y(com)m(binations)41
-b(while)f(app)s(earing)f(as)i(a)f(single)g(Ob)5 b(ject.)70
-b(A)40 b(CmpF)-8 b(rame's)39 b(b)s(eha)m(viour)h(is)g(therefore)g(not)0
-1175 y(pre-de\014ned,)29 b(but)h(is)g(determined)g(b)m(y)h(the)f(other)
-h(F)-8 b(rames)31 b(it)g(con)m(tains)g(\(its)g(\\comp)s(onen)m(t")h(F)
--8 b(rames\).)0 1342 y(As)44 b(with)f(comp)s(ound)f(Mappings,)48
-b(comp)s(ound)42 b(F)-8 b(rames)44 b(can)g(b)s(e)f(nested)h(within)f
-(eac)m(h)i(other,)j(forming)0 1455 y(arbitrarily)31 b(complex)g(F)-8
-b(rames.)0 1762 y Fw(11.1)112 b(Creating)38 b(a)g(CmpF)-9
-b(rame)0 1990 y FG(A)31 b(v)m(ery)h(common)g(use)f(for)g(a)g(CmpF)-8
-b(rame)32 b(within)e(astronom)m(y)i(is)g(to)g(represen)m(t)f(a)h(\\sp)s
-(ectral)g(cub)s(e".)43 b(This)0 2103 y(is)34 b(a)h(3-dimensional)h(F)-8
-b(rame)35 b(in)f(whic)m(h)g(one)h(of)f(the)h(axes)g(represen)m(ts)f(p)s
-(osition)h(within)f(a)h(sp)s(ectrum,)f(and)0 2216 y(the)40
-b(other)h(t)m(w)m(o)h(axes)e(represen)m(t)h(p)s(osition)f(on)g(the)h
-(sky)f(\(or)g(some)h(other)f(spatial)i(domain)e(suc)m(h)g(as)g(the)0
-2329 y(fo)s(cal)32 b(plane)g(of)g(a)f(telescop)s(e\).)46
-b(As)32 b(an)f(example,)i(w)m(e)f(create)h(suc)m(h)e(a)h(CmpF)-8
-b(rame)32 b(in)f(whic)m(h)g(axes)h(1)g(and)f(2)0 2442
-y(represen)m(t)e(Righ)m(t)h(Ascension)g(and)e(Declination)k(\(ICRS\),)d
-(and)f(axis)i(3)g(represen)m(ts)f(w)m(a)m(v)m(elength)i(\(these)f(are)0
-2555 y(the)h(default)f(co)s(ordinate)h(Systems)f(represen)m(ted)h(b)m
-(y)f(a)h(SkyF)-8 b(rame)30 b(and)g(a)h(Sp)s(ecF)-8 b(rame)31
-b(resp)s(ectiv)m(ely\):)262 2817 y Ft(INTEGER)40 b(SKYFRAME)262
-2916 y(INTEGER)g(SPECFRAME)262 3016 y(INTEGER)g(CMPFRAME)262
-3116 y(...)262 3215 y(SKYFRAME)g(=)j(AST_SKYFRAME\()38
-b(')43 b(',)g(STATUS)e(\))262 3315 y(SPECFRAME)e(=)44
-b(AST_SPECFRAME\()37 b(')44 b(',)e(STATUS)f(\))262 3414
-y(CMPFRAME)f(=)j(AST_CMPFRAME\()38 b(SKYFRAME,)i(SPECFRAME,)f(')44
-b(',)e(STATUS)g(\))0 3690 y FG(If)27 b(it)g(w)m(as)h(desired)e(to)i
-(mak)m(e)g(RA)f(and)g(Dec)h(corresp)s(ond)e(to)i(axes)f(1)h(and)e(3,)i
-(with)f(axis)h(2)f(b)s(eing)g(the)g(sp)s(ectral)0 3803
-y(axis,)k(then)f(the)h(axes)g(of)f(the)h(CmpF)-8 b(rame)30
-b(created)h(ab)s(o)m(v)m(e)h(w)m(ould)e(need)g(to)h(b)s(e)f(p)s(erm)m
-(uted)g(as)g(follo)m(ws:)262 4064 y Ft(INTEGER)40 b(PERM\(3\))262
-4164 y(...)262 4363 y(PERM\()h(1)i(\))g(=)h(1)262 4463
-y(PERM\()d(2)i(\))g(=)h(3)262 4563 y(PERM\()d(3)i(\))g(=)h(2)262
-4662 y(CALL)d(AST_PERMAXES\()e(CMPFRAME,)h(PERM,)h(STATUS)g(\))0
-4970 y Fw(11.2)112 b(The)38 b(A)m(ttributes)e(of)i(a)g(CmpF)-9
-b(rame)0 5198 y FG(A)45 b(CmpF)-8 b(rame)44 b Fx(is)h(a)52
-b FG(F)-8 b(rame)45 b(and)f(so)h(has)f(all)h(the)g(attributes)g(of)g(a)
-f(F)-8 b(rame.)84 b(The)44 b(default)h(v)-5 b(alue)45
-b(for)0 5311 y(the)e(Domain)g(attribute)g(for)g(a)g(CmpF)-8
-b(rame)42 b(is)g(formed)g(b)m(y)h(concatenating)i(the)e(Domains)g(of)f
-(the)h(t)m(w)m(o)0 5423 y(comp)s(onen)m(t)25 b(F)-8 b(rames,)27
-b(separated)f(b)m(y)f(a)g(min)m(us)f(sign)h(\(\\-"\).)2048
-5390 y Fv(16)2164 5423 y FG(The)f(\(\014xed\))h(v)-5
-b(alue)26 b(for)f(its)g(System)g(attribute)p 0 5516 1512
-4 v 73 5570 a Fs(16)138 5602 y Fr(If)32 b(b)r(oth)f(comp)r(onen)n(t)g
-(F)-6 b(rames)32 b(ha)n(v)n(e)e(blank)h(Domains,)j(then)c(the)h
-(default)h(Domain)g(for)g(the)f(CmpF)-6 b(rame)31 b(is)h(the)f(string)0
-5693 y(\\CMP".)p eop end
-%%Page: 98 108
-TeXDict begin 98 107 bop 0 52 a FG(98)1827 b Fz(11)92
-b(COMPOUND)30 b(FRAMES)h(\(CMPFRAMES\))0 351 y FG(is)f(\\Comp)s(ound".)
-645 318 y Fv(17)759 351 y FG(A)h(CmpF)-8 b(rame)30 b(has)g(no)g
-(further)f(attributes)i(o)m(v)m(er)g(and)f(ab)s(o)m(v)m(e)h(those)g
-(common)g(to)g(all)0 464 y(F)-8 b(rames.)74 b(Ho)m(w)m(ev)m(er,)46
-b(attributes)c(of)g(the)f(t)m(w)m(o)i(comp)s(onen)m(t)e(F)-8
-b(rames)42 b(can)g(b)s(e)e(accessed)j(as)e(if)h(they)f(w)m(ere)0
-577 y(attributes)31 b(of)f(the)h(CmpF)-8 b(rame,)31 b(as)f(describ)s
-(ed)f(b)s(elo)m(w.)0 740 y(F)-8 b(rame)28 b(attributes)g(whic)m(h)g
-(are)f(sp)s(eci\014c)h(to)g(individual)f(axes)h(\(suc)m(h)f(as)h(Lab)s
-(el\(2\),)h(F)-8 b(ormat\(1\),)31 b Fx(etc)5 b FG(\))28
-b(simply)0 853 y(mirror)40 b(the)h(corresp)s(onding)f(axes)h(of)h(the)f
-(relev)-5 b(an)m(t)42 b(comp)s(onen)m(t)f(F)-8 b(rame.)73
-b(That)41 b(is,)j(if)c(the)h(\\Lab)s(el\(2\)")0 966 y(attribute)h(of)g
-(a)f(CmpF)-8 b(rame)41 b(is)h(accessed,)j(the)d(CmpF)-8
-b(rame)41 b(will)h(forw)m(ard)f(the)g(access)i(request)e(to)h(the)0
-1079 y(comp)s(onen)m(t)c(F)-8 b(rame)39 b(whic)m(h)f(con)m(tains)h
-(axis)g(2.)64 b(Th)m(us,)40 b(default)e(v)-5 b(alues)38
-b(for)g(axis)h(attributes)f(will)h(b)s(e)e(the)0 1191
-y(same)31 b(as)f(those)h(pro)m(vided)f(b)m(y)h(the)f(comp)s(onen)m(t)h
-(F)-8 b(rames.)0 1354 y(An)44 b(axis)g(index)g(can)g(optionally)i(b)s
-(e)d(app)s(ended)f(to)j(the)g(name)f(of)g(F)-8 b(rames)45
-b(attributes)f(whic)m(h)g(do)g(not)0 1467 y(normally)36
-b(ha)m(v)m(e)h(suc)m(h)e(an)h(index)f(\(System,)i(Domain,)h(Ep)s(o)s(c)
-m(h,)f(Title,)h Fx(etc)5 b FG(\).)57 b(If)35 b(this)h(is)f(done,)i(the)
-f(access)0 1580 y(request)e(is)f(forw)m(arded)g(to)h(the)g(comp)s(onen)
-m(t)g(F)-8 b(rame)34 b(con)m(taining)h(the)f(indicated)g(axis.)51
-b(F)-8 b(or)34 b(instance,)i(if)d(a)0 1693 y(CmpF)-8
-b(rame)35 b(con)m(tains)i(a)f(Sp)s(ecF)-8 b(rame)36 b(and)f(a)h(SkyF)-8
-b(rame)36 b(in)f(that)h(order,)h(and)e(the)g(axes)i(ha)m(v)m(e)f(not)g
-(b)s(een)0 1806 y(p)s(erm)m(uted,)31 b(then)g(getting)i(the)f(v)-5
-b(alue)31 b(of)h(attribute)g(\\System")g(will)g(return)e(\\Comp)s
-(ound")g(as)i(men)m(tioned)0 1919 y(ab)s(o)m(v)m(e)38
-b(\(that)g(is,)i(the)d(System)g(v)-5 b(alue)37 b(of)h(the)f(CmpF)-8
-b(rame)37 b(as)g(a)h(whole\),)i(whereas)d(getting)h(the)g(v)-5
-b(alue)37 b(of)0 2032 y(attribute)29 b(\\System\(1\)")h(will)f(return)e
-(\\Sp)s(ectral"\(that)j(is,)f(the)f(System)g(v)-5 b(alue)29
-b(of)g(the)f(comp)s(onen)m(t)h(F)-8 b(rame)0 2145 y(con)m(taining)32
-b(axis)f(1)g(|)f(the)g(Sp)s(ecF)-8 b(rame\).)0 2307 y(This)31
-b(tec)m(hnique)i(is)f(not)g(limited)g(to)h(attributes)f(common)h(to)f
-(all)h(F)-8 b(rames.)46 b(F)-8 b(or)33 b(instance,)g(the)f(SkyF)-8
-b(rame)0 2420 y(class)31 b(de\014nes)f(an)h(attribute)g(called)h
-(Equino)m(x)e(whic)m(h)g(is)h(not)g(held)f(b)m(y)h(other)f(classes)i
-(of)f(F)-8 b(rames.)42 b(T)-8 b(o)31 b(set)g(a)0 2533
-y(v)-5 b(alue)29 b(for)g(the)f(Equino)m(x)h(attribute)g(of)g(the)g
-(SkyF)-8 b(rame)29 b(con)m(tained)h(within)e(the)h(ab)s(o)m(v)m(e)h
-(CmpF)-8 b(rame,)29 b(assign)0 2646 y(the)37 b(v)-5 b(alue)38
-b(to)g(the)f(\\Equino)m(x\(2\)")j(attribute)e(of)f(the)g(CmpF)-8
-b(rame.)62 b(Since)37 b(the)g(SkyF)-8 b(rame)38 b(de\014nes)e(b)s(oth)0
-2759 y(axes)e(2)h(and)e(3)h(of)g(the)g(CmpF)-8 b(rame,)35
-b(w)m(e)f(could)g(equiv)-5 b(alen)m(tly)35 b(ha)m(v)m(e)g(set)f(a)h(v)
--5 b(alue)34 b(for)f(\\Equino)m(x\(3\)")j(since)0 2872
-y(this)30 b(w)m(ould)g(also)i(result)e(in)g(the)h(attribute)g(access)g
-(b)s(eing)f(forw)m(arded)g(to)h(the)g(SkyF)-8 b(rame.)0
-3035 y(Finally)g(,)48 b(if)43 b(an)f(attribute)i(is)f(not)g
-(quali\014ed)g(b)m(y)g(a)g(axis)h(index,)h(attempts)f(will)g(b)s(e)e
-(made)h(to)h(access)g(it)0 3147 y(using)31 b(eac)m(h)h(of)f(the)h(CmpF)
--8 b(rame)31 b(axes)h(in)e(turn.)42 b(Using)32 b(the)f(ab)s(o)m(v)m(e)i
-(example)e(of)h(the)f(sp)s(ectral)h(cub)s(e,)e(if)i(an)0
-3260 y(attempt)25 b(w)m(as)g(made)f(to)h(get)h(the)e(v)-5
-b(alue)25 b(of)f(attribute)h(\\Equino)m(x")h(\(with)e(no)g(axis)h
-(index\),)g(eac)m(h)h(axis)f(in)f(turn)0 3373 y(w)m(ould)30
-b(b)s(e)f(used.)40 b(Since)30 b(axis)h(1)f(is)g(con)m(tained)h(within)f
-(a)g(Sp)s(ecF)-8 b(rame,)31 b(the)f(\014rst)f(attempt)j(w)m(ould)d
-(fail)i(since)0 3486 y(the)i(Sp)s(ecF)-8 b(rame)34 b(class)g(do)s(es)e
-(not)i(ha)m(v)m(e)g(an)f(Equino)m(x)g(attribute.)50 b(Ho)m(w)m(ev)m
-(er,)36 b(the)d(second)g(attempt)i(w)m(ould)0 3599 y(succeed)e(b)s
-(ecause)f(axis)h(2)g(is)g(con)m(tained)g(within)f(a)h(SkyF)-8
-b(rame)33 b(whic)m(h)f Fx(do)-5 b(es)41 b FG(ha)m(v)m(e)34
-b(an)e(Equino)m(x)g(attribute.)0 3712 y(Th)m(us)h(the)i(returned)e
-(attribute)i(v)-5 b(alue)35 b(w)m(ould)f(b)s(e)f(that)i(obtained)g
-(from)f(the)g(SkyF)-8 b(rame)35 b(con)m(taining)h(axis)0
-3825 y(2.)k(When)27 b(getting)i(or)f(testing)g(an)g(attribute)g(v)-5
-b(alue,)28 b(the)g(returned)e(v)-5 b(alue)28 b(is)f(determined)g(b)m(y)
-h(the)f Fx(\014rst)37 b FG(axis)0 3938 y(whic)m(h)32
-b(recognises)i(the)f(attribute.)48 b(When)33 b(setting)g(an)g
-(attribute)g(v)-5 b(alue,)34 b Fx(al)5 b(l)43 b FG(axes)33
-b(whic)m(h)f(recognises)i(the)0 4051 y(attribute)g(ha)m(v)m(e)g(the)g
-(attribute)g(v)-5 b(alue)33 b(set)h(to)g(the)g(giv)m(en)g(v)-5
-b(alue.)50 b(Lik)m(ewise,)35 b(when)d(clearing)j(an)e(attribute)0
-4164 y(v)-5 b(alue,)31 b(all)g(axes)g(whic)m(h)f(recognises)i(the)f
-(attribute)g(ha)m(v)m(e)g(the)g(attribute)g(v)-5 b(alue)31
-b(cleared.)p 0 5607 1512 4 v 73 5661 a Fs(17)138 5693
-y Fr(An)n(y)24 b(attempt)i(to)g(c)n(hange)g(the)f(System)g(v)l(alue)g
-(of)i(a)f(CmpF)-6 b(rame)26 b(is)g(ignored.)p eop end
-%%Page: 99 109
-TeXDict begin 99 108 bop 3689 52 a FG(99)0 351 y FA(12)135
-b(An)44 b(In)l(tro)t(duction)h(to)g(Co)t(ordinate)h(System)g(Con)l(v)l
-(ersions)0 604 y FG(In)20 b(this)i(section,)i(w)m(e)e(start)f(to)h(lo)s
-(ok)g(at)g(tec)m(hniques)g(for)f(con)m(v)m(erting)i(b)s(et)m(w)m(een)f
-(di\013eren)m(t)f(co)s(ordinate)h(systems.)0 717 y(A)m(t)37
-b(this)f(stage,)j(the)e(to)s(ols)g(w)m(e)f(ha)m(v)m(e)i(a)m(v)-5
-b(ailable)38 b(are)f(F)-8 b(rames)36 b(\()p Fu(x)p FG(7\),)k(SkyF)-8
-b(rames)36 b(\()p Fu(x)p FG(8\),)j(Sp)s(ecF)-8 b(rames)37
-b(\()p Fu(x)p FG(9\),)0 830 y(TimeF)-8 b(rames)22 b(\()p
-Fu(x)p FG(10\))h(and)d(v)-5 b(arious)21 b(Mappings)g(\()p
-Fu(x)p FG(5\).)39 b(These)21 b(are)g(su\016cien)m(t)h(to)g(allo)m(w)g
-(us)f(to)g(b)s(egin)g(examining)0 943 y(the)31 b(problem,)f(but)f(more)
-i(sophisticated)g(approac)m(hes)g(will)g(also)g(emerge)h(later)f(\()p
-Fu(x)p FG(14.2\).)0 1237 y Fw(12.1)112 b(Con)m(v)m(erting)38
-b(b)s(et)m(w)m(een)g(Celestial)g(Co)s(ordinate)g(Systems)0
-1458 y FG(W)-8 b(e)39 b(b)s(egin)e(b)m(y)h(examining)g(ho)m(w)g(to)h
-(con)m(v)m(ert)g(b)s(et)m(w)m(een)g(t)m(w)m(o)g(celestial)h(co)s
-(ordinate)f(systems)e(represen)m(ted)0 1571 y(b)m(y)32
-b(SkyF)-8 b(rames,)33 b(as)g(this)f(is)g(b)s(oth)g(an)g(illuminating)h
-(and)e(practical)j(example.)47 b(Consider)31 b(the)i(problem)e(of)0
-1684 y(con)m(v)m(erting)h(celestial)h(co)s(ordinates)e(b)s(et)m(w)m
-(een:)111 1947 y(1.)46 b(The)24 b(old)h(FK4)g(system,)h(with)e(no)h(E)f
-(terms,)i(a)f(Besselian)h(ep)s(o)s(c)m(h)e(of)h(1958.0)i(and)d(a)h
-(Besselian)h(equino)m(x)227 2060 y(of)31 b(1960.0.)111
-2248 y(2.)46 b(An)40 b(ecliptic)i(co)s(ordinate)g(system)e(based)g(on)g
-(the)h(mean)f(equino)m(x)h(and)f(ecliptic)i(of)f(Julian)f(ep)s(o)s(c)m
-(h)227 2360 y(2010.5.)0 2623 y(This)24 b(example)h(is)f(arbitrary)g
-(but)g(not)h(completely)h(unrealistic.)39 b(Unless)25
-b(y)m(ou)f(already)h(ha)m(v)m(e)h(exp)s(ertise)f(with)0
-2736 y(suc)m(h)30 b(con)m(v)m(ersions,)i(y)m(ou)f(are)f(unlik)m(ely)h
-(to)g(\014nd)e(it)i(straigh)m(tforw)m(ard.)0 2899 y(Using)43
-b(AST,)g(w)m(e)h(b)s(egin)e(b)m(y)h(creating)i(t)m(w)m(o)f(SkyF)-8
-b(rames)44 b(to)g(represen)m(t)f(these)h(co)s(ordinate)g(systems,)i(as)
-0 3012 y(follo)m(ws:)262 3261 y Ft(INCLUDE)40 b('AST_PAR')262
-3361 y(INTEGER)g(SKYFRAME1,)g(SKYFRAME2,)f(STATUS)262
-3560 y(STATUS)i(=)i(0)262 3759 y(...)262 3959 y(SKYFRAME1)c(=)44
-b(AST_SKYFRAME\()38 b('System=FK4-NO-E)o(,)f(Epoch=B1958,)i
-(Equinox=B1960',)e(STATUS)k(\))262 4058 y(SKYFRAME2)e(=)44
-b(AST_SKYFRAME\()38 b('System=Ecliptic)o(,)f(Equinox=J2010.5',)g
-(STATUS)k(\))0 4321 y FG(Note)30 b(ho)m(w)f(sp)s(ecifying)f(the)h(co)s
-(ordinate)h(systems)f(consists)g(simply)f(of)h(initialising)h(the)f
-(attributes)g(of)g(eac)m(h)0 4434 y(SkyF)-8 b(rame)27
-b(appropriately)-8 b(.)40 b(The)26 b(next)h(step)f(is)h(to)g(\014nd)e
-(a)i(w)m(a)m(y)g(of)g(con)m(v)m(erting)h(b)s(et)m(w)m(een)f(these)g
-(SkyF)-8 b(rames.)0 4547 y(This)30 b(is)g(done)g(using)g(AST)p
-Fy(_)p FG(CONVER)-8 b(T,)29 b(as)i(follo)m(ws:)262 4796
-y Ft(INTEGER)40 b(CVT)262 4996 y(...)262 5195 y(CVT)i(=)h
-(AST_CONVERT\()c(SKYFRAME1,)g(SKYFRAME2,)h(')j(',)f(STATUS)g(\))262
-5295 y(IF)g(\()h(CVT)g(.EQ.)f(AST__NULL)e(\))j(THEN)392
-5394 y(<conversion)c(is)k(not)f(possible>)262 5494 y(ELSE)392
-5593 y(<conversion)d(is)k(possible>)262 5693 y(END)f(IF)p
-eop end
-%%Page: 100 110
-TeXDict begin 100 109 bop 0 52 a FG(100)609 b Fz(12)92
-b(AN)31 b(INTR)m(ODUCTION)e(TO)h(COORDINA)-8 b(TE)30
-b(SYSTEM)f(CONVERSIONS)0 351 y FG(The)h(third)f(argumen)m(t)i(of)g(AST)
-p Fy(_)p FG(CONVER)-8 b(T)29 b(is)h(not)h(used)e(here)i(and)e(should)h
-(b)s(e)f(a)i(blank)f(string.)0 511 y(AST)p Fy(_)p FG(CONVER)-8
-b(T)34 b(will)h(return)f(a)h(n)m(ull)g(result,)h(AST)p
-Fy(__)p FG(NULL)e(\(as)i(de\014ned)d(in)i(the)g(AST)p
-Fy(_)p FG(P)-8 b(AR)35 b(include)0 624 y(\014le\),)41
-b(if)d(con)m(v)m(ersion)h(is)f(not)h(p)s(ossible.)63
-b(In)37 b(this)h(example,)j(con)m(v)m(ersion)f(is)e(p)s(ossible,)i(so)e
-(it)h(will)f(return)f(a)0 736 y(p)s(oin)m(ter)30 b(to)h(a)g(new)f(Ob)5
-b(ject)31 b(that)g(describ)s(es)e(the)i(con)m(v)m(ersion.)0
-896 y(The)f(Ob)5 b(ject)31 b(returned)f(is)h(called)h(a)f(F)-8
-b(rameSet.)43 b(W)-8 b(e)32 b(ha)m(v)m(e)h(not)e(discussed)f(F)-8
-b(rameSets)31 b(y)m(et)h(\()p Fu(x)p FG(13\),)i(but)c(for)0
-1009 y(the)25 b(presen)m(t)h(purp)s(oses)d(w)m(e)j(can)f(consider)h
-(them)f(simply)g(as)g(Ob)5 b(jects)25 b(that)h(can)g(b)s(eha)m(v)m(e)g
-(b)s(oth)e(as)i(Mappings)0 1122 y(and)k(as)g(F)-8 b(rames.)42
-b(It)30 b(is)g(the)g(F)-8 b(rameSet's)32 b(b)s(eha)m(viour)e(as)g(a)h
-(Mapping)f(in)g(whic)m(h)g(w)m(e)g(are)h(mainly)f(in)m(terested)0
-1235 y(here,)d(b)s(ecause)g(the)f(Mapping)h(it)g(implemen)m(ts)g(is)f
-(the)h(one)f(w)m(e)h(require|)p Fx(i.e.)f FG(it)h(con)m(v)m(erts)g(b)s
-(et)m(w)m(een)h(the)e(t)m(w)m(o)0 1347 y(celestial)33
-b(co)s(ordinate)e(systems)g(\()p Fu(x)p FG(14.1\).)0
-1507 y(F)-8 b(or)30 b(example,)g(if)f(ALPHA1)h(and)e(DEL)-8
-b(T)g(A1)31 b(are)e(t)m(w)m(o)i(arra)m(ys)e(con)m(taining)i(the)e
-(longitude)h(and)e(latitude,)j(in)0 1620 y(radians,)22
-b(of)f(N)f(p)s(oin)m(ts)g(on)g(the)h(sky)f(in)g(the)g(original)i(co)s
-(ordinate)f(system)f(\(corresp)s(onding)g(to)h(SKYFRAME1\),)0
-1733 y(then)35 b(they)g(could)h(b)s(e)e(con)m(v)m(erted)j(in)m(to)f
-(the)g(new)e(co)s(ordinate)j(system)e(\(represen)m(ted)h(b)m(y)f
-(SKYFRAME2\))0 1846 y(as)c(follo)m(ws:)262 2081 y Ft(INTEGER)40
-b(N)262 2181 y(DOUBLE)h(PRECISION)e(ALPHA1\()i(N)i(\),)g(DELTA1\()e(N)i
-(\))262 2280 y(DOUBLE)e(PRECISION)e(ALPHA2\()i(N)i(\),)g(DELTA2\()e(N)i
-(\))262 2480 y(...)262 2679 y(CALL)e(AST_TRAN2\()f(CVT,)i(N,)h(ALPHA1,)
-d(DELTA1,)h(.TRUE.,)g(ALPHA2,)f(DELTA2,)h(STATUS)g(\))0
-2928 y FG(The)30 b(new)g(co)s(ordinates)i(are)f(returned)e
-Fx(via)i FG(the)g(ALPHA2)g(and)f(DEL)-8 b(T)g(A2)32 b(arra)m(ys.)42
-b(T)-8 b(o)31 b(transform)f(co)s(ordi-)0 3041 y(nates)e(in)e(the)i(opp)
-s(osite)f(direction,)i(w)m(e)e(simply)g(in)m(v)m(ert)h(the)f(5th)g
-(\(logical\))k(argumen)m(t)c(to)h(AST)p Fy(_)p FG(TRAN2,)f(as)0
-3154 y(follo)m(ws:)262 3389 y Ft(CALL)41 b(AST_TRAN2\()f(CVT,)i(N,)h
-(ALPHA2,)d(DELTA2,)h(.FALSE.,)f(ALPHA1,)h(DELTA1,)g(STATUS)g(\))0
-3638 y FG(The)e(F)-8 b(rameSet)40 b(returned)f(b)m(y)g(AST)p
-Fy(_)p FG(CONVER)-8 b(T)38 b(also)i(con)m(tains)h(information)f(ab)s
-(out)f(the)g(SkyF)-8 b(rames)0 3751 y(used)24 b(in)h(the)g(con)m(v)m
-(ersion)h(\()p Fu(x)p FG(14.1\).)42 b(As)25 b(w)m(e)g(men)m(tioned)h
-(ab)s(o)m(v)m(e,)h(a)e(F)-8 b(rameSet)27 b(ma)m(y)e(b)s(e)f(used)h(as)g
-(a)g(F)-8 b(rame)26 b(and)0 3864 y(in)20 b(this)g(case)h(it)g(b)s(eha)m
-(v)m(es)g(lik)m(e)h(the)e(\\destination")i(F)-8 b(rame)21
-b(used)f(in)g(the)g(con)m(v)m(ersion)i(\()p Fx(i.e.)e
-FG(lik)m(e)h(SKYFRAME2\).)0 3977 y(W)-8 b(e)35 b(could)e(therefore)h
-(use)f(the)g(CVT)g(F)-8 b(rameSet)34 b(to)g(calculate)i(the)e(distance)
-g(b)s(et)m(w)m(een)g(t)m(w)m(o)g(p)s(oin)m(ts)f(\(with)0
-4090 y(co)s(ordinates)e(in)f(radians\))g(in)g(the)h(destination)g(co)s
-(ordinate)g(system,)g(using)f(AST)p Fy(_)p FG(DIST)-8
-b(ANCE:)262 4325 y Ft(DOUBLE)41 b(PRECISION)e(DISTANCE,)h(POINT1\()h(2)
-i(\),)g(POINT2\()e(2)i(\))262 4524 y(...)262 4724 y(DISTANCE)d(=)j
-(AST_DISTANCE\()38 b(CVT,)k(POINT1,)f(POINT2,)f(STATUS)i(\))0
-4973 y FG(and)30 b(the)g(result)h(w)m(ould)f(b)s(e)g(the)g(same)h(as)f
-(if)h(the)f(SKYFRAME2)h(SkyF)-8 b(rame)31 b(had)f(b)s(een)f(used.)0
-5132 y(Another)35 b(w)m(a)m(y)i(to)f(see)g(ho)m(w)f(the)h(F)-8
-b(rameSet)37 b(pro)s(duced)c(b)m(y)j(astCon)m(v)m(ert)h(retains)e
-(information)h(ab)s(out)f(the)0 5245 y(co)s(ordinate)29
-b(systems)g(in)m(v)m(olv)m(ed)h(is)f(to)g(set)g(its)g(Rep)s(ort)f
-(attribute)i(\(inherited)e(from)g(the)h(Mapping)g(class\))g(so)0
-5358 y(that)i(it)g(displa)m(ys)f(the)h(co)s(ordinates)g(b)s(efore)f
-(and)g(after)h(con)m(v)m(ersion)g(\()p Fu(x)p FG(4.8\):)262
-5593 y Ft(CALL)41 b(AST_SET\()g(CVT,)h('Report=1',)d(STATUS)i(\))262
-5693 y(CALL)g(AST_TRAN2\()f(CVT,)i(N,)h(ALPHA1,)d(DELTA1,)h(.TRUE.,)g
-(ALPHA2,)f(DELTA2,)h(STATUS)g(\))p eop end
-%%Page: 101 111
-TeXDict begin 101 110 bop 0 52 a Fz(12.2)93 b(Con)m(v)m(erting)31
-b(b)s(et)m(w)m(een)g(Sp)s(ectral)f(Co)s(ordinate)h(Systems)1421
-b FG(101)0 351 y(The)30 b(output)g(from)g(this)g(migh)m(t)h(lo)s(ok)g
-(lik)m(e)h(the)e(follo)m(wing:)227 622 y Fy(\(2:06:03.0,)45
-b(34:22:39\))g(-->)i(\(42.1087,)e(20.2717\))227 735 y(\(2:08:20.6,)g
-(35:31:24\))g(-->)i(\(43.0197,)e(21.1705\))227 847 y(\(2:10:38.1,)g
-(36:40:09\))g(-->)i(\(43.9295,)e(22.0716\))227 960 y(\(2:12:55.6,)g
-(37:48:55\))g(-->)i(\(44.8382,)e(22.9753\))227 1073 y(\(2:15:13.1,)g
-(38:57:40\))g(-->)i(\(45.7459,)e(23.8814\))227 1186 y(\(2:17:30.6,)g
-(40:06:25\))g(-->)i(\(46.6528,)e(24.7901\))227 1299 y(\(2:19:48.1,)g
-(41:15:11\))g(-->)i(\(47.5589,)e(25.7013\))227 1412 y(\(2:22:05.6,)g
-(42:23:56\))g(-->)i(\(48.4644,)e(26.6149\))227 1525 y(\(2:24:23.1,)g
-(43:32:41\))g(-->)i(\(49.3695,)e(27.5311\))227 1638 y(\(2:26:40.6,)g
-(44:41:27\))g(-->)i(\(50.2742,)e(28.4499\))0 1908 y FG(Here,)i(w)m(e)d
-(see)g(that)g(the)g(input)e(FK4)i(equatorial)h(co)s(ordinate)f(v)-5
-b(alues)44 b(\(giv)m(en)g(in)f(radians\))h(ha)m(v)m(e)g(b)s(een)0
-2021 y(formatted)24 b(automatically)i(in)e(sexagesimal)h(notation)g
-(using)e(the)h(con)m(v)m(en)m(tional)i(hours)c(for)i(righ)m(t)g
-(ascension)0 2134 y(and)35 b(degrees)i(for)f(declination.)58
-b(Con)m(v)m(ersely)-8 b(,)39 b(the)d(output)g(ecliptic)i(co)s
-(ordinates)e(are)h(sho)m(wn)e(in)g(decimal)0 2247 y(degrees,)25
-b(as)f(is)f(con)m(v)m(en)m(tional)j(for)d(ecliptic)i(co)s(ordinates.)39
-b(Both)24 b(are)f(displa)m(y)m(ed)h(using)f(the)g(default)g(precision)0
-2360 y(of)31 b(7)f(digits.)421 2327 y Fv(18)0 2525 y
-FG(In)k(fact,)j(the)f(CVT)e(F)-8 b(rameSet)36 b(has)f(access)h(to)g
-(all)f(the)h(information)f(in)f(the)h(original)i(SkyF)-8
-b(rames)35 b(whic)m(h)0 2638 y(w)m(ere)29 b(passed)e(to)i(AST)p
-Fy(_)p FG(CONVER)-8 b(T.)27 b(If)h(y)m(ou)g(had)g(set)h(a)f(new)g
-(Digits)h(attribute)g(v)-5 b(alue)29 b(for)f(either)g(of)h(these,)0
-2751 y(the)h(formatting)g(ab)s(o)m(v)m(e)h(w)m(ould)f(re\015ect)g(the)g
-(di\013eren)m(t)g(precision)g(y)m(ou)g(requested)g(b)m(y)f(displa)m
-(ying)h(a)g(greater)0 2864 y(or)g(smaller)h(n)m(um)m(b)s(er)e(of)i
-(digits.)0 3166 y Fw(12.2)112 b(Con)m(v)m(erting)38 b(b)s(et)m(w)m(een)
-g(Sp)s(ectral)f(Co)s(ordinate)i(Systems)0 3391 y FG(The)44
-b(principles)h(describ)s(ed)e(in)i(the)g(previous)f(section)i(for)f
-(con)m(v)m(erting)i(b)s(et)m(w)m(een)e(celestial)j(co)s(ordinate)0
-3504 y(systems)21 b(also)h(apply)f(to)h(the)f(task)h(of)f(con)m(v)m
-(erting)i(b)s(et)m(w)m(een)f(sp)s(ectral)g(co)s(ordinate)g(systems.)37
-b(As)21 b(an)h(example,)0 3617 y(let's)28 b(lo)s(ok)f(at)h(ho)m(w)f(w)m
-(e)g(migh)m(t)h(con)m(v)m(ert)g(b)s(et)m(w)m(een)g(frequency)e
-(measured)g(in)h Fp(GH)7 b(z)31 b FG(as)c(measured)g(in)f(the)h(rest)0
-3730 y(frame)22 b(of)g(the)g(telescop)s(e,)j(and)c(radio)h(v)m(elo)s
-(cit)m(y)i(measured)d(in)h Fp(k)s(m=s)g FG(measured)f(with)g(resp)s
-(ect)h(the)g(kinematic)0 3843 y(Lo)s(cal)31 b(Standard)e(of)i(Rest.)0
-4008 y(First)i(w)m(e)g(create)h(a)f(default)g(Sp)s(ecF)-8
-b(rame,)34 b(and)e(then)h(set)g(its)g(attributes)g(to)g(describ)s(e)g
-(the)f(required)g(radio)0 4121 y(v)m(elo)s(cit)m(y)d(system)e(\(this)g
-(is)g(sligh)m(tly)h(more)f(con)m(v)m(enien)m(t,)j(giv)m(en)e(the)f
-(relativ)m(ely)i(large)f(n)m(um)m(b)s(er)e(of)h(attributes,)0
-4234 y(than)g(sp)s(ecifying)f(the)i(attribute)f(v)-5
-b(alues)28 b(in)e(a)i(single)f(string)g(suc)m(h)g(as)g(w)m(ould)g(b)s
-(e)f(passed)g(to)i(the)f(Sp)s(ecF)-8 b(rame)0 4347 y(constructor\).)49
-b(W)-8 b(e)34 b(then)f(tak)m(e)h(a)f(cop)m(y)h(of)f(this)g(Sp)s(ecF)-8
-b(rame,)34 b(and)e(c)m(hange)i(the)f(attribute)h(v)-5
-b(alues)33 b(so)g(that)0 4460 y(the)d(cop)m(y)g(describ)s(es)f(the)h
-(original)h(frequency)e(system)h(\(mo)s(difying)f(a)i(cop)m(y)-8
-b(,)31 b(rather)e(than)h(creating)h(a)f(new)0 4573 y(Sp)s(ecF)-8
-b(rame)32 b(from)g(scratc)m(h,)h(a)m(v)m(oids)h(the)e(need)g(to)h(sp)s
-(ecify)e(the)h(ep)s(o)s(c)m(h,)h(reference)f(p)s(osition,)h
-Fx(etc)k FG(a)32 b(second)0 4686 y(time)f(since)g(they)f(are)h(all)g
-(inherited)f(b)m(y)h(the)f(cop)m(y\):)262 4943 y Ft(INCLUDE)40
-b('AST_PAR')262 5043 y(INTEGER)g(SPECFRAME1,)f(SPECFRAME2,)g(STATUS)262
-5242 y(STATUS)i(=)i(0)262 5441 y(...)p 0 5607 1512 4
-v 73 5661 a Fs(18)138 5693 y Fr(The)26 b(leading)h(digit)f(is)g(zero)g
-(and)g(is)g(therefore)g(not)g(seen)g(in)f(this)h(particular)h(example.)
-p eop end
-%%Page: 102 112
-TeXDict begin 102 111 bop 0 52 a FG(102)609 b Fz(12)92
-b(AN)31 b(INTR)m(ODUCTION)e(TO)h(COORDINA)-8 b(TE)30
-b(SYSTEM)f(CONVERSIONS)262 351 y Ft(SPECFRAME1)39 b(=)k
-(AST_SPECFRAME\()38 b(')43 b(',)g(STATUS)e(\))262 451
-y(CALL)g(AST_SETC\()f(SPECFRAME1,)f('System=vradio',)e(STATUS)k(\))262
-551 y(CALL)g(AST_SETC\()f(SPECFRAME1,)f('Unit=km/s',)g(STATUS)i(\))262
-650 y(CALL)g(AST_SETC\()f(SPECFRAME1,)f('Epoch=1996-Oct-2)e
-(12:13:56.985',)218 750 y(:)653 b(STATUS)41 b(\))262
-849 y(CALL)g(AST_SETC\()f(SPECFRAME1,)f('ObsLon=W155:28:1)o(8')o(,)f
-(STATUS)j(\))262 949 y(CALL)g(AST_SETC\()f(SPECFRAME1,)f
-('ObsLat=N19:49:34)o(',)e(STATUS)k(\))262 1049 y(CALL)g(AST_SETC\()f
-(SPECFRAME1,)f('RefRA=18:14:50.6)o(',)e(STATUS)k(\))262
-1148 y(CALL)g(AST_SETC\()f(SPECFRAME1,)f('RefDec=-4:40:49')o(,)e
-(STATUS)42 b(\))262 1248 y(CALL)f(AST_SETC\()f(SPECFRAME1,)f
-('RestFreq=230.538)e(GHz',)k(STATUS)h(\))262 1348 y(CALL)f(AST_SETC\()f
-(SPECFRAME1,)f('StdOfRest=LSRK',)e(STATUS)k(\))262 1547
-y(SPECFRAME2)e(=)k(AST_COPY\()d(SPECFRAME1,)f(STATUS)i(\))262
-1646 y(CALL)g(AST_SETC\()f(SPECFRAME1,)f('System=freq',)f(STATUS)j(\))
-262 1746 y(CALL)g(AST_SETC\()f(SPECFRAME1,)f('Unit=GHz',)g(STATUS)i(\))
-262 1846 y(CALL)g(AST_SETC\()f(SPECFRAME1,)f('StdOfRest=Topoce)o(nt)o
-(ric)o(',)e(STATUS)k(\))0 2199 y FG(Note,)j(the)c(fact)h(that)f(a)h(Sp)
-s(ecF)-8 b(rame)40 b(has)g(only)g(a)g(single)g(axis)h(means)f(that)g(w)
-m(e)h(w)m(ere)f(able)g(to)h(refer)f(to)0 2312 y(the)33
-b(Unit)g(attribute)h(without)f(an)f(axis)i(index.)47
-b(The)33 b(other)g(attributes)g(are:)46 b(the)33 b(time)h(of)f(of)g
-(observ)-5 b(ation)0 2425 y(\(Ep)s(o)s(c)m(h\),)43 b(the)d
-(geographical)i(p)s(osition)e(of)h(the)f(telescop)s(e)i(\(ObsLat)e(&)g
-(ObsLon\),)h(the)g(p)s(osition)f(of)g(the)0 2538 y(source)c(on)f(the)h
-(sky)f(\(RefRA)h(&)f(RefDec\),)k(the)c(rest)h(frequency)f(\(RestF)-8
-b(req\))37 b(and)e(the)h(standard)f(of)g(rest)0 2651
-y(\(StdOfRest\).)0 2811 y(The)24 b(next)h(step)g(is)f(to)i(\014nd)d(a)i
-(w)m(a)m(y)g(of)g(con)m(v)m(erting)h(b)s(et)m(w)m(een)g(these)f(Sp)s
-(ecF)-8 b(rames.)39 b(W)-8 b(e)26 b(use)e(exactly)i(the)f(same)0
-2924 y(co)s(de)30 b(that)h(w)m(e)f(did)f(in)h(the)g(previous)f(section)
-j(where)d(w)m(e)h(w)m(ere)h(con)m(v)m(erting)h(b)s(et)m(w)m(een)e
-(celestial)j(co)s(ordinate)0 3037 y(systems:)262 3278
-y Ft(INTEGER)40 b(CVT)262 3477 y(...)262 3676 y(CVT)i(=)h
-(AST_CONVERT\()c(SPECFRAME1,)g(SPECFRAME2,)g(')k(',)g(STATUS)e(\))262
-3776 y(IF)h(\()h(CVT)g(.EQ.)f(AST__NULL)e(\))j(THEN)392
-3876 y(<conversion)c(is)k(not)f(possible>)262 3975 y(ELSE)392
-4075 y(<conversion)d(is)k(possible>)262 4174 y(END)f(IF)0
-4428 y FG(A)29 b(b)s(efore,)h(this)f(will)h(giv)m(e)h(us)d(a)i(F)-8
-b(rameSet)30 b(\(assuming)g(con)m(v)m(ersion)g(is)g(p)s(ossible,)f
-(whic)m(h)g(should)f(alw)m(a)m(ys)j(b)s(e)0 4541 y(the)36
-b(case)i(for)d(our)h(example\),)j(and)c(w)m(e)i(can)f(use)g(the)h(F)-8
-b(rameSet)37 b(to)g(con)m(v)m(ert)h(b)s(et)m(w)m(een)e(the)h(t)m(w)m(o)
-g(sp)s(ectral)0 4654 y(co)s(ordinate)28 b(systems.)39
-b(W)-8 b(e)28 b(use)f(AST)p Fy(_)p FG(TRAN1)f(in)h(place)h(of)f(AST)p
-Fy(_)p FG(TRAN2)f(since)h(a)h(Sp)s(ecF)-8 b(rame)27 b(has)f(only)0
-4767 y(one)31 b(axis)g(\(unlik)m(e)g(a)f(SkyF)-8 b(rame)31
-b(whic)m(h)f(has)g(t)m(w)m(o\).)0 4928 y(F)-8 b(or)45
-b(example,)j(if)c(FR)m(Q)g(is)g(an)g(arra)m(y)h(con)m(taining)g(the)f
-(observ)m(ed)g(frequency)-8 b(,)48 b(in)c(GHz,)k(of)c(N)g(sp)s(ectral)0
-5041 y(c)m(hannels)35 b(\(describ)s(e)f(b)m(y)g(SPECFRAME1\),)i(then)e
-(they)h(could)f(b)s(e)g(con)m(v)m(erted)i(in)m(to)f(the)g(new)f(co)s
-(ordinate)0 5154 y(system)d(\(represen)m(ted)f(b)m(y)g(SPECFRAME2\))h
-(as)g(follo)m(ws:)262 5394 y Ft(INTEGER)40 b(N)262 5494
-y(DOUBLE)h(PRECISION)e(FRQ\()j(N)i(\))262 5593 y(DOUBLE)d(PRECISION)e
-(VEL\()j(N)i(\))p eop end
-%%Page: 103 113
-TeXDict begin 103 112 bop 0 52 a Fz(12.3)93 b(Con)m(v)m(erting)31
-b(b)s(et)m(w)m(een)g(Time)f(Co)s(ordinate)h(Systems)1540
-b FG(103)262 351 y Ft(...)262 551 y(CALL)41 b(AST_TRAN1\()f(CVT,)i(N,)h
-(FRQ,)f(.TRUE.,)e(VEL,)i(STATUS)f(\))0 797 y FG(The)30
-b(radio)g(v)m(elo)s(cit)m(y)j(v)-5 b(alues)31 b(are)g(returned)e(in)h
-(the)h(VEL)f(arra)m(y)-8 b(.)0 1084 y Fw(12.3)112 b(Con)m(v)m(erting)38
-b(b)s(et)m(w)m(een)g(Time)g(Co)s(ordinate)g(Systems)0
-1301 y FG(All)d(the)f(principles)f(outlined)h(in)g(the)g(previous)f
-(section)i(ab)s(out)f(aligning)h(sp)s(ectral)f(co)s(cordinate)h
-(systems)0 1414 y(\(Sp)s(ecF)-8 b(rames\))26 b(can)g(b)s(e)f(applied)g
-(directly)i(to)f(the)g(problem)e(of)i(aligning)h(time)f(co)s(ordinate)g
-(systems)g(\(Time-)0 1527 y(F)-8 b(rames\).)0 1814 y
-Fw(12.4)112 b(Handling)39 b(SkyF)-9 b(rame)39 b(Axis)e(P)m(erm)m
-(utations)0 2032 y FG(W)-8 b(e)25 b(can)e(illustrate)i(an)e(imp)s
-(ortan)m(t)h(p)s(oin)m(t)f(if)g(w)m(e)h(sw)m(ap)g(the)f(axis)h(order)f
-(of)g(either)h(SkyF)-8 b(rame)24 b(in)f(the)h(example)0
-2144 y(ab)s(o)m(v)m(e)33 b(\()p Fu(x)p FG(12.1\))h(b)s(efore)e(iden)m
-(tifying)g(the)g(con)m(v)m(ersion.)46 b(Let's)33 b(assume)e(w)m(e)h
-(use)g(AST)p Fy(_)p FG(PERMAXES)e(\()p Fu(x)p FG(7.9\))0
-2257 y(to)h(do)f(this)h(to)g(the)f(second)h(SkyF)-8 b(rame,)31
-b(b)s(efore)f(applying)g(AST)p Fy(_)p FG(CONVER)-8 b(T,)29
-b(as)i(follo)m(ws:)262 2490 y Ft(INTEGER)40 b(PERM\()i(2)h(\))262
-2590 y(DATA)e(PERM)h(/)i(2,)e(1)h(/)262 2789 y(...)262
-2988 y(CALL)e(AST_PERMAXES\()e(SKYFRAME2,)g(PERM,)j(STATUS)f(\))262
-3088 y(CVT)h(=)h(AST_CONVERT\()c(SKYFRAME1,)g(SKYFRAME2,)h(')j(',)f
-(STATUS)g(\))0 3334 y FG(No)m(w,)31 b(the)g(destination)g(SkyF)-8
-b(rame)31 b(system)f(no)h(longer)g(represen)m(ts)f(the)g(co)s(ordinate)
-i(system:)227 3580 y(\(ecliptic)h(longitude,)e(ecliptic)h(latitude\))0
-3826 y(but)e(instead)g(represen)m(ts)h(the)f(transp)s(osed)f(system:)
-227 4072 y(\(ecliptic)k(latitude,)e(ecliptic)i(longitude\))0
-4318 y(As)21 b(a)g(consequence,)j(when)c(w)m(e)h(use)g(the)g(F)-8
-b(rameSet)22 b(returned)e(b)m(y)h(AST)p Fy(_)p FG(CONVER)-8
-b(T)19 b(to)j(apply)e(a)i(co)s(ordinate)0 4431 y(transformation,)31
-b(w)m(e)g(obtain)g(something)f(lik)m(e)i(the)f(follo)m(wing:)227
-4677 y Fy(\(2:06:03.0,)45 b(34:22:39\))g(-->)i(\(20.2717,)e(42.1087\))
-227 4790 y(\(2:08:20.6,)g(35:31:24\))g(-->)i(\(21.1705,)e(43.0197\))227
-4903 y(\(2:10:38.1,)g(36:40:09\))g(-->)i(\(22.0716,)e(43.9295\))227
-5016 y(\(2:12:55.6,)g(37:48:55\))g(-->)i(\(22.9753,)e(44.8382\))227
-5128 y(\(2:15:13.1,)g(38:57:40\))g(-->)i(\(23.8814,)e(45.7459\))227
-5241 y(\(2:17:30.6,)g(40:06:25\))g(-->)i(\(24.7901,)e(46.6528\))227
-5354 y(\(2:19:48.1,)g(41:15:11\))g(-->)i(\(25.7013,)e(47.5589\))227
-5467 y(\(2:22:05.6,)g(42:23:56\))g(-->)i(\(26.6149,)e(48.4644\))227
-5580 y(\(2:24:23.1,)g(43:32:41\))g(-->)i(\(27.5311,)e(49.3695\))227
-5693 y(\(2:26:40.6,)g(44:41:27\))g(-->)i(\(28.4499,)e(50.2742\))p
-eop end
-%%Page: 104 114
-TeXDict begin 104 113 bop 0 52 a FG(104)609 b Fz(12)92
-b(AN)31 b(INTR)m(ODUCTION)e(TO)h(COORDINA)-8 b(TE)30
-b(SYSTEM)f(CONVERSIONS)0 351 y FG(When)g(compared)h(to)g(the)f
-(original)i(\()p Fu(x)p FG(12.1\),)i(the)c(output)g(co)s(ordinate)h
-(order)f(has)h(b)s(een)e(sw)m(app)s(ed)g(to)j(com-)0
-464 y(p)s(ensate)f(for)g(the)h(di\013eren)m(t)g(destination)g(SkyF)-8
-b(rame)31 b(axis)g(order.)0 624 y(In)20 b(all,)j(there)e(are)f(four)g
-(p)s(ossible)g(axis)h(com)m(binations,)j(corresp)s(onding)19
-b(to)i(t)m(w)m(o)h(p)s(ossible)e(axis)g(orders)g(for)g(eac)m(h)0
-737 y(of)32 b(the)g(source)g(and)g(destination)h(SkyF)-8
-b(rames,)33 b(and)e(AST)p Fy(_)p FG(CONVER)-8 b(T)31
-b(will)h(con)m(v)m(ert)h(correctly)h(b)s(et)m(w)m(een)0
-850 y(an)m(y)g(of)g(these.)52 b(The)33 b(p)s(oin)m(t)h(to)g(note)h(is)e
-(that)i(a)f(SkyF)-8 b(rame)34 b(con)m(tains)h(kno)m(wledge)g(ab)s(out)f
-(ho)m(w)f(to)i(con)m(v)m(ert)0 963 y(to)g(and)e(from)g(other)h(SkyF)-8
-b(rames.)52 b(Since)34 b(its)g(t)m(w)m(o)h(axes)g(\(longitude)g(and)e
-(latitude\))i(are)f(distinguishable,)0 1076 y(the)d(con)m(v)m(ersion)g
-(is)g(able)g(to)g(tak)m(e)h(accoun)m(t)g(of)e(the)h(axis)f(order.)0
-1236 y(If)j(y)m(ou)h(need)f(to)h(iden)m(tify)g(the)g(axes)g(of)f(a)h
-(SkyF)-8 b(rame)34 b(explicitly)-8 b(,)36 b(taking)f(in)m(to)f(accoun)m
-(t)h(an)m(y)f(axis)f(p)s(erm)m(u-)0 1348 y(tations,)e(the)f(LatAxis)h
-(and)e(LonAxis)h(attributes)g(can)g(b)s(e)f(used.)40
-b(These)29 b(are)h(read-only)g(attributes)h(whic)m(h)0
-1461 y(giv)m(e)h(the)e(indices)h(of)f(the)h(latitude)g(and)f(longitude)
-h(axes)g(resp)s(ectiv)m(ely)-8 b(.)0 1750 y Fw(12.5)112
-b(Con)m(v)m(erting)38 b(Bet)m(w)m(een)f(F)-9 b(rames)0
-1969 y FG(Ha)m(ving)39 b(seen)f(ho)m(w)h(clev)m(er)g(SkyF)-8
-b(rames)38 b(are)h(\()p Fu(x)p FG(12.1)h(and)e Fu(x)p
-FG(12.4\),)k(w)m(e)d(will)f(next)g(examine)h(ho)m(w)f(dum)m(b)f(a)0
-2082 y(basic)28 b(F)-8 b(rame)29 b(can)f(b)s(e)f(in)h(comparison.)40
-b(F)-8 b(or)28 b(example,)i(if)d(w)m(e)i(create)g(t)m(w)m(o)g
-(2-dimensional)g(F)-8 b(rames)29 b(and)e(use)0 2195 y(AST)p
-Fy(_)p FG(CONVER)-8 b(T)29 b(to)i(deriv)m(e)g(a)g(con)m(v)m(ersion)g(b)
-s(et)m(w)m(een)g(them,)g(as)g(follo)m(ws:)262 2433 y
-Ft(INTEGER)40 b(FRAME1,)h(FRAME2)262 2632 y(...)262 2831
-y(FRAME1)g(=)i(AST_FRAME\()c(2,)k(')g(',)g(STATUS)e(\))262
-2931 y(FRAME2)g(=)i(AST_FRAME\()c(2,)k(')g(',)g(STATUS)e(\))262
-3030 y(CVT)h(=)h(AST_CONVERT\()c(FRAME1,)h(FRAME2,)h(')i(',)g(STATUS)e
-(\))0 3281 y FG(then)30 b(the)h(co)s(ordinate)g(transformation)g(whic)m
-(h)f(the)g(\\cvt")i(F)-8 b(rameSet)32 b(p)s(erforms)d(will)h(b)s(e)g
-(as)h(follo)m(ws:)227 3532 y Fy(\(1,)47 b(2\))g(-->)g(\(1,)g(2\))227
-3645 y(\(2,)g(4\))g(-->)g(\(2,)g(4\))227 3758 y(\(3,)g(6\))g(-->)g
-(\(3,)g(6\))227 3871 y(\(4,)g(8\))g(-->)g(\(4,)g(8\))227
-3984 y(\(5,)g(10\))g(-->)g(\(5,)g(10\))0 4235 y FG(This)31
-b(is)i(an)f(iden)m(tit)m(y)i(transformation,)f(exactly)h(the)e(same)h
-(as)g(a)f(UnitMap)h(\()p Fu(x)p FG(5.9\).)49 b(Ev)m(en)32
-b(if)g(w)m(e)h(p)s(erm)m(ute)0 4348 y(the)i(axis)h(order)e(of)h(our)g
-(F)-8 b(rames,)37 b(as)e(w)m(e)h(did)e(ab)s(o)m(v)m(e)i(\()p
-Fu(x)p FG(12.4\),)j(w)m(e)d(will)f(fare)g(no)g(b)s(etter.)55
-b(The)34 b(con)m(v)m(ersion)0 4461 y(b)s(et)m(w)m(een)d(our)f(t)m(w)m
-(o)i(basic)e(F)-8 b(rames)32 b(will)e(alw)m(a)m(ys)i(b)s(e)e(an)g(iden)
-m(tit)m(y)i(transformation.)0 4621 y(The)k(reason)h(for)f(this)h(is)f
-(that,)j(unlik)m(e)e(a)g(SkyF)-8 b(rame,)39 b(all)e(basic)g(F)-8
-b(rames)37 b(start)g(life)h(the)e(same)h(and)f(ha)m(v)m(e)0
-4734 y(axes)h(that)f(are)g(indistinguishable.)57 b(Therefore,)38
-b(p)s(erm)m(uting)d(their)h(axes)g(do)s(esn't)g(mak)m(e)h(them)f(lo)s
-(ok)g(an)m(y)0 4847 y(di\013eren)m(t|they)31 b(still)g(represen)m(t)g
-(the)f(same)h(co)s(ordinate)g(system.)0 5136 y Fw(12.6)112
-b(The)38 b(Choice)g(of)f(Alignmen)m(t)h(System)0 5354
-y FG(In)25 b(practice,)j(when)c(AST)h(is)g(ask)m(ed)h(to)g(\014nd)e(a)i
-(con)m(v)m(ersion)g(b)s(et)m(w)m(een)g(t)m(w)m(o)h(F)-8
-b(rames)26 b(describing)f(t)m(w)m(o)i(di\013eren)m(t)0
-5467 y(co)s(ordinate)40 b(systems)g(on)f(a)h(giv)m(en)g(ph)m(ysical)g
-(domain,)i(it)e(uses)f(an)g(in)m(termediate)i(\\alignmen)m(t")h
-(system.)0 5580 y(Th)m(us,)28 b(when)g(\014nding)g(a)h(con)m(v)m
-(ersion)h(from)e(system)h(A)g(to)h(system)f(B,)g(AST)f(\014rst)g
-(\014nds)f(the)i(Mapping)g(from)0 5693 y(system)g(A)f(to)i(some)e
-(alignmen)m(t)i(system,)g(system)e(C,)h(and)f(then)g(\014nds)f(the)h
-(Mapping)h(from)f(this)g(system)h(C)p eop end
-%%Page: 105 115
-TeXDict begin 105 114 bop 0 52 a Fz(12.6)93 b(The)29
-b(Choice)i(of)g(Alignmen)m(t)g(System)2072 b FG(105)0
-351 y(to)32 b(the)g(required)f(system)g(B.)i(It)e(\014nally)h
-(concatenates)i(these)e(t)m(w)m(o)g(Mappings)g(to)g(get)h(the)e
-(Mapping)h(from)0 464 y(system)f(A)f(to)h(system)g(B.)0
-627 y(One)23 b(adv)-5 b(an)m(tage)26 b(of)e(this)f(is)h(that)g(it)g
-(cuts)g(do)m(wn)f(the)h(n)m(um)m(b)s(er)e(of)i(con)m(v)m(ersion)h
-(algorithms)f(required.)38 b(If)23 b(there)0 740 y(are)31
-b Fp(N)41 b FG(di\013eren)m(t)32 b(Systems)e(whic)m(h)h(ma)m(y)h(b)s(e)
-e(used)g(to)i(describ)s(e)e(p)s(ositions)h(within)g(the)g(Domain,)h
-(then)f(this)0 853 y(approac)m(h)k(requires)e(ab)s(out)i(2)23
-b Fu(\003)g Fp(N)44 b FG(con)m(v)m(ersion)36 b(algorithms)f(to)g(b)s(e)
-f(written.)53 b(The)33 b(alternativ)m(e)k(approac)m(h)0
-966 y(of)29 b(going)i(directly)f(from)e(system)i(A)f(to)h(system)f(B)h
-(w)m(ould)f(require)g(ab)s(out)g Fp(N)e Fu(\003)19 b
-Fp(N)39 b FG(con)m(v)m(ersion)30 b(algorithms.)0 1128
-y(In)c(addition,)i(the)g(use)e(of)h(an)g(in)m(termediate)i(alignmen)m
-(t)f(system)f(highligh)m(ts)h(the)f(nature)g(of)g(the)g(con)m(v)m
-(ersion)0 1241 y(pro)s(cess.)57 b(What)37 b(do)f(w)m(e)h(mean)f(b)m(y)g
-(sa)m(ying)h(that)f(a)h(Mapping)f(\\con)m(v)m(erts)i(a)e(p)s(osition)g
-(in)g(one)h(co)s(ordinate)0 1354 y(system)e(in)m(to)h(the)f(corresp)s
-(onding)f(p)s(osition)h(in)g(another"?)54 b(In)35 b(practice,)i(it)f
-(means)e(that)i(the)f(input)f(and)0 1467 y(output)h(co)s(ordinates)i
-(corresp)s(ond)d(to)j(the)f(same)g(co)s(ordinates)g Fx(in)i(some)g
-(thir)-5 b(d)39 b(c)-5 b(o)g(or)g(dinate)40 b(system)p
-FG(.)58 b(The)0 1580 y(c)m(hoice)31 b(of)e(this)f(third)g(co)s
-(ordinate)i(system,)g(the)f(\\alignmen)m(t")i(system,)e(can)g
-(completely)i(alter)f(the)f(nature)0 1693 y(of)38 b(the)g(Mapping.)62
-b(The)37 b(F)-8 b(rame)39 b(class)f(has)g(an)f(attribute)i(called)f
-(AlignSystem)h(whic)m(h)e(can)h(b)s(e)f(used)g(to)0 1806
-y(sp)s(ecify)30 b(the)h(alignmen)m(t)g(system.)0 1969
-y(As)i(an)g(example,)i(consider)e(the)g(case)h(of)f(aligning)h(t)m(w)m
-(o)h(sp)s(ectra)e(calibrated)h(in)f(radio)g(v)m(elo)s(cit)m(y)-8
-b(,)37 b(but)32 b(eac)m(h)0 2081 y(with)26 b(a)g(di\013eren)m(t)g(rest)
-g(frequency)g(\(eac)m(h)h(sp)s(ectrum)e(will)h(b)s(e)g(describ)s(ed)e
-(b)m(y)i(a)g(Sp)s(ecF)-8 b(rame\).)40 b(Since)26 b(the)g(rest)0
-2194 y(frequencies)h(di\013er,)g(a)g(giv)m(en)h(v)m(elo)s(cit)m(y)h
-(will)e(corresp)s(ond)f(to)i(di\013eren)m(t)f(frequencies)g(in)f(the)h
-(t)m(w)m(o)h(sp)s(ectra.)40 b(So)0 2307 y(when)34 b(w)m(e)i(come)g(to)g
-(\\align")h(these)f(t)m(w)m(o)g(sp)s(ectra)g(\(that)g(is,)g(\014nd)e(a)
-i(Mapping)f(whic)m(h)g(con)m(v)m(erts)i(p)s(ositions)0
-2420 y(in)d(one)h(Sp)s(ecF)-8 b(rame)34 b(to)h(the)g(corresp)s(onding)e
-(p)s(ositions)i(in)f(the)g(other\),)j(w)m(e)d(ha)m(v)m(e)i(the)f(c)m
-(hoice)h(of)e(aligning)0 2533 y(the)d(frequencies)g(or)g(aligning)h
-(the)f(v)m(elo)s(cities.)44 b(Di\013eren)m(t)32 b(Mappings)f(will)g(b)s
-(e)f(required)g(to)i(describ)s(e)e(these)0 2646 y(t)m(w)m(o)i(forms)f
-(of)g(alignmen)m(t.)45 b(If)30 b(w)m(e)i(set)g(AlignSystem)f(to)h(\\F)
--8 b(req")33 b(then)e(the)g(returned)f(Mapping)h(will)h(align)0
-2759 y(the)e(frequencies)h(describ)s(ed)e(b)m(y)h(the)g(t)m(w)m(o)h(Sp)
-s(ecF)-8 b(rames.)41 b(On)30 b(the)g(other)g(hand,)g(if)g(w)m(e)g(set)h
-(AlignSystem)g(to)0 2872 y(\\V)-8 b(radio")32 b(then)e(the)h(returned)e
-(Mapping)h(will)h(align)g(the)g(v)m(elo)s(cities.)0 3035
-y(Some)e(c)m(hoices)i(of)e(alignmen)m(t)i(system)e(are)h(redundan)m(t.)
-39 b(F)-8 b(or)29 b(instance,)i(in)e(the)g(ab)s(o)m(v)m(e)h(example,)h
-(c)m(hanging)0 3147 y(the)i(alignmen)m(t)i(system)e(from)g(frequency)g
-(to)h(w)m(a)m(v)m(elength)h(has)e(no)g(e\013ect)i(on)e(the)g(returned)f
-(Mapping:)46 b(if)0 3260 y(t)m(w)m(o)27 b(sp)s(ectra)f(are)g(aligned)g
-(in)g(frequency)f(they)h(will)g(also)h(b)s(e)e(aligned)h(in)g(w)m(a)m
-(v)m(elength)i(\(assuming)d(the)h(sp)s(eed)0 3373 y(of)31
-b(ligh)m(t)g(do)s(esn't)f(c)m(hange\).)0 3536 y(The)d(default)g(v)-5
-b(alue)28 b(for)f(AlignSystem)h(dep)s(ends)e(on)h(the)g(class)h(of)g(F)
--8 b(rame.)40 b(F)-8 b(or)29 b(a)e(Sp)s(ecF)-8 b(rame,)29
-b(the)e(default)0 3649 y(is)41 b(w)m(a)m(v)m(elength)j(\(or)e(equiv)-5
-b(alen)m(tly)d(,)46 b(frequency\))c(since)f(this)g(is)h(the)f(system)h
-(in)f(whic)m(h)g(observ)-5 b(ations)42 b(are)0 3762 y(usually)34
-b(made.)53 b(The)34 b(Sp)s(ecF)-8 b(rame)34 b(class)h(also)h(has)e(an)g
-(attribute)h(called)h(AlignStdOfRest)e(whic)m(h)g(allo)m(ws)0
-3875 y(the)j(standard)g(of)g(rest)h(of)f(the)h(alignmen)m(t)g(system)g
-(to)g(b)s(e)e(sp)s(eci\014ed.)61 b(Similarly)-8 b(,)40
-b(the)d(TimeF)-8 b(rame)39 b(class)0 3988 y(has)31 b(an)h(attribute)h
-(called)g(AlignTimeScale)g(whic)m(h)e(allo)m(ws)i(the)f(time)h(scale)g
-(of)f(the)g(alignmen)m(t)h(system)f(to)0 4101 y(b)s(e)d(sp)s
-(eci\014ed.)40 b(Curren)m(tly)-8 b(,)30 b(the)g(SkyF)-8
-b(rame)31 b(uses)e(ICRS)g(as)h(the)g(default)g(for)g(AlignSystem,)h
-(since)f(this)g(is)g(a)0 4213 y(close)i(appro)m(ximation)f(to)g(an)f
-(inertial)i(frame)e(of)h(rest.)p eop end
-%%Page: 106 116
-TeXDict begin 106 115 bop 0 52 a FG(106)609 b Fz(12)92
-b(AN)31 b(INTR)m(ODUCTION)e(TO)h(COORDINA)-8 b(TE)30
-b(SYSTEM)f(CONVERSIONS)p eop end
-%%Page: 107 117
-TeXDict begin 107 116 bop 3643 52 a FG(107)0 351 y FA(13)135
-b(Co)t(ordinate)46 b(System)f(Net)l(w)l(orks)i(\(F)-11
-b(rameSets\))0 591 y FG(W)j(e)32 b(sa)m(w)g(in)f Fu(x)p
-FG(12)h(ho)m(w)f(AST)p Fy(_)p FG(CONVER)-8 b(T)30 b(could)h(b)s(e)g
-(used)f(to)i(\014nd)e(a)h(Mapping)g(that)h(in)m(ter-relates)h(a)f(pair)
-0 704 y(of)38 b(co)s(ordinate)h(systems)e(represen)m(ted)h(b)m(y)g(F)-8
-b(rames.)63 b(There)37 b(is)h(a)g(limitation)i(to)e(this,)i(ho)m(w)m
-(ev)m(er,)h(in)d(that)0 817 y(it)c(can)f(only)g(b)s(e)g(applied)g(to)g
-(co)s(ordinate)h(systems)g(that)f(are)h(in)m(ter-related)h(b)m(y)e
-(suitable)g(con)m(v)m(en)m(tions.)51 b(In)0 930 y(the)38
-b(case)h(of)f(celestial)j(co)s(ordinates,)g(the)d(relev)-5
-b(an)m(t)39 b(con)m(v)m(en)m(tions)h(are)e(standards)f(set)i(out)f(b)m
-(y)g(the)g(In)m(ter-)0 1043 y(national)c(Astronomical)g(Union,)f(and)f
-(others,)h(that)g(de\014ne)f(what)g(these)h(co)s(ordinate)h(systems)e
-(mean.)47 b(In)0 1156 y(practice,)28 b(ho)m(w)m(ev)m(er,)h(the)c
-(relationships)h(b)s(et)m(w)m(een)h(man)m(y)f(other)g(co)s(ordinate)g
-(systems)g(are)g(also)h(of)f(practical)0 1269 y(imp)s(ortance.)0
-1418 y(Consider,)k(for)h(example,)h(the)f(fo)s(cal)h(plane)f(of)g(a)g
-(telescop)s(e)i(up)s(on)c(whic)m(h)i(an)f(image)j(of)e(the)g(sky)f(is)h
-(falling.)0 1531 y(W)-8 b(e)29 b(could)f(measure)g(p)s(ositions)g(in)f
-(this)h(fo)s(cal)h(plane)f(in)g(millimetres)h(or,)f(if)g(there)g(w)m
-(ere)h(a)f(detector)h(system)0 1644 y(suc)m(h)i(as)g(a)g(CCD)g(presen)m
-(t,)g(w)m(e)h(could)f(coun)m(t)g(pixels.)43 b(W)-8 b(e)32
-b(could)f(also)h(use)f(celestial)j(co)s(ordinates)d(of)g(man)m(y)0
-1757 y(di\013eren)m(t)h(kinds.)43 b(All)32 b(of)g(these)f(systems)h
-(are)g(equiv)-5 b(alen)m(t)33 b(in)e(their)g(e\013ectiv)m(eness)j(at)e
-(sp)s(ecifying)g(p)s(ositions)0 1870 y(in)e(the)h(fo)s(cal)g(plane,)f
-(but)g(some)h(are)g(more)f(con)m(v)m(enien)m(t)j(than)d(others)g(for)g
-(particular)h(purp)s(oses.)0 2020 y(Although)38 b(w)m(e)g(could,)h(in)f
-(principle,)h(con)m(v)m(ert)g(b)s(et)m(w)m(een)f(all)h(of)f(these)g(fo)
-s(cal)g(plane)g(co)s(ordinate)g(systems,)0 2133 y(there)27
-b(is)h(no)f(pre-de\014ned)f(con)m(v)m(en)m(tion)j(for)e(doing)h(so.)40
-b(This)26 b(is)h(b)s(ecause)h(the)f(con)m(v)m(ersions)i(required)d(dep)
-s(end)0 2246 y(on)37 b(where)f(the)h(telescop)s(e)h(is)f(p)s(oin)m
-(ting)g(and)f(ho)m(w)h(the)g(CCD)f(is)h(moun)m(ted)f(in)h(the)g(fo)s
-(cal)g(plane.)60 b(Clearly)-8 b(,)0 2358 y(kno)m(wledge)31
-b(ab)s(out)e(this)g(cannot)h(b)s(e)f(built)h(in)m(to)g(the)g(AST)f
-(library)g(and)g(m)m(ust)g(b)s(e)g(supplied)f(in)h(some)h(other)0
-2471 y(w)m(a)m(y)-8 b(.)41 b(Note)27 b(that)g(this)g(is)f(exactly)i
-(the)e(same)h(problem)f(as)g(w)m(e)h(met)g(in)f Fu(x)p
-FG(7.12)i(when)d(discussing)h(the)h(Domain)0 2584 y(attribute|)p
-Fx(i.e.)36 b FG(co)s(ordinate)h(systems)f(that)g(apply)g(to)h
-(di\013eren)m(t)f(ph)m(ysical)h(domains)e(require)h(that)h(extra)0
-2697 y(information)31 b(b)s(e)e(supplied)h(b)s(efore)f(w)m(e)i(can)g
-(con)m(v)m(ert)h(b)s(et)m(w)m(een)f(them.)0 2847 y(What)f(w)m(e)f
-(need,)g(therefore,)h(is)f(a)g(general)h(w)m(a)m(y)g(to)f(describ)s(e)g
-(ho)m(w)g(co)s(ordinate)g(systems)g(are)g(in)m(ter-related,)0
-2960 y(so)h(that)h(when)f(there)g(is)g(no)g(con)m(v)m(en)m(tion)j
-(already)e(in)e(place,)j(w)m(e)f(can)f(de\014ne)g(our)f(o)m(wn.)41
-b(W)-8 b(e)31 b(can)g(then)f(lo)s(ok)0 3073 y(forw)m(ard)37
-b(to)g(con)m(v)m(erting,)k(sa)m(y)-8 b(,)40 b(from)d(pixels)g(in)m(to)h
-(galactic)i(co)s(ordinates)e(and)e Fx(vic)-5 b(e)38 b(versa.)61
-b FG(In)37 b(AST,)f(the)0 3186 y(F)-8 b(rameSet)32 b(class)f(pro)m
-(vides)f(this)g(capabilit)m(y)-8 b(.)0 3460 y Fw(13.1)112
-b(The)38 b(F)-9 b(rameSet)38 b(Mo)s(del)0 3668 y FG(Consider)29
-b(a)h(co)s(ordinate)h(system)f(\(call)i(it)f(n)m(um)m(b)s(er)d(1\))j
-(whic)m(h)f(is)g(represen)m(ted)f(b)m(y)h(a)h(F)-8 b(rame)31
-b(of)f(some)g(kind.)0 3781 y(No)m(w)f(consider)g(a)g(Mapping)g(whic)m
-(h,)g(when)f(applied)g(to)i(the)f(co)s(ordinates)g(in)g(system)g(1)g
-(yields)g(co)s(ordinates)0 3894 y(in)h(another)h(system,)f(n)m(um)m(b)s
-(er)f(2.)42 b(The)29 b(Mapping)i(therefore)g(in)m(ter-relates)h(co)s
-(ordinate)f(systems)g(1)f(and)g(2.)0 4044 y(No)m(w)j(consider)f(a)h
-(second)f(Mapping)g(whic)m(h)g(in)m(ter-relates)j(system)d(1)h(and)e(a)
-i(further)e(co)s(ordinate)i(system,)0 4157 y(n)m(um)m(b)s(er)c(3.)41
-b(If)30 b(w)m(e)h(w)m(an)m(ted)g(to)g(con)m(v)m(ert)h(co)s(ordinates)f
-(b)s(et)m(w)m(een)g(systems)g(2)f(and)g(3,)h(w)m(e)g(could)f(do)h(so)f
-(b)m(y:)111 4368 y(1.)46 b(Applying)30 b(our)g(\014rst)g(Mapping)g(in)g
-(rev)m(erse,)h(so)g(as)g(to)g(con)m(v)m(ert)h(b)s(et)m(w)m(een)f
-(systems)f(2)h(and)f(1.)111 4542 y(2.)46 b(Applying)30
-b(the)h(second)f(Mapping,)h(as)f(giv)m(en,)i(to)f(con)m(v)m(ert)h(b)s
-(et)m(w)m(een)f(systems)f(1)h(and)f(3.)0 4753 y(W)-8
-b(e)24 b(are)f(not)g(limited)h(to)f(three)g(co)s(ordinate)h(systems,)h
-(of)e(course.)38 b(In)22 b(fact,)k(w)m(e)d(could)g(con)m(tin)m(ue)h(to)
-g(in)m(tro)s(duce)0 4866 y(an)m(y)32 b(n)m(um)m(b)s(er)e(of)i(further)e
-(co)s(ordinate)i(systems,)g(so)g(long)g(as)f(w)m(e)h(ha)m(v)m(e)h(a)f
-(suitable)g(Mapping)f(for)h(eac)m(h)g(one)0 4979 y(whic)m(h)f(relates)i
-(it)g(to)f(one)g(of)g(the)g(F)-8 b(rames)32 b(already)g(presen)m(t.)45
-b(Con)m(tin)m(uing)32 b(in)g(this)f(w)m(a)m(y)-8 b(,)34
-b(w)m(e)e(can)g(build)f(up)0 5092 y(a)i(net)m(w)m(ork)g(in)f(whic)m(h)g
-(F)-8 b(rames)33 b(are)g(in)m(ter-related)h(b)m(y)f(Mappings)f(in)g
-(suc)m(h)g(a)h(w)m(a)m(y)g(that)g(there)g(is)f(alw)m(a)m(ys)i(a)0
-5204 y(w)m(a)m(y)d(of)g(con)m(v)m(erting)h(b)s(et)m(w)m(een)f(an)m(y)g
-(pair)f(of)g(co)s(ordinate)i(systems.)0 5354 y(The)38
-b(F)-8 b(rameSet)41 b(\(Figure)e(7\))h(encapsulates)g(these)f(ideas.)67
-b(It)39 b(is)g(a)h(net)m(w)m(ork)f(comp)s(osed)g(of)g(F)-8
-b(rames)40 b(and)0 5467 y(asso)s(ciated)27 b(Mappings,)g(in)e(whic)m(h)
-h(there)g(is)f(alw)m(a)m(ys)j(exactly)f(one)f(path,)h
-Fx(via)f FG(Mappings,)g(b)s(et)m(w)m(een)h(an)m(y)f(pair)0
-5580 y(of)f(F)-8 b(rames.)40 b(Since)25 b(w)m(e)h(assem)m(ble)g(F)-8
-b(rameSets)26 b(ourselv)m(es,)h(they)e(can)g(b)s(e)g(used)f(to)i
-(represen)m(t)f(an)m(y)h(co)s(ordinate)0 5693 y(systems)k(w)m(e)h(c)m
-(ho)s(ose)h(and)d(to)i(set)g(up)f(the)g(particular)h(relationships)g(b)
-s(et)m(w)m(een)g(them)f(that)h(w)m(e)g(w)m(an)m(t.)p
-eop end
-%%Page: 108 118
-TeXDict begin 108 117 bop 0 52 a FG(108)1175 b Fz(13)92
-b(COORDINA)-8 b(TE)30 b(SYSTEM)f(NETW)m(ORKS)h(\(FRAMESETS\))0
-351 y Fw(13.2)112 b(Creating)38 b(a)g(F)-9 b(rameSet)0
-576 y FG(Before)37 b(w)m(e)f(can)h(create)g(a)f(F)-8
-b(rameSet,)39 b(w)m(e)e(m)m(ust)e(ha)m(v)m(e)j(a)e(F)-8
-b(rame)37 b(of)f(some)g(kind)f(to)i(put)e(in)m(to)i(it,)h(so)e(let's)0
-689 y(create)c(a)f(simple)f(one:)262 944 y Ft(INCLUDE)40
-b('AST_PAR')262 1044 y(INTEGER)g(FRAME1,)h(STATUS)262
-1243 y(STATUS)g(=)i(0)262 1442 y(...)262 1641 y(FRAME1)e(=)i
-(AST_FRAME\()c(2,)k('Domain=A',)c(STATUS)i(\))0 1910
-y FG(W)-8 b(e)25 b(ha)m(v)m(e)f(set)g(this)g(F)-8 b(rame's)24
-b(Domain)h(attribute)f(\()p Fu(x)p FG(7.12\))i(to)e(A)g(so)g(that)g(it)
-g(will)g(b)s(e)f(distinct)h(from)f(the)g(others)0 2023
-y(w)m(e)31 b(will)g(b)s(e)e(using.)41 b(W)-8 b(e)31 b(can)g(no)m(w)f
-(create)i(a)f(new)f(F)-8 b(rameSet)31 b(con)m(taining)h(just)e(this)g
-(F)-8 b(rame,)32 b(as)e(follo)m(ws:)262 2278 y Ft(INTEGER)40
-b(FRAMESET)262 2477 y(...)262 2677 y(FRAMESET)g(=)j(AST_FRAMESET\()38
-b(FRAME1,)j(')i(',)g(STATUS)e(\))0 2945 y FG(So)30 b(far,)h(ho)m(w)m
-(ev)m(er,)h(this)e(F)-8 b(rame)31 b(isn't)g(related)g(to)g(an)m(y)g
-(others.)0 3245 y Fw(13.3)112 b(Adding)38 b(New)f(F)-9
-b(rames)39 b(to)e(a)h(F)-9 b(rameSet)0 3470 y FG(W)h(e)40
-b(can)f(no)m(w)g(add)f(further)g(F)-8 b(rames)40 b(to)f(the)g(F)-8
-b(rameSet)41 b(created)e(ab)s(o)m(v)m(e)i(\()p Fu(x)p
-FG(13.2\).)69 b(T)-8 b(o)39 b(do)g(so,)i(w)m(e)f(m)m(ust)0
-3583 y(supply)33 b(a)j(new)e(F)-8 b(rame)36 b(and)e(an)h(asso)s(ciated)
-h(Mapping)f(that)g(relates)i(it)e(to)h(an)m(y)f(of)g(the)g(F)-8
-b(rames)36 b(that)f(are)0 3696 y(already)c(presen)m(t)g(\(there)g(is)g
-(only)f(one)h(presen)m(t)g(so)g(far\).)41 b(T)-8 b(o)31
-b(k)m(eep)h(the)f(example)g(simple,)g(w)m(e)g(will)g(just)f(use)0
-3809 y(a)h(Zo)s(omMap)f(that)h(m)m(ultiplies)g(co)s(ordinates)g(b)m(y)g
-(10.)41 b(The)30 b(required)g(Ob)5 b(jects)30 b(are)h(created)g(as)g
-(follo)m(ws:)262 4064 y Ft(INTEGER)40 b(FRAME2,)h(MAPPING12)262
-4263 y(...)262 4462 y(FRAME2)g(=)i(AST_FRAME\()c(2,)k('Domain=B',)c
-(STATUS)i(\))262 4562 y(MAPPING12)e(=)44 b(AST_ZOOMMAP\()38
-b(2,)43 b(10.0D0,)e(')i(',)g(STATUS)e(\))0 4830 y FG(T)-8
-b(o)31 b(add)f(the)g(new)g(F)-8 b(rame)31 b(in)m(to)h(our)e(F)-8
-b(rameSet,)31 b(w)m(e)g(use)f(the)h(AST)p Fy(_)p FG(ADDFRAME)g
-(routine:)262 5086 y Ft(CALL)41 b(AST_ADDFRAME\()e(FRAMESET,)h(1,)i
-(MAPPING12,)e(FRAME2,)g(STATUS)i(\))0 5354 y FG(Whenev)m(er)36
-b(a)g(F)-8 b(rame)37 b(is)e(added)g(to)i(a)f(F)-8 b(rameSet,)38
-b(it)e(is)g(assigned)g(an)f(in)m(teger)i(index.)56 b(This)35
-b(index)g(starts)0 5467 y(with)f(1)i(for)e(the)h(initial)h(F)-8
-b(rame)36 b(used)e(to)h(create)h(the)f(F)-8 b(rameSet)36
-b(\()p Fu(x)p FG(13.2\))i(and)c(incremen)m(ts)h(b)m(y)g(one)g(ev)m(ery)
-0 5580 y(time)f(a)f(new)f(F)-8 b(rame)34 b(is)f(added.)48
-b(This)32 b(index)h(is)g(the)g(primary)f(w)m(a)m(y)i(of)f(iden)m
-(tifying)h(the)f(F)-8 b(rames)34 b(within)e(a)0 5693
-y(F)-8 b(rameSet.)p eop end
-%%Page: 109 119
-TeXDict begin 109 118 bop 0 52 a Fz(13.4)93 b(The)29
-b(Base)j(and)e(Curren)m(t)f(F)-8 b(rames)2185 b FG(109)917
-1810 y @beginspecial 114 @llx 303 @lly 503 @urx 613 @ury
-2334 @rwi @setspecial
-%%BeginDocument: sun210_figures/fsexample.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 114 303 503 613
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/11 14:23:38
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5024.15 5691.35 m
-5024.15 5900.15 4854.95 6070.55 4644.95 6070.55 c
-1581.35 6070.55 l
-1372.55 6070.55 1202.15 5900.15 1202.15 5691.35 c
-1202.15 3418.55 l
-1202.15 3208.55 1372.55 3039.35 1581.35 3039.35 c
-4644.95 3039.35 l
-4854.95 3039.35 5024.15 3208.55 5024.15 3418.55 c
-f*
-1 g
-4959.35 5747.75 m
-4959.35 5955.35 4790.15 6124.55 4582.55 6124.55 c
-1526.15 6124.55 l
-1317.35 6124.55 1148.15 5955.35 1148.15 5747.75 c
-1148.15 3480.95 l
-1148.15 3273.35 1317.35 3104.15 1526.15 3104.15 c
-4581.35 3104.15 l
-4790.15 3104.15 4959.35 3273.35 4959.35 3480.95 c
-f*
-8 w
-1 J
-1 j
-0 g
-4959.35 5747.75 m
-4959.35 5955.35 4790.15 6124.55 4582.55 6124.55 c
-1526.15 6124.55 l
-1317.35 6124.55 1148.15 5955.35 1148.15 5747.75 c
-1148.15 3480.95 l
-1148.15 3273.35 1317.35 3104.15 1526.15 3104.15 c
-4581.35 3104.15 l
-4790.15 3104.15 4959.35 3273.35 4959.35 3480.95 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1563.35 5256.95 l
-1451.75 5256.95 1360.55 5165.75 1360.55 5055.35 c
-1360.55 4917.35 l
-1360.55 4806.95 1451.75 4715.75 1563.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1509.35 5306.15 l
-1400.15 5306.15 1311.35 5218.55 1311.35 5111.75 c
-1311.35 4979.75 l
-1311.35 4872.95 1400.15 4785.35 1509.35 4785.35 c
-1995.35 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-f*
-16 w
-0 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1509.35 5306.15 l
-1400.15 5306.15 1311.35 5218.55 1311.35 5111.75 c
-1311.35 4979.75 l
-1311.35 4872.95 1400.15 4785.35 1509.35 4785.35 c
-1995.35 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-h
-S
-0.201248 i
-1539.33 5152 m
-1425.22 5152 l
-1425.22 5147 l
-1439.11 5146.2 1443 5143.18 1443 5132.72 c
-1443 5035.32 l
-1443 5024.85 1440.17 5022.64 1425.22 5021.03 c
-1425.22 5016 l
-1497.67 5016 l
-1497.67 5021 l
-1479.15 5021.81 1476 5024.23 1476 5035.32 c
-1476 5082.21 l
-1496.22 5081.81 1503.55 5074.36 1506.32 5051.02 c
-1511.35 5051.02 l
-1511.35 5119.04 l
-1506.32 5119.04 l
-1502.76 5096.1 1495.82 5089.05 1476 5089.05 c
-1476 5135.74 l
-1476 5143.19 1478.52 5145 1488.41 5145 c
-1507.13 5145 1518.8 5141.64 1525.04 5134.74 c
-1529.47 5129.71 1531.68 5124.27 1534.5 5111.59 c
-1539.33 5111.59 l
-h
-1544.96 5016 m
-f*
-1589.19 5109 m
-1550.84 5109 l
-1550.84 5103.95 l
-1559.49 5102.74 1562 5100.12 1562 5092.07 c
-1562 5032.9 l
-1562 5024.65 1559.93 5022.44 1550.84 5020.83 c
-1550.84 5016 l
-1604.37 5016 l
-1604.37 5020.83 l
-1592.09 5021.63 1590 5024.25 1590 5036.73 c
-1590 5074.76 l
-1590 5085.23 1595.49 5093.88 1601.95 5093.88 c
-1603.56 5093.88 1605.37 5092.47 1607.59 5089.25 c
-1611.41 5083.82 1614.43 5082.01 1619.66 5082.01 c
-1627.11 5082.01 1632.34 5087.64 1632.34 5095.29 c
-1632.34 5104.55 1625.5 5111.41 1616.04 5111.41 c
-1606.1 5111.41 1598.54 5106.12 1589.19 5092.27 c
-h
-1634.35 5016 m
-f*
-1729.19 5028.88 m
-1727.18 5026.87 l
-1726.57 5026.26 1725.97 5026.06 1724.96 5026.06 c
-1722.15 5026.06 1721 5027.67 1721 5031.09 c
-1721 5083.62 l
-1721 5100.73 1705.6 5111.42 1680.89 5111.42 c
-1658.15 5111.42 1642.85 5101.06 1642.85 5085.83 c
-1642.85 5077.38 1647.69 5072.55 1655.94 5072.55 c
-1663.99 5072.55 1669.62 5077.38 1669.62 5084.22 c
-1669.62 5087.04 1668.61 5089.66 1666 5092.88 c
-1664.19 5094.89 1663.58 5096.1 1663.58 5097.3 c
-1663.58 5101.53 1669.02 5104.42 1676.26 5104.42 c
-1688.14 5104.42 1693.86 5099.08 1693.86 5087.04 c
-1693.86 5072.35 l
-1669.91 5065.1 1660.29 5061.48 1652.51 5056.45 c
-1643.46 5050.41 1639 5043.37 1639 5034.52 c
-1639 5022.24 1648.27 5013.18 1661.17 5013.18 c
-1672.84 5013.18 1682.1 5017.21 1693.17 5027.27 c
-1695.38 5017.01 1699.81 5013.18 1709.67 5013.18 c
-1718.32 5013.18 1724.56 5016.4 1732.21 5024.65 c
-h
-1693 5036.13 m
-1687.55 5029.89 1683.52 5027.47 1678.68 5027.47 c
-1672.64 5027.47 1668 5032.91 1668 5040.96 c
-1668 5052.63 1676.61 5060.88 1693 5065.31 c
-h
-1734.62 5016 m
-f*
-1776.4 5109 m
-1737.7 5109 l
-1737.7 5103.95 l
-1746.55 5102.74 1749 5100.32 1749 5092.07 c
-1749 5032.9 l
-1749 5024.65 1746.74 5022.44 1737.7 5020.83 c
-1737.7 5016 l
-1786 5016 l
-1786 5020.83 l
-1778.95 5021.84 1777 5024.65 1777 5032.3 c
-1777 5086.03 l
-1777 5087.04 1779.87 5090.66 1782.18 5092.88 c
-1786.4 5096.1 1790.02 5098.42 1793.65 5098.42 c
-1801.5 5098.42 1805 5093.59 1805 5081 c
-1805 5032.3 l
-1805 5024.05 1802.68 5021.43 1794.85 5020.83 c
-1794.85 5016 l
-1841.95 5016 l
-1841.95 5020.83 l
-1834.9 5021.64 1833 5024.65 1833 5032.3 c
-1833 5086.03 l
-1833 5087.04 1835.73 5090.46 1837.92 5092.68 c
-1842.35 5096.1 1845.97 5098.42 1849.59 5098.42 c
-1857.24 5098.42 1860 5093.38 1860 5081 c
-1860 5032.3 l
-1860 5023.85 1857.85 5021.43 1850.4 5020.83 c
-1850.4 5016 l
-1898.3 5016 l
-1898.3 5021 l
-1890.45 5021.4 1888 5023.78 1888 5032.3 c
-1888 5082.81 l
-1888 5100.12 1877.43 5111.42 1861.07 5111.42 c
-1849.59 5111.42 1841.95 5106.73 1831.48 5093.68 c
-1825.44 5106.36 1818.4 5111.42 1805.72 5111.42 c
-1792.95 5111.42 1783.98 5105.91 1776.4 5093.68 c
-h
-1901.64 5016 m
-f*
-1979.9 5041.16 m
-1971.65 5031.29 1965.61 5027.18 1956.96 5027.18 c
-1949.31 5027.18 1943.27 5030.77 1939.25 5037.94 c
-1935.43 5044.54 1933.82 5051.56 1933.01 5066 c
-1983.73 5066 l
-1982.52 5082.36 1979.5 5091.43 1973.26 5099.12 c
-1966.82 5106.96 1957.36 5111.42 1946.09 5111.42 c
-1920.94 5111.42 1904.03 5091.4 1904.03 5061.88 c
-1904.03 5032.5 1920.53 5013.18 1945.49 5013.18 c
-1961.79 5013.18 1971.65 5019.42 1984.73 5038.34 c
-h
-1932 5073 m
-1932.61 5096.96 1936.23 5104.42 1946.09 5104.42 c
-1951.93 5104.42 1955.55 5101.38 1957.16 5095.49 c
-1958.17 5091.67 1958.57 5086.03 1958.97 5075.77 c
-1958.97 5073 l
-h
-1988.35 5016 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -5016]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4722.95 4254.95 m
-4722.95 4366.55 4631.75 4457.75 4520.15 4457.75 c
-4023.35 4457.75 l
-3911.75 4457.75 3820.55 4366.55 3820.55 4254.95 c
-3820.55 4118.15 l
-3820.55 4006.55 3911.75 3915.35 4023.35 3915.35 c
-4520.15 3915.35 l
-4631.75 3915.35 4722.95 4006.55 4722.95 4118.15 c
-f*
-1 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-f*
-0 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-h
-S
-0.201248 i
-3999.33 4353 m
-3885.22 4353 l
-3885.22 4348 l
-3899.11 4347.2 3903 4344.18 3903 4333.72 c
-3903 4236.32 l
-3903 4225.85 3900.17 4223.64 3885.22 4222.03 c
-3885.22 4217 l
-3957.67 4217 l
-3957.67 4222 l
-3939.15 4222.81 3936 4225.23 3936 4236.32 c
-3936 4283.21 l
-3956.22 4282.81 3963.55 4275.36 3966.32 4252.02 c
-3971.35 4252.02 l
-3971.35 4320.04 l
-3966.32 4320.04 l
-3962.76 4297.1 3955.82 4290.05 3936 4290.05 c
-3936 4336.74 l
-3936 4344.19 3938.52 4346 3948.41 4346 c
-3967.13 4346 3978.8 4342.64 3985.04 4335.74 c
-3989.47 4330.71 3991.68 4325.27 3994.5 4312.59 c
-3999.33 4312.59 l
-h
-4004.96 4217 m
-f*
-4049.19 4310 m
-4010.84 4310 l
-4010.84 4304.95 l
-4019.49 4303.74 4022 4301.12 4022 4293.07 c
-4022 4233.9 l
-4022 4225.65 4019.93 4223.44 4010.84 4221.83 c
-4010.84 4217 l
-4064.37 4217 l
-4064.37 4221.83 l
-4052.09 4222.63 4050 4225.25 4050 4237.73 c
-4050 4275.76 l
-4050 4286.23 4055.49 4294.88 4061.95 4294.88 c
-4063.56 4294.88 4065.37 4293.47 4067.59 4290.25 c
-4071.41 4284.82 4074.43 4283.01 4079.66 4283.01 c
-4087.11 4283.01 4092.34 4288.64 4092.34 4296.29 c
-4092.34 4305.55 4085.5 4312.41 4076.04 4312.41 c
-4066.1 4312.41 4058.54 4307.12 4049.19 4293.27 c
-h
-4094.35 4217 m
-f*
-4189.19 4229.88 m
-4187.18 4227.87 l
-4186.57 4227.26 4185.97 4227.06 4184.96 4227.06 c
-4182.15 4227.06 4181 4228.67 4181 4232.09 c
-4181 4284.62 l
-4181 4301.73 4165.6 4312.42 4140.89 4312.42 c
-4118.15 4312.42 4102.85 4302.06 4102.85 4286.83 c
-4102.85 4278.38 4107.69 4273.55 4115.94 4273.55 c
-4123.99 4273.55 4129.62 4278.38 4129.62 4285.22 c
-4129.62 4288.04 4128.61 4290.66 4126 4293.88 c
-4124.19 4295.89 4123.58 4297.1 4123.58 4298.3 c
-4123.58 4302.53 4129.02 4305.42 4136.26 4305.42 c
-4148.14 4305.42 4153.86 4300.08 4153.86 4288.04 c
-4153.86 4273.35 l
-4129.91 4266.1 4120.29 4262.48 4112.51 4257.45 c
-4103.46 4251.41 4099 4244.37 4099 4235.52 c
-4099 4223.24 4108.27 4214.18 4121.17 4214.18 c
-4132.84 4214.18 4142.1 4218.21 4153.17 4228.27 c
-4155.38 4218.01 4159.81 4214.18 4169.67 4214.18 c
-4178.32 4214.18 4184.56 4217.4 4192.21 4225.65 c
-h
-4153 4237.13 m
-4147.55 4230.89 4143.52 4228.47 4138.68 4228.47 c
-4132.64 4228.47 4128 4233.91 4128 4241.96 c
-4128 4253.63 4136.61 4261.88 4153 4266.31 c
-h
-4194.62 4217 m
-f*
-4236.4 4310 m
-4197.7 4310 l
-4197.7 4304.95 l
-4206.55 4303.74 4209 4301.32 4209 4293.07 c
-4209 4233.9 l
-4209 4225.65 4206.74 4223.44 4197.7 4221.83 c
-4197.7 4217 l
-4246 4217 l
-4246 4221.83 l
-4238.95 4222.84 4237 4225.65 4237 4233.3 c
-4237 4287.03 l
-4237 4288.04 4239.87 4291.66 4242.18 4293.88 c
-4246.4 4297.1 4250.02 4299.42 4253.65 4299.42 c
-4261.5 4299.42 4265 4294.59 4265 4282 c
-4265 4233.3 l
-4265 4225.05 4262.68 4222.43 4254.85 4221.83 c
-4254.85 4217 l
-4301.95 4217 l
-4301.95 4221.83 l
-4294.9 4222.64 4293 4225.65 4293 4233.3 c
-4293 4287.03 l
-4293 4288.04 4295.73 4291.46 4297.92 4293.68 c
-4302.35 4297.1 4305.97 4299.42 4309.59 4299.42 c
-4317.24 4299.42 4320 4294.38 4320 4282 c
-4320 4233.3 l
-4320 4224.85 4317.85 4222.43 4310.4 4221.83 c
-4310.4 4217 l
-4358.3 4217 l
-4358.3 4222 l
-4350.45 4222.4 4348 4224.78 4348 4233.3 c
-4348 4283.81 l
-4348 4301.12 4337.43 4312.42 4321.07 4312.42 c
-4309.59 4312.42 4301.95 4307.73 4291.48 4294.68 c
-4285.44 4307.36 4278.4 4312.42 4265.72 4312.42 c
-4252.95 4312.42 4243.98 4306.91 4236.4 4294.68 c
-h
-4361.64 4217 m
-f*
-4439.9 4242.16 m
-4431.65 4232.29 4425.61 4228.18 4416.96 4228.18 c
-4409.31 4228.18 4403.27 4231.77 4399.25 4238.94 c
-4395.43 4245.54 4393.82 4252.56 4393.01 4267 c
-4443.73 4267 l
-4442.52 4283.36 4439.5 4292.43 4433.26 4300.12 c
-4426.82 4307.96 4417.36 4312.42 4406.09 4312.42 c
-4380.94 4312.42 4364.03 4292.4 4364.03 4262.88 c
-4364.03 4233.5 4380.53 4214.18 4405.49 4214.18 c
-4421.79 4214.18 4431.65 4220.42 4444.73 4239.34 c
-h
-4392 4274 m
-4392.61 4297.96 4396.23 4305.42 4406.09 4305.42 c
-4411.93 4305.42 4415.55 4302.38 4417.16 4296.49 c
-4418.17 4292.67 4418.57 4287.03 4418.97 4276.77 c
-4418.97 4274 l
-h
-4448.35 4217 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4484 -4215]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3804.95 3548.15 m
-3804.95 3658.55 3713.75 3749.75 3602.15 3749.75 c
-3106.55 3749.75 l
-2994.95 3749.75 2903.75 3658.55 2903.75 3548.15 c
-2903.75 3410.15 l
-2903.75 3299.75 2994.95 3208.55 3106.55 3208.55 c
-3602.15 3208.55 l
-3713.75 3208.55 3804.95 3299.75 3804.95 3410.15 c
-f*
-1 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-f*
-8 w
-0 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-h
-S
-0.201248 i
-3082.33 3645 m
-2968.22 3645 l
-2968.22 3640 l
-2982.11 3639.2 2986 3636.18 2986 3625.72 c
-2986 3528.32 l
-2986 3517.85 2983.17 3515.64 2968.22 3514.03 c
-2968.22 3509 l
-3040.67 3509 l
-3040.67 3514 l
-3022.15 3514.81 3019 3517.23 3019 3528.32 c
-3019 3575.21 l
-3039.22 3574.81 3046.55 3567.36 3049.32 3544.02 c
-3054.35 3544.02 l
-3054.35 3612.04 l
-3049.32 3612.04 l
-3045.76 3589.1 3038.82 3582.05 3019 3582.05 c
-3019 3628.74 l
-3019 3636.19 3021.52 3638 3031.41 3638 c
-3050.13 3638 3061.8 3634.64 3068.04 3627.74 c
-3072.47 3622.71 3074.68 3617.27 3077.5 3604.59 c
-3082.33 3604.59 l
-h
-3087.96 3509 m
-f*
-3131.19 3602 m
-3092.84 3602 l
-3092.84 3596.95 l
-3101.49 3595.74 3104 3593.12 3104 3585.07 c
-3104 3525.9 l
-3104 3517.65 3101.93 3515.44 3092.84 3513.83 c
-3092.84 3509 l
-3146.37 3509 l
-3146.37 3513.83 l
-3134.09 3514.63 3132 3517.25 3132 3529.73 c
-3132 3567.76 l
-3132 3578.23 3137.49 3586.88 3143.95 3586.88 c
-3145.56 3586.88 3147.37 3585.47 3149.59 3582.25 c
-3153.41 3576.82 3156.43 3575.01 3161.66 3575.01 c
-3169.11 3575.01 3174.34 3580.64 3174.34 3588.29 c
-3174.34 3597.55 3167.5 3604.41 3158.04 3604.41 c
-3148.1 3604.41 3140.54 3599.12 3131.19 3585.27 c
-h
-3176.35 3509 m
-f*
-3271.19 3521.88 m
-3269.18 3519.87 l
-3268.57 3519.26 3267.97 3519.06 3266.96 3519.06 c
-3264.15 3519.06 3263 3520.67 3263 3524.09 c
-3263 3576.62 l
-3263 3593.73 3247.6 3604.42 3222.89 3604.42 c
-3200.15 3604.42 3184.85 3594.06 3184.85 3578.83 c
-3184.85 3570.38 3189.69 3565.55 3197.94 3565.55 c
-3205.99 3565.55 3211.62 3570.38 3211.62 3577.22 c
-3211.62 3580.04 3210.61 3582.66 3208 3585.88 c
-3206.19 3587.89 3205.58 3589.1 3205.58 3590.3 c
-3205.58 3594.53 3211.02 3597.42 3218.26 3597.42 c
-3230.14 3597.42 3235.86 3592.08 3235.86 3580.04 c
-3235.86 3565.35 l
-3211.91 3558.1 3202.29 3554.48 3194.51 3549.45 c
-3185.46 3543.41 3181 3536.37 3181 3527.52 c
-3181 3515.24 3190.27 3506.18 3203.17 3506.18 c
-3214.84 3506.18 3224.1 3510.21 3235.17 3520.27 c
-3237.38 3510.01 3241.81 3506.18 3251.67 3506.18 c
-3260.32 3506.18 3266.56 3509.4 3274.21 3517.65 c
-h
-3235 3529.13 m
-3229.55 3522.89 3225.52 3520.47 3220.68 3520.47 c
-3214.64 3520.47 3210 3525.91 3210 3533.96 c
-3210 3545.63 3218.61 3553.88 3235 3558.31 c
-h
-3276.62 3509 m
-f*
-3318.4 3602 m
-3279.7 3602 l
-3279.7 3596.95 l
-3288.55 3595.74 3291 3593.32 3291 3585.07 c
-3291 3525.9 l
-3291 3517.65 3288.74 3515.44 3279.7 3513.83 c
-3279.7 3509 l
-3328 3509 l
-3328 3513.83 l
-3320.95 3514.84 3319 3517.65 3319 3525.3 c
-3319 3579.03 l
-3319 3580.04 3321.87 3583.66 3324.18 3585.88 c
-3328.4 3589.1 3332.02 3591.42 3335.65 3591.42 c
-3343.5 3591.42 3347 3586.59 3347 3574 c
-3347 3525.3 l
-3347 3517.05 3344.68 3514.43 3336.85 3513.83 c
-3336.85 3509 l
-3383.95 3509 l
-3383.95 3513.83 l
-3376.9 3514.64 3375 3517.65 3375 3525.3 c
-3375 3579.03 l
-3375 3580.04 3377.73 3583.46 3379.92 3585.68 c
-3384.35 3589.1 3387.97 3591.42 3391.59 3591.42 c
-3399.24 3591.42 3402 3586.38 3402 3574 c
-3402 3525.3 l
-3402 3516.85 3399.85 3514.43 3392.4 3513.83 c
-3392.4 3509 l
-3440.3 3509 l
-3440.3 3514 l
-3432.45 3514.4 3430 3516.78 3430 3525.3 c
-3430 3575.81 l
-3430 3593.12 3419.43 3604.42 3403.07 3604.42 c
-3391.59 3604.42 3383.95 3599.73 3373.48 3586.68 c
-3367.44 3599.36 3360.4 3604.42 3347.72 3604.42 c
-3334.95 3604.42 3325.98 3598.91 3318.4 3586.68 c
-h
-3443.64 3509 m
-f*
-3523.9 3534.16 m
-3515.65 3524.29 3509.61 3520.18 3500.96 3520.18 c
-3493.31 3520.18 3487.27 3523.77 3483.25 3530.94 c
-3479.43 3537.54 3477.82 3544.56 3477.01 3559 c
-3527.73 3559 l
-3526.52 3575.36 3523.5 3584.43 3517.26 3592.12 c
-3510.82 3599.96 3501.36 3604.42 3490.09 3604.42 c
-3464.94 3604.42 3448.03 3584.4 3448.03 3554.88 c
-3448.03 3525.5 3464.53 3506.18 3489.49 3506.18 c
-3505.79 3506.18 3515.65 3512.42 3528.73 3531.34 c
-h
-3476 3566 m
-3476.61 3589.96 3480.23 3597.42 3490.09 3597.42 c
-3495.93 3597.42 3499.55 3594.38 3501.16 3588.49 c
-3502.17 3584.67 3502.57 3579.03 3502.97 3568.77 c
-3502.97 3566 l
-h
-3532.35 3509 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -3509]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-1751.75 4758.95 m
-1754.15 4599.35 1794.95 4446.95 1865.75 4338.95 c
-S
-1809.35 4346.15 m
-1858.55 4359.35 l
-1884.95 4403.75 l
-1940.15 4253.75 l
-f*
-32 w
-2733.35 5222.15 m
-2644.55 5277.35 2538.95 5307.35 2430.95 5307.35 c
-2345.75 5307.35 2260.55 5288.15 2184.95 5253.35 c
-S
-2630.15 5194.55 m
-2703.35 5234.15 l
-2729.75 5314.55 l
-2870.15 5096.15 l
-f*
-0.564706 g
-2708.15 3969.35 m
-2573.75 4006.55 l
-2669.75 4061.75 l
-2516.15 4071.35 l
-2558.15 4140.95 l
-2410.55 4120.55 l
-2393.75 4192.55 l
-2273.75 4146.95 l
-2198.15 4210.55 l
-2122.55 4146.95 l
-2002.55 4192.55 l
-1984.55 4120.55 l
-1835.75 4140.95 l
-1880.15 4071.35 l
-1726.55 4061.75 l
-1822.55 4006.55 l
-1686.95 3969.35 l
-1822.55 3934.55 l
-1726.55 3878.15 l
-1880.15 3869.75 l
-1835.75 3800.15 l
-1984.55 3819.35 l
-2002.55 3748.55 l
-2122.55 3792.95 l
-2198.15 3729.35 l
-2273.75 3792.95 l
-2393.75 3748.55 l
-2410.55 3819.35 l
-2558.15 3800.15 l
-2516.15 3869.75 l
-2669.75 3878.15 l
-2573.75 3934.55 l
-f*
-1 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-f*
-0 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-2648.15 4029.35 l
-2609.75 4029.35 l
-2487.35 3998.15 l
-2576.15 3946.55 l
-2438.15 3938.15 l
-2478.95 3872.15 l
-2343.35 3891.35 l
-2326.55 3821.75 l
-2211.35 3864.95 l
-2138.15 3802.55 l
-2064.95 3864.95 l
-1949.75 3821.75 l
-1931.75 3891.35 l
-1796.15 3872.15 l
-1836.95 3938.15 l
-1700.15 3946.55 l
-1788.95 3998.15 l
-1666.55 4029.35 l
-1787.75 4061.75 l
-1700.15 4114.55 l
-1836.95 4121.75 l
-1796.15 4188.95 l
-1931.75 4169.75 l
-1949.75 4238.15 l
-2064.95 4196.15 l
-2138.15 4258.55 l
-2211.35 4196.15 l
-2326.55 4238.15 l
-2343.35 4169.75 l
-2478.95 4188.95 l
-2438.15 4121.75 l
-2576.15 4114.55 l
-2487.35 4061.75 l
-2609.75 4029.35 l
-2648.15 4029.35 l
-f*
-q[1 0 0 1 0 0]concat
-105 70 true[1 0 0 1 -1998 -3991]@85 imagemask
-!$D7 at rVup's8W+L
-!!!"Ks8W+L!$D7 at s53kW!<<*!s53lAs8W,o!!!'"s8W,g!.Y%Ks82is!WW3"s6p#<s8W,u!!!'"s8W,o
-!.Y%Ks8Duu!WW3"s7cSDs8W-!!!!'"s8W,s!.Y%Ks8N'!!WW3"s82kHs8W-!!!!'"s8W,s!.Y%Ks8N'!
-!<<*!s82j]s8W-!!!!"Ks8W,s!$D7 at s8N'!!.Y%Ks82j=s8W-!!!!!`s8W,o!"],0s8Duu!"],0s6p!js8W,s!!!!$
-s8W,7!!*'!s6p!g!!#7`s1eU7J,fP!z+92B1!!*'!rr<$!!!!9(s7cQps8W&uz"98E!!!E9$
-qu?]s!!!'"s8N'(s8Vioz!.Y%KJ.M\[n,NFg!!!!`s8V"!s8V!Wz!$D7 at n3?sQ^]4?7!!!!(
-s8VkDs8RTLz!!E9$rr<#uz!!!!"s8W-!s8Duuz!!%NKs8W,szz5QCc`s7cQoz!!!Q0
-s8W,gzz#QOi(s53kWz!!!-$s8W,7zz!<<*!s*t(Lz!!!"Ks8W*!z
-z!'gM`rVuouz!!!!0s8Vuszz!!iQ(qu?]sz!!!!0s8W&uzz!$D7@
-rr<$!z!!!!`s8W,7zz!.Y%Ks53kWz!!!$!s8W,ozz!WW3"s82isz!!!-$s8W,u
-zz#QOi(s8RTLz!!!Q0s8W-!^]4?7z+92B at s8VQgz!!#7`s6'F^p](9oz
-J,fPds8W&uz!!*'!s+14Mrr<$!!!!!"s8W*!J,fP!z!!E9$rW#1_s53kW!!!!(s8Vus&-)\!
-z!"],0p](R!s82is!!!"Ks8VQg!WW3"J,fQL!WW3"p](Ers8VQg!!!-$s8Vus"98E$p](9o"98E$rW!3's8Vus!!!-$s8W*!&-)\0rVuou#QOi(rr<T0s8W*!!!!9(s8W+L&-)\0rr<$!
-#QOi(s*tX[s8W*!!!!-$s8W+L#QOi(rr<$!"98E$s1em>s8W+L!!!'"s8W+L#QOi(s*t(L!WW3"s*t4O
-s8W*!!!!$!s8W+L!WW3"rr<$!!.Y%Krr<'!s8W&u!!!!`s8W&u!.Y%Kqu?]s!"],0p](:9s8VQg~>
-Q
-0.2 i
-2136 3991 m
-f*
-2159.52 4088.28 m
-2163.68 4088.92 2166.56 4089.08 2169.6 4089.08 c
-2174.56 4089.08 2176.96 4087.32 2176.96 4083.8 c
-2176.96 4082.84 2176.64 4081.4 2176.32 4079.96 c
-2155.84 4006.52 l
-2153.12 3997.72 2148.32 3995 2136.8 3995 c
-2136.8 3991 l
-2192 3991 l
-2192 3995 l
-2179.36 3995.15 2176.48 3996.38 2176.48 4002.04 c
-2176.48 4003.64 2176.64 4004.12 2178.4 4010.68 c
-2203.04 4100.28 l
-2188.48 4096.76 2178.24 4094.68 2159.84 4091.96 c
-h
-2216 3991 m
-f*
-2268.32 4100.24 m
-2259.52 4100.24 2250.72 4096.09 2243.52 4088.76 c
-2228.64 4073.4 2219 4047.64 2219 4023.96 c
-2219 4002.68 2229.13 3988.76 2244.32 3988.76 c
-2250.88 3988.76 2257.12 3990.84 2263.04 3995.16 c
-2279.52 4007 2292 4036.28 2292 4061.72 c
-2292 4085.08 2282.69 4100.24 2268.32 4100.24 c
-h
-2268 4095.24 m
-2272.96 4095.24 2276 4091.07 2276 4084.12 c
-2276 4080.92 2275.13 4075.48 2273.92 4069.24 c
-2271.2 4056.28 2263.52 4026.68 2260.16 4016.44 c
-2254.56 3999.8 2249.92 3993.76 2243.2 3993.76 c
-2238.4 3993.76 2235 3997.78 2235 4003.96 c
-2235 4013.88 2243.42 4049.4 2251.04 4070.84 c
-2257.12 4088.76 2261.92 4095.24 2268 4095.24 c
-h
-2296 3991 m
-f*
-1 i
-1 g
-4058.15 4720.55 m
-4139.75 4720.55 l
-4139.75 4569.35 l
-4306.55 4569.35 l
-4306.55 4720.55 l
-4388.15 4720.55 l
-4222.55 4874.15 l
-f*
-0 g
-4058.15 4720.55 m
-4139.75 4720.55 l
-4139.75 4569.35 l
-4306.55 4569.35 l
-4306.55 4720.55 l
-4388.15 4720.55 l
-4222.55 4874.15 l
-4058.15 4720.55 l
-4083.35 4731.35 l
-4222.55 4860.95 l
-4364.15 4731.35 l
-4295.75 4731.35 l
-4295.75 4580.15 l
-4149.35 4580.15 l
-4149.35 4731.35 l
-4083.35 4731.35 l
-4058.15 4720.55 l
-f*
-0.2 i
-3755.26 5012.36 m
-3744.64 5001.2 3738.88 4996.88 3730.06 4993.46 c
-3724.84 4991.3 3718.9 4990.58 3713.86 4990.58 c
-3701.98 4990.58 3690.64 4996.74 3685.42 5005.88 c
-3680.2 5015.42 3678 5028.2 3678 5046.38 c
-3678 5083.64 3689.23 5103.7 3710.8 5103.7 c
-3719.26 5103.7 3727 5100.38 3734.74 5093.36 c
-3742.48 5086.52 3746.62 5080.4 3752.92 5066.72 c
-3757.42 5066.72 l
-3757.42 5109.16 l
-3752.56 5109.16 l
-3749.86 5102.43 3748.06 5100.56 3744.64 5100.56 c
-3742.84 5100.56 3740.5 5101.28 3736.36 5103.08 c
-3725.92 5107.4 3717.1 5109.7 3708.46 5109.7 c
-3672.64 5109.7 3646 5081.84 3646 5044.76 c
-3646 5007.68 3672.21 4981.58 3709.54 4981.58 c
-3730.24 4981.58 3742.48 4987.88 3760.66 5007.86 c
-h
-3766.96 4985 m
-f*
-3830.18 4982.66 m
-3837.78 4985.36 3842.02 4986.08 3853.5 4987.34 c
-3864.66 4988.6 l
-3864.66 4993 l
-3856.74 4993.35 3855 4995.63 3855 5003.18 c
-3855 5068 l
-3818.4 5068 l
-3818.4 5063.66 l
-3827.4 5062.94 3830 5060.78 3830 5053.04 c
-3830 5002.1 l
-3823.88 4996.16 3820.18 4994.48 3814.8 4994.48 c
-3807.42 4994.48 3805 4998 3805 5006.96 c
-3805 5068 l
-3770.88 5068 l
-3770.88 5063.66 l
-3778.26 5062.22 3780 5060.6 3780 5053.04 c
-3780 5007.68 l
-3780 4991.84 3788.89 4982.48 3803.64 4982.48 c
-3813.16 4982.48 3819.56 4985.36 3830.18 4994.36 c
-h
-3868.08 4985 m
-f*
-3906.28 5068 m
-3872.22 5068 l
-3872.22 5063.66 l
-3879.96 5062.58 3882 5060.24 3882 5053.04 c
-3882 5000.12 l
-3882 4992.74 3880.19 4990.76 3872.22 4989.32 c
-3872.22 4985 l
-3920.1 4985 l
-3920.1 4989.32 l
-3909.12 4990.04 3907 4992.38 3907 5003.54 c
-3907 5037.56 l
-3907 5046.92 3912.02 5054.66 3917.94 5054.66 c
-3919.38 5054.66 3921 5053.4 3922.98 5050.52 c
-3926.4 5045.66 3929.1 5044.04 3933.78 5044.04 c
-3940.44 5044.04 3945.12 5049.08 3945.12 5055.92 c
-3945.12 5064.2 3939 5070.16 3930.54 5070.16 c
-3921.55 5070.16 3914.73 5065.47 3906.28 5053.22 c
-h
-3946.92 4985 m
-f*
-3987.28 5068 m
-3953.22 5068 l
-3953.22 5063.66 l
-3960.96 5062.58 3963 5060.24 3963 5053.04 c
-3963 5000.12 l
-3963 4992.74 3961.19 4990.76 3953.22 4989.32 c
-3953.22 4985 l
-4001.1 4985 l
-4001.1 4989.32 l
-3990.12 4990.04 3988 4992.38 3988 5003.54 c
-3988 5037.56 l
-3988 5046.92 3993.02 5054.66 3998.94 5054.66 c
-4000.38 5054.66 4002 5053.4 4003.98 5050.52 c
-4007.4 5045.66 4010.1 5044.04 4014.78 5044.04 c
-4021.44 5044.04 4026.12 5049.08 4026.12 5055.92 c
-4026.12 5064.2 4020 5070.16 4011.54 5070.16 c
-4002.55 5070.16 3995.73 5065.47 3987.28 5053.22 c
-h
-4027.92 4985 m
-f*
-4099.36 5007.5 m
-4091.98 4998.68 4086.58 4995.48 4078.84 4995.48 c
-4072 4995.48 4066.6 4998.53 4063 5004.62 c
-4059.58 5010.36 4058.14 5016.45 4057.42 5029 c
-4102.78 5029 l
-4101.7 5043.99 4099 5052.3 4093.42 5059.34 c
-4087.66 5066.36 4079.2 5070.16 4069.12 5070.16 c
-4046.62 5070.16 4031.5 5052.33 4031.5 5026.04 c
-4031.5 4999.76 4046.26 4982.48 4068.58 4982.48 c
-4083.16 4982.48 4091.98 4988.06 4103.68 5004.98 c
-h
-4056.52 5036 m
-4057.06 5057.42 4060.3 5064.16 4069.12 5064.16 c
-4074.34 5064.16 4077.58 5061.42 4079.02 5056.1 c
-4079.92 5052.68 4080.28 5047.64 4080.64 5038.46 c
-4080.64 5036 l
-h
-4106.92 4985 m
-f*
-4144.82 5068 m
-4110.78 5068 l
-4110.78 5063.66 l
-4118.7 5062.4 4120 5060.6 4120 5053.04 c
-4120 5000.12 l
-4120 4992.56 4118.61 4990.94 4110.78 4989.32 c
-4110.78 4985 l
-4154.16 4985 l
-4154.16 4989.32 l
-4147.5 4990.22 4145 4992.92 4145 4999.58 c
-4145 5047.64 l
-4145 5048.36 4146.4 5050.16 4148.4 5051.96 c
-4152.36 5055.92 4156.68 5058.16 4161 5058.16 c
-4167.12 5058.16 4170 5053.27 4170 5043.14 c
-4170 4999.58 l
-4170 4992.92 4167.71 4990.04 4161.72 4989.32 c
-4161.72 4985 l
-4204.02 4985 l
-4204.02 4989.32 l
-4197 4989.86 4195 4992.02 4195 4999.58 c
-4195 5044.76 l
-4195 5060.24 4185.54 5070.16 4170.9 5070.16 c
-4159.96 5070.16 4151.57 5065.11 4144.82 5054.48 c
-h
-4207.08 4985 m
-f*
-4261.9 5068 m
-4245 5068 l
-4245 5098.4 l
-4240.48 5098.4 l
-4229.5 5082.92 4222.3 5074.82 4210.6 5064.92 c
-4210.6 5060 l
-4220 5060 l
-4220 5001.74 l
-4220 4990.04 4227.73 4982.84 4240.12 4982.84 c
-4252.18 4982.84 4259.38 4988.24 4266.76 5003 c
-4262.26 5004.98 l
-4258.66 4998.14 4255.78 4995.84 4252 4995.84 c
-4246.96 4995.84 4245 4998.83 4245 5005.88 c
-4245 5060 l
-4261.9 5060 l
-h
-4266.94 4985 m
-f*
-4312 4985 m
-f*
-4417.94 5107 m
-4315.88 5107 l
-4315.88 5102 l
-4328.3 5101.29 4332 5098.63 4332 5089.4 c
-4332 5002.28 l
-4332 4992.92 4329.44 4990.94 4315.88 4989.5 c
-4315.88 4985 l
-4380.68 4985 l
-4380.68 4990 l
-4364.12 4990.69 4361 4992.77 4361 5002.28 c
-4361 5044.22 l
-4379.28 5043.86 4385.91 5037.2 4388.42 5016.32 c
-4392.92 5016.32 l
-4392.92 5077.16 l
-4388.42 5077.16 l
-4385.19 5056.64 4378.92 5050.34 4361 5050.34 c
-4361 5092.1 l
-4361 5098.76 4363.32 5101 4372.4 5101 c
-4389.14 5101 4399.58 5097.8 4405.16 5091.2 c
-4409.12 5086.7 4411.1 5081.84 4413.62 5070.5 c
-4417.94 5070.5 l
-h
-4422.98 4985 m
-f*
-4461.28 5068 m
-4427.22 5068 l
-4427.22 5063.66 l
-4434.96 5062.58 4437 5060.24 4437 5053.04 c
-4437 5000.12 l
-4437 4992.74 4435.19 4990.76 4427.22 4989.32 c
-4427.22 4985 l
-4475.1 4985 l
-4475.1 4989.32 l
-4464.12 4990.04 4462 4992.38 4462 5003.54 c
-4462 5037.56 l
-4462 5046.92 4467.02 5054.66 4472.94 5054.66 c
-4474.38 5054.66 4476 5053.4 4477.98 5050.52 c
-4481.4 5045.66 4484.1 5044.04 4488.78 5044.04 c
-4495.44 5044.04 4500.12 5049.08 4500.12 5055.92 c
-4500.12 5064.2 4494 5070.16 4485.54 5070.16 c
-4476.55 5070.16 4469.73 5065.47 4461.28 5053.22 c
-h
-4501.92 4985 m
-f*
-4587.14 4996.52 m
-4585.34 4994.72 l
-4584.8 4994.18 4584.26 4994 4583.36 4994 c
-4580.84 4994 4580 4995.44 4580 4998.5 c
-4580 5045.48 l
-4580 5060.78 4566.16 5070.16 4543.94 5070.16 c
-4523.6 5070.16 4509.92 5060.97 4509.92 5047.46 c
-4509.92 5039.9 4514.24 5035.58 4521.62 5035.58 c
-4528.82 5035.58 4533.86 5039.9 4533.86 5046.02 c
-4533.86 5048.54 4532.96 5050.88 4530.62 5053.76 c
-4529 5055.56 4528.46 5056.64 4528.46 5057.72 c
-4528.46 5061.5 4533.32 5064.16 4539.8 5064.16 c
-4550.42 5064.16 4555 5059.37 4555 5048.54 c
-4555 5035.4 l
-4533.89 5028.92 4525.41 5025.68 4518.56 5021.18 c
-4510.46 5015.78 4507 5009.48 4507 5001.56 c
-4507 4990.58 4515.07 4982.48 4526.3 4982.48 c
-4536.74 4982.48 4545.02 4986.08 4554.92 4995.08 c
-4556.9 4985.9 4560.86 4982.48 4569.68 4982.48 c
-4577.42 4982.48 4583 4985.36 4589.84 4992.74 c
-h
-4555 5003 m
-4550.04 4997.42 4546.37 4995.26 4541.96 4995.26 c
-4536.56 4995.26 4533 5000.12 4533 5007.32 c
-4533 5017.76 4540.57 5025.14 4555 5029.1 c
-h
-4592 4985 m
-f*
-4629.46 5068 m
-4594.73 5068 l
-4594.73 5063.66 l
-4602.65 5062.58 4605 5060.42 4605 5053.04 c
-4605 5000.12 l
-4605 4992.74 4602.95 4990.76 4594.73 4989.32 c
-4594.73 4985 l
-4637.93 4985 l
-4637.93 4989.32 l
-4631.63 4990.22 4630 4992.74 4630 4999.58 c
-4630 5047.64 l
-4630 5048.54 4632.51 5051.78 4634.51 5053.76 c
-4638.29 5056.64 4641.53 5058.16 4644.77 5058.16 c
-4651.79 5058.16 4655 5054 4655 5043.14 c
-4655 4999.58 l
-4655 4992.2 4652.9 4989.86 4645.85 4989.32 c
-4645.85 4985 l
-4687.97 4985 l
-4687.97 4989.32 l
-4681.67 4990.04 4680 4992.74 4680 4999.58 c
-4680 5047.64 l
-4680 5048.54 4682.43 5051.6 4684.37 5053.58 c
-4688.33 5056.64 4691.57 5058.16 4694.81 5058.16 c
-4701.65 5058.16 4704 5053.82 4704 5043.14 c
-4704 4999.58 l
-4704 4992.02 4702.1 4989.86 4695.53 4989.32 c
-4695.53 4985 l
-4738.37 4985 l
-4738.37 4989 l
-4731.35 4989.37 4729 4991.6 4729 4999.58 c
-4729 5044.76 l
-4729 5060.24 4719.6 5070.16 4705.07 5070.16 c
-4694.81 5070.16 4687.97 5066.01 4678.61 5054.48 c
-4673.21 5065.82 4666.91 5070.16 4655.57 5070.16 c
-4644.2 5070.16 4636.21 5065.29 4629.46 5054.48 c
-h
-4741.94 4985 m
-f*
-4814.36 5007.5 m
-4806.98 4998.68 4801.58 4995.48 4793.84 4995.48 c
-4787 4995.48 4781.6 4998.53 4778 5004.62 c
-4774.58 5010.36 4773.14 5016.45 4772.42 5029 c
-4817.78 5029 l
-4816.7 5043.99 4814 5052.3 4808.42 5059.34 c
-4802.66 5066.36 4794.2 5070.16 4784.12 5070.16 c
-4761.62 5070.16 4746.5 5052.33 4746.5 5026.04 c
-4746.5 4999.76 4761.26 4982.48 4783.58 4982.48 c
-4798.16 4982.48 4806.98 4988.06 4818.68 5004.98 c
-h
-4771.52 5036 m
-4772.06 5057.42 4775.3 5064.16 4784.12 5064.16 c
-4789.34 5064.16 4792.58 5061.42 4794.02 5056.1 c
-4794.92 5052.68 4795.28 5047.64 4795.64 5038.46 c
-4795.64 5036 l
-h
-4821.92 4985 m
-f*
-1 i
-3636.95 4949.75 1184.4 15.5999 re
-f
-0.2 i
-1323.88 5932 m
-1323.88 5927 l
-1336.3 5926.29 1340 5923.45 1340 5914.4 c
-1340 5827.28 l
-1340 5818.1 1337.25 5815.94 1323.88 5814.5 c
-1323.88 5810 l
-1381.84 5810 l
-1412.26 5810 1432 5823.5 1432 5843.84 c
-1432 5852.12 1428.73 5859.32 1422.7 5864.9 c
-1416.4 5870.48 1410.28 5873 1397.68 5875.7 c
-1418.56 5881.82 1426 5889.2 1426 5902.88 c
-1426 5921.42 1409.55 5932 1379.5 5932 c
-h
-1369 5871.74 m
-1373.92 5871.74 l
-1392.46 5871.74 1401 5862.2 1401 5842.22 c
-1401 5824.76 1393.77 5816 1379.5 5816 c
-1371.58 5816 1369 5818.99 1369 5826.74 c
-h
-1369 5917.46 m
-1369 5923.94 1371.39 5927 1378.24 5927 c
-1390.84 5927 1397 5919.03 1397 5901.62 c
-1397 5882.72 1391.08 5877.68 1369 5877.14 c
-h
-1441.06 5810 m
-f*
-1526.14 5821.52 m
-1524.34 5819.72 l
-1523.8 5819.18 1523.26 5819 1522.36 5819 c
-1519.84 5819 1519 5820.44 1519 5823.5 c
-1519 5870.48 l
-1519 5885.78 1505.16 5895.16 1482.94 5895.16 c
-1462.6 5895.16 1448.92 5885.97 1448.92 5872.46 c
-1448.92 5864.9 1453.24 5860.58 1460.62 5860.58 c
-1467.82 5860.58 1472.86 5864.9 1472.86 5871.02 c
-1472.86 5873.54 1471.96 5875.88 1469.62 5878.76 c
-1468 5880.56 1467.46 5881.64 1467.46 5882.72 c
-1467.46 5886.5 1472.32 5889.16 1478.8 5889.16 c
-1489.42 5889.16 1494 5884.37 1494 5873.54 c
-1494 5860.4 l
-1472.89 5853.92 1464.41 5850.68 1457.56 5846.18 c
-1449.46 5840.78 1446 5834.48 1446 5826.56 c
-1446 5815.58 1454.07 5807.48 1465.3 5807.48 c
-1475.74 5807.48 1484.02 5811.08 1493.92 5820.08 c
-1495.9 5810.9 1499.86 5807.48 1508.68 5807.48 c
-1516.42 5807.48 1522 5810.36 1528.84 5817.74 c
-h
-1494 5828 m
-1489.04 5822.42 1485.37 5820.26 1480.96 5820.26 c
-1475.56 5820.26 1472 5825.12 1472 5832.32 c
-1472 5842.76 1479.57 5850.14 1494 5854.1 c
-h
-1531 5810 m
-f*
-1592.22 5868.68 m
-1592.22 5894.8 l
-1588.24 5894.8 l
-1587.16 5892.08 1586.08 5891.2 1583.74 5891.2 c
-1582.66 5891.2 1581.04 5891.55 1578.16 5892.44 c
-1572.4 5894.42 1568.26 5895.16 1564.12 5895.16 c
-1547.74 5895.16 1536 5883.99 1536 5868.86 c
-1536 5856.98 1543.34 5848.7 1561.42 5840.96 c
-1573.84 5835.56 1579 5831.06 1579 5825.3 c
-1579 5818.28 1573.48 5813.48 1565.2 5813.48 c
-1552.6 5813.48 1544.32 5821.62 1540.54 5837.36 c
-1535.5 5837.36 l
-1535.5 5807.66 l
-1540 5807.66 l
-1541.98 5811.44 1543.06 5812.7 1544.68 5812.7 c
-1545.58 5812.7 1547.02 5812.34 1548.82 5811.62 c
-1554.04 5809.46 1563.22 5807.48 1568.26 5807.48 c
-1584.64 5807.48 1596 5818.64 1596 5834.84 c
-1596 5847.62 1589.15 5855.54 1571.14 5862.92 c
-1558.9 5868.14 1554 5872.64 1554 5878.76 c
-1554 5884.7 1558.98 5889.16 1565.74 5889.16 c
-1570.6 5889.16 1575.28 5887.19 1579.24 5883.44 c
-1583.02 5879.84 1585 5876.42 1587.7 5868.68 c
-h
-1601.02 5810 m
-f*
-1673.36 5832.5 m
-1665.98 5823.68 1660.58 5820.48 1652.84 5820.48 c
-1646 5820.48 1640.6 5823.53 1637 5829.62 c
-1633.58 5835.36 1632.14 5841.45 1631.42 5854 c
-1676.78 5854 l
-1675.7 5868.99 1673 5877.3 1667.42 5884.34 c
-1661.66 5891.36 1653.2 5895.16 1643.12 5895.16 c
-1620.62 5895.16 1605.5 5877.33 1605.5 5851.04 c
-1605.5 5824.76 1620.26 5807.48 1642.58 5807.48 c
-1657.16 5807.48 1665.98 5813.06 1677.68 5829.98 c
-h
-1630.52 5861 m
-1631.06 5882.42 1634.3 5889.16 1643.12 5889.16 c
-1648.34 5889.16 1651.58 5886.42 1653.02 5881.1 c
-1653.92 5877.68 1654.28 5872.64 1654.64 5863.46 c
-1654.64 5861 l
-h
-1680.92 5810 m
-f*
-1726 5810 m
-f*
-1831.94 5932 m
-1729.88 5932 l
-1729.88 5927 l
-1742.3 5926.29 1746 5923.63 1746 5914.4 c
-1746 5827.28 l
-1746 5817.92 1743.44 5815.94 1729.88 5814.5 c
-1729.88 5810 l
-1794.68 5810 l
-1794.68 5815 l
-1778.12 5815.69 1775 5817.77 1775 5827.28 c
-1775 5869.22 l
-1793.28 5868.86 1799.91 5862.2 1802.42 5841.32 c
-1806.92 5841.32 l
-1806.92 5902.16 l
-1802.42 5902.16 l
-1799.19 5881.64 1792.92 5875.34 1775 5875.34 c
-1775 5917.1 l
-1775 5923.76 1777.32 5926 1786.4 5926 c
-1803.14 5926 1813.58 5922.8 1819.16 5916.2 c
-1823.12 5911.7 1825.1 5906.84 1827.62 5895.5 c
-1831.94 5895.5 l
-h
-1836.98 5810 m
-f*
-1875.28 5893 m
-1841.22 5893 l
-1841.22 5888.66 l
-1848.96 5887.58 1851 5885.24 1851 5878.04 c
-1851 5825.12 l
-1851 5817.74 1849.19 5815.76 1841.22 5814.32 c
-1841.22 5810 l
-1889.1 5810 l
-1889.1 5814.32 l
-1878.12 5815.04 1876 5817.38 1876 5828.54 c
-1876 5862.56 l
-1876 5871.92 1881.02 5879.66 1886.94 5879.66 c
-1888.38 5879.66 1890 5878.4 1891.98 5875.52 c
-1895.4 5870.66 1898.1 5869.04 1902.78 5869.04 c
-1909.44 5869.04 1914.12 5874.08 1914.12 5880.92 c
-1914.12 5889.2 1908 5895.16 1899.54 5895.16 c
-1890.55 5895.16 1883.73 5890.47 1875.28 5878.22 c
-h
-1915.92 5810 m
-f*
-2001.14 5821.52 m
-1999.34 5819.72 l
-1998.8 5819.18 1998.26 5819 1997.36 5819 c
-1994.84 5819 1994 5820.44 1994 5823.5 c
-1994 5870.48 l
-1994 5885.78 1980.16 5895.16 1957.94 5895.16 c
-1937.6 5895.16 1923.92 5885.97 1923.92 5872.46 c
-1923.92 5864.9 1928.24 5860.58 1935.62 5860.58 c
-1942.82 5860.58 1947.86 5864.9 1947.86 5871.02 c
-1947.86 5873.54 1946.96 5875.88 1944.62 5878.76 c
-1943 5880.56 1942.46 5881.64 1942.46 5882.72 c
-1942.46 5886.5 1947.32 5889.16 1953.8 5889.16 c
-1964.42 5889.16 1969 5884.37 1969 5873.54 c
-1969 5860.4 l
-1947.89 5853.92 1939.41 5850.68 1932.56 5846.18 c
-1924.46 5840.78 1921 5834.48 1921 5826.56 c
-1921 5815.58 1929.07 5807.48 1940.3 5807.48 c
-1950.74 5807.48 1959.02 5811.08 1968.92 5820.08 c
-1970.9 5810.9 1974.86 5807.48 1983.68 5807.48 c
-1991.42 5807.48 1997 5810.36 2003.84 5817.74 c
-h
-1969 5828 m
-1964.04 5822.42 1960.37 5820.26 1955.96 5820.26 c
-1950.56 5820.26 1947 5825.12 1947 5832.32 c
-1947 5842.76 1954.57 5850.14 1969 5854.1 c
-h
-2006 5810 m
-f*
-2043.46 5893 m
-2008.73 5893 l
-2008.73 5888.66 l
-2016.65 5887.58 2019 5885.42 2019 5878.04 c
-2019 5825.12 l
-2019 5817.74 2016.95 5815.76 2008.73 5814.32 c
-2008.73 5810 l
-2051.93 5810 l
-2051.93 5814.32 l
-2045.63 5815.22 2044 5817.74 2044 5824.58 c
-2044 5872.64 l
-2044 5873.54 2046.51 5876.78 2048.51 5878.76 c
-2052.29 5881.64 2055.53 5883.16 2058.77 5883.16 c
-2065.79 5883.16 2069 5879 2069 5868.14 c
-2069 5824.58 l
-2069 5817.2 2066.9 5814.86 2059.85 5814.32 c
-2059.85 5810 l
-2101.97 5810 l
-2101.97 5814.32 l
-2095.67 5815.04 2094 5817.74 2094 5824.58 c
-2094 5872.64 l
-2094 5873.54 2096.43 5876.6 2098.37 5878.58 c
-2102.33 5881.64 2105.57 5883.16 2108.81 5883.16 c
-2115.65 5883.16 2118 5878.82 2118 5868.14 c
-2118 5824.58 l
-2118 5817.02 2116.1 5814.86 2109.53 5814.32 c
-2109.53 5810 l
-2152.37 5810 l
-2152.37 5814 l
-2145.35 5814.37 2143 5816.6 2143 5824.58 c
-2143 5869.76 l
-2143 5885.24 2133.6 5895.16 2119.07 5895.16 c
-2108.81 5895.16 2101.97 5891.01 2092.61 5879.48 c
-2087.21 5890.82 2080.91 5895.16 2069.57 5895.16 c
-2058.2 5895.16 2050.21 5890.29 2043.46 5879.48 c
-h
-2155.94 5810 m
-f*
-2228.36 5832.5 m
-2220.98 5823.68 2215.58 5820.48 2207.84 5820.48 c
-2201 5820.48 2195.6 5823.53 2192 5829.62 c
-2188.58 5835.36 2187.14 5841.45 2186.42 5854 c
-2231.78 5854 l
-2230.7 5868.99 2228 5877.3 2222.42 5884.34 c
-2216.66 5891.36 2208.2 5895.16 2198.12 5895.16 c
-2175.62 5895.16 2160.5 5877.33 2160.5 5851.04 c
-2160.5 5824.76 2175.26 5807.48 2197.58 5807.48 c
-2212.16 5807.48 2220.98 5813.06 2232.68 5829.98 c
-h
-2185.52 5861 m
-2186.06 5882.42 2189.3 5889.16 2198.12 5889.16 c
-2203.34 5889.16 2206.58 5886.42 2208.02 5881.1 c
-2208.92 5877.68 2209.28 5872.64 2209.64 5863.46 c
-2209.64 5861 l
-h
-2235.92 5810 m
-f*
-1 i
-1320.95 5775.35 914.4 15.5999 re
-f
-1 g
-1773.35 5370.95 m
-1937.75 5522.15 l
-1856.15 5522.15 l
-1856.15 5675.75 l
-1689.35 5675.75 l
-1689.35 5522.15 l
-1607.75 5522.15 l
-f*
-0 g
-1773.35 5370.95 m
-1937.75 5522.15 l
-1856.15 5522.15 l
-1856.15 5675.75 l
-1689.35 5675.75 l
-1689.35 5522.15 l
-1607.75 5522.15 l
-1773.35 5370.95 l
-1773.35 5384.15 l
-1634.15 5512.55 l
-1700.15 5512.55 l
-1700.15 5666.15 l
-1846.55 5666.15 l
-1846.55 5512.55 l
-1912.55 5512.55 l
-1773.35 5384.15 l
-1773.35 5370.95 l
-f*
-0.201248 i
-3939.33 5883 m
-3825.22 5883 l
-3825.22 5878 l
-3839.11 5877.2 3843 5874.18 3843 5863.72 c
-3843 5766.32 l
-3843 5755.85 3840.17 5753.64 3825.22 5752.03 c
-3825.22 5747 l
-3897.67 5747 l
-3897.67 5752 l
-3879.15 5752.81 3876 5755.23 3876 5766.32 c
-3876 5813.21 l
-3896.22 5812.81 3903.55 5805.36 3906.32 5782.02 c
-3911.35 5782.02 l
-3911.35 5850.04 l
-3906.32 5850.04 l
-3902.76 5827.1 3895.82 5820.05 3876 5820.05 c
-3876 5866.74 l
-3876 5874.19 3878.52 5876 3888.41 5876 c
-3907.13 5876 3918.8 5872.64 3925.04 5865.74 c
-3929.47 5860.71 3931.68 5855.27 3934.5 5842.59 c
-3939.33 5842.59 l
-h
-3944.96 5747 m
-f*
-3989.19 5840 m
-3950.84 5840 l
-3950.84 5834.95 l
-3959.49 5833.74 3962 5831.12 3962 5823.07 c
-3962 5763.9 l
-3962 5755.65 3959.93 5753.44 3950.84 5751.83 c
-3950.84 5747 l
-4004.37 5747 l
-4004.37 5751.83 l
-3992.09 5752.63 3990 5755.25 3990 5767.73 c
-3990 5805.76 l
-3990 5816.23 3995.49 5824.88 4001.95 5824.88 c
-4003.56 5824.88 4005.37 5823.47 4007.59 5820.25 c
-4011.41 5814.82 4014.43 5813.01 4019.66 5813.01 c
-4027.11 5813.01 4032.34 5818.64 4032.34 5826.29 c
-4032.34 5835.55 4025.5 5842.41 4016.04 5842.41 c
-4006.1 5842.41 3998.54 5837.12 3989.19 5823.27 c
-h
-4034.35 5747 m
-f*
-4129.19 5759.88 m
-4127.18 5757.87 l
-4126.57 5757.26 4125.97 5757.06 4124.96 5757.06 c
-4122.15 5757.06 4121 5758.67 4121 5762.09 c
-4121 5814.62 l
-4121 5831.73 4105.6 5842.42 4080.89 5842.42 c
-4058.15 5842.42 4042.85 5832.06 4042.85 5816.83 c
-4042.85 5808.38 4047.69 5803.55 4055.94 5803.55 c
-4063.99 5803.55 4069.62 5808.38 4069.62 5815.22 c
-4069.62 5818.04 4068.61 5820.66 4066 5823.88 c
-4064.19 5825.89 4063.58 5827.1 4063.58 5828.3 c
-4063.58 5832.53 4069.02 5835.42 4076.26 5835.42 c
-4088.14 5835.42 4093.86 5830.08 4093.86 5818.04 c
-4093.86 5803.35 l
-4069.91 5796.1 4060.29 5792.48 4052.51 5787.45 c
-4043.46 5781.41 4039 5774.37 4039 5765.52 c
-4039 5753.24 4048.27 5744.18 4061.17 5744.18 c
-4072.84 5744.18 4082.1 5748.21 4093.17 5758.27 c
-4095.38 5748.01 4099.81 5744.18 4109.67 5744.18 c
-4118.32 5744.18 4124.56 5747.4 4132.21 5755.65 c
-h
-4093 5767.13 m
-4087.55 5760.89 4083.52 5758.47 4078.68 5758.47 c
-4072.64 5758.47 4068 5763.91 4068 5771.96 c
-4068 5783.63 4076.61 5791.88 4093 5796.31 c
-h
-4134.62 5747 m
-f*
-4176.4 5840 m
-4137.7 5840 l
-4137.7 5834.95 l
-4146.55 5833.74 4149 5831.32 4149 5823.07 c
-4149 5763.9 l
-4149 5755.65 4146.74 5753.44 4137.7 5751.83 c
-4137.7 5747 l
-4186 5747 l
-4186 5751.83 l
-4178.95 5752.84 4177 5755.65 4177 5763.3 c
-4177 5817.03 l
-4177 5818.04 4179.87 5821.66 4182.18 5823.88 c
-4186.4 5827.1 4190.02 5829.42 4193.65 5829.42 c
-4201.5 5829.42 4205 5824.59 4205 5812 c
-4205 5763.3 l
-4205 5755.05 4202.68 5752.43 4194.85 5751.83 c
-4194.85 5747 l
-4241.95 5747 l
-4241.95 5751.83 l
-4234.9 5752.64 4233 5755.65 4233 5763.3 c
-4233 5817.03 l
-4233 5818.04 4235.73 5821.46 4237.92 5823.68 c
-4242.35 5827.1 4245.97 5829.42 4249.59 5829.42 c
-4257.24 5829.42 4260 5824.38 4260 5812 c
-4260 5763.3 l
-4260 5754.85 4257.85 5752.43 4250.4 5751.83 c
-4250.4 5747 l
-4298.3 5747 l
-4298.3 5752 l
-4290.45 5752.4 4288 5754.78 4288 5763.3 c
-4288 5813.81 l
-4288 5831.12 4277.43 5842.42 4261.07 5842.42 c
-4249.59 5842.42 4241.95 5837.73 4231.48 5824.68 c
-4225.44 5837.36 4218.4 5842.42 4205.72 5842.42 c
-4192.95 5842.42 4183.98 5836.91 4176.4 5824.68 c
-h
-4301.64 5747 m
-f*
-4379.9 5772.16 m
-4371.65 5762.29 4365.61 5758.18 4356.96 5758.18 c
-4349.31 5758.18 4343.27 5761.77 4339.25 5768.94 c
-4335.43 5775.54 4333.82 5782.56 4333.01 5797 c
-4383.73 5797 l
-4382.52 5813.36 4379.5 5822.43 4373.26 5830.12 c
-4366.82 5837.96 4357.36 5842.42 4346.09 5842.42 c
-4320.94 5842.42 4304.03 5822.4 4304.03 5792.88 c
-4304.03 5763.5 4320.53 5744.18 4345.49 5744.18 c
-4361.79 5744.18 4371.65 5750.42 4384.73 5769.34 c
-h
-4332 5804 m
-4332.61 5827.96 4336.23 5835.42 4346.09 5835.42 c
-4351.93 5835.42 4355.55 5832.38 4357.16 5826.49 c
-4358.17 5822.67 4358.57 5817.03 4358.97 5806.77 c
-4358.97 5804 l
-h
-4388.35 5747 m
-f*
-4485.16 5842.59 m
-4485.16 5886.22 l
-4479.37 5886.22 l
-4477.96 5880.82 4476.55 5879.42 4472.93 5879.42 c
-4471.12 5879.42 4468.7 5880.03 4464.47 5881.43 c
-4455.22 5884.86 4448.78 5886.02 4440.93 5886.02 c
-4413.56 5886.02 4397 5870.54 4397 5845.01 c
-4397 5839.98 4397.75 5835.75 4399.07 5831.73 c
-4403.29 5821.06 4414.16 5811.6 4431.27 5803.35 c
-4444.75 5796.91 l
-4462.46 5788.46 4467 5783.22 4467 5772.56 c
-4467 5758.67 4457.25 5750.18 4441.94 5750.18 c
-4430.26 5750.18 4420.6 5754.89 4412.96 5764.31 c
-4407.12 5771.75 4404.3 5778.6 4400.88 5792.88 c
-4395.04 5792.88 l
-4395.04 5743.18 l
-4400.88 5743.18 l
-4402.09 5748.41 4403.7 5750.02 4406.92 5750.02 c
-4408.53 5750.02 4410.74 5749.42 4415.17 5748.01 c
-4425.03 5744.59 4432.48 5743.18 4441.33 5743.18 c
-4471.12 5743.18 4491 5760.28 4491 5785.64 c
-4491 5800.73 4482.04 5815.83 4469.1 5822.27 c
-4439.52 5836.96 l
-4423.22 5845.01 4419 5849.84 4419 5859.7 c
-4419 5872.18 4427.37 5879.02 4440.93 5879.02 c
-4449.99 5879.02 4458.44 5875.47 4465.68 5868.55 c
-4472.53 5861.51 4475.75 5855.67 4479.77 5842.59 c
-h
-4499.89 5747 m
-f*
-4580.9 5772.16 m
-4572.65 5762.29 4566.61 5758.18 4557.96 5758.18 c
-4550.31 5758.18 4544.27 5761.77 4540.25 5768.94 c
-4536.43 5775.54 4534.82 5782.56 4534.01 5797 c
-4584.73 5797 l
-4583.52 5813.36 4580.5 5822.43 4574.26 5830.12 c
-4567.82 5837.96 4558.36 5842.42 4547.09 5842.42 c
-4521.94 5842.42 4505.03 5822.4 4505.03 5792.88 c
-4505.03 5763.5 4521.53 5744.18 4546.49 5744.18 c
-4562.79 5744.18 4572.65 5750.42 4585.73 5769.34 c
-h
-4533 5804 m
-4533.61 5827.96 4537.23 5835.42 4547.09 5835.42 c
-4552.93 5835.42 4556.55 5832.38 4558.16 5826.49 c
-4559.17 5822.67 4559.57 5817.03 4559.97 5806.77 c
-4559.97 5804 l
-h
-4589.35 5747 m
-f*
-4650.38 5840 m
-4631 5840 l
-4631 5873.79 l
-4626.43 5873.79 l
-4614.16 5856.48 4606.11 5847.42 4593.02 5836.35 c
-4593.02 5831 l
-4603 5831 l
-4603 5765.72 l
-4603 5752.64 4611.84 5744.59 4626.03 5744.59 c
-4639.51 5744.59 4647.56 5750.62 4655.81 5767.12 c
-4650.78 5769.34 l
-4646.76 5761.69 4643.54 5758.59 4639.31 5758.59 c
-4633.68 5758.59 4631 5762.09 4631 5770.34 c
-4631 5831 l
-4650.38 5831 l
-h
-4656.02 5747 m
-f*
-1 i
-8 w
-2213.75 3834.95 m
-2280.95 3696.95 2475.35 3592.55 2718.95 3562.55 c
-S
-2678.15 3520.55 m
-2700.95 3567.35 l
-2687.75 3616.55 l
-2835.35 3556.55 l
-f*
-0.564706 g
-3686.15 4768.55 m
-3542.15 4810.55 l
-3645.35 4877.75 l
-3480.95 4887.35 l
-3527.75 4968.95 l
-3369.35 4946.15 l
-3351.35 5030.15 l
-3221.75 4977.35 l
-3143.75 5050.55 l
-3062.15 4977.35 l
-2933.75 5030.15 l
-2914.55 4946.15 l
-2757.35 4968.95 l
-2804.15 4887.35 l
-2639.75 4877.75 l
-2741.75 4810.55 l
-2598.95 4768.55 l
-2741.75 4728.95 l
-2639.75 4661.75 l
-2804.15 4652.15 l
-2757.35 4570.55 l
-2914.55 4594.55 l
-2933.75 4509.35 l
-3062.15 4562.15 l
-3143.75 4488.95 l
-3221.75 4562.15 l
-3351.35 4509.35 l
-3369.35 4594.55 l
-3527.75 4570.55 l
-3480.95 4652.15 l
-3645.35 4661.75 l
-3542.15 4728.95 l
-f*
-1 g
-3626.15 4828.55 m
-3482.15 4870.55 l
-3585.35 4937.75 l
-3420.95 4947.35 l
-3467.75 5028.95 l
-3309.35 5006.15 l
-3291.35 5090.15 l
-3161.75 5037.35 l
-3083.75 5110.55 l
-3002.15 5037.35 l
-2873.75 5090.15 l
-2854.55 5006.15 l
-2697.35 5028.95 l
-2744.15 4947.35 l
-2579.75 4937.75 l
-2681.75 4870.55 l
-2538.95 4828.55 l
-2681.75 4788.95 l
-2579.75 4721.75 l
-2744.15 4712.15 l
-2697.35 4630.55 l
-2854.55 4654.55 l
-2873.75 4569.35 l
-3002.15 4622.15 l
-3083.75 4548.95 l
-3161.75 4622.15 l
-3291.35 4569.35 l
-3309.35 4654.55 l
-3467.75 4630.55 l
-3420.95 4712.15 l
-3585.35 4721.75 l
-3482.15 4788.95 l
-f*
-0 g
-3626.15 4828.55 m
-3482.15 4870.55 l
-3585.35 4937.75 l
-3420.95 4947.35 l
-3467.75 5028.95 l
-3309.35 5006.15 l
-3291.35 5090.15 l
-3161.75 5037.35 l
-3083.75 5110.55 l
-3002.15 5037.35 l
-2873.75 5090.15 l
-2854.55 5006.15 l
-2697.35 5028.95 l
-2744.15 4947.35 l
-2579.75 4937.75 l
-2681.75 4870.55 l
-2538.95 4828.55 l
-2681.75 4788.95 l
-2579.75 4721.75 l
-2744.15 4712.15 l
-2697.35 4630.55 l
-2854.55 4654.55 l
-2873.75 4569.35 l
-3002.15 4622.15 l
-3083.75 4548.95 l
-3161.75 4622.15 l
-3291.35 4569.35 l
-3309.35 4654.55 l
-3467.75 4630.55 l
-3420.95 4712.15 l
-3585.35 4721.75 l
-3482.15 4788.95 l
-3626.15 4828.55 l
-3480.95 4829.75 l
-3386.15 4803.35 l
-3460.55 4754.15 l
-3354.95 4748.15 l
-3392.15 4682.15 l
-3278.15 4700.15 l
-3262.55 4624.55 l
-3153.35 4668.95 l
-3083.75 4601.75 l
-3010.55 4668.95 l
-2902.55 4624.55 l
-2885.75 4700.15 l
-2771.75 4682.15 l
-2810.15 4748.15 l
-2703.35 4754.15 l
-2778.95 4803.35 l
-2684.15 4829.75 l
-2777.75 4857.35 l
-2703.35 4904.15 l
-2810.15 4911.35 l
-2771.75 4977.35 l
-2885.75 4960.55 l
-2902.55 5034.95 l
-3010.55 4990.55 l
-3083.75 5057.75 l
-3153.35 4990.55 l
-3262.55 5034.95 l
-3278.15 4960.55 l
-3392.15 4977.35 l
-3354.95 4911.35 l
-3460.55 4904.15 l
-3387.35 4857.35 l
-3480.95 4829.75 l
-3626.15 4828.55 l
-f*
-q[1 0 0 1 0 0]concat
-105 70 true[1 0 0 1 -2961 -4787]@85 imagemask
-!$D7 at rVup's8W+L
-!!!"Ks8W+L!$D7 at s53kW!<<*!s53lAs8W,o!!!'"s8W,g!.Y%Ks82is!WW3"s6p#<s8W,u!!!'"s8W,o
-!.Y%Ks8Duu!WW3"s7cSDs8W-!!!!'"s8W,s!.Y%Ks8N'!!WW3"s82kHs8W-!!!!'"s8W,s!.Y%Ks8N'!
-!<<*!s82j]s8W-!!!!"Ks8W,s!$D7 at s8N'!!.Y%Ks82j=s8W-!!!!!`s8W,o!"],0s8Duu!"],0s6p!js8W,s!!!!$
-s8W,7!!*'!s6p!g!!#7`s1eU7J,fP!z+92B1!!*'!rr<$!!!!9(s7cQps8W&uz"98E!!!E9$
-qu?]s!!!'"s8N'(s8Vioz!.Y%KJ.M\[n,NFg!!!!`s8V"!s8V!Wz!$D7 at n3?sQ^]4?7!!!!(
-s8VkDs8RTLz!!E9$rr<#uz!!!!"s8W-!s8Duuz!!%NKs8W,szz5QCc`s7cQoz!!!Q0
-s8W,gzz#QOi(s53kWz!!!-$s8W,7zz!<<*!s*t(Lz!!!"Ks8W*!z
-z!'gM`rVuouz!!!!0s8Vuszz!!iQ(qu?]sz!!!!0s8W&uzz!$D7@
-rr<$!z!!!!`s8W,7zz!.Y%Ks53kWz!!!$!s8W,ozz!WW3"s82isz!!!-$s8W,u
-zz#QOi(s8RTLz!!!Q0s8W-!^]4?7z+92B at s8VQgz!!#7`s6'F^p](9oz
-J,fPds8W&uz!!*'!s+14Mrr<$!!!!!"s8W*!J,fP!z!!E9$rW#1_s53kW!!!!(s8Vus&-)\!
-z!"],0p](R!s82is!!!"Ks8VQg!WW3"J,fQL!WW3"p](Ers8VQg!!!-$s8Vus"98E$p](9o"98E$rW!3's8Vus!!!-$s8W*!&-)\0rVuou#QOi(rr<T0s8W*!!!!9(s8W+L&-)\0rr<$!
-#QOi(s*tX[s8W*!!!!-$s8W+L#QOi(rr<$!"98E$s1em>s8W+L!!!'"s8W+L#QOi(s*t(L!WW3"s*t4O
-s8W*!!!!$!s8W+L!WW3"rr<$!!.Y%Krr<'!s8W&u!!!!`s8W&u!.Y%Kqu?]s!"],0p](:9s8VQg~>
-Q
-0.2 i
-3099 4787 m
-f*
-3129.52 4877 m
-3170.16 4877 l
-3175.92 4894 l
-3130.64 4894 l
-3109.68 4846.52 l
-3120.08 4846.04 3125.04 4845.08 3130.96 4842.04 c
-3141.2 4836.92 3147 4827.64 3147 4817.24 c
-3147 4803.48 3136.98 4790.92 3125.68 4790.92 c
-3122.16 4790.92 3120.4 4792.44 3117.04 4798.2 c
-3113.2 4804.6 3110.48 4806.68 3105.68 4806.68 c
-3100.08 4806.68 3096.24 4803 3096.24 4797.56 c
-3096.24 4789.88 3104.56 4784.92 3117.2 4784.92 c
-3143.6 4784.92 3164 4803.32 3164 4827.16 c
-3164 4839.32 3158.69 4849.56 3149.04 4855.96 c
-3143.44 4859.8 3139.12 4861.24 3124.08 4864.44 c
-h
-3178 4787 m
-f*
-1 i
-32 w
-3191.75 4581.35 m
-3269.75 4442.15 3400.55 4336.55 3557.75 4284.95 c
-S
-3483.35 4228.55 m
-3531.35 4298.15 l
-3516.95 4380.95 l
-3742.55 4252.55 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 2006 a(Figure)24 b(11:)38 b(An)23 b(example)i(F)-8
-b(rameSet,)26 b(in)d(whic)m(h)g(F)-8 b(rames)25 b(2)f(and)f(3)h(are)f
-(related)i(to)f(F)-8 b(rame)25 b(1)f(b)m(y)f(m)m(ultiplying)0
-2119 y(its)29 b(co)s(ordinates)g(b)m(y)f(factors)h(of)f(10)h(and)f(5)g
-(resp)s(ectiv)m(ely)-8 b(.)42 b(The)28 b(F)-8 b(rameSet's)29
-b(Base)h(attribute)f(has)f(the)g(v)-5 b(alue)0 2232 y(1)31
-b(and)e(its)i(Curren)m(t)f(attribute)h(has)f(the)g(v)-5
-b(alue)31 b(3.)41 b(The)30 b(transformation)h(p)s(erformed)d(when)i
-(the)g(F)-8 b(rameSet)0 2345 y(is)30 b(used)g(as)h(a)f(Mapping)h(\()p
-Fx(i.e.)f FG(from)g(its)g(base)h(to)g(its)g(curren)m(t)f(F)-8
-b(rame\))32 b(is)e(sho)m(wn)g(in)g(b)s(old.)0 2699 y(When)35
-b(a)h(F)-8 b(rame)37 b(is)e(added,)i(w)m(e)f(also)g(ha)m(v)m(e)h(to)f
-(sp)s(ecify)f(whic)m(h)h(of)f(the)h(existing)h(ones)e(the)h(new)f(F)-8
-b(rame)36 b(is)0 2811 y(related)h(to.)57 b(Here,)38 b(w)m(e)e(c)m(hose)
-h(n)m(um)m(b)s(er)d(1,)k(the)d(only)h(one)g(presen)m(t)g(so)g(far,)h
-(and)e(the)h(new)f(one)h(w)m(e)g(added)0 2924 y(b)s(ecame)31
-b(n)m(um)m(b)s(er)e(2.)0 3074 y(Note)36 b(that)f(a)f(F)-8
-b(rameSet)36 b(do)s(es)e(not)h(mak)m(e)g(copies)g(of)g(the)f(F)-8
-b(rames)36 b(and)d(Mappings)h(that)h(y)m(ou)g(insert)f(in)m(to)0
-3187 y(it.)61 b(Instead,)39 b(it)e(holds)g(p)s(oin)m(ters)g(to)g(them.)
-61 b(This)36 b(means)h(that)h(if)f(y)m(ou)g(retain)h(the)f(original)h
-(p)s(oin)m(ters)f(to)0 3300 y(these)30 b(Ob)5 b(jects)30
-b(and)f(alter)h(them,)g(y)m(ou)g(will)g(indirectly)g(b)s(e)f(altering)i
-(the)f(F)-8 b(rameSet's)31 b(con)m(ten)m(ts.)42 b(Y)-8
-b(ou)30 b(can,)0 3413 y(of)f(course,)g(alw)m(a)m(ys)i(use)d(AST)p
-Fy(_)p FG(COPY)f(\()p Fu(x)p FG(4.12\))32 b(to)d(mak)m(e)h(a)f
-(separate)h(cop)m(y)f(of)g(an)m(y)g(Ob)5 b(ject)29 b(if)g(y)m(ou)g
-(need)g(to)0 3526 y(ensure)h(its)g(indep)s(endence.)0
-3676 y(W)-8 b(e)41 b(could)e(also)i(add)e(a)h(third)e(F)-8
-b(rame)41 b(in)m(to)f(our)f(F)-8 b(rameSet,)44 b(this)39
-b(time)h(de\014ning)f(a)h(co)s(ordinate)g(system)0 3789
-y(whic)m(h)30 b(is)h(reac)m(hed)g(b)m(y)f(m)m(ultiplying)h(the)f
-(original)i(co)s(ordinates)f(\(of)g(FRAME1\))h(b)m(y)e(5:)262
-3986 y Ft(CALL)41 b(AST_ADDFRAME\()e(FRAMESET,)h(1,)218
-4086 y(:)828 b(AST_ZOOMMAP\()38 b(2,)43 b(5.0D0,)e(')i(',)g(STATUS)e
-(\),)218 4185 y(:)828 b(AST_FRAME\()39 b(2,)k('Domain=C',)c(STATUS)i
-(\),)218 4285 y(:)828 b(STATUS)41 b(\))0 4496 y FG(Here,)49
-b(w)m(e)c(ha)m(v)m(e)g(a)m(v)m(oided)h(storing)f(unnecessary)f(p)s(oin)
-m(ter)g(v)-5 b(alues)45 b(b)m(y)f(using)g(function)g(in)m(v)m(o)s
-(cations)i(di-)0 4609 y(rectly)32 b(as)g(argumen)m(ts)f(for)g(AST)p
-Fy(_)p FG(ADDFRAME.)i(This)d(assumes)h(that)h(w)m(e)g(are)f(using)g
-(AST)p Fy(_)p FG(BEGIN)g(and)0 4722 y(AST)p Fy(_)p FG(END)f(\()p
-Fu(x)p FG(4.10\))j(to)e(ensure)f(that)h(Ob)5 b(jects)30
-b(are)h(correctly)g(deleted)h(when)d(no)h(longer)h(required.)0
-4871 y(Our)38 b(example)i(F)-8 b(rameSet)41 b(no)m(w)f(con)m(tains)g
-(three)g(F)-8 b(rames)40 b(and)f(t)m(w)m(o)i(Mappings)f(with)f(the)h
-(arrangemen)m(t)0 4984 y(sho)m(wn)30 b(in)g(Figure)h(11.)41
-b(The)30 b(total)i(n)m(um)m(b)s(er)d(of)i(F)-8 b(rames)31
-b(is)f(giv)m(en)i(b)m(y)e(its)h(read-only)g(Nframe)f(attribute.)0
-5259 y Fw(13.4)112 b(The)38 b(Base)g(and)g(Curren)m(t)f(F)-9
-b(rames)0 5467 y FG(A)m(t)31 b(all)h(times,)f(one)g(of)f(the)h(F)-8
-b(rames)31 b(in)f(a)h(F)-8 b(rameSet)32 b(is)e(designated)h(to)g(b)s(e)
-f(its)h Fx(b)-5 b(ase)31 b FG(F)-8 b(rame)31 b(and)f(one)h(to)g(b)s(e)0
-5580 y(its)g Fx(curr)-5 b(ent)30 b FG(F)-8 b(rame)32
-b(\(Figure)f(11\).)41 b(These)30 b(F)-8 b(rames)31 b(are)g(iden)m
-(ti\014ed)f(b)m(y)g(t)m(w)m(o)i(in)m(teger)f(F)-8 b(rameSet)32
-b(attributes,)0 5693 y(Base)f(and)f(Curren)m(t,)g(whic)m(h)g(hold)g
-(the)h(indices)f(of)h(the)f(nominated)h(F)-8 b(rames)31
-b(within)f(the)g(F)-8 b(rameSet.)p eop end
-%%Page: 110 120
-TeXDict begin 110 119 bop 0 52 a FG(110)1175 b Fz(13)92
-b(COORDINA)-8 b(TE)30 b(SYSTEM)f(NETW)m(ORKS)h(\(FRAMESETS\))0
-351 y FG(The)35 b(existence)h(of)f(the)h(base)f(and)f(curren)m(t)h(F)-8
-b(rames)36 b(re\015ects)f(an)g(imp)s(ortan)m(t)h(application)g(of)f(F)
--8 b(rameSets,)0 464 y(whic)m(h)25 b(is)h(to)h(attac)m(h)g(co)s
-(ordinate)g(systems)f(to)g(en)m(tities)i(suc)m(h)d(as)h(data)g(arra)m
-(ys,)i(data)e(\014les,)h(plotting)g(surfaces)0 577 y(\(for)g
-(graphics\),)h Fx(etc.)39 b FG(In)26 b(this)h(con)m(text,)j(the)d(base)
-g(F)-8 b(rame)28 b(represen)m(ts)e(the)h(\\nativ)m(e")j(co)s(ordinate)d
-(system)g(of)0 690 y(the)i(attac)m(hed)j(en)m(tit)m(y|for)e(example,)h
-(the)e(pixel)h(co)s(ordinates)g(of)f(an)h(image)g(or)g(the)f(in)m
-(trinsic)h(co)s(ordinates)0 803 y(of)35 b(a)h(plotting)g(surface.)55
-b(The)34 b(other)i(F)-8 b(rames)36 b(within)e(the)i(F)-8
-b(rameSet)36 b(represen)m(t)f(alternativ)m(e)j(co)s(ordinate)0
-916 y(systems)g(whic)m(h)h(ma)m(y)g(also)g(b)s(e)f(used)f(to)j(refer)e
-(to)h(p)s(ositions)f(within)g(that)h(en)m(tit)m(y)-8
-b(.)67 b(The)38 b(curren)m(t)h(F)-8 b(rame)0 1029 y(represen)m(ts)32
-b(the)f(particular)h(co)s(ordinate)h(system)f(whic)m(h)f(is)h(curren)m
-(tly)f(selected)j(for)d(use.)44 b(F)-8 b(or)33 b(instance,)f(if)0
-1142 y(an)c(image)h(w)m(ere)g(b)s(eing)f(displa)m(y)m(ed,)h(y)m(ou)f(w)
-m(ould)g(aim)h(to)g(lab)s(el)f(it)h(with)f(co)s(ordinates)g(corresp)s
-(onding)f(to)i(the)0 1255 y(curren)m(t)h(F)-8 b(rame.)42
-b(In)30 b(order)g(to)h(see)h(a)e(di\013eren)m(t)h(co)s(ordinate)h
-(system,)f(a)g(soft)m(w)m(are)h(user)d(w)m(ould)i(arrange)g(for)0
-1367 y(a)g(di\013eren)m(t)g(F)-8 b(rame)31 b(to)g(b)s(e)f(made)g
-(curren)m(t.)0 1553 y(The)j(c)m(hoice)j(of)e(base)g(and)g(curren)m(t)f
-(F)-8 b(rames)35 b(ma)m(y)g(b)s(e)e(c)m(hanged)i(at)f(an)m(y)g(time,)i
-(simply)e(b)m(y)g(assigning)g(new)0 1666 y(v)-5 b(alues)36
-b(to)g(the)f(F)-8 b(rameSet's)37 b(Base)f(and)e(Curren)m(t)h
-(attributes.)56 b(F)-8 b(or)36 b(example,)h(to)f(mak)m(e)g(the)g(F)-8
-b(rame)36 b(with)0 1779 y(index)30 b(3)h(b)s(ecome)f(the)h(curren)m(t)f
-(F)-8 b(rame,)32 b(y)m(ou)e(could)h(use:)262 2096 y Ft(CALL)41
-b(AST_SETI\()f(FRAMESET,)g('Current',)g(3,)i(STATUS)f(\))0
-2426 y FG(Y)-8 b(ou)31 b(can)g(nominate)g(the)f(same)h(F)-8
-b(rame)31 b(to)g(b)s(e)f(b)s(oth)g(the)g(base)h(and)f(curren)m(t)g(F)-8
-b(rame)31 b(if)f(y)m(ou)h(wish.)0 2611 y(By)e(default)f(\()p
-Fx(i.e.)h FG(if)f(the)h(Base)g(or)g(Curren)m(t)e(attribute)j(is)e
-(un-set\),)i(the)e(\014rst)g(F)-8 b(rame)29 b(added)f(to)h(a)g(F)-8
-b(rameSet)0 2724 y(b)s(ecomes)32 b(its)f(base)h(F)-8
-b(rame)32 b(and)f(the)g(last)h(one)g(added)f(b)s(ecomes)g(its)h(curren)
-m(t)f(F)-8 b(rame.)2999 2691 y Fv(19)3118 2724 y FG(Whenev)m(er)32
-b(a)g(new)0 2837 y(F)-8 b(rame)26 b(is)f(added)f(to)i(a)g(F)-8
-b(rameSet,)27 b(the)f(Curren)m(t)e(attribute)h(is)h(mo)s(di\014ed)d(so)
-j(that)f(the)h(new)e(F)-8 b(rame)26 b(b)s(ecomes)0 2950
-y(the)31 b(curren)m(t)f(one.)41 b(This)29 b(b)s(eha)m(viour)h(is)h
-(re\015ected)g(in)f(the)g(state)i(of)e(the)h(example)g(F)-8
-b(rameSet)32 b(in)e(Figure)h(11.)0 3320 y Fw(13.5)112
-b(Referring)38 b(to)f(the)g(Base)h(and)g(Curren)m(t)f(F)-9
-b(rames)0 3574 y FG(It)33 b(is)f(often)h(necessary)g(to)h(refer)e(to)h
-(the)g(base)g(and)f(curren)m(t)g(F)-8 b(rames)33 b(\()p
-Fu(x)p FG(13.4\))j(within)c(a)h(F)-8 b(rameSet,)34 b(but)e(it)0
-3687 y(can)27 b(b)s(e)e(cum)m(b)s(ersome)h(ha)m(ving)h(to)g(obtain)g
-(their)f(indices)h(from)e(the)i(Base)g(and)f(Curren)m(t)f(attributes)i
-(on)f(eac)m(h)0 3800 y(o)s(ccasion.)47 b(T)-8 b(o)33
-b(mak)m(e)g(this)f(easier,)h(t)m(w)m(o)h(parameter)e(constan)m(ts,)i
-(AST)p Fy(__)p FG(BASE)d(and)g(AST)p Fy(__)p FG(CURRENT,)0
-3913 y(are)i(de\014ned)f(in)h(the)g(AST)p Fy(_)p FG(P)-8
-b(AR)32 b(include)h(\014le)g(and)g(ma)m(y)g(b)s(e)g(used)f(to)i
-(represen)m(t)f(the)g(indices)g(of)g(the)g(base)0 4026
-y(and)d(curren)m(t)g(F)-8 b(rames)31 b(resp)s(ectiv)m(ely)-8
-b(.)43 b(They)29 b(ma)m(y)i(b)s(e)f(used)g(whenev)m(er)g(a)h(F)-8
-b(rame)31 b(index)f(is)g(required.)0 4211 y(F)-8 b(or)34
-b(example,)h(when)d(adding)g(a)i(new)e(F)-8 b(rame)34
-b(to)g(a)g(F)-8 b(rameSet)34 b(\()p Fu(x)p FG(13.3\),)j(y)m(ou)c(could)
-g(use)g(the)g(follo)m(wing)i(to)0 4324 y(indicate)25
-b(that)g(the)g(new)e(F)-8 b(rame)26 b(is)e(related)h(to)g(the)g
-(existing)g(curren)m(t)f(F)-8 b(rame,)27 b(whatev)m(er)e(its)f(index)g
-(happ)s(ens)0 4437 y(to)31 b(b)s(e:)262 4754 y Ft(INTEGER)40
-b(FRAME,)h(MAPPING)262 4953 y(...)262 5153 y(CALL)g(AST_ADDFRAME\()e
-(FRAMESET,)h(AST__CURRENT,)e(MAPPING,)i(FRAME,)h(STATUS)g(\))0
-5483 y FG(Of)30 b(course,)h(the)f(F)-8 b(rame)31 b(y)m(ou)g(added)f(w)m
-(ould)g(then)g(b)s(ecome)h(the)f(new)g(curren)m(t)g(F)-8
-b(rame.)p 0 5607 1512 4 v 73 5661 a Fs(19)138 5693 y
-Fr(Although)25 b(this)h(is)g(rev)n(ersed)g(if)g(the)g(F)-6
-b(rameSet's)26 b(In)n(v)n(ert)e(attribute)i(is)g(non-zero.)p
-eop end
-%%Page: 111 121
-TeXDict begin 111 120 bop 0 52 a Fz(13.6)93 b(Using)30
-b(a)h(F)-8 b(rameSet)31 b(as)g(a)g(Mapping)2115 b FG(111)0
-351 y Fw(13.6)112 b(Using)38 b(a)g(F)-9 b(rameSet)39
-b(as)f(a)f(Mapping)0 577 y FG(The)d(F)-8 b(rameSet)36
-b(class)g(inherits)e(prop)s(erties)g(and)g(b)s(eha)m(viour)h(from)f
-(the)h(F)-8 b(rame)36 b(class)f(\()p Fu(x)p FG(7\))h(and,)g(in)e(turn,)
-0 690 y(from)c(the)g(Mapping)h(class)g(\()p Fu(x)p FG(5\).)42
-b(Its)30 b(b)s(eha)m(viour)g(when)g(used)f(as)i(a)g(Mapping)f(is)g
-(particularly)h(imp)s(ortan)m(t.)0 856 y(Consider,)f(for)g(instance,)h
-(passing)g(a)f(F)-8 b(rameSet)32 b(p)s(oin)m(ter)e(to)i(a)e(co)s
-(ordinate)i(transformation)e(routine)h(suc)m(h)0 969
-y(as)g(AST)p Fy(_)p FG(TRAN2:)262 1227 y Ft(INTEGER)40
-b(N)262 1327 y(DOUBLE)h(PRECISION)e(XIN\()j(N)i(\),)e(YIN\()g(N)h(\))
-262 1426 y(DOUBLE)e(PRECISION)e(XOUT\()j(N)h(\),)g(YOUT\()e(N)j(\))262
-1626 y(...)262 1825 y(CALL)d(AST_TRAN2\()f(FRAMESET,)g(N,)j(XIN,)e
-(YIN,)h(.TRUE.,)f(XOUT,)h(YOUT,)f(STATUS)g(\))0 2097
-y FG(The)33 b(co)s(ordinate)i(transformation)f(applied)g(b)m(y)g(this)g
-(F)-8 b(rameSet)35 b(w)m(ould)e(b)s(e)h(the)g(one)g(whic)m(h)f(con)m(v)
-m(erts)j(b)s(e-)0 2209 y(t)m(w)m(een)22 b(its)f(base)f(and)g(curren)m
-(t)g(F)-8 b(rames.)39 b(Using)20 b(the)h(F)-8 b(rameSet)22
-b(in)e(Figure)h(11,)i(for)e(example,)i(the)e(co)s(ordinates)0
-2322 y(w)m(ould)34 b(b)s(e)g(m)m(ultiplied)h(b)m(y)f(a)h(factor)h(of)e
-(5.)54 b(If)34 b(w)m(e)h(instead)f(requested)h(the)f(F)-8
-b(rameSet's)36 b(in)m(v)m(erse)g(transfor-)0 2435 y(mation,)k(w)m(e)d
-(w)m(ould)g(b)s(e)f(transforming)h(from)f(its)i(curren)m(t)f(F)-8
-b(rame)38 b(to)f(its)h(base)f(F)-8 b(rame,)40 b(so)d(our)g(example)0
-2548 y(F)-8 b(rameSet)32 b(w)m(ould)e(then)g(m)m(ultiply)g(b)m(y)h(a)f
-(factor)i(of)e(0.2.)0 2714 y(Whenev)m(er)25 b(the)g(c)m(hoice)i(of)d
-(base)h(and)f(curren)m(t)h(F)-8 b(rames)25 b(c)m(hanges,)i(the)e
-(transformations)g(whic)m(h)f(a)h(F)-8 b(rameSet)0 2827
-y(p)s(erforms)38 b(when)g(used)g(as)h(a)h(Mapping)f(also)h(c)m(hange)g
-(to)g(re\015ect)g(this.)67 b(The)39 b(Nin)g(and)f(Nout)i(attributes)0
-2940 y(ma)m(y)e(also)g(c)m(hange)g(in)f(consequence,)i(b)s(ecause)e
-(they)h(are)f(determined)g(b)m(y)g(the)g(n)m(um)m(b)s(ers)f(of)h(axes)h
-(in)e(the)0 3053 y(F)-8 b(rameSet's)28 b(base)g(and)e(curren)m(t)h(F)-8
-b(rames)28 b(resp)s(ectiv)m(ely)-8 b(.)41 b(These)27
-b(n)m(um)m(b)s(ers)f(need)h(not)g(necessarily)h(b)s(e)f(equal,)0
-3166 y(of)k(course.)0 3331 y(Lik)m(e)e(an)m(y)f(Mapping,)h(a)g(F)-8
-b(rameSet)29 b(ma)m(y)f(also)h(b)s(e)f(in)m(v)m(erted)h(b)m(y)f(c)m
-(hanging)h(the)f(b)s(o)s(olean)g(sense)g(of)g(its)h(In)m(v)m(ert)0
-3444 y(attribute,)g Fx(e.g.)f FG(using)f(AST)p Fy(_)p
-FG(INVER)-8 b(T)27 b(\()p Fu(x)p FG(5.5\).)43 b(If)27
-b(this)h(is)g(happ)s(ens,)f(the)h(v)-5 b(alues)29 b(of)f(the)g(F)-8
-b(rameSet's)29 b(Base)0 3557 y(and)38 b(Curren)m(t)g(attributes)h(are)g
-(in)m(terc)m(hanged,)k(along)d(with)e(its)h(Nin)g(and)f(Nout)h
-(attributes,)j(so)d(that)g(its)0 3670 y(base)d(and)f(curren)m(t)h(F)-8
-b(rames)36 b(sw)m(ap)g(places.)58 b(When)35 b(used)g(as)h(a)h(Mapping,)
-g(the)f(F)-8 b(rameSet)37 b(will)f(therefore)0 3783 y(p)s(erform)29
-b(the)i(in)m(v)m(erse)g(transformation)f(to)i(that)f(whic)m(h)f(it)h(p)
-s(erformed)d(previously)-8 b(.)0 3949 y(T)g(o)31 b(summarise,)f(a)h(F)
--8 b(rameSet)31 b(ma)m(y)g(b)s(e)f(used)f(exactly)j(lik)m(e)g(an)m(y)f
-(other)f(Mapping)h(whic)m(h)f(in)m(ter-relates)i(the)0
-4062 y(co)s(ordinate)f(systems)g(describ)s(ed)e(b)m(y)h(its)h(base)f
-(and)g(curren)m(t)g(F)-8 b(rames.)0 4365 y Fw(13.7)112
-b(Extracting)37 b(a)h(Mapping)h(from)f(a)g(F)-9 b(rameSet)0
-4591 y FG(Although)29 b(it)g(is)f(v)m(ery)h(con)m(v)m(enien)m(t)i(to)e
-(use)g(a)f(F)-8 b(rameSet)30 b(when)e(a)h(Mapping)f(is)h(required)e(\()
-p Fu(x)p FG(13.6\),)32 b(a)d(F)-8 b(rame-)0 4704 y(Set)35
-b(necessarily)g(con)m(tains)h(additional)f(information)g(and)f
-(sometimes)h(this)g(migh)m(t)g(cause)g(ine\016ciency)g(or)0
-4817 y(confusion.)43 b(F)-8 b(or)32 b(example,)g(if)f(y)m(ou)h(w)m(an)m
-(ted)g(to)g(use)f(a)g(Mapping)h(con)m(tained)g(in)f(one)h(F)-8
-b(rameSet)32 b(and)f(insert)0 4930 y(it)g(in)m(to)g(another,)g(it)g(w)m
-(ould)f(probably)g(not)h(b)s(e)e(e\016cien)m(t)j(to)f(insert)g(the)f
-(whole)h(of)g(the)f(\014rst)g(F)-8 b(rameSet)31 b(in)m(to)0
-5043 y(the)g(second)f(one,)h(although)g(it)g(w)m(ould)f(w)m(ork.)0
-5209 y(In)k(suc)m(h)g(a)g(situation,)j(the)e(AST)p Fy(_)p
-FG(GETMAPPING)e(function)h(allo)m(ws)i(y)m(ou)f(to)g(extract)h(a)f
-(Mapping)f(from)0 5322 y(a)g(F)-8 b(rameSet.)53 b(Y)-8
-b(ou)34 b(do)g(this)g(b)m(y)g(sp)s(ecifying)g(the)g(t)m(w)m(o)h(F)-8
-b(rames)35 b(whic)m(h)e(the)h(Mapping)g(should)f(in)m(ter-relate)0
-5435 y(using)d(their)g(indices)h(within)f(the)g(F)-8
-b(rameSet.)42 b(F)-8 b(or)31 b(example:)262 5693 y Ft(MAP)42
-b(=)h(AST_GETMAPPING\()37 b(FRAMESET,)j(2,)j(3,)g(STATUS)e(\))p
-eop end
-%%Page: 112 122
-TeXDict begin 112 121 bop 0 52 a FG(112)1175 b Fz(13)92
-b(COORDINA)-8 b(TE)30 b(SYSTEM)f(NETW)m(ORKS)h(\(FRAMESETS\))0
-351 y FG(w)m(ould)h(return)f(a)i(p)s(oin)m(ter)f(to)h(a)f(Mapping)g
-(that)h(con)m(v)m(erted)h(b)s(et)m(w)m(een)e(F)-8 b(rames)32
-b(2)g(and)e(3)i(in)f(the)g(F)-8 b(rameSet.)0 464 y(Its)33
-b(in)m(v)m(erse)h(transformation)f(w)m(ould)g(then)g(con)m(v)m(ert)h
-(in)f(the)g(opp)s(osite)h(direction,)g Fx(i.e.)f FG(b)s(et)m(w)m(een)g
-(F)-8 b(rames)34 b(3)0 577 y(and)27 b(2.)40 b(Note)29
-b(that)f(this)f(Mapping)g(migh)m(t)i(not)e(b)s(e)g(indep)s(enden)m(t)f
-(of)i(the)f(Mappings)h(con)m(tained)g(within)f(the)0
-690 y(F)-8 b(rameSet|)p Fx(i.e.)31 b FG(they)g(ma)m(y)g(share)g(sub-Ob)
-5 b(jects|so)30 b(AST)p Fy(_)p FG(COPY)f(should)h(b)s(e)g(used)g(to)h
-(mak)m(e)h(a)f(cop)m(y)g(if)0 803 y(y)m(ou)g(need)f(to)h(guaran)m(tee)h
-(indep)s(endence)d(\()p Fu(x)p FG(4.12\).)0 952 y(V)-8
-b(ery)36 b(often,)i(the)e(Mapping)f(returned)g(b)m(y)h(AST)p
-Fy(_)p FG(GETMAPPING)f(will)h(b)s(e)f(a)h(comp)s(ound)e(Mapping,)j(or)0
-1065 y(CmpMap)c(\()p Fu(x)p FG(6\).)52 b(This)33 b(re\015ects)h(the)g
-(fact)g(that)h(con)m(v)m(ersion)f(b)s(et)m(w)m(een)h(the)f(t)m(w)m(o)h
-(F)-8 b(rames)34 b(ma)m(y)g(need)g(to)g(b)s(e)0 1178
-y(done)h Fx(via)g FG(an)g(in)m(termediate)i(co)s(ordinate)f(system)f
-(so)h(that)f(sev)m(eral)i(stages)f(ma)m(y)g(b)s(e)f(in)m(v)m(olv)m(ed.)
-56 b(Y)-8 b(ou)36 b(can,)0 1291 y(ho)m(w)m(ev)m(er,)43
-b(easily)e(simplify)e(this)g(Mapping)g(\(where)g(this)h(is)f(p)s
-(ossible\))g(b)m(y)g(using)g(the)h(AST)p Fy(_)p FG(SIMPLIFY)0
-1404 y(function)33 b(\()p Fu(x)p FG(6.7\))j(and)d(this)h(is)f
-(recommended)g(if)h(y)m(ou)g(plan)f(to)h(use)g(it)g(for)f(transforming)
-g(a)h(large)h(amoun)m(t)0 1517 y(of)c(data.)0 1791 y
-Fw(13.8)112 b(Using)38 b(a)g(F)-9 b(rameSet)39 b(as)f(a)f(F)-9
-b(rame)0 1999 y FG(A)42 b(F)-8 b(rameSet)43 b(can)f(also)h(b)s(e)f
-(used)f(as)h(a)g(F)-8 b(rame,)46 b(in)c(whic)m(h)g(capacit)m(y)i(it)e
-(almost)h(alw)m(a)m(ys)h(b)s(eha)m(v)m(es)e(as)g(if)0
-2112 y(its)35 b(curren)m(t)g(F)-8 b(rame)36 b(had)e(b)s(een)g(used)g
-(instead.)54 b(F)-8 b(or)36 b(example,)h(if)e(y)m(ou)g(request)g(the)g
-(Title)h(attribute)f(of)g(a)0 2225 y(F)-8 b(rameSet)32
-b(using:)262 2421 y Ft(CHARACTER)39 b(*)44 b(\()f(80)f(\))i(TITLE)262
-2620 y(...)262 2819 y(TITLE)d(=)i(AST_GETC\()d(FRAMESET,)g('Title',)g
-(STATUS)h(\))0 3029 y FG(the)25 b(result)f(will)h(b)s(e)f(the)g(Title)i
-(of)e(the)h(curren)m(t)f(F)-8 b(rame,)27 b(or)d(a)h(suitable)g(default)
-g(if)f(the)h(curren)m(t)f(F)-8 b(rame's)26 b(Title)0
-3142 y(attribute)36 b(is)f(un-set.)56 b(The)35 b(same)h(also)g(applies)
-f(to)i(other)e(attribute)h(op)s(erations|)p Fx(i.e.)f
-FG(setting,)j(clearing)0 3255 y(and)d(testing)i(attributes.)57
-b(Most)37 b(attributes)f(shared)f(b)m(y)h(b)s(oth)f(F)-8
-b(rames)36 b(and)f(F)-8 b(rameSets)37 b(b)s(eha)m(v)m(e)f(in)g(this)0
-3368 y(w)m(a)m(y)-8 b(,)32 b(suc)m(h)e(as)h(Naxes,)g(Lab)s(el\(axis\),)
-h(F)-8 b(ormat\(axis\),)33 b Fx(etc.)40 b FG(There)30
-b(are,)h(ho)m(w)m(ev)m(er,)h(a)f(few)f(exceptions:)227
-3577 y FE(Class)427 3690 y FG(Has)h(the)g(v)-5 b(alue)30
-b(\\F)-8 b(rameSet".)227 3823 y FE(ID)427 3936 y FG(Iden)m(ti\014es)31
-b(the)f(particular)h(F)-8 b(rameSet)31 b(\(not)g(its)g(curren)m(t)f(F)
--8 b(rame\).)227 4069 y FE(Nin)427 4182 y FG(Equals)30
-b(the)h(n)m(um)m(b)s(er)e(of)i(axes)g(in)f(the)g(F)-8
-b(rameSet's)32 b(base)e(F)-8 b(rame.)227 4314 y FE(In)m(v)m(ert)427
-4427 y FG(Is)30 b(indep)s(enden)m(t)f(of)i(an)m(y)g(of)f(the)h(Ob)5
-b(jects)30 b(within)g(the)h(F)-8 b(rameSet.)227 4560
-y FE(Nob)6 b(ject)427 4673 y FG(Coun)m(ts)30 b(the)h(n)m(um)m(b)s(er)e
-(of)i(activ)m(e)h(F)-8 b(rameSets.)227 4806 y FE(RefCoun)m(t)427
-4919 y FG(Coun)m(ts)21 b(the)g(n)m(um)m(b)s(er)f(of)h(activ)m(e)i(p)s
-(oin)m(ters)e(to)g(the)g(F)-8 b(rameSet)22 b(\(not)g(to)g(its)f(curren)
-m(t)g(F)-8 b(rame\).)0 5128 y(Note)28 b(that)f(the)g(set)g(of)f
-(attributes)i(p)s(ossessed)d(b)m(y)i(a)g(F)-8 b(rameSet)27
-b(can)g(v)-5 b(ary)d(,)28 b(dep)s(ending)d(on)h(the)h(nature)f(of)h
-(its)0 5241 y(curren)m(t)33 b(F)-8 b(rame.)51 b(F)-8
-b(or)34 b(example,)h(if)f(the)f(curren)m(t)g(F)-8 b(rame)35
-b(is)e(a)h(SkyF)-8 b(rame)34 b(\()p Fu(x)p FG(8\),)i(then)d(the)h(F)-8
-b(rameSet)34 b(will)0 5354 y(acquire)h(an)g(Equino)m(x)f(attribute)i
-(from)e(it)h(whic)m(h)g(can)g(b)s(e)f(set,)i(enquired,)f
-Fx(etc.)53 b FG(Ho)m(w)m(ev)m(er,)38 b(if)d(the)g(curren)m(t)0
-5467 y(F)-8 b(rame)39 b(is)g(c)m(hanged)g(to)g(b)s(e)e(a)i(basic)g(F)-8
-b(rame,)41 b(whic)m(h)d(do)s(es)h(not)f(ha)m(v)m(e)i(an)e(Equino)m(x)g
-(attribute,)k(then)c(this)0 5580 y(attribute)30 b(will)f(b)s(e)f(absen)
-m(t)h(from)g(the)g(F)-8 b(rameSet)30 b(as)f(w)m(ell.)41
-b(An)m(y)29 b(attempt)h(to)g(reference)f(it)h(will)f(then)g(result)0
-5693 y(in)h(an)g(error.)p eop end
-%%Page: 113 123
-TeXDict begin 113 122 bop 0 52 a Fz(13.9)93 b(Extracting)31
-b(a)g(F)-8 b(rame)31 b(from)f(a)h(F)-8 b(rameSet)1917
-b FG(113)0 351 y Fw(13.9)112 b(Extracting)37 b(a)h(F)-9
-b(rame)38 b(from)g(a)g(F)-9 b(rameSet)0 573 y FG(Although)21
-b(a)h(F)-8 b(rameSet)22 b(ma)m(y)f(b)s(e)g(used)f(in)h(place)h(of)f
-(its)g(curren)m(t)g(F)-8 b(rame)22 b(in)f(most)g(situations,)j(it)d(is)
-g(sometimes)0 686 y(con)m(v)m(enien)m(t)31 b(to)e(ha)m(v)m(e)h(direct)f
-(access)h(to)g(a)f(sp)s(eci\014ed)f(F)-8 b(rame)30 b(within)e(it.)41
-b(This)28 b(ma)m(y)h(b)s(e)f(obtained)h(using)f(the)0
-799 y(AST)p Fy(_)p FG(GETFRAME)i(function,)g(as)h(follo)m(ws:)262
-1048 y Ft(FRAME)41 b(=)i(AST_GETFRAME\()38 b(FRAMESET,)i(AST__BASE,)g
-(STATUS)h(\))0 1310 y FG(This)29 b(w)m(ould)g(return)g(a)g(p)s(oin)m
-(ter)h(\(not)g(a)g(cop)m(y\))h(to)f(the)g(base)f(F)-8
-b(rame)31 b(within)e(the)h(F)-8 b(rameSet.)41 b(Note)31
-b(the)f(use)0 1423 y(of)c(AST)p Fy(__)p FG(BASE)f(\()p
-Fu(x)p FG(13.5\))k(as)d(shorthand)f(for)h(the)g(v)-5
-b(alue)26 b(of)h(the)f(F)-8 b(rameSet's)27 b(Base)g(attribute,)h(whic)m
-(h)e(giv)m(es)0 1536 y(the)31 b(base)f(F)-8 b(rame's)31
-b(index.)0 1829 y Fw(13.10)112 b(Remo)m(ving)38 b(a)g(F)-9
-b(rame)39 b(from)e(a)h(F)-9 b(rameSet)0 2050 y FG(Remo)m(ving)21
-b(a)g(F)-8 b(rame)21 b(from)f(a)h(F)-8 b(rameSet)21 b(is)f(straigh)m
-(tforw)m(ard)i(and)d(is)i(p)s(erformed)d(using)i(the)g(AST)p
-Fy(_)p FG(REMO)m(VEFRAME)0 2163 y(routine.)40 b(Y)-8
-b(ou)28 b(iden)m(tify)g(the)f(F)-8 b(rame)29 b(y)m(ou)e(wish)g(to)h
-(remo)m(v)m(e)h(in)e(the)h(usual)f(w)m(a)m(y)-8 b(,)30
-b(b)m(y)d(giving)h(its)g(index)f(within)0 2276 y(the)k(F)-8
-b(rameSet.)41 b(F)-8 b(or)32 b(example,)f(the)f(follo)m(wing)i(w)m
-(ould)e(remo)m(v)m(e)i(the)f(F)-8 b(rame)31 b(with)f(index)g(1:)262
-2525 y Ft(CALL)41 b(AST_REMOVEFRAME\()c(FRAMESET,)j(1,)j(STATUS)e(\);)0
-2788 y FG(The)35 b(only)g(restriction)h(is)g(that)g(y)m(ou)f(cannot)h
-(remo)m(v)m(e)h(the)f(last)g(remaining)f(F)-8 b(rame)36
-b(b)s(ecause)g(a)f(F)-8 b(rameSet)0 2901 y(m)m(ust)35
-b(alw)m(a)m(ys)h(con)m(tain)g(at)f(least)h(one)f(F)-8
-b(rame.)55 b(When)35 b(a)g(F)-8 b(rame)35 b(is)g(remo)m(v)m(ed,)i(the)e
-(F)-8 b(rames)36 b(whic)m(h)e(follo)m(w)0 3013 y(it)43
-b(are)f(re-n)m(um)m(b)s(ered)f(\()p Fx(i.e.)h FG(their)g(indices)g(are)
-h(reduced)e(b)m(y)h(one\))h(so)f(as)g(to)h(preserv)m(e)g(the)f
-(sequence)g(of)0 3126 y(consecutiv)m(e)32 b(F)-8 b(rame)32
-b(indices.)40 b(The)30 b(F)-8 b(rameSet's)32 b(Nframe)e(attribute)i(is)
-e(also)h(decremen)m(ted.)0 3289 y(If)38 b(appropriate,)k(AST)p
-Fy(_)p FG(REMO)m(VEFRAME)d(will)g(mo)s(dify)f(the)h(F)-8
-b(rameSet's)41 b(Base)f(and/or)e(Curren)m(t)g(at-)0 3402
-y(tributes)33 b(so)h(that)h(they)e(con)m(tin)m(ue)i(to)g(iden)m(tify)f
-(the)g(same)g(F)-8 b(rames)34 b(as)g(previously)-8 b(.)51
-b(If)33 b(either)h(the)g(base)f(or)0 3515 y(curren)m(t)g(F)-8
-b(rame)35 b(is)e(remo)m(v)m(ed,)i(ho)m(w)m(ev)m(er,)h(the)e(corresp)s
-(onding)e(attribute)i(will)g(b)s(ecome)g(un-set,)g(so)g(that)g(it)0
-3628 y(rev)m(erts)d(to)g(its)g(default)f(v)-5 b(alue)31
-b(\()p Fu(x)p FG(13.4\))i(and)d(therefore)h(iden)m(ti\014es)g(an)f
-(alternativ)m(e)j(F)-8 b(rame.)0 3791 y(Note)38 b(that)e(it)h(is)f
-(quite)h(p)s(ermissible)f(to)h(remo)m(v)m(e)g(an)m(y)g(F)-8
-b(rame)37 b(from)f(a)g(F)-8 b(rameSet,)40 b(ev)m(en)d(although)f(other)
-0 3903 y(F)-8 b(rames)33 b(ma)m(y)g(app)s(ear)f(to)i(dep)s(end)c(on)j
-(it.)47 b(F)-8 b(or)34 b(example,)g(in)e(Figure)h(11,)h(if)f(F)-8
-b(rame)33 b(1)g(w)m(ere)g(remo)m(v)m(ed,)h(the)0 4016
-y(correct)h(relationship)f(b)s(et)m(w)m(een)g(F)-8 b(rames)35
-b(2)f(and)f(3)h(w)m(ould)f(still)i(b)s(e)e(preserv)m(ed,)i(although)f
-(they)g(w)m(ould)f(b)s(e)0 4129 y(re-n)m(um)m(b)s(ered)c(as)i(F)-8
-b(rames)31 b(1)g(and)f(2.)p eop end
-%%Page: 114 124
-TeXDict begin 114 123 bop 0 52 a FG(114)1175 b Fz(13)92
-b(COORDINA)-8 b(TE)30 b(SYSTEM)f(NETW)m(ORKS)h(\(FRAMESETS\))p
-eop end
-%%Page: 115 125
-TeXDict begin 115 124 bop 3643 52 a FG(115)0 351 y FA(14)135
-b(Higher)46 b(Lev)l(el)g(Op)t(erations)f(on)g(F)-11 b(rameSets)0
-612 y Fw(14.1)112 b(Creating)38 b(F)-9 b(rameSets)39
-b(with)e(AST)p Fh(_)p Fw(CONVER)-9 b(T)0 837 y FG(Before)44
-b(considering)e(the)h(imp)s(ortan)m(t)g(sub)5 b(ject)42
-b(of)h(using)f(F)-8 b(rameSets)44 b(to)f(con)m(v)m(ert)h(b)s(et)m(w)m
-(een)g(co)s(ordinate)0 950 y(systems)35 b(\()p Fu(x)p
-FG(14.2\),)j(let)e(us)e(return)g(brie\015y)g(to)h(reconsider)g(the)g
-(output)f(generated)i(b)m(y)f(AST)p Fy(_)p FG(CONVER)-8
-b(T.)0 1063 y(W)g(e)25 b(used)e(this)g(function)h(earlier)g(\()p
-Fu(x)p FG(12\),)k(when)22 b(con)m(v)m(erting)k(b)s(et)m(w)m(een)e(the)g
-(co)s(ordinate)h(systems)e(represen)m(ted)0 1176 y(b)m(y)28
-b(v)-5 b(arious)28 b(kinds)e(of)i(F)-8 b(rame,)30 b(and)d(indicated)i
-(that)f(it)g(returns)f(a)h(F)-8 b(rameSet)29 b(to)g(represen)m(t)f(the)
-g(co)s(ordinate)0 1289 y(con)m(v)m(ersion)k(it)f(iden)m(ti\014es.)41
-b(W)-8 b(e)31 b(are)g(no)m(w)f(in)h(a)f(p)s(osition)h(to)g(examine)g
-(the)g(structure)e(of)i(this)f(F)-8 b(rameSet.)0 1455
-y(T)g(ak)m(e)36 b(our)d(earlier)i(example)g(\()p Fu(x)p
-FG(12.1\))i(of)d(con)m(v)m(erting)i(b)s(et)m(w)m(een)f(the)g(celestial)
-h(co)s(ordinate)f(systems)g(repre-)0 1568 y(sen)m(ted)c(b)m(y)f(t)m(w)m
-(o)i(SkyF)-8 b(rames:)262 1825 y Ft(INCLUDE)40 b('AST_PAR')262
-1925 y(INTEGER)g(SKYFRAME1,)g(SKYFRAME2,)f(STATUS)262
-2124 y(STATUS)i(=)i(0)262 2324 y(...)262 2523 y(SKYFRAME1)c(=)44
-b(AST_SKYFRAME\()38 b('System=FK4-NO-E)o(,)f(Epoch=B1958,)i
-(Equinox=B1960',)e(STATUS)k(\))262 2622 y(SKYFRAME2)e(=)44
-b(AST_SKYFRAME\()38 b('System=Ecliptic)o(,)f(Equinox=J2010.5',)g
-(STATUS)k(\))262 2822 y(CVT)h(=)h(AST_CONVERT\()c(SKYFRAME1,)g
-(SKYFRAME2,)h(')j(',)f(STATUS)g(\))0 3093 y FG(This)32
-b(will)h(pro)s(duce)e(a)i(p)s(oin)m(ter,)h(CVT,)e(to)i(the)e(F)-8
-b(rameSet)34 b(sho)m(wn)e(in)h(Figure)g(12.)95 b(As)33
-b(can)g(b)s(e)f(seen,)i(this)717 4226 y @beginspecial
-95 @llx 389 @lly 528 @urx 576 @ury 2814 @rwi @setspecial
-%%BeginDocument: sun210_figures/fsconvert.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 95 389 528 576
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/23 14:34:13
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5273.75 5475.35 m
-5273.75 5600.15 5172.95 5700.95 5048.15 5700.95 c
-1238.15 5700.95 l
-1113.35 5700.95 1012.55 5600.15 1012.55 5475.35 c
-1012.55 4125.35 l
-1012.55 4000.55 1113.35 3899.75 1238.15 3899.75 c
-5048.15 3899.75 l
-5172.95 3899.75 5273.75 4000.55 5273.75 4125.35 c
-f*
-1 g
-5208.95 5531.75 m
-5208.95 5655.35 5109.35 5754.95 4984.55 5754.95 c
-1182.95 5754.95 l
-1058.15 5754.95 958.55 5655.35 958.55 5531.75 c
-958.55 4187.75 l
-958.55 4064.15 1058.15 3964.55 1182.95 3964.55 c
-4984.55 3964.55 l
-5109.35 3964.55 5208.95 4064.15 5208.95 4187.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5208.95 5531.75 m
-5208.95 5655.35 5109.35 5754.95 4984.55 5754.95 c
-1182.95 5754.95 l
-1058.15 5754.95 958.55 5655.35 958.55 5531.75 c
-958.55 4187.75 l
-958.55 4064.15 1058.15 3964.55 1182.95 3964.55 c
-4984.55 3964.55 l
-5109.35 3964.55 5208.95 4064.15 5208.95 4187.75 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1395.35 5256.95 l
-1283.75 5256.95 1192.55 5165.75 1192.55 5055.35 c
-1192.55 4917.35 l
-1192.55 4806.95 1283.75 4715.75 1395.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1342.55 5306.15 l
-1232.15 5306.15 1143.35 5218.55 1143.35 5111.75 c
-1143.35 4979.75 l
-1143.35 4872.95 1232.15 4785.35 1342.55 4785.35 c
-1994.15 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-f*
-16 w
-0 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1342.55 5306.15 l
-1232.15 5306.15 1143.35 5218.55 1143.35 5111.75 c
-1143.35 4979.75 l
-1143.35 4872.95 1232.15 4785.35 1342.55 4785.35 c
-1994.15 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-h
-S
-0.201248 i
-1339.16 5171.59 m
-1339.16 5215.22 l
-1333.37 5215.22 l
-1331.96 5209.82 1330.55 5208.42 1326.93 5208.42 c
-1325.12 5208.42 1322.7 5209.03 1318.47 5210.43 c
-1309.22 5213.86 1302.78 5215.02 1294.93 5215.02 c
-1267.56 5215.02 1251 5199.54 1251 5174.01 c
-1251 5168.98 1251.75 5164.75 1253.07 5160.73 c
-1257.29 5150.06 1268.16 5140.6 1285.27 5132.35 c
-1298.75 5125.91 l
-1316.46 5117.46 1321 5112.22 1321 5101.56 c
-1321 5087.67 1311.25 5079.18 1295.94 5079.18 c
-1284.26 5079.18 1274.6 5083.89 1266.96 5093.31 c
-1261.12 5100.75 1258.3 5107.6 1254.88 5121.88 c
-1249.04 5121.88 l
-1249.04 5072.18 l
-1254.88 5072.18 l
-1256.09 5077.41 1257.7 5079.02 1260.92 5079.02 c
-1262.53 5079.02 1264.74 5078.42 1269.17 5077.01 c
-1279.03 5073.59 1286.48 5072.18 1295.33 5072.18 c
-1325.12 5072.18 1345 5089.28 1345 5114.64 c
-1345 5129.73 1336.04 5144.83 1323.1 5151.27 c
-1293.52 5165.96 l
-1277.22 5174.01 1273 5178.84 1273 5188.7 c
-1273 5201.18 1281.37 5208.02 1294.93 5208.02 c
-1303.99 5208.02 1312.44 5204.47 1319.68 5197.55 c
-1326.53 5190.51 1329.75 5184.67 1333.77 5171.59 c
-h
-1353.89 5076 m
-f*
-1456.24 5168.78 m
-1413.17 5168.78 l
-1413.17 5164.15 l
-1418 5163.34 l
-1423.03 5162.74 1425.05 5161.33 1425.05 5158.71 c
-1425.05 5156.9 1423.03 5153.28 1420.82 5151.07 c
-1395 5125.31 l
-1395 5212 l
-1357.43 5212 l
-1357.43 5207.21 l
-1364.27 5206.61 1367 5203.19 1367 5195.54 c
-1367 5092.91 l
-1367 5085.06 1364.01 5081.43 1357.43 5080.83 c
-1357.43 5076 l
-1405.53 5076 l
-1405.53 5080.83 l
-1396.07 5082.24 1395 5083.45 1395 5092.91 c
-1395 5115.85 l
-1399.69 5120.68 l
-1418.81 5093.71 l
-1422.43 5088.68 1423.64 5086.26 1423.64 5084.65 c
-1423.64 5082.24 1420.82 5081.03 1415.19 5080.83 c
-1415.19 5076 l
-1462.28 5076 l
-1462.28 5081 l
-1460.06 5081 1459.06 5081.57 1457.25 5083.85 c
-1418.2 5137.78 l
-1438.33 5158.91 1443.56 5162.54 1456.24 5164.15 c
-h
-1464.89 5076 m
-f*
-1561.6 5169 m
-1531.21 5169 l
-1531.21 5163.95 l
-1539.86 5163.54 1542.28 5162.13 1542.28 5157.3 c
-1542.28 5154.89 1541.88 5153.48 1540.07 5148.25 c
-1526.38 5109.61 l
-1511.89 5146.84 l
-1507.87 5157.1 1507.87 5157.1 1507.87 5158.71 c
-1507.87 5161.73 1510.28 5163.34 1515.31 5163.74 c
-1518.53 5163.95 l
-1518.53 5169 l
-1468 5169 l
-1468 5163.95 l
-1472.57 5163.34 1473.82 5162.74 1475.06 5161.13 c
-1476.87 5158.71 1484.32 5142.81 1488.34 5132.75 c
-1512.49 5073.38 l
-1508.87 5062.72 l
-1505.45 5052.66 1500.42 5046 1495.59 5046 c
-1493.78 5046 1492 5047.71 1492 5049.64 c
-1492 5049.84 1492 5050.24 1492.37 5050.84 c
-1492.57 5051.85 1492.77 5052.86 1492.77 5053.66 c
-1492.77 5059.5 1487.94 5063.52 1481.1 5063.52 c
-1473.45 5063.52 1468 5058.29 1468 5050.64 c
-1468 5041.18 1476.14 5035 1487.74 5035 c
-1494.58 5035 1500.42 5037.13 1504.65 5041.39 c
-1508.87 5046.01 1512.9 5054.06 1519.94 5072.98 c
-1549.93 5152.88 l
-1553.35 5161.33 1555.36 5163.14 1561.6 5163.95 c
-h
-1565.62 5076 m
-f*
-1682.33 5212 m
-1568.22 5212 l
-1568.22 5207 l
-1582.11 5206.2 1586 5203.18 1586 5192.72 c
-1586 5095.32 l
-1586 5084.85 1583.17 5082.64 1568.22 5081.03 c
-1568.22 5076 l
-1640.67 5076 l
-1640.67 5081 l
-1622.15 5081.81 1619 5084.23 1619 5095.32 c
-1619 5142.21 l
-1639.22 5141.81 1646.55 5134.36 1649.32 5111.02 c
-1654.35 5111.02 l
-1654.35 5179.04 l
-1649.32 5179.04 l
-1645.76 5156.1 1638.82 5149.05 1619 5149.05 c
-1619 5195.74 l
-1619 5203.19 1621.52 5205 1631.41 5205 c
-1650.13 5205 1661.8 5201.64 1668.04 5194.74 c
-1672.47 5189.71 1674.68 5184.27 1677.5 5171.59 c
-1682.33 5171.59 l
-h
-1687.96 5076 m
-f*
-1731.19 5169 m
-1692.84 5169 l
-1692.84 5163.95 l
-1701.49 5162.74 1704 5160.12 1704 5152.07 c
-1704 5092.9 l
-1704 5084.65 1701.93 5082.44 1692.84 5080.83 c
-1692.84 5076 l
-1746.37 5076 l
-1746.37 5080.83 l
-1734.09 5081.63 1732 5084.25 1732 5096.73 c
-1732 5134.76 l
-1732 5145.23 1737.49 5153.88 1743.95 5153.88 c
-1745.56 5153.88 1747.37 5152.47 1749.59 5149.25 c
-1753.41 5143.82 1756.43 5142.01 1761.66 5142.01 c
-1769.11 5142.01 1774.34 5147.64 1774.34 5155.29 c
-1774.34 5164.55 1767.5 5171.41 1758.04 5171.41 c
-1748.1 5171.41 1740.54 5166.12 1731.19 5152.27 c
-h
-1776.35 5076 m
-f*
-1871.19 5088.88 m
-1869.18 5086.87 l
-1868.57 5086.26 1867.97 5086.06 1866.96 5086.06 c
-1864.15 5086.06 1863 5087.67 1863 5091.09 c
-1863 5143.62 l
-1863 5160.73 1847.6 5171.42 1822.89 5171.42 c
-1800.15 5171.42 1784.85 5161.06 1784.85 5145.83 c
-1784.85 5137.38 1789.69 5132.55 1797.94 5132.55 c
-1805.99 5132.55 1811.62 5137.38 1811.62 5144.22 c
-1811.62 5147.04 1810.61 5149.66 1808 5152.88 c
-1806.19 5154.89 1805.58 5156.1 1805.58 5157.3 c
-1805.58 5161.53 1811.02 5164.42 1818.26 5164.42 c
-1830.14 5164.42 1835.86 5159.08 1835.86 5147.04 c
-1835.86 5132.35 l
-1811.91 5125.1 1802.29 5121.48 1794.51 5116.45 c
-1785.46 5110.41 1781 5103.37 1781 5094.52 c
-1781 5082.24 1790.27 5073.18 1803.17 5073.18 c
-1814.84 5073.18 1824.1 5077.21 1835.17 5087.27 c
-1837.38 5077.01 1841.81 5073.18 1851.67 5073.18 c
-1860.32 5073.18 1866.56 5076.4 1874.21 5084.65 c
-h
-1835 5096.13 m
-1829.55 5089.89 1825.52 5087.47 1820.68 5087.47 c
-1814.64 5087.47 1810 5092.91 1810 5100.96 c
-1810 5112.63 1818.61 5120.88 1835 5125.31 c
-h
-1876.62 5076 m
-f*
-1919.4 5169 m
-1880.7 5169 l
-1880.7 5163.95 l
-1889.55 5162.74 1892 5160.32 1892 5152.07 c
-1892 5092.9 l
-1892 5084.65 1889.74 5082.44 1880.7 5080.83 c
-1880.7 5076 l
-1929 5076 l
-1929 5080.83 l
-1921.95 5081.84 1920 5084.65 1920 5092.3 c
-1920 5146.03 l
-1920 5147.04 1922.87 5150.66 1925.18 5152.88 c
-1929.4 5156.1 1933.02 5158.42 1936.65 5158.42 c
-1944.5 5158.42 1948 5153.59 1948 5141 c
-1948 5092.3 l
-1948 5084.05 1945.68 5081.43 1937.85 5080.83 c
-1937.85 5076 l
-1984.95 5076 l
-1984.95 5080.83 l
-1977.9 5081.64 1976 5084.65 1976 5092.3 c
-1976 5146.03 l
-1976 5147.04 1978.73 5150.46 1980.92 5152.68 c
-1985.35 5156.1 1988.97 5158.42 1992.59 5158.42 c
-2000.24 5158.42 2003 5153.38 2003 5141 c
-2003 5092.3 l
-2003 5083.85 2000.85 5081.43 1993.4 5080.83 c
-1993.4 5076 l
-2041.3 5076 l
-2041.3 5081 l
-2033.45 5081.4 2031 5083.78 2031 5092.3 c
-2031 5142.81 l
-2031 5160.12 2020.43 5171.42 2004.07 5171.42 c
-1992.59 5171.42 1984.95 5166.73 1974.48 5153.68 c
-1968.44 5166.36 1961.4 5171.42 1948.72 5171.42 c
-1935.95 5171.42 1926.98 5165.91 1919.4 5153.68 c
-h
-2044.64 5076 m
-f*
-2122.9 5101.16 m
-2114.65 5091.29 2108.61 5087.18 2099.96 5087.18 c
-2092.31 5087.18 2086.27 5090.77 2082.25 5097.94 c
-2078.43 5104.54 2076.82 5111.56 2076.01 5126 c
-2126.73 5126 l
-2125.52 5142.36 2122.5 5151.43 2116.26 5159.12 c
-2109.82 5166.96 2100.36 5171.42 2089.09 5171.42 c
-2063.94 5171.42 2047.03 5151.4 2047.03 5121.88 c
-2047.03 5092.5 2063.53 5073.18 2088.49 5073.18 c
-2104.79 5073.18 2114.65 5079.42 2127.73 5098.34 c
-h
-2075 5133 m
-2075.61 5156.96 2079.23 5164.42 2089.09 5164.42 c
-2094.93 5164.42 2098.55 5161.38 2100.16 5155.49 c
-2101.17 5151.67 2101.57 5146.03 2101.97 5135.77 c
-2101.97 5133 l
-h
-2131.35 5076 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -1659 -4890]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-5033.75 5048.15 m
-5033.75 5158.55 4942.55 5249.75 4830.95 5249.75 c
-4126.55 5249.75 l
-4014.95 5249.75 3923.75 5158.55 3923.75 5048.15 c
-3923.75 4910.15 l
-3923.75 4799.75 4014.95 4708.55 4126.55 4708.55 c
-4830.95 4708.55 l
-4942.55 4708.55 5033.75 4799.75 5033.75 4910.15 c
-f*
-1 g
-4964.15 5104.55 m
-4964.15 5211.35 4875.35 5298.95 4766.15 5298.95 c
-4073.75 5298.95 l
-3963.35 5298.95 3874.55 5211.35 3874.55 5104.55 c
-3874.55 4972.55 l
-3874.55 4865.75 3963.35 4778.15 4073.75 4778.15 c
-4764.95 4778.15 l
-4875.35 4778.15 4964.15 4865.75 4964.15 4972.55 c
-f*
-0 g
-4964.15 5104.55 m
-4964.15 5211.35 4875.35 5298.95 4766.15 5298.95 c
-4073.75 5298.95 l
-3963.35 5298.95 3874.55 5211.35 3874.55 5104.55 c
-3874.55 4972.55 l
-3874.55 4865.75 3963.35 4778.15 4073.75 4778.15 c
-4764.95 4778.15 l
-4875.35 4778.15 4964.15 4865.75 4964.15 4972.55 c
-h
-S
-0.201248 i
-4082.16 5164.59 m
-4082.16 5208.22 l
-4076.37 5208.22 l
-4074.96 5202.82 4073.55 5201.42 4069.93 5201.42 c
-4068.12 5201.42 4065.7 5202.03 4061.47 5203.43 c
-4052.22 5206.86 4045.78 5208.02 4037.93 5208.02 c
-4010.56 5208.02 3994 5192.54 3994 5167.01 c
-3994 5161.98 3994.75 5157.75 3996.07 5153.73 c
-4000.29 5143.06 4011.16 5133.6 4028.27 5125.35 c
-4041.75 5118.91 l
-4059.46 5110.46 4064 5105.22 4064 5094.56 c
-4064 5080.67 4054.25 5072.18 4038.94 5072.18 c
-4027.26 5072.18 4017.6 5076.89 4009.96 5086.31 c
-4004.12 5093.75 4001.3 5100.6 3997.88 5114.88 c
-3992.04 5114.88 l
-3992.04 5065.18 l
-3997.88 5065.18 l
-3999.09 5070.41 4000.7 5072.02 4003.92 5072.02 c
-4005.53 5072.02 4007.74 5071.42 4012.17 5070.01 c
-4022.03 5066.59 4029.48 5065.18 4038.33 5065.18 c
-4068.12 5065.18 4088 5082.28 4088 5107.64 c
-4088 5122.73 4079.04 5137.83 4066.1 5144.27 c
-4036.52 5158.96 l
-4020.22 5167.01 4016 5171.84 4016 5181.7 c
-4016 5194.18 4024.37 5201.02 4037.93 5201.02 c
-4046.99 5201.02 4055.44 5197.47 4062.68 5190.55 c
-4069.53 5183.51 4072.75 5177.67 4076.77 5164.59 c
-h
-4096.89 5069 m
-f*
-4200.24 5161.78 m
-4157.17 5161.78 l
-4157.17 5157.15 l
-4162 5156.34 l
-4167.03 5155.74 4169.05 5154.33 4169.05 5151.71 c
-4169.05 5149.9 4167.03 5146.28 4164.82 5144.07 c
-4139 5118.31 l
-4139 5205 l
-4101.43 5205 l
-4101.43 5200.21 l
-4108.27 5199.61 4111 5196.19 4111 5188.54 c
-4111 5085.91 l
-4111 5078.06 4108.01 5074.43 4101.43 5073.83 c
-4101.43 5069 l
-4149.53 5069 l
-4149.53 5073.83 l
-4140.07 5075.24 4139 5076.45 4139 5085.91 c
-4139 5108.85 l
-4143.69 5113.68 l
-4162.81 5086.71 l
-4166.43 5081.68 4167.64 5079.26 4167.64 5077.65 c
-4167.64 5075.24 4164.82 5074.03 4159.19 5073.83 c
-4159.19 5069 l
-4206.28 5069 l
-4206.28 5074 l
-4204.06 5074 4203.06 5074.57 4201.25 5076.85 c
-4162.2 5130.78 l
-4182.33 5151.91 4187.56 5155.54 4200.24 5157.15 c
-h
-4208.89 5069 m
-f*
-4303.6 5162 m
-4273.21 5162 l
-4273.21 5156.95 l
-4281.86 5156.54 4284.28 5155.13 4284.28 5150.3 c
-4284.28 5147.89 4283.88 5146.48 4282.07 5141.25 c
-4268.38 5102.61 l
-4253.89 5139.84 l
-4249.87 5150.1 4249.87 5150.1 4249.87 5151.71 c
-4249.87 5154.73 4252.28 5156.34 4257.31 5156.74 c
-4260.53 5156.95 l
-4260.53 5162 l
-4210 5162 l
-4210 5156.95 l
-4214.57 5156.34 4215.82 5155.74 4217.06 5154.13 c
-4218.87 5151.71 4226.32 5135.81 4230.34 5125.75 c
-4254.49 5066.38 l
-4250.87 5055.72 l
-4247.45 5045.66 4242.42 5039 4237.59 5039 c
-4235.78 5039 4234 5040.71 4234 5042.64 c
-4234 5042.84 4234 5043.24 4234.37 5043.84 c
-4234.57 5044.85 4234.77 5045.86 4234.77 5046.66 c
-4234.77 5052.5 4229.94 5056.52 4223.1 5056.52 c
-4215.45 5056.52 4210 5051.29 4210 5043.64 c
-4210 5034.18 4218.14 5028 4229.74 5028 c
-4236.58 5028 4242.42 5030.13 4246.65 5034.39 c
-4250.87 5039.01 4254.9 5047.06 4261.94 5065.98 c
-4291.93 5145.88 l
-4295.35 5154.33 4297.36 5156.14 4303.6 5156.95 c
-h
-4307.62 5069 m
-f*
-4425.33 5205 m
-4311.22 5205 l
-4311.22 5200 l
-4325.11 5199.2 4329 5196.18 4329 5185.72 c
-4329 5088.32 l
-4329 5077.85 4326.17 5075.64 4311.22 5074.03 c
-4311.22 5069 l
-4383.67 5069 l
-4383.67 5074 l
-4365.15 5074.81 4362 5077.23 4362 5088.32 c
-4362 5135.21 l
-4382.22 5134.81 4389.55 5127.36 4392.32 5104.02 c
-4397.35 5104.02 l
-4397.35 5172.04 l
-4392.32 5172.04 l
-4388.76 5149.1 4381.82 5142.05 4362 5142.05 c
-4362 5188.74 l
-4362 5196.19 4364.52 5198 4374.41 5198 c
-4393.13 5198 4404.8 5194.64 4411.04 5187.74 c
-4415.47 5182.71 4417.68 5177.27 4420.5 5164.59 c
-4425.33 5164.59 l
-h
-4430.96 5069 m
-f*
-4474.19 5162 m
-4435.84 5162 l
-4435.84 5156.95 l
-4444.49 5155.74 4447 5153.12 4447 5145.07 c
-4447 5085.9 l
-4447 5077.65 4444.93 5075.44 4435.84 5073.83 c
-4435.84 5069 l
-4489.37 5069 l
-4489.37 5073.83 l
-4477.09 5074.63 4475 5077.25 4475 5089.73 c
-4475 5127.76 l
-4475 5138.23 4480.49 5146.88 4486.95 5146.88 c
-4488.56 5146.88 4490.37 5145.47 4492.59 5142.25 c
-4496.41 5136.82 4499.43 5135.01 4504.66 5135.01 c
-4512.11 5135.01 4517.34 5140.64 4517.34 5148.29 c
-4517.34 5157.55 4510.5 5164.41 4501.04 5164.41 c
-4491.1 5164.41 4483.54 5159.12 4474.19 5145.27 c
-h
-4519.35 5069 m
-f*
-4614.19 5081.88 m
-4612.18 5079.87 l
-4611.57 5079.26 4610.97 5079.06 4609.96 5079.06 c
-4607.15 5079.06 4606 5080.67 4606 5084.09 c
-4606 5136.62 l
-4606 5153.73 4590.6 5164.42 4565.89 5164.42 c
-4543.15 5164.42 4527.85 5154.06 4527.85 5138.83 c
-4527.85 5130.38 4532.69 5125.55 4540.94 5125.55 c
-4548.99 5125.55 4554.62 5130.38 4554.62 5137.22 c
-4554.62 5140.04 4553.61 5142.66 4551 5145.88 c
-4549.19 5147.89 4548.58 5149.1 4548.58 5150.3 c
-4548.58 5154.53 4554.02 5157.42 4561.26 5157.42 c
-4573.14 5157.42 4578.86 5152.08 4578.86 5140.04 c
-4578.86 5125.35 l
-4554.91 5118.1 4545.29 5114.48 4537.51 5109.45 c
-4528.46 5103.41 4524 5096.37 4524 5087.52 c
-4524 5075.24 4533.27 5066.18 4546.17 5066.18 c
-4557.84 5066.18 4567.1 5070.21 4578.17 5080.27 c
-4580.38 5070.01 4584.81 5066.18 4594.67 5066.18 c
-4603.32 5066.18 4609.56 5069.4 4617.21 5077.65 c
-h
-4578 5089.13 m
-4572.55 5082.89 4568.52 5080.47 4563.68 5080.47 c
-4557.64 5080.47 4553 5085.91 4553 5093.96 c
-4553 5105.63 4561.61 5113.88 4578 5118.31 c
-h
-4619.62 5069 m
-f*
-4661.4 5162 m
-4622.7 5162 l
-4622.7 5156.95 l
-4631.55 5155.74 4634 5153.32 4634 5145.07 c
-4634 5085.9 l
-4634 5077.65 4631.74 5075.44 4622.7 5073.83 c
-4622.7 5069 l
-4671 5069 l
-4671 5073.83 l
-4663.95 5074.84 4662 5077.65 4662 5085.3 c
-4662 5139.03 l
-4662 5140.04 4664.87 5143.66 4667.18 5145.88 c
-4671.4 5149.1 4675.02 5151.42 4678.65 5151.42 c
-4686.5 5151.42 4690 5146.59 4690 5134 c
-4690 5085.3 l
-4690 5077.05 4687.68 5074.43 4679.85 5073.83 c
-4679.85 5069 l
-4726.95 5069 l
-4726.95 5073.83 l
-4719.9 5074.64 4718 5077.65 4718 5085.3 c
-4718 5139.03 l
-4718 5140.04 4720.73 5143.46 4722.92 5145.68 c
-4727.35 5149.1 4730.97 5151.42 4734.59 5151.42 c
-4742.24 5151.42 4745 5146.38 4745 5134 c
-4745 5085.3 l
-4745 5076.85 4742.85 5074.43 4735.4 5073.83 c
-4735.4 5069 l
-4783.3 5069 l
-4783.3 5074 l
-4775.45 5074.4 4773 5076.78 4773 5085.3 c
-4773 5135.81 l
-4773 5153.12 4762.43 5164.42 4746.07 5164.42 c
-4734.59 5164.42 4726.95 5159.73 4716.48 5146.68 c
-4710.44 5159.36 4703.4 5164.42 4690.72 5164.42 c
-4677.95 5164.42 4668.98 5158.91 4661.4 5146.68 c
-h
-4786.64 5069 m
-f*
-4865.9 5094.16 m
-4857.65 5084.29 4851.61 5080.18 4842.96 5080.18 c
-4835.31 5080.18 4829.27 5083.77 4825.25 5090.94 c
-4821.43 5097.54 4819.82 5104.56 4819.01 5119 c
-4869.73 5119 l
-4868.52 5135.36 4865.5 5144.43 4859.26 5152.12 c
-4852.82 5159.96 4843.36 5164.42 4832.09 5164.42 c
-4806.94 5164.42 4790.03 5144.4 4790.03 5114.88 c
-4790.03 5085.5 4806.53 5066.18 4831.49 5066.18 c
-4847.79 5066.18 4857.65 5072.42 4870.73 5091.34 c
-h
-4818 5126 m
-4818.61 5149.96 4822.23 5157.42 4832.09 5157.42 c
-4837.93 5157.42 4841.55 5154.38 4843.16 5148.49 c
-4844.17 5144.67 4844.57 5139.03 4844.97 5128.77 c
-4844.97 5126 l
-h
-4874.35 5069 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -4394 -4883]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-8 w
-2175.35 4842.95 m
-2222.15 4748.15 2351.75 4684.55 2496.95 4684.55 c
-2577.35 4684.55 2655.35 4703.75 2717.75 4740.95 c
-S
-2709.35 4683.35 m
-2694.95 4733.75 l
-2650.55 4758.95 l
-2799.35 4816.55 l
-f*
-0.564706 g
-3668.15 4929.35 m
-3533.75 4966.55 l
-3629.75 5021.75 l
-3476.15 5031.35 l
-3518.15 5100.95 l
-3370.55 5080.55 l
-3353.75 5152.55 l
-3233.75 5106.95 l
-3158.15 5170.55 l
-3082.55 5106.95 l
-2962.55 5152.55 l
-2944.55 5080.55 l
-2795.75 5100.95 l
-2840.15 5031.35 l
-2686.55 5021.75 l
-2782.55 4966.55 l
-2646.95 4929.35 l
-2782.55 4894.55 l
-2686.55 4838.15 l
-2840.15 4829.75 l
-2795.75 4760.15 l
-2944.55 4779.35 l
-2962.55 4708.55 l
-3082.55 4752.95 l
-3158.15 4689.35 l
-3233.75 4752.95 l
-3353.75 4708.55 l
-3370.55 4779.35 l
-3518.15 4760.15 l
-3476.15 4829.75 l
-3629.75 4838.15 l
-3533.75 4894.55 l
-f*
-1 g
-3608.15 4989.35 m
-3473.75 5026.55 l
-3569.75 5081.75 l
-3416.15 5091.35 l
-3458.15 5160.95 l
-3310.55 5140.55 l
-3293.75 5212.55 l
-3173.75 5166.95 l
-3098.15 5230.55 l
-3022.55 5166.95 l
-2902.55 5212.55 l
-2884.55 5140.55 l
-2735.75 5160.95 l
-2780.15 5091.35 l
-2626.55 5081.75 l
-2722.55 5026.55 l
-2586.95 4989.35 l
-2722.55 4954.55 l
-2626.55 4898.15 l
-2780.15 4889.75 l
-2735.75 4820.15 l
-2884.55 4839.35 l
-2902.55 4768.55 l
-3022.55 4812.95 l
-3098.15 4749.35 l
-3173.75 4812.95 l
-3293.75 4768.55 l
-3310.55 4839.35 l
-3458.15 4820.15 l
-3416.15 4889.75 l
-3569.75 4898.15 l
-3473.75 4954.55 l
-f*
-0 g
-3608.15 4989.35 m
-3473.75 5026.55 l
-3569.75 5081.75 l
-3416.15 5091.35 l
-3458.15 5160.95 l
-3310.55 5140.55 l
-3293.75 5212.55 l
-3173.75 5166.95 l
-3098.15 5230.55 l
-3022.55 5166.95 l
-2902.55 5212.55 l
-2884.55 5140.55 l
-2735.75 5160.95 l
-2780.15 5091.35 l
-2626.55 5081.75 l
-2722.55 5026.55 l
-2586.95 4989.35 l
-2722.55 4954.55 l
-2626.55 4898.15 l
-2780.15 4889.75 l
-2735.75 4820.15 l
-2884.55 4839.35 l
-2902.55 4768.55 l
-3022.55 4812.95 l
-3098.15 4749.35 l
-3173.75 4812.95 l
-3293.75 4768.55 l
-3310.55 4839.35 l
-3458.15 4820.15 l
-3416.15 4889.75 l
-3569.75 4898.15 l
-3473.75 4954.55 l
-3608.15 4989.35 l
-3569.75 4989.35 l
-3447.35 4958.15 l
-3536.15 4906.55 l
-3398.15 4898.15 l
-3438.95 4832.15 l
-3303.35 4851.35 l
-3286.55 4781.75 l
-3171.35 4824.95 l
-3098.15 4762.55 l
-3024.95 4824.95 l
-2909.75 4781.75 l
-2891.75 4851.35 l
-2756.15 4832.15 l
-2796.95 4898.15 l
-2660.15 4906.55 l
-2748.95 4958.15 l
-2626.55 4989.35 l
-2747.75 5021.75 l
-2660.15 5074.55 l
-2796.95 5081.75 l
-2756.15 5148.95 l
-2891.75 5129.75 l
-2909.75 5198.15 l
-3024.95 5156.15 l
-3098.15 5218.55 l
-3171.35 5156.15 l
-3286.55 5198.15 l
-3303.35 5129.75 l
-3438.95 5148.95 l
-3398.15 5081.75 l
-3536.15 5074.55 l
-3447.35 5021.75 l
-3569.75 4989.35 l
-3608.15 4989.35 l
-f*
-0.2 i
-2920.08 5040.76 m
-2900.08 4966.52 l
-2897.52 4957.88 2894.48 4955.64 2884.08 4955 c
-2884.08 4951 l
-2934 4951 l
-2934 4955 l
-2924.72 4955.48 2922.48 4956.76 2922.48 4961.88 c
-2922.48 4963.64 2922.8 4965.4 2923.76 4969.08 c
-2923.92 4969.88 l
-2924.08 4970.68 l
-2943.76 5042.52 l
-2946.16 5050.84 2948.56 5053.08 2956.72 5054.04 c
-2956.72 5058 l
-2922.8 5058 l
-2873.2 4981.24 l
-2864.56 5058 l
-2829.2 5058 l
-2829.2 5054 l
-2839.28 5053.52 2840.72 5052.89 2840.72 5048.44 c
-2840.72 5046.2 2840.08 5043.32 2838.96 5039.16 c
-2821.52 4979.48 l
-2815.12 4958.68 2814 4956.92 2805.36 4955 c
-2805.36 4951 l
-2838.48 4951 l
-2838.48 4955 l
-2828.24 4956.28 2825.68 4958.2 2825.68 4964.76 c
-2825.68 4967.48 2826.48 4971.48 2828.72 4979.48 c
-2844.88 5038.52 l
-2855.6 4949.08 l
-2860.08 4949.08 l
-h
-2952.24 4951 m
-f*
-3021.44 4971.32 m
-3014.88 4962.52 3012.48 4959.76 3009.92 4959.76 c
-3008.64 4959.76 3008 4960.86 3008 4962.52 c
-3008 4966.52 3009.44 4973.08 3013.44 4986.2 c
-3024.8 5023.96 l
-3007.04 5022.84 l
-3004.16 5013.4 l
-3002.72 5021.56 2999.2 5025.08 2992.32 5025.08 c
-2972.64 5025.08 2949 4994.27 2949 4969.24 c
-2949 4957.08 2955.74 4948.92 2965.92 4948.92 c
-2975.68 4948.92 2983.04 4954.68 2992.16 4970.04 c
-2990.24 4963.48 2990 4961.56 2990 4959.32 c
-2990 4953.4 2994.76 4948.76 3000.64 4948.76 c
-3008.16 4948.76 3015.52 4955 3024.8 4968.92 c
-h
-2994.56 5018.2 m
-2998.08 5017.88 3000.56 5015 3000.56 5010.68 c
-3000.56 5001.08 2995.24 4983.32 2988.96 4972.28 c
-2984.64 4964.44 2979.84 4959.92 2975.52 4959.92 c
-2971.36 4959.92 2968 4963.75 2968 4968.92 c
-2968 4977.24 2973.42 4993.24 2980.16 5005.08 c
-2984.96 5013.56 2990.24 5018.52 2994.56 5018.2 c
-h
-3032 4951 m
-f*
-3066.56 5024.92 m
-3050.24 5022.36 3044 5021.4 3035.68 5020.44 c
-3035.68 5016 l
-3042.88 5015.69 3044.32 5015.07 3044.32 5012.12 c
-3044.32 5010.52 3043.04 5004.76 3040.8 4996.44 c
-3024.8 4934.36 l
-3021.76 4923.8 3020.48 4922.84 3012.8 4923 c
-3012.8 4918 l
-3052.64 4918 l
-3052.64 4923 l
-3044.64 4923.14 3042.24 4924.16 3042.24 4927.64 c
-3042.24 4929.88 3043.36 4934.68 3046.4 4945.88 c
-3047.52 4949.72 3047.52 4950.04 3048.16 4952.44 c
-3053.76 4949.56 3055.68 4948.92 3059.04 4948.92 c
-3080.8 4948.92 3103.36 4977.88 3103.36 5005.56 c
-3103.36 5017.4 3096.64 5025.08 3086.08 5025.08 c
-3076.96 5025.08 3069.92 5019.92 3060.48 5006.52 c
-h
-3077.12 5013.56 m
-3081.28 5013.24 3083.68 5009.56 3083.36 5004.44 c
-3082.72 4993.88 3077.6 4978.04 3071.84 4967.64 c
-3066.88 4959 3061.76 4953.92 3056.32 4953.92 c
-3052.8 4953.92 3050.08 4956.75 3050.08 4960.28 c
-3050.08 4963 3051.84 4969.56 3056.16 4984.12 c
-3059.68 4995.8 3061.12 4999.8 3063.52 5003.48 c
-3067.52 5009.72 3072.96 5013.88 3077.12 5013.56 c
-h
-3112 4951 m
-f*
-3147.56 5024.92 m
-3131.24 5022.36 3125 5021.4 3116.68 5020.44 c
-3116.68 5016 l
-3123.88 5015.69 3125.32 5015.07 3125.32 5012.12 c
-3125.32 5010.52 3124.04 5004.76 3121.8 4996.44 c
-3105.8 4934.36 l
-3102.76 4923.8 3101.48 4922.84 3093.8 4923 c
-3093.8 4918 l
-3133.64 4918 l
-3133.64 4923 l
-3125.64 4923.14 3123.24 4924.16 3123.24 4927.64 c
-3123.24 4929.88 3124.36 4934.68 3127.4 4945.88 c
-3128.52 4949.72 3128.52 4950.04 3129.16 4952.44 c
-3134.76 4949.56 3136.68 4948.92 3140.04 4948.92 c
-3161.8 4948.92 3184.36 4977.88 3184.36 5005.56 c
-3184.36 5017.4 3177.64 5025.08 3167.08 5025.08 c
-3157.96 5025.08 3150.92 5019.92 3141.48 5006.52 c
-h
-3158.12 5013.56 m
-3162.28 5013.24 3164.68 5009.56 3164.36 5004.44 c
-3163.72 4993.88 3158.6 4978.04 3152.84 4967.64 c
-3147.88 4959 3142.76 4953.92 3137.32 4953.92 c
-3133.8 4953.92 3131.08 4956.75 3131.08 4960.28 c
-3131.08 4963 3132.84 4969.56 3137.16 4984.12 c
-3140.68 4995.8 3142.12 4999.8 3144.52 5003.48 c
-3148.52 5009.72 3153.96 5013.88 3158.12 5013.56 c
-h
-3193 4951 m
-f*
-3226.56 4973.56 m
-3224.32 4970.36 l
-3220.16 4964.12 3216.48 4960.56 3214.08 4960.56 c
-3212.8 4960.56 3212 4961.77 3212 4963.16 c
-3212 4964.6 3212.62 4968.76 3213.12 4971.48 c
-3227.68 5024.92 l
-3219.22 5023 3208.26 5021.4 3196.04 5020.44 c
-3196.04 5016 l
-3197.44 5016 l
-3202.24 5016 3205.48 5014.44 3205.48 5011.48 c
-3205.48 5010.2 3204.71 5007.8 3203.68 5005.08 c
-3194.4 4970.68 l
-3193.12 4966.04 3193 4961.88 3193 4959.64 c
-3193 4953.56 3197.2 4949.56 3203.36 4949.56 c
-3212.96 4949.56 3218.88 4954.36 3230.08 4971.32 c
-h
-3222.88 5060.4 m
-3217.44 5060.4 3213 5055.46 3213 5050.04 c
-3213 5043.8 3217.26 5039.4 3223.04 5039.4 c
-3229.12 5039.4 3234 5043.86 3234 5049.56 c
-3234 5055.48 3229 5060.4 3222.88 5060.4 c
-h
-3236.48 4951 m
-f*
-3311.36 4972.6 m
-3304.96 4962.68 3302.88 4960.56 3300.16 4960.56 c
-3298.88 4960.56 3298 4961.63 3298 4963.16 c
-3298 4964.76 3298.94 4968.12 3301.92 4977.08 c
-3307.68 4994.52 l
-3310.24 5002.04 3312 5009.08 3312 5012.92 c
-3312 5020.76 3307.78 5025.08 3300.16 5025.08 c
-3294.24 5025.08 3288.48 5022.62 3284.16 5018.36 c
-3278.24 5012.76 3275.2 5008.92 3264.48 4993.08 c
-3274.72 5024.76 l
-3264.48 5022.52 3251.68 5020.92 3242.72 5020.6 c
-3242.72 5015.8 l
-3249.44 5015.65 3251.36 5014.92 3251.36 5012.12 c
-3251.36 5010.2 3249.12 5001.72 3244 4983.64 c
-3240.32 4970.68 3239.2 4966.52 3235.04 4951 c
-3254.4 4951 l
-3261.92 4978.68 3267.68 4992.6 3277.6 5005.56 c
-3280.8 5009.88 3285.76 5013.08 3288.64 5013.08 c
-3290.72 5013.08 3293 5011.63 3293 5010.04 c
-3293 5009.56 3292.54 5008.28 3291.84 5006.68 c
-3283.04 4980.12 l
-3280.48 4972.44 3279 4963.32 3279 4959.16 c
-3279 4953.08 3282.84 4949.56 3289.44 4949.56 c
-3299.04 4949.56 3305.6 4955 3314.88 4970.52 c
-h
-3324.96 4951 m
-f*
-3402.48 5020 m
-3384.72 5020 l
-3379.28 5023.58 3374.48 5025.08 3367.12 5025.08 c
-3347.44 5025.08 3331 5012.05 3331 4995.8 c
-3331 4987.64 3335.35 4981.88 3344.4 4978.2 c
-3331.28 4970.84 3329 4968.6 3329 4962.68 c
-3329 4957.56 3331.89 4954.52 3338.96 4952.12 c
-3329.04 4949.72 3325.84 4948.44 3322 4945.4 c
-3319.44 4943.16 3318 4939.32 3318 4935.48 c
-3318 4925.08 3329.56 4919 3347.76 4919 c
-3370.32 4919 3386 4928.72 3386 4942.52 c
-3386 4952.28 3379.6 4957.56 3362.16 4962.52 c
-3353.68 4964.92 l
-3348.56 4966.36 3345 4968.6 3345 4971 c
-3345 4973.56 3347.68 4976.28 3350 4976.28 c
-3350.8 4976.28 3351.92 4976.24 3353.2 4976.12 c
-3354.96 4975.64 3356.24 4975 3358.16 4975 c
-3365.2 4975 3372.4 4977.09 3378.48 4980.92 c
-3387.76 4986.2 3393 4994.36 3393 5003.96 c
-3393 5006.64 3392.59 5008.32 3391.76 5011 c
-3402.48 5011 l
-h
-3344.4 4950.04 m
-3346.32 4949.88 3358.48 4945.72 3362 4944.12 c
-3366.48 4941.88 3369 4939.16 3369 4935 c
-3369 4927.96 3361.8 4924 3349.36 4924 c
-3338.96 4924 3332 4929.1 3332 4936.44 c
-3332 4939.48 3333.32 4942.2 3336.24 4945.24 c
-3338.32 4947.32 3343.12 4950.2 3344.4 4950.04 c
-h
-3366.8 5020.08 m
-3370.96 5020.08 3374 5016.19 3374 5010.52 c
-3374 5005.08 3372.08 4997.4 3369.36 4991.48 c
-3366 4984.12 3361.84 4980 3356.88 4980 c
-3352.56 4980 3350 4983.52 3350 4989.88 c
-3350 4996.28 3352.79 5006.04 3356.24 5012.12 c
-3359.28 5017.4 3362.64 5020.08 3366.8 5020.08 c
-h
-3406 4951 m
-f*
-1 i
-1 g
-1515.35 4526.15 m
-1596.95 4526.15 l
-1596.95 4374.95 l
-1763.75 4374.95 l
-1763.75 4526.15 l
-1845.35 4526.15 l
-1680.95 4679.75 l
-f*
-0 g
-1515.35 4526.15 m
-1596.95 4526.15 l
-1596.95 4374.95 l
-1763.75 4374.95 l
-1763.75 4526.15 l
-1845.35 4526.15 l
-1680.95 4679.75 l
-1515.35 4526.15 l
-1539.35 4535.75 l
-1680.95 4666.55 l
-1820.15 4535.75 l
-1754.15 4535.75 l
-1754.15 4384.55 l
-1607.75 4384.55 l
-1607.75 4535.75 l
-1539.35 4535.75 l
-1515.35 4526.15 l
-f*
-0.2 i
-1255.88 4259 m
-1255.88 4254 l
-1268.3 4253.29 1272 4250.45 1272 4241.4 c
-1272 4154.28 l
-1272 4145.1 1269.25 4142.94 1255.88 4141.5 c
-1255.88 4137 l
-1313.84 4137 l
-1344.26 4137 1364 4150.5 1364 4170.84 c
-1364 4179.12 1360.73 4186.32 1354.7 4191.9 c
-1348.4 4197.48 1342.28 4200 1329.68 4202.7 c
-1350.56 4208.82 1358 4216.2 1358 4229.88 c
-1358 4248.42 1341.55 4259 1311.5 4259 c
-h
-1301 4198.74 m
-1305.92 4198.74 l
-1324.46 4198.74 1333 4189.2 1333 4169.22 c
-1333 4151.76 1325.77 4143 1311.5 4143 c
-1303.58 4143 1301 4145.99 1301 4153.74 c
-h
-1301 4244.46 m
-1301 4250.94 1303.39 4254 1310.24 4254 c
-1322.84 4254 1329 4246.03 1329 4228.62 c
-1329 4209.72 1323.08 4204.68 1301 4204.14 c
-h
-1373.06 4137 m
-f*
-1458.14 4148.52 m
-1456.34 4146.72 l
-1455.8 4146.18 1455.26 4146 1454.36 4146 c
-1451.84 4146 1451 4147.44 1451 4150.5 c
-1451 4197.48 l
-1451 4212.78 1437.16 4222.16 1414.94 4222.16 c
-1394.6 4222.16 1380.92 4212.97 1380.92 4199.46 c
-1380.92 4191.9 1385.24 4187.58 1392.62 4187.58 c
-1399.82 4187.58 1404.86 4191.9 1404.86 4198.02 c
-1404.86 4200.54 1403.96 4202.88 1401.62 4205.76 c
-1400 4207.56 1399.46 4208.64 1399.46 4209.72 c
-1399.46 4213.5 1404.32 4216.16 1410.8 4216.16 c
-1421.42 4216.16 1426 4211.37 1426 4200.54 c
-1426 4187.4 l
-1404.89 4180.92 1396.41 4177.68 1389.56 4173.18 c
-1381.46 4167.78 1378 4161.48 1378 4153.56 c
-1378 4142.58 1386.07 4134.48 1397.3 4134.48 c
-1407.74 4134.48 1416.02 4138.08 1425.92 4147.08 c
-1427.9 4137.9 1431.86 4134.48 1440.68 4134.48 c
-1448.42 4134.48 1454 4137.36 1460.84 4144.74 c
-h
-1426 4155 m
-1421.04 4149.42 1417.37 4147.26 1412.96 4147.26 c
-1407.56 4147.26 1404 4152.12 1404 4159.32 c
-1404 4169.76 1411.57 4177.14 1426 4181.1 c
-h
-1463 4137 m
-f*
-1524.22 4195.68 m
-1524.22 4221.8 l
-1520.24 4221.8 l
-1519.16 4219.08 1518.08 4218.2 1515.74 4218.2 c
-1514.66 4218.2 1513.04 4218.55 1510.16 4219.44 c
-1504.4 4221.42 1500.26 4222.16 1496.12 4222.16 c
-1479.74 4222.16 1468 4210.99 1468 4195.86 c
-1468 4183.98 1475.34 4175.7 1493.42 4167.96 c
-1505.84 4162.56 1511 4158.06 1511 4152.3 c
-1511 4145.28 1505.48 4140.48 1497.2 4140.48 c
-1484.6 4140.48 1476.32 4148.62 1472.54 4164.36 c
-1467.5 4164.36 l
-1467.5 4134.66 l
-1472 4134.66 l
-1473.98 4138.44 1475.06 4139.7 1476.68 4139.7 c
-1477.58 4139.7 1479.02 4139.34 1480.82 4138.62 c
-1486.04 4136.46 1495.22 4134.48 1500.26 4134.48 c
-1516.64 4134.48 1528 4145.64 1528 4161.84 c
-1528 4174.62 1521.15 4182.54 1503.14 4189.92 c
-1490.9 4195.14 1486 4199.64 1486 4205.76 c
-1486 4211.7 1490.98 4216.16 1497.74 4216.16 c
-1502.6 4216.16 1507.28 4214.19 1511.24 4210.44 c
-1515.02 4206.84 1517 4203.42 1519.7 4195.68 c
-h
-1533.02 4137 m
-f*
-1604.36 4159.5 m
-1596.98 4150.68 1591.58 4147.48 1583.84 4147.48 c
-1577 4147.48 1571.6 4150.53 1568 4156.62 c
-1564.58 4162.36 1563.14 4168.45 1562.42 4181 c
-1607.78 4181 l
-1606.7 4195.99 1604 4204.3 1598.42 4211.34 c
-1592.66 4218.36 1584.2 4222.16 1574.12 4222.16 c
-1551.62 4222.16 1536.5 4204.33 1536.5 4178.04 c
-1536.5 4151.76 1551.26 4134.48 1573.58 4134.48 c
-1588.16 4134.48 1596.98 4140.06 1608.68 4156.98 c
-h
-1561.52 4188 m
-1562.06 4209.42 1565.3 4216.16 1574.12 4216.16 c
-1579.34 4216.16 1582.58 4213.42 1584.02 4208.1 c
-1584.92 4204.68 1585.28 4199.64 1585.64 4190.46 c
-1585.64 4188 l
-h
-1611.92 4137 m
-f*
-1658 4137 m
-f*
-1761.94 4259 m
-1659.88 4259 l
-1659.88 4254 l
-1672.3 4253.29 1676 4250.63 1676 4241.4 c
-1676 4154.28 l
-1676 4144.92 1673.44 4142.94 1659.88 4141.5 c
-1659.88 4137 l
-1724.68 4137 l
-1724.68 4142 l
-1708.12 4142.69 1705 4144.77 1705 4154.28 c
-1705 4196.22 l
-1723.28 4195.86 1729.91 4189.2 1732.42 4168.32 c
-1736.92 4168.32 l
-1736.92 4229.16 l
-1732.42 4229.16 l
-1729.19 4208.64 1722.92 4202.34 1705 4202.34 c
-1705 4244.1 l
-1705 4250.76 1707.32 4253 1716.4 4253 c
-1733.14 4253 1743.58 4249.8 1749.16 4243.2 c
-1753.12 4238.7 1755.1 4233.84 1757.62 4222.5 c
-1761.94 4222.5 l
-h
-1766.98 4137 m
-f*
-1806.28 4220 m
-1772.22 4220 l
-1772.22 4215.66 l
-1779.96 4214.58 1782 4212.24 1782 4205.04 c
-1782 4152.12 l
-1782 4144.74 1780.19 4142.76 1772.22 4141.32 c
-1772.22 4137 l
-1820.1 4137 l
-1820.1 4141.32 l
-1809.12 4142.04 1807 4144.38 1807 4155.54 c
-1807 4189.56 l
-1807 4198.92 1812.02 4206.66 1817.94 4206.66 c
-1819.38 4206.66 1821 4205.4 1822.98 4202.52 c
-1826.4 4197.66 1829.1 4196.04 1833.78 4196.04 c
-1840.44 4196.04 1845.12 4201.08 1845.12 4207.92 c
-1845.12 4216.2 1839 4222.16 1830.54 4222.16 c
-1821.55 4222.16 1814.73 4217.47 1806.28 4205.22 c
-h
-1846.92 4137 m
-f*
-1933.14 4148.52 m
-1931.34 4146.72 l
-1930.8 4146.18 1930.26 4146 1929.36 4146 c
-1926.84 4146 1926 4147.44 1926 4150.5 c
-1926 4197.48 l
-1926 4212.78 1912.16 4222.16 1889.94 4222.16 c
-1869.6 4222.16 1855.92 4212.97 1855.92 4199.46 c
-1855.92 4191.9 1860.24 4187.58 1867.62 4187.58 c
-1874.82 4187.58 1879.86 4191.9 1879.86 4198.02 c
-1879.86 4200.54 1878.96 4202.88 1876.62 4205.76 c
-1875 4207.56 1874.46 4208.64 1874.46 4209.72 c
-1874.46 4213.5 1879.32 4216.16 1885.8 4216.16 c
-1896.42 4216.16 1901 4211.37 1901 4200.54 c
-1901 4187.4 l
-1879.89 4180.92 1871.41 4177.68 1864.56 4173.18 c
-1856.46 4167.78 1853 4161.48 1853 4153.56 c
-1853 4142.58 1861.07 4134.48 1872.3 4134.48 c
-1882.74 4134.48 1891.02 4138.08 1900.92 4147.08 c
-1902.9 4137.9 1906.86 4134.48 1915.68 4134.48 c
-1923.42 4134.48 1929 4137.36 1935.84 4144.74 c
-h
-1901 4155 m
-1896.04 4149.42 1892.37 4147.26 1887.96 4147.26 c
-1882.56 4147.26 1879 4152.12 1879 4159.32 c
-1879 4169.76 1886.57 4177.14 1901 4181.1 c
-h
-1938 4137 m
-f*
-1975.46 4220 m
-1940.73 4220 l
-1940.73 4215.66 l
-1948.65 4214.58 1951 4212.42 1951 4205.04 c
-1951 4152.12 l
-1951 4144.74 1948.95 4142.76 1940.73 4141.32 c
-1940.73 4137 l
-1983.93 4137 l
-1983.93 4141.32 l
-1977.63 4142.22 1976 4144.74 1976 4151.58 c
-1976 4199.64 l
-1976 4200.54 1978.51 4203.78 1980.51 4205.76 c
-1984.29 4208.64 1987.53 4210.16 1990.77 4210.16 c
-1997.79 4210.16 2001 4206 2001 4195.14 c
-2001 4151.58 l
-2001 4144.2 1998.9 4141.86 1991.85 4141.32 c
-1991.85 4137 l
-2033.97 4137 l
-2033.97 4141.32 l
-2027.67 4142.04 2026 4144.74 2026 4151.58 c
-2026 4199.64 l
-2026 4200.54 2028.43 4203.6 2030.37 4205.58 c
-2034.33 4208.64 2037.57 4210.16 2040.81 4210.16 c
-2047.65 4210.16 2050 4205.82 2050 4195.14 c
-2050 4151.58 l
-2050 4144.02 2048.1 4141.86 2041.53 4141.32 c
-2041.53 4137 l
-2084.37 4137 l
-2084.37 4141 l
-2077.35 4141.37 2075 4143.6 2075 4151.58 c
-2075 4196.76 l
-2075 4212.24 2065.6 4222.16 2051.07 4222.16 c
-2040.81 4222.16 2033.97 4218.01 2024.61 4206.48 c
-2019.21 4217.82 2012.91 4222.16 2001.57 4222.16 c
-1990.2 4222.16 1982.21 4217.29 1975.46 4206.48 c
-h
-2087.94 4137 m
-f*
-2160.36 4159.5 m
-2152.98 4150.68 2147.58 4147.48 2139.84 4147.48 c
-2133 4147.48 2127.6 4150.53 2124 4156.62 c
-2120.58 4162.36 2119.14 4168.45 2118.42 4181 c
-2163.78 4181 l
-2162.7 4195.99 2160 4204.3 2154.42 4211.34 c
-2148.66 4218.36 2140.2 4222.16 2130.12 4222.16 c
-2107.62 4222.16 2092.5 4204.33 2092.5 4178.04 c
-2092.5 4151.76 2107.26 4134.48 2129.58 4134.48 c
-2144.16 4134.48 2152.98 4140.06 2164.68 4156.98 c
-h
-2117.52 4188 m
-2118.06 4209.42 2121.3 4216.16 2130.12 4216.16 c
-2135.34 4216.16 2138.58 4213.42 2140.02 4208.1 c
-2140.92 4204.68 2141.28 4199.64 2141.64 4190.46 c
-2141.64 4188 l
-h
-2167.92 4137 m
-f*
-1 i
-1252.55 4102.55 914.4 15.5999 re
-f
-0.2 i
-3964.26 4176.36 m
-3953.64 4165.2 3947.88 4160.88 3939.06 4157.46 c
-3933.84 4155.3 3927.9 4154.58 3922.86 4154.58 c
-3910.98 4154.58 3899.64 4160.74 3894.42 4169.88 c
-3889.2 4179.42 3887 4192.2 3887 4210.38 c
-3887 4247.64 3898.23 4267.7 3919.8 4267.7 c
-3928.26 4267.7 3936 4264.38 3943.74 4257.36 c
-3951.48 4250.52 3955.62 4244.4 3961.92 4230.72 c
-3966.42 4230.72 l
-3966.42 4273.16 l
-3961.56 4273.16 l
-3958.86 4266.43 3957.06 4264.56 3953.64 4264.56 c
-3951.84 4264.56 3949.5 4265.28 3945.36 4267.08 c
-3934.92 4271.4 3926.1 4273.7 3917.46 4273.7 c
-3881.64 4273.7 3855 4245.84 3855 4208.76 c
-3855 4171.68 3881.21 4145.58 3918.54 4145.58 c
-3939.24 4145.58 3951.48 4151.88 3969.66 4171.86 c
-h
-3975.96 4149 m
-f*
-4039.18 4146.66 m
-4046.78 4149.36 4051.02 4150.08 4062.5 4151.34 c
-4073.66 4152.6 l
-4073.66 4157 l
-4065.74 4157.35 4064 4159.63 4064 4167.18 c
-4064 4232 l
-4027.4 4232 l
-4027.4 4227.66 l
-4036.4 4226.94 4039 4224.78 4039 4217.04 c
-4039 4166.1 l
-4032.88 4160.16 4029.18 4158.48 4023.8 4158.48 c
-4016.42 4158.48 4014 4162 4014 4170.96 c
-4014 4232 l
-3979.88 4232 l
-3979.88 4227.66 l
-3987.26 4226.22 3989 4224.6 3989 4217.04 c
-3989 4171.68 l
-3989 4155.84 3997.89 4146.48 4012.64 4146.48 c
-4022.16 4146.48 4028.56 4149.36 4039.18 4158.36 c
-h
-4077.08 4149 m
-f*
-4115.28 4232 m
-4081.22 4232 l
-4081.22 4227.66 l
-4088.96 4226.58 4091 4224.24 4091 4217.04 c
-4091 4164.12 l
-4091 4156.74 4089.19 4154.76 4081.22 4153.32 c
-4081.22 4149 l
-4129.1 4149 l
-4129.1 4153.32 l
-4118.12 4154.04 4116 4156.38 4116 4167.54 c
-4116 4201.56 l
-4116 4210.92 4121.02 4218.66 4126.94 4218.66 c
-4128.38 4218.66 4130 4217.4 4131.98 4214.52 c
-4135.4 4209.66 4138.1 4208.04 4142.78 4208.04 c
-4149.44 4208.04 4154.12 4213.08 4154.12 4219.92 c
-4154.12 4228.2 4148 4234.16 4139.54 4234.16 c
-4130.55 4234.16 4123.73 4229.47 4115.28 4217.22 c
-h
-4155.92 4149 m
-f*
-4196.28 4232 m
-4162.22 4232 l
-4162.22 4227.66 l
-4169.96 4226.58 4172 4224.24 4172 4217.04 c
-4172 4164.12 l
-4172 4156.74 4170.19 4154.76 4162.22 4153.32 c
-4162.22 4149 l
-4210.1 4149 l
-4210.1 4153.32 l
-4199.12 4154.04 4197 4156.38 4197 4167.54 c
-4197 4201.56 l
-4197 4210.92 4202.02 4218.66 4207.94 4218.66 c
-4209.38 4218.66 4211 4217.4 4212.98 4214.52 c
-4216.4 4209.66 4219.1 4208.04 4223.78 4208.04 c
-4230.44 4208.04 4235.12 4213.08 4235.12 4219.92 c
-4235.12 4228.2 4229 4234.16 4220.54 4234.16 c
-4211.55 4234.16 4204.73 4229.47 4196.28 4217.22 c
-h
-4236.92 4149 m
-f*
-4308.36 4171.5 m
-4300.98 4162.68 4295.58 4159.48 4287.84 4159.48 c
-4281 4159.48 4275.6 4162.53 4272 4168.62 c
-4268.58 4174.36 4267.14 4180.45 4266.42 4193 c
-4311.78 4193 l
-4310.7 4207.99 4308 4216.3 4302.42 4223.34 c
-4296.66 4230.36 4288.2 4234.16 4278.12 4234.16 c
-4255.62 4234.16 4240.5 4216.33 4240.5 4190.04 c
-4240.5 4163.76 4255.26 4146.48 4277.58 4146.48 c
-4292.16 4146.48 4300.98 4152.06 4312.68 4168.98 c
-h
-4265.52 4200 m
-4266.06 4221.42 4269.3 4228.16 4278.12 4228.16 c
-4283.34 4228.16 4286.58 4225.42 4288.02 4220.1 c
-4288.92 4216.68 4289.28 4211.64 4289.64 4202.46 c
-4289.64 4200 l
-h
-4315.92 4149 m
-f*
-4353.82 4232 m
-4319.78 4232 l
-4319.78 4227.66 l
-4327.7 4226.4 4329 4224.6 4329 4217.04 c
-4329 4164.12 l
-4329 4156.56 4327.61 4154.94 4319.78 4153.32 c
-4319.78 4149 l
-4363.16 4149 l
-4363.16 4153.32 l
-4356.5 4154.22 4354 4156.92 4354 4163.58 c
-4354 4211.64 l
-4354 4212.36 4355.4 4214.16 4357.4 4215.96 c
-4361.36 4219.92 4365.68 4222.16 4370 4222.16 c
-4376.12 4222.16 4379 4217.27 4379 4207.14 c
-4379 4163.58 l
-4379 4156.92 4376.71 4154.04 4370.72 4153.32 c
-4370.72 4149 l
-4413.02 4149 l
-4413.02 4153.32 l
-4406 4153.86 4404 4156.02 4404 4163.58 c
-4404 4208.76 l
-4404 4224.24 4394.54 4234.16 4379.9 4234.16 c
-4368.96 4234.16 4360.57 4229.11 4353.82 4218.48 c
-h
-4416.08 4149 m
-f*
-4470.9 4232 m
-4454 4232 l
-4454 4262.4 l
-4449.48 4262.4 l
-4438.5 4246.92 4431.3 4238.82 4419.6 4228.92 c
-4419.6 4224 l
-4429 4224 l
-4429 4165.74 l
-4429 4154.04 4436.73 4146.84 4449.12 4146.84 c
-4461.18 4146.84 4468.38 4152.24 4475.76 4167 c
-4471.26 4168.98 l
-4467.66 4162.14 4464.78 4159.84 4461 4159.84 c
-4455.96 4159.84 4454 4162.83 4454 4169.88 c
-4454 4224 l
-4470.9 4224 l
-h
-4475.94 4149 m
-f*
-4521 4149 m
-f*
-4625.94 4271 m
-4523.88 4271 l
-4523.88 4266 l
-4536.3 4265.29 4540 4262.63 4540 4253.4 c
-4540 4166.28 l
-4540 4156.92 4537.44 4154.94 4523.88 4153.5 c
-4523.88 4149 l
-4588.68 4149 l
-4588.68 4154 l
-4572.12 4154.69 4569 4156.77 4569 4166.28 c
-4569 4208.22 l
-4587.28 4207.86 4593.91 4201.2 4596.42 4180.32 c
-4600.92 4180.32 l
-4600.92 4241.16 l
-4596.42 4241.16 l
-4593.19 4220.64 4586.92 4214.34 4569 4214.34 c
-4569 4256.1 l
-4569 4262.76 4571.32 4265 4580.4 4265 c
-4597.14 4265 4607.58 4261.8 4613.16 4255.2 c
-4617.12 4250.7 4619.1 4245.84 4621.62 4234.5 c
-4625.94 4234.5 l
-h
-4630.98 4149 m
-f*
-4670.28 4232 m
-4636.22 4232 l
-4636.22 4227.66 l
-4643.96 4226.58 4646 4224.24 4646 4217.04 c
-4646 4164.12 l
-4646 4156.74 4644.19 4154.76 4636.22 4153.32 c
-4636.22 4149 l
-4684.1 4149 l
-4684.1 4153.32 l
-4673.12 4154.04 4671 4156.38 4671 4167.54 c
-4671 4201.56 l
-4671 4210.92 4676.02 4218.66 4681.94 4218.66 c
-4683.38 4218.66 4685 4217.4 4686.98 4214.52 c
-4690.4 4209.66 4693.1 4208.04 4697.78 4208.04 c
-4704.44 4208.04 4709.12 4213.08 4709.12 4219.92 c
-4709.12 4228.2 4703 4234.16 4694.54 4234.16 c
-4685.55 4234.16 4678.73 4229.47 4670.28 4217.22 c
-h
-4710.92 4149 m
-f*
-4796.14 4160.52 m
-4794.34 4158.72 l
-4793.8 4158.18 4793.26 4158 4792.36 4158 c
-4789.84 4158 4789 4159.44 4789 4162.5 c
-4789 4209.48 l
-4789 4224.78 4775.16 4234.16 4752.94 4234.16 c
-4732.6 4234.16 4718.92 4224.97 4718.92 4211.46 c
-4718.92 4203.9 4723.24 4199.58 4730.62 4199.58 c
-4737.82 4199.58 4742.86 4203.9 4742.86 4210.02 c
-4742.86 4212.54 4741.96 4214.88 4739.62 4217.76 c
-4738 4219.56 4737.46 4220.64 4737.46 4221.72 c
-4737.46 4225.5 4742.32 4228.16 4748.8 4228.16 c
-4759.42 4228.16 4764 4223.37 4764 4212.54 c
-4764 4199.4 l
-4742.89 4192.92 4734.41 4189.68 4727.56 4185.18 c
-4719.46 4179.78 4716 4173.48 4716 4165.56 c
-4716 4154.58 4724.07 4146.48 4735.3 4146.48 c
-4745.74 4146.48 4754.02 4150.08 4763.92 4159.08 c
-4765.9 4149.9 4769.86 4146.48 4778.68 4146.48 c
-4786.42 4146.48 4792 4149.36 4798.84 4156.74 c
-h
-4764 4167 m
-4759.04 4161.42 4755.37 4159.26 4750.96 4159.26 c
-4745.56 4159.26 4742 4164.12 4742 4171.32 c
-4742 4181.76 4749.57 4189.14 4764 4193.1 c
-h
-4801 4149 m
-f*
-4838.46 4232 m
-4803.73 4232 l
-4803.73 4227.66 l
-4811.65 4226.58 4814 4224.42 4814 4217.04 c
-4814 4164.12 l
-4814 4156.74 4811.95 4154.76 4803.73 4153.32 c
-4803.73 4149 l
-4846.93 4149 l
-4846.93 4153.32 l
-4840.63 4154.22 4839 4156.74 4839 4163.58 c
-4839 4211.64 l
-4839 4212.54 4841.51 4215.78 4843.51 4217.76 c
-4847.29 4220.64 4850.53 4222.16 4853.77 4222.16 c
-4860.79 4222.16 4864 4218 4864 4207.14 c
-4864 4163.58 l
-4864 4156.2 4861.9 4153.86 4854.85 4153.32 c
-4854.85 4149 l
-4896.97 4149 l
-4896.97 4153.32 l
-4890.67 4154.04 4889 4156.74 4889 4163.58 c
-4889 4211.64 l
-4889 4212.54 4891.43 4215.6 4893.37 4217.58 c
-4897.33 4220.64 4900.57 4222.16 4903.81 4222.16 c
-4910.65 4222.16 4913 4217.82 4913 4207.14 c
-4913 4163.58 l
-4913 4156.02 4911.1 4153.86 4904.53 4153.32 c
-4904.53 4149 l
-4947.37 4149 l
-4947.37 4153 l
-4940.35 4153.37 4938 4155.6 4938 4163.58 c
-4938 4208.76 l
-4938 4224.24 4928.6 4234.16 4914.07 4234.16 c
-4903.81 4234.16 4896.97 4230.01 4887.61 4218.48 c
-4882.21 4229.82 4875.91 4234.16 4864.57 4234.16 c
-4853.2 4234.16 4845.21 4229.29 4838.46 4218.48 c
-h
-4950.94 4149 m
-f*
-5023.36 4171.5 m
-5015.98 4162.68 5010.58 4159.48 5002.84 4159.48 c
-4996 4159.48 4990.6 4162.53 4987 4168.62 c
-4983.58 4174.36 4982.14 4180.45 4981.42 4193 c
-5026.78 4193 l
-5025.7 4207.99 5023 4216.3 5017.42 4223.34 c
-5011.66 4230.36 5003.2 4234.16 4993.12 4234.16 c
-4970.62 4234.16 4955.5 4216.33 4955.5 4190.04 c
-4955.5 4163.76 4970.26 4146.48 4992.58 4146.48 c
-5007.16 4146.48 5015.98 4152.06 5027.68 4168.98 c
-h
-4980.52 4200 m
-4981.06 4221.42 4984.3 4228.16 4993.12 4228.16 c
-4998.34 4228.16 5001.58 4225.42 5003.02 4220.1 c
-5003.92 4216.68 5004.28 4211.64 5004.64 4202.46 c
-5004.64 4200 l
-h
-5030.92 4149 m
-f*
-1 i
-3845.75 4114.55 1184.4 15.5999 re
-f
-1 g
-4451.75 4341.35 m
-4618.55 4492.55 l
-4535.75 4492.55 l
-4535.75 4646.15 l
-4370.15 4646.15 l
-4370.15 4492.55 l
-4288.55 4492.55 l
-f*
-0 g
-4451.75 4341.35 m
-4618.55 4492.55 l
-4535.75 4492.55 l
-4535.75 4646.15 l
-4370.15 4646.15 l
-4370.15 4492.55 l
-4288.55 4492.55 l
-4451.75 4341.35 l
-4451.75 4354.55 l
-4313.75 4481.75 l
-4379.75 4481.75 l
-4379.75 4636.55 l
-4526.15 4636.55 l
-4526.15 4481.75 l
-4592.15 4481.75 l
-4451.75 4354.55 l
-4451.75 4341.35 l
-f*
-0.201248 i
-1299.33 5632 m
-1185.22 5632 l
-1185.22 5627 l
-1199.11 5626.2 1203 5623.18 1203 5612.72 c
-1203 5515.32 l
-1203 5504.85 1200.17 5502.64 1185.22 5501.03 c
-1185.22 5496 l
-1257.67 5496 l
-1257.67 5501 l
-1239.15 5501.81 1236 5504.23 1236 5515.32 c
-1236 5562.21 l
-1256.22 5561.81 1263.55 5554.36 1266.32 5531.02 c
-1271.35 5531.02 l
-1271.35 5599.04 l
-1266.32 5599.04 l
-1262.76 5576.1 1255.82 5569.05 1236 5569.05 c
-1236 5615.74 l
-1236 5623.19 1238.52 5625 1248.41 5625 c
-1267.13 5625 1278.8 5621.64 1285.04 5614.74 c
-1289.47 5609.71 1291.68 5604.27 1294.5 5591.59 c
-1299.33 5591.59 l
-h
-1304.96 5496 m
-f*
-1349.19 5589 m
-1310.84 5589 l
-1310.84 5583.95 l
-1319.49 5582.74 1322 5580.12 1322 5572.07 c
-1322 5512.9 l
-1322 5504.65 1319.93 5502.44 1310.84 5500.83 c
-1310.84 5496 l
-1364.37 5496 l
-1364.37 5500.83 l
-1352.09 5501.63 1350 5504.25 1350 5516.73 c
-1350 5554.76 l
-1350 5565.23 1355.49 5573.88 1361.95 5573.88 c
-1363.56 5573.88 1365.37 5572.47 1367.59 5569.25 c
-1371.41 5563.82 1374.43 5562.01 1379.66 5562.01 c
-1387.11 5562.01 1392.34 5567.64 1392.34 5575.29 c
-1392.34 5584.55 1385.5 5591.41 1376.04 5591.41 c
-1366.1 5591.41 1358.54 5586.12 1349.19 5572.27 c
-h
-1394.35 5496 m
-f*
-1489.19 5508.88 m
-1487.18 5506.87 l
-1486.57 5506.26 1485.97 5506.06 1484.96 5506.06 c
-1482.15 5506.06 1481 5507.67 1481 5511.09 c
-1481 5563.62 l
-1481 5580.73 1465.6 5591.42 1440.89 5591.42 c
-1418.15 5591.42 1402.85 5581.06 1402.85 5565.83 c
-1402.85 5557.38 1407.69 5552.55 1415.94 5552.55 c
-1423.99 5552.55 1429.62 5557.38 1429.62 5564.22 c
-1429.62 5567.04 1428.61 5569.66 1426 5572.88 c
-1424.19 5574.89 1423.58 5576.1 1423.58 5577.3 c
-1423.58 5581.53 1429.02 5584.42 1436.26 5584.42 c
-1448.14 5584.42 1453.86 5579.08 1453.86 5567.04 c
-1453.86 5552.35 l
-1429.91 5545.1 1420.29 5541.48 1412.51 5536.45 c
-1403.46 5530.41 1399 5523.37 1399 5514.52 c
-1399 5502.24 1408.27 5493.18 1421.17 5493.18 c
-1432.84 5493.18 1442.1 5497.21 1453.17 5507.27 c
-1455.38 5497.01 1459.81 5493.18 1469.67 5493.18 c
-1478.32 5493.18 1484.56 5496.4 1492.21 5504.65 c
-h
-1453 5516.13 m
-1447.55 5509.89 1443.52 5507.47 1438.68 5507.47 c
-1432.64 5507.47 1428 5512.91 1428 5520.96 c
-1428 5532.63 1436.61 5540.88 1453 5545.31 c
-h
-1494.62 5496 m
-f*
-1536.4 5589 m
-1497.7 5589 l
-1497.7 5583.95 l
-1506.55 5582.74 1509 5580.32 1509 5572.07 c
-1509 5512.9 l
-1509 5504.65 1506.74 5502.44 1497.7 5500.83 c
-1497.7 5496 l
-1546 5496 l
-1546 5500.83 l
-1538.95 5501.84 1537 5504.65 1537 5512.3 c
-1537 5566.03 l
-1537 5567.04 1539.87 5570.66 1542.18 5572.88 c
-1546.4 5576.1 1550.02 5578.42 1553.65 5578.42 c
-1561.5 5578.42 1565 5573.59 1565 5561 c
-1565 5512.3 l
-1565 5504.05 1562.68 5501.43 1554.85 5500.83 c
-1554.85 5496 l
-1601.95 5496 l
-1601.95 5500.83 l
-1594.9 5501.64 1593 5504.65 1593 5512.3 c
-1593 5566.03 l
-1593 5567.04 1595.73 5570.46 1597.92 5572.68 c
-1602.35 5576.1 1605.97 5578.42 1609.59 5578.42 c
-1617.24 5578.42 1620 5573.38 1620 5561 c
-1620 5512.3 l
-1620 5503.85 1617.85 5501.43 1610.4 5500.83 c
-1610.4 5496 l
-1658.3 5496 l
-1658.3 5501 l
-1650.45 5501.4 1648 5503.78 1648 5512.3 c
-1648 5562.81 l
-1648 5580.12 1637.43 5591.42 1621.07 5591.42 c
-1609.59 5591.42 1601.95 5586.73 1591.48 5573.68 c
-1585.44 5586.36 1578.4 5591.42 1565.72 5591.42 c
-1552.95 5591.42 1543.98 5585.91 1536.4 5573.68 c
-h
-1661.64 5496 m
-f*
-1739.9 5521.16 m
-1731.65 5511.29 1725.61 5507.18 1716.96 5507.18 c
-1709.31 5507.18 1703.27 5510.77 1699.25 5517.94 c
-1695.43 5524.54 1693.82 5531.56 1693.01 5546 c
-1743.73 5546 l
-1742.52 5562.36 1739.5 5571.43 1733.26 5579.12 c
-1726.82 5586.96 1717.36 5591.42 1706.09 5591.42 c
-1680.94 5591.42 1664.03 5571.4 1664.03 5541.88 c
-1664.03 5512.5 1680.53 5493.18 1705.49 5493.18 c
-1721.79 5493.18 1731.65 5499.42 1744.73 5518.34 c
-h
-1692 5553 m
-1692.61 5576.96 1696.23 5584.42 1706.09 5584.42 c
-1711.93 5584.42 1715.55 5581.38 1717.16 5575.49 c
-1718.17 5571.67 1718.57 5566.03 1718.97 5555.77 c
-1718.97 5553 l
-h
-1748.35 5496 m
-f*
-1845.16 5591.59 m
-1845.16 5635.22 l
-1839.37 5635.22 l
-1837.96 5629.82 1836.55 5628.42 1832.93 5628.42 c
-1831.12 5628.42 1828.7 5629.03 1824.47 5630.43 c
-1815.22 5633.86 1808.78 5635.02 1800.93 5635.02 c
-1773.56 5635.02 1757 5619.54 1757 5594.01 c
-1757 5588.98 1757.75 5584.75 1759.07 5580.73 c
-1763.29 5570.06 1774.16 5560.6 1791.27 5552.35 c
-1804.75 5545.91 l
-1822.46 5537.46 1827 5532.22 1827 5521.56 c
-1827 5507.67 1817.25 5499.18 1801.94 5499.18 c
-1790.26 5499.18 1780.6 5503.89 1772.96 5513.31 c
-1767.12 5520.75 1764.3 5527.6 1760.88 5541.88 c
-1755.04 5541.88 l
-1755.04 5492.18 l
-1760.88 5492.18 l
-1762.09 5497.41 1763.7 5499.02 1766.92 5499.02 c
-1768.53 5499.02 1770.74 5498.42 1775.17 5497.01 c
-1785.03 5493.59 1792.48 5492.18 1801.33 5492.18 c
-1831.12 5492.18 1851 5509.28 1851 5534.64 c
-1851 5549.73 1842.04 5564.83 1829.1 5571.27 c
-1799.52 5585.96 l
-1783.22 5594.01 1779 5598.84 1779 5608.7 c
-1779 5621.18 1787.37 5628.02 1800.93 5628.02 c
-1809.99 5628.02 1818.44 5624.47 1825.68 5617.55 c
-1832.53 5610.51 1835.75 5604.67 1839.77 5591.59 c
-h
-1859.89 5496 m
-f*
-1940.9 5521.16 m
-1932.65 5511.29 1926.61 5507.18 1917.96 5507.18 c
-1910.31 5507.18 1904.27 5510.77 1900.25 5517.94 c
-1896.43 5524.54 1894.82 5531.56 1894.01 5546 c
-1944.73 5546 l
-1943.52 5562.36 1940.5 5571.43 1934.26 5579.12 c
-1927.82 5586.96 1918.36 5591.42 1907.09 5591.42 c
-1881.94 5591.42 1865.03 5571.4 1865.03 5541.88 c
-1865.03 5512.5 1881.53 5493.18 1906.49 5493.18 c
-1922.79 5493.18 1932.65 5499.42 1945.73 5518.34 c
-h
-1893 5553 m
-1893.61 5576.96 1897.23 5584.42 1907.09 5584.42 c
-1912.93 5584.42 1916.55 5581.38 1918.16 5575.49 c
-1919.17 5571.67 1919.57 5566.03 1919.97 5555.77 c
-1919.97 5553 l
-h
-1949.35 5496 m
-f*
-2010.38 5589 m
-1991 5589 l
-1991 5622.79 l
-1986.43 5622.79 l
-1974.16 5605.48 1966.11 5596.42 1953.02 5585.35 c
-1953.02 5580 l
-1963 5580 l
-1963 5514.72 l
-1963 5501.64 1971.84 5493.59 1986.03 5493.59 c
-1999.51 5493.59 2007.56 5499.62 2015.81 5516.12 c
-2010.78 5518.34 l
-2006.76 5510.69 2003.54 5507.59 1999.31 5507.59 c
-1993.68 5507.59 1991 5511.09 1991 5519.34 c
-1991 5580 l
-2010.38 5580 l
-h
-2016.02 5496 m
-f*
-1 i
-3845.75 5319.35 m
-3800.15 5330.15 3752.15 5336.15 3702.95 5336.15 c
-3534.95 5336.15 3387.35 5266.55 3341.75 5164.55 c
-S
-3790.55 5280.95 m
-3825.35 5319.35 l
-3821.75 5370.95 l
-3951.35 5276.15 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 4422 a(Figure)45 b(12:)69 b(The)43 b(F)-8
-b(rameSet)46 b(pro)s(duced)c(when)h(AST)p Fy(_)p FG(CONVER)-8
-b(T)43 b(is)h(used)g(to)h(con)m(v)m(ert)g(b)s(et)m(w)m(een)g(the)0
-4535 y(co)s(ordinate)d(systems)e(represen)m(ted)h(b)m(y)g(t)m(w)m(o)h
-(SkyF)-8 b(rames.)72 b(The)40 b(source)h(SkyF)-8 b(rame)41
-b(b)s(ecomes)g(the)g(base)0 4648 y(F)-8 b(rame,)45 b(while)d(the)g
-(destination)g(SkyF)-8 b(rame)42 b(b)s(ecomes)f(the)h(curren)m(t)f(F)-8
-b(rame.)75 b(The)41 b(Mapping)h(b)s(et)m(w)m(een)0 4761
-y(them)30 b(implemen)m(ts)h(the)g(required)e(con)m(v)m(ersion.)0
-5076 y(F)-8 b(rameSet)25 b(con)m(tains)f(just)f(t)m(w)m(o)i(F)-8
-b(rames.)39 b(The)23 b(source)g(F)-8 b(rame)24 b(supplied)e(to)j(AST)p
-Fy(_)p FG(CONVER)-8 b(T)21 b(b)s(ecomes)j(its)0 5189
-y(base)29 b(F)-8 b(rame,)30 b(while)f(the)g(destination)g(F)-8
-b(rame)30 b(b)s(ecomes)f(its)g(curren)m(t)f(F)-8 b(rame.)41
-b(\(The)29 b(F)-8 b(rameSet,)30 b(of)f(course,)0 5302
-y(simply)g(holds)f(p)s(oin)m(ters)h(to)h(these)g(F)-8
-b(rames,)30 b(rather)g(than)e(making)i(copies.\))41 b(The)29
-b(Mapping)g(whic)m(h)g(relates)0 5414 y(the)i(base)f(F)-8
-b(rame)31 b(to)g(the)g(curren)m(t)f(F)-8 b(rame)32 b(is)e(the)g(one)h
-(whic)m(h)f(implemen)m(ts)h(the)g(required)e(con)m(v)m(ersion.)0
-5580 y(As)f(w)m(e)h(noted)g(earlier)h(\()p Fu(x)p FG(12.1\),)h(the)e(F)
--8 b(rameSet)30 b(returned)d(b)m(y)i(AST)p Fy(_)p FG(CONVER)-8
-b(T)27 b(ma)m(y)i(b)s(e)f(used)f(b)s(oth)h(as)h(a)0 5693
-y(Mapping)g(and)g(as)h(a)g(F)-8 b(rame)30 b(to)g(p)s(erform)e(most)i
-(of)g(the)f(functions)g(y)m(ou)h(are)g(lik)m(ely)h(to)f(need.)40
-b(Ho)m(w)m(ev)m(er,)32 b(the)p eop end
-%%Page: 116 126
-TeXDict begin 116 125 bop 0 52 a FG(116)1350 b Fz(14)92
-b(HIGHER)30 b(LEVEL)g(OPERA)-8 b(TIONS)29 b(ON)h(FRAMESETS)0
-351 y FG(Mapping)f(ma)m(y)i(b)s(e)d(extracted)j(for)e(use)h(on)f(its)h
-(o)m(wn)f(if)h(necessary)-8 b(,)31 b(using)e(AST)p Fy(_)p
-FG(GETMAPPING)g(\()p Fu(x)p FG(13.7\),)0 464 y(for)h(example:)262
-708 y Ft(INTEGER)40 b(MAPPING)262 907 y(...)262 1106
-y(MAPPING)g(=)j(AST_GETMAPPING\()38 b(CVT,)k(AST__BASE,)d
-(AST__CURRENT,)f(STATUS)j(\))0 1397 y Fw(14.2)112 b(Con)m(v)m(erting)38
-b(b)s(et)m(w)m(een)g(F)-9 b(rameSet)38 b(Co)s(ordinate)g(Systems)0
-1618 y FG(W)-8 b(e)33 b(no)m(w)f(consider)f(the)h(pro)s(cess)f(of)h
-(con)m(v)m(erting)i(b)s(et)m(w)m(een)e(the)g(co)s(ordinate)g(systems)g
-(represen)m(ted)g(b)m(y)f(t)m(w)m(o)0 1730 y(F)-8 b(rameSets.)69
-b(This)39 b(is)h(a)f(most)h(imp)s(ortan)m(t)g(op)s(eration,)j(as)c(a)h
-(subsequen)m(t)f(example)h(\()p Fu(x)p FG(14.3\))i(will)e(sho)m(w,)0
-1843 y(and)33 b(is)g(illustrated)h(in)f(Figure)g(13.)99
-b(Recalling)35 b(\()p Fu(x)p FG(13.8\))h(that)d(a)h(F)-8
-b(rameSet)34 b(will)g(b)s(eha)m(v)m(e)g(lik)m(e)g(its)g(curren)m(t)0
-1956 y(F)-8 b(rame)29 b(when)f(necessary)-8 b(,)29 b(con)m(v)m(ersion)h
-(b)s(et)m(w)m(een)f(t)m(w)m(o)h(F)-8 b(rameSets)29 b(is)f(p)s(erformed)
-f(using)h(AST)p Fy(_)p FG(CONVER)-8 b(T)0 2069 y(\()p
-Fu(x)p FG(12.1\),)33 b(but)d(supplying)f(p)s(oin)m(ters)i(to)g(F)-8
-b(rameSets)32 b(instead)e(of)h(F)-8 b(rames.)42 b(The)30
-b(e\013ect)i(of)f(this)f(is)h(to)g(con)m(v)m(ert)0 2182
-y(b)s(et)m(w)m(een)g(the)g(co)s(ordinate)g(systems)f(represen)m(ted)h
-(b)m(y)f(the)g(curren)m(t)g(F)-8 b(rames)32 b(of)e(eac)m(h)i(F)-8
-b(rameSet:)262 2426 y Ft(INTEGER)40 b(FRAMESETA,)g(FRAMESETB)262
-2625 y(...)262 2824 y(CVT)i(=)h(AST_CONVERT\()c(FRAMESETA,)g
-(FRAMESETB,)h('SKY',)h(STATUS)g(\))0 3081 y FG(When)28
-b(using)g(F)-8 b(rameSets,)31 b(w)m(e)e(are)f(presen)m(ted)h(with)f
-(considerably)h(more)f(con)m(v)m(ersion)i(options)f(than)f(when)0
-3194 y(using)36 b(F)-8 b(rames)36 b(alone.)59 b(This)35
-b(is)h(b)s(ecause)g(eac)m(h)h(curren)m(t)f(F)-8 b(rame)37
-b(is)f(related)h(to)g(all)g(the)f(other)g(F)-8 b(rames)37
-b(in)0 3307 y(its)d(resp)s(ectiv)m(e)g(F)-8 b(rameSet.)50
-b(Therefore,)34 b(if)f(w)m(e)g(can)h(establish)f(a)h(link)f(b)s(et)m(w)
-m(een)h(an)m(y)f(pair)g(of)g(F)-8 b(rames,)35 b(one)0
-3420 y(from)c(eac)m(h)i(F)-8 b(rameSet,)34 b(w)m(e)e(can)g(form)f(a)h
-(complete)h(con)m(v)m(ersion)g(path)f(b)s(et)m(w)m(een)g(the)g(t)m(w)m
-(o)h(curren)m(t)f(F)-8 b(rames)0 3533 y(\(Figure)31 b(13\).)0
-3694 y(This)39 b(expanded)f(range)i(of)g(options)g(is,)i(of)e(course,)i
-(precisely)e(the)g(in)m(ten)m(tion.)69 b(By)40 b(connecting)h(F)-8
-b(rames)0 3807 y(together)43 b(within)d(a)h(F)-8 b(rameSet,)46
-b(w)m(e)41 b(ha)m(v)m(e)h(extended)f(the)h(range)f(of)g(co)s(ordinate)h
-(systems)f(that)h(can)f(b)s(e)0 3920 y(reac)m(hed)g(from)e(an)m(y)i
-(one)f(of)g(them.)70 b(W)-8 b(e)42 b(are)e(therefore)h(no)f(longer)g
-(restricted)h(to)g(con)m(v)m(erting)h(b)s(et)m(w)m(een)0
-4033 y(F)-8 b(rames)31 b(with)f(the)g(same)g(Domain)h(v)-5
-b(alue)30 b(\()p Fu(x)p FG(7.12\),)j(but)d(can)g(go)h
-Fx(via)f FG(a)g(range)h(of)f(in)m(termediate)i(co)s(ordinate)0
-4146 y(systems)d(in)f(order)h(to)g(mak)m(e)h(the)f(connection)h(w)m(e)f
-(require.)40 b(T)-8 b(ransformation)29 b(b)s(et)m(w)m(een)g(di\013eren)
-m(t)h(domains)0 4259 y(has)c(therefore)h(b)s(ecome)g(p)s(ossible)f(b)s
-(ecause,)i(in)e(assem)m(bling)h(the)g(F)-8 b(rameSets,)29
-b(w)m(e)e(pro)m(vided)f(the)h(additional)0 4372 y(information)k(needed)
-f(to)h(in)m(ter-relate)h(them.)0 4533 y(It)25 b(is)g(imp)s(ortan)m(t)h
-(to)f(appreciate,)j(ho)m(w)m(ev)m(er,)g(that)d(the)h(c)m(hoice)h(of)e
-(\\missing)g(link")h(is)f(crucial)h(in)f(determining)0
-4646 y(the)j(con)m(v)m(ersion)h(that)f(results.)39 b(Although)28
-b(eac)m(h)h(F)-8 b(rameSet)29 b(ma)m(y)f(b)s(e)f(p)s(erfectly)g
-(self-consisten)m(t)j(in)m(ternally)-8 b(,)0 4759 y(this)36
-b(do)s(es)g(not)h(mean)f(that)h(all)h(con)m(v)m(ersion)f(paths)f
-(through)g(the)h(com)m(bined)f(net)m(w)m(ork)h(of)g(Mappings)f(are)0
-4872 y(equiv)-5 b(alen)m(t.)53 b(Quite)35 b(the)f(con)m(trary)h(in)e
-(fact:)49 b(ev)m(erything)35 b(dep)s(ends)e(on)h(where)f(the)h(in)m
-(ter-connecting)j(link)0 4985 y(b)s(et)m(w)m(een)43 b(the)g(t)m(w)m(o)h
-(F)-8 b(rameSets)43 b(is)g(made.)77 b(In)42 b(practice,)47
-b(there)c(ma)m(y)g(b)s(e)f(a)g(large)i(n)m(um)m(b)s(er)d(of)i(p)s
-(ossible)0 5097 y(pairings)30 b(of)h(F)-8 b(rames)31
-b(and)e(hence)i(of)f(p)s(ossible)g(links.)41 b(Other)29
-b(factors)j(m)m(ust)e(therefore)g(b)s(e)g(used)g(to)h(restrict)0
-5210 y(the)g(c)m(hoice.)42 b(These)30 b(are:)111 5467
-y(1.)46 b(Not)g(ev)m(ery)g(p)s(ossible)e(pairing)h(of)h(F)-8
-b(rames)45 b(is)g(legitimate.)88 b(F)-8 b(or)45 b(example,)50
-b(y)m(ou)45 b(cannot)h(con)m(v)m(ert)227 5580 y(directly)30
-b(b)s(et)m(w)m(een)h(a)e(basic)h(F)-8 b(rame)31 b(and)e(a)g(SkyF)-8
-b(rame)30 b(whic)m(h)f(b)s(elong)h(to)g(di\013eren)m(t)g(classes,)h(so)
-f(suc)m(h)227 5693 y(pairings)g(will)h(b)s(e)f(ignored.)p
-eop end
-%%Page: 117 127
-TeXDict begin 117 126 bop 0 52 a Fz(14.2)93 b(Con)m(v)m(erting)31
-b(b)s(et)m(w)m(een)g(F)-8 b(rameSet)32 b(Co)s(ordinate)e(Systems)1372
-b FG(117)565 4227 y @beginspecial 36 @llx 91 @lly 566
- at urx 744 @ury 3180 @rwi @setspecial
-%%BeginDocument: sun210_figures/fsalign.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 36 91 566 744
-%..................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/23 16:33:47
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5654.15 3802.55 m
-5654.15 4022.15 5475.35 4200.95 5255.75 4200.95 c
-2070.95 4200.95 l
-1851.35 4200.95 1672.55 4022.15 1672.55 3802.55 c
-1672.55 1598.15 l
-1672.55 1378.55 1851.35 1199.75 2070.95 1199.75 c
-5255.75 1199.75 l
-5475.35 1199.75 5654.15 1378.55 5654.15 1598.15 c
-f*
-1 g
-5589.35 3857.75 m
-5589.35 4077.35 5411.75 4254.95 5192.15 4254.95 c
-2015.75 4254.95 l
-1796.15 4254.95 1618.55 4077.35 1618.55 3857.75 c
-1618.55 1661.75 l
-1618.55 1442.15 1796.15 1264.55 2015.75 1264.55 c
-5192.15 1264.55 l
-5411.75 1264.55 5589.35 1442.15 5589.35 1661.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5589.35 3857.75 m
-5589.35 4077.35 5411.75 4254.95 5192.15 4254.95 c
-2015.75 4254.95 l
-1796.15 4254.95 1618.55 4077.35 1618.55 3857.75 c
-1618.55 1661.75 l
-1618.55 1442.15 1796.15 1264.55 2015.75 1264.55 c
-5192.15 1264.55 l
-5411.75 1264.55 5589.35 1442.15 5589.35 1661.75 c
-h
-S
-0.564706 g
-4634.15 7005.35 m
-4634.15 7212.95 4466.15 7380.95 4258.55 7380.95 c
-1157.75 7380.95 l
-950.15 7380.95 782.15 7212.95 782.15 7005.35 c
-782.15 4755.35 l
-782.15 4547.75 950.15 4379.75 1157.75 4379.75 c
-4258.55 4379.75 l
-4466.15 4379.75 4634.15 4547.75 4634.15 4755.35 c
-f*
-1 g
-4569.35 7061.75 m
-4569.35 7268.15 4402.55 7434.95 4196.15 7434.95 c
-1101.35 7434.95 l
-894.95 7434.95 728.15 7268.15 728.15 7061.75 c
-728.15 4817.75 l
-728.15 4611.35 894.95 4444.55 1101.35 4444.55 c
-4196.15 4444.55 l
-4402.55 4444.55 4569.35 4611.35 4569.35 4817.75 c
-f*
-0 g
-4569.35 7061.75 m
-4569.35 7268.15 4402.55 7434.95 4196.15 7434.95 c
-1101.35 7434.95 l
-894.95 7434.95 728.15 7268.15 728.15 7061.75 c
-728.15 4817.75 l
-728.15 4611.35 894.95 4444.55 1101.35 4444.55 c
-4196.15 4444.55 l
-4402.55 4444.55 4569.35 4611.35 4569.35 4817.75 c
-h
-S
-0.564706 g
-1962.95 7095.35 m
-1962.95 7205.75 1871.75 7296.95 1760.15 7296.95 c
-1263.35 7296.95 l
-1151.75 7296.95 1060.55 7205.75 1060.55 7095.35 c
-1060.55 6957.35 l
-1060.55 6846.95 1151.75 6755.75 1263.35 6755.75 c
-1760.15 6755.75 l
-1871.75 6755.75 1962.95 6846.95 1962.95 6957.35 c
-f*
-1 g
-1898.15 7152.95 m
-1898.15 7262.15 1809.35 7350.95 1697.75 7350.95 c
-1206.95 7350.95 l
-1096.55 7350.95 1006.55 7262.15 1006.55 7152.95 c
-1006.55 7018.55 l
-1006.55 6909.35 1095.35 6820.55 1206.95 6820.55 c
-1697.75 6820.55 l
-1809.35 6820.55 1898.15 6909.35 1898.15 7018.55 c
-f*
-0 g
-1898.15 7152.95 m
-1898.15 7262.15 1809.35 7350.95 1697.75 7350.95 c
-1206.95 7350.95 l
-1096.55 7350.95 1006.55 7262.15 1006.55 7152.95 c
-1006.55 7018.55 l
-1006.55 6909.35 1095.35 6820.55 1206.95 6820.55 c
-1697.75 6820.55 l
-1809.35 6820.55 1898.15 6909.35 1898.15 7018.55 c
-h
-S
-0.201248 i
-1239.33 7192 m
-1125.22 7192 l
-1125.22 7187 l
-1139.11 7186.2 1143 7183.18 1143 7172.72 c
-1143 7075.32 l
-1143 7064.85 1140.17 7062.64 1125.22 7061.03 c
-1125.22 7056 l
-1197.67 7056 l
-1197.67 7061 l
-1179.15 7061.81 1176 7064.23 1176 7075.32 c
-1176 7122.21 l
-1196.22 7121.81 1203.55 7114.36 1206.32 7091.02 c
-1211.35 7091.02 l
-1211.35 7159.04 l
-1206.32 7159.04 l
-1202.76 7136.1 1195.82 7129.05 1176 7129.05 c
-1176 7175.74 l
-1176 7183.19 1178.52 7185 1188.41 7185 c
-1207.13 7185 1218.8 7181.64 1225.04 7174.74 c
-1229.47 7169.71 1231.68 7164.27 1234.5 7151.59 c
-1239.33 7151.59 l
-h
-1244.96 7056 m
-f*
-1289.19 7149 m
-1250.84 7149 l
-1250.84 7143.95 l
-1259.49 7142.74 1262 7140.12 1262 7132.07 c
-1262 7072.9 l
-1262 7064.65 1259.93 7062.44 1250.84 7060.83 c
-1250.84 7056 l
-1304.37 7056 l
-1304.37 7060.83 l
-1292.09 7061.63 1290 7064.25 1290 7076.73 c
-1290 7114.76 l
-1290 7125.23 1295.49 7133.88 1301.95 7133.88 c
-1303.56 7133.88 1305.37 7132.47 1307.59 7129.25 c
-1311.41 7123.82 1314.43 7122.01 1319.66 7122.01 c
-1327.11 7122.01 1332.34 7127.64 1332.34 7135.29 c
-1332.34 7144.55 1325.5 7151.41 1316.04 7151.41 c
-1306.1 7151.41 1298.54 7146.12 1289.19 7132.27 c
-h
-1334.35 7056 m
-f*
-1429.19 7068.88 m
-1427.18 7066.87 l
-1426.57 7066.26 1425.97 7066.06 1424.96 7066.06 c
-1422.15 7066.06 1421 7067.67 1421 7071.09 c
-1421 7123.62 l
-1421 7140.73 1405.6 7151.42 1380.89 7151.42 c
-1358.15 7151.42 1342.85 7141.06 1342.85 7125.83 c
-1342.85 7117.38 1347.69 7112.55 1355.94 7112.55 c
-1363.99 7112.55 1369.62 7117.38 1369.62 7124.22 c
-1369.62 7127.04 1368.61 7129.66 1366 7132.88 c
-1364.19 7134.89 1363.58 7136.1 1363.58 7137.3 c
-1363.58 7141.53 1369.02 7144.42 1376.26 7144.42 c
-1388.14 7144.42 1393.86 7139.08 1393.86 7127.04 c
-1393.86 7112.35 l
-1369.91 7105.1 1360.29 7101.48 1352.51 7096.45 c
-1343.46 7090.41 1339 7083.37 1339 7074.52 c
-1339 7062.24 1348.27 7053.18 1361.17 7053.18 c
-1372.84 7053.18 1382.1 7057.21 1393.17 7067.27 c
-1395.38 7057.01 1399.81 7053.18 1409.67 7053.18 c
-1418.32 7053.18 1424.56 7056.4 1432.21 7064.65 c
-h
-1393 7076.13 m
-1387.55 7069.89 1383.52 7067.47 1378.68 7067.47 c
-1372.64 7067.47 1368 7072.91 1368 7080.96 c
-1368 7092.63 1376.61 7100.88 1393 7105.31 c
-h
-1434.62 7056 m
-f*
-1476.4 7149 m
-1437.7 7149 l
-1437.7 7143.95 l
-1446.55 7142.74 1449 7140.32 1449 7132.07 c
-1449 7072.9 l
-1449 7064.65 1446.74 7062.44 1437.7 7060.83 c
-1437.7 7056 l
-1486 7056 l
-1486 7060.83 l
-1478.95 7061.84 1477 7064.65 1477 7072.3 c
-1477 7126.03 l
-1477 7127.04 1479.87 7130.66 1482.18 7132.88 c
-1486.4 7136.1 1490.02 7138.42 1493.65 7138.42 c
-1501.5 7138.42 1505 7133.59 1505 7121 c
-1505 7072.3 l
-1505 7064.05 1502.68 7061.43 1494.85 7060.83 c
-1494.85 7056 l
-1541.95 7056 l
-1541.95 7060.83 l
-1534.9 7061.64 1533 7064.65 1533 7072.3 c
-1533 7126.03 l
-1533 7127.04 1535.73 7130.46 1537.92 7132.68 c
-1542.35 7136.1 1545.97 7138.42 1549.59 7138.42 c
-1557.24 7138.42 1560 7133.38 1560 7121 c
-1560 7072.3 l
-1560 7063.85 1557.85 7061.43 1550.4 7060.83 c
-1550.4 7056 l
-1598.3 7056 l
-1598.3 7061 l
-1590.45 7061.4 1588 7063.78 1588 7072.3 c
-1588 7122.81 l
-1588 7140.12 1577.43 7151.42 1561.07 7151.42 c
-1549.59 7151.42 1541.95 7146.73 1531.48 7133.68 c
-1525.44 7146.36 1518.4 7151.42 1505.72 7151.42 c
-1492.95 7151.42 1483.98 7145.91 1476.4 7133.68 c
-h
-1601.64 7056 m
-f*
-1679.9 7081.16 m
-1671.65 7071.29 1665.61 7067.18 1656.96 7067.18 c
-1649.31 7067.18 1643.27 7070.77 1639.25 7077.94 c
-1635.43 7084.54 1633.82 7091.56 1633.01 7106 c
-1683.73 7106 l
-1682.52 7122.36 1679.5 7131.43 1673.26 7139.12 c
-1666.82 7146.96 1657.36 7151.42 1646.09 7151.42 c
-1620.94 7151.42 1604.03 7131.4 1604.03 7101.88 c
-1604.03 7072.5 1620.53 7053.18 1645.49 7053.18 c
-1661.79 7053.18 1671.65 7059.42 1684.73 7078.34 c
-h
-1632 7113 m
-1632.61 7136.96 1636.23 7144.42 1646.09 7144.42 c
-1651.93 7144.42 1655.55 7141.38 1657.16 7135.49 c
-1658.17 7131.67 1658.57 7126.03 1658.97 7115.77 c
-1658.97 7113 l
-h
-1688.35 7056 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -1732 -7056]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4422.95 6294.95 m
-4422.95 6406.55 4331.75 6497.75 4220.15 6497.75 c
-3723.35 6497.75 l
-3611.75 6497.75 3520.55 6406.55 3520.55 6294.95 c
-3520.55 6158.15 l
-3520.55 6046.55 3611.75 5955.35 3723.35 5955.35 c
-4220.15 5955.35 l
-4331.75 5955.35 4422.95 6046.55 4422.95 6158.15 c
-f*
-1 g
-4353.35 6351.35 m
-4353.35 6459.35 4264.55 6546.95 4155.35 6546.95 c
-3669.35 6546.95 l
-3560.15 6546.95 3471.35 6459.35 3471.35 6351.35 c
-3471.35 6220.55 l
-3471.35 6112.55 3560.15 6024.95 3669.35 6024.95 c
-4155.35 6024.95 l
-4264.55 6024.95 4353.35 6112.55 4353.35 6220.55 c
-f*
-16 w
-0 g
-4353.35 6351.35 m
-4353.35 6459.35 4264.55 6546.95 4155.35 6546.95 c
-3669.35 6546.95 l
-3560.15 6546.95 3471.35 6459.35 3471.35 6351.35 c
-3471.35 6220.55 l
-3471.35 6112.55 3560.15 6024.95 3669.35 6024.95 c
-4155.35 6024.95 l
-4264.55 6024.95 4353.35 6112.55 4353.35 6220.55 c
-h
-S
-0.201248 i
-3699.33 6393 m
-3585.22 6393 l
-3585.22 6388 l
-3599.11 6387.2 3603 6384.18 3603 6373.72 c
-3603 6276.32 l
-3603 6265.85 3600.17 6263.64 3585.22 6262.03 c
-3585.22 6257 l
-3657.67 6257 l
-3657.67 6262 l
-3639.15 6262.81 3636 6265.23 3636 6276.32 c
-3636 6323.21 l
-3656.22 6322.81 3663.55 6315.36 3666.32 6292.02 c
-3671.35 6292.02 l
-3671.35 6360.04 l
-3666.32 6360.04 l
-3662.76 6337.1 3655.82 6330.05 3636 6330.05 c
-3636 6376.74 l
-3636 6384.19 3638.52 6386 3648.41 6386 c
-3667.13 6386 3678.8 6382.64 3685.04 6375.74 c
-3689.47 6370.71 3691.68 6365.27 3694.5 6352.59 c
-3699.33 6352.59 l
-h
-3704.96 6257 m
-f*
-3749.19 6350 m
-3710.84 6350 l
-3710.84 6344.95 l
-3719.49 6343.74 3722 6341.12 3722 6333.07 c
-3722 6273.9 l
-3722 6265.65 3719.93 6263.44 3710.84 6261.83 c
-3710.84 6257 l
-3764.37 6257 l
-3764.37 6261.83 l
-3752.09 6262.63 3750 6265.25 3750 6277.73 c
-3750 6315.76 l
-3750 6326.23 3755.49 6334.88 3761.95 6334.88 c
-3763.56 6334.88 3765.37 6333.47 3767.59 6330.25 c
-3771.41 6324.82 3774.43 6323.01 3779.66 6323.01 c
-3787.11 6323.01 3792.34 6328.64 3792.34 6336.29 c
-3792.34 6345.55 3785.5 6352.41 3776.04 6352.41 c
-3766.1 6352.41 3758.54 6347.12 3749.19 6333.27 c
-h
-3794.35 6257 m
-f*
-3889.19 6269.88 m
-3887.18 6267.87 l
-3886.57 6267.26 3885.97 6267.06 3884.96 6267.06 c
-3882.15 6267.06 3881 6268.67 3881 6272.09 c
-3881 6324.62 l
-3881 6341.73 3865.6 6352.42 3840.89 6352.42 c
-3818.15 6352.42 3802.85 6342.06 3802.85 6326.83 c
-3802.85 6318.38 3807.69 6313.55 3815.94 6313.55 c
-3823.99 6313.55 3829.62 6318.38 3829.62 6325.22 c
-3829.62 6328.04 3828.61 6330.66 3826 6333.88 c
-3824.19 6335.89 3823.58 6337.1 3823.58 6338.3 c
-3823.58 6342.53 3829.02 6345.42 3836.26 6345.42 c
-3848.14 6345.42 3853.86 6340.08 3853.86 6328.04 c
-3853.86 6313.35 l
-3829.91 6306.1 3820.29 6302.48 3812.51 6297.45 c
-3803.46 6291.41 3799 6284.37 3799 6275.52 c
-3799 6263.24 3808.27 6254.18 3821.17 6254.18 c
-3832.84 6254.18 3842.1 6258.21 3853.17 6268.27 c
-3855.38 6258.01 3859.81 6254.18 3869.67 6254.18 c
-3878.32 6254.18 3884.56 6257.4 3892.21 6265.65 c
-h
-3853 6277.13 m
-3847.55 6270.89 3843.52 6268.47 3838.68 6268.47 c
-3832.64 6268.47 3828 6273.91 3828 6281.96 c
-3828 6293.63 3836.61 6301.88 3853 6306.31 c
-h
-3894.62 6257 m
-f*
-3936.4 6350 m
-3897.7 6350 l
-3897.7 6344.95 l
-3906.55 6343.74 3909 6341.32 3909 6333.07 c
-3909 6273.9 l
-3909 6265.65 3906.74 6263.44 3897.7 6261.83 c
-3897.7 6257 l
-3946 6257 l
-3946 6261.83 l
-3938.95 6262.84 3937 6265.65 3937 6273.3 c
-3937 6327.03 l
-3937 6328.04 3939.87 6331.66 3942.18 6333.88 c
-3946.4 6337.1 3950.02 6339.42 3953.65 6339.42 c
-3961.5 6339.42 3965 6334.59 3965 6322 c
-3965 6273.3 l
-3965 6265.05 3962.68 6262.43 3954.85 6261.83 c
-3954.85 6257 l
-4001.95 6257 l
-4001.95 6261.83 l
-3994.9 6262.64 3993 6265.65 3993 6273.3 c
-3993 6327.03 l
-3993 6328.04 3995.73 6331.46 3997.92 6333.68 c
-4002.35 6337.1 4005.97 6339.42 4009.59 6339.42 c
-4017.24 6339.42 4020 6334.38 4020 6322 c
-4020 6273.3 l
-4020 6264.85 4017.85 6262.43 4010.4 6261.83 c
-4010.4 6257 l
-4058.3 6257 l
-4058.3 6262 l
-4050.45 6262.4 4048 6264.78 4048 6273.3 c
-4048 6323.81 l
-4048 6341.12 4037.43 6352.42 4021.07 6352.42 c
-4009.59 6352.42 4001.95 6347.73 3991.48 6334.68 c
-3985.44 6347.36 3978.4 6352.42 3965.72 6352.42 c
-3952.95 6352.42 3943.98 6346.91 3936.4 6334.68 c
-h
-4061.64 6257 m
-f*
-4139.9 6282.16 m
-4131.65 6272.29 4125.61 6268.18 4116.96 6268.18 c
-4109.31 6268.18 4103.27 6271.77 4099.25 6278.94 c
-4095.43 6285.54 4093.82 6292.56 4093.01 6307 c
-4143.73 6307 l
-4142.52 6323.36 4139.5 6332.43 4133.26 6340.12 c
-4126.82 6347.96 4117.36 6352.42 4106.09 6352.42 c
-4080.94 6352.42 4064.03 6332.4 4064.03 6302.88 c
-4064.03 6273.5 4080.53 6254.18 4105.49 6254.18 c
-4121.79 6254.18 4131.65 6260.42 4144.73 6279.34 c
-h
-4092 6314 m
-4092.61 6337.96 4096.23 6345.42 4106.09 6345.42 c
-4111.93 6345.42 4115.55 6342.38 4117.16 6336.49 c
-4118.17 6332.67 4118.57 6327.03 4118.97 6316.77 c
-4118.97 6314 l
-h
-4148.35 6257 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4184 -6255]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3494.15 5588.15 m
-3494.15 5698.55 3402.95 5789.75 3291.35 5789.75 c
-2795.75 5789.75 l
-2684.15 5789.75 2592.95 5698.55 2592.95 5588.15 c
-2592.95 5450.15 l
-2592.95 5339.75 2684.15 5248.55 2795.75 5248.55 c
-3291.35 5248.55 l
-3402.95 5248.55 3494.15 5339.75 3494.15 5450.15 c
-f*
-1 g
-3414.95 5642.15 m
-3414.95 5745.35 3328.55 5829.35 3221.75 5829.35 c
-2746.55 5829.35 l
-2639.75 5829.35 2553.35 5745.35 2553.35 5642.15 c
-2553.35 5514.95 l
-2553.35 5411.75 2639.75 5327.75 2746.55 5327.75 c
-3221.75 5327.75 l
-3328.55 5327.75 3414.95 5411.75 3414.95 5514.95 c
-f*
-32 w
-0 g
-3414.95 5642.15 m
-3414.95 5745.35 3328.55 5829.35 3221.75 5829.35 c
-2746.55 5829.35 l
-2639.75 5829.35 2553.35 5745.35 2553.35 5642.15 c
-2553.35 5514.95 l
-2553.35 5411.75 2639.75 5327.75 2746.55 5327.75 c
-3221.75 5327.75 l
-3328.55 5327.75 3414.95 5411.75 3414.95 5514.95 c
-h
-S
-0.201248 i
-2782.33 5685 m
-2668.22 5685 l
-2668.22 5680 l
-2682.11 5679.2 2686 5676.18 2686 5665.72 c
-2686 5568.32 l
-2686 5557.85 2683.17 5555.64 2668.22 5554.03 c
-2668.22 5549 l
-2740.67 5549 l
-2740.67 5554 l
-2722.15 5554.81 2719 5557.23 2719 5568.32 c
-2719 5615.21 l
-2739.22 5614.81 2746.55 5607.36 2749.32 5584.02 c
-2754.35 5584.02 l
-2754.35 5652.04 l
-2749.32 5652.04 l
-2745.76 5629.1 2738.82 5622.05 2719 5622.05 c
-2719 5668.74 l
-2719 5676.19 2721.52 5678 2731.41 5678 c
-2750.13 5678 2761.8 5674.64 2768.04 5667.74 c
-2772.47 5662.71 2774.68 5657.27 2777.5 5644.59 c
-2782.33 5644.59 l
-h
-2787.96 5549 m
-f*
-2831.19 5642 m
-2792.84 5642 l
-2792.84 5636.95 l
-2801.49 5635.74 2804 5633.12 2804 5625.07 c
-2804 5565.9 l
-2804 5557.65 2801.93 5555.44 2792.84 5553.83 c
-2792.84 5549 l
-2846.37 5549 l
-2846.37 5553.83 l
-2834.09 5554.63 2832 5557.25 2832 5569.73 c
-2832 5607.76 l
-2832 5618.23 2837.49 5626.88 2843.95 5626.88 c
-2845.56 5626.88 2847.37 5625.47 2849.59 5622.25 c
-2853.41 5616.82 2856.43 5615.01 2861.66 5615.01 c
-2869.11 5615.01 2874.34 5620.64 2874.34 5628.29 c
-2874.34 5637.55 2867.5 5644.41 2858.04 5644.41 c
-2848.1 5644.41 2840.54 5639.12 2831.19 5625.27 c
-h
-2876.35 5549 m
-f*
-2971.19 5561.88 m
-2969.18 5559.87 l
-2968.57 5559.26 2967.97 5559.06 2966.96 5559.06 c
-2964.15 5559.06 2963 5560.67 2963 5564.09 c
-2963 5616.62 l
-2963 5633.73 2947.6 5644.42 2922.89 5644.42 c
-2900.15 5644.42 2884.85 5634.06 2884.85 5618.83 c
-2884.85 5610.38 2889.69 5605.55 2897.94 5605.55 c
-2905.99 5605.55 2911.62 5610.38 2911.62 5617.22 c
-2911.62 5620.04 2910.61 5622.66 2908 5625.88 c
-2906.19 5627.89 2905.58 5629.1 2905.58 5630.3 c
-2905.58 5634.53 2911.02 5637.42 2918.26 5637.42 c
-2930.14 5637.42 2935.86 5632.08 2935.86 5620.04 c
-2935.86 5605.35 l
-2911.91 5598.1 2902.29 5594.48 2894.51 5589.45 c
-2885.46 5583.41 2881 5576.37 2881 5567.52 c
-2881 5555.24 2890.27 5546.18 2903.17 5546.18 c
-2914.84 5546.18 2924.1 5550.21 2935.17 5560.27 c
-2937.38 5550.01 2941.81 5546.18 2951.67 5546.18 c
-2960.32 5546.18 2966.56 5549.4 2974.21 5557.65 c
-h
-2935 5569.13 m
-2929.55 5562.89 2925.52 5560.47 2920.68 5560.47 c
-2914.64 5560.47 2910 5565.91 2910 5573.96 c
-2910 5585.63 2918.61 5593.88 2935 5598.31 c
-h
-2976.62 5549 m
-f*
-3018.4 5642 m
-2979.7 5642 l
-2979.7 5636.95 l
-2988.55 5635.74 2991 5633.32 2991 5625.07 c
-2991 5565.9 l
-2991 5557.65 2988.74 5555.44 2979.7 5553.83 c
-2979.7 5549 l
-3028 5549 l
-3028 5553.83 l
-3020.95 5554.84 3019 5557.65 3019 5565.3 c
-3019 5619.03 l
-3019 5620.04 3021.87 5623.66 3024.18 5625.88 c
-3028.4 5629.1 3032.02 5631.42 3035.65 5631.42 c
-3043.5 5631.42 3047 5626.59 3047 5614 c
-3047 5565.3 l
-3047 5557.05 3044.68 5554.43 3036.85 5553.83 c
-3036.85 5549 l
-3083.95 5549 l
-3083.95 5553.83 l
-3076.9 5554.64 3075 5557.65 3075 5565.3 c
-3075 5619.03 l
-3075 5620.04 3077.73 5623.46 3079.92 5625.68 c
-3084.35 5629.1 3087.97 5631.42 3091.59 5631.42 c
-3099.24 5631.42 3102 5626.38 3102 5614 c
-3102 5565.3 l
-3102 5556.85 3099.85 5554.43 3092.4 5553.83 c
-3092.4 5549 l
-3140.3 5549 l
-3140.3 5554 l
-3132.45 5554.4 3130 5556.78 3130 5565.3 c
-3130 5615.81 l
-3130 5633.12 3119.43 5644.42 3103.07 5644.42 c
-3091.59 5644.42 3083.95 5639.73 3073.48 5626.68 c
-3067.44 5639.36 3060.4 5644.42 3047.72 5644.42 c
-3034.95 5644.42 3025.98 5638.91 3018.4 5626.68 c
-h
-3143.64 5549 m
-f*
-3223.9 5574.16 m
-3215.65 5564.29 3209.61 5560.18 3200.96 5560.18 c
-3193.31 5560.18 3187.27 5563.77 3183.25 5570.94 c
-3179.43 5577.54 3177.82 5584.56 3177.01 5599 c
-3227.73 5599 l
-3226.52 5615.36 3223.5 5624.43 3217.26 5632.12 c
-3210.82 5639.96 3201.36 5644.42 3190.09 5644.42 c
-3164.94 5644.42 3148.03 5624.4 3148.03 5594.88 c
-3148.03 5565.5 3164.53 5546.18 3189.49 5546.18 c
-3205.79 5546.18 3215.65 5552.42 3228.73 5571.34 c
-h
-3176 5606 m
-3176.61 5629.96 3180.23 5637.42 3190.09 5637.42 c
-3195.93 5637.42 3199.55 5634.38 3201.16 5628.49 c
-3202.17 5624.67 3202.57 5619.03 3202.97 5608.77 c
-3202.97 5606 l
-h
-3232.35 5549 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3266 -5549]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-16 w
-1456.55 6790.55 m
-1456.55 6798.95 1456.55 6798.95 1456.55 6790.55 c
-1456.55 6654.95 1490.15 6524.15 1552.55 6426.95 c
-S
-1481.75 6436.55 m
-1541.75 6453.35 l
-1574.15 6506.15 l
-1641.35 6324.95 l
-f*
-1949.75 5826.95 m
-2034.95 5715.35 2206.55 5634.95 2412.95 5608.55 c
-S
-2366.15 5556.95 m
-2392.55 5613.35 l
-2374.55 5672.15 l
-2554.55 5601.35 l
-f*
-8 w
-2531.75 7204.55 m
-2429.75 7304.15 2284.55 7361.75 2130.95 7361.75 c
-2026.55 7361.75 1924.55 7335.35 1836.95 7284.95 c
-S
-2466.95 7198.55 m
-2514.95 7214.15 l
-2538.95 7259.75 l
-2602.55 7113.35 l
-f*
-2886.95 6628.55 m
-2975.75 6454.55 3140.15 6329.75 3335.75 6290.15 c
-S
-3291.35 6250.55 m
-3316.55 6296.15 l
-3304.55 6346.55 l
-3448.55 6275.75 l
-f*
-0.564706 g
-3338.15 6804.95 m
-3203.75 6840.95 l
-3299.75 6897.35 l
-3146.15 6905.75 l
-3188.15 6976.55 l
-3040.55 6956.15 l
-3023.75 7026.95 l
-2903.75 6982.55 l
-2828.15 7046.15 l
-2752.55 6982.55 l
-2632.55 7026.95 l
-2614.55 6956.15 l
-2465.75 6976.55 l
-2510.15 6905.75 l
-2356.55 6897.35 l
-2452.55 6840.95 l
-2316.95 6804.95 l
-2452.55 6770.15 l
-2356.55 6713.75 l
-2510.15 6704.15 l
-2465.75 6634.55 l
-2614.55 6654.95 l
-2632.55 6582.95 l
-2752.55 6628.55 l
-2828.15 6564.95 l
-2903.75 6628.55 l
-3023.75 6582.95 l
-3040.55 6654.95 l
-3188.15 6634.55 l
-3146.15 6704.15 l
-3299.75 6713.75 l
-3203.75 6770.15 l
-f*
-1 g
-3278.15 6864.95 m
-3143.75 6900.95 l
-3239.75 6957.35 l
-3086.15 6965.75 l
-3128.15 7036.55 l
-2980.55 7016.15 l
-2963.75 7086.95 l
-2843.75 7042.55 l
-2768.15 7106.15 l
-2692.55 7042.55 l
-2572.55 7086.95 l
-2554.55 7016.15 l
-2405.75 7036.55 l
-2450.15 6965.75 l
-2296.55 6957.35 l
-2392.55 6900.95 l
-2256.95 6864.95 l
-2392.55 6830.15 l
-2296.55 6773.75 l
-2450.15 6764.15 l
-2405.75 6694.55 l
-2554.55 6714.95 l
-2572.55 6642.95 l
-2692.55 6688.55 l
-2768.15 6624.95 l
-2843.75 6688.55 l
-2963.75 6642.95 l
-2980.55 6714.95 l
-3128.15 6694.55 l
-3086.15 6764.15 l
-3239.75 6773.75 l
-3143.75 6830.15 l
-f*
-0 g
-3278.15 6864.95 m
-3143.75 6900.95 l
-3239.75 6957.35 l
-3086.15 6965.75 l
-3128.15 7036.55 l
-2980.55 7016.15 l
-2963.75 7086.95 l
-2843.75 7042.55 l
-2768.15 7106.15 l
-2692.55 7042.55 l
-2572.55 7086.95 l
-2554.55 7016.15 l
-2405.75 7036.55 l
-2450.15 6965.75 l
-2296.55 6957.35 l
-2392.55 6900.95 l
-2256.95 6864.95 l
-2392.55 6830.15 l
-2296.55 6773.75 l
-2450.15 6764.15 l
-2405.75 6694.55 l
-2554.55 6714.95 l
-2572.55 6642.95 l
-2692.55 6688.55 l
-2768.15 6624.95 l
-2843.75 6688.55 l
-2963.75 6642.95 l
-2980.55 6714.95 l
-3128.15 6694.55 l
-3086.15 6764.15 l
-3239.75 6773.75 l
-3143.75 6830.15 l
-3278.15 6864.95 l
-3239.75 6864.95 l
-3117.35 6833.75 l
-3206.15 6780.95 l
-3068.15 6773.75 l
-3108.95 6707.75 l
-2973.35 6725.75 l
-2956.55 6657.35 l
-2841.35 6699.35 l
-2768.15 6636.95 l
-2694.95 6699.35 l
-2579.75 6657.35 l
-2561.75 6725.75 l
-2426.15 6707.75 l
-2466.95 6773.75 l
-2330.15 6780.95 l
-2418.95 6833.75 l
-2296.55 6864.95 l
-2417.75 6897.35 l
-2330.15 6950.15 l
-2466.95 6957.35 l
-2426.15 7023.35 l
-2561.75 7004.15 l
-2579.75 7073.75 l
-2694.95 7030.55 l
-2768.15 7092.95 l
-2841.35 7030.55 l
-2956.55 7073.75 l
-2973.35 7004.15 l
-3108.95 7023.35 l
-3068.15 6957.35 l
-3206.15 6950.15 l
-3117.35 6897.35 l
-3239.75 6864.95 l
-3278.15 6864.95 l
-f*
-0.2 i
-2590.08 6916.76 m
-2570.08 6842.52 l
-2567.52 6833.88 2564.48 6831.64 2554.08 6831 c
-2554.08 6827 l
-2604 6827 l
-2604 6831 l
-2594.72 6831.48 2592.48 6832.76 2592.48 6837.88 c
-2592.48 6839.64 2592.8 6841.4 2593.76 6845.08 c
-2593.92 6845.88 l
-2594.08 6846.68 l
-2613.76 6918.52 l
-2616.16 6926.84 2618.56 6929.08 2626.72 6930.04 c
-2626.72 6934 l
-2592.8 6934 l
-2543.2 6857.24 l
-2534.56 6934 l
-2499.2 6934 l
-2499.2 6930 l
-2509.28 6929.52 2510.72 6928.89 2510.72 6924.44 c
-2510.72 6922.2 2510.08 6919.32 2508.96 6915.16 c
-2491.52 6855.48 l
-2485.12 6834.68 2484 6832.92 2475.36 6831 c
-2475.36 6827 l
-2508.48 6827 l
-2508.48 6831 l
-2498.24 6832.28 2495.68 6834.2 2495.68 6840.76 c
-2495.68 6843.48 2496.48 6847.48 2498.72 6855.48 c
-2514.88 6914.52 l
-2525.6 6825.08 l
-2530.08 6825.08 l
-h
-2622.24 6827 m
-f*
-2691.44 6847.32 m
-2684.88 6838.52 2682.48 6835.76 2679.92 6835.76 c
-2678.64 6835.76 2678 6836.86 2678 6838.52 c
-2678 6842.52 2679.44 6849.08 2683.44 6862.2 c
-2694.8 6899.96 l
-2677.04 6898.84 l
-2674.16 6889.4 l
-2672.72 6897.56 2669.2 6901.08 2662.32 6901.08 c
-2642.64 6901.08 2619 6870.27 2619 6845.24 c
-2619 6833.08 2625.74 6824.92 2635.92 6824.92 c
-2645.68 6824.92 2653.04 6830.68 2662.16 6846.04 c
-2660.24 6839.48 2660 6837.56 2660 6835.32 c
-2660 6829.4 2664.76 6824.76 2670.64 6824.76 c
-2678.16 6824.76 2685.52 6831 2694.8 6844.92 c
-h
-2664.56 6894.2 m
-2668.08 6893.88 2670.56 6891 2670.56 6886.68 c
-2670.56 6877.08 2665.24 6859.32 2658.96 6848.28 c
-2654.64 6840.44 2649.84 6835.92 2645.52 6835.92 c
-2641.36 6835.92 2638 6839.75 2638 6844.92 c
-2638 6853.24 2643.42 6869.24 2650.16 6881.08 c
-2654.96 6889.56 2660.24 6894.52 2664.56 6894.2 c
-h
-2702 6827 m
-f*
-2736.56 6900.92 m
-2720.24 6898.36 2714 6897.4 2705.68 6896.44 c
-2705.68 6892 l
-2712.88 6891.69 2714.32 6891.07 2714.32 6888.12 c
-2714.32 6886.52 2713.04 6880.76 2710.8 6872.44 c
-2694.8 6810.36 l
-2691.76 6799.8 2690.48 6798.84 2682.8 6799 c
-2682.8 6794 l
-2722.64 6794 l
-2722.64 6799 l
-2714.64 6799.14 2712.24 6800.16 2712.24 6803.64 c
-2712.24 6805.88 2713.36 6810.68 2716.4 6821.88 c
-2717.52 6825.72 2717.52 6826.04 2718.16 6828.44 c
-2723.76 6825.56 2725.68 6824.92 2729.04 6824.92 c
-2750.8 6824.92 2773.36 6853.88 2773.36 6881.56 c
-2773.36 6893.4 2766.64 6901.08 2756.08 6901.08 c
-2746.96 6901.08 2739.92 6895.92 2730.48 6882.52 c
-h
-2747.12 6889.56 m
-2751.28 6889.24 2753.68 6885.56 2753.36 6880.44 c
-2752.72 6869.88 2747.6 6854.04 2741.84 6843.64 c
-2736.88 6835 2731.76 6829.92 2726.32 6829.92 c
-2722.8 6829.92 2720.08 6832.75 2720.08 6836.28 c
-2720.08 6839 2721.84 6845.56 2726.16 6860.12 c
-2729.68 6871.8 2731.12 6875.8 2733.52 6879.48 c
-2737.52 6885.72 2742.96 6889.88 2747.12 6889.56 c
-h
-2782 6827 m
-f*
-2817.56 6900.92 m
-2801.24 6898.36 2795 6897.4 2786.68 6896.44 c
-2786.68 6892 l
-2793.88 6891.69 2795.32 6891.07 2795.32 6888.12 c
-2795.32 6886.52 2794.04 6880.76 2791.8 6872.44 c
-2775.8 6810.36 l
-2772.76 6799.8 2771.48 6798.84 2763.8 6799 c
-2763.8 6794 l
-2803.64 6794 l
-2803.64 6799 l
-2795.64 6799.14 2793.24 6800.16 2793.24 6803.64 c
-2793.24 6805.88 2794.36 6810.68 2797.4 6821.88 c
-2798.52 6825.72 2798.52 6826.04 2799.16 6828.44 c
-2804.76 6825.56 2806.68 6824.92 2810.04 6824.92 c
-2831.8 6824.92 2854.36 6853.88 2854.36 6881.56 c
-2854.36 6893.4 2847.64 6901.08 2837.08 6901.08 c
-2827.96 6901.08 2820.92 6895.92 2811.48 6882.52 c
-h
-2828.12 6889.56 m
-2832.28 6889.24 2834.68 6885.56 2834.36 6880.44 c
-2833.72 6869.88 2828.6 6854.04 2822.84 6843.64 c
-2817.88 6835 2812.76 6829.92 2807.32 6829.92 c
-2803.8 6829.92 2801.08 6832.75 2801.08 6836.28 c
-2801.08 6839 2802.84 6845.56 2807.16 6860.12 c
-2810.68 6871.8 2812.12 6875.8 2814.52 6879.48 c
-2818.52 6885.72 2823.96 6889.88 2828.12 6889.56 c
-h
-2863 6827 m
-f*
-2896.56 6849.56 m
-2894.32 6846.36 l
-2890.16 6840.12 2886.48 6836.56 2884.08 6836.56 c
-2882.8 6836.56 2882 6837.77 2882 6839.16 c
-2882 6840.6 2882.62 6844.76 2883.12 6847.48 c
-2897.68 6900.92 l
-2889.22 6899 2878.26 6897.4 2866.04 6896.44 c
-2866.04 6892 l
-2867.44 6892 l
-2872.24 6892 2875.48 6890.44 2875.48 6887.48 c
-2875.48 6886.2 2874.71 6883.8 2873.68 6881.08 c
-2864.4 6846.68 l
-2863.12 6842.04 2863 6837.88 2863 6835.64 c
-2863 6829.56 2867.2 6825.56 2873.36 6825.56 c
-2882.96 6825.56 2888.88 6830.36 2900.08 6847.32 c
-h
-2892.88 6936.4 m
-2887.44 6936.4 2883 6931.46 2883 6926.04 c
-2883 6919.8 2887.26 6915.4 2893.04 6915.4 c
-2899.12 6915.4 2904 6919.86 2904 6925.56 c
-2904 6931.48 2899 6936.4 2892.88 6936.4 c
-h
-2906.48 6827 m
-f*
-2981.36 6848.6 m
-2974.96 6838.68 2972.88 6836.56 2970.16 6836.56 c
-2968.88 6836.56 2968 6837.63 2968 6839.16 c
-2968 6840.76 2968.94 6844.12 2971.92 6853.08 c
-2977.68 6870.52 l
-2980.24 6878.04 2982 6885.08 2982 6888.92 c
-2982 6896.76 2977.78 6901.08 2970.16 6901.08 c
-2964.24 6901.08 2958.48 6898.62 2954.16 6894.36 c
-2948.24 6888.76 2945.2 6884.92 2934.48 6869.08 c
-2944.72 6900.76 l
-2934.48 6898.52 2921.68 6896.92 2912.72 6896.6 c
-2912.72 6891.8 l
-2919.44 6891.65 2921.36 6890.92 2921.36 6888.12 c
-2921.36 6886.2 2919.12 6877.72 2914 6859.64 c
-2910.32 6846.68 2909.2 6842.52 2905.04 6827 c
-2924.4 6827 l
-2931.92 6854.68 2937.68 6868.6 2947.6 6881.56 c
-2950.8 6885.88 2955.76 6889.08 2958.64 6889.08 c
-2960.72 6889.08 2963 6887.63 2963 6886.04 c
-2963 6885.56 2962.54 6884.28 2961.84 6882.68 c
-2953.04 6856.12 l
-2950.48 6848.44 2949 6839.32 2949 6835.16 c
-2949 6829.08 2952.84 6825.56 2959.44 6825.56 c
-2969.04 6825.56 2975.6 6831 2984.88 6846.52 c
-h
-2994.96 6827 m
-f*
-3072.48 6896 m
-3054.72 6896 l
-3049.28 6899.58 3044.48 6901.08 3037.12 6901.08 c
-3017.44 6901.08 3001 6888.05 3001 6871.8 c
-3001 6863.64 3005.35 6857.88 3014.4 6854.2 c
-3001.28 6846.84 2999 6844.6 2999 6838.68 c
-2999 6833.56 3001.89 6830.52 3008.96 6828.12 c
-2999.04 6825.72 2995.84 6824.44 2992 6821.4 c
-2989.44 6819.16 2988 6815.32 2988 6811.48 c
-2988 6801.08 2999.56 6795 3017.76 6795 c
-3040.32 6795 3056 6804.72 3056 6818.52 c
-3056 6828.28 3049.6 6833.56 3032.16 6838.52 c
-3023.68 6840.92 l
-3018.56 6842.36 3015 6844.6 3015 6847 c
-3015 6849.56 3017.68 6852.28 3020 6852.28 c
-3020.8 6852.28 3021.92 6852.24 3023.2 6852.12 c
-3024.96 6851.64 3026.24 6851 3028.16 6851 c
-3035.2 6851 3042.4 6853.09 3048.48 6856.92 c
-3057.76 6862.2 3063 6870.36 3063 6879.96 c
-3063 6882.64 3062.59 6884.32 3061.76 6887 c
-3072.48 6887 l
-h
-3014.4 6826.04 m
-3016.32 6825.88 3028.48 6821.72 3032 6820.12 c
-3036.48 6817.88 3039 6815.16 3039 6811 c
-3039 6803.96 3031.8 6800 3019.36 6800 c
-3008.96 6800 3002 6805.1 3002 6812.44 c
-3002 6815.48 3003.32 6818.2 3006.24 6821.24 c
-3008.32 6823.32 3013.12 6826.2 3014.4 6826.04 c
-h
-3036.8 6896.08 m
-3040.96 6896.08 3044 6892.19 3044 6886.52 c
-3044 6881.08 3042.08 6873.4 3039.36 6867.48 c
-3036 6860.12 3031.84 6856 3026.88 6856 c
-3022.56 6856 3020 6859.52 3020 6865.88 c
-3020 6872.28 3022.79 6882.04 3026.24 6888.12 c
-3029.28 6893.4 3032.64 6896.08 3036.8 6896.08 c
-h
-3076 6827 m
-f*
-1 i
-0.564706 g
-2408.15 6009.35 m
-2273.75 6046.55 l
-2369.75 6101.75 l
-2216.15 6111.35 l
-2258.15 6180.95 l
-2110.55 6160.55 l
-2093.75 6232.55 l
-1973.75 6186.95 l
-1898.15 6250.55 l
-1822.55 6186.95 l
-1702.55 6232.55 l
-1684.55 6160.55 l
-1535.75 6180.95 l
-1580.15 6111.35 l
-1426.55 6101.75 l
-1522.55 6046.55 l
-1386.95 6009.35 l
-1522.55 5974.55 l
-1426.55 5918.15 l
-1580.15 5909.75 l
-1535.75 5840.15 l
-1684.55 5859.35 l
-1702.55 5788.55 l
-1822.55 5832.95 l
-1898.15 5769.35 l
-1973.75 5832.95 l
-2093.75 5788.55 l
-2110.55 5859.35 l
-2258.15 5840.15 l
-2216.15 5909.75 l
-2369.75 5918.15 l
-2273.75 5974.55 l
-f*
-1 g
-2348.15 6069.35 m
-2213.75 6106.55 l
-2309.75 6161.75 l
-2156.15 6171.35 l
-2198.15 6240.95 l
-2050.55 6220.55 l
-2033.75 6292.55 l
-1913.75 6246.95 l
-1838.15 6310.55 l
-1762.55 6246.95 l
-1642.55 6292.55 l
-1624.55 6220.55 l
-1475.75 6240.95 l
-1520.15 6171.35 l
-1366.55 6161.75 l
-1462.55 6106.55 l
-1326.95 6069.35 l
-1462.55 6034.55 l
-1366.55 5978.15 l
-1520.15 5969.75 l
-1475.75 5900.15 l
-1624.55 5919.35 l
-1642.55 5848.55 l
-1762.55 5892.95 l
-1838.15 5829.35 l
-1913.75 5892.95 l
-2033.75 5848.55 l
-2050.55 5919.35 l
-2198.15 5900.15 l
-2156.15 5969.75 l
-2309.75 5978.15 l
-2213.75 6034.55 l
-f*
-0 g
-2348.15 6069.35 m
-2213.75 6106.55 l
-2309.75 6161.75 l
-2156.15 6171.35 l
-2198.15 6240.95 l
-2050.55 6220.55 l
-2033.75 6292.55 l
-1913.75 6246.95 l
-1838.15 6310.55 l
-1762.55 6246.95 l
-1642.55 6292.55 l
-1624.55 6220.55 l
-1475.75 6240.95 l
-1520.15 6171.35 l
-1366.55 6161.75 l
-1462.55 6106.55 l
-1326.95 6069.35 l
-1462.55 6034.55 l
-1366.55 5978.15 l
-1520.15 5969.75 l
-1475.75 5900.15 l
-1624.55 5919.35 l
-1642.55 5848.55 l
-1762.55 5892.95 l
-1838.15 5829.35 l
-1913.75 5892.95 l
-2033.75 5848.55 l
-2050.55 5919.35 l
-2198.15 5900.15 l
-2156.15 5969.75 l
-2309.75 5978.15 l
-2213.75 6034.55 l
-2348.15 6069.35 l
-2271.35 6069.35 l
-2162.15 6041.75 l
-2242.55 5994.95 l
-2122.55 5987.75 l
-2159.75 5924.15 l
-2036.15 5942.15 l
-2019.35 5874.95 l
-1910.15 5915.75 l
-1838.15 5855.75 l
-1766.15 5915.75 l
-1655.75 5874.95 l
-1640.15 5942.15 l
-1516.55 5924.15 l
-1554.95 5987.75 l
-1433.75 5994.95 l
-1514.15 6041.75 l
-1404.95 6069.35 l
-1514.15 6098.15 l
-1433.75 6146.15 l
-1554.95 6153.35 l
-1516.55 6215.75 l
-1640.15 6198.95 l
-1655.75 6266.15 l
-1766.15 6224.15 l
-1838.15 6284.15 l
-1910.15 6224.15 l
-2019.35 6266.15 l
-2036.15 6198.95 l
-2159.75 6215.75 l
-2122.55 6153.35 l
-2242.55 6146.15 l
-2162.15 6098.15 l
-2271.35 6069.35 l
-2348.15 6069.35 l
-f*
-0.2 i
-1660.08 6120.76 m
-1640.08 6046.52 l
-1637.52 6037.88 1634.48 6035.64 1624.08 6035 c
-1624.08 6031 l
-1674 6031 l
-1674 6035 l
-1664.72 6035.48 1662.48 6036.76 1662.48 6041.88 c
-1662.48 6043.64 1662.8 6045.4 1663.76 6049.08 c
-1663.92 6049.88 l
-1664.08 6050.68 l
-1683.76 6122.52 l
-1686.16 6130.84 1688.56 6133.08 1696.72 6134.04 c
-1696.72 6138 l
-1662.8 6138 l
-1613.2 6061.24 l
-1604.56 6138 l
-1569.2 6138 l
-1569.2 6134 l
-1579.28 6133.52 1580.72 6132.89 1580.72 6128.44 c
-1580.72 6126.2 1580.08 6123.32 1578.96 6119.16 c
-1561.52 6059.48 l
-1555.12 6038.68 1554 6036.92 1545.36 6035 c
-1545.36 6031 l
-1578.48 6031 l
-1578.48 6035 l
-1568.24 6036.28 1565.68 6038.2 1565.68 6044.76 c
-1565.68 6047.48 1566.48 6051.48 1568.72 6059.48 c
-1584.88 6118.52 l
-1595.6 6029.08 l
-1600.08 6029.08 l
-h
-1692.24 6031 m
-f*
-1761.44 6051.32 m
-1754.88 6042.52 1752.48 6039.76 1749.92 6039.76 c
-1748.64 6039.76 1748 6040.86 1748 6042.52 c
-1748 6046.52 1749.44 6053.08 1753.44 6066.2 c
-1764.8 6103.96 l
-1747.04 6102.84 l
-1744.16 6093.4 l
-1742.72 6101.56 1739.2 6105.08 1732.32 6105.08 c
-1712.64 6105.08 1689 6074.27 1689 6049.24 c
-1689 6037.08 1695.74 6028.92 1705.92 6028.92 c
-1715.68 6028.92 1723.04 6034.68 1732.16 6050.04 c
-1730.24 6043.48 1730 6041.56 1730 6039.32 c
-1730 6033.4 1734.76 6028.76 1740.64 6028.76 c
-1748.16 6028.76 1755.52 6035 1764.8 6048.92 c
-h
-1734.56 6098.2 m
-1738.08 6097.88 1740.56 6095 1740.56 6090.68 c
-1740.56 6081.08 1735.24 6063.32 1728.96 6052.28 c
-1724.64 6044.44 1719.84 6039.92 1715.52 6039.92 c
-1711.36 6039.92 1708 6043.75 1708 6048.92 c
-1708 6057.24 1713.42 6073.24 1720.16 6085.08 c
-1724.96 6093.56 1730.24 6098.52 1734.56 6098.2 c
-h
-1772 6031 m
-f*
-1806.56 6104.92 m
-1790.24 6102.36 1784 6101.4 1775.68 6100.44 c
-1775.68 6096 l
-1782.88 6095.69 1784.32 6095.07 1784.32 6092.12 c
-1784.32 6090.52 1783.04 6084.76 1780.8 6076.44 c
-1764.8 6014.36 l
-1761.76 6003.8 1760.48 6002.84 1752.8 6003 c
-1752.8 5998 l
-1792.64 5998 l
-1792.64 6003 l
-1784.64 6003.14 1782.24 6004.16 1782.24 6007.64 c
-1782.24 6009.88 1783.36 6014.68 1786.4 6025.88 c
-1787.52 6029.72 1787.52 6030.04 1788.16 6032.44 c
-1793.76 6029.56 1795.68 6028.92 1799.04 6028.92 c
-1820.8 6028.92 1843.36 6057.88 1843.36 6085.56 c
-1843.36 6097.4 1836.64 6105.08 1826.08 6105.08 c
-1816.96 6105.08 1809.92 6099.92 1800.48 6086.52 c
-h
-1817.12 6093.56 m
-1821.28 6093.24 1823.68 6089.56 1823.36 6084.44 c
-1822.72 6073.88 1817.6 6058.04 1811.84 6047.64 c
-1806.88 6039 1801.76 6033.92 1796.32 6033.92 c
-1792.8 6033.92 1790.08 6036.75 1790.08 6040.28 c
-1790.08 6043 1791.84 6049.56 1796.16 6064.12 c
-1799.68 6075.8 1801.12 6079.8 1803.52 6083.48 c
-1807.52 6089.72 1812.96 6093.88 1817.12 6093.56 c
-h
-1852 6031 m
-f*
-1887.56 6104.92 m
-1871.24 6102.36 1865 6101.4 1856.68 6100.44 c
-1856.68 6096 l
-1863.88 6095.69 1865.32 6095.07 1865.32 6092.12 c
-1865.32 6090.52 1864.04 6084.76 1861.8 6076.44 c
-1845.8 6014.36 l
-1842.76 6003.8 1841.48 6002.84 1833.8 6003 c
-1833.8 5998 l
-1873.64 5998 l
-1873.64 6003 l
-1865.64 6003.14 1863.24 6004.16 1863.24 6007.64 c
-1863.24 6009.88 1864.36 6014.68 1867.4 6025.88 c
-1868.52 6029.72 1868.52 6030.04 1869.16 6032.44 c
-1874.76 6029.56 1876.68 6028.92 1880.04 6028.92 c
-1901.8 6028.92 1924.36 6057.88 1924.36 6085.56 c
-1924.36 6097.4 1917.64 6105.08 1907.08 6105.08 c
-1897.96 6105.08 1890.92 6099.92 1881.48 6086.52 c
-h
-1898.12 6093.56 m
-1902.28 6093.24 1904.68 6089.56 1904.36 6084.44 c
-1903.72 6073.88 1898.6 6058.04 1892.84 6047.64 c
-1887.88 6039 1882.76 6033.92 1877.32 6033.92 c
-1873.8 6033.92 1871.08 6036.75 1871.08 6040.28 c
-1871.08 6043 1872.84 6049.56 1877.16 6064.12 c
-1880.68 6075.8 1882.12 6079.8 1884.52 6083.48 c
-1888.52 6089.72 1893.96 6093.88 1898.12 6093.56 c
-h
-1933 6031 m
-f*
-1966.56 6053.56 m
-1964.32 6050.36 l
-1960.16 6044.12 1956.48 6040.56 1954.08 6040.56 c
-1952.8 6040.56 1952 6041.77 1952 6043.16 c
-1952 6044.6 1952.62 6048.76 1953.12 6051.48 c
-1967.68 6104.92 l
-1959.22 6103 1948.26 6101.4 1936.04 6100.44 c
-1936.04 6096 l
-1937.44 6096 l
-1942.24 6096 1945.48 6094.44 1945.48 6091.48 c
-1945.48 6090.2 1944.71 6087.8 1943.68 6085.08 c
-1934.4 6050.68 l
-1933.12 6046.04 1933 6041.88 1933 6039.64 c
-1933 6033.56 1937.2 6029.56 1943.36 6029.56 c
-1952.96 6029.56 1958.88 6034.36 1970.08 6051.32 c
-h
-1962.88 6140.4 m
-1957.44 6140.4 1953 6135.46 1953 6130.04 c
-1953 6123.8 1957.26 6119.4 1963.04 6119.4 c
-1969.12 6119.4 1974 6123.86 1974 6129.56 c
-1974 6135.48 1969 6140.4 1962.88 6140.4 c
-h
-1976.48 6031 m
-f*
-2051.36 6052.6 m
-2044.96 6042.68 2042.88 6040.56 2040.16 6040.56 c
-2038.88 6040.56 2038 6041.63 2038 6043.16 c
-2038 6044.76 2038.94 6048.12 2041.92 6057.08 c
-2047.68 6074.52 l
-2050.24 6082.04 2052 6089.08 2052 6092.92 c
-2052 6100.76 2047.78 6105.08 2040.16 6105.08 c
-2034.24 6105.08 2028.48 6102.62 2024.16 6098.36 c
-2018.24 6092.76 2015.2 6088.92 2004.48 6073.08 c
-2014.72 6104.76 l
-2004.48 6102.52 1991.68 6100.92 1982.72 6100.6 c
-1982.72 6095.8 l
-1989.44 6095.65 1991.36 6094.92 1991.36 6092.12 c
-1991.36 6090.2 1989.12 6081.72 1984 6063.64 c
-1980.32 6050.68 1979.2 6046.52 1975.04 6031 c
-1994.4 6031 l
-2001.92 6058.68 2007.68 6072.6 2017.6 6085.56 c
-2020.8 6089.88 2025.76 6093.08 2028.64 6093.08 c
-2030.72 6093.08 2033 6091.63 2033 6090.04 c
-2033 6089.56 2032.54 6088.28 2031.84 6086.68 c
-2023.04 6060.12 l
-2020.48 6052.44 2019 6043.32 2019 6039.16 c
-2019 6033.08 2022.84 6029.56 2029.44 6029.56 c
-2039.04 6029.56 2045.6 6035 2054.88 6050.52 c
-h
-2064.96 6031 m
-f*
-2142.48 6100 m
-2124.72 6100 l
-2119.28 6103.58 2114.48 6105.08 2107.12 6105.08 c
-2087.44 6105.08 2071 6092.05 2071 6075.8 c
-2071 6067.64 2075.35 6061.88 2084.4 6058.2 c
-2071.28 6050.84 2069 6048.6 2069 6042.68 c
-2069 6037.56 2071.89 6034.52 2078.96 6032.12 c
-2069.04 6029.72 2065.84 6028.44 2062 6025.4 c
-2059.44 6023.16 2058 6019.32 2058 6015.48 c
-2058 6005.08 2069.56 5999 2087.76 5999 c
-2110.32 5999 2126 6008.72 2126 6022.52 c
-2126 6032.28 2119.6 6037.56 2102.16 6042.52 c
-2093.68 6044.92 l
-2088.56 6046.36 2085 6048.6 2085 6051 c
-2085 6053.56 2087.68 6056.28 2090 6056.28 c
-2090.8 6056.28 2091.92 6056.24 2093.2 6056.12 c
-2094.96 6055.64 2096.24 6055 2098.16 6055 c
-2105.2 6055 2112.4 6057.09 2118.48 6060.92 c
-2127.76 6066.2 2133 6074.36 2133 6083.96 c
-2133 6086.64 2132.59 6088.32 2131.76 6091 c
-2142.48 6091 l
-h
-2084.4 6030.04 m
-2086.32 6029.88 2098.48 6025.72 2102 6024.12 c
-2106.48 6021.88 2109 6019.16 2109 6015 c
-2109 6007.96 2101.8 6004 2089.36 6004 c
-2078.96 6004 2072 6009.1 2072 6016.44 c
-2072 6019.48 2073.32 6022.2 2076.24 6025.24 c
-2078.32 6027.32 2083.12 6030.2 2084.4 6030.04 c
-h
-2106.8 6100.08 m
-2110.96 6100.08 2114 6096.19 2114 6090.52 c
-2114 6085.08 2112.08 6077.4 2109.36 6071.48 c
-2106 6064.12 2101.84 6060 2096.88 6060 c
-2092.56 6060 2090 6063.52 2090 6069.88 c
-2090 6076.28 2092.79 6086.04 2096.24 6092.12 c
-2099.28 6097.4 2102.64 6100.08 2106.8 6100.08 c
-h
-2146 6031 m
-f*
-1 i
-1 g
-3922.55 6609.35 m
-4088.15 6760.55 l
-4006.55 6760.55 l
-4006.55 6914.15 l
-3839.75 6914.15 l
-3839.75 6760.55 l
-3758.15 6760.55 l
-f*
-0 g
-3922.55 6609.35 m
-4088.15 6760.55 l
-4006.55 6760.55 l
-4006.55 6914.15 l
-3839.75 6914.15 l
-3839.75 6760.55 l
-3758.15 6760.55 l
-3922.55 6609.35 l
-3922.55 6623.75 l
-3783.35 6750.95 l
-3849.35 6750.95 l
-3849.35 6904.55 l
-3995.75 6904.55 l
-3995.75 6750.95 l
-4061.75 6750.95 l
-3922.55 6623.75 l
-3922.55 6609.35 l
-f*
-0.2 i
-3475.88 7147 m
-3475.88 7142 l
-3488.3 7141.29 3492 7138.45 3492 7129.4 c
-3492 7042.28 l
-3492 7033.1 3489.25 7030.94 3475.88 7029.5 c
-3475.88 7025 l
-3533.84 7025 l
-3564.26 7025 3584 7038.5 3584 7058.84 c
-3584 7067.12 3580.73 7074.32 3574.7 7079.9 c
-3568.4 7085.48 3562.28 7088 3549.68 7090.7 c
-3570.56 7096.82 3578 7104.2 3578 7117.88 c
-3578 7136.42 3561.55 7147 3531.5 7147 c
-h
-3521 7086.74 m
-3525.92 7086.74 l
-3544.46 7086.74 3553 7077.2 3553 7057.22 c
-3553 7039.76 3545.77 7031 3531.5 7031 c
-3523.58 7031 3521 7033.99 3521 7041.74 c
-h
-3521 7132.46 m
-3521 7138.94 3523.39 7142 3530.24 7142 c
-3542.84 7142 3549 7134.03 3549 7116.62 c
-3549 7097.72 3543.08 7092.68 3521 7092.14 c
-h
-3593.06 7025 m
-f*
-3678.14 7036.52 m
-3676.34 7034.72 l
-3675.8 7034.18 3675.26 7034 3674.36 7034 c
-3671.84 7034 3671 7035.44 3671 7038.5 c
-3671 7085.48 l
-3671 7100.78 3657.16 7110.16 3634.94 7110.16 c
-3614.6 7110.16 3600.92 7100.97 3600.92 7087.46 c
-3600.92 7079.9 3605.24 7075.58 3612.62 7075.58 c
-3619.82 7075.58 3624.86 7079.9 3624.86 7086.02 c
-3624.86 7088.54 3623.96 7090.88 3621.62 7093.76 c
-3620 7095.56 3619.46 7096.64 3619.46 7097.72 c
-3619.46 7101.5 3624.32 7104.16 3630.8 7104.16 c
-3641.42 7104.16 3646 7099.37 3646 7088.54 c
-3646 7075.4 l
-3624.89 7068.92 3616.41 7065.68 3609.56 7061.18 c
-3601.46 7055.78 3598 7049.48 3598 7041.56 c
-3598 7030.58 3606.07 7022.48 3617.3 7022.48 c
-3627.74 7022.48 3636.02 7026.08 3645.92 7035.08 c
-3647.9 7025.9 3651.86 7022.48 3660.68 7022.48 c
-3668.42 7022.48 3674 7025.36 3680.84 7032.74 c
-h
-3646 7043 m
-3641.04 7037.42 3637.37 7035.26 3632.96 7035.26 c
-3627.56 7035.26 3624 7040.12 3624 7047.32 c
-3624 7057.76 3631.57 7065.14 3646 7069.1 c
-h
-3683 7025 m
-f*
-3744.22 7083.68 m
-3744.22 7109.8 l
-3740.24 7109.8 l
-3739.16 7107.08 3738.08 7106.2 3735.74 7106.2 c
-3734.66 7106.2 3733.04 7106.55 3730.16 7107.44 c
-3724.4 7109.42 3720.26 7110.16 3716.12 7110.16 c
-3699.74 7110.16 3688 7098.99 3688 7083.86 c
-3688 7071.98 3695.34 7063.7 3713.42 7055.96 c
-3725.84 7050.56 3731 7046.06 3731 7040.3 c
-3731 7033.28 3725.48 7028.48 3717.2 7028.48 c
-3704.6 7028.48 3696.32 7036.62 3692.54 7052.36 c
-3687.5 7052.36 l
-3687.5 7022.66 l
-3692 7022.66 l
-3693.98 7026.44 3695.06 7027.7 3696.68 7027.7 c
-3697.58 7027.7 3699.02 7027.34 3700.82 7026.62 c
-3706.04 7024.46 3715.22 7022.48 3720.26 7022.48 c
-3736.64 7022.48 3748 7033.64 3748 7049.84 c
-3748 7062.62 3741.15 7070.54 3723.14 7077.92 c
-3710.9 7083.14 3706 7087.64 3706 7093.76 c
-3706 7099.7 3710.98 7104.16 3717.74 7104.16 c
-3722.6 7104.16 3727.28 7102.19 3731.24 7098.44 c
-3735.02 7094.84 3737 7091.42 3739.7 7083.68 c
-h
-3753.02 7025 m
-f*
-3824.36 7047.5 m
-3816.98 7038.68 3811.58 7035.48 3803.84 7035.48 c
-3797 7035.48 3791.6 7038.53 3788 7044.62 c
-3784.58 7050.36 3783.14 7056.45 3782.42 7069 c
-3827.78 7069 l
-3826.7 7083.99 3824 7092.3 3818.42 7099.34 c
-3812.66 7106.36 3804.2 7110.16 3794.12 7110.16 c
-3771.62 7110.16 3756.5 7092.33 3756.5 7066.04 c
-3756.5 7039.76 3771.26 7022.48 3793.58 7022.48 c
-3808.16 7022.48 3816.98 7028.06 3828.68 7044.98 c
-h
-3781.52 7076 m
-3782.06 7097.42 3785.3 7104.16 3794.12 7104.16 c
-3799.34 7104.16 3802.58 7101.42 3804.02 7096.1 c
-3804.92 7092.68 3805.28 7087.64 3805.64 7078.46 c
-3805.64 7076 l
-h
-3831.92 7025 m
-f*
-3878 7025 m
-f*
-3981.94 7147 m
-3879.88 7147 l
-3879.88 7142 l
-3892.3 7141.29 3896 7138.63 3896 7129.4 c
-3896 7042.28 l
-3896 7032.92 3893.44 7030.94 3879.88 7029.5 c
-3879.88 7025 l
-3944.68 7025 l
-3944.68 7030 l
-3928.12 7030.69 3925 7032.77 3925 7042.28 c
-3925 7084.22 l
-3943.28 7083.86 3949.91 7077.2 3952.42 7056.32 c
-3956.92 7056.32 l
-3956.92 7117.16 l
-3952.42 7117.16 l
-3949.19 7096.64 3942.92 7090.34 3925 7090.34 c
-3925 7132.1 l
-3925 7138.76 3927.32 7141 3936.4 7141 c
-3953.14 7141 3963.58 7137.8 3969.16 7131.2 c
-3973.12 7126.7 3975.1 7121.84 3977.62 7110.5 c
-3981.94 7110.5 l
-h
-3986.98 7025 m
-f*
-4026.28 7108 m
-3992.22 7108 l
-3992.22 7103.66 l
-3999.96 7102.58 4002 7100.24 4002 7093.04 c
-4002 7040.12 l
-4002 7032.74 4000.19 7030.76 3992.22 7029.32 c
-3992.22 7025 l
-4040.1 7025 l
-4040.1 7029.32 l
-4029.12 7030.04 4027 7032.38 4027 7043.54 c
-4027 7077.56 l
-4027 7086.92 4032.02 7094.66 4037.94 7094.66 c
-4039.38 7094.66 4041 7093.4 4042.98 7090.52 c
-4046.4 7085.66 4049.1 7084.04 4053.78 7084.04 c
-4060.44 7084.04 4065.12 7089.08 4065.12 7095.92 c
-4065.12 7104.2 4059 7110.16 4050.54 7110.16 c
-4041.55 7110.16 4034.73 7105.47 4026.28 7093.22 c
-h
-4066.92 7025 m
-f*
-4153.14 7036.52 m
-4151.34 7034.72 l
-4150.8 7034.18 4150.26 7034 4149.36 7034 c
-4146.84 7034 4146 7035.44 4146 7038.5 c
-4146 7085.48 l
-4146 7100.78 4132.16 7110.16 4109.94 7110.16 c
-4089.6 7110.16 4075.92 7100.97 4075.92 7087.46 c
-4075.92 7079.9 4080.24 7075.58 4087.62 7075.58 c
-4094.82 7075.58 4099.86 7079.9 4099.86 7086.02 c
-4099.86 7088.54 4098.96 7090.88 4096.62 7093.76 c
-4095 7095.56 4094.46 7096.64 4094.46 7097.72 c
-4094.46 7101.5 4099.32 7104.16 4105.8 7104.16 c
-4116.42 7104.16 4121 7099.37 4121 7088.54 c
-4121 7075.4 l
-4099.89 7068.92 4091.41 7065.68 4084.56 7061.18 c
-4076.46 7055.78 4073 7049.48 4073 7041.56 c
-4073 7030.58 4081.07 7022.48 4092.3 7022.48 c
-4102.74 7022.48 4111.02 7026.08 4120.92 7035.08 c
-4122.9 7025.9 4126.86 7022.48 4135.68 7022.48 c
-4143.42 7022.48 4149 7025.36 4155.84 7032.74 c
-h
-4121 7043 m
-4116.04 7037.42 4112.37 7035.26 4107.96 7035.26 c
-4102.56 7035.26 4099 7040.12 4099 7047.32 c
-4099 7057.76 4106.57 7065.14 4121 7069.1 c
-h
-4158 7025 m
-f*
-4195.46 7108 m
-4160.73 7108 l
-4160.73 7103.66 l
-4168.65 7102.58 4171 7100.42 4171 7093.04 c
-4171 7040.12 l
-4171 7032.74 4168.95 7030.76 4160.73 7029.32 c
-4160.73 7025 l
-4203.93 7025 l
-4203.93 7029.32 l
-4197.63 7030.22 4196 7032.74 4196 7039.58 c
-4196 7087.64 l
-4196 7088.54 4198.51 7091.78 4200.51 7093.76 c
-4204.29 7096.64 4207.53 7098.16 4210.77 7098.16 c
-4217.79 7098.16 4221 7094 4221 7083.14 c
-4221 7039.58 l
-4221 7032.2 4218.9 7029.86 4211.85 7029.32 c
-4211.85 7025 l
-4253.97 7025 l
-4253.97 7029.32 l
-4247.67 7030.04 4246 7032.74 4246 7039.58 c
-4246 7087.64 l
-4246 7088.54 4248.43 7091.6 4250.37 7093.58 c
-4254.33 7096.64 4257.57 7098.16 4260.81 7098.16 c
-4267.65 7098.16 4270 7093.82 4270 7083.14 c
-4270 7039.58 l
-4270 7032.02 4268.1 7029.86 4261.53 7029.32 c
-4261.53 7025 l
-4304.37 7025 l
-4304.37 7029 l
-4297.35 7029.37 4295 7031.6 4295 7039.58 c
-4295 7084.76 l
-4295 7100.24 4285.6 7110.16 4271.07 7110.16 c
-4260.81 7110.16 4253.97 7106.01 4244.61 7094.48 c
-4239.21 7105.82 4232.91 7110.16 4221.57 7110.16 c
-4210.2 7110.16 4202.21 7105.29 4195.46 7094.48 c
-h
-4307.94 7025 m
-f*
-4380.36 7047.5 m
-4372.98 7038.68 4367.58 7035.48 4359.84 7035.48 c
-4353 7035.48 4347.6 7038.53 4344 7044.62 c
-4340.58 7050.36 4339.14 7056.45 4338.42 7069 c
-4383.78 7069 l
-4382.7 7083.99 4380 7092.3 4374.42 7099.34 c
-4368.66 7106.36 4360.2 7110.16 4350.12 7110.16 c
-4327.62 7110.16 4312.5 7092.33 4312.5 7066.04 c
-4312.5 7039.76 4327.26 7022.48 4349.58 7022.48 c
-4364.16 7022.48 4372.98 7028.06 4384.68 7044.98 c
-h
-4337.52 7076 m
-4338.06 7097.42 4341.3 7104.16 4350.12 7104.16 c
-4355.34 7104.16 4358.58 7101.42 4360.02 7096.1 c
-4360.92 7092.68 4361.28 7087.64 4361.64 7078.46 c
-4361.64 7076 l
-h
-4387.92 7025 m
-f*
-1 i
-3472.55 6989.75 914.4 15.5999 re
-f
-0.2 i
-2524.26 4716.36 m
-2513.64 4705.2 2507.88 4700.88 2499.06 4697.46 c
-2493.84 4695.3 2487.9 4694.58 2482.86 4694.58 c
-2470.98 4694.58 2459.64 4700.74 2454.42 4709.88 c
-2449.2 4719.42 2447 4732.2 2447 4750.38 c
-2447 4787.64 2458.23 4807.7 2479.8 4807.7 c
-2488.26 4807.7 2496 4804.38 2503.74 4797.36 c
-2511.48 4790.52 2515.62 4784.4 2521.92 4770.72 c
-2526.42 4770.72 l
-2526.42 4813.16 l
-2521.56 4813.16 l
-2518.86 4806.43 2517.06 4804.56 2513.64 4804.56 c
-2511.84 4804.56 2509.5 4805.28 2505.36 4807.08 c
-2494.92 4811.4 2486.1 4813.7 2477.46 4813.7 c
-2441.64 4813.7 2415 4785.84 2415 4748.76 c
-2415 4711.68 2441.21 4685.58 2478.54 4685.58 c
-2499.24 4685.58 2511.48 4691.88 2529.66 4711.86 c
-h
-2535.96 4689 m
-f*
-2599.18 4686.66 m
-2606.78 4689.36 2611.02 4690.08 2622.5 4691.34 c
-2633.66 4692.6 l
-2633.66 4697 l
-2625.74 4697.35 2624 4699.63 2624 4707.18 c
-2624 4772 l
-2587.4 4772 l
-2587.4 4767.66 l
-2596.4 4766.94 2599 4764.78 2599 4757.04 c
-2599 4706.1 l
-2592.88 4700.16 2589.18 4698.48 2583.8 4698.48 c
-2576.42 4698.48 2574 4702 2574 4710.96 c
-2574 4772 l
-2539.88 4772 l
-2539.88 4767.66 l
-2547.26 4766.22 2549 4764.6 2549 4757.04 c
-2549 4711.68 l
-2549 4695.84 2557.89 4686.48 2572.64 4686.48 c
-2582.16 4686.48 2588.56 4689.36 2599.18 4698.36 c
-h
-2637.08 4689 m
-f*
-2675.28 4772 m
-2641.22 4772 l
-2641.22 4767.66 l
-2648.96 4766.58 2651 4764.24 2651 4757.04 c
-2651 4704.12 l
-2651 4696.74 2649.19 4694.76 2641.22 4693.32 c
-2641.22 4689 l
-2689.1 4689 l
-2689.1 4693.32 l
-2678.12 4694.04 2676 4696.38 2676 4707.54 c
-2676 4741.56 l
-2676 4750.92 2681.02 4758.66 2686.94 4758.66 c
-2688.38 4758.66 2690 4757.4 2691.98 4754.52 c
-2695.4 4749.66 2698.1 4748.04 2702.78 4748.04 c
-2709.44 4748.04 2714.12 4753.08 2714.12 4759.92 c
-2714.12 4768.2 2708 4774.16 2699.54 4774.16 c
-2690.55 4774.16 2683.73 4769.47 2675.28 4757.22 c
-h
-2715.92 4689 m
-f*
-2756.28 4772 m
-2722.22 4772 l
-2722.22 4767.66 l
-2729.96 4766.58 2732 4764.24 2732 4757.04 c
-2732 4704.12 l
-2732 4696.74 2730.19 4694.76 2722.22 4693.32 c
-2722.22 4689 l
-2770.1 4689 l
-2770.1 4693.32 l
-2759.12 4694.04 2757 4696.38 2757 4707.54 c
-2757 4741.56 l
-2757 4750.92 2762.02 4758.66 2767.94 4758.66 c
-2769.38 4758.66 2771 4757.4 2772.98 4754.52 c
-2776.4 4749.66 2779.1 4748.04 2783.78 4748.04 c
-2790.44 4748.04 2795.12 4753.08 2795.12 4759.92 c
-2795.12 4768.2 2789 4774.16 2780.54 4774.16 c
-2771.55 4774.16 2764.73 4769.47 2756.28 4757.22 c
-h
-2796.92 4689 m
-f*
-2868.36 4711.5 m
-2860.98 4702.68 2855.58 4699.48 2847.84 4699.48 c
-2841 4699.48 2835.6 4702.53 2832 4708.62 c
-2828.58 4714.36 2827.14 4720.45 2826.42 4733 c
-2871.78 4733 l
-2870.7 4747.99 2868 4756.3 2862.42 4763.34 c
-2856.66 4770.36 2848.2 4774.16 2838.12 4774.16 c
-2815.62 4774.16 2800.5 4756.33 2800.5 4730.04 c
-2800.5 4703.76 2815.26 4686.48 2837.58 4686.48 c
-2852.16 4686.48 2860.98 4692.06 2872.68 4708.98 c
-h
-2825.52 4740 m
-2826.06 4761.42 2829.3 4768.16 2838.12 4768.16 c
-2843.34 4768.16 2846.58 4765.42 2848.02 4760.1 c
-2848.92 4756.68 2849.28 4751.64 2849.64 4742.46 c
-2849.64 4740 l
-h
-2875.92 4689 m
-f*
-2913.82 4772 m
-2879.78 4772 l
-2879.78 4767.66 l
-2887.7 4766.4 2889 4764.6 2889 4757.04 c
-2889 4704.12 l
-2889 4696.56 2887.61 4694.94 2879.78 4693.32 c
-2879.78 4689 l
-2923.16 4689 l
-2923.16 4693.32 l
-2916.5 4694.22 2914 4696.92 2914 4703.58 c
-2914 4751.64 l
-2914 4752.36 2915.4 4754.16 2917.4 4755.96 c
-2921.36 4759.92 2925.68 4762.16 2930 4762.16 c
-2936.12 4762.16 2939 4757.27 2939 4747.14 c
-2939 4703.58 l
-2939 4696.92 2936.71 4694.04 2930.72 4693.32 c
-2930.72 4689 l
-2973.02 4689 l
-2973.02 4693.32 l
-2966 4693.86 2964 4696.02 2964 4703.58 c
-2964 4748.76 l
-2964 4764.24 2954.54 4774.16 2939.9 4774.16 c
-2928.96 4774.16 2920.57 4769.11 2913.82 4758.48 c
-h
-2976.08 4689 m
-f*
-3030.9 4772 m
-3014 4772 l
-3014 4802.4 l
-3009.48 4802.4 l
-2998.5 4786.92 2991.3 4778.82 2979.6 4768.92 c
-2979.6 4764 l
-2989 4764 l
-2989 4705.74 l
-2989 4694.04 2996.73 4686.84 3009.12 4686.84 c
-3021.18 4686.84 3028.38 4692.24 3035.76 4707 c
-3031.26 4708.98 l
-3027.66 4702.14 3024.78 4699.84 3021 4699.84 c
-3015.96 4699.84 3014 4702.83 3014 4709.88 c
-3014 4764 l
-3030.9 4764 l
-h
-3035.94 4689 m
-f*
-3081 4689 m
-f*
-3185.94 4811 m
-3083.88 4811 l
-3083.88 4806 l
-3096.3 4805.29 3100 4802.63 3100 4793.4 c
-3100 4706.28 l
-3100 4696.92 3097.44 4694.94 3083.88 4693.5 c
-3083.88 4689 l
-3148.68 4689 l
-3148.68 4694 l
-3132.12 4694.69 3129 4696.77 3129 4706.28 c
-3129 4748.22 l
-3147.28 4747.86 3153.91 4741.2 3156.42 4720.32 c
-3160.92 4720.32 l
-3160.92 4781.16 l
-3156.42 4781.16 l
-3153.19 4760.64 3146.92 4754.34 3129 4754.34 c
-3129 4796.1 l
-3129 4802.76 3131.32 4805 3140.4 4805 c
-3157.14 4805 3167.58 4801.8 3173.16 4795.2 c
-3177.12 4790.7 3179.1 4785.84 3181.62 4774.5 c
-3185.94 4774.5 l
-h
-3190.98 4689 m
-f*
-3230.28 4772 m
-3196.22 4772 l
-3196.22 4767.66 l
-3203.96 4766.58 3206 4764.24 3206 4757.04 c
-3206 4704.12 l
-3206 4696.74 3204.19 4694.76 3196.22 4693.32 c
-3196.22 4689 l
-3244.1 4689 l
-3244.1 4693.32 l
-3233.12 4694.04 3231 4696.38 3231 4707.54 c
-3231 4741.56 l
-3231 4750.92 3236.02 4758.66 3241.94 4758.66 c
-3243.38 4758.66 3245 4757.4 3246.98 4754.52 c
-3250.4 4749.66 3253.1 4748.04 3257.78 4748.04 c
-3264.44 4748.04 3269.12 4753.08 3269.12 4759.92 c
-3269.12 4768.2 3263 4774.16 3254.54 4774.16 c
-3245.55 4774.16 3238.73 4769.47 3230.28 4757.22 c
-h
-3270.92 4689 m
-f*
-3356.14 4700.52 m
-3354.34 4698.72 l
-3353.8 4698.18 3353.26 4698 3352.36 4698 c
-3349.84 4698 3349 4699.44 3349 4702.5 c
-3349 4749.48 l
-3349 4764.78 3335.16 4774.16 3312.94 4774.16 c
-3292.6 4774.16 3278.92 4764.97 3278.92 4751.46 c
-3278.92 4743.9 3283.24 4739.58 3290.62 4739.58 c
-3297.82 4739.58 3302.86 4743.9 3302.86 4750.02 c
-3302.86 4752.54 3301.96 4754.88 3299.62 4757.76 c
-3298 4759.56 3297.46 4760.64 3297.46 4761.72 c
-3297.46 4765.5 3302.32 4768.16 3308.8 4768.16 c
-3319.42 4768.16 3324 4763.37 3324 4752.54 c
-3324 4739.4 l
-3302.89 4732.92 3294.41 4729.68 3287.56 4725.18 c
-3279.46 4719.78 3276 4713.48 3276 4705.56 c
-3276 4694.58 3284.07 4686.48 3295.3 4686.48 c
-3305.74 4686.48 3314.02 4690.08 3323.92 4699.08 c
-3325.9 4689.9 3329.86 4686.48 3338.68 4686.48 c
-3346.42 4686.48 3352 4689.36 3358.84 4696.74 c
-h
-3324 4707 m
-3319.04 4701.42 3315.37 4699.26 3310.96 4699.26 c
-3305.56 4699.26 3302 4704.12 3302 4711.32 c
-3302 4721.76 3309.57 4729.14 3324 4733.1 c
-h
-3361 4689 m
-f*
-3398.46 4772 m
-3363.73 4772 l
-3363.73 4767.66 l
-3371.65 4766.58 3374 4764.42 3374 4757.04 c
-3374 4704.12 l
-3374 4696.74 3371.95 4694.76 3363.73 4693.32 c
-3363.73 4689 l
-3406.93 4689 l
-3406.93 4693.32 l
-3400.63 4694.22 3399 4696.74 3399 4703.58 c
-3399 4751.64 l
-3399 4752.54 3401.51 4755.78 3403.51 4757.76 c
-3407.29 4760.64 3410.53 4762.16 3413.77 4762.16 c
-3420.79 4762.16 3424 4758 3424 4747.14 c
-3424 4703.58 l
-3424 4696.2 3421.9 4693.86 3414.85 4693.32 c
-3414.85 4689 l
-3456.97 4689 l
-3456.97 4693.32 l
-3450.67 4694.04 3449 4696.74 3449 4703.58 c
-3449 4751.64 l
-3449 4752.54 3451.43 4755.6 3453.37 4757.58 c
-3457.33 4760.64 3460.57 4762.16 3463.81 4762.16 c
-3470.65 4762.16 3473 4757.82 3473 4747.14 c
-3473 4703.58 l
-3473 4696.02 3471.1 4693.86 3464.53 4693.32 c
-3464.53 4689 l
-3507.37 4689 l
-3507.37 4693 l
-3500.35 4693.37 3498 4695.6 3498 4703.58 c
-3498 4748.76 l
-3498 4764.24 3488.6 4774.16 3474.07 4774.16 c
-3463.81 4774.16 3456.97 4770.01 3447.61 4758.48 c
-3442.21 4769.82 3435.91 4774.16 3424.57 4774.16 c
-3413.2 4774.16 3405.21 4769.29 3398.46 4758.48 c
-h
-3510.94 4689 m
-f*
-3583.36 4711.5 m
-3575.98 4702.68 3570.58 4699.48 3562.84 4699.48 c
-3556 4699.48 3550.6 4702.53 3547 4708.62 c
-3543.58 4714.36 3542.14 4720.45 3541.42 4733 c
-3586.78 4733 l
-3585.7 4747.99 3583 4756.3 3577.42 4763.34 c
-3571.66 4770.36 3563.2 4774.16 3553.12 4774.16 c
-3530.62 4774.16 3515.5 4756.33 3515.5 4730.04 c
-3515.5 4703.76 3530.26 4686.48 3552.58 4686.48 c
-3567.16 4686.48 3575.98 4692.06 3587.68 4708.98 c
-h
-3540.52 4740 m
-3541.06 4761.42 3544.3 4768.16 3553.12 4768.16 c
-3558.34 4768.16 3561.58 4765.42 3563.02 4760.1 c
-3563.92 4756.68 3564.28 4751.64 3564.64 4742.46 c
-3564.64 4740 l
-h
-3590.92 4689 m
-f*
-1 i
-2405.75 4654.55 1184.4 15.5999 re
-f
-1 g
-3014.15 4881.35 m
-3178.55 5032.55 l
-3095.75 5032.55 l
-3095.75 5186.15 l
-2930.15 5186.15 l
-2930.15 5032.55 l
-2847.35 5032.55 l
-f*
-0 g
-3014.15 4881.35 m
-3178.55 5032.55 l
-3095.75 5032.55 l
-3095.75 5186.15 l
-2930.15 5186.15 l
-2930.15 5032.55 l
-2847.35 5032.55 l
-3014.15 4881.35 l
-3014.15 4894.55 l
-2873.75 5021.75 l
-2939.75 5021.75 l
-2939.75 5176.55 l
-3086.15 5176.55 l
-3086.15 5021.75 l
-3152.15 5021.75 l
-3014.15 4894.55 l
-3014.15 4881.35 l
-f*
-0.564706 g
-2922.95 3375.35 m
-2922.95 3485.75 2831.75 3576.95 2720.15 3576.95 c
-2223.35 3576.95 l
-2111.75 3576.95 2020.55 3485.75 2020.55 3375.35 c
-2020.55 3237.35 l
-2020.55 3126.95 2111.75 3035.75 2223.35 3035.75 c
-2720.15 3035.75 l
-2831.75 3035.75 2922.95 3126.95 2922.95 3237.35 c
-f*
-1 g
-2858.15 3432.95 m
-2858.15 3542.15 2769.35 3630.95 2657.75 3630.95 c
-2166.95 3630.95 l
-2056.55 3630.95 1966.55 3542.15 1966.55 3432.95 c
-1966.55 3298.55 l
-1966.55 3189.35 2055.35 3100.55 2166.95 3100.55 c
-2657.75 3100.55 l
-2769.35 3100.55 2858.15 3189.35 2858.15 3298.55 c
-f*
-0 g
-2858.15 3432.95 m
-2858.15 3542.15 2769.35 3630.95 2657.75 3630.95 c
-2166.95 3630.95 l
-2056.55 3630.95 1966.55 3542.15 1966.55 3432.95 c
-1966.55 3298.55 l
-1966.55 3189.35 2055.35 3100.55 2166.95 3100.55 c
-2657.75 3100.55 l
-2769.35 3100.55 2858.15 3189.35 2858.15 3298.55 c
-h
-S
-0.201248 i
-2199.33 3472 m
-2085.22 3472 l
-2085.22 3467 l
-2099.11 3466.2 2103 3463.18 2103 3452.72 c
-2103 3355.32 l
-2103 3344.85 2100.17 3342.64 2085.22 3341.03 c
-2085.22 3336 l
-2157.67 3336 l
-2157.67 3341 l
-2139.15 3341.81 2136 3344.23 2136 3355.32 c
-2136 3402.21 l
-2156.22 3401.81 2163.55 3394.36 2166.32 3371.02 c
-2171.35 3371.02 l
-2171.35 3439.04 l
-2166.32 3439.04 l
-2162.76 3416.1 2155.82 3409.05 2136 3409.05 c
-2136 3455.74 l
-2136 3463.19 2138.52 3465 2148.41 3465 c
-2167.13 3465 2178.8 3461.64 2185.04 3454.74 c
-2189.47 3449.71 2191.68 3444.27 2194.5 3431.59 c
-2199.33 3431.59 l
-h
-2204.96 3336 m
-f*
-2249.19 3429 m
-2210.84 3429 l
-2210.84 3423.95 l
-2219.49 3422.74 2222 3420.12 2222 3412.07 c
-2222 3352.9 l
-2222 3344.65 2219.93 3342.44 2210.84 3340.83 c
-2210.84 3336 l
-2264.37 3336 l
-2264.37 3340.83 l
-2252.09 3341.63 2250 3344.25 2250 3356.73 c
-2250 3394.76 l
-2250 3405.23 2255.49 3413.88 2261.95 3413.88 c
-2263.56 3413.88 2265.37 3412.47 2267.59 3409.25 c
-2271.41 3403.82 2274.43 3402.01 2279.66 3402.01 c
-2287.11 3402.01 2292.34 3407.64 2292.34 3415.29 c
-2292.34 3424.55 2285.5 3431.41 2276.04 3431.41 c
-2266.1 3431.41 2258.54 3426.12 2249.19 3412.27 c
-h
-2294.35 3336 m
-f*
-2389.19 3348.88 m
-2387.18 3346.87 l
-2386.57 3346.26 2385.97 3346.06 2384.96 3346.06 c
-2382.15 3346.06 2381 3347.67 2381 3351.09 c
-2381 3403.62 l
-2381 3420.73 2365.6 3431.42 2340.89 3431.42 c
-2318.15 3431.42 2302.85 3421.06 2302.85 3405.83 c
-2302.85 3397.38 2307.69 3392.55 2315.94 3392.55 c
-2323.99 3392.55 2329.62 3397.38 2329.62 3404.22 c
-2329.62 3407.04 2328.61 3409.66 2326 3412.88 c
-2324.19 3414.89 2323.58 3416.1 2323.58 3417.3 c
-2323.58 3421.53 2329.02 3424.42 2336.26 3424.42 c
-2348.14 3424.42 2353.86 3419.08 2353.86 3407.04 c
-2353.86 3392.35 l
-2329.91 3385.1 2320.29 3381.48 2312.51 3376.45 c
-2303.46 3370.41 2299 3363.37 2299 3354.52 c
-2299 3342.24 2308.27 3333.18 2321.17 3333.18 c
-2332.84 3333.18 2342.1 3337.21 2353.17 3347.27 c
-2355.38 3337.01 2359.81 3333.18 2369.67 3333.18 c
-2378.32 3333.18 2384.56 3336.4 2392.21 3344.65 c
-h
-2353 3356.13 m
-2347.55 3349.89 2343.52 3347.47 2338.68 3347.47 c
-2332.64 3347.47 2328 3352.91 2328 3360.96 c
-2328 3372.63 2336.61 3380.88 2353 3385.31 c
-h
-2394.62 3336 m
-f*
-2436.4 3429 m
-2397.7 3429 l
-2397.7 3423.95 l
-2406.55 3422.74 2409 3420.32 2409 3412.07 c
-2409 3352.9 l
-2409 3344.65 2406.74 3342.44 2397.7 3340.83 c
-2397.7 3336 l
-2446 3336 l
-2446 3340.83 l
-2438.95 3341.84 2437 3344.65 2437 3352.3 c
-2437 3406.03 l
-2437 3407.04 2439.87 3410.66 2442.18 3412.88 c
-2446.4 3416.1 2450.02 3418.42 2453.65 3418.42 c
-2461.5 3418.42 2465 3413.59 2465 3401 c
-2465 3352.3 l
-2465 3344.05 2462.68 3341.43 2454.85 3340.83 c
-2454.85 3336 l
-2501.95 3336 l
-2501.95 3340.83 l
-2494.9 3341.64 2493 3344.65 2493 3352.3 c
-2493 3406.03 l
-2493 3407.04 2495.73 3410.46 2497.92 3412.68 c
-2502.35 3416.1 2505.97 3418.42 2509.59 3418.42 c
-2517.24 3418.42 2520 3413.38 2520 3401 c
-2520 3352.3 l
-2520 3343.85 2517.85 3341.43 2510.4 3340.83 c
-2510.4 3336 l
-2558.3 3336 l
-2558.3 3341 l
-2550.45 3341.4 2548 3343.78 2548 3352.3 c
-2548 3402.81 l
-2548 3420.12 2537.43 3431.42 2521.07 3431.42 c
-2509.59 3431.42 2501.95 3426.73 2491.48 3413.68 c
-2485.44 3426.36 2478.4 3431.42 2465.72 3431.42 c
-2452.95 3431.42 2443.98 3425.91 2436.4 3413.68 c
-h
-2561.64 3336 m
-f*
-2639.9 3361.16 m
-2631.65 3351.29 2625.61 3347.18 2616.96 3347.18 c
-2609.31 3347.18 2603.27 3350.77 2599.25 3357.94 c
-2595.43 3364.54 2593.82 3371.56 2593.01 3386 c
-2643.73 3386 l
-2642.52 3402.36 2639.5 3411.43 2633.26 3419.12 c
-2626.82 3426.96 2617.36 3431.42 2606.09 3431.42 c
-2580.94 3431.42 2564.03 3411.4 2564.03 3381.88 c
-2564.03 3352.5 2580.53 3333.18 2605.49 3333.18 c
-2621.79 3333.18 2631.65 3339.42 2644.73 3358.34 c
-h
-2592 3393 m
-2592.61 3416.96 2596.23 3424.42 2606.09 3424.42 c
-2611.93 3424.42 2615.55 3421.38 2617.16 3415.49 c
-2618.17 3411.67 2618.57 3406.03 2618.97 3395.77 c
-2618.97 3393 l
-h
-2648.35 3336 m
-f*
-q[1 0 0 1 0 0]concat
-66 97 true[1 0 0 1 -2684 -3336]@85 imagemask
-z"98D:z
-!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z
-"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$
-s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!
-s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!
-s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7++O=k"98D:!"XS[!!E9$
-^]4n\!!!-$s1eU>huE`Zs8Tk7"7Q9j"98D:!!D]j!!E9$^]4E1!!!-$s1eU7qu?^!s8Tk7!;lfs"98D:!!%HJ!!E9$
-^]4@!!!!-$s1eU75C`_9s8Tk7!$?^k"98D:!!!PF!!E9$^]4?FhuElZs1eU7#Oh]qs8Tk7!!D]j"98D:
-!!!,r!!E9$^]4?8qu?j!s1eU7!;lg!s8Tk7!!%HJ"98D:!!!"K!!E9$^]4?75C`k9s1eU7!$?^ns8Tk7
-!!"+V"98D:!!!!0huj#Z^]4?7#N,^as1eU7!!D]ms8Tk7!!!,r"98D:!!!!"qud!!^]4?7!;ls!s1eU7!!%HMs8Tk7
-!!!"K"98D:z56Lrc^]4?7!$?jns1eU7!!!PIs8Tk7!!!!0j8].pz#NPja^]4?7!!Dims1eU7
-!!!&ss8Tk7!!!!"qu?]3z!<<*!^]4?7!!%NKs1eU7!!!!`s8Tk7z5QCc!z!$D7@^]4?7
-!!!Q0s1eU7!!!!(s8Tk7z#QOh>z!!E9$^]4?7!!!'"s1eU7zs8Tk7z!<<)7z!!%NK^]4?7
-!!!!`s1eU7z+90+Vz!$D6Vz!!!Q0^]4?7!!!!(s1eU7z"96.:z!!E8:!!~>
-Q
-1 i
-0.564706 g
-5322.95 3054.95 m
-5322.95 3166.55 5231.75 3257.75 5120.15 3257.75 c
-4623.35 3257.75 l
-4511.75 3257.75 4420.55 3166.55 4420.55 3054.95 c
-4420.55 2918.15 l
-4420.55 2806.55 4511.75 2715.35 4623.35 2715.35 c
-5120.15 2715.35 l
-5231.75 2715.35 5322.95 2806.55 5322.95 2918.15 c
-f*
-1 g
-5253.35 3111.35 m
-5253.35 3219.35 5164.55 3306.95 5055.35 3306.95 c
-4569.35 3306.95 l
-4460.15 3306.95 4371.35 3219.35 4371.35 3111.35 c
-4371.35 2980.55 l
-4371.35 2872.55 4460.15 2784.95 4569.35 2784.95 c
-5055.35 2784.95 l
-5164.55 2784.95 5253.35 2872.55 5253.35 2980.55 c
-f*
-16 w
-0 g
-5253.35 3111.35 m
-5253.35 3219.35 5164.55 3306.95 5055.35 3306.95 c
-4569.35 3306.95 l
-4460.15 3306.95 4371.35 3219.35 4371.35 3111.35 c
-4371.35 2980.55 l
-4371.35 2872.55 4460.15 2784.95 4569.35 2784.95 c
-5055.35 2784.95 l
-5164.55 2784.95 5253.35 2872.55 5253.35 2980.55 c
-h
-S
-0.201248 i
-4599.33 3153 m
-4485.22 3153 l
-4485.22 3148 l
-4499.11 3147.2 4503 3144.18 4503 3133.72 c
-4503 3036.32 l
-4503 3025.85 4500.17 3023.64 4485.22 3022.03 c
-4485.22 3017 l
-4557.67 3017 l
-4557.67 3022 l
-4539.15 3022.81 4536 3025.23 4536 3036.32 c
-4536 3083.21 l
-4556.22 3082.81 4563.55 3075.36 4566.32 3052.02 c
-4571.35 3052.02 l
-4571.35 3120.04 l
-4566.32 3120.04 l
-4562.76 3097.1 4555.82 3090.05 4536 3090.05 c
-4536 3136.74 l
-4536 3144.19 4538.52 3146 4548.41 3146 c
-4567.13 3146 4578.8 3142.64 4585.04 3135.74 c
-4589.47 3130.71 4591.68 3125.27 4594.5 3112.59 c
-4599.33 3112.59 l
-h
-4604.96 3017 m
-f*
-4649.19 3110 m
-4610.84 3110 l
-4610.84 3104.95 l
-4619.49 3103.74 4622 3101.12 4622 3093.07 c
-4622 3033.9 l
-4622 3025.65 4619.93 3023.44 4610.84 3021.83 c
-4610.84 3017 l
-4664.37 3017 l
-4664.37 3021.83 l
-4652.09 3022.63 4650 3025.25 4650 3037.73 c
-4650 3075.76 l
-4650 3086.23 4655.49 3094.88 4661.95 3094.88 c
-4663.56 3094.88 4665.37 3093.47 4667.59 3090.25 c
-4671.41 3084.82 4674.43 3083.01 4679.66 3083.01 c
-4687.11 3083.01 4692.34 3088.64 4692.34 3096.29 c
-4692.34 3105.55 4685.5 3112.41 4676.04 3112.41 c
-4666.1 3112.41 4658.54 3107.12 4649.19 3093.27 c
-h
-4694.35 3017 m
-f*
-4789.19 3029.88 m
-4787.18 3027.87 l
-4786.57 3027.26 4785.97 3027.06 4784.96 3027.06 c
-4782.15 3027.06 4781 3028.67 4781 3032.09 c
-4781 3084.62 l
-4781 3101.73 4765.6 3112.42 4740.89 3112.42 c
-4718.15 3112.42 4702.85 3102.06 4702.85 3086.83 c
-4702.85 3078.38 4707.69 3073.55 4715.94 3073.55 c
-4723.99 3073.55 4729.62 3078.38 4729.62 3085.22 c
-4729.62 3088.04 4728.61 3090.66 4726 3093.88 c
-4724.19 3095.89 4723.58 3097.1 4723.58 3098.3 c
-4723.58 3102.53 4729.02 3105.42 4736.26 3105.42 c
-4748.14 3105.42 4753.86 3100.08 4753.86 3088.04 c
-4753.86 3073.35 l
-4729.91 3066.1 4720.29 3062.48 4712.51 3057.45 c
-4703.46 3051.41 4699 3044.37 4699 3035.52 c
-4699 3023.24 4708.27 3014.18 4721.17 3014.18 c
-4732.84 3014.18 4742.1 3018.21 4753.17 3028.27 c
-4755.38 3018.01 4759.81 3014.18 4769.67 3014.18 c
-4778.32 3014.18 4784.56 3017.4 4792.21 3025.65 c
-h
-4753 3037.13 m
-4747.55 3030.89 4743.52 3028.47 4738.68 3028.47 c
-4732.64 3028.47 4728 3033.91 4728 3041.96 c
-4728 3053.63 4736.61 3061.88 4753 3066.31 c
-h
-4794.62 3017 m
-f*
-4836.4 3110 m
-4797.7 3110 l
-4797.7 3104.95 l
-4806.55 3103.74 4809 3101.32 4809 3093.07 c
-4809 3033.9 l
-4809 3025.65 4806.74 3023.44 4797.7 3021.83 c
-4797.7 3017 l
-4846 3017 l
-4846 3021.83 l
-4838.95 3022.84 4837 3025.65 4837 3033.3 c
-4837 3087.03 l
-4837 3088.04 4839.87 3091.66 4842.18 3093.88 c
-4846.4 3097.1 4850.02 3099.42 4853.65 3099.42 c
-4861.5 3099.42 4865 3094.59 4865 3082 c
-4865 3033.3 l
-4865 3025.05 4862.68 3022.43 4854.85 3021.83 c
-4854.85 3017 l
-4901.95 3017 l
-4901.95 3021.83 l
-4894.9 3022.64 4893 3025.65 4893 3033.3 c
-4893 3087.03 l
-4893 3088.04 4895.73 3091.46 4897.92 3093.68 c
-4902.35 3097.1 4905.97 3099.42 4909.59 3099.42 c
-4917.24 3099.42 4920 3094.38 4920 3082 c
-4920 3033.3 l
-4920 3024.85 4917.85 3022.43 4910.4 3021.83 c
-4910.4 3017 l
-4958.3 3017 l
-4958.3 3022 l
-4950.45 3022.4 4948 3024.78 4948 3033.3 c
-4948 3083.81 l
-4948 3101.12 4937.43 3112.42 4921.07 3112.42 c
-4909.59 3112.42 4901.95 3107.73 4891.48 3094.68 c
-4885.44 3107.36 4878.4 3112.42 4865.72 3112.42 c
-4852.95 3112.42 4843.98 3106.91 4836.4 3094.68 c
-h
-4961.64 3017 m
-f*
-5039.9 3042.16 m
-5031.65 3032.29 5025.61 3028.18 5016.96 3028.18 c
-5009.31 3028.18 5003.27 3031.77 4999.25 3038.94 c
-4995.43 3045.54 4993.82 3052.56 4993.01 3067 c
-5043.73 3067 l
-5042.52 3083.36 5039.5 3092.43 5033.26 3100.12 c
-5026.82 3107.96 5017.36 3112.42 5006.09 3112.42 c
-4980.94 3112.42 4964.03 3092.4 4964.03 3062.88 c
-4964.03 3033.5 4980.53 3014.18 5005.49 3014.18 c
-5021.79 3014.18 5031.65 3020.42 5044.73 3039.34 c
-h
-4992 3074 m
-4992.61 3097.96 4996.23 3105.42 5006.09 3105.42 c
-5011.93 3105.42 5015.55 3102.38 5017.16 3096.49 c
-5018.17 3092.67 5018.57 3087.03 5018.97 3076.77 c
-5018.97 3074 l
-h
-5048.35 3017 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -5092 -3017]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-2904.95 2348.15 m
-2904.95 2458.55 2813.75 2549.75 2702.15 2549.75 c
-2206.55 2549.75 l
-2094.95 2549.75 2003.75 2458.55 2003.75 2348.15 c
-2003.75 2210.15 l
-2003.75 2099.75 2094.95 2008.55 2206.55 2008.55 c
-2702.15 2008.55 l
-2813.75 2008.55 2904.95 2099.75 2904.95 2210.15 c
-f*
-1 g
-2825.75 2402.15 m
-2825.75 2505.35 2739.35 2589.35 2632.55 2589.35 c
-2157.35 2589.35 l
-2050.55 2589.35 1964.15 2505.35 1964.15 2402.15 c
-1964.15 2274.95 l
-1964.15 2171.75 2050.55 2087.75 2157.35 2087.75 c
-2632.55 2087.75 l
-2739.35 2087.75 2825.75 2171.75 2825.75 2274.95 c
-f*
-32 w
-0 g
-2825.75 2402.15 m
-2825.75 2505.35 2739.35 2589.35 2632.55 2589.35 c
-2157.35 2589.35 l
-2050.55 2589.35 1964.15 2505.35 1964.15 2402.15 c
-1964.15 2274.95 l
-1964.15 2171.75 2050.55 2087.75 2157.35 2087.75 c
-2632.55 2087.75 l
-2739.35 2087.75 2825.75 2171.75 2825.75 2274.95 c
-h
-S
-0.201248 i
-2182.33 2445 m
-2068.22 2445 l
-2068.22 2440 l
-2082.11 2439.2 2086 2436.18 2086 2425.72 c
-2086 2328.32 l
-2086 2317.85 2083.17 2315.64 2068.22 2314.03 c
-2068.22 2309 l
-2140.67 2309 l
-2140.67 2314 l
-2122.15 2314.81 2119 2317.23 2119 2328.32 c
-2119 2375.21 l
-2139.22 2374.81 2146.55 2367.36 2149.32 2344.02 c
-2154.35 2344.02 l
-2154.35 2412.04 l
-2149.32 2412.04 l
-2145.76 2389.1 2138.82 2382.05 2119 2382.05 c
-2119 2428.74 l
-2119 2436.19 2121.52 2438 2131.41 2438 c
-2150.13 2438 2161.8 2434.64 2168.04 2427.74 c
-2172.47 2422.71 2174.68 2417.27 2177.5 2404.59 c
-2182.33 2404.59 l
-h
-2187.96 2309 m
-f*
-2231.19 2402 m
-2192.84 2402 l
-2192.84 2396.95 l
-2201.49 2395.74 2204 2393.12 2204 2385.07 c
-2204 2325.9 l
-2204 2317.65 2201.93 2315.44 2192.84 2313.83 c
-2192.84 2309 l
-2246.37 2309 l
-2246.37 2313.83 l
-2234.09 2314.63 2232 2317.25 2232 2329.73 c
-2232 2367.76 l
-2232 2378.23 2237.49 2386.88 2243.95 2386.88 c
-2245.56 2386.88 2247.37 2385.47 2249.59 2382.25 c
-2253.41 2376.82 2256.43 2375.01 2261.66 2375.01 c
-2269.11 2375.01 2274.34 2380.64 2274.34 2388.29 c
-2274.34 2397.55 2267.5 2404.41 2258.04 2404.41 c
-2248.1 2404.41 2240.54 2399.12 2231.19 2385.27 c
-h
-2276.35 2309 m
-f*
-2371.19 2321.88 m
-2369.18 2319.87 l
-2368.57 2319.26 2367.97 2319.06 2366.96 2319.06 c
-2364.15 2319.06 2363 2320.67 2363 2324.09 c
-2363 2376.62 l
-2363 2393.73 2347.6 2404.42 2322.89 2404.42 c
-2300.15 2404.42 2284.85 2394.06 2284.85 2378.83 c
-2284.85 2370.38 2289.69 2365.55 2297.94 2365.55 c
-2305.99 2365.55 2311.62 2370.38 2311.62 2377.22 c
-2311.62 2380.04 2310.61 2382.66 2308 2385.88 c
-2306.19 2387.89 2305.58 2389.1 2305.58 2390.3 c
-2305.58 2394.53 2311.02 2397.42 2318.26 2397.42 c
-2330.14 2397.42 2335.86 2392.08 2335.86 2380.04 c
-2335.86 2365.35 l
-2311.91 2358.1 2302.29 2354.48 2294.51 2349.45 c
-2285.46 2343.41 2281 2336.37 2281 2327.52 c
-2281 2315.24 2290.27 2306.18 2303.17 2306.18 c
-2314.84 2306.18 2324.1 2310.21 2335.17 2320.27 c
-2337.38 2310.01 2341.81 2306.18 2351.67 2306.18 c
-2360.32 2306.18 2366.56 2309.4 2374.21 2317.65 c
-h
-2335 2329.13 m
-2329.55 2322.89 2325.52 2320.47 2320.68 2320.47 c
-2314.64 2320.47 2310 2325.91 2310 2333.96 c
-2310 2345.63 2318.61 2353.88 2335 2358.31 c
-h
-2376.62 2309 m
-f*
-2418.4 2402 m
-2379.7 2402 l
-2379.7 2396.95 l
-2388.55 2395.74 2391 2393.32 2391 2385.07 c
-2391 2325.9 l
-2391 2317.65 2388.74 2315.44 2379.7 2313.83 c
-2379.7 2309 l
-2428 2309 l
-2428 2313.83 l
-2420.95 2314.84 2419 2317.65 2419 2325.3 c
-2419 2379.03 l
-2419 2380.04 2421.87 2383.66 2424.18 2385.88 c
-2428.4 2389.1 2432.02 2391.42 2435.65 2391.42 c
-2443.5 2391.42 2447 2386.59 2447 2374 c
-2447 2325.3 l
-2447 2317.05 2444.68 2314.43 2436.85 2313.83 c
-2436.85 2309 l
-2483.95 2309 l
-2483.95 2313.83 l
-2476.9 2314.64 2475 2317.65 2475 2325.3 c
-2475 2379.03 l
-2475 2380.04 2477.73 2383.46 2479.92 2385.68 c
-2484.35 2389.1 2487.97 2391.42 2491.59 2391.42 c
-2499.24 2391.42 2502 2386.38 2502 2374 c
-2502 2325.3 l
-2502 2316.85 2499.85 2314.43 2492.4 2313.83 c
-2492.4 2309 l
-2540.3 2309 l
-2540.3 2314 l
-2532.45 2314.4 2530 2316.78 2530 2325.3 c
-2530 2375.81 l
-2530 2393.12 2519.43 2404.42 2503.07 2404.42 c
-2491.59 2404.42 2483.95 2399.73 2473.48 2386.68 c
-2467.44 2399.36 2460.4 2404.42 2447.72 2404.42 c
-2434.95 2404.42 2425.98 2398.91 2418.4 2386.68 c
-h
-2543.64 2309 m
-f*
-2623.9 2334.16 m
-2615.65 2324.29 2609.61 2320.18 2600.96 2320.18 c
-2593.31 2320.18 2587.27 2323.77 2583.25 2330.94 c
-2579.43 2337.54 2577.82 2344.56 2577.01 2359 c
-2627.73 2359 l
-2626.52 2375.36 2623.5 2384.43 2617.26 2392.12 c
-2610.82 2399.96 2601.36 2404.42 2590.09 2404.42 c
-2564.94 2404.42 2548.03 2384.4 2548.03 2354.88 c
-2548.03 2325.5 2564.53 2306.18 2589.49 2306.18 c
-2605.79 2306.18 2615.65 2312.42 2628.73 2331.34 c
-h
-2576 2366 m
-2576.61 2389.96 2580.23 2397.42 2590.09 2397.42 c
-2595.93 2397.42 2599.55 2394.38 2601.16 2388.49 c
-2602.17 2384.67 2602.57 2379.03 2602.97 2368.77 c
-2602.97 2366 l
-h
-2632.35 2309 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -2666 -2307]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-16 w
-3375.35 2243.75 m
-3324.95 2510.15 3179.75 2691.35 3016.55 2691.35 c
-2968.55 2691.35 2920.55 2675.75 2876.15 2645.75 c
-S
-2870.15 2711.75 m
-2894.15 2654.15 l
-2949.35 2628.95 l
-2776.55 2542.55 l
-f*
-0.564706 g
-4298.15 2844.95 m
-4163.75 2880.95 l
-4259.75 2937.35 l
-4106.15 2945.75 l
-4148.15 3016.55 l
-4000.55 2996.15 l
-3983.75 3066.95 l
-3863.75 3022.55 l
-3788.15 3086.15 l
-3712.55 3022.55 l
-3592.55 3066.95 l
-3574.55 2996.15 l
-3425.75 3016.55 l
-3470.15 2945.75 l
-3316.55 2937.35 l
-3412.55 2880.95 l
-3276.95 2844.95 l
-3412.55 2810.15 l
-3316.55 2753.75 l
-3470.15 2744.15 l
-3425.75 2674.55 l
-3574.55 2694.95 l
-3592.55 2622.95 l
-3712.55 2668.55 l
-3788.15 2604.95 l
-3863.75 2668.55 l
-3983.75 2622.95 l
-4000.55 2694.95 l
-4148.15 2674.55 l
-4106.15 2744.15 l
-4259.75 2753.75 l
-4163.75 2810.15 l
-f*
-1 g
-4238.15 2904.95 m
-4103.75 2940.95 l
-4199.75 2997.35 l
-4046.15 3005.75 l
-4088.15 3076.55 l
-3940.55 3056.15 l
-3923.75 3126.95 l
-3803.75 3082.55 l
-3728.15 3146.15 l
-3652.55 3082.55 l
-3532.55 3126.95 l
-3514.55 3056.15 l
-3365.75 3076.55 l
-3410.15 3005.75 l
-3256.55 2997.35 l
-3352.55 2940.95 l
-3216.95 2904.95 l
-3352.55 2870.15 l
-3256.55 2813.75 l
-3410.15 2804.15 l
-3365.75 2734.55 l
-3514.55 2754.95 l
-3532.55 2682.95 l
-3652.55 2728.55 l
-3728.15 2664.95 l
-3803.75 2728.55 l
-3923.75 2682.95 l
-3940.55 2754.95 l
-4088.15 2734.55 l
-4046.15 2804.15 l
-4199.75 2813.75 l
-4103.75 2870.15 l
-f*
-0 g
-4238.15 2904.95 m
-4103.75 2940.95 l
-4199.75 2997.35 l
-4046.15 3005.75 l
-4088.15 3076.55 l
-3940.55 3056.15 l
-3923.75 3126.95 l
-3803.75 3082.55 l
-3728.15 3146.15 l
-3652.55 3082.55 l
-3532.55 3126.95 l
-3514.55 3056.15 l
-3365.75 3076.55 l
-3410.15 3005.75 l
-3256.55 2997.35 l
-3352.55 2940.95 l
-3216.95 2904.95 l
-3352.55 2870.15 l
-3256.55 2813.75 l
-3410.15 2804.15 l
-3365.75 2734.55 l
-3514.55 2754.95 l
-3532.55 2682.95 l
-3652.55 2728.55 l
-3728.15 2664.95 l
-3803.75 2728.55 l
-3923.75 2682.95 l
-3940.55 2754.95 l
-4088.15 2734.55 l
-4046.15 2804.15 l
-4199.75 2813.75 l
-4103.75 2870.15 l
-4238.15 2904.95 l
-4161.35 2904.95 l
-4052.15 2877.35 l
-4132.55 2829.35 l
-4012.55 2822.15 l
-4049.75 2759.75 l
-3926.15 2777.75 l
-3909.35 2709.35 l
-3800.15 2751.35 l
-3728.15 2691.35 l
-3656.15 2751.35 l
-3545.75 2709.35 l
-3530.15 2777.75 l
-3406.55 2759.75 l
-3444.95 2822.15 l
-3323.75 2829.35 l
-3404.15 2877.35 l
-3294.95 2904.95 l
-3404.15 2933.75 l
-3323.75 2980.55 l
-3444.95 2988.95 l
-3406.55 3051.35 l
-3530.15 3033.35 l
-3545.75 3100.55 l
-3656.15 3059.75 l
-3728.15 3119.75 l
-3800.15 3059.75 l
-3909.35 3100.55 l
-3926.15 3033.35 l
-4049.75 3051.35 l
-4012.55 2988.95 l
-4132.55 2980.55 l
-4052.15 2933.75 l
-4161.35 2904.95 l
-4238.15 2904.95 l
-f*
-0.2 i
-3550.08 2956.76 m
-3530.08 2882.52 l
-3527.52 2873.88 3524.48 2871.64 3514.08 2871 c
-3514.08 2867 l
-3564 2867 l
-3564 2871 l
-3554.72 2871.48 3552.48 2872.76 3552.48 2877.88 c
-3552.48 2879.64 3552.8 2881.4 3553.76 2885.08 c
-3553.92 2885.88 l
-3554.08 2886.68 l
-3573.76 2958.52 l
-3576.16 2966.84 3578.56 2969.08 3586.72 2970.04 c
-3586.72 2974 l
-3552.8 2974 l
-3503.2 2897.24 l
-3494.56 2974 l
-3459.2 2974 l
-3459.2 2970 l
-3469.28 2969.52 3470.72 2968.89 3470.72 2964.44 c
-3470.72 2962.2 3470.08 2959.32 3468.96 2955.16 c
-3451.52 2895.48 l
-3445.12 2874.68 3444 2872.92 3435.36 2871 c
-3435.36 2867 l
-3468.48 2867 l
-3468.48 2871 l
-3458.24 2872.28 3455.68 2874.2 3455.68 2880.76 c
-3455.68 2883.48 3456.48 2887.48 3458.72 2895.48 c
-3474.88 2954.52 l
-3485.6 2865.08 l
-3490.08 2865.08 l
-h
-3582.24 2867 m
-f*
-3651.44 2887.32 m
-3644.88 2878.52 3642.48 2875.76 3639.92 2875.76 c
-3638.64 2875.76 3638 2876.86 3638 2878.52 c
-3638 2882.52 3639.44 2889.08 3643.44 2902.2 c
-3654.8 2939.96 l
-3637.04 2938.84 l
-3634.16 2929.4 l
-3632.72 2937.56 3629.2 2941.08 3622.32 2941.08 c
-3602.64 2941.08 3579 2910.27 3579 2885.24 c
-3579 2873.08 3585.74 2864.92 3595.92 2864.92 c
-3605.68 2864.92 3613.04 2870.68 3622.16 2886.04 c
-3620.24 2879.48 3620 2877.56 3620 2875.32 c
-3620 2869.4 3624.76 2864.76 3630.64 2864.76 c
-3638.16 2864.76 3645.52 2871 3654.8 2884.92 c
-h
-3624.56 2934.2 m
-3628.08 2933.88 3630.56 2931 3630.56 2926.68 c
-3630.56 2917.08 3625.24 2899.32 3618.96 2888.28 c
-3614.64 2880.44 3609.84 2875.92 3605.52 2875.92 c
-3601.36 2875.92 3598 2879.75 3598 2884.92 c
-3598 2893.24 3603.42 2909.24 3610.16 2921.08 c
-3614.96 2929.56 3620.24 2934.52 3624.56 2934.2 c
-h
-3662 2867 m
-f*
-3696.56 2940.92 m
-3680.24 2938.36 3674 2937.4 3665.68 2936.44 c
-3665.68 2932 l
-3672.88 2931.69 3674.32 2931.07 3674.32 2928.12 c
-3674.32 2926.52 3673.04 2920.76 3670.8 2912.44 c
-3654.8 2850.36 l
-3651.76 2839.8 3650.48 2838.84 3642.8 2839 c
-3642.8 2834 l
-3682.64 2834 l
-3682.64 2839 l
-3674.64 2839.14 3672.24 2840.16 3672.24 2843.64 c
-3672.24 2845.88 3673.36 2850.68 3676.4 2861.88 c
-3677.52 2865.72 3677.52 2866.04 3678.16 2868.44 c
-3683.76 2865.56 3685.68 2864.92 3689.04 2864.92 c
-3710.8 2864.92 3733.36 2893.88 3733.36 2921.56 c
-3733.36 2933.4 3726.64 2941.08 3716.08 2941.08 c
-3706.96 2941.08 3699.92 2935.92 3690.48 2922.52 c
-h
-3707.12 2929.56 m
-3711.28 2929.24 3713.68 2925.56 3713.36 2920.44 c
-3712.72 2909.88 3707.6 2894.04 3701.84 2883.64 c
-3696.88 2875 3691.76 2869.92 3686.32 2869.92 c
-3682.8 2869.92 3680.08 2872.75 3680.08 2876.28 c
-3680.08 2879 3681.84 2885.56 3686.16 2900.12 c
-3689.68 2911.8 3691.12 2915.8 3693.52 2919.48 c
-3697.52 2925.72 3702.96 2929.88 3707.12 2929.56 c
-h
-3742 2867 m
-f*
-3777.56 2940.92 m
-3761.24 2938.36 3755 2937.4 3746.68 2936.44 c
-3746.68 2932 l
-3753.88 2931.69 3755.32 2931.07 3755.32 2928.12 c
-3755.32 2926.52 3754.04 2920.76 3751.8 2912.44 c
-3735.8 2850.36 l
-3732.76 2839.8 3731.48 2838.84 3723.8 2839 c
-3723.8 2834 l
-3763.64 2834 l
-3763.64 2839 l
-3755.64 2839.14 3753.24 2840.16 3753.24 2843.64 c
-3753.24 2845.88 3754.36 2850.68 3757.4 2861.88 c
-3758.52 2865.72 3758.52 2866.04 3759.16 2868.44 c
-3764.76 2865.56 3766.68 2864.92 3770.04 2864.92 c
-3791.8 2864.92 3814.36 2893.88 3814.36 2921.56 c
-3814.36 2933.4 3807.64 2941.08 3797.08 2941.08 c
-3787.96 2941.08 3780.92 2935.92 3771.48 2922.52 c
-h
-3788.12 2929.56 m
-3792.28 2929.24 3794.68 2925.56 3794.36 2920.44 c
-3793.72 2909.88 3788.6 2894.04 3782.84 2883.64 c
-3777.88 2875 3772.76 2869.92 3767.32 2869.92 c
-3763.8 2869.92 3761.08 2872.75 3761.08 2876.28 c
-3761.08 2879 3762.84 2885.56 3767.16 2900.12 c
-3770.68 2911.8 3772.12 2915.8 3774.52 2919.48 c
-3778.52 2925.72 3783.96 2929.88 3788.12 2929.56 c
-h
-3823 2867 m
-f*
-3856.56 2889.56 m
-3854.32 2886.36 l
-3850.16 2880.12 3846.48 2876.56 3844.08 2876.56 c
-3842.8 2876.56 3842 2877.77 3842 2879.16 c
-3842 2880.6 3842.62 2884.76 3843.12 2887.48 c
-3857.68 2940.92 l
-3849.22 2939 3838.26 2937.4 3826.04 2936.44 c
-3826.04 2932 l
-3827.44 2932 l
-3832.24 2932 3835.48 2930.44 3835.48 2927.48 c
-3835.48 2926.2 3834.71 2923.8 3833.68 2921.08 c
-3824.4 2886.68 l
-3823.12 2882.04 3823 2877.88 3823 2875.64 c
-3823 2869.56 3827.2 2865.56 3833.36 2865.56 c
-3842.96 2865.56 3848.88 2870.36 3860.08 2887.32 c
-h
-3852.88 2976.4 m
-3847.44 2976.4 3843 2971.46 3843 2966.04 c
-3843 2959.8 3847.26 2955.4 3853.04 2955.4 c
-3859.12 2955.4 3864 2959.86 3864 2965.56 c
-3864 2971.48 3859 2976.4 3852.88 2976.4 c
-h
-3866.48 2867 m
-f*
-3941.36 2888.6 m
-3934.96 2878.68 3932.88 2876.56 3930.16 2876.56 c
-3928.88 2876.56 3928 2877.63 3928 2879.16 c
-3928 2880.76 3928.94 2884.12 3931.92 2893.08 c
-3937.68 2910.52 l
-3940.24 2918.04 3942 2925.08 3942 2928.92 c
-3942 2936.76 3937.78 2941.08 3930.16 2941.08 c
-3924.24 2941.08 3918.48 2938.62 3914.16 2934.36 c
-3908.24 2928.76 3905.2 2924.92 3894.48 2909.08 c
-3904.72 2940.76 l
-3894.48 2938.52 3881.68 2936.92 3872.72 2936.6 c
-3872.72 2931.8 l
-3879.44 2931.65 3881.36 2930.92 3881.36 2928.12 c
-3881.36 2926.2 3879.12 2917.72 3874 2899.64 c
-3870.32 2886.68 3869.2 2882.52 3865.04 2867 c
-3884.4 2867 l
-3891.92 2894.68 3897.68 2908.6 3907.6 2921.56 c
-3910.8 2925.88 3915.76 2929.08 3918.64 2929.08 c
-3920.72 2929.08 3923 2927.63 3923 2926.04 c
-3923 2925.56 3922.54 2924.28 3921.84 2922.68 c
-3913.04 2896.12 l
-3910.48 2888.44 3909 2879.32 3909 2875.16 c
-3909 2869.08 3912.84 2865.56 3919.44 2865.56 c
-3929.04 2865.56 3935.6 2871 3944.88 2886.52 c
-h
-3954.96 2867 m
-f*
-4032.48 2936 m
-4014.72 2936 l
-4009.28 2939.58 4004.48 2941.08 3997.12 2941.08 c
-3977.44 2941.08 3961 2928.05 3961 2911.8 c
-3961 2903.64 3965.35 2897.88 3974.4 2894.2 c
-3961.28 2886.84 3959 2884.6 3959 2878.68 c
-3959 2873.56 3961.89 2870.52 3968.96 2868.12 c
-3959.04 2865.72 3955.84 2864.44 3952 2861.4 c
-3949.44 2859.16 3948 2855.32 3948 2851.48 c
-3948 2841.08 3959.56 2835 3977.76 2835 c
-4000.32 2835 4016 2844.72 4016 2858.52 c
-4016 2868.28 4009.6 2873.56 3992.16 2878.52 c
-3983.68 2880.92 l
-3978.56 2882.36 3975 2884.6 3975 2887 c
-3975 2889.56 3977.68 2892.28 3980 2892.28 c
-3980.8 2892.28 3981.92 2892.24 3983.2 2892.12 c
-3984.96 2891.64 3986.24 2891 3988.16 2891 c
-3995.2 2891 4002.4 2893.09 4008.48 2896.92 c
-4017.76 2902.2 4023 2910.36 4023 2919.96 c
-4023 2922.64 4022.59 2924.32 4021.76 2927 c
-4032.48 2927 l
-h
-3974.4 2866.04 m
-3976.32 2865.88 3988.48 2861.72 3992 2860.12 c
-3996.48 2857.88 3999 2855.16 3999 2851 c
-3999 2843.96 3991.8 2840 3979.36 2840 c
-3968.96 2840 3962 2845.1 3962 2852.44 c
-3962 2855.48 3963.32 2858.2 3966.24 2861.24 c
-3968.32 2863.32 3973.12 2866.2 3974.4 2866.04 c
-h
-3996.8 2936.08 m
-4000.96 2936.08 4004 2932.19 4004 2926.52 c
-4004 2921.08 4002.08 2913.4 3999.36 2907.48 c
-3996 2900.12 3991.84 2896 3986.88 2896 c
-3982.56 2896 3980 2899.52 3980 2905.88 c
-3980 2912.28 3982.79 2922.04 3986.24 2928.12 c
-3989.28 2933.4 3992.64 2936.08 3996.8 2936.08 c
-h
-4036 2867 m
-f*
-1 i
-0.564706 g
-4088.15 3789.35 m
-3953.75 3826.55 l
-4049.75 3881.75 l
-3896.15 3891.35 l
-3938.15 3960.95 l
-3790.55 3940.55 l
-3773.75 4012.55 l
-3653.75 3966.95 l
-3578.15 4030.55 l
-3502.55 3966.95 l
-3382.55 4012.55 l
-3364.55 3940.55 l
-3215.75 3960.95 l
-3260.15 3891.35 l
-3106.55 3881.75 l
-3202.55 3826.55 l
-3066.95 3789.35 l
-3202.55 3754.55 l
-3106.55 3698.15 l
-3260.15 3689.75 l
-3215.75 3620.15 l
-3364.55 3639.35 l
-3382.55 3568.55 l
-3502.55 3612.95 l
-3578.15 3549.35 l
-3653.75 3612.95 l
-3773.75 3568.55 l
-3790.55 3639.35 l
-3938.15 3620.15 l
-3896.15 3689.75 l
-4049.75 3698.15 l
-3953.75 3754.55 l
-f*
-1 g
-4028.15 3849.35 m
-3893.75 3886.55 l
-3989.75 3941.75 l
-3836.15 3951.35 l
-3878.15 4020.95 l
-3730.55 4000.55 l
-3713.75 4072.55 l
-3593.75 4026.95 l
-3518.15 4090.55 l
-3442.55 4026.95 l
-3322.55 4072.55 l
-3304.55 4000.55 l
-3155.75 4020.95 l
-3200.15 3951.35 l
-3046.55 3941.75 l
-3142.55 3886.55 l
-3006.95 3849.35 l
-3142.55 3814.55 l
-3046.55 3758.15 l
-3200.15 3749.75 l
-3155.75 3680.15 l
-3304.55 3699.35 l
-3322.55 3628.55 l
-3442.55 3672.95 l
-3518.15 3609.35 l
-3593.75 3672.95 l
-3713.75 3628.55 l
-3730.55 3699.35 l
-3878.15 3680.15 l
-3836.15 3749.75 l
-3989.75 3758.15 l
-3893.75 3814.55 l
-f*
-0 g
-4028.15 3849.35 m
-3893.75 3886.55 l
-3989.75 3941.75 l
-3836.15 3951.35 l
-3878.15 4020.95 l
-3730.55 4000.55 l
-3713.75 4072.55 l
-3593.75 4026.95 l
-3518.15 4090.55 l
-3442.55 4026.95 l
-3322.55 4072.55 l
-3304.55 4000.55 l
-3155.75 4020.95 l
-3200.15 3951.35 l
-3046.55 3941.75 l
-3142.55 3886.55 l
-3006.95 3849.35 l
-3142.55 3814.55 l
-3046.55 3758.15 l
-3200.15 3749.75 l
-3155.75 3680.15 l
-3304.55 3699.35 l
-3322.55 3628.55 l
-3442.55 3672.95 l
-3518.15 3609.35 l
-3593.75 3672.95 l
-3713.75 3628.55 l
-3730.55 3699.35 l
-3878.15 3680.15 l
-3836.15 3749.75 l
-3989.75 3758.15 l
-3893.75 3814.55 l
-4028.15 3849.35 l
-3951.35 3849.35 l
-3842.15 3821.75 l
-3922.55 3774.95 l
-3802.55 3767.75 l
-3839.75 3704.15 l
-3716.15 3722.15 l
-3699.35 3654.95 l
-3590.15 3695.75 l
-3518.15 3635.75 l
-3446.15 3695.75 l
-3335.75 3654.95 l
-3320.15 3722.15 l
-3196.55 3704.15 l
-3234.95 3767.75 l
-3113.75 3774.95 l
-3194.15 3821.75 l
-3084.95 3849.35 l
-3194.15 3878.15 l
-3113.75 3926.15 l
-3234.95 3933.35 l
-3196.55 3995.75 l
-3320.15 3978.95 l
-3335.75 4046.15 l
-3446.15 4004.15 l
-3518.15 4064.15 l
-3590.15 4004.15 l
-3699.35 4046.15 l
-3716.15 3978.95 l
-3839.75 3995.75 l
-3802.55 3933.35 l
-3922.55 3926.15 l
-3842.15 3878.15 l
-3951.35 3849.35 l
-4028.15 3849.35 l
-f*
-0.2 i
-3340.08 3900.76 m
-3320.08 3826.52 l
-3317.52 3817.88 3314.48 3815.64 3304.08 3815 c
-3304.08 3811 l
-3354 3811 l
-3354 3815 l
-3344.72 3815.48 3342.48 3816.76 3342.48 3821.88 c
-3342.48 3823.64 3342.8 3825.4 3343.76 3829.08 c
-3343.92 3829.88 l
-3344.08 3830.68 l
-3363.76 3902.52 l
-3366.16 3910.84 3368.56 3913.08 3376.72 3914.04 c
-3376.72 3918 l
-3342.8 3918 l
-3293.2 3841.24 l
-3284.56 3918 l
-3249.2 3918 l
-3249.2 3914 l
-3259.28 3913.52 3260.72 3912.89 3260.72 3908.44 c
-3260.72 3906.2 3260.08 3903.32 3258.96 3899.16 c
-3241.52 3839.48 l
-3235.12 3818.68 3234 3816.92 3225.36 3815 c
-3225.36 3811 l
-3258.48 3811 l
-3258.48 3815 l
-3248.24 3816.28 3245.68 3818.2 3245.68 3824.76 c
-3245.68 3827.48 3246.48 3831.48 3248.72 3839.48 c
-3264.88 3898.52 l
-3275.6 3809.08 l
-3280.08 3809.08 l
-h
-3372.24 3811 m
-f*
-3441.44 3831.32 m
-3434.88 3822.52 3432.48 3819.76 3429.92 3819.76 c
-3428.64 3819.76 3428 3820.86 3428 3822.52 c
-3428 3826.52 3429.44 3833.08 3433.44 3846.2 c
-3444.8 3883.96 l
-3427.04 3882.84 l
-3424.16 3873.4 l
-3422.72 3881.56 3419.2 3885.08 3412.32 3885.08 c
-3392.64 3885.08 3369 3854.27 3369 3829.24 c
-3369 3817.08 3375.74 3808.92 3385.92 3808.92 c
-3395.68 3808.92 3403.04 3814.68 3412.16 3830.04 c
-3410.24 3823.48 3410 3821.56 3410 3819.32 c
-3410 3813.4 3414.76 3808.76 3420.64 3808.76 c
-3428.16 3808.76 3435.52 3815 3444.8 3828.92 c
-h
-3414.56 3878.2 m
-3418.08 3877.88 3420.56 3875 3420.56 3870.68 c
-3420.56 3861.08 3415.24 3843.32 3408.96 3832.28 c
-3404.64 3824.44 3399.84 3819.92 3395.52 3819.92 c
-3391.36 3819.92 3388 3823.75 3388 3828.92 c
-3388 3837.24 3393.42 3853.24 3400.16 3865.08 c
-3404.96 3873.56 3410.24 3878.52 3414.56 3878.2 c
-h
-3452 3811 m
-f*
-3486.56 3884.92 m
-3470.24 3882.36 3464 3881.4 3455.68 3880.44 c
-3455.68 3876 l
-3462.88 3875.69 3464.32 3875.07 3464.32 3872.12 c
-3464.32 3870.52 3463.04 3864.76 3460.8 3856.44 c
-3444.8 3794.36 l
-3441.76 3783.8 3440.48 3782.84 3432.8 3783 c
-3432.8 3778 l
-3472.64 3778 l
-3472.64 3783 l
-3464.64 3783.14 3462.24 3784.16 3462.24 3787.64 c
-3462.24 3789.88 3463.36 3794.68 3466.4 3805.88 c
-3467.52 3809.72 3467.52 3810.04 3468.16 3812.44 c
-3473.76 3809.56 3475.68 3808.92 3479.04 3808.92 c
-3500.8 3808.92 3523.36 3837.88 3523.36 3865.56 c
-3523.36 3877.4 3516.64 3885.08 3506.08 3885.08 c
-3496.96 3885.08 3489.92 3879.92 3480.48 3866.52 c
-h
-3497.12 3873.56 m
-3501.28 3873.24 3503.68 3869.56 3503.36 3864.44 c
-3502.72 3853.88 3497.6 3838.04 3491.84 3827.64 c
-3486.88 3819 3481.76 3813.92 3476.32 3813.92 c
-3472.8 3813.92 3470.08 3816.75 3470.08 3820.28 c
-3470.08 3823 3471.84 3829.56 3476.16 3844.12 c
-3479.68 3855.8 3481.12 3859.8 3483.52 3863.48 c
-3487.52 3869.72 3492.96 3873.88 3497.12 3873.56 c
-h
-3532 3811 m
-f*
-3567.56 3884.92 m
-3551.24 3882.36 3545 3881.4 3536.68 3880.44 c
-3536.68 3876 l
-3543.88 3875.69 3545.32 3875.07 3545.32 3872.12 c
-3545.32 3870.52 3544.04 3864.76 3541.8 3856.44 c
-3525.8 3794.36 l
-3522.76 3783.8 3521.48 3782.84 3513.8 3783 c
-3513.8 3778 l
-3553.64 3778 l
-3553.64 3783 l
-3545.64 3783.14 3543.24 3784.16 3543.24 3787.64 c
-3543.24 3789.88 3544.36 3794.68 3547.4 3805.88 c
-3548.52 3809.72 3548.52 3810.04 3549.16 3812.44 c
-3554.76 3809.56 3556.68 3808.92 3560.04 3808.92 c
-3581.8 3808.92 3604.36 3837.88 3604.36 3865.56 c
-3604.36 3877.4 3597.64 3885.08 3587.08 3885.08 c
-3577.96 3885.08 3570.92 3879.92 3561.48 3866.52 c
-h
-3578.12 3873.56 m
-3582.28 3873.24 3584.68 3869.56 3584.36 3864.44 c
-3583.72 3853.88 3578.6 3838.04 3572.84 3827.64 c
-3567.88 3819 3562.76 3813.92 3557.32 3813.92 c
-3553.8 3813.92 3551.08 3816.75 3551.08 3820.28 c
-3551.08 3823 3552.84 3829.56 3557.16 3844.12 c
-3560.68 3855.8 3562.12 3859.8 3564.52 3863.48 c
-3568.52 3869.72 3573.96 3873.88 3578.12 3873.56 c
-h
-3613 3811 m
-f*
-3646.56 3833.56 m
-3644.32 3830.36 l
-3640.16 3824.12 3636.48 3820.56 3634.08 3820.56 c
-3632.8 3820.56 3632 3821.77 3632 3823.16 c
-3632 3824.6 3632.62 3828.76 3633.12 3831.48 c
-3647.68 3884.92 l
-3639.22 3883 3628.26 3881.4 3616.04 3880.44 c
-3616.04 3876 l
-3617.44 3876 l
-3622.24 3876 3625.48 3874.44 3625.48 3871.48 c
-3625.48 3870.2 3624.71 3867.8 3623.68 3865.08 c
-3614.4 3830.68 l
-3613.12 3826.04 3613 3821.88 3613 3819.64 c
-3613 3813.56 3617.2 3809.56 3623.36 3809.56 c
-3632.96 3809.56 3638.88 3814.36 3650.08 3831.32 c
-h
-3642.88 3920.4 m
-3637.44 3920.4 3633 3915.46 3633 3910.04 c
-3633 3903.8 3637.26 3899.4 3643.04 3899.4 c
-3649.12 3899.4 3654 3903.86 3654 3909.56 c
-3654 3915.48 3649 3920.4 3642.88 3920.4 c
-h
-3656.48 3811 m
-f*
-3731.36 3832.6 m
-3724.96 3822.68 3722.88 3820.56 3720.16 3820.56 c
-3718.88 3820.56 3718 3821.63 3718 3823.16 c
-3718 3824.76 3718.94 3828.12 3721.92 3837.08 c
-3727.68 3854.52 l
-3730.24 3862.04 3732 3869.08 3732 3872.92 c
-3732 3880.76 3727.78 3885.08 3720.16 3885.08 c
-3714.24 3885.08 3708.48 3882.62 3704.16 3878.36 c
-3698.24 3872.76 3695.2 3868.92 3684.48 3853.08 c
-3694.72 3884.76 l
-3684.48 3882.52 3671.68 3880.92 3662.72 3880.6 c
-3662.72 3875.8 l
-3669.44 3875.65 3671.36 3874.92 3671.36 3872.12 c
-3671.36 3870.2 3669.12 3861.72 3664 3843.64 c
-3660.32 3830.68 3659.2 3826.52 3655.04 3811 c
-3674.4 3811 l
-3681.92 3838.68 3687.68 3852.6 3697.6 3865.56 c
-3700.8 3869.88 3705.76 3873.08 3708.64 3873.08 c
-3710.72 3873.08 3713 3871.63 3713 3870.04 c
-3713 3869.56 3712.54 3868.28 3711.84 3866.68 c
-3703.04 3840.12 l
-3700.48 3832.44 3699 3823.32 3699 3819.16 c
-3699 3813.08 3702.84 3809.56 3709.44 3809.56 c
-3719.04 3809.56 3725.6 3815 3734.88 3830.52 c
-h
-3744.96 3811 m
-f*
-3822.48 3880 m
-3804.72 3880 l
-3799.28 3883.58 3794.48 3885.08 3787.12 3885.08 c
-3767.44 3885.08 3751 3872.05 3751 3855.8 c
-3751 3847.64 3755.35 3841.88 3764.4 3838.2 c
-3751.28 3830.84 3749 3828.6 3749 3822.68 c
-3749 3817.56 3751.89 3814.52 3758.96 3812.12 c
-3749.04 3809.72 3745.84 3808.44 3742 3805.4 c
-3739.44 3803.16 3738 3799.32 3738 3795.48 c
-3738 3785.08 3749.56 3779 3767.76 3779 c
-3790.32 3779 3806 3788.72 3806 3802.52 c
-3806 3812.28 3799.6 3817.56 3782.16 3822.52 c
-3773.68 3824.92 l
-3768.56 3826.36 3765 3828.6 3765 3831 c
-3765 3833.56 3767.68 3836.28 3770 3836.28 c
-3770.8 3836.28 3771.92 3836.24 3773.2 3836.12 c
-3774.96 3835.64 3776.24 3835 3778.16 3835 c
-3785.2 3835 3792.4 3837.09 3798.48 3840.92 c
-3807.76 3846.2 3813 3854.36 3813 3863.96 c
-3813 3866.64 3812.59 3868.32 3811.76 3871 c
-3822.48 3871 l
-h
-3764.4 3810.04 m
-3766.32 3809.88 3778.48 3805.72 3782 3804.12 c
-3786.48 3801.88 3789 3799.16 3789 3795 c
-3789 3787.96 3781.8 3784 3769.36 3784 c
-3758.96 3784 3752 3789.1 3752 3796.44 c
-3752 3799.48 3753.32 3802.2 3756.24 3805.24 c
-3758.32 3807.32 3763.12 3810.2 3764.4 3810.04 c
-h
-3786.8 3880.08 m
-3790.96 3880.08 3794 3876.19 3794 3870.52 c
-3794 3865.08 3792.08 3857.4 3789.36 3851.48 c
-3786 3844.12 3781.84 3840 3776.88 3840 c
-3772.56 3840 3770 3843.52 3770 3849.88 c
-3770 3856.28 3772.79 3866.04 3776.24 3872.12 c
-3779.28 3877.4 3782.64 3880.08 3786.8 3880.08 c
-h
-3826 3811 m
-f*
-1 i
-1 g
-4822.55 3368.15 m
-4988.15 3521.75 l
-4906.55 3521.75 l
-4906.55 3672.95 l
-4739.75 3672.95 l
-4739.75 3521.75 l
-4658.15 3521.75 l
-f*
-0 g
-4822.55 3368.15 m
-4988.15 3521.75 l
-4906.55 3521.75 l
-4906.55 3672.95 l
-4739.75 3672.95 l
-4739.75 3521.75 l
-4658.15 3521.75 l
-4822.55 3368.15 l
-4822.55 3382.55 l
-4683.35 3512.15 l
-4749.35 3512.15 l
-4749.35 3663.35 l
-4895.75 3663.35 l
-4895.75 3512.15 l
-4964.15 3512.15 l
-4822.55 3382.55 l
-4822.55 3368.15 l
-f*
-0.2 i
-4375.88 3907 m
-4375.88 3902 l
-4388.3 3901.29 4392 3898.45 4392 3889.4 c
-4392 3802.28 l
-4392 3793.1 4389.25 3790.94 4375.88 3789.5 c
-4375.88 3785 l
-4433.84 3785 l
-4464.26 3785 4484 3798.5 4484 3818.84 c
-4484 3827.12 4480.73 3834.32 4474.7 3839.9 c
-4468.4 3845.48 4462.28 3848 4449.68 3850.7 c
-4470.56 3856.82 4478 3864.2 4478 3877.88 c
-4478 3896.42 4461.55 3907 4431.5 3907 c
-h
-4421 3846.74 m
-4425.92 3846.74 l
-4444.46 3846.74 4453 3837.2 4453 3817.22 c
-4453 3799.76 4445.77 3791 4431.5 3791 c
-4423.58 3791 4421 3793.99 4421 3801.74 c
-h
-4421 3892.46 m
-4421 3898.94 4423.39 3902 4430.24 3902 c
-4442.84 3902 4449 3894.03 4449 3876.62 c
-4449 3857.72 4443.08 3852.68 4421 3852.14 c
-h
-4493.06 3785 m
-f*
-4578.14 3796.52 m
-4576.34 3794.72 l
-4575.8 3794.18 4575.26 3794 4574.36 3794 c
-4571.84 3794 4571 3795.44 4571 3798.5 c
-4571 3845.48 l
-4571 3860.78 4557.16 3870.16 4534.94 3870.16 c
-4514.6 3870.16 4500.92 3860.97 4500.92 3847.46 c
-4500.92 3839.9 4505.24 3835.58 4512.62 3835.58 c
-4519.82 3835.58 4524.86 3839.9 4524.86 3846.02 c
-4524.86 3848.54 4523.96 3850.88 4521.62 3853.76 c
-4520 3855.56 4519.46 3856.64 4519.46 3857.72 c
-4519.46 3861.5 4524.32 3864.16 4530.8 3864.16 c
-4541.42 3864.16 4546 3859.37 4546 3848.54 c
-4546 3835.4 l
-4524.89 3828.92 4516.41 3825.68 4509.56 3821.18 c
-4501.46 3815.78 4498 3809.48 4498 3801.56 c
-4498 3790.58 4506.07 3782.48 4517.3 3782.48 c
-4527.74 3782.48 4536.02 3786.08 4545.92 3795.08 c
-4547.9 3785.9 4551.86 3782.48 4560.68 3782.48 c
-4568.42 3782.48 4574 3785.36 4580.84 3792.74 c
-h
-4546 3803 m
-4541.04 3797.42 4537.37 3795.26 4532.96 3795.26 c
-4527.56 3795.26 4524 3800.12 4524 3807.32 c
-4524 3817.76 4531.57 3825.14 4546 3829.1 c
-h
-4583 3785 m
-f*
-4644.22 3843.68 m
-4644.22 3869.8 l
-4640.24 3869.8 l
-4639.16 3867.08 4638.08 3866.2 4635.74 3866.2 c
-4634.66 3866.2 4633.04 3866.55 4630.16 3867.44 c
-4624.4 3869.42 4620.26 3870.16 4616.12 3870.16 c
-4599.74 3870.16 4588 3858.99 4588 3843.86 c
-4588 3831.98 4595.34 3823.7 4613.42 3815.96 c
-4625.84 3810.56 4631 3806.06 4631 3800.3 c
-4631 3793.28 4625.48 3788.48 4617.2 3788.48 c
-4604.6 3788.48 4596.32 3796.62 4592.54 3812.36 c
-4587.5 3812.36 l
-4587.5 3782.66 l
-4592 3782.66 l
-4593.98 3786.44 4595.06 3787.7 4596.68 3787.7 c
-4597.58 3787.7 4599.02 3787.34 4600.82 3786.62 c
-4606.04 3784.46 4615.22 3782.48 4620.26 3782.48 c
-4636.64 3782.48 4648 3793.64 4648 3809.84 c
-4648 3822.62 4641.15 3830.54 4623.14 3837.92 c
-4610.9 3843.14 4606 3847.64 4606 3853.76 c
-4606 3859.7 4610.98 3864.16 4617.74 3864.16 c
-4622.6 3864.16 4627.28 3862.19 4631.24 3858.44 c
-4635.02 3854.84 4637 3851.42 4639.7 3843.68 c
-h
-4653.02 3785 m
-f*
-4724.36 3807.5 m
-4716.98 3798.68 4711.58 3795.48 4703.84 3795.48 c
-4697 3795.48 4691.6 3798.53 4688 3804.62 c
-4684.58 3810.36 4683.14 3816.45 4682.42 3829 c
-4727.78 3829 l
-4726.7 3843.99 4724 3852.3 4718.42 3859.34 c
-4712.66 3866.36 4704.2 3870.16 4694.12 3870.16 c
-4671.62 3870.16 4656.5 3852.33 4656.5 3826.04 c
-4656.5 3799.76 4671.26 3782.48 4693.58 3782.48 c
-4708.16 3782.48 4716.98 3788.06 4728.68 3804.98 c
-h
-4681.52 3836 m
-4682.06 3857.42 4685.3 3864.16 4694.12 3864.16 c
-4699.34 3864.16 4702.58 3861.42 4704.02 3856.1 c
-4704.92 3852.68 4705.28 3847.64 4705.64 3838.46 c
-4705.64 3836 l
-h
-4731.92 3785 m
-f*
-4778 3785 m
-f*
-4881.94 3907 m
-4779.88 3907 l
-4779.88 3902 l
-4792.3 3901.29 4796 3898.63 4796 3889.4 c
-4796 3802.28 l
-4796 3792.92 4793.44 3790.94 4779.88 3789.5 c
-4779.88 3785 l
-4844.68 3785 l
-4844.68 3790 l
-4828.12 3790.69 4825 3792.77 4825 3802.28 c
-4825 3844.22 l
-4843.28 3843.86 4849.91 3837.2 4852.42 3816.32 c
-4856.92 3816.32 l
-4856.92 3877.16 l
-4852.42 3877.16 l
-4849.19 3856.64 4842.92 3850.34 4825 3850.34 c
-4825 3892.1 l
-4825 3898.76 4827.32 3901 4836.4 3901 c
-4853.14 3901 4863.58 3897.8 4869.16 3891.2 c
-4873.12 3886.7 4875.1 3881.84 4877.62 3870.5 c
-4881.94 3870.5 l
-h
-4886.98 3785 m
-f*
-4926.28 3868 m
-4892.22 3868 l
-4892.22 3863.66 l
-4899.96 3862.58 4902 3860.24 4902 3853.04 c
-4902 3800.12 l
-4902 3792.74 4900.19 3790.76 4892.22 3789.32 c
-4892.22 3785 l
-4940.1 3785 l
-4940.1 3789.32 l
-4929.12 3790.04 4927 3792.38 4927 3803.54 c
-4927 3837.56 l
-4927 3846.92 4932.02 3854.66 4937.94 3854.66 c
-4939.38 3854.66 4941 3853.4 4942.98 3850.52 c
-4946.4 3845.66 4949.1 3844.04 4953.78 3844.04 c
-4960.44 3844.04 4965.12 3849.08 4965.12 3855.92 c
-4965.12 3864.2 4959 3870.16 4950.54 3870.16 c
-4941.55 3870.16 4934.73 3865.47 4926.28 3853.22 c
-h
-4966.92 3785 m
-f*
-5053.14 3796.52 m
-5051.34 3794.72 l
-5050.8 3794.18 5050.26 3794 5049.36 3794 c
-5046.84 3794 5046 3795.44 5046 3798.5 c
-5046 3845.48 l
-5046 3860.78 5032.16 3870.16 5009.94 3870.16 c
-4989.6 3870.16 4975.92 3860.97 4975.92 3847.46 c
-4975.92 3839.9 4980.24 3835.58 4987.62 3835.58 c
-4994.82 3835.58 4999.86 3839.9 4999.86 3846.02 c
-4999.86 3848.54 4998.96 3850.88 4996.62 3853.76 c
-4995 3855.56 4994.46 3856.64 4994.46 3857.72 c
-4994.46 3861.5 4999.32 3864.16 5005.8 3864.16 c
-5016.42 3864.16 5021 3859.37 5021 3848.54 c
-5021 3835.4 l
-4999.89 3828.92 4991.41 3825.68 4984.56 3821.18 c
-4976.46 3815.78 4973 3809.48 4973 3801.56 c
-4973 3790.58 4981.07 3782.48 4992.3 3782.48 c
-5002.74 3782.48 5011.02 3786.08 5020.92 3795.08 c
-5022.9 3785.9 5026.86 3782.48 5035.68 3782.48 c
-5043.42 3782.48 5049 3785.36 5055.84 3792.74 c
-h
-5021 3803 m
-5016.04 3797.42 5012.37 3795.26 5007.96 3795.26 c
-5002.56 3795.26 4999 3800.12 4999 3807.32 c
-4999 3817.76 5006.57 3825.14 5021 3829.1 c
-h
-5058 3785 m
-f*
-5095.46 3868 m
-5060.73 3868 l
-5060.73 3863.66 l
-5068.65 3862.58 5071 3860.42 5071 3853.04 c
-5071 3800.12 l
-5071 3792.74 5068.95 3790.76 5060.73 3789.32 c
-5060.73 3785 l
-5103.93 3785 l
-5103.93 3789.32 l
-5097.63 3790.22 5096 3792.74 5096 3799.58 c
-5096 3847.64 l
-5096 3848.54 5098.51 3851.78 5100.51 3853.76 c
-5104.29 3856.64 5107.53 3858.16 5110.77 3858.16 c
-5117.79 3858.16 5121 3854 5121 3843.14 c
-5121 3799.58 l
-5121 3792.2 5118.9 3789.86 5111.85 3789.32 c
-5111.85 3785 l
-5153.97 3785 l
-5153.97 3789.32 l
-5147.67 3790.04 5146 3792.74 5146 3799.58 c
-5146 3847.64 l
-5146 3848.54 5148.43 3851.6 5150.37 3853.58 c
-5154.33 3856.64 5157.57 3858.16 5160.81 3858.16 c
-5167.65 3858.16 5170 3853.82 5170 3843.14 c
-5170 3799.58 l
-5170 3792.02 5168.1 3789.86 5161.53 3789.32 c
-5161.53 3785 l
-5204.37 3785 l
-5204.37 3789 l
-5197.35 3789.37 5195 3791.6 5195 3799.58 c
-5195 3844.76 l
-5195 3860.24 5185.6 3870.16 5171.07 3870.16 c
-5160.81 3870.16 5153.97 3866.01 5144.61 3854.48 c
-5139.21 3865.82 5132.91 3870.16 5121.57 3870.16 c
-5110.2 3870.16 5102.21 3865.29 5095.46 3854.48 c
-h
-5207.94 3785 m
-f*
-5280.36 3807.5 m
-5272.98 3798.68 5267.58 3795.48 5259.84 3795.48 c
-5253 3795.48 5247.6 3798.53 5244 3804.62 c
-5240.58 3810.36 5239.14 3816.45 5238.42 3829 c
-5283.78 3829 l
-5282.7 3843.99 5280 3852.3 5274.42 3859.34 c
-5268.66 3866.36 5260.2 3870.16 5250.12 3870.16 c
-5227.62 3870.16 5212.5 3852.33 5212.5 3826.04 c
-5212.5 3799.76 5227.26 3782.48 5249.58 3782.48 c
-5264.16 3782.48 5272.98 3788.06 5284.68 3804.98 c
-h
-5237.52 3836 m
-5238.06 3857.42 5241.3 3864.16 5250.12 3864.16 c
-5255.34 3864.16 5258.58 3861.42 5260.02 3856.1 c
-5260.92 3852.68 5261.28 3847.64 5261.64 3838.46 c
-5261.64 3836 l
-h
-5287.92 3785 m
-f*
-1 i
-4372.55 3749.75 914.4 15.5999 re
-f
-0.2 i
-1924.26 1536.36 m
-1913.64 1525.2 1907.88 1520.88 1899.06 1517.46 c
-1893.84 1515.3 1887.9 1514.58 1882.86 1514.58 c
-1870.98 1514.58 1859.64 1520.74 1854.42 1529.88 c
-1849.2 1539.42 1847 1552.2 1847 1570.38 c
-1847 1607.64 1858.23 1627.7 1879.8 1627.7 c
-1888.26 1627.7 1896 1624.38 1903.74 1617.36 c
-1911.48 1610.52 1915.62 1604.4 1921.92 1590.72 c
-1926.42 1590.72 l
-1926.42 1633.16 l
-1921.56 1633.16 l
-1918.86 1626.43 1917.06 1624.56 1913.64 1624.56 c
-1911.84 1624.56 1909.5 1625.28 1905.36 1627.08 c
-1894.92 1631.4 1886.1 1633.7 1877.46 1633.7 c
-1841.64 1633.7 1815 1605.84 1815 1568.76 c
-1815 1531.68 1841.21 1505.58 1878.54 1505.58 c
-1899.24 1505.58 1911.48 1511.88 1929.66 1531.86 c
-h
-1935.96 1509 m
-f*
-1999.18 1506.66 m
-2006.78 1509.36 2011.02 1510.08 2022.5 1511.34 c
-2033.66 1512.6 l
-2033.66 1517 l
-2025.74 1517.35 2024 1519.63 2024 1527.18 c
-2024 1592 l
-1987.4 1592 l
-1987.4 1587.66 l
-1996.4 1586.94 1999 1584.78 1999 1577.04 c
-1999 1526.1 l
-1992.88 1520.16 1989.18 1518.48 1983.8 1518.48 c
-1976.42 1518.48 1974 1522 1974 1530.96 c
-1974 1592 l
-1939.88 1592 l
-1939.88 1587.66 l
-1947.26 1586.22 1949 1584.6 1949 1577.04 c
-1949 1531.68 l
-1949 1515.84 1957.89 1506.48 1972.64 1506.48 c
-1982.16 1506.48 1988.56 1509.36 1999.18 1518.36 c
-h
-2037.08 1509 m
-f*
-2075.28 1592 m
-2041.22 1592 l
-2041.22 1587.66 l
-2048.96 1586.58 2051 1584.24 2051 1577.04 c
-2051 1524.12 l
-2051 1516.74 2049.19 1514.76 2041.22 1513.32 c
-2041.22 1509 l
-2089.1 1509 l
-2089.1 1513.32 l
-2078.12 1514.04 2076 1516.38 2076 1527.54 c
-2076 1561.56 l
-2076 1570.92 2081.02 1578.66 2086.94 1578.66 c
-2088.38 1578.66 2090 1577.4 2091.98 1574.52 c
-2095.4 1569.66 2098.1 1568.04 2102.78 1568.04 c
-2109.44 1568.04 2114.12 1573.08 2114.12 1579.92 c
-2114.12 1588.2 2108 1594.16 2099.54 1594.16 c
-2090.55 1594.16 2083.73 1589.47 2075.28 1577.22 c
-h
-2115.92 1509 m
-f*
-2156.28 1592 m
-2122.22 1592 l
-2122.22 1587.66 l
-2129.96 1586.58 2132 1584.24 2132 1577.04 c
-2132 1524.12 l
-2132 1516.74 2130.19 1514.76 2122.22 1513.32 c
-2122.22 1509 l
-2170.1 1509 l
-2170.1 1513.32 l
-2159.12 1514.04 2157 1516.38 2157 1527.54 c
-2157 1561.56 l
-2157 1570.92 2162.02 1578.66 2167.94 1578.66 c
-2169.38 1578.66 2171 1577.4 2172.98 1574.52 c
-2176.4 1569.66 2179.1 1568.04 2183.78 1568.04 c
-2190.44 1568.04 2195.12 1573.08 2195.12 1579.92 c
-2195.12 1588.2 2189 1594.16 2180.54 1594.16 c
-2171.55 1594.16 2164.73 1589.47 2156.28 1577.22 c
-h
-2196.92 1509 m
-f*
-2268.36 1531.5 m
-2260.98 1522.68 2255.58 1519.48 2247.84 1519.48 c
-2241 1519.48 2235.6 1522.53 2232 1528.62 c
-2228.58 1534.36 2227.14 1540.45 2226.42 1553 c
-2271.78 1553 l
-2270.7 1567.99 2268 1576.3 2262.42 1583.34 c
-2256.66 1590.36 2248.2 1594.16 2238.12 1594.16 c
-2215.62 1594.16 2200.5 1576.33 2200.5 1550.04 c
-2200.5 1523.76 2215.26 1506.48 2237.58 1506.48 c
-2252.16 1506.48 2260.98 1512.06 2272.68 1528.98 c
-h
-2225.52 1560 m
-2226.06 1581.42 2229.3 1588.16 2238.12 1588.16 c
-2243.34 1588.16 2246.58 1585.42 2248.02 1580.1 c
-2248.92 1576.68 2249.28 1571.64 2249.64 1562.46 c
-2249.64 1560 l
-h
-2275.92 1509 m
-f*
-2313.82 1592 m
-2279.78 1592 l
-2279.78 1587.66 l
-2287.7 1586.4 2289 1584.6 2289 1577.04 c
-2289 1524.12 l
-2289 1516.56 2287.61 1514.94 2279.78 1513.32 c
-2279.78 1509 l
-2323.16 1509 l
-2323.16 1513.32 l
-2316.5 1514.22 2314 1516.92 2314 1523.58 c
-2314 1571.64 l
-2314 1572.36 2315.4 1574.16 2317.4 1575.96 c
-2321.36 1579.92 2325.68 1582.16 2330 1582.16 c
-2336.12 1582.16 2339 1577.27 2339 1567.14 c
-2339 1523.58 l
-2339 1516.92 2336.71 1514.04 2330.72 1513.32 c
-2330.72 1509 l
-2373.02 1509 l
-2373.02 1513.32 l
-2366 1513.86 2364 1516.02 2364 1523.58 c
-2364 1568.76 l
-2364 1584.24 2354.54 1594.16 2339.9 1594.16 c
-2328.96 1594.16 2320.57 1589.11 2313.82 1578.48 c
-h
-2376.08 1509 m
-f*
-2430.9 1592 m
-2414 1592 l
-2414 1622.4 l
-2409.48 1622.4 l
-2398.5 1606.92 2391.3 1598.82 2379.6 1588.92 c
-2379.6 1584 l
-2389 1584 l
-2389 1525.74 l
-2389 1514.04 2396.73 1506.84 2409.12 1506.84 c
-2421.18 1506.84 2428.38 1512.24 2435.76 1527 c
-2431.26 1528.98 l
-2427.66 1522.14 2424.78 1519.84 2421 1519.84 c
-2415.96 1519.84 2414 1522.83 2414 1529.88 c
-2414 1584 l
-2430.9 1584 l
-h
-2435.94 1509 m
-f*
-2481 1509 m
-f*
-2585.94 1631 m
-2483.88 1631 l
-2483.88 1626 l
-2496.3 1625.29 2500 1622.63 2500 1613.4 c
-2500 1526.28 l
-2500 1516.92 2497.44 1514.94 2483.88 1513.5 c
-2483.88 1509 l
-2548.68 1509 l
-2548.68 1514 l
-2532.12 1514.69 2529 1516.77 2529 1526.28 c
-2529 1568.22 l
-2547.28 1567.86 2553.91 1561.2 2556.42 1540.32 c
-2560.92 1540.32 l
-2560.92 1601.16 l
-2556.42 1601.16 l
-2553.19 1580.64 2546.92 1574.34 2529 1574.34 c
-2529 1616.1 l
-2529 1622.76 2531.32 1625 2540.4 1625 c
-2557.14 1625 2567.58 1621.8 2573.16 1615.2 c
-2577.12 1610.7 2579.1 1605.84 2581.62 1594.5 c
-2585.94 1594.5 l
-h
-2590.98 1509 m
-f*
-2630.28 1592 m
-2596.22 1592 l
-2596.22 1587.66 l
-2603.96 1586.58 2606 1584.24 2606 1577.04 c
-2606 1524.12 l
-2606 1516.74 2604.19 1514.76 2596.22 1513.32 c
-2596.22 1509 l
-2644.1 1509 l
-2644.1 1513.32 l
-2633.12 1514.04 2631 1516.38 2631 1527.54 c
-2631 1561.56 l
-2631 1570.92 2636.02 1578.66 2641.94 1578.66 c
-2643.38 1578.66 2645 1577.4 2646.98 1574.52 c
-2650.4 1569.66 2653.1 1568.04 2657.78 1568.04 c
-2664.44 1568.04 2669.12 1573.08 2669.12 1579.92 c
-2669.12 1588.2 2663 1594.16 2654.54 1594.16 c
-2645.55 1594.16 2638.73 1589.47 2630.28 1577.22 c
-h
-2670.92 1509 m
-f*
-2756.14 1520.52 m
-2754.34 1518.72 l
-2753.8 1518.18 2753.26 1518 2752.36 1518 c
-2749.84 1518 2749 1519.44 2749 1522.5 c
-2749 1569.48 l
-2749 1584.78 2735.16 1594.16 2712.94 1594.16 c
-2692.6 1594.16 2678.92 1584.97 2678.92 1571.46 c
-2678.92 1563.9 2683.24 1559.58 2690.62 1559.58 c
-2697.82 1559.58 2702.86 1563.9 2702.86 1570.02 c
-2702.86 1572.54 2701.96 1574.88 2699.62 1577.76 c
-2698 1579.56 2697.46 1580.64 2697.46 1581.72 c
-2697.46 1585.5 2702.32 1588.16 2708.8 1588.16 c
-2719.42 1588.16 2724 1583.37 2724 1572.54 c
-2724 1559.4 l
-2702.89 1552.92 2694.41 1549.68 2687.56 1545.18 c
-2679.46 1539.78 2676 1533.48 2676 1525.56 c
-2676 1514.58 2684.07 1506.48 2695.3 1506.48 c
-2705.74 1506.48 2714.02 1510.08 2723.92 1519.08 c
-2725.9 1509.9 2729.86 1506.48 2738.68 1506.48 c
-2746.42 1506.48 2752 1509.36 2758.84 1516.74 c
-h
-2724 1527 m
-2719.04 1521.42 2715.37 1519.26 2710.96 1519.26 c
-2705.56 1519.26 2702 1524.12 2702 1531.32 c
-2702 1541.76 2709.57 1549.14 2724 1553.1 c
-h
-2761 1509 m
-f*
-2798.46 1592 m
-2763.73 1592 l
-2763.73 1587.66 l
-2771.65 1586.58 2774 1584.42 2774 1577.04 c
-2774 1524.12 l
-2774 1516.74 2771.95 1514.76 2763.73 1513.32 c
-2763.73 1509 l
-2806.93 1509 l
-2806.93 1513.32 l
-2800.63 1514.22 2799 1516.74 2799 1523.58 c
-2799 1571.64 l
-2799 1572.54 2801.51 1575.78 2803.51 1577.76 c
-2807.29 1580.64 2810.53 1582.16 2813.77 1582.16 c
-2820.79 1582.16 2824 1578 2824 1567.14 c
-2824 1523.58 l
-2824 1516.2 2821.9 1513.86 2814.85 1513.32 c
-2814.85 1509 l
-2856.97 1509 l
-2856.97 1513.32 l
-2850.67 1514.04 2849 1516.74 2849 1523.58 c
-2849 1571.64 l
-2849 1572.54 2851.43 1575.6 2853.37 1577.58 c
-2857.33 1580.64 2860.57 1582.16 2863.81 1582.16 c
-2870.65 1582.16 2873 1577.82 2873 1567.14 c
-2873 1523.58 l
-2873 1516.02 2871.1 1513.86 2864.53 1513.32 c
-2864.53 1509 l
-2907.37 1509 l
-2907.37 1513 l
-2900.35 1513.37 2898 1515.6 2898 1523.58 c
-2898 1568.76 l
-2898 1584.24 2888.6 1594.16 2874.07 1594.16 c
-2863.81 1594.16 2856.97 1590.01 2847.61 1578.48 c
-2842.21 1589.82 2835.91 1594.16 2824.57 1594.16 c
-2813.2 1594.16 2805.21 1589.29 2798.46 1578.48 c
-h
-2910.94 1509 m
-f*
-2983.36 1531.5 m
-2975.98 1522.68 2970.58 1519.48 2962.84 1519.48 c
-2956 1519.48 2950.6 1522.53 2947 1528.62 c
-2943.58 1534.36 2942.14 1540.45 2941.42 1553 c
-2986.78 1553 l
-2985.7 1567.99 2983 1576.3 2977.42 1583.34 c
-2971.66 1590.36 2963.2 1594.16 2953.12 1594.16 c
-2930.62 1594.16 2915.5 1576.33 2915.5 1550.04 c
-2915.5 1523.76 2930.26 1506.48 2952.58 1506.48 c
-2967.16 1506.48 2975.98 1512.06 2987.68 1528.98 c
-h
-2940.52 1560 m
-2941.06 1581.42 2944.3 1588.16 2953.12 1588.16 c
-2958.34 1588.16 2961.58 1585.42 2963.02 1580.1 c
-2963.92 1576.68 2964.28 1571.64 2964.64 1562.46 c
-2964.64 1560 l
-h
-2990.92 1509 m
-f*
-1 i
-1805.75 1474.55 1184.4 15.5999 re
-f
-1 g
-2414.15 1700.15 m
-2577.35 1853.75 l
-2495.75 1853.75 l
-2495.75 2004.95 l
-2330.15 2004.95 l
-2330.15 1853.75 l
-2247.35 1853.75 l
-f*
-0 g
-2414.15 1700.15 m
-2577.35 1853.75 l
-2495.75 1853.75 l
-2495.75 2004.95 l
-2330.15 2004.95 l
-2330.15 1853.75 l
-2247.35 1853.75 l
-2414.15 1700.15 l
-2414.15 1713.35 l
-2272.55 1842.95 l
-2339.75 1842.95 l
-2339.75 1994.15 l
-2486.15 1994.15 l
-2486.15 1842.95 l
-2552.15 1842.95 l
-2414.15 1713.35 l
-2414.15 1700.15 l
-f*
-0.201248 i
-4490.33 1642 m
-4376.22 1642 l
-4376.22 1637 l
-4390.11 1636.2 4394 1633.18 4394 1622.72 c
-4394 1525.32 l
-4394 1514.85 4391.17 1512.64 4376.22 1511.03 c
-4376.22 1506 l
-4448.67 1506 l
-4448.67 1511 l
-4430.15 1511.81 4427 1514.23 4427 1525.32 c
-4427 1572.21 l
-4447.22 1571.81 4454.55 1564.36 4457.32 1541.02 c
-4462.35 1541.02 l
-4462.35 1609.04 l
-4457.32 1609.04 l
-4453.76 1586.1 4446.82 1579.05 4427 1579.05 c
-4427 1625.74 l
-4427 1633.19 4429.52 1635 4439.41 1635 c
-4458.13 1635 4469.8 1631.64 4476.04 1624.74 c
-4480.47 1619.71 4482.68 1614.27 4485.5 1601.59 c
-4490.33 1601.59 l
-h
-4495.96 1506 m
-f*
-4539.19 1599 m
-4500.84 1599 l
-4500.84 1593.95 l
-4509.49 1592.74 4512 1590.12 4512 1582.07 c
-4512 1522.9 l
-4512 1514.65 4509.93 1512.44 4500.84 1510.83 c
-4500.84 1506 l
-4554.37 1506 l
-4554.37 1510.83 l
-4542.09 1511.63 4540 1514.25 4540 1526.73 c
-4540 1564.76 l
-4540 1575.23 4545.49 1583.88 4551.95 1583.88 c
-4553.56 1583.88 4555.37 1582.47 4557.59 1579.25 c
-4561.41 1573.82 4564.43 1572.01 4569.66 1572.01 c
-4577.11 1572.01 4582.34 1577.64 4582.34 1585.29 c
-4582.34 1594.55 4575.5 1601.41 4566.04 1601.41 c
-4556.1 1601.41 4548.54 1596.12 4539.19 1582.27 c
-h
-4584.35 1506 m
-f*
-4679.19 1518.88 m
-4677.18 1516.87 l
-4676.57 1516.26 4675.97 1516.06 4674.96 1516.06 c
-4672.15 1516.06 4671 1517.67 4671 1521.09 c
-4671 1573.62 l
-4671 1590.73 4655.6 1601.42 4630.89 1601.42 c
-4608.15 1601.42 4592.85 1591.06 4592.85 1575.83 c
-4592.85 1567.38 4597.69 1562.55 4605.94 1562.55 c
-4613.99 1562.55 4619.62 1567.38 4619.62 1574.22 c
-4619.62 1577.04 4618.61 1579.66 4616 1582.88 c
-4614.19 1584.89 4613.58 1586.1 4613.58 1587.3 c
-4613.58 1591.53 4619.02 1594.42 4626.26 1594.42 c
-4638.14 1594.42 4643.86 1589.08 4643.86 1577.04 c
-4643.86 1562.35 l
-4619.91 1555.1 4610.29 1551.48 4602.51 1546.45 c
-4593.46 1540.41 4589 1533.37 4589 1524.52 c
-4589 1512.24 4598.27 1503.18 4611.17 1503.18 c
-4622.84 1503.18 4632.1 1507.21 4643.17 1517.27 c
-4645.38 1507.01 4649.81 1503.18 4659.67 1503.18 c
-4668.32 1503.18 4674.56 1506.4 4682.21 1514.65 c
-h
-4643 1526.13 m
-4637.55 1519.89 4633.52 1517.47 4628.68 1517.47 c
-4622.64 1517.47 4618 1522.91 4618 1530.96 c
-4618 1542.63 4626.61 1550.88 4643 1555.31 c
-h
-4684.62 1506 m
-f*
-4725.4 1599 m
-4686.7 1599 l
-4686.7 1593.95 l
-4695.55 1592.74 4698 1590.32 4698 1582.07 c
-4698 1522.9 l
-4698 1514.65 4695.74 1512.44 4686.7 1510.83 c
-4686.7 1506 l
-4735 1506 l
-4735 1510.83 l
-4727.95 1511.84 4726 1514.65 4726 1522.3 c
-4726 1576.03 l
-4726 1577.04 4728.87 1580.66 4731.18 1582.88 c
-4735.4 1586.1 4739.02 1588.42 4742.65 1588.42 c
-4750.5 1588.42 4754 1583.59 4754 1571 c
-4754 1522.3 l
-4754 1514.05 4751.68 1511.43 4743.85 1510.83 c
-4743.85 1506 l
-4790.95 1506 l
-4790.95 1510.83 l
-4783.9 1511.64 4782 1514.65 4782 1522.3 c
-4782 1576.03 l
-4782 1577.04 4784.73 1580.46 4786.92 1582.68 c
-4791.35 1586.1 4794.97 1588.42 4798.59 1588.42 c
-4806.24 1588.42 4809 1583.38 4809 1571 c
-4809 1522.3 l
-4809 1513.85 4806.85 1511.43 4799.4 1510.83 c
-4799.4 1506 l
-4847.3 1506 l
-4847.3 1511 l
-4839.45 1511.4 4837 1513.78 4837 1522.3 c
-4837 1572.81 l
-4837 1590.12 4826.43 1601.42 4810.07 1601.42 c
-4798.59 1601.42 4790.95 1596.73 4780.48 1583.68 c
-4774.44 1596.36 4767.4 1601.42 4754.72 1601.42 c
-4741.95 1601.42 4732.98 1595.91 4725.4 1583.68 c
-h
-4850.64 1506 m
-f*
-4930.9 1531.16 m
-4922.65 1521.29 4916.61 1517.18 4907.96 1517.18 c
-4900.31 1517.18 4894.27 1520.77 4890.25 1527.94 c
-4886.43 1534.54 4884.82 1541.56 4884.01 1556 c
-4934.73 1556 l
-4933.52 1572.36 4930.5 1581.43 4924.26 1589.12 c
-4917.82 1596.96 4908.36 1601.42 4897.09 1601.42 c
-4871.94 1601.42 4855.03 1581.4 4855.03 1551.88 c
-4855.03 1522.5 4871.53 1503.18 4896.49 1503.18 c
-4912.79 1503.18 4922.65 1509.42 4935.73 1528.34 c
-h
-4883 1563 m
-4883.61 1586.96 4887.23 1594.42 4897.09 1594.42 c
-4902.93 1594.42 4906.55 1591.38 4908.16 1585.49 c
-4909.17 1581.67 4909.57 1576.03 4909.97 1565.77 c
-4909.97 1563 l
-h
-4939.35 1506 m
-f*
-5036.16 1601.59 m
-5036.16 1645.22 l
-5030.37 1645.22 l
-5028.96 1639.82 5027.55 1638.42 5023.93 1638.42 c
-5022.12 1638.42 5019.7 1639.03 5015.47 1640.43 c
-5006.22 1643.86 4999.78 1645.02 4991.93 1645.02 c
-4964.56 1645.02 4948 1629.54 4948 1604.01 c
-4948 1598.98 4948.75 1594.75 4950.07 1590.73 c
-4954.29 1580.06 4965.16 1570.6 4982.27 1562.35 c
-4995.75 1555.91 l
-5013.46 1547.46 5018 1542.22 5018 1531.56 c
-5018 1517.67 5008.25 1509.18 4992.94 1509.18 c
-4981.26 1509.18 4971.6 1513.89 4963.96 1523.31 c
-4958.12 1530.75 4955.3 1537.6 4951.88 1551.88 c
-4946.04 1551.88 l
-4946.04 1502.18 l
-4951.88 1502.18 l
-4953.09 1507.41 4954.7 1509.02 4957.92 1509.02 c
-4959.53 1509.02 4961.74 1508.42 4966.17 1507.01 c
-4976.03 1503.59 4983.48 1502.18 4992.33 1502.18 c
-5022.12 1502.18 5042 1519.28 5042 1544.64 c
-5042 1559.73 5033.04 1574.83 5020.1 1581.27 c
-4990.52 1595.96 l
-4974.22 1604.01 4970 1608.84 4970 1618.7 c
-4970 1631.18 4978.37 1638.02 4991.93 1638.02 c
-5000.99 1638.02 5009.44 1634.47 5016.68 1627.55 c
-5023.53 1620.51 5026.75 1614.67 5030.77 1601.59 c
-h
-5050.89 1506 m
-f*
-5129.9 1531.16 m
-5121.65 1521.29 5115.61 1517.18 5106.96 1517.18 c
-5099.31 1517.18 5093.27 1520.77 5089.25 1527.94 c
-5085.43 1534.54 5083.82 1541.56 5083.01 1556 c
-5133.73 1556 l
-5132.52 1572.36 5129.5 1581.43 5123.26 1589.12 c
-5116.82 1596.96 5107.36 1601.42 5096.09 1601.42 c
-5070.94 1601.42 5054.03 1581.4 5054.03 1551.88 c
-5054.03 1522.5 5070.53 1503.18 5095.49 1503.18 c
-5111.79 1503.18 5121.65 1509.42 5134.73 1528.34 c
-h
-5082 1563 m
-5082.61 1586.96 5086.23 1594.42 5096.09 1594.42 c
-5101.93 1594.42 5105.55 1591.38 5107.16 1585.49 c
-5108.17 1581.67 5108.57 1576.03 5108.97 1565.77 c
-5108.97 1563 l
-h
-5138.35 1506 m
-f*
-5199.38 1599 m
-5180 1599 l
-5180 1632.79 l
-5175.43 1632.79 l
-5163.16 1615.48 5155.11 1606.42 5142.02 1595.35 c
-5142.02 1590 l
-5152 1590 l
-5152 1524.72 l
-5152 1511.64 5160.84 1503.59 5175.03 1503.59 c
-5188.51 1503.59 5196.56 1509.62 5204.81 1526.12 c
-5199.78 1528.34 l
-5195.76 1520.69 5192.54 1517.59 5188.31 1517.59 c
-5182.68 1517.59 5180 1521.09 5180 1529.34 c
-5180 1590 l
-5199.38 1590 l
-h
-5205.02 1506 m
-f*
-5255.31 1506 m
-f*
-5258.22 1642 m
-5258.22 1637 l
-5272.11 1636.2 5276 1632.98 5276 1622.72 c
-5276 1525.32 l
-5276 1515.06 5272.97 1512.64 5258.22 1511.03 c
-5258.22 1506 l
-5323.02 1506 l
-5357.03 1506 5380 1521.09 5380 1543.83 c
-5380 1553.09 5376.03 1561.14 5368.71 1567.38 c
-5361.66 1573.62 5354.82 1576.44 5340.73 1579.46 c
-5364.08 1586.3 5373 1594.55 5373 1609.84 c
-5373 1630.57 5354.39 1642 5320.41 1642 c
-h
-5308 1575.03 m
-5314.17 1575.03 l
-5334.9 1575.03 5345 1564.36 5345 1542.02 c
-5345 1522.5 5336.73 1513 5320.41 1513 c
-5311.55 1513 5308 1516.26 5308 1524.72 c
-h
-5308 1626.15 m
-5308 1633.39 5310.85 1636 5319 1636 c
-5333.08 1636 5340 1627.35 5340 1608.44 c
-5340 1587.3 5333.23 1581.67 5308 1581.07 c
-h
-5389.23 1506 m
-f*
-1041.33 4883 m
-927.22 4883 l
-927.22 4878 l
-941.106 4877.2 945 4874.18 945 4863.72 c
-945 4766.32 l
-945 4755.85 942.171 4753.64 927.22 4752.03 c
-927.22 4747 l
-999.67 4747 l
-999.67 4752 l
-981.155 4752.81 978 4755.23 978 4766.32 c
-978 4813.21 l
-998.215 4812.81 1005.55 4805.36 1008.32 4782.02 c
-1013.35 4782.02 l
-1013.35 4850.04 l
-1008.32 4850.04 l
-1004.76 4827.1 997.819 4820.05 978 4820.05 c
-978 4866.74 l
-978 4874.19 980.521 4876 990.412 4876 c
-1009.13 4876 1020.8 4872.64 1027.04 4865.74 c
-1031.47 4860.71 1033.68 4855.27 1036.5 4842.59 c
-1041.33 4842.59 l
-h
-1046.96 4747 m
-f*
-1090.19 4840 m
-1051.84 4840 l
-1051.84 4834.95 l
-1060.49 4833.74 1063 4831.12 1063 4823.07 c
-1063 4763.9 l
-1063 4755.65 1060.93 4753.44 1051.84 4751.83 c
-1051.84 4747 l
-1105.37 4747 l
-1105.37 4751.83 l
-1093.09 4752.63 1091 4755.25 1091 4767.73 c
-1091 4805.76 l
-1091 4816.23 1096.49 4824.88 1102.95 4824.88 c
-1104.56 4824.88 1106.37 4823.47 1108.59 4820.25 c
-1112.41 4814.82 1115.43 4813.01 1120.66 4813.01 c
-1128.11 4813.01 1133.34 4818.64 1133.34 4826.29 c
-1133.34 4835.55 1126.5 4842.41 1117.04 4842.41 c
-1107.1 4842.41 1099.54 4837.12 1090.19 4823.27 c
-h
-1135.35 4747 m
-f*
-1230.19 4759.88 m
-1228.18 4757.87 l
-1227.57 4757.26 1226.97 4757.06 1225.96 4757.06 c
-1223.15 4757.06 1222 4758.67 1222 4762.09 c
-1222 4814.62 l
-1222 4831.73 1206.6 4842.42 1181.89 4842.42 c
-1159.15 4842.42 1143.85 4832.06 1143.85 4816.83 c
-1143.85 4808.38 1148.69 4803.55 1156.94 4803.55 c
-1164.99 4803.55 1170.62 4808.38 1170.62 4815.22 c
-1170.62 4818.04 1169.61 4820.66 1167 4823.88 c
-1165.19 4825.89 1164.58 4827.1 1164.58 4828.3 c
-1164.58 4832.53 1170.02 4835.42 1177.26 4835.42 c
-1189.14 4835.42 1194.86 4830.08 1194.86 4818.04 c
-1194.86 4803.35 l
-1170.91 4796.1 1161.29 4792.48 1153.51 4787.45 c
-1144.46 4781.41 1140 4774.37 1140 4765.52 c
-1140 4753.24 1149.27 4744.18 1162.17 4744.18 c
-1173.84 4744.18 1183.1 4748.21 1194.17 4758.27 c
-1196.38 4748.01 1200.81 4744.18 1210.67 4744.18 c
-1219.32 4744.18 1225.56 4747.4 1233.21 4755.65 c
-h
-1194 4767.13 m
-1188.55 4760.89 1184.52 4758.47 1179.68 4758.47 c
-1173.64 4758.47 1169 4763.91 1169 4771.96 c
-1169 4783.63 1177.61 4791.88 1194 4796.31 c
-h
-1235.62 4747 m
-f*
-1277.4 4840 m
-1238.7 4840 l
-1238.7 4834.95 l
-1247.55 4833.74 1250 4831.32 1250 4823.07 c
-1250 4763.9 l
-1250 4755.65 1247.74 4753.44 1238.7 4751.83 c
-1238.7 4747 l
-1287 4747 l
-1287 4751.83 l
-1279.95 4752.84 1278 4755.65 1278 4763.3 c
-1278 4817.03 l
-1278 4818.04 1280.87 4821.66 1283.18 4823.88 c
-1287.4 4827.1 1291.02 4829.42 1294.65 4829.42 c
-1302.5 4829.42 1306 4824.59 1306 4812 c
-1306 4763.3 l
-1306 4755.05 1303.68 4752.43 1295.85 4751.83 c
-1295.85 4747 l
-1342.95 4747 l
-1342.95 4751.83 l
-1335.9 4752.64 1334 4755.65 1334 4763.3 c
-1334 4817.03 l
-1334 4818.04 1336.73 4821.46 1338.92 4823.68 c
-1343.35 4827.1 1346.97 4829.42 1350.59 4829.42 c
-1358.24 4829.42 1361 4824.38 1361 4812 c
-1361 4763.3 l
-1361 4754.85 1358.85 4752.43 1351.4 4751.83 c
-1351.4 4747 l
-1399.3 4747 l
-1399.3 4752 l
-1391.45 4752.4 1389 4754.78 1389 4763.3 c
-1389 4813.81 l
-1389 4831.12 1378.43 4842.42 1362.07 4842.42 c
-1350.59 4842.42 1342.95 4837.73 1332.48 4824.68 c
-1326.44 4837.36 1319.4 4842.42 1306.72 4842.42 c
-1293.95 4842.42 1284.98 4836.91 1277.4 4824.68 c
-h
-1402.64 4747 m
-f*
-1481.9 4772.16 m
-1473.65 4762.29 1467.61 4758.18 1458.96 4758.18 c
-1451.31 4758.18 1445.27 4761.77 1441.25 4768.94 c
-1437.43 4775.54 1435.82 4782.56 1435.01 4797 c
-1485.73 4797 l
-1484.52 4813.36 1481.5 4822.43 1475.26 4830.12 c
-1468.82 4837.96 1459.36 4842.42 1448.09 4842.42 c
-1422.94 4842.42 1406.03 4822.4 1406.03 4792.88 c
-1406.03 4763.5 1422.53 4744.18 1447.49 4744.18 c
-1463.79 4744.18 1473.65 4750.42 1486.73 4769.34 c
-h
-1434 4804 m
-1434.61 4827.96 1438.23 4835.42 1448.09 4835.42 c
-1453.93 4835.42 1457.55 4832.38 1459.16 4826.49 c
-1460.17 4822.67 1460.57 4817.03 1460.97 4806.77 c
-1460.97 4804 l
-h
-1490.35 4747 m
-f*
-1587.16 4842.59 m
-1587.16 4886.22 l
-1581.37 4886.22 l
-1579.96 4880.82 1578.55 4879.42 1574.93 4879.42 c
-1573.12 4879.42 1570.7 4880.03 1566.47 4881.43 c
-1557.22 4884.86 1550.78 4886.02 1542.93 4886.02 c
-1515.56 4886.02 1499 4870.54 1499 4845.01 c
-1499 4839.98 1499.75 4835.75 1501.07 4831.73 c
-1505.29 4821.06 1516.16 4811.6 1533.27 4803.35 c
-1546.75 4796.91 l
-1564.46 4788.46 1569 4783.22 1569 4772.56 c
-1569 4758.67 1559.25 4750.18 1543.94 4750.18 c
-1532.26 4750.18 1522.6 4754.89 1514.96 4764.31 c
-1509.12 4771.75 1506.3 4778.6 1502.88 4792.88 c
-1497.04 4792.88 l
-1497.04 4743.18 l
-1502.88 4743.18 l
-1504.09 4748.41 1505.7 4750.02 1508.92 4750.02 c
-1510.53 4750.02 1512.74 4749.42 1517.17 4748.01 c
-1527.03 4744.59 1534.48 4743.18 1543.33 4743.18 c
-1573.12 4743.18 1593 4760.28 1593 4785.64 c
-1593 4800.73 1584.04 4815.83 1571.1 4822.27 c
-1541.52 4836.96 l
-1525.22 4845.01 1521 4849.84 1521 4859.7 c
-1521 4872.18 1529.37 4879.02 1542.93 4879.02 c
-1551.99 4879.02 1560.44 4875.47 1567.68 4868.55 c
-1574.53 4861.51 1577.75 4855.67 1581.77 4842.59 c
-h
-1601.89 4747 m
-f*
-1681.9 4772.16 m
-1673.65 4762.29 1667.61 4758.18 1658.96 4758.18 c
-1651.31 4758.18 1645.27 4761.77 1641.25 4768.94 c
-1637.43 4775.54 1635.82 4782.56 1635.01 4797 c
-1685.73 4797 l
-1684.52 4813.36 1681.5 4822.43 1675.26 4830.12 c
-1668.82 4837.96 1659.36 4842.42 1648.09 4842.42 c
-1622.94 4842.42 1606.03 4822.4 1606.03 4792.88 c
-1606.03 4763.5 1622.53 4744.18 1647.49 4744.18 c
-1663.79 4744.18 1673.65 4750.42 1686.73 4769.34 c
-h
-1634 4804 m
-1634.61 4827.96 1638.23 4835.42 1648.09 4835.42 c
-1653.93 4835.42 1657.55 4832.38 1659.16 4826.49 c
-1660.17 4822.67 1660.57 4817.03 1660.97 4806.77 c
-1660.97 4804 l
-h
-1690.35 4747 m
-f*
-1750.38 4840 m
-1731 4840 l
-1731 4873.79 l
-1726.43 4873.79 l
-1714.16 4856.48 1706.11 4847.42 1693.02 4836.35 c
-1693.02 4831 l
-1703 4831 l
-1703 4765.72 l
-1703 4752.64 1711.84 4744.59 1726.03 4744.59 c
-1739.51 4744.59 1747.56 4750.62 1755.81 4767.12 c
-1750.78 4769.34 l
-1746.76 4761.69 1743.54 4758.59 1739.31 4758.59 c
-1733.68 4758.59 1731 4762.09 1731 4770.34 c
-1731 4831 l
-1750.38 4831 l
-h
-1756.02 4747 m
-f*
-1807.31 4747 m
-f*
-1944.66 4752.03 m
-1935.81 4752.03 1933.59 4754.85 1922.72 4780 c
-1877.85 4885.82 l
-1872.21 4885.82 l
-1827.53 4775.58 l
-1819.89 4756.66 1817.47 4753.84 1807.81 4752.03 c
-1807.81 4747 l
-1848.66 4747 l
-1848.66 4752.03 l
-1836.79 4752.84 1832.16 4755.05 1832.16 4760.28 c
-1832.16 4762.9 1833.57 4767.53 1838 4778.6 c
-1841.02 4787 l
-1886.3 4787 l
-1893.14 4770.9 1895.56 4763.76 1895.56 4759.28 c
-1895.56 4754.85 1892.94 4753.04 1885.9 4752.63 c
-1879.46 4752.03 l
-1879.46 4747 l
-1944.66 4747 l
-h
-1844.04 4795 m
-1862.95 4843.4 l
-1883.28 4795 l
-h
-1951.3 4747 m
-f*
-1 i
-32 w
-942.95 6694.55 m
-618.95 6336.95 432.95 5816.15 432.95 5268.95 c
-432.95 4305.35 1001.75 3495.35 1751.75 3390.95 c
-S
-954.95 6592.55 m
-921.35 6668.15 l
-844.55 6699.35 l
-1072.55 6822.95 l
-f*
-1682.15 3323.75 m
-1720.55 3398.15 l
-1697.75 3478.55 l
-1936.55 3378.95 l
-f*
-0.564706 g
-4962.95 2235.35 m
-4962.95 2345.75 4871.75 2436.95 4760.15 2436.95 c
-4263.35 2436.95 l
-4151.75 2436.95 4060.55 2345.75 4060.55 2235.35 c
-4060.55 2097.35 l
-4060.55 1986.95 4151.75 1895.75 4263.35 1895.75 c
-4760.15 1895.75 l
-4871.75 1895.75 4962.95 1986.95 4962.95 2097.35 c
-f*
-1 g
-4898.15 2292.95 m
-4898.15 2402.15 4809.35 2490.95 4697.75 2490.95 c
-4206.95 2490.95 l
-4096.55 2490.95 4006.55 2402.15 4006.55 2292.95 c
-4006.55 2158.55 l
-4006.55 2049.35 4095.35 1960.55 4206.95 1960.55 c
-4697.75 1960.55 l
-4809.35 1960.55 4898.15 2049.35 4898.15 2158.55 c
-f*
-8 w
-0 g
-4898.15 2292.95 m
-4898.15 2402.15 4809.35 2490.95 4697.75 2490.95 c
-4206.95 2490.95 l
-4096.55 2490.95 4006.55 2402.15 4006.55 2292.95 c
-4006.55 2158.55 l
-4006.55 2049.35 4095.35 1960.55 4206.95 1960.55 c
-4697.75 1960.55 l
-4809.35 1960.55 4898.15 2049.35 4898.15 2158.55 c
-h
-S
-0.201248 i
-4239.33 2332 m
-4125.22 2332 l
-4125.22 2327 l
-4139.11 2326.2 4143 2323.18 4143 2312.72 c
-4143 2215.32 l
-4143 2204.85 4140.17 2202.64 4125.22 2201.03 c
-4125.22 2196 l
-4197.67 2196 l
-4197.67 2201 l
-4179.15 2201.81 4176 2204.23 4176 2215.32 c
-4176 2262.21 l
-4196.22 2261.81 4203.55 2254.36 4206.32 2231.02 c
-4211.35 2231.02 l
-4211.35 2299.04 l
-4206.32 2299.04 l
-4202.76 2276.1 4195.82 2269.05 4176 2269.05 c
-4176 2315.74 l
-4176 2323.19 4178.52 2325 4188.41 2325 c
-4207.13 2325 4218.8 2321.64 4225.04 2314.74 c
-4229.47 2309.71 4231.68 2304.27 4234.5 2291.59 c
-4239.33 2291.59 l
-h
-4244.96 2196 m
-f*
-4289.19 2289 m
-4250.84 2289 l
-4250.84 2283.95 l
-4259.49 2282.74 4262 2280.12 4262 2272.07 c
-4262 2212.9 l
-4262 2204.65 4259.93 2202.44 4250.84 2200.83 c
-4250.84 2196 l
-4304.37 2196 l
-4304.37 2200.83 l
-4292.09 2201.63 4290 2204.25 4290 2216.73 c
-4290 2254.76 l
-4290 2265.23 4295.49 2273.88 4301.95 2273.88 c
-4303.56 2273.88 4305.37 2272.47 4307.59 2269.25 c
-4311.41 2263.82 4314.43 2262.01 4319.66 2262.01 c
-4327.11 2262.01 4332.34 2267.64 4332.34 2275.29 c
-4332.34 2284.55 4325.5 2291.41 4316.04 2291.41 c
-4306.1 2291.41 4298.54 2286.12 4289.19 2272.27 c
-h
-4334.35 2196 m
-f*
-4429.19 2208.88 m
-4427.18 2206.87 l
-4426.57 2206.26 4425.97 2206.06 4424.96 2206.06 c
-4422.15 2206.06 4421 2207.67 4421 2211.09 c
-4421 2263.62 l
-4421 2280.73 4405.6 2291.42 4380.89 2291.42 c
-4358.15 2291.42 4342.85 2281.06 4342.85 2265.83 c
-4342.85 2257.38 4347.69 2252.55 4355.94 2252.55 c
-4363.99 2252.55 4369.62 2257.38 4369.62 2264.22 c
-4369.62 2267.04 4368.61 2269.66 4366 2272.88 c
-4364.19 2274.89 4363.58 2276.1 4363.58 2277.3 c
-4363.58 2281.53 4369.02 2284.42 4376.26 2284.42 c
-4388.14 2284.42 4393.86 2279.08 4393.86 2267.04 c
-4393.86 2252.35 l
-4369.91 2245.1 4360.29 2241.48 4352.51 2236.45 c
-4343.46 2230.41 4339 2223.37 4339 2214.52 c
-4339 2202.24 4348.27 2193.18 4361.17 2193.18 c
-4372.84 2193.18 4382.1 2197.21 4393.17 2207.27 c
-4395.38 2197.01 4399.81 2193.18 4409.67 2193.18 c
-4418.32 2193.18 4424.56 2196.4 4432.21 2204.65 c
-h
-4393 2216.13 m
-4387.55 2209.89 4383.52 2207.47 4378.68 2207.47 c
-4372.64 2207.47 4368 2212.91 4368 2220.96 c
-4368 2232.63 4376.61 2240.88 4393 2245.31 c
-h
-4434.62 2196 m
-f*
-4476.4 2289 m
-4437.7 2289 l
-4437.7 2283.95 l
-4446.55 2282.74 4449 2280.32 4449 2272.07 c
-4449 2212.9 l
-4449 2204.65 4446.74 2202.44 4437.7 2200.83 c
-4437.7 2196 l
-4486 2196 l
-4486 2200.83 l
-4478.95 2201.84 4477 2204.65 4477 2212.3 c
-4477 2266.03 l
-4477 2267.04 4479.87 2270.66 4482.18 2272.88 c
-4486.4 2276.1 4490.02 2278.42 4493.65 2278.42 c
-4501.5 2278.42 4505 2273.59 4505 2261 c
-4505 2212.3 l
-4505 2204.05 4502.68 2201.43 4494.85 2200.83 c
-4494.85 2196 l
-4541.95 2196 l
-4541.95 2200.83 l
-4534.9 2201.64 4533 2204.65 4533 2212.3 c
-4533 2266.03 l
-4533 2267.04 4535.73 2270.46 4537.92 2272.68 c
-4542.35 2276.1 4545.97 2278.42 4549.59 2278.42 c
-4557.24 2278.42 4560 2273.38 4560 2261 c
-4560 2212.3 l
-4560 2203.85 4557.85 2201.43 4550.4 2200.83 c
-4550.4 2196 l
-4598.3 2196 l
-4598.3 2201 l
-4590.45 2201.4 4588 2203.78 4588 2212.3 c
-4588 2262.81 l
-4588 2280.12 4577.43 2291.42 4561.07 2291.42 c
-4549.59 2291.42 4541.95 2286.73 4531.48 2273.68 c
-4525.44 2286.36 4518.4 2291.42 4505.72 2291.42 c
-4492.95 2291.42 4483.98 2285.91 4476.4 2273.68 c
-h
-4601.64 2196 m
-f*
-4679.9 2221.16 m
-4671.65 2211.29 4665.61 2207.18 4656.96 2207.18 c
-4649.31 2207.18 4643.27 2210.77 4639.25 2217.94 c
-4635.43 2224.54 4633.82 2231.56 4633.01 2246 c
-4683.73 2246 l
-4682.52 2262.36 4679.5 2271.43 4673.26 2279.12 c
-4666.82 2286.96 4657.36 2291.42 4646.09 2291.42 c
-4620.94 2291.42 4604.03 2271.4 4604.03 2241.88 c
-4604.03 2212.5 4620.53 2193.18 4645.49 2193.18 c
-4661.79 2193.18 4671.65 2199.42 4684.73 2218.34 c
-h
-4632 2253 m
-4632.61 2276.96 4636.23 2284.42 4646.09 2284.42 c
-4651.93 2284.42 4655.55 2281.38 4657.16 2275.49 c
-4658.17 2271.67 4658.57 2266.03 4658.97 2255.77 c
-4658.97 2253 l
-h
-4688.35 2196 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -4724 -2196]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-0.564706 g
-3968.15 1929.35 m
-3833.75 1966.55 l
-3929.75 2021.75 l
-3776.15 2031.35 l
-3818.15 2100.95 l
-3670.55 2080.55 l
-3653.75 2152.55 l
-3533.75 2106.95 l
-3458.15 2170.55 l
-3382.55 2106.95 l
-3262.55 2152.55 l
-3244.55 2080.55 l
-3095.75 2100.95 l
-3140.15 2031.35 l
-2986.55 2021.75 l
-3082.55 1966.55 l
-2946.95 1929.35 l
-3082.55 1894.55 l
-2986.55 1838.15 l
-3140.15 1829.75 l
-3095.75 1760.15 l
-3244.55 1779.35 l
-3262.55 1708.55 l
-3382.55 1752.95 l
-3458.15 1689.35 l
-3533.75 1752.95 l
-3653.75 1708.55 l
-3670.55 1779.35 l
-3818.15 1760.15 l
-3776.15 1829.75 l
-3929.75 1838.15 l
-3833.75 1894.55 l
-f*
-1 g
-3908.15 1989.35 m
-3773.75 2026.55 l
-3869.75 2081.75 l
-3716.15 2091.35 l
-3758.15 2160.95 l
-3610.55 2140.55 l
-3593.75 2212.55 l
-3473.75 2166.95 l
-3398.15 2230.55 l
-3322.55 2166.95 l
-3202.55 2212.55 l
-3184.55 2140.55 l
-3035.75 2160.95 l
-3080.15 2091.35 l
-2926.55 2081.75 l
-3022.55 2026.55 l
-2886.95 1989.35 l
-3022.55 1954.55 l
-2926.55 1898.15 l
-3080.15 1889.75 l
-3035.75 1820.15 l
-3184.55 1839.35 l
-3202.55 1768.55 l
-3322.55 1812.95 l
-3398.15 1749.35 l
-3473.75 1812.95 l
-3593.75 1768.55 l
-3610.55 1839.35 l
-3758.15 1820.15 l
-3716.15 1889.75 l
-3869.75 1898.15 l
-3773.75 1954.55 l
-f*
-0 g
-3908.15 1989.35 m
-3773.75 2026.55 l
-3869.75 2081.75 l
-3716.15 2091.35 l
-3758.15 2160.95 l
-3610.55 2140.55 l
-3593.75 2212.55 l
-3473.75 2166.95 l
-3398.15 2230.55 l
-3322.55 2166.95 l
-3202.55 2212.55 l
-3184.55 2140.55 l
-3035.75 2160.95 l
-3080.15 2091.35 l
-2926.55 2081.75 l
-3022.55 2026.55 l
-2886.95 1989.35 l
-3022.55 1954.55 l
-2926.55 1898.15 l
-3080.15 1889.75 l
-3035.75 1820.15 l
-3184.55 1839.35 l
-3202.55 1768.55 l
-3322.55 1812.95 l
-3398.15 1749.35 l
-3473.75 1812.95 l
-3593.75 1768.55 l
-3610.55 1839.35 l
-3758.15 1820.15 l
-3716.15 1889.75 l
-3869.75 1898.15 l
-3773.75 1954.55 l
-3908.15 1989.35 l
-3831.35 1989.35 l
-3722.15 1961.75 l
-3802.55 1914.95 l
-3682.55 1907.75 l
-3719.75 1844.15 l
-3596.15 1862.15 l
-3579.35 1794.95 l
-3470.15 1835.75 l
-3398.15 1775.75 l
-3326.15 1835.75 l
-3215.75 1794.95 l
-3200.15 1862.15 l
-3076.55 1844.15 l
-3114.95 1907.75 l
-2993.75 1914.95 l
-3074.15 1961.75 l
-2964.95 1989.35 l
-3074.15 2018.15 l
-2993.75 2066.15 l
-3114.95 2073.35 l
-3076.55 2135.75 l
-3200.15 2118.95 l
-3215.75 2186.15 l
-3326.15 2144.15 l
-3398.15 2204.15 l
-3470.15 2144.15 l
-3579.35 2186.15 l
-3596.15 2118.95 l
-3719.75 2135.75 l
-3682.55 2073.35 l
-3802.55 2066.15 l
-3722.15 2018.15 l
-3831.35 1989.35 l
-3908.15 1989.35 l
-f*
-0.2 i
-3220.08 2040.76 m
-3200.08 1966.52 l
-3197.52 1957.88 3194.48 1955.64 3184.08 1955 c
-3184.08 1951 l
-3234 1951 l
-3234 1955 l
-3224.72 1955.48 3222.48 1956.76 3222.48 1961.88 c
-3222.48 1963.64 3222.8 1965.4 3223.76 1969.08 c
-3223.92 1969.88 l
-3224.08 1970.68 l
-3243.76 2042.52 l
-3246.16 2050.84 3248.56 2053.08 3256.72 2054.04 c
-3256.72 2058 l
-3222.8 2058 l
-3173.2 1981.24 l
-3164.56 2058 l
-3129.2 2058 l
-3129.2 2054 l
-3139.28 2053.52 3140.72 2052.89 3140.72 2048.44 c
-3140.72 2046.2 3140.08 2043.32 3138.96 2039.16 c
-3121.52 1979.48 l
-3115.12 1958.68 3114 1956.92 3105.36 1955 c
-3105.36 1951 l
-3138.48 1951 l
-3138.48 1955 l
-3128.24 1956.28 3125.68 1958.2 3125.68 1964.76 c
-3125.68 1967.48 3126.48 1971.48 3128.72 1979.48 c
-3144.88 2038.52 l
-3155.6 1949.08 l
-3160.08 1949.08 l
-h
-3252.24 1951 m
-f*
-3321.44 1971.32 m
-3314.88 1962.52 3312.48 1959.76 3309.92 1959.76 c
-3308.64 1959.76 3308 1960.86 3308 1962.52 c
-3308 1966.52 3309.44 1973.08 3313.44 1986.2 c
-3324.8 2023.96 l
-3307.04 2022.84 l
-3304.16 2013.4 l
-3302.72 2021.56 3299.2 2025.08 3292.32 2025.08 c
-3272.64 2025.08 3249 1994.27 3249 1969.24 c
-3249 1957.08 3255.74 1948.92 3265.92 1948.92 c
-3275.68 1948.92 3283.04 1954.68 3292.16 1970.04 c
-3290.24 1963.48 3290 1961.56 3290 1959.32 c
-3290 1953.4 3294.76 1948.76 3300.64 1948.76 c
-3308.16 1948.76 3315.52 1955 3324.8 1968.92 c
-h
-3294.56 2018.2 m
-3298.08 2017.88 3300.56 2015 3300.56 2010.68 c
-3300.56 2001.08 3295.24 1983.32 3288.96 1972.28 c
-3284.64 1964.44 3279.84 1959.92 3275.52 1959.92 c
-3271.36 1959.92 3268 1963.75 3268 1968.92 c
-3268 1977.24 3273.42 1993.24 3280.16 2005.08 c
-3284.96 2013.56 3290.24 2018.52 3294.56 2018.2 c
-h
-3332 1951 m
-f*
-3366.56 2024.92 m
-3350.24 2022.36 3344 2021.4 3335.68 2020.44 c
-3335.68 2016 l
-3342.88 2015.69 3344.32 2015.07 3344.32 2012.12 c
-3344.32 2010.52 3343.04 2004.76 3340.8 1996.44 c
-3324.8 1934.36 l
-3321.76 1923.8 3320.48 1922.84 3312.8 1923 c
-3312.8 1918 l
-3352.64 1918 l
-3352.64 1923 l
-3344.64 1923.14 3342.24 1924.16 3342.24 1927.64 c
-3342.24 1929.88 3343.36 1934.68 3346.4 1945.88 c
-3347.52 1949.72 3347.52 1950.04 3348.16 1952.44 c
-3353.76 1949.56 3355.68 1948.92 3359.04 1948.92 c
-3380.8 1948.92 3403.36 1977.88 3403.36 2005.56 c
-3403.36 2017.4 3396.64 2025.08 3386.08 2025.08 c
-3376.96 2025.08 3369.92 2019.92 3360.48 2006.52 c
-h
-3377.12 2013.56 m
-3381.28 2013.24 3383.68 2009.56 3383.36 2004.44 c
-3382.72 1993.88 3377.6 1978.04 3371.84 1967.64 c
-3366.88 1959 3361.76 1953.92 3356.32 1953.92 c
-3352.8 1953.92 3350.08 1956.75 3350.08 1960.28 c
-3350.08 1963 3351.84 1969.56 3356.16 1984.12 c
-3359.68 1995.8 3361.12 1999.8 3363.52 2003.48 c
-3367.52 2009.72 3372.96 2013.88 3377.12 2013.56 c
-h
-3412 1951 m
-f*
-3447.56 2024.92 m
-3431.24 2022.36 3425 2021.4 3416.68 2020.44 c
-3416.68 2016 l
-3423.88 2015.69 3425.32 2015.07 3425.32 2012.12 c
-3425.32 2010.52 3424.04 2004.76 3421.8 1996.44 c
-3405.8 1934.36 l
-3402.76 1923.8 3401.48 1922.84 3393.8 1923 c
-3393.8 1918 l
-3433.64 1918 l
-3433.64 1923 l
-3425.64 1923.14 3423.24 1924.16 3423.24 1927.64 c
-3423.24 1929.88 3424.36 1934.68 3427.4 1945.88 c
-3428.52 1949.72 3428.52 1950.04 3429.16 1952.44 c
-3434.76 1949.56 3436.68 1948.92 3440.04 1948.92 c
-3461.8 1948.92 3484.36 1977.88 3484.36 2005.56 c
-3484.36 2017.4 3477.64 2025.08 3467.08 2025.08 c
-3457.96 2025.08 3450.92 2019.92 3441.48 2006.52 c
-h
-3458.12 2013.56 m
-3462.28 2013.24 3464.68 2009.56 3464.36 2004.44 c
-3463.72 1993.88 3458.6 1978.04 3452.84 1967.64 c
-3447.88 1959 3442.76 1953.92 3437.32 1953.92 c
-3433.8 1953.92 3431.08 1956.75 3431.08 1960.28 c
-3431.08 1963 3432.84 1969.56 3437.16 1984.12 c
-3440.68 1995.8 3442.12 1999.8 3444.52 2003.48 c
-3448.52 2009.72 3453.96 2013.88 3458.12 2013.56 c
-h
-3493 1951 m
-f*
-3526.56 1973.56 m
-3524.32 1970.36 l
-3520.16 1964.12 3516.48 1960.56 3514.08 1960.56 c
-3512.8 1960.56 3512 1961.77 3512 1963.16 c
-3512 1964.6 3512.62 1968.76 3513.12 1971.48 c
-3527.68 2024.92 l
-3519.22 2023 3508.26 2021.4 3496.04 2020.44 c
-3496.04 2016 l
-3497.44 2016 l
-3502.24 2016 3505.48 2014.44 3505.48 2011.48 c
-3505.48 2010.2 3504.71 2007.8 3503.68 2005.08 c
-3494.4 1970.68 l
-3493.12 1966.04 3493 1961.88 3493 1959.64 c
-3493 1953.56 3497.2 1949.56 3503.36 1949.56 c
-3512.96 1949.56 3518.88 1954.36 3530.08 1971.32 c
-h
-3522.88 2060.4 m
-3517.44 2060.4 3513 2055.46 3513 2050.04 c
-3513 2043.8 3517.26 2039.4 3523.04 2039.4 c
-3529.12 2039.4 3534 2043.86 3534 2049.56 c
-3534 2055.48 3529 2060.4 3522.88 2060.4 c
-h
-3536.48 1951 m
-f*
-3611.36 1972.6 m
-3604.96 1962.68 3602.88 1960.56 3600.16 1960.56 c
-3598.88 1960.56 3598 1961.63 3598 1963.16 c
-3598 1964.76 3598.94 1968.12 3601.92 1977.08 c
-3607.68 1994.52 l
-3610.24 2002.04 3612 2009.08 3612 2012.92 c
-3612 2020.76 3607.78 2025.08 3600.16 2025.08 c
-3594.24 2025.08 3588.48 2022.62 3584.16 2018.36 c
-3578.24 2012.76 3575.2 2008.92 3564.48 1993.08 c
-3574.72 2024.76 l
-3564.48 2022.52 3551.68 2020.92 3542.72 2020.6 c
-3542.72 2015.8 l
-3549.44 2015.65 3551.36 2014.92 3551.36 2012.12 c
-3551.36 2010.2 3549.12 2001.72 3544 1983.64 c
-3540.32 1970.68 3539.2 1966.52 3535.04 1951 c
-3554.4 1951 l
-3561.92 1978.68 3567.68 1992.6 3577.6 2005.56 c
-3580.8 2009.88 3585.76 2013.08 3588.64 2013.08 c
-3590.72 2013.08 3593 2011.63 3593 2010.04 c
-3593 2009.56 3592.54 2008.28 3591.84 2006.68 c
-3583.04 1980.12 l
-3580.48 1972.44 3579 1963.32 3579 1959.16 c
-3579 1953.08 3582.84 1949.56 3589.44 1949.56 c
-3599.04 1949.56 3605.6 1955 3614.88 1970.52 c
-h
-3624.96 1951 m
-f*
-3702.48 2020 m
-3684.72 2020 l
-3679.28 2023.58 3674.48 2025.08 3667.12 2025.08 c
-3647.44 2025.08 3631 2012.05 3631 1995.8 c
-3631 1987.64 3635.35 1981.88 3644.4 1978.2 c
-3631.28 1970.84 3629 1968.6 3629 1962.68 c
-3629 1957.56 3631.89 1954.52 3638.96 1952.12 c
-3629.04 1949.72 3625.84 1948.44 3622 1945.4 c
-3619.44 1943.16 3618 1939.32 3618 1935.48 c
-3618 1925.08 3629.56 1919 3647.76 1919 c
-3670.32 1919 3686 1928.72 3686 1942.52 c
-3686 1952.28 3679.6 1957.56 3662.16 1962.52 c
-3653.68 1964.92 l
-3648.56 1966.36 3645 1968.6 3645 1971 c
-3645 1973.56 3647.68 1976.28 3650 1976.28 c
-3650.8 1976.28 3651.92 1976.24 3653.2 1976.12 c
-3654.96 1975.64 3656.24 1975 3658.16 1975 c
-3665.2 1975 3672.4 1977.09 3678.48 1980.92 c
-3687.76 1986.2 3693 1994.36 3693 2003.96 c
-3693 2006.64 3692.59 2008.32 3691.76 2011 c
-3702.48 2011 l
-h
-3644.4 1950.04 m
-3646.32 1949.88 3658.48 1945.72 3662 1944.12 c
-3666.48 1941.88 3669 1939.16 3669 1935 c
-3669 1927.96 3661.8 1924 3649.36 1924 c
-3638.96 1924 3632 1929.1 3632 1936.44 c
-3632 1939.48 3633.32 1942.2 3636.24 1945.24 c
-3638.32 1947.32 3643.12 1950.2 3644.4 1950.04 c
-h
-3666.8 2020.08 m
-3670.96 2020.08 3674 2016.19 3674 2010.52 c
-3674 2005.08 3672.08 1997.4 3669.36 1991.48 c
-3666 1984.12 3661.84 1980 3656.88 1980 c
-3652.56 1980 3650 1983.52 3650 1989.88 c
-3650 1996.28 3652.79 2006.04 3656.24 2012.12 c
-3659.28 2017.4 3662.64 2020.08 3666.8 2020.08 c
-h
-3706 1951 m
-f*
-1 i
-16 w
-3681.35 1641.35 m
-3749.75 1571.75 3842.15 1533.35 3938.15 1533.35 c
-4139.75 1533.35 4304.15 1702.55 4304.15 1911.35 c
-4304.15 1926.95 4304.15 1942.55 4301.75 1956.95 c
-S
-3759.35 1642.55 m
-3700.55 1625.75 l
-3668.15 1572.95 l
-3603.35 1756.55 l
-f*
-4449.35 3286.55 m
-4382.15 3365.75 4295.75 3410.15 4204.55 3410.15 c
-4095.35 3410.15 3990.95 3345.35 3922.55 3233.75 c
-S
-3892.55 3297.35 m
-3935.75 3251.75 l
-3996.95 3248.15 l
-3867.35 3104.15 l
-f*
-3825.35 2710.55 m
-3833.75 2628.95 3864.95 2553.35 3911.75 2494.55 c
-S
-3844.55 2488.55 m
-3899.75 2516.15 l
-3921.35 2574.95 l
-4019.75 2406.95 l
-f*
-2993.75 3830.15 m
-2837.75 3830.15 2690.15 3794.15 2579.75 3729.35 c
-S
-2595.35 3800.15 m
-2609.75 3740.15 l
-2661.35 3706.55 l
-2476.55 3647.75 l
-f*
-4568.15 3344.15 m
-4443.35 3527.75 4288.55 3671.75 4116.95 3762.95 c
-S
-4185.35 3790.55 m
-4139.75 3748.55 l
-4134.95 3687.35 l
-3993.35 3819.35 l
-f*
-0.279998 i
-550 3530.52 m
-550 3388 l
-550 3372.32 546.055 3368.96 524.919 3367 c
-524.919 3360 l
-617.878 3360 l
-617.878 3367 l
-596.039 3369.8 593 3372.88 593 3392.76 c
-593 3516.52 l
-593 3536.68 597.24 3540.88 617.878 3542.28 c
-617.878 3549 l
-547.319 3549 l
-491.319 3417.12 l
-435.319 3549 l
-364.48 3549 l
-364.48 3542.28 l
-384.92 3540.6 389 3536.96 389 3522.4 c
-389 3389.4 l
-389 3372.6 385.417 3369.24 363.92 3367 c
-363.92 3360 l
-429.439 3360 l
-429.439 3367 l
-406.479 3368.68 400.999 3374 400.999 3394.72 c
-400.999 3526.32 l
-471.719 3360 l
-479.279 3360 l
-h
-624.318 3360 m
-f*
-682 3489 m
-628.48 3489 l
-628.48 3482.36 l
-640.8 3479.84 643 3477.32 643 3465.84 c
-643 3383.52 l
-643 3372.04 641.082 3369.8 628.48 3366.72 c
-628.48 3360 l
-695.4 3360 l
-695.4 3366.72 l
-685.6 3368.12 682 3372.04 682 3382.68 c
-h
-662.92 3553.2 m
-650.32 3553.2 641 3543.8 641 3531.64 c
-641 3519.32 650.154 3510.2 662.36 3510.2 c
-674.68 3510.2 684 3519.39 684 3531.64 c
-684 3543.68 674.569 3553.2 662.92 3553.2 c
-h
-701.839 3360 m
-f*
-797.12 3451.28 m
-797.12 3491.8 l
-791.04 3491.8 l
-789.36 3487.66 787.68 3486.2 784.04 3486.2 c
-782.36 3486.2 779.84 3486.78 775.36 3488.24 c
-766.4 3491.32 759.96 3492.36 753.52 3492.36 c
-728.04 3492.36 710 3475.03 710 3451.56 c
-710 3433.08 721.353 3420.2 749.32 3408.16 c
-768.64 3399.76 776 3392.76 776 3383.8 c
-776 3372.88 767.68 3365.08 755.2 3365.08 c
-735.6 3365.08 722.72 3377.86 716.841 3402.56 c
-709.001 3402.56 l
-709.001 3356.36 l
-716.001 3356.36 l
-719.081 3362.24 720.761 3364.2 723.281 3364.2 c
-724.681 3364.2 726.921 3363.64 729.721 3362.52 c
-737.841 3359.16 752.121 3356.08 759.96 3356.08 c
-785.44 3356.08 803.001 3373.44 803.001 3398.64 c
-803.001 3418.52 792.383 3430.84 764.44 3442.32 c
-745.401 3450.44 738.001 3457.44 738.001 3466.96 c
-738.001 3476.2 745.654 3483.36 756.041 3483.36 c
-763.601 3483.36 770.881 3480.22 777.041 3474.24 c
-782.92 3468.64 786 3463.32 790.2 3451.28 c
-h
-810.919 3360 m
-f*
-906.12 3451.28 m
-906.12 3491.8 l
-900.04 3491.8 l
-898.36 3487.66 896.68 3486.2 893.04 3486.2 c
-891.36 3486.2 888.84 3486.78 884.36 3488.24 c
-875.4 3491.32 868.96 3492.36 862.52 3492.36 c
-837.04 3492.36 819 3475.03 819 3451.56 c
-819 3433.08 830.353 3420.2 858.32 3408.16 c
-877.64 3399.76 885 3392.76 885 3383.8 c
-885 3372.88 876.68 3365.08 864.2 3365.08 c
-844.6 3365.08 831.72 3377.86 825.841 3402.56 c
-818.001 3402.56 l
-818.001 3356.36 l
-825.001 3356.36 l
-828.081 3362.24 829.761 3364.2 832.281 3364.2 c
-833.681 3364.2 835.921 3363.64 838.721 3362.52 c
-846.841 3359.16 861.121 3356.08 868.96 3356.08 c
-894.44 3356.08 912.001 3373.44 912.001 3398.64 c
-912.001 3418.52 901.383 3430.84 873.44 3442.32 c
-854.401 3450.44 847.001 3457.44 847.001 3466.96 c
-847.001 3476.2 854.654 3483.36 865.041 3483.36 c
-872.601 3483.36 879.881 3480.22 886.041 3474.24 c
-891.92 3468.64 895 3463.32 899.2 3451.28 c
-h
-919.919 3360 m
-f*
-978 3489 m
-924.48 3489 l
-924.48 3482.36 l
-936.8 3479.84 939 3477.32 939 3465.84 c
-939 3383.52 l
-939 3372.04 937.082 3369.8 924.48 3366.72 c
-924.48 3360 l
-991.4 3360 l
-991.4 3366.72 l
-981.6 3368.12 978 3372.04 978 3382.68 c
-h
-958.92 3553.2 m
-946.32 3553.2 937 3543.8 937 3531.64 c
-937 3519.32 946.154 3510.2 958.36 3510.2 c
-970.68 3510.2 980 3519.39 980 3531.64 c
-980 3543.68 970.569 3553.2 958.92 3553.2 c
-h
-997.839 3360 m
-f*
-1056.72 3489 m
-1002.88 3489 l
-1002.88 3482.36 l
-1015.2 3480.4 1018 3477.6 1018 3465.84 c
-1018 3383.52 l
-1018 3371.76 1015.72 3369.24 1002.88 3366.72 c
-1002.88 3360 l
-1070.36 3360 l
-1070.36 3366.72 l
-1060 3368.12 1057 3372.32 1057 3382.68 c
-1057 3457.44 l
-1057 3458.56 1058.81 3461.36 1061.4 3464.16 c
-1067.56 3470.32 1074.28 3474.36 1081 3474.36 c
-1090.52 3474.36 1095 3466.58 1095 3450.44 c
-1095 3382.68 l
-1095 3372.32 1091.44 3367.84 1082.12 3366.72 c
-1082.12 3360 l
-1147.92 3360 l
-1147.92 3366.72 l
-1137 3367.56 1134 3370.92 1134 3382.68 c
-1134 3452.96 l
-1134 3477.04 1119.24 3492.36 1096.4 3492.36 c
-1079.75 3492.36 1066.99 3484.55 1056.72 3468.08 c
-h
-1152.68 3360 m
-f*
-1287.96 3471 m
-1287.96 3486 l
-1251.56 3486 l
-1239.24 3490.68 1231.4 3492.36 1220.2 3492.36 c
-1186.88 3492.36 1164 3473.91 1164 3447.36 c
-1164 3437.84 1167.15 3428.6 1173.44 3420.76 c
-1179.6 3414.04 1184.92 3410.4 1198.08 3404.8 c
-1175.96 3397.52 1165.4 3386.6 1165.4 3372.04 c
-1165.4 3360.56 1170.3 3355.52 1187.72 3349.08 c
-1170.08 3346.56 1161 3339.56 1161 3328.08 c
-1161 3311.84 1181.94 3302 1217.12 3302 c
-1263.88 3302 1288 3316.67 1288 3344.6 c
-1288 3366.16 1270.73 3379 1242.32 3379 c
-1224.12 3379 l
-1201.72 3379 1196.12 3380.97 1196.12 3388.84 c
-1196.12 3397.24 1204.24 3403.12 1215.16 3403.12 c
-1240.64 3403.12 1241.48 3403.12 1250.72 3407.04 c
-1267.8 3414.04 1277 3426.36 1277 3444 c
-1277 3455.02 1273.48 3463.28 1265.28 3471 c
-h
-1243.72 3345 m
-1258.84 3345 1266 3340.66 1266 3331.44 c
-1266 3318.56 1250.64 3311 1223 3311 c
-1198.36 3311 1186 3317.53 1186 3330.04 c
-1186 3335.75 1187.86 3338.74 1195.28 3345 c
-h
-1219.92 3483.36 m
-1233.36 3483.36 1239 3473.11 1239 3447.36 c
-1239 3421.04 1233.87 3410.96 1220.2 3410.96 c
-1206.76 3410.96 1202 3421.04 1202 3447.08 c
-1202 3473.4 1206.96 3483.36 1219.92 3483.36 c
-h
-1293 3360 m
-f*
-717.639 3087.56 m
-709.519 3087.56 l
-699.999 3065.72 694.679 3057.04 684.879 3048.08 c
-673.399 3037.72 657.719 3033 635.879 3033 c
-618.8 3033 614 3036.57 614 3048.36 c
-614 3180.52 l
-614 3201.52 617.886 3205.16 642.039 3206.28 c
-642.039 3213 l
-544.32 3213 l
-544.32 3206 l
-563.36 3204.9 568 3200.48 568 3186.4 c
-568 3050.88 l
-568 3036.6 564.42 3033.52 544.32 3031 c
-544.32 3024 l
-706.159 3024 l
-h
-725.759 3024 m
-f*
-783 3153 m
-729.48 3153 l
-729.48 3146.36 l
-741.8 3143.84 744 3141.32 744 3129.84 c
-744 3047.52 l
-744 3036.04 742.082 3033.8 729.48 3030.72 c
-729.48 3024 l
-796.4 3024 l
-796.4 3030.72 l
-786.6 3032.12 783 3036.04 783 3046.68 c
-h
-763.92 3217.2 m
-751.32 3217.2 742 3207.8 742 3195.64 c
-742 3183.32 751.154 3174.2 763.36 3174.2 c
-775.68 3174.2 785 3183.39 785 3195.64 c
-785 3207.68 775.569 3217.2 763.92 3217.2 c
-h
-802.839 3024 m
-f*
-863.72 3153 m
-809.88 3153 l
-809.88 3146.36 l
-822.2 3144.4 825 3141.6 825 3129.84 c
-825 3047.52 l
-825 3035.76 822.717 3033.24 809.88 3030.72 c
-809.88 3024 l
-877.359 3024 l
-877.359 3030.72 l
-867 3032.12 864 3036.32 864 3046.68 c
-864 3121.44 l
-864 3122.56 865.811 3125.36 868.4 3128.16 c
-874.56 3134.32 881.28 3138.36 888 3138.36 c
-897.52 3138.36 902 3130.58 902 3114.44 c
-902 3046.68 l
-902 3036.32 898.437 3031.84 889.12 3030.72 c
-889.12 3024 l
-954.919 3024 l
-954.919 3030.72 l
-943.999 3031.56 941 3034.92 941 3046.68 c
-941 3116.96 l
-941 3141.04 926.238 3156.36 903.399 3156.36 c
-886.75 3156.36 873.987 3148.55 863.72 3132.08 c
-h
-959.679 3024 m
-f*
-1102.64 3153.08 m
-1042.72 3153.08 l
-1042.72 3146.64 l
-1049.44 3145.52 l
-1056.44 3144.68 1059.24 3142.72 1059.24 3139.08 c
-1059.24 3136.56 1056.44 3131.52 1053.36 3128.44 c
-1018 3092.6 l
-1018 3213 l
-965.16 3213 l
-965.16 3206.56 l
-974.68 3205.72 979 3200.96 979 3190.32 c
-979 3047.52 l
-979 3036.6 974.675 3031.56 965.16 3030.72 c
-965.16 3024 l
-1032.08 3024 l
-1032.08 3030.72 l
-1018.92 3032.68 1018 3034.36 1018 3047.52 c
-1018 3079.44 l
-1023.96 3086.16 l
-1050.56 3048.64 l
-1055.6 3041.64 1057.28 3038.28 1057.28 3036.04 c
-1057.28 3032.68 1053.36 3031 1045.52 3030.72 c
-1045.52 3024 l
-1111.04 3024 l
-1111.04 3031 l
-1107.96 3031 1106.56 3031.78 1104.04 3034.92 c
-1049.72 3109.96 l
-1077.72 3139.36 1085 3144.4 1102.64 3146.64 c
-h
-1114.68 3024 m
-f*
-0.24 i
-4919.04 4974 m
-4919.04 5025.84 l
-4911.96 5025.84 l
-4910.28 5019.55 4908.6 5017.92 4904.28 5017.92 c
-4902.12 5017.92 4899.24 5018.64 4894.2 5020.32 c
-4883.16 5024.4 4875.48 5025.6 4866.12 5025.6 c
-4833.48 5025.6 4814 5007.21 4814 4976.88 c
-4814 4970.88 4814.8 4965.84 4816.2 4961.04 c
-4821.24 4948.32 4834.2 4937.04 4854.6 4927.2 c
-4870.68 4919.52 l
-4891.8 4909.44 4897 4903.2 4897 4890.48 c
-4897 4873.92 4885.46 4863.44 4867.32 4863.44 c
-4853.4 4863.44 4841.88 4869.17 4832.76 4880.64 c
-4825.8 4889.52 4822.44 4897.68 4818.36 4914.72 c
-4811.4 4914.72 l
-4811.4 4855.44 l
-4818.36 4855.44 l
-4819.8 4861.68 4821.72 4863.6 4825.56 4863.6 c
-4827.48 4863.6 4830.12 4862.88 4835.4 4861.2 c
-4847.16 4857.12 4856.04 4855.44 4866.6 4855.44 c
-4902.12 4855.44 4926 4875.84 4926 4906.08 c
-4926 4924.08 4915.25 4942.08 4899.72 4949.76 c
-4864.44 4967.28 l
-4845 4976.88 4840 4982.64 4840 4994.4 c
-4840 5009.28 4849.97 5017.6 4866.12 5017.6 c
-4876.92 5017.6 4887 5013.31 4895.64 5004.96 c
-4903.8 4996.56 4907.64 4989.6 4912.44 4974 c
-h
-4936.44 4860 m
-f*
-4998.96 4973.88 m
-4967.28 4973.88 4944 4949.01 4944 4914.72 c
-4944 4881.36 4967.04 4856.64 4998 4856.64 c
-5029.44 4856.64 5052 4881.36 5052 4914.96 c
-5052 4948.32 5029.06 4973.88 4998.96 4973.88 c
-h
-4998.24 4965.88 m
-5012.4 4965.88 5017 4953.21 5017 4912.32 c
-5017 4876.56 5012.19 4864.64 4998.24 4864.64 c
-4984.32 4864.64 4979 4876.73 4979 4911.12 c
-4979 4937.28 4980.27 4948.08 4984.08 4956.24 c
-4986.72 4962.72 4991.76 4965.88 4998.24 4965.88 c
-h
-5058 4860 m
-f*
-5140.24 4856.88 m
-5150.59 4860.48 5156.36 4861.44 5172 4863.12 c
-5186.88 4864.8 l
-5186.88 4871 l
-5176.32 4871.46 5174 4874.42 5174 4884.24 c
-5174 4971 l
-5125.2 4971 l
-5125.2 4964.88 l
-5137.2 4963.92 5140 4961.04 5140 4950.72 c
-5140 4882.8 l
-5132.11 4874.88 5127.33 4872.64 5120.4 4872.64 c
-5110.56 4872.64 5107 4877.33 5107 4889.28 c
-5107 4971 l
-5061.84 4971 l
-5061.84 4964.88 l
-5071.68 4962.96 5073 4960.8 5073 4950.72 c
-5073 4890.24 l
-5073 4869.12 5085.23 4856.64 5105.52 4856.64 c
-5117.97 4856.64 5126.35 4860.48 5140.24 4872.48 c
-h
-5191.44 4860 m
-f*
-5244.04 4971 m
-5197.96 4971 l
-5197.96 4964.88 l
-5208.28 4963.44 5211 4960.32 5211 4950.72 c
-5211 4880.16 l
-5211 4870.32 5208.59 4867.68 5197.96 4865.76 c
-5197.96 4860 l
-5261.8 4860 l
-5261.8 4865.76 l
-5247.16 4866.72 5245 4869.84 5245 4884.72 c
-5245 4930.08 l
-5245 4942.56 5251.39 4952.88 5258.92 4952.88 c
-5260.84 4952.88 5263 4951.2 5265.64 4947.36 c
-5270.2 4940.88 5273.8 4938.72 5280.04 4938.72 c
-5288.92 4938.72 5295.16 4945.44 5295.16 4954.56 c
-5295.16 4965.6 5287 4973.88 5275.72 4973.88 c
-5263.99 4973.88 5255.07 4967.54 5244.04 4950.96 c
-h
-5297.56 4860 m
-f*
-5396.88 4886.16 m
-5388 4876.08 5381.76 4872.64 5371.92 4872.64 c
-5351.04 4872.64 5338 4893.55 5338 4926.24 c
-5338 4950.96 5345.62 4965.88 5358 4965.88 c
-5361.84 4965.88 5365.44 4964.04 5366.88 4961.52 c
-5368.08 4959.36 5368.08 4959.36 5368.08 4949.28 c
-5368.32 4937.28 5372.4 4932 5381.52 4932 c
-5391.6 4932 5397.84 4937.76 5397.84 4947.12 c
-5397.84 4962 5381.76 4973.88 5360.88 4973.88 c
-5328 4973.88 5304 4948.53 5304 4913.52 c
-5304 4880.16 5325.36 4856.64 5355.36 4856.64 c
-5373.84 4856.64 5387.28 4864.08 5401.2 4881.84 c
-h
-5404.56 4860 m
-f*
-5499.48 4890 m
-5489.64 4878.24 5482.44 4873.64 5472.12 4873.64 c
-5463 4873.64 5455.8 4877.81 5451 4886.16 c
-5446.44 4893.89 5444.52 4902.1 5443.56 4919 c
-5504.04 4919 l
-5502.6 4938.82 5499 4949.81 5491.56 4959.12 c
-5483.88 4968.48 5472.6 4973.88 5459.16 4973.88 c
-5429.16 4973.88 5409 4949.97 5409 4914.72 c
-5409 4879.68 5428.68 4856.64 5458.44 4856.64 c
-5477.88 4856.64 5489.64 4864.08 5505.24 4886.64 c
-h
-5442.36 4928 m
-5443.08 4956.56 5447.4 4965.88 5459.16 4965.88 c
-5466.12 4965.88 5470.44 4962.11 5472.36 4954.8 c
-5473.56 4950.24 5474.04 4943.52 5474.52 4931.28 c
-5474.52 4928 l
-h
-5509.56 4860 m
-f*
-1 i
-4803.35 4811.75 705.6 21.5999 re
-f
-32 w
-3701.75 4956.95 1041.6 457.2 re
-Y
-3701.75 5392.55 m
-4733.75 4979.75 l
-S
-0 0 6120 7920 re
-Y
-3791.75 5439.35 m
-3735.35 5379.35 l
-3735.35 5296.55 l
-3533.75 5459.75 l
-f*
-0.24 i
-449 981.84 m
-449 971.28 443.084 966.48 429.36 966 c
-429.36 960 l
-505.2 960 l
-530.88 960 554.88 969.12 570 984.96 c
-583.92 999.12 592 1019.76 592 1042.8 c
-592 1092.24 558.49 1122 502.56 1122 c
-429.36 1122 l
-429.36 1116.24 l
-444.72 1114.8 449 1111.2 449 1100.16 c
-h
-488 1105.68 m
-488 1111.2 492.854 1114 502.32 1114 c
-519.36 1114 531.36 1106.35 539.76 1090.08 c
-546.48 1077.36 550 1059.84 550 1039.2 c
-550 1016.88 545.379 996.48 537.84 985.68 c
-529.68 974.16 517.92 968 502.08 968 c
-491.28 968 488 971.21 488 982.32 c
-h
-599.28 960 m
-f*
-696.48 990 m
-686.64 978.24 679.44 973.64 669.12 973.64 c
-660 973.64 652.8 977.813 648 986.16 c
-643.44 993.887 641.52 1002.1 640.56 1019 c
-701.04 1019 l
-699.6 1038.82 696 1049.81 688.56 1059.12 c
-680.88 1068.48 669.6 1073.88 656.16 1073.88 c
-626.16 1073.88 606 1049.97 606 1014.72 c
-606 979.68 625.68 956.64 655.44 956.64 c
-674.88 956.64 686.64 964.08 702.24 986.64 c
-h
-639.36 1028 m
-640.08 1056.56 644.4 1065.88 656.16 1065.88 c
-663.12 1065.88 667.44 1062.11 669.36 1054.8 c
-670.56 1050.24 671.04 1043.52 671.52 1031.28 c
-671.52 1028 l
-h
-706.56 960 m
-f*
-788.96 1038.24 m
-788.96 1073.4 l
-783.32 1073.4 l
-781.88 1069.53 780.44 1068.6 777.32 1068.6 c
-775.88 1068.6 773.72 1068.98 769.88 1069.92 c
-762.2 1072.56 756.68 1073.88 751.16 1073.88 c
-729.32 1073.88 713 1058.85 713 1038.48 c
-713 1022.64 722.979 1011.6 747.56 1001.28 c
-764.12 994.08 771 988.08 771 980.4 c
-771 971.04 763.64 964.64 752.6 964.64 c
-735.8 964.64 724.76 975.494 719.72 996.48 c
-713 996.48 l
-713 956.88 l
-719 956.88 l
-721.64 961.92 723.08 963.6 725.24 963.6 c
-726.44 963.6 728.36 963.12 730.76 962.16 c
-737.719 959.28 749.959 956.64 756.679 956.64 c
-778.52 956.64 794 971.52 794 993.12 c
-794 1010.16 784.78 1020.72 760.52 1030.56 c
-744.199 1037.52 737 1043.52 737 1051.68 c
-737 1059.6 743.923 1065.88 753.32 1065.88 c
-759.8 1065.88 766.04 1063.14 771.32 1057.92 c
-776.36 1053.12 779 1048.56 782.6 1038.24 c
-h
-800.36 960 m
-f*
-873.2 1071 m
-851 1071 l
-851 1111.2 l
-844.64 1111.2 l
-830 1090.56 820.4 1079.76 804.8 1066.56 c
-804.8 1060 l
-817 1060 l
-817 982.32 l
-817 966.72 827.427 957.12 844.16 957.12 c
-860.24 957.12 869.84 964.32 879.68 984 c
-873.68 986.64 l
-868.88 977.52 865.04 974.119 860 974.119 c
-853.28 974.119 851 978.211 851 987.84 c
-851 1060 l
-873.2 1060 l
-h
-879.92 960 m
-f*
-929 1071 m
-882.84 1071 l
-882.84 1064.88 l
-893.4 1062.72 895 1060.56 895 1050.72 c
-895 980.16 l
-895 970.32 893.394 968.4 882.84 965.76 c
-882.84 960 l
-940.2 960 l
-940.2 965.76 l
-931.8 966.96 929 970.32 929 979.44 c
-h
-912.36 1125.6 m
-901.56 1125.6 894 1117.54 894 1107.12 c
-894 1096.56 901.663 1088.6 911.88 1088.6 c
-922.44 1088.6 931 1096.54 931 1107.12 c
-931 1117.44 922.661 1125.6 912.36 1125.6 c
-h
-945.72 960 m
-f*
-997.76 1071 m
-952.04 1071 l
-952.04 1064.88 l
-962.6 1063.2 964 1060.8 964 1050.72 c
-964 980.16 l
-964 970.08 962.195 967.92 952.04 965.76 c
-952.04 960 l
-1009.88 960 l
-1009.88 965.76 l
-1001 966.96 998 970.56 998 979.44 c
-998 1043.52 l
-998 1044.48 999.729 1046.88 1002.2 1049.28 c
-1007.48 1054.56 1013.24 1057.88 1019 1057.88 c
-1027.16 1057.88 1031 1051.26 1031 1037.52 c
-1031 979.44 l
-1031 970.56 1027.95 966.72 1019.96 965.76 c
-1019.96 960 l
-1076.36 960 l
-1076.36 965.76 l
-1067 966.48 1065 969.36 1065 979.44 c
-1065 1039.68 l
-1065 1060.32 1052.12 1073.88 1032.2 1073.88 c
-1017.75 1073.88 1006.67 1067.04 997.76 1052.64 c
-h
-1080.44 960 m
-f*
-1193.52 975.36 m
-1191.12 972.96 l
-1190.4 972.24 1189.68 972 1188.48 972 c
-1185.12 972 1184 973.92 1184 978 c
-1184 1040.64 l
-1184 1061.04 1165.54 1073.88 1135.92 1073.88 c
-1108.8 1073.88 1090.56 1061.49 1090.56 1043.28 c
-1090.56 1033.2 1096.32 1027.44 1106.16 1027.44 c
-1115.76 1027.44 1122.48 1033.2 1122.48 1041.36 c
-1122.48 1044.72 1121.28 1047.84 1118.16 1051.68 c
-1116 1054.08 1115.28 1055.52 1115.28 1056.96 c
-1115.28 1062 1121.76 1065.88 1130.4 1065.88 c
-1144.56 1065.88 1151 1059.39 1151 1044.72 c
-1151 1027.2 l
-1122.67 1018.56 1111.28 1014.24 1102.08 1008.24 c
-1091.28 1001.04 1086 992.64 1086 982.08 c
-1086 967.44 1097.04 956.64 1112.4 956.64 c
-1126.32 956.64 1137.36 961.44 1150.56 973.44 c
-1153.2 961.2 1158.48 956.64 1170.24 956.64 c
-1180.56 956.64 1188 960.48 1197.12 970.321 c
-h
-1150 984 m
-1143.64 976.561 1138.93 973.681 1133.28 973.681 c
-1126.08 973.681 1121 980.161 1121 989.761 c
-1121 1003.68 1130.98 1013.52 1150 1018.8 c
-h
-1200 960 m
-f*
-1273.2 1071 m
-1251 1071 l
-1251 1111.2 l
-1244.64 1111.2 l
-1230 1090.56 1220.4 1079.76 1204.8 1066.56 c
-1204.8 1060 l
-1217 1060 l
-1217 982.32 l
-1217 966.72 1227.43 957.12 1244.16 957.12 c
-1260.24 957.12 1269.84 964.32 1279.68 984 c
-1273.68 986.64 l
-1268.88 977.52 1265.04 974.119 1260 974.119 c
-1253.28 974.119 1251 978.211 1251 987.84 c
-1251 1060 l
-1273.2 1060 l
-h
-1279.92 960 m
-f*
-1330 1071 m
-1283.84 1071 l
-1283.84 1064.88 l
-1294.4 1062.72 1296 1060.56 1296 1050.72 c
-1296 980.16 l
-1296 970.32 1294.39 968.4 1283.84 965.76 c
-1283.84 960 l
-1341.2 960 l
-1341.2 965.76 l
-1332.8 966.96 1330 970.32 1330 979.44 c
-h
-1313.36 1125.6 m
-1302.56 1125.6 1295 1117.54 1295 1107.12 c
-1295 1096.56 1302.66 1088.6 1312.88 1088.6 c
-1323.44 1088.6 1332 1096.54 1332 1107.12 c
-1332 1117.44 1323.66 1125.6 1313.36 1125.6 c
-h
-1346.72 960 m
-f*
-1406.96 1073.88 m
-1375.28 1073.88 1352 1049.01 1352 1014.72 c
-1352 981.36 1375.04 956.64 1406 956.64 c
-1437.44 956.64 1460 981.36 1460 1014.96 c
-1460 1048.32 1437.06 1073.88 1406.96 1073.88 c
-h
-1406.24 1065.88 m
-1420.4 1065.88 1425 1053.21 1425 1012.32 c
-1425 976.56 1420.19 964.64 1406.24 964.64 c
-1392.32 964.64 1387 976.734 1387 1011.12 c
-1387 1037.28 1388.27 1048.08 1392.08 1056.24 c
-1394.72 1062.72 1399.76 1065.88 1406.24 1065.88 c
-h
-1466 960 m
-f*
-1516.76 1071 m
-1471.04 1071 l
-1471.04 1064.88 l
-1481.6 1063.2 1483 1060.8 1483 1050.72 c
-1483 980.16 l
-1483 970.08 1481.19 967.92 1471.04 965.76 c
-1471.04 960 l
-1528.88 960 l
-1528.88 965.76 l
-1520 966.96 1517 970.56 1517 979.44 c
-1517 1043.52 l
-1517 1044.48 1518.73 1046.88 1521.2 1049.28 c
-1526.48 1054.56 1532.24 1057.88 1538 1057.88 c
-1546.16 1057.88 1550 1051.26 1550 1037.52 c
-1550 979.44 l
-1550 970.56 1546.95 966.72 1538.96 965.76 c
-1538.96 960 l
-1595.36 960 l
-1595.36 965.76 l
-1586 966.48 1584 969.36 1584 979.44 c
-1584 1039.68 l
-1584 1060.32 1571.12 1073.88 1551.2 1073.88 c
-1536.75 1073.88 1525.67 1067.04 1516.76 1052.64 c
-h
-1599.44 960 m
-f*
-1 i
-425.75 911.751 1172.4 21.5999 re
-f
-1133.75 1190.15 669.6 772.8 re
-Y
-1133.75 1199.75 m
-1793.75 1962.95 l
-S
-0 0 6120 7920 re
-Y
-1809.35 1862.15 m
-1772.15 1936.55 l
-1691.75 1962.95 l
-1913.75 2099.75 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 4422 a(Figure)38 b(13:)57 b(Con)m(v)m(ersion)38
-b(b)s(et)m(w)m(een)h(t)m(w)m(o)g(F)-8 b(rameSets)39 b(is)e(p)s
-(erformed)g(b)m(y)g(establishing)i(a)f(link)g(b)s(et)m(w)m(een)g(a)0
-4535 y(pair)e(of)g(F)-8 b(rames,)38 b(one)e(from)f(eac)m(h)i(F)-8
-b(rameSet.)59 b(If)35 b(con)m(v)m(ersion)i(b)s(et)m(w)m(een)g(these)f
-(t)m(w)m(o)h(F)-8 b(rames)37 b(is)f(p)s(ossible,)0 4648
-y(then)26 b(a)g(route)g(for)g(con)m(v)m(erting)i(b)s(et)m(w)m(een)e
-(the)h(curren)m(t)e(F)-8 b(rames)27 b(of)f(b)s(oth)g(F)-8
-b(rameSets)27 b(can)f(also)h(b)s(e)e(found.)38 b(In)0
-4761 y(practice,)33 b(there)f(ma)m(y)f(b)s(e)g(man)m(y)h(w)m(a)m(ys)g
-(of)f(pairing)g(F)-8 b(rames)32 b(to)g(\014nd)e(the)i(\\missing)f
-(link",)h(so)g(the)f(F)-8 b(rames')0 4874 y(Domain)31
-b(attribute)g(ma)m(y)g(b)s(e)f(used)g(to)h(narro)m(w)f(the)g(c)m
-(hoice.)p eop end
-%%Page: 118 128
-TeXDict begin 118 127 bop 0 52 a FG(118)1350 b Fz(14)92
-b(HIGHER)30 b(LEVEL)g(OPERA)-8 b(TIONS)29 b(ON)h(FRAMESETS)111
-351 y FG(2.)46 b(In)24 b(a)h(similar)g(w)m(a)m(y)-8 b(,)27
-b(y)m(ou)e(cannot)g(con)m(v)m(ert)i(directly)e(b)s(et)m(w)m(een)g(F)-8
-b(rames)25 b(with)g(di\013eren)m(t)g(Domain)g(v)-5 b(alues)227
-464 y(\()p Fu(x)p FG(7.12\).)66 b(If)38 b(the)g(Domain)g(attribute)h
-(is)f(used)f(consisten)m(tly)j(\(t)m(ypically)g(only)e(one)g(F)-8
-b(rame)39 b(in)e(eac)m(h)227 577 y(F)-8 b(rameSet)32
-b(will)f(ha)m(v)m(e)g(a)g(particular)g(Domain)g(v)-5
-b(alue\),)31 b(then)f(this)h(further)e(restricts)i(the)f(c)m(hoice.)111
-758 y(3.)46 b(The)41 b(third)g(argumen)m(t)h(of)g(AST)p
-Fy(_)p FG(CONVER)-8 b(T)40 b(ma)m(y)i(then)f(b)s(e)g(used)g(to)h(sp)s
-(ecify)g(explicitly)h(whic)m(h)227 871 y(Domain)36 b(v)-5
-b(alue)36 b(the)f(paired)g(F)-8 b(rames)36 b(should)e(ha)m(v)m(e.)56
-b(Y)-8 b(ou)36 b(ma)m(y)g(also)g(supply)d(a)j(comma-separated)227
-984 y(list)31 b(of)g(preferences)f(here)g(\(see)i(b)s(elo)m(w\).)111
-1164 y(4.)46 b(If)24 b(the)h(ab)s(o)m(v)m(e)h(steps)e(fail)h(to)g
-(uniquely)f(iden)m(tify)h(the)f(link,)i(then)e(the)h(\014rst)f
-(suitable)h(pairing)f(of)h(F)-8 b(rames)227 1277 y(is)29
-b(used,)f(so)h(that)g(an)m(y)g(am)m(biguit)m(y)h(is)f(resolv)m(ed)h(b)m
-(y)e(the)h(order)f(in)g(whic)m(h)h(F)-8 b(rames)29 b(are)g(considered)g
-(for)227 1390 y(pairing)g(\(see)h(the)g(description)f(of)g(the)g(AST)p
-Fy(_)p FG(CONVER)-8 b(T)28 b(function)h(in)g(App)s(endix)e(B)i(for)g
-(details)h(of)227 1503 y(the)h(searc)m(h)g(order\).)928
-1470 y Fv(20)0 1738 y FG(In)26 b(the)i(example)f(ab)s(o)m(v)m(e)i(w)m
-(e)e(supplied)f(the)h(string)h(\\SKY")f(as)g(the)h(third)e(argumen)m(t)
-h(of)h(AST)p Fy(_)p FG(CONVER)-8 b(T.)0 1851 y(This)30
-b(constitutes)i(a)f(request)g(that)g(a)g(pair)g(of)g(F)-8
-b(rames)31 b(with)g(the)g(Domain)g(v)-5 b(alue)32 b(SKY)e(\()p
-Fx(i.e.)g FG(represen)m(ting)0 1964 y(celestial)36 b(co)s(ordinate)f
-(systems\))f(should)e(b)s(e)h(used)g(to)h(in)m(ter-relate)i(the)e(t)m
-(w)m(o)h(F)-8 b(rameSets.)51 b(Note)35 b(that)g(this)0
-2077 y(do)s(es)30 b(not)i(sp)s(ecify)e(whic)m(h)h(celestial)i(co)s
-(ordinate)f(system)e(to)i(use,)f(but)f(is)h(a)g(general)h(request)f
-(that)g(the)g(t)m(w)m(o)0 2190 y(F)-8 b(rameSets)31 b(b)s(e)f(in)m
-(ter-related)i(using)e(co)s(ordinates)h(on)g(the)f(celestial)j(sphere.)
-0 2345 y(Of)28 b(course,)i(it)f(ma)m(y)g(b)s(e)f(that)i(this)e(request)
-h(cannot)g(b)s(e)f(met)h(b)s(ecause)g(there)g(ma)m(y)g(not)g(b)s(e)f(a)
-i(celestial)h(co)s(or-)0 2458 y(dinate)d(system)g(in)g(b)s(oth)f(F)-8
-b(rameSets.)41 b(If)28 b(this)f(is)h(lik)m(ely)i(to)e(happ)s(en,)f(w)m
-(e)i(can)f(supply)e(a)j(list)f(of)g(preferences,)0 2571
-y(or)i(a)h Fx(domain)j(se)-5 b(ar)g(ch)35 b(p)-5 b(ath,)32
-b FG(as)e(the)h(third)f(argumen)m(t)g(to)h(AST)p Fy(_)p
-FG(CONVER)-8 b(T,)30 b(suc)m(h)g(as)g(the)h(follo)m(wing:)262
-2793 y Ft(CVT)42 b(=)h(AST_CONVERT\()c(FRAMESETA,)g(FRAMESETB,)h
-('SKY,PIXEL,GRID)o(,',)d(STATUS)k(\))0 3027 y FG(No)m(w,)g(if)e(the)f
-(t)m(w)m(o)i(F)-8 b(rameSets)39 b(cannot)g(b)s(e)f(in)m(ter-related)i
-(using)e(the)h(SKY)e(domain,)k(AST)p Fy(_)p FG(CONVER)-8
-b(T)0 3140 y(will)32 b(attempt)h(to)g(use)e(the)h(PIXEL)f(domain)h
-(instead.)45 b(If)32 b(this)f(also)i(fails,)g(it)f(will)g(try)g(the)g
-(GRID)g(domain.)0 3253 y(A)27 b(blank)g(\014eld)f(in)h(the)g(domain)g
-(searc)m(h)h(path)e(\(here)i(indicated)f(b)m(y)g(the)g(\014nal)g
-(comma\))h(allo)m(ws)g(an)m(y)g(Domain)0 3366 y(v)-5
-b(alue)31 b(to)g(b)s(e)f(used.)40 b(This)29 b(can)i(b)s(e)f(emplo)m(y)m
-(ed)h(as)g(a)f(last)i(resort)e(when)g(all)h(else)g(has)f(failed.)0
-3522 y(If)d(astCon)m(v)m(ert)j(succeeds)e(in)g(iden)m(tifying)g(a)h
-(con)m(v)m(ersion,)h(it)e(will)g(return)f(a)i(p)s(oin)m(ter)f(to)g(a)h
-(F)-8 b(rameSet)29 b(\()p Fu(x)p FG(14.1\))0 3635 y(in)36
-b(whic)m(h)g(the)g(source)g(and)g(destination)h(F)-8
-b(rames)36 b(are)h(in)m(ter-connected)h(b)m(y)e(the)g(required)f
-(Mapping.)58 b(In)0 3748 y(this)35 b(case,)i(of)e(course,)h(these)g(F)
--8 b(rames)35 b(will)g(b)s(e)f(the)h(curren)m(t)g(F)-8
-b(rames)36 b(of)f(the)g(t)m(w)m(o)h(F)-8 b(rameSets,)37
-b(but)d(in)h(all)0 3861 y(other)c(resp)s(ects)f(the)g(returned)g(F)-8
-b(rameSet)31 b(is)g(the)f(same)h(as)g(when)e(con)m(v)m(erting)j(b)s(et)
-m(w)m(een)f(F)-8 b(rames.)0 4017 y(V)g(ery)42 b(imp)s(ortan)m(tly)-8
-b(,)44 b(ho)m(w)m(ev)m(er,)i(AST)p Fy(_)p FG(CONVER)-8
-b(T)39 b(ma)m(y)j(mo)s(dify)e(the)i(F)-8 b(rameSets)42
-b(y)m(ou)f(are)h(con)m(v)m(erting)0 4130 y(b)s(et)m(w)m(een.)71
-b(It)40 b(do)s(es)g(this,)j(in)d(order)g(to)h(indicate)g(whic)m(h)f
-(pairing)h(of)f(F)-8 b(rames)41 b(w)m(as)g(used)e(to)i(in)m(ter-relate)
-0 4242 y(them,)32 b(b)m(y)f(c)m(hanging)h(the)g(Base)g(attribute)g(for)
-f(eac)m(h)i(F)-8 b(rameSet)32 b(so)g(that)g(the)f(F)-8
-b(rame)32 b(used)f(in)g(the)g(pairing)0 4355 y(b)s(ecomes)g(its)f(base)
-h(F)-8 b(rame)31 b(\()p Fu(x)p FG(13.4\).)0 4511 y(Finally)-8
-b(,)44 b(note)c(that)h(AST)p Fy(_)p FG(CONVER)-8 b(T)38
-b(ma)m(y)i(also)h(b)s(e)e(used)g(to)i(con)m(v)m(ert)g(b)s(et)m(w)m(een)
-g(a)f(F)-8 b(rameSet)41 b(and)e(a)0 4624 y(F)-8 b(rame,)30
-b(or)e Fx(vic)-5 b(e)30 b(versa.)41 b FG(If)27 b(a)i(p)s(oin)m(ter)f
-(to)h(a)g(F)-8 b(rame)29 b(is)f(supplied)f(for)h(either)h(the)g
-(\014rst)e(or)h(second)h(argumen)m(t,)0 4737 y(it)i(will)g(b)s(eha)m(v)
-m(e)g(lik)m(e)g(a)g(F)-8 b(rameSet)32 b(con)m(taining)g(only)e(a)h
-(single)g(F)-8 b(rame.)0 5020 y Fw(14.3)112 b(Example|Registering)39
-b(Tw)m(o)e(Images)0 5235 y FG(Consider)26 b(t)m(w)m(o)j(images)f(whic)m
-(h)f(ha)m(v)m(e)h(b)s(een)e(calibrated)j(b)m(y)e(attac)m(hing)i(F)-8
-b(rameSets)28 b(to)g(them,)g(suc)m(h)f(that)g(the)0 5348
-y(base)33 b(F)-8 b(rame)33 b(of)g(eac)m(h)h(F)-8 b(rameSet)34
-b(corresp)s(onds)d(to)i(the)g(ra)m(w)g(data)g(grid)f(co)s(ordinates)i
-(of)e(eac)m(h)i(image)g(\(the)p 0 5425 1512 4 v 73 5479
-a Fs(20)138 5510 y Fr(If)23 b(y)n(ou)f(\014nd)f(that)i(ho)n(w)g(this)f
-(am)n(biguit)n(y)h(is)g(resolv)n(ed)g(actually)g(mak)n(es)g(a)f
-(di\013erence)h(to)g(the)f(con)n(v)n(ersion)h(that)f(results,)i(then)0
-5602 y(y)n(ou)30 b(ha)n(v)n(e)g(probably)h(constructed)f(a)i(F)-6
-b(rameSet)30 b(whic)n(h)h(lac)n(ks)h(in)n(ternal)f(self-consistency)-6
-b(.)50 b(F)-6 b(or)31 b(example,)i(y)n(ou)d(migh)n(t)h(ha)n(v)n(e)0
-5693 y(t)n(w)n(o)26 b(F)-6 b(rames)26 b(represen)n(ting)g
-(indistinguishable)h(co)r(ordinate)g(systems)f(but)e(in)n(ter-related)i
-(b)n(y)f(a)h(non-n)n(ull)f(Mapping.)p eop end
-%%Page: 119 129
-TeXDict begin 119 128 bop 0 52 a Fz(14.3)93 b(Example|Registering)31
-b(Tw)m(o)g(Images)1996 b FG(119)0 351 y(GRID)36 b(domain)f(of)h
-Fu(x)p FG(7.13\).)58 b(Supp)s(ose,)35 b(also,)j(that)e(these)g(F)-8
-b(rameSets)36 b(con)m(tain)h(an)e(unkno)m(wn)f(n)m(um)m(b)s(er)g(of)0
-464 y(other)26 b(F)-8 b(rames,)28 b(represen)m(ting)e(alternativ)m(e)i
-(w)m(orld)d(co)s(ordinate)i(systems.)39 b(What)27 b(w)m(e)f(wish)f(to)h
-(do)g(is)g(register)0 577 y(these)34 b(t)m(w)m(o)h(images,)g(suc)m(h)e
-(that)h(w)m(e)g(can)g(transform)f(from)g(a)h(p)s(osition)f(in)g(the)h
-(data)g(grid)f(of)h(one)g(in)m(to)g(the)0 690 y(corresp)s(onding)e(p)s
-(osition)h(in)g(the)h(data)g(grid)f(of)g(the)g(other.)50
-b(This)32 b(is)i(a)f(v)m(ery)h(practical)h(example)e(b)s(ecause)0
-803 y(images)e(will)g(t)m(ypically)h(b)s(e)e(calibrated)i(using)e(F)-8
-b(rameSets)31 b(in)f(precisely)h(this)f(w)m(a)m(y)-8
-b(.)0 965 y(The)39 b(\014rst)g(step)h(will)g(probably)f(in)m(v)m(olv)m
-(e)k(making)d(a)g(cop)m(y)g(of)g(b)s(oth)g(F)-8 b(rameSets)40
-b(\(using)g(AST)p Fy(_)p FG(COPY|)0 1078 y Fu(x)p FG(4.12\),)33
-b(since)e(w)m(e)g(will)g(b)s(e)f(mo)s(difying)g(them.)41
-b(Let)31 b(\\frameseta")h(and)e(\\framesetb")h(b)s(e)f(p)s(oin)m(ters)h
-(to)g(these)0 1191 y(copies.)39 b(Since)22 b(w)m(e)h(w)m(an)m(t)g(to)g
-(con)m(v)m(ert)h(b)s(et)m(w)m(een)e(the)h(base)f(F)-8
-b(rames)23 b(of)g(these)f(F)-8 b(rameSets)24 b(\()p Fx(i.e.)e
-FG(their)g(data)h(grid)0 1304 y(co)s(ordinates\),)36
-b(the)e(next)g(step)g(is)f(to)i(mak)m(e)g(these)f(F)-8
-b(rames)34 b(curren)m(t.)51 b(This)33 b(is)h(simply)f(done)h(b)m(y)f
-(in)m(v)m(erting)0 1417 y(b)s(oth)d(F)-8 b(rameSets,)32
-b(whic)m(h)f(in)m(terc)m(hanges)h(their)f(base)g(and)f(curren)m(t)h(F)
--8 b(rames.)43 b(astIn)m(v)m(ert)32 b(will)f(p)s(erform)f(this)0
-1530 y(task:)262 1777 y Ft(CALL)41 b(AST_INVERT\()e(FRAMESETA,)h
-(STATUS)h(\))262 1877 y(CALL)g(AST_INVERT\()e(FRAMESETB,)h(STATUS)h(\))
-0 2137 y FG(T)-8 b(o)30 b(iden)m(tify)f(the)h(required)e(con)m(v)m
-(ersion,)j(w)m(e)f(no)m(w)f(use)g(AST)p Fy(_)p FG(CONVER)-8
-b(T,)28 b(supplying)g(a)i(suitable)g(domain)0 2250 y(searc)m(h)h(path)f
-(with)g(whic)m(h)g(w)m(e)h(w)m(ould)f(lik)m(e)i(our)e(t)m(w)m(o)i
-(images)f(to)g(b)s(e)f(registered:)262 2497 y Ft(CVT)42
-b(=)h(AST_CONVERT\()c(FRAMESETA,)g(FRAMESETB,)h('SKY,PIXEL,GRID)o(',)d
-(STATUS)k(\))262 2597 y(IF)h(\()h(CVT)g(.EQ.)f(AST__NULL)e(\))j(THEN)
-392 2696 y(<no)g(conversion)c(was)j(possible>)262 2796
-y(ELSE)392 2896 y(<conversion)d(was)k(possible>)262 2995
-y(END)f(IF)0 3256 y FG(The)30 b(e\013ects)i(of)e(this)g(are:)111
-3516 y(1.)46 b(AST)p Fy(_)p FG(CONVER)-8 b(T)21 b(\014rst)g(attempts)h
-(to)h(register)f(the)g(t)m(w)m(o)h(images)g(on)e(the)h(celestial)j
-(sphere)c(\()p Fx(i.e.)g FG(using)227 3629 y(the)33 b(SKY)f(domain\).)
-47 b(T)-8 b(o)32 b(do)h(this,)g(it)g(searc)m(hes)g(for)f(a)h(celestial)
-i(co)s(ordinate)e(system,)g(although)g(not)227 3742 y(necessarily)f
-(the)g(same)g(one,)g(attac)m(hed)h(to)f(eac)m(h)g(image.)45
-b(If)31 b(it)h(\014nds)e(a)h(suitable)h(pair)f(of)h(co)s(ordinate)227
-3855 y(systems,)f(it)g(then)f(registers)h(the)g(images)g(b)m(y)f(matc)m
-(hing)i(corresp)s(onding)d(p)s(ositions)h(on)h(the)f(sky)-8
-b(.)111 4042 y(2.)46 b(If)28 b(this)h(fails,)g(AST)p
-Fy(_)p FG(CONVER)-8 b(T)27 b(next)i(tries)g(to)g(matc)m(h)g(p)s
-(ositions)g(in)f(the)g(PIXEL)g(domain)h(\()p Fu(x)p FG(7.12\).)227
-4155 y(If)40 b(it)g(succeeds,)j(the)d(t)m(w)m(o)i(images)f(will)f(then)
-f(b)s(e)h(registered)h(so)f(that)g(their)g(corresp)s(onding)f(pixel)227
-4268 y(p)s(ositions)44 b(corresp)s(ond.)80 b(If)44 b(the)g(PIXEL)f
-(domain)h(is)g(o\013set)h(from)f(the)g(data)g(grid)g(\(as)h(t)m
-(ypically)227 4381 y(happ)s(ens)35 b(in)h(data)h(reduction)f(systems)h
-(whic)m(h)f(implemen)m(t)h(a)f(\\pixel)i(origin"\),)h(then)d(this)g
-(will)h(b)s(e)227 4494 y(correctly)32 b(accoun)m(ted)g(for.)111
-4681 y(3.)46 b(If)26 b(this)h(also)h(fails,)g(the)f(GRID)g(domain)f(is)
-h(\014nally)f(used.)39 b(This)26 b(will)h(result)f(in)h(image)g
-(registration)i(b)m(y)227 4794 y(matc)m(hing)36 b(corresp)s(onding)d(p)
-s(oin)m(ts)i(in)f(the)h(data)g(grids)f(used)g(b)m(y)h(b)s(oth)f
-(images.)54 b(This)34 b(means)g(they)227 4907 y(will)d(b)s(e)f(aligned)
-h(so)f(that)h(the)g(\014rst)f(elemen)m(t)h(their)g(data)g(arra)m(ys)g
-(corresp)s(ond.)111 5094 y(4.)46 b(If)31 b(all)i(of)e(the)h(ab)s(o)m(v)
-m(e)g(fail,)h(AST)p Fy(_)p FG(CONVER)-8 b(T)30 b(will)i(return)e(the)i
-(v)-5 b(alue)32 b(AST)p Fy(__)p FG(NULL.)e(Otherwise)h(a)227
-5207 y(p)s(oin)m(ter)g(to)g(a)g(F)-8 b(rameSet)31 b(will)g(b)s(e)f
-(returned.)0 5467 y(The)36 b(resulting)g(CVT)g(F)-8 b(rameSet)38
-b(ma)m(y)f(then)f(b)s(e)g(used)f(directly)i(\()p Fu(x)p
-FG(12.1\))i(to)e(con)m(v)m(ert)h(b)s(et)m(w)m(een)g(p)s(ositions)0
-5580 y(in)d(the)h(data)g(grid)g(of)f(the)h(\014rst)f(image)i(and)e
-(corresp)s(onding)g(p)s(ositions)g(in)g(the)h(data)g(grid)g(of)g(the)f
-(second)0 5693 y(image.)p eop end
-%%Page: 120 130
-TeXDict begin 120 129 bop 0 52 a FG(120)1350 b Fz(14)92
-b(HIGHER)30 b(LEVEL)g(OPERA)-8 b(TIONS)29 b(ON)h(FRAMESETS)0
-351 y FG(T)-8 b(o)30 b(determine)f(whic)m(h)h(domain)f(w)m(as)h(used)e
-(to)i(ac)m(hiev)m(e)i(registration,)f(w)m(e)f(can)g(use)f(the)h(fact)g
-(that)g(the)f(Base)0 464 y(attribute)37 b(of)g(eac)m(h)g(F)-8
-b(rameSet)38 b(is)e(set)h(b)m(y)g(AST)p Fy(_)p FG(CONVER)-8
-b(T)35 b(to)i(indicate)g(whic)m(h)g(in)m(termediate)h(F)-8
-b(rames)0 577 y(w)m(ere)28 b(used.)39 b(W)-8 b(e)29 b(can)f(therefore)h
-(simply)e(in)m(v)m(ert)i(either)f(F)-8 b(rameSet)29 b(\(to)g(mak)m(e)f
-(its)h(base)e(F)-8 b(rame)29 b(b)s(ecome)f(the)0 690
-y(curren)m(t)i(one\))h(and)f(then)g(enquire)g(the)h(Domain)g(v)-5
-b(alue:)262 932 y Ft(CHARACTER)39 b(*)44 b(\()f(20)f(\))i(DOMAIN)262
-1131 y(...)262 1430 y(CALL)d(AST_INVERT\()e(FRAMESETA,)h(STATUS)h(\))
-262 1530 y(DOMAIN)g(=)i(AST_GETC\()d(FRAMESETA,)f('Domain',)h(STATUS)h
-(\))0 1786 y FG(If)30 b(con)m(v)m(ersion)i(w)m(as)e(successful,)h(the)f
-(result)h(will)f(b)s(e)g(one)h(of)f(the)h(strings)f(\\SKY",)h(\\PIXEL")
-f(or)h(\\GRID".)0 2076 y Fw(14.4)112 b(Re-De\014ning)39
-b(a)f(F)-9 b(rameSet)38 b(Co)s(ordinate)g(System)0 2296
-y FG(As)44 b(discussed)f(earlier)h(\()p Fu(x)p FG(13.4\),)51
-b(an)43 b(imp)s(ortan)m(t)h(application)i(of)e(a)g(F)-8
-b(rameSet)45 b(is)f(to)g(allo)m(w)i(co)s(ordinate)0 2409
-y(system)40 b(information)g(to)g(b)s(e)f(attac)m(hed)i(to)g(en)m
-(tities)g(suc)m(h)e(as)h(images)h(in)e(order)g(to)i(calibrate)g(them.)
-68 b(In)0 2522 y(addition,)33 b(one)f(of)g(the)g(main)f(ob)5
-b(jectiv)m(es)34 b(of)e(AST)f(is)h(to)h(simplify)e(the)h(propagation)h
-(of)f(suc)m(h)f(information)0 2635 y(through)i(successiv)m(e)i(stages)g
-(of)f(data)h(pro)s(cessing,)f(so)g(that)h(it)f(remains)f(consisten)m(t)
-j(with)d(the)h(asso)s(ciated)0 2748 y(image)e(data.)0
-2909 y(In)k(suc)m(h)h(a)h(situation,)i(the)d(F)-8 b(rameSet's)38
-b(base)g(F)-8 b(rame)38 b(w)m(ould)e(corresp)s(ond)g(with)h(the)g
-(image's)i(data)f(grid)0 3022 y(co)s(ordinates)k(and)e(its)h(other)g(F)
--8 b(rames)42 b(\(if)f(an)m(y\))h(with)f(the)g(v)-5 b(arious)41
-b(alternativ)m(e)i(w)m(orld)e(co)s(ordinate)h(sys-)0
-3134 y(tems)37 b(asso)s(ciated)h(with)f(the)g(image.)61
-b(If)36 b(the)h(data)g(pro)s(cessing)g(b)s(eing)f(p)s(erformed)f(do)s
-(es)h(not)h(c)m(hange)h(the)0 3247 y(relationship)31
-b(b)s(et)m(w)m(een)h(the)f(image's)i(data)e(grid)g(co)s(ordinates)h
-(and)e(an)m(y)h(of)h(the)f(asso)s(ciated)h(w)m(orld)f(co)s(ordi-)0
-3360 y(nate)g(systems,)g(then)f(propagation)i(of)e(the)h(W)m(CS)g
-(information)g(is)f(straigh)m(tforw)m(ard)h(and)f(simply)g(in)m(v)m
-(olv)m(es)0 3473 y(cop)m(ying)h(the)g(F)-8 b(rameSet)31
-b(asso)s(ciated)h(with)e(the)h(image.)0 3634 y(If)e(an)m(y)i(of)f
-(these)g(relationships)g(c)m(hange,)h(ho)m(w)m(ev)m(er,)h(then)d
-(corresp)s(onding)g(c)m(hanges)i(m)m(ust)f(b)s(e)f(made)h(to)g(the)0
-3747 y(w)m(a)m(y)j(F)-8 b(rames)33 b(within)e(the)h(F)-8
-b(rameSet)33 b(are)f(in)m(ter-related.)48 b(By)32 b(far)f(the)h(most)h
-(common)f(case)h(o)s(ccurs)e(when)0 3860 y(the)i(image)g(undergo)s(es)f
-(some)h(geometrical)i(transformation)e(resulting)f(in)h(\\re-gridding")
-g(on)f(to)h(another)0 3973 y(data)e(grid,)f(but)g(the)h(same)f
-(principles)g(can)h(b)s(e)f(applied)g(to)h(an)m(y)g(re-de\014nition)f
-(of)h(a)f(co)s(ordinate)i(system.)0 4134 y(T)-8 b(o)34
-b(pursue)d(the)i(re-gridding)g(example,)i(w)m(e)e(w)m(ould)g(need)g(to)
-h(mo)s(dify)e(our)h(F)-8 b(rameSet)34 b(to)g(accoun)m(t)g(for)f(the)0
-4247 y(fact)27 b(that)f(the)g(image's)h(data)f(grid)g(co)s(ordinate)g
-(system)g(\(corresp)s(onding)f(to)h(the)g(F)-8 b(rameSet's)27
-b(base)f(F)-8 b(rame\))0 4360 y(has)30 b(c)m(hanged.)41
-b(Lo)s(oking)31 b(at)g(the)g(steps)f(needed)g(in)g(detail,)i(w)m(e)f
-(migh)m(t)g(pro)s(ceed)f(as)h(follo)m(ws:)111 4615 y(1.)46
-b(Create)34 b(a)f(Mapping)g(whic)m(h)g(represen)m(ts)g(the)g
-(relationship)g(b)s(et)m(w)m(een)h(the)f(original)h(data)g(grid)f(co)s
-(or-)227 4728 y(dinate)e(system)g(and)e(the)i(new)f(one.)111
-4914 y(2.)46 b(Obtain)37 b(a)h(F)-8 b(rame)38 b(to)h(represen)m(t)e
-(the)g(new)g(data)h(grid)g(co)s(ordinate)g(system)f(\(w)m(e)h(could)g
-(re-use)f(the)227 5027 y(original)32 b(base)e(F)-8 b(rame)32
-b(here,)e(using)g(AST)p Fy(_)p FG(GETFRAME)g(to)h(obtain)g(a)g(p)s(oin)
-m(ter)f(to)h(it\).)111 5213 y(3.)46 b(Add)e(the)g(new)g(F)-8
-b(rame)45 b(to)g(the)f(F)-8 b(rameSet,)49 b(related)c(to)g(the)g
-(original)g(base)f(F)-8 b(rame)45 b(b)m(y)g(the)f(new)227
-5326 y(Mapping.)39 b(This)24 b(F)-8 b(rame)26 b(no)m(w)e(represen)m(ts)
-h(the)g(new)f(data)h(grid)g(co)s(ordinate)g(system)g(and)f(is)h
-(correctly)227 5439 y(related)32 b(to)f(all)g(the)f(other)h(F)-8
-b(rames)31 b(presen)m(t.)1788 5406 y Fv(21)p 0 5516 1512
-4 v 73 5570 a Fs(21)138 5602 y Fr(This)d(is)g(b)r(ecause)f(an)n(y)g
-(transformation)i(to)e(or)h(from)g(this)f(new)g(F)-6
-b(rame)28 b(m)n(ust)f(go)h Fg(via)f Fr(the)f(base)i(F)-6
-b(rame)27 b(represen)n(ting)h(the)0 5693 y(original)f(data)f(grid)g(co)
-r(ordinate)h(system,)f(whic)n(h)g(w)n(e)g(assume)g(w)n(as)h(correctly)f
-(related)h(to)e(all)i(the)e(other)h(F)-6 b(rames)26 b(presen)n(t.)p
-eop end
-%%Page: 121 131
-TeXDict begin 121 130 bop 0 52 a Fz(14.5)93 b(Example|Binning)30
-b(an)g(Image)2245 b FG(121)111 351 y(4.)46 b(Remo)m(v)m(e)32
-b(the)f(original)h(base)e(F)-8 b(rame)31 b(\(represen)m(ting)g(the)g
-(old)f(data)i(grid)e(co)s(ordinate)h(system\).)111 542
-y(5.)46 b(Mak)m(e)32 b(the)f(new)f(F)-8 b(rame)31 b(the)g(base)f(F)-8
-b(rame)31 b(and)f(restore)h(the)g(original)g(curren)m(t)f(F)-8
-b(rame.)0 809 y(The)28 b(e\013ect)j(of)e(these)h(steps)f(is)g(to)g(c)m
-(hange)h(the)g(relationship)f(b)s(et)m(w)m(een)h(the)f(base)g(F)-8
-b(rame)30 b(and)e(all)i(the)f(other)0 922 y(F)-8 b(rames)33
-b(presen)m(t.)48 b(It)33 b(is)f(as)h(if)g(a)g(new)f(Mapping)h(has)f(b)s
-(een)g(in)m(terp)s(osed)g(b)s(et)m(w)m(een)i(the)f(F)-8
-b(rame)33 b(w)m(e)g(w)m(an)m(t)h(to)0 1035 y(alter)d(and)f(all)h(the)g
-(other)g(F)-8 b(rames)31 b(within)f(the)g(F)-8 b(rameSet)32
-b(\(Figure)f(14\).)780 2669 y @beginspecial 107 @llx
-245 @lly 551 @urx 547 @ury 2664 @rwi @setspecial
-%%BeginDocument: sun210_figures/fsremap.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 107 245 551 547
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/10 17:51:58
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5506.55 5042.15 m
-5506.55 5244.95 5340.95 5410.55 5138.15 5410.55 c
-1500.95 5410.55 l
-1298.15 5410.55 1132.55 5244.95 1132.55 5042.15 c
-1132.55 2828.15 l
-1132.55 2625.35 1298.15 2459.75 1500.95 2459.75 c
-5138.15 2459.75 l
-5340.95 2459.75 5506.55 2625.35 5506.55 2828.15 c
-f*
-1 g
-5441.75 5097.35 m
-5441.75 5300.15 5277.35 5464.55 5074.55 5464.55 c
-1445.75 5464.55 l
-1242.95 5464.55 1078.55 5300.15 1078.55 5097.35 c
-1078.55 2891.75 l
-1078.55 2688.95 1242.95 2524.55 1445.75 2524.55 c
-5074.55 2524.55 l
-5277.35 2524.55 5441.75 2688.95 5441.75 2891.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5441.75 5097.35 m
-5441.75 5300.15 5277.35 5464.55 5074.55 5464.55 c
-1445.75 5464.55 l
-1242.95 5464.55 1078.55 5300.15 1078.55 5097.35 c
-1078.55 2891.75 l
-1078.55 2688.95 1242.95 2524.55 1445.75 2524.55 c
-5074.55 2524.55 l
-5277.35 2524.55 5441.75 2688.95 5441.75 2891.75 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1563.35 5256.95 l
-1451.75 5256.95 1360.55 5165.75 1360.55 5055.35 c
-1360.55 4917.35 l
-1360.55 4806.95 1451.75 4715.75 1563.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-f*
-0 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-h
-S
-0.201248 i
-1539.33 5152 m
-1425.22 5152 l
-1425.22 5147 l
-1439.11 5146.2 1443 5143.18 1443 5132.72 c
-1443 5035.32 l
-1443 5024.85 1440.17 5022.64 1425.22 5021.03 c
-1425.22 5016 l
-1497.67 5016 l
-1497.67 5021 l
-1479.15 5021.81 1476 5024.23 1476 5035.32 c
-1476 5082.21 l
-1496.22 5081.81 1503.55 5074.36 1506.32 5051.02 c
-1511.35 5051.02 l
-1511.35 5119.04 l
-1506.32 5119.04 l
-1502.76 5096.1 1495.82 5089.05 1476 5089.05 c
-1476 5135.74 l
-1476 5143.19 1478.52 5145 1488.41 5145 c
-1507.13 5145 1518.8 5141.64 1525.04 5134.74 c
-1529.47 5129.71 1531.68 5124.27 1534.5 5111.59 c
-1539.33 5111.59 l
-h
-1544.96 5016 m
-f*
-1589.19 5109 m
-1550.84 5109 l
-1550.84 5103.95 l
-1559.49 5102.74 1562 5100.12 1562 5092.07 c
-1562 5032.9 l
-1562 5024.65 1559.93 5022.44 1550.84 5020.83 c
-1550.84 5016 l
-1604.37 5016 l
-1604.37 5020.83 l
-1592.09 5021.63 1590 5024.25 1590 5036.73 c
-1590 5074.76 l
-1590 5085.23 1595.49 5093.88 1601.95 5093.88 c
-1603.56 5093.88 1605.37 5092.47 1607.59 5089.25 c
-1611.41 5083.82 1614.43 5082.01 1619.66 5082.01 c
-1627.11 5082.01 1632.34 5087.64 1632.34 5095.29 c
-1632.34 5104.55 1625.5 5111.41 1616.04 5111.41 c
-1606.1 5111.41 1598.54 5106.12 1589.19 5092.27 c
-h
-1634.35 5016 m
-f*
-1729.19 5028.88 m
-1727.18 5026.87 l
-1726.57 5026.26 1725.97 5026.06 1724.96 5026.06 c
-1722.15 5026.06 1721 5027.67 1721 5031.09 c
-1721 5083.62 l
-1721 5100.73 1705.6 5111.42 1680.89 5111.42 c
-1658.15 5111.42 1642.85 5101.06 1642.85 5085.83 c
-1642.85 5077.38 1647.69 5072.55 1655.94 5072.55 c
-1663.99 5072.55 1669.62 5077.38 1669.62 5084.22 c
-1669.62 5087.04 1668.61 5089.66 1666 5092.88 c
-1664.19 5094.89 1663.58 5096.1 1663.58 5097.3 c
-1663.58 5101.53 1669.02 5104.42 1676.26 5104.42 c
-1688.14 5104.42 1693.86 5099.08 1693.86 5087.04 c
-1693.86 5072.35 l
-1669.91 5065.1 1660.29 5061.48 1652.51 5056.45 c
-1643.46 5050.41 1639 5043.37 1639 5034.52 c
-1639 5022.24 1648.27 5013.18 1661.17 5013.18 c
-1672.84 5013.18 1682.1 5017.21 1693.17 5027.27 c
-1695.38 5017.01 1699.81 5013.18 1709.67 5013.18 c
-1718.32 5013.18 1724.56 5016.4 1732.21 5024.65 c
-h
-1693 5036.13 m
-1687.55 5029.89 1683.52 5027.47 1678.68 5027.47 c
-1672.64 5027.47 1668 5032.91 1668 5040.96 c
-1668 5052.63 1676.61 5060.88 1693 5065.31 c
-h
-1734.62 5016 m
-f*
-1776.4 5109 m
-1737.7 5109 l
-1737.7 5103.95 l
-1746.55 5102.74 1749 5100.32 1749 5092.07 c
-1749 5032.9 l
-1749 5024.65 1746.74 5022.44 1737.7 5020.83 c
-1737.7 5016 l
-1786 5016 l
-1786 5020.83 l
-1778.95 5021.84 1777 5024.65 1777 5032.3 c
-1777 5086.03 l
-1777 5087.04 1779.87 5090.66 1782.18 5092.88 c
-1786.4 5096.1 1790.02 5098.42 1793.65 5098.42 c
-1801.5 5098.42 1805 5093.59 1805 5081 c
-1805 5032.3 l
-1805 5024.05 1802.68 5021.43 1794.85 5020.83 c
-1794.85 5016 l
-1841.95 5016 l
-1841.95 5020.83 l
-1834.9 5021.64 1833 5024.65 1833 5032.3 c
-1833 5086.03 l
-1833 5087.04 1835.73 5090.46 1837.92 5092.68 c
-1842.35 5096.1 1845.97 5098.42 1849.59 5098.42 c
-1857.24 5098.42 1860 5093.38 1860 5081 c
-1860 5032.3 l
-1860 5023.85 1857.85 5021.43 1850.4 5020.83 c
-1850.4 5016 l
-1898.3 5016 l
-1898.3 5021 l
-1890.45 5021.4 1888 5023.78 1888 5032.3 c
-1888 5082.81 l
-1888 5100.12 1877.43 5111.42 1861.07 5111.42 c
-1849.59 5111.42 1841.95 5106.73 1831.48 5093.68 c
-1825.44 5106.36 1818.4 5111.42 1805.72 5111.42 c
-1792.95 5111.42 1783.98 5105.91 1776.4 5093.68 c
-h
-1901.64 5016 m
-f*
-1979.9 5041.16 m
-1971.65 5031.29 1965.61 5027.18 1956.96 5027.18 c
-1949.31 5027.18 1943.27 5030.77 1939.25 5037.94 c
-1935.43 5044.54 1933.82 5051.56 1933.01 5066 c
-1983.73 5066 l
-1982.52 5082.36 1979.5 5091.43 1973.26 5099.12 c
-1966.82 5106.96 1957.36 5111.42 1946.09 5111.42 c
-1920.94 5111.42 1904.03 5091.4 1904.03 5061.88 c
-1904.03 5032.5 1920.53 5013.18 1945.49 5013.18 c
-1961.79 5013.18 1971.65 5019.42 1984.73 5038.34 c
-h
-1932 5073 m
-1932.61 5096.96 1936.23 5104.42 1946.09 5104.42 c
-1951.93 5104.42 1955.55 5101.38 1957.16 5095.49 c
-1958.17 5091.67 1958.57 5086.03 1958.97 5075.77 c
-1958.97 5073 l
-h
-1988.35 5016 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -5016]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-5052.95 3933.35 m
-5052.95 4043.75 4961.75 4134.95 4850.15 4134.95 c
-4353.35 4134.95 l
-4241.75 4134.95 4150.55 4043.75 4150.55 3933.35 c
-4150.55 3795.35 l
-4150.55 3684.95 4241.75 3593.75 4353.35 3593.75 c
-4850.15 3593.75 l
-4961.75 3593.75 5052.95 3684.95 5052.95 3795.35 c
-f*
-1 g
-4983.35 3989.75 m
-4983.35 4096.55 4894.55 4184.15 4785.35 4184.15 c
-4299.35 4184.15 l
-4190.15 4184.15 4101.35 4096.55 4101.35 3989.75 c
-4101.35 3857.75 l
-4101.35 3750.95 4190.15 3663.35 4299.35 3663.35 c
-4785.35 3663.35 l
-4894.55 3663.35 4983.35 3750.95 4983.35 3857.75 c
-f*
-16 w
-0 g
-4983.35 3989.75 m
-4983.35 4096.55 4894.55 4184.15 4785.35 4184.15 c
-4299.35 4184.15 l
-4190.15 4184.15 4101.35 4096.55 4101.35 3989.75 c
-4101.35 3857.75 l
-4101.35 3750.95 4190.15 3663.35 4299.35 3663.35 c
-4785.35 3663.35 l
-4894.55 3663.35 4983.35 3750.95 4983.35 3857.75 c
-h
-S
-0.201248 i
-4329.33 4030 m
-4215.22 4030 l
-4215.22 4025 l
-4229.11 4024.2 4233 4021.18 4233 4010.72 c
-4233 3913.32 l
-4233 3902.85 4230.17 3900.64 4215.22 3899.03 c
-4215.22 3894 l
-4287.67 3894 l
-4287.67 3899 l
-4269.15 3899.81 4266 3902.23 4266 3913.32 c
-4266 3960.21 l
-4286.22 3959.81 4293.55 3952.36 4296.32 3929.02 c
-4301.35 3929.02 l
-4301.35 3997.04 l
-4296.32 3997.04 l
-4292.76 3974.1 4285.82 3967.05 4266 3967.05 c
-4266 4013.74 l
-4266 4021.19 4268.52 4023 4278.41 4023 c
-4297.13 4023 4308.8 4019.64 4315.04 4012.74 c
-4319.47 4007.71 4321.68 4002.27 4324.5 3989.59 c
-4329.33 3989.59 l
-h
-4334.96 3894 m
-f*
-4379.19 3987 m
-4340.84 3987 l
-4340.84 3981.95 l
-4349.49 3980.74 4352 3978.12 4352 3970.07 c
-4352 3910.9 l
-4352 3902.65 4349.93 3900.44 4340.84 3898.83 c
-4340.84 3894 l
-4394.37 3894 l
-4394.37 3898.83 l
-4382.09 3899.63 4380 3902.25 4380 3914.73 c
-4380 3952.76 l
-4380 3963.23 4385.49 3971.88 4391.95 3971.88 c
-4393.56 3971.88 4395.37 3970.47 4397.59 3967.25 c
-4401.41 3961.82 4404.43 3960.01 4409.66 3960.01 c
-4417.11 3960.01 4422.34 3965.64 4422.34 3973.29 c
-4422.34 3982.55 4415.5 3989.41 4406.04 3989.41 c
-4396.1 3989.41 4388.54 3984.12 4379.19 3970.27 c
-h
-4424.35 3894 m
-f*
-4519.19 3906.88 m
-4517.18 3904.87 l
-4516.57 3904.26 4515.97 3904.06 4514.96 3904.06 c
-4512.15 3904.06 4511 3905.67 4511 3909.09 c
-4511 3961.62 l
-4511 3978.73 4495.6 3989.42 4470.89 3989.42 c
-4448.15 3989.42 4432.85 3979.06 4432.85 3963.83 c
-4432.85 3955.38 4437.69 3950.55 4445.94 3950.55 c
-4453.99 3950.55 4459.62 3955.38 4459.62 3962.22 c
-4459.62 3965.04 4458.61 3967.66 4456 3970.88 c
-4454.19 3972.89 4453.58 3974.1 4453.58 3975.3 c
-4453.58 3979.53 4459.02 3982.42 4466.26 3982.42 c
-4478.14 3982.42 4483.86 3977.08 4483.86 3965.04 c
-4483.86 3950.35 l
-4459.91 3943.1 4450.29 3939.48 4442.51 3934.45 c
-4433.46 3928.41 4429 3921.37 4429 3912.52 c
-4429 3900.24 4438.27 3891.18 4451.17 3891.18 c
-4462.84 3891.18 4472.1 3895.21 4483.17 3905.27 c
-4485.38 3895.01 4489.81 3891.18 4499.67 3891.18 c
-4508.32 3891.18 4514.56 3894.4 4522.21 3902.65 c
-h
-4483 3914.13 m
-4477.55 3907.89 4473.52 3905.47 4468.68 3905.47 c
-4462.64 3905.47 4458 3910.91 4458 3918.96 c
-4458 3930.63 4466.61 3938.88 4483 3943.31 c
-h
-4524.62 3894 m
-f*
-4566.4 3987 m
-4527.7 3987 l
-4527.7 3981.95 l
-4536.55 3980.74 4539 3978.32 4539 3970.07 c
-4539 3910.9 l
-4539 3902.65 4536.74 3900.44 4527.7 3898.83 c
-4527.7 3894 l
-4576 3894 l
-4576 3898.83 l
-4568.95 3899.84 4567 3902.65 4567 3910.3 c
-4567 3964.03 l
-4567 3965.04 4569.87 3968.66 4572.18 3970.88 c
-4576.4 3974.1 4580.02 3976.42 4583.65 3976.42 c
-4591.5 3976.42 4595 3971.59 4595 3959 c
-4595 3910.3 l
-4595 3902.05 4592.68 3899.43 4584.85 3898.83 c
-4584.85 3894 l
-4631.95 3894 l
-4631.95 3898.83 l
-4624.9 3899.64 4623 3902.65 4623 3910.3 c
-4623 3964.03 l
-4623 3965.04 4625.73 3968.46 4627.92 3970.68 c
-4632.35 3974.1 4635.97 3976.42 4639.59 3976.42 c
-4647.24 3976.42 4650 3971.38 4650 3959 c
-4650 3910.3 l
-4650 3901.85 4647.85 3899.43 4640.4 3898.83 c
-4640.4 3894 l
-4688.3 3894 l
-4688.3 3899 l
-4680.45 3899.4 4678 3901.78 4678 3910.3 c
-4678 3960.81 l
-4678 3978.12 4667.43 3989.42 4651.07 3989.42 c
-4639.59 3989.42 4631.95 3984.73 4621.48 3971.68 c
-4615.44 3984.36 4608.4 3989.42 4595.72 3989.42 c
-4582.95 3989.42 4573.98 3983.91 4566.4 3971.68 c
-h
-4691.64 3894 m
-f*
-4769.9 3919.16 m
-4761.65 3909.29 4755.61 3905.18 4746.96 3905.18 c
-4739.31 3905.18 4733.27 3908.77 4729.25 3915.94 c
-4725.43 3922.54 4723.82 3929.56 4723.01 3944 c
-4773.73 3944 l
-4772.52 3960.36 4769.5 3969.43 4763.26 3977.12 c
-4756.82 3984.96 4747.36 3989.42 4736.09 3989.42 c
-4710.94 3989.42 4694.03 3969.4 4694.03 3939.88 c
-4694.03 3910.5 4710.53 3891.18 4735.49 3891.18 c
-4751.79 3891.18 4761.65 3897.42 4774.73 3916.34 c
-h
-4722 3951 m
-4722.61 3974.96 4726.23 3982.42 4736.09 3982.42 c
-4741.93 3982.42 4745.55 3979.38 4747.16 3973.49 c
-4748.17 3969.67 4748.57 3964.03 4748.97 3953.77 c
-4748.97 3951 l
-h
-4778.35 3894 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4814 -3892]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3804.95 3548.15 m
-3804.95 3658.55 3713.75 3749.75 3602.15 3749.75 c
-3106.55 3749.75 l
-2994.95 3749.75 2903.75 3658.55 2903.75 3548.15 c
-2903.75 3410.15 l
-2903.75 3299.75 2994.95 3208.55 3106.55 3208.55 c
-3602.15 3208.55 l
-3713.75 3208.55 3804.95 3299.75 3804.95 3410.15 c
-f*
-1 g
-3735.35 3604.55 m
-3735.35 3711.35 3646.55 3798.95 3537.35 3798.95 c
-3052.55 3798.95 l
-2943.35 3798.95 2854.55 3711.35 2854.55 3604.55 c
-2854.55 3472.55 l
-2854.55 3365.75 2943.35 3278.15 3052.55 3278.15 c
-3537.35 3278.15 l
-3646.55 3278.15 3735.35 3365.75 3735.35 3472.55 c
-f*
-0 g
-3735.35 3604.55 m
-3735.35 3711.35 3646.55 3798.95 3537.35 3798.95 c
-3052.55 3798.95 l
-2943.35 3798.95 2854.55 3711.35 2854.55 3604.55 c
-2854.55 3472.55 l
-2854.55 3365.75 2943.35 3278.15 3052.55 3278.15 c
-3537.35 3278.15 l
-3646.55 3278.15 3735.35 3365.75 3735.35 3472.55 c
-h
-S
-0.201248 i
-3082.33 3645 m
-2968.22 3645 l
-2968.22 3640 l
-2982.11 3639.2 2986 3636.18 2986 3625.72 c
-2986 3528.32 l
-2986 3517.85 2983.17 3515.64 2968.22 3514.03 c
-2968.22 3509 l
-3040.67 3509 l
-3040.67 3514 l
-3022.15 3514.81 3019 3517.23 3019 3528.32 c
-3019 3575.21 l
-3039.22 3574.81 3046.55 3567.36 3049.32 3544.02 c
-3054.35 3544.02 l
-3054.35 3612.04 l
-3049.32 3612.04 l
-3045.76 3589.1 3038.82 3582.05 3019 3582.05 c
-3019 3628.74 l
-3019 3636.19 3021.52 3638 3031.41 3638 c
-3050.13 3638 3061.8 3634.64 3068.04 3627.74 c
-3072.47 3622.71 3074.68 3617.27 3077.5 3604.59 c
-3082.33 3604.59 l
-h
-3087.96 3509 m
-f*
-3131.19 3602 m
-3092.84 3602 l
-3092.84 3596.95 l
-3101.49 3595.74 3104 3593.12 3104 3585.07 c
-3104 3525.9 l
-3104 3517.65 3101.93 3515.44 3092.84 3513.83 c
-3092.84 3509 l
-3146.37 3509 l
-3146.37 3513.83 l
-3134.09 3514.63 3132 3517.25 3132 3529.73 c
-3132 3567.76 l
-3132 3578.23 3137.49 3586.88 3143.95 3586.88 c
-3145.56 3586.88 3147.37 3585.47 3149.59 3582.25 c
-3153.41 3576.82 3156.43 3575.01 3161.66 3575.01 c
-3169.11 3575.01 3174.34 3580.64 3174.34 3588.29 c
-3174.34 3597.55 3167.5 3604.41 3158.04 3604.41 c
-3148.1 3604.41 3140.54 3599.12 3131.19 3585.27 c
-h
-3176.35 3509 m
-f*
-3271.19 3521.88 m
-3269.18 3519.87 l
-3268.57 3519.26 3267.97 3519.06 3266.96 3519.06 c
-3264.15 3519.06 3263 3520.67 3263 3524.09 c
-3263 3576.62 l
-3263 3593.73 3247.6 3604.42 3222.89 3604.42 c
-3200.15 3604.42 3184.85 3594.06 3184.85 3578.83 c
-3184.85 3570.38 3189.69 3565.55 3197.94 3565.55 c
-3205.99 3565.55 3211.62 3570.38 3211.62 3577.22 c
-3211.62 3580.04 3210.61 3582.66 3208 3585.88 c
-3206.19 3587.89 3205.58 3589.1 3205.58 3590.3 c
-3205.58 3594.53 3211.02 3597.42 3218.26 3597.42 c
-3230.14 3597.42 3235.86 3592.08 3235.86 3580.04 c
-3235.86 3565.35 l
-3211.91 3558.1 3202.29 3554.48 3194.51 3549.45 c
-3185.46 3543.41 3181 3536.37 3181 3527.52 c
-3181 3515.24 3190.27 3506.18 3203.17 3506.18 c
-3214.84 3506.18 3224.1 3510.21 3235.17 3520.27 c
-3237.38 3510.01 3241.81 3506.18 3251.67 3506.18 c
-3260.32 3506.18 3266.56 3509.4 3274.21 3517.65 c
-h
-3235 3529.13 m
-3229.55 3522.89 3225.52 3520.47 3220.68 3520.47 c
-3214.64 3520.47 3210 3525.91 3210 3533.96 c
-3210 3545.63 3218.61 3553.88 3235 3558.31 c
-h
-3276.62 3509 m
-f*
-3318.4 3602 m
-3279.7 3602 l
-3279.7 3596.95 l
-3288.55 3595.74 3291 3593.32 3291 3585.07 c
-3291 3525.9 l
-3291 3517.65 3288.74 3515.44 3279.7 3513.83 c
-3279.7 3509 l
-3328 3509 l
-3328 3513.83 l
-3320.95 3514.84 3319 3517.65 3319 3525.3 c
-3319 3579.03 l
-3319 3580.04 3321.87 3583.66 3324.18 3585.88 c
-3328.4 3589.1 3332.02 3591.42 3335.65 3591.42 c
-3343.5 3591.42 3347 3586.59 3347 3574 c
-3347 3525.3 l
-3347 3517.05 3344.68 3514.43 3336.85 3513.83 c
-3336.85 3509 l
-3383.95 3509 l
-3383.95 3513.83 l
-3376.9 3514.64 3375 3517.65 3375 3525.3 c
-3375 3579.03 l
-3375 3580.04 3377.73 3583.46 3379.92 3585.68 c
-3384.35 3589.1 3387.97 3591.42 3391.59 3591.42 c
-3399.24 3591.42 3402 3586.38 3402 3574 c
-3402 3525.3 l
-3402 3516.85 3399.85 3514.43 3392.4 3513.83 c
-3392.4 3509 l
-3440.3 3509 l
-3440.3 3514 l
-3432.45 3514.4 3430 3516.78 3430 3525.3 c
-3430 3575.81 l
-3430 3593.12 3419.43 3604.42 3403.07 3604.42 c
-3391.59 3604.42 3383.95 3599.73 3373.48 3586.68 c
-3367.44 3599.36 3360.4 3604.42 3347.72 3604.42 c
-3334.95 3604.42 3325.98 3598.91 3318.4 3586.68 c
-h
-3443.64 3509 m
-f*
-3523.9 3534.16 m
-3515.65 3524.29 3509.61 3520.18 3500.96 3520.18 c
-3493.31 3520.18 3487.27 3523.77 3483.25 3530.94 c
-3479.43 3537.54 3477.82 3544.56 3477.01 3559 c
-3527.73 3559 l
-3526.52 3575.36 3523.5 3584.43 3517.26 3592.12 c
-3510.82 3599.96 3501.36 3604.42 3490.09 3604.42 c
-3464.94 3604.42 3448.03 3584.4 3448.03 3554.88 c
-3448.03 3525.5 3464.53 3506.18 3489.49 3506.18 c
-3505.79 3506.18 3515.65 3512.42 3528.73 3531.34 c
-h
-3476 3566 m
-3476.61 3589.96 3480.23 3597.42 3490.09 3597.42 c
-3495.93 3597.42 3499.55 3594.38 3501.16 3588.49 c
-3502.17 3584.67 3502.57 3579.03 3502.97 3568.77 c
-3502.97 3566 l
-h
-3532.35 3509 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -3509]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-8 w
-1751.75 4750.55 m
-1751.75 4758.95 1751.75 4758.95 1751.75 4750.55 c
-1751.75 4602.95 1791.35 4461.35 1863.35 4360.55 c
-S
-1804.55 4366.55 m
-1853.75 4382.15 l
-1878.95 4427.75 l
-1940.15 4280.15 l
-f*
-2244.95 3784.55 m
-2334.95 3666.95 2519.75 3582.95 2740.55 3561.35 c
-S
-2699.75 3518.15 m
-2721.35 3564.95 l
-2705.75 3612.95 l
-2854.55 3556.55 l
-f*
-2831.75 5164.55 m
-2729.75 5264.15 2584.55 5321.75 2430.95 5321.75 c
-2326.55 5321.75 2224.55 5295.35 2136.95 5244.95 c
-S
-2766.95 5158.55 m
-2814.95 5174.15 l
-2838.95 5219.75 l
-2902.55 5073.35 l
-f*
-32 w
-3062.15 4598.15 m
-3158.15 4380.95 3362.15 4242.95 3585.35 4242.95 c
-3738.95 4242.95 3887.75 4310.15 3995.75 4427.75 c
-S
-4016.15 4337.75 m
-3971.75 4407.35 l
-3891.35 4428.95 l
-4100.15 4582.55 l
-f*
-0.564706 g
-3616.55 4779.35 m
-3480.95 4816.55 l
-3576.95 4871.75 l
-3423.35 4881.35 l
-3466.55 4950.95 l
-3318.95 4930.55 l
-3300.95 5002.55 l
-3180.95 4956.95 l
-3106.55 5020.55 l
-3029.75 4956.95 l
-2909.75 5002.55 l
-2891.75 4930.55 l
-2744.15 4950.95 l
-2787.35 4881.35 l
-2633.75 4871.75 l
-2729.75 4816.55 l
-2595.35 4779.35 l
-2729.75 4744.55 l
-2633.75 4688.15 l
-2787.35 4679.75 l
-2744.15 4610.15 l
-2891.75 4629.35 l
-2909.75 4558.55 l
-3029.75 4602.95 l
-3106.55 4539.35 l
-3180.95 4602.95 l
-3300.95 4558.55 l
-3318.95 4629.35 l
-3466.55 4610.15 l
-3423.35 4679.75 l
-3576.95 4688.15 l
-3480.95 4744.55 l
-f*
-1 g
-3556.55 4839.35 m
-3420.95 4876.55 l
-3516.95 4931.75 l
-3363.35 4941.35 l
-3406.55 5010.95 l
-3258.95 4990.55 l
-3240.95 5062.55 l
-3120.95 5016.95 l
-3046.55 5080.55 l
-2969.75 5016.95 l
-2849.75 5062.55 l
-2831.75 4990.55 l
-2684.15 5010.95 l
-2727.35 4941.35 l
-2573.75 4931.75 l
-2669.75 4876.55 l
-2535.35 4839.35 l
-2669.75 4804.55 l
-2573.75 4748.15 l
-2727.35 4739.75 l
-2684.15 4670.15 l
-2831.75 4689.35 l
-2849.75 4618.55 l
-2969.75 4662.95 l
-3046.55 4599.35 l
-3120.95 4662.95 l
-3240.95 4618.55 l
-3258.95 4689.35 l
-3406.55 4670.15 l
-3363.35 4739.75 l
-3516.95 4748.15 l
-3420.95 4804.55 l
-f*
-0 g
-3556.55 4839.35 m
-3420.95 4876.55 l
-3516.95 4931.75 l
-3363.35 4941.35 l
-3406.55 5010.95 l
-3258.95 4990.55 l
-3240.95 5062.55 l
-3120.95 5016.95 l
-3046.55 5080.55 l
-2969.75 5016.95 l
-2849.75 5062.55 l
-2831.75 4990.55 l
-2684.15 5010.95 l
-2727.35 4941.35 l
-2573.75 4931.75 l
-2669.75 4876.55 l
-2535.35 4839.35 l
-2669.75 4804.55 l
-2573.75 4748.15 l
-2727.35 4739.75 l
-2684.15 4670.15 l
-2831.75 4689.35 l
-2849.75 4618.55 l
-2969.75 4662.95 l
-3046.55 4599.35 l
-3120.95 4662.95 l
-3240.95 4618.55 l
-3258.95 4689.35 l
-3406.55 4670.15 l
-3363.35 4739.75 l
-3516.95 4748.15 l
-3420.95 4804.55 l
-3556.55 4839.35 l
-3516.95 4839.35 l
-3394.55 4808.15 l
-3483.35 4756.55 l
-3346.55 4748.15 l
-3386.15 4682.15 l
-3250.55 4701.35 l
-3233.75 4631.75 l
-3118.55 4674.95 l
-3046.55 4612.55 l
-2972.15 4674.95 l
-2856.95 4631.75 l
-2840.15 4701.35 l
-2703.35 4682.15 l
-2745.35 4748.15 l
-2607.35 4756.55 l
-2696.15 4808.15 l
-2573.75 4839.35 l
-2694.95 4871.75 l
-2607.35 4924.55 l
-2745.35 4931.75 l
-2703.35 4998.95 l
-2840.15 4979.75 l
-2856.95 5048.15 l
-2972.15 5006.15 l
-3046.55 5068.55 l
-3118.55 5006.15 l
-3233.75 5048.15 l
-3250.55 4979.75 l
-3386.15 4998.95 l
-3346.55 4931.75 l
-3483.35 4924.55 l
-3394.55 4871.75 l
-3516.95 4839.35 l
-3556.55 4839.35 l
-f*
-0.2 i
-2867.08 4890.76 m
-2847.08 4816.52 l
-2844.52 4807.88 2841.48 4805.64 2831.08 4805 c
-2831.08 4801 l
-2881 4801 l
-2881 4805 l
-2871.72 4805.48 2869.48 4806.76 2869.48 4811.88 c
-2869.48 4813.64 2869.8 4815.4 2870.76 4819.08 c
-2870.92 4819.88 l
-2871.08 4820.68 l
-2890.76 4892.52 l
-2893.16 4900.84 2895.56 4903.08 2903.72 4904.04 c
-2903.72 4908 l
-2869.8 4908 l
-2820.2 4831.24 l
-2811.56 4908 l
-2776.2 4908 l
-2776.2 4904 l
-2786.28 4903.52 2787.72 4902.89 2787.72 4898.44 c
-2787.72 4896.2 2787.08 4893.32 2785.96 4889.16 c
-2768.52 4829.48 l
-2762.12 4808.68 2761 4806.92 2752.36 4805 c
-2752.36 4801 l
-2785.48 4801 l
-2785.48 4805 l
-2775.24 4806.28 2772.68 4808.2 2772.68 4814.76 c
-2772.68 4817.48 2773.48 4821.48 2775.72 4829.48 c
-2791.88 4888.52 l
-2802.6 4799.08 l
-2807.08 4799.08 l
-h
-2899.24 4801 m
-f*
-2969.44 4821.32 m
-2962.88 4812.52 2960.48 4809.76 2957.92 4809.76 c
-2956.64 4809.76 2956 4810.86 2956 4812.52 c
-2956 4816.52 2957.44 4823.08 2961.44 4836.2 c
-2972.8 4873.96 l
-2955.04 4872.84 l
-2952.16 4863.4 l
-2950.72 4871.56 2947.2 4875.08 2940.32 4875.08 c
-2920.64 4875.08 2897 4844.27 2897 4819.24 c
-2897 4807.08 2903.74 4798.92 2913.92 4798.92 c
-2923.68 4798.92 2931.04 4804.68 2940.16 4820.04 c
-2938.24 4813.48 2938 4811.56 2938 4809.32 c
-2938 4803.4 2942.76 4798.76 2948.64 4798.76 c
-2956.16 4798.76 2963.52 4805 2972.8 4818.92 c
-h
-2942.56 4868.2 m
-2946.08 4867.88 2948.56 4865 2948.56 4860.68 c
-2948.56 4851.08 2943.24 4833.32 2936.96 4822.28 c
-2932.64 4814.44 2927.84 4809.92 2923.52 4809.92 c
-2919.36 4809.92 2916 4813.75 2916 4818.92 c
-2916 4827.24 2921.42 4843.24 2928.16 4855.08 c
-2932.96 4863.56 2938.24 4868.52 2942.56 4868.2 c
-h
-2980 4801 m
-f*
-3013.56 4874.92 m
-2997.24 4872.36 2991 4871.4 2982.68 4870.44 c
-2982.68 4866 l
-2989.88 4865.69 2991.32 4865.07 2991.32 4862.12 c
-2991.32 4860.52 2990.04 4854.76 2987.8 4846.44 c
-2971.8 4784.36 l
-2968.76 4773.8 2967.48 4772.84 2959.8 4773 c
-2959.8 4768 l
-2999.64 4768 l
-2999.64 4773 l
-2991.64 4773.14 2989.24 4774.16 2989.24 4777.64 c
-2989.24 4779.88 2990.36 4784.68 2993.4 4795.88 c
-2994.52 4799.72 2994.52 4800.04 2995.16 4802.44 c
-3000.76 4799.56 3002.68 4798.92 3006.04 4798.92 c
-3027.8 4798.92 3050.36 4827.88 3050.36 4855.56 c
-3050.36 4867.4 3043.64 4875.08 3033.08 4875.08 c
-3023.96 4875.08 3016.92 4869.92 3007.48 4856.52 c
-h
-3024.12 4863.56 m
-3028.28 4863.24 3030.68 4859.56 3030.36 4854.44 c
-3029.72 4843.88 3024.6 4828.04 3018.84 4817.64 c
-3013.88 4809 3008.76 4803.92 3003.32 4803.92 c
-2999.8 4803.92 2997.08 4806.75 2997.08 4810.28 c
-2997.08 4813 2998.84 4819.56 3003.16 4834.12 c
-3006.68 4845.8 3008.12 4849.8 3010.52 4853.48 c
-3014.52 4859.72 3019.96 4863.88 3024.12 4863.56 c
-h
-3059 4801 m
-f*
-3094.56 4874.92 m
-3078.24 4872.36 3072 4871.4 3063.68 4870.44 c
-3063.68 4866 l
-3070.88 4865.69 3072.32 4865.07 3072.32 4862.12 c
-3072.32 4860.52 3071.04 4854.76 3068.8 4846.44 c
-3052.8 4784.36 l
-3049.76 4773.8 3048.48 4772.84 3040.8 4773 c
-3040.8 4768 l
-3080.64 4768 l
-3080.64 4773 l
-3072.64 4773.14 3070.24 4774.16 3070.24 4777.64 c
-3070.24 4779.88 3071.36 4784.68 3074.4 4795.88 c
-3075.52 4799.72 3075.52 4800.04 3076.16 4802.44 c
-3081.76 4799.56 3083.68 4798.92 3087.04 4798.92 c
-3108.8 4798.92 3131.36 4827.88 3131.36 4855.56 c
-3131.36 4867.4 3124.64 4875.08 3114.08 4875.08 c
-3104.96 4875.08 3097.92 4869.92 3088.48 4856.52 c
-h
-3105.12 4863.56 m
-3109.28 4863.24 3111.68 4859.56 3111.36 4854.44 c
-3110.72 4843.88 3105.6 4828.04 3099.84 4817.64 c
-3094.88 4809 3089.76 4803.92 3084.32 4803.92 c
-3080.8 4803.92 3078.08 4806.75 3078.08 4810.28 c
-3078.08 4813 3079.84 4819.56 3084.16 4834.12 c
-3087.68 4845.8 3089.12 4849.8 3091.52 4853.48 c
-3095.52 4859.72 3100.96 4863.88 3105.12 4863.56 c
-h
-3140 4801 m
-f*
-3174.56 4823.56 m
-3172.32 4820.36 l
-3168.16 4814.12 3164.48 4810.56 3162.08 4810.56 c
-3160.8 4810.56 3160 4811.77 3160 4813.16 c
-3160 4814.6 3160.62 4818.76 3161.12 4821.48 c
-3175.68 4874.92 l
-3167.22 4873 3156.26 4871.4 3144.04 4870.44 c
-3144.04 4866 l
-3145.44 4866 l
-3150.24 4866 3153.48 4864.44 3153.48 4861.48 c
-3153.48 4860.2 3152.71 4857.8 3151.68 4855.08 c
-3142.4 4820.68 l
-3141.12 4816.04 3141 4811.88 3141 4809.64 c
-3141 4803.56 3145.2 4799.56 3151.36 4799.56 c
-3160.96 4799.56 3166.88 4804.36 3178.08 4821.32 c
-h
-3170.88 4910.4 m
-3165.44 4910.4 3161 4905.46 3161 4900.04 c
-3161 4893.8 3165.26 4889.4 3171.04 4889.4 c
-3177.12 4889.4 3182 4893.86 3182 4899.56 c
-3182 4905.48 3177 4910.4 3170.88 4910.4 c
-h
-3184.48 4801 m
-f*
-3258.36 4822.6 m
-3251.96 4812.68 3249.88 4810.56 3247.16 4810.56 c
-3245.88 4810.56 3245 4811.63 3245 4813.16 c
-3245 4814.76 3245.94 4818.12 3248.92 4827.08 c
-3254.68 4844.52 l
-3257.24 4852.04 3259 4859.08 3259 4862.92 c
-3259 4870.76 3254.78 4875.08 3247.16 4875.08 c
-3241.24 4875.08 3235.48 4872.62 3231.16 4868.36 c
-3225.24 4862.76 3222.2 4858.92 3211.48 4843.08 c
-3221.72 4874.76 l
-3211.48 4872.52 3198.68 4870.92 3189.72 4870.6 c
-3189.72 4865.8 l
-3196.44 4865.65 3198.36 4864.92 3198.36 4862.12 c
-3198.36 4860.2 3196.12 4851.72 3191 4833.64 c
-3187.32 4820.68 3186.2 4816.52 3182.04 4801 c
-3201.4 4801 l
-3208.92 4828.68 3214.68 4842.6 3224.6 4855.56 c
-3227.8 4859.88 3232.76 4863.08 3235.64 4863.08 c
-3237.72 4863.08 3240 4861.63 3240 4860.04 c
-3240 4859.56 3239.54 4858.28 3238.84 4856.68 c
-3230.04 4830.12 l
-3227.48 4822.44 3226 4813.32 3226 4809.16 c
-3226 4803.08 3229.84 4799.56 3236.44 4799.56 c
-3246.04 4799.56 3252.6 4805 3261.88 4820.52 c
-h
-3271.96 4801 m
-f*
-3349.48 4870 m
-3331.72 4870 l
-3326.28 4873.58 3321.48 4875.08 3314.12 4875.08 c
-3294.44 4875.08 3278 4862.05 3278 4845.8 c
-3278 4837.64 3282.35 4831.88 3291.4 4828.2 c
-3278.28 4820.84 3276 4818.6 3276 4812.68 c
-3276 4807.56 3278.89 4804.52 3285.96 4802.12 c
-3276.04 4799.72 3272.84 4798.44 3269 4795.4 c
-3266.44 4793.16 3265 4789.32 3265 4785.48 c
-3265 4775.08 3276.56 4769 3294.76 4769 c
-3317.32 4769 3333 4778.72 3333 4792.52 c
-3333 4802.28 3326.6 4807.56 3309.16 4812.52 c
-3300.68 4814.92 l
-3295.56 4816.36 3292 4818.6 3292 4821 c
-3292 4823.56 3294.68 4826.28 3297 4826.28 c
-3297.8 4826.28 3298.92 4826.24 3300.2 4826.12 c
-3301.96 4825.64 3303.24 4825 3305.16 4825 c
-3312.2 4825 3319.4 4827.09 3325.48 4830.92 c
-3334.76 4836.2 3340 4844.36 3340 4853.96 c
-3340 4856.64 3339.59 4858.32 3338.76 4861 c
-3349.48 4861 l
-h
-3291.4 4800.04 m
-3293.32 4799.88 3305.48 4795.72 3309 4794.12 c
-3313.48 4791.88 3316 4789.16 3316 4785 c
-3316 4777.96 3308.8 4774 3296.36 4774 c
-3285.96 4774 3279 4779.1 3279 4786.44 c
-3279 4789.48 3280.32 4792.2 3283.24 4795.24 c
-3285.32 4797.32 3290.12 4800.2 3291.4 4800.04 c
-h
-3313.8 4870.08 m
-3317.96 4870.08 3321 4866.19 3321 4860.52 c
-3321 4855.08 3319.08 4847.4 3316.36 4841.48 c
-3313 4834.12 3308.84 4830 3303.88 4830 c
-3299.56 4830 3297 4833.52 3297 4839.88 c
-3297 4846.28 3299.79 4856.04 3303.24 4862.12 c
-3306.28 4867.4 3309.64 4870.08 3313.8 4870.08 c
-h
-3353 4801 m
-f*
-1 i
-0.564706 g
-2708.15 3969.35 m
-2573.75 4006.55 l
-2669.75 4061.75 l
-2516.15 4071.35 l
-2558.15 4140.95 l
-2410.55 4120.55 l
-2393.75 4192.55 l
-2273.75 4146.95 l
-2198.15 4210.55 l
-2122.55 4146.95 l
-2002.55 4192.55 l
-1984.55 4120.55 l
-1835.75 4140.95 l
-1880.15 4071.35 l
-1726.55 4061.75 l
-1822.55 4006.55 l
-1686.95 3969.35 l
-1822.55 3934.55 l
-1726.55 3878.15 l
-1880.15 3869.75 l
-1835.75 3800.15 l
-1984.55 3819.35 l
-2002.55 3748.55 l
-2122.55 3792.95 l
-2198.15 3729.35 l
-2273.75 3792.95 l
-2393.75 3748.55 l
-2410.55 3819.35 l
-2558.15 3800.15 l
-2516.15 3869.75 l
-2669.75 3878.15 l
-2573.75 3934.55 l
-f*
-1 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-f*
-0 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-2648.15 4029.35 l
-2609.75 4029.35 l
-2487.35 3998.15 l
-2576.15 3946.55 l
-2438.15 3938.15 l
-2478.95 3872.15 l
-2343.35 3891.35 l
-2326.55 3821.75 l
-2211.35 3864.95 l
-2138.15 3802.55 l
-2064.95 3864.95 l
-1949.75 3821.75 l
-1931.75 3891.35 l
-1796.15 3872.15 l
-1836.95 3938.15 l
-1700.15 3946.55 l
-1788.95 3998.15 l
-1666.55 4029.35 l
-1787.75 4061.75 l
-1700.15 4114.55 l
-1836.95 4121.75 l
-1796.15 4188.95 l
-1931.75 4169.75 l
-1949.75 4238.15 l
-2064.95 4196.15 l
-2138.15 4258.55 l
-2211.35 4196.15 l
-2326.55 4238.15 l
-2343.35 4169.75 l
-2478.95 4188.95 l
-2438.15 4121.75 l
-2576.15 4114.55 l
-2487.35 4061.75 l
-2609.75 4029.35 l
-2648.15 4029.35 l
-f*
-0.2 i
-1960.08 4080.76 m
-1940.08 4006.52 l
-1937.52 3997.88 1934.48 3995.64 1924.08 3995 c
-1924.08 3991 l
-1974 3991 l
-1974 3995 l
-1964.72 3995.48 1962.48 3996.76 1962.48 4001.88 c
-1962.48 4003.64 1962.8 4005.4 1963.76 4009.08 c
-1963.92 4009.88 l
-1964.08 4010.68 l
-1983.76 4082.52 l
-1986.16 4090.84 1988.56 4093.08 1996.72 4094.04 c
-1996.72 4098 l
-1962.8 4098 l
-1913.2 4021.24 l
-1904.56 4098 l
-1869.2 4098 l
-1869.2 4094 l
-1879.28 4093.52 1880.72 4092.89 1880.72 4088.44 c
-1880.72 4086.2 1880.08 4083.32 1878.96 4079.16 c
-1861.52 4019.48 l
-1855.12 3998.68 1854 3996.92 1845.36 3995 c
-1845.36 3991 l
-1878.48 3991 l
-1878.48 3995 l
-1868.24 3996.28 1865.68 3998.2 1865.68 4004.76 c
-1865.68 4007.48 1866.48 4011.48 1868.72 4019.48 c
-1884.88 4078.52 l
-1895.6 3989.08 l
-1900.08 3989.08 l
-h
-1992.24 3991 m
-f*
-2061.44 4011.32 m
-2054.88 4002.52 2052.48 3999.76 2049.92 3999.76 c
-2048.64 3999.76 2048 4000.86 2048 4002.52 c
-2048 4006.52 2049.44 4013.08 2053.44 4026.2 c
-2064.8 4063.96 l
-2047.04 4062.84 l
-2044.16 4053.4 l
-2042.72 4061.56 2039.2 4065.08 2032.32 4065.08 c
-2012.64 4065.08 1989 4034.27 1989 4009.24 c
-1989 3997.08 1995.74 3988.92 2005.92 3988.92 c
-2015.68 3988.92 2023.04 3994.68 2032.16 4010.04 c
-2030.24 4003.48 2030 4001.56 2030 3999.32 c
-2030 3993.4 2034.76 3988.76 2040.64 3988.76 c
-2048.16 3988.76 2055.52 3995 2064.8 4008.92 c
-h
-2034.56 4058.2 m
-2038.08 4057.88 2040.56 4055 2040.56 4050.68 c
-2040.56 4041.08 2035.24 4023.32 2028.96 4012.28 c
-2024.64 4004.44 2019.84 3999.92 2015.52 3999.92 c
-2011.36 3999.92 2008 4003.75 2008 4008.92 c
-2008 4017.24 2013.42 4033.24 2020.16 4045.08 c
-2024.96 4053.56 2030.24 4058.52 2034.56 4058.2 c
-h
-2072 3991 m
-f*
-2106.56 4064.92 m
-2090.24 4062.36 2084 4061.4 2075.68 4060.44 c
-2075.68 4056 l
-2082.88 4055.69 2084.32 4055.07 2084.32 4052.12 c
-2084.32 4050.52 2083.04 4044.76 2080.8 4036.44 c
-2064.8 3974.36 l
-2061.76 3963.8 2060.48 3962.84 2052.8 3963 c
-2052.8 3958 l
-2092.64 3958 l
-2092.64 3963 l
-2084.64 3963.14 2082.24 3964.16 2082.24 3967.64 c
-2082.24 3969.88 2083.36 3974.68 2086.4 3985.88 c
-2087.52 3989.72 2087.52 3990.04 2088.16 3992.44 c
-2093.76 3989.56 2095.68 3988.92 2099.04 3988.92 c
-2120.8 3988.92 2143.36 4017.88 2143.36 4045.56 c
-2143.36 4057.4 2136.64 4065.08 2126.08 4065.08 c
-2116.96 4065.08 2109.92 4059.92 2100.48 4046.52 c
-h
-2117.12 4053.56 m
-2121.28 4053.24 2123.68 4049.56 2123.36 4044.44 c
-2122.72 4033.88 2117.6 4018.04 2111.84 4007.64 c
-2106.88 3999 2101.76 3993.92 2096.32 3993.92 c
-2092.8 3993.92 2090.08 3996.75 2090.08 4000.28 c
-2090.08 4003 2091.84 4009.56 2096.16 4024.12 c
-2099.68 4035.8 2101.12 4039.8 2103.52 4043.48 c
-2107.52 4049.72 2112.96 4053.88 2117.12 4053.56 c
-h
-2152 3991 m
-f*
-2187.56 4064.92 m
-2171.24 4062.36 2165 4061.4 2156.68 4060.44 c
-2156.68 4056 l
-2163.88 4055.69 2165.32 4055.07 2165.32 4052.12 c
-2165.32 4050.52 2164.04 4044.76 2161.8 4036.44 c
-2145.8 3974.36 l
-2142.76 3963.8 2141.48 3962.84 2133.8 3963 c
-2133.8 3958 l
-2173.64 3958 l
-2173.64 3963 l
-2165.64 3963.14 2163.24 3964.16 2163.24 3967.64 c
-2163.24 3969.88 2164.36 3974.68 2167.4 3985.88 c
-2168.52 3989.72 2168.52 3990.04 2169.16 3992.44 c
-2174.76 3989.56 2176.68 3988.92 2180.04 3988.92 c
-2201.8 3988.92 2224.36 4017.88 2224.36 4045.56 c
-2224.36 4057.4 2217.64 4065.08 2207.08 4065.08 c
-2197.96 4065.08 2190.92 4059.92 2181.48 4046.52 c
-h
-2198.12 4053.56 m
-2202.28 4053.24 2204.68 4049.56 2204.36 4044.44 c
-2203.72 4033.88 2198.6 4018.04 2192.84 4007.64 c
-2187.88 3999 2182.76 3993.92 2177.32 3993.92 c
-2173.8 3993.92 2171.08 3996.75 2171.08 4000.28 c
-2171.08 4003 2172.84 4009.56 2177.16 4024.12 c
-2180.68 4035.8 2182.12 4039.8 2184.52 4043.48 c
-2188.52 4049.72 2193.96 4053.88 2198.12 4053.56 c
-h
-2233 3991 m
-f*
-2266.56 4013.56 m
-2264.32 4010.36 l
-2260.16 4004.12 2256.48 4000.56 2254.08 4000.56 c
-2252.8 4000.56 2252 4001.77 2252 4003.16 c
-2252 4004.6 2252.62 4008.76 2253.12 4011.48 c
-2267.68 4064.92 l
-2259.22 4063 2248.26 4061.4 2236.04 4060.44 c
-2236.04 4056 l
-2237.44 4056 l
-2242.24 4056 2245.48 4054.44 2245.48 4051.48 c
-2245.48 4050.2 2244.71 4047.8 2243.68 4045.08 c
-2234.4 4010.68 l
-2233.12 4006.04 2233 4001.88 2233 3999.64 c
-2233 3993.56 2237.2 3989.56 2243.36 3989.56 c
-2252.96 3989.56 2258.88 3994.36 2270.08 4011.32 c
-h
-2262.88 4100.4 m
-2257.44 4100.4 2253 4095.46 2253 4090.04 c
-2253 4083.8 2257.26 4079.4 2263.04 4079.4 c
-2269.12 4079.4 2274 4083.86 2274 4089.56 c
-2274 4095.48 2269 4100.4 2262.88 4100.4 c
-h
-2276.48 3991 m
-f*
-2351.36 4012.6 m
-2344.96 4002.68 2342.88 4000.56 2340.16 4000.56 c
-2338.88 4000.56 2338 4001.63 2338 4003.16 c
-2338 4004.76 2338.94 4008.12 2341.92 4017.08 c
-2347.68 4034.52 l
-2350.24 4042.04 2352 4049.08 2352 4052.92 c
-2352 4060.76 2347.78 4065.08 2340.16 4065.08 c
-2334.24 4065.08 2328.48 4062.62 2324.16 4058.36 c
-2318.24 4052.76 2315.2 4048.92 2304.48 4033.08 c
-2314.72 4064.76 l
-2304.48 4062.52 2291.68 4060.92 2282.72 4060.6 c
-2282.72 4055.8 l
-2289.44 4055.65 2291.36 4054.92 2291.36 4052.12 c
-2291.36 4050.2 2289.12 4041.72 2284 4023.64 c
-2280.32 4010.68 2279.2 4006.52 2275.04 3991 c
-2294.4 3991 l
-2301.92 4018.68 2307.68 4032.6 2317.6 4045.56 c
-2320.8 4049.88 2325.76 4053.08 2328.64 4053.08 c
-2330.72 4053.08 2333 4051.63 2333 4050.04 c
-2333 4049.56 2332.54 4048.28 2331.84 4046.68 c
-2323.04 4020.12 l
-2320.48 4012.44 2319 4003.32 2319 3999.16 c
-2319 3993.08 2322.84 3989.56 2329.44 3989.56 c
-2339.04 3989.56 2345.6 3995 2354.88 4010.52 c
-h
-2364.96 3991 m
-f*
-2442.48 4060 m
-2424.72 4060 l
-2419.28 4063.58 2414.48 4065.08 2407.12 4065.08 c
-2387.44 4065.08 2371 4052.05 2371 4035.8 c
-2371 4027.64 2375.35 4021.88 2384.4 4018.2 c
-2371.28 4010.84 2369 4008.6 2369 4002.68 c
-2369 3997.56 2371.89 3994.52 2378.96 3992.12 c
-2369.04 3989.72 2365.84 3988.44 2362 3985.4 c
-2359.44 3983.16 2358 3979.32 2358 3975.48 c
-2358 3965.08 2369.56 3959 2387.76 3959 c
-2410.32 3959 2426 3968.72 2426 3982.52 c
-2426 3992.28 2419.6 3997.56 2402.16 4002.52 c
-2393.68 4004.92 l
-2388.56 4006.36 2385 4008.6 2385 4011 c
-2385 4013.56 2387.68 4016.28 2390 4016.28 c
-2390.8 4016.28 2391.92 4016.24 2393.2 4016.12 c
-2394.96 4015.64 2396.24 4015 2398.16 4015 c
-2405.2 4015 2412.4 4017.09 2418.48 4020.92 c
-2427.76 4026.2 2433 4034.36 2433 4043.96 c
-2433 4046.64 2432.59 4048.32 2431.76 4051 c
-2442.48 4051 l
-h
-2384.4 3990.04 m
-2386.32 3989.88 2398.48 3985.72 2402 3984.12 c
-2406.48 3981.88 2409 3979.16 2409 3975 c
-2409 3967.96 2401.8 3964 2389.36 3964 c
-2378.96 3964 2372 3969.1 2372 3976.44 c
-2372 3979.48 2373.32 3982.2 2376.24 3985.24 c
-2378.32 3987.32 2383.12 3990.2 2384.4 3990.04 c
-h
-2406.8 4060.08 m
-2410.96 4060.08 2414 4056.19 2414 4050.52 c
-2414 4045.08 2412.08 4037.4 2409.36 4031.48 c
-2406 4024.12 2401.84 4020 2396.88 4020 c
-2392.56 4020 2390 4023.52 2390 4029.88 c
-2390 4036.28 2392.79 4046.04 2396.24 4052.12 c
-2399.28 4057.4 2402.64 4060.08 2406.8 4060.08 c
-h
-2446 3991 m
-f*
-1 i
-1 g
-4396.55 3387.35 m
-4476.95 3387.35 l
-4476.95 3233.75 l
-4643.75 3233.75 l
-4643.75 3387.35 l
-4726.55 3387.35 l
-4559.75 3538.55 l
-f*
-0 g
-4396.55 3387.35 m
-4476.95 3387.35 l
-4476.95 3233.75 l
-4643.75 3233.75 l
-4643.75 3387.35 l
-4726.55 3387.35 l
-4559.75 3538.55 l
-4396.55 3387.35 l
-4420.55 3396.95 l
-4559.75 3524.15 l
-4700.15 3396.95 l
-4634.15 3396.95 l
-4634.15 3243.35 l
-4487.75 3243.35 l
-4487.75 3396.95 l
-4420.55 3396.95 l
-4396.55 3387.35 l
-f*
-0.2 i
-4135.88 3119 m
-4135.88 3114 l
-4148.3 3113.29 4152 3110.45 4152 3101.4 c
-4152 3014.28 l
-4152 3005.1 4149.25 3002.94 4135.88 3001.5 c
-4135.88 2997 l
-4193.84 2997 l
-4224.26 2997 4244 3010.5 4244 3030.84 c
-4244 3039.12 4240.73 3046.32 4234.7 3051.9 c
-4228.4 3057.48 4222.28 3060 4209.68 3062.7 c
-4230.56 3068.82 4238 3076.2 4238 3089.88 c
-4238 3108.42 4221.55 3119 4191.5 3119 c
-h
-4181 3058.74 m
-4185.92 3058.74 l
-4204.46 3058.74 4213 3049.2 4213 3029.22 c
-4213 3011.76 4205.77 3003 4191.5 3003 c
-4183.58 3003 4181 3005.99 4181 3013.74 c
-h
-4181 3104.46 m
-4181 3110.94 4183.39 3114 4190.24 3114 c
-4202.84 3114 4209 3106.03 4209 3088.62 c
-4209 3069.72 4203.08 3064.68 4181 3064.14 c
-h
-4253.06 2997 m
-f*
-4338.14 3008.52 m
-4336.34 3006.72 l
-4335.8 3006.18 4335.26 3006 4334.36 3006 c
-4331.84 3006 4331 3007.44 4331 3010.5 c
-4331 3057.48 l
-4331 3072.78 4317.16 3082.16 4294.94 3082.16 c
-4274.6 3082.16 4260.92 3072.97 4260.92 3059.46 c
-4260.92 3051.9 4265.24 3047.58 4272.62 3047.58 c
-4279.82 3047.58 4284.86 3051.9 4284.86 3058.02 c
-4284.86 3060.54 4283.96 3062.88 4281.62 3065.76 c
-4280 3067.56 4279.46 3068.64 4279.46 3069.72 c
-4279.46 3073.5 4284.32 3076.16 4290.8 3076.16 c
-4301.42 3076.16 4306 3071.37 4306 3060.54 c
-4306 3047.4 l
-4284.89 3040.92 4276.41 3037.68 4269.56 3033.18 c
-4261.46 3027.78 4258 3021.48 4258 3013.56 c
-4258 3002.58 4266.07 2994.48 4277.3 2994.48 c
-4287.74 2994.48 4296.02 2998.08 4305.92 3007.08 c
-4307.9 2997.9 4311.86 2994.48 4320.68 2994.48 c
-4328.42 2994.48 4334 2997.36 4340.84 3004.74 c
-h
-4306 3015 m
-4301.04 3009.42 4297.37 3007.26 4292.96 3007.26 c
-4287.56 3007.26 4284 3012.12 4284 3019.32 c
-4284 3029.76 4291.57 3037.14 4306 3041.1 c
-h
-4343 2997 m
-f*
-4404.22 3055.68 m
-4404.22 3081.8 l
-4400.24 3081.8 l
-4399.16 3079.08 4398.08 3078.2 4395.74 3078.2 c
-4394.66 3078.2 4393.04 3078.55 4390.16 3079.44 c
-4384.4 3081.42 4380.26 3082.16 4376.12 3082.16 c
-4359.74 3082.16 4348 3070.99 4348 3055.86 c
-4348 3043.98 4355.34 3035.7 4373.42 3027.96 c
-4385.84 3022.56 4391 3018.06 4391 3012.3 c
-4391 3005.28 4385.48 3000.48 4377.2 3000.48 c
-4364.6 3000.48 4356.32 3008.62 4352.54 3024.36 c
-4347.5 3024.36 l
-4347.5 2994.66 l
-4352 2994.66 l
-4353.98 2998.44 4355.06 2999.7 4356.68 2999.7 c
-4357.58 2999.7 4359.02 2999.34 4360.82 2998.62 c
-4366.04 2996.46 4375.22 2994.48 4380.26 2994.48 c
-4396.64 2994.48 4408 3005.64 4408 3021.84 c
-4408 3034.62 4401.15 3042.54 4383.14 3049.92 c
-4370.9 3055.14 4366 3059.64 4366 3065.76 c
-4366 3071.7 4370.98 3076.16 4377.74 3076.16 c
-4382.6 3076.16 4387.28 3074.19 4391.24 3070.44 c
-4395.02 3066.84 4397 3063.42 4399.7 3055.68 c
-h
-4413.02 2997 m
-f*
-4484.36 3019.5 m
-4476.98 3010.68 4471.58 3007.48 4463.84 3007.48 c
-4457 3007.48 4451.6 3010.53 4448 3016.62 c
-4444.58 3022.36 4443.14 3028.45 4442.42 3041 c
-4487.78 3041 l
-4486.7 3055.99 4484 3064.3 4478.42 3071.34 c
-4472.66 3078.36 4464.2 3082.16 4454.12 3082.16 c
-4431.62 3082.16 4416.5 3064.33 4416.5 3038.04 c
-4416.5 3011.76 4431.26 2994.48 4453.58 2994.48 c
-4468.16 2994.48 4476.98 3000.06 4488.68 3016.98 c
-h
-4441.52 3048 m
-4442.06 3069.42 4445.3 3076.16 4454.12 3076.16 c
-4459.34 3076.16 4462.58 3073.42 4464.02 3068.1 c
-4464.92 3064.68 4465.28 3059.64 4465.64 3050.46 c
-4465.64 3048 l
-h
-4491.92 2997 m
-f*
-4538 2997 m
-f*
-4641.94 3119 m
-4539.88 3119 l
-4539.88 3114 l
-4552.3 3113.29 4556 3110.63 4556 3101.4 c
-4556 3014.28 l
-4556 3004.92 4553.44 3002.94 4539.88 3001.5 c
-4539.88 2997 l
-4604.68 2997 l
-4604.68 3002 l
-4588.12 3002.69 4585 3004.77 4585 3014.28 c
-4585 3056.22 l
-4603.28 3055.86 4609.91 3049.2 4612.42 3028.32 c
-4616.92 3028.32 l
-4616.92 3089.16 l
-4612.42 3089.16 l
-4609.19 3068.64 4602.92 3062.34 4585 3062.34 c
-4585 3104.1 l
-4585 3110.76 4587.32 3113 4596.4 3113 c
-4613.14 3113 4623.58 3109.8 4629.16 3103.2 c
-4633.12 3098.7 4635.1 3093.84 4637.62 3082.5 c
-4641.94 3082.5 l
-h
-4646.98 2997 m
-f*
-4686.28 3080 m
-4652.22 3080 l
-4652.22 3075.66 l
-4659.96 3074.58 4662 3072.24 4662 3065.04 c
-4662 3012.12 l
-4662 3004.74 4660.19 3002.76 4652.22 3001.32 c
-4652.22 2997 l
-4700.1 2997 l
-4700.1 3001.32 l
-4689.12 3002.04 4687 3004.38 4687 3015.54 c
-4687 3049.56 l
-4687 3058.92 4692.02 3066.66 4697.94 3066.66 c
-4699.38 3066.66 4701 3065.4 4702.98 3062.52 c
-4706.4 3057.66 4709.1 3056.04 4713.78 3056.04 c
-4720.44 3056.04 4725.12 3061.08 4725.12 3067.92 c
-4725.12 3076.2 4719 3082.16 4710.54 3082.16 c
-4701.55 3082.16 4694.73 3077.47 4686.28 3065.22 c
-h
-4726.92 2997 m
-f*
-4813.14 3008.52 m
-4811.34 3006.72 l
-4810.8 3006.18 4810.26 3006 4809.36 3006 c
-4806.84 3006 4806 3007.44 4806 3010.5 c
-4806 3057.48 l
-4806 3072.78 4792.16 3082.16 4769.94 3082.16 c
-4749.6 3082.16 4735.92 3072.97 4735.92 3059.46 c
-4735.92 3051.9 4740.24 3047.58 4747.62 3047.58 c
-4754.82 3047.58 4759.86 3051.9 4759.86 3058.02 c
-4759.86 3060.54 4758.96 3062.88 4756.62 3065.76 c
-4755 3067.56 4754.46 3068.64 4754.46 3069.72 c
-4754.46 3073.5 4759.32 3076.16 4765.8 3076.16 c
-4776.42 3076.16 4781 3071.37 4781 3060.54 c
-4781 3047.4 l
-4759.89 3040.92 4751.41 3037.68 4744.56 3033.18 c
-4736.46 3027.78 4733 3021.48 4733 3013.56 c
-4733 3002.58 4741.07 2994.48 4752.3 2994.48 c
-4762.74 2994.48 4771.02 2998.08 4780.92 3007.08 c
-4782.9 2997.9 4786.86 2994.48 4795.68 2994.48 c
-4803.42 2994.48 4809 2997.36 4815.84 3004.74 c
-h
-4781 3015 m
-4776.04 3009.42 4772.37 3007.26 4767.96 3007.26 c
-4762.56 3007.26 4759 3012.12 4759 3019.32 c
-4759 3029.76 4766.57 3037.14 4781 3041.1 c
-h
-4818 2997 m
-f*
-4855.46 3080 m
-4820.73 3080 l
-4820.73 3075.66 l
-4828.65 3074.58 4831 3072.42 4831 3065.04 c
-4831 3012.12 l
-4831 3004.74 4828.95 3002.76 4820.73 3001.32 c
-4820.73 2997 l
-4863.93 2997 l
-4863.93 3001.32 l
-4857.63 3002.22 4856 3004.74 4856 3011.58 c
-4856 3059.64 l
-4856 3060.54 4858.51 3063.78 4860.51 3065.76 c
-4864.29 3068.64 4867.53 3070.16 4870.77 3070.16 c
-4877.79 3070.16 4881 3066 4881 3055.14 c
-4881 3011.58 l
-4881 3004.2 4878.9 3001.86 4871.85 3001.32 c
-4871.85 2997 l
-4913.97 2997 l
-4913.97 3001.32 l
-4907.67 3002.04 4906 3004.74 4906 3011.58 c
-4906 3059.64 l
-4906 3060.54 4908.43 3063.6 4910.37 3065.58 c
-4914.33 3068.64 4917.57 3070.16 4920.81 3070.16 c
-4927.65 3070.16 4930 3065.82 4930 3055.14 c
-4930 3011.58 l
-4930 3004.02 4928.1 3001.86 4921.53 3001.32 c
-4921.53 2997 l
-4964.37 2997 l
-4964.37 3001 l
-4957.35 3001.37 4955 3003.6 4955 3011.58 c
-4955 3056.76 l
-4955 3072.24 4945.6 3082.16 4931.07 3082.16 c
-4920.81 3082.16 4913.97 3078.01 4904.61 3066.48 c
-4899.21 3077.82 4892.91 3082.16 4881.57 3082.16 c
-4870.2 3082.16 4862.21 3077.29 4855.46 3066.48 c
-h
-4967.94 2997 m
-f*
-5040.36 3019.5 m
-5032.98 3010.68 5027.58 3007.48 5019.84 3007.48 c
-5013 3007.48 5007.6 3010.53 5004 3016.62 c
-5000.58 3022.36 4999.14 3028.45 4998.42 3041 c
-5043.78 3041 l
-5042.7 3055.99 5040 3064.3 5034.42 3071.34 c
-5028.66 3078.36 5020.2 3082.16 5010.12 3082.16 c
-4987.62 3082.16 4972.5 3064.33 4972.5 3038.04 c
-4972.5 3011.76 4987.26 2994.48 5009.58 2994.48 c
-5024.16 2994.48 5032.98 3000.06 5044.68 3016.98 c
-h
-4997.52 3048 m
-4998.06 3069.42 5001.3 3076.16 5010.12 3076.16 c
-5015.34 3076.16 5018.58 3073.42 5020.02 3068.1 c
-5020.92 3064.68 5021.28 3059.64 5021.64 3050.46 c
-5021.64 3048 l
-h
-5047.92 2997 m
-f*
-1 i
-4132.55 2962.55 914.4 15.5999 re
-f
-0.2 i
-2824.26 2676.36 m
-2813.64 2665.2 2807.88 2660.88 2799.06 2657.46 c
-2793.84 2655.3 2787.9 2654.58 2782.86 2654.58 c
-2770.98 2654.58 2759.64 2660.74 2754.42 2669.88 c
-2749.2 2679.42 2747 2692.2 2747 2710.38 c
-2747 2747.64 2758.23 2767.7 2779.8 2767.7 c
-2788.26 2767.7 2796 2764.38 2803.74 2757.36 c
-2811.48 2750.52 2815.62 2744.4 2821.92 2730.72 c
-2826.42 2730.72 l
-2826.42 2773.16 l
-2821.56 2773.16 l
-2818.86 2766.43 2817.06 2764.56 2813.64 2764.56 c
-2811.84 2764.56 2809.5 2765.28 2805.36 2767.08 c
-2794.92 2771.4 2786.1 2773.7 2777.46 2773.7 c
-2741.64 2773.7 2715 2745.84 2715 2708.76 c
-2715 2671.68 2741.21 2645.58 2778.54 2645.58 c
-2799.24 2645.58 2811.48 2651.88 2829.66 2671.86 c
-h
-2835.96 2649 m
-f*
-2899.18 2646.66 m
-2906.78 2649.36 2911.02 2650.08 2922.5 2651.34 c
-2933.66 2652.6 l
-2933.66 2657 l
-2925.74 2657.35 2924 2659.63 2924 2667.18 c
-2924 2732 l
-2887.4 2732 l
-2887.4 2727.66 l
-2896.4 2726.94 2899 2724.78 2899 2717.04 c
-2899 2666.1 l
-2892.88 2660.16 2889.18 2658.48 2883.8 2658.48 c
-2876.42 2658.48 2874 2662 2874 2670.96 c
-2874 2732 l
-2839.88 2732 l
-2839.88 2727.66 l
-2847.26 2726.22 2849 2724.6 2849 2717.04 c
-2849 2671.68 l
-2849 2655.84 2857.89 2646.48 2872.64 2646.48 c
-2882.16 2646.48 2888.56 2649.36 2899.18 2658.36 c
-h
-2937.08 2649 m
-f*
-2975.28 2732 m
-2941.22 2732 l
-2941.22 2727.66 l
-2948.96 2726.58 2951 2724.24 2951 2717.04 c
-2951 2664.12 l
-2951 2656.74 2949.19 2654.76 2941.22 2653.32 c
-2941.22 2649 l
-2989.1 2649 l
-2989.1 2653.32 l
-2978.12 2654.04 2976 2656.38 2976 2667.54 c
-2976 2701.56 l
-2976 2710.92 2981.02 2718.66 2986.94 2718.66 c
-2988.38 2718.66 2990 2717.4 2991.98 2714.52 c
-2995.4 2709.66 2998.1 2708.04 3002.78 2708.04 c
-3009.44 2708.04 3014.12 2713.08 3014.12 2719.92 c
-3014.12 2728.2 3008 2734.16 2999.54 2734.16 c
-2990.55 2734.16 2983.73 2729.47 2975.28 2717.22 c
-h
-3015.92 2649 m
-f*
-3056.28 2732 m
-3022.22 2732 l
-3022.22 2727.66 l
-3029.96 2726.58 3032 2724.24 3032 2717.04 c
-3032 2664.12 l
-3032 2656.74 3030.19 2654.76 3022.22 2653.32 c
-3022.22 2649 l
-3070.1 2649 l
-3070.1 2653.32 l
-3059.12 2654.04 3057 2656.38 3057 2667.54 c
-3057 2701.56 l
-3057 2710.92 3062.02 2718.66 3067.94 2718.66 c
-3069.38 2718.66 3071 2717.4 3072.98 2714.52 c
-3076.4 2709.66 3079.1 2708.04 3083.78 2708.04 c
-3090.44 2708.04 3095.12 2713.08 3095.12 2719.92 c
-3095.12 2728.2 3089 2734.16 3080.54 2734.16 c
-3071.55 2734.16 3064.73 2729.47 3056.28 2717.22 c
-h
-3096.92 2649 m
-f*
-3168.36 2671.5 m
-3160.98 2662.68 3155.58 2659.48 3147.84 2659.48 c
-3141 2659.48 3135.6 2662.53 3132 2668.62 c
-3128.58 2674.36 3127.14 2680.45 3126.42 2693 c
-3171.78 2693 l
-3170.7 2707.99 3168 2716.3 3162.42 2723.34 c
-3156.66 2730.36 3148.2 2734.16 3138.12 2734.16 c
-3115.62 2734.16 3100.5 2716.33 3100.5 2690.04 c
-3100.5 2663.76 3115.26 2646.48 3137.58 2646.48 c
-3152.16 2646.48 3160.98 2652.06 3172.68 2668.98 c
-h
-3125.52 2700 m
-3126.06 2721.42 3129.3 2728.16 3138.12 2728.16 c
-3143.34 2728.16 3146.58 2725.42 3148.02 2720.1 c
-3148.92 2716.68 3149.28 2711.64 3149.64 2702.46 c
-3149.64 2700 l
-h
-3175.92 2649 m
-f*
-3213.82 2732 m
-3179.78 2732 l
-3179.78 2727.66 l
-3187.7 2726.4 3189 2724.6 3189 2717.04 c
-3189 2664.12 l
-3189 2656.56 3187.61 2654.94 3179.78 2653.32 c
-3179.78 2649 l
-3223.16 2649 l
-3223.16 2653.32 l
-3216.5 2654.22 3214 2656.92 3214 2663.58 c
-3214 2711.64 l
-3214 2712.36 3215.4 2714.16 3217.4 2715.96 c
-3221.36 2719.92 3225.68 2722.16 3230 2722.16 c
-3236.12 2722.16 3239 2717.27 3239 2707.14 c
-3239 2663.58 l
-3239 2656.92 3236.71 2654.04 3230.72 2653.32 c
-3230.72 2649 l
-3273.02 2649 l
-3273.02 2653.32 l
-3266 2653.86 3264 2656.02 3264 2663.58 c
-3264 2708.76 l
-3264 2724.24 3254.54 2734.16 3239.9 2734.16 c
-3228.96 2734.16 3220.57 2729.11 3213.82 2718.48 c
-h
-3276.08 2649 m
-f*
-3330.9 2732 m
-3314 2732 l
-3314 2762.4 l
-3309.48 2762.4 l
-3298.5 2746.92 3291.3 2738.82 3279.6 2728.92 c
-3279.6 2724 l
-3289 2724 l
-3289 2665.74 l
-3289 2654.04 3296.73 2646.84 3309.12 2646.84 c
-3321.18 2646.84 3328.38 2652.24 3335.76 2667 c
-3331.26 2668.98 l
-3327.66 2662.14 3324.78 2659.84 3321 2659.84 c
-3315.96 2659.84 3314 2662.83 3314 2669.88 c
-3314 2724 l
-3330.9 2724 l
-h
-3335.94 2649 m
-f*
-3381 2649 m
-f*
-3485.94 2771 m
-3383.88 2771 l
-3383.88 2766 l
-3396.3 2765.29 3400 2762.63 3400 2753.4 c
-3400 2666.28 l
-3400 2656.92 3397.44 2654.94 3383.88 2653.5 c
-3383.88 2649 l
-3448.68 2649 l
-3448.68 2654 l
-3432.12 2654.69 3429 2656.77 3429 2666.28 c
-3429 2708.22 l
-3447.28 2707.86 3453.91 2701.2 3456.42 2680.32 c
-3460.92 2680.32 l
-3460.92 2741.16 l
-3456.42 2741.16 l
-3453.19 2720.64 3446.92 2714.34 3429 2714.34 c
-3429 2756.1 l
-3429 2762.76 3431.32 2765 3440.4 2765 c
-3457.14 2765 3467.58 2761.8 3473.16 2755.2 c
-3477.12 2750.7 3479.1 2745.84 3481.62 2734.5 c
-3485.94 2734.5 l
-h
-3490.98 2649 m
-f*
-3530.28 2732 m
-3496.22 2732 l
-3496.22 2727.66 l
-3503.96 2726.58 3506 2724.24 3506 2717.04 c
-3506 2664.12 l
-3506 2656.74 3504.19 2654.76 3496.22 2653.32 c
-3496.22 2649 l
-3544.1 2649 l
-3544.1 2653.32 l
-3533.12 2654.04 3531 2656.38 3531 2667.54 c
-3531 2701.56 l
-3531 2710.92 3536.02 2718.66 3541.94 2718.66 c
-3543.38 2718.66 3545 2717.4 3546.98 2714.52 c
-3550.4 2709.66 3553.1 2708.04 3557.78 2708.04 c
-3564.44 2708.04 3569.12 2713.08 3569.12 2719.92 c
-3569.12 2728.2 3563 2734.16 3554.54 2734.16 c
-3545.55 2734.16 3538.73 2729.47 3530.28 2717.22 c
-h
-3570.92 2649 m
-f*
-3656.14 2660.52 m
-3654.34 2658.72 l
-3653.8 2658.18 3653.26 2658 3652.36 2658 c
-3649.84 2658 3649 2659.44 3649 2662.5 c
-3649 2709.48 l
-3649 2724.78 3635.16 2734.16 3612.94 2734.16 c
-3592.6 2734.16 3578.92 2724.97 3578.92 2711.46 c
-3578.92 2703.9 3583.24 2699.58 3590.62 2699.58 c
-3597.82 2699.58 3602.86 2703.9 3602.86 2710.02 c
-3602.86 2712.54 3601.96 2714.88 3599.62 2717.76 c
-3598 2719.56 3597.46 2720.64 3597.46 2721.72 c
-3597.46 2725.5 3602.32 2728.16 3608.8 2728.16 c
-3619.42 2728.16 3624 2723.37 3624 2712.54 c
-3624 2699.4 l
-3602.89 2692.92 3594.41 2689.68 3587.56 2685.18 c
-3579.46 2679.78 3576 2673.48 3576 2665.56 c
-3576 2654.58 3584.07 2646.48 3595.3 2646.48 c
-3605.74 2646.48 3614.02 2650.08 3623.92 2659.08 c
-3625.9 2649.9 3629.86 2646.48 3638.68 2646.48 c
-3646.42 2646.48 3652 2649.36 3658.84 2656.74 c
-h
-3624 2667 m
-3619.04 2661.42 3615.37 2659.26 3610.96 2659.26 c
-3605.56 2659.26 3602 2664.12 3602 2671.32 c
-3602 2681.76 3609.57 2689.14 3624 2693.1 c
-h
-3661 2649 m
-f*
-3698.46 2732 m
-3663.73 2732 l
-3663.73 2727.66 l
-3671.65 2726.58 3674 2724.42 3674 2717.04 c
-3674 2664.12 l
-3674 2656.74 3671.95 2654.76 3663.73 2653.32 c
-3663.73 2649 l
-3706.93 2649 l
-3706.93 2653.32 l
-3700.63 2654.22 3699 2656.74 3699 2663.58 c
-3699 2711.64 l
-3699 2712.54 3701.51 2715.78 3703.51 2717.76 c
-3707.29 2720.64 3710.53 2722.16 3713.77 2722.16 c
-3720.79 2722.16 3724 2718 3724 2707.14 c
-3724 2663.58 l
-3724 2656.2 3721.9 2653.86 3714.85 2653.32 c
-3714.85 2649 l
-3756.97 2649 l
-3756.97 2653.32 l
-3750.67 2654.04 3749 2656.74 3749 2663.58 c
-3749 2711.64 l
-3749 2712.54 3751.43 2715.6 3753.37 2717.58 c
-3757.33 2720.64 3760.57 2722.16 3763.81 2722.16 c
-3770.65 2722.16 3773 2717.82 3773 2707.14 c
-3773 2663.58 l
-3773 2656.02 3771.1 2653.86 3764.53 2653.32 c
-3764.53 2649 l
-3807.37 2649 l
-3807.37 2653 l
-3800.35 2653.37 3798 2655.6 3798 2663.58 c
-3798 2708.76 l
-3798 2724.24 3788.6 2734.16 3774.07 2734.16 c
-3763.81 2734.16 3756.97 2730.01 3747.61 2718.48 c
-3742.21 2729.82 3735.91 2734.16 3724.57 2734.16 c
-3713.2 2734.16 3705.21 2729.29 3698.46 2718.48 c
-h
-3810.94 2649 m
-f*
-3883.36 2671.5 m
-3875.98 2662.68 3870.58 2659.48 3862.84 2659.48 c
-3856 2659.48 3850.6 2662.53 3847 2668.62 c
-3843.58 2674.36 3842.14 2680.45 3841.42 2693 c
-3886.78 2693 l
-3885.7 2707.99 3883 2716.3 3877.42 2723.34 c
-3871.66 2730.36 3863.2 2734.16 3853.12 2734.16 c
-3830.62 2734.16 3815.5 2716.33 3815.5 2690.04 c
-3815.5 2663.76 3830.26 2646.48 3852.58 2646.48 c
-3867.16 2646.48 3875.98 2652.06 3887.68 2668.98 c
-h
-3840.52 2700 m
-3841.06 2721.42 3844.3 2728.16 3853.12 2728.16 c
-3858.34 2728.16 3861.58 2725.42 3863.02 2720.1 c
-3863.92 2716.68 3864.28 2711.64 3864.64 2702.46 c
-3864.64 2700 l
-h
-3890.92 2649 m
-f*
-1 i
-2705.75 2614.55 1184.4 15.5999 re
-f
-1 g
-3311.75 2840.15 m
-3478.55 2993.75 l
-3395.75 2993.75 l
-3395.75 3144.95 l
-3230.15 3144.95 l
-3230.15 2993.75 l
-3148.55 2993.75 l
-f*
-0 g
-3311.75 2840.15 m
-3478.55 2993.75 l
-3395.75 2993.75 l
-3395.75 3144.95 l
-3230.15 3144.95 l
-3230.15 2993.75 l
-3148.55 2993.75 l
-3311.75 2840.15 l
-3311.75 2853.35 l
-3173.75 2982.95 l
-3239.75 2982.95 l
-3239.75 3134.15 l
-3386.15 3134.15 l
-3386.15 2982.95 l
-3453.35 2982.95 l
-3311.75 2853.35 l
-3311.75 2840.15 l
-f*
-0.201248 i
-1359.33 3052 m
-1245.22 3052 l
-1245.22 3047 l
-1259.11 3046.2 1263 3043.18 1263 3032.72 c
-1263 2935.32 l
-1263 2924.85 1260.17 2922.64 1245.22 2921.03 c
-1245.22 2916 l
-1317.67 2916 l
-1317.67 2921 l
-1299.15 2921.81 1296 2924.23 1296 2935.32 c
-1296 2982.21 l
-1316.22 2981.81 1323.55 2974.36 1326.32 2951.02 c
-1331.35 2951.02 l
-1331.35 3019.04 l
-1326.32 3019.04 l
-1322.76 2996.1 1315.82 2989.05 1296 2989.05 c
-1296 3035.74 l
-1296 3043.19 1298.52 3045 1308.41 3045 c
-1327.13 3045 1338.8 3041.64 1345.04 3034.74 c
-1349.47 3029.71 1351.68 3024.27 1354.5 3011.59 c
-1359.33 3011.59 l
-h
-1364.96 2916 m
-f*
-1409.19 3009 m
-1370.84 3009 l
-1370.84 3003.95 l
-1379.49 3002.74 1382 3000.12 1382 2992.07 c
-1382 2932.9 l
-1382 2924.65 1379.93 2922.44 1370.84 2920.83 c
-1370.84 2916 l
-1424.37 2916 l
-1424.37 2920.83 l
-1412.09 2921.63 1410 2924.25 1410 2936.73 c
-1410 2974.76 l
-1410 2985.23 1415.49 2993.88 1421.95 2993.88 c
-1423.56 2993.88 1425.37 2992.47 1427.59 2989.25 c
-1431.41 2983.82 1434.43 2982.01 1439.66 2982.01 c
-1447.11 2982.01 1452.34 2987.64 1452.34 2995.29 c
-1452.34 3004.55 1445.5 3011.41 1436.04 3011.41 c
-1426.1 3011.41 1418.54 3006.12 1409.19 2992.27 c
-h
-1454.35 2916 m
-f*
-1549.19 2928.88 m
-1547.18 2926.87 l
-1546.57 2926.26 1545.97 2926.06 1544.96 2926.06 c
-1542.15 2926.06 1541 2927.67 1541 2931.09 c
-1541 2983.62 l
-1541 3000.73 1525.6 3011.42 1500.89 3011.42 c
-1478.15 3011.42 1462.85 3001.06 1462.85 2985.83 c
-1462.85 2977.38 1467.69 2972.55 1475.94 2972.55 c
-1483.99 2972.55 1489.62 2977.38 1489.62 2984.22 c
-1489.62 2987.04 1488.61 2989.66 1486 2992.88 c
-1484.19 2994.89 1483.58 2996.1 1483.58 2997.3 c
-1483.58 3001.53 1489.02 3004.42 1496.26 3004.42 c
-1508.14 3004.42 1513.86 2999.08 1513.86 2987.04 c
-1513.86 2972.35 l
-1489.91 2965.1 1480.29 2961.48 1472.51 2956.45 c
-1463.46 2950.41 1459 2943.37 1459 2934.52 c
-1459 2922.24 1468.27 2913.18 1481.17 2913.18 c
-1492.84 2913.18 1502.1 2917.21 1513.17 2927.27 c
-1515.38 2917.01 1519.81 2913.18 1529.67 2913.18 c
-1538.32 2913.18 1544.56 2916.4 1552.21 2924.65 c
-h
-1513 2936.13 m
-1507.55 2929.89 1503.52 2927.47 1498.68 2927.47 c
-1492.64 2927.47 1488 2932.91 1488 2940.96 c
-1488 2952.63 1496.61 2960.88 1513 2965.31 c
-h
-1554.62 2916 m
-f*
-1596.4 3009 m
-1557.7 3009 l
-1557.7 3003.95 l
-1566.55 3002.74 1569 3000.32 1569 2992.07 c
-1569 2932.9 l
-1569 2924.65 1566.74 2922.44 1557.7 2920.83 c
-1557.7 2916 l
-1606 2916 l
-1606 2920.83 l
-1598.95 2921.84 1597 2924.65 1597 2932.3 c
-1597 2986.03 l
-1597 2987.04 1599.87 2990.66 1602.18 2992.88 c
-1606.4 2996.1 1610.02 2998.42 1613.65 2998.42 c
-1621.5 2998.42 1625 2993.59 1625 2981 c
-1625 2932.3 l
-1625 2924.05 1622.68 2921.43 1614.85 2920.83 c
-1614.85 2916 l
-1661.95 2916 l
-1661.95 2920.83 l
-1654.9 2921.64 1653 2924.65 1653 2932.3 c
-1653 2986.03 l
-1653 2987.04 1655.73 2990.46 1657.92 2992.68 c
-1662.35 2996.1 1665.97 2998.42 1669.59 2998.42 c
-1677.24 2998.42 1680 2993.38 1680 2981 c
-1680 2932.3 l
-1680 2923.85 1677.85 2921.43 1670.4 2920.83 c
-1670.4 2916 l
-1718.3 2916 l
-1718.3 2921 l
-1710.45 2921.4 1708 2923.78 1708 2932.3 c
-1708 2982.81 l
-1708 3000.12 1697.43 3011.42 1681.07 3011.42 c
-1669.59 3011.42 1661.95 3006.73 1651.48 2993.68 c
-1645.44 3006.36 1638.4 3011.42 1625.72 3011.42 c
-1612.95 3011.42 1603.98 3005.91 1596.4 2993.68 c
-h
-1721.64 2916 m
-f*
-1799.9 2941.16 m
-1791.65 2931.29 1785.61 2927.18 1776.96 2927.18 c
-1769.31 2927.18 1763.27 2930.77 1759.25 2937.94 c
-1755.43 2944.54 1753.82 2951.56 1753.01 2966 c
-1803.73 2966 l
-1802.52 2982.36 1799.5 2991.43 1793.26 2999.12 c
-1786.82 3006.96 1777.36 3011.42 1766.09 3011.42 c
-1740.94 3011.42 1724.03 2991.4 1724.03 2961.88 c
-1724.03 2932.5 1740.53 2913.18 1765.49 2913.18 c
-1781.79 2913.18 1791.65 2919.42 1804.73 2938.34 c
-h
-1752 2973 m
-1752.61 2996.96 1756.23 3004.42 1766.09 3004.42 c
-1771.93 3004.42 1775.55 3001.38 1777.16 2995.49 c
-1778.17 2991.67 1778.57 2986.03 1778.97 2975.77 c
-1778.97 2973 l
-h
-1808.35 2916 m
-f*
-1905.16 3011.59 m
-1905.16 3055.22 l
-1899.37 3055.22 l
-1897.96 3049.82 1896.55 3048.42 1892.93 3048.42 c
-1891.12 3048.42 1888.7 3049.03 1884.47 3050.43 c
-1875.22 3053.86 1868.78 3055.02 1860.93 3055.02 c
-1833.56 3055.02 1817 3039.54 1817 3014.01 c
-1817 3008.98 1817.75 3004.75 1819.07 3000.73 c
-1823.29 2990.06 1834.16 2980.6 1851.27 2972.35 c
-1864.75 2965.91 l
-1882.46 2957.46 1887 2952.22 1887 2941.56 c
-1887 2927.67 1877.25 2919.18 1861.94 2919.18 c
-1850.26 2919.18 1840.6 2923.89 1832.96 2933.31 c
-1827.12 2940.75 1824.3 2947.6 1820.88 2961.88 c
-1815.04 2961.88 l
-1815.04 2912.18 l
-1820.88 2912.18 l
-1822.09 2917.41 1823.7 2919.02 1826.92 2919.02 c
-1828.53 2919.02 1830.74 2918.42 1835.17 2917.01 c
-1845.03 2913.59 1852.48 2912.18 1861.33 2912.18 c
-1891.12 2912.18 1911 2929.28 1911 2954.64 c
-1911 2969.73 1902.04 2984.83 1889.1 2991.27 c
-1859.52 3005.96 l
-1843.22 3014.01 1839 3018.84 1839 3028.7 c
-1839 3041.18 1847.37 3048.02 1860.93 3048.02 c
-1869.99 3048.02 1878.44 3044.47 1885.68 3037.55 c
-1892.53 3030.51 1895.75 3024.67 1899.77 3011.59 c
-h
-1919.89 2916 m
-f*
-2000.9 2941.16 m
-1992.65 2931.29 1986.61 2927.18 1977.96 2927.18 c
-1970.31 2927.18 1964.27 2930.77 1960.25 2937.94 c
-1956.43 2944.54 1954.82 2951.56 1954.01 2966 c
-2004.73 2966 l
-2003.52 2982.36 2000.5 2991.43 1994.26 2999.12 c
-1987.82 3006.96 1978.36 3011.42 1967.09 3011.42 c
-1941.94 3011.42 1925.03 2991.4 1925.03 2961.88 c
-1925.03 2932.5 1941.53 2913.18 1966.49 2913.18 c
-1982.79 2913.18 1992.65 2919.42 2005.73 2938.34 c
-h
-1953 2973 m
-1953.61 2996.96 1957.23 3004.42 1967.09 3004.42 c
-1972.93 3004.42 1976.55 3001.38 1978.16 2995.49 c
-1979.17 2991.67 1979.57 2986.03 1979.97 2975.77 c
-1979.97 2973 l
-h
-2009.35 2916 m
-f*
-2070.38 3009 m
-2051 3009 l
-2051 3042.79 l
-2046.43 3042.79 l
-2034.16 3025.48 2026.11 3016.42 2013.02 3005.35 c
-2013.02 3000 l
-2023 3000 l
-2023 2934.72 l
-2023 2921.64 2031.84 2913.59 2046.03 2913.59 c
-2059.51 2913.59 2067.56 2919.62 2075.81 2936.12 c
-2070.78 2938.34 l
-2066.76 2930.69 2063.54 2927.59 2059.31 2927.59 c
-2053.68 2927.59 2051 2931.09 2051 2939.34 c
-2051 3000 l
-2070.38 3000 l
-h
-2076.02 2916 m
-f*
-1 i
-0.564706 g
-5033.75 4836.95 m
-4866.95 4894.55 l
-4985.75 4983.35 l
-4796.15 4996.55 l
-4848.95 5105.75 l
-4666.55 5074.55 l
-4644.95 5187.35 l
-4496.15 5116.55 l
-4404.95 5216.15 l
-4311.35 5116.55 l
-4162.55 5187.35 l
-4140.95 5074.55 l
-3957.35 5105.75 l
-4011.35 4996.55 l
-3820.55 4983.35 l
-3939.35 4894.55 l
-3773.75 4836.95 l
-3939.35 4781.75 l
-3820.55 4692.95 l
-4011.35 4680.95 l
-3957.35 4570.55 l
-4140.95 4602.95 l
-4162.55 4490.15 l
-4311.35 4560.95 l
-4404.95 4461.35 l
-4496.15 4560.95 l
-4644.95 4490.15 l
-4666.55 4602.95 l
-4848.95 4570.55 l
-4796.15 4680.95 l
-4985.75 4692.95 l
-4866.95 4781.75 l
-f*
-1 g
-4973.75 4896.95 m
-4806.95 4954.55 l
-4925.75 5043.35 l
-4736.15 5056.55 l
-4788.95 5165.75 l
-4606.55 5134.55 l
-4584.95 5247.35 l
-4436.15 5176.55 l
-4344.95 5276.15 l
-4251.35 5176.55 l
-4102.55 5247.35 l
-4080.95 5134.55 l
-3897.35 5165.75 l
-3951.35 5056.55 l
-3760.55 5043.35 l
-3879.35 4954.55 l
-3713.75 4896.95 l
-3879.35 4841.75 l
-3760.55 4752.95 l
-3951.35 4740.95 l
-3897.35 4630.55 l
-4080.95 4662.95 l
-4102.55 4550.15 l
-4251.35 4620.95 l
-4344.95 4521.35 l
-4436.15 4620.95 l
-4584.95 4550.15 l
-4606.55 4662.95 l
-4788.95 4630.55 l
-4736.15 4740.95 l
-4925.75 4752.95 l
-4806.95 4841.75 l
-f*
-0 g
-4973.75 4896.95 m
-4806.95 4954.55 l
-4925.75 5043.35 l
-4736.15 5056.55 l
-4788.95 5165.75 l
-4606.55 5134.55 l
-4584.95 5247.35 l
-4436.15 5176.55 l
-4344.95 5276.15 l
-4251.35 5176.55 l
-4102.55 5247.35 l
-4080.95 5134.55 l
-3897.35 5165.75 l
-3951.35 5056.55 l
-3760.55 5043.35 l
-3879.35 4954.55 l
-3713.75 4896.95 l
-3879.35 4841.75 l
-3760.55 4752.95 l
-3951.35 4740.95 l
-3897.35 4630.55 l
-4080.95 4662.95 l
-4102.55 4550.15 l
-4251.35 4620.95 l
-4344.95 4521.35 l
-4436.15 4620.95 l
-4584.95 4550.15 l
-4606.55 4662.95 l
-4788.95 4630.55 l
-4736.15 4740.95 l
-4925.75 4752.95 l
-4806.95 4841.75 l
-4973.75 4896.95 l
-4850.15 4898.15 l
-4721.75 4856.15 l
-4816.55 4786.55 l
-4674.95 4776.95 l
-4718.15 4683.35 l
-4575.35 4709.75 l
-4554.95 4608.95 l
-4426.55 4670.15 l
-4344.95 4580.15 l
-4259.75 4670.15 l
-4132.55 4608.95 l
-4113.35 4709.75 l
-3966.95 4683.35 l
-4013.75 4776.95 l
-3870.95 4786.55 l
-3964.55 4856.15 l
-3837.35 4898.15 l
-3963.35 4942.55 l
-3870.95 5010.95 l
-4013.75 5019.35 l
-3966.95 5112.95 l
-4113.35 5088.95 l
-4132.55 5188.55 l
-4259.75 5127.35 l
-4344.95 5217.35 l
-4426.55 5127.35 l
-4554.95 5188.55 l
-4575.35 5088.95 l
-4719.35 5112.95 l
-4674.95 5019.35 l
-4816.55 5010.95 l
-4724.15 4942.55 l
-4850.15 4898.15 l
-4973.75 4896.95 l
-f*
-0.2 i
-4251.96 5065 m
-4220.76 5065 l
-4220.76 5061.04 l
-4229.56 5060.24 4231 5059.28 4234.04 5052.24 c
-4214.84 4986.48 l
-4208.6 4965.52 4207.48 4963.76 4198.68 4962 c
-4198.68 4958 l
-4231.96 4958 l
-4231.96 4962 l
-4222.52 4962.8 4219.16 4965.2 4219.16 4971.44 c
-4219.16 4974.48 4220.12 4979.76 4222.04 4986.48 c
-4237.88 5043.44 l
-4279 4955.6 l
-4283.48 4955.6 l
-4306.36 5036.56 l
-4312.6 5057.68 4313.4 5058.96 4322.68 5061.04 c
-4322.68 5065 l
-4289.24 5065 l
-4289.24 5061.04 l
-4298.68 5060.24 4302.04 5057.68 4302.04 5051.6 c
-4302.04 5048.56 4300.92 5043.12 4299.16 5036.56 c
-4286.36 4990.64 l
-h
-4318.52 4958 m
-f*
-4369.72 4980.72 m
-4362.36 4969.68 4357.72 4965.92 4350.84 4965.92 c
-4344.12 4965.92 4341 4970.48 4341 4979.28 c
-4341 4981.84 4341.19 4983.92 4341.56 4987.12 c
-4358.2 4990.32 4366.04 4993.84 4374.04 5001.2 c
-4379.64 5006.32 4383 5012.24 4383 5018 c
-4383 5026.16 4375.83 5032.08 4365.88 5032.08 c
-4342.68 5032.08 4320 5005.92 4320 4979.44 c
-4320 4965.84 4330.15 4955.92 4343.96 4955.92 c
-4356.28 4955.92 4364.76 4962.16 4374.36 4978 c
-h
-4342.68 4992.24 m
-4348.44 5014.48 4355.8 5027.08 4363.48 5027.08 c
-4366.52 5027.08 4368 5025.18 4368 5021.2 c
-4368 5014.16 4365.27 5007.28 4360.12 5002 c
-4355.8 4997.36 4351.8 4995.12 4342.68 4992.24 c
-h
-4390.04 4958 m
-f*
-4391.56 5023.12 m
-4395.56 5023.12 4396.84 5022.96 4398.12 5021.84 c
-4401.48 5019.28 4403.72 5004.24 4404.2 4982 c
-4404.52 4969.52 l
-4404.52 4968.72 l
-4404.52 4968.56 4404.52 4966.16 4404.36 4963.12 c
-4404.2 4955.92 l
-4408.52 4955.92 l
-4417.64 4969.68 l
-4424.2 4980.72 4430.28 4991.44 4435.72 5001.52 c
-4439.4 4955.92 l
-4443.72 4955.92 l
-4473.32 4987.28 4487 5008.56 4487 5022 c
-4487 5027.28 4482.63 5032.08 4477.48 5032.08 c
-4472.68 5032.08 4468.52 5027.52 4468.52 5022.32 c
-4468.52 5019.92 4469.48 5017.84 4471.88 5014.48 c
-4474.12 5011.44 4475 5009.36 4475 5007.76 c
-4475 5002.96 4470.06 4995.28 4456.04 4978.8 c
-4450.92 5032.08 l
-4446.6 5032.08 l
-4433.16 5008.8 4430.6 5004.14 4421.64 4987.92 c
-4421.16 5007.76 4420.04 5018.16 4416.36 5031.92 c
-4409.8 5030.48 4404.84 5029.68 4391.56 5027.44 c
-h
-4495.72 4958 m
-f*
-4162.08 4855.76 m
-4142.08 4781.52 l
-4139.52 4772.88 4136.48 4770.64 4126.08 4770 c
-4126.08 4766 l
-4176 4766 l
-4176 4770 l
-4166.72 4770.48 4164.48 4771.76 4164.48 4776.88 c
-4164.48 4778.64 4164.8 4780.4 4165.76 4784.08 c
-4165.92 4784.88 l
-4166.08 4785.68 l
-4185.76 4857.52 l
-4188.16 4865.84 4190.56 4868.08 4198.72 4869.04 c
-4198.72 4873 l
-4164.8 4873 l
-4115.2 4796.24 l
-4106.56 4873 l
-4071.2 4873 l
-4071.2 4869 l
-4081.28 4868.52 4082.72 4867.89 4082.72 4863.44 c
-4082.72 4861.2 4082.08 4858.32 4080.96 4854.16 c
-4063.52 4794.48 l
-4057.12 4773.68 4056 4771.92 4047.36 4770 c
-4047.36 4766 l
-4080.48 4766 l
-4080.48 4770 l
-4070.24 4771.28 4067.68 4773.2 4067.68 4779.76 c
-4067.68 4782.48 4068.48 4786.48 4070.72 4794.48 c
-4086.88 4853.52 l
-4097.6 4764.08 l
-4102.08 4764.08 l
-h
-4194.24 4766 m
-f*
-4264.44 4786.32 m
-4257.88 4777.52 4255.48 4774.76 4252.92 4774.76 c
-4251.64 4774.76 4251 4775.86 4251 4777.52 c
-4251 4781.52 4252.44 4788.08 4256.44 4801.2 c
-4267.8 4838.96 l
-4250.04 4837.84 l
-4247.16 4828.4 l
-4245.72 4836.56 4242.2 4840.08 4235.32 4840.08 c
-4215.64 4840.08 4192 4809.27 4192 4784.24 c
-4192 4772.08 4198.74 4763.92 4208.92 4763.92 c
-4218.68 4763.92 4226.04 4769.68 4235.16 4785.04 c
-4233.24 4778.48 4233 4776.56 4233 4774.32 c
-4233 4768.4 4237.76 4763.76 4243.64 4763.76 c
-4251.16 4763.76 4258.52 4770 4267.8 4783.92 c
-h
-4237.56 4833.2 m
-4241.08 4832.88 4243.56 4830 4243.56 4825.68 c
-4243.56 4816.08 4238.24 4798.32 4231.96 4787.28 c
-4227.64 4779.44 4222.84 4774.92 4218.52 4774.92 c
-4214.36 4774.92 4211 4778.75 4211 4783.92 c
-4211 4792.24 4216.42 4808.24 4223.16 4820.08 c
-4227.96 4828.56 4233.24 4833.52 4237.56 4833.2 c
-h
-4275 4766 m
-f*
-4309.56 4839.92 m
-4293.24 4837.36 4287 4836.4 4278.68 4835.44 c
-4278.68 4831 l
-4285.88 4830.69 4287.32 4830.07 4287.32 4827.12 c
-4287.32 4825.52 4286.04 4819.76 4283.8 4811.44 c
-4267.8 4749.36 l
-4264.76 4738.8 4263.48 4737.84 4255.8 4738 c
-4255.8 4733 l
-4295.64 4733 l
-4295.64 4738 l
-4287.64 4738.14 4285.24 4739.16 4285.24 4742.64 c
-4285.24 4744.88 4286.36 4749.68 4289.4 4760.88 c
-4290.52 4764.72 4290.52 4765.04 4291.16 4767.44 c
-4296.76 4764.56 4298.68 4763.92 4302.04 4763.92 c
-4323.8 4763.92 4346.36 4792.88 4346.36 4820.56 c
-4346.36 4832.4 4339.64 4840.08 4329.08 4840.08 c
-4319.96 4840.08 4312.92 4834.92 4303.48 4821.52 c
-h
-4320.12 4828.56 m
-4324.28 4828.24 4326.68 4824.56 4326.36 4819.44 c
-4325.72 4808.88 4320.6 4793.04 4314.84 4782.64 c
-4309.88 4774 4304.76 4768.92 4299.32 4768.92 c
-4295.8 4768.92 4293.08 4771.75 4293.08 4775.28 c
-4293.08 4778 4294.84 4784.56 4299.16 4799.12 c
-4302.68 4810.8 4304.12 4814.8 4306.52 4818.48 c
-4310.52 4824.72 4315.96 4828.88 4320.12 4828.56 c
-h
-4355 4766 m
-f*
-4389.56 4839.92 m
-4373.24 4837.36 4367 4836.4 4358.68 4835.44 c
-4358.68 4831 l
-4365.88 4830.69 4367.32 4830.07 4367.32 4827.12 c
-4367.32 4825.52 4366.04 4819.76 4363.8 4811.44 c
-4347.8 4749.36 l
-4344.76 4738.8 4343.48 4737.84 4335.8 4738 c
-4335.8 4733 l
-4375.64 4733 l
-4375.64 4738 l
-4367.64 4738.14 4365.24 4739.16 4365.24 4742.64 c
-4365.24 4744.88 4366.36 4749.68 4369.4 4760.88 c
-4370.52 4764.72 4370.52 4765.04 4371.16 4767.44 c
-4376.76 4764.56 4378.68 4763.92 4382.04 4763.92 c
-4403.8 4763.92 4426.36 4792.88 4426.36 4820.56 c
-4426.36 4832.4 4419.64 4840.08 4409.08 4840.08 c
-4399.96 4840.08 4392.92 4834.92 4383.48 4821.52 c
-h
-4400.12 4828.56 m
-4404.28 4828.24 4406.68 4824.56 4406.36 4819.44 c
-4405.72 4808.88 4400.6 4793.04 4394.84 4782.64 c
-4389.88 4774 4384.76 4768.92 4379.32 4768.92 c
-4375.8 4768.92 4373.08 4771.75 4373.08 4775.28 c
-4373.08 4778 4374.84 4784.56 4379.16 4799.12 c
-4382.68 4810.8 4384.12 4814.8 4386.52 4818.48 c
-4390.52 4824.72 4395.96 4828.88 4400.12 4828.56 c
-h
-4435 4766 m
-f*
-4469.56 4788.56 m
-4467.32 4785.36 l
-4463.16 4779.12 4459.48 4775.56 4457.08 4775.56 c
-4455.8 4775.56 4455 4776.77 4455 4778.16 c
-4455 4779.6 4455.62 4783.76 4456.12 4786.48 c
-4470.68 4839.92 l
-4462.22 4838 4451.26 4836.4 4439.04 4835.44 c
-4439.04 4831 l
-4440.44 4831 l
-4445.24 4831 4448.48 4829.44 4448.48 4826.48 c
-4448.48 4825.2 4447.71 4822.8 4446.68 4820.08 c
-4437.4 4785.68 l
-4436.12 4781.04 4436 4776.88 4436 4774.64 c
-4436 4768.56 4440.2 4764.56 4446.36 4764.56 c
-4455.96 4764.56 4461.88 4769.36 4473.08 4786.32 c
-h
-4465.88 4875.4 m
-4460.44 4875.4 4456 4870.46 4456 4865.04 c
-4456 4858.8 4460.26 4854.4 4466.04 4854.4 c
-4472.12 4854.4 4477 4858.86 4477 4864.56 c
-4477 4870.48 4472 4875.4 4465.88 4875.4 c
-h
-4479.48 4766 m
-f*
-4553.36 4787.6 m
-4546.96 4777.68 4544.88 4775.56 4542.16 4775.56 c
-4540.88 4775.56 4540 4776.63 4540 4778.16 c
-4540 4779.76 4540.94 4783.12 4543.92 4792.08 c
-4549.68 4809.52 l
-4552.24 4817.04 4554 4824.08 4554 4827.92 c
-4554 4835.76 4549.78 4840.08 4542.16 4840.08 c
-4536.24 4840.08 4530.48 4837.62 4526.16 4833.36 c
-4520.24 4827.76 4517.2 4823.92 4506.48 4808.08 c
-4516.72 4839.76 l
-4506.48 4837.52 4493.68 4835.92 4484.72 4835.6 c
-4484.72 4830.8 l
-4491.44 4830.65 4493.36 4829.92 4493.36 4827.12 c
-4493.36 4825.2 4491.12 4816.72 4486 4798.64 c
-4482.32 4785.68 4481.2 4781.52 4477.04 4766 c
-4496.4 4766 l
-4503.92 4793.68 4509.68 4807.6 4519.6 4820.56 c
-4522.8 4824.88 4527.76 4828.08 4530.64 4828.08 c
-4532.72 4828.08 4535 4826.63 4535 4825.04 c
-4535 4824.56 4534.54 4823.28 4533.84 4821.68 c
-4525.04 4795.12 l
-4522.48 4787.44 4521 4778.32 4521 4774.16 c
-4521 4768.08 4524.84 4764.56 4531.44 4764.56 c
-4541.04 4764.56 4547.6 4770 4556.88 4785.52 c
-h
-4566.96 4766 m
-f*
-4644.48 4835 m
-4626.72 4835 l
-4621.28 4838.58 4616.48 4840.08 4609.12 4840.08 c
-4589.44 4840.08 4573 4827.05 4573 4810.8 c
-4573 4802.64 4577.35 4796.88 4586.4 4793.2 c
-4573.28 4785.84 4571 4783.6 4571 4777.68 c
-4571 4772.56 4573.89 4769.52 4580.96 4767.12 c
-4571.04 4764.72 4567.84 4763.44 4564 4760.4 c
-4561.44 4758.16 4560 4754.32 4560 4750.48 c
-4560 4740.08 4571.56 4734 4589.76 4734 c
-4612.32 4734 4628 4743.72 4628 4757.52 c
-4628 4767.28 4621.6 4772.56 4604.16 4777.52 c
-4595.68 4779.92 l
-4590.56 4781.36 4587 4783.6 4587 4786 c
-4587 4788.56 4589.68 4791.28 4592 4791.28 c
-4592.8 4791.28 4593.92 4791.24 4595.2 4791.12 c
-4596.96 4790.64 4598.24 4790 4600.16 4790 c
-4607.2 4790 4614.4 4792.09 4620.48 4795.92 c
-4629.76 4801.2 4635 4809.36 4635 4818.96 c
-4635 4821.64 4634.59 4823.32 4633.76 4826 c
-4644.48 4826 l
-h
-4586.4 4765.04 m
-4588.32 4764.88 4600.48 4760.72 4604 4759.12 c
-4608.48 4756.88 4611 4754.16 4611 4750 c
-4611 4742.96 4603.8 4739 4591.36 4739 c
-4580.96 4739 4574 4744.1 4574 4751.44 c
-4574 4754.48 4575.32 4757.2 4578.24 4760.24 c
-4580.32 4762.32 4585.12 4765.2 4586.4 4765.04 c
-h
-4608.8 4835.08 m
-4612.96 4835.08 4616 4831.19 4616 4825.52 c
-4616 4820.08 4614.08 4812.4 4611.36 4806.48 c
-4608 4799.12 4603.84 4795 4598.88 4795 c
-4594.56 4795 4592 4798.52 4592 4804.88 c
-4592 4811.28 4594.79 4821.04 4598.24 4827.12 c
-4601.28 4832.4 4604.64 4835.08 4608.8 4835.08 c
-h
-4648 4766 m
-f*
-1 i
-5048.15 4276.55 m
-5061.35 4314.95 5067.35 4354.55 5067.35 4395.35 c
-5067.35 4517.75 5010.95 4632.95 4913.75 4706.15 c
-S
-5002.55 4371.35 m
-5055.35 4306.55 l
-5138.15 4295.75 l
-4949.75 4116.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 2865 a(Figure)d(14:)40 b(The)28 b(e\013ect)h(of)f(AST)p
-Fy(_)p FG(REMAPFRAME)f(is)h(to)g(in)m(terp)s(ose)g(a)g(Mapping)g(b)s
-(et)m(w)m(een)g(a)g(nominated)0 2978 y(F)-8 b(rame)40
-b(within)f(a)h(F)-8 b(rameSet)40 b(and)f(the)h(remaining)f(con)m(ten)m
-(ts)i(of)f(the)f(F)-8 b(rameSet.)69 b(This)39 b(e\013ectiv)m(ely)j
-(\\re-)0 3091 y(de\014nes")23 b(the)h(co)s(ordinate)h(system)f
-(represen)m(ted)g(b)m(y)g(the)g(a\013ected)h(F)-8 b(rame.)40
-b(It)24 b(ma)m(y)g(b)s(e)f(used)g(to)i(comp)s(ensate)0
-3204 y(\(sa)m(y\))32 b(for)e(geometrical)j(c)m(hanges)e(made)g(to)g(an)
-f(asso)s(ciated)i(image.)42 b(The)30 b(in)m(ter-relationships)i(b)s(et)
-m(w)m(een)f(all)0 3316 y(the)g(other)f(F)-8 b(rames)31
-b(within)f(the)h(F)-8 b(rameSet)31 b(remain)g(unc)m(hanged.)0
-3677 y(P)m(erforming)k(the)f(steps)h(ab)s(o)m(v)m(e)h(is)e(rather)h
-(length)m(y)-8 b(,)37 b(ho)m(w)m(ev)m(er,)g(so)e(the)f(AST)p
-Fy(_)p FG(REMAPFRAME)h(function)0 3790 y(is)c(pro)m(vided)f(to)i(p)s
-(erform)d(all)j(of)f(these)h(op)s(erations)f(in)f(one)i(go.)43
-b(A)31 b(practical)h(example)g(of)f(its)g(use)g(is)f(giv)m(en)0
-3902 y(b)s(elo)m(w)h(\()p Fu(x)p FG(14.5\).)0 4201 y
-Fw(14.5)112 b(Example|Binning)40 b(an)e(Image)0 4425
-y FG(As)20 b(an)g(example)h(of)g(using)f(AST)p Fy(_)p
-FG(REMAPFRAME,)g(consider)g(a)h(case)g(where)f(the)g(pixels)h(of)f(a)h
-(2-dimensional)0 4538 y(image)26 b(ha)m(v)m(e)g(b)s(een)d(binned)h(2)p
-Fu(\002)p FG(2,)i(so)f(as)g(to)g(reduce)f(the)h(image)h(size)f(b)m(y)g
-(a)g(factor)g(of)g(t)m(w)m(o)h(in)e(eac)m(h)i(dimension.)0
-4651 y(W)-8 b(e)38 b(m)m(ust)e(no)m(w)g(mo)s(dify)g(the)g(asso)s
-(ciated)i(F)-8 b(rameSet)38 b(to)f(re\015ect)g(this)f(c)m(hange)h(to)g
-(the)g(image.)60 b(Muc)m(h)36 b(the)0 4763 y(same)31
-b(pro)s(cess)f(w)m(ould)g(b)s(e)g(needed)g(for)g(an)m(y)g(other)h
-(geometrical)i(c)m(hange)f(the)e(image)i(migh)m(t)f(undergo.)0
-4928 y(W)-8 b(e)34 b(\014rst)f(set)g(up)f(a)i(Mapping)f(\(a)g(WinMap)h
-(in)f(this)g(case\))h(whic)m(h)f(relates)h(the)f(data)h(grid)f(co)s
-(ordinates)h(in)0 5041 y(the)d(original)g(image)h(to)f(those)g(in)f
-(the)g(new)g(one:)262 5295 y Ft(INTEGER)40 b(WINMAP)262
-5394 y(DOUBLE)h(PRECISION)e(INA\()j(2)i(\),)e(INB\()g(2)h(\),)g(OUTA\()
-f(2)h(\),)g(OUTB\()e(2)i(\))262 5494 y(DATA)e(INA)i(/)g(0.5D0,)e(0.5D0)
-h(/)262 5593 y(DATA)f(INB)i(/)g(2.5D0,)e(2.5D0)h(/)262
-5693 y(DATA)f(OUTA)h(/)i(0.5D0,)d(0.5D0)g(/)p eop end
-%%Page: 122 132
-TeXDict begin 122 131 bop 0 52 a FG(122)1350 b Fz(14)92
-b(HIGHER)30 b(LEVEL)g(OPERA)-8 b(TIONS)29 b(ON)h(FRAMESETS)262
-351 y Ft(DATA)41 b(OUTB)h(/)i(1.5DO,)d(1.5DO)g(/)262
-551 y(...)262 750 y(WINMAP)g(=)i(AST_WINMAP\()c(2,)k(INA,)f(INB,)f
-(OUTA,)h(OUTB,)f(')j(',)e(STATUS)g(\))0 1052 y FG(Here,)j(w)m(e)d(ha)m
-(v)m(e)h(simply)f(set)g(up)f(arra)m(ys)h(con)m(taining)h(the)f(data)g
-(grid)g(co)s(ordinates)g(of)g(the)g(b)s(ottom)g(left)0
-1164 y(and)d(top)i(righ)m(t)f(corners)g(of)g(the)h(\014rst)e(elemen)m
-(t)j(in)d(the)i(output)e(image)j(\(OUT)-8 b(A)40 b(and)g(OUTB\))g(and)f
-(the)0 1277 y(corresp)s(onding)34 b(co)s(ordinates)h(in)f(the)h(input)e
-(image)j(\(INA)f(and)f(INB\).)i(AST)p Fy(_)p FG(WINMAP)e(then)g
-(creates)i(a)0 1390 y(WinMap)c(whic)m(h)g(p)s(erforms)f(the)h(required)
-f(transformation.)47 b(W)-8 b(e)33 b(do)f(not)g(need)g(to)h(kno)m(w)f
-(the)g(size)h(of)f(the)0 1503 y(image.)0 1679 y(W)-8
-b(e)38 b(can)f(then)f(pass)g(this)h(WinMap)g(to)g(AST)p
-Fy(_)p FG(REMAPFRAME.)g(This)e(mo)s(di\014es)h(the)h(relationship)g(b)s
-(e-)0 1792 y(t)m(w)m(een)26 b(our)f(F)-8 b(rameSet's)26
-b(base)f(F)-8 b(rame)26 b(and)f(the)g(other)g(F)-8 b(rames)26
-b(in)f(the)g(F)-8 b(rameSet,)27 b(so)f(that)f(the)g(base)h(F)-8
-b(rame)0 1905 y(represen)m(ts)30 b(the)h(data)g(grid)f(co)s(ordinate)h
-(system)g(of)f(the)h(new)f(image)h(rather)g(than)f(the)g(old)h(one:)262
-2193 y Ft(INTEGER)40 b(FRAMESET)262 2393 y(...)262 2592
-y(CALL)h(AST_REMAPFRAME\()d(FRAMESET,)i(AST__BASE,)f(WINMAP,)i(STATUS)g
-(\))0 2894 y FG(An)m(y)34 b(other)g(co)s(ordinate)g(systems)g(describ)s
-(ed)e(b)m(y)i(the)g(F)-8 b(rameSet,)36 b(no)d(matter)i(ho)m(w)f(man)m
-(y)f(of)h(these)g(there)0 3007 y(migh)m(t)d(b)s(e,)f(are)h(no)m(w)f
-(correctly)i(asso)s(ciated)g(with)e(the)g(new)g(image.)0
-3344 y Fw(14.6)112 b(Main)m(taining)40 b(the)d(In)m(tegrit)m(y)g(of)g
-(F)-9 b(rameSets)0 3585 y FG(When)35 b(constructing)i(a)e(F)-8
-b(rameSet,)39 b(y)m(ou)d(are)g(pro)m(vided)f(with)g(a)h(framew)m(ork)g
-(in)m(to)g(whic)m(h)g(y)m(ou)g(can)g(place)0 3698 y(an)m(y)f(com)m
-(bination)g(of)f(F)-8 b(rames)35 b(and)f(Mappings)g(that)h(y)m(ou)f
-(wish.)52 b(There)33 b(are)i(relativ)m(ely)h(few)e(constrain)m(ts)0
-3811 y(on)d(this)f(pro)s(cess)h(and)f(no)g(c)m(hec)m(ks)i(are)g(p)s
-(erformed)d(to)i(see)h(whether)e(the)h(F)-8 b(rameSet)31
-b(y)m(ou)g(construct)h(mak)m(es)0 3924 y(ph)m(ysical)24
-b(sense.)39 b(It)23 b(is)h(quite)g(p)s(ossible,)h(for)e(example,)j(to)f
-(construct)f(a)g(F)-8 b(rameSet)25 b(con)m(taining)g(t)m(w)m(o)g(iden)m
-(tical)0 4037 y(SkyF)-8 b(rames)32 b(whic)m(h)g(are)g(in)m(ter-related)
-h(b)m(y)f(a)g(non-unit)f(Mapping.)45 b(AST)31 b(will)h(not)g(ob)5
-b(ject)33 b(if)f(y)m(ou)g(do)f(this,)0 4149 y(but)f(it)h(mak)m(es)h(no)
-f(sense,)g(b)s(ecause)f(applying)h(a)g(non-unit)f(Mapping)h(to)g(an)m
-(y)g(set)h(of)e(celestial)k(co)s(ordinates)0 4262 y(cannot)d(yield)f(p)
-s(ositions)h(that)g(are)f(still)h(in)f(the)h(original)g(co)s(ordinate)g
-(system.)41 b(If)30 b(y)m(ou)h(use)f(suc)m(h)g(a)g(F)-8
-b(rame-)0 4375 y(Set)36 b(to)g(p)s(erform)e(co)s(ordinate)i(con)m(v)m
-(ersions,)j(y)m(ou)c(are)h(lik)m(ely)h(to)g(get)f(unpredictable)f
-(results)h(b)s(ecause)f(the)0 4488 y(information)c(in)f(the)g(F)-8
-b(rameSet)32 b(is)e(corrupt.)0 4664 y(It)35 b(is,)i(of)e(course,)i(y)m
-(our)e(resp)s(onsibilit)m(y)g(as)g(a)g(programmer)g(to)h(ensure)e(the)h
-(v)-5 b(alidit)m(y)37 b(of)e(an)m(y)g(information)0 4777
-y(whic)m(h)43 b(y)m(ou)g(insert)g(in)m(to)h(a)f(F)-8
-b(rameSet.)80 b(Normally)-8 b(,)47 b(this)c(is)g(straigh)m(tforw)m(ard)
-h(and)e(simply)h(consists)g(of)0 4890 y(form)m(ulating)28
-b(y)m(our)f(problem)g(correctly)i(\(a)f(diagram)g(can)f(often)h(help)f
-(to)h(clarify)g(ho)m(w)f(co)s(ordinate)h(systems)0 5003
-y(are)23 b(in)m(ter-related\))h(and)d(writing)h(the)h(appropriate)f
-(bug-free)g(co)s(de)g(to)h(construct)g(the)f(F)-8 b(rameSet.)39
-b(Ho)m(w)m(ev)m(er,)0 5116 y(once)31 b(y)m(ou)g(start)g(to)g(mo)s(dify)
-e(an)i(existing)g(F)-8 b(rameSet,)32 b(there)e(are)h(new)f(opp)s
-(ortunities)g(for)g(corrupting)g(it!)0 5292 y(Consider,)d(for)g
-(example,)h(a)g(F)-8 b(rameSet)28 b(whose)f(curren)m(t)f(F)-8
-b(rame)28 b(is)f(a)g(SkyF)-8 b(rame.)40 b(W)-8 b(e)29
-b(can)e(set)g(a)h(new)e(v)-5 b(alue)0 5404 y(for)30 b(this)g(SkyF)-8
-b(rame's)31 b(Equino)m(x)g(attribute)g(simply)f(b)m(y)g(using)g(AST)p
-Fy(_)p FG(SET)e(on)i(the)h(F)-8 b(rameSet,)32 b(as)e(follo)m(ws:)262
-5693 y Ft(CALL)41 b(AST_SET\()g(FRAMESET,)f('Equinox=J2010')o(,)e
-(STATUS)j(\))p eop end
-%%Page: 123 133
-TeXDict begin 123 132 bop 0 52 a Fz(14.6)93 b(Main)m(taining)32
-b(the)e(In)m(tegrit)m(y)i(of)f(F)-8 b(rameSets)1836 b
-FG(123)0 351 y(The)39 b(e\013ect)i(of)e(this)g(will)h(b)s(e)f(to)h(c)m
-(hange)g(the)g(celestial)h(co)s(ordinate)g(system)e(whic)m(h)g(the)g
-(curren)m(t)h(F)-8 b(rame)0 464 y(represen)m(ts.)65 b(Y)-8
-b(ou)39 b(can)g(see,)j(ho)m(w)m(ev)m(er,)g(that)d(this)g(has)f(the)h(p)
-s(oten)m(tial)h(to)f(mak)m(e)h(the)e(F)-8 b(rameSet)40
-b(corrupt)0 577 y(unless)28 b(corresp)s(onding)g(c)m(hanges)h(are)g
-(also)h(made)e(to)i(the)f(Mapping)f(whic)m(h)g(relates)i(this)f(SkyF)-8
-b(rame)29 b(to)g(the)0 690 y(other)k(F)-8 b(rames)33
-b(within)f(the)h(F)-8 b(rameSet.)49 b(In)32 b(fact,)i(it)f(is)g(a)g
-(general)h(rule)e(that)h(an)m(y)g(c)m(hange)h(to)f(a)g(F)-8
-b(rameSet)0 803 y(whic)m(h)27 b(a\013ects)i(its)e(curren)m(t)g(F)-8
-b(rame)28 b(can)g(p)s(oten)m(tially)h(require)d(corresp)s(onding)h(c)m
-(hanges)h(to)g(the)f(F)-8 b(rameSet's)0 916 y(Mappings)30
-b(in)g(order)g(to)h(main)m(tain)h(its)e(o)m(v)m(erall)j(in)m(tegrit)m
-(y)-8 b(.)0 1067 y(F)g(ortunately)g(,)29 b(once)d(y)m(ou)g(ha)m(v)m(e)g
-(stored)g(v)-5 b(alid)26 b(information)g(in)f(a)h(F)-8
-b(rameSet,)28 b(AST)c(will)i(lo)s(ok)g(after)g(these)g(de-)0
-1180 y(tails)e(for)f(y)m(ou)g(automatically)-8 b(,)29
-b(so)23 b(that)h(the)f(F)-8 b(rameSet's)24 b(in)m(tegrit)m(y)h(is)e
-(main)m(tained.)40 b(In)22 b(the)h(example)h(ab)s(o)m(v)m(e,)0
-1293 y(it)35 b(w)m(ould)g(do)g(this)g(b)m(y)f(appropriately)h
-(re-mapping)g(the)g(curren)m(t)g(F)-8 b(rame)35 b(\(as)h(if)f(AST)p
-Fy(_)p FG(REMAPFRAME)0 1406 y(had)28 b(b)s(een)g(used|)p
-Fu(x)p FG(14.4\))i(in)f(resp)s(onse)f(to)h(the)g(use)g(of)f(AST)p
-Fy(_)p FG(SET.)g(One)g(w)m(a)m(y)i(of)e(illustrating)i(this)f(pro)s
-(cess)0 1519 y(is)h(as)h(follo)m(ws:)262 1723 y Ft(INTEGER)40
-b(SKYFRAME)262 1922 y(...)262 2121 y(SKYFRAME)g(=)j(AST_SKYFRAME\()38
-b(')43 b(',)g(STATUS)e(\))262 2221 y(FRAMESET)f(=)j(AST_FRAMESET\()38
-b(SKYFRAME,)i(STATUS)h(\))262 2321 y(CALL)g(AST_ADDFRAME\()e(FRAMESET,)
-h(1,)i(AST_UNITMAP\()d(2,)k(')g(',)g(STATUS)e(\))218
-2420 y(:)828 b(SKYFRAME,)40 b(STATUS)h(\))0 2637 y FG(This)27
-b(constructs)g(a)h(trivial)h(F)-8 b(rameSet)29 b(whose)e(base)g(and)g
-(curren)m(t)h(F)-8 b(rames)28 b(are)g(b)s(oth)f(the)g(same)h(SkyF)-8
-b(rame)0 2750 y(connected)29 b(b)m(y)f(a)h(UnitMap.)41
-b(Y)-8 b(ou)29 b(can)f(think)g(of)h(this)f(as)h(a)f(\\pip)s(e")h
-(connecting)g(t)m(w)m(o)h(co)s(ordinate)f(systems.)0
-2863 y(A)m(t)c(presen)m(t,)g(these)g(t)m(w)m(o)g(systems)f(represen)m
-(t)g(iden)m(tical)i(ICRS)c(co)s(ordinates,)27 b(so)d(the)g(F)-8
-b(rameSet)25 b(implemen)m(ts)0 2976 y(a)g(unit)g(Mapping.)38
-b(W)-8 b(e)27 b(can)e(c)m(hange)h(the)f(co)s(ordinate)g(system)h(on)e
-(the)h(curren)m(t)g(end)f(of)h(this)g(pip)s(e)f(as)h(follo)m(ws:)262
-3180 y Ft(CALL)41 b(AST_SET\()g(FRAMESET,)f('System=Eclipti)o(c,)d
-(Equinox=J2010',)h(STATUS)j(\))0 3397 y FG(and)e(the)g(Mapping)g(whic)m
-(h)g(the)g(F)-8 b(rameSet)41 b(implemen)m(ts)e(w)m(ould)g(c)m(hange)i
-(accordingly)-8 b(.)68 b(T)-8 b(o)40 b(c)m(hange)g(the)0
-3510 y(co)s(ordinate)31 b(system)g(on)f(the)h(base)f(end)g(of)g(the)h
-(pip)s(e,)f(w)m(e)g(migh)m(t)i(use:)262 3714 y Ft(CALL)41
-b(AST_INVERT\()e(FRAMESET)i(\))262 3814 y(CALL)g(AST_SET\()g(FRAMESET,)
-f('System=Galacti)o(c',)d(STATUS)k(\))262 3914 y(CALL)g(AST_INVERT\()e
-(FRAMESET)i(\))0 4131 y FG(The)30 b(F)-8 b(rameSet)31
-b(w)m(ould)g(then)f(con)m(v)m(ert)i(b)s(et)m(w)m(een)f(galactic)i(and)d
-(ecliptic)i(co)s(ordinates.)0 4282 y(Note)45 b(that)g(AST)p
-Fy(_)p FG(SET)d(is)i(not)h(the)f(only)g(function)g(whic)m(h)g(has)g
-(this)g(e\013ect:)69 b(AST)p Fy(_)p FG(CLEAR)43 b(b)s(eha)m(v)m(es)0
-4395 y(similarly)-8 b(,)32 b(as)f(also)h(do)s(es)f(AST)p
-Fy(_)p FG(PERMAXES)f(\()p Fu(x)p FG(7.9\).)44 b(If)31
-b(y)m(ou)g(need)g(to)g(circum)m(v)m(en)m(t)i(this)d(mec)m(hanism)i(for)
-0 4508 y(an)m(y)d(reason,)h(this)f(can)g(b)s(e)f(done)h(b)m(y)g(going)h
-(b)s(ehind)d(the)i(scenes)h(and)e(obtaining)i(a)f(p)s(oin)m(ter)g
-(directly)h(to)f(the)0 4621 y(F)-8 b(rame)31 b(y)m(ou)g(wish)f(to)h(mo)
-s(dify)-8 b(.)40 b(Consider)30 b(the)g(follo)m(wing,)i(for)e(example:)
-262 4825 y Ft(SKYFRAME)40 b(=)j(AST_GETFRAME\()38 b(FRAMESET,)i
-(AST__CURRENT,)e(STATUS)j(\))262 4925 y(CALL)g(AST_SET\()g(SKYFRAME,)f
-('Equinox=J2010')o(,)e(STATUS)j(\))262 5024 y(CALL)g(AST_ANNUL\()f
-(SKYFRAME,)g(STATUS)h(\))0 5241 y FG(Here,)36 b(AST)p
-Fy(_)p FG(SET)d(is)h(applied)g(to)h(the)g(SkyF)-8 b(rame)35
-b(p)s(oin)m(ter)f(rather)h(than)f(the)g(F)-8 b(rameSet)36
-b(p)s(oin)m(ter,)g(so)e(the)0 5354 y(usual)28 b(c)m(hec)m(ks)i(on)e(F)
--8 b(rameSet)29 b(in)m(tegrit)m(y)i(do)d(not)g(o)s(ccur.)40
-b(The)28 b(SkyF)-8 b(rame's)29 b(Equino)m(x)f(attribute)h(will)g
-(there-)0 5467 y(fore)35 b(b)s(e)g(mo)s(di\014ed)f(without)h(an)m(y)g
-(corresp)s(onding)f(c)m(hange)i(to)g(the)f(F)-8 b(rameSet's)37
-b(Mappings.)54 b(In)34 b(this)h(case)0 5580 y(y)m(ou)29
-b(m)m(ust)g(tak)m(e)i(resp)s(onsibilit)m(y)e(y)m(ourself)g(for)g(main)m
-(taining)h(the)f(F)-8 b(rameSet's)31 b(in)m(tegrit)m(y)-8
-b(,)32 b(p)s(erhaps)27 b(through)0 5693 y(appropriate)j(use)g(of)h(AST)
-p Fy(_)p FG(REMAPFRAME.)p eop end
-%%Page: 124 134
-TeXDict begin 124 133 bop 0 52 a FG(124)1350 b Fz(14)92
-b(HIGHER)30 b(LEVEL)g(OPERA)-8 b(TIONS)29 b(ON)h(FRAMESETS)0
-351 y Fw(14.7)112 b(Merging)38 b(F)-9 b(rameSets)0 568
-y FG(As)33 b(w)m(ell)h(as)f(adding)f(individual)h(F)-8
-b(rames)33 b(to)h(a)f(F)-8 b(rameSet)34 b(\()p Fu(x)p
-FG(13.3\),)j(it)c(is)g(also)h(p)s(ossible)e(to)i(add)e(complete)0
-681 y(sets)43 b(of)g(in)m(ter-related)h(F)-8 b(rames)44
-b(whic)m(h)e(are)h(con)m(tained)h(within)e(another)h(F)-8
-b(rameSet.)78 b(This,)45 b(of)e(course,)0 794 y(corresp)s(onds)29
-b(to)i(the)g(pro)s(cess)f(of)g(merging)h(t)m(w)m(o)h(F)-8
-b(rameSets)31 b(\(Figure)g(15\).)695 4132 y @beginspecial
-57 @llx 88 @lly 535 @urx 732 @ury 2868 @rwi @setspecial
-%%BeginDocument: sun210_figures/fsmerge.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 57 88 535 732
-%..................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/10 16:06:29
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5339.75 6665.75 m
-5339.75 6989.75 5075.75 7253.75 4751.75 7253.75 c
-1220.15 7253.75 l
-896.15 7253.75 632.15 6989.75 632.15 6665.75 c
-632.15 1478.15 l
-632.15 1154.15 896.15 890.151 1220.15 890.151 c
-4751.75 890.151 l
-5075.75 890.151 5339.75 1154.15 5339.75 1478.15 c
-f*
-1 g
-5274.95 6720.95 m
-5274.95 7044.95 5012.15 7307.75 4688.15 7307.75 c
-1164.95 7307.75 l
-840.95 7307.75 578.15 7044.95 578.15 6720.95 c
-578.15 1541.75 l
-578.15 1217.75 840.95 954.95 1164.95 954.95 c
-4688.15 954.95 l
-5012.15 954.95 5274.95 1217.75 5274.95 1541.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5274.95 6720.95 m
-5274.95 7044.95 5012.15 7307.75 4688.15 7307.75 c
-1164.95 7307.75 l
-840.95 7307.75 578.15 7044.95 578.15 6720.95 c
-578.15 1541.75 l
-578.15 1217.75 840.95 954.95 1164.95 954.95 c
-4688.15 954.95 l
-5012.15 954.95 5274.95 1217.75 5274.95 1541.75 c
-h
-S
-1 g
-5054.15 3765.35 m
-5054.15 3972.95 4886.15 4140.95 4678.55 4140.95 c
-1577.75 4140.95 l
-1370.15 4140.95 1202.15 3972.95 1202.15 3765.35 c
-1202.15 1515.35 l
-1202.15 1307.75 1370.15 1139.75 1577.75 1139.75 c
-4678.55 1139.75 l
-4886.15 1139.75 5054.15 1307.75 5054.15 1515.35 c
-f*
-0 g
-1580.15 4130.15 m
-1578.95 4139.75 l
-1514.15 4133.75 l
-1515.35 4122.95 l
-f*
-1515.35 4122.95 m
-1514.15 4133.75 l
-1514.15 4133.75 l
-1516.55 4122.95 l
-f*
-1516.55 4122.95 m
-1514.15 4133.75 l
-1498.55 4130.15 l
-1500.95 4119.35 l
-f*
-1445.75 4104.95 m
-1442.15 4113.35 l
-1390.55 4089.35 l
-1395.35 4080.95 l
-f*
-1395.35 4080.95 m
-1390.55 4089.35 l
-1390.55 4089.35 l
-1397.75 4080.95 l
-f*
-1397.75 4080.95 m
-1390.55 4089.35 l
-1371.35 4076.15 l
-1377.35 4068.95 l
-f*
-1331.75 4031.75 m
-1324.55 4040.15 l
-1290.95 4006.55 l
-1296.95 3998.15 l
-f*
-1296.95 3998.15 m
-1290.95 4006.55 l
-1290.95 4006.55 l
-1299.35 3999.35 l
-f*
-1299.35 3999.35 m
-1290.95 4006.55 l
-1274.15 3980.15 l
-1281.35 3974.15 l
-f*
-1252.55 3924.95 m
-1244.15 3929.75 l
-1226.15 3893.75 l
-1234.55 3890.15 l
-f*
-1234.55 3890.15 m
-1226.15 3893.75 l
-1226.15 3893.75 l
-1235.75 3891.35 l
-f*
-1235.75 3891.35 m
-1226.15 3893.75 l
-1216.55 3854.15 l
-1226.15 3851.75 l
-f*
-1216.55 3794.15 m
-1205.75 3796.55 l
-1203.35 3764.15 l
-1214.15 3762.95 l
-f*
-1214.15 3762.95 m
-1203.35 3764.15 l
-1203.35 3764.15 l
-1214.15 3764.15 l
-f*
-1203.35 3716.15 10.7996 47.9998 re
-f*
-1203.35 3575.75 10.7996 80.3999 re
-f*
-1203.35 3436.55 10.7996 79.2 re
-f*
-1203.35 3296.15 10.7996 80.3999 re
-f*
-1203.35 3155.75 10.7996 80.3999 re
-f*
-1203.35 3016.55 10.7996 79.2 re
-f*
-1203.35 2876.15 10.7996 80.3999 re
-f*
-1203.35 2735.75 10.7996 80.3999 re
-f*
-1203.35 2596.55 10.7996 79.2 re
-f*
-1203.35 2456.15 10.7996 80.3999 re
-f*
-1203.35 2315.75 10.7996 80.3999 re
-f*
-1203.35 2176.55 10.7996 79.2 re
-f*
-1203.35 2036.15 10.7996 80.3999 re
-f*
-1203.35 1895.75 10.7996 80.3999 re
-f*
-1203.35 1756.55 10.7996 79.2 re
-f*
-1203.35 1616.15 10.7996 80.3999 re
-f*
-1203.35 1512.95 10.7996 43.2 re
-f*
-1214.15 1512.95 m
-1203.35 1512.95 l
-1203.35 1512.95 l
-1214.15 1514.15 l
-f*
-1214.15 1514.15 m
-1203.35 1512.95 l
-1206.95 1475.75 l
-1217.75 1476.95 l
-f*
-1227.35 1419.35 m
-1217.75 1416.95 l
-1226.15 1384.55 l
-1235.75 1386.95 l
-f*
-1235.75 1386.95 m
-1226.15 1384.55 l
-1226.15 1384.55 l
-1234.55 1388.15 l
-f*
-1234.55 1388.15 m
-1226.15 1384.55 l
-1246.55 1342.55 l
-1254.95 1347.35 l
-f*
-1284.95 1298.15 m
-1277.75 1292.15 l
-1290.95 1271.75 l
-1299.35 1277.75 l
-f*
-1299.35 1277.75 m
-1290.95 1271.75 l
-1290.95 1271.75 l
-1298.15 1280.15 l
-f*
-1298.15 1280.15 m
-1290.95 1271.75 l
-1329.35 1233.35 l
-1337.75 1240.55 l
-f*
-1383.35 1205.75 m
-1377.35 1198.55 l
-1390.55 1188.95 l
-1397.75 1196.15 l
-f*
-1397.75 1196.15 m
-1390.55 1188.95 l
-1390.55 1188.95 l
-1395.35 1197.35 l
-f*
-1395.35 1197.35 m
-1390.55 1188.95 l
-1446.95 1162.55 l
-1451.75 1170.95 l
-f*
-1508.15 1156.55 m
-1505.75 1146.95 l
-1514.15 1144.55 l
-1516.55 1154.15 l
-f*
-1516.55 1154.15 m
-1514.15 1144.55 l
-1514.15 1144.55 l
-1515.35 1154.15 l
-f*
-1515.35 1154.15 m
-1514.15 1144.55 l
-1578.95 1138.55 l
-1580.15 1148.15 l
-f*
-1580.15 1148.15 m
-1578.95 1138.55 l
-1578.95 1138.55 l
-1578.95 1148.15 l
-f*
-1578.95 1138.55 6 9.6001 re
-f*
-1644.95 1138.55 80.3999 9.6001 re
-f*
-1785.35 1138.55 79.2 9.6001 re
-f*
-1924.55 1138.55 80.3999 9.6001 re
-f*
-2064.95 1138.55 80.3999 9.6001 re
-f*
-2205.35 1138.55 79.2 9.6001 re
-f*
-2344.55 1138.55 80.3999 9.6001 re
-f*
-2484.95 1138.55 80.3999 9.6001 re
-f*
-2625.35 1138.55 79.2002 9.6001 re
-f*
-2764.55 1138.55 80.3999 9.6001 re
-f*
-2904.95 1138.55 80.3999 9.6001 re
-f*
-3045.35 1138.55 79.2002 9.6001 re
-f*
-3184.55 1138.55 80.3999 9.6001 re
-f*
-3324.95 1138.55 80.3999 9.6001 re
-f*
-3465.35 1138.55 79.2 9.6001 re
-f*
-3604.55 1138.55 80.3999 9.6001 re
-f*
-3744.95 1138.55 80.3999 9.6001 re
-f*
-3885.35 1138.55 79.2 9.6001 re
-f*
-4024.55 1138.55 80.3999 9.6001 re
-f*
-4164.95 1138.55 80.3999 9.6001 re
-f*
-4305.35 1138.55 79.2 9.6001 re
-f*
-4444.55 1138.55 80.3999 9.6001 re
-f*
-4584.95 1138.55 80.3999 9.6001 re
-f*
-4724.15 1151.75 m
-4725.35 1142.15 l
-4744.55 1144.55 l
-4743.35 1154.15 l
-f*
-4743.35 1154.15 m
-4744.55 1144.55 l
-4744.55 1144.55 l
-4742.15 1154.15 l
-f*
-4742.15 1154.15 m
-4744.55 1144.55 l
-4803.35 1160.15 l
-4800.95 1169.75 l
-f*
-4853.75 1192.55 m
-4857.35 1182.95 l
-4866.95 1188.95 l
-4863.35 1197.35 l
-f*
-4863.35 1197.35 m
-4866.95 1188.95 l
-4866.95 1188.95 l
-4860.95 1197.35 l
-f*
-4860.95 1197.35 m
-4866.95 1188.95 l
-4920.95 1226.15 l
-4916.15 1234.55 l
-f*
-4916.15 1234.55 m
-4920.95 1226.15 l
-4920.95 1226.15 l
-4913.75 1233.35 l
-f*
-4913.75 1233.35 m
-4920.95 1226.15 l
-4922.15 1227.35 l
-4916.15 1234.55 l
-f*
-4958.15 1277.75 m
-4965.35 1269.35 l
-4967.75 1271.75 l
-4960.55 1280.15 l
-f*
-4960.55 1280.15 m
-4967.75 1271.75 l
-4967.75 1271.75 l
-4958.15 1278.95 l
-f*
-4958.15 1278.95 m
-4967.75 1271.75 l
-5004.95 1325.75 l
-4997.75 1331.75 l
-f*
-4997.75 1331.75 m
-5004.95 1325.75 l
-5004.95 1325.75 l
-4996.55 1329.35 l
-f*
-4996.55 1329.35 m
-5004.95 1325.75 l
-5008.55 1334.15 l
-5000.15 1340.15 l
-f*
-5024.15 1391.75 m
-5033.75 1389.35 l
-5048.15 1448.15 l
-5038.55 1450.55 l
-f*
-5038.55 1450.55 m
-5048.15 1448.15 l
-5048.15 1448.15 l
-5038.55 1449.35 l
-f*
-5038.55 1449.35 m
-5048.15 1448.15 l
-5049.35 1467.35 l
-5039.75 1468.55 l
-f*
-5044.55 1527.35 10.7996 80.3999 re
-f*
-5044.55 1667.75 10.7996 79.2 re
-f*
-5044.55 1806.95 10.7996 80.3999 re
-f*
-5044.55 1947.35 10.7996 80.3999 re
-f*
-5044.55 2087.75 10.7996 79.2 re
-f*
-5044.55 2226.95 10.7996 80.3999 re
-f*
-5044.55 2367.35 10.7996 80.3999 re
-f*
-5044.55 2507.75 10.7996 79.2 re
-f*
-5044.55 2646.95 10.7996 80.3999 re
-f*
-5044.55 2787.35 10.7996 80.3999 re
-f*
-5044.55 2927.75 10.7996 79.2 re
-f*
-5044.55 3066.95 10.7996 80.3999 re
-f*
-5044.55 3207.35 10.7996 80.3999 re
-f*
-5044.55 3347.75 10.7996 79.2 re
-f*
-5044.55 3486.95 10.7996 80.3999 re
-f*
-5044.55 3627.35 10.7996 80.3999 re
-f*
-5044.55 3766.55 m
-5055.35 3767.75 l
-5048.15 3830.15 l
-5038.55 3828.95 l
-f*
-5038.55 3828.95 m
-5048.15 3830.15 l
-5048.15 3830.15 l
-5038.55 3827.75 l
-f*
-5038.55 3827.75 m
-5048.15 3830.15 l
-5044.55 3846.95 l
-5034.95 3844.55 l
-f*
-5018.15 3899.75 m
-5027.75 3903.35 l
-5004.95 3952.55 l
-4996.55 3948.95 l
-f*
-4996.55 3948.95 m
-5004.95 3952.55 l
-5004.95 3952.55 l
-4996.55 3946.55 l
-f*
-4996.55 3946.55 m
-5004.95 3952.55 l
-4989.35 3972.95 l
-4980.95 3968.15 l
-f*
-4946.15 4013.75 m
-4953.35 4019.75 l
-4920.95 4052.15 l
-4913.75 4046.15 l
-f*
-4913.75 4046.15 m
-4920.95 4052.15 l
-4920.95 4052.15 l
-4914.95 4043.75 l
-f*
-4914.95 4043.75 m
-4920.95 4052.15 l
-4893.35 4071.35 l
-4887.35 4062.95 l
-f*
-4838.15 4091.75 m
-4841.75 4101.35 l
-4808.15 4116.95 l
-4804.55 4108.55 l
-f*
-4804.55 4108.55 m
-4808.15 4116.95 l
-4808.15 4116.95 l
-4805.75 4107.35 l
-f*
-4805.75 4107.35 m
-4808.15 4116.95 l
-4767.35 4127.75 l
-4764.95 4118.15 l
-f*
-4707.35 4127.75 m
-4708.55 4137.35 l
-4679.75 4139.75 l
-4678.55 4130.15 l
-f*
-4678.55 4130.15 m
-4679.75 4139.75 l
-4679.75 4139.75 l
-4679.75 4130.15 l
-f*
-4628.15 4130.15 51.5999 9.59961 re
-f*
-4488.95 4130.15 79.2 9.59961 re
-f*
-4348.55 4130.15 80.3999 9.59961 re
-f*
-4208.15 4130.15 80.3999 9.59961 re
-f*
-4068.95 4130.15 79.2 9.59961 re
-f*
-3928.55 4130.15 80.3999 9.59961 re
-f*
-3788.15 4130.15 80.3999 9.59961 re
-f*
-3648.95 4130.15 79.2 9.59961 re
-f*
-3508.55 4130.15 80.3999 9.59961 re
-f*
-3368.15 4130.15 80.3999 9.59961 re
-f*
-3228.95 4130.15 79.2 9.59961 re
-f*
-3088.55 4130.15 80.3999 9.59961 re
-f*
-2948.15 4130.15 80.3999 9.59961 re
-f*
-2808.95 4130.15 79.2 9.59961 re
-f*
-2668.55 4130.15 80.3999 9.59961 re
-f*
-2528.15 4130.15 80.3999 9.59961 re
-f*
-2388.95 4130.15 79.2 9.59961 re
-f*
-2248.55 4130.15 80.3999 9.59961 re
-f*
-2108.15 4130.15 80.3999 9.59961 re
-f*
-1968.95 4130.15 79.2 9.59961 re
-f*
-1828.55 4130.15 80.3999 9.59961 re
-f*
-1688.15 4130.15 80.3999 9.59961 re
-f*
-1578.95 4130.15 49.2002 9.59961 re
-f*
-0.564706 g
-2262.95 6855.35 m
-2262.95 6965.75 2171.75 7056.95 2060.15 7056.95 c
-1563.35 7056.95 l
-1451.75 7056.95 1360.55 6965.75 1360.55 6855.35 c
-1360.55 6717.35 l
-1360.55 6606.95 1451.75 6515.75 1563.35 6515.75 c
-2060.15 6515.75 l
-2171.75 6515.75 2262.95 6606.95 2262.95 6717.35 c
-f*
-1 g
-2198.15 6912.95 m
-2198.15 7022.15 2109.35 7110.95 1997.75 7110.95 c
-1506.95 7110.95 l
-1396.55 7110.95 1306.55 7022.15 1306.55 6912.95 c
-1306.55 6778.55 l
-1306.55 6669.35 1395.35 6580.55 1506.95 6580.55 c
-1997.75 6580.55 l
-2109.35 6580.55 2198.15 6669.35 2198.15 6778.55 c
-f*
-0 g
-2198.15 6912.95 m
-2198.15 7022.15 2109.35 7110.95 1997.75 7110.95 c
-1506.95 7110.95 l
-1396.55 7110.95 1306.55 7022.15 1306.55 6912.95 c
-1306.55 6778.55 l
-1306.55 6669.35 1395.35 6580.55 1506.95 6580.55 c
-1997.75 6580.55 l
-2109.35 6580.55 2198.15 6669.35 2198.15 6778.55 c
-h
-S
-0.201248 i
-1539.33 6952 m
-1425.22 6952 l
-1425.22 6947 l
-1439.11 6946.2 1443 6943.18 1443 6932.72 c
-1443 6835.32 l
-1443 6824.85 1440.17 6822.64 1425.22 6821.03 c
-1425.22 6816 l
-1497.67 6816 l
-1497.67 6821 l
-1479.15 6821.81 1476 6824.23 1476 6835.32 c
-1476 6882.21 l
-1496.22 6881.81 1503.55 6874.36 1506.32 6851.02 c
-1511.35 6851.02 l
-1511.35 6919.04 l
-1506.32 6919.04 l
-1502.76 6896.1 1495.82 6889.05 1476 6889.05 c
-1476 6935.74 l
-1476 6943.19 1478.52 6945 1488.41 6945 c
-1507.13 6945 1518.8 6941.64 1525.04 6934.74 c
-1529.47 6929.71 1531.68 6924.27 1534.5 6911.59 c
-1539.33 6911.59 l
-h
-1544.96 6816 m
-f*
-1589.19 6909 m
-1550.84 6909 l
-1550.84 6903.95 l
-1559.49 6902.74 1562 6900.12 1562 6892.07 c
-1562 6832.9 l
-1562 6824.65 1559.93 6822.44 1550.84 6820.83 c
-1550.84 6816 l
-1604.37 6816 l
-1604.37 6820.83 l
-1592.09 6821.63 1590 6824.25 1590 6836.73 c
-1590 6874.76 l
-1590 6885.23 1595.49 6893.88 1601.95 6893.88 c
-1603.56 6893.88 1605.37 6892.47 1607.59 6889.25 c
-1611.41 6883.82 1614.43 6882.01 1619.66 6882.01 c
-1627.11 6882.01 1632.34 6887.64 1632.34 6895.29 c
-1632.34 6904.55 1625.5 6911.41 1616.04 6911.41 c
-1606.1 6911.41 1598.54 6906.12 1589.19 6892.27 c
-h
-1634.35 6816 m
-f*
-1729.19 6828.88 m
-1727.18 6826.87 l
-1726.57 6826.26 1725.97 6826.06 1724.96 6826.06 c
-1722.15 6826.06 1721 6827.67 1721 6831.09 c
-1721 6883.62 l
-1721 6900.73 1705.6 6911.42 1680.89 6911.42 c
-1658.15 6911.42 1642.85 6901.06 1642.85 6885.83 c
-1642.85 6877.38 1647.69 6872.55 1655.94 6872.55 c
-1663.99 6872.55 1669.62 6877.38 1669.62 6884.22 c
-1669.62 6887.04 1668.61 6889.66 1666 6892.88 c
-1664.19 6894.89 1663.58 6896.1 1663.58 6897.3 c
-1663.58 6901.53 1669.02 6904.42 1676.26 6904.42 c
-1688.14 6904.42 1693.86 6899.08 1693.86 6887.04 c
-1693.86 6872.35 l
-1669.91 6865.1 1660.29 6861.48 1652.51 6856.45 c
-1643.46 6850.41 1639 6843.37 1639 6834.52 c
-1639 6822.24 1648.27 6813.18 1661.17 6813.18 c
-1672.84 6813.18 1682.1 6817.21 1693.17 6827.27 c
-1695.38 6817.01 1699.81 6813.18 1709.67 6813.18 c
-1718.32 6813.18 1724.56 6816.4 1732.21 6824.65 c
-h
-1693 6836.13 m
-1687.55 6829.89 1683.52 6827.47 1678.68 6827.47 c
-1672.64 6827.47 1668 6832.91 1668 6840.96 c
-1668 6852.63 1676.61 6860.88 1693 6865.31 c
-h
-1734.62 6816 m
-f*
-1776.4 6909 m
-1737.7 6909 l
-1737.7 6903.95 l
-1746.55 6902.74 1749 6900.32 1749 6892.07 c
-1749 6832.9 l
-1749 6824.65 1746.74 6822.44 1737.7 6820.83 c
-1737.7 6816 l
-1786 6816 l
-1786 6820.83 l
-1778.95 6821.84 1777 6824.65 1777 6832.3 c
-1777 6886.03 l
-1777 6887.04 1779.87 6890.66 1782.18 6892.88 c
-1786.4 6896.1 1790.02 6898.42 1793.65 6898.42 c
-1801.5 6898.42 1805 6893.59 1805 6881 c
-1805 6832.3 l
-1805 6824.05 1802.68 6821.43 1794.85 6820.83 c
-1794.85 6816 l
-1841.95 6816 l
-1841.95 6820.83 l
-1834.9 6821.64 1833 6824.65 1833 6832.3 c
-1833 6886.03 l
-1833 6887.04 1835.73 6890.46 1837.92 6892.68 c
-1842.35 6896.1 1845.97 6898.42 1849.59 6898.42 c
-1857.24 6898.42 1860 6893.38 1860 6881 c
-1860 6832.3 l
-1860 6823.85 1857.85 6821.43 1850.4 6820.83 c
-1850.4 6816 l
-1898.3 6816 l
-1898.3 6821 l
-1890.45 6821.4 1888 6823.78 1888 6832.3 c
-1888 6882.81 l
-1888 6900.12 1877.43 6911.42 1861.07 6911.42 c
-1849.59 6911.42 1841.95 6906.73 1831.48 6893.68 c
-1825.44 6906.36 1818.4 6911.42 1805.72 6911.42 c
-1792.95 6911.42 1783.98 6905.91 1776.4 6893.68 c
-h
-1901.64 6816 m
-f*
-1979.9 6841.16 m
-1971.65 6831.29 1965.61 6827.18 1956.96 6827.18 c
-1949.31 6827.18 1943.27 6830.77 1939.25 6837.94 c
-1935.43 6844.54 1933.82 6851.56 1933.01 6866 c
-1983.73 6866 l
-1982.52 6882.36 1979.5 6891.43 1973.26 6899.12 c
-1966.82 6906.96 1957.36 6911.42 1946.09 6911.42 c
-1920.94 6911.42 1904.03 6891.4 1904.03 6861.88 c
-1904.03 6832.5 1920.53 6813.18 1945.49 6813.18 c
-1961.79 6813.18 1971.65 6819.42 1984.73 6838.34 c
-h
-1932 6873 m
-1932.61 6896.96 1936.23 6904.42 1946.09 6904.42 c
-1951.93 6904.42 1955.55 6901.38 1957.16 6895.49 c
-1958.17 6891.67 1958.57 6886.03 1958.97 6875.77 c
-1958.97 6873 l
-h
-1988.35 6816 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -6816]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4722.95 6054.95 m
-4722.95 6166.55 4631.75 6257.75 4520.15 6257.75 c
-4023.35 6257.75 l
-3911.75 6257.75 3820.55 6166.55 3820.55 6054.95 c
-3820.55 5918.15 l
-3820.55 5806.55 3911.75 5715.35 4023.35 5715.35 c
-4520.15 5715.35 l
-4631.75 5715.35 4722.95 5806.55 4722.95 5918.15 c
-f*
-1 g
-4653.35 6111.35 m
-4653.35 6219.35 4564.55 6306.95 4455.35 6306.95 c
-3969.35 6306.95 l
-3860.15 6306.95 3771.35 6219.35 3771.35 6111.35 c
-3771.35 5980.55 l
-3771.35 5872.55 3860.15 5784.95 3969.35 5784.95 c
-4455.35 5784.95 l
-4564.55 5784.95 4653.35 5872.55 4653.35 5980.55 c
-f*
-16 w
-0 g
-4653.35 6111.35 m
-4653.35 6219.35 4564.55 6306.95 4455.35 6306.95 c
-3969.35 6306.95 l
-3860.15 6306.95 3771.35 6219.35 3771.35 6111.35 c
-3771.35 5980.55 l
-3771.35 5872.55 3860.15 5784.95 3969.35 5784.95 c
-4455.35 5784.95 l
-4564.55 5784.95 4653.35 5872.55 4653.35 5980.55 c
-h
-S
-0.201248 i
-3999.33 6153 m
-3885.22 6153 l
-3885.22 6148 l
-3899.11 6147.2 3903 6144.18 3903 6133.72 c
-3903 6036.32 l
-3903 6025.85 3900.17 6023.64 3885.22 6022.03 c
-3885.22 6017 l
-3957.67 6017 l
-3957.67 6022 l
-3939.15 6022.81 3936 6025.23 3936 6036.32 c
-3936 6083.21 l
-3956.22 6082.81 3963.55 6075.36 3966.32 6052.02 c
-3971.35 6052.02 l
-3971.35 6120.04 l
-3966.32 6120.04 l
-3962.76 6097.1 3955.82 6090.05 3936 6090.05 c
-3936 6136.74 l
-3936 6144.19 3938.52 6146 3948.41 6146 c
-3967.13 6146 3978.8 6142.64 3985.04 6135.74 c
-3989.47 6130.71 3991.68 6125.27 3994.5 6112.59 c
-3999.33 6112.59 l
-h
-4004.96 6017 m
-f*
-4049.19 6110 m
-4010.84 6110 l
-4010.84 6104.95 l
-4019.49 6103.74 4022 6101.12 4022 6093.07 c
-4022 6033.9 l
-4022 6025.65 4019.93 6023.44 4010.84 6021.83 c
-4010.84 6017 l
-4064.37 6017 l
-4064.37 6021.83 l
-4052.09 6022.63 4050 6025.25 4050 6037.73 c
-4050 6075.76 l
-4050 6086.23 4055.49 6094.88 4061.95 6094.88 c
-4063.56 6094.88 4065.37 6093.47 4067.59 6090.25 c
-4071.41 6084.82 4074.43 6083.01 4079.66 6083.01 c
-4087.11 6083.01 4092.34 6088.64 4092.34 6096.29 c
-4092.34 6105.55 4085.5 6112.41 4076.04 6112.41 c
-4066.1 6112.41 4058.54 6107.12 4049.19 6093.27 c
-h
-4094.35 6017 m
-f*
-4189.19 6029.88 m
-4187.18 6027.87 l
-4186.57 6027.26 4185.97 6027.06 4184.96 6027.06 c
-4182.15 6027.06 4181 6028.67 4181 6032.09 c
-4181 6084.62 l
-4181 6101.73 4165.6 6112.42 4140.89 6112.42 c
-4118.15 6112.42 4102.85 6102.06 4102.85 6086.83 c
-4102.85 6078.38 4107.69 6073.55 4115.94 6073.55 c
-4123.99 6073.55 4129.62 6078.38 4129.62 6085.22 c
-4129.62 6088.04 4128.61 6090.66 4126 6093.88 c
-4124.19 6095.89 4123.58 6097.1 4123.58 6098.3 c
-4123.58 6102.53 4129.02 6105.42 4136.26 6105.42 c
-4148.14 6105.42 4153.86 6100.08 4153.86 6088.04 c
-4153.86 6073.35 l
-4129.91 6066.1 4120.29 6062.48 4112.51 6057.45 c
-4103.46 6051.41 4099 6044.37 4099 6035.52 c
-4099 6023.24 4108.27 6014.18 4121.17 6014.18 c
-4132.84 6014.18 4142.1 6018.21 4153.17 6028.27 c
-4155.38 6018.01 4159.81 6014.18 4169.67 6014.18 c
-4178.32 6014.18 4184.56 6017.4 4192.21 6025.65 c
-h
-4153 6037.13 m
-4147.55 6030.89 4143.52 6028.47 4138.68 6028.47 c
-4132.64 6028.47 4128 6033.91 4128 6041.96 c
-4128 6053.63 4136.61 6061.88 4153 6066.31 c
-h
-4194.62 6017 m
-f*
-4236.4 6110 m
-4197.7 6110 l
-4197.7 6104.95 l
-4206.55 6103.74 4209 6101.32 4209 6093.07 c
-4209 6033.9 l
-4209 6025.65 4206.74 6023.44 4197.7 6021.83 c
-4197.7 6017 l
-4246 6017 l
-4246 6021.83 l
-4238.95 6022.84 4237 6025.65 4237 6033.3 c
-4237 6087.03 l
-4237 6088.04 4239.87 6091.66 4242.18 6093.88 c
-4246.4 6097.1 4250.02 6099.42 4253.65 6099.42 c
-4261.5 6099.42 4265 6094.59 4265 6082 c
-4265 6033.3 l
-4265 6025.05 4262.68 6022.43 4254.85 6021.83 c
-4254.85 6017 l
-4301.95 6017 l
-4301.95 6021.83 l
-4294.9 6022.64 4293 6025.65 4293 6033.3 c
-4293 6087.03 l
-4293 6088.04 4295.73 6091.46 4297.92 6093.68 c
-4302.35 6097.1 4305.97 6099.42 4309.59 6099.42 c
-4317.24 6099.42 4320 6094.38 4320 6082 c
-4320 6033.3 l
-4320 6024.85 4317.85 6022.43 4310.4 6021.83 c
-4310.4 6017 l
-4358.3 6017 l
-4358.3 6022 l
-4350.45 6022.4 4348 6024.78 4348 6033.3 c
-4348 6083.81 l
-4348 6101.12 4337.43 6112.42 4321.07 6112.42 c
-4309.59 6112.42 4301.95 6107.73 4291.48 6094.68 c
-4285.44 6107.36 4278.4 6112.42 4265.72 6112.42 c
-4252.95 6112.42 4243.98 6106.91 4236.4 6094.68 c
-h
-4361.64 6017 m
-f*
-4439.9 6042.16 m
-4431.65 6032.29 4425.61 6028.18 4416.96 6028.18 c
-4409.31 6028.18 4403.27 6031.77 4399.25 6038.94 c
-4395.43 6045.54 4393.82 6052.56 4393.01 6067 c
-4443.73 6067 l
-4442.52 6083.36 4439.5 6092.43 4433.26 6100.12 c
-4426.82 6107.96 4417.36 6112.42 4406.09 6112.42 c
-4380.94 6112.42 4364.03 6092.4 4364.03 6062.88 c
-4364.03 6033.5 4380.53 6014.18 4405.49 6014.18 c
-4421.79 6014.18 4431.65 6020.42 4444.73 6039.34 c
-h
-4392 6074 m
-4392.61 6097.96 4396.23 6105.42 4406.09 6105.42 c
-4411.93 6105.42 4415.55 6102.38 4417.16 6096.49 c
-4418.17 6092.67 4418.57 6087.03 4418.97 6076.77 c
-4418.97 6074 l
-h
-4448.35 6017 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4484 -6015]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3794.15 5348.15 m
-3794.15 5458.55 3702.95 5549.75 3591.35 5549.75 c
-3095.75 5549.75 l
-2984.15 5549.75 2892.95 5458.55 2892.95 5348.15 c
-2892.95 5210.15 l
-2892.95 5099.75 2984.15 5008.55 3095.75 5008.55 c
-3591.35 5008.55 l
-3702.95 5008.55 3794.15 5099.75 3794.15 5210.15 c
-f*
-1 g
-3729.35 5405.75 m
-3729.35 5514.95 3640.55 5603.75 3530.15 5603.75 c
-3039.35 5603.75 l
-2927.75 5603.75 2838.95 5514.95 2838.95 5405.75 c
-2838.95 5271.35 l
-2838.95 5162.15 2927.75 5073.35 3039.35 5073.35 c
-3528.95 5073.35 l
-3640.55 5073.35 3729.35 5162.15 3729.35 5271.35 c
-f*
-8 w
-0 g
-3729.35 5405.75 m
-3729.35 5514.95 3640.55 5603.75 3530.15 5603.75 c
-3039.35 5603.75 l
-2927.75 5603.75 2838.95 5514.95 2838.95 5405.75 c
-2838.95 5271.35 l
-2838.95 5162.15 2927.75 5073.35 3039.35 5073.35 c
-3528.95 5073.35 l
-3640.55 5073.35 3729.35 5162.15 3729.35 5271.35 c
-h
-S
-0.201248 i
-3082.33 5445 m
-2968.22 5445 l
-2968.22 5440 l
-2982.11 5439.2 2986 5436.18 2986 5425.72 c
-2986 5328.32 l
-2986 5317.85 2983.17 5315.64 2968.22 5314.03 c
-2968.22 5309 l
-3040.67 5309 l
-3040.67 5314 l
-3022.15 5314.81 3019 5317.23 3019 5328.32 c
-3019 5375.21 l
-3039.22 5374.81 3046.55 5367.36 3049.32 5344.02 c
-3054.35 5344.02 l
-3054.35 5412.04 l
-3049.32 5412.04 l
-3045.76 5389.1 3038.82 5382.05 3019 5382.05 c
-3019 5428.74 l
-3019 5436.19 3021.52 5438 3031.41 5438 c
-3050.13 5438 3061.8 5434.64 3068.04 5427.74 c
-3072.47 5422.71 3074.68 5417.27 3077.5 5404.59 c
-3082.33 5404.59 l
-h
-3087.96 5309 m
-f*
-3131.19 5402 m
-3092.84 5402 l
-3092.84 5396.95 l
-3101.49 5395.74 3104 5393.12 3104 5385.07 c
-3104 5325.9 l
-3104 5317.65 3101.93 5315.44 3092.84 5313.83 c
-3092.84 5309 l
-3146.37 5309 l
-3146.37 5313.83 l
-3134.09 5314.63 3132 5317.25 3132 5329.73 c
-3132 5367.76 l
-3132 5378.23 3137.49 5386.88 3143.95 5386.88 c
-3145.56 5386.88 3147.37 5385.47 3149.59 5382.25 c
-3153.41 5376.82 3156.43 5375.01 3161.66 5375.01 c
-3169.11 5375.01 3174.34 5380.64 3174.34 5388.29 c
-3174.34 5397.55 3167.5 5404.41 3158.04 5404.41 c
-3148.1 5404.41 3140.54 5399.12 3131.19 5385.27 c
-h
-3176.35 5309 m
-f*
-3271.19 5321.88 m
-3269.18 5319.87 l
-3268.57 5319.26 3267.97 5319.06 3266.96 5319.06 c
-3264.15 5319.06 3263 5320.67 3263 5324.09 c
-3263 5376.62 l
-3263 5393.73 3247.6 5404.42 3222.89 5404.42 c
-3200.15 5404.42 3184.85 5394.06 3184.85 5378.83 c
-3184.85 5370.38 3189.69 5365.55 3197.94 5365.55 c
-3205.99 5365.55 3211.62 5370.38 3211.62 5377.22 c
-3211.62 5380.04 3210.61 5382.66 3208 5385.88 c
-3206.19 5387.89 3205.58 5389.1 3205.58 5390.3 c
-3205.58 5394.53 3211.02 5397.42 3218.26 5397.42 c
-3230.14 5397.42 3235.86 5392.08 3235.86 5380.04 c
-3235.86 5365.35 l
-3211.91 5358.1 3202.29 5354.48 3194.51 5349.45 c
-3185.46 5343.41 3181 5336.37 3181 5327.52 c
-3181 5315.24 3190.27 5306.18 3203.17 5306.18 c
-3214.84 5306.18 3224.1 5310.21 3235.17 5320.27 c
-3237.38 5310.01 3241.81 5306.18 3251.67 5306.18 c
-3260.32 5306.18 3266.56 5309.4 3274.21 5317.65 c
-h
-3235 5329.13 m
-3229.55 5322.89 3225.52 5320.47 3220.68 5320.47 c
-3214.64 5320.47 3210 5325.91 3210 5333.96 c
-3210 5345.63 3218.61 5353.88 3235 5358.31 c
-h
-3276.62 5309 m
-f*
-3318.4 5402 m
-3279.7 5402 l
-3279.7 5396.95 l
-3288.55 5395.74 3291 5393.32 3291 5385.07 c
-3291 5325.9 l
-3291 5317.65 3288.74 5315.44 3279.7 5313.83 c
-3279.7 5309 l
-3328 5309 l
-3328 5313.83 l
-3320.95 5314.84 3319 5317.65 3319 5325.3 c
-3319 5379.03 l
-3319 5380.04 3321.87 5383.66 3324.18 5385.88 c
-3328.4 5389.1 3332.02 5391.42 3335.65 5391.42 c
-3343.5 5391.42 3347 5386.59 3347 5374 c
-3347 5325.3 l
-3347 5317.05 3344.68 5314.43 3336.85 5313.83 c
-3336.85 5309 l
-3383.95 5309 l
-3383.95 5313.83 l
-3376.9 5314.64 3375 5317.65 3375 5325.3 c
-3375 5379.03 l
-3375 5380.04 3377.73 5383.46 3379.92 5385.68 c
-3384.35 5389.1 3387.97 5391.42 3391.59 5391.42 c
-3399.24 5391.42 3402 5386.38 3402 5374 c
-3402 5325.3 l
-3402 5316.85 3399.85 5314.43 3392.4 5313.83 c
-3392.4 5309 l
-3440.3 5309 l
-3440.3 5314 l
-3432.45 5314.4 3430 5316.78 3430 5325.3 c
-3430 5375.81 l
-3430 5393.12 3419.43 5404.42 3403.07 5404.42 c
-3391.59 5404.42 3383.95 5399.73 3373.48 5386.68 c
-3367.44 5399.36 3360.4 5404.42 3347.72 5404.42 c
-3334.95 5404.42 3325.98 5398.91 3318.4 5386.68 c
-h
-3443.64 5309 m
-f*
-3523.9 5334.16 m
-3515.65 5324.29 3509.61 5320.18 3500.96 5320.18 c
-3493.31 5320.18 3487.27 5323.77 3483.25 5330.94 c
-3479.43 5337.54 3477.82 5344.56 3477.01 5359 c
-3527.73 5359 l
-3526.52 5375.36 3523.5 5384.43 3517.26 5392.12 c
-3510.82 5399.96 3501.36 5404.42 3490.09 5404.42 c
-3464.94 5404.42 3448.03 5384.4 3448.03 5354.88 c
-3448.03 5325.5 3464.53 5306.18 3489.49 5306.18 c
-3505.79 5306.18 3515.65 5312.42 3528.73 5331.34 c
-h
-3476 5366 m
-3476.61 5389.96 3480.23 5397.42 3490.09 5397.42 c
-3495.93 5397.42 3499.55 5394.38 3501.16 5388.49 c
-3502.17 5384.67 3502.57 5379.03 3502.97 5368.77 c
-3502.97 5366 l
-h
-3532.35 5309 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -5309]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-1751.75 6550.55 m
-1751.75 6558.95 1751.75 6558.95 1751.75 6550.55 c
-1751.75 6402.95 1791.35 6261.35 1863.35 6160.55 c
-S
-1804.55 6166.55 m
-1853.75 6182.15 l
-1878.95 6227.75 l
-1940.15 6080.15 l
-f*
-2244.95 5584.55 m
-2334.95 5466.95 2519.75 5382.95 2740.55 5361.35 c
-S
-2699.75 5318.15 m
-2721.35 5364.95 l
-2705.75 5412.95 l
-2854.55 5356.55 l
-f*
-2831.75 6964.55 m
-2729.75 7064.15 2584.55 7121.75 2430.95 7121.75 c
-2326.55 7121.75 2224.55 7095.35 2136.95 7044.95 c
-S
-2766.95 6958.55 m
-2814.95 6974.15 l
-2838.95 7019.75 l
-2902.55 6873.35 l
-f*
-3186.95 6388.55 m
-3275.75 6214.55 3440.15 6089.75 3635.75 6050.15 c
-S
-3591.35 6010.55 m
-3616.55 6056.15 l
-3604.55 6106.55 l
-3748.55 6035.75 l
-f*
-0.564706 g
-3638.15 6564.95 m
-3503.75 6600.95 l
-3599.75 6657.35 l
-3446.15 6665.75 l
-3488.15 6736.55 l
-3340.55 6716.15 l
-3323.75 6786.95 l
-3203.75 6742.55 l
-3128.15 6806.15 l
-3052.55 6742.55 l
-2932.55 6786.95 l
-2914.55 6716.15 l
-2765.75 6736.55 l
-2810.15 6665.75 l
-2656.55 6657.35 l
-2752.55 6600.95 l
-2616.95 6564.95 l
-2752.55 6530.15 l
-2656.55 6473.75 l
-2810.15 6464.15 l
-2765.75 6394.55 l
-2914.55 6414.95 l
-2932.55 6342.95 l
-3052.55 6388.55 l
-3128.15 6324.95 l
-3203.75 6388.55 l
-3323.75 6342.95 l
-3340.55 6414.95 l
-3488.15 6394.55 l
-3446.15 6464.15 l
-3599.75 6473.75 l
-3503.75 6530.15 l
-f*
-1 g
-3578.15 6624.95 m
-3443.75 6660.95 l
-3539.75 6717.35 l
-3386.15 6725.75 l
-3428.15 6796.55 l
-3280.55 6776.15 l
-3263.75 6846.95 l
-3143.75 6802.55 l
-3068.15 6866.15 l
-2992.55 6802.55 l
-2872.55 6846.95 l
-2854.55 6776.15 l
-2705.75 6796.55 l
-2750.15 6725.75 l
-2596.55 6717.35 l
-2692.55 6660.95 l
-2556.95 6624.95 l
-2692.55 6590.15 l
-2596.55 6533.75 l
-2750.15 6524.15 l
-2705.75 6454.55 l
-2854.55 6474.95 l
-2872.55 6402.95 l
-2992.55 6448.55 l
-3068.15 6384.95 l
-3143.75 6448.55 l
-3263.75 6402.95 l
-3280.55 6474.95 l
-3428.15 6454.55 l
-3386.15 6524.15 l
-3539.75 6533.75 l
-3443.75 6590.15 l
-f*
-0 g
-3578.15 6624.95 m
-3443.75 6660.95 l
-3539.75 6717.35 l
-3386.15 6725.75 l
-3428.15 6796.55 l
-3280.55 6776.15 l
-3263.75 6846.95 l
-3143.75 6802.55 l
-3068.15 6866.15 l
-2992.55 6802.55 l
-2872.55 6846.95 l
-2854.55 6776.15 l
-2705.75 6796.55 l
-2750.15 6725.75 l
-2596.55 6717.35 l
-2692.55 6660.95 l
-2556.95 6624.95 l
-2692.55 6590.15 l
-2596.55 6533.75 l
-2750.15 6524.15 l
-2705.75 6454.55 l
-2854.55 6474.95 l
-2872.55 6402.95 l
-2992.55 6448.55 l
-3068.15 6384.95 l
-3143.75 6448.55 l
-3263.75 6402.95 l
-3280.55 6474.95 l
-3428.15 6454.55 l
-3386.15 6524.15 l
-3539.75 6533.75 l
-3443.75 6590.15 l
-3578.15 6624.95 l
-3539.75 6624.95 l
-3417.35 6593.75 l
-3506.15 6540.95 l
-3368.15 6533.75 l
-3408.95 6467.75 l
-3273.35 6485.75 l
-3256.55 6417.35 l
-3141.35 6459.35 l
-3068.15 6396.95 l
-2994.95 6459.35 l
-2879.75 6417.35 l
-2861.75 6485.75 l
-2726.15 6467.75 l
-2766.95 6533.75 l
-2630.15 6540.95 l
-2718.95 6593.75 l
-2596.55 6624.95 l
-2717.75 6657.35 l
-2630.15 6710.15 l
-2766.95 6717.35 l
-2726.15 6783.35 l
-2861.75 6764.15 l
-2879.75 6833.75 l
-2994.95 6790.55 l
-3068.15 6852.95 l
-3141.35 6790.55 l
-3256.55 6833.75 l
-3273.35 6764.15 l
-3408.95 6783.35 l
-3368.15 6717.35 l
-3506.15 6710.15 l
-3417.35 6657.35 l
-3539.75 6624.95 l
-3578.15 6624.95 l
-f*
-0.2 i
-2890.08 6676.76 m
-2870.08 6602.52 l
-2867.52 6593.88 2864.48 6591.64 2854.08 6591 c
-2854.08 6587 l
-2904 6587 l
-2904 6591 l
-2894.72 6591.48 2892.48 6592.76 2892.48 6597.88 c
-2892.48 6599.64 2892.8 6601.4 2893.76 6605.08 c
-2893.92 6605.88 l
-2894.08 6606.68 l
-2913.76 6678.52 l
-2916.16 6686.84 2918.56 6689.08 2926.72 6690.04 c
-2926.72 6694 l
-2892.8 6694 l
-2843.2 6617.24 l
-2834.56 6694 l
-2799.2 6694 l
-2799.2 6690 l
-2809.28 6689.52 2810.72 6688.89 2810.72 6684.44 c
-2810.72 6682.2 2810.08 6679.32 2808.96 6675.16 c
-2791.52 6615.48 l
-2785.12 6594.68 2784 6592.92 2775.36 6591 c
-2775.36 6587 l
-2808.48 6587 l
-2808.48 6591 l
-2798.24 6592.28 2795.68 6594.2 2795.68 6600.76 c
-2795.68 6603.48 2796.48 6607.48 2798.72 6615.48 c
-2814.88 6674.52 l
-2825.6 6585.08 l
-2830.08 6585.08 l
-h
-2922.24 6587 m
-f*
-2991.44 6607.32 m
-2984.88 6598.52 2982.48 6595.76 2979.92 6595.76 c
-2978.64 6595.76 2978 6596.86 2978 6598.52 c
-2978 6602.52 2979.44 6609.08 2983.44 6622.2 c
-2994.8 6659.96 l
-2977.04 6658.84 l
-2974.16 6649.4 l
-2972.72 6657.56 2969.2 6661.08 2962.32 6661.08 c
-2942.64 6661.08 2919 6630.27 2919 6605.24 c
-2919 6593.08 2925.74 6584.92 2935.92 6584.92 c
-2945.68 6584.92 2953.04 6590.68 2962.16 6606.04 c
-2960.24 6599.48 2960 6597.56 2960 6595.32 c
-2960 6589.4 2964.76 6584.76 2970.64 6584.76 c
-2978.16 6584.76 2985.52 6591 2994.8 6604.92 c
-h
-2964.56 6654.2 m
-2968.08 6653.88 2970.56 6651 2970.56 6646.68 c
-2970.56 6637.08 2965.24 6619.32 2958.96 6608.28 c
-2954.64 6600.44 2949.84 6595.92 2945.52 6595.92 c
-2941.36 6595.92 2938 6599.75 2938 6604.92 c
-2938 6613.24 2943.42 6629.24 2950.16 6641.08 c
-2954.96 6649.56 2960.24 6654.52 2964.56 6654.2 c
-h
-3002 6587 m
-f*
-3036.56 6660.92 m
-3020.24 6658.36 3014 6657.4 3005.68 6656.44 c
-3005.68 6652 l
-3012.88 6651.69 3014.32 6651.07 3014.32 6648.12 c
-3014.32 6646.52 3013.04 6640.76 3010.8 6632.44 c
-2994.8 6570.36 l
-2991.76 6559.8 2990.48 6558.84 2982.8 6559 c
-2982.8 6554 l
-3022.64 6554 l
-3022.64 6559 l
-3014.64 6559.14 3012.24 6560.16 3012.24 6563.64 c
-3012.24 6565.88 3013.36 6570.68 3016.4 6581.88 c
-3017.52 6585.72 3017.52 6586.04 3018.16 6588.44 c
-3023.76 6585.56 3025.68 6584.92 3029.04 6584.92 c
-3050.8 6584.92 3073.36 6613.88 3073.36 6641.56 c
-3073.36 6653.4 3066.64 6661.08 3056.08 6661.08 c
-3046.96 6661.08 3039.92 6655.92 3030.48 6642.52 c
-h
-3047.12 6649.56 m
-3051.28 6649.24 3053.68 6645.56 3053.36 6640.44 c
-3052.72 6629.88 3047.6 6614.04 3041.84 6603.64 c
-3036.88 6595 3031.76 6589.92 3026.32 6589.92 c
-3022.8 6589.92 3020.08 6592.75 3020.08 6596.28 c
-3020.08 6599 3021.84 6605.56 3026.16 6620.12 c
-3029.68 6631.8 3031.12 6635.8 3033.52 6639.48 c
-3037.52 6645.72 3042.96 6649.88 3047.12 6649.56 c
-h
-3082 6587 m
-f*
-3117.56 6660.92 m
-3101.24 6658.36 3095 6657.4 3086.68 6656.44 c
-3086.68 6652 l
-3093.88 6651.69 3095.32 6651.07 3095.32 6648.12 c
-3095.32 6646.52 3094.04 6640.76 3091.8 6632.44 c
-3075.8 6570.36 l
-3072.76 6559.8 3071.48 6558.84 3063.8 6559 c
-3063.8 6554 l
-3103.64 6554 l
-3103.64 6559 l
-3095.64 6559.14 3093.24 6560.16 3093.24 6563.64 c
-3093.24 6565.88 3094.36 6570.68 3097.4 6581.88 c
-3098.52 6585.72 3098.52 6586.04 3099.16 6588.44 c
-3104.76 6585.56 3106.68 6584.92 3110.04 6584.92 c
-3131.8 6584.92 3154.36 6613.88 3154.36 6641.56 c
-3154.36 6653.4 3147.64 6661.08 3137.08 6661.08 c
-3127.96 6661.08 3120.92 6655.92 3111.48 6642.52 c
-h
-3128.12 6649.56 m
-3132.28 6649.24 3134.68 6645.56 3134.36 6640.44 c
-3133.72 6629.88 3128.6 6614.04 3122.84 6603.64 c
-3117.88 6595 3112.76 6589.92 3107.32 6589.92 c
-3103.8 6589.92 3101.08 6592.75 3101.08 6596.28 c
-3101.08 6599 3102.84 6605.56 3107.16 6620.12 c
-3110.68 6631.8 3112.12 6635.8 3114.52 6639.48 c
-3118.52 6645.72 3123.96 6649.88 3128.12 6649.56 c
-h
-3163 6587 m
-f*
-3196.56 6609.56 m
-3194.32 6606.36 l
-3190.16 6600.12 3186.48 6596.56 3184.08 6596.56 c
-3182.8 6596.56 3182 6597.77 3182 6599.16 c
-3182 6600.6 3182.62 6604.76 3183.12 6607.48 c
-3197.68 6660.92 l
-3189.22 6659 3178.26 6657.4 3166.04 6656.44 c
-3166.04 6652 l
-3167.44 6652 l
-3172.24 6652 3175.48 6650.44 3175.48 6647.48 c
-3175.48 6646.2 3174.71 6643.8 3173.68 6641.08 c
-3164.4 6606.68 l
-3163.12 6602.04 3163 6597.88 3163 6595.64 c
-3163 6589.56 3167.2 6585.56 3173.36 6585.56 c
-3182.96 6585.56 3188.88 6590.36 3200.08 6607.32 c
-h
-3192.88 6696.4 m
-3187.44 6696.4 3183 6691.46 3183 6686.04 c
-3183 6679.8 3187.26 6675.4 3193.04 6675.4 c
-3199.12 6675.4 3204 6679.86 3204 6685.56 c
-3204 6691.48 3199 6696.4 3192.88 6696.4 c
-h
-3206.48 6587 m
-f*
-3281.36 6608.6 m
-3274.96 6598.68 3272.88 6596.56 3270.16 6596.56 c
-3268.88 6596.56 3268 6597.63 3268 6599.16 c
-3268 6600.76 3268.94 6604.12 3271.92 6613.08 c
-3277.68 6630.52 l
-3280.24 6638.04 3282 6645.08 3282 6648.92 c
-3282 6656.76 3277.78 6661.08 3270.16 6661.08 c
-3264.24 6661.08 3258.48 6658.62 3254.16 6654.36 c
-3248.24 6648.76 3245.2 6644.92 3234.48 6629.08 c
-3244.72 6660.76 l
-3234.48 6658.52 3221.68 6656.92 3212.72 6656.6 c
-3212.72 6651.8 l
-3219.44 6651.65 3221.36 6650.92 3221.36 6648.12 c
-3221.36 6646.2 3219.12 6637.72 3214 6619.64 c
-3210.32 6606.68 3209.2 6602.52 3205.04 6587 c
-3224.4 6587 l
-3231.92 6614.68 3237.68 6628.6 3247.6 6641.56 c
-3250.8 6645.88 3255.76 6649.08 3258.64 6649.08 c
-3260.72 6649.08 3263 6647.63 3263 6646.04 c
-3263 6645.56 3262.54 6644.28 3261.84 6642.68 c
-3253.04 6616.12 l
-3250.48 6608.44 3249 6599.32 3249 6595.16 c
-3249 6589.08 3252.84 6585.56 3259.44 6585.56 c
-3269.04 6585.56 3275.6 6591 3284.88 6606.52 c
-h
-3294.96 6587 m
-f*
-3372.48 6656 m
-3354.72 6656 l
-3349.28 6659.58 3344.48 6661.08 3337.12 6661.08 c
-3317.44 6661.08 3301 6648.05 3301 6631.8 c
-3301 6623.64 3305.35 6617.88 3314.4 6614.2 c
-3301.28 6606.84 3299 6604.6 3299 6598.68 c
-3299 6593.56 3301.89 6590.52 3308.96 6588.12 c
-3299.04 6585.72 3295.84 6584.44 3292 6581.4 c
-3289.44 6579.16 3288 6575.32 3288 6571.48 c
-3288 6561.08 3299.56 6555 3317.76 6555 c
-3340.32 6555 3356 6564.72 3356 6578.52 c
-3356 6588.28 3349.6 6593.56 3332.16 6598.52 c
-3323.68 6600.92 l
-3318.56 6602.36 3315 6604.6 3315 6607 c
-3315 6609.56 3317.68 6612.28 3320 6612.28 c
-3320.8 6612.28 3321.92 6612.24 3323.2 6612.12 c
-3324.96 6611.64 3326.24 6611 3328.16 6611 c
-3335.2 6611 3342.4 6613.09 3348.48 6616.92 c
-3357.76 6622.2 3363 6630.36 3363 6639.96 c
-3363 6642.64 3362.59 6644.32 3361.76 6647 c
-3372.48 6647 l
-h
-3314.4 6586.04 m
-3316.32 6585.88 3328.48 6581.72 3332 6580.12 c
-3336.48 6577.88 3339 6575.16 3339 6571 c
-3339 6563.96 3331.8 6560 3319.36 6560 c
-3308.96 6560 3302 6565.1 3302 6572.44 c
-3302 6575.48 3303.32 6578.2 3306.24 6581.24 c
-3308.32 6583.32 3313.12 6586.2 3314.4 6586.04 c
-h
-3336.8 6656.08 m
-3340.96 6656.08 3344 6652.19 3344 6646.52 c
-3344 6641.08 3342.08 6633.4 3339.36 6627.48 c
-3336 6620.12 3331.84 6616 3326.88 6616 c
-3322.56 6616 3320 6619.52 3320 6625.88 c
-3320 6632.28 3322.79 6642.04 3326.24 6648.12 c
-3329.28 6653.4 3332.64 6656.08 3336.8 6656.08 c
-h
-3376 6587 m
-f*
-1 i
-0.564706 g
-2708.15 5769.35 m
-2573.75 5806.55 l
-2669.75 5861.75 l
-2516.15 5871.35 l
-2558.15 5940.95 l
-2410.55 5920.55 l
-2393.75 5992.55 l
-2273.75 5946.95 l
-2198.15 6010.55 l
-2122.55 5946.95 l
-2002.55 5992.55 l
-1984.55 5920.55 l
-1835.75 5940.95 l
-1880.15 5871.35 l
-1726.55 5861.75 l
-1822.55 5806.55 l
-1686.95 5769.35 l
-1822.55 5734.55 l
-1726.55 5678.15 l
-1880.15 5669.75 l
-1835.75 5600.15 l
-1984.55 5619.35 l
-2002.55 5548.55 l
-2122.55 5592.95 l
-2198.15 5529.35 l
-2273.75 5592.95 l
-2393.75 5548.55 l
-2410.55 5619.35 l
-2558.15 5600.15 l
-2516.15 5669.75 l
-2669.75 5678.15 l
-2573.75 5734.55 l
-f*
-1 g
-2648.15 5829.35 m
-2513.75 5866.55 l
-2609.75 5921.75 l
-2456.15 5931.35 l
-2498.15 6000.95 l
-2350.55 5980.55 l
-2333.75 6052.55 l
-2213.75 6006.95 l
-2138.15 6070.55 l
-2062.55 6006.95 l
-1942.55 6052.55 l
-1924.55 5980.55 l
-1775.75 6000.95 l
-1820.15 5931.35 l
-1666.55 5921.75 l
-1762.55 5866.55 l
-1626.95 5829.35 l
-1762.55 5794.55 l
-1666.55 5738.15 l
-1820.15 5729.75 l
-1775.75 5660.15 l
-1924.55 5679.35 l
-1942.55 5608.55 l
-2062.55 5652.95 l
-2138.15 5589.35 l
-2213.75 5652.95 l
-2333.75 5608.55 l
-2350.55 5679.35 l
-2498.15 5660.15 l
-2456.15 5729.75 l
-2609.75 5738.15 l
-2513.75 5794.55 l
-f*
-0 g
-2648.15 5829.35 m
-2513.75 5866.55 l
-2609.75 5921.75 l
-2456.15 5931.35 l
-2498.15 6000.95 l
-2350.55 5980.55 l
-2333.75 6052.55 l
-2213.75 6006.95 l
-2138.15 6070.55 l
-2062.55 6006.95 l
-1942.55 6052.55 l
-1924.55 5980.55 l
-1775.75 6000.95 l
-1820.15 5931.35 l
-1666.55 5921.75 l
-1762.55 5866.55 l
-1626.95 5829.35 l
-1762.55 5794.55 l
-1666.55 5738.15 l
-1820.15 5729.75 l
-1775.75 5660.15 l
-1924.55 5679.35 l
-1942.55 5608.55 l
-2062.55 5652.95 l
-2138.15 5589.35 l
-2213.75 5652.95 l
-2333.75 5608.55 l
-2350.55 5679.35 l
-2498.15 5660.15 l
-2456.15 5729.75 l
-2609.75 5738.15 l
-2513.75 5794.55 l
-2648.15 5829.35 l
-2609.75 5829.35 l
-2487.35 5798.15 l
-2576.15 5746.55 l
-2438.15 5738.15 l
-2478.95 5672.15 l
-2343.35 5691.35 l
-2326.55 5621.75 l
-2211.35 5664.95 l
-2138.15 5602.55 l
-2064.95 5664.95 l
-1949.75 5621.75 l
-1931.75 5691.35 l
-1796.15 5672.15 l
-1836.95 5738.15 l
-1700.15 5746.55 l
-1788.95 5798.15 l
-1666.55 5829.35 l
-1787.75 5861.75 l
-1700.15 5914.55 l
-1836.95 5921.75 l
-1796.15 5988.95 l
-1931.75 5969.75 l
-1949.75 6038.15 l
-2064.95 5996.15 l
-2138.15 6058.55 l
-2211.35 5996.15 l
-2326.55 6038.15 l
-2343.35 5969.75 l
-2478.95 5988.95 l
-2438.15 5921.75 l
-2576.15 5914.55 l
-2487.35 5861.75 l
-2609.75 5829.35 l
-2648.15 5829.35 l
-f*
-0.2 i
-1960.08 5880.76 m
-1940.08 5806.52 l
-1937.52 5797.88 1934.48 5795.64 1924.08 5795 c
-1924.08 5791 l
-1974 5791 l
-1974 5795 l
-1964.72 5795.48 1962.48 5796.76 1962.48 5801.88 c
-1962.48 5803.64 1962.8 5805.4 1963.76 5809.08 c
-1963.92 5809.88 l
-1964.08 5810.68 l
-1983.76 5882.52 l
-1986.16 5890.84 1988.56 5893.08 1996.72 5894.04 c
-1996.72 5898 l
-1962.8 5898 l
-1913.2 5821.24 l
-1904.56 5898 l
-1869.2 5898 l
-1869.2 5894 l
-1879.28 5893.52 1880.72 5892.89 1880.72 5888.44 c
-1880.72 5886.2 1880.08 5883.32 1878.96 5879.16 c
-1861.52 5819.48 l
-1855.12 5798.68 1854 5796.92 1845.36 5795 c
-1845.36 5791 l
-1878.48 5791 l
-1878.48 5795 l
-1868.24 5796.28 1865.68 5798.2 1865.68 5804.76 c
-1865.68 5807.48 1866.48 5811.48 1868.72 5819.48 c
-1884.88 5878.52 l
-1895.6 5789.08 l
-1900.08 5789.08 l
-h
-1992.24 5791 m
-f*
-2061.44 5811.32 m
-2054.88 5802.52 2052.48 5799.76 2049.92 5799.76 c
-2048.64 5799.76 2048 5800.86 2048 5802.52 c
-2048 5806.52 2049.44 5813.08 2053.44 5826.2 c
-2064.8 5863.96 l
-2047.04 5862.84 l
-2044.16 5853.4 l
-2042.72 5861.56 2039.2 5865.08 2032.32 5865.08 c
-2012.64 5865.08 1989 5834.27 1989 5809.24 c
-1989 5797.08 1995.74 5788.92 2005.92 5788.92 c
-2015.68 5788.92 2023.04 5794.68 2032.16 5810.04 c
-2030.24 5803.48 2030 5801.56 2030 5799.32 c
-2030 5793.4 2034.76 5788.76 2040.64 5788.76 c
-2048.16 5788.76 2055.52 5795 2064.8 5808.92 c
-h
-2034.56 5858.2 m
-2038.08 5857.88 2040.56 5855 2040.56 5850.68 c
-2040.56 5841.08 2035.24 5823.32 2028.96 5812.28 c
-2024.64 5804.44 2019.84 5799.92 2015.52 5799.92 c
-2011.36 5799.92 2008 5803.75 2008 5808.92 c
-2008 5817.24 2013.42 5833.24 2020.16 5845.08 c
-2024.96 5853.56 2030.24 5858.52 2034.56 5858.2 c
-h
-2072 5791 m
-f*
-2106.56 5864.92 m
-2090.24 5862.36 2084 5861.4 2075.68 5860.44 c
-2075.68 5856 l
-2082.88 5855.69 2084.32 5855.07 2084.32 5852.12 c
-2084.32 5850.52 2083.04 5844.76 2080.8 5836.44 c
-2064.8 5774.36 l
-2061.76 5763.8 2060.48 5762.84 2052.8 5763 c
-2052.8 5758 l
-2092.64 5758 l
-2092.64 5763 l
-2084.64 5763.14 2082.24 5764.16 2082.24 5767.64 c
-2082.24 5769.88 2083.36 5774.68 2086.4 5785.88 c
-2087.52 5789.72 2087.52 5790.04 2088.16 5792.44 c
-2093.76 5789.56 2095.68 5788.92 2099.04 5788.92 c
-2120.8 5788.92 2143.36 5817.88 2143.36 5845.56 c
-2143.36 5857.4 2136.64 5865.08 2126.08 5865.08 c
-2116.96 5865.08 2109.92 5859.92 2100.48 5846.52 c
-h
-2117.12 5853.56 m
-2121.28 5853.24 2123.68 5849.56 2123.36 5844.44 c
-2122.72 5833.88 2117.6 5818.04 2111.84 5807.64 c
-2106.88 5799 2101.76 5793.92 2096.32 5793.92 c
-2092.8 5793.92 2090.08 5796.75 2090.08 5800.28 c
-2090.08 5803 2091.84 5809.56 2096.16 5824.12 c
-2099.68 5835.8 2101.12 5839.8 2103.52 5843.48 c
-2107.52 5849.72 2112.96 5853.88 2117.12 5853.56 c
-h
-2152 5791 m
-f*
-2187.56 5864.92 m
-2171.24 5862.36 2165 5861.4 2156.68 5860.44 c
-2156.68 5856 l
-2163.88 5855.69 2165.32 5855.07 2165.32 5852.12 c
-2165.32 5850.52 2164.04 5844.76 2161.8 5836.44 c
-2145.8 5774.36 l
-2142.76 5763.8 2141.48 5762.84 2133.8 5763 c
-2133.8 5758 l
-2173.64 5758 l
-2173.64 5763 l
-2165.64 5763.14 2163.24 5764.16 2163.24 5767.64 c
-2163.24 5769.88 2164.36 5774.68 2167.4 5785.88 c
-2168.52 5789.72 2168.52 5790.04 2169.16 5792.44 c
-2174.76 5789.56 2176.68 5788.92 2180.04 5788.92 c
-2201.8 5788.92 2224.36 5817.88 2224.36 5845.56 c
-2224.36 5857.4 2217.64 5865.08 2207.08 5865.08 c
-2197.96 5865.08 2190.92 5859.92 2181.48 5846.52 c
-h
-2198.12 5853.56 m
-2202.28 5853.24 2204.68 5849.56 2204.36 5844.44 c
-2203.72 5833.88 2198.6 5818.04 2192.84 5807.64 c
-2187.88 5799 2182.76 5793.92 2177.32 5793.92 c
-2173.8 5793.92 2171.08 5796.75 2171.08 5800.28 c
-2171.08 5803 2172.84 5809.56 2177.16 5824.12 c
-2180.68 5835.8 2182.12 5839.8 2184.52 5843.48 c
-2188.52 5849.72 2193.96 5853.88 2198.12 5853.56 c
-h
-2233 5791 m
-f*
-2266.56 5813.56 m
-2264.32 5810.36 l
-2260.16 5804.12 2256.48 5800.56 2254.08 5800.56 c
-2252.8 5800.56 2252 5801.77 2252 5803.16 c
-2252 5804.6 2252.62 5808.76 2253.12 5811.48 c
-2267.68 5864.92 l
-2259.22 5863 2248.26 5861.4 2236.04 5860.44 c
-2236.04 5856 l
-2237.44 5856 l
-2242.24 5856 2245.48 5854.44 2245.48 5851.48 c
-2245.48 5850.2 2244.71 5847.8 2243.68 5845.08 c
-2234.4 5810.68 l
-2233.12 5806.04 2233 5801.88 2233 5799.64 c
-2233 5793.56 2237.2 5789.56 2243.36 5789.56 c
-2252.96 5789.56 2258.88 5794.36 2270.08 5811.32 c
-h
-2262.88 5900.4 m
-2257.44 5900.4 2253 5895.46 2253 5890.04 c
-2253 5883.8 2257.26 5879.4 2263.04 5879.4 c
-2269.12 5879.4 2274 5883.86 2274 5889.56 c
-2274 5895.48 2269 5900.4 2262.88 5900.4 c
-h
-2276.48 5791 m
-f*
-2351.36 5812.6 m
-2344.96 5802.68 2342.88 5800.56 2340.16 5800.56 c
-2338.88 5800.56 2338 5801.63 2338 5803.16 c
-2338 5804.76 2338.94 5808.12 2341.92 5817.08 c
-2347.68 5834.52 l
-2350.24 5842.04 2352 5849.08 2352 5852.92 c
-2352 5860.76 2347.78 5865.08 2340.16 5865.08 c
-2334.24 5865.08 2328.48 5862.62 2324.16 5858.36 c
-2318.24 5852.76 2315.2 5848.92 2304.48 5833.08 c
-2314.72 5864.76 l
-2304.48 5862.52 2291.68 5860.92 2282.72 5860.6 c
-2282.72 5855.8 l
-2289.44 5855.65 2291.36 5854.92 2291.36 5852.12 c
-2291.36 5850.2 2289.12 5841.72 2284 5823.64 c
-2280.32 5810.68 2279.2 5806.52 2275.04 5791 c
-2294.4 5791 l
-2301.92 5818.68 2307.68 5832.6 2317.6 5845.56 c
-2320.8 5849.88 2325.76 5853.08 2328.64 5853.08 c
-2330.72 5853.08 2333 5851.63 2333 5850.04 c
-2333 5849.56 2332.54 5848.28 2331.84 5846.68 c
-2323.04 5820.12 l
-2320.48 5812.44 2319 5803.32 2319 5799.16 c
-2319 5793.08 2322.84 5789.56 2329.44 5789.56 c
-2339.04 5789.56 2345.6 5795 2354.88 5810.52 c
-h
-2364.96 5791 m
-f*
-2442.48 5860 m
-2424.72 5860 l
-2419.28 5863.58 2414.48 5865.08 2407.12 5865.08 c
-2387.44 5865.08 2371 5852.05 2371 5835.8 c
-2371 5827.64 2375.35 5821.88 2384.4 5818.2 c
-2371.28 5810.84 2369 5808.6 2369 5802.68 c
-2369 5797.56 2371.89 5794.52 2378.96 5792.12 c
-2369.04 5789.72 2365.84 5788.44 2362 5785.4 c
-2359.44 5783.16 2358 5779.32 2358 5775.48 c
-2358 5765.08 2369.56 5759 2387.76 5759 c
-2410.32 5759 2426 5768.72 2426 5782.52 c
-2426 5792.28 2419.6 5797.56 2402.16 5802.52 c
-2393.68 5804.92 l
-2388.56 5806.36 2385 5808.6 2385 5811 c
-2385 5813.56 2387.68 5816.28 2390 5816.28 c
-2390.8 5816.28 2391.92 5816.24 2393.2 5816.12 c
-2394.96 5815.64 2396.24 5815 2398.16 5815 c
-2405.2 5815 2412.4 5817.09 2418.48 5820.92 c
-2427.76 5826.2 2433 5834.36 2433 5843.96 c
-2433 5846.64 2432.59 5848.32 2431.76 5851 c
-2442.48 5851 l
-h
-2384.4 5790.04 m
-2386.32 5789.88 2398.48 5785.72 2402 5784.12 c
-2406.48 5781.88 2409 5779.16 2409 5775 c
-2409 5767.96 2401.8 5764 2389.36 5764 c
-2378.96 5764 2372 5769.1 2372 5776.44 c
-2372 5779.48 2373.32 5782.2 2376.24 5785.24 c
-2378.32 5787.32 2383.12 5790.2 2384.4 5790.04 c
-h
-2406.8 5860.08 m
-2410.96 5860.08 2414 5856.19 2414 5850.52 c
-2414 5845.08 2412.08 5837.4 2409.36 5831.48 c
-2406 5824.12 2401.84 5820 2396.88 5820 c
-2392.56 5820 2390 5823.52 2390 5829.88 c
-2390 5836.28 2392.79 5846.04 2396.24 5852.12 c
-2399.28 5857.4 2402.64 5860.08 2406.8 5860.08 c
-h
-2446 5791 m
-f*
-1 i
-1 g
-4222.55 6369.35 m
-4388.15 6520.55 l
-4306.55 6520.55 l
-4306.55 6674.15 l
-4139.75 6674.15 l
-4139.75 6520.55 l
-4058.15 6520.55 l
-f*
-0 g
-4222.55 6369.35 m
-4388.15 6520.55 l
-4306.55 6520.55 l
-4306.55 6674.15 l
-4139.75 6674.15 l
-4139.75 6520.55 l
-4058.15 6520.55 l
-4222.55 6369.35 l
-4222.55 6383.75 l
-4083.35 6510.95 l
-4149.35 6510.95 l
-4149.35 6664.55 l
-4295.75 6664.55 l
-4295.75 6510.95 l
-4361.75 6510.95 l
-4222.55 6383.75 l
-4222.55 6369.35 l
-f*
-0.2 i
-3775.88 6907 m
-3775.88 6902 l
-3788.3 6901.29 3792 6898.45 3792 6889.4 c
-3792 6802.28 l
-3792 6793.1 3789.25 6790.94 3775.88 6789.5 c
-3775.88 6785 l
-3833.84 6785 l
-3864.26 6785 3884 6798.5 3884 6818.84 c
-3884 6827.12 3880.73 6834.32 3874.7 6839.9 c
-3868.4 6845.48 3862.28 6848 3849.68 6850.7 c
-3870.56 6856.82 3878 6864.2 3878 6877.88 c
-3878 6896.42 3861.55 6907 3831.5 6907 c
-h
-3821 6846.74 m
-3825.92 6846.74 l
-3844.46 6846.74 3853 6837.2 3853 6817.22 c
-3853 6799.76 3845.77 6791 3831.5 6791 c
-3823.58 6791 3821 6793.99 3821 6801.74 c
-h
-3821 6892.46 m
-3821 6898.94 3823.39 6902 3830.24 6902 c
-3842.84 6902 3849 6894.03 3849 6876.62 c
-3849 6857.72 3843.08 6852.68 3821 6852.14 c
-h
-3893.06 6785 m
-f*
-3978.14 6796.52 m
-3976.34 6794.72 l
-3975.8 6794.18 3975.26 6794 3974.36 6794 c
-3971.84 6794 3971 6795.44 3971 6798.5 c
-3971 6845.48 l
-3971 6860.78 3957.16 6870.16 3934.94 6870.16 c
-3914.6 6870.16 3900.92 6860.97 3900.92 6847.46 c
-3900.92 6839.9 3905.24 6835.58 3912.62 6835.58 c
-3919.82 6835.58 3924.86 6839.9 3924.86 6846.02 c
-3924.86 6848.54 3923.96 6850.88 3921.62 6853.76 c
-3920 6855.56 3919.46 6856.64 3919.46 6857.72 c
-3919.46 6861.5 3924.32 6864.16 3930.8 6864.16 c
-3941.42 6864.16 3946 6859.37 3946 6848.54 c
-3946 6835.4 l
-3924.89 6828.92 3916.41 6825.68 3909.56 6821.18 c
-3901.46 6815.78 3898 6809.48 3898 6801.56 c
-3898 6790.58 3906.07 6782.48 3917.3 6782.48 c
-3927.74 6782.48 3936.02 6786.08 3945.92 6795.08 c
-3947.9 6785.9 3951.86 6782.48 3960.68 6782.48 c
-3968.42 6782.48 3974 6785.36 3980.84 6792.74 c
-h
-3946 6803 m
-3941.04 6797.42 3937.37 6795.26 3932.96 6795.26 c
-3927.56 6795.26 3924 6800.12 3924 6807.32 c
-3924 6817.76 3931.57 6825.14 3946 6829.1 c
-h
-3983 6785 m
-f*
-4044.22 6843.68 m
-4044.22 6869.8 l
-4040.24 6869.8 l
-4039.16 6867.08 4038.08 6866.2 4035.74 6866.2 c
-4034.66 6866.2 4033.04 6866.55 4030.16 6867.44 c
-4024.4 6869.42 4020.26 6870.16 4016.12 6870.16 c
-3999.74 6870.16 3988 6858.99 3988 6843.86 c
-3988 6831.98 3995.34 6823.7 4013.42 6815.96 c
-4025.84 6810.56 4031 6806.06 4031 6800.3 c
-4031 6793.28 4025.48 6788.48 4017.2 6788.48 c
-4004.6 6788.48 3996.32 6796.62 3992.54 6812.36 c
-3987.5 6812.36 l
-3987.5 6782.66 l
-3992 6782.66 l
-3993.98 6786.44 3995.06 6787.7 3996.68 6787.7 c
-3997.58 6787.7 3999.02 6787.34 4000.82 6786.62 c
-4006.04 6784.46 4015.22 6782.48 4020.26 6782.48 c
-4036.64 6782.48 4048 6793.64 4048 6809.84 c
-4048 6822.62 4041.15 6830.54 4023.14 6837.92 c
-4010.9 6843.14 4006 6847.64 4006 6853.76 c
-4006 6859.7 4010.98 6864.16 4017.74 6864.16 c
-4022.6 6864.16 4027.28 6862.19 4031.24 6858.44 c
-4035.02 6854.84 4037 6851.42 4039.7 6843.68 c
-h
-4053.02 6785 m
-f*
-4124.36 6807.5 m
-4116.98 6798.68 4111.58 6795.48 4103.84 6795.48 c
-4097 6795.48 4091.6 6798.53 4088 6804.62 c
-4084.58 6810.36 4083.14 6816.45 4082.42 6829 c
-4127.78 6829 l
-4126.7 6843.99 4124 6852.3 4118.42 6859.34 c
-4112.66 6866.36 4104.2 6870.16 4094.12 6870.16 c
-4071.62 6870.16 4056.5 6852.33 4056.5 6826.04 c
-4056.5 6799.76 4071.26 6782.48 4093.58 6782.48 c
-4108.16 6782.48 4116.98 6788.06 4128.68 6804.98 c
-h
-4081.52 6836 m
-4082.06 6857.42 4085.3 6864.16 4094.12 6864.16 c
-4099.34 6864.16 4102.58 6861.42 4104.02 6856.1 c
-4104.92 6852.68 4105.28 6847.64 4105.64 6838.46 c
-4105.64 6836 l
-h
-4131.92 6785 m
-f*
-4178 6785 m
-f*
-4281.94 6907 m
-4179.88 6907 l
-4179.88 6902 l
-4192.3 6901.29 4196 6898.63 4196 6889.4 c
-4196 6802.28 l
-4196 6792.92 4193.44 6790.94 4179.88 6789.5 c
-4179.88 6785 l
-4244.68 6785 l
-4244.68 6790 l
-4228.12 6790.69 4225 6792.77 4225 6802.28 c
-4225 6844.22 l
-4243.28 6843.86 4249.91 6837.2 4252.42 6816.32 c
-4256.92 6816.32 l
-4256.92 6877.16 l
-4252.42 6877.16 l
-4249.19 6856.64 4242.92 6850.34 4225 6850.34 c
-4225 6892.1 l
-4225 6898.76 4227.32 6901 4236.4 6901 c
-4253.14 6901 4263.58 6897.8 4269.16 6891.2 c
-4273.12 6886.7 4275.1 6881.84 4277.62 6870.5 c
-4281.94 6870.5 l
-h
-4286.98 6785 m
-f*
-4326.28 6868 m
-4292.22 6868 l
-4292.22 6863.66 l
-4299.96 6862.58 4302 6860.24 4302 6853.04 c
-4302 6800.12 l
-4302 6792.74 4300.19 6790.76 4292.22 6789.32 c
-4292.22 6785 l
-4340.1 6785 l
-4340.1 6789.32 l
-4329.12 6790.04 4327 6792.38 4327 6803.54 c
-4327 6837.56 l
-4327 6846.92 4332.02 6854.66 4337.94 6854.66 c
-4339.38 6854.66 4341 6853.4 4342.98 6850.52 c
-4346.4 6845.66 4349.1 6844.04 4353.78 6844.04 c
-4360.44 6844.04 4365.12 6849.08 4365.12 6855.92 c
-4365.12 6864.2 4359 6870.16 4350.54 6870.16 c
-4341.55 6870.16 4334.73 6865.47 4326.28 6853.22 c
-h
-4366.92 6785 m
-f*
-4453.14 6796.52 m
-4451.34 6794.72 l
-4450.8 6794.18 4450.26 6794 4449.36 6794 c
-4446.84 6794 4446 6795.44 4446 6798.5 c
-4446 6845.48 l
-4446 6860.78 4432.16 6870.16 4409.94 6870.16 c
-4389.6 6870.16 4375.92 6860.97 4375.92 6847.46 c
-4375.92 6839.9 4380.24 6835.58 4387.62 6835.58 c
-4394.82 6835.58 4399.86 6839.9 4399.86 6846.02 c
-4399.86 6848.54 4398.96 6850.88 4396.62 6853.76 c
-4395 6855.56 4394.46 6856.64 4394.46 6857.72 c
-4394.46 6861.5 4399.32 6864.16 4405.8 6864.16 c
-4416.42 6864.16 4421 6859.37 4421 6848.54 c
-4421 6835.4 l
-4399.89 6828.92 4391.41 6825.68 4384.56 6821.18 c
-4376.46 6815.78 4373 6809.48 4373 6801.56 c
-4373 6790.58 4381.07 6782.48 4392.3 6782.48 c
-4402.74 6782.48 4411.02 6786.08 4420.92 6795.08 c
-4422.9 6785.9 4426.86 6782.48 4435.68 6782.48 c
-4443.42 6782.48 4449 6785.36 4455.84 6792.74 c
-h
-4421 6803 m
-4416.04 6797.42 4412.37 6795.26 4407.96 6795.26 c
-4402.56 6795.26 4399 6800.12 4399 6807.32 c
-4399 6817.76 4406.57 6825.14 4421 6829.1 c
-h
-4458 6785 m
-f*
-4495.46 6868 m
-4460.73 6868 l
-4460.73 6863.66 l
-4468.65 6862.58 4471 6860.42 4471 6853.04 c
-4471 6800.12 l
-4471 6792.74 4468.95 6790.76 4460.73 6789.32 c
-4460.73 6785 l
-4503.93 6785 l
-4503.93 6789.32 l
-4497.63 6790.22 4496 6792.74 4496 6799.58 c
-4496 6847.64 l
-4496 6848.54 4498.51 6851.78 4500.51 6853.76 c
-4504.29 6856.64 4507.53 6858.16 4510.77 6858.16 c
-4517.79 6858.16 4521 6854 4521 6843.14 c
-4521 6799.58 l
-4521 6792.2 4518.9 6789.86 4511.85 6789.32 c
-4511.85 6785 l
-4553.97 6785 l
-4553.97 6789.32 l
-4547.67 6790.04 4546 6792.74 4546 6799.58 c
-4546 6847.64 l
-4546 6848.54 4548.43 6851.6 4550.37 6853.58 c
-4554.33 6856.64 4557.57 6858.16 4560.81 6858.16 c
-4567.65 6858.16 4570 6853.82 4570 6843.14 c
-4570 6799.58 l
-4570 6792.02 4568.1 6789.86 4561.53 6789.32 c
-4561.53 6785 l
-4604.37 6785 l
-4604.37 6789 l
-4597.35 6789.37 4595 6791.6 4595 6799.58 c
-4595 6844.76 l
-4595 6860.24 4585.6 6870.16 4571.07 6870.16 c
-4560.81 6870.16 4553.97 6866.01 4544.61 6854.48 c
-4539.21 6865.82 4532.91 6870.16 4521.57 6870.16 c
-4510.2 6870.16 4502.21 6865.29 4495.46 6854.48 c
-h
-4607.94 6785 m
-f*
-4680.36 6807.5 m
-4672.98 6798.68 4667.58 6795.48 4659.84 6795.48 c
-4653 6795.48 4647.6 6798.53 4644 6804.62 c
-4640.58 6810.36 4639.14 6816.45 4638.42 6829 c
-4683.78 6829 l
-4682.7 6843.99 4680 6852.3 4674.42 6859.34 c
-4668.66 6866.36 4660.2 6870.16 4650.12 6870.16 c
-4627.62 6870.16 4612.5 6852.33 4612.5 6826.04 c
-4612.5 6799.76 4627.26 6782.48 4649.58 6782.48 c
-4664.16 6782.48 4672.98 6788.06 4684.68 6804.98 c
-h
-4637.52 6836 m
-4638.06 6857.42 4641.3 6864.16 4650.12 6864.16 c
-4655.34 6864.16 4658.58 6861.42 4660.02 6856.1 c
-4660.92 6852.68 4661.28 6847.64 4661.64 6838.46 c
-4661.64 6836 l
-h
-4687.92 6785 m
-f*
-1 i
-3772.55 6749.75 914.4 15.5999 re
-f
-0.2 i
-2678.88 4570.52 m
-2643.78 4570.52 2619 4545.21 2619 4509.12 c
-2619 4472.04 2642.99 4446.48 2677.98 4446.48 c
-2712.54 4446.48 2737 4472.04 2737 4508.58 c
-2737 4524.96 2731.9 4539.9 2722.98 4550.34 c
-2712.18 4563.12 2695.8 4570.52 2678.88 4570.52 c
-h
-2677.44 4563.52 m
-2685.9 4563.52 2693.46 4561.05 2699.94 4556.1 c
-2710.2 4547.46 2716 4530.18 2716 4509.66 c
-2716 4488.06 2711.25 4472.4 2701.56 4462.5 c
-2695.44 4456.38 2687.16 4453.48 2678.16 4453.48 c
-2669.88 4453.48 2662.14 4456.01 2655.84 4461.06 c
-2645.76 4469.34 2640 4487.34 2640 4508.76 c
-2640 4525.86 2644.54 4542.96 2651.34 4551.6 c
-2658 4559.52 2667.72 4563.52 2677.44 4563.52 c
-h
-2742.96 4449 m
-f*
-2746.42 4561.14 m
-2747.5 4561.14 l
-2749.48 4561.32 2751.64 4561.5 2753.08 4561.5 c
-2758.84 4561.5 2761 4558.98 2761 4550.52 c
-2761 4464.66 l
-2761 4454.94 2758.41 4452.6 2746.78 4451.7 c
-2746.78 4449 l
-2789.26 4449 l
-2789.26 4452 l
-2777.74 4452.7 2776 4454.46 2776 4464.12 c
-2776 4571.58 l
-2775.04 4571.94 l
-2765.68 4568.88 2758.84 4567.08 2746.42 4564.02 c
-h
-2793.04 4449 m
-f*
-2854.92 4447.2 m
-2881.38 4456.56 l
-2881.38 4460 l
-2878.32 4459.26 2878.14 4459.82 2877.24 4459.82 c
-2870.76 4459.82 2869 4461.69 2869 4469.52 c
-2869 4571.58 l
-2868.42 4571.94 l
-2859.78 4568.88 2853.48 4567.08 2841.96 4564.02 c
-2841.96 4561.14 l
-2843.4 4561.32 2844.48 4561.32 2845.92 4561.32 c
-2852.58 4561.32 2854 4559.52 2854 4552.14 c
-2854 4524.06 l
-2847.23 4529.82 2842.42 4531.8 2835.3 4531.8 c
-2814.6 4531.8 2798 4511.46 2798 4485.9 c
-2798 4462.86 2811.26 4447.2 2831.16 4447.2 c
-2841.15 4447.2 2847.93 4450.8 2854 4459.26 c
-2854 4447.74 l
-h
-2854 4467.36 m
-2854 4466.1 2853 4464.12 2851.5 4462.32 c
-2848.26 4458.54 2843.76 4456.2 2838.18 4456.2 c
-2823.06 4456.2 2813 4470.74 2813 4493.1 c
-2813 4513.44 2821.95 4526.8 2835.84 4526.8 c
-2845.56 4526.8 2854 4518.32 2854 4508.76 c
-h
-2883 4449 m
-f*
-2928 4449 m
-f*
-3040.6 4530 m
-3038.98 4570.52 l
-3035.2 4570.52 l
-3034.12 4566.84 3031.24 4564.58 3027.82 4564.58 c
-3026.02 4564.58 3023.5 4565.17 3020.62 4566.36 c
-3011.8 4569.24 3002.98 4570.52 2994.16 4570.52 c
-2980.3 4570.52 2966.08 4565.36 2955.1 4556.46 c
-2941.42 4545.12 2934 4528.02 2934 4507.5 c
-2934 4470.96 2957.96 4446.48 2993.8 4446.48 c
-3014.14 4446.48 3031.96 4454.76 3042.94 4469.34 c
-3039.7 4472.58 l
-3026.38 4459.8 3014.5 4454.48 2999.56 4454.48 c
-2988.76 4454.48 2979.04 4457.69 2971.48 4463.94 c
-2960.86 4472.76 2955 4488.96 2955 4509.84 c
-2955 4542.42 2971.71 4563.52 2997.76 4563.52 c
-3008.2 4563.52 3017.38 4559.73 3024.58 4552.5 c
-3030.34 4546.74 3033.04 4541.7 3036.46 4530 c
-h
-3049.06 4449 m
-f*
-3135.22 4458 m
-3134.32 4458 l
-3126.04 4458 3124 4459.98 3124 4468.26 c
-3124 4530 l
-3095.62 4530 l
-3095.62 4527 l
-3106.78 4526.46 3109 4524.65 3109 4515.6 c
-3109 4473.3 l
-3109 4468.44 3108.08 4465.74 3105.88 4464.12 c
-3100.84 4459.8 3095.26 4457.2 3089.68 4457.2 c
-3082.66 4457.2 3077 4463.52 3077 4471.32 c
-3077 4530 l
-3050.62 4530 l
-3050.62 4527.48 l
-3059.26 4526.94 3062 4524.24 3062 4515.96 c
-3062 4470.6 l
-3062 4456.38 3070.55 4447.2 3083.56 4447.2 c
-3090.22 4447.2 3097.24 4450.08 3102.1 4454.94 c
-3109.9 4462.68 l
-3109.9 4447.74 l
-3110.56 4447.38 l
-3119.56 4450.98 3126.04 4452.96 3135.22 4455.48 c
-h
-3139 4449 m
-f*
-3140.26 4519.2 m
-3142.78 4519.74 3144.4 4519.92 3146.56 4519.92 c
-3151.06 4519.92 3153 4517.04 3153 4509.12 c
-3153 4464.12 l
-3153 4455.12 3151.71 4453.86 3139.9 4451.7 c
-3139.9 4449 l
-3183.1 4449 l
-3183.1 4452 l
-3170.86 4452.53 3168 4455.17 3168 4465.2 c
-3168 4505.7 l
-3168 4511.46 3175.44 4520.46 3180.4 4520.46 c
-3181.48 4520.46 3183.1 4519.56 3185.08 4517.76 c
-3187.96 4515.06 3189.94 4514.16 3192.28 4514.16 c
-3196.6 4514.16 3199.3 4517.22 3199.3 4522.26 c
-3199.3 4528.2 3195.52 4531.8 3189.4 4531.8 c
-3181.91 4531.8 3176.92 4527.84 3168 4514.88 c
-3168 4531.44 l
-3166.9 4531.8 l
-3157.36 4528.02 3150.88 4525.5 3140.26 4522.08 c
-h
-3198.94 4449 m
-f*
-3200.26 4519.2 m
-3202.78 4519.74 3204.4 4519.92 3206.56 4519.92 c
-3211.06 4519.92 3213 4517.04 3213 4509.12 c
-3213 4464.12 l
-3213 4455.12 3211.71 4453.86 3199.9 4451.7 c
-3199.9 4449 l
-3243.1 4449 l
-3243.1 4452 l
-3230.86 4452.53 3228 4455.17 3228 4465.2 c
-3228 4505.7 l
-3228 4511.46 3235.44 4520.46 3240.4 4520.46 c
-3241.48 4520.46 3243.1 4519.56 3245.08 4517.76 c
-3247.96 4515.06 3249.94 4514.16 3252.28 4514.16 c
-3256.6 4514.16 3259.3 4517.22 3259.3 4522.26 c
-3259.3 4528.2 3255.52 4531.8 3249.4 4531.8 c
-3241.91 4531.8 3236.92 4527.84 3228 4514.88 c
-3228 4531.44 l
-3226.9 4531.8 l
-3217.36 4528.02 3210.88 4525.5 3200.26 4522.08 c
-h
-3258.94 4449 m
-f*
-3332.44 4478.52 m
-3323.8 4464.84 3316.06 4459.2 3304.54 4459.2 c
-3294.64 4459.2 3287.08 4464.02 3281.86 4474.02 c
-3278.26 4481.08 3276.82 4487.42 3276.46 4499 c
-3331.9 4499 l
-3330.46 4510.63 3328.66 4515.82 3324.16 4521.54 c
-3318.76 4528.02 3310.48 4531.8 3301.12 4531.8 c
-3278.8 4531.8 3263.5 4513.8 3263.5 4487.52 c
-3263.5 4462.68 3276.46 4447.2 3297.16 4447.2 c
-3314.44 4447.2 3327.76 4457.82 3335.32 4477.26 c
-h
-3276.82 4504 m
-3278.8 4518.66 3284.92 4524.8 3295.9 4524.8 c
-3306.88 4524.8 3311.2 4519.74 3313.54 4504 c
-h
-3338.92 4449 m
-f*
-3340.88 4520.64 m
-3342.14 4521.18 3343.76 4521.36 3345.74 4521.36 c
-3350.78 4521.36 3352 4518.66 3352 4509.84 c
-3352 4465.2 l
-3352 4454.94 3350.09 4452.42 3341.24 4451.7 c
-3341.24 4449 l
-3379.4 4449 l
-3379.4 4451.7 l
-3370.22 4452.42 3367 4454.58 3367 4461.06 c
-3367 4511.64 l
-3375.7 4519.74 3379.95 4521.8 3386.06 4521.8 c
-3394.88 4521.8 3399 4516.25 3399 4504.44 c
-3399 4466.82 l
-3399 4455.48 3396.7 4452.42 3387.86 4451.7 c
-3387.86 4449 l
-3425.3 4449 l
-3425.3 4451.7 l
-3416.48 4452.6 3414 4454.76 3414 4463.58 c
-3414 4504.8 l
-3414 4521.72 3406.2 4531.8 3393.08 4531.8 c
-3384.64 4531.8 3378.94 4528.74 3366.46 4517.22 c
-3366.46 4531.44 l
-3365.72 4531.8 l
-3356.9 4528.56 3350.78 4526.58 3340.88 4523.7 c
-h
-3428 4449 m
-f*
-3474 4530 m
-3456 4530 l
-3456 4550.88 l
-3456 4552.68 3455.56 4553.22 3454.46 4553.22 c
-3453.38 4551.42 3452.12 4549.8 3450.86 4548.18 c
-3444.2 4538.28 3438.08 4531.62 3433.4 4528.92 c
-3431.42 4527.66 3430 4526.58 3430 4525.5 c
-3430 4525.29 3430.26 4525.14 3431.06 4525 c
-3441 4525 l
-3441 4470.06 l
-3441 4454.94 3446.26 4447.2 3456.44 4447.2 c
-3465.44 4447.2 3472.28 4451.52 3478.22 4460.88 c
-3475.88 4462.86 l
-3471.92 4458.18 3469.04 4456.2 3465.08 4456.2 c
-3458.42 4456.2 3456 4460.98 3456 4472.76 c
-3456 4525 l
-3474 4525 l
-h
-3478.04 4449 m
-f*
-3524 4449 m
-f*
-3609.22 4490.58 m
-3609.22 4532.34 l
-3605.08 4532.34 l
-3602.92 4517.94 3599.68 4515 3585.28 4515 c
-3560 4515 l
-3560 4555.2 l
-3560 4560.24 3560.77 4561 3564.94 4561 c
-3589.42 4561 l
-3609.76 4561 3613.72 4558.35 3616.78 4542.42 c
-3621.28 4542.42 l
-3620.74 4568 l
-3525.16 4568 l
-3525.16 4564.74 l
-3538.48 4563.66 3541 4561.32 3541 4548.54 c
-3541 4470.6 l
-3541 4455.66 3539 4453.32 3525.16 4452.42 c
-3525.16 4449 l
-3575.56 4449 l
-3575.56 4452 l
-3561.7 4452.74 3560 4455.32 3560 4468.62 c
-3560 4508 l
-3585.28 4508 l
-3599.86 4508 3602.92 4505.28 3605.08 4490.58 c
-h
-3623.08 4449 m
-f*
-3625.26 4519.2 m
-3627.78 4519.74 3629.4 4519.92 3631.56 4519.92 c
-3636.06 4519.92 3638 4517.04 3638 4509.12 c
-3638 4464.12 l
-3638 4455.12 3636.71 4453.86 3624.9 4451.7 c
-3624.9 4449 l
-3668.1 4449 l
-3668.1 4452 l
-3655.86 4452.53 3653 4455.17 3653 4465.2 c
-3653 4505.7 l
-3653 4511.46 3660.44 4520.46 3665.4 4520.46 c
-3666.48 4520.46 3668.1 4519.56 3670.08 4517.76 c
-3672.96 4515.06 3674.94 4514.16 3677.28 4514.16 c
-3681.6 4514.16 3684.3 4517.22 3684.3 4522.26 c
-3684.3 4528.2 3680.52 4531.8 3674.4 4531.8 c
-3666.91 4531.8 3661.92 4527.84 3653 4514.88 c
-3653 4531.44 l
-3651.9 4531.8 l
-3642.36 4528.02 3635.88 4525.5 3625.26 4522.08 c
-h
-3683.94 4449 m
-f*
-3763.56 4460.88 m
-3760.5 4458.36 3758.34 4457.2 3755.64 4457.2 c
-3751.5 4457.2 3750 4459.78 3750 4467.9 c
-3750 4503 l
-3750 4512.18 3749.16 4517.22 3746.82 4521.36 c
-3743.04 4528.2 3735.3 4531.8 3724.32 4531.8 c
-3715.14 4531.8 3706.5 4529.28 3701.46 4525.14 c
-3696.96 4521.36 3694 4516.14 3694 4511.64 c
-3694 4507.5 3697.46 4503.9 3701.82 4503.9 c
-3706.14 4503.9 3709.92 4507.5 3709.92 4511.46 c
-3709.92 4512.18 3709.74 4513.08 3709.56 4514.34 c
-3709.2 4515.96 3709 4517.4 3709 4518.66 c
-3709 4523.52 3714.77 4527.8 3721.98 4527.8 c
-3730.8 4527.8 3735 4522.47 3735 4512.54 c
-3735 4501.56 l
-3707.76 4490.4 3704.75 4488.96 3697.14 4482.12 c
-3693.18 4478.52 3690.66 4472.4 3690.66 4466.46 c
-3690.66 4455.12 3698.4 4447.2 3709.56 4447.2 c
-3717.48 4447.2 3724.86 4450.98 3735.84 4460.34 c
-3736.74 4450.8 3739.98 4447.2 3747.36 4447.2 c
-3753.48 4447.2 3757.26 4449.36 3763.56 4456.2 c
-h
-3735 4471.14 m
-3735 4465.56 3734.23 4463.94 3730.98 4461.6 c
-3726.66 4459.08 3721.62 4457.2 3717.84 4457.2 c
-3711.54 4457.2 3706.48 4463.51 3706.48 4471.5 c
-3706.48 4472.22 l
-3706.48 4482.84 3713.7 4489.32 3735 4497.24 c
-h
-3763.92 4449 m
-f*
-3766.14 4520.64 m
-3768.48 4521.18 3769.92 4521.36 3771.9 4521.36 c
-3776.58 4521.36 3778 4518.48 3778 4509.84 c
-3778 4464.3 l
-3778 4454.58 3775.52 4451.88 3765.6 4451.7 c
-3765.6 4449 l
-3805.56 4449 l
-3805.56 4452 l
-3796.02 4452.35 3793 4454.27 3793 4461.06 c
-3793 4511.82 l
-3793 4512.18 3794.23 4513.44 3795.66 4514.88 c
-3799.98 4519.2 3808.08 4522.8 3814.74 4522.8 c
-3822.48 4522.8 3827 4516.2 3827 4503.54 c
-3827 4464.48 l
-3827 4454.4 3824.93 4452.42 3814.2 4451.7 c
-3814.2 4449 l
-3854.52 4449 l
-3854.52 4452 l
-3844.26 4452.18 3842 4455.17 3842 4466.1 c
-3842 4511.46 l
-3847.28 4519.2 3852.91 4522.8 3861.18 4522.8 c
-3871.44 4522.8 3875 4517.85 3875 4502.64 c
-3875 4464.66 l
-3875 4454.4 3873.52 4452.96 3862.8 4451.7 c
-3862.8 4449 l
-3902.22 4449 l
-3902.22 4451.7 l
-3897.54 4452.06 l
-3892.14 4452.42 3890 4455.66 3890 4462.68 c
-3890 4499.76 l
-3890 4521 3882.91 4531.8 3868.92 4531.8 c
-3858.48 4531.8 3849.3 4527.12 3839.58 4516.68 c
-3836.34 4526.94 3830.22 4531.8 3820.5 4531.8 c
-3812.31 4531.8 3807.57 4529.46 3792.28 4517.94 c
-3792.28 4531.44 l
-3791.34 4531.8 l
-3782.16 4528.38 3776.04 4526.4 3766.14 4523.7 c
-h
-3903.04 4449 m
-f*
-3976.44 4478.52 m
-3967.8 4464.84 3960.06 4459.2 3948.54 4459.2 c
-3938.64 4459.2 3931.08 4464.02 3925.86 4474.02 c
-3922.26 4481.08 3920.82 4487.42 3920.46 4499 c
-3975.9 4499 l
-3974.46 4510.63 3972.66 4515.82 3968.16 4521.54 c
-3962.76 4528.02 3954.48 4531.8 3945.12 4531.8 c
-3922.8 4531.8 3907.5 4513.8 3907.5 4487.52 c
-3907.5 4462.68 3920.46 4447.2 3941.16 4447.2 c
-3958.44 4447.2 3971.76 4457.82 3979.32 4477.26 c
-h
-3920.82 4504 m
-3922.8 4518.66 3928.92 4524.8 3939.9 4524.8 c
-3950.88 4524.8 3955.2 4519.74 3957.54 4504 c
-h
-3982.92 4449 m
-f*
-1 i
-1 g
-3311.75 4641.35 m
-3478.55 4792.55 l
-3395.75 4792.55 l
-3395.75 4946.15 l
-3230.15 4946.15 l
-3230.15 4792.55 l
-3148.55 4792.55 l
-f*
-0 g
-3311.75 4641.35 m
-3478.55 4792.55 l
-3395.75 4792.55 l
-3395.75 4946.15 l
-3230.15 4946.15 l
-3230.15 4792.55 l
-3148.55 4792.55 l
-3311.75 4641.35 l
-3311.75 4654.55 l
-3173.75 4781.75 l
-3239.75 4781.75 l
-3239.75 4936.55 l
-3386.15 4936.55 l
-3386.15 4781.75 l
-3452.15 4781.75 l
-3311.75 4654.55 l
-3311.75 4641.35 l
-f*
-0.564706 g
-2322.95 3735.35 m
-2322.95 3845.75 2231.75 3936.95 2120.15 3936.95 c
-1623.35 3936.95 l
-1511.75 3936.95 1420.55 3845.75 1420.55 3735.35 c
-1420.55 3597.35 l
-1420.55 3486.95 1511.75 3395.75 1623.35 3395.75 c
-2120.15 3395.75 l
-2231.75 3395.75 2322.95 3486.95 2322.95 3597.35 c
-f*
-1 g
-2258.15 3792.95 m
-2258.15 3902.15 2169.35 3990.95 2057.75 3990.95 c
-1566.95 3990.95 l
-1456.55 3990.95 1366.55 3902.15 1366.55 3792.95 c
-1366.55 3658.55 l
-1366.55 3549.35 1455.35 3460.55 1566.95 3460.55 c
-2057.75 3460.55 l
-2169.35 3460.55 2258.15 3549.35 2258.15 3658.55 c
-f*
-0 g
-2258.15 3792.95 m
-2258.15 3902.15 2169.35 3990.95 2057.75 3990.95 c
-1566.95 3990.95 l
-1456.55 3990.95 1366.55 3902.15 1366.55 3792.95 c
-1366.55 3658.55 l
-1366.55 3549.35 1455.35 3460.55 1566.95 3460.55 c
-2057.75 3460.55 l
-2169.35 3460.55 2258.15 3549.35 2258.15 3658.55 c
-h
-S
-0.201248 i
-1599.33 3832 m
-1485.22 3832 l
-1485.22 3827 l
-1499.11 3826.2 1503 3823.18 1503 3812.72 c
-1503 3715.32 l
-1503 3704.85 1500.17 3702.64 1485.22 3701.03 c
-1485.22 3696 l
-1557.67 3696 l
-1557.67 3701 l
-1539.15 3701.81 1536 3704.23 1536 3715.32 c
-1536 3762.21 l
-1556.22 3761.81 1563.55 3754.36 1566.32 3731.02 c
-1571.35 3731.02 l
-1571.35 3799.04 l
-1566.32 3799.04 l
-1562.76 3776.1 1555.82 3769.05 1536 3769.05 c
-1536 3815.74 l
-1536 3823.19 1538.52 3825 1548.41 3825 c
-1567.13 3825 1578.8 3821.64 1585.04 3814.74 c
-1589.47 3809.71 1591.68 3804.27 1594.5 3791.59 c
-1599.33 3791.59 l
-h
-1604.96 3696 m
-f*
-1649.19 3789 m
-1610.84 3789 l
-1610.84 3783.95 l
-1619.49 3782.74 1622 3780.12 1622 3772.07 c
-1622 3712.9 l
-1622 3704.65 1619.93 3702.44 1610.84 3700.83 c
-1610.84 3696 l
-1664.37 3696 l
-1664.37 3700.83 l
-1652.09 3701.63 1650 3704.25 1650 3716.73 c
-1650 3754.76 l
-1650 3765.23 1655.49 3773.88 1661.95 3773.88 c
-1663.56 3773.88 1665.37 3772.47 1667.59 3769.25 c
-1671.41 3763.82 1674.43 3762.01 1679.66 3762.01 c
-1687.11 3762.01 1692.34 3767.64 1692.34 3775.29 c
-1692.34 3784.55 1685.5 3791.41 1676.04 3791.41 c
-1666.1 3791.41 1658.54 3786.12 1649.19 3772.27 c
-h
-1694.35 3696 m
-f*
-1789.19 3708.88 m
-1787.18 3706.87 l
-1786.57 3706.26 1785.97 3706.06 1784.96 3706.06 c
-1782.15 3706.06 1781 3707.67 1781 3711.09 c
-1781 3763.62 l
-1781 3780.73 1765.6 3791.42 1740.89 3791.42 c
-1718.15 3791.42 1702.85 3781.06 1702.85 3765.83 c
-1702.85 3757.38 1707.69 3752.55 1715.94 3752.55 c
-1723.99 3752.55 1729.62 3757.38 1729.62 3764.22 c
-1729.62 3767.04 1728.61 3769.66 1726 3772.88 c
-1724.19 3774.89 1723.58 3776.1 1723.58 3777.3 c
-1723.58 3781.53 1729.02 3784.42 1736.26 3784.42 c
-1748.14 3784.42 1753.86 3779.08 1753.86 3767.04 c
-1753.86 3752.35 l
-1729.91 3745.1 1720.29 3741.48 1712.51 3736.45 c
-1703.46 3730.41 1699 3723.37 1699 3714.52 c
-1699 3702.24 1708.27 3693.18 1721.17 3693.18 c
-1732.84 3693.18 1742.1 3697.21 1753.17 3707.27 c
-1755.38 3697.01 1759.81 3693.18 1769.67 3693.18 c
-1778.32 3693.18 1784.56 3696.4 1792.21 3704.65 c
-h
-1753 3716.13 m
-1747.55 3709.89 1743.52 3707.47 1738.68 3707.47 c
-1732.64 3707.47 1728 3712.91 1728 3720.96 c
-1728 3732.63 1736.61 3740.88 1753 3745.31 c
-h
-1794.62 3696 m
-f*
-1836.4 3789 m
-1797.7 3789 l
-1797.7 3783.95 l
-1806.55 3782.74 1809 3780.32 1809 3772.07 c
-1809 3712.9 l
-1809 3704.65 1806.74 3702.44 1797.7 3700.83 c
-1797.7 3696 l
-1846 3696 l
-1846 3700.83 l
-1838.95 3701.84 1837 3704.65 1837 3712.3 c
-1837 3766.03 l
-1837 3767.04 1839.87 3770.66 1842.18 3772.88 c
-1846.4 3776.1 1850.02 3778.42 1853.65 3778.42 c
-1861.5 3778.42 1865 3773.59 1865 3761 c
-1865 3712.3 l
-1865 3704.05 1862.68 3701.43 1854.85 3700.83 c
-1854.85 3696 l
-1901.95 3696 l
-1901.95 3700.83 l
-1894.9 3701.64 1893 3704.65 1893 3712.3 c
-1893 3766.03 l
-1893 3767.04 1895.73 3770.46 1897.92 3772.68 c
-1902.35 3776.1 1905.97 3778.42 1909.59 3778.42 c
-1917.24 3778.42 1920 3773.38 1920 3761 c
-1920 3712.3 l
-1920 3703.85 1917.85 3701.43 1910.4 3700.83 c
-1910.4 3696 l
-1958.3 3696 l
-1958.3 3701 l
-1950.45 3701.4 1948 3703.78 1948 3712.3 c
-1948 3762.81 l
-1948 3780.12 1937.43 3791.42 1921.07 3791.42 c
-1909.59 3791.42 1901.95 3786.73 1891.48 3773.68 c
-1885.44 3786.36 1878.4 3791.42 1865.72 3791.42 c
-1852.95 3791.42 1843.98 3785.91 1836.4 3773.68 c
-h
-1961.64 3696 m
-f*
-2039.9 3721.16 m
-2031.65 3711.29 2025.61 3707.18 2016.96 3707.18 c
-2009.31 3707.18 2003.27 3710.77 1999.25 3717.94 c
-1995.43 3724.54 1993.82 3731.56 1993.01 3746 c
-2043.73 3746 l
-2042.52 3762.36 2039.5 3771.43 2033.26 3779.12 c
-2026.82 3786.96 2017.36 3791.42 2006.09 3791.42 c
-1980.94 3791.42 1964.03 3771.4 1964.03 3741.88 c
-1964.03 3712.5 1980.53 3693.18 2005.49 3693.18 c
-2021.79 3693.18 2031.65 3699.42 2044.73 3718.34 c
-h
-1992 3753 m
-1992.61 3776.96 1996.23 3784.42 2006.09 3784.42 c
-2011.93 3784.42 2015.55 3781.38 2017.16 3775.49 c
-2018.17 3771.67 2018.57 3766.03 2018.97 3755.77 c
-2018.97 3753 l
-h
-2048.35 3696 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2092 -3696]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4782.95 2934.95 m
-4782.95 3046.55 4691.75 3137.75 4580.15 3137.75 c
-4083.35 3137.75 l
-3971.75 3137.75 3880.55 3046.55 3880.55 2934.95 c
-3880.55 2798.15 l
-3880.55 2686.55 3971.75 2595.35 4083.35 2595.35 c
-4580.15 2595.35 l
-4691.75 2595.35 4782.95 2686.55 4782.95 2798.15 c
-f*
-1 g
-4718.15 2992.55 m
-4718.15 3102.95 4629.35 3191.75 4517.75 3191.75 c
-4026.95 3191.75 l
-3916.55 3191.75 3826.55 3102.95 3826.55 2992.55 c
-3826.55 2859.35 l
-3826.55 2748.95 3915.35 2660.15 4026.95 2660.15 c
-4517.75 2660.15 l
-4629.35 2660.15 4718.15 2748.95 4718.15 2859.35 c
-f*
-0 g
-4718.15 2992.55 m
-4718.15 3102.95 4629.35 3191.75 4517.75 3191.75 c
-4026.95 3191.75 l
-3916.55 3191.75 3826.55 3102.95 3826.55 2992.55 c
-3826.55 2859.35 l
-3826.55 2748.95 3915.35 2660.15 4026.95 2660.15 c
-4517.75 2660.15 l
-4629.35 2660.15 4718.15 2748.95 4718.15 2859.35 c
-h
-S
-0.201248 i
-4059.33 3033 m
-3945.22 3033 l
-3945.22 3028 l
-3959.11 3027.2 3963 3024.18 3963 3013.72 c
-3963 2916.32 l
-3963 2905.85 3960.17 2903.64 3945.22 2902.03 c
-3945.22 2897 l
-4017.67 2897 l
-4017.67 2902 l
-3999.15 2902.81 3996 2905.23 3996 2916.32 c
-3996 2963.21 l
-4016.22 2962.81 4023.55 2955.36 4026.32 2932.02 c
-4031.35 2932.02 l
-4031.35 3000.04 l
-4026.32 3000.04 l
-4022.76 2977.1 4015.82 2970.05 3996 2970.05 c
-3996 3016.74 l
-3996 3024.19 3998.52 3026 4008.41 3026 c
-4027.13 3026 4038.8 3022.64 4045.04 3015.74 c
-4049.47 3010.71 4051.68 3005.27 4054.5 2992.59 c
-4059.33 2992.59 l
-h
-4064.96 2897 m
-f*
-4109.19 2990 m
-4070.84 2990 l
-4070.84 2984.95 l
-4079.49 2983.74 4082 2981.12 4082 2973.07 c
-4082 2913.9 l
-4082 2905.65 4079.93 2903.44 4070.84 2901.83 c
-4070.84 2897 l
-4124.37 2897 l
-4124.37 2901.83 l
-4112.09 2902.63 4110 2905.25 4110 2917.73 c
-4110 2955.76 l
-4110 2966.23 4115.49 2974.88 4121.95 2974.88 c
-4123.56 2974.88 4125.37 2973.47 4127.59 2970.25 c
-4131.41 2964.82 4134.43 2963.01 4139.66 2963.01 c
-4147.11 2963.01 4152.34 2968.64 4152.34 2976.29 c
-4152.34 2985.55 4145.5 2992.41 4136.04 2992.41 c
-4126.1 2992.41 4118.54 2987.12 4109.19 2973.27 c
-h
-4154.35 2897 m
-f*
-4249.19 2909.88 m
-4247.18 2907.87 l
-4246.57 2907.26 4245.97 2907.06 4244.96 2907.06 c
-4242.15 2907.06 4241 2908.67 4241 2912.09 c
-4241 2964.62 l
-4241 2981.73 4225.6 2992.42 4200.89 2992.42 c
-4178.15 2992.42 4162.85 2982.06 4162.85 2966.83 c
-4162.85 2958.38 4167.69 2953.55 4175.94 2953.55 c
-4183.99 2953.55 4189.62 2958.38 4189.62 2965.22 c
-4189.62 2968.04 4188.61 2970.66 4186 2973.88 c
-4184.19 2975.89 4183.58 2977.1 4183.58 2978.3 c
-4183.58 2982.53 4189.02 2985.42 4196.26 2985.42 c
-4208.14 2985.42 4213.86 2980.08 4213.86 2968.04 c
-4213.86 2953.35 l
-4189.91 2946.1 4180.29 2942.48 4172.51 2937.45 c
-4163.46 2931.41 4159 2924.37 4159 2915.52 c
-4159 2903.24 4168.27 2894.18 4181.17 2894.18 c
-4192.84 2894.18 4202.1 2898.21 4213.17 2908.27 c
-4215.38 2898.01 4219.81 2894.18 4229.67 2894.18 c
-4238.32 2894.18 4244.56 2897.4 4252.21 2905.65 c
-h
-4213 2917.13 m
-4207.55 2910.89 4203.52 2908.47 4198.68 2908.47 c
-4192.64 2908.47 4188 2913.91 4188 2921.96 c
-4188 2933.63 4196.61 2941.88 4213 2946.31 c
-h
-4254.62 2897 m
-f*
-4296.4 2990 m
-4257.7 2990 l
-4257.7 2984.95 l
-4266.55 2983.74 4269 2981.32 4269 2973.07 c
-4269 2913.9 l
-4269 2905.65 4266.74 2903.44 4257.7 2901.83 c
-4257.7 2897 l
-4306 2897 l
-4306 2901.83 l
-4298.95 2902.84 4297 2905.65 4297 2913.3 c
-4297 2967.03 l
-4297 2968.04 4299.87 2971.66 4302.18 2973.88 c
-4306.4 2977.1 4310.02 2979.42 4313.65 2979.42 c
-4321.5 2979.42 4325 2974.59 4325 2962 c
-4325 2913.3 l
-4325 2905.05 4322.68 2902.43 4314.85 2901.83 c
-4314.85 2897 l
-4361.95 2897 l
-4361.95 2901.83 l
-4354.9 2902.64 4353 2905.65 4353 2913.3 c
-4353 2967.03 l
-4353 2968.04 4355.73 2971.46 4357.92 2973.68 c
-4362.35 2977.1 4365.97 2979.42 4369.59 2979.42 c
-4377.24 2979.42 4380 2974.38 4380 2962 c
-4380 2913.3 l
-4380 2904.85 4377.85 2902.43 4370.4 2901.83 c
-4370.4 2897 l
-4418.3 2897 l
-4418.3 2902 l
-4410.45 2902.4 4408 2904.78 4408 2913.3 c
-4408 2963.81 l
-4408 2981.12 4397.43 2992.42 4381.07 2992.42 c
-4369.59 2992.42 4361.95 2987.73 4351.48 2974.68 c
-4345.44 2987.36 4338.4 2992.42 4325.72 2992.42 c
-4312.95 2992.42 4303.98 2986.91 4296.4 2974.68 c
-h
-4421.64 2897 m
-f*
-4499.9 2922.16 m
-4491.65 2912.29 4485.61 2908.18 4476.96 2908.18 c
-4469.31 2908.18 4463.27 2911.77 4459.25 2918.94 c
-4455.43 2925.54 4453.82 2932.56 4453.01 2947 c
-4503.73 2947 l
-4502.52 2963.36 4499.5 2972.43 4493.26 2980.12 c
-4486.82 2987.96 4477.36 2992.42 4466.09 2992.42 c
-4440.94 2992.42 4424.03 2972.4 4424.03 2942.88 c
-4424.03 2913.5 4440.53 2894.18 4465.49 2894.18 c
-4481.79 2894.18 4491.65 2900.42 4504.73 2919.34 c
-h
-4452 2954 m
-4452.61 2977.96 4456.23 2985.42 4466.09 2985.42 c
-4471.93 2985.42 4475.55 2982.38 4477.16 2976.49 c
-4478.17 2972.67 4478.57 2967.03 4478.97 2956.77 c
-4478.97 2954 l
-h
-4508.35 2897 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4544 -2895]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3864.95 2228.15 m
-3864.95 2338.55 3773.75 2429.75 3662.15 2429.75 c
-3166.55 2429.75 l
-3054.95 2429.75 2963.75 2338.55 2963.75 2228.15 c
-2963.75 2090.15 l
-2963.75 1979.75 3054.95 1888.55 3166.55 1888.55 c
-3662.15 1888.55 l
-3773.75 1888.55 3864.95 1979.75 3864.95 2090.15 c
-f*
-1 g
-3795.35 2284.55 m
-3795.35 2391.35 3706.55 2478.95 3597.35 2478.95 c
-3112.55 2478.95 l
-3003.35 2478.95 2914.55 2391.35 2914.55 2284.55 c
-2914.55 2152.55 l
-2914.55 2045.75 3003.35 1958.15 3112.55 1958.15 c
-3597.35 1958.15 l
-3706.55 1958.15 3795.35 2045.75 3795.35 2152.55 c
-f*
-16 w
-0 g
-3795.35 2284.55 m
-3795.35 2391.35 3706.55 2478.95 3597.35 2478.95 c
-3112.55 2478.95 l
-3003.35 2478.95 2914.55 2391.35 2914.55 2284.55 c
-2914.55 2152.55 l
-2914.55 2045.75 3003.35 1958.15 3112.55 1958.15 c
-3597.35 1958.15 l
-3706.55 1958.15 3795.35 2045.75 3795.35 2152.55 c
-h
-S
-0.201248 i
-3142.33 2325 m
-3028.22 2325 l
-3028.22 2320 l
-3042.11 2319.2 3046 2316.18 3046 2305.72 c
-3046 2208.32 l
-3046 2197.85 3043.17 2195.64 3028.22 2194.03 c
-3028.22 2189 l
-3100.67 2189 l
-3100.67 2194 l
-3082.15 2194.81 3079 2197.23 3079 2208.32 c
-3079 2255.21 l
-3099.22 2254.81 3106.55 2247.36 3109.32 2224.02 c
-3114.35 2224.02 l
-3114.35 2292.04 l
-3109.32 2292.04 l
-3105.76 2269.1 3098.82 2262.05 3079 2262.05 c
-3079 2308.74 l
-3079 2316.19 3081.52 2318 3091.41 2318 c
-3110.13 2318 3121.8 2314.64 3128.04 2307.74 c
-3132.47 2302.71 3134.68 2297.27 3137.5 2284.59 c
-3142.33 2284.59 l
-h
-3147.96 2189 m
-f*
-3191.19 2282 m
-3152.84 2282 l
-3152.84 2276.95 l
-3161.49 2275.74 3164 2273.12 3164 2265.07 c
-3164 2205.9 l
-3164 2197.65 3161.93 2195.44 3152.84 2193.83 c
-3152.84 2189 l
-3206.37 2189 l
-3206.37 2193.83 l
-3194.09 2194.63 3192 2197.25 3192 2209.73 c
-3192 2247.76 l
-3192 2258.23 3197.49 2266.88 3203.95 2266.88 c
-3205.56 2266.88 3207.37 2265.47 3209.59 2262.25 c
-3213.41 2256.82 3216.43 2255.01 3221.66 2255.01 c
-3229.11 2255.01 3234.34 2260.64 3234.34 2268.29 c
-3234.34 2277.55 3227.5 2284.41 3218.04 2284.41 c
-3208.1 2284.41 3200.54 2279.12 3191.19 2265.27 c
-h
-3236.35 2189 m
-f*
-3331.19 2201.88 m
-3329.18 2199.87 l
-3328.57 2199.26 3327.97 2199.06 3326.96 2199.06 c
-3324.15 2199.06 3323 2200.67 3323 2204.09 c
-3323 2256.62 l
-3323 2273.73 3307.6 2284.42 3282.89 2284.42 c
-3260.15 2284.42 3244.85 2274.06 3244.85 2258.83 c
-3244.85 2250.38 3249.69 2245.55 3257.94 2245.55 c
-3265.99 2245.55 3271.62 2250.38 3271.62 2257.22 c
-3271.62 2260.04 3270.61 2262.66 3268 2265.88 c
-3266.19 2267.89 3265.58 2269.1 3265.58 2270.3 c
-3265.58 2274.53 3271.02 2277.42 3278.26 2277.42 c
-3290.14 2277.42 3295.86 2272.08 3295.86 2260.04 c
-3295.86 2245.35 l
-3271.91 2238.1 3262.29 2234.48 3254.51 2229.45 c
-3245.46 2223.41 3241 2216.37 3241 2207.52 c
-3241 2195.24 3250.27 2186.18 3263.17 2186.18 c
-3274.84 2186.18 3284.1 2190.21 3295.17 2200.27 c
-3297.38 2190.01 3301.81 2186.18 3311.67 2186.18 c
-3320.32 2186.18 3326.56 2189.4 3334.21 2197.65 c
-h
-3295 2209.13 m
-3289.55 2202.89 3285.52 2200.47 3280.68 2200.47 c
-3274.64 2200.47 3270 2205.91 3270 2213.96 c
-3270 2225.63 3278.61 2233.88 3295 2238.31 c
-h
-3336.62 2189 m
-f*
-3378.4 2282 m
-3339.7 2282 l
-3339.7 2276.95 l
-3348.55 2275.74 3351 2273.32 3351 2265.07 c
-3351 2205.9 l
-3351 2197.65 3348.74 2195.44 3339.7 2193.83 c
-3339.7 2189 l
-3388 2189 l
-3388 2193.83 l
-3380.95 2194.84 3379 2197.65 3379 2205.3 c
-3379 2259.03 l
-3379 2260.04 3381.87 2263.66 3384.18 2265.88 c
-3388.4 2269.1 3392.02 2271.42 3395.65 2271.42 c
-3403.5 2271.42 3407 2266.59 3407 2254 c
-3407 2205.3 l
-3407 2197.05 3404.68 2194.43 3396.85 2193.83 c
-3396.85 2189 l
-3443.95 2189 l
-3443.95 2193.83 l
-3436.9 2194.64 3435 2197.65 3435 2205.3 c
-3435 2259.03 l
-3435 2260.04 3437.73 2263.46 3439.92 2265.68 c
-3444.35 2269.1 3447.97 2271.42 3451.59 2271.42 c
-3459.24 2271.42 3462 2266.38 3462 2254 c
-3462 2205.3 l
-3462 2196.85 3459.85 2194.43 3452.4 2193.83 c
-3452.4 2189 l
-3500.3 2189 l
-3500.3 2194 l
-3492.45 2194.4 3490 2196.78 3490 2205.3 c
-3490 2255.81 l
-3490 2273.12 3479.43 2284.42 3463.07 2284.42 c
-3451.59 2284.42 3443.95 2279.73 3433.48 2266.68 c
-3427.44 2279.36 3420.4 2284.42 3407.72 2284.42 c
-3394.95 2284.42 3385.98 2278.91 3378.4 2266.68 c
-h
-3503.64 2189 m
-f*
-3583.9 2214.16 m
-3575.65 2204.29 3569.61 2200.18 3560.96 2200.18 c
-3553.31 2200.18 3547.27 2203.77 3543.25 2210.94 c
-3539.43 2217.54 3537.82 2224.56 3537.01 2239 c
-3587.73 2239 l
-3586.52 2255.36 3583.5 2264.43 3577.26 2272.12 c
-3570.82 2279.96 3561.36 2284.42 3550.09 2284.42 c
-3524.94 2284.42 3508.03 2264.4 3508.03 2234.88 c
-3508.03 2205.5 3524.53 2186.18 3549.49 2186.18 c
-3565.79 2186.18 3575.65 2192.42 3588.73 2211.34 c
-h
-3536 2246 m
-3536.61 2269.96 3540.23 2277.42 3550.09 2277.42 c
-3555.93 2277.42 3559.55 2274.38 3561.16 2268.49 c
-3562.17 2264.67 3562.57 2259.03 3562.97 2248.77 c
-3562.97 2246 l
-h
-3592.35 2189 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3626 -2189]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-8 w
-1811.75 3430.55 m
-1811.75 3438.95 1811.75 3438.95 1811.75 3430.55 c
-1811.75 3282.95 1851.35 3141.35 1923.35 3040.55 c
-S
-1864.55 3046.55 m
-1913.75 3062.15 l
-1938.95 3107.75 l
-2000.15 2960.15 l
-f*
-2304.95 2464.55 m
-2394.95 2346.95 2579.75 2262.95 2800.55 2241.35 c
-S
-2759.75 2198.15 m
-2781.35 2244.95 l
-2765.75 2292.95 l
-2914.55 2236.55 l
-f*
-2891.75 3844.55 m
-2789.75 3944.15 2644.55 4001.75 2490.95 4001.75 c
-2386.55 4001.75 2284.55 3975.35 2196.95 3924.95 c
-S
-2826.95 3838.55 m
-2874.95 3854.15 l
-2898.95 3899.75 l
-2962.55 3753.35 l
-f*
-3246.95 3268.55 m
-3335.75 3094.55 3500.15 2969.75 3695.75 2930.15 c
-S
-3651.35 2890.55 m
-3676.55 2936.15 l
-3664.55 2986.55 l
-3808.55 2915.75 l
-f*
-0.564706 g
-3698.15 3444.95 m
-3563.75 3480.95 l
-3659.75 3537.35 l
-3506.15 3545.75 l
-3548.15 3616.55 l
-3400.55 3596.15 l
-3383.75 3666.95 l
-3263.75 3622.55 l
-3188.15 3686.15 l
-3112.55 3622.55 l
-2992.55 3666.95 l
-2974.55 3596.15 l
-2825.75 3616.55 l
-2870.15 3545.75 l
-2716.55 3537.35 l
-2812.55 3480.95 l
-2676.95 3444.95 l
-2812.55 3410.15 l
-2716.55 3353.75 l
-2870.15 3344.15 l
-2825.75 3274.55 l
-2974.55 3294.95 l
-2992.55 3222.95 l
-3112.55 3268.55 l
-3188.15 3204.95 l
-3263.75 3268.55 l
-3383.75 3222.95 l
-3400.55 3294.95 l
-3548.15 3274.55 l
-3506.15 3344.15 l
-3659.75 3353.75 l
-3563.75 3410.15 l
-f*
-1 g
-3638.15 3504.95 m
-3503.75 3540.95 l
-3599.75 3597.35 l
-3446.15 3605.75 l
-3488.15 3676.55 l
-3340.55 3656.15 l
-3323.75 3726.95 l
-3203.75 3682.55 l
-3128.15 3746.15 l
-3052.55 3682.55 l
-2932.55 3726.95 l
-2914.55 3656.15 l
-2765.75 3676.55 l
-2810.15 3605.75 l
-2656.55 3597.35 l
-2752.55 3540.95 l
-2616.95 3504.95 l
-2752.55 3470.15 l
-2656.55 3413.75 l
-2810.15 3404.15 l
-2765.75 3334.55 l
-2914.55 3354.95 l
-2932.55 3282.95 l
-3052.55 3328.55 l
-3128.15 3264.95 l
-3203.75 3328.55 l
-3323.75 3282.95 l
-3340.55 3354.95 l
-3488.15 3334.55 l
-3446.15 3404.15 l
-3599.75 3413.75 l
-3503.75 3470.15 l
-f*
-0 g
-3638.15 3504.95 m
-3503.75 3540.95 l
-3599.75 3597.35 l
-3446.15 3605.75 l
-3488.15 3676.55 l
-3340.55 3656.15 l
-3323.75 3726.95 l
-3203.75 3682.55 l
-3128.15 3746.15 l
-3052.55 3682.55 l
-2932.55 3726.95 l
-2914.55 3656.15 l
-2765.75 3676.55 l
-2810.15 3605.75 l
-2656.55 3597.35 l
-2752.55 3540.95 l
-2616.95 3504.95 l
-2752.55 3470.15 l
-2656.55 3413.75 l
-2810.15 3404.15 l
-2765.75 3334.55 l
-2914.55 3354.95 l
-2932.55 3282.95 l
-3052.55 3328.55 l
-3128.15 3264.95 l
-3203.75 3328.55 l
-3323.75 3282.95 l
-3340.55 3354.95 l
-3488.15 3334.55 l
-3446.15 3404.15 l
-3599.75 3413.75 l
-3503.75 3470.15 l
-3638.15 3504.95 l
-3599.75 3504.95 l
-3477.35 3473.75 l
-3566.15 3420.95 l
-3428.15 3413.75 l
-3468.95 3347.75 l
-3333.35 3365.75 l
-3316.55 3297.35 l
-3201.35 3339.35 l
-3128.15 3276.95 l
-3054.95 3339.35 l
-2939.75 3297.35 l
-2921.75 3365.75 l
-2786.15 3347.75 l
-2826.95 3413.75 l
-2690.15 3420.95 l
-2778.95 3473.75 l
-2656.55 3504.95 l
-2777.75 3537.35 l
-2690.15 3590.15 l
-2826.95 3597.35 l
-2786.15 3663.35 l
-2921.75 3644.15 l
-2939.75 3713.75 l
-3054.95 3670.55 l
-3128.15 3732.95 l
-3201.35 3670.55 l
-3316.55 3713.75 l
-3333.35 3644.15 l
-3468.95 3663.35 l
-3428.15 3597.35 l
-3566.15 3590.15 l
-3477.35 3537.35 l
-3599.75 3504.95 l
-3638.15 3504.95 l
-f*
-0.2 i
-2950.08 3556.76 m
-2930.08 3482.52 l
-2927.52 3473.88 2924.48 3471.64 2914.08 3471 c
-2914.08 3467 l
-2964 3467 l
-2964 3471 l
-2954.72 3471.48 2952.48 3472.76 2952.48 3477.88 c
-2952.48 3479.64 2952.8 3481.4 2953.76 3485.08 c
-2953.92 3485.88 l
-2954.08 3486.68 l
-2973.76 3558.52 l
-2976.16 3566.84 2978.56 3569.08 2986.72 3570.04 c
-2986.72 3574 l
-2952.8 3574 l
-2903.2 3497.24 l
-2894.56 3574 l
-2859.2 3574 l
-2859.2 3570 l
-2869.28 3569.52 2870.72 3568.89 2870.72 3564.44 c
-2870.72 3562.2 2870.08 3559.32 2868.96 3555.16 c
-2851.52 3495.48 l
-2845.12 3474.68 2844 3472.92 2835.36 3471 c
-2835.36 3467 l
-2868.48 3467 l
-2868.48 3471 l
-2858.24 3472.28 2855.68 3474.2 2855.68 3480.76 c
-2855.68 3483.48 2856.48 3487.48 2858.72 3495.48 c
-2874.88 3554.52 l
-2885.6 3465.08 l
-2890.08 3465.08 l
-h
-2982.24 3467 m
-f*
-3051.44 3487.32 m
-3044.88 3478.52 3042.48 3475.76 3039.92 3475.76 c
-3038.64 3475.76 3038 3476.86 3038 3478.52 c
-3038 3482.52 3039.44 3489.08 3043.44 3502.2 c
-3054.8 3539.96 l
-3037.04 3538.84 l
-3034.16 3529.4 l
-3032.72 3537.56 3029.2 3541.08 3022.32 3541.08 c
-3002.64 3541.08 2979 3510.27 2979 3485.24 c
-2979 3473.08 2985.74 3464.92 2995.92 3464.92 c
-3005.68 3464.92 3013.04 3470.68 3022.16 3486.04 c
-3020.24 3479.48 3020 3477.56 3020 3475.32 c
-3020 3469.4 3024.76 3464.76 3030.64 3464.76 c
-3038.16 3464.76 3045.52 3471 3054.8 3484.92 c
-h
-3024.56 3534.2 m
-3028.08 3533.88 3030.56 3531 3030.56 3526.68 c
-3030.56 3517.08 3025.24 3499.32 3018.96 3488.28 c
-3014.64 3480.44 3009.84 3475.92 3005.52 3475.92 c
-3001.36 3475.92 2998 3479.75 2998 3484.92 c
-2998 3493.24 3003.42 3509.24 3010.16 3521.08 c
-3014.96 3529.56 3020.24 3534.52 3024.56 3534.2 c
-h
-3062 3467 m
-f*
-3096.56 3540.92 m
-3080.24 3538.36 3074 3537.4 3065.68 3536.44 c
-3065.68 3532 l
-3072.88 3531.69 3074.32 3531.07 3074.32 3528.12 c
-3074.32 3526.52 3073.04 3520.76 3070.8 3512.44 c
-3054.8 3450.36 l
-3051.76 3439.8 3050.48 3438.84 3042.8 3439 c
-3042.8 3434 l
-3082.64 3434 l
-3082.64 3439 l
-3074.64 3439.14 3072.24 3440.16 3072.24 3443.64 c
-3072.24 3445.88 3073.36 3450.68 3076.4 3461.88 c
-3077.52 3465.72 3077.52 3466.04 3078.16 3468.44 c
-3083.76 3465.56 3085.68 3464.92 3089.04 3464.92 c
-3110.8 3464.92 3133.36 3493.88 3133.36 3521.56 c
-3133.36 3533.4 3126.64 3541.08 3116.08 3541.08 c
-3106.96 3541.08 3099.92 3535.92 3090.48 3522.52 c
-h
-3107.12 3529.56 m
-3111.28 3529.24 3113.68 3525.56 3113.36 3520.44 c
-3112.72 3509.88 3107.6 3494.04 3101.84 3483.64 c
-3096.88 3475 3091.76 3469.92 3086.32 3469.92 c
-3082.8 3469.92 3080.08 3472.75 3080.08 3476.28 c
-3080.08 3479 3081.84 3485.56 3086.16 3500.12 c
-3089.68 3511.8 3091.12 3515.8 3093.52 3519.48 c
-3097.52 3525.72 3102.96 3529.88 3107.12 3529.56 c
-h
-3142 3467 m
-f*
-3177.56 3540.92 m
-3161.24 3538.36 3155 3537.4 3146.68 3536.44 c
-3146.68 3532 l
-3153.88 3531.69 3155.32 3531.07 3155.32 3528.12 c
-3155.32 3526.52 3154.04 3520.76 3151.8 3512.44 c
-3135.8 3450.36 l
-3132.76 3439.8 3131.48 3438.84 3123.8 3439 c
-3123.8 3434 l
-3163.64 3434 l
-3163.64 3439 l
-3155.64 3439.14 3153.24 3440.16 3153.24 3443.64 c
-3153.24 3445.88 3154.36 3450.68 3157.4 3461.88 c
-3158.52 3465.72 3158.52 3466.04 3159.16 3468.44 c
-3164.76 3465.56 3166.68 3464.92 3170.04 3464.92 c
-3191.8 3464.92 3214.36 3493.88 3214.36 3521.56 c
-3214.36 3533.4 3207.64 3541.08 3197.08 3541.08 c
-3187.96 3541.08 3180.92 3535.92 3171.48 3522.52 c
-h
-3188.12 3529.56 m
-3192.28 3529.24 3194.68 3525.56 3194.36 3520.44 c
-3193.72 3509.88 3188.6 3494.04 3182.84 3483.64 c
-3177.88 3475 3172.76 3469.92 3167.32 3469.92 c
-3163.8 3469.92 3161.08 3472.75 3161.08 3476.28 c
-3161.08 3479 3162.84 3485.56 3167.16 3500.12 c
-3170.68 3511.8 3172.12 3515.8 3174.52 3519.48 c
-3178.52 3525.72 3183.96 3529.88 3188.12 3529.56 c
-h
-3223 3467 m
-f*
-3256.56 3489.56 m
-3254.32 3486.36 l
-3250.16 3480.12 3246.48 3476.56 3244.08 3476.56 c
-3242.8 3476.56 3242 3477.77 3242 3479.16 c
-3242 3480.6 3242.62 3484.76 3243.12 3487.48 c
-3257.68 3540.92 l
-3249.22 3539 3238.26 3537.4 3226.04 3536.44 c
-3226.04 3532 l
-3227.44 3532 l
-3232.24 3532 3235.48 3530.44 3235.48 3527.48 c
-3235.48 3526.2 3234.71 3523.8 3233.68 3521.08 c
-3224.4 3486.68 l
-3223.12 3482.04 3223 3477.88 3223 3475.64 c
-3223 3469.56 3227.2 3465.56 3233.36 3465.56 c
-3242.96 3465.56 3248.88 3470.36 3260.08 3487.32 c
-h
-3252.88 3576.4 m
-3247.44 3576.4 3243 3571.46 3243 3566.04 c
-3243 3559.8 3247.26 3555.4 3253.04 3555.4 c
-3259.12 3555.4 3264 3559.86 3264 3565.56 c
-3264 3571.48 3259 3576.4 3252.88 3576.4 c
-h
-3266.48 3467 m
-f*
-3341.36 3488.6 m
-3334.96 3478.68 3332.88 3476.56 3330.16 3476.56 c
-3328.88 3476.56 3328 3477.63 3328 3479.16 c
-3328 3480.76 3328.94 3484.12 3331.92 3493.08 c
-3337.68 3510.52 l
-3340.24 3518.04 3342 3525.08 3342 3528.92 c
-3342 3536.76 3337.78 3541.08 3330.16 3541.08 c
-3324.24 3541.08 3318.48 3538.62 3314.16 3534.36 c
-3308.24 3528.76 3305.2 3524.92 3294.48 3509.08 c
-3304.72 3540.76 l
-3294.48 3538.52 3281.68 3536.92 3272.72 3536.6 c
-3272.72 3531.8 l
-3279.44 3531.65 3281.36 3530.92 3281.36 3528.12 c
-3281.36 3526.2 3279.12 3517.72 3274 3499.64 c
-3270.32 3486.68 3269.2 3482.52 3265.04 3467 c
-3284.4 3467 l
-3291.92 3494.68 3297.68 3508.6 3307.6 3521.56 c
-3310.8 3525.88 3315.76 3529.08 3318.64 3529.08 c
-3320.72 3529.08 3323 3527.63 3323 3526.04 c
-3323 3525.56 3322.54 3524.28 3321.84 3522.68 c
-3313.04 3496.12 l
-3310.48 3488.44 3309 3479.32 3309 3475.16 c
-3309 3469.08 3312.84 3465.56 3319.44 3465.56 c
-3329.04 3465.56 3335.6 3471 3344.88 3486.52 c
-h
-3354.96 3467 m
-f*
-3432.48 3536 m
-3414.72 3536 l
-3409.28 3539.58 3404.48 3541.08 3397.12 3541.08 c
-3377.44 3541.08 3361 3528.05 3361 3511.8 c
-3361 3503.64 3365.35 3497.88 3374.4 3494.2 c
-3361.28 3486.84 3359 3484.6 3359 3478.68 c
-3359 3473.56 3361.89 3470.52 3368.96 3468.12 c
-3359.04 3465.72 3355.84 3464.44 3352 3461.4 c
-3349.44 3459.16 3348 3455.32 3348 3451.48 c
-3348 3441.08 3359.56 3435 3377.76 3435 c
-3400.32 3435 3416 3444.72 3416 3458.52 c
-3416 3468.28 3409.6 3473.56 3392.16 3478.52 c
-3383.68 3480.92 l
-3378.56 3482.36 3375 3484.6 3375 3487 c
-3375 3489.56 3377.68 3492.28 3380 3492.28 c
-3380.8 3492.28 3381.92 3492.24 3383.2 3492.12 c
-3384.96 3491.64 3386.24 3491 3388.16 3491 c
-3395.2 3491 3402.4 3493.09 3408.48 3496.92 c
-3417.76 3502.2 3423 3510.36 3423 3519.96 c
-3423 3522.64 3422.59 3524.32 3421.76 3527 c
-3432.48 3527 l
-h
-3374.4 3466.04 m
-3376.32 3465.88 3388.48 3461.72 3392 3460.12 c
-3396.48 3457.88 3399 3455.16 3399 3451 c
-3399 3443.96 3391.8 3440 3379.36 3440 c
-3368.96 3440 3362 3445.1 3362 3452.44 c
-3362 3455.48 3363.32 3458.2 3366.24 3461.24 c
-3368.32 3463.32 3373.12 3466.2 3374.4 3466.04 c
-h
-3396.8 3536.08 m
-3400.96 3536.08 3404 3532.19 3404 3526.52 c
-3404 3521.08 3402.08 3513.4 3399.36 3507.48 c
-3396 3500.12 3391.84 3496 3386.88 3496 c
-3382.56 3496 3380 3499.52 3380 3505.88 c
-3380 3512.28 3382.79 3522.04 3386.24 3528.12 c
-3389.28 3533.4 3392.64 3536.08 3396.8 3536.08 c
-h
-3436 3467 m
-f*
-1 i
-0.564706 g
-2768.15 2649.35 m
-2633.75 2686.55 l
-2729.75 2741.75 l
-2576.15 2751.35 l
-2618.15 2820.95 l
-2470.55 2800.55 l
-2453.75 2872.55 l
-2333.75 2826.95 l
-2258.15 2890.55 l
-2182.55 2826.95 l
-2062.55 2872.55 l
-2044.55 2800.55 l
-1895.75 2820.95 l
-1940.15 2751.35 l
-1786.55 2741.75 l
-1882.55 2686.55 l
-1746.95 2649.35 l
-1882.55 2614.55 l
-1786.55 2558.15 l
-1940.15 2549.75 l
-1895.75 2480.15 l
-2044.55 2499.35 l
-2062.55 2428.55 l
-2182.55 2472.95 l
-2258.15 2409.35 l
-2333.75 2472.95 l
-2453.75 2428.55 l
-2470.55 2499.35 l
-2618.15 2480.15 l
-2576.15 2549.75 l
-2729.75 2558.15 l
-2633.75 2614.55 l
-f*
-1 g
-2708.15 2709.35 m
-2573.75 2746.55 l
-2669.75 2801.75 l
-2516.15 2811.35 l
-2558.15 2880.95 l
-2410.55 2860.55 l
-2393.75 2932.55 l
-2273.75 2886.95 l
-2198.15 2950.55 l
-2122.55 2886.95 l
-2002.55 2932.55 l
-1984.55 2860.55 l
-1835.75 2880.95 l
-1880.15 2811.35 l
-1726.55 2801.75 l
-1822.55 2746.55 l
-1686.95 2709.35 l
-1822.55 2674.55 l
-1726.55 2618.15 l
-1880.15 2609.75 l
-1835.75 2540.15 l
-1984.55 2559.35 l
-2002.55 2488.55 l
-2122.55 2532.95 l
-2198.15 2469.35 l
-2273.75 2532.95 l
-2393.75 2488.55 l
-2410.55 2559.35 l
-2558.15 2540.15 l
-2516.15 2609.75 l
-2669.75 2618.15 l
-2573.75 2674.55 l
-f*
-0 g
-2708.15 2709.35 m
-2573.75 2746.55 l
-2669.75 2801.75 l
-2516.15 2811.35 l
-2558.15 2880.95 l
-2410.55 2860.55 l
-2393.75 2932.55 l
-2273.75 2886.95 l
-2198.15 2950.55 l
-2122.55 2886.95 l
-2002.55 2932.55 l
-1984.55 2860.55 l
-1835.75 2880.95 l
-1880.15 2811.35 l
-1726.55 2801.75 l
-1822.55 2746.55 l
-1686.95 2709.35 l
-1822.55 2674.55 l
-1726.55 2618.15 l
-1880.15 2609.75 l
-1835.75 2540.15 l
-1984.55 2559.35 l
-2002.55 2488.55 l
-2122.55 2532.95 l
-2198.15 2469.35 l
-2273.75 2532.95 l
-2393.75 2488.55 l
-2410.55 2559.35 l
-2558.15 2540.15 l
-2516.15 2609.75 l
-2669.75 2618.15 l
-2573.75 2674.55 l
-2708.15 2709.35 l
-2669.75 2709.35 l
-2547.35 2678.15 l
-2636.15 2626.55 l
-2498.15 2618.15 l
-2538.95 2552.15 l
-2403.35 2571.35 l
-2386.55 2501.75 l
-2271.35 2544.95 l
-2198.15 2482.55 l
-2124.95 2544.95 l
-2009.75 2501.75 l
-1991.75 2571.35 l
-1856.15 2552.15 l
-1896.95 2618.15 l
-1760.15 2626.55 l
-1848.95 2678.15 l
-1726.55 2709.35 l
-1847.75 2741.75 l
-1760.15 2794.55 l
-1896.95 2801.75 l
-1856.15 2868.95 l
-1991.75 2849.75 l
-2009.75 2918.15 l
-2124.95 2876.15 l
-2198.15 2938.55 l
-2271.35 2876.15 l
-2386.55 2918.15 l
-2403.35 2849.75 l
-2538.95 2868.95 l
-2498.15 2801.75 l
-2636.15 2794.55 l
-2547.35 2741.75 l
-2669.75 2709.35 l
-2708.15 2709.35 l
-f*
-0.2 i
-2020.08 2760.76 m
-2000.08 2686.52 l
-1997.52 2677.88 1994.48 2675.64 1984.08 2675 c
-1984.08 2671 l
-2034 2671 l
-2034 2675 l
-2024.72 2675.48 2022.48 2676.76 2022.48 2681.88 c
-2022.48 2683.64 2022.8 2685.4 2023.76 2689.08 c
-2023.92 2689.88 l
-2024.08 2690.68 l
-2043.76 2762.52 l
-2046.16 2770.84 2048.56 2773.08 2056.72 2774.04 c
-2056.72 2778 l
-2022.8 2778 l
-1973.2 2701.24 l
-1964.56 2778 l
-1929.2 2778 l
-1929.2 2774 l
-1939.28 2773.52 1940.72 2772.89 1940.72 2768.44 c
-1940.72 2766.2 1940.08 2763.32 1938.96 2759.16 c
-1921.52 2699.48 l
-1915.12 2678.68 1914 2676.92 1905.36 2675 c
-1905.36 2671 l
-1938.48 2671 l
-1938.48 2675 l
-1928.24 2676.28 1925.68 2678.2 1925.68 2684.76 c
-1925.68 2687.48 1926.48 2691.48 1928.72 2699.48 c
-1944.88 2758.52 l
-1955.6 2669.08 l
-1960.08 2669.08 l
-h
-2052.24 2671 m
-f*
-2121.44 2691.32 m
-2114.88 2682.52 2112.48 2679.76 2109.92 2679.76 c
-2108.64 2679.76 2108 2680.86 2108 2682.52 c
-2108 2686.52 2109.44 2693.08 2113.44 2706.2 c
-2124.8 2743.96 l
-2107.04 2742.84 l
-2104.16 2733.4 l
-2102.72 2741.56 2099.2 2745.08 2092.32 2745.08 c
-2072.64 2745.08 2049 2714.27 2049 2689.24 c
-2049 2677.08 2055.74 2668.92 2065.92 2668.92 c
-2075.68 2668.92 2083.04 2674.68 2092.16 2690.04 c
-2090.24 2683.48 2090 2681.56 2090 2679.32 c
-2090 2673.4 2094.76 2668.76 2100.64 2668.76 c
-2108.16 2668.76 2115.52 2675 2124.8 2688.92 c
-h
-2094.56 2738.2 m
-2098.08 2737.88 2100.56 2735 2100.56 2730.68 c
-2100.56 2721.08 2095.24 2703.32 2088.96 2692.28 c
-2084.64 2684.44 2079.84 2679.92 2075.52 2679.92 c
-2071.36 2679.92 2068 2683.75 2068 2688.92 c
-2068 2697.24 2073.42 2713.24 2080.16 2725.08 c
-2084.96 2733.56 2090.24 2738.52 2094.56 2738.2 c
-h
-2132 2671 m
-f*
-2166.56 2744.92 m
-2150.24 2742.36 2144 2741.4 2135.68 2740.44 c
-2135.68 2736 l
-2142.88 2735.69 2144.32 2735.07 2144.32 2732.12 c
-2144.32 2730.52 2143.04 2724.76 2140.8 2716.44 c
-2124.8 2654.36 l
-2121.76 2643.8 2120.48 2642.84 2112.8 2643 c
-2112.8 2638 l
-2152.64 2638 l
-2152.64 2643 l
-2144.64 2643.14 2142.24 2644.16 2142.24 2647.64 c
-2142.24 2649.88 2143.36 2654.68 2146.4 2665.88 c
-2147.52 2669.72 2147.52 2670.04 2148.16 2672.44 c
-2153.76 2669.56 2155.68 2668.92 2159.04 2668.92 c
-2180.8 2668.92 2203.36 2697.88 2203.36 2725.56 c
-2203.36 2737.4 2196.64 2745.08 2186.08 2745.08 c
-2176.96 2745.08 2169.92 2739.92 2160.48 2726.52 c
-h
-2177.12 2733.56 m
-2181.28 2733.24 2183.68 2729.56 2183.36 2724.44 c
-2182.72 2713.88 2177.6 2698.04 2171.84 2687.64 c
-2166.88 2679 2161.76 2673.92 2156.32 2673.92 c
-2152.8 2673.92 2150.08 2676.75 2150.08 2680.28 c
-2150.08 2683 2151.84 2689.56 2156.16 2704.12 c
-2159.68 2715.8 2161.12 2719.8 2163.52 2723.48 c
-2167.52 2729.72 2172.96 2733.88 2177.12 2733.56 c
-h
-2212 2671 m
-f*
-2247.56 2744.92 m
-2231.24 2742.36 2225 2741.4 2216.68 2740.44 c
-2216.68 2736 l
-2223.88 2735.69 2225.32 2735.07 2225.32 2732.12 c
-2225.32 2730.52 2224.04 2724.76 2221.8 2716.44 c
-2205.8 2654.36 l
-2202.76 2643.8 2201.48 2642.84 2193.8 2643 c
-2193.8 2638 l
-2233.64 2638 l
-2233.64 2643 l
-2225.64 2643.14 2223.24 2644.16 2223.24 2647.64 c
-2223.24 2649.88 2224.36 2654.68 2227.4 2665.88 c
-2228.52 2669.72 2228.52 2670.04 2229.16 2672.44 c
-2234.76 2669.56 2236.68 2668.92 2240.04 2668.92 c
-2261.8 2668.92 2284.36 2697.88 2284.36 2725.56 c
-2284.36 2737.4 2277.64 2745.08 2267.08 2745.08 c
-2257.96 2745.08 2250.92 2739.92 2241.48 2726.52 c
-h
-2258.12 2733.56 m
-2262.28 2733.24 2264.68 2729.56 2264.36 2724.44 c
-2263.72 2713.88 2258.6 2698.04 2252.84 2687.64 c
-2247.88 2679 2242.76 2673.92 2237.32 2673.92 c
-2233.8 2673.92 2231.08 2676.75 2231.08 2680.28 c
-2231.08 2683 2232.84 2689.56 2237.16 2704.12 c
-2240.68 2715.8 2242.12 2719.8 2244.52 2723.48 c
-2248.52 2729.72 2253.96 2733.88 2258.12 2733.56 c
-h
-2293 2671 m
-f*
-2326.56 2693.56 m
-2324.32 2690.36 l
-2320.16 2684.12 2316.48 2680.56 2314.08 2680.56 c
-2312.8 2680.56 2312 2681.77 2312 2683.16 c
-2312 2684.6 2312.62 2688.76 2313.12 2691.48 c
-2327.68 2744.92 l
-2319.22 2743 2308.26 2741.4 2296.04 2740.44 c
-2296.04 2736 l
-2297.44 2736 l
-2302.24 2736 2305.48 2734.44 2305.48 2731.48 c
-2305.48 2730.2 2304.71 2727.8 2303.68 2725.08 c
-2294.4 2690.68 l
-2293.12 2686.04 2293 2681.88 2293 2679.64 c
-2293 2673.56 2297.2 2669.56 2303.36 2669.56 c
-2312.96 2669.56 2318.88 2674.36 2330.08 2691.32 c
-h
-2322.88 2780.4 m
-2317.44 2780.4 2313 2775.46 2313 2770.04 c
-2313 2763.8 2317.26 2759.4 2323.04 2759.4 c
-2329.12 2759.4 2334 2763.86 2334 2769.56 c
-2334 2775.48 2329 2780.4 2322.88 2780.4 c
-h
-2336.48 2671 m
-f*
-2411.36 2692.6 m
-2404.96 2682.68 2402.88 2680.56 2400.16 2680.56 c
-2398.88 2680.56 2398 2681.63 2398 2683.16 c
-2398 2684.76 2398.94 2688.12 2401.92 2697.08 c
-2407.68 2714.52 l
-2410.24 2722.04 2412 2729.08 2412 2732.92 c
-2412 2740.76 2407.78 2745.08 2400.16 2745.08 c
-2394.24 2745.08 2388.48 2742.62 2384.16 2738.36 c
-2378.24 2732.76 2375.2 2728.92 2364.48 2713.08 c
-2374.72 2744.76 l
-2364.48 2742.52 2351.68 2740.92 2342.72 2740.6 c
-2342.72 2735.8 l
-2349.44 2735.65 2351.36 2734.92 2351.36 2732.12 c
-2351.36 2730.2 2349.12 2721.72 2344 2703.64 c
-2340.32 2690.68 2339.2 2686.52 2335.04 2671 c
-2354.4 2671 l
-2361.92 2698.68 2367.68 2712.6 2377.6 2725.56 c
-2380.8 2729.88 2385.76 2733.08 2388.64 2733.08 c
-2390.72 2733.08 2393 2731.63 2393 2730.04 c
-2393 2729.56 2392.54 2728.28 2391.84 2726.68 c
-2383.04 2700.12 l
-2380.48 2692.44 2379 2683.32 2379 2679.16 c
-2379 2673.08 2382.84 2669.56 2389.44 2669.56 c
-2399.04 2669.56 2405.6 2675 2414.88 2690.52 c
-h
-2424.96 2671 m
-f*
-2502.48 2740 m
-2484.72 2740 l
-2479.28 2743.58 2474.48 2745.08 2467.12 2745.08 c
-2447.44 2745.08 2431 2732.05 2431 2715.8 c
-2431 2707.64 2435.35 2701.88 2444.4 2698.2 c
-2431.28 2690.84 2429 2688.6 2429 2682.68 c
-2429 2677.56 2431.89 2674.52 2438.96 2672.12 c
-2429.04 2669.72 2425.84 2668.44 2422 2665.4 c
-2419.44 2663.16 2418 2659.32 2418 2655.48 c
-2418 2645.08 2429.56 2639 2447.76 2639 c
-2470.32 2639 2486 2648.72 2486 2662.52 c
-2486 2672.28 2479.6 2677.56 2462.16 2682.52 c
-2453.68 2684.92 l
-2448.56 2686.36 2445 2688.6 2445 2691 c
-2445 2693.56 2447.68 2696.28 2450 2696.28 c
-2450.8 2696.28 2451.92 2696.24 2453.2 2696.12 c
-2454.96 2695.64 2456.24 2695 2458.16 2695 c
-2465.2 2695 2472.4 2697.09 2478.48 2700.92 c
-2487.76 2706.2 2493 2714.36 2493 2723.96 c
-2493 2726.64 2492.59 2728.32 2491.76 2731 c
-2502.48 2731 l
-h
-2444.4 2670.04 m
-2446.32 2669.88 2458.48 2665.72 2462 2664.12 c
-2466.48 2661.88 2469 2659.16 2469 2655 c
-2469 2647.96 2461.8 2644 2449.36 2644 c
-2438.96 2644 2432 2649.1 2432 2656.44 c
-2432 2659.48 2433.32 2662.2 2436.24 2665.24 c
-2438.32 2667.32 2443.12 2670.2 2444.4 2670.04 c
-h
-2466.8 2740.08 m
-2470.96 2740.08 2474 2736.19 2474 2730.52 c
-2474 2725.08 2472.08 2717.4 2469.36 2711.48 c
-2466 2704.12 2461.84 2700 2456.88 2700 c
-2452.56 2700 2450 2703.52 2450 2709.88 c
-2450 2716.28 2452.79 2726.04 2456.24 2732.12 c
-2459.28 2737.4 2462.64 2740.08 2466.8 2740.08 c
-h
-2506 2671 m
-f*
-1 i
-1 g
-4282.55 3248.15 m
-4448.15 3401.75 l
-4366.55 3401.75 l
-4366.55 3552.95 l
-4199.75 3552.95 l
-4199.75 3401.75 l
-4118.15 3401.75 l
-f*
-0 g
-4282.55 3248.15 m
-4448.15 3401.75 l
-4366.55 3401.75 l
-4366.55 3552.95 l
-4199.75 3552.95 l
-4199.75 3401.75 l
-4118.15 3401.75 l
-4282.55 3248.15 l
-4282.55 3262.55 l
-4143.35 3392.15 l
-4209.35 3392.15 l
-4209.35 3543.35 l
-4355.75 3543.35 l
-4355.75 3392.15 l
-4424.15 3392.15 l
-4282.55 3262.55 l
-4282.55 3248.15 l
-f*
-0.2 i
-3770.88 3786.52 m
-3735.78 3786.52 3711 3761.21 3711 3725.12 c
-3711 3688.04 3734.99 3662.48 3769.98 3662.48 c
-3804.54 3662.48 3829 3688.04 3829 3724.58 c
-3829 3740.96 3823.9 3755.9 3814.98 3766.34 c
-3804.18 3779.12 3787.8 3786.52 3770.88 3786.52 c
-h
-3769.44 3779.52 m
-3777.9 3779.52 3785.46 3777.05 3791.94 3772.1 c
-3802.2 3763.46 3808 3746.18 3808 3725.66 c
-3808 3704.06 3803.25 3688.4 3793.56 3678.5 c
-3787.44 3672.38 3779.16 3669.48 3770.16 3669.48 c
-3761.88 3669.48 3754.14 3672.01 3747.84 3677.06 c
-3737.76 3685.34 3732 3703.34 3732 3724.76 c
-3732 3741.86 3736.54 3758.96 3743.34 3767.6 c
-3750 3775.52 3759.72 3779.52 3769.44 3779.52 c
-h
-3834.96 3665 m
-f*
-3838.42 3777.14 m
-3839.5 3777.14 l
-3841.48 3777.32 3843.64 3777.5 3845.08 3777.5 c
-3850.84 3777.5 3853 3774.98 3853 3766.52 c
-3853 3680.66 l
-3853 3670.94 3850.41 3668.6 3838.78 3667.7 c
-3838.78 3665 l
-3881.26 3665 l
-3881.26 3668 l
-3869.74 3668.7 3868 3670.46 3868 3680.12 c
-3868 3787.58 l
-3867.04 3787.94 l
-3857.68 3784.88 3850.84 3783.08 3838.42 3780.02 c
-h
-3885.04 3665 m
-f*
-3946.92 3663.2 m
-3973.38 3672.56 l
-3973.38 3676 l
-3970.32 3675.26 3970.14 3675.82 3969.24 3675.82 c
-3962.76 3675.82 3961 3677.69 3961 3685.52 c
-3961 3787.58 l
-3960.42 3787.94 l
-3951.78 3784.88 3945.48 3783.08 3933.96 3780.02 c
-3933.96 3777.14 l
-3935.4 3777.32 3936.48 3777.32 3937.92 3777.32 c
-3944.58 3777.32 3946 3775.52 3946 3768.14 c
-3946 3740.06 l
-3939.23 3745.82 3934.42 3747.8 3927.3 3747.8 c
-3906.6 3747.8 3890 3727.46 3890 3701.9 c
-3890 3678.86 3903.26 3663.2 3923.16 3663.2 c
-3933.15 3663.2 3939.93 3666.8 3946 3675.26 c
-3946 3663.74 l
-h
-3946 3683.36 m
-3946 3682.1 3945 3680.12 3943.5 3678.32 c
-3940.26 3674.54 3935.76 3672.2 3930.18 3672.2 c
-3915.06 3672.2 3905 3686.74 3905 3709.1 c
-3905 3729.44 3913.95 3742.8 3927.84 3742.8 c
-3937.56 3742.8 3946 3734.32 3946 3724.76 c
-h
-3975 3665 m
-f*
-4020 3665 m
-f*
-4023.06 3784 m
-4023.06 3781 l
-4038.18 3780.09 4040 3778.07 4040 3764.54 c
-4040 3684.62 l
-4040 3671.3 4037.71 3668.96 4023.06 3668.42 c
-4023.06 3665 l
-4083.18 3665 l
-4110 3665 4127 3677.42 4127 3697.4 c
-4127 3705.32 4123.85 3712.52 4117.92 3717.74 c
-4112.52 3722.6 4107.66 3724.94 4095.96 3727.64 c
-4105.32 3729.98 4109.1 3731.78 4113.42 3735.56 c
-4117.92 3739.52 4121 3746.18 4121 3753.56 c
-4121 3773.72 4104.85 3784 4073.46 3784 c
-h
-4059 3723.68 m
-4075.94 3723.68 4083.78 3722.78 4090.56 3720.26 c
-4101 3716.12 4106 3708.74 4106 3697.22 c
-4106 3687.5 4102.23 3680.48 4095.06 3676.34 c
-4089.3 3672.92 4082.1 3672 4069.5 3672 c
-4061.22 3672 4059 3673.55 4059 3679.04 c
-h
-4059 3730.88 m
-4059 3772.1 l
-4059 3775.88 4060.16 3777 4062.66 3777 c
-4070.58 3777 l
-4091.28 3777 4102 3768.71 4102 3752.84 c
-4102 3738.8 4092.55 3730.88 4075.8 3730.88 c
-h
-4140.06 3665 m
-f*
-4219.56 3676.88 m
-4216.5 3674.36 4214.34 3673.2 4211.64 3673.2 c
-4207.5 3673.2 4206 3675.78 4206 3683.9 c
-4206 3719 l
-4206 3728.18 4205.16 3733.22 4202.82 3737.36 c
-4199.04 3744.2 4191.3 3747.8 4180.32 3747.8 c
-4171.14 3747.8 4162.5 3745.28 4157.46 3741.14 c
-4152.96 3737.36 4150 3732.14 4150 3727.64 c
-4150 3723.5 4153.46 3719.9 4157.82 3719.9 c
-4162.14 3719.9 4165.92 3723.5 4165.92 3727.46 c
-4165.92 3728.18 4165.74 3729.08 4165.56 3730.34 c
-4165.2 3731.96 4165 3733.4 4165 3734.66 c
-4165 3739.52 4170.77 3743.8 4177.98 3743.8 c
-4186.8 3743.8 4191 3738.47 4191 3728.54 c
-4191 3717.56 l
-4163.76 3706.4 4160.75 3704.96 4153.14 3698.12 c
-4149.18 3694.52 4146.66 3688.4 4146.66 3682.46 c
-4146.66 3671.12 4154.4 3663.2 4165.56 3663.2 c
-4173.48 3663.2 4180.86 3666.98 4191.84 3676.34 c
-4192.74 3666.8 4195.98 3663.2 4203.36 3663.2 c
-4209.48 3663.2 4213.26 3665.36 4219.56 3672.2 c
-h
-4191 3687.14 m
-4191 3681.56 4190.23 3679.94 4186.98 3677.6 c
-4182.66 3675.08 4177.62 3673.2 4173.84 3673.2 c
-4167.54 3673.2 4162.48 3679.51 4162.48 3687.5 c
-4162.48 3688.22 l
-4162.48 3698.84 4169.7 3705.32 4191 3713.24 c
-h
-4219.92 3665 m
-f*
-4277.06 3721.52 m
-4276.34 3746 l
-4274 3746 l
-4273.64 3745.64 l
-4272.02 3744.38 4271.84 3744.2 4271.12 3744.2 c
-4270.04 3744.2 4268.24 3744.56 4266.26 3745.46 c
-4262.48 3746.9 4258.34 3747.62 4254.02 3747.62 c
-4239.26 3747.62 4229 3738.62 4229 3725.48 c
-4229 3715.4 4234.81 3708.38 4250.24 3699.56 c
-4260.68 3693.62 l
-4266.98 3690.02 4270 3685.7 4270 3680.12 c
-4270 3672.2 4264.26 3667.2 4255.1 3667.2 c
-4242.68 3667.2 4236.38 3674.03 4232.24 3692.36 c
-4229.18 3692.36 l
-4229.18 3664.28 l
-4231.7 3664.28 l
-4232.96 3666.08 4233.68 3666.44 4235.84 3666.44 c
-4237.82 3666.44 4239.8 3666.08 4244.12 3665 c
-4249.16 3663.92 4253.66 3663.2 4257.44 3663.2 c
-4271.12 3663.2 4283 3673.64 4283 3686.24 c
-4283 3695.24 4278.76 3701.18 4267.52 3707.66 c
-4248.08 3719.18 l
-4243.04 3722.06 4240 3726.56 4240 3731.42 c
-4240 3738.8 4245.72 3743.62 4254.2 3743.62 c
-4264.46 3743.62 4269.86 3737.69 4274 3721.52 c
-h
-4290.02 3665 m
-f*
-4363.44 3694.52 m
-4354.8 3680.84 4347.06 3675.2 4335.54 3675.2 c
-4325.64 3675.2 4318.08 3680.02 4312.86 3690.02 c
-4309.26 3697.08 4307.82 3703.42 4307.46 3715 c
-4362.9 3715 l
-4361.46 3726.63 4359.66 3731.82 4355.16 3737.54 c
-4349.76 3744.02 4341.48 3747.8 4332.12 3747.8 c
-4309.8 3747.8 4294.5 3729.8 4294.5 3703.52 c
-4294.5 3678.68 4307.46 3663.2 4328.16 3663.2 c
-4345.44 3663.2 4358.76 3673.82 4366.32 3693.26 c
-h
-4307.82 3720 m
-4309.8 3734.66 4315.92 3740.8 4326.9 3740.8 c
-4337.88 3740.8 4342.2 3735.74 4344.54 3720 c
-h
-4369.92 3665 m
-f*
-4415 3665 m
-f*
-4501.22 3706.58 m
-4501.22 3748.34 l
-4497.08 3748.34 l
-4494.92 3733.94 4491.68 3731 4477.28 3731 c
-4452 3731 l
-4452 3771.2 l
-4452 3776.24 4452.77 3777 4456.94 3777 c
-4481.42 3777 l
-4501.76 3777 4505.72 3774.35 4508.78 3758.42 c
-4513.28 3758.42 l
-4512.74 3784 l
-4417.16 3784 l
-4417.16 3780.74 l
-4430.48 3779.66 4433 3777.32 4433 3764.54 c
-4433 3686.6 l
-4433 3671.66 4431 3669.32 4417.16 3668.42 c
-4417.16 3665 l
-4467.56 3665 l
-4467.56 3668 l
-4453.7 3668.74 4452 3671.32 4452 3684.62 c
-4452 3724 l
-4477.28 3724 l
-4491.86 3724 4494.92 3721.28 4497.08 3706.58 c
-h
-4515.08 3665 m
-f*
-4516.26 3735.2 m
-4518.78 3735.74 4520.4 3735.92 4522.56 3735.92 c
-4527.06 3735.92 4529 3733.04 4529 3725.12 c
-4529 3680.12 l
-4529 3671.12 4527.71 3669.86 4515.9 3667.7 c
-4515.9 3665 l
-4559.1 3665 l
-4559.1 3668 l
-4546.86 3668.53 4544 3671.17 4544 3681.2 c
-4544 3721.7 l
-4544 3727.46 4551.44 3736.46 4556.4 3736.46 c
-4557.48 3736.46 4559.1 3735.56 4561.08 3733.76 c
-4563.96 3731.06 4565.94 3730.16 4568.28 3730.16 c
-4572.6 3730.16 4575.3 3733.22 4575.3 3738.26 c
-4575.3 3744.2 4571.52 3747.8 4565.4 3747.8 c
-4557.91 3747.8 4552.92 3743.84 4544 3730.88 c
-4544 3747.44 l
-4542.9 3747.8 l
-4533.36 3744.02 4526.88 3741.5 4516.26 3738.08 c
-h
-4574.94 3665 m
-f*
-4654.56 3676.88 m
-4651.5 3674.36 4649.34 3673.2 4646.64 3673.2 c
-4642.5 3673.2 4641 3675.78 4641 3683.9 c
-4641 3719 l
-4641 3728.18 4640.16 3733.22 4637.82 3737.36 c
-4634.04 3744.2 4626.3 3747.8 4615.32 3747.8 c
-4606.14 3747.8 4597.5 3745.28 4592.46 3741.14 c
-4587.96 3737.36 4585 3732.14 4585 3727.64 c
-4585 3723.5 4588.46 3719.9 4592.82 3719.9 c
-4597.14 3719.9 4600.92 3723.5 4600.92 3727.46 c
-4600.92 3728.18 4600.74 3729.08 4600.56 3730.34 c
-4600.2 3731.96 4600 3733.4 4600 3734.66 c
-4600 3739.52 4605.77 3743.8 4612.98 3743.8 c
-4621.8 3743.8 4626 3738.47 4626 3728.54 c
-4626 3717.56 l
-4598.76 3706.4 4595.75 3704.96 4588.14 3698.12 c
-4584.18 3694.52 4581.66 3688.4 4581.66 3682.46 c
-4581.66 3671.12 4589.4 3663.2 4600.56 3663.2 c
-4608.48 3663.2 4615.86 3666.98 4626.84 3676.34 c
-4627.74 3666.8 4630.98 3663.2 4638.36 3663.2 c
-4644.48 3663.2 4648.26 3665.36 4654.56 3672.2 c
-h
-4626 3687.14 m
-4626 3681.56 4625.23 3679.94 4621.98 3677.6 c
-4617.66 3675.08 4612.62 3673.2 4608.84 3673.2 c
-4602.54 3673.2 4597.48 3679.51 4597.48 3687.5 c
-4597.48 3688.22 l
-4597.48 3698.84 4604.7 3705.32 4626 3713.24 c
-h
-4654.92 3665 m
-f*
-4658.14 3736.64 m
-4660.48 3737.18 4661.92 3737.36 4663.9 3737.36 c
-4668.58 3737.36 4670 3734.48 4670 3725.84 c
-4670 3680.3 l
-4670 3670.58 4667.52 3667.88 4657.6 3667.7 c
-4657.6 3665 l
-4697.56 3665 l
-4697.56 3668 l
-4688.02 3668.35 4685 3670.27 4685 3677.06 c
-4685 3727.82 l
-4685 3728.18 4686.23 3729.44 4687.66 3730.88 c
-4691.98 3735.2 4700.08 3738.8 4706.74 3738.8 c
-4714.48 3738.8 4719 3732.2 4719 3719.54 c
-4719 3680.48 l
-4719 3670.4 4716.93 3668.42 4706.2 3667.7 c
-4706.2 3665 l
-4746.52 3665 l
-4746.52 3668 l
-4736.26 3668.18 4734 3671.17 4734 3682.1 c
-4734 3727.46 l
-4739.28 3735.2 4744.91 3738.8 4753.18 3738.8 c
-4763.44 3738.8 4767 3733.85 4767 3718.64 c
-4767 3680.66 l
-4767 3670.4 4765.52 3668.96 4754.8 3667.7 c
-4754.8 3665 l
-4794.22 3665 l
-4794.22 3667.7 l
-4789.54 3668.06 l
-4784.14 3668.42 4782 3671.66 4782 3678.68 c
-4782 3715.76 l
-4782 3737 4774.91 3747.8 4760.92 3747.8 c
-4750.48 3747.8 4741.3 3743.12 4731.58 3732.68 c
-4728.34 3742.94 4722.22 3747.8 4712.5 3747.8 c
-4704.31 3747.8 4699.57 3745.46 4684.28 3733.94 c
-4684.28 3747.44 l
-4683.34 3747.8 l
-4674.16 3744.38 4668.04 3742.4 4658.14 3739.7 c
-h
-4795.04 3665 m
-f*
-4868.44 3694.52 m
-4859.8 3680.84 4852.06 3675.2 4840.54 3675.2 c
-4830.64 3675.2 4823.08 3680.02 4817.86 3690.02 c
-4814.26 3697.08 4812.82 3703.42 4812.46 3715 c
-4867.9 3715 l
-4866.46 3726.63 4864.66 3731.82 4860.16 3737.54 c
-4854.76 3744.02 4846.48 3747.8 4837.12 3747.8 c
-4814.8 3747.8 4799.5 3729.8 4799.5 3703.52 c
-4799.5 3678.68 4812.46 3663.2 4833.16 3663.2 c
-4850.44 3663.2 4863.76 3673.82 4871.32 3693.26 c
-h
-4812.82 3720 m
-4814.8 3734.66 4820.92 3740.8 4831.9 3740.8 c
-4842.88 3740.8 4847.2 3735.74 4849.54 3720 c
-h
-4874.92 3665 m
-f*
-2884.26 1356.36 m
-2873.64 1345.2 2867.88 1340.88 2859.06 1337.46 c
-2853.84 1335.3 2847.9 1334.58 2842.86 1334.58 c
-2830.98 1334.58 2819.64 1340.74 2814.42 1349.88 c
-2809.2 1359.42 2807 1372.2 2807 1390.38 c
-2807 1427.64 2818.23 1447.7 2839.8 1447.7 c
-2848.26 1447.7 2856 1444.38 2863.74 1437.36 c
-2871.48 1430.52 2875.62 1424.4 2881.92 1410.72 c
-2886.42 1410.72 l
-2886.42 1453.16 l
-2881.56 1453.16 l
-2878.86 1446.43 2877.06 1444.56 2873.64 1444.56 c
-2871.84 1444.56 2869.5 1445.28 2865.36 1447.08 c
-2854.92 1451.4 2846.1 1453.7 2837.46 1453.7 c
-2801.64 1453.7 2775 1425.84 2775 1388.76 c
-2775 1351.68 2801.21 1325.58 2838.54 1325.58 c
-2859.24 1325.58 2871.48 1331.88 2889.66 1351.86 c
-h
-2895.96 1329 m
-f*
-2959.18 1326.66 m
-2966.78 1329.36 2971.02 1330.08 2982.5 1331.34 c
-2993.66 1332.6 l
-2993.66 1337 l
-2985.74 1337.35 2984 1339.63 2984 1347.18 c
-2984 1412 l
-2947.4 1412 l
-2947.4 1407.66 l
-2956.4 1406.94 2959 1404.78 2959 1397.04 c
-2959 1346.1 l
-2952.88 1340.16 2949.18 1338.48 2943.8 1338.48 c
-2936.42 1338.48 2934 1342 2934 1350.96 c
-2934 1412 l
-2899.88 1412 l
-2899.88 1407.66 l
-2907.26 1406.22 2909 1404.6 2909 1397.04 c
-2909 1351.68 l
-2909 1335.84 2917.89 1326.48 2932.64 1326.48 c
-2942.16 1326.48 2948.56 1329.36 2959.18 1338.36 c
-h
-2997.08 1329 m
-f*
-3035.28 1412 m
-3001.22 1412 l
-3001.22 1407.66 l
-3008.96 1406.58 3011 1404.24 3011 1397.04 c
-3011 1344.12 l
-3011 1336.74 3009.19 1334.76 3001.22 1333.32 c
-3001.22 1329 l
-3049.1 1329 l
-3049.1 1333.32 l
-3038.12 1334.04 3036 1336.38 3036 1347.54 c
-3036 1381.56 l
-3036 1390.92 3041.02 1398.66 3046.94 1398.66 c
-3048.38 1398.66 3050 1397.4 3051.98 1394.52 c
-3055.4 1389.66 3058.1 1388.04 3062.78 1388.04 c
-3069.44 1388.04 3074.12 1393.08 3074.12 1399.92 c
-3074.12 1408.2 3068 1414.16 3059.54 1414.16 c
-3050.55 1414.16 3043.73 1409.47 3035.28 1397.22 c
-h
-3075.92 1329 m
-f*
-3116.28 1412 m
-3082.22 1412 l
-3082.22 1407.66 l
-3089.96 1406.58 3092 1404.24 3092 1397.04 c
-3092 1344.12 l
-3092 1336.74 3090.19 1334.76 3082.22 1333.32 c
-3082.22 1329 l
-3130.1 1329 l
-3130.1 1333.32 l
-3119.12 1334.04 3117 1336.38 3117 1347.54 c
-3117 1381.56 l
-3117 1390.92 3122.02 1398.66 3127.94 1398.66 c
-3129.38 1398.66 3131 1397.4 3132.98 1394.52 c
-3136.4 1389.66 3139.1 1388.04 3143.78 1388.04 c
-3150.44 1388.04 3155.12 1393.08 3155.12 1399.92 c
-3155.12 1408.2 3149 1414.16 3140.54 1414.16 c
-3131.55 1414.16 3124.73 1409.47 3116.28 1397.22 c
-h
-3156.92 1329 m
-f*
-3228.36 1351.5 m
-3220.98 1342.68 3215.58 1339.48 3207.84 1339.48 c
-3201 1339.48 3195.6 1342.53 3192 1348.62 c
-3188.58 1354.36 3187.14 1360.45 3186.42 1373 c
-3231.78 1373 l
-3230.7 1387.99 3228 1396.3 3222.42 1403.34 c
-3216.66 1410.36 3208.2 1414.16 3198.12 1414.16 c
-3175.62 1414.16 3160.5 1396.33 3160.5 1370.04 c
-3160.5 1343.76 3175.26 1326.48 3197.58 1326.48 c
-3212.16 1326.48 3220.98 1332.06 3232.68 1348.98 c
-h
-3185.52 1380 m
-3186.06 1401.42 3189.3 1408.16 3198.12 1408.16 c
-3203.34 1408.16 3206.58 1405.42 3208.02 1400.1 c
-3208.92 1396.68 3209.28 1391.64 3209.64 1382.46 c
-3209.64 1380 l
-h
-3235.92 1329 m
-f*
-3273.82 1412 m
-3239.78 1412 l
-3239.78 1407.66 l
-3247.7 1406.4 3249 1404.6 3249 1397.04 c
-3249 1344.12 l
-3249 1336.56 3247.61 1334.94 3239.78 1333.32 c
-3239.78 1329 l
-3283.16 1329 l
-3283.16 1333.32 l
-3276.5 1334.22 3274 1336.92 3274 1343.58 c
-3274 1391.64 l
-3274 1392.36 3275.4 1394.16 3277.4 1395.96 c
-3281.36 1399.92 3285.68 1402.16 3290 1402.16 c
-3296.12 1402.16 3299 1397.27 3299 1387.14 c
-3299 1343.58 l
-3299 1336.92 3296.71 1334.04 3290.72 1333.32 c
-3290.72 1329 l
-3333.02 1329 l
-3333.02 1333.32 l
-3326 1333.86 3324 1336.02 3324 1343.58 c
-3324 1388.76 l
-3324 1404.24 3314.54 1414.16 3299.9 1414.16 c
-3288.96 1414.16 3280.57 1409.11 3273.82 1398.48 c
-h
-3336.08 1329 m
-f*
-3390.9 1412 m
-3374 1412 l
-3374 1442.4 l
-3369.48 1442.4 l
-3358.5 1426.92 3351.3 1418.82 3339.6 1408.92 c
-3339.6 1404 l
-3349 1404 l
-3349 1345.74 l
-3349 1334.04 3356.73 1326.84 3369.12 1326.84 c
-3381.18 1326.84 3388.38 1332.24 3395.76 1347 c
-3391.26 1348.98 l
-3387.66 1342.14 3384.78 1339.84 3381 1339.84 c
-3375.96 1339.84 3374 1342.83 3374 1349.88 c
-3374 1404 l
-3390.9 1404 l
-h
-3395.94 1329 m
-f*
-3441 1329 m
-f*
-3545.94 1451 m
-3443.88 1451 l
-3443.88 1446 l
-3456.3 1445.29 3460 1442.63 3460 1433.4 c
-3460 1346.28 l
-3460 1336.92 3457.44 1334.94 3443.88 1333.5 c
-3443.88 1329 l
-3508.68 1329 l
-3508.68 1334 l
-3492.12 1334.69 3489 1336.77 3489 1346.28 c
-3489 1388.22 l
-3507.28 1387.86 3513.91 1381.2 3516.42 1360.32 c
-3520.92 1360.32 l
-3520.92 1421.16 l
-3516.42 1421.16 l
-3513.19 1400.64 3506.92 1394.34 3489 1394.34 c
-3489 1436.1 l
-3489 1442.76 3491.32 1445 3500.4 1445 c
-3517.14 1445 3527.58 1441.8 3533.16 1435.2 c
-3537.12 1430.7 3539.1 1425.84 3541.62 1414.5 c
-3545.94 1414.5 l
-h
-3550.98 1329 m
-f*
-3590.28 1412 m
-3556.22 1412 l
-3556.22 1407.66 l
-3563.96 1406.58 3566 1404.24 3566 1397.04 c
-3566 1344.12 l
-3566 1336.74 3564.19 1334.76 3556.22 1333.32 c
-3556.22 1329 l
-3604.1 1329 l
-3604.1 1333.32 l
-3593.12 1334.04 3591 1336.38 3591 1347.54 c
-3591 1381.56 l
-3591 1390.92 3596.02 1398.66 3601.94 1398.66 c
-3603.38 1398.66 3605 1397.4 3606.98 1394.52 c
-3610.4 1389.66 3613.1 1388.04 3617.78 1388.04 c
-3624.44 1388.04 3629.12 1393.08 3629.12 1399.92 c
-3629.12 1408.2 3623 1414.16 3614.54 1414.16 c
-3605.55 1414.16 3598.73 1409.47 3590.28 1397.22 c
-h
-3630.92 1329 m
-f*
-3716.14 1340.52 m
-3714.34 1338.72 l
-3713.8 1338.18 3713.26 1338 3712.36 1338 c
-3709.84 1338 3709 1339.44 3709 1342.5 c
-3709 1389.48 l
-3709 1404.78 3695.16 1414.16 3672.94 1414.16 c
-3652.6 1414.16 3638.92 1404.97 3638.92 1391.46 c
-3638.92 1383.9 3643.24 1379.58 3650.62 1379.58 c
-3657.82 1379.58 3662.86 1383.9 3662.86 1390.02 c
-3662.86 1392.54 3661.96 1394.88 3659.62 1397.76 c
-3658 1399.56 3657.46 1400.64 3657.46 1401.72 c
-3657.46 1405.5 3662.32 1408.16 3668.8 1408.16 c
-3679.42 1408.16 3684 1403.37 3684 1392.54 c
-3684 1379.4 l
-3662.89 1372.92 3654.41 1369.68 3647.56 1365.18 c
-3639.46 1359.78 3636 1353.48 3636 1345.56 c
-3636 1334.58 3644.07 1326.48 3655.3 1326.48 c
-3665.74 1326.48 3674.02 1330.08 3683.92 1339.08 c
-3685.9 1329.9 3689.86 1326.48 3698.68 1326.48 c
-3706.42 1326.48 3712 1329.36 3718.84 1336.74 c
-h
-3684 1347 m
-3679.04 1341.42 3675.37 1339.26 3670.96 1339.26 c
-3665.56 1339.26 3662 1344.12 3662 1351.32 c
-3662 1361.76 3669.57 1369.14 3684 1373.1 c
-h
-3721 1329 m
-f*
-3758.46 1412 m
-3723.73 1412 l
-3723.73 1407.66 l
-3731.65 1406.58 3734 1404.42 3734 1397.04 c
-3734 1344.12 l
-3734 1336.74 3731.95 1334.76 3723.73 1333.32 c
-3723.73 1329 l
-3766.93 1329 l
-3766.93 1333.32 l
-3760.63 1334.22 3759 1336.74 3759 1343.58 c
-3759 1391.64 l
-3759 1392.54 3761.51 1395.78 3763.51 1397.76 c
-3767.29 1400.64 3770.53 1402.16 3773.77 1402.16 c
-3780.79 1402.16 3784 1398 3784 1387.14 c
-3784 1343.58 l
-3784 1336.2 3781.9 1333.86 3774.85 1333.32 c
-3774.85 1329 l
-3816.97 1329 l
-3816.97 1333.32 l
-3810.67 1334.04 3809 1336.74 3809 1343.58 c
-3809 1391.64 l
-3809 1392.54 3811.43 1395.6 3813.37 1397.58 c
-3817.33 1400.64 3820.57 1402.16 3823.81 1402.16 c
-3830.65 1402.16 3833 1397.82 3833 1387.14 c
-3833 1343.58 l
-3833 1336.02 3831.1 1333.86 3824.53 1333.32 c
-3824.53 1329 l
-3867.37 1329 l
-3867.37 1333 l
-3860.35 1333.37 3858 1335.6 3858 1343.58 c
-3858 1388.76 l
-3858 1404.24 3848.6 1414.16 3834.07 1414.16 c
-3823.81 1414.16 3816.97 1410.01 3807.61 1398.48 c
-3802.21 1409.82 3795.91 1414.16 3784.57 1414.16 c
-3773.2 1414.16 3765.21 1409.29 3758.46 1398.48 c
-h
-3870.94 1329 m
-f*
-3943.36 1351.5 m
-3935.98 1342.68 3930.58 1339.48 3922.84 1339.48 c
-3916 1339.48 3910.6 1342.53 3907 1348.62 c
-3903.58 1354.36 3902.14 1360.45 3901.42 1373 c
-3946.78 1373 l
-3945.7 1387.99 3943 1396.3 3937.42 1403.34 c
-3931.66 1410.36 3923.2 1414.16 3913.12 1414.16 c
-3890.62 1414.16 3875.5 1396.33 3875.5 1370.04 c
-3875.5 1343.76 3890.26 1326.48 3912.58 1326.48 c
-3927.16 1326.48 3935.98 1332.06 3947.68 1348.98 c
-h
-3900.52 1380 m
-3901.06 1401.42 3904.3 1408.16 3913.12 1408.16 c
-3918.34 1408.16 3921.58 1405.42 3923.02 1400.1 c
-3923.92 1396.68 3924.28 1391.64 3924.64 1382.46 c
-3924.64 1380 l
-h
-3950.92 1329 m
-f*
-1 i
-2765.75 1294.55 1184.4 15.5999 re
-f
-1 g
-3371.75 1520.15 m
-3538.55 1673.75 l
-3455.75 1673.75 l
-3455.75 1824.95 l
-3290.15 1824.95 l
-3290.15 1673.75 l
-3208.55 1673.75 l
-f*
-0 g
-3371.75 1520.15 m
-3538.55 1673.75 l
-3455.75 1673.75 l
-3455.75 1824.95 l
-3290.15 1824.95 l
-3290.15 1673.75 l
-3208.55 1673.75 l
-3371.75 1520.15 l
-3371.75 1533.35 l
-3233.75 1662.95 l
-3299.75 1662.95 l
-3299.75 1814.15 l
-3446.15 1814.15 l
-3446.15 1662.95 l
-3513.35 1662.95 l
-3371.75 1533.35 l
-3371.75 1520.15 l
-f*
-0.201248 i
-1610.33 1522 m
-1496.22 1522 l
-1496.22 1517 l
-1510.11 1516.2 1514 1513.18 1514 1502.72 c
-1514 1405.32 l
-1514 1394.85 1511.17 1392.64 1496.22 1391.03 c
-1496.22 1386 l
-1568.67 1386 l
-1568.67 1391 l
-1550.15 1391.81 1547 1394.23 1547 1405.32 c
-1547 1452.21 l
-1567.22 1451.81 1574.55 1444.36 1577.32 1421.02 c
-1582.35 1421.02 l
-1582.35 1489.04 l
-1577.32 1489.04 l
-1573.76 1466.1 1566.82 1459.05 1547 1459.05 c
-1547 1505.74 l
-1547 1513.19 1549.52 1515 1559.41 1515 c
-1578.13 1515 1589.8 1511.64 1596.04 1504.74 c
-1600.47 1499.71 1602.68 1494.27 1605.5 1481.59 c
-1610.33 1481.59 l
-h
-1615.96 1386 m
-f*
-1659.19 1479 m
-1620.84 1479 l
-1620.84 1473.95 l
-1629.49 1472.74 1632 1470.12 1632 1462.07 c
-1632 1402.9 l
-1632 1394.65 1629.93 1392.44 1620.84 1390.83 c
-1620.84 1386 l
-1674.37 1386 l
-1674.37 1390.83 l
-1662.09 1391.63 1660 1394.25 1660 1406.73 c
-1660 1444.76 l
-1660 1455.23 1665.49 1463.88 1671.95 1463.88 c
-1673.56 1463.88 1675.37 1462.47 1677.59 1459.25 c
-1681.41 1453.82 1684.43 1452.01 1689.66 1452.01 c
-1697.11 1452.01 1702.34 1457.64 1702.34 1465.29 c
-1702.34 1474.55 1695.5 1481.41 1686.04 1481.41 c
-1676.1 1481.41 1668.54 1476.12 1659.19 1462.27 c
-h
-1704.35 1386 m
-f*
-1799.19 1398.88 m
-1797.18 1396.87 l
-1796.57 1396.26 1795.97 1396.06 1794.96 1396.06 c
-1792.15 1396.06 1791 1397.67 1791 1401.09 c
-1791 1453.62 l
-1791 1470.73 1775.6 1481.42 1750.89 1481.42 c
-1728.15 1481.42 1712.85 1471.06 1712.85 1455.83 c
-1712.85 1447.38 1717.69 1442.55 1725.94 1442.55 c
-1733.99 1442.55 1739.62 1447.38 1739.62 1454.22 c
-1739.62 1457.04 1738.61 1459.66 1736 1462.88 c
-1734.19 1464.89 1733.58 1466.1 1733.58 1467.3 c
-1733.58 1471.53 1739.02 1474.42 1746.26 1474.42 c
-1758.14 1474.42 1763.86 1469.08 1763.86 1457.04 c
-1763.86 1442.35 l
-1739.91 1435.1 1730.29 1431.48 1722.51 1426.45 c
-1713.46 1420.41 1709 1413.37 1709 1404.52 c
-1709 1392.24 1718.27 1383.18 1731.17 1383.18 c
-1742.84 1383.18 1752.1 1387.21 1763.17 1397.27 c
-1765.38 1387.01 1769.81 1383.18 1779.67 1383.18 c
-1788.32 1383.18 1794.56 1386.4 1802.21 1394.65 c
-h
-1763 1406.13 m
-1757.55 1399.89 1753.52 1397.47 1748.68 1397.47 c
-1742.64 1397.47 1738 1402.91 1738 1410.96 c
-1738 1422.63 1746.61 1430.88 1763 1435.31 c
-h
-1804.62 1386 m
-f*
-1845.4 1479 m
-1806.7 1479 l
-1806.7 1473.95 l
-1815.55 1472.74 1818 1470.32 1818 1462.07 c
-1818 1402.9 l
-1818 1394.65 1815.74 1392.44 1806.7 1390.83 c
-1806.7 1386 l
-1855 1386 l
-1855 1390.83 l
-1847.95 1391.84 1846 1394.65 1846 1402.3 c
-1846 1456.03 l
-1846 1457.04 1848.87 1460.66 1851.18 1462.88 c
-1855.4 1466.1 1859.02 1468.42 1862.65 1468.42 c
-1870.5 1468.42 1874 1463.59 1874 1451 c
-1874 1402.3 l
-1874 1394.05 1871.68 1391.43 1863.85 1390.83 c
-1863.85 1386 l
-1910.95 1386 l
-1910.95 1390.83 l
-1903.9 1391.64 1902 1394.65 1902 1402.3 c
-1902 1456.03 l
-1902 1457.04 1904.73 1460.46 1906.92 1462.68 c
-1911.35 1466.1 1914.97 1468.42 1918.59 1468.42 c
-1926.24 1468.42 1929 1463.38 1929 1451 c
-1929 1402.3 l
-1929 1393.85 1926.85 1391.43 1919.4 1390.83 c
-1919.4 1386 l
-1967.3 1386 l
-1967.3 1391 l
-1959.45 1391.4 1957 1393.78 1957 1402.3 c
-1957 1452.81 l
-1957 1470.12 1946.43 1481.42 1930.07 1481.42 c
-1918.59 1481.42 1910.95 1476.73 1900.48 1463.68 c
-1894.44 1476.36 1887.4 1481.42 1874.72 1481.42 c
-1861.95 1481.42 1852.98 1475.91 1845.4 1463.68 c
-h
-1970.64 1386 m
-f*
-2050.9 1411.16 m
-2042.65 1401.29 2036.61 1397.18 2027.96 1397.18 c
-2020.31 1397.18 2014.27 1400.77 2010.25 1407.94 c
-2006.43 1414.54 2004.82 1421.56 2004.01 1436 c
-2054.73 1436 l
-2053.52 1452.36 2050.5 1461.43 2044.26 1469.12 c
-2037.82 1476.96 2028.36 1481.42 2017.09 1481.42 c
-1991.94 1481.42 1975.03 1461.4 1975.03 1431.88 c
-1975.03 1402.5 1991.53 1383.18 2016.49 1383.18 c
-2032.79 1383.18 2042.65 1389.42 2055.73 1408.34 c
-h
-2003 1443 m
-2003.61 1466.96 2007.23 1474.42 2017.09 1474.42 c
-2022.93 1474.42 2026.55 1471.38 2028.16 1465.49 c
-2029.17 1461.67 2029.57 1456.03 2029.97 1445.77 c
-2029.97 1443 l
-h
-2059.35 1386 m
-f*
-2156.16 1481.59 m
-2156.16 1525.22 l
-2150.37 1525.22 l
-2148.96 1519.82 2147.55 1518.42 2143.93 1518.42 c
-2142.12 1518.42 2139.7 1519.03 2135.47 1520.43 c
-2126.22 1523.86 2119.78 1525.02 2111.93 1525.02 c
-2084.56 1525.02 2068 1509.54 2068 1484.01 c
-2068 1478.98 2068.75 1474.75 2070.07 1470.73 c
-2074.29 1460.06 2085.16 1450.6 2102.27 1442.35 c
-2115.75 1435.91 l
-2133.46 1427.46 2138 1422.22 2138 1411.56 c
-2138 1397.67 2128.25 1389.18 2112.94 1389.18 c
-2101.26 1389.18 2091.6 1393.89 2083.96 1403.31 c
-2078.12 1410.75 2075.3 1417.6 2071.88 1431.88 c
-2066.04 1431.88 l
-2066.04 1382.18 l
-2071.88 1382.18 l
-2073.09 1387.41 2074.7 1389.02 2077.92 1389.02 c
-2079.53 1389.02 2081.74 1388.42 2086.17 1387.01 c
-2096.03 1383.59 2103.48 1382.18 2112.33 1382.18 c
-2142.12 1382.18 2162 1399.28 2162 1424.64 c
-2162 1439.73 2153.04 1454.83 2140.1 1461.27 c
-2110.52 1475.96 l
-2094.22 1484.01 2090 1488.84 2090 1498.7 c
-2090 1511.18 2098.37 1518.02 2111.93 1518.02 c
-2120.99 1518.02 2129.44 1514.47 2136.68 1507.55 c
-2143.53 1500.51 2146.75 1494.67 2150.77 1481.59 c
-h
-2170.89 1386 m
-f*
-2249.9 1411.16 m
-2241.65 1401.29 2235.61 1397.18 2226.96 1397.18 c
-2219.31 1397.18 2213.27 1400.77 2209.25 1407.94 c
-2205.43 1414.54 2203.82 1421.56 2203.01 1436 c
-2253.73 1436 l
-2252.52 1452.36 2249.5 1461.43 2243.26 1469.12 c
-2236.82 1476.96 2227.36 1481.42 2216.09 1481.42 c
-2190.94 1481.42 2174.03 1461.4 2174.03 1431.88 c
-2174.03 1402.5 2190.53 1383.18 2215.49 1383.18 c
-2231.79 1383.18 2241.65 1389.42 2254.73 1408.34 c
-h
-2202 1443 m
-2202.61 1466.96 2206.23 1474.42 2216.09 1474.42 c
-2221.93 1474.42 2225.55 1471.38 2227.16 1465.49 c
-2228.17 1461.67 2228.57 1456.03 2228.97 1445.77 c
-2228.97 1443 l
-h
-2258.35 1386 m
-f*
-2319.38 1479 m
-2300 1479 l
-2300 1512.79 l
-2295.43 1512.79 l
-2283.16 1495.48 2275.11 1486.42 2262.02 1475.35 c
-2262.02 1470 l
-2272 1470 l
-2272 1404.72 l
-2272 1391.64 2280.84 1383.59 2295.03 1383.59 c
-2308.51 1383.59 2316.56 1389.62 2324.81 1406.12 c
-2319.78 1408.34 l
-2315.76 1400.69 2312.54 1397.59 2308.31 1397.59 c
-2302.68 1397.59 2300 1401.09 2300 1409.34 c
-2300 1470 l
-2319.38 1470 l
-h
-2325.02 1386 m
-f*
-2375.31 1386 m
-f*
-2378.22 1522 m
-2378.22 1517 l
-2392.11 1516.2 2396 1512.98 2396 1502.72 c
-2396 1405.32 l
-2396 1395.06 2392.97 1392.64 2378.22 1391.03 c
-2378.22 1386 l
-2443.02 1386 l
-2477.03 1386 2500 1401.09 2500 1423.83 c
-2500 1433.09 2496.03 1441.14 2488.71 1447.38 c
-2481.66 1453.62 2474.82 1456.44 2460.73 1459.46 c
-2484.08 1466.3 2493 1474.55 2493 1489.84 c
-2493 1510.57 2474.39 1522 2440.41 1522 c
-h
-2428 1455.03 m
-2434.17 1455.03 l
-2454.9 1455.03 2465 1444.36 2465 1422.02 c
-2465 1402.5 2456.73 1393 2440.41 1393 c
-2431.55 1393 2428 1396.26 2428 1404.72 c
-h
-2428 1506.15 m
-2428 1513.39 2430.85 1516 2439 1516 c
-2453.08 1516 2460 1507.35 2460 1488.44 c
-2460 1467.3 2453.23 1461.67 2428 1461.07 c
-h
-2509.23 1386 m
-f*
-1 i
-0.564706 g
-2228.15 4743.35 m
-2030.15 4823.75 l
-2170.55 4948.55 l
-1944.95 4966.55 l
-2007.35 5121.35 l
-1790.15 5075.75 l
-1763.75 5236.55 l
-1586.15 5135.75 l
-1475.75 5276.15 l
-1364.15 5135.75 l
-1186.55 5236.55 l
-1160.15 5075.75 l
-940.55 5121.35 l
-1005.35 4966.55 l
-778.55 4948.55 l
-920.15 4823.75 l
-720.95 4743.35 l
-920.15 4666.55 l
-778.55 4540.55 l
-1005.35 4523.75 l
-940.55 4368.95 l
-1160.15 4413.35 l
-1186.55 4253.75 l
-1364.15 4353.35 l
-1475.75 4212.95 l
-1586.15 4353.35 l
-1763.75 4253.75 l
-1790.15 4413.35 l
-2007.35 4368.95 l
-1944.95 4523.75 l
-2170.55 4540.55 l
-2030.15 4666.55 l
-f*
-1 g
-2168.15 4803.35 m
-1970.15 4883.75 l
-2110.55 5008.55 l
-1884.95 5026.55 l
-1947.35 5181.35 l
-1730.15 5135.75 l
-1703.75 5296.55 l
-1526.15 5195.75 l
-1415.75 5336.15 l
-1304.15 5195.75 l
-1126.55 5296.55 l
-1100.15 5135.75 l
-880.55 5181.35 l
-945.35 5026.55 l
-718.55 5008.55 l
-860.15 4883.75 l
-660.95 4803.35 l
-860.15 4726.55 l
-718.55 4600.55 l
-945.35 4583.75 l
-880.55 4428.95 l
-1100.15 4473.35 l
-1126.55 4313.75 l
-1304.15 4413.35 l
-1415.75 4272.95 l
-1526.15 4413.35 l
-1703.75 4313.75 l
-1730.15 4473.35 l
-1947.35 4428.95 l
-1884.95 4583.75 l
-2110.55 4600.55 l
-1970.15 4726.55 l
-f*
-0 g
-2168.15 4803.35 m
-1970.15 4883.75 l
-2110.55 5008.55 l
-1884.95 5026.55 l
-1947.35 5181.35 l
-1730.15 5135.75 l
-1703.75 5296.55 l
-1526.15 5195.75 l
-1415.75 5336.15 l
-1304.15 5195.75 l
-1126.55 5296.55 l
-1100.15 5135.75 l
-880.55 5181.35 l
-945.35 5026.55 l
-718.55 5008.55 l
-860.15 4883.75 l
-660.95 4803.35 l
-860.15 4726.55 l
-718.55 4600.55 l
-945.35 4583.75 l
-880.55 4428.95 l
-1100.15 4473.35 l
-1126.55 4313.75 l
-1304.15 4413.35 l
-1415.75 4272.95 l
-1526.15 4413.35 l
-1703.75 4313.75 l
-1730.15 4473.35 l
-1947.35 4428.95 l
-1884.95 4583.75 l
-2110.55 4600.55 l
-1970.15 4726.55 l
-2168.15 4803.35 l
-2060.15 4804.55 l
-1894.55 4739.75 l
-2014.55 4632.95 l
-1827.35 4618.55 l
-1882.55 4481.75 l
-1697.75 4521.35 l
-1673.75 4376.15 l
-1516.55 4464.95 l
-1415.75 4337.75 l
-1313.75 4464.95 l
-1156.55 4376.15 l
-1132.55 4521.35 l
-946.55 4481.75 l
-1001.75 4618.55 l
-814.55 4632.95 l
-934.55 4739.75 l
-770.15 4804.55 l
-934.55 4870.55 l
-814.55 4976.15 l
-1001.75 4990.55 l
-946.55 5127.35 l
-1132.55 5088.95 l
-1156.55 5232.95 l
-1313.75 5144.15 l
-1415.75 5272.55 l
-1516.55 5144.15 l
-1673.75 5232.95 l
-1697.75 5088.95 l
-1882.55 5127.35 l
-1827.35 4990.55 l
-2014.55 4976.15 l
-1894.55 4870.55 l
-2060.15 4804.55 l
-2168.15 4803.35 l
-f*
-0.201248 i
-1328.58 5044 m
-1289.34 5044 l
-1289.34 5038.6 l
-1300.41 5037.6 1302.22 5036.39 1306.04 5027.54 c
-1281.89 4944.82 l
-1274.04 4918.46 1272.64 4916.24 1261.57 4914.03 c
-1261.57 4909 l
-1303.43 4909 l
-1303.43 4914.03 l
-1291.55 4915.04 1287.33 4918.06 1287.33 4925.91 c
-1287.33 4929.73 1288.53 4936.37 1290.95 4944.82 c
-1310.87 5016.47 l
-1362.59 4905.98 l
-1368.23 4905.98 l
-1397.01 5007.81 l
-1404.86 5034.38 1405.86 5035.99 1417.53 5038.6 c
-1417.53 5044 l
-1375.47 5044 l
-1375.47 5038.6 l
-1387.35 5037.6 1391.57 5034.38 1391.57 5026.73 c
-1391.57 5022.91 1390.16 5016.06 1387.95 5007.81 c
-1371.85 4950.05 l
-h
-1412.3 4909 m
-f*
-1475.8 4937.58 m
-1466.54 4923.69 1460.7 4919.38 1452.05 4919.38 c
-1443.6 4919.38 1439 4924.98 1439 4935.77 c
-1439 4938.99 1439.46 4941.6 1440.38 4945.63 c
-1461.31 4949.65 1471.17 4954.08 1481.23 4963.34 c
-1488.27 4969.78 1492 4977.22 1492 4984.47 c
-1492 4994.73 1483.19 5001.62 1470.97 5001.62 c
-1441.79 5001.62 1413 4968.99 1413 4935.97 c
-1413 4918.86 1425.88 4906.38 1443.4 4906.38 c
-1458.89 4906.38 1469.56 4914.23 1481.63 4934.16 c
-h
-1441.79 4952.07 m
-1449.03 4980.04 1458.29 4994.62 1467.95 4994.62 c
-1471.77 4994.62 1473 4992.64 1473 4988.49 c
-1473 4979.64 1469.78 4970.98 1463.72 4964.34 c
-1458.29 4958.51 1453.26 4955.69 1441.79 4952.07 c
-h
-1501.35 4909 m
-f*
-1504.22 4990.91 m
-1509.25 4990.91 1510.86 4990.71 1512.47 4989.3 c
-1516.7 4986.08 1519.52 4967.16 1520.12 4939.19 c
-1520.52 4923.49 l
-1520.52 4922.48 l
-1520.52 4922.28 1520.52 4919.26 1520.32 4915.44 c
-1520.12 4906.38 l
-1525.55 4906.38 l
-1537.02 4923.69 l
-1545.28 4937.58 1552.92 4951.06 1559.77 4963.74 c
-1564.39 4906.38 l
-1569.83 4906.38 l
-1607.06 4945.83 1624 4972.59 1624 4989.5 c
-1624 4996.14 1618.63 5001.62 1612.29 5001.62 c
-1606.25 5001.62 1601.02 4996.15 1601.02 4989.9 c
-1601.02 4986.88 1602.23 4984.27 1605.25 4980.04 c
-1608.06 4976.22 1609 4973.6 1609 4971.59 c
-1609 4965.55 1602.83 4955.89 1585.32 4935.16 c
-1578.88 5001.62 l
-1573.45 5001.62 l
-1556.55 4972.63 1553.33 4966.83 1542.06 4946.63 c
-1541.45 4971.59 1540.04 4984.67 1535.41 5001.98 c
-1527.16 5000.17 1520.92 4999.16 1504.22 4996.34 c
-h
-1635.23 4909 m
-f*
-1215.46 4781.9 m
-1190.3 4688.52 l
-1187.08 4677.65 1183.26 4674.84 1170.18 4674.03 c
-1170.18 4669 l
-1232.97 4669 l
-1232.97 4674 l
-1221.3 4674.61 1218.48 4676.22 1218.48 4682.69 c
-1218.48 4684.9 1218.88 4687.11 1220.09 4691.74 c
-1220.29 4692.75 l
-1220.49 4693.75 l
-1245.24 4784.11 l
-1248.26 4794.58 1251.28 4797.4 1261.55 4798.6 c
-1261.55 4804 l
-1218.88 4804 l
-1156.49 4707.04 l
-1145.63 4804 l
-1101.15 4804 l
-1101.15 4799 l
-1113.83 4798.36 1115.64 4797.51 1115.64 4791.56 c
-1115.64 4788.74 1114.84 4785.12 1113.43 4779.89 c
-1091.49 4704.82 l
-1083.44 4678.66 1082.03 4676.45 1071.16 4674.03 c
-1071.16 4669 l
-1112.82 4669 l
-1112.82 4674.03 l
-1099.94 4675.64 1096.72 4678.06 1096.72 4686.31 c
-1096.72 4689.73 1097.73 4694.76 1100.55 4704.82 c
-1120.87 4779.08 l
-1134.36 4666.59 l
-1139.99 4666.59 l
-h
-1255.91 4669 m
-f*
-1342.34 4694.56 m
-1334.09 4683.49 1331.07 4680.18 1327.85 4680.18 c
-1326.24 4680.18 1326 4681.51 1326 4683.49 c
-1326 4688.52 1327.66 4696.77 1332.28 4713.27 c
-1346.57 4760.77 l
-1324.23 4759.36 l
-1320.61 4747.49 l
-1318.8 4757.75 1314.37 4761.62 1305.71 4761.62 c
-1280.96 4761.62 1251 4723.18 1251 4691.94 c
-1251 4676.65 1259.56 4666.38 1272.51 4666.38 c
-1284.78 4666.38 1294.04 4673.63 1305.51 4692.95 c
-1303.1 4684.7 1303 4682.28 1303 4679.47 c
-1303 4672.02 1308.9 4666.18 1316.18 4666.18 c
-1325.64 4666.18 1334.89 4674.03 1346.57 4691.54 c
-h
-1308.53 4753.52 m
-1312.96 4753.12 1316.28 4749.5 1316.28 4744.07 c
-1316.28 4731.99 1309.5 4709.65 1301.49 4695.77 c
-1296.05 4685.91 1290.02 4680.38 1284.58 4680.38 c
-1279.35 4680.38 1276 4685.14 1276 4691.54 c
-1276 4702 1282.43 4722.13 1290.42 4737.02 c
-1296.46 4747.69 1303.1 4753.93 1308.53 4753.52 c
-h
-1355.62 4669 m
-f*
-1398.47 4761.98 m
-1377.94 4758.76 1370.09 4757.55 1359.63 4756.34 c
-1359.63 4751 l
-1368.68 4750.59 1370.5 4749.77 1370.5 4745.88 c
-1370.5 4743.86 1368.89 4736.62 1366.07 4726.15 c
-1345.94 4648.07 l
-1342.12 4634.79 1340.51 4632.8 1330.85 4633 c
-1330.85 4627 l
-1380.96 4627 l
-1380.96 4633 l
-1370.9 4633.21 1367.88 4634.65 1367.88 4639.62 c
-1367.88 4642.44 1369.29 4648.47 1373.11 4662.56 c
-1374.52 4667.39 1374.52 4667.79 1375.33 4670.81 c
-1382.37 4667.19 1384.78 4666.38 1389.01 4666.38 c
-1416.38 4666.38 1444.76 4702.81 1444.76 4737.63 c
-1444.76 4752.52 1436.3 4761.62 1423.02 4761.62 c
-1411.55 4761.62 1402.7 4755.28 1390.82 4738.83 c
-h
-1411.75 4747.69 m
-1416.98 4747.29 1420 4742.66 1419.6 4736.22 c
-1418.8 4722.93 1412.36 4703.01 1405.11 4689.93 c
-1398.87 4679.06 1392.43 4673.38 1385.59 4673.38 c
-1381.16 4673.38 1377.74 4676.62 1377.74 4680.67 c
-1377.74 4684.09 1379.95 4692.34 1385.39 4710.66 c
-1389.82 4725.35 1391.63 4730.38 1394.65 4735.01 c
-1399.68 4742.86 1406.52 4748.09 1411.75 4747.69 c
-h
-1455.62 4669 m
-f*
-1498.47 4761.98 m
-1477.94 4758.76 1470.09 4757.55 1459.63 4756.34 c
-1459.63 4751 l
-1468.68 4750.59 1470.5 4749.77 1470.5 4745.88 c
-1470.5 4743.86 1468.89 4736.62 1466.07 4726.15 c
-1445.94 4648.07 l
-1442.12 4634.79 1440.51 4632.8 1430.85 4633 c
-1430.85 4627 l
-1480.96 4627 l
-1480.96 4633 l
-1470.9 4633.21 1467.88 4634.65 1467.88 4639.62 c
-1467.88 4642.44 1469.29 4648.47 1473.11 4662.56 c
-1474.52 4667.39 1474.52 4667.79 1475.33 4670.81 c
-1482.37 4667.19 1484.78 4666.38 1489.01 4666.38 c
-1516.38 4666.38 1544.76 4702.81 1544.76 4737.63 c
-1544.76 4752.52 1536.3 4761.62 1523.02 4761.62 c
-1511.55 4761.62 1502.7 4755.28 1490.82 4738.83 c
-h
-1511.75 4747.69 m
-1516.98 4747.29 1520 4742.66 1519.6 4736.22 c
-1518.8 4722.93 1512.36 4703.01 1505.11 4689.93 c
-1498.87 4679.06 1492.43 4673.38 1485.59 4673.38 c
-1481.16 4673.38 1477.74 4676.62 1477.74 4680.67 c
-1477.74 4684.09 1479.95 4692.34 1485.39 4710.66 c
-1489.82 4725.35 1491.63 4730.38 1494.65 4735.01 c
-1499.68 4742.86 1506.52 4748.09 1511.75 4747.69 c
-h
-1555.62 4669 m
-f*
-1598.47 4697.38 m
-1595.65 4693.35 l
-1590.42 4685.5 1585.79 4681.19 1582.77 4681.19 c
-1581.16 4681.19 1580 4682.64 1580 4684.29 c
-1580 4686.11 1580.87 4691.34 1581.56 4694.76 c
-1599.88 4761.98 l
-1589.17 4759.56 1575.29 4757.55 1559.82 4756.34 c
-1559.82 4751 l
-1561.84 4751 l
-1567.88 4751 1571.7 4748.96 1571.7 4745.07 c
-1571.7 4743.46 1570.84 4740.44 1569.69 4737.02 c
-1558.02 4693.75 l
-1556.41 4687.92 1556 4682.69 1556 4679.87 c
-1556 4672.22 1561.39 4667.19 1569.29 4667.19 c
-1581.36 4667.19 1588.81 4673.23 1602.9 4694.56 c
-h
-1593.84 4807.02 m
-1587 4807.02 1581 4800.61 1581 4793.57 c
-1581 4785.72 1586.53 4780.02 1594.04 4780.02 c
-1601.69 4780.02 1608 4785.71 1608 4792.97 c
-1608 4800.42 1601.64 4807.02 1593.84 4807.02 c
-h
-1610.95 4669 m
-f*
-1705.79 4696.17 m
-1697.74 4683.69 1695.12 4681.19 1691.7 4681.19 c
-1690.09 4681.19 1689 4682.47 1689 4684.29 c
-1689 4686.31 1690.18 4690.53 1693.91 4701.8 c
-1701.16 4723.74 l
-1704.38 4733.2 1706 4742.05 1706 4746.88 c
-1706 4756.74 1700.91 4761.62 1691.7 4761.62 c
-1684.25 4761.62 1677.01 4758.73 1671.58 4753.73 c
-1664.13 4746.68 1660.31 4741.85 1646.82 4721.93 c
-1659.7 4761.78 l
-1646.82 4758.96 1630.72 4756.38 1619.45 4755.98 c
-1619.45 4751.04 l
-1627.9 4750.83 1630.32 4749.8 1630.32 4745.88 c
-1630.32 4743.46 1627.5 4732.8 1621.06 4710.05 c
-1616.43 4693.75 1615.02 4688.52 1609.79 4669 c
-1634.14 4669 l
-1643.6 4703.82 1650.85 4721.32 1663.32 4737.63 c
-1667.35 4743.06 1673.59 4747.62 1677.21 4747.62 c
-1679.83 4747.62 1682 4745.54 1682 4743.26 c
-1682 4742.66 1681.69 4741.05 1681.24 4739.03 c
-1670.17 4705.63 l
-1666.95 4695.97 1665 4684.5 1665 4679.26 c
-1665 4671.62 1669.86 4667.19 1678.22 4667.19 c
-1690.29 4667.19 1698.54 4674.03 1710.22 4693.55 c
-h
-1722.89 4669 m
-f*
-1818.2 4755 m
-1795.86 4755 l
-1789.02 4760.07 1782.98 4761.62 1773.72 4761.62 c
-1748.97 4761.62 1729 4745.48 1729 4725.35 c
-1729 4715.09 1734.25 4707.84 1745.14 4703.21 c
-1728.64 4693.96 1726 4691.14 1726 4683.69 c
-1726 4677.25 1729.57 4673.43 1738.3 4670.41 c
-1725.82 4667.39 1721.8 4665.78 1716.97 4661.96 c
-1713.75 4659.14 1711 4654.31 1711 4649.48 c
-1711 4636.4 1725.9 4628 1749.37 4628 c
-1777.75 4628 1798 4640.54 1798 4658.33 c
-1798 4670.61 1789.81 4677.25 1767.48 4683.49 c
-1756.82 4686.51 l
-1750.38 4688.32 1747 4691.14 1747 4694.16 c
-1747 4697.38 1749.78 4700.61 1752.19 4700.61 c
-1753.19 4700.61 1754.6 4700.61 1756.21 4700.6 c
-1758.43 4699.99 1760.04 4699 1762.45 4699 c
-1771.31 4699 1780.36 4701.69 1788.01 4706.63 c
-1799.68 4713.27 1806 4723.54 1806 4735.61 c
-1806 4738.81 1805.57 4740.8 1804.71 4744 c
-1818.2 4744 l
-h
-1745.14 4667.79 m
-1747.56 4667.59 1762.85 4662.36 1767.28 4660.35 c
-1772.92 4657.53 1776 4654.11 1776 4648.88 c
-1776 4640.02 1766.97 4635 1751.38 4635 c
-1738.3 4635 1729 4641.44 1729 4650.69 c
-1729 4654.51 1730.83 4657.93 1734.88 4661.76 c
-1737.5 4664.37 1743.53 4667.99 1745.14 4667.79 c
-h
-1773.32 4754.62 m
-1778.55 4754.62 1782 4750.24 1782 4743.86 c
-1782 4737.02 1779.74 4727.36 1776.54 4719.92 c
-1772.31 4710.66 1767.08 4706 1760.84 4706 c
-1755.41 4706 1752 4710.24 1752 4717.9 c
-1752 4725.95 1755.6 4738.23 1760.04 4745.88 c
-1763.86 4752.52 1768.09 4754.62 1773.32 4754.62 c
-h
-1822.62 4669 m
-f*
-1 i
-32 w
-1580.15 6552.95 m
-1512.95 6454.55 1457.75 6062.15 1438.55 5537.75 c
-S
-1361.75 5567.75 m
-1438.55 5532.95 l
-1517.75 5561.75 l
-1432.55 5316.95 l
-f*
-1110.95 4252.55 m
-1026.95 4064.15 982.55 3862.55 982.55 3657.35 c
-982.55 2787.35 1758.95 2079.35 2723.75 2069.75 c
-S
-2663.75 1992.95 m
-2693.75 2070.95 l
-2661.35 2148.95 l
-2909.75 2075.75 l
-f*
-0.201248 i
-4161.33 5063 m
-4047.22 5063 l
-4047.22 5058 l
-4061.11 5057.2 4065 5054.18 4065 5043.72 c
-4065 4946.32 l
-4065 4935.85 4062.17 4933.64 4047.22 4932.03 c
-4047.22 4927 l
-4119.67 4927 l
-4119.67 4932 l
-4101.15 4932.81 4098 4935.23 4098 4946.32 c
-4098 4993.21 l
-4118.22 4992.81 4125.55 4985.36 4128.32 4962.02 c
-4133.35 4962.02 l
-4133.35 5030.04 l
-4128.32 5030.04 l
-4124.76 5007.1 4117.82 5000.05 4098 5000.05 c
-4098 5046.74 l
-4098 5054.19 4100.52 5056 4110.41 5056 c
-4129.13 5056 4140.8 5052.64 4147.04 5045.74 c
-4151.47 5040.71 4153.68 5035.27 4156.5 5022.59 c
-4161.33 5022.59 l
-h
-4166.96 4927 m
-f*
-4210.19 5020 m
-4171.84 5020 l
-4171.84 5014.95 l
-4180.49 5013.74 4183 5011.12 4183 5003.07 c
-4183 4943.9 l
-4183 4935.65 4180.93 4933.44 4171.84 4931.83 c
-4171.84 4927 l
-4225.37 4927 l
-4225.37 4931.83 l
-4213.09 4932.63 4211 4935.25 4211 4947.73 c
-4211 4985.76 l
-4211 4996.23 4216.49 5004.88 4222.95 5004.88 c
-4224.56 5004.88 4226.37 5003.47 4228.59 5000.25 c
-4232.41 4994.82 4235.43 4993.01 4240.66 4993.01 c
-4248.11 4993.01 4253.34 4998.64 4253.34 5006.29 c
-4253.34 5015.55 4246.5 5022.41 4237.04 5022.41 c
-4227.1 5022.41 4219.54 5017.12 4210.19 5003.27 c
-h
-4255.35 4927 m
-f*
-4350.19 4939.88 m
-4348.18 4937.87 l
-4347.57 4937.26 4346.97 4937.06 4345.96 4937.06 c
-4343.15 4937.06 4342 4938.67 4342 4942.09 c
-4342 4994.62 l
-4342 5011.73 4326.6 5022.42 4301.89 5022.42 c
-4279.15 5022.42 4263.85 5012.06 4263.85 4996.83 c
-4263.85 4988.38 4268.69 4983.55 4276.94 4983.55 c
-4284.99 4983.55 4290.62 4988.38 4290.62 4995.22 c
-4290.62 4998.04 4289.61 5000.66 4287 5003.88 c
-4285.19 5005.89 4284.58 5007.1 4284.58 5008.3 c
-4284.58 5012.53 4290.02 5015.42 4297.26 5015.42 c
-4309.14 5015.42 4314.86 5010.08 4314.86 4998.04 c
-4314.86 4983.35 l
-4290.91 4976.1 4281.29 4972.48 4273.51 4967.45 c
-4264.46 4961.41 4260 4954.37 4260 4945.52 c
-4260 4933.24 4269.27 4924.18 4282.17 4924.18 c
-4293.84 4924.18 4303.1 4928.21 4314.17 4938.27 c
-4316.38 4928.01 4320.81 4924.18 4330.67 4924.18 c
-4339.32 4924.18 4345.56 4927.4 4353.21 4935.65 c
-h
-4314 4947.13 m
-4308.55 4940.89 4304.52 4938.47 4299.68 4938.47 c
-4293.64 4938.47 4289 4943.91 4289 4951.96 c
-4289 4963.63 4297.61 4971.88 4314 4976.31 c
-h
-4355.62 4927 m
-f*
-4397.4 5020 m
-4358.7 5020 l
-4358.7 5014.95 l
-4367.55 5013.74 4370 5011.32 4370 5003.07 c
-4370 4943.9 l
-4370 4935.65 4367.74 4933.44 4358.7 4931.83 c
-4358.7 4927 l
-4407 4927 l
-4407 4931.83 l
-4399.95 4932.84 4398 4935.65 4398 4943.3 c
-4398 4997.03 l
-4398 4998.04 4400.87 5001.66 4403.18 5003.88 c
-4407.4 5007.1 4411.02 5009.42 4414.65 5009.42 c
-4422.5 5009.42 4426 5004.59 4426 4992 c
-4426 4943.3 l
-4426 4935.05 4423.68 4932.43 4415.85 4931.83 c
-4415.85 4927 l
-4462.95 4927 l
-4462.95 4931.83 l
-4455.9 4932.64 4454 4935.65 4454 4943.3 c
-4454 4997.03 l
-4454 4998.04 4456.73 5001.46 4458.92 5003.68 c
-4463.35 5007.1 4466.97 5009.42 4470.59 5009.42 c
-4478.24 5009.42 4481 5004.38 4481 4992 c
-4481 4943.3 l
-4481 4934.85 4478.85 4932.43 4471.4 4931.83 c
-4471.4 4927 l
-4519.3 4927 l
-4519.3 4932 l
-4511.45 4932.4 4509 4934.78 4509 4943.3 c
-4509 4993.81 l
-4509 5011.12 4498.43 5022.42 4482.07 5022.42 c
-4470.59 5022.42 4462.95 5017.73 4452.48 5004.68 c
-4446.44 5017.36 4439.4 5022.42 4426.72 5022.42 c
-4413.95 5022.42 4404.98 5016.91 4397.4 5004.68 c
-h
-4522.64 4927 m
-f*
-4601.9 4952.16 m
-4593.65 4942.29 4587.61 4938.18 4578.96 4938.18 c
-4571.31 4938.18 4565.27 4941.77 4561.25 4948.94 c
-4557.43 4955.54 4555.82 4962.56 4555.01 4977 c
-4605.73 4977 l
-4604.52 4993.36 4601.5 5002.43 4595.26 5010.12 c
-4588.82 5017.96 4579.36 5022.42 4568.09 5022.42 c
-4542.94 5022.42 4526.03 5002.4 4526.03 4972.88 c
-4526.03 4943.5 4542.53 4924.18 4567.49 4924.18 c
-4583.79 4924.18 4593.65 4930.42 4606.73 4949.34 c
-h
-4554 4984 m
-4554.61 5007.96 4558.23 5015.42 4568.09 5015.42 c
-4573.93 5015.42 4577.55 5012.38 4579.16 5006.49 c
-4580.17 5002.67 4580.57 4997.03 4580.97 4986.77 c
-4580.97 4984 l
-h
-4610.35 4927 m
-f*
-4707.16 5022.59 m
-4707.16 5066.22 l
-4701.37 5066.22 l
-4699.96 5060.82 4698.55 5059.42 4694.93 5059.42 c
-4693.12 5059.42 4690.7 5060.03 4686.47 5061.43 c
-4677.22 5064.86 4670.78 5066.02 4662.93 5066.02 c
-4635.56 5066.02 4619 5050.54 4619 5025.01 c
-4619 5019.98 4619.75 5015.75 4621.07 5011.73 c
-4625.29 5001.06 4636.16 4991.6 4653.27 4983.35 c
-4666.75 4976.91 l
-4684.46 4968.46 4689 4963.22 4689 4952.56 c
-4689 4938.67 4679.25 4930.18 4663.94 4930.18 c
-4652.26 4930.18 4642.6 4934.89 4634.96 4944.31 c
-4629.12 4951.75 4626.3 4958.6 4622.88 4972.88 c
-4617.04 4972.88 l
-4617.04 4923.18 l
-4622.88 4923.18 l
-4624.09 4928.41 4625.7 4930.02 4628.92 4930.02 c
-4630.53 4930.02 4632.74 4929.42 4637.17 4928.01 c
-4647.03 4924.59 4654.48 4923.18 4663.33 4923.18 c
-4693.12 4923.18 4713 4940.28 4713 4965.64 c
-4713 4980.73 4704.04 4995.83 4691.1 5002.27 c
-4661.52 5016.96 l
-4645.22 5025.01 4641 5029.84 4641 5039.7 c
-4641 5052.18 4649.37 5059.02 4662.93 5059.02 c
-4671.99 5059.02 4680.44 5055.47 4687.68 5048.55 c
-4694.53 5041.51 4697.75 5035.67 4701.77 5022.59 c
-h
-4721.89 4927 m
-f*
-4801.9 4952.16 m
-4793.65 4942.29 4787.61 4938.18 4778.96 4938.18 c
-4771.31 4938.18 4765.27 4941.77 4761.25 4948.94 c
-4757.43 4955.54 4755.82 4962.56 4755.01 4977 c
-4805.73 4977 l
-4804.52 4993.36 4801.5 5002.43 4795.26 5010.12 c
-4788.82 5017.96 4779.36 5022.42 4768.09 5022.42 c
-4742.94 5022.42 4726.03 5002.4 4726.03 4972.88 c
-4726.03 4943.5 4742.53 4924.18 4767.49 4924.18 c
-4783.79 4924.18 4793.65 4930.42 4806.73 4949.34 c
-h
-4754 4984 m
-4754.61 5007.96 4758.23 5015.42 4768.09 5015.42 c
-4773.93 5015.42 4777.55 5012.38 4779.16 5006.49 c
-4780.17 5002.67 4780.57 4997.03 4780.97 4986.77 c
-4780.97 4984 l
-h
-4810.35 4927 m
-f*
-4870.38 5020 m
-4851 5020 l
-4851 5053.79 l
-4846.43 5053.79 l
-4834.16 5036.48 4826.11 5027.42 4813.02 5016.35 c
-4813.02 5011 l
-4823 5011 l
-4823 4945.72 l
-4823 4932.64 4831.84 4924.59 4846.03 4924.59 c
-4859.51 4924.59 4867.56 4930.62 4875.81 4947.12 c
-4870.78 4949.34 l
-4866.76 4941.69 4863.54 4938.59 4859.31 4938.59 c
-4853.68 4938.59 4851 4942.09 4851 4950.34 c
-4851 5011 l
-4870.38 5011 l
-h
-4876.02 4927 m
-f*
-4927.31 4927 m
-f*
-5064.66 4932.03 m
-5055.81 4932.03 5053.59 4934.85 5042.72 4960 c
-4997.85 5065.82 l
-4992.21 5065.82 l
-4947.53 4955.58 l
-4939.89 4936.66 4937.47 4933.84 4927.81 4932.03 c
-4927.81 4927 l
-4968.66 4927 l
-4968.66 4932.03 l
-4956.79 4932.84 4952.16 4935.05 4952.16 4940.28 c
-4952.16 4942.9 4953.57 4947.53 4958 4958.6 c
-4961.02 4967 l
-5006.3 4967 l
-5013.14 4950.9 5015.56 4943.76 5015.56 4939.28 c
-5015.56 4934.85 5012.94 4933.04 5005.9 4932.63 c
-4999.46 4932.03 l
-4999.46 4927 l
-5064.66 4927 l
-h
-4964.04 4975 m
-4982.95 5023.4 l
-5003.28 4975 l
-h
-5071.3 4927 m
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 4328 a(Figure)23 b(15:)38 b(Tw)m(o)22
-b(F)-8 b(rameSets)24 b(in)e(the)h(pro)s(cess)f(of)g(b)s(eing)g(merged)h
-(using)f(AST)p Fy(_)p FG(ADDFRAME.)h(F)-8 b(rameSet)24
-b(B)0 4441 y(is)39 b(b)s(eing)f(added)h(to)g(F)-8 b(rameSet)40
-b(A)f(b)m(y)g(supplying)f(a)h(new)g(Mapping)f(whic)m(h)h(in)m
-(ter-relates)i(a)e(nominated)0 4554 y(F)-8 b(rame)32
-b(in)e(A)h(\(here)g(n)m(um)m(b)s(er)f(1\))h(and)g(the)g(curren)m(t)f(F)
--8 b(rame)32 b(of)f(B.)g(In)f(the)h(merged)g(F)-8 b(rameSet,)33
-b(the)e(F)-8 b(rames)0 4667 y(con)m(tributed)25 b(b)m(y)h(B)f(will)h(b)
-s(e)e(re-n)m(um)m(b)s(ered)h(to)g(b)s(ecome)h(F)-8 b(rames)26
-b(4,)h(5)f(and)e(6.)40 b(The)24 b(base)i(F)-8 b(rame)26
-b(will)g(remain)0 4780 y(unc)m(hanged,)i(but)f(the)h(curren)m(t)g(F)-8
-b(rame)28 b(of)g(B)g(b)s(ecomes)g(the)g(new)f(curren)m(t)h(F)-8
-b(rame.)41 b(Note)29 b(that)f(F)-8 b(rameSet)29 b(B)0
-4893 y(itself)i(is)g(not)f(altered)i(b)m(y)e(this)g(pro)s(cess.)0
-5241 y(This)22 b(pro)s(cess)g(is)g(p)s(erformed)f(b)m(y)h(adding)h(one)
-f(F)-8 b(rameSet)24 b(to)f(another)g(using)f(AST)p Fy(_)p
-FG(ADDFRAME,)h(in)f(m)m(uc)m(h)0 5354 y(the)37 b(same)g(manner)e(as)i
-(when)e(adding)h(a)h(new)f(F)-8 b(rame)38 b(to)f(an)f(existing)i(F)-8
-b(rameSet)37 b(\()p Fu(x)p FG(13.3\).)62 b(It)36 b(is)h(simply)0
-5467 y(a)h(matter)g(of)f(pro)m(viding)h(a)f(F)-8 b(rameSet)39
-b(p)s(oin)m(ter,)g(instead)f(of)f(a)h(F)-8 b(rame)38
-b(p)s(oin)m(ter,)i(for)d(the)g(4th)h(argumen)m(t.)0 5580
-y(In)31 b(p)s(erforming)f(the)i(merger)g(y)m(ou)g(m)m(ust,)g(as)g
-(usual,)f(supply)f(a)i(Mapping,)g(but)f(in)h(this)f(case)i(the)f
-(Mapping)0 5693 y(should)40 b(relate)j(the)f(curren)m(t)f(F)-8
-b(rame)42 b(of)f(the)h(F)-8 b(rameSet)43 b(b)s(eing)d(added)h(to)h(one)
-g(of)f(the)h(F)-8 b(rames)42 b(already)p eop end
-%%Page: 125 135
-TeXDict begin 125 134 bop 0 52 a Fz(14.7)93 b(Merging)31
-b(F)-8 b(rameSets)2624 b FG(125)0 351 y(presen)m(t.)41
-b(F)-8 b(or)31 b(example,)g(y)m(ou)g(migh)m(t)g(p)s(erform)e(the)i
-(merger)f(sho)m(wn)g(in)g(Figure)h(15)g(as)g(follo)m(ws:)262
-600 y Ft(INTEGER)40 b(MAPPING)262 800 y(...)262 999 y(CALL)h
-(AST_ADDFRAME\()e(FRAMESETA,)g(1,)k(MAPPING,)d(FRAMESETB,)g(STATUS)h
-(\))0 1261 y FG(The)c(F)-8 b(rames)39 b(acquired)f(b)m(y)g(FRAMESET)-8
-b(A)38 b(from)f(the)h(F)-8 b(rameSet)39 b(b)s(eing)e(added)h
-(\(FRAMESETB\))g(are)0 1374 y(re-n)m(um)m(b)s(ered)23
-b(so)i(that)g(they)f(retain)h(their)g(original)g(order)f(and)g(follo)m
-(w)h(on)g(consecutiv)m(ely)h(after)f(the)g(F)-8 b(rames)0
-1487 y(that)31 b(w)m(ere)g(already)g(presen)m(t,)g(whose)f(indices)h
-(remain)g(unc)m(hanged.)40 b(The)30 b(base)h(F)-8 b(rame)32
-b(of)e(FRAMESET)-8 b(A)0 1600 y(remains)35 b(unc)m(hanged,)i(but)e(the)
-g(curren)m(t)h(F)-8 b(rame)36 b(of)g(FRAMESETB)f(b)s(ecomes)h(its)g
-(new)f(curren)m(t)g(F)-8 b(rame.)0 1713 y(All)27 b(the)h(in)m
-(ter-relationships)f(b)s(et)m(w)m(een)h(F)-8 b(rames)28
-b(in)e(b)s(oth)g(F)-8 b(rameSets)28 b(remain)f(in)f(place)i(and)f(are)g
-(preserv)m(ed)0 1826 y(in)j(the)h(merged)f(F)-8 b(rameSet.)0
-1988 y(Note)33 b(that)f(while)f(this)h(pro)s(cess)f(mo)s(di\014es)f
-(the)i(\014rst)f(F)-8 b(rameSet)32 b(\(FRAMESET)-8 b(A\),)33
-b(it)f(lea)m(v)m(es)i(the)d(original)0 2101 y(con)m(ten)m(ts)h(of)f
-(the)f(one)h(b)s(eing)f(added)f(\(FRAMESETB\))j(unc)m(hanged.)p
-eop end
-%%Page: 126 136
-TeXDict begin 126 135 bop 0 52 a FG(126)1350 b Fz(14)92
-b(HIGHER)30 b(LEVEL)g(OPERA)-8 b(TIONS)29 b(ON)h(FRAMESETS)p
-eop end
-%%Page: 127 137
-TeXDict begin 127 136 bop 3643 52 a FG(127)0 351 y FA(15)135
-b(Sa)l(ving)45 b(and)g(Restoring)i(Ob)7 b(jects)45 b(\(Channels\))0
-612 y FG(F)-8 b(acilities)31 b(are)c(pro)m(vided)g(b)m(y)h(the)f(AST)g
-(library)g(for)g(p)s(erforming)f(input)h(and)f(output)h(\(I/O\))h(with)
-g(an)m(y)f(kind)0 725 y(of)35 b(Ob)5 b(ject.)53 b(This)34
-b(means)g(it)i(is)e(p)s(ossible)g(to)i(write)e(an)m(y)h(Ob)5
-b(ject)35 b(in)m(to)h(v)-5 b(arious)34 b(external)i(represen)m(tations)
-0 837 y(for)29 b(storage,)i(and)e(then)g(to)h(read)f(these)h(represen)m
-(tations)g(bac)m(k)g(in,)g(so)g(as)f(to)h(restore)g(the)g(original)g
-(Ob)5 b(ject.)0 950 y(T)m(ypically)-8 b(,)32 b(an)e(Ob)5
-b(ject)31 b(w)m(ould)f(b)s(e)g(written)g(b)m(y)h(one)f(program)g(and)g
-(read)g(bac)m(k)i(in)e(b)m(y)g(another.)0 1118 y(W)-8
-b(e)34 b(refer)e(to)h(\\external)g(represen)m(tations")h(in)e(the)h
-(plural)f(b)s(ecause)g(AST)g(is)g(designed)g(to)h(function)g(inde-)0
-1231 y(p)s(enden)m(tly)27 b(of)h(an)m(y)f(particular)h(data)g(storage)i
-(system.)39 b(This)27 b(means)h(that)g(Ob)5 b(jects)27
-b(ma)m(y)h(need)g(con)m(v)m(erting)0 1344 y(in)m(to)41
-b(a)g(n)m(um)m(b)s(er)e(of)i(di\013eren)m(t)f(external)i(represen)m
-(tations)f(in)f(order)g(to)h(b)s(e)f(compatible)h(with)f(\(sa)m(y\))i
-(the)0 1457 y(astronomical)32 b(data)f(storage)h(system)f(in)f(whic)m
-(h)g(they)g(will)h(reside.)0 1625 y(In)f(this)g(section,)i(w)m(e)f
-(discuss)e(the)i(basic)g(I/O)f(facilities)i(whic)m(h)f(supp)s(ort)d
-(external)j(represen)m(tations)h(based)0 1738 y(on)37
-b(a)g(textual)h(format)f(referred)f(to)i(as)f(the)g(AST)f(\\nativ)m(e)j
-(format".)61 b(These)36 b(are)h(implemen)m(ted)h(using)e(a)0
-1851 y(new)29 b(kind)f(of)h(Ob)5 b(ject|a)30 b(Channel.)39
-b(W)-8 b(e)31 b(will)e(examine)h(later)g(ho)m(w)f(to)h(use)f(other)g
-(represen)m(tations,)i(based)0 1964 y(on)g(an)f(XML)h(format)h(or)e(on)
-h(the)g(use)g(of)g(FITS)f(headers,)g(for)h(storing)g(Ob)5
-b(jects.)42 b(These)31 b(are)g(implemen)m(ted)0 2077
-y(using)f(more)g(sp)s(ecialised)h(forms)f(of)h(Channel)e(called)j
-(XmlChan)d(\()p Fu(x)p FG(18\))k(and)d(FitsChan)g(\()p
-Fu(x)p FG(16\).)0 2387 y Fw(15.1)112 b(The)38 b(Channel)h(Mo)s(del)0
-2616 y FG(The)30 b(b)s(est)f(w)m(a)m(y)j(to)e(start)h(thinking)f(ab)s
-(out)g(a)h(Channel)e(is)h(lik)m(e)i(a)e(F)-8 b(ortran)31
-b(I/O)f(unit)g(\(also)h(represen)m(ted)g(b)m(y)0 2729
-y(an)36 b(in)m(teger,)j(as)d(it)h(happ)s(ens\))d(and)i(to)g(think)g(of)
-g(the)g(pro)s(cess)g(of)g(creating)h(a)g(Channel)e(as)h(the)g(com)m
-(bined)0 2842 y(pro)s(cess)d(of)h(allo)s(cating)i(a)e(unit)g(n)m(um)m
-(b)s(er)e(and)h(attac)m(hing)j(it)e(to)h(a)f(\014le)g(b)m(y)g(op)s
-(ening)f(the)h(\014le)g(on)f(that)i(unit.)0 2955 y(Subsequen)m(tly)-8
-b(,)30 b(y)m(ou)h(can)g(read)f(and)g(write)g(Ob)5 b(jects)31
-b Fx(via)f FG(the)h(Channel.)0 3123 y(This)41 b(analogy)i(is)f(not)h
-(quite)f(p)s(erfect,)j(ho)m(w)m(ev)m(er,)h(b)s(ecause)c(a)g(Channel)f
-(has,)k(in)d(principle,)i(t)m(w)m(o)g(\\\014les")0 3236
-y(attac)m(hed)37 b(to)e(it.)54 b(One)34 b(is)h(used)f(when)g(reading,)i
-(and)e(the)h(other)g(when)e(writing.)54 b(These)35 b(are)g(termed)f
-(the)0 3349 y(Channel's)29 b Fx(sour)-5 b(c)g(e)32 b
-FG(and)d Fx(sink)h FG(resp)s(ectiv)m(ely)-8 b(.)43 b(In)29
-b(practice,)j(the)e(source)h(and)e(sink)h(ma)m(y)h(b)s(oth)e(b)s(e)g
-(the)i(same,)0 3462 y(in)f(whic)m(h)h(case)g(the)g(analogy)h(with)f
-(the)f(F)-8 b(ortran)32 b(I/O)e(unit)g(is)h(correct,)h(but)e(this)h
-(need)f(not)h(alw)m(a)m(ys)h(b)s(e)e(so.)0 3575 y(It)g(is)h(not)g
-(necessarily)g(so)f(with)g(the)h(basic)g(Channel,)f(as)g(w)m(e)h(will)g
-(no)m(w)f(see)h(\()p Fu(x)p FG(15.2\).)0 3885 y Fw(15.2)112
-b(Creating)38 b(a)g(Channel)0 4114 y FG(The)25 b(pro)s(cess)h(of)g
-(creating)i(a)e(Channel)f(is)h(straigh)m(tforw)m(ard.)40
-b(As)26 b(y)m(ou)h(migh)m(t)f(exp)s(ect,)i(it)e(uses)g(the)g(construc-)
-0 4227 y(tor)31 b(function)f(AST)p Fy(_)p FG(CHANNEL:)262
-4492 y Ft(INCLUDE)40 b('AST_PAR')262 4592 y(INTEGER)g(CHANNEL,)g
-(STATUS)262 4791 y(STATUS)h(=)i(0)262 4990 y(...)262
-5189 y(CHANNEL)d(=)j(AST_CHANNEL\()c(AST_NULL,)h(AST_NULL,)g(')j(',)g
-(STATUS)e(\))0 5467 y FG(The)j(\014rst)g(t)m(w)m(o)h(argumen)m(ts)g(to)
-g(AST)p Fy(_)p FG(CHANNEL)f(sp)s(ecify)g(the)h(external)g(source)f(and)
-g(sink)g(that)h(the)0 5580 y(Channel)30 b(is)h(to)g(use.)42
-b(There)30 b(argumen)m(ts)h(are)g(the)g(names)g(of)g(F)-8
-b(ortran)31 b(subroutines)e(and)i(w)m(e)g(will)g(examine)0
-5693 y(their)f(use)g(in)h(more)f(detail)i(later)f(\()p
-Fu(x)p FG(15.13)i(and)d Fu(x)p FG(15.14\).)p eop end
-%%Page: 128 138
-TeXDict begin 128 137 bop 0 52 a FG(128)1228 b Fz(15)92
-b(SA)-10 b(VING)30 b(AND)h(RESTORING)e(OBJECTS)g(\(CHANNELS\))0
-351 y FG(In)36 b(this)h(v)m(ery)h(simple)e(example)i(w)m(e)g(ha)m(v)m
-(e)g(supplied)e(the)h(name)g(of)g(the)g(n)m(ull)g(routine)g(AST)p
-Fy(_)p FG(NULL)3560 318 y Fv(22)3671 351 y FG(for)0 464
-y(b)s(oth)43 b(the)h(source)g(and)f(sink)g(routines.)81
-b(This)43 b(requests)h(the)g(default)g(b)s(eha)m(viour,)j(whic)m(h)c
-(means)h(that)0 577 y(textual)28 b(input)e(will)i(b)s(e)e(read)h(from)g
-(the)g(program's)g(standard)f(input)g(stream)i(\(t)m(ypically)-8
-b(,)31 b(this)c(means)g(y)m(our)0 690 y(k)m(eyb)s(oard\))34
-b(while)f(textual)i(output)f(will)g(go)g(to)h(the)e(standard)g(output)g
-(stream)h(\(t)m(ypically)i(app)s(earing)e(on)0 803 y(y)m(our)g
-(screen\).)52 b(On)33 b(UNIX)i(systems,)g(of)f(course,)h(either)g(of)f
-(these)g(streams)h(can)f(easily)h(b)s(e)e(redirected)i(to)0
-916 y(\014les.)0 1225 y Fw(15.3)112 b(W)-9 b(riting)37
-b(Ob)6 b(jects)38 b(to)f(a)h(Channel)0 1453 y FG(The)d(pro)s(cess)g(of)
-g(sa)m(ving)i(Ob)5 b(jects)35 b(is)g(v)m(ery)h(straigh)m(tforw)m(ard.)
-57 b(Y)-8 b(ou)36 b(can)f(simply)g(write)h(an)m(y)f(Ob)5
-b(ject)36 b(to)g(a)0 1566 y(Channel)30 b(using)f(the)i(AST)p
-Fy(_)p FG(WRITE)e(function,)h(as)h(follo)m(ws:)262 1829
-y Ft(INTEGER)40 b(NOBJ,)i(OBJECT)262 2028 y(...)262 2227
-y(NOBJ)f(=)j(AST_WRITE\()39 b(CHANNEL,)h(OBJECT,)h(STATUS)g(\))0
-2503 y FG(The)33 b(e\013ect)i(of)f(this)f(will)h(b)s(e)e(to)j(pro)s
-(duce)d(a)i(textual)g(description)g(of)g(the)f(Ob)5 b(ject)34
-b(whic)m(h)f(will)h(app)s(ear,)g(b)m(y)0 2616 y(default,)c(on)e(y)m
-(our)h(program's)g(standard)f(output)g(stream.)41 b(An)m(y)29
-b(class)g(of)g(Ob)5 b(ject)29 b(ma)m(y)h(b)s(e)e(con)m(v)m(erted)i(in)m
-(to)0 2729 y(text)h(in)f(this)h(w)m(a)m(y)-8 b(.)0 2896
-y(AST)p Fy(_)p FG(WRITE)41 b(returns)g(a)h(coun)m(t)h(of)f(the)h(n)m
-(um)m(b)s(er)d(of)j(Ob)5 b(jects)42 b(written.)76 b(Usually)-8
-b(,)46 b(this)c(will)g(b)s(e)g(one,)0 3009 y(unless)c(the)h(Ob)5
-b(ject)39 b(supplied)e(cannot)j(b)s(e)e(represen)m(ted.)66
-b(With)39 b(a)g(basic)h(Channel)e(all)h(Ob)5 b(jects)39
-b(can)g(b)s(e)0 3122 y(represen)m(ted,)c(so)e(a)h(v)-5
-b(alue)35 b(of)e(one)h(will)g(alw)m(a)m(ys)h(b)s(e)e(returned)g(unless)
-g(there)h(has)f(b)s(een)g(an)g(error.)50 b(W)-8 b(e)35
-b(will)0 3235 y(see)c(later,)h(ho)m(w)m(ev)m(er,)h(that)e(more)g(sp)s
-(ecialised)g(forms)f(of)h(Channel)f(ma)m(y)h(imp)s(ose)f(restrictions)i
-(on)e(the)h(kind)0 3348 y(of)h(Ob)5 b(ject)32 b(y)m(ou)g(can)g(write)f
-(\()p Fu(x)p FG(17.2\).)48 b(In)31 b(suc)m(h)g(cases,)i(AST)p
-Fy(_)p FG(WRITE)d(ma)m(y)j(return)d(zero)j(to)f(indicate)h(that)0
-3461 y(the)e(Ob)5 b(ject)30 b(w)m(as)h(not)f(acceptable.)0
-3770 y Fw(15.4)112 b(Reading)39 b(Ob)6 b(jects)38 b(from)f(a)h(Channel)
-0 3998 y FG(Before)31 b(discussing)f(the)h(format)g(of)f(the)h(output)f
-(pro)s(duced)f(ab)s(o)m(v)m(e)j(\()p Fu(x)p FG(15.3\),)h(let)f(us)d
-(consider)i(ho)m(w)f(to)i(read)0 4111 y(it)40 b(bac)m(k,)i(so)d(as)h
-(to)g(reconstruct)f(the)g(original)i(Ob)5 b(ject.)67
-b(Naturally)-8 b(,)43 b(w)m(e)c(w)m(ould)g(\014rst)g(need)g(to)h(sa)m
-(v)m(e)g(the)0 4224 y(output)30 b(in)h(a)g(\014le.)41
-b(On)30 b(UNIX)h(systems,)g(w)m(e)g(can)g(do)g(that)g(simply)g(b)m(y)f
-(redirecting)h(standard)f(output)h(to)g(a)0 4337 y(\014le)f(using)g(a)h
-(shell)g(command)f(lik)m(e:)227 4599 y Ft(program1)41
-b(>file)0 4876 y FG(Within)30 b(a)g(subsequen)m(t)f(program,)h(w)m(e)g
-(can)g(read)g(this)f(Ob)5 b(ject)30 b(bac)m(k)h(in)e(b)m(y)h(using)f
-(the)h(AST)p Fy(_)p FG(READ)f(func-)0 4988 y(tion,)i(ha)m(ving)g
-(\014rst)f(created)h(a)g(suitable)g(Channel:)262 5251
-y Ft(OBJECT)41 b(=)i(AST_READ\()d(CHANNEL,)g(STATUS)h(\))p
-0 5334 1512 4 v 73 5387 a Fs(22)138 5419 y Fr(Note)20
-b(that)f(AST)p Ff(_)p Fr(NULL)g(\(one)h(underscore\))f(is)i(a)f
-(routine)f(name)h(and)g(is)g(distinct)g(from)g(AST)p
-Ff(__)p Fr(NULL)f(\(t)n(w)n(o)h(underscores\))0 5510
-y(whic)n(h)f(is)h(a)g(n)n(ull)f(Ob)t(ject)h(p)r(oin)n(ter.)32
-b(Since)19 b(w)n(e)h(are)g(passing)g(the)f(name)h(of)g(one)f(routine)h
-(to)f(another)h(routine,)h(AST)p Ff(_)p Fr(NULL)d(w)n(ould)0
-5602 y(normally)27 b(ha)n(v)n(e)e(to)i(app)r(ear)f(in)g(a)g(F)-6
-b(ortran)27 b(EXTERNAL)e(statemen)n(t.)36 b(In)25 b(this)h(example,)h
-(ho)n(w)n(ev)n(er,)g(a)f(suitable)h(statemen)n(t)f(is)0
-5693 y(already)g(presen)n(t)f(in)h(the)f(AST)p Ff(_)p
-Fr(P)-6 b(AR)25 b(include)g(\014le.)p eop end
-%%Page: 129 139
-TeXDict begin 129 138 bop 0 52 a Fz(15.5)93 b(Sa)m(ving)30
-b(and)g(Restoring)h(Multiple)g(Ob)5 b(jects)1838 b FG(129)0
-351 y(By)25 b(default,)i(this)e(function)g(will)h(read)f(from)f(the)i
-(standard)e(input)g(stream)i(\(the)g(default)f(source)h(for)e(a)i
-(basic)0 464 y(Channel\),)32 b(so)g(w)m(e)g(w)m(ould)g(need)g(to)g
-(ensure)f(that)i(our)e(second)h(program)g(reads)f(its)i(input)d(from)i
-(the)g(\014le)g(in)0 577 y(whic)m(h)25 b(the)h(Ob)5 b(ject)26
-b(description)f(is)h(stored.)39 b(On)24 b(UNIX)i(systems,)h(w)m(e)f
-(could)f(again)i(use)e(a)h(shell)g(redirection)0 690
-y(command)k(suc)m(h)g(as:)227 930 y Ft(program2)41 b(<file)0
-1219 y Fw(15.5)112 b(Sa)m(ving)39 b(and)f(Restoring)f(Multiple)i(Ob)6
-b(jects)0 1438 y FG(I/O)27 b(op)s(erations)h(p)s(erformed)d(on)i(a)h
-(basic)g(Channel)e(are)i(sequen)m(tial.)41 b(This)26
-b(means)h(that)h(if)f(y)m(ou)h(write)f(more)0 1551 y(than)h(one)h(Ob)5
-b(ject)28 b(to)h(a)g(Channel,)f(eac)m(h)h(new)f(Ob)5
-b(ject's)29 b(textual)g(description)g(is)f(simply)g(app)s(ended)e(to)j
-(the)0 1664 y(previous)38 b(one.)64 b(Y)-8 b(ou)39 b(can)g(store)g(an)m
-(y)f(n)m(um)m(b)s(er)f(of)i(Ob)5 b(jects)38 b(in)g(this)g(w)m(a)m(y)-8
-b(,)42 b(sub)5 b(ject)38 b(only)g(to)h(the)g(storage)0
-1777 y(space)31 b(y)m(ou)g(ha)m(v)m(e)g(a)m(v)-5 b(ailable.)0
-1937 y(After)36 b(y)m(ou)g(read)f(an)g(Ob)5 b(ject)36
-b(bac)m(k)g(from)f(a)h(basic)g(Channel,)g(the)g(Channel)e(is)i(\\p)s
-(ositioned")g(at)g(the)g(end)0 2050 y(of)e(that)g(Ob)5
-b(ject's)34 b(textual)g(description.)51 b(If)33 b(y)m(ou)h(then)f(p)s
-(erform)f(another)i(read,)g(y)m(ou)g(will)g(read)g(the)f(next)0
-2163 y(Ob)5 b(ject's)38 b(textual)g(description)g(and)f(therefore)h
-(retriev)m(e)g(the)g(next)g(Ob)5 b(ject.)62 b(This)36
-b(pro)s(cess)h(ma)m(y)h(b)s(e)f(re-)0 2276 y(p)s(eated)32
-b(to)g(read)f(eac)m(h)i(Ob)5 b(ject)32 b(in)f(turn.)43
-b(When)31 b(there)h(are)g(no)g(more)f(Ob)5 b(jects)32
-b(to)g(b)s(e)f(read,)h(AST)p Fy(_)p FG(READ)0 2389 y(will)f(return)e
-(the)i(v)-5 b(alue)30 b(AST)p Fy(__)p FG(NULL)g(to)h(indicate)g(an)f
-Fx(end-of-\014le.)0 2679 y Fw(15.6)112 b(V)-9 b(alidating)39
-b(Input)0 2898 y FG(The)32 b(p)s(oin)m(ter)h(returned)e(b)m(y)h(AST)p
-Fy(_)p FG(READ)g(\()p Fu(x)p FG(15.4\))j(could)e(iden)m(tify)g(an)m(y)g
-(class)g(of)g(Ob)5 b(ject|this)32 b(is)h(deter-)0 3011
-y(mined)23 b(en)m(tirely)h(b)m(y)g(the)f(external)i(data)f(b)s(eing)f
-(read.)38 b(If)23 b(it)h(is)g(necessary)g(to)g(test)g(for)g(a)f
-(particular)h(class)g(\(sa)m(y)0 3124 y(a)i(F)-8 b(rame\),)27
-b(this)e(ma)m(y)h(b)s(e)f(done)g(as)g(follo)m(ws)h(using)f(the)g
-(appropriate)h(mem)m(b)s(er)e(of)h(the)h(AST)p Fy(_)p
-FG(ISA)p Fp(<)p FG(CLASS)p Fp(>)0 3237 y FG(family)31
-b(of)f(functions:)262 3476 y Ft(LOGICAL)40 b(OK)262 3675
-y(...)262 3875 y(OK)i(=)h(AST_ISAFRAME\()c(OBJECT,)h(STATUS)h(\))0
-4127 y FG(Note,)33 b(ho)m(w)m(ev)m(er,)f(that)g(this)f(will)g(accept)h
-(an)m(y)g(F)-8 b(rame,)32 b(so)f(w)m(ould)g(b)s(e)f(equally)i(happ)m(y)
-e(with)h(a)g(basic)h(F)-8 b(rame)0 4240 y(or)30 b(a)f(SkyF)-8
-b(rame.)41 b(An)30 b(alternativ)m(e)i(v)-5 b(alidation)30
-b(strategy)h(w)m(ould)f(b)s(e)f(to)h(obtain)g(the)g(v)-5
-b(alue)30 b(of)f(the)h(Ob)5 b(ject's)0 4353 y(Class)30
-b(attribute)h(and)f(then)g(test)i(this)e(c)m(haracter)i(string,)e(as)h
-(follo)m(ws:)262 4593 y Ft(OK)42 b(=)h(AST_GETC\()d(OBJECT,)h('Class',)
-f(STATUS)h(\))j(.EQ.)d('Frame')0 4845 y FG(This)30 b(w)m(ould)g(only)g
-(accept)i(a)f(basic)g(F)-8 b(rame)31 b(and)f(w)m(ould)g(reject)h(a)g
-(SkyF)-8 b(rame.)0 5135 y Fw(15.7)112 b(Storing)38 b(an)g(ID)f(String)g
-(with)h(an)g(Ob)6 b(ject)0 5354 y FG(Occasionally)-8
-b(,)33 b(y)m(ou)e(ma)m(y)g(w)m(an)m(t)h(to)f(store)g(a)g(n)m(um)m(b)s
-(er)f(of)g(Ob)5 b(jects)31 b(and)f(later)h(retriev)m(e)h(them)f(and)f
-(use)g(eac)m(h)0 5467 y(for)g(a)g(di\013eren)m(t)g(purp)s(ose.)39
-b(If)29 b(the)h(Ob)5 b(jects)30 b(are)g(of)g(the)g(same)h(class,)g(y)m
-(ou)f(cannot)g(use)g(the)g(Class)g(attribute)0 5580 y(to)39
-b(distinguish)e(them)g(when)g(y)m(ou)h(read)g(them)g(bac)m(k)h(\()p
-Fx(c.f.)e Fu(x)p FG(15.6\).)65 b(Although)38 b(relying)h(on)e(the)h
-(order)g(in)0 5693 y(whic)m(h)e(they)g(are)h(stored)g(is)f(a)h(p)s
-(ossible)e(solution,)k(this)d(b)s(ecomes)h(complicated)h(if)e(some)h
-(of)f(the)g(Ob)5 b(jects)p eop end
-%%Page: 130 140
-TeXDict begin 130 139 bop 0 52 a FG(130)1228 b Fz(15)92
-b(SA)-10 b(VING)30 b(AND)h(RESTORING)e(OBJECTS)g(\(CHANNELS\))0
-351 y FG(are)e(optional)h(and)e(ma)m(y)i(not)f(alw)m(a)m(ys)h(b)s(e)e
-(presen)m(t.)40 b(It)27 b(also)h(mak)m(es)f(extending)g(y)m(our)g(data)
-h(format)f(in)f(future)0 464 y(more)31 b(di\016cult.)0
-626 y(T)-8 b(o)30 b(help)f(with)f(this,)i(ev)m(ery)g(AST)f(Ob)5
-b(ject)29 b(has)g(an)g(ID)g(attribute)h(and)f(an)g(Iden)m(t)g
-(attribute,)i(b)s(oth)d(of)i(whic)m(h)0 739 y(allo)m(ws)e(y)m(ou,)f(in)
-f(e\013ect,)j(to)e(attac)m(h)h(a)f(textual)g(iden)m(ti\014cation)h(lab)
-s(el)f(to)g(it.)40 b(Y)-8 b(ou)27 b(simply)e(set)i(the)g(ID)f(or)g
-(Iden)m(t)0 852 y(attribute)31 b(b)s(efore)f(writing)g(the)h(Ob)5
-b(ject:)262 1099 y Ft(CALL)41 b(AST_SET\()g(OBJECT,)f
-('ID=Calibration',)d(STATUS)k(\))262 1199 y(NOBJ)g(=)j(AST_WRITE\()39
-b(CHANNEL,)h(OBJECT,)h(STATUS)g(\))0 1460 y FG(Y)-8 b(ou)31
-b(can)g(then)f(test)h(its)g(v)-5 b(alue)30 b(after)h(y)m(ou)g(read)f
-(the)h(Ob)5 b(ject)30 b(bac)m(k:)262 1707 y Ft(OBJECT)41
-b(=)i(AST_READ\()d(CHANNEL,)g(STATUS)h(\))262 1806 y(IF)h(\()h
-(AST_GETC\()d(OBJECT,)h('ID',)h(STATUS)f(\))i(.EQ.)f('Calibration')c
-(\))43 b(THEN)392 1906 y(<the)f(Calibration)d(Object)i(has)i(been)f
-(read>)262 2006 y(ELSE)392 2105 y(<some)g(other)f(Object)g(has)i(been)f
-(read>)262 2205 y(END)g(IF)0 2465 y FG(The)30 b(only)h(di\013erence)g
-(b)s(et)m(w)m(een)h(the)f(ID)g(and)f(Iden)m(t)h(attributes)g(is)g(that)
-g(the)g(ID)g(attribute)h(is)f(unique)f(to)h(a)0 2578
-y(particular)22 b(Ob)5 b(ject)23 b(and)e(is)h(lost)h(if,)h(for)e
-(example,)j(y)m(ou)d(mak)m(e)h(a)g(cop)m(y)g(of)f(the)g(Ob)5
-b(ject.)39 b(The)21 b(Iden)m(t)h(attrubute,)0 2691 y(on)34
-b(the)g(other)g(hand,)g(is)g(transferred)f(to)i(the)f(new)f(Ob)5
-b(ject)34 b(when)f(a)h(cop)m(y)h(is)f(made.)51 b(Consequen)m(tly)-8
-b(,)36 b(it)e(is)0 2804 y(safest)d(to)g(set)g(the)g(v)-5
-b(alue)30 b(of)h(the)g(ID)f(attribute)h(immediately)h(b)s(efore)e(y)m
-(ou)h(p)s(erform)e(the)h(write.)0 3097 y Fw(15.8)112
-b(The)38 b(T)-9 b(extual)38 b(Output)f(F)-9 b(ormat)0
-3318 y FG(Let)30 b(us)f(no)m(w)g(examine)i(the)e(format)h(of)g(the)g
-(textual)h(output)e(pro)s(duced)f(b)m(y)h(writing)h(an)f(Ob)5
-b(ject)30 b(to)g(a)g(basic)0 3430 y(Channel)35 b(\()p
-Fu(x)p FG(15.3\).)60 b(T)-8 b(o)37 b(giv)m(e)g(a)g(concrete)g(example,)
-i(supp)s(ose)34 b(the)i(Ob)5 b(ject)36 b(in)g(question)g(is)g(a)h(SkyF)
--8 b(rame,)0 3543 y(written)30 b(out)h(as)g(follo)m(ws:)262
-3791 y Ft(INTEGER)40 b(SKYFRAME)262 3990 y(...)262 4189
-y(NOBJ)h(=)j(AST_WRITE\()39 b(CHANNEL,)h(SKYFRAME,)g(STATUS)h(\))0
-4450 y FG(The)30 b(output)g(should)f(then)h(lo)s(ok)h(lik)m(e)h(the)f
-(follo)m(wing:)271 4697 y Ft(Begin)41 b(SkyFrame)84 b(#)43
-b(Description)c(of)k(celestial)d(coordinate)g(system)227
-4796 y(#)131 b(Title)41 b(=)i("FK4)f(Equatorial)e(Coordinates,)e(no)43
-b(E-terms,)d(Mean)i(Equinox)f(B1950.0,)f(Epoch)i(B1958.0")84
-b(#)43 b(Title)e(of)i(coordinate)d(system)402 4896 y(Naxes)h(=)i(2)87
-b(#)43 b(Number)e(of)i(coordinate)d(axes)227 4996 y(#)131
-b(Domain)41 b(=)i("SKY")85 b(#)43 b(Coordinate)d(system)h(domain)227
-5095 y(#)131 b(Lbl1)42 b(=)h("Right)e(Ascension")83 b(#)43
-b(Label)f(for)g(axis)g(1)227 5195 y(#)131 b(Lbl2)42 b(=)h
-("Declination")82 b(#)43 b(Label)e(for)i(axis)e(2)227
-5295 y(#)131 b(Uni1)42 b(=)h("hh:mm:ss.s")82 b(#)43 b(Units)f(for)g
-(axis)g(1)227 5394 y(#)131 b(Uni2)42 b(=)h("ddd:mm:ss")82
-b(#)44 b(Units)d(for)h(axis)g(2)227 5494 y(#)131 b(Dir1)42
-b(=)h(0)86 b(#)44 b(Plot)e(axis)g(1)h(in)f(reverse)f(direction)f
-(\(hint\))402 5593 y(Ax1)i(=)87 b(#)43 b(Axis)f(number)f(1)532
-5693 y(Begin)h(SkyAxis)84 b(#)43 b(Celestial)d(coordinate)g(axis)p
-eop end
-%%Page: 131 141
-TeXDict begin 131 140 bop 0 52 a Fz(15.8)93 b(The)29
-b(T)-8 b(extual)32 b(Output)d(F)-8 b(ormat)2259 b FG(131)532
-351 y Ft(End)43 b(SkyAxis)402 451 y(Ax2)f(=)87 b(#)43
-b(Axis)f(number)f(2)532 551 y(Begin)h(SkyAxis)84 b(#)43
-b(Celestial)d(coordinate)g(axis)532 650 y(End)j(SkyAxis)271
-750 y(IsA)f(Frame)85 b(#)43 b(Coordinate)d(system)h(description)402
-849 y(System)g(=)i("FK4-NO-E")83 b(#)43 b(Celestial)d(coordinate)f
-(system)j(type)402 949 y(Epoch)f(=)i(1958)86 b(#)43 b(Besselian)d
-(epoch)h(of)i(observation)227 1049 y(#)131 b(Eqnox)41
-b(=)i(1950)86 b(#)43 b(Besselian)d(epoch)h(of)i(mean)f(equinox)271
-1148 y(End)g(SkyFrame)0 1391 y FG(Y)-8 b(ou)36 b(will)f(notice)i(that)f
-(this)f(output)g(is)g(designed)g(b)s(oth)g(for)g(a)h(h)m(uman)e
-(reader,)j(in)e(that)g(it)h(is)g(formatted,)0 1504 y(and)d(also)h(to)g
-(b)s(e)f(read)g(bac)m(k)h(b)m(y)f(a)h(computer)f(in)g(order)g(to)h
-(reconstruct)g(the)f(SkyF)-8 b(rame.)50 b(In)33 b(fact,)i(this)e(is)0
-1617 y(precisely)i(the)f(w)m(a)m(y)h(that)g(AST)p Fy(_)p
-FG(SHO)m(W)e(w)m(orks)h(\()p Fu(x)p FG(4.4\),)k(this)c(routine)g(b)s
-(eing)g(roughly)g(equiv)-5 b(alen)m(t)35 b(to)g(the)0
-1729 y(follo)m(wing)d(use)e(of)g(a)h(Channel:)262 1959
-y Ft(CHANNEL)40 b(=)j(AST_CHANNEL\()c(AST_NULL,)h(AST_NULL,)g(')j(',)g
-(STATUS)e(\))262 2058 y(NOBJ)g(=)j(AST_WRITE\()39 b(CHANNEL,)h(OBJECT,)
-h(STATUS)g(\))262 2158 y(CALL)g(AST_ANNUL\()f(CHANNEL,)g(STATUS)h(\))0
-2400 y FG(Some)34 b(lines)f(of)h(the)g(output)f(start)h(with)f(a)h(\\)p
-Fy(#)p FG(")g(commen)m(t)h(c)m(haracter,)h(whic)m(h)d(turns)f(the)i
-(rest)g(of)f(the)h(line)0 2513 y(in)m(to)d(a)f(commen)m(t.)41
-b(These)29 b(lines)h(will)g(b)s(e)f(ignored)h(when)f(read)g(bac)m(k)h
-(in)g(b)m(y)f(AST)p Fy(_)p FG(READ.)h(They)f(t)m(ypically)0
-2626 y(con)m(tain)k(default)f(v)-5 b(alues,)33 b(or)f(v)-5
-b(alues)32 b(that)g(can)h(b)s(e)e(deriv)m(ed)h(in)f(some)h(w)m(a)m(y)h
-(from)f(the)g(other)g(data)g(presen)m(t,)0 2739 y(so)c(that)g(they)g
-(do)g(not)f(actually)j(need)d(to)i(b)s(e)e(stored)g(in)h(order)f(to)h
-(reconstruct)g(the)g(original)h(Ob)5 b(ject.)40 b(They)0
-2852 y(are)25 b(pro)m(vided)f(purely)f(for)h(h)m(uman)g(information.)39
-b(The)24 b(same)g(commen)m(t)i(c)m(haracter)g(is)e(also)h(used)f(to)h
-(app)s(end)0 2965 y(explanatory)31 b(commen)m(ts)h(to)f(most)f(output)g
-(lines.)0 3123 y(It)36 b(is)f(not)h(sensible)f(to)h(attempt)h(a)e
-(complete)i(description)f(of)f(this)g(output)g(format)h(b)s(ecause)g
-(ev)m(ery)g(class)0 3236 y(of)e(Ob)5 b(ject)34 b(is)g(p)s(oten)m
-(tially)i(di\013eren)m(t)f(and)e(eac)m(h)i(can)f(de\014ne)g(ho)m(w)g
-(its)g(o)m(wn)g(data)h(should)e(b)s(e)g(represen)m(ted.)0
-3348 y(Ho)m(w)m(ev)m(er,)27 b(there)d(are)g(some)g(basic)g(rules,)g
-(whic)m(h)g(mean)f(that)h(the)g(follo)m(wing)h(common)f(features)g
-(will)g(usually)0 3461 y(b)s(e)30 b(presen)m(t:)111 3704
-y(1.)46 b(Eac)m(h)37 b(Ob)5 b(ject)36 b(is)g(delimited)g(b)m(y)g(matc)m
-(hing)h(\\Begin")g(and)f(\\End")f(lines,)j(whic)m(h)d(also)i(iden)m
-(tify)f(the)227 3817 y(class)31 b(of)g(Ob)5 b(ject)30
-b(in)m(v)m(olv)m(ed.)111 3999 y(2.)46 b(Within)22 b(eac)m(h)i(Ob)5
-b(ject)22 b(description,)i(data)e(v)-5 b(alues)23 b(are)f(represen)m
-(ted)g(b)m(y)g(a)g(simple)g(\\k)m(eyw)m(ord)h(=)f(v)-5
-b(alue")227 4112 y(syn)m(tax,)31 b(with)g(one)f(v)-5
-b(alue)31 b(to)g(a)g(line.)111 4295 y(3.)46 b(Lines)30
-b(b)s(eginning)f(\\IsA")i(are)f(used)f(to)i(mark)f(the)g(divisions)g(b)
-s(et)m(w)m(een)g(data)h(b)s(elonging)f(to)h(di\013eren)m(t)227
-4408 y(lev)m(els)41 b(in)e(the)g(class)h(hierarc)m(h)m(y)g(\(App)s
-(endix)e(A\).)67 b(Th)m(us,)41 b(\\IsA)e(F)-8 b(rame")41
-b(marks)e(the)g(end)f(of)i(data)227 4521 y(asso)s(ciated)34
-b(with)f(the)g(F)-8 b(rame)33 b(class)h(and)e(the)h(start)g(of)g(data)g
-(asso)s(ciated)h(with)f(some)g(deriv)m(ed)g(class)227
-4634 y(\(a)d(SkyF)-8 b(rame)29 b(in)g(the)g(ab)s(o)m(v)m(e)h
-(example\).)41 b(\\IsA")30 b(lines)f(ma)m(y)g(b)s(e)f(omitted)i(if)f
-(asso)s(ciated)i(data)e(v)-5 b(alues)227 4747 y(are)31
-b(absen)m(t)g(and)f(no)g(confusion)g(arises.)111 4929
-y(4.)46 b(Ob)5 b(jects)27 b(ma)m(y)g(con)m(tain)h(other)e(Ob)5
-b(jects)27 b(as)g(data.)40 b(This)26 b(is)g(indicated)h(b)m(y)g(an)f
-(absen)m(t)h(v)-5 b(alue,)28 b(with)e(the)227 5042 y(description)31
-b(of)f(the)h(data)g(Ob)5 b(ject)30 b(follo)m(wing)i(on)e(subsequen)m(t)
-g(lines.)111 5225 y(5.)46 b(Inden)m(tation)31 b(is)g(used)e(to)i
-(clarify)g(the)g(o)m(v)m(erall)i(structure.)0 5467 y(Bey)m(ond)j(these)
-g(general)g(principles,)h(the)f(b)s(est)f(guide)g(to)h(what)g(a)f
-(particular)h(line)g(of)g(output)f(represen)m(ts)0 5580
-y(will)f(generally)h(b)s(e)e(the)h(commen)m(t)h(whic)m(h)f(accompanies)
-h(it)g(together)g(with)e(a)i(general)f(kno)m(wledge)h(of)f(the)0
-5693 y(class)d(of)g(Ob)5 b(ject)30 b(b)s(eing)g(describ)s(ed.)p
-eop end
-%%Page: 132 142
-TeXDict begin 132 141 bop 0 52 a FG(132)1228 b Fz(15)92
-b(SA)-10 b(VING)30 b(AND)h(RESTORING)e(OBJECTS)g(\(CHANNELS\))0
-351 y Fw(15.9)112 b(Con)m(trolling)38 b(the)f(Amoun)m(t)h(of)f(Output)0
-572 y FG(It)c(is)g(not)g(alw)m(a)m(ys)h(necessary)f(for)g(the)g(output)
-f(from)g(AST)p Fy(_)p FG(WRITE)g(\()p Fu(x)p FG(15.3\))j(to)e(b)s(e)g
-(h)m(uman-readable,)g(so)0 685 y(a)e(Channel)e(has)h(attributes)h(that)
-g(allo)m(w)h(the)f(amoun)m(t)g(of)f(detail)i(in)e(the)g(output)g(to)h
-(b)s(e)f(con)m(trolled.)0 848 y(The)41 b(\014rst)g(of)h(these)g(is)g
-(the)f(in)m(teger)i(attribute)g(F)-8 b(ull,)45 b(whic)m(h)d(con)m
-(trols)g(the)g(exten)m(t)h(to)g(whic)m(h)e(optional,)0
-961 y(commen)m(ted)g(out,)j(output)c(lines)h(are)g(pro)s(duced.)69
-b(By)41 b(default,)j(F)-8 b(ull)41 b(is)f(zero,)k(and)c(this)h(results)
-f(in)g(the)0 1074 y(standard)21 b(st)m(yle)i(of)e(output)g(\()p
-Fu(x)p FG(15.8\))k(where)c(default)g(v)-5 b(alues)22
-b(that)g(ma)m(y)h(b)s(e)d(helpful)h(to)h(h)m(umans)f(are)h(included.)0
-1186 y(T)-8 b(o)28 b(suppress)e(these)j(optional)g(lines,)f(F)-8
-b(ull)29 b(should)e(b)s(e)g(set)i(to)f Fu(\000)p FG(1.)40
-b(This)27 b(is)h(most)h(con)m(v)m(enien)m(tly)h(done)d(when)0
-1299 y(the)k(Channel)e(is)i(created,)g(so)g(that:)262
-1547 y Ft(CHANNEL)40 b(=)j(AST_CHANNEL\()c(AST_NULL,)h(AST_NULL,)g
-('Full=-1',)f(STATUS)i(\))262 1647 y(NOBJ)g(=)j(AST_WRITE\()39
-b(CHANNEL,)h(SKYFRAME,)g(STATUS)h(\))262 1746 y(CALL)g(AST_ANNUL\()f
-(CHANNEL,)g(STATUS)h(\))0 2007 y FG(w)m(ould)30 b(result)g(in)g(output)
-g(con)m(taining)i(only)f(the)f(essen)m(tial)j(information,)e(suc)m(h)f
-(as:)271 2255 y Ft(Begin)41 b(SkyFrame)84 b(#)43 b(Description)c(of)k
-(celestial)d(coordinate)g(system)402 2355 y(Naxes)h(=)i(2)87
-b(#)43 b(Number)e(of)i(coordinate)d(axes)402 2454 y(Ax1)i(=)87
-b(#)43 b(Axis)f(number)f(1)532 2554 y(Begin)h(SkyAxis)84
-b(#)43 b(Celestial)d(coordinate)g(axis)532 2654 y(End)j(SkyAxis)402
-2753 y(Ax2)f(=)87 b(#)43 b(Axis)f(number)f(2)532 2853
-y(Begin)h(SkyAxis)84 b(#)43 b(Celestial)d(coordinate)g(axis)532
-2953 y(End)j(SkyAxis)271 3052 y(IsA)f(Frame)85 b(#)43
-b(Coordinate)d(system)h(description)402 3152 y(System)g(=)i("FK4-NO-E")
-83 b(#)43 b(Celestial)d(coordinate)f(system)j(type)402
-3251 y(Epoch)f(=)i(1958)86 b(#)43 b(Besselian)d(epoch)h(of)i
-(observation)271 3351 y(End)f(SkyFrame)0 3612 y FG(In)30
-b(con)m(trast,)j(setting)f(F)-8 b(ull)31 b(to)h(+1)f(will)g(result)f
-(in)h(additional)h(output)e(lines)h(whic)m(h)g(will)g(rev)m(eal)h(ev)m
-(ery)g(last)0 3725 y(detail)38 b(of)g(the)f(Ob)5 b(ject's)37
-b(construction.)62 b(Often)37 b(this)g(will)g(b)s(e)g(rather)g(more)g
-(than)g(y)m(ou)g(w)m(an)m(t,)j(esp)s(ecially)0 3838 y(for)30
-b(more)g(complex)g(Ob)5 b(jects,)30 b(but)g(it)g(can)g(sometimes)h
-(help)e(when)g(debugging)h(programs.)40 b(This)29 b(is)h(ho)m(w)g(a)0
-3951 y(SkyF)-8 b(rame)31 b(app)s(ears)e(at)i(this)g(lev)m(el)h(of)e
-(detail:)271 4199 y Ft(Begin)41 b(SkyFrame)84 b(#)43
-b(Description)c(of)k(celestial)d(coordinate)g(system)227
-4298 y(#)131 b(RefCnt)41 b(=)i(1)87 b(#)43 b(Count)e(of)i(active)e
-(Object)g(pointers)227 4398 y(#)131 b(Nobj)42 b(=)h(1)86
-b(#)44 b(Count)d(of)i(active)e(Objects)g(in)h(same)g(class)271
-4497 y(IsA)g(Object)85 b(#)43 b(Astrometry)d(Object)227
-4597 y(#)131 b(Nin)42 b(=)h(2)87 b(#)43 b(Number)e(of)i(input)e
-(coordinates)227 4697 y(#)131 b(Nout)42 b(=)h(2)86 b(#)44
-b(Number)d(of)i(output)e(coordinates)227 4796 y(#)131
-b(Invert)41 b(=)i(0)87 b(#)43 b(Mapping)e(not)h(inverted)227
-4896 y(#)131 b(Fwd)42 b(=)h(1)87 b(#)43 b(Forward)e(transformation)d
-(defined)227 4996 y(#)131 b(Inv)42 b(=)h(1)87 b(#)43
-b(Inverse)e(transformation)d(defined)227 5095 y(#)131
-b(Report)41 b(=)i(0)87 b(#)43 b(Don't)e(report)g(coordinate)f
-(transformations)271 5195 y(IsA)i(Mapping)84 b(#)44 b(Mapping)c
-(between)h(coordinate)e(systems)227 5295 y(#)131 b(Title)41
-b(=)i("FK4)f(Equatorial)e(Coordinates,)e(no)43 b(E-terms,)d(Mean)i
-(Equinox)f(B1950.0,)f(Epoch)i(B1958.0")84 b(#)43 b(Title)e(of)i
-(coordinate)d(system)402 5394 y(Naxes)h(=)i(2)87 b(#)43
-b(Number)e(of)i(coordinate)d(axes)227 5494 y(#)131 b(Domain)41
-b(=)i("SKY")85 b(#)43 b(Coordinate)d(system)h(domain)227
-5593 y(#)131 b(Lbl1)42 b(=)h("Right)e(Ascension")83 b(#)43
-b(Label)f(for)g(axis)g(1)227 5693 y(#)131 b(Lbl2)42 b(=)h
-("Declination")82 b(#)43 b(Label)e(for)i(axis)e(2)p eop
-end
-%%Page: 133 143
-TeXDict begin 133 142 bop 0 52 a Fz(15.9)93 b(Con)m(trolling)31
-b(the)g(Amoun)m(t)f(of)h(Output)2005 b FG(133)227 351
-y Ft(#)131 b(Sym1)42 b(=)h("RA")85 b(#)43 b(Symbol)f(for)g(axis)g(1)227
-451 y(#)131 b(Sym2)42 b(=)h("Dec")85 b(#)43 b(Symbol)e(for)h(axis)g(2)
-227 551 y(#)131 b(Uni1)42 b(=)h("hh:mm:ss.s")82 b(#)43
-b(Units)f(for)g(axis)g(1)227 650 y(#)131 b(Uni2)42 b(=)h("ddd:mm:ss")82
-b(#)44 b(Units)d(for)h(axis)g(2)227 750 y(#)131 b(Dig1)42
-b(=)h(7)86 b(#)44 b(Individual)39 b(precision)h(for)i(axis)g(1)227
-849 y(#)131 b(Dig2)42 b(=)h(7)86 b(#)44 b(Individual)39
-b(precision)h(for)i(axis)g(2)227 949 y(#)131 b(Digits)41
-b(=)i(7)87 b(#)43 b(Default)e(formatting)e(precision)227
-1049 y(#)131 b(Fmt1)42 b(=)h("hms.1")84 b(#)43 b(Format)e(specifier)f
-(for)i(axis)g(1)227 1148 y(#)131 b(Fmt2)42 b(=)h("dms")85
-b(#)43 b(Format)e(specifier)f(for)i(axis)g(2)227 1248
-y(#)131 b(Dir1)42 b(=)h(0)86 b(#)44 b(Plot)e(axis)g(1)h(in)f(reverse)f
-(direction)f(\(hint\))227 1348 y(#)131 b(Dir2)42 b(=)h(1)86
-b(#)44 b(Plot)e(axis)g(2)h(in)f(conventional)d(direction)h(\(hint\))227
-1447 y(#)131 b(Presrv)41 b(=)i(0)87 b(#)43 b(Don't)e(preserve)g(target)
-g(axes)227 1547 y(#)131 b(Permut)41 b(=)i(1)87 b(#)43
-b(Axes)f(may)g(be)h(permuted)d(to)j(match)227 1646 y(#)131
-b(MinAx)41 b(=)i(2)87 b(#)43 b(Minimum)e(number)g(of)i(axes)f(to)g
-(match)227 1746 y(#)131 b(MaxAx)41 b(=)i(2)87 b(#)43
-b(Maximum)e(number)g(of)i(axes)f(to)g(match)227 1846
-y(#)131 b(MchEnd)41 b(=)i(0)87 b(#)43 b(Match)e(initial)g(target)g
-(axes)227 1945 y(#)131 b(Prm1)42 b(=)h(1)86 b(#)44 b(Axis)e(1)h(not)f
-(permuted)227 2045 y(#)131 b(Prm2)42 b(=)h(2)86 b(#)44
-b(Axis)e(2)h(not)f(permuted)402 2145 y(Ax1)g(=)87 b(#)43
-b(Axis)f(number)f(1)532 2244 y(Begin)h(SkyAxis)84 b(#)43
-b(Celestial)d(coordinate)g(axis)227 2344 y(#)392 b(RefCnt)41
-b(=)i(1)87 b(#)43 b(Count)f(of)h(active)e(Object)g(pointers)227
-2443 y(#)392 b(Nobj)42 b(=)h(2)87 b(#)43 b(Count)f(of)g(active)g
-(Objects)e(in)j(same)f(class)532 2543 y(IsA)h(Object)84
-b(#)44 b(Astrometry)39 b(Object)227 2643 y(#)392 b(Label)42
-b(=)h("Angle)e(on)i(Sky")85 b(#)43 b(Axis)f(Label)227
-2742 y(#)392 b(Symbol)41 b(=)i("delta")85 b(#)43 b(Axis)f(symbol)227
-2842 y(#)392 b(Unit)42 b(=)h("ddd:mm:ss")83 b(#)43 b(Axis)f(units)227
-2942 y(#)392 b(Digits)41 b(=)i(7)87 b(#)43 b(Default)e(formatting)e
-(precision)227 3041 y(#)392 b(Format)41 b(=)i("dms")86
-b(#)43 b(Format)e(specifier)227 3141 y(#)392 b(Dirn)42
-b(=)h(1)87 b(#)43 b(Plot)f(in)h(conventional)38 b(direction)532
-3240 y(IsA)43 b(Axis)85 b(#)43 b(Coordinate)d(axis)227
-3340 y(#)392 b(Format)41 b(=)i("dms")86 b(#)43 b(Format)e(specifier)227
-3440 y(#)392 b(IsLat)42 b(=)h(0)87 b(#)43 b(Longitude)d(axis)i(\(not)f
-(latitude\))227 3539 y(#)392 b(AsTime)41 b(=)i(0)87 b(#)43
-b(Display)e(values)g(as)i(angles)e(\(not)h(times\))532
-3639 y(End)h(SkyAxis)402 3739 y(Ax2)f(=)87 b(#)43 b(Axis)f(number)f(2)
-532 3838 y(Begin)h(SkyAxis)84 b(#)43 b(Celestial)d(coordinate)g(axis)
-227 3938 y(#)392 b(RefCnt)41 b(=)i(1)87 b(#)43 b(Count)f(of)h(active)e
-(Object)g(pointers)227 4037 y(#)392 b(Nobj)42 b(=)h(2)87
-b(#)43 b(Count)f(of)g(active)g(Objects)e(in)j(same)f(class)532
-4137 y(IsA)h(Object)84 b(#)44 b(Astrometry)39 b(Object)227
-4237 y(#)392 b(Label)42 b(=)h("Angle)e(on)i(Sky")85 b(#)43
-b(Axis)f(Label)227 4336 y(#)392 b(Symbol)41 b(=)i("delta")85
-b(#)43 b(Axis)f(symbol)227 4436 y(#)392 b(Unit)42 b(=)h("ddd:mm:ss")83
-b(#)43 b(Axis)f(units)227 4536 y(#)392 b(Digits)41 b(=)i(7)87
-b(#)43 b(Default)e(formatting)e(precision)227 4635 y(#)392
-b(Format)41 b(=)i("dms")86 b(#)43 b(Format)e(specifier)227
-4735 y(#)392 b(Dirn)42 b(=)h(1)87 b(#)43 b(Plot)f(in)h(conventional)38
-b(direction)532 4834 y(IsA)43 b(Axis)85 b(#)43 b(Coordinate)d(axis)227
-4934 y(#)392 b(Format)41 b(=)i("dms")86 b(#)43 b(Format)e(specifier)227
-5034 y(#)392 b(IsLat)42 b(=)h(0)87 b(#)43 b(Longitude)d(axis)i(\(not)f
-(latitude\))227 5133 y(#)392 b(AsTime)41 b(=)i(0)87 b(#)43
-b(Display)e(values)g(as)i(angles)e(\(not)h(times\))532
-5233 y(End)h(SkyAxis)271 5333 y(IsA)f(Frame)85 b(#)43
-b(Coordinate)d(system)h(description)402 5432 y(System)g(=)i("FK4-NO-E")
-83 b(#)43 b(Celestial)d(coordinate)f(system)j(type)402
-5532 y(Epoch)f(=)i(1958)86 b(#)43 b(Besselian)d(epoch)h(of)i
-(observation)227 5631 y(#)131 b(Eqnox)41 b(=)i(1950)86
-b(#)43 b(Besselian)d(epoch)h(of)i(mean)f(equinox)p eop
-end
-%%Page: 134 144
-TeXDict begin 134 143 bop 0 52 a FG(134)1228 b Fz(15)92
-b(SA)-10 b(VING)30 b(AND)h(RESTORING)e(OBJECTS)g(\(CHANNELS\))271
-351 y Ft(End)42 b(SkyFrame)0 633 y Fw(15.10)112 b(Con)m(trolling)38
-b(Commen)m(ting)0 847 y FG(Another)g(w)m(a)m(y)g(of)g(con)m(trolling)i
-(output)e(from)f(a)h(Channel)f(is)h Fx(via)g FG(the)g(b)s(o)s(olean)f
-(\(in)m(teger\))j(Commen)m(t)e(at-)0 960 y(tribute,)32
-b(whic)m(h)e(con)m(trols)j(whether)e(commen)m(ts)h(are)f(app)s(ended)f
-(to)i(describ)s(e)e(the)i(purp)s(ose)d(of)i(eac)m(h)i(v)-5
-b(alue.)0 1073 y(Commen)m(t)33 b(has)g(the)h(v)-5 b(alue)33
-b(1)h(b)m(y)f(default)g(but,)h(if)f(set)h(to)g(zero,)h(will)e(suppress)
-e(these)j(commen)m(ts.)50 b(This)32 b(is)0 1186 y(normally)f
-(appropriate)f(only)g(if)h(y)m(ou)g(wish)e(to)i(minimise)g(the)f(amoun)
-m(t)h(of)f(output,)h(for)f(example:)262 1404 y Ft(CALL)41
-b(AST_SET\()g(CHANNEL,)f('Full=-1,)g(Comment=0',)f(STATUS)i(\))262
-1504 y(NOBJ)g(=)j(AST_WRITE\()39 b(CHANNEL,)h(SKYFRAME,)g(STATUS)h(\))0
-1735 y FG(migh)m(t)31 b(result)f(in)g(the)h(follo)m(wing)h(more)e
-(compact)i(output:)271 1954 y Ft(Begin)41 b(SkyFrame)402
-2054 y(Naxes)g(=)i(2)402 2153 y(Ax1)f(=)532 2253 y(Begin)g(SkyAxis)532
-2352 y(End)h(SkyAxis)402 2452 y(Ax2)f(=)532 2552 y(Begin)g(SkyAxis)532
-2651 y(End)h(SkyAxis)271 2751 y(IsA)f(Frame)402 2851
-y(System)f(=)i("FK4-NO-E")402 2950 y(Epoch)e(=)i(1958)271
-3050 y(End)f(SkyFrame)0 3332 y Fw(15.11)112 b(Editing)38
-b(T)-9 b(extual)37 b(Output)0 3546 y FG(The)42 b(safest)i(advice)f(ab)s
-(out)g(editing)h(the)f(textual)h(output)e(from)g(AST)p
-Fy(_)p FG(WRITE)g(\(or)h(AST)p Fy(_)p FG(SHO)m(W\))f(is)0
-3658 y(\\don't!"|unless)31 b(y)m(ou)g(kno)m(w)f(what)g(y)m(ou)h(are)g
-(doing.)0 3814 y(Ha)m(ving)36 b(giv)m(en)h(that)e(w)m(arning,)i(ho)m(w)
-m(ev)m(er,)h(it)e(is)f(sometimes)h(p)s(ossible)f(to)h(mak)m(e)g(c)m
-(hanges)g(to)g(the)g(text,)h(or)0 3926 y(ev)m(en)24 b(to)g(write)f(en)m
-(tire)h(Ob)5 b(ject)23 b(descriptions)g(from)g(scratc)m(h,)j(and)c(to)i
-(read)f(the)h(results)f(bac)m(k)g(in)g(to)h(construct)0
-4039 y(new)34 b(Ob)5 b(jects.)52 b(Normally)-8 b(,)37
-b(simple)e(c)m(hanges)g(to)g(n)m(umerical)g(v)-5 b(alues)35
-b(are)f(safest,)j(but)c(b)s(e)h(a)m(w)m(are)i(that)f(this)0
-4152 y(is)j(a)h(bac)m(k)g(do)s(or)e(metho)s(d)h(of)g(creating)i(Ob)5
-b(jects,)40 b(so)e(y)m(ou)h(are)f(on)h(y)m(our)f(o)m(wn!)64
-b(There)37 b(are)i(a)f(n)m(um)m(b)s(er)f(of)0 4265 y(p)s(oten)m(tial)32
-b(pitfalls.)41 b(In)30 b(particular:)136 4497 y Fu(\017)46
-b FG(AST)p Fy(_)p FG(READ)38 b(is)g(in)m(tended)g(for)g(retrieving)i
-(data)e(written)h(b)m(y)f(AST)p Fy(_)p FG(WRITE)f(and)h(not)g(for)g
-(read-)227 4610 y(ing)e(data)h(input)d(b)m(y)i(h)m(umans.)56
-b(As)35 b(suc)m(h,)i(the)f(data)h(v)-5 b(alidation)37
-b(pro)m(vided)e(is)h(v)m(ery)g(limited)g(and)f(is)227
-4723 y(certainly)e(not)f(fo)s(olpro)s(of.)44 b(This)31
-b(mak)m(es)h(it)g(quite)g(easy)g(to)h(construct)f(Ob)5
-b(jects)31 b(that)i(are)e(in)m(ternally)227 4836 y(inconsisten)m(t)37
-b(b)m(y)e(this)h(means.)56 b(In)34 b(con)m(trast,)39
-b(the)c(normal)h(programming)f(in)m(terface)i(incorp)s(orates)227
-4948 y(n)m(umerous)29 b(c)m(hec)m(ks)h(designed)f(to)h(mak)m(e)g(it)g
-(imp)s(ossible)f(to)h(construct)g(in)m(v)-5 b(alid)29
-b(Ob)5 b(jects.)41 b(Y)-8 b(ou)29 b(should)227 5061 y(not)f
-(necessarily)h(think)f(y)m(ou)g(ha)m(v)m(e)h(found)e(a)h(bug)f(if)h(y)m
-(our)g(c)m(hanges)h(to)g(an)e(Ob)5 b(ject's)29 b(textual)g(descrip-)227
-5174 y(tion)i(fail)g(to)g(pro)s(duce)f(the)g(results)g(y)m(ou)h(exp)s
-(ected!)136 5354 y Fu(\017)46 b FG(In)24 b(man)m(y)i(instances)f(the)g
-(names)g(asso)s(ciated)h(with)f(v)-5 b(alues)25 b(in)g(textual)h
-(output)f(will)g(corresp)s(ond)f(with)227 5467 y(Ob)5
-b(ject)31 b(attributes.)43 b(Sometimes,)32 b(ho)m(w)m(ev)m(er,)g(these)
-g(names)e(ma)m(y)i(di\013er)e(from)h(the)g(attribute)g(name.)227
-5580 y(This)f(is)h(mainly)f(b)s(ecause)h(of)g(length)f(restrictions)i
-(imp)s(osed)e(b)m(y)g(other)h(common)g(external)g(formats,)227
-5693 y(suc)m(h)f(as)h(FITS)f(headers.)40 b(Some)30 b(of)h(the)f(names)h
-(used)e(do)i(not)f(corresp)s(ond)f(with)h(attributes)h(at)g(all.)p
-eop end
-%%Page: 135 145
-TeXDict begin 135 144 bop 0 52 a Fz(15.12)93 b(Mixing)31
-b(Ob)5 b(jects)30 b(with)g(other)h(T)-8 b(ext)2075 b
-FG(135)136 351 y Fu(\017)46 b FG(It)39 b(is)g(safest)g(to)g(c)m(hange)h
-(single)f(n)m(umerical)g(or)g(string)f(v)-5 b(alues.)66
-b(Bew)m(are)40 b(of)f(c)m(hanging)g(the)g(size)g(or)227
-464 y(shap)s(e)34 b(of)h(Ob)5 b(jects)35 b(\()p Fx(e.g.)f
-FG(the)h(n)m(um)m(b)s(er)e(of)i(axes)h(in)e(a)h(F)-8
-b(rame\).)55 b(Often,)36 b(these)f(v)-5 b(alues)35 b(m)m(ust)g(matc)m
-(h)227 577 y(others)30 b(stored)g(elsewhere)g(within)f(the)h(Ob)5
-b(ject)30 b(and)f(c)m(hanging)i(them)e(in)h(a)g(haphazard)f(fashion)g
-(will)227 690 y(not)i(pro)s(duce)e(useful)h(results.)136
-883 y Fu(\017)46 b FG(Be)33 b(w)m(ary)g(ab)s(out)f(un-commen)m(ting)h
-(default)f(v)-5 b(alues.)47 b(Sometimes)33 b(this)g(will)f(w)m(ork,)i
-(but)d(often)i(these)227 996 y(v)-5 b(alues)30 b(are)g(deriv)m(ed)g
-(from)f(other)h(Ob)5 b(jects)30 b(stored)f(more)h(deeply)g(in)f(the)h
-(structure)f(and)g(the)h(prop)s(er)227 1109 y(place)i(to)f(insert)f(a)h
-(new)f(v)-5 b(alue)30 b(is)h(not)f(where)g(the)h(default)f(itself)i
-(app)s(ears.)0 1411 y Fw(15.12)112 b(Mixing)39 b(Ob)6
-b(jects)38 b(with)f(other)g(T)-9 b(ext)0 1636 y FG(By)42
-b(default,)j(when)c(y)m(ou)h(use)f(AST)p Fy(_)p FG(READ)g(to)i(read)e
-(from)h(a)g(basic)g(Channel)f(\()p Fu(x)p FG(15.4\),)47
-b(it)42 b(is)g(assumed)0 1749 y(that)d(y)m(ou)f(are)g(reading)g(a)h
-(stream)f(of)g(text)h(con)m(taining)h(only)e(AST)f(Ob)5
-b(jects,)40 b(whic)m(h)e(follo)m(w)h(eac)m(h)g(other)0
-1862 y(end-to-end.)44 b(If)30 b(an)m(y)i(extraneous)g(input)e(data)i
-(are)f(encoun)m(tered)h(whic)m(h)f(do)g(not)h(app)s(ear)e(to)i(form)f
-(part)g(of)0 1975 y(the)f(textual)h(description)e(of)h(an)f(Ob)5
-b(ject,)31 b(then)e(an)g(error)g(will)h(result.)41 b(In)29
-b(particular,)h(the)g(\014rst)e(input)h(line)0 2088 y(m)m(ust)j(iden)m
-(tify)h(the)f(start)h(of)f(an)g(Ob)5 b(ject)33 b(description,)g(so)f(y)
-m(ou)h(cannot)g(start)f(reading)h(half)f(w)m(a)m(y)h(through)0
-2201 y(an)d(Ob)5 b(ject.)0 2366 y(Sometimes,)43 b(ho)m(w)m(ev)m(er,)g
-(y)m(ou)d(ma)m(y)g(w)m(an)m(t)h(to)f(store)g(AST)f(Ob)5
-b(ject)40 b(descriptions)f(in)m(termixed)h(with)f(other)0
-2479 y(textual)e(data.)57 b(Y)-8 b(ou)36 b(can)g(do)f(this)h(b)m(y)f
-(setting)i(the)e(Channel's)g(b)s(o)s(olean)h(\(in)m(teger\))i(Skip)c
-(attribute)j(to)f(1.)0 2592 y(This)g(will)i(cause)f(ev)m(ery)h(read)f
-(to)h(skip)f(o)m(v)m(er)h(extraneous)g(data)f(un)m(til)h(the)f(start)h
-(of)f(a)g(new)g(AST)f(Ob)5 b(ject)0 2705 y(description,)28
-b(if)e(an)m(y)-8 b(,)29 b(is)e(found.)38 b(So)27 b(long)g(as)g(y)m(our)
-g(other)g(data)g(do)g(not)g(mimic)g(the)g(app)s(earance)g(of)g(an)f
-(AST)0 2818 y(Ob)5 b(ject)31 b(description,)f(the)h(t)m(w)m(o)g(sets)g
-(of)g(data)g(can)f(co-exist.)0 2983 y(F)-8 b(or)41 b(example,)i(b)m(y)d
-(setting)h(Skip)e(to)i(1,)i(the)d(follo)m(wing)h(complete)h(F)-8
-b(ortran)40 b(program)g(will)h(read)e(all)i(the)0 3096
-y(AST)27 b(Ob)5 b(jects)27 b(whose)g(descriptions)h(app)s(ear)f(in)g
-(the)g(source)h(of)g(this)f(do)s(cumen)m(t,)h(ignoring)g(the)f(other)h
-(text.)0 3209 y(AST)p Fy(_)p FG(SHO)m(W)i(is)g(used)g(to)h(displa)m(y)f
-(those)h(found:)262 3466 y Ft(INCLUDE)40 b('AST_PAR')262
-3566 y(INTEGER)g(CHANNEL,)g(OBJECT,)h(STATUS)262 3765
-y(STATUS)g(=)i(0)262 3864 y(CHANNEL)d(=)j(AST_CHANNEL\()c(AST_NULL,)h
-(AST_NULL,)g('Skip=1',)g(STATUS)h(\))44 3964 y(1)174
-b(OBJECT)41 b(=)i(AST_READ\()d(CHANNEL,)g(STATUS)h(\))262
-4064 y(IF)h(\()h(OBJECT)f(.NE.)f(AST__NULL)f(\))k(THEN)392
-4163 y(CALL)e(AST_SHOW\()e(OBJECT,)h(STATUS)g(\))392
-4263 y(CALL)h(AST_ANNUL\()e(OBJECT,)g(STATUS)h(\))392
-4363 y(GO)i(TO)g(1)262 4462 y(END)f(IF)262 4562 y(CALL)f(AST_ANNUL\()f
-(CHANNEL,)g(STATUS)h(\))262 4661 y(END)0 4964 y Fw(15.13)112
-b(Reading)39 b(Ob)6 b(jects)38 b(from)g(Files)0 5189
-y FG(Th)m(us)d(far,)i(w)m(e)g(ha)m(v)m(e)g(only)f(considered)g(the)g
-(default)g(b)s(eha)m(viour)g(of)g(a)g(Channel)f(in)h(reading)g(and)f
-(writing)0 5302 y(Ob)5 b(jects)30 b(through)e(a)i(program's)g(standard)
-f(input)f(and)h(output)h(streams.)40 b(W)-8 b(e)31 b(will)f(no)m(w)g
-(consider)f(ho)m(w)h(to)0 5415 y(access)i(Ob)5 b(jects)30
-b(stored)h(in)f(\014les)g(more)g(directly)-8 b(.)0 5580
-y(Because)37 b(the)g(AST)e(library)g(is)i(designed)e(to)i(b)s(e)f(used)
-f(from)g(more)h(than)g(one)h(language,)i(it)d(has)g(to)h(b)s(e)e(a)0
-5693 y(little)g(careful)e(ab)s(out)f(reading)h(and)g(writing)f(to)i
-(\014les.)48 b(This)32 b(is)h(due)f(to)i(the)f(incompatibilities)i
-(that)e(often)p eop end
-%%Page: 136 146
-TeXDict begin 136 145 bop 0 52 a FG(136)1228 b Fz(15)92
-b(SA)-10 b(VING)30 b(AND)h(RESTORING)e(OBJECTS)g(\(CHANNELS\))0
-351 y FG(exist)e(b)s(et)m(w)m(een)g(the)g(\014le)g(I/O)f(facilities)j
-(pro)m(vided)d(b)m(y)g(di\013eren)m(t)h(languages.)41
-b(F)-8 b(ortunately)g(,)30 b(this)c(ties)h(in)f(w)m(ell)0
-464 y(with)31 b(the)g(principle)f(that)i(AST)e(should)g(also)i(b)s(e)e
-(indep)s(enden)m(t)g(of)h(an)m(y)h(particular)f(data)h(storage)g
-(system,)0 577 y(whic)m(h)e(w)m(e)h(men)m(tion)g(again)g(in)f
-Fu(x)p FG(15.15.)0 766 y(What)25 b(this)f(means)g(in)g(practice)i(is)e
-(that)h(y)m(ou)g(m)m(ust)f(pro)m(vide)h(some)f(simple)h(F)-8
-b(ortran)25 b(routines)f(that)h(p)s(erform)0 878 y(the)31
-b(actual)i(transfer)d(of)h(data)h(to)g(and)e(from)h(\014les)g(and)f
-(similar)i(external)g(data)f(stores.)44 b(The)30 b(routines)h(y)m(ou)0
-991 y(pro)m(vide)26 b(are)g(supplied)e(as)i(the)g(source)g(and/or)g
-(sink)f(routine)h(argumen)m(ts)g(to)h(AST)p Fy(_)p FG(CHANNEL)d(when)h
-(y)m(ou)0 1104 y(create)32 b(a)f(Channel)e(\()p Fu(x)p
-FG(15.2\).)44 b(An)30 b(example)h(is)f(the)h(b)s(est)f(w)m(a)m(y)h(to)g
-(illustrate)h(this.)0 1293 y(Consider)g(the)i(follo)m(wing)g(simple)f
-(subroutine)f(called)j(SOUR)m(CE.)d(It)h(reads)g(a)h(single)g(line)f
-(of)g(text)h(from)f(a)0 1406 y(F)-8 b(ortran)28 b(I/O)g(unit)f(and)g
-(then)g(calls)i(AST)p Fy(_)p FG(PUTLINE)d(to)i(pass)f(it)h(to)h(the)f
-(AST)e(library)-8 b(,)29 b(together)g(with)e(its)0 1519
-y(length.)41 b(It)31 b(sets)f(this)h(length)f(to)i(b)s(e)d(negativ)m(e)
-k(if)d(there)h(is)f(no)g(more)h(input:)262 1845 y Ft(SUBROUTINE)39
-b(SOURCE\()i(STATUS)g(\))262 1944 y(INTEGER)f(STATUS)262
-2044 y(CHARACTER)f(*)44 b(\()f(200)f(\))h(BUFFER)262
-2243 y(READ\()e(1,)i('\(A\)',)e(END)h(=)h(99)g(\))g(BUFFER)262
-2343 y(CALL)e(AST_PUTLINE\()e(BUFFER,)i(LEN\()h(BUFFER)f(\),)i(STATUS)e
-(\))262 2443 y(RETURN)44 2642 y(99)130 b(CALL)41 b(AST_PUTLINE\()e
-(BUFFER,)i(-1,)h(STATUS)f(\))262 2742 y(END)0 3081 y
-FG(Our)29 b(main)h(program)h(migh)m(t)g(then)f(lo)s(ok)h(something)g
-(lik)m(e)g(this)f(\(omitting)j(error)c(c)m(hec)m(king)k(for)d(brevit)m
-(y\):)262 3407 y Ft(EXTERNAL)40 b(SOURCE)262 3607 y(...)0
-3806 y(*)87 b(Open)42 b(the)g(input)g(file.)262 3906
-y(OPEN\()f(UNIT)h(=)h(1,)g(FILE)f(=)h('infile.ast',)38
-b(STATUS)j(=)i('OLD')f(\))0 4105 y(*)87 b(Create)41 b(the)h(Channel)f
-(and)h(read)g(an)h(Object)e(from)h(it.)262 4204 y(CHANNEL)e(=)j
-(AST_CHANNEL\()c(SOURCE,)i(AST_NULL,)f(')j(',)f(STATUS)g(\))262
-4304 y(OBJECT)f(=)i(AST_READ\()d(CHANNEL,)g(STATUS)h(\))262
-4503 y(...)0 4703 y(*)87 b(Annul)41 b(the)i(Channel)d(and)j(close)e
-(the)i(file)e(when)h(done.)262 4802 y(CALL)f(AST_ANNUL\()f(CHANNEL,)g
-(STATUS)h(\))262 4902 y(CLOSE\()g(1)i(\))0 5241 y FG(Here,)33
-b(w)m(e)f(\014rst)f(op)s(en)h(the)g(required)f(input)g(\014le.)45
-b(W)-8 b(e)33 b(then)e(pass)h(the)g(name)g(of)g(our)f(SOUR)m(CE)g
-(routine)h(as)0 5354 y(the)g(\014rst)e(argumen)m(t)i(to)g(AST)p
-Fy(_)p FG(CHANNEL)f(when)f(creating)j(a)f(new)f(Channel)f(\(ensuring)h
-(that)h(SOUR)m(CE)0 5467 y(also)f(app)s(ears)f(in)g(an)h(EXTERNAL)f
-(statemen)m(t\).)43 b(When)30 b(w)m(e)h(read)f(an)g(Ob)5
-b(ject)31 b(from)f(this)g(Channel)g(using)0 5580 y(AST)p
-Fy(_)p FG(READ,)k(the)g(SOUR)m(CE)f(routine)h(will)g(b)s(e)f(called)i
-(to)g(obtain)f(the)g(textual)h(data)g(from)e(the)h(\014le,)h(the)0
-5693 y(end-of-\014le)c(b)s(eing)f(detected)h(when)f(it)h(yields)f(a)h
-(negativ)m(e)h(line)f(length.)p eop end
-%%Page: 137 147
-TeXDict begin 137 146 bop 0 52 a Fz(15.14)93 b(W)-8 b(riting)32
-b(Ob)5 b(jects)30 b(to)h(Files)2379 b FG(137)0 351 y
-Fw(15.14)112 b(W)-9 b(riting)37 b(Ob)6 b(jects)38 b(to)f(Files)0
-567 y FG(W)-8 b(e)34 b(can)f(also)h(write)e(a)i(SINK)d(routine,)j(that)
-f(obtains)g(a)g(line)g(of)g(output)f(text)i(from)e(the)h(AST)f(library)
-h(b)m(y)0 679 y(calling)g(AST)p Fy(_)p FG(GETLINE)d(and)i(then)f
-(writes)h(it)g(to)g(a)g(\014le.)45 b(W)-8 b(e)33 b(can)f(use)f(this)h
-(in)f(basically)j(the)d(same)h(w)m(a)m(y)0 792 y(as)f(the)f(SOUR)m(CE)g
-(routine)g(in)g(the)h(previous)f(section)h(\()p Fu(x)p
-FG(15.13\):)262 1017 y Ft(SUBROUTINE)39 b(SINK\()i(STATUS)h(\))262
-1116 y(INTEGER)e(L,)j(STATUS)262 1216 y(CHARACTER)c(*)44
-b(\()f(200)f(\))h(BUFFER)262 1415 y(CALL)e(AST_GETLINE\()e(BUFFER,)i
-(L,)i(STATUS)e(\))262 1515 y(IF)h(\()h(L)h(.GT.)e(0)h(\))g(WRITE\()e
-(2,)i('\(A\)')e(\))i(BUFFER\()e(:)i(L)g(\))262 1714 y(END)0
-1952 y FG(In)e(this)h(case,)k(our)41 b(main)g(program)h(w)m(ould)f
-(supply)g(the)h(name)f(of)h(this)g(SINK)f(routine)g(as)h(the)g(second)0
-2065 y(argumen)m(t)30 b(to)g(AST)p Fy(_)p FG(CHANNEL)f(\(ensuring)g
-(that)h(it)g(also)h(app)s(ears)e(in)g(an)h(EXTERNAL)f(statemen)m(t\),)j
-(as)0 2177 y(follo)m(ws:)262 2402 y Ft(EXTERNAL)40 b(SINK)262
-2601 y(...)0 2800 y(*)87 b(Open)42 b(the)g(output)f(file.)262
-2900 y(OPEN\()g(UNIT)h(=)h(2,)g(FILE)f(=)h('outfile.ast',)38
-b(STATUS)j(=)i('NEW')f(\))0 3099 y(*)87 b(Create)41 b(a)i(Channel)e
-(and)h(write)g(an)g(Object)f(to)i(it.)262 3199 y(CHANNEL)d(=)j
-(AST_CHANNEL\()c(SOURCE,)i(SINK,)g(')i(',)g(STATUS)e(\))262
-3298 y(NOBJ)g(=)j(AST_WRITE\()39 b(CHANNEL,)h(OBJECT,)h(STATUS)g(\))262
-3498 y(...)0 3697 y(*)87 b(Annul)41 b(the)i(Channel)d(and)j(close)e
-(the)i(file)e(when)h(done.)262 3797 y(CALL)f(AST_ANNUL\()f(CHANNEL,)g
-(STATUS)h(\))262 3896 y(CLOSE\()g(2)i(\))0 4134 y FG(Note)36
-b(that)f(w)m(e)g(can)g(sp)s(ecify)f(a)h(source)g(and/or)f(a)h(sink)f
-(routine)h(for)f(the)h(Channel,)g(and)f(that)h(these)g(ma)m(y)0
-4247 y(use)d(either)h(the)f(same)h(\014le,)g(or)f(di\013eren)m(t)g
-(\014les)h(according)g(to)g(whether)e(w)m(e)i(are)f(reading)h(or)f
-(writing.)46 b(AST)0 4360 y(has)31 b(no)h(kno)m(wledge)g(of)g(the)f
-(underlying)g(\014le)g(system,)h(nor)f(of)h(\014le)g(p)s(ositioning.)44
-b(It)31 b(just)g(reads)h(and)e(writes)0 4473 y(sequen)m(tially)-8
-b(.)42 b(If)27 b(y)m(ou)h(wish,)f(for)g(example,)i(to)f(rep)s(osition)g
-(a)g(\014le)f(at)h(the)g(b)s(eginning)f(in)g(b)s(et)m(w)m(een)h(reads)f
-(and)0 4585 y(writes,)37 b(then)e(this)g(can)g(b)s(e)g(done)g(directly)
-h(\(and)f(completely)i(indep)s(enden)m(tly)d(of)i(AST\))f(using)f
-(standard)0 4698 y(F)-8 b(ortran)31 b(statemen)m(ts.)0
-4855 y(If)f(an)h(error)g(o)s(ccurs)f(in)h(y)m(our)g(source)g(or)g(sink)
-g(routine,)g(y)m(ou)g(can)g(comm)m(unicate)i(this)e(to)h(the)f(AST)f
-(library)0 4968 y(b)m(y)g(setting)g(the)g(ST)-8 b(A)g(TUS)30
-b(argumen)m(t)g(to)g(an)m(y)g(error)g(v)-5 b(alue.)41
-b(This)29 b(will)h(immediately)h(terminate)g(the)f(read)0
-5081 y(or)g(write)h(op)s(eration.)0 5365 y Fw(15.15)112
-b(Reading)39 b(and)f(W)-9 b(riting)37 b(Ob)6 b(jects)38
-b(to)f(other)g(Places)0 5580 y FG(It)44 b(should)f(b)s(e)g(ob)m(vious)h
-(from)f(the)h(ab)s(o)m(v)m(e)h(\()p Fu(x)p FG(15.13)i(and)c
-Fu(x)p FG(15.14\))j(that)f(a)f(Channel's)f(source)h(and)f(sink)0
-5693 y(routines)31 b(pro)m(vide)g(a)h(\015exible)f(means)g(of)g(in)m
-(tercepting)i(textual)f(data)g(that)g(describ)s(es)e(AST)g(Ob)5
-b(jects)32 b(as)f(it)p eop end
-%%Page: 138 148
-TeXDict begin 138 147 bop 0 52 a FG(138)1228 b Fz(15)92
-b(SA)-10 b(VING)30 b(AND)h(RESTORING)e(OBJECTS)g(\(CHANNELS\))0
-351 y FG(\015o)m(ws)h(in)f(and)g(out)h(of)g(y)m(our)g(program.)40
-b(In)29 b(fact,)i(y)m(ou)f(migh)m(t)h(lik)m(e)g(to)f(regard)g(a)g
-(Channel)f(simply)g(as)h(a)g(\014lter)0 464 y(for)g(con)m(v)m(erting)i
-(AST)d(Ob)5 b(jects)30 b(to)g(and)g(from)f(a)i(stream)f(of)g(text)h
-(whic)m(h)f(is)g(then)f(handled)h(b)m(y)f(y)m(our)h(source)0
-577 y(and)g(sink)g(routines,)g(where)g(the)h(real)g(I/O)f(o)s(ccurs.)0
-740 y(This)36 b(giv)m(es)i(y)m(ou)f(the)g(abilit)m(y)i(to)e(store)g
-(AST)g(Ob)5 b(jects)36 b(in)h(virtually)g(an)m(y)g(data)h(system,)h(so)
-e(long)g(as)g(y)m(ou)0 853 y(can)42 b(con)m(v)m(ert)h(a)f(stream)g(of)f
-(text)i(in)m(to)f(something)g(that)g(can)g(b)s(e)f(stored)g(\(it)i
-(need)e(no)g(longer)h(b)s(e)f(text\))0 966 y(and)32 b(retriev)m(e)i(it)
-f(again.)48 b(There)32 b(is)g(generally)i(no)e(need)g(to)h(retain)g
-(commen)m(ts.)48 b(Other)32 b(p)s(ossibilities,)i(suc)m(h)0
-1079 y(as)39 b(in)m(ter-pro)s(cess)h(and)e(net)m(w)m(ork)i(comm)m
-(unication,)j(could)c(also)h(b)s(e)f(implemen)m(ted)g
-Fx(via)g FG(source)g(and)g(sink)0 1191 y(functions)30
-b(in)g(basically)i(the)e(same)h(w)m(a)m(y)-8 b(.)p eop
-end
-%%Page: 139 149
-TeXDict begin 139 148 bop 3643 52 a FG(139)0 351 y FA(16)135
-b(Storing)45 b(AST)f(Ob)7 b(jects)46 b(in)f(FITS)e(Headers)j
-(\(FitsChans\))0 597 y FG(A)39 b(FITS)f(header)h(is)g(a)h(sequence)f
-(of)g(80-c)m(haracter)j(strings,)f(formatted)f(according)g(to)g
-(particular)f(rules)0 710 y(de\014ned)32 b(b)m(y)g(the)h(Flexible)h
-(Image)g(T)-8 b(ransp)s(ort)31 b(System)i(\(FITS\).)g(FITS)2515
-677 y Fv(23)2622 710 y FG(is)f(a)h(widely-used)g(standard)f(for)0
-823 y(data)g(in)m(terc)m(hange)i(in)d(astronom)m(y)i(and)e(has)g(also)i
-(b)s(een)e(adopted)h(as)g(a)g(data)g(pro)s(cessing)g(format)g(in)f
-(some)0 936 y(astronomical)h(data)f(reduction)f(systems.)41
-b(The)29 b(individual)h(80-c)m(haracter)j(strings)d(in)g(a)h(FITS)e
-(header)h(are)0 1049 y(usually)g(called)i Fx(c)-5 b(ar)g(ds)32
-b FG(or)e Fx(he)-5 b(ader)35 b(c)-5 b(ar)g(ds)32 b FG(\(for)e(en)m
-(tirely)i(anac)m(hronistic)g(reasons\).)0 1205 y(A)23
-b(sequence)h(of)f(FITS)g(cards)g(app)s(ears)f(as)i(a)g(header)f(at)h
-(the)f(start)h(of)f(ev)m(ery)h(FITS)f(data)h(\014le,)h(and)d(sometimes)
-0 1318 y(also)38 b(at)h(other)f(p)s(oin)m(ts)f(within)g(it,)j(and)d(is)
-g(used)g(to)h(pro)m(vide)g(ancillary)h(information)f(whic)m(h)f
-(quali\014es)g(or)0 1431 y(describ)s(es)c(the)h(main)g(arra)m(y)g(of)g
-(data)h(stored)f(in)f(the)h(\014le.)51 b(As)34 b(suc)m(h,)h(FITS)e
-(headers)g(are)i(prime)e(territory)0 1544 y(for)d(storing)h
-(information)g(ab)s(out)f(the)g(co)s(ordinate)h(systems)g(asso)s
-(ciated)h(with)e(data)h(held)f(in)g(FITS)g(\014les.)0
-1700 y(In)25 b(this)h(section,)i(w)m(e)f(will)f(examine)h(ho)m(w)f(to)h
-(store)f(information)h(in)e(FITS)h(headers)f(directly)i(in)f(the)g
-(form)f(of)0 1813 y(AST)h(Ob)5 b(jects|a)26 b(pro)s(cess)g(whic)m(h)h
-(is)f(supp)s(orted)f(b)m(y)h(a)h(sp)s(ecialised)g(class)g(of)f(Channel)
-g(called)i(a)e(FitsChan.)0 1926 y(Our)43 b(discussion)h(here)g(will)h
-(turn)e(out)h(to)h(b)s(e)f(a)h(transitional)g(step)g(that)f(emphasises)
-g(the)h(similarities)0 2038 y(b)s(et)m(w)m(een)39 b(a)f(FitsChan)g(and)
-g(a)g(Channel)g(\()p Fu(x)p FG(15\).)66 b(A)m(t)39 b(the)f(same)h
-(time,)i(it)e(will)f(prepare)g(us)f(for)h(the)g(next)0
-2151 y(section)30 b(\()p Fu(x)p FG(17\),)h(where)d(w)m(e)h(will)g
-(examine)g(ho)m(w)g(to)g(use)g(a)g(FitsChan)f(to)h(tac)m(kle)i(some)e
-(of)g(the)g(more)f(di\016cult)0 2264 y(problems)i(that)h(FITS)e
-(headers)h(can)h(presen)m(t.)0 2548 y Fw(16.1)112 b(The)38
-b(Nativ)m(e)f(FITS)h(Enco)s(ding)0 2762 y FG(As)43 b(it)h(turns)e(out,)
-48 b(w)m(e)43 b(are)h(not)g(the)f(\014rst)g(to)h(ha)m(v)m(e)h(though)m
-(t)f(of)f(storing)h(W)m(CS)f(information)h(in)f(FITS)0
-2875 y(headers.)59 b(In)36 b(fact,)j(the)e(original)h(FITS)d(standard)h
-(\(1981)j(vin)m(tage\))g(de\014ned)c(a)i(set)g(of)g(header)f(k)m(eyw)m
-(ords)0 2988 y(for)31 b(this)f(purp)s(ose)f(whic)m(h)i(ha)m(v)m(e)h(b)s
-(een)e(widely)h(used,)f(although)i(they)f(ha)m(v)m(e)h(pro)m(v)m(ed)f
-(to)s(o)g(limited)h(for)e(man)m(y)0 3101 y(practical)i(purp)s(oses.)0
-3257 y(A)m(t)43 b(the)g(time)g(of)f(writing,)k(a)c(n)m(um)m(b)s(er)f
-(of)i(di\013eren)m(t)g(w)m(a)m(ys)g(of)f(using)g(FITS)g(headers)g(for)g
-(storing)g(W)m(CS)0 3370 y(information)30 b(are)g(in)f(use,)h(most)g
-(\(although)g(not)g(all\))h(based)e(on)h(the)f(original)i(standard.)40
-b(W)-8 b(e)30 b(will)g(refer)g(to)0 3483 y(these)j(alternativ)m(e)h(w)m
-(a)m(ys)f(of)f(storing)h(the)f(information)g(as)h(FITS)e
-Fx(enc)-5 b(o)g(dings)33 b FG(but)f(will)g(defer)g(a)g(discussion)0
-3596 y(of)f(their)f(adv)-5 b(an)m(tages)32 b(and)e(limitations)i(un)m
-(til)f(the)f(next)h(section)g(\()p Fu(x)p FG(17\).)0
-3752 y(Here,)d(w)m(e)f(will)f(examine)h(ho)m(w)g(to)g(store)f(AST)g(Ob)
-5 b(jects)26 b(directly)h(in)f(FITS)g(headers.)39 b(In)25
-b(e\013ect,)k(this)d(de\014nes)0 3865 y(a)38 b(new)g(enco)s(ding,)i
-(whic)m(h)d(w)m(e)i(will)f(term)g(the)g Fx(native)h(enc)-5
-b(o)g(ding.)64 b FG(This)38 b(is)f(a)i(sp)s(ecial)f(kind)f(of)h(enco)s
-(ding,)0 3978 y(b)s(ecause)d(not)f(only)h(do)s(es)f(it)h(allo)m(w)h(us)
-e(to)h(asso)s(ciate)i(con)m(v)m(en)m(tional)g(W)m(CS)e(calibration)h
-(information)f(with)0 4091 y(FITS)k(data,)k(but)c(it)i(also)f(allo)m
-(ws)i(an)m(y)e(other)g(information)g(that)g(can)h(b)s(e)e(expressed)g
-(in)g(terms)h(of)g(AST)0 4204 y(Ob)5 b(jects)38 b(to)h(b)s(e)f(stored)g
-(as)g(w)m(ell.)65 b(In)38 b(fact,)j(the)d(nativ)m(e)i(enco)s(ding)e
-(pro)m(vides)g(us)g(with)f(facilities)k(roughly)0 4316
-y(analogous)35 b(to)f(those)f(of)h(the)f(Channel)g(\()p
-Fu(x)p FG(15\)|)p Fx(i.e.)h FG(a)g(lossless)g(w)m(a)m(y)g(of)g
-(transferring)e(AST)h(Ob)5 b(jects)33 b(from)0 4429 y(program)d(to)h
-(program|but)f(based)g(on)g(FITS)g(headers)g(instead)g(of)h
-(free-format)g(text.)0 4713 y Fw(16.2)112 b(The)38 b(FitsChan)h(Mo)s
-(del)0 4927 y FG(I/O)h(b)s(et)m(w)m(een)h(AST)f(Ob)5
-b(jects)40 b(and)f(FITS)h(headers)g(is)g(supp)s(orted)e(b)m(y)j(a)f(sp)
-s(ecialised)h(form)f(of)g(Channel)0 5040 y(called)28
-b(a)f(FitsChan.)40 b(A)27 b(FitsChan)g(con)m(tains)h(a)f(bu\013er)f
-(whic)m(h)g(ma)m(y)i(hold)e(an)m(y)i(n)m(um)m(b)s(er,)e(including)h
-(zero,)h(of)0 5153 y(FITS)k(header)g(cards.)48 b(This)32
-b(bu\013er)g(forms)g(a)h(w)m(orkspace)g(in)g(whic)m(h)f(y)m(ou)h(can)g
-(assem)m(ble)h(FITS)e(cards)g(and)0 5266 y(manipulate)f(them)f(b)s
-(efore)g(writing)g(them)h(out)f(to)h(a)g(FITS)f(\014le.)0
-5422 y(By)37 b(default,)i(when)d(a)i(FitsChan)f(is)g(\014rst)f
-(created,)k(it)d(con)m(tains)i(no)d(cards)h(and)g(there)g(are)g(four)f
-(w)m(a)m(ys)i(of)0 5535 y(inserting)30 b(cards)h(in)m(to)g(it:)p
-0 5607 1512 4 v 73 5661 a Fs(23)138 5693 y Fr(h)n
-(ttp://\014ts.gsfc.nasa.go)n(v/)p eop end
-%%Page: 140 150
-TeXDict begin 140 149 bop 0 52 a FG(140)889 b Fz(16)92
-b(STORING)29 b(AST)h(OBJECTS)f(IN)h(FITS)g(HEADERS)g(\(FITSCHANS\))111
-351 y FG(1.)46 b(Y)-8 b(ou)31 b(ma)m(y)g(add)f(cards)g(y)m(ourself,)h
-(one)g(at)g(a)f(time,)i(using)e(AST)p Fy(_)p FG(PUTFITS)e(\()p
-Fu(x)p FG(16.8\).)111 536 y(2.)46 b(Y)-8 b(ou)36 b(ma)m(y)f(add)f
-(cards)h(y)m(ourself,)h(supplying)e(all)i(cards)e(concatenated)j(in)m
-(to)f(a)f(single)h(string,)g(using)227 649 y(AST)p Fy(_)p
-FG(PUTCARDS.)29 b(\()p Fu(x)p FG(16.9\).)111 834 y(3.)46
-b(Y)-8 b(ou)27 b(ma)m(y)g(write)g(an)f(AST)g(Ob)5 b(ject)26
-b(to)h(the)g(FitsChan)f(\(using)g(AST)p Fy(_)p FG(WRITE\),)g(whic)m(h)g
-(will)h(ha)m(v)m(e)g(the)227 947 y(e\013ect)32 b(of)f(creating)g(new)f
-(cards)g(within)g(the)h(FitsChan)f(whic)m(h)g(describ)s(e)g(the)h(Ob)5
-b(ject)30 b(\()p Fu(x)p FG(16.5\).)111 1132 y(4.)46 b(Y)-8
-b(ou)43 b(ma)m(y)g(sp)s(ecify)f(a)g(source)h(routine)f(whic)m(h)g
-(reads)g(data)h(from)e(some)i(external)g(store)g(of)f(FITS)227
-1245 y(cards,)27 b(just)f(lik)m(e)i(the)f(source)f(asso)s(ciated)i
-(with)e(a)h(basic)g(Channel)e(\()p Fu(x)p FG(15.13\).)43
-b(If)26 b(y)m(ou)h(supply)e(a)h(source)227 1358 y(routine,)k(it)g(will)
-g(b)s(e)f(called)h(when)f(the)g(FitsChan)g(is)h(created)g(in)f(order)g
-(to)i(\014ll)e(it)h(with)f(an)g(initial)i(set)227 1471
-y(of)g(cards)f(\()p Fu(x)p FG(16.14\).)0 1722 y(There)g(are)h(also)g
-(three)g(w)m(a)m(ys)g(of)f(remo)m(ving)h(cards)g(from)f(a)g(FitsChan:)
-111 1974 y(1.)46 b(Y)-8 b(ou)31 b(ma)m(y)g(delete)h(cards)e(y)m
-(ourself,)h(one)f(at)i(a)e(time,)i(using)d(AST)p Fy(_)p
-FG(DELFITS)g(\()p Fu(x)p FG(16.13\).)111 2159 y(2.)46
-b(Y)-8 b(ou)37 b(ma)m(y)h(read)e(an)h(AST)f(Ob)5 b(ject)36
-b(from)g(the)h(FitsChan)g(\(using)f(AST)p Fy(_)p FG(READ\),)h(whic)m(h)
-f(will)h(ha)m(v)m(e)227 2272 y(the)31 b(e\013ect)h(of)e(remo)m(ving)h
-(those)g(cards)f(from)g(the)h(FitsChan)f(whic)m(h)g(describ)s(e)g(the)h
-(Ob)5 b(ject)30 b(\()p Fu(x)p FG(16.10\).)111 2457 y(3.)46
-b(Y)-8 b(ou)35 b(ma)m(y)h(sp)s(ecify)e(a)h(sink)f(routine)h(whic)m(h)f
-(writes)h(data)g(to)h(some)f(external)g(store)h(of)f(FITS)e(cards,)227
-2570 y(just)g(lik)m(e)h(the)f(sink)g(asso)s(ciated)i(with)d(a)i(basic)f
-(Channel)g(\()p Fu(x)p FG(15.14\).)51 b(If)33 b(y)m(ou)h(supply)d(a)j
-(sink)e(routine,)227 2683 y(it)i(will)f(b)s(e)g(called)h(when)e(the)i
-(FitsChan)f(is)g(deleted)h(in)f(order)f(to)i(write)g(out)f(an)m(y)h
-(FITS)e(cards)h(that)227 2795 y(remain)e(in)f(it)h(\()p
-Fu(x)p FG(16.14\).)0 3047 y(Note,)42 b(in)c(particular,)j(that)e
-(reading)f(an)h(AST)e(Ob)5 b(ject)39 b(from)f(a)h(FitsChan)f(is)g
-Fx(destructive.)65 b FG(That)38 b(is,)j(it)0 3160 y(deletes)31
-b(the)g(FITS)f(cards)g(that)h(describ)s(e)f(the)g(Ob)5
-b(ject.)41 b(The)30 b(reason)g(for)h(this)f(is)g(explained)h(in)f
-Fu(x)p FG(17.5.)0 3320 y(In)25 b(addition)h(to)h(the)f(ab)s(o)m(v)m(e,)
-i(y)m(ou)f(ma)m(y)f(also)h(read)f(individual)f(cards)h(from)f(a)h
-(FitsChan)g(using)g(the)g(function)0 3433 y(AST)p Fy(_)p
-FG(FINDFITS)k(\(whic)m(h)h(is)g(not)g(destructiv)m(e\).)44
-b(This)30 b(is)h(the)g(main)g(means)f(of)i(writing)e(out)i(FITS)e
-(cards)0 3546 y(if)f(y)m(ou)f(ha)m(v)m(e)i(not)f(supplied)e(a)i(sink)f
-(routine.)40 b(AST)p Fy(_)p FG(FINDFITS)28 b(also)i(pro)m(vides)e(a)h
-(means)g(of)f(searc)m(hing)i(for)0 3659 y(particular)36
-b(FITS)e(cards)h(\(b)m(y)h(k)m(eyw)m(ord,)h(for)e(example\))h(and)f
-(there)g(are)h(other)g(facilities)h(for)e(o)m(v)m(erwriting)0
-3772 y(cards)30 b(when)g(required)f(\()p Fu(x)p FG(16.13\).)0
-4061 y Fw(16.3)112 b(Creating)38 b(a)g(FitsChan)0 4280
-y FG(The)30 b(FitsChan)g(constructor)h(function,)f(AST)p
-Fy(_)p FG(FITSCHAN,)f(is)i(straigh)m(tforw)m(ard)g(to)g(use:)262
-4518 y Ft(INCLUDE)40 b('AST_PAR')262 4618 y(INTEGER)g(FITSCHAN,)g
-(STATUS)262 4817 y(STATUS)h(=)i(0)262 5016 y(...)262
-5216 y(FITSCHAN)d(=)j(AST_FITSCHAN\()38 b(AST_NULL,)i(AST_NULL,)g
-('Encoding=NATIVE)o(',)d(STATUS)k(\))0 5467 y FG(Here,)27
-b(w)m(e)f(ha)m(v)m(e)h(omitted)f(an)m(y)g(source)g(or)g(sink)f
-(functions)g(b)m(y)g(supplying)f(the)i(AST)p Fy(_)p FG(NULL)e(routine)i
-(for)f(the)0 5580 y(\014rst)f(t)m(w)m(o)i(argumen)m(ts)f(\(remem)m(b)s
-(er)f(to)i(include)e(the)h(AST)p Fy(_)p FG(P)-8 b(AR)24
-b(include)g(\014le)h(whic)m(h)g(con)m(tains)g(the)g(required)0
-5693 y(EXTERNAL)42 b(statemen)m(t)i(for)f(this)f(routine\).)77
-b(W)-8 b(e)44 b(ha)m(v)m(e)g(also)f(initialised)h(the)f(FitsChan's)f
-(Enco)s(ding)p eop end
-%%Page: 141 151
-TeXDict begin 141 150 bop 0 52 a Fz(16.4)93 b(Addressing)29
-b(Cards)g(in)h(a)h(FitsChan)2109 b FG(141)0 351 y(attribute)31
-b(to)h(NA)-8 b(TIVE.)31 b(This)e(indicates)j(that)f(w)m(e)g(will)g(b)s
-(e)f(using)g(the)h(nativ)m(e)h(enco)s(ding)e(\()p Fu(x)p
-FG(16.1\))k(to)d(store)0 464 y(and)i(retriev)m(e)i(Ob)5
-b(jects.)50 b(If)34 b(this)f(w)m(as)h(left)g(unsp)s(eci\014ed,)f(the)h
-(default)g(w)m(ould)f(dep)s(end)f(on)i(the)f(FitsChan's)0
-577 y(con)m(ten)m(ts.)45 b(An)31 b(attempt)h(is)f(made)g(to)h(use)f
-(whatev)m(er)h(enco)s(ding)f(app)s(ears)g(to)h(ha)m(v)m(e)g(b)s(een)f
-(used)f(previously)-8 b(.)0 690 y(F)g(or)31 b(an)f(empt)m(y)h
-(FitsChan,)g(the)f(default)h(is)f(NA)-8 b(TIVE,)31 b(but)f(it)h(do)s
-(es)f(no)g(harm)g(to)h(b)s(e)e(sure.)0 1022 y Fw(16.4)112
-b(Addressing)39 b(Cards)f(in)f(a)h(FitsChan)0 1261 y
-FG(Because)e(a)f(FitsChan)g(con)m(tains)h(an)f(ordered)f(sequence)h(of)
-g(header)f(cards,)i(a)f(mec)m(hanism)g(is)g(needed)g(for)0
-1374 y(addressing)d(them.)46 b(This)31 b(allo)m(ws)j(y)m(ou)f(to)g(sp)s
-(ecify)f(where)f(new)h(cards)g(are)h(to)g(b)s(e)e(added,)i(for)f
-(example,)h(or)0 1487 y(whic)m(h)d(card)g(is)h(to)g(b)s(e)f(deleted.)0
-1661 y(This)e(role)h(is)g(\014lled)f(b)m(y)g(the)h(FitsChan's)g(in)m
-(teger)h(Card)d(attribute,)j(whic)m(h)f(giv)m(es)g(the)g(index)f(of)h
-(the)g Fx(curr)-5 b(ent)0 1774 y(c)g(ar)g(d)37 b FG(in)d(the)h
-(FitsChan.)54 b(Y)-8 b(ou)36 b(can)f(nominate)g(an)m(y)h(card)f(y)m(ou)
-g(lik)m(e)h(to)g(b)s(e)e(curren)m(t,)i(simply)e(b)m(y)h(setting)h(a)0
-1887 y(new)30 b(v)-5 b(alue)31 b(for)f(the)g(Card)g(attribute,)h(for)f
-(example:)262 2171 y Ft(INTEGER)40 b(ICARD)262 2370 y(...)262
-2569 y(CALL)h(AST_SETI\()f(FITSCHAN,)g('Card',)h(ICARD,)g(STATUS)g(\))0
-2867 y FG(where)24 b(ICARD)h(con)m(tains)h(the)f(index)g(of)g(the)g
-(card)g(on)g(whic)m(h)f(y)m(ou)i(wish)e(to)h(op)s(erate)h(next.)39
-b(Some)25 b(functions)0 2980 y(will)36 b(up)s(date)g(the)g(Card)f
-(attribute)i(as)f(a)h(means)f(of)g(adv)-5 b(ancing)37
-b(through)e(the)h(sequence)h(of)f(cards,)h(when)0 3092
-y(reading)30 b(them)h(for)f(example,)h(or)g(to)g(indicate)g(whic)m(h)f
-(card)h(matc)m(hes)g(a)g(searc)m(h)g(criterion.)0 3267
-y(The)d(default)h(v)-5 b(alue)30 b(for)e(Card)g(is)h(one,)h(whic)m(h)f
-(is)g(the)g(index)f(of)h(the)g(\014rst)f(card.)41 b(This)28
-b(means)g(that)i(y)m(ou)f(can)0 3380 y(\\rewind")h(a)h(FitsChan)f(to)h
-(access)h(its)f(\014rst)e(card)i(b)m(y)f(clearing)h(the)g(Card)f
-(attribute:)262 3664 y Ft(CALL)41 b(AST_CLEAR\()f(FITSCHAN,)g('Card',)g
-(STATUS)i(\))0 3961 y FG(The)d(total)j(n)m(um)m(b)s(er)c(of)i(cards)f
-(in)g(a)h(FitsChan)g(is)g(giv)m(en)g(b)m(y)g(the)g(in)m(teger)h(Ncard)e
-(attribute.)70 b(This)38 b(is)i(a)0 4074 y(read-only)28
-b(attribute)h(whose)f(v)-5 b(alue)28 b(is)g(automatically)j(up)s(dated)
-c(as)h(y)m(ou)g(add)f(or)h(remo)m(v)m(e)i(cards.)39 b(It)29
-b(means)0 4187 y(y)m(ou)i(can)f(address)g(all)h(the)g(cards)f(in)g
-(sequence)h(using)f(a)g(lo)s(op)h(suc)m(h)f(as)g(the)h(follo)m(wing:)
-262 4471 y Ft(DO)42 b(1)h(ICARD)f(=)h(1,)g(AST_GETI\()d(FITSCHAN,)g
-('Ncard',)g(STATUS)h(\))392 4570 y(CALL)h(AST_SETI\()e(FITSCHAN,)g
-('Card',)h(ICARD,)g(STATUS)g(\))392 4670 y(<access)g(the)h(current)f
-(card>)44 4770 y(1)174 b(CONTINUE)0 5067 y FG(Ho)m(w)m(ev)m(er,)31
-b(it)e(is)g(usually)g(p)s(ossible)f(to)h(write)g(sligh)m(tly)h(tidier)f
-(lo)s(ops)g(based)f(on)g(the)h(AST)p Fy(_)p FG(FINDFITS)f(func-)0
-5180 y(tion)j(describ)s(ed)e(later)j(\()p Fu(x)p FG(16.6)g(and)e
-Fu(x)p FG(16.13\).)0 5354 y(If)k(y)m(ou)h(set)g(the)g(Card)f(attribute)
-h(to)g(a)g(v)-5 b(alue)35 b(larger)h(than)e(Ncard,)i(the)f(FitsChan)f
-(is)h(regarded)f(as)h(b)s(eing)0 5467 y(p)s(ositioned)h(at)g(its)g
-Fx(end-of-\014le.)55 b FG(In)35 b(this)h(case)g(there)g(is)g(no)f
-(curren)m(t)g(card)h(and)f(an)g(attempt)i(to)f(obtain)g(a)0
-5580 y(v)-5 b(alue)26 b(for)g(the)g(Card)f(attribute)i(will)f(alw)m(a)m
-(ys)h(return)e(the)h(v)-5 b(alue)27 b(Ncard)f(+)f(1.)40
-b(When)25 b(a)i(FitsChan)e(is)h(empt)m(y)-8 b(,)0 5693
-y(it)31 b(is)f(alw)m(a)m(ys)i(at)f(the)g(end-of-\014le.)p
-eop end
-%%Page: 142 152
-TeXDict begin 142 151 bop 0 52 a FG(142)889 b Fz(16)92
-b(STORING)29 b(AST)h(OBJECTS)f(IN)h(FITS)g(HEADERS)g(\(FITSCHANS\))0
-351 y Fw(16.5)112 b(W)-9 b(riting)37 b(Nativ)m(e)g(Ob)6
-b(jects)38 b(to)f(a)h(FitsChan)0 572 y FG(Ha)m(ving)d(created)g(an)e
-(empt)m(y)i(FitsChan)e(\()p Fu(x)p FG(16.3\),)38 b(y)m(ou)c(can)g
-(write)g(an)m(y)g(AST)f(Ob)5 b(ject)34 b(to)g(it)h(in)e(the)h(nativ)m
-(e)0 684 y(enco)s(ding)40 b(using)g(the)h(AST)p Fy(_)p
-FG(WRITE)e(function.)71 b(Let)41 b(us)f(assume)g(w)m(e)h(are)g(writing)
-f(a)h(SkyF)-8 b(rame,)3580 651 y Fv(24)3698 684 y FG(as)0
-797 y(follo)m(ws:)262 1042 y Ft(INTEGER)40 b(NOBJ,)i(SKYFRAME)262
-1241 y(...)262 1440 y(NOBJ)f(=)j(AST_WRITE\()39 b(FITSCHAN,)h
-(SKYFRAME,)g(STATUS)h(\))0 1698 y FG(Since)h(w)m(e)f(ha)m(v)m(e)i
-(selected)g(the)f(nativ)m(e)h(enco)s(ding)e(\()p Fu(x)p
-FG(16.1\),)48 b(there)41 b(are)h(no)g(restrictions)g(on)f(the)h(class)g
-(of)0 1811 y(Ob)5 b(ject)40 b(w)m(e)g(ma)m(y)g(write,)j(so)d(AST)p
-Fy(_)p FG(WRITE)e(should)h(alw)m(a)m(ys)i(return)e(a)h(v)-5
-b(alue)40 b(of)g(one,)i(unless)d(an)h(error)0 1924 y(o)s(ccurs.)47
-b(Unlik)m(e)34 b(a)f(basic)g(Channel)f(\()p Fu(x)p FG(15.3\),)k(this)c
-(write)h(op)s(eration)g(will)g(not)g(pro)s(duce)f(an)m(y)h(output)f
-(from)0 2037 y(our)e(program.)40 b(The)30 b(FITS)g(headers)g(pro)s
-(duced)f(are)h(simply)g(stored)h(inside)f(the)g(FitsChan.)0
-2198 y(After)38 b(this)f(write)g(op)s(eration,)j(the)d(Ncard)h
-(attribute)g(will)f(b)s(e)g(up)s(dated)f(to)i(re\015ect)g(the)g(n)m(um)
-m(b)s(er)e(of)h(new)0 2311 y(cards)f(added)f(to)h(the)g(FitsChan)g(and)
-f(the)h(Card)f(attribute)i(will)f(p)s(oin)m(t)g(at)g(the)g(card)g
-(immediately)h(after)0 2424 y(the)g(last)g(one)g(written.)59
-b(Since)37 b(our)f(FitsChan)h(w)m(as)g(initially)h(empt)m(y)-8
-b(,)39 b(the)e(Card)e(attribute)j(will,)g(in)f(this)0
-2537 y(example,)31 b(p)s(oin)m(t)g(at)g(the)f(end-of-\014le)h(\()p
-Fu(x)p FG(16.4\).)0 2698 y(The)41 b(FITS)f(standard)h(imp)s(oses)f(a)i
-(limit)g(of)f(68)h(c)m(haracters)h(on)e(the)g(length)h(of)f(strings)g
-(whic)m(h)g(ma)m(y)h(b)s(e)0 2811 y(stored)33 b(in)g(a)g(single)g
-(header)g(card.)48 b(Sometimes,)35 b(a)e(description)g(of)g(an)g(AST)f
-(Ob)5 b(ject)33 b(in)m(v)m(olv)m(es)i(the)e(use)f(of)0
-2924 y(strings)c(whic)m(h)f(exceed)i(this)f(limit)g(\()p
-Fx(e.g.)g FG(a)g(F)-8 b(rame)28 b(title)i(can)e(b)s(e)f(of)h(arbitrary)
-f(length\).)41 b(If)27 b(this)h(o)s(ccurs,)g(the)0 3037
-y(long)j(string)g(will)f(b)s(e)g(split)h(o)m(v)m(er)h(t)m(w)m(o)g(or)e
-(more)h(header)f(cards.)41 b(Eac)m(h)31 b(\\con)m(tin)m(uation")i(card)
-e(will)g(ha)m(v)m(e)g(the)0 3150 y(k)m(eyw)m(ord)d Fy(CONTINUE)e
-FG(in)i(columns)f(1)h(to)h(8,)g(and)e(will)i(con)m(tain)g(a)f(space)h
-(in)e(column)h(9)g(\(instead)h(of)f(the)g(usual)0 3263
-y(equals)h(sign\).)40 b(An)29 b(amp)s(ersand)e(\(\\)p
-Fy(&)p FG("\))i(is)g(app)s(ended)e(to)i(the)g(end)f(of)g(eac)m(h)i(of)f
-(the)g(strings)f(\(except)i(the)f(last)0 3376 y(one\))i(to)g(indicate)h
-(that)f(the)f(string)g(is)h(con)m(tin)m(ued)g(on)f(the)h(next)f(card.)0
-3537 y(Note,)f(this)d(splitting)g(of)h(long)f(strings)g(o)m(v)m(er)i
-(sev)m(eral)f(cards)f(only)h(o)s(ccurs)e(when)h(writing)g(AST)f(Ob)5
-b(jects)26 b(to)h(a)0 3650 y(FitsChan)f(using)f(the)h(AST)p
-Fy(_)p FG(WRITE)f(routine)h(and)f(the)i Fx(native)f FG(enco)s(ding.)39
-b(If)26 b(a)g(long)g(string)g(is)g(stored)g(in)g(a)0
-3763 y(FitsChan)31 b(using)f(\(for)h(instance\))h(the)f(AST)p
-Fy(_)p FG(PUTFITS)d(or)j(AST)p Fy(_)p FG(PUTCARDS)e(routine,)i(it)h
-(will)f(simply)0 3876 y(b)s(e)f(truncated.)0 4168 y Fw(16.6)112
-b(Extracting)37 b(Individual)i(Cards)f(from)g(a)g(FitsChan)0
-4388 y FG(T)-8 b(o)37 b(examine)h(the)e(con)m(ten)m(ts)j(of)e(the)g
-(FitsChan)f(after)i(writing)e(the)h(SkyF)-8 b(rame)37
-b(ab)s(o)m(v)m(e)h(\()p Fu(x)p FG(16.5\),)j(w)m(e)d(m)m(ust)0
-4501 y(write)d(a)h(simple)e(lo)s(op)i(to)f(extract)i(eac)m(h)f(card)f
-(in)f(turn)g(and)h(prin)m(t)f(it)i(out.)54 b(W)-8 b(e)37
-b(m)m(ust)d(also)i(remem)m(b)s(er)f(to)0 4614 y(rewind)29
-b(the)i(FitsChan)f(\014rst,)g Fx(e.g.)g FG(using)f(AST)p
-Fy(_)p FG(CLEAR.)h(The)f(follo)m(wing)j(lo)s(op)f(w)m(ould)f(do:)262
-4858 y Ft(CHARACTER)39 b(*)44 b(\()f(80)f(\))i(CARD)262
-5057 y(...)262 5257 y(CALL)d(AST_CLEAR\()f(FITSCHAN,)g('Card',)g
-(STATUS)i(\))44 5456 y(2)174 b(CONTINUE)p 0 5516 1512
-4 v 73 5570 a Fs(24)138 5602 y Fr(More)27 b(probably)-6
-b(,)26 b(y)n(ou)g(w)n(ould)g(w)n(an)n(t)h(to)f(write)h(a)g(F)-6
-b(rameSet,)26 b(but)g(for)h(purp)r(oses)f(of)h(illustration)h(a)e(SkyF)
--6 b(rame)25 b(con)n(tains)i(a)0 5693 y(more)f(manageable)h(amoun)n(t)f
-(of)g(data.)p eop end
-%%Page: 143 153
-TeXDict begin 143 152 bop 0 52 a Fz(16.7)93 b(The)29
-b(Nativ)m(e)k(FitsChan)d(Output)f(F)-8 b(ormat)1904 b
-FG(143)262 351 y Ft(IF)42 b(\()h(AST_FINDFITS\()c(FITSCHAN,)h('\045f',)
-h(CARD,)h(.TRUE.,)e(STATUS)h(\))j(\))f(THEN)392 451 y(WRITE)f(\()h(*,)g
-('\(A\)')e(\))i(CARD)392 551 y(GO)g(TO)g(2)262 650 y(END)f(IF)0
-869 y FG(Here,)34 b(w)m(e)g(ha)m(v)m(e)g(used)e(the)i(AST)p
-Fy(_)p FG(FINDFITS)e(function)g(to)i(\014nd)e(a)h(FITS)f(card)h(b)m(y)g
-(k)m(eyw)m(ord.)49 b(It)33 b(is)g(giv)m(en)0 982 y(a)h(k)m(eyw)m(ord)g
-(template)g(of)g(\\\045f)7 b(",)35 b(whic)m(h)e(matc)m(hes)h(an)m(y)g
-(FITS)e(k)m(eyw)m(ord,)j(so)f(it)g(alw)m(a)m(ys)g(\014nds)e(the)i
-(curren)m(t)0 1095 y(card,)27 b(whic)m(h)f(it)g(returns.)38
-b(Its)26 b(fourth)f(argumen)m(t)i(is)f(set)h(to)f(.TR)m(UE.,)i(to)f
-(indicate)g(that)f(the)h(Card)e(attribute)0 1208 y(should)i(b)s(e)g
-(incremen)m(ted)h(afterw)m(ards)g(so)g(that)g(the)g(follo)m(wing)i
-(card)d(will)h(b)s(e)g(found)e(the)i(next)g(time)g(around)0
-1321 y(the)j(lo)s(op.)43 b(AST)p Fy(_)p FG(FINDFITS)30
-b(returns)g(.F)-10 b(ALSE.)31 b(when)f(it)i(reac)m(hes)g(the)f
-(end-of-\014le)g(and)g(this)g(terminates)0 1434 y(the)g(lo)s(op.)0
-1586 y(If)37 b(w)m(e)g(w)m(ere)h(storing)f(the)g(FITS)g(headers)f(in)h
-(an)g(output)g(FITS)f(\014le)h(instead)h(of)f(prin)m(ting)g(them)g
-(out,)i(w)m(e)0 1699 y(migh)m(t)27 b(use)e(a)h(lo)s(op)g(lik)m(e)h
-(this)f(but)f(replace)i(the)f(WRITE)f(statemen)m(t)j(with)d(a)i(call)g
-(to)f(a)g(suitable)h(data)f(access)0 1812 y(routine)35
-b(to)g(store)g(the)g(header)g(card.)53 b(This)34 b(w)m(ould)g(only)h(b)
-s(e)f(necessary)h(if)g(w)m(e)g(had)f(not)h(pro)m(vided)f(a)h(sink)0
-1925 y(routine)30 b(for)h(the)f(FitsChan)g(\()p Fu(x)p
-FG(16.14\).)0 2202 y Fw(16.7)112 b(The)38 b(Nativ)m(e)f(FitsChan)i
-(Output)f(F)-9 b(ormat)0 2413 y FG(If)39 b(w)m(e)g(prin)m(t)g(out)g
-(the)g(FITS)g(header)g(cards)f(describing)h(the)g(SkyF)-8
-b(rame)40 b(w)m(e)f(wrote)h(earlier)g(\()p Fu(x)p FG(16.5\),)k(w)m(e)0
-2526 y(should)29 b(obtain)i(something)g(lik)m(e)h(the)e(follo)m(wing:)
-227 2731 y Ft(COMMENT)41 b(AST)h(+++++++++++++++++)o(++)o(+++)o(++)o
-(+++)o(++)o(++)o(+++)o(++)o(+++)o(++)o(+++)o(++)o(++)o(+++)o(++)o(+++)o
-(++)o(++)o(+++)o(+)37 b(AST)227 2831 y(COMMENT)k(AST)522
-b(Beginning)40 b(of)i(AST)h(data)f(for)g(SkyFrame)e(object)564
-b(AST)227 2931 y(COMMENT)41 b(AST)h(.................)o(..)o(...)o(..)o
-(...)o(..)o(..)o(...)o(..)o(...)o(..)o(...)o(..)o(..)o(...)o(..)o(...)o
-(..)o(..)o(...)o(.)37 b(AST)227 3030 y(BEGAST_A=)j('SkyFrame')475
-b(/)44 b(Description)39 b(of)j(celestial)e(coordinate)g(system)227
-3130 y(NAXES_A)h(=)871 b(2)43 b(/)h(Number)d(of)h(coordinate)e(axes)227
-3230 y(AX1_A)129 b(=)43 b(')348 b(')479 b(/)44 b(Axis)e(number)f(1)227
-3329 y(BEGAST_B=)f('SkyAxis)g(')479 b(/)44 b(Celestial)39
-b(coordinate)h(axis)227 3429 y(ENDAST_A=)g('SkyAxis)g(')479
-b(/)44 b(End)e(of)h(object)e(definition)227 3529 y(AX2_A)129
-b(=)43 b(')348 b(')479 b(/)44 b(Axis)e(number)f(2)227
-3628 y(BEGAST_C=)f('SkyAxis)g(')479 b(/)44 b(Celestial)39
-b(coordinate)h(axis)227 3728 y(ENDAST_B=)g('SkyAxis)g(')479
-b(/)44 b(End)e(of)h(object)e(definition)227 3827 y(ISA_A)129
-b(=)43 b('Frame)128 b(')479 b(/)44 b(Coordinate)39 b(system)i
-(description)227 3927 y(SYSTEM_A=)f('FK4-NO-E')475 b(/)44
-b(Celestial)39 b(coordinate)h(system)h(type)227 4027
-y(EPOCH_A)g(=)653 b(1958.0)41 b(/)j(Besselian)39 b(epoch)j(of)h
-(observation)227 4126 y(ENDAST_C=)d('SkyFrame')475 b(/)44
-b(End)e(of)h(object)e(definition)227 4226 y(COMMENT)g(AST)h
-(.................)o(..)o(...)o(..)o(...)o(..)o(..)o(...)o(..)o(...)o
-(..)o(...)o(..)o(..)o(...)o(..)o(...)o(..)o(..)o(...)o(.)37
-b(AST)227 4326 y(COMMENT)k(AST)653 b(End)42 b(of)h(AST)f(data)g(for)g
-(SkyFrame)f(object)694 b(AST)227 4425 y(COMMENT)41 b(AST)h
-(-----------------)o(--)o(---)o(--)o(---)o(--)o(--)o(---)o(--)o(---)o
-(--)o(---)o(--)o(--)o(---)o(--)o(---)o(--)o(--)o(---)o(-)37
-b(AST)0 4644 y FG(As)i(y)m(ou)h(can)f(see,)j(this)d(resem)m(bles)h(the)
-f(information)g(that)h(w)m(ould)f(b)s(e)f(written)i(to)f(a)h(basic)f
-(Channel)g(to)0 4757 y(describ)s(e)26 b(the)h(same)g(SkyF)-8
-b(rame)27 b(\()p Fu(x)p FG(15.8\),)j(except)e(that)f(it)g(has)g(b)s
-(een)e(formatted)j(in)m(to)f(80-c)m(haracter)j(header)0
-4870 y(cards)g(according)h(to)h(FITS)d(con)m(v)m(en)m(tions.)0
-5022 y(There)h(are)h(also)g(a)g(n)m(um)m(b)s(er)e(of)h(other)h
-(di\013erences)g(w)m(orth)f(noting:)111 5241 y(1.)46
-b(There)33 b(is)h(no)f(unnecessary)g(information)g(ab)s(out)g(default)h
-(v)-5 b(alues)34 b(pro)m(vided)f(for)g(the)g(b)s(ene\014t)g(of)g(the)
-227 5354 y(h)m(uman)40 b(reader.)73 b(This)40 b(is)h(b)s(ecause)g(the)g
-(F)-8 b(ull)42 b(attribute)f(for)g(a)g(FitsChan)g(defaults)g(to)h
-Fu(\000)p FG(1,)i(th)m(us)227 5467 y(suppressing)32 b(this)h
-(information)g(\()p Fx(c.f.)g Fu(x)p FG(15.9\).)51 b(Y)-8
-b(ou)34 b(can)f(restore)h(the)f(information)h(if)f(y)m(ou)g(wish)g(b)m
-(y)227 5580 y(setting)i(F)-8 b(ull)35 b(to)g(0)f(or)g(+1,)h(in)f(whic)m
-(h)g(case)h(additional)g(COMMENT)e(cards)h(will)g(b)s(e)g(generated)h
-(to)227 5693 y(hold)30 b(it.)p eop end
-%%Page: 144 154
-TeXDict begin 144 153 bop 0 52 a FG(144)889 b Fz(16)92
-b(STORING)29 b(AST)h(OBJECTS)f(IN)h(FITS)g(HEADERS)g(\(FITSCHANS\))111
-351 y FG(2.)46 b(The)24 b(information)g(is)g(not)g(inden)m(ted,)i(b)s
-(ecause)e(FITS)f(do)s(es)g(not)i(allo)m(w)g(this.)39
-b(Ho)m(w)m(ev)m(er,)27 b(if)d(y)m(ou)g(c)m(hange)227
-464 y(the)32 b(F)-8 b(ull)33 b(attribute)f(to)h(0)f(or)g(+1,)h(commen)m
-(ts)g(will)f(b)s(e)f(included)g(that)i(are)f(in)m(tended)g(to)g(help)g
-(break)227 577 y(up)f(the)i(sequence)f(of)h(headers)e(and)h(highligh)m
-(t)h(its)g(structure.)45 b(This)32 b(will)g(probably)g(only)g(b)s(e)f
-(of)i(use)227 690 y(if)d(y)m(ou)g(are)h(attempting)g(to)g(trac)m(k)g
-(do)m(wn)e(a)i(problem)e(b)m(y)h(examining)g(the)h(FITS)e(cards)g(pro)s
-(duced)g(in)227 803 y(detail.)111 979 y(3.)46 b(The)32
-b(FITS)g(k)m(eyw)m(ords)g(whic)m(h)h(app)s(ear)e(to)i(the)g(left)g(of)f
-(the)h(\\=")g(signs)f(ha)m(v)m(e)i(additional)f(c)m(haracters)227
-1092 y(\(\\)p Fy(_)p FG(A",)27 b(\\)p Fy(_)p FG(B",)f
-Fx(etc.)p FG(\))38 b(app)s(ended)24 b(to)h(them.)39 b(This)24
-b(is)h(done)g(in)g(order)f(to)i(mak)m(e)g(eac)m(h)g(k)m(eyw)m(ord)f
-(unique.)0 1306 y(This)41 b(last)i(p)s(oin)m(t)f(is)g(w)m(orth)g
-(further)e(commen)m(t)j(and)f(is)g(necessary)g(b)s(ecause)g(the)g(FITS)
-f(standard)g(only)0 1419 y(allo)m(ws)d(for)e(certain)h(k)m(eyw)m(ords)g
-(\(suc)m(h)g(as)f(COMMENT)h(and)e(HISTOR)-8 b(Y\))37
-b(to)g(app)s(ear)f(more)g(than)h(once.)0 1532 y(AST)p
-Fy(_)p FG(WRITE)31 b(therefore)j(app)s(ends)d(an)h(arbitrary)h
-(sequence)g(of)g(t)m(w)m(o)h(c)m(haracters)g(to)g(eac)m(h)g(new)e(k)m
-(eyw)m(ord)0 1645 y(it)f(generates)h(in)e(order)g(to)h(ensure)e(that)i
-(it)g(do)s(es)f(not)h(duplicate)g(an)m(y)f(already)h(presen)m(t)g(in)f
-(the)g(FitsChan.)0 1796 y(The)24 b(main)g(risk)g(from)f(not)i(follo)m
-(wing)h(this)e(con)m(v)m(en)m(tion)i(is)e(that)h(some)g(soft)m(w)m(are)
-h(migh)m(t)f(ignore)f(\(sa)m(y\))i(all)f(but)0 1909 y(the)k(last)h(o)s
-(ccurrence)f(of)g(a)g(k)m(eyw)m(ord)g(b)s(efore)g(passing)f(the)h(FITS)
-f(headers)h(on.)40 b(Suc)m(h)28 b(an)h(ev)m(en)m(t)h(is)f(unlik)m(ely)
--8 b(,)0 2022 y(but)31 b(w)m(ould)g(ob)m(viously)h(destro)m(y)f(the)h
-(information)f(presen)m(t,)h(so)g(AST)p Fy(_)p FG(WRITE)e(enforces)h
-(the)h(uniqueness)0 2135 y(of)i(the)g(k)m(eyw)m(ords)g(it)g(uses.)51
-b(The)33 b(extra)i(c)m(haracters)g(added)e(are)h(ignored)g(when)f(the)h
-(information)g(is)g(read)0 2247 y(bac)m(k.)0 2398 y(As)44
-b(with)g(a)g(basic)h(Channel,)h(y)m(ou)f(can)f(also)h(suppress)d(the)i
-(commen)m(ts)h(pro)s(duced)e(in)g(a)i(FitsChan)f(b)m(y)0
-2511 y(setting)35 b(the)e(b)s(o)s(olean)h(\(in)m(teger\))i(Commen)m(t)e
-(attribute)g(to)g(zero)h(\()p Fu(x)p FG(15.10\).)53 b(Ho)m(w)m(ev)m
-(er,)37 b(FITS)c(headers)g(are)0 2624 y(traditionally)f(generously)f
-(commen)m(ted,)g(so)g(this)f(is)h(not)f(recommended.)0
-2900 y Fw(16.8)112 b(Adding)38 b(Individual)i(Cards)e(to)f(a)g
-(FitsChan)0 3109 y FG(T)-8 b(o)31 b(insert)g(individual)f(cards)g(in)m
-(to)i(a)f(FitsChan,)g(prior)f(to)h(reading)g(them)f(bac)m(k)i(as)e(Ob)5
-b(jects)31 b(for)g(example,)0 3222 y(y)m(ou)j(should)f(use)h(the)g(AST)
-p Fy(_)p FG(PUTFITS)e(routine.)52 b(Y)-8 b(ou)34 b(can)g(insert)g(a)h
-(card)e(in)h(fron)m(t)g(of)g(the)g(curren)m(t)g(one)0
-3335 y(as)d(follo)m(ws:)262 3537 y Ft(CALL)41 b(AST_PUTFITS\()e
-(FITSCHAN,)h(CARD,)h(.FALSE.,)g(STATUS)g(\))0 3751 y
-FG(where)26 b(the)i(third)e(argumen)m(t)h(of)g(.F)-10
-b(ALSE.)27 b(indicates)h(that)g(the)f(curren)m(t)f(card)h(should)f(not)
-h(b)s(e)g(o)m(v)m(erwritten.)0 3864 y(Note)32 b(that)f(facilities)h
-(are)f(not)g(pro)m(vided)f(b)m(y)g(AST)g(for)g(formatting)h(the)f(card)
-h(con)m(ten)m(ts.)0 4015 y(After)41 b(inserting)g(a)h(card,)i(the)d
-(FitsChan's)g(Card)f(attribute)i(p)s(oin)m(ts)f(at)h(the)f(original)h
-(Card,)h(or)e(at)h(the)0 4128 y(end-of-\014le)k(if)f(the)h(FitsChan)g
-(w)m(as)g(originally)g(empt)m(y)-8 b(.)88 b(En)m(tering)45
-b(a)h(sequence)g(of)g(cards)f(is)h(therefore)0 4241 y(straigh)m(tforw)m
-(ard.)52 b(If)34 b(CARDS)f(is)h(an)g(arra)m(y)h(of)f(c)m(haracter)h
-(strings)f(con)m(taining)h(FITS)f(header)f(cards)h(and)0
-4354 y(NCARDS)41 b(is)f(the)h(n)m(um)m(b)s(er)f(of)h(cards,)i(then)e(a)
-g(lo)s(op)g(suc)m(h)f(as)h(the)g(follo)m(wing)h(will)g(insert)e(the)h
-(cards)g(in)0 4467 y(sequence)31 b(in)m(to)g(a)g(FitsChan:)262
-4668 y Ft(INTEGER)40 b(NCARD)262 4768 y(CHARACTER)f(*)44
-b(\()f(80)f(\))i(CARDS\()d(NCARD)g(\))262 4967 y(...)262
-5166 y(DO)h(3)h(ICARD)f(=)h(1,)g(NCARD)392 5266 y(CALL)f(AST_PUTFITS\()
-d(FITSCHAN,)h(CARDS\()h(ICARD)g(\),)i(.FALSE.,)d(STATUS)h(\))44
-5365 y(3)174 b(CONTINUE)0 5580 y FG(Note)34 b(that)e(AST)p
-Fy(_)p FG(PUTFITS)f(enforces)h(the)h(v)-5 b(alidit)m(y)33
-b(of)g(a)f(FitsChan)h(b)m(y)f(rejecting)h(an)m(y)g(cards)f(whic)m(h)g
-(do)0 5693 y(not)f(adhere)f(to)h(the)f(FITS)g(standard.)40
-b(If)30 b(an)m(y)h(suc)m(h)f(cards)g(are)h(detected,)g(an)g(error)f
-(will)g(result.)p eop end
-%%Page: 145 155
-TeXDict begin 145 154 bop 0 52 a Fz(16.9)93 b(Adding)29
-b(Concatenated)j(Cards)d(to)i(a)g(FitsChan)1676 b FG(145)0
-351 y Fw(16.9)112 b(Adding)38 b(Concatenated)h(Cards)f(to)f(a)h
-(FitsChan)0 566 y FG(If)46 b(y)m(ou)h(ha)m(v)m(e)h(all)f(y)m(our)g
-(cards)f(concatenated)j(together)f(in)m(to)g(a)f(single)g(long)g
-(string,)k(eac)m(h)d(o)s(ccup)m(ying)0 679 y(80)42 b(c)m(haracters)h
-(\(with)e(no)g(delimiters\),)k(y)m(ou)d(can)f(insert)g(them)g(in)m(to)h
-(a)g(FitsChan)f(in)g(a)h(single)f(call)i(us-)0 792 y(ing)i(AST)p
-Fy(_)p FG(PUTCARDS.)e(This)h(call)h(\014rst)f(empties)h(the)g(supplied)
-e(FitsChan)h(of)h(an)m(y)g(existing)g(cards,)0 905 y(then)h(inserts)f
-(the)i(new)e(cards,)50 b(and)45 b(\014nally)h(rewinds)f(the)h(FitsChan)
-g(so)g(that)h(a)f(subsequen)m(t)f(call)j(to)0 1017 y(AST)p
-Fy(_)p FG(READ)40 b(will)h(start)g(reading)g(from)f(the)h(\014rst)f
-(supplied)f(card.)71 b(The)40 b(AST)p Fy(_)p FG(PUTCARDS)f(routine)0
-1130 y(uses)32 b(AST)p Fy(_)p FG(PUTFITS)f(in)m(ternally)j(to)g(in)m
-(terpret)f(and)g(store)g(eac)m(h)h(individual)e(card,)i(and)e(so)i(the)
-f(ca)m(v)m(eats)0 1243 y(in)d Fu(x)p FG(16.8)i(should)e(b)s(e)g(read.)0
-1526 y Fw(16.10)112 b(Reading)39 b(Nativ)m(e)e(Ob)6 b(jects)38
-b(F)-9 b(rom)38 b(a)g(FitsChan)0 1741 y FG(Once)d(y)m(ou)g(ha)m(v)m(e)h
-(stored)f(a)g(FITS)g(header)f(description)h(of)g(an)g(Ob)5
-b(ject)35 b(in)g(a)g(FitsChan)g(using)f(the)h(nativ)m(e)0
-1854 y(enco)s(ding)27 b(\()p Fu(x)p FG(16.5\),)k(y)m(ou)d(can)g(read)f
-(it)h(bac)m(k)g(using)f(AST)p Fy(_)p FG(READ)g(in)g(m)m(uc)m(h)h(the)f
-(same)h(w)m(a)m(y)g(as)g(with)f(a)h(basic)0 1967 y(Channel)h(\()p
-Fu(x)p FG(15.4\).)44 b(Similar)30 b(commen)m(ts)h(ab)s(out)f(v)-5
-b(alidating)31 b(the)g(Ob)5 b(ject)30 b(y)m(ou)h(read)f(also)h(apply)f
-(\()p Fu(x)p FG(15.6\).)43 b(If)0 2080 y(y)m(ou)31 b(ha)m(v)m(e)g(just)
-f(written)h(to)g(the)f(FitsChan,)h(y)m(ou)f(m)m(ust)h(remem)m(b)s(er)e
-(to)j(rewind)d(it)i(\014rst:)262 2301 y Ft(INTEGER)40
-b(OBJECT)262 2500 y(...)262 2700 y(CALL)h(AST_CLEAR\()f(FITSCHAN,)g
-('Card',)g(STATUS)i(\))262 2799 y(OBJECT)f(=)i(AST_READ\()d(FITSCHAN,)g
-(STATUS)h(\))0 3034 y FG(An)30 b(imp)s(ortan)m(t)g(feature)g(of)h(a)f
-(FitsChan)g(is)g(that)h(read)f(op)s(erations)g(are)h(destructiv)m(e.)42
-b(This)29 b(means)h(that)g(if)0 3147 y(an)k(Ob)5 b(ject)35
-b(description)f(is)g(found,)g(it)h(will)g(b)s(e)e(consumed)h(b)m(y)g
-(AST)p Fy(_)p FG(READ)g(whic)m(h)g(will)g(remo)m(v)m(e)i(all)f(the)0
-3260 y(cards)d(in)m(v)m(olv)m(ed,)i(including)d(asso)s(ciated)j
-(COMMENT)d(cards,)i(from)e(the)h(FitsChan.)46 b(Th)m(us,)31
-b(if)h(y)m(ou)g(write)0 3373 y(an)f(Ob)5 b(ject)32 b(to)g(a)g
-(FitsChan,)g(rewind,)f(and)g(read)h(the)g(same)g(Ob)5
-b(ject)31 b(bac)m(k,)i(y)m(ou)f(should)f(end)f(up)h(with)g(the)0
-3486 y(original)41 b(FitsChan)e(con)m(ten)m(ts.)71 b(If)39
-b(y)m(ou)h(need)g(to)g(circum)m(v)m(en)m(t)h(this)f(b)s(eha)m(viour)f
-(for)h(an)m(y)g(reason,)i(it)e(is)g(a)0 3599 y(simple)32
-b(matter)g(to)g(mak)m(e)h(a)f(cop)m(y)g(of)g(a)g(FitsChan)g(using)f
-(AST)p Fy(_)p FG(COPY)f(\()p Fu(x)p FG(4.12\).)47 b(If)31
-b(y)m(ou)h(then)f(read)h(from)0 3712 y(the)f(cop)m(y)-8
-b(,)31 b(the)g(original)g(FitsChan)g(will)f(remain)h(un)m(touc)m(hed.)0
-3867 y(After)e(a)g(read)f(completes,)j(the)e(FitsChan's)f(Card)g
-(attribute)i(iden)m(ti\014es)f(the)g(card)f(immediately)i(follo)m(wing)
-0 3980 y(the)h(last)g(card)f(read,)h(or)f(the)h(end-of-\014le)f(of)h
-(there)f(are)h(no)f(more)h(cards.)0 4136 y(Since)43 b(the)f
-Fx(native)h FG(enco)s(ding)g(is)f(b)s(eing)g(used,)j(an)m(y)e(long)g
-(strings)g(in)m(v)m(olv)m(ed)h(in)e(the)h(ob)5 b(ject)43
-b(description)0 4249 y(will)c(ha)m(v)m(e)g(b)s(een)f(split)g(in)m(to)i
-(t)m(w)m(o)g(or)e(more)g(adjacen)m(t)i(con)m(tuation)g(cards)e(when)g
-(the)g(Ob)5 b(ject)39 b(w)m(as)f(stored)0 4362 y(in)h(the)g(header)g
-(using)g(routine)g(AST)p Fy(_)p FG(WRITE.)f(The)h(AST)p
-Fy(_)p FG(READ)f(routine)h(rev)m(erses)h(this)f(pro)s(cess)g(b)m(y)0
-4475 y(concatenating)33 b(an)m(y)e(suc)m(h)f(adjacen)m(t)h(con)m(tin)m
-(uation)h(cards)f(to)g(re-create)h(the)f(original)g(long)g(string.)0
-4758 y Fw(16.11)112 b(Sa)m(ving)39 b(and)f(Restoring)f(Multiple)i(Ob)6
-b(jects)38 b(in)g(a)f(FitsChan)0 4973 y FG(When)32 b(using)f(the)h
-(nativ)m(e)h(FITS)e(enco)s(ding,)i(m)m(ultiple)f(Ob)5
-b(jects)32 b(ma)m(y)g(b)s(e)g(stored)f(and)h(all)g(I/O)g(op)s(erations)
-0 5086 y(are)40 b(sequen)m(tial.)68 b(This)39 b(means)g(that)h(y)m(ou)f
-(can)h(simply)f(write)g(a)h(sequence)f(of)h(Ob)5 b(jects)39
-b(to)h(a)f(FitsChan.)0 5198 y(After)32 b(eac)m(h)h(write)g(op)s
-(eration,)g(the)f(Card)f(attribute)i(will)f(b)s(e)f(up)s(dated)g(so)h
-(that)h(the)f(next)g(write)g(app)s(ends)0 5311 y(the)f(next)f(Ob)5
-b(ject)31 b(description)f(to)h(the)g(previous)f(one.)0
-5467 y(If)g(y)m(ou)g(then)g(rewind)f(the)h(FitsChan,)h(y)m(ou)f(can)h
-(read)f(the)g(Ob)5 b(jects)30 b(bac)m(k)h(in)f(the)h(original)g(order.)
-40 b(Reading)0 5580 y(them)21 b(bac)m(k)g(will,)i(of)e(course,)i(remo)m
-(v)m(e)f(their)f(descriptions)g(from)f(the)h(FitsChan)f(\()p
-Fu(x)p FG(16.10\))k(but)c(the)h(b)s(eha)m(viour)0 5693
-y(of)31 b(the)f(Card)g(attribute)h(is)f(suc)m(h)g(that)h(successiv)m(e)
-h(reads)e(will)h(simply)f(return)f(eac)m(h)i(Ob)5 b(ject)31
-b(in)f(sequence.)p eop end
-%%Page: 146 156
-TeXDict begin 146 155 bop 0 52 a FG(146)889 b Fz(16)92
-b(STORING)29 b(AST)h(OBJECTS)f(IN)h(FITS)g(HEADERS)g(\(FITSCHANS\))0
-351 y FG(The)d(only)h(thing)f(that)h(ma)m(y)g(require)f(care,)i(giv)m
-(en)g(that)f(a)g(FitsChan)f(can)h(alw)m(a)m(ys)h(b)s(e)e(addressed)f
-(randomly)0 464 y(b)m(y)38 b(setting)i(its)f(Card)e(attribute,)k(is)e
-(to)g(a)m(v)m(oid)h(writing)e(one)h(Ob)5 b(ject)38 b(on)h(top)f(of)h
-(another.)65 b(F)-8 b(or)39 b(ob)m(vious)0 577 y(reasons,)32
-b(the)g(Ob)5 b(ject)31 b(descriptions)h(in)f(a)h(FitsChan)f(m)m(ust)h
-(remain)f(separate)i(if)e(they)h(are)g(to)g(mak)m(e)g(sense)0
-690 y(when)d(read)i(bac)m(k.)0 976 y Fw(16.12)112 b(Mixing)39
-b(Nativ)m(e)e(Ob)6 b(jects)38 b(with)f(Other)h(FITS)g(Cards)0
-1192 y FG(Of)f(course,)j(an)m(y)d(real)i(FITS)d(header)i(will)f(con)m
-(tain)i(other)f(information)g(b)s(esides)f(AST)f(Ob)5
-b(jects,)40 b(if)d(only)0 1305 y(the)32 b(mandatory)g(FITS)g(cards)g
-(that)g(m)m(ust)g(accompan)m(y)i(all)f(FITS)e(data.)47
-b(When)32 b(FITS)f(headers)h(are)h(read)0 1417 y(in)g(from)f(a)h(real)h
-(dataset,)h(therefore,)f(an)m(y)f(nativ)m(e)i(AST)d(Ob)5
-b(ject)33 b(descriptions)g(will)g(b)s(e)f(in)m(ter-mixed)i(with)0
-1530 y(man)m(y)c(other)h(cards.)0 1688 y(Because)j(this)f(is)g(the)g
-(normal)g(state)h(of)f(a\013airs,)h(the)f(b)s(o)s(olean)g(\(in)m
-(teger\))i(Skip)d(attribute)i(for)e(a)i(FitsChan)0 1801
-y(defaults)j(to)h(one.)62 b(This)37 b(means)g(that)h(when)e(y)m(ou)i
-(read)f(an)g(Ob)5 b(ject)38 b(F)-8 b(rom)38 b(a)f(FitsChan,)j(an)m(y)d
-(irrelev)-5 b(an)m(t)0 1914 y(cards)28 b(will)h(simply)f(b)s(e)g(skipp)
-s(ed)f(o)m(v)m(er)i(un)m(til)g(the)g(start)g(of)f(the)h(next)f(Ob)5
-b(ject)29 b(description,)g(if)f(an)m(y)-8 b(,)30 b(is)f(found.)0
-2027 y(If)c(y)m(ou)i(start)f(reading)g(part)g(w)m(a)m(y)h(through)e(an)
-h(Ob)5 b(ject)26 b(description,)h(no)f(error)f(will)h(result.)40
-b(The)25 b(remainder)0 2140 y(of)31 b(the)f(description)h(will)f
-(simply)g(b)s(e)g(skipp)s(ed.)0 2297 y(Setting)38 b(Skip)e(to)h(zero)h
-(will)f(c)m(hange)h(this)f(b)s(eha)m(viour)g(to)g(resem)m(ble)h(that)f
-(of)g(a)h(basic)f(Channel)f(\()p Fu(x)p FG(15.12\),)0
-2410 y(where)30 b(extraneous)h(data)g(are)g(not)f(p)s(ermitted)g(b)m(y)
-g(default,)h(but)f(this)g(will)h(probably)e(rarely)i(b)s(e)f(useful.)0
-2695 y Fw(16.13)112 b(Finding)39 b(and)g(Changing)f(Cards)h(in)e(a)h
-(FitsChan)0 2912 y FG(Y)-8 b(ou)30 b(can)g(searc)m(h)g(for,)f(and)g
-(retriev)m(e,)i(particular)f(cards)f(in)g(a)h(FitsChan)g(b)m(y)f(k)m
-(eyw)m(ord,)h(using)f(the)h(function)0 3024 y(AST)p Fy(_)p
-FG(FINDFITS.)23 b(This)g(p)s(erforms)f(a)h(searc)m(h,)j(starting)e(at)h
-(the)e(curren)m(t)h(card,)h(un)m(til)f(it)g(\014nds)d(a)j(card)g(whose)
-0 3137 y(k)m(eyw)m(ord)31 b(matc)m(hes)g(the)g(template)h(y)m(ou)e
-(supply)-8 b(,)30 b(or)g(the)h(end-of-\014le)g(is)f(reac)m(hed.)0
-3295 y(If)45 b(a)h(suitable)h(card)e(is)h(found,)i(AST)p
-Fy(_)p FG(FINDFITS)d(returns)g(the)h(card's)f(con)m(ten)m(ts)j(and)d
-(then)g(sets)h(the)0 3408 y(FitsChan's)h(Card)f(attribute)i(either)f
-(to)g(iden)m(tify)h(the)f(card)g(found,)j(or)d(the)g(one)g(follo)m
-(wing)h(it.)91 b(The)0 3521 y(w)m(a)m(y)42 b(y)m(ou)f(w)m(an)m(t)h(the)
-g(Card)e(attribute)i(to)g(b)s(e)e(set)i(is)f(indicated)g(b)m(y)g(the)h
-(fourth)e(\(logical\))k(argumen)m(t)e(to)0 3634 y(AST)p
-Fy(_)p FG(FINDFITS.)32 b(A)h(v)-5 b(alue)34 b(of)f(.TR)m(UE.)g(is)g
-(returned)f(to)h(indicate)h(success.)49 b(If)32 b(a)i(suitable)f(card)g
-(cannot)0 3746 y(b)s(e)23 b(found,)h(AST)p Fy(_)p FG(FINDFITS)e
-(returns)g(a)i(v)-5 b(alue)24 b(of)g(.F)-10 b(ALSE.)23
-b(to)h(indicate)h(failure)e(and)g(sets)h(the)f(FitsChan's)0
-3859 y(Card)30 b(attribute)h(to)g(the)f(end-of-\014le.)0
-4017 y(Requesting)37 b(that)h(the)f(Card)f(attribute)h(b)s(e)f(set)i
-(to)f(indicate)h(the)f(card)g(that)g(AST)p Fy(_)p FG(FINDFITS)f
-(\014nds)f(is)0 4130 y(useful)30 b(if)g(y)m(ou)h(w)m(an)m(t)g(to)g
-(replace)g(that)g(card)g(with)f(a)g(new)g(one,)h(as)g(in)f(this)g
-(example:)262 4358 y Ft(CHARACTER)39 b(*)44 b(\()f(80)f(\))i(NEWCARD)
-262 4457 y(LOGICAL)c(JUNK)262 4657 y(...)262 4856 y(JUNK)h(=)j
-(AST_FINDFITS\()38 b(FITSCHAN,)i('AIRMASS',)f(CARD,)j(.FALSE.,)e
-(STATUS)h(\))262 4956 y(CALL)g(AST_PUTFITS\()e(FITSCHAN,)h(NEWCARD,)g
-(.TRUE.,)h(STATUS)g(\))0 5197 y FG(Here,)33 b(AST)p Fy(_)p
-FG(FINDFITS)e(is)h(used)g(to)g(searc)m(h)h(for)f(a)g(card)g(with)g(the)
-g(k)m(eyw)m(ord)g(AIRMASS.)g(If)f(the)i(card)e(is)0 5310
-y(found,)e(AST)p Fy(_)p FG(PUTFITS)f(then)h(o)m(v)m(erwrites)j(it)e
-(with)g(a)g(new)f(card.)41 b(Otherwise,)30 b(the)g(Card)f(attribute)h
-(ends)0 5423 y(up)f(p)s(oin)m(ting)h(at)g(the)g(end-of-\014le)h(and)e
-(the)h(new)f(card)h(is)g(simply)f(app)s(ended)f(to)j(the)f(end)f(of)h
-(the)g(FitsChan.)0 5580 y(A)e(similar)g(approac)m(h)g(can)g(b)s(e)e
-(used)h(to)i(delete)g(selected)g(cards)e(from)g(a)h(FitsChan)g(using)f
-(AST)p Fy(_)p FG(DELFITS,)0 5693 y(whic)m(h)j(deletes)i(the)e(curren)m
-(t)g(card:)p eop end
-%%Page: 147 157
-TeXDict begin 147 156 bop 0 52 a Fz(16.14)93 b(Source)30
-b(and)g(Sink)f(Routines)i(for)f(FitsChans)1747 b FG(147)262
-351 y Ft(IF)42 b(\()h(AST_FINDFITS\()c(FITSCHAN,)h('BSCALE',)f(CARD,)j
-(.FALSE.,)e(STATUS)h(\))i(\))h(THEN)392 451 y(CALL)e(AST_DELFITS\()d
-(FITSCHAN,)h(STATUS)h(\))262 551 y(END)h(IF)0 849 y FG(This)30
-b(deletes)h(the)g(\014rst)e(card,)i(if)f(an)m(y)-8 b(,)32
-b(with)e(the)g(BSCALE)g(k)m(eyw)m(ord.)0 1024 y(Requesting)k(that)g
-(AST)p Fy(_)p FG(FINDFITS)e(incremen)m(ts)i(the)g(Card)e(attribute)i
-(to)g(iden)m(tify)g(the)g(card)f(follo)m(wing)0 1137
-y(the)d(one)h(found)d(is)i(more)g(useful)g(when)f(writing)h(lo)s(ops.)
-40 b(F)-8 b(or)31 b(example,)g(the)f(follo)m(wing)i(lo)s(op)e(extracts)
-h(eac)m(h)0 1250 y(card)39 b(whose)f(k)m(eyw)m(ord)h(matc)m(hes)h(the)f
-(template)h(\\CD\0456d")f(\(that)h(is,)h(\\CD")f(follo)m(w)m(ed)g(b)m
-(y)f(six)f(decimal)0 1363 y(digits\):)44 1648 y Ft(4)174
-b(CONTINUE)262 1748 y(IF)42 b(\()h(AST_FINDFITS\()c(FITSCHAN,)h
-('CD\0456d',)g(CARD,)h(.TRUE.,)g(STATUS)g(\))i(\))g(THEN)392
-1848 y(<process)e(the)h(card's)f(contents>)392 1947 y(GO)i(TO)g(4)262
-2047 y(END)f(IF)0 2346 y FG(F)-8 b(or)26 b(further)e(details)i(of)g(k)m
-(eyw)m(ord)f(templates,)j(see)e(the)f(description)h(of)f(AST)p
-Fy(_)p FG(FINDFITS)f(in)h(App)s(endix)f(B.)0 2680 y Fw(16.14)112
-b(Source)38 b(and)g(Sink)h(Routines)e(for)h(FitsChans)0
-2919 y FG(The)26 b(use)h(of)g(source)g(and)f(sink)g(routines)h(with)g
-(a)g(FitsChan)f(is)h(optional.)41 b(This)26 b(is)h(b)s(ecause)g(y)m(ou)
-g(can)g(alw)m(a)m(ys)0 3032 y(arrange)i(to)g(explicitly)h(\014ll)e(a)g
-(FitsChan)h(with)f(FITS)f(cards)h(\()p Fu(x)p FG(16.8)j(and)c
-Fu(x)p FG(16.9\))k(and)d(y)m(ou)g(can)h(also)g(extract)0
-3145 y(an)m(y)i(cards)f(that)h(remain)f(and)g(write)g(them)h(out)f(y)m
-(ourself)h(\()p Fu(x)p FG(16.6\))i(b)s(efore)d(y)m(ou)h(delete)g(the)g
-(FitsChan.)0 3320 y(If)26 b(y)m(ou)h(c)m(ho)s(ose)h(to)f(use)f(these)h
-(routines,)g(ho)m(w)m(ev)m(er,)i(they)e(b)s(eha)m(v)m(e)g(in)f(a)h(v)m
-(ery)g(similar)g(manner)f(to)h(those)g(used)0 3433 y(b)m(y)32
-b(a)g(Channel)f(\()p Fu(x)p FG(15.13)j(and)e Fu(x)p FG(15.14\).)47
-b(Y)-8 b(ou)33 b(supply)d(these)i(routines,)g(as)g(argumen)m(ts)h(to)f
-(the)g(constructor)0 3546 y(function)25 b(AST)p Fy(_)p
-FG(FITSCHAN)f(when)g(y)m(ou)h(create)i(the)f(FitsChan)f(\()p
-Fu(x)p FG(16.3\).)41 b(The)25 b(source)h(routine)f(is)g(in)m(v)m(ok)m
-(ed)0 3659 y(implicitly)30 b(at)g(this)e(p)s(oin)m(t)h(to)h(\014ll)e
-(the)h(FitsChan)g(with)f(FITS)g(cards)h(and)f(the)h(FitsChan)g(is)g
-(then)f(rew)m(ound,)0 3771 y(so)36 b(that)g(the)f(\014rst)g(card)g(b)s
-(ecomes)h(curren)m(t.)55 b(The)35 b(sink)g(routine)g(is)h
-(automatically)i(in)m(v)m(ok)m(ed)f(later,)g(when)0 3884
-y(the)31 b(FitsChan)f(is)g(deleted,)i(in)e(order)g(to)h(write)f(out)h
-(an)m(y)g(cards)f(that)h(remain)f(in)g(it.)0 4059 y(The)23
-b(only)g(real)h(di\013erence)g(b)s(et)m(w)m(een)f(the)h(source)f(and)g
-(sink)g(routines)g(for)g(a)g(FitsChan)g(and)g(a)h(basic)f(Channel)0
-4172 y(is)i(that)h(FITS)f(cards)g(are)h(limited)g(in)f(length)g(to)h
-(80)h(c)m(haracters,)h(so)d(the)h(c)m(hoice)h(of)e(bu\013er)f(size)j
-(is)e(simpli\014ed.)0 4285 y(This)c(a\013ects)i(the)e(w)m(a)m(y)i(the)f
-(card)f(con)m(ten)m(ts)i(are)f(passed,)h(so)f(the)g(routines)f
-(themselv)m(es)i(are)f(sligh)m(tly)h(di\013eren)m(t.)0
-4398 y(The)37 b(follo)m(wing)i(is)e(therefore)h(the)g(FitsChan)f(equiv)
--5 b(alen)m(t)39 b(of)f(the)f(Channel)g(SOUR)m(CE)g(routine)g(giv)m(en)
-i(in)0 4511 y Fu(x)p FG(15.13:)262 4796 y Ft(INTEGER)h(FUNCTION)g
-(FITSSOURCE\()g(CARD,)h(STATUS)g(\))262 4896 y(CHARACTER)e(*)44
-b(\()f(80)f(\))i(CARD)262 4996 y(INTEGER)c(STATUS)262
-5195 y(READ\()h(1,)i('\(A\)',)e(END)h(=)h(99)g(\))g(CARD)262
-5295 y(FITSSOURCE)c(=)k(1)262 5394 y(RETURN)44 5593 y(99)130
-b(FITSSOURCE)39 b(=)k(0)262 5693 y(END)p eop end
-%%Page: 148 158
-TeXDict begin 148 157 bop 0 52 a FG(148)889 b Fz(16)92
-b(STORING)29 b(AST)h(OBJECTS)f(IN)h(FITS)g(HEADERS)g(\(FITSCHANS\))0
-351 y FG(Here,)25 b(the)d(FITS)g(card)h(con)m(ten)m(ts)h(are)f
-(returned)e Fx(via)h FG(the)h(CARD)g(argumen)m(t)g(\(the)g(AST)p
-Fy(_)p FG(PUTLINE)d(routine)0 464 y(should)31 b(not)i(b)s(e)e(used\))h
-(and)g(the)g(function)g(returns)f(1)h(to)h(indicate)h(that)e(a)h(card)f
-(has)g(b)s(een)g(read.)46 b(A)32 b(v)-5 b(alue)0 577
-y(of)31 b(zero)g(is)f(returned)f(if)i(there)f(are)h(no)f(more)h(cards)f
-(to)h(read.)0 740 y(The)36 b(sink)h(routine)g(for)f(a)h(FitsChan)g(is)g
-(also)h(a)f(little)i(di\013eren)m(t)e(\()p Fx(c.f.)f
-FG(the)h(SINK)f(routine)h(in)g Fu(x)p FG(15.14\),)k(as)0
-853 y(follo)m(ws:)262 1102 y Ft(SUBROUTINE)e(FITSSINK\()h(CARD,)h
-(STATUS)g(\))262 1201 y(CHARACTER)e(*)44 b(\()f(80)f(\))i(CARD)262
-1301 y(INTEGER)c(STATUS)262 1500 y(WRITE\()h(2,)h('\(A\)')g(\))h(CARD)
-262 1700 y(END)0 1962 y FG(The)20 b(con)m(ten)m(ts)i(of)e(the)h(FITS)e
-(card)h(b)s(eing)g(written)h(are)f(passed)g Fx(via)g
-FG(the)h(CARD)f(argumen)m(t)h(\(the)g(AST)p Fy(_)p FG(GETLINE)0
-2075 y(routine)30 b(should)g(not)g(b)s(e)g(used\).)0
-2238 y(Of)36 b(course,)j(b)s(oth)d(of)h(these)h(examples)f(assume)g
-(that)g(y)m(ou)g(are)h(accessing)g(text)g(\014les.)60
-b(If)36 b(this)h(is)g(not)g(the)0 2350 y(case,)f(then)d(appropriate)h
-(c)m(hanges)g(to)g(the)g(I/O)g(statemen)m(ts)h(w)m(ould)e(b)s(e)g
-(needed.)50 b(The)33 b(details)i(ob)m(viously)0 2463
-y(dep)s(end)e(on)h(the)h(format)f(of)h(the)f(\014le)h(y)m(ou)g(are)f
-(handling,)h(whic)m(h)f(need)h(not)f(necessarily)h(b)s(e)f(a)h(true)f
-(FITS)0 2576 y(\014le.)p eop end
-%%Page: 149 159
-TeXDict begin 149 158 bop 3643 52 a FG(149)0 351 y FA(17)135
-b(Using)46 b(F)-11 b(oreign)45 b(FITS)e(Enco)t(dings)0
-609 y FG(W)-8 b(e)38 b(sa)m(w)f(in)f(the)h(previous)f(section)i(\()p
-Fu(x)p FG(16\))g(ho)m(w)f(to)g(store)h(and)e(retriev)m(e)i(an)m(y)f
-(kind)e(of)i(AST)f(Ob)5 b(ject)37 b(in)f(a)0 722 y(FITS)27
-b(header)h(b)m(y)f(using)g(a)i(FitsChan.)39 b(T)-8 b(o)28
-b(ac)m(hiev)m(e)j(this,)d(w)m(e)g(set)g(the)g(FitsChan's)g(Enco)s(ding)
-f(attribute)i(to)0 835 y(NA)-8 b(TIVE.)29 b(Ho)m(w)m(ev)m(er,)j(the)d
-(Ob)5 b(jects)29 b(w)m(e)g(wrote)g(could)g(then)g(only)g(b)s(e)f(read)h
-(bac)m(k)g(b)m(y)g(other)g(programs)g(that)0 948 y(use)h(AST.)0
-1114 y(In)g(practice,)i(w)m(e)f(will)f(also)i(encoun)m(ter)f(FITS)e
-(headers)h(con)m(taining)i(W)m(CS)f(information)f(written)h(b)m(y)f
-(other)0 1227 y(soft)m(w)m(are)37 b(systems.)58 b(W)-8
-b(e)37 b(will)f(probably)f(also)i(need)f(to)g(write)g(FITS)g(headers)f
-(in)h(a)g(format)g(that)h(can)f(b)s(e)0 1340 y(understo)s(o)s(d)25
-b(b)m(y)i(these)g(systems.)40 b(Indeed,)27 b(this)g(in)m(terc)m(hange)h
-(of)g(data)f(is)g(one)g(of)h(the)f(main)g(reasons)g(for)f(the)0
-1452 y(existence)32 b(of)e(FITS,)g(so)h(in)f(this)g(section)i(w)m(e)f
-(will)f(examine)h(ho)m(w)g(to)g(accommo)s(date)h(these)f(requiremen)m
-(ts.)0 1757 y Fw(17.1)112 b(The)38 b(F)-9 b(oreign)38
-b(FITS)g(Enco)s(dings)0 1983 y FG(As)30 b(men)m(tioned)g(previously)f
-(\()p Fu(x)p FG(16.1\),)k(there)d(are)g(a)g(n)m(um)m(b)s(er)e(of)i(con)
-m(v)m(en)m(tions)h(curren)m(tly)f(in)f(use)h(for)f(storing)0
-2096 y(W)m(CS)g(information)g(in)g(FITS)f(headers,)h(whic)m(h)f(w)m(e)i
-(call)g Fx(enc)-5 b(o)g(dings.)41 b FG(Here,)30 b(w)m(e)f(are)g
-(concerned)g(with)g(those)0 2209 y(enco)s(dings)h(de\014ned)f(b)m(y)i
-(soft)m(w)m(are)g(systems)g(other)f(than)h(AST,)e(whic)m(h)i(w)m(e)f
-(term)h Fx(for)-5 b(eign)33 b(enc)-5 b(o)g(dings.)0 2375
-y FG(Curren)m(tly)d(,)31 b(AST)f(supp)s(orts)e(six)j(foreign)g(enco)s
-(dings,)g(whic)m(h)f(ma)m(y)i(b)s(e)e(selected)i(b)m(y)e(setting)i(the)
-f(Enco)s(ding)0 2488 y(attribute)g(of)g(a)f(FitsChan)h(to)g(one)f(of)h
-(the)f(follo)m(wing)i(\(c)m(haracter)h(string\))d(v)-5
-b(alues:)227 2761 y FE(DSS)427 2873 y FG(This)34 b(enco)s(ding)g
-(stores)h(W)m(CS)f(information)h(using)e(the)i(con)m(v)m(en)m(tion)h
-(dev)m(elop)s(ed)f(at)g(the)427 2986 y(Space)42 b(T)-8
-b(elescop)s(e)43 b(Science)f(Institute)g(for)g(the)f(Digitised)j(Sky)d
-(Surv)m(ey)g(\(DSS\))g(astro-)427 3099 y(metric)h(plate)h
-(calibrations.)75 b(DSS)41 b(images)i(whic)m(h)e(use)g(this)h(con)m(v)m
-(en)m(tion)h(are)f(widely)427 3212 y(a)m(v)-5 b(ailable)38
-b(and)d(it)g(is)h(understo)s(o)s(d)d(b)m(y)i(a)h(n)m(um)m(b)s(er)e(of)h
-(imp)s(ortan)m(t)h(and)f(w)m(ell-established)427 3325
-y(astronom)m(y)c(applications.)427 3456 y(Ho)m(w)m(ev)m(er,)46
-b(the)41 b(calibration)h(mo)s(del)f(used)f(\(based)h(on)f(a)h(p)s
-(olynomial)g(\014t\))g(is)g(not)g(eas-)427 3569 y(ily)e(applicable)g
-(to)g(other)f(t)m(yp)s(es)g(of)h(data)g(and)e(creating)j(the)e(p)s
-(olynomial)g(co)s(e\016cien)m(ts)427 3682 y(needed)e(to)h(calibrate)h
-(y)m(our)f(o)m(wn)f(images)i(can)e(pro)m(v)m(e)i(di\016cult.)58
-b(F)-8 b(or)37 b(this)g(reason,)h(the)427 3795 y(DSS)33
-b(enco)s(ding)g(is)g(probably)f(b)s(est)h(view)m(ed)h(as)f(a)h
-(\\read-only")g(format.)50 b(It)33 b(is)g(p)s(ossible,)427
-3908 y(ho)m(w)m(ev)m(er,)h(to)e(read)g(in)f(W)m(CS)h(information)g
-(using)f(this)g(enco)s(ding)h(and)f(then)g(to)i(write)f(it)427
-4021 y(bac)m(k)f(out)g(again,)h(so)e(long)h(as)g(only)f(minor)g(c)m
-(hanges)i(ha)m(v)m(e)f(b)s(een)f(made.)227 4170 y FE(FITS-W)m(CS)427
-4283 y FG(This)35 b(enco)s(ding)g(is)h(v)m(ery)g(imp)s(ortan)m(t)g(b)s
-(ecause)f(it)h(is)g(based)f(on)g(a)h(new)f(FITS)g(standard)427
-4396 y(whic)m(h)27 b(should,)f(for)h(the)f(\014rst)g(time,)i(address)e
-(the)h(problem)f(of)h(celestial)i(co)s(ordinate)e(sys-)427
-4509 y(tems)c(in)f(a)h(prop)s(er)f(manner,)h(b)m(y)g(considerably)f
-(extending)h(the)g(original)h(FITS)e(standard.)427 4640
-y(The)48 b(con)m(v)m(en)m(tions)i(used)d(are)h(describ)s(ed)f(in)h(a)g
-(series)h(of)f(pap)s(ers)f(b)m(y)h(E.W.)16 b(Greisen,)427
-4753 y(M.)g(Calabretta,)48 b Fx(et.)77 b(al.)p FG(,)47
-b(often)d(referred)e(to)i(as)g(the)f(\\FITS-W)m(CS)g(pap)s(ers".)79
-b(They)427 4866 y(are)30 b(describ)s(ed)f(at)h(h)m
-(ttp://\014ts.gsfc.nasa.go)m(v/\014ts)p Fy(_)p FG(w)m(cs.h)m(tml.)46
-b(No)m(w)30 b(that)g(the)g(\014rst)f(t)m(w)m(o)427 4979
-y(pap)s(ers)j(in)g(this)g(series)h(ha)m(v)m(e)h(b)s(een)e(agreed,)i
-(this)f(enco)s(ding)f(should)g(b)s(e)g(understo)s(o)s(d)e(b)m(y)427
-5092 y(an)m(y)41 b(FITS-W)m(CS)f(complian)m(t)i(soft)m(w)m(are)g(and)e
-(it)h(is)g(lik)m(ely)h(to)f(b)s(e)f(adopted)h(widely)f(for)427
-5205 y(FITS)31 b(data)i(in)e(future.)44 b(F)-8 b(or)32
-b(details)h(of)f(the)g(co)m(v)m(erage)j(of)d(these)g(con)m(v)m(en)m
-(tions)i(pro)m(vided)427 5318 y(b)m(y)d(the)f(FitsChan)g(class,)i(see)f
-(App)s(endix)d(F.)227 5467 y FE(FITS-IRAF)427 5580 y
-FG(This)34 b(enco)s(ding)h(is)f(based)g(on)h(the)g(con)m(v)m(en)m
-(tions)h(describ)s(ed)e(in)g(the)h(do)s(cumen)m(t)f(\\W)-8
-b(orld)427 5693 y(Co)s(ordinate)23 b(Systems)g(Represen)m(tations)h
-(Within)f(the)h(FITS)e(F)-8 b(ormat")25 b(b)m(y)e(R.J.)g(Hanisc)m(h)p
-eop end
-%%Page: 150 160
-TeXDict begin 150 159 bop 0 52 a FG(150)1885 b Fz(17)92
-b(USING)30 b(F)m(OREIGN)h(FITS)f(ENCODINGS)427 351 y
-FG(and)25 b(D.G.)h(W)-8 b(ells,)27 b(1988.)1283 318 y
-Fv(25)1399 351 y FG(It)e(is)g(emplo)m(y)m(ed)h(b)m(y)f(the)g(IRAF)g
-(data)g(analysis)h(facilit)m(y)-8 b(,)29 b(so)c(its)427
-464 y(use)i(will)g(facilitate)j(data)d(exc)m(hange)h(with)f(IRAF.)g
-(This)f(enco)s(ding)h(is)g(in)f(e\013ect)i(a)f(sub-set)427
-577 y(of)k(the)f(curren)m(t)h(FITS-W)m(CS)f(enco)s(ding.)227
-731 y FE(FITS-PC)427 844 y FG(This)j(enco)s(ding)g(is)h(based)f(on)g(a)
-h(previous)f(v)m(ersion)g(of)h(the)g(prop)s(osed)e(new)h(FITS)f(W)m(CS)
-427 957 y(standard)26 b(whic)m(h)h(used)f Fy(PCjjjjiii)e
-FG(and)i Fy(CDELTj)f FG(k)m(eyw)m(ords)i(to)g(describ)s(e)g(axis)g
-(rotation)427 1070 y(and)f(scaling.)41 b(V)-8 b(ersions)26
-b(of)h(AST)f(prior)f(to)i(V1.5)h(used)e(this)g(sc)m(heme)h(for)f(the)h
-(FITS-W)m(CS)427 1183 y(enco)s(ding.)51 b(As)34 b(of)g(V1.5,)i(FITS-W)m
-(CS)e(uses)f Fy(CDi_j)f FG(k)m(eyw)m(ords)i(instead.)2997
-1150 y Fv(26)3123 1183 y FG(The)g(FITS-)427 1296 y(PC)j(enco)s(ding)g
-(is)g(included)f(in)g(AST)h(V1.5)h(only)f(to)h(allo)m(w)g(FITS-W)m(CS)e
-(data)i(created)427 1408 y(with)33 b(previous)f(v)m(ersions)h(to)h(b)s
-(e)e(read.)48 b(It)33 b(should)f(not,)i(in)e(general,)j(b)s(e)d(used)g
-(to)i(create)427 1521 y(new)c(data)h(sets.)227 1675 y
-FE(FITS-AIPS)427 1788 y FG(This)38 b(enco)s(ding)h(is)g(based)g(on)g
-(the)g(con)m(v)m(en)m(tions)i(describ)s(ed)d(in)g(the)i(do)s(cumen)m(t)
-e(\\Non-)427 1901 y(linear)23 b(Co)s(ordinate)e(Systems)h(in)f(AIPS")h
-(b)m(y)g(Eric)g(W.)g(Greisen)g(\(revised)g(9th)h(Septem)m(b)s(er,)427
-2014 y(1994\).)667 1981 y Fv(27)790 2014 y FG(It)33 b(is)f(curren)m
-(tly)g(emplo)m(y)m(ed)h(b)m(y)f(the)h(AIPS)e(data)i(analysis)g(facilit)
-m(y)-8 b(,)35 b(so)e(its)f(use)427 2127 y(will)26 b(facilitate)i(data)e
-(exc)m(hange)h(with)e(AIPS.)f(This)h(enco)s(ding)g(uses)g
-Fy(CROTAi)e FG(and)i Fy(CDELTi)427 2240 y FG(k)m(eyw)m(ords)31
-b(to)g(describ)s(e)f(axis)h(rotation)g(and)f(scaling.)227
-2394 y FE(FITS-AIPS++)427 2507 y FG(Enco)s(des)c(co)s(ordinate)g
-(system)g(information)g(in)g(FITS)f(header)h(cards)f(using)h(the)g(con)
-m(v)m(en-)427 2620 y(tions)34 b(used)e(b)m(y)h(the)g(AIPS++)f(pro)5
-b(ject.)49 b(This)32 b(is)i(an)f(extension)g(of)g(FITS-AIPS)f(whic)m(h)
-427 2732 y(includes)e(some)h(of)g(the)f(features)h(of)f(FITS-PC)g(and)g
-(FITS-IRAF.)0 3018 y(F)-8 b(or)40 b(more)g(detail)g(ab)s(out)f(the)h
-(ab)s(o)m(v)m(e)g(enco)s(dings,)i(see)e(the)f(description)h(of)f(the)h
-(Enco)s(ding)f(attribute)h(in)0 3131 y(App)s(endix)29
-b(C.)0 3451 y Fw(17.2)112 b(Limitations)39 b(of)f(F)-9
-b(oreign)38 b(Enco)s(dings)0 3684 y FG(The)27 b(foreign)i(enco)s(dings)
-e(a)m(v)-5 b(ailable)30 b(for)e(storing)g(W)m(CS)g(information)g(in)g
-(FITS)f(headers)g(ha)m(v)m(e)j(a)e(n)m(um)m(b)s(er)e(of)0
-3796 y(limitations)k(when)d(compared)h(with)g(the)g(nativ)m(e)h(enco)s
-(ding)f(of)h(AST)e(Ob)5 b(jects)28 b(\()p Fu(x)p FG(16\).)42
-b(The)28 b(main)g(ones)g(are:)111 4082 y(1.)46 b(Only)36
-b(one)h(class)g(of)g(AST)f(Ob)5 b(ject,)38 b(the)f(F)-8
-b(rameSet,)40 b(ma)m(y)d(b)s(e)f(represen)m(ted)g(using)g(a)h(foreign)g
-(FITS)227 4195 y(enco)s(ding.)k(This)29 b(should)h(not)g(come)h(as)g(a)
-g(surprise,)e(b)s(ecause)h(the)h(purp)s(ose)d(of)j(storing)f(W)m(CS)h
-(infor-)227 4308 y(mation)38 b(in)e(FITS)g(headers)h(is)f(to)i(attac)m
-(h)h(co)s(ordinate)e(systems)g(to)g(an)g(asso)s(ciated)h(arra)m(y)g(of)
-f(data.)227 4421 y(Since)d(the)h(F)-8 b(rameSet)35 b(is)f(the)h(AST)e
-(Ob)5 b(ject)34 b(designed)g(for)g(the)h(same)f(purp)s(ose)f(\()p
-Fu(x)p FG(13.4\),)38 b(there)c(is)g(a)227 4534 y(natural)d(corresp)s
-(ondence.)227 4692 y(The)g(w)m(a)m(y)i(in)f(whic)m(h)f(a)h(F)-8
-b(rameSet)33 b(is)f(translated)g(to)h(and)e(from)g(the)h(foreign)g
-(enco)s(ding)g(also)g(follo)m(ws)227 4805 y(from)27 b(this)g(corresp)s
-(ondence.)40 b(The)27 b(F)-8 b(rameSet's)28 b(base)g(F)-8
-b(rame)28 b(iden)m(ti\014es)g(the)g(data)g(grid)f(co)s(ordinates)227
-4918 y(of)41 b(the)g(asso)s(ciated)h(FITS)d(data.)72
-b(These)41 b(are)f(the)h(same)g(as)g(FITS)f(pixel)h(co)s(ordinates,)j
-(in)c(whic)m(h)227 5031 y(the)32 b(\014rst)f(pixel)g(\(in)h(2)g
-(dimensions\))f(has)g(co)s(ordinates)h(\(1,1\))h(at)g(its)e(cen)m(tre.)
-45 b(Similarly)-8 b(,)33 b(the)f(curren)m(t)227 5144
-y(F)-8 b(rame)37 b(of)f(the)g(F)-8 b(rameSet)37 b(iden)m(ti\014es)f
-(the)g(FITS)f(w)m(orld)h(co)s(ordinate)h(system)f(asso)s(ciated)h(with)
-e(the)227 5256 y(data.)p 0 5334 1512 4 v 73 5387 a Fs(25)138
-5419 y Fr(Av)l(ailable)26 b(b)n(y)f(ftp)h(from)g(\014ts.cv.nrao.edu)g
-(/\014ts/do)r(cumen)n(ts/w)n(cs/w)n(cs88.ps.Z)73 5479
-y Fs(26)138 5510 y Fr(There)e(are)h(man)n(y)e(other)g(di\013erences)i
-(b)r(et)n(w)n(een)e(the)h(previous)f(and)h(the)f(curren)n(t)g(FITS-W)n
-(CS)g(enco)r(dings.)35 b(The)24 b(k)n(eyw)n(ords)0 5602
-y(to)i(describ)r(e)g(axis)g(rotation)h(and)e(scaling)i(is)f(used)g
-(purely)f(as)h(a)g(lab)r(el)h(to)f(iden)n(tify)f(the)g(sc)n(heme.)73
-5661 y Fs(27)138 5693 y Fr(Av)l(ailable)h(b)n(y)f(ftp)h(from)g
-(\014ts.cv.nrao.edu)g(/\014ts/do)r(cumen)n(ts/w)n(cs/aips27.ps.Z)p
-eop end
-%%Page: 151 161
-TeXDict begin 151 160 bop 0 52 a Fz(17.3)93 b(Iden)m(tifying)30
-b(F)-8 b(oreign)32 b(Enco)s(dings)e(on)g(Input)1820 b
-FG(151)111 351 y(2.)46 b(Y)-8 b(ou)36 b(ma)m(y)h(store)f(a)g(represen)m
-(tation)h(of)f(only)f(a)h(single)h(F)-8 b(rameSet)37
-b(in)e(an)m(y)h(individual)f(set)h(of)g(FITS)227 464
-y(header)f(cards)g(\()p Fx(i.e.)g FG(in)g(a)h(single)f(FitsChan\))h(at)
-g(one)f(time.)56 b(If)35 b(y)m(ou)g(attempt)i(to)f(store)f(more)h(than)
-227 577 y(one,)42 b(y)m(ou)d(ma)m(y)g(o)m(v)m(er-write)h(the)f
-(previous)f(one)h(or)g(generate)h(an)f(in)m(v)-5 b(alid)39
-b(represen)m(tation)h(of)f(y)m(our)227 690 y(W)m(CS)31
-b(information.)227 843 y(This)f(is)g(mainly)h(a)f(consequence)h(of)g
-(the)g(use)f(of)g(\014xed)g(FITS)f(k)m(eyw)m(ords)i(b)m(y)f(foreign)h
-(enco)s(dings)f(and)227 956 y(the)h(fact)g(that)g(y)m(ou)g(cannot,)g
-(in)f(general,)i(ha)m(v)m(e)f(m)m(ultiple)g(FITS)f(cards)g(with)g(the)h
-(same)g(k)m(eyw)m(ord.)111 1148 y(3.)46 b(In)36 b(general,)j(it)e(will)
-g(not)g(b)s(e)f(p)s(ossible)g(to)h(store)g(ev)m(ery)g(p)s(ossible)f(F)
--8 b(rameSet)38 b(that)f(y)m(ou)g(migh)m(t)g(con-)227
-1261 y(struct.)67 b(Dep)s(ending)39 b(on)g(the)g(enco)s(ding,)i(only)f
-(certain)g(F)-8 b(rameSets)40 b(that)f(conform)g(to)h(particular)227
-1374 y(restrictions)i(can)e(b)s(e)g(represen)m(ted)h(and,)h(ev)m(en)g
-(then,)h(some)d(of)h(their)g(information)f(ma)m(y)h(b)s(e)f(lost.)227
-1487 y(See)h(the)g(description)f(of)h(the)g(Enco)s(ding)f(attribute)h
-(in)f(App)s(endix)f(C)h(for)g(more)h(details)g(of)g(these)227
-1600 y(limitations.)0 1869 y(It)26 b(should)g(b)s(e)f(understo)s(o)s(d)
-g(that)h(using)g(foreign)h(enco)s(dings)f(to)h(read)f(and)f(write)i
-(information)f(held)g(in)g(AST)0 1982 y(Ob)5 b(jects)24
-b(is)f(essen)m(tially)j(a)e(pro)s(cess)f(of)h(con)m(v)m(erting)h(the)f
-(data)g(format.)39 b(As)24 b(suc)m(h,)h(it)f(p)s(oten)m(tially)h
-(su\013ers)e(from)0 2095 y(the)k(same)h(problems)e(faced)h(b)m(y)g(all)
-h(suc)m(h)f(pro)s(cesses,)h Fx(i.e.)e FG(di\013erences)h(b)s(et)m(w)m
-(een)h(the)f(AST)g(data)g(mo)s(del)g(and)0 2208 y(that)j(of)g(the)g
-(foreign)g(enco)s(ding)f(ma)m(y)h(cause)g(some)g(information)g(to)g(b)s
-(e)f(lost.)42 b(Because)30 b(the)g(AST)f(mo)s(del)g(is)0
-2321 y(extremely)h(\015exible,)f(ho)m(w)m(ev)m(er,)i(an)m(y)d(data)i
-(loss)f(can)f(largely)i(b)s(e)e(eliminated)i(when)d(reading.)41
-b(Instead,)29 b(this)0 2434 y(e\013ect)37 b(manifests)e(itself)h(in)f
-(the)h(form)f(of)g(the)h(ab)s(o)m(v)m(e)g(enco)s(ding-dep)s(enden)m(t)f
-(restrictions)h(on)f(the)h(kind)e(of)0 2547 y(AST)c(Ob)5
-b(jects)30 b(whic)m(h)g(ma)m(y)h(b)s(e)f(written.)0 2712
-y(One)d(of)g(the)g(aims)h(of)f(the)g(AST)g(library)-8
-b(,)28 b(of)f(course,)h(is)f(to)h(insulate)g(y)m(ou)f(from)g(the)g
-(details)h(of)g(these)f(foreign)0 2825 y(enco)s(dings)35
-b(and)f(the)i(restrictions)f(they)h(imp)s(ose.)54 b(W)-8
-b(e)36 b(will)g(see)f(shortly)-8 b(,)37 b(therefore,)g(ho)m(w)e(AST)f
-(pro)m(vides)0 2938 y(a)d(mec)m(hanism)h(for)e(determining)h(whether)g
-(y)m(our)g(W)m(CS)g(information)g(satis\014es)g(the)h(necessary)f
-(conditions)0 3051 y(and)f(allo)m(ws)h(y)m(ou)g(to)g(mak)m(e)h(an)e
-(automatic)i(c)m(hoice)g(of)f(whic)m(h)f(enco)s(ding)g(to)h(use.)0
-3352 y Fw(17.3)112 b(Iden)m(tifying)39 b(F)-9 b(oreign)37
-b(Enco)s(dings)h(on)g(Input)0 3577 y FG(Let)28 b(us)f(no)m(w)h(examine)
-g(the)g(practicalities)i(of)e(extracting)h(W)m(CS)f(information)g(from)
-f(a)h(set)g(of)g(FITS)f(header)0 3690 y(cards)c(whic)m(h)g(ha)m(v)m(e)i
-(b)s(een)d(written)i(b)m(y)f(some)g(other)h(soft)m(w)m(are)h(system.)38
-b(W)-8 b(e)25 b(will)e(pretend)g(that)h(our)f(program)0
-3803 y(do)s(es)32 b(not)g(kno)m(w)h(whic)m(h)f(enco)s(ding)g(has)g(b)s
-(een)f(used)h(for)g(the)g(W)m(CS)h(information)f(and)g(m)m(ust)g(disco)
-m(v)m(er)i(this)0 3916 y(for)e(itself.)48 b(In)32 b(order)g(to)h(ha)m
-(v)m(e)h(a)f(concrete)h(example,)g(ho)m(w)m(ev)m(er,)g(w)m(e)f(will)g
-(use)f(the)h(follo)m(wing)h(set)f(of)f(cards.)0 4029
-y(These)k(use)g(the)h(FITS-AIPS)e(enco)s(ding)h(and)g(con)m(tain)h(a)g
-(t)m(ypical)h(mix)e(of)h(other)f(FITS)g(cards)g(whic)m(h)g(are)0
-4142 y(irrelev)-5 b(an)m(t)32 b(to)f(the)f(W)m(CS)h(information)f(in)g
-(whic)m(h)g(w)m(e)h(are)g(in)m(terested:)227 4398 y Ft(SIMPLE)85
-b(=)871 b(T)43 b(/)h(Written)c(by)j(IDL:)86 b(30-Jul-1997)39
-b(05:35:42.00)227 4497 y(BITPIX)85 b(=)784 b(-32)42 b(/)i(Bits)e(per)g
-(pixel.)227 4597 y(NAXIS)129 b(=)871 b(2)43 b(/)h(Number)d(of)h
-(dimensions)227 4697 y(NAXIS1)85 b(=)784 b(300)42 b(/)i(Length)d(of)h
-(x)i(axis.)227 4796 y(NAXIS2)85 b(=)784 b(300)42 b(/)i(Length)d(of)h(y)
-i(axis.)227 4896 y(CTYPE1)85 b(=)43 b('GLON-ZEA')475
-b(/)44 b(X-axis)d(type)227 4996 y(CTYPE2)85 b(=)43 b('GLAT-ZEA')475
-b(/)44 b(Y-axis)d(type)227 5095 y(CRVAL1)85 b(=)479 b(-149.56866)39
-b(/)44 b(Reference)39 b(pixel)j(value)227 5195 y(CRVAL2)85
-b(=)479 b(-19.758201)39 b(/)44 b(Reference)39 b(pixel)j(value)227
-5295 y(CRPIX1)85 b(=)610 b(150.500)40 b(/)k(Reference)39
-b(pixel)227 5394 y(CRPIX2)85 b(=)610 b(150.500)40 b(/)k(Reference)39
-b(pixel)227 5494 y(CDELT1)85 b(=)566 b(-1.20000)40 b(/)k(Degrees/pixel)
-227 5593 y(CDELT2)85 b(=)610 b(1.20000)40 b(/)k(Degrees/pixel)227
-5693 y(CROTA1)85 b(=)610 b(0.00000)40 b(/)k(Rotation)c(in)j(degrees.)p
-eop end
-%%Page: 152 162
-TeXDict begin 152 161 bop 0 52 a FG(152)1885 b Fz(17)92
-b(USING)30 b(F)m(OREIGN)h(FITS)f(ENCODINGS)227 351 y
-Ft(SURVEY)85 b(=)43 b('COBE)f(DIRBE')227 451 y(BUNITS)85
-b(=)43 b('MJy/sr)84 b(')479 b(/)227 551 y(ORIGIN)85 b(=)43
-b('CDAC)172 b(')479 b(/)44 b(Cosmology)39 b(Data)j(Analysis)f(Center)
-227 650 y(TELESCOP=)f('COBE)172 b(')479 b(/)44 b(COsmic)d(Background)e
-(Explorer)h(satellite)227 750 y(INSTRUME=)g('DIRBE)128
-b(')479 b(/)44 b(COBE)e(instrument)d([DIRBE,)i(DMR,)h(FIRAS])227
-849 y(PIXRESOL=)868 b(9)43 b(/)h(Quad)e(tree)f(pixel)h(resolution)d
-([6,)k(9])227 949 y(DATE)173 b(=)43 b('27/09/94')475
-b(/)44 b(FITS)e(file)f(creation)g(date)h(\(dd/mm/yy\))227
-1049 y(DATE-MAP=)e('16/09/94')475 b(/)44 b(Date)e(of)g(original)f(file)
-h(creation)e(\(dd/mm/yy\))227 1148 y(COMMENT)215 b(COBE)42
-b(specific)f(keywords)227 1248 y(DATE-BEG=)f('08/12/89')475
-b(/)44 b(date)e(of)g(initial)f(data)h(represented)d(\(dd/mm/yy\))227
-1348 y(DATE-END=)h('25/09/90')475 b(/)44 b(date)e(of)g(final)g(data)g
-(represented)126 b(\(dd/mm/yy\))0 1589 y FG(The)34 b(\014rst)g(step)g
-(is)h(to)g(create)h(a)f(FitsChan)f(and)g(insert)g(these)h(cards)f(in)m
-(to)i(it.)53 b(If)34 b(CARDS)g(is)h(an)f(arra)m(y)h(of)0
-1702 y(c)m(haracter)e(strings)f(holding)g(the)g(header)f(cards)h(and)f
-(NCARDS)h(is)g(the)g(n)m(um)m(b)s(er)e(of)i(cards,)g(this)g(could)g(b)s
-(e)0 1815 y(done)e(as)h(follo)m(ws:)262 2043 y Ft(INCLUDE)40
-b('AST_PAR')262 2143 y(INTEGER)g(FITSCHAN,)g(ICARD,)h(NCARD,)g(STATUS)
-262 2242 y(CHARACTER)e(*)44 b(\()f(80)f(\))i(CARDS\()d(NCARD)g(\))262
-2442 y(STATUS)g(=)i(0)262 2641 y(...)262 2840 y(FITSCHAN)d(=)j
-(AST_FITSCHAN\()38 b(AST_NULL,)i(AST_NULL,)g(')j(',)g(STATUS)e(\))262
-2940 y(DO)h(1)h(ICARD)f(=)h(1,)g(NCARD)392 3039 y(CALL)f(AST_PUTFITS\()
-d(FITSCHAN,)h(CARDS\()h(ICARD)g(\),)i(.FALSE.,)d(STATUS)h(\))44
-3139 y(1)174 b(CONTINUE)0 3381 y FG(Note)25 b(that)g(w)m(e)g(ha)m(v)m
-(e)g(not)g(initialised)g(the)f(Enco)s(ding)g(attribute)h(of)f(the)g
-(FitsChan)g(as)h(w)m(e)f(did)g(in)f Fu(x)p FG(16.3)j(when)0
-3493 y(w)m(e)37 b(w)m(an)m(ted)f(to)h(use)f(the)g(nativ)m(e)i(enco)s
-(ding.)57 b(This)36 b(is)g(b)s(ecause)g(w)m(e)h(are)f(pretending)g(not)
-g(to)h(kno)m(w)f(whic)m(h)0 3606 y(enco)s(ding)29 b(to)i(use)e(and)g(w)
-m(an)m(t)h(AST)f(to)h(determine)g(this)f(for)h(us.)39
-b(By)30 b(lea)m(ving)h(the)f(Enco)s(ding)f(attribute)h(un-)0
-3719 y(set,)k(its)g(default)f(v)-5 b(alue)33 b(will)g(adjust)f(to)i
-(whic)m(hev)m(er)g(enco)s(ding)e(AST)g(considers)h(to)h(b)s(e)e(most)h
-(appropriate,)0 3832 y(according)40 b(to)g(the)f(FITS)f(header)h(cards)
-f(presen)m(t.)67 b(F)-8 b(or)40 b(details)g(of)f(ho)m(w)g(this)g(c)m
-(hoice)h(is)f(made,)j(see)d(the)0 3945 y(description)30
-b(of)h(the)g(Enco)s(ding)e(attribute)i(in)f(App)s(endix)f(C.)0
-4103 y(This)38 b(approac)m(h)i(has)f(the)g(ob)m(vious)h(adv)-5
-b(an)m(tages)40 b(of)g(making)f(our)g(program)g(simpler)f(and)h(more)g
-(\015exible)0 4216 y(and)34 b(of)g(freeing)g(us)g(from)g(ha)m(ving)g
-(to)h(kno)m(w)g(ab)s(out)e(the)i(di\013eren)m(t)f(enco)s(dings)g(a)m(v)
--5 b(ailable.)55 b(As)34 b(a)h(b)s(on)m(us,)f(it)0 4328
-y(also)e(means)e(that)h(the)g(program)f(will)h(b)s(e)f(able)h(to)h
-(read)e(an)m(y)h(new)f(enco)s(dings)h(that)g(AST)f(ma)m(y)h(supp)s(ort)
-e(in)0 4441 y(future,)h(without)g(needing)g(to)i(b)s(e)d(c)m(hanged.)0
-4599 y(A)m(t)40 b(this)g(p)s(oin)m(t,)i(w)m(e)e(could)g(enquire)f(the)g
-(default)h(v)-5 b(alue)40 b(of)g(the)g(Enco)s(ding)e(attribute,)43
-b(whic)m(h)d(indicates)0 4712 y(whic)m(h)30 b(enco)s(ding)g(AST)g(in)m
-(tends)g(to)h(use,)g(as)f(follo)m(ws:)262 4940 y Ft(CHARACTER)39
-b(*)44 b(\()f(20)f(\))i(ENCODE)262 5139 y(...)262 5339
-y(ENCODE)d(=)i(AST_GETC\()d(FITSCHAN,)g('Encoding',)f(STATUS)i(\))0
-5580 y FG(The)32 b(result)g(of)h(this)f(enquiry)f(w)m(ould)h(b)s(e)g
-(the)h(string)f(\\FITS-AIPS".)g(Note)i(that)f(w)m(e)g(could)f(also)h
-(ha)m(v)m(e)h(set)0 5693 y(the)d(FitsChan's)f(Enco)s(ding)g(attribute)h
-(explicitly)-8 b(,)32 b(suc)m(h)e(as)h(when)e(creating)j(it:)p
-eop end
-%%Page: 153 163
-TeXDict begin 153 162 bop 0 52 a Fz(17.4)93 b(Reading)30
-b(F)-8 b(oreign)32 b(W)m(CS)e(Information)h(from)f(a)g(FITS)g(Header)
-1164 b FG(153)262 351 y Ft(FITSCHAN)40 b(=)j(AST_FITSCHAN\()38
-b(AST_NULL,)i(AST_NULL,)g('Encoding=FITS-A)o(IP)o(S',)d(STATUS)k(\))0
-615 y FG(If)c(w)m(e)i(tried)f(to)g(read)g(information)g(using)g(this)f
-(enco)s(ding)h(\()p Fu(x)p FG(17.4\),)43 b(but)37 b(failed,)k(w)m(e)d
-(could)g(then)f(c)m(hange)0 728 y(the)30 b(enco)s(ding)f(and)g(try)g
-(again.)41 b(This)29 b(w)m(ould)g(allo)m(w)i(our)e(program)g(to)h(tak)m
-(e)h(con)m(trol)g(of)e(ho)m(w)h(the)f(optim)m(um)0 841
-y(c)m(hoice)k(of)e(enco)s(ding)h(is)f(arriv)m(ed)g(at.)44
-b(Ho)m(w)m(ev)m(er,)34 b(it)e(w)m(ould)f(also)h(in)m(v)m(olv)m(e)h
-(using)e(explicit)i(kno)m(wledge)f(of)f(the)0 954 y(enco)s(dings)f(a)m
-(v)-5 b(ailable)33 b(and)d(this)g(is)g(b)s(est)g(a)m(v)m(oided)i(if)e
-(p)s(ossible.)0 1249 y Fw(17.4)112 b(Reading)39 b(F)-9
-b(oreign)37 b(W)m(CS)h(Information)g(from)g(a)g(FITS)f(Header)0
-1471 y FG(Ha)m(ving)f(stored)f(a)h(set)f(of)h(FITS)e(header)h(cards)f
-(in)h(a)g(FitsChan)g(and)g(determined)f(ho)m(w)h(the)h(W)m(CS)f(infor-)
-0 1584 y(mation)k(is)f(enco)s(ded)f(\()p Fu(x)p FG(17.3\),)43
-b(the)38 b(next)g(step)h(is)f(to)g(read)g(an)g(AST)f(Ob)5
-b(ject)38 b(from)g(the)g(FitsChan)g(using)0 1697 y(AST)p
-Fy(_)p FG(READ.)i(W)-8 b(e)41 b(m)m(ust)f(also)i(remem)m(b)s(er)d(to)i
-(rewind)e(the)i(FitsChan)f(\014rst,)i(if)e(necessary)-8
-b(,)44 b(suc)m(h)c(as)h(b)m(y)0 1810 y(clearing)32 b(its)e(Card)g
-(attribute,)h(whic)m(h)f(defaults)h(to)g(1:)262 2060
-y Ft(INTEGER)40 b(WCSINFO)262 2260 y(...)262 2459 y(CALL)h(AST_CLEAR\()
-f(FITSCHAN,)g('Card',)g(STATUS)i(\))262 2559 y(WCSINFO)e(=)j
-(AST_READ\()d(FITSCHAN,)g(STATUS)h(\))0 2822 y FG(If)32
-b(the)g(p)s(oin)m(ter)g(returned)f(b)m(y)h(AST)p Fy(_)p
-FG(READ)f(is)h(not)g(equal)h(to)g(AST)p Fy(__)p FG(NULL,)e(then)g(an)h
-(Ob)5 b(ject)32 b(has)g(b)s(een)0 2935 y(read)40 b(successfully)-8
-b(.)71 b(Otherwise,)43 b(there)d(w)m(as)h(either)f(no)g(information)h
-(to)g(read)f(or)g(the)h(c)m(hoice)h(of)e(FITS)0 3048
-y(enco)s(ding)30 b(\()p Fu(x)p FG(17.3\))j(w)m(as)e(inappropriate.)0
-3212 y(A)m(t)37 b(this)f(p)s(oin)m(t)f(y)m(ou)i(migh)m(t)f(lik)m(e)h
-(to)g(indulge)f(in)f(a)i(little)g(data)g(v)-5 b(alidation)37
-b(along)g(the)f(lines)g(describ)s(ed)f(in)0 3324 y Fu(x)p
-FG(15.6,)e(for)d(example:)262 3575 y Ft(IF)42 b(\()h(AST_GETC\()d
-(WCSINFO,)h('Class',)f(STATUS)h(\))i(.EQ.)f('FrameSet')e(\))j(THEN)392
-3675 y(<the)f(Object)f(is)i(a)g(FrameSet,)d(so)j(use)f(it>)262
-3774 y(ELSE)392 3874 y(<something)e(unexpected)f(was)k(read>)262
-3974 y(END)f(IF)0 4237 y FG(If)26 b(a)h(foreign)f(enco)s(ding)h(has)f
-(de\014nitely)g(b)s(een)g(used,)h(then)f(the)g(Ob)5 b(ject)27
-b(will)g(automatically)i(b)s(e)d(a)g(F)-8 b(rameSet)0
-4350 y(\()p Fu(x)p FG(17.2\),)35 b(so)d(this)f(stage)j(can)d(b)s(e)h
-(omitted.)45 b(Ho)m(w)m(ev)m(er,)34 b(if)e(the)g(nativ)m(e)h(enco)s
-(ding)f(\()p Fu(x)p FG(16.1\))i(migh)m(t)e(ha)m(v)m(e)h(b)s(een)0
-4463 y(emplo)m(y)m(ed,)h(whic)m(h)d(is)h(a)g(p)s(ossibilit)m(y)h(if)f
-(y)m(ou)g(accept)h(the)f(FitsChan's)g(default)g(Enco)s(ding)g(v)-5
-b(alue,)33 b(then)e(an)m(y)0 4576 y(class)g(of)g(Ob)5
-b(ject)30 b(migh)m(t)h(ha)m(v)m(e)h(b)s(een)e(read)g(and)g(a)g(quic)m
-(k)h(c)m(hec)m(k)h(w)m(ould)e(b)s(e)g(w)m(orth)m(while.)0
-4739 y(If)23 b(y)m(ou)h(used)f(AST)p Fy(_)p FG(SHO)m(W)g(\()p
-Fu(x)p FG(4.4\))i(to)g(examine)f(the)g(F)-8 b(rameSet)24
-b(whic)m(h)g(results)f(from)g(reading)h(our)f(example)0
-4852 y(FITS)29 b(header)g(\()p Fu(x)p FG(17.3\),)k(y)m(ou)d(w)m(ould)g
-(\014nd)e(that)i(its)g(base)g(F)-8 b(rame)31 b(describ)s(es)e(the)h
-(image's)h(pixel)f(co)s(ordinate)0 4965 y(system)i(and)f(that)h(its)g
-(curren)m(t)g(F)-8 b(rame)32 b(is)g(a)g(SkyF)-8 b(rame)32
-b(represen)m(ting)g(galactic)i(co)s(ordinates.)46 b(These)31
-b(t)m(w)m(o)0 5078 y(F)-8 b(rames)34 b(are)f(in)m(ter-related)i(b)m(y)d
-(a)i(Mapping)f(\(actually)h(a)g(CmpMap\))e(whic)m(h)h(incorp)s(orates)g
-(the)g(e\013ects)h(of)0 5191 y(v)-5 b(arious)32 b(rotations,)h
-(scalings)f(and)f(a)h(\\zenithal)h(equal)f(area")h(sky)e(pro)5
-b(jection,)33 b(so)f(that)g(eac)m(h)h(pixel)f(of)f(the)0
-5304 y(FITS)f(image)h(is)g(mapp)s(ed)e(on)h(to)h(a)g(corresp)s(onding)e
-(sky)h(p)s(osition)h(in)f(galactic)j(co)s(ordinates.)0
-5467 y(Because)f(this)f(F)-8 b(rameSet)31 b(ma)m(y)h(b)s(e)e(used)g(b)s
-(oth)g(as)g(a)h(Mapping)g(\()p Fu(x)p FG(13.6\))i(and)d(as)h(a)g(F)-8
-b(rame)32 b(\()p Fu(x)p FG(13.8\),)i(it)d(ma)m(y)0 5580
-y(b)s(e)d(emplo)m(y)m(ed)j(directly)e(to)h(p)s(erform)e(man)m(y)h
-(useful)f(op)s(erations)i(without)f(an)m(y)g(need)g(to)h(decomp)s(ose)f
-(it)g(in)m(to)0 5693 y(its)i(comp)s(onen)m(t)f(parts.)41
-b(These)30 b(include:)p eop end
-%%Page: 154 164
-TeXDict begin 154 163 bop 0 52 a FG(154)1885 b Fz(17)92
-b(USING)30 b(F)m(OREIGN)h(FITS)f(ENCODINGS)136 351 y
-Fu(\017)46 b FG(T)-8 b(ransforming)32 b(data)h(grid)f(\(FITS)f(pixel\))
-i(co)s(ordinates)g(in)m(to)g(galactic)j(co)s(ordinates)c(and)g
-Fx(vic)-5 b(e)34 b(versa)227 464 y FG(\()p Fu(x)p FG(13.6\).)136
-650 y Fu(\017)46 b FG(F)-8 b(ormatting)35 b(co)s(ordinate)e(v)-5
-b(alues)33 b(\(either)h(pixel)f(or)f(galactic)k(co)s(ordinates\))e
-(ready)e(for)h(displa)m(y)g(to)g(a)227 763 y(user)d(\()p
-Fu(x)p FG(7.6)i(and)e Fu(x)p FG(7.7\).)136 949 y Fu(\017)46
-b FG(Enquiring)38 b(ab)s(out)g(axis)h(lab)s(els)f(\(or)h(other)f(axis)h
-(information|)p Fu(x)p FG(7.5\))i(whic)m(h)d(migh)m(t)h(b)s(e)f(used,)i
-(for)227 1062 y(example,)32 b(to)f(lab)s(el)f(columns)g(of)h(co)s
-(ordinates)g(in)f(a)h(table)g(\()p Fu(x)p FG(7.4\).)136
-1247 y Fu(\017)46 b FG(Aligning)31 b(the)e(image)i(with)e(another)h
-(image)h(from)e(whic)m(h)g(a)h(similar)f(F)-8 b(rameSet)31
-b(has)e(b)s(een)g(obtained)227 1360 y(\()p Fu(x)p FG(14.3\).)136
-1546 y Fu(\017)46 b FG(Creating)40 b(a)g(Plot)h(\()p
-Fu(x)p FG(21\),)j(whic)m(h)39 b(can)h(b)s(e)e(used)h(to)h(o)m(v)m(erla)
-m(y)i(a)e(v)-5 b(ariet)m(y)41 b(of)f(graphical)g(information)227
-1659 y(\(including)31 b(a)f(co)s(ordinate)i(grid|Figure)e(8\))h(on)g
-(the)f(displa)m(y)m(ed)h(image.)136 1845 y Fu(\017)46
-b FG(Generating)30 b(a)g(new)e(F)-8 b(rameSet)30 b(whic)m(h)e
-(re\015ects)i(an)m(y)f(geometrical)i(pro)s(cessing)e(y)m(ou)g(p)s
-(erform)f(on)g(the)227 1958 y(asso)s(ciated)41 b(image)g(data)f(\()p
-Fu(x)p FG(14.5\).)71 b(This)39 b(new)g(F)-8 b(rameSet)41
-b(could)f(then)f(b)s(e)g(written)h(out)f(as)h(FITS)227
-2071 y(headers)30 b(to)h(describ)s(e)f(the)h(mo)s(di\014ed)e(image)j
-(\()p Fu(x)p FG(17.7\).)0 2326 y(If)22 b(the)h(F)-8 b(rameSet)23
-b(con)m(tains)h(other)f(F)-8 b(rames)23 b(\(apart)g(from)f(the)h(base)f
-(and)g(curren)m(t)g(F)-8 b(rames\),)26 b(then)c(y)m(ou)h(w)m(ould)0
-2439 y(also)31 b(ha)m(v)m(e)h(access)g(to)f(information)f(ab)s(out)g
-(other)h(co)s(ordinate)g(systems)g(asso)s(ciated)h(with)e(the)g(image.)
-0 2729 y Fw(17.5)112 b(Remo)m(ving)26 b(W)m(CS)g(Information)g(from)g
-(FITS)g(Headers|the)g(Destructiv)m(e)f(Read)0 2949 y
-FG(It)d(is)f(instructiv)m(e)i(at)f(this)g(p)s(oin)m(t)f(to)h(examine)h
-(the)e(con)m(ten)m(ts)j(of)e(a)f(FitsChan)h(after)g(w)m(e)g(ha)m(v)m(e)
-h(read)e(a)h(F)-8 b(rameSet)0 3062 y(from)30 b(it)h(\()p
-Fu(x)p FG(17.4\).)43 b(The)30 b(follo)m(wing)i(w)m(ould)e(rewind)f(our)
-h(FitsChan)g(and)g(displa)m(y)h(its)g(con)m(ten)m(ts:)262
-3303 y Ft(CHARACTER)39 b(CARD)j(*)h(\()h(80)e(\))262
-3503 y(...)262 3702 y(CALL)f(AST_CLEAR\()f(FITSCHAN,)g('Card',)g
-(STATUS)i(\))44 3801 y(2)174 b(CONTINUE)262 3901 y(IF)42
-b(\()h(AST_FINDFITS\()c(FITSCHAN,)h('\045f',)h(CARD,)h(.TRUE.,)e
-(STATUS)h(\))j(\))f(THEN)392 4001 y(WRITE)f(\()h(*,)g('\(A\)')e(\))i
-(CARD)392 4100 y(GO)g(TO)g(2)262 4200 y(END)f(IF)0 4455
-y FG(The)30 b(output,)g(if)g(w)m(e)h(started)g(with)f(the)h(example)g
-(FITS)e(header)i(in)f Fu(x)p FG(17.3,)i(migh)m(t)f(lo)s(ok)g(lik)m(e)h
-(this:)227 4697 y Ft(SIMPLE)85 b(=)871 b(T)43 b(/)87
-b(Written)41 b(by)i(IDL:)85 b(30-Jul-1997)39 b(05:35:42.00)227
-4796 y(BITPIX)85 b(=)784 b(-32)42 b(/)87 b(Bits)42 b(per)g(pixel.)227
-4896 y(NAXIS)129 b(=)871 b(2)43 b(/)87 b(Number)41 b(of)i(dimensions)
-227 4996 y(NAXIS1)85 b(=)784 b(300)42 b(/)87 b(Length)41
-b(of)i(x)g(axis.)227 5095 y(NAXIS2)85 b(=)784 b(300)42
-b(/)87 b(Length)41 b(of)i(y)g(axis.)227 5195 y(SURVEY)85
-b(=)43 b('COBE)f(DIRBE')227 5295 y(BUNITS)85 b(=)43 b('MJy/sr)84
-b(')227 5394 y(ORIGIN)h(=)43 b('CDAC)172 b(')479 b(/)87
-b(Cosmology)40 b(Data)i(Analysis)e(Center)227 5494 y(TELESCOP=)g('COBE)
-172 b(')479 b(/)87 b(COsmic)41 b(Background)f(Explorer)g(satellite)227
-5593 y(INSTRUME=)g('DIRBE)128 b(')479 b(/)87 b(COBE)42
-b(instrument)e([DIRBE,)g(DMR,)i(FIRAS])227 5693 y(PIXRESOL=)868
-b(9)43 b(/)87 b(Quad)42 b(tree)g(pixel)g(resolution)d([6,)j(9])p
-eop end
-%%Page: 155 165
-TeXDict begin 155 164 bop 0 52 a Fz(17.6)93 b(Propagating)31
-b(W)m(CS)g(Information)f(through)g(Data)i(Pro)s(cessing)e(Steps)904
-b FG(155)227 351 y Ft(DATE)173 b(=)43 b('27/09/94')475
-b(/)87 b(FITS)42 b(file)g(creation)e(date)i(\(dd/mm/yy\))227
-451 y(DATE-MAP=)e('16/09/94')475 b(/)87 b(Date)42 b(of)h(original)d
-(file)i(creation)e(\(dd/mm/yy\))227 551 y(COMMENT)215
-b(COBE)42 b(specific)f(keywords)227 650 y(DATE-BEG=)f('08/12/89')475
-b(/)87 b(date)42 b(of)h(initial)e(data)h(represented)d(\(dd/mm/yy\))227
-750 y(DATE-END=)h('25/09/90')475 b(/)87 b(date)42 b(of)h(final)e(data)h
-(represented)127 b(\(dd/mm/yy\))0 1018 y FG(Comparing)42
-b(this)f(with)h(the)g(original,)k(y)m(ou)d(can)f(see)g(that)h(all)g
-(the)f(FITS)f(cards)h(that)g(represen)m(t)g(W)m(CS)0
-1131 y(information)36 b(ha)m(v)m(e)i(b)s(een)d(remo)m(v)m(ed.)59
-b(They)35 b(ha)m(v)m(e)i(e\013ectiv)m(ely)i(b)s(een)d(\\suc)m(k)m(ed)h
-(out")f(of)g(the)h(FitsChan)f(b)m(y)0 1244 y(the)41 b(destructiv)m(e)h
-(read)f(that)h(AST)p Fy(_)p FG(READ)f(p)s(erforms)e(and)i(con)m(v)m
-(erted)h(in)m(to)g(an)f(equiv)-5 b(alen)m(t)43 b(F)-8
-b(rameSet.)0 1357 y(AST)35 b(remem)m(b)s(ers)h(where)f(they)i(w)m(ere)f
-(stored,)i(ho)m(w)m(ev)m(er,)i(so)c(that)h(if)f(w)m(e)g(later)i(write)e
-(W)m(CS)g(information)0 1470 y(bac)m(k)28 b(in)m(to)h(the)e(FitsChan)g
-(\()p Fu(x)p FG(17.7\))j(they)e(will,)h(as)e(far)g(as)h(p)s(ossible,)g
-(go)g(bac)m(k)g(in)m(to)h(their)e(original)i(lo)s(cations.)0
-1583 y(This)h(helps)f(to)j(preserv)m(e)e(the)h(o)m(v)m(erall)h(la)m(y)m
-(out)h(of)d(the)h(FITS)e(header.)0 1747 y(Y)-8 b(ou)32
-b(can)f(no)m(w)h(see)f(wh)m(y)g(AST)p Fy(_)p FG(READ)g(p)s(erforms)e
-(destructiv)m(e)k(reads.)43 b(It)31 b(is)g(a)h(mec)m(hanism)g(for)f
-(remo)m(ving)0 1860 y(W)m(CS)g(information)h(from)f(a)h(FITS)e(header)i
-(while)f(insulating)h(y)m(ou,)g(as)g(a)f(programmer,)h(from)f(the)g
-(details)0 1973 y(of)j(the)g(enco)s(ding)f(b)s(eing)h(used.)49
-b(It)34 b(means)g(y)m(ou)g(can)g(ensure)f(that)h(all)g(relev)-5
-b(an)m(t)35 b(header)f(cards)f(ha)m(v)m(e)i(b)s(een)0
-2086 y(remo)m(v)m(ed,)30 b(giving)f(y)m(ou)g(a)f(clean)h(slate,)h
-(without)f(ha)m(ving)f(to)h(kno)m(w)g(whic)m(h)f(FITS)f(k)m(eyw)m(ords)
-i(an)m(y)f(particular)0 2199 y(enco)s(ding)i(uses.)0
-2364 y(Clearing)c(this)g(W)m(CS)f(information)h(out)g(of)g(a)g(FITS)f
-(header)h(is)g(particularly)g(imp)s(ortan)m(t)g(when)e(considering)0
-2477 y(ho)m(w)35 b(to)h(write)f(new)f(W)m(CS)h(information)g(bac)m(k)h
-(after)g(pro)s(cessing)e(\()p Fu(x)p FG(17.7\).)57 b(If)35
-b(an)m(y)g(relev)-5 b(an)m(t)36 b(FITS)f(cards)0 2590
-y(are)25 b(left)h(o)m(v)m(er)h(from)d(the)h(input)f(dataset)j(and)d
-(\014nd)g(their)h(w)m(a)m(y)h(in)m(to)g(the)f(new)g(pro)s(cessed)f
-(header,)i(they)f(could)0 2702 y(in)m(terfere)38 b(with)f(the)h(new)f
-(information)h(b)s(eing)f(written.)2003 2669 y Fv(28)2140
-2702 y FG(The)g(destructiv)m(e)h(read)g(mec)m(hanism)f(ensures)0
-2815 y(that)31 b(this)f(do)s(esn't)g(happ)s(en.)0 3115
-y Fw(17.6)112 b(Propagating)38 b(W)m(CS)g(Information)g(through)g(Data)
-f(Pro)s(cessing)h(Steps)0 3340 y FG(One)43 b(of)h(the)g(purp)s(oses)e
-(of)i(AST)f(is)h(to)g(mak)m(e)h(it)f(feasible)h(to)f(propagate)h(W)m
-(CS)f(information)g(through)0 3453 y(successiv)m(e)d(stages)g(of)f
-(data)h(pro)s(cessing,)h(so)e(that)h(it)f(remains)g(consisten)m(t)h
-(with)f(the)g(asso)s(ciated)h(image)0 3565 y(data.)46
-b(As)32 b(far)g(as)g(p)s(ossible,)h(this)e(should)g(happ)s(en)g
-(regardless)h(of)g(the)g(FITS)g(enco)s(ding)g(used)f(to)i(store)f(the)0
-3678 y(original)g(W)m(CS)e(information.)0 3843 y(If)36
-b(the)h(data)h(pro)s(cessing)f(b)s(eing)f(p)s(erformed)g(do)s(es)g(not)
-h(c)m(hange)h(the)f(relationship)g(b)s(et)m(w)m(een)h(image)g(pixel)0
-3956 y(and)d(w)m(orld)g(co)s(ordinates)h(\(whatev)m(er)h(these)f(ma)m
-(y)g(b)s(e\),)g(then)g(propagation)g(of)g(the)f(W)m(CS)h(information)f
-(is)0 4069 y(straigh)m(tforw)m(ard.)42 b(Y)-8 b(ou)30
-b(can)h(simply)f(cop)m(y)h(the)g(FITS)e(header)h(from)g(input)g(to)h
-(output.)0 4234 y(If)k(this)h(relationship)g(c)m(hanges,)i(ho)m(w)m(ev)
-m(er,)g(then)e(the)f(W)m(CS)h(information)g(m)m(ust)f(b)s(e)g(pro)s
-(cessed)g(alongside)0 4346 y(the)d(image)h(data)f(and)f(a)h(new)f(FITS)
-g(header)g(generated)h(to)h(represen)m(t)e(it.)45 b(In)31
-b(this)g(case,)j(the)d(sequence)h(of)0 4459 y(op)s(erations)f(within)f
-(y)m(our)g(program)g(w)m(ould)g(probably)g(b)s(e)f(as)i(follo)m(ws:)111
-4728 y(1.)46 b(Read)c(the)f(image)i(data)e(and)g(asso)s(ciated)i(FITS)d
-(header)h(from)g(the)g(input)g(dataset,)k(putting)c(the)227
-4841 y(header)30 b(cards)h(in)m(to)g(a)g(FitsChan)f(\()p
-Fu(x)p FG(17.3\).)111 5032 y(2.)46 b(Read)c(an)f(AST)f(Ob)5
-b(ject,)45 b(a)c(F)-8 b(rameSet,)46 b(from)40 b(the)i(FitsChan)f(\(t)m
-(ypically)i(using)e(a)h(foreign)f(FITS)227 5145 y(enco)s(ding|)p
-Fu(x)p FG(17.4\).)111 5337 y(3.)46 b(Pro)s(cess)31 b(the)f(image)i
-(data)f(and)f(mo)s(dify)f(the)i(F)-8 b(rameSet)31 b(accordingly)h(\()p
-Fx(e.g.)e Fu(x)p FG(14.5\).)p 0 5425 1512 4 v 73 5479
-a Fs(28)138 5510 y Fr(This)d(can)g(happ)r(en)f(if)h(a)g(particular)g(k)
-n(eyw)n(ord)f(is)i(presen)n(t)e(in)g(the)g(input)g(header)h(but)e(is)j
-(not)e(used)g(in)h(the)f(output)f(header)0 5602 y(\(whether)30
-b(particular)g(k)n(eyw)n(ords)g(are)g(used)f(can)h(dep)r(end)f(on)h
-(the)f(W)n(CS)h(information)h(b)r(eing)f(stored\).)47
-b(In)29 b(suc)n(h)h(a)g(case,)i(the)0 5693 y(original)27
-b(v)l(alue)f(w)n(ould)g(not)f(b)r(e)h(o)n(v)n(er-written)f(b)n(y)g(a)h
-(new)g(output)f(v)l(alue,)g(so)i(w)n(ould)f(remain)g(erroneously)g
-(presen)n(t.)p eop end
-%%Page: 156 166
-TeXDict begin 156 165 bop 0 52 a FG(156)1885 b Fz(17)92
-b(USING)30 b(F)m(OREIGN)h(FITS)f(ENCODINGS)111 351 y
-FG(4.)46 b(W)-8 b(rite)32 b(the)f(F)-8 b(rameSet)31 b(bac)m(k)g(in)m
-(to)h(the)e(FitsChan)g(\()p Fu(x)p FG(17.7\).)111 560
-y(5.)46 b(P)m(erform)31 b(an)m(y)f(other)h(mo)s(di\014cation)g(of)f
-(FITS)g(header)g(cards)g(y)m(our)g(program)h(ma)m(y)g(require.)111
-769 y(6.)46 b(W)-8 b(rite)35 b(the)e(FitsChan)h(con)m(ten)m(ts)h(\()p
-Fx(i.e.)e FG(pro)s(cessed)f(header)i(cards\))f(and)g(image)h(data)g(to)
-g(the)g(output)227 882 y(dataset.)0 1176 y(In)28 b(stage)j(\(2\),)g
-(the)e(original)i(W)m(CS)e(information)g(will)h(b)s(e)e(remo)m(v)m(ed)j
-(from)d(the)i(FitsChan)f(b)m(y)g(a)g(destructiv)m(e)0
-1289 y(read.)62 b(Later,)40 b(in)e(stage)h(\(4\),)h(new)d(W)m(CS)h
-(information)g(is)f(written)h(to)g(replace)h(it.)63 b(This)37
-b(is)g(the)h(pro)s(cess)0 1402 y(whic)m(h)30 b(w)m(e)h(consider)f(next)
-h(\()p Fu(x)p FG(17.7\).)0 1731 y Fw(17.7)112 b(W)-9
-b(riting)37 b(F)-9 b(oreign)38 b(W)m(CS)f(Information)h(to)f(a)h(FITS)g
-(Header)0 1968 y FG(Before)g(w)m(e)f(can)g(write)f(pro)s(cessed)g(W)m
-(CS)h(information)g(held)f(in)h(a)g(F)-8 b(rameSet)37
-b(bac)m(k)h(in)m(to)f(a)g(FitsChan)g(in)0 2081 y(preparation)i(for)g
-(output,)h(w)m(e)g(m)m(ust)f(select)h(the)f(FITS)f(enco)s(ding)h(to)h
-(use.)66 b(Unfortunately)-8 b(,)42 b(w)m(e)d(cannot)0
-2194 y(simply)26 b(dep)s(end)g(on)h(the)g(default)g(v)-5
-b(alue)27 b(of)g(the)h(Enco)s(ding)e(attribute,)i(as)g(w)m(e)f(did)f
-(when)g(reading)h(the)g(input)0 2307 y(information)34
-b(\()p Fu(x)p FG(17.3\),)k(b)s(ecause)33 b(the)h(destructiv)m(e)h
-(action)g(of)f(reading)g(the)g(W)m(CS)g(data)h(\()p Fu(x)p
-FG(17.5\))h(will)e(ha)m(v)m(e)0 2419 y(altered)28 b(the)f(FitsChan's)g
-(con)m(ten)m(ts.)41 b(This,)27 b(in)g(turn,)f(will)i(ha)m(v)m(e)g(c)m
-(hanged)f(the)g(c)m(hoice)i(of)e(default)g(enco)s(ding,)0
-2532 y(probably)j(causing)g(it)h(to)g(rev)m(ert)g(to)h(NA)-8
-b(TIVE.)0 2706 y(W)g(e)31 b(will)g(return)e(to)h(the)h(question)f(of)g
-(the)g(optim)m(um)g(c)m(hoice)i(of)f(enco)s(ding)f(b)s(elo)m(w.)40
-b(F)-8 b(or)31 b(no)m(w,)g(let's)g(assume)0 2819 y(w)m(e)d(w)m(an)m(t)g
-(to)g(use)f(the)g(same)h(enco)s(ding)f(for)g(output)g(as)g(w)m(e)h
-(used)f(for)g(input.)38 b(Since)28 b(w)m(e)f(enquired)g(what)g(that)0
-2931 y(w)m(as)32 b(b)s(efore)f(w)m(e)h(read)g(the)f(input)g(W)m(CS)h
-(data)g(from)f(the)h(FitsChan)f(\()p Fu(x)p FG(17.3\),)k(w)m(e)d(can)g
-(no)m(w)g(set)g(that)g(v)-5 b(alue)0 3044 y(explicitly)d(.)49
-b(W)-8 b(e)34 b(can)f(also)h(set)f(the)f(FitsChan's)h(Card)f(attribute)
-h(bac)m(k)g(to)h(1)f(at)g(the)g(same)g(time)g(\(b)s(ecause)0
-3157 y(the)c(write)g(will)h(fail)g(if)f(the)g(FitsChan)g(is)g(not)g
-(rew)m(ound\).)40 b(AST)p Fy(_)p FG(WRITE)28 b(can)h(then)g(b)s(e)f
-(used)g(to)i(write)f(the)0 3270 y(output)h(W)m(CS)g(information)h(in)m
-(to)g(the)g(FitsChan:)262 3551 y Ft(INTEGER)40 b(NOBJ)262
-3750 y(...)262 4049 y(CALL)h(AST_SET\()g(FITSCHAN,)f('Card=1,)g
-(Encoding=')f(//)k(ENCODE,)e(STATUS)g(\))262 4149 y(NOBJ)g(=)j
-(AST_WRITE\()39 b(FITSCHAN,)h(WCSINFO,)g(STATUS)h(\))0
-4443 y FG(The)f(v)-5 b(alue)42 b(returned)d(b)m(y)i(AST)p
-Fy(_)p FG(WRITE)f(\(assigned)h(to)h(NOBJ\))f(indicates)g(ho)m(w)g(man)m
-(y)g(Ob)5 b(jects)41 b(w)m(ere)0 4556 y(written.)48 b(This)32
-b(will)h(either)g(b)s(e)f(1)h(or)g(zero.)49 b(A)32 b(v)-5
-b(alue)34 b(of)e(zero)i(is)f(used)f(to)h(indicate)h(that)f(the)g
-(information)0 4669 y(could)25 b(not)g(b)s(e)f(enco)s(ded)h(in)f(the)h
-(form)g(y)m(ou)g(requested.)39 b(If)24 b(this)h(happ)s(ens,)f(nothing)h
-(will)g(ha)m(v)m(e)h(b)s(een)e(written.)0 4842 y(If)31
-b(y)m(our)g(c)m(hoice)i(of)e(enco)s(ding)g(pro)m(v)m(es)h(inadequate,)g
-(the)f(probable)g(reason)g(is)h(that)f(the)h(c)m(hanges)g(y)m(ou)f(ha)m
-(v)m(e)0 4955 y(made)23 b(to)g(the)g(F)-8 b(rameSet)24
-b(ha)m(v)m(e)g(caused)f(it)h(to)f(depart)g(from)f(the)h(data)h(mo)s
-(del)e(whic)m(h)h(the)g(enco)s(ding)g(assumes.)0 5068
-y(AST)43 b(kno)m(ws)g(ab)s(out)h(the)g(data)g(mo)s(del)g(used)f(b)m(y)g
-(eac)m(h)i(enco)s(ding)f(and)f(will)h(attempt)h(to)f(simplify)f(the)0
-5181 y(F)-8 b(rameSet)31 b(y)m(ou)e(pro)m(vide)h(so)g(as)f(to)i(\014t)e
-(in)m(to)h(that)g(mo)s(del,)g(th)m(us)f(relieving)i(y)m(ou)f(of)f(the)h
-(need)f(to)h(understand)0 5294 y(the)38 b(details)h(and)f(limitations)i
-(of)e(eac)m(h)h(enco)s(ding)f(y)m(ourself.)65 b(When)37
-b(this)h(attempt)i(fails,)g(ho)m(w)m(ev)m(er,)i(y)m(ou)0
-5407 y(m)m(ust)30 b(consider)h(what)f(alternativ)m(e)j(enco)s(ding)d
-(to)h(use.)0 5580 y(Ideally)-8 b(,)31 b(y)m(ou)e(w)m(ould)g(probably)g
-(w)m(an)m(t)h(to)g(try)f(a)g(sequence)h(of)f(alternativ)m(e)j(enco)s
-(dings,)d(using)g(an)g(approac)m(h)0 5693 y(suc)m(h)h(as)h(the)f(follo)
-m(wing:)p eop end
-%%Page: 157 167
-TeXDict begin 157 166 bop 0 52 a Fz(17.7)93 b(W)-8 b(riting)31
-b(F)-8 b(oreign)32 b(W)m(CS)e(Information)g(to)i(a)e(FITS)g(Header)1289
-b FG(157)0 351 y Ft(*)87 b(1.)262 451 y(CALL)41 b(AST_SET\()g
-(FITSCHAN,)f('Card=1,)g(Encoding=FITS-WC)o(S')o(,)e(STATUS)j(\))262
-551 y(IF)h(\()h(AST_WRITE\()d(FITSCHAN,)g(WCSINFO,)g(STATUS)h(\))i
-(.EQ.)f(0)h(\))h(THEN)0 750 y(*)87 b(2.)392 849 y(CALL)42
-b(AST_SETC\()e(FITSCHAN,)g('Encoding',)f(ENCODE,)i(STATUS)g(\))392
-949 y(IF)i(\()g(AST_WRITE\()d(FITSCHAN,)g(WCSINFO,)g(STATUS)h(\))i
-(.EQ.)f(0)h(\))g(THEN)0 1148 y(*)87 b(3.)523 1248 y(CALL)42
-b(AST_SET\()e(FITSCHAN,)g('Encoding=NATIVE)o(',)d(STATUS)k(\))523
-1348 y(NOBJ)h(=)h(AST_WRITE\()d(FITSCHAN,)f(WCSINFO,)i(STATUS)g(\))392
-1447 y(END)i(IF)262 1547 y(END)f(IF)0 1809 y FG(That)30
-b(is:)111 2071 y(1.)46 b(Start)29 b(b)m(y)g(trying)g(the)f(FITS-W)m(CS)
-h(enco)s(ding,)g(on)g(the)g(grounds)e(that)i(FITS)f(should)g(pro)m
-(vide)h(a)g(uni-)227 2184 y(v)m(ersal)g(in)m(terc)m(hange)g(standard)e
-(in)g(whic)m(h)h(all)g(W)m(CS)g(information)f(should)g(b)s(e)g
-(expressed)g(if)h(p)s(ossible.)111 2372 y(2.)46 b(If)35
-b(that)h(fails,)h(then)d(try)h(the)h(original)g(enco)s(ding)f(used)f
-(for)h(the)g(input)f(W)m(CS)h(information,)i(on)e(the)227
-2485 y(grounds)g(that)h(y)m(ou)f(are)h(at)h(least)f(not)g(making)g(the)
-f(information)h(an)m(y)g(harder)f(for)g(others)g(to)i(read)227
-2598 y(than)30 b(it)h(originally)h(w)m(as.)111 2785 y(3.)46
-b(If)23 b(that)h(also)g(fails,)i(then)d(y)m(ou)g(are)h(probably)e
-(trying)i(to)g(store)g(fairly)f(complex)h(information)g(for)f(whic)m(h)
-227 2898 y(y)m(ou)36 b(need)g(the)g(nativ)m(e)h(enco)s(ding.)56
-b(Only)35 b(other)h(AST)f(programs)h(will)g(then)f(b)s(e)g(able)i(to)f
-(read)g(this)227 3011 y(information,)i(but)d(these)h(are)g(probably)f
-(the)h(only)f(programs)h(that)g(will)g(b)s(e)f(able)h(to)g(do)g(an)m
-(ything)227 3124 y(sensible)31 b(with)f(it)h(an)m(yw)m(a)m(y)-8
-b(.)0 3387 y(An)20 b(alternativ)m(e)k(approac)m(h)d(migh)m(t)h(b)s(e)e
-(to)h(enco)s(de)g(the)g(W)m(CS)g(information)g(in)g(sev)m(eral)h(w)m(a)
-m(ys,)i(since)d(this)g(giv)m(es)0 3499 y(the)29 b(maxim)m(um)h(c)m
-(hance)g(that)g(other)f(soft)m(w)m(are)i(will)f(b)s(e)e(able)i(to)g
-(read)f(it.)41 b(This)29 b(approac)m(h)g(is)h(only)f(p)s(ossible)0
-3612 y(if)j(there)g(is)f(no)h(signi\014can)m(t)g(con\015ict)h(b)s(et)m
-(w)m(een)f(the)g(FITS)f(k)m(eyw)m(ords)h(used)f(b)m(y)h(the)g
-(di\013eren)m(t)g(enco)s(dings)3680 3579 y Fv(29)3754
-3612 y FG(.)0 3725 y(Adopting)42 b(this)f(approac)m(h)h(w)m(ould)f
-(simply)h(require)f(m)m(ultiple)h(calls)h(to)f(AST)p
-Fy(_)p FG(WRITE,)f(rewinding)f(the)0 3838 y(FitsChan)30
-b(and)g(c)m(hanging)h(its)g(Enco)s(ding)f(v)-5 b(alue)31
-b(b)s(efore)f(eac)m(h)h(one.)0 4001 y(Unfortunately)-8
-b(,)26 b(ho)m(w)m(ev)m(er,)g(there)e(is)f(a)h(dra)m(wbac)m(k)g(to)g
-(duplicating)g(W)m(CS)f(information)h(in)f(the)h(FITS)f(header)0
-4114 y(in)38 b(this)h(w)m(a)m(y)-8 b(,)42 b(b)s(ecause)d(an)m(y)g
-(program)g(whic)m(h)f(mo)s(di\014es)g(one)h(v)m(ersion)g(of)g(this)g
-(information)g(and)f(simply)0 4227 y(copies)27 b(the)f(remainder)f(of)h
-(the)h(header)e(will)i(risk)e(pro)s(ducing)g(t)m(w)m(o)i(inconsisten)m
-(t)g(sets)g(of)f(information.)39 b(This)0 4340 y(could)34
-b(ob)m(viously)h(b)s(e)e(confusing)h(to)g(subsequen)m(t)f(soft)m(w)m
-(are.)53 b(Whether)35 b(y)m(ou)f(consider)g(this)g(a)g(w)m(orth)m
-(while)0 4453 y(risk)c(probably)g(dep)s(ends)e(on)i(the)h(use)f(to)h
-(whic)m(h)f(y)m(ou)h(exp)s(ect)g(y)m(our)f(data)h(to)g(b)s(e)f(put.)p
-0 5516 1512 4 v 73 5570 a Fs(29)138 5602 y Fr(In)g(practice,)j(this)e
-(means)g(y)n(ou)f(should)g(a)n(v)n(oid)h(mixing)g(FITS-IRAF,)e(FITS-W)n
-(CS,)h(FITS-AIPS,)g(FITS-AIPS++)f(and)0 5693 y(FITS-PC)d(enco)r(dings)g
-(since)g(they)f(share)h(man)n(y)g(k)n(eyw)n(ords.)p eop
-end
-%%Page: 158 168
-TeXDict begin 158 167 bop 0 52 a FG(158)1885 b Fz(17)92
-b(USING)30 b(F)m(OREIGN)h(FITS)f(ENCODINGS)p eop end
-%%Page: 159 169
-TeXDict begin 159 168 bop 3643 52 a FG(159)0 351 y FA(18)135
-b(Storing)45 b(AST)f(Ob)7 b(jects)46 b(as)f(XML)f(\(XmlChan\))0
-603 y FG(XML)208 570 y Fv(30)347 603 y FG(is)32 b(fast)h(b)s(ecoming)f
-(the)g(standard)g(format)g(for)g(passing)g(structured)f(data)i(around)e
-(the)h(in)m(ternet,)0 716 y(and)20 b(m)m(uc)m(h)h(general)h(purp)s(ose)
-d(soft)m(w)m(are)j(has)e(b)s(een)g(written)h(for)g(tasks)g(suc)m(h)f
-(as)h(the)g(parsing,)i(editing,)g(displa)m(y)0 829 y(and)29
-b(transformation)g(of)h(XML)f(data.)41 b(The)29 b(XmlChan)g(class)h
-(\(a)g(sp)s(ecialised)f(form)g(of)h(Channel\))e(pro)m(vides)0
-941 y(facilities)k(for)f(storing)f(AST)g(ob)5 b(jects)31
-b(externally)g(in)f(the)h(form)f(of)g(XML)h(do)s(cumen)m(ts,)f(th)m(us)
-g(allo)m(wing)i(suc)m(h)0 1054 y(soft)m(w)m(are)g(to)f(b)s(e)f(used.)0
-1216 y(The)40 b(primary)f(XML)h(format)h(used)e(b)m(y)h(the)h(XmlChan)e
-(class)i(is)g(a)f(fairly)h(close)g(transliteration)h(of)e(the)0
-1329 y(AST)27 b(nativ)m(e)j(format)e(pro)s(duced)f(b)m(y)h(the)g(basic)
-g(Channel)g(class.)40 b(Curren)m(tly)-8 b(,)29 b(there)f(is)g(no)g(DTD)
-h(or)f(sc)m(hema)0 1442 y(de\014ning)c(the)i(structure)f(of)g(data)i
-(pro)s(duced)c(in)i(this)h(format)f(b)m(y)h(an)f(XmlChan.)38
-b(The)25 b(follo)m(wing)i(is)e(a)h(nativ)m(e)0 1554 y(AST)i(represen)m
-(tation)i(of)f(a)g(simple)g(1-D)g(F)-8 b(rame)30 b(\(including)f
-(commen)m(ts)g(and)g(with)f(the)h(F)-8 b(ull)29 b(attribute)h(set)0
-1667 y(to)h(zero)g(so)g(that)g(some)g(default)f(attribute)h(v)-5
-b(alues)31 b(are)g(included)e(as)i(extra)g(commen)m(ts\):)271
-1911 y Ft(Begin)41 b(Frame)173 b(#)43 b(Coordinate)c(system)i
-(description)227 2011 y(#)131 b(Title)41 b(=)i("1-d)f(coordinate)e
-(system")215 b(#)43 b(Title)e(of)i(coordinate)d(system)402
-2110 y(Naxes)h(=)i(1)131 b(#)43 b(Number)e(of)i(coordinate)c(axes)402
-2210 y(Domain)i(=)i("SCREEN")127 b(#)44 b(Coordinate)39
-b(system)i(domain)227 2310 y(#)131 b(Lbl1)42 b(=)h("Axis)e(1")217
-b(#)44 b(Label)d(for)h(axis)g(1)227 2409 y(#)131 b(Uni1)42
-b(=)h("cm")390 b(#)44 b(Units)d(for)h(axis)g(1)402 2509
-y(Ax1)g(=)305 b(#)43 b(Axis)f(number)f(1)532 2609 y(Begin)h(Axis)303
-b(#)44 b(Coordinate)39 b(axis)663 2708 y(Unit)j(=)h("cm")129
-b(#)44 b(Axis)d(units)532 2808 y(End)i(Axis)271 2907
-y(End)f(Frame)0 3164 y FG(The)30 b(corresp)s(onding)f(XmlChan)h(output)
-g(w)m(ould)g(lo)s(ok)h(lik)m(e:)271 3408 y Ft(<Frame)41
-b(xmlns="http://ww)o(w.s)o(ta)o(rl)o(ink)o(.a)o(c.u)o(k/)o(as)o(t/x)o
-(ml)o(/")576 3508 y(desc="Coordinate)c(system)k(description">)402
-3608 y(<_attribute)e(name="Title")f(quoted="true")g(value="1-d)i
-(coordinate)f(system")925 3707 y(desc="Title)g(of)j(coordinate)e
-(system")h(default="true"/)o(>)402 3807 y(<_attribute)e(name="Naxes")f
-(value="1")i(desc="Number)f(of)k(coordinate)c(axes"/>)402
-3906 y(<_attribute)g(name="Domain")f(quoted="true")g(value="SCREEN")925
-4006 y(desc="Coordinat)o(e)g(system)j(domain"/>)402 4106
-y(<_attribute)e(name="Lbl1")g(quoted="true")f(value="Axis)h(1")925
-4205 y(desc="Label)g(for)j(axis)g(1")h(default="true"/>)402
-4305 y(<_attribute)c(name="Uni1")g(quoted="true")f(value="cm")925
-4405 y(desc="Units)h(for)j(axis)g(1")h(default="true"/>)402
-4504 y(<Axis)e(label="Ax1")e(desc="Coordinate)e(axis">)532
-4604 y(<!--Axis)k(number)g(1-->)532 4703 y(<_attribute)e(name="Unit")g
-(quoted="true")g(value="cm")g(desc="Axis)h(units"/>)402
-4803 y(</Axis>)271 4903 y(</Frame>)0 5160 y FG(Notes:)111
-5417 y(1.)46 b(The)27 b(AST)g(class)h(name)g(is)f(used)g(as)h(the)g
-(name)f(for)g(an)h(XML)f(elemen)m(t)i(whic)m(h)f(con)m(tain)h(a)e
-(description)227 5530 y(of)k(an)f(AST)g(ob)5 b(ject.)p
-0 5607 1512 4 v 73 5661 a Fs(30)138 5693 y Fr(h)n
-(ttp://www.w3.org/XML/)p eop end
-%%Page: 160 170
-TeXDict begin 160 169 bop 0 52 a FG(160)1399 b Fz(18)92
-b(STORING)29 b(AST)h(OBJECTS)f(AS)h(XML)g(\(XMLCHAN\))111
-351 y FG(2.)46 b(AST)39 b(attributes)h(are)g(describ)s(ed)f(b)m(y)g
-(XML)h(elemen)m(ts)h(with)e(the)h(name)f(\\)p Fy(_)p
-FG(attribute".)70 b(Unfortu-)227 464 y(nately)-8 b(,)32
-b(the)f(w)m(ord)f(\\attribute")i(is)e(also)i(used)d(b)m(y)h(XML)h(to)g
-(refer)f(to)h(a)g(\\name=v)-5 b(alue")32 b(pair)e(within)227
-577 y(an)36 b(elemen)m(t)h(start)f(tag.)58 b(So)36 b(for)f(instance,)j
-(the)e(\\Title")h(attribute)g(of)e(the)h(AST)f(F)-8 b(rame)37
-b(ob)5 b(ject)36 b(is)227 690 y(describ)s(ed)g(within)h(an)f(XML)i
-(elemen)m(t)g(with)f(name)g(\\)p Fy(_)p FG(attribute")h(in)f(whic)m(h)f
-(the)i(XML)f(attribute)227 803 y(\\name")c(has)e(the)g(v)-5
-b(alue)32 b(\\Title",)i(and)c(the)i(XML)g(attribute)g(\\v)-5
-b(alue")33 b(has)e(the)g(v)-5 b(alue)32 b(\\1-d)g(co)s(ordi-)227
-916 y(nate)g(system".)45 b(The)31 b(moral)h(is)g(alw)m(a)m(ys)h(to)f(b)
-s(e)f(clear)h(clear)h(ab)s(out)e(the)h(con)m(text)h(\(AST)e(or)h(XML\))
-g(in)227 1029 y(whic)m(h)e(the)h(w)m(ord)f Fx(attribute)38
-b FG(is)30 b(b)s(eing)g(used!)111 1215 y(3.)46 b(The)e(XML)h(includes)f
-(commen)m(ts)i(b)s(oth)e(as)g(XML)h(attributes)g(with)g(the)f(name)h
-(\\desc",)k(and)44 b(as)227 1328 y(separate)32 b(commen)m(t)f(tags.)111
-1514 y(4.)46 b(Elemen)m(ts)33 b(whic)m(h)e(describ)s(e)g(default)g(v)-5
-b(alues)32 b(are)g(iden)m(ti\014ed)f(b)m(y)h(the)f(fact)i(that)f(they)f
-(ha)m(v)m(e)i(an)e(XML)227 1627 y(attribute)f(called)h(\\default")g
-(set)f(to)g(the)g(v)-5 b(alue)30 b(\\true".)41 b(These)29
-b(elemen)m(ts)i(are)f(ignored)f(when)g(b)s(eing)227 1740
-y(read)i(bac)m(k)g(in)m(to)g(an)f(XmlChan.)111 1926 y(5.)46
-b(The)20 b(outer-most)h(XML)g(elemen)m(t)h(of)e(an)g(AST)g(ob)5
-b(ject)21 b(will)f(set)h(the)g(default)f(namespace)h(to)g
-Fy(http://www.starlink.ac.uk)o(/ast)o(/xm)o(l/)227 2039
-y FG(whic)m(h)30 b(will)h(b)s(e)f(inherited)g(b)m(y)g(all)h(nested)g
-(elemen)m(ts.)0 2295 y(The)j(XmlChan)g(class)h(c)m(hanges)g(the)g
-(default)g(v)-5 b(alue)35 b(for)f(the)h(Commen)m(t)f(and)g(F)-8
-b(ull)35 b(attributes)g(\(inherited)0 2408 y(from)k(the)g(base)h
-(Channel)e(class\))j(to)f(zero)g(and)e(-1,)43 b(resulting)c(in)g(terse)
-h(output)f(b)m(y)g(default.)68 b(With)39 b(the)0 2521
-y(default)31 b(v)-5 b(alues)30 b(for)g(these)h(attributes,)g(the)g(ab)s
-(o)m(v)m(e)h(XML)e(is)h(reduced)e(to)i(the)g(follo)m(wing:)271
-2764 y Ft(<Frame)41 b(xmlns="http://ww)o(w.s)o(ta)o(rl)o(ink)o(.a)o
-(c.u)o(k/)o(as)o(t/x)o(ml)o(/">)402 2863 y(<_attribute)e(name="Naxes")f
-(value="1"/>)402 2963 y(<_attribute)h(name="Domain")f(quoted="true")g
-(value="SCREEN"/>)402 3063 y(<Axis)j(label="Ax1">)532
-3162 y(<_attribute)e(name="Unit")g(quoted="true")g(value="cm"/>)402
-3262 y(</Axis>)271 3361 y(</Frame>)0 3618 y FG(The)30
-b(XmlChan)f(class)i(uses)f(the)h(Skip)e(attributes)i(v)m(ery)g
-(similarly)g(to)g(the)f(Channel)g(class.)41 b(If)30 b(Skip)f(is)i(zero)
-0 3731 y(\(the)f(default\))g(then)f(an)h(error)f(will)h(b)s(e)f(rep)s
-(orted)g(if)g(the)h(text)h(supplied)d(b)m(y)h(the)h(source)g(function)f
-(do)s(es)g(not)0 3844 y(b)s(egin)k(with)h(an)f(AST)g(Ob)5
-b(ject.)51 b(If)33 b(Skip)g(is)g(non-zero,)j(then)d(initial)i(text)f
-(is)g(skipp)s(ed)e(o)m(v)m(er)j(without)f(error)0 3956
-y(un)m(til)k(the)g(start)g(of)g(an)f(AST)g(ob)5 b(ject)39
-b(is)f(found.)61 b(this)37 b(allo)m(ws)j(an)d(AST)g(ob)5
-b(ject)39 b(to)f(b)s(e)f(lo)s(cated)i(within)e(a)0 4069
-y(larger)31 b(XML)g(do)s(cumen)m(t.)0 4360 y Fw(18.1)112
-b(Reading)39 b(IV)m(O)m(A)d(Space-Time-Co)s(ordinates)41
-b(XML)c(\(STC-X\))g(Descriptions)0 4580 y FG(The)29 b(XmlChan)g(class)i
-(also)f(pro)m(vides)g(supp)s(ort)e(for)h(reading)h(\(but)f(not)h
-(writing\))g(XML)g(do)s(cumen)m(ts)g(whic)m(h)0 4693
-y(use)39 b(a)h(restricted)g(subset)e(of)i(an)f(early)h(draft)e
-(\(V1.20\))k(of)e(the)f(IV)m(O)m(A)h(Space-Time-Co)s(ordinates)g(XML)0
-4806 y(\(STC-X\))23 b(system.)38 b(The)23 b(v)m(ersion)g(of)h(STC-X)e
-(\014nally)h(adopted)g(b)m(y)g(the)g(IV)m(O)m(A)h(di\013ers)e(in)h(sev)
-m(eral)i(signi\014can)m(t)0 4919 y(resp)s(ects)d(from)f(V1.20,)26
-b(and)21 b(so)i(the)f(STC-X)f(supp)s(ort)f(curren)m(tly)i(pro)m(vided)g
-(b)m(y)g(AST)f(is)h(mainly)g(of)g(historical)0 5032 y(in)m(terest.)42
-b(Note,)31 b(AST)e(also)h(supp)s(orts)e(the)h(alternativ)m(e)j
-(\\STC-S")d(linear)h(string)g(description)f(of)h(the)g(STC)0
-5145 y(mo)s(del)g(\(see)i Fu(x)p FG(19\).)0 5306 y(STC-X)19
-b(V1.20)j(is)f(do)s(cumen)m(ted)f(at)41 b(h)m(ttp://www.iv)m(oa.net/Do)
-s(cumen)m(ts/WD/STC/STC-200502)q(25)q(.h)m(tml,)0 5419
-y(and)23 b(the)h(curren)m(t)f(v)m(ersion)h(is)f(do)s(cumen)m(ted)g(at)
-48 b(h)m(ttp://www.iv)m(oa.net/Do)s(cumen)m(ts/latest/STC-X.h)m(tml.)0
-5580 y(When)38 b(an)f(STC-X)g(do)s(cumen)m(t)h(is)g(read)f(using)g(an)h
-(XmlChan,)h(the)f(read)g(op)s(eration)g(pro)s(duces)f(an)g(AST)0
-5693 y(Ob)5 b(ject)25 b(of)g(the)g(Stc)g(class,)i(whic)m(h)e(is)g
-(itself)h(a)f(sub)s(class)f(of)h(Region.)40 b(Sp)s(eci\014cally)-8
-b(,)27 b(eac)m(h)f(suc)m(h)f(Ob)5 b(ject)25 b(will)g(b)s(e)p
-eop end
-%%Page: 161 171
-TeXDict begin 161 170 bop 0 52 a Fz(18.1)93 b(Reading)30
-b(IV)m(O)m(A)h(Space-Time-Co)s(ordinates)h(XML)e(\(STC-X\))h
-(Descriptions)658 b FG(161)0 351 y(an)29 b(instance)h(of)g(StcSearc)m
-(hLo)s(cation,)i(StcResourcePro\014le,)e(StcCatalogEn)m(tryLo)s(cation)
-j(or)d(StcObsDat-)0 464 y(aLo)s(cation.)49 b(See)32 b(the)h
-(description)g(of)f(the)h(XmlChan)f(class)h(and)f(the)g(XmlF)-8
-b(ormat)34 b(attribute)g(for)e(further)0 577 y(details.)p
-eop end
-%%Page: 162 172
-TeXDict begin 162 171 bop 0 52 a FG(162)1399 b Fz(18)92
-b(STORING)29 b(AST)h(OBJECTS)f(AS)h(XML)g(\(XMLCHAN\))p
-eop end
-%%Page: 163 173
-TeXDict begin 163 172 bop 3643 52 a FG(163)0 351 y FA(19)135
-b(Reading)46 b(and)f(writing)g(STC-S)f(descriptions)i(\(StcsChans\))0
-604 y FG(The)22 b(StcsChan)f(class)i(pro)m(vides)g(facilities)h(for)e
-(reading)h(and)e(writing)i(IV)m(O)m(A)g(\\STC-S")e(descriptions.)38
-b(STC-)0 717 y(S)22 b(\(see)46 b(h)m(ttp://www.iv)m(oa.net/Do)s(cumen)m
-(ts/latest/)q(STC-S.h)m(tml\))28 b(is)23 b(a)g(linear)g(string)g(syn)m
-(tax)g(that)g(allo)m(ws)0 830 y(simple)42 b(sp)s(eci\014cation)g(of)g
-(the)g(STC)f(metadata)j(describing)d(a)h(region)h(in)e(an)h
-(astronomical)i(co)s(ordinate)0 943 y(system.)82 b(AST)43
-b(supp)s(orts)f(a)j(subset)e(of)h(the)g(STC-S)f(sp)s(eci\014cation,)48
-b(allo)m(wing)e(an)e(STC-S)e(description)0 1056 y(of)35
-b(a)h(region)g(within)f(an)g(AST-supp)s(orted)e(astronomical)k(co)s
-(ordinate)f(system)g(to)g(b)s(e)e(con)m(v)m(erted)j(in)m(to)g(an)0
-1169 y(equiv)-5 b(alen)m(t)29 b(AST)d(Region)i(ob)5 b(ject,)29
-b(and)d(vice-v)m(ersa.)42 b(F)-8 b(or)28 b(further)e(details,)j(see)f
-(the)f(full)g(description)g(of)g(the)0 1281 y(StcsChan)j(class)h(in)f
-(App)s(endix)e(D.)p eop end
-%%Page: 164 174
-TeXDict begin 164 173 bop 0 52 a FG(164)652 b Fz(19)92
-b(READING)31 b(AND)g(WRITING)g(STC-S)e(DESCRIPTIONS)f(\(STCSCHANS\))p
-eop end
-%%Page: 165 175
-TeXDict begin 165 174 bop 3643 52 a FG(165)0 351 y FA(20)135
-b(Creating)46 b(Y)-11 b(our)44 b(Own)h(Priv)-7 b(ate)46
-b(Mappings)e(\(In)l(traMaps\))0 614 y Fw(20.1)112 b(The)38
-b(Need)g(for)f(Extensibilit)m(y)0 843 y FG(Ho)m(w)m(ev)m(er)28
-b(man)m(y)d(Mapping)h(classes)h(are)f(pro)m(vided)f(b)m(y)g(AST,)h(so)s
-(oner)f(or)h(later)g(y)m(ou)g(will)g(w)m(an)m(t)h(to)f(transform)0
-956 y(co)s(ordinates)34 b(in)f(some)h(w)m(a)m(y)g(that)g(has)f(not)h(b)
-s(een)e(foreseen.)50 b(Y)-8 b(ou)34 b(migh)m(t)g(w)m(an)m(t)h(to)f
-(plot)f(a)h(graph)f(in)g(some)0 1069 y(no)m(v)m(el)g(curvilinear)e(co)s
-(ordinate)h(system)f(\(p)s(erhaps)f(y)m(ou)h(already)h(ha)m(v)m(e)g(a)g
-(W)m(CS)f(system)g(in)g(y)m(our)g(soft)m(w)m(are)0 1182
-y(and)g(just)g(w)m(an)m(t)i(to)f(use)f(AST)g(for)h(its)g(graphical)g
-(capabilities\).)47 b(Alternativ)m(ely)-8 b(,)35 b(y)m(ou)d(migh)m(t)g
-(need)f(to)i(cali-)0 1295 y(brate)24 b(a)h(complex)g(dataset)g(\(lik)m
-(e)h(an)e(ob)5 b(jectiv)m(e)26 b(prism)d(plate\))i(where)e(eac)m(h)j(p)
-s(osition)e(m)m(ust)g(b)s(e)f(con)m(v)m(erted)j(to)0
-1408 y(w)m(orld)f(co)s(ordinates)g(with)g(reference)g(to)h(calibration)
-g(data)g(under)d(the)i(con)m(trol)h(of)f(an)g(elab)s(orate)h
-(algorithm.)0 1575 y(In)35 b(suc)m(h)h(cases,)j(it)d(is)g(clear)h(that)
-g(the)f(basic)g(pre-formed)g(comp)s(onen)m(ts)g(pro)m(vided)f(b)m(y)h
-(AST)g(for)f(building)0 1688 y(Mappings)30 b(are)h(just)e(not)i
-(enough.)40 b(What)31 b(y)m(ou)g(need)f(is)g(access)i(to)e(a)h
-(programming)f(language.)42 b(Ho)m(w)m(ev)m(er,)0 1801
-y(if)33 b(y)m(ou)f(write)h(y)m(our)g(o)m(wn)f(soft)m(w)m(are)i(to)g
-(transform)e(co)s(ordinate)h(v)-5 b(alues,)34 b(then)e(it)h(m)m(ust)g
-(b)s(e)e(made)i(a)m(v)-5 b(ailable)0 1914 y(in)42 b(the)h(form)f(of)h
-(an)f(AST)g(class)h(\(from)f(whic)m(h)h(y)m(ou)g(can)f(create)i(Ob)5
-b(jects\))43 b(b)s(efore)f(it)h(can)g(b)s(e)f(used)g(in)0
-2027 y(conjunction)30 b(with)g(other)h(AST)f(facilities.)0
-2194 y(A)m(t)39 b(this)f(p)s(oin)m(t)g(y)m(ou)g(migh)m(t)h(consider)f
-(writing)g(y)m(our)g(o)m(wn)g(AST)f(class,)k(but)c(this)h(is)g(not)h
-(recommended.)0 2307 y(Not)29 b(only)g(w)m(ould)f(the)h(in)m(ternal)g
-(con)m(v)m(en)m(tions)h(used)e(b)m(y)g(AST)g(tak)m(e)i(some)f(time)g
-(to)g(master,)g(but)f(y)m(ou)h(migh)m(t)0 2420 y(also)j(\014nd)d(y)m
-(ourself)i(ha)m(ving)h(to)f(c)m(hange)h(y)m(our)f(soft)m(w)m(are)h
-(whenev)m(er)f(a)g(new)g(v)m(ersion)g(of)g(AST)f(w)m(as)h(released.)0
-2533 y(F)-8 b(ortunately)g(,)33 b(there)d(is)h(a)f(m)m(uc)m(h)h(easier)
-g(route)g(pro)m(vided)f(b)m(y)g(the)h(In)m(traMap)f(class.)0
-2843 y Fw(20.2)112 b(The)38 b(In)m(traMap)g(Mo)s(del)0
-3071 y FG(T)-8 b(o)35 b(allo)m(w)h(y)m(ou)f(to)g(write)g(y)m(our)f(o)m
-(wn)h(Mappings,)h(AST)d(pro)m(vides)i(a)g(sp)s(ecial)g(kind)f(of)g
-(Mapping)h(called)h(an)0 3184 y(In)m(traMap.)i(An)22
-b(In)m(traMap)h(is)f(a)h(sort)f(of)h(\\wrapp)s(er")e(for)h(a)h(co)s
-(ordinate)g(transformation)f(routine)g(written)h(in)0
-3297 y(F)-8 b(ortran.)41 b(Y)-8 b(ou)28 b(write)h(this)f(routine)g(y)m
-(ourself)h(and)e(then)h(register)h(it)g(with)f(AST.)g(This,)g(in)g
-(e\013ect,)i(creates)g(a)0 3410 y(new)23 b(class)h(from)f(whic)m(h)g(y)
-m(ou)h(can)g(create)h(Mappings)e(\()p Fx(i.e.)g FG(In)m(traMaps\))h
-(whic)m(h)f(will)h(transform)f(co)s(ordinates)0 3523
-y(in)30 b(whatev)m(er)h(w)m(a)m(y)h(y)m(our)e(transformation)h(routine)
-f(sp)s(eci\014es.)0 3691 y(Because)38 b(In)m(traMaps)e(are)h(Mappings,)
-h(they)e(ma)m(y)h(b)s(e)f(used)f(in)h(the)h(same)f(w)m(a)m(y)i(as)e(an)
-m(y)h(other)f(Mapping.)0 3803 y(F)-8 b(or)29 b(instance,)h(they)f(ma)m
-(y)g(b)s(e)f(com)m(bined)h(in)f(series)h(or)g(parallel)h(with)e(other)h
-(Mappings)f(using)g(a)h(CmpMap)0 3916 y(\()p Fu(x)p FG(6\),)36
-b(they)d(ma)m(y)h(b)s(e)e(in)m(v)m(erted)i(\()p Fu(x)p
-FG(5.5\),)i(y)m(ou)e(ma)m(y)f(enquire)g(ab)s(out)g(their)g(attributes)h
-(\()p Fu(x)p FG(4.5\),)i(they)d(ma)m(y)h(b)s(e)0 4029
-y(inserted)26 b(in)m(to)i(F)-8 b(rameSets)27 b(\()p Fu(x)p
-FG(13\),)j Fx(etc.)39 b FG(They)25 b(do,)j(ho)m(w)m(ev)m(er,)h(ha)m(v)m
-(e)e(some)g(imp)s(ortan)m(t)g(limitations)h(of)f(whic)m(h)0
-4142 y(y)m(ou)k(should)e(b)s(e)h(a)m(w)m(are)i(b)s(efore)e(w)m(e)g(go)i
-(on)e(to)h(consider)f(ho)m(w)h(to)g(create)h(them.)0
-4452 y Fw(20.3)112 b(Limitations)39 b(of)f(In)m(traMaps)0
-4680 y FG(By)c(no)m(w,)g(y)m(ou)g(migh)m(t)g(b)s(e)f(w)m(ondering)g(wh)
-m(y)g(an)m(y)h(other)g(kind)e(of)i(Mapping)f(is)h(required)f(at)h(all.)
-51 b(After)33 b(all,)0 4793 y(wh)m(y)27 b(not)h(simply)f(write)h(y)m
-(our)f(o)m(wn)h(co)s(ordinate)g(transformation)g(routines)g(in)f(F)-8
-b(ortran,)29 b(wrap)e(them)g(up)g(in)0 4906 y(In)m(traMaps)k(and)e(do)i
-(a)m(w)m(a)m(y)h(with)e(all)h(the)g(other)g(Mapping)f(classes)h(in)f
-(AST?)0 5074 y(The)k(reason)g(is)g(not)h(to)s(o)g(hard)e(to)i(\014nd.)
-50 b(An)m(y)34 b(transformation)h(routine)f(y)m(ou)g(write)h(is)f
-(created)h(solely)h(b)m(y)0 5187 y(y)m(ou,)31 b(so)g(it)g(is)f(a)h
-(priv)-5 b(ate)31 b(extension)g(whic)m(h)f(do)s(es)g(not)h(form)f(a)g
-(p)s(ermanen)m(t)g(part)g(of)h(AST.)f(If)g(y)m(ou)h(use)f(it)h(to)0
-5300 y(calibrate)d(some)g(data)f(and)f(then)h(pass)f(that)i(data)f(to)h
-(someone)f(else,)i(who)d(has)h(only)g(the)g(standard)f(v)m(ersion)0
-5413 y(of)31 b(AST,)e(then)i(they)f(will)h(not)f(b)s(e)g(able)h(to)g
-(in)m(terpret)g(it.)0 5580 y(Th)m(us,)38 b(while)g(an)f(In)m(traMap)h
-(is)f(\014ne)g(for)g(use)g(b)m(y)g(y)m(ou)h(and)f(y)m(our)g(collab)s
-(orators)i(\(who)e(w)m(e)h(assume)f(ha)m(v)m(e)0 5693
-y(access)k(to)g(the)f(same)g(transformation)g(routines\),)j(it)d(do)s
-(es)g(not)g(address)f(the)h(need)f(for)h(univ)m(ersal)g(data)p
-eop end
-%%Page: 166 176
-TeXDict begin 166 175 bop 0 52 a FG(166)772 b Fz(20)92
-b(CREA)-8 b(TING)30 b(YOUR)h(O)m(WN)g(PRIV)-10 b(A)i(TE)30
-b(MAPPINGS)g(\(INTRAMAPS\))0 351 y FG(exc)m(hange)g(lik)m(e)f(other)g
-(AST)f(Mappings)g(do.)40 b(This)27 b(is)h(where)g(the)h(\\In)m(tra")g
-(in)f(the)h(class)g(name)f(\\In)m(traMap")0 464 y(comes)j(from,)f
-(implying)h(priv)-5 b(ate)30 b(or)h(in)m(ternal)g(usage.)0
-626 y(F)-8 b(or)34 b(this)g(reason,)g(it)g(is)g(un)m(wise)f(to)h(store)
-g(In)m(traMaps)g(in)f(datasets,)i(unless)e(they)h(will)g(b)s(e)e(used)h
-(solely)i(for)0 739 y(comm)m(unication)25 b(b)s(et)m(w)m(een)f(collab)s
-(orating)i(items)e(of)f(soft)m(w)m(are)i(whic)m(h)f(share)f(con)m(v)m
-(en)m(tions)j(ab)s(out)d(their)h(use.)0 852 y(A)39 b(priv)-5
-b(ate)39 b(database)h(describing)e(co)s(ordinate)i(systems)e(on)h(a)g
-(graphics)g(device)h(migh)m(t)f(b)s(e)f(an)h(example)0
-965 y(where)i(In)m(traMaps)i(w)m(ould)e(b)s(e)g(suitable,)46
-b(b)s(ecause)c(the)g(data)g(w)m(ould)g(probably)f(nev)m(er)h(b)s(e)f
-(accessed)j(b)m(y)0 1078 y(an)m(y)m(one)i(else's)f(soft)m(w)m(are.)85
-b(Restricting)46 b(In)m(traMap)f(usage)g(to)g(within)f(a)h(single)g
-(program)f(\()p Fx(i.e.)83 b FG(nev)m(er)0 1191 y(writing)30
-b(it)h(out\))g(is,)g(of)f(course,)h(completely)h(safe.)0
-1353 y(If,)25 b(b)m(y)g(acciden)m(t,)i(an)d(In)m(traMap)h(should)e
-(happ)s(en)g(to)i(escap)s(e)g(as)g(part)f(of)g(a)h(dataset,)i(then)d
-(the)h(unsusp)s(ecting)0 1466 y(recipien)m(t)38 b(is)e(lik)m(ely)i(to)f
-(receiv)m(e)i(an)d(error)g(message)i(when)e(they)g(attempt)i(to)f(read)
-g(the)f(data.)60 b(Ho)m(w)m(ev)m(er,)0 1579 y(AST)27
-b(will)h(asso)s(ciate)i(details)f(of)f(the)g(In)m(traMap's)g
-(transformation)g(routine)g(and)f(its)i(author)e(\(if)h(pro)m(vided\))0
-1692 y(with)39 b(the)h(data,)j(so)d(that)g(the)g(recipien)m(t)h(can)e
-(mak)m(e)i(an)f(in)m(telligen)m(t)i(enquiry)d(to)h(obtain)g(the)g
-(necessary)0 1805 y(soft)m(w)m(are)32 b(if)e(this)g(pro)m(v)m(es)h
-(essen)m(tial.)0 2097 y Fw(20.4)112 b(W)-9 b(riting)37
-b(a)h(T)-9 b(ransformation)39 b(Routine)0 2318 y FG(The)30
-b(\014rst)f(stage)j(in)e(creating)i(an)e(In)m(traMap)h(is)f(to)i(write)
-e(the)h(co)s(ordinate)g(transformation)g(routine.)40
-b(This)0 2431 y(should)30 b(ha)m(v)m(e)h(a)g(calling)h(in)m(terface)h
-(lik)m(e)f(the)e(AST)p Fy(_)p FG(TRANN)g(function)g(pro)m(vided)h(b)m
-(y)f(AST)g(\()p Fx(q.v.)p FG(\).)41 b(Here)31 b(is)0
-2544 y(a)c(simple)f(example)i(of)e(a)h(suitable)g(transformation)g
-(routine)f(whic)m(h)h(transforms)e(co)s(ordinates)j(b)m(y)e(squaring)0
-2657 y(them:)262 2903 y Ft(SUBROUTINE)39 b(SQRTRAN\()h(THIS,)i(NPOINT,)
-e(NCOORD_IN,)g(INDIM,)h(IN,)h(FORWARD,)174 3003 y(:)915
-b(NCOORD_OUT,)39 b(OUTDIM,)i(OUT,)h(STATUS)f(\))262 3103
-y(INTEGER)f(THIS,)i(NPOINT,)e(NCOORD_IN,)g(INDIM,)h(NCOORD_OUT,)e
-(OUTDIM,)i(STATUS)262 3202 y(DOUBLE)g(PRECISION)e(IN\()k(INDIM,)e
-(NCOORD_IN)f(\),)j(OUT\()e(OUTDIM,)g(NCOORD_OUT)f(\))262
-3302 y(LOGICAL)g(FORWARD)262 3501 y(INCLUDE)g('AST_PAR')262
-3601 y(DOUBLE)h(PRECISION)e(X)262 3700 y(INTEGER)h(COORD,)h(POINT)0
-3900 y(*)87 b(Forward)40 b(transformation.)262 3999 y(IF)i(\()h
-(FORWARD)e(\))i(THEN)392 4099 y(DO)g(2)g(POINT)f(=)h(1,)g(NPOINT)523
-4199 y(DO)g(1)g(COORD)e(=)j(1,)e(NCOORD_IN)654 4298 y(X)h(=)g(IN\()f
-(POINT,)g(COORD)f(\))654 4398 y(IF)i(\()g(X)g(.EQ.)f(AST__BAD)e(\))j
-(THEN)785 4497 y(OUT\()e(POINT,)h(COORD)f(\))i(=)g(AST__BAD)654
-4597 y(ELSE)785 4697 y(OUT\()e(POINT,)h(COORD)f(\))i(=)g(X)h(*)f(X)654
-4796 y(ENDIF)44 4896 y(1)435 b(CONTINUE)44 4996 y(2)304
-b(CONTINUE)0 5195 y(*)87 b(Inverse)40 b(transformation.)262
-5295 y(ELSE)392 5394 y(DO)j(4)g(POINT)f(=)h(1,)g(NPOINT)523
-5494 y(DO)g(3)g(COORD)e(=)j(1,)e(NCOORD_IN)654 5593 y(X)h(=)g(IN\()f
-(POINT,)g(COORD)f(\))654 5693 y(IF)i(\()g(X)g(.LT.)f(0.0D0)f(.OR.)h(X)h
-(.EQ.)f(AST__BAD)f(\))i(THEN)p eop end
-%%Page: 167 177
-TeXDict begin 167 176 bop 0 52 a Fz(20.5)93 b(Registering)31
-b(a)g(T)-8 b(ransformation)30 b(Routine)1882 b FG(167)785
-351 y Ft(OUT\()41 b(POINT,)h(COORD)f(\))i(=)g(AST__BAD)654
-451 y(ELSE)785 551 y(OUT\()e(POINT,)h(COORD)f(\))i(=)g(SQRT\()f(X)h(\))
-654 650 y(ENDIF)44 750 y(3)435 b(CONTINUE)44 849 y(4)304
-b(CONTINUE)262 949 y(ENDIF)262 1049 y(END)0 1303 y FG(As)28
-b(y)m(ou)h(can)g(see,)h(the)e(routine)h(comes)g(in)f(t)m(w)m(o)i(halv)m
-(es)g(whic)m(h)e(implemen)m(t)h(the)g(forw)m(ard)f(and)f(in)m(v)m(erse)
-j(co)s(or-)0 1416 y(dinate)25 b(transformations.)39 b(The)24
-b(n)m(um)m(b)s(er)g(of)h(p)s(oin)m(ts)f(to)i(b)s(e)e(transformed)g
-(\(NPOINT\))h(and)f(the)h(n)m(um)m(b)s(ers)e(of)0 1529
-y(input)j(and)h(output)g(co)s(ordinates)g(p)s(er)g(p)s(oin)m(t)g
-(\(NCOORD)p Fy(_)p FG(IN)g(and)f(NCOORD)p Fy(_)p FG(OUT|in)g(this)h
-(case)h(b)s(oth)0 1642 y(are)34 b(assumed)e(equal\))j(are)f(passed)e
-(to)j(the)e(routine.)50 b(A)34 b(pair)f(of)g(lo)s(ops)h(then)f
-(accesses)i(all)f(the)g(co)s(ordinate)0 1755 y(v)-5 b(alues.)55
-b(Note)37 b(that)e(it)h(is)f(legitimate)j(to)e(omit)g(one)f(or)g(other)
-h(of)f(the)g(forw)m(ard/in)m(v)m(erse)h(transformations)0
-1868 y(and)31 b(simply)g(not)h(to)g(implemen)m(t)g(it,)h(if)e(it)h
-(will)g(not)g(b)s(e)f(required.)43 b(It)32 b(is)f(also)i(p)s
-(ermissible)d(to)j(require)e(that)0 1981 y(the)d(n)m(um)m(b)s(ers)e(of)
-i(input)f(and)g(output)g(co)s(ordinates)i(b)s(e)e(\014xed)g(\()p
-Fx(e.g.)g FG(at)i(2\),)g(or)f(to)g(write)g(the)g(routine)g(so)g(that)0
-2094 y(it)j(can)g(handle)f(arbitrary)g(dimensionalit)m(y)-8
-b(,)32 b(as)e(here.)0 2254 y(Before)h(using)e(an)g(incoming)h(co)s
-(ordinate,)h(the)f(routine)f(m)m(ust)h(\014rst)f(c)m(hec)m(k)i(that)f
-(it)g(is)g(not)g(set)g(to)g(the)g(v)-5 b(alue)0 2367
-y(AST)p Fy(__)p FG(BAD,)29 b(whic)m(h)f(indicates)i(missing)e(data)i
-(\()p Fu(x)p FG(5.8\).)42 b(If)28 b(it)i(is,)f(the)g(same)g(v)-5
-b(alue)29 b(is)g(also)h(assigned)f(to)g(an)m(y)0 2480
-y(a\013ected)j(output)e(co)s(ordinates.)41 b(The)30 b(v)-5
-b(alue)31 b(AST)p Fy(__)p FG(BAD)f(is)g(also)i(generated)f(if)f(an)m(y)
-h(co)s(ordinates)g(cannot)0 2593 y(b)s(e)k(transformed.)55
-b(In)35 b(this)h(example,)h(this)f(can)g(happ)s(en)d(with)j(the)f(in)m
-(v)m(erse)i(transformation)f(if)f(negativ)m(e)0 2706
-y(v)-5 b(alues)31 b(are)f(encoun)m(tered,)i(so)e(that)h(the)g(square)f
-(ro)s(ot)h(cannot)f(b)s(e)g(tak)m(en.)0 2867 y(There)35
-b(are)h(v)m(ery)f(few)g(restrictions)i(on)e(what)g(a)h(co)s(ordinate)g
-(transformation)g(routine)f(ma)m(y)h(do.)56 b(F)-8 b(or)36
-b(ex-)0 2980 y(ample,)31 b(it)g(ma)m(y)g(freely)f(p)s(erform)f(I/O)i
-(to)g(access)g(an)m(y)g(external)g(data)g(needed,)g(it)f(ma)m(y)h(in)m
-(v)m(ok)m(e)i(other)d(AST)0 3093 y(facilities)36 b(\(but)c(b)s(ew)m
-(are)i(of)f(un)m(w)m(an)m(ted)h(recursion\),)g Fx(etc.)49
-b FG(T)m(ypically)-8 b(,)36 b(y)m(ou)d(ma)m(y)h(also)h(w)m(an)m(t)f(to)
-g(pass)f(infor-)0 3206 y(mation)k(to)g(it)f Fx(via)h
-FG(global)g(v)-5 b(ariables)37 b(held)f(in)f(common)i(blo)s(c)m(ks.)58
-b(Remem)m(b)s(er,)38 b(ho)m(w)m(ev)m(er,)h(that)e(whatev)m(er)0
-3318 y(facilities)c(the)d(transformation)h(routine)f(requires)g(m)m
-(ust)g(b)s(e)g(a)m(v)-5 b(ailable)33 b(in)d(ev)m(ery)h(program)f(whic)m
-(h)g(uses)g(it.)0 3479 y(Generally)-8 b(,)36 b(it)d(is)g(not)h(a)f(go)s
-(o)s(d)g(idea)h(to)g(retain)f(con)m(text)i(information)f(within)e(a)i
-(transformation)f(routine.)0 3592 y(That)39 b(is,)i(it)f(should)e
-(transform)g(eac)m(h)j(set)e(of)g(co)s(ordinates)h(as)f(a)h(single)g(p)
-s(oin)m(t)f(and)f(retain)i(no)f(memory)0 3705 y(of)34
-b(the)g(p)s(oin)m(ts)g(it)h(has)f(transformed)f(b)s(efore.)51
-b(This)34 b(is)g(in)f(order)h(to)h(conform)f(with)f(the)i(AST)e(mo)s
-(del)h(of)g(a)0 3818 y(Mapping.)0 3979 y(If)i(an)h(error)f(o)s(ccurs)g
-(within)g(a)h(transformation)g(routine,)i(it)e(should)f(set)h(its)g(ST)
--8 b(A)g(TUS)36 b(argumen)m(t)h(to)h(an)0 4092 y(error)c(v)-5
-b(alue)35 b(b)s(efore)g(returning.)52 b(This)34 b(will)h(alert)h(AST)e
-(to)h(the)g(error,)h(causing)f(it)g(to)g(ab)s(ort)g(the)g(curren)m(t)0
-4205 y(op)s(eration.)62 b(The)37 b(error)g(v)-5 b(alue)37
-b(AST)p Fy(__)p FG(ITFER)f(is)h(a)m(v)-5 b(ailable)40
-b(for)d(this)g(purp)s(ose,)h(but)f(other)g(v)-5 b(alues)38
-b(ma)m(y)0 4317 y(also)c(b)s(e)f(used)g(\()p Fx(e.g.)g
-FG(if)h(y)m(ou)g(wish)e(to)j(distinguish)d(di\013eren)m(t)i(t)m(yp)s
-(es)g(of)g(error\).)50 b(The)33 b(AST)p Fy(__)p FG(ITFER)f(error)0
-4430 y(v)-5 b(alue)31 b(is)f(de\014ned)f(in)h(the)h(AST)p
-Fy(_)p FG(ERR)e(include)h(\014le.)0 4721 y Fw(20.5)112
-b(Registering)38 b(a)g(T)-9 b(ransformation)38 b(Routine)0
-4940 y FG(Ha)m(ving)28 b(written)f(y)m(our)f(co)s(ordinate)i
-(transformation)f(routine,)h(the)f(next)g(step)f(is)h(to)h(register)f
-(it)h(with)e(AST.)0 5053 y(Registration)32 b(is)f(p)s(erformed)d(using)
-i(AST)p Fy(_)p FG(INTRAREG,)g(as)g(follo)m(ws:)262 5295
-y Ft(EXTERNAL)40 b(SQRTRAN)262 5494 y(CHARACTER)f(*)44
-b(\()f(80)f(\))i(AUTHOR,)c(CONTACT,)h(PURPOSE)262 5693
-y(...)p eop end
-%%Page: 168 178
-TeXDict begin 168 177 bop 0 52 a FG(168)772 b Fz(20)92
-b(CREA)-8 b(TING)30 b(YOUR)h(O)m(WN)g(PRIV)-10 b(A)i(TE)30
-b(MAPPINGS)g(\(INTRAMAPS\))262 451 y Ft(PURPOSE)40 b(=)j('Square)e
-(each)h(coordinate)d(value')262 551 y(AUTHOR)84 b(=)43
-b('R.F.)f(Warren-Smith)d(&)k(D.S.)f(Berry')262 650 y(CONTACT)e(=)j
-('http://www.starl)o(ink)o(.r)o(l.)o(ac.)o(uk)o(/cg)o(i-)o(bi)o(n/h)o
-(tx)o(ser)o(ve)o(r/')37 b(//)697 750 y('sun210.htx/?xref)o(_Sq)o(rT)o
-(ra)o(n')262 949 y(CALL)k(AST_INTRAREG\()e('SqrTran',)g(2,)k(2,)g
-(SQRTRAN,)d(0,)218 1049 y(:)828 b(PURPOSE,)40 b(AUTHOR,)h(CONTACT,)f
-(STATUS)h(\))0 1270 y FG(Note)32 b(that)f(the)f(transformation)h
-(routine)f(m)m(ust)h(also)g(app)s(ear)f(in)g(a)g(F)-8
-b(ortran)32 b(EXTERNAL)d(statemen)m(t.)0 1423 y(The)37
-b(\014rst)g(argumen)m(t)h(to)h(AST)p Fy(_)p FG(INTRAREG)e(is)g(a)h
-(name)g(b)m(y)g(whic)m(h)f(the)h(transformation)g(routine)g(will)0
-1535 y(b)s(e)d(kno)m(wn.)58 b(This)35 b(will)h(b)s(e)g(used)f(when)g(w)
-m(e)i(come)g(to)f(create)i(an)e(In)m(traMap)h(and)e(is)h(case)h
-(sensitiv)m(e.)59 b(W)-8 b(e)0 1648 y(recommend)36 b(that)h(y)m(ou)f
-(base)h(this)f(on)g(the)g(actual)i(routine)e(name)h(and)e(mak)m(e)i
-(this)g(su\016cien)m(tly)f(un)m(usual)0 1761 y(that)31
-b(it)g(is)f(unlik)m(ely)h(to)g(clash)g(with)f(an)m(y)h(other)g
-(routines)f(in)g(most)h(p)s(eople's)f(soft)m(w)m(are.)0
-1914 y(The)24 b(next)h(t)m(w)m(o)i(argumen)m(ts)e(sp)s(ecify)f(the)h(n)
-m(um)m(b)s(er)f(of)h(input)f(and)g(output)g(co)s(ordinates)i(whic)m(h)f
-(the)g(transfor-)0 2027 y(mation)h(routine)f(will)h(handle.)38
-b(These)25 b(corresp)s(ond)f(with)h(the)g(Nin)g(and)g(Nout)h
-(attributes)f(of)h(the)f(In)m(traMap)0 2140 y(w)m(e)k(will)h(create.)41
-b(Here,)30 b(w)m(e)g(ha)m(v)m(e)g(set)f(them)g(b)s(oth)f(to)i(2,)g
-(whic)m(h)e(means)h(that)h(w)m(e)f(will)g(only)g(b)s(e)g(able)g(to)h
-(cre-)0 2252 y(ate)i(In)m(traMaps)f(with)f(2)h(input)f(and)g(2)h
-(output)f(co)s(ordinates)h(\(despite)h(the)e(fact)i(that)f(the)g
-(transformation)0 2365 y(routine)26 b(can)g(actually)i(handle)d(other)h
-(dimensionalities\).)41 b(W)-8 b(e)27 b(will)g(see)f(later)h(\()p
-Fu(x)p FG(20.8\))i(ho)m(w)c(to)i(remo)m(v)m(e)h(this)0
-2478 y(restriction.)0 2631 y(The)i(fourth)f(argumen)m(t)h(should)f(con)
-m(tain)j(a)e(set)h(of)f(\015ags)g(whic)m(h)g(describ)s(e)f(the)h
-(transformation)h(routine)f(in)0 2744 y(a)f(little)h(more)f(detail.)41
-b(W)-8 b(e)30 b(will)f(return)e(to)j(this)e(shortly)h(\()p
-Fu(x)p FG(20.7)h(&)f Fu(x)p FG(20.10\).)42 b(F)-8 b(or)30
-b(no)m(w,)f(w)m(e)g(supply)e(a)i(v)-5 b(alue)0 2857 y(of)31
-b(zero.)0 3009 y(The)42 b(remaining)g(argumen)m(ts)h(are)f(c)m
-(haracter)i(strings)e(whic)m(h)g(do)s(cumen)m(t)g(the)h(transformation)
-f(routine,)0 3122 y(mainly)c(for)f(the)h(b)s(ene\014t)f(of)h(an)m(y)m
-(one)g(who)g(is)f(unfortunate)g(enough)h(to)g(encoun)m(ter)g(a)g
-(reference)g(to)h(it)f(in)0 3235 y(their)c(data)h(whic)m(h)e(they)h
-(cannot)h(in)m(terpret.)52 b(As)34 b(explained)g(ab)s(o)m(v)m(e)h(\()p
-Fu(x)p FG(20.3\),)j(y)m(ou)c(should)f(try)h(and)f(a)m(v)m(oid)0
-3348 y(this,)e(but)e(acciden)m(ts)j(will)f(happ)s(en,)e(so)h(y)m(ou)h
-(should)f(alw)m(a)m(ys)h(pro)m(vide)g(strings)f(con)m(taining)i(the)f
-(follo)m(wing:)111 3569 y(1.)46 b(A)31 b(short)f(description)g(of)h
-(what)f(the)h(transformation)f(routine)h(is)f(for.)111
-3747 y(2.)46 b(The)30 b(name)h(of)f(the)h(author.)111
-3924 y(3.)46 b(Con)m(tact)32 b(details,)g(suc)m(h)e(as)h(an)f(e-mail)i
-(or)e(WWW)h(address.)0 4145 y(The)h(idea)i(is)f(that)g(an)m(y)m(one)h
-(\014nding)e(an)h(In)m(traMap)g(in)g(their)g(data,)h(but)f(lac)m(king)h
-(the)f(necessary)h(transfor-)0 4258 y(mation)h(routine,)h(should)e(b)s
-(e)g(able)h(to)h(con)m(tact)h(the)e(author)f(and)g(mak)m(e)i(a)f
-(sensible)f(enquiry)g(in)h(order)f(to)0 4371 y(obtain)h(it.)55
-b(If)35 b(y)m(ou)g(exp)s(ect)g(man)m(y)g(enquiries,)h(y)m(ou)f(ma)m(y)h
-(lik)m(e)g(to)f(set)h(up)e(a)h(W)-8 b(orld)35 b(Wide)h(W)-8
-b(eb)35 b(page)h(and)0 4484 y(use)c(that)i(instead)f(\(in)g(the)g
-(example)g(ab)s(o)m(v)m(e,)i(w)m(e)e(use)f(the)h(WWW)h(address)e(of)h
-(the)g(relev)-5 b(an)m(t)34 b(part)f(of)g(this)0 4597
-y(do)s(cumen)m(t\).)0 4875 y Fw(20.6)112 b(Creating)38
-b(an)g(In)m(traMap)0 5086 y FG(Once)30 b(a)h(transformation)g(routine)f
-(b)s(een)g(registered,)h(creating)h(an)e(In)m(traMap)h(from)f(it)h(is)f
-(simple:)262 5295 y Ft(INTEGER)40 b(INTRAMAP)262 5494
-y(...)262 5693 y(INTRAMAP)g(=)j(AST_INTRAMAP\()38 b('SqrTran',)i(2,)i
-(2,)h(')g(',)g(STATUS)e(\);)p eop end
-%%Page: 169 179
-TeXDict begin 169 178 bop 0 52 a Fz(20.7)93 b(Restricted)31
-b(Implemen)m(tations)g(of)g(T)-8 b(ransformation)30 b(Routines)1166
-b FG(169)0 351 y(W)-8 b(e)35 b(simply)e(use)g(the)h(AST)p
-Fy(_)p FG(INTRAMAP)f(constructor)h(function)g(and)f(pass)g(it)h(the)g
-(name)g(of)g(the)f(trans-)0 464 y(formation)j(routine)f(to)h(use.)56
-b(This)34 b(name)i(is)f(the)h(same)g(\(case)g(sensitiv)m(e\))h(one)f
-(that)g(w)m(e)g(asso)s(ciated)h(with)0 577 y(the)31 b(routine)f(when)f
-(w)m(e)i(registered)g(it)g(using)f(AST)p Fy(_)p FG(INTRAREG)f(\()p
-Fu(x)p FG(20.5\).)0 742 y(Y)-8 b(ou)31 b(can,)g(of)g(course,)g
-(register)h(an)m(y)f(n)m(um)m(b)s(er)e(of)i(transformation)g(routines)g
-(and)f(select)i(whic)m(h)e(one)h(to)h(use)0 855 y(whenev)m(er)h(y)m(ou)
-g(create)h(an)e(In)m(traMap.)48 b(Y)-8 b(ou)34 b(can)f(also)g(create)h
-(an)m(y)f(n)m(um)m(b)s(er)f(of)h(indep)s(enden)m(t)e(In)m(traMaps)0
-968 y(using)d(eac)m(h)i(transformation)f(routine.)40
-b(In)28 b(this)h(sense,)g(eac)m(h)h(transformation)f(routine)f(y)m(ou)h
-(register)h(e\013ec-)0 1081 y(tiv)m(ely)35 b(creates)g(a)g(new)e
-(\\sub-class")h(of)g(In)m(traMap,)h(from)f(whic)m(h)f(y)m(ou)h(can)g
-(create)h(Ob)5 b(jects)34 b(just)f(lik)m(e)i(an)m(y)0
-1193 y(other)h(class.)57 b(Ho)m(w)m(ev)m(er,)39 b(an)c(error)g(will)h
-(o)s(ccur)f(if)h(y)m(ou)g(attempt)g(to)g(use)g(a)g(transformation)f
-(routine)h(that)0 1306 y(has)30 b(not)h(y)m(et)g(b)s(een)f(registered.)
-0 1471 y(The)37 b(second)h(and)g(third)f(argumen)m(ts)h(to)h(AST)p
-Fy(_)p FG(INTRAMAP)e(are)h(the)g(n)m(um)m(b)s(ers)f(of)h(input)f(and)g
-(output)0 1584 y(co)s(ordinates.)j(These)24 b(de\014ne)g(the)h(Nin)f
-(and)g(Nout)h(attributes)g(for)g(the)g(In)m(traMap)g(that)g(is)g
-(created)g(and)f(they)0 1697 y(m)m(ust)30 b(matc)m(h)i(the)e(corresp)s
-(onding)f(n)m(um)m(b)s(ers)g(giv)m(en)j(when)d(the)i(transformation)f
-(routine)h(w)m(as)f(registered.)0 1862 y(The)38 b(p)s(en)m(ultimate)h
-(argumen)m(t)g(is)f(the)h(usual)f(attribute)h(initialisation)h(string.)
-65 b(Y)-8 b(ou)39 b(ma)m(y)g(set)g(attribute)0 1975 y(v)-5
-b(alues)36 b(for)f(an)g(In)m(traMap)g(in)g(exactly)i(the)f(same)f(w)m
-(a)m(y)i(as)e(for)g(an)m(y)h(other)f(Mapping)g(\()p Fu(x)p
-FG(4.6,)k(and)c(also)h(see)0 2088 y Fu(x)p FG(20.9\).)0
-2388 y Fw(20.7)112 b(Restricted)37 b(Implemen)m(tations)i(of)f(T)-9
-b(ransformation)38 b(Routines)0 2612 y FG(Y)-8 b(ou)29
-b(ma)m(y)f(not)h(alw)m(a)m(ys)h(w)m(an)m(t)f(to)g(use)f(b)s(oth)f(the)h
-(forw)m(ard)g(and)g(in)m(v)m(erse)h(transformations)f(when)f(y)m(ou)i
-(create)0 2725 y(an)41 b(In)m(traMap,)k(so)c(it)h(is)f(p)s(ossible)g
-(to)h(omit)g(either)g(from)e(the)i(underlying)e(co)s(ordinate)i
-(transformation)0 2838 y(routine.)f(Consider)29 b(the)i(follo)m(wing,)h
-(for)e(example:)262 3093 y Ft(SUBROUTINE)39 b(POLY3TRAN\()g(THIS,)j
-(NPOINT,)f(NCOORD_IN,)e(INDIM,)i(IN,)i(FORWARD,)218 3193
-y(:)958 b(NCOORD_OUT,)39 b(OUTDIM,)i(OUT,)h(STATUS)f(\))262
-3292 y(INTEGER)f(THIS,)i(NPOINT,)e(NCOORD_IN,)g(INDIM,)h(NCOORD_OUT,)e
-(OUTDIM,)i(STATUS)262 3392 y(DOUBLE)g(PRECISION)e(IN\()k(INDIM,)e
-(NCOORD_IN)f(\),)j(OUT\()e(OUTDIM,)g(NCOORD_OUT)f(\))262
-3492 y(LOGICAL)g(FORWARD)262 3691 y(INCLUDE)g('AST_PAR')262
-3791 y(DOUBLE)h(PRECISION)e(X)262 3890 y(INTEGER)h(POINT)0
-4090 y(*)87 b(Forward)40 b(transformation.)262 4189 y(DO)i(1)h(POINT)f
-(=)h(1,)g(NPOINT)392 4289 y(X)g(=)h(IN\()e(POINT,)f(1)i(\))392
-4388 y(IF)g(\()g(X)g(.EQ.)f(AST__BAD)f(\))i(THEN)523
-4488 y(OUT\()f(POINT,)f(1)i(\))g(=)h(AST__BAD)392 4588
-y(ELSE)523 4687 y(OUT\()e(POINT,)f(1)i(\))g(=)218 4787
-y(:)261 b(6.18D0)41 b(+)i(X)g(*)h(\()f(0.12D0)e(+)i(X)g(*)g(\()h
-(-0.003D0)c(+)j(X)g(*)g(0.0000101D0)c(\))44 b(\))392
-4887 y(END)f(IF)44 4986 y(1)174 b(CONTINUE)262 5086 y(END)0
-5354 y FG(This)44 b(implemen)m(ts)h(a)h(1-dimensional)g(cubic)e(p)s
-(olynomial)i(transformation.)84 b(Since)45 b(this)g(is)g(somewhat)0
-5467 y(a)m(wkw)m(ard)e(to)g(in)m(v)m(ert,)k(ho)m(w)m(ev)m(er,)h(w)m(e)
-43 b(ha)m(v)m(e)h(only)f(implemen)m(ted)g(the)g(forw)m(ard)f
-(transformation.)78 b(When)0 5580 y(registering)44 b(the)e(routine,)k
-(this)c(is)h(indicated)g(via)g(the)f(FLA)m(GS)i(argumen)m(t)e(to)i(AST)
-p Fy(_)p FG(INTRAREG,)d(as)0 5693 y(follo)m(ws:)p eop
-end
-%%Page: 170 180
-TeXDict begin 170 179 bop 0 52 a FG(170)772 b Fz(20)92
-b(CREA)-8 b(TING)30 b(YOUR)h(O)m(WN)g(PRIV)-10 b(A)i(TE)30
-b(MAPPINGS)g(\(INTRAMAPS\))262 351 y Ft(EXTERNAL)40 b(POLY3TRAN)262
-551 y(...)262 750 y(CALL)h(AST_INTRAREG\()e('Poly3Tran',)f(1,)43
-b(1,)g(POLY3TRAN,)c(AST__NOINV,)218 849 y(:)828 b(PURPOSE,)40
-b(AUTHOR,)h(CONTACT,)f(STATUS)h(\))0 1179 y FG(Here,)30
-b(the)f(\014fth)f(argumen)m(t)h(has)f(b)s(een)g(set)i(to)f(the)g
-(\015ag)g(v)-5 b(alue)30 b(AST)p Fy(__)p FG(NOINV)d(to)j(indicate)f
-(the)g(lac)m(k)i(of)e(an)0 1292 y(in)m(v)m(erse.)42 b(If)29
-b(the)h(forw)m(ard)g(transformation)g(w)m(ere)h(absen)m(t,)g(w)m(e)f(w)
-m(ould)g(use)g(AST)p Fy(__)p FG(NOF)m(OR)f(instead.)41
-b(Flag)0 1405 y(v)-5 b(alues)31 b(for)f(this)g(argumen)m(t)h(ma)m(y)g
-(b)s(e)f(com)m(bined)g(b)m(y)g(summing)g(them)g(if)h(necessary)-8
-b(.)0 1773 y Fw(20.8)112 b(V)-9 b(ariable)38 b(Num)m(b)s(ers)g(of)g(Co)
-s(ordinates)0 2028 y FG(In)g(our)f(earlier)i(examples,)i(w)m(e)e(ha)m
-(v)m(e)h(used)d(a)i(\014xed)e(n)m(um)m(b)s(er)g(of)i(input)e(and)h
-(output)f(co)s(ordinates)i(when)0 2141 y(registering)d(a)f(co)s
-(ordinate)h(transformation)f(routine.)55 b(It)35 b(is)g(not)g
-(necessary)g(to)h(imp)s(ose)e(this)h(restriction,)0 2254
-y(ho)m(w)m(ev)m(er,)c(if)f(the)g(transformation)g(routine)g(can)g(cop)s
-(e)g(with)f(a)h(v)-5 b(ariable)31 b(n)m(um)m(b)s(er)d(of)i(co)s
-(ordinates)g(\(as)h(with)0 2367 y(the)41 b(example)h(in)f
-Fu(x)p FG(20.4\).)75 b(W)-8 b(e)43 b(indicate)f(the)f(acceptabilit)m(y)
-k(of)c(a)g(v)-5 b(ariable)42 b(n)m(um)m(b)s(er)e(when)g(registering)0
-2480 y(the)31 b(transformation)f(routine)h(b)m(y)f(supplying)f(the)h(v)
--5 b(alue)31 b(AST)p Fy(__)p FG(ANY)f(for)g(the)h(n)m(um)m(b)s(er)e(of)
-h(input)g(and/or)0 2592 y(output)g(co)s(ordinates,)h(as)g(follo)m(ws:)
-262 2909 y Ft(CALL)41 b(AST_INTRAREG\()e('SqrTran',)g(AST__ANY,)h
-(AST__ANY,)g(SQRTRAN,)g(0,)218 3009 y(:)828 b(PURPOSE,)40
-b(AUTHOR,)h(CONTACT,)f(STATUS)h(\))0 3338 y FG(The)h(result)g(is)g
-(that)h(an)f(In)m(traMap)h(ma)m(y)f(no)m(w)h(b)s(e)e(created)i(with)f
-(an)m(y)h(n)m(um)m(b)s(er)e(of)h(input)f(and)h(output)0
-3451 y(co)s(ordinates.)f(F)-8 b(or)32 b(example:)262
-3767 y Ft(INTEGER)40 b(INTRAMAP1,)g(INTRAMAP2)262 3967
-y(...)262 4166 y(INTRAMAP1)f(=)44 b(AST_INTRAMAP\()38
-b('SqrTran',)h(1,)k(1,)g(')g(',)g(STATUS)e(\))262 4266
-y(INTRAMAP2)e(=)44 b(AST_INTRAMAP\()38 b('SqrTran',)h(3,)k(3,)g
-('Invert=1',)c(STATUS)i(\))0 4595 y FG(It)33 b(is)f(p)s(ossible)g(to)h
-(\014x)f(either)h(the)g(n)m(um)m(b)s(er)e(of)i(input)e(or)i(output)f
-(co)s(ordinates)h(\(b)m(y)g(supplying)e(an)h(explicit)0
-4708 y(n)m(um)m(b)s(er)27 b(to)j(AST)p Fy(_)p FG(INTRAREG\),)e(but)f
-(more)i(subtle)f(restrictions)i(on)e(the)h(n)m(um)m(b)s(er)e(of)i(co)s
-(ordinates,)h(suc)m(h)0 4821 y(as)h(requiring)e(that)i(Nin)g(and)e
-(Nout)i(b)s(e)f(equal,)h(are)g(not)g(supp)s(orted.)38
-b(This)30 b(means)g(that:)262 5138 y Ft(INTRAMAP)40 b(=)j
-(AST_INTRAMAP\()38 b('SqrTran',)i(1,)i(2,)h(')g(',)g(STATUS)e(\))0
-5467 y FG(will)j(b)s(e)f(accepted)i(without)e(error,)k(although)d(the)g
-(transformation)g(routine)g(cannot)g(actually)h(handle)0
-5580 y(suc)m(h)32 b(a)g(com)m(bination)h(sensibly)-8
-b(.)46 b(If)31 b(this)h(is)g(imp)s(ortan)m(t,)h(it)f(w)m(ould)g(b)s(e)f
-(w)m(orth)h(adding)g(a)g(c)m(hec)m(k)i(within)d(the)0
-5693 y(transformation)g(routine)f(itself,)i(so)e(that)h(the)g(error)f
-(w)m(ould)g(b)s(e)g(detected)h(when)f(it)g(came)i(to)f(b)s(e)f(used.)p
-eop end
-%%Page: 171 181
-TeXDict begin 171 180 bop 0 52 a Fz(20.9)93 b(Adapting)30
-b(a)h(T)-8 b(ransformation)30 b(Routine)h(to)g(Individual)e(In)m
-(traMaps)969 b FG(171)0 351 y Fw(20.9)112 b(Adapting)38
-b(a)g(T)-9 b(ransformation)39 b(Routine)e(to)g(Individual)i(In)m
-(traMaps)0 579 y FG(In)j(the)i(examples)f(giv)m(en)i(so)e(far,)j(our)d
-(co)s(ordinate)h(transformation)f(routines)g(ha)m(v)m(e)i(not)e(made)g
-(use)g(of)0 692 y(the)34 b(THIS)f(p)s(oin)m(ter)h(passed)f(to)i(them)f
-(\(whic)m(h)g(iden)m(ti\014es)g(the)g(In)m(traMap)h(whose)e
-(transformation)i(w)m(e)f(are)0 805 y(implemen)m(ting\).)71
-b(In)40 b(practice,)k(this)c(will)h(often)f(b)s(e)g(the)g(case.)71
-b(Ho)m(w)m(ev)m(er,)45 b(the)40 b(presence)h(of)f(the)g(THIS)0
-918 y(p)s(oin)m(ter)d(allo)m(ws)i(the)f(transformation)g(routine)f(to)i
-(in)m(v)m(ok)m(e)g(an)m(y)f(other)f(AST)g(routine)h(on)f(the)h(In)m
-(traMap,)0 1031 y(and)i(this)g(p)s(ermits)g(enquiries)g(ab)s(out)g(its)
-h(attributes.)71 b(The)40 b(transformation)h(routine's)f(b)s(eha)m
-(viour)g(can)0 1144 y(therefore)35 b(b)s(e)f(mo)s(di\014ed)g(according)
-i(to)f(an)m(y)g(attribute)h(v)-5 b(alues)35 b(whic)m(h)f(are)i(set.)54
-b(This)34 b(turns)f(out)i(to)h(b)s(e)e(a)0 1256 y(useful)d(thing)h(to)g
-(do,)h(so)f(eac)m(h)g(In)m(traMap)h(has)e(a)h(sp)s(ecial)h(In)m
-(traFlag)g(attribute)g(reserv)m(ed)f(for)f(exactly)j(this)0
-1369 y(purp)s(ose.)0 1536 y(Consider,)23 b(for)e(instance,)j(the)e
-(case)h(where)e(the)h(transformation)g(routine)f(has)h(access)h(to)f
-(sev)m(eral)h(alternativ)m(e)0 1649 y(sets)37 b(of)f(in)m
-(ternally-stored)i(data)e(whic)m(h)g(it)h(ma)m(y)g(apply)f(to)h(p)s
-(erform)d(its)j(transformation.)58 b(Rather)37 b(than)0
-1762 y(implemen)m(t)28 b(man)m(y)f(di\013eren)m(t)g(v)m(ersions)h(of)f
-(the)g(transformation)g(routine,)h(y)m(ou)g(ma)m(y)f(switc)m(h)h(b)s
-(et)m(w)m(een)g(them)0 1875 y(b)m(y)k(setting)i(a)f(v)-5
-b(alue)33 b(for)f(the)g(In)m(traFlag)i(attribute)g(when)d(y)m(ou)i
-(create)h(an)e(instance)h(of)g(an)f(In)m(traMap,)i(for)0
-1988 y(example:)262 2250 y Ft(INTRAMAP1)39 b(=)44 b(AST_INTRAMAP\()38
-b('MyTran',)i(2,)i(2,)h('IntraFlag=A',)38 b(STATUS)j(\))262
-2349 y(INTRAMAP2)e(=)44 b(AST_INTRAMAP\()38 b('MyTran',)i(2,)i(2,)h
-('IntraFlag=B',)38 b(STATUS)j(\))0 2624 y FG(The)36 b(transformation)h
-(routine)g(ma)m(y)h(then)e(enquire)g(the)h(v)-5 b(alue)38
-b(of)f(the)g(In)m(traFlag)h(attribute)f(\()p Fx(e.g.)g
-FG(using)0 2737 y(AST)p Fy(_)p FG(GETC)e(and)h(passing)g(it)h(the)g
-(THIS)e(p)s(oin)m(ter\))i(and)f(use)g(whic)m(hev)m(er)h(dataset)h(is)e
-(required)g(for)g(that)0 2850 y(particular)31 b(In)m(traMap.)0
-3017 y(This)d(approac)m(h)h(is)f(particularly)h(useful)f(when)g(the)h
-(n)m(um)m(b)s(er)e(of)i(p)s(ossible)f(transformations)h(is)f(un)m(b)s
-(ounded)0 3130 y(or)j(not)g(kno)m(wn)g(in)g(adv)-5 b(ance,)32
-b(in)e(whic)m(h)h(case)h(the)g(In)m(traFlag)g(attribute)g(ma)m(y)g(b)s
-(e)e(used)g(to)i(hold)f(n)m(umerical)0 3243 y(v)-5 b(alues)33
-b(enco)s(ded)f(as)h(part)f(of)h(a)g(c)m(haracter)h(string)f
-(\(e\013ectiv)m(ely)j(using)c(them)g(as)h(data)g(for)g(the)f(In)m
-(traMap\).)0 3356 y(It)41 b(is)f(also)i(sup)s(erior)d(to)j(the)e(use)h
-(of)g(a)g(global)g(switc)m(h)h(for)e(comm)m(unication)i(\()p
-Fx(e.g.)e FG(setting)i(an)f(index)f(to)0 3469 y(select)29
-b(the)f(\\curren)m(t")g(data)g(b)s(efore)f(using)g(the)h(In)m
-(traMap\),)h(b)s(ecause)e(it)h(con)m(tin)m(ues)h(to)f(w)m(ork)g(when)e
-(sev)m(eral)0 3582 y(In)m(traMaps)35 b(are)g(em)m(b)s(edded)e(within)h
-(a)h(more)f(complex)h(comp)s(ound)e(Mapping,)j(when)d(y)m(ou)i(ma)m(y)g
-(ha)m(v)m(e)h(no)0 3695 y(con)m(trol)c(o)m(v)m(er)g(the)e(order)g(in)g
-(whic)m(h)g(they)h(are)f(used.)0 4002 y Fw(20.10)112
-b(Simplifying)40 b(In)m(traMaps)0 4230 y FG(A)28 b(notable)h(disadv)-5
-b(an)m(tage)29 b(of)f(In)m(traMaps)g(is)g(that)g(they)g(are)h(\\blac)m
-(k)g(b)s(o)m(xes")f(as)g(far)g(as)g(AST)f(is)h(concerned.)0
-4343 y(This)44 b(means)g(that)h(they)f(ha)m(v)m(e)i(limited)f(abilit)m
-(y)h(to)f(participate)h(in)e(the)g(simpli\014cation)h(of)g(comp)s(ound)
-0 4456 y(Mappings)d(p)s(erformed,)i Fx(e.g.)p FG(,)h(b)m(y)d(AST)p
-Fy(_)p FG(SIMPLIFY)f(\()p Fu(x)p FG(6.7\),)48 b(b)s(ecause)42
-b(AST)g(cannot)h(kno)m(w)f(ho)m(w)g(they)0 4569 y(in)m(teract)35
-b(with)e(other)h(Mappings.)50 b(In)33 b(realit)m(y)-8
-b(,)37 b(of)c(course,)i(they)f(will)g(often)g(implemen)m(t)g(suc)m(h)f
-(sp)s(ecialised)0 4682 y(co)s(ordinate)e(transformations)g(that)g(the)f
-(simpli\014cation)h(p)s(ossibilities)g(will)g(b)s(e)f(rather)g(limited)
-h(an)m(yw)m(a)m(y)-8 b(.)0 4849 y(One)25 b(imp)s(ortan)m(t)h
-(simpli\014cation,)h(ho)m(w)m(ev)m(er,)h(is)e(the)f(abilit)m(y)i(of)f
-(a)g(Mapping)f(to)h(cancel)h(with)e(its)h(o)m(wn)g(in)m(v)m(erse)0
-4961 y(to)k(yield)g(a)g(unit)f(Mapping)g(\(a)i(UnitMap\).)41
-b(This)29 b(is)g(imp)s(ortan)m(t)h(b)s(ecause)f(Mappings)h(are)g
-(frequen)m(tly)f(used)0 5074 y(to)c(relate)h(a)f(dataset)g(to)h(some)e
-(external)i(standard)d(\(a)i(celestial)i(co)s(ordinate)f(system,)g(for)
-e(example\).)40 b(When)0 5187 y(in)m(ter-relating)26
-b(t)m(w)m(o)f(similar)f(datasets)h(calibrated)g(using)f(the)g(same)g
-(standard,)h(part)e(of)h(the)g(Mapping)g(often)0 5300
-y(cancels,)29 b(b)s(ecause)d(it)h(is)f(applied)g(\014rst)g(in)g(one)g
-(direction)h(and)f(then)g(the)h(other,)g(e\013ectiv)m(ely)j
-(eliminating)d(the)0 5413 y(reference)h(to)g(the)f(standard.)39
-b(This)26 b(is)i(often)f(a)h(useful)e(simpli\014cation)i(and)f(can)h
-(lead)f(to)h(greater)h(e\016ciency)-8 b(.)0 5580 y(Man)m(y)23
-b(transformations)f(ha)m(v)m(e)i(this)e(prop)s(ert)m(y)g(of)g
-(cancelling)i(with)e(their)g(o)m(wn)h(in)m(v)m(erse,)i(but)c(not)i
-(necessarily)0 5693 y(all.)42 b(Consider)29 b(the)i(follo)m(wing)h
-(transformation)e(routine,)h(for)f(example:)p eop end
-%%Page: 172 182
-TeXDict begin 172 181 bop 0 52 a FG(172)772 b Fz(20)92
-b(CREA)-8 b(TING)30 b(YOUR)h(O)m(WN)g(PRIV)-10 b(A)i(TE)30
-b(MAPPINGS)g(\(INTRAMAPS\))262 351 y Ft(SUBROUTINE)39
-b(MAXTRAN\()h(THIS,)i(NPOINT,)e(NCOORD_IN,)g(INDIM,)h(IN,)h(FORWARD,)
-218 451 y(:)871 b(NCOORD_OUT,)39 b(OUTDIM,)i(OUT,)h(STATUS)f(\))262
-551 y(INTEGER)f(THIS,)i(NPOINT,)e(NCOORD_IN,)g(INDIM,)h(NCOORD_OUT,)e
-(OUTDIM,)i(STATUS)262 650 y(DOUBLE)g(PRECISION)e(IN\()k(INDIM,)e
-(NCOORD_IN)f(\),)j(OUT\()e(OUTDIM,)g(NCOORD_OUT)f(\))262
-750 y(LOGICAL)g(FORWARD)262 949 y(INCLUDE)g('AST_PAR')262
-1049 y(DOUBLE)h(PRECISION)e(HI,)k(X)262 1148 y(INTEGER)d(COORD,)h
-(POINT)0 1348 y(*)87 b(Forward)40 b(transformation.)262
-1447 y(IF)i(\()h(FORWARD)e(\))i(THEN)392 1547 y(DO)g(2)g(POINT)f(=)h
-(1,)g(NPOINT)523 1646 y(HI)g(=)g(AST__BAD)523 1746 y(DO)g(1)g(COORD)e
-(=)j(1,)e(NCOORD_IN)654 1846 y(X)h(=)g(IN\()f(POINT,)g(COORD)f(\))654
-1945 y(IF)i(\()g(X)g(.NE.)f(AST__BAD)e(\))j(THEN)785
-2045 y(IF)f(\()h(X)h(.GT.)e(HI)g(.OR.)g(HI)h(.EQ.)f(AST__BAD)e(\))j(HI)
-g(=)g(X)654 2145 y(END)f(IF)44 2244 y(1)435 b(CONTINUE)44
-2344 y(2)304 b(CONTINUE)0 2543 y(*)87 b(Inverse)40 b(transformation.)
-262 2643 y(ELSE)392 2742 y(DO)j(4)g(COORD)f(=)h(1,)g(NCOORD_OUT)523
-2842 y(DO)g(3)g(POINT)e(=)j(1,)e(NPOINT)654 2942 y(OUT\()g(POINT,)f
-(COORD)g(\))j(=)f(IN\()f(POINT,)f(1)i(\))44 3041 y(3)435
-b(CONTINUE)44 3141 y(4)304 b(CONTINUE)262 3240 y(END)42
-b(IF)262 3340 y(END)0 3594 y FG(This)22 b(routine)i(tak)m(es)g(an)m(y)g
-(n)m(um)m(b)s(er)e(of)h(input)f(co)s(ordinates)i(and)f(returns)f(a)h
-(single)h(output)f(co)s(ordinate)h(whic)m(h)0 3707 y(is)j(the)g(maxim)m
-(um)g(v)-5 b(alue)27 b(of)g(the)g(input)f(co)s(ordinates.)41
-b(Its)27 b(in)m(v)m(erse)g(\(actually)i(a)f(\\pseudo-in)m(v)m(erse"\))g
-(sets)g(all)0 3820 y(the)j(input)e(co)s(ordinates)i(to)g(the)g(v)-5
-b(alue)31 b(of)f(the)h(output)f(co)s(ordinate.)2384 3787
-y Fv(31)0 3981 y FG(If)h(this)g(routine)g(is)g(applied)g(in)g(the)g
-(forw)m(ard)g(direction)h(and)e(then)h(in)g(the)h(in)m(v)m(erse)g
-(direction,)g(it)g(do)s(es)f FE(not)0 4094 y FG(in)38
-b(general)h(restore)f(the)h(original)g(co)s(ordinate)g(v)-5
-b(alues.)64 b(Ho)m(w)m(ev)m(er,)42 b(if)c(applied)g(in)g(the)g(in)m(v)m
-(erse)h(direction)0 4207 y(and)d(then)g(the)h(forw)m(ard)f(direction,)j
-(it)e(do)s(es.)59 b(Hence,)40 b(replacing)d(the)g(sequence)g(of)f(op)s
-(erations)h(with)g(an)0 4320 y(equiv)-5 b(alen)m(t)32
-b(UnitMap)f(is)f(p)s(ossible)g(in)g(the)h(latter)g(case,)h(but)e(not)g
-(in)g(the)h(former.)0 4480 y(T)-8 b(o)36 b(distinguish)e(these)i(p)s
-(ossibilities,)i(t)m(w)m(o)e(\015ag)g(v)-5 b(alues)36
-b(are)f(pro)m(vided)g(for)g(use)h(with)f(AST)p Fy(_)p
-FG(INTRAREG)0 4593 y(to)c(indicate)h(what)f(simpli\014cation)g(\(if)h
-(an)m(y\))f(is)g(p)s(ossible.)41 b(F)-8 b(or)32 b(example,)g(to)f
-(register)h(the)f(ab)s(o)m(v)m(e)h(transfor-)0 4706 y(mation)f
-(routine,)g(w)m(e)g(migh)m(t)g(use:)262 4947 y Ft(EXTERNAL)40
-b(MAXTRAN)262 5146 y(...)262 5346 y(CALL)h(AST_INTRAREG\()e('MaxTran',)
-g(AST__ANY,)h(1,)j(MAXTRAN,)d(AST__SIMPIF,)218 5445 y(:)828
-b(PURPOSE,)40 b(AUTHOR,)h(CONTACT,)f(STATUS)h(\))p 0
-5516 1512 4 v 73 5570 a Fs(31)138 5602 y Fr(Remem)n(b)r(er)32
-b(that)g(IN)f(holds)h(the)g(original)i(\\output")e(co)r(ordinates)h
-(when)f(applying)g(the)g(in)n(v)n(erse)g(transformation)i(and)0
-5693 y(OUT)25 b(holds)h(the)g(original)h(\\input")f(co)r(ordinates.)p
-eop end
-%%Page: 173 183
-TeXDict begin 173 182 bop 0 52 a Fz(20.11)93 b(W)-8 b(riting)32
-b(and)d(Reading)i(In)m(traMaps)2068 b FG(173)0 351 y(Here,)30
-b(the)f(\015ag)g(v)-5 b(alue)30 b(AST)p Fy(__)p FG(SIMPIF)d(supplied)g
-(for)i(the)g(\014fth)f(argumen)m(t)h(indicates)h(that)g
-(simpli\014cation)0 464 y(is)44 b(p)s(ossible)g(if)h(the)f
-(transformation)h(is)g(applied)f(in)g(the)h(in)m(v)m(erse)g(direction)g
-(follo)m(w)m(ed)h(b)m(y)e(the)h(forw)m(ard)0 577 y(direction.)f(T)-8
-b(o)32 b(indicate)g(the)g(complemen)m(tary)g(case,)h(the)e(\015ag)h
-(AST)p Fy(__)p FG(SIMPFI)e(w)m(ould)h(b)s(e)f(used)h(instead.)0
-690 y(If)j(b)s(oth)g(simpli\014cations)i(are)f(p)s(ossible)f(\(as)h
-(with)g(the)g(SQR)-8 b(TRAN)34 b(function)g(in)h Fu(x)p
-FG(20.4\),)j(then)c(w)m(e)i(w)m(ould)0 803 y(use)30 b(the)h(sum)e(of)i
-(b)s(oth)e(v)-5 b(alues.)0 965 y(In)27 b(practice,)j(some)f(judgemen)m
-(t)f(is)g(usually)g(necessary)g(when)f(deciding)i(whether)e(to)i(allo)m
-(w)g(simpli\014cation.)0 1078 y(F)-8 b(or)42 b(example,)j(seen)c(in)g
-(one)g(ligh)m(t)i(our)e(SQR)-8 b(TRAN)40 b(routine)h(\()p
-Fu(x)p FG(20.4\))j(do)s(es)d(not)g(cancel)i(with)e(its)g(o)m(wn)0
-1191 y(in)m(v)m(erse,)i(b)s(ecause)c(squaring)g(a)g(co)s(ordinate)h(v)
--5 b(alue)40 b(and)f(then)g(taking)h(its)g(square)f(ro)s(ot)g(can)h(c)m
-(hange)g(the)0 1304 y(original)33 b(v)-5 b(alue,)34 b(if)e(this)g(w)m
-(as)g(negativ)m(e.)48 b(Therefore,)33 b(replacing)g(this)f(com)m
-(bination)h(with)f(a)g(UnitMap)h(will)0 1417 y(c)m(hange)27
-b(the)f(b)s(eha)m(viour)f(of)h(a)g(comp)s(ound)e(Mapping)i(and)f
-(should)f(not)i(b)s(e)f(allo)m(w)m(ed.)41 b(Seen)26 b(in)f(another)h
-(ligh)m(t,)0 1530 y(ho)m(w)m(ev)m(er,)33 b(where)e(the)h(co)s
-(ordinates)g(b)s(eing)f(pro)s(cessed)g(are)g(in)m(trinsically)i(all)f
-(p)s(ositiv)m(e,)h(it)f(is)g(a)f(p)s(ermissible)0 1643
-y(and)f(probably)f(useful)h(simpli\014cation.)0 1806
-y(If)21 b(suc)m(h)h(distinctions)g(are)h(ev)m(er)f(imp)s(ortan)m(t)g
-(in)g(practice,)j(it)e(is)f(simple)f(to)i(register)g(the)f(same)g
-(transformation)0 1918 y(routine)33 b(t)m(wice)i(with)e(di\013eren)m(t)
-g(\015ag)h(v)-5 b(alues)33 b(\(use)g(a)h(separate)g(name)f(for)g(eac)m
-(h\))i(and)d(then)h(use)g(whic)m(hev)m(er)0 2031 y(is)d(appropriate)h
-(when)e(creating)j(an)e(In)m(traMap.)0 2324 y Fw(20.11)112
-b(W)-9 b(riting)37 b(and)h(Reading)h(In)m(traMaps)0 2546
-y FG(It)i(is)h(most)f(imp)s(ortan)m(t)g(to)h(realise)h(that)f(when)e(y)
-m(ou)h(write)h(an)f(In)m(traMap)g(to)h(a)g(Channel)e(\()p
-Fu(x)p FG(15.3\),)47 b(the)0 2659 y(transformation)33
-b(routine)g(whic)m(h)g(it)h(uses)e(is)h(not)h(stored)f(with)g(it.)49
-b(T)-8 b(o)33 b(do)g(so)h(is)f(imp)s(ossible,)g(b)s(ecause)g(the)0
-2771 y(routine)e(has)f(b)s(een)g(compiled)i(and)e(loaded)h(in)m(to)h
-(memory)f(ready)f(for)h(execution)h(b)s(efore)e(AST)h(gets)g(to)h(see)0
-2884 y(it.)48 b(Ho)m(w)m(ev)m(er,)35 b(AST)d(do)s(es)g(store)h(the)g
-(name)f(asso)s(ciated)i(with)f(the)f(transformation)h(routine)g(and)e
-(v)-5 b(arious)0 2997 y(details)31 b(ab)s(out)f(the)h(In)m(traMap)g
-(itself.)0 3160 y(This)40 b(means)h(that)g(an)m(y)g(program)g
-(attempting)h(to)f(read)g(the)g(In)m(traMap)g(\()p Fu(x)p
-FG(15.4\))j(cannot)d(mak)m(e)h(use)e(of)0 3273 y(it)e(unless)e(it)i
-(also)h(has)e(indep)s(enden)m(t)f(access)i(to)g(the)g(original)g
-(transformation)g(routine.)62 b(If)36 b(it)i(do)s(es)f(not)0
-3386 y(ha)m(v)m(e)j(access)f(to)g(this)f(routine,)j(an)d(error)g(will)h
-(o)s(ccur)f(at)h(the)f(p)s(oin)m(t)h(where)e(the)i(In)m(traMap)g(is)f
-(read)g(and)0 3499 y(the)29 b(asso)s(ciated)h(error)f(message)g(will)h
-(direct)f(the)g(user)f(to)h(the)g(author)g(of)g(the)g(transformation)g
-(routine)g(for)0 3612 y(more)i(information.)0 3774 y(Ho)m(w)m(ev)m(er,)
-f(if)c(the)h(necessary)g(transformation)g(routine)g(is)g(a)m(v)-5
-b(ailable,)30 b(and)c(has)g(b)s(een)g(registered)i(b)s(efore)e(the)0
-3887 y(read)31 b(op)s(eration)h(tak)m(es)h(place,)g(then)e(AST)g(is)g
-(able)h(to)g(re-create)h(the)f(original)g(In)m(traMap)g(and)f(will)h
-(do)f(so.)0 4000 y(Registration)g(of)f(the)f(transformation)h(routine)f
-(m)m(ust,)h(of)g(course,)g(use)f(the)g(same)h(name)g(\(and,)f(in)g
-(fact,)i(b)s(e)0 4113 y(iden)m(tical)h(in)e(most)h(particulars\))g(as)f
-(w)m(as)h(used)f(in)g(the)g(original)i(program)e(whic)m(h)g(wrote)h
-(the)g(data.)0 4275 y(This)f(means)h(that)h(a)g(set)g(of)f(co-op)s
-(erating)i(programs)e(whic)m(h)f(all)j(ha)m(v)m(e)f(access)g(to)g(the)g
-(same)f(set)h(of)f(trans-)0 4388 y(formation)36 b(routines)f(and)g
-(register)h(them)g(in)f(iden)m(tical)i(fashion)e(\(see)i
-Fu(x)p FG(20.12)g(for)f(ho)m(w)f(this)g(can)h(b)s(est)f(b)s(e)0
-4501 y(ac)m(hiev)m(ed\))g(can)e(freely)g(exc)m(hange)i(data)e(that)h
-(con)m(tain)g(In)m(traMaps.)49 b(The)32 b(need)h(to)g(a)m(v)m(oid)i
-(exp)s(orting)e(suc)m(h)0 4614 y(data)e(to)g(unsusp)s(ecting)e(third)h
-(parties)g(\()p Fu(x)p FG(20.3\))j(m)m(ust,)e(ho)m(w)m(ev)m(er,)h(b)s
-(e)e(re-iterated.)0 4907 y Fw(20.12)112 b(Managing)40
-b(T)-9 b(ransformation)38 b(Routines)g(in)g(Libraries)0
-5128 y FG(If)j(y)m(ou)i(are)f(dev)m(eloping)h(a)f(large)h(suite)f(of)g
-(data)h(reduction)f(soft)m(w)m(are,)k(y)m(ou)d(ma)m(y)f(ha)m(v)m(e)h(a)
-f(need)g(to)h(use)0 5241 y(In)m(traMaps)27 b(at)f(v)-5
-b(arious)27 b(p)s(oin)m(ts)f(within)f(it.)40 b(V)-8 b(ery)27
-b(probably)f(this)g(will)g(o)s(ccur)g(in)g(unrelated)g(mo)s(dules)g
-(whic)m(h)0 5354 y(are)h(compiled)h(separately)g(and)f(then)g(stored)g
-(in)f(a)i(library)-8 b(.)40 b(Since)27 b(the)g(transformation)g
-(routines)g(required)0 5467 y(m)m(ust)34 b(b)s(e)g(registered)h(b)s
-(efore)f(they)g(can)h(b)s(e)e(used,)i(this)f(mak)m(es)h(it)g
-(di\016cult)f(to)h(decide)g(where)f(to)h(p)s(erform)0
-5580 y(this)g(registration,)i(esp)s(ecially)g(since)e(an)m(y)g
-(particular)g(data)h(reduction)e(program)h(ma)m(y)g(use)g(an)g
-(arbitrary)0 5693 y(subset)30 b(of)g(the)h(mo)s(dules)e(in)i(y)m(our)f
-(library)-8 b(.)p eop end
-%%Page: 174 184
-TeXDict begin 174 183 bop 0 52 a FG(174)772 b Fz(20)92
-b(CREA)-8 b(TING)30 b(YOUR)h(O)m(WN)g(PRIV)-10 b(A)i(TE)30
-b(MAPPINGS)g(\(INTRAMAPS\))0 351 y FG(T)-8 b(o)32 b(assist)g(with)f
-(this)g(problem,)g(AST)f(allo)m(ws)j(y)m(ou)f(to)g(p)s(erform)d(the)j
-(same)g(registration)g(of)g(a)f(transforma-)0 464 y(tion)39
-b(routine)f(an)m(y)g(n)m(um)m(b)s(er)f(of)h(times,)j(so)d(long)h(as)f
-(it)g(is)g(p)s(erformed)f(using)g(an)h(iden)m(tical)i(in)m(v)m(o)s
-(cation)g(of)0 577 y(AST)p Fy(_)p FG(INTRAREG)35 b(on)i(eac)m(h)g(o)s
-(ccasion)h(\()p Fx(i.e.)e FG(all)h(of)g(its)g(argumen)m(ts)g(m)m(ust)f
-(b)s(e)g(iden)m(tical\).)61 b(This)36 b(means)0 690 y(y)m(ou)e(do)f
-(not)h(ha)m(v)m(e)g(to)h(k)m(eep)f(trac)m(k)g(of)g(whether)f(a)h
-(particular)g(routine)f(has)g(already)h(b)s(een)f(registered)h(but)0
-803 y(could,)c(in)e(fact,)j(register)f(it)f(on)g(eac)m(h)i(o)s(ccasion)
-f(immediately)g(b)s(efore)f(it)g(is)h(required)e(\(wherev)m(er)h(that)h
-(ma)m(y)0 916 y(b)s(e\).)62 b(In)36 b(order)h(that)h(all)h
-(registrations)g(are)e(iden)m(tical,)42 b(ho)m(w)m(ev)m(er,)f(it)d(is)f
-(recommended)g(that)h(y)m(ou)g(group)0 1029 y(them)30
-b(all)i(together)f(in)m(to)h(a)f(single)g(routine,)f(p)s(erhaps)f(as)h
-(follo)m(ws:)262 1278 y Ft(SUBROUTINE)39 b(MYTRANS\()h(STATUS)h(\))262
-1377 y(INTEGER)f(STATUS)262 1577 y(INCLUDE)g('AST_PAR')262
-1676 y(EXTERNAL)g(MAXTRAN,)g(POLY3TRAN,)g(SQRTRAN)262
-1876 y(...)262 2075 y(CALL)h(AST_INTRAREG\()e('MaxTran',)g(AST__ANY,)h
-(1,)j(MAXTRAN,)d(AST__SIMPIF,)218 2174 y(:)828 b(PURPOSE,)40
-b(AUTHOR,)h(CONTACT,)f(STATUS)h(\))262 2374 y(...)262
-2573 y(CALL)g(AST_INTRAREG\()e('Poly3Tran',)f(1,)43 b(1,)g(POLY3TRAN,)c
-(AST__NOINV,)218 2673 y(:)828 b(PURPOSE,)40 b(AUTHOR,)h(CONTACT,)f
-(STATUS)h(\))262 2872 y(...)262 3071 y(CALL)g(AST_INTRAREG\()e
-('SqrTran,)h(2,)i(2,)h(SQRTRAN,)d(0,)218 3171 y(:)828
-b(PURPOSE,)40 b(AUTHOR,)h(CONTACT,)f(STATUS)h(\))262
-3270 y(END)0 3533 y FG(Y)-8 b(ou)25 b(can)g(then)f(simply)g(in)m(v)m
-(ok)m(e)j(this)d(routine)g(wherev)m(er)h(necessary)-8
-b(.)40 b(It)24 b(is,)i(in)e(fact,)j(particularly)e(imp)s(ortan)m(t)0
-3646 y(to)i(register)g(all)g(relev)-5 b(an)m(t)27 b(transformation)f
-(routines)g(in)g(this)g(w)m(a)m(y)h(b)s(efore)e(y)m(ou)i(attempt)g(to)g
-(read)e(an)h(Ob)5 b(ject)0 3758 y(that)28 b(migh)m(t)g(b)s(e)f(\(or)h
-(con)m(tain\))h(an)e(In)m(traMap)h(\()p Fu(x)p FG(20.11\).)43
-b(This)26 b(is)i(b)s(ecause)f(y)m(ou)h(ma)m(y)g(not)f(kno)m(w)h(in)f
-(adv)-5 b(ance)0 3871 y(whic)m(h)34 b(of)g(these)g(transformation)h
-(routines)f(the)g(In)m(traMap)g(will)h(use,)g(so)f(they)g(m)m(ust)g
-(all)h(b)s(e)e(a)m(v)-5 b(ailable)37 b(in)0 3984 y(order)30
-b(to)h(a)m(v)m(oid)h(an)e(error.)p eop end
-%%Page: 175 185
-TeXDict begin 175 184 bop 3643 52 a FG(175)0 351 y FA(21)135
-b(Pro)t(ducing)44 b(Graphical)h(Output)g(\(Plots\))0
-606 y FG(Graphical)29 b(output)f(from)g(AST)f(is)i(p)s(erformed)d
-(though)i(an)g(Ob)5 b(ject)29 b(called)g(a)g(Plot,)h(whic)m(h)e(is)g(a)
-h(sp)s(ecialised)0 719 y(form)e(of)h(F)-8 b(rameSet.)41
-b(A)28 b(Plot)h(do)s(es)e(not)h(represen)m(t)g(the)g(graphical)g(con)m
-(ten)m(t)i(itself,)f(but)e(is)h(a)g(route)g(through)0
-832 y(whic)m(h)22 b(plotting)i(op)s(erations,)h(suc)m(h)d(as)h(dra)m
-(wing)f(lines)h(and)f(curv)m(es,)j(are)e(con)m(v)m(ey)m(ed)h(on)f(to)g
-(a)g(plotting)h(surface)0 945 y(to)31 b(app)s(ear)f(as)g(visible)h
-(graphics.)0 1242 y Fw(21.1)112 b(The)38 b(Plot)f(Mo)s(del)0
-1465 y FG(When)20 b(a)h(Plot)h(is)f(created,)j(it)d(is)g(initialised)g
-(b)m(y)g(pro)m(viding)g(a)g(F)-8 b(rameSet)21 b(whose)g(base)g(F)-8
-b(rame)21 b(\(as)h(sp)s(eci\014ed)e(b)m(y)0 1578 y(its)30
-b(Base)g(attribute\))g(is)g(mapp)s(ed)e(linearly)i(or)f
-(logarithmically)j(\(as)e(sp)s(eci\014ed)e(b)m(y)h(the)h(LogPlot)h
-(attribues\))0 1691 y(on)41 b(to)i(a)f Fx(plotting)i(ar)-5
-b(e)g(a.)75 b FG(This)41 b(is)g(a)h(rectangular)h(region)f(in)f(the)h
-(graphical)g(co)s(ordinate)h(space)f(of)f(the)0 1804
-y(underlying)35 b(graphics)i(system)g(and)e(b)s(ecomes)i(the)g(new)f
-(base)h(F)-8 b(rame)37 b(of)g(the)f(Plot.)60 b(In)36
-b(e\013ect,)k(the)d(Plot)0 1917 y(b)s(ecomes)32 b(attac)m(hed)h(to)g
-(the)f(plotting)h(surface,)f(in)f(rather)h(the)g(same)g(w)m(a)m(y)g
-(that)h(a)f(basic)g(F)-8 b(rameSet)33 b(migh)m(t)0 2030
-y(b)s(e)d(attac)m(hed)i(to)f(\(sa)m(y\))h(an)e(image.)0
-2194 y(The)23 b(curren)m(t)g(F)-8 b(rame)25 b(of)e(the)h(Plot)g
-(\(deriv)m(ed)g(from)f(the)h(curren)m(t)f(F)-8 b(rame)24
-b(of)g(the)g(F)-8 b(rameSet)24 b(supplied\))f(is)g(used)0
-2307 y(to)35 b(represen)m(t)f(a)h Fx(physic)-5 b(al)37
-b(c)-5 b(o)g(or)g(dinate)39 b(system.)53 b FG(This)33
-b(is)h(the)h(system)f(in)g(whic)m(h)f(plotting)j(op)s(erations)e(are)0
-2420 y(p)s(erformed)24 b(b)m(y)h(y)m(our)g(program.)39
-b(Ev)m(ery)25 b(plotting)h(op)s(eration)g(is)f(then)g(transformed)g
-(through)f(the)i(Mapping)0 2533 y(whic)m(h)e(in)m(ter-relates)i(the)e
-(Plot's)h(curren)m(t)f(and)g(base)g(F)-8 b(rames)25 b(in)f(order)f(to)i
-(app)s(ear)f(on)g(the)g(plotting)h(surface.)0 2697 y(An)39
-b(example)h(ma)m(y)g(help)f(here.)68 b(Supp)s(ose)37
-b(w)m(e)j(start)g(with)f(a)h(F)-8 b(rameSet)40 b(whose)f(base)h(F)-8
-b(rame)40 b(describ)s(es)0 2810 y(the)f(pixel)h(co)s(ordinates)f(of)h
-(an)e(image)j(and)d(whose)h(curren)m(t)g(F)-8 b(rame)40
-b(describ)s(es)e(a)i(celestial)h(\(equatorial\))0 2923
-y(co)s(ordinate)30 b(system.)40 b(Let)29 b(us)f(assume)h(that)g(these)h
-(t)m(w)m(o)g(F)-8 b(rames)29 b(are)h(in)m(ter-related)g(b)m(y)f(a)g
-(Mapping)g(within)0 3035 y(the)i(F)-8 b(rameSet)31 b(whic)m(h)f
-(represen)m(ts)h(a)f(particular)h(sky)f(pro)5 b(jection.)0
-3199 y(When)41 b(a)g(Plot)h(is)e(created)i(from)f(this)g(F)-8
-b(rameSet,)44 b(w)m(e)e(sp)s(ecify)e(ho)m(w)h(the)g(pixel)g(co)s
-(ordinates)h(\(the)f(base)0 3312 y(F)-8 b(rame\))34 b(maps)e(on)h(to)g
-(the)g(plotting)h(surface.)48 b(This)32 b(simply)g(corresp)s(onds)g(to)
-h(telling)h(the)f(Plot)h(where)e(w)m(e)0 3425 y(ha)m(v)m(e)f
-(previously)e(plotted)h(the)f(image)i(data.)41 b(If)29
-b(w)m(e)g(no)m(w)h(use)f(the)g(Plot)h(to)g(plot)g(a)g(line)f(with)g
-(latitude)i(zero)0 3538 y(in)j(our)g(ph)m(ysical)h(co)s(ordinate)g
-(system,)g(as)g(giv)m(en)g(b)m(y)f(the)h(curren)m(t)f(F)-8
-b(rame,)36 b(this)e(line)h(w)m(ould)f(app)s(ear)g(as)g(a)0
-3651 y(curv)m(e)d(\(the)g(equator\))g(on)f(the)h(plotting)g(surface,)g
-(correctly)h(registered)f(with)f(the)g(image.)0 3815
-y(There)35 b(are)i(a)f(n)m(um)m(b)s(er)e(of)i(plotting)h(functions)e
-(pro)m(vided,)j(whic)m(h)d(all)i(w)m(ork)f(in)f(a)h(similar)h(w)m(a)m
-(y)-8 b(.)58 b(Plotting)0 3928 y(op)s(erations)31 b(are)g(transformed)f
-(through)g(the)h(Mapping)f(whic)m(h)h(the)g(Plot)g(represen)m(ts)g(b)s
-(efore)f(they)h(app)s(ear)0 4041 y(on)k(the)f(plotting)i(surface.)940
-4008 y Fv(32)1068 4041 y FG(It)f(is)g(p)s(ossible)f(to)h(dra)m(w)g(sym)
-m(b)s(ols,)g(lines,)h(axes,)h(en)m(tire)f(grids)e(and)g(more)h(in)0
-4154 y(this)30 b(w)m(a)m(y)-8 b(.)0 4451 y Fw(21.2)112
-b(Plotting)37 b(Sym)m(b)s(ols)0 4675 y FG(The)c(simplest)h(form)g(of)f
-(plotting)i(is)f(to)h(dra)m(w)e(sym)m(b)s(ols)g(\(termed)h
-Fx(markers)p FG(\))i(at)e(a)g(set)h(of)f(p)s(oin)m(ts.)50
-b(This)33 b(is)0 4788 y(p)s(erformed)k(b)m(y)i(AST)p
-Fy(_)p FG(MARK,)f(whic)m(h)h(is)g(supplied)e(with)i(a)g(set)h(of)f(ph)m
-(ysical)g(co)s(ordinates)h(at)f(whic)m(h)g(to)0 4900
-y(place)31 b(the)g(mark)m(ers:)262 5153 y Ft(INCLUDE)40
-b('AST_PAR')262 5253 y(INTEGER)g(NCOORD,)h(NMARK,)g(TYPE,)h(STATUS)262
-5353 y(DOUBLE)f(PRECISION)e(IN\()k(NMARK,)e(NCOORD)g(\))p
-0 5516 1512 4 v 73 5570 a Fs(32)138 5602 y Fr(Lik)n(e)28
-b(an)n(y)g(F)-6 b(rameSet,)29 b(a)g(Plot)g(can)f(b)r(e)h(used)f(as)g(a)
-h(Mapping.)43 b(In)28 b(this)g(case)h(it)g(is)f(the)g(in)n(v)n(erse)h
-(transformation)h(whic)n(h)e(is)0 5693 y(used)d(when)h(plotting)g(\()p
-Fg(i.e.)e Fr(that)i(whic)n(h)f(transforms)j(b)r(et)n(w)n(een)d(the)g
-(curren)n(t)g(and)h(base)g(F)-6 b(rames\).)p eop end
-%%Page: 176 186
-TeXDict begin 176 185 bop 0 52 a FG(176)1463 b Fz(21)92
-b(PR)m(ODUCING)30 b(GRAPHICAL)h(OUTPUT)e(\(PLOTS\))262
-351 y Ft(STATUS)41 b(=)i(0)262 551 y(...)262 750 y(CALL)e(AST_MARK\()f
-(PLOT,)i(NMARK,)f(NCOORD,)g(NMARK,)g(IN,)h(TYPE,)g(STATUS)f(\))0
-972 y FG(Here,)35 b(NMARK)e(sp)s(eci\014es)g(ho)m(w)g(man)m(y)g(mark)m
-(ers)h(to)g(plot)f(and)g(NCOORD)g(sp)s(eci\014es)g(ho)m(w)g(man)m(y)g
-(co)s(ordi-)0 1085 y(nates)27 b(are)h(b)s(eing)e(supplied)g(for)h(eac)m
-(h)h(p)s(oin)m(t.)1549 1052 y Fv(33)1663 1085 y FG(The)f(arra)m(y)g(IN)
-g(supplies)f(the)h(co)s(ordinates)h(and)e(the)h(in)m(teger)0
-1198 y(TYPE)j(sp)s(eci\014es)g(whic)m(h)g(t)m(yp)s(e)h(of)f(mark)m(er)h
-(to)g(plot.)0 1477 y Fw(21.3)112 b(Plotting)37 b(Geo)s(desic)h(Curv)m
-(es)0 1688 y FG(There)25 b(is)g(no)g(Plot)h(routine)f(to)h(dra)m(w)f(a)
-g(straigh)m(t)i(line,)g(b)s(ecause)e(an)m(y)g(straigh)m(t)i(line)e(in)g
-(ph)m(ysical)h(co)s(ordinates)0 1801 y(can)38 b(p)s(oten)m(tially)h
-(turn)d(in)m(to)i(a)g(curv)m(e)f(in)h(graphical)g(co)s(ordinates.)62
-b(W)-8 b(e)38 b(therefore)g(start)g(b)m(y)f(considering)0
-1914 y(ho)m(w)24 b(to)h(dra)m(w)f(geo)s(desic)h(curv)m(es.)39
-b(These)24 b(are)g(curv)m(es)h(whic)m(h)f(trace)h(the)f(path)g(of)h
-(shortest)f(distance)h(b)s(et)m(w)m(een)0 2027 y(t)m(w)m(o)32
-b(p)s(oin)m(ts)e(in)g(ph)m(ysical)h(co)s(ordinates)g(and)f(are)h(the)f
-(basic)h(dra)m(wing)f(elemen)m(t)i(in)e(a)h(Plot.)0 2180
-y(In)h(man)m(y)h(instances,)h(the)f(geo)s(desic)h(will,)g(in)e(fact,)i
-(b)s(e)f(a)g(straigh)m(t)h(line,)f(but)g(this)f(dep)s(ends)f(on)i(the)f
-(Plot's)0 2292 y(curren)m(t)i(F)-8 b(rame.)55 b(If)34
-b(this)h(represen)m(ts)g(a)g(celestial)i(co)s(ordinate)e(system,)i(for)
-d(instance,)j(it)e(will)g(b)s(e)f(a)h(great)0 2405 y(circle)41
-b(\(corresp)s(onding)d(with)h(the)h(b)s(eha)m(viour)f(of)g(the)h(AST)p
-Fy(_)p FG(DIST)-8 b(ANCE)38 b(function)h(whic)m(h)g(de\014nes)f(the)0
-2518 y(metric)43 b(of)g(the)g(ph)m(ysical)h(co)s(ordinate)f(space\).)79
-b(The)43 b(geo)s(desic)h(will,)i(of)d(course,)j(b)s(e)c(transformed)g
-(in)m(to)0 2631 y(graphics)35 b(co)s(ordinates)h(b)s(efore)f(b)s(eing)f
-(plotted.)56 b(A)35 b(geo)s(desic)h(curv)m(e)g(is)f(plotted)h(using)e
-(AST)p Fy(_)p FG(CUR)-10 b(VE)34 b(as)0 2744 y(follo)m(ws:)262
-2953 y Ft(DOUBLE)41 b(PRECISION)e(START\()j(NCOORD)f(\),)h(FINISH\()f
-(NCOORD)g(\))262 3152 y(...)262 3352 y(CALL)g(AST_CURVE\()f(PLOT,)h
-(START,)h(FINISH,)e(STATUS)h(\))0 3574 y FG(Here,)d(ST)-8
-b(AR)g(T)35 b(and)h(FINISH)f(are)h(arra)m(ys)g(con)m(taining)i(the)e
-(starting)g(and)f(\014nishing)g(co)s(ordinates)h(of)g(the)0
-3687 y(curv)m(e.)60 b(The)36 b(AST)p Fy(_)p FG(OFFSET)f(and)i(AST)p
-Fy(_)p FG(DIST)-8 b(ANCE)35 b(routines)i(can)g(often)g(b)s(e)f(useful)g
-(for)g(computing)0 3800 y(these)31 b(\()p Fu(x)p FG(7.11\).)0
-3953 y(If)j(y)m(ou)h(need)f(to)h(dra)m(w)f(a)g(series)h(of)g(curv)m(es)
-f(end-to-end)h(\(when)e(dra)m(wing)h(a)h(con)m(tour)g(line,)h(for)e
-(example\),)0 4066 y(then)j(a)h(more)g(e\016cien)m(t)h(alternativ)m(e)i
-(is)c(to)i(use)e(AST)p Fy(_)p FG(POL)-8 b(YCUR)e(VE.)37
-b(This)g(has)g(the)h(same)g(e\013ect)h(as)f(a)0 4179
-y(sequence)c(of)f(calls)h(to)g(AST)p Fy(_)p FG(CUR)-10
-b(VE,)33 b(but)f(allo)m(ws)j(y)m(ou)e(to)h(supply)e(a)i(whole)f(set)h
-(of)g(p)s(oin)m(ts)f(at)h(the)f(same)0 4291 y(time.)41
-b(AST)p Fy(_)p FG(POL)-8 b(YLINE)29 b(then)i(joins)f(them,)g(in)g
-(sequence,)h(using)f(geo)s(desic)i(curv)m(es:)262 4501
-y Ft(INTEGER)40 b(NPOINT)262 4600 y(DOUBLE)h(PRECISION)e(COORDS\()i
-(NPOINT,)g(NCOORD)g(\))262 4800 y(...)262 4999 y(CALL)g
-(AST_POLYCURVE\()d(PLOT,)k(NPOINT,)e(NCOORD,)h(NPOINT,)g(COORDS,)g
-(STATUS)g(\))0 5221 y FG(Here,)35 b(NPOINT)e(sp)s(eci\014es)g(ho)m(w)h
-(man)m(y)g(p)s(oin)m(ts)f(are)h(to)g(b)s(e)f(joined)h(and)e(NCOORD)i
-(sp)s(eci\014es)f(ho)m(w)g(man)m(y)0 5334 y(co)s(ordinates)f(are)g(b)s
-(eing)f(supplied)g(for)g(eac)m(h)i(p)s(oin)m(t.)44 b(The)31
-b(arra)m(y)h(COORDS)f(supplies)f(the)i(co)s(ordinates)g(of)0
-5447 y(the)f(p)s(oin)m(ts)f(in)g(the)g(Plot's)i(ph)m(ysical)f(co)s
-(ordinate)g(system.)p 0 5516 1512 4 v 73 5570 a Fs(33)138
-5602 y Fr(Remem)n(b)r(er,)c(the)f(ph)n(ysical)h(co)r(ordinate)g(space)g
-(need)f(not)h(necessarily)h(b)r(e)e(2-dimensional,)i(ev)n(en)e(if)h
-(the)f(plotting)h(surface)0 5693 y(is.)p eop end
-%%Page: 177 187
-TeXDict begin 177 186 bop 0 52 a Fz(21.4)93 b(Plotting)31
-b(Curv)m(es)f(P)m(arallel)i(to)g(Axes)2096 b FG(177)0
-351 y Fw(21.4)112 b(Plotting)37 b(Curv)m(es)h(P)m(arallel)g(to)f(Axes)0
-578 y FG(As)25 b(there)h(is)f(no)g(Plot)h(routine)g(to)g(dra)m(w)f(a)g
-(\\straigh)m(t)i(line",)h(dra)m(wing)d(axes)h(and)e(grid)h(lines)h(to)g
-(represen)m(t)f(co-)0 691 y(ordinate)i(systems)f(requires)g(a)g(sligh)m
-(tly)i(di\013eren)m(t)e(approac)m(h.)40 b(The)26 b(problem)f(is)h(that)
-h(for)f(some)h(co)s(ordinate)0 804 y(systems,)f(these)g(grid)e(lines)i
-(will)f(not)g(b)s(e)g(geo)s(desics,)i(so)e(AST)p Fy(_)p
-FG(CUR)-10 b(VE)24 b(and)g(AST)p Fy(_)p FG(POL)-8 b(YCUR)e(VE)24
-b(\()p Fu(x)p FG(21.3\))0 917 y(cannot)33 b(easily)g(b)s(e)f(used)f
-(\(y)m(ou)i(w)m(ould)f(ha)m(v)m(e)h(to)g(resort)f(to)h(appro)m
-(ximating)g(grid)f(lines)h(b)m(y)f(man)m(y)g(small)h(el-)0
-1030 y(emen)m(ts\).)52 b(Lines)34 b(of)g(constan)m(t)h(celestial)h
-(latitude)f(pro)m(vide)f(an)g(example)g(of)g(this,)h(with)e(the)h
-(exception)h(of)0 1143 y(the)c(equator)g(whic)m(h)f(is)g(a)h(geo)s
-(desic.)0 1309 y(The)f(AST)p Fy(_)p FG(GRIDLINE)f(routine)i(allo)m(ws)h
-(these)e(curv)m(es)h(to)g(b)s(e)f(dra)m(wn,)g(as)g(follo)m(ws:)262
-1569 y Ft(INTEGER)40 b(AXIS)262 1668 y(DOUBLE)h(PRECISION)e(LENGTH)262
-1867 y(...)262 2067 y(CALL)i(AST_GRIDLINE\()e(PLOT,)i(AXIS,)h(START,)f
-(LENGTH,)f(STATUS)i(\))0 2340 y FG(Here,)36 b(AXIS)d(sp)s(eci\014es)h
-(whic)m(h)g(ph)m(ysical)h(co)s(ordinate)g(axis)f(w)m(e)h(wish)e(to)i
-(dra)m(w)e(parallel)j(to.)52 b(The)34 b(ST)-8 b(AR)g(T)0
-2453 y(arra)m(y)32 b(con)m(tains)h(the)f(co)s(ordinates)h(of)f(the)g
-(start)g(of)g(the)g(curv)m(e)h(and)e(LENGTH)h(sp)s(eci\014es)f(the)h
-(distance)h(to)0 2566 y(dra)m(w)d(along)h(the)g(axis)g(in)f(ph)m
-(ysical)h(co)s(ordinate)g(space.)0 2871 y Fw(21.5)112
-b(Plotting)37 b(Generalized)i(Curv)m(es)0 3098 y FG(W)-8
-b(e)29 b(ha)m(v)m(e)h(seen)e(ho)m(w)h(geo)s(desic)g(curv)m(es)g(and)e
-(grid)h(lines)h(can)f(b)s(e)g(dra)m(wn.)39 b(The)28 b(Plot)h(class)g
-(includes)f(another)0 3210 y(metho)s(d,)k(AST)p Fy(_)p
-FG(GENCUR)-10 b(VE,)31 b(whic)m(h)h(allo)m(ws)h(curv)m(es)g(of)f
-Fx(any)g FG(form)g(to)h(b)s(e)e(dra)m(wn.)45 b(The)31
-b(caller)i(supplies)0 3323 y(a)h(Mapping)g(whic)m(h)f(maps)h(o\013set)g
-(along)h(the)f(curv)m(e)1830 3290 y Fv(34)1939 3323 y
-FG(in)m(to)h(the)f(corresp)s(onding)e(p)s(osition)i(in)g(the)g(curren)m
-(t)0 3436 y(F)-8 b(rame)27 b(of)g(the)g(Plot.)40 b(AST)p
-Fy(_)p FG(GENCUR)-10 b(VE,)26 b(then)g(tak)m(es)i(care)f(of)f(Mapping)h
-(these)g(p)s(ositions)f(in)m(to)h(graphics)0 3549 y(co)s(ordinates.)43
-b(The)30 b(c)m(hoice)j(of)e(exactly)i(whic)m(h)d(p)s(ositions)h(along)h
-(the)f(curv)m(e)g(are)h(to)f(b)s(e)f(used)h(to)g(de\014ne)f(the)0
-3662 y(curv)m(e)23 b(is)g(also)h(made)f(b)m(y)g(AST)p
-Fy(_)p FG(GENCUR)-10 b(VE,)22 b(using)h(an)g(adaptiv)m(e)h(algorithm)g
-(whic)m(h)f(concen)m(trates)i(p)s(oin)m(ts)0 3775 y(around)k(areas)i
-(where)f(the)h(curv)m(e)g(is)f(b)s(ending)f(sharply)g(or)i(is)f(discon)
-m(tin)m(uous)h(in)f(graphics)g(co)s(ordinates.)0 3941
-y(The)c(In)m(traMap)g(class)h(ma)m(y)f(b)s(e)g(of)g(particular)g(use)g
-(in)g(this)g(con)m(text)i(since)e(it)h(allo)m(ws)g(y)m(ou)f(to)h(co)s
-(de)f(y)m(our)g(o)m(wn)0 4054 y(Mappings)k(to)h(do)g(an)m(y)f
-(transformation)h(y)m(ou)g(c)m(ho)s(ose.)0 4359 y Fw(21.6)112
-b(Clipping)0 4586 y FG(Lik)m(e)24 b(man)m(y)g(graphics)f(systems,)i(a)e
-(Plot)i(allo)m(ws)f(y)m(ou)g(to)g Fx(clip)g FG(the)f(graphics)g(y)m(ou)
-h(pro)s(duce.)37 b(This)23 b(means)g(that)0 4699 y(plotting)36
-b(is)e(restricted)i(to)f(certain)h(regions)f(of)g(the)g(plotting)g
-(surface)g(so)g(that)g(an)m(ything)g(dra)m(wn)f(outside)0
-4812 y(these)40 b(regions)g(will)g(not)g(app)s(ear.)69
-b(All)40 b(Plots)h(automatically)h(clip)e(at)h(the)f(edges)g(of)g(the)g
-(plotting)h(area)0 4925 y(sp)s(eci\014ed)36 b(when)g(the)h(Plot)g(is)g
-(created.)61 b(This)36 b(means)h(that)g(graphics)g(are)g(ultimately)h
-(restricted)g(to)f(the)0 5038 y(rectangular)31 b(region)g(of)g
-(plotting)g(space)g(to)g(whic)m(h)f(y)m(ou)h(ha)m(v)m(e)h(attac)m(hed)g
-(the)e(Plot.)0 5204 y(In)g(addition)i(to)g(this,)f(y)m(ou)h(ma)m(y)g
-(also)g(sp)s(ecify)f(lo)m(w)m(er)h(and)f(upp)s(er)e(limits)j(on)f(eac)m
-(h)h(axis)g(at)f(whic)m(h)g(clipping)0 5317 y(should)23
-b(o)s(ccur.)38 b(This)23 b(p)s(ermits)g(y)m(ou)h(to)g(further)f
-(restrict)h(the)g(plotting)h(region.)39 b(Moreo)m(v)m(er,)27
-b(y)m(ou)d(ma)m(y)h(attac)m(h)0 5430 y(these)33 b(clipping)f(limits)h
-(to)g Fx(any)g FG(of)f(the)g(F)-8 b(rames)33 b(in)f(the)h(Plot.)47
-b(This)31 b(allo)m(ws)j(y)m(ou)e(to)h(place)h(restrictions)f(on)p
-0 5516 1512 4 v 73 5570 a Fs(34)138 5602 y Fr(normalized)27
-b(so)f(that)f(the)g(start)g(of)h(the)f(curv)n(e)g(is)h(at)f(o\013set)h
-(0.0)g(and)f(the)g(end)g(of)h(the)f(curv)n(e)g(is)h(at)f(o\013set)h
-(1.0)g(-)f(o\013set)h(need)0 5693 y(not)g(b)r(e)f(linearly)h(related)h
-(to)f(distance.)p eop end
-%%Page: 178 188
-TeXDict begin 178 187 bop 0 52 a FG(178)1463 b Fz(21)92
-b(PR)m(ODUCING)30 b(GRAPHICAL)h(OUTPUT)e(\(PLOTS\))0
-351 y FG(where)e(plotting)h(will)g(tak)m(e)h(place)f(in)f(either)h(the)
-f(ph)m(ysical)h(co)s(ordinate)h(system,)f(the)f(graphical)i(co)s
-(ordinate)0 464 y(system,)i(or)f(in)g(an)m(y)h(other)g(co)s(ordinate)g
-(system)f(whic)m(h)g(is)h(describ)s(ed)e(b)m(y)h(a)h(F)-8
-b(rame)31 b(within)f(the)h(Plot.)0 625 y(F)-8 b(or)33
-b(example,)h(y)m(ou)f(could)g(plot)g(using)f(equatorial)i(co)s
-(ordinates)f(and)f(set)h(up)f(clipping)g(limits)h(in)f(galactic)0
-737 y(co)s(ordinates.)48 b(In)31 b(general,)j(y)m(ou)f(could)g(set)g
-(up)e(arbitrary)h(clipping)h(regions)f(b)m(y)h(adding)f(a)g(new)g(F)-8
-b(rame)34 b(to)0 850 y(a)k(Plot)h(\(in)f(whic)m(h)g(clipping)g(will)g
-(b)s(e)f(p)s(erformed\))g(and)g(in)m(ter-relating)j(this)e(to)h(the)f
-(other)g(F)-8 b(rames)38 b(in)g(a)0 963 y(suitable)31
-b(w)m(a)m(y)-8 b(.)0 1124 y(Clipping)30 b(limits)h(are)f(de\014ned)g
-(using)f(the)i(AST)p Fy(_)p FG(CLIP)e(routine,)h(as)h(follo)m(ws:)262
-1363 y Ft(INTEGER)40 b(IFRAME,)h(NAXES)262 1463 y(DOUBLE)g(PRECISION)e
-(LBND\()j(NAXES)g(\),)g(UBND\()g(NAXES)f(\))262 1662
-y(...)262 1861 y(CALL)g(AST_CLIP\()f(PLOT,)i(IFRAME,)f(LBND,)g(UBND,)h
-(STATUS)f(\))0 2114 y FG(Here,)35 b(the)f(IFRAME)g(v)-5
-b(alue)34 b(giv)m(es)h(the)f(index)g(of)f(the)h(F)-8
-b(rame)35 b(within)e(the)h(Plot)g(to)h(whic)m(h)e(clipping)h(is)g(to)0
-2227 y(b)s(e)28 b(applied,)g(while)h(LBND)f(and)g(UBND)h(giv)m(e)h(the)
-f(limits)f(on)h(eac)m(h)g(axis)g(of)f(the)g(selected)i(F)-8
-b(rame)29 b(\(NAXES)0 2340 y(is)h(the)h(n)m(um)m(b)s(er)e(of)i(axes)g
-(in)f(this)g(F)-8 b(rame\).)0 2501 y(Y)g(ou)31 b(can)g(remo)m(v)m(e)g
-(clipping)g(b)m(y)f(giving)h(a)g(v)-5 b(alue)31 b(of)f(AST)p
-Fy(__)p FG(NOFRAME)g(for)g(IFRAME.)0 2790 y Fw(21.7)112
-b(Using)38 b(a)g(Plot)f(as)h(a)g(Mapping)0 3009 y FG(All)e(Plots)g(are)
-g(also)h(Mappings)e(\(just)g(lik)m(e)i(the)f(F)-8 b(rameSets)36
-b(from)f(whic)m(h)h(they)f(are)h(deriv)m(ed\),)i(so)d(can)h(b)s(e)0
-3122 y(used)30 b(to)h(transform)e(co)s(ordinates.)0 3283
-y(Lik)m(e)g(F)-8 b(rameSets,)30 b(the)e(forw)m(ard)g(transformation)g
-(of)h(a)f(Plot)h(will)g(con)m(v)m(ert)g(co)s(ordinates)g(b)s(et)m(w)m
-(een)g(the)f(base)0 3396 y(and)33 b(curren)m(t)g(F)-8
-b(rames)34 b(\()p Fx(i.e.)f FG(b)s(et)m(w)m(een)h(graphical)h(and)d(ph)
-m(ysical)i(co)s(ordinates\).)51 b(This)33 b(w)m(ould)g(b)s(e)g(useful)f
-(if)0 3508 y(y)m(ou)26 b(w)m(ere)f(\(sa)m(y\))i(reading)f(a)f(cursor)g
-(p)s(osition)g(in)g(graphical)i(co)s(ordinates)f(and)e(needed)h(to)h
-(con)m(v)m(ert)h(this)e(in)m(to)0 3621 y(ph)m(ysical)31
-b(co)s(ordinates)g(for)f(displa)m(y)-8 b(.)0 3782 y(Con)m(v)m(ersely)g
-(,)36 b(a)e(Plot's)h(in)m(v)m(erse)f(transformation)g(con)m(v)m(erts)h
-(b)s(et)m(w)m(een)f(its)g(curren)m(t)g(and)f(base)g(F)-8
-b(rames)35 b(\()p Fx(i.e.)0 3895 y FG(from)h(ph)m(ysical)h(co)s
-(ordinates)g(to)g(graphical)h(co)s(ordinates\).)60 b(This)35
-b(transformation)i(is)g(applied)f(automat-)0 4008 y(ically)43
-b(whenev)m(er)f(plotting)g(op)s(erations)g(are)g(carried)g(out)g(b)m(y)
-f(AST)g(routines.)75 b(It)41 b(ma)m(y)i(also)f(b)s(e)f(useful)0
-4120 y(to)35 b(apply)f(it)h(directly)-8 b(,)37 b(ho)m(w)m(ev)m(er,)g
-(if)e(y)m(ou)f(wish)g(to)h(p)s(erform)e(additional)j(plotting)f(op)s
-(erations)g(\()p Fx(e.g.)f FG(those)0 4233 y(pro)m(vided)c(b)m(y)g(the)
-h(nativ)m(e)h(graphics)e(system\))h(at)g(p)s(ositions)f(sp)s(eci\014ed)
-g(in)g(ph)m(ysical)h(co)s(ordinates.)0 4394 y(There)e(is,)i(ho)m(w)m
-(ev)m(er.)42 b(one)30 b(imp)s(ortan)m(t)g(di\013erence)g(b)s(et)m(w)m
-(een)h(using)e(a)h(F)-8 b(rameSet)31 b(and)f(a)g(Plot)h(to)f(transform)
-0 4507 y(co)s(ordinates,)40 b(and)d(this)g(is)g(that)h(clipping)f(ma)m
-(y)h(b)s(e)f(applied)g(b)m(y)g(a)h(Plot)g(\(if)f(it)h(has)f(b)s(een)g
-(enabled)g(using)0 4620 y(AST)p Fy(_)p FG(CLIP|)p Fu(x)p
-FG(21.6\).)44 b(An)m(y)31 b(p)s(oin)m(t)g(whic)m(h)g(lies)h(within)f
-(the)h(clipp)s(ed)e(region)i(of)f(a)h(Plot)g(will,)g(when)e(trans-)0
-4733 y(formed,)39 b(yield)e(co)s(ordinates)i(with)e(the)g(v)-5
-b(alue)38 b(AST)p Fy(__)p FG(BAD.)f(If)g(y)m(ou)h(wish)e(to)j(a)m(v)m
-(oid)f(this)g(clipping,)h(y)m(ou)0 4845 y(should)30 b(extract)i(the)f
-(relev)-5 b(an)m(t)32 b(Mapping)f(from)f(the)i(Plot)f(\(using)g(AST)p
-Fy(_)p FG(GETMAPPING\))g(and)f(use)g(this,)0 4958 y(instead)h(of)f(the)
-h(Plot,)g(to)g(transform)f(the)h(co)s(ordinates.)0 5248
-y Fw(21.8)112 b(Using)38 b(a)g(Plot)f(as)h(a)g(F)-9 b(rame)0
-5467 y FG(Ev)m(ery)39 b(Plot)g(is)f(also)i(a)e(F)-8 b(rame,)42
-b(so)c(can)h(b)s(e)f(used)f(to)i(obtain)g(the)g(v)-5
-b(alues)38 b(of)h(F)-8 b(rame)39 b(attributes)g(suc)m(h)f(as)0
-5580 y(a)k(Title,)j(axis)d(Lab)s(els,)i(axis)e(Units,)j
-Fx(etc.,)e FG(whic)m(h)e(are)h(t)m(ypically)i(used)c(when)h(displa)m
-(ying)g(data)i(and/or)0 5693 y(co)s(ordinates.)k(These)32
-b(attributes)h(are,)h(as)e(for)h(an)m(y)f(F)-8 b(rameSet,)35
-b(deriv)m(ed)d(from)g(the)g(curren)m(t)g(F)-8 b(rame)34
-b(of)e(the)p eop end
-%%Page: 179 189
-TeXDict begin 179 188 bop 0 52 a Fz(21.9)93 b(Regions)31
-b(of)f(V)-8 b(alid)32 b(Ph)m(ysical)f(Co)s(ordinates)1871
-b FG(179)0 351 y(Plot)29 b(\()p Fu(x)p FG(13.8\).)43
-b(They)28 b(are)h(also)g(used)f(automatically)j(when)c(using)h(the)h
-(Plot)g(to)g(plot)g(co)s(ordinate)g(axes)g(and)0 464
-y(co)s(ordinate)i(grids)f(\()p Fx(e.g.)g FG(for)g(lab)s(elling)i(them|)
-p Fu(x)p FG(21.12\).)0 629 y(Because)47 b(the)f(curren)m(t)g(F)-8
-b(rame)47 b(of)e(a)i(Plot)f(represen)m(ts)g(ph)m(ysical)g(co)s
-(ordinates,)51 b(an)m(y)46 b(F)-8 b(rame)47 b(op)s(eration)0
-742 y(applied)42 b(to)h(the)g(Plot)g(will)f(e\013ectiv)m(ely)k(b)s(e)41
-b(w)m(orking)i(in)f(this)g(co)s(ordinate)h(system.)77
-b(F)-8 b(or)43 b(example,)j(the)0 855 y(AST)p Fy(_)p
-FG(DIST)-8 b(ANCE)37 b(and)h(AST)p Fy(_)p FG(OFFSET)e(routines)i(will)h
-(compute)f(distances)h(and)f(o\013sets)h(in)f(ph)m(ysical)0
-968 y(co)s(ordinate)d(space,)h(and)e(AST)p Fy(_)p FG(F)m(ORMA)-8
-b(T)34 b(will)h(format)g(ph)m(ysical)g(co)s(ordinates)g(in)f(an)g
-(appropriate)g(w)m(a)m(y)0 1081 y(for)c(displa)m(y)-8
-b(.)0 1381 y Fw(21.9)112 b(Regions)38 b(of)g(V)-9 b(alid)37
-b(Ph)m(ysical)h(Co)s(ordinates)0 1606 y FG(When)23 b(p)s(oin)m(ts)g(in)
-g(ph)m(ysical)h(co)s(ordinate)g(space)g(are)f(transformed)g(b)m(y)g(a)g
-(Plot)h(in)m(to)h(graphics)e(co)s(ordinates)h(for)0 1719
-y(plotting,)30 b(they)f(ma)m(y)f(not)h(alw)m(a)m(ys)h(yield)f(v)-5
-b(alid)28 b(co)s(ordinates,)i(irresp)s(ectiv)m(e)f(of)g(an)m(y)f
-(clipping)h(b)s(eing)f(applied)0 1831 y(\()p Fu(x)p FG(21.6\).)60
-b(T)-8 b(o)37 b(indicate)g(this,)g(the)f(resulting)g(co)s(ordinate)h(v)
--5 b(alues)36 b(will)h(b)s(e)e(set)h(to)h(the)f(v)-5
-b(alue)37 b(AST)p Fy(__)p FG(BAD)0 1944 y(\()p Fu(x)p
-FG(5.8\).)0 2109 y(There)g(are)h(a)g(n)m(um)m(b)s(er)f(of)h(reasons)f
-(wh)m(y)h(this)f(ma)m(y)i(o)s(ccur,)g(but)e(t)m(ypically)j(it)e(will)g
-(b)s(e)f(b)s(ecause)h(ph)m(ysical)0 2222 y(co)s(ordinates)22
-b(only)g(map)f(on)g(to)i(a)f(subset)f(of)g(the)h(graphics)g(co)s
-(ordinate)g(space.)38 b(This)21 b(situation)h(is)g(commonly)0
-2335 y(encoun)m(tered)j(with)f(all-sky)i(pro)5 b(jections)25
-b(where,)h(t)m(ypically)-8 b(,)28 b(the)d(celestial)i(sphere)d(app)s
-(ears,)h(when)e(plotted,)0 2448 y(as)37 b(a)h(distorted)f(shap)s(e)f
-(\()p Fx(e.g.)h FG(an)g(ellipse\))h(whic)m(h)f(do)s(es)g(not)g(en)m
-(tirely)h(\014ll)f(the)g(graphics)g(space.)62 b(In)36
-b(some)0 2561 y(cases,)c(there)e(ma)m(y)h(ev)m(en)g(b)s(e)f(m)m
-(ultiple)h(regions)g(of)f(v)-5 b(alid)31 b(and)f(in)m(v)-5
-b(alid)31 b(ph)m(ysical)g(co)s(ordinates.)0 2726 y(When)43
-b(plotting)h(is)e(p)s(erformed)g Fx(via)h FG(a)g(Plot,)k(graphical)d
-(output)e(will)h(only)g(app)s(ear)f(in)h(the)g(regions)g(of)0
-2839 y(v)-5 b(alid)28 b(ph)m(ysical)g(co)s(ordinates.)41
-b(Nothing)28 b(will)g(app)s(ear)f(where)g(in)m(v)-5 b(alid)28
-b(co)s(ordinates)h(o)s(ccur.)39 b(Suc)m(h)27 b(output)g(is)0
-2951 y(e\013ectiv)m(ely)36 b(clipp)s(ed.)48 b(If)33 b(y)m(ou)g(wish)f
-(to)i(plot)g(in)e(these)i(areas,)g(y)m(ou)g(m)m(ust)f(c)m(hange)h(co)s
-(ordinate)g(system)f(and)0 3064 y(use,)d(sa)m(y)-8 b(,)32
-b(graphical)f(co)s(ordinates)g(to)g(address)f(the)h(plotting)g(surface)
-f(directly)-8 b(.)0 3365 y Fw(21.10)112 b(Plotting)37
-b(Borders)0 3589 y FG(The)30 b(AST)p Fy(_)p FG(BORDER)g(routine)h(is)f
-(pro)m(vided)h(to)g(dra)m(w)f(a)h(\(line\))h(b)s(order)d(around)h(y)m
-(our)g(graphical)i(output.)0 3702 y(With)g(most)f(graphics)g(systems,)h
-(this)f(w)m(ould)g(simply)g(b)s(e)g(a)g(rectangular)h(b)s(o)m(x)f
-(around)g(the)g(plotting)h(area.)0 3815 y(With)c(a)h(Plot,)g(ho)m(w)m
-(ev)m(er,)i(this)d(b)s(oundary)d(follo)m(ws)30 b(the)e(edge)h(of)f(eac)
-m(h)h(region)g(con)m(taining)g(v)-5 b(alid,)29 b(unclipp)s(ed)0
-3928 y(ph)m(ysical)i(co)s(ordinates)g(\()p Fu(x)p FG(21.9\).)0
-4093 y(This)i(means,)i(for)e(example,)j(that)e(if)g(y)m(ou)g(w)m(ere)g
-(plotting)h(an)e(all-sky)i(pro)5 b(jection,)35 b(this)f(b)s(oundary)e
-(w)m(ould)0 4206 y(outline)41 b(the)f(p)s(erimeter)f(of)h(the)h
-(celestial)h(sphere)d(when)g(pro)5 b(jected)40 b(on)g(to)h(y)m(our)f
-(plotting)h(surface.)69 b(Of)0 4319 y(course,)49 b(if)c(there)g(is)g
-(no)f(clipping)h(and)f(all)i(ph)m(ysical)g(co)s(ordinates)f(are)g(v)-5
-b(alid,)49 b(then)c(y)m(ou)g(will)g(get)h(the)0 4432
-y(traditional)34 b(rectangular)g(b)s(o)m(x.)49 b(AST)p
-Fy(_)p FG(BORDER)32 b(requires)h(only)g(a)g(p)s(oin)m(ter)g(to)h(the)f
-(Plot)h(and)f(the)g(usual)0 4545 y(ST)-8 b(A)g(TUS)30
-b(argumen)m(t:)262 4800 y Ft(LOGICAL)40 b(HOLES)262 4999
-y(...)262 5198 y(HOLES)h(=)i(AST_BORDER\()c(PLOT,)j(STATUS)f(\))0
-5467 y FG(It)36 b(returns)e(a)i(logical)i(v)-5 b(alue)36
-b(to)g(indicate)h(if)e(an)m(y)h(in)m(v)-5 b(alid)36 b(or)g(clipp)s(ed)e
-(ph)m(ysical)j(co)s(ordinates)f(w)m(ere)g(found)0 5580
-y(within)24 b(the)h(plotting)g(area.)40 b(If)24 b(they)h(w)m(ere,)h(it)
-f(will)g(dra)m(w)f(around)f(the)i(v)-5 b(alid)25 b(unclipp)s(ed)e
-(regions)i(and)f(return)0 5693 y(.TR)m(UE..)41 b(Otherwise,)31
-b(it)f(will)h(dra)m(w)f(a)h(simple)f(rectangular)i(b)s(order)c(and)i
-(return)g(.F)-10 b(ALSE..)p eop end
-%%Page: 180 190
-TeXDict begin 180 189 bop 0 52 a FG(180)1463 b Fz(21)92
-b(PR)m(ODUCING)30 b(GRAPHICAL)h(OUTPUT)e(\(PLOTS\))0
-351 y Fw(21.11)112 b(Plotting)37 b(T)-9 b(ext)0 569 y
-FG(Using)33 b(a)f(Plot)i(to)f(dra)m(w)f(text)i(in)m(v)m(olv)m(es)g
-(supplying)d(a)i(string)f(of)h(text)h(to)f(b)s(e)f(displa)m(y)m(ed)h
-(and)e(a)i(p)s(osition)g(in)0 681 y(ph)m(ysical)39 b(co)s(ordinates)g
-(where)f(the)g(text)h(is)g(to)g(app)s(ear.)63 b(The)38
-b(p)s(osition)h(is)f(transformed)f(in)m(to)j(graphical)0
-794 y(co)s(ordinates)45 b(to)h(determine)e(where)g(the)h(text)h(should)
-d(app)s(ear)h(on)h(the)g(plotting)g(surface.)84 b(Y)-8
-b(ou)45 b(m)m(ust)0 907 y(also)37 b(pro)m(vide)g(a)g(2-elemen)m(t)i(UP)
-d(v)m(ector)i(whic)m(h)e(giv)m(es)i(the)f(up)m(w)m(ard)e(direction)j
-(of)e(the)h(text)g(in)g(graphical)0 1020 y(co)s(ordinates.)k(This)30
-b(allo)m(ws)i(text)f(to)g(b)s(e)f(dra)m(wn)f(at)j(an)m(y)e(angle.)0
-1179 y(Plotting)i(is)e(p)s(erformed)f(b)m(y)h(AST)p Fy(_)p
-FG(TEXT,)f(for)h(example:)262 1411 y Ft(CHARACTER)39
-b(*)44 b(\()f(20)f(\))i(TEXT)262 1511 y(DOUBLE)d(PRECISION)e(POS\()j
-(NCOORD)g(\))262 1610 y(REAL)f(UP\()i(2)g(\))262 1710
-y(DATA)e(UP)i(/)g(0.0,)f(1.0)h(/)262 1909 y(...)262 2108
-y(CALL)e(AST_TEXT\()f(PLOT,)i(TEXT,)f(POS,)h(UP,)h('TL',)e(STATUS)g(\))
-0 2354 y FG(Here,)33 b(TEXT)f(con)m(tains)h(the)f(string)h(to)f(b)s(e)g
-(dra)m(wn,)g(POS)f(is)h(an)g(arra)m(y)h(of)f(ph)m(ysical)h(co)s
-(ordinates)g(and)e(UP)0 2467 y(sp)s(eci\014es)g(the)h(up)m(w)m(ard)f(v)
-m(ector.)46 b(In)31 b(this)h(case,)h(the)f(text)h(will)f(b)s(e)f(dra)m
-(wn)g(horizon)m(tally)-8 b(.)47 b(The)31 b(p)s(en)m(ultimate)0
-2580 y(argumen)m(t)42 b(sp)s(eci\014es)f(the)h(text)g(justi\014cation,)
-j(here)d(indicating)g(that)g(the)g(top)g(left)g(corner)f(of)h(the)f
-(text)0 2693 y(should)29 b(app)s(ear)h(at)h(the)g(p)s(osition)f(giv)m
-(en.)0 2851 y(F)-8 b(urther)38 b(con)m(trol)i(o)m(v)m(er)f(the)g(app)s
-(earance)f(of)g(the)h(text)g(is)f(p)s(ossible)g(b)m(y)g(setting)i(v)-5
-b(alues)38 b(for)g(v)-5 b(arious)39 b(Plot)0 2964 y(attributes,)k(for)c
-(example)i(Colour,)h(F)-8 b(on)m(t)41 b(and)e(Size.)69
-b(Sub-strings)38 b(within)h(the)h(displa)m(y)m(ed)g(text)h(can)f(b)s(e)
-0 3077 y(giv)m(en)24 b(di\013eren)m(t)f(app)s(earances,)i(or)e(turned)f
-(in)m(to)i(sup)s(er-scripts)d(or)i(sub-scripts,)h(b)m(y)f(the)g
-(inclusion)g(of)g(escap)s(e)0 3190 y(sequences)31 b(\(see)g(section)g
-Fu(x)p FG(21.13\))j(within)29 b(the)i(supplied)e(text)i(string.)0
-3477 y Fw(21.12)112 b(Plotting)37 b(a)h(Grid)0 3694 y
-FG(The)c(most)g(comprehensiv)m(e)h(plotting)g(routine)f(a)m(v)-5
-b(ailable)37 b(is)d(AST)p Fy(_)p FG(GRID,)g(whic)m(h)g(can)g(b)s(e)g
-(used)f(to)i(dra)m(w)0 3807 y(lab)s(elled)f(co)s(ordinate)g(axes)g
-(and,)f(optionally)-8 b(,)36 b(to)e(o)m(v)m(erla)m(y)i(co)s(ordinate)e
-(grids)f(on)g(the)g(plotting)i(area)f(\(Fig-)0 3920 y(ure)41
-b(8\).)73 b(The)41 b(routine)g(is)g(straigh)m(tforw)m(ard)h(to)g(use,)i
-(simply)c(requiring)h(a)g(p)s(oin)m(ter)g(to)h(the)g(Plot)g(and)e(a)0
-4033 y(ST)-8 b(A)g(TUS)30 b(argumen)m(t:)262 4266 y Ft(CALL)41
-b(AST_GRID\()f(PLOT,)i(STATUS)f(\))0 4511 y FG(It)31
-b(will)f(dra)m(w)g(b)s(oth)g(linear)h(and)f(curvilinear)h(axes)g(and)f
-(grids,)g(as)h(required)e(b)m(y)i(the)f(particular)h(Plot.)42
-b(The)0 4624 y(app)s(earance)f(of)f(the)h(output)f(can)g(b)s(e)g(mo)s
-(di\014ed)f(in)h(a)h(wide)f(v)-5 b(ariet)m(y)42 b(of)e(w)m(a)m(ys)i(b)m
-(y)e(setting)h(v)-5 b(arious)41 b(Plot)0 4737 y(attributes.)63
-b(The)37 b(Lab)s(el)g(attributes)h(of)g(the)f(curren)m(t)h(F)-8
-b(rame)38 b(are)g(displa)m(y)m(ed)g(as)g(the)f(axis)h(lab)s(els)g(in)f
-(the)0 4850 y(grid,)42 b(and)d(the)h(Title)h(attribute)f(as)g(the)g
-(plot)g(title.)71 b(Sub-strings)38 b(within)i(these)g(strings)f(can)h
-(b)s(e)f(giv)m(en)0 4963 y(di\013eren)m(t)j(app)s(earances,)j(or)d
-(turned)f(in)m(to)i(sup)s(er-scripts)d(or)i(sub-scripts,)i(b)m(y)e(the)
-g(inclusion)g(of)g(escap)s(e)0 5076 y(sequences)31 b(\(see)g(section)g
-Fu(x)p FG(21.13\))j(within)29 b(the)i(Lab)s(el)f(attributes.)0
-5363 y Fw(21.13)112 b(Con)m(trolling)38 b(the)f(App)s(earance)i(of)f
-(Sub-strings)0 5580 y FG(Normally)-8 b(,)33 b(eac)m(h)f(string)f(of)g
-(c)m(haracters)h(displa)m(y)m(ed)g(using)e(a)h(Plot)h(will)f(b)s(e)g
-(plotted)g(so)h(that)f(all)h(c)m(haracters)0 5693 y(in)40
-b(the)g(string)f(ha)m(v)m(e)i(the)f(same)h(fon)m(t)f(size,)j(colour,)g
-Fx(etc.,)f FG(sp)s(eci\014ed)d(b)m(y)h(the)g(appropriate)g(attributes)g
-(of)p eop end
-%%Page: 181 191
-TeXDict begin 181 190 bop 0 52 a Fz(21.14)93 b(Pro)s(ducing)29
-b(Logarithmic)j(Axes)2203 b FG(181)0 351 y(the)41 b(Plot.)75
-b(Ho)m(w)m(ev)m(er,)46 b(it)c(is)f(p)s(ossible)g(to)h(include)f
-Fx(esc)-5 b(ap)g(e)44 b(se)-5 b(quenc)g(es)48 b FG(within)41
-b(the)h(text)g(to)g(mo)s(dify)e(the)0 464 y(app)s(earance)29
-b(of)f(sub-strings.)39 b(Escap)s(e)28 b(sequences)h(can)g(b)s(e)f(used)
-f(to)i(c)m(hange,)h(colour,)g(fon)m(t,)g(size,)f(width,)g(to)0
-577 y(in)m(tro)s(duce)k(extra)h(horizon)m(tal)h(space)e(b)s(et)m(w)m
-(een)h(c)m(haracters,)h(and)e(to)h(c)m(hange)g(the)f(base)g(line)h(of)f
-(c)m(haracters)0 690 y(\(th)m(us)22 b(allo)m(wing)h(sup)s(er-scripts)d
-(and)h(sub-scripts)g(to)h(b)s(e)f(created\).)39 b(See)22
-b(the)g(en)m(try)g(for)f(the)h(Escap)s(e)g(attribute)0
-803 y(in)30 b(App)s(endix)f(C)h(for)g(details.)0 968
-y(As)j(an)f(example,)i(if)f(the)g(c)m(haracter)h(string)e(\\)p
-Fy(10\\\045^50)p FG(\045s70+0.5+")h(is)g(plotted,)h(it)f(will)g(b)s(e)f
-(displa)m(y)m(ed)h(as)0 1081 y(\\10)135 1048 y Fv(0)p
-Fi(:)p Fv(5)231 1081 y FG(")f(-)h(that)f(is,)h(with)f(a)g(sup)s
-(er-scripted)f(exp)s(onen)m(t.)46 b(The)32 b(exp)s(onen)m(t)g(text)h
-(will)g(b)s(e)e(70\045)i(of)f(the)g(size)h(of)0 1194
-y(normal)d(text)g(\(as)g(determined)f(b)m(y)h(the)g(Size)g
-(attribute\),)h(and)e(its)h(baseline)g(will)g(b)s(e)e(raised)i(b)m(y)f
-(50\045)i(of)e(the)0 1307 y(heigh)m(t)i(of)g(a)g(normal)f(c)m
-(haracter.)0 1472 y(Suc)m(h)c(escap)s(e)h(sequences)f(can)h(b)s(e)f
-(used)f(in)i(the)f(strings)g(assigned)h(to)g(textual)h(attributes)f(of)
-g(the)f(Plot)h(\(suc)m(h)0 1585 y(as)k(the)f(axis)h(Lab)s(els\),)g(and)
-f(ma)m(y)g(also)i(b)s(e)e(included)f(in)h(strings)g(plotted)i(using)d
-(AST)p Fy(_)p FG(TEXT.)0 1750 y(The)40 b(F)-8 b(ormat)42
-b(attribute)f(for)f(the)h(SkyAxis)f(class)h(includes)f(the)h(\\g")g
-(option)g(whic)m(h)f(will)h(cause)g(escap)s(e)0 1863
-y(sequences)30 b(to)g(b)s(e)f(included)g(when)g(formatting)h(celestial)
-i(p)s(ositions)e(so)g(that)g(sup)s(er-script)e(c)m(haracters)j(are)0
-1976 y(used)f(as)g(delimiters)h(for)f(the)h(v)-5 b(arious)30
-b(\014elds)g(\(a)h(sup)s(er-script)e(\\h")i(for)f(hours,)f(\\m")i(for)g
-(min)m(utes,)f Fx(etc)5 b FG(\).)0 2141 y(Note,)46 b(the)c(facilit)m(y)
-i(for)e(in)m(terpreting)g(escap)s(e)h(sequences)f(is)g(only)f(a)m(v)-5
-b(ailable)45 b(if)c(the)h(graphics)g(wrapp)s(er)0 2254
-y(functions)24 b(whic)m(h)f(pro)m(vide)h(the)g(in)m(terface)i(to)f(the)
-f(underlying)f(graphics)h(system)g(supp)s(ort)e(all)j(the)f(functions)0
-2367 y(included)k(in)h(the)h Fy(grf.h)d FG(\014le)i(as)h(of)f(AST)g
-(V3.2.)41 b(Older)29 b(grf)g(in)m(terfaces)h(ma)m(y)g(need)f(to)h(b)s
-(e)e(extended)h(b)m(y)g(the)0 2480 y(addition)i(of)f(new)g(functions)g
-(b)s(efore)g(escap)s(e)h(sequences)f(can)h(b)s(e)f(in)m(terpretted.)0
-2781 y Fw(21.14)112 b(Pro)s(ducing)38 b(Logarithmic)g(Axes)0
-3006 y FG(In)23 b(certain)j(situations)e(y)m(ou)h(ma)m(y)g(wish)e(for)h
-(one)h(or)f(b)s(oth)f(of)i(the)f(plotted)h(axes)g(to)g(b)s(e)e(displa)m
-(y)m(ed)i(logarithmi-)0 3119 y(cally)30 b(rather)e(than)g(linearly)-8
-b(.)42 b(F)-8 b(or)29 b(instance,)h(y)m(ou)e(ma)m(y)i(wish)d(to)j(do)e
-(this)g(when)g(using)g(a)h(Plot)g(to)g(represen)m(t)0
-3232 y(a)j(sp)s(ectrum)e(of,)j(sa)m(y)-8 b(,)33 b(\015ux)d(against)j
-(frequency)-8 b(.)44 b(In)31 b(this)g(case,)i(y)m(ou)f(can)g(cause)g
-(the)g(frequency)f(axis)h(to)g(b)s(e)0 3345 y(dra)m(wn)27
-b(logarithmically)j(simply)e(b)m(y)f(setting)i(the)f(b)s(o)s(olean)g
-(LogPlot)h(attribute)g(for)e(the)h(frequency)f(axis)i(to)0
-3458 y(a)i(non-zero)g(v)-5 b(alue.)41 b(This)29 b(causes)i(sev)m(eral)h
-(things)e(to)h(happ)s(en:)111 3727 y(1.)46 b(The)21 b(Mapping)f(b)s(et)
-m(w)m(een)i(the)e(base)h(F)-8 b(rame)22 b(of)f(the)g(Plot)g(\(whic)m(h)
-g(represen)m(ts)g(the)g(underlying)e(graphics)227 3840
-y(w)m(orld)26 b(co)s(ordinate)h(system\))g(and)f(the)g(base)g(F)-8
-b(rame)27 b(of)g(the)f(F)-8 b(rameSet)28 b(supplied)c(when)i(the)g
-(Plot)h(w)m(as)227 3953 y(created,)32 b(is)e(mo)s(di\014ed.)39
-b(By)30 b(default,)h(this)f(mapping)f(is)h(linear)g(on)g(b)s(oth)g
-(axes,)h(but)e(setting)i(LogPlot)227 4066 y(non-zero)37
-b(for)e(an)h(axis)g(causes)g(the)g(Mapping)g(to)h(b)s(e)e(mo)s
-(di\014ed)f(so)j(that)f(it)g(is)g(logarithmic)i(on)d(the)227
-4179 y(sp)s(eci\014ed)26 b(axis.)39 b(This)26 b(is)g(only)g(p)s
-(ossible)f(if)h(the)h(displa)m(y)m(ed)f(section)i(of)e(the)g(axis)g(do)
-s(es)g(not)g(include)g(the)227 4292 y(v)-5 b(alue)31
-b(zero)g(\(otherwise)g(the)g(attempt)g(to)g(set)g(a)f(new)g(v)-5
-b(alue)31 b(for)f(LogPlot)i(is)e(ignored,and)g(it)h(retains)227
-4405 y(its)g(default)g(v)-5 b(alue)30 b(of)h(zero\).)111
-4597 y(2.)46 b(The)38 b(ma)5 b(jor)38 b(tic)m(k)h(marks)f(dra)m(wn)f
-(as)h(part)g(of)g(the)h(annotated)f(co)s(ordinate)h(grid)f(are)h
-(spaced)f(loga-)227 4710 y(rithmically)d(rather)f(than)g(linearly)-8
-b(.)53 b(That)34 b(is,)i(ma)5 b(jor)34 b(axis)h(v)-5
-b(alues)34 b(are)h(c)m(hosen)f(so)h(that)g(there)f(is)g(a)227
-4823 y(constan)m(t)d(ratio)g(b)s(et)m(w)m(een)f(adjacen)m(t)g(tic)m(k)h
-(mark)e(v)-5 b(alues.)41 b(This)29 b(ratio)h(is)g(constrained)g(to)g(b)
-s(e)f(a)g(p)s(o)m(w)m(er)227 4936 y(of)g(ten.)40 b(The)28
-b(minor)g(tic)m(k)i(marks)e(are)g(dra)m(wn)g(at)h(linearly)g
-(distributed)e(p)s(oin)m(ts)i(b)s(et)m(w)m(een)g(the)f(adjoin-)227
-5049 y(ing)f(ma)5 b(jor)26 b(tic)m(k)i(v)-5 b(alues.)39
-b(Th)m(us)25 b(if)i(a)f(pair)g(of)h(adjacen)m(t)g(ma)5
-b(jor)26 b(tic)m(k)i(v)-5 b(alues)26 b(are)h(dra)m(wn)e(at)i(axis)g(v)
--5 b(alues)227 5162 y(10.0)39 b(and)d(100.0,)41 b(minor)36
-b(tic)m(ks)i(will)f(b)s(e)f(placed)i(at)f(20.0,)j(30.0,)h(40.0,)f
-(50.0,)g(60.0,)g(70.0,)h(80.0)d(and)227 5275 y(90.0)32
-b(\(note)g(only)e(8)h(minor)f(tic)m(k)h(marks)f(are)h(dra)m(wn\).)111
-5467 y(3.)46 b(If)25 b(p)s(ossible,)i(n)m(umerical)f(axis)g(lab)s(els)g
-(are)g(sho)m(wn)f(as)h(p)s(o)m(w)m(ers)f(of)h(ten.)39
-b(This)25 b(dep)s(ends)f(on)h(the)h(facilities)227 5580
-y(implemen)m(ted)38 b(b)m(y)f(the)g(graphics)g(wrapp)s(er)f(functions)g
-(\(see)i(the)g(next)f(section\).)63 b(Extra)37 b(functions)227
-5693 y(w)m(ere)32 b(in)m(tro)s(duced)g(to)g(this)g(set)g(of)g(wrapp)s
-(er)e(functions)h(at)h(AST)f(V3.2)i(whic)m(h)f(enable)g(sup)s
-(er-scripts)p eop end
-%%Page: 182 192
-TeXDict begin 182 191 bop 0 52 a FG(182)1463 b Fz(21)92
-b(PR)m(ODUCING)30 b(GRAPHICAL)h(OUTPUT)e(\(PLOTS\))227
-351 y FG(and)42 b(sub-scripts)f(to)h(b)s(e)g(pro)s(duced.)74
-b(Some)42 b(older)g(wrapp)s(ers)e(ma)m(y)i(not)h(y)m(et)g(ha)m(v)m(e)g
-(implemen)m(ted)227 464 y(these)28 b(functiosn)f(and)f(this)h(will)h
-(result)f(in)f(axis)i(lab)s(els)f(b)s(eing)g(dra)m(wn)f(in)h(usual)g
-(scien)m(ti\014c)h(or)f(decimal)227 577 y(notation.)0
-839 y(Whilst)35 b(the)g(LogPlot)i(attribute)e(can)g(b)s(e)g(used)f(to)h
-(con)m(trol)i(all)e(three)g(of)g(the)g(ab)s(o)m(v)m(e)h(facilities,)j
-(it)c(is)g(p)s(os-)0 952 y(sible)h(to)h(con)m(trol)h(them)e
-(individually)g(as)g(w)m(ell.)59 b(The)35 b(LogTic)m(ks)j(and)d(LogLab)
-s(el)i(attributes)g(con)m(trol)g(the)0 1065 y(b)s(eha)m(viour)d(sp)s
-(eci\014ed)f(in)g(items)i(2)f(and)f(3)i(ab)s(o)m(v)m(e,)h(but)d(the)h
-(default)g(v)-5 b(alues)35 b(for)e(these)i(attributes)f(dep)s(end)0
-1178 y(on)f(the)h(setting)h(of)f(the)g(LogPlot)h(attribute.)51
-b(This)33 b(means)g(that)h(setting)h(LogPlot)g(non-zero)g(will)e
-(swicth)0 1291 y(all)39 b(three)g(facilites)i(on,)f(so)f(long)g(as)g
-(zero)g(v)-5 b(alues)39 b(ha)m(v)m(e)h(not)f(b)s(een)f(assigned)g
-(explicitly)i(to)g(LogTic)m(ks)f(or)0 1404 y(LogLab)s(el.)0
-1697 y Fw(21.15)112 b(Cho)s(osing)39 b(a)f(Graphics)g(P)m(ac)m(k)-6
-b(age)0 1919 y FG(The)34 b(Plot)i(class)g(itself)g(do)s(es)f(not)g
-(include)g(an)m(y)g(co)s(de)g(for)g(actually)h(dra)m(wing)f(on)g(a)g
-(graphics)g(device.)56 b(In-)0 2032 y(stead,)32 b(it)g(requires)f(a)g
-(set)h(of)f(functions)g(to)h(b)s(e)f(pro)m(vided)f(whic)m(h)h(it)h
-(uses)f(to)h(dra)m(w)e(the)i(required)e(graphics.)0 2144
-y(These)39 b(include)g(functions)f(to)i(dra)m(w)e(a)i(straigh)m(t)g
-(line,)i(dra)m(w)c(a)i(text)g(string,)h Fx(etc)p FG(.)67
-b(Y)-8 b(ou)39 b(ma)m(y)h(c)m(ho)s(ose)g(to)0 2257 y(pro)m(vide)h
-(functions)f(from)g(y)m(our)g(fa)m(v)m(orite)j(graphics)e(pac)m(k)-5
-b(age,)45 b(or)40 b(y)m(ou)h(can)g(ev)m(en)g(write)g(y)m(our)g(o)m(wn!)
-71 b(T)-8 b(o)0 2370 y(accomo)s(date)43 b(v)-5 b(ariations)42
-b(in)f(the)g(calling)h(in)m(terfaces)h(of)e(di\013eren)m(t)g(graphics)g
-(pac)m(k)-5 b(ages,)46 b(AST)40 b(de\014nes)g(a)0 2483
-y(standard)g(in)m(terface)i(for)f(these)g(routines.)72
-b(If)40 b(this)h(in)m(terface)h(di\013ers)f(from)f(the)h(in)m(terface)h
-(pro)m(vided)f(b)m(y)0 2596 y(y)m(our)27 b(graphics)g(pac)m(k)-5
-b(age)29 b(\(whic)m(h)f(in)e(general)j(it)e(will\),)i(then)e(y)m(ou)g
-(m)m(ust)g(write)h(a)f(set)h(of)f Fx(wr)-5 b(app)g(er)33
-b(functions)p FG(,)0 2709 y(whic)m(h)e(pro)m(vide)g(the)g(in)m(terface)
-h(exp)s(ected)f(b)m(y)g(AST)f(but)g(whic)m(h)h(then)g(call)h(functions)
-e(from)h(y)m(our)f(graphics)0 2822 y(pac)m(k)-5 b(age)36
-b(to)e(pro)m(vide)g(the)g(required)f(functionalit)m(y)-8
-b(.)52 b(AST)33 b(comes)i(with)e(wrapp)s(er)f(functions)h(suitable)i
-(for)0 2935 y(the)c(PGPLOT)e(graphics)h(pac)m(k)-5 b(age)33
-b(\(see)e(SUN/15\).)0 3098 y(There)f(are)h(t)m(w)m(o)g(w)m(a)m(ys)h(of)
-e(indicating)h(whic)m(h)f(wrapp)s(er)f(functions)h(are)h(to)g(b)s(e)f
-(used)f(b)m(y)h(the)h(Plot)g(class:)111 3335 y(1.)46
-b(A)33 b(\014le)g(con)m(taining)i(C)d(functions)h(with)f(pre-de\014ned)
-g(names)h(can)g(b)s(e)f(written)h(and)f(link)m(ed)i(with)e(the)227
-3448 y(application)42 b(using)e(options)h(of)g(the)g(ast)p
-Fy(_)p FG(link)f(command.)71 b(\(see)42 b Fu(x)p FG(3.3)g(and)e(App)s
-(endix)f(E\).)71 b(AST)227 3561 y(is)37 b(distributed)f(with)g(suc)m(h)
-h(a)g(\014le)f(\(called)j Fy(grf_pgplot.c)p FG(\))33
-b(whic)m(h)k(calls)h(PGPLOT)d(functions)i(to)227 3674
-y(implemen)m(t)30 b(the)f(required)g(functionalit)m(y)-8
-b(.)42 b(This)28 b(\014le)i(can)f(b)s(e)g(used)f(as)h(a)h(template)g
-(for)f(writing)h(y)m(our)227 3787 y(o)m(wn.)46 b(Curren)m(tly)-8
-b(,)33 b(it)g(is)f(not)g(p)s(ossible)g(to)h(write)g(suc)m(h)e(\\grf)i
-(mo)s(dules")f(in)g(F)-8 b(ortran.)46 b(If)32 b(y)m(ou)h(w)m(an)m(t)g
-(to)227 3900 y(use)e(wrapp)s(er)f(functions)g(written)i(in)f(F)-8
-b(ortran,)32 b(then)f(y)m(ou)h(m)m(ust)f(use)g(the)g(AST)p
-Fy(_)p FG(GRFSET)f(metho)s(d)227 4012 y(as)h(describ)s(ed)e(b)s(elo)m
-(w.)111 4200 y(2.)46 b(The)29 b(AST)p Fy(_)p FG(GRFSET)e(metho)s(d)i
-(of)g(the)g(Plot)h(class)g(can)f(b)s(e)g(used)f(to)i(\\register")h
-(wrapp)s(er)c(functions)227 4313 y(at)37 b(run-time.)58
-b(This)36 b(allo)m(ws)i(an)e(application)h(to)g(switc)m(h)g(b)s(et)m(w)
-m(een)g(graphics)f(systems)h(if)f(required.)227 4426
-y(Graphics)30 b(functions)f(registered)h(in)g(this)f(w)m(a)m(y)i(do)e
-(not)h(need)f(to)i(ha)m(v)m(e)g(the)f(pre-de\014ned)e(names)h(used)227
-4539 y(in)h(the)h(link-time)g(metho)s(d)f(describ)s(ed)f(ab)s(o)m(v)m
-(e.)0 4776 y(F)-8 b(or)38 b(details)h(of)e(the)h(in)m(terfaces)g(of)g
-(the)g(wrapp)s(er)d(routines,)k(see)f(the)g(reference)g(do)s(cumen)m
-(tation)g(for)f(the)0 4889 y(AST)p Fy(_)p FG(GRFSET)29
-b(metho)s(d.)p eop end
-%%Page: 183 193
-TeXDict begin 183 192 bop 3643 52 a FG(183)0 351 y FA(22)135
-b(Compiling)46 b(and)f(Linking)g(Soft)l(w)l(are)h(that)g(Uses)f(AST)0
-614 y FG(A)28 b(small)h(n)m(um)m(b)s(er)d(of)i(UNIX)h(commands)e(are)i
-(pro)m(vided)e(b)m(y)h(AST)f(to)i(assist)g(with)e(the)i(pro)s(cess)e
-(of)h(building)0 727 y(soft)m(w)m(are.)58 b(A)36 b(description)g(of)g
-(these)g(can)g(b)s(e)f(found)f(in)i(App)s(endix)e(E)h(and)h(their)f
-(use)h(is)g(discussed)e(here.)0 840 y(Note)c(that)g(in)f(order)f(to)i
-(access)h(these)e(commands,)g(the)h(appropriate)f(directory)g
-(\(normally)h(\\/star/bin"\))0 953 y(should)f(b)s(e)h(on)g(y)m(our)h(P)
--8 b(A)g(TH.)1019 920 y Fv(35)0 1268 y Fw(22.1)112 b(Accessing)38
-b(AST)f(Include)h(Files)0 1500 y FG(The)30 b(include)g(\014les)g(pro)m
-(vided)g(for)g(use)h(with)f(F)-8 b(ortran)31 b(are:)227
-1782 y FE(AST)p Fy(_)p FE(P)-9 b(AR)427 1895 y FG(Declares)26
-b(the)f(t)m(yp)s(es)f(of)h(all)g(AST)f(functions)g(and)g(de\014nes)f
-(parameter)i(constan)m(ts,)i(except)427 2008 y(those)k(that)g(iden)m
-(tify)g(error)f(v)-5 b(alues.)227 2161 y FE(AST)p Fy(_)p
-FE(ERR)427 2274 y FG(De\014nes)31 b(parameter)h(constan)m(ts)g(to)g
-(represen)m(t)f(the)g(v)-5 b(arious)31 b(error)g(v)-5
-b(alues)31 b(to)h(whic)m(h)f(the)427 2387 y(AST)f(error)g(status)h(ma)m
-(y)g(b)s(e)e(set)i(when)f(an)g(error)g(o)s(ccurs)g(\()p
-Fu(x)p FG(4.13\).)0 2669 y(References)h(to)g(AST)f(include)g(\014les)h
-(should)e(b)s(e)h(in)h(upp)s(er)d(case.)42 b(Most)32
-b(mo)s(dern)d(F)-8 b(ortran)31 b(compilers)g(allo)m(w)0
-2782 y(the)g(directory)f(to)i(b)s(e)d(sp)s(eci\014ed)h(as)h(a)f
-(command)g(line)h(option:)227 3051 y Ft(f77)43 b(prog.f)e
-(-I/star/include)c(-o)43 b(prog)0 3334 y FG(If)30 b(y)m(ou)h(are)f
-(using)g(suc)m(h)g(a)h(compiler)g(then)f(y)m(our)g(F)-8
-b(ortran)31 b(source)g(co)s(de)g(should,)e(for)h(instance,)i(include:)
-262 3603 y Ft(INCLUDE)40 b('AST_PAR')0 3886 y FG(\(that)g(is,)h(there)e
-(is)g(no)g(need)g(to)g(include)g(the)g(directory)g(within)g(the)g
-(INCLUDE)g(statemen)m(t\).)68 b(If)39 b(y)m(our)0 3999
-y(compiler)c(do)s(es)e(not)i(pro)m(vide)f(suc)m(h)g(an)g(option)h(then)
-e(y)m(our)h(source)h(co)s(de)f(m)m(ust)g(con)m(tain)i(an)e(absolute)g
-(\014le)0 4111 y(name)c(iden)m(tifying)h(the)g(directory)g(where)f(the)
-g(include)g(\014les)h(reside,)f(for)h(instance:)262 4381
-y Ft(INCLUDE)40 b('/star/include/AS)o(T_)o(PAR)o(')0
-4696 y Fw(22.2)112 b(Linking)39 b(with)e(AST)h(F)-9 b(acilities)0
-4928 y FG(F)h(ortran)34 b(programs)e(ma)m(y)i(b)s(e)e(link)m(ed)i(with)
-e(AST)g(b)m(y)h(including)g(execution)h(of)f(the)g(command)g(\\ast)p
-Fy(_)p FG(link")0 5041 y(on)24 b(the)h(compiler)g(command)g(line.)39
-b(Th)m(us,)25 b(to)g(compile)h(and)e(link)g(a)h(program)g(called)g
-(\\prog",)i(the)e(follo)m(wing)0 5154 y(migh)m(t)31 b(b)s(e)f(used:)227
-5423 y Ft(f77)43 b(prog.f)e(-L/star/lib)e(`ast_link`)g(-o)k(prog)p
-0 5516 1512 4 v 73 5570 a Fs(35)138 5602 y Fr(If)33 b(y)n(ou)g(ha)n(v)n
-(e)f(not)h(installed)h(AST)e(in)h(the)g(usual)g(lo)r(cation,)j(then)d
-(substitute)f(the)h(appropriate)g(directory)g(in)g(place)h(of)0
-5693 y(\\/star")27 b(wherev)n(er)f(it)g(o)r(ccurs.)p
-eop end
-%%Page: 184 194
-TeXDict begin 184 193 bop 0 52 a FG(184)929 b Fz(22)91
-b(COMPILING)30 b(AND)h(LINKING)g(SOFTW)-10 b(ARE)29 b(THA)-8
-b(T)31 b(USES)e(AST)0 351 y FG(On)k(Lin)m(ux)f(systems)i(y)m(ou)g
-(should)e(usually)h(use)g Fy(g77)47 b(-fno-second-underscore)28
-b FG(in)33 b(place)h(of)g Fy(f77)e FG(-)i(see)0 464 y(\\Soft)m(w)m(are)
-e(dev)m(elopmen)m(t)g(on)e(Lin)m(ux")g(in)g(SUN/212.)0
-627 y(Note)d(the)f(use)g(of)g(bac)m(kw)m(ard)g(quote)h(c)m(haracters,)i
-(whic)m(h)c(cause)i(the)f(\\ast)p Fy(_)p FG(link")h(command)f(to)g(b)s
-(e)g(executed)0 740 y(and)g(its)h(result)g(substituted)f(in)m(to)i(the)
-e(compiler)i(command.)39 b(An)26 b(alternativ)m(e)j(is)e(to)g(sa)m(v)m
-(e)i(the)e(output)f(from)0 853 y(\\ast)p Fy(_)p FG(link")32
-b(in)f(\(sa)m(y\))i(a)e(shell)h(v)-5 b(ariable)31 b(and)g(use)g(this)g
-(instead.)43 b(Y)-8 b(ou)32 b(ma)m(y)f(\014nd)f(this)h(a)h(little)h
-(faster)e(if)g(y)m(ou)0 966 y(are)g(building)e(soft)m(w)m(are)j(rep)s
-(eatedly)f(during)e(dev)m(elopmen)m(t.)0 1128 y(Programs)43
-b(whic)m(h)g(use)g(AST)f(can)i(also)g(b)s(e)e(link)m(ed)i(in)e(a)i(n)m
-(um)m(b)s(er)e(of)h(other)g(w)m(a)m(ys,)48 b(dep)s(ending)41
-b(on)i(the)0 1241 y(facilities)35 b(they)f(require.)48
-b(In)32 b(the)i(example)g(ab)s(o)m(v)m(e,)h(w)m(e)e(ha)m(v)m(e)i(used)d
-(the)h(default)g(metho)s(d)g(whic)m(h)g(assumes)0 1354
-y(that)39 b(the)g(program)f(will)h(not)g(b)s(e)f(generating)i
-(graphical)f(output,)i(so)e(that)g(no)f(graphics)h(libraries)g(need)0
-1467 y(b)s(e)d(link)m(ed.)59 b(If)35 b(y)m(ou)i(need)f(other)h
-(facilities,)j(then)c(v)-5 b(arious)36 b(switc)m(hes)h(can)g(b)s(e)f
-(applied)g(to)h(the)f(\\ast)p Fy(_)p FG(link")0 1580
-y(command)30 b(in)g(order)g(to)h(con)m(trol)h(the)f(linking)f(pro)s
-(cess.)0 1743 y(F)-8 b(or)29 b(example,)h(if)e(y)m(ou)h(w)m(ere)f(pro)s
-(ducing)f(graphical)i(output)f(using)g(the)g(PGPLOT)g(graphics)g(pac)m
-(k)-5 b(age,)31 b(y)m(ou)0 1856 y(could)e(link)g(with)g(the)g
-(AST/PGPLOT)f(in)m(terface)j(b)m(y)d(using)h(the)g(\\)p
-Fu(\000)p FG(pgplot")h(switc)m(h)g(with)e(\\ast)p Fy(_)p
-FG(link",)j(as)0 1969 y(follo)m(ws:)292 1936 y Fv(36)227
-2218 y Ft(f77)43 b(prog.f)e(-L/star/lib)e(`ast_link)h(-pgplot`)g(-o)j
-(prog)0 2480 y FG(again)31 b(using)f Fy(g77)47 b
-(-fno-second-underscore)25 b FG(in)30 b(place)h(of)f
-Fy(f77)g FG(on)g(Lin)m(ux)g(systems.)0 2643 y(See)h(the)f(\\ast)p
-Fy(_)p FG(link")i(command)e(description)g(in)g(App)s(endix)f(E)h(for)g
-(details)i(of)e(the)h(options)g(a)m(v)-5 b(ailable.)0
-2936 y Fw(22.3)112 b(Building)39 b(AD)m(AM)d(Applications)j(that)e(Use)
-h(AST)0 3157 y FG(Users)32 b(of)h(Starlink's)g(AD)m(AM)h(programming)e
-(en)m(vironmen)m(t)h(\(SG/4\))h(on)f(UNIX)g(should)e(use)h(the)h
-(\\alink")0 3270 y(command)j(\(SUN/144\))i(to)f(compile)g(and)e(link)h
-(applications)h(and)e(can)h(access)i(the)e(AST)f(library)h(b)m(y)f(in-)
-0 3383 y(cluding)30 b(execution)i(of)e(the)h(command)f(\\ast)p
-Fy(_)p FG(link)p Fy(_)p FG(adam")h(on)g(the)f(command)g(line,)h(as)g
-(follo)m(ws:)227 3632 y Ft(alink)42 b(adamprog.f)d(`ast_link_adam`)0
-3895 y FG(Note)32 b(the)e(use)g(of)h(bac)m(kw)m(ard)g(quote)g(c)m
-(haracters.)0 4057 y(By)e(default,)g(AST)f(error)g(messages)i(pro)s
-(duced)d(b)m(y)h(applications)i(built)f(in)f(this)h(w)m(a)m(y)g(will)g
-(b)s(e)f(deliv)m(ered)h Fx(via)0 4170 y FG(the)34 b(Starlink)g(EMS)f
-(Error)g(Message)i(Service)f(\(SSN/4\))h(so)f(that)g(error)g(handling)f
-(b)m(y)g(AST)g(is)h(consisten)m(t)0 4283 y(with)c(the)h
-Fx(inherite)-5 b(d)33 b(status)f FG(error)e(handling)g(normally)g(used)
-g(in)g(Starlink)g(soft)m(w)m(are.)0 4446 y(Switc)m(hes)43
-b(ma)m(y)h(b)s(e)e(giv)m(en)i(to)f(the)g(\\ast)p Fy(_)p
-FG(link)p Fy(_)p FG(adam")h(command)f(\(in)g(a)g(similar)g(w)m(a)m(y)h
-(to)f(\\ast)p Fy(_)p FG(link"|)0 4559 y Fu(x)p FG(22.2\))36
-b(in)d(order)h(to)g(link)g(with)f(additional)i(AST-related)f
-(facilities,)j(suc)m(h)c(as)h(a)g(graphics)g(in)m(terface.)52
-b(See)0 4672 y(the)31 b(\\ast)p Fy(_)p FG(link)p Fy(_)p
-FG(adam")g(command)f(description)h(in)f(App)s(endix)e(E)j(for)f
-(details)h(of)g(the)f(options)h(a)m(v)-5 b(ailable.)p
-0 5516 1512 4 v 73 5570 a Fs(36)138 5602 y Fr(Use)20
-b(the)f(\\)p Fn(\000)p Fr(pgp")g(option)h(instead)g(if)g(y)n(ou)f(wish)
-h(to)f(use)h(the)f(Starlink)g(v)n(ersion)g(of)i(PGPLOT)f(whic)n(h)f
-(uses)h(GKS)f(to)h(generate)0 5693 y(its)26 b(output.)p
-eop end
-%%Page: 185 195
-TeXDict begin 185 194 bop 3643 52 a FG(185)0 351 y FA(A)134
-b(The)45 b(AST)e(Class)j(Hierarc)l(h)l(y)0 619 y FG(The)29
-b(follo)m(wing)j(table)e(sho)m(ws)g(the)g(hierarc)m(h)m(y)g(of)g
-(classes)h(in)e(the)h(AST)f(library)-8 b(.)41 b(F)-8
-b(or)30 b(a)h(description)e(of)h(eac)m(h)0 732 y(class,)h(y)m(ou)g
-(should)e(consult)i(App)s(endix)e(D.)0 1011 y Ft(Object)564
-b(-)43 b(Base)f(class)g(for)g(all)g(AST)h(Objects)131
-1110 y(Axis)521 b(-)43 b(Store)f(axis)g(information)262
-1210 y(SkyAxis)258 b(-)43 b(Store)f(celestial)e(axis)i(information)131
-1309 y(Channel)389 b(-)43 b(Basic)f(\(textual\))e(I/O)i(channel)262
-1409 y(FitsChan)214 b(-)43 b(I/O)g(Channel)d(using)i(FITS)g(header)f
-(cards)262 1509 y(XmlChan)258 b(-)43 b(I/O)g(Channel)d(using)i(XML)262
-1608 y(StcsChan)214 b(-)43 b(I/O)g(Channel)d(using)i(IVOA)g(STC-S)f
-(descriptions)131 1708 y(KeyMap)433 b(-)43 b(Store)f(a)h(set)f(of)h
-(key/value)d(pairs)131 1808 y(Mapping)389 b(-)43 b(Inter-relate)c(two)j
-(coordinate)e(systems)262 1907 y(CmpMap)302 b(-)43 b(Compound)e
-(Mapping)262 2007 y(DssMap)302 b(-)43 b(Map)g(points)e(using)g
-(Digitised)f(Sky)i(Survey)g(plate)f(solution)262 2106
-y(Frame)346 b(-)43 b(Coordinate)d(system)h(description)392
-2206 y(CmpFrame)84 b(-)43 b(Compound)e(Frame)523 2306
-y(SpecFluxFrame)d(-)43 b(Observed)e(value)g(versus)g(spectral)g
-(position)392 2405 y(FluxFrame)f(-)j(Observed)e(value)g(at)i(a)g(given)
-f(fixed)f(spectral)f(position)392 2505 y(FrameSet)84
-b(-)43 b(Set)g(of)f(inter-related)d(coordinate)g(systems)523
-2605 y(Plot)129 b(-)43 b(Provide)e(facilities)e(for)k(graphical)d
-(output)392 2704 y(Region)172 b(-)43 b(Specify)e(areas)h(within)f(a)i
-(coordinate)c(system)523 2804 y(Box)173 b(-)43 b(A)g(box)g(region)e
-(with)h(sides)f(parallel)g(to)h(the)h(axes)f(of)g(a)i(Frame)523
-2903 y(Circle)d(-)i(A)g(circular)e(or)i(spherical)c(region)i(within)h
-(a)h(Frame)523 3003 y(CmpRegion)83 b(-)44 b(A)f(combination)c(of)k(two)
-f(regions)f(within)g(a)i(single)e(Frame)523 3103 y(Ellipse)171
-b(-)44 b(An)e(elliptical)e(region)h(within)g(a)i(2-dimensional)38
-b(Frame)523 3202 y(Interval)127 b(-)44 b(Intervals)c(on)i(one)h(or)f
-(more)g(axes)g(of)h(a)g(Frame.)523 3302 y(NullRegion)c(-)44
-b(A)f(boundless)d(region)h(within)g(a)i(Frame)523 3402
-y(PointList)83 b(-)44 b(A)f(collection)c(of)k(points)e(in)i(a)g(Frame)
-523 3501 y(Polygon)171 b(-)44 b(A)f(polygonal)d(region)h(within)g(a)i
-(2-dimensional)38 b(Frame)523 3601 y(Prism)85 b(-)43
-b(An)g(extrusion)d(of)j(a)g(Region)e(into)h(orthogonal)d(dimensions)523
-3700 y(Stc)173 b(-)43 b(Represents)d(an)j(generic)d(instance)g(of)j(an)
-g(IVOA)f(STC-X)f(description)654 3800 y(StcResourceProfi)o(le)c(-)43
-b(Represents)d(an)i(an)h(IVOA)f(STC-X)g(ResourceProfile)654
-3900 y(StcSearchLocatio)o(n)81 b(-)43 b(Represents)d(an)i(an)h(IVOA)f
-(STC-X)g(SearchLocation)654 3999 y(StcCatalogEntryL)o(oc)o(ati)o(on)37
-b(-)43 b(Represents)c(an)k(an)g(IVOA)f(STC-X)f(CatalogEntryLocat)o(ion)
-654 4099 y(StcObsDataLocati)o(on)c(-)43 b(Represents)d(an)i(an)h(IVOA)f
-(STC-X)g(ObsDataLocation)392 4199 y(SkyFrame)84 b(-)43
-b(Celestial)d(coordinate)g(system)h(description)392 4298
-y(SpecFrame)f(-)j(Spectral)e(coordinate)e(system)i(description)523
-4398 y(DSBSpecFrame)e(-)k(Dual)f(sideband)e(spectral)g(coordinate)g
-(system)h(description)392 4497 y(TimeFrame)f(-)j(Time)f(coordinate)e
-(system)h(description)262 4597 y(GrismMap)214 b(-)43
-b(Models)e(the)i(spectral)d(dispersion)f(produced)i(by)i(a)g(grism)262
-4697 y(IntraMap)214 b(-)43 b(Map)g(points)e(using)g(a)i(private)e
-(transformation)d(function)262 4796 y(LutMap)302 b(-)43
-b(Transform)d(1-dimensional)e(coordinates)h(using)j(a)h(lookup)e(table)
-262 4896 y(MathMap)258 b(-)43 b(Transform)d(coordinates)f(using)j
-(mathematical)c(expressions)262 4996 y(MatrixMap)170
-b(-)43 b(Map)g(positions)d(by)i(multiplying)d(them)j(by)h(a)g(matrix)
-262 5095 y(NormMap)258 b(-)43 b(Normalise)d(coordinates)f(using)j(a)h
-(supplied)d(Frame)262 5195 y(PcdMap)302 b(-)43 b(Apply)f(2-dimensional)
-c(pincushion/barre)o(l)g(distortion)262 5295 y(PermMap)258
-b(-)43 b(Coordinate)d(permutation)f(Mapping)262 5394
-y(PolyMap)258 b(-)43 b(General)e(N-dimensional)d(polynomial)i(Mapping)
-262 5494 y(RateMap)258 b(-)43 b(Calculates)d(an)j(element)d(of)j(a)g
-(Mapping's)d(Jacobian)g(matrix)262 5593 y(SelectorMap)82
-b(-)43 b(Locates)e(positions)f(within)h(a)i(set)f(of)h(Regions)262
-5693 y(ShiftMap)214 b(-)43 b(Shifts)e(each)h(axis)g(by)h(a)g(constant)d
-(amount)p eop end
-%%Page: 186 196
-TeXDict begin 186 195 bop 0 52 a FG(186)2158 b Fz(A)92
-b(THE)30 b(AST)f(CLASS)g(HIERAR)m(CHY)262 351 y Ft(SlaMap)302
-b(-)43 b(Sequence)e(of)h(celestial)e(coordinate)g(conversions)262
-451 y(SpecMap)258 b(-)43 b(Sequence)e(of)h(spectral)f(coordinate)e
-(conversions)262 551 y(SphMap)302 b(-)43 b(Map)g(3-d)f(Cartesian)e(to)j
-(2-d)f(spherical)e(coordinates)262 650 y(SwitchMap)170
-b(-)43 b(Encapuslates)c(a)k(set)f(of)h(alternate)d(Mappings)262
-750 y(TimeMap)258 b(-)43 b(Sequence)e(of)h(time)g(coordinate)e
-(conversions)262 849 y(TranMap)258 b(-)43 b(Combine)e(fwd.)h(and)g
-(inv.)g(transformations)c(from)k(two)g(Mappings)262 949
-y(UnitMap)258 b(-)43 b(Unit)f(\(null\))f(Mapping)262
-1049 y(WcsMap)302 b(-)43 b(Implement)d(a)j(FITS-WCS)e(sky)h(projection)
-262 1148 y(WinMap)302 b(-)43 b(Match)f(windows)f(by)h(scaling)f(and)h
-(shifting)f(each)h(axis)262 1248 y(ZoomMap)258 b(-)43
-b(Zoom)f(coordinates)d(about)j(the)g(origin)p eop end
-%%Page: 187 197
-TeXDict begin 187 196 bop 3643 52 a FG(187)0 351 y FA(B)134
-b(AST)44 b(Routine)i(Descriptions)p 0 583 3780 12 v 0
-714 a(AST)p Fe(_)p FA(SET)1023 715 y Fd(Set)38 b(attribute)f(v)-7
-b(alues)38 b(for)g(an)h(Ob)7 b(ject)3192 714 y FA(AST)p
-Fe(_)p FA(SET)0 888 y Fc(Description:)44 b Fk(This)22
-b(routine)g(assigns)e(a)h(set)h(of)g(attribute)g(v)-5
-b(alues)21 b(to)h(an)f(Ob)5 b(ject,)23 b(o)n(v)n(er-riding)c(an)n(y)i
-(previous)g(v)-5 b(alues.)227 988 y(The)33 b(attributes)h(and)f(their)g
-(new)g(v)-5 b(alues)33 b(are)f(sp)r(eci\014ed)h(via)g(a)g(c)n(haracter)
-e(string,)j(whic)n(h)f(should)g(con)n(tain)f(a)227 1088
-y(comma-separated)26 b(list)h(of)h(the)g(form:)227 1208
-y Ft(")p Fk(attribute)p Ft(_)p Fk(1)f(=)g(v)-5 b(alue)p
-Ft(_)p Fk(1,)27 b(attribute)p Ft(_)p Fk(2)f(=)i(v)-5
-b(alue)p Ft(_)p Fk(2,)26 b(...)37 b Ft(")227 1329 y Fk(where)22
-b Ft(")p Fk(attribute)p Ft(_)p Fk(n)p Ft(")g Fk(sp)r(eci\014es)g(an)h
-(attribute)f(name,)i(and)e(the)h(v)-5 b(alue)23 b(to)f(the)h(righ)n(t)f
-(of)h(eac)n(h)e Ft(")p Fk(=)p Ft(")h Fk(sign)g(should)227
-1429 y(b)r(e)36 b(a)f(suitable)h(textual)f(represen)n(tation)f(of)h
-(the)h(v)-5 b(alue)35 b(to)h(b)r(e)g(assigned.)59 b(This)35
-b(v)-5 b(alue)36 b(will)f(b)r(e)h(in)n(terpreted)227
-1528 y(according)26 b(to)i(the)g(attribute's)f(data)g(t)n(yp)r(e.)0
-1670 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_SET\()e(THIS,)h
-(SETTINGS,)f(STATUS)h(\))0 1812 y Fc(Argumen)m(ts:)259
-1941 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 2041
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject.)259 2166
-y Fc(SETTINGS)33 b(=)f(CHARA)m(CTER)f Fj(\003)h Fc(\()f
-Fj(\003)h Fc(\))g(\(Giv)m(en\))427 2266 y Fk(A)j(c)n(haracter)e(string)
-h(con)n(taining)g(a)h(comma-separated)d(list)j(of)g(attribute)g
-(settings)g(in)g(the)g(form)g(de-)427 2365 y(scrib)r(ed)28
-b(ab)r(o)n(v)n(e.)259 2490 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f
-(\(Giv)m(en)h(and)g(Returned\))427 2590 y Fk(The)c(global)e(status.)0
-2744 y Fc(Class)31 b(Applicabilit)m(y:)259 2873 y(Ob)5
-b(ject)427 2973 y Fk(This)28 b(routine)f(applies)g(to)h(all)f(Ob)5
-b(jects.)0 3127 y Fc(Examples:)227 3257 y Fy(CALL)47
-b(AST)p Ft(_)p Fy(SET\()e(MAP,)i('Report)f(=)h(1,)g(Zoom)g(=)g(25.0',)g
-(STATUS)f(\))427 3356 y Fk(Sets)28 b(the)g(Rep)r(ort)f(attribute)h(for)
-f(Ob)5 b(ject)28 b(MAP)f(to)h(the)g(v)-5 b(alue)27 b(1)g(and)h(the)g
-(Zo)r(om)f(attribute)g(to)h(25.0.)227 3485 y Fy(CALL)47
-b(AST)p Ft(_)p Fy(SET\()e(FRAME,)h('Label\()g(1)i(\))f(=Offset)f(from)h
-(cluster)e(axis',)h(STATUS)h(\))427 3580 y Fk(Sets)28
-b(the)g(Lab)r(el\(1\))g(attribute)f(for)g(Ob)5 b(ject)28
-b(FRAME)g(to)f(a)g(suitable)h(string.)0 3735 y Fc(Notes:)340
-4010 y Fj(\017)45 b Fk(A)n(ttribute)28 b(names)g(are)e(not)i(case)f
-(sensitiv)n(e)g(and)g(ma)n(y)g(b)r(e)h(surrounded)e(b)n(y)i(white)g
-(space.)340 4135 y Fj(\017)45 b Fk(White)33 b(space)e(ma)n(y)f(also)h
-(surround)g(attribute)g(v)-5 b(alues,)33 b(where)e(it)h(will)g
-(generally)e(b)r(e)i(ignored)e(\(except)427 4235 y(for)24
-b(string-v)-5 b(alued)23 b(attributes)i(where)e(it)i(is)f(signi\014can)
-n(t)g(and)g(forms)g(part)f(of)i(the)f(v)-5 b(alue)25
-b(to)f(b)r(e)g(assigned\).)340 4360 y Fj(\017)45 b Fk(It)32
-b(is)e(not)h(p)r(ossible)g(to)g(include)g(a)g(comma)f(in)h(the)g(v)-5
-b(alue)31 b(to)g(b)r(e)g(assigned)f(to)h(an)g(attribute)g(using)f(this)
-427 4459 y(routine.)37 b(If)28 b(suc)n(h)f(a)g(v)-5 b(alue)28
-b(is)f(needed,)h(then)g(AST)p Ft(_)p Fk(SETC)f(should)h(b)r(e)g(used)f
-(instead.)340 4585 y Fj(\017)45 b Fk(An)28 b(error)e(will)i(result)f
-(if)h(an)g(attempt)g(is)f(made)h(to)f(set)h(a)f(v)-5
-b(alue)27 b(for)g(a)h(read-only)e(attribute.)p 0 4769
-V 0 4899 a FA(AST)p Fe(_)p FA(ADDFRAME)1432 4900 y Fd(Add)39
-b(a)g(F)-10 b(rame)38 b(to)g(a)1359 5000 y(F)-10 b(rameSet)38
-b(to)g(de\014ne)h(a)1307 5100 y(new)g(co)s(ordinate)d(system)2638
-4899 y FA(AST)p Fe(_)p FA(ADDFRAME)0 5273 y Fc(Description:)44
-b Fk(This)27 b(routine)f(adds)g(a)g(new)h(F)-7 b(rame)26
-b(and)g(an)h(asso)r(ciated)e(Mapping)h(to)h(a)f(F)-7
-b(rameSet)26 b(so)g(as)g(to)g(de\014ne)227 5373 y(a)33
-b(new)g(co)r(ordinate)f(system,)i(deriv)n(ed)e(from)h(one)g(whic)n(h)g
-(already)e(exists)i(within)h(the)f(F)-7 b(rameSet.)53
-b(The)34 b(new)227 5473 y(F)-7 b(rame)27 b(then)h(b)r(ecomes)g(the)g(F)
--7 b(rameSet's)27 b(curren)n(t)g(F)-7 b(rame.)227 5593
-y(This)26 b(routine)f(ma)n(y)f(also)g(b)r(e)i(used)f(to)h(merge)e(t)n
-(w)n(o)h(F)-7 b(rameSets,)25 b(or)g(to)g(app)r(end)g(extra)g(axes)f(to)
-h(ev)n(ery)g(F)-7 b(rame)24 b(in)227 5693 y(a)j(F)-7
-b(rameSet.)p eop end
-%%Page: 188 198
-TeXDict begin 188 197 bop 0 52 a FG(188)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(In)m(v)m(o)s(cation:)
-123 b Ft(CALL)42 b(AST_ADDFRAME\()c(THIS,)j(IFRAME,)g(MAP,)h(FRAME,)f
-(STATUS)g(\))0 499 y Fc(Argumen)m(ts:)259 634 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 734 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rameSet.)259 865 y Fc(IFRAME)31 b(=)h(INTEGER)g
-(\(Giv)m(en\))427 965 y Fk(The)j(index)g(of)g(the)g(F)-7
-b(rame)34 b(within)i(the)f(F)-7 b(rameSet)34 b(whic)n(h)h(describ)r(es)
-f(the)h(co)r(ordinate)f(system)g(up)r(on)427 1064 y(whic)n(h)d(the)f
-(new)h(one)f(is)g(to)g(b)r(e)h(based.)45 b(This)30 b(v)-5
-b(alue)31 b(should)f(lie)g(in)h(the)g(range)e(from)h(1)g(to)g(the)h(n)n
-(um)n(b)r(er)427 1164 y(of)36 b(F)-7 b(rames)35 b(already)g(in)h(the)g
-(F)-7 b(rameSet)36 b(\(as)f(giv)n(en)g(b)n(y)h(its)g(Nframe)f
-(attribute\).)62 b(As)36 b(a)g(sp)r(ecial)f(case,)427
-1263 y(AST)p Ft(__)p Fk(ALLFRAMES)25 b(ma)n(y)g(b)r(e)g(supplied,)h(in)
-f(whic)n(h)g(case)g(the)g(axes)f(de\014ned)i(b)n(y)e(the)i(supplied)f
-(F)-7 b(rame)427 1363 y(are)27 b(app)r(ended)h(to)f(ev)n(ery)g(F)-7
-b(rame)27 b(in)g(the)h(F)-7 b(rameSet)28 b(\(see)f(the)h(Notes)g
-(section)f(for)g(details\).)259 1494 y Fc(MAP)32 b(=)g(INTEGER)f(\(Giv)
-m(en\))427 1594 y Fk(P)n(oin)n(ter)20 b(to)i(a)f(Mapping)h(whic)n(h)f
-(describ)r(es)h(ho)n(w)f(to)g(con)n(v)n(ert)g(co)r(ordinates)f(from)h
-(the)h(old)g(co)r(ordinate)f(sys-)427 1694 y(tem)28 b(\(describ)r(ed)e
-(b)n(y)h(the)g(F)-7 b(rame)26 b(with)i(index)f(IFRAME\))g(in)n(to)g(co)
-r(ordinates)e(in)i(the)g(new)g(system.)37 b(The)427 1793
-y(Mapping's)21 b(forw)n(ard)e(transformation)g(should)i(p)r(erform)g
-(this)g(con)n(v)n(ersion,)f(and)h(its)g(in)n(v)n(erse)f(transforma-)427
-1893 y(tion)28 b(should)g(con)n(v)n(ert)e(in)j(the)f(opp)r(osite)g
-(direction.)37 b(The)28 b(supplied)g(Mapping)g(is)g(ignored)f(if)h
-(parameter)427 1993 y(IFRAME)g(is)g(equal)f(to)g(AST)p
-Ft(__)p Fk(ALLFRAMES.)259 2124 y Fc(FRAME)k(=)h(INTEGER)g(\(Giv)m(en\))
-427 2223 y Fk(P)n(oin)n(ter)f(to)i(a)f(F)-7 b(rame)32
-b(that)h(describ)r(es)e(the)i(new)g(co)r(ordinate)e(system.)52
-b(An)n(y)32 b(class)g(of)g(F)-7 b(rame)32 b(ma)n(y)g(b)r(e)427
-2323 y(supplied)c(\(including)g(Regions)f(and)g(F)-7
-b(rameSets\).)427 2439 y(This)32 b(routine)f(ma)n(y)g(also)f(b)r(e)i
-(used)g(to)f(merge)g(t)n(w)n(o)g(F)-7 b(rameSets)31 b(b)n(y)g
-(supplying)g(a)g(p)r(oin)n(ter)h(to)f(a)g(second)427
-2538 y(F)-7 b(rameSet)28 b(for)f(this)h(argumen)n(t)e(\(see)i(the)g
-(Notes)f(section)g(for)g(details\).)259 2670 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-2769 y Fk(The)c(global)e(status.)0 2929 y Fc(Notes:)340
-3210 y Fj(\017)45 b Fk(A)32 b(v)-5 b(alue)31 b(of)g(AST)p
-Ft(__)p Fk(BASE)f(or)g(AST)p Ft(__)p Fk(CURRENT)h(ma)n(y)g(b)r(e)g(giv)
-n(en)f(for)h(the)g(IFRAME)h(argumen)n(t)e(to)427 3310
-y(sp)r(ecify)e(the)g(base)f(F)-7 b(rame)27 b(or)g(the)h(curren)n(t)f(F)
--7 b(rame)27 b(resp)r(ectiv)n(ely)-7 b(.)340 3441 y Fj(\017)45
-b Fk(This)27 b(routine)g(sets)g(the)h(v)-5 b(alue)27
-b(of)g(the)g(Curren)n(t)g(attribute)g(for)g(the)g(F)-7
-b(rameSet)27 b(so)g(that)g(the)h(new)f(F)-7 b(rame)427
-3541 y(subsequen)n(tly)27 b(b)r(ecomes)h(the)g(curren)n(t)e(F)-7
-b(rame.)340 3672 y Fj(\017)45 b Fk(The)26 b(n)n(um)n(b)r(er)f(of)g
-(input)h(co)r(ordinate)e(v)-5 b(alues)25 b(accepted)g(b)n(y)g(the)g
-(supplied)h(Mapping)f(\(its)g(Nin)h(attribute\))427 3772
-y(m)n(ust)e(matc)n(h)f(the)h(n)n(um)n(b)r(er)f(of)g(axes)g(in)g(the)h
-(F)-7 b(rame)23 b(iden)n(ti\014ed)h(b)n(y)f(the)h(IFRAME)g(argumen)n
-(t.)34 b(Similarly)-7 b(,)427 3872 y(the)25 b(n)n(um)n(b)r(er)g(of)f
-(output)h(co)r(ordinate)f(v)-5 b(alues)24 b(generated)g(b)n(y)g(this)h
-(Mapping)f(\(its)h(Nout)g(attribute\))g(m)n(ust)427 3971
-y(matc)n(h)j(the)g(n)n(um)n(b)r(er)f(of)h(axes)e(in)i(the)g(new)g(F)-7
-b(rame.)340 4103 y Fj(\017)45 b Fk(As)23 b(a)f(sp)r(ecial)g(case,)h(if)
-g(a)g(p)r(oin)n(ter)f(to)g(a)g(F)-7 b(rameSet)23 b(is)f(giv)n(en)g(for)
-g(the)h(FRAME)g(argumen)n(t,)g(this)g(is)f(treated)427
-4202 y(as)j(a)h(request)f(to)g(merge)g(a)g(pair)g(of)h(F)-7
-b(rameSets.)36 b(This)26 b(is)f(done)h(b)n(y)f(app)r(ending)h(all)f
-(the)h(new)g(F)-7 b(rames)25 b(\(in)427 4302 y(the)k(FRAME)g(F)-7
-b(rameSet\))29 b(to)g(the)g(original)e(F)-7 b(rameSet,)29
-b(while)g(preserving)e(their)h(order)g(and)g(retaining)427
-4401 y(all)j(the)g(in)n(ter-relationships)d(\(i.e.)47
-b(Mappings\))30 b(b)r(et)n(w)n(een)h(them.)46 b(The)31
-b(t)n(w)n(o)f(sets)g(of)h(F)-7 b(rames)30 b(are)f(in)n(ter-)427
-4501 y(related)35 b(within)h(the)g(merged)f(F)-7 b(rameSet)35
-b(b)n(y)g(using)g(the)h(Mapping)f(supplied.)61 b(This)36
-b(should)f(con)n(v)n(ert)427 4601 y(b)r(et)n(w)n(een)30
-b(the)f(F)-7 b(rame)29 b(iden)n(ti\014ed)h(b)n(y)f(the)h(IFRAME)f
-(argumen)n(t)f(\(in)i(the)g(original)e(F)-7 b(rameSet\))29
-b(and)g(the)427 4700 y(curren)n(t)j(F)-7 b(rame)32 b(of)g(the)h(FRAME)g
-(F)-7 b(rameSet.)51 b(This)33 b(latter)f(F)-7 b(rame)32
-b(b)r(ecomes)g(the)h(curren)n(t)e(F)-7 b(rame)32 b(in)427
-4800 y(the)c(merged)f(F)-7 b(rameSet.)340 4931 y Fj(\017)45
-b Fk(As)20 b(another)f(sp)r(ecial)g(case,)h(if)g(a)f(v)-5
-b(alue)20 b(of)f(AST)p Ft(__)p Fk(ALLFRAMES)h(is)f(supplied)h(for)f
-(parameter)f(IFRAME,)427 5031 y(then)33 b(the)g(supplied)g(Mapping)f
-(is)g(ignored,)h(and)f(the)h(axes)e(de\014ned)i(b)n(y)f(the)h(supplied)
-g(F)-7 b(rame)32 b(are)f(ap-)427 5130 y(p)r(ended)c(to)e(eac)n(h)g(F)-7
-b(rame)25 b(in)h(the)g(F)-7 b(rameSet.)36 b(In)26 b(detail,)g(eac)n(h)e
-(F)-7 b(rame)25 b(in)h(the)g(F)-7 b(rameSet)26 b(is)f(replaced)g(b)n(y)
-427 5230 y(a)j(CmpF)-7 b(rame)29 b(con)n(taining)e(the)i(original)e(F)
--7 b(rame)28 b(and)g(the)h(F)-7 b(rame)28 b(sp)r(eci\014ed)h(b)n(y)f
-(parameter)f(FRAME.)427 5330 y(In)f(addition,)g(eac)n(h)f(Mapping)g(in)
-h(the)f(F)-7 b(rameSet)26 b(is)f(replaced)g(b)n(y)g(a)g(CmpMap)h(con)n
-(taining)e(the)i(original)427 5429 y(Mapping)32 b(and)g(a)g(UnitMap)g
-(in)g(parallel.)50 b(The)32 b(Nin)g(and)g(Nout)g(attributes)g(of)g(the)
-h(UnitMap)g(are)e(set)427 5529 y(equal)g(to)g(the)h(n)n(um)n(b)r(er)f
-(of)g(axes)g(in)g(the)h(supplied)g(F)-7 b(rame.)47 b(Eac)n(h)30
-b(new)i(CmpMap)f(is)g(simpli\014ed)h(using)427 5629 y(AST)p
-Ft(_)p Fk(SIMPLIFY)c(b)r(efore)f(b)r(eing)h(stored)f(in)h(the)g(F)-7
-b(rameSet.)p eop end
-%%Page: 189 199
-TeXDict begin 189 198 bop 3643 52 a FG(189)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(ANGLE)1034 483 y Fd(Calculate)37
-b(the)h(angle)g(subtended)h(b)m(y)1203 598 y(t)m(w)m(o)e(p)s(oin)m(ts)h
-(at)g(a)h(third)f(p)s(oin)m(t)2967 482 y FA(AST)p Fe(_)p
-FA(ANGLE)0 786 y Fc(Description:)44 b Fk(This)28 b(routine)g(\014nds)g
-(the)g(angle)f(at)h(p)r(oin)n(t)g(B)g(b)r(et)n(w)n(een)g(the)h(line)f
-(joining)g(p)r(oin)n(ts)f(A)i(and)f(B,)f(and)h(the)227
-885 y(line)j(joining)g(p)r(oin)n(ts)f(C)h(and)g(B.)f(These)h(lines)f
-(will)h(in)g(fact)g(b)r(e)g(geo)r(desic)f(curv)n(es)f(appropriate)g(to)
-i(the)g(F)-7 b(rame)227 985 y(in)28 b(use.)37 b(F)-7
-b(or)27 b(instance,)g(in)h(SkyF)-7 b(rame,)27 b(they)h(will)g(b)r(e)g
-(great)e(circles.)0 1134 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_ANGLE\()c(THIS,)j(A,)h(B,)g(C,)f(STATUS)f(\))0
-1283 y Fc(Argumen)m(ts:)259 1419 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 1519 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)259 1651 y Fc(A\()32 b Fj(\003)g Fc(\))g(=)g(DOUBLE)g
-(PRECISION)f(\(Giv)m(en\))427 1751 y Fk(An)d(arra)n(y)c(with)k(one)f
-(elemen)n(t)g(for)f(eac)n(h)h(F)-7 b(rame)26 b(axis)g(\(Naxes)h
-(attribute\))h(con)n(taining)e(the)h(co)r(ordinates)427
-1850 y(of)h(the)g(\014rst)f(p)r(oin)n(t.)259 1983 y Fc(B\()32
-b Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en\))427
-2083 y Fk(An)d(arra)n(y)c(with)k(one)f(elemen)n(t)g(for)f(eac)n(h)h(F)
--7 b(rame)26 b(axis)g(\(Naxes)h(attribute\))h(con)n(taining)e(the)h(co)
-r(ordinates)427 2182 y(of)h(the)g(second)f(p)r(oin)n(t.)259
-2315 y Fc(C\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m
-(en\))427 2414 y Fk(An)d(arra)n(y)c(with)k(one)f(elemen)n(t)g(for)f
-(eac)n(h)h(F)-7 b(rame)26 b(axis)g(\(Naxes)h(attribute\))h(con)n
-(taining)e(the)h(co)r(ordinates)427 2514 y(of)h(the)g(third)g(p)r(oin)n
-(t.)259 2646 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 2746 y Fk(The)c(global)e(status.)0 2908
-y Fc(Returned)32 b(V)-8 b(alue:)259 3044 y(AST)p Ft(_)p
-Fc(ANGLE)32 b(=)g(DOUBLE)h(PRECISION)427 3143 y Fk(The)c(angle)e(in)i
-(radians,)e(from)h(the)g(line)h(AB)f(to)g(the)h(line)f(CB.)g(If)h(the)g
-(F)-7 b(rame)27 b(is)i(2-dimensional,)e(it)h(will)427
-3243 y(b)r(e)33 b(in)f(the)h(range)e($)p Fj(n)p Fk(pm)h
-Fj(n)p Fk(pi$,)h(and)f(p)r(ositiv)n(e)g(rotation)f(is)h(in)g(the)h
-(same)f(sense)g(as)f(rotation)g(from)h(the)427 3343 y(p)r(ositiv)n(e)d
-(direction)g(of)g(axis)f(2)h(to)g(the)h(p)r(ositiv)n(e)e(direction)h
-(of)g(axis)g(1.)41 b(If)30 b(the)f(F)-7 b(rame)29 b(has)f(more)h(than)g
-(2)427 3442 y(axes,)e(a)g(p)r(ositiv)n(e)g(v)-5 b(alue)28
-b(will)g(alw)n(a)n(ys)d(b)r(e)j(returned)f(in)h(the)g(range)f(zero)f
-(to)i($)p Fj(n)p Fk(pi$.)0 3604 y Fc(Notes:)340 3886
-y Fj(\017)45 b Fk(A)27 b(v)-5 b(alue)26 b(of)h(AST)p
-Ft(__)p Fk(BAD)f(will)h(also)e(b)r(e)i(returned)f(if)h(p)r(oin)n(ts)f
-(A)h(and)f(B)g(are)g(co-inciden)n(t,)g(or)f(if)i(p)r(oin)n(ts)g(B)427
-3985 y(and)h(C)f(are)g(co-inciden)n(t.)340 4118 y Fj(\017)45
-b Fk(A)29 b(v)-5 b(alue)29 b(of)g(AST)p Ft(__)p Fk(BAD)g(will)g(also)f
-(b)r(e)h(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g
-(with)h(ST)-7 b(A)g(TUS)30 b(set)f(to)427 4218 y(an)f(error)d(v)-5
-b(alue,)28 b(or)e(if)j(it)f(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 4416 V 0 4547 a FA(AST)p Fe(_)p FA(ANNUL)1137 4548
-y Fd(Ann)m(ul)38 b(a)h(p)s(oin)m(ter)e(to)h(an)h(Ob)7
-b(ject)2952 4547 y FA(AST)p Fe(_)p FA(ANNUL)0 4736 y
-Fc(Description:)44 b Fk(This)33 b(routine)f(ann)n(uls)g(a)g(p)r(oin)n
-(ter)g(to)h(an)f(Ob)5 b(ject)33 b(so)f(that)g(it)h(is)g(no)f(longer)g
-(recognised)e(as)i(a)h(v)-5 b(alid)227 4836 y(p)r(oin)n(ter)37
-b(b)n(y)h(the)g(AST)g(library)-7 b(.)66 b(An)n(y)37 b(resources)f(asso)
-r(ciated)g(with)i(the)g(p)r(oin)n(ter)f(are)g(released)f(and)i(made)227
-4935 y(a)n(v)-5 b(ailable)27 b(for)g(re-use.)227 5060
-y(This)d(routine)f(also)g(decremen)n(ts)g(the)h(Ob)5
-b(ject's)23 b(RefCoun)n(t)h(attribute)f(b)n(y)h(one.)35
-b(If)24 b(this)g(attribute)g(reac)n(hes)e(zero)227 5159
-y(\(whic)n(h)28 b(happ)r(ens)g(when)g(the)f(last)h(p)r(oin)n(ter)f(to)g
-(the)h(Ob)5 b(ject)28 b(is)f(ann)n(ulled\),)h(then)g(the)g(Ob)5
-b(ject)28 b(is)f(deleted.)0 5308 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_ANNUL\()d(THIS,)j(STATUS)f(\))0 5457
-y Fc(Argumen)m(ts:)259 5593 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en)g(and)
-g(Returned\))427 5693 y Fk(The)c(Ob)5 b(ject)27 b(p)r(oin)n(ter)h(to)f
-(b)r(e)h(ann)n(ulled.)37 b(A)28 b(n)n(ull)f(p)r(oin)n(ter)h(v)-5
-b(alue)27 b(\(AST)p Ft(__)p Fk(NULL\))h(is)g(alw)n(a)n(ys)d(returned.)p
-eop end
-%%Page: 190 200
-TeXDict begin 190 199 bop 0 52 a FG(190)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-451 y Fk(The)c(global)e(status.)0 606 y Fc(Class)31 b(Applicabilit)m
-(y:)259 735 y(Ob)5 b(ject)427 835 y Fk(This)28 b(routine)f(applies)g
-(to)h(all)f(Ob)5 b(jects.)0 990 y Fc(Notes:)340 1265
-y Fj(\017)45 b Fk(This)28 b(routine)f(attempts)g(to)h(execute)f(ev)n
-(en)g(if)g(ST)-7 b(A)g(TUS)29 b(is)e(set)g(to)h(an)f(error)e(v)-5
-b(alue)27 b(on)g(en)n(try)-7 b(,)27 b(although)427 1365
-y(no)34 b(further)f(error)f(rep)r(ort)h(will)h(b)r(e)g(made)g(if)g(it)g
-(subsequen)n(tly)f(fails)h(under)f(these)h(circumstances.)54
-b(In)427 1465 y(particular,)27 b(it)i(will)f(fail)g(if)h(the)f(p)r(oin)
-n(ter)g(suppled)g(is)g(not)g(v)-5 b(alid,)28 b(but)h(this)f(will)g
-(only)g(b)r(e)g(rep)r(orted)g(if)g(the)427 1564 y(error)e(status)h(is)h
-(clear)e(on)i(en)n(try)-7 b(.)p 0 1750 3780 12 v 0 1880
-a FA(AST)p Fe(_)p FA(AXANGLE)1214 1881 y Fd(Returns)38
-b(the)h(angle)f(from)f(an)1211 1996 y(axis,)h(to)g(a)h(line)f(through)f
-(t)m(w)m(o)1733 2107 y(p)s(oin)m(ts)2764 1880 y FA(AST)p
-Fe(_)p FA(AXANGLE)0 2282 y Fc(Description:)44 b Fk(This)35
-b(routine)f(\014nds)h(the)g(angle,)h(as)e(seen)h(from)f(p)r(oin)n(t)h
-(A,)g(b)r(et)n(w)n(een)g(the)g(p)r(ositiv)n(e)f(direction)g(of)h(a)227
-2381 y(sp)r(eci\014ed)28 b(axis,)f(and)g(the)h(geo)r(desic)f(curv)n(e)g
-(joining)g(p)r(oin)n(t)h(A)g(to)f(p)r(oin)n(t)h(B.)0
-2524 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_AXANGLE\()c
-(THIS,)i(A,)i(B,)g(AXIS,)e(STATUS)g(\))0 2666 y Fc(Argumen)m(ts:)259
-2796 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 2895
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7 b(rame.)259 3021
-y Fc(A\()32 b Fj(\003)g Fc(\))g(=)g(DOUBLE)g(PRECISION)f(\(Giv)m(en\))
-427 3121 y Fk(An)d(arra)n(y)c(with)k(one)f(elemen)n(t)g(for)f(eac)n(h)h
-(F)-7 b(rame)26 b(axis)g(\(Naxes)h(attribute\))h(con)n(taining)e(the)h
-(co)r(ordinates)427 3220 y(of)h(the)g(\014rst)f(p)r(oin)n(t.)259
-3346 y Fc(B\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m
-(en\))427 3446 y Fk(An)d(arra)n(y)c(with)k(one)f(elemen)n(t)g(for)f
-(eac)n(h)h(F)-7 b(rame)26 b(axis)g(\(Naxes)h(attribute\))h(con)n
-(taining)e(the)h(co)r(ordinates)427 3545 y(of)h(the)g(second)f(p)r(oin)
-n(t.)259 3671 y Fc(AXIS)33 b(=)f(INTEGER)f(\(Giv)m(en\))427
-3771 y Fk(The)24 b(n)n(um)n(b)r(er)g(of)f(the)h(F)-7
-b(rame)24 b(axis)f(from)g(whic)n(h)h(the)g(angle)f(is)g(to)h(b)r(e)g
-(measured)f(\(axis)g(n)n(um)n(b)r(ering)g(starts)427
-3870 y(at)28 b(1)f(for)g(the)h(\014rst)f(axis\).)259
-3996 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 4096 y Fk(The)c(global)e(status.)0 4251
-y Fc(Returned)32 b(V)-8 b(alue:)259 4380 y(AST)p Ft(_)p
-Fc(AXANGLE)33 b(=)f(DOUBLE)g(PRECISION)427 4480 y Fk(The)d(angle)g(in)g
-(radians,)f(from)h(the)g(p)r(ositiv)n(e)g(direction)f(of)h(the)h(sp)r
-(eci\014ed)f(axis,)g(to)g(the)g(line)g(AB.)h(If)f(the)427
-4580 y(F)-7 b(rame)28 b(is)g(2-dimensional,)g(it)g(will)h(b)r(e)g(in)f
-(the)h(range)e([-PI/2,+PI/2],)e(and)j(p)r(ositiv)n(e)g(rotation)f(is)i
-(in)f(the)427 4679 y(same)j(sense)f(as)g(rotation)g(from)g(the)i(p)r
-(ositiv)n(e)e(direction)g(of)h(axis)f(2)h(to)f(the)i(p)r(ositiv)n(e)e
-(direction)h(of)f(axis)427 4779 y(1.)43 b(If)30 b(the)g(F)-7
-b(rame)30 b(has)f(more)g(than)h(2)f(axes,)g(a)h(p)r(ositiv)n(e)f(v)-5
-b(alue)30 b(will)g(alw)n(a)n(ys)d(b)r(e)k(returned)e(in)h(the)g(range)
-427 4878 y(zero)d(to)g(PI.)0 5033 y Fc(Notes:)340 5309
-y Fj(\017)45 b Fk(The)28 b(geo)r(desic)f(curv)n(e)g(used)h(b)n(y)g
-(this)g(routine)g(is)g(the)g(path)g(of)g(shortest)g(distance)f(b)r(et)n
-(w)n(een)h(t)n(w)n(o)g(p)r(oin)n(ts,)427 5409 y(as)f(de\014ned)h(b)n(y)
-f(the)h(AST)p Ft(_)p Fk(DIST)-7 b(ANCE)29 b(function.)340
-5534 y Fj(\017)45 b Fk(This)19 b(function)g(will)g(return)f
-Ft(")p Fk(bad)p Ft(")g Fk(co)r(ordinate)g(v)-5 b(alues)18
-b(\(AST)p Ft(__)p Fk(BAD\))i(if)f(an)n(y)f(of)g(the)i(input)f(co)r
-(ordinates)427 5634 y(has)27 b(this)h(v)-5 b(alue,)28
-b(or)e(if)j(the)f(require)e(p)r(osition)h(angle)g(is)h(unde\014ned.)p
-eop end
-%%Page: 191 201
-TeXDict begin 191 200 bop 3643 52 a FG(191)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(AXDIST)-11 b(ANCE)1442
-483 y Fd(Find)39 b(the)f(distance)1454 583 y(b)s(et)m(w)m(een)g(t)m(w)m
-(o)f(axis)1735 682 y(v)-7 b(alues)2543 482 y FA(AST)p
-Fe(_)p FA(AXDIST)c(ANCE)0 843 y Fc(Description:)44 b
-Fk(This)28 b(routine)e(returns)h(a)g(signed)f(v)-5 b(alue)27
-b(represen)n(ting)f(the)i(axis)e(incremen)n(t)h(from)g(axis)f(v)-5
-b(alue)27 b(v1)g(to)227 942 y(axis)g(v)-5 b(alue)28 b(v2.)227
-1066 y(F)-7 b(or)24 b(a)g(simple)h(F)-7 b(rame,)25 b(this)g(is)f(a)h
-(trivial)f(op)r(eration)f(returning)h(the)h(di\013erence)g(b)r(et)n(w)n
-(een)f(the)h(t)n(w)n(o)f(axis)g(v)-5 b(alues.)227 1165
-y(But)28 b(for)f(other)g(deriv)n(ed)g(classes)f(of)i(F)-7
-b(rame)27 b(\(suc)n(h)h(as)e(a)i(SkyF)-7 b(rame\))27
-b(this)h(is)f(not)h(the)g(case.)0 1312 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_AXDISTANCE\()37 b(THIS,)42 b(AXIS,)f(V1,)i
-(V2,)f(STATUS)f(\))0 1459 y Fc(Argumen)m(ts:)259 1593
-y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 1693 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rame.)259 1823 y Fc(AXIS)33 b(=)f(INTEGER)f(\(Giv)m
-(en\))427 1922 y Fk(The)d(index)g(of)f(the)h(axis)f(to)g(whic)n(h)h
-(the)g(supplied)g(v)-5 b(alues)27 b(refer.)36 b(The)28
-b(\014rst)f(axis)g(has)g(index)h(1.)259 2053 y Fc(V1)k(=)g(DOUBLE)g
-(PRECISION)f(\(Giv)m(en\))427 2152 y Fk(The)d(\014rst)f(axis)g(v)-5
-b(alue.)259 2283 y Fc(V2)32 b(=)g(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427
-2382 y Fk(The)d(second)f(axis)g(v)-5 b(alue.)259 2513
-y Fc(ST)d(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-2612 y Fk(The)c(global)e(status.)0 2772 y Fc(Returned)32
-b(V)-8 b(alue:)259 2906 y(AST)p Ft(_)p Fc(AXDIST)g(ANCE)33
-b(=)f(DOUBLE)g(PRECISION)427 3005 y Fk(The)c(distance)f(from)h(the)f
-(\014rst)h(to)f(the)h(second)f(axis)g(v)-5 b(alue.)0
-3165 y Fc(Notes:)340 3444 y Fj(\017)45 b Fk(This)33 b(function)g(will)f
-(return)g(a)g Ft(")p Fk(bad)p Ft(")f Fk(result)h(v)-5
-b(alue)33 b(\(AST)p Ft(__)p Fk(BAD\))g(if)f(an)n(y)g(of)g(the)h(input)g
-(v)-5 b(alues)32 b(has)427 3544 y(this)c(v)-5 b(alue.)340
-3674 y Fj(\017)45 b Fk(A)29 b Ft(")p Fk(bad)p Ft(")f
-Fk(v)-5 b(alue)28 b(will)h(also)e(b)r(e)i(returned)f(if)h(this)g
-(function)g(is)f(in)n(v)n(ok)n(ed)f(with)i(ST)-7 b(A)g(TUS)30
-b(set)e(to)g(an)h(error)427 3774 y(v)-5 b(alue,)28 b(or)f(if)h(it)g
-(should)f(fail)h(for)f(an)n(y)g(reason.)p 0 3968 V 0
-4099 a FA(AST)p Fe(_)p FA(AX)l(OFFSET)1248 4100 y Fd(Add)38
-b(an)h(incremen)m(t)e(on)m(to)g(a)1408 4200 y(supplied)h(axis)g(v)-7
-b(alue)2722 4099 y FA(AST)p Fe(_)p FA(AX)l(OFFSET)0 4383
-y Fc(Description:)44 b Fk(This)19 b(routine)f(returns)g(an)g(axis)g(v)
--5 b(alue)19 b(formed)f(b)n(y)g(adding)h(a)f(signed)g(axis)g(incremen)n
-(t)g(on)n(to)g(a)g(supplied)227 4483 y(axis)27 b(v)-5
-b(alue.)227 4606 y(F)e(or)29 b(a)h(simple)g(F)-7 b(rame,)29
-b(this)i(is)e(a)h(trivial)f(op)r(eration)f(returning)h(the)i(sum)e(of)h
-(the)g(t)n(w)n(o)f(supplied)h(v)-5 b(alues.)43 b(But)227
-4706 y(for)27 b(other)g(deriv)n(ed)g(classes)f(of)i(F)-7
-b(rame)27 b(\(suc)n(h)h(as)f(a)g(SkyF)-7 b(rame\))27
-b(this)h(is)f(not)h(the)g(case.)0 4853 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_AXOFFSET\()38 b(THIS,)k(AXIS,)f(V1,)i(DIST,)e
-(STATUS)g(\))0 5000 y Fc(Argumen)m(ts:)259 5134 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 5233 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rame.)259 5363 y Fc(AXIS)33 b(=)f(INTEGER)f(\(Giv)m
-(en\))427 5463 y Fk(The)d(index)g(of)f(the)h(axis)f(to)g(whic)n(h)h
-(the)g(supplied)g(v)-5 b(alues)27 b(refer.)36 b(The)28
-b(\014rst)f(axis)g(has)g(index)h(1.)259 5593 y Fc(V1)k(=)g(DOUBLE)g
-(PRECISION)f(\(Giv)m(en\))427 5693 y Fk(The)d(original)e(axis)h(v)-5
-b(alue.)p eop end
-%%Page: 192 202
-TeXDict begin 192 201 bop 0 52 a FG(192)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(DIST)i(=)f(DOUBLE)g
-(PRECISION)f(\(Giv)m(en\))427 451 y Fk(The)d(axis)f(incremen)n(t)g(to)h
-(add)f(to)g(the)h(original)e(axis)h(v)-5 b(alue.)259
-572 y Fc(ST)d(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 672 y Fk(The)c(global)e(status.)0 822 y Fc(Returned)32
-b(V)-8 b(alue:)259 947 y(AST)p Ft(_)p Fc(AX)m(OFFSET)33
-b(=)f(DOUBLE)g(PRECISION)427 1047 y Fk(The)c(incremen)n(ted)f(axis)g(v)
--5 b(alue.)0 1198 y Fc(Notes:)340 1469 y Fj(\017)45 b
-Fk(This)33 b(function)g(will)f(return)g(a)g Ft(")p Fk(bad)p
-Ft(")f Fk(result)h(v)-5 b(alue)33 b(\(AST)p Ft(__)p Fk(BAD\))g(if)f(an)
-n(y)g(of)g(the)h(input)g(v)-5 b(alues)32 b(has)427 1568
-y(this)c(v)-5 b(alue.)340 1690 y Fj(\017)45 b Fk(A)29
-b Ft(")p Fk(bad)p Ft(")f Fk(v)-5 b(alue)28 b(will)h(also)e(b)r(e)i
-(returned)f(if)h(this)g(function)g(is)f(in)n(v)n(ok)n(ed)f(with)i(ST)-7
-b(A)g(TUS)30 b(set)e(to)g(an)h(error)427 1789 y(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 1966 3780 12 v 0 2097 a FA(AST)p Fe(_)p FA(BEGIN)1229
-2096 y Fd(Begin)38 b(a)g(new)h(AST)f(con)m(text)3003
-2097 y FA(AST)p Fe(_)p FA(BEGIN)0 2262 y Fc(Description:)44
-b Fk(This)34 b(routine)g(b)r(egins)g(a)g(new)g(AST)g(con)n(text.)56
-b(An)n(y)34 b(Ob)5 b(ject)34 b(p)r(oin)n(ters)g(created)f(within)i
-(this)f(con-)227 2362 y(text)f(will)f(b)r(e)h(ann)n(ulled)f(when)g(it)h
-(is)f(later)g(ended)g(using)g(AST)p Ft(_)p Fk(END)h(\(just)g(as)e(if)i
-(AST)p Ft(_)p Fk(ANNUL)g(had)f(b)r(een)227 2462 y(in)n(v)n(ok)n(ed\),)
-39 b(unless)e(they)h(ha)n(v)n(e)e(\014rst)h(b)r(een)h(exp)r(orted)f
-(using)h(AST)p Ft(_)p Fk(EXPOR)-7 b(T)36 b(or)h(rendered)f(exempt)i
-(using)227 2561 y(AST)p Ft(_)p Fk(EXEMPT.)22 b(If)h(ann)n(ulling)g(a)f
-(p)r(oin)n(ter)h(causes)f(an)g(Ob)5 b(ject's)23 b(RefCoun)n(t)g
-(attribute)g(to)g(fall)g(to)g(zero)e(\(whic)n(h)227 2661
-y(happ)r(ens)28 b(when)g(the)g(last)f(p)r(oin)n(ter)g(to)h(it)g(is)f
-(ann)n(ulled\),)h(then)g(the)g(Ob)5 b(ject)27 b(will)h(b)r(e)g
-(deleted.)0 2799 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42
-b(AST_BEGIN\()d(STATUS)i(\))0 2937 y Fc(Argumen)m(ts:)259
-3062 y(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 3162 y Fk(The)c(global)e(status.)0 3312
-y Fc(Class)31 b(Applicabilit)m(y:)259 3437 y(Ob)5 b(ject)427
-3537 y Fk(This)28 b(routine)f(applies)g(to)h(all)f(Ob)5
-b(jects.)0 3687 y Fc(Notes:)340 3958 y Fj(\017)45 b Fk(This)28
-b(routine)f(attempts)h(to)g(execute)f(ev)n(en)g(if)h(ST)-7
-b(A)g(TUS)29 b(is)e(set)h(to)f(an)h(error)d(v)-5 b(alue.)340
-4080 y Fj(\017)45 b Fk(Con)n(texts)27 b(delimited)i(b)n(y)e(AST)p
-Ft(_)p Fk(BEGIN)g(and)h(AST)p Ft(_)p Fk(END)g(ma)n(y)e(b)r(e)i(nested)g
-(to)g(an)n(y)e(depth.)p 0 4256 V 0 4387 a FA(AST)p Fe(_)p
-FA(BORDER)1177 4388 y Fd(Dra)m(w)38 b(a)g(b)s(order)g(around)g(v)-7
-b(alid)1468 4488 y(regions)37 b(of)h(a)h(Plot)2860 4387
-y FA(AST)p Fe(_)p FA(BORDER)0 4658 y Fc(Description:)44
-b Fk(This)32 b(function)h(dra)n(ws)e(a)h(\(line\))h(b)r(order)e(around)
-g(regions)g(of)h(the)g(plotting)h(area)d(of)i(a)g(Plot)g(whic)n(h)227
-4758 y(corresp)r(ond)d(to)h(v)-5 b(alid,)30 b(unclipp)r(ed)h(ph)n
-(ysical)f(co)r(ordinates.)42 b(F)-7 b(or)30 b(example,)g(when)g
-(plotting)g(using)g(an)g(all-sky)227 4858 y(map)g(pro)5
-b(jection,)29 b(this)h(function)g(could)f(b)r(e)h(used)g(to)f(dra)n(w)g
-(the)h(b)r(oundary)f(of)g(the)h(celestial)f(sphere)g(when)h(it)227
-4957 y(is)e(pro)5 b(jected)27 b(on)g(to)g(the)h(plotting)g(surface.)227
-5076 y(If)k(the)g(en)n(tire)f(plotting)g(area)f(con)n(tains)h(v)-5
-b(alid,)32 b(unclipp)r(ed)g(ph)n(ysical)f(co)r(ordinates,)g(then)h(the)
-g(b)r(oundary)e(will)227 5176 y(just)e(b)r(e)g(a)g(rectangular)d(b)r(o)
-n(x)i(around)g(the)h(edges)f(of)g(the)h(plotting)g(area.)227
-5295 y(If)19 b(the)g(Plot)f(is)h(a)f(Plot3D,)g(this)h(metho)r(d)g(is)f
-(applied)h(individually)g(to)f(eac)n(h)g(of)g(the)h(three)g(2D)f(Plots)
-g(encapsulated)227 5394 y(within)23 b(the)g(Plot3D)f(\(eac)n(h)f(of)i
-(these)f(Plots)f(corresp)r(onds)g(to)h(a)g(single)g(2D)g(plane)g(in)h
-(the)f(3D)h(graphics)d(system\).)227 5494 y(In)36 b(addition,)i(if)e
-(the)g(en)n(tire)f(plotting)h(v)n(olume)e(has)i(v)-5
-b(alid)35 b(co)r(ordinates)f(in)i(the)g(3D)g(curren)n(t)f(F)-7
-b(rame)35 b(of)g(the)227 5593 y(Plot3D,)g(then)i(additional)e(lines)g
-(are)g(dra)n(wn)g(along)f(the)i(edges)f(of)h(the)g(3D)f(plotting)h(v)n
-(olume)f(so)g(that)h(the)227 5693 y(en)n(tire)27 b(plotting)h(v)n
-(olume)f(is)h(enclosed)e(within)j(a)e(cub)r(oid)h(grid.)p
-eop end
-%%Page: 193 203
-TeXDict begin 193 202 bop 3643 52 a FG(193)0 351 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(RESULT)41 b(=)i(AST_BORDER\()c(THIS,)j(STATUS)f(\))0
-494 y Fc(Argumen)m(ts:)259 623 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))
-427 723 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259
-849 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 948 y Fk(The)c(global)e(status.)0 1103
-y Fc(Returned)32 b(V)-8 b(alue:)259 1233 y(AST)p Ft(_)p
-Fc(BORDER)31 b(=)h(LOGICAL)427 1332 y Fk(.F)-9 b(ALSE.)37
-b(is)g(returned)g(if)h(the)g(plotting)f(space)f(is)h(completely)g
-(\014lled)h(b)n(y)f(v)-5 b(alid,)39 b(unclipp)r(ed)f(ph)n(ysical)427
-1432 y(co)r(ordinates)23 b(\(so)h(that)g(only)g(a)g(rectangular)e(b)r
-(o)n(x)i(w)n(as)f(dra)n(wn)g(around)h(the)g(edge\).)36
-b(Otherwise,)24 b(.TR)n(UE.)427 1532 y(is)k(returned.)0
-1686 y Fc(Notes:)340 1962 y Fj(\017)45 b Fk(A)28 b(v)-5
-b(alue)28 b(of)f(.F)-9 b(ALSE.)28 b(will)g(b)r(e)g(returned)f(if)h
-(this)g(function)g(is)f(in)n(v)n(ok)n(ed)g(with)h(ST)-7
-b(A)g(TUS)28 b(set)g(to)f(an)h(error)427 2062 y(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)340
-2187 y Fj(\017)45 b Fk(An)23 b(error)e(results)h(if)i(either)e(the)h
-(curren)n(t)f(F)-7 b(rame)22 b(or)g(the)h(base)f(F)-7
-b(rame)23 b(of)f(the)h(Plot)g(is)f(not)h(2-dimensional)427
-2287 y(or)k(\(for)g(a)h(Plot3D\))f(3-dimensional.)340
-2413 y Fj(\017)45 b Fk(An)30 b(error)d(also)g(results)i(if)g(the)g
-(transformation)f(b)r(et)n(w)n(een)h(the)g(base)f(and)h(curren)n(t)f(F)
--7 b(rames)28 b(of)h(the)g(Plot)427 2513 y(is)f(not)f(de\014ned)h
-(\(i.e.)38 b(the)28 b(Plot's)e(T)-7 b(ranF)g(orw)n(ard)25
-b(attribute)j(is)g(zero\).)p 0 2698 3780 12 v 0 2829
-a FA(AST)p Fe(_)p FA(BOUNDINGBO)l(X)1661 2828 y Fd(Return)39
-b(a)1651 2928 y(b)s(ounding)1708 3042 y(b)s(o)m(x)f(for)1629
-3142 y(previously)1732 3257 y(dra)m(wn)1678 3356 y(graphics)2385
-2829 y FA(AST)p Fe(_)p FA(BOUNDINGBO)l(X)0 3531 y Fc(Description:)44
-b Fk(This)30 b(routine)e(returns)h(the)h(b)r(ounds)f(of)g(a)g(b)r(o)n
-(x)g(whic)n(h)g(just)h(encompasess)d(the)j(graphics)e(pro)r(duced)227
-3631 y(b)n(y)21 b(the)g(previous)f(call)h(to)g(an)n(y)f(of)h(the)h
-(Plot)e(metho)r(ds)h(whic)n(h)g(pro)r(duce)g(graphical)f(output.)35
-b(If)21 b(no)g(suc)n(h)g(previous)227 3730 y(call)26
-b(has)f(y)n(et)g(b)r(een)i(made,)f(or)e(if)j(the)f(call)f(failed)h(for)
-f(an)n(y)g(reason,)g(then)h(the)g(b)r(ounding)g(b)r(o)n(x)g(returned)f
-(b)n(y)g(this)227 3830 y(routine)i(is)h(unde\014ned.)0
-3972 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_BOUNDINGBOX)o(\()
-c(THIS,)j(LBND,)h(UBND,)f(STATUS)g(\))0 4115 y Fc(Argumen)m(ts:)259
-4244 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 4344
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259 4470 y Fc(LBND\()k(2)g(\))
-g(=)g(REAL)g(\(Returned\))427 4569 y Fk(A)26 b(t)n(w)n(o)f(elemen)n(t)g
-(arra)n(y)e(in)j(whic)n(h)f(is)g(returned)g(the)h(lo)n(w)n(er)e(limits)
-i(of)f(the)h(b)r(ounding)f(b)r(o)n(x)g(on)g(eac)n(h)g(of)g(the)427
-4669 y(t)n(w)n(o)i(axes)g(of)g(the)h(graphics)e(co)r(ordinate)h(system)
-g(\(the)h(base)f(F)-7 b(rame)28 b(of)f(the)h(Plot\).)259
-4795 y Fc(UBND\()k(2)g(\))g(=)g(REAL)g(\(Returned\))427
-4895 y Fk(A)h(t)n(w)n(o)f(elemen)n(t)g(arra)n(y)e(in)j(whic)n(h)f(is)h
-(returned)f(the)h(upp)r(er)f(limits)h(of)g(the)f(b)r(ounding)h(b)r(o)n
-(x)f(on)g(eac)n(h)g(of)427 4994 y(the)c(t)n(w)n(o)f(axes)g(of)g(the)h
-(graphics)e(co)r(ordinate)h(system)g(\(the)h(base)f(F)-7
-b(rame)27 b(of)h(the)g(Plot\).)259 5120 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 5220
-y Fk(The)c(global)e(status.)0 5375 y Fc(Notes:)340 5650
-y Fj(\017)45 b Fk(An)28 b(error)e(results)h(if)h(the)g(base)f(F)-7
-b(rame)27 b(of)h(the)g(Plot)f(is)g(not)h(2-dimensional.)p
-eop end
-%%Page: 194 204
-TeXDict begin 194 203 bop 0 52 a FG(194)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(BO)l(X)924 b Fd(Create)38
-b(a)g(Bo)m(x)926 b FA(AST)p Fe(_)p FA(BO)l(X)0 671 y
-Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g(Bo)n
-(x)g(and)g(optionally)g(initialises)g(its)h(attributes.)227
-801 y(The)35 b(Bo)n(x)f(class)g(implemen)n(ts)i(a)e(Region)g(whic)n(h)h
-(represen)n(ts)f(a)g(b)r(o)n(x)h(with)g(sides)g(parallel)f(to)h(the)g
-(axes)f(of)h(a)227 901 y(F)-7 b(rame)36 b(\(i.e.)64 b(an)36
-b(area)f(whic)n(h)i(encloses)e(a)h(giv)n(en)g(range)f(of)h(v)-5
-b(alues)37 b(on)f(eac)n(h)f(axis\).)63 b(A)37 b(Bo)n(x)f(is)g(similar)g
-(to)227 1001 y(an)h(In)n(terv)-5 b(al,)40 b(the)d(only)g(real)g
-(di\013erence)g(b)r(eing)g(that)h(the)g(In)n(terv)-5
-b(al)36 b(class)h(allo)n(ws)f(some)h(axis)f(limits)i(to)f(b)r(e)227
-1100 y(unsp)r(eci\014ed.)g(Note,)26 b(a)e(Bo)n(x)h(will)g(only)g(lo)r
-(ok)f(lik)n(e)h(a)g(b)r(o)n(x)g(if)g(the)h(F)-7 b(rame)25
-b(geometry)f(is)h(appro)n(ximately)e(\015at.)36 b(F)-7
-b(or)227 1200 y(instance,)34 b(a)e(Bo)n(x)f(cen)n(tred)h(close)f(to)h
-(a)g(p)r(ole)h(in)f(a)g(SkyF)-7 b(rame)32 b(will)g(lo)r(ok)g(more)f
-(lik)n(e)h(a)g(fan)h(than)f(a)g(b)r(o)n(x)g(\(the)227
-1299 y(P)n(olygon)26 b(class)g(can)i(b)r(e)g(used)f(to)h(create)e(a)h
-(b)r(o)n(x-lik)n(e)g(region)f(close)h(to)g(a)h(p)r(ole\).)0
-1461 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_BOX\()d
-(FRAME,)h(FORM,)h(POINT1,)f(POINT2,)f(UNC,)i(OPTIONS,)f(STATUS)g(\))0
-1623 y Fc(Argumen)m(ts:)259 1771 y(FRAME)31 b(=)h(INTEGER)g(\(Giv)m
-(en\))427 1871 y Fk(A)d(p)r(oin)n(ter)g(to)f(the)i(F)-7
-b(rame)28 b(in)h(whic)n(h)g(the)g(region)e(is)i(de\014ned.)41
-b(A)29 b(deep)g(cop)n(y)f(is)g(tak)n(en)g(of)h(the)g(supplied)427
-1970 y(F)-7 b(rame.)71 b(This)39 b(means)f(that)h(an)n(y)g(subsequen)n
-(t)f(c)n(hanges)g(made)h(to)f(the)i(F)-7 b(rame)38 b(using)h(the)g
-(supplied)427 2070 y(p)r(oin)n(ter)27 b(will)h(ha)n(v)n(e)f(no)g
-(e\013ect)h(the)g(Region.)259 2209 y Fc(F)m(ORM)j(=)h(INTEGER)g(\(Giv)m
-(en\))427 2309 y Fk(Indicates)g(ho)n(w)g(the)g(b)r(o)n(x)g(is)g
-(describ)r(ed)f(b)n(y)h(the)h(remaining)e(parameters.)48
-b(A)33 b(v)-5 b(alue)32 b(of)g(zero)f(indicates)427 2408
-y(that)d(the)g(b)r(o)n(x)f(is)h(sp)r(eci\014ed)g(b)n(y)f(a)g(cen)n(tre)
-g(p)r(osition)h(and)f(a)h(corner)e(p)r(osition.)36 b(A)28
-b(v)-5 b(alue)28 b(of)g(one)f(indicates)427 2508 y(that)h(the)g(b)r(o)n
-(x)f(is)h(sp)r(eci\014ed)g(b)n(y)f(a)g(t)n(w)n(o)g(opp)r(osite)g
-(corner)f(p)r(ositions.)259 2647 y Fc(POINT1\()32 b Fj(\003)f
-Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en\))427 2746
-y Fk(An)23 b(arra)n(y)d(with)j(one)f(elemen)n(t)h(for)f(eac)n(h)g(F)-7
-b(rame)22 b(axis)f(\(Naxes)i(attribute\).)35 b(If)23
-b(F)n(ORM)f(is)h(zero,)f(this)h(arra)n(y)427 2846 y(should)31
-b(con)n(tain)f(the)h(co)r(ordinates)e(at)i(the)g(cen)n(tre)f(of)h(the)g
-(b)r(o)n(x.)45 b(If)32 b(F)n(ORM)e(is)h(one,)g(it)g(should)f(con)n
-(tain)427 2946 y(the)e(co)r(ordinates)f(at)g(the)i(corner)d(of)i(the)g
-(b)r(o)n(x)f(whic)n(h)h(is)g(diagonally)e(opp)r(osite)h(the)h(corner)f
-(sp)r(eci\014ed)h(b)n(y)427 3045 y(POINT2.)259 3184 y
-Fc(POINT2\()k Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en\))
-427 3284 y Fk(An)d(arra)n(y)c(with)k(one)f(elemen)n(t)g(for)f(eac)n(h)h
-(F)-7 b(rame)26 b(axis)g(\(Naxes)h(attribute\))h(con)n(taining)e(the)h
-(co)r(ordinates)427 3383 y(at)h(an)n(y)f(corner)f(of)h(the)h(b)r(o)n
-(x.)259 3522 y Fc(UNC)k(=)g(INTEGER)f(\(Giv)m(en\))427
-3622 y Fk(An)i(optional)e(p)r(oin)n(ter)h(to)g(an)g(existing)g(Region)f
-(whic)n(h)h(sp)r(eci\014es)g(the)h(uncertain)n(ties)e(asso)r(ciated)g
-(with)427 3722 y(the)j(b)r(oundary)f(of)g(the)h(Bo)n(x)f(b)r(eing)g
-(created.)54 b(The)34 b(uncertain)n(t)n(y)e(in)i(an)n(y)f(p)r(oin)n(t)h
-(on)f(the)h(b)r(oundary)f(of)427 3821 y(the)g(Bo)n(x)e(is)h(found)h(b)n
-(y)f(shifting)h(the)f(supplied)h Ft(")p Fk(uncertain)n(t)n(y)p
-Ft(")e Fk(Region)g(so)h(that)g(it)h(is)f(cen)n(tred)g(at)g(the)427
-3921 y(b)r(oundary)e(p)r(oin)n(t)h(b)r(eing)g(considered.)44
-b(The)31 b(area)e(co)n(v)n(ered)g(b)n(y)h(the)h(shifted)g(uncertain)n
-(t)n(y)f(Region)g(then)427 4020 y(represen)n(ts)g(the)i(uncertain)n(t)n
-(y)f(in)g(the)h(b)r(oundary)f(p)r(osition.)48 b(The)31
-b(uncertain)n(t)n(y)g(is)g(assumed)g(to)g(b)r(e)h(the)427
-4120 y(same)27 b(for)g(all)h(p)r(oin)n(ts.)427 4239 y(If)38
-b(supplied,)j(the)d(uncertain)n(t)n(y)f(Region)g(m)n(ust)g(b)r(e)i(of)e
-(a)g(class)g(for)g(whic)n(h)h(all)f(instances)g(are)g(cen)n(tro-)427
-4339 y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24 b(Circle,)g(Ellipse,)h
-(etc.\))36 b(or)23 b(b)r(e)i(a)e(Prism)h(con)n(taining)f(cen)n
-(tro-symetric)f(comp)r(onen)n(t)427 4439 y(Regions.)57
-b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f(will)g(b)r(e)h
-(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)427
-4538 y(uncertain)n(t)n(y)g(Region)g(using)g(the)h(supplied)g(p)r(oin)n
-(ter)g(will)f(ha)n(v)n(e)g(no)g(e\013ect)h(on)g(the)g(created)f(Bo)n
-(x.)57 b(Al-)427 4638 y(ternativ)n(ely)-7 b(,)34 b(a)f(n)n(ull)g(Ob)5
-b(ject)33 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fk(NULL\))g(ma)n(y)f(b)r(e)
-i(supplied,)h(in)e(whic)n(h)g(case)f(a)h(default)427
-4737 y(uncertain)n(t)n(y)27 b(is)g(used)h(equiv)-5 b(alen)n(t)27
-b(to)h(a)f(b)r(o)n(x)g(1.0E-6)f(of)h(the)h(size)f(of)h(the)g(Bo)n(x)e
-(b)r(eing)i(created.)427 4857 y(The)h(uncertain)n(t)n(y)f(Region)g(has)
-h(t)n(w)n(o)f(uses:)39 b(1\))29 b(when)g(the)g(AST)p
-Ft(_)p Fk(O)n(VERLAP)f(function)h(compares)e(t)n(w)n(o)427
-4956 y(Regions)j(for)g(equalit)n(y)g(the)h(uncertain)n(t)n(y)f(Region)g
-(is)g(used)h(to)g(determine)f(the)h(tolerance)f(on)g(the)h(com-)427
-5056 y(parison,)23 b(and)g(2\))g(when)g(a)f(Region)h(is)g(mapp)r(ed)g
-(in)n(to)g(a)f(di\013eren)n(t)i(co)r(ordinate)d(system)i(and)g
-(subsequen)n(tly)427 5156 y(simpli\014ed)e(\(using)f(AST)p
-Ft(_)p Fk(SIMPLIFY\),)h(the)f(uncertain)n(ties)g(are)f(used)h(to)g
-(determine)g(if)h(the)g(transformed)427 5255 y(b)r(oundary)27
-b(can)g(b)r(e)h(accurately)f(represen)n(ted)f(b)n(y)h(a)g(sp)r
-(eci\014c)h(shap)r(e)g(of)f(Region.)259 5394 y Fc(OPTIONS)32
-b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))
-427 5494 y Fk(A)g(c)n(haracter)e(string)h(con)n(taining)f(an)h
-(optional)g(comma-separated)e(list)j(of)g(attribute)f(assignmen)n(ts)g
-(to)427 5593 y(b)r(e)f(used)f(for)g(initialising)g(the)h(new)f(Bo)n(x.)
-41 b(The)30 b(syn)n(tax)e(used)h(is)h(iden)n(tical)f(to)g(that)g(for)g
-(the)h(AST)p Ft(_)p Fk(SET)427 5693 y(routine.)p eop
-end
-%%Page: 195 205
-TeXDict begin 195 204 bop 3643 52 a FG(195)259 351 y
-Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-451 y Fk(The)c(global)e(status.)0 622 y Fc(Returned)32
-b(V)-8 b(alue:)259 767 y(AST)p Ft(_)p Fc(BO)m(X)32 b(=)g(INTEGER)427
-867 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(Bo)n(x.)0
-1037 y Fc(Notes:)340 1329 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 1428 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)-2
-1599 y Fc(Status)33 b(Handling)n(:)227 1745 y Fk(The)d(protected)g(in)n
-(terface)f(to)g(this)h(function)h(includes)f(an)f(extra)g(parameter)f
-(at)i(the)g(end)g(of)g(the)g(parameter)227 1845 y(list)37
-b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)
-r(oin)n(ter)g(to)h(the)g(in)n(teger)e(inherited)i(status)f(v)-5
-b(ariable:)54 b Ft(")p Fk(in)n(t)227 1945 y Fj(\003)p
-Fk(status)p Ft(")p Fk(.)p 0 2153 3780 12 v 0 2283 a FA(AST)p
-Fe(_)p FA(CHANNEL)1441 2284 y Fd(Create)37 b(a)i(Channel)2765
-2283 y FA(AST)p Fe(_)p FA(CHANNEL)0 2469 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(Channel)h(and)f
-(optionally)g(initialises)g(its)h(attributes.)227 2598
-y(A)22 b(Channel)g(implemen)n(ts)g(lo)n(w-lev)n(el)e(input/output)i
-(for)f(the)i(AST)f(library)-7 b(.)33 b(W)-7 b(riting)22
-b(an)f(Ob)5 b(ject)22 b(to)f(a)h(Channel)227 2698 y(\(using)34
-b(AST)p Ft(_)p Fk(WRITE\))h(will)f(generate)f(a)h(textual)g(represen)n
-(tation)e(of)i(that)h(Ob)5 b(ject,)35 b(and)f(reading)f(from)h(a)227
-2797 y(Channel)28 b(\(using)f(AST)p Ft(_)p Fk(READ\))h(will)g(create)f
-(a)g(new)h(Ob)5 b(ject)27 b(from)h(its)f(textual)h(represen)n(tation.)
-227 2926 y(Normally)-7 b(,)22 b(when)h(y)n(ou)e(use)g(a)h(Channel,)h(y)
-n(ou)e(should)h(pro)n(vide)e Ft(")p Fk(source)p Ft(")g
-Fk(and)i Ft(")p Fk(sink)p Ft(")f Fk(routines)g(whic)n(h)h(connect)227
-3026 y(it)38 b(to)f(an)f(external)h(data)f(store)g(b)n(y)h(reading)f
-(and)h(writing)f(the)i(resulting)e(text.)66 b(By)37 b(default,)j(ho)n
-(w)n(ev)n(er,)d(a)227 3126 y(Channel)28 b(will)g(read)e(from)i
-(standard)e(input)j(and)e(write)g(to)h(standard)e(output.)0
-3284 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_CHANNEL\()c
-(SOURCE,)h(SINK,)i(OPTIONS,)e(STATUS)h(\))0 3442 y Fc(Argumen)m(ts:)259
-3587 y(SOUR)m(CE)32 b(=)g(SUBR)m(OUTINE)g(\(Giv)m(en\))427
-3687 y Fk(A)g(source)e(routine,)j(whic)n(h)e(is)h(a)f(subroutine)g
-(whic)n(h)g(tak)n(es)g(a)g(single)g(in)n(teger)g(error)e(status)j
-(argumen)n(t.)427 3787 y(This)25 b(routine)g(will)g(b)r(e)g(used)g(b)n
-(y)f(the)i(Channel)e(to)h(obtain)g(lines)f(of)h(input)h(text.)36
-b(On)25 b(eac)n(h)f(in)n(v)n(o)r(cation,)g(it)427 3886
-y(should)j(read)f(the)i(next)f(input)h(line)g(from)e(some)h(external)f
-(data)h(store,)f(and)h(then)h(return)f(the)g(resulting)427
-3986 y(text)32 b(to)f(the)g(AST)h(library)e(b)n(y)h(calling)f(AST)p
-Ft(_)p Fk(PUTLINE.)h(It)g(should)g(supply)g(a)g(negativ)n(e)f(line)i
-(length)427 4086 y(when)g(there)g(are)f(no)g(more)g(lines)h(to)g(read.)
-48 b(If)33 b(an)e(error)f(o)r(ccurs,)i(it)g(should)g(set)g(its)g(o)n
-(wn)f(error)f(status)427 4185 y(argumen)n(t)d(to)g(an)h(error)d(v)-5
-b(alue)28 b(b)r(efore)f(returning.)427 4304 y(If)g(the)g(n)n(ull)f
-(routine)g(AST)p Ft(_)p Fk(NULL)h(is)f(suppied)h(as)e(the)i(SOUR)n(CE)f
-(v)-5 b(alue,)26 b(the)h(Channel)f(will)g(read)g(from)427
-4403 y(standard)h(input)h(instead.)259 4541 y Fc(SINK)k(=)g(SUBR)m
-(OUTINE)g(\(Giv)m(en\))427 4640 y Fk(A)24 b(sink)f(routine,)h(whic)n(h)
-f(is)g(a)g(subroutine)g(whic)n(h)g(tak)n(es)f(a)h(single)g(in)n(teger)f
-(error)f(status)i(argumen)n(t.)35 b(This)427 4740 y(routine)d(will)h(b)
-r(e)f(used)h(b)n(y)f(the)g(Channel)g(to)h(deliv)n(er)e(lines)h(of)g
-(output)h(text.)51 b(On)33 b(eac)n(h)e(in)n(v)n(o)r(cation,)h(it)427
-4840 y(should)k(obtain)g(the)g(next)g(output)h(line)f(from)g(the)g(AST)
-h(library)d(b)n(y)i(calling)f(AST)p Ft(_)p Fk(GETLINE,)h(and)427
-4939 y(then)31 b(deliv)n(er)f(the)h(resulting)f(text)g(to)h(some)f
-(external)f(data)h(store.)45 b(If)31 b(an)f(error)e(o)r(ccurs,)i(it)h
-(should)g(set)427 5039 y(its)d(o)n(wn)f(error)f(status)h(argumen)n(t)g
-(to)g(an)g(error)f(v)-5 b(alue)27 b(b)r(efore)h(returning.)427
-5157 y(If)41 b(the)g(n)n(ull)f(routine)g(AST)p Ft(_)p
-Fk(NULL)h(is)f(suppied)g(as)g(the)h(SINK)f(v)-5 b(alue,)43
-b(the)e(Channel)f(will)h(write)f(to)427 5257 y(standard)27
-b(output)h(instead.)259 5394 y Fc(OPTIONS)k(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-5494 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h(optional)
-f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f(to)g(b)r
-(e)427 5593 y(used)27 b(for)f(initialising)g(the)h(new)g(Channel.)37
-b(The)26 b(syn)n(tax)g(used)h(is)f(iden)n(tical)g(to)h(that)g(for)f
-(the)h(AST)p Ft(_)p Fk(SET)427 5693 y(routine.)p eop
-end
-%%Page: 196 206
-TeXDict begin 196 205 bop 0 52 a FG(196)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-451 y Fk(The)c(global)e(status.)0 609 y Fc(Returned)32
-b(V)-8 b(alue:)259 741 y(AST)p Ft(_)p Fc(CHANNEL)32 b(=)g(INTEGER)427
-841 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(Channel.)0
-999 y Fc(Notes:)340 1278 y Fj(\017)45 b Fk(The)35 b(names)f(of)g(the)h
-(routines)f(supplied)h(for)f(the)h(SOUR)n(CE)f(and)g(SINK)h(argumen)n
-(ts)e(should)i(app)r(ear)427 1377 y(in)25 b(EXTERNAL)g(statemen)n(ts)g
-(in)g(the)g(F)-7 b(ortran)24 b(routine)g(whic)n(h)h(in)n(v)n(ok)n(es)e
-(AST)p Ft(_)p Fk(CHANNEL.)j(Ho)n(w)n(ev)n(er,)427 1477
-y(this)36 b(is)f(not)g(generally)f(necessary)f(for)i(the)g(n)n(ull)h
-(routine)f(AST)p Ft(_)p Fk(NULL)g(\(so)g(long)f(as)h(the)h(AST)p
-Ft(_)p Fk(P)-7 b(AR)427 1576 y(include)28 b(\014le)g(has)f(b)r(een)h
-(used\).)340 1705 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 1805 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)340
-1934 y Fj(\017)45 b Fk(Note)36 b(that)f(the)h(n)n(ull)f(routine)g(AST)p
-Ft(_)p Fk(NULL)h(\(one)f(underscore\))f(is)h(di\013eren)n(t)h(to)f(AST)
-p Ft(__)p Fk(NULL)g(\(t)n(w)n(o)427 2034 y(underscores\),)26
-b(whic)n(h)i(is)f(the)h(n)n(ull)g(Ob)5 b(ject)28 b(p)r(oin)n(ter.)p
-0 2225 3780 12 v 0 2356 a FA(AST)p Fe(_)p FA(CIR)l(CLE)1503
-2357 y Fd(Create)37 b(a)i(Circle)2938 2356 y FA(AST)p
-Fe(_)p FA(CIR)l(CLE)0 2524 y Fc(Description:)44 b Fk(This)28
-b(function)g(creates)f(a)g(new)g(Circle)g(and)h(optionally)f
-(initialises)g(its)h(attributes.)227 2647 y(A)g(Circle)f(is)h(a)f
-(Region)g(whic)n(h)g(represen)n(ts)g(a)g(circle)g(or)f(sphere)h(within)
-i(the)f(supplied)g(F)-7 b(rame.)0 2793 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_CIRCLE\()c(FRAME,)i(FORM,)h(CENTRE,)e(POINT,)h
-(UNC,)h(OPTIONS,)f(STATUS)g(\))0 2938 y Fc(Argumen)m(ts:)259
-3071 y(FRAME)31 b(=)h(INTEGER)g(\(Giv)m(en\))427 3170
-y Fk(A)d(p)r(oin)n(ter)g(to)f(the)i(F)-7 b(rame)28 b(in)h(whic)n(h)g
-(the)g(region)e(is)i(de\014ned.)41 b(A)29 b(deep)g(cop)n(y)f(is)g(tak)n
-(en)g(of)h(the)g(supplied)427 3270 y(F)-7 b(rame.)71
-b(This)39 b(means)f(that)h(an)n(y)g(subsequen)n(t)f(c)n(hanges)g(made)h
-(to)f(the)i(F)-7 b(rame)38 b(using)h(the)g(supplied)427
-3369 y(p)r(oin)n(ter)27 b(will)h(ha)n(v)n(e)f(no)g(e\013ect)h(the)g
-(Region.)259 3498 y Fc(F)m(ORM)j(=)h(INTEGER)g(\(Giv)m(en\))427
-3598 y Fk(Indicates)c(ho)n(w)g(the)h(circle)f(is)g(describ)r(ed)h(b)n
-(y)f(the)h(remaining)e(parameters.)38 b(A)29 b(v)-5 b(alue)28
-b(of)g(zero)g(indicates)427 3698 y(that)h(the)f(circle)f(is)h(sp)r
-(eci\014ed)h(b)n(y)e(a)h(cen)n(tre)f(p)r(osition)h(and)g(a)g(p)r
-(osition)g(on)f(the)i(circumference.)37 b(A)29 b(v)-5
-b(alue)427 3797 y(of)28 b(one)f(indicates)g(that)h(the)g(circle)f(is)h
-(sp)r(eci\014ed)g(b)n(y)f(a)g(cen)n(tre)g(p)r(osition)h(and)f(a)g
-(scalar)f(radius.)259 3926 y Fc(CENTRE\()31 b Fj(\003)h
-Fc(\))f(=)i(DOUBLE)f(PRECISION)f(\(Giv)m(en\))427 4026
-y Fk(An)d(arra)n(y)c(with)k(one)f(elemen)n(t)g(for)f(eac)n(h)h(F)-7
-b(rame)26 b(axis)g(\(Naxes)h(attribute\))h(con)n(taining)e(the)h(co)r
-(ordinates)427 4125 y(at)h(the)g(cen)n(tre)f(of)g(the)h(circle)f(or)g
-(sphere.)259 4254 y Fc(POINT\()32 b Fj(\003)g Fc(\))g(=)g(DOUBLE)g
-(PRECISION)f(\(Giv)m(en\))427 4354 y Fk(If)k(F)n(ORM)f(is)g(zero,)h
-(then)g(this)f(arra)n(y)e(should)i(ha)n(v)n(e)f(one)h(elemen)n(t)g(for)
-g(eac)n(h)f(F)-7 b(rame)34 b(axis)f(\(Naxes)h(at-)427
-4454 y(tribute\),)e(and)e(should)g(b)r(e)h(supplied)f(holding)g(the)h
-(co)r(ordinates)e(at)h(a)g(p)r(oin)n(t)g(on)g(the)h(circumference)f(of)
-427 4553 y(the)k(circle)e(or)h(sphere.)53 b(If)33 b(F)n(ORM)g(is)g
-(one,)i(then)e(this)h(arra)n(y)d(should)i(ha)n(v)n(e)f(one)h(elemen)n
-(t)g(only)g(whic)n(h)427 4653 y(should)h(b)r(e)g(supplied)g(holding)f
-(the)h(scalar)e(radius)h(of)h(the)g(circle)f(or)g(sphere,)i(as)e(a)g
-(geo)r(desic)g(distance)427 4752 y(within)c(the)f(F)-7
-b(rame.)259 4881 y Fc(UNC)32 b(=)g(INTEGER)f(\(Giv)m(en\))427
-4981 y Fk(An)i(optional)e(p)r(oin)n(ter)h(to)g(an)g(existing)g(Region)f
-(whic)n(h)h(sp)r(eci\014es)g(the)h(uncertain)n(ties)e(asso)r(ciated)g
-(with)427 5081 y(the)f(b)r(oundary)f(of)g(the)h(Circle)f(b)r(eing)g
-(created.)41 b(The)30 b(uncertain)n(t)n(y)e(in)i(an)n(y)f(p)r(oin)n(t)g
-(on)g(the)h(b)r(oundary)f(of)427 5180 y(the)g(Circle)e(is)h(found)g(b)n
-(y)f(shifting)i(the)f(supplied)g Ft(")p Fk(uncertain)n(t)n(y)p
-Ft(")e Fk(Region)i(so)f(that)h(it)g(is)g(cen)n(tred)f(at)h(the)427
-5280 y(b)r(oundary)i(p)r(oin)n(t)h(b)r(eing)g(considered.)44
-b(The)31 b(area)e(co)n(v)n(ered)g(b)n(y)h(the)h(shifted)g(uncertain)n
-(t)n(y)f(Region)g(then)427 5379 y(represen)n(ts)g(the)i(uncertain)n(t)n
-(y)f(in)g(the)h(b)r(oundary)f(p)r(osition.)48 b(The)31
-b(uncertain)n(t)n(y)g(is)g(assumed)g(to)g(b)r(e)h(the)427
-5479 y(same)27 b(for)g(all)h(p)r(oin)n(ts.)427 5593 y(If)38
-b(supplied,)j(the)d(uncertain)n(t)n(y)f(Region)g(m)n(ust)g(b)r(e)i(of)e
-(a)g(class)g(for)g(whic)n(h)h(all)f(instances)g(are)g(cen)n(tro-)427
-5693 y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24 b(Circle,)g(Ellipse,)h
-(etc.\))36 b(or)23 b(b)r(e)i(a)e(Prism)h(con)n(taining)f(cen)n
-(tro-symetric)f(comp)r(onen)n(t)p eop end
-%%Page: 197 207
-TeXDict begin 197 206 bop 3643 52 a FG(197)427 351 y
-Fk(Regions.)57 b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f
-(will)g(b)r(e)h(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)
-427 451 y(uncertain)n(t)n(y)c(Region)f(using)h(the)h(supplied)f(p)r
-(oin)n(ter)g(will)h(ha)n(v)n(e)e(no)h(e\013ect)g(on)g(the)h(created)e
-(Circle.)45 b(Al-)427 551 y(ternativ)n(ely)-7 b(,)34
-b(a)f(n)n(ull)g(Ob)5 b(ject)33 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fk(NULL\))g(ma)n(y)f(b)r(e)i(supplied,)h(in)e(whic)n(h)g(case)f
-(a)h(default)427 650 y(uncertain)n(t)n(y)27 b(is)g(used)h(equiv)-5
-b(alen)n(t)27 b(to)h(a)f(b)r(o)n(x)g(1.0E-6)f(of)h(the)h(size)f(of)h
-(the)g(Circle)f(b)r(eing)h(created.)427 765 y(The)h(uncertain)n(t)n(y)f
-(Region)g(has)h(t)n(w)n(o)f(uses:)39 b(1\))29 b(when)g(the)g(AST)p
-Ft(_)p Fk(O)n(VERLAP)f(function)h(compares)e(t)n(w)n(o)427
-865 y(Regions)j(for)g(equalit)n(y)g(the)h(uncertain)n(t)n(y)f(Region)g
-(is)g(used)h(to)g(determine)f(the)h(tolerance)f(on)g(the)h(com-)427
-964 y(parison,)23 b(and)g(2\))g(when)g(a)f(Region)h(is)g(mapp)r(ed)g
-(in)n(to)g(a)f(di\013eren)n(t)i(co)r(ordinate)d(system)i(and)g
-(subsequen)n(tly)427 1064 y(simpli\014ed)e(\(using)f(AST)p
-Ft(_)p Fk(SIMPLIFY\),)h(the)f(uncertain)n(ties)g(are)f(used)h(to)g
-(determine)g(if)h(the)g(transformed)427 1164 y(b)r(oundary)27
-b(can)g(b)r(e)h(accurately)f(represen)n(ted)f(b)n(y)h(a)g(sp)r
-(eci\014c)h(shap)r(e)g(of)f(Region.)259 1294 y Fc(OPTIONS)32
-b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))
-427 1393 y Fk(A)g(c)n(haracter)e(string)h(con)n(taining)f(an)h
-(optional)g(comma-separated)e(list)j(of)g(attribute)f(assignmen)n(ts)g
-(to)427 1493 y(b)r(e)26 b(used)f(for)f(initialising)h(the)g(new)g
-(Circle.)36 b(The)25 b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)g
-(that)g(for)g(the)g(AST)p Ft(_)p Fk(SET)427 1593 y(routine.)259
-1723 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 1822 y Fk(The)c(global)e(status.)0 1982
-y Fc(Returned)32 b(V)-8 b(alue:)259 2115 y(AST)p Ft(_)p
-Fc(CIR)m(CLE)32 b(=)g(INTEGER)427 2215 y Fk(A)c(p)r(oin)n(ter)f(to)h
-(the)g(new)g(Circle.)0 2374 y Fc(Notes:)340 2654 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 2754
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 2948 3780 12 v 0 3078
-a FA(AST)p Fe(_)p FA(CIR)l(CLEP)-11 b(ARS)1586 3079 y
-Fd(Returns)39 b(the)1643 3179 y(geometric)1459 3294 y(parameters)d(of)i
-(an)1740 3408 y(Circle)2581 3078 y FA(AST)p Fe(_)p FA(CIR)l(CLEP)-11
-b(ARS)0 3568 y Fc(Description:)44 b Fk(This)28 b(routine)f(returns)g
-(the)h(geometric)e(parameters)g(describing)h(the)h(supplied)g(Circle.)0
-3715 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_CIRCLEPARS\()37
-b(THIS,)42 b(CENTRE,)e(RADIUS,)h(P1,)h(STATUS)f(\))0
-3862 y Fc(Argumen)m(ts:)259 3996 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 4095 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259
-4226 y Fc(CENTRE\()j Fj(\003)h Fc(\))f(=)i(DOUBLE)f(PRECISION)f
-(\(Returned\))427 4325 y Fk(An)j(arra)n(y)c(in)k(whic)n(h)f(to)g
-(return)f(the)i(co)r(ordinates)d(of)i(the)g(Circle)g(cen)n(tre.)52
-b(The)34 b(length)f(of)g(this)g(arra)n(y)427 4425 y(should)28
-b(b)r(e)g(no)f(less)g(than)h(the)g(n)n(um)n(b)r(er)f(of)h(axes)e(in)i
-(the)g(asso)r(ciated)e(co)r(ordinate)h(system.)259 4555
-y Fc(RADIUS)33 b(=)f(DOUBLE)g(PRECISION)f(\(Returned\))427
-4655 y Fk(Returned)22 b(holding)f(the)h(radius)f(of)g(the)h(Circle,)g
-(as)f(an)g(geo)r(desic)g(distance)g(in)h(the)g(asso)r(ciated)e(co)r
-(ordinate)427 4754 y(system.)259 4884 y Fc(P1\()32 b
-Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Returned\))427
-4984 y Fk(An)23 b(arra)n(y)c(in)k(whic)n(h)f(to)g(return)f(the)i(co)r
-(ordinates)d(of)i(a)g(p)r(oin)n(t)g(on)g(the)g(circumference)g(of)g
-(the)g(Circle.)35 b(The)427 5084 y(length)c(of)g(this)f(arra)n(y)f
-(should)h(b)r(e)h(no)f(less)g(than)h(the)g(n)n(um)n(b)r(er)f(of)h(axes)
-f(in)h(the)g(asso)r(ciated)e(co)r(ordinate)427 5183 y(system.)259
-5314 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5413 y Fk(The)c(global)e(status.)0 5572
-y Fc(Notes:)p eop end
-%%Page: 198 208
-TeXDict begin 198 207 bop 0 52 a FG(198)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(If)24 b(the)g(co)r(ordinate)e(system)h(represen)n(ted)f(b)n(y)h
-(the)g(Circle)g(has)g(b)r(een)g(c)n(hanged)f(since)h(it)h(w)n(as)e
-(\014rst)h(created,)427 451 y(the)c(returned)f(parameters)f(refer)h(to)
-h(the)g(new)f(\(c)n(hanged\))g(co)r(ordinate)g(system,)i(rather)d(than)
-i(the)g(original)427 551 y(co)r(ordinate)27 b(system.)37
-b(Note)28 b(ho)n(w)n(ev)n(er)e(that)i(if)g(the)g(transformation)f(from)
-g(original)f(to)i(new)g(co)r(ordinate)427 650 y(system)38
-b(is)h(non-linear,)h(the)f(shap)r(e)f(represen)n(ted)f(b)n(y)h(the)h
-(supplied)g(Circle)f(ob)5 b(ject)38 b(ma)n(y)g(not)g(b)r(e)h(an)427
-750 y(accurate)27 b(circle.)p 0 951 3780 12 v 0 1082
-a FA(AST)p Fe(_)p FA(CLEAR)968 1083 y Fd(Clear)37 b(attribute)f(v)-7
-b(alues)39 b(for)e(an)i(Ob)7 b(ject)2980 1082 y FA(AST)p
-Fe(_)p FA(CLEAR)0 1273 y Fc(Description:)44 b Fk(This)31
-b(routine)g(clears)e(the)i(v)-5 b(alues)31 b(of)f(a)h(sp)r(eci\014ed)g
-(set)g(of)f(attributes)h(for)f(an)h(Ob)5 b(ject.)46 b(Clearing)30
-b(an)227 1373 y(attribute)21 b(cancels)e(an)n(y)g(v)-5
-b(alue)20 b(that)h(has)e(previously)g(b)r(een)i(explicitly)f(set)g(for)
-g(it,)i(so)d(that)i(the)f(standard)f(default)227 1473
-y(attribute)35 b(v)-5 b(alue)34 b(will)h(subsequen)n(tly)f(b)r(e)g
-(used)h(instead.)57 b(This)34 b(also)g(causes)f(the)i(AST)p
-Ft(_)p Fk(TEST)f(function)h(to)227 1572 y(return)27 b(the)h(v)-5
-b(alue)28 b(.F)-9 b(ALSE.)27 b(for)g(the)h(attribute,)g(indicating)g
-(that)g(no)f(v)-5 b(alue)27 b(has)g(b)r(een)h(set.)0
-1724 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_CLEAR\()d(THIS,)j
-(ATTRIB,)e(STATUS)h(\))0 1875 y Fc(Argumen)m(ts:)259
-2013 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 2113
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject.)259 2247
-y Fc(A)-8 b(TTRIB)33 b(=)f(CHARA)m(CTER)f Fj(\003)h Fc(\()g
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 2347 y Fk(A)j(c)n(haracter)d(string)
-h(con)n(taining)h(a)f(comma-separated)f(list)j(of)f(the)h(names)e(of)h
-(the)h(attributes)f(to)g(b)r(e)427 2446 y(cleared.)259
-2580 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 2680 y Fk(The)c(global)e(status.)0 2843
-y Fc(Class)31 b(Applicabilit)m(y:)259 2982 y(Ob)5 b(ject)427
-3081 y Fk(This)28 b(routine)f(applies)g(to)h(all)f(Ob)5
-b(jects.)0 3245 y Fc(Notes:)340 3530 y Fj(\017)45 b Fk(A)n(ttribute)28
-b(names)g(are)e(not)i(case)f(sensitiv)n(e)g(and)g(ma)n(y)g(b)r(e)h
-(surrounded)e(b)n(y)i(white)g(space.)340 3664 y Fj(\017)45
-b Fk(It)28 b(do)r(es)f(no)h(harm)f(to)g(clear)g(an)g(attribute)h(whose)
-f(v)-5 b(alue)27 b(has)g(not)h(b)r(een)g(set.)340 3797
-y Fj(\017)45 b Fk(An)28 b(error)e(will)i(result)f(if)h(an)g(attempt)g
-(is)f(made)h(to)f(clear)g(the)h(v)-5 b(alue)27 b(of)h(a)f(read-only)f
-(attribute.)p 0 3999 V 0 4129 a FA(AST)p Fe(_)p FA(CLIP)965
-4130 y Fd(Set)39 b(up)g(or)f(remo)m(v)m(e)f(clipping)g(for)h(a)h(Plot)
-3128 4129 y FA(AST)p Fe(_)p FA(CLIP)0 4321 y Fc(Description:)44
-b Fk(This)28 b(routine)g(de\014nes)g(regions)e(of)i(a)g(Plot)f(whic)n
-(h)h(are)f(to)h(b)r(e)g(clipp)r(ed.)39 b(An)n(y)28 b(subsequen)n(t)f
-(graphical)227 4421 y(output)f(created)f(using)g(the)g(Plot)g(will)g
-(then)h(b)r(e)g(visible)f(only)g(within)h(the)g(unclipp)r(ed)g(regions)
-e(of)h(the)h(plotting)227 4520 y(area.)36 b(See)27 b(also)g(the)h(Clip)
-g(attribute.)0 4672 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42
-b(AST_CLIP\()e(THIS,)h(IFRAME,)g(LBND,)g(UBND,)h(STATUS)f(\))0
-4823 y Fc(Argumen)m(ts:)259 4961 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 5061 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259
-5195 y Fc(IFRAME)j(=)h(INTEGER)g(\(Giv)m(en\))427 5295
-y Fk(The)e(index)g(of)f(the)i(F)-7 b(rame)29 b(within)h(the)g(Plot)f
-(to)h(whic)n(h)g(the)g(clipping)f(limits)i(supplied)f(in)g(LBND)g(and)
-427 5394 y(UBND)i(\(b)r(elo)n(w\))g(refer.)47 b(Clipping)31
-b(ma)n(y)f(b)r(e)i(applied)f(to)g(an)n(y)g(of)g(the)g(co)r(ordinate)f
-(systems)h(asso)r(ciated)427 5494 y(with)24 b(a)g(Plot)f(\(as)g
-(de\014ned)h(b)n(y)f(the)h(F)-7 b(rames)23 b(it)h(con)n(tains\),)g(so)f
-(this)h(index)f(ma)n(y)g(tak)n(e)g(an)n(y)g(v)-5 b(alue)23
-b(from)h(1)f(to)427 5593 y(the)31 b(n)n(um)n(b)r(er)e(of)h(F)-7
-b(rames)30 b(in)g(the)g(Plot)g(\(Nframe)g(attribute\).)45
-b(In)30 b(addition,)g(the)h(v)-5 b(alues)29 b(AST)p Ft(__)p
-Fk(BASE)427 5693 y(and)f(AST)p Ft(__)p Fk(CURRENT)f(ma)n(y)g(b)r(e)h
-(used)g(to)f(sp)r(ecify)h(the)g(base)f(and)g(curren)n(t)g(F)-7
-b(rames)27 b(resp)r(ectiv)n(ely)-7 b(.)p eop end
-%%Page: 199 209
-TeXDict begin 199 208 bop 3643 52 a FG(199)427 351 y
-Fk(F)-7 b(or)32 b(example,)i(a)f(v)-5 b(alue)32 b(of)h(AST)p
-Ft(__)p Fk(CURRENT)g(causes)e(clipping)i(to)g(b)r(e)g(p)r(erformed)f
-(in)i(ph)n(ysical)d(co-)427 451 y(ordinates,)g(while)g(a)g(v)-5
-b(alue)31 b(of)g(AST)p Ft(__)p Fk(BASE)f(w)n(ould)h(clip)g(in)g
-(graphical)f(co)r(ordinates.)45 b(Clipping)31 b(ma)n(y)427
-551 y(also)24 b(b)r(e)h(remo)n(v)n(ed)e(completely)h(b)n(y)g(giving)g
-(a)g(v)-5 b(alue)25 b(of)f(AST)p Ft(__)p Fk(NOFRAME.)g(In)h(this)g
-(case)f(an)n(y)g(clipping)427 650 y(b)r(ounds)k(supplied)g(\(b)r(elo)n
-(w\))g(are)e(ignored.)259 780 y Fc(LBND\()32 b Fj(\003)g
-Fc(\))g(=)g(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427 880
-y Fk(An)43 b(arra)n(y)c(with)j(one)g(elemen)n(t)g(for)f(eac)n(h)g(axis)
-g(of)h(the)g(clipping)g(F)-7 b(rame)41 b(\(iden)n(ti\014ed)i(b)n(y)e
-(the)i(index)427 979 y(IFRAME\).)c(This)g(should)f(con)n(tain)g(the)h
-(lo)n(w)n(er)e(b)r(ound,)k(on)d(eac)n(h)g(axis,)i(of)f(the)g(region)e
-(whic)n(h)h(is)h(to)427 1079 y(remain)27 b(visible)h(\(unclipp)r(ed\).)
-259 1209 y Fc(UBND\()k Fj(\003)g Fc(\))g(=)g(DOUBLE)g(PRECISION)f
-(\(Giv)m(en\))427 1309 y Fk(An)43 b(arra)n(y)c(with)j(one)g(elemen)n(t)
-g(for)f(eac)n(h)g(axis)g(of)h(the)g(clipping)g(F)-7 b(rame)41
-b(\(iden)n(ti\014ed)i(b)n(y)e(the)i(index)427 1408 y(IFRAME\).)38
-b(This)f(should)g(con)n(tain)f(the)i(upp)r(er)f(b)r(ound,)j(on)d(eac)n
-(h)f(axis,)j(of)e(the)h(region)e(whic)n(h)h(is)g(to)427
-1508 y(remain)27 b(visible)h(\(unclipp)r(ed\).)259 1638
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 1738 y Fk(The)c(global)e(status.)0 1897 y Fc(Notes:)340
-2176 y Fj(\017)45 b Fk(Only)22 b(one)g(clipping)g(F)-7
-b(rame)21 b(ma)n(y)g(b)r(e)i(activ)n(e)e(at)h(a)g(time.)35
-b(This)22 b(routine)g(will)g(deactiv)-5 b(ate)22 b(an)n(y)f
-(previously-)427 2276 y(established)28 b(clipping)f(F)-7
-b(rame)27 b(b)r(efore)h(setting)f(up)h(new)g(clipping)f(limits.)340
-2406 y Fj(\017)45 b Fk(The)32 b(clipping)f(pro)r(duced)g(b)n(y)g(this)h
-(routine)f(is)g(in)h(addition)f(to)h(that)f(sp)r(eci\014ed)h(b)n(y)f
-(the)h(Clip)f(attribute)427 2506 y(whic)n(h)40 b(o)r(ccurs)f(at)g(the)h
-(edges)f(of)h(the)g(plotting)g(area)e(established)h(when)h(the)g(Plot)f
-(is)h(created)f(\(see)427 2605 y(AST)p Ft(_)p Fk(PLOT\).)27
-b(The)h(underlying)f(graphics)f(system)h(ma)n(y)g(also)g(imp)r(ose)g
-(further)h(clipping.)340 2735 y Fj(\017)45 b Fk(When)25
-b(testing)f(a)f(graphical)g(p)r(osition)h(for)f(clipping,)i(it)f(is)g
-(\014rst)g(transformed)f(in)n(to)h(the)g(clipping)g(F)-7
-b(rame.)427 2835 y(The)33 b(resulting)f(co)r(ordinate)g(on)g(eac)n(h)g
-(axis)g(is)h(then)g(c)n(hec)n(k)n(ed)f(against)f(the)j(clipping)e
-(limits)i(\(giv)n(en)e(b)n(y)427 2935 y(LBND)21 b(and)g(UBND\).)h(By)e
-(default,)j(a)d(p)r(osition)g(is)h(clipp)r(ed)g(if)g(an)n(y)f(co)r
-(ordinate)f(lies)i(outside)f(these)h(limits.)427 3034
-y(Ho)n(w)n(ev)n(er,)h(if)i(a)e(non-zero)g(v)-5 b(alue)22
-b(is)h(assigned)f(to)h(the)g(Plot's)f(ClipOp)h(attribute,)h(then)g(a)e
-(p)r(osition)h(is)g(only)427 3134 y(clipp)r(ed)29 b(if)f(the)g(co)r
-(ordinates)e(on)h(all)g(axes)g(lie)h(outside)f(their)h(clipping)f
-(limits.)340 3264 y Fj(\017)45 b Fk(If)28 b(the)f(lo)n(w)n(er)f
-(clipping)h(limit)h(exceeds)e(the)i(upp)r(er)f(limit)h(for)e(an)n(y)h
-(axis,)f(then)i(the)f(sense)g(of)g(clipping)g(for)427
-3364 y(that)k(axis)f(is)g(rev)n(ersed)f(\(so)h(that)h(co)r(ordinate)e
-(v)-5 b(alues)30 b(lying)h(b)r(et)n(w)n(een)f(the)h(limits)g(are)f
-(clipp)r(ed)h(instead)427 3463 y(of)k(those)g(lying)g(outside)g(the)g
-(limits\).)61 b(T)-7 b(o)34 b(pro)r(duce)h(a)g Ft(")p
-Fk(hole)p Ft(")f Fk(in)h(a)g(co)r(ordinate)f(space)g(\(that)i(is,)h(an)
-427 3563 y(in)n(ternal)24 b(region)g(where)g(nothing)h(is)f(plotted\),)
-i(y)n(ou)e(should)h(supply)g(all)f(the)h(b)r(ounds)g(in)g(rev)n(ersed)e
-(order,)427 3662 y(and)28 b(set)f(the)h(ClipOp)g(attribute)g(for)f(the)
-h(Plot)f(to)g(a)g(non-zero)f(v)-5 b(alue.)340 3792 y
-Fj(\017)45 b Fk(Either)25 b(clipping)h(limit)g(ma)n(y)f(b)r(e)h(set)f
-(to)h(the)g(v)-5 b(alue)25 b(AST)p Ft(__)p Fk(BAD,)h(whic)n(h)f(is)h
-(equiv)-5 b(alen)n(t)25 b(to)g(setting)h(it)g(to)427
-3892 y(in\014nit)n(y)i(\(or)f(min)n(us)h(in\014nit)n(y)g(for)f(a)g(lo)n
-(w)n(er)f(b)r(ound\))i(so)f(that)h(it)g(is)g(not)f(used.)340
-4022 y Fj(\017)45 b Fk(If)29 b(a)e(graphical)f(p)r(osition)i(results)f
-(in)h(an)n(y)f(bad)h(co)r(ordinate)f(v)-5 b(alues)27
-b(\(AST)p Ft(__)p Fk(BAD\))i(when)f(transformed)427 4122
-y(in)n(to)i(the)h(clipping)f(F)-7 b(rame,)31 b(then)g(it)g(is)f
-(treated)g(\(for)g(the)h(purp)r(oses)e(of)h(pro)r(ducing)g(graphical)f
-(output\))427 4221 y(as)e(if)h(it)g(w)n(ere)f(clipp)r(ed.)340
-4351 y Fj(\017)45 b Fk(When)23 b(a)f(Plot)g(is)g(used)g(as)g(a)f
-(Mapping)h(to)g(transform)g(p)r(oin)n(ts)g(\(e.g.)35
-b(using)22 b(AST)p Ft(_)p Fk(TRAN2\),)h(an)n(y)f(clipp)r(ed)427
-4451 y(output)28 b(p)r(oin)n(ts)g(are)f(assigned)f(co)r(ordinate)g(v)-5
-b(alues)28 b(of)f(AST)p Ft(__)p Fk(BAD.)340 4581 y Fj(\017)45
-b Fk(An)28 b(error)e(results)h(if)h(the)g(base)f(F)-7
-b(rame)27 b(of)h(the)g(Plot)f(is)g(not)h(2-dimensional.)p
-0 4775 3780 12 v 0 4905 a FA(AST)p Fe(_)p FA(CLONE)968
-4913 y Fd(Clone)38 b(\(duplicate\))e(an)i(Ob)7 b(ject)38
-b(p)s(oin)m(ter)2976 4905 y FA(AST)p Fe(_)p FA(CLONE)0
-5103 y Fc(Description:)44 b Fk(This)34 b(function)g(returns)f(a)g
-(duplicate)h(p)r(oin)n(ter)f(to)h(an)f(existing)g(Ob)5
-b(ject.)55 b(It)34 b(also)e(incremen)n(ts)h(the)227 5202
-y(Ob)5 b(ject's)28 b(RefCoun)n(t)f(attribute)h(to)g(k)n(eep)f(trac)n(k)
-f(of)i(ho)n(w)f(man)n(y)g(p)r(oin)n(ters)f(ha)n(v)n(e)h(b)r(een)h
-(issued.)227 5326 y(Note)40 b(that)g(this)g(function)g(is)f(NOT)h
-(equiv)-5 b(alen)n(t)39 b(to)g(an)g(assignmen)n(t)g(statemen)n(t,)k(as)
-38 b(in)i(general)e(the)i(t)n(w)n(o)227 5425 y(p)r(oin)n(ters)27
-b(will)h(not)g(ha)n(v)n(e)e(the)i(same)f(v)-5 b(alue.)0
-5572 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_CLONE\()c
-(THIS,)j(STATUS)f(\))0 5718 y Fc(Argumen)m(ts:)p eop
-end
-%%Page: 200 210
-TeXDict begin 200 209 bop 0 52 a FG(200)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(THIS)h(=)g(INTEGER)g
-(\(Giv)m(en\))427 451 y Fk(Original)26 b(p)r(oin)n(ter)i(to)f(the)h(Ob)
-5 b(ject.)259 588 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h
-(and)g(Returned\))427 687 y Fk(The)c(global)e(status.)0
-858 y Fc(Class)31 b(Applicabilit)m(y:)259 1002 y(Ob)5
-b(ject)427 1102 y Fk(This)28 b(function)g(applies)f(to)h(all)f(Ob)5
-b(jects.)0 1272 y Fc(Returned)32 b(V)-8 b(alue:)259 1416
-y(AST)p Ft(_)p Fc(CLONE)32 b(=)g(INTEGER)427 1516 y Fk(A)c(duplicate)g
-(p)r(oin)n(ter)f(to)h(the)g(same)f(Ob)5 b(ject.)0 1686
-y Fc(Notes:)340 1977 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 2076 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 2284 3780 12 v 0 2415 a FA(AST)p Fe(_)p FA(CMPFRAME)1369
-2414 y Fd(Create)37 b(a)h(CmpF)-10 b(rame)2629 2415 y
-FA(AST)p Fe(_)p FA(CMPFRAME)0 2611 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(CmpF)-7
-b(rame)28 b(and)f(optionally)g(initialises)g(its)h(attributes.)227
-2740 y(A)40 b(CmpF)-7 b(rame)38 b(is)h(a)f(comp)r(ound)h(F)-7
-b(rame)39 b(whic)n(h)g(allo)n(ws)e(t)n(w)n(o)h(comp)r(onen)n(t)h(F)-7
-b(rames)38 b(\(of)h(an)n(y)f(class\))g(to)h(b)r(e)227
-2840 y(merged)34 b(together)h(to)f(form)h(a)g(more)f(complex)g(F)-7
-b(rame.)59 b(The)35 b(axes)f(of)h(the)g(t)n(w)n(o)f(comp)r(onen)n(t)h
-(F)-7 b(rames)34 b(then)227 2939 y(app)r(ear)i(together)g(in)h(the)g
-(resulting)f(CmpF)-7 b(rame)36 b(\(those)h(of)f(the)h(\014rst)g(F)-7
-b(rame,)38 b(follo)n(w)n(ed)e(b)n(y)g(those)h(of)f(the)227
-3039 y(second)27 b(F)-7 b(rame\).)227 3167 y(Since)24
-b(a)f(CmpF)-7 b(rame)23 b(is)g(itself)h(a)f(F)-7 b(rame,)24
-b(it)g(can)f(b)r(e)g(used)h(as)e(a)h(comp)r(onen)n(t)g(in)h(forming)f
-(further)g(CmpF)-7 b(rames.)227 3267 y(F)g(rames)27 b(of)h(arbitrary)d
-(complexit)n(y)i(ma)n(y)g(b)r(e)h(built)g(from)g(simple)f(individual)h
-(F)-7 b(rames)27 b(in)h(this)g(w)n(a)n(y)-7 b(.)227 3396
-y(Also)39 b(since)f(a)h(F)-7 b(rame)38 b(is)h(a)f(Mapping,)j(a)e(CmpF)
--7 b(rame)38 b(can)h(also)f(b)r(e)h(used)g(as)f(a)g(Mapping.)70
-b(Normally)-7 b(,)41 b(a)227 3495 y(CmpF)-7 b(rame)35
-b(is)g(simply)h(equiv)-5 b(alen)n(t)35 b(to)g(a)g(UnitMap,)i(but)f(if)g
-(either)f(of)g(the)h(comp)r(onen)n(t)f(F)-7 b(rames)34
-b(within)i(a)227 3595 y(CmpF)-7 b(rame)41 b(is)f(a)g(Region)g(\(a)g
-(sub-class)g(of)g(F)-7 b(rame\),)44 b(then)d(the)g(CmpF)-7
-b(rame)40 b(will)h(use)f(the)h(Region)f(as)g(a)227 3695
-y(Mapping)g(when)g(transforming)e(v)-5 b(alues)39 b(for)g(axes)g
-(describ)r(ed)h(b)n(y)f(the)h(Region.)73 b(Th)n(us)39
-b(input)i(axis)e(v)-5 b(alues)227 3794 y(corresp)r(onding)26
-b(to)h(p)r(ositions)h(whic)n(h)f(are)g(outside)g(the)h(Region)f(will)h
-(result)f(in)h(bad)f(output)i(axis)d(v)-5 b(alues.)0
-3952 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_CMPFRAME\()
-38 b(FRAME1,)j(FRAME2,)g(OPTIONS,)f(STATUS)h(\))0 4109
-y Fc(Argumen)m(ts:)259 4254 y(FRAME1)31 b(=)h(INTEGER)f(\(Giv)m(en\))
-427 4354 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(\014rst)f(comp)r(onen)n(t)g
-(F)-7 b(rame.)259 4491 y Fc(FRAME2)31 b(=)h(INTEGER)f(\(Giv)m(en\))427
-4590 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(second)f(comp)r(onen)n(t)g(F)-7
-b(rame.)259 4727 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-4827 y Fk(A)g(c)n(haracter)e(string)h(con)n(taining)f(an)h(optional)g
-(comma-separated)e(list)j(of)g(attribute)f(assignmen)n(ts)g(to)427
-4926 y(b)r(e)38 b(used)g(for)f(initialising)h(the)g(new)g(CmpF)-7
-b(rame.)67 b(The)38 b(syn)n(tax)e(used)i(is)g(iden)n(tical)f(to)h(that)
-g(for)f(the)427 5026 y(AST)p Ft(_)p Fk(SET)27 b(routine.)259
-5163 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5263 y Fk(The)c(global)e(status.)0 5433
-y Fc(Returned)32 b(V)-8 b(alue:)259 5577 y(AST)p Ft(_)p
-Fc(CMPFRAME)31 b(=)h(INTEGER)427 5677 y Fk(A)c(p)r(oin)n(ter)f(to)h
-(the)g(new)g(CmpF)-7 b(rame.)p eop end
-%%Page: 201 211
-TeXDict begin 201 210 bop 3643 52 a FG(201)0 351 y Fc(Notes:)340
-631 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e
-(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 731 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28
-b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)-2
-890 y Fc(Status)33 b(Handling)n(:)227 1036 y Fk(The)d(protected)g(in)n
-(terface)f(to)g(this)h(function)h(includes)f(an)f(extra)g(parameter)f
-(at)i(the)g(end)g(of)g(the)g(parameter)227 1136 y(list)37
-b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)
-r(oin)n(ter)g(to)h(the)g(in)n(teger)e(inherited)i(status)f(v)-5
-b(ariable:)54 b Ft(")p Fk(in)n(t)227 1235 y Fj(\003)p
-Fk(status)p Ft(")p Fk(.)p 0 1429 3780 12 v 0 1560 a FA(AST)p
-Fe(_)p FA(CMPMAP)441 b Fd(Create)38 b(a)g(CmpMap)444
-b FA(AST)p Fe(_)p FA(CMPMAP)0 1743 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(CmpMap)h(and)f
-(optionally)g(initialises)h(its)f(attributes.)227 1866
-y(A)k(CmpMap)g(is)g(a)f(comp)r(ound)h(Mapping)f(whic)n(h)h(allo)n(ws)e
-(t)n(w)n(o)h(comp)r(onen)n(t)h(Mappings)f(\(of)h(an)n(y)f(class\))g(to)
-g(b)r(e)227 1966 y(connected)h(together)e(to)h(form)g(a)g(more)g
-(complex)g(Mapping.)45 b(This)30 b(connection)g(ma)n(y)g(either)g(b)r
-(e)h Ft(")p Fk(in)f(series)p Ft(")227 2066 y Fk(\(where)21
-b(the)g(\014rst)g(Mapping)f(is)h(used)g(to)g(transform)f(the)h(co)r
-(ordinates)e(of)i(eac)n(h)f(p)r(oin)n(t)i(and)e(the)i(second)e(mapping)
-227 2165 y(is)g(then)g(applied)f(to)g(the)h(result\),)h(or)e
-Ft(")p Fk(in)g(parallel)p Ft(")f Fk(\(where)h(one)g(Mapping)g
-(transforms)f(the)i(earlier)e(co)r(ordinates)227 2265
-y(for)27 b(eac)n(h)g(p)r(oin)n(t)h(and)f(the)h(second)f(Mapping)h(sim)n
-(ultaneously)e(transforms)g(the)i(later)f(co)r(ordinates\).)227
-2388 y(Since)f(a)f(CmpMap)g(is)h(itself)g(a)f(Mapping,)g(it)h(can)f(b)r
-(e)h(used)f(as)g(a)g(comp)r(onen)n(t)g(in)h(forming)e(further)i
-(CmpMaps.)227 2488 y(Mappings)h(of)h(arbitrary)d(complexit)n(y)i(ma)n
-(y)g(b)r(e)h(built)h(from)e(simple)h(individual)f(Mappings)g(in)h(this)
-g(w)n(a)n(y)-7 b(.)0 2635 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_CMPMAP\()c(MAP1,)j(MAP2,)f(SERIES,)g(OPTIONS,)
-f(STATUS)h(\))0 2781 y Fc(Argumen)m(ts:)259 2915 y(MAP1)32
-b(=)g(INTEGER)f(\(Giv)m(en\))427 3015 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(\014rst)f(comp)r(onen)n(t)g(Mapping.)259
-3145 y Fc(MAP2)32 b(=)g(INTEGER)f(\(Giv)m(en\))427 3245
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(second)f(comp)r(onen)n(t)g(Mapping.)
-259 3375 y Fc(SERIES)k(=)h(LOGICAL)h(\(Giv)m(en\))427
-3474 y Fk(If)25 b(a)f(.TR)n(UE.)h(v)-5 b(alue)24 b(is)h(giv)n(en)f(for)
-g(this)h(argumen)n(t,)f(the)h(t)n(w)n(o)f(comp)r(onen)n(t)g(Mappings)g
-(will)h(b)r(e)g(connected)427 3574 y(in)j(series.)36
-b(A)28 b(.F)-9 b(ALSE.)27 b(v)-5 b(alue)28 b(requests)f(that)h(they)f
-(are)g(connected)g(in)h(parallel.)259 3704 y Fc(OPTIONS)k(=)g(CHARA)m
-(CTER)g Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-3804 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h(optional)
-f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f(to)g(b)r
-(e)427 3903 y(used)j(for)g(initialising)f(the)h(new)g(CmpMap.)36
-b(The)24 b(syn)n(tax)f(used)h(is)g(iden)n(tical)f(to)h(that)g(for)g
-(the)g(AST)p Ft(_)p Fk(SET)427 4003 y(routine.)259 4133
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 4233 y Fk(The)c(global)e(status.)0 4392 y Fc(Returned)32
-b(V)-8 b(alue:)259 4526 y(AST)p Ft(_)p Fc(CMPMAP)32 b(=)g(INTEGER)427
-4626 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(CmpMap.)0
-4785 y Fc(Notes:)340 5065 y Fj(\017)45 b Fk(If)37 b(the)g(comp)r(onen)n
-(t)g(Mappings)f(are)g(connected)g(in)h(series,)h(then)f(using)g(the)g
-(resulting)f(CmpMap)h(to)427 5164 y(transform)g(co)r(ordinates)g(will)i
-(cause)e(the)i(\014rst)f(Mapping)g(to)g(b)r(e)g(applied,)j(follo)n(w)n
-(ed)d(b)n(y)g(the)g(second)427 5264 y(Mapping.)e(If)26
-b(the)h(in)n(v)n(erse)d(CmpMap)i(transformation)e(is)i(requested,)f
-(the)i(t)n(w)n(o)e(comp)r(onen)n(t)g(Mappings)427 5364
-y(will)j(b)r(e)g(applied)g(in)g(b)r(oth)g(the)g(rev)n(erse)d(order)h
-(and)i(the)g(rev)n(erse)e(direction.)340 5494 y Fj(\017)45
-b Fk(When)27 b(connecting)f(t)n(w)n(o)g(comp)r(onen)n(t)g(Mappings)f
-(in)i(series,)e(the)i(n)n(um)n(b)r(er)f(of)h(output)f(co)r(ordinates)f
-(gen-)427 5593 y(erated)h(b)n(y)g(the)g(\014rst)g(Mapping)g(\(its)h
-(Nout)f(attribute\))h(m)n(ust)f(equal)f(the)i(n)n(um)n(b)r(er)f(of)g
-(input)h(co)r(ordinates)427 5693 y(accepted)h(b)n(y)f(the)h(second)f
-(Mapping)g(\(its)h(Nin)g(attribute\).)p eop end
-%%Page: 202 212
-TeXDict begin 202 211 bop 0 52 a FG(202)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(If)19 b(the)g(comp)r(onen)n(t)g(Mappings)f(of)h(a)f(CmpMap)h(are)e
-(connected)i(in)g(parallel,)g(then)h(the)f(\014rst)f(Mapping)g(will)427
-451 y(b)r(e)28 b(used)f(to)g(transform)g(the)g(earlier)f(input)i(co)r
-(ordinates)e(for)h(eac)n(h)f(p)r(oin)n(t)i(\(and)f(to)g(pro)r(duce)g
-(the)h(earlier)427 551 y(output)34 b(co)r(ordinates\))e(and)g(the)i
-(second)e(Mapping)h(will)g(b)r(e)h(used)e(sim)n(ultaneously)h(to)f
-(transform)g(the)427 650 y(remaining)f(input)i(co)r(ordinates)e(\(to)h
-(pro)r(duce)g(the)h(remaining)e(output)h(co)r(ordinates)f(for)h(eac)n
-(h)f(p)r(oin)n(t\).)427 750 y(If)37 b(the)g(in)n(v)n(erse)e
-(transformation)f(is)j(requested,)g(eac)n(h)f(Mapping)g(will)h(still)f
-(b)r(e)h(applied)f(to)g(the)h(same)427 849 y(co)r(ordinates,)27
-b(but)h(in)g(the)g(rev)n(erse)d(direction.)340 971 y
-Fj(\017)45 b Fk(When)27 b(connecting)e(t)n(w)n(o)g(comp)r(onen)n(t)g
-(Mappings)g(in)h(parallel,)f(there)h(is)f(no)h(restriction)e(on)i(the)g
-(n)n(um)n(b)r(er)427 1070 y(of)i(input)g(and)g(output)g(co)r(ordinates)
-e(for)h(eac)n(h)g(Mapping.)340 1191 y Fj(\017)45 b Fk(Note)35
-b(that)h(the)f(comp)r(onen)n(t)g(Mappings)g(supplied)g(are)f(not)h
-(copied)g(b)n(y)g(AST)p Ft(_)p Fk(CMPMAP)g(\(the)h(new)427
-1291 y(CmpMap)41 b(simply)f(retains)g(a)g(reference)f(to)h(them\).)76
-b(They)41 b(ma)n(y)e(con)n(tin)n(ue)h(to)g(b)r(e)h(used)f(for)g(other)
-427 1391 y(purp)r(oses,)i(but)f(should)e(not)h(b)r(e)g(deleted.)74
-b(If)40 b(a)f(CmpMap)h(con)n(taining)f(a)g(cop)n(y)g(of)h(its)g(comp)r
-(onen)n(t)427 1490 y(Mappings)27 b(is)h(required,)e(then)j(a)e(cop)n(y)
-f(of)i(the)g(CmpMap)g(should)f(b)r(e)h(made)f(using)h(AST)p
-Ft(_)p Fk(COPY.)340 1611 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 1711 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 1887 3780 12 v 0 2017 a FA(AST)p Fe(_)p FA(CMPREGION)152
-b Fd(Create)38 b(a)g(CmpRegion)152 b FA(AST)p Fe(_)p
-FA(CMPREGION)0 2182 y Fc(Description:)44 b Fk(This)28
-b(function)g(creates)f(a)g(new)g(CmpRegion)h(and)f(optionally)g
-(initialises)g(its)h(attributes.)227 2301 y(A)i(CmpRegion)f(is)h(a)f
-(Region)g(whic)n(h)g(allo)n(ws)g(t)n(w)n(o)f(comp)r(onen)n(t)i(Regions)
-e(\(of)i(an)n(y)f(class\))g(to)g(b)r(e)h(com)n(bined)g(to)227
-2401 y(form)g(a)f(more)f(complex)i(Region.)42 b(This)29
-b(com)n(bination)g(ma)n(y)g(b)r(e)h(p)r(erformed)f(a)g(b)r(o)r(olean)g
-(AND,)i(OR)e(or)g(X)n(OR)227 2500 y(\(exclusiv)n(e)j(OR\))h(op)r
-(erator.)49 b(If)33 b(the)g(AND)g(op)r(erator)e(is)h(used,)i(then)f(a)f
-(p)r(osition)g(is)h(inside)f(the)h(CmpRegion)227 2600
-y(only)28 b(if)g(it)g(is)g(inside)g(b)r(oth)g(of)g(its)g(t)n(w)n(o)f
-(comp)r(onen)n(t)g(Regions.)37 b(If)28 b(the)g(OR)g(op)r(erator)e(is)h
-(used,)h(then)g(a)g(p)r(osition)227 2700 y(is)g(inside)h(the)g
-(CmpRegion)f(if)g(it)h(is)f(inside)h(either)f(\(or)g(b)r(oth\))h(of)f
-(its)h(t)n(w)n(o)e(comp)r(onen)n(t)h(Regions.)38 b(If)29
-b(the)g(X)n(OR)227 2799 y(op)r(erator)24 b(is)i(used,)g(then)h(a)e(p)r
-(osition)h(is)g(inside)g(the)g(CmpRegion)f(if)i(it)f(is)g(inside)f(one)
-h(but)g(not)g(b)r(oth)h(of)e(its)h(t)n(w)n(o)227 2899
-y(comp)r(onen)n(t)j(Regions.)41 b(Other)28 b(op)r(erators)g(can)g(b)r
-(e)i(formed)f(b)n(y)g(negating)f(one)h(or)f(b)r(oth)i(comp)r(onen)n(t)f
-(Regions)227 2999 y(b)r(efore)f(using)f(them)h(to)f(construct)h(a)f
-(new)g(CmpRegion.)227 3117 y(The)i(t)n(w)n(o)e(comp)r(onen)n(t)h
-(Region)g(need)g(not)h(refer)e(to)h(the)h(same)f(co)r(ordinate)f(F)-7
-b(rame,)28 b(but)h(it)g(m)n(ust)f(b)r(e)h(p)r(ossible)227
-3217 y(for)22 b(the)h(AST)p Ft(_)p Fk(CONVER)-7 b(T)23
-b(function)g(to)f(determine)h(a)f(Mapping)g(b)r(et)n(w)n(een)h(them)g
-(\(an)g(error)d(will)j(b)r(e)g(rep)r(orted)227 3316 y(otherwise)33
-b(when)g(the)h(CmpRegion)f(is)g(created\).)54 b(F)-7
-b(or)33 b(instance,)i(a)e(CmpRegion)g(ma)n(y)f(com)n(bine)h(a)g(Region)
-227 3416 y(de\014ned)k(within)f(an)g(ICRS)g(SkyF)-7 b(rame)36
-b(with)g(a)g(Region)f(de\014ned)i(within)f(a)g(Galactic)f(SkyF)-7
-b(rame.)62 b(This)36 b(is)227 3516 y(acceptable)24 b(b)r(ecause)h(the)g
-(SkyF)-7 b(rame)24 b(class)g(kno)n(ws)f(ho)n(w)h(to)h(con)n(v)n(ert)e
-(b)r(et)n(w)n(een)i(these)g(t)n(w)n(o)f(systems,)h(and)f(con-)227
-3615 y(sequen)n(tly)j(the)g(AST)p Ft(_)p Fk(CONVER)-7
-b(T)27 b(function)g(will)h(also)d(b)r(e)j(able)e(to)h(con)n(v)n(ert)f
-(b)r(et)n(w)n(een)h(them.)37 b(In)27 b(suc)n(h)g(cases,)227
-3715 y(the)33 b(second)g(comp)r(onen)n(t)f(Region)g(will)h(b)r(e)h
-(mapp)r(ed)f(in)n(to)f(the)h(co)r(ordinate)f(F)-7 b(rame)32
-b(of)h(the)g(\014rst)g(comp)r(onen)n(t)227 3815 y(Region,)g(and)g(the)f
-(F)-7 b(rame)32 b(represen)n(ted)g(b)n(y)g(the)h(CmpRegion)f(as)f(a)h
-(whole)g(will)h(b)r(e)g(the)g(F)-7 b(rame)32 b(of)g(the)h(\014rst)227
-3914 y(comp)r(onen)n(t)28 b(Region.)227 4033 y(Since)20
-b(a)f(CmpRegion)f(is)i(itself)f(a)g(Region,)i(it)e(can)g(b)r(e)h(used)f
-(as)g(a)g(comp)r(onen)n(t)g(in)g(forming)g(further)g(CmpRegions.)227
-4133 y(Regions)27 b(of)g(arbitrary)f(complexit)n(y)h(ma)n(y)g(b)r(e)h
-(built)g(from)g(simple)f(individual)h(Regions)f(in)g(this)h(w)n(a)n(y)
--7 b(.)0 4270 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_CMPREGION\()38 b(REGION1,)i(REGION2,)g(OPER,)i(OPTIONS,)e
-(STATUS)h(\))0 4408 y Fc(Argumen)m(ts:)259 4533 y(REGION1)31
-b(=)h(INTEGER)f(\(Giv)m(en\))427 4632 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(\014rst)f(comp)r(onen)n(t)g(Region.)259
-4753 y Fc(REGION2)k(=)h(INTEGER)f(\(Giv)m(en\))427 4853
-y Fk(P)n(oin)n(ter)20 b(to)h(the)g(second)g(comp)r(onen)n(t)f(Region.)
-34 b(This)21 b(Region)g(will)g(b)r(e)h(transformed)d(in)n(to)i(the)h
-(co)r(ordinate)427 4953 y(F)-7 b(rame)27 b(of)h(the)g(\014rst)f(region)
-g(b)r(efore)g(use.)37 b(An)28 b(error)d(will)j(b)r(e)g(rep)r(orted)f
-(if)h(this)g(is)f(not)h(p)r(ossible.)259 5074 y Fc(OPER)j(=)h(INTEGER)g
-(\(Giv)m(en\))427 5173 y Fk(The)38 b(b)r(o)r(olean)f(op)r(erator)f
-(with)i(whic)n(h)g(to)f(com)n(bine)h(the)g(t)n(w)n(o)f(Regions.)66
-b(This)37 b(m)n(ust)h(b)r(e)g(one)g(of)f(the)427 5273
-y(sym)n(b)r(olic)27 b(constan)n(ts)g(AST)p Ft(__)p Fk(AND,)h(AST)p
-Ft(__)p Fk(OR)f(or)g(AST)p Ft(__)p Fk(X)n(OR.)259 5394
-y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 5494 y Fk(A)g(c)n(haracter)e(string)
-h(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 5593 y(b)r(e)37
-b(used)f(for)g(initialising)g(the)h(new)g(CmpRegion.)63
-b(The)36 b(syn)n(tax)g(used)g(is)g(iden)n(tical)g(to)h(that)f(for)g
-(the)427 5693 y(AST)p Ft(_)p Fk(SET)27 b(routine.)p eop
-end
-%%Page: 203 213
-TeXDict begin 203 212 bop 3643 52 a FG(203)259 351 y
-Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-451 y Fk(The)c(global)e(status.)0 612 y Fc(Returned)32
-b(V)-8 b(alue:)259 748 y(AST)p Ft(_)p Fc(CMPREGION)31
-b(=)h(INTEGER)427 848 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g
-(CmpRegion.)0 1009 y Fc(Notes:)340 1291 y Fj(\017)45
-b Fk(If)35 b(one)f(of)g(the)h(supplied)g(Regions)e(has)h(an)g(asso)r
-(ciated)f(uncertain)n(t)n(y)-7 b(,)35 b(that)g(uncertain)n(t)n(y)e
-(will)i(also)e(b)r(e)427 1391 y(used)h(for)f(the)h(returned)f
-(CmpRegion.)55 b(If)34 b(b)r(oth)g(supplied)g(Regions)e(ha)n(v)n(e)h
-(asso)r(ciated)f(uncertain)n(ties,)427 1490 y(the)c(uncertain)n(t)n(y)f
-(asso)r(ciated)f(with)i(the)g(\014rst)g(Region)f(will)g(b)r(e)h(used)g
-(for)f(the)h(returned)f(CmpRegion.)340 1622 y Fj(\017)45
-b Fk(Deep)22 b(copies)f(are)f(tak)n(en)h(of)g(the)h(supplied)g
-(Regions.)33 b(This)22 b(means)f(that)g(an)n(y)g(subsequen)n(t)g(c)n
-(hanges)f(made)427 1722 y(to)26 b(the)g(comp)r(onen)n(t)g(Regions)f
-(using)g(the)i(supplied)f(p)r(oin)n(ters)f(will)h(ha)n(v)n(e)f(no)h
-(e\013ect)g(on)g(the)g(CmpRegion.)340 1854 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 1954
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 2152 3780 12 v 0 2283
-a FA(AST)p Fe(_)p FA(CONVER)-11 b(T)1224 2284 y Fd(Determine)38
-b(ho)m(w)g(to)g(con)m(v)m(ert)1285 2383 y(b)s(et)m(w)m(een)g(t)m(w)m(o)
-f(co)s(ordinate)1692 2483 y(systems)2772 2283 y FA(AST)p
-Fe(_)p FA(CONVER)-11 b(T)0 2671 y Fc(Description:)44
-b Fk(This)29 b(function)h(compares)d(t)n(w)n(o)h(F)-7
-b(rames)28 b(and)h(determines)f(whether)h(it)g(is)g(p)r(ossible)f(to)h
-(con)n(v)n(ert)f(b)r(e-)227 2770 y(t)n(w)n(een)c(the)h(co)r(ordinate)e
-(systems)g(whic)n(h)h(they)h(represen)n(t.)34 b(If)25
-b(con)n(v)n(ersion)d(is)i(p)r(ossible,)g(it)h(returns)e(a)h(F)-7
-b(rameSet)227 2870 y(whic)n(h)34 b(describ)r(es)f(the)h(con)n(v)n
-(ersion)d(and)j(whic)n(h)f(ma)n(y)g(b)r(e)h(used)g(\(as)f(a)g
-(Mapping\))h(to)f(transform)g(co)r(ordinate)227 2969
-y(v)-5 b(alues)27 b(in)h(either)g(direction.)227 3094
-y(The)38 b(same)g(function)g(ma)n(y)g(also)e(b)r(e)j(used)f(to)g
-(determine)g(ho)n(w)f(to)h(con)n(v)n(ert)f(b)r(et)n(w)n(een)g(t)n(w)n
-(o)h(F)-7 b(rameSets)37 b(\(or)227 3193 y(b)r(et)n(w)n(een)23
-b(a)g(F)-7 b(rame)22 b(and)h(a)f(F)-7 b(rameSet,)24 b(or)e(vice)g(v)n
-(ersa\).)34 b(This)23 b(mo)r(de)g(is)g(in)n(tended)g(for)f(use)h(when)g
-(\(for)g(example\))227 3293 y(t)n(w)n(o)f(images)g(ha)n(v)n(e)f(b)r
-(een)i(calibrated)f(b)n(y)h(attac)n(hing)e(a)i(F)-7 b(rameSet)22
-b(to)h(eac)n(h.)34 b(AST)p Ft(_)p Fk(CONVER)-7 b(T)22
-b(migh)n(t)h(then)g(b)r(e)227 3393 y(used)29 b(to)f(searc)n(h)f(for)h
-(a)g(celestial)g(co)r(ordinate)g(system)g(that)h(b)r(oth)g(images)e(ha)
-n(v)n(e)h(in)g(common,)h(and)f(the)h(result)227 3492
-y(could)k(then)g(b)r(e)h(used)f(to)f(con)n(v)n(ert)g(b)r(et)n(w)n(een)h
-(the)g(pixel)g(co)r(ordinates)e(of)i(b)r(oth)h(images)d({)i(ha)n(ving)f
-(e\013ectiv)n(ely)227 3592 y(used)c(their)f(celestial)h(co)r(ordinate)e
-(systems)h(to)h(align)e(them.)227 3716 y(When)33 b(using)f(F)-7
-b(rameSets,)33 b(there)f(ma)n(y)f(b)r(e)i(more)e(than)h(one)g(p)r
-(ossible)g(in)n(termediate)f(co)r(ordinate)g(system)h(in)227
-3816 y(whic)n(h)j(to)g(p)r(erform)f(the)h(con)n(v)n(ersion)e(\(for)h
-(instance,)j(t)n(w)n(o)d(F)-7 b(rameSets)34 b(migh)n(t)h(b)r(oth)g(ha)n
-(v)n(e)f(celestial)g(co)r(ordi-)227 3915 y(nates,)27
-b(detector)g(co)r(ordinates,)g(pixel)g(co)r(ordinates,)f(etc.\).)38
-b(A)27 b(comma-separated)e(list)j(of)g(co)r(ordinate)e(system)227
-4015 y(domains)e(ma)n(y)g(therefore)g(b)r(e)h(giv)n(en)f(whic)n(h)g
-(de\014nes)h(a)f(priorit)n(y)g(order)f(to)h(use)h(when)g(selecting)f
-(the)h(in)n(termedi-)227 4115 y(ate)c(co)r(ordinate)e(system.)34
-b(The)21 b(path)g(used)f(for)g(con)n(v)n(ersion)f(m)n(ust)h(go)g(via)g
-(an)g(in)n(termediate)g(co)r(ordinate)g(system)227 4214
-y(whose)k(Domain)h(attribute)f(matc)n(hes)g(one)h(of)f(the)h(domains)f
-(giv)n(en.)35 b(If)25 b(con)n(v)n(ersion)d(cannot)j(b)r(e)g(ac)n(hiev)n
-(ed)e(using)227 4314 y(the)28 b(\014rst)g(domain,)f(the)h(next)g(one)f
-(is)g(considered,)g(and)g(so)g(on,)h(un)n(til)g(success)e(is)i(ac)n
-(hiev)n(ed.)0 4463 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_CONVERT\()c(FROM,)i(TO,)i(DOMAINLIST,)c(STATUS)i(\))0
-4612 y Fc(Argumen)m(ts:)259 4747 y(FR)m(OM)31 b(=)h(INTEGER)g(\(Giv)m
-(en\))427 4847 y Fk(P)n(oin)n(ter)27 b(to)h(a)g(F)-7
-b(rame)27 b(whic)n(h)h(represen)n(ts)f(the)i Ft(")p Fk(source)p
-Ft(")d Fk(co)r(ordinate)h(system.)38 b(This)28 b(is)g(the)h(co)r
-(ordinate)427 4947 y(system)f(in)f(whic)n(h)h(y)n(ou)f(already)f(ha)n
-(v)n(e)g(co)r(ordinates)h(a)n(v)-5 b(ailable.)427 5063
-y(If)26 b(a)g(F)-7 b(rameSet)25 b(is)h(giv)n(en,)f(its)h(curren)n(t)f
-(F)-7 b(rame)25 b(\(as)g(determined)h(b)n(y)f(its)h(Curren)n(t)f
-(attribute\))h(is)g(tak)n(en)f(to)427 5162 y(describ)r(e)32
-b(the)g(source)f(co)r(ordinate)g(system.)50 b(Note)32
-b(that)g(the)h(Base)e(attribute)h(of)g(this)h(F)-7 b(rameSet)31
-b(ma)n(y)427 5262 y(b)r(e)d(mo)r(di\014ed)f(b)n(y)g(this)g(function)g
-(to)g(indicate)g(whic)n(h)g(in)n(termediate)f(co)r(ordinate)g(system)h
-(w)n(as)f(used)h(\(see)427 5361 y(under)h Ft(")p Fk(F)-7
-b(rameSets)p Ft(")26 b Fk(in)i(the)g Ft(")p Fk(Applicabilit)n(y)p
-Ft(")f Fk(section)g(for)g(details\).)259 5494 y Fc(TO)32
-b(=)g(INTEGER)f(\(Giv)m(en\))427 5593 y Fk(P)n(oin)n(ter)d(to)i(a)f(F)
--7 b(rame)29 b(whic)n(h)h(represen)n(ts)e(the)i Ft(")p
-Fk(destination)p Ft(")f Fk(co)r(ordinate)g(system.)43
-b(This)29 b(is)h(the)g(co)r(or-)427 5693 y(dinate)e(system)f(in)n(to)h
-(whic)n(h)f(y)n(ou)g(wish)h(to)f(con)n(v)n(ert)f(y)n(our)h(co)r
-(ordinates.)p eop end
-%%Page: 204 214
-TeXDict begin 204 213 bop 0 52 a FG(204)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)427 351 y Fk(If)i(a)f(F)-7
-b(rameSet)32 b(is)g(giv)n(en,)h(its)f(curren)n(t)f(F)-7
-b(rame)32 b(\(as)g(determined)g(b)n(y)g(its)h(Curren)n(t)e(attribute\))
-i(is)f(tak)n(en)427 451 y(to)25 b(describ)r(e)g(the)h(destination)f(co)
-r(ordinate)f(system.)35 b(Note)26 b(that)f(the)h(Base)e(attribute)h(of)
-g(this)h(F)-7 b(rameSet)427 551 y(ma)n(y)25 b(b)r(e)i(mo)r(di\014ed)f
-(b)n(y)g(this)g(function)g(to)g(indicate)g(whic)n(h)g(in)n(termediate)f
-(co)r(ordinate)g(system)h(w)n(as)f(used)427 650 y(\(see)j(under)f
-Ft(")p Fk(F)-7 b(rameSets)p Ft(")27 b Fk(in)g(the)h Ft(")p
-Fk(Applicabilit)n(y)p Ft(")f Fk(section)h(for)f(details\).)259
-786 y Fc(DOMAINLIST)33 b(=)f(CHARA)m(CTER)f Fj(\003)h
-Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))427 886 y Fk(A)f(c)n(haracter)d
-(string)h(con)n(taining)g(a)h(comma-separated)e(list)i(of)g(F)-7
-b(rame)30 b(domains.)44 b(This)30 b(ma)n(y)f(b)r(e)i(used)427
-986 y(to)23 b(de\014ne)g(a)g(priorit)n(y)f(order)f(for)i(the)g
-(di\013eren)n(t)g(in)n(termediate)g(co)r(ordinate)f(systems)g(that)h
-(migh)n(t)g(b)r(e)h(used)427 1085 y(to)k(p)r(erform)f(the)h(con)n(v)n
-(ersion.)427 1203 y(The)39 b(function)g(will)f(\014rst)g(try)g(to)g
-(obtain)g(a)g(con)n(v)n(ersion)e(b)n(y)i(making)g(use)g(only)g(of)g(an)
-g(in)n(termediate)427 1303 y(co)r(ordinate)h(system)g(whose)g(Domain)h
-(attribute)g(matc)n(hes)f(the)h(\014rst)g(domain)f(in)h(this)g(list.)74
-b(If)40 b(this)427 1402 y(fails,)32 b(the)g(second)f(domain)g(in)g(the)
-h(list)g(will)f(b)r(e)h(used,)g(and)g(so)e(on,)i(un)n(til)g(con)n(v)n
-(ersion)d(is)i(ac)n(hiev)n(ed.)47 b(A)427 1502 y(blank)26
-b(domain)g(\(e.g.)36 b(t)n(w)n(o)25 b(consecutiv)n(e)g(commas\))g
-(indicates)h(that)g(all)g(co)r(ordinate)f(systems)g(should)h(b)r(e)427
-1602 y(considered,)h(regardless)e(of)j(their)f(domains.)427
-1719 y(This)37 b(list)h(is)f(case-insensitiv)n(e)f(and)h(all)g(white)g
-(space)g(is)g(ignored.)65 b(If)37 b(y)n(ou)g(do)g(not)g(wish)g(to)g
-(restrict)427 1819 y(the)d(domain)f(in)h(this)g(w)n(a)n(y)-7
-b(,)34 b(y)n(ou)e(should)i(supply)f(a)g(blank)g(string.)54
-b(This)34 b(is)f(normally)f(appropriate)g(if)427 1919
-y(either)d(of)g(the)h(source)e(or)g(destination)h(co)r(ordinate)f
-(systems)h(are)f(describ)r(ed)h(b)n(y)g(F)-7 b(rames)28
-b(\(rather)g(than)427 2018 y(F)-7 b(rameSets\),)35 b(since)e(there)g
-(is)g(then)h(usually)f(only)g(one)g(p)r(ossible)g(c)n(hoice)g(of)g(in)n
-(termediate)g(co)r(ordinate)427 2118 y(system.)259 2254
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 2354 y Fk(The)c(global)e(status.)0 2522 y Fc(Class)31
-b(Applicabilit)m(y:)259 2665 y(DSBSp)s(ecF)-8 b(rame)427
-2765 y Fk(If)24 b(the)g(AlignSideBand)g(attribute)g(is)f(non-zero,)g
-(alignmen)n(t)g(o)r(ccurs)g(in)h(the)g(upp)r(er)f(sideband)h(expressed)
-427 2864 y(within)30 b(the)f(sp)r(ectral)f(system)g(and)h(standard)e
-(of)i(rest)f(giv)n(en)g(b)n(y)g(attributes)h(AlignSystem)f(and)h
-(Align-)427 2964 y(StdOfRest.)58 b(If)35 b(AlignSideBand)f(is)g(zero,)i
-(the)e(t)n(w)n(o)g(DSBSp)r(ecF)-7 b(rames)34 b(are)g(aligned)f(as)h(if)
-h(they)g(w)n(ere)427 3064 y(simple)28 b(Sp)r(ecF)-7 b(rames)27
-b(\(i.e.)37 b(the)28 b(SideBand)g(is)f(ignored\).)259
-3200 y Fc(F)-8 b(rame)427 3299 y Fk(This)26 b(function)f(applies)g(to)g
-(all)g(F)-7 b(rames.)36 b(Alignmen)n(t)25 b(o)r(ccurs)g(within)h(the)f
-(co)r(ordinate)f(system)h(giv)n(en)g(b)n(y)427 3399 y(attribute)j
-(AlignSystem.)259 3535 y Fc(F)-8 b(rameSet)427 3635 y
-Fk(If)30 b(either)g(of)g(the)g(FR)n(OM)f(or)g(TO)h(argumen)n(ts)e(is)i
-(a)f(p)r(oin)n(ter)g(to)h(a)f(F)-7 b(rameSet,)31 b(then)f(AST)p
-Ft(_)p Fk(CONVER)-7 b(T)427 3734 y(will)34 b(attempt)g(to)f(con)n(v)n
-(ert)f(from)h(the)h(co)r(ordinate)e(system)h(describ)r(ed)g(b)n(y)g
-(the)h(curren)n(t)e(F)-7 b(rame)33 b(of)g(the)427 3834
-y(FR)n(OM)28 b(F)-7 b(rameSet)27 b(to)g(that)h(describ)r(ed)g(b)n(y)f
-(the)h(curren)n(t)f(F)-7 b(rame)27 b(of)g(the)h(TO)g(F)-7
-b(rameSet.)427 3952 y(T)g(o)34 b(ac)n(hiev)n(e)g(this,)i(it)f(will)g
-(consider)f(all)g(of)g(the)h(F)-7 b(rames)34 b(within)h(eac)n(h)f(F)-7
-b(rameSet)35 b(as)e(a)i(p)r(ossible)f(w)n(a)n(y)427 4051
-y(of)g(reac)n(hing)e(an)i(in)n(termediate)f(co)r(ordinate)g(system)g
-(that)h(can)g(b)r(e)g(used)g(for)f(the)h(con)n(v)n(ersion.)53
-b(There)427 4151 y(is)30 b(then)h(the)g(p)r(ossibilit)n(y)f(that)h
-(more)e(than)i(one)e(con)n(v)n(ersion)f(path)j(ma)n(y)f(exist)g(and,)h
-(unless)f(the)g(c)n(hoice)427 4251 y(is)g(su\016cien)n(tly)g
-(restricted)f(b)n(y)g(the)h(DOMAINLIST)h(string,)e(the)i(sequence)e(in)
-h(whic)n(h)f(the)i(F)-7 b(rames)29 b(are)427 4350 y(considered)19
-b(can)h(b)r(e)g(imp)r(ortan)n(t.)34 b(In)20 b(this)h(case,)f(the)h
-(searc)n(h)d(for)i(a)f(con)n(v)n(ersion)f(path)i(pro)r(ceeds)f(as)h
-(follo)n(ws:)510 4561 y Fj(\017)45 b Fk(Eac)n(h)27 b(\014eld)h(in)f
-(the)h(DOMAINLIST)h(string)e(is)g(considered)g(in)g(turn.)510
-4678 y Fj(\017)45 b Fk(The)26 b(F)-7 b(rames)24 b(within)i(eac)n(h)f(F)
--7 b(rameSet)25 b(are)f(considered)h(in)g(a)g(sp)r(eci\014c)h(order:)34
-b(\(1\))26 b(the)f(base)g(F)-7 b(rame)597 4778 y(is)28
-b(alw)n(a)n(ys)d(considered)i(\014rst,)g(\(2\))h(after)f(this)h(come)f
-(all)h(the)g(other)f(F)-7 b(rames)26 b(in)i(F)-7 b(rame-index)27
-b(order)597 4878 y(\(but)h(omitting)f(the)g(base)g(and)f(curren)n(t)g
-(F)-7 b(rames\),)27 b(\(3\))g(the)g(curren)n(t)f(F)-7
-b(rame)27 b(is)g(alw)n(a)n(ys)e(considered)597 4977 y(last.)35
-b(Ho)n(w)n(ev)n(er,)22 b(if)i(either)f(F)-7 b(rameSet's)23
-b(In)n(v)n(ert)f(attribute)h(is)h(set)f(to)g(a)f(non-zero)g(v)-5
-b(alue)23 b(\(so)g(that)g(the)597 5077 y(F)-7 b(rameSet)30
-b(is)h(in)n(v)n(erted\),)f(then)h(its)g(F)-7 b(rames)30
-b(are)f(considered)h(in)g(rev)n(erse)f(order.)44 b(\(Note)31
-b(that)f(this)597 5177 y(still)h(means)e(that)h(the)h(base)e(F)-7
-b(rame)29 b(is)h(considered)f(\014rst)h(and)g(the)g(curren)n(t)f(F)-7
-b(rame)30 b(last,)g(b)r(ecause)597 5276 y(the)e(In)n(v)n(ert)f(v)-5
-b(alue)27 b(will)h(also)f(cause)g(these)g(F)-7 b(rames)27
-b(to)h(sw)n(ap)e(places.\))510 5394 y Fj(\017)45 b Fk(All)34
-b(source)d(F)-7 b(rames)33 b(are)f(\014rst)g(considered)g(\(in)i(the)f
-(appropriate)e(order\))h(for)h(con)n(v)n(ersion)d(to)j(the)597
-5494 y(\014rst)26 b(destination)g(F)-7 b(rame.)36 b(If)27
-b(no)e(suitable)h(in)n(termediate)g(co)r(ordinate)f(system)h(emerges,)f
-(they)i(are)597 5593 y(then)d(considered)e(again)g(for)g(con)n(v)n
-(ersion)f(to)h(the)i(second)e(destination)h(F)-7 b(rame)22
-b(\(in)i(the)f(appropriate)597 5693 y(order\),)k(and)g(so)g(on.)p
-eop end
-%%Page: 205 215
-TeXDict begin 205 214 bop 3643 52 a FG(205)510 351 y
-Fj(\017)45 b Fk(Generally)-7 b(,)26 b(the)h(\014rst)f(suitable)g(in)n
-(termediate)h(co)r(ordinate)e(system)h(found)h(is)f(used.)36
-b(Ho)n(w)n(ev)n(er,)25 b(the)597 451 y(o)n(v)n(erall)32
-b(Mapping)i(b)r(et)n(w)n(een)h(the)f(source)g(and)g(destination)g(co)r
-(ordinate)f(systems)h(is)g(also)f(exam-)597 551 y(ined.)51
-b(Preference)31 b(is)h(giv)n(en)f(to)h(cases)f(where)h(b)r(oth)g(the)h
-(forw)n(ard)d(and)i(in)n(v)n(erse)f(transformations)597
-650 y(are)g(de\014ned)g(\(as)g(indicated)g(b)n(y)g(the)h(T)-7
-b(ranF)g(orw)n(ard)29 b(and)i(T)-7 b(ranIn)n(v)n(erse)29
-b(attributes\).)48 b(If)31 b(only)g(one)597 750 y(transformation)26
-b(is)i(de\014ned,)g(the)g(forw)n(ard)e(one)h(is)g(preferred.)510
-864 y Fj(\017)45 b Fk(If)39 b(the)g(domain)f(of)g(the)h(in)n
-(termediate)f(co)r(ordinate)f(system)h(matc)n(hes)g(the)h(curren)n(t)e
-(DOMAIN-)597 964 y(LIST)29 b(\014eld,)f(the)h(con)n(v)n(ersion)d(path)i
-(is)h(accepted.)38 b(Otherwise,)28 b(the)h(next)f(DOMAINLIST)h(\014eld)
-g(is)597 1064 y(considered)e(and)g(the)h(pro)r(cess)f(rep)r(eated.)427
-1193 y(If)33 b(con)n(v)n(ersion)c(is)j(p)r(ossible,)g(the)h(Base)d
-(attributes)i(of)g(the)g(t)n(w)n(o)f(F)-7 b(rameSets)31
-b(will)h(b)r(e)h(mo)r(di\014ed)f(on)f(exit)427 1293 y(to)h(iden)n(tify)
-g(the)g(F)-7 b(rames)31 b(used)g(to)h(access)e(the)i(in)n(termediate)f
-(co)r(ordinate)f(system)i(whic)n(h)f(w)n(as)g(\014nally)427
-1393 y(accepted.)427 1507 y(Note)26 b(that)f(it)h(is)f(p)r(ossible)g
-(to)h(force)e(a)h(particular)f(F)-7 b(rame)25 b(within)h(a)f(F)-7
-b(rameSet)25 b(to)h(b)r(e)g(used)f(as)g(the)g(basis)427
-1607 y(for)32 b(the)g(in)n(termediate)g(co)r(ordinate)f(system,)i(if)f
-(it)h(is)f(suitable,)h(b)n(y)f(\(a\))g(fo)r(cussing)g(atten)n(tion)g
-(on)f(it)i(b)n(y)427 1707 y(sp)r(ecifying)h(its)f(domain)g(in)h(the)g
-(DOMAINLIST)g(string,)g(or)f(\(b\))h(making)f(it)h(the)g(base)e(F)-7
-b(rame,)35 b(since)427 1806 y(this)28 b(is)g(alw)n(a)n(ys)d(considered)
-i(\014rst.)259 1936 y Fc(Sp)s(ecF)-8 b(rame)427 2036
-y Fk(Alignmen)n(t)28 b(o)r(ccurs)e(within)i(the)g(sp)r(ectral)f(system)
-g(and)g(standard)g(of)g(rest)g(giv)n(en)f(b)n(y)i(attributes)f(Align-)
-427 2135 y(System)h(and)f(AlignStdOfRest.)259 2265 y
-Fc(TimeF)-8 b(rame)427 2365 y Fk(Alignmen)n(t)24 b(o)r(ccurs)e(within)h
-(the)h(time)f(system)g(and)g(time)g(scale)g(giv)n(en)f(b)n(y)h
-(attributes)g(AlignSystem)g(and)427 2464 y(AlignTimeScale.)0
-2623 y Fc(Returned)32 b(V)-8 b(alue:)259 2756 y(AST)p
-Ft(_)p Fc(CONVER)g(T)32 b(=)g(INTEGER)427 2856 y Fk(If)21
-b(the)g(requested)e(co)r(ordinate)g(con)n(v)n(ersion)f(is)j(p)r
-(ossible,)g(the)g(function)g(returns)e(a)h(p)r(oin)n(ter)g(to)g(a)g(F)
--7 b(rameSet)427 2956 y(whic)n(h)28 b(describ)r(es)f(the)h(con)n(v)n
-(ersion.)36 b(Otherwise,)27 b(a)g(n)n(ull)h(Ob)5 b(ject)28
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))h(is)g(returned)427
-3055 y(without)g(error.)427 3170 y(If)37 b(a)g(F)-7 b(rameSet)36
-b(is)h(returned,)h(it)f(will)g(con)n(tain)f(t)n(w)n(o)g(F)-7
-b(rames.)64 b(F)-7 b(rame)36 b(n)n(um)n(b)r(er)g(1)h(\(its)g(base)f(F)
--7 b(rame\))427 3269 y(will)34 b(describ)r(e)f(the)h(source)f(co)r
-(ordinate)f(system,)j(corresp)r(onding)d(to)h(the)h(FR)n(OM)f(argumen)n
-(t.)54 b(F)-7 b(rame)427 3369 y(n)n(um)n(b)r(er)27 b(2)g(\(its)g
-(curren)n(t)f(F)-7 b(rame\))27 b(will)g(describ)r(e)g(the)g
-(destination)g(co)r(ordinate)f(system,)h(corresp)r(onding)427
-3469 y(to)34 b(the)g(TO)f(argumen)n(t.)55 b(The)33 b(Mapping)h(whic)n
-(h)f(in)n(ter-relates)f(these)i(t)n(w)n(o)f(F)-7 b(rames)33
-b(will)h(p)r(erform)f(the)427 3568 y(required)27 b(con)n(v)n(ersion)e
-(b)r(et)n(w)n(een)j(their)f(resp)r(ectiv)n(e)g(co)r(ordinate)g
-(systems.)427 3683 y(Note)c(that)g(a)g(F)-7 b(rameSet)23
-b(ma)n(y)f(b)r(e)h(used)g(b)r(oth)h(as)e(a)g(Mapping)h(and)g(as)f(a)g
-(F)-7 b(rame.)35 b(If)24 b(the)f(result)g(is)f(used)h(as)427
-3783 y(a)f(Mapping)h(\(e.g.)35 b(with)23 b(AST)p Ft(_)p
-Fk(TRAN2\),)h(then)f(it)f(pro)n(vides)g(a)g(means)g(of)g(con)n(v)n
-(erting)f(co)r(ordinates)g(from)427 3882 y(the)34 b(source)e(to)i(the)g
-(destination)f(co)r(ordinate)f(system)i(\(or)f(vice)g(v)n(ersa)f(if)i
-(its)f(in)n(v)n(erse)f(transformation)427 3982 y(is)g(selected\).)50
-b(If)33 b(it)f(is)g(used)g(as)f(a)h(F)-7 b(rame,)33 b(its)f(attributes)
-g(will)g(describ)r(e)g(the)g(destination)g(co)r(ordinate)427
-4082 y(system.)0 4240 y Fc(Examples:)227 4378 y Fy(CVT)47
-b(=)h(AST)p Ft(_)p Fy(CONVERT\()c(A,)j(B,)g(')h(',)f(STATUS)f(\))427
-4473 y Fk(A)n(ttempts)26 b(to)f(con)n(v)n(ert)e(b)r(et)n(w)n(een)i(the)
-g(co)r(ordinate)f(systems)g(represen)n(ted)g(b)n(y)g(A)i(and)e(B)h
-(\(assumed)f(to)h(b)r(e)427 4573 y(F)-7 b(rames\).)52
-b(If)33 b(successful,)h(a)e(F)-7 b(rameSet)32 b(is)h(returned)f(via)g
-(the)h(CVT)g(p)r(oin)n(ter)f(whic)n(h)h(ma)n(y)f(b)r(e)h(used)g(to)427
-4672 y(apply)28 b(the)g(con)n(v)n(ersion)d(to)i(sets)h(of)f(co)r
-(ordinates)f(\(e.g.)37 b(using)27 b(AST)p Ft(_)p Fk(TRAN2\).)227
-4795 y Fy(CVT)47 b(=)h(AST)p Ft(_)p Fy(CONVERT\()c(AST)p
-Ft(_)p Fy(SKYFRAME\()g(')j(',)h(STATUS)e(\),)h(AST)p
-Ft(_)p Fy(SKYFRAME\()227 4894 y('Equinox=2005',)d(STATUS)i(\),)h(')h
-(',)f(STATUS)f(\))427 4981 y Fk(Creates)23 b(a)g(F)-7
-b(rameSet)23 b(whic)n(h)g(describ)r(es)g(precession)f(in)i(the)g
-(default)g(FK5)f(celestial)g(co)r(ordinate)f(system)427
-5080 y(b)r(et)n(w)n(een)27 b(equino)n(xes)f(J2000)e(\(also)i(the)i
-(default\))f(and)g(J2005.)34 b(The)27 b(returned)f(CVT)i(p)r(oin)n(ter)
-e(ma)n(y)g(then)427 5180 y(b)r(e)31 b(passed)f(to)g(AST)p
-Ft(_)p Fk(TRAN2)h(to)g(apply)f(this)h(precession)e(correction)g(to)h
-(an)n(y)g(n)n(um)n(b)r(er)g(of)h(co)r(ordinate)427 5279
-y(v)-5 b(alues)27 b(giv)n(en)g(in)h(radians.)427 5394
-y(Note)h(that)h(the)f(returned)f(F)-7 b(rameSet)29 b(also)f(con)n
-(tains)g(information)g(ab)r(out)h(ho)n(w)g(to)f(format)h(co)r(ordinate)
-427 5494 y(v)-5 b(alues.)47 b(This)30 b(means)h(that)g(setting)g(its)g
-(Rep)r(ort)f(attribute)h(to)g(1)g(is)f(a)h(simple)g(w)n(a)n(y)e(to)i
-(obtain)g(prin)n(ted)427 5593 y(output)j(\(formatted)f(in)g
-(sexagesimal)e(notation\))i(to)g(sho)n(w)f(the)i(co)r(ordinate)e(v)-5
-b(alues)32 b(b)r(efore)h(and)g(after)427 5693 y(con)n(v)n(ersion.)p
-eop end
-%%Page: 206 216
-TeXDict begin 206 215 bop 0 52 a FG(206)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 355 y Fy(CVT)47
-b(=)h(AST)p Ft(_)p Fy(CONVERT\()c(A,)j(B,)g('SKY,DETECTOR,',)d(STATUS)i
-(\))427 451 y Fk(A)n(ttempts)34 b(to)f(con)n(v)n(ert)f(b)r(et)n(w)n
-(een)h(the)g(co)r(ordinate)f(systems)g(represen)n(ted)g(b)n(y)h(the)g
-(curren)n(t)f(F)-7 b(rames)33 b(of)427 551 y(A)h(and)f(B)g(\(no)n(w)g
-(assumed)g(to)g(b)r(e)g(F)-7 b(rameSets\),)35 b(via)e(the)g(in)n
-(termediate)g Ft(")p Fk(SKY)p Ft(")g Fk(co)r(ordinate)f(system.)427
-650 y(This,)c(b)n(y)g(default,)g(is)g(the)g(Domain)g(asso)r(ciated)e
-(with)i(a)g(celestial)f(co)r(ordinate)g(system)g(represen)n(ted)g(b)n
-(y)427 750 y(a)g(SkyF)-7 b(rame.)427 868 y(If)21 b(this)h(fails)e
-(\(for)h(example,)g(b)r(ecause)g(either)f(F)-7 b(rameSet)21
-b(lac)n(ks)e(celestial)i(co)r(ordinate)e(information\),)j(then)427
-967 y(the)27 b(user-de\014ned)g Ft(")p Fk(DETECTOR)p
-Ft(")e Fk(co)r(ordinate)g(system)i(is)f(used)h(instead.)37
-b(If)27 b(this)g(also)f(fails,)h(then)g(all)427 1067
-y(other)g(p)r(ossible)h(w)n(a)n(ys)e(of)h(ac)n(hieving)g(con)n(v)n
-(ersion)e(are)h(considered)h(b)r(efore)g(giving)g(up.)427
-1185 y(The)e(returned)g(p)r(oin)n(ter)g(CVT)g(indicates)g(whether)g
-(con)n(v)n(ersion)e(w)n(as)h(p)r(ossible)h(and)g(will)g(ha)n(v)n(e)f
-(the)i(v)-5 b(alue)427 1285 y(AST)p Ft(__)p Fk(NULL)33
-b(if)h(it)f(w)n(as)f(not.)53 b(If)33 b(con)n(v)n(ersion)e(w)n(as)h(p)r
-(ossible,)i(CVT)f(will)g(p)r(oin)n(t)g(at)g(a)g(new)g(F)-7
-b(rameSet)427 1384 y(describing)27 b(the)h(con)n(v)n(ersion.)427
-1502 y(The)g(Base)f(attributes)h(of)g(the)g(t)n(w)n(o)f(F)-7
-b(rameSets)28 b(will)g(b)r(e)g(set)g(b)n(y)f(AST)p Ft(_)p
-Fk(CONVER)-7 b(T)28 b(to)g(indicate)g(whic)n(h)427 1602
-y(of)j(their)f(F)-7 b(rames)30 b(w)n(as)g(used)h(for)f(the)h(in)n
-(termediate)f(co)r(ordinate)g(system.)45 b(This)31 b(means)f(that)h(y)n
-(ou)f(can)427 1701 y(subsequen)n(tly)22 b(determine)g(whic)n(h)h(co)r
-(ordinate)e(system)h(w)n(as)f(used)h(b)n(y)g(enquiring)g(the)g(Domain)g
-(attribute)427 1801 y(of)28 b(either)f(base)g(F)-7 b(rame.)0
-1970 y Fc(Notes:)340 2259 y Fj(\017)45 b Fk(The)40 b(Mapping)f
-(represen)n(ted)f(b)n(y)h(the)h(returned)f(F)-7 b(rameSet)40
-b(results)f(in)g(alignmen)n(t)g(taking)g(place)g(in)427
-2359 y(the)g(co)r(ordinate)e(system)g(sp)r(eci\014ed)i(b)n(y)e(the)i
-(AlignSystem)f(attribute)g(of)g(the)h(TO)e(F)-7 b(rame.)68
-b(See)38 b(the)427 2459 y(description)27 b(of)h(the)g(AlignSystem)g
-(attribute)f(for)g(further)h(details.)340 2595 y Fj(\017)45
-b Fk(When)d(aligning)e(\(sa)n(y\))g(t)n(w)n(o)h(images,)i(whic)n(h)e
-(ha)n(v)n(e)f(b)r(een)h(calibrated)f(b)n(y)h(attac)n(hing)f(F)-7
-b(rameSets)41 b(to)427 2694 y(them,)26 b(it)e(is)h(usually)e(necessary)
-g(to)h(con)n(v)n(ert)f(b)r(et)n(w)n(een)h(the)h(base)e(F)-7
-b(rames)24 b(\(represen)n(ting)f Ft(")p Fk(nativ)n(e)p
-Ft(")g Fk(pixel)427 2794 y(co)r(ordinates\))f(of)g(b)r(oth)i(F)-7
-b(rameSets.)34 b(This)23 b(ma)n(y)f(b)r(e)h(ac)n(hiev)n(ed)f(b)n(y)g
-(in)n(v)n(erting)g(the)h(F)-7 b(rameSets)22 b(\(e.g.)35
-b(using)427 2894 y(astIn)n(v)n(ert\))27 b(so)g(as)g(to)g(in)n(terc)n
-(hange)f(their)i(base)f(and)g(curren)n(t)g(F)-7 b(rames)27
-b(b)r(efore)g(using)g(astCon)n(v)n(ert.)340 3030 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 3130
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 3336 3780 12 v 0 3466
-a FA(AST)p Fe(_)p FA(COPY)1482 3467 y Fd(Cop)m(y)37 b(an)i(Ob)7
-b(ject)3057 3466 y FA(AST)p Fe(_)p FA(COPY)0 3663 y Fc(Description:)44
-b Fk(This)38 b(function)h(creates)d(a)i(cop)n(y)f(of)h(an)f(Ob)5
-b(ject)38 b(and)g(returns)f(a)h(p)r(oin)n(ter)f(to)h(the)g(resulting)g
-(new)227 3763 y(Ob)5 b(ject.)62 b(It)36 b(mak)n(es)f(a)h
-Ft(")p Fk(deep)p Ft(")f Fk(cop)n(y)-7 b(,)38 b(whic)n(h)d(con)n(tains)h
-(no)f(references)g(to)h(an)n(y)f(other)g(Ob)5 b(ject)36
-b(\(i.e.)63 b(if)36 b(the)227 3862 y(original)29 b(Ob)5
-b(ject)31 b(con)n(tains)f(references)g(to)g(other)g(Ob)5
-b(jects,)32 b(then)f(the)g(actual)f(data)h(are)e(copied,)j(not)f
-(simply)227 3962 y(the)d(references\).)36 b(This)27 b(means)f(that)i
-(mo)r(di\014cations)e(ma)n(y)h(safely)f(b)r(e)i(made)f(to)f(the)i(cop)n
-(y)e(without)i(indirectly)227 4062 y(a\013ecting)g(an)n(y)e(other)h(Ob)
-5 b(ject.)0 4218 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_COPY\()d(THIS,)h(STATUS)h(\))0 4374 y Fc(Argumen)m(ts:)259
-4518 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 4617
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject)27 b(to)h(b)r(e)g
-(copied.)259 4754 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h
-(and)g(Returned\))427 4853 y Fk(The)c(global)e(status.)0
-5022 y Fc(Class)31 b(Applicabilit)m(y:)259 5165 y(Ob)5
-b(ject)427 5265 y Fk(This)28 b(function)g(applies)f(to)h(all)f(Ob)5
-b(jects.)0 5434 y Fc(Returned)32 b(V)-8 b(alue:)259 5577
-y(AST)p Ft(_)p Fc(COPY)32 b(=)g(INTEGER)427 5677 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(new)f(Ob)5 b(ject.)p eop end
-%%Page: 207 217
-TeXDict begin 207 216 bop 3643 52 a FG(207)0 351 y Fc(Notes:)340
-640 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e
-(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 740 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28
-b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 946 3780 12 v 0 1076 a FA(AST)p Fe(_)p FA(CURRENTTIME)1609
-1077 y Fd(Return)39 b(the)1706 1177 y(curren)m(t)1582
-1277 y(system)f(time)2401 1076 y FA(AST)p Fe(_)p FA(CURRENTTIME)0
-1472 y Fc(Description:)44 b Fk(This)36 b(routine)f(returns)f(the)i
-(curren)n(t)e(system)h(time,)j(represen)n(ted)c(in)i(the)g(form)f(sp)r
-(eci\014ed)g(b)n(y)g(the)227 1571 y(supplied)f(TimeF)-7
-b(rame.)53 b(That)34 b(is,)g(the)g(returned)f(\015oating)f(p)r(oin)n(t)
-i(v)-5 b(alue)33 b(should)g(b)r(e)h(in)n(terpreted)e(using)h(the)227
-1671 y(attribute)d(v)-5 b(alues)28 b(of)h(the)h(TimeF)-7
-b(rame.)41 b(This)29 b(includes)g(System,)h(TimeOrigin,)e(L)-7
-b(TO\013set,)30 b(TimeScale,)f(and)227 1771 y(Unit.)0
-1927 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i
-(AST_CURRENTTIME\()37 b(THIS,)42 b(STATUS)f(\))0 2082
-y Fc(Argumen)m(ts:)259 2225 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427
-2325 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(TimeF)-7 b(rame.)259
-2461 y Fc(ST)f(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 2561 y Fk(The)c(global)e(status.)0 2729
-y Fc(Returned)32 b(V)-8 b(alue:)259 2872 y(AST)p Ft(_)p
-Fc(CURRENTTIME)32 b(=)g(DOUBLE)0 3140 y(Notes:)340 3429
-y Fj(\017)45 b Fk(V)-7 b(alues)35 b(of)g(AST)p Ft(__)p
-Fk(BAD)g(will)h(b)r(e)f(returned)g(if)g(this)h(function)g(is)f(in)n(v)n
-(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)36 b(set)f(to)g(an)427
-3528 y(error)26 b(v)-5 b(alue,)27 b(or)g(if)h(it)g(should)g(fail)f(for)
-g(an)n(y)g(reason.)340 3665 y Fj(\017)45 b Fk(It)33 b(is)f(assumes)f
-(that)i(the)g(system)f(time)g(\(returned)h(b)n(y)f(the)g(C)h(time\(\))g
-(function\))g(follo)n(ws)e(the)i(POSIX)427 3764 y(standard,)24
-b(represen)n(ting)e(a)h(con)n(tin)n(uous)f(monotonic)h(increasing)f
-(coun)n(t)h(of)g(SI)h(seconds)f(since)g(the)h(ep)r(o)r(c)n(h)427
-3864 y(00:00:00)j(UTC)k(1)e(Jan)n(uary)f(1970)g(AD)j(\(equiv)-5
-b(alen)n(t)30 b(to)g(T)-7 b(AI)30 b(with)g(a)g(constan)n(t)f
-(o\013set\).)44 b(Resolution)30 b(is)427 3963 y(one)d(second.)340
-4099 y Fj(\017)45 b Fk(An)24 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)
-h(the)g(TimeF)-7 b(rame)23 b(has)g(a)g(TimeScale)h(v)-5
-b(alue)23 b(whic)n(h)h(cannot)f(b)r(e)h(con)n(v)n(erted)427
-4199 y(to)k(T)-7 b(AI)28 b(\(e.g.)36 b Ft(")p Fk(angular)p
-Ft(")26 b Fk(systems)h(suc)n(h)g(as)g(UT1,)g(GMST,)h(LMST)g(and)g
-(LAST\).)340 4335 y Fj(\017)45 b Fk(An)n(y)28 b(inaccuracy)e(in)i(the)g
-(system)f(clo)r(c)n(k)g(will)h(b)r(e)g(re\015ected)f(in)h(the)g(v)-5
-b(alue)27 b(returned)h(b)n(y)f(this)h(function.)p 0 4541
-V 0 4672 a FA(AST)p Fe(_)p FA(CUR)-15 b(VE)1318 4673
-y Fd(Dra)m(w)38 b(a)g(geo)s(desic)g(curv)m(e)2972 4672
-y FA(AST)p Fe(_)p FA(CUR)-15 b(VE)0 4868 y Fc(Description:)44
-b Fk(This)24 b(routine)g(dra)n(ws)f(a)h(geo)r(desic)f(curv)n(e)g(b)r
-(et)n(w)n(een)h(t)n(w)n(o)g(p)r(oin)n(ts)g(in)g(the)h(ph)n(ysical)e(co)
-r(ordinate)g(system)227 4967 y(of)g(a)f(Plot.)34 b(The)23
-b(curv)n(e)e(dra)n(wn)g(is)h(the)h(path)g(of)f(shortest)g(distance)g
-(joining)g(the)h(t)n(w)n(o)e(p)r(oin)n(ts)h(\(as)g(de\014ned)h(b)n(y)f
-(the)227 5067 y(AST)p Ft(_)p Fk(DIST)-7 b(ANCE)30 b(function)g(for)e
-(the)i(curren)n(t)e(F)-7 b(rame)29 b(of)g(the)g(Plot\).)41
-b(F)-7 b(or)29 b(example,)g(if)g(the)h(curren)n(t)e(F)-7
-b(rame)227 5167 y(is)24 b(a)g(basic)f(F)-7 b(rame,)25
-b(then)f(the)g(curv)n(e)g(joining)f(the)i(t)n(w)n(o)e(p)r(oin)n(ts)h
-(will)g(b)r(e)h(a)e(straigh)n(t)g(line)h(in)h(ph)n(ysical)e(co)r
-(ordinate)227 5266 y(space.)34 b(If)23 b(the)f(curren)n(t)f(F)-7
-b(rame)21 b(is)h(more)f(sp)r(ecialised)g(and)h(describ)r(es,)g(for)g
-(instance,)g(a)g(sky)f(co)r(ordinate)g(system,)227 5366
-y(then)32 b(the)f(geo)r(desic)g(curv)n(e)f(w)n(ould)g(b)r(e)i(a)f
-(great)e(circle)i(in)g(ph)n(ysical)g(co)r(ordinate)e(space)i(passing)f
-(through)g(the)227 5466 y(t)n(w)n(o)d(sky)g(p)r(ositions)g(giv)n(en.)
-227 5593 y(Note)g(that)g(the)g(geo)r(desic)f(curv)n(e)g(is)h
-(transformed)e(in)n(to)i(graphical)e(co)r(ordinate)h(space)g(for)g
-(plotting,)h(so)f(that)h(a)227 5693 y(straigh)n(t)20
-b(line)h(in)g(ph)n(ysical)e(co)r(ordinates)h(ma)n(y)g(result)g(in)h(a)f
-(curv)n(ed)g(line)h(b)r(eing)g(dra)n(wn)e(if)j(the)f(Mapping)f(in)n(v)n
-(olv)n(ed)p eop end
-%%Page: 208 218
-TeXDict begin 208 217 bop 0 52 a FG(208)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 351 y Fk(is)e(non-linear.)40
-b(An)n(y)29 b(discon)n(tin)n(uities)g(in)g(the)h(Mapping)e(b)r(et)n(w)n
-(een)h(ph)n(ysical)g(and)f(graphical)g(co)r(ordinates)g(are)227
-451 y(catered)f(for,)g(as)g(is)h(an)n(y)e(clipping)i(established)f
-(using)h(AST)p Ft(_)p Fk(CLIP)-7 b(.)227 572 y(If)38
-b(y)n(ou)f(need)h(to)f(dra)n(w)g(man)n(y)g(geo)r(desic)g(curv)n(es)f
-(end-to-end,)k(then)e(the)g(AST)p Ft(_)p Fk(POL)-7 b(YCUR)e(VE)37
-b(routine)g(is)227 672 y(equiv)-5 b(alen)n(t)28 b(to)f(rep)r(eatedly)g
-(calling)g(AST)p Ft(_)p Fk(CUR)-9 b(VE,)28 b(but)g(will)g(usually)f(b)r
-(e)h(more)f(e\016cien)n(t.)227 793 y(If)h(y)n(ou)f(need)h(to)f(dra)n(w)
-g(curv)n(es)f(whic)n(h)i(are)e(not)i(geo)r(desics,)e(see)i(AST)p
-Ft(_)p Fk(GENCUR)-9 b(VE)27 b(or)g(AST)p Ft(_)p Fk(GRIDLINE.)0
-935 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_CURVE\()d(THIS,)j
-(START,)f(FINISH,)f(STATUS)i(\))0 1078 y Fc(Argumen)m(ts:)259
-1208 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 1307
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259 1433 y Fc(ST)-8
-b(AR)g(T\()33 b Fj(\003)e Fc(\))h(=)g(DOUBLE)g(PRECISION)g(\(Giv)m
-(en\))427 1533 y Fk(An)f(arra)n(y)-7 b(,)30 b(with)h(one)f(elemen)n(t)h
-(for)f(eac)n(h)g(axis)g(of)h(the)g(Plot,)g(giving)e(the)j(ph)n(ysical)d
-(co)r(ordinates)h(of)g(the)427 1632 y(\014rst)e(p)r(oin)n(t)f(on)h(the)
-g(geo)r(desic)e(curv)n(e.)259 1758 y Fc(FINISH\()32 b
-Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en\))427
-1858 y Fk(An)g(arra)n(y)-7 b(,)30 b(with)h(one)f(elemen)n(t)h(for)f
-(eac)n(h)g(axis)g(of)h(the)g(Plot,)g(giving)e(the)j(ph)n(ysical)d(co)r
-(ordinates)h(of)g(the)427 1958 y(second)d(p)r(oin)n(t)h(on)f(the)h(geo)
-r(desic)f(curv)n(e.)259 2084 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 2183
-y Fk(The)c(global)e(status.)0 2338 y Fc(Notes:)340 2614
-y Fj(\017)45 b Fk(No)32 b(curv)n(e)f(is)g(dra)n(wn)g(if)h(either)g(of)g
-(the)g(ST)-7 b(AR)g(T)32 b(or)f(FINISH)i(arra)n(ys)c(con)n(tains)i(an)n
-(y)g(co)r(ordinates)f(with)427 2714 y(the)e(v)-5 b(alue)28
-b(AST)p Ft(__)p Fk(BAD.)340 2840 y Fj(\017)45 b Fk(An)28
-b(error)e(results)h(if)h(the)g(base)f(F)-7 b(rame)27
-b(of)h(the)g(Plot)f(is)g(not)h(2-dimensional.)340 2966
-y Fj(\017)45 b Fk(An)30 b(error)d(also)g(results)i(if)g(the)g
-(transformation)f(b)r(et)n(w)n(een)h(the)g(curren)n(t)f(and)h(base)f(F)
--7 b(rames)28 b(of)h(the)g(Plot)427 3065 y(is)f(not)f(de\014ned)h
-(\(i.e.)38 b(the)28 b(Plot's)e(T)-7 b(ranIn)n(v)n(erse)26
-b(attribute)h(is)h(zero\).)p 0 3251 3780 12 v 0 3382
-a FA(AST)p Fe(_)p FA(DECOMPOSE)1554 3381 y Fd(Decomp)s(ose)38
-b(a)1435 3494 y(Mapping)g(in)m(to)f(t)m(w)m(o)1610 3594
-y(comp)s(onen)m(t)1641 3707 y(Mappings)2575 3382 y FA(AST)p
-Fe(_)p FA(DECOMPOSE)0 3882 y Fc(Description:)44 b Fk(This)36
-b(routine)g(returns)f(p)r(oin)n(ters)g(to)h(t)n(w)n(o)f(Mappings)g
-(whic)n(h,)j(when)e(applied)g(either)g(in)g(series)e(or)227
-3982 y(parallel,)27 b(are)f(equiv)-5 b(alen)n(t)28 b(to)f(the)h
-(supplied)g(Mapping.)227 4103 y(Since)h(the)g(F)-7 b(rame)28
-b(class)f(inherits)i(from)f(the)h(Mapping)f(class,)g(F)-7
-b(rames)27 b(can)h(b)r(e)h(considered)f(as)f(sp)r(ecial)i(t)n(yp)r(es)
-227 4203 y(of)f(Mappings)f(and)g(so)g(this)h(metho)r(d)g(can)f(b)r(e)h
-(used)g(to)f(decomp)r(ose)g(either)h(CmpMaps)f(or)g(CmpF)-7
-b(rames.)0 4345 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42
-b(AST_DECOMPOSE\()37 b(THIS,)42 b(MAP1,)g(MAP2,)f(SERIES,)g(INVERT1,)f
-(INVERT2,)g(STATUS)h(\))0 4488 y Fc(Argumen)m(ts:)259
-4618 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 4717
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Mapping.)259 4843
-y Fc(MAP1)k(=)g(INTEGER)f(\(Returned\))427 4943 y Fk(A)d(p)r(oin)n(ter)
-f(to)h(\014rst)f(comp)r(onen)n(t)h(Mapping.)259 5069
-y Fc(MAP2)k(=)g(INTEGER)f(\(Returned\))427 5169 y Fk(A)d(p)r(oin)n(ter)
-f(to)h(second)f(comp)r(onen)n(t)g(Mapping.)259 5295 y
-Fc(SERIES)k(=)h(LOGICAL)h(\(Returned\))427 5394 y Fk(Indicates)24
-b(if)h(the)f(comp)r(onen)n(t)g(Mappings)g(are)f(applied)h(in)h(series)e
-(or)g(parallel.)35 b(A)24 b(.TR)n(UE.)g(v)-5 b(alue)24
-b(means)427 5494 y(that)32 b(the)f(supplied)h(Mapping)f(is)g(equiv)-5
-b(alen)n(t)31 b(to)g(applying)f(MAP1)h(follo)n(w)n(ed)f(b)n(y)h(MAP2)f
-(in)i(series.)46 b(A)427 5593 y(zero)33 b(v)-5 b(alue)35
-b(means)e(that)i(the)f(supplied)h(Mapping)f(is)g(equiv)-5
-b(alen)n(t)34 b(to)g(applying)g(MAP1)f(to)i(the)f(lo)n(w)n(er)427
-5693 y(n)n(um)n(b)r(ered)28 b(axes)e(and)i(MAP2)f(to)g(the)h(higher)f
-(n)n(um)n(b)r(ered)g(axes,)g(in)h(parallel.)p eop end
-%%Page: 209 219
-TeXDict begin 209 218 bop 3643 52 a FG(209)259 351 y
-Fc(INVER)-8 b(T1)32 b(=)g(INTEGER)f(\(Returned\))427
-451 y Fk(The)d(v)-5 b(alue)27 b(of)h(the)g(In)n(v)n(ert)f(attribute)g
-(to)h(b)r(e)g(used)f(with)i(MAP1.)259 582 y Fc(INVER)-8
-b(T2)32 b(=)g(INTEGER)f(\(Returned\))427 681 y Fk(The)d(v)-5
-b(alue)27 b(of)h(the)g(In)n(v)n(ert)f(attribute)g(to)h(b)r(e)g(used)f
-(with)i(MAP2.)0 841 y Fc(Class)i(Applicabilit)m(y:)259
-975 y(CmpMap)427 1075 y Fk(If)39 b(the)g(supplied)g(Mapping)f(is)g(a)g
-(CmpMap,)j(then)e(MAP1)f(and)h(MAP2)e(will)i(b)r(e)g(returned)f
-(holding)427 1175 y(p)r(oin)n(ters)d(to)g(the)h(comp)r(onen)n(t)f
-(Mappings)g(used)g(to)g(create)g(the)h(CmpMap,)h(either)e(in)h(series)e
-(or)h(par-)427 1274 y(allel.)62 b(Note,)38 b(c)n(hanging)d(the)i(In)n
-(v)n(ert)e(attribute)h(of)g(either)g(of)g(the)g(comp)r(onen)n(t)g
-(Mappings)g(using)f(the)427 1374 y(returned)25 b(p)r(oin)n(ters)f(will)
-i(ha)n(v)n(e)d(no)i(e\013ect)h(on)f(the)g(supplied)g(CmpMap.)36
-b(This)25 b(is)g(b)r(ecause)g(the)h(CmpMap)427 1474 y(remem)n(b)r(ers)
-31 b(and)g(uses)h(the)g(original)e(settings)h(of)h(the)f(In)n(v)n(ert)g
-(attributes)h(\(that)g(is,)g(the)g(v)-5 b(alues)32 b(of)f(the)427
-1573 y(In)n(v)n(ert)23 b(attributes)h(when)g(the)g(CmpMap)g(w)n(as)f
-(\014rst)g(created\).)35 b(These)24 b(are)e(the)j(In)n(v)n(ert)d(v)-5
-b(alues)24 b(whic)n(h)g(are)427 1673 y(returned)j(in)h(INVER)-7
-b(T1)28 b(and)f(INVER)-7 b(T2.)259 1804 y Fc(T)f(ranMap)427
-1903 y Fk(If)22 b(the)g(supplied)g(Mapping)g(is)f(a)g(T)-7
-b(ranMap,)22 b(then)h(MAP1)e(and)g(MAP2)g(will)h(b)r(e)g(returned)f
-(holding)h(p)r(oin)n(t-)427 2003 y(ers)27 b(to)h(the)g(forw)n(ard)f
-(and)g(in)n(v)n(erse)g(Mappings)g(represen)n(ted)g(b)n(y)g(the)i(T)-7
-b(ranMap)27 b(\(zero)g(will)h(b)r(e)g(returned)427 2102
-y(for)d(SERIES\).)g(Note,)i(c)n(hanging)d(the)i(In)n(v)n(ert)e
-(attribute)i(of)f(either)h(of)f(the)h(comp)r(onen)n(t)f(Mappings)g
-(using)427 2202 y(the)h(returned)e(p)r(oin)n(ters)h(will)g(ha)n(v)n(e)f
-(no)h(e\013ect)g(on)g(the)g(supplied)h(T)-7 b(ranMap.)35
-b(This)25 b(is)g(b)r(ecause)f(the)i(T)-7 b(ran-)427 2302
-y(Map)29 b(remem)n(b)r(ers)e(and)h(uses)g(the)h(original)e(settings)h
-(of)h(the)f(In)n(v)n(ert)g(attributes)g(\(that)h(is,)g(the)g(v)-5
-b(alues)28 b(of)427 2401 y(the)c(In)n(v)n(ert)f(attributes)g(when)h
-(the)g(T)-7 b(ranMap)23 b(w)n(as)f(\014rst)i(created\).)35
-b(These)23 b(are)g(the)h(In)n(v)n(ert)e(v)-5 b(alues)24
-b(whic)n(h)427 2501 y(are)j(returned)g(in)h(INVER)-7
-b(T1)27 b(and)h(INVER)-7 b(T2.)259 2632 y Fc(Mapping)427
-2731 y Fk(F)g(or)29 b(an)n(y)f(class)g(of)h(Mapping)g(other)g(than)g(a)
-g(CmpMap,)g(MAP1)g(will)g(b)r(e)h(returned)f(holding)f(a)h(clone)g(of)
-427 2831 y(the)f(supplied)f(Mapping)g(p)r(oin)n(ter,)g(and)g(MAP2)f
-(will)i(b)r(e)f(returned)g(holding)g(AST)p Ft(__)p Fk(NULL.)g(INVER)-7
-b(T1)427 2931 y(will)30 b(b)r(e)g(returned)g(holding)f(the)h(curren)n
-(t)f(v)-5 b(alue)29 b(of)h(the)g(In)n(v)n(ert)f(attribute)h(for)f(the)h
-(supplied)g(Mapping,)427 3030 y(and)e(INVER)-7 b(T2)27
-b(will)h(b)r(e)g(returned)f(holding)g(zero.)259 3161
-y Fc(CmpF)-8 b(rame)427 3261 y Fk(If)35 b(the)f(supplied)g(Mapping)g
-(is)g(a)f(CmpF)-7 b(rame,)36 b(then)e(MAP1)g(and)f(MAP2)h(will)g(b)r(e)
-g(returned)g(holding)427 3360 y(p)r(oin)n(ters)f(to)g(the)h(comp)r
-(onen)n(t)f(F)-7 b(rames)32 b(used)i(to)f(create)f(the)i(CmpF)-7
-b(rame.)54 b(The)33 b(comp)r(onen)n(t)g(F)-7 b(rames)427
-3460 y(are)27 b(considered)f(to)i(b)r(e)g(in)g(applied)f(in)h
-(parallel.)259 3591 y Fc(F)-8 b(rame)427 3690 y Fk(F)h(or)31
-b(an)n(y)f(class)g(of)h(F)-7 b(rame)30 b(other)g(than)i(a)e(CmpF)-7
-b(rame,)32 b(MAP1)e(will)h(b)r(e)h(returned)e(holding)h(a)f(clone)h(of)
-427 3790 y(the)d(supplied)g(F)-7 b(rame)27 b(p)r(oin)n(ter,)h(and)f
-(MAP2)g(will)h(b)r(e)g(returned)f(holding)g(AST)p Ft(__)p
-Fk(NULL.)0 3950 y Fc(Notes:)340 4230 y Fj(\017)45 b Fk(The)32
-b(returned)f(In)n(v)n(ert)g(v)-5 b(alues)31 b(should)g(b)r(e)h(used)g
-(in)g(preference)f(to)g(the)h(curren)n(t)f(v)-5 b(alues)31
-b(of)h(the)g(In)n(v)n(ert)427 4330 y(attribute)g(in)h(map1)e(and)h
-(map2.)49 b(This)32 b(is)g(b)r(ecause)g(the)g(attributes)g(ma)n(y)f(ha)
-n(v)n(e)g(c)n(hanged)g(v)-5 b(alue)32 b(since)427 4429
-y(the)c(Mappings)f(w)n(ere)g(com)n(bined.)340 4560 y
-Fj(\017)45 b Fk(An)n(y)28 b(c)n(hanges)f(made)h(to)g(the)g(comp)r(onen)
-n(t)g(Mappings)f(using)h(the)g(returned)g(p)r(oin)n(ters)f(will)h(b)r
-(e)h(re\015ected)427 4660 y(in)f(the)g(supplied)g(Mapping.)p
-0 4855 3780 12 v 0 4985 a FA(AST)p Fe(_)p FA(DELETE)1453
-4986 y Fd(Delete)39 b(an)f(Ob)7 b(ject)2906 4985 y FA(AST)p
-Fe(_)p FA(DELETE)0 5171 y Fc(Description:)44 b Fk(This)28
-b(routine)f(deletes)g(an)g(Ob)5 b(ject,)27 b(freeing)g(all)g(resources)
-e(asso)r(ciated)h(with)i(it)g(and)f(rendering)f(an)n(y)227
-5271 y(remaining)h(p)r(oin)n(ters)g(to)g(the)h(Ob)5 b(ject)28
-b(in)n(v)-5 b(alid.)227 5394 y(Note)35 b(that)h(deletion)f(is)g
-(unconditional,)h(regardless)d(of)i(whether)f(other)h(p)r(oin)n(ters)f
-(to)h(the)g(Ob)5 b(ject)35 b(are)f(still)227 5494 y(in)f(use)e(\(p)r
-(ossibly)h(within)h(other)f(Ob)5 b(jects\).)50 b(A)32
-b(safer)f(approac)n(h)f(is)i(to)g(defer)g(deletion,)i(un)n(til)e(all)g
-(references)227 5593 y(to)h(an)f(Ob)5 b(ject)32 b(ha)n(v)n(e)g
-(expired,)h(b)n(y)f(using)g(AST)p Ft(_)p Fk(BEGIN/AST)p
-Ft(_)p Fk(END)g(\(together)g(with)h(AST)p Ft(_)p Fk(CLONE)f(and)227
-5693 y(AST)p Ft(_)p Fk(ANNUL)d(if)f(necessary\).)p eop
-end
-%%Page: 210 220
-TeXDict begin 210 219 bop 0 52 a FG(210)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(In)m(v)m(o)s(cation:)
-123 b Ft(CALL)42 b(AST_DELETE\()d(THIS,)i(STATUS)g(\))0
-498 y Fc(Argumen)m(ts:)259 632 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en)g
-(and)g(Returned\))427 731 y Fk(P)n(oin)n(ter)26 b(to)h(the)h(Ob)5
-b(ject)27 b(to)g(b)r(e)h(deleted.)37 b(A)28 b(n)n(ull)f(p)r(oin)n(ter)g
-(v)-5 b(alue)28 b(\(AST)p Ft(__)p Fk(NULL\))f(is)h(alw)n(a)n(ys)d
-(returned.)259 862 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h
-(and)g(Returned\))427 961 y Fk(The)c(global)e(status.)0
-1120 y Fc(Class)31 b(Applicabilit)m(y:)259 1254 y(Ob)5
-b(ject)427 1354 y Fk(This)28 b(routine)f(applies)g(to)h(all)f(Ob)5
-b(jects.)0 1513 y Fc(Notes:)340 1793 y Fj(\017)45 b Fk(This)28
-b(routine)f(attempts)g(to)h(execute)f(ev)n(en)g(if)g(ST)-7
-b(A)g(TUS)29 b(is)e(set)g(to)h(an)f(error)e(v)-5 b(alue)27
-b(on)g(en)n(try)-7 b(,)27 b(although)427 1893 y(no)h(further)f(error)f
-(rep)r(ort)h(will)g(b)r(e)h(made)g(if)g(it)g(subsequen)n(tly)f(fails)g
-(under)h(these)g(circumstances.)p 0 2086 3780 12 v 0
-2217 a FA(AST)p Fe(_)p FA(DELFITS)1072 2218 y Fd(Delete)39
-b(the)f(curren)m(t)g(FITS)h(card)f(in)1604 2318 y(a)h(FitsChan)2873
-2217 y FA(AST)p Fe(_)p FA(DELFITS)0 2478 y Fc(Description:)44
-b Fk(This)33 b(routine)e(deletes)i(the)f(curren)n(t)f(FITS)i(card)e
-(from)h(a)g(FitsChan.)51 b(The)32 b(curren)n(t)f(card)h(ma)n(y)f(b)r(e)
-227 2578 y(selected)e(using)f(the)h(Card)f(attribute)h(\(if)h(its)e
-(index)h(is)g(kno)n(wn\))f(or)g(b)n(y)g(using)h(AST)p
-Ft(_)p Fk(FINDFITS)g(\(if)h(only)e(the)227 2677 y(FITS)g(k)n(eyw)n(ord)
-e(is)h(kno)n(wn\).)227 2801 y(After)h(deletion,)g(the)g(follo)n(wing)f
-(card)f(b)r(ecomes)h(the)h(curren)n(t)f(card.)0 2947
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_DELFITS\()c(THIS,)k
-(STATUS)f(\))0 3094 y Fc(Argumen)m(ts:)259 3228 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 3327 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(FitsChan.)259 3458 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 3557
-y Fk(The)c(global)e(status.)0 3716 y Fc(Notes:)340 3996
-y Fj(\017)45 b Fk(This)23 b(function)f(returns)g(without)h(action)e(if)
-i(the)g(FitsChan)f(is)h(initially)f(p)r(ositioned)g(at)g(the)h
-Ft(")p Fk(end-of-\014le)p Ft(")427 4096 y Fk(\(i.e.)38
-b(if)28 b(the)g(Card)e(attribute)i(exceeds)f(the)h(n)n(um)n(b)r(er)f
-(of)h(cards)e(in)i(the)g(FitsChan\).)340 4226 y Fj(\017)45
-b Fk(If)36 b(there)f(are)f(no)h(subsequen)n(t)f(cards)g(in)i(the)f
-(FitsChan,)i(then)f(the)f(Card)g(attribute)g(is)g(left)h(p)r(oin)n
-(ting)427 4326 y(at)e(the)g Ft(")p Fk(end-of-\014le)p
-Ft(")e Fk(after)h(deletion)h(\(i.e.)55 b(is)33 b(set)h(to)f(one)g(more)
-g(than)g(the)h(n)n(um)n(b)r(er)g(of)f(cards)f(in)i(the)427
-4425 y(FitsChan\).)p 0 4619 V 0 4750 a FA(AST)p Fe(_)p
-FA(DIST)-11 b(ANCE)1320 4751 y Fd(Calculate)37 b(the)h(distance)1280
-4851 y(b)s(et)m(w)m(een)g(t)m(w)m(o)f(p)s(oin)m(ts)h(in)g(a)1730
-4964 y(F)-10 b(rame)2746 4750 y FA(AST)p Fe(_)p FA(DIST)f(ANCE)0
-5124 y Fc(Description:)44 b Fk(This)30 b(function)h(\014nds)f(the)g
-(distance)g(b)r(et)n(w)n(een)g(t)n(w)n(o)f(p)r(oin)n(ts)h(whose)f(F)-7
-b(rame)30 b(co)r(ordinates)e(are)h(giv)n(en.)227 5224
-y(The)f(distance)f(calculated)g(is)h(that)g(along)e(the)i(geo)r(desic)f
-(curv)n(e)f(that)i(joins)g(the)g(t)n(w)n(o)e(p)r(oin)n(ts.)227
-5347 y(F)-7 b(or)34 b(example,)h(in)f(a)f(basic)h(F)-7
-b(rame,)35 b(the)f(distance)f(calculated)h(will)g(b)r(e)g(the)g
-(Cartesian)f(distance)h(along)e(the)227 5447 y(straigh)n(t)k(line)h
-(joining)g(the)h(t)n(w)n(o)e(p)r(oin)n(ts.)65 b(F)-7
-b(or)37 b(a)f(more)g(sp)r(ecialised)h(F)-7 b(rame)36
-b(describing)h(a)f(sky)h(co)r(ordinate)227 5546 y(system,)25
-b(ho)n(w)n(ev)n(er,)f(it)h(w)n(ould)f(b)r(e)i(the)f(distance)f(along)g
-(the)h(great)f(circle)g(passing)g(through)g(t)n(w)n(o)g(sky)g(p)r
-(ositions.)0 5693 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_DISTANCE\()38 b(THIS,)k(POINT1,)e(POINT2,)h(STATUS)g(\))p
-eop end
-%%Page: 211 221
-TeXDict begin 211 220 bop 3643 52 a FG(211)0 351 y Fc(Argumen)m(ts:)259
-492 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 592 y
-Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7 b(rame.)259 727
-y Fc(POINT1\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m
-(en\))427 827 y Fk(An)d(arra)n(y)c(with)k(one)f(elemen)n(t)g(for)f(eac)
-n(h)h(F)-7 b(rame)26 b(axis)g(\(Naxes)h(attribute\))h(con)n(taining)e
-(the)h(co)r(ordinates)427 926 y(of)h(the)g(\014rst)f(p)r(oin)n(t.)259
-1061 y Fc(POINT2\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e
-(\(Giv)m(en\))427 1161 y Fk(An)22 b(arra)n(y)d(with)j(one)f(elemen)n(t)
-h(for)f(eac)n(h)f(F)-7 b(rame)21 b(axis)g(con)n(taining)f(the)i(co)r
-(ordinates)e(of)i(the)g(second)e(p)r(oin)n(t.)259 1296
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 1396 y Fk(The)c(global)e(status.)0 1562 y Fc(Returned)32
-b(V)-8 b(alue:)259 1703 y(AST)p Ft(_)p Fc(DIST)g(ANCE)33
-b(=)f(DOUBLE)g(PRECISION)427 1803 y Fk(The)c(distance)f(b)r(et)n(w)n
-(een)h(the)g(t)n(w)n(o)f(p)r(oin)n(ts.)0 1970 y Fc(Notes:)340
-2257 y Fj(\017)45 b Fk(This)30 b(function)g(will)f(return)g(a)g
-Ft(")p Fk(bad)p Ft(")g Fk(result)g(v)-5 b(alue)29 b(\(AST)p
-Ft(__)p Fk(BAD\))h(if)g(an)n(y)f(of)g(the)h(input)g(co)r(ordinates)427
-2356 y(has)d(this)h(v)-5 b(alue.)340 2491 y Fj(\017)45
-b Fk(A)29 b Ft(")p Fk(bad)p Ft(")f Fk(v)-5 b(alue)28
-b(will)h(also)e(b)r(e)i(returned)f(if)h(this)g(function)g(is)f(in)n(v)n
-(ok)n(ed)f(with)i(ST)-7 b(A)g(TUS)30 b(set)e(to)g(an)h(error)427
-2591 y(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p 0 2795 3780 12 v 0 2926 a FA(AST)p Fe(_)p
-FA(DO)l(WNSIZE)1323 2927 y Fd(Reduce)39 b(the)g(n)m(um)m(b)s(er)f(of)
-1355 3026 y(v)m(ertices)g(in)g(a)h(P)m(olygon)2708 2926
-y FA(AST)p Fe(_)p FA(DO)l(WNSIZE)0 3220 y Fc(Description:)44
-b Fk(This)26 b(function)h(returns)e(a)g(p)r(oin)n(ter)h(to)g(a)f(new)h
-(P)n(olygon)e(that)i(con)n(tains)f(a)g(subset)h(of)g(the)h(v)n(ertices)
-d(in)227 3319 y(the)k(supplied)f(P)n(olygon.)35 b(The)27
-b(subset)g(is)g(c)n(hosen)f(so)g(that)i(the)f(returned)g(P)n(olygon)e
-(is)h(a)h(go)r(o)r(d)f(appro)n(ximation)227 3419 y(to)g(the)h(supplied)
-f(P)n(olygon,)e(within)j(the)f(limits)h(sp)r(eci\014ed)f(b)n(y)g(the)g
-(supplied)g(parameter)f(v)-5 b(alues.)36 b(That)26 b(is,)g(the)227
-3519 y(densit)n(y)g(of)g(p)r(oin)n(ts)f(in)h(the)g(returned)g(P)n
-(olygon)d(is)j(greater)e(at)i(p)r(oin)n(ts)f(where)g(the)i(curv)-5
-b(ature)25 b(of)g(the)h(b)r(oundary)227 3618 y(of)i(the)g(supplied)g(P)
-n(olygon)d(is)j(greater.)0 3772 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_DOWNSIZE\()38 b(THIS,)k(MAXERR,)e(MAXVERT,)h
-(STATUS)g(\))0 3926 y Fc(Argumen)m(ts:)259 4067 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 4167 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(P)n(olygon.)259 4302 y Fc(MAXERR)j(=)h(DOUBLE)g(PRECISION)
-f(\(Giv)m(en\))427 4402 y Fk(The)22 b(maxim)n(um)g(allo)n(w)n(ed)e
-(discrepancy)g(b)r(et)n(w)n(een)i(the)g(supplied)g(and)g(returned)f(P)n
-(olygons,)g(expressed)f(as)427 4501 y(a)k(geo)r(desic)f(distance)h
-(within)g(the)h(P)n(olygon's)c(co)r(ordinate)i(frame.)36
-b(If)24 b(this)g(is)g(zero)f(or)g(less,)i(the)f(returned)427
-4601 y(P)n(olygon)i(will)h(ha)n(v)n(e)g(the)h(n)n(um)n(b)r(er)f(of)h(v)
-n(ertices)e(sp)r(eci\014ed)i(b)n(y)f(MAXVER)-7 b(T.)259
-4736 y Fc(MAXVER)f(T)32 b(=)g(INTEGER)f(\(Giv)m(en\))427
-4836 y Fk(The)36 b(maxim)n(um)f(allo)n(w)n(ed)f(n)n(um)n(b)r(er)h(of)h
-(v)n(ertices)e(in)i(the)f(returned)g(P)n(olygon.)59 b(If)35
-b(this)h(is)f(less)g(than)h(3,)427 4935 y(the)c(n)n(um)n(b)r(er)e(of)h
-(v)n(ertices)f(in)h(the)g(returned)g(P)n(olygon)d(will)k(b)r(e)f(the)g
-(minim)n(um)h(needed)f(to)g(ac)n(hiev)n(e)e(the)427 5035
-y(maxim)n(um)f(discrepancy)e(sp)r(eci\014ed)i(b)n(y)f(MAXERR.)259
-5170 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5270 y Fk(The)c(global)e(status.)0 5436
-y Fc(Returned)32 b(V)-8 b(alue:)259 5577 y(AST)p Ft(_)p
-Fc(DO)m(WNSIZE)32 b(=)g(INTEGER)427 5677 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(new)f(P)n(olygon.)p eop end
-%%Page: 212 222
-TeXDict begin 212 221 bop 0 52 a FG(212)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(Notes:)340
-642 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e
-(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 742 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28
-b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 949 3780 12 v 0 1080 a FA(AST)p Fe(_)p FA(DSBSPECFRAME)210
-b Fd(Create)37 b(a)1752 1179 y(DSB-)1611 1279 y(Sp)s(ecF)-10
-b(rame)2320 1080 y FA(AST)p Fe(_)p FA(DSBSPECFRAME)0
-1476 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(DSBSp)r(ecF)-7 b(rame)28 b(and)g(optionally)e(initialises)i(its)f
-(attributes.)227 1605 y(A)37 b(DSBSp)r(ecF)-7 b(rame)37
-b(is)f(a)g(sp)r(ecialised)g(form)g(of)h(Sp)r(ecF)-7 b(rame)36
-b(whic)n(h)h(represen)n(ts)e(p)r(ositions)h(in)g(a)g(sp)r(ectrum)227
-1704 y(obtained)f(using)g(a)f(dual)h(sideband)g(instrumen)n(t.)60
-b(Suc)n(h)35 b(an)g(instrumen)n(t)g(pro)r(duces)f(a)h(sp)r(ectrum)g(in)
-h(whic)n(h)227 1804 y(eac)n(h)f(p)r(oin)n(t)h(con)n(tains)e(con)n
-(tributions)h(from)g(t)n(w)n(o)g(distinctly)h(di\013eren)n(t)f
-(frequencies,)i(one)f(from)f(the)h Ft(")p Fk(lo)n(w)n(er)227
-1903 y(side)41 b(band)p Ft(")f Fk(\(LSB\))h(and)f(one)g(from)h(the)g
-Ft(")p Fk(upp)r(er)f(side)g(band)p Ft(")g Fk(\(USB\).)i(Corresp)r
-(onding)d(LSB)h(and)g(USB)227 2003 y(frequencies)d(are)f(connected)h(b)
-n(y)g(the)g(fact)h(that)f(they)g(are)g(an)f(equal)h(distance)g(on)g
-(either)g(side)g(of)g(a)g(\014xed)227 2103 y(cen)n(tral)27
-b(frequency)g(kno)n(wn)g(as)g(the)h Ft(")p Fk(Lo)r(cal)e(Oscillator)p
-Ft(")g Fk(\(LO\))i(frequency)-7 b(.)227 2231 y(When)33
-b(quoting)e(a)g(p)r(osition)h(within)g(suc)n(h)g(a)f(sp)r(ectrum,)i(it)
-g(is)e(necessary)f(to)i(indicate)g(whether)g(the)g(quoted)227
-2331 y(p)r(osition)27 b(is)g(the)g(USB)g(p)r(osition)g(or)f(the)i
-(corresp)r(onding)d(LSB)i(p)r(osition.)36 b(The)27 b(SideBand)g
-(attribute)g(pro)n(vides)227 2431 y(this)36 b(indication.)60
-b(Another)35 b(option)g(that)h(the)f(SideBand)g(attribute)h(pro)n
-(vides)e(is)h(to)g(represen)n(t)f(a)h(sp)r(ectral)227
-2530 y(p)r(osition)28 b(b)n(y)f(its)h(top)r(o)r(cen)n(tric)f(o\013set)g
-(from)h(the)g(LO)f(frequency)-7 b(.)227 2659 y(In)32
-b(practice,)f(the)h(LO)f(frequency)g(is)g(sp)r(eci\014ed)g(b)n(y)g
-(giving)g(the)h(distance)f(from)g(the)g(LO)g(frequency)g(to)g(some)227
-2759 y Ft(")p Fk(cen)n(tral)p Ft(")37 b Fk(sp)r(ectral)h(p)r(osition.)
-69 b(T)n(ypically)37 b(this)i(cen)n(tral)e(p)r(osition)h(is)h(that)f
-(of)h(some)f(in)n(teresting)f(sp)r(ectral)227 2858 y(feature.)f(The)23
-b(distance)h(from)f(this)h(cen)n(tral)f(p)r(osition)g(to)h(the)g(LO)f
-(frequency)g(is)g(kno)n(wn)g(as)g(the)h Ft(")p Fk(in)n(termediate)227
-2958 y(frequency)p Ft(")k Fk(\(IF\).)h(The)g(v)-5 b(alue)28
-b(supplied)h(for)f(IF)h(can)f(b)r(e)h(a)f(signed)g(v)-5
-b(alue)28 b(in)h(order)e(to)h(indicate)h(whether)f(the)227
-3057 y(LO)f(frequency)h(is)f(ab)r(o)n(v)n(e)f(or)h(b)r(elo)n(w)g(the)h
-(cen)n(tral)f(p)r(osition.)0 3215 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_DSBSPECFRAME)o(\()38 b(OPTIONS,)i(STATUS)h(\))
-0 3373 y Fc(Argumen)m(ts:)259 3518 y(OPTIONS)32 b(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-3617 y Fk(A)g(c)n(haracter)e(string)h(con)n(taining)f(an)h(optional)g
-(comma-separated)e(list)j(of)g(attribute)f(assignmen)n(ts)g(to)427
-3717 y(b)r(e)e(used)f(for)g(initialising)g(the)h(new)f(DSBSp)r(ecF)-7
-b(rame.)39 b(The)28 b(syn)n(tax)f(used)i(is)f(iden)n(tical)g(to)g(that)
-g(for)g(the)427 3816 y(AST)p Ft(_)p Fk(SET)f(routine.)259
-3953 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 4053 y Fk(The)c(global)e(status.)0 4223
-y Fc(Returned)32 b(V)-8 b(alue:)259 4368 y(AST)p Ft(_)p
-Fc(DSBSPECFRAME)32 b(=)g(INTEGER)427 4467 y Fk(A)c(p)r(oin)n(ter)f(to)h
-(the)g(new)g(DSBSp)r(ecF)-7 b(rame.)0 4638 y Fc(Notes:)340
-4928 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e
-(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 5028 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 5236 V 0 5366 a FA(AST)p Fe(_)p FA(ELLIPSE)1482 5367
-y Fd(Create)37 b(a)i(Ellipse)2893 5366 y FA(AST)p Fe(_)p
-FA(ELLIPSE)0 5564 y Fc(Description:)44 b Fk(This)28 b(function)g
-(creates)f(a)g(new)g(Ellipse)g(and)h(optionally)f(initialises)g(its)h
-(attributes.)227 5693 y(A)g(Ellipse)f(is)h(a)f(Region)g(whic)n(h)g
-(represen)n(ts)g(a)g(elliptical)g(area)g(within)h(the)g(supplied)g
-(2-dimensional)e(F)-7 b(rame.)p eop end
-%%Page: 213 223
-TeXDict begin 213 222 bop 3643 52 a FG(213)0 351 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(RESULT)41 b(=)i(AST_ELLIPSE\()c(FRAME,)i(FORM,)g
-(CENTRE,)g(POINT1,)g(POINT2,)f(UNC,)i(OPTIONS,)f(STATUS)227
-451 y(\))0 600 y Fc(Argumen)m(ts:)259 735 y(FRAME)31
-b(=)h(INTEGER)g(\(Giv)m(en\))427 835 y Fk(A)e(p)r(oin)n(ter)f(to)g(the)
-g(F)-7 b(rame)29 b(in)g(whic)n(h)g(the)h(region)e(is)h(de\014ned.)42
-b(It)30 b(m)n(ust)f(ha)n(v)n(e)f(exactly)g(2)h(axes.)41
-b(A)29 b(deep)427 934 y(cop)n(y)h(is)g(tak)n(en)f(of)i(the)f(supplied)h
-(F)-7 b(rame.)44 b(This)30 b(means)g(that)h(an)n(y)e(subsequen)n(t)h(c)
-n(hanges)f(made)h(to)g(the)427 1034 y(F)-7 b(rame)27
-b(using)h(the)g(supplied)f(p)r(oin)n(ter)h(will)g(ha)n(v)n(e)e(no)h
-(e\013ect)h(the)g(Region.)259 1166 y Fc(F)m(ORM)j(=)h(INTEGER)g(\(Giv)m
-(en\))427 1266 y Fk(Indicates)26 b(ho)n(w)g(the)g(ellipse)g(is)h
-(describ)r(ed)f(b)n(y)f(the)i(remaining)e(parameters.)35
-b(A)26 b(v)-5 b(alue)27 b(of)f(zero)f(indicates)427 1365
-y(that)32 b(the)g(ellipse)g(is)f(sp)r(eci\014ed)h(b)n(y)g(a)f(cen)n
-(tre)g(p)r(osition)h(and)f(t)n(w)n(o)g(p)r(ositions)g(on)h(the)g
-(circumference.)48 b(A)427 1465 y(v)-5 b(alue)25 b(of)g(one)g
-(indicates)g(that)g(the)h(ellipse)f(is)g(sp)r(eci\014ed)g(b)n(y)g(its)g
-(cen)n(tre)g(p)r(osition,)g(the)h(half-lengths)e(of)h(its)427
-1565 y(t)n(w)n(o)i(axes,)g(and)g(the)h(orien)n(tation)e(of)i(its)g
-(\014rst)f(axis.)259 1697 y Fc(CENTRE\()k(2)h(\))g(=)g(DOUBLE)g
-(PRECISION)f(\(Giv)m(en\))427 1796 y Fk(An)d(arra)n(y)e(con)n(taining)g
-(the)i(co)r(ordinates)e(at)i(the)g(cen)n(tre)f(of)g(the)h(ellipse.)259
-1928 y Fc(POINT1\()k(2)g(\))g(=)g(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427
-2028 y Fk(If)25 b(F)n(ORM)g(is)f(zero,)h(this)g(arra)n(y)d(should)j
-(con)n(tain)f(the)h(co)r(ordinates)e(of)i(one)f(of)h(the)g(four)f(p)r
-(oin)n(ts)h(where)f(an)427 2128 y(axis)j(of)h(the)g(ellipse)g(crosses)d
-(the)j(circumference)f(of)h(the)g(ellipse.)37 b(If)28
-b(F)n(ORM)g(is)f(one,)h(it)g(should)f(con)n(tain)427
-2227 y(the)39 b(lengths)f(of)g(semi-ma)5 b(jor)36 b(and)i(semi-minor)g
-(axes)f(of)h(the)g(ellipse,)j(giv)n(en)c(as)h(geo)r(desic)f(distances)
-427 2327 y(within)29 b(the)f(F)-7 b(rame.)259 2459 y
-Fc(POINT2\()32 b(2)g(\))g(=)g(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427
-2558 y Fk(If)k(F)n(ORM)f(is)g(zero,)h(this)g(arra)n(y)d(should)i(con)n
-(taining)f(the)h(co)r(ordinates)f(at)h(some)g(other)g(p)r(oin)n(t)g(on)
-g(the)427 2658 y(circumference)25 b(of)h(the)g(ellipse,)g(distinct)h
-(from)e(POINT1.)35 b(If)26 b(F)n(ORM)g(is)f(one,)h(the)g(\014rst)g
-(elemen)n(t)g(of)f(this)427 2758 y(arra)n(y)30 b(should)h(hold)h(the)g
-(angle)f(b)r(et)n(w)n(een)h(the)g(second)g(axis)f(of)h(the)g(F)-7
-b(rame)31 b(and)h(the)g(\014rst)g(ellipse)f(axis)427
-2857 y(\(i.e.)52 b(the)33 b(ellipse)f(axis)f(whic)n(h)i(is)f(sp)r
-(eci\014ed)h(\014rst)f(in)g(the)h(POINT1)e(arra)n(y\),)h(and)g(the)h
-(second)e(elemen)n(t)427 2957 y(will)g(b)r(e)g(ignored.)45
-b(The)31 b(angle)f(should)g(b)r(e)h(giv)n(en)f(in)h(radians,)f
-(measured)g(p)r(ositiv)n(e)g(in)h(the)g(same)f(sense)427
-3057 y(as)g(rotation)g(from)g(the)h(p)r(ositiv)n(e)f(direction)g(of)h
-(the)g(second)f(F)-7 b(rame)30 b(axis)g(to)g(the)h(p)r(ositiv)n(e)f
-(direction)h(of)427 3156 y(the)d(\014rst)g(F)-7 b(rame)27
-b(axis.)259 3288 y Fc(UNC)32 b(=)g(INTEGER)f(\(Giv)m(en\))427
-3388 y Fk(An)i(optional)e(p)r(oin)n(ter)h(to)g(an)g(existing)g(Region)f
-(whic)n(h)h(sp)r(eci\014es)g(the)h(uncertain)n(ties)e(asso)r(ciated)g
-(with)427 3487 y(the)j(b)r(oundary)f(of)g(the)h(Bo)n(x)f(b)r(eing)g
-(created.)54 b(The)34 b(uncertain)n(t)n(y)e(in)i(an)n(y)f(p)r(oin)n(t)h
-(on)f(the)h(b)r(oundary)f(of)427 3587 y(the)g(Bo)n(x)e(is)h(found)h(b)n
-(y)f(shifting)h(the)f(supplied)h Ft(")p Fk(uncertain)n(t)n(y)p
-Ft(")e Fk(Region)g(so)h(that)g(it)h(is)f(cen)n(tred)g(at)g(the)427
-3687 y(b)r(oundary)e(p)r(oin)n(t)h(b)r(eing)g(considered.)44
-b(The)31 b(area)e(co)n(v)n(ered)g(b)n(y)h(the)h(shifted)g(uncertain)n
-(t)n(y)f(Region)g(then)427 3786 y(represen)n(ts)g(the)i(uncertain)n(t)n
-(y)f(in)g(the)h(b)r(oundary)f(p)r(osition.)48 b(The)31
-b(uncertain)n(t)n(y)g(is)g(assumed)g(to)g(b)r(e)h(the)427
-3886 y(same)27 b(for)g(all)h(p)r(oin)n(ts.)427 4002 y(If)38
-b(supplied,)j(the)d(uncertain)n(t)n(y)f(Region)g(m)n(ust)g(b)r(e)i(of)e
-(a)g(class)g(for)g(whic)n(h)h(all)f(instances)g(are)g(cen)n(tro-)427
-4101 y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24 b(Circle,)g(Ellipse,)h
-(etc.\))36 b(or)23 b(b)r(e)i(a)e(Prism)h(con)n(taining)f(cen)n
-(tro-symetric)f(comp)r(onen)n(t)427 4201 y(Regions.)57
-b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f(will)g(b)r(e)h
-(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)427
-4301 y(uncertain)n(t)n(y)g(Region)g(using)g(the)h(supplied)g(p)r(oin)n
-(ter)g(will)f(ha)n(v)n(e)g(no)g(e\013ect)h(on)g(the)g(created)f(Bo)n
-(x.)57 b(Al-)427 4400 y(ternativ)n(ely)-7 b(,)34 b(a)f(n)n(ull)g(Ob)5
-b(ject)33 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fk(NULL\))g(ma)n(y)f(b)r(e)
-i(supplied,)h(in)e(whic)n(h)g(case)f(a)h(default)427
-4500 y(uncertain)n(t)n(y)27 b(is)g(used)h(equiv)-5 b(alen)n(t)27
-b(to)h(a)f(b)r(o)n(x)g(1.0E-6)f(of)h(the)h(size)f(of)h(the)g(Bo)n(x)e
-(b)r(eing)i(created.)427 4616 y(The)h(uncertain)n(t)n(y)f(Region)g(has)
-h(t)n(w)n(o)f(uses:)39 b(1\))29 b(when)g(the)g(AST)p
-Ft(_)p Fk(O)n(VERLAP)f(function)h(compares)e(t)n(w)n(o)427
-4715 y(Regions)j(for)g(equalit)n(y)g(the)h(uncertain)n(t)n(y)f(Region)g
-(is)g(used)h(to)g(determine)f(the)h(tolerance)f(on)g(the)h(com-)427
-4815 y(parison,)23 b(and)g(2\))g(when)g(a)f(Region)h(is)g(mapp)r(ed)g
-(in)n(to)g(a)f(di\013eren)n(t)i(co)r(ordinate)d(system)i(and)g
-(subsequen)n(tly)427 4915 y(simpli\014ed)e(\(using)f(AST)p
-Ft(_)p Fk(SIMPLIFY\),)h(the)f(uncertain)n(ties)g(are)f(used)h(to)g
-(determine)g(if)h(the)g(transformed)427 5014 y(b)r(oundary)27
-b(can)g(b)r(e)h(accurately)f(represen)n(ted)f(b)n(y)h(a)g(sp)r
-(eci\014c)h(shap)r(e)g(of)f(Region.)259 5146 y Fc(OPTIONS)32
-b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))
-427 5246 y Fk(A)g(c)n(haracter)e(string)h(con)n(taining)f(an)h
-(optional)g(comma-separated)e(list)j(of)g(attribute)f(assignmen)n(ts)g
-(to)427 5346 y(b)r(e)24 b(used)f(for)g(initialising)f(the)i(new)f
-(Ellipse.)35 b(The)23 b(syn)n(tax)f(used)i(is)f(iden)n(tical)f(to)h
-(that)h(for)e(the)i(AST)p Ft(_)p Fk(SET)427 5445 y(routine.)259
-5577 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5677 y Fk(The)c(global)e(status.)p eop
-end
-%%Page: 214 224
-TeXDict begin 214 223 bop 0 52 a FG(214)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(Returned)h(V)-8
-b(alue:)259 484 y(AST)p Ft(_)p Fc(ELLIPSE)33 b(=)f(INTEGER)427
-584 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(Ellipse.)0
-742 y Fc(Notes:)340 1021 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 1121 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 1313 3780 12 v 0 1444 a FA(AST)p Fe(_)p FA(ELLIPSEP)-11
-b(ARS)1586 1445 y Fd(Returns)39 b(the)1643 1545 y(geometric)1459
-1659 y(parameters)d(of)i(an)1720 1774 y(Ellipse)2536
-1444 y FA(AST)p Fe(_)p FA(ELLIPSEP)-11 b(ARS)0 1956 y
-Fc(Description:)44 b Fk(This)28 b(routine)f(returns)g(the)h(geometric)e
-(parameters)g(describing)h(the)h(supplied)g(ellipse.)0
-2102 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_ELLIPSEPARS)o(\()
-c(THIS,)j(CENTRE,)g(A,)i(B,)f(ANGLE,)f(P1,)i(P2,)f(STATUS)f(\))0
-2248 y Fc(Argumen)m(ts:)259 2381 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 2480 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259
-2610 y Fc(CENTRE\()j(2)h(\))g(=)g(DOUBLE)g(PRECISION)f(\(Returned\))427
-2709 y Fk(The)d(co)r(ordinates)e(of)i(the)g(Ellipse)f(cen)n(tre)g(are)f
-(returned)i(in)f(this)h(arra)n(ys.)259 2839 y Fc(A)k(=)g(DOUBLE)g
-(PRECISION)g(\(Returned\))427 2938 y Fk(Returned)c(holding)f(the)h
-(half-length)g(of)f(the)h(\014rst)g(axis)e(of)i(the)g(ellipse.)259
-3068 y Fc(B)k(=)g(DOUBLE)g(PRECISION)f(\(Returned\))427
-3167 y Fk(Returned)d(holding)f(the)h(half-length)g(of)f(the)h(second)f
-(axis)g(of)g(the)h(ellipse.)259 3297 y Fc(ANGLE)k(=)g(DOUBLE)g
-(PRECISION)g(\(Returned\))427 3396 y Fk(If)39 b(the)g(co)r(ordinate)e
-(system)h(in)h(whic)n(h)f(the)h(Ellipse)f(is)g(de\014ned)h(has)f(axes)g
-(\(X,Y\),)h(then)g(ANGLE)g(is)427 3496 y(returned)32
-b(holding)g(the)g(angle)f(from)h(the)h(p)r(ositiv)n(e)e(direction)h(of)
-g(the)h(Y)f(axis)f(to)h(the)h(\014rst)f(axis)f(of)h(the)427
-3596 y(ellipse,)22 b(in)f(radians.)33 b(P)n(ositiv)n(e)19
-b(rotation)g(is)h(in)h(the)g(same)e(sense)h(as)g(rotation)f(from)h(the)
-h(p)r(ositiv)n(e)f(direction)427 3695 y(of)28 b(Y)g(to)f(the)h(p)r
-(ositiv)n(e)f(direction)h(of)f(X.)259 3825 y Fc(P1\()32
-b(2)g(\))g(=)g(DOUBLE)g(PRECISION)f(\(Returned\))427
-3924 y Fk(An)j(arra)n(y)c(in)j(whic)n(h)g(to)g(return)f(the)h(co)r
-(ordinates)f(at)g(one)h(of)g(the)g(t)n(w)n(o)f(ends)h(of)g(the)g
-(\014rst)f(axis)g(of)h(the)427 4024 y(ellipse.)259 4153
-y Fc(P2\()f(2)g(\))g(=)g(DOUBLE)g(PRECISION)f(\(Returned\))427
-4253 y Fk(An)d(arra)n(y)e(in)i(whic)n(h)g(to)f(return)h(the)g(co)r
-(ordinates)e(at)i(one)f(of)h(the)g(t)n(w)n(o)f(ends)h(of)f(the)h
-(second)g(axis)f(of)g(the)427 4353 y(ellipse.)259 4482
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 4582 y Fk(The)c(global)e(status.)0 4740 y Fc(Notes:)340
-5019 y Fj(\017)45 b Fk(If)22 b(the)g(co)r(ordinate)e(system)h(represen)
-n(ted)f(b)n(y)h(the)h(Ellipse)e(has)h(b)r(een)h(c)n(hanged)e(since)h
-(it)h(w)n(as)e(\014rst)h(created,)427 5119 y(the)e(returned)f
-(parameters)f(refer)h(to)h(the)g(new)f(\(c)n(hanged\))g(co)r(ordinate)g
-(system,)i(rather)d(than)i(the)g(original)427 5218 y(co)r(ordinate)27
-b(system.)37 b(Note)28 b(ho)n(w)n(ev)n(er)e(that)i(if)g(the)g
-(transformation)f(from)g(original)f(to)i(new)g(co)r(ordinate)427
-5318 y(system)36 b(is)h(non-linear,)g(the)g(shap)r(e)f(represen)n(ted)f
-(b)n(y)h(the)h(supplied)g(Ellipse)f(ob)5 b(ject)36 b(ma)n(y)g(not)g(b)r
-(e)h(an)427 5418 y(accurate)27 b(ellipse.)340 5547 y
-Fj(\017)45 b Fk(V)-7 b(alues)20 b(of)h(AST)p Ft(__)p
-Fk(BAD)f(are)f(returned)h(for)g(the)h(parameters)e(without)h(error)f
-(if)i(the)f(ellipse)h(is)f(degenerate)427 5647 y(or)27
-b(unde\014ned.)p eop end
-%%Page: 215 225
-TeXDict begin 215 224 bop 3643 52 a FG(215)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(END)1357 483 y Fd(End)39
-b(an)g(AST)f(con)m(text)3152 482 y FA(AST)p Fe(_)p FA(END)0
-654 y Fc(Description:)44 b Fk(This)h(routine)f(ends)h(an)g(AST)g(con)n
-(text)f(whic)n(h)h(w)n(as)f(b)r(egun)g(with)i(a)e(matc)n(hing)g(in)n(v)
-n(o)r(cation)g(of)227 754 y(AST)p Ft(_)p Fk(BEGIN.)18
-b(An)n(y)h(Ob)5 b(ject)18 b(p)r(oin)n(ters)g(created)f(within)i(this)g
-(con)n(text)f(will)h(b)r(e)f(ann)n(ulled)h(\(just)g(as)e(if)i(AST)p
-Ft(_)p Fk(ANNUL)227 853 y(had)24 b(b)r(een)h(in)n(v)n(ok)n(ed\))e(and)h
-(will)g(cease)f(to)h(b)r(e)h(v)-5 b(alid)24 b(afterw)n(ards,)f(unless)h
-(they)h(ha)n(v)n(e)e(previously)f(b)r(een)j(exp)r(orted)227
-953 y(using)k(AST)p Ft(_)p Fk(EXPOR)-7 b(T)28 b(or)f(rendered)h(exempt)
-i(using)e(AST)p Ft(_)p Fk(EXEMPT.)g(If)h(ann)n(ulling)f(a)h(p)r(oin)n
-(ter)f(causes)g(an)227 1053 y(Ob)5 b(ject's)24 b(RefCoun)n(t)h
-(attribute)f(to)h(fall)f(to)g(zero)g(\(whic)n(h)g(happ)r(ens)h(when)f
-(the)h(last)f(p)r(oin)n(ter)g(to)g(it)h(is)f(ann)n(ulled\),)227
-1152 y(then)k(the)g(Ob)5 b(ject)28 b(will)g(b)r(e)g(deleted.)0
-1300 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_END\()e(STATUS)h
-(\))0 1447 y Fc(Argumen)m(ts:)259 1581 y(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 1681
-y Fk(The)c(global)e(status.)0 1840 y Fc(Class)31 b(Applicabilit)m(y:)
-259 1975 y(Ob)5 b(ject)427 2074 y Fk(This)28 b(routine)f(applies)g(to)h
-(all)f(Ob)5 b(jects.)0 2234 y Fc(Notes:)340 2514 y Fj(\017)45
-b Fk(This)28 b(routine)f(attempts)h(to)g(execute)f(ev)n(en)g(if)h(ST)-7
-b(A)g(TUS)29 b(is)e(set)h(to)f(an)h(error)d(v)-5 b(alue.)340
-2645 y Fj(\017)45 b Fk(Con)n(texts)27 b(delimited)i(b)n(y)e(AST)p
-Ft(_)p Fk(BEGIN)g(and)h(AST)p Ft(_)p Fk(END)g(ma)n(y)e(b)r(e)i(nested)g
-(to)g(an)n(y)e(depth.)p 0 2840 V 0 2970 a FA(AST)p Fe(_)p
-FA(ESCAPES)1218 2971 y Fd(Con)m(trol)36 b(whether)i(graphical)1128
-3086 y(escap)s(e)h(sequences)g(are)f(included)1652 3197
-y(in)g(strings)2832 2970 y FA(AST)p Fe(_)p FA(ESCAPES)0
-3381 y Fc(Description:)44 b Fk(The)39 b(Plot)g(class)f(de\014nes)g(a)h
-(set)g(of)g(escap)r(e)f(sequences)g(whic)n(h)h(can)f(b)r(e)i(included)f
-(within)h(a)e(text)227 3481 y(string)29 b(in)g(order)f(to)h(con)n(trol)
-f(the)h(app)r(earance)f(of)h(sub-strings)f(within)h(the)h(text.)42
-b(See)29 b(the)g(Escap)r(e)f(attribute)227 3581 y(for)j(a)g
-(description)f(of)h(these)g(escap)r(e)g(sequences.)46
-b(It)32 b(is)f(usually)f(inappropriate)g(for)g(AST)i(to)f(return)g
-(strings)227 3680 y(con)n(taining)i(suc)n(h)h(escap)r(e)f(sequences)h
-(when)g(called)g(b)n(y)f(application)h(co)r(de.)56 b(F)-7
-b(or)33 b(instance,)j(an)d(application)227 3780 y(whic)n(h)22
-b(displa)n(ys)e(the)i(v)-5 b(alue)22 b(of)f(the)h(Title)g(attribute)g
-(of)f(a)g(F)-7 b(rame)21 b(usually)g(do)r(es)g(not)h(w)n(an)n(t)f(the)h
-(displa)n(y)n(ed)e(string)227 3879 y(to)25 b(include)g(p)r(oten)n
-(tially)g(long)f(escap)r(e)g(sequences)g(whic)n(h)h(a)g(h)n(uman)f
-(read)g(w)n(ould)h(ha)n(v)n(e)e(di\016culy)i(in)n(terpreting.)227
-3979 y(Therefore)37 b(the)h(default)g(b)r(eha)n(viour)f(is)h(for)f(AST)
-h(to)g(strip)g(out)g(suc)n(h)f(escap)r(e)g(sequences)g(when)h(called)g
-(b)n(y)227 4079 y(application)27 b(co)r(de.)37 b(This)27
-b(default)i(b)r(eha)n(viour)d(can)h(b)r(e)h(c)n(hanged)f(using)g(this)h
-(function.)0 4226 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_ESCAPES\()c(NEWVAL,)h(STATUS)h(\))0 4373 y
-Fc(Argumen)m(ts:)259 4507 y(NEWV)-11 b(AL)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 4607 y Fk(A)d(\015ag)f(whic)n(h)h(indicates)f(if)h(escap)r
-(es)f(sequences)g(should)g(b)r(e)h(included)g(in)g(returned)f(strings.)
-39 b(If)29 b(zero)f(is)427 4707 y(supplied,)c(escap)r(e)e(sequences)f
-(will)h(b)r(e)h(stripp)r(ed)f(out)h(of)f(all)g(strings)f(returned)h(b)n
-(y)g(an)n(y)f(AST)i(function.)35 b(If)427 4806 y(a)20
-b(p)r(ositiv)n(e)g(v)-5 b(alue)20 b(is)g(supplied,)j(then)d(an)n(y)g
-(escap)r(e)g(sequences)f(will)i(b)r(e)g(retained)e(in)i(the)g(v)-5
-b(alue)20 b(returned)g(to)427 4906 y(the)k(caller.)34
-b(If)24 b(a)e(negativ)n(e)g(v)-5 b(alue)23 b(is)g(supplied,)i(the)e
-(curren)n(t)f(v)-5 b(alue)23 b(of)g(the)h(\015ag)e(will)i(b)r(e)f(left)
-h(unc)n(hanged.)0 5066 y Fc(Class)31 b(Applicabilit)m(y:)259
-5200 y(Ob)5 b(ject)427 5299 y Fk(This)28 b(routine)f(applies)g(to)h
-(all)f(Ob)5 b(jects.)0 5459 y Fc(Returned)32 b(V)-8 b(alue:)259
-5593 y(AST)p Ft(_)p Fc(ESCAPES)32 b(=)g(INTEGER)427 5693
-y Fk(The)c(v)-5 b(alue)27 b(of)h(the)g(\015ag)f(on)g(en)n(try)g(to)h
-(this)f(function.)p eop end
-%%Page: 216 226
-TeXDict begin 216 225 bop 0 52 a FG(216)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(Notes:)340
-623 y Fj(\017)45 b Fk(This)30 b(function)g(also)f(con)n(trols)f
-(whether)h(the)h(AST)p Ft(_)p Fk(STRIPESCAPES)e(function)i(remo)n(v)n
-(es)e(escap)r(e)h(se-)427 723 y(quences)e(from)h(the)g(supplied)g
-(string,)f(or)f(returns)h(the)h(supplied)g(string)f(without)h(c)n
-(hange.)340 845 y Fj(\017)45 b Fk(This)28 b(function)g(attempts)g(to)f
-(execute)h(ev)n(en)f(if)h(an)f(error)f(has)h(already)f(o)r(ccurred.)p
-0 1024 3780 12 v 0 1154 a FA(AST)p Fe(_)p FA(EXEMPT)1074
-1155 y Fd(Exempt)38 b(an)h(Ob)7 b(ject)38 b(p)s(oin)m(ter)f(from)1322
-1270 y(AST)i(con)m(text)e(handling)2857 1154 y FA(AST)p
-Fe(_)p FA(EXEMPT)0 1438 y Fc(Description:)44 b Fk(This)29
-b(routine)g(exempts)g(an)g(Ob)5 b(ject)29 b(p)r(oin)n(ter)f(from)h(AST)
-g(con)n(text)g(handling,)g(as)f(implemen)n(ted)i(b)n(y)227
-1538 y(AST)p Ft(_)p Fk(BEGIN)h(and)g(AST)p Ft(_)p Fk(END.)g(This)h
-(means)e(that)i(the)f(p)r(oin)n(ter)g(will)g(not)g(b)r(e)h(a\013ected)f
-(when)g(AST)p Ft(_)p Fk(END)227 1637 y(is)36 b(called)f(and)g(will)h
-(remain)f(activ)n(e)f(un)n(til)i(the)g(end)g(of)f(the)h(program,)g(or)e
-(un)n(til)i(explicitly)g(ann)n(ulled)f(using)227 1737
-y(AST)p Ft(_)p Fk(ANNUL.)227 1856 y(If)24 b(p)r(ossible,)g(y)n(ou)f
-(should)h(a)n(v)n(oid)e(using)h(this)h(routine)f(when)h(writing)f
-(applications.)35 b(It)24 b(is)f(pro)n(vided)g(mainly)g(for)227
-1956 y(dev)n(elop)r(ers)30 b(of)i(other)e(libraries,)h(who)g(ma)n(y)g
-(wish)g(to)g(retain)g(references)f(to)h(AST)h(Ob)5 b(jects)31
-b(in)g(in)n(ternal)g(data)227 2055 y(structures,)c(and)h(who)f
-(therefore)g(need)g(to)h(a)n(v)n(oid)e(the)i(e\013ects)g(of)f(AST)p
-Ft(_)p Fk(BEGIN)h(and)f(AST)p Ft(_)p Fk(END.)0 2194 y
-Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_EXEMPT\()d(THIS,)i
-(STATUS)g(\))0 2333 y Fc(Argumen)m(ts:)259 2459 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 2559 y Fk(Ob)5 b(ject)28
-b(p)r(oin)n(ter)f(to)g(b)r(e)h(exempted)g(from)g(con)n(text)f
-(handling.)259 2682 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)
-h(and)g(Returned\))427 2781 y Fk(The)c(global)e(status.)0
-2933 y Fc(Class)31 b(Applicabilit)m(y:)259 3059 y(Ob)5
-b(ject)427 3158 y Fk(This)28 b(routine)f(applies)g(to)h(all)f(Ob)5
-b(jects.)p 0 3337 V 0 3467 a FA(AST)p Fe(_)p FA(EXPOR)-11
-b(T)1081 3468 y Fd(Exp)s(ort)37 b(an)i(Ob)7 b(ject)38
-b(p)s(oin)m(ter)f(to)h(an)1548 3568 y(outer)g(con)m(text)2883
-3467 y FA(AST)p Fe(_)p FA(EXPOR)-11 b(T)0 3713 y Fc(Description:)44
-b Fk(This)34 b(routine)g(exp)r(orts)f(an)g(Ob)5 b(ject)34
-b(p)r(oin)n(ter)g(from)f(the)h(curren)n(t)f(AST)i(con)n(text)e(in)n(to)
-h(the)g(con)n(text)227 3812 y(that)f(encloses)e(the)i(curren)n(t)f
-(one.)51 b(This)33 b(means)f(that)g(the)h(p)r(oin)n(ter)f(will)h(no)f
-(longer)f(b)r(e)i(ann)n(ulled)g(when)f(the)227 3912 y(curren)n(t)27
-b(con)n(text)g(is)h(ended)g(\(with)g(AST)p Ft(_)p Fk(END\),)g(but)g
-(only)f(when)h(the)g(next)g(outer)f(con)n(text)g(\(if)i(an)n(y\))e
-(ends.)0 4051 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42
-b(AST_EXPORT\()d(THIS,)i(STATUS)g(\))0 4190 y Fc(Argumen)m(ts:)259
-4316 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 4416
-y Fk(Ob)5 b(ject)28 b(p)r(oin)n(ter)f(to)g(b)r(e)h(exp)r(orted.)259
-4538 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 4638 y Fk(The)c(global)e(status.)0 4789
-y Fc(Class)31 b(Applicabilit)m(y:)259 4915 y(Ob)5 b(ject)427
-5015 y Fk(This)28 b(routine)f(applies)g(to)h(all)f(Ob)5
-b(jects.)0 5166 y Fc(Notes:)340 5438 y Fj(\017)45 b Fk(It)23
-b(is)g(only)g(sensible)f(to)h(apply)g(this)g(routine)f(to)h(p)r(oin)n
-(ters)f(that)h(ha)n(v)n(e)f(b)r(een)h(created)f(within)i(\(or)e(exp)r
-(orted)427 5538 y(to\))k(the)h(curren)n(t)e(con)n(text)g(and)h(ha)n(v)n
-(e)f(not)h(b)r(een)g(rendered)g(exempt)g(using)g(AST)p
-Ft(_)p Fk(EXEMPT.)e(Applying)427 5637 y(it)k(to)g(an)f(unsuitable)h(Ob)
-5 b(ject)27 b(p)r(oin)n(ter)g(has)g(no)h(e\013ect.)p
-eop end
-%%Page: 217 227
-TeXDict begin 217 226 bop 3643 52 a FG(217)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(FINDFITS)1321 483 y Fd(Find)39
-b(a)f(FITS)i(card)e(in)g(a)1341 583 y(FitsChan)f(b)m(y)i(k)m(eyw)m(ord)
-2802 482 y FA(AST)p Fe(_)p FA(FINDFITS)0 765 y Fc(Description:)44
-b Fk(This)33 b(function)f(searc)n(hes)f(for)g(a)h(card)g(in)g(a)g
-(FitsChan)g(b)n(y)g(k)n(eyw)n(ord.)49 b(The)32 b(searc)n(h)f(commences)
-h(at)227 865 y(the)k(curren)n(t)e(card)g(\(iden)n(ti\014ed)i(b)n(y)f
-(the)g(Card)f(attribute\))i(and)f(ends)g(when)g(a)f(card)h(is)g(found)g
-(whose)f(FITS)227 964 y(k)n(eyw)n(ord)25 b(matc)n(hes)h(the)g(template)
-h(supplied,)g(or)f(when)g(the)h(last)f(card)g(in)g(the)h(FitsChan)f
-(has)g(b)r(een)h(searc)n(hed.)227 1087 y(If)33 b(the)f(searc)n(h)e(is)i
-(successful)g(\(i.e.)50 b(a)32 b(card)f(is)h(found)g(whic)n(h)g(matc)n
-(hes)g(the)g(template\),)i(the)e(con)n(ten)n(ts)f(of)h(the)227
-1187 y(card)j(are)f(returned)h(and)g(the)g(Card)g(attribute)g(is)g
-(adjusted)h(to)f(iden)n(tify)h(the)f(card)g(found)g(or,)i(if)f
-(required,)227 1286 y(the)e(one)f(follo)n(wing)g(it.)54
-b(If)34 b(the)g(searc)n(h)e(is)h(not)h(successful,)g(the)g(function)g
-(returns)f(.F)-9 b(ALSE.)33 b(and)h(the)f(Card)227 1386
-y(attribute)28 b(is)g(set)f(to)h(the)g Ft(")p Fk(end-of-\014le)p
-Ft(")p Fk(.)0 1532 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_FINDFITS\()38 b(THIS,)k(NAME,)f(CARD,)h(INC,)g(STATUS)f(\))0
-1678 y Fc(Argumen)m(ts:)259 1811 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 1911 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259
-2041 y Fc(NAME)j(=)h(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 2140 y Fk(A)e(c)n(haracter)d(string)
-h(con)n(taining)g(a)h(template)h(for)e(the)i(k)n(eyw)n(ord)d(to)i(b)r
-(e)g(found.)42 b(In)30 b(the)f(simplest)g(case,)427 2240
-y(this)34 b(should)g(simply)g(b)r(e)g(the)h(k)n(eyw)n(ord)d(name)h
-(\(the)i(searc)n(h)d(is)i(case)f(insensitiv)n(e)h(and)f(trailing)h
-(spaces)427 2339 y(are)e(ignored\).)53 b(Ho)n(w)n(ev)n(er,)33
-b(this)g(template)h(ma)n(y)e(also)g(con)n(tain)h Ft(")p
-Fk(\014eld)g(sp)r(eci\014ers)p Ft(")f Fk(whic)n(h)h(are)f(capable)427
-2439 y(of)27 b(matc)n(hing)g(a)g(range)e(of)i(c)n(haracters)e(\(see)i
-(the)h Ft(")p Fk(Keyw)n(ord)c(T)-7 b(emplates)p Ft(")27
-b Fk(section)g(for)f(details\).)37 b(In)27 b(this)427
-2539 y(case,)33 b(the)f(\014rst)g(card)f(with)i(a)f(k)n(eyw)n(ord)e
-(whic)n(h)i(matc)n(hes)f(the)i(template)f(will)h(b)r(e)f(found.)51
-b(T)-7 b(o)32 b(\014nd)g(the)427 2638 y(next)c(FITS)g(card)f
-(regardless)e(of)i(its)h(k)n(eyw)n(ord,)e(y)n(ou)h(should)g(use)h(the)g
-(template)g Ft(")p Fk(\045f)p Ft(")p Fk(.)259 2768 y
-Fc(CARD)k(=)g(CHARA)m(CTER)f Fj(\003)h Fc(\()g(80)f(\))h(\(Returned\))
-427 2868 y Fk(A)e(c)n(haracter)e(v)-5 b(ariable)29 b(with)h(at)g(least)
-f(80)g(c)n(haracters)e(in)j(whic)n(h)g(the)g(FITS)g(card)f(whic)n(h)h
-(is)f(found)h(will)427 2967 y(b)r(e)e(returned.)37 b(If)28
-b(the)g(searc)n(h)e(is)h(not)h(successful,)f(a)g(card)g(will)h(not)g(b)
-r(e)g(returned.)259 3097 y Fc(INC)k(=)g(LOGICAL)h(\(Giv)m(en\))427
-3196 y Fk(If)c(this)f(v)-5 b(alue)28 b(is)g(.F)-9 b(ALSE.)28
-b(\(and)g(the)g(searc)n(h)e(is)i(successful\),)g(the)h(FitsChan's)f
-(Card)f(attribute)h(will)g(b)r(e)427 3296 y(set)e(to)g(the)g(index)g
-(of)g(the)g(card)f(that)i(w)n(as)e(found.)36 b(If)27
-b(it)f(is)g(.TR)n(UE.,)g(ho)n(w)n(ev)n(er,)e(the)i(Card)f(attribute)h
-(will)427 3396 y(b)r(e)i(incremen)n(ted)g(to)f(iden)n(tify)h(the)g
-(card)f(whic)n(h)g(follo)n(ws)g(the)h(one)f(found.)259
-3525 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 3625 y Fk(The)c(global)e(status.)0 3783
-y Fc(Returned)32 b(V)-8 b(alue:)259 3917 y(AST)p Ft(_)p
-Fc(FINDFITS)33 b(=)f(LOGICAL)427 4016 y Fk(.TR)n(UE.)c(if)g(the)g
-(searc)n(h)e(w)n(as)g(successful,)i(otherwise)e(.F)-9
-b(ALSE..)0 4175 y Fc(Examples:)227 4312 y Fy(RESULT)46
-b(=)i(AST)p Ft(_)p Fy(FINDFITS\()c(FITSCHAN,)h('\045f',)h(CARD,)h
-(.TRUE.,)f(STATUS)g(\))427 4408 y Fk(Returns)26 b(the)g(curren)n(t)g
-(card)f(in)h(a)f(FitsChan)h(and)g(adv)-5 b(ances)25 b(the)i(Card)e
-(attribute)h(to)g(iden)n(tify)g(the)g(card)427 4507 y(that)i(follo)n
-(ws)f(\(the)h Ft(")p Fk(\045f)p Ft(")f Fk(template)h(matc)n(hes)f(an)n
-(y)g(k)n(eyw)n(ord\).)227 4641 y Fy(RESULT)46 b(=)i(AST)p
-Ft(_)p Fy(FINDFITS\()c(FITSCHAN,)h('BITPIX',)g(CARD,)i(.TRUE.,)f
-(STATUS)g(\))427 4736 y Fk(Searc)n(hes)34 b(a)h(FitsChan)g(for)f(a)h
-(FITS)g(card)g(with)g(the)h Ft(")p Fk(BITPIX)p Ft(")e
-Fk(k)n(eyw)n(ord)f(and)i(returns)f(that)h(card.)427 4836
-y(The)28 b(Card)f(attribute)g(is)h(then)g(incremen)n(ted)f(to)h(iden)n
-(tify)g(the)g(card)f(that)h(follo)n(ws)e(it.)227 4970
-y Fy(RESULT)46 b(=)i(AST)p Ft(_)p Fy(FINDFITS\()c(FITSCHAN,)h
-('COMMENT',)g(CARD,)h(.FALSE.,)g(STATUS)g(\))427 5065
-y Fk(Sets)36 b(the)f(Card)g(attribute)g(of)g(a)g(FitsChan)h(to)f(iden)n
-(tify)h(the)f(next)h(COMMENT)f(card)f(\(if)i(an)n(y\))f(and)427
-5165 y(returns)27 b(that)h(card.)227 5299 y Fy(RESULT)46
-b(=)i(AST)p Ft(_)p Fy(FINDFITS\()c(FITSCHAN,)h('CRVAL\0451d',)g(CARD,)h
-(.TRUE.,)g(STATUS)g(\))427 5394 y Fk(Searc)n(hes)28 b(a)h(FitsChan)g
-(for)g(the)h(next)g(card)e(with)i(a)f(k)n(eyw)n(ord)e(of)i(the)h(form)f
-Ft(")p Fk(CR)-9 b(V)g(ALi)p Ft(")29 b Fk(\(for)g(example,)427
-5494 y(an)n(y)k(of)h(the)f(k)n(eyw)n(ords)f Ft(")p Fk(CR)-9
-b(V)g(AL1)p Ft(")p Fk(,)34 b Ft(")p Fk(CR)-9 b(V)g(AL2)p
-Ft(")32 b Fk(or)h Ft(")p Fk(CR)-9 b(V)g(AL3)p Ft(")32
-b Fk(w)n(ould)h(b)r(e)h(matc)n(hed\).)55 b(The)33 b(card)427
-5593 y(found)22 b(\(if)g(an)n(y\))e(is)h(returned,)i(and)e(the)g(Card)f
-(attribute)i(is)f(then)g(incremen)n(ted)g(to)g(iden)n(tify)h(the)g
-(follo)n(wing)427 5693 y(card)27 b(\(ready)g(to)g(searc)n(h)f(for)h
-(another)g(k)n(eyw)n(ord)f(with)i(the)g(same)f(form,)g(p)r(erhaps\).)p
-eop end
-%%Page: 218 228
-TeXDict begin 218 227 bop 0 52 a FG(218)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(Notes:)340
-681 y Fj(\017)45 b Fk(The)23 b(searc)n(h)f(alw)n(a)n(ys)f(starts)i
-(with)g(the)h(curren)n(t)e(card,)h(as)g(iden)n(ti\014ed)g(b)n(y)g(the)h
-(Card)e(attribute.)35 b(T)-7 b(o)23 b(ensure)427 781
-y(y)n(ou)i(searc)n(h)g(the)h(en)n(tire)g(con)n(ten)n(ts)f(of)h(a)f
-(FitsChan,)i(y)n(ou)e(should)h(\014rst)f(clear)g(the)h(Card)g
-(attribute)g(\(using)427 880 y(AST)p Ft(_)p Fk(CLEAR\).)i(This)g
-(e\013ectiv)n(ely)f Ft(")p Fk(rewinds)p Ft(")f Fk(the)i(FitsChan.)340
-1037 y Fj(\017)45 b Fk(If)24 b(a)g(searc)n(h)e(is)i(unsuccessful,)g
-(the)g(Card)f(attribute)h(is)g(set)f(to)h(the)g Ft(")p
-Fk(end-of-\014le)p Ft(")f Fk(\(i.e.)36 b(to)23 b(one)h(more)e(than)427
-1136 y(the)28 b(n)n(um)n(b)r(er)g(of)f(cards)g(in)g(the)h(FitsChan\).)
-38 b(No)27 b(error)f(o)r(ccurs.)340 1293 y Fj(\017)45
-b Fk(A)26 b(v)-5 b(alue)25 b(of)g(.F)-9 b(ALSE.)25 b(will)h(b)r(e)f
-(returned)g(if)h(this)g(function)f(is)g(in)n(v)n(ok)n(ed)f(with)i(the)g
-(AST)f(error)f(status)h(set,)427 1392 y(or)i(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)-2 1601 y Fc(Keyw)m(ord)33 b(T)-8
-b(emplates)n(:)227 1747 y Fk(The)32 b(templates)f(used)h(to)f(matc)n(h)
-g(FITS)h(k)n(eyw)n(ords)d(are)i(normally)f(comp)r(osed)h(of)h(literal)e
-(c)n(haracters,)h(whic)n(h)227 1847 y(m)n(ust)f(matc)n(h)g(the)h(k)n
-(eyw)n(ord)d(exactly)h(\(apart)h(from)f(case\).)44 b(Ho)n(w)n(ev)n(er,)
-29 b(a)h(template)g(ma)n(y)f(also)g(con)n(tain)h Ft(")p
-Fk(\014eld)227 1947 y(sp)r(eci\014ers)p Ft(")25 b Fk(whic)n(h)h(can)g
-(matc)n(h)f(a)h(range)f(of)h(p)r(ossible)f(c)n(haracters.)34
-b(This)26 b(allo)n(ws)f(y)n(ou)g(to)h(searc)n(h)e(for)i(k)n(eyw)n(ords)
-227 2046 y(that)36 b(con)n(tain)f(\(for)g(example\))g(n)n(um)n(b)r
-(ers,)i(where)e(the)h(digits)f(comprising)f(the)i(n)n(um)n(b)r(er)f
-(are)f(not)i(kno)n(wn)e(in)227 2146 y(adv)-5 b(ance.)227
-2294 y(A)30 b(\014eld)g(sp)r(eci\014er)g(starts)f(with)h(a)f
-Ft(")p Fk(\045)p Ft(")h Fk(c)n(haracter.)41 b(This)30
-b(is)f(follo)n(w)n(ed)g(b)n(y)h(an)f(optional)g(single)h(digit)f(\(0)h
-(to)g(9\))227 2394 y(sp)r(ecifying)c(a)f(\014eld)i(width.)37
-b(Finally)-7 b(,)26 b(there)f(is)h(a)f(single)h(c)n(haracter)e(whic)n
-(h)h(sp)r(eci\014es)h(the)g(t)n(yp)r(e)g(of)g(c)n(haracter)e(to)227
-2493 y(b)r(e)k(matc)n(hed,)g(as)f(follo)n(ws:)340 2825
-y Fj(\017)45 b Ft(")p Fk(c)p Ft(")p Fk(:)36 b(matc)n(hes)27
-b(all)h(upp)r(er)f(case)g(letters,)340 2981 y Fj(\017)45
-b Ft(")p Fk(d)p Ft(")p Fk(:)37 b(matc)n(hes)27 b(all)g(decimal)g
-(digits,)340 3138 y Fj(\017)45 b Ft(")p Fk(f)p Ft(")p
-Fk(:)39 b(matc)n(hes)29 b(all)f(c)n(haracters)f(whic)n(h)i(are)f(p)r
-(ermitted)h(within)h(a)e(FITS)h(k)n(eyw)n(ord)e(\(upp)r(er)j(case)e
-(letters,)427 3237 y(digits,)g(underscores)e(and)h(h)n(yphens\).)227
-3446 y(If)e(the)g(\014eld)f(width)h(is)g(omitted,)g(the)g(\014eld)f(sp)
-r(eci\014er)g(matc)n(hes)g(one)g(or)g(more)f(c)n(haracters.)34
-b(If)24 b(the)h(\014eld)g(width)g(is)227 3546 y(zero,)k(it)g(matc)n
-(hes)g(zero)f(or)g(more)g(c)n(haracters.)39 b(Otherwise,)28
-b(it)i(matc)n(hes)e(exactly)h(the)g(n)n(um)n(b)r(er)g(of)g(c)n
-(haracters)227 3646 y(sp)r(eci\014ed.)37 b(In)28 b(addition)g(to)f
-(this:)340 3977 y Fj(\017)45 b Fk(The)c(template)g Ft(")p
-Fk(\045f)p Ft(")f Fk(will)h(matc)n(h)g(a)f(blank)g(FITS)h(k)n(eyw)n
-(ord)e(consisting)h(of)h(8)f(spaces)g(\(as)g(w)n(ell)g(as)427
-4077 y(matc)n(hing)27 b(all)h(other)f(k)n(eyw)n(ords\).)340
-4233 y Fj(\017)45 b Fk(A)28 b(template)g(consisting)f(of)g(8)h(spaces)e
-(will)i(matc)n(h)f(a)h(blank)f(k)n(eyw)n(ord)f(\(only\).)227
-4442 y(F)-7 b(or)27 b(example:)340 4774 y Fj(\017)45
-b Fk(The)28 b(template)g Ft(")p Fk(BitPix)p Ft(")e Fk(will)i(matc)n(h)f
-(the)h(k)n(eyw)n(ord)e Ft(")p Fk(BITPIX)p Ft(")g Fk(only)-7
-b(.)340 4930 y Fj(\017)45 b Fk(The)27 b(template)g Ft(")p
-Fk(crpix\0451d)p Ft(")f Fk(will)h(matc)n(h)f(k)n(eyw)n(ords)f
-(consisting)h(of)h Ft(")p Fk(CRPIX)p Ft(")f Fk(follo)n(w)n(ed)g(b)n(y)g
-(one)h(deci-)427 5030 y(mal)h(digit.)340 5186 y Fj(\017)45
-b Fk(The)26 b(template)f Ft(")p Fk(P\045c)p Ft(")f Fk(will)i(matc)n(h)e
-(an)n(y)h(k)n(eyw)n(ord)e(starting)i(with)g Ft(")p Fk(P)p
-Ft(")f Fk(and)h(follo)n(w)n(ed)f(b)n(y)h(one)g(or)f(more)427
-5286 y(letters.)340 5442 y Fj(\017)45 b Fk(The)28 b(template)g
-Ft(")p Fk(E\0450f)p Ft(")e Fk(will)i(matc)n(h)f(an)n(y)g(k)n(eyw)n(ord)
-f(b)r(eginning)i(with)g Ft(")p Fk(E)p Ft(")p Fk(.)340
-5599 y Fj(\017)45 b Fk(The)28 b(template)g Ft(")p Fk(\045f)p
-Ft(")f Fk(will)h(matc)n(h)f(an)n(y)g(k)n(eyw)n(ord)f(at)h(all)h
-(\(including)g(a)f(blank)g(one\).)p eop end
-%%Page: 219 229
-TeXDict begin 219 228 bop 3643 52 a FG(219)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(FINDFRAME)1434 483 y
-Fd(Find)39 b(a)f(co)s(ordinate)1346 583 y(system)g(with)g(sp)s
-(eci\014ed)1527 697 y(c)m(haracteristics)2603 482 y FA(AST)p
-Fe(_)p FA(FINDFRAME)0 874 y Fc(Description:)44 b Fk(This)24
-b(function)h(uses)e(a)h Ft(")p Fk(template)p Ft(")g Fk(F)-7
-b(rame)23 b(to)h(searc)n(h)e(another)h(F)-7 b(rame)24
-b(\(or)f(F)-7 b(rameSet\))24 b(to)g(iden)n(tify)227 973
-y(a)33 b(co)r(ordinate)f(system)i(whic)n(h)f(has)g(a)g(sp)r(eci\014ed)g
-(set)h(of)f(c)n(haracteristics.)52 b(If)33 b(a)g(suitable)h(co)r
-(ordinate)e(system)227 1073 y(can)23 b(b)r(e)h(found,)h(the)f(function)
-g(returns)e(a)i(p)r(oin)n(ter)f(to)g(a)g(F)-7 b(rameSet)23
-b(whic)n(h)h(describ)r(es)e(the)i(required)f(co)r(ordinate)227
-1173 y(system)28 b(and)f(ho)n(w)g(to)g(con)n(v)n(ert)g(co)r(ordinates)f
-(to)h(and)h(from)f(it.)227 1300 y(This)41 b(function)f(is)h(pro)n
-(vided)e(to)h(help)h(answ)n(er)d(general)h(questions)h(ab)r(out)g(co)r
-(ordinate)f(systems,)k(suc)n(h)d(as)227 1400 y(t)n(ypically)f(arise)f
-(when)h(co)r(ordinate)f(information)h(is)g(imp)r(orted)g(in)n(to)g(a)f
-(program)f(as)i(part)g(of)g(an)f(initially)227 1500 y(unkno)n(wn)27
-b(dataset.)37 b(F)-7 b(or)27 b(example:)340 1642 y Fj(\017)45
-b Fk(Is)28 b(there)f(a)g(w)n(a)n(v)n(elength)f(scale?)340
-1778 y Fj(\017)45 b Fk(Is)28 b(there)f(a)g(2-dimensional)g(co)r
-(ordinate)f(system?)340 1914 y Fj(\017)45 b Fk(Is)28
-b(there)f(a)g(celestial)g(co)r(ordinate)g(system?)340
-2050 y Fj(\017)45 b Fk(Can)28 b(I)f(plot)h(the)g(data)f(in)h(ecliptic)g
-(co)r(ordinates?)227 2219 y(Y)-7 b(ou)30 b(can)g(also)f(use)g(this)i
-(function)f(as)f(a)h(means)f(of)h(reconciling)f(a)g(user's)g
-(preference)h(for)f(a)h(particular)e(co)r(or-)227 2318
-y(dinate)k(system)f(\(for)h(example,)g(what)f(t)n(yp)r(e)h(of)g(axes)e
-(to)i(dra)n(w\))e(with)i(what)g(is)f(actually)g(p)r(ossible)g(giv)n(en)
-g(the)227 2418 y(co)r(ordinate)c(information)g(a)n(v)-5
-b(ailable.)227 2546 y(T)e(o)40 b(p)r(erform)f(a)h(searc)n(h,)h(y)n(ou)f
-(supply)g(a)f Ft(")p Fk(target)p Ft(")f Fk(F)-7 b(rame)40
-b(\(or)f(F)-7 b(rameSet\))40 b(whic)n(h)g(represen)n(ts)e(the)j(set)f
-(of)227 2645 y(co)r(ordinate)30 b(systems)g(to)g(b)r(e)i(searc)n(hed.)
-44 b(If)31 b(a)f(basic)g(F)-7 b(rame)31 b(is)f(giv)n(en)g(as)g(the)h
-(target,)g(this)g(set)f(of)h(co)r(ordinate)227 2745 y(systems)h
-(consists)g(of)h(the)g(one)f(describ)r(ed)h(b)n(y)f(this)h(F)-7
-b(rame,)33 b(plus)g(all)f(other)g Ft(")p Fk(virtual)p
-Ft(")g Fk(co)r(ordinate)f(systems)227 2845 y(whic)n(h)c(can)g(p)r(oten)
-n(tially)f(b)r(e)i(reac)n(hed)d(from)i(it)g(b)n(y)g(applying)f
-(built-in)i(con)n(v)n(ersions)c(\(for)j(example,)f(an)n(y)g(of)h(the)
-227 2944 y(celestial)19 b(co)r(ordinate)g(con)n(v)n(ersions)e(kno)n(wn)
-i(to)h(the)g(AST)g(library)e(w)n(ould)i(constitute)g(a)f
-Ft(")p Fk(built-in)p Ft(")h Fk(con)n(v)n(ersion\).)227
-3044 y(If)32 b(a)f(F)-7 b(rameSet)31 b(is)g(giv)n(en)g(as)f(the)i
-(target,)f(the)h(set)f(of)h(co)r(ordinate)e(systems)h(to)g(b)r(e)h
-(searc)n(hed)d(consists)i(of)g(the)227 3144 y(union)d(of)f(those)h
-(represen)n(ted)e(b)n(y)h(all)h(the)g(individual)f(F)-7
-b(rames)27 b(within)i(it.)227 3271 y(T)-7 b(o)26 b(select)g(from)f
-(this)i(large)d(set)i(of)g(p)r(ossible)g(co)r(ordinate)f(systems,)h(y)n
-(ou)f(supply)h(a)g Ft(")p Fk(template)p Ft(")f Fk(F)-7
-b(rame)26 b(whic)n(h)227 3371 y(is)k(an)g(instance)g(of)h(the)f(t)n(yp)
-r(e)h(of)f(F)-7 b(rame)30 b(y)n(ou)f(are)g(lo)r(oking)h(for.)44
-b(E\013ectiv)n(ely)-7 b(,)31 b(y)n(ou)e(then)i(ask)e(the)i(function)g
-(to)227 3470 y Ft(")p Fk(\014nd)d(a)f(co)r(ordinate)g(system)g(that)h
-(lo)r(oks)e(lik)n(e)i(this)p Ft(")p Fk(.)227 3598 y(Y)-7
-b(ou)24 b(can)e(mak)n(e)h(y)n(our)f(request)h(more)f(or)g(less)h(sp)r
-(eci\014c)h(b)n(y)f(setting)g(attribute)g(v)-5 b(alues)23
-b(for)g(the)g(template)h(F)-7 b(rame.)227 3698 y(If)28
-b(a)f(particular)e(attribute)j(is)f(set)g(in)g(the)h(template,)g(then)f
-(the)h(function)f(will)h(only)f(\014nd)g(co)r(ordinate)f(systems)227
-3797 y(whic)n(h)35 b(ha)n(v)n(e)f(exactly)g(the)i(same)e(v)-5
-b(alue)35 b(for)g(that)g(attribute.)59 b(If)36 b(y)n(ou)e(lea)n(v)n(e)g
-(a)g(template)h(attribute)h(un-set,)227 3897 y(ho)n(w)n(ev)n(er,)30
-b(then)h(the)g(function)g(has)f(discretion)g(ab)r(out)h(the)g(v)-5
-b(alue)30 b(the)i(attribute)e(should)h(ha)n(v)n(e)e(in)i(an)n(y)f(co)r
-(or-)227 3997 y(dinate)h(system)e(it)i(\014nds.)45 b(The)30
-b(attribute)g(will)h(then)f(tak)n(e)g(its)g(v)-5 b(alue)30
-b(from)g(one)g(of)g(the)g(actual)g(\(rather)f(than)227
-4096 y(virtual\))d(co)r(ordinate)f(systems)h(in)h(the)f(target.)36
-b(If)26 b(the)h(target)e(is)h(a)g(F)-7 b(rameSet,)27
-b(its)f(Curren)n(t)f(attribute)i(will)f(b)r(e)227 4196
-y(mo)r(di\014ed)i(to)g(indicate)f(whic)n(h)h(of)f(its)h(F)-7
-b(rames)27 b(w)n(as)g(used)g(for)g(this)h(purp)r(ose.)227
-4324 y(The)34 b(result)g(of)f(this)h(pro)r(cess)f(is)h(a)f(co)r
-(ordinate)g(system)g(represen)n(ted)g(b)n(y)g(a)h(h)n(ybrid)f(F)-7
-b(rame)33 b(whic)n(h)h(acquires)227 4423 y(some)28 b(attributes)h(from)
-f(the)h(template)g(\(but)h(only)e(if)h(they)g(w)n(ere)e(set\))i(and)g
-(the)g(remainder)e(from)h(the)h(target.)227 4523 y(This)34
-b(represen)n(ts)f(the)h Ft(")p Fk(b)r(est)g(compromise)p
-Ft(")f Fk(b)r(et)n(w)n(een)h(what)g(y)n(ou)f(ask)n(ed)g(for)g(and)h
-(what)g(w)n(as)f(a)n(v)-5 b(ailable.)55 b(A)227 4623
-y(Mapping)31 b(is)g(then)g(generated)f(whic)n(h)h(con)n(v)n(erts)e
-(from)i(the)g(target)g(co)r(ordinate)e(system)i(to)g(this)g(h)n(ybrid)g
-(one,)227 4722 y(and)d(the)g(returned)f(F)-7 b(rameSet)27
-b(encapsulates)g(all)g(of)h(this)g(information.)0 4878
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_FINDFRAME\()38
-b(TARGET,)j(TEMPLATE,)e(DOMAINLIST,)g(STATUS)j(\))0 5034
-y Fc(Argumen)m(ts:)259 5177 y(T)-8 b(AR)m(GET)33 b(=)f(INTEGER)f(\(Giv)
-m(en\))427 5276 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(target)e(F)-7
-b(rame)27 b(\(or)g(F)-7 b(rameSet\).)427 5394 y(Note)37
-b(that)g(if)g(a)g(F)-7 b(rameSet)36 b(is)h(supplied)g(\(and)g(a)f
-(suitable)h(co)r(ordinate)e(system)i(is)f(found\),)k(then)d(its)427
-5494 y(Curren)n(t)h(attribute)h(will)f(b)r(e)h(mo)r(di\014ed)g(to)f
-(indicate)h(whic)n(h)f(F)-7 b(rame)38 b(w)n(as)g(used)g(to)g(obtain)g
-(attribute)427 5593 y(v)-5 b(alues)31 b(whic)n(h)g(w)n(ere)g(not)g(sp)r
-(eci\014ed)h(b)n(y)e(the)i(template.)48 b(This)32 b(F)-7
-b(rame)30 b(will,)j(in)e(some)g(sense,)h(represen)n(t)427
-5693 y(the)c Ft(")p Fk(closest)p Ft(")e Fk(non-virtual)h(co)r(ordinate)
-f(system)i(to)f(the)h(one)f(y)n(ou)g(requested.)p eop
-end
-%%Page: 220 230
-TeXDict begin 220 229 bop 0 52 a FG(220)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(TEMPLA)-8
-b(TE)33 b(=)f(INTEGER)f(\(Giv)m(en\))427 451 y Fk(P)n(oin)n(ter)e(to)h
-(the)h(template)g(F)-7 b(rame,)31 b(whic)n(h)f(should)g(b)r(e)h(an)f
-(instance)h(of)f(the)h(t)n(yp)r(e)g(of)f(F)-7 b(rame)30
-b(y)n(ou)g(wish)427 551 y(to)e(\014nd.)38 b(If)28 b(y)n(ou)f(w)n(an)n
-(ted)h(to)f(\014nd)i(a)e(F)-7 b(rame)27 b(describing)g(a)h(celestial)f
-(co)r(ordinate)g(system,)h(for)f(example,)427 650 y(then)h(y)n(ou)f
-(migh)n(t)h(use)f(a)g(SkyF)-7 b(rame)27 b(here.)37 b(See)27
-b(the)h Ft(")p Fk(Examples)p Ft(")e Fk(section)h(for)g(more)g(ideas.)
-259 783 y Fc(DOMAINLIST)33 b(=)f(CHARA)m(CTER)f Fj(\003)h
-Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))427 883 y Fk(A)f(c)n(haracter)d
-(string)h(con)n(taining)g(a)h(comma-separated)e(list)i(of)g(F)-7
-b(rame)30 b(domains.)44 b(This)30 b(ma)n(y)f(b)r(e)i(used)427
-983 y(to)26 b(establish)f(a)g(priorit)n(y)f(order)g(for)h(the)h
-(di\013eren)n(t)f(t)n(yp)r(es)g(of)h(co)r(ordinate)e(system)h(that)h
-(migh)n(t)f(b)r(e)h(found.)427 1099 y(The)d(function)g(will)g(\014rst)f
-(try)g(to)h(\014nd)g(a)f(suitable)h(co)r(ordinate)e(system)h(whose)g
-(Domain)h(attribute)f(equals)427 1199 y(the)31 b(\014rst)g(domain)f(in)
-h(this)g(list.)47 b(If)31 b(this)g(fails,)h(the)f(second)f(domain)h(in)
-g(the)g(list)g(will)g(b)r(e)g(used,)h(and)e(so)427 1298
-y(on,)e(un)n(til)h(a)e(result)h(is)g(obtained.)38 b(A)28
-b(blank)g(domain)g(\(e.g.)38 b(t)n(w)n(o)27 b(consecutiv)n(e)g
-(commas\))g(indicates)h(that)427 1398 y(an)n(y)f(co)r(ordinate)g
-(system)g(is)g(acceptable)g(\(sub)5 b(ject)28 b(to)g(the)g(template\))g
-(regardless)d(of)j(its)f(domain.)427 1514 y(This)i(list)h(is)f
-(case-insensitiv)n(e)f(and)h(all)g(white)g(space)g(is)g(ignored.)40
-b(If)30 b(y)n(ou)e(do)h(not)g(wish)h(to)f(restrict)f(the)427
-1614 y(domain)f(in)h(this)g(w)n(a)n(y)-7 b(,)27 b(y)n(ou)g(should)g
-(supply)h(a)f(blank)g(string.)259 1747 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 1847
-y Fk(The)c(global)e(status.)0 2009 y Fc(Class)31 b(Applicabilit)m(y:)
-259 2146 y(F)-8 b(rame)427 2246 y Fk(This)28 b(function)g(applies)f(to)
-h(all)f(F)-7 b(rames.)259 2379 y Fc(F)f(rameSet)427 2479
-y Fk(If)24 b(the)f(target)g(is)g(a)g(F)-7 b(rameSet,)23
-b(the)h(p)r(ossibilit)n(y)f(exists)g(that)g(sev)n(eral)f(of)h(the)g(F)
--7 b(rames)23 b(within)g(it)h(migh)n(t)f(b)r(e)427 2578
-y(matc)n(hed)32 b(b)n(y)f(the)h(template.)49 b(Unless)32
-b(the)g(c)n(hoice)f(is)g(su\016cien)n(tly)h(restricted)f(b)n(y)g(the)h
-(DOMAINLIST)427 2678 y(string,)c(the)h(sequence)e(in)i(whic)n(h)f(F)-7
-b(rames)27 b(are)h(searc)n(hed)e(can)i(then)h(b)r(ecome)f(imp)r(ortan)n
-(t.)38 b(In)29 b(this)f(case,)427 2777 y(the)g(searc)n(h)e(pro)r(ceeds)
-h(as)g(follo)n(ws:)510 2885 y Fj(\017)45 b Fk(Eac)n(h)27
-b(\014eld)h(in)f(the)h(DOMAINLIST)h(string)e(is)g(considered)g(in)g
-(turn.)510 3001 y Fj(\017)45 b Fk(An)29 b(attempt)g(is)g(made)f(to)h
-(matc)n(h)f(the)h(template)g(to)f(eac)n(h)g(of)g(the)h(target's)e(F)-7
-b(rames)28 b(in)h(the)g(order:)597 3101 y(\(1\))35 b(the)g(curren)n(t)f
-(F)-7 b(rame,)36 b(\(2\))f(the)h(base)e(F)-7 b(rame,)36
-b(\(3\))f(eac)n(h)f(remaining)g(F)-7 b(rame)34 b(in)h(the)g(order)f(of)
-597 3201 y(b)r(eing)28 b(added)f(to)h(the)g(target)f(F)-7
-b(rameSet.)510 3317 y Fj(\017)45 b Fk(Generally)-7 b(,)41
-b(the)d(\014rst)g(matc)n(h)h(found)f(is)g(used.)70 b(Ho)n(w)n(ev)n(er,)
-39 b(the)f(Mapping)g(b)r(et)n(w)n(een)h(the)g(target)597
-3417 y(co)r(ordinate)23 b(system)h(and)g(the)g(resulting)g(F)-7
-b(rame)23 b(is)h(also)f(examined.)35 b(Preference)23
-b(is)h(giv)n(en)f(to)h(cases)597 3516 y(where)37 b(b)r(oth)g(the)h
-(forw)n(ard)d(and)i(in)n(v)n(erse)f(transformations)f(are)h(de\014ned)h
-(\(as)g(indicated)g(b)n(y)g(the)597 3616 y(T)-7 b(ranF)g(orw)n(ard)36
-b(and)h(T)-7 b(ranIn)n(v)n(erse)36 b(attributes\).)68
-b(If)38 b(only)g(one)f(transformation)g(is)g(de\014ned,)k(the)597
-3716 y(forw)n(ard)26 b(one)h(is)h(preferred.)510 3832
-y Fj(\017)45 b Fk(If)25 b(a)g(matc)n(h)f(is)h(found)g(and)f(the)h
-(domain)f(of)h(the)g(resulting)f(F)-7 b(rame)24 b(also)g(matc)n(hes)g
-(the)h(curren)n(t)f(DO-)597 3932 y(MAINLIST)31 b(\014eld,)g(it)f(is)g
-(accepted.)43 b(Otherwise,)30 b(the)g(next)g(DOMAINLIST)h(\014eld)f(is)
-g(considered)597 4031 y(and)e(the)g(pro)r(cess)e(rep)r(eated.)427
-4164 y(If)g(a)f(suitable)g(co)r(ordinate)f(system)i(is)f(found,)h(the)g
-(Curren)n(t)e(attribute)i(of)f(the)h(target)e(F)-7 b(rameSet)26
-b(will)f(b)r(e)427 4264 y(mo)r(di\014ed)e(on)g(exit)g(to)f(iden)n(tify)
-h(the)g(F)-7 b(rame)23 b(whose)f(matc)n(h)g(with)h(the)g(target)f(w)n
-(as)g(ev)n(en)n(tually)g(accepted.)0 4427 y Fc(Returned)32
-b(V)-8 b(alue:)259 4564 y(AST)p Ft(_)p Fc(FINDFRAME)32
-b(=)g(INTEGER)427 4663 y Fk(If)g(the)g(searc)n(h)e(is)i(successful,)g
-(the)g(function)g(returns)f(a)g(p)r(oin)n(ter)g(to)h(a)f(F)-7
-b(rameSet)31 b(whic)n(h)h(con)n(tains)e(the)427 4763
-y(F)-7 b(rame)37 b(found)g(and)g(a)f(description)h(of)g(ho)n(w)f(to)h
-(con)n(v)n(ert)e(to)i(\(and)g(from\))g(the)h(co)r(ordinate)d(system)i
-(it)427 4862 y(represen)n(ts.)f(Otherwise,)26 b(a)i(n)n(ull)f(Ob)5
-b(ject)28 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))h(is)g(returned)f
-(without)h(error.)427 4979 y(If)37 b(a)g(F)-7 b(rameSet)36
-b(is)h(returned,)h(it)f(will)g(con)n(tain)f(t)n(w)n(o)g(F)-7
-b(rames.)64 b(F)-7 b(rame)36 b(n)n(um)n(b)r(er)g(1)h(\(its)g(base)f(F)
--7 b(rame\))427 5078 y(represen)n(ts)36 b(the)i(target)f(co)r(ordinate)
-f(system)h(and)h(will)f(b)r(e)h(the)g(same)f(as)g(the)g(\(base)h(F)-7
-b(rame)37 b(of)g(the\))427 5178 y(target.)64 b(F)-7 b(rame)36
-b(n)n(um)n(b)r(er)h(2)f(\(its)h(curren)n(t)f(F)-7 b(rame\))37
-b(will)g(b)r(e)g(a)f(F)-7 b(rame)36 b(represen)n(ting)g(the)h(co)r
-(ordinate)427 5278 y(system)e(whic)n(h)g(the)g(function)h(found.)59
-b(The)35 b(Mapping)g(whic)n(h)g(in)n(ter-relates)e(these)i(t)n(w)n(o)f
-(F)-7 b(rames)34 b(will)427 5377 y(describ)r(e)28 b(ho)n(w)e(to)i(con)n
-(v)n(ert)e(b)r(et)n(w)n(een)i(their)f(resp)r(ectiv)n(e)g(co)r(ordinate)
-f(systems.)427 5494 y(Note)i(that)h(a)f(F)-7 b(rameSet)28
-b(ma)n(y)f(b)r(e)i(used)f(b)r(oth)g(as)g(a)g(Mapping)f(and)h(as)g(a)g
-(F)-7 b(rame.)38 b(If)28 b(the)h(result)f(is)g(used)427
-5593 y(as)g(a)g(Mapping)g(\(e.g.)40 b(with)29 b(astT)-7
-b(ran2\),)27 b(then)i(it)g(pro)n(vides)e(a)h(means)g(of)g(con)n(v)n
-(erting)f(co)r(ordinates)g(from)427 5693 y(the)h(target)e(co)r
-(ordinate)g(system)h(in)n(to)g(the)h(new)f(co)r(ordinate)f(system)i
-(that)f(w)n(as)f(found)i(\(and)f(vice)g(v)n(ersa)p eop
-end
-%%Page: 221 231
-TeXDict begin 221 230 bop 3643 52 a FG(221)427 351 y
-Fk(if)30 b(its)f(in)n(v)n(erse)e(transformation)g(is)i(selected\).)41
-b(If)29 b(it)h(is)f(used)f(as)h(a)f(F)-7 b(rame,)29 b(its)g(attributes)
-g(will)g(describ)r(e)427 451 y(the)f(new)g(co)r(ordinate)e(system.)0
-614 y Fc(Examples:)227 723 y Fy(RESULT)46 b(=)i(AST)p
-Ft(_)p Fy(FINDFRAME\()c(TARGET,)h(AST)p Ft(_)p Fy(FRAME\()g(3,)i(')h
-(',)f(STATUS)f(\),)h(')h(',)227 822 y(STATUS)e(\))427
-901 y Fk(Searc)n(hes)31 b(for)h(a)f(3-dimensional)g(co)r(ordinate)g
-(system)h(in)h(the)g(target)e(F)-7 b(rame)32 b(\(or)f(F)-7
-b(rameSet\).)51 b(No)32 b(at-)427 1000 y(tributes)21
-b(ha)n(v)n(e)f(b)r(een)h(set)g(in)g(the)h(template)f(F)-7
-b(rame)20 b(\(created)g(b)n(y)h(AST)p Ft(_)p Fk(FRAME\),)g(so)g(no)f
-(restriction)g(has)427 1100 y(b)r(een)27 b(placed)g(on)f(the)i
-(required)e(co)r(ordinate)f(system,)i(other)f(than)h(that)g(it)g
-(should)g(ha)n(v)n(e)e(3)i(dimensions.)427 1200 y(The)h(\014rst)f
-(suitable)h(F)-7 b(rame)27 b(found)h(will)g(b)r(e)g(returned)f(as)g
-(part)g(of)g(the)h(RESUL)-7 b(T)28 b(F)-7 b(rameSet.)227
-1321 y Fy(RESULT)46 b(=)i(AST)p Ft(_)p Fy(FINDFRAME\()c(TARGET,)h(AST)p
-Ft(_)p Fy(SKYFRAME\()f(')k(',)f(STATUS)f(\),)h(')h(',)227
-1420 y(STATUS)e(\))427 1499 y Fk(Searc)n(hes)39 b(for)g(a)h(celestial)f
-(co)r(ordinate)g(system)g(in)i(the)f(target)f(F)-7 b(rame)39
-b(\(or)h(F)-7 b(rameSet\).)73 b(The)40 b(t)n(yp)r(e)427
-1598 y(of)29 b(celestial)f(co)r(ordinate)g(system)h(is)f(unsp)r
-(eci\014ed,)i(so)e(AST)p Ft(_)p Fk(FINDFRAME)i(will)f(return)f(the)h
-(\014rst)g(one)427 1698 y(found)20 b(as)g(part)f(of)h(the)g(RESUL)-7
-b(T)20 b(F)-7 b(rameSet.)34 b(If)20 b(the)g(target)f(is)h(a)f(F)-7
-b(rameSet,)21 b(then)f(its)g(Curren)n(t)f(attribute)427
-1797 y(will)28 b(b)r(e)g(up)r(dated)g(to)g(iden)n(tify)g(the)g(F)-7
-b(rame)27 b(that)h(w)n(as)e(used.)427 1914 y(If)40 b(no)f(celestial)g
-(co)r(ordinate)f(system)h(can)g(b)r(e)g(found,)k(a)c(v)-5
-b(alue)39 b(of)g(AST)p Ft(__)p Fk(NULL)g(will)g(b)r(e)h(returned)427
-2013 y(without)28 b(error.)227 2119 y Fy(RESULT)46 b(=)i(AST)p
-Ft(_)p Fy(FINDFRAME\()c(TARGET,)h(AST)p Ft(_)p Fy(SKYFRAME\()f
-('MaxAxes=100',)g(STATUS)i(\),)227 2218 y(')i(',)f(STATUS)f(\))427
-2297 y Fk(This)39 b(is)f(lik)n(e)g(the)h(last)g(example,)i(except)d
-(that)h(in)g(the)g(ev)n(en)n(t)f(of)g(the)h(target)f(b)r(eing)h(a)f
-(CmpF)-7 b(rame,)427 2396 y(the)31 b(comp)r(onen)n(t)f(F)-7
-b(rames)29 b(encapsulated)g(b)n(y)h(the)g(CmpF)-7 b(rame)30
-b(will)h(b)r(e)f(searc)n(hed)f(for)g(a)h(SkyF)-7 b(rame.)43
-b(If)427 2496 y(found,)29 b(the)g(returned)f(Mapping)g(will)g(included)
-h(a)f(P)n(ermMap)f(whic)n(h)h(selects)g(the)g(required)g(axes)f(from)
-427 2596 y(the)h(target)f(CmpF)-7 b(rame.)427 2712 y(This)31
-b(is)g(acomplished)f(b)n(y)g(setting)h(the)g(MaxAxes)f(attribute)h(of)f
-(the)h(template)g(SkyF)-7 b(rame)30 b(to)h(a)f(large)427
-2812 y(n)n(um)n(b)r(er)h(\(larger)e(than)i(or)f(equal)g(to)h(the)g(n)n
-(um)n(b)r(er)g(of)g(axes)e(in)i(the)h(target)e(CmpF)-7
-b(rame\).)46 b(This)31 b(allo)n(ws)427 2911 y(the)d(SkyF)-7
-b(rame)27 b(to)h(b)r(e)g(used)f(as)g(a)g(matc)n(h)h(for)f(F)-7
-b(rames)26 b(con)n(taining)h(from)g(2)h(to)f(100)f(axes.)227
-3033 y Fy(RESULT)46 b(=)i(AST)p Ft(_)p Fy(FINDFRAME\()c(TARGET,)h(AST)p
-Ft(_)p Fy(SKYFRAME\()f('System=FK5',)h(STATUS)h(\),)227
-3132 y(')i(',)f(STATUS)f(\))427 3215 y Fk(Searc)n(hes)25
-b(for)g(an)h(equatorial)e(\(FK5\))i(co)r(ordinate)f(system)g(in)i(the)f
-(target.)35 b(The)26 b(Equino)n(x)f(v)-5 b(alue)26 b(for)f(the)427
-3315 y(co)r(ordinate)k(system)h(has)g(not)h(b)r(een)f(sp)r(eci\014ed,)i
-(so)d(will)i(b)r(e)f(obtained)g(from)g(the)h(target.)44
-b(If)31 b(the)g(target)427 3415 y(is)26 b(a)f(F)-7 b(rameSet,)25
-b(its)h(Curren)n(t)f(attribute)g(will)h(b)r(e)g(up)r(dated)g(to)f
-(indicate)h(whic)n(h)f(SkyF)-7 b(rame)25 b(w)n(as)f(used)i(to)427
-3514 y(obtain)i(this)f(v)-5 b(alue.)227 3619 y Fy(RESULT)46
-b(=)i(AST)p Ft(_)p Fy(FINDFRAME\()c(TARGET,)h(AST)p Ft(_)p
-Fy(FRAME\()g(2,)i(')h(',)f(STATUS)f(\),)227 3719 y('SKY,PIXEL,',)e
-(STATUS)j(\))427 3798 y Fk(Searc)n(hes)29 b(for)g(a)h(2-dimensional)e
-(co)r(ordinate)h(system)h(in)g(the)h(target.)43 b(Initially)-7
-b(,)30 b(a)g(searc)n(h)e(is)i(made)g(for)427 3897 y(a)j(suitable)h(co)r
-(ordinate)e(system)h(whose)g(Domain)g(attribute)g(has)g(the)h(v)-5
-b(alue)33 b Ft(")p Fk(SKY)p Ft(")p Fk(.)54 b(If)33 b(this)h(searc)n(h)
-427 3997 y(fails,)g(a)f(searc)n(h)e(is)i(then)g(made)g(for)g(one)f
-(with)h(the)h(domain)e Ft(")p Fk(PIXEL)p Ft(")p Fk(.)51
-b(If)34 b(this)f(also)f(fails,)i(then)f(an)n(y)427 4097
-y(2-dimensional)27 b(co)r(ordinate)f(system)h(is)h(returned)f(as)g
-(part)g(of)h(the)g(RESUL)-7 b(T)27 b(F)-7 b(rameSet.)427
-4213 y(Only)26 b(if)h(no)g(2-dimensional)e(co)r(ordinate)g(systems)h
-(can)g(b)r(e)h(reac)n(hed)e(b)n(y)h(applying)g(built-in)h(con)n(v)n
-(ersions)427 4313 y(to)h(an)n(y)f(of)g(the)h(F)-7 b(rames)27
-b(in)h(the)g(target)e(will)i(a)f(v)-5 b(alue)28 b(of)f(AST)p
-Ft(__)p Fk(NULL)h(b)r(e)g(returned.)227 4434 y Fy(RESULT)46
-b(=)i(AST)p Ft(_)p Fy(FINDFRAME\()c(TARGET,)h(AST)p Ft(_)p
-Fy(FRAME\()g(1,)i('Domain=WAVELENGTH',)227 4534 y(STATUS)f(\),)i(')f
-(',)g(STATUS)f(\))427 4612 y Fk(Searc)n(hes)18 b(for)h(an)n(y)g
-(1-dimensional)f(co)r(ordinate)h(system)g(in)h(the)g(target)f(whic)n(h)
-g(has)g(the)h(domain)f Ft(")p Fk(W)-9 b(A)g(VE-)427 4712
-y(LENGTH)p Ft(")p Fk(.)227 4817 y Fy(RESULT)46 b(=)i(AST)p
-Ft(_)p Fy(FINDFRAME\()c(TARGET,)h(AST)p Ft(_)p Fy(FRAME\()g(1,)i(')h
-(',)f(STATUS)f(\),)227 4916 y('WAVELENGTH',)e(STATUS)j(\))427
-4995 y Fk(This)29 b(example)f(has)g(exactly)h(the)g(same)f(e\013ect)h
-(as)f(that)h(ab)r(o)n(v)n(e.)39 b(It)29 b(illustrates)f(the)h(equiv)-5
-b(alence)29 b(of)f(the)427 5095 y(template's)g(Domain)f(attribute)h
-(and)g(the)g(\014elds)f(in)h(the)g(DOMAINLIST)g(string.)227
-5216 y Fy(RESULT)46 b(=)i(AST)p Ft(_)p Fy(FINDFRAME\()c(TARGET,)h(AST)p
-Ft(_)p Fy(FRAME\()g(1,)i('MaxAxes=3',)e(STATUS)h(\),)h(')227
-5316 y(',)g(STATUS)g(\))427 5394 y Fk(This)31 b(is)f(a)g(more)g(adv)-5
-b(anced)30 b(example)g(whic)n(h)h(will)f(searc)n(h)f(for)h(an)n(y)g(co)
-r(ordinate)g(system)g(in)h(the)g(target)427 5494 y(ha)n(ving)h(1,)i(2)e
-(or)g(3)g(dimensions.)53 b(The)32 b(F)-7 b(rame)33 b(returned)f(\(as)g
-(part)h(of)g(the)g(RESUL)-7 b(T)33 b(F)-7 b(rameSet\))32
-b(will)427 5593 y(alw)n(a)n(ys)e(b)r(e)j(1-dimensional,)f(but)g(will)h
-(b)r(e)f(related)g(to)f(the)i(co)r(ordinate)e(system)h(that)g(w)n(as)f
-(found)h(b)n(y)g(a)427 5693 y(suitable)c(Mapping)f(\(e.g.)37
-b(a)27 b(P)n(ermMap\))f(whic)n(h)i(simply)g(extracts)e(the)i(\014rst)g
-(axis.)p eop end
-%%Page: 222 232
-TeXDict begin 222 231 bop 0 52 a FG(222)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)427 351 y Fk(If)e(w)n(e)e(had)h(w)
-n(an)n(ted)f(a)h(F)-7 b(rame)27 b(represen)n(ting)f(the)j(actual)e
-(\(1,)h(2)f(or)g(3-dimensional\))g(co)r(ordinate)g(system)427
-451 y(found,)h(w)n(e)f(could)h(set)f(the)h(Preserv)n(eAxes)d(attribute)
-j(to)g(a)f(non-zero)f(v)-5 b(alue)27 b(in)h(the)g(template.)227
-560 y Fy(RESULT)46 b(=)i(AST)p Ft(_)p Fy(FINDFRAME\()c(TARGET,)h(AST)p
-Ft(_)p Fy(SKYFRAME\()f('Permute=0',)h(STATUS)h(\),)h(')227
-659 y(',)g(STATUS)g(\))427 738 y Fk(Searc)n(hes)39 b(for)h(an)n(y)g
-(celestial)g(co)r(ordinate)f(system)h(in)h(the)g(target,)h(but)f(only)f
-(\014nds)h(one)f(if)h(its)g(axes)427 838 y(are)35 b(in)i(the)f(con)n(v)
-n(en)n(tional)e(\(longitude,latitude\))j(order)e(and)g(ha)n(v)n(e)g
-(not)h(b)r(een)h(p)r(erm)n(uted)f(\(e.g.)62 b(with)427
-937 y(AST)p Ft(_)p Fk(PERMAXES\).)0 1087 y Fc(Notes:)340
-1358 y Fj(\017)45 b Fk(The)28 b(Mapping)f(represen)n(ted)g(b)n(y)g(the)
-h(returned)f(F)-7 b(rameSet)27 b(results)g(in)h(alignmen)n(t)f(taking)g
-(place)g(in)h(the)427 1458 y(co)r(ordinate)22 b(system)i(sp)r
-(eci\014ed)f(b)n(y)g(the)h(AlignSystem)f(attribute)h(of)f(the)h(TEMPLA)
--7 b(TE)22 b(F)-7 b(rame.)35 b(See)23 b(the)427 1557
-y(description)k(of)h(the)g(AlignSystem)g(attribute)f(for)g(further)h
-(details.)340 1678 y Fj(\017)45 b Fk(Bew)n(are)35 b(of)i(setting)g(the)
-g(Domain)g(attribute)g(of)g(the)g(template)g(and)g(then)g(using)g(a)f
-(DOMAINLIST)427 1778 y(string)h(whic)n(h)g(do)r(es)g(not)g(include)g
-(the)h(template's)f(domain)g(\(or)f(a)h(blank)g(\014eld\).)66
-b(If)38 b(y)n(ou)e(do)h(so,)i(no)427 1878 y(co)r(ordinate)27
-b(system)g(will)h(b)r(e)g(found.)340 1999 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 2098
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 2248 y Fc(More)32 b(on)f(Using)h(T)-8
-b(emplates)n(:)227 2394 y Fk(A)29 b(F)-7 b(rame)27 b(\(describing)g(a)h
-(co)r(ordinate)f(system\))h(will)g(b)r(e)g(found)h(b)n(y)e(this)i
-(function)f(if)h(\(a\))f(it)g(is)g Ft(")p Fk(matc)n(hed)p
-Ft(")f Fk(b)n(y)227 2494 y(the)h(template)g(y)n(ou)f(supply)-7
-b(,)28 b(and)f(\(b\))i(the)f(v)-5 b(alue)27 b(of)h(its)f(Domain)h
-(attribute)g(app)r(ears)e(in)i(the)g(DOMAINLIST)227 2594
-y(string)33 b(\(except)h(that)f(a)g(blank)g(\014eld)h(in)f(this)h
-(string)e(p)r(ermits)i(an)n(y)f(domain\).)53 b(A)34 b(successful)f
-(matc)n(h)g(b)n(y)g(the)227 2693 y(template)28 b(dep)r(ends)g(on)g(a)f
-(n)n(um)n(b)r(er)g(of)h(criteria,)e(as)h(outlined)h(b)r(elo)n(w:)340
-2818 y Fj(\017)45 b Fk(In)26 b(general,)f(a)h(template)g(will)g(only)g
-(matc)n(h)g(another)f(F)-7 b(rame)25 b(whic)n(h)h(b)r(elongs)f(to)h
-(the)h(same)e(class)g(as)g(the)427 2918 y(template,)35
-b(or)d(to)h(a)f(deriv)n(ed)g(\(more)g(sp)r(ecialised\))h(class.)52
-b(F)-7 b(or)32 b(example,)i(a)e(SkyF)-7 b(rame)32 b(template)h(will)427
-3017 y(matc)n(h)h(an)n(y)f(other)g(SkyF)-7 b(rame,)34
-b(but)h(will)f(not)g(matc)n(h)f(a)g(basic)h(F)-7 b(rame.)54
-b(Con)n(v)n(ersely)-7 b(,)34 b(a)f(basic)g(F)-7 b(rame)427
-3117 y(template)28 b(will)g(matc)n(h)f(an)n(y)g(class)g(of)g(F)-7
-b(rame.)340 3238 y Fj(\017)45 b Fk(The)26 b(exception)e(to)h(this)h(is)
-f(that)h(a)e(F)-7 b(rame)25 b(of)g(an)n(y)g(class)f(can)h(b)r(e)g(used)
-g(to)g(matc)n(h)g(a)g(CmpF)-7 b(rame,)26 b(if)f(that)427
-3337 y(CmpF)-7 b(rame)27 b(con)n(tains)e(a)h(F)-7 b(rame)26
-b(of)h(the)g(same)f(class)f(as)h(the)h(template.)37 b(Note)27
-b(ho)n(w)n(ev)n(er,)d(the)j(MaxAxes)427 3437 y(and)j(MinAxes)h
-(attributes)f(of)h(the)f(template)h(m)n(ust)g(b)r(e)f(set)h(to)f
-(suitable)g(v)-5 b(alues)30 b(to)h(allo)n(w)e(it)i(to)f(matc)n(h)427
-3537 y(the)e(CmpF)-7 b(rame.)36 b(That)27 b(is,)g(the)g(MinAxes)g
-(attribute)g(m)n(ust)g(b)r(e)h(less)e(than)h(or)f(equal)h(to)g(the)g(n)
-n(um)n(b)r(er)g(of)427 3636 y(axes)g(in)i(the)f(target,)g(and)f(the)i
-(MaxAxes)e(attribute)i(m)n(ust)f(b)r(e)g(greater)e(than)j(or)e(equal)g
-(to)h(the)h(n)n(um)n(b)r(er)427 3736 y(of)f(axes)e(in)i(the)g(target.)
-340 3857 y Fj(\017)45 b Fk(If)40 b(using)g(a)f(CmpF)-7
-b(rame)40 b(as)f(a)g(template)h(frame,)i(the)f(MinAxes)e(and)h(MaxAxes)
-f(for)g(the)h(template)427 3957 y(are)33 b(determined)g(b)n(y)h(the)f
-(MinAxes)h(and)f(MaxAxes)g(v)-5 b(alues)33 b(of)g(the)h(comp)r(onen)n
-(t)f(F)-7 b(rames)33 b(within)h(the)427 4056 y(template.)48
-b(So)30 b(if)i(y)n(ou)e(w)n(an)n(t)g(a)h(template)g(CmpF)-7
-b(rame)31 b(to)g(b)r(e)g(able)g(to)g(matc)n(h)g(F)-7
-b(rames)30 b(with)h(di\013eren)n(t)427 4156 y(n)n(um)n(b)r(ers)19
-b(of)g(axes,)h(then)f(y)n(ou)g(m)n(ust)g(set)g(the)g(MaxAxes)g(and/or)e
-(MinAxes)i(attributes)g(in)g(the)h(comp)r(onen)n(t)427
-4255 y(template)28 b(F)-7 b(rames,)27 b(b)r(efore)g(com)n(bining)g
-(them)i(together)d(in)n(to)i(the)g(template)f(CmpF)-7
-b(rame.)340 4376 y Fj(\017)45 b Fk(If)32 b(a)e(template)i(has)e(a)h(v)
--5 b(alue)30 b(set)h(for)g(an)n(y)f(of)h(its)g(main)g(attributes,)h
-(then)f(it)h(will)f(only)g(matc)n(h)f(F)-7 b(rames)427
-4476 y(whic)n(h)23 b(ha)n(v)n(e)e(an)h(iden)n(tical)g(v)-5
-b(alue)22 b(for)g(that)h(attribute)g(\(or)e(whic)n(h)i(can)f(b)r(e)h
-(transformed,)f(using)g(a)g(built-in)427 4576 y(con)n(v)n(ersion,)30
-b(so)g(that)h(they)g(ha)n(v)n(e)f(the)h(required)f(v)-5
-b(alue)31 b(for)f(that)h(attribute\).)48 b(If)31 b(an)n(y)f(attribute)h
-(in)g(the)427 4675 y(template)d(is)f(un-set,)g(ho)n(w)n(ev)n(er,)e
-(then)i(F)-7 b(rames)27 b(are)f(matc)n(hed)g(regardless)f(of)i(the)g(v)
--5 b(alue)27 b(they)g(ma)n(y)g(ha)n(v)n(e)427 4775 y(for)37
-b(that)h(attribute.)66 b(Y)-7 b(ou)37 b(ma)n(y)g(therefore)f(mak)n(e)g
-(a)h(template)h(more)e(or)h(less)g(sp)r(eci\014c)g(b)n(y)g(c)n(ho)r
-(osing)427 4875 y(the)h(attributes)f(for)g(whic)n(h)g(y)n(ou)g(set)g(v)
--5 b(alues.)65 b(This)38 b(requiremen)n(t)e(do)r(es)h(not)g(apply)g(to)
-g('descriptiv)n(e')427 4974 y(attributes)28 b(suc)n(h)f(as)g(titles,)h
-(lab)r(els,)g(sym)n(b)r(ols,)e(etc.)340 5095 y Fj(\017)45
-b Fk(An)22 b(imp)r(ortan)n(t)g(application)f(of)g(this)h(principle)g
-(in)n(v)n(olv)n(es)e(the)i(Domain)g(attribute.)35 b(Setting)22
-b(the)g(Domain)427 5195 y(attribute)j(of)g(the)h(template)f(has)f(the)i
-(e\013ect)f(of)g(restricting)f(the)i(searc)n(h)d(to)i(a)f(particular)g
-(t)n(yp)r(e)h(of)g(F)-7 b(rame)427 5295 y(\(with)24 b(the)g(domain)e(y)
-n(ou)g(sp)r(ecify\).)36 b(Con)n(v)n(ersely)-7 b(,)22
-b(if)i(the)f(Domain)g(attribute)g(is)g(not)g(set)g(in)h(the)f
-(template,)427 5394 y(then)32 b(the)g(domain)f(of)g(the)h(F)-7
-b(rame)30 b(found)i(is)f(not)g(relev)-5 b(an)n(t,)32
-b(so)f(all)g(F)-7 b(rames)30 b(are)g(searc)n(hed.)47
-b(Note)31 b(that)427 5494 y(the)i(DOMAINLIST)g(string)f(pro)n(vides)f
-(an)i(alternativ)n(e)e(w)n(a)n(y)g(of)i(restricting)e(the)i(searc)n(h)e
-(in)i(the)g(same)427 5593 y(manner,)g(but)g(is)f(a)g(more)f(con)n(v)n
-(enien)n(t)g(in)n(terface)h(if)g(y)n(ou)g(wish)g(to)g(searc)n(h)f
-(automatically)g(for)h(another)427 5693 y(domain)27 b(if)i(the)f
-(\014rst)f(searc)n(h)f(fails.)p eop end
-%%Page: 223 233
-TeXDict begin 223 232 bop 3643 52 a FG(223)340 351 y
-Fj(\017)45 b Fk(Normally)-7 b(,)29 b(a)g(template)h(will)f(only)g(matc)
-n(h)g(a)g(F)-7 b(rame)29 b(whic)n(h)g(has)g(the)g(same)g(n)n(um)n(b)r
-(er)g(of)g(axes)f(as)h(itself.)427 451 y(Ho)n(w)n(ev)n(er,)i(for)g
-(some)g(classes)f(of)h(template,)i(this)f(default)f(b)r(eha)n(viour)g
-(ma)n(y)f(b)r(e)i(c)n(hanged)f(b)n(y)g(means)g(of)427
-551 y(the)f(MinAxes,)g(MaxAxes)e(and)h(Matc)n(hEnd)g(attributes.)42
-b(In)29 b(addition,)h(the)f(b)r(eha)n(viour)f(of)h(a)g(template)427
-650 y(ma)n(y)38 b(b)r(e)h(in\015uenced)g(b)n(y)f(its)h(P)n(erm)n(ute)e
-(and)i(Preserv)n(eAxes)d(attributes,)41 b(whic)n(h)e(con)n(trol)e
-(whether)h(it)427 750 y(matc)n(hes)30 b(F)-7 b(rames)30
-b(whose)g(axes)f(ha)n(v)n(e)h(b)r(een)g(p)r(erm)n(uted,)i(and)e
-(whether)h(this)g(p)r(erm)n(utation)f(is)g(retained)427
-849 y(in)k(the)f(F)-7 b(rame)33 b(whic)n(h)g(is)h(returned)e(\(as)h
-(opp)r(osed)g(to)g(returning)g(the)g(axes)g(in)g(the)h(order)e(sp)r
-(eci\014ed)h(in)427 949 y(the)e(template,)h(whic)n(h)f(is)f(the)h
-(default)g(b)r(eha)n(viour\).)45 b(Y)-7 b(ou)31 b(should)g(consult)f
-(the)h(descriptions)f(of)h(these)427 1049 y(attributes)d(for)f(details)
-g(of)h(this)g(more)e(adv)-5 b(anced)28 b(use)f(of)h(templates.)p
-0 1242 3780 12 v 0 1373 a FA(AST)p Fe(_)p FA(FITSCHAN)1416
-1374 y Fd(Create)37 b(a)h(FitsChan)2736 1373 y FA(AST)p
-Fe(_)p FA(FITSCHAN)0 1544 y Fc(Description:)44 b Fk(This)28
-b(function)g(creates)f(a)g(new)g(FitsChan)h(and)f(optionally)g
-(initialises)h(its)f(attributes.)227 1667 y(A)33 b(FitsChan)e(is)h(a)g
-(sp)r(ecialised)f(form)h(of)g(Channel)f(whic)n(h)h(supp)r(orts)g(I/O)f
-(op)r(erations)f(in)n(v)n(olving)h(the)h(use)g(of)227
-1766 y(FITS)g(\(Flexible)h(Image)e(T)-7 b(ransp)r(ort)30
-b(System\))i(header)f(cards.)49 b(W)-7 b(riting)32 b(an)f(Ob)5
-b(ject)32 b(to)f(a)h(FitsChan)g(\(using)227 1866 y(AST)p
-Ft(_)p Fk(WRITE\))h(will,)i(if)e(the)g(Ob)5 b(ject)33
-b(is)f(suitable,)i(generate)e(a)g(description)g(of)h(that)g(Ob)5
-b(ject)33 b(comp)r(osed)f(of)227 1966 y(FITS)g(header)e(cards,)g(and)h
-(reading)f(from)g(a)h(FitsChan)g(will)g(create)f(a)h(new)g(Ob)5
-b(ject)30 b(from)h(its)g(FITS)g(header)227 2065 y(card)c(description.)
-227 2188 y(While)36 b(a)e(FitsChan)h(is)f(activ)n(e,)i(it)f(represen)n
-(ts)f(a)g(bu\013er)h(whic)n(h)g(ma)n(y)f(con)n(tain)g(zero)f(or)h(more)
-g(80-c)n(haracter)227 2288 y Ft(")p Fk(header)29 b(cards)p
-Ft(")f Fk(conforming)g(to)i(FITS)f(con)n(v)n(en)n(tions.)41
-b(An)n(y)30 b(sequence)f(of)h(FITS-conforming)e(header)h(cards)227
-2388 y(ma)n(y)f(b)r(e)g(stored,)g(apart)f(from)h(the)h
-Ft(")p Fk(END)p Ft(")e Fk(card)h(whose)f(existence)h(is)g(merely)g
-(implied.)39 b(The)29 b(cards)e(ma)n(y)g(b)r(e)227 2487
-y(accessed)38 b(in)h(an)n(y)f(order)f(b)n(y)i(using)f(the)h(FitsChan's)
-g(in)n(teger)f(Card)g(attribute,)k(whic)n(h)c(iden)n(ti\014es)h(a)g
-Ft(")p Fk(cur-)227 2587 y(ren)n(t)p Ft(")44 b Fk(card,)k(to)c(whic)n(h)
-h(subsequen)n(t)f(op)r(erations)f(apply)-7 b(.)87 b(Searc)n(hes)43
-b(based)h(on)h(k)n(eyw)n(ord)d(ma)n(y)i(b)r(e)h(p)r(er-)227
-2687 y(formed)23 b(\(using)h(AST)p Ft(_)p Fk(FINDFITS\),)h(new)e(cards)
-f(ma)n(y)h(b)r(e)h(inserted)f(\(AST)p Ft(_)p Fk(PUTFITS,)h(AST)p
-Ft(_)p Fk(PUTCARDS,)227 2786 y(AST)p Ft(_)p Fk(SETFITS)p
-Fm(<)p Fk(X)p Fm(>)p Fk(\))18 b(and)g(existing)g(ones)g(ma)n(y)g(b)r(e)
-h(deleted)f(\(AST)p Ft(_)p Fk(DELFITS\))h(or)f(c)n(hanged)f(\(AST)p
-Ft(_)p Fk(SETFITS)p Fm(<)p Fk(X)p Fm(>)p Fk(\).)227 2909
-y(When)37 b(y)n(ou)f(create)g(a)g(FitsChan,)j(y)n(ou)d(ha)n(v)n(e)g
-(the)h(option)f(of)h(sp)r(ecifying)g Ft(")p Fk(source)p
-Ft(")d Fk(and)j Ft(")p Fk(sink)p Ft(")e Fk(functions)227
-3009 y(whic)n(h)26 b(connect)g(it)h(to)f(external)f(data)h(stores)f(b)n
-(y)h(reading)f(and)h(writing)g(FITS)g(header)g(cards.)35
-b(If)26 b(y)n(ou)g(pro)n(vide)227 3108 y(a)h(source)f(function,)j(it)e
-(is)h(used)f(to)g(\014ll)h(the)g(FitsChan)f(with)h(header)f(cards)f
-(when)i(it)g(is)f(accessed)f(for)h(the)h(\014rst)227
-3208 y(time.)56 b(If)34 b(y)n(ou)f(do)h(not)f(pro)n(vide)g(a)g(source)g
-(function,)j(the)e(FitsChan)g(remains)e(empt)n(y)i(un)n(til)g(y)n(ou)f
-(explicitly)227 3308 y(en)n(ter)23 b(data)g(in)n(to)g(it)g(\(e.g.)36
-b(using)23 b(AST)p Ft(_)p Fk(PUTCARDS,)h(AST)p Ft(_)p
-Fk(PUTFITS)f(or)f(AST)p Ft(_)p Fk(WRITE\).)i(If)f(y)n(ou)g(pro)n(vide)
-227 3407 y(a)h(sink)f(function,)j(it)e(is)g(used)g(to)f(deliv)n(er)g
-(an)n(y)g(remaining)g(con)n(ten)n(ts)h(of)f(a)h(FitsChan)g(to)g(an)f
-(external)g(data)h(store)227 3507 y(when)30 b(the)g(FitsChan)g(is)f
-(deleted.)43 b(If)30 b(y)n(ou)f(do)g(not)h(pro)n(vide)e(a)h(sink)h
-(function,)h(an)n(y)d(header)h(cards)g(remaining)227
-3607 y(when)f(the)g(FitsChan)g(is)g(deleted)g(will)g(b)r(e)g(lost,)f
-(so)g(y)n(ou)g(should)h(arrange)d(to)i(extract)g(them)i(\014rst)e(if)h
-(necessary)227 3706 y(\(e.g.)37 b(using)27 b(AST)p Ft(_)p
-Fk(FINDFITS)i(or)e(AST)p Ft(_)p Fk(READ\).)227 3829 y(Co)r(ordinate)i
-(system)g(information)g(ma)n(y)g(b)r(e)h(describ)r(ed)g(using)f(FITS)h
-(header)f(cards)f(using)i(sev)n(eral)d(di\013eren)n(t)227
-3929 y(con)n(v)n(en)n(tions,)h(termed)h Ft(")p Fk(enco)r(dings)p
-Ft(")p Fk(.)39 b(When)29 b(an)g(AST)g(Ob)5 b(ject)29
-b(is)f(written)h(to)g(\(or)f(read)g(from\))h(a)f(FitsChan,)227
-4029 y(the)22 b(v)-5 b(alue)22 b(of)g(the)g(FitsChan's)g(Enco)r(ding)f
-(attribute)g(determines)h(ho)n(w)f(the)h(Ob)5 b(ject)22
-b(is)g(con)n(v)n(erted)e(to)i(\(or)f(from\))227 4128
-y(a)31 b(description)g(in)n(v)n(olving)g(FITS)g(header)g(cards.)48
-b(In)32 b(general,)f(di\013eren)n(t)h(enco)r(dings)f(will)g(result)h
-(in)f(di\013eren)n(t)227 4228 y(sets)24 b(of)f(header)g(cards)g(to)g
-(describ)r(e)h(the)g(same)f(Ob)5 b(ject.)35 b(Examples)23
-b(of)g(enco)r(dings)g(include)h(the)h(DSS)f(enco)r(ding)227
-4327 y(\(based)35 b(on)g(con)n(v)n(en)n(tions)f(used)h(b)n(y)g(the)h
-(STScI)g(Digitised)f(Sky)g(Surv)n(ey)g(data\),)i(the)f(FITS-W)n(CS)f
-(enco)r(ding)227 4427 y(\(based)30 b(on)g(a)g(prop)r(osed)f(FITS)h
-(standard\))g(and)g(the)g(NA)-7 b(TIVE)31 b(enco)r(ding)e(\(a)h(near)f
-(loss-less)g(w)n(a)n(y)g(of)h(storing)227 4527 y(AST)e(Ob)5
-b(jects)27 b(in)h(FITS)g(headers\).)227 4650 y(The)e(a)n(v)-5
-b(ailable)25 b(enco)r(dings)g(di\013er)h(in)g(the)g(range)f(of)h(Ob)5
-b(jects)25 b(they)h(can)g(represen)n(t,)f(in)h(the)g(n)n(um)n(b)r(er)g
-(of)g(Ob)5 b(ject)227 4749 y(descriptions)31 b(that)h(can)g(co)r(exist)
-f(in)h(the)g(same)g(FitsChan,)h(and)e(in)h(their)g(accessibilit)n(y)f
-(to)h(other)f(\(external\))227 4849 y(astronom)n(y)36
-b(applications)g(\(see)i(the)f(Enco)r(ding)g(attribute)h(for)f
-(details\).)66 b(Enco)r(dings)36 b(are)h(not)g(necessarily)227
-4949 y(m)n(utually)28 b(exclusiv)n(e)g(and)g(it)h(ma)n(y)e(sometimes)h
-(b)r(e)h(p)r(ossible)f(to)g(describ)r(e)g(the)g(same)g(Ob)5
-b(ject)28 b(in)h(sev)n(eral)d(w)n(a)n(ys)227 5048 y(within)j(a)e
-(particular)f(set)i(of)f(FITS)h(header)f(cards)f(b)n(y)i(using)f(sev)n
-(eral)f(di\013eren)n(t)h(enco)r(dings.)227 5171 y(The)k(detailed)h(b)r
-(eha)n(viour)e(of)h(AST)p Ft(_)p Fk(READ)g(and)g(AST)p
-Ft(_)p Fk(WRITE,)g(when)h(used)f(with)g(a)g(FitsChan,)h(dep)r(ends)227
-5271 y(on)g(the)g(enco)r(ding)f(in)h(use.)50 b(In)32
-b(general,)f(ho)n(w)n(ev)n(er,)g(all)h(use)f(of)h(AST)p
-Ft(_)p Fk(READ)g(is)g(destructiv)n(e,)g(so)f(that)h(FITS)227
-5371 y(header)21 b(cards)g(are)g(consumed)g(in)h(the)g(pro)r(cess)f(of)
-h(reading)e(an)i(Ob)5 b(ject,)22 b(and)g(are)f(remo)n(v)n(ed)f(from)h
-(the)i(FitsChan)227 5470 y(\(this)28 b(deletion)g(can)f(b)r(e)h(prev)n
-(en)n(ted)f(for)g(sp)r(eci\014c)h(cards)e(b)n(y)i(calling)f(the)h(AST)p
-Ft(_)p Fk(RET)-7 b(AINFITS)28 b(routine\).)227 5593 y(If)38
-b(the)f(enco)r(ding)f(in)h(use)g(allo)n(ws)f(only)g(a)h(single)f(Ob)5
-b(ject)37 b(description)f(to)h(b)r(e)g(stored)f(in)h(a)g(FitsChan)g
-(\(e.g.)227 5693 y(the)31 b(DSS,)g(FITS-W)n(CS)g(and)f(FITS-IRAF)h
-(enco)r(dings\),)g(then)g(write)g(op)r(erations)e(using)h(AST)p
-Ft(_)p Fk(WRITE)g(will)p eop end
-%%Page: 224 234
-TeXDict begin 224 233 bop 0 52 a FG(224)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 351 y Fk(o)n(v)n(er-write)36
-b(an)n(y)i(existing)h(Ob)5 b(ject)38 b(description)g(using)g(that)h
-(enco)r(ding.)70 b(Otherwise)37 b(\(e.g.)70 b(the)39
-b(NA)-7 b(TIVE)227 451 y(enco)r(ding\),)26 b(m)n(ultiple)g(Ob)5
-b(ject)25 b(descriptions)f(are)h(written)g(sequen)n(tially)g(and)g(ma)n
-(y)f(later)h(b)r(e)h(read)e(bac)n(k)h(in)g(the)227 551
-y(same)i(sequence.)0 721 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_FITSCHAN\()38 b(SOURCE,)j(SINK,)g(OPTIONS,)g
-(STATUS)g(\))0 892 y Fc(Argumen)m(ts:)259 1050 y(SOUR)m(CE)32
-b(=)g(FUNCTION)g(\(Giv)m(en\))427 1150 y Fk(A)d(source)e(routine,)h
-(whic)n(h)g(is)g(a)g(function)h(taking)f(t)n(w)n(o)f(argumen)n(ts:)37
-b(a)28 b(c)n(haracter)e(argumen)n(t)h(of)i(length)427
-1249 y(80)d(to)g(con)n(tain)f(a)h(FITS)g(card,)g(and)g(an)g(in)n(teger)
-f(error)f(status)i(argumen)n(t.)36 b(It)26 b(should)g(return)g(an)g(in)
-n(teger)427 1349 y(v)-5 b(alue.)50 b(This)32 b(function)g(will)h(b)r(e)
-f(used)g(b)n(y)f(the)i(FitsChan)f(to)f(obtain)h(input)h(FITS)f(header)f
-(cards.)49 b(On)427 1448 y(eac)n(h)36 b(in)n(v)n(o)r(cation,)h(it)f
-(should)g(read)g(the)g(next)h(input)g(card)e(from)h(some)g(external)f
-(source)g(\(suc)n(h)h(as)g(a)427 1548 y(FITS)30 b(\014le\),)h(and)f
-(return)f(the)i(con)n(ten)n(ts)e(of)h(the)g(card)f(via)g(its)h(c)n
-(haracter)e(argumen)n(t.)42 b(It)30 b(should)g(return)427
-1648 y(a)i(function)i(result)e(of)h(one)f(unless)g(there)h(are)e(no)i
-(more)e(cards)h(to)g(b)r(e)h(read,)h(in)e(whic)n(h)h(case)f(it)h
-(should)427 1747 y(return)24 b(zero.)34 b(If)25 b(an)e(error)f(o)r
-(ccurs,)i(it)g(should)g(set)g(its)g(error)d(status)j(argumen)n(t)f(to)h
-(an)f(error)f(v)-5 b(alue)24 b(b)r(efore)427 1847 y(returning.)427
-1968 y(If)30 b(the)g(n)n(ull)f(routine)g(AST)p Ft(_)p
-Fk(NULL)h(is)f(supplied)h(as)f(the)h(SOUR)n(CE)f(v)-5
-b(alue,)29 b(the)h(FitsChan)g(will)f(remain)427 2068
-y(empt)n(y)19 b(un)n(til)g(cards)e(are)h(explicitly)g(stored)g(in)h(it)
-g(\(e.g.)33 b(using)19 b(AST)p Ft(_)p Fk(PUTCARDS)g(or)e(AST)p
-Ft(_)p Fk(PUTFITS\).)259 2212 y Fc(SINK)32 b(=)g(SUBR)m(OUTINE)g(\(Giv)
-m(en\))427 2311 y Fk(A)g(sink)g(routine,)h(whic)n(h)e(is)h(a)g
-(subroutine)f(whic)n(h)h(tak)n(es)f(t)n(w)n(o)g(argumen)n(ts:)44
-b(a)31 b(c)n(haracter)f(argumen)n(t)h(of)427 2411 y(length)26
-b(80)g(to)f(con)n(tain)h(a)f(FITS)i(card,)e(and)h(an)g(in)n(teger)f
-(error)f(status)i(argumen)n(t.)35 b(This)26 b(routine)g(will)g(b)r(e)
-427 2511 y(used)h(b)n(y)g(the)g(FitsChan)g(to)f(deliv)n(er)g(an)n(y)g
-(FITS)h(header)f(cards)g(it)h(con)n(tains)f(when)h(it)g(is)g(\014nally)
-f(deleted.)427 2610 y(On)33 b(eac)n(h)g(in)n(v)n(o)r(cation,)g(it)g
-(should)g(deliv)n(er)g(the)g(con)n(ten)n(ts)f(of)i(the)f(c)n(haracter)e
-(string)i(passed)f(to)h(it)h(as)e(a)427 2710 y(FITS)i(header)f(card)g
-(to)g(some)g(external)g(data)g(store)f(\(suc)n(h)i(as)f(a)g(FITS)h
-(\014le\).)55 b(If)34 b(an)f(error)f(o)r(ccurs,)i(it)427
-2809 y(should)28 b(set)f(its)h(error)e(status)h(argumen)n(t)g(to)g(an)g
-(error)f(v)-5 b(alue)27 b(b)r(efore)h(returning.)427
-2931 y(If)j(the)f(n)n(ull)h(routine)f(AST)p Ft(_)p Fk(NULL)g(is)g
-(supplied)h(as)e(the)i(SINK)f(v)-5 b(alue,)31 b(the)f(con)n(ten)n(ts)g
-(of)g(the)h(FitsChan)427 3031 y(will)d(not)g(b)r(e)g(written)f(out)h
-(when)g(it)g(is)f(deleted.)259 3174 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)
-g Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-3274 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h(optional)
-f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f(to)g(b)r
-(e)427 3373 y(used)j(for)g(initialising)g(the)g(new)g(FitsChan.)36
-b(The)24 b(syn)n(tax)g(used)g(is)g(iden)n(tical)g(to)g(that)g(for)g
-(the)g(AST)p Ft(_)p Fk(SET)427 3473 y(routine.)259 3617
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 3716 y Fk(The)c(global)e(status.)0 3899 y Fc(Returned)32
-b(V)-8 b(alue:)259 4057 y(AST)p Ft(_)p Fc(FITSCHAN)32
-b(=)h(INTEGER)427 4157 y Fk(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g
-(FitsChan.)0 4340 y Fc(Notes:)340 4644 y Fj(\017)45 b
-Fk(The)27 b(names)g(of)g(the)h(routines)e(supplied)i(for)e(the)i(SOUR)n
-(CE)e(and)h(SINK)g(argumen)n(ts)f(should)h(app)r(ear)f(in)427
-4744 y(EXTERNAL)33 b(statemen)n(ts)g(in)h(the)f(F)-7
-b(ortran)32 b(routine)h(whic)n(h)g(in)n(v)n(ok)n(es)e(AST)p
-Ft(_)p Fk(FITSCHAN.)k(Ho)n(w)n(ev)n(er,)427 4843 y(this)h(is)f(not)g
-(generally)f(necessary)f(for)i(the)g(n)n(ull)h(routine)f(AST)p
-Ft(_)p Fk(NULL)g(\(so)g(long)f(as)h(the)h(AST)p Ft(_)p
-Fk(P)-7 b(AR)427 4943 y(include)28 b(\014le)g(has)f(b)r(een)h(used\).)
-340 5086 y Fj(\017)45 b Fk(No)26 b(FITS)f Ft(")p Fk(END)p
-Ft(")g Fk(card)g(will)h(b)r(e)g(written)f(via)g(the)h(sink)f(routine.)
-36 b(Y)-7 b(ou)26 b(should)f(add)g(this)h(card)f(y)n(ourself)427
-5186 y(after)j(the)g(FitsChan)f(has)g(b)r(een)h(deleted.)340
-5329 y Fj(\017)45 b Fk(A)35 b(n)n(ull)g(Ob)5 b(ject)35
-b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fk(NULL\))g(will)g(b)r(e)g(returned)g
-(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427
-5429 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)340 5573 y Fj(\017)45 b Fk(Note)36
-b(that)f(the)h(n)n(ull)f(routine)g(AST)p Ft(_)p Fk(NULL)h(\(one)f
-(underscore\))f(is)h(di\013eren)n(t)h(to)f(AST)p Ft(__)p
-Fk(NULL)g(\(t)n(w)n(o)427 5672 y(underscores\),)26 b(whic)n(h)i(is)f
-(the)h(n)n(ull)g(Ob)5 b(ject)28 b(p)r(oin)n(ter.)p eop
-end
-%%Page: 225 235
-TeXDict begin 225 234 bop 3643 52 a FG(225)-2 351 y Fc(Status)33
-b(Handling)n(:)227 497 y Fk(The)d(protected)g(in)n(terface)f(to)g(this)
-h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g
-(the)g(parameter)227 597 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62
-b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)
-e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fk(in)n(t)227
-697 y Fj(\003)p Fk(status)p Ft(")p Fk(.)p 0 902 3780
-12 v 0 1033 a FA(AST)p Fe(_)p FA(FLUXFRAME)167 b Fd(Create)38
-b(a)g(FluxF)-10 b(rame)170 b FA(AST)p Fe(_)p FA(FLUXFRAME)0
-1215 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(FluxF)-7 b(rame)28 b(and)f(optionally)g(initialises)g(its)h
-(attributes.)227 1343 y(A)c(FluxF)-7 b(rame)22 b(is)h(a)g(sp)r
-(ecialised)f(form)h(of)g(one-dimensional)e(F)-7 b(rame)23
-b(whic)n(h)g(represen)n(ts)e(v)-5 b(arious)22 b(systems)h(used)227
-1442 y(to)36 b(represen)n(t)f(the)h(signal)f(lev)n(el)g(in)i(an)e
-(observ)-5 b(ation.)61 b(The)36 b(particular)e(co)r(ordinate)h(system)h
-(to)g(b)r(e)g(used)g(is)227 1542 y(sp)r(eci\014ed)31
-b(b)n(y)f(setting)h(the)g(FluxF)-7 b(rame's)30 b(System)h(attribute)g
-(quali\014ed,)g(as)f(necessary)-7 b(,)29 b(b)n(y)i(other)f(attributes)
-227 1642 y(suc)n(h)e(as)e(the)i(units,)h(etc)e(\(see)h(the)g
-(description)f(of)g(the)h(System)g(attribute)g(for)f(details\).)227
-1769 y(All)i(\015ux)f(v)-5 b(alues)28 b(are)f(assumed)g(to)h(b)r(e)h
-(measured)e(at)h(the)h(same)e(frequency)h(or)f(w)n(a)n(v)n(elength)f
-(\(as)i(giv)n(en)f(b)n(y)h(the)227 1869 y(Sp)r(ecV)-7
-b(al)28 b(attribute\).)38 b(Th)n(us)27 b(this)h(class)e(is)i(more)f
-(appropriate)f(for)h(use)g(with)h(images)f(rather)f(than)i(sp)r(ectra.)
-0 2024 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i
-(AST_FLUXFRAME\()38 b(SPECVAL,)i(SPECFRM,)g(OPTIONS,)h(STATUS)g(\))0
-2179 y Fc(Argumen)m(ts:)259 2322 y(SPECV)-11 b(AL)33
-b(=)f(DOUBLE)g(PRECISION)g(\(Giv)m(en\))427 2421 y Fk(The)37
-b(sp)r(ectral)e(v)-5 b(alue)36 b(to)g(whic)n(h)g(the)h(\015ux)f(v)-5
-b(alues)36 b(refer,)i(giv)n(en)d(in)i(the)f(sp)r(ectral)g(co)r
-(ordinate)f(system)427 2521 y(sp)r(eci\014ed)22 b(b)n(y)e(SPECFRM.)h
-(The)g(v)-5 b(alue)21 b(supplied)h(for)e(the)i(SPECV)-9
-b(AL)20 b(parameter)g(b)r(ecomes)h(the)g(default)427
-2621 y(v)-5 b(alue)39 b(for)f(the)h(Sp)r(ecV)-7 b(al)39
-b(attribute.)71 b(A)39 b(v)-5 b(alue)38 b(of)h(AST)p
-Ft(__)p Fk(BAD)g(ma)n(y)f(b)r(e)h(supplied)g(if)g(the)g(sp)r(ectral)427
-2720 y(p)r(osition)34 b(is)f(unkno)n(wn,)h(but)h(this)e(ma)n(y)g
-(result)g(in)h(it)g(not)f(b)r(eing)h(p)r(ossible)f(for)g(the)h(AST)p
-Ft(_)p Fk(CONVER)-7 b(T)427 2820 y(function)28 b(to)g(determine)g(a)f
-(Mapping)g(b)r(et)n(w)n(een)h(the)g(new)f(FluxF)-7 b(rame)27
-b(and)h(some)f(other)g(FluxF)-7 b(rame.)259 2956 y Fc(SPECFRM)31
-b(=)h(INTEGER)g(\(Giv)m(en\))427 3055 y Fk(A)27 b(p)r(oin)n(ter)f(to)h
-(a)f(Sp)r(ecF)-7 b(rame)26 b(describing)g(the)h(sp)r(ectral)f(co)r
-(ordinate)g(system)g(in)h(whic)n(h)f(the)h(SPECV)-9 b(AL)427
-3155 y(parameter)32 b(is)g(giv)n(en.)52 b(A)34 b(deep)f(cop)n(y)f(of)h
-(this)g(ob)5 b(ject)33 b(is)f(tak)n(en,)i(so)e(an)n(y)g(subsequen)n(t)h
-(c)n(hanges)e(to)i(the)427 3255 y(Sp)r(ecF)-7 b(rame)20
-b(using)f(the)i(supplied)f(p)r(oin)n(ter)f(will)h(ha)n(v)n(e)f(no)h
-(e\013ect)g(on)g(the)g(new)g(FluxF)-7 b(rame.)34 b(AST)p
-Ft(__)p Fk(NULL)427 3354 y(can)27 b(b)r(e)h(supplied)g(if)h(AST)p
-Ft(__)p Fk(BAD)e(is)h(supplied)g(for)f(SPECV)-9 b(AL.)259
-3490 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 3590 y Fk(A)g(c)n(haracter)e(string)
-h(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 3689 y(b)r(e)39
-b(used)f(for)g(initialising)g(the)g(new)h(FluxF)-7 b(rame.)68
-b(The)38 b(syn)n(tax)g(used)g(is)g(iden)n(tical)g(to)g(that)h(for)e
-(the)427 3789 y(AST)p Ft(_)p Fk(SET)27 b(routine.)37
-b(If)28 b(no)f(initialisation)g(is)h(required,)f(a)g(blank)g(v)-5
-b(alue)28 b(ma)n(y)e(b)r(e)i(supplied.)259 3925 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-4024 y Fk(The)c(global)e(status.)0 4192 y Fc(Returned)32
-b(V)-8 b(alue:)259 4335 y(AST)p Ft(_)p Fc(FLUXFRAME)33
-b(=)f(INTEGER)427 4434 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(FluxF)
--7 b(rame.)0 4602 y Fc(Notes:)340 4891 y Fj(\017)45 b
-Fk(When)g(con)n(v)n(ersion)c(b)r(et)n(w)n(een)j(t)n(w)n(o)f(FluxF)-7
-b(rames)44 b(is)g(requested)f(\(as)g(when)h(supplying)g(FluxF)-7
-b(rames)427 4990 y(AST)p Ft(_)p Fk(CONVER)g(T\),)32 b(accoun)n(t)g
-(will)g(b)r(e)g(tak)n(en)g(of)g(the)g(nature)g(of)f(the)i(\015ux)f(co)r
-(ordinate)f(systems)g(they)427 5090 y(represen)n(t,)23
-b(together)f(with)i(an)n(y)e(qualifying)h(attribute)g(v)-5
-b(alues,)24 b(including)g(the)f(AlignSystem)g(attribute.)427
-5189 y(The)j(results)e(will)i(therefore)e(fully)i(re\015ect)f(the)g
-(relationship)g(b)r(et)n(w)n(een)g(p)r(ositions)g(measured)f(in)i(the)f
-(t)n(w)n(o)427 5289 y(systems.)55 b(In)33 b(addition,)i(an)n(y)e
-(di\013erence)h(in)g(the)g(Unit)g(attributes)f(of)h(the)g(t)n(w)n(o)f
-(systems)g(will)h(also)e(b)r(e)427 5389 y(tak)n(en)27
-b(in)n(to)h(accoun)n(t.)340 5524 y Fj(\017)45 b Fk(A)21
-b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 5624
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p eop end
-%%Page: 226 236
-TeXDict begin 226 235 bop 0 52 a FG(226)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(F)l(ORMA)-11 b(T)1078 483
-y Fd(F)h(ormat)37 b(a)i(co)s(ordinate)d(v)-7 b(alue)38
-b(for)g(a)1611 583 y(F)-10 b(rame)38 b(axis)2855 482
-y FA(AST)p Fe(_)p FA(F)l(ORMA)-11 b(T)0 760 y Fc(Description:)44
-b Fk(This)26 b(function)h(returns)e(a)h(c)n(haracter)e(string)h(con)n
-(taining)g(the)h(formatted)g(\(c)n(haracter\))f(v)n(ersion)f(of)i(a)227
-860 y(co)r(ordinate)e(v)-5 b(alue)24 b(for)g(a)h(F)-7
-b(rame)24 b(axis.)35 b(The)24 b(formatting)g(applied)h(is)g(determined)
-f(b)n(y)h(the)g(F)-7 b(rame's)24 b(attributes)227 959
-y(and,)h(in)f(particular,)f(b)n(y)g(an)n(y)g(F)-7 b(ormat)23
-b(attribute)h(string)f(that)h(has)f(b)r(een)i(set)e(for)h(the)g(axis.)
-34 b(A)25 b(suitable)e(default)227 1059 y(format)k(\(based)h(on)f(the)h
-(Digits)g(attribute)g(v)-5 b(alue\))27 b(will)h(b)r(e)g(applied)g(if)g
-(necessary)-7 b(.)0 1216 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_FORMAT\()c(THIS,)j(AXIS,)f(VALUE,)g(STATUS)g
-(\))0 1373 y Fc(Argumen)m(ts:)259 1517 y(THIS)32 b(=)g(INTEGER)g(\(giv)
-m(en\))427 1616 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)259 1753 y Fc(AXIS)33 b(=)f(INTEGER)f(\(Giv)m(en\))427
-1852 y Fk(The)23 b(n)n(um)n(b)r(er)g(of)f(the)h(F)-7
-b(rame)22 b(axis)g(for)h(whic)n(h)f(formatting)g(is)h(to)g(b)r(e)g(p)r
-(erformed)f(\(axis)g(n)n(um)n(b)r(ering)g(starts)427
-1952 y(at)28 b(1)f(for)g(the)h(\014rst)f(axis\).)259
-2088 y Fc(V)-11 b(ALUE)33 b(=)f(DOUBLE)h(PRECISION)e(\(Giv)m(en\))427
-2188 y Fk(The)d(co)r(ordinate)e(v)-5 b(alue)28 b(to)f(b)r(e)h
-(formatted.)259 2325 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m
-(en)h(and)g(Returned\))427 2424 y Fk(The)c(global)e(status.)0
-2594 y Fc(Returned)32 b(V)-8 b(alue:)259 2737 y(AST)p
-Ft(_)p Fc(F)m(ORMA)g(T)32 b(=)g(CHARA)m(CTER)g Fj(\003)f
-Fc(\()h(AST)p Ft(__)p Fc(SZCHR)f(\))427 2837 y Fk(The)d(formatted)f(v)
--5 b(alue.)0 3006 y Fc(Notes:)340 3296 y Fj(\017)45 b
-Fk(A)36 b(formatted)f(v)-5 b(alue)35 b(ma)n(y)f(b)r(e)i(con)n(v)n
-(erted)e(bac)n(k)g(in)n(to)h(a)g(n)n(umerical)f(\(double)h(precision\))
-g(v)-5 b(alue)35 b(using)427 3396 y(AST)p Ft(_)p Fk(UNF)n(ORMA)-7
-b(T.)340 3532 y Fj(\017)45 b Fk(A)25 b(blank)f(string)f(will)i(b)r(e)f
-(returned)g(if)h(this)g(function)f(is)g(in)n(v)n(ok)n(ed)f(with)i(ST)-7
-b(A)g(TUS)25 b(set)f(to)g(an)g(error)f(v)-5 b(alue,)427
-3632 y(or)27 b(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 3839 V 0 3969 a FA(AST)p Fe(_)p FA(FRAME)656 b Fd(Create)37
-b(a)i(F)-10 b(rame)658 b FA(AST)p Fe(_)p FA(FRAME)0 4153
-y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g(F)-7
-b(rame)27 b(and)h(optionally)f(initialises)g(its)h(attributes.)227
-4282 y(A)c(F)-7 b(rame)24 b(is)f(used)h(to)g(represen)n(t)e(a)i(co)r
-(ordinate)e(system.)35 b(It)25 b(do)r(es)e(this)h(in)g(rather)f(the)h
-(same)f(w)n(a)n(y)g(that)h(a)f(frame)227 4381 y(around)29
-b(a)g(graph)f(describ)r(es)h(the)h(co)r(ordinate)e(space)h(in)h(whic)n
-(h)f(data)g(are)g(plotted.)43 b(Consequen)n(tly)-7 b(,)29
-b(a)g(F)-7 b(rame)227 4481 y(has)34 b(a)f(Title)i(\(string\))f
-(attribute,)i(whic)n(h)e(describ)r(es)f(the)h(co)r(ordinate)f(space,)i
-(and)f(con)n(tains)f(axes)g(whic)n(h)h(in)227 4581 y(turn)26
-b(hold)g(information)f(suc)n(h)h(as)f(Lab)r(el)g(and)h(Units)h(strings)
-d(whic)n(h)i(are)f(used)h(for)f(lab)r(elling)h(\(e.g.\))36
-b(graphical)227 4680 y(output.)i(In)27 b(general,)g(ho)n(w)n(ev)n(er,)e
-(the)j(n)n(um)n(b)r(er)g(of)f(axes)g(is)g(not)h(restricted)f(to)g(t)n
-(w)n(o.)227 4808 y(F)-7 b(unctions)24 b(are)f(a)n(v)-5
-b(ailable)23 b(for)g(con)n(v)n(erting)f(F)-7 b(rame)24
-b(co)r(ordinate)e(v)-5 b(alues)24 b(in)n(to)g(a)f(form)h(suitable)f
-(for)h(displa)n(y)-7 b(,)24 b(and)227 4908 y(also)j(for)g(calculating)g
-(distances)g(and)g(o\013sets)g(b)r(et)n(w)n(een)h(p)r(ositions)f
-(within)h(the)g(F)-7 b(rame.)227 5036 y(F)g(rames)27
-b(ma)n(y)g(also)f(con)n(tain)h(kno)n(wledge)g(of)g(ho)n(w)g(to)h
-(transform)e(to)i(and)f(from)g(related)g(co)r(ordinate)g(systems.)0
-5193 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_FRAME\()c
-(NAXES,)j(OPTIONS,)e(STATUS)h(\))0 5350 y Fc(Argumen)m(ts:)259
-5494 y(NAXES)32 b(=)g(INTEGER)f(\(Giv)m(en\))427 5593
-y Fk(The)c(n)n(um)n(b)r(er)f(of)h(F)-7 b(rame)26 b(axes)g(\(i.e.)37
-b(the)27 b(n)n(um)n(b)r(er)f(of)h(dimensions)f(of)g(the)h(co)r
-(ordinate)f(space)g(whic)n(h)g(the)427 5693 y(F)-7 b(rame)27
-b(describ)r(es\).)p eop end
-%%Page: 227 237
-TeXDict begin 227 236 bop 3643 52 a FG(227)259 351 y
-Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 451 y Fk(A)g(c)n(haracter)e(string)h
-(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 551 y(b)r(e)25 b(used)f(for)f
-(initialising)h(the)g(new)h(F)-7 b(rame.)35 b(The)24
-b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)g(that)g(for)g(the)g(AST)p
-Ft(_)p Fk(SET)427 650 y(routine.)37 b(If)28 b(no)f(initialisation)g(is)
-h(required,)e(a)i(blank)f(v)-5 b(alue)27 b(ma)n(y)g(b)r(e)h(supplied.)
-259 788 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 888 y Fk(The)c(global)e(status.)0 1060
-y Fc(Returned)32 b(V)-8 b(alue:)259 1206 y(AST)p Ft(_)p
-Fc(FRAME)31 b(=)h(INTEGER)427 1306 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g
-(new)g(F)-7 b(rame.)0 1478 y Fc(Examples:)227 1625 y
-Fy(FRAME)47 b(=)g(AST)p Ft(_)p Fy(FRAME\()e(2,)i('Title=Energy)d
-(Spectrum',)h(STATUS)h(\);)427 1724 y Fk(Creates)31 b(a)g(new)h
-(2-dimensional)e(F)-7 b(rame)31 b(and)h(initialises)f(its)h(Title)g
-(attribute)g(to)g(the)g(string)f Ft(")p Fk(Energy)427
-1824 y(Sp)r(ectrum)p Ft(")p Fk(.)227 1962 y Fy(FRAME)47
-b(=)g(AST)p Ft(_)p Fy(FRAME\()e(2,)i('Label\(1\)=Energy,)c
-(Label\(2\)=Response',)g(STATUS)j(\);)427 2061 y Fk(Creates)26
-b(a)g(new)h(2-dimensional)e(F)-7 b(rame)26 b(and)g(initialises)h(its)f
-(axis)g(Lab)r(el)h(attributes)f(to)h(suitable)f(string)427
-2161 y(v)-5 b(alues.)0 2333 y Fc(Notes:)340 2625 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 2725
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 2934 3780 12 v 0 3065
-a FA(AST)p Fe(_)p FA(FRAMESET)318 b Fd(Create)37 b(a)i(F)-10
-b(rameSet)319 b FA(AST)p Fe(_)p FA(FRAMESET)0 3252 y
-Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g(F)-7
-b(rameSet)28 b(and)f(optionally)g(initialises)g(its)h(attributes.)227
-3381 y(A)23 b(F)-7 b(rameSet)23 b(consists)e(of)i(a)f(set)h(of)f(one)h
-(or)e(more)h(F)-7 b(rames)22 b(\(whic)n(h)h(describ)r(e)f(co)r
-(ordinate)f(systems\),)j(connected)227 3481 y(together)j(b)n(y)g
-(Mappings)f(\(whic)n(h)i(describ)r(e)e(ho)n(w)h(the)h(co)r(ordinate)e
-(systems)g(are)h(in)n(ter-related\).)35 b(A)28 b(F)-7
-b(rameSet)227 3581 y(mak)n(es)28 b(it)i(p)r(ossible)e(to)h(obtain)g(a)f
-(Mapping)h(b)r(et)n(w)n(een)g(an)n(y)f(pair)g(of)h(these)g(F)-7
-b(rames)28 b(\(i.e.)41 b(to)29 b(con)n(v)n(ert)f(b)r(et)n(w)n(een)227
-3680 y(an)n(y)e(of)g(the)g(co)r(ordinate)f(systems)h(whic)n(h)g(it)g
-(describ)r(es\).)36 b(The)26 b(individual)h(F)-7 b(rames)25
-b(are)g(iden)n(ti\014ed)h(within)h(the)227 3780 y(F)-7
-b(rameSet)34 b(b)n(y)g(an)f(in)n(teger)g(index,)j(with)e(F)-7
-b(rames)34 b(b)r(eing)g(n)n(um)n(b)r(ered)f(consecutiv)n(ely)g(from)h
-(one)f(as)g(they)i(are)227 3880 y(added)28 b(to)f(the)h(F)-7
-b(rameSet.)227 4009 y(Ev)n(ery)29 b(F)-7 b(rameSet)30
-b(has)f(a)h Ft(")p Fk(base)p Ft(")e Fk(F)-7 b(rame)30
-b(and)g(a)g Ft(")p Fk(curren)n(t)p Ft(")e Fk(F)-7 b(rame)30
-b(\(whic)n(h)g(are)f(allo)n(w)n(ed)g(to)h(b)r(e)g(the)h(same\).)227
-4109 y(An)n(y)k(of)g(the)g(F)-7 b(rames)35 b(ma)n(y)f(b)r(e)h
-(nominated)g(to)g(hold)f(these)h(p)r(ositions,)i(and)e(the)g(c)n(hoice)
-f(is)h(determined)g(b)n(y)227 4208 y(the)d(v)-5 b(alues)31
-b(of)h(the)g(F)-7 b(rameSet's)31 b(Base)f(and)i(Curren)n(t)e
-(attributes,)j(whic)n(h)e(hold)h(the)f(indices)h(of)f(the)h(relev)-5
-b(an)n(t)227 4308 y(F)e(rames.)35 b(By)25 b(default,)h(the)f(\014rst)f
-(F)-7 b(rame)25 b(added)f(to)h(a)f(F)-7 b(rameSet)25
-b(is)f(its)h(base)f(F)-7 b(rame,)25 b(and)g(the)g(last)f(one)h(added)
-227 4408 y(is)j(its)g(curren)n(t)e(F)-7 b(rame.)227 4537
-y(The)36 b(base)f(F)-7 b(rame)35 b(describ)r(es)h(the)g
-Ft(")p Fk(nativ)n(e)p Ft(")e Fk(co)r(ordinate)h(system)g(of)h(whatev)n
-(er)f(the)h(F)-7 b(rameSet)35 b(is)h(used)g(to)227 4637
-y(calibrate)27 b(\(e.g.)36 b(the)28 b(pixel)f(co)r(ordinates)f(of)i(an)
-f(image\))g(and)g(the)h(curren)n(t)e(F)-7 b(rame)27 b(describ)r(es)g
-(the)h Ft(")p Fk(apparen)n(t)p Ft(")227 4736 y Fk(co)r(ordinate)21
-b(system)g(in)h(whic)n(h)g(it)g(should)f(b)r(e)h(view)n(ed)g(\(e.g.)34
-b(displa)n(y)n(ed,)22 b(etc.\).)36 b(An)n(y)21 b(further)h(F)-7
-b(rames)21 b(represen)n(t)227 4836 y(a)27 b(library)g(of)g(alternativ)n
-(e)g(co)r(ordinate)f(systems,)h(whic)n(h)h(ma)n(y)f(b)r(e)h(selected)f
-(b)n(y)g(making)g(them)h(curren)n(t.)227 4966 y(When)34
-b(a)e(F)-7 b(rameSet)33 b(is)g(used)g(in)g(a)f(con)n(text)h(that)g
-(requires)f(a)g(F)-7 b(rame,)34 b(\(e.g.)53 b(obtaining)32
-b(its)h(Title)g(v)-5 b(alue,)34 b(or)227 5065 y(n)n(um)n(b)r(er)h(of)g
-(axes\),)h(the)g(curren)n(t)e(F)-7 b(rame)34 b(is)h(used.)59
-b(A)35 b(F)-7 b(rameSet)35 b(ma)n(y)f(therefore)g(b)r(e)i(used)f(in)g
-(place)f(of)h(its)227 5165 y(curren)n(t)27 b(F)-7 b(rame)27
-b(in)h(most)f(situations.)227 5295 y(When)38 b(a)g(F)-7
-b(rameSet)37 b(is)g(used)h(in)g(a)f(con)n(text)g(that)h(requires)e(a)h
-(Mapping,)j(the)e(Mapping)f(used)h(is)f(the)h(one)227
-5394 y(b)r(et)n(w)n(een)25 b(its)h(base)e(F)-7 b(rame)25
-b(and)g(its)h(curren)n(t)e(F)-7 b(rame.)35 b(Th)n(us,)26
-b(a)f(F)-7 b(rameSet)25 b(ma)n(y)f(b)r(e)i(used)f(to)g(con)n(v)n(ert)f
-Ft(")p Fk(nativ)n(e)p Ft(")227 5494 y Fk(co)r(ordinates)35
-b(in)n(to)h Ft(")p Fk(apparen)n(t)p Ft(")f Fk(ones,)i(and)g(vice)f(v)n
-(ersa.)61 b(Lik)n(e)36 b(an)n(y)f(Mapping,)j(a)e(F)-7
-b(rameSet)36 b(ma)n(y)g(also)f(b)r(e)227 5593 y(in)n(v)n(erted)e(\(see)
-g(AST)p Ft(_)p Fk(INVER)-7 b(T\),)34 b(whic)n(h)f(has)g(the)h(e\013ect)
-g(of)f(in)n(terc)n(hanging)e(its)j(base)f(and)g(curren)n(t)f(F)-7
-b(rames)227 5693 y(and)28 b(hence)f(of)h(rev)n(ersing)d(the)j(Mapping)g
-(b)r(et)n(w)n(een)f(them.)p eop end
-%%Page: 228 238
-TeXDict begin 228 237 bop 0 52 a FG(228)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 351 y Fk(Regions)i(ma)n(y)f(b)
-r(e)i(added)f(in)n(to)h(a)f(F)-7 b(rameSet)33 b(\(since)g(a)g(Region)g
-(is)g(a)g(t)n(yp)r(e)h(of)f(F)-7 b(rame\),)35 b(either)e(explicitly)g
-(or)227 451 y(as)e(comp)r(onen)n(ts)g(within)h(CmpF)-7
-b(rames.)48 b(In)31 b(this)h(case)e(the)i(Mapping)f(b)r(et)n(w)n(een)g
-(a)g(pair)g(of)g(F)-7 b(rames)31 b(within)h(a)227 551
-y(F)-7 b(rameSet)35 b(will)g(include)g(the)h(e\013ects)f(of)g(the)g
-(clipping)g(pro)r(duced)g(b)n(y)f(an)n(y)h(Regions)f(included)h(in)g
-(the)g(path)227 650 y(b)r(et)n(w)n(een)28 b(the)g(F)-7
-b(rames.)0 799 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_FRAMESET\()38 b(FRAME,)j(OPTIONS,)g(STATUS)g(\))0
-947 y Fc(Argumen)m(ts:)259 1083 y(FRAME)31 b(=)h(INTEGER)g(\(Giv)m
-(en\))427 1183 y Fk(P)n(oin)n(ter)27 b(to)h(the)g(\014rst)g(F)-7
-b(rame)28 b(to)g(b)r(e)g(inserted)g(in)n(to)g(the)g(F)-7
-b(rameSet.)39 b(This)28 b(initially)g(b)r(ecomes)g(b)r(oth)g(the)427
-1282 y(base)j(and)h(the)g(curren)n(t)f(F)-7 b(rame.)48
-b(\(F)-7 b(urther)32 b(F)-7 b(rames)31 b(ma)n(y)f(b)r(e)j(added)e
-(using)g(the)h(AST)p Ft(_)p Fk(ADDFRAME)427 1382 y(routine.\))259
-1514 y Fc(OPTIONS)g(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 1614 y Fk(A)22 b(c)n(haracter)e
-(string)h(con)n(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g
-(attribute)g(assignmen)n(ts)f(to)g(b)r(e)427 1713 y(used)j(for)f
-(initialising)g(the)h(new)g(F)-7 b(rameSet.)35 b(The)24
-b(syn)n(tax)f(used)g(is)h(iden)n(tical)f(to)h(that)g(for)f(the)h(AST)p
-Ft(_)p Fk(SET)427 1813 y(routine.)37 b(If)28 b(no)f(initialisation)g
-(is)h(required,)e(a)i(blank)f(v)-5 b(alue)27 b(ma)n(y)g(b)r(e)h
-(supplied.)259 1945 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)
-h(and)g(Returned\))427 2045 y Fk(The)c(global)e(status.)0
-2206 y Fc(Returned)32 b(V)-8 b(alue:)259 2341 y(AST)p
-Ft(_)p Fc(FRAMESET)427 2441 y Fk(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)
-g(F)-7 b(rameSet.)0 2602 y Fc(Notes:)340 2884 y Fj(\017)45
-b Fk(If)20 b(a)f(p)r(oin)n(ter)g(to)h(an)f(existing)g(F)-7
-b(rameSet)19 b(is)g(giv)n(en)g(for)g(the)h(FRAME)f(argumen)n(t,)i(then)
-e(the)h(new)g(F)-7 b(rameSet)427 2984 y(will)28 b(\(as)f(a)g(sp)r
-(ecial)g(case\))g(b)r(e)h(initialised)f(to)g(con)n(tain)g(the)h(same)f
-(F)-7 b(rames)26 b(and)h(Mappings,)g(and)h(to)f(ha)n(v)n(e)427
-3083 y(the)h(same)f(attribute)g(v)-5 b(alues,)27 b(as)g(the)g(one)g
-(supplied.)37 b(This)27 b(pro)r(cess)f(is)i(similar)e(to)h(making)g(a)f
-(cop)n(y)h(of)g(a)427 3183 y(F)-7 b(rameSet)26 b(\(see)f(AST)p
-Ft(_)p Fk(COPY\),)g(except)h(that)g(the)g(F)-7 b(rames)24
-b(and)i(Mappings)f(con)n(tained)f(in)i(the)g(original)427
-3282 y(are)h(not)g(themselv)n(es)h(copied,)f(but)h(are)f(shared)f(b)n
-(y)i(b)r(oth)g(F)-7 b(rameSets.)340 3414 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 3514
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 3712 3780 12 v 0 3843
-a FA(AST)p Fe(_)p FA(GENCUR)-15 b(VE)294 b Fd(Dra)m(w)38
-b(a)h(generalized)1753 3943 y(curv)m(e)2673 3843 y FA(AST)p
-Fe(_)p FA(GENCUR)-15 b(VE)0 4107 y Fc(Description:)44
-b Fk(This)31 b(routine)g(dra)n(ws)f(a)g(general)g(user-de\014ned)g
-(curv)n(e)h(de\014ned)g(b)n(y)g(the)g(supplied)h(Mapping.)47
-b(Note)227 4207 y(that)25 b(the)g(curv)n(e)f(is)g(transformed)g(in)n
-(to)g(graphical)f(co)r(ordinate)h(space)g(for)g(plotting,)h(so)f(that)h
-(a)f(straigh)n(t)f(line)i(in)227 4306 y(ph)n(ysical)f(co)r(ordinates)f
-(ma)n(y)g(result)h(in)h(a)f(curv)n(ed)g(line)g(b)r(eing)h(dra)n(wn)e
-(if)i(the)g(Mapping)f(in)n(v)n(olv)n(ed)f(is)h(non-linear.)227
-4406 y(An)n(y)j(discon)n(tin)n(uities)f(in)h(the)f(Mapping)h(b)r(et)n
-(w)n(een)f(ph)n(ysical)g(and)g(graphical)f(co)r(ordinates)g(are)g
-(catered)h(for,)g(as)227 4506 y(is)i(an)n(y)f(clipping)g(established)g
-(using)h(AST)p Ft(_)p Fk(CLIP)-7 b(.)227 4630 y(If)35
-b(y)n(ou)f(need)h(to)f(dra)n(w)g(simple)h(straigh)n(t)e(lines)i(\(geo)r
-(desics\),)g(AST)p Ft(_)p Fk(CUR)-9 b(VE)35 b(or)f(AST)p
-Ft(_)p Fk(POL)-7 b(YCUR)e(VE)33 b(will)227 4729 y(usually)27
-b(b)r(e)h(easier)f(to)g(use)h(and)f(faster.)0 4878 y
-Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_GENCURVE\()c(THIS,)j
-(MAP)i(\))0 5027 y Fc(Argumen)m(ts:)259 5162 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 5262 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(Plot.)259 5394 y Fc(MAP)k(=)g(INTEGER)f(\(Giv)m(en\))427
-5494 y Fk(P)n(oin)n(ter)21 b(to)h(a)g(Mapping.)35 b(This)22
-b(Mapping)g(should)g(ha)n(v)n(e)f(1)h(input)i(co)r(ordinate)d(represen)
-n(ting)g(o\013set)h(along)427 5593 y(the)31 b(required)d(curv)n(e,)i
-(normalized)f(so)g(that)h(the)g(start)g(of)f(the)i(curv)n(e)e(is)g(at)h
-(o\013set)g(0.0,)g(and)f(the)i(end)f(of)427 5693 y(the)j(curv)n(e)f(is)
-g(at)h(o\013set)g(1.0.)51 b(Note,)34 b(this)f(o\013set)f(do)r(es)h(not)
-f(need)h(to)g(b)r(e)g(linearly)e(related)h(to)h(distance)p
-eop end
-%%Page: 229 239
-TeXDict begin 229 238 bop 3643 52 a FG(229)427 351 y
-Fk(along)29 b(the)h(curv)n(e.)42 b(The)30 b(n)n(um)n(b)r(er)f(of)h
-(output)g(co)r(ordinates)f(should)g(equal)g(the)h(n)n(um)n(b)r(er)g(of)
-f(axes)g(in)h(the)427 451 y(curren)n(t)e(F)-7 b(rame)28
-b(of)h(the)g(Plot.)39 b(The)29 b(Mapping)f(should)g(map)h(a)f(sp)r
-(eci\014ed)h(o\013set)f(along)g(the)h(curv)n(e,)f(in)n(to)427
-551 y(the)h(corresp)r(onding)e(co)r(ordinates)g(in)i(the)h(curren)n(t)d
-(F)-7 b(rame)29 b(of)f(the)h(Plot.)40 b(The)29 b(in)n(v)n(erse)e
-(transformation)427 650 y(need)h(not)g(b)r(e)g(de\014ned.)259
-785 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 885 y Fk(The)c(global)e(status.)0 1051
-y Fc(Notes:)340 1337 y Fj(\017)45 b Fk(An)28 b(error)e(results)h(if)h
-(the)g(base)f(F)-7 b(rame)27 b(of)h(the)g(Plot)f(is)g(not)h
-(2-dimensional.)340 1472 y Fj(\017)45 b Fk(An)30 b(error)d(also)g
-(results)i(if)g(the)g(transformation)f(b)r(et)n(w)n(een)h(the)g(curren)
-n(t)f(and)h(base)f(F)-7 b(rames)28 b(of)h(the)g(Plot)427
-1572 y(is)f(not)f(de\014ned)h(\(i.e.)38 b(the)28 b(Plot's)e(T)-7
-b(ranIn)n(v)n(erse)26 b(attribute)h(is)h(zero\).)p 0
-1775 3780 12 v 0 1906 a FA(AST)p Fe(_)p FA(GET)p Fb(<)p
-FA(X)p Fb(>)1145 1907 y Fd(Get)38 b(an)h(attribute)d(v)-7
-b(alue)38 b(for)g(an)1716 2007 y(Ob)7 b(ject)2877 1906
-y FA(AST)p Fe(_)p FA(GET)p Fb(<)p FA(X)p Fb(>)0 2200
-y Fc(Description:)44 b Fk(This)29 b(is)f(a)g(family)g(of)h(functions)f
-(whic)n(h)h(return)f(a)f(sp)r(eci\014ed)i(attribute)g(v)-5
-b(alue)28 b(for)g(an)g(Ob)5 b(ject)28 b(using)227 2299
-y(one)c(of)h(sev)n(eral)e(di\013eren)n(t)h(data)g(t)n(yp)r(es.)36
-b(The)25 b(t)n(yp)r(e)f(is)h(selected)f(b)n(y)g(replacing)g
-Fm(<)p Fk(X)p Fm(>)g Fk(in)h(the)f(function)i(name)e(b)n(y)227
-2399 y(C,)j(D,)g(I,)g(L)f(or)g(R,)h(to)f(obtain)g(a)h(result)f(in)h
-(Character,)e(Double)h(precision,)g(In)n(teger,)g(Logical)f(or)h(Real)g
-(format,)227 2499 y(resp)r(ectiv)n(ely)-7 b(.)227 2625
-y(If)30 b(p)r(ossible,)f(the)h(attribute)g(v)-5 b(alue)29
-b(is)g(con)n(v)n(erted)f(to)h(the)g(t)n(yp)r(e)h(y)n(ou)e(request.)42
-b(If)29 b(con)n(v)n(ersion)e(is)j(not)f(p)r(ossible,)227
-2725 y(an)f(error)d(will)j(result.)0 2879 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_GET)p Fm(<)p Ft(X)p Fm(>)p Ft(\()c(THIS,)j
-(ATTRIB,)e(STATUS)h(\))0 3032 y Fc(Argumen)m(ts:)259
-3173 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 3272
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject.)259 3407
-y Fc(A)-8 b(TTRIB)33 b(=)f(CHARA)m(CTER)f Fj(\003)h Fc(\()g
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 3507 y Fk(A)c(c)n(haracter)e(string)
-h(con)n(taining)f(the)i(name)g(of)f(the)h(attribute)g(whose)f(v)-5
-b(alue)27 b(is)h(required.)259 3642 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 3741
-y Fk(The)c(global)e(status.)0 3908 y Fc(Class)31 b(Applicabilit)m(y:)
-259 4048 y(Ob)5 b(ject)427 4148 y Fk(These)28 b(functions)f(apply)h(to)
-f(all)h(Ob)5 b(jects.)0 4314 y Fc(Returned)32 b(V)-8
-b(alue:)259 4454 y(AST)p Ft(_)p Fc(GET)p Fm(<)p Fc(X)p
-Fm(>)32 b Fc(=)g Fm(<)p Fc(X)p Fm(>)p Fc(t)m(yp)s(e)427
-4554 y Fk(The)c(attribute)g(v)-5 b(alue,)27 b(in)h(the)g(data)f(t)n(yp)
-r(e)h(corresp)r(onding)e(to)h Fm(<)p Fk(X)p Fm(>)p Fk(.)0
-4720 y Fc(Examples:)227 4833 y Fy(WRITE\()46 b Fj(\003)p
-Fy(,)h('\('')g(RefCount)e(=)j('',)f(A10)g(\)')g(\))g(AST)p
-Ft(_)p Fy(GETC\()f(Z,)h('RefCount',)d(STATUS)227 4932
-y(\))427 5006 y Fk(Prin)n(ts)27 b(the)h(RefCoun)n(t)g(attribute)f(v)-5
-b(alue)28 b(for)f(Ob)5 b(ject)27 b(Z)h(as)f(a)g(c)n(haracter)e(string.)
-227 5145 y Fy(NAXES)47 b(=)g(AST)p Ft(_)p Fy(GETI\()e(FRAME,)h
-('Naxes',)g(STATUS)g(\))427 5240 y Fk(Obtains)27 b(the)h(v)-5
-b(alue)28 b(of)f(the)h(Naxes)f(attribute)h(for)f(Ob)5
-b(ject)28 b(FRAME)f(as)g(an)h(in)n(teger.)0 5406 y Fc(Notes:)340
-5693 y Fj(\017)45 b Fk(A)n(ttribute)28 b(names)g(are)e(not)i(case)f
-(sensitiv)n(e)g(and)g(ma)n(y)g(b)r(e)h(surrounded)e(b)n(y)i(white)g
-(space.)p eop end
-%%Page: 230 240
-TeXDict begin 230 239 bop 0 52 a FG(230)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(An)29 b(appropriate)d Ft(")p Fk(n)n(ull)p Ft(")h
-Fk(v)-5 b(alue)28 b(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(ST)-7 b(A)g(TUS)29 b(set)f(to)427
-451 y(an)i(error)d(v)-5 b(alue,)31 b(or)e(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)42 b(This)30 b(n)n(ull)g(v)-5
-b(alue)29 b(is)h(zero)e(for)i(n)n(umeric)f(v)-5 b(alues,)427
-551 y(.F)c(ALSE.)28 b(for)f(logical)f(v)-5 b(alues,)27
-b(and)h(blank)f(for)g(c)n(haracter)f(v)-5 b(alues.)340
-685 y Fj(\017)45 b Fk(Numerical)26 b(attribute)g(v)-5
-b(alues)26 b(of)g(zero)g(translate)f(to)h(logical)f(v)-5
-b(alue)26 b(.F)-9 b(ALSE.)26 b(and)g(all)g(other)f(n)n(umerical)427
-785 y(v)-5 b(alues)27 b(translate)g(to)h(.TR)n(UE..)p
-0 988 3780 12 v 0 1119 a FA(AST)p Fe(_)p FA(GET)-11 b(A)l(CTIVEUNIT)
-1640 1136 y Fd(Determines)1687 1236 y(ho)m(w)37 b(the)1774
-1336 y(Unit)1662 1435 y(attribute)1719 1535 y(will)g(b)s(e)1776
-1635 y(used)2291 1119 y FA(AST)p Fe(_)p FA(GET)-11 b(A)l(CTIVEUNIT)0
-1804 y Fc(Description:)44 b Fk(This)24 b(routine)f(returns)g(the)h
-(curren)n(t)f(v)-5 b(alue)24 b(of)f(the)h(Activ)n(eUnit)h(\015ag)d(for)
-i(a)f(F)-7 b(rame.)35 b(See)23 b(the)h(descrip-)227 1904
-y(tion)k(of)f(the)h(AST)p Ft(_)p Fk(SET)-7 b(A)n(CTIVEUNIT)28
-b(routine)f(for)g(a)g(description)g(of)h(the)g(Activ)n(eUnit)g(\015ag.)
-0 2057 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i
-(AST_GETACTIVEUNI)o(T\()37 b(THIS,)42 b(STATUS)f(\))0
-2211 y Fc(Argumen)m(ts:)259 2351 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 2451 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)259 2586 y Fc(ST)f(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)
-g(Returned\))427 2685 y Fk(The)c(global)e(status.)0 2851
-y Fc(Returned)32 b(V)-8 b(alue:)259 2991 y(AST)p Ft(_)p
-Fc(GET)g(A)m(CTIVEUNIT)34 b(=)e(LOGICAL)427 3091 y Fk(The)c(curren)n(t)
-f(v)-5 b(alue)27 b(of)h(the)g(Activ)n(eUnit)g(\015ag.)0
-3257 y Fc(Notes:)340 3543 y Fj(\017)45 b Fk(A)28 b(v)-5
-b(alue)28 b(of)f(.F)-9 b(ALSE.)28 b(will)g(b)r(e)g(returned)f(if)h
-(this)g(function)g(is)f(in)n(v)n(ok)n(ed)g(with)h(ST)-7
-b(A)g(TUS)28 b(set)g(to)f(an)h(error)427 3643 y(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 3846 V 0 3977 a FA(AST)p Fe(_)p FA(GETFITS)p Fb(<)p
-FA(X)p Fb(>)1558 3978 y Fd(Get)38 b(a)h(named)1389 4078
-y(k)m(eyw)m(ord)e(v)-7 b(alue)38 b(from)1604 4192 y(a)h(FitsChan)2574
-3977 y FA(AST)p Fe(_)p FA(GETFITS)p Fb(<)p FA(X)p Fb(>)0
-4362 y Fc(Description:)44 b Fk(This)21 b(is)f(a)g(family)g(of)g
-(functions)h(whic)n(h)f(gets)g(a)g(v)-5 b(alue)20 b(for)g(a)g(named)g
-(k)n(eyw)n(ord)f(from)h(a)g(FitsChan)g(using)227 4461
-y(one)33 b(of)f(sev)n(eral)f(di\013eren)n(t)i(data)f(t)n(yp)r(es.)53
-b(The)32 b(data)h(t)n(yp)r(e)f(of)h(the)g(returned)g(v)-5
-b(alue)32 b(is)h(selected)f(b)n(y)h(replacing)227 4561
-y Fm(<)p Fk(X)p Fm(>)c Fk(in)h(the)g(function)g(name)f(b)n(y)h(one)f
-(of)g(the)h(follo)n(wing)f(strings)f(represen)n(ting)g(the)i
-(recognised)e(FITS)i(data)227 4661 y(t)n(yp)r(es:)227
-4787 y(The)f(data)e(t)n(yp)r(e)i(of)f(the)h(returned)f(v)-5
-b(alue)28 b(is)g(selected)g(b)n(y)g(replacing)g Fm(<)p
-Fk(X)p Fm(>)f Fk(in)i(the)g(function)g(name)f(b)n(y)g(one)g(of)227
-4887 y(the)g(follo)n(wing)f(strings)f(represen)n(ting)h(the)h
-(recognised)d(FITS)j(data)g(t)n(yp)r(es:)340 5154 y Fj(\017)45
-b Fk(CF)28 b(-)f(Complex)h(\015oating)e(p)r(oin)n(t)i(v)-5
-b(alues.)340 5289 y Fj(\017)45 b Fk(CI)28 b(-)f(Complex)g(in)n(teger)g
-(v)-5 b(alues.)340 5423 y Fj(\017)45 b Fk(F)28 b(-)f(Floating)g(p)r
-(oin)n(t)h(v)-5 b(alues.)340 5558 y Fj(\017)45 b Fk(I)28
-b(-)f(In)n(teger)g(v)-5 b(alues.)340 5693 y Fj(\017)45
-b Fk(L)28 b(-)f(Logical)f(\(i.e.)38 b(b)r(o)r(olean\))27
-b(v)-5 b(alues.)p eop end
-%%Page: 231 241
-TeXDict begin 231 240 bop 3643 52 a FG(231)340 351 y
-Fj(\017)45 b Fk(S)28 b(-)f(String)h(v)-5 b(alues.)340
-486 y Fj(\017)45 b Fk(CN)32 b(-)g(A)g Ft(")p Fk(CONTINUE)p
-Ft(")e Fk(v)-5 b(alue,)33 b(these)e(are)g(treated)g(lik)n(e)g(string)g
-(v)-5 b(alues,)33 b(but)f(are)f(enco)r(ded)g(without)427
-586 y(an)d(equals)e(sign.)227 752 y(The)i(data)f(t)n(yp)r(e)h(of)f(the)
-h Ft(")p Fk(v)-5 b(alue)p Ft(")27 b Fk(argumen)n(t)g(dep)r(ends)h(on)f
-Fm(<)p Fk(X)p Fm(>)g Fk(as)g(follo)n(ws:)340 1020 y Fj(\017)45
-b Fk(CF)32 b(-)e(DOUBLE)h(PRECISION\(2\))f(\(a)h(2)g(elemen)n(t)g(arra)
-n(y)e(to)i(hold)g(the)h(real)e(and)h(imaginary)e(parts)i(of)427
-1120 y(the)d(complex)f(v)-5 b(alue\).)340 1255 y Fj(\017)45
-b Fk(CI)32 b(-)g(INTEGER\(2\))g(\(a)f(2)h(elemen)n(t)g(arra)n(y)e(to)h
-(hold)h(the)g(real)f(and)h(imaginary)f(parts)g(of)h(the)g(complex)427
-1355 y(v)-5 b(alue\).)340 1490 y Fj(\017)45 b Fk(F)28
-b(-)f(DOUBLE)h(PRECISION.)340 1625 y Fj(\017)45 b Fk(I)28
-b(-)f(INTEGER)340 1760 y Fj(\017)45 b Fk(L)28 b(-)f(LOGICAL)340
-1895 y Fj(\017)45 b Fk(S)28 b(-)f(CHARA)n(CTER)340 2030
-y Fj(\017)45 b Fk(CN)28 b(-)g(CHARA)n(CTER)0 2197 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(RESULT)41 b(=)i(AST_GETFITS)p Fm(<)p
-Ft(X)p Fm(>)p Ft(\()37 b(THIS,)42 b(NAME,)f(VALUE,)h(STATUS)f(\))0
-2351 y Fc(Argumen)m(ts:)259 2492 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 2591 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259
-2726 y Fc(NAME)j(=)h(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 2826 y Fk(A)25 b(c)n(haracter)d
-(string)i(con)n(taining)g(the)g(FITS)h(k)n(eyw)n(ord)e(name.)35
-b(This)25 b(ma)n(y)e(b)r(e)i(a)f(complete)h(FITS)f(header)427
-2926 y(card,)k(in)g(whic)n(h)g(case)f(the)h(k)n(eyw)n(ord)e(to)i(use)g
-(is)g(extracted)f(from)g(it.)39 b(No)28 b(more)f(than)h(80)f(c)n
-(haracters)f(are)427 3025 y(read)h(from)g(this)h(string.)259
-3160 y Fc(V)-11 b(ALUE)33 b(=)f Fm(<)p Fc(X)p Fm(>)p
-Fc(t)m(yp)s(e)g(\(Giv)m(en\))427 3260 y Fk(A)c(bu\013er)g(to)f(receiv)n
-(e)g(the)h(k)n(eyw)n(ord)d(v)-5 b(alue.)37 b(The)28 b(data)f(t)n(yp)r
-(e)h(dep)r(ends)g(on)f Fm(<)p Fk(X)p Fm(>)g Fk(as)g(describ)r(ed)h(ab)r
-(o)n(v)n(e.)259 3395 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m
-(en)h(and)g(Returned\))427 3495 y Fk(The)c(global)e(status.)0
-3661 y Fc(Returned)32 b(V)-8 b(alue:)259 3802 y(AST)p
-Ft(_)p Fc(GETFITS)p Fm(<)p Fc(X)p Fm(>)32 b Fc(=)h(LOGICAL)427
-3902 y Fk(.F)-9 b(ALSE.)35 b(is)g(returned)f(if)h(the)h(k)n(eyw)n(ord)d
-(w)n(as)g(not)i(found)g(in)g(the)h(FitsChan)f(\(no)f(error)f(is)i(rep)r
-(orted\).)427 4002 y(Otherwise,)27 b(a)g(v)-5 b(alue)28
-b(of)f(.TR)n(UE.)h(is)f(returned.)0 4168 y Fc(Notes:)340
-4455 y Fj(\017)45 b Fk(The)27 b(card)e(follo)n(wing)h(the)h(curren)n(t)
-e(card)h(is)g(c)n(hec)n(k)n(ed)f(\014rst.)37 b(If)27
-b(this)f(is)h(not)f(the)h(required)e(card,)h(then)h(the)427
-4555 y(rest)21 b(of)h(the)g(FitsChan)g(is)f(searc)n(hed,)h(starting)e
-(with)j(the)f(\014rst)f(card)g(added)g(to)h(the)g(FitsChan.)35
-b(Therefore)427 4654 y(cards)24 b(should)g(b)r(e)h(accessed)e(in)i(the)
-g(order)e(they)i(are)f(stored)f(in)i(the)g(FitsChan)g(\(if)g(p)r
-(ossible\))g(as)f(this)g(will)427 4754 y(minimise)k(the)g(time)g(sp)r
-(en)n(t)g(searc)n(hing)e(for)h(cards.)340 4889 y Fj(\017)45
-b Fk(If)28 b(the)f(requested)f(card)g(is)h(found,)h(it)f(b)r(ecomes)g
-(the)g(curren)n(t)f(card,)g(otherwise)h(the)g(curren)n(t)f(card)g(is)h
-(left)427 4989 y(p)r(oin)n(ting)h(at)f(the)h Ft(")p Fk(end-of-\014le)p
-Ft(")p Fk(.)340 5124 y Fj(\017)45 b Fk(If)34 b(the)f(stored)f(k)n(eyw)n
-(ord)f(v)-5 b(alue)33 b(is)f(not)h(of)g(the)g(requested)f(t)n(yp)r(e,)j
-(it)e(is)g(con)n(v)n(erted)e(in)n(to)i(the)g(requested)427
-5224 y(t)n(yp)r(e.)340 5359 y Fj(\017)45 b Fk(If)33 b(the)f(k)n(eyw)n
-(ord)f(is)h(found)g(in)g(the)h(FitsChan,)g(but)g(has)f(no)f(asso)r
-(ciated)g(v)-5 b(alue,)33 b(an)f(error)e(is)i(rep)r(orted.)427
-5458 y(If)i(necessary)-7 b(,)34 b(the)g(AST)p Ft(_)p
-Fk(TESTFITS)f(function)h(can)f(b)r(e)h(used)f(to)h(determine)f(if)h
-(the)g(k)n(eyw)n(ord)e(has)h(a)427 5558 y(de\014ned)28
-b(v)-5 b(alue)28 b(in)g(the)g(FitsChan)f(prior)g(to)g(calling)g(this)h
-(function.)340 5693 y Fj(\017)45 b Fk(An)28 b(error)e(will)i(b)r(e)g
-(rep)r(orted)f(if)h(the)g(k)n(eyw)n(ord)d(name)j(do)r(es)f(not)h
-(conform)e(to)i(FITS)g(requiremen)n(ts.)p eop end
-%%Page: 232 242
-TeXDict begin 232 241 bop 0 52 a FG(232)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(.F)-9 b(ALSE.)26 b(is)g(returned)g(as)f(the)i(function)f(v)-5
-b(alue)26 b(if)h(an)f(error)e(has)h(already)g(o)r(ccurred,)g(or)g(if)i
-(this)f(function)427 451 y(should)i(fail)f(for)g(an)n(y)g(reason.)340
-594 y Fj(\017)45 b Fk(The)28 b(FITS)g(standard)f(sa)n(ys)f(that)i
-(string)f(k)n(eyw)n(ord)e(v)-5 b(alues)28 b(should)f(b)r(e)h(padded)g
-(with)g(trailing)e(spaces)h(if)427 694 y(they)21 b(are)e(shorter)h
-(than)g(8)g(c)n(haracters.)33 b(F)-7 b(or)19 b(this)i(reason,)g
-(trailing)e(spaces)h(are)f(remo)n(v)n(ed)g(from)h(the)h(string)427
-793 y(returned)27 b(b)n(y)g(AST)p Ft(_)p Fk(GETFITSS)g(if)g(the)h
-(original)d(string)i(\(including)g(an)n(y)f(trailing)h(spaces\))f(con)n
-(tains)g(8)427 893 y(or)h(few)n(er)g(c)n(haracters.)35
-b(T)-7 b(railing)26 b(spaces)h(are)f(not)i(remo)n(v)n(ed)e(from)h
-(longer)f(strings.)p 0 1113 3780 12 v 0 1243 a FA(AST)p
-Fe(_)p FA(GETFRAME)1340 1244 y Fd(Obtain)38 b(a)g(p)s(oin)m(ter)g(to)g
-(a)1377 1359 y(sp)s(eci\014ed)h(F)-10 b(rame)38 b(in)g(a)1648
-1472 y(F)-10 b(rameSet)2658 1243 y FA(AST)p Fe(_)p FA(GETFRAME)0
-1658 y Fc(Description:)44 b Fk(This)28 b(function)g(returns)f(a)g(p)r
-(oin)n(ter)g(to)h(a)f(sp)r(eci\014ed)h(F)-7 b(rame)27
-b(in)h(a)f(F)-7 b(rameSet.)0 1828 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_GETFRAME\()38 b(THIS,)k(IFRAME,)e(STATUS)i(\))
-0 1998 y Fc(Argumen)m(ts:)259 2155 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 2254 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rameSet.)259 2397 y Fc(IFRAME)31 b(=)h(INTEGER)g(\(Giv)m(en\))427
-2497 y Fk(The)j(index)g(of)f(the)h(required)f(F)-7 b(rame)34
-b(within)h(the)g(F)-7 b(rameSet.)58 b(This)35 b(v)-5
-b(alue)34 b(should)g(lie)h(in)g(the)g(range)427 2597
-y(from)28 b(1)f(to)g(the)h(n)n(um)n(b)r(er)g(of)f(F)-7
-b(rames)27 b(in)h(the)g(F)-7 b(rameSet)27 b(\(as)g(giv)n(en)g(b)n(y)g
-(its)h(Nframe)g(attribute\).)259 2740 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 2839
-y Fk(The)c(global)e(status.)0 3022 y Fc(Returned)32 b(V)-8
-b(alue:)259 3178 y(AST)p Ft(_)p Fc(GETFRAME)32 b(=)g(INTEGER)427
-3278 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(requested)f(F)-7
-b(rame.)0 3460 y Fc(Notes:)340 3763 y Fj(\017)45 b Fk(A)32
-b(v)-5 b(alue)31 b(of)g(AST)p Ft(__)p Fk(BASE)f(or)g(AST)p
-Ft(__)p Fk(CURRENT)h(ma)n(y)g(b)r(e)g(giv)n(en)f(for)h(the)g(IFRAME)h
-(argumen)n(t)e(to)427 3863 y(sp)r(ecify)e(the)g(base)f(F)-7
-b(rame)27 b(or)g(the)h(curren)n(t)f(F)-7 b(rame)27 b(resp)r(ectiv)n
-(ely)-7 b(.)340 4006 y Fj(\017)45 b Fk(This)28 b(function)g(incremen)n
-(ts)f(the)h(RefCoun)n(t)g(attribute)g(of)f(the)h(selected)g(F)-7
-b(rame)27 b(b)n(y)g(one.)340 4149 y Fj(\017)45 b Fk(A)21
-b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 4249
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 4468 V 0 4599 a FA(AST)p
-Fe(_)p FA(GETGRF)l(CONTEXT)1738 4617 y Fd(Return)1808
-4716 y(the)1738 4816 y(KeyMap)1782 4930 y(that)1812 5030
-y(de-)1738 5130 y(scrib)s(es)1860 5229 y(a)1742 5329
-y(Plot's)1738 5429 y(graph-)1824 5539 y(ics)1782 5639
-y(con-)1787 5739 y(text)2194 4599 y FA(AST)p Fe(_)p FA(GETGRF)l
-(CONTEXT)p eop end
-%%Page: 233 243
-TeXDict begin 233 242 bop 3643 52 a FG(233)0 351 y Fc(Description:)44
-b Fk(This)25 b(routine)g(returns)f(a)h(reference)f(to)g(a)h(KeyMap)f
-(that)h(will)g(b)r(e)h(passed)e(to)h(an)n(y)f(dra)n(wing)f(routines)227
-451 y(registered)k(using)g(AST)p Ft(_)p Fk(GRFSET.)i(This)e(KeyMap)h
-(can)f(b)r(e)i(used)e(b)n(y)h(an)g(application)f(to)h(pass)f
-(information)227 551 y(to)35 b(the)h(dra)n(wing)e(routines)g(ab)r(out)i
-(the)f(con)n(text)g(in)h(whic)n(h)f(they)g(are)f(b)r(eing)i(called.)59
-b(The)35 b(con)n(ten)n(ts)g(of)g(the)227 650 y(KeyMap)27
-b(are)g(nev)n(er)f(accessed)h(b)n(yt)g(the)h(Plot)f(class)g(itself.)0
-798 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i
-(AST_GETGRFCONTEX)o(T\()37 b(THIS,)42 b(STATUS)f(\))0
-946 y Fc(Argumen)m(ts:)259 1081 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))
-427 1180 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259
-1312 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 1411 y Fk(The)c(global)e(status.)0 1572
-y Fc(Returned)32 b(V)-8 b(alue:)259 1706 y(AST)p Ft(_)p
-Fc(GETGRF)m(CONTEXT)33 b(=)f(INTEGER)427 1806 y Fk(A)f(p)r(oin)n(ter)f
-(to)h(the)g(graphics)e(con)n(text)h(KeyMap.)45 b(The)31
-b(returned)f(p)r(oin)n(ter)h(should)f(b)r(e)h(ann)n(ulled)f(when)427
-1906 y(it)e(is)g(no)f(longer)f(needed.)p 0 2102 3780
-12 v 0 2233 a FA(AST)p Fe(_)p FA(GETLINE)1103 2234 y
-Fd(Obtain)38 b(text)f(to)i(b)s(e)g(written)e(b)m(y)h(a)1355
-2348 y(Channel)f(sink)i(routine)2836 2233 y FA(AST)p
-Fe(_)p FA(GETLINE)0 2511 y Fc(Description:)44 b Fk(This)33
-b(routine)f(should)g(only)g(b)r(e)h(used)f(when)g(implemen)n(ting)h(a)f
-(routine)g(whic)n(h)g(will)h(b)r(e)g(passed)e(as)227
-2610 y(the)c(SINK)f(argumen)n(t)g(to)g(AST)p Ft(_)p Fk(CHANNEL.)h(It)f
-(should)g(b)r(e)h(used)f(to)g(obtain)g(\(from)h(the)f(AST)h(library\))e
-(eac)n(h)227 2710 y(line)30 b(of)f(text)h(whic)n(h)f(is)g(to)g(b)r(e)h
-(written)f(to)h(the)f(external)g(data)f(sink.)42 b(One)29
-b(suc)n(h)g(line)h(should)f(b)r(e)g(obtained)g(in)227
-2810 y(this)f(w)n(a)n(y)f(for)g(eac)n(h)f(in)n(v)n(o)r(cation)h(of)g
-(the)h(sink)g(routine.)0 2957 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_GETLINE\()c(LINE,)k(L,)h(STATUS)e(\))0
-3105 y Fc(Argumen)m(ts:)259 3240 y(LINE)32 b(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Returned\))427
-3340 y Fk(The)f(line)g(of)g(text)g(to)g(b)r(e)g(written.)47
-b(Dep)r(ending)32 b(on)e(the)i(length)f(of)f(c)n(haracter)f(v)-5
-b(ariable)30 b(supplied,)i(the)427 3439 y(returned)c(text)g(ma)n(y)f(b)
-r(e)h(truncated)g(if)g(necessary)-7 b(.)36 b(Note,)28
-b(ho)n(w)n(ev)n(er,)e(that)i(it)g(will)g(not)g(b)r(e)g(padded)g(with)
-427 3539 y(blanks)f(in)h(order)e(to)i(\014ll)g(this)g(v)-5
-b(ariable.)259 3670 y Fc(L)32 b(=)g(INTEGER)g(\(Returned\))427
-3770 y Fk(The)j(n)n(um)n(b)r(er)g(of)g(c)n(haracters)d(returned,)37
-b(whic)n(h)e(ma)n(y)f(b)r(e)h(zero.)58 b(Note)35 b(that)g(c)n
-(haracters)e(b)r(ey)n(ond)h(the)427 3870 y(L'th)28 b(c)n(haracter)e(in)
-i(the)g(LINE)f(v)-5 b(ariable)27 b(are)f(not)i(mo)r(di\014ed)g(and)f
-(ma)n(y)g(therefore)g(con)n(tain)g(junk.)259 4001 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-4100 y Fk(The)c(global)e(status.)0 4261 y Fc(Notes:)340
-4542 y Fj(\017)45 b Fk(This)28 b(routine)f(is)h(only)f(a)n(v)-5
-b(ailable)26 b(in)i(the)g(F)-7 b(ortran)26 b(in)n(terface)h(to)h(the)g
-(AST)g(library)-7 b(.)p 0 4738 V 0 4869 a FA(AST)p Fe(_)p
-FA(GETMAPPING)1662 4870 y Fd(Obtain)38 b(a)1537 4969
-y(Mapping)g(that)1454 5084 y(con)m(v)m(erts)f(b)s(et)m(w)m(een)1479
-5183 y(t)m(w)m(o)g(F)-10 b(rames)39 b(in)f(a)1648 5283
-y(F)-10 b(rameSet)2487 4869 y FA(AST)p Fe(_)p FA(GETMAPPING)0
-5445 y Fc(Description:)44 b Fk(This)31 b(function)h(returns)e(a)h(p)r
-(oin)n(ter)f(to)h(a)g(Mapping)g(that)g(will)g(con)n(v)n(ert)f(co)r
-(ordinates)f(b)r(et)n(w)n(een)i(the)227 5545 y(co)r(ordinate)c(systems)
-g(represen)n(ted)f(b)n(y)i(t)n(w)n(o)e(F)-7 b(rames)27
-b(in)h(a)f(F)-7 b(rameSet.)0 5693 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_GETMAPPING\()37 b(THIS,)42 b(IFRAME1,)e
-(IFRAME2,)g(STATUS)i(\))p eop end
-%%Page: 234 244
-TeXDict begin 234 243 bop 0 52 a FG(234)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(Argumen)m(ts:)259
-481 y(THIS)h(=)g(INTEGER)g(\(Giv)m(en\))427 580 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rameSet.)259 706 y Fc(IFRAME1)31
-b(=)h(INTEGER)f(\(Giv)m(en\))427 806 y Fk(The)g(index)g(of)g(the)h
-(\014rst)e(F)-7 b(rame)31 b(in)g(the)g(F)-7 b(rameSet.)47
-b(This)31 b(F)-7 b(rame)30 b(describ)r(es)h(the)g(co)r(ordinate)f
-(system)427 906 y(for)d(the)h Ft(")p Fk(input)p Ft(")g
-Fk(end)g(of)f(the)h(Mapping.)259 1031 y Fc(IFRAME2)j(=)h(INTEGER)f
-(\(Giv)m(en\))427 1131 y Fk(The)25 b(index)f(of)h(the)f(second)g(F)-7
-b(rame)24 b(in)h(the)f(F)-7 b(rameSet.)36 b(This)24 b(F)-7
-b(rame)24 b(describ)r(es)g(the)h(co)r(ordinate)e(system)427
-1231 y(for)k(the)h Ft(")p Fk(output)p Ft(")g Fk(end)f(of)h(the)g
-(Mapping.)259 1357 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h
-(and)g(Returned\))427 1456 y Fk(The)c(global)e(status.)0
-1611 y Fc(Returned)32 b(V)-8 b(alue:)259 1741 y(AST)p
-Ft(_)p Fc(GETMAPPING)33 b(=)f(INTEGER)427 1840 y Fk(P)n(oin)n(ter)e(to)
-h(a)f(Mapping)h(whose)g(forw)n(ard)e(transformation)g(con)n(v)n(erts)h
-(co)r(ordinates)f(from)i(the)h(\014rst)e(co-)427 1940
-y(ordinate)25 b(system)h(to)f(the)h(second)f(one,)h(and)g(whose)f(in)n
-(v)n(erse)f(transformation)g(con)n(v)n(erts)g(co)r(ordinates)g(in)427
-2040 y(the)k(opp)r(osite)f(direction.)0 2194 y Fc(Notes:)340
-2470 y Fj(\017)45 b Fk(The)23 b(returned)g(Mapping)f(will)h(include)h
-(the)f(clipping)g(e\013ect)g(of)g(an)n(y)f(Regions)g(whic)n(h)h(o)r
-(ccur)g(on)f(the)h(path)427 2570 y(b)r(et)n(w)n(een)28
-b(the)g(t)n(w)n(o)f(supplied)h(F)-7 b(rames)26 b(\(this)j(includes)e
-(the)h(t)n(w)n(o)f(supplied)h(F)-7 b(rames)27 b(themselv)n(es\).)340
-2696 y Fj(\017)45 b Fk(The)32 b(v)-5 b(alues)31 b(giv)n(en)g(for)g(the)
-g(IFRAME1)h(and)f(IFRAME2)g(argumen)n(ts)f(should)i(lie)f(in)h(the)g
-(range)e(from)427 2795 y(1)i(to)f(the)h(n)n(um)n(b)r(er)g(of)g(F)-7
-b(rames)31 b(in)h(the)g(F)-7 b(rameSet)32 b(\(as)f(giv)n(en)g(b)n(y)g
-(its)h(Nframe)g(attribute\).)50 b(A)32 b(v)-5 b(alue)32
-b(of)427 2895 y(AST)p Ft(__)p Fk(BASE)25 b(or)g(AST)p
-Ft(__)p Fk(CURRENT)g(ma)n(y)g(also)g(b)r(e)h(giv)n(en)e(to)i(iden)n
-(tify)g(the)g(F)-7 b(rameSet's)25 b(base)g(F)-7 b(rame)427
-2994 y(or)31 b(curren)n(t)g(F)-7 b(rame)31 b(resp)r(ectiv)n(ely)-7
-b(.)49 b(It)32 b(is)g(p)r(ermissible)f(for)g(b)r(oth)i(these)e(argumen)
-n(ts)g(to)g(ha)n(v)n(e)g(the)h(same)427 3094 y(v)-5 b(alue,)28
-b(in)g(whic)n(h)f(case)g(a)g(unit)h(Mapping)g(\(UnitMap\))g(is)g
-(returned.)340 3220 y Fj(\017)45 b Fk(It)36 b(should)f(alw)n(a)n(ys)e
-(b)r(e)j(p)r(ossible)e(to)h(generate)f(the)i(Mapping)f(requested,)h
-(but)g(this)f(do)r(es)g(necessarily)427 3320 y(guaran)n(tee)d(that)j
-(it)f(will)g(b)r(e)g(able)g(to)g(p)r(erform)f(the)i(required)e(co)r
-(ordinate)f(con)n(v)n(ersion.)54 b(If)34 b(necessary)-7
-b(,)427 3419 y(the)26 b(T)-7 b(ranF)g(orw)n(ard)22 b(and)j(T)-7
-b(ranIn)n(v)n(erse)23 b(attributes)h(of)h(the)h(returned)e(Mapping)h
-(should)g(b)r(e)g(insp)r(ected)h(to)427 3519 y(determine)i(if)g(the)g
-(required)f(transformation)f(is)h(a)n(v)-5 b(ailable.)340
-3645 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e
-(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 3744 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 3930 3780 12 v 0 4060 a FA(AST)p Fe(_)p FA(GETREFPOS)1364
-4061 y Fd(Return)38 b(the)h(reference)1333 4161 y(p)s(osition)e(in)i(a)
-f(sp)s(eci\014ed)1400 4276 y(celestial)f(co)s(ordinate)1715
-4375 y(system)2620 4060 y FA(AST)p Fe(_)p FA(GETREFPOS)0
-4555 y Fc(Description:)44 b Fk(This)34 b(routine)e(returns)h(the)g
-(reference)g(p)r(osition)g(\(sp)r(eci\014ed)h(b)n(y)e(attributes)i
-(RefRA)g(and)f(RefDec\))227 4654 y(con)n(v)n(erted)h(to)g(the)i
-(celestial)e(co)r(ordinate)g(system)g(represen)n(ted)g(b)n(y)h(a)f
-(supplied)h(SkyF)-7 b(rame.)58 b(The)35 b(celestial)227
-4754 y(longitude)28 b(and)f(latitude)h(v)-5 b(alues)27
-b(are)g(returned)g(in)h(radians.)0 4897 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_GETREFPOS\()37 b(THIS,)42 b(FRM,)g(LON,)g(LAT,)g
-(STATUS)f(\))0 5039 y Fc(Argumen)m(ts:)259 5169 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 5268 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(Sp)r(ecF)-7 b(rame.)259 5394 y Fc(FRM)31
-b(=)h(INTEGER)g(\(Giv)m(en\))427 5494 y Fk(P)n(oin)n(ter)17
-b(to)h(the)h(SkyF)-7 b(rame)18 b(whic)n(h)g(de\014nes)g(the)h(required)
-e(celestial)h(co)r(ordinate)g(system.)33 b(If)19 b(AST)p
-Ft(__)p Fk(NULL)427 5593 y(is)31 b(supplied,)h(then)g(the)f(longitude)g
-(and)g(latitude)g(v)-5 b(alues)31 b(are)f(returned)h(as)f(FK5)g(J2000)f
-(RA)i(and)g(Dec)427 5693 y(v)-5 b(alues.)p eop end
-%%Page: 235 245
-TeXDict begin 235 244 bop 3643 52 a FG(235)259 351 y
-Fc(LON)32 b(=)g(DOUBLE)g(PRECISION)f(\(Returned\))427
-451 y Fk(The)i(longitude)g(of)f(the)h(reference)f(p)r(oin)n(t,)i(in)f
-(the)g(co)r(ordinate)f(system)g(represen)n(ted)g(b)n(y)g(the)h
-(supplied)427 551 y(SkyF)-7 b(rame)27 b(\(radians\).)259
-678 y Fc(LA)-8 b(T)33 b(=)f(DOUBLE)g(PRECISION)g(\(Returned\))427
-778 y Fk(The)37 b(latitude)h(of)e(the)i(reference)e(p)r(oin)n(t,)j(in)e
-(the)g(co)r(ordinate)f(system)h(represen)n(ted)e(b)n(y)i(the)g
-(supplied)427 878 y(SkyF)-7 b(rame)27 b(\(radians\).)259
-1005 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 1105 y Fk(The)c(global)e(status.)0 1262
-y Fc(Notes:)340 1539 y Fj(\017)45 b Fk(V)-7 b(alues)35
-b(of)g(AST)p Ft(__)p Fk(BAD)g(will)h(b)r(e)f(returned)g(if)g(this)h
-(function)g(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)36
-b(set)f(to)g(an)427 1639 y(error)26 b(v)-5 b(alue,)27
-b(or)g(if)h(it)g(should)g(fail)f(for)g(an)n(y)g(reason.)p
-0 1828 3780 12 v 0 1959 a FA(AST)p Fe(_)p FA(GETREGIONBOUNDS)1902
-1976 y Fd(Returns)1902 2076 y(the)1902 2176 y(b)s(ound-)1902
-2275 y(ing)1902 2390 y(b)s(o)m(x)1902 2489 y(of)1902
-2589 y(Re-)1902 2689 y(gion)2052 1959 y FA(AST)p Fe(_)p
-FA(GETREGIONBOUNDS)0 2867 y Fc(Description:)44 b Fk(This)39
-b(routine)f(returns)g(the)h(upp)r(er)f(and)h(lo)n(w)n(er)e(limits)i(of)
-f(a)g(b)r(o)n(x)h(whic)n(h)f(just)h(encompasses)e(the)227
-2967 y(supplied)j(Region.)72 b(The)40 b(limits)f(are)g(returned)g(as)g
-(axis)g(v)-5 b(alues)39 b(within)h(the)g(F)-7 b(rame)39
-b(represen)n(ted)f(b)n(y)h(the)227 3067 y(Region.)g(The)29
-b(v)-5 b(alue)29 b(of)f(the)h(Negated)f(attribute)h(is)g(ignored)e
-(\(i.e.)40 b(it)29 b(is)g(assumed)f(that)h(the)g(Region)f(has)g(not)227
-3166 y(b)r(een)g(negated\).)0 3311 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_GETREGIONBO)o(UND)o(S\()37 b(THIS,)42
-b(LBND,)f(UBND,)h(STATUS)f(\))0 3455 y Fc(Argumen)m(ts:)259
-3586 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 3686
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259 3814 y
-Fc(LBND\(\))k(=)h(DOUBLE)f(PRECISION)f(\(Returned\))427
-3913 y Fk(An)e(arra)n(y)c(in)j(whic)n(h)g(to)g(return)g(the)g(lo)n(w)n
-(er)e(axis)i(b)r(ounds)g(co)n(v)n(ered)e(b)n(y)h(the)i(Region.)37
-b(It)28 b(should)g(ha)n(v)n(e)f(at)427 4013 y(least)33
-b(as)g(man)n(y)g(elemen)n(ts)h(as)f(there)g(are)g(axes)f(in)i(the)g
-(Region.)54 b(If)34 b(an)f(axis)g(has)g(no)g(lo)n(w)n(er)f(limit,)k
-(the)427 4113 y(returned)27 b(v)-5 b(alue)28 b(will)g(b)r(e)g(the)g
-(largest)e(p)r(ossible)h(negativ)n(e)g(v)-5 b(alue.)259
-4240 y Fc(UBND\(\))32 b(=)h(DOUBLE)f(PRECISION)f(\(Returned\))427
-4340 y Fk(An)i(arra)n(y)d(in)j(whic)n(h)f(to)h(return)f(the)h(upp)r(er)
-f(axis)g(b)r(ounds)g(co)n(v)n(ered)f(b)n(y)h(the)h(Region.)51
-b(It)33 b(should)f(ha)n(v)n(e)427 4440 y(at)c(least)f(as)g(man)n(y)g
-(elemen)n(ts)g(as)g(there)g(are)g(axes)f(in)i(the)g(Region.)36
-b(If)28 b(an)f(axis)g(has)g(no)g(upp)r(er)h(limit,)g(the)427
-4539 y(returned)f(v)-5 b(alue)28 b(will)g(b)r(e)g(the)g(largest)e(p)r
-(ossible)h(p)r(ositiv)n(e)g(v)-5 b(alue.)259 4667 y Fc(ST)d(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 4767
-y Fk(The)c(global)e(status.)0 4923 y Fc(Notes:)340 5201
-y Fj(\017)45 b Fk(The)24 b(v)-5 b(alue)23 b(of)h(the)g(Negated)f
-(attribute)h(is)g(ignored)e(\(i.e.)36 b(it)24 b(is)g(assumed)f(that)h
-(the)g(Region)e(has)i(not)f(b)r(een)427 5300 y(negated\).)340
-5428 y Fj(\017)45 b Fk(If)25 b(an)e(axis)h(has)f(no)h(exten)n(t)g(on)g
-(an)f(axis)h(then)g(the)g(lo)n(w)n(er)f(limit)i(will)f(b)r(e)g
-(returned)g(larger)e(than)i(the)g(upp)r(er)427 5528 y(limit.)39
-b(Note,)28 b(this)g(is)g(di\013eren)n(t)g(to)g(an)g(axis)f(whic)n(h)h
-(has)g(a)f(constan)n(t)g(v)-5 b(alue)28 b(\(in)h(whic)n(h)f(case)f(b)r
-(oth)h(lo)n(w)n(er)427 5628 y(and)g(upp)r(er)f(limit)i(will)f(b)r(e)g
-(returned)f(set)g(to)h(the)g(constan)n(t)f(v)-5 b(alue\).)p
-eop end
-%%Page: 236 246
-TeXDict begin 236 245 bop 0 52 a FG(236)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(GETREGIONFRAME)1824 500
-y Fd(Obtain)1860 599 y(a)1824 699 y(p)s(oin)m(ter)1838
-798 y(to)1824 898 y(the)1824 998 y(en-)1824 1097 y(cap-)1824
-1197 y(su-)1824 1297 y(lated)1824 1396 y(F)-10 b(rame)1824
-1496 y(within)1860 1595 y(a)1824 1695 y(Re-)1824 1795
-y(gion)2108 482 y FA(AST)p Fe(_)p FA(GETREGIONFRAME)0
-1976 y Fc(Description:)44 b Fk(This)28 b(function)g(returns)f(a)g(p)r
-(oin)n(ter)g(to)h(the)g(F)-7 b(rame)27 b(represen)n(ted)f(b)n(y)i(a)f
-(Region.)0 2121 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_GETREGIONFRA)o(ME\()37 b(THIS,)k(STATUS)g(\))0
-2267 y Fc(Argumen)m(ts:)259 2399 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 2499 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259
-2627 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 2727 y Fk(The)c(global)e(status.)0 2885
-y Fc(Returned)32 b(V)-8 b(alue:)259 3017 y(AST)p Ft(_)p
-Fc(GETREGIONFRAME)31 b(=)h(INTEGER)427 3117 y Fk(A)37
-b(p)r(oin)n(ter)f(to)h(a)f(deep)g(cop)n(y)g(of)g(the)h(F)-7
-b(rame)36 b(represen)n(ted)g(b)n(y)g(the)h(Region.)63
-b(Using)36 b(this)h(p)r(oin)n(ter)f(to)427 3217 y(mo)r(dify)31
-b(the)f(F)-7 b(rame)29 b(will)h(ha)n(v)n(e)f(no)h(e\013ect)g(on)g(the)g
-(Region.)43 b(T)-7 b(o)30 b(mo)r(dify)g(the)g(Region,)g(use)g(the)g
-(Region)427 3316 y(p)r(oin)n(ter)d(directly)-7 b(.)0
-3474 y Fc(Notes:)340 3753 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 3852 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 4044 V 0 4174 a FA(AST)p Fe(_)p FA(GETREGIONPOINTS)1838
-4192 y Fd(Returns)1838 4292 y(the)1838 4391 y(p)s(o-)1838
-4502 y(si-)1838 4602 y(tions)1838 4701 y(that)1838 4801
-y(de-)1838 4901 y(\014ne)1838 5000 y(the)1838 5100 y(giv)m(en)1838
-5213 y(Re-)1838 5313 y(gion)2094 4174 y FA(AST)p Fe(_)p
-FA(GETREGIONPOINTS)0 5494 y Fc(Description:)44 b Fk(This)32
-b(routine)g(returns)f(the)h(axis)f(v)-5 b(alues)31 b(at)h(the)g(p)r
-(oin)n(ts)g(that)g(de\014ne)g(the)g(supplied)h(Region.)49
-b(The)227 5593 y(particular)25 b(meaning)h(of)h(these)g(p)r(oin)n(ts)f
-(will)h(dep)r(end)g(on)f(the)h(t)n(yp)r(e)g(of)f(class)g(supplied,)h
-(as)f(listed)h(b)r(elo)n(w)f(under)227 5693 y Ft(")p
-Fk(Applicabilit)n(y:)p Ft(")p Fk(.)p eop end
-%%Page: 237 247
-TeXDict begin 237 246 bop 3643 52 a FG(237)0 351 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(CALL)42 b(AST_GETREGIONPO)o(INT)o(S\()37
-b(THIS,)42 b(MAXPOINT,)d(MAXCOORD,)h(NPOINT,)h(POINTS,)g(STATUS)227
-451 y(\))0 614 y Fc(Argumen)m(ts:)259 764 y(THIS)32 b(=)g(INTEGER)g
-(\(Giv)m(en\))427 863 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259
-1003 y Fc(MAXPOINT)k(=)g(INTEGER)g(\(Giv)m(en\))427 1103
-y Fk(If)i(zero,)h(the)f(n)n(um)n(b)r(er)f(of)h(p)r(oin)n(ts)f(needed)h
-(to)g(de\014ne)g(the)g(Region)f(is)g(returned)g(in)h(NPOINT,)g(but)g
-(no)427 1202 y(axis)26 b(v)-5 b(alues)26 b(are)f(returned)h(and)h(all)f
-(other)g(parameters)e(are)i(ignored.)35 b(If)27 b(not)f(zero,)g(the)h
-(supplied)g(v)-5 b(alue)427 1302 y(should)28 b(b)r(e)g(the)g(length)g
-(of)f(the)h(\014rst)g(dimension)f(of)h(the)g(POINTS)f(arra)n(y)-7
-b(.)35 b(An)28 b(error)e(is)h(rep)r(orted)g(if)h(the)427
-1401 y(n)n(um)n(b)r(er)g(of)f(p)r(oin)n(ts)h(needed)f(to)h(de\014ne)g
-(the)g(Region)f(exceeds)g(this)g(n)n(um)n(b)r(er.)259
-1541 y Fc(MAX)m(COORD)k(=)i(INTEGER)e(\(Giv)m(en\))427
-1641 y Fk(The)25 b(length)f(of)h(the)f(second)g(dimension)g(of)h(the)g
-(POINTS)e(arra)n(y)-7 b(.)34 b(An)25 b(error)d(is)j(rep)r(orted)e(if)i
-(the)g(n)n(um)n(b)r(er)427 1740 y(of)j(axes)e(in)i(the)g(supplied)g
-(Region)f(exceeds)g(this)h(n)n(um)n(b)r(er.)259 1880
-y Fc(NPOINT)k(=)g(INTEGER)f(\(Returned\))427 1979 y Fk(The)d(n)n(um)n
-(b)r(er)f(of)h(p)r(oin)n(ts)f(de\014ning)h(the)g(Region.)259
-2119 y Fc(POINTS\()k(MAXPOINT,)g(MAX)m(COORD)f(\))h(=)h(DOUBLE)f
-(PRECISION)f(\(Returned\))427 2219 y Fk(An)h(arra)n(y)c(in)j(whic)n(h)g
-(to)f(return)h(the)g(co)r(ordinates)e(v)-5 b(alues)31
-b(at)f(the)i(p)r(ositions)e(that)h(de\014ne)g(the)g(Region.)427
-2318 y(These)23 b(are)f(stored)g(suc)n(h)g(that)h(the)g(v)-5
-b(alue)23 b(of)g(co)r(ordinate)e(n)n(um)n(b)r(er)i(COORD)f(for)h(p)r
-(oin)n(t)g(n)n(um)n(b)r(er)f(POINT)427 2418 y(is)28 b(found)g(in)g
-(elemen)n(t)f(POINTS\(POINT,COORD\).)259 2557 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-2657 y Fk(The)c(global)e(status.)0 2832 y Fc(Class)31
-b(Applicabilit)m(y:)259 2982 y(Region)427 3082 y Fk(All)d(Regions)f(ha)
-n(v)n(e)f(this)i(attribute.)259 3222 y Fc(Bo)m(x)427
-3321 y Fk(The)g(\014rst)f(returned)g(p)r(osition)h(is)f(the)h(Bo)n(x)f
-(cen)n(tre,)g(and)g(the)h(second)f(is)h(a)f(Bo)n(x)f(corner.)259
-3461 y Fc(Circle)427 3560 y Fk(The)c(\014rst)f(returned)g(p)r(osition)g
-(is)g(the)h(Circle)e(cen)n(tre,)i(and)g(the)f(second)g(is)g(a)g(p)r
-(oin)n(t)g(on)g(the)h(circumference.)259 3700 y Fc(CmpRegion)427
-3800 y Fk(Returns)30 b(a)g(v)-5 b(alue)29 b(of)h(zero)f(for)h(NPOINT)f
-(and)h(lea)n(v)n(es)e(the)j(supplied)f(arra)n(y)e(con)n(ten)n(ts)h(unc)
-n(hanged.)43 b(T)-7 b(o)427 3899 y(\014nd)25 b(the)f(p)r(oin)n(ts)g
-(de\014ning)f(a)h(CmpRegion,)g(use)g(this)g(metho)r(d)g(on)g(the)g
-(comp)r(onen)n(t)g(Regions,)f(whic)n(h)h(can)427 3999
-y(b)r(e)k(accessed)f(b)n(y)g(in)n(v)n(oking)f(AST)p Ft(_)p
-Fk(DECOMPOSE)g(on)h(the)h(CmpRegion.)259 4138 y Fc(Ellipse)427
-4238 y Fk(The)h(\014rst)g(returned)f(p)r(osition)h(is)g(the)g(Ellipse)g
-(cen)n(tre.)40 b(The)29 b(second)f(is)h(the)g(end)g(of)g(one)g(of)f
-(the)i(axes)e(of)427 4338 y(the)k(ellipse.)48 b(The)31
-b(third)g(is)g(some)g(other)g(p)r(oin)n(t)g(on)g(the)h(circumference)e
-(of)h(the)h(ellipse,)g(distinct)g(from)427 4437 y(the)c(second)f(p)r
-(oin)n(t.)259 4577 y Fc(In)m(terv)-5 b(al)427 4677 y
-Fk(The)30 b(\014rst)g(p)r(oin)n(t)g(corresp)r(onds)e(to)i(the)g(lo)n(w)
-n(er)f(b)r(ounds)h(p)r(osition,)g(and)g(the)g(second)f(p)r(oin)n(t)i
-(corresp)r(onds)427 4776 y(to)k(the)f(upp)r(er)h(b)r(ounds)f(p)r
-(osition.)57 b(These)34 b(are)g(rev)n(ersed)e(to)j(indicate)f(an)g
-(extcluded)h(in)n(terv)-5 b(al)34 b(rather)427 4876 y(than)28
-b(an)f(included)h(in)n(terv)-5 b(al.)37 b(See)27 b(the)h(In)n(terv)-5
-b(al)27 b(constructor)f(for)h(more)g(information.)259
-5015 y Fc(NullRegion)427 5115 y Fk(Returns)h(a)f(v)-5
-b(alue)27 b(of)h(zero)e(for)i(NPOINT)f(and)g(lea)n(v)n(es)f(the)i
-(supplied)g(arra)n(y)d(con)n(ten)n(ts)i(unc)n(hanged.)259
-5255 y Fc(P)m(oin)m(tList)427 5354 y Fk(The)h(p)r(ositions)f(returned)g
-(are)g(those)g(that)h(w)n(ere)f(supplied)h(when)f(the)h(P)n(oin)n
-(tList)f(w)n(as)f(constructed.)259 5494 y Fc(P)m(olygon)427
-5593 y Fk(The)36 b(p)r(ositions)f(returned)g(are)f(the)i(v)n(ertex)f(p)
-r(ositions)g(that)g(w)n(ere)g(supplied)h(when)f(the)h(P)n(olygon)e(w)n
-(as)427 5693 y(constructed.)p eop end
-%%Page: 238 248
-TeXDict begin 238 247 bop 0 52 a FG(238)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(Prism)427
-451 y Fk(Returns)f(a)g(v)-5 b(alue)29 b(of)h(zero)f(for)h(NPOINT)f(and)
-h(lea)n(v)n(es)e(the)j(supplied)f(arra)n(y)e(con)n(ten)n(ts)h(unc)n
-(hanged.)43 b(T)-7 b(o)427 551 y(\014nd)31 b(the)g(p)r(oin)n(ts)g
-(de\014ning)g(a)f(Prism,)g(use)h(this)g(metho)r(d)g(on)f(the)h(comp)r
-(onen)n(t)g(Regions,)f(whic)n(h)h(can)f(b)r(e)427 650
-y(accessed)d(b)n(y)g(in)n(v)n(oking)f(AST)p Ft(_)p Fk(DECOMPOSE)g(on)h
-(the)h(CmpRegion.)0 818 y Fc(Notes:)340 1107 y Fj(\017)45
-b Fk(If)21 b(the)h(co)r(ordinate)d(system)i(represen)n(ted)e(b)n(y)h
-(the)i(Region)e(has)g(b)r(een)h(c)n(hanged)f(since)g(it)h(w)n(as)f
-(\014rst)g(created,)427 1206 y(the)h(returned)f(axis)f(v)-5
-b(alues)20 b(refer)g(to)g(the)g(new)h(\(c)n(hanged\))e(co)r(ordinate)g
-(system,)j(rather)d(than)i(the)f(original)427 1306 y(co)r(ordinate)27
-b(system.)37 b(Note)28 b(ho)n(w)n(ev)n(er)e(that)i(if)g(the)g
-(transformation)f(from)g(original)f(to)i(new)g(co)r(ordinate)427
-1405 y(system)j(is)f(non-linear,)g(the)h(shap)r(e)f(within)i(the)f(new)
-f(co)r(ordinate)g(system)g(ma)n(y)g(b)r(e)h(distorted,)g(and)f(so)427
-1505 y(ma)n(y)d(not)h(matc)n(h)f(that)h(implied)g(b)n(y)g(the)f(name)h
-(of)f(the)h(Region)f(sub)r(class)g(\(Circle,)h(Bo)n(x,)e(etc\).)p
-0 1710 3780 12 v 0 1841 a FA(AST)p Fe(_)p FA(GETSTCCOORD)321
-b Fd(Return)1592 1940 y(information)1661 2040 y(ab)s(out)37
-b(an)1567 2140 y(AstroCo)s(ords)1693 2239 y(elemen)m(t)1584
-2339 y(stored)h(in)g(an)1808 2438 y(Stc)2393 1841 y FA(AST)p
-Fe(_)p FA(GETSTCCOORD)0 2610 y Fc(Description:)44 b Fk(When)29
-b(an)n(y)d(sub-class)h(of)g(Stc)h(is)g(created,)f(the)h(constructor)e
-(function)i(allo)n(ws)f(one)g(or)g(more)g(Astro-)227
-2710 y(Co)r(ords)j(elemen)n(ts)g(to)h(b)r(e)g(stored)e(within)j(the)f
-(Stc.)46 b(This)31 b(function)g(allo)n(ws)e(an)n(y)h(one)g(of)h(these)g
-(AstroCo)r(ords)227 2809 y(elemen)n(ts)37 b(to)h(b)r(e)f(retriev)n(ed.)
-65 b(The)37 b(format)g(of)g(the)h(returned)f(information)g(is)g(the)h
-(same)e(as)h(that)g(used)h(to)227 2909 y(pass)e(the)h(original)e
-(information)h(to)g(the)h(Stc)g(constructor.)62 b(That)36
-b(is,)j(the)e(information)f(is)g(returned)g(in)h(a)227
-3009 y(KeyMap)29 b(structure)g(con)n(taining)g(elemen)n(ts)g(with)i
-(one)e(or)g(more)g(of)g(the)h(k)n(eys)f(giv)n(en)g(b)n(y)g(sym)n(b)r
-(olic)h(constan)n(ts)227 3108 y(AST)p Ft(__)p Fk(STCNAME,)40
-b(AST)p Ft(__)p Fk(STCV)-9 b(ALUE,)40 b(AST)p Ft(__)p
-Fk(STCERR)n(OR,)e(AST)p Ft(__)p Fk(STCRES,)i(AST)p Ft(__)p
-Fk(STCSIZE)227 3208 y(and)28 b(AST)p Ft(__)p Fk(STCPIXSZ.)227
-3335 y(If)23 b(the)g(co)r(ordinate)f(system)g(represen)n(ted)g(b)n(y)g
-(the)h(Stc)g(has)f(b)r(een)h(c)n(hanged)f(since)g(it)h(w)n(as)f
-(created)f(\(for)i(instance,)227 3435 y(b)n(y)h(c)n(hanging)f(its)i
-(System)g(attribute\),)g(then)g(the)g(sizes)f(and)g(p)r(ositions)g(in)h
-(the)g(returned)f(KeyMap)f(will)i(re\015ect)227 3535
-y(the)j(c)n(hange)f(in)h(co)r(ordinate)e(system.)0 3690
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_GETSTCCOORD\()37
-b(THIS,)42 b(ICOORD,)e(STATUS)h(\))0 3845 y Fc(Argumen)m(ts:)259
-3988 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 4088
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Stc.)259 4223 y Fc(ICOORD)j(=)h
-(INTEGER)g(\(Giv)m(en\))427 4323 y Fk(The)j(index)g(of)g(the)g(AstroCo)
-r(ords)e(elemen)n(t)j(required.)57 b(The)35 b(\014rst)g(has)f(index)i
-(one.)58 b(The)35 b(n)n(um)n(b)r(er)g(of)427 4423 y(AstroCo)r(ords)26
-b(elemen)n(ts)h(in)h(the)g(Stc)g(can)f(b)r(e)h(found)g(using)g
-(function)g(AST)p Ft(_)p Fk(GETSTCNCOORD.)259 4558 y
-Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-4658 y Fk(The)c(global)e(status.)0 4826 y Fc(Returned)32
-b(V)-8 b(alue:)259 4968 y(AST)p Ft(_)p Fc(GETSTCCOORD)32
-b(=)g(INTEGER)427 5068 y Fk(A)c(p)r(oin)n(ter)f(to)h(a)f(new)h(KeyMap)e
-(con)n(taining)h(the)h(required)f(information.)0 5236
-y Fc(Notes:)340 5524 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 5624 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-eop end
-%%Page: 239 249
-TeXDict begin 239 248 bop 3643 52 a FG(239)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(GETSTCNCOORD)216 b Fd(Return)1808
-581 y(the)1696 681 y(n)m(um)m(b)s(er)1662 780 y(of)38
-b(Astro-)1709 880 y(Co)s(ords)1670 980 y(elemen)m(ts)1665
-1079 y(stored)g(in)1727 1179 y(an)h(Stc)2288 482 y FA(AST)p
-Fe(_)p FA(GETSTCNCOORD)0 1313 y Fc(Description:)44 b
-Fk(This)28 b(function)g(returns)f(the)h(n)n(um)n(b)r(er)f(of)h(AstroCo)
-r(ords)e(elemen)n(ts)h(stored)g(in)h(an)f(Stc.)0 1447
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_GETSTCNCOORD)o
-(\()38 b(THIS,)j(STATUS)g(\))0 1581 y Fc(Argumen)m(ts:)259
-1702 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 1801
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Stc.)259 1918 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-2018 y Fk(The)c(global)e(status.)0 2164 y Fc(Returned)32
-b(V)-8 b(alue:)259 2285 y(AST)p Ft(_)p Fc(GETSTCNCOORD)32
-b(=)g(INTEGER)427 2385 y Fk(The)c(n)n(um)n(b)r(er)f(of)h(AstroCo)r
-(ords)e(elemen)n(ts)h(stored)g(in)h(the)g(Stc.)0 2531
-y Fc(Notes:)340 2798 y Fj(\017)45 b Fk(Zero)29 b(will)i(b)r(e)f
-(returned)g(if)h(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)31 b(set)f(to)g(an)g(error)e(v)-5 b(alue,)31
-b(or)f(if)g(it)427 2897 y(should)e(fail)f(for)g(an)n(y)g(reason.)p
-0 3065 V 0 3196 a FA(AST)p Fe(_)p FA(GETSTCREGION)1662
-3197 y Fd(Obtain)38 b(a)1605 3297 y(cop)m(y)g(of)h(the)1668
-3396 y(encapsu-)1763 3511 y(lated)1713 3610 y(Region)1678
-3725 y(within)f(a)1808 3825 y(Stc)2345 3196 y FA(AST)p
-Fe(_)p FA(GETSTCREGION)0 3959 y Fc(Description:)44 b
-Fk(This)30 b(function)g(returns)f(a)h(p)r(oin)n(ter)f(to)h(a)f(deep)h
-(cop)n(y)f(of)g(the)h(Region)f(supplied)h(when)g(the)h(Stc)f(w)n(as)227
-4059 y(created.)0 4192 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_GETSTCREGION)o(\()38 b(THIS,)j(STATUS)g(\))0
-4326 y Fc(Argumen)m(ts:)259 4447 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 4547 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Stc.)259
-4664 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 4763 y Fk(The)c(global)e(status.)0 4910
-y Fc(Returned)32 b(V)-8 b(alue:)259 5030 y(AST)p Ft(_)p
-Fc(GETSTCREGION)32 b(=)g(INTEGER)427 5130 y Fk(A)c(p)r(oin)n(ter)f(to)h
-(a)f(deep)h(cop)n(y)f(of)g(the)h(Region)f(encapsulated)g(within)h(the)g
-(supplied)g(Stc.)0 5276 y Fc(Notes:)340 5543 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 5643
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p eop end
-%%Page: 240 250
-TeXDict begin 240 249 bop 0 52 a FG(240)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(GETUNC)1083 483 y Fd(Obtain)38
-b(uncertain)m(t)m(y)e(information)1526 598 y(from)i(a)g(Region)2855
-482 y FA(AST)p Fe(_)p FA(GETUNC)0 795 y Fc(Description:)44
-b Fk(This)24 b(function)h(returns)e(a)h(Region)f(whic)n(h)h(represen)n
-(ts)e(the)j(uncertain)n(t)n(y)e(asso)r(ciated)g(with)h(p)r(ositions)227
-894 y(within)30 b(the)f(supplied)g(Region.)39 b(See)29
-b(AST)p Ft(_)p Fk(SETUNC)g(for)f(more)g(information)g(ab)r(out)g
-(Region)g(uncertain)n(ties)227 994 y(and)g(their)f(use.)0
-1152 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_GETUNC\()c
-(THIS,)j(DEF,)g(STATUS)f(\))0 1310 y Fc(Argumen)m(ts:)259
-1455 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 1554
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259 1691 y
-Fc(DEF)k(=)g(LOGICAL)h(\(Giv)m(en\))427 1791 y Fk(Con)n(trols)19
-b(what)h(is)g(returned)g(if)h(no)e(uncertain)n(t)n(y)h(information)f
-(has)h(b)r(een)g(asso)r(ciated)f(explicitly)i(with)f(the)427
-1891 y(supplied)30 b(Region.)40 b(If)29 b(.TR)n(UE.)g(is)g(supplied,)h
-(then)f(the)h(default)f(uncertain)n(t)n(y)f(Region)g(used)h(in)n
-(ternally)427 1990 y(within)20 b(AST)f(is)g(returned)f(\(see)h
-Ft(")p Fk(Applicabilit)n(y)p Ft(")f Fk(b)r(elo)n(w\).)34
-b(If)19 b(.F)-9 b(ALSE.)19 b(is)f(supplied,)j(then)f(AST)p
-Ft(__)p Fk(NULL)427 2090 y(will)28 b(b)r(e)g(returned)f(\(without)i
-(error\).)259 2227 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h
-(and)g(Returned\))427 2327 y Fk(The)c(global)e(status.)0
-2497 y Fc(Class)31 b(Applicabilit)m(y:)259 2642 y(CmpRegion)427
-2741 y Fk(The)f(default)g(uncertain)n(t)n(y)f(for)g(a)h(CmpRegion)f(is)
-g(tak)n(en)h(from)f(one)g(of)h(the)g(t)n(w)n(o)f(comp)r(onen)n(t)g
-(Regions.)427 2841 y(If)35 b(the)f(\014rst)g(comp)r(onen)n(t)f(Region)h
-(has)f(a)g(non-default)h(uncertain)n(t)n(y)-7 b(,)35
-b(then)f(it)h(is)f(used)g(as)f(the)h(default)427 2941
-y(uncertain)n(t)n(y)g(for)g(the)h(paren)n(t)f(CmpRegion.)58
-b(Otherwise,)35 b(if)g(the)h(second)e(comp)r(onen)n(t)g(Region)g(has)g
-(a)427 3040 y(non-default)25 b(uncertain)n(t)n(y)-7 b(,)25
-b(then)g(it)h(is)e(used)h(as)f(the)i(default)f(uncertain)n(t)n(y)f(for)
-h(the)g(paren)n(t)f(CmpRegion.)427 3140 y(If)g(neither)f(of)g(the)g
-(comp)r(onen)n(t)g(Regions)f(has)g(non-default)h(uncertain)n(t)n(y)-7
-b(,)23 b(then)h(the)f(default)g(uncertain)n(t)n(y)427
-3240 y(for)k(the)h(CmpRegion)f(is)h(1.0E-6)d(of)j(the)g(b)r(ounding)g
-(b)r(o)n(x)f(of)g(the)h(CmpRegion.)259 3377 y Fc(Prism)427
-3476 y Fk(The)j(default)g(uncertain)n(t)n(y)f(for)g(a)h(Prism)e(is)i
-(formed)f(b)n(y)h(com)n(bining)f(the)h(uncertain)n(ties)f(from)g(the)h
-(t)n(w)n(o)427 3576 y(comp)r(onen)n(t)24 b(Regions.)35
-b(If)25 b(a)f(comp)r(onen)n(t)g(Region)g(do)r(es)g(not)g(ha)n(v)n(e)f
-(a)h(non-default)g(uncertain)n(t)n(y)-7 b(,)25 b(then)f(its)427
-3676 y(default)k(uncertain)n(t)n(y)f(will)h(b)r(e)g(used)f(to)h(form)f
-(the)h(default)g(uncertain)n(t)n(y)f(of)g(the)h(paren)n(t)f(Prism.)259
-3813 y Fc(Region)427 3912 y Fk(F)-7 b(or)37 b(other)g(classes)f(of)h
-(Region,)i(the)f(default)f(uncertain)n(t)n(y)g(is)g(1.0E-6)e(of)i(the)h
-(b)r(ounding)f(b)r(o)n(x)g(of)g(the)427 4012 y(Region.)f(If)28
-b(the)f(b)r(ounding)h(b)r(o)n(x)e(has)h(zero)f(width)i(on)f(an)n(y)f
-(axis,)g(then)i(the)g(uncertain)n(t)n(y)e(will)h(b)r(e)h(1.0E-6)427
-4111 y(of)g(the)g(axis)f(v)-5 b(alue.)0 4282 y Fc(Returned)32
-b(V)-8 b(alue:)259 4427 y(AST)p Ft(_)p Fc(GETUNC)32 b(=)h(INTEGER)427
-4526 y Fk(A)28 b(p)r(oin)n(ter)f(to)h(a)f(Region)g(describing)g(the)h
-(uncertain)n(t)n(y)e(in)i(the)g(supplied)g(Region.)0
-4697 y Fc(Notes:)340 4988 y Fj(\017)45 b Fk(If)29 b(uncertain)n(t)n(y)f
-(information)g(is)h(asso)r(ciated)e(with)i(a)f(Region,)g(and)h(the)g
-(co)r(ordinate)e(system)i(describ)r(ed)427 5087 y(b)n(y)c(the)g(Region)
-f(is)g(subsequen)n(tly)g(c)n(hanged)g(\(e.g.)36 b(b)n(y)24
-b(c)n(hanging)f(the)i(v)-5 b(alue)25 b(of)f(its)h(System)g(attribute,)g
-(or)427 5187 y(using)30 b(the)h(AST)p Ft(_)p Fk(MAPREGION)f
-(function\),)i(then)f(the)f(uncertain)n(t)n(y)g(information)f(returned)
-h(b)n(y)g(this)427 5287 y(function)25 b(will)f(b)r(e)h(mo)r(di\014ed)f
-(so)g(that)g(it)g(refers)f(to)h(the)h(co)r(ordinate)e(system)h(curren)n
-(tly)f(describ)r(ed)g(b)n(y)h(the)427 5386 y(supplied)k(Region.)340
-5523 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e
-(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 5623 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-eop end
-%%Page: 241 251
-TeXDict begin 241 250 bop 3643 52 a FG(241)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(GRFPOP)1259 483 y Fd(Restore)38
-b(previously)f(sa)m(v)m(ed)1162 598 y(graphics)g(functions)h(used)h(b)m
-(y)g(a)1782 712 y(Plot)2873 482 y FA(AST)p Fe(_)p FA(GRFPOP)0
-863 y Fc(Description:)44 b Fk(The)29 b(AST)p Ft(_)p Fk(GRFPUSH)h(and)f
-(AST)p Ft(_)p Fk(GRFPOP)f(functions)h(are)f(in)n(tended)h(for)f
-(situations)h(where)f(it)227 963 y(is)i(necessary)f(to)h(mak)n(e)g
-(temp)r(orary)f(c)n(hanges)g(to)h(the)g(graphics)f(functions)i(used)f
-(b)n(y)g(the)h(Plot.)44 b(The)30 b(curren)n(t)227 1062
-y(functions)21 b(should)g(\014rst)g(b)r(e)g(sa)n(v)n(ed)e(b)n(y)i
-(calling)f(AST)p Ft(_)p Fk(GRFPUSH.)i(New)f(functions)g(should)f(then)i
-(b)r(e)f(registered)227 1162 y(using)34 b(AST)p Ft(_)p
-Fk(GRFSET.)g(The)g(required)e(graphics)h(should)g(then)i(b)r(e)f(pro)r
-(duced.)55 b(Finally)-7 b(,)36 b(AST)p Ft(_)p Fk(GRFPOP)227
-1261 y(should)28 b(b)r(e)g(called)f(to)g(restore)f(the)i(original)e
-(graphics)h(functions.)0 1404 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_GRFPOP\()d(THIS)j(STATUS)f(\))0 1546
-y Fc(Argumen)m(ts:)259 1675 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427
-1774 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259 1900
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 1999 y Fk(The)c(global)e(status.)0 2154 y Fc(Notes:)340
-2429 y Fj(\017)45 b Fk(This)26 b(routine)g(returns)f(without)i(action)e
-(if)h(there)g(are)f(no)h(snapshots)f(to)h(restore.)35
-b(No)25 b(error)f(is)i(rep)r(orted)427 2529 y(in)i(this)g(case.)p
-0 2713 V 0 2844 a FA(AST)p Fe(_)p FA(GRFPUSH)1239 2845
-y Fd(Sa)m(v)m(e)38 b(the)h(curren)m(t)e(graphics)1266
-2959 y(functions)g(used)j(b)m(y)e(a)h(Plot)2782 2844
-y FA(AST)p Fe(_)p FA(GRFPUSH)0 3133 y Fc(Description:)44
-b Fk(This)22 b(routine)g(tak)n(es)f(a)g(snapshot)h(of)g(the)g(graphics)
-e(functions)j(whic)n(h)f(are)f(curren)n(tly)g(registered)f(with)227
-3233 y(the)k(supplied)g(Plot,)g(and)f(sa)n(v)n(es)e(the)j(snapshot)f
-(on)g(a)g(\014rst-in-last-out)f(stac)n(k)g(within)i(the)g(Plot.)35
-b(The)23 b(snapshot)227 3333 y(can)k(b)r(e)h(restored)f(later)g(using)g
-(function)h(AST)p Ft(_)p Fk(GRFPOP)-7 b(.)227 3454 y(The)29
-b(AST)p Ft(_)p Fk(GRFPUSH)g(and)f(AST)p Ft(_)p Fk(GRFPOP)f(functions)i
-(are)f(in)n(tended)g(for)g(situations)g(where)g(it)h(is)f(neces-)227
-3553 y(sary)c(to)h(mak)n(e)f(temp)r(orary)f(c)n(hanges)h(to)g(the)i
-(graphics)d(functions)i(used)g(b)n(y)g(the)g(Plot.)35
-b(The)25 b(curren)n(t)f(functions)227 3653 y(should)32
-b(\014rst)f(b)r(e)h(sa)n(v)n(ed)e(b)n(y)i(calling)f(AST)p
-Ft(_)p Fk(GRFPUSH.)h(New)g(functions)g(should)f(then)i(b)r(e)f
-(registered)e(using)227 3752 y(AST)p Ft(_)p Fk(GRFSET.)g(The)h
-(required)e(graphics)f(should)i(then)h(b)r(e)f(pro)r(duced.)44
-b(Finally)-7 b(,)31 b(AST)p Ft(_)p Fk(GRFPOP)e(should)227
-3852 y(b)r(e)f(called)g(to)f(restore)f(the)i(original)e(graphics)g
-(functions.)0 3994 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42
-b(AST_GRFPUSH\()c(THIS)k(STATUS)f(\))0 4136 y Fc(Argumen)m(ts:)259
-4265 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 4365
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259 4490 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-4590 y Fk(The)c(global)e(status.)p 0 4775 V 0 4905 a
-FA(AST)p Fe(_)p FA(GRFSET)1110 4906 y Fd(Register)37
-b(a)i(graphics)e(routine)g(for)1550 5021 y(use)j(b)m(y)e(a)h(Plot)2901
-4905 y FA(AST)p Fe(_)p FA(GRFSET)0 5195 y Fc(Description:)44
-b Fk(This)30 b(routine)f(can)g(b)r(e)h(used)g(to)f(select)h(the)g
-(underlying)f(graphics)f(routines)h(to)g(b)r(e)h(used)f(when)h(the)227
-5295 y(supplied)f(Plot)e(pro)r(duces)g(graphical)g(output.)38
-b(If)28 b(this)h(routine)e(is)h(not)g(called)f(prior)g(to)h(pro)r
-(ducing)f(graphical)227 5394 y(output,)j(then)f(the)g(underlying)f
-(graphics)f(routines)h(selected)g(at)h(link-time)f(\(using)h(the)g(ast)
-p Ft(_)p Fk(link)f(command\))227 5494 y(will)i(b)r(e)f(used.)42
-b(T)-7 b(o)29 b(use)g(alternativ)n(e)f(graphics)g(routines,)h(call)g
-(this)h(routine)f(b)r(efore)g(the)g(graphical)f(output)i(is)227
-5593 y(created,)g(sp)r(ecifying)g(the)h(graphics)d(routines)i(to)f(b)r
-(e)i(used.)44 b(This)30 b(will)g(register)f(the)h(routine)g(for)f
-(future)i(use,)227 5693 y(but)d(the)g(routine)g(will)f(not)h(actually)f
-(b)r(e)h(used)g(un)n(til)g(the)g(Grf)f(attribute)h(is)g(giv)n(en)e(a)i
-(non-zero)d(v)-5 b(alue.)p eop end
-%%Page: 242 252
-TeXDict begin 242 251 bop 0 52 a FG(242)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(In)m(v)m(o)s(cation:)
-123 b Ft(CALL)42 b(AST_GRFSET\()d(THIS,)i(NAME,)h(FUN,)g(STATUS)f(\))0
-511 y Fc(Argumen)m(ts:)259 658 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))
-427 758 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259
-896 y Fc(NAME)j(=)h(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 996 y Fk(A)h(name)f(indicating)h
-(the)g(graphics)e(routine)h(to)g(b)r(e)h(replaced.)51
-b(V)-7 b(arious)31 b(graphics)g(routines)h(are)g(used)427
-1095 y(b)n(y)27 b(the)g(Plot)f(class,)h(and)f(an)n(y)g(com)n(bination)h
-(of)f(them)i(ma)n(y)e(b)r(e)h(supplied)h(b)n(y)e(calling)g(this)i
-(routine)e(once)427 1195 y(for)j(eac)n(h)f(routine)g(to)h(b)r(e)g
-(replaced.)40 b(If)29 b(an)n(y)f(of)h(the)g(graphics)f(routines)g(are)g
-(not)g(replaced)g(in)i(this)f(w)n(a)n(y)-7 b(,)427 1295
-y(the)29 b(corresp)r(onding)d(routines)i(in)h(the)g(graphics)d(in)n
-(terface)i(selected)g(at)h(link-time)f(\(using)h(the)f(ast)p
-Ft(_)p Fk(link)427 1394 y(command\))g(are)e(used.)37
-b(The)28 b(allo)n(w)n(ed)e(function)i(names)f(are:)510
-1626 y Fj(\017)45 b Fk(A)n(ttr)28 b(-)f(Enquire)g(or)g(set)g(a)h
-(graphics)e(attribute)h(v)-5 b(alue)510 1745 y Fj(\017)45
-b Fk(Cap)28 b(-)f(Inquire)g(a)g(capabilit)n(y)510 1864
-y Fj(\017)45 b Fk(Flush)28 b(-)g(Flush)f(all)h(p)r(ending)g(graphics)e
-(to)h(the)h(output)g(device)510 1982 y Fj(\017)45 b Fk(Line)28
-b(-)f(Dra)n(w)g(a)g(p)r(olyline)h(\(i.e.)37 b(a)27 b(set)h(of)f
-(connected)h(lines\))510 2101 y Fj(\017)45 b Fk(Mark)27
-b(-)g(Dra)n(w)g(a)g(set)h(of)f(mark)n(ers)510 2220 y
-Fj(\017)45 b Fk(Qc)n(h)27 b(-)h(Return)f(the)h(c)n(haracter)e(heigh)n
-(t)h(in)h(w)n(orld)f(co)r(ordinates)510 2339 y Fj(\017)45
-b Fk(Scales)27 b(-)h(Get)g(the)g(axis)e(scales)510 2458
-y Fj(\017)45 b Fk(T)-7 b(ext)28 b(-)f(Dra)n(w)g(a)g(c)n(haracter)f
-(string)510 2577 y Fj(\017)45 b Fk(TxExt)27 b(-)h(Get)g(the)g(exten)n
-(t)f(of)h(a)f(c)n(haracter)f(string)427 2715 y(The)k(string)g(is)g
-(case)f(insensitiv)n(e.)44 b(F)-7 b(or)30 b(details)f(of)h(the)h(in)n
-(terface)e(required)g(for)h(eac)n(h,)g(see)g(the)g(sections)427
-2815 y(b)r(elo)n(w.)259 2953 y Fc(FUN)i(=)g(INTEGER)g(FUNCTION)g(\(Giv)
-m(en\))427 3052 y Fk(The)39 b(name)g(of)g(the)h(routine)f(to)g(b)r(e)g
-(used)g(to)g(pro)n(vide)f(the)i(functionalit)n(y)f(indicated)g(b)n(y)g
-(parameter)427 3152 y(NAME)e(\(the)g(name)f(should)g(also)g(app)r(ear)f
-(in)i(a)f(F)-7 b(ortran)35 b(EXTERNAL)h(statemen)n(t)h(in)f(the)h
-(routine)427 3252 y(whic)n(h)28 b(in)n(v)n(ok)n(es)e(AST)p
-Ft(_)p Fk(GRFSET\).)427 3371 y(Once)41 b(a)g(routine)g(has)g(b)r(een)h
-(pro)n(vided,)i(the)d Ft(")p Fk(n)n(ull)p Ft(")g Fk(routine)g(AST)p
-Ft(_)p Fk(NULL)h(can)f(b)r(e)h(supplied)f(in)h(a)427
-3470 y(subsequen)n(t)25 b(call)g(to)g(astGrfSet)g(to)g(reset)g(the)g
-(routine)g(to)g(the)h(corresp)r(onding)d(routine)i(in)g(the)h(graphics)
-427 3570 y(in)n(terface)h(selected)h(at)f(link-time.)37
-b(AST)p Ft(_)p Fk(NULL)28 b(is)g(de\014ned)g(in)g(the)g(AST)p
-Ft(_)p Fk(P)-7 b(AR)27 b(include)h(\014le.)259 3708 y
-Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-3808 y Fk(The)c(global)e(status.)-2 3980 y Fc(F)-8 b(unction)32
-b(In)m(terfaces)n(:)227 4126 y Fk(All)i(the)f(functions)g(listed)g(b)r
-(elo)n(w)g(\(except)g(for)g Ft(")p Fk(Cap)p Ft(")p Fk(\))f(should)g
-(return)h(an)f(in)n(teger)g(v)-5 b(alue)33 b(of)g(0)g(if)g(an)g(error)
-227 4226 y(o)r(ccurs,)43 b(and)d(1)f(otherwise.)74 b(All)40
-b(x)g(and)g(y)g(v)-5 b(alues)40 b(refer)f(to)h Ft(")p
-Fk(graphics)e(cordinates)p Ft(")h Fk(as)g(de\014ned)h(b)n(y)g(the)227
-4325 y(GRAPHBO)n(X)28 b(parameter)e(of)h(the)h(AST)p
-Ft(_)p Fk(PLOT)f(call)g(whic)n(h)h(created)e(the)i(Plot.)227
-4455 y(The)g(\014rst)g(argumen)n(t)e(\(GRF)n(CON\))j(for)e(eac)n(h)g
-(function)h(is)g(an)f(AST)h(KeyMap)f(p)r(oin)n(ter)h(that)g(can)f(b)r
-(e)h(used)g(b)n(y)227 4555 y(the)c(called)f(function)h(to)f(establish)g
-(the)h(con)n(text)e(in)i(whic)n(h)f(it)h(is)f(b)r(eing)h(called.)35
-b(The)23 b(con)n(ten)n(ts)g(of)g(the)h(KeyMap)227 4655
-y(are)35 b(determined)i(b)n(y)f(the)g(calling)f(application,)j(whic)n
-(h)e(should)g(obtain)g(a)g(p)r(oin)n(ter)f(to)h(the)h(KeyMap)e(using)
-227 4754 y(the)28 b(AST)p Ft(_)p Fk(GETGRF)n(CONTEXT)f(routine,)g(and)g
-(then)h(store)e(an)n(y)h(necessary)e(information)i(in)h(the)g(KeyMap)
-227 4854 y(using)33 b(the)g(metho)r(ds)f(of)h(the)g(KeyMap)f(class.)51
-b(Note,)34 b(the)f(functions)g(listed)g(b)r(elo)n(w)f(should)g(nev)n
-(er)g(ann)n(ul)g(or)227 4953 y(delete)c(the)g(supplied)g(KeyMap)f(p)r
-(oin)n(ter.)-2 5113 y Fc(A)m(ttr)n(:)227 5260 y Fk(The)38
-b Ft(")p Fk(A)n(ttr)p Ft(")e Fk(function)i(returns)e(the)i(curren)n(t)e
-(v)-5 b(alue)37 b(of)h(a)e(sp)r(eci\014ed)i(graphics)e(attribute,)j
-(and)e(optionally)227 5359 y(establishes)23 b(a)h(new)g(v)-5
-b(alue.)35 b(The)24 b(supplied)h(v)-5 b(alue)23 b(is)h(con)n(v)n(erted)
-f(to)g(an)h(in)n(teger)f(v)-5 b(alue)24 b(if)g(necessary)e(b)r(efore)i
-(use.)227 5459 y(It)k(requires)e(the)i(follo)n(wing)f(in)n(terface:)227
-5589 y(INTEGER)g(FUNCTION)i(A)-7 b(TTR\()28 b(GRF)n(CON,)g(A)-7
-b(TT,)28 b(V)-9 b(AL,)28 b(OLD)n(V)-9 b(AL,)27 b(PRIM)g(\))p
-eop end
-%%Page: 243 253
-TeXDict begin 243 252 bop 3643 52 a FG(243)340 351 y
-Fj(\017)45 b Fk(GRF)n(CON)25 b(=)g(INTEGER)g(\(Giv)n(en\))g(-)g(A)g
-(KeyMap)f(con)n(taining)g(information)h(passed)f(from)h(the)g(calling)
-427 451 y(application.)340 581 y Fj(\017)45 b Fk(A)-7
-b(TT)36 b(=)f(INTEGER)g(\(Giv)n(en\))h(-)f(An)h(in)n(teger)e(iden)n
-(tifying)i(the)f(required)g(attribute.)60 b(The)36 b(follo)n(wing)427
-680 y(sym)n(b)r(olic)24 b(v)-5 b(alues)24 b(are)f(de\014ned)h(in)h(GRF)
-p Ft(_)p Fk(P)-7 b(AR:)24 b(GRF)p Ft(__)p Fk(STYLE)f(\(Line)i(st)n
-(yle\),)g(GRF)p Ft(__)p Fk(WIDTH)f(\(Line)427 780 y(width\),)e(GRF)p
-Ft(__)p Fk(SIZE)c(\(Character)g(and)h(mark)n(er)e(size)i(scale)f
-(factor\),)i(GRF)p Ft(__)p Fk(F)n(ONT)f(\(Character)e(fon)n(t\),)427
-880 y(GRF)p Ft(__)p Fk(COLOUR)27 b(\(Colour)g(index\).)340
-1010 y Fj(\017)45 b Fk(V)-9 b(AL)28 b(=)f(DOUBLE)h(PRECISION)e(\(Giv)n
-(en\))i(-)g(no)f(v)-5 b(alue)27 b(is)h(stored.)340 1140
-y Fj(\017)45 b Fk(OLD)n(V)-9 b(AL)28 b(=)f(DOUBLE)g(PRECISION)g
-(\(Returned\))h(-)f(Returned)h(holding)f(the)h(attribute)g(v)-5
-b(alue.)340 1269 y Fj(\017)45 b Fk(PRIM)30 b(=)g(INTEGER)g(\(Giv)n
-(en\))h(-)f(The)g(sort)g(of)g(graphics)f(primitiv)n(e)h(to)g(b)r(e)h
-(dra)n(wn)e(with)i(the)g(new)f(at-)427 1369 y(tribute.)k(Iden)n
-(ti\014ed)19 b(b)n(y)f(the)h(follo)n(wing)e(v)-5 b(alues)18
-b(de\014ned)h(in)g(GRF)p Ft(_)p Fk(P)-7 b(AR:)18 b(GRF)p
-Ft(__)p Fk(LINE,)g(GRF)p Ft(__)p Fk(MARK,)427 1469 y(GRF)p
-Ft(__)p Fk(TEXT.)-2 1628 y Fc(Cap)n(:)227 1774 y Fk(The)26
-b Ft(")p Fk(Cap)p Ft(")e Fk(function)i(is)g(called)f(to)g(determine)h
-(if)g(the)g(grf)f(mo)r(dule)g(has)g(a)g(giv)n(en)g(capabilit)n(y)-7
-b(,)25 b(as)g(indicated)h(b)n(y)227 1873 y(the)i Ft(")p
-Fk(cap)p Ft(")f Fk(argumen)n(t:)227 1997 y(INTEGER)g(FUNCTION)i(CAP\()e
-(GRF)n(CON,)h(CAP)-7 b(,)27 b(V)-9 b(ALUE)28 b(\))340
-2253 y Fj(\017)45 b Fk(GRF)n(CON)25 b(=)g(INTEGER)g(\(Giv)n(en\))g(-)g
-(A)g(KeyMap)f(con)n(taining)g(information)h(passed)f(from)h(the)g
-(calling)427 2353 y(application.)340 2483 y Fj(\017)45
-b Fk(CAP)36 b(=)g(INTEGER)f(\(Giv)n(en\))i(The)f(capabilit)n(y)f(b)r
-(eing)i(inquired)e(ab)r(out.)63 b(This)36 b(will)g(b)r(e)h(one)e(of)h
-(the)427 2582 y(follo)n(wing)27 b(constan)n(ts)f(de\014ned)i(in)g(GRF)p
-Ft(_)p Fk(P)-7 b(AR:)227 2741 y(GRF)p Ft(__)p Fk(SCALES:)33
-b(This)g(function)h(should)f(return)g(a)f(non-zero)g(v)-5
-b(alue)33 b(if)h(the)f Ft(")p Fk(Scales)p Ft(")f Fk(function)h(is)h
-(imple-)227 2841 y(men)n(ted,)28 b(and)g(zero)e(otherwise.)36
-b(The)28 b(supplied)g(V)-9 b(ALUE)27 b(argumen)n(t)g(should)g(b)r(e)h
-(ignored.)227 2964 y(GRF)p Ft(__)p Fk(MJUST:)c(This)g(function)g
-(should)g(return)f(a)h(non-zero)e(v)-5 b(alue)23 b(if)i(the)f
-Ft(")p Fk(T)-7 b(ext)p Ft(")23 b Fk(and)h Ft(")p Fk(TxExt)p
-Ft(")e Fk(functions)227 3064 y(recognise)35 b Ft(")p
-Fk(M)p Ft(")i Fk(as)f(a)g(c)n(haracter)f(in)i(the)h(justi\014cation)f
-(string.)64 b(If)37 b(the)h(\014rst)e(c)n(haracter)f(of)i(a)f
-(justi\014cation)227 3163 y(string)d(is)h Ft(")p Fk(M)p
-Ft(")p Fk(,)g(then)g(the)g(text)g(should)f(b)r(e)h(justi\014ed)g(with)g
-(the)g(giv)n(en)f(reference)g(p)r(oin)n(t)g(at)h(the)g(b)r(ottom)g(of)
-227 3263 y(the)f(b)r(ounding)f(b)r(o)n(x.)51 b(This)33
-b(is)f(di\013eren)n(t)g(to)h Ft(")p Fk(B)p Ft(")e Fk(justi\014cation,)j
-(whic)n(h)e(requests)g(that)g(the)h(reference)e(p)r(oin)n(t)227
-3363 y(b)r(e)k(put)g(on)f(the)h(baseline)e(of)i(the)f(text,)j(since)d
-(some)g(c)n(haracters)e(hang)h(do)n(wn)h(b)r(elo)n(w)g(the)h(baseline.)
-56 b(If)35 b(the)227 3462 y Ft(")p Fk(T)-7 b(ext)p Ft(")25
-b Fk(or)g Ft(")p Fk(TxExt)p Ft(")g Fk(function)h(cannot)g(di\013eren)n
-(tiate)g(b)r(et)n(w)n(een)f Ft(")p Fk(M)p Ft(")h Fk(and)f
-Ft(")p Fk(B)p Ft(")p Fk(,)h(then)g(this)g(function)h(should)227
-3562 y(return)e(zero,)g(in)g(whic)n(h)h(case)e Ft(")p
-Fk(M)p Ft(")h Fk(justi\014cation)g(will)g(nev)n(er)g(b)r(e)g(requested)
-g(b)n(y)g(Plot.)36 b(The)25 b(supplied)h(V)-9 b(ALUE)227
-3661 y(argumen)n(t)27 b(should)g(b)r(e)h(ignored.)227
-3784 y(GRF)p Ft(__)p Fk(ESC:)22 b(This)g(function)h(should)e(return)h
-(a)g(non-zero)e(v)-5 b(alue)22 b(if)h(the)f Ft(")p Fk(T)-7
-b(ext)p Ft(")22 b Fk(and)g Ft(")p Fk(TxExt)p Ft(")f Fk(functions)h(can)
-227 3884 y(recognise)f(and)h(in)n(terpret)f(graphics)g(escap)r(e)g
-(sequences)h(within)h(the)f(supplied)g(string)g(\(see)g(attribute)g
-(Escap)r(e\).)227 3984 y(Zero)g(should)i(b)r(e)f(returned)g(if)h(escap)
-r(e)f(sequences)g(cannot)g(b)r(e)h(in)n(terpreted)e(\(in)i(whic)n(h)g
-(case)e(the)i(Plot)f(class)f(will)227 4083 y(in)n(terpret)29
-b(them)h(itself)g(if)g(needed\).)43 b(The)30 b(supplied)g(V)-9
-b(ALUE)29 b(argumen)n(t)g(should)g(b)r(e)h(ignored)e(only)h(if)h(escap)
-r(e)227 4183 y(sequences)h(cannot)h(b)r(e)g(in)n(terpreted)f(b)n(y)h
-Ft(")p Fk(T)-7 b(ext)p Ft(")31 b Fk(and)g Ft(")p Fk(TxExt)p
-Ft(")p Fk(.)48 b(Otherwise,)32 b(V)-9 b(ALUE)32 b(indicates)g(whether)
-227 4283 y Ft(")p Fk(T)-7 b(ext)p Ft(")26 b Fk(and)g
-Ft(")p Fk(TxExt)p Ft(")f Fk(should)h(in)n(terpret)g(escap)r(e)g
-(sequences)f(in)i(subsequen)n(t)f(calls.)36 b(If)27 b(V)-9
-b(ALUE)26 b(is)g(non-zero)227 4382 y(then)k(escap)r(e)f(sequences)g
-(should)g(b)r(e)h(in)n(terpreted)f(b)n(y)h Ft(")p Fk(T)-7
-b(ext)p Ft(")28 b Fk(and)i Ft(")p Fk(TxExt)p Ft(")p Fk(.)41
-b(Otherwise,)29 b(they)h(should)f(b)r(e)227 4482 y(dra)n(wn)e(as)g
-(literal)g(text.)340 4738 y Fj(\017)45 b Fk(V)-9 b(ALUE)34
-b(=)f(INTEGER)f(\(Giv)n(en\))i(The)f(use)h(of)f(this)g(parameter)f(dep)
-r(ends)i(on)f(the)h(v)-5 b(alue)33 b(of)g(CAP)g(as)427
-4838 y(describ)r(ed)28 b(ab)r(o)n(v)n(e.)340 4968 y Fj(\017)45
-b Fk(Returned)28 b(F)-7 b(unction)29 b(V)-7 b(alue:)37
-b(The)28 b(v)-5 b(alue)28 b(returned)f(b)n(y)h(the)g(function)g(dep)r
-(ends)g(on)g(the)g(v)-5 b(alue)28 b(of)g(CAP)427 5068
-y(as)f(describ)r(ed)h(ab)r(o)n(v)n(e.)35 b(Zero)26 b(should)i(b)r(e)g
-(returned)f(if)h(the)g(supplied)g(capabilit)n(y)f(is)g(not)h
-(recognised.)-2 5227 y Fc(Flush)n(:)227 5373 y Fk(The)19
-b Ft(")p Fk(Flush)p Ft(")g Fk(function)g(ensures)f(that)i(the)f(displa)
-n(y)f(device)h(is)g(up-to-date,)h(b)n(y)f(\015ushing)g(an)n(y)f(p)r
-(ending)h(graphics)227 5472 y(to)28 b(the)g(output)g(device.)37
-b(It)27 b(requires)g(the)h(follo)n(wing)e(in)n(terface:)227
-5595 y(INTEGER)h(FUNCTION)i(FLUSH\()f(GRF)n(CON)g(\))p
-eop end
-%%Page: 244 254
-TeXDict begin 244 253 bop 0 52 a FG(244)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(GRF)n(CON)25 b(=)g(INTEGER)g(\(Giv)n(en\))g(-)g(A)g(KeyMap)f(con)n
-(taining)g(information)h(passed)f(from)h(the)g(calling)427
-451 y(application.)-2 615 y Fc(Line)n(:)227 761 y Fk(The)j
-Ft(")p Fk(Line)p Ft(")e Fk(function)i(displa)n(ys)e(lines)i(joining)f
-(the)h(giv)n(en)e(p)r(ositions)h(and)g(requires)f(the)i(follo)n(wing)e
-(in)n(terface:)227 887 y(INTEGER)h(FUNCTION)i(LINE\()e(GRF)n(CON,)h(N,)
-g(X,)g(Y)g(\))340 1152 y Fj(\017)45 b Fk(GRF)n(CON)25
-b(=)g(INTEGER)g(\(Giv)n(en\))g(-)g(A)g(KeyMap)f(con)n(taining)g
-(information)h(passed)f(from)h(the)g(calling)427 1252
-y(application.)340 1386 y Fj(\017)45 b Fk(N)28 b(=)f(INTEGER)h(\(Giv)n
-(en\))g(-)f(The)h(n)n(um)n(b)r(er)f(of)g(p)r(ositions)h(to)f(b)r(e)h
-(joined)g(together.)340 1520 y Fj(\017)45 b Fk(X\()29
-b(N)e(\))h(=)g(REAL)f(\(Giv)n(en\))h(-)f(An)h(arra)n(y)e(holding)h(the)
-h Ft(")p Fk(n)p Ft(")f Fk(x)g(v)-5 b(alues.)340 1654
-y Fj(\017)45 b Fk(Y\()29 b(N)e(\))h(=)g(REAL)f(\(Giv)n(en\))h(-)f(An)h
-(arra)n(y)e(holding)h(the)h Ft(")p Fk(n)p Ft(")f Fk(y)g(v)-5
-b(alues.)-2 1819 y Fc(Mark)n(:)227 1965 y Fk(The)28 b
-Ft(")p Fk(Mark)p Ft(")e Fk(function)i(displa)n(ys)e(mark)n(ers)g(at)h
-(the)h(giv)n(en)f(p)r(ositions.)37 b(It)28 b(requires)e(the)i(follo)n
-(wing)e(in)n(terface:)227 2091 y(INTEGER)h(FUNCTION)i(MARK\()f(GRF)n
-(CON,)f(N,)h(X,)g(Y,)g(TYPE)f(\))340 2355 y Fj(\017)45
-b Fk(GRF)n(CON)25 b(=)g(INTEGER)g(\(Giv)n(en\))g(-)g(A)g(KeyMap)f(con)n
-(taining)g(information)h(passed)f(from)h(the)g(calling)427
-2455 y(application.)340 2589 y Fj(\017)45 b Fk(N)28 b(=)f(INTEGER)h
-(\(Giv)n(en\))g(-)f(The)h(n)n(um)n(b)r(er)f(of)g(p)r(ositions)h(to)f(b)
-r(e)h(mark)n(ed.)340 2723 y Fj(\017)45 b Fk(X\()29 b(N)e(\))h(=)g(REAL)
-f(\(Giv)n(en\))h(-)f(An)h(arra)n(y)e(holding)h(the)h
-Ft(")p Fk(n)p Ft(")f Fk(x)g(v)-5 b(alues.)340 2857 y
-Fj(\017)45 b Fk(Y\()29 b(N)e(\))h(=)g(REAL)f(\(Giv)n(en\))h(-)f(An)h
-(arra)n(y)e(holding)h(the)h Ft(")p Fk(n)p Ft(")f Fk(y)g(v)-5
-b(alues.)340 2992 y Fj(\017)45 b Fk(TYPE)28 b(=)h(INTEGER)g(\(Giv)n
-(en\))g(-)f(An)i(in)n(teger)e(whic)n(h)h(can)f(b)r(e)i(used)e(to)h
-(indicate)g(the)g(t)n(yp)r(e)h(of)e(mark)n(er)427 3091
-y(sym)n(b)r(ol)f(required.)-2 3256 y Fc(Qc)m(h)n(:)227
-3402 y Fk(The)e Ft(")p Fk(Qc)n(h)p Ft(")e Fk(function)j(returns)e(the)h
-(heigh)n(ts)f(of)h(c)n(haracters)d(dra)n(wn)i(v)n(ertically)f(and)i
-(horizon)n(tally)e(in)i(graphics)227 3501 y(co)r(ordinates.)36
-b(It)28 b(requires)e(the)i(follo)n(wing)e(in)n(terface:)227
-3627 y(INTEGER)h(FUNCTION)i(QCH\()e(GRF)n(CON,)h(CHV,)g(CHH)g(\))340
-3892 y Fj(\017)45 b Fk(GRF)n(CON)25 b(=)g(INTEGER)g(\(Giv)n(en\))g(-)g
-(A)g(KeyMap)f(con)n(taining)g(information)h(passed)f(from)h(the)g
-(calling)427 3992 y(application.)340 4126 y Fj(\017)45
-b Fk(CHV)27 b(=)e(REAL)h(\(Returned\))g(The)g(heigh)n(t)g(of)f(c)n
-(haracters)f(dra)n(wn)h(with)h(a)f(v)n(ertical)g(baseline.)36
-b(This)25 b(will)427 4225 y(b)r(e)j(an)g(incremen)n(t)f(in)h(the)g(X)g
-(axis.)340 4360 y Fj(\017)45 b Fk(CHH)31 b(=)f(REAL)g(\(Returned\))h
-(The)f(heigh)n(t)g(of)g(c)n(haracters)e(dra)n(wn)h(with)h(a)g(horizon)n
-(tal)f(baseline.)44 b(This)427 4459 y(will)28 b(b)r(e)g(an)f(incremen)n
-(t)h(in)g(the)g(Y)g(axis.)-2 4624 y Fc(Scales)n(:)227
-4770 y Fk(The)h Ft(")p Fk(Scales)p Ft(")e Fk(function)i(returns)f(t)n
-(w)n(o)f(v)-5 b(alues)28 b(\(one)h(for)f(eac)n(h)f(axis\))h(whic)n(h)h
-(scale)e(incremen)n(ts)h(on)h(the)g(corre-)227 4869 y(sp)r(onding)h
-(axis)f(in)n(to)g(a)h Ft(")p Fk(normal)p Ft(")d Fk(co)r(ordinate)i
-(system)g(in)h(whic)n(h:)42 b(1\))29 b(the)h(axes)f(ha)n(v)n(e)g(equal)
-g(scale)g(in)h(terms)227 4969 y(of)k(\(for)f(instance\))g(millimetres)g
-(p)r(er)h(unit)g(distance,)g(2\))g(X)f(v)-5 b(alues)33
-b(increase)f(from)h(left)h(to)g(righ)n(t,)g(and)f(3\))g(Y)227
-5069 y(v)-5 b(alues)27 b(increase)g(from)g(b)r(ottom)h(to)f(top.)37
-b(It)28 b(requires)f(the)g(follo)n(wing)g(in)n(terface:)227
-5194 y(INTEGER)g(FUNCTION)i(SCALES\()e(GRF)n(CON,)h(ALPHA,)g(BET)-7
-b(A)27 b(\))340 5459 y Fj(\017)45 b Fk(GRF)n(CON)25 b(=)g(INTEGER)g
-(\(Giv)n(en\))g(-)g(A)g(KeyMap)f(con)n(taining)g(information)h(passed)f
-(from)h(the)g(calling)427 5559 y(application.)340 5693
-y Fj(\017)45 b Fk(ALPHA)28 b(=)f(REAL)h(\(Returned\))g(The)g(scale)f
-(for)g(the)h(X)g(axis)e(\(i.e.)38 b(Xnorm)27 b(=)g(alpha)p
-Fj(\003)p Fk(Xw)n(orld\).)p eop end
-%%Page: 245 255
-TeXDict begin 245 254 bop 3643 52 a FG(245)340 351 y
-Fj(\017)45 b Fk(BET)-7 b(A)28 b(=)f(REAL)g(\(Returned\))i(The)e(scale)g
-(for)g(the)h(Y)g(axis)f(\(i.e.)37 b(Ynorm)27 b(=)h(b)r(eta)p
-Fj(\003)p Fk(Yw)n(orld\).)-2 523 y Fc(T)-8 b(ext)n(:)227
-669 y Fk(The)31 b Ft(")p Fk(T)-7 b(ext)p Ft(")30 b Fk(function)h
-(displa)n(ys)e(a)h(c)n(haracter)f(string)h(at)g(a)g(giv)n(en)g(p)r
-(osition)g(using)h(a)f(sp)r(eci\014ed)g(justi\014cation)227
-769 y(and)e(up-v)n(ector.)35 b(It)28 b(requires)e(the)i(follo)n(wing)f
-(in)n(terface:)227 899 y(INTEGER)g(FUNCTION)i(TEXT\()e(GRF)n(CON,)h
-(TEXT,)f(X,)h(Y,)g(JUST,)g(UPX,)g(UPY)g(\))340 1175 y
-Fj(\017)45 b Fk(GRF)n(CON)25 b(=)g(INTEGER)g(\(Giv)n(en\))g(-)g(A)g
-(KeyMap)f(con)n(taining)g(information)h(passed)f(from)h(the)g(calling)
-427 1274 y(application.)340 1412 y Fj(\017)45 b Fk(TEXT)28
-b(=)f(CHARA)n(CTER)h Fj(\003)f Fk(\()h Fj(\003)f Fk(\))h(\(Giv)n(en\))g
-(-)f(The)h(string)f(to)g(b)r(e)h(displa)n(y)n(ed.)340
-1550 y Fj(\017)45 b Fk(X)28 b(=)f(REAL)h(\(Giv)n(en\))g(-)f(The)h
-(reference)f(x)g(co)r(ordinate.)340 1688 y Fj(\017)45
-b Fk(Y)28 b(=)f(REAL)h(\(Giv)n(en\))g(-)f(The)h(reference)f(y)g(co)r
-(ordinate.)340 1826 y Fj(\017)45 b Fk(JUST)23 b(=)g(CHARA)n(CTER)g
-Fj(\003)f Fk(\()h Fj(\003)g Fk(\))g(\(Giv)n(en)g(\))g(-)f(A)i(string)e
-(whic)n(h)g(sp)r(eci\014es)h(the)g(lo)r(cation)g(within)g(the)g(text)
-427 1925 y(string)31 b(whic)n(h)h(is)f(to)g(b)r(e)h(placed)f(at)h(the)g
-(reference)e(p)r(osition)i(giv)n(en)e(b)n(y)i(x)f(and)g(y)-7
-b(.)49 b(The)31 b(\014rst)h(c)n(haracter)427 2025 y(ma)n(y)24
-b(b)r(e)g('T')h(for)f Ft(")p Fk(top)p Ft(")p Fk(,)g('C')g(for)g
-Ft(")p Fk(cen)n(tre)p Ft(")p Fk(,)f(or)h('B')g(for)g
-Ft(")p Fk(b)r(ottom)p Ft(")p Fk(,)g(and)g(sp)r(eci\014es)h(the)f(v)n
-(ertical)f(lo)r(cation)427 2125 y(of)28 b(the)f(reference)g(p)r
-(osition.)36 b(Note,)28 b Ft(")p Fk(b)r(ottom)p Ft(")e
-Fk(corresp)r(onds)g(to)h(the)h(base-line)e(of)h(normal)g(text.)37
-b(Some)427 2224 y(c)n(haracters)24 b(\(eg)i Ft(")p Fk(y)p
-Ft(")p Fk(,)f Ft(")p Fk(g)p Ft(")p Fk(,)g Ft(")p Fk(p)p
-Ft(")p Fk(,)h(etc\))g(descend)g(b)r(elo)n(w)g(the)g(base-line.)36
-b(The)26 b(second)f(c)n(haracter)f(ma)n(y)h(b)r(e)427
-2324 y('L')k(for)e Ft(")p Fk(left)p Ft(")p Fk(,)h('C')h(for)e
-Ft(")p Fk(cen)n(tre)p Ft(")p Fk(,)g(or)h('R')g(for)g
-Ft(")p Fk(righ)n(t)p Ft(")p Fk(,)e(and)i(sp)r(eci\014es)h(the)f
-(horizon)n(tal)f(lo)r(cation)g(of)h(the)427 2424 y(reference)k(p)r
-(osition.)54 b(If)33 b(the)h(string)e(has)h(less)f(than)i(2)e(c)n
-(haracters)f(then)j('C')f(is)g(used)g(for)g(the)g(missing)427
-2523 y(c)n(haracters.)340 2661 y Fj(\017)45 b Fk(UPX)34
-b(=)g(REAL)g(\(Giv)n(en\))h(-)e(The)i(x)f(comp)r(onen)n(t)f(of)h(the)h
-(up-v)n(ector)e(for)g(the)i(text.)56 b(If)35 b(necessary)d(the)427
-2761 y(supplied)26 b(v)-5 b(alue)25 b(should)g(b)r(e)h(negated)e(to)h
-(ensure)g(that)h(p)r(ositiv)n(e)e(v)-5 b(alues)25 b(alw)n(a)n(ys)f
-(refer)g(to)h(displacemen)n(ts)427 2860 y(from)j(left)g(to)f(righ)n(t)g
-(on)g(the)h(screen.)340 2998 y Fj(\017)45 b Fk(UPX)34
-b(=)g(REAL)g(\(Giv)n(en\))h(-)e(The)i(y)f(comp)r(onen)n(t)f(of)h(the)h
-(up-v)n(ector)e(for)g(the)i(text.)56 b(If)35 b(necessary)d(the)427
-3098 y(supplied)26 b(v)-5 b(alue)25 b(should)g(b)r(e)h(negated)e(to)h
-(ensure)g(that)h(p)r(ositiv)n(e)e(v)-5 b(alues)25 b(alw)n(a)n(ys)f
-(refer)g(to)h(displacemen)n(ts)427 3197 y(from)j(b)r(ottom)f(to)h(top)f
-(on)h(the)g(screen.)-2 3369 y Fc(TxExt)n(:)227 3516 y
-Fk(The)35 b Ft(")p Fk(TxExt)p Ft(")e Fk(function)i(returns)f(the)h
-(corners)e(of)i(a)f(b)r(o)n(x)g(whic)n(h)h(w)n(ould)f(enclose)g(the)h
-(supplied)g(c)n(haracter)227 3615 y(string)25 b(if)i(it)f(w)n(ere)f
-(displa)n(y)n(ed)g(using)g(the)h(T)-7 b(ext)26 b(function)g(describ)r
-(ed)g(ab)r(o)n(v)n(e.)35 b(The)26 b(returned)f(b)r(o)n(x)g(includes)h
-(an)n(y)227 3715 y(leading)h(or)g(trailing)g(spaces.)36
-b(It)28 b(requires)e(the)i(follo)n(wing)e(in)n(terface:)227
-3844 y(INTEGER)h(FUNCTION)i(TXEXT\()e(GRF)n(CON,)h(TEXT,)g(X,)g(Y,)g
-(JUST,)f(UPX,)h(UPY,)g(XB,)g(YB)f(\))340 4120 y Fj(\017)45
-b Fk(GRF)n(CON)25 b(=)g(INTEGER)g(\(Giv)n(en\))g(-)g(A)g(KeyMap)f(con)n
-(taining)g(information)h(passed)f(from)h(the)g(calling)427
-4220 y(application.)340 4358 y Fj(\017)45 b Fk(TEXT)28
-b(=)f(CHARA)n(CTER)h Fj(\003)f Fk(\()h Fj(\003)f Fk(\))h(\(Giv)n(en\))g
-(-)f(The)h(string)f(to)g(b)r(e)h(displa)n(y)n(ed.)340
-4496 y Fj(\017)45 b Fk(X)28 b(=)f(REAL)h(\(Giv)n(en\))g(-)f(The)h
-(reference)f(x)g(co)r(ordinate.)340 4634 y Fj(\017)45
-b Fk(Y)28 b(=)f(REAL)h(\(Giv)n(en\))g(-)f(The)h(reference)f(y)g(co)r
-(ordinate.)340 4772 y Fj(\017)45 b Fk(JUST)23 b(=)g(CHARA)n(CTER)g
-Fj(\003)f Fk(\()h Fj(\003)g Fk(\))g(\(Giv)n(en)g(\))g(-)f(A)i(string)e
-(whic)n(h)g(sp)r(eci\014es)h(the)g(lo)r(cation)g(within)g(the)g(text)
-427 4871 y(string)k(whic)n(h)h(is)f(to)h(b)r(e)g(placed)f(at)g(the)h
-(reference)f(p)r(osition)h(giv)n(en)e(b)n(y)i(x)f(and)h(y)-7
-b(.)36 b(See)28 b Ft(")p Fk(T)-7 b(ext)p Ft(")27 b Fk(ab)r(o)n(v)n(e.)
-340 5009 y Fj(\017)45 b Fk(UPX)28 b(=)f(REAL)h(\(Giv)n(en\))g(-)f(The)h
-(x)f(comp)r(onen)n(t)g(of)h(the)g(up-v)n(ector)e(for)h(the)h(text.)38
-b(See)27 b Ft(")p Fk(T)-7 b(ext)p Ft(")27 b Fk(ab)r(o)n(v)n(e.)340
-5147 y Fj(\017)45 b Fk(UPX)28 b(=)f(REAL)h(\(Giv)n(en\))g(-)f(The)h(y)f
-(comp)r(onen)n(t)g(of)h(the)g(up-v)n(ector)e(for)h(the)h(text.)38
-b(See)27 b Ft(")p Fk(T)-7 b(ext)p Ft(")27 b Fk(ab)r(o)n(v)n(e.)340
-5285 y Fj(\017)45 b Fk(XB\()39 b(4)f(\))h(=)g(REAL)f(\(Returned\))h(-)g
-(Returned)f(holding)g(the)h(x)g(co)r(ordinate)e(of)i(eac)n(h)f(corner)f
-(of)h(the)427 5384 y(b)r(ounding)28 b(b)r(o)n(x.)340
-5522 y Fj(\017)45 b Fk(YB\()39 b(4)f(\))h(=)g(REAL)f(\(Returned\))h(-)g
-(Returned)f(holding)g(the)h(y)g(co)r(ordinate)e(of)i(eac)n(h)f(corner)f
-(of)h(the)427 5622 y(b)r(ounding)28 b(b)r(o)n(x.)p eop
-end
-%%Page: 246 256
-TeXDict begin 246 255 bop 0 52 a FG(246)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(GRID)913 483 y Fd(Dra)m(w)38
-b(a)g(set)h(of)f(lab)s(elled)g(co)s(ordinate)e(axes)3089
-482 y FA(AST)p Fe(_)p FA(GRID)0 651 y Fc(Description:)44
-b Fk(This)20 b(routine)g(dra)n(ws)e(a)i(complete)g(annotated)f(set)h
-(of)g(co)r(ordinate)f(axes)g(for)g(a)h(Plot)f(with)i(\(optionally\))227
-751 y(a)31 b(co)r(ordinate)f(grid)g(sup)r(erimp)r(osed.)47
-b(Details)31 b(of)g(the)g(axes)f(and)h(grid)f(can)h(b)r(e)g(con)n
-(trolled)f(b)n(y)h(setting)g(v)-5 b(alues)227 851 y(for)27
-b(the)h(v)-5 b(arious)27 b(attributes)g(de\014ned)h(b)n(y)f(the)h(Plot)
-f(class)g(\(q.v.\).)0 994 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_GRID\()e(THIS,)h(STATUS)g(\))0 1137
-y Fc(Argumen)m(ts:)259 1268 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427
-1368 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259 1494
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 1594 y Fk(The)c(global)e(status.)0 1750 y Fc(Notes:)340
-2026 y Fj(\017)45 b Fk(If)28 b(the)h(supplied)f(Plot)f(is)h(a)f
-(Plot3D,)g(the)i(axes)d(will)i(b)r(e)h(annotated)e(using)g(three)h
-(2-dimensional)e(Plots,)427 2126 y(one)i(for)f(eac)n(h)g(2D)g(plane)h
-(in)g(the)g(3D)f(curren)n(t)g(co)r(ordinate)g(system.)37
-b(The)27 b(plots)h(will)g(b)r(e)g Ft(")p Fk(pasted)p
-Ft(")e Fk(on)n(to)427 2226 y(3)h(faces)g(of)g(the)h(cub)r(oid)f
-(graphics)f(v)n(olume)h(sp)r(eci\014ed)g(when)h(the)g(Plot3D)e(w)n(as)g
-(constructed.)37 b(The)27 b(faces)427 2325 y(to)h(b)r(e)g(used)f(can)h
-(b)r(e)g(con)n(trolled)e(b)n(y)h(the)h Ft(")p Fk(Ro)r(otCorner)p
-Ft(")d Fk(attribute.)340 2452 y Fj(\017)45 b Fk(An)23
-b(error)e(results)h(if)i(either)e(the)h(curren)n(t)f(F)-7
-b(rame)22 b(or)g(the)h(base)f(F)-7 b(rame)23 b(of)f(the)h(Plot)g(is)f
-(not)h(2-dimensional)427 2552 y(or)k(\(for)g(a)h(Plot3D\))f
-(3-dimensional.)340 2679 y Fj(\017)45 b Fk(An)24 b(error)e(also)h
-(results)g(if)h(the)g(transformation)e(b)r(et)n(w)n(een)h(the)h(base)f
-(and)h(curren)n(t)e(F)-7 b(rames)23 b(of)h(the)g(Plot)f(is)427
-2778 y(not)k(de\014ned)g(in)g(either)g(direction)g(\(i.e.)37
-b(the)27 b(Plot's)f(T)-7 b(ranF)g(orw)n(ard)24 b(or)i(T)-7
-b(ranIn)n(v)n(erse)25 b(attribute)i(is)f(zero\).)p 0
-2966 V 0 3096 a FA(AST)p Fe(_)p FA(GRIDLINE)1237 3104
-y Fd(Dra)m(w)37 b(a)i(grid)f(line)g(\(or)f(axis\))1643
-3225 y(for)h(a)h(Plot)2765 3096 y FA(AST)p Fe(_)p FA(GRIDLINE)0
-3379 y Fc(Description:)44 b Fk(This)33 b(routine)e(dra)n(ws)g(a)h(curv)
-n(e)f(in)i(the)g(ph)n(ysical)e(co)r(ordinate)g(system)h(of)g(a)g(Plot)g
-(b)n(y)g(v)-5 b(arying)31 b(only)227 3478 y(one)g(of)h(the)g(co)r
-(ordinates)e(along)g(the)i(length)f(of)h(the)g(curv)n(e.)47
-b(It)32 b(is)f(in)n(tended)h(for)f(dra)n(wing)f(co)r(ordinate)g(axes,)
-227 3578 y(co)r(ordinate)38 b(grids,)j(and)d(tic)n(k)h(marks)e(on)i
-(axes)f(\(but)h(note)g(that)g(these)g(are)f(also)f(a)n(v)-5
-b(ailable)38 b(via)g(the)h(more)227 3678 y(comprehensiv)n(e)26
-b(AST)p Ft(_)p Fk(GRID)j(routine\).)227 3799 y(The)35
-b(curv)n(e)e(is)i(transformed)e(in)n(to)h(graphical)f(co)r(ordinate)h
-(space)f(for)h(plotting,)j(so)c(that)i(a)f(straigh)n(t)g(line)g(in)227
-3899 y(ph)n(ysical)24 b(co)r(ordinates)f(ma)n(y)g(result)h(in)h(a)f
-(curv)n(ed)g(line)g(b)r(eing)h(dra)n(wn)e(if)i(the)g(Mapping)f(in)n(v)n
-(olv)n(ed)f(is)h(non-linear.)227 3998 y(An)n(y)j(discon)n(tin)n(uities)
-f(in)h(the)f(Mapping)h(b)r(et)n(w)n(een)f(ph)n(ysical)g(and)g
-(graphical)f(co)r(ordinates)g(are)g(catered)h(for,)g(as)227
-4098 y(is)i(an)n(y)f(clipping)g(established)g(using)h(AST)p
-Ft(_)p Fk(CLIP)-7 b(.)0 4242 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_GRIDLINE\()c(THIS,)j(AXIS,)h(START,)f(LENGTH,)g
-(STATUS)g(\))0 4385 y Fc(Argumen)m(ts:)259 4515 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 4615 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(Plot.)259 4742 y Fc(AXIS)33 b(=)f(INTEGER)f(\(Giv)m(en\))
-427 4842 y Fk(The)g(index)g(of)f(the)h(Plot)f(axis)g(whose)g(ph)n
-(ysical)g(co)r(ordinate)f(v)-5 b(alue)31 b(is)f(to)h(b)r(e)g(v)-5
-b(aried)30 b(along)f(the)j(length)427 4941 y(of)26 b(the)h(curv)n(e)e
-(\(all)h(other)f(co)r(ordinates)g(will)h(remain)f(\014xed\).)37
-b(This)26 b(v)-5 b(alue)26 b(should)g(lie)g(in)g(the)g(range)f(from)427
-5041 y(1)i(to)h(the)g(n)n(um)n(b)r(er)f(of)h(Plot)f(axes)f(\(Naxes)i
-(attribute\).)259 5168 y Fc(ST)-8 b(AR)g(T\()33 b Fj(\003)e
-Fc(\))h(=)g(DOUBLE)g(PRECISION)g(\(Giv)m(en\))427 5267
-y Fk(An)f(arra)n(y)-7 b(,)30 b(with)h(one)f(elemen)n(t)h(for)f(eac)n(h)
-g(axis)g(of)h(the)g(Plot,)g(giving)e(the)j(ph)n(ysical)d(co)r
-(ordinates)h(of)g(the)427 5367 y(start)d(of)h(the)g(curv)n(e.)259
-5494 y Fc(LENGTH)k(=)g(DOUBLE)g(PRECISION)g(\(Giv)m(en\))427
-5593 y Fk(The)24 b(length)h(of)f(curv)n(e)f(to)h(b)r(e)h(dra)n(wn,)e
-(giv)n(en)h(as)f(an)h(incremen)n(t)g(along)f(the)h(selected)g(ph)n
-(ysical)g(axis.)35 b(This)427 5693 y(ma)n(y)27 b(b)r(e)h(p)r(ositiv)n
-(e)f(or)g(negativ)n(e.)p eop end
-%%Page: 247 257
-TeXDict begin 247 256 bop 3643 52 a FG(247)259 351 y
-Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-451 y Fk(The)c(global)e(status.)0 617 y Fc(Notes:)340
-904 y Fj(\017)45 b Fk(No)27 b(curv)n(e)f(is)h(dra)n(wn)f(if)h(the)h(ST)
--7 b(AR)g(T)27 b(arra)n(y)e(con)n(tains)h(an)n(y)g(co)r(ordinates)g
-(with)h(the)h(v)-5 b(alue)26 b(AST)p Ft(__)p Fk(BAD,)427
-1003 y(nor)h(if)h(LENGTH)g(has)f(this)h(v)-5 b(alue.)340
-1138 y Fj(\017)45 b Fk(An)28 b(error)e(results)h(if)h(the)g(base)f(F)-7
-b(rame)27 b(of)h(the)g(Plot)f(is)g(not)h(2-dimensional.)340
-1273 y Fj(\017)45 b Fk(An)30 b(error)d(also)g(results)i(if)g(the)g
-(transformation)f(b)r(et)n(w)n(een)h(the)g(curren)n(t)f(and)h(base)f(F)
--7 b(rames)28 b(of)h(the)g(Plot)427 1373 y(is)f(not)f(de\014ned)h
-(\(i.e.)38 b(the)28 b(Plot's)e(T)-7 b(ranIn)n(v)n(erse)26
-b(attribute)h(is)h(zero\).)p 0 1576 3780 12 v 0 1707
-a FA(AST)p Fe(_)p FA(GRISMMAP)1380 1706 y Fd(Create)37
-b(a)i(GrismMap)2669 1707 y FA(AST)p Fe(_)p FA(GRISMMAP)0
-1899 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(GrismMap)g(and)h(optionally)f(initialises)g(its)h(attributes.)227
-2026 y(A)j(GrismMap)g(is)f(a)h(sp)r(ecialised)f(form)h(of)f(Mapping)h
-(whic)n(h)g(transforms)e(1-dimensional)h(co)r(ordinates)f(using)227
-2126 y(the)39 b(sp)r(ectral)f(disp)r(ersion)g(equation)f(describ)r(ed)i
-(in)f(FITS-W)n(CS)h(pap)r(er)f(I)r(I)r(I)h Ft(")p Fk(Represen)n(tation)
-e(of)h(sp)r(ectral)227 2225 y(co)r(ordinates)26 b(in)i(FITS)p
-Ft(")p Fk(.)37 b(This)28 b(describ)r(es)f(the)h(disp)r(ersion)f(pro)r
-(duced)g(b)n(y)g(gratings,)f(prisms)h(and)h(grisms.)227
-2352 y(When)23 b(initially)f(created,)g(the)h(forw)n(ard)d
-(transformation)g(of)i(a)g(GrismMap)f(transforms)g(input)h
-Ft(")p Fk(grism)f(param-)227 2451 y(eter)p Ft(")k Fk(v)-5
-b(alues)24 b(in)n(to)h(output)h(w)n(a)n(v)n(elength)d(v)-5
-b(alues.)36 b(The)25 b Ft(")p Fk(grism)f(parameter)p
-Ft(")f Fk(is)i(a)g(dimensionless)g(v)-5 b(alue)25 b(whic)n(h)227
-2551 y(is)30 b(linearly)e(related)h(to)g(p)r(osition)h(on)f(the)h
-(detector.)42 b(It)30 b(is)f(de\014ned)h(in)g(FITS-W)n(CS)f(pap)r(er)g
-(I)r(I)r(I)h(as)f Ft(")p Fk(the)h(o\013set)227 2651 y(on)25
-b(the)g(detector)f(from)h(the)g(p)r(oin)n(t)g(of)g(in)n(tersection)f
-(of)h(the)g(camera)f(axis,)g(measured)g(in)h(units)h(of)e(the)i
-(e\013ectiv)n(e)227 2750 y(lo)r(cal)f(length)p Ft(")p
-Fk(.)36 b(The)25 b(units)h(in)f(whic)n(h)g(w)n(a)n(v)n(elength)f(v)-5
-b(alues)25 b(are)f(exp)r(ected)i(or)e(returned)h(is)g(determined)g(b)n
-(y)g(the)227 2850 y(v)-5 b(alues)29 b(supplied)h(for)f(the)g(GrismW)-7
-b(a)n(v)n(eR,)29 b(GrismNRP)g(and)g(GrismG)g(attribute:)40
-b(whatev)n(er)29 b(units)g(are)g(used)227 2950 y(for)e(these)h
-(attributes)f(will)h(also)f(b)r(e)h(used)f(for)g(the)h(w)n(a)n(v)n
-(elength)e(v)-5 b(alues.)0 3103 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_GRISMMAP\()38 b(OPTIONS,)j(STATUS)g(\))0
-3257 y Fc(Argumen)m(ts:)259 3397 y(OPTIONS)32 b(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-3497 y Fk(A)g(c)n(haracter)e(string)h(con)n(taining)f(an)h(optional)g
-(comma-separated)e(list)j(of)g(attribute)f(assignmen)n(ts)g(to)427
-3597 y(b)r(e)39 b(used)g(for)f(initialising)h(the)g(new)g(GrismMap.)69
-b(The)39 b(syn)n(tax)f(used)g(is)h(iden)n(tical)f(to)h(that)g(for)f
-(the)427 3696 y(AST)p Ft(_)p Fk(SET)27 b(routine.)259
-3831 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 3931 y Fk(The)c(global)e(status.)0 4097
-y Fc(Returned)32 b(V)-8 b(alue:)259 4237 y(AST)p Ft(_)p
-Fc(GRISMMAP)32 b(=)g(INTEGER)427 4337 y Fk(A)c(p)r(oin)n(ter)f(to)h
-(the)g(new)g(GrismMap.)0 4503 y Fc(Notes:)340 4790 y
-Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f
-(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427
-4889 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g
-(should)f(fail)h(for)f(an)n(y)g(reason.)p 0 5093 V 0
-5223 a FA(AST)p Fe(_)p FA(IMPOR)-11 b(T)1062 5224 y Fd(Imp)s(ort)38
-b(an)g(Ob)7 b(ject)38 b(p)s(oin)m(ter)g(to)g(the)1498
-5324 y(curren)m(t)f(con)m(text)2895 5223 y FA(AST)p Fe(_)p
-FA(IMPOR)-11 b(T)0 5494 y Fc(Description:)44 b Fk(This)23
-b(routine)e(imp)r(orts)h(an)g(Ob)5 b(ject)22 b(p)r(oin)n(ter)g(that)h
-(w)n(as)e(created)g(in)i(a)f(higher)f(or)h(lo)n(w)n(er)e(lev)n(el)i
-(con)n(text,)227 5593 y(in)n(to)36 b(the)h(curren)n(t)f(AST)h(con)n
-(text.)63 b(This)36 b(means)g(that)h(the)g(p)r(oin)n(ter)f(will)h(b)r
-(e)g(ann)n(ulled)f(when)h(the)f(curren)n(t)227 5693 y(con)n(text)27
-b(is)h(ended)g(\(with)g(AST)p Ft(_)p Fk(END\).)p eop
-end
-%%Page: 248 258
-TeXDict begin 248 257 bop 0 52 a FG(248)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(In)m(v)m(o)s(cation:)
-123 b Ft(CALL)42 b(AST_IMPORT\()d(THIS,)i(STATUS)g(\))0
-496 y Fc(Argumen)m(ts:)259 627 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))
-427 727 y Fk(Ob)5 b(ject)28 b(p)r(oin)n(ter)f(to)g(b)r(e)h(imp)r
-(orted.)259 855 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h
-(and)g(Returned\))427 954 y Fk(The)c(global)e(status.)0
-1111 y Fc(Class)31 b(Applicabilit)m(y:)259 1243 y(Ob)5
-b(ject)427 1342 y Fk(This)28 b(routine)f(applies)g(to)h(all)f(Ob)5
-b(jects.)p 0 1531 3780 12 v 0 1662 a FA(AST)p Fe(_)p
-FA(INTERSECT)1450 1663 y Fd(Find)39 b(the)g(p)s(oin)m(t)e(of)1369
-1778 y(in)m(tersection)f(b)s(et)m(w)m(een)1390 1877 y(t)m(w)m(o)h(geo)s
-(desic)h(curv)m(es)2657 1662 y FA(AST)p Fe(_)p FA(INTERSECT)0
-2056 y Fc(Description:)44 b Fk(This)26 b(routine)g(\014nds)g(the)g(co)r
-(ordinate)f(v)-5 b(alues)25 b(at)h(the)g(p)r(oin)n(t)g(of)g(in)n
-(tersection)f(b)r(et)n(w)n(een)h(t)n(w)n(o)f(geo)r(desic)227
-2156 y(curv)n(es.)35 b(Eac)n(h)25 b(curv)n(e)g(is)g(sp)r(eci\014ed)h(b)
-n(y)g(t)n(w)n(o)f(p)r(oin)n(ts)g(on)h(the)g(curv)n(e.)35
-b(It)26 b(can)g(only)f(b)r(e)h(used)g(with)g(2-dimensional)227
-2255 y(F)-7 b(rames.)227 2378 y(F)g(or)24 b(example,)h(in)g(a)f(basic)g
-(F)-7 b(rame,)25 b(it)g(will)g(\014nd)g(the)g(p)r(oin)n(t)g(of)g(in)n
-(tersection)e(b)r(et)n(w)n(een)i(t)n(w)n(o)f(straigh)n(t)f(lines.)36
-b(But)227 2477 y(for)27 b(a)h(SkyF)-7 b(rame)26 b(it)i(will)g(\014nd)g
-(an)g(in)n(tersection)e(of)i(t)n(w)n(o)f(great)f(circles.)0
-2622 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_INTERSECT\()37
-b(THIS,)42 b(A1,)g(A2,)h(B1,)f(B2,)g(CROSS,)f(STATUS)h(\))0
-2766 y Fc(Argumen)m(ts:)259 2897 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 2997 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)259 3125 y Fc(A1\()32 b(2)g(\))f(=)i(DOUBLE)f(PRECISION)f
-(\(Giv)m(en\))427 3225 y Fk(An)h(arra)n(y)d(with)j(one)f(elemen)n(t)g
-(for)g(eac)n(h)g(F)-7 b(rame)30 b(axis)h(\(Naxes)g(attribute\).)48
-b(This)32 b(should)f(con)n(tain)f(the)427 3324 y(co)r(ordinates)c(of)i
-(the)g(\014rst)f(p)r(oin)n(t)h(on)f(the)h(\014rst)g(geo)r(desic)e(curv)
-n(e.)259 3452 y Fc(A2\()32 b(2)g(\))f(=)i(DOUBLE)f(PRECISION)f(\(Giv)m
-(en\))427 3552 y Fk(An)h(arra)n(y)d(with)j(one)f(elemen)n(t)g(for)g
-(eac)n(h)g(F)-7 b(rame)30 b(axis)h(\(Naxes)g(attribute\).)48
-b(This)32 b(should)f(con)n(tain)f(the)427 3651 y(co)r(ordinates)g(of)h
-(a)f(second)g(p)r(oin)n(t)h(on)g(the)g(\014rst)g(geo)r(desic)f(curv)n
-(e.)46 b(It)31 b(should)g(not)f(b)r(e)i(co-inciden)n(t)e(with)427
-3751 y(the)e(\014rst)g(p)r(oin)n(t.)259 3879 y Fc(B1\()k(2)f(\))h(=)g
-(DOUBLE)h(PRECISION)e(\(Giv)m(en\))427 3978 y Fk(An)h(arra)n(y)d(with)j
-(one)f(elemen)n(t)g(for)g(eac)n(h)g(F)-7 b(rame)30 b(axis)h(\(Naxes)g
-(attribute\).)48 b(This)32 b(should)f(con)n(tain)f(the)427
-4078 y(co)r(ordinates)c(of)i(the)g(\014rst)f(p)r(oin)n(t)h(on)f(the)h
-(second)f(geo)r(desic)g(curv)n(e.)259 4206 y Fc(B2\()32
-b(2)f(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en\))427
-4305 y Fk(An)h(arra)n(y)d(with)j(one)f(elemen)n(t)g(for)g(eac)n(h)g(F)
--7 b(rame)30 b(axis)h(\(Naxes)g(attribute\).)48 b(This)32
-b(should)f(con)n(tain)f(the)427 4405 y(co)r(ordinates)24
-b(of)g(a)h(second)f(p)r(oin)n(t)h(on)f(the)h(second)g(geo)r(desic)e
-(curv)n(e.)35 b(It)25 b(should)g(not)g(b)r(e)g(co-inciden)n(t)f(with)
-427 4505 y(the)k(\014rst)g(p)r(oin)n(t.)259 4633 y Fc(CR)m(OSS\()k(2)f
-(\))h(=)g(DOUBLE)h(PRECISION)e(\(Returned\))427 4732
-y Fk(An)39 b(arra)n(y)d(with)j(one)e(elemen)n(t)i(for)e(eac)n(h)h(F)-7
-b(rame)37 b(axis)h(in)g(whic)n(h)g(the)h(co)r(ordinates)e(of)h(the)h
-(required)427 4832 y(in)n(tersection)27 b(will)h(b)r(e)g(returned.)259
-4960 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5059 y Fk(The)c(global)e(status.)0 5216
-y Fc(Notes:)340 5494 y Fj(\017)45 b Fk(F)-7 b(or)19 b(SkyF)-7
-b(rames)19 b(eac)n(h)g(curv)n(e)f(will)i(b)r(e)g(a)g(great)e(circle,)j
-(and)e(in)h(general)e(eac)n(h)h(pair)g(of)h(curv)n(es)e(will)i(in)n
-(tersect)427 5593 y(at)33 b(t)n(w)n(o)f(diametrically)f(opp)r(osite)i
-(p)r(oin)n(ts)f(on)h(the)g(sky)-7 b(.)51 b(The)33 b(returned)f(p)r
-(osition)g(is)h(the)g(one)f(whic)n(h)h(is)427 5693 y(closest)27
-b(to)h(p)r(oin)n(t)f(A1.)p eop end
-%%Page: 249 259
-TeXDict begin 249 258 bop 3643 52 a FG(249)340 351 y
-Fj(\017)45 b Fk(This)19 b(function)g(will)g(return)f
-Ft(")p Fk(bad)p Ft(")g Fk(co)r(ordinate)g(v)-5 b(alues)18
-b(\(AST)p Ft(__)p Fk(BAD\))i(if)f(an)n(y)f(of)g(the)i(input)f(co)r
-(ordinates)427 451 y(has)j(this)h(v)-5 b(alue,)23 b(or)f(if)h(the)g(t)n
-(w)n(o)f(p)r(oin)n(ts)g(de\014ning)g(either)h(geo)r(desic)e(are)h
-(co-inciden)n(t,)h(or)e(if)i(the)g(t)n(w)n(o)f(curv)n(es)427
-551 y(do)28 b(not)f(in)n(tersect.)340 679 y Fj(\017)45
-b Fk(The)28 b(geo)r(desic)f(curv)n(e)g(used)h(b)n(y)g(this)g(routine)g
-(is)g(the)g(path)g(of)g(shortest)g(distance)f(b)r(et)n(w)n(een)h(t)n(w)
-n(o)g(p)r(oin)n(ts,)427 779 y(as)f(de\014ned)h(b)n(y)f(the)h(AST)p
-Ft(_)p Fk(DIST)-7 b(ANCE)29 b(function.)340 908 y Fj(\017)45
-b Fk(An)28 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)h(the)g(F)-7
-b(rame)27 b(is)g(not)h(2-dimensional.)p 0 1099 3780 12
-v 0 1230 a FA(AST)p Fe(_)p FA(INTER)-15 b(V)g(AL)1456
-1231 y Fd(Create)37 b(a)h(In)m(terv)-7 b(al)2757 1230
-y FA(AST)p Fe(_)p FA(INTER)-15 b(V)g(AL)0 1398 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(In)n(terv)-5
-b(al)27 b(and)h(optionally)e(initialises)i(its)g(attributes.)227
-1521 y(A)e(In)n(terv)-5 b(al)25 b(is)g(a)g(Region)f(whic)n(h)i
-(represen)n(ts)e(upp)r(er)h(and/or)f(lo)n(w)n(er)g(limits)h(on)h(one)e
-(or)h(more)f(axes)h(of)g(a)g(F)-7 b(rame.)227 1620 y(F)g(or)37
-b(a)g(p)r(oin)n(t)g(to)g(b)r(e)h(within)g(the)g(region)e(represen)n
-(ted)g(b)n(y)h(the)h(In)n(terv)-5 b(al,)39 b(the)e(p)r(oin)n(t)h(m)n
-(ust)f(satisfy)g(all)g(the)227 1720 y(restrictions)29
-b(placed)h(on)g(all)g(the)h(axes.)44 b(The)30 b(p)r(oin)n(t)h(is)f
-(outside)g(the)h(region)e(if)h(it)h(fails)f(to)g(satisfy)g(an)n(y)g
-(one)g(of)227 1820 y(the)f(restrictions.)39 b(Eac)n(h)27
-b(axis)h(ma)n(y)f(ha)n(v)n(e)h(either)g(an)g(upp)r(er)h(limit,)h(a)e
-(lo)n(w)n(er)f(limit,)i(b)r(oth)g(or)f(neither.)39 b(If)29
-b(b)r(oth)227 1919 y(limits)c(are)e(supplied)h(but)g(are)f(in)i(rev)n
-(erse)d(order)g(\(so)i(that)g(the)g(lo)n(w)n(er)e(limit)j(is)f(greater)
-e(than)i(the)g(upp)r(er)h(limit\),)227 2019 y(then)j(the)g(in)n(terv)-5
-b(al)27 b(is)h(an)f(excluded)h(in)n(terv)-5 b(al,)27
-b(rather)f(than)i(an)f(included)i(in)n(terv)-5 b(al.)227
-2141 y(A)n(t)28 b(least)f(one)h(axis)e(limit)j(m)n(ust)e(b)r(e)h
-(supplied.)227 2264 y(Note,)33 b(The)e(In)n(terv)-5 b(al)31
-b(class)g(mak)n(es)f(no)h(allo)n(w)n(ances)f(for)h(cyclic)g(nature)g
-(of)g(some)g(co)r(ordinate)g(systems)g(\(suc)n(h)227
-2364 y(as)25 b(SkyF)-7 b(rame)24 b(co)r(ordinates\).)35
-b(A)25 b(Bo)n(x)f(should)g(usually)h(b)r(e)g(used)g(in)g(these)g(cases)
-f(since)h(this)g(requires)f(the)h(user)227 2463 y(to)j(think)g(ab)r
-(out)f(suitable)h(upp)r(er)g(and)f(lo)n(w)n(er)f(limits,)0
-2609 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_INTERVAL\()
-38 b(FRAME,)j(LBND,)h(UBND,)f(UNC,)h(OPTIONS,)f(STATUS)g(\))0
-2754 y Fc(Argumen)m(ts:)259 2886 y(FRAME)31 b(=)h(INTEGER)g(\(Giv)m
-(en\))427 2986 y Fk(A)d(p)r(oin)n(ter)g(to)f(the)i(F)-7
-b(rame)28 b(in)h(whic)n(h)g(the)g(region)e(is)i(de\014ned.)41
-b(A)29 b(deep)g(cop)n(y)f(is)g(tak)n(en)g(of)h(the)g(supplied)427
-3086 y(F)-7 b(rame.)71 b(This)39 b(means)f(that)h(an)n(y)g(subsequen)n
-(t)f(c)n(hanges)g(made)h(to)f(the)i(F)-7 b(rame)38 b(using)h(the)g
-(supplied)427 3185 y(p)r(oin)n(ter)27 b(will)h(ha)n(v)n(e)f(no)g
-(e\013ect)h(the)g(Region.)259 3314 y Fc(LBND\()k Fj(\003)g
-Fc(\))g(=)g(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427 3414
-y Fk(An)c(arra)n(y)e(with)i(one)f(elemen)n(t)h(for)f(eac)n(h)f(F)-7
-b(rame)27 b(axis)e(\(Naxes)i(attribute\))g(con)n(taining)e(the)i(lo)n
-(w)n(er)e(limits)427 3513 y(on)j(eac)n(h)e(axis.)36 b(Set)28
-b(a)g(v)-5 b(alue)27 b(to)h(AST)p Ft(__)p Fk(BAD)f(to)h(indicate)f
-(that)h(the)g(axis)f(has)g(no)g(lo)n(w)n(er)f(limit.)259
-3642 y Fc(UBND\()32 b Fj(\003)g Fc(\))g(=)g(DOUBLE)g(PRECISION)f(\(Giv)
-m(en\))427 3742 y Fk(An)26 b(arra)n(y)d(with)i(one)g(elemen)n(t)g(for)g
-(eac)n(h)f(F)-7 b(rame)25 b(axis)f(\(Naxes)h(attribute\))g(con)n
-(taining)f(the)i(upp)r(er)f(limits)427 3841 y(on)j(eac)n(h)e(axis.)36
-b(Set)28 b(a)g(v)-5 b(alue)27 b(to)h(AST)p Ft(__)p Fk(BAD)f(to)h
-(indicate)f(that)h(the)g(axis)f(has)g(no)g(upp)r(er)h(limit.)259
-3970 y Fc(UNC)k(=)g(INTEGER)f(\(Giv)m(en\))427 4070 y
-Fk(An)i(optional)e(p)r(oin)n(ter)h(to)g(an)g(existing)g(Region)f(whic)n
-(h)h(sp)r(eci\014es)g(the)h(uncertain)n(ties)e(asso)r(ciated)g(with)427
-4169 y(the)j(b)r(oundary)f(of)g(the)h(Bo)n(x)f(b)r(eing)g(created.)54
-b(The)34 b(uncertain)n(t)n(y)e(in)i(an)n(y)f(p)r(oin)n(t)h(on)f(the)h
-(b)r(oundary)f(of)427 4269 y(the)g(Bo)n(x)e(is)h(found)h(b)n(y)f
-(shifting)h(the)f(supplied)h Ft(")p Fk(uncertain)n(t)n(y)p
-Ft(")e Fk(Region)g(so)h(that)g(it)h(is)f(cen)n(tred)g(at)g(the)427
-4369 y(b)r(oundary)e(p)r(oin)n(t)h(b)r(eing)g(considered.)44
-b(The)31 b(area)e(co)n(v)n(ered)g(b)n(y)h(the)h(shifted)g(uncertain)n
-(t)n(y)f(Region)g(then)427 4468 y(represen)n(ts)g(the)i(uncertain)n(t)n
-(y)f(in)g(the)h(b)r(oundary)f(p)r(osition.)48 b(The)31
-b(uncertain)n(t)n(y)g(is)g(assumed)g(to)g(b)r(e)h(the)427
-4568 y(same)27 b(for)g(all)h(p)r(oin)n(ts.)427 4682 y(If)38
-b(supplied,)j(the)d(uncertain)n(t)n(y)f(Region)g(m)n(ust)g(b)r(e)i(of)e
-(a)g(class)g(for)g(whic)n(h)h(all)f(instances)g(are)g(cen)n(tro-)427
-4782 y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24 b(Circle,)g(Ellipse,)h
-(etc.\))36 b(or)23 b(b)r(e)i(a)e(Prism)h(con)n(taining)f(cen)n
-(tro-symetric)f(comp)r(onen)n(t)427 4881 y(Regions.)57
-b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f(will)g(b)r(e)h
-(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)427
-4981 y(uncertain)n(t)n(y)g(Region)g(using)g(the)h(supplied)g(p)r(oin)n
-(ter)g(will)f(ha)n(v)n(e)g(no)g(e\013ect)h(on)g(the)g(created)f(Bo)n
-(x.)57 b(Al-)427 5081 y(ternativ)n(ely)-7 b(,)34 b(a)f(n)n(ull)g(Ob)5
-b(ject)33 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fk(NULL\))g(ma)n(y)f(b)r(e)
-i(supplied,)h(in)e(whic)n(h)g(case)f(a)h(default)427
-5180 y(uncertain)n(t)n(y)27 b(is)g(used)h(equiv)-5 b(alen)n(t)27
-b(to)h(a)f(b)r(o)n(x)g(1.0E-6)f(of)h(the)h(size)f(of)h(the)g(Bo)n(x)e
-(b)r(eing)i(created.)427 5295 y(The)h(uncertain)n(t)n(y)f(Region)g(has)
-h(t)n(w)n(o)f(uses:)39 b(1\))29 b(when)g(the)g(AST)p
-Ft(_)p Fk(O)n(VERLAP)f(function)h(compares)e(t)n(w)n(o)427
-5394 y(Regions)j(for)g(equalit)n(y)g(the)h(uncertain)n(t)n(y)f(Region)g
-(is)g(used)h(to)g(determine)f(the)h(tolerance)f(on)g(the)h(com-)427
-5494 y(parison,)23 b(and)g(2\))g(when)g(a)f(Region)h(is)g(mapp)r(ed)g
-(in)n(to)g(a)f(di\013eren)n(t)i(co)r(ordinate)d(system)i(and)g
-(subsequen)n(tly)427 5593 y(simpli\014ed)e(\(using)f(AST)p
-Ft(_)p Fk(SIMPLIFY\),)h(the)f(uncertain)n(ties)g(are)f(used)h(to)g
-(determine)g(if)h(the)g(transformed)427 5693 y(b)r(oundary)27
-b(can)g(b)r(e)h(accurately)f(represen)n(ted)f(b)n(y)h(a)g(sp)r
-(eci\014c)h(shap)r(e)g(of)f(Region.)p eop end
-%%Page: 250 260
-TeXDict begin 250 259 bop 0 52 a FG(250)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(OPTIONS)h(=)g(CHARA)m
-(CTER)g Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-451 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h(optional)f
-(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f(to)g(b)r(e)
-427 551 y(used)28 b(for)g(initialising)f(the)i(new)f(In)n(terv)-5
-b(al.)37 b(The)28 b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)g(that)g
-(for)g(the)g(AST)p Ft(_)p Fk(SET)427 650 y(routine.)259
-790 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 889 y Fk(The)c(global)e(status.)0 1065
-y Fc(Returned)32 b(V)-8 b(alue:)259 1214 y(AST)p Ft(_)p
-Fc(INTER)d(V)g(AL)33 b(=)f(INTEGER)427 1314 y Fk(A)c(p)r(oin)n(ter)f
-(to)h(the)g(new)g(In)n(terv)-5 b(al.)0 1489 y Fc(Notes:)340
-1785 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e
-(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 1885 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)-2
-2060 y Fc(Status)33 b(Handling)n(:)227 2206 y Fk(The)d(protected)g(in)n
-(terface)f(to)g(this)h(function)h(includes)f(an)f(extra)g(parameter)f
-(at)i(the)g(end)g(of)g(the)g(parameter)227 2306 y(list)37
-b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)
-r(oin)n(ter)g(to)h(the)g(in)n(teger)e(inherited)i(status)f(v)-5
-b(ariable:)54 b Ft(")p Fk(in)n(t)227 2405 y Fj(\003)p
-Fk(status)p Ft(")p Fk(.)p 0 2618 3780 12 v 0 2749 a FA(AST)p
-Fe(_)p FA(INTRAMAP)272 b Fd(Create)37 b(an)h(In)m(traMap)273
-b FA(AST)p Fe(_)p FA(INTRAMAP)0 2951 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(In)n(traMap)g(and)g
-(optionally)g(initialises)g(its)h(attributes.)227 3082
-y(An)k(In)n(traMap)e(is)h(a)g(sp)r(ecialised)g(form)g(of)g(Mapping)g
-(whic)n(h)g(encapsulates)f(a)h(priv)-5 b(ately-de\014ned)31
-b(co)r(ordinate)227 3182 y(transformation)18 b(routine)h(\(e.g.)34
-b(written)19 b(in)h(F)-7 b(ortran\))18 b(so)h(that)g(it)h(ma)n(y)e(b)r
-(e)i(used)f(lik)n(e)g(an)n(y)g(other)f(AST)i(Mapping.)227
-3281 y(This)28 b(allo)n(ws)e(y)n(ou)h(to)g(create)g(Mappings)g(that)h
-(p)r(erform)f(an)n(y)g(conceiv)-5 b(able)27 b(co)r(ordinate)f
-(transformation.)227 3412 y(Ho)n(w)n(ev)n(er,)k(an)h(In)n(traMap)g(is)g
-(in)n(tended)g(for)g(use)g(within)h(a)f(single)f(program)g(or)g(a)h
-(priv)-5 b(ate)31 b(suite)g(of)g(soft)n(w)n(are,)227
-3512 y(where)24 b(all)g(programs)d(ha)n(v)n(e)i(access)g(to)h(the)g
-(same)g(co)r(ordinate)f(transformation)f(functions)j(\(i.e.)36
-b(can)23 b(b)r(e)i(link)n(ed)227 3612 y(against)40 b(them\).)76
-b(In)n(traMaps)39 b(should)h(not)h(normally)e(b)r(e)i(stored)f(in)g
-(datasets)g(whic)n(h)g(ma)n(y)g(b)r(e)h(exp)r(orted)227
-3711 y(for)34 b(pro)r(cessing)f(b)n(y)h(other)g(soft)n(w)n(are,)g
-(since)g(that)h(soft)n(w)n(are)e(will)h(not)h(ha)n(v)n(e)e(the)i
-(necessary)d(transformation)227 3811 y(functions)c(a)n(v)-5
-b(ailable,)27 b(resulting)g(in)g(an)h(error.)227 3942
-y(Y)-7 b(ou)37 b(m)n(ust)g(register)e(an)n(y)h(co)r(ordinate)f
-(transformation)g(functions)i(to)f(b)r(e)h(used)g(using)f(AST)p
-Ft(_)p Fk(INTRAREG)227 4042 y(b)r(efore)28 b(creating)e(an)h(In)n
-(traMap.)0 4205 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_INTRAMAP\()38 b(NAME,)k(NIN,)g(NOUT,)f(OPTIONS,)f(STATUS)i
-(\))0 4367 y Fc(Argumen)m(ts:)259 4517 y(NAME)31 b(=)h(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-4617 y Fk(A)h(c)n(haracter)c(string)j(con)n(taining)e(the)j(name)e(of)h
-(the)h(transformation)d(routine)h(to)h(use)g(\(whic)n(h)g(should)427
-4717 y(previously)g(ha)n(v)n(e)g(b)r(een)i(registered)e(using)h(AST)p
-Ft(_)p Fk(INTRAREG\).)h(This)f(name)g(is)g(case)g(sensitiv)n(e.)53
-b(All)427 4816 y(white)28 b(space)f(will)h(b)r(e)g(remo)n(v)n(ed)e(b)r
-(efore)h(use.)259 4956 y Fc(NIN)32 b(=)g(INTEGER)f(\(Giv)m(en\))427
-5055 y Fk(The)e(n)n(um)n(b)r(er)g(of)g(input)h(co)r(ordinates.)40
-b(This)29 b(m)n(ust)h(b)r(e)f(compatible)g(with)h(the)f(n)n(um)n(b)r
-(er)g(of)g(input)h(co)r(or-)427 5155 y(dinates)25 b(accepted)g(b)n(y)g
-(the)g(transformation)e(routine)i(\(as)g(sp)r(eci\014ed)g(when)g(this)g
-(routine)g(w)n(as)f(registered)427 5255 y(using)k(AST)p
-Ft(_)p Fk(INTRAREG\).)259 5394 y Fc(NOUT)k(=)g(INTEGER)g(\(Giv)m(en\))
-427 5494 y Fk(The)22 b(n)n(um)n(b)r(er)g(of)f(output)i(co)r(ordinates.)
-33 b(This)22 b(m)n(ust)g(b)r(e)g(compatible)g(with)g(the)g(n)n(um)n(b)r
-(er)g(of)g(output)g(co)r(or-)427 5593 y(dinates)h(pro)r(duced)g(b)n(y)g
-(the)h(transformation)e(routine)g(\(as)h(sp)r(eci\014ed)h(when)f(this)h
-(routine)f(w)n(as)f(registered)427 5693 y(using)28 b(AST)p
-Ft(_)p Fk(INTRAREG\).)p eop end
-%%Page: 251 261
-TeXDict begin 251 260 bop 3643 52 a FG(251)259 351 y
-Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 451 y Fk(A)22 b(c)n(haracter)e
-(string)h(con)n(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g
-(attribute)g(assignmen)n(ts)f(to)g(b)r(e)427 551 y(used)j(for)f
-(initialising)g(the)h(new)g(In)n(traMap.)34 b(The)24
-b(syn)n(tax)e(used)i(is)f(iden)n(tical)h(to)f(that)h(for)f(the)h(AST)p
-Ft(_)p Fk(SET)427 650 y(routine.)259 794 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 893
-y Fk(The)c(global)e(status.)0 1077 y Fc(Returned)32 b(V)-8
-b(alue:)259 1235 y(AST)p Ft(_)p Fc(INTRAMAP)32 b(=)g(INTEGER)427
-1334 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(In)n(traMap.)0
-1518 y Fc(Notes:)340 1822 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 1921 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 2142 3780 12 v 0 2273 a FA(AST)p Fe(_)p FA(INTRAREG)1233
-2274 y Fd(Register)38 b(a)g(transformation)1355 2389
-y(routine)f(for)h(use)h(b)m(y)f(an)1648 2502 y(In)m(traMap)2703
-2273 y FA(AST)p Fe(_)p FA(INTRAREG)0 2712 y Fc(Description:)44
-b Fk(This)35 b(function)g(registers)e(a)h(priv)-5 b(ately-de\014ned)34
-b(co)r(ordinate)f(transformation)g(routine)h(written)g(in)227
-2812 y(F)-7 b(ortran)18 b(so)h(that)h(it)g(ma)n(y)e(b)r(e)i(used)f(to)h
-(create)e(an)h(In)n(traMap.)33 b(An)20 b(In)n(traMap)e(is)i(a)f(sp)r
-(ecialised)g(form)g(of)g(Mapping)227 2911 y(whic)n(h)27
-b(encapsulates)f(the)i(F)-7 b(ortran)26 b(routine)g(so)h(that)g(it)h
-(ma)n(y)e(b)r(e)h(used)g(lik)n(e)g(an)n(y)f(other)h(AST)g(Mapping.)37
-b(This)227 3011 y(allo)n(ws)26 b(y)n(ou)h(to)h(create)e(Mappings)h
-(that)h(p)r(erform)f(an)n(y)g(conceiv)-5 b(able)27 b(co)r(ordinate)g
-(transformation.)227 3146 y(Registration)35 b(of)h(relev)-5
-b(an)n(t)36 b(transformation)e(routines)i(is)g(required)f(b)r(efore)h
-(using)g(the)g(AST)p Ft(_)p Fk(INTRAMAP)227 3246 y(constructor)28
-b(function)i(to)g(create)e(an)i(In)n(traMap)e(or)h(reading)f(an)h
-(external)g(represen)n(tation)f(of)h(an)h(In)n(traMap)227
-3346 y(from)e(a)f(Channel.)0 3517 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_INTRAREG\()c(NAME,)j(NIN,)h(NOUT,)g(TRAN,)f(FLAGS,)g
-(PURPOSE,)g(AUTHOR,)f(CONTACT,)227 3616 y(STATUS)h(\))0
-3787 y Fc(Argumen)m(ts:)259 3945 y(NAME)31 b(=)h(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-4045 y Fk(A)23 b(c)n(haracter)e(string)g(con)n(taining)h(a)g(unique)h
-(name)f(to)g(b)r(e)h(asso)r(ciated)e(with)i(the)g(transformation)e
-(routine)427 4144 y(in)32 b(order)e(to)i(iden)n(tify)g(it.)49
-b(This)31 b(name)h(is)f(case)g(sensitiv)n(e.)48 b(All)32
-b(white)g(space)e(will)i(b)r(e)g(remo)n(v)n(ed)e(b)r(efore)427
-4244 y(use.)259 4388 y Fc(NIN)i(=)g(INTEGER)f(\(Giv)m(en\))427
-4487 y Fk(The)c(n)n(um)n(b)r(er)f(of)g(input)h(co)r(ordinates)d
-(accepted)i(b)n(y)g(the)h(transformation)d(routine)i(\(i.e.)37
-b(the)27 b(n)n(um)n(b)r(er)f(of)427 4587 y(dimensions)33
-b(of)f(the)h(space)f(in)h(whic)n(h)f(the)h(input)h(p)r(oin)n(ts)e
-(reside\).)51 b(A)33 b(v)-5 b(alue)33 b(of)f(AST)p Ft(__)p
-Fk(ANY)h(ma)n(y)f(b)r(e)427 4686 y(giv)n(en)27 b(if)h(the)g(routine)f
-(is)h(able)f(to)h(accommo)r(date)e(a)h(v)-5 b(ariable)27
-b(n)n(um)n(b)r(er)g(of)h(input)g(co)r(ordinates.)259
-4830 y Fc(NOUT)k(=)g(INTEGER)g(\(Giv)m(en\))427 4930
-y Fk(The)c(n)n(um)n(b)r(er)g(of)g(output)h(co)r(ordinates)d(pro)r
-(duced)i(b)n(y)g(the)g(transformation)e(routine)i(\(i.e.)38
-b(the)29 b(n)n(um)n(b)r(er)427 5029 y(of)i(dimensions)f(of)h(the)g
-(space)f(in)h(whic)n(h)f(the)h(output)h(p)r(oin)n(ts)e(reside\).)46
-b(A)31 b(v)-5 b(alue)31 b(of)f(AST)p Ft(__)p Fk(ANY)h(ma)n(y)427
-5129 y(b)r(e)d(giv)n(en)f(if)h(the)g(routine)f(is)h(able)f(to)h(pro)r
-(duce)f(a)g(v)-5 b(ariable)26 b(n)n(um)n(b)r(er)i(of)f(output)i(co)r
-(ordinates.)259 5273 y Fc(TRAN)j(=)g(SUBR)m(OUTINE)g(\(Giv)m(en\))427
-5372 y Fk(The)20 b(transformation)d(routine)i(to)g(b)r(e)h(registered.)
-33 b(This)19 b(routine)g(should)g(p)r(erform)g(whatev)n(er)f(co)r
-(ordinate)427 5472 y(transformations)26 b(are)h(required)f(and)i
-(should)f(ha)n(v)n(e)f(an)i(in)n(terface)f(lik)n(e)g(AST)p
-Ft(_)p Fk(TRANN)h(\(q.v.\).)427 5593 y(This)33 b(transformation)f
-(routine)h(m)n(ust)g(also)f(app)r(ear)g(in)i(an)f(EXTERNAL)g(statemen)n
-(t)g(in)g(the)h(routine)427 5693 y(whic)n(h)28 b(calls)f(AST)p
-Ft(_)p Fk(INTRAREG.)p eop end
-%%Page: 252 262
-TeXDict begin 252 261 bop 0 52 a FG(252)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(FLA)m(GS)i(=)f
-(INTEGER)f(\(Giv)m(en\))427 451 y Fk(This)j(v)-5 b(alue)33
-b(ma)n(y)g(b)r(e)h(used)g(to)f(supply)h(a)f(set)g(of)h(\015ags)e(whic)n
-(h)i(describ)r(e)f(the)h(transformation)e(routine)427
-551 y(and)g(whic)n(h)h(ma)n(y)e(a\013ect)i(the)g(b)r(eha)n(viour)e(of)h
-(an)n(y)g(In)n(traMap)f(whic)n(h)h(uses)g(it.)52 b(Often,)34
-b(a)e(v)-5 b(alue)32 b(of)h(zero)427 650 y(will)k(b)r(e)f(giv)n(en)f
-(here,)j(but)f(y)n(ou)e(ma)n(y)h(also)f(supply)h(the)g(sum)h(of)f(a)f
-(set)h(of)g(\015ags)g(as)f(describ)r(ed)h(in)g(the)427
-750 y Ft(")p Fk(T)-7 b(ransformation)26 b(Flags)p Ft(")g
-Fk(section)h(\(b)r(elo)n(w\).)259 883 y Fc(PURPOSE)32
-b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))
-427 983 y Fk(A)e(c)n(haracter)c(string)j(con)n(taining)f(a)g(short)g
-(\(one)h(line\))h(textual)f(commen)n(t)g(to)f(describ)r(e)h(the)g(purp)
-r(ose)g(of)427 1083 y(the)f(transformation)e(routine.)259
-1216 y Fc(A)m(UTHOR)32 b(=)g(CHARA)m(CTER)g Fj(\003)f
-Fc(\()h Fj(\003)g Fc(\))g(\(Giv)m(en\))427 1316 y Fk(A)c(c)n(haracter)e
-(string)h(con)n(taining)f(the)i(name)g(of)f(the)h(author)f(of)g(the)h
-(transformation)e(routine.)259 1449 y Fc(CONT)-8 b(A)m(CT)33
-b(=)f(CHARA)m(CTER)f Fj(\003)h Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))
-427 1549 y Fk(A)37 b(c)n(haracter)d(string)i(con)n(taining)f(con)n
-(tact)h(details)g(for)f(the)i(author)e(of)i(the)f(transformation)f
-(routine)427 1649 y(\(e.g.)43 b(an)30 b(e-mail)f(or)g(WWW)i(address\).)
-42 b(If)30 b(an)n(y)f(In)n(traMap)g(whic)n(h)h(uses)f(this)h
-(transformation)e(routine)427 1748 y(is)g(exp)r(orted)f(as)g(part)g(of)
-g(a)g(dataset)g(to)h(an)f(external)g(user)g(who)g(do)r(es)g(not)h(ha)n
-(v)n(e)e(access)h(to)g(the)h(routine,)427 1848 y(then)g(these)g(con)n
-(tact)f(details)g(should)h(allo)n(w)e(them)i(to)g(obtain)f(the)h
-(necessary)e(co)r(de.)259 1981 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 2081
-y Fk(The)c(global)e(status.)0 2244 y Fc(Notes:)340 2528
-y Fj(\017)45 b Fk(Bew)n(are)27 b(that)i(an)f(external)f(represen)n
-(tation)g(of)h(an)g(In)n(traMap)f(\(created)h(b)n(y)g(writing)g(it)g
-(to)h(a)e(Channel\))427 2628 y(will)37 b(not)g(include)g(the)h(co)r
-(ordinate)d(transformation)h(routine)g(whic)n(h)h(it)g(uses,)i(so)d
-(will)h(only)g(refer)f(to)427 2727 y(the)f(routine)e(b)n(y)h(its)g
-(name)f(\(as)h(assigned)e(using)i(AST)p Ft(_)p Fk(INTRAREG\).)g
-(Consequen)n(tly)-7 b(,)35 b(the)f(external)427 2827
-y(represen)n(tation)i(cannot)g(b)r(e)i(utilised)f(b)n(y)g(another)f
-(program)f(unless)i(that)h(program)d(has)h(also)g(regis-)427
-2927 y(tered)31 b(the)g(same)f(transformation)f(routine)h(with)h(the)g
-(same)g(name)f(using)g(an)h(iden)n(tical)f(in)n(v)n(o)r(cation)g(of)427
-3026 y(AST)p Ft(_)p Fk(INTRAREG.)g(If)f(no)g(suc)n(h)g(registration)e
-(has)i(b)r(een)g(p)r(erformed,)g(then)h(attempting)f(to)g(read)f(the)
-427 3126 y(external)f(represen)n(tation)f(will)i(result)f(in)h(an)f
-(error.)340 3259 y Fj(\017)45 b Fk(Y)-7 b(ou)37 b(ma)n(y)f(use)g(AST)p
-Ft(_)p Fk(INTRAREG)h(to)g(register)e(a)h(transformation)f(routine)h
-(with)h(the)g(same)f(name)427 3359 y(more)23 b(than)h(once,)g(but)g
-(only)f(if)h(the)g(argumen)n(ts)e(supplied)i(are)f(iden)n(tical)g(on)g
-(eac)n(h)g(o)r(ccasion)f(\(i.e)i(there)g(is)427 3459
-y(no)f(w)n(a)n(y)e(of)i(c)n(hanging)e(things)i(once)f(a)g(routine)g
-(has)h(b)r(een)g(successfully)f(registered)f(under)i(a)f(giv)n(en)g
-(name,)427 3558 y(and)32 b(attempting)h(to)e(do)h(so)g(will)g(result)g
-(in)g(an)g(error\).)48 b(This)32 b(feature)g(simply)g(allo)n(ws)f
-(registration)f(to)427 3658 y(b)r(e)25 b(p)r(erformed)e(indep)r(enden)n
-(tly)-7 b(,)26 b(but)f(consisten)n(tly)-7 b(,)24 b(at)g(sev)n(eral)e
-(places)i(within)h(y)n(our)d(program,)h(without)427 3758
-y(ha)n(ving)k(to)g(c)n(hec)n(k)g(whether)g(it)h(has)g(already)e(b)r
-(een)i(done.)340 3891 y Fj(\017)45 b Fk(If)24 b(an)f(error)f(o)r(ccurs)
-g(in)i(the)f(transformation)f(routine,)i(this)g(ma)n(y)e(b)r(e)i
-(indicated)g(b)n(y)f(setting)g(its)h(ST)-7 b(A)g(TUS)427
-3991 y(argumen)n(t)33 b(to)h(an)f(error)f(v)-5 b(alue)34
-b(b)r(efore)f(it)h(returns.)55 b(This)34 b(will)g(immediately)g
-(terminate)f(the)h(curren)n(t)427 4090 y(AST)27 b(op)r(eration.)35
-b(The)26 b(error)e(v)-5 b(alue)26 b(AST)p Ft(__)p Fk(ITFER)g(is)f(a)n
-(v)-5 b(ailable)25 b(for)h(this)g(purp)r(ose,)g(but)h(other)e(v)-5
-b(alues)427 4190 y(ma)n(y)25 b(also)f(b)r(e)h(used)h(\(e.g.)35
-b(if)26 b(y)n(ou)f(wish)g(to)g(distinguish)g(di\013eren)n(t)g(t)n(yp)r
-(es)g(of)h(error\).)34 b(The)25 b(AST)p Ft(__)p Fk(ITFER)427
-4290 y(error)h(v)-5 b(alue)27 b(is)h(de\014ned)g(in)g(the)g(AST)p
-Ft(_)p Fk(ERR)f(include)h(\014le.)-2 4453 y Fc(T)-8 b(ransformation)33
-b(Flags)n(:)227 4599 y Fk(The)39 b(follo)n(wing)e(\015ags)h(are)f
-(de\014ned)i(in)g(the)g(AST)p Ft(_)p Fk(P)-7 b(AR)38
-b(include)h(\014le)g(and)f(allo)n(w)f(y)n(ou)h(to)g(pro)n(vide)g
-(further)227 4699 y(information)25 b(ab)r(out)h(the)h(nature)e(of)h
-(the)g(transformation)e(routine.)36 b(Ha)n(ving)25 b(selected)h(the)g
-(set)g(of)g(\015ags)f(whic)n(h)227 4798 y(apply)-7 b(,)28
-b(y)n(ou)f(should)g(supply)h(the)g(sum)f(of)h(their)f(v)-5
-b(alues)28 b(as)f(the)h(FLA)n(GS)g(argumen)n(t)e(to)i(AST)p
-Ft(_)p Fk(INTRAREG.)340 5061 y Fj(\017)45 b Fk(AST)p
-Ft(__)p Fk(NOFWD:)c(If)g(this)f(\015ag)f(is)h(set,)k(it)c(indicates)g
-(that)h(the)f(transformation)f(routine)h(do)r(es)g(not)427
-5161 y(implemen)n(t)24 b(a)f(forw)n(ard)e(co)r(ordinate)h
-(transformation.)33 b(In)24 b(this)f(case,)g(an)n(y)f(In)n(traMap)g
-(whic)n(h)h(uses)g(it)g(will)427 5261 y(ha)n(v)n(e)k(a)h(T)-7
-b(ranF)g(orw)n(ard)26 b(attribute)i(v)-5 b(alue)28 b(of)h(zero)e(and)h
-(the)g(transformation)f(routine)h(itself)g(will)h(not)f(b)r(e)427
-5360 y(called)c(with)g(its)h(F)n(OR)-9 b(W)g(ARD)24 b(argumen)n(t)f
-(set)h(to)g(.TR)n(UE..)35 b(By)24 b(default,)h(it)f(is)g(assumed)g
-(that)g(a)f(forw)n(ard)427 5460 y(transformation)j(is)i(pro)n(vided.)
-340 5593 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(NOINV:)25
-b(If)g(this)g(\015ag)f(is)h(set,)h(it)f(indicates)f(that)i(the)f
-(transformation)e(routine)h(do)r(es)h(not)g(imple-)427
-5693 y(men)n(t)e(an)g(in)n(v)n(erse)e(co)r(ordinate)g(transformation.)
-34 b(In)23 b(this)g(case,)f(an)n(y)g(In)n(traMap)g(whic)n(h)h(uses)f
-(it)h(will)g(ha)n(v)n(e)p eop end
-%%Page: 253 263
-TeXDict begin 253 262 bop 3643 52 a FG(253)427 351 y
-Fk(a)28 b(T)-7 b(ranIn)n(v)n(erse)26 b(attribute)j(v)-5
-b(alue)28 b(of)g(zero)f(and)h(the)h(transformation)e(routine)h(itself)g
-(will)h(not)f(b)r(e)h(called)427 451 y(with)37 b(its)g(F)n(OR)-9
-b(W)g(ARD)37 b(argumen)n(t)e(set)h(to)h(.F)-9 b(ALSE..)63
-b(By)36 b(default,)j(it)e(is)f(assumed)g(that)h(an)f(in)n(v)n(erse)427
-551 y(transformation)26 b(is)i(pro)n(vided.)340 689 y
-Fj(\017)45 b Fk(AST)p Ft(__)p Fk(SIMPFI:)27 b(Y)-7 b(ou)28
-b(ma)n(y)f(set)h(this)g(\015ag)f(if)h(applying)f(the)h(transformation)e
-(routine's)h(forw)n(ard)f(co)r(or-)427 788 y(dinate)h(transformation,)f
-(follo)n(w)n(ed)g(immediately)i(b)n(y)e(the)i(matc)n(hing)f(in)n(v)n
-(erse)e(transformation,)h(should)427 888 y(alw)n(a)n(ys)37
-b(restore)f(the)j(original)e(set)h(of)g(co)r(ordinates.)68
-b(It)38 b(indicates)g(that)h(AST)f(ma)n(y)g(replace)f(suc)n(h)h(a)427
-988 y(sequence)32 b(of)f(op)r(erations)g(b)n(y)g(an)h(iden)n(tit)n(y)g
-(Mapping)f(\(a)h(UnitMap\))h(if)f(it)g(is)g(encoun)n(tered)f(while)h
-(sim-)427 1087 y(plifying)i(a)f(comp)r(ound)g(Mapping)g(\(e.g.)54
-b(using)34 b(AST)p Ft(_)p Fk(SIMPLIFY\).)f(It)h(is)f(not)h(necessary)d
-(that)j(b)r(oth)427 1187 y(transformations)26 b(ha)n(v)n(e)g(actually)h
-(b)r(een)h(implemen)n(ted.)340 1325 y Fj(\017)45 b Fk(AST)p
-Ft(__)p Fk(SIMPIF:)24 b(Y)-7 b(ou)25 b(ma)n(y)e(set)i(this)f(\015ag)g
-(if)h(applying)f(the)g(transformation)f(routine's)h(in)n(v)n(erse)f(co)
-r(ordi-)427 1425 y(nate)32 b(transformation,)e(follo)n(w)n(ed)g
-(immediately)i(b)n(y)f(the)h(matc)n(hing)f(forw)n(ard)e
-(transformation,)i(should)427 1524 y(alw)n(a)n(ys)37
-b(restore)f(the)j(original)e(set)h(of)g(co)r(ordinates.)68
-b(It)38 b(indicates)g(that)h(AST)f(ma)n(y)g(replace)f(suc)n(h)h(a)427
-1624 y(sequence)32 b(of)f(op)r(erations)g(b)n(y)g(an)h(iden)n(tit)n(y)g
-(Mapping)f(\(a)h(UnitMap\))h(if)f(it)g(is)g(encoun)n(tered)f(while)h
-(sim-)427 1724 y(plifying)i(a)f(comp)r(ound)g(Mapping)g(\(e.g.)54
-b(using)34 b(AST)p Ft(_)p Fk(SIMPLIFY\).)f(It)h(is)f(not)h(necessary)d
-(that)j(b)r(oth)427 1823 y(transformations)26 b(ha)n(v)n(e)g(actually)h
-(b)r(een)h(implemen)n(ted.)p 0 2033 3780 12 v 0 2164
-a FA(AST)p Fe(_)p FA(INVER)-11 b(T)1443 2163 y Fd(In)m(v)m(ert)37
-b(a)i(Mapping)2920 2164 y FA(AST)p Fe(_)p FA(INVER)-11
-b(T)0 2363 y Fc(Description:)44 b Fk(This)30 b(routine)g(in)n(v)n(erts)
-f(a)g(Mapping)h(b)n(y)g(rev)n(ersing)e(the)i(b)r(o)r(olean)f(sense)h
-(of)g(its)g(In)n(v)n(ert)f(attribute.)44 b(If)227 2463
-y(this)34 b(attribute)g(is)f(zero)g(\(the)h(default\),)i(the)e(Mapping)
-f(will)h(transform)e(co)r(ordinates)g(in)i(the)g(w)n(a)n(y)e(sp)r
-(eci\014ed)227 2562 y(when)f(it)h(w)n(as)e(created.)46
-b(If)31 b(it)g(is)g(non-zero,)f(the)h(input)h(and)f(output)g(co)r
-(ordinates)f(will)h(b)r(e)g(in)n(ter-c)n(hanged)e(so)227
-2662 y(that)24 b(the)f(direction)g(of)g(the)g(Mapping)g(is)g(rev)n
-(ersed.)34 b(This)23 b(will)g(cause)g(it)g(to)g(displa)n(y)g(the)g(in)n
-(v)n(erse)f(of)h(its)g(original)227 2762 y(b)r(eha)n(viour.)0
-2922 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_INVERT\()d(THIS,)
-i(STATUS)g(\))0 3082 y Fc(Argumen)m(ts:)259 3229 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 3329 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(Mapping.)259 3467 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 3566
-y Fk(The)c(global)e(status.)p 0 3776 V 0 3907 a FA(AST)p
-Fe(_)p FA(ISA)p Fb(<)p FA(CLASS)p Fb(>)1336 3908 y Fd(T)-10
-b(est)39 b(mem)m(b)s(ership)e(of)i(a)1416 4023 y(class)f(b)m(y)h(an)g
-(Ob)7 b(ject)2611 3907 y FA(AST)p Fe(_)p FA(ISA)p Fb(<)p
-FA(CLASS)p Fb(>)0 4222 y Fc(Description:)44 b Fk(This)26
-b(is)f(a)g(family)g(of)g(functions)h(whic)n(h)f(test)g(whether)h(an)f
-(Ob)5 b(ject)25 b(is)g(a)g(mem)n(b)r(er)g(of)g(the)h(class)e(called)227
-4322 y Fm(<)p Fk(CLASS)p Fm(>)p Fk(,)k(or)e(of)i(an)n(y)f(class)f
-(deriv)n(ed)h(from)g(it.)0 4482 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_ISA)p Fm(<)p Ft(CLASS)p Fm(>)p
-Ft(\()37 b(THIS,)42 b(STATUS)f(\))0 4642 y Fc(Argumen)m(ts:)259
-4789 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 4889
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject.)259 5027
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 5127 y Fk(The)c(global)e(status.)0 5299 y Fc(Class)31
-b(Applicabilit)m(y:)259 5446 y(Ob)5 b(ject)427 5546 y
-Fk(These)28 b(functions)f(apply)h(to)f(all)h(Ob)5 b(jects.)0
-5718 y Fc(Returned)32 b(V)-8 b(alue:)p eop end
-%%Page: 254 264
-TeXDict begin 254 263 bop 0 52 a FG(254)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(AST)p
-Ft(_)p Fc(ISA)p Fm(<)p Fc(CLASS)p Fm(>)h Fc(=)g(LOGICAL)427
-451 y Fk(.TR)n(UE.)f(if)h(the)f(Ob)5 b(ject)31 b(b)r(elongs)f(to)h(the)
-h(class)e(called)g Fm(<)p Fk(CLASS)p Fm(>)h Fk(\(or)f(to)h(a)g(class)f
-(deriv)n(ed)g(from)h(it\),)427 551 y(otherwise)c(.F)-9
-b(ALSE..)0 724 y Fc(Examples:)227 876 y Fy(MEMBER)46
-b(=)i(AST)p Ft(_)p Fy(ISAFRAME\()c(OBJ,)i(STATUS)h(\);)427
-971 y Fk(T)-7 b(ests)33 b(whether)g(Ob)5 b(ject)33 b(OBJ)f(is)h(a)f
-(mem)n(b)r(er)h(of)g(the)g(F)-7 b(rame)33 b(class,)g(or)f(of)h(an)n(y)f
-(class)g(deriv)n(ed)g(from)h(a)427 1071 y(F)-7 b(rame.)0
-1244 y Fc(Notes:)340 1538 y Fj(\017)45 b Fk(Ev)n(ery)31
-b(AST)h(class)f(pro)n(vides)g(a)h(function)g(\(AST)p
-Ft(_)p Fk(ISA)p Fm(<)p Fk(CLASS)p Fm(>)p Fk(\))h(of)f(this)g(form,)h
-(where)f Fm(<)p Fk(CLASS)p Fm(>)427 1638 y Fk(should)c(b)r(e)g
-(replaced)e(b)n(y)i(the)g(class)e(name.)340 1776 y Fj(\017)45
-b Fk(This)25 b(function)h(attempts)f(to)g(execute)f(ev)n(en)h(if)g(ST)
--7 b(A)g(TUS)26 b(is)f(set)g(to)f(an)h(error)e(v)-5 b(alue)25
-b(on)f(en)n(try)-7 b(,)25 b(although)427 1876 y(no)j(further)f(error)f
-(rep)r(ort)h(will)g(b)r(e)h(made)g(if)g(it)g(subsequen)n(tly)f(fails)g
-(under)h(these)g(circumstances.)340 2015 y Fj(\017)45
-b Fk(A)27 b(v)-5 b(alue)27 b(of)f(.F)-9 b(ALSE.)27 b(will)g(b)r(e)g
-(returned)f(if)i(this)f(function)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)35 b(In)27 b(particular,)427 2114 y(it)h(will)g(fail)g(if)g
-(the)g(p)r(oin)n(ter)f(supplied)h(do)r(es)f(not)h(iden)n(tify)g(an)f
-(Ob)5 b(ject)28 b(of)f(an)n(y)g(sort.)p 0 2325 3780 12
-v 0 2456 a FA(AST)p Fe(_)p FA(KEYMAP)1435 2455 y Fd(Create)37
-b(a)h(KeyMap)2832 2456 y FA(AST)p Fe(_)p FA(KEYMAP)0
-2656 y Fc(Description:)44 b Fk(This)19 b(function)g(creates)f(a)g(new)h
-(empt)n(y)g(KeyMap)e(and)i(optionally)f(initialises)g(its)h
-(attributes.)34 b(En)n(tries)227 2755 y(can)h(then)h(b)r(e)g(added)f
-(to)h(the)f(KeyMap)g(using)g(the)h(AST)p Ft(_)p Fk(MAPPUT0)p
-Fm(<)p Fk(X)p Fm(>)e Fk(and)h(AST)p Ft(_)p Fk(MAPPUT1)p
-Fm(<)p Fk(X)p Fm(>)227 2855 y Fk(functions.)227 2985
-y(The)30 b(KeyMap)f(class)g(is)h(used)g(to)g(store)f(a)g(set)h(of)g(v)
--5 b(alues)29 b(with)i(asso)r(ciated)d(k)n(eys)h(whic)n(h)h(iden)n
-(tify)h(the)f(v)-5 b(alues.)227 3085 y(The)32 b(k)n(eys)e(are)g
-(strings)g(\(case-sensitiv)n(e,)h(trailing)f(spaces)g(are)g(ignored\),)
-i(and)f(the)g(data)g(t)n(yp)r(e)g(of)g(the)h(v)-5 b(alues)227
-3184 y(can)27 b(b)r(e)h(in)n(teger,)f(\015oating)f(p)r(oin)n(t,)i(c)n
-(haracter)d(string)i(or)g(AST)g(Ob)5 b(ject)28 b(p)r(oin)n(ter.)36
-b(Eac)n(h)26 b(v)-5 b(alue)27 b(can)g(b)r(e)h(a)f(scalar)227
-3284 y(or)j(a)g(one-dimensional)g(v)n(ector.)44 b(A)31
-b(KeyMap)f(is)h(conceptually)f(similar)f(to)i(a)f(Mapping)g(in)h(that)g
-(a)g(KeyMap)227 3384 y(transforms)e(an)h(input)h(in)n(to)f(an)g(output)
-h(-)f(the)g(input)h(is)g(the)f(k)n(ey)-7 b(,)31 b(and)f(the)g(output)h
-(is)f(the)h(v)-5 b(alue)30 b(asso)r(ciated)227 3483 y(with)22
-b(the)h(k)n(ey)-7 b(.)34 b(Ho)n(w)n(ev)n(er,)21 b(this)h(is)f(only)h(a)
-f(conceptual)g(similarit)n(y)-7 b(,)22 b(and)g(it)g(should)g(b)r(e)g
-(noted)f(that)h(the)h(KeyMap)227 3583 y(class)28 b(inherits)h(from)g
-(the)g(Ob)5 b(ject)29 b(class)f(rather)g(than)h(the)h(Mapping)e(class.)
-40 b(The)29 b(metho)r(ds)h(of)f(the)g(Mapping)227 3682
-y(class)e(cannot)g(b)r(e)h(used)g(with)g(a)f(KeyMap.)0
-3843 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_KEYMAP\()c
-(OPTIONS,)h(STATUS)h(\))0 4004 y Fc(Argumen)m(ts:)259
-4152 y(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 4252 y Fk(A)22 b(c)n(haracter)e
-(string)h(con)n(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g
-(attribute)g(assignmen)n(ts)f(to)g(b)r(e)427 4351 y(used)26
-b(for)g(initialising)f(the)i(new)f(KeyMap.)35 b(The)26
-b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)g(that)g(for)g(the)g(AST)p
-Ft(_)p Fk(SET)427 4451 y(routine.)259 4590 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-4689 y Fk(The)c(global)e(status.)0 4862 y Fc(Returned)32
-b(V)-8 b(alue:)259 5010 y(AST)p Ft(_)p Fc(MAP)32 b(=)g(INTEGER)427
-5110 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(KeyMap.)0
-5283 y Fc(Notes:)340 5577 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 5677 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-eop end
-%%Page: 255 265
-TeXDict begin 255 264 bop 3643 52 a FG(255)-2 351 y Fc(Status)33
-b(Handling)n(:)227 497 y Fk(The)d(protected)g(in)n(terface)f(to)g(this)
-h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g
-(the)g(parameter)227 597 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62
-b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)
-e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fk(in)n(t)227
-697 y Fj(\003)p Fk(status)p Ft(")p Fk(.)p 0 897 3780
-12 v 0 1028 a FA(AST)p Fe(_)p FA(LINEARAPPR)l(O)l(X)1662
-1029 y Fd(Obtain)38 b(a)1747 1128 y(linear)1600 1228
-y(appro)m(xima-)1669 1339 y(tion)f(to)h(a)1594 1438 y(Mapping,)f(if)
-1594 1549 y(appropriate)2341 1028 y FA(AST)p Fe(_)p FA(LINEARAPPR)l(O)l
-(X)0 1739 y Fc(Description:)44 b Fk(This)38 b(function)g(tests)g(the)f
-(forw)n(ard)f(co)r(ordinate)h(transformation)e(implemen)n(ted)k(b)n(y)e
-(a)g(Mapping)227 1839 y(o)n(v)n(er)28 b(a)i(giv)n(en)f(range)f(of)i
-(input)g(co)r(ordinates.)42 b(If)30 b(the)h(transformation)d(is)h
-(found)h(to)g(b)r(e)g(linear)f(to)h(a)f(sp)r(eci\014ed)227
-1938 y(lev)n(el)g(of)h(accuracy)-7 b(,)29 b(then)h(an)f(arra)n(y)e(of)j
-(\014t)g(co)r(e\016cien)n(ts)f(is)h(returned.)42 b(These)30
-b(ma)n(y)f(b)r(e)h(used)f(to)h(implemen)n(t)g(a)227 2038
-y(linear)23 b(appro)n(ximation)e(to)i(the)h(Mapping's)e(forw)n(ard)g
-(transformation)f(within)j(the)g(sp)r(eci\014ed)f(range)f(of)h(output)
-227 2137 y(co)r(ordinates.)36 b(If)28 b(the)g(transformation)e(is)h
-(not)h(su\016cien)n(tly)f(linear,)g(no)h(co)r(e\016cien)n(ts)f(are)f
-(returned.)0 2288 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_LINEARAPPROX)o(\()38 b(THIS,)j(LBND,)h(UBND,)f(TOL,)h(FIT,)g
-(STATUS)f(\))0 2438 y Fc(Argumen)m(ts:)259 2576 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 2675 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(Mapping.)259 2809 y Fc(LBND\()k Fj(\003)g
-Fc(\))g(=)g(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427 2908
-y Fk(An)26 b(arra)n(y)d(con)n(taining)h(the)i(lo)n(w)n(er)d(b)r(ounds)j
-(of)f(a)g(b)r(o)n(x)f(de\014ned)i(within)g(the)g(input)g(co)r(ordinate)
-e(system)h(of)427 3008 y(the)j(Mapping.)36 b(The)27 b(n)n(um)n(b)r(er)g
-(of)g(elemen)n(ts)g(in)g(this)g(arra)n(y)e(should)i(equal)f(the)i(v)-5
-b(alue)27 b(of)g(the)g(Mapping's)427 3107 y(Nin)h(attribute.)37
-b(This)28 b(b)r(o)n(x)f(should)h(sp)r(ecify)f(the)h(region)f(o)n(v)n
-(er)e(whic)n(h)j(linearit)n(y)f(is)g(required.)259 3241
-y Fc(UBND\()32 b Fj(\003)g Fc(\))g(=)g(DOUBLE)g(PRECISION)f(\(Giv)m
-(en\))427 3340 y Fk(An)g(arra)n(y)d(con)n(taining)h(the)h(upp)r(er)h(b)
-r(ounds)f(of)g(the)h(b)r(o)n(x)e(sp)r(ecifying)i(the)f(region)f(o)n(v)n
-(er)f(whic)n(h)i(linearit)n(y)427 3440 y(is)e(required.)259
-3573 y Fc(TOL)k(=)h(DOUBLE)f(PRECISION)f(\(Giv)m(en\))427
-3673 y Fk(The)25 b(maxim)n(um)f(p)r(ermitted)i(deviation)e(from)g
-(linearit)n(y)-7 b(,)24 b(expressed)g(as)g(a)g(p)r(ositiv)n(e)g
-(Cartesian)f(displace-)427 3773 y(men)n(t)30 b(in)f(the)h(output)g(co)r
-(ordinate)e(space)h(of)g(the)h(Mapping.)42 b(If)29 b(a)g(linear)g
-(\014t)h(to)f(the)h(forw)n(ard)d(transfor-)427 3872 y(mation)j(of)f
-(the)h(Mapping)g(deviates)f(from)g(the)h(true)g(transformation)e(b)n(y)
-h(more)g(than)h(this)g(amoun)n(t)f(at)427 3972 y(an)n(y)e(p)r(oin)n(t)h
-(whic)n(h)f(is)h(tested,)g(then)g(no)f(\014t)h(co)r(e\016cien)n(ts)g
-(will)f(b)r(e)h(returned.)259 4105 y Fc(FIT\()33 b Fj(\003)e
-Fc(\))h(=)g(DOUBLE)g(PRECISION)g(\(Returned\))427 4205
-y Fk(An)39 b(arra)n(y)d(in)i(whic)n(h)g(to)g(return)f(the)i
-(co-e\016cien)n(ts)e(of)h(the)g(linear)g(appro)n(ximation)e(to)i(the)g
-(sp)r(eci\014ed)427 4304 y(transformation.)33 b(This)19
-b(arra)n(y)e(should)i(ha)n(v)n(e)f(at)h(least)g Ft(")p
-Fk(\()g(Nin)h(+)f(1)g(\))g Fj(\003)g Fk(Nout)p Ft(")p
-Fk(,)i(elemen)n(ts.)34 b(The)19 b(\014rst)g(Nout)427
-4404 y(elemen)n(ts)32 b(hold)g(the)g(constan)n(t)f(o\013sets)g(for)h
-(the)g(transformation)e(outputs.)50 b(The)32 b(remaining)f(elemen)n(ts)
-427 4504 y(hold)f(the)h(gradien)n(ts.)43 b(So)30 b(if)h(the)g(Mapping)f
-(has)f(2)h(inputs)h(and)f(3)g(outputs)g(the)h(linear)e(appro)n
-(ximation)427 4603 y(to)f(the)g(forw)n(ard)e(transformation)g(is:)427
-4720 y(X)p Ft(_)p Fk(out)i(=)f(\014t\(1\))h(+)f(\014t\(4\))p
-Fj(\003)p Fk(X)p Ft(_)p Fk(in)h(+)f(\014t\(5\))p Fj(\003)p
-Fk(Y)p Ft(_)p Fk(in)427 4836 y(Y)p Ft(_)p Fk(out)h(=)f(\014t\(2\))h(+)f
-(\014t\(6\))p Fj(\003)p Fk(X)p Ft(_)p Fk(in)h(+)f(\014t\(7\))p
-Fj(\003)p Fk(Y)p Ft(_)p Fk(in)427 4953 y(Z)p Ft(_)p Fk(out)g(=)g
-(\014t\(3\))i(+)e(\014t\(8\))p Fj(\003)p Fk(X)p Ft(_)p
-Fk(in)h(+)f(\014t\(9\))p Fj(\003)p Fk(Y)p Ft(_)p Fk(in)259
-5086 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5186 y Fk(The)c(global)e(status.)0 5348
-y Fc(Returned)32 b(V)-8 b(alue:)259 5486 y(AST)p Ft(_)p
-Fc(LINEARAPPR)m(O)m(X)33 b(=)f(LOGICAL)427 5585 y Fk(If)26
-b(the)g(forw)n(ard)e(transformation)g(is)h(su\016cien)n(tly)h(linear,)f
-(.TR)n(UE)g(is)h(returned.)36 b(Otherwise)24 b(.F)-9
-b(ALSE.)26 b(is)427 5685 y(returned)h(and)h(the)g(\014t)g(co-e\016cien)
-n(ts)e(are)h(set)h(to)f(AST)p Ft(__)p Fk(BAD.)p eop end
-%%Page: 256 266
-TeXDict begin 256 265 bop 0 52 a FG(256)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(Notes:)340
-629 y Fj(\017)45 b Fk(This)31 b(function)g(\014ts)g(the)g(Mapping's)g
-(forw)n(ard)e(transformation.)44 b(T)-7 b(o)31 b(\014t)g(the)g(in)n(v)n
-(erse)e(transformation,)427 728 y(the)f(Mapping)f(should)h(b)r(e)g(in)n
-(v)n(erted)f(using)g(AST)p Ft(_)p Fk(INVER)-7 b(T)28
-b(b)r(efore)f(in)n(v)n(oking)f(this)i(function.)340 856
-y Fj(\017)45 b Fk(A)32 b(v)-5 b(alue)32 b(of)f(.F)-9
-b(ALSE.)32 b(will)g(b)r(e)g(returned)f(if)h(this)g(function)g(is)g(in)n
-(v)n(ok)n(ed)e(with)i(the)g(global)e(error)g(status)427
-956 y(set,)e(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 1145 3780 12 v 0 1275 a FA(AST)p Fe(_)p FA(LUTMAP)512
-b Fd(Create)37 b(a)i(LutMap)514 b FA(AST)p Fe(_)p FA(LUTMAP)0
-1454 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(LutMap)h(and)g(optionally)e(initialises)i(its)f(attributes.)227
-1576 y(A)i(LutMap)g(is)g(a)f(sp)r(ecialised)h(form)f(of)h(Mapping)f
-(whic)n(h)h(transforms)f(1-dimensional)f(co)r(ordinates)g(b)n(y)i
-(using)227 1675 y(linear)d(in)n(terp)r(olation)g(in)h(a)g(lo)r(okup)f
-(table.)37 b(Eac)n(h)25 b(input)j(co)r(ordinate)e(v)-5
-b(alue)26 b(is)h(\014rst)g(scaled)f(to)g(giv)n(e)g(the)i(index)227
-1775 y(of)e(an)g(en)n(try)f(in)i(the)f(table)g(b)n(y)g(subtracting)f(a)
-h(starting)f(v)-5 b(alue)26 b(\(the)h(input)f(co)r(ordinate)f(corresp)r
-(onding)f(to)i(the)227 1875 y(\014rst)31 b(table)g(en)n(try\))f(and)h
-(dividing)g(b)n(y)f(an)h(incremen)n(t)f(\(the)i(di\013erence)f(in)g
-(input)g(co)r(ordinate)f(v)-5 b(alue)31 b(b)r(et)n(w)n(een)227
-1974 y(adjacen)n(t)c(table)h(en)n(tries\).)227 2096 y(The)j(resulting)g
-(index)g(will)g(usually)g(con)n(tain)f(a)h(fractional)f(part,)i(so)e
-(the)i(output)f(co)r(ordinate)f(v)-5 b(alue)31 b(is)g(then)227
-2196 y(generated)f(b)n(y)g(in)n(terp)r(olating)f(linearly)h(b)r(et)n(w)
-n(een)g(the)h(appropriate)d(en)n(tries)i(in)h(the)f(table.)46
-b(If)31 b(the)f(index)h(lies)227 2296 y(outside)h(the)h(range)e(of)h
-(the)h(table,)g(linear)e(extrap)r(olation)g(is)h(used)h(based)e(on)h
-(the)h(t)n(w)n(o)e(nearest)h(en)n(tries)f(\(i.e.)227
-2395 y(the)d(t)n(w)n(o)f(en)n(tries)g(at)g(the)h(start)f(or)g(end)h(of)
-g(the)g(table,)f(as)g(appropriate\).)227 2517 y(If)e(the)g(lo)r(okup)e
-(table)i(en)n(tries)e(increase)g(or)h(decrease)f(monotonically)-7
-b(,)23 b(then)i(the)g(in)n(v)n(erse)e(transformation)f(ma)n(y)227
-2617 y(also)27 b(b)r(e)h(p)r(erformed.)0 2761 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(RESULT)41 b(=)i(AST_LUTMAP\()c(NLUT,)j(LUT,)g(START,)
-f(INC,)h(OPTIONS,)e(STATUS)h(\))0 2905 y Fc(Argumen)m(ts:)259
-3037 y(NLUT)33 b(=)f(INTEGER)f(\(Giv)m(en\))427 3136
-y Fk(The)d(n)n(um)n(b)r(er)f(of)h(en)n(tries)f(in)h(the)g(lo)r(okup)f
-(table.)37 b(This)27 b(v)-5 b(alue)28 b(m)n(ust)f(b)r(e)h(at)g(least)f
-(2.)259 3264 y Fc(LUT\()33 b(NLUT)g(\))f(=)g(DOUBLE)h(PRECISION)e
-(\(Giv)m(en\))427 3364 y Fk(An)d(arra)n(y)e(con)n(taining)g(the)i(lo)r
-(okup)f(table)h(en)n(tries.)259 3492 y Fc(ST)-8 b(AR)g(T)33
-b(=)f(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427 3591 y Fk(The)d(input)g(co)
-r(ordinate)f(v)-5 b(alue)27 b(whic)n(h)h(corresp)r(onds)d(to)j(the)g
-(\014rst)f(lo)r(okup)g(table)h(en)n(try)-7 b(.)259 3719
-y Fc(INC)32 b(=)g(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427
-3819 y Fk(The)24 b(lo)r(okup)g(table)f(spacing)g(\(the)i(incremen)n(t)f
-(in)g(input)g(co)r(ordinate)f(v)-5 b(alue)24 b(b)r(et)n(w)n(een)g
-(successiv)n(e)e(lo)r(okup)427 3918 y(table)28 b(en)n(tries\).)36
-b(This)28 b(v)-5 b(alue)27 b(ma)n(y)g(b)r(e)h(p)r(ositiv)n(e)f(or)g
-(negativ)n(e,)g(but)h(m)n(ust)g(not)f(b)r(e)h(zero.)259
-4046 y Fc(OPTIONS)k(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 4146 y Fk(A)22 b(c)n(haracter)e
-(string)h(con)n(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g
-(attribute)g(assignmen)n(ts)f(to)g(b)r(e)427 4245 y(used)27
-b(for)g(initialising)g(the)g(new)g(LutMap.)37 b(The)27
-b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)g(that)g(for)g(the)g(AST)p
-Ft(_)p Fk(SET)427 4345 y(routine.)259 4473 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-4572 y Fk(The)c(global)e(status.)0 4729 y Fc(Returned)32
-b(V)-8 b(alue:)259 4860 y(AST)p Ft(_)p Fc(LUTMAP)34 b(=)e(INTEGER)427
-4960 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(LutMap.)0
-5117 y Fc(Notes:)340 5394 y Fj(\017)45 b Fk(If)38 b(the)f(en)n(tries)f
-(in)h(the)h(lo)r(okup)e(table)h(either)g(increase)e(or)h(decrease)g
-(monotonically)-7 b(,)38 b(then)f(the)h(new)427 5494
-y(LutMap's)25 b(T)-7 b(ranIn)n(v)n(erse)23 b(attribute)j(will)f(ha)n(v)
-n(e)f(a)h(v)-5 b(alue)25 b(of)g(one,)g(indicating)g(that)h(the)g(in)n
-(v)n(erse)d(transfor-)427 5593 y(mation)j(can)g(b)r(e)h(p)r(erformed.)
-36 b(Otherwise,)25 b(it)i(will)g(ha)n(v)n(e)e(a)g(v)-5
-b(alue)27 b(of)f(zero,)f(so)h(that)g(an)n(y)g(attempt)h(to)f(use)427
-5693 y(the)i(in)n(v)n(erse)e(transformation)g(will)i(result)f(in)h(an)g
-(error.)p eop end
-%%Page: 257 267
-TeXDict begin 257 266 bop 3643 52 a FG(257)340 351 y
-Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f
-(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427
-451 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g
-(should)f(fail)h(for)f(an)n(y)g(reason.)-2 615 y Fc(Status)33
-b(Handling)n(:)227 761 y Fk(The)d(protected)g(in)n(terface)f(to)g(this)
-h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g
-(the)g(parameter)227 861 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62
-b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)
-e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fk(in)n(t)227
-960 y Fj(\003)p Fk(status)p Ft(")p Fk(.)p 0 1162 3780
-12 v 0 1292 a FA(AST)p Fe(_)p FA(MAPBO)l(X)1213 1293
-y Fd(Find)39 b(a)f(b)s(ounding)g(b)s(o)m(x)h(for)e(a)1664
-1407 y(Mapping)2833 1292 y FA(AST)p Fe(_)p FA(MAPBO)l(X)0
-1598 y Fc(Description:)44 b Fk(This)26 b(routine)g(allo)n(ws)e(y)n(ou)h
-(to)h(\014nd)g(the)g Ft(")p Fk(b)r(ounding)g(b)r(o)n(x)p
-Ft(")f Fk(whic)n(h)g(just)i(encloses)e(another)g(b)r(o)n(x)g(after)227
-1697 y(it)38 b(has)e(b)r(een)i(transformed)e(b)n(y)h(a)g(Mapping)f
-(\(using)h(either)g(its)h(forw)n(ard)d(or)h(in)n(v)n(erse)g
-(transformation\).)64 b(A)227 1797 y(t)n(ypical)27 b(use)h(migh)n(t)f
-(b)r(e)h(to)g(calculate)f(the)h(size)f(of)h(an)f(image)g(after)g(b)r
-(eing)h(transformed)e(b)n(y)h(a)h(Mapping.)227 1923 y(The)h(routine)g
-(w)n(orks)f(on)h(one)f(dimension)h(at)g(a)g(time.)42
-b(When)30 b(supplied)f(with)h(the)g(lo)n(w)n(er)d(and)i(upp)r(er)g(b)r
-(ounds)227 2022 y(of)39 b(a)f(rectangular)e(region)h(\(b)r(o)n(x\))i
-(of)f(input)i(co)r(ordinate)d(space,)k(it)d(\014nds)h(the)g(lo)n(w)n
-(est)e(and)i(highest)f(v)-5 b(alues)227 2122 y(tak)n(en)28
-b(b)n(y)g(a)g(nominated)g(output)g(co)r(ordinate)f(within)i(that)g
-(region.)37 b(It)29 b(also)e(returns)g(the)i(input)g(co)r(ordinates)227
-2221 y(where)c(these)g(b)r(ounding)g(v)-5 b(alues)24
-b(are)g(attained.)36 b(It)25 b(should)g(b)r(e)g(used)g(rep)r(eatedly)g
-(to)f(obtain)h(the)g(exten)n(t)g(of)g(the)227 2321 y(b)r(ounding)j(b)r
-(o)n(x)f(in)h(more)f(than)g(one)h(dimension.)0 2473 y
-Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_MAPBOX\()d(THIS,)i
-(LBND_IN,)g(UBND_IN,)f(FORWARD,)g(COORD_OUT,)g(LBND_OUT,)f(UBND_OUT,)
-227 2572 y(XL,)k(XU,)f(STATUS)f(\))0 2724 y Fc(Argumen)m(ts:)259
-2863 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 2962
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Mapping.)259 3096
-y Fc(LBND)p Ft(_)p Fc(IN\()k Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e
-(\(Giv)m(en\))427 3196 y Fk(An)24 b(arra)n(y)e(with)i(one)f(elemen)n(t)
-h(for)g(eac)n(h)e(Mapping)i(input)g(co)r(ordinate.)35
-b(This)24 b(should)f(con)n(tain)g(the)h(lo)n(w)n(er)427
-3295 y(b)r(ound)k(of)g(the)g(input)g(b)r(o)n(x)f(in)h(eac)n(h)f(input)h
-(dimension.)259 3429 y Fc(UBND)p Ft(_)p Fc(IN\()k Fj(\003)f
-Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en\))427 3529
-y Fk(An)23 b(arra)n(y)d(with)i(one)g(elemen)n(t)h(for)e(eac)n(h)h
-(Mapping)f(input)i(co)r(ordinate.)34 b(This)22 b(should)g(con)n(tain)g
-(the)g(upp)r(er)427 3629 y(b)r(ound)28 b(of)g(the)g(input)g(b)r(o)n(x)f
-(in)h(eac)n(h)f(input)h(dimension.)427 3745 y(Note)22
-b(that)g(it)g(is)f(p)r(ermissible)g(for)g(the)h(upp)r(er)g(b)r(ound)g
-(to)f(b)r(e)h(less)f(than)h(the)g(corresp)r(onding)d(lo)n(w)n(er)h(b)r
-(ound,)427 3845 y(as)27 b(the)h(v)-5 b(alues)27 b(will)h(simply)g(b)r
-(e)g(sw)n(app)r(ed)f(b)r(efore)g(use.)259 3979 y Fc(F)m(OR)-11
-b(W)g(ARD)32 b(=)g(LOGICAL)h(\(Giv)m(en\))427 4079 y
-Fk(If)25 b(this)f(v)-5 b(alue)25 b(is)f(.TR)n(UE.,)g(then)h(the)g
-(Mapping's)e(forw)n(ard)g(transformation)f(will)j(b)r(e)f(used)h(to)f
-(transform)427 4178 y(the)k(input)h(b)r(o)n(x.)36 b(Otherwise,)27
-b(its)h(in)n(v)n(erse)e(transformation)g(will)i(b)r(e)g(used.)427
-4295 y(\(If)35 b(the)g(in)n(v)n(erse)e(transformation)g(is)h(selected,)
-i(then)f(references)f(to)g Ft(")p Fk(input)p Ft(")g Fk(and)h
-Ft(")p Fk(output)p Ft(")f Fk(co)r(ordi-)427 4395 y(nates)d(in)g(this)g
-(description)g(should)g(b)r(e)g(transp)r(osed.)46 b(F)-7
-b(or)31 b(example,)g(the)g(size)g(of)g(the)g(LBND)p Ft(_)p
-Fk(IN)h(and)427 4494 y(UBND)p Ft(_)p Fk(IN)24 b(arra)n(ys)d(should)j
-(matc)n(h)f(the)h(n)n(um)n(b)r(er)f(of)h(output)g(co)r(ordinates,)f(as)
-f(giv)n(en)h(b)n(y)g(the)h(Mapping's)427 4594 y(Nout)31
-b(attribute.)44 b(Similarly)-7 b(,)30 b(the)g(COORD)p
-Ft(_)p Fk(OUT)f(argumen)n(t,)h(b)r(elo)n(w,)g(should)g(nominate)g(one)f
-(of)h(the)427 4693 y(Mapping's)d(input)i(co)r(ordinates.\))259
-4827 y Fc(COORD)p Ft(_)p Fc(OUT)i(=)h(INTEGER)g(\(Giv)m(en\))427
-4927 y Fk(The)26 b(index)f(of)h(the)f(output)h(co)r(ordinate)f(for)g
-(whic)n(h)g(the)h(lo)n(w)n(er)e(and)h(upp)r(er)g(b)r(ounds)h(are)e
-(required.)36 b(This)427 5027 y(v)-5 b(alue)27 b(should)f(b)r(e)i(at)e
-(least)h(one,)f(and)h(no)f(larger)f(than)i(the)g(n)n(um)n(b)r(er)g(of)f
-(Mapping)h(output)g(co)r(ordinates.)259 5161 y Fc(LBND)p
-Ft(_)p Fc(OUT)32 b(=)g(DOUBLE)h(PRECISION)e(\(Returned\))427
-5260 y Fk(The)k(lo)n(w)n(est)e(v)-5 b(alue)35 b(tak)n(en)f(b)n(y)g(the)
-h(nominated)f(output)h(co)r(ordinate)f(within)h(the)g(sp)r(eci\014ed)f
-(region)g(of)427 5360 y(input)29 b(co)r(ordinate)d(space.)259
-5494 y Fc(UBND)p Ft(_)p Fc(OUT)32 b(=)g(DOUBLE)h(PRECISION)e
-(\(Returned\))427 5593 y Fk(The)h(highest)g(v)-5 b(alue)31
-b(tak)n(en)g(b)n(y)h(the)g(nominated)f(output)h(co)r(ordinate)f(within)
-h(the)g(sp)r(eci\014ed)g(region)f(of)427 5693 y(input)e(co)r(ordinate)d
-(space.)p eop end
-%%Page: 258 268
-TeXDict begin 258 267 bop 0 52 a FG(258)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(XL\()i
-Fj(\003)e Fc(\))h(=)g(DOUBLE)g(PRECISION)g(\(Returned\))427
-451 y Fk(An)j(arra)n(y)c(with)k(one)e(elemen)n(t)h(for)f(eac)n(h)h
-(Mapping)f(input)i(co)r(ordinate.)54 b(This)34 b(will)g(return)g(the)g
-(co)r(or-)427 551 y(dinates)e(of)g(an)g(input)h(p)r(oin)n(t)g
-(\(although)e(not)i(necessarily)d(a)i(unique)g(one\))g(for)g(whic)n(h)g
-(the)h(nominated)427 650 y(output)28 b(co)r(ordinate)f(attains)g(the)h
-(lo)n(w)n(er)e(b)r(ound)i(v)-5 b(alue)27 b(returned)h(in)g(LBND)p
-Ft(_)p Fk(OUT.)259 794 y Fc(XU\()33 b Fj(\003)e Fc(\))h(=)g(DOUBLE)g
-(PRECISION)g(\(Returned\))427 894 y Fk(An)j(arra)n(y)c(with)k(one)e
-(elemen)n(t)h(for)f(eac)n(h)h(Mapping)f(input)i(co)r(ordinate.)54
-b(This)34 b(will)g(return)g(the)g(co)r(or-)427 993 y(dinates)e(of)g(an)
-g(input)h(p)r(oin)n(t)g(\(although)e(not)i(necessarily)d(a)i(unique)g
-(one\))g(for)g(whic)n(h)g(the)h(nominated)427 1093 y(output)28
-b(co)r(ordinate)f(attains)g(the)h(upp)r(er)g(b)r(ound)g(v)-5
-b(alue)27 b(returned)g(in)h(UBND)p Ft(_)p Fk(OUT.)259
-1237 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 1336 y Fk(The)c(global)e(status.)0 1520
-y Fc(Notes:)340 1825 y Fj(\017)45 b Fk(An)n(y)20 b(input)g(p)r(oin)n
-(ts)g(whic)n(h)f(are)g(transformed)f(b)n(y)h(the)h(Mapping)f(to)h(giv)n
-(e)e(output)j(co)r(ordinates)d(con)n(taining)427 1924
-y(the)j(v)-5 b(alue)20 b(AST)p Ft(__)p Fk(BAD)g(are)f(regarded)g(as)g
-(in)n(v)-5 b(alid)20 b(and)g(are)f(ignored.)34 b(They)20
-b(will)g(mak)n(e)f(no)h(con)n(tribution)427 2024 y(to)h(determining)g
-(the)g(output)h(b)r(ounds,)g(ev)n(en)f(although)f(the)h(nominated)g
-(output)h(co)r(ordinate)d(migh)n(t)i(still)427 2124 y(ha)n(v)n(e)27
-b(a)g(v)-5 b(alid)28 b(v)-5 b(alue)27 b(at)g(suc)n(h)h(p)r(oin)n(ts.)
-340 2268 y Fj(\017)45 b Fk(An)36 b(error)d(will)i(o)r(ccur)g(if)g(the)h
-(required)e(output)h(b)r(ounds)g(cannot)g(b)r(e)h(found.)59
-b(T)n(ypically)-7 b(,)36 b(this)g(migh)n(t)427 2367 y(happ)r(en)27
-b(if)h(all)e(the)h(input)h(p)r(oin)n(ts)f(whic)n(h)f(the)i(routine)e
-(considers)g(turn)g(out)h(to)g(b)r(e)g(in)n(v)-5 b(alid)27
-b(\(see)g(ab)r(o)n(v)n(e\).)427 2467 y(The)36 b(n)n(um)n(b)r(er)g(of)g
-(p)r(oin)n(ts)g(considered)f(b)r(efore)g(generating)g(suc)n(h)h(an)f
-(error)f(is)i(quite)g(large,)h(so)e(this)i(is)427 2566
-y(unlik)n(ely)30 b(to)g(o)r(ccur)f(b)n(y)g(acciden)n(t)h(unless)f(v)-5
-b(alid)30 b(p)r(oin)n(ts)g(are)f(restricted)g(to)h(a)f(v)n(ery)g(small)
-h(subset)f(of)h(the)427 2666 y(input)f(co)r(ordinate)d(space.)340
-2810 y Fj(\017)45 b Fk(The)37 b(v)-5 b(alues)37 b(returned)f(via)g
-(LBND)p Ft(_)p Fk(OUT,)h(UBND)p Ft(_)p Fk(OUT,)g(XL)g(and)g(XU)h(will)f
-(b)r(e)g(set)g(to)f(the)i(v)-5 b(alue)427 2909 y(AST)p
-Ft(__)p Fk(BAD)31 b(if)h(this)f(routine)g(should)g(fail)g(for)f(an)n(y)
-h(reason.)45 b(Their)31 b(initial)g(v)-5 b(alues)31 b(on)g(en)n(try)f
-(will)i(not)427 3009 y(b)r(e)c(altered)f(if)h(the)g(routine)g(is)f(in)n
-(v)n(ok)n(ed)f(with)i(ST)-7 b(A)g(TUS)29 b(set)e(to)h(an)f(error)f(v)-5
-b(alue.)p 0 3230 3780 12 v 0 3361 a FA(AST)p Fe(_)p FA(MAPGET0)p
-Fb(<)p FA(X)p Fb(>)1580 3362 y Fd(Get)39 b(a)f(scalar)1571
-3462 y(v)-7 b(alue)39 b(from)e(a)1672 3561 y(KeyMap)2489
-3361 y FA(AST)p Fe(_)p FA(MAPGET0)p Fb(<)p FA(X)p Fb(>)0
-3772 y Fc(Description:)44 b Fk(This)25 b(is)g(a)f(set)h(of)g(functions)
-g(for)f(retrieving)g(a)g(scalar)f(v)-5 b(alue)25 b(from)g(a)f(KeyMap.)
-35 b(Y)-7 b(ou)25 b(should)g(replace)227 3872 y Fm(<)p
-Fk(X)p Fm(>)f Fk(in)g(the)g(generic)f(function)h(name)g(AST)p
-Ft(_)p Fk(MAPGET0)p Fm(<)p Fk(X)p Fm(>)e Fk(b)n(y)i(an)g(appropriate)e
-(1-c)n(haracter)f(t)n(yp)r(e)j(co)r(de)227 3971 y(\(see)j(the)g
-Ft(")p Fk(Data)e(T)n(yp)r(e)i(Co)r(des)p Ft(")f Fk(section)g(b)r(elo)n
-(w)g(for)g(the)h(co)r(de)f(appropriate)f(to)h(eac)n(h)g(supp)r(orted)g
-(data)g(t)n(yp)r(e\).)227 4071 y(The)33 b(stored)f(v)-5
-b(alue)33 b(is)f(con)n(v)n(erted)g(to)g(the)i(data)e(t)n(yp)r(e)h
-(indiced)g(b)n(y)g Fm(<)p Fk(X)p Fm(>)f Fk(b)r(efore)g(b)r(eing)h
-(returned)g(\(an)g(error)227 4171 y(is)c(rep)r(orted)g(if)h(it)f(is)h
-(not)f(p)r(ossible)g(to)g(con)n(v)n(ert)f(the)h(stored)g(v)-5
-b(alue)29 b(to)g(the)h(requested)e(data)h(t)n(yp)r(e\).)42
-b(Note,)30 b(the)227 4270 y(v)n(ersion)20 b(of)h(this)g(function)g
-(whic)n(h)g(returns)g(c)n(haracter)d(strings,)k(AST)p
-Ft(_)p Fk(MAPGET0C,)e(has)g(an)h(extra)f(parameter)227
-4370 y(in)28 b(whic)n(h)g(is)f(returned)g(the)h(n)n(um)n(b)r(er)g(of)f
-(c)n(haracters)e(written)j(in)n(to)g(the)g(supplied)g(CHARA)n(CTER)f(v)
--5 b(ariable.)0 4541 y Fc(In)m(v)m(o)s(cation:)123 b
-Ft(RESULT)41 b(=)i(AST_MAPGET0)p Fm(<)p Ft(X)p Fm(>)p
-Ft(\()37 b(THIS,)42 b(KEY,)g(VALUE,)f(STATUS)g(\))227
-4677 y(RESULT)g(=)j(AST_MAPGET0C\()38 b(THIS,)j(KEY,)h(VALUE,)f(L,)i
-(STATUS)e(\))0 4848 y Fc(Argumen)m(ts:)259 5007 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 5106 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(KeyMap.)259 5250 y Fc(KEY)k(=)g(CHARA)m(CTER)f
-Fj(\003)h Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-5350 y Fk(The)c(c)n(haracter)d(string)i(iden)n(tifying)h(the)g(v)-5
-b(alue)28 b(to)f(b)r(e)h(retriev)n(ed.)36 b(T)-7 b(railing)26
-b(spaces)h(are)g(ignored.)259 5494 y Fc(V)-11 b(ALUE)33
-b(=)f Fm(<)p Fc(X)p Fm(>)p Fc(t)m(yp)s(e)g(\(Returned\))427
-5593 y Fk(The)i(requested)e(v)-5 b(alue.)54 b(If)34 b(the)g(requested)f
-(k)n(ey)f(is)i(not)f(found,)i(then)f(the)g(con)n(ten)n(ts)e(of)i(the)f
-(bu\013er)h(on)427 5693 y(en)n(try)27 b(to)h(this)g(function)g(will)g
-(b)r(e)g(unc)n(hanged)e(on)i(exit.)p eop end
-%%Page: 259 269
-TeXDict begin 259 268 bop 3643 52 a FG(259)259 351 y
-Fc(L)32 b(=)g(INTEGER)g(\(Returned\))427 451 y Fk(This)37
-b(parameter)f(is)h(only)g(presen)n(t)f(in)i(the)f(in)n(terface)g(for)f
-(the)i(AST)p Ft(_)p Fk(MAPGET0C)e(function.)66 b(It)38
-b(is)427 551 y(returned)27 b(holding)h(the)g(n)n(um)n(b)r(er)f(of)h(c)n
-(haracters)d(written)j(in)n(to)f(the)h(CHARA)n(CTER)g(v)-5
-b(ariable)26 b(supplied)427 650 y(for)h(parameter)f(V)-9
-b(ALUE.)259 782 y Fc(ST)h(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 882 y Fk(The)c(global)e(status.)0 1043
-y Fc(Returned)32 b(V)-8 b(alue:)259 1179 y(AST)p Ft(_)p
-Fc(MAPGET0)p Fm(<)p Fc(X)p Fm(>)32 b Fc(=)g(LOGICAL)427
-1278 y Fk(A)h(\015ag)e(whic)n(h)h(is)g(set)g(to)g(.TR)n(UE.)f(if)i(the)
-f(requested)g(k)n(ey)f(name)h(w)n(as)f(found,)i(and)f(is)g(set)g(to)g
-(.F)-9 b(ALSE.)427 1378 y(otherwise.)0 1539 y Fc(Notes:)340
-1821 y Fj(\017)45 b Fk(No)21 b(error)f(is)h(rep)r(orted)f(if)i(the)g
-(requested)f(k)n(ey)f(cannot)h(b)r(e)h(found)f(in)h(the)g(giv)n(en)e
-(KeyMap,)i(but)g(a)f(.F)-9 b(ALSE.)427 1921 y(v)k(alue)25
-b(will)g(b)r(e)g(returned)f(as)h(the)g(function)g(v)-5
-b(alue.)36 b(The)25 b(supplied)g(bu\013er)g(will)g(b)r(e)g(returned)f
-(unc)n(hanged.)340 2053 y Fj(\017)45 b Fk(Key)27 b(names)g(are)g(case)g
-(sensitiv)n(e,)g(and)g(white)h(space)f(is)h(considered)e(signi\014can)n
-(t.)340 2185 y Fj(\017)45 b Fk(If)28 b(the)g(stored)f(v)-5
-b(alue)28 b(is)f(a)g(v)n(ector)f(v)-5 b(alue,)28 b(then)g(the)g
-(\014rst)f(v)-5 b(alue)28 b(in)g(the)g(v)n(ector)e(will)i(b)r(e)g
-(returned.)340 2317 y Fj(\017)45 b Fk(If)30 b(the)f(returned)g(v)-5
-b(alue)29 b(is)g(an)g(AST)g(Ob)5 b(ject)29 b(p)r(oin)n(ter,)g(the)h(Ob)
-5 b(ject's)29 b(reference)f(coun)n(t)h(is)g(incremen)n(ted)427
-2416 y(b)n(y)f(this)h(call.)39 b(An)n(y)29 b(subsequen)n(t)f(c)n
-(hanges)f(made)h(to)g(the)h(Ob)5 b(ject)29 b(using)f(the)g(returned)g
-(p)r(oin)n(ter)h(will)f(b)r(e)427 2516 y(re\015ected)35
-b(in)g(an)n(y)f(an)n(y)g(other)g(activ)n(e)g(p)r(oin)n(ters)g(for)g
-(the)h(Ob)5 b(ject.)58 b(The)35 b(returned)f(p)r(oin)n(ter)h(should)f
-(b)r(e)427 2616 y(ann)n(ulled)28 b(using)f(AST)p Ft(_)p
-Fk(ANNUL)h(when)g(it)g(is)g(no)f(longer)f(needed.)-2
-2777 y Fc(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)227 2923
-y Fk(T)-7 b(o)18 b(select)h(the)f(appropriate)f(routine,)j(y)n(ou)d
-(should)i(replace)e Fm(<)p Fk(X)p Fm(>)h Fk(in)g(the)h(generic)e
-(routine)h(name)h(AST)p Ft(_)p Fk(MAPGET0)p Fm(<)p Fk(X)p
-Fm(>)227 3023 y Fk(with)35 b(a)f(1-c)n(haracter)e(data)h(t)n(yp)r(e)i
-(co)r(de,)h(so)e(as)f(to)i(matc)n(h)f(the)h(data)e(t)n(yp)r(e)i
-Fm(<)p Fk(X)p Fm(>)p Fk(t)n(yp)r(e)f(of)g(the)h(data)f(y)n(ou)g(are)227
-3122 y(pro)r(cessing,)26 b(as)h(follo)n(ws:)340 3258
-y Fj(\017)45 b Fk(D:)28 b(DOUBLE)g(PRECISION)340 3390
-y Fj(\017)45 b Fk(R:)28 b(REAL)340 3522 y Fj(\017)45
-b Fk(I:)28 b(INTEGER)340 3654 y Fj(\017)45 b Fk(C:)28
-b(CHARA)n(CTER)340 3786 y Fj(\017)45 b Fk(A:)28 b(INTEGER)f(used)h(to)f
-(iden)n(tify)i(an)e(AstOb)5 b(ject)227 3947 y(F)-7 b(or)41
-b(example,)k(AST)p Ft(_)p Fk(MAPGET0D)c(w)n(ould)g(b)r(e)h(used)f(to)h
-(get)f(a)g(DOUBLE)g(PRECISION)f(v)-5 b(alue,)45 b(while)227
-4047 y(AST)p Ft(_)p Fk(MAPGET0I)27 b(w)n(ould)g(b)r(e)h(used)g(to)f
-(get)g(an)h(INTEGER,)f(etc.)p 0 4245 3780 12 v 0 4376
-a FA(AST)p Fe(_)p FA(MAPGET1)p Fb(<)p FA(X)p Fb(>)1571
-4375 y Fd(Get)38 b(a)h(v)m(ector)1571 4475 y(v)-7 b(alue)39
-b(from)e(a)1672 4574 y(KeyMap)2489 4376 y FA(AST)p Fe(_)p
-FA(MAPGET1)p Fb(<)p FA(X)p Fb(>)0 4762 y Fc(Description:)44
-b Fk(This)24 b(is)g(a)g(set)g(of)g(functions)g(for)f(retrieving)g(a)g
-(v)n(ector)g(v)-5 b(alue)24 b(from)g(a)f(KeyMap.)35 b(Y)-7
-b(ou)24 b(should)g(replace)227 4861 y Fm(<)p Fk(X)p Fm(>)g
-Fk(in)g(the)g(generic)f(function)h(name)g(AST)p Ft(_)p
-Fk(MAPGET1)p Fm(<)p Fk(X)p Fm(>)e Fk(b)n(y)i(an)g(appropriate)e(1-c)n
-(haracter)f(t)n(yp)r(e)j(co)r(de)227 4961 y(\(see)j(the)g
-Ft(")p Fk(Data)e(T)n(yp)r(e)i(Co)r(des)p Ft(")f Fk(section)g(b)r(elo)n
-(w)g(for)g(the)h(co)r(de)f(appropriate)f(to)h(eac)n(h)g(supp)r(orted)g
-(data)g(t)n(yp)r(e\).)227 5061 y(The)i(stored)f(v)-5
-b(alue)27 b(is)h(con)n(v)n(erted)e(to)h(the)h(data)f(t)n(yp)r(e)h
-(indiced)g(b)n(y)f Fm(<)p Fk(X)p Fm(>)g Fk(b)r(efore)h(b)r(eing)f
-(returned)h(\(an)f(error)f(is)227 5160 y(rep)r(orted)h(if)h(it)g(is)g
-(not)f(p)r(ossible)h(to)f(con)n(v)n(ert)f(the)i(stored)f(v)-5
-b(alue)27 b(to)h(the)g(requested)f(data)g(t)n(yp)r(e\).)0
-5309 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_MAPGET1)p
-Fm(<)p Ft(X)p Fm(>)p Ft(\()37 b(THIS,)42 b(KEY,)g(MXVAL,)f(NVAL,)g
-(VALUE,)h(STATUS)f(\))0 5458 y Fc(Argumen)m(ts:)259 5593
-y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 5693 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(KeyMap.)p eop end
-%%Page: 260 270
-TeXDict begin 260 269 bop 0 52 a FG(260)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(KEY)h(=)g(CHARA)m
-(CTER)f Fj(\003)h Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-451 y Fk(The)c(c)n(haracter)d(string)i(iden)n(tifying)h(the)g(v)-5
-b(alue)28 b(to)f(b)r(e)h(retriev)n(ed.)36 b(T)-7 b(railing)26
-b(spaces)h(are)g(ignored.)259 576 y Fc(MXV)-11 b(AL)33
-b(=)f(INTEGER)f(\(Giv)m(en\))427 676 y Fk(The)d(n)n(um)n(b)r(er)f(of)h
-(elemen)n(ts)f(in)h(the)g(V)-9 b(ALUE)28 b(arra)n(y)-7
-b(.)259 801 y Fc(NV)c(AL)33 b(=)f(INTEGER)f(\(Returned\))427
-900 y Fk(The)d(n)n(um)n(b)r(er)f(of)h(elemen)n(ts)f(stored)g(in)h(the)g
-(An)n(y)f(un)n(used)h(elemen)n(ts)f(of)h(the)g(arra)n(y)d(are)i(left)h
-(unc)n(hanged.)259 1025 y Fc(V)-11 b(ALUE\()33 b(MXV)-11
-b(AL)33 b(\))f(=)g Fm(<)p Fc(X)p Fm(>)p Fc(t)m(yp)s(e)g(\(Returned\))
-427 1125 y Fk(The)g(requested)f(v)-5 b(alues.)48 b(If)32
-b(the)g(requested)f(k)n(ey)g(is)g(not)h(found,)h(then)f(the)g(con)n
-(ten)n(ts)f(of)g(the)h(bu\013er)g(on)427 1224 y(en)n(try)27
-b(to)h(this)g(function)g(will)g(b)r(e)g(unc)n(hanged)e(on)i(exit.)259
-1349 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 1449 y Fk(The)c(global)e(status.)0 1603
-y Fc(Returned)32 b(V)-8 b(alue:)259 1732 y(AST)p Ft(_)p
-Fc(MAPGET1)p Fm(<)p Fc(X)p Fm(>)32 b Fc(=)g(LOGICAL)427
-1831 y Fk(A)h(\015ag)e(whic)n(h)h(is)g(set)g(to)g(.TR)n(UE.)f(if)i(the)
-f(requested)g(k)n(ey)f(name)h(w)n(as)f(found,)i(and)f(is)g(set)g(to)g
-(.F)-9 b(ALSE.)427 1931 y(otherwise.)0 2085 y Fc(Notes:)340
-2360 y Fj(\017)45 b Fk(No)21 b(error)f(is)h(rep)r(orted)f(if)i(the)g
-(requested)f(k)n(ey)f(cannot)h(b)r(e)h(found)f(in)h(the)g(giv)n(en)e
-(KeyMap,)i(but)g(a)f(.F)-9 b(ALSE.)427 2459 y(v)k(alue)26
-b(will)h(b)r(e)g(returned)f(as)f(the)i(function)g(v)-5
-b(alue.)36 b(The)27 b(supplied)f(arra)n(y)e(will)j(b)r(e)f(returned)g
-(unc)n(hanged.)340 2584 y Fj(\017)45 b Fk(Key)27 b(names)g(are)g(case)g
-(sensitiv)n(e,)g(and)g(white)h(space)f(is)h(considered)e(signi\014can)n
-(t.)340 2710 y Fj(\017)45 b Fk(If)26 b(the)f(stored)g(v)-5
-b(alue)25 b(is)g(a)g(scalar)e(v)-5 b(alue,)26 b(then)f(the)h(v)-5
-b(alue)25 b(will)h(b)r(e)f(returned)g(in)g(the)h(\014rst)f(elemen)n(t)g
-(of)g(the)427 2809 y(supplied)j(arra)n(y)-7 b(,)26 b(and)h(NV)-9
-b(AL)28 b(will)g(b)r(e)g(returned)f(set)h(to)f(1.)-2
-2963 y Fc(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)227 3109
-y Fk(T)-7 b(o)18 b(select)h(the)f(appropriate)f(routine,)j(y)n(ou)d
-(should)i(replace)e Fm(<)p Fk(X)p Fm(>)h Fk(in)g(the)h(generic)e
-(routine)h(name)h(AST)p Ft(_)p Fk(MAPGET1)p Fm(<)p Fk(X)p
-Fm(>)227 3209 y Fk(with)35 b(a)f(1-c)n(haracter)e(data)h(t)n(yp)r(e)i
-(co)r(de,)h(so)e(as)f(to)i(matc)n(h)f(the)h(data)e(t)n(yp)r(e)i
-Fm(<)p Fk(X)p Fm(>)p Fk(t)n(yp)r(e)f(of)g(the)h(data)f(y)n(ou)g(are)227
-3309 y(pro)r(cessing,)26 b(as)h(follo)n(ws:)340 3437
-y Fj(\017)45 b Fk(D:)28 b(DOUBLE)g(PRECISION)340 3562
-y Fj(\017)45 b Fk(R:)28 b(REAL)340 3687 y Fj(\017)45
-b Fk(I:)28 b(INTEGER)340 3812 y Fj(\017)45 b Fk(C:)28
-b(CHARA)n(CTER)340 3937 y Fj(\017)45 b Fk(A:)28 b(INTEGER)f(used)h(to)f
-(iden)n(tify)i(an)e(AstOb)5 b(ject)227 4091 y(F)-7 b(or)18
-b(example,)i(AST)p Ft(_)p Fk(MAPGET1D)e(w)n(ould)g(b)r(e)g(used)h(to)f
-(get)g(DOUBLE)g(PRECISION)f(v)-5 b(alues,)20 b(while)f(AST)p
-Ft(_)p Fk(MAPGET1I)227 4191 y(w)n(ould)27 b(b)r(e)h(used)g(to)f(get)h
-(INTEGER)f(v)-5 b(alues,)27 b(etc.)p 0 4375 3780 12 v
-0 4505 a FA(AST)p Fe(_)p FA(MAPGETELEM)p Fb(<)p FA(X)p
-Fb(>)183 b Fd(Get)1860 4605 y(a)1798 4704 y(sin-)1818
-4804 y(gle)1802 4918 y(ele-)1761 5018 y(men)m(t)1794
-5118 y(of)38 b(a)1789 5217 y(v)m(ec-)1815 5317 y(tor)1760
-5417 y(v)-7 b(alue)1771 5516 y(from)1860 5616 y(a)1760
-5715 y(KeyMap)2171 4505 y FA(AST)p Fe(_)p FA(MAPGETELEM)p
-Fb(<)p FA(X)p Fb(>)p eop end
-%%Page: 261 271
-TeXDict begin 261 270 bop 3643 52 a FG(261)0 351 y Fc(Description:)44
-b Fk(This)26 b(is)g(a)f(set)h(of)f(functions)h(for)f(retrieving)g(a)g
-(single)g(elemen)n(t)h(of)g(a)f(v)n(ector)f(v)-5 b(alue)26
-b(from)f(a)g(KeyMap.)227 451 y(Y)-7 b(ou)31 b(should)f(replace)g
-Fm(<)p Fk(X)p Fm(>)g Fk(in)g(the)h(generic)f(function)h(name)f(AST)p
-Ft(_)p Fk(MAPGETELEM)p Fm(<)p Fk(X)p Fm(>)f Fk(b)n(y)h(an)g(appro-)227
-551 y(priate)23 b(1-c)n(haracter)e(t)n(yp)r(e)j(co)r(de)g(\(see)f(the)i
-Ft(")p Fk(Data)e(T)n(yp)r(e)g(Co)r(des)p Ft(")g Fk(section)h(b)r(elo)n
-(w)f(for)g(the)h(co)r(de)g(appropriate)e(to)227 650 y(eac)n(h)k(supp)r
-(orted)g(data)f(t)n(yp)r(e\).)37 b(The)26 b(stored)g(v)-5
-b(alue)26 b(is)g(con)n(v)n(erted)e(to)i(the)h(data)f(t)n(yp)r(e)g
-(indiced)g(b)n(y)g Fm(<)p Fk(X)p Fm(>)g Fk(b)r(efore)227
-750 y(b)r(eing)e(returned)f(\(an)h(error)e(is)h(rep)r(orted)g(if)h(it)g
-(is)g(not)f(p)r(ossible)h(to)f(con)n(v)n(ert)f(the)i(stored)f(v)-5
-b(alue)24 b(to)f(the)h(requested)227 849 y(data)j(t)n(yp)r(e\).)0
-1032 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_MAPGETELEM)
-p Fm(<)p Ft(X)o Fm(>)p Ft(\()37 b(THIS,)42 b(KEY,)g(ELEM,)f(VALUE,)g
-(STATUS)g(\))0 1215 y Fc(Argumen)m(ts:)259 1385 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 1485 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(KeyMap.)259 1634 y Fc(KEY)k(=)g(CHARA)m(CTER)f
-Fj(\003)h Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-1734 y Fk(The)c(c)n(haracter)d(string)i(iden)n(tifying)h(the)g(v)-5
-b(alue)28 b(to)f(b)r(e)h(retriev)n(ed.)36 b(T)-7 b(railing)26
-b(spaces)h(are)g(ignored.)259 1884 y Fc(ELEM)k(=)i(INTEGER)e(\(Giv)m
-(en\))427 1983 y Fk(The)i(index)f(of)g(the)h(required)e(v)n(ector)g
-(elemen)n(t,)i(starting)f(at)g(one.)50 b(An)33 b(error)d(will)i(b)r(e)h
-(rep)r(orted)f(if)g(the)427 2083 y(v)-5 b(alue)28 b(is)f(outside)h(the)
-g(range)e(of)h(the)h(v)n(ector.)259 2233 y Fc(V)-11 b(ALUE)33
-b(=)f Fm(<)p Fc(X)p Fm(>)p Fc(t)m(yp)s(e)g(\(Returned\))427
-2332 y Fk(The)i(requested)e(v)-5 b(alue.)54 b(If)34 b(the)g(requested)f
-(k)n(ey)f(is)i(not)f(found,)i(then)f(the)g(con)n(ten)n(ts)e(of)i(the)f
-(bu\013er)h(on)427 2432 y(en)n(try)27 b(to)h(this)g(function)g(will)g
-(b)r(e)g(unc)n(hanged)e(on)i(exit.)259 2581 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-2681 y Fk(The)c(global)e(status.)0 2876 y Fc(Returned)32
-b(V)-8 b(alue:)259 3046 y(AST)p Ft(_)p Fc(MAPGETELEM)p
-Fm(<)p Fc(X)p Fm(>)31 b Fc(=)h(LOGICAL)427 3146 y Fk(A)h(\015ag)e(whic)
-n(h)h(is)g(set)g(to)g(.TR)n(UE.)f(if)i(the)f(requested)g(k)n(ey)f(name)
-h(w)n(as)f(found,)i(and)f(is)g(set)g(to)g(.F)-9 b(ALSE.)427
-3246 y(otherwise.)0 3441 y Fc(Notes:)340 3757 y Fj(\017)45
-b Fk(No)21 b(error)f(is)h(rep)r(orted)f(if)i(the)g(requested)f(k)n(ey)f
-(cannot)h(b)r(e)h(found)f(in)h(the)g(giv)n(en)e(KeyMap,)i(but)g(a)f(.F)
--9 b(ALSE.)427 3857 y(v)k(alue)28 b(will)g(b)r(e)g(returned)f(as)g(the)
-h(function)g(v)-5 b(alue.)340 4006 y Fj(\017)45 b Fk(Key)27
-b(names)g(are)g(case)g(sensitiv)n(e,)g(and)g(white)h(space)f(is)h
-(considered)e(signi\014can)n(t.)-2 4202 y Fc(Data)33
-b(T)m(yp)s(e)g(Co)s(des)n(:)227 4348 y Fk(T)-7 b(o)18
-b(select)h(the)f(appropriate)f(routine,)j(y)n(ou)d(should)i(replace)e
-Fm(<)p Fk(X)p Fm(>)h Fk(in)g(the)h(generic)e(routine)h(name)h(AST)p
-Ft(_)p Fk(MAPGETELEM)p Fm(<)p Fk(X)p Fm(>)227 4447 y
-Fk(with)35 b(a)f(1-c)n(haracter)e(data)h(t)n(yp)r(e)i(co)r(de,)h(so)e
-(as)f(to)i(matc)n(h)f(the)h(data)e(t)n(yp)r(e)i Fm(<)p
-Fk(X)p Fm(>)p Fk(t)n(yp)r(e)f(of)g(the)h(data)f(y)n(ou)g(are)227
-4547 y(pro)r(cessing,)26 b(as)h(follo)n(ws:)340 4717
-y Fj(\017)45 b Fk(D:)28 b(DOUBLE)g(PRECISION)340 4866
-y Fj(\017)45 b Fk(R:)28 b(REAL)340 5016 y Fj(\017)45
-b Fk(I:)28 b(INTEGER)340 5166 y Fj(\017)45 b Fk(C:)28
-b(CHARA)n(CTER)340 5315 y Fj(\017)45 b Fk(A:)28 b(INTEGER)f(used)h(to)f
-(iden)n(tify)i(an)e(AstOb)5 b(ject)227 5511 y(F)-7 b(or)25
-b(example,)h(AST)p Ft(_)p Fk(MAPGETELEMD)e(w)n(ould)h(b)r(e)h(used)f
-(to)g(get)g(a)g(DOUBLE)g(PRECISION)g(v)-5 b(alue,)25
-b(while)227 5610 y(AST)p Ft(_)p Fk(MAPGETELEMI)h(w)n(ould)h(b)r(e)h
-(used)g(to)g(get)f(an)g(INTEGER)g(v)-5 b(alue,)28 b(etc.)p
-eop end
-%%Page: 262 272
-TeXDict begin 262 271 bop 0 52 a FG(262)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(MAPHASKEY)1446 483 y Fd(Chec)m(k)38
-b(if)g(an)h(en)m(try)1469 598 y(with)e(a)i(giv)m(en)f(k)m(ey)1393
-711 y(exists)g(in)h(a)g(KeyMap)2551 482 y FA(AST)p Fe(_)p
-FA(MAPHASKEY)0 891 y Fc(Description:)44 b Fk(This)33
-b(function)h(returns)f(a)f(\015ag)h(indicating)f(if)i(the)g(KeyMap)e
-(con)n(tains)g(an)h(en)n(try)f(with)i(the)f(giv)n(en)227
-990 y(k)n(ey)-7 b(.)0 1135 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_MAPHASKEY\()38 b(THIS,)j(KEY,)h(STATUS)f(\))0
-1280 y Fc(Argumen)m(ts:)259 1412 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 1511 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)259
-1640 y Fc(KEY)k(=)g(CHARA)m(CTER)f Fj(\003)h Fc(\()g
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 1739 y Fk(The)c(c)n(haracter)d
-(string)i(iden)n(tifying)h(the)g(KeyMap)f(en)n(try)-7
-b(.)36 b(T)-7 b(railing)27 b(spaces)f(are)h(ignored.)259
-1868 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 1967 y Fk(The)c(global)e(status.)0 2125
-y Fc(Returned)32 b(V)-8 b(alue:)259 2257 y(AST)p Ft(_)p
-Fc(MAPHASKEY)32 b(=)g(LOGICAL)427 2356 y Fk(.TR)n(UE.)c(if)g(the)g(k)n
-(ey)f(w)n(as)f(found,)i(and)g(.F)-9 b(ALSE.)27 b(otherwise.)0
-2514 y Fc(Notes:)340 2792 y Fj(\017)45 b Fk(A)39 b(function)g(v)-5
-b(alue)38 b(of)g(.F)-9 b(ALSE.)39 b(will)f(b)r(e)h(returned)f(if)h(an)f
-(error)e(has)i(already)f(o)r(ccurred,)j(or)d(if)i(this)427
-2891 y(function)28 b(should)g(fail)f(for)h(an)n(y)e(reason.)p
-0 3081 V 0 3212 a FA(AST)p Fe(_)p FA(MAPKEY)1158 3213
-y Fd(Get)38 b(the)h(k)m(ey)f(at)g(a)h(giv)m(en)e(index)1389
-3328 y(within)g(the)i(KeyMap)2832 3212 y FA(AST)p Fe(_)p
-FA(MAPKEY)0 3507 y Fc(Description:)44 b Fk(This)31 b(function)g
-(returns)e(a)h(string)g(holding)g(the)h(k)n(ey)f(for)g(the)g(en)n(try)g
-(with)h(the)g(giv)n(en)e(index)i(within)227 3607 y(the)d(KeyMap.)227
-3729 y(This)k(function)f(is)h(in)n(tended)f(primarily)g(as)f(a)h(means)
-g(of)g(iterating)g(round)g(all)g(the)h(elemen)n(ts)f(in)h(a)e(KeyMap.)
-227 3829 y(F)-7 b(or)23 b(this)g(purp)r(ose,)h(the)g(n)n(um)n(b)r(er)f
-(of)g(en)n(tries)g(in)g(the)h(KeyMap)e(should)h(\014rst)g(b)r(e)h
-(found)f(using)g(AST)p Ft(_)p Fk(MAPSIZE)227 3928 y(and)29
-b(this)f(function)i(should)e(then)h(b)r(e)g(called)f(in)h(a)f(lo)r(op,)
-g(with)h(the)g(index)g(v)-5 b(alue)28 b(going)f(from)i(one)f(to)g(the)h
-(size)227 4028 y(of)k(the)f(KeyMap.)51 b(The)32 b(index)g(asso)r
-(ciated)f(with)i(a)f(giv)n(en)g(en)n(try)g(is)g(not,)h(in)g(general,)f
-(related)g(to)g(the)h(order)227 4128 y(in)g(whic)n(h)f(the)h(en)n
-(tries)f(are)f(added)i(to)f(the)h(KeyMap,)g(and)f(ma)n(y)g(c)n(hange)f
-(if)i(other)f(en)n(tries)f(are)h(added)g(to)g(or)227
-4227 y(remo)n(v)n(ed)26 b(from)i(the)g(KeyMap.)0 4372
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_MAPKEY\()c
-(THIS,)j(INDEX,)f(STATUS)g(\))0 4517 y Fc(Argumen)m(ts:)259
-4649 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 4749
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)259 4877 y
-Fc(INDEX)k(=)g(INTEGER)f(\(Giv)m(en\))427 4977 y Fk(The)c(index)g(in)n
-(to)g(the)g(KeyMap.)36 b(The)27 b(\014rst)g(en)n(try)f(has)g(index)h
-(one,)g(and)g(the)g(last)f(has)h(index)g(SIZE,)f(the)427
-5076 y(v)-5 b(alue)28 b(returned)f(b)n(y)g(the)h(AST)p
-Ft(_)p Fk(MAPSIZE)f(function.)259 5205 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 5304
-y Fk(The)c(global)e(status.)0 5462 y Fc(Returned)32 b(V)-8
-b(alue:)259 5593 y(AST)p Ft(_)p Fc(MAPKEY)32 b(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h(AST)p Ft(__)p Fc(SZCHR)f(\))427 5693
-y Fk(The)d(k)n(ey)f(v)-5 b(alue.)p eop end
-%%Page: 263 273
-TeXDict begin 263 272 bop 3643 52 a FG(263)0 351 y Fc(Notes:)340
-630 y Fj(\017)45 b Fk(A)25 b(blank)f(string)f(will)i(b)r(e)f(returned)g
-(if)h(this)g(function)f(is)g(in)n(v)n(ok)n(ed)f(with)i(ST)-7
-b(A)g(TUS)25 b(set)f(to)g(an)g(error)f(v)-5 b(alue,)427
-730 y(or)27 b(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 922 3780 12 v 0 1053 a FA(AST)p Fe(_)p FA(MAPLENC)1415
-1054 y Fd(Get)38 b(the)h(n)m(um)m(b)s(er)f(of)1259 1153
-y(c)m(haracters)e(in)j(a)f(c)m(haracter)1402 1253 y(en)m(try)g(in)g(a)h
-(KeyMap)2756 1053 y FA(AST)p Fe(_)p FA(MAPLENC)0 1435
-y Fc(Description:)44 b Fk(This)26 b(function)g(returns)f(the)h(minim)n
-(um)g(length)f(whic)n(h)h(a)f(c)n(haracter)e(v)-5 b(ariable)25
-b(whic)n(h)g(m)n(ust)h(ha)n(v)n(e)e(in)227 1534 y(order)i(to)i(b)r(e)g
-(able)f(to)g(store)g(a)g(sp)r(eci\014ed)g(en)n(try)g(in)h(the)g
-(supplied)g(KeyMap.)36 b(If)27 b(the)h(named)g(en)n(try)f(is)g(a)g(v)n
-(ector)227 1634 y(en)n(try)-7 b(,)27 b(then)i(the)f(returned)f(v)-5
-b(alue)27 b(is)h(the)g(length)f(of)h(the)g(longest)f(elemen)n(t)g(of)h
-(the)g(v)n(ector)e(v)-5 b(alue.)0 1780 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_MAPLENC\()c(THIS,)i(KEY,)h(STATUS)f(\))0
-1926 y Fc(Argumen)m(ts:)259 2058 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 2158 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)259
-2287 y Fc(KEY)k(=)g(CHARA)m(CTER)f Fj(\003)h Fc(\()g
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 2387 y Fk(The)c(c)n(haracter)d
-(string)i(iden)n(tifying)h(the)g(KeyMap)f(en)n(try)-7
-b(.)36 b(T)-7 b(railing)27 b(spaces)f(are)h(ignored.)259
-2516 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 2616 y Fk(The)c(global)e(status.)0 2774
-y Fc(Returned)32 b(V)-8 b(alue:)259 2907 y(AST)p Ft(_)p
-Fc(MAPLENC)32 b(=)g(INTEGER)427 3007 y Fk(The)j(length)g(\(i.e.)59
-b(n)n(um)n(b)r(er)35 b(of)g(c)n(haracters\))e(of)h(the)i(longest)e
-(formatted)g(v)-5 b(alue)35 b(asso)r(ciated)f(with)h(the)427
-3106 y(named)28 b(en)n(try)-7 b(.)0 3265 y Fc(Notes:)340
-3544 y Fj(\017)45 b Fk(A)21 b(function)g(v)-5 b(alue)21
-b(of)f(zero)f(will)i(b)r(e)g(returned)f(without)h(error)e(if)i(the)g
-(named)f(en)n(try)g(cannot)g(b)r(e)h(formatted)427 3643
-y(as)27 b(a)g(c)n(haracter)f(string.)340 3773 y Fj(\017)45
-b Fk(A)29 b(function)g(v)-5 b(alue)28 b(of)g(zero)f(will)h(b)r(e)h
-(returned)e(if)i(an)f(error)e(has)i(already)e(o)r(ccurred,)i(or)f(if)i
-(this)f(function)427 3872 y(should)g(fail)f(for)g(an)n(y)g(reason.)p
-0 4064 V 0 4195 a FA(AST)p Fe(_)p FA(MAPLENGTH)1519 4196
-y Fd(Get)38 b(the)h(v)m(ector)1430 4296 y(length)e(of)i(an)f(en)m(try)
-1555 4409 y(in)g(a)h(KeyMap)2549 4195 y FA(AST)p Fe(_)p
-FA(MAPLENGTH)0 4595 y Fc(Description:)44 b Fk(This)23
-b(function)f(returns)g(the)g(v)n(ector)f(length)h(of)h(a)e(named)h(en)n
-(try)g(in)g(a)g(KeyMap,)h(\(that)f(is,)i(ho)n(w)d(man)n(y)227
-4695 y(v)-5 b(alues)27 b(are)g(asso)r(ciated)f(with)i(the)g(en)n
-(try\).)0 4841 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_MAPLENGTH\()38 b(THIS,)j(KEY,)h(STATUS)f(\))0
-4987 y Fc(Argumen)m(ts:)259 5119 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 5219 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)259
-5348 y Fc(KEY)k(=)g(CHARA)m(CTER)f Fj(\003)h Fc(\()g
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 5448 y Fk(The)c(c)n(haracter)d
-(string)i(iden)n(tifying)h(the)g(KeyMap)f(en)n(try)-7
-b(.)36 b(T)-7 b(railing)27 b(spaces)f(are)h(ignored.)259
-5577 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5677 y Fk(The)c(global)e(status.)p eop
-end
-%%Page: 264 274
-TeXDict begin 264 273 bop 0 52 a FG(264)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(Returned)h(V)-8
-b(alue:)259 484 y(AST)p Ft(_)p Fc(MAPLENGTH)32 b(=)g(INTEGER)427
-584 y Fk(The)f(length)h(of)f(the)g(en)n(try)-7 b(.)47
-b(One)31 b(for)f(a)h(scalar,)g(greater)e(than)i(one)g(for)f(a)h(v)n
-(ector.)46 b(A)32 b(v)-5 b(alue)31 b(of)g(zero)f(is)427
-683 y(returned)d(if)i(the)f(KeyMap)e(do)r(es)h(not)h(con)n(tain)f(the)h
-(named)f(en)n(try)-7 b(.)0 842 y Fc(Notes:)340 1121 y
-Fj(\017)45 b Fk(A)29 b(function)g(v)-5 b(alue)28 b(of)g(zero)f(will)h
-(b)r(e)h(returned)e(if)i(an)f(error)e(has)i(already)e(o)r(ccurred,)i
-(or)f(if)i(this)f(function)427 1220 y(should)g(fail)f(for)g(an)n(y)g
-(reason.)p 0 1412 3780 12 v 0 1543 a FA(AST)p Fe(_)p
-FA(MAPPUT0)p Fb(<)p FA(X)p Fb(>)1566 1544 y Fd(Add)39
-b(a)f(scalar)1638 1644 y(v)-7 b(alue)38 b(to)g(a)1672
-1743 y(KeyMap)2487 1543 y FA(AST)p Fe(_)p FA(MAPPUT0)p
-Fb(<)p FA(X)p Fb(>)0 1925 y Fc(Description:)44 b Fk(This)30
-b(is)g(a)g(set)g(of)g(routine)g(for)f(adding)h(scalar)f(v)-5
-b(alues)29 b(to)h(a)g(KeyMap.)43 b(Y)-7 b(ou)31 b(should)e(use)h(a)g
-(routine)227 2024 y(whic)n(h)j(matc)n(hes)g(the)g(data)g(t)n(yp)r(e)g
-(of)g(the)h(data)e(y)n(ou)h(wish)g(to)g(add)f(to)h(the)h(KeyMap)e(b)n
-(y)h(replacing)f Fm(<)p Fk(X)p Fm(>)g Fk(in)227 2124
-y(the)d(generic)d(routine)i(name)g(AST)p Ft(_)p Fk(MAPPUT0)p
-Fm(<)p Fk(X)p Fm(>)e Fk(b)n(y)i(an)f(appropriate)g(1-c)n(haracter)e(t)n
-(yp)r(e)j(co)r(de)f(\(see)h(the)227 2224 y Ft(")p Fk(Data)f(T)n(yp)r(e)
-h(Co)r(des)p Ft(")f Fk(section)g(b)r(elo)n(w)g(for)g(the)h(co)r(de)f
-(appropriate)f(to)i(eac)n(h)f(supp)r(orted)g(data)g(t)n(yp)r(e\).)0
-2370 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_MAPPUT0)p
-Fm(<)p Ft(X)p Fm(>)p Ft(\()37 b(THIS,)42 b(KEY,)f(VALUE,)h(COMMENT,)e
-(STATUS)h(\))0 2515 y Fc(Argumen)m(ts:)259 2648 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 2748 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(KeyMap)e(in)i(whic)n(h)g(to)f(store)g(the)h(supplied)g(v)
--5 b(alue.)259 2877 y Fc(KEY)32 b(=)g(CHARA)m(CTER)f
-Fj(\003)h Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-2977 y Fk(A)27 b(c)n(haracter)e(string)h(to)h(b)r(e)g(stored)f(with)i
-(the)f(v)-5 b(alue,)27 b(whic)n(h)g(can)f(later)g(b)r(e)i(used)e(to)h
-(iden)n(tify)g(the)h(v)-5 b(alue.)427 3076 y(T)e(railing)27
-b(spaces)f(are)h(ignored.)259 3206 y Fc(V)-11 b(ALUE)33
-b(=)f Fm(<)p Fc(X)p Fm(>)p Fc(t)m(yp)s(e)g(\(Giv)m(en\))427
-3305 y Fk(The)d(v)-5 b(alue)28 b(to)g(b)r(e)h(stored.)38
-b(The)28 b(data)g(t)n(yp)r(e)h(of)f(this)h(v)-5 b(alue)28
-b(should)g(matc)n(h)g(the)h(1-c)n(haracter)c(t)n(yp)r(e)k(co)r(de)427
-3405 y(app)r(ended)23 b(to)g(the)g(routine)f(name)g(\(e.g.)35
-b(if)24 b(y)n(ou)d(are)h(using)g(AST)p Ft(_)p Fk(MAPPUT0A,)g(the)h(t)n
-(yp)r(e)g(of)g(this)g(v)-5 b(alue)427 3505 y(should)28
-b(b)r(e)g Ft(")p Fk(in)n(teger)e(p)r(oin)n(ter)h(for)g(an)g(AstOb)5
-b(ject)p Ft(")p Fk(\).)259 3634 y Fc(COMMENT)31 b(=)h(CHARA)m(CTER)f
-Fj(\003)h Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-3733 y Fk(A)c(commen)n(t)g(string)f(to)g(b)r(e)h(stored)f(with)h(the)g
-(v)-5 b(alue.)259 3863 y Fc(ST)d(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)
-h(and)g(Returned\))427 3962 y Fk(The)c(global)e(status.)0
-4121 y Fc(Notes:)340 4400 y Fj(\017)45 b Fk(Key)27 b(names)g(are)g
-(case)g(sensitiv)n(e,)g(and)g(white)h(space)f(is)h(considered)e
-(signi\014can)n(t.)340 4529 y Fj(\017)45 b Fk(If)27 b(the)f(supplied)h
-(k)n(ey)e(is)h(already)f(in)h(use)g(in)h(the)f(KeyMap,)g(the)g(new)h(v)
--5 b(alue)26 b(will)g(replace)f(the)i(old)f(v)-5 b(alue.)340
-4658 y Fj(\017)45 b Fk(If)36 b(the)g(stored)e(v)-5 b(alue)35
-b(is)g(an)g(AST)h(Ob)5 b(ject)35 b(p)r(oin)n(ter,)i(the)e(Ob)5
-b(ject's)35 b(reference)g(coun)n(t)g(is)g(incremen)n(ted)427
-4758 y(b)n(y)h(this)f(call.)61 b(An)n(y)35 b(subsequen)n(t)h(c)n
-(hanges)e(made)h(to)h(the)g(Ob)5 b(ject)35 b(using)g(the)h(returned)f
-(p)r(oin)n(ter)g(will)427 4857 y(b)r(e)i(re\015ected)g(in)g(an)n(y)e
-(an)n(y)h(other)g(activ)n(e)g(p)r(oin)n(ters)g(for)g(the)h(Ob)5
-b(ject,)39 b(including)e(an)n(y)f(obtained)g(later)427
-4957 y(using)29 b(AST)p Ft(_)p Fk(MAPGET0A.)f(The)h(reference)f(coun)n
-(t)h(for)f(the)h(Ob)5 b(ject)29 b(will)g(b)r(e)h(decremen)n(ted)e(when)
-h(the)427 5057 y(KeyMap)e(is)g(destro)n(y)n(ed,)g(or)f(the)i(en)n(try)f
-(is)h(remo)n(v)n(ed)e(or)g(o)n(v)n(er-written)g(with)i(a)f(di\013eren)n
-(t)h(p)r(oin)n(ter.)-2 5215 y Fc(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)
-227 5361 y Fk(T)-7 b(o)18 b(select)h(the)f(appropriate)f(routine,)j(y)n
-(ou)d(should)i(replace)e Fm(<)p Fk(X)p Fm(>)h Fk(in)g(the)h(generic)e
-(routine)h(name)h(AST)p Ft(_)p Fk(MAPPUT0)p Fm(<)p Fk(X)p
-Fm(>)227 5461 y Fk(with)35 b(a)f(1-c)n(haracter)e(data)h(t)n(yp)r(e)i
-(co)r(de,)h(so)e(as)f(to)i(matc)n(h)f(the)h(data)e(t)n(yp)r(e)i
-Fm(<)p Fk(X)p Fm(>)p Fk(t)n(yp)r(e)f(of)g(the)h(data)f(y)n(ou)g(are)227
-5560 y(pro)r(cessing,)26 b(as)h(follo)n(ws:)340 5693
-y Fj(\017)45 b Fk(D:)28 b(DOUBLE)g(PRECISION)p eop end
-%%Page: 265 275
-TeXDict begin 265 274 bop 3643 52 a FG(265)340 351 y
-Fj(\017)45 b Fk(R:)28 b(REAL)340 469 y Fj(\017)45 b Fk(I:)28
-b(INTEGER)340 586 y Fj(\017)45 b Fk(C:)28 b(CHARA)n(CTER)340
-704 y Fj(\017)45 b Fk(A:)28 b(INTEGER)f(used)h(to)f(iden)n(tify)i(an)e
-(AstOb)5 b(ject)227 851 y(F)-7 b(or)36 b(example,)j(AST)p
-Ft(_)p Fk(MAPPUT0D)d(w)n(ould)g(b)r(e)h(used)f(to)g(store)g(a)g(DOUBLE)
-g(PRECISION)g(v)-5 b(alue,)38 b(while)227 950 y(AST)p
-Ft(_)p Fk(MAPPUT0I)27 b(w)n(ould)g(b)r(e)h(used)g(to)f(store)g(an)g
-(INTEGER,)g(etc.)p 0 1119 3780 12 v 0 1250 a FA(AST)p
-Fe(_)p FA(MAPPUT1)p Fb(<)p FA(X)p Fb(>)1556 1251 y Fd(Add)39
-b(a)g(v)m(ector)1638 1350 y(v)-7 b(alue)38 b(to)g(a)1672
-1450 y(KeyMap)2487 1250 y FA(AST)p Fe(_)p FA(MAPPUT1)p
-Fb(<)p FA(X)p Fb(>)0 1608 y Fc(Description:)44 b Fk(This)30
-b(is)f(a)g(set)g(of)h(routine)f(for)g(adding)f(v)n(ector)h(v)-5
-b(alues)29 b(to)g(a)g(KeyMap.)41 b(Y)-7 b(ou)30 b(should)f(use)g(a)g
-(routine)227 1708 y(whic)n(h)k(matc)n(hes)g(the)g(data)g(t)n(yp)r(e)g
-(of)g(the)h(data)e(y)n(ou)h(wish)g(to)g(add)f(to)h(the)h(KeyMap)e(b)n
-(y)h(replacing)f Fm(<)p Fk(X)p Fm(>)g Fk(in)227 1807
-y(the)d(generic)d(routine)i(name)g(AST)p Ft(_)p Fk(MAPPUT1)p
-Fm(<)p Fk(X)p Fm(>)e Fk(b)n(y)i(an)f(appropriate)g(1-c)n(haracter)e(t)n
-(yp)r(e)j(co)r(de)f(\(see)h(the)227 1907 y Ft(")p Fk(Data)f(T)n(yp)r(e)
-h(Co)r(des)p Ft(")f Fk(section)g(b)r(elo)n(w)g(for)g(the)h(co)r(de)f
-(appropriate)f(to)i(eac)n(h)f(supp)r(orted)g(data)g(t)n(yp)r(e\).)0
-2041 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_MAPPUT1)p
-Fm(<)p Ft(X)p Fm(>)p Ft(\()37 b(THIS,)42 b(KEY,)f(SIZE,)h(VALUE,)f
-(COMMENT,)f(STATUS)h(\))0 2175 y Fc(Argumen)m(ts:)259
-2297 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 2396
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap)e(in)i(whic)n(h)g(to)f(store)
-g(the)h(supplied)g(v)-5 b(alues.)259 2514 y Fc(KEY)32
-b(=)g(CHARA)m(CTER)f Fj(\003)h Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))
-427 2613 y Fk(A)24 b(c)n(haracter)c(string)j(to)g(b)r(e)g(stored)f
-(with)h(the)h(v)-5 b(alues,)23 b(whic)n(h)g(can)g(later)f(b)r(e)h(used)
-g(to)g(iden)n(tify)h(the)f(v)-5 b(alues.)427 2713 y(T)e(railing)27
-b(spaces)f(are)h(ignored.)259 2831 y Fc(SIZE)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 2930 y Fk(The)c(n)n(um)n(b)r(er)f(of)h(elemen)n(ts)f(in)h
-(the)g(supplied)g(arra)n(y)d(of)j(v)-5 b(alues.)259 3048
-y Fc(V)-11 b(ALUE\()33 b Fj(\003)f Fc(\))g(=)g Fm(<)p
-Fc(X)p Fm(>)p Fc(t)m(yp)s(e)f(\(Giv)m(en\))427 3147 y
-Fk(The)g(arra)n(y)c(of)k(v)-5 b(alues)29 b(to)h(b)r(e)h(stored.)44
-b(The)30 b(data)g(t)n(yp)r(e)g(of)g(this)h(v)-5 b(alue)30
-b(should)g(matc)n(h)g(the)g(1-c)n(haracter)427 3247 y(t)n(yp)r(e)f(co)r
-(de)g(app)r(ended)g(to)g(the)h(routine)e(name)h(\(e.g.)41
-b(if)29 b(y)n(ou)f(are)g(using)h(AST)p Ft(_)p Fk(MAPPUT1A,)f(the)h(t)n
-(yp)r(e)427 3347 y(of)f(this)g(v)-5 b(alue)27 b(should)h(b)r(e)g
-Ft(")p Fk(in)n(teger)e(p)r(oin)n(ter)h(for)g(an)g(AstOb)5
-b(ject\))p Ft(")p Fk(.)259 3464 y Fc(COMMENT)31 b(=)h(CHARA)m(CTER)f
-Fj(\003)h Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-3564 y Fk(A)c(commen)n(t)g(string)f(to)g(b)r(e)h(stored)f(with)h(the)g
-(v)-5 b(alues.)259 3682 y Fc(ST)d(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m
-(en)h(and)g(Returned\))427 3781 y Fk(The)c(global)e(status.)0
-3928 y Fc(Notes:)340 4195 y Fj(\017)45 b Fk(If)23 b(the)g(supplied)g(k)
-n(ey)f(is)g(already)f(in)i(use)f(in)h(the)g(KeyMap,)f(the)h(new)g(v)-5
-b(alues)22 b(will)g(replace)g(the)h(old)f(v)-5 b(alues.)340
-4313 y Fj(\017)45 b Fk(Key)27 b(names)g(are)g(case)g(sensitiv)n(e,)g
-(and)g(white)h(space)f(is)h(considered)e(signi\014can)n(t.)-2
-4459 y Fc(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)227 4605
-y Fk(T)-7 b(o)18 b(select)h(the)f(appropriate)f(routine,)j(y)n(ou)d
-(should)i(replace)e Fm(<)p Fk(X)p Fm(>)h Fk(in)g(the)h(generic)e
-(routine)h(name)h(AST)p Ft(_)p Fk(MAPPUT1)p Fm(<)p Fk(X)p
-Fm(>)227 4705 y Fk(with)35 b(a)f(1-c)n(haracter)e(data)h(t)n(yp)r(e)i
-(co)r(de,)h(so)e(as)f(to)i(matc)n(h)f(the)h(data)e(t)n(yp)r(e)i
-Fm(<)p Fk(X)p Fm(>)p Fk(t)n(yp)r(e)f(of)g(the)h(data)f(y)n(ou)g(are)227
-4805 y(pro)r(cessing,)26 b(as)h(follo)n(ws:)340 4926
-y Fj(\017)45 b Fk(D:)28 b(DOUBLE)g(PRECISION)340 5043
-y Fj(\017)45 b Fk(R:)28 b(REAL)340 5161 y Fj(\017)45
-b Fk(I:)28 b(INTEGER)340 5278 y Fj(\017)45 b Fk(C:)28
-b(CHARA)n(CTER)340 5396 y Fj(\017)45 b Fk(A:)28 b(INTEGER)f(used)h(to)f
-(iden)n(tify)i(an)e(AstOb)5 b(ject)227 5543 y(F)-7 b(or)40
-b(example,)j(AST)p Ft(_)p Fk(MAPPUT1D)d(w)n(ould)g(b)r(e)h(used)g(to)f
-(store)g(DOUBLE)g(PRECISION)f(v)-5 b(alues,)43 b(while)227
-5642 y(AST)p Ft(_)p Fk(MAPPUT1I)27 b(w)n(ould)g(b)r(e)h(used)g(to)f
-(store)g(INTEGER,)g(etc.)p eop end
-%%Page: 266 276
-TeXDict begin 266 275 bop 0 52 a FG(266)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(MAPREGION)1381 483 y Fd(T)-10
-b(ransform)37 b(a)h(Region)1442 596 y(in)m(to)f(a)i(new)f(F)-10
-b(rame)1555 696 y(using)38 b(a)g(giv)m(en)1664 809 y(Mapping)2577
-482 y FA(AST)p Fe(_)p FA(MAPREGION)0 1000 y Fc(Description:)44
-b Fk(This)34 b(function)g(returns)f(a)g(p)r(oin)n(ter)g(to)h(a)f(new)h
-(Region)f(whic)n(h)g(corresp)r(onds)f(to)h(supplied)h(Region)227
-1099 y(describ)r(ed)i(b)n(y)g(some)g(other)f(sp)r(eci\014ed)i(co)r
-(ordinate)e(system.)62 b(A)37 b(Mapping)e(is)h(supplied)h(whic)n(h)f
-(transforms)227 1199 y(p)r(ositions)30 b(b)r(et)n(w)n(een)g(the)g(old)g
-(and)g(new)g(co)r(ordinate)e(systems.)44 b(The)30 b(new)g(Region)f(ma)n
-(y)h(not)g(b)r(e)g(of)g(the)g(same)227 1298 y(class)d(as)g(the)h
-(original)e(region.)0 1449 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_MAPREGION\()38 b(THIS,)j(MAP,)h(FRAME,)f
-(STATUS)g(\))0 1601 y Fc(Argumen)m(ts:)259 1739 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 1838 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(Region.)259 1972 y Fc(MAP)k(=)g(INTEGER)f(\(Giv)m(en\))427
-2072 y Fk(P)n(oin)n(ter)25 b(to)i(a)f(Mapping)g(whic)n(h)h(transforms)e
-(p)r(ositions)h(from)h(the)g(co)r(ordinate)e(system)h(represen)n(ted)g
-(b)n(y)427 2171 y(the)32 b(supplied)g(Region)e(to)i(the)f(co)r
-(ordinate)f(system)i(sp)r(eci\014ed)f(b)n(y)g(FRAME.)h(The)f(supplied)h
-(Mapping)427 2271 y(should)k(de\014ne)f(b)r(oth)h(forw)n(ard)e(and)i
-(in)n(v)n(erse)e(transformations,)h(and)h(these)f(transformations)f
-(should)427 2370 y(form)20 b(a)g(gen)n(uine)g(in)n(v)n(erse)f(pair.)33
-b(That)21 b(is,)g(transforming)e(a)h(p)r(osition)g(using)g(the)h(forw)n
-(ard)d(transformation)427 2470 y(and)29 b(then)g(using)f(the)h(in)n(v)n
-(erse)e(transformation)g(should)h(pro)r(duce)h(the)g(original)e(input)i
-(p)r(osition.)40 b(Some)427 2570 y(Mapping)31 b(classes)e(\(suc)n(h)i
-(as)f(P)n(ermMap,)g(MathMap,)i(SphMap\))f(can)g(result)f(in)h(Mappings)
-f(for)h(whic)n(h)427 2669 y(this)d(is)g(not)f(true.)259
-2803 y Fc(FRAME)k(=)h(INTEGER)g(\(Giv)m(en\))427 2903
-y Fk(P)n(oin)n(ter)26 b(to)i(a)f(F)-7 b(rame)27 b(describing)g(the)h
-(co)r(ordinate)e(system)h(in)h(whic)n(h)g(the)g(new)f(Region)g(is)h
-(required.)259 3036 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)
-h(and)g(Returned\))427 3136 y Fk(The)c(global)e(status.)0
-3299 y Fc(Returned)32 b(V)-8 b(alue:)259 3437 y(AST)p
-Ft(_)p Fc(MAPREGION)31 b(=)h(INTEGER)427 3537 y Fk(A)26
-b(p)r(oin)n(ter)e(to)h(a)f(new)h(Region.)36 b(This)24
-b(Region)h(will)g(represen)n(t)e(the)j(area)d(within)j(the)f(co)r
-(ordinate)f(system)427 3637 y(sp)r(eci\014ed)k(b)n(y)f(FRAME)h(whic)n
-(h)g(corresp)r(onds)e(to)h(the)h(supplied)g(Region.)0
-3800 y Fc(Notes:)340 4084 y Fj(\017)45 b Fk(The)24 b(uncertain)n(t)n(y)
-f(asso)r(ciated)f(with)i(the)h(supplied)f(Region)f(is)g(mo)r(di\014ed)h
-(using)g(the)g(supplied)g(Mapping.)340 4218 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 4318
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 4519 V 0 4649 a FA(AST)p
-Fe(_)p FA(MAPREMO)l(VE)1419 4650 y Fd(Remo)m(v)m(ed)38
-b(a)g(named)1569 4750 y(en)m(try)g(from)g(a)1672 4863
-y(KeyMap)2524 4649 y FA(AST)p Fe(_)p FA(MAPREMO)l(VE)0
-5054 y Fc(Description:)44 b Fk(This)35 b(routine)g(remo)n(v)n(es)e(a)i
-(named)g(en)n(try)g(from)f(a)h(KeyMap.)59 b(It)35 b(returns)f(without)i
-(action)f(if)g(the)227 5153 y(KeyMap)27 b(do)r(es)g(not)h(con)n(tain)f
-(the)h(sp)r(eci\014ed)g(k)n(ey)-7 b(.)0 5304 y Fc(In)m(v)m(o)s(cation:)
-123 b Ft(CALL)42 b(AST_MAPREMOVE\()37 b(THIS,)42 b(KEY,)g(STATUS)f(\))0
-5455 y Fc(Argumen)m(ts:)259 5593 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 5693 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)p
-eop end
-%%Page: 267 277
-TeXDict begin 267 276 bop 3643 52 a FG(267)259 351 y
-Fc(KEY)32 b(=)g(CHARA)m(CTER)f Fj(\003)h Fc(\()g Fj(\003)f
-Fc(\))h(\(Giv)m(en\))427 451 y Fk(The)c(c)n(haracter)d(string)i(iden)n
-(tifying)h(the)g(v)-5 b(alue)28 b(to)f(b)r(e)h(retriev)n(ed.)36
-b(T)-7 b(railing)26 b(spaces)h(are)g(ignored.)259 588
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 688 y Fk(The)c(global)e(status.)p 0 895 3780 12 v
-0 1026 a FA(AST)p Fe(_)p FA(MAPSIZE)1110 1027 y Fd(Get)39
-b(the)f(n)m(um)m(b)s(er)g(of)h(en)m(tries)e(in)i(a)1672
-1127 y(KeyMap)2832 1026 y FA(AST)p Fe(_)p FA(MAPSIZE)0
-1324 y Fc(Description:)44 b Fk(This)28 b(function)g(returns)f(the)h(n)n
-(um)n(b)r(er)f(of)h(en)n(tries)f(in)h(a)f(KeyMap.)0 1482
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_MAPSIZE\()c
-(THIS,)i(STATUS)g(\))0 1640 y Fc(Argumen)m(ts:)259 1785
-y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 1885 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(KeyMap.)259 2022 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 2121
-y Fk(The)c(global)e(status.)0 2292 y Fc(Returned)32 b(V)-8
-b(alue:)259 2437 y(AST)p Ft(_)p Fc(MAPSIZE)33 b(=)f(INTEGER)427
-2536 y Fk(The)c(n)n(um)n(b)r(er)f(of)h(en)n(tries)f(in)h(the)g(KeyMap.)
-0 2707 y Fc(Notes:)340 2998 y Fj(\017)45 b Fk(A)29 b(function)g(v)-5
-b(alue)28 b(of)g(zero)f(will)h(b)r(e)h(returned)e(if)i(an)f(error)e
-(has)i(already)e(o)r(ccurred,)i(or)f(if)i(this)f(function)427
-3097 y(should)g(fail)f(for)g(an)n(y)g(reason.)p 0 3305
-V 0 3436 a FA(AST)p Fe(_)p FA(MAPSPLIT)1272 3437 y Fd(Split)38
-b(a)g(Mapping)g(up)h(in)m(to)1402 3551 y(parallel)d(comp)s(onen)m(t)
-1641 3665 y(Mappings)2736 3436 y FA(AST)p Fe(_)p FA(MAPSPLIT)0
-3862 y Fc(Description:)44 b Fk(This)36 b(routine)f(creates)f(a)h(new)h
-(Mapping)f(whic)n(h)g(connects)g(sp)r(eci\014ed)h(inputs)g(within)g(a)f
-(supplied)227 3962 y(Mapping)41 b(to)g(the)g(corresp)r(onding)f
-(outputs)h(of)g(the)h(supplied)f(Mapping.)77 b(This)41
-b(is)g(only)g(p)r(ossible)g(if)g(the)227 4061 y(sp)r(eci\014ed)c
-(inputs)h(corresp)r(ond)d(to)i(some)g(subset)g(of)f(the)i(Mapping)e
-(outputs.)66 b(That)37 b(is,)i(there)e(m)n(ust)g(exist)227
-4161 y(a)f(subset)f(of)h(the)g(Mapping)g(outputs)g(for)f(whic)n(h)h
-(eac)n(h)f(output)h(dep)r(ends)g(only)g(on)f(the)h(selected)g(Mapping)
-227 4261 y(inputs,)29 b(and)f(not)g(on)f(an)n(y)h(of)g(the)g(inputs)g
-(whic)n(h)g(ha)n(v)n(e)f(not)h(b)r(een)g(selected.)38
-b(Also,)28 b(an)n(y)f(output)i(whic)n(h)f(is)g(not)227
-4360 y(in)j(this)g(subset)f(m)n(ust)h(not)g(dep)r(end)g(on)f(an)n(y)g
-(of)g(the)h(selected)g(inputs.)46 b(If)31 b(these)g(conditions)f(are)f
-(not)i(met)g(b)n(y)227 4460 y(the)d(supplied)g(Mapping,)f(then)i(an)e
-(AST)p Ft(__)p Fk(NULL)g(Mapping)h(p)r(oin)n(ter)f(is)g(returned.)0
-4618 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_MAPSPLIT\()c
-(THIS,)j(NIN,)h(IN,)h(OUT,)f(MAP,)g(STATUS)f(\))0 4776
-y Fc(Argumen)m(ts:)259 4921 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427
-5020 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Mapping)f(to)g(b)r(e)h(split.)
-259 5157 y Fc(NIN)k(=)g(INTEGER)f(\(Giv)m(en\))427 5257
-y Fk(The)d(n)n(um)n(b)r(er)f(of)h(inputs)g(to)f(pic)n(k)h(from)f(THIS.)
-259 5394 y Fc(IN\()32 b(NIN)f(\))h(=)g(INTEGER)g(\(Giv)m(en\))427
-5494 y Fk(An)39 b(arra)n(y)c(holding)j(the)g(indices)g(within)h(the)f
-(supplied)h(Mapping)e(of)h(the)h(inputs)f(whic)n(h)g(are)f(to)h(b)r(e)
-427 5593 y(pic)n(k)n(ed)31 b(from)h(the)g(Mapping.)49
-b(If)32 b Ft(")p Fk(Nin)p Ft(")f Fk(is)h(the)g(n)n(um)n(b)r(er)g(of)f
-(inputs)i(of)e(the)i(supplied)f(Mapping,)g(then)427 5693
-y(eac)n(h)27 b(elemen)n(t)h(should)f(ha)n(v)n(e)g(a)g(v)-5
-b(alue)27 b(in)h(the)g(range)e(1)h(to)h(Nin.)p eop end
-%%Page: 268 278
-TeXDict begin 268 277 bop 0 52 a FG(268)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(OUT\()i
-Fj(\003)e Fc(\))h(=)g(INTEGER)f(\(Returned\))427 451
-y Fk(An)j(arra)n(y)d(in)i(whic)n(h)g(to)g(return)g(the)g(indices)h(of)f
-(the)g(outputs)h(of)f(the)g(supplied)h(Mapping)f(whic)n(h)g(are)427
-551 y(fed)f(b)n(y)g(the)f(pic)n(k)n(ed)g(inputs.)50 b(A)31
-b(v)-5 b(alue)32 b(of)f(one)g(is)h(used)f(to)h(refer)f(to)g(the)h
-(\014rst)f(Mapping)g(output.)50 b(The)427 650 y(supplied)30
-b(arra)n(y)d(should)i(ha)n(v)n(e)f(a)h(length)h(at)f(least)g(equal)g
-(to)g(the)h(n)n(um)n(b)r(er)f(of)g(outputs)h(in)g(the)f(supplied)427
-750 y(Mapping.)36 b(The)27 b(n)n(um)n(b)r(er)e(of)i(v)-5
-b(alues)25 b(stored)h(in)g(the)h(arra)n(y)c(on)j(exit)h(will)f(equal)g
-(the)g(n)n(um)n(b)r(er)g(of)g(outputs)427 849 y(in)j(the)g(returned)f
-(Mapping.)39 b(The)28 b(i'th)h(elemen)n(t)f(in)h(the)g(returned)f(arra)
-n(y)e(holds)i(the)h(index)f(within)h(the)427 949 y(supplied)f(Mapping)f
-(whic)n(h)h(corresp)r(onds)e(to)h(the)h(i'th)g(output)g(of)g(the)g
-(returned)f(Mapping.)259 1079 y Fc(MAP)32 b(=)g(INTEGER)f(\(Returned\))
-427 1178 y Fk(The)d(returned)f(Mapping.)36 b(This)28
-b(Mapping)f(will)h(ha)n(v)n(e)e(NIN)i(inputs)h(\(the)f(n)n(um)n(b)r(er)
-f(of)h(outputs)f(ma)n(y)g(b)r(e)427 1278 y(di\013eren)n(t)f(to)f
-(NIN\).)h(AST)p Ft(__)p Fk(NULL)f(is)h(returned)f(if)g(the)h(supplied)g
-(Mapping)f(has)g(no)g(subset)g(of)g(outputs)427 1378
-y(whic)n(h)j(dep)r(end)g(only)f(on)h(the)g(selected)f(inputs.)0
-1536 y Fc(Notes:)340 1816 y Fj(\017)45 b Fk(If)31 b(this)g(routine)f
-(is)h(in)n(v)n(ok)n(ed)e(with)i(the)g(global)e(error)g(status)h(set,)i
-(or)d(if)i(it)g(should)g(fail)f(for)g(an)n(y)g(reason,)427
-1915 y(then)e(AST)p Ft(__)p Fk(NULL)g(will)g(b)r(e)g(returned)f(for)g
-(MAP)-7 b(.)p 0 2109 3780 12 v 0 2239 a FA(AST)p Fe(_)p
-FA(MAPTYPE)1281 2240 y Fd(Get)39 b(the)f(data)g(t)m(yp)s(e)g(of)h(an)
-1402 2353 y(en)m(try)f(in)g(a)h(KeyMap)2752 2239 y FA(AST)p
-Fe(_)p FA(MAPTYPE)0 2536 y Fc(Description:)44 b Fk(This)34
-b(function)g(returns)f(a)g(v)-5 b(alue)33 b(indicating)h(the)g(data)f
-(t)n(yp)r(e)g(of)h(a)f(named)h(en)n(try)f(in)g(a)g(KeyMap.)227
-2636 y(This)28 b(is)f(the)h(data)f(t)n(yp)r(e)h(whic)n(h)g(w)n(as)e
-(used)i(when)g(the)g(en)n(try)f(w)n(as)f(added)i(to)f(the)h(KeyMap.)0
-2782 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_MAPTYPE\()c
-(THIS,)i(KEY,)h(STATUS)f(\))0 2928 y Fc(Argumen)m(ts:)259
-3062 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 3161
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)259 3291 y
-Fc(KEY)k(=)g(CHARA)m(CTER)f Fj(\003)h Fc(\()g Fj(\003)f
-Fc(\))h(\(Giv)m(en\))427 3391 y Fk(The)c(c)n(haracter)d(string)i(iden)n
-(tifying)h(the)g(KeyMap)f(en)n(try)-7 b(.)36 b(T)-7 b(railing)27
-b(spaces)f(are)h(ignored.)259 3520 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 3620
-y Fk(The)c(global)e(status.)0 3779 y Fc(Returned)32 b(V)-8
-b(alue:)259 3912 y(AST)p Ft(_)p Fc(MAPTYPE)33 b(=)f(INTEGER)427
-4012 y Fk(One)c(of)f(AST)p Ft(__)p Fk(INTTYPE)g(\(for)g(in)n(teger\),)h
-(AST)p Ft(__)p Fk(DOUBLETYPE)e(\(for)h(double)h(precision)e(\015oating)
-427 4111 y(p)r(oin)n(t\),)i(AST)p Ft(__)p Fk(FLO)n(A)-7
-b(TTYPE)25 b(\(for)i(single)f(precision)g(\015oating)g(p)r(oin)n(t\),)i
-(AST)p Ft(__)p Fk(STRINGTYPE)e(\(for)427 4211 y(c)n(haracter)i
-(string\))h(or)f(AST)p Ft(__)p Fk(OBJECTTYPE)f(\(for)i(AST)h(Ob)5
-b(ject)29 b(p)r(oin)n(ter\).)42 b(AST)p Ft(__)p Fk(BADTYPE)29
-b(is)427 4311 y(returned)e(if)i(the)f(supplied)f(k)n(ey)g(is)h(not)f
-(found)h(in)g(the)g(KeyMap.)0 4470 y Fc(Notes:)340 4749
-y Fj(\017)45 b Fk(A)26 b(function)g(v)-5 b(alue)26 b(of)f(AST)p
-Ft(__)p Fk(BADTYPE)g(will)h(b)r(e)g(returned)f(if)h(an)f(error)f(has)h
-(already)f(o)r(ccurred,)g(or)h(if)427 4849 y(this)j(function)g(should)g
-(fail)f(for)g(an)n(y)g(reason.)p 0 5042 V 0 5172 a FA(AST)p
-Fe(_)p FA(MARK)1058 5173 y Fd(Dra)m(w)38 b(a)h(set)f(of)h(mark)m(ers)e
-(for)g(a)i(Plot)3013 5172 y FA(AST)p Fe(_)p FA(MARK)0
-5347 y Fc(Description:)44 b Fk(This)33 b(routine)g(dra)n(ws)e(a)i(set)f
-(of)h(mark)n(ers)e(\(sym)n(b)r(ols\))i(at)g(p)r(ositions)f(sp)r
-(eci\014ed)h(in)g(the)g(ph)n(ysical)f(co-)227 5447 y(ordinate)c(system)
-h(of)g(a)f(Plot.)40 b(The)29 b(p)r(ositions)f(are)g(transformed)g(in)n
-(to)g(graphical)f(co)r(ordinates)h(to)h(determine)227
-5547 y(where)e(the)h(mark)n(ers)e(should)h(app)r(ear)g(within)h(the)g
-(plotting)g(area.)0 5693 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_MARK\()e(THIS,)h(NMARK,)g(NCOORD,)g(INDIM,)g(IN,)h
-(TYPE,)g(STATUS)f(\))p eop end
-%%Page: 269 279
-TeXDict begin 269 278 bop 3643 52 a FG(269)0 351 y Fc(Argumen)m(ts:)259
-486 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 586 y
-Fk(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259 718 y Fc(NMARK)j(=)h
-(INTEGER)f(\(Giv)m(en\))427 817 y Fk(The)d(n)n(um)n(b)r(er)f(of)h(mark)
-n(ers)d(to)j(dra)n(w.)36 b(This)27 b(ma)n(y)g(b)r(e)h(zero,)f(in)g
-(whic)n(h)h(case)f(nothing)g(will)h(b)r(e)g(dra)n(wn.)259
-949 y Fc(NCOORD)j(=)h(INTEGER)f(\(Giv)m(en\))427 1048
-y Fk(The)37 b(n)n(um)n(b)r(er)f(of)h(co)r(ordinates)e(b)r(eing)i
-(supplied)g(for)f(eac)n(h)g(mark)f(\(i.e.)65 b(the)37
-b(n)n(um)n(b)r(er)f(of)h(axes)e(in)i(the)427 1148 y(curren)n(t)27
-b(F)-7 b(rame)27 b(of)h(the)g(Plot,)f(as)g(giv)n(en)f(b)n(y)i(its)f
-(Naxes)g(attribute\).)259 1280 y Fc(INDIM)32 b(=)g(INTEGER)f(\(Giv)m
-(en\))427 1379 y Fk(The)25 b(n)n(um)n(b)r(er)f(of)g(elemen)n(ts)g
-(along)f(the)i(\014rst)f(dimension)g(of)g(the)h(IN)f(arra)n(y)e(\(whic)
-n(h)i(con)n(tains)g(the)g(mark)n(er)427 1479 y(co)r(ordinates\).)37
-b(This)28 b(v)-5 b(alue)28 b(is)g(required)f(so)h(that)g(the)g(co)r
-(ordinate)f(v)-5 b(alues)28 b(can)f(b)r(e)i(correctly)d(lo)r(cated)i
-(if)427 1579 y(they)g(do)f(not)h(en)n(tirely)f(\014ll)h(this)g(arra)n
-(y)-7 b(.)34 b(The)28 b(v)-5 b(alue)28 b(giv)n(en)e(should)i(not)f(b)r
-(e)h(less)f(than)h(NMARK.)259 1710 y Fc(IN\()k(INDIM,)f(NCOORD)g(\))h
-(=)g(DOUBLE)g(PRECISION)g(\(Giv)m(en\))427 1810 y Fk(A)c(2-dimensional)
-f(arra)n(y)e(giving)i(the)h(ph)n(ysical)f(co)r(ordinates)f(of)i(the)g
-(p)r(oin)n(ts)g(where)f(mark)n(ers)f(are)h(to)g(b)r(e)427
-1909 y(dra)n(wn.)38 b(These)28 b(should)g(b)r(e)h(stored)e(suc)n(h)h
-(that)g(the)h(v)-5 b(alue)28 b(of)g(co)r(ordinate)f(n)n(um)n(b)r(er)h
-(COORD)g(for)g(input)427 2009 y(mark)f(n)n(um)n(b)r(er)g(MARK)h(is)g
-(found)f(in)h(elemen)n(t)g(IN\(MARK,COORD\).)259 2141
-y Fc(TYPE)33 b(=)f(INTEGER)f(\(Giv)m(en\))427 2240 y
-Fk(A)26 b(v)-5 b(alue)25 b(sp)r(ecifying)h(the)g(t)n(yp)r(e)f(\(e.g.)36
-b(shap)r(e\))26 b(of)f(mark)n(er)f(to)h(b)r(e)h(dra)n(wn.)35
-b(The)26 b(set)f(of)h(v)-5 b(alues)25 b(whic)n(h)g(ma)n(y)427
-2340 y(b)r(e)j(used)g(\(and)g(the)g(shap)r(es)f(that)h(will)f(result\))
-h(is)f(determined)h(b)n(y)g(the)g(underlying)f(graphics)f(system.)259
-2471 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 2571 y Fk(The)c(global)e(status.)0 2732
-y Fc(Notes:)340 3013 y Fj(\017)45 b Fk(Mark)n(ers)21
-b(are)g(not)i(dra)n(wn)f(at)g(p)r(ositions)g(whic)n(h)h(ha)n(v)n(e)e
-(an)n(y)h(co)r(ordinate)f(equal)i(to)f(the)h(v)-5 b(alue)23
-b(AST)p Ft(__)p Fk(BAD)427 3113 y(\(or)38 b(where)g(the)g
-(transformation)f(in)n(to)h(graphical)e(co)r(ordinates)h(yields)h(co)r
-(ordinates)f(con)n(taining)g(the)427 3212 y(v)-5 b(alue)28
-b(AST)p Ft(__)p Fk(BAD\).)340 3344 y Fj(\017)45 b Fk(If)28
-b(an)n(y)f(mark)n(er)f(p)r(osition)h(is)h(clipp)r(ed)g(\(see)g(AST)p
-Ft(_)p Fk(CLIP\),)f(then)h(the)g(en)n(tire)f(mark)n(er)f(is)h(not)h
-(dra)n(wn.)340 3475 y Fj(\017)45 b Fk(An)28 b(error)e(results)h(if)h
-(the)g(base)f(F)-7 b(rame)27 b(of)h(the)g(Plot)f(is)g(not)h
-(2-dimensional.)340 3607 y Fj(\017)45 b Fk(An)30 b(error)d(also)g
-(results)i(if)g(the)g(transformation)f(b)r(et)n(w)n(een)h(the)g(curren)
-n(t)f(and)h(base)f(F)-7 b(rames)28 b(of)h(the)g(Plot)427
-3707 y(is)f(not)f(de\014ned)h(\(i.e.)38 b(the)28 b(Plot's)e(T)-7
-b(ranIn)n(v)n(erse)26 b(attribute)h(is)h(zero\).)p 0
-3903 3780 12 v 0 4034 a FA(AST)p Fe(_)p FA(MASK)p Fb(<)p
-FA(X)p Fb(>)1280 4035 y Fd(Mask)39 b(a)f(region)f(of)i(a)f(data)1789
-4150 y(grid)2755 4034 y FA(AST)p Fe(_)p FA(MASK)p Fb(<)p
-FA(X)p Fb(>)0 4341 y Fc(Description:)44 b Fk(This)34
-b(is)f(a)g(set)g(of)g(functions)h(for)e(masking)h(out)g(regions)f
-(within)i(gridded)e(data)h(\(e.g.)54 b(an)33 b(image\).)227
-4440 y(The)g(functions)h(mo)r(di\014es)f(a)f(giv)n(en)h(data)f(grid)h
-(b)n(y)f(assigning)g(a)g(sp)r(eci\014ed)i(v)-5 b(alue)33
-b(to)f(all)h(samples)g(whic)n(h)g(are)227 4540 y(inside)28
-b(\(or)f(outside)g(if)h(INSIDE)g(is)g(.F)-9 b(ALSE.\))28
-b(the)g(sp)r(eci\014ed)g(Region.)227 4664 y(Y)-7 b(ou)21
-b(should)g(use)f(a)h(masking)f(function)h(whic)n(h)g(matc)n(hes)f(the)h
-(n)n(umerical)f(t)n(yp)r(e)h(of)g(the)g(data)f(y)n(ou)g(are)g(pro)r
-(cessing)227 4763 y(b)n(y)40 b(replacing)e Fm(<)p Fk(X)p
-Fm(>)h Fk(in)h(the)g(generic)f(function)h(name)f(AST)p
-Ft(_)p Fk(MASK)p Fm(<)p Fk(X)p Fm(>)g Fk(b)n(y)h(an)f(appropriate)f(1-)
-h(or)f(2-)227 4863 y(c)n(haracter)29 b(t)n(yp)r(e)i(co)r(de.)46
-b(F)-7 b(or)30 b(example,)i(if)f(y)n(ou)f(are)g(masking)g(data)g(with)h
-(t)n(yp)r(e)g(REAL,)g(y)n(ou)f(should)h(use)f(the)227
-4963 y(function)35 b(AST)p Ft(_)p Fk(MASKR)f(\(see)g(the)h
-Ft(")p Fk(Data)e(T)n(yp)r(e)h(Co)r(des)p Ft(")f Fk(section)h(b)r(elo)n
-(w)g(for)f(the)i(co)r(des)e(appropriate)g(to)227 5062
-y(other)27 b(n)n(umerical)g(t)n(yp)r(es\).)0 5210 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(RESULT)41 b(=)i(AST_MASK)p Fm(<)p Ft(X)p
-Fm(>)p Ft(\()c(THIS,)i(MAP,)h(INSIDE,)f(NDIM,)g(LBND,)h(UBND,)f(IN,)i
-(VAL,)f(STATUS)227 5310 y(\))0 5458 y Fc(Argumen)m(ts:)259
-5593 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 5693
-y Fk(P)n(oin)n(ter)26 b(to)i(a)f(Region.)p eop end
-%%Page: 270 280
-TeXDict begin 270 279 bop 0 52 a FG(270)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(MAP)h(=)g(INTEGER)f
-(\(Giv)m(en\))427 451 y Fk(P)n(oin)n(ter)f(to)h(a)g(Mapping.)47
-b(The)31 b(forw)n(ard)f(transformation)f(should)i(map)g(p)r(ositions)g
-(in)g(the)h(co)r(ordinate)427 551 y(system)j(of)g(the)h(supplied)f
-(Region)f(in)n(to)h(pixel)g(co)r(ordinates)f(as)h(de\014ned)g(b)n(y)g
-(the)g(LBND)h(and)f(UBND)427 650 y(argumen)n(ts.)g(A)26
-b(v)-5 b(alue)25 b(of)h(AST)p Ft(__)p Fk(NULL)f(can)g(b)r(e)h(supplied)
-g(if)g(the)g(co)r(ordinate)e(system)h(of)g(the)h(supplied)427
-750 y(Region)h(corresp)r(onds)f(to)h(pixel)h(co)r(ordinates.)35
-b(This)28 b(is)f(equiv)-5 b(alen)n(t)28 b(to)f(supplying)h(a)f
-(UnitMap.)427 871 y(The)37 b(n)n(um)n(b)r(er)g(of)g(inputs)g(for)f
-(this)i(Mapping)e(\(as)h(giv)n(en)f(b)n(y)g(its)h(Nin)h(attribute\))f
-(should)g(matc)n(h)f(the)427 970 y(n)n(um)n(b)r(er)28
-b(of)f(axes)g(in)g(the)h(supplied)g(Region)f(\(as)g(giv)n(en)g(b)n(y)g
-(the)h(Naxes)f(attribute)h(of)f(the)h(Region\).)37 b(The)427
-1070 y(n)n(um)n(b)r(er)23 b(of)f(outputs)h(for)f(the)h(Mapping)f(\(as)g
-(giv)n(en)g(b)n(y)h(its)f(Nout)h(attribute\))g(should)g(matc)n(h)f(the)
-h(n)n(um)n(b)r(er)427 1170 y(of)28 b(grid)f(dimensions)g(giv)n(en)g(b)n
-(y)g(the)h(v)-5 b(alue)28 b(of)f(NDIM)i(b)r(elo)n(w.)259
-1312 y Fc(INSIDE)j(=)g(INTEGER)f(\(Giv)m(en\))427 1411
-y Fk(A)24 b(b)r(o)r(olean)e(v)-5 b(alue)23 b(whic)n(h)g(indicates)g
-(whic)n(h)f(pixel)h(are)f(to)h(b)r(e)h(mask)n(ed.)34
-b(If)24 b(.TR)n(UE.)e(is)h(supplied,)h(then)g(all)427
-1511 y(grid)i(pixels)h(with)g(cen)n(tres)f(inside)h(the)g(supplied)g
-(Region)f(are)f(assigned)h(the)h(v)-5 b(alue)26 b(giv)n(en)g(b)n(y)h(V)
--9 b(AL,)27 b(and)427 1611 y(all)k(other)f(pixels)g(are)g(left)i(unc)n
-(hanged.)45 b(If)31 b(.F)-9 b(ALSE.)31 b(is)g(supplied,)h(then)f(all)g
-(grid)f(pixels)g(with)h(cen)n(tres)427 1710 y(not)d(inside)h(the)f
-(supplied)g(Region)g(are)f(assigned)g(the)h(v)-5 b(alue)28
-b(giv)n(en)f(b)n(y)h(V)-9 b(AL,)29 b(and)e(all)h(other)g(pixels)g(are)
-427 1810 y(left)i(unc)n(hanged.)42 b(Note,)30 b(the)g(Negated)f
-(attribute)h(of)g(the)f(Region)g(is)h(used)f(to)h(determine)f(whic)n(h)
-h(pixel)427 1910 y(are)g(inside)h(the)h(Region)e(and)h(whic)n(h)g(are)e
-(outside.)47 b(So)31 b(the)g(inside)g(of)g(a)g(Region)f(whic)n(h)h(has)
-f(not)h(b)r(een)427 2009 y(negated)c(is)h(the)g(same)f(as)g(the)h
-(outside)f(of)h(the)g(corresp)r(onding)d(negated)i(Region.)427
-2130 y(F)-7 b(or)31 b(t)n(yp)r(es)g(of)h(Region)e(suc)n(h)h(as)g(P)n
-(oin)n(tList)g(whic)n(h)g(ha)n(v)n(e)f(zero)g(v)n(olume,)i(pixel)g(cen)
-n(tres)e(will)i(rarely)e(fall)427 2230 y(exactly)25 b(within)h(the)g
-(Region.)36 b(F)-7 b(or)25 b(this)h(reason,)e(the)i(inclusion)f
-(criterion)g(is)g(c)n(hanged)g(for)g(zero-v)n(olume)427
-2329 y(Regions)32 b(so)h(that)g(pixels)g(are)f(included)h(\(or)f
-(excluded\))i(if)f(an)n(y)f(part)h(of)g(the)g(Region)g(passes)e
-(through)427 2429 y(the)f(pixel.)43 b(F)-7 b(or)29 b(a)g(P)n(oin)n
-(tList,)g(this)h(means)g(that)f(pixels)h(are)e(included)i(\(or)f
-(excluded\))h(if)h(they)e(con)n(tain)427 2529 y(at)f(least)f(one)g(of)h
-(the)g(p)r(oin)n(ts)f(listed)h(in)g(the)g(P)n(oin)n(tList.)259
-2671 y Fc(NDIM)k(=)g(INTEGER)f(\(Giv)m(en\))427 2770
-y Fk(The)d(n)n(um)n(b)r(er)f(of)h(dimensions)f(in)h(the)g(input)g
-(grid.)36 b(This)28 b(should)f(b)r(e)h(at)g(least)f(one.)259
-2913 y Fc(LBND\()32 b(NDIM)g(\))g(=)g(INTEGER)f(\(Giv)m(en\))427
-3012 y Fk(An)j(arra)n(y)d(con)n(taining)h(the)i(co)r(ordinates)e(of)h
-(the)h(cen)n(tre)f(of)g(the)g(\014rst)h(pixel)f(in)g(the)h(input)g
-(grid)f(along)427 3112 y(eac)n(h)27 b(dimension.)259
-3254 y Fc(UBND\()32 b(NDIM)g(\))g(=)g(INTEGER)f(\(Giv)m(en\))427
-3354 y Fk(An)k(arra)n(y)d(con)n(taining)h(the)h(co)r(ordinates)f(of)h
-(the)h(cen)n(tre)f(of)g(the)g(last)g(pixel)g(in)h(the)f(input)h(grid)f
-(along)427 3453 y(eac)n(h)27 b(dimension.)427 3574 y(Note)i(that)g
-(LBND)g(and)f(UBND)h(together)f(de\014ne)h(the)f(shap)r(e)h(and)f(size)
-g(of)h(the)g(input)g(grid,)f(its)h(exten)n(t)427 3674
-y(along)24 b(a)h(particular)f(\(J'th\))j(dimension)e(b)r(eing)g
-(UBND\(J\)-LBND\(J\)+1.)37 b(They)25 b(also)f(de\014ne)i(the)g(input)
-427 3774 y(grid's)33 b(co)r(ordinate)f(system,)i(eac)n(h)f(pixel)g(ha)n
-(ving)g(unit)h(exten)n(t)f(along)f(eac)n(h)h(dimension)g(with)h(in)n
-(tegral)427 3873 y(co)r(ordinate)27 b(v)-5 b(alues)27
-b(at)g(its)h(cen)n(tre.)259 4015 y Fc(IN\()k Fj(\003)f
-Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p Fm(>)g Fc(\(Giv)m(en)g(and)g
-(Returned\))427 4115 y Fk(An)24 b(arra)n(y)-7 b(,)21
-b(with)j(one)f(elemen)n(t)g(for)f(eac)n(h)g(pixel)i(in)f(the)g(input)h
-(grid,)f(con)n(taining)f(the)i(data)e(to)h(b)r(e)g(mask)n(ed.)427
-4215 y(The)30 b(n)n(umerical)e(t)n(yp)r(e)h(of)h(this)f(arra)n(y)e
-(should)i(matc)n(h)g(the)h(1-)e(or)g(2-c)n(haracter)f(t)n(yp)r(e)i(co)r
-(de)g(app)r(ended)h(to)427 4314 y(the)24 b(function)g(name)f(\(e.g.)35
-b(if)23 b(y)n(ou)g(are)f(using)h(AST)p Ft(_)p Fk(MASKR,)g(the)h(t)n(yp)
-r(e)f(of)g(eac)n(h)g(arra)n(y)e(elemen)n(t)i(should)427
-4414 y(b)r(e)28 b(REAL\).)427 4535 y(The)33 b(storage)f(order)f(of)j
-(data)e(within)i(this)g(arra)n(y)c(should)j(b)r(e)h(suc)n(h)f(that)g
-(the)h(index)f(of)g(the)g(\014rst)g(grid)427 4634 y(dimension)39
-b(v)-5 b(aries)39 b(most)g(rapidly)g(and)g(that)g(of)h(the)f(\014nal)g
-(dimension)h(least)f(rapidly)f(\(i.e.)73 b(normal)427
-4734 y(F)-7 b(ortran)27 b(arra)n(y)e(storage)h(order\).)427
-4855 y(On)h(exit,)h(the)g(samples)e(sp)r(eci\014ed)i(b)n(y)f(INSIDE)g
-(are)g(set)g(to)g(the)h(v)-5 b(alue)27 b(of)g(V)-9 b(AL.)28
-b(All)f(other)g(samples)g(are)427 4955 y(left)i(unc)n(hanged.)259
-5097 y Fc(V)-11 b(AL)33 b(=)f Fm(<)p Fc(Xt)m(yp)s(e)p
-Fm(>)g Fc(\(Giv)m(en\))427 5196 y Fk(This)h(argumen)n(t)e(should)h(ha)n
-(v)n(e)g(the)g(same)g(t)n(yp)r(e)h(as)f(the)h(elemen)n(ts)f(of)g(the)h
-(IN)g(arra)n(y)-7 b(.)49 b(It)33 b(sp)r(eci\014es)f(the)427
-5296 y(v)-5 b(alue)28 b(used)f(to)h(\015ag)f(the)h(mask)n(ed)e(data)h
-(\(see)h(INSIDE\).)259 5438 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f
-(\(Giv)m(en)h(and)g(Returned\))427 5538 y Fk(The)c(global)e(status.)0
-5718 y Fc(Returned)32 b(V)-8 b(alue:)p eop end
-%%Page: 271 281
-TeXDict begin 271 280 bop 3643 52 a FG(271)259 351 y
-Fc(AST)p Ft(_)p Fc(MASK)p Fm(<)p Fc(X)p Fm(>)31 b Fc(=)h(INTEGER)427
-451 y Fk(The)c(n)n(um)n(b)r(er)f(of)h(pixels)f(to)h(whic)n(h)f(a)g(v)-5
-b(alue)28 b(of)f(BAD)n(V)-9 b(AL)28 b(has)g(b)r(een)g(assigned.)0
-613 y Fc(Notes:)340 895 y Fj(\017)45 b Fk(A)27 b(v)-5
-b(alue)25 b(of)h(zero)f(will)h(b)r(e)g(returned)g(if)g(this)g(function)
-h(is)f(in)n(v)n(ok)n(ed)e(with)j(the)f(global)f(error)f(status)h(set,)h
-(or)427 995 y(if)i(it)g(should)g(fail)f(for)h(an)n(y)e(reason.)-2
-1157 y Fc(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)227 1303
-y Fk(T)-7 b(o)26 b(select)g(the)g(appropriate)e(masking)h(function,)i
-(y)n(ou)e(should)h(replace)f Fm(<)p Fk(X)p Fm(>)h Fk(in)g(the)g
-(generic)f(function)i(name)227 1403 y(AST)p Ft(_)p Fk(MASK)p
-Fm(<)p Fk(X)p Fm(>)37 b Fk(with)i(a)e(1-)g(or)g(2-c)n(haracter)d(data)k
-(t)n(yp)r(e)f(co)r(de,)k(so)c(as)g(to)g(matc)n(h)h(the)g(n)n(umerical)e
-(t)n(yp)r(e)227 1502 y Fm(<)p Fk(Xt)n(yp)r(e)p Fm(>)27
-b Fk(of)h(the)g(data)f(y)n(ou)g(are)g(pro)r(cessing,)f(as)h(follo)n
-(ws:)340 1639 y Fj(\017)45 b Fk(D:)28 b(DOUBLE)g(PRECISION)340
-1772 y Fj(\017)45 b Fk(R:)28 b(REAL)340 1905 y Fj(\017)45
-b Fk(I:)28 b(INTEGER)340 2038 y Fj(\017)45 b Fk(UI:)28
-b(INTEGER)f(\(treated)h(as)f(unsigned\))340 2170 y Fj(\017)45
-b Fk(S:)28 b(INTEGER)p Fj(\003)p Fk(2)e(\(short)h(in)n(teger\))340
-2303 y Fj(\017)45 b Fk(US:)28 b(INTEGER)p Fj(\003)p Fk(2)f(\(short)g
-(in)n(teger,)f(treated)i(as)f(unsigned\))340 2436 y Fj(\017)45
-b Fk(B:)28 b(BYTE)f(\(treated)h(as)e(signed\))340 2569
-y Fj(\017)45 b Fk(UB:)28 b(BYTE)f(\(treated)h(as)f(unsigned\))227
-2731 y(F)-7 b(or)18 b(example,)i(AST)p Ft(_)p Fk(MASKD)f(w)n(ould)f(b)r
-(e)g(used)h(to)f(pro)r(cess)f(DOUBLE)h(PRECISION)g(data,)h(while)g(AST)
-p Ft(_)p Fk(MASKS)227 2831 y(w)n(ould)27 b(b)r(e)h(used)g(to)f(pro)r
-(cess)g(short)g(in)n(teger)f(data)i(\(stored)f(in)g(an)h(INTEGER)p
-Fj(\003)p Fk(2)e(arra)n(y\),)f(etc.)227 2955 y(F)-7 b(or)32
-b(compatibilit)n(y)h(with)g(other)f(Starlink)g(facilities,)i(the)f(co)r
-(des)g(W)g(and)f(UW)h(are)f(pro)n(vided)g(as)g(synon)n(yms)227
-3055 y(for)27 b(S)h(and)g(US)g(resp)r(ectiv)n(ely)e(\(but)j(only)e(in)h
-(the)g(F)-7 b(ortran)26 b(in)n(terface)h(to)h(AST\).)p
-0 3254 3780 12 v 0 3385 a FA(AST)p Fe(_)p FA(MA)-11 b(TCHAXES)1660
-3386 y Fd(Find)39 b(an)m(y)1405 3501 y(corresp)s(onding)d(axes)1528
-3614 y(in)i(t)m(w)m(o)f(F)-10 b(rames)2568 3385 y FA(AST)p
-Fe(_)p FA(MA)f(TCHAXES)0 3780 y Fc(Description:)44 b
-Fk(This)c(function)h(lo)r(oks)e(for)g(corresp)r(onding)f(axes)h(within)
-i(t)n(w)n(o)e(supplied)h(F)-7 b(rames.)74 b(An)40 b(arra)n(y)e(of)227
-3879 y(in)n(tegers)f(is)i(returned)f(that)g(con)n(tains)g(an)g(elemen)n
-(t)g(for)g(eac)n(h)f(axis)h(in)g(the)h(second)f(supplied)h(F)-7
-b(rame.)68 b(An)227 3979 y(elemen)n(t)36 b(in)h(this)f(arra)n(y)d(will)
-j(b)r(e)h(set)f(to)g(zero)e(if)j(the)f(asso)r(ciated)f(axis)g(within)h
-(the)h(second)e(F)-7 b(rame)36 b(has)f(no)227 4078 y(corresp)r(onding)j
-(axis)h(within)i(the)f(\014rst)g(F)-7 b(rame.)73 b(Otherwise,)43
-b(it)d(will)g(b)r(e)g(set)g(to)g(the)g(index)g(\(a)g(non-zero)227
-4178 y(p)r(ositiv)n(e)27 b(in)n(teger\))g(of)h(the)g(corresp)r(onding)e
-(axis)g(within)j(the)f(\014rst)f(supplied)h(F)-7 b(rame.)0
-4328 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_MATCHAXES\()37
-b(FRM1,)42 b(FRM2,)g(AXES,)f(STATUS)g(\))0 4477 y Fc(Argumen)m(ts:)259
-4614 y(FRM1)31 b(=)h(INTEGER)f(\(Giv)m(en\))427 4713
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(\014rst)f(F)-7 b(rame.)259
-4846 y Fc(FRM2)31 b(=)h(INTEGER)f(\(Giv)m(en\))427 4946
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(second)f(F)-7 b(rame.)259
-5079 y Fc(AXES)32 b(=)g(INTEGER\()g Fj(\003)f Fc(\))h(\(Returned\))427
-5178 y Fk(An)38 b(in)n(teger)e(arra)n(y)f(in)j(whic)n(h)f(to)g(return)g
-(the)g(indices)g(of)h(the)f(axes)g(\(within)h(the)f(\014rst)g(F)-7
-b(rame\))37 b(that)427 5278 y(corresp)r(ond)23 b(to)h(eac)n(h)g(axis)f
-(within)i(the)g(second)e(F)-7 b(rame.)36 b(Axis)24 b(indices)g(start)g
-(at)g(1.)35 b(A)25 b(v)-5 b(alue)24 b(of)g(zero)f(will)427
-5377 y(b)r(e)28 b(stored)f(in)h(the)g(returned)f(arra)n(y)e(for)j(eac)n
-(h)e(axis)h(in)h(the)g(second)f(F)-7 b(rame)27 b(that)h(has)f(no)h
-(corresp)r(onding)427 5477 y(axis)f(in)h(the)g(\014rst)f(F)-7
-b(rame.)427 5593 y(The)26 b(n)n(um)n(b)r(er)f(of)g(elemen)n(ts)h(in)f
-(this)h(arra)n(y)d(m)n(ust)j(b)r(e)g(greater)d(than)j(or)e(equal)h(to)g
-(the)h(n)n(um)n(b)r(er)f(of)h(axes)e(in)427 5693 y(the)k(second)f(F)-7
-b(rame.)p eop end
-%%Page: 272 282
-TeXDict begin 272 281 bop 0 52 a FG(272)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-451 y Fk(The)c(global)e(status.)0 609 y Fc(Class)31 b(Applicabilit)m
-(y:)259 742 y(F)-8 b(rame)427 841 y Fk(This)28 b(function)g(applies)f
-(to)h(all)f(F)-7 b(rames.)0 999 y Fc(Notes:)340 1278
-y Fj(\017)45 b Fk(Corresp)r(onding)17 b(axes)i(are)f(iden)n(ti\014ed)h
-(b)n(y)g(the)h(fact)f(that)g(a)g(Mapping)g(can)f(b)r(e)i(found)f(b)r
-(et)n(w)n(een)g(them)h(using)427 1378 y(AST)p Ft(_)p
-Fk(FINDFRAME)41 b(or)e(AST)p Ft(_)p Fk(CONVER)-7 b(T.)39
-b(Th)n(us,)j Ft(")p Fk(corresp)r(onding)c(axes)p Ft(")g
-Fk(are)h(not)g(necessarily)427 1477 y(iden)n(tical.)34
-b(F)-7 b(or)19 b(instance,)i(SkyF)-7 b(rame)19 b(axes)g(in)h(t)n(w)n(o)
-f(F)-7 b(rames)19 b(will)h(matc)n(h)f(ev)n(en)g(if)h(they)g(describ)r
-(e)f(di\013eren)n(t)427 1577 y(celestial)27 b(co)r(ordinate)g(systems)p
-0 1768 3780 12 v 0 1899 a FA(AST)p Fe(_)p FA(MA)-11 b(THMAP)1399
-1900 y Fd(Create)37 b(a)i(MathMap)2711 1899 y FA(AST)p
-Fe(_)p FA(MA)-11 b(THMAP)0 2081 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(MathMap)h(and)f
-(optionally)g(initialises)g(its)h(attributes.)227 2204
-y(A)20 b(MathMap)f(is)g(a)g(Mapping)g(whic)n(h)g(allo)n(ws)f(y)n(ou)h
-(to)g(sp)r(ecify)h(a)f(set)g(of)g(forw)n(ard)f(and/or)f(in)n(v)n(erse)h
-(transformation)227 2303 y(functions)40 b(using)f(arithmetic)g(op)r
-(erations)f(and)h(mathematical)g(functions)h(similar)e(to)h(those)g(a)n
-(v)-5 b(ailable)38 b(in)227 2403 y(F)-7 b(ortran.)60
-b(The)35 b(MathMap)h(in)n(terprets)e(these)i(functions)g(at)f
-(run-time,)j(whenev)n(er)c(its)i(forw)n(ard)d(or)i(in)n(v)n(erse)227
-2503 y(transformation)26 b(is)g(required.)36 b(Because)26
-b(the)h(functions)g(are)f(not)h(compiled)g(in)g(the)h(normal)d(sense)i
-(\(unlik)n(e)g(an)227 2602 y(In)n(traMap\),)32 b(they)g(ma)n(y)f(b)r(e)
-h(used)g(to)f(describ)r(e)g(co)r(ordinate)g(transformations)f(in)i(a)f
-(transp)r(ortable)f(manner.)227 2702 y(A)25 b(MathMap)g(therefore)f
-(pro)n(vides)f(a)i(\015exible)f(w)n(a)n(y)g(of)h(de\014ning)g(new)f(t)n
-(yp)r(es)h(of)g(Mapping)f(whose)g(descriptions)227 2802
-y(ma)n(y)j(b)r(e)h(stored)f(as)g(part)g(of)h(a)f(dataset)g(and)g(in)n
-(terpreted)g(b)n(y)h(other)f(programs.)0 2947 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(RESULT)41 b(=)i(AST_MATHMAP\()c(NIN,)j(NOUT,)f(NFWD,)
-h(FWD,)g(NINV,)f(INV,)h(OPTIONS,)e(STATUS)h(\))0 3093
-y Fc(Argumen)m(ts:)259 3225 y(NIN)32 b(=)g(INTEGER)427
-3325 y Fk(Num)n(b)r(er)c(of)f(input)i(v)-5 b(ariables)26
-b(for)h(the)h(MathMap.)36 b(This)28 b(determines)f(the)h(v)-5
-b(alue)27 b(of)h(its)f(Nin)h(attribute.)259 3454 y Fc(NOUT)k(=)g
-(INTEGER)427 3554 y Fk(Num)n(b)r(er)20 b(of)g(output)h(v)-5
-b(ariables)18 b(for)h(the)i(MathMap.)34 b(This)20 b(determines)f(the)i
-(v)-5 b(alue)19 b(of)h(its)g(Nout)g(attribute.)259 3683
-y Fc(NFWD)32 b(=)g(INTEGER)427 3782 y Fk(The)26 b(n)n(um)n(b)r(er)f(of)
-h(forw)n(ard)e(transformation)g(functions)i(b)r(eing)g(supplied.)37
-b(This)25 b(m)n(ust)h(b)r(e)g(at)g(least)f(equal)427
-3882 y(to)35 b(NOUT,)g(but)h(ma)n(y)e(b)r(e)i(increased)e(to)g(accommo)
-r(date)g(an)n(y)h(additional)f(expressions)f(whic)n(h)i(de\014ne)427
-3981 y(in)n(termediate)23 b(v)-5 b(ariables)21 b(for)i(the)g(forw)n
-(ard)e(transformation)g(\(see)i(the)g Ft(")p Fk(Calculating)f(In)n
-(termediate)g(V)-7 b(al-)427 4081 y(ues)p Ft(")27 b Fk(section)h(b)r
-(elo)n(w\).)259 4210 y Fc(FWD)k(=)g(CHARA)m(CTER)g Fj(\003)f
-Fc(\()h Fj(\003)f Fc(\)\()h(NFWD)g(\))427 4310 y Fk(An)c(arra)n(y)d
-(whic)n(h)i(con)n(tains)g(the)g(expressions)f(de\014ning)h(the)h(forw)n
-(ard)e(transformation.)35 b(The)27 b(syn)n(tax)g(of)427
-4409 y(these)h(expressions)e(is)h(describ)r(ed)h(b)r(elo)n(w.)259
-4538 y Fc(NINV)k(=)g(INTEGER)427 4638 y Fk(The)c(n)n(um)n(b)r(er)g(of)g
-(in)n(v)n(erse)f(transformation)f(functions)i(b)r(eing)h(supplied.)38
-b(This)28 b(m)n(ust)g(b)r(e)h(at)f(least)f(equal)427
-4738 y(to)e(NIN,)g(but)g(ma)n(y)f(b)r(e)h(increased)e(to)h(accommo)r
-(date)g(an)n(y)f(additional)h(expressions)f(whic)n(h)i(de\014ne)f(in)n
-(ter-)427 4837 y(mediate)30 b(v)-5 b(ariables)28 b(for)h(the)h(in)n(v)n
-(erse)e(transformation)g(\(see)h(the)h Ft(")p Fk(Calculating)e(In)n
-(termediate)h(V)-7 b(alues)p Ft(")427 4937 y Fk(section)27
-b(b)r(elo)n(w\).)259 5066 y Fc(INV)32 b(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\)\()h(NINV)g(\))427 5166
-y Fk(An)e(arra)n(y)d(whic)n(h)j(con)n(tains)e(the)i(expressions)e
-(de\014ning)i(the)g(in)n(v)n(erse)e(transformation.)40
-b(The)30 b(syn)n(tax)f(of)427 5265 y(these)f(expressions)e(is)h
-(describ)r(ed)h(b)r(elo)n(w.)259 5394 y Fc(OPTIONS)k(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-5494 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h(optional)
-f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f(to)g(b)r
-(e)427 5593 y(used)i(for)f(initialising)g(the)h(new)f(MathMap.)35
-b(The)23 b(syn)n(tax)e(used)i(is)f(iden)n(tical)g(to)h(that)f(for)g
-(the)h(AST)p Ft(_)p Fk(SET)427 5693 y(routine.)37 b(If)28
-b(no)f(initialisation)g(is)h(required,)e(a)i(blank)f(v)-5
-b(alue)27 b(ma)n(y)g(b)r(e)h(supplied.)p eop end
-%%Page: 273 283
-TeXDict begin 273 282 bop 3643 52 a FG(273)259 351 y
-Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-451 y Fk(The)c(global)e(status.)0 619 y Fc(Returned)32
-b(V)-8 b(alue:)259 762 y(AST)p Ft(_)p Fc(MA)g(THMAP)32
-b(=)g(INTEGER)427 861 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g
-(MathMap.)0 1030 y Fc(Notes:)340 1319 y Fj(\017)45 b
-Fk(The)e(sequence)f(of)h(n)n(um)n(b)r(ers)f(pro)r(duced)g(b)n(y)h(the)g
-(random)f(n)n(um)n(b)r(er)g(functions)h(a)n(v)-5 b(ailable)42
-b(within)h(a)427 1418 y(MathMap)c(is)h(normally)e(unpredictable)h(and)g
-(di\013eren)n(t)h(for)f(eac)n(h)f(MathMap.)72 b(Ho)n(w)n(ev)n(er,)41
-b(this)f(b)r(e-)427 1518 y(ha)n(viour)26 b(ma)n(y)h(b)r(e)h(con)n
-(trolled)f(b)n(y)g(means)g(of)h(the)g(MathMap's)f(Seed)g(attribute.)340
-1654 y Fj(\017)45 b Fk(Normally)-7 b(,)40 b(comp)r(ound)e(Mappings)g
-(\(CmpMaps\))g(whic)n(h)g(in)n(v)n(olv)n(e)f(MathMaps)h(will)g(not)g(b)
-r(e)g(sub)5 b(ject)427 1753 y(to)43 b(simpli\014cation)g(\(e.g.)82
-b(using)43 b(AST)p Ft(_)p Fk(SIMPLIFY\))g(b)r(ecause)f(AST)i(cannot)e
-(kno)n(w)g(ho)n(w)g(di\013eren)n(t)427 1853 y(MathMaps)37
-b(will)h(in)n(teract.)65 b(Ho)n(w)n(ev)n(er,)38 b(in)f(the)h(sp)r
-(ecial)f(case)f(where)h(a)g(MathMap)g(o)r(ccurs)f(in)i(series)427
-1953 y(with)d(its)g(o)n(wn)f(in)n(v)n(erse,)h(then)g(simpli\014cation)g
-(ma)n(y)e(b)r(e)i(p)r(ossible.)58 b(Whether)35 b(simpli\014cation)f(do)
-r(es,)i(in)427 2052 y(fact,)f(o)r(ccur)d(under)h(these)g(circumstances)
-f(is)g(con)n(trolled)g(b)n(y)h(the)g(MathMap's)f(SimpFI)i(and)f(SimpIF)
-427 2152 y(attributes.)340 2288 y Fj(\017)45 b Fk(A)21
-b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 2388
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 2556 y Fc(De\014ning)32
-b(T)-8 b(ransformation)32 b(F)-8 b(unctions)n(:)227 2702
-y Fk(A)24 b(MathMap's)g(transformation)e(functions)i(are)e(supplied)j
-(as)e(a)g(set)h(of)f(expressions)f(in)i(an)g(arra)n(y)d(of)j(c)n
-(haracter)227 2802 y(strings.)34 b(Normally)19 b(y)n(ou)g(w)n(ould)g
-(supply)h(the)g(same)g(n)n(um)n(b)r(er)f(of)h(expressions)e(for)i(the)g
-(forw)n(ard)e(transformation,)227 2901 y(via)30 b(the)h(FWD)g(argumen)n
-(t,)f(as)g(there)g(are)g(output)h(v)-5 b(ariables)29
-b(\(giv)n(en)h(b)n(y)g(the)g(MathMap's)g(Nout)h(attribute\).)227
-3001 y(F)-7 b(or)27 b(instance,)h(if)g(Nout)g(is)f(2)g(y)n(ou)g(migh)n
-(t)h(use:)340 3144 y Fj(\017)45 b Fk('R)28 b(=)f(SQR)-7
-b(T\()28 b(X)g Fj(\003)f Fk(X)h(+)f(Y)h Fj(\003)g Fk(Y)g(\)')340
-3280 y Fj(\017)45 b Fk('THET)-7 b(A)28 b(=)f(A)-7 b(T)g(AN2\()29
-b(Y,)f(X)g(\)')227 3448 y(whic)n(h)21 b(de\014nes)f(a)g(transformation)
-f(from)h(Cartesian)f(to)i(p)r(olar)e(co)r(ordinates.)33
-b(Here,)22 b(the)f(v)-5 b(ariables)19 b(that)i(app)r(ear)227
-3547 y(on)30 b(the)h(left)g(of)f(eac)n(h)g(expression)f(\(R)h(and)h
-(THET)-7 b(A\))30 b(pro)n(vide)g(names)f(for)h(the)h(output)g(v)-5
-b(ariables)29 b(and)h(those)227 3647 y(that)e(app)r(ear)f(on)g(the)h
-(righ)n(t)f(\(X)h(and)g(Y\))g(are)e(references)h(to)g(input)i(v)-5
-b(ariables.)227 3775 y(T)e(o)28 b(complemen)n(t)g(this,)h(y)n(ou)f(m)n
-(ust)g(also)f(supply)h(expressions)f(for)h(the)g(in)n(v)n(erse)f
-(transformation)g(via)g(the)i(INV)227 3874 y(argumen)n(t.)62
-b(In)36 b(this)h(case,)g(the)g(n)n(um)n(b)r(er)f(of)g(expressions)f
-(giv)n(en)g(w)n(ould)h(normally)f(matc)n(h)h(the)h(n)n(um)n(b)r(er)f
-(of)227 3974 y(MathMap)28 b(input)g(co)r(ordinates)e(\(giv)n(en)h(b)n
-(y)h(the)g(Nin)g(attribute\).)37 b(If)28 b(Nin)g(is)g(2,)f(y)n(ou)g
-(migh)n(t)g(use:)340 4117 y Fj(\017)45 b Fk('X)28 b(=)g(R)f
-Fj(\003)g Fk(COS\()h(THET)-7 b(A)28 b(\)')340 4253 y
-Fj(\017)45 b Fk('Y)28 b(=)g(R)f Fj(\003)g Fk(SIN\()i(THET)-7
-b(A)28 b(\)')227 4421 y(whic)n(h)f(expresses)e(the)i(transformation)e
-(from)i(p)r(olar)f(to)g(Cartesian)g(co)r(ordinates.)35
-b(Note)26 b(that)h(here)g(the)g(input)227 4521 y(v)-5
-b(ariables)33 b(\(X)i(and)f(Y\))g(are)g(named)g(on)f(the)i(left)g(of)f
-(eac)n(h)f(expression,)h(and)g(the)h(output)f(v)-5 b(ariables)33
-b(\(R)i(and)227 4620 y(THET)-7 b(A\))28 b(are)f(referenced)g(on)g(the)h
-(righ)n(t.)227 4748 y(Normally)-7 b(,)25 b(y)n(ou)e(cannot)i(refer)f
-(to)g(a)g(v)-5 b(ariable)24 b(on)g(the)h(righ)n(t)f(of)h(an)f
-(expression)f(unless)h(it)i(is)e(named)h(on)f(the)h(left)227
-4848 y(of)j(an)g(expression)f(in)i(the)f(complemen)n(tary)f(set)h(of)h
-(functions.)39 b(Therefore)27 b(b)r(oth)h(sets)g(of)g(functions)h
-(\(forw)n(ard)227 4947 y(and)d(in)n(v)n(erse\))e(m)n(ust)i(b)r(e)g
-(form)n(ulated)f(using)g(the)i(same)e(consisten)n(t)g(set)g(of)h(v)-5
-b(ariable)25 b(names.)35 b(This)26 b(means)f(that)227
-5047 y(if)35 b(y)n(ou)f(wish)h(to)f(lea)n(v)n(e)g(one)g(of)g(the)h
-(transformations)e(unde\014ned,)k(y)n(ou)d(m)n(ust)h(supply)g(dumm)n(y)
-f(expressions)227 5146 y(whic)n(h)28 b(simply)f(name)h(eac)n(h)f(of)g
-(the)h(output)g(\(or)f(input\))i(v)-5 b(ariables.)36
-b(F)-7 b(or)27 b(example,)g(y)n(ou)g(migh)n(t)g(use:)340
-5289 y Fj(\017)45 b Fk('X')340 5425 y Fj(\017)g Fk('Y')227
-5593 y(for)22 b(the)h(in)n(v)n(erse)d(transformation)h(ab)r(o)n(v)n(e,)
-h(whic)n(h)g(serv)n(es)f(to)h(name)g(the)g(input)h(v)-5
-b(ariables)21 b(but)i(without)g(de\014ning)227 5693 y(an)28
-b(in)n(v)n(erse)e(transformation.)p eop end
-%%Page: 274 284
-TeXDict begin 274 283 bop 0 52 a FG(274)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)-2 351 y Fc(Calculating)h(In)m
-(termediate)g(V)-8 b(alues)n(:)227 497 y Fk(It)23 b(is)g(sometimes)g
-(useful)g(to)g(calculate)f(in)n(termediate)g(v)-5 b(alues)23
-b(and)g(then)g(to)g(use)f(these)h(in)g(the)h(\014nal)e(expressions)227
-597 y(for)28 b(the)g(output)h(\(or)e(input\))i(v)-5 b(ariables.)37
-b(This)27 b(ma)n(y)h(b)r(e)g(done)g(b)n(y)f(supplying)h(additional)g
-(expressions)e(for)h(the)227 697 y(forw)n(ard)e(\(or)i(in)n(v)n(erse\))
-e(transformation)h(functions.)36 b(F)-7 b(or)27 b(instance,)g(the)g
-(follo)n(wing)f(arra)n(y)e(of)j(\014v)n(e)f(expressions)227
-796 y(describ)r(es)h(2-dimensional)g(pin-cushion)g(distortion:)340
-938 y Fj(\017)45 b Fk('R)28 b(=)f(SQR)-7 b(T\()28 b(XIN)g
-Fj(\003)g Fk(XIN)g(+)f(YIN)h Fj(\003)f Fk(YIN)i(\)')340
-1073 y Fj(\017)45 b Fk('R)n(OUT)28 b(=)f(R)h Fj(\003)f
-Fk(\()h(1)f(+)g(0.1)g Fj(\003)g Fk(R)h Fj(\003)f Fk(R)h(\)')340
-1208 y Fj(\017)45 b Fk('THET)-7 b(A)28 b(=)f(A)-7 b(T)g(AN2\()29
-b(YIN,)f(XIN)g(\)',)340 1343 y Fj(\017)45 b Fk('X)n(OUT)28
-b(=)f(R)n(OUT)g Fj(\003)g Fk(COS\()h(THET)-7 b(A)28 b(\)')340
-1479 y Fj(\017)45 b Fk('YOUT)28 b(=)f(R)n(OUT)h Fj(\003)f
-Fk(SIN\()h(THET)-7 b(A)28 b(\)')227 1645 y(Here,)h(w)n(e)g(\014rst)g
-(calculate)f(three)h(in)n(termediate)g(results)f(\(R,)i(R)n(OUT)e(and)h
-(THET)-7 b(A\))29 b(and)g(then)h(use)f(these)g(to)227
-1745 y(calculate)22 b(the)h(\014nal)g(results)f(\(X)n(OUT)g(and)h
-(YOUT\).)g(The)f(MathMap)h(kno)n(ws)e(that)i(only)f(the)h(\014nal)f(t)n
-(w)n(o)g(results)227 1845 y(constitute)k(v)-5 b(alues)25
-b(for)g(the)h(output)g(v)-5 b(ariables)25 b(b)r(ecause)g(its)g(Nout)h
-(attribute)g(is)f(set)h(to)f(2.)36 b(Y)-7 b(ou)26 b(ma)n(y)e(de\014ne)i
-(as)227 1944 y(man)n(y)k(in)n(termediate)g(v)-5 b(ariables)29
-b(in)h(this)h(w)n(a)n(y)e(as)h(y)n(ou)f(c)n(ho)r(ose.)44
-b(Ha)n(ving)29 b(de\014ned)i(a)f(v)-5 b(ariable,)30 b(y)n(ou)g(ma)n(y)f
-(then)227 2044 y(refer)e(to)h(it)g(on)f(the)h(righ)n(t)f(of)g(an)n(y)g
-(subsequen)n(t)g(expressions.)227 2171 y(Note)36 b(that)g(when)g
-(de\014ning)g(the)g(in)n(v)n(erse)e(transformation)g(y)n(ou)h(ma)n(y)g
-(only)g(refer)g(to)h(the)g(output)g(v)-5 b(ariables)227
-2271 y(X)n(OUT)29 b(and)g(YOUT.)g(The)f(in)n(termediate)h(v)-5
-b(ariables)27 b(R,)i(R)n(OUT)g(and)f(THET)-7 b(A)29 b(\(ab)r(o)n(v)n
-(e\))f(are)g(priv)-5 b(ate)29 b(to)f(the)227 2370 y(forw)n(ard)36
-b(transformation)f(and)i(ma)n(y)g(not)g(b)r(e)h(referenced)e(b)n(y)h
-(the)h(in)n(v)n(erse)e(transformation.)64 b(The)37 b(in)n(v)n(erse)227
-2470 y(transformation)26 b(ma)n(y)-7 b(,)27 b(ho)n(w)n(ev)n(er,)f
-(de\014ne)i(its)f(o)n(wn)g(priv)-5 b(ate)28 b(in)n(termediate)f(v)-5
-b(ariables.)-2 2624 y Fc(Expression)31 b(Syn)m(tax)n(:)227
-2770 y Fk(The)39 b(expressions)d(giv)n(en)i(for)g(the)h(forw)n(ard)d
-(and)j(in)n(v)n(erse)e(transformations)f(closely)i(follo)n(w)f(the)i
-(syn)n(tax)f(of)227 2870 y(F)-7 b(ortran)20 b(\(with)h(some)g
-(extensions)f(for)g(compatibilit)n(y)g(with)i(the)f(C)g(language\).)33
-b(They)21 b(ma)n(y)f(con)n(tain)g(references)227 2970
-y(to)h(v)-5 b(ariables)19 b(and)h(literal)g(constan)n(ts,)h(together)e
-(with)i(arithmetic,)h(logical,)f(relational)e(and)h(bit)n(wise)h(op)r
-(erators,)227 3069 y(and)28 b(function)h(in)n(v)n(o)r(cations.)38
-b(A)28 b(set)h(of)f(sym)n(b)r(olic)g(constan)n(ts)f(is)h(also)f(a)n(v)
--5 b(ailable.)38 b(Eac)n(h)27 b(of)h(these)h(is)f(describ)r(ed)227
-3169 y(in)34 b(detail)f(b)r(elo)n(w.)55 b(P)n(aren)n(theses)31
-b(ma)n(y)i(b)r(e)g(used)h(to)f(o)n(v)n(er-ride)e(the)j(normal)e(order)h
-(of)g(ev)-5 b(aluation.)54 b(There)33 b(is)227 3268 y(no)h(built-in)g
-(limit)h(to)f(the)g(length)g(of)g(expressions)e(and)i(they)g(are)f
-(insensitiv)n(e)g(to)h(case)f(or)g(the)i(presence)e(of)227
-3368 y(additional)27 b(white)h(space.)-2 3522 y Fc(V)-8
-b(ariables)n(:)227 3668 y Fk(V)h(ariable)26 b(names)h(m)n(ust)f(b)r
-(egin)h(with)h(an)e(alphab)r(etic)h(c)n(haracter)e(and)h(ma)n(y)g(con)n
-(tain)h(only)f(alphab)r(etic)h(c)n(harac-)227 3768 y(ters,)j(digits,)g
-(and)f(the)h(underscore)e(c)n(haracter)f Ft("_")p Fk(.)42
-b(There)29 b(is)g(no)g(built-in)h(limit)g(to)g(the)g(length)f(of)h(v)-5
-b(ariable)227 3868 y(names.)-2 4022 y Fc(Literal)32 b(Constan)m(ts)n(:)
-227 4168 y Fk(Literal)f(constan)n(ts,)g(suc)n(h)g(as)g
-Ft(")p Fk(0)p Ft(")p Fk(,)g Ft(")p Fk(1)p Ft(")p Fk(,)g
-Ft(")p Fk(0.007)p Ft(")e Fk(or)h Ft(")p Fk(2.505E-16)p
-Ft(")d Fk(ma)n(y)k(app)r(ear)f(in)i(expressions,)e(with)i(the)227
-4268 y(decimal)26 b(p)r(oin)n(t)g(and)g(exp)r(onen)n(t)f(b)r(eing)h
-(optional)f(\(a)h Ft(")p Fk(D)p Ft(")f Fk(ma)n(y)h(also)e(b)r(e)j(used)
-e(as)h(an)f(exp)r(onen)n(t)h(c)n(haracter\).)34 b(A)227
-4367 y(unary)27 b(min)n(us)h Ft(")p Fk(-)p Ft(")e Fk(ma)n(y)h(b)r(e)h
-(used)g(as)f(a)g(pre\014x.)-2 4522 y Fc(Arithmetic)32
-b(Precision)n(:)227 4668 y Fk(All)c(arithmetic)g(is)f(\015oating)g(p)r
-(oin)n(t,)h(p)r(erformed)f(in)h(double)f(precision.)-2
-4822 y Fc(Propagation)33 b(of)e(Missing)f(Data)n(:)227
-4968 y Fk(Unless)i(indicated)g(otherwise,)h(if)f(an)n(y)f(argumen)n(t)g
-(of)h(a)g(function)g(or)g(op)r(erator)e(has)h(the)i(v)-5
-b(alue)32 b(AST)p Ft(__)p Fk(BAD)227 5068 y(\(indicating)38
-b(missing)f(data\),)j(then)e(the)g(result)f(of)g(that)h(function)g(or)e
-(op)r(eration)h(is)g(also)g(AST)p Ft(__)p Fk(BAD,)g(so)227
-5168 y(that)k(suc)n(h)e(v)-5 b(alues)40 b(are)f(propagated)f
-(automatically)h(through)g(all)h(op)r(erations)f(p)r(erformed)g(b)n(y)h
-(MathMap)227 5267 y(transformations.)35 b(The)26 b(sp)r(ecial)h(v)-5
-b(alue)26 b(AST)p Ft(__)p Fk(BAD)g(can)h(b)r(e)f(represen)n(ted)g(in)g
-(expressions)f(b)n(y)h(the)h(sym)n(b)r(olic)227 5367
-y(constan)n(t)g Ft(")p Fm(<)p Fk(bad)p Fm(>)p Ft(")p
-Fk(.)227 5494 y(A)33 b Fm(<)p Fk(bad)p Fm(>)f Fk(result)g(\(i.e.)52
-b(equal)32 b(to)h(AST)p Ft(__)p Fk(BAD\))g(is)f(also)g(pro)r(duced)g
-(in)h(resp)r(onse)f(to)g(an)n(y)g(n)n(umerical)g(error)227
-5593 y(\(suc)n(h)f(as)f(division)h(b)n(y)g(zero)e(or)h(n)n(umerical)g
-(o)n(v)n(er\015o)n(w\),)g(or)g(if)h(an)g(in)n(v)-5 b(alid)31
-b(argumen)n(t)f(v)-5 b(alue)31 b(is)f(pro)n(vided)g(to)h(a)227
-5693 y(function)d(or)f(op)r(erator.)p eop end
-%%Page: 275 285
-TeXDict begin 275 284 bop 3643 52 a FG(275)-2 351 y Fc(Arithmetic)32
-b(Op)s(erators)n(:)227 497 y Fk(The)c(follo)n(wing)e(arithmetic)i(op)r
-(erators)e(are)g(a)n(v)-5 b(ailable:)340 642 y Fj(\017)45
-b Fk(X1)28 b(+)f(X2:)37 b(Sum)28 b(of)f(X1)h(and)f(X2.)340
-779 y Fj(\017)45 b Fk(X1)28 b(-)f(X2:)37 b(Di\013erence)28
-b(of)f(X1)h(and)f(X2.)340 916 y Fj(\017)45 b Fk(X1)28
-b Fj(\003)f Fk(X2:)37 b(Pro)r(duct)27 b(of)g(X1)h(and)f(X2.)340
-1053 y Fj(\017)45 b Fk(X1)28 b(/)f(X2:)37 b(Ratio)27
-b(of)g(X1)h(and)f(X2.)340 1190 y Fj(\017)45 b Fk(X1)28
-b Fj(\003\003)e Fk(X2:)37 b(X1)28 b(raised)e(to)i(the)g(p)r(o)n(w)n(er)
-e(of)i(X2.)340 1327 y Fj(\017)45 b Fk(+)28 b(X:)g(Unary)e(plus,)i(has)f
-(no)h(e\013ect)g(on)f(its)h(argumen)n(t.)340 1464 y Fj(\017)45
-b Fk(-)28 b(X:)g(Unary)f(min)n(us,)g(negates)g(its)h(argumen)n(t.)-2
-1634 y Fc(Logical)k(Op)s(erators)n(:)227 1780 y Fk(Logical)23
-b(v)-5 b(alues)25 b(are)f(represen)n(ted)f(using)h(zero)g(to)h
-(indicate)f(.F)-9 b(ALSE.)25 b(and)f(non-zero)f(to)i(indicate)g(.TR)n
-(UE..)35 b(In)227 1879 y(addition,)30 b(the)f(v)-5 b(alue)29
-b(AST)p Ft(__)p Fk(BAD)h(is)f(tak)n(en)f(to)h(mean)g
-Ft(")p Fk(unkno)n(wn)p Ft(")p Fk(.)41 b(The)29 b(v)-5
-b(alues)29 b(returned)f(b)n(y)h(logical)f(op-)227 1979
-y(erators)c(ma)n(y)h(therefore)f(b)r(e)i(0,)f(1)g(or)g(AST)p
-Ft(__)p Fk(BAD.)h(Where)f(appropriate,)f Ft(")p Fk(tri-state)p
-Ft(")g Fk(logic)h(is)g(implemen)n(ted.)227 2079 y(F)-7
-b(or)35 b(example,)h(A.OR.B)f(ma)n(y)f(ev)-5 b(aluate)35
-b(to)g(1)f(if)i(A)f(is)g(non-zero,)g(ev)n(en)g(if)g(B)g(has)f(the)i(v)
--5 b(alue)34 b(AST)p Ft(__)p Fk(BAD.)227 2178 y(This)27
-b(is)f(b)r(ecause)g(the)g(result)g(of)h(the)f(op)r(eration)g(w)n(ould)f
-(not)i(b)r(e)f(a\013ected)h(b)n(y)f(the)h(v)-5 b(alue)26
-b(of)g(B,)g(so)g(long)f(as)h(A)h(is)227 2278 y(non-zero.)227
-2406 y(The)h(follo)n(wing)e(logical)h(op)r(erators)e(are)i(a)n(v)-5
-b(ailable:)340 2551 y Fj(\017)45 b Fk(X1)33 b(.AND.)h(X2:)47
-b(Logical)31 b(AND)j(b)r(et)n(w)n(een)f(X1)f(and)h(X2,)h(returning)e(1)
-g(if)h(b)r(oth)h(X1)e(and)h(X2)f(are)g(non-)427 2651
-y(zero,)26 b(and)h(0)g(otherwise.)35 b(This)27 b(op)r(erator)f
-(implemen)n(ts)h(tri-state)f(logic.)36 b(\(The)27 b(synon)n(ym)f
-Ft(")p Fk(&&)p Ft(")g Fk(is)h(also)427 2750 y(pro)n(vided)g(for)g
-(compatibilit)n(y)g(with)h(C.\))340 2887 y Fj(\017)45
-b Fk(X1)22 b(.OR.)g(X2:)34 b(Logical)21 b(OR)h(b)r(et)n(w)n(een)g(X1)g
-(and)g(X2,)h(returning)e(1)h(if)h(either)f(X1)g(or)f(X2)h(are)f
-(non-zero,)h(and)427 2987 y(0)j(otherwise.)35 b(This)24
-b(op)r(erator)f(implemen)n(ts)j(tri-state)e(logic.)35
-b(\(The)25 b(synon)n(ym)f Ft(")p Fj(jj)p Ft(")g Fk(is)h(also)e(pro)n
-(vided)h(for)427 3087 y(compatibilit)n(y)k(with)g(C.\))340
-3223 y Fj(\017)45 b Fk(X1)26 b(.NEQV.)h(X2:)36 b(Logical)25
-b(exclusiv)n(e)g(OR)h(\(X)n(OR\))h(b)r(et)n(w)n(een)f(X1)g(and)g(X2,)h
-(returning)f(1)f(if)i(exactly)f(one)427 3323 y(of)35
-b(X1)f(and)g(X2)g(is)g(non-zero,)g(and)h(0)e(otherwise.)56
-b(T)-7 b(ri-state)34 b(logic)f(is)h(not)h(used)f(with)h(this)f(op)r
-(erator.)427 3423 y(\(The)28 b(synon)n(ym)e Ft(")p Fk(.X)n(OR.)p
-Ft(")g Fk(is)h(also)f(pro)n(vided,)g(although)g(this)i(is)f(not)g
-(standard)f(F)-7 b(ortran.)35 b(In)28 b(addition,)427
-3522 y(the)g(C-lik)n(e)f(synon)n(ym)g Ft(")p Fj(^^)p
-Ft(")g Fk(ma)n(y)g(b)r(e)h(used,)g(although)f(this)h(is)f(also)g(not)g
-(standard.\))340 3659 y Fj(\017)45 b Fk(X1)35 b(.EQV.)g(X2:)52
-b(T)-7 b(ests)35 b(whether)h(the)f(logical)f(states)h(of)g(X1)g(and)g
-(X2)h(\(i.e.)60 b(.TR)n(UE./.F)-9 b(ALSE.\))35 b(are)427
-3759 y(equal.)h(It)26 b(is)f(the)g(negativ)n(e)g(of)g(the)h(exclusiv)n
-(e)e(OR)h(\(X)n(OR\))h(function.)36 b(T)-7 b(ri-state)25
-b(logic)f(is)h(not)h(used)f(with)427 3858 y(this)j(op)r(erator.)340
-3995 y Fj(\017)45 b Fk(.NOT.)37 b(X:)g(Logical)e(unary)g(NOT)h(op)r
-(eration,)i(returning)e(1)g(if)h(X)g(is)f(zero,)h(and)g(0)f(otherwise.)
-62 b(\(The)427 4095 y(synon)n(ym)27 b Ft(")p Fk(!)p Ft(")g
-Fk(is)g(also)g(pro)n(vided)f(for)h(compatibilit)n(y)h(with)g(C.\))-2
-4265 y Fc(Relational)j(Op)s(erators)n(:)227 4411 y Fk(Relational)25
-b(op)r(erators)e(return)i(the)h(logical)e(result)h(\(0)g(or)g(1\))g(of)
-g(comparing)f(the)i(v)-5 b(alues)25 b(of)g(t)n(w)n(o)g(\015oating)f(p)r
-(oin)n(t)227 4511 y(v)-5 b(alues)30 b(for)g(equalit)n(y)g(or)f
-(inequalit)n(y)-7 b(.)45 b(The)31 b(v)-5 b(alue)30 b(AST)p
-Ft(__)p Fk(BAD)h(ma)n(y)e(also)h(b)r(e)h(returned)e(if)i(either)g
-(argumen)n(t)227 4610 y(is)d Fm(<)p Fk(bad)p Fm(>)p Fk(.)227
-4739 y(The)g(follo)n(wing)e(relational)h(op)r(erators)e(are)i(a)n(v)-5
-b(ailable:)340 4884 y Fj(\017)45 b Fk(X1)26 b(.EQ.)f(X2:)35
-b(T)-7 b(ests)26 b(whether)f(X1)g(equals)g(X2.)36 b(\(The)26
-b(synon)n(ym)f Ft(")p Fk(==)p Ft(")f Fk(is)h(also)g(pro)n(vided)f(for)h
-(compat-)427 4983 y(ibilit)n(y)j(with)g(C.\))340 5120
-y Fj(\017)45 b Fk(X1)33 b(.NE.)f(X2:)47 b(T)-7 b(ests)32
-b(whether)h(X1)f(is)g(unequal)h(to)f(X2.)52 b(\(The)33
-b(synon)n(ym)e Ft(")p Fk(!=)p Ft(")h Fk(is)g(also)g(pro)n(vided)f(for)
-427 5220 y(compatibilit)n(y)d(with)g(C.\))340 5357 y
-Fj(\017)45 b Fk(X1)30 b(.GT.)h(X2:)41 b(T)-7 b(ests)30
-b(whether)g(X1)g(is)g(greater)f(than)h(X2.)44 b(\(The)31
-b(synon)n(ym)e Ft(")p Fm(>)p Ft(")g Fk(is)h(also)f(pro)n(vided)g(for)
-427 5456 y(compatibilit)n(y)f(with)g(C.\))340 5593 y
-Fj(\017)45 b Fk(X1)29 b(.GE.)h(X2:)40 b(T)-7 b(ests)29
-b(whether)g(X1)g(is)g(greater)f(than)h(or)f(equal)h(to)g(X2.)42
-b(\(The)30 b(synon)n(ym)e Ft(")p Fm(>)p Fk(=)p Ft(")g
-Fk(is)h(also)427 5693 y(pro)n(vided)e(for)g(compatibilit)n(y)g(with)h
-(C.\))p eop end
-%%Page: 276 286
-TeXDict begin 276 285 bop 0 52 a FG(276)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(X1)38 b(.L)-7 b(T.)38 b(X2:)58 b(T)-7 b(ests)37
-b(whether)h(X1)g(is)g(less)f(than)i(X2.)67 b(\(The)39
-b(synon)n(ym)e Ft(")p Fm(<)p Ft(")g Fk(is)g(also)g(pro)n(vided)g(for)
-427 451 y(compatibilit)n(y)28 b(with)g(C.\))340 584 y
-Fj(\017)45 b Fk(X1)36 b(.LE.)g(X2:)55 b(T)-7 b(ests)36
-b(whether)g(X1)g(is)h(less)e(than)i(or)e(equal)h(to)h(X2.)63
-b(\(The)36 b(synon)n(ym)g Ft(")p Fm(<)p Fk(=)p Ft(")e
-Fk(is)j(also)427 684 y(pro)n(vided)27 b(for)g(compatibilit)n(y)g(with)h
-(C.\))227 847 y(Note)33 b(that)f(relational)f(op)r(erators)f(cannot)i
-(usefully)g(b)r(e)h(used)f(to)g(compare)f(v)-5 b(alues)32
-b(with)h(the)g Fm(<)p Fk(bad)p Fm(>)e Fk(v)-5 b(alue)227
-947 y(\(represen)n(ting)23 b(missing)h(data\),)h(b)r(ecause)f(the)g
-(result)g(is)g(alw)n(a)n(ys)f Fm(<)p Fk(bad)p Fm(>)p
-Fk(.)35 b(The)24 b(ISBAD\(\))h(function)g(should)f(b)r(e)227
-1047 y(used)k(instead.)227 1172 y(Note,)f(also,)e(that)i(b)r(ecause)f
-(logical)f(op)r(erators)f(can)i(op)r(erate)g(on)g(\015oating)f(p)r(oin)
-n(t)i(v)-5 b(alues,)26 b(care)f(m)n(ust)h(b)r(e)h(tak)n(en)227
-1272 y(to)39 b(use)g(paren)n(theses)e(in)j(some)e(cases)g(where)g(they)
-h(w)n(ould)g(not)f(normally)g(b)r(e)i(required)d(in)j(F)-7
-b(ortran.)69 b(F)-7 b(or)227 1371 y(example,)28 b(the)f(expresssion:)
-340 1509 y Fj(\017)45 b Fk(.NOT.)28 b(A)g(.EQ.)f(B)227
-1673 y(m)n(ust)h(b)r(e)g(written:)340 1810 y Fj(\017)45
-b Fk(.NOT.)28 b(\()g(A)g(.EQ.)f(B)g(\))227 1974 y(to)h(prev)n(en)n(t)e
-(the)i(.NOT.)g(op)r(erator)e(from)h(asso)r(ciating)f(with)i(the)g(v)-5
-b(ariable)27 b(A.)-2 2125 y Fc(Bit)m(wise)k(Op)s(erators)n(:)227
-2271 y Fk(Bit)n(wise)i(op)r(erators)e(are)i(often)g(useful)h(when)f(op)
-r(erating)f(on)h(ra)n(w)f(data)h(\(e.g.)54 b(from)33
-b(instrumen)n(ts\),)i(so)d(they)227 2370 y(are)j(pro)n(vided)g(for)g
-(use)h(in)g(MathMap)g(expressions.)59 b(In)36 b(this)h(case,)g(ho)n(w)n
-(ev)n(er,)e(the)i(v)-5 b(alues)35 b(on)h(whic)n(h)f(they)227
-2470 y(op)r(erate)e(are)f(\015oating)h(p)r(oin)n(t)h(v)-5
-b(alues)33 b(rather)g(than)g(the)h(more)f(usual)g(pure)g(in)n(tegers.)
-54 b(In)33 b(order)g(to)g(pro)r(duce)227 2570 y(results)23
-b(whic)n(h)f(matc)n(h)h(the)g(pure)g(in)n(teger)e(case,)i(the)h(op)r
-(erands)d(are)h(regarded)f(as)h(\014xed)h(p)r(oin)n(t)g(binary)f(n)n
-(um)n(b)r(ers)227 2669 y(\(i.e.)37 b(with)26 b(the)g(binary)f(equiv)-5
-b(alen)n(t)25 b(of)g(a)h(decimal)f(p)r(oin)n(t\))h(with)g(negativ)n(e)e
-(n)n(um)n(b)r(ers)h(represen)n(ted)g(using)g(t)n(w)n(os-)227
-2769 y(complemen)n(t)39 b(notation.)71 b(F)-7 b(or)38
-b(in)n(teger)g(v)-5 b(alues,)42 b(the)d(resulting)g(bit)g(pattern)g
-(corresp)r(onds)e(to)i(that)g(of)g(the)227 2869 y(equiv)-5
-b(alen)n(t)39 b(signed)f(in)n(teger)f(\(digits)i(to)g(the)g(righ)n(t)f
-(of)g(the)h(p)r(oin)n(t)g(b)r(eing)g(zero\).)69 b(Op)r(erations)37
-b(on)h(the)h(bits)227 2968 y(represen)n(ting)26 b(the)i(fractional)f
-(part)g(are)g(also)f(p)r(ossible,)h(ho)n(w)n(ev)n(er.)227
-3093 y(The)h(follo)n(wing)e(bit)n(wise)i(op)r(erators)e(are)g(a)n(v)-5
-b(ailable:)340 3231 y Fj(\017)45 b Fk(X1)32 b Fm(>>)f
-Fk(X2:)46 b(Righ)n(t)n(w)n(ard)30 b(bit)j(shift.)50 b(The)32
-b(in)n(teger)f(v)-5 b(alue)32 b(of)g(X2)g(is)g(tak)n(en)f(\(rounding)g
-(to)n(w)n(ards)f(zero\))427 3331 y(and)25 b(the)f(bits)h(represen)n
-(ting)e(X1)h(are)f(then)i(shifted)g(this)g(n)n(um)n(b)r(er)f(of)h
-(places)e(to)i(the)f(righ)n(t)g(\(or)g(to)g(the)h(left)427
-3431 y(if)30 b(the)g(n)n(um)n(b)r(er)f(of)g(places)g(is)g(negativ)n
-(e\).)42 b(This)29 b(is)h(equiv)-5 b(alen)n(t)29 b(to)g(dividing)g(X1)h
-(b)n(y)f(the)h(corresp)r(onding)427 3530 y(p)r(o)n(w)n(er)d(of)g(2.)340
-3664 y Fj(\017)45 b Fk(X1)24 b Fm(<<)g Fk(X2:)35 b(Left)n(w)n(ard)23
-b(bit)h(shift.)37 b(The)24 b(in)n(teger)f(v)-5 b(alue)24
-b(of)g(X2)g(is)g(tak)n(en)g(\(rounding)f(to)n(w)n(ards)g(zero\),)h(and)
-427 3763 y(the)30 b(bits)f(represen)n(ting)f(X1)h(are)f(then)i(shifted)
-f(this)h(n)n(um)n(b)r(er)f(of)g(places)f(to)h(the)h(left)g(\(or)e(to)h
-(the)h(righ)n(t)e(if)427 3863 y(the)f(n)n(um)n(b)r(er)f(of)h(places)e
-(is)i(negativ)n(e\).)35 b(This)27 b(is)f(equiv)-5 b(alen)n(t)26
-b(to)h(m)n(ultiplying)f(X1)h(b)n(y)f(the)h(corresp)r(onding)427
-3963 y(p)r(o)n(w)n(er)g(of)g(2.)340 4096 y Fj(\017)45
-b Fk(X1)25 b(&)g(X2:)36 b(Bit)n(wise)24 b(AND)j(b)r(et)n(w)n(een)e(the)
-g(bits)h(of)f(X1)g(and)g(those)g(of)g(X2)g(\(equiv)-5
-b(alen)n(t)25 b(to)g(a)g(logical)f(AND)427 4196 y(applied)k(at)f(eac)n
-(h)g(bit)h(p)r(osition)g(in)g(turn\).)340 4329 y Fj(\017)45
-b Fk(X1)34 b Fj(j)g Fk(X2:)50 b(Bit)n(wise)34 b(OR)g(b)r(et)n(w)n(een)g
-(the)g(bits)h(of)f(X1)g(and)g(those)f(of)h(X2)g(\(equiv)-5
-b(alen)n(t)34 b(to)g(a)g(logical)f(OR)427 4429 y(applied)28
-b(at)f(eac)n(h)g(bit)h(p)r(osition)g(in)g(turn\).)340
-4563 y Fj(\017)45 b Fk(X1)30 b Fj(^)h Fk(X2:)43 b(Bit)n(wise)29
-b(exclusiv)n(e)h(OR)g(\(X)n(OR\))h(b)r(et)n(w)n(een)f(the)h(bits)f(of)h
-(X1)f(and)g(those)g(of)g(X2)h(\(equiv)-5 b(alen)n(t)427
-4662 y(to)28 b(a)f(logical)f(X)n(OR)i(applied)f(at)h(eac)n(h)e(bit)j(p)
-r(osition)e(in)h(turn\).)227 4826 y(Note)39 b(that)g(no)f(bit)i(in)n(v)
-n(ersion)d(op)r(erator)f(is)j(pro)n(vided.)69 b(This)39
-b(is)f(b)r(ecause)h(in)n(v)n(erting)e(the)i(bits)g(of)g(a)f(t)n(w)n
-(os-)227 4925 y(complemen)n(t)32 b(\014xed)f(p)r(oin)n(t)h(binary)f(n)n
-(um)n(b)r(er)g(is)g(equiv)-5 b(alen)n(t)32 b(to)f(simply)h(negating)e
-(it.)49 b(This)32 b(di\013ers)f(from)g(the)227 5025 y(pure)i(in)n
-(teger)g(case)f(b)r(ecause)h(bits)h(to)f(the)h(righ)n(t)f(of)g(the)h
-(binary)f(p)r(oin)n(t)g(are)g(also)f(in)n(v)n(erted.)53
-b(T)-7 b(o)33 b(in)n(v)n(ert)g(only)227 5125 y(those)27
-b(bits)g(to)g(the)h(left)f(of)g(the)h(binary)e(p)r(oin)n(t,)i(use)e(a)h
-(bit)n(wise)g(exclusiv)n(e)f(OR)h(with)h(the)f(v)-5 b(alue)27
-b(-1)f(\(i.e.)37 b(X)p Fj(^)p Fk(-1\).)-2 5275 y Fc(F)-8
-b(unctions)n(:)227 5422 y Fk(The)28 b(follo)n(wing)e(functions)i(are)f
-(a)n(v)-5 b(ailable:)340 5559 y Fj(\017)45 b Fk(ABS\(X\):)29
-b(Absolute)f(v)-5 b(alue)27 b(of)h(X)g(\(sign)f(remo)n(v)-5
-b(al\),)27 b(same)g(as)g(F)-9 b(ABS\(X\).)340 5693 y
-Fj(\017)45 b Fk(A)n(COS\(X\):)28 b(In)n(v)n(erse)f(cosine)f(of)i(X,)g
-(in)g(radians.)p eop end
-%%Page: 277 287
-TeXDict begin 277 286 bop 3643 52 a FG(277)340 351 y
-Fj(\017)45 b Fk(A)n(COSD\(X\):)29 b(In)n(v)n(erse)d(cosine)h(of)g(X,)h
-(in)g(degrees.)340 482 y Fj(\017)45 b Fk(A)n(COSH\(X\):)29
-b(In)n(v)n(erse)d(h)n(yp)r(erb)r(olic)h(cosine)g(of)g(X.)340
-613 y Fj(\017)45 b Fk(A)n(COTH\(X\):)29 b(In)n(v)n(erse)d(h)n(yp)r(erb)
-r(olic)h(cotangen)n(t)f(of)i(X.)340 744 y Fj(\017)45
-b Fk(A)n(CSCH\(X\):)29 b(In)n(v)n(erse)d(h)n(yp)r(erb)r(olic)h(cosecan)
-n(t)g(of)g(X.)340 875 y Fj(\017)45 b Fk(AINT\(X\):)29
-b(In)n(teger)e(part)g(of)h(X)g(\(round)f(to)n(w)n(ards)f(zero\),)g
-(same)h(as)g(INT\(X\).)340 1007 y Fj(\017)45 b Fk(ASECH\(X\):)29
-b(In)n(v)n(erse)d(h)n(yp)r(erb)r(olic)h(secan)n(t)g(of)h(X.)340
-1138 y Fj(\017)45 b Fk(ASIN\(X\):)29 b(In)n(v)n(erse)e(sine)g(of)h(X,)g
-(in)f(radians.)340 1269 y Fj(\017)45 b Fk(ASIND\(X\):)30
-b(In)n(v)n(erse)c(sine)h(of)h(X,)g(in)g(degrees.)340
-1400 y Fj(\017)45 b Fk(ASINH\(X\):)30 b(In)n(v)n(erse)c(h)n(yp)r(erb)r
-(olic)h(sine)g(of)h(X.)340 1531 y Fj(\017)45 b Fk(A)-7
-b(T)g(AN\(X\):)30 b(In)n(v)n(erse)c(tangen)n(t)h(of)g(X,)h(in)g
-(radians.)340 1662 y Fj(\017)45 b Fk(A)-7 b(T)g(AND\(X\):)30
-b(In)n(v)n(erse)c(tangen)n(t)h(of)h(X,)g(in)g(degrees.)340
-1793 y Fj(\017)45 b Fk(A)-7 b(T)g(ANH\(X\):)30 b(In)n(v)n(erse)c(h)n
-(yp)r(erb)r(olic)h(tangen)n(t)g(of)h(X.)340 1924 y Fj(\017)45
-b Fk(A)-7 b(T)g(AN2\(X1,)29 b(X2\):)37 b(In)n(v)n(erse)26
-b(tangen)n(t)h(of)g(X1/X2,)g(in)h(radians.)340 2055 y
-Fj(\017)45 b Fk(A)-7 b(T)g(AN2D\(X1,)29 b(X2\):)37 b(In)n(v)n(erse)26
-b(tangen)n(t)h(of)h(X1/X2,)e(in)i(degrees.)340 2186 y
-Fj(\017)45 b Fk(CEIL\(X\):)28 b(Smallest)g(in)n(teger)e(v)-5
-b(alue)28 b(not)f(less)h(then)g(X)g(\(round)f(to)n(w)n(ards)f(plus)h
-(in\014nit)n(y\).)340 2317 y Fj(\017)45 b Fk(COS\(X\):)29
-b(Cosine)d(of)i(X)g(in)g(radians.)340 2448 y Fj(\017)45
-b Fk(COSD\(X\):)29 b(Cosine)e(of)g(X)h(in)g(degrees.)340
-2579 y Fj(\017)45 b Fk(COSH\(X\):)29 b(Hyp)r(erb)r(olic)e(cosine)g(of)h
-(X.)340 2710 y Fj(\017)45 b Fk(COTH\(X\):)29 b(Hyp)r(erb)r(olic)e
-(cotangen)n(t)g(of)g(X.)340 2841 y Fj(\017)45 b Fk(CSCH\(X\):)29
-b(Hyp)r(erb)r(olic)f(cosecan)n(t)e(of)i(X.)340 2972 y
-Fj(\017)45 b Fk(DIM\(X1,)29 b(X2\):)37 b(Returns)27 b(X1-X2)g(if)h(X1)g
-(is)f(greater)f(than)i(X2,)f(otherwise)g(0.)340 3103
-y Fj(\017)45 b Fk(EXP\(X\):)28 b(Exp)r(onen)n(tial)f(function)h(of)g
-(X.)340 3234 y Fj(\017)45 b Fk(F)-9 b(ABS\(X\):)29 b(Absolute)f(v)-5
-b(alue)27 b(of)h(X)g(\(sign)f(remo)n(v)-5 b(al\),)27
-b(same)g(as)g(ABS\(X\).)340 3365 y Fj(\017)45 b Fk(FLOOR\(X\):)28
-b(Largest)e(in)n(teger)h(not)g(greater)f(than)i(X)g(\(round)f(to)n(w)n
-(ards)f(min)n(us)i(in\014nit)n(y\).)340 3497 y Fj(\017)45
-b Fk(FMOD\(X1,)28 b(X2\):)37 b(Remainder)27 b(when)h(X1)g(is)f(divided)
-h(b)n(y)f(X2,)h(same)f(as)g(MOD\(X1,)h(X2\).)340 3628
-y Fj(\017)45 b Fk(GA)n(USS\(X1,)27 b(X2\):)37 b(Random)25
-b(sample)h(from)g(a)f(Gaussian)g(distribution)h(with)h(mean)f(X1)g(and)
-g(standard)427 3727 y(deviation)h(X2.)340 3858 y Fj(\017)45
-b Fk(INT\(X\):)29 b(In)n(teger)e(part)g(of)g(X)h(\(round)g(to)n(w)n
-(ards)d(zero\),)i(same)g(as)g(AINT\(X\).)340 3989 y Fj(\017)45
-b Fk(ISBAD\(X\):)29 b(Returns)f(1)f(if)h(X)g(has)f(the)h
-Fm(<)p Fk(bad)p Fm(>)f Fk(v)-5 b(alue)27 b(\(AST)p Ft(__)p
-Fk(BAD\),)i(otherwise)d(0.)340 4120 y Fj(\017)45 b Fk(LOG\(X\):)28
-b(Natural)f(logarithm)g(of)g(X.)340 4251 y Fj(\017)45
-b Fk(LOG10\(X\):)27 b(Logarithm)g(of)g(X)h(to)g(base)f(10.)340
-4382 y Fj(\017)45 b Fk(MAX\(X1,)29 b(X2,)e(...\):)38
-b(Maxim)n(um)27 b(of)h(t)n(w)n(o)e(or)h(more)g(v)-5 b(alues.)340
-4514 y Fj(\017)45 b Fk(MIN\(X1,)28 b(X2,)g(...\):)37
-b(Minim)n(um)29 b(of)e(t)n(w)n(o)g(or)g(more)f(v)-5 b(alues.)340
-4645 y Fj(\017)45 b Fk(MOD\(X1,)28 b(X2\):)37 b(Remainder)27
-b(when)h(X1)g(is)f(divided)h(b)n(y)f(X2,)h(same)f(as)g(FMOD\(X1,)h
-(X2\).)340 4776 y Fj(\017)45 b Fk(NINT\(X\):)29 b(Nearest)e(in)n(teger)
-g(to)g(X)h(\(round)g(to)f(nearest\).)340 4907 y Fj(\017)45
-b Fk(POISSON\(X\):)28 b(Random)f(in)n(teger-v)-5 b(alued)26
-b(sample)i(from)f(a)g(P)n(oisson)f(distribution)h(with)i(mean)e(X.)340
-5038 y Fj(\017)45 b Fk(PO)n(W\(X1,)27 b(X2\):)37 b(X1)28
-b(raised)e(to)i(the)g(p)r(o)n(w)n(er)e(of)i(X2.)340 5169
-y Fj(\017)45 b Fk(QIF\(x1,)27 b(x2,)g(x3\):)37 b(Returns)27
-b(X2)h(if)g(X1)g(is)f(true,)h(and)f(X3)g(otherwise.)340
-5300 y Fj(\017)45 b Fk(RAND\(X1,)24 b(X2\):)34 b(Random)21
-b(sample)g(from)g(a)g(uniform)g(distribution)h(in)g(the)f(range)f(X1)i
-(to)f(X2)g(inclusiv)n(e.)340 5431 y Fj(\017)45 b Fk(SECH\(X\):)29
-b(Hyp)r(erb)r(olic)e(secan)n(t)g(of)h(X.)340 5562 y Fj(\017)45
-b Fk(SIGN\(X1,)29 b(X2\):)37 b(Absolute)27 b(v)-5 b(alue)28
-b(of)f(X1)h(with)g(the)g(sign)f(of)h(X2)f(\(transfer)g(of)g(sign\).)340
-5693 y Fj(\017)45 b Fk(SIN\(X\):)29 b(Sine)f(of)g(X)g(in)f(radians.)p
-eop end
-%%Page: 278 288
-TeXDict begin 278 287 bop 0 52 a FG(278)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(SINC\(X\):)29 b(Sinc)f(function)g(of)g(X)g([=)f(SIN\(X\)/X].)340
-482 y Fj(\017)45 b Fk(SIND\(X\):)30 b(Sine)e(of)f(X)h(in)g(degrees.)340
-613 y Fj(\017)45 b Fk(SINH\(X\):)29 b(Hyp)r(erb)r(olic)f(sine)g(of)f
-(X.)340 743 y Fj(\017)45 b Fk(SQR\(X\):)29 b(Square)d(of)i(X)g(\(=)f(X)
-p Fj(\003)p Fk(X\).)340 874 y Fj(\017)45 b Fk(SQR)-7
-b(T\(X\):)29 b(Square)d(ro)r(ot)h(of)h(X.)340 1004 y
-Fj(\017)45 b Fk(T)-7 b(AN\(X\):)29 b(T)-7 b(angen)n(t)27
-b(of)h(X)g(in)g(radians.)340 1135 y Fj(\017)45 b Fk(T)-7
-b(AND\(X\):)30 b(T)-7 b(angen)n(t)27 b(of)g(X)h(in)g(degrees.)340
-1266 y Fj(\017)45 b Fk(T)-7 b(ANH\(X\):)30 b(Hyp)r(erb)r(olic)d(tangen)
-n(t)g(of)h(X.)-2 1425 y Fc(Sym)m(b)s(olic)j(Constan)m(ts)n(:)227
-1572 y Fk(The)c(follo)n(wing)e(sym)n(b)r(olic)h(constan)n(ts)g(are)g(a)
-n(v)-5 b(ailable)25 b(\(the)i(enclosing)f Ft(")p Fm(<>)p
-Ft(")f Fk(brac)n(k)n(ets)f(m)n(ust)j(b)r(e)g(included\):)340
-1706 y Fj(\017)45 b Fm(<)p Fk(bad)p Fm(>)p Fk(:)51 b(The)35
-b Ft(")p Fk(bad)p Ft(")e Fk(v)-5 b(alue)35 b(\(AST)p
-Ft(__)p Fk(BAD\))h(used)f(to)f(\015ag)g(missing)h(data.)58
-b(Note)35 b(that)g(y)n(ou)f(cannot)427 1805 y(usefully)23
-b(compare)e(v)-5 b(alues)21 b(with)i(this)f(constan)n(t)g(b)r(ecause)g
-(the)g(result)g(is)g(alw)n(a)n(ys)e Fm(<)p Fk(bad)p Fm(>)p
-Fk(.)34 b(The)22 b(ISBAD\(\))427 1905 y(function)28 b(should)g(b)r(e)g
-(used)f(instead.)340 2036 y Fj(\017)45 b Fm(<)p Fk(dig)p
-Fm(>)p Fk(:)36 b(Num)n(b)r(er)27 b(of)f(decimal)h(digits)g(of)f
-(precision)g(a)n(v)-5 b(ailable)26 b(in)h(a)f(\015oating)g(p)r(oin)n(t)
-h(\(double)g(precision\))427 2135 y(v)-5 b(alue.)340
-2266 y Fj(\017)45 b Fm(<)p Fk(e)p Fm(>)p Fk(:)36 b(Base)27
-b(of)g(natural)g(logarithms.)340 2397 y Fj(\017)45 b
-Fm(<)p Fk(epsilon)p Fm(>)p Fk(:)35 b(Smallest)24 b(p)r(ositiv)n(e)h(n)n
-(um)n(b)r(er)f(suc)n(h)h(that)g(1.0+)p Fm(<)p Fk(epsilon)p
-Fm(>)d Fk(is)j(distinguishable)g(from)f(unit)n(y)-7 b(.)340
-2527 y Fj(\017)45 b Fm(<)p Fk(man)n(t)p Ft(_)p Fk(dig)p
-Fm(>)p Fk(:)37 b(The)29 b(n)n(um)n(b)r(er)f(of)g(base)g
-Fm(<)p Fk(radix)p Fm(>)f Fk(digits)h(stored)g(in)g(the)h(man)n(tissa)e
-(of)i(a)f(\015oating)f(p)r(oin)n(t)427 2627 y(\(double)h(precision\))f
-(v)-5 b(alue.)340 2758 y Fj(\017)45 b Fm(<)p Fk(max)p
-Fm(>)p Fk(:)36 b(Maxim)n(um)27 b(represen)n(table)f(\015oating)h(p)r
-(oin)n(t)h(\(double)g(precision\))f(v)-5 b(alue.)340
-2888 y Fj(\017)45 b Fm(<)p Fk(max)p Ft(_)p Fk(10)p Ft(_)p
-Fk(exp)p Fm(>)p Fk(:)37 b(Maxim)n(um)28 b(in)n(teger)h(suc)n(h)f(that)h
-(10)g(raised)f(to)g(that)i(p)r(o)n(w)n(er)d(can)i(b)r(e)g(represen)n
-(ted)f(as)427 2988 y(a)f(\015oating)g(p)r(oin)n(t)h(\(double)g
-(precision\))f(v)-5 b(alue.)340 3118 y Fj(\017)45 b Fm(<)p
-Fk(max)p Ft(_)p Fk(exp)p Fm(>)p Fk(:)56 b(Maxim)n(um)38
-b(in)n(teger)f(suc)n(h)g(that)h Fm(<)p Fk(radix)p Fm(>)f
-Fk(raised)f(to)i(that)h(p)r(o)n(w)n(er)d(min)n(us)i(1)g(can)f(b)r(e)427
-3218 y(represen)n(ted)27 b(as)g(a)g(\015oating)g(p)r(oin)n(t)g
-(\(double)h(precision\))f(v)-5 b(alue.)340 3349 y Fj(\017)45
-b Fm(<)p Fk(min)p Fm(>)p Fk(:)h(Smallest)32 b(p)r(ositiv)n(e)f(n)n(um)n
-(b)r(er)h(whic)n(h)g(can)g(b)r(e)g(represen)n(ted)f(as)h(a)f
-(normalised)g(\015oating)g(p)r(oin)n(t)427 3448 y(\(double)d
-(precision\))f(v)-5 b(alue.)340 3579 y Fj(\017)45 b Fm(<)p
-Fk(min)p Ft(_)p Fk(10)p Ft(_)p Fk(exp)p Fm(>)p Fk(:)39
-b(Minim)n(um)30 b(negativ)n(e)e(in)n(teger)h(suc)n(h)g(that)h(10)f
-(raised)f(to)i(that)f(p)r(o)n(w)n(er)g(can)g(b)r(e)h(repre-)427
-3679 y(sen)n(ted)e(as)f(a)g(normalised)f(\015oating)h(p)r(oin)n(t)h
-(\(double)g(precision\))f(v)-5 b(alue.)340 3809 y Fj(\017)45
-b Fm(<)p Fk(min)p Ft(_)p Fk(exp)p Fm(>)p Fk(:)35 b(Minim)n(um)25
-b(negativ)n(e)e(in)n(teger)h(suc)n(h)g(that)h Fm(<)p
-Fk(radix)p Fm(>)e Fk(raised)h(to)g(that)h(p)r(o)n(w)n(er)e(min)n(us)i
-(1)f(can)427 3909 y(b)r(e)k(represen)n(ted)f(as)g(a)g(normalised)f
-(\015oating)h(p)r(oin)n(t)h(\(double)g(precision\))e(v)-5
-b(alue.)340 4040 y Fj(\017)45 b Fm(<)p Fk(pi)p Fm(>)p
-Fk(:)37 b(Ratio)27 b(of)g(the)h(circumference)f(of)h(a)f(circle)g(to)g
-(its)h(diameter.)340 4170 y Fj(\017)45 b Fm(<)p Fk(radix)p
-Fm(>)p Fk(:)38 b(The)29 b(radix)f(\(n)n(um)n(b)r(er)h(base\))g(used)g
-(to)f(represen)n(t)g(the)h(man)n(tissa)f(of)h(\015oating)f(p)r(oin)n(t)
-h(\(double)427 4270 y(precision\))e(v)-5 b(alues.)340
-4400 y Fj(\017)45 b Fm(<)p Fk(rounds)p Fm(>)p Fk(:)35
-b(The)26 b(mo)r(de)g(used)g(for)f(rounding)g(\015oating)g(p)r(oin)n(t)h
-(results)g(after)f(addition.)37 b(P)n(ossible)24 b(v)-5
-b(alues)427 4500 y(include:)49 b(-1)32 b(\(indeterminate\),)k(0)d(\(to)
-n(w)n(ard)f(zero\),)h(1)g(\(to)h(nearest\),)g(2)f(\(to)n(w)n(ard)f
-(plus)h(in\014nit)n(y\))h(and)f(3)427 4600 y(\(to)n(w)n(ard)27
-b(min)n(us)g(in\014nit)n(y\).)38 b(Other)27 b(v)-5 b(alues)27
-b(indicate)h(mac)n(hine-dep)r(enden)n(t)f(b)r(eha)n(viour.)-2
-4759 y Fc(Ev)-5 b(aluation)32 b(Precedence)g(and)h(Asso)s(ciativit)m(y)
-n(:)227 4906 y Fk(Items)28 b(app)r(earing)e(in)i(expressions)e(are)h
-(ev)-5 b(aluated)27 b(in)h(the)g(follo)n(wing)e(order)h(\(highest)g
-(precedence)g(\014rst\):)340 5040 y Fj(\017)45 b Fk(Constan)n(ts)27
-b(and)g(v)-5 b(ariables)340 5170 y Fj(\017)45 b Fk(F)-7
-b(unction)28 b(argumen)n(ts)f(and)g(paren)n(thesised)f(expressions)340
-5301 y Fj(\017)45 b Fk(F)-7 b(unction)28 b(in)n(v)n(o)r(cations)340
-5432 y Fj(\017)45 b Fk(Unary)27 b(+)g(-)h(!)37 b(.not.)340
-5562 y Fj(\017)45 b(\003\003)340 5693 y(\017)g(\003)27
-b Fk(/)p eop end
-%%Page: 279 289
-TeXDict begin 279 288 bop 3643 52 a FG(279)340 351 y
-Fj(\017)45 b Fk(+)28 b(-)340 482 y Fj(\017)45 b Fm(<<)27
-b(>>)340 613 y Fj(\017)45 b Fm(<)28 b Fk(.lt.)37 b Fm(<)p
-Fk(=)27 b(.le.)37 b Fm(>)27 b Fk(.gt.)37 b Fm(>)p Fk(=)27
-b(.ge.)340 744 y Fj(\017)45 b Fk(==)27 b(.eq.)37 b(!=)27
-b(.ne.)340 875 y Fj(\017)45 b Fk(&)340 1006 y Fj(\017)g(^)340
-1137 y(\017)g(j)340 1267 y(\017)g Fk(&&)27 b(.and.)340
-1398 y Fj(\017)45 b(^^)340 1529 y(\017)g(jj)28 b Fk(.or)340
-1660 y Fj(\017)45 b Fk(.eqv.)37 b(.neqv.)g(.xor.)227
-1820 y(All)j(op)r(erators)e(asso)r(ciate)g(from)i(left-to-righ)n(t,)h
-(except)f(for)f(unary)g(+,)j(unary)d(-,)k(!,)f(.not.)73
-b(and)40 b Fj(\003\003)f Fk(whic)n(h)227 1920 y(asso)r(ciate)26
-b(from)i(righ)n(t-to-left.)p 0 2115 3780 12 v 0 2246
-a FA(AST)p Fe(_)p FA(MA)-11 b(TRIXMAP)1672 2245 y Fd(Create)37
-b(a)1599 2345 y(MatrixMap)2564 2246 y FA(AST)p Fe(_)p
-FA(MA)-11 b(TRIXMAP)0 2530 y Fc(Description:)44 b Fk(This)28
-b(function)g(creates)f(a)g(new)g(MatrixMap)g(and)h(optionally)e
-(initialises)i(its)f(attributes.)227 2653 y(A)32 b(MatrixMap)e(is)h(a)f
-(form)h(of)g(Mapping)g(whic)n(h)g(p)r(erforms)f(a)g(general)g(linear)g
-(transformation.)46 b(Eac)n(h)30 b(set)h(of)227 2753
-y(input)j(co)r(ordinates,)g(regarded)d(as)i(a)g(column-v)n(ector,)g
-(are)f(pre-m)n(ultiplied)h(b)n(y)g(a)g(matrix)g(\(whose)g(elemen)n(ts)
-227 2853 y(are)c(sp)r(eci\014ed)h(when)g(the)g(MatrixMap)f(is)g
-(created\))g(to)h(giv)n(e)e(a)i(new)f(column-v)n(ector)f(con)n(taining)
-h(the)h(output)227 2952 y(co)r(ordinates.)36 b(If)28
-b(appropriate,)e(the)i(in)n(v)n(erse)e(transformation)g(ma)n(y)h(also)f
-(b)r(e)i(p)r(erformed.)0 3100 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_MATRIXMAP\()38 b(NIN,)k(NOUT,)f(FORM,)h
-(MATRIX,)e(OPTIONS,)h(STATUS)g(\))0 3247 y Fc(Argumen)m(ts:)259
-3382 y(NIN)32 b(=)g(INTEGER)f(\(Giv)m(en\))427 3481 y
-Fk(The)d(n)n(um)n(b)r(er)f(of)h(input)g(co)r(ordinates,)e(whic)n(h)i
-(determines)f(the)h(n)n(um)n(b)r(er)g(of)f(columns)h(in)f(the)h
-(matrix.)259 3612 y Fc(NOUT)k(=)g(INTEGER)g(\(Giv)m(en\))427
-3712 y Fk(The)c(n)n(um)n(b)r(er)f(of)h(output)g(co)r(ordinates,)e(whic)
-n(h)i(determines)f(the)h(n)n(um)n(b)r(er)f(of)h(ro)n(ws)e(in)i(the)g
-(matrix.)259 3843 y Fc(F)m(ORM)j(=)h(INTEGER)g(\(Giv)m(en\))427
-3942 y Fk(An)c(in)n(teger)f(whic)n(h)h(indicates)f(the)h(form)f(in)h
-(whic)n(h)g(the)g(matrix)f(elemen)n(ts)g(will)h(b)r(e)g(supplied.)427
-4057 y(A)j(v)-5 b(alue)30 b(of)g(zero)f(indicates)h(that)g(a)g(full)h
-(NOUT)f(x)g(NIN)h(matrix)e(of)h(v)-5 b(alues)30 b(will)h(b)r(e)f
-(supplied)h(via)e(the)427 4157 y(MA)-7 b(TRIX)36 b(argumen)n(t)d(\(b)r
-(elo)n(w\).)59 b(In)35 b(this)g(case,)g(the)g(elemen)n(ts)g(should)f(b)
-r(e)h(giv)n(en)f(in)h(ro)n(w)f(order)f(\(the)427 4257
-y(elemen)n(ts)28 b(of)f(the)h(\014rst)g(ro)n(w,)e(follo)n(w)n(ed)h(b)n
-(y)g(the)h(elemen)n(ts)f(of)h(the)g(second)f(ro)n(w,)f(etc.\).)427
-4372 y(A)34 b(v)-5 b(alue)34 b(of)g(1)f(indicates)g(that)h(only)f(the)i
-(diagonal)d(elemen)n(ts)h(of)h(the)g(matrix)f(will)h(b)r(e)g(supplied,)
-i(and)427 4472 y(that)25 b(all)g(others)e(should)i(b)r(e)g(zero.)35
-b(In)25 b(this)f(case,)h(the)g(elemen)n(ts)f(of)h(MA)-7
-b(TRIX)26 b(should)e(con)n(tain)g(only)g(the)427 4571
-y(diagonal)i(elemen)n(ts,)i(stored)f(consecutiv)n(ely)-7
-b(.)427 4686 y(A)32 b(v)-5 b(alue)32 b(of)f(2)h(indicates)f(that)h(a)f
-Ft(")p Fk(unit)p Ft(")h Fk(matrix)f(is)g(required,)h(whose)f(diagonal)f
-(elemen)n(ts)h(are)g(set)h(to)427 4786 y(unit)n(y)c(\(with)g(all)g
-(other)f(elemen)n(ts)g(zero\).)36 b(In)28 b(this)g(case,)f(the)h(MA)-7
-b(TRIX)28 b(argumen)n(t)f(is)g(not)h(used.)259 4917 y
-Fc(MA)-8 b(TRIX\()32 b Fj(\003)g Fc(\))g(=)g(DOUBLE)g(PRECISION)f
-(\(Giv)m(en\))427 5017 y Fk(The)d(arra)n(y)d(of)j(matrix)f(elemen)n(ts)
-g(to)h(b)r(e)g(used,)f(stored)g(according)f(to)h(the)h(v)-5
-b(alue)28 b(of)f(F)n(ORM.)259 5147 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-5247 y Fk(A)g(c)n(haracter)e(string)h(con)n(taining)f(an)h(optional)g
-(comma-separated)e(list)j(of)g(attribute)f(assignmen)n(ts)g(to)427
-5347 y(b)r(e)38 b(used)f(for)g(initialising)f(the)i(new)f(MatrixMap.)65
-b(The)37 b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)g(that)h(for)e
-(the)427 5446 y(AST)p Ft(_)p Fk(SET)27 b(routine.)259
-5577 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5677 y Fk(The)c(global)e(status.)p eop
-end
-%%Page: 280 290
-TeXDict begin 280 289 bop 0 52 a FG(280)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(Returned)h(V)-8
-b(alue:)259 489 y(AST)p Ft(_)p Fc(MA)g(TRIXMAP)33 b(=)f(INTEGER)427
-588 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(MatrixMap.)0
-752 y Fc(Notes:)340 1035 y Fj(\017)45 b Fk(In)32 b(general,)e(a)h
-(MatrixMap's)f(forw)n(ard)g(transformation)f(will)j(alw)n(a)n(ys)d(b)r
-(e)j(a)n(v)-5 b(ailable)30 b(\(as)h(indicated)g(b)n(y)427
-1135 y(its)h(T)-7 b(ranF)g(orw)n(ard)29 b(attribute\),)k(but)f(its)f
-(in)n(v)n(erse)f(transformation)g(\(T)-7 b(ranIn)n(v)n(erse)29
-b(attribute\))j(will)g(only)427 1234 y(b)r(e)c(a)n(v)-5
-b(ailable)27 b(if)h(the)g(asso)r(ciated)e(matrix)h(is)g(square)g(and)g
-(non-singular.)340 1368 y Fj(\017)45 b Fk(As)32 b(an)f(exception)f(to)i
-(this,)g(the)g(in)n(v)n(erse)d(transformation)h(is)h(alw)n(a)n(ys)e(a)n
-(v)-5 b(ailable)30 b(if)i(a)f(unit)h(or)e(diagonal)427
-1467 y(matrix)19 b(is)g(sp)r(eci\014ed.)35 b(In)19 b(this)h(case,)g(if)
-g(the)g(matrix)f(is)g(not)h(square,)f(one)g(or)g(more)f(of)i(the)g
-(input)g(co)r(ordinate)427 1567 y(v)-5 b(alues)28 b(ma)n(y)f(not)h(b)r
-(e)g(reco)n(v)n(erable)d(from)i(a)g(set)h(of)g(output)g(co)r
-(ordinates.)36 b(An)n(y)28 b(co)r(ordinates)e(a\013ected)i(in)427
-1667 y(this)g(w)n(a)n(y)f(will)g(simply)h(b)r(e)g(set)g(to)f(the)h(v)-5
-b(alue)28 b(zero.)340 1800 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 1900 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)-2
-2063 y Fc(Status)33 b(Handling)n(:)227 2209 y Fk(The)d(protected)g(in)n
-(terface)f(to)g(this)h(function)h(includes)f(an)f(extra)g(parameter)f
-(at)i(the)g(end)g(of)g(the)g(parameter)227 2309 y(list)37
-b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)
-r(oin)n(ter)g(to)h(the)g(in)n(teger)e(inherited)i(status)f(v)-5
-b(ariable:)54 b Ft(")p Fk(in)n(t)227 2408 y Fj(\003)p
-Fk(status)p Ft(")p Fk(.)p 0 2609 3780 12 v 0 2739 a FA(AST)p
-Fe(_)p FA(NEGA)-11 b(TE)1093 2740 y Fd(Negate)37 b(the)i(area)e
-(represen)m(ted)h(b)m(y)1665 2853 y(a)g(Region)2877 2739
-y FA(AST)p Fe(_)p FA(NEGA)-11 b(TE)0 3043 y Fc(Description:)44
-b Fk(This)d(function)f(negates)g(the)g(area)f(represen)n(ted)g(b)n(y)h
-(a)g(Region.)74 b(That)40 b(is,)j(p)r(oin)n(ts)d(whic)n(h)h(w)n(ere)227
-3143 y(previously)22 b(inside)h(the)h(region)e(will)h(then)h(b)r(e)f
-(outside,)h(and)f(p)r(oin)n(ts)g(whic)n(h)g(w)n(ere)f(outside)h(will)h
-(b)r(e)f(inside.)36 b(This)227 3243 y(is)28 b(acomplished)f(b)n(y)g
-(toggling)f(the)i(state)g(of)f(the)h(Negated)f(attribute)h(for)f(the)h
-(supplied)g(region.)0 3393 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_NEGATE\()d(THIS,)i(STATUS)g(\))0 3544
-y Fc(Argumen)m(ts:)259 3681 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427
-3781 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259 3915
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 4014 y Fk(The)c(global)e(status.)p 0 4215 V 0 4345
-a FA(AST)p Fe(_)p FA(NORM)937 4346 y Fd(Normalise)36
-b(a)j(set)f(of)h(F)-10 b(rame)38 b(co)s(ordinates)3014
-4345 y FA(AST)p Fe(_)p FA(NORM)0 4523 y Fc(Description:)44
-b Fk(This)32 b(routine)f(normalises)f(a)h(set)h(of)f(F)-7
-b(rame)31 b(co)r(ordinate)f(v)-5 b(alues)32 b(whic)n(h)f(migh)n(t)h(b)r
-(e)f(unsuitable)h(for)227 4623 y(displa)n(y)23 b(\(e.g.)35
-b(ma)n(y)22 b(lie)h(outside)g(the)h(exp)r(ected)f(range\))f(in)n(to)h
-(a)g(set)g(of)g(acceptable)f(v)-5 b(alues)23 b(suitable)g(for)f(displa)
-n(y)-7 b(.)0 4773 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42
-b(AST_NORM\()e(THIS,)h(VALUE,)g(STATUS)g(\))0 4924 y
-Fc(Argumen)m(ts:)259 5061 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427
-5161 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7 b(rame.)259
-5295 y Fc(V)c(ALUE\()33 b Fj(\003)f Fc(\))g(=)g(DOUBLE)g(PRECISION)f
-(\(Giv)m(en)h(and)h(Returned\))427 5394 y Fk(An)21 b(arra)n(y)c(with)k
-(one)f(elemen)n(t)g(for)f(eac)n(h)g(F)-7 b(rame)20 b(axis)f(\(Naxes)h
-(attribute\).)35 b(Initially)-7 b(,)21 b(this)g(should)e(con)n(tain)427
-5494 y(a)34 b(set)g(of)g(co)r(ordinate)f(v)-5 b(alues)33
-b(represen)n(ting)g(a)h(p)r(oin)n(t)g(in)g(the)g(space)g(whic)n(h)g
-(the)g(F)-7 b(rame)34 b(describ)r(es.)55 b(If)427 5593
-y(these)33 b(v)-5 b(alues)32 b(lie)h(outside)g(the)g(exp)r(ected)g
-(range)e(for)i(the)g(F)-7 b(rame,)33 b(they)g(will)g(b)r(e)g(replaced)f
-(with)h(more)427 5693 y(acceptable)27 b(\(normalised\))g(v)-5
-b(alues.)37 b(Otherwise,)26 b(they)i(will)g(b)r(e)g(returned)f(unc)n
-(hanged.)p eop end
-%%Page: 281 291
-TeXDict begin 281 290 bop 3643 52 a FG(281)259 351 y
-Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-451 y Fk(The)c(global)e(status.)0 611 y Fc(Notes:)340
-892 y Fj(\017)45 b Fk(F)-7 b(or)34 b(some)f(classes)g(of)h(F)-7
-b(rame,)36 b(whose)d(co)r(ordinate)g(v)-5 b(alues)34
-b(are)f(not)h(constrained,)h(this)g(function)f(will)427
-992 y(nev)n(er)d(mo)r(dify)h(the)g(v)-5 b(alues)31 b(supplied.)49
-b(Ho)n(w)n(ev)n(er,)31 b(for)g(F)-7 b(rames)30 b(whose)h(axes)g
-(represen)n(t)f(cyclic)h(quan)n(ti-)427 1092 y(ties)i(\(suc)n(h)f(as)f
-(angles)h(or)f(p)r(ositions)h(on)g(the)g(sky\),)h(co)r(ordinates)e
-(will)i(t)n(ypically)e(b)r(e)i(wrapp)r(ed)f(in)n(to)g(an)427
-1191 y(appropriate)26 b(standard)h(range,)f(suc)n(h)h(as)g(zero)g(to)g
-(2)p Fj(\003)p Fk(pi.)340 1323 y Fj(\017)45 b Fk(The)31
-b(NormMap)e(class)h(is)g(a)g(Mapping)f(whic)n(h)i(can)f(b)r(e)g(used)h
-(to)f(normalise)f(a)h(set)g(of)g(p)r(oin)n(ts)g(using)g(the)427
-1422 y(AST)p Ft(_)p Fk(NORM)e(routine)f(of)h(a)f(sp)r(eci\014ed)h(F)-7
-b(rame.)340 1554 y Fj(\017)45 b Fk(It)d(is)g(in)n(tended)g(to)f(b)r(e)h
-(p)r(ossible)f(to)h(put)g(an)n(y)f(set)g(of)h(co)r(ordinates)e(in)n(to)
-h(a)g(form)g(suitable)h(for)f(dis-)427 1653 y(pla)n(y)c(b)n(y)h(using)f
-(this)h(function)g(to)g(normalise)e(them,)41 b(follo)n(w)n(ed)36
-b(b)n(y)i(appropriate)e(formatting)h(\(using)427 1753
-y(AST)p Ft(_)p Fk(F)n(ORMA)-7 b(T\).)p 0 1949 3780 12
-v 0 2080 a FA(AST)p Fe(_)p FA(NORMMAP)1392 2079 y Fd(Create)37
-b(a)i(NormMap)2693 2080 y FA(AST)p Fe(_)p FA(NORMMAP)0
-2265 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(NormMap)g(and)h(optionally)e(initialises)i(its)g(attributes.)227
-2389 y(A)k(NormMap)e(is)i(a)e(Mapping)h(whic)n(h)g(normalises)f(co)r
-(ordinate)g(v)-5 b(alues)31 b(using)g(the)h(AST)p Ft(_)p
-Fk(NORM)f(routine)g(of)227 2489 y(the)38 b(supplied)g(F)-7
-b(rame.)65 b(The)37 b(n)n(um)n(b)r(er)h(of)f(inputs)h(and)f(outputs)g
-(of)h(a)f(NormMap)f(are)g(b)r(oth)i(equal)f(to)g(the)227
-2588 y(n)n(um)n(b)r(er)28 b(of)f(axes)g(in)h(the)g(supplied)g(F)-7
-b(rame.)227 2712 y(The)26 b(forw)n(ard)f(and)h(in)n(v)n(erse)e
-(transformation)h(of)h(a)f(NormMap)h(are)f(b)r(oth)h(de\014ned)g(but)h
-(are)e(iden)n(tical)h(\(that)h(is,)227 2812 y(they)h(do)g(not)f(form)h
-(a)f(real)g(in)n(v)n(erse)f(pair)h(in)h(that)g(the)g(in)n(v)n(erse)e
-(transformation)g(do)r(es)i(not)f(undo)h(the)g(normal-)227
-2911 y(isation,)h(instead)f(it)i(reapplies)d(it\).)42
-b(Ho)n(w)n(ev)n(er,)27 b(the)i(AST)p Ft(_)p Fk(SIMPLIFY)g(function)g
-(will)g(replace)f(neigh)n(b)r(ouring)227 3011 y(pairs)f(of)g(forw)n
-(ard)f(and)i(in)n(v)n(erse)e(NormMaps)h(b)n(y)g(a)g(single)g(UnitMap.)0
-3159 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_NORMMAP\()c
-(FRAME,)i(OPTIONS,)f(STATUS)h(\))0 3307 y Fc(Argumen)m(ts:)259
-3442 y(FRAME)31 b(=)h(INTEGER)g(\(Giv)m(en\))427 3542
-y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(F)-7 b(rame)27 b(whic)n(h)g(is)h
-(to)f(b)r(e)h(used)g(to)f(normalise)g(the)h(supplied)g(axis)e(v)-5
-b(alues.)259 3673 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-3773 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h(optional)
-f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f(to)g(b)r
-(e)427 3872 y(used)h(for)f(initialising)h(the)g(new)g(NormMap.)34
-b(The)22 b(syn)n(tax)f(used)h(is)f(iden)n(tical)h(to)f(that)i(for)e
-(the)h(AST)p Ft(_)p Fk(SET)427 3972 y(routine.)259 4103
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 4203 y Fk(The)c(global)e(status.)0 4363 y Fc(Returned)32
-b(V)-8 b(alue:)259 4498 y(AST)p Ft(_)p Fc(NORMMAP)31
-b(=)h(INTEGER)427 4598 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g
-(NormMap.)0 4758 y Fc(Notes:)340 5039 y Fj(\017)45 b
-Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 5139
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 5299 y Fc(Status)33
-b(Handling)n(:)227 5445 y Fk(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 5545 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fk(in)n(t)227 5645 y Fj(\003)p Fk(status)p Ft(")p Fk(.)p
-eop end
-%%Page: 282 292
-TeXDict begin 282 291 bop 0 52 a FG(282)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(NULLREGION)419 b Fd(Create)37
-b(a)1604 581 y(NullRegion)2527 482 y FA(AST)p Fe(_)p
-FA(NULLREGION)0 754 y Fc(Description:)44 b Fk(This)28
-b(function)g(creates)f(a)g(new)g(NullRegion)h(and)f(optionally)g
-(initialises)g(its)h(attributes.)227 874 y(A)k(NullRegion)f(is)f(a)h
-(Region)g(with)g(no)g(b)r(ounds.)47 b(If)32 b(the)f(Negated)g
-(attribute)g(of)g(a)g(NullRegion)g(is)g(false,)g(the)227
-974 y(NullRegion)k(represen)n(ts)f(a)g(Region)g(con)n(taining)g(no)h(p)
-r(oin)n(ts.)59 b(If)35 b(the)h(Negated)e(attribute)h(of)g(a)g
-(NullRegion)227 1073 y(is)f(true,)h(the)f(NullRegion)f(represen)n(ts)f
-(an)h(in\014nite)i(Region)d(con)n(taining)h(all)g(p)r(oin)n(ts)h
-(within)g(the)g(co)r(ordinate)227 1173 y(system.)0 1314
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_NULLREGION\()37
-b(FRAME,)42 b(UNC,)f(OPTIONS,)g(STATUS)g(\))0 1455 y
-Fc(Argumen)m(ts:)259 1584 y(FRAME)31 b(=)h(INTEGER)g(\(Giv)m(en\))427
-1683 y Fk(A)d(p)r(oin)n(ter)g(to)f(the)i(F)-7 b(rame)28
-b(in)h(whic)n(h)g(the)g(region)e(is)i(de\014ned.)41 b(A)29
-b(deep)g(cop)n(y)f(is)g(tak)n(en)g(of)h(the)g(supplied)427
-1783 y(F)-7 b(rame.)71 b(This)39 b(means)f(that)h(an)n(y)g(subsequen)n
-(t)f(c)n(hanges)g(made)h(to)f(the)i(F)-7 b(rame)38 b(using)h(the)g
-(supplied)427 1882 y(p)r(oin)n(ter)27 b(will)h(ha)n(v)n(e)f(no)g
-(e\013ect)h(the)g(Region.)259 2007 y Fc(UNC)k(=)g(INTEGER)f(\(Giv)m
-(en\))427 2107 y Fk(An)i(optional)e(p)r(oin)n(ter)h(to)g(an)g(existing)
-g(Region)f(whic)n(h)h(sp)r(eci\014es)g(the)h(uncertain)n(ties)e(asso)r
-(ciated)g(with)427 2206 y(p)r(ositions)37 b(in)h(the)g(supplied)g(F)-7
-b(rame.)65 b(The)38 b(uncertain)n(t)n(y)e(in)i(an)n(y)f(p)r(oin)n(t)g
-(in)h(the)g(F)-7 b(rame)37 b(is)g(found)h(b)n(y)427 2306
-y(shifting)25 b(the)f(supplied)g Ft(")p Fk(uncertain)n(t)n(y)p
-Ft(")f Fk(Region)g(so)g(that)h(it)h(is)f(cen)n(tred)f(at)h(the)g(p)r
-(oin)n(t)g(b)r(eing)h(considered.)427 2406 y(The)34 b(area)e(co)n(v)n
-(ered)g(b)n(y)i(the)g(shifted)g(uncertain)n(t)n(y)f(Region)g(then)i
-(represen)n(ts)d(the)i(uncertain)n(t)n(y)f(in)h(the)427
-2505 y(p)r(osition.)j(The)28 b(uncertain)n(t)n(y)e(is)i(assumed)f(to)g
-(b)r(e)h(the)g(same)f(for)g(all)h(p)r(oin)n(ts.)427 2617
-y(If)38 b(supplied,)j(the)d(uncertain)n(t)n(y)f(Region)g(m)n(ust)g(b)r
-(e)i(of)e(a)g(class)g(for)g(whic)n(h)h(all)f(instances)g(are)g(cen)n
-(tro-)427 2717 y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24
-b(Circle,)g(Ellipse,)h(etc.\))36 b(or)23 b(b)r(e)i(a)e(Prism)h(con)n
-(taining)f(cen)n(tro-symetric)f(comp)r(onen)n(t)427 2817
-y(Regions.)57 b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f
-(will)g(b)r(e)h(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)
-427 2916 y(uncertain)n(t)n(y)g(Region)g(using)g(the)h(supplied)g(p)r
-(oin)n(ter)g(will)f(ha)n(v)n(e)g(no)g(e\013ect)h(on)g(the)g(created)f
-(Bo)n(x.)57 b(Al-)427 3016 y(ternativ)n(ely)-7 b(,)34
-b(a)f(n)n(ull)g(Ob)5 b(ject)33 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fk(NULL\))g(ma)n(y)f(b)r(e)i(supplied,)h(in)e(whic)n(h)g(case)f
-(a)h(default)427 3115 y(uncertain)n(t)n(y)27 b(of)h(zero)e(is)i(used.)
-259 3240 y Fc(OPTIONS)k(=)g(CHARA)m(CTER)g Fj(\003)f
-Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427 3340 y Fk(A)g(c)n(haracter)e
-(string)h(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 3439 y(b)r(e)38
-b(used)g(for)f(initialising)g(the)h(new)g(NullRegion.)67
-b(The)38 b(syn)n(tax)e(used)i(is)f(iden)n(tical)h(to)f(that)h(for)f
-(the)427 3539 y(AST)p Ft(_)p Fk(SET)27 b(routine.)259
-3664 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 3763 y Fk(The)c(global)e(status.)0 3917
-y Fc(Returned)32 b(V)-8 b(alue:)259 4045 y(AST)p Ft(_)p
-Fc(NULLREGION)32 b(=)g(INTEGER)427 4145 y Fk(A)c(p)r(oin)n(ter)f(to)h
-(the)g(new)g(NullRegion.)0 4298 y Fc(Notes:)340 4573
-y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f
-(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427
-4672 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g
-(should)f(fail)h(for)f(an)n(y)g(reason.)p 0 4855 V 0
-4986 a FA(AST)p Fe(_)p FA(OFFSET)1208 4987 y Fd(Calculate)36
-b(an)j(o\013set)g(along)e(a)1524 5101 y(geo)s(desic)h(curv)m(e)2922
-4986 y FA(AST)p Fe(_)p FA(OFFSET)0 5274 y Fc(Description:)44
-b Fk(This)20 b(routine)f(\014nds)h(the)f(F)-7 b(rame)19
-b(co)r(ordinate)g(v)-5 b(alues)19 b(of)g(a)g(p)r(oin)n(t)h(whic)n(h)f
-(is)h(o\013set)f(a)g(sp)r(eci\014ed)h(distance)227 5373
-y(along)27 b(the)h(geo)r(desic)e(curv)n(e)h(b)r(et)n(w)n(een)g(t)n(w)n
-(o)g(other)g(p)r(oin)n(ts.)227 5494 y(F)-7 b(or)28 b(example,)h(in)f(a)
-h(basic)f(F)-7 b(rame,)28 b(this)h(o\013set)f(will)h(b)r(e)g(along)e
-(the)i(straigh)n(t)f(line)g(joining)h(t)n(w)n(o)e(p)r(oin)n(ts.)40
-b(F)-7 b(or)28 b(a)227 5593 y(more)h(sp)r(ecialised)h(F)-7
-b(rame)29 b(describing)h(a)f(sky)h(co)r(ordinate)e(system,)j(ho)n(w)n
-(ev)n(er,)d(it)j(w)n(ould)e(b)r(e)i(along)d(the)j(great)227
-5693 y(circle)c(passing)g(through)g(t)n(w)n(o)f(sky)i(p)r(ositions.)p
-eop end
-%%Page: 283 293
-TeXDict begin 283 292 bop 3643 52 a FG(283)0 351 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(CALL)42 b(AST_OFFSET\()d(THIS,)i(POINT1,)g(POINT2,)g
-(OFFSET,)f(POINT3,)h(STATUS)g(\))0 513 y Fc(Argumen)m(ts:)259
-661 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 761 y
-Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7 b(rame.)259 900
-y Fc(POINT1\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m
-(en\))427 999 y Fk(An)h(arra)n(y)d(with)j(one)f(elemen)n(t)g(for)g(eac)
-n(h)g(F)-7 b(rame)30 b(axis)h(\(Naxes)g(attribute\).)48
-b(This)32 b(should)f(con)n(tain)f(the)427 1099 y(co)r(ordinates)c(of)i
-(the)g(p)r(oin)n(t)g(marking)e(the)i(start)f(of)h(the)g(geo)r(desic)e
-(curv)n(e.)259 1238 y Fc(POINT2\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h
-(PRECISION)e(\(Giv)m(en\))427 1337 y Fk(An)g(arra)n(y)c(with)k(one)f
-(elemen)n(t)g(for)f(eac)n(h)g(F)-7 b(rame)30 b(axis.)43
-b(This)30 b(should)g(con)n(tain)f(the)i(co)r(ordinates)d(of)i(the)427
-1437 y(p)r(oin)n(t)e(marking)e(the)i(end)g(of)g(the)g(geo)r(desic)e
-(curv)n(e.)259 1576 y Fc(OFFSET)32 b(=)g(DOUBLE)g(PRECISION)427
-1676 y Fk(The)27 b(required)e(o\013set)i(from)f(the)h(\014rst)f(p)r
-(oin)n(t)g(along)g(the)g(geo)r(desic)g(curv)n(e.)35 b(If)27
-b(this)g(is)f(p)r(ositiv)n(e,)h(it)g(will)f(b)r(e)427
-1775 y(to)n(w)n(ards)20 b(the)i(second)f(p)r(oin)n(t.)35
-b(If)22 b(it)g(is)f(negativ)n(e,)h(it)g(will)f(b)r(e)h(in)g(the)g(opp)r
-(osite)f(direction.)35 b(This)21 b(o\013set)g(need)427
-1875 y(not)28 b(imply)g(a)f(p)r(osition)h(lying)f(b)r(et)n(w)n(een)h
-(the)g(t)n(w)n(o)f(p)r(oin)n(ts)h(giv)n(en,)f(as)g(the)h(curv)n(e)e
-(will)i(b)r(e)g(extrap)r(olated)f(if)427 1974 y(necessary)-7
-b(.)259 2113 y Fc(POINT3\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h
-(PRECISION)e(\(Returned\))427 2213 y Fk(An)25 b(arra)n(y)c(with)k(one)e
-(elemen)n(t)i(for)e(eac)n(h)g(F)-7 b(rame)24 b(axis)f(in)h(whic)n(h)g
-(the)g(co)r(ordinates)f(of)h(the)g(required)f(p)r(oin)n(t)427
-2313 y(will)28 b(b)r(e)g(returned.)259 2451 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-2551 y Fk(The)c(global)e(status.)0 2725 y Fc(Notes:)340
-3020 y Fj(\017)45 b Fk(The)28 b(geo)r(desic)f(curv)n(e)g(used)h(b)n(y)g
-(this)g(routine)g(is)g(the)g(path)g(of)g(shortest)g(distance)f(b)r(et)n
-(w)n(een)h(t)n(w)n(o)g(p)r(oin)n(ts,)427 3119 y(as)f(de\014ned)h(b)n(y)
-f(the)h(AST)p Ft(_)p Fk(DIST)-7 b(ANCE)29 b(function.)340
-3258 y Fj(\017)45 b Fk(This)19 b(function)g(will)g(return)f
-Ft(")p Fk(bad)p Ft(")g Fk(co)r(ordinate)g(v)-5 b(alues)18
-b(\(AST)p Ft(__)p Fk(BAD\))i(if)f(an)n(y)f(of)g(the)i(input)f(co)r
-(ordinates)427 3358 y(has)27 b(this)h(v)-5 b(alue.)340
-3497 y Fj(\017)45 b Ft(")p Fk(Bad)p Ft(")32 b Fk(co)r(ordinate)f(v)-5
-b(alues)32 b(will)h(also)e(b)r(e)i(returned)f(if)h(the)g(t)n(w)n(o)f(p)
-r(oin)n(ts)g(supplied)h(are)f(coinciden)n(t)g(\(or)427
-3596 y(otherwise)27 b(fail)h(to)f(uniquely)h(sp)r(ecify)g(a)f(geo)r
-(desic)g(curv)n(e\))f(but)j(the)f(requested)f(o\013set)g(is)h
-(non-zero.)p 0 3808 3780 12 v 0 3938 a FA(AST)p Fe(_)p
-FA(OFFSET2)1208 3939 y Fd(Calculate)36 b(an)j(o\013set)g(along)e(a)1133
-4054 y(geo)s(desic)i(curv)m(e)f(in)g(a)h(2D)g(F)-10 b(rame)2854
-3938 y FA(AST)p Fe(_)p FA(OFFSET2)0 4255 y Fc(Description:)44
-b Fk(This)20 b(routine)f(\014nds)h(the)f(F)-7 b(rame)19
-b(co)r(ordinate)g(v)-5 b(alues)19 b(of)g(a)g(p)r(oin)n(t)h(whic)n(h)f
-(is)h(o\013set)f(a)g(sp)r(eci\014ed)h(distance)227 4354
-y(along)26 b(the)h(geo)r(desic)f(curv)n(e)g(at)h(a)g(giv)n(en)f(angle)g
-(from)h(a)f(sp)r(eci\014ed)h(starting)g(p)r(oin)n(t.)36
-b(It)28 b(can)e(only)h(b)r(e)g(used)g(with)227 4454 y(2-dimensional)g
-(F)-7 b(rames.)227 4585 y(F)g(or)28 b(example,)h(in)f(a)h(basic)f(F)-7
-b(rame,)28 b(this)h(o\013set)f(will)h(b)r(e)g(along)e(the)i(straigh)n
-(t)f(line)g(joining)h(t)n(w)n(o)e(p)r(oin)n(ts.)40 b(F)-7
-b(or)28 b(a)227 4684 y(more)h(sp)r(ecialised)h(F)-7 b(rame)29
-b(describing)h(a)f(sky)h(co)r(ordinate)e(system,)j(ho)n(w)n(ev)n(er,)d
-(it)j(w)n(ould)e(b)r(e)i(along)d(the)j(great)227 4784
-y(circle)c(passing)g(through)g(t)n(w)n(o)f(sky)i(p)r(ositions.)0
-4945 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_OFFSET2\()c
-(THIS,)i(POINT1,)g(ANGLE,)g(OFFSET,)g(POINT2,)f(STATUS)h(\))0
-5107 y Fc(Argumen)m(ts:)259 5255 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 5355 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)259 5494 y Fc(POINT1\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h
-(PRECISION)e(\(Giv)m(en\))427 5593 y Fk(An)h(arra)n(y)d(with)j(one)f
-(elemen)n(t)g(for)g(eac)n(h)g(F)-7 b(rame)30 b(axis)h(\(Naxes)g
-(attribute\).)48 b(This)32 b(should)f(con)n(tain)f(the)427
-5693 y(co)r(ordinates)c(of)i(the)g(p)r(oin)n(t)g(marking)e(the)i(start)
-f(of)h(the)g(geo)r(desic)e(curv)n(e.)p eop end
-%%Page: 284 294
-TeXDict begin 284 293 bop 0 52 a FG(284)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(ANGLE)h(=)g(DOUBLE)g
-(PRECISION)g(\(Giv)m(en\))427 451 y Fk(The)d(angle)f(\(in)i(radians\))e
-(from)g(the)i(p)r(ositiv)n(e)e(direction)h(of)g(the)g(second)f(axis,)h
-(to)g(the)g(direction)f(of)h(the)427 551 y(required)38
-b(p)r(osition,)i(as)e(seen)g(from)g(the)g(starting)g(p)r(osition.)68
-b(P)n(ositiv)n(e)37 b(rotation)g(is)h(in)g(the)h(sense)f(of)427
-650 y(rotation)27 b(from)g(the)h(p)r(ositiv)n(e)f(direction)g(of)h
-(axis)f(2)g(to)g(the)h(p)r(ositiv)n(e)g(direction)f(of)g(axis)g(1.)259
-786 y Fc(OFFSET)32 b(=)g(DOUBLE)g(PRECISION)427 885 y
-Fk(The)27 b(required)e(o\013set)i(from)f(the)h(\014rst)f(p)r(oin)n(t)g
-(along)g(the)g(geo)r(desic)g(curv)n(e.)35 b(If)27 b(this)g(is)f(p)r
-(ositiv)n(e,)h(it)g(will)f(b)r(e)427 985 y(in)i(the)g(direction)f(of)h
-(the)g(giv)n(en)f(angle.)36 b(If)28 b(it)g(is)f(negativ)n(e,)g(it)h
-(will)g(b)r(e)g(in)f(the)h(opp)r(osite)g(direction.)259
-1120 y Fc(POINT2\()k Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e
-(\(Returned\))427 1220 y Fk(An)25 b(arra)n(y)c(with)k(one)e(elemen)n(t)
-i(for)e(eac)n(h)g(F)-7 b(rame)24 b(axis)f(in)h(whic)n(h)g(the)g(co)r
-(ordinates)f(of)h(the)g(required)f(p)r(oin)n(t)427 1320
-y(will)28 b(b)r(e)g(returned.)259 1455 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 1555
-y Fk(The)c(global)e(status.)0 1722 y Fc(Returned)32 b(V)-8
-b(alue:)259 1864 y(AST)p Ft(_)p Fc(OFFSET2)32 b(=)g(DOUBLE)g(PRECISION)
-427 1964 y Fk(The)27 b(direction)f(of)g(the)h(geo)r(desic)e(curv)n(e)g
-(at)h(the)h(end)g(p)r(oin)n(t.)36 b(That)27 b(is,)f(the)h(angle)e(\(in)
-i(radians\))f(b)r(et)n(w)n(een)427 2063 y(the)35 b(p)r(ositiv)n(e)e
-(direction)h(of)g(the)g(second)f(axis)h(and)g(the)g(con)n(tin)n(uation)
-f(of)h(the)g(geo)r(desic)f(curv)n(e)g(at)h(the)427 2163
-y(requested)29 b(end)h(p)r(oin)n(t.)42 b(P)n(ositiv)n(e)28
-b(rotation)g(is)h(in)h(the)g(sense)f(of)g(rotation)f(from)h(the)h(p)r
-(ositiv)n(e)f(direction)427 2262 y(of)f(axis)f(2)g(to)g(the)h(p)r
-(ositiv)n(e)f(direction)h(of)f(axis)g(1.)0 2430 y Fc(Notes:)340
-2718 y Fj(\017)45 b Fk(The)28 b(geo)r(desic)f(curv)n(e)g(used)h(b)n(y)g
-(this)g(routine)g(is)g(the)g(path)g(of)g(shortest)g(distance)f(b)r(et)n
-(w)n(een)h(t)n(w)n(o)g(p)r(oin)n(ts,)427 2817 y(as)f(de\014ned)h(b)n(y)
-f(the)h(AST)p Ft(_)p Fk(DIST)-7 b(ANCE)29 b(function.)340
-2953 y Fj(\017)45 b Fk(An)28 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)
-h(the)g(F)-7 b(rame)27 b(is)g(not)h(2-dimensional.)340
-3088 y Fj(\017)45 b Fk(This)19 b(function)g(will)g(return)f
-Ft(")p Fk(bad)p Ft(")g Fk(co)r(ordinate)g(v)-5 b(alues)18
-b(\(AST)p Ft(__)p Fk(BAD\))i(if)f(an)n(y)f(of)g(the)i(input)f(co)r
-(ordinates)427 3188 y(has)27 b(this)h(v)-5 b(alue.)p
-0 3393 3780 12 v 0 3523 a FA(AST)p Fe(_)p FA(OUTLINE)p
-Fb(<)p FA(X)p Fb(>)313 b Fd(Create)37 b(a)h(new)1486
-3623 y(P)m(olygon)e(outling)1391 3737 y(v)-7 b(alues)39
-b(in)f(a)h(2D)g(data)1789 3837 y(grid)2542 3523 y FA(AST)p
-Fe(_)p FA(OUTLINE)p Fb(<)p FA(X)p Fb(>)0 4031 y Fc(Description:)44
-b Fk(This)27 b(is)g(a)g(set)g(of)g(functions)g(that)g(create)g(a)f(P)n
-(olygon)f(enclosing)h(a)h(single)f(con)n(tiguous)g(set)h(of)g(pixels)
-227 4131 y(that)h(ha)n(v)n(e)f(a)g(sp)r(eci\014ed)h(v)-5
-b(alue)27 b(within)h(a)g(gridded)f(2-dimensional)f(data)h(arra)n(y)e
-(\(e.g.)37 b(an)27 b(image\).)227 4258 y(A)40 b(basic)f(2-dimensional)e
-(F)-7 b(rame)39 b(is)g(used)h(to)f(represen)n(t)f(the)h(pixel)h(co)r
-(ordinate)e(system)h(in)g(the)h(returned)227 4357 y(P)n(olygon.)33
-b(The)21 b(Domain)g(attribute)h(is)f(set)g(to)h Ft(")p
-Fk(PIXEL)p Ft(")p Fk(,)f(the)g(Title)h(attribute)f(is)h(set)f(to)g
-Ft(")p Fk(Pixel)f(co)r(ordinates)p Ft(")p Fk(,)227 4457
-y(and)i(the)h(Unit)f(attribute)h(for)e(eac)n(h)g(axis)h(is)g(set)g(to)g
-Ft(")p Fk(pixel)p Ft(")p Fk(.)34 b(All)22 b(other)g(attributes)g(are)f
-(left)i(unset.)35 b(The)22 b(nature)227 4557 y(of)28
-b(the)g(pixel)f(co)r(ordinate)g(system)g(is)h(determined)f(b)n(y)h
-(parameter)e(ST)-7 b(ARPIX.)227 4684 y(The)33 b(MAXERR)f(and)h(MAXVER)
--7 b(T)33 b(parameters)d(can)i(b)r(e)h(used)f(to)h(con)n(trol)e(ho)n(w)
-g(accurately)g(the)i(returned)227 4783 y(P)n(olygon)28
-b(represen)n(ts)g(the)i(required)f(region)f(in)i(the)g(data)f(arra)n(y)
--7 b(.)41 b(The)30 b(n)n(um)n(b)r(er)f(of)h(v)n(ertices)e(in)i(the)g
-(returned)227 4883 y(P)n(olygon)c(will)h(b)r(e)i(the)e(minim)n(um)i
-(needed)f(to)f(ac)n(hiev)n(e)f(the)i(required)f(accuracy)-7
-b(.)227 5010 y(Y)g(ou)34 b(should)g(use)g(a)f(function)i(whic)n(h)f
-(matc)n(hes)f(the)h(n)n(umerical)f(t)n(yp)r(e)i(of)f(the)g(data)f(y)n
-(ou)g(are)g(pro)r(cessing)g(b)n(y)227 5110 y(replacing)e
-Fm(<)p Fk(X)p Fm(>)g Fk(in)h(the)g(generic)e(function)i(name)g(AST)p
-Ft(_)p Fk(OUTLINE)p Fm(<)p Fk(X)p Fm(>)e Fk(are)h(pro)r(cesing)f(data)h
-(with)h(t)n(yp)r(e)227 5210 y(REAL,)c(y)n(ou)f(should)g(use)g(the)i
-(function)f(AST)p Ft(_)p Fk(OUTLINER)f(\(see)g(the)h
-Ft(")p Fk(Data)f(T)n(yp)r(e)h(Co)r(des)p Ft(")f Fk(section)g(b)r(elo)n
-(w)227 5309 y(for)g(the)h(co)r(des)f(appropriate)f(to)i(other)f(n)n
-(umerical)g(t)n(yp)r(es\).)0 5464 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_OUTLINE)p Fm(<)p Ft(X)p Fm(>)p
-Ft(\()37 b(VALUE,)k(OPER,)h(ARRAY,)f(LBND,)h(UBND,)f(MAXERR,)g
-(MAXVERT,)227 5564 y(INSIDE,)g(STARPIX,)f(STATUS)h(\))0
-5718 y Fc(Argumen)m(ts:)p eop end
-%%Page: 285 295
-TeXDict begin 285 294 bop 3643 52 a FG(285)259 351 y
-Fc(V)-11 b(ALUE)33 b(=)f Fm(<)p Fc(Xt)m(yp)s(e)p Fm(>)g
-Fc(\(Giv)m(en\))427 451 y Fk(A)c(data)f(v)-5 b(alue)28
-b(that)g(sp)r(eci\014es)f(the)h(pixels)g(to)f(b)r(e)h(outlined.)259
-584 y Fc(OPER)j(=)h(INTEGER)g(\(Giv)m(en\))427 684 y
-Fk(Indicates)26 b(ho)n(w)g(the)h(V)-9 b(ALUE)27 b(parameter)e(is)h
-(used)g(to)h(select)f(the)h(outlined)g(pixels.)36 b(It)27
-b(can)f(ha)n(v)n(e)f(an)n(y)h(of)427 783 y(the)i(follo)n(wing)f(v)-5
-b(alues:)510 891 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(L)-7
-b(T:)27 b(outline)h(pixels)g(with)g(v)-5 b(alue)27 b(less)g(than)h(V)-9
-b(ALUE.)510 1007 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(LE:)27
-b(outline)h(pixels)f(with)h(v)-5 b(alue)28 b(less)f(than)g(or)g(equal)g
-(to)h(V)-9 b(ALUE.)510 1124 y Fj(\017)45 b Fk(AST)p Ft(__)p
-Fk(EQ:)27 b(outline)g(pixels)h(with)g(v)-5 b(alue)27
-b(equal)g(to)h(V)-9 b(ALUE.)510 1240 y Fj(\017)45 b Fk(AST)p
-Ft(__)p Fk(NE:)27 b(outline)h(pixels)f(with)i(v)-5 b(alue)27
-b(not)h(equal)f(to)g(V)-9 b(ALUE.)510 1357 y Fj(\017)45
-b Fk(AST)p Ft(__)p Fk(GE:)27 b(outline)h(pixels)f(with)h(v)-5
-b(alue)28 b(greater)e(than)h(or)g(equal)g(to)h(V)-9 b(ALUE.)510
-1473 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(GT:)28 b(outline)f(pixels)h
-(with)g(v)-5 b(alue)27 b(greater)f(than)i(V)-9 b(ALUE.)259
-1606 y Fc(ARRA)h(Y\()32 b Fj(\003)f Fc(\))h(=)g Fm(<)p
-Fc(Xt)m(yp)s(e)p Fm(>)g Fc(\(Giv)m(en\))427 1706 y Fk(A)27
-b(2-dimensional)d(arra)n(y)g(con)n(taining)h(the)i(data)e(to)h(b)r(e)h
-(pro)r(cessed.)35 b(The)26 b(n)n(umerical)f(t)n(yp)r(e)i(of)f(this)g
-(arra)n(y)427 1805 y(should)g(matc)n(h)h(the)f(1-)g(or)g(2-c)n
-(haracter)d(t)n(yp)r(e)k(co)r(de)f(app)r(ended)h(to)f(the)h(function)g
-(name)f(\(e.g.)36 b(if)27 b(y)n(ou)f(are)427 1905 y(using)i(AST)p
-Ft(_)p Fk(OUTLINER,)f(the)h(t)n(yp)r(e)g(of)f(eac)n(h)g(arra)n(y)e
-(elemen)n(t)j(should)f(b)r(e)h(REAL\).)427 2022 y(The)33
-b(storage)f(order)f(of)j(data)e(within)i(this)g(arra)n(y)c(should)j(b)r
-(e)h(suc)n(h)f(that)g(the)h(index)f(of)g(the)g(\014rst)g(grid)427
-2121 y(dimension)h(v)-5 b(aries)33 b(most)g(rapidly)g(and)h(that)g(of)g
-(the)g(second)f(dimension)h(least)f(rapidly)g(\(i.e.)56
-b(normal)427 2221 y(F)-7 b(ortran)27 b(arra)n(y)e(storage)h(order\).)
-259 2354 y Fc(LBND\()32 b(2)g(\))g(=)g(INTEGER)f(\(Giv)m(en\))427
-2454 y Fk(An)j(arra)n(y)d(con)n(taining)h(the)i(co)r(ordinates)e(of)h
-(the)h(cen)n(tre)f(of)g(the)g(\014rst)h(pixel)f(in)g(the)h(input)g
-(grid)f(along)427 2553 y(eac)n(h)27 b(dimension.)259
-2686 y Fc(UBND\()32 b(2\))g(=)g(INTEGER)f(\(Giv)m(en\))427
-2786 y Fk(An)k(arra)n(y)d(con)n(taining)h(the)h(co)r(ordinates)f(of)h
-(the)h(cen)n(tre)f(of)g(the)g(last)g(pixel)g(in)h(the)f(input)h(grid)f
-(along)427 2886 y(eac)n(h)27 b(dimension.)427 3002 y(Note)i(that)g
-(LBND)g(and)f(UBND)h(together)f(de\014ne)h(the)f(shap)r(e)h(and)f(size)
-g(of)h(the)g(input)g(grid,)f(its)h(exten)n(t)427 3102
-y(along)24 b(a)h(particular)f(\(J'th\))j(dimension)e(b)r(eing)g
-(UBND\(J\)-LBND\(J\)+1.)37 b(They)25 b(also)f(de\014ne)i(the)g(input)
-427 3201 y(grid's)33 b(co)r(ordinate)f(system,)i(eac)n(h)f(pixel)g(ha)n
-(ving)g(unit)h(exten)n(t)f(along)f(eac)n(h)h(dimension)g(with)h(in)n
-(tegral)427 3301 y(co)r(ordinate)27 b(v)-5 b(alues)27
-b(at)g(its)h(cen)n(tre)f(or)g(upp)r(er)h(corner,)e(as)h(selected)g(b)n
-(y)h(parameter)e(ST)-7 b(ARPIX.)259 3434 y Fc(MAXERR)31
-b(=)h(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427 3534 y Fk(T)-7
-b(ogether)28 b(with)h(MAXVER)-7 b(T,)30 b(this)f(determines)g(ho)n(w)f
-(accurately)g(the)h(returned)f(P)n(olygon)f(represen)n(ts)427
-3633 y(the)32 b(required)e(region)h(of)g(the)h(data)f(arra)n(y)-7
-b(.)46 b(It)31 b(giv)n(es)f(the)i(target)f(discrepancy)f(b)r(et)n(w)n
-(een)h(the)h(returned)427 3733 y(P)n(olygon)23 b(and)h(the)h(accurate)e
-(outline)h(in)h(the)g(data)f(arra)n(y)-7 b(,)23 b(expressed)g(as)h(a)g
-(n)n(um)n(b)r(er)g(of)g(pixels.)36 b(Insignif-)427 3833
-y(ican)n(t)24 b(v)n(ertices)g(are)f(remo)n(v)n(ed)g(from)h(the)h
-(accurate)f(outline,)h(one)f(b)n(y)g(one,)h(un)n(til)g(the)g(n)n(um)n
-(b)r(er)f(of)h(v)n(ertices)427 3932 y(remaining)c(in)i(the)f(returned)g
-(P)n(olygon)d(equals)j(MAXVER)-7 b(T,)22 b(or)f(the)i(largest)d
-(discrepancy)h(b)r(et)n(w)n(een)h(the)427 4032 y(accurate)i(outline)i
-(and)f(the)h(returned)f(P)n(olygon)e(is)j(greater)d(than)j(MAXERR.)g
-(If)g(MAXERR)g(is)f(zero)f(or)427 4131 y(less,)k(its)h(v)-5
-b(alue)28 b(is)g(ignored)f(and)h(the)h(returned)f(P)n(olygon)e(will)i
-(ha)n(v)n(e)f(the)i(n)n(um)n(b)r(er)f(of)g(v)n(ertices)f(sp)r
-(eci\014ed)427 4231 y(b)n(y)h(MAXVER)-7 b(T.)259 4364
-y Fc(MAXVER)f(T)32 b(=)g(INTEGER)f(\(Giv)m(en\))427 4464
-y Fk(T)-7 b(ogether)33 b(with)i(MAXERR,)g(this)g(determines)f(ho)n(w)f
-(accurately)g(the)i(returned)f(P)n(olygon)e(represen)n(ts)427
-4564 y(the)24 b(required)f(region)f(of)h(the)h(data)f(arra)n(y)-7
-b(.)33 b(It)24 b(giv)n(es)e(the)i(maxim)n(um)f(allo)n(w)n(ed)g(n)n(um)n
-(b)r(er)g(of)g(v)n(ertices)f(in)i(the)427 4663 y(returned)30
-b(P)n(olygon.)42 b(Insigni\014can)n(t)30 b(v)n(ertices)f(are)g(remo)n
-(v)n(ed)g(from)h(the)g(accurate)f(outline,)i(one)f(b)n(y)g(one,)427
-4763 y(un)n(til)k(the)g(n)n(um)n(b)r(er)g(of)f(v)n(ertices)g(remaining)
-g(in)h(the)g(returned)f(P)n(olygon)e(equals)i(MAXVER)-7
-b(T,)34 b(or)f(the)427 4862 y(largest)f(discrepancy)g(b)r(et)n(w)n(een)
-i(the)f(accurate)f(outline)i(and)f(the)h(returned)f(P)n(olygon)e(is)i
-(greater)e(than)427 4962 y(MAXERR.)i(If)g(MAXVER)-7 b(T)33
-b(is)f(less)f(than)i(3,)g(its)f(v)-5 b(alue)32 b(is)g(ignored)f(and)h
-(the)h(n)n(um)n(b)r(er)f(of)g(v)n(ertices)f(in)427 5062
-y(the)i(returned)f(P)n(olygon)f(will)i(b)r(e)g(the)g(minim)n(um)g
-(needed)g(to)f(ensure)g(that)h(the)g(discrepancy)f(b)r(et)n(w)n(een)427
-5161 y(the)c(accurate)f(outline)g(and)h(the)g(returned)f(P)n(olygon)e
-(is)j(less)f(than)h(MAXERR.)259 5295 y Fc(INSIDE\()k(2)g(\))g(=)g
-(INTEGER)f(\(Giv)m(en\))427 5394 y Fk(An)40 b(arra)n(y)c(con)n(taining)
-i(the)h(indices)g(of)f(a)h(pixel)g(kno)n(wn)f(to)g(b)r(e)i(inside)e
-(the)i(required)d(region.)70 b(This)427 5494 y(is)33
-b(needed)g(b)r(ecause)f(the)i(supplied)f(data)f(arra)n(y)f(ma)n(y)h
-(con)n(tain)g(sev)n(eral)f(disjoin)n(t)i(areas)e(of)i(pixels)f(that)427
-5593 y(satisfy)25 b(the)g(criterion)f(sp)r(eci\014ed)h(b)n(y)f(V)-9
-b(ALUE)25 b(and)g(OPER.)f(In)h(suc)n(h)f(cases,)g(the)i(area)d(describ)
-r(ed)i(b)n(y)f(the)427 5693 y(returned)h(P)n(olygon)d(will)j(b)r(e)h
-(the)f(one)g(that)g(con)n(tains)f(the)h(pixel)g(sp)r(eci\014ed)g(b)n(y)
-f(INSIDE.)i(If)f(the)g(sp)r(eci\014ed)p eop end
-%%Page: 286 296
-TeXDict begin 286 295 bop 0 52 a FG(286)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)427 351 y Fk(pixel)24
-b(is)f(outside)h(the)g(b)r(ounds)g(giv)n(en)e(b)n(y)i(LBND)g(and)f
-(UBND,)i(or)e(has)g(a)g(v)-5 b(alue)23 b(that)h(do)r(es)g(not)f(meet)h
-(the)427 451 y(criterion)k(sp)r(eci\014ed)h(b)n(y)g(V)-9
-b(ALUE)29 b(and)g(OPER,)e(then)j(this)f(function)g(will)g(searc)n(h)f
-(for)g(a)h(suitable)g(pixel.)427 551 y(The)h(searc)n(h)d(starts)i(at)g
-(the)h(cen)n(tral)e(pixel)i(and)f(pro)r(ceeds)f(in)i(a)f(spiral)f
-(manner)h(un)n(til)h(a)f(pixel)g(is)g(found)427 650 y(that)f(meets)g
-(the)g(sp)r(eci\014ed)g(crierion.)259 769 y Fc(ST)-8
-b(ARPIX)33 b(=)f(LOGICAL)h(\(Giv)m(en\))427 869 y Fk(A)19
-b(\015ag)f(indicating)g(the)h(nature)e(of)i(the)g(pixel)f(co)r
-(ordinate)f(system)h(used)h(to)f(describ)r(e)g(the)h(v)n(ertex)e(p)r
-(ositions)427 968 y(in)33 b(the)g(returned)e(P)n(olygon.)49
-b(If)33 b(.TR)n(UE.,)g(the)g(standard)e(Starlink)h(de\014nition)h(of)f
-(pixel)h(co)r(ordinate)e(is)427 1068 y(used)23 b(in)f(whic)n(h)h(a)f
-(pixel)g(with)h(in)n(teger)f(index)g(I)h(spans)f(a)g(range)f(of)h
-(pixel)h(co)r(ordinate)e(from)h(\(I-1\))g(to)h(I)f(\(i.e.)427
-1167 y(pixel)30 b(corners)f(ha)n(v)n(e)g(in)n(tegral)f(pixel)i(co)r
-(ordinates\).)44 b(If)30 b(.F)-9 b(ALSE.,)31 b(the)f(de\014nition)h(of)
-f(pixel)g(co)r(ordinate)427 1267 y(used)f(b)n(y)g(other)g(AST)g
-(functions)h(suc)n(h)e(as)h(AST)p Ft(_)p Fk(RESAMPLE,)f(AST)p
-Ft(_)p Fk(MASK,)h(etc.,)h(is)f(used.)41 b(In)29 b(this)427
-1367 y(de\014nition,)23 b(a)e(pixel)g(with)h(in)n(teger)f(index)g(I)g
-(spans)g(a)g(range)f(of)h(pixel)g(co)r(ordinate)g(from)f(\(I-0.5\))h
-(to)g(\(I+0.5\))427 1466 y(\(i.e.)38 b(pixel)27 b(cen)n(tres)g(ha)n(v)n
-(e)f(in)n(tegral)h(pixel)g(co)r(ordinates\).)259 1585
-y Fc(BO)m(XSIZE)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 1685
-y Fk(The)38 b(full)g(width)g(in)g(pixels)f(of)h(a)f(smo)r(othing)g(b)r
-(o)n(x)g(to)g(b)r(e)h(applied)g(to)f(the)h(p)r(olygon)e(v)n(ertices)h
-(b)r(efore)427 1784 y(do)n(wnsizing)29 b(the)i(p)r(olygon)e(to)i(a)f
-(smaller)f(n)n(um)n(b)r(er)h(of)g(v)n(ertices.)44 b(If)31
-b(an)f(ev)n(en)g(n)n(um)n(b)r(er)g(is)g(supplied,)h(the)427
-1884 y(next)d(larger)e(o)r(dd)i(n)n(um)n(b)r(er)f(is)g(used.)37
-b(V)-7 b(alues)28 b(of)f(one)g(or)g(zero)g(result)g(in)h(no)f(smo)r
-(othing.)259 2003 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h
-(and)g(Returned\))427 2103 y Fk(The)c(global)e(status.)0
-2250 y Fc(Returned)32 b(V)-8 b(alue:)259 2373 y(AST)p
-Ft(_)p Fc(OUTLINE)p Fm(<)p Fc(X)p Fm(>)32 b Fc(=)g(INTEGER)427
-2472 y Fk(The)c(n)n(um)n(b)r(er)f(of)h(pixels)f(to)h(whic)n(h)f(a)g(v)
--5 b(alue)28 b(of)f(BAD)n(V)-9 b(AL)28 b(has)g(b)r(een)g(assigned.)0
-2620 y Fc(Notes:)340 2889 y Fj(\017)45 b Fk(This)27 b(function)h(pro)r
-(ceeds)e(b)n(y)h(\014rst)g(\014nding)g(a)g(v)n(ery)f(accurate)g(p)r
-(olygon,)g(and)h(then)h(remo)n(ving)d(insigni\014-)427
-2988 y(can)n(t)i(v)n(ertices)g(from)g(this)h(\014ne)g(p)r(olygon)f
-(using)g(AST)p Ft(_)p Fk(DO)n(WNSIZE.)340 3107 y Fj(\017)45
-b Fk(The)27 b(returned)g(P)n(olygon)d(is)j(the)h(outer)e(b)r(oundary)g
-(of)h(the)g(con)n(tiguous)f(set)h(of)f(pixels)h(that)g(includes)g(ths)
-427 3207 y(sp)r(eci\014ed)k Ft(")p Fk(inside)p Ft(")f
-Fk(p)r(oin)n(t,)i(and)f(satisfy)f(the)h(sp)r(eci\014ed)g(v)-5
-b(alue)31 b(requiremen)n(t.)46 b(This)30 b(set)h(of)g(pixels)f(ma)n(y)
-427 3307 y(p)r(oten)n(tially)22 b(include)h Ft(")p Fk(holes)p
-Ft(")d Fk(where)i(the)g(pixel)g(v)-5 b(alues)22 b(fail)g(to)g(meet)h
-(the)f(sp)r(eci\014ed)g(v)-5 b(alue)22 b(requiremen)n(t.)427
-3406 y(Suc)n(h)28 b(holes)f(will)h(b)r(e)g(ignored)e(b)n(y)h(this)h
-(function.)340 3525 y Fj(\017)45 b Fk(A)27 b(v)-5 b(alue)25
-b(of)h(zero)f(will)h(b)r(e)g(returned)g(if)g(this)g(function)h(is)f(in)
-n(v)n(ok)n(ed)e(with)j(the)f(global)f(error)f(status)h(set,)h(or)427
-3625 y(if)i(it)g(should)g(fail)f(for)h(an)n(y)e(reason.)-2
-3773 y Fc(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)227 3919
-y Fk(T)-7 b(o)26 b(select)g(the)g(appropriate)e(masking)h(function,)i
-(y)n(ou)e(should)h(replace)f Fm(<)p Fk(X)p Fm(>)h Fk(in)g(the)g
-(generic)f(function)i(name)227 4018 y(AST)p Ft(_)p Fk(OUTLINE)p
-Fm(<)p Fk(X)p Fm(>)h Fk(with)h(a)f(1-)g(or)g(2-c)n(haracter)d(data)j(t)
-n(yp)r(e)h(co)r(de,)g(so)f(as)g(to)g(matc)n(h)h(the)g(n)n(umerical)e(t)
-n(yp)r(e)227 4118 y Fm(<)p Fk(Xt)n(yp)r(e)p Fm(>)g Fk(of)h(the)g(data)f
-(y)n(ou)g(are)g(pro)r(cessing,)f(as)h(follo)n(ws:)340
-4240 y Fj(\017)45 b Fk(D:)28 b(DOUBLE)g(PRECISION)340
-4359 y Fj(\017)45 b Fk(R:)28 b(REAL)340 4478 y Fj(\017)45
-b Fk(I:)28 b(INTEGER)340 4597 y Fj(\017)45 b Fk(UI:)28
-b(INTEGER)f(\(treated)h(as)f(unsigned\))340 4716 y Fj(\017)45
-b Fk(S:)28 b(INTEGER)p Fj(\003)p Fk(2)e(\(short)h(in)n(teger\))340
-4834 y Fj(\017)45 b Fk(US:)28 b(INTEGER)p Fj(\003)p Fk(2)f(\(short)g
-(in)n(teger,)f(treated)i(as)f(unsigned\))340 4953 y Fj(\017)45
-b Fk(B:)28 b(BYTE)f(\(treated)h(as)e(signed\))340 5072
-y Fj(\017)45 b Fk(UB:)28 b(BYTE)f(\(treated)h(as)f(unsigned\))227
-5220 y(F)-7 b(or)40 b(example,)j(AST)p Ft(_)p Fk(OUTLINED)e(w)n(ould)f
-(b)r(e)h(used)f(to)g(pro)r(cess)g(DOUBLE)g(PRECISION)f(data,)k(while)
-227 5320 y(AST)p Ft(_)p Fk(OUTLINES)29 b(w)n(ould)h(b)r(e)f(used)h(to)f
-(pro)r(cess)g(short)g(in)n(teger)f(data)h(\(stored)g(in)h(an)f(INTEGER)
-p Fj(\003)p Fk(2)g(arra)n(y\),)227 5419 y(etc.)227 5537
-y(F)-7 b(or)32 b(compatibilit)n(y)h(with)g(other)f(Starlink)g
-(facilities,)i(the)f(co)r(des)g(W)g(and)f(UW)h(are)f(pro)n(vided)g(as)g
-(synon)n(yms)227 5636 y(for)27 b(S)h(and)g(US)g(resp)r(ectiv)n(ely)e
-(\(but)j(only)e(in)h(the)g(F)-7 b(ortran)26 b(in)n(terface)h(to)h
-(AST\).)p eop end
-%%Page: 287 297
-TeXDict begin 287 296 bop 3643 52 a FG(287)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(O)l(VERLAP)1214 483 y
-Fd(T)-10 b(est)39 b(if)f(t)m(w)m(o)f(regions)h(o)m(v)m(erlap)1625
-598 y(eac)m(h)g(other)2787 482 y FA(AST)p Fe(_)p FA(O)l(VERLAP)0
-754 y Fc(Description:)44 b Fk(This)39 b(function)h(returns)e(an)g(in)n
-(teger)g(v)-5 b(alue)39 b(indicating)g(if)g(the)g(t)n(w)n(o)g(supplied)
-g(Regions)f(o)n(v)n(erlap.)227 854 y(The)30 b(t)n(w)n(o)g(Regions)f
-(are)g(con)n(v)n(erted)f(to)i(a)g(commnon)f(co)r(ordinate)g(system)h(b)
-r(efore)f(p)r(erforming)h(the)g(c)n(hec)n(k.)43 b(If)227
-954 y(this)33 b(con)n(v)n(ersion)e(is)i(not)g(p)r(ossible)f(\(for)h
-(instance)g(b)r(ecause)f(the)h(t)n(w)n(o)g(Regions)e(represen)n(t)h
-(areas)f(in)i(di\013eren)n(t)227 1053 y(domains\),)28
-b(then)g(the)g(c)n(hec)n(k)e(cannot)h(b)r(e)h(p)r(erformed)g(and)f(a)g
-(zero)g(v)-5 b(alue)27 b(is)h(returned)f(to)g(indicate)h(this.)0
-1198 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_OVERLAP\()c
-(THIS,)i(THAT,)h(STATUS)f(\))0 1343 y Fc(Argumen)m(ts:)259
-1475 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 1575
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(\014rst)f(Region.)259
-1703 y Fc(THA)-8 b(T)33 b(=)f(INTEGER)f(\(Giv)m(en\))427
-1803 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(second)f(Region.)259
-1931 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 2031 y Fk(The)c(global)e(status.)0 2188
-y Fc(Returned)32 b(V)-8 b(alue:)259 2320 y(AST)p Ft(_)p
-Fc(O)m(VERLAP)33 b(=)f(INTEGER)427 2420 y Fk(A)c(v)-5
-b(alue)28 b(indicating)f(if)h(there)g(is)f(an)n(y)g(o)n(v)n(erlap)e(b)r
-(et)n(w)n(een)j(the)g(t)n(w)n(o)f(Regions.)36 b(P)n(ossible)26
-b(v)-5 b(alues)27 b(are:)427 2534 y(0)i(-)f(The)h(c)n(hec)n(k)f(could)h
-(not)g(b)r(e)g(p)r(erformed)f(b)r(ecause)g(the)i(second)e(Region)g
-(could)h(not)f(b)r(e)i(mapp)r(ed)f(in)n(to)427 2634 y(the)f(co)r
-(ordinate)f(system)g(of)h(the)g(\014rst)f(Region.)427
-2748 y(1)g(-)h(There)f(is)g(no)h(o)n(v)n(erlap)d(b)r(et)n(w)n(een)j
-(the)g(t)n(w)n(o)f(Regions.)427 2862 y(2)g(-)h(The)f(\014rst)h(Region)f
-(is)g(completely)h(inside)f(the)h(second)f(Region.)427
-2976 y(3)g(-)h(The)f(second)g(Region)g(is)h(completely)f(inside)h(the)g
-(\014rst)f(Region.)427 3090 y(4)g(-)h(There)f(is)g(partial)g(o)n(v)n
-(erlap)f(b)r(et)n(w)n(een)h(the)h(t)n(w)n(o)f(Regions.)427
-3204 y(5)g(-)h(The)f(Regions)g(are)g(iden)n(tical)g(to)h(within)g
-(their)f(uncertain)n(ties.)427 3318 y(6)e(-)g(The)g(second)g(Region)f
-(is)h(the)h(exact)e(negation)g(of)h(the)h(\014rst)f(Region)f(to)h
-(within)h(their)f(uncertain)n(ties.)0 3475 y Fc(Notes:)340
-3753 y Fj(\017)45 b Fk(The)22 b(returned)f(v)-5 b(alues)22
-b(5)f(and)h(6)f(do)g(not)h(c)n(hec)n(k)f(the)h(v)-5 b(alue)22
-b(of)f(the)h(Closed)g(attribute)f(in)h(the)h(t)n(w)n(o)d(Regions.)340
-3882 y Fj(\017)45 b Fk(A)29 b(v)-5 b(alue)29 b(of)f(zero)g(will)h(b)r
-(e)g(returned)f(if)h(this)g(function)g(is)f(in)n(v)n(ok)n(ed)f(with)j
-(the)f(AST)g(error)d(status)j(set,)f(or)427 3981 y(if)g(it)g(should)g
-(fail)f(for)h(an)n(y)e(reason.)p 0 4172 V 0 4303 a FA(AST)p
-Fe(_)p FA(PCDMAP)1439 4304 y Fd(Create)37 b(a)h(PcdMap)2835
-4303 y FA(AST)p Fe(_)p FA(PCDMAP)0 4484 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(PcdMap)g(and)h
-(optionally)e(initialises)i(its)g(attributes.)227 4606
-y(A)35 b(PcdMap)f(is)g(a)h(non-linear)e(Mapping)h(whic)n(h)g
-(transforms)f(2-dimensional)h(p)r(ositions)g(to)g(correct)f(for)h(the)
-227 4706 y(radial)h(distortion)h(in)n(tro)r(duced)g(b)n(y)g(some)f
-(cameras)g(and)h(telescop)r(es.)62 b(This)36 b(can)g(tak)n(e)f(the)i
-(form)f(either)g(of)227 4805 y(pincushion)28 b(or)f(barrel)f
-(distortion,)h(and)g(is)h(c)n(haracterized)d(b)n(y)j(a)f(single)g
-(distortion)g(co)r(e\016cien)n(t.)227 4928 y(A)g(PcdMap)f(is)g(sp)r
-(eci\014ed)h(b)n(y)f(giving)g(this)h(distortion)f(co)r(e\016cien)n(t)g
-(and)g(the)h(co)r(ordinates)e(of)i(the)g(cen)n(tre)f(of)g(the)227
-5027 y(radial)h(distortion.)36 b(The)28 b(forw)n(ard)d(transformation)h
-(of)i(a)f(PcdMap)g(applies)g(the)h(distortion:)227 5149
-y(RD)g(=)g(R)g Fj(\003)f Fk(\()h(1)f(+)g(C)h Fj(\003)f
-Fk(R)h Fj(\003)f Fk(R)h(\))227 5272 y(where)h(R)h(is)g(the)g
-(undistorted)f(radial)g(distance)g(from)h(the)g(distortion)f(cen)n(tre)
-g(\(sp)r(eci\014ed)h(b)n(y)f(attribute)h(Pcd-)227 5371
-y(Cen\),)k(RD)e(is)g(the)g(radial)e(distance)i(from)f(the)i(same)e(cen)
-n(tre)g(in)h(the)g(presence)f(of)h(distortion,)g(and)g(C)g(is)f(the)227
-5471 y(distortion)c(co)r(e\016cien)n(t)h(\(giv)n(en)f(b)n(y)g
-(attribute)h(Disco\).)227 5593 y(The)33 b(in)n(v)n(erse)f
-(transformation)f(of)i(a)f(PcdMap)h(remo)n(v)n(es)d(the)k(distortion)e
-(pro)r(duced)h(b)n(y)f(the)h(forw)n(ard)f(trans-)227
-5693 y(formation.)42 b(The)29 b(expression)f(used)i(to)f(deriv)n(e)g(R)
-g(from)g(RD)i(is)e(an)g(appro)n(ximate)f(in)n(v)n(erse)g(of)h(the)h
-(expression)p eop end
-%%Page: 288 298
-TeXDict begin 288 297 bop 0 52 a FG(288)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 351 y Fk(ab)r(o)n(v)n(e,)e
-(obtained)g(from)g(t)n(w)n(o)g(iterations)f(of)h(the)h(Newton-Raphson)f
-(metho)r(d.)42 b(The)30 b(mismatc)n(h)f(b)r(et)n(w)n(een)g(the)227
-451 y(forw)n(ard)d(and)h(in)n(v)n(erse)f(expressions)f(is)i(negligible)
-g(for)f(astrometric)g(applications)g(\(to)i(reac)n(h)e(1)h(milliarcsec)
-f(at)227 551 y(the)g(edge)g(of)g(the)g(Anglo-Australian)e(T)-7
-b(elescop)r(e)25 b(triplet)h(or)f(a)h(Sc)n(hmidt)g(\014eld)g(w)n(ould)f
-(require)g(\014eld)h(diameters)227 650 y(of)i(2.4)f(and)g(42)g(degrees)
-f(resp)r(ectiv)n(ely\).)227 773 y(If)39 b(a)f(PcdMap)f(is)h(in)n(v)n
-(erted)f(\(e.g.)69 b(using)37 b(AST)p Ft(_)p Fk(INVER)-7
-b(T\))39 b(then)g(the)f(roles)f(of)h(the)h(forw)n(ard)d(and)i(in)n(v)n
-(erse)227 873 y(transformations)19 b(are)g(rev)n(ersed;)i(the)g(forw)n
-(ard)d(transformation)h(will)i(remo)n(v)n(e)d(the)j(distortion,)g(and)f
-(the)h(in)n(v)n(erse)227 973 y(transformation)26 b(will)i(apply)f(it.)0
-1119 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_PCDMAP\()c
-(DISCO,)i(PCDCEN,)g(OPTIONS,)f(STATUS)h(\))0 1266 y Fc(Argumen)m(ts:)
-259 1400 y(DISCO)32 b(=)g(DOUBLE)g(PRECISION)g(\(Giv)m(en\))427
-1499 y Fk(The)23 b(distortion)f(co)r(e\016cien)n(t.)35
-b(Negativ)n(e)21 b(v)-5 b(alues)23 b(giv)n(e)e(barrel)h(distortion,)h
-(p)r(ositiv)n(e)f(v)-5 b(alues)22 b(giv)n(e)g(pincush-)427
-1599 y(ion)28 b(distortion,)f(and)g(zero)g(giv)n(es)f(no)h(distortion.)
-259 1729 y Fc(PCDCEN\()32 b(2)f(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m
-(en\))427 1829 y Fk(An)d(arra)n(y)e(con)n(taining)g(the)i(co)r
-(ordinates)e(of)i(the)g(cen)n(tre)f(of)g(the)h(distortion.)259
-1959 y Fc(OPTIONS)k(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 2058 y Fk(A)22 b(c)n(haracter)e
-(string)h(con)n(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g
-(attribute)g(assignmen)n(ts)f(to)g(b)r(e)427 2158 y(used)27
-b(for)e(initialising)i(the)f(new)h(PcdMap.)36 b(The)26
-b(syn)n(tax)g(used)g(is)g(iden)n(tical)g(to)h(that)f(for)g(the)h(AST)p
-Ft(_)p Fk(SET)427 2257 y(routine.)259 2388 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-2487 y Fk(The)c(global)e(status.)0 2646 y Fc(Returned)32
-b(V)-8 b(alue:)259 2780 y(AST)p Ft(_)p Fc(PCDMAP)33 b(=)f(INTEGER)427
-2880 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(PcdMap.)0
-3039 y Fc(Notes:)340 3318 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 3418 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)-2
-3577 y Fc(Status)33 b(Handling)n(:)227 3723 y Fk(The)d(protected)g(in)n
-(terface)f(to)g(this)h(function)h(includes)f(an)f(extra)g(parameter)f
-(at)i(the)g(end)g(of)g(the)g(parameter)227 3823 y(list)37
-b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)
-r(oin)n(ter)g(to)h(the)g(in)n(teger)e(inherited)i(status)f(v)-5
-b(ariable:)54 b Ft(")p Fk(in)n(t)227 3923 y Fj(\003)p
-Fk(status)p Ft(")p Fk(.)p 0 4116 3780 12 v 0 4247 a FA(AST)p
-Fe(_)p FA(PERMAXES)1302 4248 y Fd(P)m(erm)m(ute)37 b(the)h(axis)g
-(order)1613 4348 y(in)g(a)h(F)-10 b(rame)2674 4247 y
-FA(AST)p Fe(_)p FA(PERMAXES)0 4508 y Fc(Description:)44
-b Fk(This)28 b(routine)f(p)r(erm)n(utes)h(the)g(order)e(in)i(whic)n(h)f
-(a)g(F)-7 b(rame's)27 b(axes)g(o)r(ccur.)0 4654 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(CALL)42 b(AST_PERMAXES\()c(THIS,)j(PERM,)h(STATUS)f
-(\))0 4801 y Fc(Argumen)m(ts:)259 4935 y(THIS)32 b(=)g(INTEGER)g(\(Giv)
-m(en\))427 5034 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)259 5164 y Fc(PERM\()31 b Fj(\003)h Fc(\))g(=)g(INTEGER)f
-(\(Giv)m(en\))427 5264 y Fk(An)k(arra)n(y)e(with)i(one)f(elemen)n(t)h
-(for)f(eac)n(h)f(axis)h(of)h(the)g(F)-7 b(rame)34 b(\(Naxes)g
-(attribute\).)58 b(This)35 b(should)f(list)427 5364 y(the)28
-b(axes)e(in)h(their)g(new)h(order,)e(using)g(the)i(original)d(axis)i(n)
-n(um)n(b)r(ering)f(\(whic)n(h)i(starts)e(at)h(1)g(for)f(the)i(\014rst)
-427 5463 y(axis\).)259 5593 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f
-(\(Giv)m(en)h(and)g(Returned\))427 5693 y Fk(The)c(global)e(status.)p
-eop end
-%%Page: 289 299
-TeXDict begin 289 298 bop 3643 52 a FG(289)0 351 y Fc(Notes:)340
-632 y Fj(\017)45 b Fk(Only)29 b(gen)n(uine)g(p)r(erm)n(utations)f(of)i
-(the)f(axis)g(order)e(are)i(p)r(ermitted,)h(so)f(eac)n(h)f(axis)g(m)n
-(ust)i(b)r(e)f(referenced)427 732 y(exactly)e(once)g(in)h(the)g(PERM)f
-(arra)n(y)-7 b(.)340 863 y Fj(\017)45 b Fk(If)28 b(successiv)n(e)f
-(axis)f(p)r(erm)n(utations)h(are)g(applied)h(to)f(a)g(F)-7
-b(rame,)27 b(then)h(the)g(e\013ects)g(are)f(cum)n(ulativ)n(e.)p
-0 1059 3780 12 v 0 1190 a FA(AST)p Fe(_)p FA(PERMMAP)1401
-1189 y Fd(Create)37 b(a)i(P)m(ermMap)2719 1190 y FA(AST)p
-Fe(_)p FA(PERMMAP)0 1375 y Fc(Description:)44 b Fk(This)28
-b(function)g(creates)f(a)g(new)g(P)n(ermMap)g(and)g(optionally)g
-(initialises)g(its)h(attributes.)227 1499 y(A)g(P)n(ermMap)d(is)i(a)g
-(Mapping)f(whic)n(h)h(p)r(erm)n(utes)g(the)g(order)f(of)h(co)r
-(ordinates,)e(and)i(p)r(ossibly)g(also)f(c)n(hanges)f(the)227
-1598 y(n)n(um)n(b)r(er)j(of)f(co)r(ordinates,)f(b)r(et)n(w)n(een)i(its)
-g(input)g(and)g(output.)227 1722 y(In)37 b(addition)f(to)g(p)r(erm)n
-(uting)h(the)f(co)r(ordinate)g(order,)h(a)f(P)n(ermMap)f(ma)n(y)h(also)
-f(assign)g(constan)n(t)h(v)-5 b(alues)36 b(to)227 1822
-y(co)r(ordinates.)53 b(This)33 b(is)g(useful)h(when)g(the)f(n)n(um)n(b)
-r(er)g(of)h(co)r(ordinates)d(is)j(b)r(eing)f(increased)f(as)h(it)h
-(allo)n(ws)e(\014xed)227 1921 y(v)-5 b(alues)27 b(to)h(b)r(e)g
-(assigned)e(to)i(an)n(y)f(new)g(ones.)0 2069 y Fc(In)m(v)m(o)s(cation:)
-123 b Ft(RESULT)41 b(=)i(AST_PERMMAP\()c(NIN,)j(INPERM,)e(NOUT,)i
-(OUTPERM,)e(CONSTANT,)g(OPTIONS,)g(STATUS)227 2169 y(\))0
-2316 y Fc(Argumen)m(ts:)259 2451 y(NIN)32 b(=)g(INTEGER)f(\(Giv)m(en\))
-427 2551 y Fk(The)d(n)n(um)n(b)r(er)f(of)h(input)g(co)r(ordinates.)259
-2682 y Fc(INPERM)j(=)h(INTEGER\()g(NIN)f(\))h(\(Giv)m(en\))427
-2782 y Fk(An)d(arra)n(y)d(whic)n(h,)i(for)g(eac)n(h)f(input)i(co)r
-(ordinate,)e(should)h(con)n(tain)g(the)h(n)n(um)n(b)r(er)e(of)i(the)f
-(output)h(co)r(ordi-)427 2881 y(nate)g(whose)g(v)-5 b(alue)29
-b(is)g(to)g(b)r(e)h(used)f(\(note)h(that)f(this)h(arra)n(y)d(therefore)
-h(de\014nes)h(the)h(in)n(v)n(erse)e(co)r(ordinate)427
-2981 y(transformation\).)36 b(Co)r(ordinates)26 b(are)h(n)n(um)n(b)r
-(ered)g(starting)g(from)g(1.)427 3096 y(F)-7 b(or)28
-b(details)g(of)g(additional)g(sp)r(ecial)g(v)-5 b(alues)28
-b(that)h(ma)n(y)f(b)r(e)g(used)h(in)f(this)h(arra)n(y)-7
-b(,)26 b(see)i(the)h(description)f(of)427 3196 y(the)g(CONST)-7
-b(ANT)28 b(argumen)n(t.)259 3327 y Fc(NOUT)k(=)g(INTEGER)g(\(Giv)m
-(en\))427 3427 y Fk(The)c(n)n(um)n(b)r(er)f(of)h(output)g(co)r
-(ordinates.)259 3558 y Fc(OUTPERM)k(=)g(INTEGER\()f(NOUT)h(\))g(\(Giv)m
-(en\))427 3658 y Fk(An)19 b(arra)n(y)e(whic)n(h,)j(for)f(eac)n(h)f
-(output)h(co)r(ordinate,)g(should)g(con)n(tain)f(the)h(n)n(um)n(b)r(er)
-f(of)h(the)g(input)h(co)r(ordinate)427 3757 y(whose)40
-b(v)-5 b(alue)40 b(is)h(to)f(b)r(e)h(used)f(\(note)h(that)g(this)f
-(arra)n(y)e(therefore)i(de\014nes)g(the)h(forw)n(ard)e(co)r(ordinate)
-427 3857 y(transformation\).)d(Co)r(ordinates)26 b(are)h(n)n(um)n(b)r
-(ered)g(starting)g(from)g(1.)427 3972 y(F)-7 b(or)28
-b(details)g(of)g(additional)g(sp)r(ecial)g(v)-5 b(alues)28
-b(that)h(ma)n(y)f(b)r(e)g(used)h(in)f(this)h(arra)n(y)-7
-b(,)26 b(see)i(the)h(description)f(of)427 4072 y(the)g(CONST)-7
-b(ANT)28 b(argumen)n(t.)259 4203 y Fc(CONST)-8 b(ANT)32
-b(=)g(DOUBLE)h(PRECISION\()e Fj(\003)g Fc(\))h(\(Giv)m(en\))427
-4303 y Fk(An)22 b(arra)n(y)d(con)n(taining)h(v)-5 b(alues)21
-b(whic)n(h)g(ma)n(y)g(b)r(e)g(assigned)f(to)i(input)g(and/or)d(output)j
-(co)r(ordinates)e(instead)427 4402 y(of)h(deriving)f(them)h(from)g
-(other)f(co)r(ordinate)f(v)-5 b(alues.)35 b(If)21 b(either)f(of)h(the)g
-(INPERM)g(or)e(OUTPERM)h(arra)n(ys)427 4502 y(con)n(tains)i(a)g
-(negativ)n(e)g(v)-5 b(alue,)23 b(it)g(is)g(used)f(to)h(address)e(this)i
-(CONST)-7 b(ANT)24 b(arra)n(y)c(\(suc)n(h)i(that)h(-1)f(addresses)427
-4602 y(the)j(\014rst)g(elemen)n(t,)g(-2)f(addresses)f(the)i(second)f
-(elemen)n(t,)h(etc.\))37 b(and)24 b(the)h(v)-5 b(alue)25
-b(obtained)f(is)h(used)f(as)g(the)427 4701 y(corresp)r(onding)i(co)r
-(ordinate)g(v)-5 b(alue.)427 4817 y(Care)29 b(should)h(b)r(e)h(tak)n
-(en)f(to)g(ensure)f(that)i(lo)r(cations)e(lying)h(outside)g(the)h
-(exten)n(t)f(of)g(this)h(arra)n(y)c(are)j(not)427 4916
-y(acciden)n(tally)25 b(addressed.)35 b(The)26 b(arra)n(y)d(is)j(not)f
-(used)h(if)g(the)g(INPERM)g(and)f(OUTPERM)g(arra)n(ys)e(do)j(not)427
-5016 y(con)n(tain)h(negativ)n(e)g(v)-5 b(alues.)259 5147
-y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 5247 y Fk(A)22 b(c)n(haracter)e
-(string)h(con)n(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g
-(attribute)g(assignmen)n(ts)f(to)g(b)r(e)427 5346 y(used)i(for)f
-(initialising)g(the)i(new)e(P)n(ermMap.)34 b(The)23 b(syn)n(tax)f(used)
-g(is)h(iden)n(tical)f(to)h(that)g(for)f(the)h(AST)p Ft(_)p
-Fk(SET)427 5446 y(routine.)259 5577 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 5677
-y Fk(The)c(global)e(status.)p eop end
-%%Page: 290 300
-TeXDict begin 290 299 bop 0 52 a FG(290)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(Returned)h(V)-8
-b(alue:)259 475 y(AST)p Ft(_)p Fc(PERMMAP)31 b(=)i(INTEGER)427
-575 y Fk(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(P)n(ermMap.)0
-724 y Fc(Notes:)340 994 y Fj(\017)45 b Fk(If)37 b(either)f(of)g(the)g
-(INPERM)g(or)f(OUTPERM)g(arra)n(ys)f(con)n(tains)h(a)h(zero)f(v)-5
-b(alue)36 b(\(or)f(a)h(p)r(ositiv)n(e)g(v)-5 b(alue)427
-1094 y(whic)n(h)39 b(do)r(es)g(not)g(iden)n(tify)h(a)f(v)-5
-b(alid)39 b(output/input)h(co)r(ordinate,)h(as)e(appropriate\),)h(then)
-g(the)g(v)-5 b(alue)427 1194 y(AST)p Ft(__)p Fk(BAD)28
-b(is)f(assigned)g(as)g(the)h(new)f(co)r(ordinate)g(v)-5
-b(alue.)340 1314 y Fj(\017)45 b Fk(This)29 b(function)g(do)r(es)g(not)g
-(attempt)g(to)g(ensure)f(that)h(the)g(forw)n(ard)e(and)i(in)n(v)n(erse)
-e(transformations)g(p)r(er-)427 1414 y(formed)37 b(b)n(y)g(the)h(P)n
-(ermMap)e(are)g(self-consisten)n(t)h(in)h(an)n(y)e(w)n(a)n(y)-7
-b(.)65 b(Y)-7 b(ou)37 b(are)g(therefore)f(free)h(to)h(supply)427
-1513 y(co)r(ordinate)27 b(p)r(erm)n(utation)g(arra)n(ys)e(that)j(ac)n
-(hiev)n(e)e(whatev)n(er)h(e\013ect)h(is)f(desired.)340
-1634 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e
-(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 1733 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 1908 3780 12 v 0 2039 a FA(AST)p Fe(_)p FA(PICKAXES)1291
-2040 y Fd(Create)37 b(a)h(new)h(F)-10 b(rame)38 b(b)m(y)1359
-2154 y(pic)m(king)g(axes)g(from)g(an)1585 2265 y(existing)g(one)2738
-2039 y FA(AST)p Fe(_)p FA(PICKAXES)0 2429 y Fc(Description:)44
-b Fk(This)31 b(function)h(creates)e(a)g(new)i(F)-7 b(rame)30
-b(whose)g(axes)g(are)h(copied)f(from)h(an)g(existing)f(F)-7
-b(rame)31 b(along)227 2529 y(with)d(other)f(F)-7 b(rame)26
-b(attributes,)i(suc)n(h)e(as)h(its)g(Title.)37 b(An)n(y)28
-b(n)n(um)n(b)r(er)f(\(zero)f(or)g(more\))h(of)g(the)h(original)d(F)-7
-b(rame's)227 2628 y(axes)24 b(ma)n(y)f(b)r(e)i(copied,)g(in)g(an)n(y)e
-(order,)h(and)g(additional)g(axes)f(with)i(default)g(attributes)f(ma)n
-(y)g(also)f(b)r(e)i(included)227 2728 y(in)j(the)g(new)g(F)-7
-b(rame.)227 2846 y(A)33 b(Mapping)e(that)i(con)n(v)n(erts)d(b)r(et)n(w)
-n(een)i(the)g(co)r(ordinate)f(systems)h(describ)r(ed)g(b)n(y)f(the)i(t)
-n(w)n(o)e(F)-7 b(rames)31 b(will)i(also)227 2946 y(b)r(e)28
-b(returned.)0 3083 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_PICKAXES\()38 b(THIS,)k(NAXES,)f(AXES,)g(MAP,)h(STATUS)f(\))0
-3220 y Fc(Argumen)m(ts:)259 3344 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 3443 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(original)e(F)-7
-b(rame.)259 3564 y Fc(NAXES)32 b(=)g(INTEGER)f(\(Giv)m(en\))427
-3664 y Fk(The)d(n)n(um)n(b)r(er)f(of)h(axes)e(required)h(in)h(the)g
-(new)g(F)-7 b(rame.)259 3784 y Fc(AXES\()32 b(NAXES)g(\))g(=)g(INTEGER)
-f(\(Giv)m(en\))427 3884 y Fk(An)h(arra)n(y)d(whic)n(h)j(lists)f(the)h
-(axes)f(to)g(b)r(e)h(copied.)48 b(These)31 b(should)h(b)r(e)f(giv)n(en)
-g(in)h(the)g(order)e(required)g(in)427 3983 y(the)35
-b(new)f(F)-7 b(rame,)36 b(using)e(the)g(axis)g(n)n(um)n(b)r(ering)g(in)
-g(the)h(original)e(F)-7 b(rame)33 b(\(whic)n(h)i(starts)e(at)i(1)e(for)
-h(the)427 4083 y(\014rst)26 b(axis\).)36 b(Axes)26 b(ma)n(y)f(b)r(e)h
-(selected)g(in)h(an)n(y)e(order,)g(but)h(eac)n(h)g(ma)n(y)f(only)g(b)r
-(e)i(used)f(once.)36 b(If)26 b(additional)427 4182 y(\(default\))i
-(axes)d(are)h(also)f(to)h(b)r(e)h(included,)h(the)e(corresp)r(onding)f
-(elemen)n(ts)h(of)h(this)f(arra)n(y)f(should)h(b)r(e)h(set)427
-4282 y(to)h(zero.)259 4402 y Fc(MAP)k(=)g(INTEGER)f(\(Returned\))427
-4502 y Fk(A)c(p)r(oin)n(ter)f(to)h(a)f(new)g(Mapping.)37
-b(This)26 b(will)h(b)r(e)g(a)f(P)n(ermMap)f(\(or)h(a)g(UnitMap)h(as)f
-(a)g(sp)r(ecial)g(case\))g(that)427 4602 y(describ)r(es)32
-b(the)h(axis)f(p)r(erm)n(utation)h(that)g(has)f(tak)n(en)g(place)g(b)r
-(et)n(w)n(een)h(the)g(original)e(and)i(new)f(F)-7 b(rames.)427
-4701 y(The)26 b(Mapping's)f(forw)n(ard)g(transformation)f(will)i(con)n
-(v)n(ert)e(co)r(ordinates)h(from)g(the)h(original)f(F)-7
-b(rame)25 b(in)n(to)427 4801 y(the)j(new)g(one,)f(and)h(vice)f(v)n
-(ersa.)259 4921 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h
-(and)g(Returned\))427 5021 y Fk(The)c(global)e(status.)0
-5171 y Fc(Class)31 b(Applicabilit)m(y:)259 5295 y(F)-8
-b(rame)427 5394 y Fk(This)27 b(function)h(applies)e(to)h(all)g(F)-7
-b(rames.)36 b(The)27 b(class)f(of)h(F)-7 b(rame)26 b(returned)h(ma)n(y)
-f(di\013er)h(from)g(that)g(of)g(the)427 5494 y(original)g(F)-7
-b(rame,)27 b(dep)r(ending)h(on)g(whic)n(h)g(axes)f(are)g(selected.)37
-b(F)-7 b(or)28 b(example,)f(if)h(a)g(single)f(axis)g(is)h(pic)n(k)n(ed)
-427 5593 y(from)i(a)g(SkyF)-7 b(rame)29 b(\(whic)n(h)h(m)n(ust)h(alw)n
-(a)n(ys)d(ha)n(v)n(e)h(t)n(w)n(o)g(axes\))h(then)g(the)h(resulting)e(F)
--7 b(rame)30 b(cannot)f(b)r(e)i(a)427 5693 y(v)-5 b(alid)28
-b(SkyF)-7 b(rame,)27 b(so)g(will)h(rev)n(ert)e(to)h(the)h(paren)n(t)f
-(class)g(\(F)-7 b(rame\))27 b(instead.)p eop end
-%%Page: 291 301
-TeXDict begin 291 300 bop 3643 52 a FG(291)259 351 y
-Fc(F)-8 b(rameSet)427 451 y Fk(Using)19 b(this)g(function)g(on)g(a)f(F)
--7 b(rameSet)19 b(is)f(iden)n(tical)h(to)f(using)h(it)g(on)f(the)i
-(curren)n(t)d(F)-7 b(rame)19 b(in)g(the)g(F)-7 b(rameSet.)427
-551 y(The)28 b(returned)f(F)-7 b(rame)27 b(will)h(not)g(b)r(e)g(a)f(F)
--7 b(rameSet.)259 675 y Fc(Region)427 775 y Fk(If)27
-b(this)f(function)h(is)f(used)g(on)g(a)f(Region,)h(an)g(attempt)g(is)g
-(made)g(to)g(retain)g(the)g(b)r(ounds)g(information)g(on)427
-874 y(the)g(selected)e(axes.)36 b(If)25 b(succesful,)g(the)h(returned)e
-(F)-7 b(rame)25 b(will)g(b)r(e)g(a)g(Region)f(of)h(some)f(class.)35
-b(Otherwise,)427 974 y(the)j(returned)g(F)-7 b(rame)37
-b(is)g(obtained)h(b)n(y)f(calling)g(this)h(function)h(on)e(the)h(F)-7
-b(rame)37 b(represen)n(ted)g(b)n(y)g(the)427 1074 y(supplied)c(Region)f
-(\(the)h(returned)g(F)-7 b(rame)32 b(will)h(then)g(not)f(b)r(e)h(a)g
-(Region\).)51 b(In)33 b(order)e(to)i(b)r(e)g(succesful,)427
-1173 y(the)d(selected)f(axes)g(in)g(the)h(Region)f(m)n(ust)g(b)r(e)h
-(indep)r(enden)n(t)g(of)f(the)h(others.)41 b(F)-7 b(or)29
-b(instance,)h(a)f(Bo)n(x)f(can)427 1273 y(b)r(e)i(split)g(in)g(this)g
-(w)n(a)n(y)e(but)i(a)f(Circle)g(cannot.)42 b(Another)30
-b(requiremen)n(t)e(for)h(success)g(is)g(that)h(no)f(default)427
-1372 y(axes)e(are)g(added)g(\(that)h(is,)g(the)g(AXES)g(arra)n(y)d(m)n
-(ust)i(not)h(con)n(tain)f(an)n(y)g(zero)f(v)-5 b(alues.)0
-1526 y Fc(Returned)32 b(V)-8 b(alue:)259 1654 y(AST)p
-Ft(_)p Fc(PICKAXES)33 b(=)f(INTEGER)427 1754 y Fk(A)c(p)r(oin)n(ter)f
-(to)h(the)g(new)g(F)-7 b(rame.)0 1907 y Fc(Notes:)340
-2181 y Fj(\017)45 b Fk(The)22 b(new)f(F)-7 b(rame)21
-b(will)h(con)n(tain)f(a)g Ft(")p Fk(deep)p Ft(")g Fk(cop)n(y)f(\(c.f.)
-36 b(AST)p Ft(_)p Fk(COPY\))21 b(of)h(all)f(the)h(data)f(selected)g
-(from)g(the)427 2281 y(original)26 b(F)-7 b(rame.)37
-b(Mo)r(difying)27 b(an)n(y)g(asp)r(ect)g(of)h(the)g(new)g(F)-7
-b(rame)27 b(will)g(therefore)g(not)h(a\013ect)f(the)h(original)427
-2381 y(one.)340 2505 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 2605 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 2787 3780 12 v 0 2918 a FA(AST)p Fe(_)p FA(PLOT)1544
-2919 y Fd(Create)37 b(a)i(Plot)3081 2918 y FA(AST)p Fe(_)p
-FA(PLOT)0 3078 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f
-(a)g(new)g(Plot)g(and)h(optionally)f(initialises)g(its)h(attributes.)
-227 3198 y(A)20 b(Plot)e(is)h(a)g(sp)r(ecialised)g(form)g(of)g(F)-7
-b(rameSet,)20 b(in)g(whic)n(h)f(the)h(base)e(F)-7 b(rame)19
-b(describ)r(es)f(a)h Ft(")p Fk(graphical)p Ft(")e Fk(co)r(ordinate)227
-3298 y(system)27 b(and)g(is)h(asso)r(ciated)d(with)j(a)f(rectangular)e
-(plotting)j(area)d(in)j(the)g(underlying)e(graphics)g(system.)37
-b(This)227 3398 y(plotting)28 b(area)e(is)i(where)f(graphical)f(output)
-i(app)r(ears.)35 b(It)28 b(is)g(de\014ned)g(when)g(the)g(Plot)f(is)g
-(created.)227 3518 y(The)36 b(curren)n(t)e(F)-7 b(rame)35
-b(of)h(a)f(Plot)g(describ)r(es)g(a)g Ft(")p Fk(ph)n(ysical)p
-Ft(")f Fk(co)r(ordinate)g(system,)j(whic)n(h)f(is)f(the)h(co)r
-(ordinate)227 3618 y(system)41 b(in)h(whic)n(h)f(plotting)h(op)r
-(erations)e(are)g(sp)r(eci\014ed.)79 b(The)41 b(results)g(of)g(eac)n(h)
-g(plotting)g(op)r(eration)g(are)227 3717 y(automatically)26
-b(transformed)f(in)n(to)i(graphical)e(co)r(ordinates)g(so)h(as)g(to)h
-(app)r(ear)e(in)i(the)g(plotting)g(area)e(\(sub)5 b(ject)227
-3817 y(to)28 b(an)n(y)f(clipping)g(whic)n(h)h(ma)n(y)f(b)r(e)h(in)f
-(e\013ect\).)227 3937 y(Because)39 b(the)h(Mapping)g(b)r(et)n(w)n(een)f
-(ph)n(ysical)g(and)h(graphical)e(co)r(ordinates)h(ma)n(y)g(often)h(b)r
-(e)g(non-linear,)h(or)227 4037 y(ev)n(en)f(discon)n(tin)n(uous,)i(most)
-e(plotting)g(do)r(es)g(not)g(result)f(in)i(simple)f(straigh)n(t)f
-(lines.)74 b(The)40 b(basic)g(plotting)227 4136 y(elemen)n(t)g(is)f
-(therefore)f(not)h(a)g(straigh)n(t)f(line,)k(but)e(a)f(geo)r(desic)f
-(curv)n(e)g(\(see)h(AST)p Ft(_)p Fk(CUR)-9 b(VE\).)40
-b(A)f(Plot)g(also)227 4236 y(pro)n(vides)d(facilities)i(for)f(dra)n
-(wing)f(mark)n(ers)g(or)h(sym)n(b)r(ols)g(\(AST)p Ft(_)p
-Fk(MARK\),)h(text)g(\(AST)p Ft(_)p Fk(TEXT\))g(and)f(grid)227
-4336 y(lines)25 b(\(AST)p Ft(_)p Fk(GRIDLINE\).)h(It)f(is)g(also)e(p)r
-(ossible)i(to)g(dra)n(w)e(curvilinear)h(axes)g(with)h(optional)f(co)r
-(ordinate)g(grids)227 4435 y(\(AST)p Ft(_)p Fk(GRID\).)30
-b(A)e(range)f(of)h(Plot)g(attributes)g(is)g(a)n(v)-5
-b(ailable)27 b(to)h(allo)n(w)f(precise)g(con)n(trol)g(o)n(v)n(er)g(the)
-h(app)r(earance)227 4535 y(of)g(graphical)e(output)i(pro)r(duced)f(b)n
-(y)h(these)f(routines.)227 4655 y(Y)-7 b(ou)20 b(ma)n(y)f(select)h
-(di\013eren)n(t)f(ph)n(ysical)g(co)r(ordinate)g(systems)g(in)h(whic)n
-(h)f(to)h(plot)g(\(including)g(the)g(nativ)n(e)f(graphical)227
-4755 y(co)r(ordinate)33 b(system)h(itself)6 b(\))35 b(b)n(y)f
-(selecting)g(di\013eren)n(t)g(F)-7 b(rames)33 b(as)h(the)g(curren)n(t)f
-(F)-7 b(rame)34 b(of)g(a)g(Plot,)h(using)e(its)227 4855
-y(Curren)n(t)21 b(attribute.)35 b(Y)-7 b(ou)22 b(ma)n(y)e(also)h(set)g
-(up)h(clipping)g(\(see)f(AST)p Ft(_)p Fk(CLIP\))g(to)h(limit)g(the)g
-(exten)n(t)f(of)h(an)n(y)f(plotting)227 4954 y(y)n(ou)26
-b(p)r(erform,)h(and)f(this)h(ma)n(y)f(b)r(e)h(done)f(in)h(an)n(y)f(of)h
-(the)g(co)r(ordinate)e(systems)i(asso)r(ciated)e(with)i(the)g(Plot,)g
-(not)227 5054 y(necessarily)f(the)i(one)f(y)n(ou)g(are)g(plotting)g
-(in.)227 5174 y(Lik)n(e)k(an)n(y)f(F)-7 b(rameSet,)32
-b(a)f(Plot)g(ma)n(y)f(also)g(b)r(e)i(used)f(as)g(a)f(F)-7
-b(rame.)47 b(In)32 b(this)f(case,)h(it)f(b)r(eha)n(v)n(es)f(lik)n(e)h
-(its)g(curren)n(t)227 5274 y(F)-7 b(rame,)27 b(whic)n(h)h(describ)r(es)
-f(the)h(ph)n(ysical)f(co)r(ordinate)f(system.)227 5394
-y(When)35 b(used)f(as)g(a)g(Mapping,)h(a)f(Plot)g(describ)r(es)f(the)i
-(in)n(ter-relation)e(b)r(et)n(w)n(een)h(graphical)e(co)r(ordinates)h
-(\(its)227 5494 y(base)k(F)-7 b(rame\))38 b(and)f(ph)n(ysical)g(co)r
-(ordinates)g(\(its)h(curren)n(t)f(F)-7 b(rame\).)67 b(It)38
-b(di\013ers)f(from)h(a)f(normal)g(F)-7 b(rameSet,)227
-5593 y(ho)n(w)n(ev)n(er,)29 b(in)h(that)h(an)e(attempt)i(to)f
-(transform)f(p)r(oin)n(ts)h(whic)n(h)g(lie)g(in)h(clipp)r(ed)f(areas)f
-(of)h(the)g(Plot)g(will)g(result)227 5693 y(in)e(bad)g(co)r(ordinate)e
-(v)-5 b(alues)27 b(\(AST)p Ft(__)p Fk(BAD\).)p eop end
-%%Page: 292 302
-TeXDict begin 292 301 bop 0 52 a FG(292)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(In)m(v)m(o)s(cation:)
-123 b Ft(RESULT)41 b(=)i(AST_PLOT\()d(FRAME,)h(GRAPHBOX,)f(BASEBOX,)g
-(OPTIONS,)g(STATUS)i(\))0 491 y Fc(Argumen)m(ts:)259
-618 y(FRAME)31 b(=)h(INTEGER)g(\(Giv)m(en\))427 717 y
-Fk(P)n(oin)n(ter)h(to)h(a)g(F)-7 b(rame)34 b(describing)g(the)h(ph)n
-(ysical)e(co)r(ordinate)g(system)i(in)f(whic)n(h)h(to)f(plot.)57
-b(A)35 b(p)r(oin)n(ter)427 817 y(to)29 b(a)g(F)-7 b(rameSet)29
-b(ma)n(y)f(also)g(b)r(e)h(giv)n(en,)g(in)g(whic)n(h)g(case)f(its)i
-(curren)n(t)e(F)-7 b(rame)28 b(will)i(b)r(e)f(used)g(to)g(de\014ne)g
-(the)427 916 y(ph)n(ysical)i(co)r(ordinate)g(system)h(and)g(its)g(base)
-f(F)-7 b(rame)31 b(will)i(b)r(e)f(mapp)r(ed)g(on)g(to)g(graphical)e(co)
-r(ordinates)427 1016 y(\(see)e(b)r(elo)n(w\).)427 1127
-y(If)h(a)g(n)n(ull)f(Ob)5 b(ject)29 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))h(is)g(giv)n(en,)f(a)g(default)h(2-dimensional)f(F)-7
-b(rame)28 b(will)h(b)r(e)g(used)427 1227 y(to)35 b(describ)r(e)f(the)h
-(ph)n(ysical)f(co)r(ordinate)f(system.)58 b(Lab)r(els,)36
-b(etc.)58 b(ma)n(y)34 b(then)h(b)r(e)g(attac)n(hed)f(to)h(this)g(b)n(y)
-427 1327 y(setting)28 b(the)g(appropriate)e(F)-7 b(rame)27
-b(attributes)g(\(e.g.)37 b(Lab)r(el\(axis\)\))27 b(for)h(the)g(Plot.)
-259 1450 y Fc(GRAPHBO)m(X\()k(4)g(\))g(=)g(REAL)f(\(Giv)m(en\))427
-1549 y Fk(An)h(arra)n(y)c(giving)i(the)h(p)r(osition)g(and)g(exten)n(t)
-g(of)g(the)g(plotting)g(area)e(\(on)i(the)g(plotting)g(surface)f(of)h
-(the)427 1649 y(underlying)e(graphics)f(system\))i(in)g(whic)n(h)f
-(graphical)f(output)i(is)g(to)f(app)r(ear.)42 b(This)30
-b(m)n(ust)f(b)r(e)h(sp)r(eci\014ed)427 1749 y(using)e(graphical)e(co)r
-(ordinates)g(appropriate)g(to)h(the)h(underlying)f(graphics)f(system.)
-427 1860 y(The)k(\014rst)f(pair)f(of)h(v)-5 b(alues)29
-b(should)g(giv)n(e)f(the)i(co)r(ordinates)e(of)h(the)h(b)r(ottom)f
-(left)h(corner)e(of)h(the)h(plotting)427 1960 y(area)25
-b(and)i(the)g(second)f(pair)g(should)h(giv)n(e)e(the)i(co)r(ordinates)f
-(of)g(the)h(top)g(righ)n(t)f(corner.)35 b(The)27 b(co)r(ordinate)427
-2059 y(on)41 b(the)g(horizon)n(tal)e(axis)h(should)g(b)r(e)i(giv)n(en)d
-(\014rst)i(in)g(eac)n(h)f(pair.)75 b(Note)41 b(that)g(the)g(order)f(in)
-h(whic)n(h)427 2159 y(these)26 b(p)r(oin)n(ts)h(are)e(giv)n(en)g(is)h
-(imp)r(ortan)n(t)g(b)r(ecause)g(it)g(de\014nes)g(up,)h(do)n(wn,)f(left)
-h(and)f(righ)n(t)f(for)h(subsequen)n(t)427 2258 y(graphical)g(op)r
-(erations.)259 2382 y Fc(BASEBO)m(X\()32 b(4)g(\))g(=)g(DOUBLE)g
-(PRECISION)f(\(Giv)m(en\))427 2481 y Fk(An)c(arra)n(y)d(giving)i(the)h
-(co)r(ordinates)e(of)i(t)n(w)n(o)e(p)r(oin)n(ts)i(in)g(the)g(supplied)g
-(F)-7 b(rame)26 b(\(or)f(in)i(the)g(base)f(F)-7 b(rame)26
-b(if)427 2581 y(a)k(F)-7 b(rameSet)31 b(w)n(as)e(supplied\))i(whic)n(h)
-g(corresp)r(ond)d(to)j(the)g(b)r(ottom)f(left)i(and)e(top)g(righ)n(t)g
-(corners)f(of)h(the)427 2680 y(plotting)25 b(area,)g(as)f(sp)r
-(eci\014ed)h(ab)r(o)n(v)n(e.)35 b(This)25 b(range)f(of)h(co)r
-(ordinates)e(will)i(b)r(e)h(mapp)r(ed)f(linearly)g(on)f(to)h(the)427
-2780 y(plotting)j(area.)35 b(The)28 b(co)r(ordinates)e(should)i(b)r(e)g
-(giv)n(en)e(in)i(the)g(same)f(order)f(as)h(ab)r(o)n(v)n(e.)259
-2903 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 3003 y Fk(A)g(c)n(haracter)e(string)
-h(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 3102 y(b)r(e)e(used)g(for)f
-(initialising)h(the)g(new)f(Plot.)40 b(The)29 b(syn)n(tax)f(used)g(is)h
-(iden)n(tical)f(to)h(that)g(for)f(the)h(AST)p Ft(_)p
-Fk(SET)427 3202 y(routine.)37 b(If)28 b(no)f(initialisation)g(is)h
-(required,)e(a)i(blank)f(v)-5 b(alue)27 b(ma)n(y)g(b)r(e)h(supplied.)
-259 3325 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 3425 y Fk(The)c(global)e(status.)0 3577
-y Fc(Returned)32 b(V)-8 b(alue:)259 3703 y(AST)p Ft(_)p
-Fc(PLOT)427 3803 y Fk(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Plot.)0
-3955 y Fc(Notes:)340 4228 y Fj(\017)45 b Fk(The)24 b(base)f(F)-7
-b(rame)24 b(of)g(the)g(returned)f(Plot)h(will)g(b)r(e)g(a)g(new)f(F)-7
-b(rame)24 b(whic)n(h)g(is)f(created)h(b)n(y)f(this)h(function)h(to)427
-4328 y(represen)n(t)32 b(the)h(co)r(ordinate)f(system)g(of)h(the)g
-(underlying)f(graphics)g(system)g(\(graphical)g(co)r(ordinates\).)427
-4427 y(It)h(is)g(giv)n(en)f(a)g(F)-7 b(rame)33 b(index)g(of)f(1)h
-(within)g(the)g(Plot.)52 b(The)33 b(c)n(hoice)f(of)h(base)f(F)-7
-b(rame)32 b(\(Base)g(attribute\))427 4527 y(should)26
-b(not,)g(in)g(general,)f(b)r(e)h(c)n(hanged)e(once)h(a)h(Plot)f(has)g
-(b)r(een)h(created)f(\(although)g(y)n(ou)g(could)h(use)f(this)427
-4626 y(as)i(a)g(w)n(a)n(y)g(of)g(mo)n(ving)g(the)h(plotting)f(area)g
-(around)f(on)h(the)h(plotting)g(surface\).)340 4749 y
-Fj(\017)45 b Fk(If)31 b(a)f(F)-7 b(rame)30 b(is)g(supplied)g(\(via)g
-(the)h(FRAME)g(p)r(oin)n(ter\),)g(then)f(it)h(b)r(ecomes)f(the)h
-(curren)n(t)e(F)-7 b(rame)30 b(of)g(the)427 4849 y(new)e(Plot)f(and)g
-(is)h(giv)n(en)f(a)g(F)-7 b(rame)27 b(index)h(of)f(2.)340
-4972 y Fj(\017)45 b Fk(If)29 b(a)g(F)-7 b(rameSet)28
-b(is)h(supplied)g(\(via)f(the)h(FRAME)g(p)r(oin)n(ter\),)g(then)h(all)e
-(the)h(F)-7 b(rames)28 b(within)h(this)g(F)-7 b(rame-)427
-5072 y(Set)34 b(b)r(ecome)g(part)f(of)h(the)g(new)g(Plot)f(\(where)h
-(their)g(F)-7 b(rame)33 b(indices)h(are)f(increased)f(b)n(y)i(1\),)h
-(with)f(the)427 5171 y(F)-7 b(rameSet's)27 b(curren)n(t)g(F)-7
-b(rame)27 b(b)r(ecoming)h(the)g(curren)n(t)e(F)-7 b(rame)27
-b(of)h(the)g(Plot.)340 5295 y Fj(\017)45 b Fk(If)33 b(a)f(n)n(ull)h(Ob)
-5 b(ject)32 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fk(NULL\))h(is)f
-(supplied)h(\(via)f(the)h(FRAME)f(p)r(oin)n(ter\),)i(then)f(the)f(re-)
-427 5394 y(turned)k(Plot)e(will)i(con)n(tain)e(t)n(w)n(o)h(F)-7
-b(rames,)36 b(b)r(oth)g(created)f(b)n(y)g(this)g(function.)61
-b(The)35 b(base)g(F)-7 b(rame)34 b(will)427 5494 y(describ)r(e)23
-b(graphics)f(co)r(ordinates)f(\(as)i(ab)r(o)n(v)n(e\))f(and)h(the)h
-(curren)n(t)e(F)-7 b(rame)23 b(will)g(b)r(e)g(a)g(basic)g(F)-7
-b(rame)22 b(with)i(no)427 5593 y(attributes)i(set)g(\(this)h(will)f
-(therefore)f(giv)n(e)g(default)h(v)-5 b(alues)26 b(for)f(suc)n(h)g
-(things)h(as)g(the)g(Plot)f(Title)h(and)g(the)427 5693
-y(Lab)r(el)21 b(on)g(eac)n(h)f(axis\).)35 b(Ph)n(ysical)19
-b(co)r(ordinates)h(will)h(b)r(e)h(mapp)r(ed)f(linearly)g(on)f(to)h
-(graphical)f(co)r(ordinates.)p eop end
-%%Page: 293 303
-TeXDict begin 293 302 bop 3643 52 a FG(293)340 351 y
-Fj(\017)45 b Fk(An)29 b(error)e(will)h(result)g(if)h(the)g(F)-7
-b(rame)28 b(supplied)h(\(or)f(the)g(base)g(F)-7 b(rame)28
-b(if)h(a)f(F)-7 b(rameSet)28 b(w)n(as)g(supplied\))h(is)427
-451 y(not)f(2-dimensional.)340 575 y Fj(\017)45 b Fk(A)21
-b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 675
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 856 3780 12 v 0 987
-a FA(AST)p Fe(_)p FA(PLOT3D)1470 988 y Fd(Create)38 b(a)g(Plot3D)2911
-987 y FA(AST)p Fe(_)p FA(PLOT3D)0 1146 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(Plot3D)g(and)h
-(optionally)f(initialises)g(its)h(attributes.)227 1266
-y(A)g(Plot3D)f(is)h(a)f(sp)r(ecialised)g(form)g(of)h(Plot)f(that)h(pro)
-n(vides)e(facilities)h(for)h(pro)r(ducing)f(3D)g(graphical)f(output.)0
-1407 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_PLOT3D\()c
-(FRAME,)i(GRAPHBOX,)f(BASEBOX,)g(OPTIONS,)h(STATUS)g(\))0
-1548 y Fc(Argumen)m(ts:)259 1675 y(FRAME)31 b(=)h(INTEGER)g(\(Giv)m
-(en\))427 1775 y Fk(P)n(oin)n(ter)h(to)h(a)g(F)-7 b(rame)34
-b(describing)g(the)h(ph)n(ysical)e(co)r(ordinate)g(system)i(in)f(whic)n
-(h)h(to)f(plot.)57 b(A)35 b(p)r(oin)n(ter)427 1874 y(to)29
-b(a)g(F)-7 b(rameSet)29 b(ma)n(y)f(also)g(b)r(e)h(giv)n(en,)g(in)g
-(whic)n(h)g(case)f(its)i(curren)n(t)e(F)-7 b(rame)28
-b(will)i(b)r(e)f(used)g(to)g(de\014ne)g(the)427 1974
-y(ph)n(ysical)i(co)r(ordinate)g(system)h(and)g(its)g(base)f(F)-7
-b(rame)31 b(will)i(b)r(e)f(mapp)r(ed)g(on)g(to)g(graphical)e(co)r
-(ordinates)427 2074 y(\(see)e(b)r(elo)n(w\).)427 2186
-y(If)h(a)g(n)n(ull)f(Ob)5 b(ject)29 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))h(is)g(giv)n(en,)f(a)g(default)h(3-dimensional)f(F)-7
-b(rame)28 b(will)h(b)r(e)g(used)427 2285 y(to)35 b(describ)r(e)f(the)h
-(ph)n(ysical)f(co)r(ordinate)f(system.)58 b(Lab)r(els,)36
-b(etc.)58 b(ma)n(y)34 b(then)h(b)r(e)g(attac)n(hed)f(to)h(this)g(b)n(y)
-427 2385 y(setting)28 b(the)g(appropriate)e(F)-7 b(rame)27
-b(attributes)g(\(e.g.)37 b(Lab)r(el\(axis\)\))27 b(for)h(the)g(Plot.)
-259 2509 y Fc(GRAPHBO)m(X\()k(6)g(\))g(=)g(REAL)f(\(Giv)m(en\))427
-2608 y Fk(An)k(arra)n(y)e(giving)h(the)h(p)r(osition)f(and)h(exten)n(t)
-f(of)h(the)g(plotting)g(v)n(olume)f(\(within)i(the)f(plotting)f(space)
-427 2708 y(of)i(the)g(underlying)f(graphics)f(system\))h(in)h(whic)n(h)
-g(graphical)d(output)k(is)e(to)g(app)r(ear.)60 b(This)36
-b(m)n(ust)f(b)r(e)427 2808 y(sp)r(eci\014ed)28 b(using)f(graphical)f
-(co)r(ordinates)h(appropriate)e(to)j(the)g(underlying)f(graphics)f
-(system.)427 2920 y(The)g(\014rst)g(triple)g(of)g(v)-5
-b(alues)26 b(should)g(giv)n(e)f(the)h(co)r(ordinates)f(of)h(the)g(b)r
-(ottom)h(left)g(corner)d(of)i(the)h(plotting)427 3019
-y(v)n(olume)i(and)g(the)h(second)e(triple)i(should)f(giv)n(e)f(the)i
-(co)r(ordinates)e(of)h(the)g(top)h(righ)n(t)e(corner.)41
-b(The)29 b(co)r(or-)427 3119 y(dinate)e(on)f(the)h(horizon)n(tal)e
-(axis)h(should)g(b)r(e)h(giv)n(en)f(\014rst)g(in)h(eac)n(h)f(pair.)35
-b(Note)27 b(that)g(the)g(order)e(in)i(whic)n(h)427 3218
-y(these)f(p)r(oin)n(ts)h(are)e(giv)n(en)g(is)h(imp)r(ortan)n(t)g(b)r
-(ecause)g(it)g(de\014nes)g(up,)h(do)n(wn,)f(left)h(and)f(righ)n(t)f
-(for)h(subsequen)n(t)427 3318 y(graphical)g(op)r(erations.)259
-3442 y Fc(BASEBO)m(X\()32 b(6)g(\))g(=)g(DOUBLE)g(PRECISION)f(\(Giv)m
-(en\))427 3542 y Fk(An)c(arra)n(y)d(giving)i(the)h(co)r(ordinates)e(of)
-i(t)n(w)n(o)e(p)r(oin)n(ts)i(in)g(the)g(supplied)g(F)-7
-b(rame)26 b(\(or)f(in)i(the)g(base)f(F)-7 b(rame)26 b(if)427
-3641 y(a)k(F)-7 b(rameSet)31 b(w)n(as)e(supplied\))i(whic)n(h)g
-(corresp)r(ond)d(to)j(the)g(b)r(ottom)f(left)i(and)e(top)g(righ)n(t)g
-(corners)f(of)h(the)427 3741 y(plotting)e(v)n(olume,)f(as)g(sp)r
-(eci\014ed)h(ab)r(o)n(v)n(e.)36 b(This)27 b(range)g(of)g(co)r
-(ordinates)g(will)g(b)r(e)i(mapp)r(ed)f(linearly)e(on)i(to)427
-3841 y(the)g(plotting)g(area.)35 b(The)28 b(co)r(ordinates)e(should)h
-(b)r(e)h(giv)n(en)f(in)h(the)g(same)f(order)f(as)h(ab)r(o)n(v)n(e.)259
-3965 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 4064 y Fk(A)g(c)n(haracter)e(string)
-h(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 4164 y(b)r(e)24
-b(used)e(for)h(initialising)f(the)h(new)g(Plot3D.)g(The)g(syn)n(tax)e
-(used)i(is)g(iden)n(tical)g(to)f(that)h(for)g(the)g(AST)p
-Ft(_)p Fk(SET)427 4264 y(routine.)37 b(If)28 b(no)f(initialisation)g
-(is)h(required,)e(a)i(blank)f(v)-5 b(alue)27 b(ma)n(y)g(b)r(e)h
-(supplied.)259 4388 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)
-h(and)g(Returned\))427 4487 y Fk(The)c(global)e(status.)0
-4640 y Fc(Returned)32 b(V)-8 b(alue:)259 4768 y(AST)p
-Ft(_)p Fc(PLOT3D)33 b(=)f(INTEGER)427 4868 y Fk(A)c(p)r(oin)n(ter)f(to)
-h(the)g(new)g(Plot3D.)0 5021 y Fc(Notes:)340 5295 y Fj(\017)45
-b Fk(The)24 b(base)f(F)-7 b(rame)23 b(of)g(the)h(returned)f(Plot3D)g
-(will)g(b)r(e)h(a)f(new)h(F)-7 b(rame)23 b(whic)n(h)g(is)g(created)g(b)
-n(y)g(this)h(function)427 5394 y(to)f(represen)n(t)f(the)i(co)r
-(ordinate)e(system)g(of)h(the)h(underlying)e(graphics)g(system)h
-(\(graphical)f(co)r(ordinates\).)427 5494 y(It)28 b(is)g(giv)n(en)f(a)g
-(F)-7 b(rame)28 b(index)f(of)h(1)f(within)i(the)f(Plot3D.)f(The)h(c)n
-(hoice)f(of)h(base)f(F)-7 b(rame)27 b(\(Base)g(attribute\))427
-5593 y(should)i(not,)h(in)g(general,)e(b)r(e)i(c)n(hanged)e(once)h(a)g
-(Plot3D)g(has)g(b)r(een)h(created)e(\(although)h(y)n(ou)g(could)g(use)
-427 5693 y(this)f(as)f(a)g(w)n(a)n(y)g(of)g(mo)n(ving)g(the)h(plotting)
-f(area)f(around)h(on)g(the)h(plotting)g(surface\).)p
-eop end
-%%Page: 294 304
-TeXDict begin 294 303 bop 0 52 a FG(294)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(If)31 b(a)f(F)-7 b(rame)30 b(is)g(supplied)g(\(via)g(the)h(FRAME)g
-(p)r(oin)n(ter\),)g(then)f(it)h(b)r(ecomes)f(the)h(curren)n(t)e(F)-7
-b(rame)30 b(of)g(the)427 451 y(new)e(Plot3D)f(and)g(is)h(giv)n(en)f(a)g
-(F)-7 b(rame)27 b(index)h(of)f(2.)340 582 y Fj(\017)45
-b Fk(If)24 b(a)e(F)-7 b(rameSet)23 b(is)f(supplied)h(\(via)g(the)g
-(FRAME)g(p)r(oin)n(ter\),)h(then)f(all)g(the)g(F)-7 b(rames)22
-b(within)i(this)f(F)-7 b(rameSet)427 682 y(b)r(ecome)37
-b(part)f(of)h(the)g(new)g(Plot3D)f(\(where)g(their)h(F)-7
-b(rame)36 b(indices)g(are)g(increased)g(b)n(y)g(1\),)j(with)e(the)427
-781 y(F)-7 b(rameSet's)27 b(curren)n(t)g(F)-7 b(rame)27
-b(b)r(ecoming)h(the)g(curren)n(t)e(F)-7 b(rame)27 b(of)h(the)g(Plot3D.)
-340 913 y Fj(\017)45 b Fk(If)33 b(a)f(n)n(ull)h(Ob)5
-b(ject)32 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fk(NULL\))h(is)f(supplied)h
-(\(via)f(the)h(FRAME)f(p)r(oin)n(ter\),)i(then)f(the)f(re-)427
-1012 y(turned)d(Plot3D)f(will)h(con)n(tain)g(t)n(w)n(o)f(F)-7
-b(rames,)28 b(b)r(oth)h(created)f(b)n(y)h(this)g(function.)41
-b(The)29 b(base)f(F)-7 b(rame)28 b(will)427 1112 y(describ)r(e)j
-(graphics)f(co)r(ordinates)f(\(as)i(ab)r(o)n(v)n(e\))f(and)h(the)g
-(curren)n(t)f(F)-7 b(rame)31 b(will)g(b)r(e)h(a)e(basic)h(F)-7
-b(rame)30 b(with)427 1212 y(no)h(attributes)h(set)f(\(this)h(will)g
-(therefore)e(giv)n(e)h(default)h(v)-5 b(alues)31 b(for)g(suc)n(h)g
-(things)g(as)g(the)g(Plot3D)g(Title)427 1311 y(and)i(the)g(Lab)r(el)f
-(on)g(eac)n(h)g(axis\).)52 b(Ph)n(ysical)31 b(co)r(ordinates)g(will)i
-(b)r(e)g(mapp)r(ed)g(linearly)e(on)i(to)f(graphical)427
-1411 y(co)r(ordinates.)340 1542 y Fj(\017)45 b Fk(An)29
-b(error)e(will)h(result)g(if)h(the)g(F)-7 b(rame)28 b(supplied)h(\(or)f
-(the)g(base)g(F)-7 b(rame)28 b(if)h(a)f(F)-7 b(rameSet)28
-b(w)n(as)g(supplied\))h(is)427 1642 y(not)f(3-dimensional.)340
-1773 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e
-(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 1873 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 2069 3780 12 v 0 2200 a FA(AST)p Fe(_)p FA(POINTLIST)341
-b Fd(Create)38 b(a)g(P)m(oin)m(tList)341 b FA(AST)p Fe(_)p
-FA(POINTLIST)0 2374 y Fc(Description:)44 b Fk(This)28
-b(function)g(creates)f(a)g(new)g(P)n(oin)n(tList)g(ob)5
-b(ject)27 b(and)h(optionally)e(initialises)i(its)g(attributes.)227
-2497 y(A)39 b(P)n(oin)n(tList)f(ob)5 b(ject)39 b(is)f(a)g(sp)r
-(ecialised)h(t)n(yp)r(e)g(of)f(Region)g(whic)n(h)h(represen)n(ts)e(a)i
-(collection)f(of)g(p)r(oin)n(ts)h(in)g(a)227 2597 y(co)r(ordinate)27
-b(F)-7 b(rame.)0 2745 y Fc(In)m(v)m(o)s(cation:)123 b
-Ft(RESULT)41 b(=)i(AST_POINTLIST\()38 b(FRAME,)j(NPNT,)g(COORD,)h(DIM,)
-f(POINTS,)g(UNC,)h(OPTIONS,)e(STATUS)227 2845 y(\))0
-2993 y Fc(Argumen)m(ts:)259 3127 y(FRAME)31 b(=)h(INTEGER)g(\(Giv)m
-(en\))427 3227 y Fk(A)d(p)r(oin)n(ter)g(to)f(the)i(F)-7
-b(rame)28 b(in)h(whic)n(h)g(the)g(region)e(is)i(de\014ned.)41
-b(A)29 b(deep)g(cop)n(y)f(is)g(tak)n(en)g(of)h(the)g(supplied)427
-3327 y(F)-7 b(rame.)71 b(This)39 b(means)f(that)h(an)n(y)g(subsequen)n
-(t)f(c)n(hanges)g(made)h(to)f(the)i(F)-7 b(rame)38 b(using)h(the)g
-(supplied)427 3426 y(p)r(oin)n(ter)27 b(will)h(ha)n(v)n(e)f(no)g
-(e\013ect)h(the)g(Region.)259 3558 y Fc(NPNT)k(=)g(INTEGER)f(\(Giv)m
-(en\))427 3657 y Fk(The)d(n)n(um)n(b)r(er)f(of)h(p)r(oin)n(ts)f(in)h
-(the)g(Region.)259 3789 y Fc(NCOORD)j(=)h(INTEGER)f(\(Giv)m(en\))427
-3888 y Fk(The)j(n)n(um)n(b)r(er)g(of)g(co)r(ordinates)f(b)r(eing)h
-(supplied)g(for)f(eac)n(h)h(p)r(oin)n(t.)56 b(This)34
-b(m)n(ust)g(equal)g(the)g(n)n(um)n(b)r(er)g(of)427 3988
-y(axes)27 b(in)h(the)g(supplied)g(F)-7 b(rame,)27 b(giv)n(en)g(b)n(y)g
-(its)h(Naxes)f(attribute.)259 4119 y Fc(DIM)32 b(=)g(INTEGER)f(\(Giv)m
-(en\))427 4219 y Fk(The)d(n)n(um)n(b)r(er)g(of)g(elemen)n(ts)g(along)e
-(the)j(\014rst)e(dimension)h(of)g(the)g(POINTS)g(arra)n(y)d(\(whic)n(h)
-j(con)n(tains)f(the)427 4319 y(p)r(oin)n(t)38 b(co)r(ordinates\).)67
-b(This)38 b(v)-5 b(alue)38 b(is)f(required)g(so)h(that)g(the)g(co)r
-(ordinate)f(v)-5 b(alues)37 b(can)h(b)r(e)g(correctly)427
-4418 y(lo)r(cated)26 b(if)h(they)f(do)g(not)g(en)n(tirely)g(\014ll)g
-(this)h(arra)n(y)-7 b(.)34 b(The)26 b(v)-5 b(alue)26
-b(giv)n(en)g(should)g(not)g(b)r(e)g(less)g(than)g(NPNT.)259
-4550 y Fc(POINTS\()32 b(DIM,)g(NCOORD)f(\))h(=)g(DOUBLE)g(PRECISION)f
-(\(Giv)m(en\))427 4649 y Fk(A)e(2-dimensional)e(arra)n(y)f(giving)h
-(the)i(ph)n(ysical)f(co)r(ordinates)f(of)h(the)h(p)r(oin)n(ts.)39
-b(These)28 b(should)g(b)r(e)g(stored)427 4749 y(suc)n(h)23
-b(that)h(the)g(v)-5 b(alue)23 b(of)g(co)r(ordinate)f(n)n(um)n(b)r(er)h
-(COORD)g(for)g(p)r(oin)n(t)h(n)n(um)n(b)r(er)f(PNT)g(is)g(found)h(in)f
-(elemen)n(t)427 4848 y(IN\(PNT,COORD\).)259 4980 y Fc(UNC)32
-b(=)g(INTEGER)f(\(Giv)m(en\))427 5079 y Fk(An)i(optional)e(p)r(oin)n
-(ter)h(to)g(an)g(existing)g(Region)f(whic)n(h)h(sp)r(eci\014es)g(the)h
-(uncertain)n(ties)e(asso)r(ciated)g(with)427 5179 y(eac)n(h)36
-b(p)r(oin)n(t)g(in)h(the)f(P)n(oin)n(tList)f(b)r(eing)i(created.)62
-b(The)36 b(uncertain)n(t)n(y)g(at)g(an)n(y)f(p)r(oin)n(t)i(in)f(the)h
-(P)n(oin)n(tList)427 5279 y(is)i(found)g(b)n(y)g(shifting)h(the)f
-(supplied)g Ft(")p Fk(uncertain)n(t)n(y)p Ft(")e Fk(Region)i(so)f(that)
-h(it)h(is)f(cen)n(tred)f(at)h(the)g(p)r(oin)n(t)427 5378
-y(b)r(eing)c(considered.)57 b(The)35 b(area)e(co)n(v)n(ered)g(b)n(y)h
-(the)h(shifted)g(uncertain)n(t)n(y)f(Region)g(then)h(represen)n(ts)e
-(the)427 5478 y(uncertain)n(t)n(y)27 b(in)h(the)g(p)r(osition.)37
-b(The)27 b(uncertain)n(t)n(y)g(is)g(assumed)g(to)h(b)r(e)g(the)g(same)f
-(for)g(all)g(p)r(oin)n(ts.)427 5593 y(If)38 b(supplied,)j(the)d
-(uncertain)n(t)n(y)f(Region)g(m)n(ust)g(b)r(e)i(of)e(a)g(class)g(for)g
-(whic)n(h)h(all)f(instances)g(are)g(cen)n(tro-)427 5693
-y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24 b(Circle,)g(Ellipse,)h(etc.\))36
-b(or)23 b(b)r(e)i(a)e(Prism)h(con)n(taining)f(cen)n(tro-symetric)f
-(comp)r(onen)n(t)p eop end
-%%Page: 295 305
-TeXDict begin 295 304 bop 3643 52 a FG(295)427 351 y
-Fk(Regions.)57 b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f
-(will)g(b)r(e)h(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)
-427 451 y(uncertain)n(t)n(y)g(Region)g(using)g(the)h(supplied)g(p)r
-(oin)n(ter)g(will)f(ha)n(v)n(e)g(no)g(e\013ect)h(on)g(the)g(created)f
-(Bo)n(x.)57 b(Al-)427 551 y(ternativ)n(ely)-7 b(,)34
-b(a)f(n)n(ull)g(Ob)5 b(ject)33 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fk(NULL\))g(ma)n(y)f(b)r(e)i(supplied,)h(in)e(whic)n(h)g(case)f
-(a)h(default)427 650 y(uncertain)n(t)n(y)23 b(is)g(used)g(equiv)-5
-b(alen)n(t)23 b(to)g(a)f(b)r(o)n(x)h(1.0E-6)e(of)i(the)h(size)e(of)i
-(the)f(b)r(ounding)g(b)r(o)n(x)g(of)g(the)h(P)n(oin)n(tList)427
-750 y(b)r(eing)k(created.)427 866 y(The)h(uncertain)n(t)n(y)f(Region)g
-(has)h(t)n(w)n(o)f(uses:)39 b(1\))29 b(when)g(the)g(AST)p
-Ft(_)p Fk(O)n(VERLAP)f(function)h(compares)e(t)n(w)n(o)427
-966 y(Regions)j(for)g(equalit)n(y)g(the)h(uncertain)n(t)n(y)f(Region)g
-(is)g(used)h(to)g(determine)f(the)h(tolerance)f(on)g(the)h(com-)427
-1065 y(parison,)23 b(and)g(2\))g(when)g(a)f(Region)h(is)g(mapp)r(ed)g
-(in)n(to)g(a)f(di\013eren)n(t)i(co)r(ordinate)d(system)i(and)g
-(subsequen)n(tly)427 1165 y(simpli\014ed)e(\(using)f(AST)p
-Ft(_)p Fk(SIMPLIFY\),)h(the)f(uncertain)n(ties)g(are)f(used)h(to)g
-(determine)g(if)h(the)g(transformed)427 1264 y(b)r(oundary)27
-b(can)g(b)r(e)h(accurately)f(represen)n(ted)f(b)n(y)h(a)g(sp)r
-(eci\014c)h(shap)r(e)g(of)f(Region.)259 1397 y Fc(OPTIONS)32
-b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))
-427 1497 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h
-(optional)f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f
-(to)g(b)r(e)427 1596 y(used)j(for)g(initialising)g(the)h(new)f(P)n(oin)
-n(tList.)35 b(The)24 b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)g
-(that)h(for)e(the)i(AST)p Ft(_)p Fk(SET)427 1696 y(routine.)259
-1829 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 1928 y Fk(The)c(global)e(status.)0 2090
-y Fc(Returned)32 b(V)-8 b(alue:)259 2226 y(AST)p Ft(_)p
-Fc(POINTLIST)34 b(=)e(INTEGER)427 2326 y Fk(A)c(p)r(oin)n(ter)f(to)h
-(the)g(new)g(P)n(oin)n(tList.)0 2487 y Fc(Notes:)340
-2770 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e
-(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 2869 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)-2
-3031 y Fc(Status)33 b(Handling)n(:)227 3177 y Fk(The)d(protected)g(in)n
-(terface)f(to)g(this)h(function)h(includes)f(an)f(extra)g(parameter)f
-(at)i(the)g(end)g(of)g(the)g(parameter)227 3277 y(list)37
-b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)
-r(oin)n(ter)g(to)h(the)g(in)n(teger)e(inherited)i(status)f(v)-5
-b(ariable:)54 b Ft(")p Fk(in)n(t)227 3376 y Fj(\003)p
-Fk(status)p Ft(")p Fk(.)p 0 3575 3780 12 v 0 3706 a FA(AST)p
-Fe(_)p FA(POL)-11 b(YCUR)c(VE)1480 3707 y Fd(Dra)m(w)38
-b(a)h(series)f(of)1407 3807 y(connected)g(geo)s(desic)1730
-3906 y(curv)m(es)2608 3706 y FA(AST)p Fe(_)p FA(POL)-11
-b(YCUR)c(VE)0 4072 y Fc(Description:)44 b Fk(This)22
-b(routine)g(joins)g(a)f(series)g(of)h(p)r(oin)n(ts)g(sp)r(eci\014ed)g
-(in)g(the)h(ph)n(ysical)e(co)r(ordinate)f(system)i(of)g(a)g(Plot)f(b)n
-(y)227 4171 y(dra)n(wing)d(a)h(sequence)g(of)g(geo)r(desic)f(curv)n
-(es.)33 b(It)20 b(is)f(equiv)-5 b(alen)n(t)19 b(to)g(making)f(rep)r
-(eated)h(calls)g(to)g(the)h(AST)p Ft(_)p Fk(CUR)-9 b(VE)227
-4271 y(routine)23 b(\(q.v.\),)h(except)g(that)f(AST)p
-Ft(_)p Fk(POL)-7 b(YCUR)e(VE)22 b(will)i(generally)d(b)r(e)j(more)e
-(e\016cien)n(t)h(when)h(dra)n(wing)d(man)n(y)227 4370
-y(geo)r(desic)27 b(curv)n(es)f(end-to-end.)37 b(A)28
-b(t)n(ypical)f(application)g(of)g(this)h(migh)n(t)g(b)r(e)g(in)g(dra)n
-(wing)e(con)n(tour)g(lines.)227 4495 y(As)i(with)f(AST)p
-Ft(_)p Fk(CUR)-9 b(VE,)27 b(full)h(accoun)n(t)f(is)g(tak)n(en)f(of)i
-(the)f(Mapping)g(b)r(et)n(w)n(een)g(ph)n(ysical)f(and)i(graphical)d(co)
-r(or-)227 4594 y(dinate)j(systems.)36 b(This)28 b(includes)g(an)n(y)e
-(discon)n(tin)n(uities)i(and)f(clipping)h(established)f(using)g(AST)p
-Ft(_)p Fk(CLIP)-7 b(.)0 4744 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_POLYCURVE\()37 b(THIS,)42 b(NPOINT,)f(NCOORD,)f
-(INDIM,)h(IN,)i(STATUS)e(\))0 4893 y Fc(Argumen)m(ts:)259
-5029 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 5129
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259 5261 y Fc(NPOINT)k(=)g
-(INTEGER)f(\(Giv)m(en\))427 5361 y Fk(The)d(n)n(um)n(b)r(er)f(of)h(p)r
-(oin)n(ts)f(b)r(et)n(w)n(een)h(whic)n(h)f(geo)r(desic)g(curv)n(es)f
-(are)h(to)h(b)r(e)g(dra)n(wn.)259 5494 y Fc(NCOORD)j(=)h(INTEGER)f
-(\(Giv)m(en\))427 5593 y Fk(The)37 b(n)n(um)n(b)r(er)f(of)h(co)r
-(ordinates)e(b)r(eing)h(supplied)h(for)f(eac)n(h)g(p)r(oin)n(t)g
-(\(i.e.)64 b(the)37 b(n)n(um)n(b)r(er)f(of)h(axes)e(in)i(the)427
-5693 y(curren)n(t)27 b(F)-7 b(rame)27 b(of)h(the)g(Plot,)f(as)g(giv)n
-(en)f(b)n(y)i(its)f(Naxes)g(attribute\).)p eop end
-%%Page: 296 306
-TeXDict begin 296 305 bop 0 52 a FG(296)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(INDIM)h(=)g(INTEGER)f
-(\(Giv)m(en\))427 451 y Fk(The)e(n)n(um)n(b)r(er)f(of)g(elemen)n(ts)g
-(along)f(the)i(\014rst)f(dimension)g(of)g(the)h(IN)f(arra)n(y)e(\(whic)
-n(h)j(con)n(tains)e(the)i(input)427 551 y(co)r(ordinates\).)37
-b(This)28 b(v)-5 b(alue)28 b(is)g(required)f(so)h(that)g(the)g(co)r
-(ordinate)f(v)-5 b(alues)28 b(can)f(b)r(e)i(correctly)d(lo)r(cated)i
-(if)427 650 y(they)g(do)f(not)h(en)n(tirely)f(\014ll)h(this)g(arra)n(y)
--7 b(.)34 b(The)28 b(v)-5 b(alue)28 b(giv)n(en)e(should)i(not)f(b)r(e)h
-(less)f(than)h(NPOINT.)259 792 y Fc(IN\()k(INDIM,)f(NCOORD)g(\))h(=)g
-(DOUBLE)g(PRECISION)g(\(Giv)m(en\))427 892 y Fk(A)h(2-dimensional)f
-(arra)n(y)e(giving)i(the)h(ph)n(ysical)f(co)r(ordinates)g(of)g(the)h(p)
-r(oin)n(ts)g(whic)n(h)g(are)f(to)g(b)r(e)h(joined)427
-992 y(in)i(sequence)g(b)n(y)g(geo)r(desic)e(curv)n(es.)58
-b(These)35 b(should)g(b)r(e)g(stored)f(suc)n(h)h(that)g(the)g(v)-5
-b(alue)35 b(of)g(co)r(ordinate)427 1091 y(n)n(um)n(b)r(er)28
-b(COORD)f(for)g(input)h(p)r(oin)n(t)g(n)n(um)n(b)r(er)g(POINT)e(is)i
-(found)g(in)g(elemen)n(t)f(IN\(POINT,COORD\).)259 1233
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 1333 y Fk(The)c(global)e(status.)0 1514 y Fc(Notes:)340
-1815 y Fj(\017)45 b Fk(No)32 b(curv)n(e)f(is)i(dra)n(wn)e(on)h(either)g
-(side)g(of)g(an)n(y)f(p)r(oin)n(t)h(whic)n(h)h(has)e(an)n(y)h(co)r
-(ordinate)f(equal)g(to)h(the)h(v)-5 b(alue)427 1915 y(AST)p
-Ft(__)p Fk(BAD.)340 2057 y Fj(\017)45 b Fk(An)28 b(error)e(results)h
-(if)h(the)g(base)f(F)-7 b(rame)27 b(of)h(the)g(Plot)f(is)g(not)h
-(2-dimensional.)340 2199 y Fj(\017)45 b Fk(An)30 b(error)d(also)g
-(results)i(if)g(the)g(transformation)f(b)r(et)n(w)n(een)h(the)g(curren)
-n(t)f(and)h(base)f(F)-7 b(rames)28 b(of)h(the)g(Plot)427
-2299 y(is)f(not)f(de\014ned)h(\(i.e.)38 b(the)28 b(Plot's)e(T)-7
-b(ranIn)n(v)n(erse)26 b(attribute)h(is)h(zero\).)p 0
-2517 3780 12 v 0 2647 a FA(AST)p Fe(_)p FA(POL)-11 b(YGON)1447
-2648 y Fd(Create)37 b(a)h(P)m(olygon)2772 2647 y FA(AST)p
-Fe(_)p FA(POL)-11 b(YGON)0 2856 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(P)n(olygon)f(ob)5
-b(ject)27 b(and)h(optionally)e(initialises)i(its)f(attributes.)227
-2990 y(The)36 b(P)n(olygon)d(class)i(implemen)n(ts)g(a)g(p)r(olygonal)f
-(area,)i(de\014ned)g(b)n(y)f(a)h(collection)e(of)i(v)n(ertices,)g
-(within)g(a)f(2-)227 3089 y(dimensional)20 b(F)-7 b(rame.)34
-b(The)21 b(v)n(ertices)e(are)h(connected)g(together)g(b)n(y)g(geo)r
-(desic)g(curv)n(es)f(within)i(the)g(encapsulated)227
-3189 y(F)-7 b(rame.)34 b(F)-7 b(or)20 b(instance,)i(if)f(the)g
-(encapsulated)f(F)-7 b(rame)21 b(is)f(a)g(simple)h(F)-7
-b(rame)20 b(then)h(the)g(geo)r(desics)f(will)h(b)r(e)g(straigh)n(t)227
-3289 y(lines,)33 b(but)f(if)g(the)g(F)-7 b(rame)31 b(is)h(a)f(SkyF)-7
-b(rame)31 b(then)h(the)g(geo)r(desics)e(will)i(b)r(e)g(great)e
-(circles.)48 b(Note,)33 b(the)f(v)n(ertices)227 3388
-y(m)n(ust)d(b)r(e)g(supplied)g(in)g(an)f(order)f(suc)n(h)i(that)g(the)g
-(inside)f(of)h(the)g(p)r(olygon)f(is)g(to)h(the)g(left)g(of)f(the)h(b)r
-(oundary)f(as)227 3488 y(the)f(v)n(ertices)e(are)h(tra)n(v)n(ersed.)34
-b(Supplying)26 b(them)h(in)g(the)g(rev)n(erse)d(order)h(will)i
-(e\013ectiv)n(ely)f(negate)g(the)h(p)r(olygon.)227 3622
-y(Within)33 b(a)e(SkyF)-7 b(rame,)32 b(neigh)n(b)r(ouring)e(v)n
-(ertices)g(are)h(alw)n(a)n(ys)e(joined)j(using)f(the)h(shortest)e
-(path.)49 b(Th)n(us)31 b(if)h(an)227 3722 y(edge)f(of)g(180)f(degrees)g
-(or)g(more)g(in)i(length)f(is)g(required,)g(it)h(should)e(b)r(e)i
-(split)g(in)n(to)e(section)h(eac)n(h)g(of)g(whic)n(h)g(is)227
-3821 y(less)k(than)h(180)e(degrees.)59 b(The)35 b(closed)g(path)g
-(joining)g(all)h(the)f(v)n(ertices)g(in)g(order)f(will)i(divide)f(the)h
-(celestial)227 3921 y(sphere)f(in)n(to)h(t)n(w)n(o)f(disjoin)n(t)h
-(regions.)60 b(The)36 b(inside)g(of)g(the)g(p)r(olygon)f(is)g(the)h
-(region)f(whic)n(h)h(is)f(circled)h(in)g(an)227 4020
-y(an)n(ti-clo)r(c)n(kwise)25 b(manner)h(\(when)i(view)n(ed)e(from)g
-(the)h(inside)g(of)g(the)g(celestial)f(sphere\))h(when)g(mo)n(ving)e
-(through)227 4120 y(the)h(list)f(of)g(v)n(ertices)f(in)i(the)f(order)f
-(in)h(whic)n(h)g(they)h(w)n(ere)e(supplied)h(when)h(the)f(P)n(olygon)e
-(w)n(as)h(created)h(\(i.e.)36 b(the)227 4220 y(inside)28
-b(is)f(to)h(the)g(left)g(of)g(the)g(b)r(oundary)f(when)g(mo)n(ving)g
-(through)g(the)h(v)n(ertices)e(in)i(the)g(order)e(supplied\).)0
-4388 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_POLYGON\()c
-(FRAME,)i(NPNT,)g(DIM,)h(POINTS,)f(UNC,)h(OPTIONS,)e(STATUS)h(\))0
-4556 y Fc(Argumen)m(ts:)259 4711 y(FRAME)31 b(=)h(INTEGER)g(\(Giv)m
-(en\))427 4811 y Fk(A)e(p)r(oin)n(ter)f(to)g(the)g(F)-7
-b(rame)29 b(in)g(whic)n(h)g(the)h(region)e(is)h(de\014ned.)42
-b(It)30 b(m)n(ust)f(ha)n(v)n(e)f(exactly)g(2)h(axes.)41
-b(A)29 b(deep)427 4910 y(cop)n(y)h(is)g(tak)n(en)f(of)i(the)f(supplied)
-h(F)-7 b(rame.)44 b(This)30 b(means)g(that)h(an)n(y)e(subsequen)n(t)h
-(c)n(hanges)f(made)h(to)g(the)427 5010 y(F)-7 b(rame)27
-b(using)h(the)g(supplied)f(p)r(oin)n(ter)h(will)g(ha)n(v)n(e)e(no)h
-(e\013ect)h(the)g(Region.)259 5152 y Fc(NPNT)k(=)g(INTEGER)f(\(Giv)m
-(en\))427 5252 y Fk(The)d(n)n(um)n(b)r(er)f(of)h(p)r(oin)n(ts)f(in)h
-(the)g(Region.)259 5394 y Fc(DIM)k(=)g(INTEGER)f(\(Giv)m(en\))427
-5494 y Fk(The)d(n)n(um)n(b)r(er)g(of)g(elemen)n(ts)g(along)e(the)j
-(\014rst)e(dimension)h(of)g(the)g(POINTS)g(arra)n(y)d(\(whic)n(h)j(con)
-n(tains)f(the)427 5593 y(p)r(oin)n(t)38 b(co)r(ordinates\).)67
-b(This)38 b(v)-5 b(alue)38 b(is)f(required)g(so)h(that)g(the)g(co)r
-(ordinate)f(v)-5 b(alues)37 b(can)h(b)r(e)g(correctly)427
-5693 y(lo)r(cated)26 b(if)h(they)f(do)g(not)g(en)n(tirely)g(\014ll)g
-(this)h(arra)n(y)-7 b(.)34 b(The)26 b(v)-5 b(alue)26
-b(giv)n(en)g(should)g(not)g(b)r(e)g(less)g(than)g(NPNT.)p
-eop end
-%%Page: 297 307
-TeXDict begin 297 306 bop 3643 52 a FG(297)259 351 y
-Fc(POINTS\()32 b(DIM,)g(2)f(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en\))
-427 451 y Fk(A)25 b(2-dimensional)e(arra)n(y)f(giving)i(the)g(ph)n
-(ysical)g(co)r(ordinates)f(of)h(the)h(v)n(ertices.)34
-b(These)25 b(should)f(b)r(e)g(stored)427 551 y(suc)n(h)f(that)h(the)g
-(v)-5 b(alue)23 b(of)g(co)r(ordinate)f(n)n(um)n(b)r(er)h(COORD)g(for)g
-(p)r(oin)n(t)h(n)n(um)n(b)r(er)f(PNT)g(is)g(found)h(in)f(elemen)n(t)427
-650 y(IN\(PNT,COORD\).)259 790 y Fc(UNC)32 b(=)g(INTEGER)f(\(Giv)m
-(en\))427 889 y Fk(An)i(optional)e(p)r(oin)n(ter)h(to)g(an)g(existing)g
-(Region)f(whic)n(h)h(sp)r(eci\014es)g(the)h(uncertain)n(ties)e(asso)r
-(ciated)g(with)427 989 y(the)j(b)r(oundary)f(of)g(the)h(Bo)n(x)f(b)r
-(eing)g(created.)54 b(The)34 b(uncertain)n(t)n(y)e(in)i(an)n(y)f(p)r
-(oin)n(t)h(on)f(the)h(b)r(oundary)f(of)427 1089 y(the)g(Bo)n(x)e(is)h
-(found)h(b)n(y)f(shifting)h(the)f(supplied)h Ft(")p Fk(uncertain)n(t)n
-(y)p Ft(")e Fk(Region)g(so)h(that)g(it)h(is)f(cen)n(tred)g(at)g(the)427
-1188 y(b)r(oundary)e(p)r(oin)n(t)h(b)r(eing)g(considered.)44
-b(The)31 b(area)e(co)n(v)n(ered)g(b)n(y)h(the)h(shifted)g(uncertain)n
-(t)n(y)f(Region)g(then)427 1288 y(represen)n(ts)g(the)i(uncertain)n(t)n
-(y)f(in)g(the)h(b)r(oundary)f(p)r(osition.)48 b(The)31
-b(uncertain)n(t)n(y)g(is)g(assumed)g(to)g(b)r(e)h(the)427
-1387 y(same)27 b(for)g(all)h(p)r(oin)n(ts.)427 1507 y(If)38
-b(supplied,)j(the)d(uncertain)n(t)n(y)f(Region)g(m)n(ust)g(b)r(e)i(of)e
-(a)g(class)g(for)g(whic)n(h)h(all)f(instances)g(are)g(cen)n(tro-)427
-1607 y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24 b(Circle,)g(Ellipse,)h
-(etc.\))36 b(or)23 b(b)r(e)i(a)e(Prism)h(con)n(taining)f(cen)n
-(tro-symetric)f(comp)r(onen)n(t)427 1706 y(Regions.)57
-b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f(will)g(b)r(e)h
-(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)427
-1806 y(uncertain)n(t)n(y)g(Region)g(using)g(the)h(supplied)g(p)r(oin)n
-(ter)g(will)f(ha)n(v)n(e)g(no)g(e\013ect)h(on)g(the)g(created)f(Bo)n
-(x.)57 b(Al-)427 1905 y(ternativ)n(ely)-7 b(,)34 b(a)f(n)n(ull)g(Ob)5
-b(ject)33 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fk(NULL\))g(ma)n(y)f(b)r(e)
-i(supplied,)h(in)e(whic)n(h)g(case)f(a)h(default)427
-2005 y(uncertain)n(t)n(y)27 b(is)g(used)h(equiv)-5 b(alen)n(t)27
-b(to)h(a)f(b)r(o)n(x)g(1.0E-6)f(of)h(the)h(size)f(of)h(the)g(Bo)n(x)e
-(b)r(eing)i(created.)427 2125 y(The)h(uncertain)n(t)n(y)f(Region)g(has)
-h(t)n(w)n(o)f(uses:)39 b(1\))29 b(when)g(the)g(AST)p
-Ft(_)p Fk(O)n(VERLAP)f(function)h(compares)e(t)n(w)n(o)427
-2224 y(Regions)j(for)g(equalit)n(y)g(the)h(uncertain)n(t)n(y)f(Region)g
-(is)g(used)h(to)g(determine)f(the)h(tolerance)f(on)g(the)h(com-)427
-2324 y(parison,)23 b(and)g(2\))g(when)g(a)f(Region)h(is)g(mapp)r(ed)g
-(in)n(to)g(a)f(di\013eren)n(t)i(co)r(ordinate)d(system)i(and)g
-(subsequen)n(tly)427 2424 y(simpli\014ed)e(\(using)f(AST)p
-Ft(_)p Fk(SIMPLIFY\),)h(the)f(uncertain)n(ties)g(are)f(used)h(to)g
-(determine)g(if)h(the)g(transformed)427 2523 y(b)r(oundary)27
-b(can)g(b)r(e)h(accurately)f(represen)n(ted)f(b)n(y)h(a)g(sp)r
-(eci\014c)h(shap)r(e)g(of)f(Region.)259 2663 y Fc(OPTIONS)32
-b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))
-427 2762 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h
-(optional)f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f
-(to)g(b)r(e)427 2862 y(used)27 b(for)g(initialising)g(the)h(new)f(P)n
-(olygon.)34 b(The)28 b(syn)n(tax)e(used)h(is)g(iden)n(tical)g(to)g
-(that)h(for)e(the)i(AST)p Ft(_)p Fk(SET)427 2962 y(routine.)259
-3101 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 3201 y Fk(The)c(global)e(status.)0 3376
-y Fc(Returned)32 b(V)-8 b(alue:)259 3526 y(AST)p Ft(_)p
-Fc(POL)g(YGON)32 b(=)g(INTEGER)427 3625 y Fk(A)c(p)r(oin)n(ter)f(to)h
-(the)g(new)g(P)n(olygon.)0 3800 y Fc(Notes:)340 4096
-y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f
-(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427
-4196 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g
-(should)f(fail)h(for)f(an)n(y)g(reason.)-2 4371 y Fc(Status)33
-b(Handling)n(:)227 4517 y Fk(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 4617 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fk(in)n(t)227 4717 y Fj(\003)p Fk(status)p Ft(")p Fk(.)p
-0 4929 3780 12 v 0 5060 a FA(AST)p Fe(_)p FA(POL)-11
-b(YMAP)1422 5061 y Fd(Create)38 b(a)g(P)m(olyMap)2763
-5060 y FA(AST)p Fe(_)p FA(POL)-11 b(YMAP)0 5263 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(P)n(olyMap)f(and)i
-(optionally)f(initialises)g(its)h(attributes.)227 5394
-y(A)40 b(P)n(olyMap)d(is)i(a)f(form)h(of)g(Mapping)g(whic)n(h)g(p)r
-(erforms)f(a)g(general)g(p)r(olynomial)g(transformation.)70
-b(Eac)n(h)227 5494 y(output)29 b(co)r(ordinate)d(is)i(a)g(p)r
-(olynomial)f(function)i(of)e(all)h(the)g(input)h(co)r(ordinates.)36
-b(The)28 b(co)r(e\016cien)n(ts)g(are)f(sp)r(ec-)227 5593
-y(i\014ed)k(separately)e(for)h(eac)n(h)g(output)i(co)r(ordinate.)44
-b(The)31 b(forw)n(ard)e(and)i(in)n(v)n(erse)e(transformations)g(are)g
-(de\014ned)227 5693 y(indep)r(endan)n(tly)f(b)n(y)g(separate)e(sets)h
-(of)h(co)r(e\016cien)n(ts.)p eop end
-%%Page: 298 308
-TeXDict begin 298 307 bop 0 52 a FG(298)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(In)m(v)m(o)s(cation:)
-123 b Ft(RESULT)41 b(=)i(AST_POLYMAP\()c(NIN,)j(NOUT,)f(NCOEFF_F,)f
-(COEFF_F,)g(NCOEFF_I,)g(COEFF_I,)g(OPTIONS,)227 451 y(STATUS)h(\))0
-600 y Fc(Argumen)m(ts:)259 736 y(NIN)32 b(=)g(INTEGER)f(\(Giv)m(en\))
-427 836 y Fk(The)d(n)n(um)n(b)r(er)f(of)h(input)g(co)r(ordinates.)259
-969 y Fc(NOUT)k(=)g(INTEGER)g(\(Giv)m(en\))427 1068 y
-Fk(The)c(n)n(um)n(b)r(er)f(of)h(output)g(co)r(ordinates.)259
-1201 y Fc(NCOEFF)p Ft(_)p Fc(F)j(=)h(INTEGER)f(\(Giv)m(en\))427
-1300 y Fk(The)36 b(n)n(um)n(b)r(er)f(of)h(non-zero)d(co)r(e\016cien)n
-(ts)i(necessary)f(to)i(de\014ne)f(the)h(forw)n(ard)e(transformation)g
-(of)h(the)427 1400 y(P)n(olyMap.)h(If)28 b(zero)e(is)i(supplied,)g(the)
-g(forw)n(ard)d(transformation)h(will)i(b)r(e)g(unde\014ned.)259
-1533 y Fc(COEFF)p Ft(_)p Fc(F\()j Fj(\003)h Fc(\))g(=)g(DOUBLE)g
-(PRECISION)f(\(Giv)m(en\))427 1632 y Fk(An)22 b(arra)n(y)d(con)n
-(taining)h Ft(")p Fk(NCOEFF)p Ft(_)p Fk(F)p Fj(\003)p
-Fk(\()h(2)g(+)g(NIN)g(\))p Ft(")h Fk(elemen)n(ts.)34
-b(Eac)n(h)21 b(group)f(of)h Ft(")p Fk(2)g(+)g(NIN)p Ft(")g
-Fk(adjacen)n(t)427 1732 y(elemen)n(ts)26 b(describ)r(e)f(a)f(single)h
-(co)r(e\016cien)n(t)h(of)f(the)h(forw)n(ard)d(transformation.)35
-b(Within)26 b(eac)n(h)f(suc)n(h)g(group,)427 1831 y(the)g(\014rst)g
-(elemen)n(t)g(is)f(the)h(co)r(e\016cien)n(t)g(v)-5 b(alue;)25
-b(the)h(next)e(elemen)n(t)h(is)g(the)g(in)n(teger)f(index)g(of)h(the)g
-(P)n(olyMap)427 1931 y(output)33 b(whic)n(h)f(uses)f(the)h(co)r
-(e\016cien)n(t)g(within)h(its)f(de\014ning)g(p)r(olynomial)f(\(the)i
-(\014rst)f(output)g(has)g(index)427 2031 y(1\);)48 b(the)41
-b(remaining)f(elemen)n(ts)h(of)g(the)g(group)f(giv)n(e)g(the)h(in)n
-(teger)f(p)r(o)n(w)n(ers)g(to)g(use)h(with)h(eac)n(h)e(input)427
-2130 y(co)r(ordinate)27 b(v)-5 b(alue)27 b(\(p)r(o)n(w)n(ers)g(m)n(ust)
-h(not)f(b)r(e)h(negativ)n(e,)f(and)h(\015oating)f(p)r(oin)n(t)g(v)-5
-b(alues)28 b(are)e(rounded)i(to)f(the)427 2230 y(nearest)g(in)n
-(teger\).)427 2346 y(F)-7 b(or)24 b(instance,)h(if)g(the)f(P)n(olyMap)f
-(has)h(3)g(inputs)h(and)f(2)g(outputs,)h(eac)n(h)f(group)f(consisting)g
-(of)i(5)f(elemen)n(ts,)427 2446 y(A)i(groups)e(suc)n(h)h(as)f
-Ft(")p Fk(\(1.2,)h(2.0,)g(1.0,)g(3.0,)g(0.0\))p Ft(")f
-Fk(describ)r(es)g(a)h(co)r(e\016cien)n(t)g(with)h(v)-5
-b(alue)25 b(1.2)f(whic)n(h)i(is)f(used)427 2545 y(within)36
-b(the)f(de\014nition)h(of)e(output)i(2.)59 b(The)35 b(output)g(v)-5
-b(alue)35 b(is)g(incremen)n(ted)f(b)n(y)h(the)g(pro)r(duct)g(of)g(the)
-427 2645 y(co)r(e\016cien)n(t)25 b(v)-5 b(alue,)25 b(the)g(v)-5
-b(alue)24 b(of)h(input)g(co)r(ordinate)e(1)i(raised)e(to)h(the)h(p)r(o)
-n(w)n(er)f(1,)h(and)f(the)h(v)-5 b(alue)24 b(of)h(input)427
-2745 y(co)r(ordinate)g(2)g(raised)f(to)i(the)g(p)r(o)n(w)n(er)e(3.)36
-b(Input)26 b(co)r(ordinate)f(3)g(is)g(not)h(used)f(since)h(its)g(p)r(o)
-n(w)n(er)e(is)h(sp)r(eci\014ed)427 2844 y(as)i(zero.)36
-b(As)27 b(another)f(example,)h(the)h(group)e Ft(")p Fk(\(-1.0,)g(1.0,)h
-(0.0,)g(0.0,)f(0.0)h(\))p Ft(")g Fk(describ)r(es)g(adds)f(a)h(constan)n
-(t)427 2944 y(v)-5 b(alue)30 b(-1.0)e(on)n(to)g(output)i(1)f(\(it)i(is)
-e(a)g(constan)n(t)g(v)-5 b(alue)29 b(since)g(the)h(p)r(o)n(w)n(er)e
-(for)h(ev)n(ery)f(input)i(axis)f(is)g(giv)n(en)427 3043
-y(as)e(zero\).)427 3160 y(Eac)n(h)i(\014nal)h(output)g(co)r(ordinate)f
-(v)-5 b(alue)30 b(is)g(the)g(sum)g(of)g(the)g Ft(")p
-Fk(NCOEFF)p Ft(_)p Fk(F)p Ft(")f Fk(terms)h(describ)r(ed)g(b)n(y)f(the)
-427 3259 y Ft(")p Fk(NCOEFF)p Ft(_)p Fk(F)p Ft(")e Fk(groups)f(within)i
-(the)g(supplied)g(arra)n(y)-7 b(.)259 3392 y Fc(NCOEFF)p
-Ft(_)p Fc(I)31 b(=)h(INTEGER)f(\(Giv)m(en\))427 3491
-y Fk(The)38 b(n)n(um)n(b)r(er)g(of)g(non-zero)e(co)r(e\016cien)n(ts)i
-(necessary)e(to)i(de\014ne)g(the)g(in)n(v)n(erse)f(transformation)f(of)
-i(the)427 3591 y(P)n(olyMap.)e(If)28 b(zero)e(is)i(supplied,)g(the)g
-(in)n(v)n(erse)e(transformation)g(will)h(b)r(e)h(unde\014ned.)259
-3724 y Fc(COEFF)p Ft(_)p Fc(I\()j Fj(\003)h Fc(\))g(=)g(DOUBLE)g
-(PRECISION)f(\(Giv)m(en\))427 3823 y Fk(An)i(arra)n(y)d(con)n(taining)i
-Ft(")p Fk(NCOEFF)p Ft(_)p Fk(I)p Fj(\003)p Fk(\()f(2)h(+)g(NOUT)h(\))p
-Ft(")f Fk(elemen)n(ts.)51 b(Eac)n(h)31 b(group)h(of)g
-Ft(")p Fk(2)g(+)g(NOUT)p Ft(")427 3923 y Fk(adjacen)n(t)e(elemen)n(ts)g
-(describ)r(e)f(a)h(single)f(co)r(e\016cien)n(t)h(of)g(the)h(in)n(v)n
-(erse)d(transformation,)h(using)h(the)g(same)427 4023
-y(sc)n(hame)d(as)g Ft(")p Fk(COEFF)p Ft(_)p Fk(F)p Ft(")p
-Fk(,)f(except)i(that)g Ft(")p Fk(inputs)p Ft(")f Fk(and)g
-Ft(")p Fk(outputs)p Ft(")g Fk(are)g(transp)r(osed.)259
-4155 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 4255 y Fk(A)22 b(c)n(haracter)e
-(string)h(con)n(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g
-(attribute)g(assignmen)n(ts)f(to)g(b)r(e)427 4354 y(used)k(for)f
-(initialising)h(the)g(new)g(P)n(olyMap.)34 b(The)25 b(syn)n(tax)f(used)
-h(is)f(iden)n(tical)h(to)g(that)g(for)f(the)h(AST)p Ft(_)p
-Fk(SET)427 4454 y(routine.)259 4587 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 4686
-y Fk(The)c(global)e(status.)0 4848 y Fc(Returned)32 b(V)-8
-b(alue:)259 4984 y(AST)p Ft(_)p Fc(POL)g(YMAP)33 b(=)f(INTEGER)427
-5084 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(P)n(olyMap.)0
-5245 y Fc(Notes:)340 5528 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 5627 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-eop end
-%%Page: 299 309
-TeXDict begin 299 308 bop 3643 52 a FG(299)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(PRISM)724 b Fd(Create)37
-b(a)h(Prism)725 b FA(AST)p Fe(_)p FA(PRISM)0 653 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(Prism)g(and)g(optionally)
-g(initialises)h(its)f(attributes.)227 776 y(A)21 b(Prism)e(is)h(a)f
-(Region)g(whic)n(h)h(represen)n(ts)f(an)h(extrusion)f(of)h(an)f
-(existing)h(Region)f(in)n(to)h(one)g(or)f(more)g(orthogonal)227
-876 y(dimensions)k(\(sp)r(eci\014ed)h(b)n(y)f(another)f(Region\).)35
-b(If)23 b(the)h(Region)e(to)h(b)r(e)h(extruded)f(has)f(N)i(axes,)f(and)
-g(the)g(Region)227 976 y(de\014ning)36 b(the)f(extrusion)f(has)h(M)g
-(axes,)i(then)e(the)h(resulting)f(Prism)f(will)h(ha)n(v)n(e)f(\(M+N\))i
-(axes.)59 b(A)35 b(p)r(oin)n(t)h(is)227 1075 y(inside)28
-b(the)g(Prism)f(if)h(the)g(\014rst)f(N)h(axis)f(v)-5
-b(alues)28 b(corresp)r(ond)e(to)h(a)g(p)r(oin)n(t)h(inside)g(the)g
-(Region)f(b)r(eing)h(extruded,)227 1175 y(and)g(the)g(remaining)e(M)i
-(axis)f(v)-5 b(alues)27 b(corresp)r(ond)f(to)i(a)f(p)r(oin)n(t)h
-(inside)f(the)h(Region)f(de\014ning)h(the)g(extrusion.)227
-1298 y(As)33 b(an)g(example,)h(a)f(cylinder)g(can)f(b)r(e)i(represen)n
-(ted)e(b)n(y)h(extruding)f(an)h(existing)g(Circle,)h(using)e(an)h(In)n
-(terv)-5 b(al)227 1398 y(to)31 b(de\014ne)g(the)g(extrusion.)46
-b(Ih)31 b(this)g(case,)g(the)g(In)n(terv)-5 b(al)30 b(w)n(ould)h(ha)n
-(v)n(e)e(a)i(single)f(axis)g(and)h(w)n(ould)f(sp)r(ecify)h(the)227
-1497 y(upp)r(er)d(and)f(lo)n(w)n(er)f(limits)j(of)e(the)h(cylinder)f
-(along)g(its)g(length.)0 1644 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_PRISM\()c(REGION1,)i(REGION2,)f(OPTIONS,)g
-(STATUS)h(\))0 1791 y Fc(Argumen)m(ts:)259 1925 y(REGION1)31
-b(=)h(INTEGER)f(\(Giv)m(en\))427 2024 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(Region)f(to)g(b)r(e)h(extruded.)259 2154
-y Fc(REGION2)j(=)h(INTEGER)f(\(Giv)m(en\))427 2254 y
-Fk(P)n(oin)n(ter)26 b(to)i(the)g(Region)f(de\014ning)g(the)h(exten)n(t)
-g(of)f(the)h(extrusion.)259 2384 y Fc(OPTIONS)k(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-2484 y Fk(A)g(c)n(haracter)e(string)h(con)n(taining)f(an)h(optional)g
-(comma-separated)e(list)j(of)g(attribute)f(assignmen)n(ts)g(to)427
-2583 y(b)r(e)26 b(used)e(for)h(initialising)g(the)g(new)g(Prism.)35
-b(The)25 b(syn)n(tax)f(used)h(is)g(iden)n(tical)f(to)h(that)g(for)g
-(the)g(AST)p Ft(_)p Fk(SET)427 2683 y(routine.)259 2813
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 2913 y Fk(The)c(global)e(status.)0 3072 y Fc(Returned)32
-b(V)-8 b(alue:)259 3206 y(AST)p Ft(_)p Fc(PRISM)32 b(=)g(INTEGER)427
-3305 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(Prism.)0
-3464 y Fc(Notes:)340 3744 y Fj(\017)45 b Fk(Deep)37 b(copies)g(are)e
-(tak)n(en)i(of)f(the)i(supplied)f(Regions.)63 b(This)37
-b(means)f(that)i(an)n(y)e(subsequen)n(t)g(c)n(hanges)427
-3844 y(made)25 b(to)h(the)f(comp)r(onen)n(t)g(Regions)g(using)g(the)h
-(supplied)f(p)r(oin)n(ters)g(will)h(ha)n(v)n(e)e(no)h(e\013ect)h(on)f
-(the)g(Prism.)340 3974 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 4074 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 4267 V 0 4398 a FA(AST)p Fe(_)p FA(PUR)l(GEW)l(CS)1324
-4399 y Fd(Delete)39 b(all)f(cards)g(in)g(the)1376 4499
-y(FitsChan)g(describing)1439 4613 y(W)m(CS)h(information)2655
-4398 y FA(AST)p Fe(_)p FA(PUR)l(GEW)l(CS)0 4774 y Fc(Description:)44
-b Fk(This)36 b(routine)f(deletes)g(all)h(cards)e(in)i(a)f(FitsChan)h
-(that)f(relate)g(to)g(an)n(y)g(of)h(the)g(recognised)d(W)n(CS)227
-4873 y(enco)r(dings.)k(On)27 b(exit,)h(the)g(curren)n(t)e(card)h(is)h
-(the)g(\014rst)f(remaining)g(card)f(in)i(the)g(FitsChan.)0
-5020 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_PURGEWCS\()c
-(THIS,)j(STATUS)h(\))0 5167 y Fc(Argumen)m(ts:)259 5300
-y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 5400 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(FitsChan.)259 5530 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 5630
-y Fk(The)c(global)e(status.)p eop end
-%%Page: 300 310
-TeXDict begin 300 309 bop 0 52 a FG(300)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(PUTCARDS)1396 483 y Fd(Store)38
-b(a)g(set)h(of)f(FITS)1450 583 y(header)h(cards)f(in)h(a)1653
-682 y(FitsChan)2683 482 y FA(AST)p Fe(_)p FA(PUTCARDS)0
-825 y Fc(Description:)44 b Fk(This)36 b(routine)e(stores)g(a)h(set)g
-(of)h(FITS)f(header)f(cards)h(in)g(a)g(FitsChan.)60 b(The)35
-b(cards)f(are)g(supplied)227 924 y(concatenated)41 b(together)f(in)n
-(to)h(a)g(single)g(c)n(haracter)e(string.)78 b(An)n(y)41
-b(existing)g(cards)f(in)h(the)h(FitsChan)g(are)227 1024
-y(remo)n(v)n(ed)24 b(b)r(efore)g(the)i(new)f(cards)f(are)g(added.)35
-b(The)25 b(FitsChan)g(is)g Ft(")p Fk(re-w)n(ound)p Ft(")e
-Fk(on)i(exit)g(b)n(y)g(clearing)e(its)i(Card)227 1124
-y(attribute.)67 b(This)38 b(means)f(that)h(a)f(subsequen)n(t)h(in)n(v)n
-(o)r(cation)e(of)i(AST)p Ft(_)p Fk(READ)g(can)f(b)r(e)h(made)f
-(immediately)227 1223 y(without)28 b(the)g(need)g(to)f(re-wind)h(the)f
-(FitsChan)h(\014rst.)0 1361 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_PUTCARDS\()c(THIS,)j(CARDS,)h(STATUS)f(\))0
-1499 y Fc(Argumen)m(ts:)259 1624 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 1723 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259
-1845 y Fc(CARDS)k(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 1944 y Fk(A)39 b(c)n(haracter)e
-(string)h(con)n(taining)g(the)h(FITS)h(cards)d(to)i(b)r(e)g(stored.)70
-b(Eac)n(h)38 b(individual)h(card)f(should)427 2044 y(o)r(ccup)n(y)23
-b(80)g(c)n(haracters)f(in)h(this)h(string,)g(and)g(there)f(should)h(b)r
-(e)g(no)f(delimiters,)i(new)e(lines,)i(etc,)g(b)r(et)n(w)n(een)427
-2143 y(adjacen)n(t)i(cards.)36 b(The)28 b(\014nal)f(card)g(ma)n(y)g(b)r
-(e)h(less)f(than)h(80)e(c)n(haracters)g(long.)259 2265
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 2364 y Fk(The)c(global)e(status.)0 2515 y Fc(Notes:)340
-2786 y Fj(\017)45 b Fk(An)28 b(error)e(will)i(result)f(if)h(the)g
-(supplied)g(string)f(con)n(tains)g(an)n(y)f(cards)h(whic)n(h)h(cannot)f
-(b)r(e)h(in)n(terpreted.)p 0 2962 V 0 3092 a FA(AST)p
-Fe(_)p FA(PUTFITS)1118 3093 y Fd(Store)38 b(a)h(FITS)g(header)f(card)g
-(in)h(a)1653 3193 y(FitsChan)2857 3092 y FA(AST)p Fe(_)p
-FA(PUTFITS)0 3335 y Fc(Description:)44 b Fk(This)28 b(routine)f(stores)
-g(a)g(FITS)i(header)d(card)h(in)h(a)g(FitsChan.)37 b(The)28
-b(card)f(is)h(either)f(inserted)h(b)r(efore)227 3435
-y(the)g(curren)n(t)f(card)g(\(iden)n(ti\014ed)h(b)n(y)f(the)h(Card)f
-(attribute\),)h(or)f(o)n(v)n(er-writes)e(the)j(curren)n(t)f(card,)f(as)
-h(required.)0 3573 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42
-b(AST_PUTFITS\()c(THIS,)k(CARD,)f(OVERWRITE,)f(STATUS)h(\))0
-3711 y Fc(Argumen)m(ts:)259 3836 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 3935 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259
-4057 y Fc(CARD)k(=)g(CHARA)m(CTER)f Fj(\003)h Fc(\()g(80)f(\))h(\(Giv)m
-(en\))427 4156 y Fk(A)26 b(c)n(haracter)e(string)h(string)f(con)n
-(taining)h(the)h(FITS)g(card)f(to)g(b)r(e)h(stored.)35
-b(No)26 b(more)f(than)g(80)g(c)n(haracters)427 4256 y(will)j(b)r(e)g
-(used)g(from)f(this)h(string.)259 4377 y Fc(O)m(VER)-11
-b(WRITE)32 b(=)g(LOGICAL)g(\(Giv)m(en\))427 4477 y Fk(If)26
-b(this)h(v)-5 b(alue)25 b(is)h(.F)-9 b(ALSE.,)26 b(the)g(new)g(card)f
-(is)h(inserted)f(in)h(fron)n(t)g(of)f(the)h(curren)n(t)f(card)g(in)h
-(the)h(FitsChan)427 4576 y(\(as)22 b(iden)n(ti\014ed)h(b)n(y)f(the)g
-(initial)h(v)-5 b(alue)22 b(of)g(the)h(Card)e(attribute\).)36
-b(If)23 b(it)f(is)g(.TR)n(UE.,)i(the)e(new)g(card)g(replaces)427
-4676 y(the)35 b(curren)n(t)e(card.)55 b(In)35 b(either)f(case,)h(the)f
-(Card)f(attribute)h(is)g(then)h(incremen)n(ted)f(b)n(y)g(one)f(so)h
-(that)g(it)427 4776 y(subsequen)n(tly)27 b(iden)n(ti\014es)h(the)g
-(card)f(follo)n(wing)f(the)i(one)g(stored.)259 4897 y
-Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-4996 y Fk(The)c(global)e(status.)0 5147 y Fc(Notes:)340
-5418 y Fj(\017)45 b Fk(If)28 b(the)g(Card)e(attribute)h(initially)h(p)r
-(oin)n(ts)f(at)g(the)h Ft(")p Fk(end-of-\014le)p Ft(")e
-Fk(\(i.e.)37 b(exceeds)26 b(the)i(n)n(um)n(b)r(er)f(of)g(cards)f(in)427
-5517 y(the)i(FitsChan\),)g(then)g(the)g(new)g(card)f(is)g(app)r(ended)h
-(as)f(the)h(last)f(card)g(in)h(the)g(FitsChan.)340 5639
-y Fj(\017)45 b Fk(An)28 b(error)e(will)i(result)f(if)h(the)g(supplied)g
-(string)f(cannot)g(b)r(e)h(in)n(terpreted)f(as)g(a)g(FITS)h(header)f
-(card.)p eop end
-%%Page: 301 311
-TeXDict begin 301 310 bop 3643 52 a FG(301)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(PUTLINE)1215 483 y Fd(Store)38
-b(a)g(text)g(line)g(read)g(b)m(y)h(a)1298 598 y(Channel)e(source)i
-(routine)2835 482 y FA(AST)p Fe(_)p FA(PUTLINE)0 758
-y Fc(Description:)44 b Fk(This)33 b(routine)f(should)g(only)g(b)r(e)h
-(used)f(when)g(implemen)n(ting)h(a)f(routine)g(whic)n(h)g(will)h(b)r(e)
-g(passed)e(as)227 858 y(the)d(SOUR)n(CE)f(argumen)n(t)g(to)g(AST)p
-Ft(_)p Fk(CHANNEL.)h(It)g(should)g(b)r(e)g(used)g(to)f(pass)g(bac)n(k)g
-(\(to)h(the)g(AST)g(library\))227 958 y(eac)n(h)h(line)h(of)f(text)h
-(read)e(from)h(the)h(external)f(data)g(source.)41 b(One)29
-b(suc)n(h)g(line)g(should)h(b)r(e)f(passed)g(bac)n(k)g(in)g(this)227
-1057 y(w)n(a)n(y)e(for)g(eac)n(h)f(in)n(v)n(o)r(cation)h(of)g(the)h
-(source)f(routine.)0 1204 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_PUTLINE\()c(LINE,)k(L,)h(STATUS)e(\))0
-1352 y Fc(Argumen)m(ts:)259 1486 y(LINE)32 b(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-1585 y Fk(A)c(c)n(haracter)e(string)h(con)n(taining)f(the)i(line)g(of)g
-(input)g(text)g(whic)n(h)f(has)h(b)r(een)g(read.)259
-1716 y Fc(L)k(=)g(INTEGER)g(\(Giv)m(en\))427 1815 y Fk(The)i(n)n(um)n
-(b)r(er)f(of)h(c)n(haracters)d(in)j(the)g(input)g(line,)h(whic)n(h)f
-(ma)n(y)f(b)r(e)g(zero.)54 b(If)34 b(there)f(is)h(no)f(more)g(input)427
-1915 y(a)n(v)-5 b(ailable)24 b(\(e.g.)35 b(an)25 b(end)g(of)f(\014le)h
-(has)f(b)r(een)h(reac)n(hed\),)g(this)g(v)-5 b(alue)24
-b(should)h(b)r(e)g(set)f(negativ)n(e)g(and)g(this)h(will)427
-2015 y(terminate)j(the)g(read)e(op)r(eration)h(on)g(the)h(Channel.)259
-2145 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 2245 y Fk(The)c(global)e(status.)0 2404
-y Fc(Notes:)340 2684 y Fj(\017)45 b Fk(This)28 b(routine)f(is)h(only)f
-(a)n(v)-5 b(ailable)26 b(in)i(the)g(F)-7 b(ortran)26
-b(in)n(terface)h(to)h(the)g(AST)g(library)-7 b(.)p 0
-2879 V 0 3010 a FA(AST)p Fe(_)p FA(RA)c(TE)1052 3011
-y Fd(Calculate)37 b(the)h(rate)g(of)g(c)m(hange)g(of)h(a)1472
-3124 y(Mapping)f(output)3076 3010 y FA(AST)p Fe(_)p FA(RA)-11
-b(TE)0 3308 y Fc(Description:)44 b Fk(This)32 b(routine)f(ev)-5
-b(aluates)31 b(the)g(rate)g(of)h(c)n(hange)e(of)h(a)g(sp)r(eci\014ed)h
-(output)g(of)f(the)h(supplied)g(Mapping)227 3408 y(with)c(resp)r(ect)g
-(to)f(a)g(sp)r(eci\014ed)h(input,)h(at)e(a)g(sp)r(eci\014ed)h(input)h
-(p)r(osition.)227 3531 y(The)d(result)f(is)g(estimated)g(b)n(y)g(in)n
-(terp)r(olating)g(the)g(function)h(using)f(a)g(fourth)g(order)f(p)r
-(olynomial)h(in)g(the)h(neigh-)227 3631 y(b)r(ourho)r(o)r(d)i(of)h(the)
-g(sp)r(eci\014ed)f(p)r(osition.)40 b(The)28 b(size)h(of)f(the)h(neigh)n
-(b)r(ourho)r(o)r(d)e(used)i(is)f(c)n(hosen)g(to)g(minimise)h(the)227
-3730 y(RMS)38 b(residual)f(p)r(er)g(unit)h(length)g(b)r(et)n(w)n(een)f
-(the)h(in)n(terp)r(olating)e(p)r(olynomial)h(and)g(the)h(supplied)g
-(Mapping)227 3830 y(function.)59 b(This)35 b(metho)r(d)g(pro)r(duces)f
-(go)r(o)r(d)g(accuracy)f(but)j(can)e(in)n(v)n(olv)n(e)f(ev)-5
-b(aluating)35 b(the)g(Mapping)f(100)f(or)227 3930 y(more)27
-b(times.)0 4077 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_RATE\()d(THIS,)h(AT,)i(AX1,)f(AX2,)g(STATUS)f(\))0
-4224 y Fc(Argumen)m(ts:)259 4358 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 4457 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Mapping)f(to)g(b)r(e)
-h(applied.)259 4588 y Fc(A)-8 b(T\()33 b Fj(\003)e Fc(\))h(=)g(DOUBLE)g
-(PRECISION)g(\(Giv)m(en\))427 4688 y Fk(An)23 b(arra)n(y)c(holding)j
-(the)g(axis)f(v)-5 b(alues)22 b(at)f(the)i(p)r(osition)e(at)h(whic)n(h)
-g(the)g(rate)f(of)h(c)n(hange)f(is)h(to)g(b)r(e)g(ev)-5
-b(aluated.)427 4787 y(The)28 b(n)n(um)n(b)r(er)f(of)h(elemen)n(ts)f(in)
-h(this)g(arra)n(y)d(should)j(equal)f(the)h(n)n(um)n(b)r(er)f(of)h
-(inputs)g(to)f(the)h(Mapping.)259 4918 y Fc(AX1)k(=)g(INTEGER)f(\(Giv)m
-(en\))427 5017 y Fk(The)f(index)f(of)h(the)f(Mapping)g(output)h(for)f
-(whic)n(h)g(the)h(rate)f(of)g(c)n(hange)f(is)i(to)f(b)r(e)h(found)g
-(\(output)g(n)n(um-)427 5117 y(b)r(ering)d(starts)g(at)h(1)f(for)g(the)
-h(\014rst)f(output\).)259 5247 y Fc(AX2)32 b(=)g(INTEGER)f(\(Giv)m
-(en\))427 5347 y Fk(The)k(index)g(of)g(the)g(Mapping)g(input)h(whic)n
-(h)e(is)h(to)g(b)r(e)g(v)-5 b(aried)35 b(in)g(order)e(to)i(\014nd)g
-(the)h(rate)e(of)h(c)n(hange)427 5447 y(\(input)29 b(n)n(um)n(b)r
-(ering)e(starts)g(at)g(1)g(for)g(the)h(\014rst)g(input\).)259
-5577 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5677 y Fk(The)c(global)e(status.)p eop
-end
-%%Page: 302 312
-TeXDict begin 302 311 bop 0 52 a FG(302)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(Returned)h(V)-8
-b(alue:)259 492 y(AST)p Ft(_)p Fc(RA)g(TE)32 b(=)g(DOUBLE)g(PRECISION)
-427 592 y Fk(The)c(rate)g(of)g(c)n(hange)f(of)h(Mapping)f(output)i(AX1)
-f(with)h(resp)r(ect)e(to)h(input)h(AX2,)f(ev)-5 b(aluated)28
-b(at)g(A)-7 b(T,)28 b(or)427 691 y(AST)p Ft(__)p Fk(BAD)g(if)g(the)g(v)
--5 b(alue)28 b(cannot)f(b)r(e)h(calculated.)0 858 y Fc(Notes:)340
-1144 y Fj(\017)45 b Fk(A)24 b(v)-5 b(alue)23 b(of)g(AST)p
-Ft(__)p Fk(BAD)h(will)f(b)r(e)h(returned)f(if)h(this)g(function)g(is)f
-(in)n(v)n(ok)n(ed)f(with)i(the)f(global)f(error)g(status)427
-1244 y(set,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)
-p 0 1448 3780 12 v 0 1578 a FA(AST)p Fe(_)p FA(RA)-11
-b(TEMAP)388 b Fd(Create)37 b(a)i(RateMap)390 b FA(AST)p
-Fe(_)p FA(RA)-11 b(TEMAP)0 1771 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(RateMap)h(and)f
-(optionally)g(initialises)g(its)h(attributes.)227 1898
-y(A)37 b(RateMap)g(is)f(a)g(Mapping)h(whic)n(h)f(represen)n(ts)g(a)g
-(single)g(elemen)n(t)h(of)g(the)g(Jacobian)e(matrix)h(of)h(another)227
-1997 y(Mapping.)k(The)28 b(Mapping)h(for)f(whic)n(h)h(the)g(Jacobian)f
-(is)g(required)g(is)h(sp)r(eci\014ed)g(when)g(the)g(new)g(RateMap)g(is)
-227 2097 y(created,)e(and)h(is)f(referred)f(to)i(as)f(the)h
-Ft(")p Fk(encapsulated)e(Mapping)p Ft(")h Fk(b)r(elo)n(w.)227
-2224 y(The)39 b(n)n(um)n(b)r(er)f(of)g(inputs)h(to)f(a)g(RateMap)g(is)g
-(the)h(same)f(as)f(the)i(n)n(um)n(b)r(er)f(of)h(inputs)f(to)h(its)f
-(encapsulated)227 2323 y(Mapping.)e(The)27 b(n)n(um)n(b)r(er)f(of)h
-(outputs)g(from)f(a)g(RateMap)g(is)h(alw)n(a)n(ys)e(one.)36
-b(This)26 b(one)g(output)i(equals)d(the)i(rate)227 2423
-y(of)c(c)n(hange)f(of)h(a)g(sp)r(eci\014ed)g(output)h(of)f(the)g
-(encapsulated)g(Mapping)f(with)i(resp)r(ect)f(to)f(a)h(sp)r(eci\014ed)g
-(input)h(of)f(the)227 2523 y(encapsulated)k(Mapping)g(\(the)i(input)f
-(and)g(output)g(to)f(use)h(are)e(sp)r(eci\014ed)i(when)g(the)g(RateMap)
-f(is)h(created\).)227 2649 y(A)g(RateMap)f(whic)n(h)h(has)e(not)i(b)r
-(een)g(in)n(v)n(erted)e(do)r(es)i(not)f(de\014ne)h(an)f(in)n(v)n(erse)f
-(transformation.)35 b(If)28 b(a)f(RateMap)227 2749 y(has)g(b)r(een)h
-(in)n(v)n(erted)f(then)h(it)g(will)g(de\014ne)g(an)f(in)n(v)n(erse)f
-(transformation)g(but)j(not)e(a)g(forw)n(ard)f(transformation.)0
-2903 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_RATEMAP\()c
-(MAP,)j(AX1,)g(AX2,)f(OPTIONS,)g(STATUS)g(\))0 3057 y
-Fc(Argumen)m(ts:)259 3197 y(MAP)32 b(=)g(INTEGER)f(\(Giv)m(en\))427
-3297 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(encapsulated)f(Mapping.)259
-3432 y Fc(AX1)32 b(=)g(INTEGER)f(\(Giv)m(en\))427 3532
-y Fk(Index)26 b(of)h(the)f(output)h(from)f(the)g(encapsulated)g
-(Mapping)g(for)f(whic)n(h)h(the)h(rate)e(of)h(c)n(hange)f(is)i
-(required.)427 3631 y(This)g(corresp)r(onds)e(to)i(the)g(delta)g(quan)n
-(tit)n(y)f(forming)g(the)h(n)n(umerator)f(of)g(the)i(required)d(elemen)
-n(t)i(of)g(the)427 3731 y(Jacobian)f(matrix.)37 b(The)27
-b(\014rst)h(axis)f(has)g(index)g(1.)259 3866 y Fc(AX2)32
-b(=)g(INTEGER)f(\(Giv)m(en\))427 3966 y Fk(Index)f(of)g(the)h(input)g
-(to)f(the)g(encapsulated)g(Mapping)f(whic)n(h)h(is)g(to)g(b)r(e)h(v)-5
-b(aried.)43 b(This)31 b(corresp)r(onds)d(to)427 4065
-y(the)h(delta)g(quan)n(tit)n(y)f(forming)h(the)g(denominator)e(of)i
-(the)g(required)f(elemen)n(t)h(of)g(the)g(Jacobian)e(matrix.)427
-4165 y(The)h(\014rst)f(axis)g(has)g(index)h(1.)259 4300
-y Fc(OPTIONS)k(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f
-Fc(\))h(\(Giv)m(en\))427 4399 y Fk(A)22 b(c)n(haracter)e(string)h(con)n
-(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g(attribute)g
-(assignmen)n(ts)f(to)g(b)r(e)427 4499 y(used)j(for)g(initialising)g
-(the)g(new)h(RateMap.)35 b(The)24 b(syn)n(tax)f(used)h(is)h(iden)n
-(tical)e(to)h(that)h(for)e(the)i(AST)p Ft(_)p Fk(SET)427
-4599 y(routine.)259 4734 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)
-m(en)h(and)g(Returned\))427 4833 y Fk(The)c(global)e(status.)0
-5000 y Fc(Returned)32 b(V)-8 b(alue:)259 5140 y(AST)p
-Ft(_)p Fc(RA)g(TEMAP)32 b(=)g(INTEGER)427 5240 y Fk(A)c(p)r(oin)n(ter)f
-(to)h(the)g(new)g(RateMap.)0 5406 y Fc(Notes:)340 5693
-y Fj(\017)45 b Fk(The)28 b(forw)n(ard)e(transformation)g(of)h(the)h
-(encapsulated)f(Mapping)g(m)n(ust)h(b)r(e)g(de\014ned.)p
-eop end
-%%Page: 303 313
-TeXDict begin 303 312 bop 3643 52 a FG(303)340 351 y
-Fj(\017)45 b Fk(Note)32 b(that)g(the)g(comp)r(onen)n(t)g(Mappings)f
-(supplied)h(are)f(not)h(copied)f(b)n(y)h(AST)p Ft(_)p
-Fk(RA)-7 b(TEMAP)31 b(\(the)i(new)427 451 y(RateMap)40
-b(simply)h(retains)f(a)g(reference)g(to)g(them\).)77
-b(They)40 b(ma)n(y)g(con)n(tin)n(ue)g(to)h(b)r(e)g(used)f(for)g(other)
-427 551 y(purp)r(oses,)j(but)d(should)g(not)g(b)r(e)g(deleted.)75
-b(If)40 b(a)g(RateMap)f(con)n(taining)g(a)h(cop)n(y)f(of)h(its)g(comp)r
-(onen)n(t)427 650 y(Mappings)27 b(is)h(required,)e(then)j(a)e(cop)n(y)f
-(of)i(the)g(RateMap)f(should)h(b)r(e)g(made)f(using)g(AST)p
-Ft(_)p Fk(COPY.)340 811 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 911 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28
-b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 1166 3780 12 v 0 1297 a FA(AST)p Fe(_)p FA(READ)1066
-1298 y Fd(Read)39 b(an)g(Ob)7 b(ject)38 b(from)f(a)i(Channel)3055
-1297 y FA(AST)p Fe(_)p FA(READ)0 1542 y Fc(Description:)44
-b Fk(This)35 b(function)g(reads)f(the)h(next)g(Ob)5 b(ject)34
-b(from)h(a)f(Channel)h(and)f(returns)g(a)h(p)r(oin)n(ter)f(to)g(the)i
-(new)227 1642 y(Ob)5 b(ject.)0 1847 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_READ\()d(THIS,)h(STATUS)h(\))0
-2053 y Fc(Argumen)m(ts:)259 2245 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 2345 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Channel.)259
-2506 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 2605 y Fk(The)c(global)e(status.)0 2823
-y Fc(Class)31 b(Applicabilit)m(y:)259 3016 y(FitsChan)427
-3115 y Fk(All)24 b(successful)g(use)f(of)h(AST)p Ft(_)p
-Fk(READ)g(on)f(a)h(FitsChan)g(is)f(destructiv)n(e,)h(so)f(that)h(FITS)g
-(header)f(cards)g(are)427 3215 y(consumed)g(in)h(the)g(pro)r(cess)e(of)
-i(reading)e(an)h(Ob)5 b(ject,)25 b(and)e(are)f(remo)n(v)n(ed)g(from)h
-(the)h(FitsChan)g(\(this)g(dele-)427 3314 y(tion)g(can)f(b)r(e)g(prev)n
-(en)n(ted)g(for)g(sp)r(eci\014c)g(cards)f(b)n(y)h(calling)g(the)h
-(FitsChan)f(AST)p Ft(_)p Fk(RET)-7 b(AINFITS)24 b(routine\).)427
-3414 y(An)36 b(unsuccessful)g(call)f(of)h(AST)p Ft(_)p
-Fk(READ)f(\(for)h(instance,)h(caused)e(b)n(y)g(the)h(FitsChan)g(not)g
-(con)n(taining)427 3514 y(the)30 b(necessary)d(FITS)i(headers)f(cards)f
-(needed)i(to)g(create)f(an)h(Ob)5 b(ject\))29 b(results)f(in)h(the)g
-(con)n(ten)n(ts)f(of)h(the)427 3613 y(FitsChan)f(b)r(eing)g(left)g(unc)
-n(hanged.)259 3774 y Fc(StcsChan)427 3874 y Fk(The)f(AST)h(Ob)5
-b(ject)26 b(returned)h(b)n(y)g(a)f(successful)h(use)g(of)g(AST)p
-Ft(_)p Fk(READ)g(on)g(an)f(StcsChan,)h(will)g(b)r(e)h(either)427
-3973 y(a)g(Region)g(or)f(a)h(KeyMap,)f(dep)r(ending)i(on)f(the)h(v)-5
-b(alues)27 b(of)i(the)f(StcsArea,)g(StcsCo)r(ords)f(and)h(StcsProps)427
-4073 y(attributes.)37 b(See)28 b(the)g(do)r(cumen)n(tation)f(for)g
-(these)h(attributes)f(for)g(further)h(information.)0
-4291 y Fc(Returned)k(V)-8 b(alue:)259 4483 y(AST)p Ft(_)p
-Fc(READ)32 b(=)g(INTEGER)427 4583 y Fk(A)c(p)r(oin)n(ter)f(to)g(the)h
-(new)g(Ob)5 b(ject.)36 b(The)28 b(class)e(to)h(whic)n(h)h(this)f(will)h
-(b)r(elong)f(is)g(determined)h(b)n(y)f(the)h(input)427
-4683 y(data,)f(so)g(is)h(not)f(kno)n(wn)g(in)h(adv)-5
-b(ance.)0 4900 y Fc(Notes:)340 5239 y Fj(\017)45 b Fk(A)24
-b(n)n(ull)g(Ob)5 b(ject)24 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))h(will)g(b)r(e)h(returned,)f(without)g(error,)f(if)h
-(the)g(Channel)g(con)n(tains)427 5339 y(no)k(further)f(Ob)5
-b(jects)27 b(to)h(b)r(e)g(read.)340 5499 y Fj(\017)45
-b Fk(A)26 b(n)n(ull)f(Ob)5 b(ject)25 b(p)r(oin)n(ter)g(will)g(also)f(b)
-r(e)h(returned)g(if)h(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j
-(ST)-7 b(A)g(TUS)26 b(set)f(to)g(an)427 5599 y(error)h(v)-5
-b(alue,)27 b(or)g(if)h(it)g(should)g(fail)f(for)g(an)n(y)g(reason.)p
-eop end
-%%Page: 304 314
-TeXDict begin 304 313 bop 0 52 a FG(304)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(REBIN)p Fb(<)p FA(X)p Fb(>)1266
-483 y Fd(Rebin)39 b(a)g(region)e(of)h(a)h(data)1789 598
-y(grid)2725 482 y FA(AST)p Fe(_)p FA(REBIN)p Fb(<)p FA(X)p
-Fb(>)0 793 y Fc(Description:)44 b Fk(This)29 b(is)f(a)g(set)g(of)g
-(functions)h(for)e(rebinning)h(gridded)g(data)g(\(e.g.)38
-b(an)28 b(image\))g(under)g(the)h(con)n(trol)e(of)227
-893 y(a)f(geometrical)f(transformation,)g(whic)n(h)h(is)g(sp)r
-(eci\014ed)h(b)n(y)f(a)g(Mapping.)36 b(The)26 b(functions)h(op)r(erate)
-e(on)h(a)g(pair)g(of)227 993 y(data)f(grids)f(\(input)i(and)f
-(output\),)i(eac)n(h)d(of)h(whic)n(h)g(ma)n(y)g(ha)n(v)n(e)f(an)n(y)g
-(n)n(um)n(b)r(er)h(of)g(dimensions.)36 b(Rebinning)25
-b(ma)n(y)227 1092 y(b)r(e)e(restricted)f(to)g(a)g(sp)r(eci\014ed)g
-(region)f(of)i(the)f(input)h(grid.)35 b(An)23 b(asso)r(ciated)e(grid)g
-(of)i(error)d(estimates)i(asso)r(ciated)227 1192 y(with)30
-b(the)g(input)g(data)f(ma)n(y)g(also)f(b)r(e)i(supplied)g(\(in)g(the)g
-(form)f(of)g(v)-5 b(ariance)29 b(v)-5 b(alues\),)30 b(so)e(as)h(to)h
-(pro)r(duce)f(error)227 1291 y(estimates)f(for)f(the)h(rebined)f
-(output)h(data.)37 b(Propagation)24 b(of)k(missing)f(data)g(\(bad)h
-(pixels\))g(is)f(supp)r(orted.)227 1417 y(Note,)d(if)f(y)n(ou)e(will)i
-(b)r(e)g(rebining)f(a)g(sequence)g(of)g(input)i(arra)n(ys)19
-b(and)k(then)g(co-adding)e(them)i(in)n(to)f(a)g(single)g(arra)n(y)-7
-b(,)227 1517 y(the)28 b(alternativ)n(e)f(AST)p Ft(_)p
-Fk(REBINSEQ)p Fm(<)p Fk(X)p Fm(>)e Fk(routines)i(will)h(in)g(general)e
-(b)r(e)i(more)f(e\016cien)n(t.)227 1642 y(Y)-7 b(ou)32
-b(should)g(use)g(a)g(rebinning)g(function)g(whic)n(h)g(matc)n(hes)g
-(the)g(n)n(umerical)g(t)n(yp)r(e)g(of)g(the)h(data)e(y)n(ou)h(are)f
-(pro-)227 1742 y(cessing)h(b)n(y)h(replacing)f Fm(<)p
-Fk(X)p Fm(>)g Fk(in)h(the)h(generic)e(function)h(name)g(AST)p
-Ft(_)p Fk(REBIN)p Fm(<)p Fk(X)p Fm(>)f Fk(b)n(y)g(an)h(appropriate)e
-(1-)227 1842 y(or)26 b(2-c)n(haracter)e(t)n(yp)r(e)j(co)r(de.)36
-b(F)-7 b(or)26 b(example,)h(if)g(y)n(ou)f(are)g(rebinning)g(data)g
-(with)i(t)n(yp)r(e)f(REAL,)f(y)n(ou)g(should)h(use)227
-1941 y(the)j(function)g(AST)p Ft(_)p Fk(REBINR)f(\(see)g(the)h
-Ft(")p Fk(Data)f(T)n(yp)r(e)g(Co)r(des)p Ft(")g Fk(section)g(b)r(elo)n
-(w)g(for)g(the)g(co)r(des)g(appropriate)227 2041 y(to)f(other)f(n)n
-(umerical)g(t)n(yp)r(es\).)227 2167 y(Rebinning)i(of)g(the)g(grid)f(of)
-g(input)i(data)e(is)h(p)r(erformed)f(b)n(y)g(transforming)g(the)h(co)r
-(ordinates)e(of)i(the)g(cen)n(tre)f(of)227 2266 y(eac)n(h)h(input)g
-(grid)g(elemen)n(t)g(\(or)f(pixel\))i(in)n(to)f(the)g(co)r(ordinate)f
-(system)h(of)g(the)g(output)h(grid.)41 b(The)29 b(input)h(pixel)227
-2366 y(v)-5 b(alue)35 b(is)g(then)h(divided)f(up)h(and)f(assigned)f(to)
-h(the)g(output)h(pixels)f(in)g(the)h(neigh)n(b)r(ourho)r(o)r(d)e(of)h
-(the)h(cen)n(tral)227 2465 y(output)30 b(co)r(ordinates.)39
-b(A)29 b(c)n(hoice)g(of)f(sc)n(hemes)h(are)f(pro)n(vided)f(for)i
-(determining)g(ho)n(w)f(eac)n(h)g(input)i(pixel)f(v)-5
-b(alue)227 2565 y(is)24 b(divided)g(up)h(b)r(et)n(w)n(een)f(the)g
-(output)g(pixels.)36 b(In)24 b(general,)f(eac)n(h)h(output)g(pixel)g
-(ma)n(y)f(b)r(e)i(assigned)d(v)-5 b(alues)24 b(from)227
-2665 y(more)18 b(than)h(one)g(input)h(pixel.)34 b(All)19
-b(con)n(tributions)f(to)h(a)f(giv)n(en)h(output)g(pixel)g(are)f(summed)
-h(to)g(pro)r(duce)f(the)i(\014nal)227 2764 y(output)25
-b(pixel)f(v)-5 b(alue.)36 b(Output)25 b(pixels)f(can)f(b)r(e)i(set)f
-(to)g(the)h(supplied)f(bad)g(v)-5 b(alue)24 b(if)h(they)g(receiv)n(e)d
-(con)n(tributions)227 2864 y(from)28 b(an)f(insu\016cien)n(t)h(n)n(um)n
-(b)r(er)f(of)h(input)g(pixels.)37 b(This)27 b(is)h(con)n(trolled)e(b)n
-(y)h(the)h(WLIM)g(argumen)n(t.)227 2990 y(Input)34 b(pixel)e(co)r
-(ordinates)g(are)f(transformed)h(in)n(to)g(the)h(co)r(ordinate)f
-(system)g(of)h(the)g(output)g(grid)f(using)g(the)227
-3089 y(forw)n(ard)f(transformation)f(of)i(the)h(Mapping)f(whic)n(h)g
-(is)g(supplied.)50 b(This)33 b(means)e(that)i(geometrical)d(features)
-227 3189 y(in)i(the)f(input)h(data)f(are)f(sub)5 b(jected)31
-b(to)g(the)h(Mapping's)e(forw)n(ard)g(transformation)f(as)i(they)g(are)
-f(transferred)227 3289 y(from)e(the)g(input)g(to)f(the)h(output)g
-(grid.)227 3414 y(In)c(practice,)f(transforming)e(the)j(co)r(ordinates)
-e(of)h(ev)n(ery)e(pixel)j(of)f(a)f(large)g(data)h(grid)f(can)h(b)r(e)g
-(time-consuming,)227 3514 y(esp)r(ecially)38 b(if)g(the)h(Mapping)f(in)
-n(v)n(olv)n(es)e(complicated)i(functions,)j(suc)n(h)c(as)h(sky)f(pro)5
-b(jections.)67 b(T)-7 b(o)38 b(impro)n(v)n(e)227 3614
-y(p)r(erformance,)29 b(it)g(is)g(therefore)f(p)r(ossible)g(to)h(appro)n
-(ximate)e(non-linear)h(Mappings)g(b)n(y)h(a)g(set)g(of)f(linear)h
-(trans-)227 3713 y(formations)h(whic)n(h)h(are)f(applied)g(piece-wise)h
-(to)f(separate)g(sub-regions)f(of)h(the)i(data.)46 b(This)30
-b(appro)n(ximation)227 3813 y(pro)r(cess)37 b(is)h(applied)g
-(automatically)f(b)n(y)h(an)g(adaptiv)n(e)f(algorithm,)i(under)f(con)n
-(trol)f(of)h(an)g(accuracy)e(crite-)227 3912 y(rion)25
-b(whic)n(h)h(expresses)f(the)h(maxim)n(um)g(tolerable)f(geometrical)f
-(distortion)h(whic)n(h)h(ma)n(y)f(b)r(e)i(in)n(tro)r(duced,)f(as)f(a)
-227 4012 y(fraction)i(of)h(a)f(pixel.)227 4138 y(This)34
-b(algorithm)e(\014rst)h(attempts)h(to)g(appro)n(ximate)e(the)i(Mapping)
-f(with)h(a)f(linear)g(transformation)f(applied)227 4237
-y(o)n(v)n(er)j(the)j(whole)e(region)g(of)h(the)g(input)h(grid)e(whic)n
-(h)h(is)g(b)r(eing)g(used.)65 b(If)37 b(this)g(pro)n(v)n(es)e(to)i(b)r
-(e)g(insu\016cien)n(tly)227 4337 y(accurate,)c(the)h(input)f(region)f
-(is)h(sub-divided)g(in)n(to)f(t)n(w)n(o)h(along)e(its)i(largest)f
-(dimension)h(and)g(the)g(pro)r(cess)f(is)227 4437 y(rep)r(eated)h
-(within)h(eac)n(h)f(of)g(the)h(resulting)e(sub-regions.)53
-b(This)33 b(pro)r(cess)f(of)h(sub-division)g(con)n(tin)n(ues)f(un)n
-(til)i(a)227 4536 y(su\016cien)n(tly)27 b(go)r(o)r(d)g(linear)f(appro)n
-(ximation)g(is)h(found,)g(or)f(the)i(region)e(to)h(whic)n(h)g(it)h(is)f
-(b)r(eing)g(applied)g(b)r(ecomes)227 4636 y(to)r(o)h(small)f(\(in)h
-(whic)n(h)f(case)g(the)h(original)e(Mapping)h(is)h(used)g(directly\).)0
-4788 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_REBIN)p
-Fm(<)p Ft(X)p Fm(>)p Ft(\()c(THIS,)j(WLIM,)h(NDIM_IN,)e(LBND_IN,)g
-(UBND_IN,)h(IN,)h(IN_VAR,)f(SPREAD,)227 4887 y(PARAMS,)g(FLAGS,)g(TOL,)
-h(MAXPIX,)f(BADVAL,)f(NDIM_OUT,)g(LBND_OUT,)g(UBND_OUT,)g(LBND,)h
-(UBND,)h(OUT,)227 4987 y(OUT_VAR,)f(STATUS)g(\))0 5139
-y Fc(Argumen)m(ts:)259 5277 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427
-5377 y Fk(P)n(oin)n(ter)19 b(to)h(a)f(Mapping,)j(whose)d(forw)n(ard)f
-(transformation)h(will)h(b)r(e)h(used)f(to)g(transform)f(the)h(co)r
-(ordinates)427 5477 y(of)28 b(pixels)f(in)h(the)g(input)g(grid)f(in)n
-(to)h(the)g(co)r(ordinate)e(system)h(of)h(the)g(output)g(grid.)427
-5593 y(The)c(n)n(um)n(b)r(er)g(of)g(input)h(co)r(ordinates)e(used)h(b)n
-(y)g(this)g(Mapping)g(\(as)f(giv)n(en)h(b)n(y)f(its)i(Nin)f
-(attribute\))h(should)427 5693 y(matc)n(h)f(the)h(n)n(um)n(b)r(er)f(of)
-g(input)h(grid)f(dimensions)f(giv)n(en)h(b)n(y)g(the)g(v)-5
-b(alue)25 b(of)f(NDIM)p Ft(_)p Fk(IN)h(b)r(elo)n(w.)35
-b(Similarly)-7 b(,)p eop end
-%%Page: 305 315
-TeXDict begin 305 314 bop 3643 52 a FG(305)427 351 y
-Fk(the)29 b(n)n(um)n(b)r(er)e(of)h(output)g(co)r(ordinates)f(\(Nout)h
-(attribute\))h(should)e(matc)n(h)h(the)g(n)n(um)n(b)r(er)g(of)g(output)
-g(grid)427 451 y(dimensions)g(giv)n(en)e(b)n(y)i(NDIM)p
-Ft(_)p Fk(OUT.)259 592 y Fc(WLIM)k(=)g(DOUBLE)g(PRECISION)g(\(Giv)m
-(en\))427 692 y Fk(Giv)n(es)27 b(the)g(required)f(n)n(um)n(b)r(er)g(of)
-h(input)h(pixel)f(v)-5 b(alues)26 b(whic)n(h)h(m)n(ust)g(con)n(tribute)
-g(to)f(an)h(output)g(pixel)g(in)427 792 y(order)f(for)h(the)h(output)f
-(pixel)h(v)-5 b(alue)27 b(to)g(b)r(e)h(considered)e(v)-5
-b(alid.)37 b(If)27 b(the)h(sum)f(of)h(the)f(input)h(pixel)g(w)n(eigh)n
-(ts)427 891 y(con)n(tributing)f(to)h(an)g(output)g(pixel)g(is)f(less)h
-(than)g(the)g(supplied)g(WLIM)g(v)-5 b(alue,)28 b(then)g(the)g(output)h
-(pixel)427 991 y(v)-5 b(alue)28 b(is)f(returned)g(set)h(to)f(the)h
-(supplied)g(bad)g(v)-5 b(alue.)259 1132 y Fc(NDIM)p Ft(_)p
-Fc(IN)31 b(=)h(INTEGER)g(\(Giv)m(en\))427 1232 y Fk(The)c(n)n(um)n(b)r
-(er)f(of)h(dimensions)f(in)h(the)g(input)g(grid.)36 b(This)28
-b(should)f(b)r(e)h(at)g(least)f(one.)259 1373 y Fc(LBND)p
-Ft(_)p Fc(IN\()32 b(NDIM)p Ft(_)p Fc(IN)f(\))h(=)g(INTEGER)f(\(Giv)m
-(en\))427 1473 y Fk(An)j(arra)n(y)d(con)n(taining)h(the)i(co)r
-(ordinates)e(of)h(the)h(cen)n(tre)f(of)g(the)g(\014rst)h(pixel)f(in)g
-(the)h(input)g(grid)f(along)427 1573 y(eac)n(h)27 b(dimension.)259
-1714 y Fc(UBND)p Ft(_)p Fc(IN\()32 b(NDIM)p Ft(_)p Fc(IN)f(\))h(=)g
-(INTEGER)f(\(Giv)m(en\))427 1814 y Fk(An)k(arra)n(y)d(con)n(taining)h
-(the)h(co)r(ordinates)f(of)h(the)h(cen)n(tre)f(of)g(the)g(last)g(pixel)
-g(in)h(the)f(input)h(grid)f(along)427 1913 y(eac)n(h)27
-b(dimension.)427 2034 y(Note)h(that)f(LBND)p Ft(_)p Fk(IN)h(and)f(UBND)
-p Ft(_)p Fk(IN)h(together)f(de\014ne)g(the)h(shap)r(e)f(and)g(size)g
-(of)h(the)g(input)g(grid,)e(its)427 2133 y(exten)n(t)33
-b(along)e(a)i(particular)e(\(J'th\))j(dimension)e(b)r(eing)h(UBND)p
-Ft(_)p Fk(IN\(J\)-LBND)p Ft(_)p Fk(IN\(J\)+1.)52 b(They)33
-b(also)427 2233 y(de\014ne)25 b(the)f(input)i(grid's)d(co)r(ordinate)g
-(system,)i(eac)n(h)e(pixel)i(ha)n(ving)e(unit)i(exten)n(t)f(along)f
-(eac)n(h)h(dimension)427 2333 y(with)k(in)n(tegral)f(co)r(ordinate)f(v)
--5 b(alues)27 b(at)h(its)g(cen)n(tre.)259 2474 y Fc(IN\()k
-Fj(\003)f Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p Fm(>)g
-Fc(\(Giv)m(en\))427 2574 y Fk(An)k(arra)n(y)-7 b(,)36
-b(with)g(one)g(elemen)n(t)f(for)h(eac)n(h)f(pixel)g(in)h(the)g(input)h
-(grid,)g(con)n(taining)e(the)h(input)g(data)g(to)427
-2673 y(b)r(e)c(rebined.)47 b(The)32 b(n)n(umerical)e(t)n(yp)r(e)h(of)h
-(this)f(arra)n(y)e(should)i(matc)n(h)g(the)g(1-)g(or)f(2-c)n(haracter)e
-(t)n(yp)r(e)k(co)r(de)427 2773 y(app)r(ended)d(to)f(the)g(function)h
-(name)f(\(e.g.)38 b(if)29 b(y)n(ou)f(are)f(using)h(AST)p
-Ft(_)p Fk(REBINR,)g(the)g(t)n(yp)r(e)g(of)h(eac)n(h)e(arra)n(y)427
-2873 y(elemen)n(t)h(should)f(b)r(e)h(REAL\).)427 2993
-y(The)33 b(storage)f(order)f(of)j(data)e(within)i(this)g(arra)n(y)c
-(should)j(b)r(e)h(suc)n(h)f(that)g(the)h(index)f(of)g(the)g(\014rst)g
-(grid)427 3093 y(dimension)39 b(v)-5 b(aries)39 b(most)g(rapidly)g(and)
-g(that)g(of)h(the)f(\014nal)g(dimension)h(least)f(rapidly)f(\(i.e.)73
-b(normal)427 3192 y(F)-7 b(ortran)27 b(arra)n(y)e(storage)h(order\).)
-259 3334 y Fc(IN)p Ft(_)p Fc(V)-11 b(AR\()32 b Fj(\003)f
-Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p Fm(>)g Fc(\(Giv)m(en\))427
-3434 y Fk(An)24 b(optional)e(second)h(arra)n(y)e(with)i(the)h(same)f
-(size)f(and)h(t)n(yp)r(e)h(as)e(the)i(IN)f(arra)n(y)-7
-b(.)34 b(If)23 b(the)h(AST)p Ft(__)p Fk(USEV)-9 b(AR)427
-3533 y(\015ag)28 b(is)g(set)h(via)f(the)h(FLA)n(GS)g(argumen)n(t)e(\(b)
-r(elo)n(w\),)i(this)g(arra)n(y)d(should)i(con)n(tain)g(a)g(set)h(of)f
-(non-negativ)n(e)427 3633 y(v)-5 b(alues)32 b(whic)n(h)h(represen)n(t)e
-(estimates)h(of)g(the)h(statistical)f(v)-5 b(ariance)31
-b(asso)r(ciated)g(with)i(eac)n(h)e(elemen)n(t)i(of)427
-3732 y(the)28 b(IN)g(arra)n(y)-7 b(.)35 b(Estimates)27
-b(of)g(the)h(v)-5 b(ariance)27 b(of)g(the)h(rebined)g(output)g(data)f
-(will)h(then)g(b)r(e)g(calculated.)427 3853 y(If)d(the)g(AST)p
-Ft(__)p Fk(USEV)-9 b(AR)25 b(\015ag)f(is)g(not)h(set,)g(no)g(input)g(v)
--5 b(ariance)24 b(estimates)g(are)g(required)f(and)i(this)g(arra)n(y)
-427 3953 y(will)j(not)g(b)r(e)g(used.)37 b(A)27 b(dumm)n(y)h(\(e.g.)37
-b(one-elemen)n(t\))27 b(arra)n(y)e(ma)n(y)i(then)h(b)r(e)g(supplied.)
-259 4094 y Fc(SPREAD)k(=)g(INTEGER)f(\(Giv)m(en\))427
-4194 y Fk(This)25 b(argumen)n(t)e(sp)r(eci\014es)i(the)g(sc)n(heme)f
-(to)g(b)r(e)h(used)g(for)f(dividing)g(eac)n(h)g(input)h(data)f(v)-5
-b(alue)25 b(up)g(amongst)427 4293 y(the)30 b(corresp)r(onding)d(output)
-j(pixels.)42 b(It)30 b(ma)n(y)e(b)r(e)i(used)f(to)h(select)f(from)g(a)g
-(set)g(of)g(pre-de\014ned)g(sc)n(hemes)427 4393 y(b)n(y)f(supplying)f
-(one)g(of)h(the)g(v)-5 b(alues)27 b(describ)r(ed)g(in)h(the)g
-Ft(")p Fk(Pixel)f(Spreading)g(Sc)n(hemes)p Ft(")f Fk(section)i(b)r(elo)
-n(w.)36 b(If)427 4493 y(a)d(v)-5 b(alue)34 b(of)f(zero)g(is)g
-(supplied,)i(then)f(the)g(default)g(linear)f(spreading)f(sc)n(heme)h
-(is)h(used)f(\(equiv)-5 b(alen)n(t)34 b(to)427 4592 y(supplying)28
-b(the)g(v)-5 b(alue)27 b(AST)p Ft(__)p Fk(LINEAR\).)259
-4734 y Fc(P)-8 b(ARAMS\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)
-e(\(Giv)m(en\))427 4833 y Fk(An)23 b(optional)f(arra)n(y)e(whic)n(h)i
-(should)g(con)n(tain)g(an)n(y)g(additional)f(parameter)g(v)-5
-b(alues)22 b(required)g(b)n(y)g(the)h(pixel)427 4933
-y(spreading)g(sc)n(heme.)36 b(If)24 b(suc)n(h)g(parameters)f(are)g
-(required,)h(this)h(will)g(b)r(e)f(noted)h(in)f(the)h
-Ft(")p Fk(Pixel)f(Spreading)427 5033 y(Sc)n(hemes)p Ft(")j
-Fk(section)g(b)r(elo)n(w.)427 5153 y(If)f(no)e(additional)g(parameters)
-g(are)f(required,)i(this)g(arra)n(y)d(is)j(not)g(used.)36
-b(A)25 b(dumm)n(y)g(\(e.g.)36 b(one-elemen)n(t\))427
-5253 y(arra)n(y)26 b(ma)n(y)g(then)j(b)r(e)f(supplied.)259
-5394 y Fc(FLA)m(GS)33 b(=)f(INTEGER)f(\(Giv)m(en\))427
-5494 y Fk(The)36 b(sum)f(of)h(a)f(set)g(of)g(\015ag)g(v)-5
-b(alues)35 b(whic)n(h)g(ma)n(y)g(b)r(e)h(used)f(to)g(pro)n(vide)g
-(additional)g(con)n(trol)f(o)n(v)n(er)f(the)427 5593
-y(rebinning)d(op)r(eration.)45 b(See)31 b(the)f Ft(")p
-Fk(Con)n(trol)f(Flags)p Ft(")g Fk(section)i(b)r(elo)n(w)f(for)g(a)g
-(description)g(of)g(the)h(options)427 5693 y(a)n(v)-5
-b(ailable.)36 b(If)28 b(no)f(\015ag)g(v)-5 b(alues)27
-b(are)g(to)g(b)r(e)h(set,)g(a)f(v)-5 b(alue)28 b(of)f(zero)g(should)g
-(b)r(e)h(giv)n(en.)p eop end
-%%Page: 306 316
-TeXDict begin 306 315 bop 0 52 a FG(306)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(TOL)h(=)h(DOUBLE)f
-(PRECISION)f(\(Giv)m(en\))427 451 y Fk(The)j(maxim)n(um)f(tolerable)f
-(geometrical)f(distortion)i(whic)n(h)g(ma)n(y)f(b)r(e)i(in)n(tro)r
-(duced)f(as)f(a)h(result)g(of)g(ap-)427 551 y(pro)n(ximating)c
-(non-linear)f(Mappings)h(b)n(y)h(a)f(set)h(of)g(piece-wise)f(linear)g
-(transformations.)42 b(This)30 b(should)427 650 y(b)r(e)e(expressed)f
-(as)g(a)g(displacemen)n(t)g(in)h(pixels)f(in)h(the)g(output)g(grid's)f
-(co)r(ordinate)f(system.)427 762 y(If)34 b(piece-wise)f(linear)g(appro)
-n(ximation)f(is)h(not)h(required,)g(a)f(v)-5 b(alue)33
-b(of)h(zero)e(ma)n(y)h(b)r(e)h(giv)n(en.)54 b(This)33
-b(will)427 861 y(ensure)k(that)g(the)h(Mapping)e(is)h(used)g(without)h
-(an)n(y)e(appro)n(ximation,)i(but)g(ma)n(y)e(increase)g(execution)427
-961 y(time.)427 1072 y(If)d(the)f(v)-5 b(alue)32 b(is)g(to)r(o)g(high,)
-h(discon)n(tin)n(uities)e(b)r(et)n(w)n(een)h(the)h(linear)e(appro)n
-(ximations)f(used)i(in)g(adjacen)n(t)427 1172 y(panel)h(will)g(b)r(e)g
-(higher,)h(and)f(ma)n(y)f(cause)g(the)i(edges)e(of)h(the)g(panel)g(to)g
-(b)r(e)g(visible)g(when)g(viewing)f(the)427 1272 y(output)c(image)f(at)
-h(high)f(con)n(trast.)36 b(If)28 b(this)g(is)f(a)g(problem,)g(reduce)h
-(the)g(tolerance)e(v)-5 b(alue)27 b(used.)259 1395 y
-Fc(MAXPIX)33 b(=)f(INTEGER)f(\(Giv)m(en\))427 1495 y
-Fk(A)42 b(v)-5 b(alue)40 b(whic)n(h)h(sp)r(eci\014es)g(an)g(initial)g
-(scale)g(size)f(\(in)i(pixels\))f(for)f(the)i(adaptiv)n(e)e(algorithm)g
-(whic)n(h)427 1594 y(appro)n(ximates)d(non-linear)g(Mappings)h(with)h
-(piece-wise)f(linear)g(transformations.)68 b(Normally)-7
-b(,)40 b(this)427 1694 y(should)e(b)r(e)g(a)g(large)e(v)-5
-b(alue)38 b(\(larger)e(than)j(an)n(y)e(dimension)h(of)f(the)i(region)d
-(of)i(the)h(input)f(grid)g(b)r(eing)427 1793 y(used\).)46
-b(In)31 b(this)g(case,)g(a)f(\014rst)g(attempt)h(to)g(appro)n(ximate)e
-(the)i(Mapping)f(b)n(y)g(a)g(linear)g(transformation)427
-1893 y(will)e(b)r(e)g(made)f(o)n(v)n(er)f(the)i(en)n(tire)f(input)i
-(region.)427 2005 y(If)k(a)f(smaller)f(v)-5 b(alue)33
-b(is)f(used,)i(the)e(input)h(region)f(will)g(\014rst)g(b)r(e)h(divided)
-g(in)n(to)f(sub-regions)e(whose)i(size)427 2104 y(do)r(es)40
-b(not)g(exceed)f(MAXPIX)h(pixels)g(in)g(an)n(y)f(dimension.)74
-b(Only)39 b(at)h(this)g(p)r(oin)n(t)g(will)g(attempts)h(at)427
-2204 y(appro)n(ximation)26 b(commence.)427 2315 y(This)38
-b(v)-5 b(alue)38 b(ma)n(y)g(o)r(ccasionally)e(b)r(e)j(useful)f(in)h
-(prev)n(en)n(ting)e(false)h(con)n(v)n(ergence)d(of)j(the)h(adaptiv)n(e)
-e(al-)427 2415 y(gorithm)c(in)g(cases)f(where)g(the)h(Mapping)g(app)r
-(ears)f(appro)n(ximately)f(linear)h(on)h(large)e(scales,)j(but)f(has)
-427 2515 y(irregularities)27 b(\(e.g.)40 b(holes\))28
-b(on)g(smaller)g(scales.)39 b(A)29 b(v)-5 b(alue)28 b(of,)h(sa)n(y)-7
-b(,)28 b(50)g(to)g(100)g(pixels)g(can)g(also)g(b)r(e)h(em-)427
-2614 y(plo)n(y)n(ed)23 b(as)f(a)h(safeguard)f(in)i(general-purp)r(ose)d
-(soft)n(w)n(are,)i(since)g(the)h(e\013ect)f(on)h(p)r(erformance)e(is)h
-(minimal.)427 2726 y(If)e(to)r(o)f(small)g(a)g(v)-5 b(alue)20
-b(is)g(giv)n(en,)h(it)g(will)f(ha)n(v)n(e)f(the)i(e\013ect)g(of)f
-(inhibiting)h(linear)f(appro)n(ximation)e(altogether)427
-2825 y(\(equiv)-5 b(alen)n(t)21 b(to)f(setting)h(TOL)f(to)g(zero\).)34
-b(Although)20 b(this)h(ma)n(y)f(degrade)f(p)r(erformance,)i(accurate)e
-(results)427 2925 y(will)28 b(still)g(b)r(e)g(obtained.)259
-3048 y Fc(BAD)m(V)-11 b(AL)34 b(=)e Fm(<)p Fc(Xt)m(yp)s(e)p
-Fm(>)f Fc(\(Giv)m(en\))427 3148 y Fk(This)i(argumen)n(t)e(should)h(ha)n
-(v)n(e)g(the)g(same)g(t)n(yp)r(e)h(as)f(the)h(elemen)n(ts)f(of)g(the)h
-(IN)g(arra)n(y)-7 b(.)49 b(It)33 b(sp)r(eci\014es)f(the)427
-3247 y(v)-5 b(alue)28 b(used)f(to)h(\015ag)f(missing)g(data)g(\(bad)h
-(pixels\))f(in)h(the)g(input)g(and)g(output)g(arra)n(ys.)427
-3359 y(If)33 b(the)f(AST)p Ft(__)p Fk(USEBAD)g(\015ag)f(is)h(set)g(via)
-f(the)i(FLA)n(GS)f(argumen)n(t,)g(then)h(this)f(v)-5
-b(alue)32 b(is)g(used)f(to)h(test)427 3459 y(for)27 b(bad)h(pixels)f
-(in)h(the)g(IN)g(\(and)g(IN)p Ft(_)p Fk(V)-9 b(AR\))28
-b(arra)n(y\(s\).)427 3570 y(In)e(all)g(cases,)f(this)h(v)-5
-b(alue)26 b(is)g(also)f(used)h(to)g(\015ag)f(an)n(y)g(output)h(elemen)n
-(ts)g(in)g(the)h(OUT)e(\(and)h(OUT)p Ft(_)p Fk(V)-9 b(AR\))427
-3670 y(arra)n(y\(s\))34 b(for)i(whic)n(h)g(rebined)g(v)-5
-b(alues)36 b(could)g(not)h(b)r(e)f(obtained)g(\(see)g(the)h
-Ft(")p Fk(Propagation)c(of)j(Missing)427 3769 y(Data)p
-Ft(")27 b Fk(section)g(b)r(elo)n(w)h(for)f(details)g(of)h(the)g
-(circumstances)e(under)i(whic)n(h)f(this)h(ma)n(y)f(o)r(ccur\).)259
-3893 y Fc(NDIM)p Ft(_)p Fc(OUT)32 b(=)g(INTEGER)f(\(Giv)m(en\))427
-3992 y Fk(The)38 b(n)n(um)n(b)r(er)f(of)g(dimensions)g(in)h(the)f
-(output)h(grid.)66 b(This)37 b(should)g(b)r(e)h(at)f(least)g(one.)65
-b(It)38 b(need)g(not)427 4092 y(necessarily)26 b(b)r(e)i(equal)f(to)h
-(the)g(n)n(um)n(b)r(er)f(of)h(dimensions)f(in)h(the)g(input)g(grid.)259
-4215 y Fc(LBND)p Ft(_)p Fc(OUT\()33 b(NDIM)p Ft(_)p Fc(OUT)e(\))h(=)g
-(INTEGER)g(\(Giv)m(en\))427 4315 y Fk(An)f(arra)n(y)d(con)n(taining)h
-(the)h(co)r(ordinates)f(of)h(the)h(cen)n(tre)e(of)h(the)h(\014rst)f
-(pixel)g(in)g(the)h(output)f(grid)g(along)427 4415 y(eac)n(h)d
-(dimension.)259 4538 y Fc(UBND)p Ft(_)p Fc(OUT\()33 b(NDIM)p
-Ft(_)p Fc(OUT)e(\))h(=)g(INTEGER)g(\(Giv)m(en\))427 4637
-y Fk(An)g(arra)n(y)c(con)n(taining)i(the)i(co)r(ordinates)d(of)i(the)h
-(cen)n(tre)e(of)h(the)h(last)e(pixel)h(in)h(the)f(output)h(grid)e
-(along)427 4737 y(eac)n(h)d(dimension.)427 4849 y(Note)41
-b(that)g(LBND)p Ft(_)p Fk(OUT)f(and)g(UBND)p Ft(_)p Fk(OUT)h(together)e
-(de\014ne)i(the)g(shap)r(e,)i(size)d(and)h(co)r(ordinate)427
-4948 y(system)24 b(of)f(the)h(output)h(grid)d(in)i(the)g(same)g(w)n(a)n
-(y)e(as)h(LBND)p Ft(_)p Fk(IN)h(and)f(UBND)p Ft(_)p Fk(IN)i(de\014ne)f
-(the)g(shap)r(e,)g(size)427 5048 y(and)k(co)r(ordinate)e(system)h(of)h
-(the)g(input)g(grid.)259 5171 y Fc(LBND\()k(NDIM)p Ft(_)p
-Fc(IN)f(\))h(=)g(INTEGER)g(\(Giv)m(en\))427 5271 y Fk(An)c(arra)n(y)c
-(con)n(taining)i(the)i(co)r(ordinates)d(of)i(the)g(\014rst)g(pixel)g
-(in)g(the)h(region)d(of)i(the)h(input)g(grid)e(whic)n(h)h(is)427
-5370 y(to)h(b)r(e)g(included)g(in)g(the)g(rebined)f(output)h(arra)n(y)
--7 b(.)259 5494 y Fc(UBND\()32 b(NDIM)p Ft(_)p Fc(IN)f(\))h(=)h
-(INTEGER)e(\(Giv)m(en\))427 5593 y Fk(An)e(arra)n(y)c(con)n(taining)i
-(the)h(co)r(ordinates)e(of)i(the)g(last)g(pixel)g(in)g(the)g(region)e
-(of)i(the)g(input)h(grid)e(whic)n(h)h(is)427 5693 y(to)g(b)r(e)g
-(included)g(in)g(the)g(rebined)f(output)h(arra)n(y)-7
-b(.)p eop end
-%%Page: 307 317
-TeXDict begin 307 316 bop 3643 52 a FG(307)427 351 y
-Fk(Note)26 b(that)g(LBND)h(and)e(UBND)i(together)e(de\014ne)h(the)g
-(shap)r(e)g(and)g(p)r(osition)g(of)f(a)h(\(h)n(yp)r(er-\)rectangular)
-427 451 y(region)19 b(of)i(the)f(input)h(grid)f(whic)n(h)g(is)g(to)h(b)
-r(e)f(included)h(in)g(the)f(rebined)h(output)f(arra)n(y)-7
-b(.)33 b(This)20 b(region)f(should)427 551 y(lie)33 b(wholly)e(within)i
-(the)g(exten)n(t)f(of)g(the)h(input)g(grid)e(\(as)h(de\014ned)h(b)n(y)f
-(the)g(LBND)p Ft(_)p Fk(IN)h(and)f(UBND)p Ft(_)p Fk(IN)427
-650 y(arra)n(ys\).)j(Regions)26 b(of)i(the)g(input)g(grid)f(lying)h
-(outside)f(this)h(region)e(will)i(not)g(b)r(e)g(used.)259
-783 y Fc(OUT\()33 b Fj(\003)e Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p
-Fm(>)f Fc(\(Returned\))427 883 y Fk(An)24 b(arra)n(y)-7
-b(,)22 b(with)j(one)e(elemen)n(t)g(for)g(eac)n(h)g(pixel)h(in)g(the)f
-(output)i(grid,)e(in)h(whic)n(h)g(the)g(rebined)f(data)g(v)-5
-b(alues)427 983 y(will)33 b(b)r(e)f(returned.)50 b(The)32
-b(n)n(umerical)f(t)n(yp)r(e)i(of)f(this)g(arra)n(y)e(should)i(matc)n(h)
-f(that)i(of)f(the)g(IN)h(arra)n(y)-7 b(,)31 b(and)427
-1082 y(the)f(data)e(storage)g(order)f(should)i(b)r(e)h(suc)n(h)f(that)g
-(the)h(index)f(of)g(the)g(\014rst)g(grid)g(dimension)g(v)-5
-b(aries)28 b(most)427 1182 y(rapidly)22 b(and)g(that)g(of)g(the)h
-(\014nal)f(dimension)g(least)g(rapidly)f(\(i.e.)36 b(normal)21
-b(F)-7 b(ortran)21 b(arra)n(y)e(storage)i(order\).)259
-1315 y Fc(OUT)p Ft(_)p Fc(V)-11 b(AR\()33 b Fj(\003)e
-Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p Fm(>)f Fc(\(Returned\))427
-1415 y Fk(An)25 b(optional)f(arra)n(y)d(with)k(the)g(same)f(t)n(yp)r(e)
-g(and)g(size)g(as)g(the)g(OUT)g(arra)n(y)-7 b(.)34 b(If)25
-b(the)f(AST)p Ft(__)p Fk(USEV)-9 b(AR)24 b(\015ag)427
-1514 y(is)30 b(set)f(via)h(the)g(FLA)n(GS)g(argumen)n(t,)f(this)h(arra)
-n(y)d(will)j(b)r(e)g(used)g(to)f(return)g(v)-5 b(ariance)29
-b(estimates)g(for)g(the)427 1614 y(rebined)f(data)f(v)-5
-b(alues.)427 1730 y(The)23 b(output)f(v)-5 b(ariance)22
-b(v)-5 b(alues)21 b(will)i(b)r(e)g(calculated)e(on)h(the)h(assumption)f
-(that)g(errors)e(on)i(the)h(input)g(data)427 1830 y(v)-5
-b(alues)24 b(are)g(statistically)f(indep)r(enden)n(t)i(and)g(that)f
-(their)g(v)-5 b(ariance)24 b(estimates)g(ma)n(y)f(simply)i(b)r(e)f
-(summed)427 1930 y(\(with)30 b(appropriate)d(w)n(eigh)n(ting)g
-(factors\))h(when)h(sev)n(eral)e(input)i(pixels)g(con)n(tribute)f(to)h
-(an)f(output)h(data)427 2029 y(v)-5 b(alue.)59 b(If)35
-b(this)g(assumption)f(is)h(not)g(v)-5 b(alid,)36 b(then)f(the)h(output)
-f(error)e(estimates)h(ma)n(y)g(b)r(e)h(biased.)58 b(In)427
-2129 y(addition,)31 b(note)f(that)h(the)f(statistical)g(errors)e(on)i
-(neigh)n(b)r(ouring)f(output)h(data)g(v)-5 b(alues)30
-b(\(as)g(w)n(ell)g(as)f(the)427 2229 y(estimates)j(of)f(those)g
-(errors\))f(ma)n(y)h(often)h(b)r(e)g(correlated,)f(ev)n(en)g(if)h(the)g
-(ab)r(o)n(v)n(e)f(assumption)g(ab)r(out)g(the)427 2328
-y(input)e(data)e(is)g(correct,)g(b)r(ecause)g(of)g(the)h(pixel)g
-(spreading)e(sc)n(hemes)h(emplo)n(y)n(ed.)427 2445 y(If)34
-b(the)h(AST)p Ft(__)p Fk(USEV)-9 b(AR)33 b(\015ag)g(is)h(not)f(set,)j
-(no)d(output)i(v)-5 b(ariance)32 b(estimates)h(will)h(b)r(e)h
-(calculated)e(and)427 2544 y(this)28 b(arra)n(y)d(will)j(not)g(b)r(e)g
-(used.)37 b(A)28 b(dumm)n(y)f(\(e.g.)37 b(one-elemen)n(t\))27
-b(arra)n(y)f(ma)n(y)g(then)j(b)r(e)f(supplied.)259 2678
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 2777 y Fk(The)c(global)e(status.)-2 2940 y Fc(Data)33
-b(T)m(yp)s(e)g(Co)s(des)n(:)227 3086 y Fk(T)-7 b(o)39
-b(select)g(the)h(appropriate)e(rebinning)h(function,)k(y)n(ou)38
-b(should)h(replace)g Fm(<)p Fk(X)p Fm(>)f Fk(in)i(the)g(generic)e
-(function)227 3186 y(name)c(AST)p Ft(_)p Fk(REBIN)p Fm(<)p
-Fk(X)p Fm(>)f Fk(with)i(a)f(1-)f(or)g(2-c)n(haracter)f(data)h(t)n(yp)r
-(e)i(co)r(de,)g(so)f(as)f(to)h(matc)n(h)g(the)g(n)n(umerical)227
-3285 y(t)n(yp)r(e)28 b Fm(<)p Fk(Xt)n(yp)r(e)p Fm(>)f
-Fk(of)h(the)g(data)f(y)n(ou)g(are)f(pro)r(cessing,)h(as)f(follo)n(ws:)
-340 3422 y Fj(\017)45 b Fk(D:)28 b(DOUBLE)g(PRECISION)340
-3556 y Fj(\017)45 b Fk(R:)28 b(REAL)340 3689 y Fj(\017)45
-b Fk(I:)28 b(INTEGER)227 3852 y(F)-7 b(or)18 b(example,)i(AST)p
-Ft(_)p Fk(REBIND)e(w)n(ould)g(b)r(e)h(used)f(to)h(pro)r(cess)e(DOUBLE)h
-(PRECISION)f(data,)j(while)f(AST)p Ft(_)p Fk(REBINI)227
-3951 y(w)n(ould)27 b(b)r(e)h(used)g(to)f(pro)r(cess)g(in)n(teger)g
-(data)g(\(stored)g(in)h(an)f(INTEGER)g(arra)n(y\),)f(etc.)227
-4076 y(Note)38 b(that,)i(unlik)n(e)d(AST)p Ft(_)p Fk(RESAMPLE)p
-Fm(<)p Fk(X)p Fm(>)p Fk(,)i(the)e(AST)p Ft(_)p Fk(REBIN)p
-Fm(<)p Fk(X)p Fm(>)g Fk(set)g(of)h(functions)f(do)r(es)g(not)h(y)n(et)
-227 4176 y(supp)r(ort)28 b(unsigned)f(in)n(teger)g(data)g(t)n(yp)r(es)g
-(or)g(in)n(tegers)g(of)g(di\013eren)n(t)h(sizes.)-2 4326
-y Fc(Pixel)k(Spreading)f(Sc)m(hemes)n(:)227 4472 y Fk(The)c(pixel)g
-(spreading)f(sc)n(heme)g(sp)r(eci\014es)h(the)g(P)n(oin)n(t)f(Spread)g
-(F)-7 b(unction)27 b(\(PSF\))g(applied)g(to)g(eac)n(h)f(input)i(pixel)
-227 4572 y(v)-5 b(alue)34 b(as)g(it)h(is)f(copied)g(in)n(to)g(the)h
-(output)g(arra)n(y)-7 b(.)54 b(It)35 b(can)f(b)r(e)h(though)n(t)f(of)g
-(as)f(the)i(in)n(v)n(erse)e(of)h(the)h(sub-pixel)227
-4671 y(in)n(terp)r(olation)30 b(sc)n(hemes)f(used)i(b)n(y)f(the)h(AST)p
-Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)e Fk(group)g(of)h(functions.)46
-b(That)30 b(is,)h(in)g(a)f(sub-)227 4771 y(pixel)22 b(in)n(terp)r
-(olation)e(sc)n(heme)h(the)h(k)n(ernel)e(sp)r(eci\014es)h(the)h(w)n
-(eigh)n(t)e(to)i(assign)e(to)h(eac)n(h)f(input)i(pixel)g(when)f
-(forming)227 4871 y(the)26 b(w)n(eigh)n(ted)e(mean)h(of)h(the)f(input)h
-(pixels,)g(whereas)e(the)h(k)n(ernel)g(in)g(a)g(pixel)g(spreading)f(sc)
-n(heme)h(sp)r(eci\014es)g(the)227 4970 y(fraction)18
-b(of)h(the)f(input)i(data)e(v)-5 b(alue)18 b(whic)n(h)g(is)h(to)f(b)r
-(e)h(assigned)e(to)i(eac)n(h)e(output)i(pixel.)34 b(As)19
-b(for)f(in)n(terp)r(olation,)h(the)227 5070 y(c)n(hoice)g(of)g
-(suitable)h(pixel)f(spreading)f(sc)n(heme)h(in)n(v)n(olv)n(es)f(stric)n
-(king)g(a)h(balance)g(b)r(et)n(w)n(een)h(sc)n(hemes)e(whic)n(h)i(tend)g
-(to)227 5170 y(degrade)k(sharp)g(features)h(in)g(the)g(data)g(b)n(y)g
-(smo)r(othing)f(them,)i(and)f(those)g(whic)n(h)g(attempt)g(to)g
-(preserv)n(e)f(sharp)227 5269 y(features)34 b(but)h(whic)n(h)f(often)g
-(tend)h(to)f(in)n(tro)r(duce)g(un)n(w)n(an)n(ted)f(artifacts.)56
-b(See)35 b(the)f(AST)p Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p
-Fm(>)227 5369 y Fk(do)r(cumen)n(tation)28 b(for)f(further)g
-(discussion.)227 5494 y(The)d(binning)g(algorithm)f(used)h(has)f(the)h
-(abilit)n(y)g(to)g(in)n(tro)r(duce)f(artifacts)g(not)h(seen)g(when)g
-(using)f(a)h(resampling)227 5593 y(algorithm.)45 b(P)n(articularly)-7
-b(,)28 b(when)j(viewing)f(the)h(output)g(image)f(at)g(high)g(con)n
-(trast,)g(systems)g(of)g(curv)n(es)g(lines)227 5693 y(co)n(v)n(ering)d
-(the)i(en)n(tire)g(image)f(ma)n(y)g(b)r(e)i(visible.)40
-b(These)29 b(are)f(caused)g(b)n(y)h(a)f(b)r(eating)h(e\013ect)h(b)r(et)
-n(w)n(een)e(the)i(input)p eop end
-%%Page: 308 318
-TeXDict begin 308 317 bop 0 52 a FG(308)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 351 y Fk(pixel)38
-b(p)r(ositions)g(and)f(the)i(output)f(pixels)g(p)r(osition,)i(and)e
-(their)f(nature)h(and)f(strength)h(dep)r(end)g(critically)227
-451 y(up)r(on)33 b(the)g(nature)f(of)h(the)g(Mapping)f(and)g(the)h
-(spreading)f(function)h(b)r(eing)f(used.)52 b(In)33 b(general,)g(the)g
-(nearest)227 551 y(neigh)n(b)r(our)d(spreading)f(function)i
-(demonstrates)e(this)i(e\013ect)g(more)e(clearly)g(than)i(the)g(other)e
-(functions,)j(and)227 650 y(for)27 b(this)h(reason)e(should)i(b)r(e)g
-(used)f(with)h(caution.)227 783 y(The)39 b(follo)n(wing)e(v)-5
-b(alues)38 b(\(de\014ned)h(in)f(the)h(AST)p Ft(_)p Fk(P)-7
-b(AR)38 b(include)h(\014le\))f(ma)n(y)g(b)r(e)h(assigned)e(to)h(the)h
-(SPREAD)227 883 y(parameter.)i(See)29 b(the)h(AST)p Ft(_)p
-Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)d Fk(do)r(cumen)n(tation)i(for)g
-(details)g(of)h(these)f(sc)n(hemes)f(including)227 982
-y(the)g(use)g(of)f(the)h(FSPREAD)g(and)f(P)-7 b(ARAMS)29
-b(argumen)n(ts:)340 1269 y Fj(\017)45 b Fk(AST)p Ft(__)p
-Fk(NEAREST)340 1410 y Fj(\017)g Fk(AST)p Ft(__)p Fk(LINEAR)340
-1551 y Fj(\017)g Fk(AST)p Ft(__)p Fk(SINC)340 1693 y
-Fj(\017)g Fk(AST)p Ft(__)p Fk(SINCSINC)340 1834 y Fj(\017)g
-Fk(AST)p Ft(__)p Fk(SINCCOS)340 1975 y Fj(\017)g Fk(AST)p
-Ft(__)p Fk(SINCGA)n(USS)340 2116 y Fj(\017)g Fk(AST)p
-Ft(__)p Fk(SOMBCOS)227 2295 y(In)19 b(addition,)h(the)f(follo)n(wing)e
-(sc)n(hemes)h(can)g(b)r(e)g(used)h(with)g(AST)p Ft(_)p
-Fk(REBIN)p Fm(<)p Fk(X)p Fm(>)e Fk(but)i(not)g(with)f(AST)p
-Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)p Fk(:)340 2582
-y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(GA)n(USS:)24 b(This)f(sc)n(heme)g
-(uses)g(a)g(k)n(ernel)f(of)h(the)h(form)f(exp\(-k)p Fj(\003)p
-Fk(x)p Fj(\003)p Fk(x\),)g(with)g(k)h(a)e(p)r(ositiv)n(e)h(constan)n(t)
-427 2681 y(determined)k(b)n(y)f(the)g(full-width)i(at)e(half-maxim)n
-(um)g(\(FWHM\).)h(The)g(FWHM)g(should)f(b)r(e)h(supplied)f(in)427
-2781 y(units)33 b(of)g(output)g(pixels)f(b)n(y)g(means)g(of)h(the)g(P)
--7 b(ARAMS\(2\))33 b(v)-5 b(alue)32 b(and)h(should)f(b)r(e)h(at)g
-(least)f(0.1.)51 b(The)427 2880 y(P)-7 b(ARAMS\(1\))25
-b(v)-5 b(alue)24 b(should)f(b)r(e)i(used)e(to)h(sp)r(ecify)g(at)g(what)
-g(p)r(oin)n(t)g(the)g(Gaussian)f(is)h(truncated)g(to)g(zero.)427
-2980 y(This)k(should)g(b)r(e)g(giv)n(en)f(as)g(a)h(n)n(um)n(b)r(er)g
-(of)f(output)i(pixels)f(on)f(either)h(side)g(of)g(the)g(cen)n(tral)f
-(output)h(p)r(oin)n(t)427 3080 y(in)g(eac)n(h)f(dimension)g(\(the)i
-(nearest)d(in)n(teger)h(v)-5 b(alue)28 b(is)f(used\).)-2
-3258 y Fc(Con)m(trol)32 b(Flags)n(:)227 3405 y Fk(The)24
-b(follo)n(wing)f(\015ags)g(are)g(de\014ned)h(in)g(the)g(AST)p
-Ft(_)p Fk(P)-7 b(AR)24 b(include)g(\014le)g(and)g(ma)n(y)f(b)r(e)h
-(used)g(to)g(pro)n(vide)e(additional)227 3504 y(con)n(trol)32
-b(o)n(v)n(er)e(the)j(rebinning)f(pro)r(cess.)51 b(Ha)n(ving)32
-b(selected)g(a)g(set)h(of)f(\015ags,)h(y)n(ou)f(should)g(supply)h(the)g
-(sum)g(of)227 3604 y(their)28 b(v)-5 b(alues)27 b(via)g(the)h(FLA)n(GS)
-g(argumen)n(t:)340 3890 y Fj(\017)45 b Fk(AST)p Ft(__)p
-Fk(USEBAD:)33 b(Indicates)g(that)h(there)f(ma)n(y)f(b)r(e)i(bad)f
-(pixels)f(in)i(the)f(input)h(arra)n(y\(s\))d(whic)n(h)i(m)n(ust)427
-3990 y(b)r(e)26 b(recognised)d(b)n(y)i(comparing)e(with)j(the)f(v)-5
-b(alue)25 b(giv)n(en)g(for)f(BAD)n(V)-9 b(AL)26 b(and)e(propagated)g
-(to)h(the)g(output)427 4089 y(arra)n(y\(s\).)41 b(If)30
-b(this)g(\015ag)f(is)g(not)h(set,)g(all)f(input)h(v)-5
-b(alues)30 b(are)e(treated)h(literally)g(and)h(the)g(BAD)n(V)-9
-b(AL)30 b(v)-5 b(alue)427 4189 y(is)28 b(only)f(used)h(for)f
-(\015agging)f(output)i(arra)n(y)d(v)-5 b(alues.)340 4330
-y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(USEV)-9 b(AR:)25 b(Indicates)f(that)
-g(v)-5 b(ariance)23 b(information)h(should)g(b)r(e)h(pro)r(cessed)e(in)
-i(order)e(to)h(pro)n(vide)427 4430 y(estimates)34 b(of)g(the)g
-(statistical)f(error)f(asso)r(ciated)h(with)h(the)g(rebined)g(v)-5
-b(alues.)55 b(If)35 b(this)f(\015ag)f(is)h(not)g(set,)427
-4530 y(no)c(v)-5 b(ariance)29 b(pro)r(cessing)g(will)i(o)r(ccur)e(and)i
-(the)f(IN)p Ft(_)p Fk(V)-9 b(AR)31 b(and)f(OUT)p Ft(_)p
-Fk(V)-9 b(AR)30 b(arra)n(ys)e(will)j(not)f(b)r(e)h(used.)427
-4629 y(\(Note)d(that)g(this)g(\015ag)f(is)g(only)g(a)n(v)-5
-b(ailable)27 b(in)h(the)g(F)-7 b(ortran)26 b(in)n(terface)h(to)g
-(AST.\))-2 4808 y Fc(Propagation)33 b(of)e(Missing)f(Data)n(:)227
-4954 y Fk(Instances)40 b(of)h(missing)f(data)g(\(bad)h(pixels\))g(in)f
-(the)h(output)h(grid)e(are)f(iden)n(ti\014ed)i(b)n(y)g(o)r(ccurrences)e
-(of)h(the)227 5054 y(BAD)n(V)-9 b(AL)23 b(v)-5 b(alue)22
-b(in)g(the)h(OUT)f(arra)n(y)-7 b(.)33 b(These)22 b(are)f(pro)r(duced)h
-(if)h(the)f(sum)h(of)f(the)g(w)n(eigh)n(ts)f(of)i(the)f(con)n
-(tributing)227 5153 y(input)29 b(pixels)e(is)h(less)f(than)g(WLIM.)227
-5286 y(An)22 b(input)h(pixel)e(is)h(considered)e(bad)i(\(and)f(is)h
-(consequen)n(tly)e(ignored\))h(if)h(its)g(data)f(v)-5
-b(alue)21 b(is)h(equal)f(to)g(BAD)n(V)-9 b(AL)227 5386
-y(and)28 b(the)g(AST)p Ft(__)p Fk(USEBAD)f(\015ag)g(is)h(set)f(via)g
-(the)h(FLA)n(GS)g(argumen)n(t.)227 5519 y(In)h(addition,)f(asso)r
-(ciated)f(output)i(v)-5 b(ariance)27 b(estimates)h(\(if)i(calculated\))
-e(ma)n(y)f(b)r(e)i(declared)e(bad)i(and)f(\015agged)227
-5619 y(with)g(the)g(BAD)n(V)-9 b(AL)28 b(v)-5 b(alue)28
-b(in)g(the)g(OUT)p Ft(_)p Fk(V)-9 b(AR)27 b(arra)n(y)e(for)j(similar)e
-(reasons.)p eop end
-%%Page: 309 319
-TeXDict begin 309 318 bop 3643 52 a FG(309)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(REBINSEQ)p Fb(<)p FA(X)p
-Fb(>)1515 483 y Fd(Rebin)39 b(a)f(region)1485 598 y(of)g(a)g(sequence)i
-(of)1633 712 y(data)d(grids)2461 482 y FA(AST)p Fe(_)p
-FA(REBINSEQ)p Fb(<)p FA(X)p Fb(>)0 927 y Fc(Description:)44
-b Fk(This)25 b(set)h(of)f(routines)f(is)h(iden)n(tical)g(to)g(AST)p
-Ft(_)p Fk(REBIN)p Fm(<)p Fk(X)p Fm(>)f Fk(except)h(that)h(the)f
-(rebinned)g(input)h(data)227 1027 y(is)c(added)g(in)n(to)f(the)h
-(supplied)g(output)h(arra)n(ys,)d(rather)h(than)h(simply)g(o)n(v)n
-(er-writing)d(the)j(con)n(ten)n(ts)f(of)h(the)g(output)227
-1126 y(arra)n(ys.)46 b(Th)n(us,)33 b(b)n(y)e(calling)g(this)g(routine)g
-(rep)r(eatedly)-7 b(,)33 b(a)e(sequence)g(of)g(input)h(arra)n(ys)d(can)
-i(b)r(e)h(rebinned)g(and)227 1226 y(accum)n(ulated)27
-b(in)n(to)h(a)f(single)g(output)h(arra)n(y)-7 b(,)25
-b(e\013ectiv)n(ely)j(forming)f(a)g(mosaic)g(of)g(the)h(input)g(data)g
-(arra)n(ys.)227 1363 y(In)h(addition,)g(the)g(w)n(eigh)n(ts)f(asso)r
-(ciated)f(with)j(eac)n(h)e(output)h(pixel)g(are)e(returned.)40
-b(The)29 b(w)n(eigh)n(t)f(of)h(an)f(output)227 1463 y(pixel)23
-b(indicates)f(the)h(n)n(um)n(b)r(er)g(of)f(input)i(pixels)e(whic)n(h)h
-(ha)n(v)n(e)e(b)r(een)i(accum)n(ulated)f(in)h(that)g(output)g(pixel.)35
-b(If)23 b(the)227 1563 y(en)n(tire)30 b(v)-5 b(alue)30
-b(of)h(an)f(input)h(pixel)f(is)g(assigned)f(to)i(a)e(single)h(output)h
-(pixel,)g(then)g(the)g(w)n(eigh)n(t)e(of)h(that)h(output)227
-1662 y(pixel)25 b(is)f(incremen)n(ted)h(b)n(y)f(one.)36
-b(If)25 b(some)f(fraction)g(of)g(the)h(v)-5 b(alue)25
-b(of)f(an)g(input)i(pixel)e(is)h(assigned)e(to)i(an)f(output)227
-1762 y(pixel,)k(then)g(the)g(w)n(eigh)n(t)f(of)h(that)f(output)i(pixel)
-e(is)h(incremen)n(ted)f(b)n(y)g(the)h(fraction)f(used.)227
-1900 y(The)f(start)f(of)g(a)h(new)f(sequence)g(is)h(indicated)g(b)n(y)f
-(sp)r(ecifying)g(the)h(AST)p Ft(__)p Fk(REBININIT)f(\015ag)g(via)g(the)
-h(FLA)n(GS)227 1999 y(argumen)n(t.)81 b(This)43 b(causes)f(the)h
-(supplied)g(arra)n(ys)d(to)i(b)r(e)h(\014lled)g(with)g(zeros)f(b)r
-(efore)g(the)h(rebinned)g(input)227 2099 y(data)d(is)g(added)f(in)n(to)
-h(them.)74 b(Subsequenct)41 b(in)n(v)n(o)r(cations)d(within)i(the)h
-(same)e(sequence)g(should)h(omit)g(the)227 2198 y(AST)p
-Ft(__)p Fk(REBININIT)27 b(\015ag.)227 2336 y(The)36 b(last)g(call)g(in)
-g(a)g(sequence)f(is)h(indicated)g(b)n(y)g(sp)r(ecifying)g(the)h(AST)p
-Ft(__)p Fk(REBINEND)e(\015ag.)62 b(This)36 b(causes)227
-2436 y(the)c(output)f(data)g(and)f(v)-5 b(ariance)30
-b(arra)n(ys)e(to)j(b)r(e)h(normalised)d(b)r(efore)i(b)r(eing)g
-(returned.)46 b(This)31 b(normalisation)227 2535 y(consists)j(of)g
-(dividing)h(the)g(data)f(arra)n(y)e(b)n(y)i(the)h(w)n(eigh)n(ts)f(arra)
-n(y)-7 b(,)34 b(and)g(can)g(eliminate)h(artifacts)f(whic)n(h)g(ma)n(y)
-227 2635 y(b)r(e)e(in)n(tro)r(duced)f(in)n(to)g(the)h(rebinned)f(data)g
-(as)g(a)g(consequence)f(of)i(aliasing)e(b)r(et)n(w)n(een)h(the)h(input)
-g(and)f(output)227 2734 y(grids.)55 b(Ho)n(w)n(ev)n(er,)34
-b(it)g(can)g(also)f(result)g(in)i(small)e(c)n(hanges)g(to)h(the)g
-(total)g(pixel)g(v)-5 b(alue)34 b(in)g(an)n(y)f(giv)n(en)g(area)g(of)
-227 2834 y(the)26 b(output)h(arra)n(y)-7 b(.)34 b(In)25
-b(addition)h(to)f(normalisation)f(of)i(the)g(output)g(data)g(v)-5
-b(alues,)25 b(an)n(y)g(output)h(v)-5 b(ariances)25 b(are)227
-2934 y(also)h(appropriately)f(normalised,)h(and)h(an)n(y)f(output)h
-(data)f(v)-5 b(alues)27 b(with)g(w)n(eigh)n(t)f(less)h(than)g(WLIM)g
-(are)f(set)h(to)227 3033 y(BAD)n(V)-9 b(AL.)227 3171
-y(Output)34 b(v)-5 b(ariances)32 b(can)h(b)r(e)g(generated)f(in)i(t)n
-(w)n(o)e(w)n(a)n(ys;)j(b)n(y)d(rebinning)h(the)h(supplied)f(input)h(v)
--5 b(ariances)32 b(with)227 3271 y(appropriate)21 b(w)n(eigh)n(ts,)i
-(or)f(b)n(y)g(\014nding)h(the)g(spread)f(of)g(input)i(data)e(v)-5
-b(alues)22 b(con)n(tributing)g(to)h(eac)n(h)e(output)j(pixel)227
-3370 y(\(see)k(the)g(AST)p Ft(__)p Fk(GENV)-9 b(AR)27
-b(and)h(AST)p Ft(__)p Fk(USEV)-9 b(AR)27 b(\015ags\).)0
-3546 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_REBINSEQ)p
-Fm(<)p Ft(X)p Fm(>)o Ft(\()c(THIS,)j(WLIM,)h(NDIM_IN,)e(LBND_IN,)g
-(UBND_IN,)g(IN,)j(IN_VAR,)e(SPREAD,)227 3645 y(PARAMS,)g(FLAGS,)g(TOL,)
-h(MAXPIX,)f(BADVAL,)f(NDIM_OUT,)g(LBND_OUT,)g(UBND_OUT,)g(LBND,)h
-(UBND,)h(OUT,)227 3745 y(OUT_VAR,)f(WEIGHTS,)f(NUSED,)h(STATUS)g(\))0
-3920 y Fc(Argumen)m(ts:)259 4083 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 4183 y Fk(P)n(oin)n(ter)19 b(to)h(a)f(Mapping,)j(whose)d
-(forw)n(ard)f(transformation)h(will)h(b)r(e)h(used)f(to)g(transform)f
-(the)h(co)r(ordinates)427 4282 y(of)28 b(pixels)f(in)h(the)g(input)g
-(grid)f(in)n(to)h(the)g(co)r(ordinate)e(system)h(of)h(the)g(output)g
-(grid.)427 4405 y(The)c(n)n(um)n(b)r(er)g(of)g(input)h(co)r(ordinates)e
-(used)h(b)n(y)g(this)g(Mapping)g(\(as)f(giv)n(en)h(b)n(y)f(its)i(Nin)f
-(attribute\))h(should)427 4505 y(matc)n(h)f(the)h(n)n(um)n(b)r(er)f(of)
-g(input)h(grid)f(dimensions)f(giv)n(en)h(b)n(y)g(the)g(v)-5
-b(alue)25 b(of)f(NDIM)p Ft(_)p Fk(IN)h(b)r(elo)n(w.)35
-b(Similarly)-7 b(,)427 4604 y(the)29 b(n)n(um)n(b)r(er)e(of)h(output)g
-(co)r(ordinates)f(\(Nout)h(attribute\))h(should)e(matc)n(h)h(the)g(n)n
-(um)n(b)r(er)g(of)g(output)g(grid)427 4704 y(dimensions)g(giv)n(en)e(b)
-n(y)i(NDIM)p Ft(_)p Fk(OUT.)259 4850 y Fc(WLIM)k(=)g(DOUBLE)g
-(PRECISION)g(\(Giv)m(en\))427 4949 y Fk(This)d(v)-5 b(alue)28
-b(is)h(only)f(used)g(if)i(the)f(AST)p Ft(__)p Fk(REBINEND)f(\015ag)f
-(is)i(sp)r(eci\014ed)g(via)f(the)h(FLA)n(GS)g(argumen)n(t.)427
-5049 y(It)h(giv)n(es)d(the)j(required)e(n)n(um)n(b)r(er)g(of)h(input)h
-(pixel)f(v)-5 b(alues)28 b(whic)n(h)h(m)n(ust)g(con)n(tribute)g(to)f
-(an)h(output)h(pixel)427 5149 y(\(i.e.)50 b(the)33 b(output)f(pixel)g
-(w)n(eigh)n(t\))f(in)h(order)f(for)g(the)i(output)f(pixel)g(v)-5
-b(alue)32 b(to)f(b)r(e)i(considered)d(v)-5 b(alid.)50
-b(If)427 5248 y(the)31 b(sum)f(of)g(the)h(input)g(pixel)f(w)n(eigh)n
-(ts)g(con)n(tributing)f(to)h(an)g(output)h(pixel)f(is)h(less)e(than)i
-(the)f(supplied)427 5348 y(WLIM)j(v)-5 b(alue,)35 b(then)e(the)g
-(output)g(pixel)g(v)-5 b(alue)33 b(is)g(returned)f(set)h(to)g(the)g
-(supplied)g(bad)g(v)-5 b(alue.)52 b(If)33 b(the)427 5448
-y(supplied)28 b(v)-5 b(alue)28 b(is)f(less)g(than)h(1.0E-10)d(then)j
-(1.0E-10)d(is)j(used)f(instead.)259 5593 y Fc(NDIM)p
-Ft(_)p Fc(IN)k(=)h(INTEGER)g(\(Giv)m(en\))427 5693 y
-Fk(The)c(n)n(um)n(b)r(er)f(of)h(dimensions)f(in)h(the)g(input)g(grid.)
-36 b(This)28 b(should)f(b)r(e)h(at)g(least)f(one.)p eop
-end
-%%Page: 310 320
-TeXDict begin 310 319 bop 0 52 a FG(310)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(LBND)p
-Ft(_)p Fc(IN\()h(NDIM)p Ft(_)p Fc(IN)f(\))h(=)g(INTEGER)f(\(Giv)m(en\))
-427 451 y Fk(An)j(arra)n(y)d(con)n(taining)h(the)i(co)r(ordinates)e(of)
-h(the)h(cen)n(tre)f(of)g(the)g(\014rst)h(pixel)f(in)g(the)h(input)g
-(grid)f(along)427 551 y(eac)n(h)27 b(dimension.)259 675
-y Fc(UBND)p Ft(_)p Fc(IN\()32 b(NDIM)p Ft(_)p Fc(IN)f(\))h(=)g(INTEGER)
-f(\(Giv)m(en\))427 775 y Fk(An)k(arra)n(y)d(con)n(taining)h(the)h(co)r
-(ordinates)f(of)h(the)h(cen)n(tre)f(of)g(the)g(last)g(pixel)g(in)h(the)
-f(input)h(grid)f(along)427 874 y(eac)n(h)27 b(dimension.)427
-986 y(Note)h(that)f(LBND)p Ft(_)p Fk(IN)h(and)f(UBND)p
-Ft(_)p Fk(IN)h(together)f(de\014ne)g(the)h(shap)r(e)f(and)g(size)g(of)h
-(the)g(input)g(grid,)e(its)427 1086 y(exten)n(t)33 b(along)e(a)i
-(particular)e(\(J'th\))j(dimension)e(b)r(eing)h(UBND)p
-Ft(_)p Fk(IN\(J\)-LBND)p Ft(_)p Fk(IN\(J\)+1.)52 b(They)33
-b(also)427 1186 y(de\014ne)25 b(the)f(input)i(grid's)d(co)r(ordinate)g
-(system,)i(eac)n(h)e(pixel)i(ha)n(ving)e(unit)i(exten)n(t)f(along)f
-(eac)n(h)h(dimension)427 1285 y(with)k(in)n(tegral)f(co)r(ordinate)f(v)
--5 b(alues)27 b(at)h(its)g(cen)n(tre.)259 1410 y Fc(IN\()k
-Fj(\003)f Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p Fm(>)g
-Fc(\(Giv)m(en\))427 1509 y Fk(An)k(arra)n(y)-7 b(,)36
-b(with)g(one)g(elemen)n(t)f(for)h(eac)n(h)f(pixel)g(in)h(the)g(input)h
-(grid,)g(con)n(taining)e(the)h(input)g(data)g(to)427
-1609 y(b)r(e)c(rebined.)47 b(The)32 b(n)n(umerical)e(t)n(yp)r(e)h(of)h
-(this)f(arra)n(y)e(should)i(matc)n(h)g(the)g(1-)g(or)f(2-c)n(haracter)e
-(t)n(yp)r(e)k(co)r(de)427 1709 y(app)r(ended)g(to)f(the)h(function)g
-(name)f(\(e.g.)48 b(if)32 b(y)n(ou)e(are)h(using)f(AST)p
-Ft(_)p Fk(REBINSEQR,)h(the)h(t)n(yp)r(e)f(of)g(eac)n(h)427
-1808 y(arra)n(y)26 b(elemen)n(t)h(should)h(b)r(e)g(REAL\).)427
-1920 y(The)33 b(storage)f(order)f(of)j(data)e(within)i(this)g(arra)n(y)
-c(should)j(b)r(e)h(suc)n(h)f(that)g(the)h(index)f(of)g(the)g(\014rst)g
-(grid)427 2020 y(dimension)39 b(v)-5 b(aries)39 b(most)g(rapidly)g(and)
-g(that)g(of)h(the)f(\014nal)g(dimension)h(least)f(rapidly)f(\(i.e.)73
-b(normal)427 2119 y(F)-7 b(ortran)27 b(arra)n(y)e(storage)h(order\).)
-259 2244 y Fc(IN)p Ft(_)p Fc(V)-11 b(AR\()32 b Fj(\003)f
-Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p Fm(>)g Fc(\(Giv)m(en\))427
-2344 y Fk(An)20 b(optional)e(second)h(arra)n(y)e(with)i(the)h(same)e
-(size)h(and)g(t)n(yp)r(e)g(as)g(the)g(IN)h(arra)n(y)-7
-b(.)31 b(If)20 b(giv)n(en,)g(this)f(should)g(con-)427
-2443 y(tain)g(a)f(set)g(of)h(non-negativ)n(e)e(v)-5 b(alues)18
-b(whic)n(h)g(represen)n(t)f(estimates)h(of)h(the)g(statistical)f(v)-5
-b(ariance)17 b(asso)r(ciated)427 2543 y(with)29 b(eac)n(h)f(elemen)n(t)
-h(of)g(the)g(IN)g(arra)n(y)-7 b(.)37 b(If)30 b(neither)e(the)h(AST)p
-Ft(__)p Fk(USEV)-9 b(AR)29 b(nor)f(the)h(AST)p Ft(__)p
-Fk(V)-9 b(AR)g(W)n(GT)427 2642 y(\015ag)22 b(is)h(set,)h(no)f(input)h
-(v)-5 b(ariance)22 b(estimates)g(are)g(required)g(and)h(this)g(arra)n
-(y)e(will)i(not)g(b)r(e)h(used.)35 b(A)23 b(dumm)n(y)427
-2742 y(\(e.g.)37 b(one-elemen)n(t\))27 b(arra)n(y)e(ma)n(y)i(then)h(b)r
-(e)g(supplied.)259 2866 y Fc(SPREAD)k(=)g(INTEGER)f(\(Giv)m(en\))427
-2966 y Fk(This)25 b(argumen)n(t)e(sp)r(eci\014es)i(the)g(sc)n(heme)f
-(to)g(b)r(e)h(used)g(for)f(dividing)g(eac)n(h)g(input)h(data)f(v)-5
-b(alue)25 b(up)g(amongst)427 3066 y(the)30 b(corresp)r(onding)d(output)
-j(pixels.)42 b(It)30 b(ma)n(y)e(b)r(e)i(used)f(to)h(select)f(from)g(a)g
-(set)g(of)g(pre-de\014ned)g(sc)n(hemes)427 3165 y(b)n(y)36
-b(supplying)f(one)g(of)g(the)h(v)-5 b(alues)35 b(describ)r(ed)h(in)g
-(the)f Ft(")p Fk(Pixel)g(Spreading)g(Sc)n(hemes)p Ft(")f
-Fk(section)h(in)h(the)427 3265 y(description)26 b(of)g(the)h(AST)p
-Ft(_)p Fk(REBIN)p Fm(<)p Fk(X)p Fm(>)f Fk(routines.)36
-b(If)26 b(a)g(v)-5 b(alue)27 b(of)f(zero)f(is)h(supplied,)h(then)g(the)
-g(default)427 3365 y(linear)g(spreading)f(sc)n(heme)i(is)f(used)h
-(\(equiv)-5 b(alen)n(t)27 b(to)h(supplying)f(the)h(v)-5
-b(alue)28 b(AST)p Ft(__)p Fk(LINEAR\).)259 3489 y Fc(P)-8
-b(ARAMS\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en\))
-427 3589 y Fk(An)23 b(optional)f(arra)n(y)e(whic)n(h)i(should)g(con)n
-(tain)g(an)n(y)g(additional)f(parameter)g(v)-5 b(alues)22
-b(required)g(b)n(y)g(the)h(pixel)427 3688 y(spreading)g(sc)n(heme.)36
-b(If)24 b(suc)n(h)g(parameters)f(are)g(required,)h(this)h(will)g(b)r(e)
-f(noted)h(in)f(the)h Ft(")p Fk(Pixel)f(Spreading)427
-3788 y(Sc)n(hemes)p Ft(")j Fk(section)g(in)h(the)g(description)f(of)h
-(the)g(AST)p Ft(_)p Fk(REBIN)p Fm(<)p Fk(X)p Fm(>)e Fk(routines.)427
-3900 y(If)g(no)e(additional)g(parameters)g(are)f(required,)i(this)g
-(arra)n(y)d(is)j(not)g(used.)36 b(A)25 b(dumm)n(y)g(\(e.g.)36
-b(one-elemen)n(t\))427 4000 y(arra)n(y)26 b(ma)n(y)g(then)j(b)r(e)f
-(supplied.)259 4124 y Fc(FLA)m(GS)33 b(=)f(INTEGER)f(\(Giv)m(en\))427
-4224 y Fk(The)36 b(sum)f(of)h(a)f(set)g(of)g(\015ag)g(v)-5
-b(alues)35 b(whic)n(h)g(ma)n(y)g(b)r(e)h(used)f(to)g(pro)n(vide)g
-(additional)g(con)n(trol)f(o)n(v)n(er)f(the)427 4323
-y(rebinning)d(op)r(eration.)45 b(See)31 b(the)f Ft(")p
-Fk(Con)n(trol)f(Flags)p Ft(")g Fk(section)i(b)r(elo)n(w)f(for)g(a)g
-(description)g(of)g(the)h(options)427 4423 y(a)n(v)-5
-b(ailable.)36 b(If)28 b(no)f(\015ag)g(v)-5 b(alues)27
-b(are)g(to)g(b)r(e)h(set,)g(a)f(v)-5 b(alue)28 b(of)f(zero)g(should)g
-(b)r(e)h(giv)n(en.)259 4547 y Fc(TOL)k(=)h(DOUBLE)f(PRECISION)f(\(Giv)m
-(en\))427 4647 y Fk(The)j(maxim)n(um)f(tolerable)f(geometrical)f
-(distortion)i(whic)n(h)g(ma)n(y)f(b)r(e)i(in)n(tro)r(duced)f(as)f(a)h
-(result)g(of)g(ap-)427 4747 y(pro)n(ximating)c(non-linear)f(Mappings)h
-(b)n(y)h(a)f(set)h(of)g(piece-wise)f(linear)g(transformations.)42
-b(This)30 b(should)427 4846 y(b)r(e)e(expressed)f(as)g(a)g(displacemen)
-n(t)g(in)h(pixels)f(in)h(the)g(output)g(grid's)f(co)r(ordinate)f
-(system.)427 4958 y(If)34 b(piece-wise)f(linear)g(appro)n(ximation)f
-(is)h(not)h(required,)g(a)f(v)-5 b(alue)33 b(of)h(zero)e(ma)n(y)h(b)r
-(e)h(giv)n(en.)54 b(This)33 b(will)427 5058 y(ensure)k(that)g(the)h
-(Mapping)e(is)h(used)g(without)h(an)n(y)e(appro)n(ximation,)i(but)g(ma)
-n(y)e(increase)g(execution)427 5158 y(time.)427 5270
-y(If)d(the)f(v)-5 b(alue)32 b(is)g(to)r(o)g(high,)h(discon)n(tin)n
-(uities)e(b)r(et)n(w)n(een)h(the)h(linear)e(appro)n(ximations)f(used)i
-(in)g(adjacen)n(t)427 5369 y(panel)h(will)g(b)r(e)g(higher,)h(and)f(ma)
-n(y)f(cause)g(the)i(edges)e(of)h(the)g(panel)g(to)g(b)r(e)g(visible)g
-(when)g(viewing)f(the)427 5469 y(output)c(image)f(at)h(high)f(con)n
-(trast.)36 b(If)28 b(this)g(is)f(a)g(problem,)g(reduce)h(the)g
-(tolerance)e(v)-5 b(alue)27 b(used.)259 5593 y Fc(MAXPIX)33
-b(=)f(INTEGER)f(\(Giv)m(en\))427 5693 y Fk(A)42 b(v)-5
-b(alue)40 b(whic)n(h)h(sp)r(eci\014es)g(an)g(initial)g(scale)g(size)f
-(\(in)i(pixels\))f(for)f(the)i(adaptiv)n(e)e(algorithm)g(whic)n(h)p
-eop end
-%%Page: 311 321
-TeXDict begin 311 320 bop 3643 52 a FG(311)427 351 y
-Fk(appro)n(ximates)37 b(non-linear)g(Mappings)h(with)h(piece-wise)f
-(linear)g(transformations.)68 b(Normally)-7 b(,)40 b(this)427
-451 y(should)e(b)r(e)g(a)g(large)e(v)-5 b(alue)38 b(\(larger)e(than)j
-(an)n(y)e(dimension)h(of)f(the)i(region)d(of)i(the)h(input)f(grid)g(b)r
-(eing)427 551 y(used\).)46 b(In)31 b(this)g(case,)g(a)f(\014rst)g
-(attempt)h(to)g(appro)n(ximate)e(the)i(Mapping)f(b)n(y)g(a)g(linear)g
-(transformation)427 650 y(will)e(b)r(e)g(made)f(o)n(v)n(er)f(the)i(en)n
-(tire)f(input)i(region.)427 772 y(If)k(a)f(smaller)f(v)-5
-b(alue)33 b(is)f(used,)i(the)e(input)h(region)f(will)g(\014rst)g(b)r(e)
-h(divided)g(in)n(to)f(sub-regions)e(whose)i(size)427
-871 y(do)r(es)40 b(not)g(exceed)f(MAXPIX)h(pixels)g(in)g(an)n(y)f
-(dimension.)74 b(Only)39 b(at)h(this)g(p)r(oin)n(t)g(will)g(attempts)h
-(at)427 971 y(appro)n(ximation)26 b(commence.)427 1092
-y(This)38 b(v)-5 b(alue)38 b(ma)n(y)g(o)r(ccasionally)e(b)r(e)j(useful)
-f(in)h(prev)n(en)n(ting)e(false)h(con)n(v)n(ergence)d(of)j(the)h
-(adaptiv)n(e)e(al-)427 1192 y(gorithm)c(in)g(cases)f(where)g(the)h
-(Mapping)g(app)r(ears)f(appro)n(ximately)f(linear)h(on)h(large)e
-(scales,)j(but)f(has)427 1292 y(irregularities)27 b(\(e.g.)40
-b(holes\))28 b(on)g(smaller)g(scales.)39 b(A)29 b(v)-5
-b(alue)28 b(of,)h(sa)n(y)-7 b(,)28 b(50)g(to)g(100)g(pixels)g(can)g
-(also)g(b)r(e)h(em-)427 1391 y(plo)n(y)n(ed)23 b(as)f(a)h(safeguard)f
-(in)i(general-purp)r(ose)d(soft)n(w)n(are,)i(since)g(the)h(e\013ect)f
-(on)h(p)r(erformance)e(is)h(minimal.)427 1513 y(If)e(to)r(o)f(small)g
-(a)g(v)-5 b(alue)20 b(is)g(giv)n(en,)h(it)g(will)f(ha)n(v)n(e)f(the)i
-(e\013ect)g(of)f(inhibiting)h(linear)f(appro)n(ximation)e(altogether)
-427 1613 y(\(equiv)-5 b(alen)n(t)21 b(to)f(setting)h(TOL)f(to)g
-(zero\).)34 b(Although)20 b(this)h(ma)n(y)f(degrade)f(p)r(erformance,)i
-(accurate)e(results)427 1712 y(will)28 b(still)g(b)r(e)g(obtained.)259
-1856 y Fc(BAD)m(V)-11 b(AL)34 b(=)e Fm(<)p Fc(Xt)m(yp)s(e)p
-Fm(>)f Fc(\(Giv)m(en\))427 1955 y Fk(This)i(argumen)n(t)e(should)h(ha)n
-(v)n(e)g(the)g(same)g(t)n(yp)r(e)h(as)f(the)h(elemen)n(ts)f(of)g(the)h
-(IN)g(arra)n(y)-7 b(.)49 b(It)33 b(sp)r(eci\014es)f(the)427
-2055 y(v)-5 b(alue)28 b(used)f(to)h(\015ag)f(missing)g(data)g(\(bad)h
-(pixels\))f(in)h(the)g(input)g(and)g(output)g(arra)n(ys.)427
-2176 y(If)33 b(the)f(AST)p Ft(__)p Fk(USEBAD)g(\015ag)f(is)h(set)g(via)
-f(the)i(FLA)n(GS)f(argumen)n(t,)g(then)h(this)f(v)-5
-b(alue)32 b(is)g(used)f(to)h(test)427 2276 y(for)27 b(bad)h(pixels)f
-(in)h(the)g(IN)g(\(and)g(IN)p Ft(_)p Fk(V)-9 b(AR\))28
-b(arra)n(y\(s\).)427 2398 y(In)e(all)g(cases,)f(this)h(v)-5
-b(alue)26 b(is)g(also)f(used)h(to)g(\015ag)f(an)n(y)g(output)h(elemen)n
-(ts)g(in)g(the)h(OUT)e(\(and)h(OUT)p Ft(_)p Fk(V)-9 b(AR\))427
-2497 y(arra)n(y\(s\))34 b(for)i(whic)n(h)g(rebined)g(v)-5
-b(alues)36 b(could)g(not)h(b)r(e)f(obtained)g(\(see)g(the)h
-Ft(")p Fk(Propagation)c(of)j(Missing)427 2597 y(Data)p
-Ft(")27 b Fk(section)g(b)r(elo)n(w)h(for)f(details)g(of)h(the)g
-(circumstances)e(under)i(whic)n(h)f(this)h(ma)n(y)f(o)r(ccur\).)259
-2740 y Fc(NDIM)p Ft(_)p Fc(OUT)32 b(=)g(INTEGER)f(\(Giv)m(en\))427
-2840 y Fk(The)38 b(n)n(um)n(b)r(er)f(of)g(dimensions)g(in)h(the)f
-(output)h(grid.)66 b(This)37 b(should)g(b)r(e)h(at)f(least)g(one.)65
-b(It)38 b(need)g(not)427 2939 y(necessarily)26 b(b)r(e)i(equal)f(to)h
-(the)g(n)n(um)n(b)r(er)f(of)h(dimensions)f(in)h(the)g(input)g(grid.)259
-3083 y Fc(LBND)p Ft(_)p Fc(OUT\()33 b(NDIM)p Ft(_)p Fc(OUT)e(\))h(=)g
-(INTEGER)g(\(Giv)m(en\))427 3183 y Fk(An)f(arra)n(y)d(con)n(taining)h
-(the)h(co)r(ordinates)f(of)h(the)h(cen)n(tre)e(of)h(the)h(\014rst)f
-(pixel)g(in)g(the)h(output)f(grid)g(along)427 3282 y(eac)n(h)d
-(dimension.)259 3426 y Fc(UBND)p Ft(_)p Fc(OUT\()33 b(NDIM)p
-Ft(_)p Fc(OUT)e(\))h(=)g(INTEGER)g(\(Giv)m(en\))427 3525
-y Fk(An)g(arra)n(y)c(con)n(taining)i(the)i(co)r(ordinates)d(of)i(the)h
-(cen)n(tre)e(of)h(the)h(last)e(pixel)h(in)h(the)f(output)h(grid)e
-(along)427 3625 y(eac)n(h)d(dimension.)427 3746 y(Note)41
-b(that)g(LBND)p Ft(_)p Fk(OUT)f(and)g(UBND)p Ft(_)p Fk(OUT)h(together)e
-(de\014ne)i(the)g(shap)r(e,)i(size)d(and)h(co)r(ordinate)427
-3846 y(system)24 b(of)f(the)h(output)h(grid)d(in)i(the)g(same)g(w)n(a)n
-(y)e(as)h(LBND)p Ft(_)p Fk(IN)h(and)f(UBND)p Ft(_)p Fk(IN)i(de\014ne)f
-(the)g(shap)r(e,)g(size)427 3946 y(and)k(co)r(ordinate)e(system)h(of)h
-(the)g(input)g(grid.)259 4089 y Fc(LBND\()k(NDIM)p Ft(_)p
-Fc(IN)f(\))h(=)g(INTEGER)g(\(Giv)m(en\))427 4189 y Fk(An)c(arra)n(y)c
-(con)n(taining)i(the)i(co)r(ordinates)d(of)i(the)g(\014rst)g(pixel)g
-(in)g(the)h(region)d(of)i(the)h(input)g(grid)e(whic)n(h)h(is)427
-4288 y(to)h(b)r(e)g(included)g(in)g(the)g(rebined)f(output)h(arra)n(y)
--7 b(.)259 4432 y Fc(UBND\()32 b(NDIM)p Ft(_)p Fc(IN)f(\))h(=)h
-(INTEGER)e(\(Giv)m(en\))427 4531 y Fk(An)e(arra)n(y)c(con)n(taining)i
-(the)h(co)r(ordinates)e(of)i(the)g(last)g(pixel)g(in)g(the)g(region)e
-(of)i(the)g(input)h(grid)e(whic)n(h)h(is)427 4631 y(to)g(b)r(e)g
-(included)g(in)g(the)g(rebined)f(output)h(arra)n(y)-7
-b(.)427 4753 y(Note)26 b(that)g(LBND)h(and)e(UBND)i(together)e
-(de\014ne)h(the)g(shap)r(e)g(and)g(p)r(osition)g(of)f(a)h(\(h)n(yp)r
-(er-\)rectangular)427 4852 y(region)19 b(of)i(the)f(input)h(grid)f
-(whic)n(h)g(is)g(to)h(b)r(e)f(included)h(in)g(the)f(rebined)h(output)f
-(arra)n(y)-7 b(.)33 b(This)20 b(region)f(should)427 4952
-y(lie)33 b(wholly)e(within)i(the)g(exten)n(t)f(of)g(the)h(input)g(grid)
-e(\(as)h(de\014ned)h(b)n(y)f(the)g(LBND)p Ft(_)p Fk(IN)h(and)f(UBND)p
-Ft(_)p Fk(IN)427 5051 y(arra)n(ys\).)j(Regions)26 b(of)i(the)g(input)g
-(grid)f(lying)h(outside)f(this)h(region)e(will)i(not)g(b)r(e)g(used.)
-259 5195 y Fc(OUT\()33 b Fj(\003)e Fc(\))h(=)g Fm(<)p
-Fc(Xt)m(yp)s(e)p Fm(>)f Fc(\(Giv)m(en)i(and)f(Returned\))427
-5295 y Fk(An)26 b(arra)n(y)-7 b(,)23 b(with)j(one)f(elemen)n(t)g(for)g
-(eac)n(h)f(pixel)h(in)h(the)f(output)h(grid.)35 b(The)25
-b(rebined)g(data)g(v)-5 b(alues)25 b(will)g(b)r(e)427
-5394 y(added)h(in)n(to)f(the)h(original)e(con)n(ten)n(ts)h(of)g(this)h
-(arra)n(y)-7 b(.)34 b(The)26 b(n)n(umerical)e(t)n(yp)r(e)i(of)g(this)f
-(arra)n(y)f(should)h(matc)n(h)427 5494 y(that)33 b(of)g(the)g(IN)g
-(arra)n(y)-7 b(,)32 b(and)g(the)h(data)f(storage)f(order)g(should)i(b)r
-(e)g(suc)n(h)f(that)h(the)g(index)g(of)g(the)g(\014rst)427
-5593 y(grid)27 b(dimension)h(v)-5 b(aries)27 b(most)h(rapidly)f(and)h
-(that)g(of)g(the)g(\014nal)g(dimension)g(least)f(rapidly)g(\(i.e.)39
-b(normal)427 5693 y(F)-7 b(ortran)27 b(arra)n(y)e(storage)h(order\).)p
-eop end
-%%Page: 312 322
-TeXDict begin 312 321 bop 0 52 a FG(312)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(OUT)p
-Ft(_)p Fc(V)-11 b(AR\()33 b Fj(\003)e Fc(\))h(=)g Fm(<)p
-Fc(Xt)m(yp)s(e)p Fm(>)f Fc(\(Giv)m(en)i(and)f(Returned\))427
-451 y Fk(A)f(arra)n(y)d(with)j(the)g(same)e(t)n(yp)r(e)i(and)f(size)g
-(as)g(the)g(OUT)h(arra)n(y)-7 b(.)43 b(This)30 b(arra)n(y)e(will)i
-(only)g(b)r(e)h(used)f(if)h(the)427 551 y(AST)p Ft(__)p
-Fk(USEV)-9 b(AR)36 b(or)g(AST)p Ft(__)p Fk(GENV)-9 b(AR)36
-b(\015ag)f(is)i(set)f(via)f(the)i(FLA)n(GS)g(argumen)n(t,)g(via)f(the)g
-Ft(")p Fk(\015ags)p Ft(")427 650 y Fk(parameter,)d(in)g(whic)n(h)g
-(case)f(v)-5 b(ariance)31 b(estimates)i(for)f(the)h(rebined)g(data)f(v)
--5 b(alues)33 b(will)g(b)r(e)g(added)g(in)n(to)427 750
-y(the)28 b(arra)n(y)-7 b(.)34 b(If)27 b(neither)g(the)g(AST)p
-Ft(__)p Fk(USEV)-9 b(AR)27 b(\015ag)f(nor)g(the)i(AST)p
-Ft(__)p Fk(GENV)-9 b(AR)26 b(\015ag)h(is)f(set,)h(no)g(output)427
-849 y(v)-5 b(ariance)31 b(estimates)h(will)g(b)r(e)h(calculated)e(and)h
-(this)g(arra)n(y)e(will)i(not)g(b)r(e)h(used.)50 b(A)32
-b(dumm)n(y)g(\(e.g.)50 b(one-)427 949 y(elemen)n(t\))28
-b(arra)n(y)e(ma)n(y)g(then)j(b)r(e)f(supplied.)259 1079
-y Fc(WEIGHTS\()k Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en)
-h(and)g(Returned\))427 1179 y Fk(An)24 b(arra)n(y)e(with)i(one)f(or)f
-(t)n(w)n(o)h(elemen)n(ts)h(for)f(eac)n(h)g(pixel)g(in)h(the)g(output)g
-(grid,)g(dep)r(ending)g(on)f(whether)g(or)427 1279 y(not)c(the)f(AST)p
-Ft(__)p Fk(GENV)-9 b(AR)19 b(\015ag)e(has)h(b)r(een)h(supplied)g(via)e
-(the)i(FLA)n(GS)g(parameter.)32 b(If)19 b(AST)p Ft(__)p
-Fk(GENV)-9 b(AR)427 1378 y(has)30 b(not)f(b)r(een)i(sp)r(eci\014ed)f
-(then)g(the)g(arra)n(y)e(should)h(ha)n(v)n(e)g(one)g(elemen)n(t)h(for)g
-(eac)n(h)f(output)h(pixel,)h(and)e(it)427 1478 y(will)d(b)r(e)g(used)f
-(to)h(accum)n(ulate)f(the)h(w)n(eigh)n(t)e(asso)r(ciated)h(with)h(eac)n
-(h)e(output)i(pixel.)37 b(If)26 b(AST)p Ft(__)p Fk(GENV)-9
-b(AR)427 1577 y(has)30 b(b)r(een)g(sp)r(eci\014ed)g(then)h(the)f(arra)n
-(y)e(should)h(ha)n(v)n(e)g(t)n(w)n(o)g(elemen)n(ts)h(for)f(eac)n(h)g
-(output)i(pixel.)44 b(The)30 b(\014rst)427 1677 y(half)i(of)f(the)h
-(arra)n(y)d(is)i(again)f(used)i(to)f(accum)n(ulate)g(the)g(w)n(eigh)n
-(t)g(asso)r(ciated)f(with)i(eac)n(h)f(output)h(pixel,)427
-1777 y(and)f(the)f(second)g(half)h(is)f(used)g(to)h(accum)n(ulate)e
-(the)i(square)e(of)i(the)f(w)n(eigh)n(ts.)45 b(In)30
-b(eac)n(h)g(half,)h(the)g(data)427 1876 y(storage)g(order)g(should)h(b)
-r(e)h(suc)n(h)f(that)h(the)g(index)f(of)h(the)f(\014rst)h(grid)e
-(dimension)i(v)-5 b(aries)31 b(most)h(rapidly)427 1976
-y(and)c(that)g(of)f(the)h(\014nal)g(dimension)f(least)g(rapidly)g
-(\(i.e.)37 b(normal)27 b(F)-7 b(ortran)26 b(arra)n(y)g(storage)f
-(order\).)259 2106 y Fc(NUSED)32 b(=)g(INTEGER)f(\(Giv)m(en)i(and)f
-(Returned\))427 2206 y Fk(The)i(n)n(um)n(b)r(er)g(of)f(input)i(data)e
-(v)-5 b(alues)33 b(that)h(ha)n(v)n(e)f(b)r(een)h(added)g(in)n(to)f(the)
-h(output)g(arra)n(y)e(so)h(far.)55 b(The)427 2306 y(supplied)21
-b(v)-5 b(alue)20 b(is)g(incremen)n(ted)g(on)g(exit)g(b)n(y)g(the)g(n)n
-(um)n(b)r(er)g(of)g(input)h(v)-5 b(alues)20 b(used.)34
-b(The)20 b(v)-5 b(alue)20 b(is)g(initially)427 2405 y(set)28
-b(to)f(zero)g(if)h(the)g(AST)p Ft(__)p Fk(REBININIT)f(\015ag)g(is)g
-(set)h(in)g(FLA)n(GS.)259 2535 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 2635
-y Fk(The)c(global)e(status.)-2 2794 y Fc(Data)33 b(T)m(yp)s(e)g(Co)s
-(des)n(:)227 2941 y Fk(T)-7 b(o)23 b(select)f(the)i(appropriate)d
-(rebinning)h(function,)j(y)n(ou)d(should)g(replace)g
-Fm(<)p Fk(X)p Fm(>)g Fk(in)h(the)h(generic)d(function)j(name)227
-3040 y(AST)p Ft(_)p Fk(REBINSEQ)p Fm(<)p Fk(X)p Fm(>)g
-Fk(with)i(a)f(1-)f(or)h(2-c)n(haracter)d(data)j(t)n(yp)r(e)h(co)r(de,)f
-(so)g(as)g(to)g(matc)n(h)g(the)h(n)n(umerical)e(t)n(yp)r(e)227
-3140 y Fm(<)p Fk(Xt)n(yp)r(e)p Fm(>)j Fk(of)h(the)g(data)f(y)n(ou)g
-(are)g(pro)r(cessing,)f(as)h(follo)n(ws:)340 3274 y Fj(\017)45
-b Fk(D:)28 b(DOUBLE)g(PRECISION)340 3404 y Fj(\017)45
-b Fk(R:)28 b(REAL)340 3534 y Fj(\017)45 b Fk(I:)28 b(INTEGER)227
-3694 y(F)-7 b(or)18 b(example,)i(AST)p Ft(_)p Fk(REBIND)e(w)n(ould)g(b)
-r(e)h(used)f(to)h(pro)r(cess)e(DOUBLE)h(PRECISION)f(data,)j(while)f
-(AST)p Ft(_)p Fk(REBINI)227 3793 y(w)n(ould)27 b(b)r(e)h(used)g(to)f
-(pro)r(cess)g(in)n(teger)g(data)g(\(stored)g(in)h(an)f(INTEGER)g(arra)n
-(y\),)f(etc.)227 3917 y(Note)d(that,)h(unlik)n(e)e(AST)p
-Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)p Fk(,)g(the)h(AST)p
-Ft(_)p Fk(REBINSEQ)p Fm(<)p Fk(X)p Fm(>)e Fk(set)h(of)g(functions)h(do)
-r(es)f(not)h(y)n(et)227 4016 y(supp)r(ort)28 b(unsigned)f(in)n(teger)g
-(data)g(t)n(yp)r(es)g(or)g(in)n(tegers)g(of)g(di\013eren)n(t)h(sizes.)
--2 4163 y Fc(Con)m(trol)k(Flags)n(:)227 4309 y Fk(The)24
-b(follo)n(wing)f(\015ags)g(are)g(de\014ned)h(in)g(the)g(AST)p
-Ft(_)p Fk(P)-7 b(AR)24 b(include)g(\014le)g(and)g(ma)n(y)f(b)r(e)h
-(used)g(to)g(pro)n(vide)e(additional)227 4409 y(con)n(trol)32
-b(o)n(v)n(er)e(the)j(rebinning)f(pro)r(cess.)51 b(Ha)n(ving)32
-b(selected)g(a)g(set)h(of)f(\015ags,)h(y)n(ou)f(should)g(supply)h(the)g
-(sum)g(of)227 4509 y(their)28 b(v)-5 b(alues)27 b(via)g(the)h(FLA)n(GS)
-g(argumen)n(t:)340 4766 y Fj(\017)45 b Fk(AST)p Ft(__)p
-Fk(REBININIT:)28 b(Used)g(to)f(mark)g(the)i(\014rst)e(call)h(in)g(a)g
-(sequence.)37 b(It)28 b(indicates)g(that)g(the)g(supplied)427
-4865 y(OUT,)k(OUT)p Ft(_)p Fk(V)-9 b(AR)32 b(and)f(WEIGHTS)i(arra)n(ys)
-c(should)j(b)r(e)g(\014lled)g(with)g(zeros)f(\(th)n(us)h(o)n(v)n
-(er-writing)d(an)n(y)427 4965 y(supplied)h(v)-5 b(alues\))30
-b(b)r(efore)f(adding)g(the)h(rebinned)f(input)i(data)e(in)n(to)g(them.)
-43 b(This)30 b(\015ag)e(should)i(b)r(e)g(used)427 5065
-y(when)e(rebinning)f(the)h(\014rst)g(input)g(arra)n(y)d(in)j(a)f
-(sequence.)340 5195 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(REBINEND:)34
-b(Used)h(to)g(mark)f(the)h(last)f(call)g(in)h(a)g(sequence.)57
-b(It)35 b(causes)f(eac)n(h)g(v)-5 b(alue)34 b(in)h(the)427
-5295 y(OUT)30 b(and)h(OUT)p Ft(_)p Fk(V)-9 b(AR)30 b(arra)n(ys)d(to)k
-(b)r(e)f(divided)h(b)n(y)f(a)g(normalisation)e(factor)i(b)r(efore)g(b)r
-(eing)g(returned.)427 5394 y(The)38 b(normalisation)d(factor)h(for)h
-(eac)n(h)g(output)g(data)g(v)-5 b(alue)37 b(is)g(just)h(the)g(corresp)r
-(onding)d(v)-5 b(alue)37 b(from)427 5494 y(the)32 b(w)n(eigh)n(ts)e
-(arra)n(y)-7 b(.)46 b(The)32 b(normalisation)d(factor)i(for)g(eac)n(h)f
-(output)i(v)-5 b(ariance)30 b(v)-5 b(alue)32 b(is)f(the)h(square)e(of)
-427 5593 y(the)k(data)e(v)-5 b(alue)33 b(normalisation)e(factor.)53
-b(It)33 b(also)f(causes)g(output)h(data)g(v)-5 b(alues)33
-b(to)f(b)r(e)i(set)f(bad)g(if)g(the)427 5693 y(corresp)r(onding)26
-b(w)n(eigh)n(t)i(is)g(less)f(than)i(the)f(v)-5 b(alue)28
-b(supplied)h(for)e(argumen)n(t)g(WLIM.)i(It)f(also)f(causes)g(an)n(y)p
-eop end
-%%Page: 313 323
-TeXDict begin 313 322 bop 3643 52 a FG(313)427 351 y
-Fk(temp)r(orary)25 b(v)-5 b(alues)25 b(stored)f(in)i(the)g(output)g(v)
--5 b(ariance)25 b(arra)n(y)e(\(see)i(\015ag)g(AST)p Ft(__)p
-Fk(GENV)-9 b(AR)25 b(b)r(elo)n(w\))h(to)f(b)r(e)427 451
-y(con)n(v)n(erted)h(in)n(to)i(usable)f(v)-5 b(ariance)26
-b(v)-5 b(alues.)340 593 y Fj(\017)45 b Fk(AST)p Ft(__)p
-Fk(USEBAD:)33 b(Indicates)g(that)h(there)f(ma)n(y)f(b)r(e)i(bad)f
-(pixels)f(in)i(the)f(input)h(arra)n(y\(s\))d(whic)n(h)i(m)n(ust)427
-692 y(b)r(e)26 b(recognised)d(b)n(y)i(comparing)e(with)j(the)f(v)-5
-b(alue)25 b(giv)n(en)g(for)f(BAD)n(V)-9 b(AL)26 b(and)e(propagated)g
-(to)h(the)g(output)427 792 y(arra)n(y\(s\).)41 b(If)30
-b(this)g(\015ag)f(is)g(not)h(set,)g(all)f(input)h(v)-5
-b(alues)30 b(are)e(treated)h(literally)g(and)h(the)g(BAD)n(V)-9
-b(AL)30 b(v)-5 b(alue)427 892 y(is)28 b(only)f(used)h(for)f(\015agging)
-f(output)i(arra)n(y)d(v)-5 b(alues.)340 1034 y Fj(\017)45
-b Fk(AST)p Ft(__)p Fk(USEV)-9 b(AR:)36 b(Indicates)g(that)g(output)h(v)
--5 b(ariance)35 b(estimates)h(should)f(b)r(e)i(created)e(b)n(y)h
-(rebinning)427 1133 y(the)g(supplied)f(input)h(v)-5 b(ariance)33
-b(estimates.)59 b(An)35 b(error)e(will)j(b)r(e)f(rep)r(orted)f(if)i(b)r
-(oth)f(this)g(\015ag)f(and)h(the)427 1233 y(AST)p Ft(__)p
-Fk(GENV)-9 b(AR)28 b(\015ag)f(are)f(supplied.)340 1375
-y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(GENV)-9 b(AR:)33 b(Indicates)g(that)
-h(output)f(v)-5 b(ariance)32 b(estimates)h(should)g(b)r(e)g(created)g
-(based)f(on)h(the)427 1475 y(spread)19 b(of)h(input)h(data)e(v)-5
-b(alues)19 b(con)n(tributing)h(to)f(eac)n(h)g(output)i(pixel.)34
-b(An)20 b(error)e(will)i(b)r(e)h(rep)r(orted)e(if)h(b)r(oth)427
-1574 y(this)29 b(\015ag)e(and)h(the)h(AST)p Ft(__)p Fk(USEV)-9
-b(AR)28 b(\015ag)f(are)g(supplied.)39 b(If)29 b(the)g(AST)p
-Ft(__)p Fk(GENV)-9 b(AR)28 b(\015ag)f(is)h(sp)r(eci\014ed,)427
-1674 y(the)e(supplied)g(output)h(v)-5 b(ariance)24 b(arra)n(y)g(is)h
-(\014rst)h(used)f(as)g(a)h(w)n(ork)e(arra)n(y)f(to)j(accum)n(ulate)f
-(the)h(temp)r(orary)427 1773 y(v)-5 b(alues)33 b(needed)h(to)f
-(generate)g(the)h(output)g(v)-5 b(ariances.)53 b(When)34
-b(the)g(sequence)f(ends)g(\(as)g(indicated)h(b)n(y)427
-1873 y(the)24 b(AST)p Ft(__)p Fk(REBINEND)e(\015ag\),)i(the)f(con)n
-(ten)n(ts)f(of)h(the)h(output)f(v)-5 b(ariance)22 b(arra)n(y)f(are)h
-(con)n(v)n(erted)f(in)n(to)i(the)427 1973 y(required)29
-b(v)-5 b(ariance)29 b(estimates.)44 b(If)30 b(the)h(generation)d(of)i
-(suc)n(h)g(output)g(v)-5 b(ariances)29 b(is)g(required,)h(this)g
-(\015ag)427 2072 y(should)c(b)r(e)g(used)g(on)f(ev)n(ery)g(in)n(v)n(o)r
-(cation)f(of)i(this)g(routine)f(within)i(a)e(sequence,)h(and)g(an)n(y)f
-(supplied)h(input)427 2172 y(v)-5 b(ariances)31 b(will)h(ha)n(v)n(e)f
-(no)g(e\013ect)i(on)f(the)g(output)g(v)-5 b(ariances)31
-b(\(although)g(input)i(v)-5 b(ariances)31 b(will)h(still)g(b)r(e)427
-2272 y(used)c(to)f(w)n(eigh)n(t)g(the)h(input)h(data)e(if)h(the)g(AST)p
-Ft(__)p Fk(V)-9 b(AR)g(W)n(GT)27 b(\015ag)g(is)h(also)e(supplied\).)340
-2414 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(V)-9 b(AR)g(W)n(GT:)29
-b(Indicates)f(that)h(the)g(input)g(data)f(should)h(b)r(e)g(w)n(eigh)n
-(ted)f(b)n(y)g(the)h(recipro)r(cal)e(of)h(the)427 2513
-y(input)e(v)-5 b(ariances.)35 b(Otherwise,)25 b(all)g(input)h(data)f
-(are)g(giv)n(en)f(equal)h(w)n(eigh)n(t.)36 b(If)25 b(this)h(\015ag)f
-(is)g(sp)r(eci\014ed,)h(the)427 2613 y(calculation)e(of)h(the)g(output)
-g(v)-5 b(ariances)23 b(\(if)i(an)n(y\))g(is)f(mo)r(di\014ed)h(to)g(tak)
-n(e)f(accoun)n(t)f(of)i(the)g(v)-5 b(arying)24 b(w)n(eigh)n(ts)427
-2712 y(assigned)j(to)g(the)h(input)h(data)e(v)-5 b(alues.)-2
-2893 y Fc(Propagation)33 b(of)e(Missing)f(Data)n(:)227
-3039 y Fk(Instances)40 b(of)h(missing)f(data)g(\(bad)h(pixels\))g(in)f
-(the)h(output)h(grid)e(are)f(iden)n(ti\014ed)i(b)n(y)g(o)r(ccurrences)e
-(of)h(the)227 3138 y(BAD)n(V)-9 b(AL)39 b(v)-5 b(alue)39
-b(in)f(the)h(OUT)g(arra)n(y)-7 b(.)67 b(These)38 b(are)g(only)g(pro)r
-(duced)g(if)h(the)g(AST)p Ft(__)p Fk(REBINEND)f(\015ag)g(is)227
-3238 y(sp)r(eci\014ed)28 b(and)g(a)f(pixel)g(has)g(zero)g(w)n(eigh)n
-(t.)227 3372 y(An)22 b(input)h(pixel)e(is)h(considered)e(bad)i(\(and)f
-(is)h(consequen)n(tly)e(ignored\))h(if)h(its)g(data)f(v)-5
-b(alue)21 b(is)h(equal)f(to)g(BAD)n(V)-9 b(AL)227 3471
-y(and)28 b(the)g(AST)p Ft(__)p Fk(USEBAD)f(\015ag)g(is)h(set)f(via)g
-(the)h(FLA)n(GS)g(argumen)n(t.)227 3605 y(In)h(addition,)f(asso)r
-(ciated)f(output)i(v)-5 b(ariance)27 b(estimates)h(\(if)i(calculated\))
-e(ma)n(y)f(b)r(e)i(declared)e(bad)i(and)f(\015agged)227
-3705 y(with)g(the)g(BAD)n(V)-9 b(AL)28 b(v)-5 b(alue)28
-b(in)g(the)g(OUT)p Ft(_)p Fk(V)-9 b(AR)27 b(arra)n(y)e(for)j(similar)e
-(reasons.)p 0 3922 3780 12 v 0 4053 a FA(AST)p Fe(_)p
-FA(REMAPFRAME)1659 4054 y Fd(Mo)s(dify)38 b(a)1690 4168
-y(F)-10 b(rame's)1519 4268 y(relationship)36 b(to)1554
-4383 y(other)h(F)-10 b(rames)1531 4482 y(in)39 b(a)f(F)-10
-b(rameSet)2436 4053 y FA(AST)p Fe(_)p FA(REMAPFRAME)0
-4671 y Fc(Description:)44 b Fk(This)39 b(routine)f(mo)r(di\014es)h(the)
-g(relationship)f(\(i.e.)71 b(Mapping\))39 b(b)r(et)n(w)n(een)f(a)h(sp)r
-(eci\014ed)g(F)-7 b(rame)38 b(in)h(a)227 4770 y(F)-7
-b(rameSet)28 b(and)f(the)h(other)f(F)-7 b(rames)27 b(in)h(that)g(F)-7
-b(rameSet.)227 4904 y(T)n(ypically)g(,)31 b(this)f(migh)n(t)g(b)r(e)h
-(required)f(if)g(the)h(F)-7 b(rameSet)30 b(has)g(b)r(een)h(used)f(to)g
-(calibrate)g(\(sa)n(y\))f(an)h(image,)h(and)227 5004
-y(that)h(image)e(is)h(re-binned.)48 b(The)31 b(F)-7 b(rame)30
-b(describing)h(the)g(image)g(will)g(then)h(ha)n(v)n(e)e(undergone)g(a)h
-(co)r(ordinate)227 5103 y(transformation,)26 b(and)i(this)g(should)f(b)
-r(e)h(comm)n(unicated)f(to)h(the)g(asso)r(ciated)e(F)-7
-b(rameSet)27 b(using)g(this)h(routine.)0 5271 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(CALL)42 b(AST_REMAPFRAME\()37 b(THIS,)42
-b(IFRAME,)e(MAP,)i(STATUS)f(\))0 5439 y Fc(Argumen)m(ts:)259
-5593 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 5693
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7 b(rameSet.)p
-eop end
-%%Page: 314 324
-TeXDict begin 314 323 bop 0 52 a FG(314)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(IFRAME)g(=)h(INTEGER)
-g(\(Giv)m(en\))427 451 y Fk(The)i(index)h(within)g(the)f(F)-7
-b(rameSet)34 b(of)g(the)h(F)-7 b(rame)33 b(to)h(b)r(e)h(mo)r(di\014ed.)
-57 b(This)34 b(v)-5 b(alue)34 b(should)g(lie)g(in)g(the)427
-551 y(range)27 b(from)g(1)g(to)g(the)h(n)n(um)n(b)r(er)g(of)f(F)-7
-b(rames)27 b(in)h(the)g(F)-7 b(rameSet)27 b(\(as)h(giv)n(en)e(b)n(y)i
-(its)f(Nframe)h(attribute\).)259 685 y Fc(MAP)k(=)g(INTEGER)f(\(Giv)m
-(en\))427 784 y Fk(P)n(oin)n(ter)38 b(to)i(a)f(Mapping)g(whose)g(forw)n
-(ard)f(transformation)g(con)n(v)n(erts)g(co)r(ordinate)h(v)-5
-b(alues)39 b(from)g(the)427 884 y(original)27 b(co)r(ordinate)f(system)
-i(describ)r(ed)f(b)n(y)h(the)g(F)-7 b(rame)27 b(to)h(the)g(new)g(one,)g
-(and)f(whose)g(in)n(v)n(erse)g(trans-)427 984 y(formation)g(con)n(v)n
-(erts)f(in)i(the)g(opp)r(osite)f(direction.)259 1118
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 1217 y Fk(The)c(global)e(status.)0 1382 y Fc(Notes:)340
-1667 y Fj(\017)45 b Fk(A)32 b(v)-5 b(alue)31 b(of)g(AST)p
-Ft(__)p Fk(BASE)f(or)g(AST)p Ft(__)p Fk(CURRENT)h(ma)n(y)g(b)r(e)g(giv)
-n(en)f(for)h(the)g(IFRAME)h(argumen)n(t)e(to)427 1767
-y(sp)r(ecify)e(the)g(base)f(F)-7 b(rame)27 b(or)g(the)h(curren)n(t)f(F)
--7 b(rame)27 b(resp)r(ectiv)n(ely)-7 b(.)340 1901 y Fj(\017)45
-b Fk(The)29 b(relationship)e(b)r(et)n(w)n(een)h(the)h(selected)f(F)-7
-b(rame)28 b(and)g(an)n(y)g(other)g(F)-7 b(rame)28 b(within)h(the)f(F)-7
-b(rameSet)28 b(will)427 2000 y(b)r(e)j(mo)r(di\014ed)g(b)n(y)g(this)f
-(routine,)h(but)h(the)f(relationship)e(b)r(et)n(w)n(een)i(all)f(other)g
-(F)-7 b(rames)30 b(in)h(the)g(F)-7 b(rameSet)427 2100
-y(remains)27 b(unc)n(hanged.)340 2234 y Fj(\017)45 b
-Fk(The)27 b(n)n(um)n(b)r(er)g(of)g(input)h(co)r(ordinate)e(v)-5
-b(alues)27 b(accepted)g(b)n(y)f(the)i(Mapping)f(\(its)g(Nin)h
-(attribute\))f(and)g(the)427 2334 y(n)n(um)n(b)r(er)j(of)g(output)g(co)
-r(ordinate)f(v)-5 b(alues)30 b(generated)f(\(its)h(Nout)g(attribute\))h
-(m)n(ust)f(b)r(e)g(equal)g(and)f(m)n(ust)427 2433 y(matc)n(h)f(the)g(n)
-n(um)n(b)r(er)f(of)h(axes)e(in)i(the)g(F)-7 b(rame)27
-b(b)r(eing)h(mo)r(di\014ed.)340 2568 y Fj(\017)45 b Fk(If)26
-b(a)f(simple)h(c)n(hange)e(of)i(axis)f(order)f(is)h(required,)g(then)h
-(the)g(AST)p Ft(_)p Fk(PERMAXES)f(routine)g(ma)n(y)g(pro)n(vide)427
-2667 y(a)i(more)g(straigh)n(tforw)n(ard)e(metho)r(d)j(of)g(making)e
-(the)i(required)f(c)n(hanges)f(to)i(the)g(F)-7 b(rameSet.)340
-2801 y Fj(\017)45 b Fk(This)34 b(routine)f(cannot)g(b)r(e)h(used)f(to)h
-(c)n(hange)e(the)i(n)n(um)n(b)r(er)f(of)h(F)-7 b(rame)33
-b(axes.)54 b(T)-7 b(o)33 b(ac)n(hiev)n(e)f(this,)j(a)f(new)427
-2901 y(F)-7 b(rame)26 b(m)n(ust)g(b)r(e)h(added)f(to)g(the)g(F)-7
-b(rameSet)26 b(\(AST)p Ft(_)p Fk(ADDFRAME\))i(and)e(the)g(original)f
-(one)h(remo)n(v)n(ed)e(if)427 3001 y(necessary)i(\(AST)p
-Ft(_)p Fk(REMO)n(VEFRAME\).)p 0 3202 3780 12 v 0 3333
-a FA(AST)p Fe(_)p FA(REMO)l(VEFRAME)201 b Fd(Remo)m(v)m(e)38
-b(a)1591 3432 y(F)-10 b(rame)39 b(from)1600 3532 y(a)f(F)-10
-b(rameSet)2343 3333 y FA(AST)p Fe(_)p FA(REMO)l(VEFRAME)0
-3700 y Fc(Description:)44 b Fk(This)30 b(routine)f(remo)n(v)n(es)e(a)i
-(F)-7 b(rame)29 b(from)g(a)g(F)-7 b(rameSet.)41 b(All)30
-b(other)f(F)-7 b(rames)28 b(in)i(the)g(F)-7 b(rameSet)29
-b(ha)n(v)n(e)227 3800 y(their)f(indices)f(re-n)n(um)n(b)r(ered)g(from)g
-(one)g(\(if)i(necessary\),)d(but)i(are)f(otherwise)f(unc)n(hanged.)0
-3952 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_REMOVEFRAME)o(\()
-c(THIS,)j(IFRAME,)g(STATUS)g(\))0 4104 y Fc(Argumen)m(ts:)259
-4243 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 4343
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7 b(rameSet.)259
-4477 y Fc(IFRAME)31 b(=)h(INTEGER)g(\(Giv)m(en\))427
-4577 y Fk(The)j(index)g(within)g(the)g(F)-7 b(rameSet)34
-b(of)h(the)g(F)-7 b(rame)34 b(to)h(b)r(e)g(remo)n(v)n(ed.)56
-b(This)35 b(v)-5 b(alue)34 b(should)h(lie)f(in)h(the)427
-4676 y(range)27 b(from)g(1)g(to)g(the)h(n)n(um)n(b)r(er)g(of)f(F)-7
-b(rames)27 b(in)h(the)g(F)-7 b(rameSet)27 b(\(as)h(giv)n(en)e(b)n(y)i
-(its)f(Nframe)h(attribute\).)259 4810 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 4910
-y Fk(The)c(global)e(status.)0 5074 y Fc(Notes:)340 5360
-y Fj(\017)45 b Fk(Remo)n(ving)31 b(a)g(F)-7 b(rame)31
-b(from)g(a)g(F)-7 b(rameSet)32 b(do)r(es)f(not)h(a\013ect)f(the)h
-(relationship)f(b)r(et)n(w)n(een)g(other)g(F)-7 b(rames)427
-5459 y(in)28 b(the)g(F)-7 b(rameSet,)28 b(ev)n(en)f(if)h(they)g
-(originally)d(dep)r(ended)k(on)e(the)h(F)-7 b(rame)27
-b(b)r(eing)h(remo)n(v)n(ed.)340 5593 y Fj(\017)45 b Fk(The)31
-b(n)n(um)n(b)r(er)g(of)g(F)-7 b(rames)30 b(in)i(a)e(F)-7
-b(rameSet)31 b(cannot)g(b)r(e)g(reduced)g(to)g(zero.)46
-b(An)31 b(error)e(will)j(result)e(if)i(an)427 5693 y(attempt)d(is)e
-(made)g(to)h(remo)n(v)n(e)e(the)i(only)f(remaining)g(F)-7
-b(rame.)p eop end
-%%Page: 315 325
-TeXDict begin 315 324 bop 3643 52 a FG(315)340 351 y
-Fj(\017)45 b Fk(A)32 b(v)-5 b(alue)31 b(of)g(AST)p Ft(__)p
-Fk(BASE)f(or)g(AST)p Ft(__)p Fk(CURRENT)h(ma)n(y)g(b)r(e)g(giv)n(en)f
-(for)h(the)g(IFRAME)h(argumen)n(t)e(to)427 451 y(sp)r(ecify)e(the)g
-(base)f(F)-7 b(rame)27 b(or)g(the)h(curren)n(t)f(F)-7
-b(rame)27 b(resp)r(ectiv)n(ely)-7 b(.)340 578 y Fj(\017)45
-b Fk(If)22 b(a)f(F)-7 b(rameSet's)21 b(base)f(or)h(curren)n(t)f(F)-7
-b(rame)21 b(is)g(remo)n(v)n(ed,)g(the)g(Base)g(or)f(Curren)n(t)h
-(attribute)g(\(resp)r(ectiv)n(ely\))427 678 y(of)30 b(the)g(F)-7
-b(rameSet)30 b(will)g(ha)n(v)n(e)f(its)h(v)-5 b(alue)30
-b(cleared,)f(so)g(that)i(another)d(F)-7 b(rame)30 b(will)g(then)g
-(assume)f(its)i(role)427 778 y(b)n(y)d(default.)340 905
-y Fj(\017)45 b Fk(If)26 b(an)n(y)f(other)g(F)-7 b(rame)25
-b(is)g(remo)n(v)n(ed,)f(the)i(base)f(and)g(curren)n(t)g(F)-7
-b(rames)24 b(will)i(remain)f(the)h(same.)35 b(T)-7 b(o)25
-b(ensure)427 1005 y(this,)37 b(the)d(Base)g(and/or)e(Curren)n(t)i
-(attributes)g(of)g(the)h(F)-7 b(rameSet)34 b(will)h(b)r(e)f(c)n
-(hanged,)i(if)e(necessary)-7 b(,)35 b(to)427 1104 y(re\015ect)28
-b(an)n(y)e(c)n(hange)h(in)h(the)g(indices)f(of)h(these)f(F)-7
-b(rames.)p 0 1293 3780 12 v 0 1423 a FA(AST)p Fe(_)p
-FA(REMO)l(VEREGIONS)1712 1441 y Fd(Remo)m(v)m(e)1799
-1541 y(an)m(y)1801 1654 y(Re-)1759 1753 y(gions)1722
-1868 y(from)38 b(a)1755 1968 y(Map-)1779 2079 y(ping)2220
-1423 y FA(AST)p Fe(_)p FA(REMO)l(VEREGIONS)0 2261 y Fc(Description:)44
-b Fk(This)33 b(function)g(searc)n(hes)e(the)i(suppliedMapping)g(\(whic)
-n(h)g(ma)n(y)f(b)r(e)h(a)f(comp)r(ound)h(Mapping)f(suc)n(h)227
-2361 y(as)d(a)g(CmpMap\))g(for)g(an)n(y)f(comp)r(onen)n(t)h(Mappings)g
-(that)g(are)f(instances)h(of)g(the)h(AST)f(Region)g(class.)41
-b(It)29 b(then)227 2460 y(creates)f(a)h(new)g(Mapping)f(from)h(whic)n
-(h)g(all)f(Regions)g(ha)n(v)n(e)g(b)r(een)h(remo)n(v)n(ed.)40
-b(If)29 b(a)f(Region)h(cannot)f(simply)h(b)r(e)227 2560
-y(remo)n(v)n(ed)34 b(\(for)i(instance,)h(if)f(it)g(is)f(a)g(comp)r
-(onen)n(t)h(of)f(a)g(parallel)g(CmpMap\),)j(then)e(it)g(is)f(replaced)g
-(with)h(an)227 2660 y(equiv)-5 b(alen)n(t)28 b(UnitMap)g(in)g(the)g
-(returned)f(Mapping.)0 2804 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_REMOVEREGION)o(S\()37 b(THIS,)42
-b(STATUS)f(\))0 2948 y Fc(Argumen)m(ts:)259 3079 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 3178 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(original)e(Mapping.)259 3306 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-3405 y Fk(The)c(global)e(status.)0 3562 y Fc(Class)31
-b(Applicabilit)m(y:)259 3693 y(CmpF)-8 b(rame)427 3793
-y Fk(If)35 b(the)f(supplied)g(Mapping)g(is)g(a)f(CmpF)-7
-b(rame,)36 b(an)n(y)d(comp)r(onen)n(t)g(F)-7 b(rames)34
-b(that)g(are)f(instances)g(of)h(the)427 3892 y(Region)27
-b(class)g(are)f(replaced)h(b)n(y)g(the)h(equiv)-5 b(alen)n(t)28
-b(F)-7 b(rame.)259 4020 y Fc(F)f(rameSet)427 4119 y Fk(If)29
-b(the)f(supplied)g(Mapping)g(is)f(a)h(F)-7 b(rameSet,)28
-b(the)g(returned)g(Mapping)f(will)h(b)r(e)h(a)e(cop)n(y)g(of)h(the)g
-(supplied)427 4219 y(F)-7 b(rameSet)29 b(in)g(whic)n(h)g(Regions)f(ha)n
-(v)n(e)g(b)r(een)i(remo)n(v)n(ed)d(from)i(all)g(the)g(in)n(ter-F)-7
-b(rame)28 b(Mappings,)h(and)f(an)n(y)427 4319 y(F)-7
-b(rames)27 b(whic)n(h)h(are)e(instances)h(of)h(the)g(Region)f(class)f
-(are)h(repalced)g(b)n(y)g(the)h(equiv)-5 b(alen)n(t)27
-b(F)-7 b(rame.)259 4446 y Fc(Mapping)427 4546 y Fk(This)28
-b(function)g(applies)f(to)h(all)f(Mappings.)259 4673
-y Fc(Region)427 4773 y Fk(If)h(the)g(supplied)g(Mapping)f(is)h(a)f
-(Region,)g(the)h(returned)f(Mapping)g(will)h(b)r(e)g(the)g(equiv)-5
-b(alen)n(t)28 b(F)-7 b(rame.)0 4929 y Fc(Returned)32
-b(V)-8 b(alue:)259 5060 y(AST)p Ft(_)p Fc(REMO)m(VEREGIONS)30
-b(=)i(INTEGER)427 5160 y Fk(A)c(new)g(p)r(oin)n(ter)f(to)h(the)g(\(p)r
-(ossibly)f(mo)r(di\014ed\))h(Mapping.)0 5316 y Fc(Notes:)340
-5593 y Fj(\017)45 b Fk(This)22 b(function)f(can)g(safely)g(b)r(e)h
-(applied)f(ev)n(en)g(to)g(Mappings)f(whic)n(h)i(con)n(tain)e(no)h
-(Regions.)34 b(If)22 b(no)f(Regions)427 5693 y(are)f(found,)i(it)f(b)r
-(eha)n(v)n(es)e(exactly)h(lik)n(e)g(AST)p Ft(_)p Fk(CLONE)f(and)h
-(returns)g(a)g(p)r(oin)n(ter)g(to)g(the)h(original)e(Mapping.)p
-eop end
-%%Page: 316 326
-TeXDict begin 316 325 bop 0 52 a FG(316)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(The)26 b(Mapping)f(returned)g(b)n(y)g(this)h(function)g(ma)n(y)e
-(not)i(b)r(e)g(indep)r(enden)n(t)g(of)f(the)h(original)e(\(ev)n(en)h
-(if)h(some)427 451 y(Regions)37 b(w)n(ere)g(remo)n(v)n(ed\),)i(and)f
-(mo)r(difying)g(it)g(ma)n(y)f(therefore)g(result)g(in)h(indirect)g(mo)r
-(di\014cation)g(of)427 551 y(the)e(original.)58 b(If)35
-b(a)g(completely)g(indep)r(enden)n(t)h(result)f(is)g(required,)h(a)f
-(cop)n(y)f(should)h(b)r(e)h(made)f(using)427 650 y(AST)p
-Ft(_)p Fk(COPY.)340 785 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 885 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28
-b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 1088 3780 12 v 0 1219 a FA(AST)p Fe(_)p FA(RESAMPLE)p
-Fb(<)p FA(X)p Fb(>)1596 1220 y Fd(Resample)38 b(a)1618
-1334 y(region)f(of)i(a)1656 1449 y(data)e(grid)2411 1219
-y FA(AST)p Fe(_)p FA(RESAMPLE)p Fb(<)p FA(X)p Fb(>)0
-1646 y Fc(Description:)44 b Fk(This)31 b(is)g(a)f(set)h(of)g(functions)
-g(for)f(resampling)g(gridded)g(data)h(\(e.g.)46 b(an)31
-b(image\))f(under)h(the)g(con)n(trol)227 1746 y(of)c(a)e(geometrical)g
-(transformation,)g(whic)n(h)h(is)g(sp)r(eci\014ed)h(b)n(y)f(a)g
-(Mapping.)36 b(The)26 b(functions)h(op)r(erate)e(on)h(a)g(pair)227
-1845 y(of)i(data)f(grids)f(\(input)j(and)f(output\),)g(eac)n(h)f(of)g
-(whic)n(h)h(ma)n(y)f(ha)n(v)n(e)f(an)n(y)h(n)n(um)n(b)r(er)g(of)h
-(dimensions.)36 b(Resampling)227 1945 y(ma)n(y)c(b)r(e)g(restricted)g
-(to)g(a)g(sp)r(eci\014ed)h(region)d(of)j(the)f(output)h(grid.)50
-b(An)33 b(asso)r(ciated)e(grid)g(of)i(error)d(estimates)227
-2045 y(asso)r(ciated)36 b(with)h(the)g(input)h(data)e(ma)n(y)g(also)g
-(b)r(e)h(supplied)g(\(in)g(the)h(form)e(of)h(v)-5 b(ariance)35
-b(v)-5 b(alues\),)39 b(so)e(as)f(to)227 2144 y(pro)r(duce)29
-b(error)f(estimates)h(for)g(the)h(resampled)e(output)i(data.)42
-b(Propagation)27 b(of)i(missing)g(data)g(\(bad)h(pixels\))227
-2244 y(is)e(supp)r(orted.)227 2370 y(Y)-7 b(ou)29 b(should)g(use)g(a)f
-(resampling)g(function)h(whic)n(h)g(matc)n(hes)g(the)g(n)n(umerical)f
-(t)n(yp)r(e)h(of)g(the)g(data)g(y)n(ou)f(are)g(pro-)227
-2470 y(cessing)c(b)n(y)h(replacing)f Fm(<)p Fk(X)p Fm(>)g
-Fk(in)h(the)h(generic)d(function)j(name)f(AST)p Ft(_)p
-Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)e Fk(b)n(y)i(an)f(appropriate)227
-2570 y(1-)i(or)f(2-c)n(haracter)f(t)n(yp)r(e)j(co)r(de.)36
-b(F)-7 b(or)26 b(example,)g(if)h(y)n(ou)f(are)f(resampling)g(data)h
-(with)h(t)n(yp)r(e)g(REAL,)f(y)n(ou)g(should)227 2669
-y(use)38 b(the)g(function)g(AST)p Ft(_)p Fk(RESAMPLER)e(\(see)i(the)g
-Ft(")p Fk(Data)f(T)n(yp)r(e)g(Co)r(des)p Ft(")g Fk(section)g(b)r(elo)n
-(w)g(for)g(the)h(co)r(des)227 2769 y(appropriate)26 b(to)i(other)f(n)n
-(umerical)f(t)n(yp)r(es\).)227 2895 y(Resampling)f(of)h(the)f(grid)g
-(of)h(input)g(data)f(is)g(p)r(erformed)g(b)n(y)h(transforming)e(the)h
-(co)r(ordinates)f(of)i(the)g(cen)n(tre)f(of)227 2995
-y(eac)n(h)d(output)g(grid)g(elemen)n(t)g(\(or)g(pixel\))g(in)n(to)g
-(the)h(co)r(ordinate)e(system)h(of)g(the)h(input)g(grid.)34
-b(Since)23 b(the)f(resulting)227 3095 y(co)r(ordinates)27
-b(will)h(not,)g(in)g(general,)f(coincide)h(with)g(the)h(cen)n(tre)e(of)
-h(an)g(input)h(pixel,)f(sub-pixel)f(in)n(terp)r(olation)227
-3194 y(is)35 b(p)r(erformed)g(b)r(et)n(w)n(een)g(the)h(neigh)n(b)r
-(ouring)e(input)i(pixels.)60 b(This)35 b(pro)r(duces)f(a)h(resampled)f
-(v)-5 b(alue)36 b(whic)n(h)f(is)227 3294 y(then)26 b(assigned)d(to)i
-(the)g(output)g(pixel.)36 b(A)26 b(c)n(hoice)e(of)g(sub-pixel)h(in)n
-(terp)r(olation)f(sc)n(hemes)g(is)h(pro)n(vided,)f(but)h(y)n(ou)227
-3394 y(ma)n(y)i(also)g(implemen)n(t)h(y)n(our)e(o)n(wn.)227
-3520 y(This)g(algorithm)f(samples)h(the)h(input)g(data)e(v)-5
-b(alue,)27 b(it)f(do)r(es)g(not)g(in)n(tegrate)f(it.)37
-b(Th)n(us)26 b(total)g(data)g(v)-5 b(alue)26 b(in)g(the)227
-3620 y(input)31 b(image)f(will)h(not,)g(in)f(general,)g(b)r(e)h
-(conserv)n(ed.)43 b(Ho)n(w)n(ev)n(er,)30 b(an)g(option)g(is)g(pro)n
-(vided)f(\(see)i(the)f Ft(")p Fk(Con)n(trol)227 3719
-y(Flags)p Ft(")38 b Fk(section)h(b)r(elo)n(w\))g(whic)n(h)h(can)e(pro)r
-(duce)h(appro)n(ximate)f(\015ux)h(conserv)-5 b(ation)38
-b(b)n(y)h(scaling)f(the)i(output)227 3819 y(v)-5 b(alues)34
-b(using)f(the)h(ratio)f(of)h(the)g(output)h(pixel)f(size)f(to)h(the)g
-(input)h(pixel)f(size.)55 b(Ho)n(w)n(ev)n(er,)34 b(if)g(accurate)e
-(\015ux)227 3919 y(conserv)-5 b(ation)28 b(is)h(imp)r(ortan)n(t)g(to)g
-(y)n(ou,)g(consder)f(using)g(the)i(AST)p Ft(_)p Fk(REBIN)p
-Fm(<)p Fk(X)p Fm(>)e Fk(or)g(AST)p Ft(_)p Fk(REBINSEQ)p
-Fm(<)p Fk(X)p Fm(>)227 4018 y Fk(family)g(of)g(routines)e(instead.)227
-4145 y(Output)32 b(pixel)g(co)r(ordinates)e(are)h(transformed)f(in)n
-(to)h(the)h(co)r(ordinate)e(system)i(of)f(the)h(input)g(grid)f(using)g
-(the)227 4244 y(in)n(v)n(erse)i(transformation)g(of)h(the)h(Mapping)e
-(whic)n(h)i(is)f(supplied.)57 b(This)34 b(means)g(that)h(geometrical)d
-(features)227 4344 y(in)g(the)f(input)h(data)f(are)f(sub)5
-b(jected)31 b(to)g(the)h(Mapping's)e(forw)n(ard)g(transformation)f(as)i
-(they)g(are)f(transferred)227 4444 y(from)24 b(the)g(input)g(to)g(the)g
-(output)g(grid)f(\(although)g(the)h(Mapping's)f(forw)n(ard)f
-(transformation)g(is)i(not)f(explicitly)227 4543 y(used\).)227
-4670 y(In)h(practice,)f(transforming)e(the)j(co)r(ordinates)e(of)h(ev)n
-(ery)e(pixel)j(of)f(a)f(large)g(data)h(grid)f(can)h(b)r(e)g
-(time-consuming,)227 4769 y(esp)r(ecially)38 b(if)g(the)h(Mapping)f(in)
-n(v)n(olv)n(es)e(complicated)i(functions,)j(suc)n(h)c(as)h(sky)f(pro)5
-b(jections.)67 b(T)-7 b(o)38 b(impro)n(v)n(e)227 4869
-y(p)r(erformance,)29 b(it)g(is)g(therefore)f(p)r(ossible)g(to)h(appro)n
-(ximate)e(non-linear)h(Mappings)g(b)n(y)h(a)g(set)g(of)f(linear)h
-(trans-)227 4969 y(formations)h(whic)n(h)h(are)f(applied)g(piece-wise)h
-(to)f(separate)g(sub-regions)f(of)h(the)i(data.)46 b(This)30
-b(appro)n(ximation)227 5068 y(pro)r(cess)37 b(is)h(applied)g
-(automatically)f(b)n(y)h(an)g(adaptiv)n(e)f(algorithm,)i(under)f(con)n
-(trol)f(of)h(an)g(accuracy)e(crite-)227 5168 y(rion)25
-b(whic)n(h)h(expresses)f(the)h(maxim)n(um)g(tolerable)f(geometrical)f
-(distortion)h(whic)n(h)h(ma)n(y)f(b)r(e)i(in)n(tro)r(duced,)f(as)f(a)
-227 5268 y(fraction)i(of)h(a)f(pixel.)227 5394 y(This)34
-b(algorithm)e(\014rst)h(attempts)h(to)g(appro)n(ximate)e(the)i(Mapping)
-f(with)h(a)f(linear)g(transformation)f(applied)227 5494
-y(o)n(v)n(er)h(the)h(whole)g(region)f(of)h(the)h(output)g(grid)e(whic)n
-(h)i(is)f(b)r(eing)g(used.)57 b(If)35 b(this)f(pro)n(v)n(es)f(to)h(b)r
-(e)g(insu\016cien)n(tly)227 5593 y(accurate,)29 b(the)h(output)g
-(region)f(is)g(sub-divided)h(in)n(to)f(t)n(w)n(o)g(along)f(its)i
-(largest)e(dimension)i(and)f(the)h(pro)r(cess)f(is)227
-5693 y(rep)r(eated)k(within)h(eac)n(h)f(of)g(the)h(resulting)e
-(sub-regions.)53 b(This)33 b(pro)r(cess)f(of)h(sub-division)g(con)n
-(tin)n(ues)f(un)n(til)i(a)p eop end
-%%Page: 317 327
-TeXDict begin 317 326 bop 3643 52 a FG(317)227 351 y
-Fk(su\016cien)n(tly)27 b(go)r(o)r(d)g(linear)f(appro)n(ximation)g(is)h
-(found,)g(or)f(the)i(region)e(to)h(whic)n(h)g(it)h(is)f(b)r(eing)g
-(applied)g(b)r(ecomes)227 451 y(to)r(o)h(small)f(\(in)h(whic)n(h)f
-(case)g(the)h(original)e(Mapping)h(is)h(used)g(directly\).)0
-595 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_RESAMPLE)p
-Fm(<)p Ft(X)p Fm(>)p Ft(\()37 b(THIS,)k(NDIM_IN,)g(LBND_IN,)f(UBND_IN,)
-g(IN,)j(IN_VAR,)d(INTERP,)227 695 y(FINTERP,)h(PARAMS,)f(FLAGS,)h(TOL,)
-h(MAXPIX,)f(BADVAL,)g(NDIM_OUT,)f(LBND_OUT,)f(UBND_OUT,)h(LBND,)i
-(UBND,)227 795 y(OUT,)g(OUT_VAR,)e(STATUS)i(\))0 939
-y Fc(Argumen)m(ts:)259 1070 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427
-1170 y Fk(P)n(oin)n(ter)21 b(to)h(a)g(Mapping,)h(whose)f(in)n(v)n(erse)
-f(transformation)g(will)i(b)r(e)f(used)h(to)f(transform)f(the)i(co)r
-(ordinates)427 1269 y(of)36 b(pixels)f(in)h(the)g(output)h(grid)e(in)n
-(to)g(the)h(co)r(ordinate)f(system)g(of)h(the)g(input)h(grid.)60
-b(This)36 b(yields)f(the)427 1369 y(p)r(ositions)h(whic)n(h)g(are)f
-(used)h(to)g(obtain)g(resampled)f(v)-5 b(alues)36 b(b)n(y)f(sub-pixel)h
-(in)n(terp)r(olation)f(within)i(the)427 1469 y(input)29
-b(grid.)427 1582 y(The)24 b(n)n(um)n(b)r(er)g(of)g(input)h(co)r
-(ordinates)e(used)h(b)n(y)g(this)g(Mapping)g(\(as)f(giv)n(en)h(b)n(y)f
-(its)i(Nin)f(attribute\))h(should)427 1682 y(matc)n(h)f(the)h(n)n(um)n
-(b)r(er)f(of)g(input)h(grid)f(dimensions)f(giv)n(en)h(b)n(y)g(the)g(v)
--5 b(alue)25 b(of)f(NDIM)p Ft(_)p Fk(IN)h(b)r(elo)n(w.)35
-b(Similarly)-7 b(,)427 1782 y(the)29 b(n)n(um)n(b)r(er)e(of)h(output)g
-(co)r(ordinates)f(\(Nout)h(attribute\))h(should)e(matc)n(h)h(the)g(n)n
-(um)n(b)r(er)g(of)g(output)g(grid)427 1881 y(dimensions)g(giv)n(en)e(b)
-n(y)i(NDIM)p Ft(_)p Fk(OUT.)259 2009 y Fc(NDIM)p Ft(_)p
-Fc(IN)j(=)h(INTEGER)g(\(Giv)m(en\))427 2109 y Fk(The)c(n)n(um)n(b)r(er)
-f(of)h(dimensions)f(in)h(the)g(input)g(grid.)36 b(This)28
-b(should)f(b)r(e)h(at)g(least)f(one.)259 2236 y Fc(LBND)p
-Ft(_)p Fc(IN\()32 b(NDIM)p Ft(_)p Fc(IN)f(\))h(=)g(INTEGER)f(\(Giv)m
-(en\))427 2336 y Fk(An)j(arra)n(y)d(con)n(taining)h(the)i(co)r
-(ordinates)e(of)h(the)h(cen)n(tre)f(of)g(the)g(\014rst)h(pixel)f(in)g
-(the)h(input)g(grid)f(along)427 2436 y(eac)n(h)27 b(dimension.)259
-2564 y Fc(UBND)p Ft(_)p Fc(IN\()32 b(NDIM)p Ft(_)p Fc(IN)f(\))h(=)g
-(INTEGER)f(\(Giv)m(en\))427 2663 y Fk(An)k(arra)n(y)d(con)n(taining)h
-(the)h(co)r(ordinates)f(of)h(the)h(cen)n(tre)f(of)g(the)g(last)g(pixel)
-g(in)h(the)f(input)h(grid)f(along)427 2763 y(eac)n(h)27
-b(dimension.)427 2876 y(Note)h(that)f(LBND)p Ft(_)p Fk(IN)h(and)f(UBND)
-p Ft(_)p Fk(IN)h(together)f(de\014ne)g(the)h(shap)r(e)f(and)g(size)g
-(of)h(the)g(input)g(grid,)e(its)427 2976 y(exten)n(t)33
-b(along)e(a)i(particular)e(\(J'th\))j(dimension)e(b)r(eing)h(UBND)p
-Ft(_)p Fk(IN\(J\)-LBND)p Ft(_)p Fk(IN\(J\)+1.)52 b(They)33
-b(also)427 3076 y(de\014ne)25 b(the)f(input)i(grid's)d(co)r(ordinate)g
-(system,)i(eac)n(h)e(pixel)i(ha)n(ving)e(unit)i(exten)n(t)f(along)f
-(eac)n(h)h(dimension)427 3175 y(with)k(in)n(tegral)f(co)r(ordinate)f(v)
--5 b(alues)27 b(at)h(its)g(cen)n(tre.)259 3303 y Fc(IN\()k
-Fj(\003)f Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p Fm(>)g
-Fc(\(Giv)m(en\))427 3403 y Fk(An)e(arra)n(y)-7 b(,)26
-b(with)k(one)e(elemen)n(t)h(for)f(eac)n(h)g(pixel)h(in)g(the)h(input)f
-(grid,)g(con)n(taining)e(the)j(input)f(data)g(to)f(b)r(e)427
-3502 y(resampled.)51 b(The)32 b(n)n(umerical)g(t)n(yp)r(e)g(of)h(this)f
-(arra)n(y)e(should)j(matc)n(h)f(the)h(1-)e(or)h(2-c)n(haracter)d(t)n
-(yp)r(e)k(co)r(de)427 3602 y(app)r(ended)d(to)f(the)h(function)g(name)f
-(\(e.g.)42 b(if)30 b(y)n(ou)f(are)f(using)h(AST)p Ft(_)p
-Fk(RESAMPLER,)g(the)g(t)n(yp)r(e)h(of)f(eac)n(h)427 3702
-y(arra)n(y)d(elemen)n(t)h(should)h(b)r(e)g(REAL\).)427
-3815 y(The)33 b(storage)f(order)f(of)j(data)e(within)i(this)g(arra)n(y)
-c(should)j(b)r(e)h(suc)n(h)f(that)g(the)h(index)f(of)g(the)g(\014rst)g
-(grid)427 3915 y(dimension)39 b(v)-5 b(aries)39 b(most)g(rapidly)g(and)
-g(that)g(of)h(the)f(\014nal)g(dimension)h(least)f(rapidly)f(\(i.e.)73
-b(normal)427 4015 y(F)-7 b(ortran)27 b(arra)n(y)e(storage)h(order\).)
-259 4142 y Fc(IN)p Ft(_)p Fc(V)-11 b(AR\()32 b Fj(\003)f
-Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p Fm(>)g Fc(\(Giv)m(en\))427
-4242 y Fk(An)24 b(optional)e(second)h(arra)n(y)e(with)i(the)h(same)f
-(size)f(and)h(t)n(yp)r(e)h(as)e(the)i(IN)f(arra)n(y)-7
-b(.)34 b(If)23 b(the)h(AST)p Ft(__)p Fk(USEV)-9 b(AR)427
-4342 y(\015ag)28 b(is)g(set)h(via)f(the)h(FLA)n(GS)g(argumen)n(t)e(\(b)
-r(elo)n(w\),)i(this)g(arra)n(y)d(should)i(con)n(tain)g(a)g(set)h(of)f
-(non-negativ)n(e)427 4441 y(v)-5 b(alues)32 b(whic)n(h)h(represen)n(t)e
-(estimates)h(of)g(the)h(statistical)f(v)-5 b(ariance)31
-b(asso)r(ciated)g(with)i(eac)n(h)e(elemen)n(t)i(of)427
-4541 y(the)26 b(IN)f(arra)n(y)-7 b(.)33 b(Estimates)25
-b(of)f(the)i(v)-5 b(ariance)23 b(of)i(the)g(resampled)g(output)g(data)f
-(will)h(then)h(b)r(e)f(calculated.)427 4655 y(If)g(the)g(AST)p
-Ft(__)p Fk(USEV)-9 b(AR)25 b(\015ag)f(is)g(not)h(set,)g(no)g(input)g(v)
--5 b(ariance)24 b(estimates)g(are)g(required)f(and)i(this)g(arra)n(y)
-427 4754 y(will)j(not)g(b)r(e)g(used.)37 b(A)27 b(dumm)n(y)h(\(e.g.)37
-b(one-elemen)n(t\))27 b(arra)n(y)e(ma)n(y)i(then)h(b)r(e)g(supplied.)
-259 4882 y Fc(INTERP)k(=)g(INTEGER)f(\(Giv)m(en\))427
-4982 y Fk(This)i(argumen)n(t)f(sp)r(eci\014es)h(the)g(sc)n(heme)g(to)f
-(b)r(e)i(used)f(for)f(sub-pixel)h(in)n(terp)r(olation)f(within)h(the)h
-(input)427 5081 y(grid.)62 b(It)36 b(ma)n(y)f(b)r(e)i(used)f(to)f
-(select)h(from)g(a)f(set)h(of)g(pre-de\014ned)g(sc)n(hemes)f(b)n(y)h
-(supplying)g(one)f(of)h(the)427 5181 y(v)-5 b(alues)31
-b(describ)r(ed)f(in)i(the)f Ft(")p Fk(Sub-Pixel)f(In)n(terp)r(olation)g
-(Sc)n(hemes)p Ft(")g Fk(section)g(b)r(elo)n(w.)46 b(If)32
-b(a)e(v)-5 b(alue)31 b(of)g(zero)427 5280 y(is)d(supplied,)h(then)f
-(the)g(default)h(linear)e(in)n(terp)r(olation)g(sc)n(heme)h(is)g(used)g
-(\(equiv)-5 b(alen)n(t)28 b(to)f(supplying)h(the)427
-5380 y(v)-5 b(alue)28 b(AST)p Ft(__)p Fk(LINEAR\).)427
-5494 y(Alternativ)n(ely)-7 b(,)25 b(y)n(ou)e(ma)n(y)h(supply)g(a)g(v)-5
-b(alue)24 b(whic)n(h)g(indicates)g(that)h(y)n(ou)e(will)h(pro)n(vide)f
-(y)n(our)g(o)n(wn)h(routine)427 5593 y(to)39 b(p)r(erform)f(sub-pixel)g
-(in)n(terp)r(olation)g(b)n(y)g(means)g(of)g(the)h(FINTERP)g(argumen)n
-(t.)68 b(Again,)41 b(see)d(the)427 5693 y Ft(")p Fk(Sub-Pixel)27
-b(In)n(terp)r(olation)g(Sc)n(hemes)p Ft(")f Fk(section)i(b)r(elo)n(w)f
-(for)g(details.)p eop end
-%%Page: 318 328
-TeXDict begin 318 327 bop 0 52 a FG(318)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(FINTERP)h(=)g(SUBR)m
-(OUTINE)g(\(Giv)m(en\))427 451 y Fk(If)g(the)f(v)-5 b(alue)32
-b(giv)n(en)e(for)h(the)g(INTERP)g(argumen)n(t)f(indicates)h(that)g(y)n
-(ou)g(will)g(pro)n(vide)f(y)n(our)g(o)n(wn)h(rou-)427
-551 y(tine)39 b(for)f(sub-pixel)g(in)n(terp)r(olation,)i(then)f(the)g
-(name)f(of)h(that)f(routine)g(should)h(b)r(e)f(giv)n(en)g(here)g(\(the)
-427 650 y(name)31 b(should)g(also)g(app)r(ear)f(in)i(a)e(F)-7
-b(ortran)31 b(EXTERNAL)g(statemen)n(t)g(in)h(the)f(routine)g(whic)n(h)g
-(in)n(v)n(ok)n(es)427 750 y(AST)p Ft(_)p Fk(RESAMPLE)p
-Fm(<)p Fk(X)p Fm(>)p Fk(\).)37 b(F)-7 b(or)27 b(details)h(of)g(the)g
-(in)n(terface)f(whic)n(h)h(the)g(routine)g(should)f(ha)n(v)n(e)g(\(sev)
-n(eral)427 849 y(are)c(p)r(ossible,)i(dep)r(ending)f(on)g(the)g(v)-5
-b(alue)24 b(of)g(INTERP\),)g(see)g(the)g Ft(")p Fk(Sub-Pixel)f(In)n
-(terp)r(olation)g(Sc)n(hemes)p Ft(")427 949 y Fk(section)k(b)r(elo)n
-(w.)427 1063 y(If)35 b(the)f(INTERP)f(argumen)n(t)g(has)h(an)n(y)f
-(other)g(v)-5 b(alue,)36 b(corresp)r(onding)c(to)h(one)h(of)g(the)g
-(pre-de\014ned)g(in-)427 1163 y(terp)r(olation)28 b(sc)n(hemes,)g(then)
-h(this)f(routine)g(will)h(not)f(b)r(e)h(used)g(and)f(y)n(ou)g(ma)n(y)f
-(supply)i(the)f(n)n(ull)h(routine)427 1262 y(AST)p Ft(_)p
-Fk(NULL)e(here)f(\(note)g(only)g(one)g(underscore\).)35
-b(No)26 b(EXTERNAL)g(statemen)n(t)g(is)g(required)g(for)f(this)427
-1362 y(routine,)j(so)e(long)h(as)g(the)h(AST)p Ft(_)p
-Fk(P)-7 b(AR)28 b(include)g(\014le)g(has)f(b)r(een)h(used.)259
-1491 y Fc(P)-8 b(ARAMS\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)
-e(\(Giv)m(en\))427 1590 y Fk(An)39 b(optional)f(arra)n(y)f(whic)n(h)h
-(should)h(con)n(tain)f(an)n(y)g(additional)g(parameter)f(v)-5
-b(alues)38 b(required)g(b)n(y)g(the)427 1690 y(sub-pixel)e(in)n(terp)r
-(olation)f(sc)n(heme.)61 b(If)37 b(suc)n(h)e(parameters)f(are)h
-(required,)i(this)g(will)f(b)r(e)g(noted)g(in)g(the)427
-1789 y Ft(")p Fk(Sub-Pixel)26 b(In)n(terp)r(olation)f(Sc)n(hemes)p
-Ft(")h Fk(section)g(b)r(elo)n(w)g(\(y)n(ou)g(ma)n(y)g(also)f(use)h
-(this)h(arra)n(y)d(to)i(pass)g(v)-5 b(alues)427 1889
-y(to)28 b(y)n(our)e(o)n(wn)h(in)n(terp)r(olation)g(routine\).)427
-2003 y(If)f(no)e(additional)g(parameters)g(are)f(required,)i(this)g
-(arra)n(y)d(is)j(not)g(used.)36 b(A)25 b(dumm)n(y)g(\(e.g.)36
-b(one-elemen)n(t\))427 2103 y(arra)n(y)26 b(ma)n(y)g(then)j(b)r(e)f
-(supplied.)259 2231 y Fc(FLA)m(GS)33 b(=)f(INTEGER)f(\(Giv)m(en\))427
-2331 y Fk(The)36 b(sum)f(of)h(a)f(set)g(of)g(\015ag)g(v)-5
-b(alues)35 b(whic)n(h)g(ma)n(y)g(b)r(e)h(used)f(to)g(pro)n(vide)g
-(additional)g(con)n(trol)f(o)n(v)n(er)f(the)427 2431
-y(resampling)26 b(op)r(eration.)36 b(See)27 b(the)g Ft(")p
-Fk(Con)n(trol)e(Flags)p Ft(")h Fk(section)h(b)r(elo)n(w)f(for)h(a)f
-(description)h(of)g(the)g(options)427 2530 y(a)n(v)-5
-b(ailable.)36 b(If)28 b(no)f(\015ag)g(v)-5 b(alues)27
-b(are)g(to)g(b)r(e)h(set,)g(a)f(v)-5 b(alue)28 b(of)f(zero)g(should)g
-(b)r(e)h(giv)n(en.)259 2659 y Fc(TOL)k(=)h(DOUBLE)f(PRECISION)f(\(Giv)m
-(en\))427 2759 y Fk(The)j(maxim)n(um)f(tolerable)f(geometrical)f
-(distortion)i(whic)n(h)g(ma)n(y)f(b)r(e)i(in)n(tro)r(duced)f(as)f(a)h
-(result)g(of)g(ap-)427 2858 y(pro)n(ximating)c(non-linear)f(Mappings)h
-(b)n(y)h(a)f(set)h(of)g(piece-wise)f(linear)g(transformations.)42
-b(This)30 b(should)427 2958 y(b)r(e)e(expressed)f(as)g(a)g(displacemen)
-n(t)g(in)h(pixels)f(in)h(the)g(input)h(grid's)d(co)r(ordinate)h
-(system.)427 3072 y(If)34 b(piece-wise)f(linear)g(appro)n(ximation)f
-(is)h(not)h(required,)g(a)f(v)-5 b(alue)33 b(of)h(zero)e(ma)n(y)h(b)r
-(e)h(giv)n(en.)54 b(This)33 b(will)427 3172 y(ensure)k(that)g(the)h
-(Mapping)e(is)h(used)g(without)h(an)n(y)e(appro)n(ximation,)i(but)g(ma)
-n(y)e(increase)g(execution)427 3271 y(time.)259 3400
-y Fc(MAXPIX)d(=)f(INTEGER)f(\(Giv)m(en\))427 3499 y Fk(A)42
-b(v)-5 b(alue)40 b(whic)n(h)h(sp)r(eci\014es)g(an)g(initial)g(scale)g
-(size)f(\(in)i(pixels\))f(for)f(the)i(adaptiv)n(e)e(algorithm)g(whic)n
-(h)427 3599 y(appro)n(ximates)d(non-linear)g(Mappings)h(with)h
-(piece-wise)f(linear)g(transformations.)68 b(Normally)-7
-b(,)40 b(this)427 3699 y(should)35 b(b)r(e)g(a)f(large)g(v)-5
-b(alue)34 b(\(larger)f(than)i(an)n(y)f(dimension)h(of)g(the)g(region)e
-(of)i(the)g(output)g(grid)g(b)r(eing)427 3798 y(used\).)46
-b(In)31 b(this)g(case,)g(a)f(\014rst)g(attempt)h(to)g(appro)n(ximate)e
-(the)i(Mapping)f(b)n(y)g(a)g(linear)g(transformation)427
-3898 y(will)e(b)r(e)g(made)f(o)n(v)n(er)f(the)i(en)n(tire)f(output)i
-(region.)427 4012 y(If)40 b(a)g(smaller)e(v)-5 b(alue)40
-b(is)f(used,)k(the)d(output)g(region)f(will)h(\014rst)f(b)r(e)h
-(divided)g(in)n(to)g(sub-regions)d(whose)427 4112 y(size)30
-b(do)r(es)f(not)h(exceed)g(MAXPIX)g(pixels)g(in)g(an)n(y)f(dimension.)
-44 b(Only)29 b(at)h(this)g(p)r(oin)n(t)g(will)g(attempts)h(at)427
-4211 y(appro)n(ximation)26 b(commence.)427 4325 y(This)38
-b(v)-5 b(alue)38 b(ma)n(y)g(o)r(ccasionally)e(b)r(e)j(useful)f(in)h
-(prev)n(en)n(ting)e(false)h(con)n(v)n(ergence)d(of)j(the)h(adaptiv)n(e)
-e(al-)427 4425 y(gorithm)c(in)g(cases)f(where)g(the)h(Mapping)g(app)r
-(ears)f(appro)n(ximately)f(linear)h(on)h(large)e(scales,)j(but)f(has)
-427 4525 y(irregularities)27 b(\(e.g.)40 b(holes\))28
-b(on)g(smaller)g(scales.)39 b(A)29 b(v)-5 b(alue)28 b(of,)h(sa)n(y)-7
-b(,)28 b(50)g(to)g(100)g(pixels)g(can)g(also)g(b)r(e)h(em-)427
-4624 y(plo)n(y)n(ed)23 b(as)f(a)h(safeguard)f(in)i(general-purp)r(ose)d
-(soft)n(w)n(are,)i(since)g(the)h(e\013ect)f(on)h(p)r(erformance)e(is)h
-(minimal.)427 4738 y(If)e(to)r(o)f(small)g(a)g(v)-5 b(alue)20
-b(is)g(giv)n(en,)h(it)g(will)f(ha)n(v)n(e)f(the)i(e\013ect)g(of)f
-(inhibiting)h(linear)f(appro)n(ximation)e(altogether)427
-4838 y(\(equiv)-5 b(alen)n(t)21 b(to)f(setting)h(TOL)f(to)g(zero\).)34
-b(Although)20 b(this)h(ma)n(y)f(degrade)f(p)r(erformance,)i(accurate)e
-(results)427 4938 y(will)28 b(still)g(b)r(e)g(obtained.)259
-5066 y Fc(BAD)m(V)-11 b(AL)34 b(=)e Fm(<)p Fc(Xt)m(yp)s(e)p
-Fm(>)f Fc(\(Giv)m(en\))427 5166 y Fk(This)i(argumen)n(t)e(should)h(ha)n
-(v)n(e)g(the)g(same)g(t)n(yp)r(e)h(as)f(the)h(elemen)n(ts)f(of)g(the)h
-(IN)g(arra)n(y)-7 b(.)49 b(It)33 b(sp)r(eci\014es)f(the)427
-5266 y(v)-5 b(alue)28 b(used)f(to)h(\015ag)f(missing)g(data)g(\(bad)h
-(pixels\))f(in)h(the)g(input)g(and)g(output)g(arra)n(ys.)427
-5380 y(If)33 b(the)f(AST)p Ft(__)p Fk(USEBAD)g(\015ag)f(is)h(set)g(via)
-f(the)i(FLA)n(GS)f(argumen)n(t,)g(then)h(this)f(v)-5
-b(alue)32 b(is)g(used)f(to)h(test)427 5479 y(for)27 b(bad)h(pixels)f
-(in)h(the)g(IN)g(\(and)g(IN)p Ft(_)p Fk(V)-9 b(AR\))28
-b(arra)n(y\(s\).)427 5593 y(Unless)35 b(the)h(AST)p Ft(__)p
-Fk(NOBAD)f(\015ag)f(is)h(set)g(via)g(the)h(FLA)n(GS)f(argumen)n(t,)h
-(this)g(v)-5 b(alue)35 b(is)g(also)f(used)h(to)427 5693
-y(\015ag)29 b(an)n(y)f(output)i(elemen)n(ts)f(in)g(the)h(OUT)f(\(and)g
-(OUT)p Ft(_)p Fk(V)-9 b(AR\))30 b(arra)n(y\(s\))d(for)i(whic)n(h)g
-(resampled)f(v)-5 b(alues)p eop end
-%%Page: 319 329
-TeXDict begin 319 328 bop 3643 52 a FG(319)427 351 y
-Fk(could)34 b(not)g(b)r(e)g(obtained)f(\(see)h(the)g
-Ft(")p Fk(Propagation)d(of)j(Missing)f(Data)p Ft(")g
-Fk(section)g(b)r(elo)n(w)h(for)f(details)h(of)427 451
-y(the)23 b(circumstances)f(under)h(whic)n(h)f(this)h(ma)n(y)f(o)r
-(ccur\).)35 b(The)23 b(AST)p Ft(_)p Fk(RESAMPLE)p Fm(<)p
-Fk(X)p Fm(>)e Fk(function)i(return)427 551 y(v)-5 b(alue)32
-b(indicates)g(whether)g(an)n(y)f(suc)n(h)h(v)-5 b(alues)31
-b(ha)n(v)n(e)g(b)r(een)i(pro)r(duced.)50 b(If)32 b(the)h(AST)p
-Ft(__)p Fk(NOBAD)e(\015ag)h(is)427 650 y(set.)41 b(then)30
-b(output)f(arra)n(y)e(elemen)n(ts)i(for)f(whic)n(h)h(no)g(resampled)f
-(v)-5 b(alue)29 b(could)g(b)r(e)g(obtained)g(are)f(left)i(set)427
-750 y(to)e(the)g(v)-5 b(alue)27 b(they)h(had)f(on)h(en)n(try)f(to)g
-(this)h(function.)259 888 y Fc(NDIM)p Ft(_)p Fc(OUT)k(=)g(INTEGER)f
-(\(Giv)m(en\))427 988 y Fk(The)38 b(n)n(um)n(b)r(er)f(of)g(dimensions)g
-(in)h(the)f(output)h(grid.)66 b(This)37 b(should)g(b)r(e)h(at)f(least)g
-(one.)65 b(It)38 b(need)g(not)427 1087 y(necessarily)26
-b(b)r(e)i(equal)f(to)h(the)g(n)n(um)n(b)r(er)f(of)h(dimensions)f(in)h
-(the)g(input)g(grid.)259 1226 y Fc(LBND)p Ft(_)p Fc(OUT\()33
-b(NDIM)p Ft(_)p Fc(OUT)e(\))h(=)g(INTEGER)g(\(Giv)m(en\))427
-1325 y Fk(An)f(arra)n(y)d(con)n(taining)h(the)h(co)r(ordinates)f(of)h
-(the)h(cen)n(tre)e(of)h(the)h(\014rst)f(pixel)g(in)g(the)h(output)f
-(grid)g(along)427 1425 y(eac)n(h)d(dimension.)259 1563
-y Fc(UBND)p Ft(_)p Fc(OUT\()33 b(NDIM)p Ft(_)p Fc(OUT)e(\))h(=)g
-(INTEGER)g(\(Giv)m(en\))427 1663 y Fk(An)g(arra)n(y)c(con)n(taining)i
-(the)i(co)r(ordinates)d(of)i(the)h(cen)n(tre)e(of)h(the)h(last)e(pixel)
-h(in)h(the)f(output)h(grid)e(along)427 1762 y(eac)n(h)d(dimension.)427
-1881 y(Note)41 b(that)g(LBND)p Ft(_)p Fk(OUT)f(and)g(UBND)p
-Ft(_)p Fk(OUT)h(together)e(de\014ne)i(the)g(shap)r(e,)i(size)d(and)h
-(co)r(ordinate)427 1981 y(system)24 b(of)f(the)h(output)h(grid)d(in)i
-(the)g(same)g(w)n(a)n(y)e(as)h(LBND)p Ft(_)p Fk(IN)h(and)f(UBND)p
-Ft(_)p Fk(IN)i(de\014ne)f(the)g(shap)r(e,)g(size)427
-2081 y(and)k(co)r(ordinate)e(system)h(of)h(the)g(input)g(grid.)259
-2219 y Fc(LBND\()k(NDIM)p Ft(_)p Fc(OUT)g(\))g(=)g(INTEGER)f(\(Giv)m
-(en\))427 2319 y Fk(An)37 b(arra)n(y)c(con)n(taining)i(the)h(co)r
-(ordinates)f(of)h(the)g(\014rst)g(pixel)f(in)i(the)f(region)e(of)i(the)
-h(output)f(grid)f(for)427 2418 y(whic)n(h)28 b(a)f(resampled)g(v)-5
-b(alue)27 b(is)h(to)f(b)r(e)h(calculated.)259 2557 y
-Fc(UBND\()k(NDIM)p Ft(_)p Fc(OUT)g(\))g(=)g(INTEGER)f(\(Giv)m(en\))427
-2656 y Fk(An)23 b(arra)n(y)d(con)n(taining)h(the)i(co)r(ordinates)e(of)
-h(the)g(last)g(pixel)h(in)f(the)h(region)e(of)h(the)h(output)f(grid)g
-(for)g(whic)n(h)427 2756 y(a)27 b(resampled)g(v)-5 b(alue)28
-b(is)f(to)h(b)r(e)g(calculated.)427 2875 y(Note)e(that)g(LBND)h(and)e
-(UBND)i(together)e(de\014ne)h(the)g(shap)r(e)g(and)g(p)r(osition)g(of)f
-(a)h(\(h)n(yp)r(er-\)rectangular)427 2974 y(region)42
-b(of)i(the)f(output)h(grid)f(for)f(whic)n(h)i(resampled)e(v)-5
-b(alues)43 b(should)g(b)r(e)h(pro)r(duced.)84 b(This)43
-b(region)427 3074 y(should)32 b(lie)h(wholly)f(within)h(the)f(exten)n
-(t)h(of)f(the)h(output)g(grid)e(\(as)h(de\014ned)h(b)n(y)f(the)h(LBND)p
-Ft(_)p Fk(OUT)f(and)427 3174 y(UBND)p Ft(_)p Fk(OUT)20
-b(arra)n(ys\).)31 b(Regions)19 b(of)g(the)g(output)h(grid)e(lying)h
-(outside)g(this)g(region)f(will)h(not)h(b)r(e)f(mo)r(di\014ed.)259
-3312 y Fc(OUT\()33 b Fj(\003)e Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p
-Fm(>)f Fc(\(Returned\))427 3412 y Fk(An)e(arra)n(y)-7
-b(,)26 b(with)j(one)f(elemen)n(t)g(for)g(eac)n(h)g(pixel)g(in)g(the)h
-(output)g(grid,)f(in)n(to)g(whic)n(h)g(the)h(resampled)e(data)427
-3511 y(v)-5 b(alues)27 b(will)h(b)r(e)g(returned.)36
-b(The)27 b(n)n(umerical)g(t)n(yp)r(e)g(of)h(this)f(arra)n(y)e(should)i
-(matc)n(h)h(that)f(of)g(the)h(IN)g(arra)n(y)-7 b(,)427
-3611 y(and)32 b(the)g(data)f(storage)f(order)g(should)i(b)r(e)g(suc)n
-(h)g(that)g(the)g(index)g(of)f(the)h(\014rst)g(grid)f(dimension)h(v)-5
-b(aries)427 3710 y(most)27 b(rapidly)g(and)g(that)h(of)f(the)h(\014nal)
-f(dimension)g(least)g(rapidly)g(\(i.e.)37 b(normal)26
-b(F)-7 b(ortran)27 b(arra)n(y)e(storage)427 3810 y(order\).)259
-3948 y Fc(OUT)p Ft(_)p Fc(V)-11 b(AR\()33 b Fj(\003)e
-Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p Fm(>)f Fc(\(Returned\))427
-4048 y Fk(An)25 b(optional)f(arra)n(y)d(with)k(the)g(same)f(t)n(yp)r(e)
-g(and)g(size)g(as)g(the)g(OUT)g(arra)n(y)-7 b(.)34 b(If)25
-b(the)f(AST)p Ft(__)p Fk(USEV)-9 b(AR)24 b(\015ag)427
-4148 y(is)30 b(set)f(via)h(the)g(FLA)n(GS)g(argumen)n(t,)f(this)h(arra)
-n(y)d(will)j(b)r(e)g(used)g(to)f(return)g(v)-5 b(ariance)29
-b(estimates)g(for)g(the)427 4247 y(resampled)e(data)g(v)-5
-b(alues.)427 4366 y(The)23 b(output)f(v)-5 b(ariance)22
-b(v)-5 b(alues)21 b(will)i(b)r(e)g(calculated)e(on)h(the)h(assumption)f
-(that)g(errors)e(on)i(the)h(input)g(data)427 4466 y(v)-5
-b(alues)24 b(are)g(statistically)f(indep)r(enden)n(t)i(and)g(that)f
-(their)g(v)-5 b(ariance)24 b(estimates)g(ma)n(y)f(simply)i(b)r(e)f
-(summed)427 4566 y(\(with)30 b(appropriate)d(w)n(eigh)n(ting)g
-(factors\))h(when)h(sev)n(eral)e(input)i(pixels)g(con)n(tribute)f(to)h
-(an)f(output)h(data)427 4665 y(v)-5 b(alue.)59 b(If)35
-b(this)g(assumption)f(is)h(not)g(v)-5 b(alid,)36 b(then)f(the)h(output)
-f(error)e(estimates)h(ma)n(y)g(b)r(e)h(biased.)58 b(In)427
-4765 y(addition,)31 b(note)f(that)h(the)f(statistical)g(errors)e(on)i
-(neigh)n(b)r(ouring)f(output)h(data)g(v)-5 b(alues)30
-b(\(as)g(w)n(ell)g(as)f(the)427 4864 y(estimates)j(of)f(those)g
-(errors\))f(ma)n(y)h(often)h(b)r(e)g(correlated,)f(ev)n(en)g(if)h(the)g
-(ab)r(o)n(v)n(e)f(assumption)g(ab)r(out)g(the)427 4964
-y(input)e(data)e(is)g(correct,)g(b)r(ecause)g(of)g(the)h(sub-pixel)g
-(in)n(terp)r(olation)e(sc)n(hemes)h(emplo)n(y)n(ed.)427
-5083 y(If)34 b(the)h(AST)p Ft(__)p Fk(USEV)-9 b(AR)33
-b(\015ag)g(is)h(not)f(set,)j(no)d(output)i(v)-5 b(ariance)32
-b(estimates)h(will)h(b)r(e)h(calculated)e(and)427 5183
-y(this)28 b(arra)n(y)d(will)j(not)g(b)r(e)g(used.)37
-b(A)28 b(dumm)n(y)f(\(e.g.)37 b(one-elemen)n(t\))27 b(arra)n(y)f(ma)n
-(y)g(then)j(b)r(e)f(supplied.)259 5321 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 5421
-y Fk(The)c(global)e(status.)0 5593 y Fc(Returned)32 b(V)-8
-b(alue:)p eop end
-%%Page: 320 330
-TeXDict begin 320 329 bop 0 52 a FG(320)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(AST)p
-Ft(_)p Fc(RESAMPLE)p Fm(<)p Fc(X)p Fm(>)g Fc(=)h(INTEGER)427
-451 y Fk(The)h(n)n(um)n(b)r(er)f(of)g(output)h(pixels)g(for)f(whic)n(h)
-g(no)g(v)-5 b(alid)33 b(resampled)e(v)-5 b(alue)33 b(could)f(b)r(e)h
-(obtained.)51 b(Th)n(us,)427 551 y(in)33 b(the)g(absence)f(of)h(an)n(y)
-f(error,)g(a)h(returned)f(v)-5 b(alue)33 b(of)f(zero)g(indicates)h
-(that)g(all)f(the)h(required)f(output)427 650 y(pixels)f(receiv)n(ed)f
-(v)-5 b(alid)31 b(resampled)f(data)h(v)-5 b(alues)30
-b(\(and)h(v)-5 b(ariances\).)46 b(See)31 b(the)h(BAD)n(V)-9
-b(AL)31 b(and)g(FLA)n(GS)427 750 y(argumen)n(ts.)0 926
-y Fc(Notes:)340 1224 y Fj(\017)45 b Fk(A)27 b(v)-5 b(alue)25
-b(of)h(zero)f(will)h(b)r(e)g(returned)g(if)g(this)g(function)h(is)f(in)
-n(v)n(ok)n(ed)e(with)j(the)f(global)f(error)f(status)h(set,)h(or)427
-1323 y(if)i(it)g(should)g(fail)f(for)h(an)n(y)e(reason.)-2
-1500 y Fc(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)227 1646
-y Fk(T)-7 b(o)19 b(select)g(the)g(appropriate)f(resampling)g(function,)
-j(y)n(ou)e(should)f(replace)h Fm(<)p Fk(X)p Fm(>)f Fk(in)i(the)f
-(generic)f(function)i(name)227 1746 y(AST)p Ft(_)p Fk(RESAMPLE)p
-Fm(<)p Fk(X)p Fm(>)i Fk(with)i(a)f(1-)f(or)g(2-c)n(haracter)f(data)i(t)
-n(yp)r(e)g(co)r(de,)h(so)f(as)f(to)h(matc)n(h)g(the)h(n)n(umerical)e(t)
-n(yp)r(e)227 1845 y Fm(<)p Fk(Xt)n(yp)r(e)p Fm(>)27 b
-Fk(of)h(the)g(data)f(y)n(ou)g(are)g(pro)r(cessing,)f(as)h(follo)n(ws:)
-340 1996 y Fj(\017)45 b Fk(D:)28 b(DOUBLE)g(PRECISION)340
-2137 y Fj(\017)45 b Fk(R:)28 b(REAL)340 2277 y Fj(\017)45
-b Fk(I:)28 b(INTEGER)340 2417 y Fj(\017)45 b Fk(UI:)28
-b(INTEGER)f(\(treated)h(as)f(unsigned\))340 2557 y Fj(\017)45
-b Fk(S:)28 b(INTEGER)p Fj(\003)p Fk(2)e(\(short)h(in)n(teger\))340
-2698 y Fj(\017)45 b Fk(US:)28 b(INTEGER)p Fj(\003)p Fk(2)f(\(short)g
-(in)n(teger,)f(treated)i(as)f(unsigned\))340 2838 y Fj(\017)45
-b Fk(B:)28 b(BYTE)f(\(treated)h(as)e(signed\))340 2978
-y Fj(\017)45 b Fk(UB:)28 b(BYTE)f(\(treated)h(as)f(unsigned\))227
-3155 y(F)-7 b(or)33 b(example,)i(AST)p Ft(_)p Fk(RESAMPLED)e(w)n(ould)g
-(b)r(e)h(used)f(to)h(pro)r(cess)e(DOUBLE)h(PRECISION)g(data,)h(while)
-227 3254 y(AST)p Ft(_)p Fk(RESAMPLES)23 b(w)n(ould)g(b)r(e)h(used)f(to)
-g(pro)r(cess)g(short)f(in)n(teger)h(data)g(\(stored)g(in)g(an)h
-(INTEGER)p Fj(\003)p Fk(2)e(arra)n(y\),)227 3354 y(etc.)227
-3486 y(F)-7 b(or)32 b(compatibilit)n(y)h(with)g(other)f(Starlink)g
-(facilities,)i(the)f(co)r(des)g(W)g(and)f(UW)h(are)f(pro)n(vided)g(as)g
-(synon)n(yms)227 3585 y(for)27 b(S)h(and)g(US)g(resp)r(ectiv)n(ely)e
-(\(but)j(only)e(in)h(the)g(F)-7 b(ortran)26 b(in)n(terface)h(to)h
-(AST\).)-2 3750 y Fc(Sub-Pixel)k(In)m(terp)s(olation)f(Sc)m(hemes)n(:)
-227 3896 y Fk(There)d(is)f(no)h(suc)n(h)f(thing)h(as)g(a)f(p)r(erfect)h
-(sub-pixel)g(in)n(terp)r(olation)f(sc)n(heme)g(and,)h(in)g(practice,)f
-(all)h(resampling)227 3995 y(will)34 b(result)e(in)i(some)e
-(degradation)f(of)i(gridded)g(data.)52 b(A)34 b(range)d(of)i(sc)n
-(hemes)g(is)f(therefore)h(pro)n(vided,)g(from)227 4095
-y(whic)n(h)28 b(y)n(ou)f(can)g(c)n(ho)r(ose)f(the)i(one)f(whic)n(h)h(b)
-r(est)g(suits)g(y)n(our)e(needs.)227 4227 y(In)h(general,)e(a)g
-(balance)h(m)n(ust)g(b)r(e)g(struc)n(k)f(b)r(et)n(w)n(een)i(sc)n(hemes)
-e(whic)n(h)h(tend)g(to)g(degrade)f(sharp)g(features)h(in)g(the)227
-4326 y(data)d(b)n(y)g(smo)r(othing)g(them,)i(and)f(those)f(whic)n(h)g
-(attempt)h(to)g(preserv)n(e)d(sharp)i(features.)35 b(The)24
-b(latter)f(will)g(often)227 4426 y(tend)32 b(to)g(in)n(tro)r(duce)f(un)
-n(w)n(an)n(ted)g(oscillations,)g(t)n(ypically)g(visible)g(as)g
-Ft(")p Fk(ringing)p Ft(")f Fk(around)g(sharp)h(features)g(and)227
-4526 y(edges,)j(esp)r(ecially)f(if)g(the)h(data)e(are)g(under-sampled)h
-(\(i.e.)54 b(if)33 b(the)h(sharp)r(est)e(features)h(are)f(less)g(than)i
-(ab)r(out)227 4625 y(t)n(w)n(o)27 b(pixels)h(across\).)36
-b(In)28 b(practice,)f(a)g(go)r(o)r(d)h(in)n(terp)r(olation)e(sc)n(heme)
-i(is)g(lik)n(ely)f(to)h(b)r(e)g(a)f(compromise)g(and)g(ma)n(y)227
-4725 y(exhibit)h(some)f(asp)r(ects)h(of)f(b)r(oth)h(these)g(features.)
-227 4857 y(F)-7 b(or)31 b(under-sampled)g(data,)h(some)f(in)n(terp)r
-(olation)g(sc)n(hemes)f(ma)n(y)h(app)r(ear)g(to)g(preserv)n(e)f(data)h
-(resolution)g(b)r(e-)227 4957 y(cause)25 b(they)h(transform)e(single)h
-(input)h(pixels)g(in)n(to)f(single)g(output)h(pixels,)f(rather)g(than)g
-(spreading)g(their)g(data)227 5056 y(b)r(et)n(w)n(een)j(sev)n(eral)e
-(output)j(pixels.)38 b(While)28 b(this)h(ma)n(y)e(lo)r(ok)g(b)r(etter)i
-(cosmetically)-7 b(,)27 b(it)h(can)g(result)g(in)g(a)g(geomet-)227
-5156 y(rical)e(shift)h(of)g(sharp)e(features)h(in)h(the)g(data.)36
-b(Y)-7 b(ou)26 b(should)g(b)r(ew)n(are)g(of)g(this)h(if)g(y)n(ou)f
-(plan)g(to)h(use)f(suc)n(h)g(features)227 5255 y(\(e.g.\))37
-b(for)27 b(image)g(alignmen)n(t.)227 5387 y(The)j(follo)n(wing)f(are)h
-(t)n(w)n(o)f(easy-to-use)f(sub-pixel)i(in)n(terp)r(olation)f(sc)n
-(hemes)g(whic)n(h)h(are)g(generally)e(applicable.)227
-5487 y(They)k(are)f(selected)h(b)n(y)g(supplying)g(the)g(appropriate)e
-(v)-5 b(alue)32 b(\(de\014ned)h(in)f(the)g(AST)p Ft(_)p
-Fk(P)-7 b(AR)32 b(include)h(\014le\))f(via)227 5587 y(the)c(INTERP)f
-(argumen)n(t.)36 b(In)28 b(these)f(cases,)g(the)h(FINTERP)f(and)h(P)-7
-b(ARAMS)28 b(argumen)n(ts)e(are)h(not)g(used:)p eop end
-%%Page: 321 331
-TeXDict begin 321 330 bop 3643 52 a FG(321)340 351 y
-Fj(\017)45 b Fk(AST)p Ft(__)p Fk(NEAREST:)24 b(This)h(is)f(the)h
-(simplest)g(p)r(ossible)f(sc)n(heme,)h(in)g(whic)n(h)f(the)h(v)-5
-b(alue)25 b(of)f(the)h(input)h(pixel)427 451 y(with)j(the)g(nearest)f
-(cen)n(tre)g(to)h(the)g(in)n(terp)r(olation)f(p)r(oin)n(t)g(is)h(used.)
-40 b(This)29 b(is)f(v)n(ery)g(quic)n(k)g(to)g(execute)h(and)427
-551 y(will)38 b(preserv)n(e)d(single-pixel)h(features)h(in)g(the)h
-(data,)h(but)f(ma)n(y)e(displace)h(them)h(b)n(y)f(up)g(to)g(half)h
-(their)427 650 y(width)28 b(along)e(eac)n(h)h(dimension.)36
-b(It)28 b(often)g(giv)n(es)e(a)g(go)r(o)r(d)h(cosmetic)g(result,)g(so)g
-(is)g(useful)g(for)g(quic)n(k-lo)r(ok)427 750 y(pro)r(cessing,)f(but)j
-(is)e(unsuitable)h(if)g(accurate)e(geometrical)g(transformation)g(is)i
-(required.)340 868 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(LINEAR:)40
-b(This)h(is)f(the)h(default)g(sc)n(heme,)j(whic)n(h)c(uses)g(linear)g
-(in)n(terp)r(olation)g(b)r(et)n(w)n(een)g(the)427 968
-y(nearest)35 b(neigh)n(b)r(ouring)f(pixels)i(in)g(the)g(input)g(grid)f
-(\(there)h(are)e(t)n(w)n(o)h(neigh)n(b)r(ours)g(in)g(one)h(dimension,)
-427 1068 y(four)h(neigh)n(b)r(ours)f(in)i(t)n(w)n(o)f(dimensions,)i
-(eigh)n(t)e(in)h(three)f(dimensions,)i(etc.\).)67 b(It)38
-b(is)f(sup)r(erior)f(to)h(the)427 1167 y(nearest-pixel)25
-b(sc)n(heme)h(\(ab)r(o)n(v)n(e\))g(in)g(not)g(displacing)g(features)g
-(in)g(the)h(data,)f(y)n(et)g(it)h(still)f(executes)g(fairly)427
-1267 y(rapidly)-7 b(.)74 b(It)40 b(is)g(generally)e(a)i(safe)f(c)n
-(hoice)g(if)i(y)n(ou)e(do)h(not)g(ha)n(v)n(e)e(an)n(y)h(particular)g
-(reason)f(to)i(fa)n(v)n(our)427 1367 y(another)g(sc)n(heme,)k(since)c
-(it)h(cannot)g(in)n(tro)r(duce)f(oscillations.)75 b(Ho)n(w)n(ev)n(er,)
-42 b(it)f(do)r(es)g(in)n(tro)r(duce)f(some)427 1466 y(spatial)28
-b(smo)r(othing)f(whic)n(h)i(v)-5 b(aries)27 b(according)f(to)i(the)h
-(distance)f(of)g(the)h(in)n(terp)r(olation)e(p)r(oin)n(t)h(from)g(the)
-427 1566 y(neigh)n(b)r(ouring)g(pixels.)39 b(This)29
-b(can)f(degrade)f(the)i(shap)r(e)f(of)h(sharp)e(features)h(in)h(the)g
-(data)f(in)h(a)f(p)r(osition-)427 1665 y(dep)r(enden)n(t)f(w)n(a)n(y)-7
-b(.)35 b(It)27 b(ma)n(y)e(also)g(sho)n(w)h(in)g(the)h(output)g(v)-5
-b(ariance)24 b(grid)i(\(if)h(used\))f(as)g(a)g(pattern)g(of)g(strip)r
-(es)427 1765 y(or)h(fringes.)227 1913 y(An)35 b(alternativ)n(e)e(set)h
-(of)h(in)n(terp)r(olation)e(sc)n(hemes)h(is)g(based)g(on)g(forming)g
-(the)g(in)n(terp)r(olated)g(v)-5 b(alue)34 b(from)g(the)227
-2012 y(w)n(eigh)n(ted)g(sum)h(of)f(a)g(set)h(of)f(surrounding)f(pixel)i
-(v)-5 b(alues)34 b(\(not)h(necessarily)e(just)i(the)g(nearest)e(neigh)n
-(b)r(ours\).)227 2112 y(This)27 b(approac)n(h)e(has)h(its)h(origins)e
-(in)i(the)g(theory)f(of)h(digital)f(\014ltering,)h(in)f(whic)n(h)h(in)n
-(terp)r(olated)f(v)-5 b(alues)27 b(are)e(ob-)227 2212
-y(tained)f(b)n(y)g(conceptually)f(passing)g(the)h(sampled)f(data)h
-(\(represen)n(ted)e(b)n(y)i(a)f(grid)g(of)h(delta)g(functions\))g
-(through)227 2311 y(a)30 b(linear)g(\014lter)g(whic)n(h)g(implemen)n
-(ts)h(a)f(con)n(v)n(olution.)43 b(Because)29 b(the)i(con)n(v)n(olution)
-e(k)n(ernel)g(is)h(con)n(tin)n(uous,)g(the)227 2411 y(con)n(v)n
-(olution)23 b(yields)h(a)g(con)n(tin)n(uous)f(function)h(whic)n(h)g(ma)
-n(y)g(then)g(b)r(e)h(ev)-5 b(aluated)24 b(at)g(fractional)f(pixel)h(p)r
-(ositions.)227 2511 y(The)33 b(\(p)r(ossibly)g(m)n(ulti-dimensional\))f
-(k)n(ernel)g(is)h(usually)f(regarded)f(as)h Ft(")p Fk(separable)p
-Ft(")e Fk(and)i(formed)h(from)f(the)227 2610 y(pro)r(duct)22
-b(of)g(a)f(set)h(of)g(iden)n(tical)g(1-dimensional)e(k)n(ernel)h
-(functions,)i(ev)-5 b(aluated)22 b(along)f(eac)n(h)g(dimension.)35
-b(Di\013er-)227 2710 y(en)n(t)29 b(in)n(terp)r(olation)f(sc)n(hemes)h
-(are)e(then)j(distinguished)f(b)n(y)f(the)i(c)n(hoice)e(of)h(this)g
-(1-dimensional)e(in)n(terp)r(olation)227 2809 y(k)n(ernel.)36
-b(The)28 b(n)n(um)n(b)r(er)f(of)h(surrounding)e(pixels)h(whic)n(h)h
-(con)n(tribute)f(to)h(the)g(result)f(ma)n(y)g(also)f(b)r(e)i(v)-5
-b(aried.)227 2927 y(F)e(rom)29 b(a)f(practical)g(standp)r(oin)n(t,)h
-(it)h(is)f(useful)g(to)g(divide)g(the)g(w)n(eigh)n(ted)f(sum)h(of)g
-(pixel)g(v)-5 b(alues)29 b(b)n(y)f(the)i(sum)f(of)227
-3027 y(the)g(w)n(eigh)n(ts)e(when)h(determining)g(the)h(in)n(terp)r
-(olated)e(v)-5 b(alue.)38 b(Strictly)-7 b(,)29 b(this)f(means)g(that)g
-(a)g(true)g(con)n(v)n(olution)227 3126 y(is)e(no)f(longer)g(b)r(eing)h
-(p)r(erformed.)36 b(Ho)n(w)n(ev)n(er,)24 b(the)i(distinction)g(is)g
-(rarely)e(imp)r(ortan)n(t)h(in)h(practice)f(b)r(ecause)h(\(for)227
-3226 y(sligh)n(tly)e(subtle)h(reasons\))d(the)j(sum)f(of)g(w)n(eigh)n
-(ts)g(is)g(alw)n(a)n(ys)e(appro)n(ximately)h(constan)n(t)g(for)h(go)r
-(o)r(d)f(in)n(terp)r(olation)227 3325 y(k)n(ernels.)51
-b(The)33 b(adv)-5 b(an)n(tage)31 b(of)i(this)g(tec)n(hnique,)h(whic)n
-(h)f(is)f(used)h(here,)h(is)e(that)h(it)g(can)g(easily)f(accommo)r
-(date)227 3425 y(missing)27 b(data)g(and)h(tends)g(to)f(minimise)h(un)n
-(w)n(an)n(ted)f(oscillations)f(at)i(the)g(edges)f(of)g(the)h(data)f
-(grid.)227 3543 y(In)d(the)g(follo)n(wing)e(sc)n(hemes,)h(whic)n(h)h
-(are)e(based)h(on)g(a)g(1-dimensional)f(in)n(terp)r(olation)g(k)n
-(ernel,)i(the)f(\014rst)g(elemen)n(t)227 3642 y(of)j(the)g(P)-7
-b(ARAMS)26 b(arra)n(y)e(should)h(b)r(e)h(used)g(to)f(sp)r(ecify)h(ho)n
-(w)f(man)n(y)h(pixels)f(are)g(to)g(con)n(tribute)h(to)f(the)h(in)n
-(terp)r(o-)227 3742 y(lated)31 b(result)g(on)f(either)h(side)g(of)f
-(the)i(in)n(terp)r(olation)e(p)r(oin)n(t)h(in)g(eac)n(h)f(dimension)g
-(\(the)i(nearest)e(in)n(teger)g(v)-5 b(alue)227 3841
-y(is)27 b(used\).)36 b(Execution)26 b(time)h(increases)e(rapidly)h
-(with)h(this)f(n)n(um)n(b)r(er.)36 b(T)n(ypically)-7
-b(,)26 b(a)g(v)-5 b(alue)27 b(of)f(2)g(is)g(appropriate)227
-3941 y(and)k(the)h(minim)n(um)f(v)-5 b(alue)30 b(used)g(will)g(b)r(e)h
-(1)f(\(i.e.)44 b(t)n(w)n(o)29 b(pixels)h(altogether,)g(one)f(on)h
-(either)g(side)g(of)g(the)g(in)n(ter-)227 4041 y(p)r(olation)g(p)r(oin)
-n(t\).)44 b(A)30 b(v)-5 b(alue)30 b(of)f(zero)g(or)g(less)g(ma)n(y)h(b)
-r(e)g(giv)n(en)f(for)g(P)-7 b(ARAMS\(1\))31 b(to)e(indicate)h(that)g(a)
-g(suitable)227 4140 y(n)n(um)n(b)r(er)e(of)f(pixels)h(should)f(b)r(e)h
-(calculated)f(automatically)-7 b(.)227 4258 y(In)28 b(eac)n(h)f(of)g
-(these)h(cases,)f(the)h(FINTERP)f(argumen)n(t)f(is)i(not)f(used:)340
-4497 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(SINC:)27 b(This)f(sc)n(heme)g
-(uses)g(a)g(sinc\(pi)p Fj(\003)p Fk(x\))g(k)n(ernel,)g(where)g(x)g(is)g
-(the)h(pixel)f(o\013set)h(from)f(the)g(in)n(ter-)427
-4597 y(p)r(olation)j(p)r(oin)n(t)h(and)g(sinc\(z\)=sin\(z\)/z.)42
-b(This)30 b(sometimes)f(features)g(as)g(an)g Ft(")p Fk(optimal)p
-Ft(")f Fk(in)n(terp)r(olation)427 4697 y(k)n(ernel)35
-b(in)h(b)r(o)r(oks)f(on)g(image)g(pro)r(cessing.)59 b(Its)36
-b(supp)r(osed)f(optimalit)n(y)h(dep)r(ends)g(on)f(the)h(assumption)427
-4796 y(that)d(the)g(data)e(are)h(band-limited)g(\(i.e.)52
-b(ha)n(v)n(e)31 b(no)h(spatial)g(frequencies)g(ab)r(o)n(v)n(e)f(a)h
-(certain)f(v)-5 b(alue\))33 b(and)427 4896 y(are)e(adequately)g
-(sampled.)49 b(In)32 b(practice,)g(astronomical)d(data)j(rarely)e(meet)
-i(these)f(requiremen)n(ts.)48 b(In)427 4996 y(addition,)35
-b(high)e(spatial)g(frequencies)f(are)h(often)g(presen)n(t)g(due)g
-(\(e.g.\))54 b(to)33 b(image)g(defects)g(and)g(cosmic)427
-5095 y(ra)n(y)22 b(ev)n(en)n(ts.)35 b(Consequen)n(tly)-7
-b(,)24 b(substan)n(tial)e(ringing)h(can)g(b)r(e)h(exp)r(erienced)f
-(with)h(this)f(k)n(ernel.)35 b(The)24 b(k)n(ernel)427
-5195 y(also)33 b(deca)n(ys)g(slo)n(wly)g(with)i(distance,)g(so)e(that)i
-(man)n(y)e(surrounding)g(pixels)h(are)f(required,)h(leading)g(to)427
-5295 y(p)r(o)r(or)24 b(p)r(erformance.)35 b(Abruptly)25
-b(truncating)g(it,)g(b)n(y)g(using)f(only)g(a)h(few)g(neigh)n(b)r
-(ouring)e(pixels,)i(impro)n(v)n(es)427 5394 y(p)r(erformance)37
-b(and)g(ma)n(y)g(reduce)h(ringing)e(\(if)j(P)-7 b(ARAMS\(1\))38
-b(is)g(set)g(to)f(zero,)i(then)g(only)e(t)n(w)n(o)g(pixels)427
-5494 y(will)31 b(b)r(e)g(used)g(on)f(either)g(side\).)46
-b(Ho)n(w)n(ev)n(er,)30 b(a)g(more)g(gradual)f(truncation,)i(as)f
-(implemen)n(ted)h(b)n(y)f(other)427 5593 y(k)n(ernels,)c(is)g
-(generally)f(to)h(b)r(e)g(preferred.)36 b(This)26 b(k)n(ernel)f(is)i
-(pro)n(vided)e(mainly)h(so)g(that)g(y)n(ou)g(can)g(con)n(vince)427
-5693 y(y)n(ourself)h(not)g(to)h(use)f(it!)p eop end
-%%Page: 322 332
-TeXDict begin 322 331 bop 0 52 a FG(322)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(AST)p Ft(__)p Fk(SINCSINC:)25 b(This)g(sc)n(heme)g(uses)f(an)h
-(impro)n(v)n(ed)e(k)n(ernel,)i(of)g(the)g(form)f(sinc\(pi)p
-Fj(\003)p Fk(x\).sinc\(k)p Fj(\003)p Fk(pi)p Fj(\003)p
-Fk(x\),)427 451 y(with)32 b(k)f(a)f(constan)n(t,)h(out)g(to)g(the)g(p)r
-(oin)n(t)g(where)g(sinc\(k)p Fj(\003)p Fk(pi)p Fj(\003)p
-Fk(x\))f(go)r(es)g(to)h(zero,)f(and)h(zero)f(b)r(ey)n(ond.)47
-b(The)427 551 y(second)32 b(sinc\(\))i(factor)e(pro)n(vides)f(an)i
-Ft(")p Fk(en)n(v)n(elop)r(e)p Ft(")e Fk(whic)n(h)i(gradually)e(rolls)h
-(o\013)h(the)g(normal)f(sinc\(pi)p Fj(\003)p Fk(x\))427
-650 y(k)n(ernel)27 b(at)g(large)e(o\013sets.)37 b(The)27
-b(width)h(of)f(this)g(en)n(v)n(elop)r(e)g(is)g(sp)r(eci\014ed)g(b)n(y)g
-(giving)f(the)i(n)n(um)n(b)r(er)f(of)g(pixels)427 750
-y(o\013set)j(at)f(whic)n(h)h(it)g(go)r(es)e(to)i(zero)e(b)n(y)h(means)g
-(of)h(the)g(P)-7 b(ARAMS\(2\))30 b(v)-5 b(alue,)30 b(whic)n(h)f(should)
-h(b)r(e)g(at)f(least)427 849 y(1.0)34 b(\(in)i(addition,)g(setting)f(P)
--7 b(ARAMS\(1\))36 b(to)e(zero)g(will)h(select)g(the)g(n)n(um)n(b)r(er)
-g(of)g(con)n(tributing)f(pixels)427 949 y(so)g(as)g(to)g(utilise)g(the)
-h(full)g(width)g(of)g(the)f(k)n(ernel,)h(out)g(to)f(where)g(it)h(reac)n
-(hes)d(zero\).)57 b(The)34 b(case)f(giv)n(en)427 1049
-y(b)n(y)i(P)-7 b(ARAMS\(1\)=2,)37 b(P)-7 b(ARAMS\(2\)=2)35
-b(is)g(t)n(ypically)g(a)g(go)r(o)r(d)f(c)n(hoice)h(and)g(is)g
-(sometimes)g(kno)n(wn)f(as)427 1148 y(the)i(Lanczos)e(k)n(ernel.)60
-b(This)35 b(is)g(a)g(v)-5 b(aluable)35 b(general-purp)r(ose)e(in)n
-(terp)r(olation)i(sc)n(heme,)i(in)n(termediate)427 1248
-y(in)d(its)f(visual)g(e\013ect)h(on)f(images)f(b)r(et)n(w)n(een)h(the)h
-(AST)p Ft(__)p Fk(NEAREST)e(and)h(AST)p Ft(__)p Fk(LINEAR)g(sc)n
-(hemes.)427 1348 y(Although)i(the)f(k)n(ernel)f(is)h(sligh)n(tly)g
-(oscillatory)-7 b(,)34 b(ringing)f(is)h(adequately)f(suppressed)h(if)g
-(the)h(data)f(are)427 1447 y(w)n(ell)28 b(sampled.)340
-1572 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(SINCCOS:)38 b(This)g(sc)n(heme)
-g(uses)g(a)g(k)n(ernel)f(of)h(the)h(form)f(sinc\(pi)p
-Fj(\003)p Fk(x\).cos\(k)p Fj(\003)p Fk(pi)p Fj(\003)p
-Fk(x\),)h(with)g(k)f(a)427 1672 y(constan)n(t,)32 b(out)f(to)g(the)h(p)
-r(oin)n(t)f(where)g(cos\(k)p Fj(\003)p Fk(pi)p Fj(\003)p
-Fk(x\))f(go)r(es)h(to)g(zero,)g(and)g(zero)f(b)r(ey)n(ond.)48
-b(As)31 b(ab)r(o)n(v)n(e,)g(the)427 1771 y(cos\(\))h(factor)f(pro)n
-(vides)f(an)h(en)n(v)n(elop)r(e)g(whic)n(h)h(gradually)e(rolls)g(o\013)
-i(the)g(sinc\(\))g(k)n(ernel)f(at)h(large)e(o\013sets.)427
-1871 y(The)e(width)h(of)e(this)h(en)n(v)n(elop)r(e)f(is)h(sp)r
-(eci\014ed)g(b)n(y)f(giving)g(the)h(n)n(um)n(b)r(er)g(of)g(pixels)f
-(o\013set)h(at)g(whic)n(h)f(it)i(go)r(es)427 1971 y(to)d(zero)f(b)n(y)g
-(means)g(of)h(the)g(P)-7 b(ARAMS\(2\))27 b(v)-5 b(alue,)26
-b(whic)n(h)g(should)f(b)r(e)h(at)g(least)f(1.0)g(\(in)i(addition,)f
-(setting)427 2070 y(P)-7 b(ARAMS\(1\))38 b(to)f(zero)f(will)i(select)f
-(the)g(n)n(um)n(b)r(er)g(of)g(con)n(tributing)g(pixels)g(so)f(as)h(to)g
-(utilise)g(the)h(full)427 2170 y(width)33 b(of)f(the)g(k)n(ernel,)g
-(out)g(to)g(where)g(it)g(reac)n(hes)e(zero\).)50 b(This)31
-b(sc)n(heme)h(giv)n(es)f(similar)g(results)g(to)h(the)427
-2270 y(AST)p Ft(__)p Fk(SINCSINC)c(sc)n(heme,)f(whic)n(h)h(it)g(resem)n
-(bles.)340 2395 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(SINCGA)n(USS:)35
-b(This)f(sc)n(heme)f(uses)h(a)g(k)n(ernel)f(of)h(the)g(form)g(sinc\(pi)
-p Fj(\003)p Fk(x\).exp\(-k)p Fj(\003)p Fk(x)p Fj(\003)p
-Fk(x\),)g(with)h(k)427 2494 y(a)c(p)r(ositiv)n(e)g(constan)n(t.)48
-b(Here,)32 b(the)g(sinc\(\))g(k)n(ernel)e(is)h(rolled)g(o\013)g(using)g
-(a)g(Gaussian)g(en)n(v)n(elop)r(e)f(whic)n(h)i(is)427
-2594 y(sp)r(eci\014ed)i(b)n(y)e(giving)h(its)g(full-width)h(at)f
-(half-maxim)n(um)f(\(FWHM\))j(b)n(y)e(means)f(of)i(the)f(P)-7
-b(ARAMS\(2\))427 2694 y(v)i(alue,)32 b(whic)n(h)f(should)g(b)r(e)g(at)g
-(least)f(0.1)h(\(in)g(addition,)h(setting)f(P)-7 b(ARAMS\(1\))31
-b(to)g(zero)f(will)h(select)g(the)427 2793 y(n)n(um)n(b)r(er)22
-b(of)f(con)n(tributing)g(pixels)g(so)g(as)g(to)h(utilise)f(the)h(width)
-h(of)e(the)h(k)n(ernel)f(out)g(to)h(where)f(the)h(en)n(v)n(elop)r(e)427
-2893 y(declines)k(to)f(1\045)h(of)f(its)h(maxim)n(um)g(v)-5
-b(alue\).)36 b(On)25 b(astronomical)f(images)h(and)g(sp)r(ectra,)h(go)r
-(o)r(d)f(results)g(are)427 2992 y(often)36 b(obtained)g(b)n(y)g(appro)n
-(ximately)e(matc)n(hing)h(the)h(FWHM)h(of)f(the)g(en)n(v)n(elop)r(e)f
-(function,)k(giv)n(en)c(b)n(y)427 3092 y(P)-7 b(ARAMS\(2\),)31
-b(to)e(the)g(p)r(oin)n(t)h(spread)e(function)i(of)f(the)h(input)g
-(data.)41 b(Ho)n(w)n(ev)n(er,)28 b(there)h(do)r(es)g(not)g(seem)427
-3192 y(to)f(b)r(e)g(an)n(y)f(theoretical)f(reason)g(for)h(this.)340
-3317 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(SOMB:)24 b(This)h(sc)n(heme)g
-(uses)f(a)g(som)n(b\(pi)p Fj(\003)p Fk(x\))h(k)n(ernel)f(\(a)g
-Ft(")p Fk(som)n(brero)p Ft(")e Fk(function\),)k(where)f(x)f(is)h(the)
-427 3416 y(pixel)32 b(o\013set)g(from)f(the)i(in)n(terp)r(olation)e(p)r
-(oin)n(t)h(and)f(som)n(b\(z\)=2)p Fj(\003)p Fk(J1\(z\)/z)f(\(J1)h(is)h
-(a)f(Bessel)g(function)i(of)427 3516 y(the)24 b(\014rst)g(kind)f(of)h
-(order)e(1\).)36 b(It)24 b(is)f(similar)g(to)g(the)h(AST)p
-Ft(__)p Fk(SINC)g(k)n(ernel,)g(and)f(has)g(the)h(same)f(parameter)427
-3616 y(usage.)340 3741 y Fj(\017)45 b Fk(AST)p Ft(__)p
-Fk(SOMBCOS:)30 b(This)g(sc)n(heme)g(uses)g(a)g(k)n(ernel)f(of)i(the)g
-(form)f(som)n(b\(pi)p Fj(\003)p Fk(x\).cos\(k)p Fj(\003)p
-Fk(pi)p Fj(\003)p Fk(x\),)f(with)i(k)f(a)427 3840 y(constan)n(t,)g(out)
-g(to)g(the)g(p)r(oin)n(t)g(where)f(cos\(k)p Fj(\003)p
-Fk(pi)p Fj(\003)p Fk(x\))g(go)r(es)g(to)g(zero,)h(and)g(zero)e(b)r(ey)n
-(ond.)44 b(It)30 b(is)g(similar)f(to)427 3940 y(the)f(AST)p
-Ft(__)p Fk(SINCCOS)f(k)n(ernel,)g(and)h(has)f(the)h(same)f(parameter)f
-(usage.)227 4094 y(In)i(addition,)g(the)g(follo)n(wing)e(sc)n(hemes)h
-(are)g(pro)n(vided)f(whic)n(h)i(are)e(not)i(based)f(on)g(a)g
-(1-dimensional)g(k)n(ernel:)340 4343 y Fj(\017)45 b Fk(AST)p
-Ft(__)p Fk(BLOCKA)-9 b(VE:)20 b(This)h(sc)n(heme)g(simply)g(tak)n(es)f
-(an)h(a)n(v)n(erage)d(of)j(all)g(the)h(pixels)f(on)f(the)i(input)g
-(grid)e(in)427 4443 y(a)k(cub)r(e)h(cen)n(tred)f(on)g(the)h(in)n(terp)r
-(olation)f(p)r(oin)n(t.)36 b(The)24 b(n)n(um)n(b)r(er)g(of)g(pixels)h
-(in)f(the)h(cub)r(e)g(is)f(determined)h(b)n(y)427 4543
-y(the)g(v)-5 b(alue)25 b(of)g(the)g(\014rst)g(elemen)n(t)g(of)f(the)h
-(P)-7 b(ARAMS)26 b(arra)n(y)-7 b(,)23 b(whic)n(h)i(giv)n(es)e(the)i(n)n
-(um)n(b)r(er)g(of)g(pixels)f(in)h(eac)n(h)427 4642 y(dimension)e(on)f
-(either)h(side)f(of)h(the)g(cen)n(tral)f(p)r(oin)n(t.)35
-b(Hence)23 b(a)f(blo)r(c)n(k)h(of)f(\(2)h Fj(\003)f Fk(P)-7
-b(ARAMS\(1\)\))p Fj(\003\003)p Fk(NDIM)p Ft(_)p Fk(IN)427
-4742 y(pixels)31 b(in)g(the)g(input)g(grid)f(will)h(b)r(e)g(examined)f
-(to)h(determine)g(the)g(v)-5 b(alue)30 b(of)h(the)g(output)g(pixel.)46
-b(If)31 b(the)427 4841 y(v)-5 b(ariance)32 b(is)h(not)g(b)r(eing)g
-(used)g(\(USEV)-9 b(AR)33 b(=)g(.F)-9 b(ALSE.\))33 b(then)h(all)e(v)-5
-b(alid)33 b(pixels)g(in)g(this)h(cub)r(e)f(will)g(b)r(e)427
-4941 y(a)n(v)n(eraged)22 b(in)i(to)g(the)g(result)g(with)g(equal)g(w)n
-(eigh)n(t.)35 b(If)24 b(v)-5 b(ariances)23 b(are)g(b)r(eing)h(used,)h
-(then)g(eac)n(h)e(input)i(pixel)427 5041 y(will)35 b(b)r(e)g(w)n(eigh)n
-(ted)e(prop)r(ortionally)g(to)h(the)h(recipro)r(cal)e(of)h(its)h(v)-5
-b(ariance;)37 b(an)n(y)c(pixel)i(without)g(a)f(v)-5 b(alid)427
-5140 y(v)g(ariance)33 b(will)h(b)r(e)h(discarded.)55
-b(This)34 b(sc)n(heme)g(is)f(suitable)h(where)g(the)g(output)h(grid)e
-(is)h(m)n(uc)n(h)g(coarser)427 5240 y(than)28 b(the)g(input)h(grid;)e
-(if)i(the)f(ratio)f(of)h(pixel)g(sizes)f(is)h(R)g(then)g(a)g(suitable)f
-(v)-5 b(alue)28 b(of)g(P)-7 b(ARAMS\(1\))28 b(ma)n(y)427
-5340 y(b)r(e)g(R/2.)227 5494 y(Finally)-7 b(,)33 b(supplying)e(the)h
-(follo)n(wing)f(v)-5 b(alues)31 b(for)g(INTERP)h(allo)n(ws)e(y)n(ou)h
-(to)g(implemen)n(t)h(y)n(our)f(o)n(wn)g(sub-pixel)227
-5593 y(in)n(terp)r(olation)f(sc)n(heme)g(b)n(y)g(means)g(of)h(y)n(our)e
-(o)n(wn)h(routine.)46 b(Y)-7 b(ou)30 b(should)h(supply)f(the)h(name)g
-(of)f(this)h(routine)227 5693 y(via)c(the)h(FINTERP)g(argumen)n(t:)p
-eop end
-%%Page: 323 333
-TeXDict begin 323 332 bop 3643 52 a FG(323)340 491 y
-Fj(\017)45 b Fk(AST)p Ft(__)p Fk(UKERN1:)33 b(In)22 b(this)g(sc)n
-(heme,)g(y)n(ou)f(supply)g(a)g(routine)h(to)f(ev)-5 b(aluate)21
-b(y)n(our)g(o)n(wn)f(1-dimensional)h(in-)427 591 y(terp)r(olation)g(k)n
-(ernel,)h(whic)n(h)g(is)g(then)g(used)g(to)f(p)r(erform)g(sub-pixel)h
-(in)n(terp)r(olation)f(\(as)g(describ)r(ed)h(ab)r(o)n(v)n(e\).)427
-690 y(The)29 b(routine)e(y)n(ou)h(supply)g(should)g(ha)n(v)n(e)f(the)i
-(same)e(in)n(terface)h(as)f(the)i(\014ctitious)f(AST)p
-Ft(_)p Fk(UKERN1)g(rou-)427 790 y(tine)33 b(\(q.v.\).)51
-b(In)33 b(addition,)g(a)f(v)-5 b(alue)32 b(should)g(b)r(e)h(giv)n(en)f
-(via)f(P)-7 b(ARAMS\(1\))33 b(to)f(sp)r(ecify)h(the)g(n)n(um)n(b)r(er)f
-(of)427 890 y(neigh)n(b)r(ouring)e(pixels)h(whic)n(h)h(are)e(to)h(con)n
-(tribute)g(to)g(eac)n(h)g(in)n(terp)r(olated)g(v)-5 b(alue)31
-b(\(in)h(the)f(same)g(w)n(a)n(y)f(as)427 989 y(for)d(the)h
-(pre-de\014ned)g(in)n(terp)r(olation)e(sc)n(hemes)h(describ)r(ed)h(ab)r
-(o)n(v)n(e\).)36 b(Other)27 b(elemen)n(ts)g(of)h(the)g(P)-7
-b(ARAMS)427 1089 y(arra)n(y)26 b(are)g(a)n(v)-5 b(ailable)26
-b(to)i(pass)f(v)-5 b(alues)27 b(to)g(y)n(our)g(in)n(terp)r(olation)f
-(routine.)340 1224 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(UINTERP:)39
-b(This)h(is)g(a)g(completely)g(general)e(sc)n(heme,)43
-b(in)d(whic)n(h)g(y)n(our)f(in)n(terp)r(olation)g(rou-)427
-1323 y(tine)f(has)f(access)g(to)g(all)g(of)h(the)g(input)g(data.)67
-b(This)37 b(allo)n(ws)f(y)n(ou)h(to)g(implemen)n(t)i(an)n(y)d(in)n
-(terp)r(olation)427 1423 y(algorithm)e(y)n(ou)h(c)n(ho)r(ose,)h(whic)n
-(h)f(could)g(\(for)g(example\))g(b)r(e)h(non-linear,)g(or)e(adaptiv)n
-(e.)59 b(In)36 b(this)f(case,)427 1522 y(the)27 b(AST)p
-Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)e Fk(functions)h(pla)n(y)g(no)g
-(role)g(in)g(the)h(sub-pixel)f(in)n(terp)r(olation)g(pro)r(cess)f(and)
-427 1622 y(simply)34 b(handle)g(the)g(geometrical)e(transformation)g
-(of)i(co)r(ordinates)f(and)g(other)g(housek)n(eeping.)55
-b(The)427 1722 y(routine)30 b(y)n(ou)f(supply)h(should)f(ha)n(v)n(e)g
-(the)h(same)g(in)n(terface)f(as)g(the)h(\014ctitious)h(AST)p
-Ft(_)p Fk(UINTERP)e(routine)427 1821 y(\(q.v.\).)50 b(In)32
-b(this)g(case,)g(the)g(P)-7 b(ARAMS)33 b(argumen)n(t)d(is)i(not)g(used)
-g(b)n(y)f(AST)p Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)p
-Fk(,)g(but)i(is)427 1921 y(a)n(v)-5 b(ailable)27 b(to)g(pass)g(v)-5
-b(alues)27 b(to)h(y)n(our)e(in)n(terp)r(olation)h(routine.)-2
-2086 y Fc(Con)m(trol)32 b(Flags)n(:)227 2232 y Fk(The)24
-b(follo)n(wing)f(\015ags)g(are)g(de\014ned)h(in)g(the)g(AST)p
-Ft(_)p Fk(P)-7 b(AR)24 b(include)g(\014le)g(and)g(ma)n(y)f(b)r(e)h
-(used)g(to)g(pro)n(vide)e(additional)227 2332 y(con)n(trol)29
-b(o)n(v)n(er)f(the)i(resampling)e(pro)r(cess.)43 b(Ha)n(ving)28
-b(selected)i(a)f(set)h(of)g(\015ags,)f(y)n(ou)g(should)h(supply)g(the)g
-(sum)g(of)227 2432 y(their)e(v)-5 b(alues)27 b(via)g(the)h(FLA)n(GS)g
-(argumen)n(t:)340 2698 y Fj(\017)45 b Fk(AST)p Ft(__)p
-Fk(NOBAD:)22 b(Indicates)g(that)h(an)n(y)e(output)i(arra)n(y)d(elemen)n
-(ts)i(for)f(whic)n(h)i(no)e(resampled)h(v)-5 b(alue)22
-b(could)427 2797 y(b)r(e)g(obtained)f(should)h(b)r(e)f(left)i(set)e(to)
-g(the)h(v)-5 b(alue)21 b(they)h(had)f(on)h(en)n(try)e(to)i(this)g
-(function.)35 b(If)22 b(this)g(\015ag)e(is)i(not)427
-2897 y(supplied,)34 b(suc)n(h)e(output)g(arra)n(y)e(elemen)n(ts)i(are)f
-(set)h(to)g(the)g(v)-5 b(alue)32 b(supplied)h(for)e(argumen)n(t)g(BAD)n
-(V)-9 b(AL.)427 2997 y(Note,)39 b(this)d(\015ag)g(cannot)g(b)r(e)g
-(used)g(in)h(conjunction)f(with)h(the)g(AST)p Ft(__)p
-Fk(CONSER)-9 b(VEFLUX)35 b(\015ag)h(\(an)427 3096 y(error)26
-b(will)i(b)r(e)g(rep)r(orted)f(if)h(b)r(oth)g(\015ags)e(are)h(sp)r
-(eci\014ed\).)340 3231 y Fj(\017)45 b Fk(AST)p Ft(__)p
-Fk(URESAMP1,)27 b(2,)g(3)g(&)h(4:)36 b(A)28 b(set)g(of)f(four)g
-(\015ags)g(whic)n(h)g(are)g(reserv)n(ed)f(for)h(y)n(our)f(o)n(wn)h
-(use.)37 b(They)427 3331 y(ma)n(y)e(b)r(e)h(used)f(to)g(pass)f(priv)-5
-b(ate)35 b(information)g(to)g(an)n(y)g(sub-pixel)g(in)n(terp)r(olation)
-f(routine)h(whic)n(h)g(y)n(ou)427 3430 y(implemen)n(t)28
-b(y)n(ourself.)36 b(They)28 b(are)e(ignored)h(b)n(y)g(all)g(the)h
-(pre-de\014ned)f(in)n(terp)r(olation)g(sc)n(hemes.)340
-3565 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(USEBAD:)33 b(Indicates)g(that)h
-(there)f(ma)n(y)f(b)r(e)i(bad)f(pixels)f(in)i(the)f(input)h(arra)n
-(y\(s\))d(whic)n(h)i(m)n(ust)427 3664 y(b)r(e)26 b(recognised)d(b)n(y)i
-(comparing)e(with)j(the)f(v)-5 b(alue)25 b(giv)n(en)g(for)f(BAD)n(V)-9
-b(AL)26 b(and)e(propagated)g(to)h(the)g(output)427 3764
-y(arra)n(y\(s\).)41 b(If)30 b(this)g(\015ag)f(is)g(not)h(set,)g(all)f
-(input)h(v)-5 b(alues)30 b(are)e(treated)h(literally)g(and)h(the)g(BAD)
-n(V)-9 b(AL)30 b(v)-5 b(alue)427 3864 y(is)28 b(only)f(used)h(for)f
-(\015agging)f(output)i(arra)n(y)d(v)-5 b(alues.)340 3998
-y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(USEV)-9 b(AR:)25 b(Indicates)f(that)
-g(v)-5 b(ariance)23 b(information)h(should)g(b)r(e)h(pro)r(cessed)e(in)
-i(order)e(to)h(pro)n(vide)427 4098 y(estimates)k(of)g(the)h
-(statistical)e(error)g(asso)r(ciated)f(with)j(the)g(resampled)e(v)-5
-b(alues.)38 b(If)29 b(this)f(\015ag)f(is)h(not)h(set,)427
-4198 y(no)h(v)-5 b(ariance)29 b(pro)r(cessing)g(will)i(o)r(ccur)e(and)i
-(the)f(IN)p Ft(_)p Fk(V)-9 b(AR)31 b(and)f(OUT)p Ft(_)p
-Fk(V)-9 b(AR)30 b(arra)n(ys)e(will)j(not)f(b)r(e)h(used.)427
-4297 y(\(Note)d(that)g(this)g(\015ag)f(is)g(only)g(a)n(v)-5
-b(ailable)27 b(in)h(the)g(F)-7 b(ortran)26 b(in)n(terface)h(to)g
-(AST.\))340 4432 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(CONSER)-9
-b(VEFLUX:)28 b(Indicates)h(that)f(the)h(output)h(pixel)e(v)-5
-b(alues)29 b(should)f(b)r(e)h(scaled)f(in)h(suc)n(h)f(a)427
-4531 y(w)n(a)n(y)c(as)g(to)g(preserv)n(e)f(\(appro)n(ximately\))g(the)i
-(total)g(data)f(v)-5 b(alue)25 b(in)f(a)h(feature)f(on)g(the)h(sky)-7
-b(.)36 b(Without)25 b(this)427 4631 y(\015ag,)k(eac)n(h)f(output)i
-(pixel)f(v)-5 b(alue)29 b(represen)n(ts)f(an)g(instan)n(taneous)g
-(sample)h(of)g(the)h(input)f(data)g(v)-5 b(alues)29 b(at)427
-4731 y(the)e(corresp)r(onding)d(input)j(p)r(osition.)36
-b(This)26 b(is)g(appropriate)e(if)i(the)h(input)g(data)e(represen)n(ts)
-g(the)h(spatial)427 4830 y(densit)n(y)k(of)f(some)g(quan)n(tit)n(y)h
-(\(e.g.)43 b(surface)28 b(brigh)n(tness)h(in)h(Janskys)e(p)r(er)i
-(square)e(arc-second\))g(b)r(ecause)427 4930 y(the)g(output)f(pixel)g
-(v)-5 b(alues)26 b(will)h(ha)n(v)n(e)f(the)h(same)g(normalisation)e
-(and)i(units)g(as)f(the)h(input)h(pixel)f(v)-5 b(alues.)427
-5029 y(Ho)n(w)n(ev)n(er,)27 b(if)i(the)g(input)g(data)f(v)-5
-b(alues)28 b(represen)n(t)f(\015ux)i(\(or)f(some)g(other)f(ph)n(ysical)
-h(quan)n(tit)n(y\))g(p)r(er)h(pixel,)427 5129 y(then)i(the)g(AST)p
-Ft(__)p Fk(CONSER)-9 b(VEFLUX)30 b(\015ag)g(could)h(b)r(e)g(used.)46
-b(This)30 b(causes)g(eac)n(h)g(output)h(pixel)g(v)-5
-b(alue)427 5229 y(to)28 b(b)r(e)g(scaled)f(b)n(y)g(the)h(ratio)f(of)g
-(the)h(output)g(pixel)g(size)f(to)h(the)g(input)g(pixel)g(size.)227
-5394 y(This)40 b(\015ag)g(can)f(only)h(b)r(e)h(used)f(if)g(the)h
-(Mapping)f(is)g(succesfully)g(appro)n(ximated)e(b)n(y)i(one)g(or)f
-(more)g(linear)227 5494 y(transformations.)71 b(Th)n(us)40
-b(an)f(error)f(will)h(b)r(e)i(rep)r(orted)d(if)j(it)f(used)f(when)h
-(the)g(TOL)f(argumen)n(t)g(is)g(set)h(to)227 5593 y(zero)d(\(whic)n(h)h
-(stops)f(the)h(use)f(of)h(linear)f(appro)n(ximations\),)h(or)f(if)h
-(the)g(Mapping)f(is)h(to)r(o)f(non-linear)g(to)g(b)r(e)227
-5693 y(appro)n(ximated)f(b)n(y)h(a)f(piece-wise)h(linear)f
-(transformation.)64 b(The)37 b(ratio)f(of)h(output)h(to)f(input)h
-(pixel)f(size)g(is)p eop end
-%%Page: 324 334
-TeXDict begin 324 333 bop 0 52 a FG(324)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 351 y Fk(ev)-5
-b(aluated)19 b(once)h(for)f(eac)n(h)f(panel)i(of)f(the)h(piece-wise)f
-(linear)g(appro)n(ximation)e(to)j(the)g(Mapping,)g(and)g(is)f(assumed)
-227 451 y(to)33 b(b)r(e)h(constan)n(t)f(for)g(all)g(output)g(pixels)g
-(in)h(the)g(panel.)54 b(The)33 b(scaling)f(factors)g(for)h(adjacen)n(t)
-g(panels)g(will)g(in)227 551 y(general)f(di\013er)h(sligh)n(tly)-7
-b(,)34 b(and)e(so)h(the)g(join)n(ts)g(b)r(et)n(w)n(een)g(panels)f(ma)n
-(y)g(b)r(e)i(visible)e(when)h(viewing)g(the)g(output)227
-650 y(image)k(at)g(high)g(con)n(trast.)64 b(If)38 b(this)f(is)g(a)g
-(problem,)i(reduce)e(the)g(v)-5 b(alue)37 b(of)g(the)h(TOL)f(argumen)n
-(t)f(un)n(til)h(the)227 750 y(di\013erence)28 b(b)r(et)n(w)n(een)f
-(adjacen)n(t)g(panels)h(is)f(su\016cien)n(tly)h(small)f(to)g(b)r(e)h
-(insigni\014can)n(t.)227 886 y(Note,)22 b(this)e(\015ag)f(cannot)g(b)r
-(e)h(used)g(in)g(conjunction)g(with)g(the)h(AST)p Ft(__)p
-Fk(NOBAD)e(\015ag)g(\(an)h(error)e(will)i(b)r(e)g(rep)r(orted)227
-986 y(if)28 b(b)r(oth)g(\015ags)f(are)g(sp)r(eci\014ed\).)227
-1122 y(Flux)h(conserv)-5 b(ation)26 b(can)h(only)h(b)r(e)g(appro)n
-(ximate)e(when)h(using)h(a)f(resampling)f(algorithm.)36
-b(F)-7 b(or)27 b(accurate)f(\015ux)227 1221 y(conserv)-5
-b(ation)26 b(use)i(the)g(AST)p Ft(_)p Fk(REBIN)p Fm(<)p
-Fk(X)p Fm(>)e Fk(or)h(AST)p Ft(_)p Fk(REBINSEQ)p Fm(<)p
-Fk(X)p Fm(>)f Fk(routine)h(instead.)-2 1394 y Fc(Propagation)33
-b(of)e(Missing)f(Data)n(:)227 1540 y Fk(Unless)j(the)g(AST)p
-Ft(__)p Fk(NOBAD)g(\015ag)f(is)h(sp)r(eci\014ed,)i(instances)d(of)h
-(missing)f(data)h(\(bad)g(pixels\))g(in)g(the)g(output)227
-1640 y(grid)22 b(are)g(iden)n(ti\014ed)h(b)n(y)g(o)r(ccurrences)e(of)i
-(the)g(BAD)n(V)-9 b(AL)23 b(v)-5 b(alue)23 b(in)g(the)g(OUT)f(arra)n(y)
--7 b(.)33 b(These)23 b(ma)n(y)f(b)r(e)h(pro)r(duced)227
-1739 y(if)28 b(an)n(y)f(of)h(the)g(follo)n(wing)e(happ)r(en:)340
-2035 y Fj(\017)45 b Fk(The)35 b(input)h(p)r(osition)f(\(the)h
-(transformed)e(p)r(osition)h(of)g(the)g(output)h(pixel's)f(cen)n(tre\))
-f(lies)h(outside)g(the)427 2135 y(b)r(oundary)27 b(of)h(the)g(grid)f
-(of)g(input)h(pixels.)340 2279 y Fj(\017)45 b Fk(The)32
-b(input)h(p)r(osition)e(lies)h(inside)g(the)g(b)r(oundary)f(of)g(a)h
-(bad)f(input)i(pixel.)49 b(In)32 b(this)g(con)n(text,)g(an)g(input)427
-2379 y(pixel)g(is)f(considered)f(bad)i(if)g(its)f(data)g(v)-5
-b(alue)31 b(is)h(equal)f(to)g(BAD)n(V)-9 b(AL)32 b(and)f(the)h(AST)p
-Ft(__)p Fk(USEBAD)f(\015ag)427 2478 y(is)h(set)f(via)g(the)h(FLA)n(GS)g
-(argumen)n(t.)48 b(\(P)n(ositions)30 b(whic)n(h)i(ha)n(v)n(e)e(half-in)
-n(tegral)g(co)r(ordinate)h(v)-5 b(alues,)32 b(and)427
-2578 y(therefore)d(lie)g(on)h(a)f(pixel)g(b)r(oundary)-7
-b(,)30 b(are)e(regarded)g(as)h(lying)g(within)h(the)g(pixel)f(with)h
-(the)g(larger,)e(i.e.)427 2678 y(more)f(p)r(ositiv)n(e,)g(index.\))340
-2822 y Fj(\017)45 b Fk(The)27 b(set)g(of)g(neigh)n(b)r(ouring)e(input)j
-(pixels)f(\(excluding)f(those)h(whic)n(h)g(are)e(bad\))i(is)g
-(unsuitable)g(for)f(calcu-)427 2922 y(lating)g(an)f(in)n(terp)r(olated)
-h(v)-5 b(alue.)36 b(Whether)26 b(this)g(is)g(true)f(ma)n(y)h(dep)r(end)
-g(on)g(the)g(sub-pixel)f(in)n(terp)r(olation)427 3021
-y(sc)n(heme)i(in)h(use.)340 3166 y Fj(\017)45 b Fk(The)31
-b(in)n(terp)r(olated)g(v)-5 b(alue)31 b(lies)g(outside)g(the)g(range)f
-(whic)n(h)h(can)g(b)r(e)h(represen)n(ted)d(using)i(the)h(data)e(t)n(yp)
-r(e)427 3266 y(of)e(the)g(OUT)f(arra)n(y)-7 b(.)227 3451
-y(In)29 b(addition,)f(asso)r(ciated)f(output)i(v)-5 b(ariance)27
-b(estimates)h(\(if)i(calculated\))e(ma)n(y)f(b)r(e)i(declared)e(bad)i
-(and)f(\015agged)227 3550 y(with)g(the)g(BAD)n(V)-9 b(AL)28
-b(v)-5 b(alue)28 b(in)g(the)g(OUT)p Ft(_)p Fk(V)-9 b(AR)27
-b(arra)n(y)e(under)j(an)n(y)f(of)g(the)h(follo)n(wing)f(circumstances:)
-340 3846 y Fj(\017)45 b Fk(The)28 b(asso)r(ciated)e(resampled)h(data)g
-(v)-5 b(alue)28 b(\(in)g(the)g(OUT)f(arra)n(y\))f(is)h(bad.)340
-3991 y Fj(\017)45 b Fk(The)19 b(set)g(of)g(neigh)n(b)r(ouring)e(input)j
-(pixels)e(whic)n(h)h(con)n(tributed)g(to)f(the)i(output)f(data)f(v)-5
-b(alue)19 b(do)f(not)h(all)g(ha)n(v)n(e)427 4090 y(v)-5
-b(alid)34 b(v)-5 b(ariance)32 b(estimates)h(asso)r(ciated)f(with)h
-(them.)55 b(In)33 b(this)h(con)n(text,)g(an)f(input)i(v)-5
-b(ariance)32 b(estimate)427 4190 y(ma)n(y)27 b(b)r(e)i(regarded)d(as)h
-(bad)h(either)g(b)r(ecause)f(it)h(has)g(the)g(v)-5 b(alue)28
-b(BAD)n(V)-9 b(AL)28 b(\(and)g(the)h(AST)p Ft(__)p Fk(USEBAD)427
-4289 y(\015ag)e(is)h(set\),)g(or)e(b)r(ecause)h(it)h(is)g(negativ)n(e.)
-340 4434 y Fj(\017)45 b Fk(The)23 b(set)f(of)h(neigh)n(b)r(ouring)e
-(input)i(pixels)g(for)f(whic)n(h)g(v)-5 b(alid)23 b(v)-5
-b(ariance)21 b(v)-5 b(alues)22 b(are)g(a)n(v)-5 b(ailable)21
-b(is)h(unsuitable)427 4534 y(for)30 b(calculating)f(an)g(o)n(v)n(erall)
-f(v)-5 b(ariance)28 b(v)-5 b(alue.)44 b(Whether)30 b(this)g(is)g(true)g
-(ma)n(y)f(dep)r(end)h(on)g(the)g(sub-pixel)427 4633 y(in)n(terp)r
-(olation)d(sc)n(heme)g(in)h(use.)340 4778 y Fj(\017)45
-b Fk(The)25 b(v)-5 b(ariance)23 b(v)-5 b(alue)25 b(lies)f(outside)h
-(the)g(range)e(whic)n(h)i(can)f(b)r(e)h(represen)n(ted)e(using)i(the)g
-(data)f(t)n(yp)r(e)h(of)f(the)427 4877 y(OUT)p Ft(_)p
-Fk(V)-9 b(AR)28 b(arra)n(y)-7 b(.)227 5062 y(If)22 b(the)f(AST)p
-Ft(__)p Fk(NOBAD)g(\015ag)g(is)f(sp)r(eci\014ed)i(via)e(argumen)n(t)g
-(FLA)n(GS,)i(then)f(output)h(arra)n(y)d(elemen)n(ts)i(that)g(w)n(ould)
-227 5162 y(otherwise)k(b)r(e)i(set)f(to)g(BAD)n(V)-9
-b(AL)26 b(are)g(instead)f(left)i(holding)f(the)g(v)-5
-b(alue)26 b(they)h(had)e(on)h(en)n(try)g(to)g(this)g(function.)227
-5262 y(The)i(n)n(um)n(b)r(er)f(of)h(suc)n(h)f(arra)n(y)e(elemen)n(ts)j
-(is)f(returned)g(as)g(the)h(function)h(v)-5 b(alue.)p
-0 5484 3780 12 v 0 5615 a FA(AST)p Fe(_)p FA(RESOL)-15
-b(VE)1243 5616 y Fd(Resolv)m(e)38 b(a)h(v)m(ector)e(in)m(to)g(t)m(w)m
-(o)1294 5715 y(orthogonal)f(comp)s(onen)m(ts)2828 5615
-y FA(AST)p Fe(_)p FA(RESOL)-15 b(VE)p eop end
-%%Page: 325 335
-TeXDict begin 325 334 bop 3643 52 a FG(325)0 351 y Fc(Description:)44
-b Fk(This)21 b(routine)f(resolv)n(es)e(a)i(v)n(ector)g(in)n(to)g(t)n(w)
-n(o)f(p)r(erp)r(endicular)i(comp)r(onen)n(ts.)34 b(The)20
-b(v)n(ector)f(from)h(p)r(oin)n(t)h(1)227 451 y(to)g(p)r(oin)n(t)g(2)g
-(is)g(used)g(as)f(the)h(basis)f(v)n(ector.)34 b(The)21
-b(v)n(ector)e(from)i(p)r(oin)n(t)g(1)g(to)g(p)r(oin)n(t)g(3)f(is)h
-(resolv)n(ed)e(in)n(to)i(comp)r(onen)n(ts)227 551 y(parallel)29
-b(and)h(p)r(erp)r(endicular)g(to)g(this)g(basis)g(v)n(ector.)43
-b(The)30 b(lengths)g(of)g(the)h(t)n(w)n(o)e(comp)r(onen)n(ts)h(are)f
-(returned,)227 650 y(together)e(with)h(the)g(p)r(osition)f(of)h
-(closest)f(aproac)n(h)e(of)j(the)g(basis)f(v)n(ector)f(to)i(p)r(oin)n
-(t)f(3.)0 803 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42
-b(AST_RESOLVE\()c(THIS,)k(POINT1,)f(POINT2,)f(POINT3,)h(POINT4,)g(D1,)h
-(D2,)g(STATUS)f(\))0 955 y Fc(Argumen)m(ts:)259 1095
-y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 1194 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rame.)259 1329 y Fc(POINT1\()32 b
-Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en\))427
-1428 y Fk(An)i(arra)n(y)c(with)k(one)e(elemen)n(t)i(for)e(eac)n(h)g(F)
--7 b(rame)32 b(axis)f(\(Naxes)h(attribute\).)50 b(This)32
-b(marks)f(the)h(start)g(of)427 1528 y(the)c(basis)f(v)n(ector,)f(and)i
-(of)f(the)h(v)n(ector)f(to)g(b)r(e)h(resolv)n(ed.)259
-1662 y Fc(POINT2\()k Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m
-(en\))427 1762 y Fk(An)c(arra)n(y)c(with)k(one)e(elemen)n(t)h(for)f
-(eac)n(h)h(F)-7 b(rame)25 b(axis)g(\(Naxes)h(attribute\).)36
-b(This)26 b(marks)f(the)h(end)g(of)g(the)427 1862 y(basis)h(v)n(ector.)
-259 1996 y Fc(POINT3\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e
-(\(Giv)m(en\))427 2096 y Fk(An)c(arra)n(y)c(with)k(one)e(elemen)n(t)h
-(for)f(eac)n(h)h(F)-7 b(rame)25 b(axis)g(\(Naxes)h(attribute\).)36
-b(This)26 b(marks)f(the)h(end)g(of)g(the)427 2195 y(v)n(ector)h(to)g(b)
-r(e)h(resolv)n(ed.)259 2330 y Fc(POINT4\()k Fj(\003)f
-Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Returned\))427 2429
-y Fk(An)23 b(arra)n(y)d(with)j(one)f(elemen)n(t)g(for)g(eac)n(h)f(F)-7
-b(rame)22 b(axis)f(in)i(whic)n(h)f(the)h(co)r(ordinates)e(of)h(the)h(p)
-r(oin)n(t)f(of)g(closest)427 2529 y(approac)n(h)k(of)i(the)f(basis)g(v)
-n(ector)g(to)g(p)r(oin)n(t)h(3)f(will)h(b)r(e)g(returned.)259
-2663 y Fc(D1)k(=)g(DOUBLE)g(PRECISION)g(\(Returned\))427
-2763 y Fk(The)i(distance)f(from)g(p)r(oin)n(t)g(1)g(to)g(p)r(oin)n(t)h
-(4)f(\(that)h(is,)h(the)e(length)h(of)f(the)h(comp)r(onen)n(t)f
-(parallel)f(to)h(the)427 2862 y(basis)27 b(v)n(ector\).)36
-b(P)n(ositiv)n(e)26 b(v)-5 b(alues)27 b(are)g(in)h(the)g(same)f(sense)g
-(as)g(mo)n(v)n(emen)n(t)f(from)i(p)r(oin)n(t)f(1)h(to)f(p)r(oin)n(t)h
-(2.)259 2997 y Fc(D2)k(=)g(DOUBLE)g(PRECISION)g(\(Returned\))427
-3096 y Fk(The)d(distance)f(from)g(p)r(oin)n(t)g(4)g(to)g(p)r(oin)n(t)h
-(3)e(\(that)i(is,)g(the)f(length)h(of)f(the)h(comp)r(onen)n(t)f(p)r
-(erp)r(endicular)g(to)427 3196 y(the)g(basis)f(v)n(ector\).)36
-b(The)28 b(v)-5 b(alue)27 b(is)h(alw)n(a)n(ys)d(p)r(ositiv)n(e.)259
-3330 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 3430 y Fk(The)c(global)e(status.)0 3595
-y Fc(Notes:)340 3881 y Fj(\017)45 b Fk(Eac)n(h)20 b(v)n(ector)g(used)h
-(in)h(this)f(routine)g(is)g(the)h(path)f(of)g(shortest)g(distance)g(b)r
-(et)n(w)n(een)g(t)n(w)n(o)f(p)r(oin)n(ts,)j(as)d(de\014ned)427
-3980 y(b)n(y)28 b(the)g(AST)p Ft(_)p Fk(DIST)-7 b(ANCE)28
-b(function.)340 4115 y Fj(\017)45 b Fk(This)19 b(function)g(will)g
-(return)f Ft(")p Fk(bad)p Ft(")g Fk(co)r(ordinate)g(v)-5
-b(alues)18 b(\(AST)p Ft(__)p Fk(BAD\))i(if)f(an)n(y)f(of)g(the)i(input)
-f(co)r(ordinates)427 4214 y(has)27 b(this)h(v)-5 b(alue,)28
-b(or)e(if)j(the)f(required)e(output)i(v)-5 b(alues)28
-b(are)e(unde\014ned.)p 0 4417 3780 12 v 0 4547 a FA(AST)p
-Fe(_)p FA(RET)-11 b(AINFITS)1456 4548 y Fd(Indicate)38
-b(that)f(the)1459 4648 y(curren)m(t)g(card)i(in)f(a)1388
-4748 y(FitsChan)f(should)i(b)s(e)1682 4847 y(retained)2618
-4547 y FA(AST)p Fe(_)p FA(RET)-11 b(AINFITS)0 5016 y
-Fc(Description:)44 b Fk(This)e(routine)f(stores)g(a)g(\015ag)g(with)h
-(the)g(curren)n(t)f(card)g(in)h(the)g(FitsChan)g(indicating)f(that)h
-(the)227 5116 y(card)35 b(should)g(not)h(b)r(e)g(remo)n(v)n(ed)d(from)j
-(the)g(FitsChan)f(when)h(an)f(Ob)5 b(ject)35 b(is)h(read)e(from)i(the)f
-(FitsChan)h(us-)227 5215 y(ing)28 b(AST)p Ft(_)p Fk(READ.)227
-5341 y(Cards)23 b(that)i(ha)n(v)n(e)e(not)h(b)r(een)g(\015agged)f(in)i
-(this)f(w)n(a)n(y)f(are)g(remo)n(v)n(ed)f(when)j(a)e(read)h(op)r
-(eration)f(completes)h(succes-)227 5441 y(fully)-7 b(,)27
-b(but)f(only)g(if)g(the)g(card)f(w)n(as)f(used)i(in)g(the)g(pro)r(cess)
-e(of)i(creating)f(the)h(returned)f(AST)h(Ob)5 b(ject.)36
-b(An)n(y)26 b(cards)227 5540 y(that)g(are)e(irrelev)-5
-b(an)n(t)24 b(to)i(the)f(creation)g(of)g(the)h(AST)f(Ob)5
-b(ject)26 b(are)e(retained)h(whether)g(or)g(not)g(they)g(are)g
-(\015agged.)0 5693 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42
-b(AST_RETAINFITS\()37 b(THIS,)42 b(STATUS)f(\))p eop
-end
-%%Page: 326 336
-TeXDict begin 326 335 bop 0 52 a FG(326)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(Argumen)m(ts:)259
-536 y(THIS)h(=)g(INTEGER)g(\(Giv)m(en\))427 636 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(FitsChan.)259 793 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 892
-y Fk(The)c(global)e(status.)0 1103 y Fc(Notes:)340 1434
-y Fj(\017)45 b Fk(This)23 b(function)f(returns)g(without)h(action)e(if)
-i(the)g(FitsChan)f(is)h(initially)f(p)r(ositioned)g(at)g(the)h
-Ft(")p Fk(end-of-\014le)p Ft(")427 1533 y Fk(\(i.e.)38
-b(if)28 b(the)g(Card)e(attribute)i(exceeds)f(the)h(n)n(um)n(b)r(er)f
-(of)h(cards)e(in)i(the)g(FitsChan\).)340 1691 y Fj(\017)45
-b Fk(The)28 b(curren)n(t)f(card)f(is)i(not)f(c)n(hanged)g(b)n(y)g(this)
-h(function.)p 0 1938 3780 12 v 0 2069 a FA(AST)p Fe(_)p
-FA(SAME)946 2070 y Fd(T)-10 b(est)39 b(if)f(t)m(w)m(o)f(AST)h(p)s(oin)m
-(ters)g(refer)g(to)g(the)1569 2185 y(same)g(Ob)7 b(ject)3056
-2069 y FA(AST)p Fe(_)p FA(SAME)0 2422 y Fc(Description:)44
-b Fk(This)31 b(function)g(returns)f(a)g(logical)f(result)h(to)h
-(indicate)f(whether)h(t)n(w)n(o)e(p)r(oin)n(ters)h(refer)g(to)g(the)h
-(same)227 2522 y(Ob)5 b(ject.)0 2719 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_SAME\()d(THIS,)h(THAT,)h(STATUS)f(\))0
-2917 y Fc(Argumen)m(ts:)259 3102 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 3202 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(\014rst)f(Ob)5
-b(ject.)259 3359 y Fc(THA)-8 b(T)33 b(=)f(INTEGER)f(\(Giv)m(en\))427
-3459 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(second)f(Ob)5
-b(ject.)259 3616 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h
-(and)g(Returned\))427 3715 y Fk(The)c(global)e(status.)0
-3926 y Fc(Class)31 b(Applicabilit)m(y:)259 4111 y(Ob)5
-b(ject)427 4210 y Fk(This)28 b(routine)f(applies)g(to)h(all)f(Ob)5
-b(jects.)0 4421 y Fc(Returned)32 b(V)-8 b(alue:)259 4605
-y(AST)p Ft(_)p Fc(SAME)32 b(=)g(LOGICAL)427 4705 y Fk(.TR)n(UE.)c(if)g
-(the)g(t)n(w)n(o)f(p)r(oin)n(ters)f(refer)h(to)h(the)g(same)f(Ob)5
-b(ject,)27 b(otherwise)g(.F)-9 b(ALSE.)0 4915 y Fc(Notes:)340
-5246 y Fj(\017)45 b Fk(Tw)n(o)37 b(indep)r(enden)n(t)h(Ob)5
-b(jects)37 b(that)g(happ)r(en)h(to)f(b)r(e)h(iden)n(tical)f(are)f(not)h
-(considered)g(to)g(b)r(e)h(the)f(same)427 5346 y(Ob)5
-b(ject)28 b(b)n(y)f(this)h(function.)340 5503 y Fj(\017)45
-b Fk(A)28 b(v)-5 b(alue)28 b(of)f(.F)-9 b(ALSE.)28 b(will)g(b)r(e)g
-(returned)f(if)h(this)g(function)g(is)f(in)n(v)n(ok)n(ed)g(with)h(ST)-7
-b(A)g(TUS)28 b(set)g(to)f(an)h(error)427 5603 y(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-eop end
-%%Page: 327 337
-TeXDict begin 327 336 bop 3643 52 a FG(327)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(SELECTORMAP)293 b Fd(Create)37
-b(a)1573 581 y(SelectorMap)2403 482 y FA(AST)p Fe(_)p
-FA(SELECTORMAP)0 778 y Fc(Description:)44 b Fk(This)28
-b(function)g(creates)f(a)g(new)g(SelectorMap)g(and)g(optionally)g
-(initialises)g(its)h(attributes.)227 906 y(A)g(SelectorMap)f(is)g(a)g
-(Mapping)h(that)g(iden)n(ti\014es)f(whic)n(h)h(Region)f(con)n(tains)f
-(a)i(giv)n(en)e(input)j(p)r(osition.)227 1034 y(A)40
-b(SelectorMap)e(encapsulates)h(a)g(n)n(um)n(b)r(er)g(of)g(Regions)f
-(that)i(all)f(ha)n(v)n(e)f(the)i(same)f(n)n(um)n(b)r(er)g(of)g(axes)g
-(and)227 1134 y(represen)n(t)31 b(the)h(same)f(co)r(ordinate)g(F)-7
-b(rame.)49 b(The)32 b(n)n(um)n(b)r(er)g(of)f(inputs)i(\(Nin)f
-(attribute\))h(of)e(the)i(SelectorMap)227 1233 y(equals)24
-b(the)h(n)n(um)n(b)r(er)f(of)g(axes)f(spanned)h(b)n(y)g(one)g(of)h(the)
-f(encapsulated)g(Region.)35 b(All)25 b(SelectorMaps)e(ha)n(v)n(e)g
-(only)227 1333 y(a)k(single)h(output.)37 b(SelectorMaps)26
-b(do)i(not)f(de\014ne)h(an)f(in)n(v)n(erse)f(transformation.)227
-1461 y(F)-7 b(or)36 b(eac)n(h)f(input)i(p)r(osition,)h(the)e(forw)n
-(ard)e(transformation)h(of)h(a)f(SelectorMap)g(searc)n(hes)f(through)h
-(the)i(en-)227 1561 y(capsulated)d(Regions)f(\(in)i(the)g(order)e
-(supplied)i(when)f(the)h(SelectorMap)e(w)n(as)h(created\))f(un)n(til)i
-(a)f(Region)g(is)227 1660 y(found)27 b(whic)n(h)g(con)n(tains)f(the)h
-(input)g(p)r(osition.)36 b(The)27 b(index)g(asso)r(ciated)e(with)i
-(this)g(Region)f(is)h(returned)f(as)g(the)227 1760 y(SelectorMap)h
-(output)h(v)-5 b(alue)27 b(\(the)h(index)g(v)-5 b(alue)27
-b(is)h(the)g(p)r(osition)f(of)h(the)f(Region)g(within)h(the)g(list)g
-(of)g(Regions)227 1860 y(supplied)c(when)g(the)g(SelectorMap)f(w)n(as)g
-(created,)g(starting)g(at)h(1)f(for)g(the)h(\014rst)g(Region\).)35
-b(If)24 b(an)f(input)i(p)r(osition)227 1959 y(is)j(not)f(con)n(tained)g
-(within)i(an)n(y)d(Region,)h(a)h(v)-5 b(alue)27 b(of)h(zero)e(is)i
-(returned)f(b)n(y)g(the)h(forw)n(ard)e(transformation.)227
-2088 y(If)35 b(a)e(comp)r(ound)h(Mapping)g(con)n(tains)f(a)h
-(SelectorMap)f(in)h(series)f(with)i(its)f(o)n(wn)g(in)n(v)n(erse,)g
-(the)g(com)n(bination)227 2187 y(of)29 b(the)f(t)n(w)n(o)g(adjacen)n(t)
-g(SelectorMaps)f(will)h(b)r(e)h(replaced)e(b)n(y)h(a)g(UnitMap)h(when)g
-(the)f(comp)r(ound)h(Mapping)f(is)227 2287 y(simpli\014ed)g(using)g
-(AST)p Ft(_)p Fk(SIMPLIFY.)227 2415 y(In)g(practice,)f(SelectorMaps)f
-(are)h(often)h(used)f(in)h(conjunction)g(with)g(Switc)n(hMaps.)0
-2572 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i
-(AST_SELECTORMAP\()37 b(NREG,)42 b(REGS,)f(BADVAL,)g(OPTIONS,)f(STATUS)
-h(\))0 2729 y Fc(Argumen)m(ts:)259 2873 y(NREG)31 b(=)h(INTEGER)f
-(\(Giv)m(en\))427 2972 y Fk(The)d(n)n(um)n(b)r(er)f(of)h(supplied)g
-(Regions.)259 3109 y Fc(REGS\()j(NREG)g(\))h(=)g(INTEGER)g(\(Giv)m
-(en\))427 3209 y Fk(An)41 b(arra)n(y)d(of)j(p)r(oin)n(ters)f(to)g(the)h
-(Regions.)74 b(All)41 b(the)g(supplied)g(Regions)f(m)n(ust)g(relate)g
-(to)g(the)h(same)427 3308 y(co)r(ordinate)23 b(F)-7 b(rame.)35
-b(The)23 b(n)n(um)n(b)r(er)g(of)h(axes)e(in)i(this)g(co)r(ordinate)e(F)
--7 b(rame)23 b(de\014nes)h(the)f(n)n(um)n(b)r(er)h(of)f(inputs)427
-3408 y(for)k(the)h(SelectorMap.)259 3544 y Fc(BAD)m(V)-11
-b(AL)34 b(=)e(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427 3644
-y Fk(The)k(v)-5 b(alue)34 b(to)g(b)r(e)h(returned)e(b)n(y)h(the)h(forw)
-n(ard)e(transformation)f(of)j(the)f(SelectorMap)g(for)f(an)n(y)h(input)
-427 3744 y(p)r(ositions)27 b(that)h(ha)n(v)n(e)f(a)g(bad)g(\(AST)p
-Ft(__)p Fk(BAD\))i(v)-5 b(alue)27 b(on)g(an)n(y)g(axis.)259
-3880 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 3980 y Fk(A)g(c)n(haracter)e(string)
-h(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 4080 y(b)r(e)36
-b(used)f(for)f(initialising)h(the)g(new)g(SelectorMap.)58
-b(The)35 b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)g(that)g(for)f
-(the)427 4179 y(AST)p Ft(_)p Fk(SET)27 b(routine.)259
-4316 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 4415 y Fk(The)c(global)e(status.)0 4585
-y Fc(Returned)32 b(V)-8 b(alue:)259 4729 y(AST)p Ft(_)p
-Fc(SELECTORMAP)32 b(=)g(INTEGER)427 4828 y Fk(A)c(p)r(oin)n(ter)f(to)h
-(the)g(new)g(SelectorMap.)0 4998 y Fc(Notes:)340 5288
-y Fj(\017)45 b Fk(Deep)22 b(copies)f(are)f(tak)n(en)h(of)g(the)h
-(supplied)g(Regions.)33 b(This)22 b(means)f(that)g(an)n(y)g(subsequen)n
-(t)g(c)n(hanges)f(made)427 5387 y(to)k(the)h(comp)r(onen)n(t)f(Regions)
-f(using)h(the)g(supplied)h(p)r(oin)n(ters)e(will)i(ha)n(v)n(e)e(no)g
-(e\013ect)i(on)f(the)h(SelectorMap.)340 5524 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 5623
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p eop end
-%%Page: 328 338
-TeXDict begin 328 337 bop 0 52 a FG(328)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(SET)1023 483 y Fd(Set)38
-b(attribute)f(v)-7 b(alues)38 b(for)g(an)h(Ob)7 b(ject)3192
-482 y FA(AST)p Fe(_)p FA(SET)0 675 y Fc(Description:)44
-b Fk(This)22 b(routine)g(assigns)e(a)h(set)h(of)g(attribute)g(v)-5
-b(alues)21 b(to)h(an)f(Ob)5 b(ject,)23 b(o)n(v)n(er-riding)c(an)n(y)i
-(previous)g(v)-5 b(alues.)227 775 y(The)33 b(attributes)h(and)f(their)g
-(new)g(v)-5 b(alues)33 b(are)f(sp)r(eci\014ed)h(via)g(a)g(c)n(haracter)
-e(string,)j(whic)n(h)f(should)g(con)n(tain)f(a)227 875
-y(comma-separated)26 b(list)h(of)h(the)g(form:)227 1001
-y Ft(")p Fk(attribute)p Ft(_)p Fk(1)f(=)g(v)-5 b(alue)p
-Ft(_)p Fk(1,)27 b(attribute)p Ft(_)p Fk(2)f(=)i(v)-5
-b(alue)p Ft(_)p Fk(2,)26 b(...)37 b Ft(")227 1128 y Fk(where)22
-b Ft(")p Fk(attribute)p Ft(_)p Fk(n)p Ft(")g Fk(sp)r(eci\014es)g(an)h
-(attribute)f(name,)i(and)e(the)h(v)-5 b(alue)23 b(to)f(the)h(righ)n(t)f
-(of)h(eac)n(h)e Ft(")p Fk(=)p Ft(")h Fk(sign)g(should)227
-1227 y(b)r(e)36 b(a)f(suitable)h(textual)f(represen)n(tation)f(of)h
-(the)h(v)-5 b(alue)35 b(to)h(b)r(e)g(assigned.)59 b(This)35
-b(v)-5 b(alue)36 b(will)f(b)r(e)h(in)n(terpreted)227
-1327 y(according)26 b(to)i(the)g(attribute's)f(data)g(t)n(yp)r(e.)0
-1480 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_SET\()e(THIS,)h
-(SETTINGS,)f(STATUS)h(\))0 1633 y Fc(Argumen)m(ts:)259
-1773 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 1873
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject.)259 2008
-y Fc(SETTINGS)33 b(=)f(CHARA)m(CTER)f Fj(\003)h Fc(\()f
-Fj(\003)h Fc(\))g(\(Giv)m(en\))427 2107 y Fk(A)j(c)n(haracter)e(string)
-h(con)n(taining)g(a)h(comma-separated)d(list)j(of)g(attribute)g
-(settings)g(in)g(the)g(form)g(de-)427 2207 y(scrib)r(ed)28
-b(ab)r(o)n(v)n(e.)259 2341 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f
-(\(Giv)m(en)h(and)g(Returned\))427 2441 y Fk(The)c(global)e(status.)0
-2607 y Fc(Class)31 b(Applicabilit)m(y:)259 2747 y(Ob)5
-b(ject)427 2846 y Fk(This)28 b(routine)f(applies)g(to)h(all)f(Ob)5
-b(jects.)0 3012 y Fc(Examples:)227 3153 y Fy(CALL)47
-b(AST)p Ft(_)p Fy(SET\()e(MAP,)i('Report)f(=)h(1,)g(Zoom)g(=)g(25.0',)g
-(STATUS)f(\))427 3252 y Fk(Sets)28 b(the)g(Rep)r(ort)f(attribute)h(for)
-f(Ob)5 b(ject)28 b(MAP)f(to)h(the)g(v)-5 b(alue)27 b(1)g(and)h(the)g
-(Zo)r(om)f(attribute)g(to)h(25.0.)227 3391 y Fy(CALL)47
-b(AST)p Ft(_)p Fy(SET\()e(FRAME,)h('Label\()g(1)i(\))f(=Offset)f(from)h
-(cluster)e(axis',)h(STATUS)h(\))427 3486 y Fk(Sets)28
-b(the)g(Lab)r(el\(1\))g(attribute)f(for)g(Ob)5 b(ject)28
-b(FRAME)g(to)f(a)g(suitable)h(string.)0 3652 y Fc(Notes:)340
-3938 y Fj(\017)45 b Fk(A)n(ttribute)28 b(names)g(are)e(not)i(case)f
-(sensitiv)n(e)g(and)g(ma)n(y)g(b)r(e)h(surrounded)e(b)n(y)i(white)g
-(space.)340 4073 y Fj(\017)45 b Fk(White)33 b(space)e(ma)n(y)f(also)h
-(surround)g(attribute)g(v)-5 b(alues,)33 b(where)e(it)h(will)g
-(generally)e(b)r(e)i(ignored)e(\(except)427 4172 y(for)24
-b(string-v)-5 b(alued)23 b(attributes)i(where)e(it)i(is)f(signi\014can)
-n(t)g(and)g(forms)g(part)f(of)i(the)f(v)-5 b(alue)25
-b(to)f(b)r(e)g(assigned\).)340 4307 y Fj(\017)45 b Fk(It)32
-b(is)e(not)h(p)r(ossible)g(to)g(include)g(a)g(comma)f(in)h(the)g(v)-5
-b(alue)31 b(to)g(b)r(e)g(assigned)f(to)h(an)g(attribute)g(using)f(this)
-427 4407 y(routine.)37 b(If)28 b(suc)n(h)f(a)g(v)-5 b(alue)28
-b(is)f(needed,)h(then)g(AST)p Ft(_)p Fk(SETC)f(should)h(b)r(e)g(used)f
-(instead.)340 4541 y Fj(\017)45 b Fk(An)28 b(error)e(will)i(result)f
-(if)h(an)g(attempt)g(is)f(made)h(to)f(set)h(a)f(v)-5
-b(alue)27 b(for)g(a)h(read-only)e(attribute.)p 0 4744
-V 0 4875 a FA(AST)p Fe(_)p FA(SET)p Fb(<)p FA(X)p Fb(>)1158
-4876 y Fd(Set)39 b(an)f(attribute)f(v)-7 b(alue)38 b(for)g(an)1716
-4976 y(Ob)7 b(ject)2908 4875 y FA(AST)p Fe(_)p FA(SET)p
-Fb(<)p FA(X)p Fb(>)0 5168 y Fc(Description:)44 b Fk(This)29
-b(is)g(a)g(family)g(of)g(routines)f(whic)n(h)h(set)g(a)g(sp)r
-(eci\014ed)g(attribute)g(v)-5 b(alue)29 b(for)g(an)f(Ob)5
-b(ject)29 b(using)g(one)227 5268 y(of)g(sev)n(eral)f(di\013eren)n(t)h
-(data)g(t)n(yp)r(es.)41 b(The)30 b(t)n(yp)r(e)f(is)g(selected)g(b)n(y)g
-(replacing)f Fm(<)p Fk(X)p Fm(>)h Fk(in)g(the)h(routine)f(name)g(b)n(y)
-g(C,)227 5367 y(D,)34 b(I,)g(L)f(or)f(R,)i(to)f(supply)h(a)f(v)-5
-b(alue)33 b(in)g(Character,)h(Double)f(precision,)h(In)n(teger,)g
-(Logical)e(or)g(Real)h(format,)227 5467 y(resp)r(ectiv)n(ely)-7
-b(.)227 5593 y(If)36 b(p)r(ossible,)h(the)f(v)-5 b(alue)36
-b(y)n(ou)e(supply)i(is)f(con)n(v)n(erted)f(to)i(the)f(t)n(yp)r(e)h(of)g
-(the)f(attribute.)61 b(If)36 b(con)n(v)n(ersion)d(is)j(not)227
-5693 y(p)r(ossible,)28 b(an)f(error)f(will)h(result.)p
-eop end
-%%Page: 329 339
-TeXDict begin 329 338 bop 3643 52 a FG(329)0 351 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(CALL)42 b(AST_SET)p Fm(<)p Ft(X)p Fm(>)p
-Ft(\()d(THIS,)i(ATTRIB,)g(VALUE,)g(STATUS)g(\))0 499
-y Fc(Argumen)m(ts:)259 634 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427
-733 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject.)259
-864 y Fc(A)-8 b(TTRIB)33 b(=)f(CHARA)m(CTER)f Fj(\003)h
-Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))427 964 y Fk(A)c(c)n(haracter)e
-(string)h(con)n(taining)f(the)i(name)g(of)f(the)h(attribute)g(whose)f
-(v)-5 b(alue)27 b(is)h(to)f(b)r(e)h(set.)259 1095 y Fc(V)-11
-b(ALUE)33 b(=)f Fm(<)p Fc(X)p Fm(>)p Fc(t)m(yp)s(e)g(\(Giv)m(en\))427
-1195 y Fk(The)c(v)-5 b(alue)27 b(to)h(b)r(e)g(set)f(for)h(the)g
-(attribute,)f(in)h(the)g(data)f(t)n(yp)r(e)h(corresp)r(onding)e(to)h
-Fm(<)p Fk(X)p Fm(>)p Fk(.)259 1326 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 1425
-y Fk(The)c(global)e(status.)0 1585 y Fc(Class)31 b(Applicabilit)m(y:)
-259 1720 y(Ob)5 b(ject)427 1820 y Fk(These)28 b(routines)f(apply)g(to)g
-(all)h(Ob)5 b(jects.)0 1980 y Fc(Examples:)227 2119 y
-Fy(CALL)47 b(AST)p Ft(_)p Fy(SETC\()e(PLOT,)h('Title',)g(CVALUE,)g
-(STATUS)g(\))427 2214 y Fk(Sets)38 b(the)h(Title)f(attribute)h(v)-5
-b(alue)38 b(for)f(Ob)5 b(ject)38 b(PLOT)f(to)h(the)h(con)n(ten)n(ts)e
-(of)h(the)h(c)n(haracter)d(v)-5 b(ariable)427 2314 y(CV)c(ALUE.)227
-2449 y Fy(CALL)47 b(AST)p Ft(_)p Fy(SETL\()e(FRAME,)h('Preserve',)f
-(.TRUE.,)h(STATUS)g(\);)427 2545 y Fk(Sets)28 b(the)g(Preserv)n(e)d
-(attribute)j(v)-5 b(alue)27 b(for)g(Ob)5 b(ject)28 b(FRAME)g(to)f(1)g
-(\(true\).)0 2705 y Fc(Notes:)340 2985 y Fj(\017)45 b
-Fk(A)n(ttribute)28 b(names)g(are)e(not)i(case)f(sensitiv)n(e)g(and)g
-(ma)n(y)g(b)r(e)h(surrounded)e(b)n(y)i(white)g(space.)340
-3117 y Fj(\017)45 b Fk(The)34 b(logical)f(v)-5 b(alue)34
-b(.F)-9 b(ALSE.)34 b(will)h(translate)e(to)h(a)f(n)n(umerical)h
-(attribute)g(v)-5 b(alue)34 b(of)g(zero)f(and)h(logical)427
-3216 y(.TR)n(UE.)28 b(will)f(translate)g(to)h(one.)340
-3347 y Fj(\017)45 b Fk(An)28 b(error)e(will)i(result)f(if)h(an)g
-(attempt)g(is)f(made)h(to)f(set)h(a)f(v)-5 b(alue)27
-b(for)g(a)h(read-only)e(attribute.)p 0 3543 3780 12 v
-0 3674 a FA(AST)p Fe(_)p FA(SET)-11 b(A)l(CTIVEUNIT)1706
-3675 y Fd(Sp)s(ecify)1687 3789 y(ho)m(w)37 b(the)1774
-3889 y(Unit)1662 3988 y(attribute)1644 4088 y(should)h(b)s(e)1776
-4188 y(used)2322 3674 y FA(AST)p Fe(_)p FA(SET)-11 b(A)l(CTIVEUNIT)0
-4350 y Fc(Description:)44 b Fk(This)25 b(routine)f(sets)g(the)h(curren)
-n(t)f(v)-5 b(alue)24 b(of)h(the)g(Activ)n(eUnit)g(\015ag)f(for)g(a)g(F)
--7 b(rame,)25 b(whic)n(h)f(con)n(trols)f(ho)n(w)227 4449
-y(the)h(F)-7 b(rame)22 b(b)r(eha)n(v)n(es)g(when)i(it)f(is)g(used)g
-(\(b)n(y)g(AST)p Ft(_)p Fk(FINDFRAME)h(or)f(AST)p Ft(_)p
-Fk(CONVER)-7 b(T\))23 b(to)g(matc)n(h)g(another)227 4549
-y(F)-7 b(rame.)35 b(If)23 b(the)g(Activ)n(eUnit)g(\015ag)f(is)g(set)h
-(in)f(b)r(oth)h(template)g(and)g(target)e(F)-7 b(rames)22
-b(then)h(the)g(returned)f(Mapping)227 4649 y(tak)n(es)j(in)n(to)g
-(accoun)n(t)g(an)n(y)f(di\013erences)h(in)h(axis)f(units.)36
-b(The)26 b(default)g(v)-5 b(alue)25 b(for)g(simple)h(F)-7
-b(rames)24 b(is)i(zero,)f(whic)n(h)227 4748 y(preserv)n(es)h(the)i(b)r
-(eha)n(viour)e(of)i(v)n(ersions)d(of)j(AST)g(prior)e(to)i(v)n(ersion)e
-(2.0.)227 4872 y(If)c(the)f(Activ)n(eUnit)h(\015ag)e(of)i(either)f(F)-7
-b(rame)20 b(is)h(.F)-9 b(ALSE.,)22 b(then)g(the)g(Mapping)e(will)i
-(ignore)d(an)n(y)i(di\013erence)g(in)g(the)227 4972 y(Unit)31
-b(attributes)f(of)g(corresp)r(onding)e(template)j(and)f(target)f(axes.)
-44 b(In)30 b(this)g(mo)r(de,)h(the)g(Unit)g(attributes)f(are)227
-5071 y(purely)23 b(descriptiv)n(e)f(commen)n(tary)g(for)h(the)h(b)r
-(ene\014t)g(of)f(h)n(uman)g(readers)e(and)i(do)g(not)g(in\015uence)h
-(the)f(Mappings)227 5171 y(b)r(et)n(w)n(een)k(F)-7 b(rames.)36
-b(This)27 b(is)f(the)i(b)r(eha)n(viour)d(whic)n(h)i(all)g(F)-7
-b(rames)26 b(had)g(in)h(older)f(v)n(ersion)g(of)h(AST,)g(prior)f(to)g
-(the)227 5270 y(in)n(tro)r(duction)i(of)f(this)h(attribute.)227
-5394 y(If)j(the)h(Activ)n(eUnit)f(\015ag)f(of)h(b)r(oth)g(F)-7
-b(rames)30 b(is)g(.TR)n(UE.,)i(then)f(the)g(Mapping)f(from)h(template)g
-(to)g(target)e(will)227 5494 y(tak)n(e)35 b(accoun)n(t)g(of)g(an)n(y)g
-(di\013erence)h(in)g(the)g(axis)f(Unit)h(attributes,)i(where-ev)n(er)33
-b(p)r(ossible.)61 b(F)-7 b(or)35 b(instance,)i(if)227
-5593 y(corresp)r(onding)31 b(target)g(and)h(template)h(axes)e(ha)n(v)n
-(e)g(Unit)i(strings)f(of)g Ft(")p Fk(km)p Ft(")f Fk(and)h
-Ft(")p Fk(m)p Ft(")p Fk(,)h(then)g(the)g(F)-7 b(rameSet)227
-5693 y(class)35 b(will)i(use)f(a)f(Zo)r(omMap)g(to)h(connect)g(them)h
-(whic)n(h)f(in)n(tro)r(duces)f(a)h(scaling)f(of)h(1000.)61
-b(If)36 b(no)g(Mapping)p eop end
-%%Page: 330 340
-TeXDict begin 330 339 bop 0 52 a FG(330)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 351 y Fk(can)g(b)r(e)g(found)h
-(b)r(et)n(w)n(een)f(the)g(corresp)r(onding)e(units)j(string,)f(then)g
-(an)g(error)e(is)i(rep)r(orted.)47 b(In)31 b(this)g(mo)r(de,)h(it)227
-451 y(is)f(assumed)g(that)g(v)-5 b(alues)31 b(of)g(the)h(Unit)g
-(attribute)f(conform)g(to)g(the)h(syn)n(tax)e(for)g(units)i(strings)e
-(describ)r(ed)h(in)227 551 y(the)g(FITS)g(W)n(CS)f(P)n(ap)r(er)f(I)i
-Ft(")p Fk(Represen)n(tations)e(of)h(w)n(orld)f(co)r(ordinates)g(in)i
-(FITS)p Ft(")f Fk(\(Greisen)g(&)h(Calabretta\).)227 650
-y(P)n(articularly)-7 b(,)30 b(an)n(y)h(of)g(the)h(named)f(unit)h(sym)n
-(b)r(ols,)g(functions,)h(op)r(erators)c(or)i(standard)f(m)n(ultiplier)h
-(pre\014xes)227 750 y(listed)c(within)g(that)f(pap)r(er)g(can)g(b)r(e)g
-(used)h(within)g(a)e(units)i(string.)36 b(A)26 b(units)h(string)f(ma)n
-(y)f(con)n(tain)h(sym)n(b)r(ols)f(for)227 849 y(unit)31
-b(whic)n(h)g(are)e(not)i(listed)g(in)f(the)h(FITS)g(pap)r(er,)g(but)g
-(transformation)e(to)h(an)n(y)g(other)g(units)h(will)g(then)g(not)227
-949 y(b)r(e)f(p)r(ossible)f(\(except)h(to)f(units)h(whic)n(h)f(dep)r
-(end)h(only)f(on)g(the)h(same)f(unkno)n(wn)g(units)h(-)f(th)n(us)g
-Ft(")p Fk(\015ops)p Ft(")f Fk(can)h(b)r(e)227 1049 y(transformed)e(to)g
-Ft(")p Fk(M\015ops)p Ft(")g Fk(ev)n(en)g(though)g Ft(")p
-Fk(\015ops)p Ft(")f Fk(is)i(not)g(a)f(standard)f(FITS)i(unit)h(sym)n(b)
-r(ol\).)227 1173 y(A)c(range)e(of)h(common)g(non-standard)f(v)-5
-b(ariations)23 b(of)i(unit)g(names)f(and)g(m)n(ultiplier)h(pre\014xes)e
-(are)h(also)f(allo)n(w)n(ed,)227 1273 y(suc)n(h)28 b(as)f(adding)g(an)g
-Ft(")p Fk(s)p Ft(")g Fk(to)h(the)g(end)g(of)f(Angstrom,)g(using)h(a)f
-(lo)n(w)n(er)f(case)h Ft(")p Fk(a)p Ft(")f Fk(at)i(the)g(start)f(of)h
-Ft(")p Fk(angstrom)p Ft(")p Fk(,)227 1373 y Ft(")p Fk(micron)p
-Ft(")e Fk(instead)i(of)f Ft(")p Fk(um)p Ft(")p Fk(,)h
-Ft(")p Fk(sec)p Ft(")e Fk(instead)h(of)h Ft(")p Fk(s)p
-Ft(")p Fk(,)f(etc.)227 1497 y(If)c(the)f(Activ)n(eUnit)h(\015ag)f(is)g
-(.TR)n(UE.,)h(setting)f(a)g(new)g(Unit)h(v)-5 b(alue)22
-b(for)g(an)f(axis)h(ma)n(y)f(also)g(c)n(hange)g(its)i(Lab)r(el)f(and)
-227 1597 y(Sym)n(b)r(ol)30 b(attributes.)45 b(F)-7 b(or)30
-b(instance,)g(if)h(an)f(axis)f(has)h(Unit)h Ft(")p Fk(Hz)p
-Ft(")f Fk(and)g(Lab)r(el)g Ft(")p Fk(frequency)p Ft(")p
-Fk(,)f(then)i(c)n(hanging)227 1697 y(its)j(Unit)g(to)g
-Ft(")p Fk(log\(Hz\))p Ft(")e Fk(will)i(c)n(hange)e(its)i(Lab)r(el)g(to)
-f Ft(")p Fk(log\()f(frequency)i(\))p Ft(")p Fk(.)54 b(In)34
-b(addition,)h(the)f(Axis)f(F)-7 b(ormat)227 1796 y(attribute)28
-b(will)g(b)r(e)g(cleared)e(when-ev)n(er)h(a)g(new)h(v)-5
-b(alue)27 b(is)h(assigned)e(to)h(the)h(Unit)h(attribute.)227
-1921 y(Note,)h(if)f(a)g(.TR)n(UE.)g(v)-5 b(alue)29 b(is)g(set)g(for)f
-(the)i(Activ)n(eUnit)f(\015ag,)g(then)g(c)n(hanging)f(a)h(Unit)h(v)-5
-b(alue)29 b(for)f(the)h(curren)n(t)227 2021 y(F)-7 b(rame)29
-b(within)h(a)f(F)-7 b(rameSet)29 b(will)h(result)f(in)h(the)f(F)-7
-b(rame)29 b(b)r(eing)h(re-mapp)r(ed)e(\(that)i(is,)g(the)g(Mappings)f
-(whic)n(h)227 2120 y(de\014ne)d(the)f(relationships)f(b)r(et)n(w)n(een)
-i(F)-7 b(rames)24 b(within)i(the)f(F)-7 b(rameSet)25
-b(will)h(b)r(e)f(mo)r(di\014ed)h(to)f(tak)n(e)g(in)n(to)f(accoun)n(t)
-227 2220 y(the)k(c)n(hange)f(in)h(Units\).)0 2370 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(CALL)42 b(AST_SETACTIVEUN)o(IT\()37
-b(THIS,)k(VALUE,)g(STATUS)h(\))0 2519 y Fc(Argumen)m(ts:)259
-2656 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 2756
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7 b(rame.)259 2889
-y Fc(V)c(ALUE)33 b(=)f(LOGICAL)h(\(Giv)m(en\))427 2989
-y Fk(The)28 b(new)g(v)-5 b(alue)27 b(to)h(use.)259 3122
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 3221 y Fk(The)c(global)e(status.)0 3383 y Fc(Class)31
-b(Applicabilit)m(y:)259 3520 y(SkyF)-8 b(rame)427 3620
-y Fk(The)25 b(Activ)n(eUnit)h(\015ag)e(for)g(a)h(SkyF)-7
-b(rame)24 b(is)g(alw)n(a)n(ys)f(.F)-9 b(ALSE.)25 b(\(an)n(y)f(v)-5
-b(alue)25 b(supplied)g(using)g(this)g(routine)427 3719
-y(is)j(ignored\).)259 3853 y Fc(Sp)s(ecF)-8 b(rame)427
-3952 y Fk(The)24 b(Activ)n(eUnit)h(\015ag)f(for)f(a)h(Sp)r(ecF)-7
-b(rame)24 b(is)g(alw)n(a)n(ys)e(.TR)n(UE.)i(\(an)n(y)f(v)-5
-b(alue)24 b(supplied)h(using)f(this)g(routine)427 4052
-y(is)k(ignored\).)259 4185 y Fc(FluxF)-8 b(rame)427 4284
-y Fk(The)25 b(Activ)n(eUnit)f(\015ag)g(for)g(a)f(FluxF)-7
-b(rame)24 b(is)g(alw)n(a)n(ys)e(.TR)n(UE.)i(\(an)n(y)g(v)-5
-b(alue)24 b(supplied)h(using)f(this)g(routine)427 4384
-y(is)k(ignored\).)259 4517 y Fc(CmpF)-8 b(rame)427 4617
-y Fk(The)26 b(default)g(Activ)n(eUnit)g(\015ag)e(for)h(a)g(CmpF)-7
-b(rame)25 b(is)h(.TR)n(UE.)f(if)h(b)r(oth)g(of)f(the)h(comp)r(onen)n(t)
-f(F)-7 b(rames)25 b(are)427 4716 y(using)j(activ)n(e)f(units,)i(and)f
-(.F)-9 b(ALSE.)28 b(otherwise.)38 b(When)28 b(a)g(new)g(v)-5
-b(alue)28 b(is)g(set)g(for)g(the)g(Activ)n(eUnit)h(\015ag,)427
-4816 y(the)e(\015ag)e(v)-5 b(alue)26 b(is)g(propagated)e(to)i(the)h
-(comp)r(onen)n(t)e(F)-7 b(rames.)36 b(This)26 b(c)n(hange)f(will)h(b)r
-(e)h(re\015ected)e(through)427 4916 y(all)j(references)e(to)h(the)h
-(comp)r(onen)n(t)g(F)-7 b(rames,)27 b(not)g(just)h(those)g
-(encapsulated)f(within)h(the)g(CmpF)-7 b(rame.)259 5049
-y Fc(Region:)427 5148 y Fk(Regions)27 b(alw)n(a)n(ys)f(use)h(activ)n(e)
-g(units)h(if)g(p)r(ossible.)0 5310 y Fc(Notes:)340 5593
-y Fj(\017)45 b Fk(The)28 b(Activ)n(eUnit)g(\015ag)f(resem)n(bles)f(a)h
-(F)-7 b(rame)27 b(attribute,)g(except)h(that)g(it)f(cannot)g(b)r(e)h
-(tested)g(or)f(cleared,)427 5693 y(and)h(it)g(cannot)f(b)r(e)h
-(accessed)e(using)h(the)h(generic)f(AST)p Ft(_)p Fk(GET)p
-Fm(<)p Fk(X)p Fm(>)g Fk(and)g(AST)p Ft(_)p Fk(SET)p Fm(<)p
-Fk(X)p Fm(>)g Fk(routines.)p eop end
-%%Page: 331 341
-TeXDict begin 331 340 bop 3643 52 a FG(331)340 351 y
-Fj(\017)45 b Fk(The)33 b(AST)p Ft(_)p Fk(GET)-7 b(A)n(CTIVEUNIT)33
-b(routine)g(can)g(b)r(e)g(used)g(to)g(retriev)n(e)f(the)h(curren)n(t)f
-(v)-5 b(alue)33 b(of)g(the)h(Ac-)427 451 y(tiv)n(eUnit)28
-b(\015ag.)p 0 634 3780 12 v 0 765 a FA(AST)p Fe(_)p FA(SETFITS)p
-Fb(<)p FA(X)p Fb(>)1326 766 y Fd(Store)38 b(a)g(k)m(eyw)m(ord)e(v)-7
-b(alue)1536 880 y(in)38 b(a)h(FitsChan)2605 765 y FA(AST)p
-Fe(_)p FA(SETFITS)p Fb(<)p FA(X)p Fb(>)0 1030 y Fc(Description:)44
-b Fk(This)29 b(is)f(a)f(family)i(of)f(routines)g(whic)n(h)g(store)f(v)
--5 b(alues)28 b(for)f(named)i(k)n(eyw)n(ords)d(within)j(a)e(FitsChan)i
-(at)227 1130 y(the)i(curren)n(t)f(card)g(p)r(osition.)46
-b(The)31 b(supplied)g(k)n(eyw)n(ord)d(v)-5 b(alue)31
-b(can)f(either)h(o)n(v)n(er-write)d(an)i(existing)g(k)n(eyw)n(ord)227
-1229 y(v)-5 b(alue,)28 b(or)f(can)g(b)r(e)h(inserted)f(as)g(a)g(new)h
-(header)f(card)f(in)n(to)i(the)g(FitsChan.)227 1350 y(The)h(k)n(eyw)n
-(ord)e(data)h(t)n(yp)r(e)h(is)g(selected)g(b)n(y)f(replacing)g
-Fm(<)p Fk(X)p Fm(>)g Fk(in)h(the)g(routine)f(name)h(b)n(y)f(one)h(of)g
-(the)g(follo)n(wing)227 1449 y(strings)e(represen)n(ting)f(the)i
-(recognised)e(FITS)i(data)f(t)n(yp)r(es:)340 1698 y Fj(\017)45
-b Fk(CF)28 b(-)f(Complex)h(\015oating)e(p)r(oin)n(t)i(v)-5
-b(alues.)340 1823 y Fj(\017)45 b Fk(CI)28 b(-)f(Complex)g(in)n(teger)g
-(v)-5 b(alues.)340 1948 y Fj(\017)45 b Fk(F)28 b(-)f(Floating)g(p)r
-(oin)n(t)h(v)-5 b(alues.)340 2073 y Fj(\017)45 b Fk(I)28
-b(-)f(In)n(teger)g(v)-5 b(alues.)340 2198 y Fj(\017)45
-b Fk(L)28 b(-)f(Logical)f(\(i.e.)38 b(b)r(o)r(olean\))27
-b(v)-5 b(alues.)340 2323 y Fj(\017)45 b Fk(S)28 b(-)f(String)h(v)-5
-b(alues.)340 2448 y Fj(\017)45 b Fk(CN)32 b(-)g(A)g Ft(")p
-Fk(CONTINUE)p Ft(")e Fk(v)-5 b(alue,)33 b(these)e(are)g(treated)g(lik)n
-(e)g(string)g(v)-5 b(alues,)33 b(but)f(are)f(enco)r(ded)g(without)427
-2547 y(an)d(equals)e(sign.)227 2701 y(The)i(data)f(t)n(yp)r(e)h(of)f
-(the)h Ft(")p Fk(v)-5 b(alue)p Ft(")27 b Fk(parameter)f(dep)r(ends)i
-(on)f Fm(<)p Fk(X)p Fm(>)h Fk(as)e(follo)n(ws:)340 2950
-y Fj(\017)45 b Fk(CF)31 b(-)g(DOUBLE)f(PRECISION\(2\))g(\(a)g(2)h
-(elemen)n(t)g(arra)n(y)d(holding)i(the)h(real)f(and)h(imaginary)e
-(parts)h(of)427 3050 y(the)e(complex)f(v)-5 b(alue\).)340
-3175 y Fj(\017)45 b Fk(CI)32 b(-)f(INTEGER\(2\))h(\(a)f(2)g(elemen)n(t)
-h(arra)n(y)d(holding)i(the)h(real)f(and)h(imaginary)e(parts)g(of)i(the)
-g(complex)427 3274 y(v)-5 b(alue\).)340 3399 y Fj(\017)45
-b Fk(F)28 b(-)f(DOUBLE)h(PRECISION.)340 3524 y Fj(\017)45
-b Fk(I)28 b(-)f(INTEGER)340 3649 y Fj(\017)45 b Fk(L)28
-b(-)f(LOGICAL)340 3774 y Fj(\017)45 b Fk(S)28 b(-)f(CHARA)n(CTER)340
-3898 y Fj(\017)45 b Fk(CN)28 b(-)g(CHARA)n(CTER)0 4052
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_SETFITS)p
-Fm(<)p Ft(X)p Fm(>)p Ft(\()37 b(THIS,)42 b(NAME,)f(VALUE,)g(COMMENT,)f
-(OVERWRITE,)g(STATUS)h(\))0 4194 y Fc(Argumen)m(ts:)259
-4322 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 4422
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259 4547
-y Fc(NAME)j(=)h(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f
-Fc(\))h(\(Giv)m(en\))427 4646 y Fk(A)25 b(c)n(haracter)d(string)i(con)n
-(taining)g(the)g(FITS)h(k)n(eyw)n(ord)e(name.)35 b(This)25
-b(ma)n(y)e(b)r(e)i(a)f(complete)h(FITS)f(header)427 4746
-y(card,)k(in)g(whic)n(h)g(case)f(the)h(k)n(eyw)n(ord)e(to)i(use)g(is)g
-(extracted)f(from)g(it.)39 b(No)28 b(more)f(than)h(80)f(c)n(haracters)f
-(are)427 4846 y(read)h(from)g(this)h(string.)259 4970
-y Fc(V)-11 b(ALUE)33 b(=)f Fm(<)p Fc(X)p Fm(>)p Fc(t)m(yp)s(e)g(\(Giv)m
-(en\))427 5070 y Fk(The)20 b(k)n(eyw)n(ord)d(v)-5 b(alue)19
-b(to)g(store)g(with)h(the)f(named)h(k)n(eyw)n(ord.)32
-b(The)19 b(data)g(t)n(yp)r(e)g(of)h(this)f(parameter)f(dep)r(ends)427
-5170 y(on)28 b Fm(<)p Fk(X)p Fm(>)f Fk(as)g(describ)r(ed)g(ab)r(o)n(v)n
-(e.)259 5295 y Fc(COMMENT)k(=)h(CHARA)m(CTER)f Fj(\003)h
-Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))427 5394 y Fk(A)i(string)e
-(holding)h(a)f(commen)n(t)h(to)g(asso)r(ciated)f(with)h(the)h(k)n(eyw)n
-(ord.)51 b(If)34 b(a)e(blank)h(string)f(is)h(supplied,)427
-5494 y(then)c(an)n(y)e(commen)n(t)h(included)h(in)f(the)g(string)g
-(supplied)g(for)g(the)g(NAME)g(parameter)f(is)h(used)g(instead.)427
-5593 y(If)f(NAME)f(con)n(tains)f(no)h(commen)n(t,)h(then)f(an)n(y)f
-(existing)h(commen)n(t)g(in)h(the)f(card)f(b)r(eing)i(o)n(v)n
-(er-written)d(is)427 5693 y(retained.)37 b(Otherwise,)26
-b(no)i(commen)n(t)f(is)h(stored)e(with)j(the)f(card.)p
-eop end
-%%Page: 332 342
-TeXDict begin 332 341 bop 0 52 a FG(332)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(O)m(VER)-11
-b(WRITE)32 b(=)g(LOGICAL)g(\(Giv)m(en\))427 451 y Fk(If)27
-b(.TR)n(UE.,)f(the)g(new)g(card)f(formed)g(from)h(the)g(supplied)g(k)n
-(eyw)n(ord)e(name,)i(v)-5 b(alue)26 b(and)g(commen)n(t)f(string)427
-551 y(o)n(v)n(er-writes)30 b(the)j(curren)n(t)f(card,)i(and)e(the)h
-(curren)n(t)f(card)g(is)h(incremen)n(ted)f(to)h(refer)f(to)g(the)i
-(next)e(card)427 650 y(\(see)c(the)h Ft(")p Fk(Card)p
-Ft(")e Fk(attribute\).)39 b(If)28 b(.F)-9 b(ALSE.,)29
-b(the)f(new)h(card)e(is)h(inserted)g(in)h(fron)n(t)e(of)i(the)f(curren)
-n(t)f(card)427 750 y(and)h(the)h(curren)n(t)f(card)f(is)h(left)h(unc)n
-(hanged.)39 b(In)28 b(either)g(case,)g(if)h(the)g(curren)n(t)e(card)h
-(on)g(en)n(try)f(p)r(oin)n(ts)i(to)427 849 y(the)f Ft(")p
-Fk(end-of-\014le)p Ft(")p Fk(,)f(the)h(new)f(card)g(is)g(app)r(ended)h
-(to)g(the)g(end)g(of)f(the)h(list.)259 986 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-1085 y Fk(The)c(global)e(status.)0 1254 y Fc(Notes:)340
-1544 y Fj(\017)45 b Fk(The)39 b(routine)f(AST)p Ft(_)p
-Fk(SETFITSU)g(can)g(b)r(e)h(used)g(to)f(indicate)g(that)h(no)f(v)-5
-b(alue)39 b(is)f(asso)r(ciated)f(with)i(a)427 1644 y(k)n(eyw)n(ord.)340
-1780 y Fj(\017)45 b Fk(The)29 b(routine)f(AST)p Ft(_)p
-Fk(SETFITSCM)g(can)h(b)r(e)f(used)h(to)f(store)g(a)g(pure)g(commen)n(t)
-h(card)e(\(i.e.)40 b(a)28 b(card)g(with)427 1880 y(a)f(blank)h(k)n(eyw)
-n(ord\).)340 2016 y Fj(\017)45 b Fk(T)-7 b(o)22 b(assign)e(a)i(new)g(v)
--5 b(alue)21 b(for)h(an)f(existing)h(k)n(eyw)n(ord)d(within)k(a)e
-(FitsChan,)i(\014rst)f(\014nd)g(the)h(card)d(describing)427
-2116 y(the)29 b(k)n(eyw)n(ord)d(using)i(AST)p Ft(_)p
-Fk(FINDFITS,)h(and)f(then)h(use)f(one)f(of)i(the)f(AST)p
-Ft(_)p Fk(SETFITS)p Fm(<)p Fk(X)p Fm(>)g Fk(family)g(to)427
-2215 y(o)n(v)n(er-write)d(the)j(old)g(v)-5 b(alue.)340
-2352 y Fj(\017)45 b Fk(If,)25 b(on)e(exit,)h(there)f(are)f(no)h(cards)f
-(follo)n(wing)g(the)h(card)g(written)g(b)n(y)g(this)g(routine,)h(then)g
-(the)f(curren)n(t)f(card)427 2451 y(is)28 b(left)g(p)r(oin)n(ting)g(at)
-f(the)h Ft(")p Fk(end-of-\014le)p Ft(")p Fk(.)340 2588
-y Fj(\017)45 b Fk(An)28 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)h
-(the)g(k)n(eyw)n(ord)d(name)j(do)r(es)f(not)h(conform)e(to)i(FITS)g
-(requiremen)n(ts.)p 0 2794 3780 12 v 0 2925 a FA(AST)p
-Fe(_)p FA(SETFITSCM)1326 2926 y Fd(Store)37 b(a)i(commen)m(t)e(card)
-1536 3026 y(in)h(a)h(FitsChan)2664 2925 y FA(AST)p Fe(_)p
-FA(SETFITSCM)0 3203 y Fc(Description:)44 b Fk(This)31
-b(routine)g(stores)f(a)h(commen)n(t)g(card)f(\()i(i.e.)47
-b(a)31 b(card)f(with)i(no)f(k)n(eyw)n(ord)e(name)i(or)f(equals)h
-(sign\))227 3303 y(within)j(a)f(FitsChan)g(at)g(the)h(curren)n(t)e
-(card)h(p)r(osition.)53 b(The)34 b(new)f(card)f(can)h(either)g(o)n(v)n
-(er-write)e(an)i(existing)227 3402 y(card,)27 b(or)g(can)g(b)r(e)h
-(inserted)f(as)g(a)g(new)h(card)f(in)n(to)g(the)h(FitsChan.)0
-3559 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_SETFITSCM\()37
-b(THIS,)42 b(COMMENT,)e(OVERWRITE,)g(STATUS)h(\))0 3715
-y Fc(Argumen)m(ts:)259 3859 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427
-3959 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259
-4095 y Fc(COMMENT)j(=)h(CHARA)m(CTER)f Fj(\003)h Fc(\()g
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 4195 y Fk(A)f(string)f(holding)g
-(the)h(text)g(of)f(the)h(commen)n(t)g(card.)45 b(If)31
-b(a)f(blank)g(string)g(is)g(supplied,)i(then)f(a)f(totally)427
-4294 y(blank)e(card)e(is)i(pro)r(duced.)259 4431 y Fc(O)m(VER)-11
-b(WRITE)32 b(=)g(LOGICAL)g(\(Giv)m(en\))427 4530 y Fk(If)h(.TR)n(UE.,)h
-(the)f(new)f(card)g(o)n(v)n(er-writes)e(the)j(curren)n(t)f(card,)h(and)
-f(the)h(curren)n(t)f(card)f(is)i(incremen)n(ted)427 4630
-y(to)c(refer)e(to)i(the)f(next)h(card)f(\(see)g(the)h
-Ft(")p Fk(Card)p Ft(")e Fk(attribute\).)39 b(If)29 b(.F)-9
-b(ALSE.,)29 b(the)g(new)f(card)g(is)g(inserted)g(in)427
-4729 y(fron)n(t)d(of)h(the)g(curren)n(t)f(card)g(and)g(the)h(curren)n
-(t)f(card)g(is)g(left)h(unc)n(hanged.)36 b(In)26 b(either)f(case,)g(if)
-h(the)g(curren)n(t)427 4829 y(card)h(on)g(en)n(try)g(p)r(oin)n(ts)h(to)
-f(the)h Ft(")p Fk(end-of-\014le)p Ft(")p Fk(,)f(the)h(new)f(card)g(is)h
-(app)r(ended)f(to)h(the)g(end)g(of)f(the)h(list.)259
-4966 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5065 y Fk(The)c(global)e(status.)0 5234
-y Fc(Notes:)340 5524 y Fj(\017)45 b Fk(If,)34 b(on)d(exit,)j(there)d
-(are)g(no)h(cards)f(follo)n(wing)g(the)h(card)f(written)h(b)n(y)g(this)
-g(function,)i(then)e(the)g(curren)n(t)427 5623 y(card)27
-b(is)g(left)i(p)r(oin)n(ting)e(at)h(the)g Ft(")p Fk(end-of-\014le)p
-Ft(")p Fk(.)p eop end
-%%Page: 333 343
-TeXDict begin 333 342 bop 3643 52 a FG(333)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(SETFITSU)1178 483 y Fd(Store)37
-b(an)i(unde\014ned)g(k)m(eyw)m(ord)1385 598 y(v)-7 b(alue)38
-b(in)h(a)f(FitsChan)2785 482 y FA(AST)p Fe(_)p FA(SETFITSU)0
-779 y Fc(Description:)44 b Fk(This)36 b(routine)e(stores)h(an)g
-(unde\014ned)g(v)-5 b(alue)36 b(for)e(a)h(named)g(k)n(eyw)n(ord)f
-(within)i(a)f(FitsChan)g(at)g(the)227 879 y(curren)n(t)c(card)f(p)r
-(osition.)49 b(The)31 b(new)h(unde\014ned)g(v)-5 b(alue)31
-b(can)g(either)h(o)n(v)n(er-write)d(an)i(existing)g(k)n(eyw)n(ord)f(v)
--5 b(alue,)227 979 y(or)27 b(can)g(b)r(e)h(inserted)g(as)e(a)i(new)f
-(header)g(card)g(in)n(to)g(the)h(FitsChan.)0 1144 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(CALL)42 b(AST_SETFITSU\()c(THIS,)j(NAME,)h(COMMENT,)e
-(OVERWRITE,)g(STATUS)h(\))0 1310 y Fc(Argumen)m(ts:)259
-1463 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 1562
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259 1703
-y Fc(NAME)j(=)h(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f
-Fc(\))h(\(Giv)m(en\))427 1803 y Fk(A)25 b(c)n(haracter)d(string)i(con)n
-(taining)g(the)g(FITS)h(k)n(eyw)n(ord)e(name.)35 b(This)25
-b(ma)n(y)e(b)r(e)i(a)f(complete)h(FITS)f(header)427 1903
-y(card,)k(in)g(whic)n(h)g(case)f(the)h(k)n(eyw)n(ord)e(to)i(use)g(is)g
-(extracted)f(from)g(it.)39 b(No)28 b(more)f(than)h(80)f(c)n(haracters)f
-(are)427 2002 y(read)h(from)g(this)h(string.)259 2143
-y Fc(COMMENT)j(=)h(CHARA)m(CTER)f Fj(\003)h Fc(\()g Fj(\003)f
-Fc(\))h(\(Giv)m(en\))427 2243 y Fk(A)i(string)e(holding)h(a)f(commen)n
-(t)h(to)g(asso)r(ciated)f(with)h(the)h(k)n(eyw)n(ord.)51
-b(If)34 b(a)e(blank)h(string)f(is)h(supplied,)427 2342
-y(then)c(an)n(y)e(commen)n(t)h(included)h(in)f(the)g(string)g(supplied)
-g(for)g(the)g(NAME)g(parameter)f(is)h(used)g(instead.)427
-2442 y(If)f(NAME)f(con)n(tains)f(no)h(commen)n(t,)h(then)f(an)n(y)f
-(existing)h(commen)n(t)g(in)h(the)f(card)f(b)r(eing)i(o)n(v)n
-(er-written)d(is)427 2542 y(retained.)37 b(Otherwise,)26
-b(no)i(commen)n(t)f(is)h(stored)e(with)j(the)f(card.)259
-2683 y Fc(O)m(VER)-11 b(WRITE)32 b(=)g(LOGICAL)g(\(Giv)m(en\))427
-2782 y Fk(If)d(.TR)n(UE.,)f(the)h(new)f(card)f(formed)h(from)g(the)g
-(supplied)h(k)n(eyw)n(ord)d(name)i(and)g(commen)n(t)g(string)g(o)n(v)n
-(er-)427 2882 y(writes)33 b(the)g(curren)n(t)g(card,)g(and)g(the)h
-(curren)n(t)e(card)g(is)h(incremen)n(ted)g(to)g(refer)g(to)g(the)g
-(next)g(card)g(\(see)427 2982 y(the)c Ft(")p Fk(Card)p
-Ft(")e Fk(attribute\).)40 b(If)29 b(.F)-9 b(ALSE.,)29
-b(the)g(new)f(card)g(is)g(inserted)g(in)h(fron)n(t)f(of)h(the)g(curren)
-n(t)e(card)h(and)427 3081 y(the)i(curren)n(t)e(card)h(is)g(left)h(unc)n
-(hanged.)41 b(In)30 b(either)f(case,)g(if)h(the)f(curren)n(t)g(card)f
-(on)h(en)n(try)g(p)r(oin)n(ts)g(to)g(the)427 3181 y Ft(")p
-Fk(end-of-\014le)p Ft(")p Fk(,)e(the)h(new)f(card)g(is)g(app)r(ended)h
-(to)g(the)g(end)g(of)f(the)h(list.)259 3322 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-3421 y Fk(The)c(global)e(status.)0 3600 y Fc(Notes:)340
-3898 y Fj(\017)45 b Fk(If,)34 b(on)d(exit,)j(there)d(are)g(no)h(cards)f
-(follo)n(wing)g(the)h(card)f(written)h(b)n(y)g(this)g(function,)i(then)
-e(the)g(curren)n(t)427 3998 y(card)27 b(is)g(left)i(p)r(oin)n(ting)e
-(at)h(the)g Ft(")p Fk(end-of-\014le)p Ft(")p Fk(.)340
-4139 y Fj(\017)45 b Fk(An)28 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)
-h(the)g(k)n(eyw)n(ord)d(name)j(do)r(es)f(not)h(conform)e(to)i(FITS)g
-(requiremen)n(ts.)p 0 4354 V 0 4485 a FA(AST)p Fe(_)p
-FA(SETREFPOS)1462 4486 y Fd(Set)39 b(the)f(reference)1333
-4586 y(p)s(osition)f(in)i(a)f(sp)s(eci\014ed)1400 4700
-y(celestial)f(co)s(ordinate)1715 4800 y(system)2651 4485
-y FA(AST)p Fe(_)p FA(SETREFPOS)0 5010 y Fc(Description:)44
-b Fk(This)25 b(routine)f(sets)g(the)g(reference)g(p)r(osition)g(\(see)g
-(attributes)g(RefRA)h(and)f(RefDec\))i(using)e(axis)f(v)-5
-b(al-)227 5109 y(ues)19 b(\(in)h(radians\))e(supplied)i(within)g(the)f
-(celestial)g(co)r(ordinate)f(system)h(represen)n(ted)f(b)n(y)h(a)g
-(supplied)g(SkyF)-7 b(rame.)0 5275 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_SETREFPOS\()37 b(THIS,)42 b(FRM,)g(LON,)g(LAT,)g
-(STATUS)f(\))0 5441 y Fc(Argumen)m(ts:)259 5593 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 5693 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(Sp)r(ecF)-7 b(rame.)p eop end
-%%Page: 334 344
-TeXDict begin 334 343 bop 0 52 a FG(334)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(FRM)g(=)h(INTEGER)g
-(\(Giv)m(en\))427 451 y Fk(P)n(oin)n(ter)23 b(to)i(the)g(SkyF)-7
-b(rame)24 b(whic)n(h)g(de\014nes)h(the)g(celestial)f(co)r(ordinate)g
-(system)g(in)h(whic)n(h)g(the)g(longitude)427 551 y(and)e(latitude)h(v)
--5 b(alues)23 b(are)g(supplied.)35 b(If)24 b(AST)p Ft(__)p
-Fk(NULL)f(is)h(supplied,)g(then)g(the)g(supplied)g(longitude)f(and)427
-650 y(latitude)28 b(v)-5 b(alues)28 b(are)e(assumed)h(to)h(b)r(e)g(FK5)
-f(J2000)e(RA)j(and)f(Dec)h(v)-5 b(alues.)259 787 y Fc(LON)32
-b(=)g(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427 887 y Fk(The)i(longitude)g
-(of)f(the)h(reference)f(p)r(oin)n(t,)i(in)f(the)g(co)r(ordinate)f
-(system)g(represen)n(ted)g(b)n(y)g(the)h(supplied)427
-986 y(SkyF)-7 b(rame)27 b(\(radians\).)259 1123 y Fc(LA)-8
-b(T)33 b(=)f(DOUBLE)g(PRECISION)g(\(Giv)m(en\))427 1223
-y Fk(The)37 b(latitude)h(of)e(the)i(reference)e(p)r(oin)n(t,)j(in)e
-(the)g(co)r(ordinate)f(system)h(represen)n(ted)e(b)n(y)i(the)g
-(supplied)427 1322 y(SkyF)-7 b(rame)27 b(\(radians\).)259
-1459 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 1559 y Fk(The)c(global)e(status.)p 0
-1766 3780 12 v 0 1897 a FA(AST)p Fe(_)p FA(SETUNC)1061
-1898 y Fd(Store)37 b(uncertain)m(t)m(y)f(information)f(in)1665
-2011 y(a)j(Region)2886 1897 y FA(AST)p Fe(_)p FA(SETUNC)0
-2213 y Fc(Description:)44 b Fk(Eac)n(h)33 b(Region)h(\(of)g(an)n(y)g
-(class\))f(can)h(ha)n(v)n(e)f(an)h Ft(")p Fk(uncertain)n(t)n(y)p
-Ft(")e Fk(whic)n(h)j(sp)r(eci\014es)f(the)g(uncertain)n(ties)227
-2312 y(asso)r(ciated)27 b(with)i(the)g(b)r(oundary)e(of)h(the)h
-(Region.)38 b(This)29 b(information)e(is)h(supplied)h(in)g(the)f(form)g
-(of)g(a)g(second)227 2412 y(Region.)77 b(The)41 b(uncertain)n(t)n(y)f
-(in)h(an)n(y)f(p)r(oin)n(t)i(on)e(the)i(b)r(oundary)e(of)h(a)g(Region)f
-(is)h(found)g(b)n(y)g(shifting)g(the)227 2512 y(asso)r(ciated)24
-b Ft(")p Fk(uncertain)n(t)n(y)p Ft(")g Fk(Region)g(so)h(that)h(it)f(is)
-g(cen)n(tred)g(at)g(the)h(b)r(oundary)f(p)r(oin)n(t)g(b)r(eing)g
-(considered.)36 b(The)227 2611 y(area)c(co)n(v)n(ered)g(b)n(y)h(the)h
-(shifted)g(uncertain)n(t)n(y)f(Region)g(then)h(represen)n(ts)e(the)i
-(uncertain)n(t)n(y)f(in)g(the)h(b)r(oundary)227 2711
-y(p)r(osition.)j(The)28 b(uncertain)n(t)n(y)e(is)i(assumed)f(to)g(b)r
-(e)h(the)g(same)f(for)g(all)h(p)r(oin)n(ts.)227 2839
-y(The)33 b(uncertain)n(t)n(y)f(is)h(usually)f(sp)r(eci\014ed)i(when)f
-(the)g(Region)f(is)h(created,)g(but)h(this)f(routine)g(allo)n(ws)e(it)i
-(to)g(b)r(e)227 2939 y(c)n(hanged)27 b(at)g(an)n(y)g(time.)0
-3097 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_SETUNC\()d(THIS,)
-i(UNC,)h(STATUS)f(\))0 3254 y Fc(Argumen)m(ts:)259 3399
-y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 3498 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(Region)f(whic)n(h)g(is)h(to)f(b)r(e)h(assigned)e(a)i(new)f
-(uncertain)n(t)n(y)-7 b(.)259 3635 y Fc(UNC)32 b(=)g(INTEGER)f(\(Giv)m
-(en\))427 3735 y Fk(P)n(oin)n(ter)39 b(to)i(the)f(new)h(uncertain)n(t)n
-(y)f(Region.)74 b(This)41 b(m)n(ust)g(b)r(e)f(of)h(a)f(class)g(for)f
-(whic)n(h)i(all)f(instances)427 3834 y(are)27 b(cen)n(tro-symetric)e
-(\(e.g.)37 b(Bo)n(x,)26 b(Circle,)i(Ellipse,)f(etc.\))37
-b(or)27 b(b)r(e)g(a)g(Prism)g(con)n(taining)g(cen)n(tro-symetric)427
-3934 y(comp)r(onen)n(t)c(Regions.)34 b(A)24 b(deep)f(cop)n(y)f(of)h
-(the)g(supplied)g(Region)f(will)i(b)r(e)f(tak)n(en,)g(so)f(subsequen)n
-(t)h(c)n(hanges)427 4034 y(to)j(the)g(uncertain)n(t)n(y)f(Region)h
-(using)f(the)h(supplied)h(p)r(oin)n(ter)e(will)h(ha)n(v)n(e)f(no)h
-(e\013ect)g(on)g(the)g(Region)f(THIS.)259 4170 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-4270 y Fk(The)c(global)e(status.)p 0 4477 V 0 4608 a
-FA(AST)p Fe(_)p FA(SHIFTMAP)1415 4609 y Fd(Create)37
-b(a)i(ShiftMap)2719 4608 y FA(AST)p Fe(_)p FA(SHIFTMAP)0
-4806 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(ShiftMap)i(and)e(optionally)g(initialises)g(its)h(attributes.)227
-4935 y(A)g(ShiftMap)h(is)e(a)g(linear)g(Mapping)g(whic)n(h)h(shifts)g
-(eac)n(h)f(axis)f(b)n(y)i(a)f(sp)r(eci\014ed)h(constan)n(t)f(v)-5
-b(alue.)0 5092 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_SHIFTMAP\()38 b(NCOORD,)j(SHIFT,)g(OPTIONS,)f(STATUS)h(\))0
-5250 y Fc(Argumen)m(ts:)259 5394 y(NCOORD)31 b(=)h(INTEGER)f(\(Giv)m
-(en\))427 5494 y Fk(The)25 b(n)n(um)n(b)r(er)f(of)g(co)r(ordinate)g(v)
--5 b(alues)24 b(for)g(eac)n(h)f(p)r(oin)n(t)i(to)f(b)r(e)h(transformed)
-f(\(i.e.)36 b(the)25 b(n)n(um)n(b)r(er)f(of)g(dimen-)427
-5593 y(sions)31 b(of)h(the)h(space)e(in)h(whic)n(h)g(the)g(p)r(oin)n
-(ts)g(will)g(reside\).)50 b(The)32 b(same)f(n)n(um)n(b)r(er)h(is)g
-(applicable)f(to)h(b)r(oth)427 5693 y(input)d(and)e(output)h(p)r(oin)n
-(ts.)p eop end
-%%Page: 335 345
-TeXDict begin 335 344 bop 3643 52 a FG(335)259 351 y
-Fc(SHIFT\()33 b(NCOORD)d(\))i(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en\))427
-451 y Fk(An)25 b(arra)n(y)e(con)n(taining)g(the)i(v)-5
-b(alues)24 b(to)h(b)r(e)g(added)f(on)g(to)h(the)g(input)g(co)r
-(ordinates)e(in)i(order)e(to)i(create)e(the)427 551 y(output)28
-b(co)r(ordinates.)36 b(A)28 b(separate)e(v)-5 b(alue)27
-b(should)h(b)r(e)g(supplied)g(for)f(eac)n(h)g(co)r(ordinate.)259
-677 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 776 y Fk(A)22 b(c)n(haracter)e
-(string)h(con)n(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g
-(attribute)g(assignmen)n(ts)f(to)g(b)r(e)427 876 y(used)j(for)g
-(initialising)g(the)g(new)g(ShiftMap.)37 b(The)24 b(syn)n(tax)f(used)h
-(is)g(iden)n(tical)g(to)g(that)g(for)g(the)g(AST)p Ft(_)p
-Fk(SET)427 976 y(routine.)259 1102 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 1201
-y Fk(The)c(global)e(status.)0 1357 y Fc(Returned)32 b(V)-8
-b(alue:)259 1487 y(AST)p Ft(_)p Fc(SHIFTMAP)33 b(=)f(INTEGER)427
-1586 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(ShiftMap.)0
-1741 y Fc(Notes:)340 2017 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 2117 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)-2
-2272 y Fc(Status)33 b(Handling)n(:)227 2418 y Fk(The)d(protected)g(in)n
-(terface)f(to)g(this)h(function)h(includes)f(an)f(extra)g(parameter)f
-(at)i(the)g(end)g(of)g(the)g(parameter)227 2518 y(list)37
-b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)
-r(oin)n(ter)g(to)h(the)g(in)n(teger)e(inherited)i(status)f(v)-5
-b(ariable:)54 b Ft(")p Fk(in)n(t)227 2618 y Fj(\003)p
-Fk(status)p Ft(")p Fk(.)p 0 2804 3780 12 v 0 2934 a FA(AST)p
-Fe(_)p FA(SHO)l(W)919 2935 y Fd(Displa)m(y)38 b(a)h(textual)e(represen)
-m(tation)e(of)k(an)1198 3050 y(Ob)7 b(ject)38 b(on)h(standard)e(output)
-3032 2934 y FA(AST)p Fe(_)p FA(SHO)l(W)0 3226 y Fc(Description:)44
-b Fk(This)29 b(routine)g(displa)n(ys)f(a)h(textual)g(description)g(of)g
-(an)n(y)f(AST)i(Ob)5 b(ject)29 b(on)g(standard)f(output.)42
-b(It)30 b(is)227 3325 y(pro)n(vided)d(primarily)f(as)h(an)h(aid)f(to)g
-(debugging.)0 3468 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42
-b(AST_SHOW\()e(THIS,)h(STATUS)g(\))0 3611 y Fc(Argumen)m(ts:)259
-3741 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 3840
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject)27 b(to)h(b)r(e)g
-(displa)n(y)n(ed.)259 3966 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f
-(\(Giv)m(en)h(and)g(Returned\))427 4066 y Fk(The)c(global)e(status.)0
-4221 y Fc(Class)31 b(Applicabilit)m(y:)259 4351 y(Ob)5
-b(ject)427 4451 y Fk(This)28 b(routine)f(applies)g(to)h(all)f(Ob)5
-b(jects.)p 0 4637 V 0 4768 a FA(AST)p Fe(_)p FA(SHO)l(WMESH)1433
-4769 y Fd(Displa)m(y)38 b(a)g(mesh)h(of)1403 4883 y(p)s(oin)m(ts)f(co)m
-(v)m(ering)f(the)1401 4998 y(surface)h(of)g(a)h(Region)2636
-4768 y FA(AST)p Fe(_)p FA(SHO)l(WMESH)0 5173 y Fc(Description:)44
-b Fk(This)34 b(routine)g(writes)g(a)f(table)h(to)g(standard)f(output)i
-(con)n(taining)e(the)h(axis)f(v)-5 b(alues)34 b(at)g(a)g(mesh)g(of)227
-5273 y(p)r(oin)n(ts)d(co)n(v)n(ering)e(the)j(surface)e(of)h(the)h
-(supplied)g(Region.)47 b(Eac)n(h)29 b(ro)n(w)h(of)i(output)f(con)n
-(tains)g(a)f(tab-separated)227 5373 y(list)36 b(of)f(axis)f(v)-5
-b(alues,)37 b(one)e(for)g(eac)n(h)f(axis)h(in)g(the)h(F)-7
-b(rame)35 b(encapsulated)f(b)n(y)h(the)h(Region.)59 b(The)36
-b(n)n(um)n(b)r(er)f(of)227 5472 y(p)r(oin)n(ts)28 b(in)g(the)g(mesh)f
-(is)h(determined)g(b)n(y)f(the)h(MeshSize)f(attribute.)227
-5593 y(The)33 b(table)g(is)g(preceeded)g(b)n(y)f(a)h(giv)n(en)f(title)i
-(string,)g(and)e(follo)n(w)n(ed)g(b)n(y)h(a)g(single)f(line)h(con)n
-(taining)f(the)i(w)n(ord)227 5693 y Ft(")p Fk(ENDMESH)p
-Ft(")p Fk(.)p eop end
-%%Page: 336 346
-TeXDict begin 336 345 bop 0 52 a FG(336)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(In)m(v)m(o)s(cation:)
-123 b Ft(CALL)42 b(AST_SHOWMESH\()c(THIS,)j(FORMAT,)g(TTL,)h(STATUS)f
-(\))0 510 y Fc(Argumen)m(ts:)259 655 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 755 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259
-892 y Fc(F)m(ORMA)-8 b(T)32 b(=)g(LOGICAL)h(\(Giv)m(en\))427
-992 y Fk(A)28 b(b)r(o)r(olean)f(v)-5 b(alue)28 b(indicating)g(if)g(the)
-g(displa)n(y)n(ed)e(axis)h(v)-5 b(alues)28 b(should)f(b)r(e)h
-(formatted)g(according)e(to)h(the)427 1091 y(F)-7 b(ormat)30
-b(attribute)g(asso)r(ciated)e(with)j(the)f(F)-7 b(rame's)29
-b(axis.)43 b(Otherwise,)30 b(they)g(are)f(displa)n(y)n(ed)g(as)g
-(simple)427 1191 y(\015oating)e(p)r(oin)n(t)h(v)-5 b(alues.)259
-1328 y Fc(TTL)33 b(=)f(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 1428 y Fk(A)c(title)g(to)g(displa)n
-(y)f(b)r(efore)g(displa)n(ying)g(the)h(\014rst)f(p)r(osition.)259
-1565 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 1665 y Fk(The)c(global)e(status.)p 0
-1873 3780 12 v 0 2004 a FA(AST)p Fe(_)p FA(SIMPLIFY)1384
-2005 y Fd(Simplify)37 b(a)h(Mapping)2787 2004 y FA(AST)p
-Fe(_)p FA(SIMPLIFY)0 2208 y Fc(Description:)44 b Fk(This)h(function)g
-(simpli\014es)g(a)f(Mapping)g(\(whic)n(h)h(ma)n(y)e(b)r(e)i(a)f(comp)r
-(ound)h(Mapping)f(suc)n(h)g(as)g(a)227 2307 y(CmpMap\))32
-b(to)g(eliminate)f(redundan)n(t)h(computational)e(steps,)j(or)e(to)g
-(merge)g(separate)f(steps)h(whic)n(h)h(can)f(b)r(e)227
-2407 y(p)r(erformed)c(more)g(e\016cien)n(tly)h(in)g(a)f(single)g(op)r
-(eration.)227 2536 y(As)e(a)g(simple)g(example,)h(a)e(Mapping)h(whic)n
-(h)g(m)n(ultiplied)h(co)r(ordinates)e(b)n(y)h(5,)g(and)g(then)h(m)n
-(ultiplied)f(the)h(result)227 2636 y(b)n(y)35 b(10,)g(could)g(b)r(e)g
-(simpli\014ed)g(to)f(a)h(single)f(step)h(whic)n(h)f(m)n(ultiplied)i(b)n
-(y)e(50.)57 b(Similarly)-7 b(,)36 b(a)e(Mapping)h(whic)n(h)227
-2735 y(m)n(ultiplied)29 b(b)n(y)e(5,)g(and)h(then)g(divided)g(b)n(y)f
-(5,)g(could)h(b)r(e)g(reduced)f(to)g(a)g(simple)h(cop)n(ying)f(op)r
-(eration.)227 2864 y(This)21 b(function)h(should)f(t)n(ypically)g(b)r
-(e)g(applied)h(to)f(Mappings)f(whic)n(h)h(ha)n(v)n(e)f(undergone)h
-(substan)n(tial)f(pro)r(cessing)227 2964 y(or)i(ha)n(v)n(e)f(b)r(een)i
-(formed)f(b)n(y)g(merging)f(other)h(Mappings.)35 b(It)22
-b(is)h(of)f(p)r(oten)n(tial)g(b)r(ene\014t,)j(for)d(example,)h(in)f
-(reducing)227 3063 y(execution)28 b(time)g(if)g(applied)f(b)r(efore)h
-(using)f(a)g(Mapping)g(to)h(transform)e(a)h(large)g(n)n(um)n(b)r(er)g
-(of)g(co)r(ordinates.)0 3222 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_SIMPLIFY\()38 b(THIS,)k(STATUS)f(\))0
-3380 y Fc(Argumen)m(ts:)259 3526 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 3626 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(original)e(Mapping.)
-259 3763 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 3863 y Fk(The)c(global)e(status.)0 4033
-y Fc(Class)31 b(Applicabilit)m(y:)259 4179 y(Mapping)427
-4279 y Fk(This)d(function)g(applies)f(to)h(all)f(Mappings.)259
-4416 y Fc(F)-8 b(rameSet)427 4516 y Fk(If)29 b(the)f(supplied)g
-(Mapping)g(is)f(a)h(F)-7 b(rameSet,)28 b(the)g(returned)g(Mapping)f
-(will)h(b)r(e)h(a)e(cop)n(y)g(of)h(the)g(supplied)427
-4615 y(F)-7 b(rameSet)28 b(in)g(whic)n(h)f(all)g(the)h(in)n(ter-F)-7
-b(rame)27 b(Mappings)g(ha)n(v)n(e)f(b)r(een)i(simpli\014ed.)0
-4786 y Fc(Returned)k(V)-8 b(alue:)259 4932 y(AST)p Ft(_)p
-Fc(SIMPLIFY)33 b(=)f(INTEGER)427 5031 y Fk(A)c(new)g(p)r(oin)n(ter)f
-(to)h(the)g(\(p)r(ossibly)f(simpli\014ed\))h(Mapping.)0
-5202 y Fc(Notes:)340 5494 y Fj(\017)45 b Fk(This)39 b(function)g(can)g
-(safely)f(b)r(e)h(applied)g(ev)n(en)f(to)h(Mappings)f(whic)n(h)h
-(cannot)f(b)r(e)i(simpli\014ed.)71 b(If)39 b(no)427 5593
-y(simpli\014cation)30 b(is)g(p)r(ossible,)h(it)g(b)r(eha)n(v)n(es)e
-(exactly)h(lik)n(e)f(AST)p Ft(_)p Fk(CLONE)h(and)g(returns)f(a)h(p)r
-(oin)n(ter)g(to)g(the)427 5693 y(original)c(Mapping.)p
-eop end
-%%Page: 337 347
-TeXDict begin 337 346 bop 3643 52 a FG(337)340 351 y
-Fj(\017)45 b Fk(The)40 b(Mapping)g(returned)g(b)n(y)g(this)g(function)h
-(ma)n(y)e(not)h(b)r(e)h(indep)r(enden)n(t)g(of)f(the)h(original)d(\(ev)
-n(en)i(if)427 451 y(simpli\014cation)34 b(w)n(as)e(p)r(ossible\),)j
-(and)f(mo)r(difying)f(it)i(ma)n(y)d(therefore)h(result)g(in)h(indirect)
-g(mo)r(di\014cation)427 551 y(of)29 b(the)h(original.)40
-b(If)30 b(a)f(completely)g(indep)r(enden)n(t)h(result)f(is)g(required,)
-g(a)g(cop)n(y)f(should)h(b)r(e)h(made)f(using)427 650
-y(AST)p Ft(_)p Fk(COPY.)340 779 y Fj(\017)45 b Fk(A)21
-b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 878
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 1069 3780 12 v 0 1199
-a FA(AST)p Fe(_)p FA(SKYFRAME)1398 1200 y Fd(Create)37
-b(a)i(SkyF)-10 b(rame)2664 1199 y FA(AST)p Fe(_)p FA(SKYFRAME)0
-1380 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(SkyF)-7 b(rame)27 b(and)h(optionally)e(initialises)i(its)f
-(attributes.)227 1502 y(A)h(SkyF)-7 b(rame)26 b(is)h(a)f(sp)r
-(ecialised)h(form)f(of)h(F)-7 b(rame)27 b(whic)n(h)f(describ)r(es)h
-(celestial)f(longitude/latitude)h(co)r(ordinate)227 1602
-y(systems.)53 b(The)33 b(particular)f(celestial)h(co)r(ordinate)f
-(system)h(to)g(b)r(e)g(represen)n(ted)f(is)h(sp)r(eci\014ed)g(b)n(y)g
-(setting)g(the)227 1702 y(SkyF)-7 b(rame's)33 b(System)g(attribute)h
-(\(curren)n(tly)-7 b(,)34 b(the)g(default)g(is)f(ICRS\))h(quali\014ed,)
-h(as)d(necessary)-7 b(,)34 b(b)n(y)f(a)g(mean)227 1801
-y(Equino)n(x)27 b(v)-5 b(alue)27 b(and/or)f(an)h(Ep)r(o)r(c)n(h.)227
-1924 y(F)-7 b(or)28 b(eac)n(h)f(of)g(the)i(supp)r(orted)e(celestial)h
-(co)r(ordinate)e(systems,)i(a)f(SkyF)-7 b(rame)27 b(can)h(apply)f(an)h
-(optional)f(shift)i(of)227 2023 y(origin)21 b(to)h(create)f(a)h(co)r
-(ordinate)f(system)h(represen)n(ting)e(o\013sets)i(within)h(the)g
-(celestial)e(co)r(ordinate)g(system)h(from)227 2123 y(some)33
-b(sp)r(eci\014ed)h(p)r(oin)n(t.)55 b(This)34 b(o\013set)f(co)r
-(ordinate)g(system)g(can)g(also)g(b)r(e)h(rotated)f(to)g(de\014ne)h
-(new)g(longitude)227 2222 y(and)28 b(latitude)g(axes.)36
-b(See)27 b(attributes)h(SkyRef,)g(SkyRefIs)f(and)h(SkyRefP)227
-2345 y(All)34 b(the)f(co)r(ordinate)f(v)-5 b(alues)33
-b(used)g(b)n(y)g(a)g(SkyF)-7 b(rame)32 b(are)h(in)g(radians.)52
-b(These)33 b(ma)n(y)g(b)r(e)g(formatted)g(in)g(more)227
-2444 y(con)n(v)n(en)n(tional)26 b(w)n(a)n(ys)g(for)h(displa)n(y)g(b)n
-(y)g(using)g(AST)p Ft(_)p Fk(F)n(ORMA)-7 b(T.)0 2589
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_SKYFRAME\()38
-b(OPTIONS,)j(STATUS)g(\))0 2734 y Fc(Argumen)m(ts:)259
-2866 y(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 2966 y Fk(A)22 b(c)n(haracter)e
-(string)h(con)n(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g
-(attribute)g(assignmen)n(ts)f(to)g(b)r(e)427 3066 y(used)i(for)e
-(initialising)i(the)f(new)h(SkyF)-7 b(rame.)34 b(The)22
-b(syn)n(tax)g(used)g(is)g(iden)n(tical)h(to)f(that)g(for)g(the)h(AST)p
-Ft(_)p Fk(SET)427 3165 y(routine.)37 b(If)28 b(no)f(initialisation)g
-(is)h(required,)e(a)i(blank)f(v)-5 b(alue)27 b(ma)n(y)g(b)r(e)h
-(supplied.)259 3294 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)
-h(and)g(Returned\))427 3393 y Fk(The)c(global)e(status.)0
-3551 y Fc(Returned)32 b(V)-8 b(alue:)259 3683 y(AST)p
-Ft(_)p Fc(SKYFRAME)31 b(=)i(INTEGER)427 3782 y Fk(A)28
-b(p)r(oin)n(ter)f(to)h(the)g(new)g(SkyF)-7 b(rame.)0
-3940 y Fc(Examples:)227 4076 y Fy(FRAME)47 b(=)g(AST)p
-Ft(_)p Fy(SKYFRAME\()d(')k(',)f(STATUS)f(\))427 4171
-y Fk(Creates)27 b(a)g(SkyF)-7 b(rame)27 b(to)g(describ)r(e)g(the)h
-(default)h(ICRS)e(celestial)g(co)r(ordinate)g(system.)227
-4288 y Fy(FRAME)47 b(=)g(AST)p Ft(_)p Fy(SKYFRAME\()d('System)i(=)h
-(FK5,)g(Equinox)f(=)h(J2005,)f(Digits)g(=)i(10',)227
-4387 y(STATUS)e(\))427 4461 y Fk(Creates)23 b(a)g(SkyF)-7
-b(rame)23 b(to)h(describ)r(e)f(the)h(FK5)f(celestial)g(co)r(ordinate)g
-(system,)h(with)g(a)g(mean)f(Equino)n(x)g(of)427 4560
-y(J2005.0.)33 b(Because)23 b(esp)r(ecially)g(accurate)f(co)r(ordinates)
-g(will)i(b)r(e)g(used,)g(additional)f(precision)g(\(10)f(digits\))427
-4660 y(has)27 b(b)r(een)h(requested.)37 b(This)27 b(will)h(b)r(e)g
-(used)g(when)f(co)r(ordinate)g(v)-5 b(alues)27 b(are)g(formatted)g(for)
-g(displa)n(y)-7 b(.)227 4789 y Fy(FRAME)47 b(=)g(AST)p
-Ft(_)p Fy(SKYFRAME\()d('System)i(=)h(FK4,)g(Equinox)f(=)h(1955-SEP-2',)
-e(STATUS)h(\))427 4888 y Fk(Creates)32 b(a)g(SkyF)-7
-b(rame)31 b(to)i(describ)r(e)f(the)h(old)f(FK4)g(celestial)g(co)r
-(ordinate)f(system.)51 b(A)33 b(default)g(Ep)r(o)r(c)n(h)427
-4988 y(v)-5 b(alue)28 b(\(B1950.0\))d(is)j(used,)g(but)g(the)g(mean)f
-(Equino)n(x)f(v)-5 b(alue)28 b(is)f(giv)n(en)g(explicitly)h(as)f
-Ft(")p Fk(1955-SEP-2)p Ft(")p Fk(.)227 5117 y Fy(FRAME)47
-b(=)g(AST)p Ft(_)p Fy(SKYFRAME\()d('System)i(=)h(GAPPT,)f(Epoch)h(=)g
-(')h(//)f(DATE,)f(STATUS)g(\))427 5216 y Fk(Creates)32
-b(a)h(SkyF)-7 b(rame)32 b(to)h(describ)r(e)f(the)i(Geo)r(cen)n(tric)e
-(Apparen)n(t)h(celestial)f(co)r(ordinate)g(system.)53
-b(The)427 5315 y(Ep)r(o)r(c)n(h)37 b(v)-5 b(alue,)39
-b(whic)n(h)e(sp)r(eci\014es)g(the)g(date)g(of)g(observ)-5
-b(ation,)38 b(is)f(obtained)f(from)h(a)f(date/time)h(string)427
-5415 y(con)n(tained)27 b(in)h(the)g(c)n(haracter)e(v)-5
-b(ariable)26 b(D)n(A)-7 b(TE.)0 5572 y Fc(Notes:)p eop
-end
-%%Page: 338 348
-TeXDict begin 338 347 bop 0 52 a FG(338)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(Curren)n(tly)-7 b(,)26 b(the)g(default)h(celestial)e(co)r
-(ordinate)g(system)g(is)h(ICRS.)h(Ho)n(w)n(ev)n(er,)d(this)i(default)h
-(ma)n(y)e(c)n(hange)427 451 y(in)34 b(future)g(as)f(new)h(astrometric)e
-(standards)g(ev)n(olv)n(e.)54 b(The)33 b(in)n(ten)n(tion)h(is)g(to)f
-(trac)n(k)f(the)i(most)g(mo)r(dern)427 551 y(appropriate)e(standard.)55
-b(F)-7 b(or)33 b(this)h(reason,)g(y)n(ou)f(should)g(use)h(the)g
-(default)g(only)g(if)g(this)g(is)g(what)f(y)n(ou)427
-650 y(in)n(tend)j(\(and)f(can)f(tolerate)g(an)n(y)g(asso)r(ciated)g
-(sligh)n(t)g(c)n(hange)g(in)h(b)r(eha)n(viour)f(with)h(future)h(v)n
-(ersions)d(of)427 750 y(this)d(function\).)43 b(If)30
-b(y)n(ou)e(in)n(tend)i(to)f(use)g(the)h(ICRS)f(system)h(inde\014nitely)
--7 b(,)30 b(then)g(y)n(ou)e(should)i(sp)r(ecify)f(it)427
-849 y(explicitly)f(using)f(an)h(OPTIONS)e(v)-5 b(alue)28
-b(of)f Ft(")p Fk(System=ICRS)p Ft(")p Fk(.)340 988 y
-Fj(\017)45 b Fk(Whic)n(hev)n(er)25 b(celestial)g(co)r(ordinate)f
-(system)h(is)g(represen)n(ted,)g(it)h(will)g(ha)n(v)n(e)e(t)n(w)n(o)g
-(axes.)36 b(The)25 b(\014rst)g(of)h(these)427 1088 y(will)f(b)r(e)f
-(the)h(longitude)f(axis)g(and)g(the)h(second)e(will)i(b)r(e)f(the)h
-(latitude)g(axis.)35 b(This)24 b(order)f(can)h(b)r(e)h(c)n(hanged)427
-1187 y(using)j(AST)p Ft(_)p Fk(PERMAXES)f(if)h(required.)340
-1326 y Fj(\017)45 b Fk(When)19 b(con)n(v)n(ersion)d(b)r(et)n(w)n(een)j
-(t)n(w)n(o)e(SkyF)-7 b(rames)18 b(is)g(requested)g(\(as)g(when)g
-(supplying)g(SkyF)-7 b(rames)18 b(AST)p Ft(_)p Fk(CONVER)-7
-b(T\),)427 1426 y(accoun)n(t)21 b(will)g(b)r(e)h(tak)n(en)e(of)i(the)f
-(nature)g(of)g(the)h(celestial)f(co)r(ordinate)f(systems)h(they)g
-(represen)n(t,)g(together)427 1525 y(with)26 b(an)n(y)f(qualifying)h
-(mean)f(Equino)n(x)f(or)h(Ep)r(o)r(c)n(h)g(v)-5 b(alues,)26
-b(etc.)36 b(The)26 b(AlignSystem)g(attribute)g(will)g(also)427
-1625 y(b)r(e)31 b(tak)n(en)e(in)n(to)h(accoun)n(t.)44
-b(The)30 b(results)f(will)i(therefore)e(fully)i(re\015ect)e(the)i
-(relationship)e(b)r(et)n(w)n(een)h(p)r(osi-)427 1725
-y(tions)e(on)f(the)h(sky)f(measured)g(in)h(the)g(t)n(w)n(o)e(systems.)
-340 1863 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e
-(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 1963 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 2174 3780 12 v 0 2305 a FA(AST)p Fe(_)p FA(SLAADD)1223
-2306 y Fd(Add)39 b(a)f(celestial)f(co)s(ordinate)1259
-2405 y(con)m(v)m(ersion)f(to)i(an)h(SlaMap)2883 2305
-y FA(AST)p Fe(_)p FA(SLAADD)0 2606 y Fc(Description:)44
-b Fk(This)24 b(routine)g(adds)f(one)h(of)g(the)g(standard)f(celestial)h
-(co)r(ordinate)f(system)h(con)n(v)n(ersions)d(pro)n(vided)i(b)n(y)227
-2705 y(the)28 b(SLALIB)g(P)n(ositional)e(Astronom)n(y)g(Library)g
-(\(Starlink)i(User)f(Note)g(SUN/67\))g(to)h(an)f(existing)g(SlaMap.)227
-2836 y(When)d(an)f(SlaMap)f(is)h(\014rst)g(created)f(\(using)h(AST)p
-Ft(_)p Fk(SLAMAP\),)g(it)h(simply)f(p)r(erforms)f(a)h(unit)g(\(n)n
-(ull\))h(Mapping.)227 2935 y(By)31 b(using)g(AST)p Ft(_)p
-Fk(SLAADD)h(\(rep)r(eatedly)f(if)h(necessary\),)e(one)h(or)f(more)h(co)
-r(ordinate)f(con)n(v)n(ersion)e(steps)j(ma)n(y)227 3035
-y(then)36 b(b)r(e)f(added,)i(whic)n(h)e(the)h(SlaMap)f(will)g(p)r
-(erform)g(in)g(sequence.)59 b(This)35 b(allo)n(ws)f(m)n(ulti-step)h
-(con)n(v)n(ersions)227 3135 y(b)r(et)n(w)n(een)20 b(a)g(v)-5
-b(ariet)n(y)18 b(of)i(celestial)g(co)r(ordinate)e(systems)i(to)f(b)r(e)
-i(assem)n(bled)e(out)g(of)h(the)g(building)h(blo)r(c)n(ks)e(pro)n
-(vided)227 3234 y(b)n(y)28 b(SLALIB.)227 3365 y(Normally)-7
-b(,)29 b(if)h(an)f(SlaMap's)g(In)n(v)n(ert)g(attribute)g(is)h(zero)e
-(\(the)i(default\),)h(then)f(its)f(forw)n(ard)f(transformation)g(is)227
-3464 y(p)r(erformed)19 b(b)n(y)f(carrying)f(out)i(eac)n(h)f(of)h(the)g
-(individual)g(co)r(ordinate)f(con)n(v)n(ersions)e(sp)r(eci\014ed)k(b)n
-(y)e(AST)p Ft(_)p Fk(SLAADD)227 3564 y(in)28 b(the)g(order)e(giv)n(en)h
-(\(i.e.)37 b(with)29 b(the)e(most)h(recen)n(tly)f(added)g(con)n(v)n
-(ersion)e(applied)j(last\).)227 3694 y(This)e(order)f(is)h(rev)n(ersed)
-f(if)h(the)h(SlaMap's)e(In)n(v)n(ert)h(attribute)g(is)g(non-zero)f
-(\(or)g(if)i(the)g(in)n(v)n(erse)d(transformation)227
-3794 y(is)j(requested)f(b)n(y)h(an)n(y)f(other)g(means\))h(and)g(eac)n
-(h)f(individual)h(co)r(ordinate)f(con)n(v)n(ersion)e(is)j(also)f
-(replaced)g(b)n(y)g(its)227 3894 y(o)n(wn)f(in)n(v)n(erse.)35
-b(This)25 b(pro)r(cess)f(in)n(v)n(erts)g(the)i(o)n(v)n(erall)d
-(e\013ect)j(of)g(the)f(SlaMap.)36 b(In)25 b(this)h(case,)f(the)h
-(\014rst)f(con)n(v)n(ersion)227 3993 y(to)j(b)r(e)g(applied)f(w)n(ould)
-g(b)r(e)h(the)g(in)n(v)n(erse)f(of)g(the)h(one)f(most)h(recen)n(tly)f
-(added.)0 4154 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42
-b(AST_SLAADD\()d(THIS,)i(CVT,)h(ARGS,)g(STATUS)f(\))0
-4316 y Fc(Argumen)m(ts:)259 4464 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 4563 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(SlaMap.)259
-4702 y Fc(CVT)k(=)h(CHARA)m(CTER)e Fj(\003)g Fc(\()h
-Fj(\003)g Fc(\))g(\(Giv)m(en\))427 4802 y Fk(A)38 b(c)n(haracter)e
-(string)h(whic)n(h)h(iden)n(ti\014es)g(the)g(celestial)f(co)r(ordinate)
-g(con)n(v)n(ersion)e(to)j(b)r(e)g(added)g(to)f(the)427
-4901 y(SlaMap.)g(See)27 b(the)h Ft(")p Fk(SLALIB)f(Con)n(v)n(ersions)p
-Ft(")e Fk(section)i(for)g(details)h(of)f(those)h(a)n(v)-5
-b(ailable.)259 5040 y Fc(AR)m(GS\()32 b Fj(\003)g Fc(\))g(=)g(DOUBLE)g
-(PRECISION)f(\(Giv)m(en\))427 5140 y Fk(An)e(arra)n(y)d(con)n(taining)h
-(argumen)n(t)g(v)-5 b(alues)28 b(for)f(the)i(celestial)e(co)r(ordinate)
-g(con)n(v)n(ersion.)37 b(The)28 b(n)n(um)n(b)r(er)g(of)427
-5239 y(argumen)n(ts)22 b(required,)h(and)g(hence)g(the)g(n)n(um)n(b)r
-(er)g(of)g(arra)n(y)e(elemen)n(ts)h(used,)i(dep)r(ends)g(on)f(the)g
-(con)n(v)n(ersion)427 5339 y(sp)r(eci\014ed)28 b(\(see)f(the)h
-Ft(")p Fk(SLALIB)f(Con)n(v)n(ersions)p Ft(")e Fk(section\).)36
-b(This)28 b(arra)n(y)d(is)i(ignored)f(if)i(no)f(argumen)n(ts)g(are)427
-5439 y(needed.)259 5577 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m
-(en)h(and)g(Returned\))427 5677 y Fk(The)c(global)e(status.)p
-eop end
-%%Page: 339 349
-TeXDict begin 339 348 bop 3643 52 a FG(339)0 351 y Fc(Notes:)340
-656 y Fj(\017)45 b Fk(All)38 b(co)r(ordinate)d(v)-5 b(alues)37
-b(pro)r(cessed)e(b)n(y)i(an)f(SlaMap)h(are)e(in)i(radians.)64
-b(The)36 b(\014rst)h(co)r(ordinate)f(is)g(the)427 755
-y(celestial)27 b(longitude)h(and)f(the)h(second)f(co)r(ordinate)g(is)g
-(the)h(celestial)f(latitude.)340 899 y Fj(\017)45 b Fk(When)21
-b(assem)n(bling)d(a)i(m)n(ulti-stage)f(con)n(v)n(ersion,)g(it)h(can)g
-(sometimes)f(b)r(e)h(di\016cult)h(to)f(determine)g(the)g(most)427
-999 y(economical)j(con)n(v)n(ersion)e(path.)36 b(F)-7
-b(or)23 b(example,)h(con)n(v)n(erting)e(to)i(the)g(standard)f(FK5)g(co)
-r(ordinate)g(system)427 1098 y(as)37 b(an)h(in)n(termediate)f(stage)g
-(is)g(often)h(sensible)g(in)g(form)n(ulating)f(the)h(problem,)i(but)e
-(ma)n(y)f(in)n(tro)r(duce)427 1198 y(unnecessary)31 b(extra)g(con)n(v)n
-(ersion)f(steps.)51 b(A)33 b(solution)e(to)h(this)h(is)f(to)g(include)h
-(all)f(the)g(steps)g(whic)n(h)h(are)427 1298 y(\(logically\))24
-b(necessary)-7 b(,)24 b(but)h(then)g(to)g(use)f(AST)p
-Ft(_)p Fk(SIMPLIFY)h(to)g(simplify)g(the)g(resulting)f(SlaMap.)36
-b(The)427 1397 y(simpli\014cation)28 b(pro)r(cess)e(will)i(eliminate)g
-(an)n(y)f(steps)g(whic)n(h)h(turn)f(out)h(not)f(to)h(b)r(e)g(needed.)
-340 1541 y Fj(\017)45 b Fk(This)30 b(routine)g(do)r(es)f(not)h(c)n(hec)
-n(k)f(to)h(ensure)f(that)h(the)h(sequence)e(of)h(co)r(ordinate)f(con)n
-(v)n(ersions)e(added)j(to)427 1641 y(an)e(SlaMap)f(is)g(ph)n(ysically)g
-(meaningful.)-2 1824 y Fc(SLALIB)33 b(Con)m(v)m(ersions)n(:)227
-1970 y Fk(The)19 b(follo)n(wing)f(strings)f(\(whic)n(h)i(are)f
-(case-insensitiv)n(e\))f(ma)n(y)h(b)r(e)h(supplied)g(via)f(the)h(CVT)g
-(argumen)n(t)f(to)h(indicate)227 2070 y(whic)n(h)33 b(celestial)e(co)r
-(ordinate)h(con)n(v)n(ersion)e(is)i(to)g(b)r(e)h(added)f(to)h(the)f
-(SlaMap.)51 b(Eac)n(h)31 b(string)h(is)g(deriv)n(ed)g(from)227
-2170 y(the)k(name)g(of)f(the)h(SLALIB)g(routine)f(that)h(p)r(erforms)e
-(the)i(con)n(v)n(ersion)e(and)h(the)h(relev)-5 b(an)n(t)35
-b(do)r(cumen)n(tation)227 2269 y(\(SUN/67\))d(should)g(b)r(e)g
-(consulted)g(for)f(details.)50 b(Where)32 b(argumen)n(ts)f(are)g
-(needed)h(b)n(y)f(the)i(con)n(v)n(ersion,)d(they)227
-2369 y(are)d(listed)i(in)f(paren)n(theses.)37 b(V)-7
-b(alues)28 b(for)f(these)h(argumen)n(ts)f(should)h(b)r(e)g(giv)n(en,)g
-(via)f(the)i(AR)n(GS)f(arra)n(y)-7 b(,)26 b(in)i(the)227
-2469 y(order)k(indicated.)52 b(The)33 b(argumen)n(t)e(names)h(matc)n(h)
-h(the)g(corresp)r(onding)d(SLALIB)j(routine)f(argumen)n(ts)g(and)227
-2568 y(their)f(v)-5 b(alues)30 b(should)h(b)r(e)g(giv)n(en)e(using)i
-(exactly)f(the)h(same)f(units,)i(time)f(scale,)f(calendar,)h(etc.)46
-b(as)30 b(describ)r(ed)227 2668 y(in)e(SUN/67:)340 2961
-y Fj(\017)45 b Ft(")p Fk(ADDET)p Ft(")28 b Fk(\(EQ\):)f(Add)h(E-terms)f
-(of)g(ab)r(erration.)340 3105 y Fj(\017)45 b Ft(")p Fk(SUBET)p
-Ft(")27 b Fk(\(EQ\):)g(Subtract)h(E-terms)e(of)i(ab)r(erration.)340
-3249 y Fj(\017)45 b Ft(")p Fk(PREBN)p Ft(")26 b Fk(\(BEP0,BEP1\):)35
-b(Apply)28 b(Bessel-New)n(com)n(b)d(pre-IA)n(U)i(1976)f(\(FK4\))i
-(precession)e(mo)r(del.)340 3393 y Fj(\017)45 b Ft(")p
-Fk(PREC)p Ft(")26 b Fk(\(EP0,EP1\):)35 b(Apply)28 b(IA)n(U)g(1975)d
-(\(FK5\))j(precession)e(mo)r(del.)340 3537 y Fj(\017)45
-b Ft(")p Fk(FK45Z)p Ft(")26 b Fk(\(BEPOCH\):)h(Con)n(v)n(ert)f(FK4)h
-(to)g(FK5)g(\(no)h(prop)r(er)e(motion)i(or)e(parallax\).)340
-3680 y Fj(\017)45 b Ft(")p Fk(FK54Z)p Ft(")26 b Fk(\(BEPOCH\):)h(Con)n
-(v)n(ert)f(FK5)h(to)g(FK4)g(\(no)h(prop)r(er)e(motion)i(or)e
-(parallax\).)340 3824 y Fj(\017)45 b Ft(")p Fk(AMP)p
-Ft(")27 b Fk(\(D)n(A)-7 b(TE,EQ\):)27 b(Con)n(v)n(ert)g(geo)r(cen)n
-(tric)f(apparen)n(t)g(to)i(mean)f(place.)340 3968 y Fj(\017)45
-b Ft(")p Fk(MAP)p Ft(")27 b Fk(\(EQ,D)n(A)-7 b(TE\):)27
-b(Con)n(v)n(ert)g(mean)g(place)g(to)h(geo)r(cen)n(tric)e(apparen)n(t.)
-340 4112 y Fj(\017)45 b Ft(")p Fk(ECLEQ)p Ft(")26 b Fk(\(D)n(A)-7
-b(TE\):)28 b(Con)n(v)n(ert)e(ecliptic)i(co)r(ordinates)e(to)i(FK5)f
-(J2000.0)d(equatorial.)340 4255 y Fj(\017)45 b Ft(")p
-Fk(EQECL)p Ft(")26 b Fk(\(D)n(A)-7 b(TE\):)28 b(Con)n(v)n(ert)e
-(equatorial)g(FK5)h(J2000.0)e(to)i(ecliptic)h(co)r(ordinates.)340
-4399 y Fj(\017)45 b Ft(")p Fk(GALEQ)p Ft(")p Fk(:)36
-b(Con)n(v)n(ert)26 b(galactic)g(co)r(ordinates)h(to)g(FK5)g(J2000.0)e
-(equatorial.)340 4543 y Fj(\017)45 b Ft(")p Fk(EQGAL)p
-Ft(")p Fk(:)36 b(Con)n(v)n(ert)26 b(FK5)h(J2000.0)e(equatorial)h(to)h
-(galactic)g(co)r(ordinates.)340 4687 y Fj(\017)45 b Ft(")p
-Fk(HFK5Z)p Ft(")26 b Fk(\(JEPOCH\):)h(Con)n(v)n(ert)f(ICRS)i(co)r
-(ordinates)e(to)i(FK5)f(J2000.0)e(equatorial.)340 4830
-y Fj(\017)45 b Ft(")p Fk(FK5HZ)p Ft(")26 b Fk(\(JEPOCH\):)h(Con)n(v)n
-(ert)f(FK5)h(J2000.0)e(equatorial)h(co)r(ordinates)g(to)i(ICRS.)340
-4974 y Fj(\017)45 b Ft(")p Fk(GALSUP)p Ft(")p Fk(:)37
-b(Con)n(v)n(ert)26 b(galactic)g(to)i(sup)r(ergalactic)e(co)r
-(ordinates.)340 5118 y Fj(\017)45 b Ft(")p Fk(SUPGAL)p
-Ft(")p Fk(:)37 b(Con)n(v)n(ert)26 b(sup)r(ergalactic)g(co)r(ordinates)g
-(to)i(galactic.)340 5262 y Fj(\017)45 b Ft(")p Fk(J2000H)p
-Ft(")p Fk(:)34 b(Con)n(v)n(ert)27 b(dynamical)g(J2000.0)d(to)k(ICRS.)
-340 5405 y Fj(\017)45 b Ft(")p Fk(HJ2000)p Ft(")p Fk(:)34
-b(Con)n(v)n(ert)27 b(ICRS)g(to)h(dynamical)f(J2000.0.)340
-5549 y Fj(\017)45 b Ft(")p Fk(R2H)p Ft(")27 b Fk(\(LAST\):)i(Con)n(v)n
-(ert)d(RA)i(to)f(Hour)g(Angle.)340 5693 y Fj(\017)45
-b Ft(")p Fk(H2R)p Ft(")27 b Fk(\(LAST\):)i(Con)n(v)n(ert)d(Hour)h
-(Angle)g(to)h(RA.)p eop end
-%%Page: 340 350
-TeXDict begin 340 349 bop 0 52 a FG(340)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 351 y Fk(F)-7
-b(or)36 b(example,)j(to)e(use)f(the)i Ft(")p Fk(ADDET)p
-Ft(")e Fk(con)n(v)n(ersion,)h(whic)n(h)g(tak)n(es)f(a)g(single)g
-(argumen)n(t)g(EQ,)g(y)n(ou)g(should)227 451 y(consult)c(the)g(do)r
-(cumen)n(tation)g(for)f(the)i(SLALIB)f(routine)f(SLA)p
-Ft(_)p Fk(ADDET.)h(This)g(describ)r(es)g(the)g(con)n(v)n(ersion)227
-551 y(in)e(detail)f(and)h(sho)n(ws)e(that)i(EQ)e(is)i(the)f(Besselian)g
-(ep)r(o)r(c)n(h)g(of)g(the)h(mean)f(equator)g(and)g(equino)n(x.)41
-b(This)30 b(v)-5 b(alue)227 650 y(should)28 b(then)g(b)r(e)g(supplied)g
-(to)f(AST)p Ft(_)p Fk(SLAADD)i(in)f(AR)n(GS\(1\).)227
-775 y(In)40 b(addition)g(the)g(follo)n(wing)e(strings)h(ma)n(y)g(b)r(e)
-h(supplied)g(for)f(more)g(complex)g(con)n(v)n(ersions)e(whic)n(h)i(do)h
-(not)227 875 y(corresp)r(ond)30 b(to)h(an)n(y)g(one)g(single)g(SLALIB)g
-(routine)g(\(DIURAB)i(is)e(the)h(magnitude)f(of)h(the)f(diurnal)g(ab)r
-(erra-)227 974 y(tion)j(v)n(ector)e(in)h(units)h(of)f
-Ft(")p Fk(da)n(y/\(2.PI\))p Ft(")p Fk(,)f(D)n(A)-7 b(TE)34
-b(is)f(the)h(Mo)r(di\014ed)f(Julian)g(Date)h(of)f(the)g(observ)-5
-b(ation,)34 b(and)227 1074 y(\(OBSX,OBSY,OBZ\))k(are)f(the)i(Helio)r
-(cen)n(tric-Aries-Ecliptic)d(cartesian)h(co)r(ordinates,)j(in)e
-(metres,)j(of)d(the)227 1174 y(observ)n(er\):)340 1436
-y Fj(\017)45 b Ft(")p Fk(HPCEQ)p Ft(")38 b Fk(\(D)n(A)-7
-b(TE,OBSX,OBSY,OBSZ\):)39 b(Con)n(v)n(ert)f(Heliopro)5
-b(jectiv)n(e-Cartesian)36 b(co)r(ordinates)i(to)427 1536
-y(J2000.0)25 b(equatorial.)340 1669 y Fj(\017)45 b Ft(")p
-Fk(EQHPC)p Ft(")17 b Fk(\(D)n(A)-7 b(TE,OBSX,OBSY,OBSZ\):)18
-b(Con)n(v)n(ert)f(J2000.0)e(equatorial)i(co)r(ordinates)g(to)h
-(Heliopro)5 b(jectiv)n(e-)427 1768 y(Cartesian.)340 1902
-y Fj(\017)45 b Ft(")p Fk(HPREQ)p Ft(")17 b Fk(\(D)n(A)-7
-b(TE,OBSX,OBSY,OBSZ\):)18 b(Con)n(v)n(ert)f(Heliopro)5
-b(jectiv)n(e-Radial)16 b(co)r(ordinates)h(to)h(J2000.0)427
-2001 y(equatorial.)340 2135 y Fj(\017)45 b Ft(")p Fk(EQHPR)p
-Ft(")17 b Fk(\(D)n(A)-7 b(TE,OBSX,OBSY,OBSZ\):)18 b(Con)n(v)n(ert)f
-(J2000.0)f(equatorial)g(co)r(ordinates)h(to)h(Heliopro)5
-b(jectiv)n(e-)427 2234 y(Radial.)340 2368 y Fj(\017)45
-b Ft(")p Fk(HEEQ)p Ft(")26 b Fk(\(D)n(A)-7 b(TE\):)28
-b(Con)n(v)n(ert)e(helio-ecliptic)i(co)r(ordinates)e(to)h(J2000.0)e
-(equatorial.)340 2501 y Fj(\017)45 b Ft(")p Fk(EQHE)p
-Ft(")26 b Fk(\(D)n(A)-7 b(TE\):)28 b(Con)n(v)n(ert)e(J2000.0)f
-(equatorial)h(co)r(ordinates)g(to)i(helio-ecliptic.)340
-2634 y Fj(\017)45 b Ft(")p Fk(H2E)p Ft(")26 b Fk(\(LA)-7
-b(T,DIR)n(UAB\):)30 b(Con)n(v)n(ert)c(horizon)g(co)r(ordinates)g(to)i
-(equatorial.)340 2767 y Fj(\017)45 b Ft(")p Fk(E2H)p
-Ft(")26 b Fk(\(LA)-7 b(T,DIURAB\):)30 b(Con)n(v)n(ert)c(equatorial)g
-(co)r(ordinates)g(to)i(horizon.)227 2930 y(Note,)40 b(the)e
-Ft(")p Fk(H2E)p Ft(")e Fk(and)i Ft(")p Fk(E2H)p Ft(")e
-Fk(con)n(v)n(ersions)f(con)n(v)n(ert)h(b)r(et)n(w)n(een)i(top)r(o)r
-(cen)n(tric)f(horizon)f(co)r(ordinates)g(\(az-)227 3030
-y(im)n(uth,elev)-5 b(ation\),)39 b(and)d(apparen)n(t)f(lo)r(cal)h
-(equatorial)e(co)r(ordinates)h(\(hour)h(angle,declination\).)61
-b(Th)n(us,)38 b(the)227 3129 y(e\013ects)g(of)f(diurnal)g(ab)r
-(erration)f(are)g(tak)n(en)h(in)n(to)g(accoun)n(t)f(in)i(the)f(con)n(v)
-n(ersions)e(but)j(the)g(e\013ects)f(of)g(atmo-)227 3229
-y(spheric)27 b(refraction)g(are)f(not.)p 0 3429 3780
-12 v 0 3560 a FA(AST)p Fe(_)p FA(SLAMAP)1426 3561 y Fd(Create)38
-b(an)g(SlaMap)2870 3560 y FA(AST)p Fe(_)p FA(SLAMAP)0
-3751 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(SlaMap)g(and)h(optionally)f(initialises)g(its)h(attributes.)227
-3876 y(An)19 b(SlaMap)f(is)g(a)g(sp)r(ecialised)g(form)g(of)h(Mapping)f
-(whic)n(h)g(can)g(b)r(e)h(used)f(to)h(represen)n(t)e(a)h(sequence)g(of)
-g(con)n(v)n(ersions)227 3975 y(b)r(et)n(w)n(een)28 b(standard)e
-(celestial)i(\(longitude,)f(latitude\))i(co)r(ordinate)d(systems.)227
-4100 y(When)e(an)e(SlaMap)h(is)g(\014rst)f(created,)h(it)h(simply)f(p)r
-(erforms)f(a)g(unit)i(\(n)n(ull\))f(Mapping)g(on)f(a)h(pair)f(of)h(co)r
-(ordinates.)227 4200 y(Using)39 b(the)g(AST)p Ft(_)p
-Fk(SLAADD)h(routine,)h(a)e(series)f(of)g(co)r(ordinate)g(con)n(v)n
-(ersion)e(steps)j(ma)n(y)f(then)h(b)r(e)h(added,)227
-4299 y(selected)34 b(from)f(those)h(pro)n(vided)e(b)n(y)i(the)g(SLALIB)
-g(P)n(ositional)e(Astronom)n(y)g(Library)h(\(Starlink)g(User)h(Note)227
-4399 y(SUN/67\).)44 b(This)30 b(allo)n(ws)e(m)n(ulti-step)i(con)n(v)n
-(ersions)e(b)r(et)n(w)n(een)i(a)f(v)-5 b(ariet)n(y)29
-b(of)h(celestial)g(co)r(ordinate)e(systems)i(to)227 4499
-y(b)r(e)e(assem)n(bled)f(out)h(of)f(the)h(building)g(blo)r(c)n(ks)f
-(pro)n(vided)f(b)n(y)i(SLALIB.)227 4624 y(F)-7 b(or)18
-b(details)g(of)g(the)h(individual)g(co)r(ordinate)e(con)n(v)n(ersions)f
-(a)n(v)-5 b(ailable,)19 b(see)f(the)h(description)e(of)i(the)f(AST)p
-Ft(_)p Fk(SLAADD)227 4723 y(routine.)0 4874 y Fc(In)m(v)m(o)s(cation:)
-123 b Ft(RESULT)41 b(=)i(AST_SLAMAP\()c(FLAGS,)i(OPTIONS,)f(STATUS)i
-(\))0 5024 y Fc(Argumen)m(ts:)259 5161 y(FLA)m(GS)33
-b(=)f(INTEGER)f(\(Giv)m(en\))427 5261 y Fk(This)d(argumen)n(t)e(is)i
-(reserv)n(ed)e(for)h(future)h(use)f(and)h(should)f(curren)n(tly)g(alw)n
-(a)n(ys)e(b)r(e)j(set)g(to)f(zero.)259 5394 y Fc(OPTIONS)32
-b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))
-427 5494 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h
-(optional)f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f
-(to)g(b)r(e)427 5593 y(used)29 b(for)e(initialising)h(the)h(new)f
-(SlaMap.)39 b(The)28 b(syn)n(tax)f(used)i(is)f(iden)n(tical)g(to)g
-(that)h(for)e(the)i(AST)p Ft(_)p Fk(SET)427 5693 y(routine.)37
-b(If)28 b(no)f(initialisation)g(is)h(required,)e(a)i(blank)f(v)-5
-b(alue)27 b(ma)n(y)g(b)r(e)h(supplied.)p eop end
-%%Page: 341 351
-TeXDict begin 341 350 bop 3643 52 a FG(341)259 351 y
-Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-451 y Fk(The)c(global)e(status.)0 617 y Fc(Returned)32
-b(V)-8 b(alue:)259 757 y(AST)p Ft(_)p Fc(SLAMAP)33 b(=)f(INTEGER)427
-857 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(SlaMap.)0
-1022 y Fc(Notes:)340 1309 y Fj(\017)45 b Fk(The)32 b(Nin)g(and)f(Nout)h
-(attributes)f(\(n)n(um)n(b)r(er)h(of)f(input)i(and)e(output)h(co)r
-(ordinates\))e(for)h(an)h(SlaMap)f(are)427 1408 y(b)r(oth)g(equal)e(to)
-h(2.)44 b(The)30 b(\014rst)g(co)r(ordinate)f(is)h(the)h(celestial)e
-(longitude)h(and)g(the)g(second)g(co)r(ordinate)f(is)427
-1508 y(the)f(celestial)f(latitude.)38 b(All)28 b(co)r(ordinate)e(v)-5
-b(alues)27 b(are)g(in)h(radians.)340 1643 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 1742
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 1945 3780 12 v 0 2076
-a FA(AST)p Fe(_)p FA(SPECADD)1224 2077 y Fd(Add)39 b(a)g(sp)s(ectral)f
-(co)s(ordinate)1251 2190 y(con)m(v)m(ersion)e(to)i(a)h(Sp)s(ecMap)2788
-2076 y FA(AST)p Fe(_)p FA(SPECADD)0 2383 y Fc(Description:)44
-b Fk(This)24 b(routine)g(adds)g(one)g(of)g(the)g(standard)g(sp)r
-(ectral)f(co)r(ordinate)g(system)h(con)n(v)n(ersions)e(listed)i(b)r
-(elo)n(w)227 2483 y(to)k(an)f(existing)g(Sp)r(ecMap.)227
-2609 y(When)j(a)e(Sp)r(ecMap)h(is)g(\014rst)f(created)g(\(using)h(AST)p
-Ft(_)p Fk(SPECMAP\),)f(it)i(simply)f(p)r(erforms)f(a)g(unit)i(\(n)n
-(ull\))f(Map-)227 2709 y(ping.)35 b(By)23 b(using)g(AST)p
-Ft(_)p Fk(SPECADD)g(\(rep)r(eatedly)f(if)i(necessary\),)e(one)g(or)g
-(more)h(co)r(ordinate)e(con)n(v)n(ersion)g(steps)227
-2808 y(ma)n(y)29 b(then)g(b)r(e)h(added,)g(whic)n(h)f(the)g(Sp)r(ecMap)
-h(will)f(p)r(erform)g(in)g(sequence.)41 b(This)29 b(allo)n(ws)f(m)n
-(ulti-step)i(con)n(v)n(er-)227 2908 y(sions)f(b)r(et)n(w)n(een)g(a)g(v)
--5 b(ariet)n(y)28 b(of)h(sp)r(ectral)g(co)r(ordinate)f(systems)g(to)h
-(b)r(e)h(assem)n(bled)e(out)h(of)g(the)h(building)f(blo)r(c)n(ks)227
-3008 y(pro)n(vided)e(b)n(y)g(this)h(class.)227 3134 y(Normally)-7
-b(,)28 b(if)h(a)g(Sp)r(ecMap's)f(In)n(v)n(ert)g(attribute)h(is)f(zero)g
-(\(the)h(default\),)h(then)f(its)g(forw)n(ard)e(transformation)g(is)227
-3234 y(p)r(erformed)18 b(b)n(y)g(carrying)f(out)h(eac)n(h)g(of)g(the)h
-(individual)f(co)r(ordinate)f(con)n(v)n(ersions)f(sp)r(eci\014ed)j(b)n
-(y)f(AST)p Ft(_)p Fk(SPECADD)227 3333 y(in)28 b(the)g(order)e(giv)n(en)
-h(\(i.e.)37 b(with)29 b(the)e(most)h(recen)n(tly)f(added)g(con)n(v)n
-(ersion)e(applied)j(last\).)227 3460 y(This)23 b(order)e(is)h(rev)n
-(ersed)e(if)j(the)g(Sp)r(ecMap's)f(In)n(v)n(ert)g(attribute)g(is)g
-(non-zero)f(\(or)h(if)h(the)f(in)n(v)n(erse)f(transformation)227
-3559 y(is)27 b(requested)f(b)n(y)h(an)n(y)f(other)g(means\))h(and)g
-(eac)n(h)f(individual)h(co)r(ordinate)f(con)n(v)n(ersion)e(is)j(also)f
-(replaced)g(b)n(y)g(its)227 3659 y(o)n(wn)21 b(in)n(v)n(erse.)33
-b(This)22 b(pro)r(cess)e(in)n(v)n(erts)g(the)i(o)n(v)n(erall)d
-(e\013ect)j(of)f(the)h(Sp)r(ecMap.)35 b(In)22 b(this)f(case,)h(the)g
-(\014rst)f(con)n(v)n(ersion)227 3759 y(to)28 b(b)r(e)g(applied)f(w)n
-(ould)g(b)r(e)h(the)g(in)n(v)n(erse)f(of)g(the)h(one)f(most)h(recen)n
-(tly)f(added.)0 3912 y Fc(In)m(v)m(o)s(cation:)123 b
-Ft(CALL)42 b(AST_SPECADD\()c(THIS,)k(CVT,)g(ARGS,)f(STATUS)g(\))0
-4065 y Fc(Argumen)m(ts:)259 4205 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 4305 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Sp)r(ecMap.)259
-4440 y Fc(CVT)k(=)h(CHARA)m(CTER)e Fj(\003)g Fc(\()h
-Fj(\003)g Fc(\))g(\(Giv)m(en\))427 4539 y Fk(A)39 b(c)n(haracter)c
-(string)j(whic)n(h)f(iden)n(ti\014es)i(the)f(sp)r(ectral)f(co)r
-(ordinate)g(con)n(v)n(ersion)f(to)h(b)r(e)i(added)e(to)h(the)427
-4639 y(Sp)r(ecMap.)f(See)28 b(the)g Ft(")p Fk(Av)-5 b(ailable)27
-b(Con)n(v)n(ersions)p Ft(")e Fk(section)i(for)g(details)g(of)h(those)f
-(a)n(v)-5 b(ailable.)259 4774 y Fc(AR)m(GS\()32 b Fj(\003)g
-Fc(\))g(=)g(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427 4873
-y Fk(An)e(arra)n(y)d(con)n(taining)h(argumen)n(t)g(v)-5
-b(alues)28 b(for)g(the)h(sp)r(ectral)f(co)r(ordinate)f(con)n(v)n
-(ersion.)36 b(The)29 b(n)n(um)n(b)r(er)f(of)427 4973
-y(argumen)n(ts)22 b(required,)h(and)g(hence)g(the)g(n)n(um)n(b)r(er)g
-(of)g(arra)n(y)e(elemen)n(ts)h(used,)i(dep)r(ends)g(on)f(the)g(con)n(v)
-n(ersion)427 5073 y(sp)r(eci\014ed)i(\(see)g(the)f Ft(")p
-Fk(Av)-5 b(ailable)24 b(Con)n(v)n(ersions)p Ft(")e Fk(section\).)36
-b(This)24 b(arra)n(y)e(is)j(ignored)e(if)i(no)f(argumen)n(ts)g(are)427
-5172 y(needed.)259 5307 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m
-(en)h(and)g(Returned\))427 5407 y Fk(The)c(global)e(status.)0
-5572 y Fc(Notes:)p eop end
-%%Page: 342 352
-TeXDict begin 342 351 bop 0 52 a FG(342)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(When)37 b(assem)n(bling)e(a)g(m)n(ulti-stage)h(con)n(v)n(ersion,)g
-(it)g(can)g(sometimes)g(b)r(e)g(di\016cult)h(to)f(determine)g(the)427
-451 y(most)31 b(economical)g(con)n(v)n(ersion)e(path.)48
-b(F)-7 b(or)30 b(example,)i(when)g(con)n(v)n(erting)d(b)r(et)n(w)n(een)
-j(reference)e(frames,)427 551 y(con)n(v)n(erting)19 b(\014rst)i(to)f
-(the)i(heliographic)d(reference)h(frame)g(as)g(an)h(in)n(termediate)f
-(stage)g(is)h(often)g(sensible)f(in)427 650 y(form)n(ulating)f(the)i
-(problem,)g(but)g(ma)n(y)e(in)n(tro)r(duce)h(unnecessary)e(extra)i(con)
-n(v)n(ersion)d(steps.)35 b(A)20 b(solution)g(to)427 750
-y(this)h(is)g(to)f(include)h(all)g(the)g(steps)f(whic)n(h)h(are)f
-(\(logically\))g(necessary)-7 b(,)20 b(but)h(then)g(to)g(use)g(AST)p
-Ft(_)p Fk(SIMPLIFY)427 849 y(to)27 b(simplify)h(the)g(resulting)e(Sp)r
-(ecMap.)37 b(The)27 b(simpli\014cation)g(pro)r(cess)f(will)i(eliminate)
-f(an)n(y)g(steps)g(whic)n(h)427 949 y(turn)h(out)g(not)f(to)h(b)r(e)g
-(needed.)340 1078 y Fj(\017)45 b Fk(This)30 b(routine)g(do)r(es)f(not)h
-(c)n(hec)n(k)f(to)h(ensure)f(that)h(the)h(sequence)e(of)h(co)r
-(ordinate)f(con)n(v)n(ersions)e(added)j(to)427 1177 y(a)d(Sp)r(ecMap)h
-(is)g(ph)n(ysically)e(meaningful.)-2 1335 y Fc(Av)-5
-b(ailable)32 b(Con)m(v)m(ersions)n(:)227 1481 y Fk(The)19
-b(follo)n(wing)f(strings)f(\(whic)n(h)i(are)f(case-insensitiv)n(e\))f
-(ma)n(y)h(b)r(e)h(supplied)g(via)f(the)h(CVT)g(argumen)n(t)f(to)h
-(indicate)227 1581 y(whic)n(h)24 b(sp)r(ectral)g(co)r(ordinate)f(con)n
-(v)n(ersion)f(is)i(to)g(b)r(e)g(added)g(to)g(the)h(Sp)r(ecMap.)36
-b(Where)24 b(argumen)n(ts)e(are)h(needed)227 1681 y(b)n(y)28
-b(the)h(con)n(v)n(ersion,)d(they)j(are)e(listed)h(in)h(paren)n(theses.)
-38 b(V)-7 b(alues)28 b(for)f(these)i(argumen)n(ts)e(should)h(b)r(e)g
-(giv)n(en,)g(via)227 1780 y(the)33 b(AR)n(GS)f(arra)n(y)-7
-b(,)31 b(in)h(the)h(order)e(indicated.)50 b(Units)33
-b(and)f(argumen)n(t)f(names)g(are)g(describ)r(ed)h(at)g(the)g(end)h(of)
-227 1880 y(the)28 b(list)g(of)g(con)n(v)n(ersions.)340
-2135 y Fj(\017)45 b Ft(")p Fk(FR)-7 b(TO)n(VL)p Ft(")27
-b Fk(\(RF\):)i(Con)n(v)n(ert)d(frequency)h(to)g(relativistic)g(v)n(elo)
-r(cit)n(y)-7 b(.)340 2263 y Fj(\017)45 b Ft(")p Fk(VL)-7
-b(TOFR)p Ft(")27 b Fk(\(RF\):)i(Con)n(v)n(ert)d(relativistic)h(v)n(elo)
-r(cit)n(y)g(to)g(F)-7 b(requency)g(.)340 2392 y Fj(\017)45
-b Ft(")p Fk(ENTOFR)p Ft(")p Fk(:)36 b(Con)n(v)n(ert)26
-b(energy)h(to)g(frequency)-7 b(.)340 2521 y Fj(\017)45
-b Ft(")p Fk(FR)-7 b(TOEN)p Ft(")p Fk(:)36 b(Con)n(v)n(ert)26
-b(frequency)h(to)h(energy)-7 b(.)340 2649 y Fj(\017)45
-b Ft(")p Fk(WNTOFR)p Ft(")p Fk(:)37 b(Con)n(v)n(ert)26
-b(w)n(a)n(v)n(e)g(n)n(um)n(b)r(er)h(to)h(frequency)-7
-b(.)340 2778 y Fj(\017)45 b Ft(")p Fk(FR)-7 b(TO)n(WN)p
-Ft(")p Fk(:)37 b(Con)n(v)n(ert)26 b(frequency)h(to)g(w)n(a)n(v)n(e)f(n)
-n(um)n(b)r(er.)340 2907 y Fj(\017)45 b Ft(")p Fk(WVTOFR)p
-Ft(")p Fk(:)37 b(Con)n(v)n(ert)26 b(w)n(a)n(v)n(elength)g(\(v)-5
-b(acuum\))28 b(to)g(frequency)-7 b(.)340 3036 y Fj(\017)45
-b Ft(")p Fk(FR)-7 b(TO)n(WV)p Ft(")p Fk(:)37 b(Con)n(v)n(ert)26
-b(frequency)h(to)g(w)n(a)n(v)n(elength)f(\(v)-5 b(acuum\).)340
-3164 y Fj(\017)45 b Ft(")p Fk(A)-9 b(WTOFR)p Ft(")p Fk(:)37
-b(Con)n(v)n(ert)26 b(w)n(a)n(v)n(elength)g(\(air\))h(to)h(frequency)-7
-b(.)340 3293 y Fj(\017)45 b Ft(")p Fk(FR)-7 b(TO)n(A)e(W)p
-Ft(")p Fk(:)36 b(Con)n(v)n(ert)27 b(frequency)g(to)g(w)n(a)n(v)n
-(elength)f(\(air\).)340 3422 y Fj(\017)45 b Ft(")p Fk(VR)-7
-b(TO)n(VL)p Ft(")p Fk(:)36 b(Con)n(v)n(ert)26 b(radio)h(to)g
-(relativistic)g(v)n(elo)r(cit)n(y)-7 b(.)340 3551 y Fj(\017)45
-b Ft(")p Fk(VL)-7 b(TO)n(VR)p Ft(")p Fk(:)36 b(Con)n(v)n(ert)26
-b(relativistic)h(to)h(radio)e(v)n(elo)r(cit)n(y)-7 b(.)340
-3679 y Fj(\017)45 b Ft(")p Fk(V)n(OTO)n(VL)p Ft(")p Fk(:)35
-b(Con)n(v)n(ert)26 b(optical)i(to)f(relativistic)g(v)n(elo)r(cit)n(y)-7
-b(.)340 3808 y Fj(\017)45 b Ft(")p Fk(VL)-7 b(TO)n(V)n(O)p
-Ft(")p Fk(:)35 b(Con)n(v)n(ert)27 b(relativistic)f(to)i(optical)f(v)n
-(elo)r(cit)n(y)-7 b(.)340 3937 y Fj(\017)45 b Ft(")p
-Fk(ZOTO)n(VL)p Ft(")p Fk(:)35 b(Con)n(v)n(ert)26 b(redshift)i(to)g
-(relativistic)e(v)n(elo)r(cit)n(y)-7 b(.)340 4065 y Fj(\017)45
-b Ft(")p Fk(VL)-7 b(TOZO)p Ft(")p Fk(:)35 b(Con)n(v)n(ert)27
-b(relativistic)g(v)n(elo)r(cit)n(y)f(to)i(redshift.)340
-4194 y Fj(\017)45 b Ft(")p Fk(BTTO)n(VL)p Ft(")p Fk(:)36
-b(Con)n(v)n(ert)26 b(b)r(eta)i(factor)e(to)i(relativistic)f(v)n(elo)r
-(cit)n(y)-7 b(.)340 4323 y Fj(\017)45 b Ft(")p Fk(VL)-7
-b(TOBT)p Ft(")p Fk(:)36 b(Con)n(v)n(ert)26 b(relativistic)h(v)n(elo)r
-(cit)n(y)g(to)g(b)r(eta)h(factor.)340 4452 y Fj(\017)45
-b Ft(")p Fk(USF2HL)p Ft(")28 b Fk(\(V)n(OFF,RA,DEC\):)i(Con)n(v)n(ert)d
-(frequency)g(from)h(a)g(user-de\014ned)g(reference)g(frame)g(to)g(he-)
-427 4551 y(lio)r(cen)n(tric.)340 4680 y Fj(\017)45 b
-Ft(")p Fk(HLF2US)p Ft(")31 b Fk(\(V)n(OFF,RA,DEC\):)h(Con)n(v)n(ert)d
-(frequency)i(from)g(helio)r(cen)n(tric)f(reference)g(frame)h(to)g
-(user-)427 4780 y(de\014ned.)340 4908 y Fj(\017)45 b
-Ft(")p Fk(TPF2HL)p Ft(")17 b Fk(\(OBSLON,OBSLA)-7 b(T,OBSAL)g
-(T,EPOCH,RA,DEC\):)17 b(Con)n(v)n(ert)g(frequency)h(from)g(top)r(o)r
-(cen-)427 5008 y(tric)28 b(reference)e(frame)i(to)f(helio)r(cen)n
-(tric.)340 5137 y Fj(\017)45 b Ft(")p Fk(HLF2TP)p Ft(")20
-b Fk(\(OBSLON,OBSLA)-7 b(T,OBSAL)g(T,EPOCH,RA,DEC\):)20
-b(Con)n(v)n(ert)g(frequency)h(from)g(helio-)427 5236
-y(cen)n(tric)27 b(reference)g(frame)g(to)h(top)r(o)r(cen)n(tric.)340
-5365 y Fj(\017)45 b Ft(")p Fk(GEF2HL)p Ft(")24 b Fk(\(EPOCH,RA,DEC\):)h
-(Con)n(v)n(ert)f(frequency)h(from)g(geo)r(cen)n(tric)f(reference)g
-(frame)h(to)g(helio-)427 5465 y(cen)n(tric.)340 5593
-y Fj(\017)45 b Ft(")p Fk(HLF2GE)p Ft(")24 b Fk(\(EPOCH,RA,DEC\):)h(Con)
-n(v)n(ert)f(frequency)h(from)g(helio)r(cen)n(tric)g(reference)f(frame)h
-(to)g(geo-)427 5693 y(cen)n(tric.)p eop end
-%%Page: 343 353
-TeXDict begin 343 352 bop 3643 52 a FG(343)340 351 y
-Fj(\017)45 b Ft(")p Fk(BYF2HL)p Ft(")30 b Fk(\(EPOCH,RA,DEC\):)g(Con)n
-(v)n(ert)f(frequency)h(from)g(barycen)n(tric)f(reference)h(frame)g(to)g
-(he-)427 451 y(lio)r(cen)n(tric.)340 599 y Fj(\017)45
-b Ft(")p Fk(HLF2BY)p Ft(")18 b Fk(\(EPOCH,RA,DEC\):)g(Con)n(v)n(ert)f
-(frequency)h(from)g(helio)r(cen)n(tric)g(reference)f(frame)h(to)g
-(barycen-)427 699 y(tric.)340 847 y Fj(\017)45 b Ft(")p
-Fk(LKF2HL)p Ft(")27 b Fk(\(RA,DEC\):)j(Con)n(v)n(ert)d(frequency)h
-(from)g(kinematic)h(LSR)g(reference)e(frame)i(to)f(helio)r(cen-)427
-947 y(tric.)340 1096 y Fj(\017)45 b Ft(")p Fk(HLF2LK)p
-Ft(")38 b Fk(\(RA,DEC\):)i(Con)n(v)n(ert)d(frequency)i(from)f(helio)r
-(cen)n(tric)g(reference)g(frame)h(to)g(kinematic)427
-1195 y(LSR.)340 1344 y Fj(\017)45 b Ft(")p Fk(LDF2HL)p
-Ft(")27 b Fk(\(RA,DEC\):)g(Con)n(v)n(ert)f(frequency)g(from)h
-(dynamical)f(LSR)h(reference)f(frame)g(to)h(helio)r(cen-)427
-1443 y(tric.)340 1592 y Fj(\017)45 b Ft(")p Fk(HLF2LD)p
-Ft(")37 b Fk(\(RA,DEC\):)h(Con)n(v)n(ert)d(frequency)i(from)f(helio)r
-(cen)n(tric)h(reference)f(frame)g(to)h(dynamical)427
-1691 y(LSR.)340 1840 y Fj(\017)45 b Ft(")p Fk(LGF2HL)p
-Ft(")27 b Fk(\(RA,DEC\):)i(Con)n(v)n(ert)d(frequency)h(from)g(lo)r(cal)
-g(group)g(reference)f(frame)i(to)f(helio)r(cen)n(tric.)340
-1988 y Fj(\017)45 b Ft(")p Fk(HLF2LG)p Ft(")27 b Fk(\(RA,DEC\):)i(Con)n
-(v)n(ert)d(frequency)h(from)g(helio)r(cen)n(tric)g(reference)g(frame)g
-(to)h(lo)r(cal)f(group.)340 2137 y Fj(\017)45 b Ft(")p
-Fk(GLF2HL)p Ft(")27 b Fk(\(RA,DEC\):)i(Con)n(v)n(ert)d(frequency)h
-(from)g(galactic)g(reference)f(frame)h(to)h(helio)r(cen)n(tric.)340
-2285 y Fj(\017)45 b Ft(")p Fk(HLF2GL)p Ft(")27 b Fk(\(RA,DEC\):)i(Con)n
-(v)n(ert)d(frequency)h(from)g(helio)r(cen)n(tric)g(reference)g(frame)g
-(to)h(galactic.)227 2478 y(The)g(units)g(for)f(the)h(v)-5
-b(alues)27 b(pro)r(cessed)g(b)n(y)g(the)h(ab)r(o)n(v)n(e)e(con)n(v)n
-(ersions)f(are)i(as)g(follo)n(ws:)340 2786 y Fj(\017)45
-b Fk(all)28 b(v)n(elo)r(cities:)36 b(metres)27 b(p)r(er)h(second)e(\(p)
-r(ositiv)n(e)i(if)g(the)g(source)e(receeds)h(from)g(the)h(observ)n
-(er\).)340 2935 y Fj(\017)45 b Fk(frequency:)37 b(Hertz.)340
-3083 y Fj(\017)45 b Fk(all)28 b(w)n(a)n(v)n(elengths:)35
-b(metres.)340 3232 y Fj(\017)45 b Fk(energy:)36 b(Joules.)340
-3380 y Fj(\017)45 b Fk(w)n(a)n(v)n(e)26 b(n)n(um)n(b)r(er:)37
-b(cycles)27 b(p)r(er)g(metre.)227 3573 y(The)h(argumen)n(ts)e(used)i
-(in)g(the)g(ab)r(o)n(v)n(e)e(con)n(v)n(ersions)f(are)h(as)h(follo)n
-(ws:)340 3881 y Fj(\017)45 b Fk(RF:)28 b(Rest)g(frequency)f(\(Hz\).)340
-4029 y Fj(\017)45 b Fk(OBSAL)-7 b(T:)28 b(Geo)r(detic)g(altitude)g(of)f
-(observ)n(er)e(\(IA)n(U)k(1975,)c(metres\).)340 4178
-y Fj(\017)45 b Fk(OBSLA)-7 b(T:)28 b(Geo)r(detic)g(latitude)g(of)f
-(observ)n(er)e(\(IA)n(U)k(1975,)c(radians\).)340 4326
-y Fj(\017)45 b Fk(OBSLON:)27 b(Longitude)g(of)h(observ)n(er)d
-(\(radians)i(-)g(p)r(ositiv)n(e)g(east)n(w)n(ards\).)340
-4475 y Fj(\017)45 b Fk(EPOCH:)27 b(Ep)r(o)r(c)n(h)g(of)h(observ)-5
-b(ation)26 b(\(UT1)h(expressed)g(as)g(a)g(Mo)r(di\014ed)h(Julian)f
-(Date\).)340 4623 y Fj(\017)45 b Fk(RA:)28 b(Righ)n(t)g(Ascension)f(of)
-g(source)g(\(radians,)f(FK5)h(J2000\).)340 4772 y Fj(\017)45
-b Fk(DEC:)28 b(Declination)g(of)f(source)f(\(radians,)h(FK5)g(J2000\).)
-340 4920 y Fj(\017)45 b Fk(V)n(OFF:)32 b(V)-7 b(elo)r(cit)n(y)32
-b(of)g(the)g(user-de\014ned)g(reference)f(frame,)h(to)n(w)n(ards)e(the)
-j(p)r(osition)f(giv)n(en)f(b)n(y)g(RA)i(and)427 5020
-y(DEC,)28 b(measured)f(in)g(the)h(helio)r(cen)n(tric)f(reference)g
-(frame.)227 5213 y(If)35 b(the)f(Sp)r(ecMap)g(is)f(3-dimensional,)i
-(source)d(p)r(ositions)h(are)g(pro)n(vided)g(b)n(y)h(the)g(v)-5
-b(alues)33 b(supplied)h(to)g(inputs)227 5313 y(2)f(and)g(3)g(of)h(the)f
-(Sp)r(ecMap)h(\(whic)n(h)f(are)g(simply)g(copied)g(to)g(outputs)h(2)f
-(and)g(3\).)54 b(Note,)35 b(usable)e(v)-5 b(alues)33
-b(are)227 5412 y(still)26 b(required)f(for)g(the)h(RA)f(and)h(DEC)f
-(argumen)n(ts)f(in)i(order)e(to)i(de\014ne)g(the)f Ft(")p
-Fk(user-de\014ned)p Ft(")f Fk(reference)h(frame)227 5512
-y(used)35 b(b)n(y)g(USF2HL)g(and)g(HLF2US.)h(Ho)n(w)n(ev)n(er,)f(AST)p
-Ft(__)p Fk(BAD)g(can)g(b)r(e)g(supplied)h(for)e(RA)i(and)f(DEC)g(if)g
-(the)227 5611 y(user-de\014ned)27 b(reference)g(frame)g(is)h(not)f
-(required.)p eop end
-%%Page: 344 354
-TeXDict begin 344 353 bop 0 52 a FG(344)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(SPECFLUXFRAME)162 b Fd(Create)1860
-581 y(a)1708 681 y(Sp)s(ecFluxF)-10 b(rame)2224 482 y
-FA(AST)p Fe(_)p FA(SPECFLUXFRAME)0 851 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(Sp)r(ecFluxF)-7
-b(rame)28 b(and)f(optionally)g(initialises)g(its)h(attributes.)227
-971 y(A)g(Sp)r(ecFluxF)-7 b(rame)27 b(com)n(bines)g(a)g(Sp)r(ecF)-7
-b(rame)27 b(and)h(a)f(FluxF)-7 b(rame)27 b(in)n(to)g(a)g(single)g
-(2-dimensional)f(comp)r(ound)227 1071 y(F)-7 b(rame.)39
-b(Suc)n(h)28 b(a)g(F)-7 b(rame)28 b(can)f(for)h(instance)g(b)r(e)h
-(used)f(to)g(describ)r(e)g(a)g(Plot)g(of)g(a)g(sp)r(ectrum)g(in)h(whic)
-n(h)f(the)h(\014rst)227 1171 y(axis)e(represen)n(ts)f(sp)r(ectral)h(p)r
-(osition)h(and)f(the)h(second)f(axis)g(represen)n(ts)f(\015ux.)0
-1311 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i
-(AST_SPECFLUXFRAM)o(E\()37 b(FRAME1,)k(FRAME2,)g(OPTIONS,)f(STATUS)h
-(\))0 1451 y Fc(Argumen)m(ts:)259 1579 y(FRAME1)31 b(=)h(INTEGER)f
-(\(Giv)m(en\))427 1678 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Sp)r(ecF)-7
-b(rame.)36 b(This)28 b(will)g(form)f(the)h(\014rst)f(axis)g(in)h(the)g
-(new)g(Sp)r(ecFluxF)-7 b(rame.)259 1802 y Fc(FRAME2)31
-b(=)h(INTEGER)f(\(Giv)m(en\))427 1901 y Fk(P)n(oin)n(ter)f(to)h(the)g
-(FluxF)-7 b(rame.)47 b(This)31 b(will)g(form)g(the)h(second)e(axis)g
-(in)i(the)f(new)g(Sp)r(ecFluxF)-7 b(rame.)48 b(The)427
-2001 y Ft(")p Fk(Sp)r(ecV)-7 b(al)p Ft(")30 b Fk(attribute)h(of)f(this)
-h(FluxF)-7 b(rame)30 b(is)g(not)h(used)f(b)n(y)g(the)h(Sp)r(ecFluxF)-7
-b(rame)31 b(class)e(and)i(so)e(ma)n(y)427 2101 y(b)r(e)f(set)g(to)f
-(AST)p Ft(__)p Fk(BAD)h(when)g(the)g(FluxF)-7 b(rame)27
-b(is)h(created.)259 2224 y Fc(OPTIONS)k(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-2324 y Fk(A)g(c)n(haracter)e(string)h(con)n(taining)f(an)h(optional)g
-(comma-separated)e(list)j(of)g(attribute)f(assignmen)n(ts)g(to)427
-2424 y(b)r(e)e(used)f(for)g(initialising)g(the)h(new)f(Sp)r(ecFluxF)-7
-b(rame.)39 b(The)29 b(syn)n(tax)e(used)h(is)h(iden)n(tical)f(to)g(that)
-g(for)g(the)427 2523 y(AST)p Ft(_)p Fk(SET)f(routine.)259
-2647 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 2747 y Fk(The)c(global)e(status.)0 2899
-y Fc(Returned)32 b(V)-8 b(alue:)259 3027 y(AST)p Ft(_)p
-Fc(SPECFLUXFRAME)32 b(=)h(INTEGER)427 3126 y Fk(A)28
-b(p)r(oin)n(ter)f(to)h(the)g(new)g(Sp)r(ecFluxF)-7 b(rame.)0
-3279 y Fc(Notes:)340 3552 y Fj(\017)45 b Fk(The)25 b(supplied)g(F)-7
-b(rame)24 b(p)r(oin)n(ters)g(are)g(stored)f(directly)-7
-b(,)26 b(rather)d(than)i(b)r(eing)g(used)f(to)h(create)f(deep)g(copies)
-427 3652 y(of)g(the)h(supplied)f(F)-7 b(rames.)35 b(This)24
-b(means)g(that)g(an)n(y)f(subsequen)n(t)h(c)n(hanges)e(made)i(to)g(the)
-g(F)-7 b(rames)24 b(via)f(the)427 3752 y(supplied)28
-b(p)r(oin)n(ters)f(will)h(result)f(in)h(equiv)-5 b(alen)n(t)27
-b(c)n(hanges)g(b)r(eing)g(visible)h(in)g(the)g(Sp)r(ecFluxF)-7
-b(rame.)340 3875 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 3975 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)-2
-4128 y Fc(Status)33 b(Handling)n(:)227 4274 y Fk(The)d(protected)g(in)n
-(terface)f(to)g(this)h(function)h(includes)f(an)f(extra)g(parameter)f
-(at)i(the)g(end)g(of)g(the)g(parameter)227 4373 y(list)37
-b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)
-r(oin)n(ter)g(to)h(the)g(in)n(teger)e(inherited)i(status)f(v)-5
-b(ariable:)54 b Ft(")p Fk(in)n(t)227 4473 y Fj(\003)p
-Fk(status)p Ft(")p Fk(.)p 0 4654 V 0 4785 a FA(AST)p
-Fe(_)p FA(SPECFRAME)1374 4784 y Fd(Create)37 b(a)h(Sp)s(ecF)-10
-b(rame)2594 4785 y FA(AST)p Fe(_)p FA(SPECFRAME)0 4955
-y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g(Sp)r
-(ecF)-7 b(rame)28 b(and)f(optionally)g(initialises)g(its)h(attributes.)
-227 5075 y(A)j(Sp)r(ecF)-7 b(rame)29 b(is)h(a)g(sp)r(ecialised)f(form)h
-(of)g(one-dimensional)e(F)-7 b(rame)30 b(whic)n(h)g(represen)n(ts)e(v)
--5 b(arious)29 b(co)r(ordinate)227 5175 y(systems)23
-b(used)h(to)f(describ)r(e)g(p)r(ositions)g(within)h(an)f
-(electro-magnetic)f(sp)r(ectrum.)35 b(The)24 b(particular)e(co)r
-(ordinate)227 5274 y(system)32 b(to)g(b)r(e)g(used)g(is)g(sp)r
-(eci\014ed)g(b)n(y)f(setting)h(the)g(Sp)r(ecF)-7 b(rame's)32
-b(System)g(attribute)g(\(the)g(default)h(is)f(w)n(a)n(v)n(e-)227
-5374 y(length\))27 b(quali\014ed,)f(as)g(necessary)-7
-b(,)24 b(b)n(y)i(other)g(attributes)g(suc)n(h)g(as)f(the)i(rest)e
-(frequency)-7 b(,)26 b(the)h(standard)e(of)h(rest,)227
-5473 y(the)i(ep)r(o)r(c)n(h)g(of)f(observ)-5 b(ation,)27
-b(etc)g(\(see)h(the)g(description)f(of)g(the)h(System)g(attribute)g
-(for)f(details\).)227 5593 y(By)d(setting)f(a)h(v)-5
-b(alue)23 b(for)h(thr)f(Sp)r(ecOrigin)h(attribute,)g(a)g(Sp)r(ecF)-7
-b(rame)23 b(can)h(b)r(e)g(made)f(to)h(represen)n(t)e(o\013sets)i(from)
-227 5693 y(a)j(giv)n(en)g(sp)r(ectral)g(p)r(osition,)h(rather)e(than)i
-(absolute)p eop end
-%%Page: 345 355
-TeXDict begin 345 354 bop 3643 52 a FG(345)0 351 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(RESULT)41 b(=)i(AST_SPECFRAME\()38
-b(OPTIONS,)i(STATUS)h(\))0 494 y Fc(Argumen)m(ts:)259
-624 y(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 723 y Fk(A)g(c)n(haracter)e(string)h
-(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 823 y(b)r(e)39 b(used)f(for)g
-(initialising)f(the)i(new)f(Sp)r(ecF)-7 b(rame.)69 b(The)38
-b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)g(that)h(for)e(the)427
-923 y(AST)p Ft(_)p Fk(SET)27 b(routine.)37 b(If)28 b(no)f
-(initialisation)g(is)h(required,)f(a)g(blank)g(v)-5 b(alue)28
-b(ma)n(y)e(b)r(e)i(supplied.)259 1049 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 1149
-y Fk(The)c(global)e(status.)0 1304 y Fc(Returned)32 b(V)-8
-b(alue:)259 1434 y(AST)p Ft(_)p Fc(SPECFRAME)31 b(=)h(INTEGER)427
-1533 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(Sp)r(ecF)-7
-b(rame.)0 1688 y Fc(Examples:)227 1822 y Fy(FRAME)47
-b(=)g(AST)p Ft(_)p Fy(SPECFRAME\()d(')j(',)g(STATUS)g(\))427
-1918 y Fk(Creates)36 b(a)g(Sp)r(ecF)-7 b(rame)36 b(to)g(describ)r(e)g
-(the)h(default)g(w)n(a)n(v)n(elength)d(sp)r(ectral)i(co)r(ordinate)g
-(system.)63 b(The)427 2017 y(RestF)-7 b(req)39 b(attribute)g(\(rest)f
-(frequency\))h(is)g(unsp)r(eci\014ed,)j(so)c(it)i(will)f(not)g(b)r(e)g
-(p)r(ossible)f(to)h(align)f(this)427 2117 y(Sp)r(ecF)-7
-b(rame)24 b(with)h(another)e(Sp)r(ecF)-7 b(rame)24 b(on)f(the)i(basis)e
-(of)h(a)g(v)n(elo)r(cit)n(y-based)e(system.)35 b(The)25
-b(standard)e(of)427 2217 y(rest)30 b(is)f(also)g(unsp)r(eci\014ed.)44
-b(This)29 b(means)h(that)g(alignmen)n(t)f(will)h(b)r(e)g(p)r(ossible)g
-(with)g(other)f(Sp)r(ecF)-7 b(rames,)427 2316 y(but)31
-b(no)g(correction)e(will)h(b)r(e)i(made)e(for)g(Doppler)g(shift)i
-(caused)e(b)n(y)g(c)n(hange)f(of)i(rest)f(frame)g(during)g(the)427
-2416 y(alignmen)n(t.)227 2530 y Fy(FRAME)47 b(=)g(AST)p
-Ft(_)p Fy(SPECFRAME\()d('System=VELO,)g(RestFreq=1.0E15,)f
-(StdOfRest=LSRK',)227 2630 y(STATUS)j(\))427 2708 y Fk(Creates)39
-b(a)h(Sp)r(ecF)-7 b(rame)40 b(describing)f(a)h(apparen)n(t)e(radial)h
-(v)n(elo)r(cit)n(y)h(\()p Ft(")p Fk(VELO)p Ft(")p Fk(\))f(axis)g(with)h
-(rest)g(fre-)427 2807 y(quency)35 b(1.0E15)e(Hz)i(\(ab)r(out)g(3000)f
-(Angstroms\),)i(measured)e(in)h(the)h(kinematic)f(Lo)r(cal)f(Standard)h
-(of)427 2907 y(Rest)f(\()p Ft(")p Fk(LSRK)p Ft(")p Fk(\).)56
-b(Since)34 b(the)g(source)f(p)r(osition)h(has)f(not)h(b)r(een)h(sp)r
-(eci\014ed)f(\(using)g(attributes)g(RefRA)427 3007 y(and)c(RefDec\),)i
-(it)f(will)g(only)e(b)r(e)i(p)r(ossible)f(to)g(align)g(this)g(Sp)r(ecF)
--7 b(rame)30 b(with)h(other)f(Sp)r(ecF)-7 b(rames)30
-b(whic)n(h)427 3106 y(are)d(also)f(measured)h(in)h(the)g(LSRK)f
-(standard)g(of)g(rest.)0 3262 y Fc(Notes:)340 3537 y
-Fj(\017)45 b Fk(When)g(con)n(v)n(ersion)c(b)r(et)n(w)n(een)j(t)n(w)n(o)
-e(Sp)r(ecF)-7 b(rames)44 b(is)f(requested)g(\(as)h(when)g(supplying)f
-(Sp)r(ecF)-7 b(rames)427 3637 y(AST)p Ft(_)p Fk(CONVER)g(T\),)36
-b(accoun)n(t)f(will)g(b)r(e)h(tak)n(en)f(of)h(the)g(nature)f(of)h(the)g
-(sp)r(ectral)f(co)r(ordinate)f(systems)427 3737 y(they)f(represen)n(t,)
-g(together)f(with)h(an)n(y)f(qualifying)g(rest)g(frequency)-7
-b(,)34 b(standard)d(of)i(rest,)g(ep)r(o)r(c)n(h)g(v)-5
-b(alues,)427 3836 y(etc.)51 b(The)32 b(AlignSystem)g(and)g
-(AlignStdOfRest)h(attributes)f(will)g(also)f(b)r(e)i(tak)n(en)e(in)n
-(to)h(accoun)n(t.)50 b(The)427 3936 y(results)25 b(will)h(therefore)f
-(fully)h(re\015ect)g(the)g(relationship)f(b)r(et)n(w)n(een)g(p)r
-(ositions)h(measured)f(in)g(the)i(t)n(w)n(o)e(sys-)427
-4036 y(tems.)37 b(In)27 b(addition,)g(an)n(y)f(di\013erence)g(in)h(the)
-g(Unit)h(attributes)f(of)f(the)h(t)n(w)n(o)f(systems)h(will)f(also)g(b)
-r(e)h(tak)n(en)427 4135 y(in)n(to)h(accoun)n(t.)340 4261
-y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f
-(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427
-4361 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g
-(should)f(fail)h(for)f(an)n(y)g(reason.)p 0 4547 3780
-12 v 0 4678 a FA(AST)p Fe(_)p FA(SPECMAP)1418 4677 y
-Fd(Create)37 b(a)i(Sp)s(ecMap)2775 4678 y FA(AST)p Fe(_)p
-FA(SPECMAP)0 4853 y Fc(Description:)44 b Fk(This)28 b(function)g
-(creates)f(a)g(new)g(Sp)r(ecMap)h(and)g(optionally)e(initialises)i(its)
-f(attributes.)227 4974 y(An)e(Sp)r(ecMap)e(is)h(a)f(sp)r(ecialised)h
-(form)f(of)h(Mapping)f(whic)n(h)h(can)f(b)r(e)h(used)g(to)g(represen)n
-(t)e(a)i(sequence)f(of)h(con)n(v)n(er-)227 5074 y(sions)i(b)r(et)n(w)n
-(een)h(standard)e(sp)r(ectral)h(co)r(ordinate)f(systems.)36
-b(This)27 b(includes)g(con)n(v)n(ersions)c(b)r(et)n(w)n(een)k
-(frequency)-7 b(,)227 5173 y(w)n(a)n(v)n(elength,)36
-b(and)f(v)-5 b(arious)34 b(forms)h(of)g(v)n(elo)r(cit)n(y)-7
-b(,)37 b(as)d(w)n(ell)h(as)g(con)n(v)n(ersions)e(b)r(et)n(w)n(een)i
-(di\013eren)n(t)h(standards)e(of)227 5273 y(rest.)227
-5394 y(When)19 b(a)f(Sp)r(ecMap)h(is)f(\014rst)g(created,)i(it)e
-(simply)h(p)r(erforms)e(a)h(unit)h(\(n)n(ull\))h(Mapping.)33
-b(Using)18 b(the)h(AST)p Ft(_)p Fk(SPECADD)227 5494 y(routine,)31
-b(a)g(series)e(of)i(co)r(ordinate)f(con)n(v)n(ersion)e(steps)j(ma)n(y)e
-(then)j(b)r(e)f(added,)g(selected)g(from)f(the)h(list)g(of)g(sup-)227
-5593 y(p)r(orted)k(con)n(v)n(ersions.)57 b(This)35 b(allo)n(ws)f(m)n
-(ulti-step)h(con)n(v)n(ersions)d(b)r(et)n(w)n(een)j(a)g(v)-5
-b(ariet)n(y)34 b(of)h(sp)r(ectral)g(co)r(ordinate)227
-5693 y(systems)27 b(to)h(b)r(e)g(assem)n(bled)f(out)g(of)h(the)g
-(building)g(blo)r(c)n(ks)e(pro)n(vided)h(b)n(y)g(this)h(class.)p
-eop end
-%%Page: 346 356
-TeXDict begin 346 355 bop 0 52 a FG(346)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 351 y Fk(F)-7
-b(or)18 b(details)g(of)g(the)h(individual)g(co)r(ordinate)e(con)n(v)n
-(ersions)f(a)n(v)-5 b(ailable,)19 b(see)f(the)h(description)e(of)i(the)
-f(AST)p Ft(_)p Fk(SPECADD)227 451 y(routine.)227 598
-y(Con)n(v)n(ersions)27 b(are)g(a)n(v)-5 b(ailable)28
-b(to)h(transform)e(b)r(et)n(w)n(een)i(standards)f(of)h(rest.)40
-b(Suc)n(h)29 b(con)n(v)n(ersions)d(need)j(to)f(kno)n(w)227
-698 y(the)23 b(source)e(p)r(osition)i(as)e(an)i(RA)f(and)h(DEC.)f(This)
-h(information)e(can)i(b)r(e)f(supplied)h(in)g(the)g(form)f(of)g
-(parameters)227 797 y(for)27 b(the)g(relev)-5 b(an)n(t)26
-b(con)n(v)n(ersions,)e(in)j(whic)n(h)g(case)f(the)h(Sp)r(ecMap)g(is)f
-(1-dimensional,)g(simply)h(transforming)e(the)227 897
-y(sp)r(ectral)c(axis)g(v)-5 b(alues.)35 b(This)21 b(means)g(that)h(the)
-g(same)f(source)g(p)r(osition)g(will)h(alw)n(a)n(ys)e(b)r(e)i(used)f(b)
-n(y)g(the)h(Sp)r(ecMap.)227 997 y(Ho)n(w)n(ev)n(er,)32
-b(this)h(ma)n(y)f(not)g(b)r(e)h(appropriate)e(for)h(an)h(accurate)e
-(description)h(of)g(a)h(3-D)f(sp)r(ectral)g(cub)r(e,)i(where)227
-1096 y(c)n(hanges)c(of)h(spatial)g(p)r(osition)g(can)g(pro)r(duce)f
-(signi\014can)n(t)h(c)n(hanges)f(in)h(the)h(Doppler)f(shift)g(in)n(tro)
-r(duced)g(when)227 1196 y(transforming)19 b(b)r(et)n(w)n(een)h
-(standards)e(of)i(rest.)34 b(F)-7 b(or)20 b(this)g(situation,)h(a)f
-(3-dimensional)e(Sp)r(ecMap)i(can)g(b)r(e)g(created)227
-1295 y(in)30 b(whic)n(h)g(axes)e(2)h(and)h(3)f(corresp)r(ond)f(to)h
-(the)h(source)e(RA)i(and)g(DEC)f(The)h(Sp)r(ecMap)g(simply)f(copies)g
-(v)-5 b(alues)227 1395 y(for)27 b(axes)g(2)g(and)h(3)f(from)g(input)h
-(to)g(output\).)0 1590 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_SPECMAP\()c(NIN,)j(FLAGS,)f(OPTIONS,)f(STATUS)
-h(\))0 1785 y Fc(Argumen)m(ts:)259 1966 y(NIN)32 b(=)g(INTEGER)f(\(Giv)
-m(en\))427 2066 y Fk(The)22 b(n)n(um)n(b)r(er)g(of)g(inputs)h(to)f(the)
-g(Mapping)g(\(this)h(will)f(also)f(equal)h(the)g(n)n(um)n(b)r(er)g(of)g
-(outputs\).)36 b(This)22 b(v)-5 b(alue)427 2166 y(m)n(ust)33
-b(b)r(e)g(either)f(1)g(or)g(3.)51 b(In)33 b(either)f(case,)h(the)g
-(\014rst)f(input)h(and)g(output)g(corresp)r(oindis)d(the)j(sp)r(ectral)
-427 2265 y(axis.)45 b(F)-7 b(or)30 b(a)g(3-axis)f(Sp)r(ecMap,)j(the)f
-(second)f(and)g(third)h(axes)f(giv)n(e)f(the)i(RA)g(and)g(DEC)f
-(\(J2000)f(FK5\))427 2365 y(of)k(the)g(source.)51 b(This)32
-b(p)r(ositional)g(information)g(is)h(used)f(b)n(y)h(con)n(v)n(ersions)d
-(whic)n(h)i(transform)g(b)r(et)n(w)n(een)427 2464 y(standards)19
-b(of)i(rest,)g(and)f(replaces)f(the)i Ft(")p Fk(RA)p
-Ft(")f Fk(and)g Ft(")p Fk(DEC)p Ft(")f Fk(argumen)n(ts)g(for)h(the)h
-(individual)f(con)n(v)n(ersions)427 2564 y(listed)28
-b(in)g(description)f(of)h(the)g Ft(")p Fk(Sp)r(ecAdd)p
-Ft(")f Fk(routine.)259 2720 y Fc(FLA)m(GS)33 b(=)f(INTEGER)f(\(Giv)m
-(en\))427 2819 y Fk(This)d(argumen)n(t)e(is)i(reserv)n(ed)e(for)h
-(future)h(use)f(and)h(should)f(curren)n(tly)g(alw)n(a)n(ys)e(b)r(e)j
-(set)g(to)f(zero.)259 2975 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-3074 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h(optional)
-f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f(to)g(b)r
-(e)427 3174 y(used)k(for)e(initialising)i(the)f(new)h(Sp)r(ecMap.)36
-b(The)24 b(syn)n(tax)g(used)g(is)g(iden)n(tical)g(to)h(that)f(for)g
-(the)h(AST)p Ft(_)p Fk(SET)427 3274 y(routine.)37 b(If)28
-b(no)f(initialisation)g(is)h(required,)e(a)i(blank)f(v)-5
-b(alue)27 b(ma)n(y)g(b)r(e)h(supplied.)259 3429 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-3529 y Fk(The)c(global)e(status.)0 3736 y Fc(Returned)32
-b(V)-8 b(alue:)259 3918 y(AST)p Ft(_)p Fc(SPECMAP)32
-b(=)g(INTEGER)427 4017 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(Sp)r
-(ecMap.)0 4224 y Fc(Notes:)340 4552 y Fj(\017)45 b Fk(The)32
-b(nature)e(and)i(units)f(of)g(the)h(co)r(ordinate)e(v)-5
-b(alues)31 b(supplied)h(for)e(the)i(\014rst)f(input)h(\(i.e.)49
-b(the)31 b(sp)r(ectral)427 4652 y(input\))23 b(of)e(a)g(Sp)r(ecMap)h(m)
-n(ust)g(b)r(e)g(appropriate)d(to)j(the)g(\014rst)f(con)n(v)n(ersion)e
-(step)j(applied)f(b)n(y)g(the)h(Sp)r(ecMap.)427 4752
-y(F)-7 b(or)19 b(instance,)j(if)e(the)g(\014rst)f(con)n(v)n(ersion)f
-(step)i(is)f Ft(")p Fk(FR)-7 b(TO)n(VL)p Ft(")19 b Fk(\(frequency)h(to)
-f(relativistic)g(v)n(elo)r(cit)n(y\),)i(then)427 4851
-y(the)34 b(co)r(ordinate)e(v)-5 b(alues)32 b(for)h(the)h(\014rst)e
-(input)i(should)f(b)r(e)h(frequency)e(in)i(units)f(of)g(Hz.)54
-b(Similarly)-7 b(,)34 b(the)427 4951 y(nature)k(and)h(units)g(of)f(the)
-h(co)r(ordinate)f(v)-5 b(alues)38 b(returned)g(b)n(y)g(a)h(Sp)r(ecMap)f
-(will)h(b)r(e)g(determined)g(b)n(y)427 5050 y(the)c(last)f(con)n(v)n
-(ersion)e(step)i(applied)g(b)n(y)g(the)h(Sp)r(ecMap.)56
-b(F)-7 b(or)34 b(instance,)h(if)g(the)g(last)f(con)n(v)n(ersion)d(step)
-427 5150 y(is)k Ft(")p Fk(VL)-7 b(TO)n(V)n(O)p Ft(")33
-b Fk(\(relativistic)h(v)n(elo)r(cit)n(y)g(to)g(optical)g(v)n(elo)r(cit)
-n(y\),)i(then)f(the)g(co)r(ordinate)f(v)-5 b(alues)34
-b(for)g(the)427 5250 y(\014rst)29 b(output)g(will)g(b)r(e)g(optical)g
-(v)n(elo)r(cit)n(y)e(in)j(units)f(of)f(metres)h(p)r(er)g(second.)39
-b(See)29 b(the)g(description)f(of)h(the)427 5349 y(AST)p
-Ft(_)p Fk(SPECADD)f(routine)f(for)g(the)h(units)g(exp)r(ected)g(and)g
-(returned)f(b)n(y)g(eac)n(h)g(con)n(v)n(ersion.)340 5505
-y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f
-(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427
-5604 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g
-(should)f(fail)h(for)f(an)n(y)g(reason.)p eop end
-%%Page: 347 357
-TeXDict begin 347 356 bop 3643 52 a FG(347)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(SPHMAP)1439 483 y Fd(Create)38
-b(a)g(SphMap)2855 482 y FA(AST)p Fe(_)p FA(SPHMAP)0 696
-y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(SphMap)h(and)g(optionally)e(initialises)i(its)f(attributes.)227
-833 y(A)21 b(SphMap)g(is)f(a)g(Mapping)h(whic)n(h)f(transforms)f(p)r
-(oin)n(ts)i(from)f(a)g(3-dimensional)f(Cartesian)g(co)r(ordinate)h
-(system)227 933 y(in)n(to)28 b(a)g(2-dimensional)f(spherical)g(co)r
-(ordinate)g(system)h(\(longitude)g(and)g(latitude)g(on)g(a)g(unit)h
-(sphere)e(cen)n(tred)227 1033 y(at)33 b(the)f(origin\).)51
-b(It)33 b(w)n(orks)d(b)n(y)j(regarding)d(the)j(input)g(co)r(ordinates)e
-(as)h(p)r(osition)g(v)n(ectors)f(and)h(\014nding)h(their)227
-1132 y(in)n(tersection)25 b(with)h(the)h(sphere)e(surface.)35
-b(The)26 b(in)n(v)n(erse)e(transformation)g(alw)n(a)n(ys)g(pro)r(duces)
-h(p)r(oin)n(ts)h(whic)n(h)g(are)227 1232 y(a)h(unit)i(distance)e(from)g
-(the)h(origin)f(\(i.e.)37 b(unit)28 b(v)n(ectors\).)0
-1406 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_SPHMAP\()c
-(OPTIONS,)h(STATUS)h(\))0 1580 y Fc(Argumen)m(ts:)259
-1741 y(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 1841 y Fk(A)22 b(c)n(haracter)e
-(string)h(con)n(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g
-(attribute)g(assignmen)n(ts)f(to)g(b)r(e)427 1940 y(used)27
-b(for)f(initialising)g(the)h(new)f(SphMap.)37 b(The)26
-b(syn)n(tax)g(used)g(is)h(iden)n(tical)f(to)g(that)h(for)f(the)h(AST)p
-Ft(_)p Fk(SET)427 2040 y(routine.)259 2185 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-2285 y Fk(The)c(global)e(status.)0 2471 y Fc(Returned)32
-b(V)-8 b(alue:)259 2633 y(AST)p Ft(_)p Fc(SPHMAP)32 b(=)g(INTEGER)427
-2732 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(SphMap.)0
-2919 y Fc(Notes:)340 3226 y Fj(\017)45 b Fk(The)39 b(spherical)f(co)r
-(ordinates)f(are)h(longitude)g(\(p)r(ositiv)n(e)h(an)n(ti-clo)r(c)n
-(kwise)e(lo)r(oking)h(from)g(the)h(p)r(ositiv)n(e)427
-3326 y(latitude)24 b(p)r(ole\))f(and)g(latitude.)36 b(The)23
-b(Cartesian)f(co)r(ordinates)g(are)g(righ)n(t-handed,)h(with)g(the)h(x)
-f(axis)f(\(axis)427 3425 y(1\))28 b(at)f(zero)g(longitude)g(and)h
-(latitude,)g(and)f(the)h(z)g(axis)e(\(axis)i(3\))f(at)g(the)h(p)r
-(ositiv)n(e)g(latitude)g(p)r(ole.)340 3570 y Fj(\017)45
-b Fk(A)n(t)28 b(either)g(p)r(ole,)f(the)h(longitude)g(is)f(set)h(to)f
-(the)h(v)-5 b(alue)28 b(of)f(the)h(P)n(olarLong)d(attribute.)340
-3716 y Fj(\017)45 b Fk(If)28 b(the)f(Cartesian)f(co)r(ordinates)g(are)g
-(all)h(zero,)f(then)h(the)h(longitude)f(and)g(latitude)g(are)f(set)h
-(to)g(the)h(v)-5 b(alue)427 3815 y(AST)p Ft(__)p Fk(BAD.)340
-3960 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e
-(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 4060 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)-2
-4247 y Fc(Status)33 b(Handling)n(:)227 4393 y Fk(The)d(protected)g(in)n
-(terface)f(to)g(this)h(function)h(includes)f(an)f(extra)g(parameter)f
-(at)i(the)g(end)g(of)g(the)g(parameter)227 4492 y(list)37
-b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)
-r(oin)n(ter)g(to)h(the)g(in)n(teger)e(inherited)i(status)f(v)-5
-b(ariable:)54 b Ft(")p Fk(in)n(t)227 4592 y Fj(\003)p
-Fk(status)p Ft(")p Fk(.)-2 4766 y Fc(Status)33 b(Handling)n(:)227
-4912 y Fk(The)d(protected)g(in)n(terface)f(to)g(this)h(function)h
-(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g(the)g
-(parameter)227 5012 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62
-b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)
-e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fk(in)n(t)227
-5111 y Fj(\003)p Fk(status)p Ft(")p Fk(.)-2 5286 y Fc(Status)33
-b(Handling)n(:)227 5432 y Fk(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 5531 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fk(in)n(t)227 5631 y Fj(\003)p Fk(status)p Ft(")p Fk(.)p
-eop end
-%%Page: 348 358
-TeXDict begin 348 357 bop 0 52 a FG(348)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(STCCA)-11 b(T)g(ALOGENTR)g(YLOCA)g(TION)
-2602 500 y Fd(Create)2602 599 y(a)2602 699 y(Stc-)2602
-798 y(Cat-)2602 898 y(a-)2602 998 y(lo-)2602 1097 y(gEn-)2602
-1197 y(try-)2602 1310 y(Lo-)2602 1410 y(ca-)2602 1509
-y(tion)2752 482 y FA(AST)p Fe(_)p FA(STCCA)g(T)g(ALOGENTR)g(YLOCA)g
-(TION)0 1670 y Fc(Description:)44 b Fk(This)39 b(function)g(creates)f
-(a)g(new)h(StcCatalogEn)n(tryLo)r(cation)c(and)k(optionally)f
-(initialises)g(its)h(at-)227 1770 y(tributes.)227 1893
-y(The)20 b(StcCatalogEn)n(tryLo)r(cation)c(class)i(is)h(a)g(sub-class)f
-(of)h(Stc)h(used)f(to)h(describ)r(e)e(the)i(co)n(v)n(erage)c(of)k(the)f
-(datasets)227 1993 y(con)n(tained)27 b(in)h(some)f(V)n(O)g(resource.)
-227 2116 y(See)h(h)n(ttp://hea-www.harv)-5 b(ard.edu/)p
-Fj(\030)p Fk(arots/n)n(v)n(o)o(meta/STC.h)n(tml)0 2263
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_STCCATALOGEN)o
-(TRY)o(LO)o(CAT)o(IO)o(N\()37 b(REGION,)k(NCOORDS,)f(COORDS,)h
-(OPTIONS,)f(STATUS)227 2363 y(\))0 2510 y Fc(Argumen)m(ts:)259
-2644 y(REGION)31 b(=)h(INTEGER)f(\(Giv)m(en\))427 2744
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(encapsulated)f(Region.)259
-2874 y Fc(NCOORDS)k(=)h(INTEGER)f(\(Giv)m(en\))427 2974
-y Fk(The)d(length)g(of)f(the)h(COORDS)g(arra)n(y)-7 b(.)34
-b(Supply)28 b(zero)f(if)h(COORDS)f(should)h(b)r(e)g(ignored.)259
-3105 y Fc(COORDS\()j(NCOORDS)g(\))h(=)g(INTEGER)f(\(Giv)m(en\))427
-3204 y Fk(An)20 b(arra)n(y)c(holding)j(NCOORDS)g(AstKeyMap)f(p)r(oin)n
-(ters)h(\(if)h(NCOORDS)f(is)f(zero,)i(the)g(supplied)f(v)-5
-b(alue)19 b(is)427 3304 y(ignored\).)35 b(Eac)n(h)24
-b(supplied)h(KeyMap)f(describ)r(es)g(the)h(con)n(ten)n(ts)g(of)f(a)h
-(single)f(STC)h Fm(<)p Fk(AstroCo)r(ords)p Fm(>)d Fk(ele-)427
-3403 y(men)n(t,)f(and)d(should)g(ha)n(v)n(e)f(elemen)n(ts)i(with)f(k)n
-(eys)g(giv)n(en)f(b)n(y)i(constan)n(ts)e(AST)p Ft(__)p
-Fk(STCNAME,)h(AST)p Ft(__)p Fk(STCV)-9 b(ALUE,)427 3503
-y(AST)p Ft(__)p Fk(STCERR)n(OR,)21 b(AST)p Ft(__)p Fk(STCRES,)g(AST)p
-Ft(__)p Fk(STCSIZE,)g(AST)p Ft(__)p Fk(STCPIXSZ.)g(An)n(y)h(of)f(these)
-h(ele-)427 3603 y(men)n(ts)d(ma)n(y)e(b)r(e)i(omitted,)i(but)e(no)f
-(other)g(elemen)n(ts)g(should)g(b)r(e)h(included.)34
-b(If)19 b(supplied,)i(the)d(AST)p Ft(__)p Fk(STCNAME)427
-3702 y(elemen)n(t)23 b(should)g(b)r(e)h(a)e(v)n(ector)g(of)h(c)n
-(haracter)e(string)h(p)r(oin)n(ters)h(holding)f(the)i
-Ft(")p Fk(Name)p Ft(")e Fk(item)i(for)e(eac)n(h)g(axis)427
-3802 y(in)34 b(the)g(co)r(ordinate)e(system)i(represen)n(ted)e(b)n(y)h
-(REGION.)g(An)n(y)h(other)f(supplied)h(elemen)n(ts)f(should)g(b)r(e)427
-3902 y(scalar)22 b(elemen)n(ts,)i(eac)n(h)f(holding)g(a)g(p)r(oin)n
-(ter)g(to)g(a)g(Region)f(describing)h(the)h(asso)r(ciated)e(item)i(of)f
-(ancillary)427 4001 y(information)37 b(\(error,)h(resolution,)g(size,)h
-(pixel)f(size)e(or)h(v)-5 b(alue\).)65 b(These)37 b(Regions)f(should)h
-(describ)r(e)g(a)427 4101 y(v)n(olume)27 b(within)i(the)f(co)r
-(ordinate)e(system)h(represen)n(ted)g(b)n(y)g(REGION.)259
-4231 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 4331 y Fk(A)g(c)n(haracter)e(string)
-h(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 4431 y(b)r(e)36
-b(used)e(for)h(initialising)g(the)g(new)g(StcCatalogEn)n(tryLo)r
-(cation.)55 b(The)35 b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)427
-4530 y(that)28 b(for)f(the)h(AST)p Ft(_)p Fk(SET)f(routine.)259
-4661 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 4760 y Fk(The)c(global)e(status.)0 4920
-y Fc(Returned)32 b(V)-8 b(alue:)259 5054 y(AST)p Ft(_)p
-Fc(STCCA)g(T)g(ALOGENTR)g(YLOCA)g(TION)34 b(=)e(INTEGER)427
-5154 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(StcCatalogEn)n(tryLo)r
-(cation.)0 5313 y Fc(Notes:)340 5593 y Fj(\017)45 b Fk(A)27
-b(deep)g(cop)n(y)e(is)h(tak)n(en)g(of)h(the)f(supplied)h(Region.)36
-b(This)26 b(means)g(that)h(an)n(y)f(subsequen)n(t)g(c)n(hanges)f(made)
-427 5693 y(to)j(the)g(encapsulated)f(Region)g(using)g(the)h(supplied)g
-(p)r(oin)n(ter)f(will)h(ha)n(v)n(e)e(no)i(e\013ect)g(on)f(the)h(Stc.)p
-eop end
-%%Page: 349 359
-TeXDict begin 349 358 bop 3643 52 a FG(349)340 351 y
-Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f
-(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427
-451 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g
-(should)f(fail)h(for)f(an)n(y)g(reason.)p 0 637 3780
-12 v 0 768 a FA(AST)p Fe(_)p FA(STCOBSD)l(A)-11 b(T)g(ALOCA)g(TION)2110
-785 y Fd(Create)2110 885 y(a)2110 985 y(StcOb-)2110 1084
-y(s-)2110 1184 y(Dat-)2110 1283 y(aLo-)2110 1383 y(ca-)2110
-1483 y(tion)2260 768 y FA(AST)p Fe(_)p FA(STCOBSD)l(A)g(T)g(ALOCA)g
-(TION)0 1635 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f
-(a)g(new)g(StcObsDataLo)r(cation)g(and)g(optionally)g(initialises)g
-(its)h(attributes.)227 1756 y(The)j(StcObsDataLo)r(cation)e(class)h(is)
-g(a)g(sub-class)f(of)i(Stc)g(used)f(to)g(describ)r(e)h(the)g(co)n(v)n
-(erage)c(of)k(the)f(datasets)227 1856 y(con)n(tained)d(in)h(some)f(V)n
-(O)g(resource.)227 1977 y(See)h(h)n(ttp://hea-www.harv)-5
-b(ard.edu/)p Fj(\030)p Fk(arots/n)n(v)n(o)o(meta/STC.h)n(tml)0
-2120 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i
-(AST_STCOBSDATALO)o(CAT)o(IO)o(N\()37 b(REGION,)k(NCOORDS,)f(COORDS,)h
-(OPTIONS,)f(STATUS)h(\))0 2263 y Fc(Argumen)m(ts:)259
-2393 y(REGION)31 b(=)h(INTEGER)f(\(Giv)m(en\))427 2493
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(encapsulated)f(Region.)259
-2619 y Fc(NCOORDS)k(=)h(INTEGER)f(\(Giv)m(en\))427 2718
-y Fk(The)d(length)g(of)f(the)h(COORDS)g(arra)n(y)-7 b(.)34
-b(Supply)28 b(zero)f(if)h(COORDS)f(should)h(b)r(e)g(ignored.)259
-2845 y Fc(COORDS\()j(NCOORDS)g(\))h(=)g(INTEGER)f(\(Giv)m(en\))427
-2944 y Fk(An)20 b(arra)n(y)c(holding)j(NCOORDS)g(AstKeyMap)f(p)r(oin)n
-(ters)h(\(if)h(NCOORDS)f(is)f(zero,)i(the)g(supplied)f(v)-5
-b(alue)19 b(is)427 3044 y(ignored\).)35 b(Eac)n(h)24
-b(supplied)h(KeyMap)f(describ)r(es)g(the)h(con)n(ten)n(ts)g(of)f(a)h
-(single)f(STC)h Fm(<)p Fk(AstroCo)r(ords)p Fm(>)d Fk(ele-)427
-3144 y(men)n(t,)f(and)d(should)g(ha)n(v)n(e)f(elemen)n(ts)i(with)f(k)n
-(eys)g(giv)n(en)f(b)n(y)i(constan)n(ts)e(AST)p Ft(__)p
-Fk(STCNAME,)h(AST)p Ft(__)p Fk(STCV)-9 b(ALUE,)427 3243
-y(AST)p Ft(__)p Fk(STCERR)n(OR,)21 b(AST)p Ft(__)p Fk(STCRES,)g(AST)p
-Ft(__)p Fk(STCSIZE,)g(AST)p Ft(__)p Fk(STCPIXSZ.)g(An)n(y)h(of)f(these)
-h(ele-)427 3343 y(men)n(ts)d(ma)n(y)e(b)r(e)i(omitted,)i(but)e(no)f
-(other)g(elemen)n(ts)g(should)g(b)r(e)h(included.)34
-b(If)19 b(supplied,)i(the)d(AST)p Ft(__)p Fk(STCNAME)427
-3442 y(elemen)n(t)23 b(should)g(b)r(e)h(a)e(v)n(ector)g(of)h(c)n
-(haracter)e(string)h(p)r(oin)n(ters)h(holding)f(the)i
-Ft(")p Fk(Name)p Ft(")e Fk(item)i(for)e(eac)n(h)g(axis)427
-3542 y(in)34 b(the)g(co)r(ordinate)e(system)i(represen)n(ted)e(b)n(y)h
-(REGION.)g(An)n(y)h(other)f(supplied)h(elemen)n(ts)f(should)g(b)r(e)427
-3642 y(scalar)22 b(elemen)n(ts,)i(eac)n(h)f(holding)g(a)g(p)r(oin)n
-(ter)g(to)g(a)g(Region)f(describing)h(the)h(asso)r(ciated)e(item)i(of)f
-(ancillary)427 3741 y(information)37 b(\(error,)h(resolution,)g(size,)h
-(pixel)f(size)e(or)h(v)-5 b(alue\).)65 b(These)37 b(Regions)f(should)h
-(describ)r(e)g(a)427 3841 y(v)n(olume)27 b(within)i(the)f(co)r
-(ordinate)e(system)h(represen)n(ted)g(b)n(y)g(REGION.)259
-3967 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 4067 y Fk(A)g(c)n(haracter)e(string)
-h(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 4166 y(b)r(e)26
-b(used)e(for)h(initialising)f(the)i(new)f(StcObsDataLo)r(cation.)34
-b(The)25 b(syn)n(tax)f(used)h(is)g(iden)n(tical)f(to)h(that)g(for)427
-4266 y(the)j(AST)p Ft(_)p Fk(SET)f(routine.)259 4392
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 4492 y Fk(The)c(global)e(status.)0 4647 y Fc(Returned)32
-b(V)-8 b(alue:)259 4777 y(AST)p Ft(_)p Fc(STCOBSD)m(A)g(T)g(ALOCA)g
-(TION)34 b(=)e(INTEGER)427 4877 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g
-(new)g(StcObsDataLo)r(cation.)0 5032 y Fc(Notes:)340
-5308 y Fj(\017)45 b Fk(A)27 b(deep)g(cop)n(y)e(is)h(tak)n(en)g(of)h
-(the)f(supplied)h(Region.)36 b(This)26 b(means)g(that)h(an)n(y)f
-(subsequen)n(t)g(c)n(hanges)f(made)427 5408 y(to)j(the)g(encapsulated)f
-(Region)g(using)g(the)h(supplied)g(p)r(oin)n(ter)f(will)h(ha)n(v)n(e)e
-(no)i(e\013ect)g(on)f(the)h(Stc.)340 5534 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 5634
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p eop end
-%%Page: 350 360
-TeXDict begin 350 359 bop 0 52 a FG(350)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(STCRESOUR)l(CEPR)l(OFILE)2089
-500 y Fd(Create)2089 599 y(a)2089 699 y(StcRe-)2089 798
-y(sour-)2089 898 y(ce-)2089 998 y(Pro-)2089 1097 y(\014le)2239
-482 y FA(AST)p Fe(_)p FA(STCRESOUR)l(CEPR)l(OFILE)0 1238
-y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(StcResourcePro\014le)f(and)h(optionally)g(initialises)g(its)h
-(attributes.)227 1356 y(The)36 b(StcResourcePro\014le)d(class)i(is)h(a)
-f(sub-class)f(of)i(Stc)g(used)g(to)f(describ)r(e)h(the)g(co)n(v)n
-(erage)d(of)i(the)h(datasets)227 1456 y(con)n(tained)27
-b(in)h(some)f(V)n(O)g(resource.)227 1574 y(See)h(h)n
-(ttp://hea-www.harv)-5 b(ard.edu/)p Fj(\030)p Fk(arots/n)n(v)n(o)o
-(meta/STC.h)n(tml)0 1711 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_STCRESOURCEP)o(ROF)o(IL)o(E\()37
-b(REGION,)k(NCOORDS,)f(COORDS,)h(OPTIONS,)f(STATUS)h(\))0
-1848 y Fc(Argumen)m(ts:)259 1973 y(REGION)31 b(=)h(INTEGER)f(\(Giv)m
-(en\))427 2072 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(encapsulated)f
-(Region.)259 2193 y Fc(NCOORDS)k(=)h(INTEGER)f(\(Giv)m(en\))427
-2292 y Fk(The)d(length)g(of)f(the)h(COORDS)g(arra)n(y)-7
-b(.)34 b(Supply)28 b(zero)f(if)h(COORDS)f(should)h(b)r(e)g(ignored.)259
-2413 y Fc(COORDS\()j(NCOORDS)g(\))h(=)g(INTEGER)f(\(Giv)m(en\))427
-2512 y Fk(An)20 b(arra)n(y)c(holding)j(NCOORDS)g(AstKeyMap)f(p)r(oin)n
-(ters)h(\(if)h(NCOORDS)f(is)f(zero,)i(the)g(supplied)f(v)-5
-b(alue)19 b(is)427 2612 y(ignored\).)35 b(Eac)n(h)24
-b(supplied)h(KeyMap)f(describ)r(es)g(the)h(con)n(ten)n(ts)g(of)f(a)h
-(single)f(STC)h Fm(<)p Fk(AstroCo)r(ords)p Fm(>)d Fk(ele-)427
-2712 y(men)n(t,)f(and)d(should)g(ha)n(v)n(e)f(elemen)n(ts)i(with)f(k)n
-(eys)g(giv)n(en)f(b)n(y)i(constan)n(ts)e(AST)p Ft(__)p
-Fk(STCNAME,)h(AST)p Ft(__)p Fk(STCV)-9 b(ALUE,)427 2811
-y(AST)p Ft(__)p Fk(STCERR)n(OR,)21 b(AST)p Ft(__)p Fk(STCRES,)g(AST)p
-Ft(__)p Fk(STCSIZE,)g(AST)p Ft(__)p Fk(STCPIXSZ.)g(An)n(y)h(of)f(these)
-h(ele-)427 2911 y(men)n(ts)d(ma)n(y)e(b)r(e)i(omitted,)i(but)e(no)f
-(other)g(elemen)n(ts)g(should)g(b)r(e)h(included.)34
-b(If)19 b(supplied,)i(the)d(AST)p Ft(__)p Fk(STCNAME)427
-3010 y(elemen)n(t)23 b(should)g(b)r(e)h(a)e(v)n(ector)g(of)h(c)n
-(haracter)e(string)h(p)r(oin)n(ters)h(holding)f(the)i
-Ft(")p Fk(Name)p Ft(")e Fk(item)i(for)e(eac)n(h)g(axis)427
-3110 y(in)34 b(the)g(co)r(ordinate)e(system)i(represen)n(ted)e(b)n(y)h
-(REGION.)g(An)n(y)h(other)f(supplied)h(elemen)n(ts)f(should)g(b)r(e)427
-3210 y(scalar)22 b(elemen)n(ts,)i(eac)n(h)f(holding)g(a)g(p)r(oin)n
-(ter)g(to)g(a)g(Region)f(describing)h(the)h(asso)r(ciated)e(item)i(of)f
-(ancillary)427 3309 y(information)37 b(\(error,)h(resolution,)g(size,)h
-(pixel)f(size)e(or)h(v)-5 b(alue\).)65 b(These)37 b(Regions)f(should)h
-(describ)r(e)g(a)427 3409 y(v)n(olume)27 b(within)i(the)f(co)r
-(ordinate)e(system)h(represen)n(ted)g(b)n(y)g(REGION.)259
-3529 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 3629 y Fk(A)g(c)n(haracter)e(string)
-h(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 3729 y(b)r(e)g(used)f(for)g
-(initialising)g(the)g(new)g(StcResourcePro\014le.)43
-b(The)30 b(syn)n(tax)f(used)i(is)f(iden)n(tical)g(to)g(that)g(for)427
-3828 y(the)e(AST)p Ft(_)p Fk(SET)f(routine.)259 3949
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 4048 y Fk(The)c(global)e(status.)0 4198 y Fc(Returned)32
-b(V)-8 b(alue:)259 4322 y(AST)p Ft(_)p Fc(STCRESOUR)m(CEPR)m(OFILE)32
-b(=)g(INTEGER)427 4421 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g
-(StcResourcePro\014le.)0 4571 y Fc(Notes:)340 4841 y
-Fj(\017)45 b Fk(A)27 b(deep)g(cop)n(y)e(is)h(tak)n(en)g(of)h(the)f
-(supplied)h(Region.)36 b(This)26 b(means)g(that)h(an)n(y)f(subsequen)n
-(t)g(c)n(hanges)f(made)427 4941 y(to)j(the)g(encapsulated)f(Region)g
-(using)g(the)h(supplied)g(p)r(oin)n(ter)f(will)h(ha)n(v)n(e)e(no)i
-(e\013ect)g(on)f(the)h(Stc.)340 5061 y Fj(\017)45 b Fk(A)21
-b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 5161
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 5310 y Fc(Status)33
-b(Handling)n(:)227 5456 y Fk(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 5556 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fk(in)n(t)227 5656 y Fj(\003)p Fk(status)p Ft(")p Fk(.)p
-eop end
-%%Page: 351 361
-TeXDict begin 351 360 bop 3643 52 a FG(351)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(STCSCHAN)1379 483 y Fd(Create)37
-b(an)i(StcsChan)2699 482 y FA(AST)p Fe(_)p FA(STCSCHAN)0
-676 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(StcsChan)h(and)f(optionally)g(initialises)g(its)h(attributes.)227
-809 y(A)33 b(StcsChan)f(is)g(a)g(sp)r(ecialised)g(form)g(of)g(Channel)g
-(whic)n(h)g(supp)r(orts)g(STC-S)h(I/O)e(op)r(erations.)50
-b(W)-7 b(riting)32 b(an)227 908 y(Ob)5 b(ject)35 b(to)f(an)g(StcsChan)h
-(\(using)f(AST)p Ft(_)p Fk(WRITE\))h(will,)h(if)f(the)g(Ob)5
-b(ject)35 b(is)f(suitable,)i(generate)d(an)i(STC-S)227
-1008 y(description)24 b(of)g(that)h(Ob)5 b(ject,)25 b(and)f(reading)g
-(from)g(an)g(StcsChan)g(will)h(create)e(a)h(new)h(Ob)5
-b(ject)24 b(from)g(its)h(STC-S)227 1108 y(description.)227
-1241 y(Normally)-7 b(,)40 b(when)e(y)n(ou)f(use)h(an)f(StcsChan,)k(y)n
-(ou)c(should)g(pro)n(vide)g Ft(")p Fk(source)p Ft(")f
-Fk(and)i Ft(")p Fk(sink)p Ft(")e Fk(routines)i(whic)n(h)227
-1340 y(connect)f(it)g(to)f(an)h(external)f(data)g(store)g(b)n(y)g
-(reading)f(and)i(writing)f(the)h(resulting)f(text.)65
-b(These)36 b(routines)227 1440 y(should)k(p)r(erform)f(an)n(y)h(con)n
-(v)n(ersions)d(needed)j(b)r(et)n(w)n(een)g(external)f(c)n(haracter)f
-(enco)r(dings)h(and)h(the)g(in)n(ternal)227 1539 y(ASCI)r(I)33
-b(enco)r(ding.)51 b(If)33 b(no)f(suc)n(h)g(routines)g(are)g(supplied,)i
-(a)e(Channel)g(will)h(read)e(from)h(standard)g(input)h(and)227
-1639 y(write)28 b(to)f(standard)g(output.)0 1805 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(RESULT)41 b(=)i(AST_STCSCHAN\()38 b(SOURCE,)j(SINK,)g
-(OPTIONS,)g(STATUS)g(\))0 1972 y Fc(Argumen)m(ts:)259
-2125 y(SOUR)m(CE)32 b(=)g(SUBR)m(OUTINE)g(\(Giv)m(en\))427
-2225 y Fk(A)g(source)e(routine,)j(whic)n(h)e(is)h(a)f(subroutine)g
-(whic)n(h)g(tak)n(es)g(a)g(single)g(in)n(teger)g(error)e(status)j
-(argumen)n(t.)427 2325 y(This)23 b(routine)e(will)i(b)r(e)g(used)f(b)n
-(y)g(the)g(StcsChan)h(to)f(obtain)g(lines)g(of)g(input)h(text.)36
-b(On)22 b(eac)n(h)f(in)n(v)n(o)r(cation,)h(it)427 2424
-y(should)27 b(read)f(the)i(next)f(input)h(line)g(from)e(some)h
-(external)f(data)h(store,)f(and)h(then)h(return)f(the)g(resulting)427
-2524 y(text)32 b(to)f(the)g(AST)h(library)e(b)n(y)h(calling)f(AST)p
-Ft(_)p Fk(PUTLINE.)h(It)g(should)g(supply)g(a)g(negativ)n(e)f(line)i
-(length)427 2623 y(when)g(there)g(are)f(no)g(more)g(lines)h(to)g(read.)
-48 b(If)33 b(an)e(error)f(o)r(ccurs,)i(it)g(should)g(set)g(its)g(o)n
-(wn)f(error)f(status)427 2723 y(argumen)n(t)d(to)g(an)h(error)d(v)-5
-b(alue)28 b(b)r(efore)f(returning.)427 2844 y(If)g(the)g(n)n(ull)f
-(routine)g(AST)p Ft(_)p Fk(NULL)h(is)f(suppied)h(as)e(the)i(SOUR)n(CE)f
-(v)-5 b(alue,)26 b(the)h(Channel)f(will)g(read)g(from)427
-2943 y(standard)h(input)h(instead.)259 3084 y Fc(SINK)k(=)g(SUBR)m
-(OUTINE)g(\(Giv)m(en\))427 3184 y Fk(A)24 b(sink)f(routine,)h(whic)n(h)
-f(is)g(a)g(subroutine)g(whic)n(h)g(tak)n(es)f(a)h(single)g(in)n(teger)f
-(error)f(status)i(argumen)n(t.)35 b(This)427 3284 y(routine)g(will)g(b)
-r(e)h(used)f(b)n(y)f(the)i(StcsChan)f(to)g(deliv)n(er)f(lines)h(of)g
-(output)g(text.)60 b(On)35 b(eac)n(h)f(in)n(v)n(o)r(cation,)427
-3383 y(it)c(should)f(obtain)h(the)f(next)h(output)g(line)g(from)f(the)h
-(AST)g(library)e(b)n(y)h(calling)g(AST)p Ft(_)p Fk(GETLINE,)g(and)427
-3483 y(then)i(deliv)n(er)f(the)h(resulting)f(text)g(to)h(some)f
-(external)f(data)h(store.)45 b(If)31 b(an)f(error)e(o)r(ccurs,)i(it)h
-(should)g(set)427 3583 y(its)d(o)n(wn)f(error)f(status)h(argumen)n(t)g
-(to)g(an)g(error)f(v)-5 b(alue)27 b(b)r(efore)h(returning.)427
-3703 y(If)41 b(the)g(n)n(ull)f(routine)g(AST)p Ft(_)p
-Fk(NULL)h(is)f(suppied)g(as)g(the)h(SINK)f(v)-5 b(alue,)43
-b(the)e(Channel)f(will)h(write)f(to)427 3803 y(standard)27
-b(output)h(instead.)259 3944 y Fc(OPTIONS)k(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-4044 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h(optional)
-f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f(to)g(b)r
-(e)427 4143 y(used)j(for)f(initialising)h(the)g(new)f(StcsChan.)36
-b(The)24 b(syn)n(tax)e(used)i(is)g(iden)n(tical)f(to)h(that)g(for)f
-(the)h(AST)p Ft(_)p Fk(SET)427 4243 y(routine.)259 4384
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 4484 y Fk(The)c(global)e(status.)0 4663 y Fc(Returned)32
-b(V)-8 b(alue:)259 4816 y(AST)p Ft(_)p Fc(STCSCHAN)32
-b(=)g(INTEGER)427 4916 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g
-(StcsChan.)0 5095 y Fc(Notes:)340 5394 y Fj(\017)45 b
-Fk(The)27 b(names)g(of)g(the)h(routines)e(supplied)i(for)e(the)i(SOUR)n
-(CE)e(and)h(SINK)g(argumen)n(ts)f(should)h(app)r(ear)f(in)427
-5494 y(EXTERNAL)31 b(statemen)n(ts)f(in)h(the)g(F)-7
-b(ortran)30 b(routine)g(whic)n(h)h(in)n(v)n(ok)n(es)e(AST)p
-Ft(_)p Fk(STCSCHAN.)j(Ho)n(w)n(ev)n(er,)427 5593 y(this)k(is)f(not)g
-(generally)f(necessary)f(for)i(the)g(n)n(ull)h(routine)f(AST)p
-Ft(_)p Fk(NULL)g(\(so)g(long)f(as)h(the)h(AST)p Ft(_)p
-Fk(P)-7 b(AR)427 5693 y(include)28 b(\014le)g(has)f(b)r(een)h(used\).)p
-eop end
-%%Page: 352 362
-TeXDict begin 352 361 bop 0 52 a FG(352)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(If)28 b(the)g(external)e(data)h(source)f(or)g(sink)i(uses)e(a)h(c)
-n(haracter)f(enco)r(ding)g(other)h(than)h(ASCI)r(I,)g(the)f(supplied)
-427 451 y(source)i(and)g(sink)g(functions)h(should)f(translate)g(b)r
-(et)n(w)n(een)h(the)f(external)g(c)n(haracter)f(enco)r(ding)h(and)g
-(the)427 551 y(in)n(ternal)e(ASCI)r(I)i(enco)r(ding)e(used)g(b)n(y)h
-(AST.)340 679 y Fj(\017)45 b Fk(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fk(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 778 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)340 906 y Fj(\017)45 b
-Fk(Note)36 b(that)f(the)h(n)n(ull)f(routine)g(AST)p Ft(_)p
-Fk(NULL)h(\(one)f(underscore\))f(is)h(di\013eren)n(t)h(to)f(AST)p
-Ft(__)p Fk(NULL)g(\(t)n(w)n(o)427 1006 y(underscores\),)26
-b(whic)n(h)i(is)f(the)h(n)n(ull)g(Ob)5 b(ject)28 b(p)r(oin)n(ter.)p
-0 1196 3780 12 v 0 1326 a FA(AST)p Fe(_)p FA(STCSEAR)l(CHLOCA)-11
-b(TION)2029 1344 y Fd(Create)2029 1444 y(a)2029 1543
-y(Stc-)2029 1643 y(Searc)m(hLo-)2029 1743 y(ca-)2029
-1842 y(tion)2179 1326 y FA(AST)p Fe(_)p FA(STCSEAR)l(CHLOCA)g(TION)0
-1998 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(StcSearc)n(hLo)r(cation)f(and)i(optionally)e(initialises)i(its)f
-(attributes.)227 2120 y(The)h(StcSearc)n(hLo)r(cation)e(class)g(is)i(a)
-f(sub-class)f(of)i(Stc)g(used)f(to)h(describ)r(e)f(the)h(co)n(v)n
-(erage)d(of)i(a)h(V)n(O)f(query)-7 b(.)227 2243 y(See)28
-b(h)n(ttp://hea-www.harv)-5 b(ard.edu/)p Fj(\030)p Fk(arots/n)n(v)n(o)o
-(meta/STC.h)n(tml)0 2387 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_STCSEARCHLOC)o(ATI)o(ON)o(\()38
-b(REGION,)i(NCOORDS,)g(COORDS,)h(OPTIONS,)f(STATUS)i(\))0
-2532 y Fc(Argumen)m(ts:)259 2664 y(REGION)31 b(=)h(INTEGER)f(\(Giv)m
-(en\))427 2763 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(encapsulated)f
-(Region.)259 2891 y Fc(NCOORDS)k(=)h(INTEGER)f(\(Giv)m(en\))427
-2991 y Fk(The)d(length)g(of)f(the)h(COORDS)g(arra)n(y)-7
-b(.)34 b(Supply)28 b(zero)f(if)h(COORDS)f(should)h(b)r(e)g(ignored.)259
-3119 y Fc(COORDS\()j(NCOORDS)g(\))h(=)g(INTEGER)f(\(Giv)m(en\))427
-3219 y Fk(An)20 b(arra)n(y)c(holding)j(NCOORDS)g(AstKeyMap)f(p)r(oin)n
-(ters)h(\(if)h(NCOORDS)f(is)f(zero,)i(the)g(supplied)f(v)-5
-b(alue)19 b(is)427 3318 y(ignored\).)35 b(Eac)n(h)24
-b(supplied)h(KeyMap)f(describ)r(es)g(the)h(con)n(ten)n(ts)g(of)f(a)h
-(single)f(STC)h Fm(<)p Fk(AstroCo)r(ords)p Fm(>)d Fk(ele-)427
-3418 y(men)n(t,)f(and)d(should)g(ha)n(v)n(e)f(elemen)n(ts)i(with)f(k)n
-(eys)g(giv)n(en)f(b)n(y)i(constan)n(ts)e(AST)p Ft(__)p
-Fk(STCNAME,)h(AST)p Ft(__)p Fk(STCV)-9 b(ALUE,)427 3518
-y(AST)p Ft(__)p Fk(STCERR)n(OR,)21 b(AST)p Ft(__)p Fk(STCRES,)g(AST)p
-Ft(__)p Fk(STCSIZE,)g(AST)p Ft(__)p Fk(STCPIXSZ.)g(An)n(y)h(of)f(these)
-h(ele-)427 3617 y(men)n(ts)d(ma)n(y)e(b)r(e)i(omitted,)i(but)e(no)f
-(other)g(elemen)n(ts)g(should)g(b)r(e)h(included.)34
-b(If)19 b(supplied,)i(the)d(AST)p Ft(__)p Fk(STCNAME)427
-3717 y(elemen)n(t)23 b(should)g(b)r(e)h(a)e(v)n(ector)g(of)h(c)n
-(haracter)e(string)h(p)r(oin)n(ters)h(holding)f(the)i
-Ft(")p Fk(Name)p Ft(")e Fk(item)i(for)e(eac)n(h)g(axis)427
-3816 y(in)34 b(the)g(co)r(ordinate)e(system)i(represen)n(ted)e(b)n(y)h
-(REGION.)g(An)n(y)h(other)f(supplied)h(elemen)n(ts)f(should)g(b)r(e)427
-3916 y(scalar)22 b(elemen)n(ts,)i(eac)n(h)f(holding)g(a)g(p)r(oin)n
-(ter)g(to)g(a)g(Region)f(describing)h(the)h(asso)r(ciated)e(item)i(of)f
-(ancillary)427 4016 y(information)37 b(\(error,)h(resolution,)g(size,)h
-(pixel)f(size)e(or)h(v)-5 b(alue\).)65 b(These)37 b(Regions)f(should)h
-(describ)r(e)g(a)427 4115 y(v)n(olume)27 b(within)i(the)f(co)r
-(ordinate)e(system)h(represen)n(ted)g(b)n(y)g(REGION.)259
-4243 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 4343 y Fk(A)g(c)n(haracter)e(string)
-h(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 4443 y(b)r(e)g(used)g(for)f
-(initialising)g(the)h(new)g(StcSearc)n(hLo)r(cation.)44
-b(The)31 b(syn)n(tax)e(used)i(is)f(iden)n(tical)h(to)f(that)h(for)427
-4542 y(the)d(AST)p Ft(_)p Fk(SET)f(routine.)259 4670
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 4770 y Fk(The)c(global)e(status.)0 4927 y Fc(Returned)32
-b(V)-8 b(alue:)259 5059 y(AST)p Ft(_)p Fc(STCSEAR)m(CHLOCA)g(TION)33
-b(=)f(INTEGER)427 5158 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g
-(StcSearc)n(hLo)r(cation.)0 5316 y Fc(Notes:)340 5593
-y Fj(\017)45 b Fk(A)27 b(deep)g(cop)n(y)e(is)h(tak)n(en)g(of)h(the)f
-(supplied)h(Region.)36 b(This)26 b(means)g(that)h(an)n(y)f(subsequen)n
-(t)g(c)n(hanges)f(made)427 5693 y(to)j(the)g(encapsulated)f(Region)g
-(using)g(the)h(supplied)g(p)r(oin)n(ter)f(will)h(ha)n(v)n(e)e(no)i
-(e\013ect)g(on)f(the)h(Stc.)p eop end
-%%Page: 353 363
-TeXDict begin 353 362 bop 3643 52 a FG(353)340 351 y
-Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f
-(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427
-451 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g
-(should)f(fail)h(for)f(an)n(y)g(reason.)-2 610 y Fc(Status)33
-b(Handling)n(:)227 756 y Fk(The)d(protected)g(in)n(terface)f(to)g(this)
-h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g
-(the)g(parameter)227 856 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62
-b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)
-e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fk(in)n(t)227
-956 y Fj(\003)p Fk(status)p Ft(")p Fk(.)p 0 1150 3780
-12 v 0 1280 a FA(AST)p Fe(_)p FA(STRIPESCAPES)190 b Fd(Remo)m(v)m(e)37
-b(AST)1725 1380 y(escap)s(e)1644 1479 y(sequences)1556
-1594 y(from)h(a)g(string)2421 1280 y FA(AST)p Fe(_)p
-FA(STRIPESCAPES)0 1778 y Fc(Description:)44 b Fk(This)25
-b(function)h(remo)n(v)n(es)d(AST)j(escap)r(e)e(sequences)h(from)f(a)h
-(supplied)g(string,)g(returning)g(the)g(result-)227 1877
-y(ing)32 b(text)g(as)f(the)h(function)g(v)-5 b(alue.)49
-b(The)32 b(b)r(eha)n(viour)e(of)i(this)g(function)g(can)f(b)r(e)h(con)n
-(trolled)f(b)n(y)g(in)n(v)n(oking)f(the)227 1977 y(AST)p
-Ft(_)p Fk(ESCAPES)e(routine,)h(whic)n(h)g(can)g(b)r(e)h(used)f(to)g
-(supress)f(or)g(enable)h(the)g(remo)n(v)-5 b(al)28 b(of)h(escap)r(e)f
-(sequences)227 2077 y(b)n(y)g(this)f(function.)227 2200
-y(AST)33 b(escap)r(e)e(sequences)h(are)f(used)h(b)n(y)f(the)i(Plot)e
-(class)h(to)g(mo)r(dify)g(the)g(app)r(earance)f(and)h(p)r(osition)g(of)
-g(sub-)227 2299 y(strings)27 b(within)h(a)f(plotted)h(text)g(string.)37
-b(See)27 b(the)h Ft(")p Fk(Escap)r(e)p Ft(")e Fk(attribute)i(for)f
-(further)g(information.)0 2446 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_STRIPESCAPES)o(\()38 b(TEXT)k(\))0
-2593 y Fc(Argumen)m(ts:)259 2727 y(TEXT)427 2827 y Fk(The)28
-b(string)f(to)g(b)r(e)h(c)n(hec)n(k)n(ed.)0 2986 y Fc(Returned)k(V)-8
-b(alue:)259 3120 y(AST)p Ft(_)p Fc(STRIPESCAPES)33 b(=)f(CHARA)m(CTER)
-427 3220 y Fk(The)g(mo)r(di\014ed)g(string.)49 b(If)32
-b(the)g(AST)p Ft(_)p Fk(ESCAPES)f(routine)h(has)f(b)r(een)h(called)f
-(indicating)h(that)g(escap)r(e)427 3319 y(sequences)27
-b(should)g(not)h(b)r(e)g(stripp)r(ed,)g(then)g(the)g(supplied)g(string)
-f(is)g(returned)h(without)g(c)n(hange.)p 0 3513 V 0 3644
-a FA(AST)p Fe(_)p FA(SWITCHMAP)1366 3645 y Fd(Create)37
-b(a)i(Switc)m(hMap)2568 3644 y FA(AST)p Fe(_)p FA(SWITCHMAP)0
-3829 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(Switc)n(hMap)h(and)f(optionally)g(initialises)g(its)h(attributes.)227
-3952 y(A)34 b(Switc)n(hMap)e(is)h(a)g(Mapping)f(whic)n(h)h(represen)n
-(ts)f(a)g(set)h(of)g(alternate)f(Mappings,)i(eac)n(h)e(of)h(whic)n(h)g
-(is)g(used)227 4052 y(to)d(transform)f(p)r(ositions)g(within)i(a)e
-(particular)g(region)f(of)i(the)g(input)h(or)e(output)h(co)r(ordinate)f
-(system)g(of)h(the)227 4151 y(Switc)n(hMap.)227 4275
-y(A)k(Switc)n(hMap)e(can)h(encapsulate)f(an)n(y)g(n)n(um)n(b)r(er)h(of)
-g(Mappings,)h(but)f(they)h(m)n(ust)f(all)f(ha)n(v)n(e)g(the)h(same)g(n)
-n(um-)227 4374 y(b)r(er)d(of)g(inputs)h(\(Nin)f(attribute)g(v)-5
-b(alue\))31 b(and)e(the)i(same)e(n)n(um)n(b)r(er)h(of)g(outputs)g
-(\(Nout)g(attribute)g(v)-5 b(alue\).)45 b(The)227 4474
-y(Switc)n(hMap)20 b(itself)h(inherits)f(these)g(same)g(v)-5
-b(alues)20 b(for)f(its)i(Nin)f(and)g(Nout)h(attributes.)34
-b(Eac)n(h)19 b(of)h(these)g(Mappings)227 4573 y(represen)n(ts)33
-b(a)h Ft(")p Fk(route)p Ft(")f Fk(through)h(the)g(switc)n(h,)i(and)e
-(are)g(referred)f(to)h(as)g Ft(")p Fk(route)p Ft(")e
-Fk(Mappings)i(b)r(elo)n(w.)57 b(Eac)n(h)227 4673 y(route)30
-b(Mapping)f(transforms)g(p)r(ositions)h(b)r(et)n(w)n(een)g(the)g(input)
-h(and)f(output)g(co)r(ordinate)f(space)h(of)g(the)g(en)n(tire)227
-4773 y(Switc)n(hMap,)f(but)h(only)e(one)h(Mapping)f(will)h(b)r(e)h
-(used)e(to)h(transform)f(an)n(y)g(giv)n(en)g(p)r(osition.)40
-b(The)29 b(selection)g(of)227 4872 y(the)e(appropriate)e(route)h
-(Mapping)g(to)g(use)g(with)h(an)n(y)f(giv)n(en)f(input)j(p)r(osition)e
-(is)g(made)g(b)n(y)g(another)g(Mapping,)227 4972 y(called)31
-b(the)h Ft(")p Fk(selector)p Ft(")e Fk(Mapping.)48 b(Eac)n(h)30
-b(Switc)n(hMap)i(encapsulates)e(t)n(w)n(o)h(selector)f(Mappings)h(in)h
-(addition)227 5072 y(to)d(its)g(route)f(Mappings;)h(one)g(for)f(use)h
-(with)g(the)g(Switc)n(hMap's)g(forw)n(ard)e(transformation)g(\(called)i
-(the)g Ft(")p Fk(for-)227 5171 y(w)n(ard)24 b(selector)g(Mapping)p
-Ft(")p Fk(\),)i(and)f(one)g(for)f(use)h(with)h(the)g(Switc)n(hMap's)f
-(in)n(v)n(erse)f(transformation)f(\(called)i(the)227
-5271 y Ft(")p Fk(in)n(v)n(erse)f(selector)h(Mapping)p
-Ft(")p Fk(\).)36 b(The)26 b(forw)n(ard)f(selector)g(Mapping)g(m)n(ust)h
-(ha)n(v)n(e)f(the)i(same)e(n)n(um)n(b)r(er)h(of)g(inputs)227
-5370 y(as)k(the)h(route)e(Mappings,)i(but)g(should)f(ha)n(v)n(e)f(only)
-h(one)g(output.)45 b(Lik)n(ewise,)30 b(the)h(in)n(v)n(erse)e(selector)g
-(Mapping)227 5470 y(m)n(ust)f(ha)n(v)n(e)e(the)i(same)f(n)n(um)n(b)r
-(er)h(of)f(outputs)h(as)f(the)h(route)f(Mappings,)g(but)h(should)g(ha)n
-(v)n(e)e(only)h(one)h(input.)227 5593 y(When)40 b(the)g(Switc)n(hMap)f
-(is)h(used)f(to)g(transform)g(a)g(p)r(osition)g(in)h(the)f(forw)n(ard)f
-(direction)h(\(from)h(input)g(to)227 5693 y(output\),)g(eac)n(h)35
-b(supplied)h(input)h(p)r(osition)f(is)h(\014rst)e(transformed)h(b)n(y)f
-(the)i(forw)n(ard)e(transformation)f(of)i(the)p eop end
-%%Page: 354 364
-TeXDict begin 354 363 bop 0 52 a FG(354)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 351 y Fk(forw)n(ard)c
-(selector)g(Mapping.)38 b(This)28 b(pro)r(duces)f(a)h(single)f(output)i
-(v)-5 b(alue)28 b(for)g(eac)n(h)f(input)i(p)r(osition)f(referred)f(to)
-227 451 y(as)j(the)h(selector)e(v)-5 b(alue.)45 b(The)30
-b(nearest)f(in)n(teger)h(to)g(the)g(selector)g(v)-5 b(alue)30
-b(is)g(found,)h(and)f(is)g(used)h(to)f(index)g(the)227
-551 y(arra)n(y)25 b(of)i(route)f(Mappings)g(\(the)i(\014rst)f(supplied)
-g(route)f(Mapping)h(has)f(index)h(1,)g(the)g(second)g(route)f(Mapping)
-227 650 y(has)34 b(index)h(2,)h(etc\).)59 b(If)35 b(the)g(nearest)f(in)
-n(teger)g(to)g(the)h(selector)f(v)-5 b(alue)35 b(is)f(less)h(than)f(1)h
-(or)e(greater)g(than)i(the)227 750 y(n)n(um)n(b)r(er)c(of)f(route)g
-(Mappings,)h(then)h(the)f(Switc)n(hMap)f(output)i(p)r(osition)e(is)h
-(set)f(to)h(a)f(v)-5 b(alue)31 b(of)g(AST)p Ft(__)p Fk(BAD)227
-849 y(on)k(ev)n(ery)g(axis.)59 b(Otherwise,)37 b(the)f(forw)n(ard)e
-(transformation)f(of)j(the)g(selected)f(route)g(Mapping)g(is)g(used)h
-(to)227 949 y(transform)27 b(the)h(supplied)g(input)g(p)r(osition)f(to)
-h(pro)r(duce)f(the)h(Switc)n(hMap)g(output)g(p)r(osition.)227
-1083 y(When)33 b(the)g(Switc)n(hMap)f(is)g(used)g(to)g(transform)f(a)h
-(p)r(osition)g(in)h(the)f(in)n(v)n(erse)f(direction)h(\(from)g
-Ft(")p Fk(output)p Ft(")g Fk(to)227 1182 y Ft(")p Fk(input)p
-Ft(")p Fk(\),)26 b(eac)n(h)f(supplied)g Ft(")p Fk(output)p
-Ft(")g Fk(p)r(osition)g(is)g(\014rst)g(transformed)f(b)n(y)h(the)h(in)n
-(v)n(erse)e(transformation)f(of)i(the)227 1282 y(in)n(v)n(erse)31
-b(selector)f(Mapping.)49 b(This)32 b(pro)r(duces)f(a)g(selector)g(v)-5
-b(alue)31 b(for)g(eac)n(h)g Ft(")p Fk(output)p Ft(")h
-Fk(p)r(osition.)49 b(Again,)32 b(the)227 1382 y(nearest)g(in)n(teger)f
-(to)i(the)g(selector)e(v)-5 b(alue)32 b(is)h(found,)h(and)e(is)g(used)h
-(to)f(index)h(the)g(arra)n(y)d(of)i(route)g(Mappings.)227
-1481 y(If)f(this)f(selector)g(index)g(v)-5 b(alue)30
-b(is)g(within)h(the)g(b)r(ounds)f(of)g(the)h(arra)n(y)d(of)i(route)f
-(Mappings,)i(then)f(the)h(in)n(v)n(erse)227 1581 y(transformation)26
-b(of)i(the)g(selected)f(route)g(Mapping)g(is)g(used)h(to)f(transform)g
-(the)h(supplied)g Ft(")p Fk(output)p Ft(")f Fk(p)r(osition)227
-1680 y(to)32 b(pro)r(duce)f(the)h(Switc)n(hMap)f Ft(")p
-Fk(input)p Ft(")h Fk(p)r(osition.)49 b(If)32 b(the)g(selector)e(index)i
-(v)-5 b(alue)31 b(is)h(outside)f(the)h(b)r(ounds)g(of)227
-1780 y(the)25 b(arra)n(y)e(of)h(route)g(Mappings,)h(then)g(the)g(Switc)
-n(hMap)g Ft(")p Fk(input)p Ft(")f Fk(p)r(osition)h(is)f(set)h(to)f(a)g
-(v)-5 b(alue)25 b(of)g(AST)p Ft(__)p Fk(BAD)227 1880
-y(on)j(ev)n(ery)e(axis.)227 2013 y(In)f(practice,)f(appropriate)e
-(selector)h(Mappings)g(should)h(b)r(e)h(c)n(hosen)e(to)h(asso)r(ciate)f
-(a)g(di\013eren)n(t)h(route)g(Mapping)227 2113 y(with)30
-b(eac)n(h)e(region)g(of)h(co)r(ordinate)f(space.)41 b(Note)30
-b(that)f(the)h(SelectorMap)e(class)g(of)h(Mapping)g(is)g(particularly)
-227 2213 y(appropriate)d(for)h(this)h(purp)r(ose.)227
-2346 y(If)38 b(a)f(comp)r(ound)g(Mapping)g(con)n(tains)f(a)h(Switc)n
-(hMap)g(in)g(series)f(with)i(its)f(o)n(wn)g(in)n(v)n(erse,)h(the)f(com)
-n(bination)227 2446 y(of)31 b(the)h(t)n(w)n(o)f(adjacen)n(t)f(Switc)n
-(hMaps)h(will)h(b)r(e)f(replaced)g(b)n(y)g(a)g(UnitMap)g(when)h(the)g
-(comp)r(ound)f(Mapping)g(is)227 2545 y(simpli\014ed)d(using)g(AST)p
-Ft(_)p Fk(SIMPLIFY.)0 2713 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_SWITCHMAP\()38 b(FSMAP,)j(ISMAP,)g(NROUTE,)g
-(ROUTEMAPS,)e(OPTIONS,)h(STATUS)i(\))0 2881 y Fc(Argumen)m(ts:)259
-3035 y(FSMAP)32 b(=)g(INTEGER)f(\(Giv)m(en\))427 3135
-y Fk(P)n(oin)n(ter)d(to)h(the)g(forw)n(ard)f(selector)g(Mapping.)41
-b(This)29 b(m)n(ust)h(ha)n(v)n(e)d(a)i(de\014ned)h(forw)n(ard)d
-(transformation,)427 3235 y(but)i(need)g(not)f(ha)n(v)n(e)f(a)h
-(de\014ned)h(in)n(v)n(erse)e(transformation.)37 b(It)29
-b(m)n(ust)g(ha)n(v)n(e)e(one)h(output,)h(and)f(the)h(n)n(um-)427
-3334 y(b)r(er)39 b(of)g(inputs)g(m)n(ust)g(matc)n(h)f(the)h(n)n(um)n(b)
-r(er)g(of)f(inputs)i(of)e(eac)n(h)g(of)h(the)g(supplied)g(route)f
-(Mappings.)427 3434 y(AST)p Ft(__)p Fk(NULL)27 b(ma)n(y)f(b)r(e)i
-(supplied,)f(in)g(whic)n(h)g(case)f(the)h(Switc)n(hMap)g(will)g(ha)n(v)
-n(e)f(an)h(unde\014ned)g(forw)n(ard)427 3534 y(Mapping.)259
-3675 y Fc(ISMAP)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 3775
-y Fk(P)n(oin)n(ter)g(to)h(the)h(in)n(v)n(erse)e(selector)g(Mapping.)54
-b(This)34 b(m)n(ust)f(ha)n(v)n(e)f(a)h(de\014ned)h(in)n(v)n(erse)e
-(transformation,)427 3875 y(but)e(need)g(not)g(ha)n(v)n(e)e(a)h
-(de\014ned)h(forw)n(ard)e(transformation.)41 b(It)30
-b(m)n(ust)g(ha)n(v)n(e)e(one)h(input,)i(and)f(the)g(n)n(um-)427
-3974 y(b)r(er)i(of)g(outputs)g(m)n(ust)g(matc)n(h)g(the)g(n)n(um)n(b)r
-(er)g(of)g(outputs)g(of)g(eac)n(h)f(of)h(the)h(supplied)f(route)f
-(Mappings.)427 4074 y(AST)p Ft(__)p Fk(NULL)e(ma)n(y)g(b)r(e)g
-(supplied,)h(in)g(whic)n(h)f(case)f(the)i(Switc)n(hMap)f(will)g(ha)n(v)
-n(e)f(an)h(unde\014ned)h(in)n(v)n(erse)427 4174 y(Mapping.)259
-4316 y Fc(NR)m(OUTE)i(=)g(INTEGER)f(\(Giv)m(en\))427
-4415 y Fk(The)d(n)n(um)n(b)r(er)f(of)h(supplied)g(route)f(Mappings.)259
-4557 y Fc(R)m(OUTEMAPS\()32 b(NR)m(OUTE)g(\))g(=)g(INTEGER)g(\(Giv)m
-(en\))427 4657 y Fk(An)37 b(arra)n(y)d(of)i(p)r(oin)n(ters)f(to)h(the)h
-(route)e(Mappings.)62 b(All)37 b(the)f(supplied)h(route)e(Mappings)h(m)
-n(ust)g(ha)n(v)n(e)427 4756 y(common)23 b(v)-5 b(alues)23
-b(for)g(the)h(Nin)g(and)f(Nout)h(attributes,)g(and)f(these)h(v)-5
-b(alues)23 b(de\014ne)h(the)f(n)n(um)n(b)r(er)h(of)f(inputs)427
-4856 y(and)28 b(outputs)g(of)f(the)h(Switc)n(hMap.)259
-4998 y Fc(OPTIONS)k(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 5098 y Fk(A)g(c)n(haracter)e(string)
-h(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 5197 y(b)r(e)38
-b(used)g(for)f(initialising)g(the)h(new)g(Switc)n(hMap.)66
-b(The)38 b(syn)n(tax)f(used)g(is)h(iden)n(tical)f(to)g(that)h(for)f
-(the)427 5297 y(AST)p Ft(_)p Fk(SET)27 b(routine.)259
-5439 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5538 y Fk(The)c(global)e(status.)0 5718
-y Fc(Returned)32 b(V)-8 b(alue:)p eop end
-%%Page: 355 365
-TeXDict begin 355 364 bop 3643 52 a FG(355)259 351 y
-Fc(AST)p Ft(_)p Fc(SWITCHMAP)32 b(=)g(INTEGER)427 451
-y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(Switc)n(hMap.)0
-661 y Fc(Notes:)340 992 y Fj(\017)45 b Fk(Note)38 b(that)g(the)g(comp)r
-(onen)n(t)f(Mappings)g(supplied)h(are)f(not)g(copied)h(b)n(y)f(AST)p
-Ft(_)p Fk(SWITCHMAP)h(\(the)427 1092 y(new)26 b(Switc)n(hMap)f(simply)g
-(retains)g(a)g(reference)f(to)h(them\).)37 b(They)25
-b(ma)n(y)g(con)n(tin)n(ue)f(to)i(b)r(e)f(used)g(for)g(other)427
-1192 y(purp)r(oses,)37 b(but)f(should)g(not)f(b)r(e)i(deleted.)61
-b(If)36 b(a)f(Switc)n(hMap)h(con)n(taining)e(a)i(cop)n(y)e(of)i(its)g
-(comp)r(onen)n(t)427 1291 y(Mappings)27 b(is)h(required,)e(then)j(a)e
-(cop)n(y)f(of)i(the)g(Switc)n(hMap)g(should)f(b)r(e)h(made)f(using)h
-(AST)p Ft(_)p Fk(COPY.)340 1448 y Fj(\017)45 b Fk(A)21
-b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 1548
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 1796 3780 12 v 0 1926
-a FA(AST)p Fe(_)p FA(TEST)904 1927 y Fd(T)-10 b(est)38
-b(if)g(an)h(Ob)7 b(ject)38 b(attribute)e(v)-7 b(alue)39
-b(is)f(set)3098 1926 y FA(AST)p Fe(_)p FA(TEST)0 2165
-y Fc(Description:)44 b Fk(This)31 b(function)g(returns)f(a)h(logical)e
-(result)i(to)f(indicate)h(whether)f(a)h(v)-5 b(alue)30
-b(has)h(b)r(een)g(explicitly)g(set)227 2264 y(for)c(one)h(of)f(an)g(Ob)
-5 b(ject's)28 b(attributes.)0 2462 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_TEST\()d(THIS,)h(ATTRIB,)g(STATUS)g(\))0
-2660 y Fc(Argumen)m(ts:)259 2845 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 2945 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5
-b(ject.)259 3102 y Fc(A)-8 b(TTRIB)33 b(=)f(CHARA)m(CTER)f
-Fj(\003)h Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-3202 y Fk(A)c(c)n(haracter)e(string)h(con)n(taining)f(the)i(name)g(of)f
-(the)h(attribute)g(to)f(b)r(e)h(tested.)259 3359 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-3458 y Fk(The)c(global)e(status.)0 3669 y Fc(Class)31
-b(Applicabilit)m(y:)259 3854 y(Ob)5 b(ject)427 3953 y
-Fk(This)28 b(routine)f(applies)g(to)h(all)f(Ob)5 b(jects.)0
-4164 y Fc(Returned)32 b(V)-8 b(alue:)259 4349 y(AST)p
-Ft(_)p Fc(TEST)33 b(=)f(LOGICAL)427 4448 y Fk(.TR)n(UE.)20
-b(if)g(a)f(v)-5 b(alue)20 b(has)f(previously)f(b)r(een)i(explicitly)g
-(set)g(for)f(the)h(attribute)g(\(and)g(hasn't)f(b)r(een)h(cleared\),)
-427 4548 y(otherwise)27 b(.F)-9 b(ALSE..)0 4758 y Fc(Notes:)340
-5089 y Fj(\017)45 b Fk(A)n(ttribute)28 b(names)g(are)e(not)i(case)f
-(sensitiv)n(e)g(and)g(ma)n(y)g(b)r(e)h(surrounded)e(b)n(y)i(white)g
-(space.)340 5246 y Fj(\017)45 b Fk(A)28 b(v)-5 b(alue)28
-b(of)f(.F)-9 b(ALSE.)28 b(will)g(b)r(e)g(returned)f(if)h(this)g
-(function)g(is)f(in)n(v)n(ok)n(ed)g(with)h(ST)-7 b(A)g(TUS)28
-b(set)g(to)f(an)h(error)427 5346 y(v)-5 b(alue,)28 b(or)f(if)h(it)g
-(should)f(fail)h(for)f(an)n(y)g(reason.)340 5503 y Fj(\017)45
-b Fk(A)26 b(v)-5 b(alue)25 b(of)h(.F)-9 b(ALSE.)25 b(will)h(also)e(b)r
-(e)i(returned)f(if)g(this)h(function)g(is)f(used)h(to)f(test)h(a)f
-(read-only)e(attribute,)427 5603 y(although)k(no)h(error)d(will)j
-(result.)p eop end
-%%Page: 356 366
-TeXDict begin 356 365 bop 0 52 a FG(356)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(TESTFITS)1136 483 y Fd(See)37
-b(if)g(a)f(named)g(k)m(eyw)m(ord)f(has)i(a)1183 598 y(de\014ned)i(v)-7
-b(alue)39 b(in)f(a)h(FitsChan)2795 482 y FA(AST)p Fe(_)p
-FA(TESTFITS)0 770 y Fc(Description:)44 b Fk(This)31 b(function)h(serc)n
-(hes)e(for)g(a)h(named)g(k)n(eyw)n(ord)e(in)i(a)g(FitsChan.)47
-b(If)31 b(found,)i(and)e(if)g(the)g(k)n(eyw)n(ord)227
-869 y(has)h(a)h(v)-5 b(alue)32 b(asso)r(ciated)f(with)j(it,)g(a)e(.TR)n
-(UE.)g(v)-5 b(alue)33 b(is)g(returned.)51 b(If)33 b(the)g(k)n(eyw)n
-(ord)e(is)h(not)h(found,)h(or)e(if)h(it)227 969 y(do)r(es)28
-b(not)f(ha)n(v)n(e)g(an)g(asso)r(ciated)f(v)-5 b(alue,)28
-b(a)f(.F)-9 b(ALSE.)27 b(v)-5 b(alue)28 b(is)f(returned.)0
-1125 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_TESTFITS\()
-38 b(THIS,)k(NAME,)f(THERE,)g(STATUS)g(\))0 1281 y Fc(Argumen)m(ts:)259
-1424 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 1524
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259 1660
-y Fc(NAME)j(=)h(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f
-Fc(\))h(\(Giv)m(en\))427 1760 y Fk(A)25 b(c)n(haracter)d(string)i(con)n
-(taining)g(the)g(FITS)h(k)n(eyw)n(ord)e(name.)35 b(This)25
-b(ma)n(y)e(b)r(e)i(a)f(complete)h(FITS)f(header)427 1859
-y(card,)k(in)g(whic)n(h)g(case)f(the)h(k)n(eyw)n(ord)e(to)i(use)g(is)g
-(extracted)f(from)g(it.)39 b(No)28 b(more)f(than)h(80)f(c)n(haracters)f
-(are)427 1959 y(read)h(from)g(this)h(string.)259 2095
-y Fc(THERE)j(=)h(LOGICAL)h(\(Returned\))427 2195 y Fk(A)h(v)-5
-b(alue)33 b(of)h(.TR)n(UE.)f(will)h(b)r(e)g(returned)f(if)h(the)g(k)n
-(eyw)n(ord)d(w)n(as)i(found)h(in)f(the)h(header,)g(and)g(.F)-9
-b(ALSE.)427 2294 y(otherwise.)35 b(This)24 b(parameter)e(allo)n(ws)h(a)
-h(distinction)g(to)g(b)r(e)g(made)g(b)r(et)n(w)n(een)g(the)g(case)f
-(where)h(a)f(k)n(eyw)n(ord)427 2394 y(is)28 b(not)f(presen)n(t,)g(and)h
-(the)g(case)f(where)g(a)g(k)n(eyw)n(ord)e(is)j(presen)n(t)f(but)h(has)f
-(no)h(asso)r(ciated)e(v)-5 b(alue.)259 2530 y Fc(ST)d(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 2630
-y Fk(The)c(global)e(status.)0 2798 y Fc(Returned)32 b(V)-8
-b(alue:)259 2942 y(AST)p Ft(_)p Fc(TESTFITS)33 b(=)g(LOGICAL)427
-3041 y Fk(A)28 b(v)-5 b(alue)27 b(of)g(zero)f(.F)-9 b(ALSE.)28
-b(is)f(returned)g(if)g(the)h(k)n(eyw)n(ord)d(w)n(as)i(not)g(found)g(in)
-h(the)f(FitsChan)h(or)e(has)h(no)427 3141 y(asso)r(ciated)g(v)-5
-b(alue.)36 b(Otherwise,)27 b(a)g(v)-5 b(alue)28 b(of)f(.TR)n(UE.)h(is)f
-(returned.)0 3309 y Fc(Notes:)340 3599 y Fj(\017)45 b
-Fk(The)28 b(curren)n(t)f(card)f(is)i(left)g(unc)n(hanged)f(b)n(y)g
-(this)h(function.)340 3735 y Fj(\017)45 b Fk(The)27 b(card)e(follo)n
-(wing)h(the)h(curren)n(t)e(card)h(is)g(c)n(hec)n(k)n(ed)f(\014rst.)37
-b(If)27 b(this)f(is)h(not)f(the)h(required)e(card,)h(then)h(the)427
-3834 y(rest)21 b(of)h(the)g(FitsChan)g(is)f(searc)n(hed,)h(starting)e
-(with)j(the)f(\014rst)f(card)g(added)g(to)h(the)g(FitsChan.)35
-b(Therefore)427 3934 y(cards)24 b(should)g(b)r(e)h(accessed)e(in)i(the)
-g(order)e(they)i(are)f(stored)f(in)i(the)g(FitsChan)g(\(if)g(p)r
-(ossible\))g(as)f(this)g(will)427 4034 y(minimise)k(the)g(time)g(sp)r
-(en)n(t)g(searc)n(hing)e(for)h(cards.)340 4170 y Fj(\017)45
-b Fk(An)28 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)h(the)g(k)n(eyw)n
-(ord)d(name)j(do)r(es)f(not)h(conform)e(to)i(FITS)g(requiremen)n(ts.)
-340 4306 y Fj(\017)45 b Fk(.F)-9 b(ALSE.)26 b(is)g(returned)g(as)f(the)
-i(function)f(v)-5 b(alue)26 b(if)h(an)f(error)e(has)h(already)g(o)r
-(ccurred,)g(or)g(if)i(this)f(function)427 4406 y(should)i(fail)f(for)g
-(an)n(y)g(reason.)p 0 4612 V 0 4742 a FA(AST)p Fe(_)p
-FA(TEXT)1150 4743 y Fd(Dra)m(w)37 b(a)i(text)f(string)f(for)h(a)h(Plot)
-3071 4742 y FA(AST)p Fe(_)p FA(TEXT)0 4939 y Fc(Description:)44
-b Fk(This)38 b(function)g(dra)n(ws)e(a)i(string)f(of)g(text)h(at)g(a)f
-(p)r(osition)g(sp)r(eci\014ed)h(in)g(the)g(ph)n(ysical)f(co)r(ordinate)
-227 5038 y(system)e(of)h(a)e(Plot.)60 b(The)35 b(ph)n(ysical)f(p)r
-(osition)i(is)f(transformed)f(in)n(to)h(graphical)f(co)r(ordinates)f
-(to)j(determine)227 5138 y(where)27 b(the)h(text)g(should)g(app)r(ear)e
-(within)j(the)f(plotting)f(area.)0 5294 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_TEXT\()e(THIS,)h(TEXT,)h(POS,)g(UP,)g(JUST,)f
-(STATUS)g(\))0 5450 y Fc(Argumen)m(ts:)259 5593 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 5693 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(Plot.)p eop end
-%%Page: 357 367
-TeXDict begin 357 366 bop 3643 52 a FG(357)259 351 y
-Fc(TEXT)33 b(=)f(CHARA)m(CTER)f Fj(\003)h Fc(\()g Fj(\003)f
-Fc(\))h(\(Giv)m(en\))427 451 y Fk(A)c(c)n(haracter)e(string)h(con)n
-(taining)f(the)i(text)g(to)g(b)r(e)g(dra)n(wn.)36 b(T)-7
-b(railing)26 b(white)i(space)f(is)g(ignored.)259 580
-y Fc(POS\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m
-(en\))427 679 y Fk(An)g(arra)n(y)-7 b(,)30 b(with)h(one)f(elemen)n(t)h
-(for)f(eac)n(h)g(axis)g(of)h(the)g(Plot,)g(giving)e(the)j(ph)n(ysical)d
-(co)r(ordinates)h(of)g(the)427 779 y(p)r(oin)n(t)e(where)f(the)h
-(reference)f(p)r(osition)g(of)h(the)g(text)g(string)f(is)g(to)h(b)r(e)g
-(placed.)259 908 y Fc(UP\()33 b Fj(\003)e Fc(\))h(=)g(REAL)g(\(Giv)m
-(en\))427 1007 y Fk(An)e(arra)n(y)d(holding)i(the)g(comp)r(onen)n(ts)g
-(of)g(a)g(v)n(ector)f(in)h(the)h Ft(")p Fk(up)p Ft(")e
-Fk(direction)h(of)g(the)h(text)f(\(in)h(graphical)427
-1107 y(co)r(ordinates\).)35 b(F)-7 b(or)24 b(example,)g(to)h(get)f
-(horizon)n(tal)f(text,)i(the)g(v)n(ector)e([0.0,1.0])g(should)h(b)r(e)h
-(supplied.)36 b(F)-7 b(or)427 1207 y(a)26 b(basic)f(Plot,)g(2)h(v)-5
-b(alues)25 b(should)h(b)r(e)g(supplied.)36 b(F)-7 b(or)25
-b(a)h(Plot3D,)f(3)g(v)-5 b(alues)26 b(should)f(b)r(e)h(supplied,)h(and)
-e(the)427 1306 y(actual)g(up)g(v)n(ector)f(used)g(is)h(the)h(pro)5
-b(jection)24 b(of)g(the)i(supplied)f(up)g(v)n(ector)f(on)n(to)g(the)h
-(text)h(plane)e(sp)r(eci\014ed)427 1406 y(b)n(y)k(the)g(curren)n(t)e(v)
--5 b(alue)28 b(of)f(the)h(Plot3D's)f(Norm)g(attribute.)259
-1535 y Fc(JUST)33 b(=)f(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 1634 y Fk(A)22 b(c)n(haracter)d
-(string)i(iden)n(tifying)g(the)h(reference)e(p)r(oin)n(t)h(for)g(the)h
-(text)f(b)r(eing)h(dra)n(wn.)33 b(The)22 b(\014rst)f(c)n(haracter)427
-1734 y(in)h(this)f(string)g(iden)n(ti\014es)g(the)h(reference)f(p)r
-(osition)g(in)g(the)h Ft(")p Fk(up)p Ft(")f Fk(direction)g(and)g(ma)n
-(y)f(b)r(e)i Ft(")p Fk(B)p Ft(")e Fk(\(baseline\),)427
-1834 y Ft(")p Fk(C)p Ft(")32 b Fk(\(cen)n(tre\),)i Ft(")p
-Fk(T)p Ft(")e Fk(\(top\))i(or)e Ft(")p Fk(M)p Ft(")g
-Fk(\(b)r(ottom\).)53 b(The)33 b(second)f(c)n(haracter)f(iden)n
-(ti\014es)i(the)g(side-to-side)427 1933 y(reference)e(p)r(osition)h
-(and)g(ma)n(y)f(b)r(e)h Ft(")p Fk(L)p Ft(")f Fk(\(left\),)j
-Ft(")p Fk(C)p Ft(")d Fk(\(cen)n(tre\))h(or)f Ft(")p Fk(R)p
-Ft(")g Fk(\(righ)n(t)h(\).)50 b(The)32 b(string)f(is)h(case-)427
-2033 y(insensitiv)n(e,)c(and)f(only)g(the)h(\014rst)f(t)n(w)n(o)g(c)n
-(haracters)f(are)g(signi\014can)n(t.)427 2147 y(F)-7
-b(or)35 b(example,)i(a)d(v)-5 b(alue)35 b(of)g Ft(")p
-Fk(BL)p Ft(")g Fk(means)f(that)i(the)f(left)h(end)g(of)f(the)g
-(baseline)g(of)g(the)h(original)d(\(un-)427 2247 y(rotated\))27
-b(text)h(is)g(to)f(b)r(e)h(dra)n(wn)f(at)g(the)h(p)r(osition)g(giv)n
-(en)f(b)n(y)g(POS.)259 2376 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f
-(\(Giv)m(en)h(and)g(Returned\))427 2475 y Fk(The)c(global)e(status.)0
-2633 y Fc(Notes:)340 2912 y Fj(\017)45 b Fk(The)34 b(Plot3D)e(class)g
-(curren)n(tly)h(do)r(es)g(not)g(in)n(terpret)g(graphical)e(escap)r(e)i
-(sequences)f(con)n(tained)h(within)427 3011 y(text)28
-b(displa)n(y)n(ed)f(using)g(this)h(metho)r(d.)340 3140
-y Fj(\017)45 b Fk(T)-7 b(ext)27 b(is)f(not)g(dra)n(wn)f(at)h(p)r
-(ositions)g(whic)n(h)g(ha)n(v)n(e)f(an)n(y)g(co)r(ordinate)h(equal)f
-(to)h(the)h(v)-5 b(alue)26 b(AST)p Ft(__)p Fk(BAD)g(\(or)427
-3240 y(where)k(the)g(transformation)f(in)n(to)h(graphical)f(co)r
-(ordinates)f(yields)i(co)r(ordinates)f(con)n(taining)g(the)i(v)-5
-b(alue)427 3339 y(AST)p Ft(__)p Fk(BAD\).)340 3468 y
-Fj(\017)45 b Fk(If)28 b(the)g(plotting)g(p)r(osition)f(is)h(clipp)r(ed)
-g(\(see)g(AST)p Ft(_)p Fk(CLIP\),)f(then)h(no)f(text)h(is)g(dra)n(wn.)
-340 3597 y Fj(\017)45 b Fk(An)40 b(error)d(results)i(if)g(the)h(base)e
-(F)-7 b(rame)39 b(of)g(the)g(Plot)g(is)g(not)g(2-dimensional)f(or)g
-(\(for)h(a)g(Plot3D\))f(3-)427 3697 y(dimensional.)340
-3825 y Fj(\017)45 b Fk(An)30 b(error)d(also)g(results)i(if)g(the)g
-(transformation)f(b)r(et)n(w)n(een)h(the)g(curren)n(t)f(and)h(base)f(F)
--7 b(rames)28 b(of)h(the)g(Plot)427 3925 y(is)f(not)f(de\014ned)h
-(\(i.e.)38 b(the)28 b(Plot's)e(T)-7 b(ranIn)n(v)n(erse)26
-b(attribute)h(is)h(zero\).)p 0 4116 3780 12 v 0 4247
-a FA(AST)p Fe(_)p FA(TIMEADD)1311 4248 y Fd(Add)39 b(a)f(time)g(co)s
-(ordinate)1236 4348 y(con)m(v)m(ersion)f(to)h(a)g(TimeMap)2781
-4247 y FA(AST)p Fe(_)p FA(TIMEADD)0 4528 y Fc(Description:)44
-b Fk(This)26 b(routine)g(adds)g(one)f(of)h(the)h(standard)e(time)i(co)r
-(ordinate)d(system)i(con)n(v)n(ersions)e(listed)i(b)r(elo)n(w)g(to)227
-4628 y(an)i(existing)f(TimeMap.)227 4751 y(When)h(a)f(TimeMap)g(is)g
-(\014rst)g(created)f(\(using)h(AST)p Ft(_)p Fk(TIMEMAP\),)g(it)g
-(simply)g(p)r(erforms)g(a)g(unit)g(\(n)n(ull\))h(Map-)227
-4850 y(ping.)35 b(By)23 b(using)f(AST)p Ft(_)p Fk(TIMEADD)h(\(rep)r
-(eatedly)f(if)h(necessary\),)g(one)f(or)f(more)h(co)r(ordinate)g(con)n
-(v)n(ersion)e(steps)227 4950 y(ma)n(y)27 b(then)i(b)r(e)f(added,)g
-(whic)n(h)g(the)g(TimeMap)g(will)g(p)r(erform)g(in)g(sequence.)37
-b(This)28 b(allo)n(ws)f(m)n(ulti-step)h(con)n(v)n(er-)227
-5049 y(sions)37 b(b)r(et)n(w)n(een)g(a)g(v)-5 b(ariet)n(y)37
-b(of)g(time)h(co)r(ordinate)e(systems)h(to)g(b)r(e)h(assem)n(bled)e
-(out)i(of)f(the)h(building)f(blo)r(c)n(ks)227 5149 y(pro)n(vided)27
-b(b)n(y)g(this)h(class.)227 5272 y(Normally)-7 b(,)27
-b(if)g(a)g(TimeMap's)g(In)n(v)n(ert)f(attribute)i(is)f(zero)f(\(the)i
-(default\),)g(then)f(its)h(forw)n(ard)d(transformation)h(is)227
-5371 y(p)r(erformed)18 b(b)n(y)g(carrying)f(out)h(eac)n(h)g(of)g(the)h
-(individual)f(co)r(ordinate)f(con)n(v)n(ersions)f(sp)r(eci\014ed)j(b)n
-(y)f(AST)p Ft(_)p Fk(TIMEADD)227 5471 y(in)28 b(the)g(order)e(giv)n(en)
-h(\(i.e.)37 b(with)29 b(the)e(most)h(recen)n(tly)f(added)g(con)n(v)n
-(ersion)e(applied)j(last\).)227 5593 y(This)21 b(order)f(is)h(rev)n
-(ersed)e(if)i(the)h(TimeMap's)e(In)n(v)n(ert)g(attribute)h(is)g
-(non-zero)f(\(or)g(if)h(the)h(in)n(v)n(erse)d(transformation)227
-5693 y(is)27 b(requested)f(b)n(y)h(an)n(y)f(other)g(means\))h(and)g
-(eac)n(h)f(individual)h(co)r(ordinate)f(con)n(v)n(ersion)e(is)j(also)f
-(replaced)g(b)n(y)g(its)p eop end
-%%Page: 358 368
-TeXDict begin 358 367 bop 0 52 a FG(358)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 351 y Fk(o)n(wn)20
-b(in)n(v)n(erse.)32 b(This)20 b(pro)r(cess)f(in)n(v)n(erts)g(the)h(o)n
-(v)n(erall)e(e\013ect)i(of)g(the)h(TimeMap.)34 b(In)20
-b(this)g(case,)h(the)f(\014rst)g(con)n(v)n(ersion)227
-451 y(to)28 b(b)r(e)g(applied)f(w)n(ould)g(b)r(e)h(the)g(in)n(v)n(erse)
-f(of)g(the)h(one)f(most)h(recen)n(tly)f(added.)0 607
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_TIMEADD\()c(THIS,)k
-(CVT,)g(ARGS,)f(STATUS)g(\))0 764 y Fc(Argumen)m(ts:)259
-908 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 1007 y
-Fk(P)n(oin)n(ter)26 b(to)i(the)g(TimeMap.)259 1144 y
-Fc(CVT)k(=)h(CHARA)m(CTER)e Fj(\003)g Fc(\()h Fj(\003)g
-Fc(\))g(\(Giv)m(en\))427 1243 y Fk(A)19 b(c)n(haracter)d(string)i(whic)
-n(h)g(iden)n(ti\014es)h(the)g(time)f(co)r(ordinate)g(con)n(v)n(ersion)e
-(to)i(b)r(e)h(added)f(to)g(the)h(TimeMap.)427 1343 y(See)28
-b(the)g Ft(")p Fk(Av)-5 b(ailable)27 b(Con)n(v)n(ersions)p
-Ft(")d Fk(section)k(for)f(details)g(of)h(those)f(a)n(v)-5
-b(ailable.)259 1479 y Fc(AR)m(GS\()32 b Fj(\003)g Fc(\))g(=)g(DOUBLE)g
-(PRECISION)f(\(Giv)m(en\))427 1579 y Fk(An)38 b(arra)n(y)d(con)n
-(taining)h(argumen)n(t)g(v)-5 b(alues)36 b(for)h(the)g(time)h(co)r
-(ordinate)e(con)n(v)n(ersion.)63 b(The)37 b(n)n(um)n(b)r(er)g(of)427
-1679 y(argumen)n(ts)22 b(required,)h(and)g(hence)g(the)g(n)n(um)n(b)r
-(er)g(of)g(arra)n(y)e(elemen)n(ts)h(used,)i(dep)r(ends)g(on)f(the)g
-(con)n(v)n(ersion)427 1778 y(sp)r(eci\014ed)i(\(see)g(the)f
-Ft(")p Fk(Av)-5 b(ailable)24 b(Con)n(v)n(ersions)p Ft(")e
-Fk(section\).)36 b(This)24 b(arra)n(y)e(is)j(ignored)e(if)i(no)f
-(argumen)n(ts)g(are)427 1878 y(needed.)259 2014 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-2114 y Fk(The)c(global)e(status.)0 2283 y Fc(Notes:)340
-2573 y Fj(\017)45 b Fk(When)37 b(assem)n(bling)e(a)g(m)n(ulti-stage)h
-(con)n(v)n(ersion,)g(it)g(can)g(sometimes)g(b)r(e)g(di\016cult)h(to)f
-(determine)g(the)427 2672 y(most)g(economical)f(con)n(v)n(ersion)e
-(path.)62 b(A)36 b(solution)g(to)f(this)h(is)g(to)g(include)g(all)g
-(the)g(steps)g(whic)n(h)g(are)427 2772 y(\(logically\))d(necessary)-7
-b(,)34 b(but)g(then)g(to)g(use)g(AST)p Ft(_)p Fk(SIMPLIFY)f(to)h
-(simplify)g(the)g(resulting)g(TimeMap.)427 2871 y(The)28
-b(simpli\014cation)f(pro)r(cess)g(will)h(eliminate)f(an)n(y)g(steps)h
-(whic)n(h)f(turn)h(out)g(not)f(to)h(b)r(e)g(needed.)340
-3008 y Fj(\017)45 b Fk(This)30 b(routine)g(do)r(es)f(not)h(c)n(hec)n(k)
-f(to)h(ensure)f(that)h(the)h(sequence)e(of)h(co)r(ordinate)f(con)n(v)n
-(ersions)e(added)j(to)427 3108 y(a)d(TimeMap)h(is)f(ph)n(ysically)g
-(meaningful.)-2 3277 y Fc(Av)-5 b(ailable)32 b(Con)m(v)m(ersions)n(:)
-227 3423 y Fk(The)19 b(follo)n(wing)f(strings)f(\(whic)n(h)i(are)f
-(case-insensitiv)n(e\))f(ma)n(y)h(b)r(e)h(supplied)g(via)f(the)h(CVT)g
-(argumen)n(t)f(to)h(indicate)227 3522 y(whic)n(h)31 b(time)h(co)r
-(ordinate)e(con)n(v)n(ersion)f(is)i(to)g(b)r(e)g(added)g(to)g(the)g
-(TimeMap.)48 b(Where)31 b(argumen)n(ts)e(are)h(needed)227
-3622 y(b)n(y)e(the)h(con)n(v)n(ersion,)d(they)j(are)e(listed)h(in)h
-(paren)n(theses.)38 b(V)-7 b(alues)28 b(for)f(these)i(argumen)n(ts)e
-(should)h(b)r(e)g(giv)n(en,)g(via)227 3722 y(the)33 b(AR)n(GS)f(arra)n
-(y)-7 b(,)31 b(in)h(the)h(order)e(indicated.)50 b(Units)33
-b(and)f(argumen)n(t)f(names)g(are)g(describ)r(ed)h(at)g(the)g(end)h(of)
-227 3821 y(the)28 b(list)g(of)g(con)n(v)n(ersions,)d(and)i
-Ft(")p Fk(MJD)p Ft(")g Fk(means)g(Mo)r(di\014ed)h(Julian)f(Date.)340
-4093 y Fj(\017)45 b Ft(")p Fk(MJDTOMJD)p Ft(")27 b Fk
-(\(MJDOFF1,MJDOFF2\):)37 b(Con)n(v)n(ert)26 b(MJD)i(from)f(one)g
-(o\013set)h(to)f(another.)340 4229 y Fj(\017)45 b Ft(")p
-Fk(MJDTOJD)p Ft(")27 b Fk(\(MJDOFF,JDOFF\):)h(Con)n(v)n(ert)f(MJD)h(to)
-f(Julian)g(Date.)340 4366 y Fj(\017)45 b Ft(")p Fk(JDTOMJD)p
-Ft(")27 b Fk(\(JDOFF,MJDOFF\):)h(Con)n(v)n(ert)f(Julian)g(Date)h(to)f
-(MJD.)340 4502 y Fj(\017)45 b Ft(")p Fk(MJDTOBEP)p Ft(")26
-b Fk(\(MJDOFF,BEPOFF\):)h(Con)n(v)n(ert)f(MJD)i(to)f(Besselian)g(ep)r
-(o)r(c)n(h.)340 4638 y Fj(\017)45 b Ft(")p Fk(BEPTOMJD)p
-Ft(")26 b Fk(\(BEPOFF,MJDOFF\):)h(Con)n(v)n(ert)f(Besselian)h(ep)r(o)r
-(c)n(h)g(to)h(MJD.)340 4775 y Fj(\017)45 b Ft(")p Fk(MJDTOJEP)p
-Ft(")26 b Fk(\(MJDOFF,JEPOFF\):)h(Con)n(v)n(ert)f(MJD)i(to)f(Julian)g
-(ep)r(o)r(c)n(h.)340 4911 y Fj(\017)45 b Ft(")p Fk(JEPTOMJD)p
-Ft(")26 b Fk(\(JEPOFF,MJDOFF\):)h(Con)n(v)n(ert)f(Julian)h(ep)r(o)r(c)n
-(h)h(to)f(MJD.)340 5048 y Fj(\017)45 b Ft(")p Fk(T)-7
-b(AITOUTC)p Ft(")27 b Fk(\(MJDOFF\):)i(Con)n(v)n(ert)d(a)h(T)-7
-b(AI)28 b(MJD)g(to)f(a)g(UTC)h(MJD.)340 5184 y Fj(\017)45
-b Ft(")p Fk(UTCTOT)-7 b(AI)p Ft(")27 b Fk(\(MJDOFF\):)i(Con)n(v)n(ert)d
-(a)h(UTC)h(MJD)g(to)f(a)g(T)-7 b(AI)28 b(MJD.)340 5321
-y Fj(\017)45 b Ft(")p Fk(T)-7 b(AITOTT)p Ft(")27 b Fk(\(MJDOFF\):)h
-(Con)n(v)n(ert)e(a)i(T)-7 b(AI)28 b(MJD)g(to)f(a)g(TT)h(MJD.)340
-5457 y Fj(\017)45 b Ft(")p Fk(TTTOT)-7 b(AI)p Ft(")27
-b Fk(\(MJDOFF\):)h(Con)n(v)n(ert)e(a)i(TT)f(MJD)h(to)g(a)f(T)-7
-b(AI)28 b(MJD.)340 5593 y Fj(\017)45 b Ft(")p Fk(TTTOTDB)p
-Ft(")33 b Fk(\(MJDOFF,)i(OBSLON,)e(OBSLA)-7 b(T,)34 b(OBSAL)-7
-b(T\):)34 b(Con)n(v)n(ert)f(a)g(TT)i(MJD)f(to)g(a)f(TDB)427
-5693 y(MJD.)p eop end
-%%Page: 359 369
-TeXDict begin 359 368 bop 3643 52 a FG(359)340 351 y
-Fj(\017)45 b Ft(")p Fk(TDBTOTT)p Ft(")33 b Fk(\(MJDOFF,)i(OBSLON,)e
-(OBSLA)-7 b(T,)34 b(OBSAL)-7 b(T\):)34 b(Con)n(v)n(ert)f(a)g(TDB)i(MJD)
-f(to)g(a)g(TT)427 451 y(MJD.)340 592 y Fj(\017)45 b Ft(")p
-Fk(TTTOTCG)p Ft(")27 b Fk(\(MJDOFF\):)h(Con)n(v)n(ert)e(a)h(TT)h(MJD)g
-(to)f(a)h(TCG)f(MJD.)340 734 y Fj(\017)45 b Ft(")p Fk(TCGTOTT)p
-Ft(")27 b Fk(\(MJDOFF\):)h(Con)n(v)n(ert)e(a)h(TCG)h(MJD)g(to)g(a)f(TT)
-g(MJD.)340 875 y Fj(\017)45 b Ft(")p Fk(TDBTOTCB)p Ft(")27
-b Fk(\(MJDOFF\):)h(Con)n(v)n(ert)e(a)h(TDB)h(MJD)g(to)g(a)f(TCB)g(MJD.)
-340 1016 y Fj(\017)45 b Ft(")p Fk(TCBTOTDB)p Ft(")27
-b Fk(\(MJDOFF\):)h(Con)n(v)n(ert)e(a)h(TCB)h(MJD)g(to)f(a)g(TDB)h(MJD.)
-340 1158 y Fj(\017)45 b Ft(")p Fk(UTTOGMST)p Ft(")27
-b Fk(\(MJDOFF\):)i(Con)n(v)n(ert)d(a)h(UT)h(MJD)g(to)f(a)g(GMST)h(MJD.)
-340 1299 y Fj(\017)45 b Ft(")p Fk(GMSTTOUT)p Ft(")27
-b Fk(\(MJDOFF\):)i(Con)n(v)n(ert)d(a)h(GMST)h(MJD)g(to)f(a)h(UT)f(MJD.)
-340 1441 y Fj(\017)45 b Ft(")p Fk(GMSTTOLMST)p Ft(")37
-b Fk(\(MJDOFF,)h(OBSLON,)f(OBSLA)-7 b(T\):)38 b(Con)n(v)n(ert)e(a)h
-(GMST)h(MJD)g(to)f(a)g(LMST)427 1540 y(MJD.)340 1682
-y Fj(\017)45 b Ft(")p Fk(LMSTTOGMST)p Ft(")37 b Fk(\(MJDOFF,)h(OBSLON,)
-f(OBSLA)-7 b(T\):)38 b(Con)n(v)n(ert)e(a)h(LMST)h(MJD)g(to)f(a)g(GMST)
-427 1781 y(MJD.)340 1923 y Fj(\017)45 b Ft(")p Fk(LASTTOLMST)p
-Ft(")40 b Fk(\(MJDOFF,)g(OBSLON,)g(OBSLA)-7 b(T\):)41
-b(Con)n(v)n(ert)d(a)i(GMST)h(MJD)f(to)h(a)e(LMST)427
-2022 y(MJD.)340 2164 y Fj(\017)45 b Ft(")p Fk(LMSTTOLAST)p
-Ft(")40 b Fk(\(MJDOFF,)g(OBSLON,)g(OBSLA)-7 b(T\):)41
-b(Con)n(v)n(ert)d(a)i(LMST)h(MJD)f(to)g(a)g(GMST)427
-2263 y(MJD.)340 2405 y Fj(\017)45 b Ft(")p Fk(UTTOUTC)p
-Ft(")27 b Fk(\(DUT1\):)38 b(Con)n(v)n(ert)26 b(a)h(UT1)h(MJD)f(to)h(a)f
-(UTC)h(MJD.)340 2546 y Fj(\017)45 b Ft(")p Fk(UTCTOUT)p
-Ft(")27 b Fk(\(DUT1\):)38 b(Con)n(v)n(ert)26 b(a)h(UTC)h(MJD)g(to)f(a)g
-(UT1)h(MJD.)340 2687 y Fj(\017)45 b Ft(")p Fk(L)-7 b(TTOUTC)p
-Ft(")27 b Fk(\(L)-7 b(TOFF\):)28 b(Con)n(v)n(ert)e(a)h(Lo)r(cal)g(Time)
-h(MJD)g(to)f(a)g(UTC)h(MJD.)340 2829 y Fj(\017)45 b Ft(")p
-Fk(UTCTOL)-7 b(T)p Ft(")27 b Fk(\(L)-7 b(TOFF\):)28 b(Con)n(v)n(ert)e
-(a)h(UTC)h(MJD)g(to)g(a)f(Lo)r(cal)g(Time)g(MJD.)227
-3008 y(The)h(units)g(for)f(the)h(v)-5 b(alues)27 b(pro)r(cessed)g(b)n
-(y)g(the)h(ab)r(o)n(v)n(e)e(con)n(v)n(ersions)f(are)i(as)g(follo)n(ws:)
-340 3294 y Fj(\017)45 b Fk(Julian)27 b(ep)r(o)r(c)n(hs)h(and)f
-(o\013sets:)37 b(Julian)27 b(y)n(ears)340 3436 y Fj(\017)45
-b Fk(Besselian)27 b(ep)r(o)r(c)n(hs)g(and)h(o\013sets:)36
-b(T)-7 b(ropical)27 b(y)n(ears)340 3577 y Fj(\017)45
-b Fk(Mo)r(di\014ed)28 b(Julian)f(Dates)h(and)f(o\013sets:)37
-b(da)n(ys)340 3718 y Fj(\017)45 b Fk(Julian)27 b(Dates)h(and)f
-(o\013sets:)37 b(da)n(ys)227 3897 y(The)25 b(argumen)n(ts)f(used)g(in)i
-(the)f(ab)r(o)n(v)n(e)e(con)n(v)n(ersions)f(are)i(the)h(zero-p)r(oin)n
-(ts)f(used)g(b)n(y)h(the)g(AST)p Ft(_)p Fk(TRANSF)n(ORM)227
-3997 y(routine.)35 b(The)23 b(axis)f(v)-5 b(alues)22
-b(supplied)i(and)e(returned)g(b)n(y)h(AST)p Ft(_)p Fk(TRANSF)n(ORM)g
-(are)f(o\013sets)g(a)n(w)n(a)n(y)f(from)i(these)227 4097
-y(zero-p)r(oin)n(ts:)340 4383 y Fj(\017)45 b Fk(MJDOFF:)28
-b(The)g(zero-p)r(oin)n(t)e(b)r(eing)i(used)f(with)h(MJD)g(v)-5
-b(alues.)340 4525 y Fj(\017)45 b Fk(JDOFF:)28 b(The)g(zero-p)r(oin)n(t)
-e(b)r(eing)i(used)f(with)h(Julian)g(Date)f(v)-5 b(alues.)340
-4666 y Fj(\017)45 b Fk(BEPOFF:)27 b(The)g(zero-p)r(oin)n(t)g(b)r(eing)g
-(used)h(with)g(Besselian)f(ep)r(o)r(c)n(h)g(v)-5 b(alues.)340
-4807 y Fj(\017)45 b Fk(JEPOFF:)27 b(The)g(zero-p)r(oin)n(t)g(b)r(eing)g
-(used)h(with)g(Julian)f(ep)r(o)r(c)n(h)h(v)-5 b(alues.)340
-4949 y Fj(\017)45 b Fk(OBSLON:)27 b(Observ)n(er)f(longitude)h(in)h
-(radians)e(\(+v)n(e)h(w)n(est)n(w)n(ards\).)340 5090
-y Fj(\017)45 b Fk(OBSLA)-7 b(T:)28 b(Observ)n(er)d(geo)r(detic)i
-(latitude)h(\(IA)n(U)h(1975\))d(in)h(radians)g(\(+v)n(e)g(north)n(w)n
-(ards\).)340 5232 y Fj(\017)45 b Fk(OBSAL)-7 b(T:)28
-b(Observ)n(er)d(geo)r(detic)i(altitude)h(\(IA)n(U)h(1975\))d(in)h
-(metres.)340 5373 y Fj(\017)45 b Fk(DUT1:)37 b(The)28
-b(UT1-UTC)f(v)-5 b(alue)28 b(to)f(use.)340 5514 y Fj(\017)45
-b Fk(L)-7 b(TOFF:)30 b(The)h(o\013set)f(b)r(et)n(w)n(een)g(Lo)r(cal)f
-(Time)h(and)g(UTC)g(\(in)h(hours,)f(p)r(ositiv)n(e)g(for)f(time)i
-(zones)e(east)h(of)427 5614 y(Green)n(wic)n(h\).)p eop
-end
-%%Page: 360 370
-TeXDict begin 360 369 bop 0 52 a FG(360)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(TIMEFRAME)163 b Fd(Create)37
-b(a)i(TimeF)-10 b(rame)163 b FA(AST)p Fe(_)p FA(TIMEFRAME)0
-710 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(TimeF)-7 b(rame)28 b(and)f(optionally)g(initialises)g(its)h
-(attributes.)227 859 y(A)h(TimeF)-7 b(rame)28 b(is)g(a)g(sp)r
-(ecialised)f(form)h(of)g(one-dimensional)f(F)-7 b(rame)28
-b(whic)n(h)g(represen)n(ts)f(v)-5 b(arious)27 b(co)r(ordinate)227
-959 y(systems)g(used)h(to)f(describ)r(e)h(p)r(ositions)f(in)h(time.)227
-1109 y(A)23 b(TimeF)-7 b(rame)21 b(represen)n(ts)g(a)g(momen)n(t)h(in)g
-(time)h(as)e(either)h(an)f(Mo)r(di\014ed)i(Julian)e(Date)h(\(MJD\),)h
-(a)f(Julian)f(Date)227 1209 y(\(JD\),)f(a)f(Besselian)e(ep)r(o)r(c)n(h)
-i(or)f(a)h(Julian)g(ep)r(o)r(c)n(h,)h(as)f(determined)g(b)n(y)f(the)i
-(System)f(attribute.)34 b(Optionally)-7 b(,)20 b(a)f(zero)227
-1308 y(p)r(oin)n(t)30 b(can)g(b)r(e)g(sp)r(eci\014ed)h(\(using)e
-(attribute)i(TimeOrigin\))e(whic)n(h)h(results)f(in)h(the)h(TimeF)-7
-b(rame)29 b(represen)n(ting)227 1408 y(time)f(o\013sets)g(from)f(the)h
-(sp)r(eci\014ed)g(zero)e(p)r(oin)n(t.)227 1558 y(Ev)n(en)g(though)g(JD)
-g(and)g(MJD)g(are)g(de\014ned)g(as)g(b)r(eing)g(in)g(units)h(of)f(da)n
-(ys,)g(the)g(TimeF)-7 b(rame)26 b(class)f(allo)n(ws)g(other)227
-1658 y(units)31 b(to)g(b)r(e)g(used)f(\(via)h(the)g(Unit)g(attribute\))
-g(on)f(the)h(basis)f(of)h(simple)g(scalings)e(\(60)h(seconds)g(=)g(1)g
-(min)n(ute,)227 1757 y(60)i(min)n(utes)h(=)f(1)h(hour,)g(24)f(hours)g
-(=)g(1)g(da)n(y)-7 b(,)33 b(365.25)e(da)n(ys)h(=)g(1)g(y)n(ear\).)51
-b(Lik)n(ewise,)33 b(Julian)g(ep)r(o)r(c)n(hs)f(can)g(b)r(e)227
-1857 y(describ)r(ed)f(in)f(units)h(other)f(than)h(the)g(usual)f(y)n
-(ears.)44 b(Besselian)29 b(ep)r(o)r(c)n(h)i(are)e(alw)n(a)n(ys)g
-(represen)n(ted)g(in)i(units)g(of)227 1956 y(\(tropical\))c(y)n(ears.)
-227 2106 y(The)h(TimeScale)f(attribute)h(allo)n(ws)f(the)h(time)g
-(scale)f(to)g(b)r(e)h(sp)r(eci\014ed)g(\(that)h(is,)e(the)h(ph)n
-(ysical)f(pro)r(ces)g(used)h(to)227 2206 y(de\014ne)34
-b(the)g(rate)f(of)g(\015o)n(w)g(of)h(time\).)55 b(MJD,)34
-b(JD)g(and)f(Julian)g(ep)r(o)r(c)n(h)h(can)f(b)r(e)h(used)f(to)h
-(represen)n(t)e(a)h(time)h(in)227 2306 y(an)n(y)26 b(supp)r(orted)h
-(time)g(scale.)36 b(Ho)n(w)n(ev)n(er,)25 b(Besselian)h(ep)r(o)r(c)n(h)g
-(ma)n(y)g(only)h(b)r(e)g(used)g(with)g(the)g Ft(")p Fk(TT)p
-Ft(")f Fk(\(T)-7 b(errestrial)227 2405 y(Time\))39 b(time)g(scale.)70
-b(The)38 b(list)h(of)g(supp)r(orted)f(time)h(scales)f(includes)h(univ)n
-(ersal)e(time)i(and)f(siderial)g(time.)227 2505 y(Strictly)-7
-b(,)30 b(these)g(represen)n(t)e(angles)g(rather)g(than)i(time)f
-(scales,)g(but)h(are)e(included)i(in)g(the)f(list)h(since)f(they)h(are)
-227 2605 y(in)e(common)f(use)h(and)f(are)g(often)h(though)n(t)f(of)g
-(as)g(time)h(scales.)227 2755 y(When)h(a)e(time)h(v)-5
-b(alue)28 b(is)f(formatted)h(it)g(can)f(b)r(e)h(formated)g(either)f(as)
-g(a)h(simple)g(\015oating)e(p)r(oin)n(t)i(v)-5 b(alue,)28
-b(or)f(as)g(a)227 2854 y(Gregorian)f(date)h(\(see)h(the)g(F)-7
-b(ormat)27 b(attribute\).)0 3055 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_TIMEFRAME\()38 b(OPTIONS,)i(STATUS)h(\))0
-3255 y Fc(Argumen)m(ts:)259 3442 y(OPTIONS)32 b(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-3542 y Fk(A)g(c)n(haracter)e(string)h(con)n(taining)f(an)h(optional)g
-(comma-separated)e(list)j(of)g(attribute)f(assignmen)n(ts)g(to)427
-3641 y(b)r(e)38 b(used)f(for)f(initialising)h(the)g(new)g(TimeF)-7
-b(rame.)64 b(The)37 b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)g(that)
-g(for)f(the)427 3741 y(AST)p Ft(_)p Fk(SET)27 b(routine.)37
-b(If)28 b(no)f(initialisation)g(is)h(required,)f(a)g(blank)g(v)-5
-b(alue)28 b(ma)n(y)e(b)r(e)i(supplied.)259 3899 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-3999 y Fk(The)c(global)e(status.)0 4212 y Fc(Returned)32
-b(V)-8 b(alue:)259 4399 y(AST)p Ft(_)p Fc(TIMEFRAME)31
-b(=)h(INTEGER)427 4499 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(TimeF)
--7 b(rame.)0 4711 y Fc(Notes:)340 5045 y Fj(\017)45 b
-Fk(When)40 b(con)n(v)n(ersion)e(b)r(et)n(w)n(een)h(t)n(w)n(o)g(TimeF)-7
-b(rames)39 b(is)g(requested)g(\(as)g(when)h(supplying)f(TimeF)-7
-b(rames)427 5144 y(AST)p Ft(_)p Fk(CONVER)g(T\),)30 b(accoun)n(t)g
-(will)g(b)r(e)g(tak)n(en)g(of)g(the)g(nature)g(of)g(the)g(time)h(co)r
-(ordinate)e(systems)g(they)427 5244 y(represen)n(t,)35
-b(together)f(with)h(an)n(y)f(qualifying)g(time)h(scale,)h(o\013set,)g
-(unit,)h(etc.)58 b(The)35 b(AlignSystem)g(and)427 5344
-y(AlignTimeScale)28 b(attributes)f(will)h(also)e(b)r(e)i(tak)n(en)f(in)
-n(to)h(accoun)n(t.)340 5502 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 5602 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-eop end
-%%Page: 361 371
-TeXDict begin 361 370 bop 3643 52 a FG(361)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(TIMEMAP)389 b Fd(Create)37
-b(a)h(TimeMap)391 b FA(AST)p Fe(_)p FA(TIMEMAP)0 663
-y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(TimeMap)h(and)f(optionally)g(initialises)g(its)h(attributes.)227
-785 y(A)39 b(TimeMap)f(is)g(a)g(sp)r(ecialised)g(form)g(of)g
-(1-dimensional)f(Mapping)h(whic)n(h)h(can)f(b)r(e)g(used)h(to)f
-(represen)n(t)f(a)227 885 y(sequence)27 b(of)h(con)n(v)n(ersions)d(b)r
-(et)n(w)n(een)i(standard)g(time)h(co)r(ordinate)f(systems.)227
-1007 y(When)19 b(a)f(TimeMap)g(is)h(\014rst)f(created,)h(it)g(simply)g
-(p)r(erforms)e(a)h(unit)h(\(n)n(ull\))g(Mapping.)34 b(Using)18
-b(the)h(AST)p Ft(_)p Fk(TIMEADD)227 1107 y(routine,)35
-b(a)e(series)f(of)h(co)r(ordinate)f(con)n(v)n(ersion)f(steps)i(ma)n(y)g
-(then)h(b)r(e)g(added.)54 b(This)33 b(allo)n(ws)f(m)n(ulti-step)h(con-)
-227 1207 y(v)n(ersions)i(b)r(et)n(w)n(een)h(a)g(v)-5
-b(ariet)n(y)35 b(of)h(time)h(co)r(ordinate)e(systems)g(to)h(b)r(e)h
-(assem)n(bled)e(out)h(of)g(a)g(set)g(of)g(building)227
-1306 y(blo)r(c)n(ks.)227 1429 y(F)-7 b(or)18 b(details)g(of)g(the)h
-(individual)g(co)r(ordinate)e(con)n(v)n(ersions)f(a)n(v)-5
-b(ailable,)19 b(see)f(the)h(description)e(of)i(the)f(AST)p
-Ft(_)p Fk(TIMEADD)227 1528 y(routine.)0 1674 y Fc(In)m(v)m(o)s(cation:)
-123 b Ft(RESULT)41 b(=)i(AST_TIMEMAP\()c(FLAGS,)i(OPTIONS,)f(STATUS)h
-(\))0 1819 y Fc(Argumen)m(ts:)259 1952 y(FLA)m(GS)33
-b(=)f(INTEGER)f(\(Giv)m(en\))427 2052 y Fk(This)d(argumen)n(t)e(is)i
-(reserv)n(ed)e(for)h(future)h(use)f(and)h(should)f(curren)n(tly)g(alw)n
-(a)n(ys)e(b)r(e)j(set)g(to)f(zero.)259 2181 y Fc(OPTIONS)32
-b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))
-427 2280 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h
-(optional)f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f
-(to)g(b)r(e)427 2380 y(used)i(for)g(initialising)f(the)i(new)f
-(TimeMap.)35 b(The)23 b(syn)n(tax)f(used)h(is)g(iden)n(tical)f(to)h
-(that)g(for)g(the)g(AST)p Ft(_)p Fk(SET)427 2479 y(routine.)37
-b(If)28 b(no)f(initialisation)g(is)h(required,)e(a)i(blank)f(v)-5
-b(alue)27 b(ma)n(y)g(b)r(e)h(supplied.)259 2608 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-2708 y Fk(The)c(global)e(status.)0 2866 y Fc(Returned)32
-b(V)-8 b(alue:)259 2998 y(AST)p Ft(_)p Fc(TIMEMAP)32
-b(=)g(INTEGER)427 3098 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g
-(TimeMap.)0 3256 y Fc(Notes:)340 3535 y Fj(\017)45 b
-Fk(The)23 b(nature)g(and)g(units)h(of)f(the)g(co)r(ordinate)f(v)-5
-b(alues)23 b(supplied)h(for)e(the)i(\014rst)f(input)h(\(i.e.)35
-b(the)24 b(time)g(input\))427 3634 y(of)36 b(a)g(TimeMap)g(m)n(ust)h(b)
-r(e)f(appropriate)f(to)h(the)h(\014rst)f(con)n(v)n(ersion)d(step)k
-(applied)f(b)n(y)g(the)h(TimeMap.)427 3734 y(F)-7 b(or)23
-b(instance,)h(if)g(the)g(\014rst)f(con)n(v)n(ersion)e(step)i(is)h
-Ft(")p Fk(MJDTOBEP)p Ft(")d Fk(\(Mo)r(di\014ed)j(Julian)f(Date)g(to)h
-(Besselian)427 3833 y(ep)r(o)r(c)n(h\))e(then)g(the)g(co)r(ordinate)f
-(v)-5 b(alues)21 b(for)g(the)h(\014rst)f(input)i(should)e(b)r(e)h(date)
-g(in)g(units)g(of)f(da)n(ys.)34 b(Similarly)-7 b(,)427
-3933 y(the)28 b(nature)e(and)h(units)g(of)g(the)g(co)r(ordinate)f(v)-5
-b(alues)27 b(returned)f(b)n(y)h(a)f(TimeMap)h(will)g(b)r(e)h
-(determined)f(b)n(y)427 4033 y(the)h(last)g(con)n(v)n(ersion)d(step)j
-(applied)f(b)n(y)g(the)h(TimeMap.)340 4162 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 4261
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 4453 V 0 4583 a FA(AST)p
-Fe(_)p FA(TRAN1)1255 4584 y Fd(T)-10 b(ransform)36 b(1-dimensional)1598
-4684 y(co)s(ordinates)2980 4583 y FA(AST)p Fe(_)p FA(TRAN1)0
-4842 y Fc(Description:)44 b Fk(This)37 b(routine)f(applies)g(a)f
-(Mapping)h(to)h(transform)e(the)h(co)r(ordinates)f(of)i(a)f(set)g(of)g
-(p)r(oin)n(ts)g(in)h(one)227 4941 y(dimension.)0 5087
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_TRAN1\()d(THIS,)j
-(NPOINT,)e(XIN,)i(FORWARD,)f(XOUT,)g(STATUS)g(\))0 5232
-y Fc(Argumen)m(ts:)259 5365 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427
-5464 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Mapping)f(to)g(b)r(e)h
-(applied.)259 5593 y Fc(NPOINT)k(=)g(INTEGER)f(\(Giv)m(en\))427
-5693 y Fk(The)d(n)n(um)n(b)r(er)f(of)h(p)r(oin)n(ts)f(to)h(b)r(e)g
-(transformed.)p eop end
-%%Page: 362 372
-TeXDict begin 362 371 bop 0 52 a FG(362)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(XIN\()h(NPOINT)g(\))g
-(=)g(DOUBLE)g(PRECISION)g(\(Giv)m(en\))427 451 y Fk(An)c(arra)n(y)e(of)
-h(co)r(ordinate)g(v)-5 b(alues)27 b(for)g(the)h(input)g(\(un)n
-(transformed\))f(p)r(oin)n(ts.)259 602 y Fc(F)m(OR)-11
-b(W)g(ARD)32 b(=)g(LOGICAL)h(\(Giv)m(en\))427 702 y Fk(A)38
-b(.TR)n(UE.)e(v)-5 b(alue)37 b(indicates)g(that)h(the)f(Mapping's)g
-(forw)n(ard)e(co)r(ordinate)h(transformation)f(is)i(to)g(b)r(e)427
-801 y(applied,)28 b(while)g(a)f(.F)-9 b(ALSE.)27 b(v)-5
-b(alue)28 b(indicates)f(that)h(the)g(in)n(v)n(erse)e(transformation)g
-(should)i(b)r(e)g(used.)259 953 y Fc(X)m(OUT\()33 b(NPOINT)f(\))g(=)g
-(DOUBLE)g(PRECISION)g(\(Returned\))427 1052 y Fk(An)c(arra)n(y)e(in)n
-(to)h(whic)n(h)g(the)h(co)r(ordinates)f(of)g(the)h(output)g
-(\(transformed\))f(p)r(oin)n(ts)h(will)g(b)r(e)g(written.)259
-1203 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 1303 y Fk(The)c(global)e(status.)0 1502
-y Fc(Notes:)340 1821 y Fj(\017)45 b Fk(The)28 b(Mapping)f(supplied)h(m)
-n(ust)g(ha)n(v)n(e)e(the)i(v)-5 b(alue)28 b(1)f(for)g(b)r(oth)h(its)g
-(Nin)g(and)f(Nout)h(attributes.)p 0 2057 3780 12 v 0
-2188 a FA(AST)p Fe(_)p FA(TRAN2)1255 2189 y Fd(T)-10
-b(ransform)36 b(2-dimensional)1598 2288 y(co)s(ordinates)2980
-2188 y FA(AST)p Fe(_)p FA(TRAN2)0 2491 y Fc(Description:)44
-b Fk(This)36 b(routine)g(applies)g(a)f(Mapping)h(to)g(transform)f(the)h
-(co)r(ordinates)f(of)h(a)f(set)h(of)g(p)r(oin)n(ts)g(in)g(t)n(w)n(o)227
-2590 y(dimensions.)0 2776 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_TRAN2\()d(THIS,)j(NPOINT,)e(XIN,)i(YIN,)g(FORWARD,)e
-(XOUT,)i(YOUT,)g(STATUS)f(\))0 2963 y Fc(Argumen)m(ts:)259
-3136 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 3235
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Mapping)f(to)g(b)r(e)h(applied.)259
-3387 y Fc(NPOINT)k(=)g(INTEGER)f(\(Giv)m(en\))427 3486
-y Fk(The)d(n)n(um)n(b)r(er)f(of)h(p)r(oin)n(ts)f(to)h(b)r(e)g
-(transformed.)259 3637 y Fc(XIN\()k(NPOINT)g(\))g(=)g(DOUBLE)g
-(PRECISION)g(\(Giv)m(en\))427 3737 y Fk(An)c(arra)n(y)e(of)h(X-co)r
-(ordinate)f(v)-5 b(alues)28 b(for)f(the)h(input)g(\(un)n(transformed\))
-f(p)r(oin)n(ts.)259 3888 y Fc(YIN\()32 b(NPOINT)g(\))g(=)g(DOUBLE)g
-(PRECISION)g(\(Giv)m(en\))427 3988 y Fk(An)c(arra)n(y)e(of)h(Y-co)r
-(ordinate)f(v)-5 b(alues)28 b(for)f(the)h(input)g(\(un)n(transformed\))
-f(p)r(oin)n(ts.)259 4139 y Fc(F)m(OR)-11 b(W)g(ARD)32
-b(=)g(LOGICAL)h(\(Giv)m(en\))427 4239 y Fk(A)38 b(.TR)n(UE.)e(v)-5
-b(alue)37 b(indicates)g(that)h(the)f(Mapping's)g(forw)n(ard)e(co)r
-(ordinate)h(transformation)f(is)i(to)g(b)r(e)427 4338
-y(applied,)28 b(while)g(a)f(.F)-9 b(ALSE.)27 b(v)-5 b(alue)28
-b(indicates)f(that)h(the)g(in)n(v)n(erse)e(transformation)g(should)i(b)
-r(e)g(used.)259 4489 y Fc(X)m(OUT\()33 b(NPOINT)f(\))g(=)g(DOUBLE)g
-(PRECISION)g(\(Returned\))427 4589 y Fk(An)c(arra)n(y)e(in)n(to)h(whic)
-n(h)g(the)h(X-co)r(ordinates)f(of)g(the)h(output)g(\(transformed\))f(p)
-r(oin)n(ts)h(will)g(b)r(e)g(written.)259 4740 y Fc(YOUT\()33
-b(NPOINT)f(\))g(=)g(DOUBLE)g(PRECISION)f(\(Returned\))427
-4840 y Fk(An)d(arra)n(y)e(in)n(to)h(whic)n(h)g(the)h(Y-co)r(ordinates)f
-(of)g(the)h(output)g(\(transformed\))f(p)r(oin)n(ts)h(will)g(b)r(e)g
-(written.)259 4991 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h
-(and)g(Returned\))427 5091 y Fk(The)c(global)e(status.)0
-5289 y Fc(Notes:)340 5609 y Fj(\017)45 b Fk(The)28 b(Mapping)f
-(supplied)h(m)n(ust)g(ha)n(v)n(e)e(the)i(v)-5 b(alue)28
-b(2)f(for)g(b)r(oth)h(its)g(Nin)g(and)f(Nout)h(attributes.)p
-eop end
-%%Page: 363 373
-TeXDict begin 363 372 bop 3643 52 a FG(363)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(TRANGRID)1390 483 y Fd(T)-10
-b(ransform)37 b(a)h(grid)g(of)1663 594 y(p)s(ositions)2688
-482 y FA(AST)p Fe(_)p FA(TRANGRID)0 788 y Fc(Description:)44
-b Fk(This)36 b(function)g(uses)f(the)h(supplied)f(Mapping)g(to)h
-(transforms)e(a)h(regular)e(square)i(grid)f(of)i(p)r(oin)n(ts)227
-888 y(co)n(v)n(ering)28 b(a)h(sp)r(eci\014ed)h(b)r(o)n(x.)42
-b(It)30 b(attempts)g(to)f(do)g(this)h(quic)n(kly)f(b)n(y)g(\014rst)g
-(appro)n(ximating)f(the)i(Mapping)f(with)227 987 y(a)35
-b(linear)g(transformation)e(applied)j(o)n(v)n(er)d(the)j(whole)f
-(region)f(of)h(the)h(input)g(grid)e(whic)n(h)i(is)f(b)r(eing)g(used.)60
-b(If)227 1087 y(this)30 b(pro)n(v)n(es)e(to)i(b)r(e)g(insu\016cien)n
-(tly)g(accurate,)f(the)h(input)h(region)d(is)i(sub-divided)g(in)n(to)f
-(t)n(w)n(o)g(along)g(its)h(largest)227 1187 y(dimension)k(and)g(the)h
-(pro)r(cess)e(is)h(rep)r(eated)g(within)h(eac)n(h)e(of)h(the)h
-(resulting)f(sub-regions.)54 b(This)35 b(pro)r(cess)e(of)227
-1286 y(sub-division)21 b(con)n(tin)n(ues)g(un)n(til)g(a)g(su\016cien)n
-(tly)h(go)r(o)r(d)f(linear)f(appro)n(ximation)g(is)h(found,)i(or)e(the)
-g(region)f(to)i(whic)n(h)227 1386 y(it)28 b(is)g(b)r(eing)f(applied)h
-(b)r(ecomes)f(to)r(o)h(small)f(\(in)h(whic)n(h)g(case)e(the)i(original)
-e(Mapping)h(is)h(used)g(directly\).)0 1541 y Fc(In)m(v)m(o)s(cation:)
-123 b Ft(CALL)42 b(AST_TRANGRID\()c(THIS,)j(NCOORD_IN,)f(LBND,)h(UBND,)
-h(TOL,)g(MAXPIX,)f(FORWARD,)f(NCOORD_OUT,)227 1640 y(OUTDIM,)h(OUT,)h
-(STATUS)f(\))0 1795 y Fc(Argumen)m(ts:)259 1937 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 2036 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(Mapping)f(to)g(b)r(e)h(applied.)259 2172
-y Fc(NCOORD)p Ft(_)p Fc(IN)i(=)i(INTEGER)g(\(Giv)m(en\))427
-2272 y Fk(The)24 b(n)n(um)n(b)r(er)g(of)g(co)r(ordinates)f(b)r(eing)h
-(supplied)g(for)g(eac)n(h)f(b)r(o)n(x)g(corner)g(\(i.e.)36
-b(the)24 b(n)n(um)n(b)r(er)g(of)g(dimensions)427 2371
-y(of)k(the)g(space)f(in)h(whic)n(h)f(the)h(input)g(p)r(oin)n(ts)g
-(reside\).)259 2507 y Fc(LBND\()k(NCOORD)p Ft(_)p Fc(IN)f(\))h(=)g
-(INTEGER)f(\(Giv)m(en\))427 2606 y Fk(An)j(arra)n(y)d(con)n(taining)h
-(the)i(co)r(ordinates)e(of)h(the)h(cen)n(tre)f(of)g(the)g(\014rst)h
-(pixel)f(in)g(the)h(input)g(grid)f(along)427 2706 y(eac)n(h)27
-b(dimension.)259 2842 y Fc(UBND\()32 b(NCOORD)p Ft(_)p
-Fc(IN)f(\))h(=)g(INTEGER)f(\(Giv)m(en\))427 2941 y Fk(An)k(arra)n(y)d
-(con)n(taining)h(the)h(co)r(ordinates)f(of)h(the)h(cen)n(tre)f(of)g
-(the)g(last)g(pixel)g(in)h(the)f(input)h(grid)f(along)427
-3041 y(eac)n(h)27 b(dimension.)427 3158 y(Note)i(that)g(LBND)g(and)f
-(UBND)h(together)f(de\014ne)h(the)f(shap)r(e)h(and)f(size)g(of)h(the)g
-(input)g(grid,)f(its)h(exten)n(t)427 3258 y(along)24
-b(a)h(particular)f(\(J'th\))j(dimension)e(b)r(eing)g
-(UBND\(J\)-LBND\(J\)+1.)37 b(They)25 b(also)f(de\014ne)i(the)g(input)
-427 3358 y(grid's)33 b(co)r(ordinate)f(system,)i(eac)n(h)f(pixel)g(ha)n
-(ving)g(unit)h(exten)n(t)f(along)f(eac)n(h)h(dimension)g(with)h(in)n
-(tegral)427 3457 y(co)r(ordinate)27 b(v)-5 b(alues)27
-b(at)g(its)h(cen)n(tre.)259 3593 y Fc(TOL)k(=)h(DOUBLE)f(PRECISION)f
-(\(Giv)m(en\))427 3692 y Fk(The)j(maxim)n(um)f(tolerable)f(geometrical)
-f(distortion)i(whic)n(h)g(ma)n(y)f(b)r(e)i(in)n(tro)r(duced)f(as)f(a)h
-(result)g(of)g(ap-)427 3792 y(pro)n(ximating)c(non-linear)f(Mappings)h
-(b)n(y)h(a)f(set)h(of)g(piece-wise)f(linear)g(transformations.)42
-b(This)30 b(should)427 3892 y(b)r(e)e(expressed)f(as)g(a)g(displacemen)
-n(t)g(within)h(the)g(output)h(co)r(ordinate)d(system)h(of)h(the)g
-(Mapping.)427 4009 y(If)34 b(piece-wise)f(linear)g(appro)n(ximation)f
-(is)h(not)h(required,)g(a)f(v)-5 b(alue)33 b(of)h(zero)e(ma)n(y)h(b)r
-(e)h(giv)n(en.)54 b(This)33 b(will)427 4109 y(ensure)k(that)g(the)h
-(Mapping)e(is)h(used)g(without)h(an)n(y)e(appro)n(ximation,)i(but)g(ma)
-n(y)e(increase)g(execution)427 4208 y(time.)427 4326
-y(If)d(the)f(v)-5 b(alue)32 b(is)g(to)r(o)g(high,)h(discon)n(tin)n
-(uities)e(b)r(et)n(w)n(een)h(the)h(linear)e(appro)n(ximations)f(used)i
-(in)g(adjacen)n(t)427 4426 y(panel)c(will)f(b)r(e)h(higher.)37
-b(If)28 b(this)g(is)f(a)g(problem,)g(reduce)h(the)g(tolerance)e(v)-5
-b(alue)27 b(used.)259 4561 y Fc(MAXPIX)33 b(=)f(INTEGER)f(\(Giv)m(en\))
-427 4661 y Fk(A)e(v)-5 b(alue)29 b(whic)n(h)g(sp)r(eci\014es)f(an)h
-(initial)g(scale)f(size)g(\(in)h(input)h(grid)e(p)r(oin)n(ts\))h(for)f
-(the)h(adaptiv)n(e)f(algorithm)427 4760 y(whic)n(h)j(appro)n(ximates)f
-(non-linear)g(Mappings)g(with)i(piece-wise)f(linear)f(transformations.)
-46 b(Normally)-7 b(,)427 4860 y(this)28 b(should)g(b)r(e)g(a)g(large)e
-(v)-5 b(alue)28 b(\(larger)e(than)i(an)n(y)f(dimension)g(of)h(the)g
-(region)f(of)h(the)g(input)g(grid)g(b)r(eing)427 4960
-y(used\).)46 b(In)31 b(this)g(case,)g(a)f(\014rst)g(attempt)h(to)g
-(appro)n(ximate)e(the)i(Mapping)f(b)n(y)g(a)g(linear)g(transformation)
-427 5059 y(will)e(b)r(e)g(made)f(o)n(v)n(er)f(the)i(en)n(tire)f(input)i
-(region.)427 5177 y(If)k(a)f(smaller)f(v)-5 b(alue)33
-b(is)f(used,)i(the)e(input)h(region)f(will)g(\014rst)g(b)r(e)h(divided)
-g(in)n(to)f(sub-regions)e(whose)i(size)427 5277 y(do)r(es)c(not)g
-(exceed)g(MAXPIX)h(grid)e(p)r(oin)n(ts)h(in)g(an)n(y)g(dimension.)38
-b(Only)28 b(at)g(this)h(p)r(oin)n(t)f(will)g(attempts)h(at)427
-5376 y(appro)n(ximation)d(commence.)427 5494 y(This)38
-b(v)-5 b(alue)38 b(ma)n(y)g(o)r(ccasionally)e(b)r(e)j(useful)f(in)h
-(prev)n(en)n(ting)e(false)h(con)n(v)n(ergence)d(of)j(the)h(adaptiv)n(e)
-e(al-)427 5593 y(gorithm)c(in)g(cases)f(where)g(the)h(Mapping)g(app)r
-(ears)f(appro)n(ximately)f(linear)h(on)h(large)e(scales,)j(but)f(has)
-427 5693 y(irregularities)e(\(e.g.)53 b(holes\))32 b(on)h(smaller)f
-(scales.)52 b(A)33 b(v)-5 b(alue)33 b(of,)h(sa)n(y)-7
-b(,)34 b(50)e(to)g(100)g(grid)g(p)r(oin)n(ts)h(can)g(also)p
-eop end
-%%Page: 364 374
-TeXDict begin 364 373 bop 0 52 a FG(364)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)427 351 y Fk(b)r(e)j(emplo)n(y)n
-(ed)e(as)g(a)h(safeguard)f(in)h(general-purp)r(ose)e(soft)n(w)n(are,)i
-(since)g(the)g(e\013ect)h(on)f(p)r(erformance)f(is)427
-451 y(minimal.)427 567 y(If)21 b(to)r(o)f(small)g(a)g(v)-5
-b(alue)20 b(is)g(giv)n(en,)h(it)g(will)f(ha)n(v)n(e)f(the)i(e\013ect)g
-(of)f(inhibiting)h(linear)f(appro)n(ximation)e(altogether)427
-666 y(\(equiv)-5 b(alen)n(t)21 b(to)f(setting)h(TOL)f(to)g(zero\).)34
-b(Although)20 b(this)h(ma)n(y)f(degrade)f(p)r(erformance,)i(accurate)e
-(results)427 766 y(will)28 b(still)g(b)r(e)g(obtained.)259
-898 y Fc(F)m(OR)-11 b(W)g(ARD)32 b(=)g(LOGICAL)h(\(Giv)m(en\))427
-998 y Fk(A)38 b(.TR)n(UE.)e(v)-5 b(alue)37 b(indicates)g(that)h(the)f
-(Mapping's)g(forw)n(ard)e(co)r(ordinate)h(transformation)f(is)i(to)g(b)
-r(e)427 1098 y(applied,)28 b(while)g(a)f(.F)-9 b(ALSE.)27
-b(v)-5 b(alue)28 b(indicates)f(that)h(the)g(in)n(v)n(erse)e
-(transformation)g(should)i(b)r(e)g(used.)259 1230 y Fc(NCOORD)p
-Ft(_)p Fc(OUT)j(=)h(INTEGER)f(\(Giv)m(en\))427 1330 y
-Fk(The)g(n)n(um)n(b)r(er)e(of)i(co)r(ordinates)d(b)r(eing)j(generated)e
-(b)n(y)h(the)g(Mapping)g(for)g(eac)n(h)f(output)i(p)r(oin)n(t)f(\(i.e.)
-45 b(the)427 1429 y(n)n(um)n(b)r(er)28 b(of)g(dimensions)g(of)h(the)f
-(space)g(in)g(whic)n(h)h(the)f(output)h(p)r(oin)n(ts)f(reside\).)39
-b(This)28 b(need)g(not)h(b)r(e)f(the)427 1529 y(same)f(as)g(NCOORD)p
-Ft(_)p Fk(IN.)259 1661 y Fc(OUTDIM)33 b(=)f(INTEGER)f(\(Giv)m(en\))427
-1761 y Fk(The)e(n)n(um)n(b)r(er)f(of)g(elemen)n(ts)h(along)e(the)i
-(\014rst)f(dimension)g(of)h(the)g(OUT)f(arra)n(y)e(\(whic)n(h)j(will)f
-(con)n(tain)g(the)427 1861 y(output)34 b(co)r(ordinates\).)54
-b(The)33 b(v)-5 b(alue)34 b(giv)n(en)e(should)i(not)f(b)r(e)h(less)f
-(than)h(the)f(n)n(um)n(b)r(er)h(of)f(p)r(oin)n(ts)g(in)h(the)427
-1960 y(grid.)259 2092 y Fc(OUT\()f(OUTDIM,)f(NCOORD)p
-Ft(_)p Fc(OUT)f(\))h(=)g(DOUBLE)g(PRECISION)f(\(Returned\))427
-2192 y Fk(An)22 b(arra)n(y)d(in)n(to)i(whic)n(h)g(the)h(co)r(ordinates)
-d(of)j(the)f(output)h(\(transformed\))f(p)r(oin)n(ts)g(will)g(b)r(e)h
-(written.)35 b(These)427 2292 y(will)e(b)r(e)g(stored)f(suc)n(h)g(that)
-h(the)g(v)-5 b(alue)33 b(of)f(co)r(ordinate)g(n)n(um)n(b)r(er)g(COORD)h
-(for)f(output)h(p)r(oin)n(t)g(n)n(um)n(b)r(er)427 2391
-y(POINT)d(will)h(b)r(e)g(found)f(in)h(elemen)n(t)g(OUT\(POINT,COORD\).)
-f(The)g(p)r(oin)n(ts)h(are)e(ordered)g(suc)n(h)h(that)427
-2491 y(the)36 b(\014rst)g(axis)f(of)h(the)g(input)h(grid)e(c)n(hanges)f
-(most)i(rapidly)-7 b(.)61 b(F)-7 b(or)35 b(example,)i(if)g(the)f(input)
-h(grid)e(is)g(2-)427 2591 y(dimensional)d(and)g(extends)h(from)f
-(\(2,-1\))f(to)i(\(3,1\),)g(the)g(output)g(p)r(oin)n(ts)f(will)g(b)r(e)
-h(stored)f(in)g(the)h(order)427 2690 y(\(2,-1\),)27 b(\(3,)h(-1\),)f
-(\(2,0\),)g(\(3,0\),)h(\(2,1\),)f(\(3,1\).)259 2823 y
-Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-2922 y Fk(The)c(global)e(status.)0 3084 y Fc(Notes:)340
-3366 y Fj(\017)45 b Fk(If)31 b(the)g(forw)n(ard)e(co)r(ordinate)h
-(transformation)f(is)h(b)r(eing)h(applied,)h(the)f(Mapping)f(supplied)h
-(m)n(ust)g(ha)n(v)n(e)427 3465 y(the)24 b(v)-5 b(alue)23
-b(of)g(NCOORD)p Ft(_)p Fk(IN)h(for)e(its)i(Nin)g(attribute)f(and)g(the)
-h(v)-5 b(alue)23 b(of)g(NCOORD)p Ft(_)p Fk(OUT)g(for)g(its)g(Nout)427
-3565 y(attribute.)37 b(If)28 b(the)g(in)n(v)n(erse)e(transformation)g
-(is)i(b)r(eing)g(applied,)f(these)h(v)-5 b(alues)27 b(should)g(b)r(e)h
-(rev)n(ersed.)p 0 3763 3780 12 v 0 3894 a FA(AST)p Fe(_)p
-FA(TRANMAP)1415 3893 y Fd(Create)37 b(a)i(T)-10 b(ranMap)2727
-3894 y FA(AST)p Fe(_)p FA(TRANMAP)0 4081 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(T)-7 b(ranMap)27
-b(and)g(optionally)g(initialises)g(its)h(attributes.)227
-4206 y(A)f(T)-7 b(ranMap)26 b(is)g(a)h(Mapping)f(whic)n(h)g(com)n
-(bines)g(the)h(forw)n(ard)e(transformation)g(of)i(a)f(supplied)h
-(Mapping)f(with)227 4305 y(the)34 b(in)n(v)n(erse)d(transformation)g
-(of)i(another)f(supplied)h(Mapping,)h(ignoring)d(the)i(un-used)g
-(transformation)e(in)227 4405 y(eac)n(h)c(Mapping)g(\(indeed)h(the)g
-(un-used)g(transformation)e(need)i(not)f(exist\).)227
-4529 y(When)h(the)f(forw)n(ard)e(transformation)h(of)h(the)g(T)-7
-b(ranMap)26 b(is)h(referred)f(to,)h(the)g(transformation)e(actually)i
-(used)227 4629 y(is)k(the)g(forw)n(ard)e(transformation)h(of)g(the)i
-(\014rst)e(Mapping)h(supplied)g(when)g(the)g(T)-7 b(ranMap)30
-b(w)n(as)g(constructed.)227 4728 y(Lik)n(ewise,)j(when)f(the)h(in)n(v)n
-(erse)d(transformation)h(of)h(the)h(T)-7 b(ranMap)31
-b(is)h(referred)f(to,)i(the)g(transformation)d(ac-)227
-4828 y(tually)f(used)g(is)g(the)g(in)n(v)n(erse)f(transformation)f(of)i
-(the)h(second)e(Mapping)h(supplied)g(when)g(the)h(T)-7
-b(ranMap)28 b(w)n(as)227 4928 y(constructed.)0 5077 y
-Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_TRANMAP\()c(MAP1,)
-i(MAP2,)h(OPTIONS,)e(STATUS)h(\))0 5226 y Fc(Argumen)m(ts:)259
-5361 y(MAP1)32 b(=)g(INTEGER)f(\(Giv)m(en\))427 5461
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(\014rst)f(comp)r(onen)n(t)g
-(Mapping,)h(whic)n(h)f(de\014nes)h(the)g(forw)n(ard)e(transformation.)
-259 5593 y Fc(MAP2)32 b(=)g(INTEGER)f(\(Giv)m(en\))427
-5693 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(second)f(comp)r(onen)n(t)g
-(Mapping,)g(whic)n(h)h(de\014nes)f(the)h(in)n(v)n(erse)f
-(transformation.)p eop end
-%%Page: 365 375
-TeXDict begin 365 374 bop 3643 52 a FG(365)259 351 y
-Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 451 y Fk(A)22 b(c)n(haracter)e
-(string)h(con)n(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g
-(attribute)g(assignmen)n(ts)f(to)g(b)r(e)427 551 y(used)j(for)g
-(initialising)g(the)g(new)g(T)-7 b(ranMap.)35 b(The)24
-b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)g(that)g(for)g(the)g(AST)p
-Ft(_)p Fk(SET)427 650 y(routine.)259 778 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 878
-y Fk(The)c(global)e(status.)0 1035 y Fc(Returned)32 b(V)-8
-b(alue:)259 1167 y(AST)p Ft(_)p Fc(TRANMAP)32 b(=)g(INTEGER)427
-1266 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(T)-7 b(ranMap.)0
-1424 y Fc(Notes:)340 1701 y Fj(\017)45 b Fk(The)36 b(n)n(um)n(b)r(er)g
-(of)g(output)h(co)r(ordinates)d(generated)h(b)n(y)h(the)g(t)n(w)n(o)f
-(Mappings)h(\(their)g(Nout)g(attribute\))427 1801 y(m)n(ust)e(b)r(e)g
-(equal,)h(as)e(m)n(ust)h(the)g(n)n(um)n(b)r(er)f(of)h(input)g(co)r
-(ordinates)e(accepted)i(b)n(y)f(eac)n(h)g(Mapping)g(\(their)427
-1901 y(Nin)28 b(attribute\).)340 2029 y Fj(\017)45 b
-Fk(The)28 b(forw)n(ard)e(transformation)g(of)h(the)h(\014rst)g(Mapping)
-f(m)n(ust)h(exist.)340 2157 y Fj(\017)45 b Fk(The)28
-b(in)n(v)n(erse)e(transformation)g(of)i(the)g(second)f(Mapping)g(m)n
-(ust)g(exist.)340 2285 y Fj(\017)45 b Fk(Note)31 b(that)g(the)g(comp)r
-(onen)n(t)g(Mappings)f(supplied)h(are)e(not)i(copied)g(b)n(y)f(AST)p
-Ft(_)p Fk(TRANMAP)h(\(the)h(new)427 2385 y(T)-7 b(ranMap)40
-b(simply)g(retains)g(a)g(reference)g(to)g(them\).)76
-b(They)41 b(ma)n(y)f(con)n(tin)n(ue)g(to)g(b)r(e)h(used)f(for)g(other)
-427 2484 y(purp)r(oses,)i(but)f(should)f(not)g(b)r(e)g(deleted.)74
-b(If)40 b(a)g(T)-7 b(ranMap)39 b(con)n(taining)f(a)i(cop)n(y)f(of)h
-(its)g(comp)r(onen)n(t)427 2584 y(Mappings)27 b(is)h(required,)e(then)j
-(a)e(cop)n(y)f(of)i(the)g(T)-7 b(ranMap)27 b(should)g(b)r(e)h(made)f
-(using)h(AST)p Ft(_)p Fk(COPY.)340 2712 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 2812
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 2969 y Fc(Status)33
-b(Handling)n(:)227 3115 y Fk(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 3214 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fk(in)n(t)227 3314 y Fj(\003)p Fk(status)p Ft(")p Fk(.)p
-0 3504 3780 12 v 0 3635 a FA(AST)p Fe(_)p FA(TRANN)1240
-3636 y Fd(T)-10 b(ransform)37 b(N-dimensional)1598 3735
-y(co)s(ordinates)2942 3635 y FA(AST)p Fe(_)p FA(TRANN)0
-3891 y Fc(Description:)44 b Fk(This)39 b(routine)f(applies)h(a)f
-(Mapping)h(to)f(transform)g(the)h(co)r(ordinates)e(of)i(a)g(set)f(of)h
-(p)r(oin)n(ts)g(in)g(an)227 3991 y(arbitrary)33 b(n)n(um)n(b)r(er)i(of)
-h(dimensions.)59 b(It)36 b(is)f(the)h(appropriate)d(routine)i(to)g(use)
-g(if)h(the)g(co)r(ordinates)d(are)i(not)227 4091 y(purely)27
-b(1-)g(or)g(2-dimensional)f(and)i(are)e(stored)h(in)h(a)f(single)g
-(arra)n(y)e(\(whic)n(h)j(they)g(need)g(not)f(\014ll)h(completely\).)0
-4235 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_TRANN\()d(THIS,)j
-(NPOINT,)e(NCOORD_IN,)g(INDIM,)h(IN,)h(FORWARD,)f(NCOORD_OUT,)e
-(OUTDIM,)227 4335 y(OUT,)j(STATUS)f(\))0 4480 y Fc(Argumen)m(ts:)259
-4611 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 4711
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Mapping)f(to)g(b)r(e)h(applied.)259
-4839 y Fc(NPOINT)k(=)g(INTEGER)f(\(Giv)m(en\))427 4939
-y Fk(The)d(n)n(um)n(b)r(er)f(of)h(p)r(oin)n(ts)f(to)h(b)r(e)g
-(transformed.)259 5067 y Fc(NCOORD)p Ft(_)p Fc(IN)i(=)i(INTEGER)g
-(\(Giv)m(en\))427 5166 y Fk(The)22 b(n)n(um)n(b)r(er)g(of)g(co)r
-(ordinates)f(b)r(eing)h(supplied)h(for)e(eac)n(h)h(input)h(p)r(oin)n(t)
-f(\(i.e.)35 b(the)23 b(n)n(um)n(b)r(er)f(of)g(dimensions)427
-5266 y(of)28 b(the)g(space)f(in)h(whic)n(h)f(the)h(input)g(p)r(oin)n
-(ts)g(reside\).)259 5394 y Fc(INDIM)k(=)g(INTEGER)f(\(Giv)m(en\))427
-5494 y Fk(The)e(n)n(um)n(b)r(er)f(of)g(elemen)n(ts)g(along)f(the)i
-(\014rst)f(dimension)g(of)g(the)h(IN)f(arra)n(y)e(\(whic)n(h)j(con)n
-(tains)e(the)i(input)427 5593 y(co)r(ordinates\).)37
-b(This)28 b(v)-5 b(alue)28 b(is)g(required)f(so)h(that)g(the)g(co)r
-(ordinate)f(v)-5 b(alues)28 b(can)f(b)r(e)i(correctly)d(lo)r(cated)i
-(if)427 5693 y(they)g(do)f(not)h(en)n(tirely)f(\014ll)h(this)g(arra)n
-(y)-7 b(.)34 b(The)28 b(v)-5 b(alue)28 b(giv)n(en)e(should)i(not)f(b)r
-(e)h(less)f(than)h(NPOINT.)p eop end
-%%Page: 366 376
-TeXDict begin 366 375 bop 0 52 a FG(366)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(IN\()h(INDIM,)f
-(NCOORD)p Ft(_)p Fc(IN)g(\))h(=)g(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427
-451 y Fk(An)i(arra)n(y)d(con)n(taining)h(the)h(co)r(ordinates)f(of)h
-(the)g(input)h(\(un)n(transformed\))e(p)r(oin)n(ts.)51
-b(These)31 b(should)h(b)r(e)427 551 y(stored)c(suc)n(h)f(that)i(the)f
-(v)-5 b(alue)28 b(of)g(co)r(ordinate)f(n)n(um)n(b)r(er)h(COORD)g(for)f
-(input)i(p)r(oin)n(t)f(n)n(um)n(b)r(er)g(POINT)g(is)427
-650 y(found)g(in)g(elemen)n(t)g(IN\(POINT,COORD\).)259
-780 y Fc(F)m(OR)-11 b(W)g(ARD)32 b(=)g(LOGICAL)h(\(Giv)m(en\))427
-879 y Fk(A)38 b(.TR)n(UE.)e(v)-5 b(alue)37 b(indicates)g(that)h(the)f
-(Mapping's)g(forw)n(ard)e(co)r(ordinate)h(transformation)f(is)i(to)g(b)
-r(e)427 979 y(applied,)28 b(while)g(a)f(.F)-9 b(ALSE.)27
-b(v)-5 b(alue)28 b(indicates)f(that)h(the)g(in)n(v)n(erse)e
-(transformation)g(should)i(b)r(e)g(used.)259 1109 y Fc(NCOORD)p
-Ft(_)p Fc(OUT)j(=)h(INTEGER)f(\(Giv)m(en\))427 1208 y
-Fk(The)g(n)n(um)n(b)r(er)e(of)i(co)r(ordinates)d(b)r(eing)j(generated)e
-(b)n(y)h(the)g(Mapping)g(for)g(eac)n(h)f(output)i(p)r(oin)n(t)f(\(i.e.)
-45 b(the)427 1308 y(n)n(um)n(b)r(er)28 b(of)g(dimensions)g(of)h(the)f
-(space)g(in)g(whic)n(h)h(the)f(output)h(p)r(oin)n(ts)f(reside\).)39
-b(This)28 b(need)g(not)h(b)r(e)f(the)427 1408 y(same)f(as)g(NCOORD)p
-Ft(_)p Fk(IN.)259 1537 y Fc(OUTDIM)33 b(=)f(INTEGER)f(\(Giv)m(en\))427
-1637 y Fk(The)e(n)n(um)n(b)r(er)f(of)g(elemen)n(ts)h(along)e(the)i
-(\014rst)f(dimension)g(of)h(the)g(OUT)f(arra)n(y)e(\(whic)n(h)j(will)f
-(con)n(tain)g(the)427 1737 y(output)35 b(co)r(ordinates\).)56
-b(This)34 b(v)-5 b(alue)34 b(is)g(required)f(so)h(that)g(the)h(co)r
-(ordinate)e(v)-5 b(alues)34 b(can)g(b)r(e)g(correctly)427
-1836 y(lo)r(cated)40 b(if)h(they)f(will)h(not)f(en)n(tirely)g(\014ll)g
-(this)h(arra)n(y)-7 b(.)72 b(The)40 b(v)-5 b(alue)41
-b(giv)n(en)e(should)h(not)g(b)r(e)h(less)e(than)427 1936
-y(NPOINT.)259 2066 y Fc(OUT\()33 b(OUTDIM,)f(NCOORD)p
-Ft(_)p Fc(OUT)f(\))h(=)g(DOUBLE)g(PRECISION)f(\(Returned\))427
-2165 y Fk(An)22 b(arra)n(y)d(in)n(to)i(whic)n(h)g(the)h(co)r(ordinates)
-d(of)j(the)f(output)h(\(transformed\))f(p)r(oin)n(ts)g(will)g(b)r(e)h
-(written.)35 b(These)427 2265 y(will)e(b)r(e)g(stored)f(suc)n(h)g(that)
-h(the)g(v)-5 b(alue)33 b(of)f(co)r(ordinate)g(n)n(um)n(b)r(er)g(COORD)h
-(for)f(output)h(p)r(oin)n(t)g(n)n(um)n(b)r(er)427 2365
-y(POINT)27 b(will)h(b)r(e)g(found)g(in)g(elemen)n(t)g
-(OUT\(POINT,COORD\).)259 2494 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 2594
-y Fk(The)c(global)e(status.)0 2753 y Fc(Notes:)340 3032
-y Fj(\017)45 b Fk(If)31 b(the)g(forw)n(ard)e(co)r(ordinate)h
-(transformation)f(is)h(b)r(eing)h(applied,)h(the)f(Mapping)f(supplied)h
-(m)n(ust)g(ha)n(v)n(e)427 3132 y(the)24 b(v)-5 b(alue)23
-b(of)g(NCOORD)p Ft(_)p Fk(IN)h(for)e(its)i(Nin)g(attribute)f(and)g(the)
-h(v)-5 b(alue)23 b(of)g(NCOORD)p Ft(_)p Fk(OUT)g(for)g(its)g(Nout)427
-3231 y(attribute.)37 b(If)28 b(the)g(in)n(v)n(erse)e(transformation)g
-(is)i(b)r(eing)g(applied,)f(these)h(v)-5 b(alues)27 b(should)g(b)r(e)h
-(rev)n(ersed.)p 0 3424 3780 12 v 0 3555 a FA(AST)p Fe(_)p
-FA(TUNE)1062 3556 y Fd(Set)39 b(or)f(get)g(an)h(AST)f(global)f(tuning)
-1630 3656 y(parameter)3058 3555 y FA(AST)p Fe(_)p FA(TUNE)0
-3838 y Fc(Description:)44 b Fk(This)35 b(function)g(returns)f(the)g
-(curren)n(t)g(v)-5 b(alue)34 b(of)h(an)f(AST)h(global)e(tuning)i
-(parameter,)f(optionally)227 3938 y(storing)27 b(a)g(new)h(v)-5
-b(alue)27 b(for)g(the)h(parameter.)0 4084 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_TUNE\()d(NAME,)h(VALUE,)h(STATUS)f(\))0
-4231 y Fc(Argumen)m(ts:)259 4364 y(NAME)31 b(=)h(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-4464 y Fk(The)c(name)f(of)h(the)g(tuning)g(parameter)e
-(\(case-insensitiv)n(e\).)259 4593 y Fc(V)-11 b(ALUE)33
-b(=)f(INTEGER)g(\(Giv)m(en\))427 4693 y Fk(The)22 b(new)g(v)-5
-b(alue)22 b(for)f(the)h(tuning)g(parameter.)34 b(If)22
-b(this)g(is)g(AST)p Ft(__)p Fk(TUNULL,)g(the)g(existing)g(curren)n(t)f
-(v)-5 b(alue)427 4793 y(will)28 b(b)r(e)g(retained.)259
-4922 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5022 y Fk(The)c(global)e(status.)0 5181
-y Fc(Returned)32 b(V)-8 b(alue:)259 5314 y(AST)p Ft(_)p
-Fc(TUNE)32 b(=)h(INTEGER)427 5414 y Fk(b)r(e)28 b(returned)f(if)i(no)e
-(v)-5 b(alue)27 b(has)g(b)r(een)h(set)g(for)f(the)h(parameter.)0
-5572 y Fc(Notes:)p eop end
-%%Page: 367 377
-TeXDict begin 367 376 bop 3643 52 a FG(367)340 351 y
-Fj(\017)45 b Fk(This)28 b(routine)f(attempts)g(to)h(execute)f(ev)n(en)g
-(if)g(ST)-7 b(A)g(TUS)29 b(is)e(set)g(to)h(an)f(error)e(v)-5
-b(alue)27 b(on)g(en)n(try)-7 b(,)27 b(although)427 451
-y(no)h(further)f(error)f(rep)r(ort)h(will)g(b)r(e)h(made)g(if)g(it)g
-(subsequen)n(tly)f(fails)g(under)h(these)g(circumstances.)340
-576 y Fj(\017)45 b Fk(All)28 b(threads)f(in)h(a)f(pro)r(cess)g(share)f
-(the)i(same)f(AST)h(tuning)g(parameters)e(v)-5 b(alues.)32
-730 y Fc(T)d(uning)31 b(P)m(arameters)i(:)259 858 y(Ob)5
-b(jectCac)m(hing)427 958 y Fk(A)38 b(b)r(o)r(olean)f(\015ag)g(whic)n(h)
-h(indicates)f(what)h(should)f(happ)r(en)h(to)g(the)g(memory)f(o)r
-(ccupied)g(b)n(y)h(an)f(AST)427 1057 y(Ob)5 b(ject)28
-b(when)h(the)f(Ob)5 b(ject)29 b(is)f(deleted)g(\(i.e.)40
-b(when)28 b(its)g(reference)g(coun)n(t)g(falls)g(to)g(zero)f(or)g(it)i
-(is)f(deleted)427 1157 y(using)k(AST)p Ft(_)p Fk(DELETE\).)f(If)h(this)
-h(is)f(zero,)g(the)g(memory)f(is)h(simply)g(freed)g(using)g(the)g
-(systems)g Ft(")p Fk(free)p Ft(")427 1257 y Fk(function.)37
-b(If)26 b(it)g(is)f(non-zero,)g(the)g(memory)g(is)h(not)f(freed.)36
-b(Instead)25 b(a)g(p)r(oin)n(ter)h(to)f(it)h(is)f(stored)g(in)h(a)f(p)r
-(o)r(ol)427 1356 y(of)i(suc)n(h)g(p)r(oin)n(ters,)g(all)g(of)g(whic)n
-(h)g(refer)f(to)h(allo)r(cated)f(but)i(curren)n(tly)e(un)n(used)h(blo)r
-(c)n(ks)g(of)g(memory)-7 b(.)36 b(This)427 1456 y(allo)n(ws)24
-b(AST)h(to)g(sp)r(eed)g(up)g(subsequen)n(t)g(Ob)5 b(ject)25
-b(creation)e(b)n(y)i(re-using)f(previously)f(allo)r(cated)h(memory)427
-1556 y(blo)r(c)n(ks)32 b(rather)g(than)h(allo)r(cating)e(new)i(memory)f
-(using)h(the)g(systems)f(mallo)r(c)g(function.)53 b(The)33
-b(default)427 1655 y(v)-5 b(alue)29 b(for)f(this)h(parameter)e(is)h
-(zero.)39 b(Setting)28 b(it)h(to)g(a)f(non-zero)f(v)-5
-b(alue)28 b(will)h(result)f(in)h(Ob)5 b(ject)28 b(memory)427
-1755 y(b)r(eing)33 b(cac)n(hed)g(in)g(future.)53 b(Setting)33
-b(it)h(bac)n(k)e(to)h(zero)f(causes)g(an)n(y)g(memory)g(blo)r(c)n(ks)g
-(curren)n(tly)g(in)h(the)427 1854 y(p)r(o)r(ol)e(to)g(b)r(e)g(freed.)47
-b(Note,)31 b(this)h(tuning)f(parameter)e(only)i(con)n(trols)e(the)i
-(cac)n(hing)f(of)h(memory)f(used)h(to)427 1954 y(store)c(AST)h(Ob)5
-b(jects.)36 b(T)-7 b(o)28 b(cac)n(he)e(other)h(memory)g(blo)r(c)n(ks)g
-(allo)r(cated)g(b)n(y)g(AST,)h(use)g(MemoryCac)n(hing.)259
-2079 y Fc(MemoryCac)m(hing)427 2179 y Fk(A)e(b)r(o)r(olean)f(\015ag)f
-(similar)g(to)i(Ob)5 b(jectCac)n(hing)24 b(except)h(that)g(it)h(con)n
-(trols)e(cac)n(hing)g(of)h(all)g(memory)f(blo)r(c)n(ks)427
-2278 y(of)40 b(less)f(than)h(300)f(b)n(ytes)g(allo)r(cated)h(b)n(y)f
-(AST)h(\(whether)g(for)g(in)n(ternal)f(or)g(external)g(use\),)k(not)d
-(just)427 2378 y(memory)27 b(used)h(to)f(store)g(AST)h(Ob)5
-b(jects.)p 0 2561 3780 12 v 0 2692 a FA(AST)p Fe(_)p
-FA(UINTERP)1435 2693 y Fd(P)m(erform)36 b(sub-pixel)1116
-2807 y(in)m(terp)s(olation)d(on)j(a)h(grid)f(of)g(data)2816
-2692 y FA(AST)p Fe(_)p FA(UINTERP)0 2980 y Fc(Description:)44
-b Fk(This)33 b(is)g(a)g(\014ctitious)g(routine)g(whic)n(h)g(do)r(es)g
-(not)g(actually)g(exist.)53 b(Instead,)34 b(this)g(description)e(con-)
-227 3080 y(stitutes)40 b(a)e(template)i(so)e(that)h(y)n(ou)f(ma)n(y)h
-(implemen)n(t)g(a)g(routine)f(with)i(this)f(in)n(terface)f(for)h(y)n
-(ourself)e(\(and)227 3180 y(giv)n(e)d(it)g(an)n(y)g(name)g(y)n(ou)g
-(wish\).)57 b(Suc)n(h)34 b(a)g(routine)g(ma)n(y)g(b)r(e)h(passed)e(via)
-h(the)h(FINTERP)f(argumen)n(t)f(of)h(the)227 3279 y(AST)p
-Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)24 b Fk(functions)i(\(q.v.\))37
-b(in)25 b(order)g(to)g(p)r(erform)g(sub-pixel)g(in)n(terp)r(olation)g
-(during)g(resam-)227 3379 y(pling)i(of)g(gridded)g(data)f(\(y)n(ou)h(m)
-n(ust)g(also)f(set)h(the)g(INTERP)g(argumen)n(t)f(of)h(AST)p
-Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)e Fk(to)i(the)227
-3479 y(v)-5 b(alue)31 b(AST)p Ft(__)p Fk(UINTERP\).)f(This)h(allo)n(ws)
-e(y)n(ou)h(to)g(use)h(y)n(our)e(o)n(wn)h(in)n(terp)r(olation)g
-(algorithm)f(in)i(addition)g(to)227 3578 y(those)d(whic)n(h)f(are)g
-(pre-de\014ned.)227 3699 y(The)38 b(routine)f(in)n(terp)r(olates)f(an)h
-(input)i(grid)d(of)i(data)f(\(and,)j(optionally)-7 b(,)39
-b(pro)r(cesses)d(asso)r(ciated)g(statistical)227 3798
-y(v)-5 b(ariance)27 b(estimates\))g(at)h(a)f(sp)r(eci\014ed)h(set)f(of)
-h(p)r(oin)n(ts.)0 3940 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_UINTERP\()c(NDIM_IN,)j(LBND_IN,)f(UBND_IN,)g(IN,)i
-(IN_VAR,)f(NPOINT,)g(OFFSET,)g(COORDS,)227 4039 y(PARAMS,)g(FLAGS,)g
-(BADVAL,)g(OUT,)h(OUT_VAR,)e(NBAD,)h(STATUS)h(\))0 4181
-y Fc(Argumen)m(ts:)259 4309 y(NDIM)p Ft(_)p Fc(IN)31
-b(=)h(INTEGER)g(\(Giv)m(en\))427 4409 y Fk(The)c(n)n(um)n(b)r(er)f(of)h
-(dimensions)f(in)h(the)g(input)g(grid.)36 b(This)28 b(will)g(b)r(e)g
-(at)f(least)h(one.)259 4534 y Fc(LBND)p Ft(_)p Fc(IN\()k(NDIM)p
-Ft(_)p Fc(IN)f(\))h(=)g(INTEGER)f(\(Giv)m(en\))427 4634
-y Fk(An)j(arra)n(y)d(con)n(taining)h(the)i(co)r(ordinates)e(of)h(the)h
-(cen)n(tre)f(of)g(the)g(\014rst)h(pixel)f(in)g(the)h(input)g(grid)f
-(along)427 4733 y(eac)n(h)27 b(dimension.)259 4858 y
-Fc(UBND)p Ft(_)p Fc(IN\()32 b(NDIM)p Ft(_)p Fc(IN)f(\))h(=)g(INTEGER)f
-(\(Giv)m(en\))427 4958 y Fk(An)k(arra)n(y)d(con)n(taining)h(the)h(co)r
-(ordinates)f(of)h(the)h(cen)n(tre)f(of)g(the)g(last)g(pixel)g(in)h(the)
-f(input)h(grid)f(along)427 5057 y(eac)n(h)27 b(dimension.)427
-5170 y(Note)e(that)g(LBND)p Ft(_)p Fk(IN)g(and)g(UBND)p
-Ft(_)p Fk(IN)g(together)f(de\014ne)h(the)g(shap)r(e,)g(size)g(and)g(co)
-r(ordinate)e(system)i(of)427 5269 y(the)j(input)h(grid)e(in)g(the)h
-(same)f(w)n(a)n(y)g(as)g(they)g(do)h(in)g(AST)p Ft(_)p
-Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)p Fk(.)259 5394 y Fc(IN\()k
-Fj(\003)f Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p Fm(>)g
-Fc(\(Giv)m(en\))427 5494 y Fk(An)d(arra)n(y)-7 b(,)26
-b(with)j(one)f(elemen)n(t)h(for)f(eac)n(h)f(pixel)h(in)h(the)g(input)g
-(grid,)f(con)n(taining)f(the)i(input)g(data.)39 b(This)427
-5593 y(will)31 b(b)r(e)g(the)f(same)g(arra)n(y)e(as)i(w)n(as)f(passed)g
-(to)i(AST)p Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)d
-Fk(via)i(the)h(IN)g(argumen)n(t.)44 b(The)427 5693 y(n)n(umerical)27
-b(t)n(yp)r(e)h(of)f(this)h(arra)n(y)e(should)h(matc)n(h)g(that)h(of)g
-(the)g(data)f(b)r(eing)g(pro)r(cessed.)p eop end
-%%Page: 368 378
-TeXDict begin 368 377 bop 0 52 a FG(368)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(IN)p
-Ft(_)p Fc(V)-11 b(AR\()32 b Fj(\003)f Fc(\))h(=)g Fm(<)p
-Fc(Xt)m(yp)s(e)p Fm(>)g Fc(\(Giv)m(en\))427 451 y Fk(An)24
-b(optional)e(second)h(arra)n(y)e(with)j(the)f(same)g(size)g(and)g(t)n
-(yp)r(e)g(as)g(the)h(IN)f(arra)n(y)-7 b(.)33 b(This)24
-b(will)f(only)g(b)r(e)g(giv)n(en)427 551 y(if)30 b(the)f(AST)p
-Ft(__)p Fk(USEV)-9 b(AR)29 b(\015ag)f(is)h(set)g(via)f(the)i(FLA)n(GS)f
-(argumen)n(t)f(\(b)r(elo)n(w\).)41 b(If)29 b(giv)n(en,)g(it)g(will)g
-(con)n(tain)427 650 y(the)i(set)f(of)g(v)-5 b(ariance)29
-b(v)-5 b(alues)29 b(asso)r(ciated)g(with)h(the)h(input)g(data)e(and)h
-(will)g(b)r(e)h(the)f(same)g(arra)n(y)d(as)j(w)n(as)427
-750 y(passed)d(to)h(AST)p Ft(_)p Fk(RESAMPLE)p Fm(<)p
-Fk(X)p Fm(>)e Fk(via)h(the)h(IN)p Ft(_)p Fk(V)-9 b(AR)28
-b(argumen)n(t.)427 862 y(If)33 b(the)f(AST)p Ft(__)p
-Fk(USEV)-9 b(AR)33 b(\015ag)e(is)h(not)g(set,)i(then)e(no)g(v)-5
-b(ariance)31 b(v)-5 b(alues)32 b(are)f(b)r(eing)h(pro)r(cessed.)50
-b(In)32 b(this)427 962 y(case,)27 b(this)h(arra)n(y)d(of)i(v)-5
-b(ariance)27 b(v)-5 b(alues)27 b(ma)n(y)f(b)r(e)i(a)f(dumm)n(y)h
-(\(e.g.)37 b(one-elemen)n(t\))27 b(arra)n(y)e(and)i(should)h(not)427
-1062 y(b)r(e)g(used.)259 1187 y Fc(NPOINT)k(=)g(INTEGER)f(\(Giv)m(en\))
-427 1287 y Fk(The)26 b(n)n(um)n(b)r(er)f(of)g(p)r(oin)n(ts)h(at)f(whic)
-n(h)g(the)h(input)g(grid)f(is)g(to)g(b)r(e)h(in)n(terp)r(olated.)36
-b(This)25 b(will)h(b)r(e)g(at)f(least)g(one.)259 1413
-y Fc(OFFSET\()32 b(NPOINT)g(\))g(=)g(INTEGER)f(\(Giv)m(en\))427
-1512 y Fk(F)-7 b(or)23 b(eac)n(h)g(in)n(terp)r(olation)g(p)r(oin)n(t,)h
-(this)g(arra)n(y)d(will)j(con)n(tain)e(the)i(o\013set)g(from)f(the)h
-(start)f(of)g(the)h(OUT)f(\(and)427 1612 y(OUT)p Ft(_)p
-Fk(V)-9 b(AR\))35 b(arra)n(y\(s\))d(at)i(whic)n(h)g(the)h(in)n(terp)r
-(olated)e(v)-5 b(alue)34 b(\(and)h(its)f(v)-5 b(ariance,)35
-b(if)f(required\))g(should)427 1712 y(b)r(e)28 b(stored.)36
-b(F)-7 b(or)26 b(example,)h(the)h(in)n(terp)r(olated)e(v)-5
-b(alue)27 b(for)g(p)r(oin)n(t)g(n)n(um)n(b)r(er)g(POINT)g(should)f(b)r
-(e)i(stored)e(in)427 1811 y(OUT\(1+OFFSET\(POINT\)\).)259
-1937 y Fc(COORDS\()31 b(NPOINT,)h(NDIM)p Ft(_)p Fc(IN)f(\))h(=)g
-(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427 2037 y Fk(A)26
-b(2-dimensional)e(arra)n(y)g(con)n(taining)g(the)i(co)r(ordinates)e(of)
-i(the)g(p)r(oin)n(ts)f(at)h(whic)n(h)f(in)n(terp)r(olation)g(should)427
-2136 y(b)r(e)37 b(p)r(erformed.)63 b(These)36 b(will)g(b)r(e)h(stored)f
-(so)g(that)g(co)r(ordinate)f(n)n(um)n(b)r(er)i(COORD)f(for)f(in)n(terp)
-r(olation)427 2236 y(p)r(oin)n(t)28 b(n)n(um)n(b)r(er)f(POINT)g(is)h
-(found)g(in)g(elemen)n(t)f(COORDS\(POINT,COORD\).)427
-2348 y(If)42 b(an)n(y)f(in)n(terp)r(olation)f(p)r(oin)n(t)i(has)f(an)n
-(y)f(of)i(its)f(co)r(ordinates)f(equal)h(to)g(the)h(v)-5
-b(alue)42 b(AST)p Ft(__)p Fk(BAD)f(\(as)427 2448 y(de\014ned)35
-b(in)g(the)h(AST)p Ft(_)p Fk(P)-7 b(AR)34 b(include)i(\014le\),)h(then)
-e(the)g(corresp)r(onding)e(output)i(data)g(\(and)g(v)-5
-b(ariance\))427 2548 y(should)23 b(either)g(b)r(e)g(set)g(to)g(the)g(v)
--5 b(alue)23 b(giv)n(en)g(b)n(y)f(BAD)n(V)-9 b(AL,)24
-b(or)e(left)h(unc)n(hanged,)h(dep)r(ending)f(on)g(whether)427
-2647 y(the)28 b(AST)p Ft(__)p Fk(NOBAD)g(\015ag)f(is)g(sp)r(eci\014ed)h
-(b)n(y)f(FLA)n(GS.)259 2773 y Fc(P)-8 b(ARAMS\()32 b
-Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en\))427
-2873 y Fk(This)19 b(will)f(b)r(e)h(the)g(same)f(arra)n(y)e(as)h(w)n(as)
-h(giv)n(en)f(via)h(the)h(P)-7 b(ARAMS)19 b(argumen)n(t)e(of)h(AST)p
-Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)p Fk(.)427 2972
-y(Y)-7 b(ou)28 b(ma)n(y)f(use)h(this)g(to)g(pass)f(an)n(y)h(additional)
-f(parameter)f(v)-5 b(alues)28 b(required)f(b)n(y)h(y)n(our)e(in)n(terp)
-r(olation)h(al-)427 3072 y(gorithm.)259 3198 y Fc(FLA)m(GS)33
-b(=)f(INTEGER)f(\(Giv)m(en\))427 3297 y Fk(This)21 b(will)g(b)r(e)g
-(the)h(same)e(v)-5 b(alue)21 b(as)f(w)n(as)g(giv)n(en)g(via)g(the)h
-(FLA)n(GS)h(argumen)n(t)d(of)i(AST)p Ft(_)p Fk(RESAMPLE)p
-Fm(<)p Fk(X)p Fm(>)p Fk(.)427 3397 y(Y)-7 b(ou)30 b(ma)n(y)f(test)g
-(this)h(v)-5 b(alue)29 b(to)h(pro)n(vide)e(additional)h(con)n(trol)f(o)
-n(v)n(er)g(the)i(op)r(eration)e(of)i(y)n(our)e(resampling)427
-3497 y(algorithm.)52 b(Note)34 b(that)f(the)g(sp)r(ecial)g(\015ag)f(v)
--5 b(alues)33 b(AST)p Ft(__)p Fk(URESAMP1,)h(2,)g(3)e(&)h(4)g(are)f
-(reserv)n(ed)f(for)427 3596 y(y)n(ou)g(to)h(use)f(for)g(y)n(our)g(o)n
-(wn)g(purp)r(oses)f(and)i(will)g(not)f(clash)g(with)h(other)f
-(pre-de\014ned)h(\015ag)e(v)-5 b(alues)32 b(\(see)427
-3696 y(AST)p Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)p
-Fk(\).)259 3821 y Fc(BAD)m(V)-11 b(AL)34 b(=)e Fm(<)p
-Fc(Xt)m(yp)s(e)p Fm(>)f Fc(\(Giv)m(en\))427 3921 y Fk(This)19
-b(will)f(b)r(e)h(the)g(same)f(v)-5 b(alue)18 b(as)f(w)n(as)h(giv)n(en)f
-(for)h(the)h(BAD)n(V)-9 b(AL)19 b(argumen)n(t)e(of)h(AST)p
-Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)p Fk(,)427 4021
-y(and)40 b(will)g(ha)n(v)n(e)f(the)h(same)g(n)n(umerical)f(t)n(yp)r(e)h
-(as)f(the)i(data)e(b)r(eing)h(pro)r(cessed)f(\(i.e.)75
-b(as)39 b(elemen)n(ts)h(of)427 4120 y(the)d(IN)f(arra)n(y\).)60
-b(It)36 b(should)g(b)r(e)g(used)g(to)g(test)h(for)e(bad)h(pixels)g(in)g
-(the)g(input)h(grid)e(\(but)i(only)f(if)g(the)427 4220
-y(AST)p Ft(__)p Fk(USEBAD)26 b(\015ag)e(is)i(set)f(via)g(the)h(FLA)n
-(GS)g(argumen)n(t\))f(and)g(\(unless)h(the)g(AST)p Ft(__)p
-Fk(NOBAD)f(\015ag)g(is)427 4320 y(set)j(in)g(FLA)n(GS\))g(for)f(iden)n
-(tifying)h(bad)f(output)h(v)-5 b(alues)28 b(in)g(the)g(OUT)f(\(and)h
-(OUT)p Ft(_)p Fk(V)-9 b(AR\))27 b(arra)n(y\(s\).)259
-4445 y Fc(OUT\()33 b Fj(\003)e Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p
-Fm(>)f Fc(\(Returned\))427 4545 y Fk(An)36 b(arra)n(y)d(with)j(the)f
-(same)g(n)n(umerical)f(t)n(yp)r(e)i(as)e(the)i(IN)g(arra)n(y)-7
-b(,)35 b(in)n(to)g(whic)n(h)g(the)g(in)n(terp)r(olated)g(data)427
-4645 y(v)-5 b(alues)29 b(should)f(b)r(e)h(returned.)40
-b(Note)29 b(that)g(details)f(of)h(the)g(storage)e(order)g(and)i(n)n(um)
-n(b)r(er)f(of)h(dimensions)427 4744 y(of)34 b(this)h(arra)n(y)c(are)i
-(not)i(required,)f(since)g(the)h(OFFSET)e(arra)n(y)f(con)n(tains)h(all)
-h(necessary)e(information)427 4844 y(ab)r(out)c(where)f(eac)n(h)g
-(returned)g(v)-5 b(alue)27 b(should)h(b)r(e)g(stored.)427
-4957 y(In)e(general,)e(not)h(all)g(elemen)n(ts)g(of)g(this)g(arra)n(y)e
-(\(or)i(the)g(OUT)p Ft(_)p Fk(V)-9 b(AR)25 b(arra)n(y)e(b)r(elo)n(w\))i
-(ma)n(y)f(b)r(e)i(used)f(in)g(an)n(y)427 5056 y(particular)c(in)n(v)n
-(o)r(cation)g(of)h(the)g(routine.)35 b(Those)21 b(whic)n(h)h(are)f(not)
-h(used)g(should)g(b)r(e)h(returned)e(unc)n(hanged.)259
-5182 y Fc(OUT)p Ft(_)p Fc(V)-11 b(AR\()33 b Fj(\003)e
-Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p Fm(>)f Fc(\(Returned\))427
-5281 y Fk(An)k(optional)f(arra)n(y)e(with)i(the)h(same)f(t)n(yp)r(e)g
-(and)g(size)g(as)g(the)h(OUT)f(arra)n(y)-7 b(,)34 b(in)n(to)g(whic)n(h)
-g(v)-5 b(ariance)33 b(es-)427 5381 y(timates)j(for)f(the)h(resampled)e
-(v)-5 b(alues)35 b(should)h(b)r(e)f(returned.)60 b(This)36
-b(arra)n(y)d(will)j(only)f(b)r(e)h(giv)n(en)e(if)i(the)427
-5481 y(AST)p Ft(__)p Fk(USEV)-9 b(AR)28 b(\015ag)f(is)g(set)h(via)f
-(the)h(FLA)n(GS)g(argumen)n(t.)427 5593 y(If)g(giv)n(en,)e(it)i(is)f
-(addressed)f(in)h(exactly)g(the)g(same)g(w)n(a)n(y)f(\(via)g(the)i
-(OFFSET)f(arra)n(y\))e(as)h(the)i(OUT)f(arra)n(y)-7 b(.)427
-5693 y(The)22 b(v)-5 b(alues)21 b(returned)g(should)h(b)r(e)g
-(estimates)f(of)h(the)g(statistical)f(v)-5 b(ariance)21
-b(of)g(the)h(corresp)r(onding)e(v)-5 b(alues)p eop end
-%%Page: 369 379
-TeXDict begin 369 378 bop 3643 52 a FG(369)427 351 y
-Fk(in)36 b(the)g(OUT)g(arra)n(y)-7 b(,)36 b(on)f(the)h(assumption)f
-(that)h(all)g(errors)d(in)j(input)h(data)e(v)-5 b(alues)35
-b(are)g(statistically)427 451 y(indep)r(enden)n(t)40
-b(and)f(that)g(their)f(v)-5 b(ariance)38 b(estimates)g(ma)n(y)h(simply)
-f(b)r(e)i(summed)f(\(with)g(appropriate)427 551 y(w)n(eigh)n(ting)27
-b(factors\).)427 668 y(If)k(the)g(AST)p Ft(__)p Fk(USEV)-9
-b(AR)30 b(\015ag)f(is)i(not)f(set,)h(then)g(v)-5 b(ariance)29
-b(v)-5 b(alues)30 b(are)f(not)i(b)r(eing)f(pro)r(cessed.)44
-b(In)30 b(this)427 767 y(case,)d(this)h(arra)n(y)d(ma)n(y)i(b)r(e)h(a)f
-(dumm)n(y)h(\(e.g.)37 b(one-elemen)n(t\))27 b(arra)n(y)e(and)j(should)f
-(not)h(b)r(e)g(used.)259 902 y Fc(NBAD)k(=)g(INTEGER)f(\(Returned\))427
-1001 y Fk(This)h(should)g(return)f(the)h(n)n(um)n(b)r(er)g(of)f(in)n
-(terp)r(olation)g(p)r(oin)n(ts)h(at)f(whic)n(h)h(no)g(v)-5
-b(alid)31 b(in)n(terp)r(olated)h(v)-5 b(alue)427 1101
-y(could)29 b(b)r(e)g(obtained.)39 b(The)29 b(maxim)n(um)f(v)-5
-b(alue)28 b(that)h(should)f(b)r(e)h(returned)f(is)h(NPOINT,)f(and)h
-(the)f(mini-)427 1201 y(m)n(um)g(is)g(zero)e(\(indicating)i(that)g(all)
-f(output)h(v)-5 b(alues)27 b(w)n(ere)g(successfully)g(obtained\).)259
-1335 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 1435 y Fk(The)c(global)e(status.)0 1600
-y Fc(Notes:)340 1886 y Fj(\017)45 b Fk(The)37 b(data)e(t)n(yp)r(e)i
-Fm(<)p Fk(Xt)n(yp)r(e)p Fm(>)f Fk(indicates)g(the)g(n)n(umerical)g(t)n
-(yp)r(e)g(of)g(the)h(data)f(b)r(eing)g(pro)r(cessed,)i(as)d(for)427
-1985 y(AST)p Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)p
-Fk(.)340 2120 y Fj(\017)45 b Fk(This)19 b(routine)f(will)g(t)n
-(ypically)g(b)r(e)h(in)n(v)n(ok)n(ed)e(more)g(than)i(once)f(for)f(eac)n
-(h)h(in)n(v)n(o)r(cation)f(of)h(AST)p Ft(_)p Fk(RESAMPLE)p
-Fm(<)p Fk(X)p Fm(>)p Fk(.)340 2254 y Fj(\017)45 b Fk(If)29
-b(an)g(error)d(o)r(ccurs)i(within)h(this)g(routine,)f(it)h(should)g
-(set)f(the)h(ST)-7 b(A)g(TUS)30 b(argumen)n(t)d(to)i(an)f(error)f(v)-5
-b(alue)427 2354 y(b)r(efore)34 b(returning.)56 b(This)34
-b(will)h(cause)e(an)h(immediate)h(return)e(from)h(AST)p
-Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)p Fk(.)56 b(The)427
-2453 y(error)32 b(v)-5 b(alue)34 b(AST)p Ft(__)p Fk(UINER)g(is)g(a)n(v)
--5 b(ailable)33 b(for)g(this)i(purp)r(ose,)g(but)g(other)e(v)-5
-b(alues)34 b(ma)n(y)f(also)g(b)r(e)i(used)427 2553 y(\(e.g.)54
-b(if)34 b(y)n(ou)f(wish)g(to)g(distinguish)h(di\013eren)n(t)f(t)n(yp)r
-(es)h(of)f(error\).)53 b(The)33 b(AST)p Ft(__)p Fk(UINER)g(error)e(v)-5
-b(alue)34 b(is)427 2653 y(de\014ned)28 b(in)g(the)g(AST)p
-Ft(_)p Fk(ERR)f(include)h(\014le.)p 0 2855 3780 12 v
-0 2986 a FA(AST)p Fe(_)p FA(UKERN1)1289 2987 y Fd(1-dimensional)36
-b(sub-pixel)1389 3101 y(in)m(terp)s(olation)f(k)m(ernel)2879
-2986 y FA(AST)p Fe(_)p FA(UKERN1)0 3294 y Fc(Description:)44
-b Fk(This)33 b(is)g(a)g(\014ctitious)g(routine)g(whic)n(h)g(do)r(es)g
-(not)g(actually)g(exist.)53 b(Instead,)34 b(this)g(description)e(con-)
-227 3393 y(stitutes)40 b(a)e(template)i(so)e(that)h(y)n(ou)f(ma)n(y)h
-(implemen)n(t)g(a)g(routine)f(with)i(this)f(in)n(terface)f(for)h(y)n
-(ourself)e(\(and)227 3493 y(giv)n(e)d(it)g(an)n(y)g(name)g(y)n(ou)g
-(wish\).)57 b(Suc)n(h)34 b(a)g(routine)g(ma)n(y)g(b)r(e)h(passed)e(via)
-h(the)h(FINTERP)f(argumen)n(t)f(of)h(the)227 3592 y(AST)p
-Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)24 b Fk(functions)h(\(q.v.\))36
-b(in)25 b(order)f(to)h(supply)g(a)f(1-dimensional)g(in)n(terp)r
-(olation)g(k)n(ernel)g(to)227 3692 y(the)h(algorithm)f(whic)n(h)g(p)r
-(erforms)g(sub-pixel)h(in)n(terp)r(olation)f(during)g(resampling)f(of)i
-(gridded)f(data)g(\(y)n(ou)g(m)n(ust)227 3792 y(also)33
-b(set)g(the)h(INTERP)f(argumen)n(t)g(of)h(AST)p Ft(_)p
-Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)e Fk(to)h(the)h(v)-5
-b(alue)34 b(AST)p Ft(__)p Fk(UKERN1\).)54 b(This)227
-3891 y(allo)n(ws)26 b(y)n(ou)h(to)h(use)f(y)n(our)g(o)n(wn)g(in)n(terp)
-r(olation)f(k)n(ernel)h(in)h(addition)f(to)h(those)f(whic)n(h)h(are)e
-(pre-de\014ned.)227 4018 y(The)f(routine)f(calculates)f(the)i(v)-5
-b(alue)24 b(of)g(a)g(1-dimensional)f(sub-pixel)h(in)n(terp)r(olation)g
-(k)n(ernel.)34 b(This)25 b(determines)227 4117 y(ho)n(w)31
-b(the)i(w)n(eigh)n(t)e(giv)n(en)g(to)h(neigh)n(b)r(ouring)e(pixels)i
-(in)g(calculating)f(an)g(in)n(terp)r(olated)h(v)-5 b(alue)31
-b(dep)r(ends)i(on)e(the)227 4217 y(pixel's)f(o\013set)g(from)g(the)h
-(in)n(terp)r(olation)e(p)r(oin)n(t.)45 b(In)30 b(more)f(than)i(one)e
-(dimension,)i(the)g(w)n(eigh)n(t)e(assigned)g(to)h(a)227
-4316 y(pixel)k(is)h(formed)e(b)n(y)h(ev)-5 b(aluating)34
-b(this)g(1-dimensional)f(k)n(ernel)g(using)h(the)h(o\013set)f(along)f
-(eac)n(h)g(dimension)h(in)227 4416 y(turn.)j(The)28 b(pro)r(duct)g(of)f
-(the)h(returned)f(v)-5 b(alues)27 b(is)h(then)g(used)g(as)f(the)g
-(pixel)h(w)n(eigh)n(t.)0 4569 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_UKERN1\()d(OFFSET,)h(PARAMS,)h(FLAGS,)g(VALUE,)g
-(STATUS)g(\))0 4721 y Fc(Argumen)m(ts:)259 4861 y(OFFSET)32
-b(=)g(DOUBLE)g(PRECISION)g(\(Giv)m(en\))427 4961 y Fk(This)22
-b(will)g(b)r(e)g(the)g(o\013set)g(of)f(the)h(pixel)g(from)g(the)g(in)n
-(terp)r(olation)e(p)r(oin)n(t,)k(measured)c(in)i(pixels.)35
-b(This)22 b(v)-5 b(alue)427 5060 y(ma)n(y)29 b(b)r(e)h(p)r(ositiv)n(e)g
-(or)e(negativ)n(e,)h(but)i(for)e(most)g(practical)g(in)n(terp)r
-(olation)g(sc)n(hemes)g(its)h(sign)f(should)g(b)r(e)427
-5160 y(ignored.)259 5295 y Fc(P)-8 b(ARAMS\()32 b Fj(\003)f
-Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en\))427 5394
-y Fk(This)19 b(will)f(b)r(e)h(the)g(same)f(arra)n(y)e(as)h(w)n(as)h
-(giv)n(en)f(via)h(the)h(P)-7 b(ARAMS)19 b(argumen)n(t)e(of)h(AST)p
-Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)p Fk(.)427 5494
-y(Y)-7 b(ou)29 b(ma)n(y)f(use)g(this)h(to)f(pass)g(an)n(y)g(additional)
-g(parameter)f(v)-5 b(alues)28 b(required)f(b)n(y)h(y)n(our)g(k)n
-(ernel,)g(but)h(note)427 5593 y(that)i(P)-7 b(ARAMS\(1\))31
-b(will)f(already)f(ha)n(v)n(e)g(b)r(een)h(used)h(to)f(sp)r(ecify)g(the)
-h(n)n(um)n(b)r(er)f(of)g(neigh)n(b)r(ouring)f(pixels)427
-5693 y(whic)n(h)f(con)n(tribute)f(to)g(the)h(in)n(terp)r(olated)g(v)-5
-b(alue.)p eop end
-%%Page: 370 380
-TeXDict begin 370 379 bop 0 52 a FG(370)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(FLA)m(GS)i(=)f
-(INTEGER)f(\(Giv)m(en\))427 451 y Fk(This)21 b(will)g(b)r(e)g(the)h
-(same)e(v)-5 b(alue)21 b(as)f(w)n(as)g(giv)n(en)g(via)g(the)h(FLA)n(GS)
-h(argumen)n(t)d(of)i(AST)p Ft(_)p Fk(RESAMPLE)p Fm(<)p
-Fk(X)p Fm(>)p Fk(.)427 551 y(Y)-7 b(ou)23 b(ma)n(y)f(test)h(this)f(v)-5
-b(alue)23 b(to)f(pro)n(vide)g(additional)g(con)n(trol)f(o)n(v)n(er)g
-(the)i(op)r(eration)e(of)h(y)n(our)g(routine.)35 b(Note)427
-650 y(that)27 b(the)g(sp)r(ecial)f(\015ag)g(v)-5 b(alues)27
-b(AST)p Ft(__)p Fk(URESAMP1,)e(2,)i(3)f(&)g(4)h(are)e(reserv)n(ed)g
-(for)h(y)n(ou)g(to)g(use)h(for)f(y)n(our)427 750 y(o)n(wn)18
-b(purp)r(oses)g(and)g(will)g(not)h(clash)f(with)g(other)g
-(pre-de\014ned)g(\015ag)g(v)-5 b(alues)18 b(\(see)g(AST)p
-Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)p Fk(\).)259
-878 y Fc(V)-11 b(ALUE)33 b(=)f(DOUBLE)h(PRECISION)e(\(Returned\))427
-977 y Fk(The)d(calculated)f(k)n(ernel)g(v)-5 b(alue,)27
-b(whic)n(h)h(ma)n(y)f(b)r(e)h(p)r(ositiv)n(e)f(or)g(negativ)n(e.)259
-1105 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 1205 y Fk(The)c(global)e(status.)0 1362
-y Fc(Notes:)340 1639 y Fj(\017)45 b Fk(Not)29 b(all)g(functions)g(mak)n
-(e)f(go)r(o)r(d)g(in)n(terp)r(olation)h(k)n(ernels.)39
-b(In)29 b(general,)f(acceptable)g(k)n(ernels)g(tend)h(to)g(b)r(e)427
-1739 y(symmetrical)h(ab)r(out)h(zero,)g(to)g(ha)n(v)n(e)f(a)g(p)r
-(ositiv)n(e)h(p)r(eak)g(\(usually)f(unit)n(y\))i(at)f(zero,)g(and)f(to)
-h(ev)-5 b(aluate)31 b(to)427 1838 y(zero)24 b(whenev)n(er)g(the)h
-(pixel)g(o\013set)g(has)g(an)n(y)f(other)g(in)n(tegral)g(v)-5
-b(alue)25 b(\(this)g(ensures)g(that)g(the)g(in)n(terp)r(olated)427
-1938 y(v)-5 b(alues)26 b(pass)g(through)g(the)g(original)f(data\).)37
-b(An)26 b(in)n(terp)r(olation)g(k)n(ernel)g(ma)n(y)f(or)h(ma)n(y)g(not)
-g(ha)n(v)n(e)f(regions)427 2038 y(with)j(negativ)n(e)f(v)-5
-b(alues.)36 b(Y)-7 b(ou)28 b(should)f(consult)h(a)f(go)r(o)r(d)g(b)r(o)
-r(ok)g(on)g(image)g(pro)r(cessing)f(for)i(more)e(details.)340
-2166 y Fj(\017)45 b Fk(If)29 b(an)g(error)d(o)r(ccurs)i(within)h(this)g
-(routine,)f(it)h(should)g(set)f(the)h(ST)-7 b(A)g(TUS)30
-b(argumen)n(t)d(to)i(an)f(error)f(v)-5 b(alue)427 2265
-y(b)r(efore)34 b(returning.)56 b(This)34 b(will)h(cause)e(an)h
-(immediate)h(return)e(from)h(AST)p Ft(_)p Fk(RESAMPLE)p
-Fm(<)p Fk(X)p Fm(>)p Fk(.)56 b(The)427 2365 y(error)31
-b(v)-5 b(alue)33 b(AST)p Ft(__)p Fk(UK1ER)f(is)h(a)n(v)-5
-b(ailable)32 b(for)g(this)i(purp)r(ose,)g(but)f(other)g(v)-5
-b(alues)33 b(ma)n(y)f(also)g(b)r(e)i(used)427 2464 y(\(e.g.)52
-b(if)33 b(y)n(ou)f(wish)h(to)f(distinguish)h(di\013eren)n(t)f(t)n(yp)r
-(es)h(of)g(error\).)50 b(The)32 b(AST)p Ft(__)p Fk(UK1ER)g(error)e(v)-5
-b(alue)33 b(is)427 2564 y(de\014ned)28 b(in)g(the)g(AST)p
-Ft(_)p Fk(ERR)f(include)h(\014le.)p 0 2753 3780 12 v
-0 2884 a FA(AST)p Fe(_)p FA(UNF)l(ORMA)-11 b(T)1439 2885
-y Fd(Read)38 b(a)h(formatted)1332 2985 y(co)s(ordinate)e(v)-7
-b(alue)38 b(for)g(a)1611 3084 y(F)-10 b(rame)38 b(axis)2646
-2884 y FA(AST)p Fe(_)p FA(UNF)l(ORMA)-11 b(T)0 3244 y
-Fc(Description:)44 b Fk(This)24 b(function)g(reads)e(a)h(formatted)h
-(co)r(ordinate)e(v)-5 b(alue)23 b(\(giv)n(en)g(as)g(a)g(c)n(haracter)f
-(string\))h(for)g(a)g(F)-7 b(rame)227 3344 y(axis)29
-b(and)h(returns)f(the)h(equiv)-5 b(alen)n(t)30 b(n)n(umerical)f
-(\(double)h(precision\))f(v)-5 b(alue.)44 b(It)30 b(also)f(returns)g
-(the)h(n)n(um)n(b)r(er)g(of)227 3444 y(c)n(haracters)c(read)g(from)i
-(the)g(string.)227 3566 y(The)39 b(principle)f(use)g(of)h(this)f
-(function)h(is)g(in)f(deco)r(ding)g(user-supplied)g(input)h(whic)n(h)f
-(con)n(tains)g(formatted)227 3665 y(co)r(ordinate)31
-b(v)-5 b(alues.)49 b(F)-7 b(ree-format)30 b(input)j(is)e(supp)r(orted)h
-(as)f(far)g(as)g(p)r(ossible.)49 b(If)32 b(input)h(is)e(am)n(biguous,)h
-(it)g(is)227 3765 y(in)n(terpreted)h(with)i(reference)d(to)i(the)g(F)-7
-b(rame's)33 b(attributes)h(\(in)g(particular,)g(the)g(F)-7
-b(ormat)33 b(string)g(asso)r(ciated)227 3865 y(with)28
-b(the)g(F)-7 b(rame's)27 b(axis\).)37 b(This)27 b(function)h(is,)g(in)g
-(essence,)f(the)h(in)n(v)n(erse)e(of)h(AST)p Ft(_)p Fk(F)n(ORMA)-7
-b(T.)0 4009 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_UNFORMAT\()38 b(THIS,)k(AXIS,)f(STRING,)g(VALUE,)g(STATUS)g
-(\))0 4154 y Fc(Argumen)m(ts:)259 4285 y(THIS)32 b(=)g(INTEGER)g(\(Giv)
-m(en\))427 4385 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)259 4512 y Fc(AXIS)33 b(=)f(INTEGER)f(\(Giv)m(en\))427
-4612 y Fk(The)j(n)n(um)n(b)r(er)f(of)g(the)h(F)-7 b(rame)33
-b(axis)f(for)h(whic)n(h)g(a)g(co)r(ordinate)f(v)-5 b(alue)34
-b(is)f(to)g(b)r(e)h(read)e(\(axis)h(n)n(um)n(b)r(ering)427
-4712 y(starts)27 b(at)h(1)f(for)g(the)h(\014rst)f(axis\).)259
-4840 y Fc(STRING)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 4939 y Fk(A)h(c)n(haracter)d(string)
-h(con)n(taining)g(the)i(formatted)f(co)r(ordinate)f(v)-5
-b(alue.)50 b(This)32 b(string)f(ma)n(y)h(con)n(tain)f(ad-)427
-5039 y(ditional)h(information)f(follo)n(wing)f(the)i(v)-5
-b(alue)32 b(to)f(b)r(e)h(read,)g(in)g(whic)n(h)f(case)g(reading)f
-(stops)h(at)h(the)g(\014rst)427 5138 y(c)n(haracter)27
-b(whic)n(h)j(cannot)f(b)r(e)g(in)n(terpreted)g(as)g(part)f(of)i(the)f
-(v)-5 b(alue.)42 b(An)n(y)29 b(white)h(space)f(b)r(efore)g(or)f(after)
-427 5238 y(the)g(v)-5 b(alue)28 b(is)f(discarded.)259
-5366 y Fc(V)-11 b(ALUE)33 b(=)f(DOUBLE)h(PRECISION)e(\(Returned\))427
-5466 y Fk(The)d(co)r(ordinate)e(v)-5 b(alue)28 b(read.)259
-5593 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5693 y Fk(The)c(global)e(status.)p eop
-end
-%%Page: 371 381
-TeXDict begin 371 380 bop 3643 52 a FG(371)0 351 y Fc(Class)31
-b(Applicabilit)m(y:)259 488 y(F)-8 b(rame)427 587 y Fk(This)27
-b(function)h(applies)f(to)g(all)g(F)-7 b(rames.)36 b(See)27
-b(the)h Ft(")p Fk(F)-7 b(rame)26 b(Input)i(F)-7 b(ormat)p
-Ft(")26 b Fk(section)h(b)r(elo)n(w)g(for)g(details)427
-687 y(of)h(the)g(input)g(formats)f(accepted)g(b)n(y)h(a)f(basic)g(F)-7
-b(rame.)259 820 y Fc(SkyF)f(rame)427 919 y Fk(The)35
-b(SkyF)-7 b(rame)34 b(class)f(re-de\014nes)h(the)h(input)g(format)f(to)
-h(b)r(e)g(suitable)f(for)g(represen)n(ting)f(angles)h(and)427
-1019 y(times,)40 b(with)d(the)g(resulting)f(co)r(ordinate)f(v)-5
-b(alue)37 b(returned)f(in)h(radians.)63 b(See)36 b(the)h
-Ft(")p Fk(SkyF)-7 b(rame)36 b(Input)427 1119 y(F)-7 b(ormat)p
-Ft(")27 b Fk(section)g(b)r(elo)n(w)g(for)g(details)h(of)f(the)h
-(formats)f(accepted.)259 1252 y Fc(F)-8 b(rameSet)427
-1351 y Fk(The)26 b(input)g(formats)f(accepted)h(b)n(y)f(a)g(F)-7
-b(rameSet)26 b(are)e(determined)i(b)n(y)f(its)h(curren)n(t)f(F)-7
-b(rame)25 b(\(as)g(sp)r(eci\014ed)427 1451 y(b)n(y)j(the)g(Curren)n(t)e
-(attribute\).)0 1613 y Fc(Returned)32 b(V)-8 b(alue:)259
-1749 y(AST)p Ft(_)p Fc(UNF)m(ORMA)g(T)32 b(=)g(INTEGER)427
-1849 y Fk(The)c(n)n(um)n(b)r(er)f(of)g(c)n(haracters)e(read)h(from)h
-(the)h(string)f(in)g(order)f(to)h(obtain)g(the)h(co)r(ordinate)e(v)-5
-b(alue.)37 b(This)427 1948 y(will)28 b(include)g(an)n(y)f(white)h
-(space)f(whic)n(h)g(o)r(ccurs)g(b)r(efore)g(or)g(after)g(the)h(v)-5
-b(alue.)0 2110 y Fc(Notes:)340 2393 y Fj(\017)45 b Fk(A)37
-b(function)f(v)-5 b(alue)36 b(of)g(zero)f(\(and)h(no)g(co)r(ordinate)f
-(v)-5 b(alue\))36 b(will)h(b)r(e)f(returned,)i(without)e(error,)h(if)f
-(the)427 2493 y(string)27 b(supplied)h(do)r(es)f(not)h(con)n(tain)f(a)g
-(suitably)g(formatted)h(v)-5 b(alue.)340 2625 y Fj(\017)45
-b Fk(Bew)n(are)20 b(that)h(it)g(is)g(p)r(ossible)g(for)g(a)f
-(formatting)h(error)e(part-w)n(a)n(y)g(through)h(an)h(input)g(string)g
-(to)g(terminate)427 2725 y(input)29 b(b)r(efore)e(it)h(has)f(b)r(een)h
-(completely)f(read,)g(but)h(to)g(yield)f(a)g(co)r(ordinate)g(v)-5
-b(alue)27 b(that)h(app)r(ears)f(v)-5 b(alid.)427 2825
-y(F)e(or)24 b(example,)g(if)h(a)f(user)f(t)n(yp)r(es)h
-Ft(")p Fk(1.5R6)p Ft(")e Fk(instead)i(of)g Ft(")p Fk(1.5E6)p
-Ft(")p Fk(,)e(the)j Ft(")p Fk(R)p Ft(")e Fk(will)i(terminate)f(input,)h
-(giving)427 2924 y(an)h(incorrect)f(co)r(ordinate)g(v)-5
-b(alue)26 b(of)h(1.5.)35 b(It)27 b(is)f(therefore)f(most)h(imp)r(ortan)
-n(t)g(to)g(c)n(hec)n(k)f(the)i(return)f(v)-5 b(alue)427
-3024 y(of)28 b(this)g(function)g(to)f(ensure)g(that)h(the)g(correct)e
-(n)n(um)n(b)r(er)i(of)f(c)n(haracters)f(ha)n(v)n(e)g(b)r(een)i(read.)
-340 3157 y Fj(\017)45 b Fk(An)33 b(error)e(will)h(result)g(if)h(a)f(v)
--5 b(alue)33 b(is)f(read)g(whic)n(h)g(app)r(ears)f(to)h(ha)n(v)n(e)g
-(the)g(correct)f(format,)j(but)f(whic)n(h)427 3256 y(cannot)d(b)r(e)g
-(con)n(v)n(erted)f(in)n(to)h(a)g(v)-5 b(alid)30 b(co)r(ordinate)f(v)-5
-b(alue)30 b(\(for)g(instance,)g(b)r(ecause)g(the)h(v)-5
-b(alue)30 b(of)g(one)f(or)427 3356 y(more)e(of)h(its)f(\014elds)h(is)f
-(in)n(v)-5 b(alid\).)340 3489 y Fj(\017)45 b Fk(The)e(string)f
-Ft(")p Fm(<)p Fk(bad)p Fm(>)p Ft(")e Fk(is)j(recognised)d(as)i(a)g(sp)r
-(ecial)g(case)g(and)g(will)h(yield)g(the)f(co)r(ordinate)g(v)-5
-b(alue)427 3588 y(AST)p Ft(__)p Fk(BAD)32 b(without)f(error.)47
-b(The)31 b(test)h(for)f(this)g(string)g(is)g(case-insensitiv)n(e)f(and)
-h(also)f(p)r(ermits)i(em-)427 3688 y(b)r(edded)d(white)f(space.)340
-3821 y Fj(\017)45 b Fk(A)33 b(function)f(result)g(of)g(zero)f(will)h(b)
-r(e)h(returned)e(and)h(no)g(co)r(ordinate)f(v)-5 b(alue)31
-b(will)i(b)r(e)f(returned)g(via)f(the)427 3921 y(V)-9
-b(ALUE)25 b(argumen)n(t)f(if)h(this)g(function)g(is)g(in)n(v)n(ok)n(ed)
-e(with)i(the)g(AST)g(error)e(status)i(set,)g(or)f(if)h(it)g(should)g
-(fail)427 4020 y(for)i(an)n(y)g(reason.)-2 4182 y Fc(F)-8
-b(rame)32 b(Input)h(F)-8 b(ormat)n(:)227 4328 y Fk(The)28
-b(input)g(format)f(accepted)h(for)f(a)g(basic)g(F)-7
-b(rame)27 b(axis)g(is)g(as)g(follo)n(ws:)340 4465 y Fj(\017)45
-b Fk(An)28 b(optional)f(sign,)g(follo)n(w)n(ed)g(b)n(y:)340
-4598 y Fj(\017)45 b Fk(A)28 b(sequence)f(of)h(one)f(or)g(more)g(digits)
-g(p)r(ossibly)g(con)n(taining)g(a)g(decimal)g(p)r(oin)n(t,)h(follo)n(w)
-n(ed)f(b)n(y:)340 4730 y Fj(\017)45 b Fk(An)28 b(optional)f(exp)r(onen)
-n(t)h(\014eld.)340 4863 y Fj(\017)45 b Fk(The)28 b(exp)r(onen)n(t)f
-(\014eld,)h(if)g(presen)n(t,)f(consists)g(of)h Ft(")p
-Fk(E)p Ft(")e Fk(or)h Ft(")p Fk(e)p Ft(")g Fk(follo)n(w)n(ed)f(b)n(y)h
-(a)h(p)r(ossibly)f(signed)g(in)n(teger.)227 5025 y(Examples)g(of)g
-(acceptable)g(F)-7 b(rame)27 b(input)i(formats)d(include:)340
-5162 y Fj(\017)45 b Fk(99)340 5294 y Fj(\017)g Fk(1.25)340
-5427 y Fj(\017)g Fk(-1.6)340 5560 y Fj(\017)g Fk(1E8)340
-5693 y Fj(\017)g Fk(-.99e-17)p eop end
-%%Page: 372 382
-TeXDict begin 372 381 bop 0 52 a FG(372)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fm(<)p Fk(bad)p Fm(>)-2 525 y Fc(SkyF)-8 b(rame)33
-b(Input)g(F)-8 b(ormat)n(:)227 671 y Fk(The)28 b(input)g(format)f
-(accepted)h(for)f(a)g(SkyF)-7 b(rame)27 b(axis)g(is)g(as)g(follo)n(ws:)
-340 819 y Fj(\017)45 b Fk(An)32 b(optional)e(sign,)i(follo)n(w)n(ed)e
-(b)n(y)g(b)r(et)n(w)n(een)h(one)g(and)g(three)g(\014elds)g(represen)n
-(ting)e(either)i(degrees,)g(arc-)427 918 y(min)n(utes,)d(arc-seconds)d
-(or)i(hours,)g(min)n(utes,)h(seconds)e(\(e.g.)37 b Ft(")p
-Fk(-12)26 b(42)h(03)p Ft(")p Fk(\).)340 1057 y Fj(\017)45
-b Fk(Eac)n(h)22 b(\014eld)h(should)f(consist)g(of)h(a)f(sequence)h(of)f
-(one)h(or)f(more)f(digits,)j(whic)n(h)f(ma)n(y)f(include)h(leading)f
-(zeros.)427 1157 y(A)n(t)29 b(most)f(one)g(\014eld)h(ma)n(y)e(con)n
-(tain)h(a)g(decimal)g(p)r(oin)n(t,)h(in)f(whic)n(h)g(case)g(it)h(is)f
-(tak)n(en)f(to)i(b)r(e)f(the)h(\014nal)f(\014eld)427
-1256 y(\(e.g.)55 b(decimal)34 b(degrees)e(migh)n(t)i(b)r(e)g(giv)n(en)f
-(as)g Ft(")p Fk(124.707)p Ft(")p Fk(,)f(while)h(degrees)g(and)g
-(decimal)h(arc-min)n(utes)427 1356 y(migh)n(t)28 b(b)r(e)g(giv)n(en)f
-(as)g Ft(")p Fk(-13)e(33.8)p Ft(")p Fk(\).)340 1495 y
-Fj(\017)45 b Fk(The)29 b(\014rst)g(\014eld)g(giv)n(en)g(ma)n(y)f(tak)n
-(e)g(an)n(y)g(v)-5 b(alue,)30 b(allo)n(wing)d(angles)h(and)h(times)g
-(outside)g(the)h(con)n(v)n(en)n(tional)427 1594 y(ranges)g(to)h(b)r(e)g
-(represen)n(ted.)46 b(Ho)n(w)n(ev)n(er,)30 b(subsequen)n(t)h(\014elds)g
-(m)n(ust)g(ha)n(v)n(e)f(v)-5 b(alues)31 b(of)g(less)f(than)i(60)e
-(\(e.g.)427 1694 y Ft(")p Fk(720)c(45)h(31)p Ft(")f Fk(is)i(v)-5
-b(alid,)27 b(whereas)g Ft(")p Fk(11)f(45)h(61)p Ft(")f
-Fk(is)h(not\).)340 1832 y Fj(\017)45 b Fk(Fields)30 b(ma)n(y)g(b)r(e)g
-(separated)f(b)n(y)h(white)g(space)f(or)g(b)n(y)h Ft(")p
-Fk(:)p Ft(")f Fk(\(colon\),)i(but)f(the)h(c)n(hoice)e(of)h(separator)d
-(m)n(ust)427 1932 y(b)r(e)34 b(used)f(consisten)n(tly)f(throughout)h
-(the)g(v)-5 b(alue.)53 b(Additional)33 b(white)h(space)e(ma)n(y)h(b)r
-(e)g(presen)n(t)g(around)427 2032 y(\014elds)28 b(and)f(separators)e
-(\(e.g.)37 b Ft(")p Fk(-)27 b(2:)37 b(04)26 b(:)37 b(7.1)p
-Ft(")p Fk(\).)340 2170 y Fj(\017)45 b Fk(The)35 b(follo)n(wing)e
-(\014eld)i(iden)n(ti\014cation)f(c)n(haracters)e(ma)n(y)h(b)r(e)i(used)
-f(as)g(separators)e(to)i(replace)f(either)i(of)427 2270
-y(those)d(ab)r(o)n(v)n(e)f(\(or)h(ma)n(y)f(b)r(e)i(app)r(ended)g(to)f
-(the)h(\014nal)f(\014eld\),)i(in)e(order)f(to)h(iden)n(tify)h(the)g
-(\014eld)g(to)f(whic)n(h)427 2370 y(they)g(are)e(app)r(ended:)45
-b Ft(")p Fk(d)p Ft(")p Fk(|degrees;)32 b Ft(")p Fk(h)p
-Ft(")p Fk(|hours;)f Ft(")p Fk(m)p Ft(")p Fk(|min)n(utes)g(of)h(arc)e
-(or)h(time;)j Ft(")p Fk(s)p Ft(")p Fk(|seconds)427 2469
-y(of)24 b(arc)f(or)g(time;)i Ft(")p Fk(')p Ft(")f Fk(\(single)f
-(quote\)|min)n(utes)h(of)g(arc;)g Ft(""")f Fk(\(double)h
-(quote\)|seconds)f(of)h(arc.)34 b(Either)427 2569 y(lo)n(w)n(er)e(or)h
-(upp)r(er)h(case)f(ma)n(y)g(b)r(e)h(used.)56 b(Fields)33
-b(m)n(ust)h(b)r(e)g(giv)n(en)f(in)h(order)f(of)g(decreasing)g
-(signi\014cance)427 2668 y(\(e.g.)k Ft(")p Fk(-11D)26
-b(3')i(14.4)p Ft("")d Fk(or)i Ft(")p Fk(22h14m11.2s)p
-Ft(")p Fk(\).)340 2807 y Fj(\017)45 b Fk(The)22 b(presence)e(of)h(an)n
-(y)g(of)g(the)h(\014eld)f(iden)n(ti\014cation)g(c)n(haracters)e
-Ft(")p Fk(d)p Ft(")p Fk(,)j Ft(")p Fk(')p Ft(")f Fk(\(single)g(quote\))
-g(or)f Ft(""")g Fk(\(double)427 2907 y(quote\))g(indicates)f(that)h
-(the)f(v)-5 b(alue)20 b(is)f(to)g(b)r(e)h(in)n(terpreted)f(as)g(an)g
-(angle.)33 b(Con)n(v)n(ersely)-7 b(,)19 b(the)h(presence)f(of)g
-Ft(")p Fk(h)p Ft(")427 3006 y Fk(indicates)27 b(that)h(it)f(is)g(to)g
-(b)r(e)h(in)n(terpreted)e(as)h(a)g(time)g(\(with)h(24)e(hours)h
-(corresp)r(onding)e(to)i(360)f(degrees\).)427 3106 y(Incompatible)j
-(angle/time)f(iden)n(ti\014cation)h(c)n(haracters)d(ma)n(y)j(not)f(b)r
-(e)i(mixed)f(\(e.g.)40 b Ft(")p Fk(10h14'3)p Ft("")26
-b Fk(is)j(not)427 3206 y(v)-5 b(alid\).)35 b(The)21 b(remaining)e
-(\014eld)i(iden)n(ti\014cation)f(c)n(haracters)f(and)h(separators)e(do)
-i(not)h(sp)r(ecify)f(a)g(preference)427 3305 y(for)27
-b(an)h(angle)e(or)h(a)g(time)h(and)g(ma)n(y)f(b)r(e)h(used)f(with)h
-(either.)340 3444 y Fj(\017)45 b Fk(If)23 b(no)f(preference)f(for)h(an)
-g(angle)f(or)h(a)g(time)g(is)h(expressed)e(an)n(ywhere)f(within)j(the)g
-(v)-5 b(alue,)23 b(it)g(is)f(in)n(terpreted)427 3543
-y(as)33 b(an)g(angle)g(if)h(the)g(F)-7 b(ormat)33 b(attribute)h(string)
-e(asso)r(ciated)h(with)h(the)f(SkyF)-7 b(rame)33 b(axis)g(generates)f
-(an)427 3643 y(angle)i(and)h(as)f(a)g(time)h(otherwise.)57
-b(This)35 b(ensures)f(that)h(v)-5 b(alues)34 b(pro)r(duced)h(b)n(y)f
-(AST)p Ft(_)p Fk(F)n(ORMA)-7 b(T)35 b(are)427 3743 y(correctly)26
-b(in)n(terpreted)h(b)n(y)h(AST)p Ft(_)p Fk(UNF)n(ORMA)-7
-b(T.)340 3881 y Fj(\017)45 b Fk(Fields)37 b(ma)n(y)g(b)r(e)g(omitted,)j
-(in)d(whic)n(h)g(case)f(they)h(default)h(to)f(zero.)64
-b(The)37 b(remaining)f(\014elds)h(ma)n(y)f(b)r(e)427
-3981 y(iden)n(ti\014ed)e(b)n(y)f(using)g(appropriate)f(\014eld)h(iden)n
-(ti\014cation)h(c)n(haracters)d(\(see)i(ab)r(o)n(v)n(e\))f(and/or)g(b)n
-(y)h(adding)427 4081 y(extra)28 b(colon)g(separators)f(\(e.g.)40
-b Ft(")p Fk(-05m13s)p Ft(")26 b Fk(is)i(equiv)-5 b(alen)n(t)29
-b(to)g Ft(")p Fk(-:05:13)p Ft(")p Fk(\).)38 b(If)29 b(a)f(\014eld)i(is)
-e(not)h(iden)n(ti\014ed)427 4180 y(explicitly)-7 b(,)40
-b(it)e(is)g(assumed)e(that)i(adjacen)n(t)f(\014elds)g(ha)n(v)n(e)g(b)r
-(een)h(giv)n(en,)h(after)e(taking)f(accoun)n(t)h(of)g(an)n(y)427
-4280 y(extra)31 b(separator)e(c)n(haracters)h(\(e.g.)49
-b Ft(")p Fk(14:25.4s)p Ft(")28 b Fk(sp)r(eci\014es)k(min)n(utes)g(and)f
-(seconds,)h(while)g Ft(")p Fk(14::25.4s)p Ft(")427 4379
-y Fk(sp)r(eci\014es)c(degrees)e(and)h(seconds\).)340
-4518 y Fj(\017)45 b Fk(If)37 b(\014elds)g(are)f(omitted)h(in)g(suc)n(h)
-f(a)g(w)n(a)n(y)g(that)g(the)h(remaining)f(ones)g(cannot)g(b)r(e)h
-(iden)n(ti\014ed)h(uniquely)427 4618 y(\(e.g.)69 b Ft(")p
-Fk(01:02)p Ft(")p Fk(\),)38 b(then)h(the)f(\014rst)g(\014eld)g
-(\(either)h(giv)n(en)e(explicitly)h(or)g(implied)g(b)n(y)g(an)g(extra)f
-(leading)427 4717 y(colon)25 b(separator\))f(is)h(tak)n(en)g(to)g(b)r
-(e)h(the)g(most)g(signi\014can)n(t)f(\014eld)g(that)h(AST)p
-Ft(_)p Fk(F)n(ORMA)-7 b(T)26 b(w)n(ould)f(pro)r(duce)427
-4817 y(when)36 b(formatting)e(a)h(v)-5 b(alue)35 b(\(using)g(the)h(F)-7
-b(ormat)34 b(attribute)i(asso)r(ciated)d(with)j(the)g(SkyF)-7
-b(rame)34 b(axis\).)427 4917 y(By)e(default,)i(this)e(means)f(that)i
-(the)f(\014rst)g(\014eld)g(will)g(normally)f(b)r(e)i(in)n(terpreted)e
-(as)h(degrees)e(or)h(hours.)427 5016 y(Ho)n(w)n(ev)n(er,)j(if)h(this)f
-(do)r(es)g(not)g(result)g(in)g(consisten)n(t)g(\014eld)g(iden)n
-(ti\014cation,)i(then)f(the)f(last)g(\014eld)g(\(either)427
-5116 y(giv)n(en)f(explicitly)g(or)g(implied)h(b)n(y)f(an)g(extra)g
-(trailing)g(colon)f(separator\))g(is)h(tak)n(en)g(to)g(to)g(b)r(e)h
-(the)g(least)427 5215 y(signi\014can)n(t)27 b(\014eld)h(that)g(AST)p
-Ft(_)p Fk(F)n(ORMA)-7 b(T)27 b(w)n(ould)h(pro)r(duce.)227
-5389 y(This)23 b(\014nal)g(con)n(v)n(en)n(tion)f(is)h(in)n(tended)g(to)
-g(ensure)g(that)g(v)-5 b(alues)23 b(formatted)f(b)n(y)h(AST)p
-Ft(_)p Fk(F)n(ORMA)-7 b(T)23 b(whic)n(h)g(con)n(tain)227
-5489 y(less)33 b(than)g(three)f(\014elds)h(will)g(b)r(e)h(correctly)d
-(in)n(terpreted)h(if)i(read)e(bac)n(k)g(using)g(AST)p
-Ft(_)p Fk(UNF)n(ORMA)-7 b(T,)34 b(ev)n(en)e(if)227 5588
-y(they)c(do)f(not)h(con)n(tain)f(\014eld)h(iden)n(ti\014cation)f(c)n
-(haracters.)227 5718 y(Examples)g(of)g(acceptable)g(SkyF)-7
-b(rame)27 b(input)h(formats)f(\(with)i(in)n(terpretation)d(in)i(paren)n
-(theses\))f(include:)p eop end
-%%Page: 373 383
-TeXDict begin 373 382 bop 3643 52 a FG(373)340 351 y
-Fj(\017)45 b Fk(-14d)27 b(13m)g(22.2s)f(\(-14d)g(13')h(22.2)p
-Ft(")p Fk(\))340 500 y Fj(\017)45 b Fk(+)28 b(12:34:56.7)c(\(12d)j(34')
-g(56.7)p Ft(")f Fk(or)g(12h)h(34m)g(56.7s\))340 649 y
-Fj(\017)45 b Fk(001)26 b(:)37 b(02)27 b(:)37 b(03.4)26
-b(\(1d)i(02')f(03.4)p Ft(")f Fk(or)g(1h)i(02m)e(03.4s\))340
-799 y Fj(\017)45 b Fk(22h)27 b(30)g(\(22h)g(30m)g(00s\))340
-948 y Fj(\017)45 b Fk(136::10)p Ft(")25 b Fk(\(136d)i(00')g(10)p
-Ft(")f Fk(or)h(136h)f(00m)h(10s\))340 1097 y Fj(\017)45
-b Fk(-14M)27 b(27S)g(\(-0d)g(14')g(27)p Ft(")f Fk(or)h(-0h)g(14m)f
-(27s\))340 1246 y Fj(\017)45 b Fk(-:14:)36 b(\(-0d)27
-b(14')g(00)p Ft(")f Fk(or)h(-0h)g(14m)g(00s\))340 1395
-y Fj(\017)45 b Fk(-::4.1)27 b(\(-0d)g(00')g(04.1)p Ft(")f
-Fk(or)g(-0h)h(00m)g(04.1s\))340 1544 y Fj(\017)45 b Fk(.9)p
-Ft(")27 b Fk(\(0d)h(00')e(00.9)p Ft(")p Fk(\))340 1693
-y Fj(\017)45 b Fk(d12m)27 b(\(0d)h(12')f(00)p Ft(")p
-Fk(\))340 1842 y Fj(\017)45 b Fk(H)28 b(12:22.3s)d(\(0h)j(12m)f
-(22.3s\))340 1992 y Fj(\017)45 b Fm(<)p Fk(bad)p Fm(>)27
-b Fk(\(AST)p Ft(__)p Fk(BAD\))227 2186 y(Where)e(alternativ)n(e)e(in)n
-(terpretations)g(are)h(sho)n(wn,)g(the)h(c)n(hoice)f(of)g(angle)g(or)g
-(time)h(dep)r(ends)g(on)f(the)h(asso)r(ciated)227 2286
-y(F)-7 b(ormat\(axis\))27 b(attribute.)p 0 2517 3780
-12 v 0 2648 a FA(AST)p Fe(_)p FA(UNITMAP)415 b Fd(Create)37
-b(a)h(UnitMap)416 b FA(AST)p Fe(_)p FA(UNITMAP)0 2869
-y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(UnitMap)i(and)e(optionally)g(initialises)g(its)h(attributes.)227
-3010 y(A)f(UnitMap)f(is)g(a)f(unit)i(\(n)n(ull\))f(Mapping)g(that)g
-(has)g(no)f(e\013ect)i(on)e(the)i(co)r(ordinates)d(supplied)i(to)g(it.)
-37 b(They)26 b(are)227 3110 y(simply)32 b(copied.)47
-b(This)31 b(can)g(b)r(e)g(useful)h(if)g(a)f(Mapping)f(is)h(required)g
-(\(e.g.)47 b(to)31 b(pass)g(to)g(another)f(routine\))h(but)227
-3209 y(y)n(ou)c(do)g(not)h(w)n(an)n(t)f(it)h(to)f(ha)n(v)n(e)g(an)n(y)g
-(e\013ect.)0 3391 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_UNITMAP\()c(NCOORD,)h(OPTIONS,)h(STATUS)g(\))0
-3573 y Fc(Argumen)m(ts:)259 3742 y(NCOORD)31 b(=)h(INTEGER)f(\(Giv)m
-(en\))427 3842 y Fk(The)d(n)n(um)n(b)r(er)f(of)h(input)g(and)g(output)g
-(co)r(ordinates)e(\(these)i(n)n(um)n(b)r(ers)f(are)g(necessarily)f(the)
-h(same\).)259 3991 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-4091 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h(optional)
-f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f(to)g(b)r
-(e)427 4190 y(used)k(for)f(initialising)h(the)g(new)f(UnitMap.)37
-b(The)25 b(syn)n(tax)e(used)i(is)g(iden)n(tical)f(to)h(that)g(for)f
-(the)h(AST)p Ft(_)p Fk(SET)427 4290 y(routine.)259 4439
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 4539 y Fk(The)c(global)e(status.)0 4733 y Fc(Returned)32
-b(V)-8 b(alue:)259 4902 y(AST)p Ft(_)p Fc(UNITMAP)33
-b(=)f(INTEGER)427 5002 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g
-(UnitMap.)0 5196 y Fc(Notes:)340 5511 y Fj(\017)45 b
-Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 5611
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p eop end
-%%Page: 374 384
-TeXDict begin 374 383 bop 0 52 a FG(374)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(VERSION)1105 483 y Fd(Return)38
-b(the)h(v)m(ersion)e(of)i(the)f(AST)1428 583 y(library)e(b)s(eing)j
-(used)2827 482 y FA(AST)p Fe(_)p FA(VERSION)0 771 y Fc(Description:)44
-b Fk(This)30 b(function)h(returns)e(an)g(in)n(teger)g(represen)n(ting)f
-(the)j(v)n(ersion)d(of)i(the)g(AST)g(library)f(b)r(eing)h(used.)227
-870 y(The)i(library)f(v)n(ersion)g(is)g(formatted)h(as)g(a)f(string)h
-(suc)n(h)f(as)h Ft(")p Fk(2.0-7)p Ft(")d Fk(whic)n(h)j(con)n(tains)f
-(in)n(tegers)g(represen)n(ting)227 970 y(the)h Ft(")p
-Fk(ma)5 b(jor)29 b(v)n(ersion)p Ft(")g Fk(\(2\),)j(the)g
-Ft(")p Fk(minor)e(v)n(ersion)p Ft(")f Fk(\(0\))i(and)g(the)g
-Ft(")p Fk(release)p Ft(")e Fk(\(7\).)47 b(The)31 b(in)n(teger)f
-(returned)h(b)n(y)227 1069 y(this)d(function)g(com)n(bines)f(all)h
-(three)f(in)n(tegers)f(together)h(in)n(to)g(a)h(single)f(in)n(teger)f
-(using)i(the)g(expresion:)227 1194 y(\(ma)5 b(jor)27
-b(v)n(ersion\))p Fj(\003)p Fk(1E6)d(+)k(\(minor)f(v)n(ersion\))p
-Fj(\003)p Fk(1E3)d(+)k(\(release\))0 1343 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_VERSION\(\))0 1492 y Fc(Class)31
-b(Applicabilit)m(y:)259 1628 y(Ob)5 b(ject)427 1727 y
-Fk(This)28 b(routine)f(applies)g(to)h(all)f(Ob)5 b(jects.)0
-1889 y Fc(Returned)32 b(V)-8 b(alue:)259 2025 y(AST)p
-Ft(_)p Fc(VERSION)31 b(=)h(INTEGER)427 2125 y Fk(The)37
-b(ma)5 b(jor)35 b(v)n(ersion,)j(minor)e(v)n(ersion)f(and)h(release)g(n)
-n(um)n(b)r(ers)g(for)g(the)h(AST)g(library)-7 b(,)37
-b(enco)r(ded)g(as)f(a)427 2224 y(single)27 b(in)n(teger.)p
-0 2423 V 0 2553 a FA(AST)p Fe(_)p FA(W)-15 b(ARNINGS)231
-b Fd(Returns)38 b(an)m(y)g(w)m(arnings)1321 2667 y(issued)h(b)m(y)g
-(the)g(previous)1296 2782 y(read)f(or)h(write)e(op)s(eration)2681
-2553 y FA(AST)p Fe(_)p FA(W)-15 b(ARNINGS)0 2970 y Fc(Description:)44
-b Fk(This)28 b(function)f(returns)g(an)g(AST)h(KeyMap)e(ob)5
-b(ject)27 b(holding)g(the)g(text)h(of)f(an)n(y)g(w)n(arnings)e(issued)i
-(as)227 3070 y(a)i(result)g(of)g(the)g(previous)f(in)n(v)n(o)r(cation)g
-(of)h(the)h(AST)p Ft(_)p Fk(READ)f(or)g(AST)p Ft(_)p
-Fk(WRITE)g(function)g(on)g(the)h(Channel.)227 3169 y(If)e(no)g(w)n
-(arnings)e(w)n(ere)g(issued,)i(a)f(AST)p Ft(__)p Fk(NULL)g(will)h(b)r
-(e)g(returned.)227 3294 y(Suc)n(h)d(w)n(arnings)e(are)h(non-fatal)g
-(and)g(will)h(not)g(prev)n(en)n(t)f(the)h(read)e(or)h(write)h(op)r
-(eration)e(succeeding.)36 b(Ho)n(w)n(ev)n(er,)227 3393
-y(the)29 b(con)n(v)n(erted)f(ob)5 b(ject)28 b(ma)n(y)g(not)h(b)r(e)g
-(iden)n(tical)f(to)h(the)g(original)e(ob)5 b(ject)28
-b(in)h(all)f(resp)r(ects.)40 b(Di\013erences)29 b(whic)n(h)227
-3493 y(w)n(ould)23 b(usually)f(b)r(e)h(deemed)g(as)f(insigni\014can)n
-(t)h(in)g(most)f(usual)h(cases)e(will)j(generate)d(a)h(w)n(arning,)h
-(whereas)e(more)227 3592 y(signi\014can)n(t)27 b(di\013erences)g(will)h
-(generate)e(an)i(error.)227 3717 y(The)d Ft(")p Fk(Strict)p
-Ft(")f Fk(attribute)h(allo)n(ws)e(this)i(w)n(arning)e(facilit)n(y)i(to)
-g(b)r(e)g(switc)n(hed)f(o\013,)i(so)e(that)g(a)h(fatal)f(error)f(is)i
-(alw)n(a)n(ys)227 3816 y(rep)r(orted)i(for)g(an)n(y)g(con)n(v)n(ersion)
-e(error.)0 3965 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_WARNINGS\()38 b(THIS,)k(STATUS)f(\))0 4114
-y Fc(Argumen)m(ts:)259 4250 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427
-4350 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Channel.)259
-4483 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 4582 y Fk(The)c(global)e(status.)0 4744
-y Fc(Class)31 b(Applicabilit)m(y:)259 4880 y(Channel)427
-4979 y Fk(The)25 b(basic)f(Channel)h(class)f(generates)f(a)h(w)n
-(arning)g(when)g(ev)n(er)g(an)h(un-recognised)e(item)i(is)f(encoun)n
-(tered)427 5079 y(whilst)32 b(reading)f(an)g(Ob)5 b(ject)32
-b(from)f(an)g(external)g(data)g(source.)48 b(If)32 b(Strict)g(is)g
-(zero)e(\(the)j(default\),)g(then)427 5178 y(unexp)r(ected)28
-b(items)f(in)g(the)g(Ob)5 b(ject)27 b(description)g(are)f(simply)h
-(ignored,)e(and)i(an)n(y)f(remaining)g(items)i(are)427
-5278 y(used)h(to)g(construct)g(the)g(returned)f(Ob)5
-b(ject.)41 b(If)30 b(Strict)f(is)g(non-zero,)f(an)g(error)f(will)j(b)r
-(e)f(rep)r(orted)f(and)h(a)427 5378 y(NULL)f(Ob)5 b(ject)28
-b(p)r(oin)n(ter)f(returned)g(if)h(an)n(y)f(unexp)r(ected)h(items)g(are)
-f(encoun)n(tered.)427 5494 y(As)f(AST)g(con)n(tin)n(ues)f(to)h(b)r(e)g
-(dev)n(elop)r(ed,)g(new)g(attributes)f(are)g(added)h(o)r(ccasionally)e
-(to)h(selected)h(classes.)427 5593 y(If)35 b(an)f(older)f(v)n(ersion)g
-(of)h(AST)h(is)f(used)g(to)g(read)f(external)h(Ob)5 b(ject)34
-b(descriptions)f(created)h(b)n(y)g(a)f(more)427 5693
-y(recen)n(t)20 b(v)n(ersion)f(of)i(AST,)g(then)g(the)g(Channel)f(class)
-g(will,)i(b)n(y)f(default,)h(ignore)d(the)i(new)g(attributes,)h(using)p
-eop end
-%%Page: 375 385
-TeXDict begin 375 384 bop 3643 52 a FG(375)427 351 y
-Fk(the)35 b(remaining)e(attributes)h(to)h(construct)e(the)i(Ob)5
-b(ject.)57 b(This)34 b(is)g(usually)g(a)g(go)r(o)r(d)f(thing.)58
-b(Ho)n(w)n(ev)n(er,)427 451 y(since)32 b(external)f(Ob)5
-b(ject)32 b(descriptions)f(are)g(often)h(stored)f(in)i(plain)f(text,)h
-(it)f(is)g(p)r(ossible)g(to)g(edit)g(them)427 551 y(using)37
-b(a)g(text)h(editor.)65 b(This)37 b(giv)n(es)f(rise)h(to)g(the)h(p)r
-(ossibilit)n(y)f(of)g(gen)n(uine)g(errors)e(in)j(the)f(description)427
-650 y(due)25 b(to)g(\014nger-slips,)f(t)n(yp)r(os,)i(or)e(simple)h
-(mis-understanding.)35 b(Suc)n(h)25 b(inappropriate)e(attributes)i
-(will)g(b)r(e)427 750 y(ignored)k(if)h(Strict)g(is)g(left)g(at)g(its)g
-(default)g(zero)f(v)-5 b(alue.)43 b(This)30 b(will)g(cause)f(the)h
-(mis-sp)r(elled)g(attribute)g(to)427 849 y(rev)n(ert)c(to)h(its)g
-(default)g(v)-5 b(alue,)27 b(p)r(oten)n(tially)g(causing)f(subtle)h(c)n
-(hanges)f(in)h(the)h(b)r(eha)n(viour)d(of)i(application)427
-949 y(soft)n(w)n(are.)38 b(If)29 b(suc)n(h)f(an)g(e\013ect)h(is)g(susp)
-r(ected,)g(the)g(Strict)f(attribute)h(can)f(b)r(e)h(set)f(non-zero,)f
-(resulting)h(in)427 1049 y(the)g(erroneous)e(attribute)i(b)r(eing)f
-(iden)n(ti\014ed)h(in)g(an)f(error)f(message.)259 1181
-y Fc(FitsChan)427 1281 y Fk(The)20 b(returned)e(KeyMap)h(will)g(con)n
-(tain)g(w)n(arnings)f(for)g(all)h(conditions)g(listed)h(in)f(the)h(W)-7
-b(arnings)18 b(attribute.)259 1413 y Fc(XmlChan)427 1513
-y Fk(Rep)r(orts)27 b(con)n(v)n(ersion)f(errors)f(that)j(result)f(in)h
-(what)g(are)e(usally)h(insigni\014can)n(t)g(c)n(hanges.)0
-1675 y Fc(Returned)32 b(V)-8 b(alue:)259 1811 y(AST)p
-Ft(_)p Fc(W)d(ARNINGS)32 b(=)g(INTEGER)427 1910 y Fk(A)24
-b(p)r(oin)n(ter)g(to)g(the)g(KeyMap)f(holding)g(the)h(w)n(arning)f
-(messages,)g(or)g(AST)p Ft(__)p Fk(NULL)h(if)g(no)f(w)n(arnings)g(w)n
-(ere)427 2010 y(issued)28 b(during)f(the)h(previous)e(read)h(op)r
-(eration.)0 2171 y Fc(Notes:)340 2454 y Fj(\017)45 b
-Fk(The)28 b(returned)f(KeyMap)g(uses)g(k)n(eys)g(of)g(the)h(form)f
-Ft(")p Fk(W)-7 b(arning)p Ft(_)p Fk(1)p Ft(")p Fk(,)26
-b Ft(")p Fk(W)-7 b(arning)p Ft(_)p Fk(2)p Ft(")p Fk(,)25
-b(etc.)340 2586 y Fj(\017)45 b Fk(A)30 b(v)-5 b(alue)29
-b(of)g(AST)p Ft(__)p Fk(NULL)h(will)f(b)r(e)h(returned)f(if)h(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)f(with)i(ST)-7 b(A)g(TUS)30
-b(set)g(to)f(an)427 2686 y(error)d(v)-5 b(alue,)27 b(or)g(if)h(it)g
-(should)g(fail)f(for)g(an)n(y)g(reason.)p 0 2884 3780
-12 v 0 3015 a FA(AST)p Fe(_)p FA(W)l(CSMAP)466 b Fd(Create)37
-b(a)h(WcsMap)469 b FA(AST)p Fe(_)p FA(W)l(CSMAP)0 3203
-y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(WcsMap)h(and)f(optionally)g(initialises)g(its)h(attributes.)227
-3327 y(A)g(WcsMap)g(is)f(used)h(to)g(represen)n(t)e(sky)h(co)r
-(ordinate)g(pro)5 b(jections)26 b(as)h(describ)r(ed)h(in)f(the)i
-(\(draft\))f(FITS)g(w)n(orld)227 3427 y(co)r(ordinate)20
-b(system)g(\(FITS-W)n(CS\))h(pap)r(er)f(b)n(y)g(E.W.)h(Griesen)f(and)g
-(M.)h(Calabretta)e(\(A)i(&)f(A,)h(in)g(preparation\).)227
-3527 y(This)29 b(pap)r(er)f(de\014nes)h(a)f(set)h(of)f(functions,)h(or)
-f(sky)g(pro)5 b(jections,)28 b(whic)n(h)h(transform)e
-(longitude-latitude)i(pairs)227 3626 y(represen)n(ting)d(spherical)h
-(celestial)g(co)r(ordinates)f(in)n(to)h(corresp)r(onding)f(pairs)h(of)g
-(Cartesian)f(co)r(ordinates)g(\(and)227 3726 y(vice)i(v)n(ersa\).)227
-3850 y(A)j(WcsMap)f(is)g(a)g(sp)r(ecialised)g(form)g(of)g(Mapping)g
-(whic)n(h)g(implemen)n(ts)h(these)f(sky)g(pro)5 b(jections)29
-b(and)h(applies)227 3950 y(them)25 b(to)g(a)f(sp)r(eci\014ed)h(pair)f
-(of)g(co)r(ordinates.)35 b(All)25 b(the)g(pro)5 b(jections)23
-b(in)i(the)g(FITS-W)n(CS)g(pap)r(er)f(are)g(supp)r(orted,)227
-4049 y(plus)32 b(the)f(no)n(w)g(deprecated)f Ft(")p Fk(T)-7
-b(AN)32 b(with)f(p)r(olynomial)g(correction)e(terms)p
-Ft(")i Fk(pro)5 b(jection)30 b(whic)n(h)h(is)g(refered)g(to)227
-4149 y(here)22 b(b)n(y)g(the)g(co)r(de)g Ft(")p Fk(TPN)p
-Ft(")p Fk(.)34 b(Using)22 b(the)g(FITS-W)n(CS)g(terminology)-7
-b(,)22 b(the)g(transformation)f(is)h(b)r(et)n(w)n(een)g
-Ft(")p Fk(nativ)n(e)227 4249 y(spherical)p Ft(")32 b
-Fk(and)g Ft(")p Fk(pro)5 b(jection)31 b(plane)p Ft(")h
-Fk(co)r(ordinates.)51 b(These)32 b(co)r(ordinates)g(ma)n(y)-7
-b(,)33 b(optionally)-7 b(,)33 b(b)r(e)g(em)n(b)r(edded)227
-4348 y(in)j(a)f(space)g(with)h(more)f(than)h(t)n(w)n(o)f(dimensions,)i
-(the)f(remaining)f(co)r(ordinates)f(b)r(eing)i(copied)f(unc)n(hanged.)
-227 4448 y(Note,)27 b(ho)n(w)n(ev)n(er,)d(that)j(for)f(consistency)f
-(with)i(other)e(AST)i(facilities,)g(a)f(WcsMap)g(handles)g(co)r
-(ordinates)e(that)227 4548 y(represen)n(t)j(angles)f(in)i(radians)e
-(\(rather)h(than)h(the)g(degrees)e(used)i(b)n(y)f(FITS-W)n(CS\).)227
-4672 y(The)32 b(t)n(yp)r(e)g(of)f(FITS-W)n(CS)h(pro)5
-b(jection)31 b(to)g(b)r(e)h(used)g(and)f(the)h(co)r(ordinates)e
-(\(axes\))h(to)h(whic)n(h)f(it)h(applies)g(are)227 4772
-y(sp)r(eci\014ed)g(when)g(a)g(WcsMap)g(is)f(\014rst)h(created.)49
-b(The)32 b(pro)5 b(jection)31 b(t)n(yp)r(e)h(ma)n(y)f(subsequen)n(tly)g
-(b)r(e)h(determined)227 4871 y(using)g(the)f(WcsT)n(yp)r(e)h(attribute)
-g(and)f(the)h(co)r(ordinates)e(on)i(whic)n(h)f(it)h(acts)f(ma)n(y)g(b)r
-(e)h(determined)g(using)f(the)227 4971 y(WcsAxis\(lonlat\))d
-(attribute.)227 5095 y(Eac)n(h)37 b(WcsMap)i(also)e(allo)n(ws)g(up)i
-(to)f(100)f Ft(")p Fk(pro)5 b(jection)37 b(parameters)p
-Ft(")f Fk(to)i(b)r(e)h(asso)r(ciated)e(with)i(eac)n(h)e(axis.)227
-5195 y(These)31 b(sp)r(ecify)h(the)g(precise)f(form)g(of)g(the)h(pro)5
-b(jection,)31 b(and)h(are)e(accessed)g(using)h(PVi)p
-Ft(_)p Fk(m)h(attribute,)g(where)227 5295 y Ft(")p Fk(i)p
-Ft(")27 b Fk(is)h(the)g(in)n(teger)f(axis)h(index)f(\(starting)h(at)g
-(1\),)f(and)h(m)g(is)g(an)g(in)n(teger)f Ft(")p Fk(parameter)f(index)p
-Ft(")h Fk(in)h(the)h(range)d(0)227 5394 y(to)i(99.)39
-b(The)28 b(n)n(um)n(b)r(er)g(of)g(pro)5 b(jection)27
-b(parameters)g(required)g(b)n(y)h(eac)n(h)g(pro)5 b(jection,)27
-b(and)i(their)f(meanings,)g(are)227 5494 y(dep)r(enden)n(t)c(up)r(on)e
-(the)h(pro)5 b(jection)22 b(t)n(yp)r(e)h(\(most)g(pro)5
-b(jections)21 b(either)h(do)h(not)f(use)h(an)n(y)f(pro)5
-b(jection)21 b(parameters,)227 5593 y(or)h(use)g(parameters)f(1)h(and)g
-(2)g(asso)r(ciated)f(with)i(the)g(latitude)g(axis\).)35
-b(Before)21 b(creating)h(a)g(WcsMap)g(y)n(ou)g(should)227
-5693 y(consult)31 b(the)h(FITS-W)n(CS)g(pap)r(er)e(for)h(details)g(of)h
-(whic)n(h)f(pro)5 b(jection)30 b(parameters)g(are)g(required,)i(and)f
-(whic)n(h)p eop end
-%%Page: 376 386
-TeXDict begin 376 385 bop 0 52 a FG(376)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 351 y Fk(ha)n(v)n(e)h
-(defaults.)53 b(When)34 b(creating)e(the)h(WcsMap,)h(y)n(ou)e(m)n(ust)h
-(explicitly)g(set)g(v)-5 b(alues)33 b(for)f(all)h(those)g(required)227
-451 y(pro)5 b(jection)27 b(parameters)f(whic)n(h)h(do)h(not)f(ha)n(v)n
-(e)g(defaults)g(de\014ned)h(in)g(this)g(pap)r(er.)0 611
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_WCSMAP\()c
-(NCOORD,)i(TYPE,)g(LONAX,)g(LATAX,)g(OPTIONS,)g(STATUS)g(\))0
-772 y Fc(Argumen)m(ts:)259 920 y(NCOORD)31 b(=)h(INTEGER)f(\(Giv)m
-(en\))427 1019 y Fk(The)25 b(n)n(um)n(b)r(er)f(of)g(co)r(ordinate)g(v)
--5 b(alues)24 b(for)g(eac)n(h)f(p)r(oin)n(t)i(to)f(b)r(e)h(transformed)
-f(\(i.e.)36 b(the)25 b(n)n(um)n(b)r(er)f(of)g(dimen-)427
-1119 y(sions)g(of)g(the)h(space)f(in)g(whic)n(h)g(the)h(p)r(oin)n(ts)g
-(will)f(reside\).)36 b(This)24 b(m)n(ust)g(b)r(e)h(at)f(least)g(2.)36
-b(The)24 b(same)g(n)n(um)n(b)r(er)427 1218 y(is)k(applicable)f(to)g(b)r
-(oth)h(input)h(and)e(output)h(p)r(oin)n(ts.)259 1357
-y Fc(TYPE)33 b(=)f(INTEGER)f(\(Giv)m(en\))427 1457 y
-Fk(The)g(t)n(yp)r(e)f(of)g(FITS-W)n(CS)g(pro)5 b(jection)29
-b(to)i(apply)-7 b(.)44 b(This)30 b(should)g(b)r(e)h(giv)n(en)e(as)g(a)h
-(sym)n(b)r(olic)g(v)-5 b(alue)30 b(suc)n(h)427 1556 y(as)j(AST)p
-Ft(__)p Fk(T)-7 b(AN)34 b(\(for)g(a)f(tangen)n(t)h(plane)f(pro)5
-b(jection\),)35 b(where)e(the)h(c)n(haracters)e(follo)n(wing)h(the)h
-(double)427 1656 y(underscore)19 b(giv)n(e)h(the)h(pro)5
-b(jection)20 b(t)n(yp)r(e)h(co)r(de)f(\(in)i(upp)r(er)e(case\))h(as)f
-(used)g(in)h(the)g(FITS-W)n(CS)g Ft(")p Fk(CTYPEi)p Ft(")427
-1755 y Fk(k)n(eyw)n(ord.)34 b(Y)-7 b(ou)23 b(should)g(consult)g(the)h
-(FITS-W)n(CS)f(pap)r(er)g(for)f(a)h(list)h(of)f(the)g(a)n(v)-5
-b(ailable)22 b(pro)5 b(jections.)35 b(The)427 1855 y(additional)41
-b(co)r(de)f(of)h(AST)p Ft(__)p Fk(TPN)g(can)f(b)r(e)h(supplied)h(whic)n
-(h)f(represen)n(ts)e(a)i(T)-7 b(AN)41 b(pro)5 b(jection)40
-b(with)427 1955 y(p)r(olynomial)27 b(correction)f(terms)h(as)g
-(de\014ned)h(in)g(an)f(early)g(draft)g(of)h(the)g(FITS-W)n(CS)g(pap)r
-(er.)259 2093 y Fc(LONAX)k(=)g(INTEGER)g(\(Giv)m(en\))427
-2193 y Fk(The)c(index)g(of)f(the)h(longitude)g(axis.)36
-b(This)27 b(should)h(lie)f(in)h(the)g(range)e(1)i(to)f(NCOORD.)259
-2331 y Fc(LA)-8 b(T)g(AX)33 b(=)f(INTEGER)g(\(Giv)m(en\))427
-2431 y Fk(The)f(index)g(of)g(the)g(latitude)g(axis.)45
-b(This)31 b(should)f(lie)h(in)g(the)g(range)f(1)g(to)h(NCOORD)f(and)h
-(b)r(e)g(distinct)427 2530 y(from)d(LONAX.)259 2669 y
-Fc(OPTIONS)k(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f
-Fc(\))h(\(Giv)m(en\))427 2768 y Fk(A)22 b(c)n(haracter)e(string)h(con)n
-(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g(attribute)g
-(assignmen)n(ts)f(to)g(b)r(e)427 2868 y(used)26 b(for)e(initialising)h
-(the)h(new)f(WcsMap.)36 b(The)26 b(syn)n(tax)e(used)h(is)h(iden)n
-(tical)f(to)g(that)h(for)e(the)i(AST)p Ft(_)p Fk(SET)427
-2968 y(routine.)427 3087 y(If)i(the)g(sky)f(pro)5 b(jection)26
-b(to)i(b)r(e)g(implemen)n(ted)g(requires)e(pro)5 b(jection)26
-b(parameter)g(v)-5 b(alues)27 b(to)h(b)r(e)g(set,)f(then)427
-3186 y(this)36 b(should)e(normally)g(b)r(e)i(done)e(here)h(via)f(the)i
-(PVi)p Ft(_)p Fk(m)e(attribute)h(\(see)g(the)h Ft(")p
-Fk(Examples)p Ft(")d Fk(section\).)427 3286 y(Setting)22
-b(v)-5 b(alues)21 b(for)g(these)h(parameters)d(is)j(mandatory)e(if)i
-(they)f(do)g(not)h(ha)n(v)n(e)e(default)i(v)-5 b(alues)21
-b(\(as)g(de\014ned)427 3386 y(in)28 b(the)g(FITS-W)n(CS)g(pap)r(er\).)
-259 3524 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 3624 y Fk(The)c(global)e(status.)0 3797
-y Fc(Returned)32 b(V)-8 b(alue:)259 3944 y(AST)p Ft(_)p
-Fc(W)m(CSMAP)32 b(=)g(INTEGER)427 4044 y Fk(A)c(p)r(oin)n(ter)f(to)h
-(the)g(new)g(WcsMap.)0 4217 y Fc(Examples:)227 4368 y
-Fy(WCSMAP)46 b(=)i(AST)p Ft(_)p Fy(WCSMAP\()c(2,)k(AST)p
-Ft(__)p Fy(MER,)d(1,)i(2,)g(')g(',)h(STATUS)e(\))427
-4464 y Fk(Creates)19 b(a)h(WcsMap)g(that)g(implemen)n(ts)g(a)g(FITS-W)n
-(CS)g(Mercator)e(pro)5 b(jection)19 b(on)h(pairs)f(of)h(co)r
-(ordinates,)427 4564 y(with)28 b(co)r(ordinates)f(1)g(and)h(2)f
-(represen)n(ting)f(the)i(longitude)g(and)f(latitude)h(resp)r(ectiv)n
-(ely)-7 b(.)37 b(Note)27 b(that)h(the)427 4663 y(FITS-W)n(CS)g
-(Mercator)e(pro)5 b(jection)26 b(do)r(es)i(not)f(require)g(an)n(y)g
-(pro)5 b(jection)26 b(parameters.)227 4806 y Fy(WCSMAP)46
-b(=)i(AST)p Ft(_)p Fy(WCSMAP\()c(3,)k(AST)p Ft(__)p Fy(COE,)d(2,)i(3,)g
-('PV3)p Ft(_)p Fy(1=40.0',)d(STATUS)i(\))427 4901 y Fk(Creates)20
-b(a)g(WcsMap)g(that)h(implemen)n(ts)g(a)f(FITS-W)n(CS)g(conical)g
-(equal)g(area)f(pro)5 b(jection.)33 b(The)21 b(WcsMap)427
-5001 y(acts)k(on)h(p)r(oin)n(ts)f(in)h(a)f(3-dimensional)f(space;)i(co)
-r(ordinates)e(2)h(and)h(3)f(represen)n(t)f(longitude)i(and)f(latitude)
-427 5100 y(resp)r(ectiv)n(ely)-7 b(,)29 b(while)g(the)g(v)-5
-b(alues)29 b(of)g(co)r(ordinate)e(1)i(are)f(copied)g(unc)n(hanged.)40
-b(Pro)5 b(jection)28 b(parameter)f(1)427 5200 y(asso)r(ciat)n(y)n(ed)22
-b(with)j(the)g(latitude)f(axis)g(\(corresp)r(onding)e(to)i(FITS)h(k)n
-(eyw)n(ord)d Ft(")p Fk(PV3)p Ft(_)p Fk(1)p Ft(")p Fk(\))g(is)j
-(required)e(and)427 5300 y(has)k(no)h(default,)g(so)f(is)g(set)h
-(explicitly)g(to)f(40.0)g(degrees.)35 b(Pro)5 b(jection)26
-b(parameter)h(2)g(\(corresp)r(onding)f(to)427 5399 y(FITS)i(k)n(eyw)n
-(ord)e Ft(")p Fk(PV3)p Ft(_)p Fk(2)p Ft(")p Fk(\))f(is)j(required)f
-(but)h(has)f(a)g(default)h(of)g(zero,)e(so)h(need)h(not)f(b)r(e)h(sp)r
-(eci\014ed.)0 5572 y Fc(Notes:)p eop end
-%%Page: 377 387
-TeXDict begin 377 386 bop 3643 52 a FG(377)340 351 y
-Fj(\017)45 b Fk(The)34 b(forw)n(ard)f(transformation)f(of)i(a)g(WcsMap)
-f(con)n(v)n(erts)g(b)r(et)n(w)n(een)h(FITS-W)n(CS)g Ft(")p
-Fk(nativ)n(e)f(spherical)p Ft(")427 451 y Fk(and)24 b
-Ft(")p Fk(relativ)n(e)e(ph)n(ysical)p Ft(")g Fk(co)r(ordinates,)h
-(while)h(the)f(in)n(v)n(erse)g(transformation)e(con)n(v)n(erts)h(in)i
-(the)g(opp)r(osite)427 551 y(direction.)68 b(This)38
-b(arrangemen)n(t)e(ma)n(y)h(b)r(e)h(rev)n(ersed,)h(if)g(required,)g(b)n
-(y)f(using)g(AST)p Ft(_)p Fk(INVER)-7 b(T)38 b(or)f(b)n(y)427
-650 y(setting)28 b(the)g(In)n(v)n(ert)f(attribute)g(to)h(a)f(non-zero)f
-(v)-5 b(alue.)340 784 y Fj(\017)45 b Fk(If)27 b(an)n(y)f(set)h(of)f(co)
-r(ordinates)g(cannot)g(b)r(e)h(transformed)e(\(for)i(example,)f(man)n
-(y)g(pro)5 b(jections)26 b(do)g(not)g(co)n(v)n(er)427
-884 y(the)i(en)n(tire)f(celestial)h(sphere\),)f(then)h(a)f(WcsMap)h
-(will)f(yield)h(co)r(ordinate)e(v)-5 b(alues)28 b(of)f(AST)p
-Ft(__)p Fk(BAD.)340 1018 y Fj(\017)45 b Fk(The)29 b(v)-5
-b(alidit)n(y)28 b(of)g(an)n(y)g(pro)5 b(jection)27 b(parameters)g(giv)n
-(en)g(via)h(the)g(PVi)p Ft(_)p Fk(m)g(parameter)f(in)i(the)g(OPTIONS)
-427 1118 y(string)g(is)g(not)h(c)n(hec)n(k)n(ed)e(b)n(y)h(this)h
-(function.)43 b(Ho)n(w)n(ev)n(er,)28 b(their)i(v)-5 b(alidit)n(y)29
-b(is)g(c)n(hec)n(k)n(ed)g(when)g(the)h(resulting)427
-1217 y(WcsMap)21 b(is)f(used)g(to)h(transform)e(co)r(ordinates,)h(and)h
-(an)f(error)e(will)j(result)f(if)h(the)g(pro)5 b(jection)19
-b(parameters)427 1317 y(do)28 b(not)f(satisfy)g(all)h(the)g(required)e
-(constrain)n(ts)g(\(as)i(de\014ned)g(in)g(the)g(FITS-W)n(CS)f(pap)r
-(er\).)340 1451 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 1551 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)-2
-1715 y Fc(Status)33 b(Handling)n(:)227 1861 y Fk(The)d(protected)g(in)n
-(terface)f(to)g(this)h(function)h(includes)f(an)f(extra)g(parameter)f
-(at)i(the)g(end)g(of)g(the)g(parameter)227 1961 y(list)37
-b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)
-r(oin)n(ter)g(to)h(the)g(in)n(teger)e(inherited)i(status)f(v)-5
-b(ariable:)54 b Ft(")p Fk(in)n(t)227 2060 y Fj(\003)p
-Fk(status)p Ft(")p Fk(.)p 0 2262 3780 12 v 0 2393 a FA(AST)p
-Fe(_)p FA(WINMAP)1428 2392 y Fd(Create)37 b(a)i(WinMap)2833
-2393 y FA(AST)p Fe(_)p FA(WINMAP)0 2584 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(WinMap)h(and)g
-(optionally)e(initialises)i(its)g(attributes.)227 2710
-y(A)i(Winmap)g(is)f(a)g(linear)g(Mapping)g(whic)n(h)g(transforms)f(a)h
-(rectangular)e(windo)n(w)i(in)h(one)f(co)r(ordinate)f(system)227
-2809 y(in)n(to)g(a)f(similar)g(windo)n(w)g(in)h(another)f(co)r
-(ordinate)g(system)g(b)n(y)g(scaling)g(and)h(shifting)g(eac)n(h)f(axis)
-g(\(the)h(windo)n(w)227 2909 y(edges)f(b)r(eing)h(parallel)e(to)i(the)g
-(co)r(ordinate)e(axes\).)227 3035 y(A)g(WinMap)g(is)g(sp)r(eci\014ed)g
-(b)n(y)g(giving)f(the)h(co)r(ordinates)e(of)i(t)n(w)n(o)f(opp)r(osite)g
-(corners)f(\(A)j(and)e(B\))h(of)g(the)g(windo)n(w)227
-3134 y(in)i(b)r(oth)g(the)g(input)h(and)e(output)h(co)r(ordinate)f
-(systems.)0 3286 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_WINMAP\()c(NCOORD,)i(INA,)h(INB,)g(OUTA,)f(OUTB,)h(OPTIONS,)e
-(STATUS)h(\))0 3438 y Fc(Argumen)m(ts:)259 3577 y(NCOORD)31
-b(=)h(INTEGER)f(\(Giv)m(en\))427 3677 y Fk(The)25 b(n)n(um)n(b)r(er)f
-(of)g(co)r(ordinate)g(v)-5 b(alues)24 b(for)g(eac)n(h)f(p)r(oin)n(t)i
-(to)f(b)r(e)h(transformed)f(\(i.e.)36 b(the)25 b(n)n(um)n(b)r(er)f(of)g
-(dimen-)427 3776 y(sions)31 b(of)h(the)h(space)e(in)h(whic)n(h)g(the)g
-(p)r(oin)n(ts)g(will)g(reside\).)50 b(The)32 b(same)f(n)n(um)n(b)r(er)h
-(is)g(applicable)f(to)h(b)r(oth)427 3876 y(input)d(and)e(output)h(p)r
-(oin)n(ts.)259 4010 y Fc(INA\()k(NCOORD)f(\))h(=)g(DOUBLE)g(PRECISION)g
-(\(Giv)m(en\))427 4110 y Fk(An)21 b(arra)n(y)d(con)n(taining)i(the)g
-(co)r(ordinates)f(of)i(corner)e(A)i(of)f(the)h(windo)n(w)f(in)g(the)h
-(input)h(co)r(ordinate)d(system.)259 4244 y Fc(INB\()32
-b(NCOORD)f(\))h(=)g(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427
-4343 y Fk(An)21 b(arra)n(y)e(con)n(taining)g(the)i(co)r(ordinates)f(of)
-g(corner)f(B)i(of)g(the)g(windo)n(w)f(in)h(the)g(input)g(co)r(ordinate)
-f(system.)259 4478 y Fc(OUT)-8 b(A\()33 b(NCOORD)e(\))h(=)g(DOUBLE)g
-(PRECISION)f(\(Giv)m(en\))427 4577 y Fk(An)38 b(arra)n(y)e(con)n
-(taining)g(the)i(co)r(ordinates)e(of)i(corner)e(A)i(of)g(the)g(windo)n
-(w)f(in)h(the)g(output)g(co)r(ordinate)427 4677 y(system.)259
-4811 y Fc(OUTB\()33 b(NCOORD)d(\))i(=)g(DOUBLE)h(PRECISION)e(\(Giv)m
-(en\))427 4911 y Fk(An)39 b(arra)n(y)c(con)n(taining)i(the)h(co)r
-(ordinates)f(of)g(corner)g(B)h(of)f(the)i(windo)n(w)e(in)h(the)g
-(output)h(co)r(ordinate)427 5010 y(system.)259 5144 y
-Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 5244 y Fk(A)22 b(c)n(haracter)e
-(string)h(con)n(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g
-(attribute)g(assignmen)n(ts)f(to)g(b)r(e)427 5344 y(used)26
-b(for)e(initialising)i(the)f(new)h(WinMap.)36 b(The)26
-b(syn)n(tax)e(used)h(is)g(iden)n(tical)h(to)f(that)g(for)g(the)h(AST)p
-Ft(_)p Fk(SET)427 5443 y(routine.)259 5577 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-5677 y Fk(The)c(global)e(status.)p eop end
-%%Page: 378 388
-TeXDict begin 378 387 bop 0 52 a FG(378)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(Returned)h(V)-8
-b(alue:)259 535 y(AST)p Ft(_)p Fc(WINMAP)32 b(=)g(INTEGER)427
-635 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(WinMap.)0
-844 y Fc(Notes:)340 1174 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 1274 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)-2
-1483 y Fc(Status)33 b(Handling)n(:)227 1629 y Fk(The)d(protected)g(in)n
-(terface)f(to)g(this)h(function)h(includes)f(an)f(extra)g(parameter)f
-(at)i(the)g(end)g(of)g(the)g(parameter)227 1729 y(list)37
-b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)
-r(oin)n(ter)g(to)h(the)g(in)n(teger)e(inherited)i(status)f(v)-5
-b(ariable:)54 b Ft(")p Fk(in)n(t)227 1829 y Fj(\003)p
-Fk(status)p Ft(")p Fk(.)p 0 2075 3780 12 v 0 2206 a FA(AST)p
-Fe(_)p FA(WRITE)1121 2207 y Fd(W)-10 b(rite)38 b(an)g(Ob)7
-b(ject)38 b(to)g(a)h(Channel)2977 2206 y FA(AST)p Fe(_)p
-FA(WRITE)0 2443 y Fc(Description:)44 b Fk(This)21 b(function)h(writes)f
-(an)g(Ob)5 b(ject)21 b(to)g(a)f(Channel,)j(app)r(ending)e(it)g(to)g(an)
-n(y)g(previous)f(Ob)5 b(jects)20 b(written)227 2543 y(to)28
-b(that)g(Channel.)0 2740 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_WRITE\()c(THIS,)j(OBJECT,)f(STATUS)g(\))0
-2937 y Fc(Argumen)m(ts:)259 3121 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 3221 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Channel.)259
-3377 y Fc(OBJECT)k(=)g(INTEGER)f(\(Giv)m(en\))427 3477
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject)27 b(whic)n(h)h(is)f(to)
-h(b)r(e)g(written.)259 3633 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f
-(\(Giv)m(en)h(and)g(Returned\))427 3733 y Fk(The)c(global)e(status.)0
-3942 y Fc(Returned)32 b(V)-8 b(alue:)259 4126 y(AST)p
-Ft(_)p Fc(WRITE)32 b(=)g(INTEGER)427 4226 y Fk(The)23
-b(n)n(um)n(b)r(er)g(of)g(Ob)5 b(jects)23 b(written)g(to)g(the)g
-(Channel)g(b)n(y)g(this)g(in)n(v)n(o)r(cation)e(of)i(AST)p
-Ft(_)p Fk(WRITE)g(\(normally)-7 b(,)427 4326 y(this)28
-b(will)g(b)r(e)g(one\).)0 4535 y Fc(Notes:)340 4865 y
-Fj(\017)45 b Fk(A)24 b(v)-5 b(alue)23 b(of)g(zero)g(will)g(b)r(e)h
-(returned)f(if)g(this)h(function)g(is)f(in)n(v)n(ok)n(ed)f(with)i(ST)-7
-b(A)g(TUS)24 b(set)f(to)g(an)g(error)f(v)-5 b(alue,)427
-4965 y(or)27 b(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)340
-5121 y Fj(\017)45 b Fk(In)n(v)n(oking)27 b(this)h(function)h(will)f
-(usually)f(cause)h(the)g(sink)g(function)g(asso)r(ciated)f(with)h(the)h
-(c)n(hannel)e(to)h(b)r(e)427 5221 y(called)g(in)g(order)f(to)h
-(transfer)f(a)h(textual)g(description)g(of)g(the)g(supplied)g(ob)5
-b(ject)28 b(to)g(some)g(external)f(data)427 5321 y(store.)36
-b(Ho)n(w)n(ev)n(er,)24 b(the)i(FitsChan)g(class)f(b)r(eha)n(v)n(es)g
-(di\013eren)n(tly)-7 b(.)36 b(In)n(v)n(oking)24 b(this)i(function)h(on)
-e(a)h(FitsChan)427 5420 y(causes)35 b(new)g(FITS)h(header)f(cards)f(to)
-h(b)r(e)h(added)g(to)f(an)g(in)n(ternal)g(bu\013er)h(\(the)g(sink)f
-(function)h(is)g(not)427 5520 y(in)n(v)n(ok)n(ed\).)58
-b(This)35 b(bu\013er)h(is)f(written)g(out)g(through)f(the)i(sink)f
-(function)g(only)g(when)g(the)h(FitsChan)f(is)427 5619
-y(deleted.)p eop end
-%%Page: 379 389
-TeXDict begin 379 388 bop 3643 52 a FG(379)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(XMLCHAN)1374 483 y Fd(Create)38
-b(an)g(XmlChan)2729 482 y FA(AST)p Fe(_)p FA(XMLCHAN)0
-663 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(XmlChan)h(and)g(optionally)e(initialises)i(its)g(attributes.)227
-790 y(A)36 b(XmlChan)f(is)g(a)f(sp)r(ecialised)h(form)f(of)h(Channel)g
-(whic)n(h)g(supp)r(orts)g(XML)g(I/O)f(op)r(erations.)58
-b(W)-7 b(riting)35 b(an)227 890 y(Ob)5 b(ject)38 b(to)f(an)g(XmlChan)h
-(\(using)f(AST)p Ft(_)p Fk(WRITE\))h(will,)i(if)e(the)g(Ob)5
-b(ject)38 b(is)f(suitable,)j(generate)c(an)h(XML)227
-989 y(description)27 b(of)g(that)g(Ob)5 b(ject,)28 b(and)f(reading)e
-(from)i(an)g(XmlChan)h(will)f(create)f(a)h(new)g(Ob)5
-b(ject)27 b(from)g(its)g(XML)227 1089 y(description.)227
-1216 y(Normally)-7 b(,)39 b(when)f(y)n(ou)e(use)i(an)f(XmlChan,)j(y)n
-(ou)d(should)g(pro)n(vide)f Ft(")p Fk(source)p Ft(")f
-Fk(and)j Ft(")p Fk(sink)p Ft(")e Fk(routines)h(whic)n(h)227
-1316 y(connect)31 b(it)h(to)f(an)g(external)f(data)g(store)h(b)n(y)f
-(reading)g(and)h(writing)g(the)h(resulting)e(XML)h(text.)48
-b(By)31 b(default,)227 1415 y(ho)n(w)n(ev)n(er,)26 b(a)h(Channel)g
-(will)h(read)f(from)g(standard)g(input)h(and)g(write)f(to)h(standard)e
-(output.)0 1569 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_XMLCHAN\()c(SOURCE,)h(SINK,)i(OPTIONS,)e(STATUS)h(\))0
-1723 y Fc(Argumen)m(ts:)259 1865 y(SOUR)m(CE)32 b(=)g(SUBR)m(OUTINE)g
-(\(Giv)m(en\))427 1964 y Fk(A)g(source)e(routine,)j(whic)n(h)e(is)h(a)f
-(subroutine)g(whic)n(h)g(tak)n(es)g(a)g(single)g(in)n(teger)g(error)e
-(status)j(argumen)n(t.)427 2064 y(This)27 b(routine)g(will)g(b)r(e)g
-(used)g(b)n(y)g(the)g(XmlChan)h(to)f(obtain)f(lines)h(of)g(input)h
-(text.)37 b(On)27 b(eac)n(h)f(in)n(v)n(o)r(cation,)427
-2163 y(it)k(should)g(read)f(the)h(next)g(input)g(line)g(from)g(some)f
-(external)g(XML)h(data)f(store,)g(and)h(then)g(return)f(the)427
-2263 y(resulting)c(text)g(to)f(the)i(AST)f(library)e(b)n(y)i(calling)f
-(AST)p Ft(_)p Fk(PUTLINE.)g(It)i(should)e(supply)h(a)g(negativ)n(e)e
-(line)427 2363 y(length)32 b(when)f(there)h(are)e(no)h(more)g(lines)g
-(to)g(read.)48 b(If)32 b(an)f(error)e(o)r(ccurs,)j(it)g(should)f(set)g
-(its)h(o)n(wn)f(error)427 2462 y(status)d(argumen)n(t)e(to)i(an)f
-(error)f(v)-5 b(alue)27 b(b)r(efore)g(returning.)427
-2580 y(If)g(the)g(n)n(ull)f(routine)g(AST)p Ft(_)p Fk(NULL)h(is)f
-(suppied)h(as)e(the)i(SOUR)n(CE)f(v)-5 b(alue,)26 b(the)h(Channel)f
-(will)g(read)g(from)427 2679 y(standard)h(input)h(instead.)259
-2815 y Fc(SINK)k(=)g(SUBR)m(OUTINE)g(\(Giv)m(en\))427
-2914 y Fk(A)24 b(sink)f(routine,)h(whic)n(h)f(is)g(a)g(subroutine)g
-(whic)n(h)g(tak)n(es)f(a)h(single)g(in)n(teger)f(error)f(status)i
-(argumen)n(t.)35 b(This)427 3014 y(routine)g(will)f(b)r(e)h(used)g(b)n
-(y)f(the)h(XmlChan)g(to)g(deliv)n(er)f(lines)g(of)h(output)g(text.)59
-b(On)34 b(eac)n(h)g(in)n(v)n(o)r(cation,)427 3113 y(it)c(should)f
-(obtain)h(the)f(next)h(output)g(line)g(from)f(the)h(AST)g(library)e(b)n
-(y)h(calling)g(AST)p Ft(_)p Fk(GETLINE,)g(and)427 3213
-y(then)d(deliv)n(er)e(the)i(resulting)f(text)g(to)g(some)g(external)f
-(XML)i(data)e(store.)36 b(If)25 b(an)g(error)e(o)r(ccurs,)i(it)h
-(should)427 3313 y(set)i(its)g(o)n(wn)f(error)e(status)j(argumen)n(t)e
-(to)i(an)f(error)f(v)-5 b(alue)27 b(b)r(efore)g(returning.)427
-3430 y(If)41 b(the)g(n)n(ull)f(routine)g(AST)p Ft(_)p
-Fk(NULL)h(is)f(suppied)g(as)g(the)h(SINK)f(v)-5 b(alue,)43
-b(the)e(Channel)f(will)h(write)f(to)427 3530 y(standard)27
-b(output)h(instead.)259 3665 y Fc(OPTIONS)k(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-3765 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h(optional)
-f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f(to)g(b)r
-(e)427 3864 y(used)i(for)g(initialising)g(the)h(new)f(XmlChan.)36
-b(The)23 b(syn)n(tax)g(used)g(is)g(iden)n(tical)g(to)g(that)h(for)e
-(the)i(AST)p Ft(_)p Fk(SET)427 3964 y(routine.)259 4099
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 4199 y Fk(The)c(global)e(status.)0 4365 y Fc(Returned)32
-b(V)-8 b(alue:)259 4506 y(AST)p Ft(_)p Fc(XMLCHAN)32
-b(=)g(INTEGER)427 4606 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g
-(XmlChan.)0 4772 y Fc(Notes:)340 5060 y Fj(\017)45 b
-Fk(The)27 b(names)g(of)g(the)h(routines)e(supplied)i(for)e(the)i(SOUR)n
-(CE)e(and)h(SINK)g(argumen)n(ts)f(should)h(app)r(ear)f(in)427
-5159 y(EXTERNAL)33 b(statemen)n(ts)g(in)h(the)f(F)-7
-b(ortran)32 b(routine)h(whic)n(h)g(in)n(v)n(ok)n(es)e(AST)p
-Ft(_)p Fk(XMLCHAN.)k(Ho)n(w)n(ev)n(er,)427 5259 y(this)h(is)f(not)g
-(generally)f(necessary)f(for)i(the)g(n)n(ull)h(routine)f(AST)p
-Ft(_)p Fk(NULL)g(\(so)g(long)f(as)h(the)h(AST)p Ft(_)p
-Fk(P)-7 b(AR)427 5359 y(include)28 b(\014le)g(has)f(b)r(een)h(used\).)
-340 5494 y Fj(\017)45 b Fk(If)28 b(the)g(external)e(data)h(source)f(or)
-g(sink)i(uses)e(a)h(c)n(haracter)f(enco)r(ding)g(other)h(than)h(ASCI)r
-(I,)g(the)f(supplied)427 5593 y(source)i(and)g(sink)g(functions)h
-(should)f(translate)g(b)r(et)n(w)n(een)h(the)f(external)g(c)n(haracter)
-f(enco)r(ding)h(and)g(the)427 5693 y(in)n(ternal)e(ASCI)r(I)i(enco)r
-(ding)e(used)g(b)n(y)h(AST.)p eop end
-%%Page: 380 390
-TeXDict begin 380 389 bop 0 52 a FG(380)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fk(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 451 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)340 584 y Fj(\017)45 b Fk(Note)36 b(that)f(the)h(n)n(ull)f
-(routine)g(AST)p Ft(_)p Fk(NULL)h(\(one)f(underscore\))f(is)h
-(di\013eren)n(t)h(to)f(AST)p Ft(__)p Fk(NULL)g(\(t)n(w)n(o)427
-683 y(underscores\),)26 b(whic)n(h)i(is)f(the)h(n)n(ull)g(Ob)5
-b(ject)28 b(p)r(oin)n(ter.)p 0 883 3780 12 v 0 1013 a
-FA(AST)p Fe(_)p FA(ZOOMMAP)325 b Fd(Create)37 b(a)i(Zo)s(omMap)326
-b FA(AST)p Fe(_)p FA(ZOOMMAP)0 1202 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(Zo)r(omMap)g(and)g
-(optionally)g(initialises)h(its)f(attributes.)227 1326
-y(A)40 b(Zo)r(omMap)e(is)h(a)f(Mapping)h(whic)n(h)g Ft(")p
-Fk(zo)r(oms)p Ft(")f Fk(a)g(set)h(of)g(p)r(oin)n(ts)g(ab)r(out)g(the)h
-(origin)e(b)n(y)h(m)n(ultiplying)g(all)227 1426 y(co)r(ordinate)25
-b(v)-5 b(alues)25 b(b)n(y)h(the)g(same)f(scale)g(factor)f(\(the)j(in)n
-(v)n(erse)d(transformation)g(is)i(p)r(erformed)f(b)n(y)g(dividing)h(b)n
-(y)227 1526 y(this)i(scale)f(factor\).)0 1675 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(RESULT)41 b(=)i(AST_ZOOMMAP\()c(NCOORD,)h(ZOOM,)i
-(OPTIONS,)e(STATUS)h(\))0 1824 y Fc(Argumen)m(ts:)259
-1961 y(NCOORD)31 b(=)h(INTEGER)f(\(Giv)m(en\))427 2060
-y Fk(The)25 b(n)n(um)n(b)r(er)f(of)g(co)r(ordinate)g(v)-5
-b(alues)24 b(for)g(eac)n(h)f(p)r(oin)n(t)i(to)f(b)r(e)h(transformed)f
-(\(i.e.)36 b(the)25 b(n)n(um)n(b)r(er)f(of)g(dimen-)427
-2160 y(sions)31 b(of)h(the)h(space)e(in)h(whic)n(h)g(the)g(p)r(oin)n
-(ts)g(will)g(reside\).)50 b(The)32 b(same)f(n)n(um)n(b)r(er)h(is)g
-(applicable)f(to)h(b)r(oth)427 2260 y(input)d(and)e(output)h(p)r(oin)n
-(ts.)259 2393 y Fc(ZOOM)j(=)h(DOUBLE)h(PRECISION)e(\(Giv)m(en\))427
-2492 y Fk(Initial)c(scale)e(factor)g(b)n(y)h(whic)n(h)h(co)r(ordinate)e
-(v)-5 b(alues)25 b(should)h(b)r(e)h(m)n(ultiplied)g(\(b)n(y)f(the)h
-(forw)n(ard)d(transfor-)427 2592 y(mation\))f(or)e(divided)i(\(b)n(y)g
-(the)g(in)n(v)n(erse)e(transformation\).)34 b(This)22
-b(factor)g(ma)n(y)g(subsequen)n(tly)g(b)r(e)h(c)n(hanged)427
-2691 y(via)k(the)h(Zo)r(omMap's)f(Zo)r(om)g(attribute.)37
-b(It)28 b(ma)n(y)f(b)r(e)h(p)r(ositiv)n(e)f(or)f(negativ)n(e,)h(but)h
-(should)g(not)f(b)r(e)h(zero.)259 2824 y Fc(OPTIONS)k(=)g(CHARA)m(CTER)
-g Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-2924 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h(optional)
-f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f(to)g(b)r
-(e)427 3024 y(used)h(for)f(initialising)h(the)g(new)g(Zo)r(omMap.)34
-b(The)22 b(syn)n(tax)f(used)g(is)h(iden)n(tical)g(to)f(that)i(for)e
-(the)h(AST)p Ft(_)p Fk(SET)427 3123 y(routine.)259 3256
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 3356 y Fk(The)c(global)e(status.)0 3518 y Fc(Returned)32
-b(V)-8 b(alue:)259 3654 y(AST)p Ft(_)p Fc(ZOOMMAP)32
-b(=)g(INTEGER)427 3754 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(Zo)r
-(omMap.)0 3915 y Fc(Notes:)340 4198 y Fj(\017)45 b Fk(A)21
-b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 4298
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 4459 y Fc(Status)33
-b(Handling)n(:)227 4606 y Fk(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 4705 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fk(in)n(t)227 4805 y Fj(\003)p Fk(status)p Ft(")p Fk(.)p
-eop end
-%%Page: 381 391
-TeXDict begin 381 390 bop 3643 52 a FG(381)0 351 y FA(C)135
-b(AST)43 b(A)l(ttribute)j(Descriptions)p 0 596 3780 12
-v 0 735 a(Abbrev\(axis\))1073 728 y Fd(Abbreviate)37
-b(leading)g(\014elds)i(within)1330 843 y(n)m(umerical)d(axis)i(lab)s
-(els?)3010 735 y FA(Abbrev\(axis\))0 1021 y Fc(Description:)44
-b Fk(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)
-h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-1120 y(AST)p Ft(_)p Fk(GRID)42 b(routine\))e(b)n(y)g(determining)h
-(whether)g(matc)n(hing)f(leading)g(\014elds)g(should)h(b)r(e)g(remo)n
-(v)n(ed)e(from)227 1220 y(adjacen)n(t)24 b(n)n(umerical)f(axis)g(lab)r
-(els.)36 b(It)24 b(tak)n(es)g(a)f(separate)g(v)-5 b(alue)24
-b(for)f(eac)n(h)h(ph)n(ysical)f(axis)g(of)h(a)g(Plot)g(so)f(that,)i
-(for)227 1320 y(instance,)j(the)h(setting)f Ft(")p Fk(Abbrev\(2\)=0)p
-Ft(")e Fk(sp)r(eci\014es)j(that)f(matc)n(hing)g(leading)f(\014elds)h
-(should)g(not)h(b)r(e)f(remo)n(v)n(ed)227 1419 y(on)g(the)g(second)f
-(axis.)227 1548 y(If)33 b(the)g(Abbrev)g(v)-5 b(alue)32
-b(of)g(a)h(Plot)f(is)g(non-zero)f(\(the)i(default\),)i(then)e(leading)f
-(\014elds)g(will)h(b)r(e)g(remo)n(v)n(ed)e(from)227 1647
-y(adjacen)n(t)c(axis)g(lab)r(els)h(if)g(they)f(are)g(equal.)0
-1804 y Fc(T)m(yp)s(e:)227 1904 y Fk(In)n(teger)g(\(b)r(o)r(olean\).)0
-2061 y Fc(Class)k(Applicabilit)m(y:)259 2205 y(Plot)427
-2305 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-2475 y Fc(Notes:)340 2765 y Fj(\017)45 b Fk(If)c(no)f(axis)f(is)h(sp)r
-(eci\014ed,)k(\(e.g.)74 b Ft(")p Fk(Abbrev)p Ft(")39
-b Fk(instead)h(of)h Ft(")p Fk(Abbrev\(2\))p Ft(")p Fk(\),)h(then)f(a)f
-Ft(")p Fk(set)p Ft(")f Fk(or)g Ft(")p Fk(clear)p Ft(")427
-2865 y Fk(op)r(eration)23 b(will)i(a\013ect)f(the)h(attribute)f(v)-5
-b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f
-Ft(")p Fk(get)p Ft(")f Fk(or)g Ft(")p Fk(test)p Ft(")h
-Fk(op)r(eration)427 2964 y(will)k(use)g(just)g(the)g(Abbrev\(1\))f(v)-5
-b(alue.)p 0 3171 V 0 3303 a FA(Adaptiv)l(e)330 b Fd(Should)38
-b(the)g(area)g(adapt)g(to)g(c)m(hanges)g(in)g(the)1400
-3418 y(co)s(ordinate)e(system?)3245 3303 y FA(Adaptiv)l(e)0
-3614 y Fc(Description:)44 b Fk(The)28 b(co)r(ordinate)e(system)g
-(represen)n(ted)g(b)n(y)h(a)g(Region)f(ma)n(y)h(b)r(e)g(c)n(hanged)f(b)
-n(y)h(assigning)f(new)h(v)-5 b(alues)227 3714 y(to)33
-b(attributes)g(suc)n(h)g(as)f(System,)i(Unit,)h(etc.)54
-b(F)-7 b(or)32 b(instance,)i(a)e(Region)h(represen)n(ting)e(an)i(area)e
-(on)i(the)g(sky)227 3813 y(in)h(ICRS)f(co)r(ordinates)f(ma)n(y)g(ha)n
-(v)n(e)g(its)i(System)f(attribute)g(c)n(hanged)f(so)h(that)g(it)h
-(represen)n(ts)e(\(sa)n(y\))g(Galactic)227 3913 y(co)r(ordinates)h
-(instead)h(of)h(ICRS.)f(This)h(attribute)f(con)n(trols)f(what)h(happ)r
-(ens)g(when)h(the)g(co)r(ordinate)e(system)227 4013 y(represen)n(ted)27
-b(b)n(y)g(a)g(Region)g(is)h(c)n(hanged)e(in)i(this)g(w)n(a)n(y)-7
-b(.)227 4141 y(If)40 b(Adaptiv)n(e)f(is)h(non-zero)d(\(the)j
-(default\),)j(then)d(area)e(represen)n(ted)g(b)n(y)h(the)h(Region)f
-(adapts)g(to)g(the)h(new)227 4241 y(co)r(ordinate)27
-b(system.)37 b(That)27 b(is,)h(the)g(n)n(umerical)f(v)-5
-b(alues)27 b(whic)n(h)g(de\014ne)h(the)g(area)e(represen)n(ted)h(b)n(y)
-g(the)h(Region)227 4340 y(are)34 b(c)n(hanged)g(b)n(y)h(mapping)f(them)
-i(from)e(the)h(old)g(co)r(ordinate)f(system)g(in)n(to)h(the)g(new)g(co)
-r(ordinate)f(system.)227 4440 y(Th)n(us)28 b(the)g(Region)e(con)n(tin)n
-(ues)h(to)h(represen)n(t)e(the)i(same)f(ph)n(ysical)g(area.)227
-4568 y(If)35 b(Adaptiv)n(e)g(is)g(zero,)g(then)h(area)d(represen)n(ted)
-h(b)n(y)g(the)h(Region)f(do)r(es)h(not)g(adapt)f(to)h(the)g(new)g(co)r
-(ordinate)227 4668 y(system.)59 b(That)35 b(is,)h(the)f(n)n(umerical)f
-(v)-5 b(alues)35 b(whic)n(h)g(de\014ne)g(the)g(area)e(represen)n(ted)h
-(b)n(y)h(the)g(Region)f(are)g(left)227 4768 y(unc)n(hanged.)i(Th)n(us)
-28 b(the)g(ph)n(ysical)e(area)g(represen)n(ted)h(b)n(y)g(the)h(Region)f
-(will)h(usually)f(c)n(hange.)227 4896 y(As)35 b(an)g(example,)h
-(consider)e(a)h(Region)f(describ)r(e)h(a)f(range)g(of)h(w)n(a)n(v)n
-(elength)e(from)h(2000)g(Angstrom)g(to)g(4000)227 4996
-y(Angstrom.)42 b(If)30 b(the)g(Unit)g(attribute)g(for)e(the)i(Region)f
-(is)g(c)n(hanged)g(from)g(Angstrom)g(to)g Ft(")p Fk(nm)p
-Ft(")g Fk(\(nanometre\),)227 5095 y(what)f(happ)r(ens)f(dep)r(ends)h
-(on)f(the)g(setting)h(of)f(Adaptiv)n(e.)37 b(If)27 b(Adaptiv)n(e)h(is)f
-(non-zero,)f(the)h(Mapping)g(from)g(the)227 5195 y(old)34
-b(to)f(the)i(new)e(co)r(ordinate)g(system)g(is)h(found.)56
-b(In)33 b(this)i(case)d(it)j(is)e(a)g(simple)h(scaling)f(b)n(y)h(a)f
-(factor)g(of)g(0.1)227 5295 y(\(since)e(1)f(Angstrom)g(is)h(0.1)e
-(nm\).)47 b(This)31 b(Mapping)f(is)g(then)i(used)e(to)h(mo)r(dify)g
-(the)g(n)n(umerical)f(v)-5 b(alues)30 b(within)227 5394
-y(the)i(Region,)g(c)n(hanging)e(2000)g(to)h(200)f(and)i(4000)d(to)j
-(400.)47 b(Th)n(us)31 b(the)h(mo)r(di\014ed)g(region)e(represen)n(ts)g
-(200)g(nm)227 5494 y(to)e(400)e(nm,)h(the)h(same)f(ph)n(ysical)g(space)
-f(as)h(the)h(original)e(2000)f(Angstrom)i(to)g(4000)f(Angstrom.)36
-b(Ho)n(w)n(ev)n(er,)25 b(if)227 5593 y(Adaptiv)n(e)j(had)g(b)r(een)g
-(zero,)f(then)h(the)g(n)n(umerical)f(v)-5 b(alues)28
-b(w)n(ould)f(not)h(ha)n(v)n(e)f(b)r(een)h(c)n(hanged,)f(resulting)g(in)
-h(the)227 5693 y(\014nal)g(Region)f(represen)n(ting)f(2000)f(nm)j(to)g
-(4000)e(nm.)p eop end
-%%Page: 382 392
-TeXDict begin 382 391 bop 0 52 a FG(382)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fk(Setting)g(Adaptiv)n(e)g(to)f(zero)f(can)h(b)r(e)h(necessary)e(if)i
-(y)n(ou)f(w)n(an)n(t)g(correct)f(inaccurate)g(attribute)i(settings)f
-(in)h(an)227 451 y(existing)23 b(Region.)35 b(F)-7 b(or)23
-b(instance,)h(when)f(creating)g(a)g(Region)f(y)n(ou)h(ma)n(y)g(not)g
-(kno)n(w)g(what)g(Ep)r(o)r(c)n(h)g(v)-5 b(alue)23 b(to)h(use,)227
-551 y(so)k(y)n(ou)f(w)n(ould)g(lea)n(v)n(e)g(Ep)r(o)r(c)n(h)g(unset)h
-(resulting)f(in)i(some)e(default)h(v)-5 b(alue)28 b(b)r(eing)g(used.)38
-b(If)28 b(at)g(some)f(later)g(p)r(oin)n(t)227 650 y(in)34
-b(the)h(application,)f(the)g(correct)f(Ep)r(o)r(c)n(h)g(v)-5
-b(alue)34 b(is)g(determined,)h(y)n(ou)e(could)h(assign)e(the)j(correct)
-d(v)-5 b(alue)34 b(to)227 750 y(the)c(Ep)r(o)r(c)n(h)f(attribute.)42
-b(Ho)n(w)n(ev)n(er,)27 b(y)n(ou)i(w)n(ould)g(\014rst)f(need)i(to)f(set)
-g(Adaptiv)n(e)g(temp)r(orarily)f(to)h(zero,)g(b)r(ecause)227
-849 y(otherwise)g(the)h(area)e(represen)n(ted)g(b)n(y)i(the)g(Region)e
-(w)n(ould)h(b)r(e)h(Mapp)r(ed)g(from)g(the)f(spurious)g(default)h(Ep)r
-(o)r(c)n(h)227 949 y(to)e(the)g(new)f(correct)g(Ep)r(o)r(c)n(h,)g(whic)
-n(h)g(is)h(not)f(what)h(is)f(required.)0 1107 y Fc(T)m(yp)s(e:)227
-1207 y Fk(In)n(teger)g(\(b)r(o)r(olean\).)0 1365 y Fc(Class)k
-(Applicabilit)m(y:)259 1509 y(Region)427 1609 y Fk(All)d(Regions)f(ha)n
-(v)n(e)f(this)i(attribute.)p 0 1817 3780 12 v 0 1948
-a FA(AlignO\013set)383 b Fd(Align)37 b(SkyF)-10 b(rames)38
-b(using)h(the)f(o\013set)1400 2063 y(co)s(ordinate)e(system?)3115
-1948 y FA(AlignO\013set)0 2260 y Fc(Description:)44 b
-Fk(This)26 b(attribute)g(is)g(a)g(b)r(o)r(olean)f(v)-5
-b(alue)26 b(whic)n(h)g(con)n(trols)e(ho)n(w)i(a)f(SkyF)-7
-b(rame)25 b(b)r(eha)n(v)n(es)g(when)h(it)h(is)f(used)227
-2360 y(\(b)n(y)g(AST)p Ft(_)p Fk(FINDFRAME)i(or)d(AST)p
-Ft(_)p Fk(CONVER)-7 b(T\))26 b(as)f(a)h(template)h(to)e(matc)n(h)h
-(another)g(\(target\))f(SkyF)-7 b(rame.)227 2460 y(It)28
-b(determines)g(the)g(co)r(ordinate)e(system)h(in)h(whic)n(h)g(the)g(t)n
-(w)n(o)f(SkyF)-7 b(rames)26 b(are)h(aligned)g(if)h(a)f(matc)n(h)g(o)r
-(ccurs.)227 2588 y(If)21 b(the)g(template)g(and)f(target)g(SkyF)-7
-b(rames)19 b(b)r(oth)i(ha)n(v)n(e)e(de\014ned)i(o\013set)g(co)r
-(ordinate)e(systems)h(\(i.e.)35 b(the)21 b(SkyRefIs)227
-2688 y(attribute)j(is)g(set)f(to)h(either)f Ft(")p Fk(Origin)p
-Ft(")f Fk(or)h Ft(")g Fk(P)n(ole)p Ft(")p Fk(\),)g(and)g(they)h(b)r
-(oth)g(ha)n(v)n(e)f(a)g(non-zero)f(v)-5 b(alue)23 b(for)h
-(AlignO\013set,)227 2788 y(then)h(alignmen)n(t)e(o)r(ccurs)g(within)h
-(the)g(o\013set)g(co)r(ordinate)f(systems)g(\(that)h(is,)h(a)e(UnitMap)
-i(will)f(alw)n(a)n(ys)d(b)r(e)k(used)227 2887 y(to)e(align)f(the)g(t)n
-(w)n(o)g(SkyF)-7 b(rames\).)35 b(If)23 b(either)f(the)h(template)g(or)e
-(target)h(SkyF)-7 b(rame)22 b(has)g(zero)f(\(the)i(default)g(v)-5
-b(alue\))227 2987 y(for)35 b(AlignO\013set,)j(or)d(if)h(either)f(SkyF)
--7 b(rame)35 b(has)g(SkyRefIs)h(set)g(to)f Ft(")p Fk(Ignored)p
-Ft(")p Fk(,)h(then)g(alignmen)n(t)f(o)r(ccurring)227
-3087 y(within)29 b(the)f(co)r(ordinate)e(system)h(sp)r(eci\014ed)h(b)n
-(y)f(the)h(AlignSystem)g(attribute.)0 3244 y Fc(T)m(yp)s(e:)227
-3344 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0 3502 y Fc(Class)k
-(Applicabilit)m(y:)259 3647 y(SkyF)-8 b(rame)427 3747
-y Fk(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i(attribute.)p
-0 3954 V 0 4086 a FA(AlignSideBand)227 b Fd(Should)38
-b(the)g(SideBand)h(attribute)1183 4186 y(b)s(e)g(tak)m(en)f(in)m(to)f
-(accoun)m(t)g(when)1157 4285 y(aligning)f(this)j(DSBSp)s(ecF)-10
-b(rame)1117 4400 y(with)37 b(another)h(DSBSp)s(ecF)-10
-b(rame?)2903 4086 y FA(AlignSideBand)0 4597 y Fc(Description:)44
-b Fk(This)28 b(attribute)g(con)n(trols)e(ho)n(w)h(a)g(DSBSp)r(ecF)-7
-b(rame)27 b(b)r(eha)n(v)n(es)g(when)h(an)f(attempt)h(is)f(made)h(to)f
-(align)227 4697 y(it)43 b(with)g(another)e(DSBSp)r(ecF)-7
-b(rame)43 b(using)f(AST)p Ft(_)p Fk(FINDFRAME)h(or)f(AST)p
-Ft(_)p Fk(CONVER)-7 b(T.)42 b(If)h(b)r(oth)g(DSB-)227
-4796 y(Sp)r(ecF)-7 b(rames)27 b(ha)n(v)n(e)f(a)g(non-zero)f(v)-5
-b(alue)27 b(for)g(AlignSideBand,)g(the)g(v)-5 b(alue)27
-b(of)g(the)g(SideBand)g(attribute)g(in)g(eac)n(h)227
-4896 y(DSBSp)r(ecF)-7 b(rame)22 b(is)f(used)h(so)e(that)i(alignmen)n(t)
-f(o)r(ccurs)g(b)r(et)n(w)n(een)g(sidebands.)34 b(That)22
-b(is,)g(if)g(one)f(DSBSp)r(ecF)-7 b(rame)227 4996 y(represen)n(ts)24
-b(USB)h(and)g(the)g(other)f(represen)n(ts)g(LSB)h(then)g(AST)p
-Ft(_)p Fk(FINDFRAME)h(and)f(AST)p Ft(_)p Fk(CONVER)-7
-b(T)24 b(will)227 5095 y(recognise)32 b(that)j(the)f(DSBSp)r(ecF)-7
-b(rames)34 b(represen)n(t)f(di\013eren)n(t)h(sidebands)f(and)h(will)g
-(tak)n(e)g(this)g(in)n(to)f(accoun)n(t)227 5195 y(when)22
-b(constructing)e(the)h(Mapping)g(that)h(maps)e(p)r(ositions)h(in)h(one)
-e(DSBSp)r(ecF)-7 b(rame)22 b(in)n(to)f(the)g(other.)34
-b(If)22 b(Align-)227 5295 y(SideBand)32 b(in)f(either)h(DSBSp)r(ecF)-7
-b(rame)31 b(is)h(set)f(to)g(zero,)h(then)g(the)g(v)-5
-b(alues)31 b(of)g(the)h(SideBand)f(attributes)h(are)227
-5394 y(ignored.)39 b(In)29 b(the)g(ab)r(o)n(v)n(e)e(example,)i(this)g
-(w)n(ould)f(result)g(in)h(a)f(frequency)g(in)h(the)g(\014rst)g(DSBSp)r
-(ecF)-7 b(rame)29 b(b)r(eing)227 5494 y(mapp)r(ed)38
-b(on)n(to)e(the)h(same)f(frequency)h(in)g(the)h(second)e(DSBSp)r(ecF)-7
-b(rame,)39 b(ev)n(en)e(though)g(those)f(frequencies)227
-5593 y(refer)25 b(to)f(di\013eren)n(t)h(sidebands.)36
-b(In)25 b(other)g(w)n(ords,)f(if)h(either)g(AlignSideBand)g(attribute)g
-(is)g(zero,)g(then)g(the)g(t)n(w)n(o)227 5693 y(DSBSp)r(ecF)-7
-b(rames)28 b(aligns)e(lik)n(e)i(basic)f(Sp)r(ecF)-7 b(rames.)36
-b(The)28 b(default)g(v)-5 b(alue)27 b(for)g(AlignSideBand)h(is)f(zero.)
-p eop end
-%%Page: 383 393
-TeXDict begin 383 392 bop 3643 52 a FG(383)227 351 y
-Fk(When)34 b(AST)p Ft(_)p Fk(FINDFRAME)h(or)e(AST)p Ft(_)p
-Fk(CONVER)-7 b(T)33 b(is)g(used)h(on)f(t)n(w)n(o)g(DSBSp)r(ecF)-7
-b(rames)33 b(\(p)r(oten)n(tially)h(de-)227 451 y(scribing)29
-b(di\013eren)n(t)h(sp)r(ectral)f(co)r(ordinate)f(systems)i(and/or)e
-(sidebands\),)i(it)g(returns)f(a)g(Mapping)g(whic)n(h)h(can)227
-551 y(b)r(e)23 b(used)g(to)g(transform)e(a)i(p)r(osition)f(in)h(one)f
-(DSBSp)r(ecF)-7 b(rame)23 b(in)n(to)g(the)g(corresp)r(onding)e(p)r
-(osition)h(in)h(the)g(other.)227 650 y(The)28 b(Mapping)f(is)h(made)f
-(up)h(of)g(the)f(follo)n(wing)g(steps)h(in)f(the)h(indicated)g(order:)
-340 918 y Fj(\017)45 b Fk(If)28 b(b)r(oth)g(DSBSp)r(ecF)-7
-b(rames)27 b(ha)n(v)n(e)f(a)h(v)-5 b(alue)28 b(of)f(1)g(for)g(the)h
-(AlignSideBand)f(attribute,)h(map)f(v)-5 b(alues)27 b(from)427
-1017 y(the)39 b(target's)f(curren)n(t)g(sideband)g(\(giv)n(en)g(b)n(y)h
-(its)g(SideBand)f(attribute\))h(to)g(the)g(observ)n(ed)e(sideband)427
-1117 y(\(whether)27 b(USB)g(or)f(LSB\).)h(If)g(the)h(target)e(already)f
-(represen)n(ts)g(the)i(observ)n(ed)f(sideband,)g(this)h(step)g(will)427
-1217 y(lea)n(v)n(e)g(the)i(v)-5 b(alues)28 b(unc)n(hanged.)39
-b(If)28 b(either)h(of)f(the)h(t)n(w)n(o)e(DSBSp)r(ecF)-7
-b(rames)29 b(ha)n(v)n(e)e(a)h(v)-5 b(alue)28 b(of)g(zero)g(for)f(its)
-427 1316 y(AlignSideBand)h(attribute,)g(then)g(this)g(step)f(is)h
-(omitted.)340 1451 y Fj(\017)45 b Fk(Map)25 b(the)g(v)-5
-b(alues)24 b(from)g(the)h(sp)r(ectral)f(system)g(of)h(the)g(target)e
-(to)i(the)g(sp)r(ectral)e(system)i(of)f(the)h(template.)427
-1551 y(This)39 b(Mapping)g(tak)n(es)f(in)n(to)h(accoun)n(t)f(all)h(the)
-g(inherited)g(Sp)r(ecF)-7 b(rame)39 b(attributes)g(suc)n(h)g(as)f
-(System,)427 1651 y(StdOfRest,)29 b(Unit,)f(etc.)340
-1786 y Fj(\017)45 b Fk(If)28 b(b)r(oth)g(DSBSp)r(ecF)-7
-b(rames)27 b(ha)n(v)n(e)f(a)h(v)-5 b(alue)28 b(of)f(1)g(for)g(the)h
-(AlignSideBand)f(attribute,)h(map)f(v)-5 b(alues)27 b(from)427
-1885 y(the)37 b(result's)f(observ)n(ed)e(sideband)j(to)f(the)g
-(result's)g(curren)n(t)g(sideband)g(\(giv)n(en)f(b)n(y)h(its)h
-(SideBand)f(at-)427 1985 y(tribute\).)h(If)24 b(the)g(result)g(already)
-f(represen)n(ts)f(the)i(observ)n(ed)f(sideband,)h(this)h(step)f(will)g
-(lea)n(v)n(e)f(the)h(v)-5 b(alues)427 2085 y(unc)n(hanged.)44
-b(If)31 b(either)f(of)g(the)g(t)n(w)n(o)g(DSBSp)r(ecF)-7
-b(rames)30 b(ha)n(v)n(e)f(a)h(v)-5 b(alue)30 b(of)g(zero)f(for)g(its)i
-(AlignSideBand)427 2184 y(attribute,)d(then)g(this)g(step)g(is)f
-(omitted.)0 2351 y Fc(T)m(yp)s(e:)227 2450 y Fk(In)n(teger)g(\(b)r(o)r
-(olean\).)0 2604 y Fc(Class)k(Applicabilit)m(y:)259 2745
-y(DSBSp)s(ecF)-8 b(rame)427 2845 y Fk(All)28 b(DSBSp)r(ecF)-7
-b(rames)28 b(ha)n(v)n(e)e(this)i(attribute.)p 0 3049
-3780 12 v 0 3180 a FA(AlignSp)t(ecO\013set)238 b Fd(Align)38
-b(Sp)s(ecF)-10 b(rames)38 b(using)h(the)1245 3295 y(o\013set)g(co)s
-(ordinate)d(system?)2841 3180 y FA(AlignSp)t(ecO\013set)0
-3488 y Fc(Description:)44 b Fk(This)24 b(attribute)g(is)f(a)h(b)r(o)r
-(olean)f(v)-5 b(alue)23 b(whic)n(h)h(con)n(trols)e(ho)n(w)h(a)g(Sp)r
-(ecF)-7 b(rame)24 b(b)r(eha)n(v)n(es)e(when)i(it)g(is)g(used)227
-3588 y(\(b)n(y)f(AST)p Ft(_)p Fk(FINDFRAME)h(or)e(AST)p
-Ft(_)p Fk(CONVER)-7 b(T\))23 b(as)g(a)f(template)h(to)g(matc)n(h)g
-(another)f(\(target\))h(Sp)r(ecF)-7 b(rame.)227 3687
-y(It)31 b(determines)f(whether)g(alignmen)n(t)g(o)r(ccurs)f(b)r(et)n(w)
-n(een)h(the)h(o\013set)f(v)-5 b(alues)30 b(de\014ned)h(b)n(y)f(the)g
-(curren)n(t)g(v)-5 b(alue)30 b(of)227 3787 y(the)e(Sp)r(ecO\013set)g
-(attribute,)g(or)f(b)r(et)n(w)n(een)g(the)h(corresp)r(onding)e
-(absolute)h(sp)r(ectral)g(v)-5 b(alues.)227 3914 y(The)36
-b(default)f(v)-5 b(alue)36 b(of)f(zero)f(results)h(in)g(the)h(t)n(w)n
-(o)f(Sp)r(ecF)-7 b(rames)35 b(b)r(eing)g(aligned)g(so)f(that)i(a)f(giv)
-n(en)f(absolute)227 4013 y(sp)r(ectral)28 b(v)-5 b(alue)28
-b(in)h(one)f(is)g(mapp)r(ed)h(to)f(the)h(same)f(absolute)g(v)-5
-b(alue)28 b(in)h(the)g(other.)38 b(A)29 b(non-zero)e(v)-5
-b(alue)28 b(results)227 4113 y(in)j(the)g(Sp)r(ecF)-7
-b(rames)30 b(b)r(eing)h(aligned)e(so)h(that)h(a)f(giv)n(en)g(o\013set)g
-(v)-5 b(alue)30 b(in)h(one)f(is)h(mapp)r(ed)g(to)f(the)h(same)f
-(o\013set)227 4213 y(v)-5 b(alue)28 b(in)g(the)g(other.)0
-4367 y Fc(T)m(yp)s(e:)227 4466 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-4620 y Fc(Class)k(Applicabilit)m(y:)259 4761 y(Sp)s(ecF)-8
-b(rame)427 4861 y Fk(All)28 b(Sp)r(ecF)-7 b(rames)27
-b(ha)n(v)n(e)g(this)h(attribute.)p 0 5064 V 0 5196 a
-FA(AlignStdOfRest)221 b Fd(Standard)38 b(of)g(rest)g(to)g(use)i(when)
-1367 5296 y(aligning)c(Sp)s(ecF)-10 b(rames)2850 5196
-y FA(AlignStdOfRest)0 5494 y Fc(Description:)44 b Fk(This)24
-b(attribute)f(con)n(trols)f(ho)n(w)g(a)h(Sp)r(ecF)-7
-b(rame)23 b(b)r(eha)n(v)n(es)f(when)h(it)h(is)f(used)g(\(b)n(y)h(AST)p
-Ft(_)p Fk(FINDFRAME)227 5593 y(or)31 b(AST)p Ft(_)p Fk(CONVER)-7
-b(T\))31 b(as)g(a)g(template)h(to)f(matc)n(h)g(another)g(\(target\))g
-(Sp)r(ecF)-7 b(rame.)48 b(It)32 b(iden)n(ti\014es)f(the)h(stan-)227
-5693 y(dard)g(of)h(rest)g(in)g(whic)n(h)g(alignmen)n(t)f(is)h(to)g(o)r
-(ccur.)52 b(See)32 b(the)i(StdOfRest)f(attribute)g(for)g(a)f
-(desription)g(of)h(the)p eop end
-%%Page: 384 394
-TeXDict begin 384 393 bop 0 52 a FG(384)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fk(v)-5 b(alues)39 b(whic)n(h)h(ma)n(y)e(b)r(e)i(assigned)e(to)i
-(this)f(attribute.)73 b(The)39 b(default)h(AlignStdOfRest)g(v)-5
-b(alue)39 b(is)h Ft(")p Fk(Helio)p Ft(")227 451 y Fk(\(heliographic\).)
-227 579 y(When)e(AST)p Ft(_)p Fk(FindF)-7 b(rame)37 b(or)g(AST)p
-Ft(_)p Fk(CONVER)-7 b(T)37 b(is)g(used)g(on)g(t)n(w)n(o)f(Sp)r(ecF)-7
-b(rames)37 b(\(p)r(oten)n(tially)g(describing)227 678
-y(di\013eren)n(t)h(sp)r(ectral)e(co)r(ordinate)g(systems\),)k(it)d
-(returns)g(a)f(Mapping)h(whic)n(h)g(can)g(b)r(e)h(used)f(to)g
-(transform)f(a)227 778 y(p)r(osition)27 b(in)h(one)f(Sp)r(ecF)-7
-b(rame)27 b(in)n(to)g(the)h(corresp)r(onding)e(p)r(osition)h(in)g(the)h
-(other.)36 b(The)28 b(Mapping)f(is)g(made)g(up)227 878
-y(of)h(the)g(follo)n(wing)e(steps)i(in)g(the)g(indicated)f(order:)340
-1149 y Fj(\017)45 b Fk(Map)33 b(v)-5 b(alues)33 b(from)g(the)h(system)f
-(used)g(b)n(y)g(the)h(target)e(\(w)n(a)n(v)n(elength,)i(apparen)n(t)e
-(radial)g(v)n(elo)r(cit)n(y)-7 b(,)34 b(etc\))427 1248
-y(to)k(the)g(system)f(sp)r(eci\014ed)h(b)n(y)g(the)g(AlignSystem)f
-(attribute,)k(using)c(the)h(target's)f(rest)g(frequency)g(if)427
-1348 y(necessary)-7 b(.)340 1484 y Fj(\017)45 b Fk(Map)30
-b(these)h(v)-5 b(alues)30 b(from)g(the)h(target's)e(standard)g(of)i
-(rest)f(to)g(the)h(standard)e(of)i(rest)e(sp)r(eci\014ed)i(b)n(y)f(the)
-427 1584 y(AlignStdOfRest)35 b(attribute,)h(using)e(the)h(Ep)r(o)r(c)n
-(h,)g(ObsLat,)h(ObsLon,)f(ObsAlt,)h(RefDec)f(and)f(RefRA)427
-1683 y(attributes)28 b(of)f(the)h(target)f(to)g(de\014ne)h(the)g(t)n(w)
-n(o)f(standards)f(of)i(rest.)340 1819 y Fj(\017)45 b
-Fk(Map)26 b(these)f(v)-5 b(alues)26 b(from)f(the)h(standard)f(of)g
-(rest)h(sp)r(eci\014ed)g(b)n(y)f(the)h(AlignStdOfRest)g(attribute,)h
-(to)e(the)427 1919 y(template's)30 b(standard)e(of)h(rest,)g(using)g
-(the)h(Ep)r(o)r(c)n(h,)f(ObsLat,)g(ObsLon,)g(ObsAlt,)h(RefDec)g(and)f
-(RefRA)427 2019 y(attributes)f(of)f(the)h(template)g(to)g(de\014ne)g
-(the)g(t)n(w)n(o)e(standards)h(of)g(rest.)340 2155 y
-Fj(\017)45 b Fk(Map)24 b(these)g(v)-5 b(alues)24 b(from)g(the)h(system)
-f(sp)r(eci\014ed)g(b)n(y)g(the)h(AlignSystem)f(attribute,)h(to)f(the)h
-(system)f(used)427 2255 y(b)n(y)k(the)g(template,)g(using)f(the)h
-(template's)g(rest)f(frequency)g(if)h(necessary)-7 b(.)0
-2423 y Fc(T)m(yp)s(e:)227 2523 y Fk(String.)0 2679 y
-Fc(Class)31 b(Applicabilit)m(y:)259 2822 y(Sp)s(ecF)-8
-b(rame)427 2922 y Fk(All)28 b(Sp)r(ecF)-7 b(rames)27
-b(ha)n(v)n(e)g(this)h(attribute.)p 0 3127 3780 12 v 0
-3259 a FA(AlignSystem)219 b Fd(Co)s(ordinate)36 b(system)i(in)h(whic)m
-(h)f(to)g(align)1629 3374 y(the)g(F)-10 b(rame)3037 3259
-y FA(AlignSystem)0 3551 y Fc(Description:)44 b Fk(This)29
-b(attribute)g(con)n(trols)e(ho)n(w)h(a)g(F)-7 b(rame)28
-b(b)r(eha)n(v)n(es)g(when)h(it)g(is)f(used)h(\(b)n(y)g(AST)p
-Ft(_)p Fk(FINDFRAME)g(or)227 3650 y(AST)p Ft(_)p Fk(CONVER)-7
-b(T\))37 b(as)f(a)g(template)h(to)g(matc)n(h)f(another)g(\(target\))g
-(F)-7 b(rame.)64 b(It)37 b(iden)n(ti\014es)g(the)g(co)r(ordinate)227
-3750 y(system)28 b(in)f(whic)n(h)h(the)g(t)n(w)n(o)f(F)-7
-b(rames)27 b(will)g(b)r(e)h(aligned)f(b)n(y)h(the)g(matc)n(h.)227
-3878 y(The)36 b(v)-5 b(alues)35 b(whic)n(h)h(ma)n(y)e(b)r(e)i(assigned)
-f(to)g(this)h(attribute,)i(and)d(its)h(default)g(v)-5
-b(alue,)37 b(dep)r(end)f(on)g(the)g(class)227 3977 y(of)i(F)-7
-b(rame)37 b(and)h(are)e(describ)r(ed)i(in)g(the)g Ft(")p
-Fk(Applicabilit)n(y)p Ft(")f Fk(section)h(b)r(elo)n(w.)66
-b(In)38 b(general,)h(the)f(AlignSystem)227 4077 y(attribute)28
-b(will)g(accept)f(an)n(y)g(of)h(the)g(v)-5 b(alues)27
-b(whic)n(h)g(ma)n(y)g(b)r(e)h(assigned)f(to)g(the)h(System)g
-(attribute.)227 4205 y(The)36 b(Mapping)e(returned)h(b)n(y)g(astFindF)
--7 b(rame)35 b(or)f(astCon)n(v)n(ert)f(will)j(use)f(the)g(co)r
-(ordinate)f(system)h(sp)r(eci\014ed)227 4304 y(b)n(y)29
-b(the)g(AlignSystem)g(attribute)g(as)f(an)g(in)n(termediate)h(co)r
-(ordinate)e(system.)40 b(The)29 b(total)g(returned)f(Mapping)227
-4404 y(will)33 b(\014rst)g(map)f(p)r(ositions)h(from)f(the)h(\014rst)g
-(F)-7 b(rame)32 b(in)n(to)g(this)h(in)n(termediate)g(co)r(ordinate)e
-(system,)j(using)e(the)227 4504 y(attributes)h(of)g(the)h(\014rst)f(F)
--7 b(rame.)53 b(It)33 b(will)g(then)h(map)f(these)g(p)r(ositions)g
-(from)g(the)g(in)n(termediate)g(co)r(ordinate)227 4603
-y(system)28 b(in)n(to)f(the)h(second)f(F)-7 b(rame,)27
-b(using)g(the)h(attributes)g(of)f(the)h(second)f(F)-7
-b(rame.)0 4759 y Fc(T)m(yp)s(e:)227 4859 y Fk(String.)0
-5015 y Fc(Class)31 b(Applicabilit)m(y:)259 5158 y(F)-8
-b(rame)427 5258 y Fk(The)36 b(AlignSystem)g(attribute)g(for)g(a)f
-(basic)h(F)-7 b(rame)35 b(alw)n(a)n(ys)f(equals)h Ft(")p
-Fk(Cartesian)p Ft(")p Fk(,)h(and)g(ma)n(y)f(not)h(b)r(e)427
-5358 y(altered.)259 5494 y Fc(CmpF)-8 b(rame)427 5593
-y Fk(The)35 b(AlignSystem)h(attribute)f(for)f(a)h(CmpF)-7
-b(rame)35 b(alw)n(a)n(ys)e(equals)h Ft(")p Fk(Comp)r(ound)p
-Ft(")p Fk(,)i(and)f(ma)n(y)f(not)h(b)r(e)427 5693 y(altered.)p
-eop end
-%%Page: 385 395
-TeXDict begin 385 394 bop 3643 52 a FG(385)259 351 y
-Fc(F)-8 b(rameSet)427 451 y Fk(The)22 b(AlignSystem)f(attribute)h(of)f
-(a)g(F)-7 b(rameSet)21 b(is)g(the)h(same)f(as)g(that)g(of)h(its)f
-(curren)n(t)g(F)-7 b(rame)20 b(\(as)h(sp)r(eci\014ed)427
-551 y(b)n(y)28 b(the)g(Curren)n(t)e(attribute\).)259
-688 y Fc(SkyF)-8 b(rame)427 787 y Fk(The)28 b(default)g(AlignSystem)g
-(attribute)g(for)f(a)g(SkyF)-7 b(rame)27 b(is)g Ft(")p
-Fk(ICRS)p Ft(")p Fk(.)259 924 y Fc(Sp)s(ecF)-8 b(rame)427
-1024 y Fk(The)28 b(default)g(AlignSystem)g(attribute)g(for)f(a)g(Sp)r
-(ecF)-7 b(rame)27 b(is)h Ft(")p Fk(W)-7 b(a)n(v)n(e)p
-Ft(")26 b Fk(\(w)n(a)n(v)n(elength\).)259 1161 y Fc(TimeF)-8
-b(rame)427 1261 y Fk(The)28 b(default)g(AlignSystem)g(attribute)g(for)f
-(a)g(TimeF)-7 b(rame)27 b(is)g Ft(")p Fk(MJD)p Ft(")p
-Fk(.)p 0 1469 3780 12 v 0 1600 a FA(AlignTimeScale)153
-b Fd(Time)36 b(scale)h(to)g(use)h(when)f(aligning)1573
-1714 y(TimeF)-10 b(rames)2858 1600 y FA(AlignTimeScale)0
-1892 y Fc(Description:)44 b Fk(This)22 b(attribute)f(con)n(trols)f(ho)n
-(w)h(a)g(TimeF)-7 b(rame)21 b(b)r(eha)n(v)n(es)g(when)g(it)h(is)g(used)
-f(\(b)n(y)h(AST)p Ft(_)p Fk(FINDFRAME)227 1992 y(or)31
-b(AST)p Ft(_)p Fk(CONVER)-7 b(T\))31 b(as)g(a)g(template)g(to)g(matc)n
-(h)g(another)g(\(target\))g(TimeF)-7 b(rame.)47 b(It)32
-b(iden)n(ti\014es)f(the)h(time)227 2092 y(scale)h(in)h(whic)n(h)g
-(alignmen)n(t)f(is)g(to)h(o)r(ccur.)54 b(See)34 b(the)g(TimeScale)f
-(attribute)h(for)f(a)g(desription)g(of)h(the)g(v)-5 b(alues)227
-2191 y(whic)n(h)24 b(ma)n(y)e(b)r(e)i(assigned)f(to)g(this)h
-(attribute.)35 b(The)24 b(default)g(AlignTimeScale)f(v)-5
-b(alue)23 b(dep)r(ends)h(on)g(the)f(curren)n(t)227 2291
-y(v)-5 b(alue)26 b(of)h(TimeScale:)36 b(if)27 b(TimeScale)f(is)g(UT1,)g
-(GMST,)h(LMST)f(or)g(LAST,)h(the)f(default)h(for)f(AlignTimeScale)227
-2391 y(is)i(UT1,)f(for)g(all)h(other)f(TimeScales)g(the)h(default)g(is)
-f(T)-7 b(AI.)227 2519 y(When)36 b(AST)p Ft(_)p Fk(FindF)-7
-b(rame)35 b(or)f(AST)p Ft(_)p Fk(CONVER)-7 b(T)35 b(is)g(used)g(on)g(t)
-n(w)n(o)g(TimeF)-7 b(rames)34 b(\(p)r(oten)n(tially)h(describing)227
-2619 y(di\013eren)n(t)24 b(time)g(co)r(ordinate)f(systems\),)h(it)h
-(returns)e(a)g(Mapping)g(whic)n(h)h(can)f(b)r(e)i(used)e(to)h
-(transform)e(a)i(p)r(osition)227 2719 y(in)31 b(one)f(TimeF)-7
-b(rame)31 b(in)n(to)f(the)h(corresp)r(onding)e(p)r(osition)h(in)h(the)g
-(other.)46 b(The)30 b(Mapping)h(is)f(made)h(up)g(of)f(the)227
-2818 y(follo)n(wing)d(steps)g(in)h(the)g(indicated)g(order:)340
-3092 y Fj(\017)45 b Fk(Map)32 b(v)-5 b(alues)32 b(from)g(the)h(system)f
-(used)h(b)n(y)f(the)g(target)g(\(MJD,)h(JD,)f(etc\))h(to)f(the)h
-(system)f(sp)r(eci\014ed)h(b)n(y)427 3192 y(the)28 b(AlignSystem)g
-(attribute.)340 3329 y Fj(\017)45 b Fk(Map)20 b(these)f(v)-5
-b(alues)19 b(from)g(the)h(target's)f(time)h(scale)e(to)i(the)f(time)h
-(scale)f(sp)r(eci\014ed)h(b)n(y)f(the)h(AlignTimeScale)427
-3428 y(attribute.)340 3566 y Fj(\017)45 b Fk(Map)28 b(these)f(v)-5
-b(alues)27 b(from)h(the)f(time)h(scale)f(sp)r(eci\014ed)h(b)n(y)f(the)h
-(AlignTimeScale)f(attribute,)h(to)g(the)f(tem-)427 3665
-y(plate's)h(time)g(scale.)340 3802 y Fj(\017)45 b Fk(Map)24
-b(these)g(v)-5 b(alues)24 b(from)g(the)h(system)f(sp)r(eci\014ed)g(b)n
-(y)g(the)h(AlignSystem)f(attribute,)h(to)f(the)h(system)f(used)427
-3902 y(b)n(y)k(the)g(template.)0 4073 y Fc(T)m(yp)s(e:)227
-4172 y Fk(String.)0 4330 y Fc(Class)j(Applicabilit)m(y:)259
-4475 y(TimeF)-8 b(rame)427 4575 y Fk(All)28 b(TimeF)-7
-b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)p 0 4783
-V 0 4914 a FA(AllW)-11 b(arnings)378 b Fd(A)39 b(list)f(of)g(all)f
-(curren)m(tly)g(a)m(v)-7 b(ailable)1473 5029 y(condition)37
-b(names)3048 4914 y FA(AllW)-11 b(arnings)0 5203 y Fc(Description:)44
-b Fk(This)32 b(read-only)d(attribute)j(is)f(a)g(space)g(separated)f
-(list)i(of)f(all)g(the)h(conditions)f(names)g(recognized)227
-5303 y(b)n(y)d(the)g(W)-7 b(arnings)26 b(attribute.)37
-b(The)28 b(names)f(are)g(listed)h(b)r(elo)n(w.)0 5461
-y Fc(T)m(yp)s(e:)227 5560 y Fk(String,)g(read-only)0
-5718 y Fc(Class)j(Applicabilit)m(y:)p eop end
-%%Page: 386 396
-TeXDict begin 386 395 bop 0 52 a FG(386)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)259 351
-y Fc(FitsChan)427 451 y Fk(All)d(FitsChans)g(ha)n(v)n(e)e(this)i
-(attribute.)-2 623 y Fc(Conditions)n(:)227 770 y Fk(The)g(follo)n(wing)
-e(conditions)i(are)e(curren)n(tly)h(recognised)f(\(all)h(are)g
-(case-insensitiv)n(e\):)340 1046 y Fj(\017)45 b Ft(")p
-Fk(BadCel)p Ft(")p Fk(:)31 b(This)18 b(condition)h(arises)e(when)h
-(reading)f(a)h(F)-7 b(rameSet)18 b(from)g(a)g(non-Nativ)n(e)g(enco)r
-(ded)g(FitsChan)427 1146 y(if)28 b(an)g(unkno)n(wn)f(celestial)g
-(co-ordinate)f(system)h(is)h(sp)r(eci\014ed)f(b)n(y)h(the)g(CTYPE)f(k)n
-(eyw)n(ords.)340 1284 y Fj(\017)45 b Ft(")p Fk(BadCTYPE)p
-Ft(")p Fk(:)e(This)31 b(condition)g(arises)f(when)i(reading)e(a)h(F)-7
-b(rameSet)31 b(from)g(a)g(non-Nativ)n(e)g(enco)r(ded)427
-1384 y(FitsChan)d(if)g(an)g(illegal)f(algorithm)g(co)r(de)g(is)h(sp)r
-(eci\014ed)g(b)n(y)f(a)h(CTYPE)f(k)n(eyw)n(ord,)f(and)i(the)g(illegal)f
-(co)r(de)427 1483 y(can)g(b)r(e)h(con)n(v)n(erted)f(to)g(an)g(equiv)-5
-b(alen)n(t)28 b(legal)e(co)r(de.)340 1622 y Fj(\017)45
-b Ft(")p Fk(BadLat)p Ft(")p Fk(:)31 b(This)18 b(condition)g(arises)f
-(when)i(reading)e(a)h(F)-7 b(rameSet)18 b(from)g(a)g(non-Nativ)n(e)g
-(enco)r(ded)g(FitsChan)427 1721 y(if)23 b(the)f(latitude)g(of)g(the)h
-(reference)e(p)r(oin)n(t)h(has)f(an)h(absolute)f(v)-5
-b(alue)22 b(greater)e(than)i(90)f(degrees.)34 b(The)22
-b(actual)427 1821 y(absolute)27 b(v)-5 b(alue)28 b(used)f(is)h(set)f
-(to)h(exactly)f(90)f(degrees)h(in)h(these)f(cases.)340
-1959 y Fj(\017)45 b Ft(")p Fk(BadMat)p Ft(")p Fk(:)32
-b(This)20 b(condition)g(arises)f(if)i(the)f(matrix)g(describing)g(the)g
-(transformation)f(from)h(pixel)g(o\013sets)427 2059 y(to)38
-b(in)n(termediate)g(w)n(orld)f(co)r(ordinates)g(cannot)g(b)r(e)i(in)n
-(v)n(erted.)67 b(This)38 b(matrix)g(describ)r(es)f(the)i(scaling,)427
-2158 y(rotation,)32 b(shear,)h(etc.,)g(applied)f(to)g(the)h(pixel)f
-(axes,)g(and)g(is)g(sp)r(eci\014ed)h(b)n(y)f(k)n(eyw)n(ords)e(suc)n(h)i
-(as)f(PCi)p Ft(_)p Fk(j,)427 2258 y(CDi)p Ft(_)p Fk(j,)g(CR)n(OT)-7
-b(A,)29 b(etc.)43 b(F)-7 b(or)29 b(example,)h(the)g(matrix)f(will)h
-(not)g(b)r(e)g(in)n(v)n(ertable)e(if)i(an)n(y)f(ro)n(ws)f(or)h(columns)
-427 2357 y(consist)i(en)n(tirely)f(of)h(zeros.)46 b(The)31
-b(FITS-W)n(CS)g(P)n(ap)r(er)f(I)h Ft(")p Fk(Represen)n(tation)e(of)i(W)
--7 b(orld)31 b(Co)r(ordinates)e(in)427 2457 y(FITS)p
-Ft(")35 b Fk(b)n(y)g(Greisen)f(&)h(Calabretta)e(requires)h(that)h(this)
-g(matrix)g(b)r(e)g(in)n(v)n(ertable.)58 b(Man)n(y)34
-b(op)r(erations)427 2557 y(\(suc)n(h)28 b(as)f(grid)g(plotting\))h
-(will)f(not)h(b)r(e)g(p)r(ossible)f(if)h(the)g(matrix)f(cannot)h(b)r(e)
-g(in)n(v)n(erted.)340 2695 y Fj(\017)45 b Ft(")p Fk(BadPV)p
-Ft(")p Fk(:)31 b(This)18 b(condition)g(arises)f(when)i(reading)e(a)h(F)
--7 b(rameSet)18 b(from)g(a)g(non-Nativ)n(e)g(enco)r(ded)g(FitsChan.)427
-2795 y(It)27 b(is)g(issued)f(if)h(a)f(PVi)p Ft(_)p Fk(m)h(header)e(is)i
-(found)g(that)g(refers)e(to)i(a)f(pro)5 b(jection)26
-b(parameter)f(that)i(is)f(not)h(used)427 2894 y(b)n(y)h(the)g(pro)5
-b(jection)26 b(t)n(yp)r(e)i(sp)r(eci\014ed)g(b)n(y)f(CTYPE.)340
-3032 y Fj(\017)45 b Ft(")p Fk(BadV)-7 b(al)p Ft(")p Fk(:)31
-b(This)18 b(condition)h(arises)e(when)h(reading)f(a)h(F)-7
-b(rameSet)18 b(from)g(a)g(non-Nativ)n(e)g(enco)r(ded)g(FitsChan)427
-3132 y(if)33 b(it)g(is)g(not)g(p)r(ossible)f(to)g(con)n(v)n(ert)f(the)i
-(v)-5 b(alue)33 b(of)f(a)h(FITS)g(k)n(eyw)n(ords)d(to)j(the)g(exp)r
-(ected)g(t)n(yp)r(e.)52 b(F)-7 b(or)32 b(in-)427 3232
-y(stance,)27 b(this)g(can)g(o)r(ccur)f(if)i(the)f(FITS)g(header)f(con)n
-(tains)g(a)h(string)f(v)-5 b(alue)27 b(for)f(a)h(k)n(eyw)n(ord)e(whic)n
-(h)i(should)427 3331 y(ha)n(v)n(e)g(a)g(\015oating)g(p)r(oin)n(t)g(v)-5
-b(alue,)28 b(or)f(if)h(the)g(k)n(eyw)n(ord)d(has)j(no)f(v)-5
-b(alue)27 b(at)h(all)f(\(i.e.)37 b(is)28 b(a)f(commen)n(t)g(card\).)340
-3469 y Fj(\017)45 b Ft(")p Fk(Distortion)p Ft(")p Fk(:)56
-b(This)37 b(condition)g(arises)g(when)g(reading)g(a)g(F)-7
-b(rameSet)37 b(from)g(a)g(non-Nativ)n(e)g(enco)r(ded)427
-3569 y(FitsChan)32 b(if)h(an)n(y)f(of)g(the)g(CTYPE)g(k)n(eyw)n(ords)e
-(sp)r(ecify)i(an)g(unsupp)r(orted)g(distortion)f(co)r(de)h(using)g(the)
-427 3669 y Ft(")p Fk(4-3-3)p Ft(")25 b Fk(format)i(sp)r(eci\014ed)h(in)
-g(FITS-W)n(CS)f(pap)r(er)h(IV.)g(Suc)n(h)f(distortion)g(co)r(des)g(are)
-g(ignored.)340 3807 y Fj(\017)45 b Ft(")p Fk(NoCTYPE)p
-Ft(")p Fk(:)f(This)31 b(condition)h(arises)e(if)i(a)g(default)g(CTYPE)f
-(v)-5 b(alue)31 b(is)h(used)g(within)g(AST)p Ft(_)p Fk(READ,)427
-3906 y(due)j(to)g(no)g(v)-5 b(alue)34 b(b)r(eing)h(presen)n(t)g(in)g
-(the)g(supplied)g(FitsChan.)59 b(This)35 b(condition)g(is)f(only)h
-(tested)g(for)427 4006 y(when)28 b(using)f(non-Nativ)n(e)g(enco)r
-(dings.)340 4144 y Fj(\017)45 b Ft(")p Fk(NoEquino)n(x)p
-Ft(")p Fk(:)g(This)33 b(condition)f(arises)f(if)j(a)e(default)h(equino)
-n(x)f(v)-5 b(alue)33 b(is)f(used)h(within)g(AST)p Ft(_)p
-Fk(READ,)427 4244 y(due)i(to)g(no)g(v)-5 b(alue)34 b(b)r(eing)h(presen)
-n(t)g(in)g(the)g(supplied)g(FitsChan.)59 b(This)35 b(condition)g(is)f
-(only)h(tested)g(for)427 4343 y(when)28 b(using)f(non-Nativ)n(e)g(enco)
-r(dings.)340 4482 y Fj(\017)45 b Ft(")p Fk(NoRadesys)p
-Ft(")p Fk(:)36 b(This)28 b(condition)g(arises)f(if)h(a)g(default)h
-(reference)e(frame)h(is)f(used)i(for)e(an)h(equatorial)e(co-)427
-4581 y(ordinate)e(system)g(within)h(AST)p Ft(_)p Fk(READ,)f(due)h(to)f
-(no)g(v)-5 b(alue)24 b(b)r(eing)h(presen)n(t)f(in)g(the)h(supplied)f
-(FitsChan.)427 4681 y(This)k(condition)f(is)h(only)f(tested)h(for)f
-(when)h(using)f(non-Nativ)n(e)g(enco)r(dings.)340 4819
-y Fj(\017)45 b Ft(")p Fk(NoLonp)r(ole)p Ft(")p Fk(:)52
-b(This)35 b(condition)h(arises)e(if)i(a)g(default)g(v)-5
-b(alue)35 b(is)h(used)f(for)h(the)g(LONPOLE)d(k)n(eyw)n(ord)427
-4919 y(within)28 b(AST)p Ft(_)p Fk(READ,)g(due)g(to)f(no)g(v)-5
-b(alue)27 b(b)r(eing)h(presen)n(t)e(in)i(the)g(supplied)g(FitsChan.)36
-b(This)28 b(condition)427 5018 y(is)g(only)f(tested)h(for)f(when)h
-(using)f(non-Nativ)n(e)g(enco)r(dings.)340 5156 y Fj(\017)45
-b Ft(")p Fk(NoLatp)r(ole)p Ft(")p Fk(:)56 b(This)37 b(condition)g
-(arises)f(if)i(a)f(default)h(v)-5 b(alue)38 b(is)f(used)g(for)g(the)h
-(LA)-7 b(TPOLE)36 b(k)n(eyw)n(ord)427 5256 y(within)28
-b(AST)p Ft(_)p Fk(READ,)g(due)g(to)f(no)g(v)-5 b(alue)27
-b(b)r(eing)h(presen)n(t)e(in)i(the)g(supplied)g(FitsChan.)36
-b(This)28 b(condition)427 5356 y(is)g(only)f(tested)h(for)f(when)h
-(using)f(non-Nativ)n(e)g(enco)r(dings.)340 5494 y Fj(\017)45
-b Ft(")p Fk(NoMjd-obs)p Ft(")p Fk(:)56 b(This)37 b(condition)h(arises)e
-(if)i(a)f(default)h(v)-5 b(alue)38 b(is)f(used)h(for)f(the)h(date)f(of)
-h(observ)-5 b(ation)427 5593 y(within)28 b(AST)p Ft(_)p
-Fk(READ,)g(due)g(to)f(no)g(v)-5 b(alue)27 b(b)r(eing)h(presen)n(t)e(in)
-i(the)g(supplied)g(FitsChan.)36 b(This)28 b(condition)427
-5693 y(is)g(only)f(tested)h(for)f(when)h(using)f(non-Nativ)n(e)g(enco)r
-(dings.)p eop end
-%%Page: 387 397
-TeXDict begin 387 396 bop 3643 52 a FG(387)340 351 y
-Fj(\017)45 b Ft(")p Fk(Tnx)p Ft(")p Fk(:)38 b(This)28
-b(condition)g(arises)f(if)i(a)f(F)-7 b(rameSet)28 b(is)h(read)e(from)h
-(a)g(FITS)h(header)e(con)n(taining)h(an)g(IRAF)427 451
-y Ft(")p Fk(TNX)p Ft(")g Fk(pro)5 b(jection)26 b(whic)n(h)i(includes)g
-(terms)f(not)h(supproted)f(b)n(y)g(AST.)i(Suc)n(h)e(terms)h(are)e
-(ignored)h(and)427 551 y(so)g(the)h(resulting)f(F)-7
-b(rameSet)28 b(ma)n(y)e(b)r(e)i(inaccurate.)340 679 y
-Fj(\017)45 b Ft(")p Fk(Zp)n(x)p Ft(")p Fk(:)39 b(This)29
-b(condition)g(arises)e(if)j(a)f(F)-7 b(rameSet)29 b(is)g(read)f(from)h
-(a)f(FITS)i(header)e(con)n(taining)g(an)h(IRAF)427 779
-y Ft(")p Fk(ZPX)p Ft(")24 b Fk(pro)5 b(jection)25 b(whic)n(h)g
-(includes)h Ft(")p Fk(lngcor)p Ft(")d Fk(or)h Ft(")p
-Fk(latcor)p Ft(")g Fk(correction)f(terms.)36 b(These)25
-b(terms)g(are)g(not)427 878 y(supp)r(orted)j(b)n(y)f(AST)h(and)f(are)g
-(ignored.)36 b(The)27 b(resulting)g(F)-7 b(rameSet)28
-b(ma)n(y)f(therefore)f(b)r(e)i(inaccurate.)p 0 1069 3780
-12 v 0 1208 a FA(AsTime\(axis\))1116 1201 y Fd(F)-10
-b(ormat)37 b(celestal)g(co)s(ordinates)g(as)1725 1301
-y(times?)2989 1208 y FA(AsTime\(axis\))0 1462 y Fc(Description:)44
-b Fk(This)21 b(attribute)g(sp)r(eci\014es)g(the)g(default)g(st)n(yle)f
-(of)h(formatting)f(to)h(b)r(e)g(used)f(\(e.g.)35 b(b)n(y)20
-b(AST)p Ft(_)p Fk(F)n(ORMA)-7 b(T\))227 1562 y(for)36
-b(the)h(celestial)f(co)r(ordinate)g(v)-5 b(alues)36 b(describ)r(ed)g(b)
-n(y)h(a)f(SkyF)-7 b(rame.)63 b(It)37 b(tak)n(es)e(a)i(separate)e(b)r(o)
-r(olean)h(v)-5 b(alue)227 1662 y(for)39 b(eac)n(h)g(SkyF)-7
-b(rame)38 b(axis)h(so)g(that,)k(for)c(instance,)j(the)e(setting)f
-Ft(")p Fk(AsTime\(2\)=0)p Ft(")f Fk(sp)r(eci\014es)h(the)h(default)227
-1761 y(formatting)27 b(st)n(yle)g(for)h(celestial)f(latitude)h(v)-5
-b(alues.)227 1884 y(If)23 b(the)f(AsTime)g(attribute)g(for)g(a)g(SkyF)
--7 b(rame)21 b(axis)g(is)h(zero,)g(then)g(co)r(ordinates)f(on)h(that)g
-(axis)f(will)h(b)r(e)h(formatted)227 1983 y(as)e(angles)f(b)n(y)h
-(default)g(\(using)g(degrees,)g(min)n(utes)h(and)f(seconds\),)h
-(otherwise)e(they)h(will)g(b)r(e)h(formatted)f(as)f(times)227
-2083 y(\(using)28 b(hours,)f(min)n(utes)g(and)h(seconds\).)227
-2205 y(The)h(default)h(v)-5 b(alue)29 b(of)g(AsTime)h(is)f(c)n(hosen)f
-(according)f(to)i(the)h(sky)f(co)r(ordinate)f(system)g(b)r(eing)i
-(represen)n(ted,)227 2305 y(as)22 b(determined)i(b)n(y)e(the)h(SkyF)-7
-b(rame's)22 b(System)h(attribute.)36 b(This)23 b(ensures,)g(for)f
-(example,)i(that)f(righ)n(t)f(ascension)227 2405 y(v)-5
-b(alues)27 b(will)h(b)r(e)g(formatted)g(as)f(times)g(b)n(y)h(default,)g
-(follo)n(wing)e(normal)h(con)n(v)n(en)n(tions.)0 2550
-y Fc(T)m(yp)s(e:)227 2649 y Fk(In)n(teger)g(\(b)r(o)r(olean\).)0
-2795 y Fc(Class)k(Applicabilit)m(y:)259 2927 y(SkyF)-8
-b(rame)427 3026 y Fk(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i
-(attribute.)0 3184 y Fc(Notes:)340 3462 y Fj(\017)45
-b Fk(The)d(AsTime)g(attribute)g(op)r(erates)e(b)n(y)h(c)n(hanging)g
-(the)h(default)g(v)-5 b(alue)41 b(of)h(the)g(corresp)r(onding)e(F)-7
-b(or-)427 3562 y(mat\(axis\))28 b(attribute.)37 b(This,)27
-b(in)h(turn,)g(ma)n(y)f(also)f(a\013ect)i(the)g(v)-5
-b(alue)28 b(of)f(the)h(Unit\(axis\))g(attribute.)340
-3691 y Fj(\017)45 b Fk(Only)38 b(the)g(default)h(st)n(yle)e(of)h
-(formatting)f(is)h(a\013ected)g(b)n(y)g(the)g(AsTime)g(v)-5
-b(alue.)68 b(If)39 b(an)e(explicit)i(F)-7 b(or-)427 3790
-y(mat\(axis\))28 b(v)-5 b(alue)27 b(is)h(set,)f(it)h(will)g(o)n(v)n
-(er-ride)d(an)n(y)i(e\013ect)h(from)f(the)h(AsTime)g(attribute.)p
-0 3981 V 0 4112 a FA(Base)1181 4113 y Fd(F)-10 b(rameSet)37
-b(base)i(F)-10 b(rame)39 b(index)3504 4112 y FA(Base)0
-4270 y Fc(Description:)44 b Fk(This)28 b(attribute)g(giv)n(es)f(the)h
-(index)g(of)f(the)h(F)-7 b(rame)28 b(whic)n(h)f(is)h(to)g(b)r(e)g
-(regarded)e(as)h(the)h Ft(")p Fk(base)p Ft(")e Fk(F)-7
-b(rame)227 4370 y(within)30 b(a)e(F)-7 b(rameSet.)40
-b(The)28 b(default)h(is)g(the)g(\014rst)f(F)-7 b(rame)28
-b(added)h(to)f(the)h(F)-7 b(rameSet)29 b(when)g(it)g(is)f(created)g
-(\(this)227 4469 y(F)-7 b(rame)27 b(alw)n(a)n(ys)f(has)h(an)g(index)h
-(of)g(1\).)0 4614 y Fc(T)m(yp)s(e:)227 4714 y Fk(In)n(teger.)0
-4859 y Fc(Class)j(Applicabilit)m(y:)259 4991 y(F)-8 b(rameSet)427
-5091 y Fk(All)28 b(F)-7 b(rameSets)27 b(ha)n(v)n(e)g(this)h(attribute.)
-0 5249 y Fc(Notes:)340 5527 y Fj(\017)45 b Fk(In)n(v)n(erting)17
-b(a)h(F)-7 b(rameSet)19 b(\(in)n(v)n(erting)e(the)i(b)r(o)r(olean)f
-(sense)f(of)i(its)f(In)n(v)n(ert)g(attribute,)i(with)f(the)g(AST)p
-Ft(_)p Fk(INVER)-7 b(T)427 5627 y(routine)27 b(for)h(example\))f(will)h
-(in)n(terc)n(hange)e(the)i(v)-5 b(alues)27 b(of)h(its)f(Base)g(and)g
-(Curren)n(t)g(attributes.)p eop end
-%%Page: 388 398
-TeXDict begin 388 397 bop 0 52 a FG(388)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a FA(Border)298 b Fd(Dra)m(w)38 b(a)h(b)s(order)f
-(around)f(v)-7 b(alid)38 b(regions)g(of)g(a)h(Plot?)297
-b FA(Border)0 687 y Fc(Description:)44 b Fk(This)30 b(attribute)g(con)n
-(trols)e(the)i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g
-(grid)g(\(dra)n(wn)g(with)h(the)227 787 y(AST)p Ft(_)p
-Fk(GRID)i(routine\))e(b)n(y)h(determining)g(whether)f(a)h(b)r(order)e
-(is)i(dra)n(wn)f(around)g(regions)f(corresp)r(onding)g(to)227
-887 y(the)f(v)-5 b(alid)28 b(ph)n(ysical)f(co)r(ordinates)f(of)h(a)h
-(Plot)f(\(c.f.)37 b(AST)p Ft(_)p Fk(BORDER\).)227 1017
-y(If)j(the)g(Border)d(v)-5 b(alue)39 b(of)g(a)g(Plot)g(is)g(non-zero,)h
-(then)g(this)g(b)r(order)e(will)h(b)r(e)h(dra)n(wn)e(as)h(part)f(of)i
-(the)f(grid.)227 1116 y(Otherwise,)32 b(the)g(b)r(order)e(is)i(not)f
-(dra)n(wn)g(\(although)g(axis)g(lab)r(els)g(and)g(tic)n(k)g(marks)g
-(will)g(still)h(app)r(ear,)g(unless)227 1216 y(other)25
-b(relev)-5 b(an)n(t)24 b(Plot)g(attributes)h(indicate)f(that)i(they)f
-(should)f(not\).)36 b(The)25 b(default)h(b)r(eha)n(viour)d(is)i(to)g
-(dra)n(w)e(the)227 1316 y(b)r(order)j(if)i(tic)n(k)e(marks)g(and)h(n)n
-(umerical)f(lab)r(els)h(will)g(b)r(e)g(dra)n(wn)f(around)g(the)h(edges)
-f(of)h(the)g(plotting)g(area)f(\(see)227 1415 y(the)i(Lab)r(elling)f
-(attribute\),)i(but)f(to)f(omit)h(it)g(otherwise.)0 1576
-y Fc(T)m(yp)s(e:)227 1675 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-1836 y Fc(Class)k(Applicabilit)m(y:)259 1983 y(Plot)427
-2083 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 2293 V 0 2431 a FA(Bottom\(axis\))1173 2424 y Fd(Lo)m(w)m(est)37
-b(axis)h(v)-7 b(alue)39 b(to)f(displa)m(y)3001 2431 y
-FA(Bottom\(axis\))0 2642 y Fc(Description:)44 b Fk(This)23
-b(attribute)g(giv)n(es)f(the)h(lo)n(w)n(est)f(axis)g(v)-5
-b(alue)23 b(to)g(b)r(e)g(displa)n(y)n(ed)f(\(for)g(instance,)i(b)n(y)f
-(the)g(AST)p Ft(_)p Fk(GRID)227 2742 y(metho)r(d\).)0
-2902 y Fc(T)m(yp)s(e:)227 3002 y Fk(Floating)k(p)r(oin)n(t.)0
-3162 y Fc(Class)k(Applicabilit)m(y:)259 3310 y(F)-8 b(rame)427
-3409 y Fk(The)28 b(default)g(supplied)g(b)n(y)f(the)h(F)-7
-b(rame)27 b(class)g(is)g(to)h(displa)n(y)f(all)g(axis)g(v)-5
-b(alues,)27 b(without)h(an)n(y)f(limit.)259 3548 y Fc(SkyF)-8
-b(rame)427 3647 y Fk(The)27 b(SkyF)-7 b(rame)25 b(class)g(re-de\014nes)
-h(the)h(default)f(Bottom)g(v)-5 b(alue)26 b(to)h(-90)e(degrees)g(for)g
-(latitude)i(axes,)f(and)427 3747 y(0)h(degrees)g(for)g(co-latitude)g
-(axes.)36 b(The)27 b(default)i(for)e(longitude)g(axes)g(is)g(to)h
-(displa)n(y)e(all)i(axis)f(v)-5 b(alues.)0 3920 y Fc(Notes:)340
-4213 y Fj(\017)45 b Fk(When)36 b(sp)r(ecifying)f(this)h(attribute)f(b)n
-(y)g(name,)i(it)f(should)f(b)r(e)h(subscripted)f(with)g(the)h(n)n(um)n
-(b)r(er)f(of)g(the)427 4313 y(F)-7 b(rame)27 b(axis)g(to)h(whic)n(h)f
-(it)h(applies.)p 0 4523 V 0 4655 a FA(Bounded)758 b Fd(Is)40
-b(the)e(Region)g(b)s(ounded?)759 b FA(Bounded)0 4854
-y Fc(Description:)44 b Fk(This)27 b(is)g(a)f(read-only)g(attribute)h
-(indicating)f(if)i(the)f(Region)f(is)h(b)r(ounded.)37
-b(A)27 b(Region)f(is)h(b)r(ounded)g(if)227 4954 y(it)h(is)g(con)n
-(tained)f(en)n(tirely)g(within)h(some)f(\014nite-size)g(b)r(ounding)h
-(b)r(o)n(x.)0 5115 y Fc(T)m(yp)s(e:)227 5214 y Fk(In)n(teger)f(\(b)r(o)
-r(olean\),)h(read-only)-7 b(.)0 5375 y Fc(Class)31 b(Applicabilit)m(y:)
-259 5522 y(Region)427 5622 y Fk(All)d(Regions)f(ha)n(v)n(e)f(this)i
-(attribute.)p eop end
-%%Page: 389 399
-TeXDict begin 389 398 bop 3643 52 a FG(389)p 0 351 3780
-12 v 0 483 a FA(CDMatrix)298 b Fd(Use)39 b(CDi)p Fe(_)p
-Fd(j)f(k)m(eyw)m(ords)f(to)h(represen)m(t)g(pixel)1338
-598 y(scaling,)f(rotation,)e(etc?)3171 483 y FA(CDMatrix)0
-791 y Fc(Description:)44 b Fk(This)26 b(attribute)f(is)g(a)g(b)r(o)r
-(olean)g(v)-5 b(alue)25 b(whic)n(h)g(sp)r(eci\014es)g(ho)n(w)g(the)h
-(linear)e(transformation)g(from)h(pixel)227 890 y(co)r(ordinates)d(to)g
-(in)n(termediate)h(w)n(orld)e(co)r(ordinates)h(should)g(b)r(e)i
-(represen)n(ted)d(within)j(a)e(FitsChan)h(when)g(using)227
-990 y(FITS-W)n(CS)29 b(enco)r(ding.)40 b(This)29 b(transformation)e
-(describ)r(es)h(the)h(scaling,)f(rotation,)g(shear,)g(etc.,)h(of)f(the)
-i(pixel)227 1090 y(axes.)227 1216 y(If)38 b(the)g(attribute)g(has)f(a)g
-(non-zero)f(v)-5 b(alue)38 b(then)g(the)g(transformation)e(is)h
-(represen)n(ted)g(b)n(y)g(a)g(set)h(of)f(CDi)p Ft(_)p
-Fk(j)227 1316 y(k)n(eyw)n(ords)23 b(represen)n(ting)g(a)i(square)e
-(matrix)h(\(where)h Ft(")p Fk(i)p Ft(")f Fk(is)g(the)i(index)e(of)h(an)
-g(in)n(termediate)f(w)n(orld)g(co)r(ordinate)227 1415
-y(axis)36 b(and)f Ft(")p Fk(j)p Ft(")h Fk(is)g(the)g(index)g(of)g(a)g
-(pixel)g(axis\).)62 b(If)36 b(the)h(attribute)f(has)f(a)h(zero)f(v)-5
-b(alue)36 b(the)g(transformation)227 1515 y(is)f(represen)n(ted)e(b)n
-(y)i(a)f(set)g(of)h(PCi)p Ft(_)p Fk(j)f(k)n(eyw)n(ords)f(\(whic)n(h)i
-(also)e(represen)n(t)g(a)i(square)e(matrix\))h(together)g(with)227
-1615 y(a)i(corresp)r(onding)f(set)h(of)g(CDEL)-7 b(Ti)37
-b(k)n(eyw)n(ords)d(represen)n(ting)h(the)i(axis)e(scalings.)62
-b(See)37 b(FITS-W)n(CS)f(pap)r(er)227 1714 y(I)r(I)i
-Ft(")p Fk(Represen)n(tation)d(of)i(Celestial)g(Co)r(ordinates)f(in)h
-(FITS)p Ft(")g Fk(b)n(y)g(M.)g(Calabretta)f(&)g(E.W.)i(Greisen,)g(for)f
-(a)227 1814 y(complete)28 b(description)f(of)g(these)h(t)n(w)n(o)f(sc)n
-(hemes.)227 1941 y(The)g(default)f(v)-5 b(alue)26 b(of)g(the)h
-(CDMatrix)f(attribute)g(is)h(determined)f(b)n(y)g(the)g(con)n(ten)n(ts)
-g(of)g(the)h(FitsChan)f(at)g(the)227 2040 y(time)f(the)g(attribute)f
-(is)g(accessed.)35 b(If)24 b(the)h(FitsChan)f(con)n(tains)f(an)n(y)h
-(CDi)p Ft(_)p Fk(j)h(k)n(eyw)n(ords)d(then)i(the)h(default)g(v)-5
-b(alue)227 2140 y(is)21 b(non-zero.)32 b(Otherwise)20
-b(it)h(is)f(zero.)33 b(Note,)22 b(reading)d(a)h(F)-7
-b(rameSet)20 b(from)g(a)g(FitsChan)h(will)f(in)h(general)e(consume)227
-2240 y(an)n(y)33 b(CDi)p Ft(_)p Fk(j)i(k)n(eyw)n(ords)d(presen)n(t)h
-(in)h(the)g(FitsChan.)56 b(Th)n(us)34 b(the)g(default)g(v)-5
-b(alue)34 b(for)g(CDMatrix)f(follo)n(wing)g(a)227 2339
-y(read)g(will)g(usually)g(b)r(e)h(zero,)g(ev)n(en)f(if)h(the)g
-(FitsChan)f(originally)f(con)n(tained)h(some)g(CDi)p
-Ft(_)p Fk(j)g(k)n(eyw)n(ords.)53 b(This)227 2439 y(b)r(eha)n(viour)31
-b(is)g(similar)g(to)g(that)h(of)f(the)h(Enco)r(ding)f(attribute,)h(the)
-g(default)g(v)-5 b(alue)32 b(for)f(whic)n(h)g(is)g(determined)227
-2538 y(b)n(y)i(the)g(con)n(ten)n(ts)g(of)f(the)i(FitsChan)f(at)g(the)g
-(time)g(the)h(attribute)f(is)g(accessed.)51 b(If)34 b(y)n(ou)e(wish)h
-(to)g(retain)f(the)227 2638 y(original)24 b(v)-5 b(alue)25
-b(of)g(the)h(CDMatrix)f(attribute)g(\(that)h(is,)f(the)h(v)-5
-b(alue)25 b(b)r(efore)g(reading)f(the)h(F)-7 b(rameSet\))26
-b(then)f(y)n(ou)227 2738 y(should)j(enquire)f(the)h(default)g(v)-5
-b(alue)27 b(b)r(efore)h(doing)f(the)h(read,)e(and)i(then)g(set)f(that)h
-(v)-5 b(alue)28 b(explicitly)-7 b(.)0 2891 y Fc(T)m(yp)s(e:)227
-2991 y Fk(In)n(teger)27 b(\(b)r(o)r(olean\).)0 3145 y
-Fc(Class)k(Applicabilit)m(y:)259 3286 y(FitsChan)427
-3385 y Fk(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 3589 V 0 3720 a FA(CarLin)268 b Fd(Ignore)38 b(spherical)g(rotations)
-e(on)i(CAR)h(pro)7 b(jections?)265 b FA(CarLin)0 3918
-y Fc(Description:)44 b Fk(This)e(attribute)f(is)g(a)g(b)r(o)r(olean)g
-(v)-5 b(alue)41 b(whic)n(h)g(sp)r(eci\014es)g(ho)n(w)g(FITS)g
-Ft(")p Fk(CAR)p Ft(")g Fk(\(plate)g(carree,)i(or)227
-4018 y Ft(")p Fk(Cartesian)p Ft(")p Fk(\))23 b(pro)5
-b(jections)24 b(should)h(b)r(e)g(treated)g(when)g(reading)f(a)g(F)-7
-b(rameSet)25 b(from)g(a)f(foreign)g(enco)r(ded)h(FITS)227
-4117 y(header.)43 b(If)30 b(zero)f(\(the)h(default\),)h(it)g(is)e
-(assumed)h(that)g(the)g(CAR)g(pro)5 b(jection)29 b(conforms)f(to)i(the)
-g(con)n(v)n(en)n(tions)227 4217 y(describ)r(ed)j(in)g(the)h(FITS)f(w)n
-(orld)f(co)r(ordinate)g(system)h(\(FITS-W)n(CS\))h(pap)r(er)e(I)r(I)i
-Ft(")p Fk(Represen)n(tation)d(of)i(Celes-)227 4317 y(tial)h(Co)r
-(ordinates)e(in)h(FITS)p Ft(")h Fk(b)n(y)f(M.)g(Calabretta)g(&)g(E.W.)g
-(Greisen.)54 b(If)34 b(CarLin)e(is)h(non-zero,)h(then)g(these)227
-4416 y(con)n(v)n(en)n(tions)f(are)g(ignored,)i(and)f(it)h(is)f(assumed)
-g(that)h(the)f(mapping)h(from)f(pixel)g(co)r(ordinates)f(to)h
-(celestial)227 4516 y(co)r(ordinates)25 b(is)h(a)g(simple)g(linear)f
-(transformation)g(\(hence)h(the)h(attribute)f(name)g
-Ft(")p Fk(CarLin)p Ft(")p Fk(\).)35 b(This)26 b(is)g(appro-)227
-4616 y(priate)31 b(for)f(some)g(older)g(FITS)h(data)f(whic)n(h)h
-(claims)f(to)h(ha)n(v)n(e)f(a)g Ft(")p Fk(CAR)p Ft(")g
-Fk(pro)5 b(jection,)31 b(but)g(whic)n(h)g(in)g(fact)g(do)227
-4715 y(not)d(conform)g(to)g(the)g(con)n(v)n(en)n(tions)e(of)i(the)h
-(FITS-W)n(CS)f(pap)r(er.)38 b(F)-7 b(urthermore,)27 b(if)i(CarLin)e(is)
-h(non-zero,)e(it)j(is)227 4815 y(assumed)i(that)h(CDEL)-7
-b(T)31 b(and)h(CD)f(k)n(eyw)n(ords)f(are)g(in)i(units)g(of)f(degrees)f
-(rather)h(than)g(radians)f(\(as)i(required)227 4914 y(b)n(y)c(the)g
-(FITS-W)n(CS)f(pap)r(ers\).)227 5041 y(The)34 b(FITS-W)n(CS)g(pap)r(er)
-g(sp)r(eci\014es)g(that)g(headers)f(whic)n(h)h(include)g(a)g(CAR)g(pro)
-5 b(jection)33 b(represen)n(t)g(a)g(linear)227 5141 y(mapping)c(from)f
-(pixel)h(co)r(ordinates)e(to)h Ft(")p Fk(nativ)n(e)g(spherical)g(co)r
-(ordinates)p Ft(")p Fk(,)f(NOT)h(celestial)h(co)r(ordinates.)38
-b(An)227 5240 y(extra)30 b(mapping)g(is)h(then)g(required)f(from)g
-(nativ)n(e)g(spherical)g(to)g(celestial.)45 b(This)31
-b(mapping)f(is)h(a)f(3D)h(rotation)227 5340 y(and)e(so)f(the)h(o)n(v)n
-(erall)e(Mapping)h(from)h(pixel)f(to)h(celestial)f(co)r(ordinates)g(is)
-g(NOT)h(linear.)40 b(See)28 b(the)h(FITS-W)n(CS)227 5440
-y(pap)r(ers)e(for)g(further)h(details.)0 5593 y Fc(T)m(yp)s(e:)227
-5693 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)p eop end
-%%Page: 390 400
-TeXDict begin 390 399 bop 0 52 a FG(390)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fc(Class)g(Applicabilit)m(y:)259 474 y(FitsChan)427 573
-y Fk(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 745 3780 12 v 0 876 a FA(Card)528 b Fd(Index)39 b(of)f(curren)m(t)g
-(FITS)h(card)f(in)h(a)f(FitsChan)526 b FA(Card)0 1014
-y Fc(Description:)44 b Fk(This)28 b(attribute)g(giv)n(es)f(the)h(index)
-g(of)g(the)g Ft(")p Fk(curren)n(t)p Ft(")e Fk(FITS)i(header)f(card)g
-(within)i(a)e(FitsChan,)h(the)227 1113 y(\014rst)23 b(card)g(ha)n(ving)
-f(an)h(index)g(of)g(1.)35 b(The)23 b(c)n(hoice)g(of)g(curren)n(t)f
-(card)h(a\013ects)g(the)g(b)r(eha)n(viour)f(of)h(routines)g(that)g(ac-)
-227 1213 y(cess)i(the)g(con)n(ten)n(ts)f(of)h(the)g(FitsChan,)h(suc)n
-(h)e(as)h(AST)p Ft(_)p Fk(DELFITS,)g(AST)p Ft(_)p Fk(FINDFITS)h(and)f
-(AST)p Ft(_)p Fk(PUTFITS.)227 1331 y(A)h(v)-5 b(alue)25
-b(assigned)f(to)h(Card)f(will)h(p)r(osition)g(the)h(FitsChan)f(at)g(an)
-n(y)g(desired)f(p)r(oin)n(t,)i(so)e(that)i(a)f(particular)e(card)227
-1430 y(within)28 b(it)g(can)f(b)r(e)h(accessed.)36 b(Alternativ)n(ely)
--7 b(,)27 b(the)h(v)-5 b(alue)27 b(of)h(Card)e(ma)n(y)h(b)r(e)h
-(enquired)f(in)h(order)e(to)i(determine)227 1530 y(the)g(curren)n(t)f
-(p)r(osition)g(of)h(a)f(FitsChan.)227 1647 y(The)39 b(default)f(v)-5
-b(alue)38 b(of)g(Card)g(is)g(1.)68 b(This)38 b(means)g(that)h(clearing)
-e(this)h(attribute)g(\(using)h(AST)p Ft(_)p Fk(CLEAR\))227
-1747 y(e\013ectiv)n(ely)26 b Ft(")p Fk(rewinds)p Ft(")e
-Fk(the)j(FitsChan,)f(so)f(that)h(the)g(\014rst)g(card)f(is)h(accessed)e
-(next.)37 b(If)26 b(Card)f(is)h(set)g(to)f(a)h(v)-5 b(alue)227
-1847 y(whic)n(h)33 b(exceeds)e(the)i(total)f(n)n(um)n(b)r(er)h(of)f
-(cards)f(in)i(the)g(FitsChan)f(\(as)g(giv)n(en)g(b)n(y)g(its)h(Ncard)f
-(attribute\),)i(it)f(is)227 1946 y(regarded)23 b(as)h(p)r(oin)n(ting)g
-(at)g(the)h Ft(")p Fk(end-of-\014le)p Ft(")p Fk(.)34
-b(In)25 b(this)g(case,)f(the)h(v)-5 b(alue)24 b(returned)g(in)g(resp)r
-(onse)g(to)g(an)g(enquiry)227 2046 y(is)k(alw)n(a)n(ys)d(one)j(more)e
-(than)i(the)g(n)n(um)n(b)r(er)f(of)h(cards)e(in)i(the)g(FitsChan.)0
-2181 y Fc(T)m(yp)s(e:)227 2281 y Fk(In)n(teger.)0 2416
-y Fc(Class)j(Applicabilit)m(y:)259 2539 y(FitsChan)427
-2638 y Fk(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 2810 V 0 2941 a FA(Class)1118 b Fd(Ob)7 b(ject)37 b(class)i(name)1116
-b FA(Class)0 3102 y Fc(Description:)44 b Fk(This)28 b(attribute)g(giv)n
-(es)e(the)i(name)f(of)h(the)g(class)f(to)g(whic)n(h)h(an)f(Ob)5
-b(ject)27 b(b)r(elongs.)0 3238 y Fc(T)m(yp)s(e:)227 3337
-y Fk(Character)f(string,)h(read-only)-7 b(.)0 3473 y
-Fc(Class)31 b(Applicabilit)m(y:)259 3595 y(Ob)5 b(ject)427
-3695 y Fk(All)28 b(Ob)5 b(jects)28 b(ha)n(v)n(e)e(this)i(attribute.)p
-0 3866 V 0 3998 a FA(Clean)275 b Fd(Remo)m(v)m(e)38 b(cards)g(used)h
-(whilst)f(reading)f(ev)m(en)h(if)h(an)f(error)1701 4112
-y(o)s(ccurs?)3444 3998 y FA(Clean)0 4250 y Fc(Description:)44
-b Fk(This)27 b(attribute)f(indicates)g(whether)g(or)g(not)g(cards)f
-(should)i(b)r(e)f(remo)n(v)n(ed)f(from)h(the)h(FitsChan)f(if)h(an)227
-4349 y(error)g(o)r(ccurs)h(within)h(AST)p Ft(_)p Fk(READ.)g(A)g
-(succesful)f(read)g(on)g(a)g(FitsChan)h(alw)n(a)n(ys)e(results)h(in)g
-(the)h(remo)n(v)-5 b(al)28 b(of)227 4449 y(the)h(cards)e(whic)n(h)h(w)n
-(ere)f(in)n(v)n(olv)n(ed)f(in)i(the)h(description)e(of)h(the)h
-(returned)e(Ob)5 b(ject.)38 b(Ho)n(w)n(ev)n(er,)26 b(in)j(the)f(ev)n
-(en)n(t)g(of)227 4549 y(an)j(error)e(during)h(the)h(read)g(\(for)f
-(instance)h(if)g(the)g(cards)f(in)h(the)h(FitsChan)f(ha)n(v)n(e)e
-(illegal)h(v)-5 b(alues,)32 b(or)e(if)h(some)227 4648
-y(required)f(cards)f(are)h(missing\))g(no)g(cards)f(will)i(b)r(e)g
-(remo)n(v)n(ed)e(from)h(the)h(FitsChan)f(if)h(the)g(Clean)f(attribute)h
-(is)227 4748 y(zero)c(\(the)h(default\).)37 b(If)28 b(Clean)f(is)h
-(non-zero)e(then)i(an)n(y)e(cards)h(whic)n(h)g(w)n(ere)g(used)g(in)h
-(the)g(ab)r(orted)f(attempt)h(to)227 4848 y(read)f(an)g(ob)5
-b(ject)28 b(will)f(b)r(e)i(remo)n(v)n(ed.)227 4965 y(This)34
-b(pro)n(vides)e(a)h(means)g(of)g Ft(")p Fk(cleaning)p
-Ft(")f Fk(a)h(FitsChan)g(of)h(W)n(CS)f(related)g(cards)f(whic)n(h)i(w)n
-(orks)e(ev)n(en)h(in)g(the)227 5065 y(ev)n(en)n(t)27
-b(of)h(the)g(cards)e(not)i(forming)f(a)g(legal)g(W)n(CS)h(description.)
-0 5200 y Fc(T)m(yp)s(e:)227 5300 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-5435 y Fc(Class)k(Applicabilit)m(y:)259 5558 y(FitsChan)427
-5657 y Fk(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-eop end
-%%Page: 391 401
-TeXDict begin 391 400 bop 3643 52 a FG(391)p 0 351 3780
-12 v 0 483 a FA(Clip)641 490 y Fd(Clip)38 b(lines)g(and/or)f(mark)m
-(ers)g(at)h(the)h(Plot)e(b)s(oundary?)3533 483 y FA(Clip)0
-695 y Fc(Description:)44 b Fk(This)33 b(attribute)h(con)n(trols)d
-(whether)i(curv)n(es)f(and)h(mark)n(ers)e(are)h(clipp)r(ed)i(at)e(the)i
-(b)r(oundary)e(of)h(the)227 794 y(graphics)22 b(b)r(o)n(x)g(sp)r
-(eci\014ed)h(when)f(the)h(Plot)g(w)n(as)e(created.)35
-b(A)23 b(v)-5 b(alue)22 b(of)h(3)f(implies)h(b)r(oth)g(mark)n(ers)e
-(and)h(curv)n(es)g(are)227 894 y(clipp)r(ed)27 b(at)e(the)h(Plot)f(b)r
-(oundary)-7 b(.)36 b(A)26 b(v)-5 b(alue)25 b(of)h(2)f(implies)h(mark)n
-(ers)d(are)i(clipp)r(ed,)h(but)h(not)e(curv)n(es.)35
-b(A)26 b(v)-5 b(alue)26 b(of)227 994 y(1)j(implies)g(curv)n(es)e(are)h
-(clipp)r(ed,)i(but)g(not)f(mark)n(ers.)38 b(A)30 b(v)-5
-b(alue)28 b(of)h(zero)f(implies)h(neither)g(curv)n(es)f(nor)g(mark)n
-(ers)227 1093 y(are)35 b(clipp)r(ed.)63 b(The)36 b(default)h(v)-5
-b(alue)36 b(is)g(1.)62 b(Note,)38 b(this)e(attributes)g(con)n(trols)f
-(only)h(the)g(clipping)g(p)r(erformed)227 1193 y(in)n(ternally)e
-(within)h(AST.)f(The)g(underlying)g(graphics)f(system)h(ma)n(y)f(also)g
-(apply)h(clipping.)57 b(In)34 b(suc)n(h)g(cases,)227
-1292 y(remo)n(ving)e(clipping)h(using)g(this)h(attribute)f(do)r(es)g
-(not)h(guaran)n(tee)d(that)j(no)f(clipping)g(will)h(b)r(e)f(visible)h
-(in)f(the)227 1392 y(\014nal)28 b(plot.)227 1521 y(The)33
-b(AST)p Ft(_)p Fk(CLIP)e(routine)h(can)g(b)r(e)g(used)g(to)g(establish)
-g(generalised)f(clipping)h(within)h(arbitrary)d(regions)h(of)227
-1621 y(the)d(Plot.)0 1780 y Fc(T)m(yp)s(e:)227 1880 y
-Fk(In)n(teger.)0 2039 y Fc(Class)j(Applicabilit)m(y:)259
-2185 y(Plot)427 2285 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)
-p 0 2493 V 0 2625 a FA(ClipOp)175 b Fd(Com)m(bine)37
-b(Plot)g(clipping)g(limits)g(using)h(a)h(b)s(o)s(olean)e(OR?)175
-b FA(ClipOp)0 2828 y Fc(Description:)44 b Fk(This)27
-b(attribute)g(con)n(trols)e(ho)n(w)h(the)h(clipping)g(limits)g(sp)r
-(eci\014ed)g(for)g(eac)n(h)e(axis)h(of)h(a)f(Plot)h(\(using)f(the)227
-2928 y(AST)p Ft(_)p Fk(CLIP)j(routine\))g(are)f(com)n(bined.)41
-b(This,)30 b(in)f(turn,)h(determines)f(whic)n(h)g(parts)f(of)h(the)h
-(graphical)d(output)227 3027 y(will)h(b)r(e)g(visible.)227
-3157 y(If)f(the)g(ClipOp)f(attribute)h(of)g(a)f(Plot)g(is)g(zero)f
-(\(the)i(default\),)h(graphical)d(output)i(is)f(visible)g(only)h(if)g
-(it)f(satis\014es)227 3256 y(the)h(clipping)g(limits)g(on)f(all)g(the)h
-(axes)f(of)g(the)h(clipping)g(F)-7 b(rame)26 b(\(a)g(b)r(o)r(olean)g
-(AND\).)i(Otherwise,)e(if)h(ClipOp)g(is)227 3356 y(non-zero,)f(output)i
-(is)g(visible)f(if)h(it)g(satis\014es)f(the)h(clipping)g(limits)g(on)f
-(one)g(or)g(more)g(axes)g(\(a)g(b)r(o)r(olean)g(OR\).)227
-3485 y(An)g(imp)r(ortan)n(t)f(use)g(of)g(this)h(attribute)f(is)g(to)g
-(allo)n(w)f(areas)g(of)h(a)g(Plot)f(to)h(b)r(e)h(left)g(clear)e(\(e.g.)
-36 b(as)26 b(a)g(bac)n(kground)227 3585 y(for)c(some)f(text\).)36
-b(T)-7 b(o)21 b(ac)n(hiev)n(e)g(this,)i(the)f(lo)n(w)n(er)f(and)g(upp)r
-(er)i(clipping)f(b)r(ounds)g(supplied)g(to)g(AST)p Ft(_)p
-Fk(CLIP)f(should)227 3685 y(b)r(e)28 b(rev)n(ersed,)e(and)i(the)g
-(ClipOp)f(attribute)h(of)f(the)h(Plot)f(should)h(b)r(e)g(set)f(to)h(a)f
-(non-zero)f(v)-5 b(alue.)0 3844 y Fc(T)m(yp)s(e:)227
-3943 y Fk(In)n(teger)27 b(\(b)r(o)r(olean\).)0 4102 y
-Fc(Class)k(Applicabilit)m(y:)259 4249 y(Plot)427 4348
-y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)p 0
-4557 V 0 4689 a FA(Closed)176 b Fd(Should)38 b(the)g(b)s(oundary)g(b)s
-(e)i(considered)e(to)g(b)s(e)h(inside)f(the)1706 4803
-y(region?)3389 4689 y FA(Closed)0 5002 y Fc(Description:)44
-b Fk(This)28 b(attribute)g(con)n(trols)e(whether)i(p)r(oin)n(ts)f(on)g
-(the)i(b)r(oundary)d(of)i(a)f(Region)g(are)g(considered)g(to)g(b)r(e)
-227 5101 y(inside)c(or)f(outside)h(the)g(region.)34 b(If)24
-b(the)f(attribute)g(v)-5 b(alue)23 b(is)f(non-zero)g(\(the)h
-(default\),)i(p)r(oin)n(ts)e(on)f(the)h(b)r(oundary)227
-5201 y(are)29 b(considered)g(to)h(b)r(e)h(inside)f(the)g(region)f
-(\(that)i(is,)f(the)h(Region)e(is)h Ft(")p Fk(closed)p
-Ft(")p Fk(\).)43 b(Ho)n(w)n(ev)n(er,)28 b(if)j(the)f(attribute)227
-5301 y(v)-5 b(alue)28 b(is)f(zero,)g(p)r(oin)n(ts)g(on)h(the)g(b)r
-(ounary)e(are)h(considered)f(to)i(b)r(e)g(outside)f(the)h(region.)0
-5460 y Fc(T)m(yp)s(e:)227 5559 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-5718 y Fc(Class)k(Applicabilit)m(y:)p eop end
-%%Page: 392 402
-TeXDict begin 392 401 bop 0 52 a FG(392)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)259 351
-y Fc(Region)427 451 y Fk(All)d(Regions)f(ha)n(v)n(e)f(this)i
-(attribute.)259 585 y Fc(P)m(oin)m(tList)427 685 y Fk(The)f(v)-5
-b(alue)26 b(of)g(the)h(Closed)e(attribute)i(is)f(ignored)f(b)n(y)h(P)n
-(oin)n(tList)g(regions.)34 b(If)27 b(the)g(P)n(oin)n(tList)e(region)g
-(has)427 784 y(not)32 b(b)r(een)g(negated,)h(then)f(it)g(is)g(alw)n(a)n
-(ys)e(assumed)h(to)g(b)r(e)i(closed.)48 b(If)33 b(the)f(P)n(oin)n
-(tList)e(region)h(has)g(b)r(een)427 884 y(negated,)24
-b(then)h(it)f(is)f(alw)n(a)n(ys)f(assumed)h(to)h(b)r(e)g(op)r(en.)36
-b(This)23 b(is)h(required)f(since)g(p)r(oin)n(ts)h(ha)n(v)n(e)f(zero)f
-(v)n(olume)427 984 y(and)28 b(therefore)e(consist)h(en)n(tirely)g(of)h
-(b)r(oundary)-7 b(.)259 1118 y Fc(CmpRegion)427 1217
-y Fk(The)27 b(default)g(Closed)e(v)-5 b(alue)27 b(for)f(a)g(CmpRegion)g
-(is)g(the)h(Closed)f(v)-5 b(alue)26 b(of)g(its)h(\014rst)f(comp)r(onen)
-n(t)g(Region.)259 1351 y Fc(Stc)427 1451 y Fk(The)i(default)g(Closed)f
-(v)-5 b(alue)27 b(for)g(an)h(Stc)g(is)f(the)h(Closed)f(v)-5
-b(alue)28 b(of)f(its)h(encapsulated)f(Region.)p 0 1653
-3780 12 v 0 1791 a FA(Colour\(elemen)l(t\))1294 1784
-y Fd(Colour)37 b(index)h(for)g(a)g(Plot)1693 1884 y(elemen)m(t)2819
-1791 y FA(Colour\(elemen)l(t\))0 2052 y Fc(Description:)44
-b Fk(This)29 b(attribute)f(determines)g(the)h(colour)e(index)h(used)g
-(when)g(dra)n(wing)f(eac)n(h)h(elemen)n(t)g(of)g(graphical)227
-2152 y(output)21 b(pro)r(duced)e(b)n(y)h(a)f(Plot.)34
-b(It)20 b(tak)n(es)f(a)g(separate)g(v)-5 b(alue)19 b(for)h(eac)n(h)f
-(graphical)f(elemen)n(t)i(so)f(that,)j(for)d(instance,)227
-2251 y(the)25 b(setting)g Ft(")p Fk(Colour\(title\)=2)p
-Ft(")d Fk(causes)i(the)h(Plot)f(title)h(to)f(b)r(e)h(dra)n(wn)f(using)g
-(colour)f(index)i(2.)35 b(The)25 b(synon)n(ym)227 2351
-y Ft(")p Fk(Color)p Ft(")h Fk(ma)n(y)h(also)f(b)r(e)i(used.)227
-2477 y(The)d(range)f(of)h(in)n(teger)g(colour)f(indices)h(a)n(v)-5
-b(ailable)24 b(and)h(their)g(app)r(earance)e(is)i(determined)h(b)n(y)f
-(the)g(underlying)227 2577 y(graphics)g(system.)36 b(The)26
-b(default)h(b)r(eha)n(viour)e(is)h(for)f(all)h(graphical)e(elemen)n(ts)
-i(to)g(b)r(e)h(dra)n(wn)e(using)h(the)g(default)227 2676
-y(colour)e(index)g(supplied)h(b)n(y)f(this)h(graphics)e(system)i
-(\(normally)-7 b(,)24 b(this)h(is)g(lik)n(ely)f(to)g(result)g(in)h
-(white)g(plotting)g(on)227 2776 y(a)i(blac)n(k)g(bac)n(kground,)f(or)h
-(vice)g(v)n(ersa\).)0 2928 y Fc(T)m(yp)s(e:)227 3027
-y Fk(In)n(teger.)0 3179 y Fc(Class)k(Applicabilit)m(y:)259
-3318 y(Plot)427 3418 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)
-0 3582 y Fc(Notes:)340 3868 y Fj(\017)45 b Fk(F)-7 b(or)27
-b(a)g(list)h(of)g(the)g(graphical)e(elemen)n(ts)h(a)n(v)-5
-b(ailable,)27 b(see)g(the)h(description)f(of)g(the)h(Plot)f(class.)340
-4002 y Fj(\017)45 b Fk(If)31 b(no)e(graphical)g(elemen)n(t)h(is)g(sp)r
-(eci\014ed,)h(\(e.g.)44 b Ft(")p Fk(Colour)p Ft(")28
-b Fk(instead)h(of)h Ft(")p Fk(Colour\(title\))p Ft(")p
-Fk(\),)g(then)h(a)e Ft(")p Fk(set)p Ft(")427 4101 y Fk(or)d
-Ft(")p Fk(clear)p Ft(")f Fk(op)r(eration)h(will)g(a\013ect)h(the)g
-(attribute)g(v)-5 b(alue)27 b(of)f(all)h(graphical)e(elemen)n(ts,)i
-(while)g(a)f Ft(")p Fk(get)p Ft(")f Fk(or)427 4201 y
-Ft(")p Fk(test)p Ft(")i Fk(op)r(eration)g(will)h(use)f(just)h(the)g
-(Colour\(T)-7 b(extLab\))27 b(v)-5 b(alue.)p 0 4403 V
-0 4533 a FA(Commen)l(t)940 4534 y Fd(Include)39 b(textual)e(commen)m
-(ts)g(in)i(output?)3206 4533 y FA(Commen)l(t)0 4726 y
-Fc(Description:)44 b Fk(This)30 b(is)f(a)h(b)r(o)r(olean)f(attribute)g
-(whic)n(h)h(con)n(trols)e(whether)h(textual)h(commen)n(ts)f(are)g(to)g
-(b)r(e)h(included)227 4825 y(in)j(the)g(output)g(generated)f(b)n(y)g(a)
-g(Channel.)52 b(If)33 b(included,)i(they)e(will)g(describ)r(e)f(what)g
-(eac)n(h)g(item)h(of)g(output)227 4925 y(represen)n(ts.)227
-5051 y(If)28 b(Commen)n(t)g(is)f(non-zero,)f(then)i(commen)n(ts)g(will)
-f(b)r(e)h(included.)38 b(If)28 b(it)g(is)f(zero,)g(commen)n(ts)g(will)h
-(b)r(e)g(omitted.)0 5203 y Fc(T)m(yp)s(e:)227 5302 y
-Fk(In)n(teger)f(\(b)r(o)r(olean\).)0 5454 y Fc(Class)k(Applicabilit)m
-(y:)259 5593 y(Channel)427 5693 y Fk(The)d(default)g(v)-5
-b(alue)27 b(is)h(non-zero)e(for)h(a)g(normal)g(Channel.)p
-eop end
-%%Page: 393 403
-TeXDict begin 393 402 bop 3643 52 a FG(393)259 351 y
-Fc(FitsChan)427 451 y Fk(The)28 b(default)g(v)-5 b(alue)27
-b(is)h(non-zero)e(for)h(a)g(FitsChan.)259 585 y Fc(XmlChan)427
-685 y Fk(The)h(default)g(v)-5 b(alue)27 b(is)h(zero)e(for)i(an)f
-(XmlChan.)p 0 887 3780 12 v 0 1017 a FA(Curren)l(t)1108
-1018 y Fd(F)-10 b(rameSet)38 b(curren)m(t)f(F)-10 b(rame)38
-b(index)3313 1017 y FA(Curren)l(t)0 1187 y Fc(Description:)44
-b Fk(This)38 b(attribute)g(giv)n(es)f(the)h(index)g(of)g(the)g(F)-7
-b(rame)37 b(whic)n(h)h(is)g(to)g(b)r(e)g(regarded)e(as)h(the)h
-Ft(")p Fk(curren)n(t)p Ft(")227 1286 y Fk(F)-7 b(rame)37
-b(within)g(a)g(F)-7 b(rameSet.)65 b(The)37 b(default)g(is)g(the)h(most)
-e(recen)n(t)h(F)-7 b(rame)36 b(added)h(to)g(the)g(F)-7
-b(rameSet)37 b(\(this)227 1386 y(F)-7 b(rame)27 b(alw)n(a)n(ys)f(has)h
-(an)g(index)h(equal)f(to)h(the)g(F)-7 b(rameSet's)27
-b(Nframe)g(attribute\).)0 1538 y Fc(T)m(yp)s(e:)227 1638
-y Fk(In)n(teger.)0 1790 y Fc(Class)k(Applicabilit)m(y:)259
-1929 y(F)-8 b(rameSet)427 2029 y Fk(All)28 b(F)-7 b(rameSets)27
-b(ha)n(v)n(e)g(this)h(attribute.)0 2193 y Fc(Notes:)340
-2479 y Fj(\017)45 b Fk(In)n(v)n(erting)17 b(a)h(F)-7
-b(rameSet)19 b(\(in)n(v)n(erting)e(the)i(b)r(o)r(olean)f(sense)f(of)i
-(its)f(In)n(v)n(ert)g(attribute,)i(with)f(the)g(AST)p
-Ft(_)p Fk(INVER)-7 b(T)427 2578 y(routine)27 b(for)h(example\))f(will)h
-(in)n(terc)n(hange)e(the)i(v)-5 b(alues)27 b(of)h(its)f(Base)g(and)g
-(Curren)n(t)g(attributes.)p 0 2780 V 0 2911 a FA(DSBCen)l(tre)849
-2912 y Fd(The)38 b(cen)m(tral)f(p)s(osition)g(of)i(in)m(terest)e(in)h
-(a)h(dual)1409 3026 y(sideband)g(sp)s(ectrum)3108 2911
-y FA(DSBCen)l(tre)0 3218 y Fc(Description:)44 b Fk(This)31
-b(attribute)h(sp)r(eci\014es)e(the)i(cen)n(tral)e(p)r(osition)h(of)g
-(in)n(terest)f(in)i(a)e(dual)h(sideband)g(sp)r(ectrum.)48
-b(Its)227 3318 y(sole)33 b(use)g(is)g(to)g(determine)g(the)h(lo)r(cal)e
-(oscillator)g(frequency)g(\(the)i(frequency)f(whic)n(h)g(marks)f(the)h
-(b)r(oundary)227 3417 y(b)r(et)n(w)n(een)f(the)h(lo)n(w)n(er)e(and)h
-(upp)r(er)g(sidebands\).)50 b(See)32 b(the)h(description)f(of)g(the)g
-(IF)h(\(in)n(termediate)f(frequency\))227 3517 y(attribute)21
-b(for)g(details)f(of)h(ho)n(w)f(the)h(lo)r(cal)g(oscillator)e
-(frequency)h(is)h(calculated.)34 b(The)21 b(sideband)f(con)n(taining)g
-(this)227 3617 y(cen)n(tral)28 b(p)r(osition)g(is)g(referred)g(to)g(as)
-g(the)h Ft(")p Fk(observ)n(ed)p Ft(")d Fk(sideband,)i(and)h(the)f
-(other)g(sideband)h(as)e(the)i Ft(")p Fk(image)p Ft(")227
-3716 y Fk(sideband.)227 3842 y(The)c(v)-5 b(alue)25 b(is)g(accessed)f
-(as)g(a)h(p)r(osition)g(in)g(the)h(sp)r(ectral)e(system)h(represen)n
-(ted)f(b)n(y)g(the)i(Sp)r(ecF)-7 b(rame)25 b(attributes)227
-3942 y(inherited)40 b(b)n(y)f(this)h(class,)h(but)f(is)f(stored)g(in)n
-(ternally)f(as)h(top)r(o)r(cen)n(tric)g(frequency)-7
-b(.)72 b(Th)n(us,)42 b(if)e(the)f(System)227 4041 y(attribute)30
-b(of)g(the)h(DSBSp)r(ecF)-7 b(rame)30 b(is)g(set)g(to)g
-Ft(")p Fk(VRAD)p Ft(")p Fk(,)h(the)f(Unit)h(attribute)f(set)g(to)g
-Ft(")p Fk(m/s)p Ft(")f Fk(and)h(the)g(Std-)227 4141 y(OfRest)i
-(attribute)f(set)h(to)f Ft(")p Fk(LSRK)p Ft(")p Fk(,)g(then)h(v)-5
-b(alues)31 b(for)g(the)h(DSBCen)n(tre)f(attribute)h(should)f(b)r(e)h
-(supplied)f(as)227 4241 y(radio)e(v)n(elo)r(cit)n(y)h(in)g(units)h(of)f
-Ft(")p Fk(m/s)p Ft(")f Fk(relativ)n(e)g(to)h(the)h(kinematic)f(LSR)h
-(\(alternativ)n(e)e(units)h(ma)n(y)g(b)r(e)h(used)f(b)n(y)227
-4340 y(app)r(ending)24 b(a)g(suitable)g(units)g(string)f(to)h(the)g
-(end)h(of)e(the)i(v)-5 b(alue\).)36 b(This)23 b(v)-5
-b(alue)24 b(is)g(then)h(con)n(v)n(erted)d(to)i(top)r(o)r(cen-)227
-4440 y(tric)33 b(frequency)f(and)h(stored.)51 b(If)33
-b(\(sa)n(y\))g(the)g(Unit)g(attribute)g(is)g(subsequen)n(tly)f(c)n
-(hanged)g(to)h Ft(")p Fk(km/s)p Ft(")e Fk(b)r(efore)227
-4539 y(retrieving)e(the)i(curren)n(t)e(v)-5 b(alue)30
-b(of)g(the)g(DSBCen)n(tre)g(attribute,)h(the)f(stored)g(top)r(o)r(cen)n
-(tric)f(frequency)h(will)g(b)r(e)227 4639 y(con)n(v)n(erted)c(bac)n(k)h
-(to)h(LSRK)f(radio)f(v)n(elo)r(cit)n(y)-7 b(,)27 b(this)h(time)g(in)g
-(units)g(of)g Ft(")p Fk(km/s)p Ft(")p Fk(,)e(b)r(efore)h(b)r(eing)h
-(returned.)227 4765 y(The)g(default)g(v)-5 b(alue)27
-b(for)h(this)f(attribute)h(is)g(30)e(GHz.)0 4917 y Fc(T)m(yp)s(e:)227
-5017 y Fk(Floating)h(p)r(oin)n(t.)0 5169 y Fc(Class)k(Applicabilit)m
-(y:)259 5308 y(DSBSp)s(ecF)-8 b(rame)427 5408 y Fk(All)28
-b(DSBSp)r(ecF)-7 b(rames)28 b(ha)n(v)n(e)e(this)i(attribute.)-2
-5572 y Fc(Note)n(:)p eop end
-%%Page: 394 404
-TeXDict begin 394 403 bop 0 52 a FG(394)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)340 351
-y Fj(\017)45 b Fk(The)32 b(attributes)g(whic)n(h)g(de\014ne)g(the)g
-(transformation)e(to)i(or)f(from)h(top)r(o)r(cen)n(tric)f(frequency)h
-(should)f(b)r(e)427 451 y(assigned)19 b(their)h(correct)f(v)-5
-b(alues)20 b(b)r(efore)g(accessing)e(this)j(attribute.)34
-b(These)20 b(p)r(oten)n(tially)g(include)g(System,)427
-551 y(Unit,)29 b(StdOfRest,)f(ObsLon,)f(ObsLat,)g(ObsAlt,)g(Ep)r(o)r(c)
-n(h,)h(RefRA,)g(RefDec)g(and)g(RestF)-7 b(req.)p 0 763
-3780 12 v 0 894 a FA(DefB1950)598 b Fd(Use)39 b(FK4)g(B1950)e(as)i
-(defaults?)595 b FA(DefB1950)0 1073 y Fc(Description:)44
-b Fk(This)34 b(attribute)g(is)g(a)f(b)r(o)r(olean)h(v)-5
-b(alue)33 b(whic)n(h)h(sp)r(eci\014es)g(a)f(default)h(equino)n(x)f(and)
-h(reference)f(frame)227 1172 y(to)d(use)g(when)g(reading)f(a)h(F)-7
-b(rameSet)30 b(from)f(a)h(FitsChan)g(with)h(a)e(foreign)h(\(i.e.)44
-b(non-nativ)n(e\))29 b(enco)r(ding.)44 b(It)31 b(is)227
-1272 y(only)g(used)f(if)i(the)f(FITS)g(header)f(con)n(tains)g(RA)h(and)
-g(DEC)g(axes)f(but)h(con)n(tains)f(no)g(information)g(ab)r(out)h(the)
-227 1372 y(reference)f(frame)g(or)g(equino)n(x.)46 b(If)31
-b(this)g(is)g(the)g(case,)f(then)i(v)-5 b(alues)30 b(of)h(FK4)f(and)g
-(B1950)f(are)h(assumed)g(if)h(the)227 1471 y(DefB1950)g(attribute)i
-(has)f(a)g(non-zero)f(v)-5 b(alue)33 b(and)f(ICRS)h(is)f(assumed)g(if)h
-(DefB1950)e(is)i(zero.)51 b(The)32 b(default)227 1571
-y(v)-5 b(alue)29 b(for)g(DefB1950)f(dep)r(ends)i(on)f(the)g(v)-5
-b(alue)29 b(of)h(the)f(Enco)r(ding)g(attribute:)40 b(for)29
-b(FITS-W)n(CS)g(enco)r(ding)g(the)227 1670 y(default)f(is)g(zero,)e
-(and)i(for)f(all)g(other)g(enco)r(dings)g(it)h(is)g(one.)0
-1833 y Fc(T)m(yp)s(e:)227 1932 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-2095 y Fc(Class)k(Applicabilit)m(y:)259 2244 y(FitsChan)427
-2343 y Fk(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 2555 V 0 2694 a FA(Digits/Digits\(axis\))1390 2687
-y Fd(Num)m(b)s(er)38 b(of)h(digits)e(of)1665 2798 y(precision)2680
-2694 y FA(Digits/Digits\(axis\))0 3000 y Fc(Description:)44
-b Fk(This)26 b(attribute)g(sp)r(eci\014es)f(ho)n(w)g(man)n(y)g(digits)h
-(of)f(precision)g(are)f(required)h(b)n(y)g(default)h(when)g(a)f(co)r
-(or-)227 3099 y(dinate)g(v)-5 b(alue)24 b(is)h(formatted)f(for)g(a)g(F)
--7 b(rame)24 b(axis)g(\(e.g.)35 b(using)25 b(AST)p Ft(_)p
-Fk(F)n(ORMA)-7 b(T\).)24 b(Its)h(v)-5 b(alue)24 b(ma)n(y)g(b)r(e)h(set)
-g(either)227 3199 y(for)33 b(a)f(F)-7 b(rame)32 b(as)g(a)h(whole,)h(or)
-e(\(b)n(y)g(subscripting)h(the)g(attribute)g(name)f(with)i(the)f(n)n
-(um)n(b)r(er)g(of)f(an)h(axis\))f(for)227 3299 y(eac)n(h)d(axis)g
-(individually)-7 b(.)43 b(An)n(y)30 b(v)-5 b(alue)29
-b(set)h(for)f(an)g(individual)h(axis)f(will)g(o)n(v)n(er-ride)f(the)i
-(v)-5 b(alue)29 b(for)g(the)h(F)-7 b(rame)227 3398 y(as)27
-b(a)g(whole.)227 3529 y(Note)g(that)f(the)h(Digits)g(v)-5
-b(alue)26 b(acts)g(only)g(as)g(a)g(means)g(of)g(determining)g(a)g
-(default)h(F)-7 b(ormat)26 b(string.)36 b(Its)26 b(e\013ects)227
-3629 y(are)32 b(o)n(v)n(er-ridden)f(if)i(a)g(F)-7 b(ormat)32
-b(string)g(is)h(set)g(explicitly)g(for)f(an)g(axis.)52
-b(Ho)n(w)n(ev)n(er,)33 b(if)g(the)g(F)-7 b(ormat)32 b(attribute)227
-3728 y(sp)r(eci\014es)37 b(the)g(precision)f(using)g(the)h(string)f
-Ft(")p Fk(.)p Fj(\003)p Ft(")p Fk(,)i(then)f(the)g(Digits)g(attribute)g
-(is)f(used)h(to)f(determine)h(the)227 3828 y(n)n(um)n(b)r(er)28
-b(of)f(decimal)h(places)e(to)i(pro)r(duce.)0 3990 y Fc(T)m(yp)s(e:)227
-4090 y Fk(In)n(teger.)0 4252 y Fc(Class)j(Applicabilit)m(y:)259
-4401 y(F)-8 b(rame)427 4501 y Fk(The)30 b(default)f(Digits)h(v)-5
-b(alue)29 b(supplied)h(b)n(y)f(the)g(F)-7 b(rame)29 b(class)f(is)i(7.)
-41 b(If)30 b(a)f(v)-5 b(alue)29 b(less)g(than)g(1)g(is)g(supplied,)427
-4601 y(then)f(1)g(is)f(used)h(instead.)259 4740 y Fc(F)-8
-b(rameSet)427 4839 y Fk(The)23 b(Digits)f(attribute)g(of)h(a)f(F)-7
-b(rameSet)22 b(\(or)f(one)h(of)g(its)h(axes\))e(is)i(the)f(same)g(as)g
-(that)g(of)g(its)h(curren)n(t)e(F)-7 b(rame)427 4939
-y(\(as)27 b(sp)r(eci\014ed)h(b)n(y)g(the)g(Curren)n(t)e(attribute\).)
-259 5078 y Fc(Plot)427 5178 y Fk(The)34 b(default)h(Digits)f(v)-5
-b(alue)33 b(used)h(b)n(y)g(the)g(Plot)g(class)f(when)h(dra)n(wing)e
-(annotated)i(axis)f(lab)r(els)g(is)h(the)427 5278 y(smallest)27
-b(v)-5 b(alue)28 b(whic)n(h)f(results)h(in)f(all)h(adjacen)n(t)f(lab)r
-(els)g(b)r(eing)h(distinct.)259 5417 y Fc(TimeF)-8 b(rame)427
-5516 y Fk(The)27 b(Digits)f(attribute)g(is)g(ignored)f(when)i(a)e
-(TimeF)-7 b(rame)26 b(formats)f(a)h(v)-5 b(alue)26 b(as)g(a)g(date)g
-(and)g(time)g(string)427 5616 y(\(see)i(the)g(F)-7 b(ormat)27
-b(attribute\).)p eop end
-%%Page: 395 405
-TeXDict begin 395 404 bop 3643 52 a FG(395)p 0 351 3780
-12 v 0 490 a FA(Direction\(axis\))1173 483 y Fd(Displa)m(y)38
-b(axis)g(in)g(con)m(v)m(en)m(tional)1638 598 y(direction?)2900
-490 y FA(Direction\(axis\))0 749 y Fc(Description:)44
-b Fk(This)c(attribute)g(is)g(a)f(b)r(o)r(olean)g(v)-5
-b(alue)40 b(whic)n(h)g(suggests)e(ho)n(w)h(the)h(axes)f(of)h(a)f(F)-7
-b(rame)40 b(should)f(b)r(e)227 849 y(displa)n(y)n(ed)28
-b(\(e.g.\))39 b(in)29 b(graphical)e(output.)40 b(By)28
-b(default,)h(it)g(has)f(the)h(v)-5 b(alue)28 b(one,)g(indicating)g
-(that)h(they)g(should)227 948 y(b)r(e)f(sho)n(wn)g(in)g(the)g(con)n(v)n
-(en)n(tional)e(sense)h(\(increasing)g(left)h(to)g(righ)n(t)f(for)g(an)h
-(abscissa,)e(and)i(b)r(ottom)g(to)f(top)h(for)227 1048
-y(an)d(ordinate\).)36 b(If)25 b(set)h(to)f(zero,)f(this)i(attribute)f
-(indicates)g(that)h(the)f(direction)g(should)g(b)r(e)h(rev)n(ersed,)e
-(as)g(w)n(ould)227 1148 y(often)k(b)r(e)g(done)f(for)h(an)f
-(astronomical)e(magnitude)j(or)f(a)g(righ)n(t)g(ascension)f(axis.)0
-1290 y Fc(T)m(yp)s(e:)227 1390 y Fk(In)n(teger)h(\(b)r(o)r(olean\).)0
-1532 y Fc(Class)k(Applicabilit)m(y:)259 1662 y(F)-8 b(rame)427
-1761 y Fk(The)29 b(default)g(Direction)f(v)-5 b(alue)28
-b(supplied)h(b)n(y)f(the)h(F)-7 b(rame)27 b(class)h(is)g(1,)g
-(indicating)h(that)f(all)g(axes)g(should)427 1861 y(b)r(e)g(displa)n(y)
-n(ed)f(in)h(the)g(con)n(v)n(en)n(tional)d(direction.)259
-1987 y Fc(SkyF)-8 b(rame)427 2087 y Fk(The)31 b(SkyF)-7
-b(rame)30 b(class)f(re-de\014nes)h(the)h(default)g(Direction)g(v)-5
-b(alue)30 b(to)h(suggest)e(that)i(certain)f(axes)g(\(e.g.)427
-2186 y(righ)n(t)d(ascension\))g(should)g(b)r(e)h(plotted)g(in)g(rev)n
-(erse)e(when)h(appropriate.)259 2312 y Fc(F)-8 b(rameSet)427
-2412 y Fk(The)40 b(Direction)f(attribute)g(of)h(a)e(F)-7
-b(rameSet)40 b(axis)e(is)h(the)h(same)f(as)f(that)i(of)f(its)h(curren)n
-(t)e(F)-7 b(rame)39 b(\(as)427 2511 y(sp)r(eci\014ed)28
-b(b)n(y)f(the)h(Curren)n(t)f(attribute\).)259 2637 y
-Fc(Plot)427 2737 y Fk(The)33 b(Direction)g(attribute)f(of)h(the)g(base)
-f(F)-7 b(rame)32 b(in)h(a)g(Plot)f(is)g(set)h(to)g(indicate)f(the)h
-(sense)g(of)f(the)h(t)n(w)n(o)427 2837 y(graphics)23
-b(axes,)i(as)f(implied)h(b)n(y)f(the)h(graphics)e(b)r(ounding)i(b)r(o)n
-(x)f(supplied)h(when)g(the)g(Plot)f(w)n(as)f(created.)0
-2992 y Fc(Notes:)340 3267 y Fj(\017)45 b Fk(When)36 b(sp)r(ecifying)f
-(this)h(attribute)f(b)n(y)g(name,)i(it)f(should)f(b)r(e)h(subscripted)f
-(with)g(the)h(n)n(um)n(b)r(er)f(of)g(the)427 3367 y(F)-7
-b(rame)27 b(axis)g(to)h(whic)n(h)f(it)h(applies.)340
-3493 y Fj(\017)45 b Fk(The)32 b(Direction)f(attribute)h(do)r(es)f(not)h
-(directly)f(a\013ect)h(the)g(b)r(eha)n(viour)f(of)g(the)h(AST)g
-(library)-7 b(.)48 b(Instead,)427 3592 y(it)28 b(serv)n(es)d(as)h(a)h
-(hin)n(t)g(to)g(applications)e(programs)g(ab)r(out)i(the)g(orien)n
-(tation)f(in)h(whic)n(h)g(they)g(ma)n(y)f(wish)h(to)427
-3692 y(displa)n(y)h(an)n(y)f(data)h(asso)r(ciated)e(with)j(the)f(F)-7
-b(rame.)38 b(Applications)28 b(are)f(free)h(to)g(ignore)f(this)h(hin)n
-(t)h(if)f(they)427 3791 y(wish.)p 0 3977 V 0 4109 a FA(Disco)664
-4115 y Fd(PcdMap)39 b(pincushion/barrel)c(distortion)h(co)s(e\016cien)m
-(t)3459 4109 y FA(Disco)0 4301 y Fc(Description:)44 b
-Fk(This)37 b(attribute)f(sp)r(eci\014es)g(the)h(pincushion/barrel)d
-(distortion)h(co)r(e\016cien)n(t)h(used)h(b)n(y)e(a)h(PcdMap.)227
-4401 y(This)29 b(co)r(e\016cien)n(t)h(is)f(set)g(when)g(the)h(PcdMap)e
-(is)i(created,)e(but)i(ma)n(y)f(later)f(b)r(e)i(mo)r(di\014ed.)42
-b(If)30 b(the)f(attribute)h(is)227 4501 y(cleared,)k(its)f(default)h(v)
--5 b(alue)33 b(is)g(zero,)g(whic)n(h)g(giv)n(es)f(no)h(distortion.)53
-b(F)-7 b(or)32 b(pincushion)h(distortion,)h(the)g(v)-5
-b(alue)227 4600 y(should)28 b(b)r(e)g(p)r(ositiv)n(e.)36
-b(F)-7 b(or)27 b(barrel)f(distortion,)h(it)h(should)g(b)r(e)g(negativ)n
-(e.)227 4721 y(Note)39 b(that)f(the)h(forw)n(ard)e(transformation)f(of)
-j(a)f(PcdMap)f(applies)h(the)h(distortion)f(sp)r(eci\014ed)g(b)n(y)g
-(this)h(at-)227 4821 y(tribute)d(and)g(the)g(in)n(v)n(erse)e
-(transformation)g(remo)n(v)n(es)g(this)i(distortion.)61
-b(If)36 b(the)g(PcdMap)f(is)h(in)n(v)n(erted)f(\(e.g.)227
-4921 y(using)27 b(AST)p Ft(_)p Fk(INVER)-7 b(T\),)28
-b(then)g(the)g(forw)n(ard)e(transformation)f(will)j(remo)n(v)n(e)e(the)
-h(distortion)g(and)g(the)h(in)n(v)n(erse)227 5020 y(transformation)e
-(will)i(apply)f(it.)38 b(The)27 b(distortion)g(itself)h(will)g(still)g
-(b)r(e)g(giv)n(en)f(b)n(y)g(the)h(same)f(v)-5 b(alue)28
-b(of)f(Disco.)0 5163 y Fc(T)m(yp)s(e:)227 5262 y Fk(Double)h
-(precision.)0 5405 y Fc(Class)j(Applicabilit)m(y:)259
-5534 y(PcdMap)427 5634 y Fk(All)d(PcdMaps)f(ha)n(v)n(e)f(this)i
-(attribute.)p eop end
-%%Page: 396 406
-TeXDict begin 396 405 bop 0 52 a FG(396)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a FA(Domain)744 b Fd(Co)s(ordinate)36
-b(system)i(domain)742 b FA(Domain)0 662 y Fc(Description:)44
-b Fk(This)36 b(attribute)f(con)n(tains)g(a)g(string)g(whic)n(h)g(iden)n
-(ti\014es)h(the)g(ph)n(ysical)e(domain)h(of)h(the)g(co)r(ordinate)227
-762 y(system)28 b(that)g(a)f(F)-7 b(rame)27 b(describ)r(es.)227
-884 y(The)d(Domain)g(attribute)g(also)f(con)n(trols)f(ho)n(w)i(a)f(F)-7
-b(rame)23 b(b)r(eha)n(v)n(es)g(when)h(it)h(is)e(used)h(\(b)n(y)g(AST)p
-Ft(_)p Fk(FINDFRAME\))227 983 y(as)32 b(a)g(template)h(to)g(matc)n(h)f
-(another)g(\(target\))g(F)-7 b(rame.)52 b(It)33 b(do)r(es)f(this)h(b)n
-(y)f(sp)r(ecifying)h(the)g(Domain)f(that)h(the)227 1083
-y(target)f(F)-7 b(rame)33 b(should)g(ha)n(v)n(e)f(in)h(order)f(to)h
-(matc)n(h)g(the)g(template.)54 b(If)33 b(the)h(Domain)f(v)-5
-b(alue)32 b(in)i(the)f(template)227 1182 y(F)-7 b(rame)33
-b(is)h(set,)h(then)f(only)f(targets)f(with)i(the)g(same)f(Domain)h(v)-5
-b(alue)33 b(will)h(b)r(e)g(matc)n(hed.)55 b(If)34 b(the)f(template's)
-227 1282 y(Domain)28 b(v)-5 b(alue)27 b(is)h(not)f(set,)h(ho)n(w)n(ev)n
-(er,)e(then)i(the)g(target's)e(Domain)i(will)f(b)r(e)h(ignored.)0
-1427 y Fc(T)m(yp)s(e:)227 1526 y Fk(String.)0 1671 y
-Fc(Class)j(Applicabilit)m(y:)259 1802 y(F)-8 b(rame)427
-1902 y Fk(The)28 b(default)g(Domain)f(v)-5 b(alue)28
-b(supplied)g(b)n(y)f(the)h(F)-7 b(rame)27 b(class)g(is)g(an)h(empt)n(y)
-f(string.)259 2030 y Fc(SkyF)-8 b(rame)427 2129 y Fk(The)28
-b(SkyF)-7 b(rame)27 b(class)f(re-de\014nes)h(the)h(default)g(Domain)g
-(v)-5 b(alue)27 b(to)h(b)r(e)g Ft(")p Fk(SKY)p Ft(")p
-Fk(.)259 2257 y Fc(CmpF)-8 b(rame)427 2357 y Fk(The)43
-b(CmpF)-7 b(rame)42 b(class)f(re-de\014nes)g(the)i(default)g(Domain)f
-(v)-5 b(alue)42 b(to)g(b)r(e)h(of)f(the)h(form)f Ft(")p
-Fm(<)p Fk(dom1)p Fm(>)p Fk(-)427 2456 y Fm(<)p Fk(dom2)p
-Fm(>)p Ft(")p Fk(,)35 b(where)g Fm(<)p Fk(dom1)p Fm(>)e
-Fk(and)i Fm(<)p Fk(dom2)p Fm(>)e Fk(are)h(the)i(Domains)e(of)h(the)g(t)
-n(w)n(o)g(comp)r(onen)n(t)f(F)-7 b(rames.)427 2556 y(If)39
-b(b)r(oth)g(these)g(Domains)f(are)g(blank,)j(then)e(the)g(string)f
-Ft(")p Fk(CMP)p Ft(")g Fk(is)g(used)h(as)f(the)h(default)g(Domain)427
-2656 y(name.)259 2784 y Fc(F)-8 b(rameSet)427 2883 y
-Fk(The)25 b(Domain)g(attribute)h(of)f(a)f(F)-7 b(rameSet)25
-b(is)g(the)h(same)e(as)g(that)i(of)f(its)g(curren)n(t)f(F)-7
-b(rame)25 b(\(as)g(sp)r(eci\014ed)g(b)n(y)427 2983 y(the)j(Curren)n(t)f
-(attribute\).)259 3111 y Fc(Sp)s(ecF)-8 b(rame)427 3210
-y Fk(The)28 b(Sp)r(ecF)-7 b(rame)27 b(class)g(re-de\014nes)g(the)h
-(default)g(Domain)f(v)-5 b(alue)28 b(to)f(b)r(e)h Ft(")p
-Fk(SPECTR)n(UM)p Ft(")p Fk(.)259 3338 y Fc(DSBSp)s(ecF)-8
-b(rame)427 3438 y Fk(The)28 b(DSBSp)r(ecF)-7 b(rame)28
-b(class)e(re-de\014nes)h(the)h(default)g(Domain)g(v)-5
-b(alue)27 b(to)g(b)r(e)h Ft(")p Fk(DSBSPECTR)n(UM)p Ft(")p
-Fk(.)259 3566 y Fc(FluxF)-8 b(rame)427 3665 y Fk(The)28
-b(FluxF)-7 b(rame)27 b(class)g(re-de\014nes)g(the)g(default)i(Domain)e
-(v)-5 b(alue)27 b(to)h(b)r(e)g Ft(")p Fk(FLUX)p Ft(")p
-Fk(.)259 3793 y Fc(Sp)s(ecFluxF)-8 b(rame)427 3893 y
-Fk(The)28 b(FluxF)-7 b(rame)27 b(class)g(re-de\014nes)g(the)g(default)i
-(Domain)e(v)-5 b(alue)27 b(to)h(b)r(e)g Ft(")p Fk(SPECTR)n(UM-FLUX)p
-Ft(")p Fk(.)259 4021 y Fc(TimeF)-8 b(rame)427 4120 y
-Fk(The)28 b(TimeF)-7 b(rame)27 b(class)g(re-de\014nes)f(the)i(default)g
-(Domain)g(v)-5 b(alue)27 b(to)h(b)r(e)g Ft(")p Fk(TIME)p
-Ft(")p Fk(.)0 4277 y Fc(Notes:)340 4555 y Fj(\017)45
-b Fk(All)28 b(Domain)g(v)-5 b(alues)27 b(are)g(con)n(v)n(erted)f(to)h
-(upp)r(er)h(case)f(and)g(white)h(space)f(is)h(remo)n(v)n(ed)e(b)r
-(efore)h(use.)p 0 4744 V 0 4883 a FA(Dra)l(wAxes\(axis\))1330
-4876 y Fd(Dra)m(w)38 b(axes)g(for)g(a)h(Plot?)2844 4883
-y FA(Dra)l(wAxes\(axis\))0 5073 y Fc(Description:)44
-b Fk(This)f(attribute)g(con)n(trols)f(the)h(app)r(earance)f(of)h(an)f
-(annotated)h(co)r(ordinate)f(grid)g(\(dra)n(wn)g(with)227
-5172 y(the)35 b(AST)p Ft(_)p Fk(GRID)g(routine\))f(b)n(y)g(determining)
-g(whether)g(curv)n(es)f(represen)n(ting)g(co)r(ordinate)g(axes)g
-(should)h(b)r(e)227 5272 y(dra)n(wn.)42 b(It)30 b(tak)n(es)f(a)g
-(separate)f(v)-5 b(alue)30 b(for)f(eac)n(h)g(ph)n(ysical)f(axis)h(of)h
-(a)f(Plot)g(so)g(that,)i(for)e(instance,)h(the)g(setting)227
-5372 y Ft(")p Fk(Dra)n(wAxes\(2\)=0)p Ft(")25 b Fk(sp)r(eci\014es)j
-(that)f(no)h(axis)f(should)g(b)r(e)h(dra)n(wn)f(for)g(the)h(second)f
-(axis.)227 5494 y(If)g(dra)n(wn,)f(these)h(axis)e(lines)i(will)f(pass)g
-(through)g(an)n(y)g(tic)n(k)g(marks)f(asso)r(ciated)h(with)h(n)n
-(umerical)e(lab)r(els)i(dra)n(wn)227 5593 y(to)g(mark)f(v)-5
-b(alues)27 b(on)f(the)h(axes.)36 b(The)27 b(lo)r(cation)f(of)h(these)g
-(tic)n(k)g(marks)f(and)g(lab)r(els)h(\(and)g(hence)g(the)g(axis)f
-(lines\))227 5693 y(is)i(determined)g(b)n(y)f(the)h(Plot's)f(Lab)r(elA)
-n(t\(axis\))g(attribute.)p eop end
-%%Page: 397 407
-TeXDict begin 397 406 bop 3643 52 a FG(397)227 351 y
-Fk(If)29 b(the)f(Dra)n(wAxes)f(v)-5 b(alue)27 b(of)h(a)g(Plot)f(is)h
-(non-zero)e(\(the)i(default\),)h(then)f(axis)f(lines)h(will)g(b)r(e)h
-(dra)n(wn,)e(otherwise)227 451 y(they)h(will)g(b)r(e)g(omitted.)0
-596 y Fc(T)m(yp)s(e:)227 696 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-842 y Fc(Class)k(Applicabilit)m(y:)259 974 y(Plot)427
-1074 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-1232 y Fc(Notes:)340 1511 y Fj(\017)45 b Fk(Axis)32 b(lines)h(are)e
-(dra)n(wn)g(indep)r(enden)n(tly)i(of)f(an)n(y)f(co)r(ordinate)g(grid)h
-(lines)g(\(see)g(the)h(Grid)f(attribute\))g(so)427 1610
-y(grid)27 b(lines)h(ma)n(y)f(b)r(e)h(used)f(to)h(substitute)g(for)f
-(axis)g(lines)g(if)i(required.)340 1739 y Fj(\017)45
-b Fk(In)32 b(some)f(circumstances,)g(n)n(umerical)g(lab)r(els)g(and)g
-(tic)n(k)h(marks)e(are)g(dra)n(wn)h(around)f(the)i(edges)f(of)g(the)427
-1839 y(plotting)c(area)e(\(see)i(the)g(Lab)r(elling)g(attribute\).)37
-b(In)27 b(this)g(case,)f(the)h(v)-5 b(alue)27 b(of)g(the)g(Dra)n(wAxes)
-e(attribute)427 1938 y(is)j(ignored.)340 2067 y Fj(\017)45
-b Fk(If)28 b(no)g(axis)f(is)g(sp)r(eci\014ed,)h(\(e.g.)37
-b Ft(")p Fk(Dra)n(wAxes)p Ft(")26 b Fk(instead)i(of)f
-Ft(")p Fk(Dra)n(wAxes\(2\))p Ft(")p Fk(\),)f(then)j(a)e
-Ft(")p Fk(set)p Ft(")g Fk(or)f Ft(")p Fk(clear)p Ft(")427
-2167 y Fk(op)r(eration)d(will)i(a\013ect)f(the)h(attribute)f(v)-5
-b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f
-Ft(")p Fk(get)p Ft(")f Fk(or)g Ft(")p Fk(test)p Ft(")h
-Fk(op)r(eration)427 2267 y(will)k(use)g(just)g(the)g(Dra)n(wAxes\(1\))e
-(v)-5 b(alue.)p 0 2458 3780 12 v 0 2590 a FA(Dra)l(wTitle)690
-b Fd(Dra)m(w)37 b(a)i(title)e(for)h(a)g(Plot?)687 b FA(Dra)l(wTitle)0
-2752 y Fc(Description:)44 b Fk(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 2852 y(AST)p Ft(_)p Fk(GRID)f(routine\))e(b)n(y)g
-(determining)h(whether)f(a)g(title)i(is)e(dra)n(wn.)227
-2975 y(If)f(the)g(Dra)n(wTitle)f(v)-5 b(alue)25 b(of)h(a)f(Plot)f(is)i
-(non-zero)e(\(the)i(default\),)g(then)g(the)g(title)g(will)g(b)r(e)g
-(dra)n(wn,)f(otherwise)f(it)227 3074 y(will)k(b)r(e)g(omitted.)0
-3220 y Fc(T)m(yp)s(e:)227 3319 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-3465 y Fc(Class)k(Applicabilit)m(y:)259 3598 y(Plot)427
-3697 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)259
-3826 y Fc(Plot3D)427 3926 y Fk(The)h(Plot3D)f(class)g(ignores)f(this)h
-(attributes,)h(assuming)f(a)g(v)-5 b(alue)27 b(of)h(zero.)0
-4084 y Fc(Notes:)340 4363 y Fj(\017)45 b Fk(The)28 b(text)g(used)f(for)
-h(the)g(title)g(is)f(obtained)h(from)f(the)h(Plot's)f(Title)h
-(attribute.)340 4492 y Fj(\017)45 b Fk(The)28 b(v)n(ertical)e(placemen)
-n(t)i(of)f(the)h(title)h(can)e(b)r(e)h(con)n(trolled)e(using)h(the)h
-(TitleGap)g(attribute.)p 0 4683 V 0 4814 a FA(Dut1)1233
-4815 y Fd(The)39 b(UT1-UTC)d(correction)3482 4814 y FA(Dut1)0
-4973 y Fc(Description:)44 b Fk(This)28 b(attribute)g(is)g(used)g(when)g
-(calculating)f(the)i(Lo)r(cal)e(Apparen)n(t)g(Sidereal)g(Time)i
-(corresp)r(onding)227 5072 y(to)34 b(SkyF)-7 b(rame's)33
-b(Ep)r(o)r(c)n(h)h(v)-5 b(alue)34 b(\(used)h(when)f(con)n(v)n(erting)e
-(p)r(ositions)i(to)g(or)f(from)h(the)h Ft(")p Fk(AzEl)p
-Ft(")e Fk(system\).)56 b(It)227 5172 y(should)29 b(b)r(e)h(set)g(to)f
-(the)h(di\013erence,)g(in)f(seconds,)g(b)r(et)n(w)n(een)h(the)g(UT1)f
-(and)g(UTC)h(timescales)f(at)g(the)h(momen)n(t)227 5272
-y(in)35 b(time)g(represen)n(ted)f(b)n(y)g(the)h(SkyF)-7
-b(rame's)34 b(Ep)r(o)r(c)n(h)g(attribute.)58 b(The)35
-b(v)-5 b(alue)35 b(to)f(use)h(is)f(unpredictable)h(and)227
-5371 y(dep)r(ends)29 b(on)e(c)n(hanges)g(in)h(the)h(earth's)e(rotation)
-g(sp)r(eed.)38 b(V)-7 b(alues)28 b(for)f(UT1-UTC)h(can)f(b)r(e)i
-(obtained)f(from)f(the)227 5471 y(In)n(ternational)g(Earth)f(Rotation)h
-(and)h(Reference)f(Systems)h(Service)e(\(IERS\))i(at)g(h)n
-(ttp://www.iers.org/.)227 5593 y(Curren)n(tly)-7 b(,)20
-b(the)g(correction)e(is)h(alw)n(a)n(ys)e(less)i(than)g(1)g(second.)34
-b(This)19 b(is)g(ensured)g(b)n(y)g(the)g(o)r(ccasional)f(in)n(tro)r
-(duction)227 5693 y(of)29 b(leap)g(seconds)f(in)n(to)h(the)g(UTC)g
-(timescale.)41 b(Therefore)28 b(no)g(great)g(error)f(will)i(usually)g
-(result)g(if)g(no)g(v)-5 b(alue)29 b(is)p eop end
-%%Page: 398 408
-TeXDict begin 398 407 bop 0 52 a FG(398)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fk(assigned)21 b(to)h(this)h(attribute)f(\(in)h(whic)n(h)f(case)g(a)g
-(default)g(v)-5 b(alue)22 b(of)h(zero)e(is)h(used\).)35
-b(Ho)n(w)n(ev)n(er,)22 b(it)g(is)g(p)r(ossible)g(that)227
-451 y(a)30 b(decision)g(ma)n(y)f(b)r(e)h(tak)n(en)g(at)g(some)f(time)i
-(in)f(the)h(future)f(to)g(abandon)f(the)i(in)n(tro)r(duction)f(of)g
-(leap)f(seconds,)227 551 y(in)f(whic)n(h)g(case)e(the)i(DUT)h
-(correction)d(could)h(gro)n(w)f(to)h(signi\014can)n(t)g(sizes.)0
-700 y Fc(T)m(yp)s(e:)227 799 y Fk(Floating)g(p)r(oin)n(t.)0
-949 y Fc(Class)k(Applicabilit)m(y:)259 1085 y(F)-8 b(rame)427
-1185 y Fk(All)28 b(F)-7 b(rames)27 b(ha)n(v)n(e)g(this)g(attribute.)p
-0 1384 3780 12 v 0 1522 a FA(Edge\(axis\))1110 1515 y
-Fd(Whic)m(h)39 b(edges)f(to)g(lab)s(el)g(in)h(a)f(Plot)3157
-1522 y FA(Edge\(axis\))0 1722 y Fc(Description:)44 b
-Fk(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h
-(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-1821 y(AST)p Ft(_)p Fk(GRID)h(routine\))e(b)n(y)h(determining)g(whic)n
-(h)g(edges)f(of)g(a)h(Plot)f(are)g(used)h(for)f(displa)n(ying)g(n)n
-(umerical)g(and)227 1921 y(descriptiv)n(e)36 b(axis)f(lab)r(els.)62
-b(It)36 b(tak)n(es)g(a)f(separate)g(v)-5 b(alue)36 b(for)f(eac)n(h)h
-(ph)n(ysical)f(axis)g(of)h(the)h(Plot)e(so)h(that,)i(for)227
-2020 y(instance,)d(the)f(setting)g Ft(")p Fk(Edge\(2\)=left)p
-Ft(")e Fk(sp)r(eci\014es)i(whic)n(h)f(edge)g(to)h(use)f(to)h(displa)n
-(y)f(lab)r(els)g(for)g(the)h(second)227 2120 y(axis.)227
-2245 y(The)j(v)-5 b(alues)36 b Ft(")p Fk(left)p Ft(")p
-Fk(,)j Ft(")p Fk(top)p Ft(")p Fk(,)f Ft(")p Fk(righ)n(t)p
-Ft(")e Fk(and)g Ft(")p Fk(b)r(ottom)p Ft(")g Fk(\(or)g(an)n(y)g
-(abbreviation\))g(can)g(b)r(e)h(supplied)g(for)f(this)227
-2344 y(attribute.)f(The)21 b(default)g(is)f(usually)h
-Ft(")p Fk(b)r(ottom)p Ft(")f Fk(for)g(the)h(\014rst)f(axis)g(and)h
-Ft(")p Fk(left)p Ft(")f Fk(for)h(the)g(second)f(axis.)34
-b(Ho)n(w)n(ev)n(er,)227 2444 y(if)24 b(exterior)f(lab)r(elling)g(w)n
-(as)g(requested)g(\(see)h(the)g(Lab)r(elling)f(attribute\))h(but)h
-(cannot)e(b)r(e)h(pro)r(duced)f(using)h(these)227 2543
-y(default)j(Edge)d(v)-5 b(alues,)26 b(then)h(the)f(default)g(v)-5
-b(alues)25 b(will)h(b)r(e)h(sw)n(app)r(ed)e(if)h(this)g(enables)g
-(exterior)e(lab)r(elling)i(to)f(b)r(e)227 2643 y(pro)r(duced.)0
-2792 y Fc(T)m(yp)s(e:)227 2892 y Fk(String.)0 3041 y
-Fc(Class)31 b(Applicabilit)m(y:)259 3178 y(Plot)427 3277
-y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)259
-3410 y Fc(Plot3D)427 3509 y Fk(The)36 b(Plot3D)f(class)f(ignores)g
-(this)i(attributes.)61 b(Instead)35 b(it)h(uses)f(its)h(o)n(wn)f(Ro)r
-(otCorner)f(attribute)i(to)427 3609 y(determine)28 b(whic)n(h)f(edges)g
-(of)h(the)g(3D)f(plot)h(to)g(lab)r(el.)0 3771 y Fc(Notes:)340
-4053 y Fj(\017)45 b Fk(In)29 b(some)e(circumstances,)g(n)n(umerical)g
-(lab)r(els)h(will)h(b)r(e)f(dra)n(wn)f(along)g(in)n(ternal)g(grid)h
-(lines)g(instead)g(of)g(at)427 4153 y(the)i(edges)e(of)i(the)f
-(plotting)h(area)d(\(see)j(the)f(Lab)r(elling)g(attribute\).)43
-b(In)29 b(this)h(case,)e(the)i(Edge)e(attribute)427 4252
-y(only)39 b(a\013ects)h(the)g(placemen)n(t)f(of)g(the)h(descriptiv)n(e)
-f(lab)r(els)g(\(these)h(are)e(dra)n(wn)h(at)g(the)h(edges)f(of)g(the)
-427 4352 y(plotting)28 b(area,)e(rather)h(than)g(along)g(the)h(axis)f
-(lines\).)p 0 4551 V 0 4683 a FA(Enco)t(ding)169 b Fd(System)38
-b(for)g(enco)s(ding)g(Ob)7 b(jects)38 b(as)h(FITS)g(headers)169
-b FA(Enco)t(ding)0 4871 y Fc(Description:)44 b Fk(This)25
-b(attribute)f(sp)r(eci\014es)g(the)h(enco)r(ding)f(system)g(to)g(use)g
-(when)g(AST)h(Ob)5 b(jects)24 b(are)f(stored)h(as)f(FITS)227
-4971 y(header)e(cards)g(in)h(a)g(FitsChan.)35 b(It)22
-b(a\013ects)g(the)g(b)r(eha)n(viour)f(of)h(the)g(AST)p
-Ft(_)p Fk(WRITE)g(and)g(AST)p Ft(_)p Fk(READ)g(routines)227
-5070 y(when)31 b(they)g(are)f(used)h(to)g(transfer)f(an)n(y)g(AST)h(Ob)
-5 b(ject)31 b(to)g(or)f(from)h(an)f(external)g(represen)n(tation)f
-(consisting)227 5170 y(of)j(FITS)g(header)e(cards)h(\(i.e.)49
-b(whenev)n(er)30 b(a)h(write)g(or)g(read)g(op)r(eration)f(is)h(p)r
-(erformed)g(using)h(a)f(FitsChan)g(as)227 5270 y(the)d(I/O)f
-(Channel\).)227 5394 y(There)g(are)f(sev)n(eral)f(w)n(a)n(ys)h(\(con)n
-(v)n(en)n(tions\))g(b)n(y)h(whic)n(h)g(co)r(ordinate)f(system)g
-(information)h(ma)n(y)f(b)r(e)i(represen)n(ted)227 5494
-y(in)j(the)g(form)f(of)h(FITS)g(headers)e(and)i(the)f(Enco)r(ding)g
-(attribute)h(is)f(used)h(to)f(sp)r(ecify)h(whic)n(h)g(of)f(these)h
-(should)227 5593 y(b)r(e)e(used.)37 b(The)28 b(enco)r(ding)g(options)f
-(a)n(v)-5 b(ailable)27 b(are)g(outlined)h(in)g(the)h
-Ft(")p Fk(Enco)r(dings)d(Av)-5 b(ailable)p Ft(")27 b
-Fk(section)h(b)r(elo)n(w,)227 5693 y(and)g(in)g(more)e(detail)i(in)g
-(the)g(sections)f(whic)n(h)g(follo)n(w.)p eop end
-%%Page: 399 409
-TeXDict begin 399 408 bop 3643 52 a FG(399)227 351 y
-Fk(Enco)r(ding)31 b(systems)f(di\013er)h(in)g(the)h(range)d(of)i(p)r
-(ossible)g(Ob)5 b(jects)31 b(\(e.g.)46 b(classes\))30
-b(they)i(can)e(represen)n(t,)h(in)g(the)227 451 y(restrictions)20
-b(they)i(place)f(on)g(these)g(Ob)5 b(jects)21 b(\(e.g.)35
-b(compatibilit)n(y)21 b(with)h(some)e(externally-de\014ned)h(co)r
-(ordinate)227 551 y(system)30 b(mo)r(del\))g(and)g(in)g(the)g(n)n(um)n
-(b)r(er)f(of)h(Ob)5 b(jects)29 b(that)h(can)g(b)r(e)g(stored)f
-(together)f(in)i(an)n(y)f(particular)g(set)h(of)227 650
-y(FITS)i(header)f(cards)g(\(e.g.)48 b(m)n(ultiple)33
-b(Ob)5 b(jects,)32 b(or)f(only)g(a)g(single)g(Ob)5 b(ject\).)49
-b(The)32 b(c)n(hoice)f(of)g(enco)r(ding)h(also)227 750
-y(a\013ects)24 b(the)h(range)d(of)j(external)e(applications)g(whic)n(h)
-h(can)g(p)r(oten)n(tially)g(read)f(and)h(in)n(terpret)g(the)g(FITS)g
-(header)227 849 y(cards)j(pro)r(duced.)227 974 y(The)20
-b(enco)r(ding)f(options)g(a)n(v)-5 b(ailable)18 b(are)h(not)g
-(necessarily)f(m)n(utually)i(exclusiv)n(e,)g(and)f(it)h(ma)n(y)f
-(sometimes)g(b)r(e)h(p)r(os-)227 1074 y(sible)27 b(to)f(store)f(m)n
-(ultiple)i(Ob)5 b(jects)26 b(\(or)g(the)g(same)g(Ob)5
-b(ject)26 b(sev)n(eral)f(times\))i(using)f(di\013eren)n(t)g(enco)r
-(dings)g(within)227 1173 y(the)31 b(same)f(set)g(of)g(FITS)h(header)e
-(cards.)44 b(This)30 b(p)r(ossibilit)n(y)g(increases)f(the)i(lik)n
-(eliho)r(o)r(d)f(of)g(other)g(applications)227 1273 y(b)r(eing)e(able)f
-(to)h(read)e(and)i(in)n(terpret)f(the)h(information.)227
-1398 y(By)33 b(default,)i(a)e(FitsChan)h(will)f(attempt)h(to)f
-(determine)h(whic)n(h)f(enco)r(ding)g(system)g(is)g(already)f(in)h
-(use,)i(and)227 1497 y(will)41 b(set)f(the)g(default)h(Enco)r(ding)e(v)
--5 b(alue)40 b(accordingly)e(\(so)i(that)h(subsequen)n(t)e(I/O)h(op)r
-(erations)e(adopt)i(the)227 1597 y(same)28 b(con)n(v)n(en)n(tions\).)38
-b(It)29 b(do)r(es)f(this)h(b)n(y)f(lo)r(oking)f(for)h(certain)g
-(critical)g(FITS)h(k)n(eyw)n(ords)d(whic)n(h)j(only)f(o)r(ccur)f(in)227
-1697 y(particular)g(enco)r(dings.)38 b(F)-7 b(or)28 b(details)g(of)g
-(ho)n(w)g(this)g(w)n(orks,)f(see)h(the)g Ft(")p Fk(Choice)g(of)g
-(Default)h(Enco)r(ding)p Ft(")e Fk(section)227 1796 y(b)r(elo)n(w.)36
-b(If)26 b(y)n(ou)e(wish)h(to)g(ensure)g(that)g(a)g(particular)f(enco)r
-(ding)h(system)g(is)g(used,)h(indep)r(enden)n(tly)g(of)f(an)n(y)f(FITS)
-227 1896 y(cards)j(already)f(presen)n(t,)h(y)n(ou)g(should)g(set)h(an)f
-(explicit)h(Enco)r(ding)f(v)-5 b(alue)27 b(y)n(ourself.)0
-2046 y Fc(T)m(yp)s(e:)227 2145 y Fk(String.)0 2295 y
-Fc(Class)k(Applicabilit)m(y:)259 2432 y(FitsChan)427
-2532 y Fk(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)-2
-2694 y Fc(Enco)s(dings)j(Av)-5 b(ailable)n(:)227 2840
-y Fk(The)29 b(Enco)r(ding)f(attribute)h(can)f(tak)n(e)g(an)n(y)g(of)h
-(the)g(follo)n(wing)f(\(case)g(insensitiv)n(e\))h(string)f(v)-5
-b(alues)28 b(to)h(select)f(the)227 2940 y(corresp)r(onding)e(enco)r
-(ding)h(system:)340 3202 y Fj(\017)45 b Ft(")p Fk(DSS)p
-Ft(")p Fk(:)f(Enco)r(des)30 b(co)r(ordinate)g(system)h(information)f
-(in)i(FITS)f(header)f(cards)g(using)h(the)g(con)n(v)n(en)n(tion)427
-3301 y(dev)n(elop)r(ed)19 b(at)h(the)g(Space)f(T)-7 b(elescop)r(e)19
-b(Science)h(Institute)g(\(STScI\))g(for)f(the)h(Digitised)g(Sky)g(Surv)
-n(ey)e(\(DSS\))427 3401 y(astrometric)29 b(plate)h(calibrations.)43
-b(The)30 b(main)h(adv)-5 b(an)n(tages)28 b(of)i(this)h(enco)r(ding)e
-(are)h(that)g(FITS)h(images)427 3501 y(whic)n(h)i(use)g(it)g(are)e
-(widely)i(a)n(v)-5 b(ailable)32 b(and)g(it)h(is)g(understo)r(o)r(d)f(b)
-n(y)h(a)f(n)n(um)n(b)r(er)h(of)f(imp)r(ortan)n(t)h(and)f(w)n(ell-)427
-3600 y(established)25 b(astronom)n(y)e(applications.)36
-b(F)-7 b(or)24 b(further)h(details,)h(see)f(the)g(section)g
-Ft(")p Fk(The)g(DSS)h(Enco)r(ding)p Ft(")427 3700 y Fk(b)r(elo)n(w.)340
-3833 y Fj(\017)45 b Ft(")p Fk(FITS-W)n(CS)p Ft(")p Fk(:)c(Enco)r(des)29
-b(co)r(ordinate)f(system)h(information)h(in)f(FITS)h(header)f(cards)g
-(using)g(the)h(con-)427 3932 y(v)n(en)n(tions)18 b(describ)r(ed)h(in)g
-(the)h(FITS)f(w)n(orld)f(co)r(ordinate)g(system)g(\(FITS-W)n(CS\))i
-(pap)r(ers)e(b)n(y)h(E.W.)g(Greisen,)427 4032 y(M.)26
-b(Calabretta,)f(et)h(al.)36 b(The)26 b(main)f(adv)-5
-b(an)n(tages)24 b(of)i(this)g(enco)r(ding)f(are)g(that)h(it)g(should)g
-(b)r(e)g(understo)r(o)r(d)427 4132 y(b)n(y)g(an)n(y)e(FITS-W)n(CS)i
-(complian)n(t)f(application)g(and)h(is)f(lik)n(ely)h(to)f(b)r(e)h
-(adopted)f(widely)h(for)f(FITS)h(data)f(in)427 4231 y(future.)38
-b(F)-7 b(or)27 b(further)g(details,)g(see)h(the)g(section)f
-Ft(")p Fk(The)g(FITS-W)n(CS)h(Enco)r(ding)p Ft(")e Fk(b)r(elo)n(w.)340
-4364 y Fj(\017)45 b Ft(")p Fk(FITS-PC)p Ft(")p Fk(:)52
-b(Enco)r(des)35 b(co)r(ordinate)g(system)g(information)g(in)h(FITS)g
-(header)f(cards)g(using)g(the)h(con-)427 4464 y(v)n(en)n(tions)31
-b(describ)r(ed)f(in)i(an)f(earlier)f(draft)h(of)g(the)g(FITS)h(w)n
-(orld)e(co)r(ordinate)g(system)h(pap)r(ers)g(b)n(y)g(E.W.)427
-4564 y(Greisen)e(and)h(M.)f(Calabretta.)42 b(This)29
-b(enco)r(ding)g(uses)g(a)g(com)n(bination)g(of)h(CDEL)-7
-b(Ti)29 b(and)g(PCiiijjj)i(k)n(ey-)427 4663 y(w)n(ords)38
-b(to)g(describ)r(e)h(the)g(scale)f(and)g(rotation)g(of)h(the)g(pixel)f
-(axes.)70 b(This)39 b(enco)r(ding)f(is)h(included)g(to)427
-4763 y(supp)r(ort)25 b(existing)f(data)h(and)g(soft)n(w)n(are)e(whic)n
-(h)h(uses)h(these)g(no)n(w)f(sup)r(erceded)h(con)n(v)n(en)n(tions.)34
-b(In)25 b(general,)427 4863 y(the)32 b Ft(")p Fk(FITS-W)n(CS)p
-Ft(")f Fk(enco)r(ding)h(\(whic)n(h)g(uses)f(CDi)p Ft(_)p
-Fk(j)h(or)f(PCi)p Ft(_)p Fk(j)g(k)n(eyw)n(ords)f(to)h(describ)r(e)h
-(the)g(scale)f(and)427 4962 y(rotation\))c(should)g(b)r(e)h(used)g(in)g
-(preference)f(to)g Ft(")p Fk(FITS-PC)p Ft(")p Fk(.)340
-5095 y Fj(\017)45 b Ft(")p Fk(FITS-IRAF)p Ft(")p Fk(:)38
-b(Enco)r(des)27 b(co)r(ordinate)g(system)h(information)g(in)g(FITS)h
-(header)e(cards)g(using)h(the)g(con-)427 5195 y(v)n(en)n(tions)e
-(describ)r(ed)g(in)g(the)h(do)r(cumen)n(t)g Ft(")p Fk(W)-7
-b(orld)25 b(Co)r(ordinate)h(Systems)g(Represen)n(tations)f(Within)i
-(the)427 5295 y(FITS)k(F)-7 b(ormat)p Ft(")29 b Fk(b)n(y)h(R.J.)g
-(Hanisc)n(h)g(and)g(D.G.)h(W)-7 b(ells,)32 b(1988.)43
-b(This)30 b(enco)r(ding)g(is)g(curren)n(tly)g(emplo)n(y)n(ed)427
-5394 y(b)n(y)35 b(the)h(IRAF)g(data)f(analysis)f(facilit)n(y)-7
-b(,)37 b(so)e(its)h(use)f(will)g(facilitate)h(data)f(exc)n(hange)f
-(with)h(IRAF.)i(Its)427 5494 y(main)f(adv)-5 b(an)n(tages)34
-b(are)h(that)h(it)h(is)f(a)f(stable)h(con)n(v)n(en)n(tion)e(whic)n(h)i
-(appro)n(ximates)e(to)i(a)f(subset)h(of)g(the)427 5593
-y(propsed)27 b(FITS-W)n(CS)g(enco)r(ding)g(\(ab)r(o)n(v)n(e\).)35
-b(This)28 b(mak)n(es)e(it)h(suitable)g(as)g(an)g(in)n(terim)g(metho)r
-(d)g(for)g(stor-)427 5693 y(ing)k(co)r(ordinate)f(system)h(information)
-g(in)h(FITS)f(headers)f(un)n(til)i(the)g(FITS-W)n(CS)f(enco)r(ding)g(b)
-r(ecomes)p eop end
-%%Page: 400 410
-TeXDict begin 400 409 bop 0 52 a FG(400)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)427 351
-y Fk(stable.)37 b(Since)26 b(man)n(y)h(datasets)e(curren)n(tly)h(use)h
-(the)g(FITS-IRAF)g(enco)r(ding,)g(con)n(v)n(ersion)d(of)j(data)f(from)
-427 451 y(FITS-IRAF)i(to)g(the)g(\014nal)f(form)h(of)f(FITS-W)n(CS)h
-(is)f(lik)n(ely)g(to)h(b)r(e)g(w)n(ell)f(supp)r(orted.)340
-583 y Fj(\017)45 b Ft(")p Fk(FITS-AIPS)p Ft(")p Fk(:)39
-b(Enco)r(des)29 b(co)r(ordinate)f(system)h(information)f(in)i(FITS)f
-(header)g(cards)f(using)h(the)g(con-)427 683 y(v)n(en)n(tions)35
-b(originally)f(in)n(tro)r(duced)i(b)n(y)f(the)h(AIPS)g(data)f(analysis)
-g(facilit)n(y)-7 b(.)61 b(This)35 b(is)h(base)f(on)h(the)g(use)427
-782 y(of)h(CDEL)-7 b(Ti)37 b(and)g(CR)n(OT)-7 b(Ai)36
-b(k)n(eu)n(w)n(ords)f(to)i(desrib)r(e)f(the)i(scale)e(and)g(rotation)g
-(of)h(eac)n(h)f(axis.)64 b(These)427 882 y(con)n(v)n(en)n(tions)26
-b(ha)n(v)n(e)h(b)r(een)h(sup)r(erceded)f(but)h(are)f(still)h(widely)f
-(used.)340 1014 y Fj(\017)45 b Ft(")p Fk(FITS-AIPS++)p
-Ft(")p Fk(:)j(Enco)r(des)33 b(co)r(ordinate)g(system)h(information)f
-(in)h(FITS)h(header)e(cards)g(using)g(the)427 1114 y(con)n(v)n(en)n
-(tions)24 b(used)h(b)n(y)g(the)g(AIPS++)f(pro)5 b(ject.)36
-b(This)25 b(is)g(an)g(extension)f(of)h(FITS-AIPS)g(whic)n(h)g(includes)
-427 1213 y(some)i(of)h(the)g(features)f(of)g(FITS-IRAF)i(and)e
-(FITS-PC.)340 1346 y Fj(\017)45 b Ft(")p Fk(FITS-CLASS)p
-Ft(")p Fk(:)34 b(Enco)r(des)22 b(co)r(ordinate)g(system)g(information)g
-(in)h(FITS)g(header)f(cards)f(using)h(the)h(con-)427
-1445 y(v)n(en)n(tions)d(used)i(b)n(y)f(the)g(CLASS)h(pro)5
-b(ject.)34 b(CLASS)21 b(is)g(a)g(soft)n(w)n(are)f(pac)n(k)-5
-b(age)19 b(for)i(reducing)f(single-dish)h(ra-)427 1545
-y(dio)d(and)h(sub-mm)f(sp)r(ectroscopic)f(data.)33 b(See)19
-b(the)g(section)f Ft(")p Fk(CLASS)g(FITS)h(format)p Ft(")e
-Fk(at)h(h)n(ttp://www.iram.fr/IRAMFR/GILD)n(AS/do)r(c/h)n(tml/class-)
-427 1644 y(h)n(tml/.)340 1777 y Fj(\017)45 b Ft(")p Fk(NA)-7
-b(TIVE)p Ft(")p Fk(:)36 b(Enco)r(des)24 b(AST)i(Ob)5
-b(jects)26 b(in)f(FITS)h(header)f(cards)g(using)g(a)g(con)n(v)n(en)n
-(tion)f(whic)n(h)h(is)h(priv)-5 b(ate)427 1876 y(to)21
-b(the)h(AST)f(library)f(\(but)i(adheres)e(to)h(the)h(general)e(FITS)h
-(standard\))f(and)h(whic)n(h)h(uses)e(FITS)i(k)n(eyw)n(ords)427
-1976 y(that)42 b(will)f(not)g(clash)f(with)i(other)e(enco)r(ding)h
-(systems.)77 b(The)41 b(main)g(adv)-5 b(an)n(tages)39
-b(of)i(this)g(are)f(that)427 2076 y(an)n(y)e(class)f(of)i(AST)f(Ob)5
-b(ject)39 b(ma)n(y)e(b)r(e)i(enco)r(ded,)i(and)d(an)n(y)g
-(\(reasonable\))f(n)n(um)n(b)r(er)h(of)g(Ob)5 b(jects)38
-b(ma)n(y)427 2175 y(b)r(e)33 b(stored)e(sequen)n(tially)g(in)h(the)h
-(same)e(FITS)h(header.)50 b(This)32 b(mak)n(es)e(FITS)j(headers)e(an)g
-(almost)h(loss-)427 2275 y(less)i(comm)n(unication)f(path)h(for)f
-(passing)g(AST)h(Ob)5 b(jects)34 b(b)r(et)n(w)n(een)g(applications)f
-(\(although)g(all)h(suc)n(h)427 2374 y(applications)27
-b(m)n(ust,)h(of)g(course,)e(mak)n(e)h(use)g(of)h(the)g(AST)g(library)f
-(to)g(in)n(terpret)g(the)h(information\).)37 b(F)-7 b(or)427
-2474 y(further)28 b(details,)f(see)g(the)h(section)g
-Ft(")p Fk(The)f(NA)-7 b(TIVE)28 b(Enco)r(ding)p Ft(")e
-Fk(b)r(elo)n(w.)-2 2635 y Fc(Choice)32 b(of)f(Default)h(Enco)s(ding)n
-(:)227 2781 y Fk(If)d(the)g(Enco)r(ding)f(attribute)g(of)h(a)f
-(FitsChan)h(is)f(not)g(set,)h(the)g(default)g(v)-5 b(alue)28
-b(it)h(tak)n(es)f(is)g(determined)h(b)n(y)f(the)227 2881
-y(presence)d(of)h(certain)f(critical)g(FITS)h(k)n(eyw)n(ords)e(within)j
-(the)f(FitsChan.)36 b(The)26 b(sequence)f(of)h(decisions)f(used)h(to)
-227 2981 y(arriv)n(e)g(at)h(the)h(default)g(v)-5 b(alue)28
-b(is)f(as)g(follo)n(ws:)340 3241 y Fj(\017)45 b Fk(If)26
-b(the)f(FitsChan)g(con)n(tains)f(an)n(y)g(k)n(eyw)n(ords)f(b)r
-(eginning)i(with)g(the)h(string)e Ft(")p Fk(BEGAST)p
-Ft(")p Fk(,)h(then)g(NA)-7 b(TIVE)427 3340 y(enco)r(ding)28
-b(is)f(used,)340 3472 y Fj(\017)45 b Fk(Otherwise,)24
-b(FITS-CLASS)h(is)f(used)g(if)g(the)h(FitsChan)f(con)n(tains)f(a)g(DEL)
--7 b(T)g(A)e(V)25 b(k)n(eyw)n(ord)d(and)i(a)f(k)n(eyw)n(ord)427
-3572 y(of)f(the)g(form)f(VELO-xxx,)h(where)f(xxx)g(indicates)g(one)h
-(of)f(the)h(rest)g(frames)f(used)g(b)n(y)h(class)e(\(e.g.)35
-b Ft(")p Fk(VELO-)427 3672 y(LSR)p Ft(")p Fk(\).)340
-3804 y Fj(\017)45 b Fk(Otherwise,)e(if)e(the)g(FitsChan)f(con)n(tains)g
-(a)g(CTYPE)g(k)n(eyw)n(ord)e(whic)n(h)j(represen)n(ts)d(a)j(sp)r
-(ectral)e(axis)427 3904 y(using)f(the)h(con)n(v)n(en)n(tions)e(of)i
-(the)f(AIPS)h(and)f(AIPS++)g(pro)5 b(jects)37 b(\(e.g.)70
-b Ft(")p Fk(FELO-LSR)p Ft(")p Fk(,)39 b(etc\),)j(then)427
-4003 y(one)31 b(of)g(FITS-AIPS)g(or)f(FITS-AIPS++)g(enco)r(ding)h(is)f
-(used.)48 b(FITS-AIPS++)30 b(is)h(used)f(if)i(an)n(y)e(of)h(the)427
-4103 y(k)n(eyw)n(ords)g(CDi)p Ft(_)p Fk(j,)j(PR)n(OJP)-7
-b(,)32 b(LONPOLE)f(or)g(LA)-7 b(TPOLE)32 b(are)g(found)h(in)g(the)g
-(FitsChan.)52 b(Otherwise)427 4202 y(FITS-AIPS)28 b(is)f(used.)340
-4335 y Fj(\017)45 b Fk(Otherwise,)28 b(if)g(the)h(FitsChan)f(con)n
-(tains)f(a)h(k)n(eyw)n(ord)e(of)i(the)g(form)g Ft(")p
-Fk(PCiiijjj)p Ft(")p Fk(,)g(where)g Ft(")p Fk(i)p Ft(")f
-Fk(and)h Ft(")p Fk(j)p Ft(")g Fk(are)427 4434 y(single)f(digits,)h
-(then)g(FITS-PC)f(enco)r(ding)g(is)h(used,)340 4566 y
-Fj(\017)45 b Fk(Otherwise,)27 b(if)h(the)g(FitsChan)g(con)n(tains)f(a)g
-(k)n(eyw)n(ord)e(of)j(the)g(form)f Ft(")p Fk(CDiiijjj)p
-Ft(")p Fk(,)i(where)e Ft(")p Fk(i)p Ft(")g Fk(and)g Ft(")p
-Fk(j)p Ft(")h Fk(are)427 4666 y(single)f(digits,)h(then)g(FITS-IRAF)g
-(enco)r(ding)f(is)h(used,)340 4798 y Fj(\017)45 b Fk(Otherwise,)c(if)e
-(the)f(FitsChan)h(con)n(tains)e(a)h(k)n(eyw)n(ord)f(of)h(the)h(form)f
-Ft(")p Fk(CDi)p Ft(_)p Fk(j)p Ft(")p Fk(,)j(and)d(at)h(least)f(one)g
-(of)427 4898 y(RADECSYS,)43 b(PR)n(OJPi,)g(or)d(CjV)-9
-b(ALi)42 b(where)f Ft(")p Fk(i)p Ft(")g Fk(and)g Ft(")p
-Fk(j)p Ft(")g Fk(are)f(single)h(digits,)k(then)d(FITS-IRAF)427
-4998 y(enco)r(ding)28 b(is)f(used.)340 5130 y Fj(\017)45
-b Fk(Otherwise,)26 b(if)i(the)f(FitsChan)f(con)n(tains)g(an)n(y)g(k)n
-(eyw)n(ords)e(of)j(the)g(form)f(PR)n(OJPi,)f(CjV)-9 b(ALi)28
-b(or)e(RADEC-)427 5229 y(SYS,)j(where)e Ft(")p Fk(i)p
-Ft(")g Fk(and)g Ft(")p Fk(j)p Ft(")g Fk(are)g(single)g(digits,)g(then)h
-(FITS-PC)g(enco)r(ding)f(is)g(used.)340 5362 y Fj(\017)45
-b Fk(Otherwise,)34 b(if)g(the)g(FitsChan)g(con)n(tains)e(a)h(k)n(eyw)n
-(ord)f(of)h(the)h(form)f(CR)n(OT)-7 b(Ai,)35 b(where)e
-Ft(")p Fk(i)p Ft(")g Fk(is)g(a)g(single)427 5461 y(digit,)28
-b(then)g(FITS-AIPS)g(enco)r(ding)f(is)g(used.)340 5593
-y Fj(\017)45 b Fk(Otherwise,)36 b(if)f(the)g(FitsChan)g(con)n(tains)f
-(a)g(k)n(eyw)n(ord)f(of)i(the)g(form)f(CR)-9 b(V)g(ALi,)37
-b(where)d Ft(")p Fk(i)p Ft(")g Fk(is)h(a)f(single)427
-5693 y(digit,)28 b(then)g(FITS-W)n(CS)g(enco)r(ding)f(is)h(used.)p
-eop end
-%%Page: 401 411
-TeXDict begin 401 410 bop 3643 52 a FG(401)340 351 y
-Fj(\017)45 b Fk(Otherwise,)27 b(if)h(the)g(FitsChan)g(con)n(tains)e
-(the)i Ft(")p Fk(PL)-7 b(TRAH)p Ft(")27 b Fk(k)n(eyw)n(ord,)f(then)i
-(DSS)h(enco)r(ding)e(is)g(used,)340 486 y Fj(\017)45
-b Fk(Otherwise,)37 b(if)e(none)g(of)h(these)f(conditions)g(is)g(met)h
-(\(as)f(w)n(ould)f(b)r(e)i(the)g(case)e(when)i(using)f(an)g(empt)n(y)
-427 585 y(FitsChan\),)28 b(then)g(NA)-7 b(TIVE)28 b(enco)r(ding)g(is)f
-(used.)227 751 y(Except)e(for)g(the)g(NA)-7 b(TIVE)25
-b(and)g(DSS)h(enco)r(dings,)f(all)g(the)h(ab)r(o)n(v)n(e)d(c)n(hec)n
-(ks)h(also)g(require)g(that)i(the)f(header)f(con-)227
-850 y(tains)g(at)g(least)g(one)g(CTYPE,)f(CRPIX)i(and)f(CR)-9
-b(V)g(AL)24 b(k)n(eyw)n(ord)e(\(otherwise)i(the)g(c)n(hec)n(king)f(pro)
-r(cess)g(con)n(tin)n(ues)227 950 y(to)28 b(the)g(next)g(case\).)227
-1076 y(Setting)g(an)g(explicit)f(v)-5 b(alue)28 b(for)f(the)h(Enco)r
-(ding)f(attribute)h(alw)n(a)n(ys)d(o)n(v)n(er-rides)g(this)j(default)g
-(b)r(eha)n(viour.)227 1203 y(Note)h(that)g(when)g(writing)f
-(information)g(to)h(a)f(FitsChan,)h(the)g(c)n(hoice)f(of)h(enco)r(ding)
-f(will)h(dep)r(end)h(greatly)d(on)227 1302 y(the)d(t)n(yp)r(e)f(of)g
-(application)g(y)n(ou)f(exp)r(ect)i(to)f(b)r(e)g(reading)f(the)i
-(information)f(in)g(future.)36 b(If)23 b(y)n(ou)g(do)g(not)g(kno)n(w)f
-(this,)227 1402 y(there)32 b(ma)n(y)f(sometimes)g(b)r(e)h(an)f(adv)-5
-b(an)n(tage)30 b(in)i(writing)f(the)h(information)f(sev)n(eral)f
-(times,)j(using)e(a)g(di\013eren)n(t)227 1501 y(enco)r(ding)d(on)f(eac)
-n(h)g(o)r(ccasion.)-2 1654 y Fc(The)32 b(DSS)h(Enco)s(ding)n(:)227
-1801 y Fk(The)g(DSS)h(enco)r(ding)f(uses)f(FITS)i(header)e(cards)g(to)h
-(store)f(a)g(m)n(ulti-term)h(p)r(olynomial)g(whic)n(h)g(relates)f
-(pixel)227 1900 y(p)r(ositions)20 b(on)f(a)h(digitised)f(photographic)g
-(plate)g(to)h(celestial)g(co)r(ordinates)e(\(righ)n(t)h(ascension)g
-(and)h(declination\).)227 2000 y(This)33 b(enco)r(ding)g(ma)n(y)f(only)
-h(b)r(e)g(used)g(to)g(store)f(a)h(single)f(AST)i(Ob)5
-b(ject)33 b(in)g(an)n(y)f(set)h(of)g(FITS)g(header)g(cards,)227
-2099 y(and)27 b(that)h(Ob)5 b(ject)27 b(m)n(ust)h(b)r(e)f(a)g(F)-7
-b(rameSet)27 b(whic)n(h)g(conforms)g(to)g(the)h(STScI/DSS)f(co)r
-(ordinate)f(system)h(mo)r(del)227 2199 y(\(this)g(means)f(the)h
-(Mapping)g(whic)n(h)f(relates)g(its)g(base)g(and)g(curren)n(t)g(F)-7
-b(rames)26 b(m)n(ust)g(include)h(either)g(a)f(DssMap)227
-2299 y(or)h(a)g(WcsMap)h(with)g(t)n(yp)r(e)f(AST)p Ft(__)p
-Fk(T)-7 b(AN)28 b(or)f(AST)p Ft(__)p Fk(TPN\).)227 2425
-y(When)h(reading)f(a)g(DSS)h(enco)r(ded)g(Ob)5 b(ject)28
-b(\(using)f(AST)p Ft(_)p Fk(READ\),)h(the)g(FitsChan)g(concerned)f(m)n
-(ust)g(initially)227 2525 y(b)r(e)38 b(p)r(ositioned)f(at)g(the)h
-(\014rst)f(card)f(\(its)i(Card)f(attribute)g(m)n(ust)h(equal)e(1\))h
-(and)h(the)f(result)g(of)h(the)f(read,)i(if)227 2624
-y(successful,)34 b(will)f(alw)n(a)n(ys)d(b)r(e)j(a)g(p)r(oin)n(ter)f
-(to)g(a)h(F)-7 b(rameSet.)51 b(The)33 b(base)f(F)-7 b(rame)32
-b(of)h(this)g(F)-7 b(rameSet)32 b(represen)n(ts)227 2724
-y(DSS)27 b(pixel)g(co)r(ordinates,)e(and)h(the)h(curren)n(t)e(F)-7
-b(rame)26 b(represen)n(ts)f(DSS)i(celestial)f(co)r(ordinates.)35
-b(Suc)n(h)26 b(a)g(read)g(is)227 2823 y(alw)n(a)n(ys)c(destructiv)n(e)i
-(and)f(causes)g(the)h(FITS)h(header)e(cards)f(required)h(for)g(the)i
-(construction)e(of)h(the)g(F)-7 b(rameSet)227 2923 y(to)27
-b(b)r(e)g(remo)n(v)n(ed)f(from)g(the)i(FitsChan,)f(whic)n(h)g(is)f
-(then)i(left)f(p)r(ositioned)g(at)g(the)g Ft(")p Fk(end-of-\014le)p
-Ft(")p Fk(.)36 b(A)27 b(subsequen)n(t)227 3023 y(read)h(using)h(the)g
-(same)f(enco)r(ding)g(will)h(therefore)f(not)h(return)f(another)g(F)-7
-b(rameSet,)29 b(ev)n(en)f(if)i(the)f(FitsChan)g(is)227
-3122 y(rew)n(ound.)227 3249 y(When)35 b(AST)p Ft(_)p
-Fk(WRITE)g(is)f(used)h(to)f(store)g(a)g(F)-7 b(rameSet)34
-b(using)g(DSS)i(enco)r(ding,)g(an)e(attempt)h(is)g(\014rst)f(made)227
-3348 y(to)d(simplify)g(the)h(F)-7 b(rameSet)30 b(to)h(see)f(if)i(it)f
-(conforms)f(to)h(the)g(DSS)g(mo)r(del.)47 b(Sp)r(eci\014cally)-7
-b(,)32 b(the)f(curren)n(t)f(F)-7 b(rame)227 3448 y(m)n(ust)36
-b(b)r(e)h(a)e(FK5)h(SkyF)-7 b(rame;)39 b(the)d(pro)5
-b(jection)35 b(m)n(ust)h(b)r(e)h(a)e(tangen)n(t)h(plane)g(\(gnomonic\))
-f(pro)5 b(jection)35 b(with)227 3547 y(p)r(olynomial)26
-b(corrections)e(conforming)h(to)h(DSS)h(requiremen)n(ts,)f(and)g(north)
-g(m)n(ust)g(b)r(e)g(parallel)g(to)g(the)g(second)227
-3647 y(base)h(F)-7 b(rame)27 b(axis.)227 3773 y(If)36
-b(the)g(simpli\014cation)f(pro)r(cess)f(succeeds,)j(a)e(description)g
-(of)g(the)h(F)-7 b(rameSet)35 b(is)h(written)f(to)h(the)g(FitsChan)227
-3873 y(using)31 b(appropriate)e(DSS)j(FITS)g(header)e(cards.)46
-b(The)32 b(base)e(F)-7 b(rame)31 b(of)g(the)g(F)-7 b(rameSet)31
-b(is)g(used)g(to)g(form)g(the)227 3973 y(DSS)37 b(pixel)g(co)r
-(ordinate)e(system)h(and)g(the)h(curren)n(t)e(F)-7 b(rame)36
-b(giv)n(es)f(the)i(DSS)g(celestial)f(co)r(ordinate)f(system.)227
-4072 y(A)c(successful)g(write)g(op)r(eration)e(will)i(o)n(v)n(er-write)
-e(an)n(y)h(existing)g(DSS)i(enco)r(ded)f(data)f(in)h(the)g(FitsChan,)h
-(but)227 4172 y(will)f(not)g(a\013ect)g(other)f(\(non-DSS\))h(header)f
-(cards.)45 b(If)31 b(a)g(destructiv)n(e)f(read)g(of)g(a)h(DSS)g(enco)r
-(ded)g(Ob)5 b(ject)30 b(has)227 4271 y(previously)h(o)r(ccurred,)g
-(then)h(an)g(attempt)g(will)g(b)r(e)g(made)f(to)h(store)f(the)h(FITS)g
-(header)e(cards)h(bac)n(k)g(in)h(their)227 4371 y(original)26
-b(lo)r(cations.)227 4497 y(If)h(an)g(attempt)g(to)f(simplify)i(a)e(F)-7
-b(rameSet)26 b(to)h(conform)f(to)g(the)h(DSS)g(mo)r(del)g(fails)g(\(or)
-f(if)h(the)g(Ob)5 b(ject)26 b(supplied)227 4597 y(is)33
-b(not)g(a)g(F)-7 b(rameSet\),)34 b(then)f(no)g(data)f(will)i(b)r(e)f
-(written)g(to)g(the)g(FitsChan)g(and)g(AST)p Ft(_)p Fk(WRITE)g(will)g
-(return)227 4697 y(zero.)j(No)28 b(error)d(will)j(result.)-2
-4850 y Fc(The)k(FITS-W)m(CS)h(Enco)s(ding)n(:)227 4996
-y Fk(The)k(FITS-W)n(CS)g(con)n(v)n(en)n(tion)e(uses)h(FITS)h(header)e
-(cards)h(to)g(describ)r(e)h(the)g(relationship)e(b)r(et)n(w)n(een)i
-(pixels)227 5095 y(in)30 b(an)f(image)f(\(not)h(necessarily)f
-(2-dimensional\))g(and)h(one)g(or)f(more)g(related)h
-Ft(")p Fk(w)n(orld)e(co)r(ordinate)h(systems)p Ft(")p
-Fk(.)227 5195 y(The)39 b(FITS-W)n(CS)g(enco)r(ding)f(ma)n(y)g(only)h(b)
-r(e)g(used)g(to)f(store)g(a)h(single)f(AST)h(Ob)5 b(ject)39
-b(in)g(an)n(y)f(set)h(of)f(FITS)227 5295 y(header)27
-b(cards,)g(and)h(that)g(Ob)5 b(ject)28 b(m)n(ust)g(b)r(e)h(a)e(F)-7
-b(rameSet)28 b(whic)n(h)g(conforms)f(to)g(the)i(FITS-W)n(CS)f(mo)r(del)
-g(\(the)227 5394 y(F)-7 b(rameSet)27 b(ma)n(y)-7 b(,)27
-b(ho)n(w)n(ev)n(er,)e(con)n(tain)h(m)n(ultiple)i(F)-7
-b(rames)26 b(whic)n(h)h(will)g(b)r(e)h(result)f(in)g(m)n(ultiple)g
-(FITS)h Ft(")p Fk(alternate)227 5494 y(axis)h(descriptions)p
-Ft(")p Fk(\).)40 b(Details)29 b(of)g(the)g(use)g(made)g(b)n(y)g(this)g
-(Enco)r(ding)f(of)h(the)h(con)n(v)n(en)n(tions)d(describ)r(ed)i(in)g
-(the)227 5593 y(FITS-W)n(CS)22 b(pap)r(ers)g(are)f(giv)n(en)g(in)h(the)
-h(app)r(endix)f Ft(")p Fk(FITS-W)n(CS)g(Co)n(v)n(erage)p
-Ft(")c Fk(of)k(this)h(do)r(cumen)n(t.)35 b(A)22 b(few)h(main)227
-5693 y(p)r(oin)n(ts)28 b(are)e(describ)r(ed)i(b)r(elo)n(w.)p
-eop end
-%%Page: 402 412
-TeXDict begin 402 411 bop 0 52 a FG(402)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fk(The)26 b(rotation)e(and)i(scaling)e(of)i(the)g(in)n(termediate)f
-(w)n(orld)g(co)r(ordinate)f(system)h(can)h(b)r(e)g(sp)r(eci\014ed)g
-(using)f(either)227 451 y Ft(")p Fk(CDi)p Ft(_)p Fk(j)p
-Ft(")30 b Fk(k)n(eyw)n(ords,)f(or)h Ft(")p Fk(PCi)p Ft(_)p
-Fk(j)p Ft(")f Fk(together)g(with)i Ft(")p Fk(CDEL)-7
-b(Ti)p Ft(")30 b Fk(k)n(eyw)n(ords.)43 b(When)31 b(writing)f(a)g(F)-7
-b(rameSet)30 b(to)227 551 y(a)f(FitsChan,)g(the)g(the)g(v)-5
-b(alue)28 b(of)h(the)g(CDMatrix)g(attribute)g(of)f(the)h(FitsChan)g
-(determines)g(whic)n(h)f(system)h(is)227 650 y(used.)227
-770 y(In)d(addition,)f(this)g(enco)r(ding)g(supp)r(orts)g(the)g
-Ft(")p Fk(T)-7 b(AN)26 b(with)f(p)r(olynomial)g(correction)e(terms)p
-Ft(")i Fk(pro)5 b(jection)24 b(whic)n(h)227 870 y(w)n(as)38
-b(included)h(in)g(a)f(draft)g(of)h(the)g(FITS-W)n(CS)g(pap)r(er,)h(but)
-g(w)n(as)d(not)i(presen)n(t)f(in)h(the)g(\014nal)f(v)n(ersion.)68
-b(A)227 969 y Ft(")p Fk(T)-7 b(AN)38 b(with)h(p)r(olynomial)e
-(correction)f(terms)p Ft(")h Fk(pro)5 b(jection)37 b(is)g(represen)n
-(ted)g(using)g(a)h(WcsMap)f(with)h(t)n(yp)r(e)227 1069
-y(AST)p Ft(__)p Fk(TPN)28 b(\(rather)g(than)h(AST)p Ft(__)p
-Fk(T)-7 b(AN)28 b(whic)n(h)h(is)f(used)h(to)f(represen)n(t)f(simple)i
-(T)-7 b(AN)29 b(pro)5 b(jections\).)39 b(When)227 1168
-y(reading)20 b(a)g(FITS)g(header,)h(a)f(CTYPE)g(k)n(eyw)n(ord)f(v)-5
-b(alue)20 b(including)g(a)g Ft(")p Fk(-T)-7 b(AN)p Ft(")20
-b Fk(co)r(de)h(results)e(in)i(an)f(AST)p Ft(__)p Fk(TPN)227
-1268 y(pro)5 b(jection)28 b(if)h(there)f(are)f(an)n(y)h(pro)5
-b(jection)27 b(parameters)g(\(giv)n(en)h(b)n(y)g(the)g(PVi)p
-Ft(_)p Fk(m)h(k)n(eyw)n(ords\))d(asso)r(ciated)h(with)227
-1368 y(the)35 b(latitude)f(axis,)h(or)e(if)i(there)f(are)f(pro)5
-b(jection)33 b(parameters)f(asso)r(ciated)h(with)h(the)h(longitude)f
-(axis)f(for)g(m)227 1467 y(greater)28 b(than)h(4.)41
-b(When)30 b(writing)f(a)g(F)-7 b(rameSet)29 b(to)g(a)f(FITS)i(header,)f
-(an)g(AST)p Ft(__)p Fk(TPN)f(pro)5 b(jection)28 b(giv)n(es)g(rise)227
-1567 y(to)c(a)g(CTYPE)f(v)-5 b(alue)24 b(including)h(the)f(normal)f
-Ft(")p Fk(-T)-7 b(AN)p Ft(")24 b Fk(co)r(de,)g(but)h(the)g(pro)5
-b(jection)23 b(parameters)f(are)h(stored)g(in)227 1667
-y(k)n(eyw)n(ords)e(with)i(names)f Ft(")p Fk(QVi)p Ft(_)p
-Fk(m)p Ft(")p Fk(,)g(instead)g(of)h(the)g(usual)f Ft(")p
-Fk(PVi)p Ft(_)p Fk(m)p Ft(")p Fk(.)34 b(Since)22 b(these)h(QV)f
-(parameters)f(are)h(not)227 1766 y(part)28 b(of)g(the)h(FITS-W)n(CS)f
-(standard)f(they)h(will)h(b)r(e)f(ignored)f(b)n(y)h(other)g(non-AST)g
-(soft)n(w)n(are,)e(resulting)i(in)g(the)227 1866 y(W)n(CS)h(b)r(eing)g
-(in)n(terpreted)f(as)g(a)g(simple)h(T)-7 b(AN)30 b(pro)5
-b(jection)27 b(without)i(an)n(y)f(corrections.)39 b(This)28
-b(should)h(b)r(e)g(seen)227 1965 y(as)k(an)g(in)n(terim)g(solution)g
-(un)n(til)g(suc)n(h)g(time)h(as)f(an)g(agreed)e(metho)r(d)j(for)f
-(describing)f(pro)5 b(jection)33 b(distortions)227 2065
-y(within)c(FITS-W)n(CS)e(has)g(b)r(een)h(published.)227
-2185 y(AST)38 b(extends)g(the)g(range)e(of)h(celestial)g(co)r(ordinate)
-g(sytstems)g(whic)n(h)h(ma)n(y)f(b)r(e)g(describ)r(ed)h(using)f(this)h
-(en-)227 2284 y(co)r(ding)33 b(b)n(y)g(inclusion)h(of)f(the)h(allo)n
-(wing)e(the)i(use)f(of)g Ft(")p Fk(AZ{)p Ft(")f Fk(and)i
-Ft(")p Fk(EL{)p Ft(")d Fk(as)i(the)h(co)r(ordinate)e(sp)r
-(eci\014cation)227 2384 y(within)f(CTYPE)e(v)-5 b(alues.)44
-b(These)30 b(form)g(a)g(longitude/latitude)f(pair)h(of)g(axes)f(whic)n
-(h)h(describ)r(e)g(azim)n(uth)g(and)227 2484 y(elev)-5
-b(ation.)37 b(The)27 b(geographic)e(p)r(osition)i(of)h(the)f(observ)n
-(er)f(should)h(b)r(e)g(supplied)h(using)f(the)h(OBSGEO-X/Y/Z)227
-2583 y(k)n(eyw)n(ords)f(describ)r(ed)i(in)g(FITS-W)n(CS)g(pap)r(er)f(I)
-r(I)r(I.)i(Curren)n(tly)-7 b(,)28 b(a)h(simple)g(mo)r(del)g(is)g(used)g
-(whic)n(h)g(includes)g(di-)227 2683 y(urnal)f(ab)r(erration,)e(but)j
-(ignores)d(atmospheric)h(refraction,)g(p)r(olar)g(motion,)h(etc.)39
-b(These)27 b(ma)n(y)g(b)r(e)i(added)f(in)g(a)227 2783
-y(leter)g(release.)227 2902 y(When)33 b(reading)f(a)g(FITS-W)n(CS)h
-(enco)r(ded)g(Ob)5 b(ject)32 b(\(using)h(AST)p Ft(_)p
-Fk(READ\),)g(the)g(FitsChan)g(concerned)e(m)n(ust)227
-3002 y(initially)25 b(b)r(e)g(p)r(ositioned)f(at)h(the)g(\014rst)f
-(card)g(\(its)h(Card)f(attribute)h(m)n(ust)f(equal)h(1\))f(and)h(the)g
-(result)f(of)g(the)h(read,)227 3102 y(if)k(successful,)f(will)g(alw)n
-(a)n(ys)f(b)r(e)h(a)g(p)r(oin)n(ter)g(to)g(a)g(F)-7 b(rameSet.)38
-b(The)28 b(base)g(F)-7 b(rame)28 b(of)g(this)g(F)-7 b(rameSet)28
-b(represen)n(ts)227 3201 y(FITS-W)n(CS)36 b(pixel)h(co)r(ordinates,)f
-(and)g(the)h(curren)n(t)e(F)-7 b(rame)36 b(represen)n(ts)e(the)j(ph)n
-(ysical)e(co)r(ordinate)g(system)227 3301 y(describ)r(ed)j(b)n(y)f(the)
-i(FITS-W)n(CS)f(primary)e(axis)h(descriptions.)67 b(If)39
-b(secondary)d(axis)h(descriptions)g(are)g(also)227 3400
-y(presen)n(t,)e(then)f(the)g(F)-7 b(rameSet)33 b(ma)n(y)g(con)n(tain)f
-(additional)h(\(non-curren)n(t\))g(F)-7 b(rames)33 b(whic)n(h)g
-(represen)n(t)g(these.)227 3500 y(Suc)n(h)23 b(a)f(read)g(is)h(alw)n(a)
-n(ys)e(destructiv)n(e)h(and)h(causes)f(the)h(FITS)g(header)f(cards)f
-(required)h(for)h(the)g(construction)f(of)227 3600 y(the)28
-b(F)-7 b(rameSet)28 b(to)f(b)r(e)h(remo)n(v)n(ed)f(from)g(the)h
-(FitsChan,)g(whic)n(h)g(is)f(then)h(left)h(p)r(ositioned)e(at)h(the)g
-Ft(")p Fk(end-of-\014le)p Ft(")p Fk(.)227 3699 y(A)d(subsequen)n(t)f
-(read)f(using)h(the)h(same)e(enco)r(ding)h(will)g(therefore)g(not)g
-(return)g(another)f(F)-7 b(rameSet,)25 b(ev)n(en)e(if)i(the)227
-3799 y(FitsChan)j(is)f(rew)n(ound.)227 3919 y(When)34
-b(AST)p Ft(_)p Fk(WRITE)f(is)f(used)h(to)g(store)f(a)h(F)-7
-b(rameSet)32 b(using)h(FITS-W)n(CS)g(enco)r(ding,)h(an)e(attempt)i(is)f
-(\014rst)227 4018 y(made)25 b(to)h(simplify)g(the)f(F)-7
-b(rameSet)25 b(to)h(see)f(if)g(it)h(conforms)f(to)g(the)h(FITS-W)n(CS)f
-(mo)r(del.)36 b(If)26 b(this)g(simpli\014cation)227 4118
-y(pro)r(cess)39 b(succeeds)g(\(as)g(it)h(often)f(should,)k(as)38
-b(the)i(mo)r(del)g(is)f(reasonably)f(\015exible\),)43
-b(a)c(description)g(of)g(the)227 4218 y(F)-7 b(rameSet)35
-b(is)g(written)h(to)f(the)g(FitsChan)h(using)e(appropriate)g(FITS)h
-(header)g(cards.)58 b(The)35 b(base)g(F)-7 b(rame)35
-b(of)227 4317 y(the)27 b(F)-7 b(rameSet)26 b(is)h(used)f(to)g(form)g
-(the)h(FITS-W)n(CS)g(pixel)f(co)r(ordinate)f(system)h(and)h(the)f
-(curren)n(t)g(F)-7 b(rame)26 b(giv)n(es)227 4417 y(the)j(ph)n(ysical)e
-(co)r(ordinate)g(system)h(to)f(b)r(e)i(describ)r(ed)f(b)n(y)g(the)g
-(FITS-W)n(CS)g(primary)f(axis)g(descriptions.)38 b(An)n(y)227
-4517 y(additional)32 b(F)-7 b(rames)32 b(in)h(the)g(F)-7
-b(rameSet)32 b(ma)n(y)g(b)r(e)h(used)f(to)h(construct)f(secondary)e
-(axis)i(descriptions,)h(where)227 4616 y(appropriate.)227
-4736 y(A)24 b(successful)f(write)h(op)r(eration)e(will)i(o)n(v)n
-(er-write)d(an)n(y)i(existing)g(FITS-W)n(CS)g(enco)r(ded)h(data)f(in)h
-(the)f(FitsChan,)227 4836 y(but)37 b(will)g(not)g(a\013ect)g(other)f
-(\(non-FITS-W)n(CS\))g(header)g(cards.)63 b(If)37 b(a)f(destructiv)n(e)
-g(read)g(of)g(a)g(FITS-W)n(CS)227 4935 y(enco)r(ded)30
-b(Ob)5 b(ject)29 b(has)g(previously)f(o)r(ccurred,)h(then)h(an)g
-(attempt)g(will)f(b)r(e)h(made)g(to)f(store)g(the)h(FITS)f(header)227
-5035 y(cards)22 b(bac)n(k)h(in)g(their)g(original)f(lo)r(cations.)34
-b(Otherwise,)23 b(the)h(new)f(cards)f(will)h(b)r(e)h(inserted)f(follo)n
-(wing)f(an)n(y)g(other)227 5134 y(FITS-W)n(CS)30 b(related)g(header)f
-(cards)f(presen)n(t)i(or,)f(failing)h(that,)h(in)f(fron)n(t)f(of)h(the)
-g(curren)n(t)f(card)g(\(as)h(giv)n(en)f(b)n(y)227 5234
-y(the)f(Card)f(attribute\).)227 5354 y(If)32 b(an)f(attempt)g(to)g
-(simplify)h(a)e(F)-7 b(rameSet)31 b(to)g(conform)g(to)f(the)i(FITS-W)n
-(CS)f(mo)r(del)g(fails)g(\(or)g(if)g(the)h(Ob)5 b(ject)227
-5453 y(supplied)29 b(is)f(not)h(a)f(F)-7 b(rameSet\),)28
-b(then)h(no)f(data)g(will)h(b)r(e)g(written)f(to)h(the)f(FitsChan)h
-(and)f(AST)p Ft(_)p Fk(WRITE)g(will)227 5553 y(return)f(zero.)36
-b(No)28 b(error)d(will)j(result.)-2 5693 y Fc(The)k(FITS-IRAF)h(Enco)s
-(ding)n(:)p eop end
-%%Page: 403 413
-TeXDict begin 403 412 bop 3643 52 a FG(403)227 351 y
-Fk(The)36 b(FITS-IRAF)g(enco)r(ding)f(can,)j(for)d(most)g(purp)r(oses,)
-i(b)r(e)f(considered)f(as)g(a)g(subset)h(of)f(the)h(FITS-W)n(CS)227
-451 y(enco)r(ding)24 b(\(ab)r(o)n(v)n(e\),)g(although)g(it)h(di\013ers)
-f(in)g(the)h(details)f(of)g(the)g(FITS)h(k)n(eyw)n(ords)d(used.)36
-b(It)24 b(is)h(used)f(in)g(exactly)227 551 y(the)k(same)f(w)n(a)n(y)g
-(and)g(has)g(the)h(same)f(restrictions,)g(but)h(with)g(the)g(addition)f
-(of)h(the)g(follo)n(wing:)340 804 y Fj(\017)45 b Fk(The)33
-b(only)g(celestial)f(co)r(ordinate)g(systems)g(that)h(ma)n(y)g(b)r(e)g
-(represen)n(ted)f(are)f(equatorial,)i(galactic)f(and)427
-904 y(ecliptic,)340 1032 y Fj(\017)45 b Fk(Sky)34 b(pro)5
-b(jections)32 b(can)i(b)r(e)g(represen)n(ted)e(only)i(if)g(an)n(y)f
-(asso)r(ciated)f(pro)5 b(jection)33 b(parameters)f(are)h(set)h(to)427
-1132 y(their)28 b(default)g(v)-5 b(alues.)340 1260 y
-Fj(\017)45 b Fk(Secondary)30 b(axis)h(descriptions)g(are)g(not)g(supp)r
-(orted,)i(so)d(when)i(writing)f(a)h(F)-7 b(rameSet)31
-b(to)g(a)g(FitsChan,)427 1359 y(only)c(information)g(from)h(the)g(base)
-f(and)g(curren)n(t)g(F)-7 b(rames)27 b(will)g(b)r(e)h(stored.)227
-1517 y(Note)36 b(that)g(this)f(enco)r(ding)h(is)f(pro)n(vided)f(mainly)
-i(as)f(an)g(in)n(terim)g(measure)g(to)g(pro)n(vide)f(a)h(more)g(stable)
-g(al-)227 1616 y(ternativ)n(e)e(to)g(the)g(FITS-W)n(CS)h(enco)r(ding)e
-(un)n(til)i(the)g(FITS)f(standard)f(for)h(enco)r(ding)g(W)n(CS)g
-(information)g(is)227 1716 y(\014nalised.)49 b(The)31
-b(name)h Ft(")p Fk(FITS-IRAF)p Ft(")f Fk(indicates)g(the)h(general)e(k)
-n(eyw)n(ord)g(con)n(v)n(en)n(tions)g(used)h(and)g(do)r(es)h(not)227
-1815 y(imply)h(that)g(this)g(enco)r(ding)f(will)g(necessarily)f(supp)r
-(ort)h(all)h(features)e(of)i(the)g(W)n(CS)f(sc)n(heme)g(used)h(b)n(y)f
-(IRAF)227 1915 y(soft)n(w)n(are.)40 b(Nev)n(ertheless,)29
-b(an)g(attempt)h(has)f(b)r(een)g(made)g(to)g(supp)r(ort)g(a)g(few)h
-(suc)n(h)f(features)f(where)h(they)h(are)227 2015 y(kno)n(wn)d(to)h(b)r
-(e)g(used)f(b)n(y)h(imp)r(ortan)n(t)f(sources)f(of)h(data.)227
-2137 y(When)g(writing)f(a)f(F)-7 b(rameSet)26 b(using)g(the)g
-(FITS-IRAF)h(enco)r(ding,)f(axis)f(rotations)g(are)g(sp)r(eci\014ed)i
-(b)n(y)e(a)h(matrix)227 2236 y(of)j(FITS)h(k)n(eyw)n(ords)d(of)i(the)h
-(form)f Ft(")p Fk(CDi)p Ft(_)p Fk(j)p Ft(")p Fk(,)g(where)g
-Ft(")p Fk(i)p Ft(")f Fk(and)h Ft(")p Fk(j)p Ft(")g Fk(are)f(single)h
-(digits.)42 b(The)29 b(alternativ)n(e)f(form)227 2336
-y Ft(")p Fk(CDiiijjj)p Ft(")p Fk(,)h(whic)n(h)e(is)h(also)e(in)i(use,)g
-(is)f(recognised)f(when)i(reading)e(an)i(Ob)5 b(ject,)27
-b(but)h(is)g(nev)n(er)f(written.)227 2458 y(In)36 b(addition,)h(the)f
-(exp)r(erimen)n(tal)f(IRAF)h Ft(")p Fk(ZPX)p Ft(")e Fk(and)h
-Ft(")p Fk(TNX)p Ft(")g Fk(sky)g(pro)5 b(jections)34 b(will)i(b)r(e)f
-(accepted)g(when)227 2558 y(reading,)25 b(but)i(will)e(nev)n(er)g(b)r
-(e)h(written)g(\(the)h(corresp)r(onding)c(FITS)j Ft(")p
-Fk(ZPN)p Ft(")f Fk(or)g Ft(")p Fk(distorted)g(T)-7 b(AN)p
-Ft(")26 b Fk(pro)5 b(jection)227 2658 y(b)r(eing)29 b(used)g
-(instead\).)42 b(Ho)n(w)n(ev)n(er,)27 b(there)i(are)f(restrictions)f
-(on)i(the)h(use)e(of)h(these)g(exp)r(erimen)n(tal)g(pro)5
-b(jections.)227 2757 y(F)-7 b(or)34 b Ft(")p Fk(ZPX)p
-Ft(")p Fk(,)g(longitude)f(and)h(latitude)g(correction)e(surfaces)h
-(\(app)r(earing)g(as)g Ft(")p Fk(lngcor)p Ft(")f Fk(or)h
-Ft(")p Fk(latcor)p Ft(")f Fk(terms)227 2857 y(in)k(the)g(IRAF-sp)r
-(eci\014c)f Ft(")p Fk(W)-9 b(A)i(T)p Ft(")35 b Fk(k)n(eyw)n(ords\))f
-(are)g(not)i(supp)r(orted.)60 b(F)-7 b(or)34 b Ft(")p
-Fk(TNX)p Ft(")h Fk(pro)5 b(jections,)36 b(only)f(cubic)227
-2956 y(surfaces)g(enco)r(ded)h(as)f(simple)h(p)r(olynomials)f(with)h
-Ft(")p Fk(half)g(cross-terms)p Ft(")d Fk(are)i(supp)r(orted.)61
-b(If)37 b(an)e(un-usable)227 3056 y Ft(")p Fk(TNX)p Ft(")23
-b Fk(or)f Ft(")p Fk(ZPX)p Ft(")g Fk(pro)5 b(jection)22
-b(is)h(encoun)n(tered)f(while)h(reading)f(from)g(a)h(FitsChan,)h(a)f
-(simpler)f(form)h(of)g(T)-7 b(AN)227 3156 y(or)22 b(ZPN)g(pro)5
-b(jection)21 b(is)i(used)f(whic)n(h)h(ignores)e(the)i(unsupp)r(orted)f
-(features)g(and)g(ma)n(y)g(therefore)g(b)r(e)h(inaccurate.)227
-3255 y(If)j(this)f(happ)r(ens,)g(a)g(w)n(arning)f(message)f(is)i(added)
-g(to)g(the)g(con)n(ten)n(ts)f(of)h(the)g(FitsChan)g(as)g(a)f(set)h(of)g
-(cards)f(using)227 3355 y(the)k(k)n(eyw)n(ord)e Ft(")p
-Fk(ASTW)-9 b(ARN)p Ft(")p Fk(.)227 3477 y(Y)i(ou)32 b(should)f(not)g
-(normally)g(attempt)h(to)f(mix)h(the)g(foreign)e(FITS)i(enco)r(dings)f
-(within)h(the)g(same)e(FitsChan,)227 3577 y(since)e(there)f(is)h(a)f
-(risk)g(that)g(k)n(eyw)n(ord)f(clashes)h(ma)n(y)g(o)r(ccur.)-2
-3721 y Fc(The)32 b(FITS-PC)h(Enco)s(ding)n(:)227 3867
-y Fk(The)38 b(FITS-PC)e(enco)r(ding)h(can,)j(for)c(most)h(purp)r(oses,)
-i(b)r(e)f(considered)e(as)h(equiv)-5 b(alen)n(t)37 b(to)g(the)g(FITS-W)
-n(CS)227 3967 y(enco)r(ding)24 b(\(ab)r(o)n(v)n(e\),)g(although)g(it)h
-(di\013ers)f(in)g(the)h(details)f(of)g(the)g(FITS)h(k)n(eyw)n(ords)d
-(used.)36 b(It)24 b(is)h(used)f(in)g(exactly)227 4067
-y(the)k(same)f(w)n(a)n(y)g(and)g(has)g(the)h(same)f(restrictions.)-2
-4211 y Fc(The)32 b(FITS-AIPS)i(Enco)s(ding)n(:)227 4358
-y Fk(The)e(FITS-AIPS)f(enco)r(ding)g(can,)h(for)f(most)g(purp)r(oses,)h
-(b)r(e)g(considered)e(as)h(equiv)-5 b(alen)n(t)31 b(to)h(the)f(FITS-W)n
-(CS)227 4457 y(enco)r(ding)24 b(\(ab)r(o)n(v)n(e\),)g(although)g(it)h
-(di\013ers)f(in)g(the)h(details)f(of)g(the)g(FITS)h(k)n(eyw)n(ords)d
-(used.)36 b(It)24 b(is)h(used)f(in)g(exactly)227 4557
-y(the)k(same)f(w)n(a)n(y)g(and)g(has)g(the)h(same)f(restrictions,)g
-(but)h(with)g(the)g(addition)f(of)h(the)g(follo)n(wing:)340
-4811 y Fj(\017)45 b Fk(The)33 b(only)g(celestial)f(co)r(ordinate)g
-(systems)g(that)h(ma)n(y)g(b)r(e)g(represen)n(ted)f(are)f(equatorial,)i
-(galactic)f(and)427 4910 y(ecliptic,)340 5038 y Fj(\017)45
-b Fk(Sp)r(ectral)33 b(axes)g(can)g(only)g(b)r(e)h(represen)n(ted)e(if)i
-(they)f(represen)n(t)f(frequency)-7 b(,)35 b(radio)d(v)n(elo)r(cit)n(y)
-h(or)f(optical)427 5138 y(v)n(elo)r(cit)n(y)-7 b(,)36
-b(and)f(are)e(linearly)h(sampled)h(in)g(frequency)-7
-b(.)58 b(In)35 b(addition,)h(the)g(standard)d(of)i(rest)f(m)n(ust)h(b)r
-(e)427 5238 y(LSRK,)28 b(LSRD,)g(barycen)n(tric)e(or)h(geo)r(cen)n
-(tric.)340 5366 y Fj(\017)45 b Fk(Sky)34 b(pro)5 b(jections)32
-b(can)i(b)r(e)g(represen)n(ted)e(only)i(if)g(an)n(y)f(asso)r(ciated)f
-(pro)5 b(jection)33 b(parameters)f(are)h(set)h(to)427
-5465 y(their)28 b(default)g(v)-5 b(alues.)340 5593 y
-Fj(\017)45 b Fk(The)25 b(AIT,)g(SFL)g(and)f(MER)g(pro)5
-b(jections)23 b(can)i(only)f(b)r(e)h(written)f(if)h(the)g(CR)-9
-b(V)g(AL)25 b(k)n(eyw)n(ords)d(are)i(zero)f(for)427 5693
-y(b)r(oth)28 b(longitude)g(and)f(latitude)h(axes.)p eop
-end
-%%Page: 404 414
-TeXDict begin 404 413 bop 0 52 a FG(404)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)340 351
-y Fj(\017)45 b Fk(Secondary)30 b(axis)h(descriptions)g(are)g(not)g
-(supp)r(orted,)i(so)d(when)i(writing)f(a)h(F)-7 b(rameSet)31
-b(to)g(a)g(FitsChan,)427 451 y(only)c(information)g(from)h(the)g(base)f
-(and)g(curren)n(t)g(F)-7 b(rames)27 b(will)g(b)r(e)h(stored.)340
-585 y Fj(\017)45 b Fk(If)25 b(there)f(are)f(more)g(than)i(2)f(axes)f
-(in)h(the)h(base)e(and)h(curren)n(t)g(F)-7 b(rames,)24
-b(an)n(y)f(rotation)g(m)n(ust)i(b)r(e)f(restricted)427
-684 y(to)k(the)g(celestial)f(plane,)g(and)h(m)n(ust)f(in)n(v)n(olv)n(e)
-f(no)i(shear.)-2 848 y Fc(The)k(FITS-AIPS)p Fk(++)h Fc(Enco)s(ding)n(:)
-227 994 y Fk(The)d(FITS-AIPS++)e(enco)r(ding)h(is)g(based)f(on)h(the)h
-(FITS-AIPS)f(enco)r(ding,)g(but)h(includes)f(some)g(features)g(of)227
-1094 y(the)23 b(FITS-IRAF)g(and)f(FITS-PC)g(enco)r(dings.)35
-b(Sp)r(eci\014cally)-7 b(,)23 b(an)n(y)f(celestial)g(pro)5
-b(jections)21 b(supp)r(orted)h(b)n(y)h(FITS-)227 1193
-y(PC)h(ma)n(y)f(b)r(e)h(used,)h(including)f(those)g(whic)n(h)f(require)
-g(parameterisation,)g(and)h(the)g(axis)f(rotation)g(and)h(scaling)227
-1293 y(ma)n(y)31 b(b)r(e)i(sp)r(eci\014ed)f(using)f(CDi)p
-Ft(_)p Fk(j)i(k)n(eyw)n(ords.)47 b(When)33 b(writing)e(a)h(FITS)g
-(header,)g(rotation)f(will)h(b)r(e)g(sp)r(eci\014ed)227
-1392 y(using)c(CR)n(OT)-7 b(A/CDEL)g(T)26 b(k)n(eyw)n(ords)g(if)i(p)r
-(ossible,)f(otherwise)g(CDi)p Ft(_)p Fk(j)h(k)n(eyw)n(ords)d(will)j(b)r
-(e)g(used)g(instead.)-2 1544 y Fc(The)k(FITS-CLASS)h(Enco)s(ding)n(:)
-227 1690 y Fk(The)24 b(FITS-CLASS)g(enco)r(ding)f(uses)h(the)g(con)n(v)
-n(en)n(tions)e(of)i(the)g(CLASS)g(pro)5 b(ject.)35 b(These)23
-b(are)g(describ)r(ed)g(in)h(the)227 1789 y(section)j
-Ft(")p Fk(Dev)n(elop)r(er)g(Man)n(ual)p Ft(")p Fk(/)p
-Ft(")p Fk(CLASS)f(FITS)i(F)-7 b(ormat)p Ft(")26 b Fk(con)n(tained)h(in)
-h(the)g(CLASS)g(do)r(cumen)n(tation)f(at:)227 1915 y(h)n
-(ttp://www.iram.fr/IRAMFR/GILD)n(AS/do)r(c/h)n(tml/class-h)n
-(tml/class.h)n(tml.)227 2040 y(This)h(enco)r(ding)f(is)h(similar)e(to)i
-(FITS-AIPS)f(with)h(the)g(follo)n(wing)f(restrictions:)340
-2304 y Fj(\017)45 b Fk(When)23 b(a)e(Sp)r(ecF)-7 b(rame)22
-b(is)f(created)g(b)n(y)h(reading)f(a)g(FITS-CLASS)h(header,)g(the)h
-(attributes)e(describing)g(the)427 2403 y(observ)n(er's)f(p)r(osition)i
-(\(ObsLat,)h(ObsLon)e(and)h(ObsAlt\))h(are)e(left)i(unset)f(b)r(ecause)
-g(the)g(CLASS)h(enco)r(ding)427 2503 y(do)r(es)32 b(not)h(sp)r(ecify)g
-(these)f(v)-5 b(alues.)52 b(Con)n(v)n(ersions)30 b(to)i(or)g(from)g
-(the)h(top)r(o)r(cen)n(tric)f(standard)g(of)g(rest)g(will)427
-2603 y(therefore)21 b(b)r(e)i(inaccurate)e(\(t)n(ypically)g(b)n(y)h(up)
-g(to)g(ab)r(out)g(0.5)f(km/s\))h(unless)f(suitable)h(v)-5
-b(alues)22 b(are)f(assigned)427 2702 y(to)28 b(these)f(attributes)h
-(after)f(the)h(F)-7 b(rameSet)27 b(has)h(b)r(een)g(created.)340
-2836 y Fj(\017)45 b Fk(When)24 b(writing)e(a)h(F)-7 b(rameSet)23
-b(to)f(a)h(FITS-CLASS)g(header,)g(the)h(curren)n(t)e(F)-7
-b(rame)22 b(in)h(the)h(F)-7 b(rameSet)22 b(m)n(ust)427
-2936 y(ha)n(v)n(e)f(at)g(least)h(3)f(W)n(CS)h(axes,)g(of)g(whic)n(h)f
-(one)h(m)n(ust)g(b)r(e)g(a)f(linear)g(sp)r(ectral)g(axis.)34
-b(The)22 b(sp)r(ectral)f(axis)g(in)h(the)427 3035 y(created)29
-b(header)g(will)h(alw)n(a)n(ys)e(describ)r(e)h(frequency)-7
-b(.)43 b(If)30 b(the)g(sp)r(ectral)f(axis)g(in)h(the)g(supplied)g(F)-7
-b(rameSet)427 3135 y(refers)27 b(to)g(some)g(other)g(system)h(\(e.g.)36
-b(radio)27 b(v)n(elo)r(cit)n(y)-7 b(,)27 b(etc\),)h(then)g(it)g(will)g
-(b)r(e)g(con)n(v)n(erted)e(to)h(frequency)-7 b(.)340
-3268 y Fj(\017)45 b Fk(There)23 b(m)n(ust)g(b)r(e)g(a)f(pair)g(of)h
-(celestial)f(axes)g(-)h(either)g(\(RA,Dec\))h(or)e(\(GLON,GLA)-7
-b(T\).)23 b(RA)h(and)e(Dec)h(m)n(ust)427 3368 y(b)r(e)28
-b(either)g(FK4/B1950)c(or)j(FK5/J2000.)340 3502 y Fj(\017)45
-b Fk(A)35 b(limited)g(range)e(of)h(pro)5 b(jection)34
-b(co)r(des)g(\(T)-7 b(AN,)35 b(AR)n(C,)f(STG,)h(AIT,)g(SFL,)f(SIN\))h
-(can)f(b)r(e)h(used.)57 b(F)-7 b(or)427 3601 y(AIT)30
-b(and)f(SFL,)g(the)h(reference)e(p)r(oin)n(t)i(m)n(ust)f(b)r(e)h(at)f
-(the)g(origin)f(of)h(longitude)g(and)g(latitude.)43 b(F)-7
-b(or)28 b(SIN,)427 3701 y(the)g(asso)r(ciated)f(pro)5
-b(jection)26 b(parameters)g(m)n(ust)i(b)r(oth)g(b)r(e)g(zero.)340
-3835 y Fj(\017)45 b Fk(No)28 b(rotation)f(of)i(the)f(celestial)g(axes)f
-(is)h(allo)n(w)n(ed,)g(unless)g(the)g(spatial)g(axes)f(are)g
-(degenerate)g(\(i.e.)39 b(co)n(v)n(er)427 3934 y(only)27
-b(a)h(single)f(pixel\).)340 4068 y Fj(\017)45 b Fk(The)34
-b(frequency)g(axis)f(in)h(the)h(created)e(header)g(will)h(alw)n(a)n(ys)
-e(describ)r(e)i(frequency)g(in)g(the)g(source)f(rest)427
-4168 y(frame.)53 b(If)34 b(the)f(supplied)h(F)-7 b(rameSet)33
-b(uses)f(some)h(other)f(standard)h(of)g(rest)f(then)i(suitable)f(con)n
-(v)n(ersion)427 4267 y(will)28 b(b)r(e)g(applied.)340
-4401 y Fj(\017)45 b Fk(The)35 b(source)e(v)n(elo)r(cit)n(y)g(m)n(ust)i
-(b)r(e)f(de\014ned.)58 b(In)35 b(other)e(w)n(ords,)i(the)g(Sp)r(ecF)-7
-b(rame)34 b(attributes)g(SourceV)-7 b(el)427 4501 y(and)28
-b(SourceVRF)f(m)n(ust)h(ha)n(v)n(e)e(b)r(een)i(assigned)f(v)-5
-b(alues.)340 4634 y Fj(\017)45 b Fk(The)40 b(frequency)g(axis)f(in)i(a)
-e(FITS-CLASS)i(header)e(do)r(es)h(not)g(represen)n(t)f(absolute)g
-(frequency)-7 b(,)43 b(but)427 4734 y(instead)28 b(represen)n(ts)e
-(o\013sets)h(from)g(the)h(rest)f(frequency)h(in)f(the)h(standard)f(of)h
-(rest)f(of)g(the)h(source.)227 4898 y(When)23 b(writing)f(a)g(F)-7
-b(rameSet)22 b(out)g(using)g(FITS-CLASS)h(enco)r(ding,)g(the)f(curren)n
-(t)g(F)-7 b(rame)22 b(ma)n(y)f(b)r(e)i(temp)r(orarily)227
-4997 y(mo)r(di\014ed)31 b(if)f(this)g(will)g(allo)n(w)f(the)h(header)f
-(to)h(b)r(e)g(pro)r(duced.)44 b(If)30 b(this)g(is)g(done,)g(the)h(asso)
-r(ciated)d(pixel-)p Fm(>)p Fk(W)n(CS)227 5097 y(Mapping)34
-b(will)g(also)f(b)r(e)i(mo)r(di\014ed)f(to)g(tak)n(e)g(accoun)n(t)f(of)
-h(the)h(c)n(hanges)d(to)i(the)h(F)-7 b(rame.)56 b(The)34
-b(mo)r(di\014cations)227 5196 y(p)r(erformed)19 b(include)h
-(re-ordering)d(axes)h(\(W)n(CS)i(axes,)g(not)f(pixel)h(axes\),)g(c)n
-(hanging)e(sp)r(ectral)h(co)r(ordinate)f(system)227 5296
-y(and)24 b(standard)f(of)h(rest,)g(c)n(hanging)f(the)h(celestial)f(co)r
-(ordinate)g(system)h(and)f(reference)g(equino)n(x,)h(and)g(c)n(hanging)
-227 5396 y(axis)j(units.)-2 5547 y Fc(The)32 b(NA)-8
-b(TIVE)33 b(Enco)s(ding)n(:)227 5693 y Fk(The)27 b(NA)-7
-b(TIVE)26 b(enco)r(ding)h(ma)n(y)e(b)r(e)i(used)f(to)h(store)e(a)h
-(description)g(of)g(an)n(y)g(class)f(of)i(AST)f(Ob)5
-b(ject)27 b(in)f(the)h(form)p eop end
-%%Page: 405 415
-TeXDict begin 405 414 bop 3643 52 a FG(405)227 351 y
-Fk(of)29 b(FITS)g(header)f(cards,)g(and)h(\(for)g(most)f(practical)g
-(purp)r(oses\))g(an)n(y)g(n)n(um)n(b)r(er)h(of)g(these)g(Ob)5
-b(ject)28 b(descriptions)227 451 y(ma)n(y)i(b)r(e)g(stored)g(within)h
-(a)f(single)f(set)i(of)f(FITS)g(cards.)44 b(If)31 b(m)n(ultiple)g(Ob)5
-b(ject)30 b(descriptions)f(are)g(stored,)h(they)227 551
-y(are)35 b(written)g(and)g(read)g(sequen)n(tially)-7
-b(.)59 b(The)35 b(NA)-7 b(TIVE)36 b(enco)r(ding)f(mak)n(es)f(use)h(of)h
-(unique)f(FITS)h(k)n(eyw)n(ords)227 650 y(whic)n(h)29
-b(are)e(designed)h(not)g(to)h(clash)e(with)i(k)n(eyw)n(ords)e(that)h
-(ha)n(v)n(e)f(already)g(b)r(een)i(used)g(for)e(other)h(purp)r(oses)g
-(\(if)227 750 y(a)f(p)r(oten)n(tial)h(clash)f(is)g(detected,)i(an)e
-(alternativ)n(e)f(k)n(eyw)n(ord)g(is)h(constructed)h(to)f(a)n(v)n(oid)f
-(the)i(clash\).)227 877 y(When)23 b(reading)e(a)g(NA)-7
-b(TIVE)23 b(enco)r(ded)f(ob)5 b(ject)21 b(from)h(a)g(FitsChan)g
-(\(using)g(AST)p Ft(_)p Fk(READ\),)g(FITS)h(header)e(cards)227
-977 y(are)26 b(read,)h(starting)f(at)h(the)g(curren)n(t)f(card)g(\(as)h
-(determined)g(b)n(y)g(the)g(Card)f(attribute\),)i(un)n(til)f(the)h
-(start)e(of)h(the)227 1076 y(next)e(Ob)5 b(ject)25 b(description)f(is)g
-(found.)37 b(This)24 b(description)g(is)h(then)g(read)f(and)h(con)n(v)n
-(erted)e(in)n(to)h(an)h(AST)g(Ob)5 b(ject,)227 1176 y(for)28
-b(whic)n(h)h(a)f(p)r(oin)n(ter)g(is)h(returned.)39 b(Suc)n(h)28
-b(a)h(read)e(is)i(alw)n(a)n(ys)d(destructiv)n(e)i(and)h(causes)e(all)i
-(the)g(FITS)f(header)227 1276 y(cards)c(in)n(v)n(olv)n(ed)g(in)h(the)g
-(Ob)5 b(ject)25 b(description)g(to)g(b)r(e)g(remo)n(v)n(ed)e(from)i
-(the)h(FitsChan,)f(whic)n(h)g(is)g(left)h(p)r(ositioned)227
-1375 y(at)i(the)g(follo)n(wing)e(card.)227 1503 y(The)k(Ob)5
-b(ject)29 b(returned)g(ma)n(y)f(b)r(e)i(of)f(an)n(y)g(class,)f(dep)r
-(ending)i(on)f(the)h(description)e(that)i(w)n(as)e(read,)h(and)g(other)
-227 1602 y(AST)38 b(routines)f(ma)n(y)f(b)r(e)i(used)f(to)g(v)-5
-b(alidate)37 b(it)h(\(for)f(example,)j(b)n(y)d(examining)f(its)i(Class)
-e(or)h(ID)g(attribute)227 1702 y(using)32 b(AST)p Ft(_)p
-Fk(GETC\).)g(If)g(further)g(NA)-7 b(TIVE)32 b(enco)r(ded)g(Ob)5
-b(ject)32 b(descriptions)f(exist)h(in)g(the)h(FitsChan,)g(sub-)227
-1801 y(sequen)n(t)c(calls)f(to)h(AST)p Ft(_)p Fk(READ)g(will)g(return)f
-(the)h(Ob)5 b(jects)29 b(they)g(describ)r(e)f(in)h(sequence)f(\(and)h
-(destro)n(y)f(their)227 1901 y(descriptions\))f(un)n(til)h(no)g(more)e
-(remain)h(b)r(et)n(w)n(een)h(the)g(curren)n(t)f(card)f(and)i(the)g
-Ft(")p Fk(end-of-\014le)p Ft(")p Fk(.)227 2028 y(When)20
-b(AST)p Ft(_)p Fk(WRITE)g(is)f(used)h(to)f(write)g(an)g(Ob)5
-b(ject)20 b(using)f(NA)-7 b(TIVE)20 b(enco)r(ding,)g(a)g(description)e
-(of)i(the)g(Ob)5 b(ject)227 2128 y(is)32 b(inserted)f(immediately)h(b)r
-(efore)f(the)h(curren)n(t)f(card)f(\(as)i(determined)f(b)n(y)h(the)g
-(Card)f(attribute\).)49 b(Multiple)227 2228 y(Ob)5 b(ject)29
-b(descriptions)g(ma)n(y)f(b)r(e)i(written)f(in)h(this)f(w)n(a)n(y)f
-(and)h(are)g(stored)f(separately)g(\(and)h(sequen)n(tially)f(if)i(the)
-227 2327 y(Card)f(attribute)g(is)g(not)g(mo)r(di\014ed)h(b)r(et)n(w)n
-(een)f(the)g(writes\).)42 b(A)29 b(write)g(op)r(eration)f(using)h(the)g
-(NA)-7 b(TIVE)30 b(enco)r(d-)227 2427 y(ing)35 b(do)r(es)f(not)g(o)n(v)
-n(er-write)e(previously)i(written)g(Ob)5 b(ject)35 b(descriptions.)57
-b(Note,)36 b(ho)n(w)n(ev)n(er,)e(that)h(subsequen)n(t)227
-2527 y(b)r(eha)n(viour)29 b(is)h(unde\014ned)g(if)g(an)g(Ob)5
-b(ject)29 b(description)h(is)f(written)h(inside)g(a)g
-(previously-written)e(description,)227 2626 y(so)f(this)h(should)f(b)r
-(e)h(a)n(v)n(oided.)227 2753 y(When)f(an)e(Ob)5 b(ject)26
-b(is)g(written)g(to)f(a)h(FitsChan)g(using)f(NA)-7 b(TIVE)27
-b(enco)r(ding,)f(AST)p Ft(_)p Fk(WRITE)f(should)h(\(barring)227
-2853 y(errors\))g(alw)n(a)n(ys)g(transfer)g(data)h(and)h(return)f(a)g
-(v)-5 b(alue)28 b(of)f(1.)p 0 3058 3780 12 v 0 3190 a
-FA(Ep)t(o)t(c)l(h)981 b Fd(Ep)s(o)s(c)m(h)39 b(of)f(observ)-7
-b(ation)980 b FA(Ep)t(o)t(c)l(h)0 3384 y Fc(Description:)44
-b Fk(This)29 b(attribute)g(is)f(used)h(to)f(qualify)h(the)g(co)r
-(ordinate)e(systems)h(describ)r(ed)g(b)n(y)h(a)f(F)-7
-b(rame,)28 b(b)n(y)g(giving)227 3484 y(the)g(momen)n(t)f(in)h(time)f
-(when)h(the)g(co)r(ordinates)d(are)i(kno)n(wn)f(to)h(b)r(e)h(correct.)
-35 b(Often,)28 b(this)g(will)f(b)r(e)h(the)f(date)h(of)227
-3583 y(observ)-5 b(ation,)26 b(and)h(is)g(imp)r(ortan)n(t)f(in)h(cases)
-f(where)g(co)r(ordinates)g(systems)g(mo)n(v)n(e)g(with)i(resp)r(ect)e
-(to)h(eac)n(h)f(other)227 3683 y(o)n(v)n(er)g(the)i(course)e(of)i
-(time.)227 3810 y(The)23 b(Ep)r(o)r(c)n(h)f(attribute)h(is)f(stored)g
-(as)g(a)g(Mo)r(di\014ed)h(Julian)g(Date,)g(but)h(when)f(setting)f(its)h
-(v)-5 b(alue)22 b(it)h(ma)n(y)f(b)r(e)h(giv)n(en)227
-3910 y(in)32 b(a)e(v)-5 b(ariet)n(y)30 b(of)h(formats.)46
-b(See)31 b(the)h Ft(")p Fk(Input)f(F)-7 b(ormats)p Ft(")30
-b Fk(section)g(\(b)r(elo)n(w\))h(for)g(details.)47 b(Strictly)-7
-b(,)32 b(the)f(Ep)r(o)r(c)n(h)227 4009 y(v)-5 b(alue)25
-b(should)g(b)r(e)g(supplied)g(in)g(the)g(TDB)g(timescale,)g(but)h(for)e
-(some)g(purp)r(oses)g(\(for)h(instance,)g(for)f(con)n(v)n(erting)227
-4109 y(sky)36 b(p)r(ositions)f(b)r(et)n(w)n(een)h(di\013eren)n(t)g(t)n
-(yp)r(es)f(of)h(equatorial)e(system\))i(the)h(timescale)e(is)h(not)g
-(signi\014can)n(t,)h(and)227 4209 y(UTC)28 b(ma)n(y)f(b)r(e)h(used.)0
-4364 y Fc(T)m(yp)s(e:)227 4463 y Fk(Floating)f(p)r(oin)n(t.)0
-4618 y Fc(Class)k(Applicabilit)m(y:)259 4760 y(F)-8 b(rame)427
-4860 y Fk(All)29 b(F)-7 b(rames)27 b(ha)n(v)n(e)f(this)j(attribute.)38
-b(The)27 b(basic)h(F)-7 b(rame)27 b(class)g(pro)n(vides)g(a)g(default)h
-(of)g(J2000.0)d(\(Julian\))427 4960 y(but)31 b(mak)n(es)f(no)g(use)g
-(of)g(the)h(Ep)r(o)r(c)n(h)f(v)-5 b(alue.)45 b(This)30
-b(is)g(b)r(ecause)g(the)h(F)-7 b(rame)30 b(class)f(do)r(es)h(not)h
-(distinguish)427 5059 y(b)r(et)n(w)n(een)d(di\013eren)n(t)g(Cartesian)e
-(co)r(ordinate)g(systems)h(\(see)h(the)g(System)g(attribute\).)259
-5195 y Fc(CmpF)-8 b(rame)427 5295 y Fk(The)32 b(default)h(Ep)r(o)r(c)n
-(h)e(v)-5 b(alue)32 b(for)f(a)h(CmpF)-7 b(rame)31 b(is)h(selected)g(as)
-f(follo)n(ws;)i(if)f(the)h(Ep)r(o)r(c)n(h)e(attribute)h(has)427
-5394 y(b)r(een)26 b(set)g(in)g(the)g(\014rst)f(comp)r(onen)n(t)g(F)-7
-b(rame)26 b(then)g(the)g(Ep)r(o)r(c)n(h)f(v)-5 b(alue)25
-b(from)g(the)h(\014rst)g(comp)r(onen)n(t)f(F)-7 b(rame)427
-5494 y(is)36 b(used)f(as)g(the)g(default)h(for)f(the)h(CmpF)-7
-b(rame.)59 b(Otherwise,)37 b(if)f(the)g(Ep)r(o)r(c)n(h)e(attribute)i
-(has)f(b)r(een)h(set)427 5593 y(in)29 b(the)h(second)e(comp)r(onen)n(t)
-h(F)-7 b(rame)28 b(then)i(the)f(Ep)r(o)r(c)n(h)g(v)-5
-b(alue)28 b(from)h(the)g(second)g(comp)r(onen)n(t)f(F)-7
-b(rame)29 b(is)427 5693 y(used)35 b(as)f(the)h(default)g(for)f(the)h
-(CmpF)-7 b(rame.)57 b(Otherwise,)36 b(the)f(default)g(Ep)r(o)r(c)n(h)f
-(v)-5 b(alue)35 b(from)f(the)h(\014rst)p eop end
-%%Page: 406 416
-TeXDict begin 406 415 bop 0 52 a FG(406)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)427 351
-y Fk(comp)r(onen)n(t)d(F)-7 b(rame)28 b(is)h(used)f(as)g(the)h(default)
-f(for)g(the)h(CmpF)-7 b(rame.)39 b(When)29 b(the)g(Ep)r(o)r(c)n(h)f
-(attribute)h(of)f(a)427 451 y(CmpF)-7 b(rame)28 b(is)f(set)h(or)e
-(cleared,)h(it)h(is)g(also)e(set)i(or)e(cleared)h(in)h(the)g(t)n(w)n(o)
-f(comp)r(onen)n(t)g(F)-7 b(rames.)259 591 y Fc(F)f(rameSet)427
-691 y Fk(The)29 b(Ep)r(o)r(c)n(h)f(attribute)g(of)g(a)g(F)-7
-b(rameSet)28 b(is)h(the)f(same)g(as)g(that)g(of)h(its)f(curren)n(t)g(F)
--7 b(rame)27 b(\(as)h(sp)r(eci\014ed)h(b)n(y)427 791
-y(the)f(Curren)n(t)f(attribute\).)259 931 y Fc(SkyF)-8
-b(rame)427 1031 y Fk(The)35 b(co)r(ordinates)e(of)i(sources)e(within)j
-(a)e(SkyF)-7 b(rame)34 b(can)g(c)n(hanged)g(with)h(time)h(for)e(v)-5
-b(arious)33 b(reasons,)427 1130 y(including:)58 b(\(i\))39
-b(c)n(hanging)d(ab)r(erration)h(of)g(ligh)n(t)h(caused)f(b)n(y)h(the)g
-(observ)n(er's)e(v)n(elo)r(cit)n(y)h(\(e.g.)68 b(due)38
-b(to)427 1230 y(the)d(Earth's)e(motion)h(around)f(the)h(Sun\),)j
-(\(ii\))e(c)n(hanging)e(gra)n(vitational)e(de\015ection)j(b)n(y)g(the)h
-(Sun)f(due)427 1330 y(to)40 b(c)n(hanges)e(in)i(the)h(observ)n(er's)c
-(p)r(osition)j(with)g(time,)j(\(iii\))e(\014ctitious)f(motion)f(due)h
-(to)g(rotation)f(of)427 1429 y(non-inertial)c(co)r(ordinate)f(systems)g
-(\(e.g.)60 b(the)36 b(old)f(FK4)f(system\),)k(and)d(\(iv\))h(prop)r(er)
-e(motion)h(of)g(the)427 1529 y(source)25 b(itself)h(\(although)g(this)g
-(last)g(e\013ect)g(is)g(not)g(handled)g(b)n(y)f(the)i(SkyF)-7
-b(rame)25 b(class)g(b)r(ecause)g(it)i(a\013ects)427 1629
-y(individual)h(sources)e(rather)h(than)g(the)h(co)r(ordinate)f(system)g
-(as)g(a)g(whole\).)427 1749 y(The)f(default)g(Ep)r(o)r(c)n(h)f(v)-5
-b(alue)26 b(in)g(a)f(SkyF)-7 b(rame)25 b(is)g(B1950.0)e(\(Besselian\))i
-(for)g(the)h(old)g(FK4-based)e(co)r(ordi-)427 1848 y(nate)k(systems)f
-(\(see)g(the)h(System)g(attribute\))g(and)g(J2000.0)d(\(Julian\))i(for)
-g(all)h(others.)427 1968 y(Care)35 b(m)n(ust)g(b)r(e)h(tak)n(en)f(to)g
-(distinguish)g(the)h(Ep)r(o)r(c)n(h)f(v)-5 b(alue,)37
-b(whic)n(h)e(relates)g(to)g(motion)g(\(or)g(apparen)n(t)427
-2068 y(motion\))h(of)g(the)g(source,)h(from)e(the)h(sup)r(er\014cially)
-f(similar)g(Equino)n(x)g(v)-5 b(alue.)61 b(The)36 b(latter)f(is)h(used)
-g(to)427 2168 y(qualify)c(a)f(co)r(ordinate)g(system)h(whic)n(h)f(is)h
-(itself)g(in)g(motion)g(in)g(a)f(\(notionally\))h(predictable)f(w)n(a)n
-(y)g(as)g(a)427 2267 y(result)d(of)f(b)r(eing)h(referred)e(to)i(a)f
-(slo)n(wly)f(mo)n(ving)h(reference)g(plane)g(\(e.g.)37
-b(the)28 b(equator\).)427 2387 y(See)d(the)h(description)f(of)g(the)g
-(System)h(attribute)f(for)g(details)g(of)g(whic)n(h)g(qualifying)g
-(attributes)g(apply)g(to)427 2487 y(eac)n(h)i(celestial)g(co)r
-(ordinate)g(system.)259 2628 y Fc(TimeF)-8 b(rame)427
-2727 y Fk(A)30 b(TimeF)-7 b(rame)29 b(describ)r(es)g(a)g(general)f
-(time)i(axis)f(and)g(so)g(cannot)g(b)r(e)h(completely)g(c)n
-(haracterised)d(b)n(y)i(a)427 2827 y(single)22 b(Ep)r(o)r(c)n(h)f(v)-5
-b(alue.)35 b(F)-7 b(or)21 b(this)h(reason)e(the)i(TimeF)-7
-b(rame)22 b(class)e(mak)n(es)h(no)h(use)f(of)h(the)g(Ep)r(o)r(c)n(h)f
-(attribute.)427 2926 y(Ho)n(w)n(ev)n(er,)31 b(user)g(co)r(de)g(can)g
-(still)h(mak)n(e)f(use)g(of)h(the)g(attribute)f(if)h(necessary)e(to)h
-(represen)n(t)g(a)g Ft(")p Fk(t)n(ypical)p Ft(")427 3026
-y Fk(time)25 b(spanned)e(b)n(y)h(the)h(TimeF)-7 b(rame.)35
-b(The)24 b(default)g(Ep)r(o)r(c)n(h)g(v)-5 b(alue)24
-b(for)f(a)h(TimeF)-7 b(rame)23 b(will)i(b)r(e)f(the)g(TDB)427
-3126 y(equiv)-5 b(alen)n(t)35 b(of)h(the)f(curren)n(t)g(v)-5
-b(alue)35 b(of)g(the)h(TimeF)-7 b(rame's)35 b(TimeOrigin)f(attribute.)
-60 b(If)36 b(no)f(v)-5 b(alue)35 b(has)427 3225 y(b)r(een)28
-b(set)g(for)f(TimeOrigin,)g(then)h(the)g(default)g(Ep)r(o)r(c)n(h)f(v)
--5 b(alue)27 b(is)h(J2000.0.)-2 3403 y Fc(Input)33 b(F)-8
-b(ormats)n(:)227 3549 y Fk(The)29 b(formats)f(accepted)g(when)g
-(setting)h(an)f(Ep)r(o)r(c)n(h)g(v)-5 b(alue)29 b(are)e(listed)i(b)r
-(elo)n(w.)39 b(They)29 b(are)e(all)h(case-insensitiv)n(e)227
-3648 y(and)g(are)e(generally)g(toleran)n(t)h(of)g(extra)g(white)h
-(space)f(and)g(alternativ)n(e)g(\014eld)h(delimiters:)340
-3932 y Fj(\017)45 b Fk(Besselian)33 b(Ep)r(o)r(c)n(h:)48
-b(Expressed)32 b(in)i(decimal)f(y)n(ears,)h(with)g(or)e(without)i
-(decimal)g(places)f(\()p Ft(")p Fk(B1950)p Ft(")d Fk(or)427
-4032 y Ft(")p Fk(B1976.13)p Ft(")24 b Fk(for)j(example\).)340
-4173 y Fj(\017)45 b Fk(Julian)e(Ep)r(o)r(c)n(h:)67 b(Expressed)42
-b(in)h(decimal)g(y)n(ears,)i(with)e(or)g(without)g(decimal)g(places)f
-(\()p Ft(")p Fk(J2000)p Ft(")e Fk(or)427 4272 y Ft(")p
-Fk(J2100.9)p Ft(")24 b Fk(for)j(example\).)340 4413 y
-Fj(\017)45 b Fk(Y)-7 b(ear:)50 b(Decimal)35 b(y)n(ears,)f(with)h(or)f
-(without)h(decimal)f(places)g(\()p Ft(")p Fk(1996.8)p
-Ft(")d Fk(for)j(example\).)57 b(Suc)n(h)35 b(v)-5 b(alues)427
-4512 y(are)34 b(in)n(terpreted)g(as)g(a)g(Besselian)f(ep)r(o)r(c)n(h)i
-(\(see)f(ab)r(o)n(v)n(e\))f(if)i(less)f(than)h(1984.0)d(and)j(as)e(a)i
-(Julian)f(ep)r(o)r(c)n(h)427 4612 y(otherwise.)340 4752
-y Fj(\017)45 b Fk(Julian)27 b(Date:)38 b(With)28 b(or)f(without)h
-(decimal)f(places)g(\()p Ft(")p Fk(JD)h(2454321.9)p Ft(")23
-b Fk(for)k(example\).)340 4893 y Fj(\017)45 b Fk(Mo)r(di\014ed)28
-b(Julian)f(Date:)37 b(With)29 b(or)e(without)h(decimal)f(places)g(\()p
-Ft(")p Fk(MJD)h(54321.4)p Ft(")c Fk(for)j(example\).)340
-5034 y Fj(\017)45 b Fk(Gregorian)32 b(Calendar)g(Date:)48
-b(With)35 b(the)f(mon)n(th)f(expressed)f(either)i(as)e(an)h(in)n(teger)
-g(or)f(a)h(3-c)n(haracter)427 5133 y(abbreviation,)27
-b(and)g(with)i(optional)e(decimal)g(places)g(to)h(represen)n(t)f(a)g
-(fraction)g(of)h(a)f(da)n(y)g(\()p Ft(")p Fk(1996-10-2)p
-Ft(")427 5233 y Fk(or)f Ft(")p Fk(1996-Oct-2.6)p Ft(")d
-Fk(for)j(example\).)37 b(If)27 b(no)g(fractional)f(part)g(of)h(a)g(da)n
-(y)f(is)h(giv)n(en,)f(the)i(time)f(refers)f(to)h(the)427
-5332 y(start)g(of)h(the)g(da)n(y)f(\(zero)f(hours\).)340
-5473 y Fj(\017)45 b Fk(Gregorian)18 b(Date)h(and)g(Time:)33
-b(An)n(y)20 b(calendar)e(date)h(\(as)g(ab)r(o)n(v)n(e\))f(but)i(with)g
-(a)f(fraction)g(of)g(a)g(da)n(y)g(expressed)427 5573
-y(as)28 b(hours,)h(min)n(utes)g(and)f(seconds)g(\()p
-Ft(")p Fk(1996-Oct-2)e(12:13:56.985)p Ft(")e Fk(for)k(example\).)41
-b(The)29 b(date)f(and)h(time)427 5672 y(can)e(b)r(e)h(separated)f(b)n
-(y)g(a)g(space)g(or)g(b)n(y)g(a)g Ft(")p Fk(T)p Ft(")g
-Fk(\(as)g(used)h(b)n(y)f(ISO8601)f(format\).)p eop end
-%%Page: 407 417
-TeXDict begin 407 416 bop 3643 52 a FG(407)-2 351 y Fc(Output)32
-b(F)-8 b(ormat)n(:)227 497 y Fk(When)29 b(enquiring)f(Ep)r(o)r(c)n(h)g
-(v)-5 b(alues,)28 b(the)h(format)f(used)g(is)h(the)f
-Ft(")p Fk(Y)-7 b(ear)p Ft(")27 b Fk(format)h(describ)r(ed)h(under)f
-Ft(")p Fk(Input)h(F)-7 b(or-)227 597 y(mats)p Ft(")p
-Fk(.)43 b(This)30 b(is)f(a)g(v)-5 b(alue)30 b(in)g(decimal)g(y)n(ears)e
-(whic)n(h)h(will)h(b)r(e)g(a)f(Besselian)g(ep)r(o)r(c)n(h)h(if)g(less)f
-(than)h(1984.0)d(and)j(a)227 697 y(Julian)h(ep)r(o)r(c)n(h)f
-(otherwise.)46 b(By)31 b(omitting)g(an)n(y)f(c)n(haracter)e(pre\014x,)k
-(this)f(format)f(allo)n(ws)f(the)j(Ep)r(o)r(c)n(h)e(v)-5
-b(alue)31 b(to)227 796 y(b)r(e)d(obtained)g(as)f(either)g(a)g(c)n
-(haracter)f(string)h(or)f(a)i(\015oating)e(p)r(oin)n(t)i(v)-5
-b(alue.)p 0 988 3780 12 v 0 1120 a FA(Equino)l(x)708
-b Fd(Ep)s(o)s(c)m(h)39 b(of)f(the)h(mean)f(equino)m(x)706
-b FA(Equino)l(x)0 1301 y Fc(Description:)44 b Fk(This)19
-b(attribute)f(is)h(used)f(to)g(qualify)g(those)g(celestial)g(co)r
-(ordinate)f(systems)h(describ)r(ed)g(b)n(y)h(a)e(SkyF)-7
-b(rame)227 1401 y(whic)n(h)28 b(are)g(notionally)f(based)g(on)h(the)h
-(ecliptic)f(\(the)h(plane)f(of)g(the)h(Earth's)e(orbit)h(around)f(the)h
-(Sun\))h(and/or)227 1500 y(the)f(Earth's)f(equator.)227
-1623 y(Both)e(of)g(these)g(planes)g(are)f(in)h(motion)g(and)g(their)g
-(p)r(ositions)g(are)f(di\016cult)i(to)e(sp)r(ecify)i(precisely)-7
-b(.)35 b(In)25 b(practice,)227 1723 y(therefore,)36 b(a)f(mo)r(del)h
-(ecliptic)f(and/or)f(equator)g(are)g(used)h(instead.)59
-b(These,)37 b(together)d(with)i(the)g(p)r(oin)n(t)f(on)227
-1822 y(the)f(sky)f(that)h(de\014nes)g(the)g(co)r(ordinate)e(origin)h
-(\(the)h(in)n(tersection)f(of)h(the)g(t)n(w)n(o)e(planes)i(termed)f
-(the)h Ft(")p Fk(mean)227 1922 y(equino)n(x)p Ft(")p
-Fk(\))f(mo)n(v)n(e)f(with)i(time)g(according)e(to)h(some)g(mo)r(del)h
-(whic)n(h)g(remo)n(v)n(es)d(the)j(more)f(rapid)g(\015uctuations.)227
-2022 y(The)28 b(SkyF)-7 b(rame)27 b(class)f(supp)r(orts)i(b)r(oth)g
-(the)g(FK4)f(and)g(FK5)g(mo)r(dels.)227 2144 y(The)i(p)r(osition)f(of)h
-(a)f(\014xed)h(source)e(expressed)h(in)h(an)n(y)f(of)g(these)h(co)r
-(ordinate)e(systems)i(will)g(app)r(ear)e(to)i(c)n(hange)227
-2244 y(with)36 b(time)h(due)e(to)h(mo)n(v)n(emen)n(t)f(of)g(the)h(co)r
-(ordinate)f(system)g(itself)h(\(rather)f(than)h(motion)f(of)g(the)h
-(source\).)227 2344 y(Suc)n(h)25 b(co)r(ordinate)f(systems)g(m)n(ust)h
-(therefore)f(b)r(e)h(quali\014ed)f(b)n(y)h(a)f(momen)n(t)h(in)g(time)g
-(\(the)h Ft(")p Fk(ep)r(o)r(c)n(h)e(of)h(the)g(mean)227
-2443 y(equino)n(x)p Ft(")h Fk(or)g Ft(")p Fk(equino)n(x)p
-Ft(")f Fk(for)i(short\))f(whic)n(h)h(allo)n(ws)f(the)h(p)r(osition)g
-(of)g(the)h(mo)r(del)f(co)r(ordinate)f(system)g(on)h(the)227
-2543 y(sky)g(to)h(b)r(e)g(determined.)37 b(This)27 b(is)h(the)g(role)f
-(of)g(the)h(Equino)n(x)e(attribute.)227 2665 y(The)31
-b(Equino)n(x)f(attribute)h(is)f(stored)g(as)g(a)h(Mo)r(di\014ed)g
-(Julian)f(Date,)i(but)g(when)f(setting)f(or)g(getting)h(its)g(v)-5
-b(alue)227 2765 y(y)n(ou)27 b(ma)n(y)g(use)g(the)h(same)f(formats)g(as)
-g(for)g(the)h(Ep)r(o)r(c)n(h)f(attribute)h(\(q.v.\).)227
-2888 y(The)k(default)g(Equino)n(x)f(v)-5 b(alue)31 b(is)h(B1950.0)d
-(\(Besselian\))j(for)f(the)h(old)g(FK4-based)e(co)r(ordinate)g(systems)
-i(\(see)227 2987 y(the)c(System)g(attribute\))g(and)f(J2000.0)e
-(\(Julian\))j(for)f(all)h(others.)0 3133 y Fc(T)m(yp)s(e:)227
-3233 y Fk(Floating)f(p)r(oin)n(t.)0 3378 y Fc(Class)k(Applicabilit)m
-(y:)259 3511 y(SkyF)-8 b(rame)427 3611 y Fk(All)28 b(SkyF)-7
-b(rames)27 b(ha)n(v)n(e)f(this)i(attribute.)0 3769 y
-Fc(Notes:)340 4048 y Fj(\017)45 b Fk(Care)21 b(m)n(ust)h(b)r(e)h(tak)n
-(en)e(to)h(distinguish)g(the)h(Equino)n(x)e(v)-5 b(alue,)23
-b(whic)n(h)f(relates)f(to)h(the)g(de\014nition)h(of)f(a)f(time-)427
-4147 y(dep)r(enden)n(t)31 b(co)r(ordinate)e(system)h(\(based)f(on)h
-(solar)f(system)g(reference)h(planes)f(whic)n(h)h(are)f(in)i(motion\),)
-427 4247 y(from)f(the)h(sup)r(er\014cially)e(similar)h(Ep)r(o)r(c)n(h)g
-(v)-5 b(alue.)44 b(The)31 b(latter)e(is)i(used)f(to)g(qualify)g(co)r
-(ordinate)f(systems)427 4347 y(where)j(the)g(p)r(ositions)f(of)h
-(sources)e(c)n(hange)h(with)h(time)g(\(or)g(app)r(ear)e(to)i(do)g(so\))
-f(for)g(a)h(v)-5 b(ariet)n(y)30 b(of)i(other)427 4446
-y(reasons,)26 b(suc)n(h)h(as)g(ab)r(erration)f(of)i(ligh)n(t)f(caused)g
-(b)n(y)h(the)g(observ)n(er's)d(motion,)i(etc.)340 4575
-y Fj(\017)45 b Fk(See)25 b(the)h(description)f(of)g(the)g(System)h
-(attribute)f(for)g(details)g(of)g(whic)n(h)g(qualifying)g(attributes)g
-(apply)g(to)427 4675 y(eac)n(h)i(celestial)g(co)r(ordinate)g(system.)p
-0 4867 V 0 4998 a FA(Escap)t(e)753 4999 y Fd(Allo)m(w)36
-b(c)m(hanges)i(of)h(c)m(haracter)d(attributes)h(within)1692
-5113 y(strings?)3373 4998 y FA(Escap)t(e)0 5295 y Fc(Description:)44
-b Fk(This)28 b(attribute)g(con)n(trols)e(the)i(app)r(earance)e(of)i
-(text)g(strings)f(and)h(n)n(umerical)f(lab)r(els)g(dra)n(wn)g(b)n(y)g
-(the)227 5394 y(AST)p Ft(_)p Fk(GRID)g(and)f(\(for)g(the)g(Plot)g
-(class\))f(AST)p Ft(_)p Fk(TEXT)h(routines,)g(b)n(y)g(determining)g(if)
-g(an)n(y)g(escap)r(e)f(sequences)227 5494 y(con)n(tained)33
-b(within)h(the)g(strings)f(should)g(b)r(e)h(used)g(to)f(con)n(trol)f
-(the)i(app)r(earance)e(of)i(the)g(text,)h(or)e(should)g(b)r(e)227
-5593 y(prin)n(ted)f(literally)-7 b(.)47 b(Note,)33 b(the)f(Plot3D)e
-(class)h(only)g(in)n(terprets)g(escap)r(e)f(sequences)h(within)h(the)g
-(AST)p Ft(_)p Fk(GRID)227 5693 y(routine.)p eop end
-%%Page: 408 418
-TeXDict begin 408 417 bop 0 52 a FG(408)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fk(If)24 b(the)g(Escap)r(e)f(v)-5 b(alue)24 b(of)f(a)h(Plot)f(is)g
-(one)h(\(the)g(default\),)h(then)f(an)n(y)f(escap)r(e)g(sequences)g(in)
-h(text)g(strings)f(pro)r(duce)227 451 y(the)28 b(e\013ects)g(describ)r
-(ed)f(b)r(elo)n(w)h(when)f(prin)n(ted.)37 b(Otherwise,)27
-b(they)h(are)e(prin)n(ted)i(literally)-7 b(.)227 580
-y(See)28 b(also)e(the)i(AST)p Ft(_)p Fk(ESCAPES)f(function.)0
-739 y Fc(T)m(yp)s(e:)227 839 y Fk(In)n(teger)g(\(b)r(o)r(olean\).)0
-997 y Fc(Class)k(Applicabilit)m(y:)259 1143 y(Plot)427
-1243 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)-2
-1414 y Fc(Escap)s(e)32 b(Sequences)n(:)227 1560 y Fk(Escap)r(e)19
-b(sequences)g(are)g(in)n(tro)r(duced)g(in)n(to)h(the)g(text)g(string)f
-(b)n(y)g(a)g(p)r(ercen)n(t)h Ft(")p Fk(\045)p Ft(")f
-Fk(c)n(haracter.)32 b(An)n(y)20 b(unrecognised,)227 1660
-y(illegal)36 b(or)f(incomplete)i(escap)r(e)f(sequences)g(are)f(prin)n
-(ted)h(literally)-7 b(.)63 b(The)37 b(follo)n(wing)e(escap)r(e)h
-(sequences)g(are)227 1759 y(curren)n(tly)27 b(recognised)f(\()p
-Ft(")p Fk(...)p Ft(")h Fk(represen)n(ts)f(a)h(string)g(of)h(one)f(or)g
-(more)g(decimal)g(digits\):)227 1888 y(\045\045)h(-)g(Prin)n(t)f(a)g
-(literal)g Ft(")p Fk(\045)p Ft(")g Fk(c)n(haracter.)227
-2018 y(\045)p Fj(^)p Fk(...+)i(-)f(Dra)n(w)g(subsequen)n(t)g(c)n
-(haracters)f(as)h(sup)r(er-scripts.)38 b(The)29 b(digits)f
-Ft(")p Fk(...)p Ft(")g Fk(giv)n(e)g(the)h(distance)f(from)g(the)227
-2117 y(base-line)e(of)g Ft(")p Fk(normal)p Ft(")f Fk(text)i(to)f(the)h
-(base-line)f(of)h(the)f(sup)r(er-script)g(text,)h(scaled)f(so)g(that)h
-(a)f(v)-5 b(alue)26 b(of)h Ft(")p Fk(100)p Ft(")227 2217
-y Fk(corresp)r(onds)h(to)h(the)h(heigh)n(t)f(of)h Ft(")p
-Fk(normal)p Ft(")e Fk(text.)43 b(\045)p Fj(^)p Fk(+)29
-b(-)h(Dra)n(w)e(subsequen)n(t)h(c)n(haracters)f(with)i(the)g(normal)227
-2317 y(base-line.)227 2446 y(\045v...+)k(-)f(Dra)n(w)g(subsequen)n(t)h
-(c)n(haracters)d(as)i(sub-scripts.)55 b(The)34 b(digits)f
-Ft(")p Fk(...)p Ft(")g Fk(giv)n(e)g(the)h(distance)g(from)f(the)227
-2545 y(base-line)d(of)h Ft(")p Fk(normal)p Ft(")e Fk(text)i(to)f(the)h
-(base-line)f(of)h(the)g(sub-script)f(text,)i(scaled)e(so)g(that)h(a)g
-(v)-5 b(alue)30 b(of)h Ft(")p Fk(100)p Ft(")227 2645
-y Fk(corresp)r(onds)26 b(to)h(the)h(heigh)n(t)g(of)f
-Ft(")p Fk(normal)p Ft(")f Fk(text.)227 2774 y(\045v+)i(-)f(Dra)n(w)g
-(subsequen)n(t)g(c)n(haracters)e(with)j(the)g(normal)f(base-line)g
-(\(equiv)-5 b(alen)n(t)27 b(to)h(\045)p Fj(^)p Fk(+\).)227
-2903 y(\045)p Fm(>)p Fk(...+)j(-)g(Lea)n(v)n(e)e(a)i(gap)f(b)r(efore)h
-(dra)n(wing)e(subsequen)n(t)i(c)n(haracters.)45 b(The)31
-b(digits)g Ft(")p Fk(...)p Ft(")f Fk(giv)n(e)g(the)i(size)e(of)h(the)
-227 3003 y(gap,)c(scaled)g(so)g(that)h(a)f(v)-5 b(alue)28
-b(of)f Ft(")p Fk(100)p Ft(")e Fk(corresp)r(onds)h(to)i(the)g(heigh)n(t)
-f(of)h Ft(")p Fk(normal)p Ft(")d Fk(text.)227 3132 y(\045)p
-Fm(<)p Fk(...+)30 b(-)g(Mo)n(v)n(e)e(bac)n(kw)n(ards)g(b)r(efore)i(dra)
-n(wing)f(subsequen)n(t)g(c)n(haracters.)42 b(The)30 b(digits)g
-Ft(")p Fk(...)p Ft(")f Fk(giv)n(e)h(the)g(size)g(of)227
-3232 y(the)e(mo)n(v)n(emen)n(t,)f(scaled)g(so)g(that)h(a)f(v)-5
-b(alue)27 b(of)h Ft(")p Fk(100)p Ft(")d Fk(corresp)r(onds)h(to)h(the)h
-(heigh)n(t)g(of)f Ft(")p Fk(normal)p Ft(")f Fk(text.)227
-3361 y(\045s...+)g(-)g(Change)g(the)g(Size)h(attribute)f(for)g
-(subsequen)n(t)g(c)n(haracters.)34 b(The)26 b(digits)g
-Ft(")p Fk(...)p Ft(")g Fk(giv)n(e)f(the)i(new)f(Size)g(as)227
-3461 y(a)h(fraction)g(of)h(the)g Ft(")p Fk(normal)p Ft(")e
-Fk(Size,)h(scaled)g(so)g(that)h(a)f(v)-5 b(alue)28 b(of)f
-Ft(")p Fk(100)p Ft(")f Fk(corresp)r(onds)f(to)j(1.0;)227
-3590 y(\045s+)f(-)h(Reset)f(the)h(Size)g(attribute)g(to)f(its)h
-Ft(")p Fk(normal)p Ft(")e Fk(v)-5 b(alue.)227 3719 y(\045w...+)36
-b(-)g(Change)f(the)i(Width)g(attribute)f(for)f(subsequen)n(t)h(c)n
-(haracters.)60 b(The)36 b(digits)g Ft(")p Fk(...)p Ft(")f
-Fk(giv)n(e)g(the)i(new)227 3819 y(width)29 b(as)d(a)i(fraction)f(of)g
-(the)h Ft(")p Fk(normal)p Ft(")e Fk(Width,)j(scaled)d(so)h(that)h(a)f
-(v)-5 b(alue)28 b(of)f Ft(")p Fk(100)p Ft(")f Fk(corresp)r(onds)g(to)h
-(1.0;)227 3948 y(\045w+)h(-)f(Reset)h(the)g(Size)f(attribute)h(to)g
-(its)f Ft(")p Fk(normal)p Ft(")f Fk(v)-5 b(alue.)227
-4077 y(\045f...+)31 b(-)f(Change)f(the)i(F)-7 b(on)n(t)30
-b(attribute)g(for)g(subsequen)n(t)g(c)n(haracters.)42
-b(The)31 b(digits)f Ft(")p Fk(...)p Ft(")f Fk(giv)n(e)h(the)g(new)h(F)
--7 b(on)n(t)227 4177 y(v)i(alue.)227 4306 y(\045f+)28
-b(-)f(Reset)h(the)g(F)-7 b(on)n(t)28 b(attribute)f(to)h(its)g
-Ft(")p Fk(normal)p Ft(")d Fk(v)-5 b(alue.)227 4435 y(\045c...+)37
-b(-)f(Change)g(the)h(Colour)f(attribute)h(for)f(subsequen)n(t)g(c)n
-(haracters.)62 b(The)37 b(digits)g Ft(")p Fk(...)p Ft(")f
-Fk(giv)n(e)f(the)j(new)227 4535 y(Colour)27 b(v)-5 b(alue.)227
-4664 y(\045c+)28 b(-)f(Reset)h(the)g(Colour)e(attribute)i(to)f(its)h
-Ft(")p Fk(normal)p Ft(")e Fk(v)-5 b(alue.)227 4793 y(\045t...+)29
-b(-)e(Change)h(the)g(St)n(yle)g(attribute)g(for)g(subsequen)n(t)g(c)n
-(haracters.)35 b(The)29 b(digits)f Ft(")p Fk(...)p Ft(")f
-Fk(giv)n(e)g(the)i(new)f(St)n(yle)227 4893 y(v)-5 b(alue.)227
-5022 y(\045t+)28 b(-)f(Reset)h(the)g(St)n(yle)f(attribute)h(to)g(its)g
-Ft(")p Fk(normal)p Ft(")d Fk(v)-5 b(alue.)227 5151 y(\045h+)28
-b(-)f(Remem)n(b)r(er)h(the)g(curren)n(t)e(horizon)n(tal)g(p)r(osition)i
-(\(see)f Ft(")p Fk(\045g+)p Ft(")p Fk(\))227 5280 y(\045g+)g(-)h(Go)f
-(to)g(the)h(horizon)n(tal)e(p)r(osition)i(of)f(the)h(previous)f
-Ft(")p Fk(\045h+)p Ft(")f Fk(\(if)j(an)n(y\).)227 5410
-y(\045-)f(-)f(Push)g(the)h(curren)n(t)f(graphics)f(attribute)i(v)-5
-b(alues)27 b(on)n(to)g(the)h(top)g(of)f(the)h(stac)n(k)f(\(see)g
-Ft(")p Fk(\045+)p Ft(")p Fk(\).)227 5539 y(\045+)39 b(-)g(P)n(op)f
-(attributes)h(v)-5 b(alues)38 b(of)h(the)g(top)g(the)h(stac)n(k)e
-(\(see)h Ft(")p Fk(\045-)p Ft(")p Fk(\).)70 b(If)39 b(the)h(stac)n(k)e
-(is)g(empt)n(y)-7 b(,)42 b Ft(")p Fk(normal)p Ft(")227
-5639 y Fk(attribute)28 b(v)-5 b(alues)27 b(are)g(restored.)p
-eop end
-%%Page: 409 419
-TeXDict begin 409 418 bop 3643 52 a FG(409)p 0 351 3780
-12 v 0 483 a FA(FillF)-11 b(actor)242 b Fd(F)-10 b(raction)38
-b(of)g(the)g(Region)g(whic)m(h)g(is)h(of)f(in)m(terest)240
-b FA(FillF)-11 b(actor)0 718 y Fc(Description:)44 b Fk(This)27
-b(attribute)f(indicates)g(the)h(fraction)f(of)g(the)h(Region)f(whic)n
-(h)g(is)g(of)h(in)n(terest.)36 b(AST)26 b(do)r(es)g(not)h(use)227
-818 y(this)f(attribute)g(in)n(ternally)f(for)h(an)n(y)f(purp)r(ose.)35
-b(T)n(ypically)-7 b(,)26 b(it)g(could)g(b)r(e)g(used)g(to)f(indicate)h
-(the)g(fraction)f(of)h(the)227 917 y(Region)h(for)g(whic)n(h)h(data)f
-(is)g(a)n(v)-5 b(ailable.)227 1065 y(The)30 b(supplied)h(v)-5
-b(alue)30 b(m)n(ust)g(b)r(e)h(in)f(the)h(range)e(0.0)g(to)h(1.0,)g(and)
-g(the)h(default)f(v)-5 b(alue)30 b(is)g(1.0)g(\(except)g(as)g(noted)227
-1164 y(b)r(elo)n(w\).)0 1360 y Fc(T)m(yp)s(e:)227 1460
-y Fk(Floating)d(p)r(oin)n(t.)0 1655 y Fc(Class)k(Applicabilit)m(y:)259
-1838 y(Region)427 1938 y Fk(All)d(Regions)f(ha)n(v)n(e)f(this)i
-(attribute.)259 2094 y Fc(CmpRegion)427 2193 y Fk(The)g(default)g
-(FillF)-7 b(actor)27 b(for)g(a)g(CmpRegion)g(is)h(the)g(FillF)-7
-b(actor)27 b(of)h(its)f(\014rst)h(comp)r(onen)n(t)f(Region.)259
-2349 y Fc(Prism)427 2449 y Fk(The)36 b(default)h(FillF)-7
-b(actor)35 b(for)h(a)f(Prism)h(is)f(the)i(pro)r(duct)f(of)g(the)g
-(FillF)-7 b(actors)35 b(of)h(its)h(t)n(w)n(o)e(comp)r(onen)n(t)427
-2548 y(Regions.)259 2704 y Fc(Stc)427 2804 y Fk(The)28
-b(default)g(FillF)-7 b(actor)27 b(for)g(an)g(Stc)h(is)g(the)g(FillF)-7
-b(actor)27 b(of)g(its)h(encapsulated)f(Region.)p 0 3049
-V 0 3181 a FA(FitsDigits)243 b Fd(Digits)38 b(of)g(precision)g(for)g
-(\015oating)e(p)s(oin)m(t)i(FITS)1735 3296 y(v)-7 b(alues)3202
-3181 y FA(FitsDigits)0 3507 y Fc(Description:)44 b Fk(This)24
-b(attribute)h(giv)n(es)d(the)j(n)n(um)n(b)r(er)f(of)g(signi\014can)n(t)
-f(decimal)h(digits)g(to)g(use)g(when)g(formatting)f(\015oat-)227
-3607 y(ing)28 b(p)r(oin)n(t)f(v)-5 b(alues)28 b(for)f(inclusion)g(in)h
-(the)g(FITS)g(header)f(cards)f(within)i(a)g(FitsChan.)227
-3755 y(By)c(default,)i(a)e(p)r(ositiv)n(e)g(v)-5 b(alue)24
-b(is)g(used)h(whic)n(h)f(results)g(in)g(no)h(loss)e(of)h(information,)h
-(assuming)e(that)i(the)g(v)-5 b(alue)227 3854 y(is)28
-b(double)f(precision.)36 b(Usually)-7 b(,)28 b(this)f(causes)g(no)g
-(problems.)227 4002 y(Ho)n(w)n(ev)n(er,)22 b(to)g(adhere)g(strictly)g
-(to)g(the)h(recommendations)e(of)i(the)g(FITS)g(standard,)f(the)h
-(width)g(of)g(the)f(format-)227 4102 y(ted)31 b(v)-5
-b(alue)30 b(\(including)g(sign,)h(decimal)f(p)r(oin)n(t)g(and)g(exp)r
-(onen)n(t\))g(ough)n(t)g(not)g(to)g(b)r(e)g(more)f(than)i(20)e(c)n
-(haracters.)227 4201 y(If)f(y)n(ou)e(are)h(concerned)f(ab)r(out)h
-(this,)h(y)n(ou)e(should)h(set)h(FitsDigits)f(to)h(a)e(negativ)n(e)h(v)
--5 b(alue,)27 b(suc)n(h)g(as)f(-15.)36 b(In)27 b(this)227
-4301 y(case,)g(the)h(absolute)f(v)-5 b(alue)27 b(\(+15\))g(indicates)g
-(the)h(maxim)n(um)f(n)n(um)n(b)r(er)g(of)g(signi\014can)n(t)g(digits)g
-(to)h(use,)f(but)h(the)227 4400 y(actual)23 b(n)n(um)n(b)r(er)f(used)h
-(ma)n(y)g(b)r(e)g(few)n(er)g(than)g(this)g(to)g(ensure)f(that)i(the)f
-(FITS)g(recommendations)f(are)g(satis\014ed.)227 4500
-y(When)g(using)g(this)f(approac)n(h,)g(the)h(resulting)f(n)n(um)n(b)r
-(er)g(of)h(signi\014can)n(t)f(digits)g(ma)n(y)g(dep)r(end)h(on)f(the)h
-(v)-5 b(alue)22 b(b)r(eing)227 4600 y(formatted)28 b(and)f(on)g(the)h
-(presence)f(of)h(an)n(y)f(sign,)g(decimal)g(p)r(oin)n(t)h(or)f(exp)r
-(onen)n(t.)227 4747 y(The)19 b(v)-5 b(alue)18 b(of)g(this)h(attribute)f
-(is)h(e\013ectiv)n(e)f(when)h(FITS)f(header)g(cards)f(are)g(output,)k
-(either)e(using)f(AST)p Ft(_)p Fk(FINDFITS)227 4847 y(or)27
-b(b)n(y)g(the)h(action)f(of)h(the)g(FitsChan's)f(sink)h(routine)f(when)
-h(it)g(is)f(\014nally)h(deleted.)0 5043 y Fc(T)m(yp)s(e:)227
-5142 y Fk(In)n(teger.)0 5338 y Fc(Class)j(Applicabilit)m(y:)259
-5520 y(FitsChan)427 5620 y Fk(All)d(FitsChans)g(ha)n(v)n(e)e(this)i
-(attribute.)p eop end
-%%Page: 410 420
-TeXDict begin 410 419 bop 0 52 a FG(410)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 490 a FA(F)-11 b(on)l(t\(elemen)l(t\))1034
-483 y Fd(Character)36 b(fon)m(t)i(for)g(a)g(Plot)f(elemen)m(t)2954
-490 y FA(F)-11 b(on)l(t\(elemen)l(t\))0 701 y Fc(Description:)44
-b Fk(This)35 b(attribute)g(determines)f(the)h(c)n(haracter)d(fon)n(t)j
-(index)g(used)f(when)h(dra)n(wing)e(eac)n(h)h(elemen)n(t)h(of)227
-801 y(graphical)25 b(output)j(pro)r(duced)e(b)n(y)h(a)f(Plot.)36
-b(It)27 b(tak)n(es)f(a)h(separate)e(v)-5 b(alue)27 b(for)f(eac)n(h)g
-(graphical)f(elemen)n(t)i(so)f(that,)227 901 y(for)h(instance,)h(the)g
-(setting)f Ft(")p Fk(F)-7 b(on)n(t\(title\)=2)p Ft(")27
-b Fk(causes)g(the)h(Plot)f(title)h(to)g(b)r(e)g(dra)n(wn)e(using)h(fon)
-n(t)h(n)n(um)n(b)r(er)f(2.)227 1033 y(The)i(range)f(of)h(in)n(teger)e
-(fon)n(t)i(indices)g(a)n(v)-5 b(ailable)28 b(and)g(the)i(app)r(earance)
-d(of)i(the)g(resulting)f(text)i(is)e(determined)227 1133
-y(b)n(y)c(the)g(underlying)f(graphics)g(system.)35 b(The)24
-b(default)g(b)r(eha)n(viour)f(is)h(for)f(all)h(graphical)e(elemen)n(ts)
-i(to)f(b)r(e)i(dra)n(wn)227 1233 y(using)j(the)f(default)i(fon)n(t)e
-(supplied)h(b)n(y)f(this)h(graphics)f(system.)0 1398
-y Fc(T)m(yp)s(e:)227 1498 y Fk(In)n(teger.)0 1664 y Fc(Class)k
-(Applicabilit)m(y:)259 1817 y(Plot)427 1916 y Fk(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)0 2095 y Fc(Notes:)340 2393 y
-Fj(\017)45 b Fk(F)-7 b(or)27 b(a)g(list)h(of)g(the)g(graphical)e
-(elemen)n(ts)h(a)n(v)-5 b(ailable,)27 b(see)g(the)h(description)f(of)g
-(the)h(Plot)f(class.)340 2534 y Fj(\017)45 b Fk(If)34
-b(no)f(graphical)f(elemen)n(t)h(is)h(sp)r(eci\014ed,)h(\(e.g.)54
-b Ft(")p Fk(F)-7 b(on)n(t)p Ft(")32 b Fk(instead)h(of)h
-Ft(")p Fk(F)-7 b(on)n(t\(title\))p Ft(")p Fk(\),)35 b(then)f(a)f
-Ft(")p Fk(set)p Ft(")f Fk(or)427 2634 y Ft(")p Fk(clear)p
-Ft(")g Fk(op)r(eration)h(will)h(a\013ect)g(the)g(attribute)g(v)-5
-b(alue)34 b(of)f(all)h(graphical)e(elemen)n(ts,)j(while)f(a)g
-Ft(")p Fk(get)p Ft(")e Fk(or)427 2734 y Ft(")p Fk(test)p
-Ft(")27 b Fk(op)r(eration)g(will)h(use)f(just)h(the)g(F)-7
-b(on)n(t\(T)g(extLab\))28 b(v)-5 b(alue.)p 0 2949 V 0
-3088 a FA(F)-11 b(ormat\(axis\))987 3081 y Fd(F)h(ormat)38
-b(sp)s(eci\014cation)f(for)h(axis)g(v)-7 b(alues)3023
-3088 y FA(F)c(ormat\(axis\))0 3299 y Fc(Description:)44
-b Fk(This)21 b(attribute)g(sp)r(eci\014es)f(the)h(format)f(to)h(b)r(e)g
-(used)f(when)h(displa)n(ying)e(co)r(ordinate)h(v)-5 b(alues)20
-b(asso)r(ciated)227 3399 y(with)j(a)e(particular)f(F)-7
-b(rame)22 b(axis)f(\(i.e.)35 b(to)22 b(con)n(v)n(ert)e(v)-5
-b(alues)21 b(from)h(binary)f(to)h(c)n(haracter)d(form\).)35
-b(It)22 b(is)g(in)n(terpreted)227 3499 y(b)n(y)28 b(the)g(AST)p
-Ft(_)p Fk(F)n(ORMA)-7 b(T)27 b(function)h(and)g(determines)f(the)h
-(formatting)f(whic)n(h)h(it)g(applies.)227 3631 y(If)33
-b(no)g(F)-7 b(ormat)32 b(v)-5 b(alue)32 b(is)h(set)f(for)g(a)h(F)-7
-b(rame)32 b(axis,)h(a)f(default)h(v)-5 b(alue)32 b(is)h(supplied)g
-(instead.)52 b(This)32 b(is)h(based)f(on)227 3731 y(the)i(v)-5
-b(alue)32 b(of)h(the)h(Digits,)g(or)e(Digits\(axis\),)i(attribute)g
-(and)e(is)h(c)n(hosen)f(so)g(that)i(it)f(displa)n(ys)f(the)h(requested)
-227 3831 y(n)n(um)n(b)r(er)28 b(of)f(digits)h(of)f(precision.)0
-3996 y Fc(T)m(yp)s(e:)227 4096 y Fk(String.)0 4262 y
-Fc(Class)k(Applicabilit)m(y:)259 4415 y(F)-8 b(rame)427
-4514 y Fk(The)28 b(F)-7 b(rame)27 b(class)f(in)n(terprets)h(this)g
-(attribute)h(as)f(a)g(format)f(sp)r(eci\014cation)i(string)e(to)i(b)r
-(e)f(passed)g(to)g(the)427 4614 y(C)h Ft(")p Fk(prin)n(tf)p
-Ft(")e Fk(function)i(\(e.g.)37 b Ft(")p Fk(\0451.7G)p
-Ft(")p Fk(\))26 b(in)i(order)e(to)h(format)g(a)g(single)g(co)r
-(ordinate)f(v)-5 b(alue)27 b(\(supplied)h(as)427 4714
-y(a)f(double)h(precision)f(n)n(um)n(b)r(er\).)259 4855
-y Fc(SkyF)-8 b(rame)427 4954 y Fk(The)36 b(SkyF)-7 b(rame)35
-b(class)f(re-de\014nes)h(the)h(syn)n(tax)e(and)i(default)g(v)-5
-b(alue)35 b(of)h(the)g(F)-7 b(ormat)34 b(string)h(to)h(allo)n(w)427
-5054 y(the)i(formatting)f(of)g(sexagesimal)e(v)-5 b(alues)37
-b(as)f(appropriate)g(for)h(the)g(particular)f(celestial)h(co)r
-(ordinate)427 5153 y(system)c(b)r(eing)h(represen)n(ted.)52
-b(The)34 b(syn)n(tax)e(of)h(SkyF)-7 b(rame)33 b(F)-7
-b(ormat)32 b(strings)h(is)g(describ)r(ed)g(\(b)r(elo)n(w\))g(in)427
-5253 y(the)28 b Ft(")p Fk(SkyF)-7 b(rame)27 b(F)-7 b(ormats)p
-Ft(")26 b Fk(section.)259 5394 y Fc(F)-8 b(rameSet)427
-5494 y Fk(The)23 b(F)-7 b(ormat)23 b(attribute)g(of)g(a)g(F)-7
-b(rameSet)23 b(axis)f(is)h(the)h(same)e(as)h(that)g(of)g(its)h(curren)n
-(t)e(F)-7 b(rame)23 b(\(as)f(sp)r(eci\014ed)427 5593
-y(b)n(y)30 b(the)g(Curren)n(t)g(attribute\).)44 b(Note)30
-b(that)g(the)h(syn)n(tax)e(of)h(the)g(F)-7 b(ormat)30
-b(string)f(is)h(also)f(determined)h(b)n(y)427 5693 y(the)e(curren)n(t)f
-(F)-7 b(rame.)p eop end
-%%Page: 411 421
-TeXDict begin 411 420 bop 3643 52 a FG(411)259 351 y
-Fc(TimeF)-8 b(rame)427 451 y Fk(The)37 b(TimeF)-7 b(rame)36
-b(class)g(extends)h(the)g(syn)n(tax)f(of)g(the)h(F)-7
-b(ormat)36 b(string)g(to)h(allo)n(w)e(the)j(formatting)e(of)427
-551 y(TimeF)-7 b(rame)34 b(axis)f(v)-5 b(alues)34 b(as)f(Gregorian)f
-(calendar)g(dates)i(and)g(times.)56 b(The)34 b(syn)n(tax)f(of)h(TimeF)
--7 b(rame)427 650 y(F)g(ormat)27 b(strings)g(is)g(describ)r(ed)h(\(b)r
-(elo)n(w\))g(in)f(the)h Ft(")p Fk(TimeF)-7 b(rame)27
-b(F)-7 b(ormats)p Ft(")26 b Fk(section.)0 820 y Fc(Notes:)340
-1110 y Fj(\017)45 b Fk(When)36 b(sp)r(ecifying)f(this)h(attribute)f(b)n
-(y)g(name,)i(it)f(should)f(b)r(e)h(subscripted)f(with)g(the)h(n)n(um)n
-(b)r(er)f(of)g(the)427 1210 y(F)-7 b(rame)27 b(axis)g(to)h(whic)n(h)f
-(it)h(applies.)-2 1380 y Fc(SkyF)-8 b(rame)33 b(F)-8
-b(ormats)n(:)227 1526 y Fk(The)23 b(F)-7 b(ormat)21 b(string)h
-(supplied)h(for)e(a)h(SkyF)-7 b(rame)22 b(should)g(con)n(tain)g(zero)f
-(or)g(more)h(of)g(the)h(follo)n(wing)e(c)n(haracters.)227
-1625 y(These)28 b(ma)n(y)e(o)r(ccur)h(in)h(an)n(y)f(order,)f(but)j(the)
-f(follo)n(wing)e(is)i(recommended)f(for)g(clarit)n(y:)340
-1898 y Fj(\017)45 b Ft(")p Fk(+)p Ft(")p Fk(:)34 b(Indicates)24
-b(that)g(a)f(plus)h(sign)f(should)h(b)r(e)g(pre\014xed)f(to)h(p)r
-(ositiv)n(e)f(v)-5 b(alues.)35 b(By)24 b(default,)h(no)e(plus)h(sign)
-427 1998 y(is)k(used.)340 2134 y Fj(\017)45 b Ft(")p
-Fk(z)p Ft(")p Fk(:)e(Indicates)31 b(that)g(leading)g(zeros)f(should)h
-(b)r(e)g(pre\014xed)g(to)g(the)g(v)-5 b(alue)31 b(so)g(that)g(the)g
-(\014rst)g(\014eld)h(is)f(of)427 2234 y(constan)n(t)23
-b(width,)j(as)d(w)n(ould)g(b)r(e)h(required)f(in)h(a)g(\014xed-width)g
-(table)f(\(leading)h(zeros)e(are)h(alw)n(a)n(ys)f(pre\014xed)427
-2334 y(to)28 b(an)n(y)f(\014elds)g(that)h(follo)n(w\).)36
-b(By)28 b(default,)g(no)f(leading)g(zeros)f(are)h(added.)340
-2470 y Fj(\017)45 b Ft(")p Fk(i)p Ft(")p Fk(:)64 b(Use)42
-b(the)g(standard)e(ISO)h(\014eld)h(separator)d(\(a)j(colon\))e(b)r(et)n
-(w)n(een)i(\014elds.)78 b(This)42 b(is)f(the)h(default)427
-2570 y(b)r(eha)n(viour.)340 2707 y Fj(\017)j Ft(")p Fk(b)p
-Ft(")p Fk(:)37 b(Use)27 b(a)g(blank)h(to)f(separate)f(\014elds.)340
-2844 y Fj(\017)45 b Ft(")p Fk(l)p Ft(")p Fk(:)36 b(Use)28
-b(a)f(letter)h(\()p Ft(")p Fk(h)p Ft(")p Fk(/)p Ft(")p
-Fk(d)p Ft(")p Fk(,)e Ft(")p Fk(m)p Ft(")h Fk(or)g Ft(")p
-Fk(s)p Ft(")f Fk(as)h(appropriate\))f(to)i(separate)e(\014elds.)340
-2980 y Fj(\017)45 b Ft(")p Fk(g)p Ft(")p Fk(:)37 b(Use)28
-b(a)g(letter)h(and)f(sym)n(b)r(ols)f(to)h(separate)f(\014elds)h(\()p
-Ft(")p Fk(h)p Ft(")p Fk(/)p Ft(")p Fk(d)p Ft(")p Fk(,)f
-Ft(")p Fk(m)p Ft(")h Fk(or)f Ft(")p Fk(s)p Ft(")p Fk(,)h(etc,)g(as)g
-(appropriate\),)427 3080 y(but)39 b(include)g(escap)r(e)e(sequences)h
-(in)g(the)h(formatted)e(v)-5 b(alue)39 b(so)e(that)h(the)h(Plot)f
-(class)f(will)h(dra)n(w)f(the)427 3180 y(separators)25
-b(as)i(small)g(sup)r(er-scripts.)340 3316 y Fj(\017)45
-b Ft(")p Fk(d)p Ft(")p Fk(:)35 b(Include)24 b(a)g(degrees)f(\014eld.)36
-b(Expressing)23 b(the)h(angle)g(purely)g(in)g(degrees)f(is)h(also)g
-(the)g(default)h(if)g(none)427 3416 y(of)j Ft(")p Fk(h)p
-Ft(")p Fk(,)f Ft(")p Fk(m)p Ft(")p Fk(,)g Ft(")p Fk(s)p
-Ft(")g Fk(or)f Ft(")p Fk(t)p Ft(")h Fk(are)g(giv)n(en.)340
-3553 y Fj(\017)45 b Ft(")p Fk(h)p Ft(")p Fk(:)e(Express)29
-b(the)i(angle)f(as)g(a)h(time)g(and)g(include)g(an)f(hours)g(\014eld)h
-(\(where)g(24)f(hours)g(corresp)r(ond)f(to)427 3652 y(360)e(degrees\).)
-37 b(Expressing)26 b(the)j(angle)e(purely)h(in)g(hours)f(is)h(also)f
-(the)h(default)h(if)f Ft(")p Fk(t)p Ft(")g Fk(is)g(giv)n(en)f(without)
-427 3752 y(either)h Ft(")p Fk(m)p Ft(")f Fk(or)f Ft(")p
-Fk(s)p Ft(")p Fk(.)340 3889 y Fj(\017)45 b Ft(")p Fk(m)p
-Ft(")p Fk(:)37 b(Include)27 b(a)h(min)n(utes)f(\014eld.)38
-b(By)27 b(default)h(this)g(is)f(not)h(included.)340 4025
-y Fj(\017)45 b Ft(")p Fk(s)p Ft(")p Fk(:)d(Include)31
-b(a)f(seconds)g(\014eld.)46 b(By)31 b(default)g(this)g(is)f(not)h
-(included.)46 b(This)31 b(request)f(is)h(ignored)e(if)i
-Ft(")p Fk(d)p Ft(")427 4125 y Fk(or)c Ft(")p Fk(h)p Ft(")g
-Fk(is)g(giv)n(en,)g(unless)h(a)f(min)n(utes)h(\014eld)g(is)f(also)f
-(included.)340 4262 y Fj(\017)45 b Ft(")p Fk(t)p Ft(")p
-Fk(:)37 b(Express)26 b(the)h(angle)g(as)g(a)g(time)h(\(where)f(24)g
-(hours)f(corresp)r(ond)g(to)h(360)f(degrees\).)36 b(This)28
-b(option)f(is)427 4361 y(ignored)c(if)h(either)g Ft(")p
-Fk(d)p Ft(")f Fk(or)g Ft(")p Fk(h)p Ft(")g Fk(is)g(giv)n(en)g(and)h(is)
-f(in)n(tended)i(for)e(use)g(where)h(the)g(v)-5 b(alue)23
-b(is)h(to)g(b)r(e)g(expressed)427 4461 y(purely)29 b(in)g(min)n(utes)g
-(and/or)e(seconds)h(of)h(time)g(\(with)h(no)e(hours)g(\014eld\).)42
-b(If)29 b Ft(")p Fk(t)p Ft(")f Fk(is)h(giv)n(en)f(without)h
-Ft(")p Fk(d)p Ft(")p Fk(,)427 4561 y Ft(")p Fk(h)p Ft(")p
-Fk(,)e Ft(")p Fk(m)p Ft(")g Fk(or)g Ft(")p Fk(s)p Ft(")g
-Fk(b)r(eing)g(presen)n(t,)g(then)h(it)g(is)g(equiv)-5
-b(alen)n(t)27 b(to)h Ft(")p Fk(h)p Ft(")p Fk(.)340 4697
-y Fj(\017)45 b Ft(")p Fk(.)p Ft(")p Fk(:)f(Indicates)31
-b(that)g(decimal)g(places)g(are)f(to)h(b)r(e)h(giv)n(en)e(for)h(the)h
-(\014nal)f(\014eld)g(in)h(the)f(formatted)g(string)427
-4797 y(\(whic)n(hev)n(er)20 b(\014eld)h(this)f(is\).)35
-b(The)21 b Ft(")p Fk(.)p Ft(")e Fk(should)i(b)r(e)f(follo)n(w)n(ed)g
-(immediately)g(b)n(y)h(an)f(unsigned)g(in)n(teger)g(whic)n(h)427
-4897 y(giv)n(es)30 b(the)i(n)n(um)n(b)r(er)f(of)g(decimal)g(places)f
-(required,)h(or)f(b)n(y)h(an)g(asterisk.)46 b(If)32 b(an)f(asterisk)f
-(is)h(supplied,)h(a)427 4996 y(default)c(n)n(um)n(b)r(er)g(of)f
-(decimal)h(places)f(is)g(used)h(whic)n(h)f(is)h(based)f(on)g(the)h(v)-5
-b(alue)27 b(of)h(the)g(Digits)g(attribute.)227 5166 y(All)21
-b(of)f(the)g(ab)r(o)n(v)n(e)f(format)h(sp)r(eci\014ers)f(are)g
-(case-insensitiv)n(e.)33 b(If)20 b(sev)n(eral)f(c)n(haracters)e(mak)n
-(e)j(con\015icting)f(requests)227 5266 y(\(e.g.)38 b(if)29
-b(b)r(oth)g Ft(")p Fk(i)p Ft(")e Fk(and)h Ft(")p Fk(b)p
-Ft(")f Fk(app)r(ear\),)h(then)h(the)f(c)n(haracter)e(o)r(ccurring)h
-(last)g(tak)n(es)h(precedence,)f(except)h(that)227 5365
-y Ft(")p Fk(d)p Ft(")f Fk(and)h Ft(")p Fk(h)p Ft(")f
-Fk(alw)n(a)n(ys)e(o)n(v)n(erride)h Ft(")p Fk(t)p Ft(")p
-Fk(.)227 5494 y(If)i(the)g(format)f(string)f(starts)h(with)h(a)f(p)r
-(ercen)n(tage)f(sign)g(\(\045\),)j(then)f(the)f(whole)g(format)g
-(string)g(is)g(assumed)g(to)227 5593 y(conform)33 b(to)g(the)h(syn)n
-(tax)e(de\014ned)i(b)n(y)f(the)h(F)-7 b(rame)33 b(class,)h(and)f(the)g
-(axis)g(v)-5 b(alues)33 b(is)g(formated)g(as)g(a)g(decimal)227
-5693 y(radians)27 b(v)-5 b(alue.)p eop end
-%%Page: 412 422
-TeXDict begin 412 421 bop 0 52 a FG(412)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)-2 351 y
-Fc(TimeF)-8 b(rame)32 b(F)-8 b(ormats)n(:)227 497 y Fk(The)37
-b(F)-7 b(ormat)36 b(string)f(supplied)i(for)f(a)g(TimeF)-7
-b(rame)36 b(should)g(either)h(use)f(the)h(syn)n(tax)e(de\014ned)i(b)n
-(y)f(the)h(base)227 597 y(F)-7 b(rame)31 b(class)g(\(i.e.)48
-b(a)31 b(C)h Ft(")p Fk(prin)n(tf)p Ft(")e Fk(format)h(string\),)h(or)f
-(the)h(extended)f Ft(")p Fk(iso)p Ft(")f Fk(syn)n(tax)h(describ)r(ed)g
-(b)r(elo)n(w)g(\(the)227 697 y(default)d(v)-5 b(alue)28
-b(is)f(inherited)h(from)f(the)h(F)-7 b(rame)27 b(class\):)340
-952 y Fj(\017)45 b Fk(C)28 b Ft(")p Fk(prin)n(tf)p Ft(")f
-Fk(syn)n(tax:)36 b(If)28 b(the)g(F)-7 b(ormat)28 b(string)f(is)g(a)g(C)
-h Ft(")p Fk(prin)n(tf)p Ft(")f Fk(format)g(description)g(suc)n(h)h(as)f
-Ft(")p Fk(\0451.7G)p Ft(")p Fk(,)427 1052 y(the)32 b(TimeF)-7
-b(rame)31 b(axis)f(v)-5 b(alue)31 b(will)h(b)r(e)g(formatted)f(without)
-g(c)n(hange)f(as)h(a)g(\015oating)f(p)r(oin)n(t)i(v)-5
-b(alue)31 b(using)427 1151 y(this)f(format.)41 b(The)29
-b(formatted)g(string)f(will)i(th)n(us)f(represen)n(t)f(an)h(o\013set)g
-(from)f(the)i(zero)e(p)r(oin)n(t)h(sp)r(eci\014ed)427
-1251 y(b)n(y)24 b(the)h(TimeF)-7 b(rame's)23 b(TimeOrigin)g(attribute,)
-i(measured)f(in)g(units)h(giv)n(en)e(b)n(y)h(the)g(TimeF)-7
-b(rame's)24 b(Unit)427 1350 y(attribute.)340 1480 y Fj(\017)45
-b Ft(")p Fk(iso)p Ft(")31 b Fk(syn)n(tax:)45 b(This)33
-b(is)f(used)g(to)g(format)g(a)g(TimeF)-7 b(rame)31 b(axis)h(v)-5
-b(alue)32 b(as)g(a)f(Gregorian)g(date)h(follo)n(w)n(ed)427
-1579 y(b)n(y)g(an)g(optional)f(time)i(of)f(da)n(y)-7
-b(.)50 b(If)33 b(the)f(F)-7 b(ormat)32 b(v)-5 b(alue)32
-b(commences)f(with)i(the)f(string)g Ft(")p Fk(iso)p Ft(")f
-Fk(then)h(the)427 1679 y(TimeF)-7 b(rame)32 b(axis)f(v)-5
-b(alue)32 b(will)g(b)r(e)g(con)n(v)n(erted)f(to)h(an)f(absolute)h(MJD,)
-g(including)g(the)g(addition)g(of)g(the)427 1778 y(curren)n(t)d
-(TimeOrigin)f(v)-5 b(alue,)29 b(and)h(then)f(formatted)g(as)g(a)g
-(Gregorian)e(date)i(using)g(the)g(format)g Ft(")p Fk(yyyy-)427
-1878 y(mm-dd)p Ft(")p Fk(.)44 b(Optionally)-7 b(,)29
-b(the)i(F)-7 b(ormat)29 b(v)-5 b(alue)30 b(ma)n(y)f(include)h(an)f(in)n
-(teger)g(precision)g(follo)n(wing)g(the)h Ft(")p Fk(iso)p
-Ft(")427 1978 y Fk(sp)r(eci\014cation)e(\(e.g.)39 b Ft(")p
-Fk(iso.2)p Ft(")p Fk(\),)27 b(in)h(whic)n(h)h(case)e(the)i(time)g(of)f
-(da)n(y)f(will)i(b)r(e)f(app)r(ended)h(to)f(the)h(formatted)427
-2077 y(date)e(\(if)g(no)f(time)h(of)g(da)n(y)e(is)i(included,)g(the)g
-(date)f(\014eld)h(is)f(rounded)g(to)h(the)f(nearest)g(da)n(y\).)36
-b(The)27 b(in)n(teger)427 2177 y(v)-5 b(alue)26 b(in)g(the)h(F)-7
-b(ormat)25 b(string)g(indicates)h(the)g(n)n(um)n(b)r(er)g(of)g(decimal)
-g(places)f(to)h(use)g(in)g(the)g(seconds)f(\014eld.)427
-2277 y(F)-7 b(or)27 b(instance,)h(a)g(F)-7 b(ormat)27
-b(v)-5 b(alue)27 b(of)h Ft(")p Fk(iso.0)p Ft(")e Fk(pro)r(duces)h(a)h
-(time)g(of)g(da)n(y)f(of)h(the)g(form)f Ft(")p Fk(hh:mm:ss)p
-Ft(")p Fk(,)h(and)427 2376 y(a)i(F)-7 b(ormat)30 b(v)-5
-b(alue)30 b(of)g Ft(")p Fk(iso.2)p Ft(")e Fk(pro)r(duces)h(a)h(time)h
-(of)f(da)n(y)f(of)i(the)f(form)g Ft(")p Fk(hh:mm:ss.ss)p
-Ft(")p Fk(.)43 b(The)31 b(date)f(and)427 2476 y(time)e(\014elds)g(will)
-g(b)r(e)g(separated)e(b)n(y)h(a)h(space)e(unless)i('T')g(is)f(app)r
-(ended)h(to)f(the)h(end)g(of)g(string,)f(in)h(whic)n(h)427
-2575 y(case)c(the)h(letter)g(T)g(\(upp)r(er)g(case\))g(will)g(b)r(e)g
-(used)g(as)f(the)h(separator.)34 b(The)25 b(v)-5 b(alue)24
-b(of)h(the)g(Digits)g(attribute)427 2675 y(is)j(ignored)e(when)i(using)
-f(this)h Ft(")p Fk(iso)p Ft(")e Fk(format.)p 0 2867 3780
-12 v 0 2999 a FA(F)-11 b(ull)1031 b Fd(Set)39 b(lev)m(el)e(of)i(output)
-e(detail)1030 b FA(F)-11 b(ull)0 3180 y Fc(Description:)44
-b Fk(This)26 b(attribute)g(is)g(a)f(three-state)g(\015ag)g(and)g(tak)n
-(es)g(v)-5 b(alues)25 b(of)h(-1,)f(0)h(or)e(+1.)36 b(It)26
-b(con)n(trols)e(the)i(amoun)n(t)227 3280 y(of)i(information)f(included)
-h(in)g(the)g(output)g(generated)e(b)n(y)i(a)f(Channel.)227
-3402 y(If)33 b(F)-7 b(ull)32 b(is)g(zero,)h(then)f(a)g(mo)r(dest)g
-(amoun)n(t)g(of)g(non-essen)n(tial)e(but)j(useful)g(information)e(will)
-h(b)r(e)h(included)f(in)227 3502 y(the)j(output.)57 b(If)35
-b(F)-7 b(ull)35 b(is)f(negativ)n(e,)h(all)f(non-essen)n(tial)f
-(information)h(will)g(b)r(e)h(suppressed)e(to)i(minimise)f(the)227
-3602 y(amoun)n(t)27 b(of)h(output,)g(while)g(if)g(it)g(is)f(p)r(ositiv)
-n(e,)h(the)g(output)g(will)g(include)g(the)f(maxim)n(um)h(amoun)n(t)f
-(of)h(detailed)227 3701 y(information)f(ab)r(out)h(the)g(Ob)5
-b(ject)27 b(b)r(eing)h(written.)0 3847 y Fc(T)m(yp)s(e:)227
-3946 y Fk(In)n(teger.)0 4092 y Fc(Class)j(Applicabilit)m(y:)259
-4225 y(Channel)427 4325 y Fk(The)d(default)g(v)-5 b(alue)27
-b(is)h(zero)e(for)i(a)f(normal)f(Channel.)259 4454 y
-Fc(FitsChan)427 4553 y Fk(The)i(default)g(v)-5 b(alue)27
-b(is)h(zero)e(for)i(a)f(FitsChan.)259 4682 y Fc(XmlChan)427
-4782 y Fk(The)h(default)g(v)-5 b(alue)27 b(is)h(-1)f(for)g(an)g
-(XmlChan.)259 4911 y Fc(StcsChan)427 5011 y Fk(The)i(default)g(v)-5
-b(alue)28 b(is)g(zero)f(for)h(an)g(StcsChan.)39 b(Set)29
-b(a)f(p)r(ositiv)n(e)g(v)-5 b(alue)28 b(to)g(cause)g(default)h(v)-5
-b(alues)28 b(to)g(b)r(e)427 5110 y(included)g(in)g(STC-S)g
-(descriptions.)0 5269 y Fc(Notes:)340 5547 y Fj(\017)45
-b Fk(All)27 b(p)r(ositiv)n(e)f(v)-5 b(alues)26 b(supplied)h(for)f(this)
-g(attribute)h(are)e(con)n(v)n(erted)g(to)h(+1)g(and)g(all)g(negativ)n
-(e)g(v)-5 b(alues)26 b(are)427 5647 y(con)n(v)n(erted)g(to)i(-1.)p
-eop end
-%%Page: 413 423
-TeXDict begin 413 422 bop 3643 52 a FG(413)p 0 351 3780
-12 v 0 490 a FA(Gap\(axis\))779 483 y Fd(In)m(terv)-7
-b(al)37 b(b)s(et)m(w)m(een)h(linearly)f(spaced)h(ma)7
-b(jor)37 b(axis)1492 598 y(v)-7 b(alues)39 b(of)f(a)g(Plot)3202
-490 y FA(Gap\(axis\))0 735 y Fc(Description:)44 b Fk(This)30
-b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h(annotated)f
-(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227 835
-y(AST)p Ft(_)p Fk(GRID)d(routine\))e(b)n(y)h(determining)g(the)g
-(linear)f(in)n(terv)-5 b(al)25 b(b)r(et)n(w)n(een)h(the)g
-Ft(")p Fk(ma)5 b(jor)p Ft(")24 b Fk(axis)h(v)-5 b(alues)25
-b(of)h(a)f(Plot,)227 934 y(at)33 b(whic)n(h)h(\(for)f(example\))g(ma)5
-b(jor)32 b(tic)n(k)h(marks)g(are)f(dra)n(wn.)53 b(It)34
-b(tak)n(es)e(a)h(separate)f(v)-5 b(alue)33 b(for)g(eac)n(h)f(ph)n
-(ysical)227 1034 y(axis)i(of)g(the)h(Plot)f(so)f(that,)k(for)c
-(instance,)j(the)f(setting)f Ft(")p Fk(Gap\(2\)=3.0)p
-Ft(")e Fk(sp)r(eci\014es)j(the)f(di\013erence)h(b)r(et)n(w)n(een)227
-1134 y(adjacen)n(t)30 b(ma)5 b(jor)30 b(v)-5 b(alues)30
-b(along)f(the)i(second)f(axis.)45 b(The)31 b(Gap)g(attribute)f(is)h
-(only)f(used)h(when)f(the)h(LogTic)n(ks)227 1233 y(attribute)c
-(indicates)f(that)h(the)g(spacing)e(b)r(et)n(w)n(een)i(ma)5
-b(jor)25 b(axis)h(v)-5 b(alues)26 b(is)g(to)h(b)r(e)f(linear.)36
-b(If)27 b(ma)5 b(jor)25 b(axis)h(v)-5 b(alues)227 1333
-y(are)27 b(logarithmically)f(spaced)h(then)h(the)g(gap)f(is)g(sp)r
-(eci\014ed)h(using)f(attribute)h(LogGap.)227 1449 y(The)35
-b(Gap)f(v)-5 b(alue)35 b(supplied)g(will)f(usually)h(b)r(e)g(rounded)f
-(to)g(the)h(nearest)f Ft(")p Fk(nice)p Ft(")f Fk(v)-5
-b(alue,)37 b(suitable)d(\(e.g.\))58 b(for)227 1549 y(generating)26
-b(axis)g(lab)r(els,)h(b)r(efore)g(use.)36 b(T)-7 b(o)27
-b(a)n(v)n(oid)e(this)i Ft(")p Fk(nicing)p Ft(")f Fk(y)n(ou)h(should)f
-(set)h(an)g(explicit)g(format)g(for)f(the)227 1649 y(axis)g(using)h
-(the)g(F)-7 b(ormat\(axis\))26 b(or)g(Digits/Digits\(axis\))h
-(attribute.)37 b(The)27 b(default)g(b)r(eha)n(viour)f(is)g(for)h(the)g
-(Plot)227 1748 y(to)g(generate)f(its)h(o)n(wn)g(Gap)g(v)-5
-b(alue)27 b(when)g(required,)f(based)h(on)g(the)g(range)f(of)h(axis)f
-(v)-5 b(alues)27 b(to)g(b)r(e)h(represen)n(ted.)0 1881
-y Fc(T)m(yp)s(e:)227 1981 y Fk(Floating)f(p)r(oin)n(t.)0
-2114 y Fc(Class)k(Applicabilit)m(y:)259 2234 y(Plot)427
-2334 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-2480 y Fc(Notes:)340 2746 y Fj(\017)45 b Fk(The)27 b(Gap)f(v)-5
-b(alue)27 b(should)f(use)g(the)h(same)f(units)h(as)f(are)g(used)g(in)n
-(ternally)g(for)g(storing)g(co)r(ordinate)f(v)-5 b(alues)427
-2845 y(on)32 b(the)h(corresp)r(onding)d(axis.)50 b(F)-7
-b(or)32 b(example,)h(with)g(a)f(celestial)g(co)r(ordinate)f(system,)i
-(the)g(Gap)f(v)-5 b(alue)427 2945 y(should)28 b(b)r(e)g(in)f(radians,)g
-(not)g(hours)g(or)g(degrees.)340 3062 y Fj(\017)45 b
-Fk(If)32 b(no)f(axis)g(is)g(sp)r(eci\014ed,)i(\(e.g.)48
-b Ft(")p Fk(Gap)p Ft(")30 b Fk(instead)h(of)h Ft(")p
-Fk(Gap\(2\))p Ft(")p Fk(\),)f(then)h(a)f Ft(")p Fk(set)p
-Ft(")g Fk(or)f Ft(")p Fk(clear)p Ft(")g Fk(op)r(eration)427
-3161 y(will)f(a\013ect)g(the)g(attribute)g(v)-5 b(alue)28
-b(of)h(all)f(the)h(Plot)f(axes,)g(while)h(a)f Ft(")p
-Fk(get)p Ft(")g Fk(or)f Ft(")p Fk(test)p Ft(")h Fk(op)r(eration)g(will)
-h(use)427 3261 y(just)f(the)g(Gap\(1\))g(v)-5 b(alue.)p
-0 3427 V 0 3559 a FA(Grf)338 b Fd(Use)39 b(Grf)f(routines)f(registered)
-g(through)g(AST)p Fe(_)p Fd(GRFSET?)337 b FA(Grf)0 3715
-y Fc(Description:)44 b Fk(This)25 b(attribute)h(selects)e(the)i
-(routines)e(whic)n(h)h(are)f(used)h(to)g(dra)n(w)f(graphics)f(b)n(y)i
-(the)g(Plot)g(class.)35 b(If)25 b(it)227 3815 y(is)k(zero,)g(then)h
-(the)f(routines)g(in)g(the)h(graphics)e(in)n(terface)g(selected)i(at)f
-(link-time)g(are)f(used)i(\(see)f(the)g(ast)p Ft(_)p
-Fk(link)227 3915 y(script\).)57 b(Otherwise,)35 b(routines)e
-(registered)g(using)g(AST)p Ft(_)p Fk(GRFSET)i(are)e(used.)56
-b(In)34 b(this)h(case,)g(if)f(a)g(routine)227 4014 y(is)k(needed)g
-(whic)n(h)f(has)h(not)f(b)r(een)h(registered,)h(then)f(the)g(routine)g
-(in)g(the)g(graphics)e(in)n(terface)h(selected)h(at)227
-4114 y(link-time)28 b(is)g(used.)227 4230 y(The)g(default)g(is)f(to)h
-(use)f(the)h(graphics)f(in)n(terface)0 4364 y Fc(T)m(yp)s(e:)227
-4463 y Fk(In)n(teger)g(\(b)r(o)r(olean\).)0 4596 y Fc(Class)k
-(Applicabilit)m(y:)259 4716 y(Plot)427 4816 y Fk(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)259 4933 y Fc(Plot3D)427 5032
-y Fk(The)h(Plot3D)f(class)g(ignores)f(this)h(attributes,)h(assuming)f
-(a)g(v)-5 b(alue)27 b(of)h(zero.)0 5178 y Fc(Notes:)340
-5444 y Fj(\017)45 b Fk(The)31 b(v)-5 b(alue)31 b(of)g(this)g(attribute)
-h(is)e(not)h(sa)n(v)n(ed)f(when)h(the)h(Plot)e(is)h(written)g(out)g
-(through)f(a)h(Channel)g(to)427 5544 y(an)h(external)f(data)g(store.)49
-b(On)32 b(re-loading)e(suc)n(h)h(a)h(Plot)f(using)h(AST)p
-Ft(_)p Fk(READ,)g(the)g(attribute)g(will)g(b)r(e)427
-5643 y(cleared,)27 b(resulting)g(in)h(the)g(graphics)e(in)n(terface)h
-(selected)g(at)h(link-time)g(b)r(eing)f(used.)p eop end
-%%Page: 414 424
-TeXDict begin 414 423 bop 0 52 a FG(414)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a FA(Grid)932 b Fd(Dra)m(w)38 b(grid)f(lines)i(for)e(a)
-i(Plot?)931 b FA(Grid)0 700 y Fc(Description:)44 b Fk(This)30
-b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h(annotated)f
-(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227 800
-y(AST)p Ft(_)p Fk(GRID)38 b(routine\))g(b)n(y)f(determining)g(whether)g
-(grid)g(lines)g(\(a)h(grid)e(of)i(curv)n(es)e(marking)g(the)i
-Ft(")p Fk(ma)5 b(jor)p Ft(")227 900 y Fk(v)-5 b(alues)27
-b(on)h(eac)n(h)f(axis\))g(are)f(dra)n(wn)h(across)f(the)h(plotting)h
-(area.)227 1036 y(If)h(the)g(Grid)f(v)-5 b(alue)28 b(of)h(a)f(Plot)f
-(is)i(non-zero,)e(then)i(grid)e(lines)i(will)f(b)r(e)h(dra)n(wn.)38
-b(Otherwise,)28 b(short)g(tic)n(k)g(marks)227 1136 y(on)g(the)h(axes)e
-(are)g(used)h(to)g(mark)g(the)g(ma)5 b(jor)27 b(axis)h(v)-5
-b(alues.)38 b(The)28 b(default)h(b)r(eha)n(viour)e(is)h(to)g(use)g(tic)
-n(k)g(marks)f(if)227 1235 y(the)h(en)n(tire)f(plotting)h(area)e(is)i
-(\014lled)g(b)n(y)f(v)-5 b(alid)28 b(ph)n(ysical)e(co)r(ordinates,)g
-(but)j(to)e(dra)n(w)g(grid)g(lines)g(otherwise.)0 1409
-y Fc(T)m(yp)s(e:)227 1508 y Fk(In)n(teger)g(\(b)r(o)r(olean\).)0
-1682 y Fc(Class)k(Applicabilit)m(y:)259 1842 y(Plot)427
-1942 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-2128 y Fc(Notes:)340 2434 y Fj(\017)45 b Fk(The)31 b(spacing)f(b)r(et)n
-(w)n(een)g(ma)5 b(jor)30 b(axis)g(v)-5 b(alues,)31 b(whic)n(h)f
-(determines)h(the)g(spacing)e(of)i(grid)f(lines,)h(ma)n(y)f(b)r(e)427
-2534 y(set)e(using)f(the)h(Gap\(axis\))f(attribute.)p
-0 2757 V 0 2889 a FA(GrismAlpha)181 b Fd(The)39 b(angle)e(of)i
-(incidence)f(of)g(the)h(incoming)1194 3003 y(ligh)m(t)d(on)j(the)g
-(grating)d(surface)3063 2889 y FA(GrismAlpha)0 3216 y
-Fc(Description:)44 b Fk(This)29 b(attribute)f(holds)g(the)h(angle)f(b)r
-(et)n(w)n(een)g(the)h(incoming)f(ligh)n(t)g(and)g(the)h(normal)e(to)h
-(the)h(grating)227 3316 y(surface,)e(in)h(radians.)35
-b(The)28 b(default)g(v)-5 b(alue)28 b(is)f(0.)0 3489
-y Fc(T)m(yp)s(e:)227 3589 y Fk(Double)h(precision.)0
-3762 y Fc(Class)j(Applicabilit)m(y:)259 3923 y(GrismMap)427
-4022 y Fk(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 4246 V 0 4377 a FA(GrismEps)317 b Fd(The)39 b(angle)f(b)s(et)m(w)m
-(een)g(the)g(normal)f(and)i(the)1478 4492 y(disp)s(ersion)f(plane)3200
-4377 y FA(GrismEps)0 4709 y Fc(Description:)44 b Fk(This)22
-b(attribute)g(holds)f(the)i(angle)d(\(in)j(radians\))d(b)r(et)n(w)n
-(een)i(the)g(normal)f(to)h(the)g(grating)e(or)h(exit)h(prism)227
-4809 y(face,)36 b(and)e(the)g(disp)r(ersion)f(plane.)56
-b(The)34 b(disp)r(ersion)f(plane)h(is)g(the)h(plane)e(spanned)h(b)n(y)g
-(the)g(incoming)g(and)227 4909 y(outgoing)27 b(ra)n(y)-7
-b(.)35 b(The)28 b(default)g(v)-5 b(alue)27 b(is)h(0.0.)0
-5082 y Fc(T)m(yp)s(e:)227 5182 y Fk(Double)g(precision.)0
-5355 y Fc(Class)j(Applicabilit)m(y:)259 5515 y(GrismMap)427
-5615 y Fk(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-eop end
-%%Page: 415 425
-TeXDict begin 415 424 bop 3643 52 a FG(415)p 0 351 3780
-12 v 0 483 a FA(GrismG)747 b Fd(The)39 b(grating)d(ruling)h(densit)m(y)
-747 b FA(GrismG)0 675 y Fc(Description:)44 b Fk(This)34
-b(attribute)g(holds)f(the)h(n)n(um)n(b)r(er)g(of)f(grating)g(rulings)g
-(p)r(er)g(unit)i(length.)55 b(The)34 b(unit)g(of)g(length)227
-775 y(used)i(should)f(b)r(e)h(consisten)n(t)f(with)h(the)f(units)h
-(used)g(for)e(attributes)i(GrismW)-7 b(a)n(v)n(eR)34
-b(and)h(GrismNRP)-7 b(.)36 b(The)227 875 y(default)28
-b(v)-5 b(alue)28 b(is)f(0.0.)36 b(\(the)29 b(appropriate)c(v)-5
-b(alue)28 b(for)f(a)g(pure)h(prism)f(disp)r(erser)f(with)j(no)e
-(grating\).)0 1028 y Fc(T)m(yp)s(e:)227 1127 y Fk(Double)h(precision.)0
-1280 y Fc(Class)j(Applicabilit)m(y:)259 1420 y(GrismMap)427
-1520 y Fk(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 1723 V 0 1854 a FA(GrismM)830 b Fd(The)38 b(in)m(terference)f(order)
-829 b FA(GrismM)0 2023 y Fc(Description:)44 b Fk(This)28
-b(attribute)g(holds)f(the)h(in)n(terference)f(order)f(b)r(eing)i
-(considered.)36 b(The)27 b(default)h(v)-5 b(alue)28 b(is)f(0.)0
-2176 y Fc(T)m(yp)s(e:)227 2276 y Fk(In)n(teger.)0 2429
-y Fc(Class)k(Applicabilit)m(y:)259 2569 y(GrismMap)427
-2669 y Fk(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 2871 V 0 3003 a FA(GrismNR)387 b Fd(The)39 b(refractiv)m(e)d(index)i
-(at)g(the)h(reference)1607 3103 y(w)m(a)m(v)m(elength)3211
-3003 y FA(GrismNR)0 3295 y Fc(Description:)44 b Fk(This)36
-b(attribute)f(holds)g(refractiv)n(e)f(index)h(of)h(the)f(grism)g
-(material)f(at)h(the)h(reference)e(w)n(a)n(v)n(elength)227
-3395 y(\(giv)n(en)27 b(b)n(y)h(attribute)f(GrismW)-7
-b(a)n(v)n(eR\).)27 b(The)h(default)g(v)-5 b(alue)27 b(is)h(1.0.)0
-3548 y Fc(T)m(yp)s(e:)227 3647 y Fk(Double)g(precision.)0
-3800 y Fc(Class)j(Applicabilit)m(y:)259 3940 y(GrismMap)427
-4040 y Fk(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 4243 V 0 4374 a FA(GrismNRP)266 b Fd(The)38 b(rate)g(of)g(c)m(hange)g
-(of)g(refractiv)m(e)e(index)1474 4489 y(with)h(w)m(a)m(v)m(elength)3119
-4374 y FA(GrismNRP)0 4681 y Fc(Description:)44 b Fk(This)28
-b(attribute)g(holds)g(the)g(rate)f(of)h(c)n(hange)f(of)h(the)g
-(refractiv)n(e)f(index)h(of)g(the)g(grism)f(material)g(with)227
-4781 y(resp)r(ect)i(to)g(w)n(a)n(v)n(elength)e(at)i(the)g(reference)f
-(w)n(a)n(v)n(elength)f(\(giv)n(en)h(b)n(y)h(attribute)g(GrismW)-7
-b(a)n(v)n(eR\).)28 b(The)h(default)227 4880 y(v)-5 b(alue)31
-b(is)f(0.0)f(\(the)j(appropriate)c(v)-5 b(alue)31 b(for)e(a)h(pure)h
-(grating)e(disp)r(erser)g(with)i(no)f(prism\).)46 b(The)30
-b(units)h(of)f(this)227 4980 y(attribute)e(should)f(b)r(e)h(consisten)n
-(t)f(with)i(those)e(of)g(attributes)h(GrismW)-7 b(a)n(v)n(eR)26
-b(and)i(GrismG.)0 5133 y Fc(T)m(yp)s(e:)227 5233 y Fk(Double)g
-(precision.)0 5386 y Fc(Class)j(Applicabilit)m(y:)259
-5526 y(GrismMap)427 5625 y Fk(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g
-(attribute.)p eop end
-%%Page: 416 426
-TeXDict begin 416 425 bop 0 52 a FG(416)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a FA(GrismTheta)152 b Fd(Angle)38 b(b)s(et)m(w)m(een)g
-(normal)f(to)h(detector)f(plane)1449 598 y(and)i(reference)f(ra)m(y)
-3069 483 y FA(GrismTheta)0 774 y Fc(Description:)44 b
-Fk(This)30 b(attribute)g(giv)n(es)f(the)h(angle)f(of)h(incidence)g(of)g
-(ligh)n(t)f(of)h(the)g(reference)f(w)n(a)n(v)n(elength)g(\(giv)n(en)g
-(b)n(y)227 874 y(attribute)d(GrismW)-7 b(a)n(v)n(eR\))25
-b(on)n(to)g(the)h(detector.)36 b(Sp)r(eci\014cally)-7
-b(,)26 b(it)h(holds)e(the)h(angle)f(\(in)i(radians\))d(b)r(et)n(w)n
-(een)i(the)227 974 y(normal)f(to)h(the)g(detector)f(plane)g(and)h(an)g
-(inciden)n(t)g(ra)n(y)e(at)i(the)g(reference)f(w)n(a)n(v)n(elength.)34
-b(The)26 b(default)g(v)-5 b(alue)26 b(is)227 1073 y(0.0.)0
-1214 y Fc(T)m(yp)s(e:)227 1314 y Fk(Double)i(precision.)0
-1455 y Fc(Class)j(Applicabilit)m(y:)259 1583 y(GrismMap)427
-1683 y Fk(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 1865 V 0 1997 a FA(GrismW)-11 b(a)l(v)l(eR)461 b Fd(The)39
-b(reference)f(w)m(a)m(v)m(elength)456 b FA(GrismW)-11
-b(a)l(v)l(eR)0 2174 y Fc(Description:)44 b Fk(This)34
-b(attribute)g(holds)f(reference)g(w)n(a)n(v)n(elength.)54
-b(The)34 b(default)g(v)-5 b(alue)34 b(is)f(5000)f(\(Angstrom\).)56
-b(The)227 2273 y(units)28 b(of)g(this)g(attribute)g(should)f(b)r(e)h
-(consisten)n(t)f(with)h(those)f(of)h(attributes)f(GrismNRP)h(and)f
-(GrismG.)0 2414 y Fc(T)m(yp)s(e:)227 2514 y Fk(Double)h(precision.)0
-2655 y Fc(Class)j(Applicabilit)m(y:)259 2783 y(GrismMap)427
-2883 y Fk(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 3066 V 0 3196 a FA(ID)1197 3197 y Fd(Ob)7 b(ject)38
-b(iden)m(ti\014cation)d(string)3626 3196 y FA(ID)0 3369
-y Fc(Description:)44 b Fk(This)30 b(attribute)g(con)n(tains)f(a)h
-(string)f(whic)n(h)h(ma)n(y)f(b)r(e)h(used)g(to)g(iden)n(tify)h(the)f
-(Ob)5 b(ject)30 b(to)g(whic)n(h)f(it)i(is)227 3469 y(attac)n(hed.)36
-b(There)26 b(is)g(no)g(restriction)g(on)g(the)h(con)n(ten)n(ts)e(of)i
-(this)f(string,)g(whic)n(h)h(is)f(not)g(used)h(in)n(ternally)e(b)n(y)h
-(the)227 3569 y(AST)h(library)-7 b(,)25 b(and)g(is)h(simply)g(returned)
-f(without)h(c)n(hange)f(when)h(required.)35 b(The)26
-b(default)h(v)-5 b(alue)25 b(is)h(an)g(empt)n(y)227 3668
-y(string.)227 3789 y(An)34 b(iden)n(ti\014cation)g(string)f(can)g(b)r
-(e)h(v)-5 b(aluable)33 b(when,)j(for)d(example,)i(sev)n(eral)d(Ob)5
-b(jects)33 b(ha)n(v)n(e)f(b)r(een)j(stored)d(in)227 3888
-y(a)d(\014le)h(\(using)f(AST)p Ft(_)p Fk(WRITE\))g(and)g(are)g(later)f
-(retriev)n(ed)g(\(using)h(AST)p Ft(_)p Fk(READ\).)h(Consisten)n(t)f
-(use)g(of)g(the)h(ID)227 3988 y(attribute)j(allo)n(ws)d(the)j(retriev)n
-(ed)e(Ob)5 b(jects)31 b(to)h(b)r(e)h(iden)n(ti\014ed)f(without)h(dep)r
-(ending)f(simply)g(on)g(the)h(order)d(in)227 4087 y(whic)n(h)e(they)g
-(w)n(ere)e(stored.)227 4208 y(This)37 b(attribute)g(ma)n(y)f(also)g(b)r
-(e)h(useful)h(during)e(debugging,)j(to)d(distinguish)h(similar)f(Ob)5
-b(jects)37 b(when)g(using)227 4307 y(AST)p Ft(_)p Fk(SHO)n(W)28
-b(to)f(displa)n(y)g(them.)0 4449 y Fc(T)m(yp)s(e:)227
-4548 y Fk(String.)0 4689 y Fc(Class)k(Applicabilit)m(y:)259
-4817 y(Ob)5 b(ject)427 4917 y Fk(All)28 b(Ob)5 b(jects)28
-b(ha)n(v)n(e)e(this)i(attribute.)0 5071 y Fc(Notes:)340
-5345 y Fj(\017)45 b Fk(Unlik)n(e)25 b(most)h(other)e(attributes,)i(the)
-f(v)-5 b(alue)25 b(of)h(the)f(ID)h(attribute)f(is)g(not)h(transferred)d
-(when)j(an)f(Ob)5 b(ject)427 5444 y(is)31 b(copied.)45
-b(Instead,)31 b(its)g(v)-5 b(alue)30 b(is)h(unde\014ned)g(\(and)g
-(therefore)e(defaults)i(to)g(an)f(empt)n(y)g(string\))h(in)f(an)n(y)427
-5544 y(cop)n(y)-7 b(.)53 b(Ho)n(w)n(ev)n(er,)33 b(it)h(is)f(retained)f
-(in)i(an)n(y)e(external)h(represen)n(tation)e(of)i(an)g(Ob)5
-b(ject)33 b(pro)r(duced)g(b)n(y)g(the)427 5644 y(AST)p
-Ft(_)p Fk(WRITE)28 b(routine.)p eop end
-%%Page: 417 427
-TeXDict begin 417 426 bop 3643 52 a FG(417)p 0 351 3780
-12 v 0 482 a FA(IF)437 483 y Fd(The)39 b(in)m(termediate)c(frequency)j
-(in)h(a)g(dual)f(sideband)g(sp)s(ectrum)3645 482 y FA(IF)0
-687 y Fc(Description:)44 b Fk(This)26 b(attribute)h(sp)r(eci\014es)f
-(the)g(\(top)r(o)r(cen)n(tric\))g(in)n(termediate)g(frequency)g(in)g(a)
-g(dual)g(sideband)g(sp)r(ec-)227 786 y(trum.)41 b(Its)29
-b(sole)g(use)g(is)f(to)h(determine)g(the)h(lo)r(cal)e(oscillator)f
-(\(LO\))i(frequency)g(\(the)g(frequency)g(whic)n(h)g(marks)227
-886 y(the)h(b)r(oundary)f(b)r(et)n(w)n(een)g(the)h(lo)n(w)n(er)d(and)j
-(upp)r(er)f(sidebands\).)42 b(The)29 b(LO)g(frequency)g(is)g(equal)g
-(to)g(the)h(sum)g(of)227 985 y(the)d(cen)n(tre)f(frequency)g(and)g(the)
-h(in)n(termediate)f(frequency)-7 b(.)36 b(Here,)26 b(the)h
-Ft(")p Fk(cen)n(tre)e(frequency)p Ft(")h Fk(is)g(the)h(top)r(o)r(cen-)
-227 1085 y(tric)h(frequency)g(in)g(Hz)g(corresp)r(onding)e(to)i(the)h
-(curren)n(t)e(v)-5 b(alue)28 b(of)g(the)g(DSBCen)n(tre)g(attribute.)39
-b(The)28 b(v)-5 b(alue)28 b(of)227 1185 y(the)33 b(IF)f(attribute)g(ma)
-n(y)f(b)r(e)i(p)r(ositiv)n(e)e(or)g(negativ)n(e:)45 b(a)31
-b(p)r(ositiv)n(e)h(v)-5 b(alue)32 b(results)f(in)h(the)h(LO)e
-(frequency)h(b)r(eing)227 1284 y(ab)r(o)n(v)n(e)23 b(the)h(cen)n(tral)f
-(frequency)-7 b(,)24 b(whilst)g(a)g(negativ)n(e)f(IF)h(v)-5
-b(alue)23 b(results)h(in)g(the)g(LO)f(frequency)h(b)r(eing)g(b)r(elo)n
-(w)f(the)227 1384 y(cen)n(tral)g(frequency)-7 b(.)36
-b(The)24 b(sign)f(of)h(the)g(IF)h(attribute)f(v)-5 b(alue)24
-b(determines)f(the)i(default)f(v)-5 b(alue)24 b(for)f(the)i(SideBand)
-227 1484 y(attribute.)227 1613 y(When)g(setting)f(a)f(new)h(v)-5
-b(alue)24 b(for)f(this)h(attribute,)h(the)g(units)f(in)g(whic)n(h)g
-(the)g(frequency)g(v)-5 b(alue)23 b(is)h(supplied)g(ma)n(y)227
-1713 y(b)r(e)j(indicated)g(b)n(y)f(app)r(ending)h(a)f(suitable)h
-(string)e(to)i(the)g(end)g(of)f(the)h(formatted)g(v)-5
-b(alue.)36 b(If)27 b(the)g(units)g(are)f(not)227 1813
-y(sp)r(eci\014ed,)35 b(then)f(the)g(supplied)f(v)-5 b(alue)33
-b(is)g(assumed)g(to)g(b)r(e)h(in)f(units)h(of)f(GHz.)54
-b(F)-7 b(or)33 b(instance,)h(the)g(follo)n(wing)227 1912
-y(strings)27 b(all)g(result)h(in)f(an)h(IF)g(of)f(4)g(GHz)h(b)r(eing)g
-(used:)37 b Ft(")p Fk(4.0)p Ft(")p Fk(,)26 b Ft(")p Fk(4.0)g(GHz)p
-Ft(")p Fk(,)i Ft(")p Fk(4.0E9)d(Hz)p Ft(")p Fk(,)j(etc.)227
-2042 y(When)d(getting)g(the)g(v)-5 b(alue)24 b(of)h(this)g(attribute,)g
-(the)g(returned)f(v)-5 b(alue)25 b(is)f(alw)n(a)n(ys)f(in)i(units)g(of)
-f(GHz.)37 b(The)24 b(default)227 2141 y(v)-5 b(alue)28
-b(for)f(this)h(attribute)f(is)h(4)f(GHz.)0 2301 y Fc(T)m(yp)s(e:)227
-2401 y Fk(Floating)g(p)r(oin)n(t.)0 2560 y Fc(Class)k(Applicabilit)m
-(y:)259 2707 y(DSBSp)s(ecF)-8 b(rame)427 2807 y Fk(All)28
-b(DSBSp)r(ecF)-7 b(rames)28 b(ha)n(v)n(e)e(this)i(attribute.)p
-0 3016 V 0 3148 a FA(Iden)l(t)591 b Fd(P)m(ermanen)m(t)37
-b(Ob)7 b(ject)37 b(iden)m(ti\014cation)f(string)589 b
-FA(Iden)l(t)0 3347 y Fc(Description:)44 b Fk(This)30
-b(attribute)f(is)g(lik)n(e)g(the)h(ID)g(attribute,)f(in)h(that)g(it)f
-(con)n(tains)g(a)f(string)h(whic)n(h)g(ma)n(y)g(b)r(e)g(used)h(to)227
-3446 y(iden)n(tify)c(the)f(Ob)5 b(ject)25 b(to)g(whic)n(h)g(it)h(is)f
-(attac)n(hed.)35 b(The)25 b(only)g(di\013erence)g(b)r(et)n(w)n(een)g
-(ID)h(and)f(Iden)n(t)g(is)g(that)g(Iden)n(t)227 3546
-y(is)j(transferred)e(when)i(an)f(Ob)5 b(ject)27 b(is)h(copied,)f(but)i
-(ID)f(is)f(not.)0 3706 y Fc(T)m(yp)s(e:)227 3805 y Fk(String.)0
-3965 y Fc(Class)k(Applicabilit)m(y:)259 4112 y(Ob)5 b(ject)427
-4211 y Fk(All)28 b(Ob)5 b(jects)28 b(ha)n(v)n(e)e(this)i(attribute.)p
-0 4421 V 0 4551 a FA(ImagF)-11 b(req)816 4552 y Fd(The)39
-b(image)e(sideband)h(equiv)-7 b(alen)m(t)37 b(of)i(the)f(rest)1644
-4667 y(frequency)3224 4551 y FA(ImagF)-11 b(req)0 4866
-y Fc(Description:)44 b Fk(This)24 b(is)g(a)g(read-only)e(attribute)i
-(giving)f(the)i(frequency)e(whic)n(h)h(corresp)r(onds)e(to)i(the)h
-(rest)e(frequency)227 4966 y(but)28 b(is)g(in)g(the)g(opp)r(osite)f
-(sideband.)227 5095 y(The)i(v)-5 b(alue)29 b(is)g(calculated)f(b)n(y)h
-(\014rst)f(transforming)g(the)h(rest)f(frequency)h(\(giv)n(en)f(b)n(y)g
-(the)i(RestF)-7 b(req)28 b(attribute\))227 5195 y(from)f(the)g
-(standard)f(of)h(rest)f(of)h(the)g(source)f(\(giv)n(en)g(b)n(y)h(the)g
-(SourceV)-7 b(el)26 b(and)h(SourceVRF)f(attributes\))h(to)g(the)227
-5295 y(standard)i(of)h(rest)f(of)h(the)g(observ)n(er)e(\(i.e.)44
-b(the)30 b(top)r(o)r(cen)n(tric)f(standard)g(of)h(rest\).)43
-b(The)30 b(resulting)f(top)r(o)r(cen)n(tric)227 5394
-y(frequency)h(is)g(assumed)g(to)g(b)r(e)h(in)f(the)h(same)f(sideband)g
-(as)g(the)g(v)-5 b(alue)30 b(giv)n(en)g(for)g(the)g(DSBCen)n(tre)g
-(attribute)227 5494 y(\(the)c Ft(")p Fk(observ)n(ed)p
-Ft(")d Fk(sideband\),)j(and)f(is)h(transformed)e(to)h(the)h(other)e
-(sideband)i(\(the)g Ft(")p Fk(image)p Ft(")d Fk(sideband\).)37
-b(The)227 5593 y(new)32 b(frequency)f(is)h(con)n(v)n(erted)f(bac)n(k)f
-(to)i(the)g(standard)f(of)h(rest)f(of)h(the)g(source,)g(and)g(the)g
-(resulting)f(v)-5 b(alue)32 b(is)227 5693 y(returned)27
-b(as)g(the)h(attribute)g(v)-5 b(alue,)28 b(in)g(units)g(of)f(GHz.)p
-eop end
-%%Page: 418 428
-TeXDict begin 418 427 bop 0 52 a FG(418)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fc(T)m(yp)s(e:)227 451 y Fk(Floating)c(p)r(oin)n(t,)h(read-only)-7
-b(.)0 602 y Fc(Class)31 b(Applicabilit)m(y:)259 740 y(DSBSp)s(ecF)-8
-b(rame)427 840 y Fk(All)28 b(DSBSp)r(ecF)-7 b(rames)28
-b(ha)n(v)n(e)e(this)i(attribute.)p 0 1041 3780 12 v 0
-1173 a FA(In)l(traFlag)582 b Fd(In)m(traMap)37 b(iden)m(ti\014cation)f
-(string)578 b FA(In)l(traFlag)0 1363 y Fc(Description:)44
-b Fk(This)32 b(attribute)g(allo)n(ws)e(an)h(In)n(traMap)f(to)i(b)r(e)g
-(\015agged)e(so)h(that)h(it)f(is)h(distinguishable)f(from)g(other)227
-1463 y(In)n(traMaps.)36 b(The)28 b(transformation)e(routine)i(asso)r
-(ciated)e(with)i(the)g(In)n(traMap)f(ma)n(y)g(then)h(enquire)g(the)g(v)
--5 b(alue)227 1563 y(of)34 b(this)g(attribute)h(and)e(adapt)h(the)g
-(transformation)f(it)h(pro)n(vides)f(according)f(to)i(the)g(particular)
-f(In)n(traMap)227 1662 y(in)n(v)n(olv)n(ed.)227 1788
-y(Although)28 b(this)h(is)f(a)g(string)f(attribute,)h(it)h(ma)n(y)e
-(often)i(b)r(e)f(useful)h(to)f(store)f(n)n(umerical)g(v)-5
-b(alues)28 b(here,)g(enco)r(ded)227 1887 y(as)h(a)f(c)n(haracter)f
-(string,)i(and)g(to)g(use)g(these)g(as)g(data)f(within)i(the)g
-(transformation)d(routine.)41 b(Note,)30 b(ho)n(w)n(ev)n(er,)227
-1987 y(that)f(this)f(mec)n(hanism)f(is)h(not)g(suitable)g(for)g
-(transferring)e(large)g(amoun)n(ts)i(of)f(data)h(\(more)f(than)i(ab)r
-(out)e(1000)227 2087 y(c)n(haracters\))33 b(to)h(an)h(In)n(traMap.)57
-b(F)-7 b(or)34 b(that)h(purp)r(ose,)h(global)d(v)-5 b(ariables)34
-b(are)f(recommended,)j(although)e(the)227 2186 y(In)n(traFlag)24
-b(v)-5 b(alue)25 b(can)f(b)r(e)i(used)f(to)g(supplemen)n(t)g(this)h
-(approac)n(h.)34 b(The)25 b(default)g(In)n(traFlag)f(v)-5
-b(alue)25 b(is)g(an)g(empt)n(y)227 2286 y(string.)0 2437
-y Fc(T)m(yp)s(e:)227 2537 y Fk(String.)0 2688 y Fc(Class)31
-b(Applicabilit)m(y:)259 2826 y(In)m(traMap)427 2926 y
-Fk(All)d(In)n(traMaps)f(ha)n(v)n(e)f(this)i(attribute.)0
-3090 y Fc(Notes:)340 3374 y Fj(\017)45 b Fk(A)34 b(pair)f(of)g(In)n
-(traMaps)f(whose)h(transformations)e(ma)n(y)i(p)r(oten)n(tially)g
-(cancel)g(cannot)g(b)r(e)h(simpli\014ed)g(to)427 3473
-y(pro)r(duce)22 b(a)f(UnitMap)i(\(e.g.)35 b(using)21
-b(AST)p Ft(_)p Fk(SIMPLIFY\))i(unless)f(they)g(ha)n(v)n(e)f(the)h(same)
-f(In)n(traFlag)g(v)-5 b(alues.)427 3573 y(The)28 b(test)g(for)f
-(equalit)n(y)g(is)g(case-sensitiv)n(e.)p 0 3774 V 0 3905
-a FA(In)l(v)l(ert)1307 3906 y Fd(Mapping)38 b(in)m(v)m(ersion)f(\015ag)
-3423 3905 y FA(In)l(v)l(ert)0 4096 y Fc(Description:)44
-b Fk(This)25 b(attribute)g(con)n(trols)e(whic)n(h)i(one)f(of)h(a)f
-(Mapping's)h(t)n(w)n(o)f(p)r(ossible)g(co)r(ordinate)g(transformations)
-227 4196 y(is)29 b(considered)e(the)i Ft(")p Fk(forw)n(ard)p
-Ft(")d Fk(transformation)g(\(the)j(other)f(b)r(eing)h(the)f
-Ft(")p Fk(in)n(v)n(erse)p Ft(")f Fk(transformation\).)37
-b(If)29 b(the)227 4296 y(attribute)36 b(v)-5 b(alue)36
-b(is)f(zero)g(\(the)h(default\),)j(the)d(Mapping's)f(b)r(eha)n(viour)f
-(will)i(b)r(e)g(the)g(same)g(as)f(when)g(it)i(w)n(as)227
-4395 y(\014rst)29 b(created.)39 b(Ho)n(w)n(ev)n(er,)27
-b(if)i(it)g(is)g(non-zero,)e(its)i(t)n(w)n(o)f(transformations)f(will)i
-(b)r(e)g(in)n(ter-c)n(hanged,)e(so)h(that)h(the)227 4495
-y(Mapping)f(displa)n(ys)e(the)i(in)n(v)n(erse)e(of)i(its)f(original)g
-(b)r(eha)n(viour.)227 4620 y(In)n(v)n(erting)k(the)h(b)r(o)r(olean)g
-(sense)f(of)h(the)g(In)n(v)n(ert)f(attribute)h(will)h(cause)e(the)h(v)
--5 b(alues)32 b(of)f(a)h(Mapping's)f(Nin)i(and)227 4720
-y(Nout)25 b(attributes)g(to)g(b)r(e)g(in)n(terc)n(hanged.)34
-b(The)25 b(v)-5 b(alues)25 b(of)f(its)h(T)-7 b(ranF)g(orw)n(ard)23
-b(and)h(T)-7 b(ranIn)n(v)n(erse)23 b(attributes)h(will)227
-4820 y(also)j(b)r(e)h(in)n(terc)n(hanged.)35 b(This)28
-b(op)r(eration)e(ma)n(y)h(b)r(e)h(p)r(erformed)f(with)h(the)g(AST)p
-Ft(_)p Fk(INVER)-7 b(T)28 b(routine.)0 4971 y Fc(T)m(yp)s(e:)227
-5071 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0 5222 y Fc(Class)k
-(Applicabilit)m(y:)259 5360 y(Mapping)427 5460 y Fk(All)d(Mappings)f
-(ha)n(v)n(e)g(this)h(attribute.)259 5593 y Fc(UnitMap)427
-5693 y Fk(The)g(v)-5 b(alue)27 b(of)h(the)g(In)n(v)n(ert)f(attribute)g
-(has)g(no)h(e\013ect)g(on)f(the)h(b)r(eha)n(viour)e(of)i(a)f(UnitMap.)p
-eop end
-%%Page: 419 429
-TeXDict begin 419 428 bop 3643 52 a FG(419)259 351 y
-Fc(F)-8 b(rameSet)427 451 y Fk(In)n(v)n(erting)35 b(the)h(b)r(o)r
-(olean)e(sense)h(of)h(the)g(In)n(v)n(ert)f(attribute)g(for)g(a)g(F)-7
-b(rameSet)36 b(will)f(cause)g(its)h(base)f(and)427 551
-y(curren)n(t)25 b(F)-7 b(rames)25 b(\(and)h(its)f(Base)g(and)g(Curren)n
-(t)g(attributes\))h(to)f(b)r(e)h(in)n(terc)n(hanged.)35
-b(This,)26 b(in)g(turn,)g(ma)n(y)427 650 y(a\013ect)31
-b(other)f(prop)r(erties)g(and)g(attributes)h(of)f(the)h(F)-7
-b(rameSet)31 b(\(suc)n(h)f(as)g(Nin,)i(Nout,)g(Naxes,)e(T)-7
-b(ranF)g(or-)427 750 y(w)n(ard,)24 b(T)-7 b(ranIn)n(v)n(erse,)23
-b(etc.\).)37 b(The)24 b(In)n(v)n(ert)g(attribute)g(of)h(a)f(F)-7
-b(rameSet)24 b(is)h(not)f(itself)h(a\013ected)g(b)n(y)f(selecting)427
-849 y(a)j(new)h(base)f(or)g(curren)n(t)g(F)-7 b(rame.)p
-0 1070 3780 12 v 0 1202 a FA(In)l(visible)521 b Fd(Dra)m(w)38
-b(graphics)f(using)i(in)m(visible)e(ink?)519 b FA(In)l(visible)0
-1412 y Fc(Description:)44 b Fk(This)31 b(attribute)g(con)n(trols)e(the)
-h(app)r(earance)f(of)i(all)f(graphics)f(pro)r(duced)i(b)n(y)f(Plot)g
-(metho)r(ds)h(b)n(y)f(de-)227 1512 y(termining)e(whether)f(graphics)f
-(should)i(b)r(e)g(visible)f(or)g(in)n(visible.)227 1647
-y(If)37 b(the)f(In)n(visible)g(v)-5 b(alue)36 b(of)g(a)g(Plot)g(is)g
-(non-zero,)h(then)f(all)g(the)h(Plot)e(metho)r(ds)i(whic)n(h)f
-(normally)f(generate)227 1747 y(graphical)23 b(output)h(do)g(not)g(do)f
-(so)h(\(y)n(ou)f(can)h(think)g(of)g(them)h(dra)n(wing)d(with)i
-Ft(")p Fk(in)n(visible)g(ink)p Ft(")p Fk(\).)35 b(Suc)n(h)24
-b(metho)r(ds)227 1846 y(do,)32 b(ho)n(w)n(ev)n(er,)f(con)n(tin)n(ue)g
-(to)g(do)g(all)g(the)h(calculations)e(whic)n(h)i(w)n(ould)f(b)r(e)g
-(needed)h(to)f(pro)r(duce)g(the)h(graphics.)227 1946
-y(In)g(particular,)g(the)g(b)r(ounding)f(b)r(o)n(x)g(enclosing)g(the)h
-(graphics)e(is)i(still)g(calculated)f(and)h(can)f(b)r(e)h(retriev)n(ed)
-e(as)227 2046 y(normal)e(using)h(AST)p Ft(_)p Fk(BOUNDINGBO)n(X.)f(The)
-h(default)h(v)-5 b(alue)28 b(is)h(zero,)f(resulting)g(in)h(all)g(metho)
-r(ds)g(dra)n(wing)227 2145 y(graphics)d(as)h(normal,)g(using)g(visible)
-h(ink.)0 2316 y Fc(T)m(yp)s(e:)227 2416 y Fk(In)n(teger)f(\(b)r(o)r
-(olean\).)0 2587 y Fc(Class)k(Applicabilit)m(y:)259 2745
-y(Plot)427 2844 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 3065 V 0 3197 a FA(IsLinear)832 b Fd(Is)39 b(the)g(Mapping)f(linear?)
-830 b FA(IsLinear)0 3407 y Fc(Description:)44 b Fk(This)22
-b(attribute)g(indicates)f(whether)g(a)g(Mapping)h(is)f(an)g(instance)g
-(of)h(a)f(class)g(that)g(alw)n(a)n(ys)f(represen)n(ts)227
-3506 y(a)j(linear)g(transformation.)33 b(Note,)25 b(some)d(Mapping)h
-(classes)f(can)h(represen)n(t)f(linear)g(or)h(non-linear)f(transforma-)
-227 3606 y(tions)29 b(\(the)h(MathMap)e(class)g(for)h(instance\).)41
-b(Suc)n(h)29 b(classes)e(ha)n(v)n(e)h(a)g(zero)g(v)-5
-b(alue)29 b(for)f(the)i(IsLinear)d(attribute.)227 3706
-y(Sp)r(eci\014c)33 b(instances)g(of)f(suc)n(h)h(classes)e(can)h(b)r(e)h
-(tested)g(for)f(linearit)n(y)g(using)h(the)g(astLinearAppro)n(x)d
-(function.)227 3805 y(AST)p Ft(_)p Fk(LINEARAPPR)n(O)n(X)d(routine.)0
-3976 y Fc(T)m(yp)s(e:)227 4076 y Fk(In)n(teger)g(\(b)r(o)r(olean\),)h
-(read-only)-7 b(.)0 4247 y Fc(Class)31 b(Applicabilit)m(y:)259
-4405 y(Mapping)427 4504 y Fk(All)d(Mappings)f(ha)n(v)n(e)g(this)h
-(attribute.)259 4648 y Fc(CmpMap)427 4748 y Fk(The)23
-b(IsLinear)f(v)-5 b(alue)23 b(for)f(a)h(CmpMap)f(is)h(determined)g(b)n
-(y)g(the)g(classes)f(of)h(the)g(encapsulated)f(Mappings.)427
-4847 y(F)-7 b(or)34 b(instance,)i(a)e(CmpMap)g(that)h(com)n(bines)e(a)h
-(Zo)r(omMap)g(and)g(a)g(ShiftMap)h(will)f(ha)n(v)n(e)f(a)h(non-zero)427
-4947 y(v)-5 b(alue)31 b(for)f(its)g(IsLinear)g(attribute,)h(but)g(a)f
-(CmpMap)h(that)g(con)n(tains)e(a)h(MathMap)h(will)f(ha)n(v)n(e)g(a)g(v)
--5 b(alue)427 5046 y(of)28 b(zero)e(for)h(its)h(IsLinear)f(attribute.)
-259 5190 y Fc(F)-8 b(rame)427 5290 y Fk(The)28 b(IsLinear)e(v)-5
-b(alue)28 b(for)f(a)g(F)-7 b(rame)27 b(is)h(1)f(\(since)g(a)h(F)-7
-b(rame)27 b(is)g(equiv)-5 b(alen)n(t)28 b(to)f(a)g(UnitMap\).)259
-5433 y Fc(F)-8 b(rameSet)427 5533 y Fk(The)26 b(IsLinear)f(v)-5
-b(alue)25 b(for)g(a)h(F)-7 b(rameSet)25 b(is)h(obtained)f(from)g(the)i
-(Mapping)e(from)g(the)h(base)f(F)-7 b(rame)26 b(to)f(the)427
-5632 y(curren)n(t)i(F)-7 b(rame.)p eop end
-%%Page: 420 430
-TeXDict begin 420 429 bop 0 52 a FG(420)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a FA(IsSimple)518 b Fd(Has)38 b(the)h(Mapping)f(b)s
-(een)h(simpli\014ed?)516 b FA(IsSimple)0 662 y Fc(Description:)44
-b Fk(This)29 b(attribute)f(indicates)h(whether)f(a)g(Mapping)g(has)g(b)
-r(een)h(simpli\014ed)g(b)n(y)f(the)h(AST)p Ft(_)p Fk(SIMPLIFY)227
-761 y(metho)r(d.)49 b(If)32 b(the)g(IsSimple)f(v)-5 b(alue)31
-b(is)h(non-zero,)e(then)i(the)g(Mapping)f(has)g(b)r(een)h(simpli\014ed)
-g(and)f(so)g(there)g(is)227 861 y(nothing)20 b(to)g(b)r(e)g(gained)f(b)
-n(y)h(simplifying)g(it)h(again.)33 b(Indeed,)22 b(the)e(AST)p
-Ft(_)p Fk(SIMPLIFY)g(metho)r(d)g(will)g(immediately)227
-961 y(return)32 b(the)g(Mapping)g(unc)n(hanged)f(if)i(the)f(IsSimple)h
-(attribute)f(indicates)g(that)g(the)h(Mapping)f(has)f(already)227
-1060 y(b)r(een)d(simpli\014ed.)0 1205 y Fc(T)m(yp)s(e:)227
-1304 y Fk(In)n(teger)f(\(b)r(o)r(olean\),)h(read-only)-7
-b(.)0 1449 y Fc(Class)31 b(Applicabilit)m(y:)259 1580
-y(Mapping)427 1680 y Fk(All)d(Mappings)f(ha)n(v)n(e)g(this)h
-(attribute.)259 1808 y Fc(F)-8 b(rame)427 1907 y Fk(All)32
-b(classes)e(of)h(F)-7 b(rame)30 b(return)h(zero)f(for)h(the)g(IsSimple)
-g(attribute.)48 b(This)31 b(is)g(b)r(ecause)g(c)n(hanges)e(can)i(b)r(e)
-427 2007 y(made)g(to)h(a)f(F)-7 b(rame)31 b(whic)n(h)g(a\013ect)g(the)h
-(Mapping)f(represen)n(ted)f(b)n(y)h(the)h(F)-7 b(rame,)32
-b(and)f(so)g(there)g(can)g(b)r(e)427 2107 y(no)c(guaran)n(tee)e(that)i
-(the)g(Mapping)f(ma)n(y)h(not)f(need)h(re-simplifying.)36
-b(Most)27 b(non-F)-7 b(rame)25 b(Mappings,)i(on)427 2206
-y(the)32 b(other)e(hand,)i(are)e(imm)n(utable)i(and)f(so)f(when)h(they)
-h(are)e(simpli\014ed)h(it)h(is)f(certain)f(that)h(they)h(w)n(eill)427
-2306 y(remain)27 b(in)h(a)f(simple)h(state.)p 0 2495
-V 0 2626 a FA(Iw)l(c)498 2627 y Fd(Include)39 b(a)f(F)-10
-b(rame)39 b(represen)m(ting)d(FITS-W)m(CS)j(in)m(termediate)1410
-2742 y(w)m(orld)e(co)s(ordinates?)3576 2626 y FA(Iw)l(c)0
-2897 y Fc(Description:)44 b Fk(This)26 b(attribute)g(is)g(a)g(b)r(o)r
-(olean)f(v)-5 b(alue)26 b(whic)n(h)g(is)g(used)g(when)g(a)g(F)-7
-b(rameSet)25 b(is)h(read)f(from)h(a)g(FitsChan)227 2997
-y(with)39 b(a)e(foreign)g(FITS)h(enco)r(ding)f(\(e.g.)67
-b(FITS-W)n(CS\))38 b(using)g(AST)p Ft(_)p Fk(READ.)g(If)g(it)g(has)f(a)
-h(non-zero)e(v)-5 b(alue)227 3096 y(then)39 b(the)f(returned)f(F)-7
-b(rameSet)38 b(will)f(include)i(F)-7 b(rames)37 b(represen)n(ting)f
-Ft(")p Fk(in)n(termediate)h(w)n(orld)f(co)r(ordinates)p
-Ft(")227 3196 y Fk(\(IW)n(C\).)29 b(These)f(F)-7 b(rames)28
-b(will)g(ha)n(v)n(e)g(Domain)g(name)g Ft(")p Fk(IW)n(C)p
-Ft(")f Fk(for)h(primary)f(axis)h(descriptions,)g(and)g
-Ft(")p Fk(IW)n(Ca)p Ft(")227 3296 y Fk(for)41 b(secondary)e(axis)h
-(descriptions,)j(where)e Ft(")p Fk(a)p Ft(")e Fk(is)i(replaced)f(b)n(y)
-g(the)i(single)e(alternate)g(axis)g(description)227 3395
-y(c)n(haracter,)26 b(as)h(used)g(in)h(the)g(FITS-W)n(CS)g(header.)36
-b(The)28 b(default)g(v)-5 b(alue)27 b(for)g Ft(")p Fk(Iw)n(c)p
-Ft(")g Fk(is)g(zero.)227 3517 y(FITS-W)n(CS)22 b(pap)r(er)g(1)f
-(de\014nes)h(IW)n(C)g(as)f(a)g(Cartesian)g(co)r(ordinate)g(system)g
-(with)h(one)g(axis)f(for)g(eac)n(h)g(W)n(CS)h(axis,)227
-3617 y(and)f(is)g(the)g(co)r(ordinate)f(system)g(pro)r(duced)h(b)n(y)f
-(the)h(rotation)f(matrix)g(\(represen)n(ted)g(b)n(y)h(FITS)g(k)n(eyw)n
-(ord)e(PCi)p Ft(_)p Fk(j,)227 3717 y(CDi)p Ft(_)p Fk(j,)26
-b(etc\).)36 b(F)-7 b(or)24 b(instance,)h(for)e(a)h(2-D)h(FITS-W)n(CS)f
-(header)g(describing)f(pro)5 b(jected)24 b(celestial)g(longitude)g(and)
-227 3816 y(latitude,)33 b(the)f(in)n(termediate)g(w)n(orld)e(co)r
-(ordinates)g(represen)n(t)h(o\013sets)g(in)h(degrees)e(from)i(the)g
-(reference)e(p)r(oin)n(t)227 3916 y(within)f(the)f(plane)f(of)g(pro)5
-b(jection.)0 4060 y Fc(T)m(yp)s(e:)227 4160 y Fk(In)n(teger)27
-b(\(b)r(o)r(olean\).)0 4304 y Fc(Class)k(Applicabilit)m(y:)259
-4436 y(FitsChan)427 4536 y Fk(All)d(FitsChans)g(ha)n(v)n(e)e(this)i
-(attribute.)p 0 4725 V 0 4856 a FA(KeyError)769 4857
-y Fd(Rep)s(ort)38 b(an)g(error)g(when)g(getting)f(the)i(v)-7
-b(alue)38 b(of)g(a)1156 4971 y(non-existan)m(t)f(KeyMap)h(en)m(try?)
-3222 4856 y FA(KeyError)0 5150 y Fc(Description:)44 b
-Fk(This)37 b(attribute)g(is)g(a)f(b)r(o)r(olean)h(v)-5
-b(alue)36 b(whic)n(h)h(con)n(trols)f(ho)n(w)g(the)h(AST)p
-Ft(_)p Fk(MAPGET...)64 b(functions)227 5250 y(b)r(eha)n(v)n(e)31
-b(if)h(the)h(requested)e(k)n(ey)g(is)g(not)h(found)g(in)g(the)g
-(KeyMap.)49 b(If)32 b(KeyError)d(is)i(zero)g(\(the)i(default\),)g(then)
-227 5349 y(these)f(functions)g(will)g(return)f(.F)-9
-b(ALSE.)32 b(but)g(no)g(error)d(will)j(b)r(e)g(rep)r(orted.)49
-b(If)32 b(KeyError)c(is)k(non-zero,)f(then)227 5449 y(the)d(same)f(v)-5
-b(alues)27 b(are)g(returned)g(but)h(an)g(error)d(is)j(also)e(rep)r
-(orted.)0 5593 y Fc(T)m(yp)s(e:)227 5693 y Fk(In)n(teger)h(\(b)r(o)r
-(olean\).)p eop end
-%%Page: 421 431
-TeXDict begin 421 430 bop 3643 52 a FG(421)0 351 y Fc(Class)31
-b(Applicabilit)m(y:)259 520 y(KeyMap)427 620 y Fk(All)d(KeyMaps)f(ha)n
-(v)n(e)f(this)i(attribute.)p 0 851 3780 12 v 0 983 a
-FA(L)-11 b(TO\013set)212 b Fd(The)39 b(o\013set)f(from)g(UTC)f(to)h(Lo)
-s(cal)h(Time,)e(in)h(hours)211 b FA(L)-11 b(TO\013set)0
-1209 y Fc(Description:)44 b Fk(This)d(sp)r(eci\014es)g(the)g(o\013set)g
-(from)g(UTC)g(to)g(Lo)r(cal)f(Time,)k(in)e(hours)e(\(fractional)g
-(hours)g(can)g(b)r(e)227 1308 y(supplied\).)48 b(It)31
-b(is)g(p)r(ositiv)n(e)f(for)h(time)g(zones)f(east)h(of)g(Green)n(wic)n
-(h.)46 b(AST)31 b(uses)f(the)i(\014gure)e(as)g(giv)n(en,)h(without)227
-1408 y(making)c(an)n(y)g(attempt)h(to)g(correct)e(for)h(da)n(yligh)n(t)
-g(sa)n(ving.)35 b(The)28 b(default)g(v)-5 b(alue)27 b(is)h(zero.)0
-1590 y Fc(T)m(yp)s(e:)227 1689 y Fk(Floating)f(p)r(oin)n(t.)0
-1871 y Fc(Class)k(Applicabilit)m(y:)259 2040 y(TimeF)-8
-b(rame)427 2139 y Fk(All)28 b(TimeF)-7 b(rames)27 b(ha)n(v)n(e)g(this)h
-(attribute.)p 0 2371 V 0 2509 a FA(Lab)t(el\(axis\))1634
-2503 y Fd(Axis)38 b(lab)s(el)3125 2509 y FA(Lab)t(el\(axis\))0
-2737 y Fc(Description:)44 b Fk(This)20 b(attribute)g(sp)r(eci\014es)g
-(a)g(lab)r(el)g(to)f(b)r(e)i(attac)n(hed)e(to)h(eac)n(h)f(axis)g(of)h
-(a)f(F)-7 b(rame)20 b(when)g(it)g(is)g(represen)n(ted)227
-2837 y(\(e.g.\))37 b(in)28 b(graphical)e(output.)227
-2977 y(If)i(a)f(Lab)r(el)h(v)-5 b(alue)27 b(has)g(not)h(b)r(een)g(set)g
-(for)f(a)g(F)-7 b(rame)27 b(axis,)g(then)h(a)f(suitable)h(default)g(is)
-f(supplied.)0 3159 y Fc(T)m(yp)s(e:)227 3259 y Fk(String.)0
-3441 y Fc(Class)k(Applicabilit)m(y:)259 3609 y(F)-8 b(rame)427
-3709 y Fk(The)31 b(default)h(supplied)f(b)n(y)g(the)g(F)-7
-b(rame)31 b(class)f(is)h(the)g(string)g Ft(")p Fk(Axis)f
-Fm(<)p Fk(n)p Fm(>)p Ft(")p Fk(,)h(where)g Fm(<)p Fk(n)p
-Fm(>)f Fk(is)h(1,)h(2,)f(etc.)427 3808 y(for)c(eac)n(h)g(successiv)n(e)
-f(axis.)259 3957 y Fc(SkyF)-8 b(rame)427 4057 y Fk(The)23
-b(SkyF)-7 b(rame)22 b(class)g(re-de\014nes)g(the)h(default)g(Lab)r(el)f
-(v)-5 b(alue)23 b(\(e.g.)35 b(to)23 b Ft(")p Fk(Righ)n(t)f(ascension)p
-Ft(")f Fk(or)h Ft(")p Fk(Galactic)427 4157 y(latitude)p
-Ft(")p Fk(\))28 b(as)f(appropriate)f(for)h(the)h(particular)e
-(celestial)h(co)r(ordinate)g(system)g(b)r(eing)h(represen)n(ted.)259
-4306 y Fc(TimeF)-8 b(rame)427 4405 y Fk(The)24 b(TimeF)-7
-b(rame)22 b(class)g(re-de\014nes)h(the)g(default)h(Lab)r(el)f(v)-5
-b(alue)23 b(as)g(appropriate)e(for)i(the)g(particular)f(time)427
-4505 y(system)28 b(b)r(eing)f(represen)n(ted.)259 4654
-y Fc(F)-8 b(rameSet)427 4754 y Fk(The)27 b(Lab)r(el)g(attribute)g(of)g
-(a)f(F)-7 b(rameSet)27 b(axis)f(is)g(the)h(same)g(as)f(that)h(of)g(its)
-g(curren)n(t)f(F)-7 b(rame)26 b(\(as)g(sp)r(eci\014ed)427
-4853 y(b)n(y)i(the)g(Curren)n(t)e(attribute\).)0 5047
-y Fc(Notes:)340 5362 y Fj(\017)45 b Fk(Axis)28 b(lab)r(els)f(are)g(in)n
-(tended)h(purely)f(for)g(in)n(terpretation)g(b)n(y)g(h)n(uman)g
-(readers)f(and)i(not)f(b)n(y)h(soft)n(w)n(are.)340 5511
-y Fj(\017)45 b Fk(When)36 b(sp)r(ecifying)f(this)h(attribute)f(b)n(y)g
-(name,)i(it)f(should)f(b)r(e)h(subscripted)f(with)g(the)h(n)n(um)n(b)r
-(er)f(of)g(the)427 5611 y(F)-7 b(rame)27 b(axis)g(to)h(whic)n(h)f(it)h
-(applies.)p eop end
-%%Page: 422 432
-TeXDict begin 422 431 bop 0 52 a FG(422)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 490 a FA(Lab)t(elA)l(t\(axis\))979 483 y
-Fd(Where)39 b(to)f(place)g(n)m(umerical)f(lab)s(els)h(for)1733
-598 y(a)g(Plot)2975 490 y FA(Lab)t(elA)l(t\(axis\))0
-770 y Fc(Description:)44 b Fk(This)30 b(attribute)g(con)n(trols)e(the)i
-(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 869 y(AST)p Ft(_)p Fk(GRID)37 b(routine\))e(b)n(y)
-h(determining)g(where)f(n)n(umerical)g(axis)g(lab)r(els)g(and)h(asso)r
-(ciated)e(tic)n(k)i(marks)f(are)227 969 y(placed.)42
-b(It)30 b(tak)n(es)e(a)h(separate)f(v)-5 b(alue)29 b(for)g(eac)n(h)f
-(ph)n(ysical)h(axis)f(of)h(a)g(Plot)g(so)g(that,)h(for)e(instance,)i
-(the)g(setting)227 1069 y Ft(")p Fk(Lab)r(elA)n(t\(2\)=10.0)p
-Ft(")25 b Fk(sp)r(eci\014es)i(where)f(the)i(n)n(umerical)e(lab)r(els)h
-(and)g(tic)n(k)g(marks)f(for)h(the)g(second)g(axis)f(should)227
-1168 y(b)r(e)i(dra)n(wn.)227 1294 y(F)-7 b(or)30 b(eac)n(h)g(axis,)h
-(the)g(Lab)r(elA)n(t)g(v)-5 b(alue)30 b(giv)n(es)g(the)h(v)-5
-b(alue)31 b(on)f(the)h(other)f(axis)g(at)h(whic)n(h)f(n)n(umerical)g
-(lab)r(els)h(and)227 1394 y(tic)n(k)24 b(marks)e(should)i(b)r(e)g
-(placed)f(\(remem)n(b)r(er)g(that)h(Plots)f(suitable)h(for)f(use)g
-(with)h(AST)p Ft(_)p Fk(GRID)h(ma)n(y)e(only)g(ha)n(v)n(e)227
-1493 y(t)n(w)n(o)29 b(axes\).)43 b(F)-7 b(or)29 b(example,)h(in)g(a)g
-(celestial)f(\(RA,Dec\))i(co)r(ordinate)e(system,)h(Lab)r(elA)n(t\(1\))
-g(giv)n(es)e(a)i(Dec)g(v)-5 b(alue)227 1593 y(whic)n(h)32
-b(de\014nes)g(a)f(line)h(\(of)g(constan)n(t)f(Dec\))h(along)f(whic)n(h)
-h(the)g(n)n(umerical)f(RA)h(lab)r(els)g(and)f(their)h(asso)r(ciated)227
-1692 y(tic)n(k)f(marks)f(will)i(b)r(e)g(dra)n(wn.)46
-b(Similarly)-7 b(,)32 b(Lab)r(elA)n(t\(2\))g(giv)n(es)e(the)h(RA)h(v)-5
-b(alue)31 b(at)g(whic)n(h)h(the)f(Dec)h(lab)r(els)f(and)227
-1792 y(tic)n(ks)c(will)h(b)r(e)g(dra)n(wn.)227 1918 y(The)34
-b(default)h(baha)n(viour)d(is)i(for)g(the)h(Plot)e(to)h(generate)f(its)
-h(o)n(wn)g(p)r(osition)g(for)g(n)n(umerical)f(lab)r(els)h(and)g(tic)n
-(k)227 2017 y(marks.)0 2169 y Fc(T)m(yp)s(e:)227 2268
-y Fk(Floating)27 b(p)r(oin)n(t.)0 2420 y Fc(Class)k(Applicabilit)m(y:)
-259 2559 y(Plot)427 2658 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)0 2822 y Fc(Notes:)340 3107 y Fj(\017)45
-b Fk(The)34 b(Lab)r(elA)n(t)h(v)-5 b(alue)33 b(should)h(use)g(the)h
-(same)e(units)i(as)e(are)g(used)h(in)n(ternally)f(for)h(storing)f(co)r
-(ordinate)427 3206 y(v)-5 b(alues)26 b(on)g(the)h(appropriate)d(axis.)
-36 b(F)-7 b(or)26 b(example,)g(with)h(a)f(celestial)f(co)r(ordinate)g
-(system,)i(the)f(Lab)r(elA)n(t)427 3306 y(v)-5 b(alue)28
-b(should)f(b)r(e)h(in)g(radians,)e(not)i(hours)f(or)f(degrees.)340
-3440 y Fj(\017)45 b Fk(Normally)-7 b(,)23 b(the)g(Lab)r(elA)n(t)g(v)-5
-b(alue)23 b(also)f(determines)g(where)h(the)g(lines)g(represen)n(ting)e
-(co)r(ordinate)h(axes)f(will)427 3540 y(b)r(e)k(dra)n(wn,)f(so)f(that)h
-(the)h(tic)n(k)f(marks)f(will)h(lie)g(on)g(these)g(lines)g(\(but)h
-(also)e(see)h(the)g(Dra)n(wAxes)f(attribute\).)340 3674
-y Fj(\017)45 b Fk(In)32 b(some)f(circumstances,)g(n)n(umerical)g(lab)r
-(els)g(and)g(tic)n(k)h(marks)e(are)g(dra)n(wn)h(around)f(the)i(edges)f
-(of)g(the)427 3773 y(plotting)c(area)e(\(see)h(the)h(Lab)r(elling)f
-(attribute\).)37 b(In)26 b(this)h(case,)f(the)g(v)-5
-b(alue)27 b(of)f(the)h(Lab)r(elA)n(t)f(attribute)h(is)427
-3873 y(ignored.)p 0 4074 V 0 4213 a FA(Lab)t(elUnits\(axis\))1163
-4206 y Fd(Use)39 b(axis)f(unit)g(descriptions)g(in)1705
-4320 y(a)h(Plot?)2804 4213 y FA(Lab)t(elUnits\(axis\))0
-4493 y Fc(Description:)44 b Fk(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 4592 y(AST)p Ft(_)p Fk(GRID)h(routine\))f(b)n(y)g
-(determining)g(whether)g(the)h(descriptiv)n(e)e(lab)r(els)h(dra)n(wn)f
-(for)h(eac)n(h)f(axis)g(of)h(a)g(Plot)227 4692 y(should)d(include)g(a)g
-(description)f(of)h(the)h(units)f(b)r(eing)g(used)g(on)g(the)h(axis.)35
-b(It)28 b(tak)n(es)e(a)g(separate)g(v)-5 b(alue)27 b(for)f(eac)n(h)227
-4792 y(ph)n(ysical)32 b(axis)g(of)h(a)g(Plot)f(so)g(that,)j(for)d
-(instance,)j(the)e(setting)g Ft(")p Fk(Lab)r(elUnits\(2\)=1)p
-Ft(")e Fk(sp)r(eci\014es)i(that)g(a)g(unit)227 4891 y(description)27
-b(should)h(b)r(e)g(included)g(in)g(the)g(lab)r(el)f(for)g(the)h(second)
-f(axis.)227 5017 y(If)e(the)f(Lab)r(elUnits)g(v)-5 b(alue)24
-b(of)g(a)g(Plot)f(axis)g(is)h(non-zero,)f(a)h(unit)g(description)g
-(will)g(b)r(e)g(included)h(in)f(the)g(descrip-)227 5116
-y(tiv)n(e)33 b(lab)r(el)g(for)g(that)g(axis,)h(otherwise)e(it)h(will)h
-(b)r(e)f(omitted.)54 b(The)33 b(default)g(b)r(eha)n(viour)f(is)h(to)g
-(include)g(a)g(unit)227 5216 y(description)g(unless)f(the)i(curren)n(t)
-e(F)-7 b(rame)32 b(of)h(the)h(Plot)e(is)h(a)g(SkyF)-7
-b(rame)32 b(represen)n(ting)f(equatorial,)i(ecliptic,)227
-5316 y(galactic)27 b(or)f(sup)r(ergalactic)h(co)r(ordinates,)f(in)i
-(whic)n(h)f(case)g(it)h(is)f(omitted.)0 5467 y Fc(T)m(yp)s(e:)227
-5567 y Fk(In)n(teger)g(\(b)r(o)r(olean\).)0 5718 y Fc(Class)k
-(Applicabilit)m(y:)p eop end
-%%Page: 423 433
-TeXDict begin 423 432 bop 3643 52 a FG(423)259 351 y
-Fc(Plot)427 451 y Fk(All)28 b(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-603 y Fc(Notes:)340 875 y Fj(\017)45 b Fk(The)28 b(text)g(used)f(for)h
-(the)g(unit)g(description)f(is)g(obtained)h(from)f(the)h(Plot's)f
-(Unit\(axis\))h(attribute.)340 998 y Fj(\017)45 b Fk(If)24
-b(no)f(axis)g(is)g(sp)r(eci\014ed,)i(\(e.g.)35 b Ft(")p
-Fk(Lab)r(elUnits)p Ft(")23 b Fk(instead)h(of)f Ft(")p
-Fk(Lab)r(elUnits\(2\))p Ft(")p Fk(\),)h(then)g(a)f Ft(")p
-Fk(set)p Ft(")g Fk(or)f Ft(")p Fk(clear)p Ft(")427 1098
-y Fk(op)r(eration)h(will)i(a\013ect)f(the)h(attribute)f(v)-5
-b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f
-Ft(")p Fk(get)p Ft(")f Fk(or)g Ft(")p Fk(test)p Ft(")h
-Fk(op)r(eration)427 1197 y(will)k(use)g(just)g(the)g(Lab)r
-(elUnits\(1\))g(v)-5 b(alue.)340 1320 y Fj(\017)45 b
-Fk(If)30 b(the)g(curren)n(t)f(F)-7 b(rame)28 b(of)i(the)g(Plot)e(is)i
-(not)f(a)g(SkyF)-7 b(rame,)29 b(but)h(includes)g(axes)e(whic)n(h)i(w)n
-(ere)e(extracted)427 1420 y(from)i(a)g(SkyF)-7 b(rame,)30
-b(then)h(the)f(default)h(b)r(eha)n(viour)e(is)h(to)g(include)g(a)g
-(unit)h(description)f(only)f(for)h(those)427 1520 y(axes)d(whic)n(h)g
-(w)n(ere)g(not)h(extracted)f(from)g(a)g(SkyF)-7 b(rame.)p
-0 1699 3780 12 v 0 1837 a FA(Lab)t(elUp\(axis\))1192
-1831 y Fd(Dra)m(w)38 b(n)m(umerical)e(Plot)i(lab)s(els)1675
-1930 y(uprigh)m(t?)2947 1837 y FA(Lab)t(elUp\(axis\))0
-2104 y Fc(Description:)44 b Fk(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 2203 y(AST)p Ft(_)p Fk(GRID)j(routine\))e(b)n(y)h
-(determining)g(whether)f(the)i(n)n(umerical)e(lab)r(els)g(for)g(eac)n
-(h)g(axis)g(of)h(a)g(Plot)f(should)227 2303 y(b)r(e)k(dra)n(wn)f
-(uprigh)n(t)g(or)g(not.)57 b(It)35 b(tak)n(es)f(a)g(separate)f(v)-5
-b(alue)35 b(for)f(eac)n(h)f(ph)n(ysical)h(axis)g(of)g(a)h(Plot)f(so)f
-(that,)k(for)227 2403 y(instance,)27 b(the)f(setting)g
-Ft(")p Fk(Lab)r(elUp\(2\)=1)p Ft(")f Fk(sp)r(eci\014es)h(that)h(n)n
-(umerical)e(lab)r(els)h(for)g(the)g(second)g(axis)f(should)h(b)r(e)227
-2502 y(dra)n(wn)h(uprigh)n(t.)227 2622 y(If)d(the)f(Lab)r(elUp)h(v)-5
-b(alue)23 b(of)g(a)g(Plot)f(axis)h(is)g(non-zero,)f(it)i(causes)e(n)n
-(umerical)g(lab)r(els)h(for)g(that)g(axis)g(to)g(b)r(e)g(plotted)227
-2721 y(uprigh)n(t)30 b(\(i.e.)45 b(as)30 b(normal,)g(horizon)n(tal)e
-(text\),)k(otherwise)d(lab)r(els)h(are)f(dra)n(wn)g(parallel)g(to)i
-(the)f(axis)g(to)g(whic)n(h)227 2821 y(they)e(apply)-7
-b(.)227 2941 y(The)30 b(default)h(is)f(to)g(pro)r(duce)g(uprigh)n(t)g
-(lab)r(els)g(if)g(the)h(lab)r(els)f(are)f(placed)h(around)f(the)h(edge)
-g(of)g(the)h(plot,)g(and)227 3040 y(to)g(pro)r(duce)g(lab)r(els)g(that)
-h(follo)n(w)e(the)i(axes)e(if)i(the)f(lab)r(els)g(are)f(placed)h
-(within)h(the)g(in)n(terior)e(of)h(the)g(plot)h(\(see)227
-3140 y(attribute)c(Lab)r(elling\).)0 3279 y Fc(T)m(yp)s(e:)227
-3379 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0 3518 y Fc(Class)k
-(Applicabilit)m(y:)259 3645 y(Plot)427 3745 y Fk(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)0 3896 y Fc(Notes:)340 4169 y
-Fj(\017)45 b Fk(In)32 b(some)f(circumstances,)g(n)n(umerical)g(lab)r
-(els)g(and)g(tic)n(k)h(marks)e(are)g(dra)n(wn)h(around)f(the)i(edges)f
-(of)g(the)427 4269 y(plotting)g(area)e(\(see)i(the)g(Lab)r(elling)f
-(attribute\).)47 b(In)31 b(this)g(case,)f(the)h(v)-5
-b(alue)31 b(of)f(the)h(Lab)r(elUp)g(attribute)427 4368
-y(is)d(ignored.)340 4491 y Fj(\017)45 b Fk(If)36 b(no)e(axis)h(is)g(sp)
-r(eci\014ed,)i(\(e.g.)59 b Ft(")p Fk(Lab)r(elUp)p Ft(")34
-b Fk(instead)h(of)g Ft(")p Fk(Lab)r(elUp\(2\))p Ft(")p
-Fk(\),)i(then)e(a)g Ft(")p Fk(set)p Ft(")f Fk(or)g Ft(")p
-Fk(clear)p Ft(")427 4591 y Fk(op)r(eration)23 b(will)i(a\013ect)f(the)h
-(attribute)f(v)-5 b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h
-(a)f Ft(")p Fk(get)p Ft(")f Fk(or)g Ft(")p Fk(test)p
-Ft(")h Fk(op)r(eration)427 4690 y(will)k(use)g(just)g(the)g(Lab)r
-(elUp\(1\))g(v)-5 b(alue.)p 0 4870 V 0 5001 a FA(Lab)t(elling)255
-b Fd(Lab)s(el)38 b(and)h(tic)m(k)f(placemen)m(t)f(option)g(for)h(a)g
-(Plot)252 b FA(Lab)t(elling)0 5175 y Fc(Description:)44
-b Fk(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)
-h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-5275 y(AST)p Ft(_)p Fk(GRID)h(routine\))g(b)n(y)f(determining)g(the)h
-(strategy)e(for)h(placing)g(n)n(umerical)f(lab)r(els)h(and)h(tic)n(k)f
-(marks)f(for)227 5374 y(a)e(Plot.)227 5494 y(If)21 b(the)g(Lab)r
-(elling)f(v)-5 b(alue)20 b(of)g(a)g(Plot)g(is)g Ft(")p
-Fk(exterior)p Ft(")e Fk(\(the)j(default\),)i(then)e(n)n(umerical)e(lab)
-r(els)h(and)h(their)f(asso)r(ciated)227 5593 y(tic)n(k)30
-b(marks)e(are)h(placed)g(around)f(the)i(edges)f(of)h(the)f(plotting)h
-(area,)f(if)h(p)r(ossible.)42 b(If)30 b(this)g(is)f(not)h(p)r(ossible,)
-f(or)227 5693 y(if)f(the)g(Lab)r(elling)g(v)-5 b(alue)27
-b(is)h Ft(")p Fk(in)n(terior)p Ft(")p Fk(,)d(then)j(they)g(are)f
-(placed)g(along)f(grid)h(lines)h(inside)f(the)h(plotting)g(area.)p
-eop end
-%%Page: 424 434
-TeXDict begin 424 433 bop 0 52 a FG(424)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fc(T)m(yp)s(e:)227 451 y Fk(String.)0 606 y Fc(Class)g(Applicabilit)m
-(y:)259 747 y(Plot)427 847 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)0 1014 y Fc(Notes:)340 1302 y Fj(\017)45
-b Fk(The)25 b(Lab)r(elA)n(t\(axis\))f(attribute)g(ma)n(y)f(b)r(e)i
-(used)f(to)g(determine)g(the)h(exact)f(placemen)n(t)g(of)g(lab)r(els)g
-(and)g(tic)n(k)427 1401 y(marks)j(that)h(are)e(dra)n(wn)h(inside)h(the)
-f(plotting)h(area.)p 0 1606 3780 12 v 0 1738 a FA(LatAxis)781
-b Fd(Index)40 b(of)e(the)g(latitude)f(axis)780 b FA(LatAxis)0
-1913 y Fc(Description:)44 b Fk(This)26 b(read-only)d(attribute)j(giv)n
-(es)e(the)i(index)g(\(1)f(or)f(2\))i(of)f(the)h(latitude)g(axis)e
-(within)j(the)e(SkyF)-7 b(rame)227 2013 y(\(taking)28
-b(in)n(to)f(accoun)n(t)g(an)n(y)f(curren)n(t)h(axis)g(p)r(erm)n
-(utations\).)0 2167 y Fc(T)m(yp)s(e:)227 2267 y Fk(In)n(teger.)0
-2422 y Fc(Class)k(Applicabilit)m(y:)259 2563 y(SkyF)-8
-b(rame)427 2663 y Fk(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i
-(attribute.)p 0 2868 V 0 2999 a FA(ListSize)612 b Fd(Num)m(b)s(er)38
-b(of)g(p)s(oin)m(ts)g(in)h(a)f(P)m(oin)m(tList)609 b
-FA(ListSize)0 3193 y Fc(Description:)44 b Fk(This)34
-b(is)g(a)g(read-only)e(attribute)j(giving)e(the)h(n)n(um)n(b)r(er)g(of)
-g(p)r(oin)n(ts)g(in)h(a)e(P)n(oin)n(tList.)56 b(This)34
-b(v)-5 b(alue)34 b(is)227 3293 y(determined)28 b(when)g(the)g(P)n(oin)n
-(tList)e(is)i(created.)0 3448 y Fc(T)m(yp)s(e:)227 3547
-y Fk(In)n(teger,)f(read-only)-7 b(.)0 3702 y Fc(Class)31
-b(Applicabilit)m(y:)259 3844 y(P)m(oin)m(tList)427 3943
-y Fk(All)d(P)n(oin)n(tLists)f(ha)n(v)n(e)f(this)i(attribute.)p
-0 4148 V 0 4286 a FA(LogGap\(axis\))1003 4280 y Fd(In)m(terv)-7
-b(al)37 b(b)s(et)m(w)m(een)h(ma)7 b(jor)37 b(axis)h(v)-7
-b(alues)1666 4394 y(of)39 b(a)f(Plot)2987 4286 y FA(LogGap\(axis\))0
-4570 y Fc(Description:)44 b Fk(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 4669 y(AST)p Ft(_)p Fk(GRID)i(routine\))f(b)n(y)f
-(determining)h(the)h(logarithmic)d(in)n(terv)-5 b(al)31
-b(b)r(et)n(w)n(een)g(the)g Ft(")p Fk(ma)5 b(jor)p Ft(")29
-b Fk(axis)h(v)-5 b(alues)31 b(of)227 4769 y(a)k(Plot,)i(at)e(whic)n(h)g
-(\(for)h(example\))f(ma)5 b(jor)34 b(tic)n(k)h(marks)f(are)g(dra)n(wn.)
-60 b(It)35 b(tak)n(es)g(a)f(separate)g(v)-5 b(alue)36
-b(for)e(eac)n(h)227 4868 y(ph)n(ysical)d(axis)f(of)i(the)f(Plot)g(so)g
-(that,)i(for)d(instance,)i(the)g(setting)g Ft(")p Fk(LogGap\(2\)=100.0)
-p Ft(")27 b Fk(sp)r(eci\014es)k(the)h(ratio)227 4968
-y(b)r(et)n(w)n(een)25 b(adjacen)n(t)e(ma)5 b(jor)23 b(v)-5
-b(alues)24 b(along)f(the)i(second)f(axis.)35 b(The)24
-b(LogGap)f(attribute)h(is)h(only)f(used)g(when)g(the)227
-5068 y(LogTic)n(ks)31 b(attribute)h(indicates)h(that)f(the)h(spacing)f
-(b)r(et)n(w)n(een)g(ma)5 b(jor)31 b(axis)h(v)-5 b(alues)32
-b(is)g(to)g(b)r(e)h(logarithmic.)50 b(If)227 5167 y(ma)5
-b(jor)27 b(axis)f(v)-5 b(alues)28 b(are)e(linearly)h(spaced)g(then)h
-(the)g(gap)f(is)g(sp)r(eci\014ed)h(using)f(attribute)h(Gap.)227
-5295 y(The)37 b(LogGap)e(v)-5 b(alue)36 b(supplied)h(will)g(b)r(e)f
-(rounded)g(to)g(the)h(nearest)f(p)r(o)n(w)n(er)f(of)h(10.)63
-b(The)36 b(recipro)r(cal)f(of)h(the)227 5394 y(supplied)c(v)-5
-b(alue)31 b(ma)n(y)g(b)r(e)g(used)h(if)f(this)h(is)f(necessary)f(to)h
-(pro)r(duce)g(usable)g(ma)5 b(jor)30 b(axis)g(v)-5 b(alues.)48
-b(If)31 b(a)g(zero)f(or)227 5494 y(negativ)n(e)23 b(v)-5
-b(alue)24 b(is)g(supplied,)h(an)f(error)e(will)j(b)r(e)f(rep)r(orted)f
-(when)i(the)f(grid)f(is)h(dra)n(wn.)35 b(The)24 b(default)h(b)r(eha)n
-(viour)227 5593 y(is)j(for)f(the)h(Plot)f(to)h(generate)e(its)i(o)n(wn)
-f(LogGap)f(v)-5 b(alue)28 b(when)g(required,)f(based)g(on)g(the)h
-(range)e(of)i(axis)f(v)-5 b(alues)227 5693 y(to)28 b(b)r(e)g(represen)n
-(ted.)p eop end
-%%Page: 425 435
-TeXDict begin 425 434 bop 3643 52 a FG(425)0 351 y Fc(T)m(yp)s(e:)227
-451 y Fk(Floating)27 b(p)r(oin)n(t.)0 602 y Fc(Class)k(Applicabilit)m
-(y:)259 741 y(Plot)427 841 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)0 1005 y Fc(Notes:)340 1289 y Fj(\017)45
-b Fk(The)28 b(LogGap)e(v)-5 b(alue)28 b(is)f(a)g(ratio)g(b)r(et)n(w)n
-(een)h(axis)e(v)-5 b(alues)28 b(and)f(is)h(therefore)e(dimensionless.)
-340 1423 y Fj(\017)45 b Fk(If)38 b(no)g(axis)f(is)h(sp)r(eci\014ed,)i
-(\(e.g.)67 b Ft(")p Fk(LogGap)p Ft(")36 b Fk(instead)i(of)f
-Ft(")p Fk(LogGap\(2\))p Ft(")p Fk(\),)i(then)f(a)g Ft(")p
-Fk(set)p Ft(")f Fk(or)f Ft(")p Fk(clear)p Ft(")427 1523
-y Fk(op)r(eration)23 b(will)i(a\013ect)f(the)h(attribute)f(v)-5
-b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f
-Ft(")p Fk(get)p Ft(")f Fk(or)g Ft(")p Fk(test)p Ft(")h
-Fk(op)r(eration)427 1622 y(will)k(use)g(just)g(the)g(LogGap\(1\))e(v)-5
-b(alue.)p 0 1824 3780 12 v 0 1962 a FA(LogLab)t(el\(axis\))1203
-1956 y Fd(Use)39 b(exp)s(onen)m(tial)e(format)f(for)1330
-2070 y(n)m(umerical)g(axis)i(lab)s(els?)2909 1962 y FA(LogLab)t
-(el\(axis\))0 2242 y Fc(Description:)44 b Fk(This)30
-b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h(annotated)f
-(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227 2342
-y(AST)p Ft(_)p Fk(GRID)23 b(routine\))e(b)n(y)g(determining)h(whether)f
-(the)h(n)n(umerical)f(axis)g(lab)r(els)g(should)g(b)r(e)h(in)g(normal)f
-(decimal)227 2442 y(form)f(or)g(should)g(b)r(e)h(represen)n(ted)f(as)f
-(10)h(raised)f(to)i(the)g(appropriate)d(p)r(o)n(w)n(er.)34
-b(That)20 b(is,)i(an)e(axis)g(v)-5 b(alue)20 b(of)h(1000.0)227
-2541 y(will)28 b(b)r(e)g(dra)n(wn)f(as)g Ft(")p Fk(1000.0)p
-Ft(")e Fk(if)j(LogLab)r(el)f(is)h(zero,)e(but)j(as)e
-Ft(")p Fk(10)p Fj(^)p Fk(3)p Ft(")f Fk(if)i(LogLab)r(el)f(is)g
-(non-zero.)36 b(If)28 b(graphical)227 2641 y(escap)r(e)j(sequences)g
-(are)g(supp)r(orted)h(\(see)f(attribute)h(Escap)r(e\),)h(the)f(p)r(o)n
-(w)n(er)e(in)i(suc)n(h)g(exp)r(onen)n(tial)f(lab)r(els)g(will)227
-2741 y(b)r(e)d(dra)n(wn)f(as)g(a)g(small)g(sup)r(erscript)g(instead)h
-(of)f(using)g(a)h Ft(")p Fj(^)p Ft(")f Fk(c)n(haracter)e(to)j(represen)
-n(t)e(exp)r(onen)n(tiation.)227 2866 y(The)e(default)g(is)f(to)g(pro)r
-(duce)g(exp)r(onen)n(tial)g(lab)r(els)g(if)h(the)g(ma)5
-b(jor)22 b(tic)n(k)i(marks)e(are)g(logarithmically)g(spaced)h(\(see)227
-2966 y(the)28 b(LogTic)n(ks)e(attribute\).)0 3117 y Fc(T)m(yp)s(e:)227
-3217 y Fk(In)n(teger)h(\(b)r(o)r(olean\).)0 3369 y Fc(Class)k
-(Applicabilit)m(y:)259 3507 y(Plot)427 3607 y Fk(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)0 3771 y Fc(Notes:)340 4055 y
-Fj(\017)45 b Fk(If)33 b(no)e(axis)g(is)h(sp)r(eci\014ed,)h(\(e.g.)49
-b Ft(")p Fk(LogLab)r(el)p Ft(")30 b Fk(instead)i(of)g
-Ft(")p Fk(LogLab)r(el\(2\))p Ft(")p Fk(\),)f(then)h(a)g
-Ft(")p Fk(set)p Ft(")f Fk(or)f Ft(")p Fk(clear)p Ft(")427
-4155 y Fk(op)r(eration)23 b(will)i(a\013ect)f(the)h(attribute)f(v)-5
-b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f
-Ft(")p Fk(get)p Ft(")f Fk(or)g Ft(")p Fk(test)p Ft(")h
-Fk(op)r(eration)427 4255 y(will)k(use)g(just)g(the)g(LogLab)r(el\(1\))e
-(v)-5 b(alue.)p 0 4456 V 0 4594 a FA(LogPlot\(axis\))1020
-4588 y Fd(Map)39 b(the)f(plot)g(logarithmically)33 b(on)m(to)1605
-4702 y(the)39 b(screen?)2984 4594 y FA(LogPlot\(axis\))0
-4870 y Fc(Description:)44 b Fk(This)19 b(attribute)g(con)n(trols)e(the)
-h(app)r(earance)f(of)i(all)f(graphics)f(pro)r(duced)i(b)n(y)f(the)h
-(Plot,)g(b)n(y)g(determining)227 4970 y(whether)j(the)g(axes)f(of)g
-(the)h(plotting)g(surface)f(are)g(mapp)r(ed)h(logarithmically)e(or)g
-(linearly)h(on)n(to)g(the)h(base)f(F)-7 b(rame)227 5069
-y(of)32 b(the)f(F)-7 b(rameSet)31 b(supplied)h(when)f(the)h(Plot)f(w)n
-(as)f(constructed.)47 b(It)32 b(tak)n(es)e(a)h(separate)f(v)-5
-b(alue)31 b(for)g(eac)n(h)f(axis)227 5169 y(of)39 b(the)f(graphics)f
-(co)r(ordinate)g(system)h(\(i.e.)70 b(the)38 b(base)g(F)-7
-b(rame)38 b(in)g(the)h(Plot\))f(so)f(that,)42 b(for)37
-b(instance,)k(the)227 5269 y(setting)32 b Ft(")p Fk(LogPlot\(2\)=1)p
-Ft(")c Fk(sp)r(eci\014es)j(that)h(the)f(second)g(axis)g(of)g(the)h
-(graphics)e(co)r(ordinate)g(system)h(\(usually)227 5368
-y(the)d(v)n(ertical)e(axis\))h(should)g(b)r(e)h(mapp)r(ed)g
-(logarithmically)d(on)n(to)i(the)h(second)f(axis)f(of)i(the)f(base)g(F)
--7 b(rame)27 b(of)g(the)227 5468 y(F)-7 b(rameSet)28
-b(supplied)g(when)f(the)h(Plot)f(w)n(as)g(constructed.)227
-5593 y(If)32 b(the)g(LogPlot)d(v)-5 b(alue)31 b(of)h(a)f(Plot)f(axis)h
-(is)g(non-zero,)g(it)g(causes)g(that)g(axis)g(to)g(b)r(e)h(mapp)r(ed)f
-(logarithmically)-7 b(,)227 5693 y(otherwise)27 b(\(the)h(default\))h
-(the)f(axis)e(is)i(mapp)r(ed)g(linearly)-7 b(.)p eop
-end
-%%Page: 426 436
-TeXDict begin 426 435 bop 0 52 a FG(426)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fc(T)m(yp)s(e:)227 451 y Fk(In)n(teger)c(\(b)r(o)r(olean\).)0
-595 y Fc(Class)k(Applicabilit)m(y:)259 726 y(Plot)427
-825 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-981 y Fc(Notes:)340 1258 y Fj(\017)45 b Fk(The)c(setting)f(of)g(the)h
-(LogPlot)d(attribute)i(pro)n(vides)f(the)i(default)f(v)-5
-b(alue)41 b(for)e(the)i(related)e(LogTic)n(ks)427 1358
-y(attribute.)48 b(By)30 b(selecting)h(suitable)g(v)-5
-b(alues)30 b(for)h(LogPlot)e(and)i(LogTic)n(ks,)f(it)i(is)e(p)r
-(ossible)h(to)g(ha)n(v)n(e)f(tic)n(k)427 1458 y(marks)22
-b(whic)n(h)g(are)f(ev)n(enly)h(spaced)g(in)h(v)-5 b(alue)22
-b(but)h(whic)n(h)f(are)g(mapp)r(ed)g(logarithmically)f(on)n(to)h(the)g
-(screen)427 1557 y(\(and)28 b(vice-v)n(ersa\).)340 1684
-y Fj(\017)45 b Fk(An)22 b(axis)e(ma)n(y)g(only)h(b)r(e)g(mapp)r(ed)h
-(logarithmically)d(if)j(the)f(visible)g(part)f(of)h(the)h(axis)e(do)r
-(es)h(not)g(include)g(the)427 1784 y(v)-5 b(alue)29 b(zero.)38
-b(The)29 b(visible)f(part)g(of)g(the)h(axis)f(is)g(that)h(part)f(whic)n
-(h)h(is)f(mapp)r(ed)h(on)n(to)f(the)g(plotting)h(area,)427
-1884 y(and)i(is)g(measured)f(within)i(the)f(base)f(F)-7
-b(rame)31 b(of)g(the)g(F)-7 b(rameSet)31 b(whic)n(h)f(w)n(as)g
-(supplied)i(when)f(the)g(Plot)427 1983 y(w)n(as)g(constructed.)49
-b(An)n(y)32 b(attempt)h(to)f(set)f(LogPlot)g(to)g(a)h(non-zero)e(v)-5
-b(alue)32 b(will)g(b)r(e)g(ignored)f(\(without)427 2083
-y(error\))26 b(if)i(the)g(visible)g(part)f(of)g(the)h(axis)f(includes)h
-(the)g(v)-5 b(alue)27 b(zero)340 2210 y Fj(\017)45 b
-Fk(If)38 b(no)g(axis)f(is)g(sp)r(eci\014ed,)k(\(e.g.)67
-b Ft(")p Fk(LogPlot)p Ft(")35 b Fk(instead)j(of)f Ft(")p
-Fk(LogPlot\(2\))p Ft(")p Fk(\),)h(then)h(a)e Ft(")p Fk(set)p
-Ft(")g Fk(or)f Ft(")p Fk(clear)p Ft(")427 2310 y Fk(op)r(eration)23
-b(will)i(a\013ect)f(the)h(attribute)f(v)-5 b(alue)24
-b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f Ft(")p
-Fk(get)p Ft(")f Fk(or)g Ft(")p Fk(test)p Ft(")h Fk(op)r(eration)427
-2409 y(will)k(use)g(just)g(the)g(LogPlot\(1\))e(v)-5
-b(alue.)p 0 2597 3780 12 v 0 2736 a FA(LogTic)l(ks\(axis\))1184
-2729 y Fd(Space)38 b(the)h(ma)7 b(jor)37 b(tic)m(k)g(marks)1480
-2844 y(logarithmically?)2922 2736 y FA(LogTic)l(ks\(axis\))0
-3026 y Fc(Description:)44 b Fk(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 3126 y(AST)p Ft(_)p Fk(GRID)20 b(routine\))f(b)n
-(y)g(determining)g(whether)g(the)g(ma)5 b(jor)18 b(tic)n(k)h(marks)f
-(should)h(b)r(e)h(spaced)e(logarithmically)227 3225 y(or)32
-b(linearly)f(in)i(axis)f(v)-5 b(alue.)51 b(It)32 b(tak)n(es)g(a)g
-(separate)f(v)-5 b(alue)32 b(for)g(eac)n(h)f(ph)n(ysical)h(axis)g(of)g
-(the)h(Plot)e(so)h(that,)i(for)227 3325 y(instance,)22
-b(the)g(setting)f Ft(")p Fk(LogTic)n(ks\(2\)=1)p Ft(")c
-Fk(sp)r(eci\014es)k(that)g(the)g(ma)5 b(jor)20 b(tic)n(k)h(marks)e(on)i
-(the)g(second)g(axis)f(should)227 3424 y(b)r(e)28 b(spaced)f
-(logarithmically)-7 b(.)227 3546 y(If)35 b(the)g(LogTic)n(ks)e(v)-5
-b(alue)34 b(for)g(a)h(ph)n(ysical)e(axis)h(is)h(non-zero,)f(the)h(ma)5
-b(jor)34 b(tic)n(k)g(marks)f(on)i(that)g(axis)e(will)i(b)r(e)227
-3646 y(spaced)29 b(logarithmically)e(\(that)j(is,)g(there)f(will)g(b)r
-(e)h(a)f(constan)n(t)g(ratio)f(b)r(et)n(w)n(een)h(the)h(axis)e(v)-5
-b(alues)29 b(at)g(adjacen)n(t)227 3745 y(ma)5 b(jor)33
-b(tic)n(k)g(marks\).)55 b(An)34 b(error)e(will)i(b)r(e)g(rep)r(orted)f
-(if)h(the)g(dynamic)f(range)g(of)g(the)i(axis)d(\(the)j(ratio)e(of)g
-(the)227 3845 y(largest)27 b(to)h(smallest)g(displa)n(y)n(ed)f(axis)g
-(v)-5 b(alue\))28 b(is)h(less)e(than)h(10.0.)38 b(If)28
-b(the)h(LogTic)n(ks)d(v)-5 b(alue)28 b(is)g(zero,)f(the)i(ma)5
-b(jor)227 3945 y(tic)n(k)23 b(marks)f(will)h(b)r(e)g(ev)n(enly)g
-(spaced)f(\(that)h(is,)h(there)f(will)g(b)r(e)g(a)g(constan)n(t)f
-(di\013erence)h(b)r(et)n(w)n(een)g(the)g(axis)f(v)-5
-b(alues)227 4044 y(at)29 b(adjacen)n(t)e(ma)5 b(jor)28
-b(tic)n(k)g(marks\).)38 b(The)29 b(default)g(is)f(to)g(pro)r(duce)g
-(logarithmically)f(spaced)h(tic)n(k)g(marks)f(if)i(the)227
-4144 y(corresp)r(onding)22 b(LogPlot)h(attribute)h(is)g(non-zero)e(and)
-i(the)g(ratio)f(of)h(maxim)n(um)g(axis)f(v)-5 b(alue)24
-b(to)g(minim)n(um)g(axis)227 4244 y(v)-5 b(alue)34 b(is)f(100)g(or)g
-(more.)54 b(If)34 b(either)g(of)g(these)f(conditions)h(is)f(not)h(met,)
-i(the)e(default)g(is)g(to)f(pro)r(duce)g(linearly)227
-4343 y(spaced)27 b(tic)n(k)h(marks.)0 4487 y Fc(T)m(yp)s(e:)227
-4587 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0 4731 y Fc(Class)k
-(Applicabilit)m(y:)259 4861 y(Plot)427 4961 y Fk(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)0 5117 y Fc(Notes:)340 5394 y
-Fj(\017)45 b Fk(The)d(setting)g(of)f(the)h(LogTic)n(ks)e(attribute)i
-(do)r(es)f(not)h(a\013ect)g(the)g(mapping)f(of)h(the)g(plot)f(on)n(to)g
-(the)427 5494 y(screen,)d(whic)n(h)d(is)h(con)n(trolled)f(b)n(y)h
-(attribute)g(LogPlot.)60 b(By)36 b(selecting)f(suitable)h(v)-5
-b(alues)36 b(for)f(LogPlot)427 5593 y(and)c(LogTic)n(ks,)f(it)i(is)f(p)
-r(ossible)g(to)g(ha)n(v)n(e)f(tic)n(k)h(marks)e(whic)n(h)j(are)e(ev)n
-(enly)g(spaced)h(in)g(v)-5 b(alue)31 b(but)h(whic)n(h)427
-5693 y(are)27 b(mapp)r(ed)h(logarithmically)e(on)n(to)g(the)i(screen)f
-(\(and)h(vica-v)n(ersa\).)p eop end
-%%Page: 427 437
-TeXDict begin 427 436 bop 3643 52 a FG(427)340 351 y
-Fj(\017)45 b Fk(An)38 b(error)e(will)i(b)r(e)g(rep)r(orted)f(when)h
-(dra)n(wing)f(an)g(annotated)g(axis)g(grid)g(if)i(the)f(visible)f(part)
-h(of)f(the)427 451 y(ph)n(ysical)27 b(axis)g(includes)h(the)f(v)-5
-b(alue)28 b(zero.)340 581 y Fj(\017)45 b Fk(If)33 b(no)g(axis)f(is)g
-(sp)r(eci\014ed,)j(\(e.g.)52 b Ft(")p Fk(LogTic)n(ks)p
-Ft(")30 b Fk(instead)j(of)f Ft(")p Fk(LogTic)n(ks\(2\))p
-Ft(")p Fk(\),)g(then)h(a)g Ft(")p Fk(set)p Ft(")f Fk(or)f
-Ft(")p Fk(clear)p Ft(")427 681 y Fk(op)r(eration)23 b(will)i(a\013ect)f
-(the)h(attribute)f(v)-5 b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h
-(while)h(a)f Ft(")p Fk(get)p Ft(")f Fk(or)g Ft(")p Fk(test)p
-Ft(")h Fk(op)r(eration)427 780 y(will)k(use)g(just)g(the)g(LogTic)n
-(ks\(1\))e(v)-5 b(alue.)p 0 974 3780 12 v 0 1106 a FA(LonAxis)717
-b Fd(Index)39 b(of)g(the)f(longitude)f(axis)717 b FA(LonAxis)0
-1294 y Fc(Description:)44 b Fk(This)22 b(read-only)e(attribute)i(giv)n
-(es)f(the)h(index)g(\(1)f(or)g(2\))h(of)f(the)h(longitude)g(axis)f
-(within)h(the)g(SkyF)-7 b(rame)227 1393 y(\(taking)28
-b(in)n(to)f(accoun)n(t)g(an)n(y)f(curren)n(t)h(axis)g(p)r(erm)n
-(utations\).)0 1540 y Fc(T)m(yp)s(e:)227 1640 y Fk(In)n(teger.)0
-1787 y Fc(Class)k(Applicabilit)m(y:)259 1920 y(SkyF)-8
-b(rame)427 2020 y Fk(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i
-(attribute.)p 0 2214 V 0 2345 a FA(LutIn)l(terp)398 b
-Fd(Lo)s(ok-up)39 b(table)e(in)m(terp)s(olation)e(metho)s(d)397
-b FA(LutIn)l(terp)0 2529 y Fc(Description:)44 b Fk(This)22
-b(attribute)g(indicates)f(the)h(metho)r(d)g(to)g(b)r(e)g(used)f(when)h
-(\014nding)g(the)g(output)g(v)-5 b(alue)22 b(of)f(a)g(LutMap)227
-2629 y(for)33 b(an)f(input)i(v)-5 b(alue)33 b(part)g(w)n(a)n(y)e(b)r
-(et)n(w)n(een)i(t)n(w)n(o)g(table)g(en)n(tries.)52 b(If)34
-b(it)f(is)g(set)g(to)g(0)f(\(the)i(default\))g(then)f(linear)227
-2728 y(in)n(terp)r(olation)27 b(is)h(used.)36 b(Otherwise,)27
-b(nearest)g(neigh)n(b)r(our)f(in)n(terp)r(olation)h(is)h(used.)227
-2851 y(Using)f(nearest)f(neigh)n(b)r(our)g(in)n(terp)r(olation)h
-(causes)f(AST)p Ft(__)p Fk(BAD)h(to)g(b)r(e)g(returned)g(for)f(an)n(y)h
-(p)r(oin)n(t)g(whic)n(h)g(falls)227 2951 y(outside)20
-b(the)g(b)r(ounds)g(of)f(the)i(table.)34 b(Linear)19
-b(in)n(terp)r(olation)f(results)i(in)g(an)f(extrap)r(olated)g(v)-5
-b(alue)19 b(b)r(eing)h(returned)227 3051 y(based)27 b(on)h(the)g(t)n(w)
-n(o)e(end)i(en)n(tries)f(in)h(the)g(table.)0 3197 y Fc(T)m(yp)s(e:)227
-3297 y Fk(In)n(teger.)0 3444 y Fc(Class)j(Applicabilit)m(y:)259
-3577 y(LutMap)427 3677 y Fk(All)d(LutMaps)g(ha)n(v)n(e)e(this)i
-(attribute.)p 0 3871 V 0 4009 a FA(Ma)7 b(jTic)l(kLen\(axis\))1359
-4003 y Fd(Length)38 b(of)h(ma)7 b(jor)36 b(tic)m(k)1469
-4117 y(marks)i(for)g(a)g(Plot)2732 4009 y FA(Ma)7 b(jTic)l
-(kLen\(axis\))0 4282 y Fc(Description:)44 b Fk(This)30
-b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h(annotated)f
-(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227 4382
-y(AST)p Ft(_)p Fk(GRID)k(routine\))e(b)n(y)h(determining)g(the)g
-(length)g(of)g(the)g(ma)5 b(jor)31 b(tic)n(k)i(marks)f(dra)n(wn)g(on)g
-(the)h(axes)f(of)h(a)227 4481 y(Plot.)42 b(It)30 b(tak)n(es)f(a)g
-(separate)f(v)-5 b(alue)29 b(for)g(eac)n(h)g(ph)n(ysical)f(axis)h(of)g
-(the)h(Plot)f(so)g(that,)h(for)f(instance,)h(the)g(setting)227
-4581 y Ft(")p Fk(Ma)5 b(jTic)n(kLen\(2\)=0)p Ft(")25
-b Fk(sp)r(eci\014es)j(the)g(length)f(of)h(the)g(ma)5
-b(jor)26 b(tic)n(k)i(marks)e(dra)n(wn)h(on)g(the)h(second)f(axis.)227
-4704 y(The)35 b(Ma)5 b(jTic)n(kLen)33 b(v)-5 b(alue)34
-b(should)g(b)r(e)h(giv)n(en)e(as)h(a)f(fraction)h(of)g(the)h(minim)n
-(um)g(dimension)f(of)g(the)h(plotting)227 4804 y(area.)56
-b(Negativ)n(e)33 b(v)-5 b(alues)34 b(cause)g(ma)5 b(jor)33
-b(tic)n(k)h(marks)f(to)i(b)r(e)f(placed)h(on)f(the)g(outside)g(of)h
-(the)g(corresp)r(onding)227 4903 y(grid)c(line)h(or)f(axis)g(\(but)i
-(sub)5 b(ject)32 b(to)g(an)n(y)f(clipping)g(imp)r(osed)h(b)n(y)g(the)g
-(underlying)f(graphics)f(system\),)j(while)227 5003 y(p)r(ositiv)n(e)27
-b(v)-5 b(alues)28 b(cause)f(them)h(to)f(b)r(e)h(placed)f(on)h(the)g
-(inside.)227 5126 y(The)e(default)g(b)r(eha)n(viour)e(dep)r(ends)i(on)f
-(whether)g(a)g(co)r(ordinate)f(grid)h(is)g(dra)n(wn)g(inside)g(the)h
-(plotting)g(area)e(\(see)227 5226 y(the)f(Grid)e(attribute\).)36
-b(If)22 b(so,)h(the)f(default)g(Ma)5 b(jTic)n(kLen)21
-b(v)-5 b(alue)22 b(is)g(zero)f(\(so)g(that)h(ma)5 b(jor)21
-b(tic)n(ks)g(are)g(not)h(dra)n(wn\),)227 5325 y(otherwise)27
-b(the)h(default)g(is)f(+0.015.)0 5472 y Fc(T)m(yp)s(e:)227
-5572 y Fk(Floating)g(p)r(oin)n(t.)0 5718 y Fc(Class)k(Applicabilit)m
-(y:)p eop end
-%%Page: 428 438
-TeXDict begin 428 437 bop 0 52 a FG(428)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)259 351
-y Fc(Plot)427 451 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-607 y Fc(Notes:)340 884 y Fj(\017)45 b Fk(If)37 b(no)g(axis)f(is)g(sp)r
-(eci\014ed,)k(\(e.g.)64 b Ft(")p Fk(Ma)5 b(jTic)n(kLen)p
-Ft(")34 b Fk(instead)j(of)g Ft(")p Fk(Ma)5 b(jTic)n(kLen\(2\))p
-Ft(")p Fk(\),)37 b(then)g(a)g Ft(")p Fk(set)p Ft(")e
-Fk(or)427 984 y Ft(")p Fk(clear)p Ft(")28 b Fk(op)r(eration)g(will)i
-(a\013ect)g(the)g(attribute)g(v)-5 b(alue)29 b(of)h(all)f(the)h(Plot)f
-(axes,)g(while)h(a)f Ft(")p Fk(get)p Ft(")f Fk(or)h Ft(")p
-Fk(test)p Ft(")427 1084 y Fk(op)r(eration)e(will)h(use)f(just)h(the)g
-(Ma)5 b(jTic)n(kLen\(1\))27 b(v)-5 b(alue.)p 0 1272 3780
-12 v 0 1404 a FA(Matc)l(hEnd)752 b Fd(Matc)m(h)38 b(trailing)e(axes?)
-752 b FA(Matc)l(hEnd)0 1586 y Fc(Description:)44 b Fk(This)26
-b(attribute)f(is)g(a)g(b)r(o)r(olean)f(v)-5 b(alue)25
-b(whic)n(h)h(con)n(trols)d(ho)n(w)i(a)g(F)-7 b(rame)24
-b(b)r(eha)n(v)n(es)g(when)i(it)f(is)g(used)h(\(b)n(y)227
-1686 y(AST)p Ft(_)p Fk(FINDFRAME\))32 b(as)f(a)f(template)h(to)g(matc)n
-(h)g(another)e(\(target\))i(F)-7 b(rame.)46 b(It)31 b(applies)g(only)f
-(in)h(the)g(case)227 1785 y(where)c(a)h(matc)n(h)f(o)r(ccurs)g(b)r(et)n
-(w)n(een)g(template)h(and)f(target)g(F)-7 b(rames)27
-b(with)h(di\013eren)n(t)g(n)n(um)n(b)r(ers)f(of)g(axes.)227
-1907 y(If)g(the)g(Matc)n(hEnd)f(v)-5 b(alue)26 b(of)h(the)g(template)f
-(F)-7 b(rame)26 b(is)h(zero,)e(then)i(the)g(axes)f(whic)n(h)g(o)r(ccur)
-g(\014rst)g(in)h(the)g(target)227 2007 y(F)-7 b(rame)25
-b(will)g(b)r(e)h(matc)n(hed)f(and)g(an)n(y)f(trailing)g(axes)g(\(in)i
-(either)f(the)g(target)g(or)f(template\))i(will)f(b)r(e)g(disregarded.)
-227 2106 y(If)33 b(it)f(is)g(non-zero,)g(the)g(\014nal)g(axes)f(in)h
-(eac)n(h)f(F)-7 b(rame)32 b(will)g(b)r(e)h(matc)n(hed)e(and)h(an)n(y)f
-(un-matc)n(hed)h(leading)g(axes)227 2206 y(will)c(b)r(e)g(disregarded)e
-(instead.)0 2350 y Fc(T)m(yp)s(e:)227 2450 y Fk(In)n(teger)h(\(b)r(o)r
-(olean\).)0 2594 y Fc(Class)k(Applicabilit)m(y:)259 2725
-y(F)-8 b(rame)427 2824 y Fk(The)28 b(default)g(Matc)n(hEnd)f(v)-5
-b(alue)27 b(for)h(a)f(F)-7 b(rame)27 b(is)g(zero,)g(so)g(that)h
-(trailing)e(axes)h(are)g(disregarded.)259 2952 y Fc(F)-8
-b(rameSet)427 3051 y Fk(The)27 b(Matc)n(hEnd)e(attribute)i(of)f(a)g(F)
--7 b(rameSet)26 b(is)g(the)g(same)g(as)f(that)i(of)f(its)g(curren)n(t)g
-(F)-7 b(rame)26 b(\(as)f(sp)r(eci\014ed)427 3151 y(b)n(y)j(the)g
-(Curren)n(t)e(attribute\).)p 0 3339 V 0 3470 a FA(MaxAxes)794
-3471 y Fd(Maxim)m(um)37 b(n)m(um)m(b)s(er)h(of)h(F)-10
-b(rame)38 b(axes)h(to)f(matc)m(h)3229 3470 y FA(MaxAxes)0
-3630 y Fc(Description:)44 b Fk(This)27 b(attribute)f(con)n(trols)e(ho)n
-(w)i(a)g(F)-7 b(rame)25 b(b)r(eha)n(v)n(es)g(when)i(it)f(is)g(used)h
-(\(b)n(y)f(AST)p Ft(_)p Fk(FINDFRAME\))h(as)227 3730
-y(a)k(template)h(to)g(matc)n(h)f(another)f(\(target\))i(F)-7
-b(rame.)48 b(It)32 b(sp)r(eci\014es)f(the)h(maxim)n(um)f(n)n(um)n(b)r
-(er)g(of)h(axes)e(that)i(the)227 3829 y(target)27 b(F)-7
-b(rame)27 b(ma)n(y)g(ha)n(v)n(e)f(in)i(order)e(to)i(matc)n(h)f(the)h
-(template.)227 3951 y(Normally)-7 b(,)22 b(this)g(v)-5
-b(alue)22 b(will)g(equal)g(the)g(n)n(um)n(b)r(er)f(of)h(F)-7
-b(rame)21 b(axes,)h(so)g(that)g(a)f(template)h(F)-7 b(rame)21
-b(will)h(only)g(matc)n(h)227 4051 y(another)29 b(F)-7
-b(rame)30 b(with)g(the)g(same)g(n)n(um)n(b)r(er)g(of)f(axes)g(as)h
-(itself.)44 b(By)30 b(setting)g(a)f(di\013eren)n(t)h(v)-5
-b(alue,)31 b(ho)n(w)n(ev)n(er,)d(the)227 4150 y(matc)n(hing)f(pro)r
-(cess)g(ma)n(y)g(b)r(e)h(used)f(to)h(iden)n(tify)g(F)-7
-b(rames)27 b(with)h(sp)r(eci\014ed)g(n)n(um)n(b)r(ers)f(of)g(axes.)0
-4294 y Fc(T)m(yp)s(e:)227 4394 y Fk(In)n(teger.)0 4538
-y Fc(Class)k(Applicabilit)m(y:)259 4669 y(F)-8 b(rame)427
-4769 y Fk(The)35 b(default)g(MaxAxes)f(v)-5 b(alue)34
-b(for)g(a)g(F)-7 b(rame)34 b(is)h(equal)f(to)g(the)h(n)n(um)n(b)r(er)g
-(of)f(F)-7 b(rame)34 b(axes)g(\(Naxes)g(at-)427 4868
-y(tribute\).)259 4996 y Fc(CmpF)-8 b(rame)427 5095 y
-Fk(The)27 b(MaxAxes)f(attribute)h(of)f(a)g(CmpF)-7 b(rame)27
-b(defaults)g(to)f(a)g(large)g(n)n(um)n(b)r(er)g(\(1000000\))e(whic)n(h)
-i(is)h(m)n(uc)n(h)427 5195 y(larger)k(than)j(an)n(y)e(lik)n(ely)g(n)n
-(um)n(b)r(er)h(of)g(axes)f(in)i(a)e(F)-7 b(rame.)53 b(Com)n(bined)33
-b(with)h(the)f(MinAxes)g(default)h(of)427 5295 y(zero)28
-b(\(for)h(a)g(CmpF)-7 b(rame\),)30 b(this)f(means)g(that)g(the)h
-(default)f(b)r(eha)n(viour)f(for)h(a)g(CmpF)-7 b(rame)29
-b(is)g(to)g(matc)n(h)427 5394 y(an)n(y)24 b(target)g(F)-7
-b(rame)24 b(that)h(consists)f(of)g(a)g(subset)h(of)f(the)h(axes)f(in)h
-(the)g(template)g(CmpF)-7 b(rame.)36 b(T)-7 b(o)24 b(c)n(hange)427
-5494 y(this)33 b(so)f(that)g(a)g(CmpF)-7 b(rame)32 b(will)h(only)f
-(matc)n(h)g(F)-7 b(rames)31 b(that)i(ha)n(v)n(e)e(the)i(same)e(n)n(um)n
-(b)r(er)h(of)h(axes,)f(y)n(ou)427 5593 y(should)i(set)g(the)h(CmpF)-7
-b(rame)34 b(MaxAxes)f(and)h(MinAxes)g(attributes)g(to)g(the)h(n)n(um)n
-(b)r(er)f(of)g(axes)f(in)h(the)427 5693 y(CmpF)-7 b(rame.)p
-eop end
-%%Page: 429 439
-TeXDict begin 429 438 bop 3643 52 a FG(429)259 351 y
-Fc(F)-8 b(rameSet)427 451 y Fk(The)29 b(MaxAxes)f(attribute)h(of)g(a)g
-(F)-7 b(rameSet)28 b(is)h(the)g(same)f(as)h(that)g(of)g(its)g(curren)n
-(t)f(F)-7 b(rame)28 b(\(as)g(sp)r(eci\014ed)427 551 y(b)n(y)g(the)g
-(Curren)n(t)e(attribute\).)0 706 y Fc(Notes:)340 982
-y Fj(\017)45 b Fk(When)39 b(setting)g(a)e(MaxAxes)h(v)-5
-b(alue,)41 b(the)e(v)-5 b(alue)38 b(of)g(the)h(MinAxes)g(attribute)f
-(ma)n(y)g(also)f(b)r(e)i(silen)n(tly)427 1082 y(c)n(hanged)26
-b(so)h(that)g(it)g(remains)f(consisten)n(t)h(with)g(\(i.e.)37
-b(do)r(es)27 b(not)g(exceed\))g(the)g(new)h(v)-5 b(alue.)36
-b(The)27 b(default)427 1182 y(MaxAxes)g(v)-5 b(alue)28
-b(ma)n(y)e(also)h(b)r(e)h(reduced)f(to)h(remain)f(consisten)n(t)g(with)
-h(the)g(MinAxes)g(v)-5 b(alue.)340 1308 y Fj(\017)45
-b Fk(If)25 b(a)f(template)h(F)-7 b(rame)24 b(is)h(used)f(to)g(matc)n(h)
-h(a)f(target)f(with)j(a)e(di\013eren)n(t)g(n)n(um)n(b)r(er)h(of)f
-(axes,)g(the)h(Matc)n(hEnd)427 1408 y(attribute)j(of)f(the)h(template)f
-(is)g(used)h(to)f(determine)g(ho)n(w)g(the)h(individual)f(axes)f(of)i
-(eac)n(h)e(F)-7 b(rame)27 b(should)427 1507 y(matc)n(h.)p
-0 1694 3780 12 v 0 1826 a FA(MeshSize)332 b Fd(Num)m(b)s(er)38
-b(of)h(p)s(oin)m(ts)f(used)h(to)f(represen)m(t)g(the)1335
-1940 y(b)s(oundary)f(of)i(a)f(Region)3230 1826 y FA(MeshSize)0
-2117 y Fc(Description:)44 b Fk(This)24 b(attribute)f(con)n(trols)f(ho)n
-(w)g(man)n(y)h(p)r(oin)n(ts)g(are)f(used)i(when)f(creating)f(a)h(mesh)g
-(of)h(p)r(oin)n(ts)f(co)n(v)n(ering)227 2216 y(the)35
-b(b)r(oundary)e(of)i(a)f(Region.)56 b(This)34 b(mesh)g(is)g(used)h
-(primarily)e(when)h(testing)h(for)e(o)n(v)n(erlap)g(with)h(a)g(second)
-227 2316 y(Region:)i(eac)n(h)25 b(p)r(oin)n(t)h(in)g(the)g(mesh)g(is)g
-(c)n(hec)n(k)n(ed)e(to)i(see)g(if)g(it)g(is)g(inside)g(or)f(outside)h
-(the)g(second)f(Region.)36 b(Th)n(us,)227 2416 y(the)23
-b(reliabilit)n(y)f(of)g(the)h(o)n(v)n(erlap)d(c)n(hec)n(k)h(dep)r(ends)
-i(on)f(the)h(v)-5 b(alue)22 b(assigned)g(to)g(this)h(attribute.)35
-b(If)23 b(the)f(v)-5 b(alue)23 b(used)227 2515 y(is)e(v)n(ery)e(lo)n
-(w,)i(it)g(is)f(p)r(ossible)g(for)g(o)n(v)n(erlaps)e(to)i(go)g
-(unnoticed.)34 b(High)21 b(v)-5 b(alues)20 b(pro)r(duce)g(more)f
-(reliable)h(results,)h(but)227 2615 y(can)i(result)h(in)f(the)h(o)n(v)n
-(erlap)e(test)i(b)r(eing)f(v)n(ery)g(slo)n(w.)34 b(The)24
-b(default)g(v)-5 b(alue)23 b(is)h(200)e(for)h(t)n(w)n(o)g(dimensional)g
-(Regions)227 2714 y(and)f(2000)d(for)i(three)g(or)g(more)f(dimensional)
-h(Regions)g(\(this)h(attribute)f(is)g(not)h(used)f(for)g(1-dimensional)
-f(regions)227 2814 y(since)29 b(the)g(b)r(oundary)e(of)i(a)f(simple)h
-(1-d)f(Region)f(can)i(only)f(ev)n(er)f(ha)n(v)n(e)h(t)n(w)n(o)f(p)r
-(oin)n(ts\).)40 b(A)29 b(v)-5 b(alue)29 b(of)f(\014v)n(e)g(is)h(used)
-227 2914 y(if)f(the)g(supplied)g(v)-5 b(alue)28 b(is)f(less)g(than)h
-(\014v)n(e.)0 3057 y Fc(T)m(yp)s(e:)227 3156 y Fk(In)n(teger.)0
-3300 y Fc(Class)j(Applicabilit)m(y:)259 3430 y(Region)427
-3529 y Fk(All)d(Regions)f(ha)n(v)n(e)f(this)i(attribute.)259
-3656 y Fc(CmpRegion)427 3756 y Fk(The)g(default)g(MeshSize)g(for)f(a)g
-(CmpRegion)g(is)g(the)h(MeshSize)g(of)f(its)h(\014rst)g(comp)r(onen)n
-(t)f(Region.)259 3882 y Fc(Stc)427 3982 y Fk(The)h(default)g(MeshSize)g
-(for)f(an)g(Stc)h(is)f(the)h(MeshSize)g(of)f(its)h(encapsulated)f
-(Region.)p 0 4168 V 0 4300 a FA(MinAxes)279 b Fd(Minim)m(um)37
-b(n)m(um)m(b)s(er)h(of)g(F)-10 b(rame)39 b(axes)f(to)g(matc)m(h)278
-b FA(MinAxes)0 4458 y Fc(Description:)44 b Fk(This)27
-b(attribute)f(con)n(trols)e(ho)n(w)i(a)g(F)-7 b(rame)25
-b(b)r(eha)n(v)n(es)g(when)i(it)f(is)g(used)h(\(b)n(y)f(AST)p
-Ft(_)p Fk(FINDFRAME\))h(as)227 4557 y(a)32 b(template)h(to)f(matc)n(h)h
-(another)e(\(target\))h(F)-7 b(rame.)51 b(It)33 b(sp)r(eci\014es)f(the)
-h(minim)n(um)g(n)n(um)n(b)r(er)g(of)f(axes)f(that)i(the)227
-4657 y(target)27 b(F)-7 b(rame)27 b(ma)n(y)g(ha)n(v)n(e)f(in)i(order)e
-(to)i(matc)n(h)f(the)h(template.)227 4778 y(Normally)-7
-b(,)22 b(this)g(v)-5 b(alue)22 b(will)g(equal)g(the)g(n)n(um)n(b)r(er)f
-(of)h(F)-7 b(rame)21 b(axes,)h(so)g(that)g(a)f(template)h(F)-7
-b(rame)21 b(will)h(only)g(matc)n(h)227 4878 y(another)29
-b(F)-7 b(rame)30 b(with)g(the)g(same)g(n)n(um)n(b)r(er)g(of)f(axes)g
-(as)h(itself.)44 b(By)30 b(setting)g(a)f(di\013eren)n(t)h(v)-5
-b(alue,)31 b(ho)n(w)n(ev)n(er,)d(the)227 4978 y(matc)n(hing)f(pro)r
-(cess)g(ma)n(y)g(b)r(e)h(used)f(to)h(iden)n(tify)g(F)-7
-b(rames)27 b(with)h(sp)r(eci\014ed)g(n)n(um)n(b)r(ers)f(of)g(axes.)0
-5121 y Fc(T)m(yp)s(e:)227 5220 y Fk(In)n(teger.)0 5364
-y Fc(Class)k(Applicabilit)m(y:)259 5494 y(F)-8 b(rame)427
-5593 y Fk(The)36 b(default)g(MinAxes)g(v)-5 b(alue)35
-b(for)g(a)g(F)-7 b(rame)35 b(is)h(equal)f(to)g(the)h(n)n(um)n(b)r(er)g
-(of)f(F)-7 b(rame)35 b(axes)g(\(Naxes)g(at-)427 5693
-y(tribute\).)p eop end
-%%Page: 430 440
-TeXDict begin 430 439 bop 0 52 a FG(430)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)259 351
-y Fc(CmpF)-8 b(rame)427 451 y Fk(The)22 b(MinAxes)f(attribute)h(of)f(a)
-g(CmpF)-7 b(rame)22 b(defaults)f(to)h(zero.)33 b(Com)n(bined)22
-b(with)g(the)f(MaxAxes)g(default)427 551 y(of)30 b(1000000)d(\(for)j(a)
-g(CmpF)-7 b(rame\),)30 b(this)h(means)e(that)i(the)f(default)h(b)r(eha)
-n(viour)e(for)g(a)h(CmpF)-7 b(rame)30 b(is)g(to)427 650
-y(matc)n(h)c(an)n(y)f(target)h(F)-7 b(rame)25 b(that)i(consists)e(of)h
-(a)g(subset)g(of)g(the)g(axes)g(in)g(the)g(template)h(CmpF)-7
-b(rame.)36 b(T)-7 b(o)427 750 y(c)n(hange)24 b(this)h(so)g(that)g(a)g
-(CmpF)-7 b(rame)25 b(will)g(only)g(matc)n(h)f(F)-7 b(rames)25
-b(that)g(ha)n(v)n(e)f(the)h(same)g(n)n(um)n(b)r(er)f(of)h(axes,)427
-849 y(y)n(ou)33 b(should)g(set)g(the)g(CmpF)-7 b(rame)33
-b(MinAxes)g(and)g(MaxAxes)g(attributes)g(to)g(the)g(n)n(um)n(b)r(er)g
-(of)g(axes)f(in)427 949 y(the)c(CmpF)-7 b(rame.)259 1086
-y Fc(F)f(rameSet)427 1186 y Fk(The)30 b(MinAxes)g(attribute)g(of)g(a)f
-(F)-7 b(rameSet)30 b(is)g(the)g(same)f(as)h(that)g(of)g(its)g(curren)n
-(t)f(F)-7 b(rame)29 b(\(as)g(sp)r(eci\014ed)427 1285
-y(b)n(y)f(the)g(Curren)n(t)e(attribute\).)0 1456 y Fc(Notes:)340
-1746 y Fj(\017)45 b Fk(When)39 b(setting)g(a)e(MinAxes)i(v)-5
-b(alue,)41 b(the)e(v)-5 b(alue)38 b(of)g(the)h(MaxAxes)f(attribute)g
-(ma)n(y)g(also)f(b)r(e)i(silen)n(tly)427 1846 y(c)n(hanged)28
-b(so)f(that)i(it)f(remains)g(consisten)n(t)g(with)g(\(i.e.)40
-b(is)28 b(not)g(less)g(than\))h(the)g(new)f(v)-5 b(alue.)39
-b(The)28 b(default)427 1946 y(MinAxes)g(v)-5 b(alue)27
-b(ma)n(y)g(also)g(b)r(e)h(reduced)f(to)h(remain)f(consisten)n(t)g(with)
-h(the)g(MaxAxes)f(v)-5 b(alue.)340 2083 y Fj(\017)45
-b Fk(If)25 b(a)f(template)h(F)-7 b(rame)24 b(is)h(used)f(to)g(matc)n(h)
-h(a)f(target)f(with)j(a)e(di\013eren)n(t)g(n)n(um)n(b)r(er)h(of)f
-(axes,)g(the)h(Matc)n(hEnd)427 2182 y(attribute)j(of)f(the)h(template)f
-(is)g(used)h(to)f(determine)g(ho)n(w)g(the)h(individual)f(axes)f(of)i
-(eac)n(h)e(F)-7 b(rame)27 b(should)427 2282 y(matc)n(h.)p
-0 2490 3780 12 v 0 2628 a FA(MinTic)l(k\(axis\))1033
-2621 y Fd(Densit)m(y)38 b(of)h(minor)e(tic)m(k)g(marks)h(for)g(a)1782
-2736 y(Plot)2951 2628 y FA(MinTic)l(k\(axis\))0 2914
-y Fc(Description:)44 b Fk(This)30 b(attribute)g(con)n(trols)e(the)i
-(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 3014 y(AST)p Ft(_)p Fk(GRID)k(routine\))g(b)n(y)f
-(determining)g(the)h(densit)n(y)g(of)f(minor)g(tic)n(k)g(marks)g(whic)n
-(h)g(app)r(ear)g(b)r(et)n(w)n(een)g(the)227 3114 y(ma)5
-b(jor)29 b(axis)g(v)-5 b(alues)30 b(of)g(a)f(Plot.)43
-b(It)31 b(tak)n(es)e(a)g(separate)g(v)-5 b(alue)29 b(for)h(eac)n(h)f
-(ph)n(ysical)g(axis)g(of)h(a)g(Plot)f(so)g(that,)i(for)227
-3213 y(instance,)i(the)f(setting)g Ft(")p Fk(MinTic)n(k\(2\)=2)p
-Ft(")e Fk(sp)r(eci\014es)i(the)h(densit)n(y)e(of)h(minor)g(tic)n(k)f
-(marks)g(along)g(the)h(second)227 3313 y(axis.)227 3442
-y(The)e(v)-5 b(alue)29 b(supplied)h(should)g(b)r(e)g(the)g(n)n(um)n(b)r
-(er)f(of)g(minor)h(divisions)e(required)h(b)r(et)n(w)n(een)h(eac)n(h)e
-(pair)h(of)h(ma)5 b(jor)227 3541 y(axis)28 b(v)-5 b(alues,)28
-b(this)g(b)r(eing)h(one)e(more)h(than)g(the)h(n)n(um)n(b)r(er)f(of)g
-(minor)g(tic)n(k)g(marks)f(to)h(b)r(e)g(dra)n(wn.)38
-b(By)28 b(default,)h(a)227 3641 y(v)-5 b(alue)28 b(is)f(c)n(hosen)g
-(that)h(dep)r(ends)g(on)f(the)h(gap)f(b)r(et)n(w)n(een)g(ma)5
-b(jor)27 b(axis)g(v)-5 b(alues)27 b(and)g(the)h(nature)f(of)h(the)g
-(axis.)0 3799 y Fc(T)m(yp)s(e:)227 3898 y Fk(In)n(teger.)0
-4056 y Fc(Class)j(Applicabilit)m(y:)259 4201 y(Plot)427
-4301 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-4471 y Fc(Notes:)340 4762 y Fj(\017)45 b Fk(If)36 b(no)f(axis)g(is)g
-(sp)r(eci\014ed,)j(\(e.g.)60 b Ft(")p Fk(MinTic)n(k)p
-Ft(")35 b Fk(instead)g(of)g Ft(")p Fk(MinTic)n(k\(2\))p
-Ft(")p Fk(\),)i(then)f(a)f Ft(")p Fk(set)p Ft(")g Fk(or)f
-Ft(")p Fk(clear)p Ft(")427 4861 y Fk(op)r(eration)23
-b(will)i(a\013ect)f(the)h(attribute)f(v)-5 b(alue)24
-b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f Ft(")p
-Fk(get)p Ft(")f Fk(or)g Ft(")p Fk(test)p Ft(")h Fk(op)r(eration)427
-4961 y(will)k(use)g(just)g(the)g(MinTic)n(k\(1\))f(v)-5
-b(alue.)p 0 5169 V 0 5307 a FA(MinTic)l(kLen\(axis\))1361
-5300 y Fd(Length)38 b(of)g(minor)f(tic)m(k)1469 5415
-y(marks)h(for)g(a)g(Plot)2734 5307 y FA(MinTic)l(kLen\(axis\))0
-5593 y Fc(Description:)44 b Fk(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 5693 y(AST)p Ft(_)p Fk(GRID)k(routine\))f(b)n(y)f
-(determining)h(the)h(length)f(of)g(the)g(minor)f(tic)n(k)h(marks)f(dra)
-n(wn)g(on)h(the)g(axes)f(of)h(a)p eop end
-%%Page: 431 441
-TeXDict begin 431 440 bop 3643 52 a FG(431)227 351 y
-Fk(Plot.)42 b(It)30 b(tak)n(es)f(a)g(separate)f(v)-5
-b(alue)29 b(for)g(eac)n(h)g(ph)n(ysical)f(axis)h(of)g(the)h(Plot)f(so)g
-(that,)h(for)f(instance,)h(the)g(setting)227 451 y Ft(")p
-Fk(MinTic)n(kLen\(2\)=0)p Ft(")c Fk(sp)r(eci\014es)h(the)h(length)g(of)
-g(the)g(minor)f(tic)n(k)g(marks)g(dra)n(wn)f(on)h(the)h(second)f(axis.)
-227 581 y(The)35 b(MinTic)n(kLen)f(v)-5 b(alue)34 b(should)g(b)r(e)h
-(giv)n(en)f(as)f(a)h(fraction)g(of)g(the)h(minim)n(um)g(dimension)f(of)
-h(the)g(plotting)227 681 y(area.)56 b(Negativ)n(e)34
-b(v)-5 b(alues)34 b(cause)g(minor)g(tic)n(k)g(marks)f(to)i(b)r(e)g
-(placed)f(on)g(the)h(outside)f(of)h(the)g(corresp)r(onding)227
-780 y(grid)c(line)h(or)f(axis)g(\(but)i(sub)5 b(ject)32
-b(to)g(an)n(y)f(clipping)g(imp)r(osed)h(b)n(y)g(the)g(underlying)f
-(graphics)f(system\),)j(while)227 880 y(p)r(ositiv)n(e)27
-b(v)-5 b(alues)28 b(cause)f(them)h(to)f(b)r(e)h(placed)f(on)h(the)g
-(inside.)227 1010 y(The)g(default)g(v)-5 b(alue)27 b(is)h(+0.007.)0
-1171 y Fc(T)m(yp)s(e:)227 1270 y Fk(Floating)f(p)r(oin)n(t.)0
-1431 y Fc(Class)k(Applicabilit)m(y:)259 1579 y(Plot)427
-1678 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-1851 y Fc(Notes:)340 2145 y Fj(\017)45 b Fk(The)27 b(n)n(um)n(b)r(er)f
-(of)g(minor)g(tic)n(k)h(marks)e(dra)n(wn)h(is)g(determined)h(b)n(y)f
-(the)h(Plot's)e(MinTic)n(k\(axis\))h(attribute.)340 2284
-y Fj(\017)45 b Fk(If)38 b(no)e(axis)h(is)f(sp)r(eci\014ed,)k(\(e.g.)65
-b Ft(")p Fk(MinTic)n(kLen)p Ft(")36 b Fk(instead)h(of)g
-Ft(")p Fk(MinTic)n(kLen\(2\))p Ft(")p Fk(\),)h(then)g(a)e
-Ft(")p Fk(set)p Ft(")g Fk(or)427 2383 y Ft(")p Fk(clear)p
-Ft(")28 b Fk(op)r(eration)g(will)i(a\013ect)g(the)g(attribute)g(v)-5
-b(alue)29 b(of)h(all)f(the)h(Plot)f(axes,)g(while)h(a)f
-Ft(")p Fk(get)p Ft(")f Fk(or)h Ft(")p Fk(test)p Ft(")427
-2483 y Fk(op)r(eration)e(will)h(use)f(just)h(the)g(MinTic)n(kLen\(1\))g
-(v)-5 b(alue.)p 0 2693 3780 12 v 0 2824 a FA(NatLat)823
-2825 y Fd(Nativ)m(e)37 b(latitude)g(of)h(the)h(reference)f(p)s(oin)m(t)
-f(of)i(a)1325 2938 y(FITS-W)m(CS)g(pro)7 b(jection)3358
-2824 y FA(NatLat)0 3138 y Fc(Description:)44 b Fk(This)23
-b(attribute)g(giv)n(es)e(the)i(latitude)g(of)g(the)g(reference)f(p)r
-(oin)n(t)h(of)f(the)h(FITS-W)n(CS)g(pro)5 b(jection)22
-b(imple-)227 3238 y(men)n(ted)30 b(b)n(y)g(a)f(WcsMap.)43
-b(The)29 b(v)-5 b(alue)30 b(is)f(in)h(radians)f(in)g(the)h
-Ft(")p Fk(nativ)n(e)f(spherical)p Ft(")f Fk(co)r(ordinate)h(system.)43
-b(This)227 3338 y(v)-5 b(alue)29 b(is)f(\014xed)g(for)g(most)g(pro)5
-b(jections,)28 b(for)g(instance)g(it)h(is)f(PI/2)f(\(90)h(degrees\))f
-(for)h(all)g(zenithal)h(pro)5 b(jections.)227 3437 y(F)-7
-b(or)28 b(some)g(pro)5 b(jections)28 b(\(e.g.)39 b(the)29
-b(conics\))f(the)h(v)-5 b(alue)29 b(is)f(not)h(\014xed,)g(but)g(is)f
-(sp)r(eci\014ed)h(b)n(y)g(parameter)e(one)h(on)227 3537
-y(the)g(latitude)g(axis.)227 3667 y(FITS-W)n(CS)g(pap)r(er)f(I)r(I)g
-(in)n(tro)r(duces)g(the)h(concept)f(of)g(a)g Ft(")p Fk(\014ducial)g(p)r
-(oin)n(t)p Ft(")g Fk(whic)n(h)g(is)g(logical)f(distinct)i(from)f(the)
-227 3767 y(pro)5 b(jection)29 b(reference)g(p)r(oin)n(t.)43
-b(It)30 b(is)f(easy)g(to)h(confuse)f(the)h(use)f(of)h(these)g(t)n(w)n
-(o)f(p)r(oin)n(ts.)43 b(The)29 b(\014ducial)h(p)r(oin)n(t)g(is)227
-3866 y(the)22 b(p)r(oin)n(t)g(whic)n(h)g(has)f(celestial)g(co)r
-(ordinates)f(giv)n(en)h(b)n(y)g(the)h(CR)-9 b(V)g(AL)22
-b(FITS)g(k)n(eyw)n(ords.)33 b(The)21 b(nativ)n(e)h(spherical)227
-3966 y(co)r(ordinates)k(for)h(this)g(p)r(oin)n(t)h(default)f(to)g(the)h
-(v)-5 b(alues)27 b(of)g(the)g(NatLat)g(and)g(NatLon,)g(but)h(these)f
-(defaults)h(mey)227 4066 y(b)r(e)34 b(o)n(v)n(er-ridden)c(b)n(y)j(v)-5
-b(alues)32 b(stored)g(in)h(the)h(PVi)p Ft(_)p Fk(j)e(k)n(eyw)n(ords.)51
-b(Put)33 b(another)e(w)n(a)n(y)-7 b(,)34 b(the)f(CR)-9
-b(V)g(AL)33 b(k)n(eyw)n(ords)227 4165 y(will)j(b)n(y)e(default)i(giv)n
-(e)e(the)h(celestial)g(co)r(ordinates)f(of)h(the)g(pro)5
-b(jection)34 b(reference)g(p)r(oin)n(t,)j(but)f(ma)n(y)e(refer)h(to)227
-4265 y(some)23 b(other)g(p)r(oin)n(t)g(if)h(alternativ)n(e)e(nativ)n(e)
-h(longitude)g(and)g(latitude)h(v)-5 b(alues)23 b(are)f(pro)n(vided)g
-(through)h(the)h(PVi)p Ft(_)p Fk(j)227 4364 y(k)n(eyw)n(ords.)227
-4495 y(The)k(NatLat)f(attribute)h(is)g(read-only)-7 b(.)0
-4655 y Fc(T)m(yp)s(e:)227 4755 y Fk(Floating)27 b(p)r(oin)n(t,)h
-(read-only)-7 b(.)0 4916 y Fc(Class)31 b(Applicabilit)m(y:)259
-5063 y(WcsMap)427 5163 y Fk(All)d(WcsMaps)f(ha)n(v)n(e)g(this)h
-(attribute.)0 5336 y Fc(Notes:)340 5630 y Fj(\017)45
-b Fk(A)28 b(default)g(v)-5 b(alue)28 b(of)f(AST)p Ft(__)p
-Fk(BAD)h(is)f(used)h(if)g(no)f(latitude)h(v)-5 b(alue)28
-b(is)f(a)n(v)-5 b(ailable.)p eop end
-%%Page: 432 442
-TeXDict begin 432 441 bop 0 52 a FG(432)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 482 a FA(NatLon)784 483 y Fd(Nativ)m(e)37
-b(longitude)g(of)h(the)h(reference)f(p)s(oin)m(t)f(of)i(a)1325
-596 y(FITS-W)m(CS)g(pro)7 b(jection)3334 482 y FA(NatLon)0
-827 y Fc(Description:)44 b Fk(This)39 b(attribute)g(giv)n(es)f(the)h
-(longitude)f(of)h(the)g(reference)f(p)r(oin)n(t)h(of)g(the)g(FITS-W)n
-(CS)g(pro)5 b(jection)227 927 y(implemen)n(ted)31 b(b)n(y)f(a)f
-(WcsMap.)44 b(The)30 b(v)-5 b(alue)30 b(is)g(in)h(radians)d(in)j(the)f
-Ft(")p Fk(nativ)n(e)f(spherical)p Ft(")g Fk(co)r(ordinate)g(system,)227
-1026 y(and)f(will)g(usually)f(b)r(e)h(zero.)35 b(See)28
-b(the)g(description)f(of)h(attribute)f(NatLat)h(for)f(further)g
-(information.)227 1172 y(The)h(NatLon)f(attribute)h(is)f(read-only)-7
-b(.)0 1363 y Fc(T)m(yp)s(e:)227 1463 y Fk(Floating)27
-b(p)r(oin)n(t,)h(read-only)-7 b(.)0 1654 y Fc(Class)31
-b(Applicabilit)m(y:)259 1832 y(WcsMap)427 1932 y Fk(All)d(WcsMaps)f(ha)
-n(v)n(e)g(this)h(attribute.)p 0 2173 V 0 2304 a FA(Naxes)1308
-2305 y Fd(Num)m(b)s(er)38 b(of)g(F)-10 b(rame)39 b(axes)3424
-2304 y FA(Naxes)0 2517 y Fc(Description:)44 b Fk(This)33
-b(is)f(a)g(read-only)f(attribute)i(giving)f(the)h(n)n(um)n(b)r(er)f(of)
-h(axes)e(in)i(a)f(F)-7 b(rame)32 b(\(i.e.)52 b(the)33
-b(n)n(um)n(b)r(er)g(of)227 2616 y(dimensions)24 b(of)g(the)g(co)r
-(ordinate)f(space)g(whic)n(h)h(the)g(F)-7 b(rame)24 b(describ)r(es\).)
-35 b(This)24 b(v)-5 b(alue)24 b(is)g(determined)g(when)g(the)227
-2716 y(F)-7 b(rame)27 b(is)h(created.)0 2907 y Fc(T)m(yp)s(e:)227
-3007 y Fk(In)n(teger,)f(read-only)-7 b(.)0 3198 y Fc(Class)31
-b(Applicabilit)m(y:)259 3376 y(F)-8 b(rame)427 3476 y
-Fk(All)28 b(F)-7 b(rames)27 b(ha)n(v)n(e)g(this)g(attribute.)259
-3630 y Fc(F)-8 b(rameSet)427 3730 y Fk(The)29 b(Naxes)g(attribute)g(of)
-g(a)g(F)-7 b(rameSet)28 b(is)h(the)h(same)e(as)h(that)g(of)g(its)g
-(curren)n(t)f(F)-7 b(rame)29 b(\(as)g(sp)r(eci\014ed)g(b)n(y)427
-3829 y(the)f(Curren)n(t)f(attribute\).)259 3983 y Fc(CmpF)-8
-b(rame)427 4083 y Fk(The)40 b(Naxes)e(attribute)i(of)f(a)g(CmpF)-7
-b(rame)39 b(is)g(equal)g(to)h(the)f(sum)h(of)f(the)h(Naxes)f(v)-5
-b(alues)39 b(of)g(its)g(t)n(w)n(o)427 4182 y(comp)r(onen)n(t)28
-b(F)-7 b(rames.)p 0 4423 V 0 4555 a FA(Ncard)388 b Fd(Num)m(b)s(er)38
-b(of)g(FITS)h(header)g(cards)f(in)g(a)h(FitsChan)387
-b FA(Ncard)0 4762 y Fc(Description:)44 b Fk(This)33 b(attribute)g(giv)n
-(es)e(the)i(total)f(n)n(um)n(b)r(er)h(of)f(FITS)h(header)f(cards)f
-(stored)h(in)h(a)f(FitsChan.)52 b(It)33 b(is)227 4862
-y(up)r(dated)28 b(as)f(cards)g(are)f(added)i(or)f(deleted.)0
-5053 y Fc(T)m(yp)s(e:)227 5153 y Fk(In)n(teger,)g(read-only)-7
-b(.)0 5344 y Fc(Class)31 b(Applicabilit)m(y:)259 5523
-y(FitsChan)427 5622 y Fk(All)d(FitsChans)g(ha)n(v)n(e)e(this)i
-(attribute.)p eop end
-%%Page: 433 443
-TeXDict begin 433 442 bop 3643 52 a FG(433)p 0 351 3780
-12 v 0 482 a FA(NegLon)1009 483 y Fd(Displa)m(y)37 b(negativ)m(e)g
-(longitude)g(v)-7 b(alues?)3323 482 y FA(NegLon)0 708
-y Fc(Description:)44 b Fk(This)29 b(attribute)g(is)f(a)h(b)r(o)r(olean)
-f(v)-5 b(alue)28 b(whic)n(h)h(con)n(trols)e(ho)n(w)h(longitude)h(v)-5
-b(alues)28 b(are)f(normalized)h(for)227 808 y(displa)n(y)f(b)n(y)g(AST)
-p Ft(_)p Fk(NORM.)227 950 y(If)h(the)f(NegLon)f(attribute)i(is)f(zero,)
-f(then)h(normalized)f(longitude)h(v)-5 b(alues)27 b(will)g(b)r(e)g(in)h
-(the)f(range)f(zero)g(to)h(2.pi.)227 1050 y(If)h(NegLon)f(is)h
-(non-zero,)e(then)i(normalized)e(longitude)i(v)-5 b(alues)27
-b(will)h(b)r(e)g(in)g(the)g(range)e(-pi)h(to)h(pi.)227
-1193 y(The)h(default)f(v)-5 b(alue)29 b(dep)r(ends)f(on)g(the)h(curren)
-n(t)f(v)-5 b(alue)28 b(of)g(the)h(SkyRefIs)f(attribute,)h(If)g
-(SkyRefIs)f(has)g(a)g(v)-5 b(alue)227 1292 y(of)28 b
-Ft(")p Fk(Origin)p Ft(")p Fk(,)e(then)i(the)g(default)g(for)f(NegLon)g
-(is)g(one,)g(otherwise)g(the)h(default)g(is)g(zero.)0
-1478 y Fc(T)m(yp)s(e:)227 1578 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-1764 y Fc(Class)k(Applicabilit)m(y:)259 1937 y(SkyF)-8
-b(rame)427 2036 y Fk(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i
-(attribute.)p 0 2272 V 0 2403 a FA(Negated)879 b Fd(Region)38
-b(negation)f(\015ag)877 b FA(Negated)0 2629 y Fc(Description:)44
-b Fk(This)30 b(attribute)f(con)n(trols)f(whether)i(a)f(Region)f
-(represen)n(ts)g(the)i Ft(")p Fk(inside)p Ft(")f Fk(or)g(the)g
-Ft(")p Fk(outside)p Ft(")g Fk(of)g(the)227 2728 y(area)d(whic)n(h)h(w)n
-(as)f(supplied)i(when)f(the)h(Region)f(w)n(as)f(created.)36
-b(If)27 b(the)h(attribute)g(v)-5 b(alue)27 b(is)g(zero)f(\(the)i
-(default\),)227 2828 y(the)k(Region)e(represen)n(ts)f(the)j(inside)f
-(of)g(the)g(original)e(area.)46 b(Ho)n(w)n(ev)n(er,)30
-b(if)h(it)g(is)g(non-zero,)f(it)i(represen)n(ts)d(the)227
-2928 y(outside)f(of)h(the)f(original)f(area.)38 b(The)28
-b(v)-5 b(alue)28 b(of)h(this)f(attribute)h(ma)n(y)e(b)r(e)i(toggled)e
-(using)h(the)h(AST)p Ft(_)p Fk(NEGA)-7 b(TE)227 3027
-y(routine.)227 3170 y(Note,)24 b(whether)e(the)h(b)r(oundary)f(is)h
-(considered)e(to)i(b)r(e)g(inside)f(the)h(Region)f(or)g(not)g(is)h(con)
-n(trolled)e(b)n(y)h(the)h(Closed)227 3270 y(attribute.)51
-b(Changing)32 b(the)g(v)-5 b(alue)33 b(of)f(the)h(Negated)e(attribute)i
-(do)r(es)f(not)g(c)n(hange)f(the)i(v)-5 b(alue)32 b(of)h(the)f(Closed)
-227 3369 y(attribute.)51 b(Th)n(us,)34 b(if)f(Region)e(is)h(closed,)h
-(then)g(the)g(b)r(oundary)e(of)i(the)f(Region)g(will)g(b)r(e)h(inside)g
-(the)f(Region,)227 3469 y(whatev)n(er)27 b(the)h(setting)f(of)h(the)g
-(Negated)f(attribute.)0 3655 y Fc(T)m(yp)s(e:)227 3754
-y Fk(In)n(teger)g(\(b)r(o)r(olean\).)0 3940 y Fc(Class)k(Applicabilit)m
-(y:)259 4113 y(Region)427 4212 y Fk(All)d(Regions)f(ha)n(v)n(e)f(this)i
-(attribute.)p 0 4448 V 0 4580 a FA(Nframe)597 b Fd(Num)m(b)s(er)38
-b(of)g(F)-10 b(rames)39 b(in)f(a)h(F)-10 b(rameSet)595
-b FA(Nframe)0 4782 y Fc(Description:)44 b Fk(This)22
-b(attrbute)f(giv)n(es)g(the)h(n)n(um)n(b)r(er)f(of)g(F)-7
-b(rames)21 b(in)h(a)f(F)-7 b(rameSet.)35 b(This)21 b(v)-5
-b(alue)21 b(will)h(c)n(hange)f(as)f(F)-7 b(rames)227
-4881 y(are)27 b(added)g(or)g(remo)n(v)n(ed,)f(but)i(will)g(alw)n(a)n
-(ys)e(b)r(e)i(at)f(least)g(one.)0 5067 y Fc(T)m(yp)s(e:)227
-5167 y Fk(In)n(teger,)g(read-only)-7 b(.)0 5353 y Fc(Class)31
-b(Applicabilit)m(y:)259 5525 y(F)-8 b(rameSet)427 5625
-y Fk(All)28 b(F)-7 b(rameSets)27 b(ha)n(v)n(e)g(this)h(attribute.)p
-eop end
-%%Page: 434 444
-TeXDict begin 434 443 bop 0 52 a FG(434)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a FA(Nin)549 b Fd(Num)m(b)s(er)38 b(of)g(input)g(co)s
-(ordinates)f(for)h(a)h(Mapping)547 b FA(Nin)0 668 y Fc(Description:)44
-b Fk(This)33 b(attribute)f(giv)n(es)f(the)i(n)n(um)n(b)r(er)f(of)g(co)r
-(ordinate)f(v)-5 b(alues)32 b(required)f(to)h(sp)r(ecify)g(an)g(input)h
-(p)r(oin)n(t)227 768 y(for)f(a)g(Mapping)g(\(i.e.)51
-b(the)32 b(n)n(um)n(b)r(er)g(of)h(dimensions)e(of)i(the)f(space)g(in)g
-(whic)n(h)g(the)h(Mapping's)f(input)h(p)r(oin)n(ts)227
-868 y(reside\).)0 1015 y Fc(T)m(yp)s(e:)227 1115 y Fk(In)n(teger,)27
-b(read-only)-7 b(.)0 1263 y Fc(Class)31 b(Applicabilit)m(y:)259
-1397 y(Mapping)427 1497 y Fk(All)d(Mappings)f(ha)n(v)n(e)g(this)h
-(attribute.)259 1628 y Fc(CmpMap)427 1728 y Fk(If)k(a)e(CmpMap's)h
-(comp)r(onen)n(t)g(Mappings)g(are)f(joined)h(in)g(series,)g(then)h(its)
-f(Nin)h(attribute)f(is)g(equal)g(to)427 1827 y(the)f(Nin)g(attribute)f
-(of)g(the)h(\014rst)f(comp)r(onen)n(t)g(\(or)g(to)g(the)g(Nout)h
-(attribute)f(of)h(the)f(second)g(comp)r(onen)n(t)427
-1927 y(if)f(the)g(the)g(CmpMap's)g(In)n(v)n(ert)f(attribute)g(is)h
-(non-zero\).)427 2042 y(If)e(a)f(CmpMap's)h(comp)r(onen)n(t)f(Mappings)
-g(are)f(joined)i(in)g(parallel,)e(then)i(its)g(Nin)g(attribute)g(is)f
-(giv)n(en)g(b)n(y)427 2142 y(the)32 b(sum)f(of)g(the)g(Nin)h
-(attributes)f(of)g(eac)n(h)f(comp)r(onen)n(t)h(\(or)f(to)h(the)h(sum)f
-(of)g(their)g(Nout)g(attributes)g(if)427 2242 y(the)d(CmpMap's)g(In)n
-(v)n(ert)e(attribute)i(is)g(non-zero\).)259 2373 y Fc(F)-8
-b(rame)427 2472 y Fk(The)23 b(Nin)g(attribute)f(for)g(a)g(F)-7
-b(rame)22 b(is)h(alw)n(a)n(ys)d(equal)i(to)g(the)h(n)n(um)n(b)r(er)f
-(of)h(F)-7 b(rame)22 b(axes)f(\(Naxes)h(attribute\).)259
-2603 y Fc(F)-8 b(rameSet)427 2703 y Fk(The)27 b(Nin)g(attribute)g(of)f
-(a)h(F)-7 b(rameSet)26 b(is)g(equal)h(to)f(the)h(n)n(um)n(b)r(er)f(of)h
-(axes)f(\(Naxes)g(attribute\))h(of)f(its)h(base)427 2803
-y(F)-7 b(rame)22 b(\(as)g(sp)r(eci\014ed)h(b)n(y)f(the)g(F)-7
-b(rameSet's)22 b(Base)f(attribute\).)36 b(The)22 b(Nin)h(attribute)g(v)
--5 b(alue)22 b(ma)n(y)g(therefore)427 2902 y(c)n(hange)27
-b(if)h(a)f(new)h(base)f(F)-7 b(rame)27 b(is)g(selected.)p
-0 3098 V 0 3230 a FA(Nob)7 b(ject)727 b Fd(Num)m(b)s(er)38
-b(of)g(Ob)7 b(jects)38 b(in)h(class)724 b FA(Nob)7 b(ject)0
-3415 y Fc(Description:)44 b Fk(This)22 b(attribute)g(giv)n(es)f(the)i
-(total)e(n)n(um)n(b)r(er)h(of)g(Ob)5 b(jects)21 b(curren)n(tly)g(in)i
-(existence)e(in)i(the)f(same)f(class)g(as)227 3515 y(the)29
-b(Ob)5 b(ject)29 b(whose)f(attribute)g(v)-5 b(alue)29
-b(is)f(requested.)40 b(This)28 b(coun)n(t)g(do)r(es)h(not)f(include)h
-(Ob)5 b(jects)28 b(whic)n(h)h(b)r(elong)227 3614 y(to)f(deriv)n(ed)f
-(\(more)g(sp)r(ecialised\))g(classes.)227 3738 y(This)i(attribute)h(is)
-f(mainly)g(in)n(tended)h(for)f(debugging.)40 b(It)30
-b(can)f(b)r(e)h(used)f(to)g(detect)h(whether)f(Ob)5 b(jects)29
-b(whic)n(h)227 3838 y(should)f(ha)n(v)n(e)e(b)r(een)i(deleted)g(ha)n(v)
-n(e,)f(in)g(fact,)h(b)r(een)g(deleted.)0 3985 y Fc(T)m(yp)s(e:)227
-4085 y Fk(In)n(teger,)f(read-only)-7 b(.)0 4233 y Fc(Class)31
-b(Applicabilit)m(y:)259 4367 y(Ob)5 b(ject)427 4467 y
-Fk(All)28 b(Ob)5 b(jects)28 b(ha)n(v)n(e)e(this)i(attribute.)p
-0 4663 V 0 4801 a FA(Norm\(axis\))851 4795 y Fd(Sp)s(eci\014es)39
-b(the)f(plane)g(up)s(on)h(whic)m(h)f(a)h(Plot3D)1284
-4909 y(dra)m(ws)f(text)g(and)g(mark)m(ers)3109 4801 y
-FA(Norm\(axis\))0 5071 y Fc(Description:)44 b Fk(This)30
-b(attribute)h(con)n(trols)d(the)j(app)r(earance)d(of)i(text)h(and)e
-(mark)n(ers)f(dra)n(wn)i(b)n(y)f(a)h(Plot3D.)f(It)i(sp)r(ec-)227
-5171 y(i\014es)k(the)g(orien)n(tation)f(of)g(the)i(plane)e(up)r(on)h
-(whic)n(h)g(text)g(and)g(mark)n(ers)e(will)i(b)r(e)g(dra)n(wn)f(b)n(y)g
-(all)h(subsequen)n(t)227 5270 y(in)n(v)n(o)r(cations)26
-b(of)i(the)g(AST)p Ft(_)p Fk(TEXT)f(and)h(AST)p Ft(_)p
-Fk(MARK)f(functions.)227 5394 y(When)e(setting)f(or)e(getting)i(the)g
-(Norm)g(attribute,)h(the)f(attribute)g(name)f(m)n(ust)h(b)r(e)h
-(quali\014ed)e(b)n(y)h(an)f(axis)h(index)227 5494 y(in)30
-b(the)f(range)f(1)g(to)h(3.)41 b(The)29 b(3)g(elemen)n(ts)g(of)g(the)g
-(Norm)g(attribute)g(are)f(together)g(in)n(terpreted)h(as)f(a)h(v)n
-(ector)e(in)227 5593 y(3D)g(graphics)e(co)r(ordinates)h(that)h(is)f
-(normal)g(to)h(the)g(plane)g(up)r(on)g(whic)n(h)f(text)i(and)e(marks)g
-(should)g(b)r(e)i(dra)n(wn.)227 5693 y(When)35 b(testing)f(or)f
-(clearing)f(the)j(attribute,)h(the)e(axis)f(index)h(is)g(optional.)55
-b(If)35 b(no)e(index)h(is)g(supplied,)i(then)p eop end
-%%Page: 435 445
-TeXDict begin 435 444 bop 3643 52 a FG(435)227 351 y
-Fk(clearing)22 b(the)h(Norm)f(attribute)h(will)f(clear)g(all)g(three)h
-(elemen)n(ts,)g(and)g(testing)f(the)h(Norm)f(attribute)h(will)g(return)
-227 451 y(a)k(non-zero)f(v)-5 b(alue)28 b(if)g(an)n(y)f(of)g(the)h
-(three)g(elemen)n(ts)f(are)g(set.)227 574 y(The)f(default)f(v)-5
-b(alue)25 b(is)g(1.0)g(for)g(eac)n(h)f(of)h(the)h(3)f(elemen)n(ts.)35
-b(The)26 b(length)f(of)g(the)h(v)n(ector)e(is)h(insigni\014can)n(t,)g
-(but)h(an)227 674 y(error)g(will)i(b)r(e)g(rep)r(orted)f(when)g
-(attempting)h(to)g(dra)n(w)e(text)i(or)f(mark)n(ers)e(if)k(the)f(v)n
-(ector)e(has)h(zero)f(length.)0 820 y Fc(T)m(yp)s(e:)227
-920 y Fk(Floating)h(p)r(oin)n(t.)0 1067 y Fc(Class)k(Applicabilit)m(y:)
-259 1200 y(Plot)427 1300 y Fk(All)d(Plot3Ds)f(ha)n(v)n(e)f(this)i
-(attribute.)p 0 1494 3780 12 v 0 1632 a FA(NormUnit\(axis\))1097
-1626 y Fd(Normalised)36 b(Axis)i(ph)m(ysical)g(units)2841
-1632 y FA(NormUnit\(axis\))0 1822 y Fc(Description:)44
-b Fk(The)36 b(v)-5 b(alue)36 b(of)f(this)h(read-only)e(attribute)i(is)f
-(deriv)n(ed)g(from)h(the)g(curren)n(t)e(v)-5 b(alue)36
-b(of)g(the)g(Unit)g(at-)227 1922 y(tribute.)45 b(It)30
-b(will)g(represen)n(t)f(an)h(equiv)-5 b(alen)n(t)30 b(system)f(of)h
-(units)h(to)f(the)g(Unit)h(attribute,)g(but)g(will)f(p)r(oten)n(tially)
-227 2021 y(b)r(e)k(simpli\014ed.)55 b(F)-7 b(or)32 b(instance,)j(if)f
-(Unit)g(is)f(set)h(to)f Ft(")p Fk(s)p Fj(\003)p Fk(\(m/s\))p
-Ft(")p Fk(,)g(the)h(NormUnit)g(v)-5 b(alue)33 b(will)h(b)r(e)f
-Ft(")p Fk(m)p Ft(")p Fk(.)54 b(If)34 b(no)227 2121 y(simpli\014cation)d
-(can)g(b)r(e)h(p)r(erformed,)f(the)h(v)-5 b(alue)31 b(of)g(the)h
-(NormUnit)f(attribute)h(will)f(equal)g(that)g(of)g(the)h(Unit)227
-2221 y(attribute.)0 2367 y Fc(T)m(yp)s(e:)227 2467 y
-Fk(String,)c(read-only)-7 b(.)0 2614 y Fc(Class)31 b(Applicabilit)m(y:)
-259 2747 y(F)-8 b(rame)427 2847 y Fk(All)28 b(F)-7 b(rames)27
-b(ha)n(v)n(e)g(this)g(attribute.)0 3006 y Fc(Notes:)340
-3286 y Fj(\017)45 b Fk(When)36 b(sp)r(ecifying)f(this)h(attribute)f(b)n
-(y)g(name,)i(it)f(should)f(b)r(e)h(subscripted)f(with)g(the)h(n)n(um)n
-(b)r(er)f(of)g(the)427 3386 y(F)-7 b(rame)27 b(axis)g(to)h(whic)n(h)f
-(it)h(applies.)p 0 3579 V 0 3710 a FA(Nout)730 3711 y
-Fd(Num)m(b)s(er)38 b(of)h(output)e(co)s(ordinates)g(for)h(a)g(Mapping)
-3480 3710 y FA(Nout)0 3895 y Fc(Description:)44 b Fk(This)30
-b(attribute)g(giv)n(es)f(the)h(n)n(um)n(b)r(er)f(of)h(co)r(ordinate)e
-(v)-5 b(alues)30 b(generated)e(b)n(y)i(a)f(Mapping)h(to)f(sp)r(ecify)
-227 3994 y(eac)n(h)36 b(output)h(p)r(oin)n(t)g(\(i.e.)64
-b(the)36 b(n)n(um)n(b)r(er)h(of)f(dimensions)g(of)h(the)f(space)g(in)h
-(whic)n(h)f(the)h(Mapping's)f(output)227 4094 y(p)r(oin)n(ts)28
-b(reside\).)0 4241 y Fc(T)m(yp)s(e:)227 4340 y Fk(In)n(teger,)f
-(read-only)-7 b(.)0 4487 y Fc(Class)31 b(Applicabilit)m(y:)259
-4621 y(Mapping)427 4720 y Fk(All)d(Mappings)f(ha)n(v)n(e)g(this)h
-(attribute.)259 4850 y Fc(CmpMap)427 4950 y Fk(If)g(a)g(CmpMap's)f
-(comp)r(onen)n(t)h(Mappings)f(are)g(joined)h(in)g(series,)f(then)h(its)
-g(Nout)g(attribute)g(is)f(equal)h(to)427 5050 y(the)i(Nout)f(attribute)
-h(of)f(the)h(second)e(comp)r(onen)n(t)h(\(or)g(to)g(the)h(Nin)g
-(attribute)f(of)g(the)h(\014rst)f(comp)r(onen)n(t)427
-5149 y(if)f(the)g(the)g(CmpMap's)g(In)n(v)n(ert)f(attribute)g(is)h
-(non-zero\).)427 5264 y(If)j(a)e(CmpMap's)h(comp)r(onen)n(t)g(Mappings)
-f(are)g(joined)h(in)g(parallel,)g(then)g(its)g(Nout)g(attribute)h(is)e
-(giv)n(en)427 5364 y(b)n(y)g(the)g(sum)g(of)f(the)i(Nout)f(attributes)f
-(of)h(eac)n(h)f(comp)r(onen)n(t)g(\(or)g(to)h(the)g(sum)g(of)g(their)f
-(Nin)i(attributes)427 5463 y(if)e(the)g(CmpMap's)g(In)n(v)n(ert)f
-(attribute)g(is)h(non-zero\).)259 5593 y Fc(F)-8 b(rame)427
-5693 y Fk(The)20 b(Nout)f(attribute)h(for)e(a)h(F)-7
-b(rame)19 b(is)g(alw)n(a)n(ys)e(equal)i(to)g(the)h(n)n(um)n(b)r(er)f
-(of)g(F)-7 b(rame)19 b(axes)f(\(Naxes)h(attribute\).)p
-eop end
-%%Page: 436 446
-TeXDict begin 436 445 bop 0 52 a FG(436)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)259 351
-y Fc(F)-8 b(rameSet)427 451 y Fk(The)25 b(Nout)g(attribute)g(of)g(a)f
-(F)-7 b(rameSet)25 b(is)f(equal)g(to)h(the)g(n)n(um)n(b)r(er)g(of)f(F)
--7 b(rameSet)25 b(axes)f(\(Naxes)g(attribute\))427 551
-y(whic)n(h,)k(in)f(turn,)h(is)f(equal)g(to)g(the)g(Naxes)g(attribute)h
-(of)f(the)g(F)-7 b(rameSet's)27 b(curren)n(t)g(F)-7 b(rame)26
-b(\(as)h(sp)r(eci\014ed)427 650 y(b)n(y)j(the)h(Curren)n(t)e
-(attribute\).)45 b(The)30 b(Nout)h(attribute)f(v)-5 b(alue)30
-b(ma)n(y)g(therefore)f(c)n(hange)g(if)h(a)g(new)g(curren)n(t)427
-750 y(F)-7 b(rame)27 b(is)h(selected.)p 0 940 3780 12
-v 0 1078 a FA(NumLab\(axis\))1062 1071 y Fd(Dra)m(w)38
-b(n)m(umerical)f(axis)h(lab)s(els)g(for)g(a)1754 1171
-y(Plot?)2935 1078 y FA(NumLab\(axis\))0 1332 y Fc(Description:)44
-b Fk(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)
-h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-1431 y(AST)p Ft(_)p Fk(GRID)k(routine\))e(b)n(y)h(determining)f
-(whether)h(lab)r(els)g(should)f(b)r(e)h(dra)n(wn)f(to)h(represen)n(t)e
-(the)i(n)n(umerical)227 1531 y(v)-5 b(alues)28 b(along)f(eac)n(h)g
-(axis)h(of)g(a)g(Plot.)38 b(It)29 b(tak)n(es)e(a)h(separate)e(v)-5
-b(alue)28 b(for)g(eac)n(h)f(ph)n(ysical)h(axis)f(of)h(a)g(Plot)g(so)f
-(that,)227 1631 y(for)j(instance,)g(the)h(setting)f Ft(")p
-Fk(NumLab\(2\)=1)p Ft(")f Fk(sp)r(eci\014es)h(that)g(n)n(umerical)f
-(lab)r(els)h(should)g(b)r(e)h(dra)n(wn)e(for)g(the)227
-1730 y(second)e(axis.)227 1852 y(If)j(the)f(NumLab)h(v)-5
-b(alue)29 b(of)g(a)f(Plot)h(axis)f(is)h(non-zero)f(\(the)i(default\),)g
-(then)g(n)n(umerical)e(lab)r(els)h(will)g(b)r(e)h(dra)n(wn)227
-1952 y(for)d(that)h(axis,)f(otherwise)g(they)h(will)f(b)r(e)h(omitted.)
-0 2097 y Fc(T)m(yp)s(e:)227 2196 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-2341 y Fc(Class)k(Applicabilit)m(y:)259 2473 y(Plot)427
-2572 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-2730 y Fc(Notes:)340 3007 y Fj(\017)45 b Fk(The)34 b(dra)n(wing)f(of)h
-(asso)r(ciated)f(descriptiv)n(e)g(axis)g(lab)r(els)h(for)g(a)f(Plot)h
-(\(describing)f(the)i(quan)n(tit)n(y)f(b)r(eing)427 3107
-y(plotted)28 b(along)f(eac)n(h)f(axis\))i(is)f(con)n(trolled)f(b)n(y)i
-(the)g(T)-7 b(extLab\(axis\))27 b(attribute.)340 3235
-y Fj(\017)45 b Fk(If)35 b(no)f(axis)f(is)h(sp)r(eci\014ed,)i(\(e.g.)57
-b Ft(")p Fk(NumLab)p Ft(")34 b Fk(instead)g(of)g Ft(")p
-Fk(NumLab\(2\))p Ft(")p Fk(\),)h(then)g(a)f Ft(")p Fk(set)p
-Ft(")f Fk(or)g Ft(")p Fk(clear)p Ft(")427 3335 y Fk(op)r(eration)23
-b(will)i(a\013ect)f(the)h(attribute)f(v)-5 b(alue)24
-b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f Ft(")p
-Fk(get)p Ft(")f Fk(or)g Ft(")p Fk(test)p Ft(")h Fk(op)r(eration)427
-3434 y(will)k(use)g(just)g(the)g(NumLab\(1\))g(v)-5 b(alue.)p
-0 3624 V 0 3763 a FA(NumLabGap\(axis\))1356 3756 y Fd(Spacing)38
-b(of)h(n)m(umerical)1479 3870 y(lab)s(els)f(for)g(a)g(Plot)2689
-3763 y FA(NumLabGap\(axis\))0 4031 y Fc(Description:)44
-b Fk(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)
-h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-4131 y(AST)p Ft(_)p Fk(GRID)35 b(routine\))f(b)n(y)f(determining)h
-(where)g(n)n(umerical)f(axis)g(lab)r(els)h(are)f(placed)h(relativ)n(e)e
-(to)i(the)h(axes)227 4230 y(they)c(describ)r(e.)45 b(It)31
-b(tak)n(es)e(a)h(separate)f(v)-5 b(alue)30 b(for)g(eac)n(h)g(ph)n
-(ysical)f(axis)h(of)g(a)g(Plot)g(so)g(that,)h(for)f(instance,)h(the)227
-4330 y(setting)d Ft(")p Fk(NumLabGap\(2\)=-0.01)p Ft(")e
-Fk(sp)r(eci\014es)i(where)g(the)g(n)n(umerical)g(lab)r(el)g(for)g(the)g
-(second)g(axis)f(should)h(b)r(e)227 4430 y(dra)n(wn.)227
-4552 y(F)-7 b(or)21 b(eac)n(h)f(axis,)i(the)f(NumLabGap)h(v)-5
-b(alue)21 b(giv)n(es)f(the)h(spacing)f(b)r(et)n(w)n(een)h(the)h(axis)e
-(line)i(\(or)e(edge)h(of)g(the)h(plotting)227 4652 y(area,)e(if)g
-(appropriate\))e(and)h(the)h(nearest)f(edge)g(of)g(the)h(corresp)r
-(onding)e(n)n(umerical)g(axis)h(lab)r(els.)34 b(P)n(ositiv)n(e)18
-b(v)-5 b(alues)227 4751 y(cause)28 b(the)h(descriptiv)n(e)f(lab)r(el)h
-(to)g(b)r(e)g(placed)f(on)h(the)g(opp)r(osite)g(side)f(of)h(the)g(line)
-g(to)g(the)g(default)g(tic)n(k)g(marks,)227 4851 y(while)f(negativ)n(e)
-f(v)-5 b(alues)27 b(cause)g(it)h(to)f(b)r(e)h(placed)f(on)h(the)g(same)
-f(side.)227 4973 y(The)33 b(NumLabGap)f(v)-5 b(alue)33
-b(should)f(b)r(e)h(giv)n(en)f(as)f(a)h(fraction)g(of)h(the)g(minim)n
-(um)g(dimension)f(of)h(the)g(plotting)227 5073 y(area,)26
-b(the)i(default)g(v)-5 b(alue)28 b(b)r(eing)g(+0.01.)0
-5217 y Fc(T)m(yp)s(e:)227 5317 y Fk(Floating)f(p)r(oin)n(t.)0
-5462 y Fc(Class)k(Applicabilit)m(y:)259 5593 y(Plot)427
-5693 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)p
-eop end
-%%Page: 437 447
-TeXDict begin 437 446 bop 3643 52 a FG(437)0 351 y Fc(Notes:)340
-631 y Fj(\017)45 b Fk(If)34 b(no)f(axis)g(is)g(sp)r(eci\014ed,)i
-(\(e.g.)54 b Ft(")p Fk(NumLabGap)p Ft(")32 b Fk(instead)i(of)f
-Ft(")p Fk(NumLabGap\(2\))p Ft(")p Fk(\),)h(then)g(a)f
-Ft(")p Fk(set)p Ft(")f Fk(or)427 731 y Ft(")p Fk(clear)p
-Ft(")c Fk(op)r(eration)g(will)i(a\013ect)g(the)g(attribute)g(v)-5
-b(alue)29 b(of)h(all)f(the)h(Plot)f(axes,)g(while)h(a)f
-Ft(")p Fk(get)p Ft(")f Fk(or)h Ft(")p Fk(test)p Ft(")427
-831 y Fk(op)r(eration)e(will)h(use)f(just)h(the)g(NumLabGap\(1\))g(v)-5
-b(alue.)p 0 1025 3780 12 v 0 1157 a FA(Ob)7 b(jSize)566
-b Fd(The)38 b(in-memory)f(size)i(of)f(the)h(Ob)7 b(ject)564
-b FA(Ob)7 b(jSize)0 1341 y Fc(Description:)44 b Fk(This)c(attribute)g
-(giv)n(es)f(the)h(total)g(n)n(um)n(b)r(er)f(of)h(b)n(ytes)g(of)f
-(memory)g(used)h(b)n(y)g(the)g(Ob)5 b(ject.)74 b(This)227
-1440 y(includes)28 b(an)n(y)f(Ob)5 b(jects)27 b(whic)n(h)h(are)e
-(encapsulated)h(within)h(the)g(supplied)g(Ob)5 b(ject.)0
-1587 y Fc(T)m(yp)s(e:)227 1687 y Fk(In)n(teger,)27 b(read-only)-7
-b(.)0 1834 y Fc(Class)31 b(Applicabilit)m(y:)259 1968
-y(Ob)5 b(ject)427 2068 y Fk(All)28 b(Ob)5 b(jects)28
-b(ha)n(v)n(e)e(this)i(attribute.)p 0 2262 V 0 2394 a
-FA(ObsAlt)523 b Fd(The)39 b(geo)s(detic)e(altitude)g(of)h(the)h(observ)
-m(er)522 b FA(ObsAlt)0 2578 y Fc(Description:)44 b Fk(This)35
-b(attribute)g(sp)r(eci\014es)g(the)g(geo)r(detic)g(altitude)g(of)g(the)
-g(observ)n(er,)g(in)g(metres,)i(relativ)n(e)c(to)i(the)227
-2677 y(IA)n(U)26 b(1976)e(reference)h(ellipsoid.)36 b(The)26
-b(basic)f(F)-7 b(rame)25 b(class)g(mak)n(es)g(no)g(use)h(of)f(this)h
-(attribute,)h(but)f(sp)r(ecialised)227 2777 y(sub)r(classes)31
-b(of)g(F)-7 b(rame)30 b(ma)n(y)h(use)g(it.)48 b(F)-7
-b(or)31 b(instance,)h(the)g(Sp)r(ecF)-7 b(rame,)32 b(SkyF)-7
-b(rame)30 b(and)h(TimeF)-7 b(rame)31 b(classes)227 2876
-y(use)d(it.)37 b(The)28 b(default)g(v)-5 b(alue)27 b(is)h(zero.)0
-3023 y Fc(T)m(yp)s(e:)227 3123 y Fk(String.)0 3270 y
-Fc(Class)j(Applicabilit)m(y:)259 3404 y(F)-8 b(rame)427
-3504 y Fk(All)28 b(F)-7 b(rames)27 b(ha)n(v)n(e)g(this)g(attribute.)259
-3634 y Fc(Sp)s(ecF)-8 b(rame)427 3734 y Fk(T)h(ogether)23
-b(with)h(the)g(ObsLon,)g(Ep)r(o)r(c)n(h,)g(RefRA)g(and)g(RefDec)g
-(attributes,)h(it)f(de\014nes)f(the)i(Doppler)e(shift)427
-3833 y(in)n(tro)r(duced)35 b(b)n(y)g(the)g(observ)n(ers)d(diurnal)j
-(motion)f(around)g(the)i(earths)e(axis,)i(whic)n(h)f(is)f(needed)h
-(when)427 3933 y(con)n(v)n(erting)30 b(to)h(or)f(from)h(the)h(top)r(o)r
-(cen)n(tric)f(standard)f(of)i(rest.)47 b(The)32 b(maxim)n(um)f(v)n(elo)
-r(cit)n(y)f(error)g(whic)n(h)427 4033 y(can)d(b)r(e)h(caused)f(b)n(y)h
-(an)f(incorrect)f(v)-5 b(alue)28 b(is)f(0.5)g(km/s.)36
-b(The)28 b(default)g(v)-5 b(alue)28 b(for)f(the)h(attribute)f(is)h
-(zero.)259 4163 y Fc(TimeF)-8 b(rame)427 4263 y Fk(T)h(ogether)28
-b(with)i(the)f(ObsLon)g(attribute,)g(it)h(is)f(used)g(when)g(con)n(v)n
-(erting)e(b)r(et)n(w)n(een)j(certain)e(time)i(scales)427
-4362 y(\(TDB,)e(TCB,)g(LMST,)g(LAST\))p 0 4557 V 0 4688
-a FA(ObsLat)516 b Fd(The)39 b(geo)s(detic)e(latitude)g(of)h(the)h
-(observ)m(er)514 b FA(ObsLat)0 4872 y Fc(Description:)44
-b Fk(This)34 b(attribute)f(sp)r(eci\014es)g(the)h(geo)r(detic)e
-(latitude)i(of)f(the)h(observ)n(er,)e(in)i(degrees,)f(relativ)n(e)f(to)
-h(the)227 4972 y(IA)n(U)26 b(1976)e(reference)h(ellipsoid.)36
-b(The)26 b(basic)f(F)-7 b(rame)25 b(class)g(mak)n(es)g(no)g(use)h(of)f
-(this)h(attribute,)h(but)f(sp)r(ecialised)227 5072 y(sub)r(classes)31
-b(of)g(F)-7 b(rame)30 b(ma)n(y)h(use)g(it.)48 b(F)-7
-b(or)31 b(instance,)h(the)g(Sp)r(ecF)-7 b(rame,)32 b(SkyF)-7
-b(rame)30 b(and)h(TimeF)-7 b(rame)31 b(classes)227 5171
-y(use)d(it.)37 b(The)28 b(default)g(v)-5 b(alue)27 b(is)h(zero.)227
-5295 y(The)37 b(v)-5 b(alue)36 b(is)g(stored)f(in)n(ternally)g(in)i
-(radians,)g(but)g(is)f(con)n(v)n(erted)f(to)h(and)g(from)g(a)f(degrees)
-g(string)h(for)f(ac-)227 5394 y(cess.)79 b(Some)41 b(example)h(input)g
-(formats)f(are:)64 b Ft(")p Fk(22:19:23.2)p Ft(")p Fk(,)42
-b Ft(")p Fk(22)e(19)h(23.2)p Ft(")p Fk(,)i Ft(")p Fk(22:19.387)p
-Ft(")p Fk(,)f Ft(")p Fk(22.32311)p Ft(")p Fk(,)227 5494
-y Ft(")p Fk(N22.32311)p Ft(")p Fk(,)e Ft(")p Fk(-45.6)p
-Ft(")p Fk(,)h Ft(")p Fk(S45.6)p Ft(")p Fk(.)72 b(As)40
-b(indicated,)k(the)c(sign)g(of)g(the)g(latitude)h(can)f(optionally)f(b)
-r(e)h(indi-)227 5593 y(cated)23 b(using)g(c)n(haracters)e
-Ft(")p Fk(N)p Ft(")i Fk(and)g Ft(")p Fk(S)p Ft(")f Fk(in)i(place)f(of)g
-(the)g(usual)g Ft(")p Fk(+)p Ft(")f Fk(and)h Ft(")p Fk(-)p
-Ft(")p Fk(.)35 b(When)23 b(con)n(v)n(erting)f(the)h(stored)227
-5693 y(v)-5 b(alue)28 b(to)f(a)g(string,)g(the)h(format)f
-Ft(")p Fk([s]dd:mm:ss.ss)p Ft(")g Fk(is)g(used,)h(when)g
-Ft(")p Fk([s])p Ft(")f Fk(is)g Ft(")p Fk(N)p Ft(")g Fk(or)g
-Ft(")p Fk(S)p Ft(")p Fk(.)p eop end
-%%Page: 438 448
-TeXDict begin 438 447 bop 0 52 a FG(438)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fc(T)m(yp)s(e:)227 451 y Fk(String.)0 603 y Fc(Class)g(Applicabilit)m
-(y:)259 742 y(F)-8 b(rame)427 842 y Fk(All)28 b(F)-7
-b(rames)27 b(ha)n(v)n(e)g(this)g(attribute.)259 976 y
-Fc(Sp)s(ecF)-8 b(rame)427 1076 y Fk(T)h(ogether)23 b(with)h(the)g
-(ObsLon,)g(Ep)r(o)r(c)n(h,)g(RefRA)g(and)g(RefDec)g(attributes,)h(it)f
-(de\014nes)f(the)i(Doppler)e(shift)427 1175 y(in)n(tro)r(duced)35
-b(b)n(y)g(the)g(observ)n(ers)d(diurnal)j(motion)f(around)g(the)i
-(earths)e(axis,)i(whic)n(h)f(is)f(needed)h(when)427 1275
-y(con)n(v)n(erting)30 b(to)h(or)f(from)h(the)h(top)r(o)r(cen)n(tric)f
-(standard)f(of)i(rest.)47 b(The)32 b(maxim)n(um)f(v)n(elo)r(cit)n(y)f
-(error)g(whic)n(h)427 1375 y(can)d(b)r(e)h(caused)f(b)n(y)h(an)f
-(incorrect)f(v)-5 b(alue)28 b(is)f(0.5)g(km/s.)36 b(The)28
-b(default)g(v)-5 b(alue)28 b(for)f(the)h(attribute)f(is)h(zero.)259
-1509 y Fc(TimeF)-8 b(rame)427 1608 y Fk(T)h(ogether)28
-b(with)i(the)f(ObsLon)g(attribute,)g(it)h(is)f(used)g(when)g(con)n(v)n
-(erting)e(b)r(et)n(w)n(een)j(certain)e(time)i(scales)427
-1708 y(\(TDB,)e(TCB,)g(LMST,)g(LAST\))p 0 1910 3780 12
-v 0 2042 a FA(ObsLon)452 b Fd(The)39 b(geo)s(detic)e(longitude)g(of)h
-(the)h(observ)m(er)451 b FA(ObsLon)0 2238 y Fc(Description:)44
-b Fk(This)22 b(attribute)g(sp)r(eci\014es)f(the)h(geo)r(detic)f(\(or)h
-(equiv)-5 b(alen)n(tly)e(,)22 b(geo)r(cen)n(tric\))f(longitude)g(of)h
-(the)g(observ)n(er,)227 2337 y(in)e(degrees,)f(measured)f(p)r(ositiv)n
-(e)h(east)n(w)n(ards.)32 b(See)19 b(also)e(attribute)j(ObsLat.)33
-b(The)19 b(basic)f(F)-7 b(rame)19 b(class)f(mak)n(es)g(no)227
-2437 y(use)26 b(of)g(this)h(attribute,)g(but)f(sp)r(ecialised)g(sub)r
-(classes)f(of)h(F)-7 b(rame)26 b(ma)n(y)f(use)i(it.)36
-b(F)-7 b(or)26 b(instance,)g(the)h(Sp)r(ecF)-7 b(rame,)227
-2537 y(SkyF)g(rame)27 b(and)h(TimeF)-7 b(rame)27 b(classes)f(use)h(it.)
-38 b(The)27 b(default)h(v)-5 b(alue)28 b(is)f(zero.)227
-2663 y(The)37 b(v)-5 b(alue)36 b(is)g(stored)f(in)n(ternally)g(in)i
-(radians,)g(but)g(is)f(con)n(v)n(erted)f(to)h(and)g(from)g(a)f(degrees)
-g(string)h(for)f(ac-)227 2762 y(cess.)45 b(Some)30 b(example)g(input)i
-(formats)d(are:)42 b Ft(")p Fk(155:19:23.2)p Ft(")p Fk(,)27
-b Ft(")p Fk(155)h(19)i(23.2)p Ft(")p Fk(,)f Ft(")p Fk(155:19.387)p
-Ft(")p Fk(,)e Ft(")p Fk(155.32311)p Ft(")p Fk(,)227 2862
-y Ft(")p Fk(E155.32311)p Ft(")p Fk(,)19 b Ft(")p Fk(-204.67689)p
-Ft(")p Fk(,)h Ft(")p Fk(W204.67689)p Ft(")p Fk(.)31 b(As)23
-b(indicated,)i(the)f(sign)e(of)i(the)f(longitude)h(can)e(optionally)227
-2961 y(b)r(e)30 b(indicated)g(using)f(c)n(haracters)f
-Ft(")p Fk(E)p Ft(")g Fk(and)h Ft(")p Fk(W)p Ft(")h Fk(in)f(place)h(of)f
-(the)h(usual)f Ft(")p Fk(+)p Ft(")g Fk(and)g Ft(")p Fk(-)p
-Ft(")p Fk(.)42 b(When)30 b(con)n(v)n(erting)227 3061
-y(the)g(stored)f(v)-5 b(alue)29 b(to)h(a)f(string,)h(the)f(format)h
-Ft(")p Fk([s]ddd:mm:ss.ss)p Ft(")e Fk(is)i(used,)g(when)f
-Ft(")p Fk([s])p Ft(")g Fk(is)h Ft(")p Fk(E)p Ft(")e Fk(or)h
-Ft(")p Fk(W)p Ft(")g Fk(and)227 3161 y(the)f(n)n(umerical)f(v)-5
-b(alue)27 b(is)h(c)n(hosen)f(to)g(b)r(e)h(less)f(than)h(180)e(degrees.)
-0 3313 y Fc(T)m(yp)s(e:)227 3413 y Fk(String.)0 3565
-y Fc(Class)31 b(Applicabilit)m(y:)259 3704 y(F)-8 b(rame)427
-3803 y Fk(All)28 b(F)-7 b(rames)27 b(ha)n(v)n(e)g(this)g(attribute.)259
-3938 y Fc(Sp)s(ecF)-8 b(rame)427 4037 y Fk(T)h(ogether)23
-b(with)h(the)g(ObsLon,)g(Ep)r(o)r(c)n(h,)g(RefRA)g(and)g(RefDec)g
-(attributes,)h(it)f(de\014nes)f(the)i(Doppler)e(shift)427
-4137 y(in)n(tro)r(duced)35 b(b)n(y)g(the)g(observ)n(ers)d(diurnal)j
-(motion)f(around)g(the)i(earths)e(axis,)i(whic)n(h)f(is)f(needed)h
-(when)427 4237 y(con)n(v)n(erting)30 b(to)h(or)f(from)h(the)h(top)r(o)r
-(cen)n(tric)f(standard)f(of)i(rest.)47 b(The)32 b(maxim)n(um)f(v)n(elo)
-r(cit)n(y)f(error)g(whic)n(h)427 4336 y(can)d(b)r(e)h(caused)f(b)n(y)h
-(an)f(incorrect)f(v)-5 b(alue)28 b(is)f(0.5)g(km/s.)36
-b(The)28 b(default)g(v)-5 b(alue)28 b(for)f(the)h(attribute)f(is)h
-(zero.)259 4470 y Fc(TimeF)-8 b(rame)427 4570 y Fk(T)h(ogether)28
-b(with)i(the)f(ObsLon)g(attribute,)g(it)h(is)f(used)g(when)g(con)n(v)n
-(erting)e(b)r(et)n(w)n(een)j(certain)e(time)i(scales)427
-4670 y(\(TDB,)e(TCB,)g(LMST,)g(LAST\))p 0 4872 V 0 5010
-a FA(PVMax\(i\))767 5003 y Fd(Maxim)m(um)37 b(n)m(um)m(b)s(er)h(of)g
-(FITS-W)m(CS)h(pro)7 b(jection)1607 5103 y(parameters)3180
-5010 y FA(PVMax\(i\))0 5295 y Fc(Description:)44 b Fk(This)27
-b(attribute)g(sp)r(eci\014es)g(the)g(largest)e(legal)h(index)h(for)f(a)
-h(PV)f(pro)5 b(jection)26 b(parameter)g(attac)n(hed)g(to)227
-5394 y(a)j(sp)r(eci\014ed)h(axis)e(of)i(the)g(WcsMap)f(\(i.e.)42
-b(the)30 b(largest)e(legal)h(v)-5 b(alue)29 b(for)g Ft(")p
-Fk(m)p Ft(")g Fk(when)g(accessing)f(the)i Ft(")p Fk(PVi)p
-Ft(_)p Fk(m)p Ft(")227 5494 y Fk(attribute\).)59 b(The)35
-b(axis)e(index)i(is)g(sp)r(eci\014ed)g(b)n(y)f(i,)j(and)d(should)h(b)r
-(e)g(in)g(the)g(range)e(1)h(to)h(99.)57 b(The)35 b(v)-5
-b(alue)34 b(for)227 5593 y(eac)n(h)d(axis)g(is)h(determined)g(b)n(y)g
-(the)g(pro)5 b(jection)31 b(t)n(yp)r(e)h(sp)r(eci\014ed)g(when)g(the)g
-(WcsMap)g(is)f(\014rst)h(created)f(using)227 5693 y(AST)p
-Ft(_)p Fk(W)n(CSMAP)d(and)f(cannot)g(subsequen)n(tly)h(b)r(e)g(c)n
-(hanged.)p eop end
-%%Page: 439 449
-TeXDict begin 439 448 bop 3643 52 a FG(439)0 351 y Fc(T)m(yp)s(e:)227
-451 y Fk(In)n(teger,)27 b(read-only)-7 b(.)0 608 y Fc(Class)31
-b(Applicabilit)m(y:)259 753 y(WcsMap)427 852 y Fk(All)d(WcsMaps)f(ha)n
-(v)n(e)g(this)h(attribute.)p 0 1060 3780 12 v 0 1191
-a FA(PVi)p Fe(_)p FA(m)1022 1190 y Fd(FITS-W)m(CS)39
-b(pro)7 b(jection)36 b(parameters)3375 1191 y FA(PVi)p
-Fe(_)p FA(m)0 1387 y Fc(Description:)44 b Fk(This)32
-b(attribute)h(sp)r(eci\014es)f(the)g(pro)5 b(jection)32
-b(parameter)e(v)-5 b(alues)32 b(to)g(b)r(e)h(used)f(b)n(y)g(a)f(WcsMap)
-h(when)227 1486 y(implemen)n(ting)26 b(a)e(FITS-W)n(CS)i(sky)e(pro)5
-b(jection.)35 b(Eac)n(h)24 b(PV)h(attribute)g(name)g(should)g(include)h
-(t)n(w)n(o)e(in)n(tegers,)g(i)227 1586 y(and)k(m,)g(separated)e(b)n(y)i
-(an)f(underscore.)35 b(The)28 b(axis)f(index)h(is)f(sp)r(eci\014ed)h(b)
-n(y)g(i,)g(and)f(should)h(b)r(e)g(in)g(the)g(range)e(1)227
-1686 y(to)i(99.)36 b(The)27 b(parameter)f(n)n(um)n(b)r(er)h(is)g(sp)r
-(eci\014ed)h(b)n(y)f(m,)h(and)f(should)h(b)r(e)f(in)h(the)g(range)e(0)h
-(to)g(99.)36 b(F)-7 b(or)27 b(example,)227 1785 y Ft(")p
-Fk(PV2)p Ft(_)p Fk(1=45.0)p Ft(")d Fk(w)n(ould)j(sp)r(ecify)h(a)f(v)-5
-b(alue)27 b(for)g(pro)5 b(jection)27 b(parameter)f(1)h(of)h(axis)f(2)g
-(in)h(a)f(WcsMap.)227 1914 y(These)20 b(pro)5 b(jection)19
-b(parameters)f(corresp)r(ond)h(exactly)g(to)h(the)h(v)-5
-b(alues)19 b(stored)g(using)h(the)h(FITS-W)n(CS)f(k)n(eyw)n(ords)227
-2014 y Ft(")p Fk(PV1)p Ft(_)p Fk(1)p Ft(")p Fk(,)k Ft(")p
-Fk(PV1)p Ft(_)p Fk(2)p Ft(")p Fk(,)g(etc.)37 b(This)26
-b(means)f(that)h(pro)5 b(jection)25 b(parameters)g(whic)n(h)g(corresp)r
-(ond)g(to)h(angles)e(m)n(ust)227 2113 y(b)r(e)31 b(giv)n(en)e(in)i
-(degrees)d(\(despite)j(the)g(fact)f(that)g(the)h(angular)e(co)r
-(ordinates)f(and)i(other)g(attributes)g(used)g(b)n(y)g(a)227
-2213 y(WcsMap)e(are)e(in)i(radians\).)227 2341 y(The)36
-b(set)g(of)g(pro)5 b(jection)34 b(parameters)g(used)i(b)n(y)g(a)f
-(WcsMap)g(dep)r(ends)i(on)e(the)h(t)n(yp)r(e)g(of)g(pro)5
-b(jection,)37 b(whic)n(h)227 2441 y(is)c(determined)g(b)n(y)g(its)g
-(WcsT)n(yp)r(e)g(parameter.)51 b(Most)33 b(pro)5 b(jections)31
-b(either)i(do)g(not)g(require)e(pro)5 b(jection)32 b(pa-)227
-2541 y(rameters,)37 b(or)d(use)i(parameters)e(1)h(and)h(2)f(asso)r
-(ciated)f(with)i(the)g(latitude)g(axis.)61 b(Y)-7 b(ou)35
-b(should)h(consult)f(the)227 2640 y(FITS-W)n(CS)28 b(pap)r(er)f(for)g
-(details.)227 2769 y(Some)g(pro)5 b(jection)26 b(parameters)f(ha)n(v)n
-(e)h(default)h(v)-5 b(alues)26 b(\(as)h(de\014ned)g(in)g(the)g(FITS-W)n
-(CS)g(pap)r(er\))g(whic)n(h)g(apply)227 2868 y(if)f(no)f(explicit)h(v)
--5 b(alue)25 b(is)h(giv)n(en.)35 b(Y)-7 b(ou)25 b(ma)n(y)g(omit)h
-(setting)f(a)g(v)-5 b(alue)25 b(for)g(these)g Ft(")p
-Fk(optional)p Ft(")f Fk(parameters)g(and)h(the)227 2968
-y(default)j(will)f(apply)-7 b(.)37 b(Some)27 b(pro)5
-b(jection)26 b(parameters,)g(ho)n(w)n(ev)n(er,)f(ha)n(v)n(e)h(no)h
-(default)g(and)g(a)g(v)-5 b(alue)27 b(m)n(ust)h(b)r(e)f(ex-)227
-3068 y(plicitly)22 b(supplied.)35 b(This)21 b(is)g(most)g(con)n(v)n
-(enien)n(tly)f(done)h(using)g(the)g(OPTIONS)f(argumen)n(t)h(of)g(AST)p
-Ft(_)p Fk(W)n(CSMAP)227 3167 y(\(q.v.\))40 b(when)29
-b(a)f(WcsMap)g(is)g(\014rst)h(created.)38 b(An)29 b(error)e(will)h
-(result)h(when)f(a)g(WcsMap)h(is)f(used)g(to)h(transform)227
-3267 y(co)r(ordinates)c(if)h(an)n(y)f(of)h(its)g(required)f(pro)5
-b(jection)25 b(parameters)g(has)g(not)h(b)r(een)g(set)g(and)g(lac)n(ks)
-f(a)g(default)i(v)-5 b(alue.)227 3395 y(A)36 b Ft(")p
-Fk(get)p Ft(")e Fk(op)r(eration)h(for)g(a)g(parameter)f(whic)n(h)h(has)
-g(not)g(b)r(een)h(assigned)e(a)h(v)-5 b(alue)36 b(will)f(return)g(the)h
-(default)227 3495 y(v)-5 b(alue)32 b(de\014ned)g(in)g(the)h(FITS-W)n
-(CS)f(pap)r(er,)g(or)f(AST)p Ft(__)p Fk(BAD)h(if)g(the)h(pap)r(er)e
-(indicates)h(that)g(the)g(parameter)227 3595 y(has)f(no)f(default.)48
-b(A)31 b(default)g(v)-5 b(alue)31 b(of)g(zero)f(is)h(returned)f(for)h
-(parameters)e(whic)n(h)i(are)f(not)h(accessed)f(b)n(y)g(the)227
-3694 y(pro)5 b(jection.)227 3823 y(Note,)31 b(the)f(FITS-W)n(CS)g(pap)r
-(er)f(reserv)n(es)f(parameters)g(1)h(and)h(2)f(on)h(the)g(longitude)g
-(axis)f(to)g(hold)h(the)g(nativ)n(e)227 3922 y(longitude)j(and)h
-(latitude)g(of)f(the)h(\014ducial)f(p)r(oin)n(t)h(of)f(the)h(pro)5
-b(jection,)34 b(in)g(degrees.)53 b(The)33 b(default)h(v)-5
-b(alues)33 b(for)227 4022 y(these)e(parameters)f(are)g(determined)h(b)n
-(y)g(the)h(pro)5 b(jection)30 b(t)n(yp)r(e.)47 b(The)32
-b(AST-sp)r(eci\014c)f(TPN)g(pro)5 b(jection)30 b(do)r(es)227
-4122 y(not)25 b(use)g(this)g(con)n(v)n(en)n(tion)e(-)h(all)h(pro)5
-b(jection)24 b(parameters)f(for)h(b)r(oth)h(axes)f(are)g(used)g(to)h
-(represen)n(t)e(p)r(olynomical)227 4221 y(correction)29
-b(terms,)h(and)g(the)g(nativ)n(e)g(longitude)f(and)h(latitude)h(at)e
-(the)i(\014ducial)f(p)r(oin)n(t)g(ma)n(y)f(not)h(b)r(e)h(c)n(hanged)227
-4321 y(from)d(the)g(default)g(v)-5 b(alues)27 b(of)g(zero)g(and)g(90)g
-(degrees.)0 4478 y Fc(T)m(yp)s(e:)227 4578 y Fk(Floating)g(p)r(oin)n
-(t.)0 4735 y Fc(Class)k(Applicabilit)m(y:)259 4880 y(WcsMap)427
-4980 y Fk(All)d(WcsMaps)f(ha)n(v)n(e)g(this)h(attribute.)0
-5149 y Fc(Notes:)340 5440 y Fj(\017)45 b Fk(If)33 b(the)g(pro)5
-b(jection)31 b(parameter)g(v)-5 b(alues)31 b(giv)n(en)h(for)g(a)f
-(WcsMap)h(do)g(not)h(satisfy)e(all)h(the)h(required)e(con-)427
-5540 y(strain)n(ts)d(\(as)g(de\014ned)h(in)f(the)h(FITS-W)n(CS)f(pap)r
-(er\),)h(then)g(an)f(error)e(will)j(result)f(when)h(the)g(WcsMap)f(is)
-427 5639 y(used)g(to)f(transform)g(co)r(ordinates.)p
-eop end
-%%Page: 440 450
-TeXDict begin 440 449 bop 0 52 a FG(440)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 490 a FA(PcdCen\(axis\))1342 483 y Fd(Cen)m(tre)37
-b(co)s(ordinates)g(of)1170 583 y(pincushion/barrel)f(distortion)2989
-490 y FA(PcdCen\(axis\))0 828 y Fc(Description:)44 b
-Fk(This)39 b(attribute)g(sp)r(eci\014es)f(the)h(cen)n(tre)f(of)h(the)g
-(pincushion/barrel)e(distortion)h(implemen)n(ted)h(b)n(y)227
-928 y(a)i(PcdMap.)76 b(It)41 b(tak)n(es)f(a)h(separate)f(v)-5
-b(alue)40 b(for)h(eac)n(h)f(axis)g(of)h(the)g(PcdMap)g(so)f(that,)45
-b(for)40 b(instance,)k(the)227 1028 y(settings)35 b Ft(")p
-Fk(PcdCen\(1\)=345.0,PcdCen\(2\)=-104.4)o Ft(")29 b Fk(sp)r(ecify)34
-b(that)h(the)g(pincushion)g(distortion)f(is)g(cen)n(tred)227
-1127 y(at)26 b(p)r(ositions)f(of)h(345.0)d(and)j(-104.4)d(on)j(axes)e
-(1)i(and)f(2)g(resp)r(ectiv)n(ely)-7 b(.)36 b(This)25
-b(attribute)h(is)g(set)f(when)h(a)f(PcdMap)227 1227 y(is)i(created,)f
-(but)h(ma)n(y)f(later)f(b)r(e)i(mo)r(di\014ed.)37 b(If)27
-b(the)g(attribute)g(is)f(cleared,)g(the)h(default)g(v)-5
-b(alue)26 b(for)g(b)r(oth)h(axes)f(is)227 1326 y(zero.)0
-1521 y Fc(T)m(yp)s(e:)227 1621 y Fk(Floating)h(p)r(oin)n(t.)0
-1816 y Fc(Class)k(Applicabilit)m(y:)259 1998 y(PcdMap)427
-2098 y Fk(All)d(PcdMaps)f(ha)n(v)n(e)f(this)i(attribute.)0
-2305 y Fc(Notes:)340 2634 y Fj(\017)45 b Fk(If)39 b(no)f(axis)g(is)g
-(sp)r(eci\014ed,)j(\(e.g.)70 b Ft(")p Fk(PcdCen)p Ft(")37
-b Fk(instead)h(of)g Ft(")p Fk(PcdCen\(2\))p Ft(")p Fk(\),)j(then)d(a)g
-Ft(")p Fk(set)p Ft(")g Fk(or)f Ft(")p Fk(clear)p Ft(")427
-2733 y Fk(op)r(eration)29 b(will)h(a\013ect)g(the)g(attribute)g(v)-5
-b(alue)29 b(of)h(b)r(oth)g(axes,)g(while)g(a)f Ft(")p
-Fk(get)p Ft(")g Fk(or)f Ft(")p Fk(test)p Ft(")i Fk(op)r(eration)e(will)
-427 2833 y(use)g(just)g(the)g(PcdCen\(1\))f(v)-5 b(alue.)p
-0 3078 V 0 3208 a FA(P)l(erm)l(ute)1375 3209 y Fd(P)m(erm)m(ute)37
-b(axis)h(order?)3278 3208 y FA(P)l(erm)l(ute)0 3425 y
-Fc(Description:)44 b Fk(This)26 b(attribute)f(is)g(a)g(b)r(o)r(olean)f
-(v)-5 b(alue)25 b(whic)n(h)h(con)n(trols)d(ho)n(w)i(a)g(F)-7
-b(rame)24 b(b)r(eha)n(v)n(es)g(when)i(it)f(is)g(used)h(\(b)n(y)227
-3525 y(AST)p Ft(_)p Fk(FINDFRAME\))h(as)e(a)g(template)h(to)g(matc)n(h)
-f(another)g(\(target\))g(F)-7 b(rame.)36 b(It)25 b(sp)r(eci\014es)h
-(whether)f(the)h(axis)227 3624 y(order)h(of)g(the)h(target)f(F)-7
-b(rame)27 b(ma)n(y)g(b)r(e)h(p)r(erm)n(uted)g(in)f(order)g(to)g(obtain)
-g(a)h(matc)n(h.)227 3772 y(If)e(the)f(template's)g(P)n(erm)n(ute)f(v)-5
-b(alue)24 b(is)h(zero,)g(it)g(will)g(matc)n(h)g(a)f(target)g(only)h(if)
-g(it)g(can)g(do)f(so)h(without)g(c)n(hanging)227 3871
-y(the)j(order)e(of)i(its)g(axes.)36 b(Otherwise,)27 b(it)h(will)f
-(attempt)i(to)e(p)r(erm)n(ute)h(the)g(target's)e(axes)h(as)g(necessary)
--7 b(.)227 4019 y(The)28 b(default)g(v)-5 b(alue)27 b(is)h(1,)f(so)g
-(that)h(axis)f(p)r(erm)n(utation)g(will)h(b)r(e)g(attempted.)0
-4214 y Fc(T)m(yp)s(e:)227 4313 y Fk(String.)0 4509 y
-Fc(Class)j(Applicabilit)m(y:)259 4691 y(F)-8 b(rame)427
-4790 y Fk(All)34 b(F)-7 b(rames)33 b(ha)n(v)n(e)g(this)h(attribute.)55
-b(Ho)n(w)n(ev)n(er,)34 b(the)g(F)-7 b(rame)33 b(class)g(e\013ectiv)n
-(ely)g(ignores)f(this)i(attribute)427 4890 y(and)k(b)r(eha)n(v)n(es)f
-(as)h(if)h(it)f(has)g(the)g(v)-5 b(alue)38 b(1.)69 b(This)38
-b(is)g(b)r(ecause)g(the)g(axes)f(of)h(a)g(basic)g(F)-7
-b(rame)37 b(are)h(not)427 4989 y(distinguishable)28 b(and)f(will)h(alw)
-n(a)n(ys)d(matc)n(h)j(an)n(y)f(other)g(F)-7 b(rame)27
-b(whatev)n(er)f(their)i(order.)259 5145 y Fc(SkyF)-8
-b(rame)427 5245 y Fk(Unlik)n(e)28 b(a)f(basic)g(F)-7
-b(rame,)27 b(the)h(SkyF)-7 b(rame)27 b(class)g(mak)n(es)f(use)i(of)f
-(this)h(attribute.)259 5400 y Fc(F)-8 b(rameSet)427 5500
-y Fk(The)31 b(P)n(erm)n(ute)f(attribute)h(of)g(a)f(F)-7
-b(rameSet)31 b(is)f(the)h(same)g(as)f(that)h(of)g(its)g(curren)n(t)f(F)
--7 b(rame)30 b(\(as)g(sp)r(eci\014ed)427 5600 y(b)n(y)e(the)g(Curren)n
-(t)e(attribute\).)p eop end
-%%Page: 441 451
-TeXDict begin 441 450 bop 3643 52 a FG(441)p 0 351 3780
-12 v 0 483 a FA(P)l(olarLong)172 b Fd(The)38 b(longitude)f(v)-7
-b(alue)39 b(to)f(assign)g(to)g(either)f(p)s(ole)170 b
-FA(P)l(olarLong)0 679 y Fc(Description:)44 b Fk(This)38
-b(attribute)f(holds)g(the)g(longitude)g(v)-5 b(alue,)40
-b(in)d(radians,)h(to)f(b)r(e)h(returned)f(when)g(a)g(Cartesian)227
-778 y(p)r(osition)27 b(corresp)r(onding)e(to)i(either)f(the)i(north)e
-(or)g(south)h(p)r(ole)g(is)g(transformed)e(in)n(to)i(spherical)f(co)r
-(ordinates.)227 878 y(The)i(default)g(v)-5 b(alue)27
-b(is)h(zero.)0 1035 y Fc(T)m(yp)s(e:)227 1134 y Fk(Double)g(precision.)
-0 1291 y Fc(Class)j(Applicabilit)m(y:)259 1434 y(SphMap)427
-1534 y Fk(All)d(SphMaps)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 1740 V 0 1871 a FA(Preserv)l(eAxes)1518 1872 y Fd(Preserv)m(e)37
-b(axes?)2986 1871 y FA(Preserv)l(eAxes)0 2049 y Fc(Description:)44
-b Fk(This)27 b(attribute)f(con)n(trols)e(ho)n(w)i(a)g(F)-7
-b(rame)25 b(b)r(eha)n(v)n(es)g(when)i(it)f(is)g(used)h(\(b)n(y)f(AST)p
-Ft(_)p Fk(FINDFRAME\))h(as)227 2149 y(a)e(template)g(to)f(matc)n(h)g
-(another)g(\(target\))g(F)-7 b(rame.)36 b(It)25 b(determines)f(whic)n
-(h)h(axes)f(app)r(ear)f(\(and)i(in)g(what)g(order\))227
-2248 y(in)j(the)g Ft(")p Fk(result)p Ft(")f Fk(F)-7 b(rame)27
-b(pro)r(duced.)227 2376 y(If)k(Preserv)n(eAxes)d(is)i(zero)f(in)i(the)f
-(template)h(F)-7 b(rame,)30 b(then)h(the)g(result)f(F)-7
-b(rame)30 b(will)g(ha)n(v)n(e)f(the)i(same)f(n)n(um)n(b)r(er)227
-2476 y(\(and)25 b(order\))f(of)h(axes)f(as)g(the)i(template.)36
-b(If)25 b(it)h(is)f(non-zero,)f(ho)n(w)n(ev)n(er,)f(the)i(axes)f(of)h
-(the)h(target)e(F)-7 b(rame)24 b(will)h(b)r(e)227 2576
-y(preserv)n(ed,)h(so)h(that)h(the)g(result)f(F)-7 b(rame)27
-b(will)h(ha)n(v)n(e)f(the)h(same)f(n)n(um)n(b)r(er)g(\(and)h(order\))e
-(of)i(axes)e(as)h(the)h(target.)227 2704 y(The)e(default)f(v)-5
-b(alue)26 b(is)f(zero,)g(so)f(that)i(target)e(axes)h(are)f(not)i
-(preserv)n(ed)d(and)i(the)h(result)f(F)-7 b(rame)25 b(resem)n(bles)f
-(the)227 2803 y(template.)0 2960 y Fc(T)m(yp)s(e:)227
-3059 y Fk(In)n(teger)j(\(b)r(o)r(olean\).)0 3216 y Fc(Class)k
-(Applicabilit)m(y:)259 3359 y(F)-8 b(rame)427 3459 y
-Fk(All)28 b(F)-7 b(rames)27 b(ha)n(v)n(e)g(this)g(attribute.)259
-3595 y Fc(F)-8 b(rameSet)427 3695 y Fk(The)20 b(Preserv)n(eAxes)d
-(attribute)j(of)g(a)f(F)-7 b(rameSet)20 b(is)g(the)g(same)f(as)g(that)h
-(of)g(its)g(curren)n(t)f(F)-7 b(rame)19 b(\(as)g(sp)r(eci\014ed)427
-3795 y(b)n(y)28 b(the)g(Curren)n(t)e(attribute\).)p 0
-4001 V 0 4139 a FA(Pro)7 b(jP\(m\))1022 4131 y Fd(FITS-W)m(CS)39
-b(pro)7 b(jection)36 b(parameters)3208 4139 y FA(Pro)7
-b(jP\(m\))0 4342 y Fc(Description:)44 b Fk(This)33 b(attribute)g(pro)n
-(vides)f(aliases)f(for)h(the)i(PV)e(attributes,)j(whic)n(h)d(sp)r
-(eci\014es)h(the)g(pro)5 b(jection)32 b(pa-)227 4441
-y(rameter)23 b(v)-5 b(alues)23 b(to)h(b)r(e)g(used)g(b)n(y)g(a)f
-(WcsMap)h(when)g(implemen)n(ting)g(a)f(FITS-W)n(CS)h(sky)f(pro)5
-b(jection.)35 b(Pro)5 b(jP)22 b(is)227 4541 y(retained)j(for)f
-(compatibilit)n(y)g(with)i(previous)d(v)n(ersions)g(of)i(FITS-W)n(CS)g
-(and)g(AST.)g(New)g(applications)f(should)227 4641 y(use)k(the)g(PV)f
-(attibute)h(instead.)227 4769 y(A)n(ttributes)i(Pro)5
-b(jP\(0\))27 b(to)i(Pro)5 b(jP\(9\))28 b(corresp)r(ond)f(to)i
-(attributes)h(PV)p Fm(<)p Fk(axlat)p Fm(>)p Ft(_)p Fk(0)c(to)j(PV)p
-Fm(<)p Fk(axlat)p Fm(>)p Ft(_)p Fk(9,)e(where)227 4868
-y Fm(<)p Fk(axlat)p Fm(>)e Fk(is)h(replaced)g(b)n(y)g(the)h(index)f(of)
-g(the)h(latitude)g(axis)e(\(giv)n(en)h(b)n(y)g(attribute)h
-(WcsAxis\(2\)\).)37 b(See)26 b(PV)g(for)227 4968 y(further)i(details.)0
-5124 y Fc(T)m(yp)s(e:)227 5224 y Fk(Floating)f(p)r(oin)n(t.)0
-5380 y Fc(Class)k(Applicabilit)m(y:)259 5524 y(WcsMap)427
-5624 y Fk(All)d(WcsMaps)f(ha)n(v)n(e)g(this)h(attribute.)p
-eop end
-%%Page: 442 452
-TeXDict begin 442 451 bop 0 52 a FG(442)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a FA(Pro)7 b(jection)604 b Fd(Sky)39
-b(pro)7 b(jection)36 b(description)600 b FA(Pro)7 b(jection)0
-728 y Fc(Description:)44 b Fk(This)32 b(attribute)f(pro)n(vides)f(a)h
-(place)f(to)i(store)e(a)h(description)f(of)h(the)h(t)n(yp)r(e)g(of)f
-(sky)f(pro)5 b(jection)31 b(used)227 827 y(when)c(a)g(SkyF)-7
-b(rame)26 b(is)h(attac)n(hed)f(to)h(a)g(2-dimensional)f(ob)5
-b(ject,)26 b(suc)n(h)h(as)f(an)h(image)f(or)g(plotting)h(surface.)36
-b(F)-7 b(or)227 927 y(example,)28 b(t)n(ypical)f(v)-5
-b(alues)27 b(migh)n(t)g(b)r(e)h Ft(")p Fk(orthographic)p
-Ft(")p Fk(,)d Ft(")p Fk(Hammer-Aito\013)p Ft(")i Fk(or)f
-Ft(")p Fk(cylindrical)h(equal)g(area)p Ft(")p Fk(.)227
-1079 y(The)41 b(Pro)5 b(jection)40 b(v)-5 b(alue)40 b(is)h(purely)g
-(descriptiv)n(e)f(and)h(do)r(es)f(not)h(a\013ect)g(the)h(celestial)e
-(co)r(ordinate)g(system)227 1179 y(represen)n(ted)23
-b(b)n(y)g(the)h(SkyF)-7 b(rame)23 b(in)h(an)n(y)f(w)n(a)n(y)-7
-b(.)34 b(If)24 b(it)g(is)g(set)f(to)h(a)f(non-blank)g(string,)h(the)g
-(description)f(pro)n(vided)227 1279 y(ma)n(y)28 b(b)r(e)h(used)g(when)g
-(forming)f(the)h(default)g(v)-5 b(alue)28 b(for)g(the)i(SkyF)-7
-b(rame's)27 b(Title)i(attribute)g(\(so)f(that)h(t)n(ypically)227
-1378 y(it)f(will)g(app)r(ear)f(in)h(graphical)e(output,)i(for)f
-(instance\).)37 b(The)27 b(default)h(v)-5 b(alue)28 b(is)f(an)h(empt)n
-(y)f(string.)0 1584 y Fc(T)m(yp)s(e:)227 1683 y Fk(String.)0
-1889 y Fc(Class)k(Applicabilit)m(y:)259 2081 y(SkyF)-8
-b(rame)427 2181 y Fk(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i
-(attribute.)p 0 2436 V 0 2567 a FA(RefCoun)l(t)514 b
-Fd(Coun)m(t)38 b(of)g(activ)m(e)f(Ob)7 b(ject)38 b(p)s(oin)m(ters)511
-b FA(RefCoun)l(t)0 2812 y Fc(Description:)44 b Fk(This)20
-b(attribute)g(giv)n(es)e(the)i(n)n(um)n(b)r(er)g(of)f(activ)n(e)g(p)r
-(oin)n(ters)g(asso)r(ciated)f(with)i(an)g(Ob)5 b(ject.)34
-b(It)20 b(is)f(mo)r(di\014ed)227 2912 y(whenev)n(er)39
-b(p)r(oin)n(ters)g(are)g(created)g(or)g(ann)n(ulled)h(\(b)n(y)f(AST)p
-Ft(_)p Fk(CLONE,)g(AST)p Ft(_)p Fk(ANNUL)i(or)e(AST)p
-Ft(_)p Fk(END)h(for)227 3011 y(example\).)d(The)28 b(coun)n(t)f
-(includes)h(the)g(initial)g(p)r(oin)n(ter)f(issued)g(when)h(the)g(Ob)5
-b(ject)27 b(w)n(as)g(created.)227 3164 y(If)g(the)g(reference)f(coun)n
-(t)h(for)f(an)g(Ob)5 b(ject)27 b(falls)f(to)h(zero)e(as)h(the)h(result)
-g(of)f(ann)n(ulling)h(a)f(p)r(oin)n(ter)g(to)h(it,)g(then)g(the)227
-3263 y(Ob)5 b(ject)28 b(will)g(b)r(e)g(deleted.)0 3469
-y Fc(T)m(yp)s(e:)227 3568 y Fk(In)n(teger,)f(read-only)-7
-b(.)0 3774 y Fc(Class)31 b(Applicabilit)m(y:)259 3966
-y(Ob)5 b(ject)427 4066 y Fk(All)28 b(Ob)5 b(jects)28
-b(ha)n(v)n(e)e(this)i(attribute.)p 0 4321 V 0 4453 a
-FA(RefDec)498 b Fd(The)39 b(declination)d(of)i(the)h(reference)f(p)s
-(oin)m(t)496 b FA(RefDec)0 4697 y Fc(Description:)44
-b Fk(This)30 b(attribute)f(sp)r(eci\014es)g(the)h(FK5)f(J2000.0)e
-(declination)i(of)g(a)g(reference)g(p)r(oin)n(t)g(on)g(the)h(sky)-7
-b(.)42 b(See)227 4797 y(the)28 b(description)f(of)h(attribute)g(RefRA)g
-(for)f(details.)37 b(The)27 b(default)h(RefDec)h(is)e
-Ft(")p Fk(0:0:0)p Ft(")p Fk(.)0 5002 y Fc(T)m(yp)s(e:)227
-5102 y Fk(String.)0 5307 y Fc(Class)k(Applicabilit)m(y:)259
-5499 y(Sp)s(ecF)-8 b(rame)427 5599 y Fk(All)28 b(Sp)r(ecF)-7
-b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)p eop end
-%%Page: 443 453
-TeXDict begin 443 452 bop 3643 52 a FG(443)p 0 351 3780
-12 v 0 483 a FA(RefRA)420 b Fd(The)39 b(righ)m(t)e(ascension)h(of)g
-(the)h(reference)f(p)s(oin)m(t)418 b FA(RefRA)0 662 y
-Fc(Description:)44 b Fk(This)26 b(attribute,)g(together)e(with)i(the)f
-(RefDec)h(attribute,)g(sp)r(eci\014es)f(the)h(FK5)e(J2000.0)f(co)r
-(ordinates)227 761 y(of)k(a)g(reference)f(p)r(oin)n(t)h(on)g(the)g(sky)
--7 b(.)36 b(F)-7 b(or)27 b(1-dimensional)f(sp)r(ectra,)g(this)h(should)
-g(normally)f(b)r(e)h(the)h(p)r(osition)f(of)227 861 y(the)33
-b(source.)50 b(F)-7 b(or)32 b(sp)r(ectral)g(data)g(with)h(spatial)f(co)
-n(v)n(erage)d(\(sp)r(ectral)j(cub)r(es,)i(etc\),)g(this)f(should)f(b)r
-(e)h(close)f(to)227 960 y(cen)n(tre)20 b(of)g(the)h(spatial)e(co)n(v)n
-(erage.)32 b(It)20 b(is)g(used)g(to)h(de\014ne)f(the)h(correction)d
-(for)i(Doppler)g(shift)h(to)f(b)r(e)g(applied)g(when)227
-1060 y(using)25 b(the)g(AST)p Ft(_)p Fk(FINDFRAME)i(or)d(AST)p
-Ft(_)p Fk(CONVER)-7 b(T)25 b(metho)r(d)g(to)g(con)n(v)n(ert)f(b)r(et)n
-(w)n(een)h(di\013eren)n(t)g(standards)227 1160 y(of)j(rest.)227
-1282 y(The)h(Sp)r(ecF)-7 b(rame)28 b(class)f(assumes)g(this)i(v)n(elo)r
-(cit)n(y)e(correction)f(is)j(spatially)e(in)n(v)-5 b(arian)n(t.)38
-b(If)28 b(a)g(single)g(Sp)r(ecF)-7 b(rame)227 1381 y(is)39
-b(used)f(\(for)h(instance,)i(as)d(a)g(comp)r(onen)n(t)g(of)h(a)f(CmpF)
--7 b(rame\))39 b(to)f(describ)r(e)h(sp)r(ectral)f(v)-5
-b(alues)38 b(at)g(di\013eren)n(t)227 1481 y(p)r(oin)n(ts)30
-b(on)g(the)g(sky)-7 b(,)30 b(then)g(it)h(is)e(assumes)g(that)h(the)h
-(doppler)e(shift)h(at)g(an)n(y)f(spatial)g(p)r(osition)h(is)g(the)g
-(same)f(as)227 1581 y(at)35 b(the)g(reference)f(p)r(osition.)59
-b(The)35 b(maxim)n(um)g(v)n(elo)r(cit)n(y)f(error)f(in)n(tro)r(duced)h
-(b)n(y)h(this)g(assumption)g(is)f(of)h(the)227 1680 y(order)d(of)i(V)p
-Fj(\003)p Fk(SIN\(F)n(O)n(V\),)f(where)g(F)n(O)n(V)g(is)g(the)h
-(angular)e(\014eld)i(of)f(view,)i(and)e(V)h(is)f(the)h(relativ)n(e)e(v)
-n(elo)r(cit)n(y)h(of)227 1780 y(the)c(t)n(w)n(o)e(standards)f(of)i
-(rest.)38 b(As)28 b(an)g(example,)f(when)h(correcting)f(from)g(the)h
-(observ)n(ers)e(rest)h(frame)h(\(i.e.)38 b(the)227 1879
-y(top)r(o)r(cen)n(tric)23 b(rest)g(frame\))h(to)f(the)h(kinematic)g(lo)
-r(cal)e(standard)h(of)h(rest)f(the)g(maxim)n(um)h(v)-5
-b(alue)23 b(of)h(V)g(is)f(ab)r(out)h(20)227 1979 y(km/s,)e(so)f(for)g
-(5)g(arc-min)n(ute)f(\014eld)i(of)f(view)g(the)h(maxim)n(um)f(v)n(elo)r
-(cit)n(y)g(error)e(in)n(tro)r(duced)i(b)n(y)g(the)h(correction)d(will)
-227 2079 y(b)r(e)28 b(ab)r(out)f(0.03)e(km/s.)36 b(As)27
-b(another)f(example,)h(the)h(maxim)n(um)e(error)g(when)h(correcting)e
-(from)i(the)g(observ)n(ers)227 2178 y(rest)g(frame)h(to)f(the)h(lo)r
-(cal)f(group)f(is)i(ab)r(out)g(5)f(km/s)g(o)n(v)n(er)e(a)j(1)f(degree)f
-(\014eld)i(of)g(view.)227 2300 y(The)g(RefRA)h(and)e(RefDec)i
-(attributes)e(are)g(stored)g(in)n(ternally)g(in)h(radians,)e(but)j(are)
-d(con)n(v)n(erted)h(to)g(and)h(from)227 2400 y(a)34 b(string)g(for)f
-(access.)56 b(The)34 b(format)f Ft(")p Fk(hh:mm:ss.ss)p
-Ft(")h Fk(is)g(used)g(for)f(RefRA,)i(and)f Ft(")p Fk(dd:mm:ss.s)p
-Ft(")g Fk(is)g(used)g(for)227 2500 y(RefDec.)65 b(The)37
-b(metho)r(ds)g(AST)p Ft(_)p Fk(SETREFPOS)e(and)i(AST)p
-Ft(_)p Fk(GETREFPOS)e(ma)n(y)h(b)r(e)h(used)g(to)g(access)e(the)227
-2599 y(v)-5 b(alue)28 b(of)f(these)h(attributes)f(directly)h(as)f
-(unformatted)g(v)-5 b(alues)28 b(in)f(radians.)227 2721
-y(The)h(default)g(for)f(RefRA)h(is)g Ft(")p Fk(0:0:0)p
-Ft(")p Fk(.)0 2865 y Fc(T)m(yp)s(e:)227 2965 y Fk(String.)0
-3109 y Fc(Class)j(Applicabilit)m(y:)259 3241 y(Sp)s(ecF)-8
-b(rame)427 3340 y Fk(All)28 b(Sp)r(ecF)-7 b(rames)27
-b(ha)n(v)n(e)g(this)h(attribute.)p 0 3529 V 0 3661 a
-FA(RegionClass)282 b Fd(The)39 b(AST)f(class)h(name)f(of)g(the)h
-(Region)1197 3776 y(encapsulated)e(within)h(an)g(Stc)3065
-3661 y FA(RegionClass)0 3954 y Fc(Description:)44 b Fk(This)23
-b(is)f(a)g(read-only)e(attribute)j(giving)e(the)i(AST)f(class)g(name)g
-(of)g(the)h(Region)e(encapsulated)h(within)227 4054 y(an)28
-b(Stc)g(\(that)g(is,)f(the)h(class)f(of)g(the)h(Region)f(whic)n(h)h(w)n
-(as)e(supplied)i(when)g(the)g(Stc)g(w)n(as)f(created\).)0
-4198 y Fc(T)m(yp)s(e:)227 4298 y Fk(String,)h(read-only)-7
-b(.)0 4442 y Fc(Class)31 b(Applicabilit)m(y:)259 4574
-y(Stc)427 4673 y Fk(All)d(Stc)g(ob)5 b(jects)27 b(this)h(attribute.)p
-0 4862 V 0 4993 a FA(Rep)t(ort)1046 4994 y Fd(Rep)s(ort)38
-b(transformed)e(co)s(ordinates?)3365 4993 y FA(Rep)t(ort)0
-5173 y Fc(Description:)44 b Fk(This)36 b(attribute)g(con)n(trols)e
-(whether)i(co)r(ordinate)e(v)-5 b(alues)36 b(are)e(rep)r(orted)h
-(whenev)n(er)g(a)g(Mapping)h(is)227 5272 y(used)c(to)f(transform)g(a)g
-(set)g(of)h(p)r(oin)n(ts.)49 b(If)32 b(its)f(v)-5 b(alue)32
-b(is)f(zero)g(\(the)h(default\),)h(no)f(rep)r(ort)e(is)i(made.)49
-b(Ho)n(w)n(ev)n(er,)227 5372 y(if)28 b(it)f(is)f(non-zero,)g(the)h(co)r
-(ordinates)e(of)i(eac)n(h)f(p)r(oin)n(t)h(are)f(rep)r(orted)g(\(b)r
-(oth)h(b)r(efore)g(and)g(after)f(transformation\))227
-5471 y(b)n(y)i(writing)f(them)h(to)f(standard)g(output.)227
-5593 y(This)j(attribute)f(is)g(pro)n(vided)g(as)f(an)h(aid)g(to)g
-(debugging,)g(and)h(to)f(a)n(v)n(oid)f(ha)n(ving)g(to)h(rep)r(ort)f(v)
--5 b(alues)29 b(explicitly)227 5693 y(in)f(simple)g(programs.)p
-eop end
-%%Page: 444 454
-TeXDict begin 444 453 bop 0 52 a FG(444)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fc(T)m(yp)s(e:)227 451 y Fk(In)n(teger)c(\(b)r(o)r(olean\).)0
-601 y Fc(Class)k(Applicabilit)m(y:)259 737 y(Mapping)427
-837 y Fk(All)d(Mappings)f(ha)n(v)n(e)g(this)h(attribute.)259
-970 y Fc(CmpMap)427 1070 y Fk(When)20 b(applied)e(to)h(a)f(comp)r(ound)
-h(Mapping)f(\(CmpMap\),)k(only)c(the)h(Rep)r(ort)g(attribute)g(of)f
-(the)h(CmpMap,)427 1169 y(and)27 b(not)f(those)h(of)f(its)h(comp)r
-(onen)n(t)f(Mappings,)h(is)f(used.)37 b(Co)r(ordinate)25
-b(information)h(is)h(nev)n(er)e(rep)r(orted)427 1269
-y(for)i(the)h(comp)r(onen)n(t)g(Mappings)f(individually)-7
-b(,)27 b(only)h(for)f(the)h(complete)f(CmpMap.)259 1402
-y Fc(F)-8 b(rame)427 1502 y Fk(When)35 b(applied)f(to)g(an)n(y)g(F)-7
-b(rame,)35 b(the)g(formatting)e(capabilities)h(of)g(the)h(F)-7
-b(rame)33 b(\(as)h(pro)n(vided)f(b)n(y)h(the)427 1601
-y(AST)p Ft(_)p Fk(F)n(ORMA)-7 b(T)28 b(function\))g(will)g(b)r(e)g
-(used)g(to)f(format)g(the)h(rep)r(orted)f(co)r(ordinates.)259
-1734 y Fc(F)-8 b(rameSet)427 1834 y Fk(When)20 b(applied)g(to)f(an)n(y)
-g(F)-7 b(rameSet,)21 b(the)f(formatting)f(capabilities)g(of)g(the)h
-(base)f(and)g(curren)n(t)g(F)-7 b(rames)18 b(will)427
-1933 y(b)r(e)29 b(used)g(\(as)f(ab)r(o)n(v)n(e\))f(to)i(individually)f
-(format)g(the)h(input)h(and)e(output)h(co)r(ordinates,)e(as)h
-(appropriate.)427 2033 y(The)i(Rep)r(ort)g(attribute)g(of)g(a)g(F)-7
-b(rameSet)29 b(is)h(not)g(itself)g(a\013ected)g(b)n(y)g(selecting)g(a)f
-(new)h(base)f(or)g(curren)n(t)427 2133 y(F)-7 b(rame,)27
-b(but)i(the)f(resulting)f(formatting)g(capabilities)g(ma)n(y)g(b)r(e.)0
-2295 y Fc(Notes:)340 2578 y Fj(\017)45 b Fk(Unlik)n(e)37
-b(most)f(other)g(attributes,)i(the)f(v)-5 b(alue)37 b(of)f(the)h(Rep)r
-(ort)f(attribute)h(is)f(not)g(transferred)f(when)i(a)427
-2677 y(Mapping)f(is)f(copied.)61 b(Instead,)38 b(its)e(v)-5
-b(alue)35 b(is)h(unde\014ned)g(\(and)g(therefore)f(defaults)h(to)f
-(zero\))g(in)h(an)n(y)427 2777 y(cop)n(y)-7 b(.)38 b(Similarly)-7
-b(,)28 b(it)h(b)r(ecomes)f(unde\014ned)g(in)h(an)n(y)e(external)h
-(represen)n(tation)e(of)i(a)g(Mapping)g(pro)r(duced)427
-2877 y(b)n(y)g(the)g(AST)p Ft(_)p Fk(WRITE)f(routine.)p
-0 3076 3780 12 v 0 3208 a FA(Rep)t(ortLev)l(el)1144 3215
-y Fd(Determines)38 b(whic)m(h)g(read/write)1296 3336
-y(conditions)f(are)h(rep)s(orted)3057 3208 y FA(Rep)t(ortLev)l(el)0
-3525 y Fc(Description:)44 b Fk(This)36 b(attribute)f(determines)g(whic)
-n(h,)i(if)f(an)n(y)-7 b(,)37 b(of)e(the)h(conditions)f(that)g(o)r(ccur)
-g(whilst)g(reading)f(or)227 3625 y(writing)j(an)g(Ob)5
-b(ject)37 b(should)g(b)r(e)h(rep)r(orted.)65 b(These)36
-b(conditions)h(will)h(generate)e(either)h(a)f(fatal)h(error)f(or)g(a)
-227 3724 y(w)n(arning,)27 b(as)f(determined)i(b)n(y)g(attribute)f
-(Strict.)37 b(Rep)r(ortLev)n(el)27 b(can)g(tak)n(e)g(an)n(y)g(of)h(the)
-g(follo)n(wing)e(v)-5 b(alues:)227 3849 y(0)27 b(-)h(Do)f(not)h(rep)r
-(ort)f(an)n(y)g(conditions.)227 3974 y(1)i(-)g(Rep)r(ort)g(only)g
-(conditions)f(where)h(signi\014can)n(t)f(information)h(con)n(ten)n(t)g
-(has)f(b)r(een)i(c)n(hanged.)40 b(F)-7 b(or)29 b(instance,)227
-4073 y(an)g(unsupp)r(orted)h(time-scale)e(has)h(b)r(een)h(replaced)e(b)
-n(y)h(a)g(supp)r(orted)h(near-equiv)-5 b(alen)n(t)27
-b(time-scale.)42 b(Another)227 4173 y(example)32 b(is)g(if)h(a)f(basic)
-g(Channel)g(unexp)r(ected)h(encoun)n(ters)e(data)g(items)i(that)g(ma)n
-(y)e(ha)n(v)n(e)g(b)r(een)i(in)n(tro)r(duced)227 4272
-y(b)n(y)28 b(later)f(v)n(ersions)e(of)j(AST.)227 4397
-y(2)21 b(-)g(Rep)r(ort)h(the)g(ab)r(o)n(v)n(e,)f(and)g(in)h(addition)f
-(rep)r(ort)g(signi\014can)n(t)g(default)g(v)-5 b(alues.)35
-b(F)-7 b(or)21 b(instance,)h(if)g(no)f(time-scale)227
-4497 y(w)n(as)28 b(sp)r(eci\014ed)i(when)f(reading)f(an)h(Ob)5
-b(ject)29 b(from)g(an)g(external)f(data)h(source,)g(rep)r(ort)f(the)i
-(default)f(time-scale)227 4596 y(that)f(is)g(b)r(eing)f(used.)227
-4721 y(3)e(-)g(Rep)r(ort)h(the)f(ab)r(o)n(v)n(e,)g(and)g(in)h(addition)
-f(rep)r(ort)g(an)n(y)f(other)h(p)r(oten)n(tially)g(in)n(teresting)g
-(conditions)g(that)h(ha)n(v)n(e)227 4821 y(no)36 b(signi\014can)n(t)e
-(e\013ect)i(on)g(the)g(con)n(v)n(ersion.)58 b(F)-7 b(or)35
-b(instance,)j(rep)r(ort)c(if)j(a)e(time-scale)g(of)g
-Ft(")p Fk(TT)p Ft(")g Fk(\(terrestrial)227 4920 y(time\))28
-b(is)e(used)h(in)f(place)g(of)h Ft(")p Fk(ET)p Ft(")e
-Fk(\(ephemeris)i(time\).)37 b(This)26 b(c)n(hange)g(has)g(no)g
-(sign\014cian)n(t)g(e\013ect)h(b)r(ecause)f(ET)227 5020
-y(is)e(the)h(predecessor)d(of,)i(and)g(is)g(con)n(tin)n(uous)f(with,)i
-(TT.)f(Synon)n(yms)g(suc)n(h)f(as)h Ft(")p Fk(IA)-7 b(T)p
-Ft(")23 b Fk(and)h Ft(")p Fk(T)-7 b(AI)p Ft(")24 b Fk(are)f(another)227
-5120 y(example.)227 5244 y(The)34 b(default)h(v)-5 b(alue)34
-b(is)g(1.)56 b(Note,)35 b(there)f(are)f(man)n(y)h(other)f(conditions)h
-(that)g(can)g(o)r(ccur)f(whilst)i(reading)d(or)227 5344
-y(writing)23 b(an)f(Ob)5 b(ject)23 b(that)g(completely)g(prev)n(en)n(t)
-f(the)h(con)n(v)n(ersion)d(taking)i(place.)35 b(Suc)n(h)23
-b(conditions)f(will)i(alw)n(a)n(ys)227 5444 y(generate)j(errors,)e
-(irresp)r(ectiv)n(e)h(of)i(the)g(Rep)r(ortLev)n(el)f(and)g(Strict)h
-(attributes.)0 5593 y Fc(T)m(yp)s(e:)227 5693 y Fk(In)n(teger)f(\(b)r
-(o)r(olean\).)p eop end
-%%Page: 445 455
-TeXDict begin 445 454 bop 3643 52 a FG(445)0 351 y Fc(Class)31
-b(Applicabilit)m(y:)259 491 y(Channel)427 591 y Fk(All)d(Channels)g(ha)
-n(v)n(e)e(this)i(attribute.)259 725 y Fc(FitsChan)427
-825 y Fk(All)g(the)g(conditions)f(selected)h(b)n(y)f(the)h(FitsChan)g
-(W)-7 b(arnings)27 b(attribute)g(are)g(rep)r(orted)g(at)g(lev)n(el)g
-(1.)p 0 1027 3780 12 v 0 1158 a FA(RestF)-11 b(req)1410
-1159 y Fd(The)38 b(rest)h(frequency)3252 1158 y FA(RestF)-11
-b(req)0 1351 y Fc(Description:)44 b Fk(This)39 b(attribute)f(sp)r
-(eci\014es)h(the)f(frequency)g(corresp)r(onding)f(to)h(zero)f(v)n(elo)r
-(cit)n(y)-7 b(.)69 b(It)39 b(is)f(used)g(when)227 1451
-y(con)n(v)n(erting)29 b(b)r(et)n(w)n(een)g(b)r(et)n(w)n(een)h(v)n(elo)r
-(cit)n(y-based)f(co)r(ordinate)g(systems)g(and)h(and)g(other)f(co)r
-(ordinate)g(systems)227 1550 y(\(suc)n(h)f(as)f(frequency)-7
-b(,)27 b(w)n(a)n(v)n(elength,)f(energy)-7 b(,)27 b(etc\).)37
-b(The)28 b(default)g(v)-5 b(alue)27 b(is)h(1.0E5)d(GHz.)227
-1677 y(When)35 b(setting)g(a)f(new)g(v)-5 b(alue)35 b(for)e(this)i
-(attribute,)i(the)d(new)h(v)-5 b(alue)34 b(can)g(b)r(e)h(supplied)g
-(either)f(directly)g(as)g(a)227 1776 y(frequency)-7 b(,)34
-b(or)d(indirectly)i(as)f(a)g(w)n(a)n(v)n(elength)e(or)i(energy)-7
-b(,)33 b(in)g(whic)n(h)f(case)g(the)g(supplied)h(v)-5
-b(alue)33 b(is)f(con)n(v)n(erted)227 1876 y(to)i(a)f(frequency)g(b)r
-(efore)g(b)r(eing)h(stored.)54 b(The)34 b(nature)f(of)h(the)g(supplied)
-g(v)-5 b(alue)33 b(is)h(indicated)f(b)n(y)h(app)r(ending)227
-1975 y(text)e(to)f(the)h(end)f(of)g(the)h(n)n(umerical)e(v)-5
-b(alue)31 b(indicating)h(the)f(units)h(in)f(whic)n(h)h(the)f(v)-5
-b(alue)31 b(is)g(supplied.)49 b(If)31 b(the)227 2075
-y(units)h(are)e(not)h(sp)r(eci\014ed,)h(then)g(the)f(supplied)h(v)-5
-b(alue)31 b(is)f(assumed)h(to)g(b)r(e)g(a)g(frequency)g(in)g(units)g
-(of)g(GHz.)48 b(If)227 2175 y(the)35 b(supplied)f(unit)h(is)f(a)f(unit)
-i(of)f(frequency)-7 b(,)35 b(the)g(supplied)f(v)-5 b(alue)34
-b(is)g(assumed)f(to)h(b)r(e)h(a)e(frequency)h(in)g(the)227
-2274 y(giv)n(en)24 b(units.)36 b(If)24 b(the)h(supplied)f(unit)h(is)f
-(a)g(unit)h(of)f(length,)h(the)f(supplied)h(v)-5 b(alue)24
-b(is)g(assumed)g(to)g(b)r(e)g(a)g(\(v)-5 b(acuum\))227
-2374 y(w)n(a)n(v)n(elength.)35 b(If)26 b(the)h(supplied)f(unit)h(is)f
-(a)f(unit)i(of)f(energy)-7 b(,)25 b(the)h(supplied)h(v)-5
-b(alue)25 b(is)h(assumed)g(to)g(b)r(e)g(an)g(energy)-7
-b(.)227 2474 y(F)g(or)31 b(instance,)h(the)f(follo)n(wing)g(strings)f
-(all)h(result)g(in)g(a)g(rest)g(frequency)g(of)g(around)f(1.4E14)f(Hz)i
-(b)r(eing)h(used:)227 2573 y Ft(")p Fk(1.4E5)p Ft(")p
-Fk(,)23 b Ft(")p Fk(1.4E14)f(Hz)p Ft(")p Fk(,)j Ft(")p
-Fk(1.4E14)d(s)p Fj(\003\003)p Fk(-1)p Ft(")p Fk(,)h Ft(")p
-Fk(1.4E5)g(GHz)p Ft(")p Fk(,)i Ft(")p Fk(2.14E-6)d(m)p
-Ft(")p Fk(,)j Ft(")p Fk(21400)d(Angstrom)p Ft(")p Fk(,)i
-Ft(")p Fk(9.28E-20)227 2673 y(J)p Ft(")p Fk(,)j Ft(")p
-Fk(9.28E-13)d(erg)p Ft(")p Fk(,)j Ft(")p Fk(0.58)e(eV)p
-Ft(")p Fk(,)j(etc.)227 2799 y(When)e(getting)g(the)g(v)-5
-b(alue)25 b(of)g(this)h(attribute,)g(the)g(returned)f(v)-5
-b(alue)26 b(is)f(alw)n(a)n(ys)f(a)h(frequency)g(in)h(units)g(of)f(GHz.)
-0 2952 y Fc(T)m(yp)s(e:)227 3051 y Fk(Floating)i(p)r(oin)n(t.)0
-3204 y Fc(Class)k(Applicabilit)m(y:)259 3344 y(Sp)s(ecF)-8
-b(rame)427 3443 y Fk(All)28 b(Sp)r(ecF)-7 b(rames)27
-b(ha)n(v)n(e)g(this)h(attribute.)p 0 3646 V 0 3777 a
-FA(Ro)t(otCorner)976 3778 y Fd(Sp)s(eci\014es)39 b(whic)m(h)f(edges)h
-(of)f(the)h(3D)g(b)s(o)m(x)1368 3892 y(should)f(b)s(e)h(annotated)3078
-3777 y FA(Ro)t(otCorner)0 4066 y Fc(Description:)44 b
-Fk(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h
-(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-4165 y(AST)p Ft(_)p Fk(GRID)f(routine\))g(b)n(y)f(determining)g(whic)n
-(h)h(edges)f(of)g(the)h(cub)r(e)g(enclosing)e(the)i(3D)g(graphics)e
-(space)h(are)227 4265 y(used)g(for)f(displa)n(ying)g(n)n(umerical)g
-(and)h(descriptiv)n(e)f(axis)g(lab)r(els.)37 b(The)28
-b(attribute)g(v)-5 b(alue)28 b(iden)n(ti\014es)g(one)f(of)h(the)227
-4365 y(eigh)n(t)34 b(corners)e(of)h(the)h(cub)r(e)g(within)h(whic)n(h)e
-(graphics)f(are)h(b)r(eing)h(dra)n(wn)e(\(i.e.)56 b(the)34
-b(cub)r(e)g(sp)r(eci\014ed)g(b)n(y)f(the)227 4464 y(GRAPHBO)n(X)h
-(argumen)n(t)g(when)g(AST)p Ft(_)p Fk(PLOT3D)g(w)n(as)f(called)h(tp)h
-(create)e(the)i(Plot3D\).)f(Axis)h(lab)r(els)f(and)227
-4564 y(tic)n(k)28 b(marks)e(will)i(b)r(e)g(placed)f(on)h(the)g(three)f
-(cub)r(e)h(edges)f(that)h(meet)g(at)f(the)h(giv)n(en)f(corner.)227
-4690 y(The)32 b(attribute)h(v)-5 b(alue)32 b(should)g(consist)f(of)h
-(three)g(c)n(haracter,)f(eac)n(h)h(of)g(whic)n(h)g(m)n(ust)g(b)r(e)h
-(either)f Ft(")p Fk(U)p Ft(")f Fk(or)g Ft(")p Fk(L)p
-Ft(")p Fk(.)227 4790 y(The)h(\014rst)g(c)n(haracter)e(in)j(the)f
-(string)f(sp)r(eci\014es)h(the)h(p)r(osition)f(of)g(the)g(corner)f(on)h
-(the)g(\014rst)g(graphics)f(axis.)49 b(If)227 4889 y(the)29
-b(c)n(haracter)c(is)j Ft(")p Fk(U)p Ft(")g Fk(then)g(the)h(corner)d(is)
-i(at)g(the)g(upp)r(er)g(b)r(ound)g(on)g(the)g(\014rst)g(graphics)f
-(axis.)37 b(If)28 b(it)h(is)e Ft(")p Fk(L)p Ft(")p Fk(,)227
-4989 y(then)j(the)f(corner)f(is)h(at)g(the)h(lo)n(w)n(er)d(b)r(ound)j
-(on)f(the)g(\014rst)g(axis.)41 b(Lik)n(ewise,)29 b(the)g(second)g(and)g
-(third)g(c)n(haracters)227 5089 y(in)f(the)g(string)f(sp)r(ecify)h(the)
-g(lo)r(cation)f(of)g(the)h(corner)f(on)g(the)h(second)f(and)g(third)h
-(graphics)e(axes.)227 5215 y(F)-7 b(or)25 b(instance,)h(corner)d
-Ft(")p Fk(LLL)p Ft(")i Fk(is)g(the)h(corner)e(that)h(is)g(at)h(the)f
-(lo)n(w)n(er)f(b)r(ound)i(on)f(all)g(three)g(graphics)f(axes,)h(and)227
-5314 y(corner)h Ft(")p Fk(ULU)p Ft(")i Fk(is)f(at)h(the)g(upp)r(er)f(b)
-r(ound)h(on)g(axes)e(1)i(and)f(3)g(but)h(at)g(the)g(lo)n(w)n(er)e(b)r
-(ound)i(on)f(axis)g(2.)227 5441 y(The)h(default)g(v)-5
-b(alue)27 b(is)h Ft(")p Fk(LLL)p Ft(")p Fk(.)0 5593 y
-Fc(T)m(yp)s(e:)227 5693 y Fk(String.)p eop end
-%%Page: 446 456
-TeXDict begin 446 455 bop 0 52 a FG(446)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fc(Class)g(Applicabilit)m(y:)259 483 y(Plot3D)427 583
-y Fk(All)d(Plot3Ds)f(ha)n(v)n(e)f(this)i(attribute.)p
-0 774 3780 12 v 0 905 a FA(Seed)651 b Fd(Random)38 b(n)m(um)m(b)s(er)g
-(seed)h(for)f(a)g(MathMap)650 b FA(Seed)0 1085 y Fc(Description:)44
-b Fk(This)37 b(attribute,)j(whic)n(h)d(ma)n(y)f(tak)n(e)h(an)n(y)f(in)n
-(teger)g(v)-5 b(alue,)40 b(determines)d(the)g(sequence)g(of)g(random)
-227 1185 y(n)n(um)n(b)r(ers)i(pro)r(duced)g(b)n(y)h(the)f(random)g(n)n
-(um)n(b)r(er)g(functions)h(in)g(MathMap)f(expressions.)71
-b(It)40 b(is)f(set)h(to)f(an)227 1285 y(unpredictable)28
-b(default)g(v)-5 b(alue)27 b(when)h(a)f(MathMap)g(is)g(created,)g(so)g
-(that)h(b)n(y)f(default)h(eac)n(h)f(MathMap)g(uses)g(a)227
-1384 y(di\013eren)n(t)h(set)g(of)f(random)g(n)n(um)n(b)r(ers.)227
-1507 y(If)42 b(required,)i(y)n(ou)d(ma)n(y)f(set)i(this)f(Seed)h
-(attribute)f(to)h(a)f(v)-5 b(alue)41 b(of)g(y)n(our)f(c)n(ho)r(osing)g
-(in)i(order)e(to)h(pro)r(duce)227 1606 y(rep)r(eatable)33
-b(b)r(eha)n(viour)g(from)g(the)h(random)f(n)n(um)n(b)r(er)h(functions.)
-56 b(Y)-7 b(ou)34 b(ma)n(y)f(also)f(enquire)i(the)g(Seed)g(v)-5
-b(alue)227 1706 y(\(e.g.)43 b(if)30 b(an)g(initially)g(unpredictable)f
-(v)-5 b(alue)30 b(has)f(b)r(een)h(used\))g(and)f(then)h(use)g(it)g(to)f
-(repro)r(duce)g(the)h(resulting)227 1806 y(sequence)d(of)h(random)f(n)n
-(um)n(b)r(ers,)g(either)g(from)g(the)h(same)f(MathMap)h(or)f(from)g
-(another)f(one.)227 1928 y(Clearing)h(the)h(Seed)f(attribute)h(giv)n
-(es)e(it)i(a)g(new)f(unpredictable)h(default)g(v)-5 b(alue.)0
-2073 y Fc(T)m(yp)s(e:)227 2173 y Fk(In)n(teger.)0 2318
-y Fc(Class)31 b(Applicabilit)m(y:)259 2450 y(MathMap)427
-2549 y Fk(All)d(MathMaps)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 2740 V 0 2872 a FA(SideBand)267 b Fd(Indicates)38 b(whic)m(h)g
-(sideband)g(a)g(dual)h(sideband)1378 2971 y(sp)s(ectrum)f(represen)m
-(ts)3221 2872 y FA(SideBand)0 3152 y Fc(Description:)44
-b Fk(This)d(attribute)g(indicates)g(whether)g(the)g(DSBSp)r(ecF)-7
-b(rame)42 b(curren)n(tly)d(represen)n(ts)h(its)h(lo)n(w)n(er)e(or)227
-3251 y(upp)r(er)27 b(sideband,)g(or)f(an)h(o\013set)g(from)f(the)h(lo)r
-(cal)g(oscillator)e(frequency)-7 b(.)36 b(When)28 b(querying)d(the)j
-(curren)n(t)e(v)-5 b(alue,)227 3351 y(the)25 b(returned)f(string)g(is)h
-(alw)n(a)n(ys)e(one)h(of)g Ft(")p Fk(usb)p Ft(")g Fk(\(for)g(upp)r(er)h
-(sideband\),)h Ft(")p Fk(lsb)p Ft(")d Fk(\(for)i(lo)n(w)n(er)e
-(sideband\),)i(or)f Ft(")p Fk(lo)p Ft(")227 3450 y Fk(\(for)i(o\013set)
-g(from)f(the)i(lo)r(cal)e(oscillator)f(frequency\).)36
-b(When)27 b(setting)f(a)f(new)h(v)-5 b(alue,)26 b(an)n(y)f(of)h(the)g
-(strings)f Ft(")p Fk(lsb)p Ft(")p Fk(,)227 3550 y Ft(")p
-Fk(usb)p Ft(")p Fk(,)j Ft(")p Fk(observ)n(ed)p Ft(")p
-Fk(,)f Ft(")p Fk(image)p Ft(")g Fk(or)h Ft(")p Fk(lo)p
-Ft(")f Fk(ma)n(y)h(b)r(e)h(supplied)g(\(case)f(insensitiv)n(e\).)40
-b(The)29 b Ft(")p Fk(observ)n(ed)p Ft(")d Fk(sideband)227
-3650 y(is)32 b(whic)n(h)g(ev)n(er)f(sideband)h(\(upp)r(er)g(or)f(lo)n
-(w)n(er\))g(con)n(tains)g(the)h(cen)n(tral)f(sp)r(ectral)h(p)r(osition)
-g(giv)n(en)f(b)n(y)g(attribute)227 3749 y(DSBCen)n(tre,)37
-b(and)d(the)h Ft(")p Fk(image)p Ft(")f Fk(sideband)g(is)h(the)g(other)f
-(sideband.)58 b(It)35 b(is)g(the)g(sign)g(of)f(the)h(IF)g(attribute)227
-3849 y(whic)n(h)c(determines)g(if)h(the)g(observ)n(ed)d(sideband)i(is)h
-(the)f(upp)r(er)h(or)e(lo)n(w)n(er)g(sideband.)47 b(The)31
-b(default)h(v)-5 b(alue)31 b(for)227 3949 y(SideBand)d(is)f(the)h
-(observ)n(ed)e(sideband.)0 4094 y Fc(T)m(yp)s(e:)227
-4193 y Fk(String.)0 4338 y Fc(Class)31 b(Applicabilit)m(y:)259
-4470 y(DSBSp)s(ecF)-8 b(rame)427 4570 y Fk(All)28 b(DSBSp)r(ecF)-7
-b(rames)28 b(ha)n(v)n(e)e(this)i(attribute.)p 0 4761
-V 0 4892 a FA(SimpFI)386 b Fd(F)-10 b(orw)m(ard-in)m(v)m(erse)36
-b(MathMap)i(pairs)g(simplify?)384 b FA(SimpFI)0 5073
-y Fc(Description:)44 b Fk(This)29 b(attribute)g(should)f(b)r(e)h(set)f
-(to)h(a)f(non-zero)f(v)-5 b(alue)28 b(if)h(applying)f(a)h(MathMap's)f
-(forw)n(ard)f(trans-)227 5172 y(formation,)36 b(follo)n(w)n(ed)e
-(immediately)h(b)n(y)g(the)g(matc)n(hing)g(in)n(v)n(erse)e
-(transformation)h(will)h(alw)n(a)n(ys)e(restore)g(the)227
-5272 y(original)f(set)h(of)g(co)r(ordinates.)52 b(It)34
-b(indicates)e(that)i(AST)f(ma)n(y)g(replace)f(suc)n(h)h(a)f(sequence)h
-(of)g(op)r(erations)f(b)n(y)227 5371 y(an)25 b(iden)n(tit)n(y)h
-(Mapping)f(\(a)g(UnitMap\))h(if)g(it)f(is)g(encoun)n(tered)g(while)g
-(simplifying)h(a)f(comp)r(ound)g(Mapping)g(\(e.g.)227
-5471 y(using)j(AST)p Ft(_)p Fk(SIMPLIFY\).)227 5593 y(By)j(default,)i
-(the)f(SimpFI)g(attribute)g(is)f(zero,)h(so)e(that)i(AST)g(will)f(not)h
-(p)r(erform)f(this)h(simpli\014cation)f(unless)227 5693
-y(y)n(ou)c(ha)n(v)n(e)g(set)g(SimpFI)h(to)g(indicate)g(that)f(it)h(is)g
-(safe)f(to)h(do)f(so.)p eop end
-%%Page: 447 457
-TeXDict begin 447 456 bop 3643 52 a FG(447)0 351 y Fc(T)m(yp)s(e:)227
-451 y Fk(In)n(teger)27 b(\(b)r(o)r(olean\).)0 587 y Fc(Class)k
-(Applicabilit)m(y:)259 711 y(MathMap)427 810 y Fk(All)d(MathMaps)g(ha)n
-(v)n(e)e(this)i(attribute.)0 959 y Fc(Notes:)340 1229
-y Fj(\017)45 b Fk(F)-7 b(or)40 b(simpli\014cation)g(to)g(o)r(ccur,)j
-(the)e(t)n(w)n(o)f(MathMaps)g(m)n(ust)g(b)r(e)h(in)f(series)g(and)g(b)r
-(e)h(iden)n(tical)f(\(with)427 1328 y(textually)28 b(iden)n(tical)f
-(transformation)f(functions\).)38 b(F)-7 b(unctional)27
-b(equiv)-5 b(alence)27 b(is)h(not)g(su\016cien)n(t.)340
-1448 y Fj(\017)45 b Fk(The)27 b(consen)n(t)f(of)g(b)r(oth)h(MathMaps)g
-(is)f(required)g(b)r(efore)g(simpli\014cation)g(can)h(tak)n(e)f(place.)
-36 b(If)27 b(either)f(has)427 1548 y(a)h(SimpFI)i(v)-5
-b(alue)27 b(of)h(zero,)e(then)i(simpli\014cation)g(will)g(not)f(o)r
-(ccur.)340 1668 y Fj(\017)45 b Fk(The)35 b(SimpFI)g(attribute)g(con)n
-(trols)e(simpli\014cation)h(only)g(in)h(the)g(case)e(where)h(a)g
-(MathMap's)g(forw)n(ard)427 1767 y(transformation)d(is)h(follo)n(w)n
-(ed)g(b)n(y)g(the)g(matc)n(hing)g(in)n(v)n(erse)f(transformation.)50
-b(It)32 b(do)r(es)h(not)f(apply)g(if)h(an)427 1867 y(in)n(v)n(erse)25
-b(transformation)g(is)h(follo)n(w)n(ed)g(b)n(y)g(a)g(forw)n(ard)f
-(transformation.)34 b(This)27 b(latter)f(case)g(is)g(con)n(trolled)427
-1967 y(b)n(y)i(the)g(SimpIF)g(attribute.)340 2087 y Fj(\017)45
-b Fk(The)19 b Ft(")p Fk(forw)n(ard)p Ft(")e Fk(and)i
-Ft(")p Fk(in)n(v)n(erse)p Ft(")d Fk(transformations)h(referred)h(to)h
-(are)f(those)h(de\014ned)g(when)g(the)h(MathMap)427 2186
-y(is)k(created)f(\(corresp)r(onding)g(to)g(the)i(FWD)g(and)f(INV)g
-(argumen)n(ts)f(of)h(its)g(constructor)e(function\).)37
-b(If)24 b(the)427 2286 y(MathMap)30 b(is)f(in)n(v)n(erted)g(\(i.e.)44
-b(its)30 b(In)n(v)n(ert)f(attribute)h(is)f(non-zero\),)g(then)i(the)f
-(role)e(of)i(the)g(SimpFI)h(and)427 2385 y(SimpIF)e(attributes)e(will)h
-(b)r(e)g(in)n(terc)n(hanged.)p 0 2559 3780 12 v 0 2690
-a FA(SimpIF)396 b Fd(In)m(v)m(erse-forw)m(ard)36 b(MathMap)i(pairs)g
-(simplify?)395 b FA(SimpIF)0 2853 y Fc(Description:)44
-b Fk(This)31 b(attribute)g(should)f(b)r(e)h(set)g(to)g(a)f(non-zero)f
-(v)-5 b(alue)31 b(if)g(applying)f(a)g(MathMap's)g(in)n(v)n(erse)g
-(trans-)227 2953 y(formation,)j(follo)n(w)n(ed)e(immediately)i(b)n(y)f
-(the)g(matc)n(hing)g(forw)n(ard)f(transformation)g(will)h(alw)n(a)n(ys)
-e(restore)h(the)227 3053 y(original)h(set)h(of)g(co)r(ordinates.)52
-b(It)34 b(indicates)e(that)i(AST)f(ma)n(y)g(replace)f(suc)n(h)h(a)f
-(sequence)h(of)g(op)r(erations)f(b)n(y)227 3152 y(an)25
-b(iden)n(tit)n(y)h(Mapping)f(\(a)g(UnitMap\))h(if)g(it)f(is)g(encoun)n
-(tered)g(while)g(simplifying)h(a)f(comp)r(ound)g(Mapping)g(\(e.g.)227
-3252 y(using)j(AST)p Ft(_)p Fk(SIMPLIFY\).)227 3370 y(By)j(default,)i
-(the)f(SimpIF)g(attribute)g(is)f(zero,)h(so)e(that)i(AST)g(will)f(not)h
-(p)r(erform)f(this)h(simpli\014cation)f(unless)227 3469
-y(y)n(ou)c(ha)n(v)n(e)g(set)g(SimpIF)h(to)g(indicate)g(that)f(it)h(is)g
-(safe)f(to)h(do)f(so.)0 3606 y Fc(T)m(yp)s(e:)227 3706
-y Fk(In)n(teger)g(\(b)r(o)r(olean\).)0 3842 y Fc(Class)k(Applicabilit)m
-(y:)259 3965 y(MathMap)427 4065 y Fk(All)d(MathMaps)g(ha)n(v)n(e)e
-(this)i(attribute.)0 4214 y Fc(Notes:)340 4483 y Fj(\017)45
-b Fk(F)-7 b(or)40 b(simpli\014cation)g(to)g(o)r(ccur,)j(the)e(t)n(w)n
-(o)f(MathMaps)g(m)n(ust)g(b)r(e)h(in)f(series)g(and)g(b)r(e)h(iden)n
-(tical)f(\(with)427 4583 y(textually)28 b(iden)n(tical)f
-(transformation)f(functions\).)38 b(F)-7 b(unctional)27
-b(equiv)-5 b(alence)27 b(is)h(not)g(su\016cien)n(t.)340
-4703 y Fj(\017)45 b Fk(The)27 b(consen)n(t)f(of)g(b)r(oth)h(MathMaps)g
-(is)f(required)g(b)r(efore)g(simpli\014cation)g(can)h(tak)n(e)f(place.)
-36 b(If)27 b(either)f(has)427 4803 y(a)h(SimpIF)i(v)-5
-b(alue)27 b(of)h(zero,)e(then)i(simpli\014cation)g(will)g(not)f(o)r
-(ccur.)340 4922 y Fj(\017)45 b Fk(The)37 b(SimpIF)h(attribute)f(con)n
-(trols)e(simpli\014cation)i(only)g(in)g(the)g(case)f(where)h(a)f
-(MathMap's)h(in)n(v)n(erse)427 5022 y(transformation)32
-b(is)h(follo)n(w)n(ed)g(b)n(y)g(the)h(matc)n(hing)f(forw)n(ard)f
-(transformation.)52 b(It)34 b(do)r(es)f(not)h(apply)f(if)h(a)427
-5122 y(forw)n(ard)21 b(transformation)g(is)h(follo)n(w)n(ed)f(b)n(y)h
-(an)g(in)n(v)n(erse)f(transformation.)34 b(This)22 b(latter)g(case)g
-(is)g(con)n(trolled)427 5221 y(b)n(y)28 b(the)g(SimpFI)g(attribute.)340
-5341 y Fj(\017)45 b Fk(The)19 b Ft(")p Fk(forw)n(ard)p
-Ft(")e Fk(and)i Ft(")p Fk(in)n(v)n(erse)p Ft(")d Fk(transformations)h
-(referred)h(to)h(are)f(those)h(de\014ned)g(when)g(the)h(MathMap)427
-5441 y(is)k(created)f(\(corresp)r(onding)g(to)g(the)i(FWD)g(and)f(INV)g
-(argumen)n(ts)f(of)h(its)g(constructor)e(function\).)37
-b(If)24 b(the)427 5540 y(MathMap)30 b(is)f(in)n(v)n(erted)g(\(i.e.)44
-b(its)30 b(In)n(v)n(ert)f(attribute)h(is)f(non-zero\),)g(then)i(the)f
-(role)e(of)i(the)g(SimpFI)h(and)427 5640 y(SimpIF)e(attributes)e(will)h
-(b)r(e)g(in)n(terc)n(hanged.)p eop end
-%%Page: 448 458
-TeXDict begin 448 457 bop 0 52 a FG(448)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 490 a FA(Size\(elemen)l(t\))1043 483 y Fd(Character)36
-b(size)j(for)f(a)h(Plot)e(elemen)m(t)2985 490 y FA(Size\(elemen)l(t\))0
-689 y Fc(Description:)44 b Fk(This)25 b(attribute)f(determines)g(the)h
-(c)n(haracter)d(size)i(used)h(when)f(dra)n(wing)f(eac)n(h)g(elemen)n(t)
-i(of)f(graphical)227 788 y(output)d(pro)r(duced)e(b)n(y)h(a)f(Plot.)34
-b(It)20 b(tak)n(es)f(a)g(separate)g(v)-5 b(alue)19 b(for)h(eac)n(h)f
-(graphical)f(elemen)n(t)i(so)f(that,)j(for)d(instance,)227
-888 y(the)35 b(setting)e Ft(")p Fk(Size\(title\)=2.0)p
-Ft(")g Fk(causes)g(the)h(Plot)g(title)g(to)g(b)r(e)g(dra)n(wn)f(using)g
-(t)n(wice)h(the)g(default)h(c)n(haracter)227 988 y(size.)227
-1114 y(The)e(range)d(of)j(c)n(haracter)d(sizes)h(a)n(v)-5
-b(ailable)31 b(and)h(the)h(app)r(earance)e(of)h(the)g(resulting)g(text)
-g(is)h(determined)f(b)n(y)227 1214 y(the)g(underlying)f(graphics)f
-(system.)48 b(The)32 b(default)g(b)r(eha)n(viour)e(is)h(for)g(all)g
-(graphical)f(elemen)n(ts)h(to)h(b)r(e)g(dra)n(wn)227
-1313 y(using)c(the)f(default)i(c)n(haracter)c(size)i(supplied)h(b)n(y)g
-(this)f(graphics)g(system.)0 1466 y Fc(T)m(yp)s(e:)227
-1566 y Fk(Floating)g(P)n(oin)n(t.)0 1719 y Fc(Class)k(Applicabilit)m
-(y:)259 1859 y(Plot)427 1959 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)0 2124 y Fc(Notes:)340 2410 y Fj(\017)45
-b Fk(F)-7 b(or)27 b(a)g(list)h(of)g(the)g(graphical)e(elemen)n(ts)h(a)n
-(v)-5 b(ailable,)27 b(see)g(the)h(description)f(of)g(the)h(Plot)f
-(class.)340 2545 y Fj(\017)45 b Fk(If)37 b(no)e(graphical)g(elemen)n(t)
-h(is)g(sp)r(eci\014ed,)i(\(e.g.)62 b Ft(")p Fk(Size)p
-Ft(")36 b Fk(instead)f(of)h Ft(")p Fk(Size\(title\))p
-Ft(")p Fk(\),)j(then)e(a)e Ft(")p Fk(set)p Ft(")g Fk(or)427
-2645 y Ft(")p Fk(clear)p Ft(")d Fk(op)r(eration)h(will)h(a\013ect)g
-(the)g(attribute)g(v)-5 b(alue)34 b(of)f(all)h(graphical)e(elemen)n
-(ts,)j(while)f(a)g Ft(")p Fk(get)p Ft(")e Fk(or)427 2744
-y Ft(")p Fk(test)p Ft(")27 b Fk(op)r(eration)g(will)h(use)f(just)h(the)
-g(Size\(T)-7 b(extLab\))28 b(v)-5 b(alue.)p 0 2947 V
-0 3079 a FA(SizeGuess)448 b Fd(The)39 b(exp)s(ected)g(size)g(of)f(the)g
-(KeyMap)448 b FA(SizeGuess)0 3271 y Fc(Description:)44
-b Fk(This)37 b(is)f(attribute)g(giv)n(es)g(an)g(estimate)g(of)g(the)h
-(n)n(um)n(b)r(er)f(of)g(en)n(tries)g(that)h(will)f(b)r(e)h(stored)f(in)
-g(the)227 3371 y(KeyMap.)59 b(It)36 b(is)f(used)g(to)g(tune)h(the)f(in)
-n(ternal)g(prop)r(erties)f(of)h(the)h(KeyMap)e(for)h(sp)r(eed)h(and)f
-(e\016ciency)-7 b(.)59 b(A)227 3471 y(larger)24 b(v)-5
-b(alue)26 b(will)h(result)e(in)i(faster)e(access)g(at)h(the)g(exp)r
-(ense)g(of)g(increased)f(memory)g(requiremen)n(ts.)36
-b(Ho)n(w)n(ev)n(er)227 3570 y(if)28 b(the)f(SizeGuess)g(v)-5
-b(alue)27 b(is)f(m)n(uc)n(h)h(larger)e(than)i(the)h(actual)e(size)h(of)
-g(the)g(KeyMap,)f(then)i(there)e(will)h(b)r(e)h(little,)227
-3670 y(if)g(an)n(y)-7 b(,)27 b(sp)r(eed)h(gained)f(b)n(y)g(making)g
-(the)h(SizeGuess)g(ev)n(en)f(larger.)35 b(The)27 b(default)h(v)-5
-b(alue)28 b(is)f(300.)227 3796 y(The)36 b(v)-5 b(alue)36
-b(of)g(this)h(attribute)f(can)g(only)f(b)r(e)i(c)n(hanged)e(if)h(the)h
-(KeyMap)e(is)h(empt)n(y)-7 b(.)62 b(Its)37 b(v)-5 b(alue)35
-b(can)h(b)r(e)h(set)227 3896 y(con)n(v)n(enien)n(tly)24
-b(when)i(creating)e(the)i(KeyMap.)35 b(An)26 b(error)d(will)j(b)r(e)g
-(rep)r(orted)e(if)i(an)f(attempt)h(is)g(made)f(to)g(set)g(or)227
-3996 y(clear)i(the)h(attribute)g(when)f(the)h(KeyMap)f(con)n(tains)g
-(an)n(y)g(en)n(tries.)0 4149 y Fc(T)m(yp)s(e:)227 4248
-y Fk(In)n(teger.)0 4401 y Fc(Class)k(Applicabilit)m(y:)259
-4541 y(KeyMap)427 4641 y Fk(All)d(KeyMaps)f(ha)n(v)n(e)f(this)i
-(attribute.)p 0 4844 V 0 4976 a FA(Skip)1098 b Fd(Skip)39
-b(irrelev)-7 b(an)m(t)36 b(data?)1098 b FA(Skip)0 5168
-y Fc(Description:)44 b Fk(This)30 b(is)f(a)g(b)r(o)r(olean)f(attribute)
-i(whic)n(h)f(indicates)g(whether)g(the)h(Ob)5 b(ject)29
-b(data)g(b)r(eing)g(read)f(through)227 5268 y(a)f(Channel)h(are)f(in)n
-(ter-mixed)g(with)h(other,)f(irrelev)-5 b(an)n(t,)26
-b(external)h(data.)227 5394 y(If)33 b(Skip)f(is)f(zero)g(\(the)i
-(default\),)h(then)e(the)g(source)f(of)h(input)g(data)g(is)f(exp)r
-(ected)i(to)e(con)n(tain)h(descriptions)f(of)227 5494
-y(AST)26 b(Ob)5 b(jects)24 b(and)h(commen)n(ts)g(and)f(nothing)h(else)g
-(\(if)h(an)n(ything)e(else)h(is)f(read,)h(an)g(error)e(will)i
-(result\).)36 b(If)25 b(Skip)227 5593 y(is)34 b(non-zero,)g(then)g(an)n
-(y)f(non-Ob)5 b(ject)33 b(data)g(encoun)n(tered)g(b)r(et)n(w)n(een)h
-(Ob)5 b(jects)33 b(will)h(b)r(e)g(ignored)f(and)h(simply)227
-5693 y(skipp)r(ed)28 b(o)n(v)n(er)e(in)i(order)e(to)i(reac)n(h)e(the)i
-(next)g(Ob)5 b(ject.)p eop end
-%%Page: 449 459
-TeXDict begin 449 458 bop 3643 52 a FG(449)0 351 y Fc(T)m(yp)s(e:)227
-451 y Fk(In)n(teger)27 b(\(b)r(o)r(olean\).)0 602 y Fc(Class)k
-(Applicabilit)m(y:)259 740 y(Channel)427 839 y Fk(All)d(Channels)g(ha)n
-(v)n(e)e(this)i(attribute.)259 973 y Fc(FitsChan)427
-1073 y Fk(The)k(FitsChan)g(class)f(sets)g(the)h(default)g(v)-5
-b(alue)32 b(of)f(this)h(attribute)g(to)g(1,)g(so)f(that)h(all)g
-(irrelev)-5 b(an)n(t)30 b(FITS)427 1172 y(headers)d(will)h(normally)e
-(b)r(e)i(ignored.)p 0 1373 3780 12 v 0 1511 a FA(SkyRef\(axis\))918
-1505 y Fd(P)m(osition)36 b(de\014ning)i(the)h(o\013set)f(co)s(ordinate)
-1715 1604 y(system)3029 1511 y FA(SkyRef\(axis\))0 1795
-y Fc(Description:)44 b Fk(This)33 b(attribute)g(allo)n(ws)f(a)g(SkyF)-7
-b(rame)32 b(to)h(represen)n(t)e(o\013sets,)j(rather)e(than)h(absolute)f
-(axis)g(v)-5 b(alues,)227 1894 y(within)29 b(the)f(co)r(ordinate)f
-(system)h(sp)r(eci\014ed)g(b)n(y)f(the)i(System)f(attribute.)38
-b(If)28 b(supplied,)g(SkyRef)h(should)e(b)r(e)i(set)227
-1994 y(to)d(hold)f(the)h(longitude)g(and)f(latitude)h(of)g(a)f(p)r(oin)
-n(t)h(within)g(the)g(co)r(ordinate)f(system)g(sp)r(eci\014ed)h(b)n(y)f
-(the)h(System)227 2094 y(attribute.)36 b(The)23 b(co)r(ordinate)f
-(system)h(represen)n(ted)f(b)n(y)h(the)g(SkyF)-7 b(rame)23
-b(will)g(then)h(b)r(e)f(rotated)g(in)g(order)f(to)h(put)227
-2193 y(the)32 b(sp)r(eci\014ed)g(p)r(osition)f(at)h(either)f(the)h(p)r
-(ole)f(or)g(the)h(origin)e(of)h(the)h(new)g(co)r(ordinate)e(system)h
-(\(as)g(indicated)227 2293 y(b)n(y)g(the)g(SkyRefIs)g(attribute\).)46
-b(The)31 b(orien)n(tation)f(of)g(the)i(mo)r(di\014ed)f(co)r(ordinate)e
-(system)i(is)g(then)g(con)n(trolled)227 2393 y(using)d(the)f(SkyRefP)h
-(attribute.)227 2518 y(If)34 b(an)f(in)n(teger)g(axis)g(index)g(is)h
-(included)f(in)h(the)g(attribute)g(name)f(\(e.g.)54 b
-Ft(")p Fk(SkyRef\(1\))p Ft(")p Fk(\))34 b(then)g(the)f(attribute)227
-2617 y(v)-5 b(alue)29 b(should)g(b)r(e)g(supplied)h(as)e(a)h(single)f
-(\015oating)g(p)r(oin)n(t)i(axis)e(v)-5 b(alue,)29 b(in)g(radians,)f
-(when)i(setting)f(a)f(v)-5 b(alue)29 b(for)227 2717 y(the)j(attribute,)
-g(and)f(will)h(b)r(e)g(returned)e(in)i(the)g(same)e(form)h(when)h
-(getting)f(the)g(v)-5 b(alue)31 b(of)h(the)f(attribute.)48
-b(In)227 2817 y(this)31 b(case)f(the)i(in)n(teger)d(axis)i(index)f
-(should)h(b)r(e)g Ft(")p Fk(1)p Ft(")f Fk(or)g Ft(")p
-Fk(2)p Ft(")f Fk(\(the)j(v)-5 b(alues)30 b(to)h(use)g(for)f(longitude)h
-(and)f(latitue)227 2916 y(axes)d(are)g(giv)n(en)f(b)n(y)i(the)g
-(LonAxis)f(and)g(LatAxis)g(attributes\).)227 3042 y(If)h(no)g(axis)f
-(index)h(is)f(included)i(in)f(the)g(attribute)g(name)f(\(e.g.)37
-b Ft(")p Fk(SkyRef)p Ft(")p Fk(\))28 b(then)g(the)g(attribute)g(v)-5
-b(alue)28 b(should)227 3141 y(b)r(e)f(supplied)f(as)f(a)g(c)n(haracter)
-f(string)h(con)n(taining)g(t)n(w)n(o)g(formatted)h(axis)f(v)-5
-b(alues)25 b(\(an)h(axis)f(1)g(v)-5 b(alue)26 b(follo)n(w)n(ed)f(b)n(y)
-227 3241 y(a)j(comma,)f(follo)n(w)n(ed)g(b)n(y)h(an)f(axis)g(2)h(v)-5
-b(alue\).)38 b(The)28 b(same)f(form)g(will)i(b)r(e)f(used)g(when)g
-(getting)f(the)i(v)-5 b(alue)27 b(of)h(the)227 3341 y(attribute.)227
-3466 y(The)g(default)g(v)-5 b(alues)27 b(for)g(SkyRef)h(are)f(zero)f
-(longitude)i(and)f(zero)f(latitude.)0 3617 y Fc(T)m(yp)s(e:)227
-3716 y Fk(Floating)h(p)r(oin)n(t.)0 3867 y Fc(Class)k(Applicabilit)m
-(y:)259 4005 y(SkyF)-8 b(rame)427 4105 y Fk(All)28 b(SkyF)-7
-b(rames)27 b(ha)n(v)n(e)f(this)i(attribute.)0 4268 y
-Fc(Notes:)340 4552 y Fj(\017)45 b Fk(If)31 b(the)f(System)g(attribute)g
-(of)g(the)g(SkyF)-7 b(rame)29 b(is)h(c)n(hanged,)g(an)n(y)f(p)r
-(osition)g(giv)n(en)g(for)h(SkyRef)g(is)g(trans-)427
-4652 y(formed)e(in)n(to)f(the)h(new)g(System.)340 4786
-y Fj(\017)45 b Fk(If)24 b(a)f(v)-5 b(alue)23 b(has)f(b)r(een)i
-(assigned)e(to)h(SkyRef)g(attribute,)i(then)e(the)h(default)g(v)-5
-b(alues)22 b(for)h(certain)g(attributes)427 4885 y(are)k(c)n(hanged)g
-(as)g(follo)n(ws:)37 b(the)28 b(default)h(axis)e(Lab)r(els)h(for)f(the)
-h(SkyF)-7 b(rame)28 b(are)f(mo)r(di\014ed)h(b)n(y)g(app)r(ending)427
-4985 y Ft(")h Fk(o\013set)p Ft(")f Fk(to)g(the)i(end,)f(the)g(default)g
-(axis)f(Sym)n(b)r(ols)g(for)g(the)i(SkyF)-7 b(rame)27
-b(are)h(mo)r(di\014ed)h(b)n(y)g(prep)r(ending)427 5085
-y(the)i(c)n(haracter)d Ft(")p Fk(D)p Ft(")i Fk(to)g(the)h(start,)f(and)
-g(the)h(default)f(title)h(is)f(mo)r(di\014ed)h(b)n(y)f(replacing)f(the)
-i(pro)5 b(jection)427 5184 y(information)27 b(b)n(y)h(the)f(origin)g
-(information.)-2 5348 y Fc(Aligning)k(SkyF)-8 b(rames)32
-b(with)f(O\013set)g(Co)s(ordinate)g(Systems)n(:)227 5494
-y Fk(The)22 b(o\013set)h(co)r(ordinate)e(system)g(within)i(a)f(SkyF)-7
-b(rame)21 b(should)h(normally)f(b)r(e)i(considered)e(as)h(a)f(sup)r
-(er\014cial)h Ft(")p Fk(re-)227 5593 y(badging)p Ft(")f
-Fk(of)h(the)h(axes)e(of)h(the)g(co)r(ordinate)f(system)h(sp)r
-(eci\014ed)g(b)n(y)g(the)h(System)f(attribute)g(-)g(it)g(merely)g(pro)n
-(vides)227 5693 y(an)h(alternativ)n(e)f(n)n(umerical)h
-Ft(")p Fk(lab)r(el)p Ft(")f Fk(for)h(eac)n(h)f(p)r(osition)h(in)h(the)f
-(System)h(co)r(ordinate)e(system.)35 b(The)23 b(SkyF)-7
-b(rame)p eop end
-%%Page: 450 460
-TeXDict begin 450 459 bop 0 52 a FG(450)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fk(retains)f(full)h(kno)n(wledge)f(of)g(the)h(celestial)g(co)r
-(ordinate)e(system)h(on)h(whic)n(h)f(the)h(o\013set)g(co)r(ordinate)e
-(system)i(is)227 451 y(based)e(\(giv)n(en)g(b)n(y)g(the)h(System)g
-(attribute\).)43 b(F)-7 b(or)29 b(instance,)g(the)h(SkyF)-7
-b(rame)29 b(retains)f(kno)n(wledge)h(of)g(the)h(w)n(a)n(y)227
-551 y(that)37 b(one)g(celestial)f(co)r(ordinate)f(system)i(ma)n(y)f
-Ft(")p Fk(drift)p Ft(")g Fk(with)h(resp)r(ect)g(to)f(another)g(o)n(v)n
-(er)f(time.)64 b(Normally)-7 b(,)227 650 y(if)33 b(y)n(ou)f(attempt)i
-(to)e(align)g(t)n(w)n(o)g(SkyF)-7 b(rames)32 b(\(e.g.)52
-b(using)32 b(the)h(AST)p Ft(_)p Fk(CONVER)-7 b(T)33 b(or)f(AST)p
-Ft(_)p Fk(FINDFRAME)227 750 y(routine\),)k(the)e(e\013ect)h(of)f(an)n
-(y)f(o\013set)h(co)r(ordinate)f(system)h(de\014ned)g(in)g(either)g
-(SkyF)-7 b(rame)33 b(will)i(b)r(e)f(remo)n(v)n(ed,)227
-849 y(resulting)22 b(in)i(alignmen)n(t)e(b)r(eing)h(p)r(erformed)f(in)h
-(the)g(celestial)g(co)r(ordinate)e(system)i(giv)n(en)f(b)n(y)g(the)h
-(AlignSystem)227 949 y(attribute.)35 b(Ho)n(w)n(ev)n(er,)21
-b(b)n(y)h(setting)g(the)g(AlignO\013set)g(attribute)g(ot)f(a)h
-(non-zero)e(v)-5 b(alue,)23 b(it)f(is)g(p)r(ossible)f(to)h(c)n(hange)
-227 1049 y(this)28 b(b)r(eha)n(viour)e(so)h(that)h(the)g(e\013ect)g(of)
-g(the)g(o\013set)f(co)r(ordinate)g(system)g(is)g(not)h(remo)n(v)n(ed)e
-(when)i(aligning)e(t)n(w)n(o)227 1148 y(SkyF)-7 b(rames.)p
-0 1355 3780 12 v 0 1487 a FA(SkyRefIs)299 b Fd(Selects)38
-b(the)h(nature)f(of)g(the)h(o\013set)f(co)s(ordinate)1715
-1586 y(system)3257 1487 y FA(SkyRefIs)0 1782 y Fc(Description:)44
-b Fk(This)34 b(attribute)f(con)n(trols)f(ho)n(w)h(the)h(v)-5
-b(alues)33 b(supplied)h(for)f(the)h(SkyRef)f(and)h(SkyRefP)f
-(attributes)227 1882 y(are)e(used.)49 b(These)32 b(three)f(attributes)h
-(together)f(allo)n(w)f(a)i(SkyF)-7 b(rame)31 b(to)g(represen)n(t)g
-(o\013sets)g(relativ)n(e)g(to)g(some)227 1982 y(sp)r(eci\014ed)39
-b(origin)e(or)g(p)r(ole)h(within)h(the)g(co)r(ordinate)e(system)g(sp)r
-(eci\014ed)i(b)n(y)f(the)g(System)h(attribute,)i(rather)227
-2081 y(than)26 b(absolute)f(axis)g(v)-5 b(alues.)36 b(SkyRefIs)25
-b(can)h(tak)n(e)f(one)g(of)g(the)h(case-insensitiv)n(e)e(v)-5
-b(alues)26 b Ft(")p Fk(Origin)p Ft(")p Fk(,)e Ft(")p
-Fk(P)n(ole)p Ft(")f Fk(or)227 2181 y Ft(")p Fk(Ignored)p
-Ft(")p Fk(.)227 2309 y(If)h(SkyRefIs)g(is)f(set)g(to)h
-Ft(")p Fk(Origin)p Ft(")p Fk(,)e(then)i(the)g(co)r(ordinate)e(system)i
-(represen)n(ted)e(b)n(y)h(the)h(SkyF)-7 b(rame)23 b(is)g(mo)r(di\014ed)
-227 2409 y(to)28 b(put)g(the)g(origin)e(of)i(longitude)f(and)h
-(latitude)g(at)f(the)h(p)r(osition)g(sp)r(eci\014ed)f(b)n(y)h(the)g
-(SkyRef)g(attribute.)227 2537 y(If)h(SkyRefIs)g(is)f(set)h(to)f
-Ft(")p Fk(P)n(ole)p Ft(")p Fk(,)f(then)i(the)g(co)r(ordinate)e(system)h
-(represen)n(ted)g(b)n(y)g(the)h(SkyF)-7 b(rame)28 b(is)g(mo)r(di\014ed)
-227 2637 y(to)g(put)g(the)g(north)f(p)r(ole)h(at)f(the)h(p)r(osition)g
-(sp)r(eci\014ed)f(b)n(y)h(the)g(SkyRef)g(attribute.)227
-2765 y(If)d(SkyRefIs)e(is)h(set)g(to)g Ft(")p Fk(Ignored)p
-Ft(")e Fk(\(the)i(default\),)i(then)e(an)n(y)f(v)-5 b(alue)24
-b(set)g(for)f(the)i(SkyRef)f(attribute)g(is)g(ignored,)227
-2864 y(and)39 b(the)g(SkyF)-7 b(rame)38 b(represen)n(ts)f(the)i(co)r
-(ordinate)f(system)g(sp)r(eci\014ed)h(b)n(y)g(the)g(System)g(attribute)
-g(directly)227 2964 y(without)28 b(an)n(y)f(rotation.)0
-3121 y Fc(T)m(yp)s(e:)227 3220 y Fk(String.)0 3377 y
-Fc(Class)k(Applicabilit)m(y:)259 3521 y(SkyF)-8 b(rame)427
-3621 y Fk(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i(attribute.)
-p 0 3827 V 0 3966 a FA(SkyRefP\(axis\))1068 3959 y Fd(P)m(osition)36
-b(on)i(primary)f(meridian)g(of)1273 4073 y(o\013set)h(co)s(ordinate)f
-(system)2937 3966 y FA(SkyRefP\(axis\))0 4270 y Fc(Description:)44
-b Fk(This)33 b(attribute)g(is)g(used)g(to)g(con)n(trol)e(the)i(orien)n
-(tation)f(of)h(the)g(o\013set)g(co)r(ordinate)f(system)g(de\014ned)227
-4369 y(b)n(y)h(attributes)h(SkyRef)f(and)h(SkyRefIs.)54
-b(If)34 b(used,)h(it)f(should)f(b)r(e)h(set)f(to)h(hold)f(the)h
-(longitude)f(and)g(latitude)227 4469 y(of)e(a)f(p)r(oin)n(t)h(within)h
-(the)f(co)r(ordinate)f(system)g(sp)r(eci\014ed)h(b)n(y)g(the)g(System)g
-(attribute.)46 b(The)31 b(o\013set)g(co)r(ordinate)227
-4569 y(system)c(represen)n(ted)e(b)n(y)h(the)h(SkyF)-7
-b(rame)26 b(will)h(then)g(b)r(e)g(rotated)f(in)h(order)e(to)i(put)g
-(the)g(p)r(osition)f(supplied)h(for)227 4668 y(SkyRefP)35
-b(on)f(the)h(zero)e(longitude)h(meridian.)58 b(This)34
-b(rotation)g(is)g(ab)r(out)h(an)f(axis)g(from)g(the)h(cen)n(tre)f(of)g
-(the)227 4768 y(celestial)d(sphere)g(to)h(the)g(p)r(oin)n(t)g(sp)r
-(eci\014ed)g(b)n(y)f(the)h(SkyRef)g(attribute.)49 b(The)32
-b(default)g(v)-5 b(alue)31 b(for)g(SkyRefP)h(is)227 4867
-y(usually)26 b(the)g(north)g(p)r(ole)g(\(that)h(is,)f(a)g(latitude)g
-(of)g(+90)f(degrees)g(in)h(the)g(co)r(ordinate)f(system)h(sp)r
-(eci\014ed)g(b)n(y)g(the)227 4967 y(System)j(attribute\).)39
-b(The)28 b(exception)g(to)g(this)h(is)f(if)h(the)f(SkyRef)h(attribute)f
-(is)g(itself)h(set)f(to)g(either)g(the)h(north)227 5067
-y(or)23 b(south)h(p)r(ole.)35 b(In)24 b(these)g(cases)f(the)h(default)g
-(for)f(SkyRefP)h(is)f(the)h(origin)f(\(that)h(is,)h(a)e(\(0,0\))h(in)g
-(the)g(co)r(ordinate)227 5166 y(system)k(sp)r(eci\014ed)f(b)n(y)h(the)g
-(System)g(attribute\).)227 5295 y(If)j(an)f(in)n(teger)f(axis)g(index)i
-(is)f(included)g(in)h(the)f(attribute)h(name)e(\(e.g.)45
-b Ft(")p Fk(SkyRefP\(1\))p Ft(")p Fk(\))29 b(then)i(the)f(attribute)227
-5394 y(v)-5 b(alue)29 b(should)g(b)r(e)g(supplied)h(as)e(a)h(single)f
-(\015oating)g(p)r(oin)n(t)i(axis)e(v)-5 b(alue,)29 b(in)g(radians,)f
-(when)i(setting)f(a)f(v)-5 b(alue)29 b(for)227 5494 y(the)j(attribute,)
-g(and)f(will)h(b)r(e)g(returned)e(in)i(the)g(same)e(form)h(when)h
-(getting)f(the)g(v)-5 b(alue)31 b(of)h(the)f(attribute.)48
-b(In)227 5593 y(this)31 b(case)f(the)i(in)n(teger)d(axis)i(index)f
-(should)h(b)r(e)g Ft(")p Fk(1)p Ft(")f Fk(or)g Ft(")p
-Fk(2)p Ft(")f Fk(\(the)j(v)-5 b(alues)30 b(to)h(use)g(for)f(longitude)h
-(and)f(latitue)227 5693 y(axes)d(are)g(giv)n(en)f(b)n(y)i(the)g
-(LonAxis)f(and)g(LatAxis)g(attributes\).)p eop end
-%%Page: 451 461
-TeXDict begin 451 460 bop 3643 52 a FG(451)227 351 y
-Fk(If)25 b(no)f(axis)f(index)h(is)g(included)h(in)f(the)h(attribute)f
-(name)g(\(e.g.)35 b Ft(")p Fk(SkyRefP)p Ft(")p Fk(\))24
-b(then)g(the)h(attribute)f(v)-5 b(alue)24 b(should)227
-451 y(b)r(e)j(supplied)f(as)f(a)g(c)n(haracter)f(string)h(con)n
-(taining)g(t)n(w)n(o)g(formatted)h(axis)f(v)-5 b(alues)25
-b(\(an)h(axis)f(1)g(v)-5 b(alue)26 b(follo)n(w)n(ed)f(b)n(y)227
-551 y(a)j(comma,)f(follo)n(w)n(ed)g(b)n(y)h(an)f(axis)g(2)h(v)-5
-b(alue\).)38 b(The)28 b(same)f(form)g(will)i(b)r(e)f(used)g(when)g
-(getting)f(the)i(v)-5 b(alue)27 b(of)h(the)227 650 y(attribute.)0
-794 y Fc(T)m(yp)s(e:)227 894 y Fk(Floating)f(p)r(oin)n(t.)0
-1038 y Fc(Class)k(Applicabilit)m(y:)259 1170 y(SkyF)-8
-b(rame)427 1269 y Fk(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i
-(attribute.)0 1426 y Fc(Notes:)340 1703 y Fj(\017)45
-b Fk(If)24 b(the)g(p)r(osition)f(giv)n(en)f(b)n(y)h(the)h(SkyRef)f
-(attribute)h(de\014nes)f(the)h(origin)e(of)h(the)h(o\013set)f(co)r
-(ordinate)f(system)427 1803 y(\(that)33 b(is,)h(if)f(the)g(SkyRefIs)g
-(attribute)g(is)f(set)h(to)f Ft(")p Fk(origin)p Ft(")p
-Fk(\),)h(then)g(there)f(will)h(in)g(general)e(b)r(e)i(t)n(w)n(o)f(ori-)
-427 1902 y(en)n(tations)27 b(whic)n(h)h(will)f(put)i(the)f(supplied)f
-(SkyRefP)h(p)r(osition)f(on)g(the)h(zero)f(longitude)g(meridian.)37
-b(The)427 2002 y(orien)n(tation)25 b(whic)n(h)i(is)f(actually)g(used)g
-(is)g(the)h(one)f(whic)n(h)h(giv)n(es)e(the)i(SkyRefP)f(p)r(osition)g
-(a)g(p)r(ositiv)n(e)g(lat-)427 2102 y(itude)i(in)g(the)g(o\013set)g(co)
-r(ordinate)f(system)g(\(the)h(other)f(p)r(ossible)h(orien)n(tation)e(w)
-n(ould)h(giv)n(e)g(the)h(SkyRefP)427 2201 y(p)r(osition)g(a)f(negativ)n
-(e)f(latitude\).)340 2329 y Fj(\017)45 b Fk(An)29 b(error)d(will)i(b)r
-(e)h(rep)r(orted)e(if)i(an)e(attempt)i(is)f(made)g(to)g(use)g(a)f
-(SkyRefP)h(v)-5 b(alue)28 b(whic)n(h)g(is)g(co-inciden)n(t)427
-2429 y(with)h(SkyRef)f(or)f(with)h(the)g(p)r(oin)n(t)g(diametrically)f
-(opp)r(osite)h(to)f(SkyRef)h(on)g(the)g(celestial)g(sphere.)37
-b(The)427 2528 y(rep)r(orting)d(of)h(this)g(error)d(is)j(deferred)f(un)
-n(til)h(the)h(SkyRef)f(and)f(SkyRefP)h(attribute)g(v)-5
-b(alues)34 b(are)g(used)427 2628 y(within)29 b(a)e(calculation.)340
-2756 y Fj(\017)45 b Fk(If)27 b(the)f(System)h(attribute)f(of)g(the)h
-(SkyF)-7 b(rame)25 b(is)h(c)n(hanged,)f(an)n(y)h(p)r(osition)g(giv)n
-(en)f(for)h(SkyRefP)g(is)g(trans-)427 2855 y(formed)i(in)n(to)f(the)h
-(new)g(System.)p 0 3044 3780 12 v 0 3175 a FA(SourceSys)754
-3176 y Fd(Sp)s(ectral)37 b(system)i(in)f(whic)m(h)g(the)h(source)f(v)m
-(elo)s(cit)m(y)1675 3290 y(is)g(stored)3188 3175 y FA(SourceSys)0
-3450 y Fc(Description:)44 b Fk(This)31 b(attribute)f(iden)n(ti\014es)h
-(the)g(sp)r(ectral)f(system)g(in)h(whic)n(h)f(the)h(SourceV)-7
-b(el)30 b(attribute)h(v)-5 b(alue)30 b(\(the)227 3550
-y(source)d(v)n(elo)r(cit)n(y\))g(is)g(supplied)h(and)g(returned.)36
-b(It)28 b(can)f(b)r(e)h(one)f(of)h(the)g(follo)n(wing:)340
-3803 y Fj(\017)45 b Ft(")p Fk(VRAD)p Ft(")28 b Fk(or)f
-Ft(")p Fk(VRADIO)p Ft(")p Fk(:)37 b(Radio)27 b(v)n(elo)r(cit)n(y)f
-(\(km/s\))340 3931 y Fj(\017)45 b Ft(")p Fk(V)n(OPT)p
-Ft(")26 b Fk(or)h Ft(")p Fk(V)n(OPTICAL)p Ft(")p Fk(:)35
-b(Optical)27 b(v)n(elo)r(cit)n(y)g(\(km/s\))340 4058
-y Fj(\017)45 b Ft(")p Fk(ZOPT)p Ft(")26 b Fk(or)h Ft(")p
-Fk(REDSHIFT)p Ft(")p Fk(:)36 b(Redshift)29 b(\(dimensionless\))340
-4186 y Fj(\017)45 b Ft(")p Fk(BET)-7 b(A)p Ft(")p Fk(:)36
-b(Beta)27 b(factor)g(\(dimensionless\))340 4314 y Fj(\017)45
-b Ft(")p Fk(VELO)p Ft(")26 b Fk(or)h Ft(")p Fk(VREL)p
-Ft(")p Fk(:)36 b(Apparen)n(t)27 b(radial)g(\()p Ft(")p
-Fk(relativistic)p Ft(")p Fk(\))f(v)n(elo)r(cit)n(y)h(\(km/s\))227
-4470 y(When)34 b(setting)e(a)h(new)f(v)-5 b(alue)33 b(for)f(the)i
-(SourceV)-7 b(el)32 b(attribute,)i(the)f(source)f(v)n(elo)r(cit)n(y)g
-(should)g(b)r(e)h(supplied)g(in)227 4570 y(the)28 b(sp)r(ectral)f
-(system)g(indicated)g(b)n(y)g(this)h(attribute.)37 b(Lik)n(ewise,)27
-b(when)g(getting)g(the)h(v)-5 b(alue)27 b(of)g(the)h(SourceV)-7
-b(el)227 4670 y(attribute,)28 b(the)g(v)n(elo)r(cit)n(y)f(will)h(b)r(e)
-g(returned)f(in)h(this)g(sp)r(ectral)f(system.)227 4792
-y(If)g(the)h(v)-5 b(alue)26 b(of)h(SourceSys)f(is)g(c)n(hanged,)g(the)i
-(v)-5 b(alue)26 b(stored)g(for)g(SourceV)-7 b(el)27 b(will)g(b)r(e)g
-(con)n(v)n(erted)e(from)i(the)g(old)227 4891 y(to)h(the)g(new)f(sp)r
-(ectral)g(systems.)227 5013 y(The)h(default)g(v)-5 b(alue)27
-b(is)h Ft(")p Fk(VELO)p Ft(")e Fk(\(apparen)n(t)h(radial)f(v)n(elo)r
-(cit)n(y\).)0 5157 y Fc(T)m(yp)s(e:)227 5257 y Fk(String.)0
-5401 y Fc(Class)31 b(Applicabilit)m(y:)259 5533 y(Sp)s(ecF)-8
-b(rame)427 5632 y Fk(All)28 b(Sp)r(ecF)-7 b(rames)27
-b(ha)n(v)n(e)g(this)h(attribute.)p eop end
-%%Page: 452 462
-TeXDict begin 452 461 bop 0 52 a FG(452)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 482 a FA(SourceVRF)879 483 y Fd(Rest)39 b(frame)e(in)i
-(whic)m(h)e(the)i(source)f(v)m(elo)s(cit)m(y)1675 598
-y(is)g(stored)3100 482 y FA(SourceVRF)0 781 y Fc(Description:)44
-b Fk(This)32 b(attribute)f(iden)n(ti\014es)g(the)h(rest)f(frame)g(in)g
-(whic)n(h)g(the)h(source)e(v)n(elo)r(cit)n(y)g(or)h(redshift)g(is)g
-(stored)227 880 y(\(the)g(source)e(v)n(elo)r(cit)n(y)h(or)f(redshift)h
-(is)h(accessed)e(using)h(attribute)g(SourceV)-7 b(el\).)45
-b(When)30 b(setting)h(a)e(new)i(v)-5 b(alue)227 980 y(for)34
-b(the)h(SourceV)-7 b(el)34 b(attribute,)i(the)f(source)f(v)n(elo)r(cit)
-n(y)f(or)h(redshift)g(should)h(b)r(e)g(supplied)f(in)h(the)g(rest)f
-(frame)227 1079 y(indicated)21 b(b)n(y)e(this)i(attribute.)34
-b(Lik)n(ewise,)21 b(when)g(getting)e(the)i(v)-5 b(alue)20
-b(of)g(the)h(SourceV)-7 b(el)19 b(attribute,)j(the)e(v)n(elo)r(cit)n(y)
-227 1179 y(or)27 b(redshift)h(will)g(b)r(e)g(returned)f(in)h(this)g
-(rest)f(frame.)227 1312 y(If)33 b(the)f(v)-5 b(alue)32
-b(of)g(SourceVRF)f(is)h(c)n(hanged,)g(the)g(v)-5 b(alue)32
-b(stored)f(for)g(SourceV)-7 b(el)32 b(will)g(b)r(e)g(con)n(v)n(erted)f
-(from)g(the)227 1412 y(old)d(to)f(the)h(new)g(rest)f(frame.)227
-1545 y(The)44 b(v)-5 b(alues)43 b(whic)n(h)h(can)f(b)r(e)h(supplied)g
-(are)f(the)h(same)f(as)g(for)g(the)h(StdOfRest)h(attribute)e(\(except)h
-(that)227 1645 y(SourceVRF)28 b(cannot)f(b)r(e)h(set)f(to)h
-Ft(")p Fk(Source)p Ft(")p Fk(\).)35 b(The)28 b(default)g(v)-5
-b(alue)27 b(is)h Ft(")p Fk(Helio)p Ft(")p Fk(.)0 1812
-y Fc(T)m(yp)s(e:)227 1911 y Fk(String.)0 2078 y Fc(Class)j
-(Applicabilit)m(y:)259 2232 y(Sp)s(ecF)-8 b(rame)427
-2332 y Fk(All)28 b(Sp)r(ecF)-7 b(rames)27 b(ha)n(v)n(e)g(this)h
-(attribute.)p 0 2548 V 0 2680 a FA(SourceV)-11 b(el)812
-b Fd(The)38 b(source)h(v)m(elo)s(cit)m(y)809 b FA(SourceV)-11
-b(el)0 2891 y Fc(Description:)44 b Fk(This)39 b(attribute)f(\(together)
-g(with)h(SourceSys,)h(SourceVRF,)f(RefRA)g(and)f(RefDec\))i(de\014nes)e
-(the)227 2990 y Ft(")p Fk(Source)p Ft(")25 b Fk(standard)f(of)i(rest)g
-(\(see)g(attribute)g(StdOfRest\).)37 b(This)26 b(is)g(a)f(rest)g(frame)
-h(whic)n(h)g(is)g(mo)n(ving)e(to)n(w)n(ards)227 3090
-y(the)j(p)r(osition)e(giv)n(en)g(b)n(y)h(RefRA)h(and)e(RefDec)i(at)f(a)
-f(v)n(elo)r(cit)n(y)g(giv)n(en)g(b)n(y)h(SourceV)-7 b(el.)36
-b(A)26 b(p)r(ositiv)n(e)f(v)-5 b(alue)26 b(means)227
-3190 y(the)j(source)e(is)h(mo)n(ving)f(a)n(w)n(a)n(y)f(from)i(the)h
-(observ)n(er.)37 b(When)28 b(a)g(new)h(v)-5 b(alue)28
-b(is)g(assigned)f(to)h(this)h(attribute,)f(the)227 3289
-y(supplied)f(v)-5 b(alue)26 b(is)g(assumed)g(to)g(refer)f(to)h(the)h
-(sp)r(ectral)f(system)g(sp)r(eci\014ed)g(b)n(y)g(the)h(SourceSys)e
-(attribute.)36 b(F)-7 b(or)227 3389 y(instance,)35 b(the)f(SourceV)-7
-b(el)32 b(v)-5 b(alue)33 b(ma)n(y)g(b)r(e)h(supplied)f(as)g(a)g(radio)f
-(v)n(elo)r(cit)n(y)-7 b(,)34 b(a)f(redshift,)i(a)e(b)r(eta)g(factor,)h
-(etc.)227 3488 y(Similarly)-7 b(,)34 b(when)f(the)h(curren)n(t)e(v)-5
-b(alue)32 b(of)h(the)h(SourceV)-7 b(el)32 b(attribute)h(is)g(obtained,)
-h(the)f(returned)g(v)-5 b(alue)32 b(will)227 3588 y(refer)f(to)h(the)g
-(sp)r(ectral)f(system)g(sp)r(eci\014ed)h(b)n(y)f(the)h(SourceSys)e(v)-5
-b(alue.)49 b(If)32 b(the)g(SourceSys)f(v)-5 b(alue)31
-b(is)h(c)n(hanged,)227 3688 y(an)n(y)25 b(v)-5 b(alue)25
-b(previously)f(stored)g(for)h(the)g(SourceV)-7 b(el)25
-b(attribute)g(will)h(b)r(e)f(c)n(hanged)f(automatically)g(from)h(the)h
-(old)227 3787 y(sp)r(ectral)h(system)h(to)f(the)h(new)g(sp)r(ectral)f
-(system.)227 3921 y(When)f(setting)f(a)g(v)-5 b(alue)25
-b(for)f(SourceV)-7 b(el,)25 b(the)h(v)-5 b(alue)25 b(should)g(b)r(e)g
-(supplied)h(in)f(the)h(rest)e(frame)h(sp)r(eci\014ed)g(b)n(y)g(the)227
-4020 y(SourceVRF)f(attribute.)36 b(Lik)n(ewise,)23 b(when)h(getting)g
-(the)g(v)-5 b(alue)23 b(of)h(SourceV)-7 b(el,)24 b(it)g(will)g(b)r(e)h
-(returned)e(in)h(the)g(rest)227 4120 y(frame)j(sp)r(eci\014ed)h(b)n(y)g
-(the)g(SourceVRF)f(attribute.)227 4253 y(The)h(default)g(SourceV)-7
-b(el)27 b(v)-5 b(alue)28 b(is)f(zero.)0 4420 y Fc(T)m(yp)s(e:)227
-4520 y Fk(Floating)g(p)r(oin)n(t.)0 4686 y Fc(Class)k(Applicabilit)m
-(y:)259 4840 y(Sp)s(ecF)-8 b(rame)427 4940 y Fk(All)28
-b(Sp)r(ecF)-7 b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)0
-5119 y Fc(Notes:)340 5419 y Fj(\017)45 b Fk(It)35 b(is)f(imp)r(ortan)n
-(t)f(to)h(set)g(an)g(appropriate)e(v)-5 b(alue)34 b(for)g(SourceVRF)f
-(and)h(SourceSys)f(b)r(efore)h(setting)g(a)427 5519 y(v)-5
-b(alue)27 b(for)f(SourceV)-7 b(el.)36 b(If)27 b(a)f(new)g(v)-5
-b(alue)27 b(is)f(later)g(set)h(for)f(SourceVRF)g(or)f(SourceSys,)h(the)
-h(v)-5 b(alue)26 b(stored)427 5618 y(for)g(SourceV)-7
-b(el)26 b(will)h(sim)n(ultaneously)f(b)r(e)h(c)n(hanged)e(to)i(the)f
-(new)h(standard)f(of)g(rest)g(or)g(sp)r(ectral)g(system.)p
-eop end
-%%Page: 453 463
-TeXDict begin 453 462 bop 3643 52 a FG(453)p 0 351 3780
-12 v 0 483 a FA(Sp)t(ecOrigin)185 b Fd(The)38 b(zero)g(p)s(oin)m(t)g
-(for)g(Sp)s(ecF)-10 b(rame)38 b(axis)g(v)-7 b(alues)185
-b FA(Sp)t(ecOrigin)0 680 y Fc(Description:)44 b Fk(This)31
-b(sp)r(eci\014es)g(the)h(origin)e(from)h(whic)n(h)g(all)f(sp)r(ectral)h
-(v)-5 b(alues)31 b(are)f(measured.)46 b(The)31 b(default)h(v)-5
-b(alue)227 780 y(\(zero\))38 b(results)f(in)h(the)g(Sp)r(ecF)-7
-b(rame)37 b(describing)g(absolute)h(sp)r(ectral)f(v)-5
-b(alues)37 b(in)h(the)g(system)g(giv)n(en)f(b)n(y)g(the)227
-879 y(System)e(attribute)f(\(e.g.)56 b(frequency)-7 b(,)36
-b(v)n(elo)r(cit)n(y)-7 b(,)35 b(etc\).)57 b(If)34 b(a)g(Sp)r(ecF)-7
-b(rame)34 b(is)g(to)g(b)r(e)h(used)f(to)g(describ)r(e)g(o\013set)227
-979 y(from)e(some)g(origin,)h(the)g(Sp)r(ecOrigin)e(attribute)i(should)
-f(b)r(e)h(set)f(to)h(hold)f(the)h(required)e(origin)g(v)-5
-b(alue.)52 b(The)227 1079 y(Sp)r(ecOrigin)24 b(v)-5 b(alue)25
-b(stored)f(inside)h(the)g(Sp)r(ecF)-7 b(rame)25 b(structure)f(is)h(mo)r
-(di\014ed)g(whenev)n(er)f(Sp)r(ecF)-7 b(rame)24 b(attribute)227
-1178 y(v)-5 b(alues)27 b(are)g(c)n(hanged)g(so)g(that)g(it)h(refers)f
-(to)h(the)g(original)e(sp)r(ectral)h(p)r(osition.)227
-1307 y(When)22 b(setting)f(a)g(new)g(v)-5 b(alue)21 b(for)f(this)i
-(attribute,)g(the)g(supplied)f(v)-5 b(alue)21 b(is)g(assumed)g(to)g(b)r
-(e)g(in)g(the)h(system,)g(units)227 1406 y(and)e(standard)f(of)h(rest)f
-(describ)r(ed)h(b)n(y)f(the)i(Sp)r(ecF)-7 b(rame.)34
-b(Lik)n(ewise,)21 b(when)f(getting)f(the)i(v)-5 b(alue)19
-b(of)h(this)g(attribute,)227 1506 y(the)26 b(v)-5 b(alue)26
-b(is)g(returned)f(in)h(the)g(system,)g(units)g(and)g(standard)e(of)i
-(rest)f(describ)r(ed)h(b)n(y)f(the)h(Sp)r(ecF)-7 b(rame.)36
-b(If)26 b(an)n(y)227 1606 y(of)j(these)g(attributes)f(are)g(c)n
-(hanged,)g(then)h(an)n(y)f(previously)g(stored)f(Sp)r(ecOrigin)h(v)-5
-b(alue)29 b(will)g(also)f(b)r(e)h(c)n(hanged)227 1705
-y(so)e(that)h(refers)f(to)g(the)h(new)g(system,)f(units)h(or)f
-(standard)g(of)g(rest.)0 1863 y Fc(T)m(yp)s(e:)227 1963
-y Fk(Floating)g(p)r(oin)n(t.)0 2120 y Fc(Class)k(Applicabilit)m(y:)259
-2265 y(Sp)s(ecF)-8 b(rame)427 2365 y Fk(All)28 b(Sp)r(ecF)-7
-b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)p 0 2572
-V 0 2704 a FA(Sp)t(ecV)-11 b(al)252 b Fd(The)38 b(sp)s(ectral)g(p)s
-(osition)f(at)h(whic)m(h)g(\015ux)h(v)-7 b(alues)39 b(are)1649
-2818 y(measured)3312 2704 y FA(Sp)t(ecV)-11 b(al)0 2997
-y Fc(Description:)44 b Fk(This)32 b(attribute)g(sp)r(eci\014es)g(the)g
-(sp)r(ectral)g(p)r(osition)g(\(frequency)-7 b(,)33 b(w)n(a)n(v)n
-(elength,)e(etc.\),)j(at)d(whic)n(h)h(the)227 3097 y(v)-5
-b(alues)19 b(describ)r(ed)h(b)n(y)f(the)h(FluxF)-7 b(rame)19
-b(are)f(measured.)33 b(It)20 b(is)f(used)h(when)f(determining)h(the)g
-(Mapping)f(b)r(et)n(w)n(een)227 3196 y(b)r(et)n(w)n(een)28
-b(FluxF)-7 b(rames.)227 3325 y(The)20 b(default)h(v)-5
-b(alue)20 b(and)g(sp)r(ectral)f(system)h(used)g(for)f(this)h(attribute)
-h(are)e(b)r(oth)h(sp)r(eci\014ed)g(when)h(the)f(FluxF)-7
-b(rame)227 3425 y(is)28 b(created.)0 3582 y Fc(T)m(yp)s(e:)227
-3682 y Fk(Floating)f(p)r(oin)n(t.)0 3840 y Fc(Class)k(Applicabilit)m
-(y:)259 3984 y(FluxF)-8 b(rame)427 4084 y Fk(All)28 b(FluxF)-7
-b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)p 0 4291
-V 0 4422 a FA(StcsArea)731 4423 y Fd(Return)39 b(the)f(Co)s
-(ordinateArea)d(comp)s(onen)m(t)i(when)1134 4538 y(reading)g(an)i
-(STC-S)f(do)s(cumen)m(t?)3256 4422 y FA(StcsArea)0 4735
-y Fc(Description:)44 b Fk(This)29 b(is)f(a)g(b)r(o)r(olean)f(attribute)
-i(whic)n(h)f(con)n(trols)f(what)h(is)g(returned)g(b)n(y)g(the)g(AST)p
-Ft(_)p Fk(READ)h(function)227 4834 y(when)e(it)g(is)f(used)g(to)h(read)
-e(from)h(an)g(StcsChan.)37 b(If)27 b(StcsArea)e(is)i(set)f(non-zero)f
-(\(the)i(default\),)g(then)g(a)f(Region)227 4934 y(represen)n(ting)g
-(the)i(STC)f(Co)r(ordinateArea)f(will)h(b)r(e)h(returned)f(b)n(y)g(AST)
-p Ft(_)p Fk(READ.)h(If)f(StcsArea)g(is)g(set)g(to)h(zero,)227
-5034 y(then)g(the)g(STC)g(Co)r(ordinateArea)e(will)i(not)f(b)r(e)h
-(returned.)0 5191 y Fc(T)m(yp)s(e:)227 5291 y Fk(In)n(teger)f(\(b)r(o)r
-(olean\).)0 5449 y Fc(Class)k(Applicabilit)m(y:)259 5593
-y(StcsChan)427 5693 y Fk(All)d(StcsChans)g(ha)n(v)n(e)e(this)i
-(attribute.)p eop end
-%%Page: 454 464
-TeXDict begin 454 463 bop 0 52 a FG(454)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fc(Notes:)340 652 y Fj(\017)45 b Fk(Other)30 b(attributes)f(suc)n(h)h
-(as)f(StcsCo)r(ords)g(and)g(StcsProps)g(can)g(b)r(e)h(used)g(to)g(sp)r
-(ecify)g(other)f(Ob)5 b(jects)30 b(to)427 752 y(b)r(e)j(returned)f(b)n
-(y)h(AST)p Ft(_)p Fk(READ.)g(If)g(more)e(than)i(one)f(of)h(these)f
-(attributes)h(is)f(set)h(non-zero,)f(then)h(the)427 851
-y(actual)25 b(Ob)5 b(ject)25 b(returned)g(b)n(y)g(AST)p
-Ft(_)p Fk(READ)h(will)f(b)r(e)h(a)f(KeyMap,)g(con)n(taining)f(the)i
-(requested)f(Ob)5 b(jects.)427 951 y(In)27 b(this)g(case,)f(the)h
-(Region)f(represen)n(ting)f(the)j(STC)e(Co)r(ordinateArea)f(will)i(b)r
-(e)g(stored)f(in)h(the)g(returned)427 1050 y(KeyMap)j(using)h(the)h(k)n
-(ey)e Ft(")p Fk(AREA)p Ft(")p Fk(.)46 b(If)32 b(StcsArea)e(is)h(the)h
-(only)e(attribute)h(to)g(b)r(e)h(set)f(non-zero,)f(then)427
-1150 y(the)e(Ob)5 b(ject)28 b(returned)f(b)n(y)g(AST)p
-Ft(_)p Fk(READ)h(will)g(b)r(e)g(the)g(Co)r(ordinateArea)e(Region)g
-(itself.)340 1292 y Fj(\017)45 b Fk(The)c(class)e(of)h(Region)f(used)i
-(to)f(represen)n(t)f(the)h(Co)r(ordinateArea)f(for)g(eac)n(h)h(STC-S)g
-(sub-phrase)f(is)427 1392 y(determined)34 b(b)n(y)g(the)g(\014rst)f(w)n
-(ord)g(in)h(the)g(sub-phrase)e(\(the)j Ft(")p Fk(sub-phrase)d(iden)n
-(ti\014er)p Ft(")p Fk(\).)55 b(The)33 b(individ-)427
-1491 y(ual)40 b(sub-phrase)g(Regions)f(are)g(com)n(bined)i(in)n(to)f(a)
-g(single)g(Prism,)i(whic)n(h)f(is)f(then)h(simpli\014ed)g(using)427
-1591 y(AST)p Ft(_)p Fk(SIMPLIFY)28 b(to)f(form)h(the)g(returned)f
-(region.)340 1733 y Fj(\017)45 b Fk(Sub-phrases)20 b(that)h(represen)n
-(t)f(a)h(single)f(v)-5 b(alue)21 b(\()h(that)f(is,)h(ha)n(v)n(e)e(iden)
-n(ti\014ers)h Ft(")p Fk(Time)p Ft(")p Fk(,)h Ft(")p Fk(P)n(osition)p
-Ft(")p Fk(,)e Ft(")p Fk(Sp)r(ec-)427 1832 y(tral)p Ft(")27
-b Fk(or)g Ft(")p Fk(Redshift)p Ft(")g Fk(\))h(are)f(considered)f(to)i
-(b)r(e)g(b)r(e)g(part)f(of)g(the)h(STC)g(Co)r(ordinateArea)e(comp)r
-(onen)n(t.)340 1974 y Fj(\017)45 b Fk(The)21 b(TimeF)-7
-b(rame)20 b(used)h(to)g(represen)n(t)e(a)i(time)g(STC-S)g(sub-phrase)e
-(will)i(ha)n(v)n(e)f(its)h(TimeOrigin)e(attribute)427
-2074 y(set)25 b(to)g(the)g(sub-phrase)e(start)h(time.)37
-b(If)25 b(no)g(start)f(time)h(is)g(sp)r(eci\014ed)g(b)n(y)f(the)h
-(sub-phrase,)f(then)i(the)f(stop)427 2174 y(time)i(will)f(b)r(e)h(used)
-f(instead.)36 b(If)27 b(no)f(stop)g(time)g(is)g(sp)r(eci\014ed)h(b)n(y)
-f(the)g(sub-phrase,)f(then)i(the)f(single)g(time)427
-2273 y(v)-5 b(alue)27 b(sp)r(eci\014ed)g(in)g(the)g(sub-phrase)f(will)h
-(b)r(e)g(used)g(instead.)36 b(Subsequen)n(tly)27 b(clearing)e(the)j
-(TimeOrigin)427 2373 y(attribute)g(\(or)f(setting)h(its)f(v)-5
-b(alue)28 b(to)f(zero\))g(will)h(cause)f(the)h(TimeF)-7
-b(rame)27 b(to)g(reprsen)n(t)g(absolute)g(times.)340
-2515 y Fj(\017)45 b Fk(The)c(Ep)r(o)r(c)n(h)f(attribute)h(for)f(the)h
-(returned)f(Region)g(is)g(set)h(in)g(the)f(same)g(w)n(a)n(y)g(as)g(the)
-h(TimeOrigin)427 2614 y(attribute)28 b(\(see)g(ab)r(o)n(v)n(e\).)p
-0 2832 3780 12 v 0 2964 a FA(StcsCo)t(ords)172 b Fd(Return)39
-b(the)f(Co)s(ordinates)e(comp)s(onen)m(t)i(when)1134
-3078 y(reading)f(an)i(STC-S)f(do)s(cumen)m(t?)3122 2964
-y FA(StcsCo)t(ords)0 3285 y Fc(Description:)44 b Fk(This)29
-b(is)f(a)g(b)r(o)r(olean)f(attribute)i(whic)n(h)f(con)n(trols)f(what)h
-(is)g(returned)g(b)n(y)g(the)g(AST)p Ft(_)p Fk(READ)h(function)227
-3385 y(when)i(it)g(is)g(used)f(to)h(read)e(from)i(an)f(StcsChan.)46
-b(If)31 b(StcsCo)r(ords)e(is)i(set)f(non-zero,)g(then)h(a)f(P)n(oin)n
-(tList)g(repre-)227 3484 y(sen)n(ting)j(the)h(STC)f(Co)r(ordinates)f
-(will)i(b)r(e)f(returned)g(b)n(y)g(AST)p Ft(_)p Fk(READ.)h(If)g(StcsCo)
-r(ords)e(is)h(set)h(to)f(zero)f(\(the)227 3584 y(default\),)d(then)f
-(the)g(STC)f(Co)r(ordinates)g(will)h(not)f(b)r(e)h(returned.)0
-3752 y Fc(T)m(yp)s(e:)227 3851 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-4019 y Fc(Class)k(Applicabilit)m(y:)259 4174 y(StcsChan)427
-4273 y Fk(All)d(StcsChans)g(ha)n(v)n(e)e(this)i(attribute.)0
-4453 y Fc(Notes:)340 4754 y Fj(\017)45 b Fk(Other)27
-b(attributes)h(suc)n(h)f(as)h(StcsArea)f(and)g(StcsProps)f(can)i(b)r(e)
-g(used)g(to)f(sp)r(ecify)h(other)f(Ob)5 b(jects)28 b(to)f(b)r(e)427
-4854 y(returned)c(b)n(y)h(AST)p Ft(_)p Fk(READ.)g(If)f(more)g(than)h
-(one)f(of)g(these)h(attributes)f(is)h(set)f(non-zero,)g(then)h(the)g
-(actual)427 4953 y(Ob)5 b(ject)23 b(returned)g(b)n(y)g(AST)p
-Ft(_)p Fk(READ)h(will)f(b)r(e)h(a)f(KeyMap,)g(con)n(taining)f(the)i
-(requested)f(Ob)5 b(jects.)35 b(In)23 b(this)427 5053
-y(case,)i(the)h(P)n(oin)n(tList)f(represen)n(ting)e(the)j(STC)g(Co)r
-(ordinates)e(will)i(b)r(e)f(stored)g(in)h(the)f(returned)h(KeyMap)427
-5153 y(using)31 b(the)g(k)n(ey)e Ft(")p Fk(COORDS)p Ft(")p
-Fk(.)45 b(If)31 b(StcsCo)r(ords)f(is)g(the)h(only)f(attribute)h(to)g(b)
-r(e)g(set)f(non-zero,)g(then)h(the)427 5252 y(Ob)5 b(ject)28
-b(returned)f(b)n(y)g(AST)p Ft(_)p Fk(READ)h(will)g(b)r(e)g(the)g(Co)r
-(ordinates)e(P)n(oin)n(tList)h(itself.)340 5394 y Fj(\017)45
-b Fk(The)31 b(Co)r(ordinates)f(comp)r(onen)n(t)h(is)g(sp)r(eci\014ed)h
-(b)n(y)e(the)i(additional)f(axis)f(v)-5 b(alues)31 b(em)n(b)r(edded)g
-(within)h(the)427 5494 y(b)r(o)r(dy)24 b(of)f(eac)n(h)g(STC-S)g
-(sub-phrase)f(that)i(represen)n(ts)e(an)h(extended)h(area.)34
-b(Sub-phrases)22 b(that)i(represen)n(t)427 5593 y(a)31
-b(single)g(v)-5 b(alue)31 b(\()h(that)g(is,)g(ha)n(v)n(e)e(iden)n
-(ti\014ers)h Ft(")p Fk(Time)p Ft(")p Fk(,)h Ft(")p Fk(P)n(osition)p
-Ft(")p Fk(,)e Ft(")p Fk(Sp)r(ectral)p Ft(")g Fk(or)h
-Ft(")p Fk(Redshift)p Ft(")g Fk(\))h(are)427 5693 y(not)c(considered)e
-(to)i(b)r(e)g(b)r(e)g(part)f(of)h(the)g(STC)f(Co)r(ordinates)g(comp)r
-(onen)n(t.)p eop end
-%%Page: 455 465
-TeXDict begin 455 464 bop 3643 52 a FG(455)340 351 y
-Fj(\017)45 b Fk(If)36 b(the)f(STC-S)g(do)r(cumen)n(ts)g(do)r(es)f(not)h
-(con)n(tain)f(a)h(Co)r(ordinates)e(comp)r(onen)n(t,)k(then)e(a)g(NULL)g
-(ob)5 b(ject)427 451 y(p)r(oin)n(ter)38 b(\(AST)p Ft(__)p
-Fk(NULL\))i(will)e(b)r(e)h(returned)g(b)n(y)f(AST)p Ft(_)p
-Fk(READ)h(if)g(the)g(Co)r(ordinates)e(comp)r(onen)n(t)i(is)427
-551 y(the)31 b(only)e(ob)5 b(ject)30 b(b)r(eing)g(returned.)44
-b(If)31 b(other)e(ob)5 b(jects)30 b(are)f(also)g(b)r(eing)h(returned)g
-(\(see)g(attributes)g(Stc-)427 650 y(sProps)c(and)h(StcsArea\),)g(then)
-g(the)h(returned)e(KeyMap)h(will)g(con)n(tain)f(a)h Ft(")p
-Fk(COORDS)p Ft(")f Fk(k)n(ey)h(only)g(if)g(the)427 750
-y(Co)r(ordinates)g(comp)r(onen)n(t)g(is)g(read)g(succesfully)-7
-b(.)340 886 y Fj(\017)45 b Fk(The)21 b(TimeF)-7 b(rame)20
-b(used)h(to)g(represen)n(t)e(a)i(time)g(STC-S)g(sub-phrase)e(will)i(ha)
-n(v)n(e)f(its)h(TimeOrigin)e(attribute)427 985 y(set)25
-b(to)g(the)g(sub-phrase)e(start)h(time.)37 b(If)25 b(no)g(start)f(time)
-h(is)g(sp)r(eci\014ed)g(b)n(y)f(the)h(sub-phrase,)f(then)i(the)f(stop)
-427 1085 y(time)i(will)f(b)r(e)h(used)f(instead.)36 b(If)27
-b(no)f(stop)g(time)g(is)g(sp)r(eci\014ed)h(b)n(y)f(the)g(sub-phrase,)f
-(then)i(the)f(single)g(time)427 1184 y(v)-5 b(alue)27
-b(sp)r(eci\014ed)g(in)g(the)g(sub-phrase)f(will)h(b)r(e)g(used)g
-(instead.)36 b(Subsequen)n(tly)27 b(clearing)e(the)j(TimeOrigin)427
-1284 y(attribute)g(\(or)f(setting)h(its)f(v)-5 b(alue)28
-b(to)f(zero\))g(will)h(cause)f(the)h(TimeF)-7 b(rame)27
-b(to)g(reprsen)n(t)g(absolute)g(times.)340 1420 y Fj(\017)45
-b Fk(The)c(Ep)r(o)r(c)n(h)f(attribute)h(for)f(the)h(returned)f(Region)g
-(is)g(set)h(in)g(the)f(same)g(w)n(a)n(y)g(as)g(the)h(TimeOrigin)427
-1519 y(attribute)28 b(\(see)g(ab)r(o)n(v)n(e\).)p 0 1725
-3780 12 v 0 1856 a FA(StcsInden)l(t)216 b Fd(Con)m(trols)37
-b(inden)m(tation)f(and)i(line)g(splitting)f(of)1595 1956
-y(output)h(text)3155 1856 y FA(StcsInden)l(t)0 2151 y
-Fc(Description:)44 b Fk(This)c(attribute)f(con)n(trols)f(ho)n(w)h(the)g
-(STC-S)h(text)f(is)h(written)f(out)g(to)h(the)f(sink)h(function)f(when)
-227 2250 y(writing)30 b(an)g(AST)g(ob)5 b(ject)30 b(to)g(an)g
-(StcsChan.)45 b(If)30 b(it)h(is)f(zero)f(\(the)i(default\))g(the)f(en)n
-(tire)g(STC-S)g(description)g(is)227 2350 y(written)d(out)g(b)n(y)f(a)g
-(single)h(in)n(v)n(o)r(cation)e(of)i(the)g(sink)f(function.)37
-b(The)27 b(text)g(supplied)g(to)g(the)g(sink)f(function)h(will)227
-2449 y(not)i(con)n(tain)f(an)n(y)g(linefeed)h(c)n(haracters,)e(and)i
-(eac)n(h)f(pair)g(of)g(adjacen)n(t)g(w)n(ords)g(will)h(b)r(e)g
-(separated)e(b)n(y)i(a)f(single)227 2549 y(space.)36
-b(The)28 b(text)g(ma)n(y)f(th)n(us)h(b)r(e)g(arbitrarily)d(large)h(and)
-i(the)g(StcsLength)f(attribute)h(is)g(ignored.)227 2677
-y(If)h(StcsInden)n(t)g(is)g(non-zero,)e(then)i(the)g(text)g(is)f
-(written)h(out)f(via)g(m)n(ultiple)h(calls)f(to)h(the)g(sink)f
-(function,)h(eac)n(h)227 2776 y(call)i(corresp)r(onding)f(to)h(a)g
-(single)g Ft(")p Fk(line)p Ft(")g Fk(of)h(text)g(\(although)f(no)g
-(line)h(feed)g(c)n(haracters)d(will)j(b)r(e)g(inserted)f(b)n(y)227
-2876 y(AST\).)e(The)e(complete)h(STC-S)f(description)g(is)h(brok)n(en)e
-(in)n(to)i(lines)f(so)g(that:)340 3146 y Fj(\017)45 b
-Fk(the)28 b(line)g(length)g(sp)r(eci\014ed)g(b)n(y)f(attribute)h
-(StcsLength)f(is)h(not)f(exceeded)340 3281 y Fj(\017)45
-b Fk(eac)n(h)27 b(sub-phrase)f(\(time,)j(space,)e(etc.\))37
-b(starts)27 b(on)g(a)g(new)h(line)340 3417 y Fj(\017)45
-b Fk(eac)n(h)27 b(argumen)n(t)g(in)g(a)h(comp)r(ound)f(spatial)g
-(region)f(starts)h(on)h(a)f(new)g(line)227 3585 y(If)32
-b(this)g(causes)e(a)h(sub-phrase)g(to)g(extend)h(to)f(t)n(w)n(o)g(or)f
-(more)h(lines,)h(then)g(the)g(second)f(and)g(subsequen)n(t)h(lines)227
-3684 y(will)e(b)r(e)f(inden)n(ted)h(b)n(y)f(three)g(spaces)f(compared)h
-(to)g(the)g(\014rst)g(line.)42 b(In)30 b(addition,)g(lines)f(within)h
-(a)f(comp)r(ound)227 3784 y(spatial)34 b(region)f(will)i(ha)n(v)n(e)f
-(extra)f(inden)n(tation)i(to)f(highligh)n(t)g(the)h(nesting)f(pro)r
-(duced)h(b)n(y)f(the)h(paren)n(theses.)227 3884 y(Eac)n(h)27
-b(new)g(lev)n(el)g(of)h(nesting)f(will)h(b)r(e)g(inden)n(ted)g(b)n(y)g
-(a)f(further)g(three)h(spaces.)227 4011 y(Note,)40 b(the)e(default)g(v)
--5 b(alue)37 b(of)h(zero)e(is)h(unlik)n(ely)g(to)h(b)r(e)g(appropriate)
-d(when)j(an)f(StcsChan)g(is)h(used)f(within)227 4111
-y(F)-7 b(ortran)22 b(co)r(de.)36 b(In)23 b(this)h(case,)f(StcsInden)n
-(t)g(should)g(usually)g(b)r(e)h(set)f(non-zero,)g(and)g(the)g
-(StcsLength)g(attribute)227 4210 y(set)j(to)g(the)g(size)g(of)g(the)g
-(CHARA)n(CTER)g(v)-5 b(ariable)25 b(used)h(to)g(receiv)n(e)f(the)h
-(text)g(returned)g(b)n(y)f(AST)p Ft(_)p Fk(GETLINE)227
-4310 y(within)k(the)g(sink)f(function.)40 b(This)29 b(a)n(v)n(oids)e
-(the)h(p)r(ossibilit)n(y)g(of)h(long)f(lines)g(b)r(eing)h(truncated)f
-(in)n(visibly)g(within)227 4410 y(AST)p Ft(_)p Fk(GETLINE.)0
-4565 y Fc(T)m(yp)s(e:)227 4665 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-4820 y Fc(Class)k(Applicabilit)m(y:)259 4962 y(StcsChan)427
-5062 y Fk(All)d(StcsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 5267 V 0 5399 a FA(StcsLength)541 b Fd(Con)m(trols)36
-b(output)i(line)g(length)540 b FA(StcsLength)0 5593 y
-Fc(Description:)44 b Fk(This)34 b(attribute)h(sp)r(eci\014es)e(the)i
-(maxim)n(um)f(length)g(to)g(use)g(when)g(writing)f(out)i(text)f
-(through)f(the)227 5693 y(sink)28 b(function)h(supplied)f(when)h(the)f
-(StcsChan)g(w)n(as)f(created.)38 b(It)28 b(is)g(ignored)f(if)i(the)f
-(StcsInden)n(t)g(attribute)h(is)p eop end
-%%Page: 456 466
-TeXDict begin 456 465 bop 0 52 a FG(456)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fk(zero)25 b(\(in)i(whic)n(h)f(case)g(the)g(text)h(supplied)f(to)g
-(the)h(sink)f(function)h(can)f(b)r(e)g(of)h(an)n(y)e(length\).)37
-b(The)26 b(default)h(v)-5 b(alue)227 451 y(is)28 b(70.)227
-580 y(The)36 b(n)n(um)n(b)r(er)f(of)g(c)n(haracters)e(in)i(eac)n(h)g
-(string)f(written)i(out)f(through)g(the)g(sink)g(function)h(will)g(not)
-f(usually)227 679 y(b)r(e)c(greater)e(than)i(the)h(v)-5
-b(alue)30 b(of)h(this)g(attribute)g(\(but)h(ma)n(y)e(b)r(e)h(less\).)46
-b(Ho)n(w)n(ev)n(er,)30 b(if)h(an)n(y)f(single)g(w)n(ord)g(in)h(the)227
-779 y(STC-S)d(description)f(exceeds)g(the)h(sp)r(eci\014ed)g(length,)f
-(then)h(the)g(w)n(ord)f(will)h(b)r(e)g(written)g(out)f(as)g(a)g(single)
-g(line.)227 908 y(Note,)21 b(the)f(default)f(v)-5 b(alue)19
-b(of)h(zero)e(is)h(unlik)n(ely)g(to)g(b)r(e)g(appropriate)f(when)h(an)g
-(StcsChan)g(is)g(used)g(within)h(F)-7 b(ortran)227 1007
-y(co)r(de.)34 b(In)19 b(this)g(case,)h(StcsLength)f(should)f(usually)h
-(b)r(e)g(set)g(to)f(the)i(size)e(of)h(the)g(CHARA)n(CTER)g(v)-5
-b(ariable)18 b(used)h(to)227 1107 y(receiv)n(e)25 b(the)h(text)g
-(returned)f(b)n(y)h(AST)p Ft(_)p Fk(GETLINE)e(within)j(the)f(sink)f
-(function.)37 b(In)26 b(addition,)g(the)g(StcsInden)n(t)227
-1207 y(attribute)g(should)g(b)r(e)g(set)g(non-zero.)35
-b(This)26 b(a)n(v)n(oids)e(the)i(p)r(ossibilit)n(y)g(of)g(long)f(lines)
-h(b)r(eing)g(truncated)g(in)n(visibly)227 1306 y(within)j(AST)p
-Ft(_)p Fk(GETLINE.)0 1464 y Fc(T)m(yp)s(e:)227 1564 y
-Fk(In)n(teger.)0 1722 y Fc(Class)i(Applicabilit)m(y:)259
-1867 y(StcsChan)427 1967 y Fk(All)d(StcsChans)g(ha)n(v)n(e)e(this)i
-(attribute.)p 0 2175 3780 12 v 0 2306 a FA(StcsProps)912
-2307 y Fd(Return)38 b(all)f(prop)s(erties)h(when)g(reading)f(an)1423
-2421 y(STC-S)h(do)s(cumen)m(t?)3198 2306 y FA(StcsProps)0
-2595 y Fc(Description:)44 b Fk(This)29 b(is)f(a)g(b)r(o)r(olean)f
-(attribute)i(whic)n(h)f(con)n(trols)f(what)h(is)g(returned)g(b)n(y)g
-(the)g(AST)p Ft(_)p Fk(READ)h(function)227 2695 y(when)d(it)g(is)g
-(used)f(to)h(read)e(from)i(an)f(StcsChan.)36 b(If)26
-b(StcsProps)e(is)i(set)f(non-zero,)g(then)h(a)f(KeyMap)g(con)n(taining)
-227 2795 y(all)h(the)g(prop)r(erties)g(read)f(from)g(the)i(STC-S)f(do)r
-(cumen)n(t)g(will)g(b)r(e)h(returned)e(b)n(y)h(AST)p
-Ft(_)p Fk(READ.)h(If)f(StcsProps)f(is)227 2894 y(set)j(to)f(zero)g
-(\(the)h(default\),)h(then)f(the)g(prop)r(erties)e(will)i(not)g(b)r(e)g
-(returned.)0 3052 y Fc(T)m(yp)s(e:)227 3152 y Fk(In)n(teger)f(\(b)r(o)r
-(olean\).)0 3310 y Fc(Class)k(Applicabilit)m(y:)259 3455
-y(StcsChan)427 3555 y Fk(All)d(StcsChans)g(ha)n(v)n(e)e(this)i
-(attribute.)0 3725 y Fc(Notes:)340 4016 y Fj(\017)45
-b Fk(Other)32 b(attributes)h(suc)n(h)f(as)f(StcsCo)r(ords)h(and)g
-(StcsArea)g(can)g(b)r(e)g(used)h(to)f(sp)r(ecify)h(other)f(Ob)5
-b(jects)32 b(to)427 4116 y(b)r(e)h(returned)f(b)n(y)h(AST)p
-Ft(_)p Fk(READ.)g(If)g(more)e(than)i(one)f(of)h(these)f(attributes)h
-(is)f(set)h(non-zero,)f(then)h(the)427 4216 y(actual)27
-b(Ob)5 b(ject)27 b(returned)g(b)n(y)g(AST)p Ft(_)p Fk(READ)h(will)f(b)r
-(e)h(a)f(KeyMap)f(con)n(taining)h(the)g(requested)g(Ob)5
-b(jects.)427 4315 y(In)35 b(this)f(case,)h(the)g(prop)r(erties)e
-(KeyMap)h(will)g(b)r(e)h(stored)e(in)i(the)g(returned)e(KeyMap)h(using)
-g(the)g(k)n(ey)427 4415 y Ft(")p Fk(PR)n(OPS)p Ft(")p
-Fk(.)g(If)25 b(StcsProps)e(is)i(the)g(only)f(attribute)h(to)g(b)r(e)g
-(set)g(non-zero,)f(then)h(the)g(Ob)5 b(ject)25 b(returned)f(b)n(y)427
-4515 y(AST)p Ft(_)p Fk(READ)k(will)g(b)r(e)g(the)g(prop)r(erties)f
-(KeyMap)f(itself.)340 4652 y Fj(\017)45 b Fk(The)24 b(KeyMap)e(con)n
-(taining)h(the)h(prop)r(erties)e(will)i(ha)n(v)n(e)e(en)n(tries)h(for)g
-(one)g(or)g(more)g(of)g(the)h(follo)n(wing)e(k)n(eys:)427
-4751 y Ft(")p Fk(TIME)p Ft(_)p Fk(PR)n(OPS)p Ft(")p Fk(,)k
-Ft(")p Fk(SP)-7 b(A)n(CE)p Ft(_)p Fk(PR)n(OPS)p Ft(")p
-Fk(,)25 b Ft(")p Fk(SPECTRAL)p Ft(_)p Fk(PR)n(OPS)p Ft(")g
-Fk(and)j Ft(")p Fk(REDSHIFT)p Ft(_)p Fk(PR)n(OPS)p Ft(")p
-Fk(.)427 4851 y(Eac)n(h)d(of)h(these)g(en)n(tries)g(will)g(b)r(e)h
-(another)e(KeyMap)g(con)n(taining)g(the)i(prop)r(erties)e(of)h(the)h
-(corresp)r(onding)427 4951 y(STC-S)h(sub-phrase.)p 0
-5159 V 0 5290 a FA(StdOfRest)865 b Fd(Standard)37 b(of)h(rest)864
-b FA(StdOfRest)0 5465 y Fc(Description:)44 b Fk(This)19
-b(attribute)f(iden)n(ti\014es)h(the)f(standard)g(of)g(rest)g(to)g(whic)
-n(h)h(the)f(sp)r(ectral)g(axis)g(v)-5 b(alues)18 b(of)g(a)g(Sp)r(ecF)-7
-b(rame)227 5564 y(refer,)27 b(and)h(ma)n(y)f(tak)n(e)f(an)n(y)h(of)h
-(the)g(v)-5 b(alues)27 b(listed)h(in)g(the)g Ft(")p Fk(Standards)e(of)i
-(Rest)p Ft(")f Fk(section)g(\(b)r(elo)n(w\).)227 5693
-y(The)h(default)g(StdOfRest)g(v)-5 b(alue)28 b(is)f Ft(")p
-Fk(Helio)p Ft(")p Fk(.)p eop end
-%%Page: 457 467
-TeXDict begin 457 466 bop 3643 52 a FG(457)0 351 y Fc(T)m(yp)s(e:)227
-451 y Fk(String.)0 641 y Fc(Class)31 b(Applicabilit)m(y:)259
-818 y(Sp)s(ecF)-8 b(rame)427 918 y Fk(All)28 b(Sp)r(ecF)-7
-b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)-2 1120 y
-Fc(Standards)33 b(of)f(Rest)n(:)227 1266 y Fk(The)c(Sp)r(ecF)-7
-b(rame)27 b(class)g(supp)r(orts)g(the)h(follo)n(wing)f(StdOfRest)h(v)-5
-b(alues)27 b(\(all)h(are)e(case-insensitiv)n(e\):)340
-1588 y Fj(\017)45 b Ft(")p Fk(T)-7 b(op)r(o)r(cen)n(tric)p
-Ft(")p Fk(,)43 b Ft(")p Fk(T)-7 b(op)r(o)r(cen)n(t)p
-Ft(")40 b Fk(or)g Ft(")p Fk(T)-7 b(op)r(o)p Ft(")p Fk(:)62
-b(The)41 b(observ)n(ers)d(rest-frame)i(\(assumed)h(to)f(b)r(e)i(on)e
-(the)427 1688 y(surface)30 b(of)g(the)g(earth\).)45 b(Sp)r(ectra)30
-b(recorded)e(in)j(this)f(standard)f(of)h(rest)g(su\013er)g(a)g(Doppler)
-g(shift)h(whic)n(h)427 1788 y(v)-5 b(aries)26 b(o)n(v)n(er)g(the)h
-(course)f(of)h(a)g(da)n(y)f(b)r(ecause)h(of)g(the)g(rotation)f(of)h
-(the)h(observ)n(er)c(around)i(the)i(axis)e(of)h(the)427
-1887 y(earth.)52 b(This)32 b(standard)g(of)g(rest)g(m)n(ust)h(b)r(e)g
-(quali\014ed)g(using)f(the)h(ObsLat,)g(ObsLon,)g(ObsAlt,)h(Ep)r(o)r(c)n
-(h,)427 1987 y(RefRA)29 b(and)e(RefDec)h(attributes.)340
-2140 y Fj(\017)45 b Ft(")p Fk(Geo)r(cen)n(tric)p Ft(")p
-Fk(,)25 b Ft(")p Fk(Geo)r(cen)n(tr)p Ft(")g Fk(or)g Ft(")p
-Fk(Geo)p Ft(")p Fk(:)34 b(The)26 b(rest-frame)f(of)h(the)g(earth)f(cen)
-n(tre.)36 b(Sp)r(ectra)26 b(recorded)e(in)427 2240 y(this)30
-b(standard)e(of)h(rest)f(su\013er)h(a)g(Doppler)g(shift)g(whic)n(h)g(v)
--5 b(aries)28 b(o)n(v)n(er)g(the)h(course)f(of)h(a)f(y)n(ear)g(b)r
-(ecause)h(of)427 2339 y(the)h(rotation)f(of)g(the)h(earth)f(around)f
-(the)i(Sun.)44 b(This)29 b(standard)g(of)g(rest)g(m)n(ust)h(b)r(e)g
-(quali\014ed)f(using)g(the)427 2439 y(Ep)r(o)r(c)n(h,)e(RefRA)i(and)e
-(RefDec)i(attributes.)340 2592 y Fj(\017)45 b Ft(")p
-Fk(Barycen)n(tric)p Ft(")p Fk(,)19 b Ft(")p Fk(Barycen)n(t)p
-Ft(")f Fk(or)g Ft(")p Fk(Bary)p Ft(")p Fk(:)31 b(The)20
-b(rest-frame)f(of)g(the)i(solar-system)c(barycen)n(tre.)33
-b(Sp)r(ectra)427 2692 y(recorded)24 b(in)i(this)g(standard)f(of)g(rest)
-h(su\013er)f(a)g(Doppler)h(shift)g(whic)n(h)f(dep)r(ends)i(b)r(oth)f
-(on)f(the)h(v)n(elo)r(cit)n(y)f(of)427 2791 y(the)e(Sun)h(through)e
-(the)h(Lo)r(cal)f(Standard)g(of)h(Rest,)h(and)e(on)h(the)g(mo)n(v)n
-(emen)n(t)f(of)g(the)i(planets)e(through)g(the)427 2891
-y(solar)30 b(system.)48 b(This)32 b(standard)e(of)i(rest)f(m)n(ust)g(b)
-r(e)h(quali\014ed)f(using)g(the)h(Ep)r(o)r(c)n(h,)g(RefRA)h(and)e
-(RefDec)427 2991 y(attributes.)340 3144 y Fj(\017)45
-b Ft(")p Fk(Helio)r(cen)n(tric)p Ft(")p Fk(,)31 b Ft(")p
-Fk(Helio)r(cen)p Ft(")f Fk(or)g Ft(")p Fk(Helio)p Ft(")p
-Fk(:)43 b(The)31 b(rest-frame)e(of)i(the)h(Sun.)47 b(Sp)r(ectra)31
-b(recorded)e(in)i(this)427 3243 y(standard)c(of)g(rest)g(su\013er)g(a)f
-(Doppler)h(shift)h(whic)n(h)g(dep)r(ends)f(on)g(the)h(v)n(elo)r(cit)n
-(y)e(of)h(the)h(Sun)g(through)e(the)427 3343 y(Lo)r(cal)d(Standard)h
-(of)g(Rest.)35 b(This)24 b(standard)f(of)h(rest)g(m)n(ust)g(b)r(e)g
-(quali\014ed)g(using)f(the)h(RefRA)h(and)f(RefDec)427
-3443 y(attributes.)340 3596 y Fj(\017)45 b Ft(")p Fk(LSRK)p
-Ft(")p Fk(,)21 b Ft(")p Fk(LSR)p Ft(")p Fk(:)33 b(The)20
-b(rest-frame)f(of)h(the)h(kinematical)e(Lo)r(cal)h(Standard)f(of)i
-(Rest.)34 b(Sp)r(ectra)20 b(recorded)427 3696 y(in)j(this)f(standard)f
-(of)i(rest)e(su\013er)h(a)g(Doppler)g(shift)h(whic)n(h)f(dep)r(ends)h
-(on)e(the)i(v)n(elo)r(cit)n(y)e(of)i(the)f(kinematical)427
-3795 y(Lo)r(cal)i(Standard)g(of)h(Rest)g(through)f(the)h(galaxy)-7
-b(.)34 b(This)25 b(standard)f(of)g(rest)g(m)n(ust)h(b)r(e)g
-(quali\014ed)g(using)f(the)427 3895 y(RefRA)29 b(and)e(RefDec)h
-(attributes.)340 4048 y Fj(\017)45 b Ft(")p Fk(LSRD)p
-Ft(")p Fk(:)38 b(The)28 b(rest-frame)f(of)h(the)g(dynamical)g(Lo)r(cal)
-f(Standard)g(of)h(Rest.)39 b(Sp)r(ectra)27 b(recorded)g(in)h(this)427
-4148 y(standard)e(of)i(rest)e(su\013er)h(a)g(Doppler)g(shift)h(whic)n
-(h)f(dep)r(ends)g(on)g(the)h(v)n(elo)r(cit)n(y)e(of)h(the)h(dynamical)e
-(Lo)r(cal)427 4247 y(Standard)21 b(of)g(Rest)g(through)g(the)h(galaxy)
--7 b(.)33 b(This)21 b(standard)f(of)h(rest)g(m)n(ust)h(b)r(e)f
-(quali\014ed)g(using)g(the)h(RefRA)427 4347 y(and)28
-b(RefDec)g(attributes.)340 4500 y Fj(\017)45 b Ft(")p
-Fk(Galactic)p Ft(")p Fk(,)35 b Ft(")p Fk(Galacto)r(c)p
-Ft(")e Fk(or)h Ft(")p Fk(Gal)p Ft(")p Fk(:)50 b(The)35
-b(rest-frame)e(of)i(the)g(galactic)e(cen)n(tre.)58 b(Sp)r(ectra)34
-b(recorded)427 4600 y(in)e(this)f(standard)f(of)h(rest)f(su\013er)h(a)g
-(Doppler)f(shift)i(whic)n(h)f(dep)r(ends)g(on)g(the)g(v)n(elo)r(cit)n
-(y)f(of)h(the)h(galactic)427 4699 y(cen)n(tre)25 b(through)g(the)h(lo)r
-(cal)f(group.)35 b(This)25 b(standard)g(of)g(rest)g(m)n(ust)h(b)r(e)g
-(quali\014ed)f(using)h(the)f(RefRA)i(and)427 4799 y(RefDec)i
-(attributes.)340 4952 y Fj(\017)45 b Ft(")p Fk(Lo)r(cal)p
-Ft(_)p Fk(group)p Ft(")p Fk(,)33 b Ft(")p Fk(Lo)r(calgrp)p
-Ft(")e Fk(or)i Ft(")p Fk(LG)p Ft(")p Fk(:)49 b(The)34
-b(rest-frame)f(of)h(the)g(lo)r(cal)g(group.)55 b(This)34
-b(standard)f(of)427 5052 y(rest)27 b(m)n(ust)h(b)r(e)g(quali\014ed)g
-(using)f(the)h(RefRA)g(and)g(RefDec)g(attributes.)340
-5205 y Fj(\017)45 b Ft(")p Fk(Source)p Ft(")p Fk(,)35
-b(or)e Ft(")p Fk(src)p Ft(")p Fk(:)49 b(The)34 b(rest-frame)f(of)h(the)
-h(source.)55 b(This)35 b(standard)e(of)h(rest)g(m)n(ust)g(b)r(e)h
-(quali\014ed)427 5304 y(using)28 b(the)f(RefRA,)i(RefDec)f(and)g
-(SourceV)-7 b(el)27 b(attributes.)227 5507 y(Where)i(more)f(than)h(one)
-f(alternativ)n(e)g(System)h(v)-5 b(alue)29 b(is)f(sho)n(wn)g(ab)r(o)n
-(v)n(e,)g(the)h(\014rst)g(of)g(these)g(will)g(b)r(e)g(returned)227
-5607 y(when)f(an)f(enquiry)g(is)h(made.)p eop end
-%%Page: 458 468
-TeXDict begin 458 467 bop 0 52 a FG(458)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a FA(Strict)322 b Fd(Rep)s(ort)38 b(an)h(error)e(if)h
-(an)m(y)g(unexp)s(eted)h(data)f(items)f(are)1717 598
-y(found?)3448 483 y FA(Strict)0 792 y Fc(Description:)44
-b Fk(This)24 b(is)f(a)g(b)r(o)r(olean)f(attribute)i(whic)n(h)f
-(indicates)g(whether)g(a)g(w)n(arning)f(rather)g(than)i(an)f(error)e
-(should)227 891 y(b)r(e)29 b(issed)g(for)f(insigni\014can)n(t)g(con)n
-(v)n(ersion)e(problems.)40 b(If)29 b(it)g(is)f(set)h(non-zero,)e(then)j
-(fatal)e(errors)f(are)g(issued)i(in-)227 991 y(stead)c(of)h(w)n
-(arnings,)e(resulting)h(in)g(the)h(inherited)g(ST)-7
-b(A)g(TUS)26 b(v)-5 b(ariable)25 b(b)r(eing)g(set)h(to)f(an)g(error)e
-(v)-5 b(alue.)37 b(If)25 b(Strict)227 1091 y(is)d(zero)f(\(the)i
-(default\),)h(then)f(execution)f(con)n(tin)n(ues)f(after)h(minor)f(con)
-n(v)n(ersion)f(problems,)j(and)f(a)f(w)n(arning)g(mes-)227
-1190 y(sage)d(is)g(added)h(to)g(the)g(Channel)f(structure.)34
-b(Suc)n(h)19 b(messages)e(can)h(b)r(e)h(retriev)n(ed)f(using)g(the)h
-(AST)p Ft(_)p Fk(W)-9 b(ARNINGS)227 1290 y(function.)0
-1468 y Fc(T)m(yp)s(e:)227 1568 y Fk(In)n(teger)27 b(\(b)r(o)r(olean\).)
-0 1746 y Fc(Class)k(Applicabilit)m(y:)259 1911 y(Channel)427
-2011 y Fk(All)d(Channels)g(ha)n(v)n(e)e(this)i(attribute.)0
-2201 y Fc(Notes:)340 2513 y Fj(\017)45 b Fk(This)30 b(attribute)g(w)n
-(as)f(in)n(tro)r(duced)g(in)i(AST)f(v)n(ersion)e(5.0.)43
-b(Prior)28 b(to)i(this)g(v)n(ersion)e(of)i(AST)g(unexp)r(ected)427
-2612 y(data)g(items)h(read)f(b)n(y)h(a)f(basic)g(Channel)h(alw)n(a)n
-(ys)e(caused)h(an)g(error)f(to)h(b)r(e)i(rep)r(orted.)45
-b(So)31 b(applications)427 2712 y(link)n(ed)21 b(against)e(v)n(ersions)
-g(of)i(AST)g(prior)e(to)i(v)n(ersion)e(5.0)h(ma)n(y)g(not)g(b)r(e)h
-(able)g(to)f(read)g(Ob)5 b(ject)20 b(descriptions)427
-2811 y(created)27 b(b)n(y)g(later)g(v)n(ersions)f(of)i(AST,)g(if)g(the)
-g(Ob)5 b(ject's)27 b(class)g(description)g(has)g(c)n(hanged.)p
-0 3039 V 0 3178 a FA(St)l(yle\(elemen)l(t\))1159 3171
-y Fd(Line)39 b(st)m(yle)f(for)g(a)g(Plot)g(elemen)m(t)2925
-3178 y FA(St)l(yle\(elemen)l(t\))0 3402 y Fc(Description:)44
-b Fk(This)39 b(attribute)f(determines)g(the)h(line)g(st)n(yle)f(used)g
-(when)h(dra)n(wing)e(eac)n(h)g(elemen)n(t)i(of)f(graphical)227
-3502 y(output)i(pro)r(duced)g(b)n(y)f(a)h(Plot.)72 b(It)40
-b(tak)n(es)f(a)g(separate)f(v)-5 b(alue)40 b(for)f(eac)n(h)g(graphical)
-f(elemen)n(t)i(so)f(that,)k(for)227 3601 y(instance,)f(the)e(setting)f
-Ft(")p Fk(St)n(yle\(b)r(order\)=2)p Ft(")e Fk(causes)i(the)g(Plot)g(b)r
-(order)f(to)i(b)r(e)f(dra)n(wn)g(using)g(line)g(st)n(yle)g(2)227
-3701 y(\(whic)n(h)28 b(migh)n(t)g(result)f(in,)h(sa)n(y)-7
-b(,)26 b(a)i(dashed)f(line\).)227 3840 y(The)35 b(range)f(of)h(in)n
-(teger)f(line)h(st)n(yles)g(a)n(v)-5 b(ailable)33 b(and)i(their)g(app)r
-(earance)f(is)h(determined)g(b)n(y)g(the)g(underlying)227
-3939 y(graphics)25 b(system.)36 b(The)26 b(default)h(b)r(eha)n(viour)e
-(is)h(for)f(all)h(graphical)e(elemen)n(ts)i(to)g(b)r(e)h(dra)n(wn)e
-(using)h(the)g(default)227 4039 y(line)i(st)n(yle)f(supplied)h(b)n(y)g
-(this)f(graphics)g(system)g(\(normally)-7 b(,)27 b(this)h(is)f(lik)n
-(ely)g(to)h(giv)n(e)e(a)i(solid)f(line\).)0 4217 y Fc(T)m(yp)s(e:)227
-4317 y Fk(In)n(teger.)0 4495 y Fc(Class)k(Applicabilit)m(y:)259
-4660 y(Plot)427 4760 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)
-0 4950 y Fc(Notes:)340 5262 y Fj(\017)45 b Fk(F)-7 b(or)27
-b(a)g(list)h(of)g(the)g(graphical)e(elemen)n(ts)h(a)n(v)-5
-b(ailable,)27 b(see)g(the)h(description)f(of)g(the)h(Plot)f(class.)340
-5409 y Fj(\017)45 b Fk(If)33 b(no)f(graphical)f(elemen)n(t)i(is)f(sp)r
-(eci\014ed,)j(\(e.g.)51 b Ft(")p Fk(St)n(yle)p Ft(")32
-b Fk(instead)g(of)g Ft(")p Fk(St)n(yle\(b)r(order\))p
-Ft(")p Fk(\),)h(then)g(a)f Ft(")p Fk(set)p Ft(")427 5508
-y Fk(or)26 b Ft(")p Fk(clear)p Ft(")f Fk(op)r(eration)h(will)g
-(a\013ect)h(the)g(attribute)g(v)-5 b(alue)27 b(of)f(all)h(graphical)e
-(elemen)n(ts,)i(while)g(a)f Ft(")p Fk(get)p Ft(")f Fk(or)427
-5608 y Ft(")p Fk(test)p Ft(")i Fk(op)r(eration)g(will)h(use)f(just)h
-(the)g(St)n(yle\(Border\))f(v)-5 b(alue.)p eop end
-%%Page: 459 469
-TeXDict begin 459 468 bop 3643 52 a FG(459)p 0 351 3780
-12 v 0 490 a FA(Sym)l(b)t(ol\(axis\))1575 483 y Fd(Axis)39
-b(sym)m(b)s(ol)3011 490 y FA(Sym)l(b)t(ol\(axis\))0 690
-y Fc(Description:)44 b Fk(This)37 b(attribute)g(sp)r(eci\014es)g(a)f
-(short-form)g(sym)n(b)r(ol)g(to)h(b)r(e)g(used)g(to)g(represen)n(t)e
-(co)r(ordinate)h(v)-5 b(alues)227 790 y(for)32 b(a)f(particular)g(axis)
-g(of)h(a)f(F)-7 b(rame.)49 b(This)32 b(migh)n(t)g(b)r(e)g(used)g
-(\(e.g.\))50 b(in)32 b(algebraic)e(expressions)g(where)h(a)h(full)227
-890 y(description)37 b(of)g(the)g(axis)f(w)n(ould)g(b)r(e)i
-(inappropriate.)63 b(Examples)36 b(include)h Ft(")p Fk(RA)p
-Ft(")g Fk(and)g Ft(")p Fk(Dec)p Ft(")f Fk(\(for)h(Righ)n(t)227
-989 y(Ascension)27 b(and)h(Declination\).)227 1116 y(If)g(a)f(Sym)n(b)r
-(ol)h(v)-5 b(alue)27 b(has)h(not)f(b)r(een)h(set)g(for)f(a)g(F)-7
-b(rame)27 b(axis,)g(then)h(a)f(suitable)h(default)g(is)f(supplied.)0
-1271 y Fc(T)m(yp)s(e:)227 1371 y Fk(String.)0 1525 y
-Fc(Class)k(Applicabilit)m(y:)259 1667 y(F)-8 b(rame)427
-1767 y Fk(The)24 b(default)h(Sym)n(b)r(ol)e(v)-5 b(alue)24
-b(supplied)g(b)n(y)g(the)g(F)-7 b(rame)24 b(class)f(is)g(the)i(string)e
-Ft(")p Fm(<)p Fk(Domain)p Fm(><)p Fk(n)p Fm(>)p Ft(")p
-Fk(,)f(where)427 1866 y Fm(<)p Fk(n)p Fm(>)34 b Fk(is)g(1,)h(2,)g(etc.)
-57 b(for)33 b(successiv)n(e)g(axes,)i(and)f Fm(<)p Fk(Domain)p
-Fm(>)f Fk(is)h(the)g(v)-5 b(alue)34 b(of)g(the)g(F)-7
-b(rame's)34 b(Domain)427 1966 y(attribute)25 b(\(truncated)g(if)h
-(necessary)d(so)h(that)h(the)g(\014nal)g(string)f(do)r(es)h(not)f
-(exceed)h(15)f(c)n(haracters\).)34 b(If)25 b(no)427 2065
-y(Domain)j(v)-5 b(alue)29 b(has)e(b)r(een)i(set,)f Ft(")p
-Fk(x)p Ft(")g Fk(is)g(used)g(as)g(the)g Fm(<)p Fk(Domain)p
-Fm(>)g Fk(v)-5 b(alue)28 b(in)g(constructing)g(this)g(default)427
-2165 y(string.)259 2301 y Fc(SkyF)-8 b(rame)427 2400
-y Fk(The)30 b(SkyF)-7 b(rame)29 b(class)g(re-de\014nes)g(the)i(default)
-f(Sym)n(b)r(ol)g(v)-5 b(alue)30 b(\(e.g.)44 b(to)29 b
-Ft(")p Fk(RA)p Ft(")h Fk(or)f Ft(")p Fk(Dec)p Ft(")p
-Fk(\))h(as)f(appro-)427 2500 y(priate)e(for)g(the)h(particular)f
-(celestial)g(co)r(ordinate)f(system)i(b)r(eing)f(represen)n(ted.)259
-2635 y Fc(TimeF)-8 b(rame)427 2735 y Fk(The)33 b(TimeF)-7
-b(rame)33 b(class)f(re-de\014nes)g(the)h(default)g(Sym)n(b)r(ol)g(v)-5
-b(alue)33 b(as)f(appropriate)f(for)i(the)g(particular)427
-2835 y(time)28 b(system)g(b)r(eing)f(represen)n(ted.)259
-2970 y Fc(F)-8 b(rameSet)427 3070 y Fk(The)23 b(Sym)n(b)r(ol)g
-(attribute)g(of)g(a)f(F)-7 b(rameSet)23 b(axis)f(is)g(the)h(same)g(as)f
-(that)h(of)g(its)g(curren)n(t)f(F)-7 b(rame)22 b(\(as)g(sp)r(eci\014ed)
-427 3169 y(b)n(y)28 b(the)g(Curren)n(t)e(attribute\).)0
-3336 y Fc(Notes:)340 3624 y Fj(\017)45 b Fk(When)36 b(sp)r(ecifying)f
-(this)h(attribute)f(b)n(y)g(name,)i(it)f(should)f(b)r(e)h(subscripted)f
-(with)g(the)h(n)n(um)n(b)r(er)f(of)g(the)427 3724 y(F)-7
-b(rame)27 b(axis)g(to)h(whic)n(h)f(it)h(applies.)p 0
-3928 V 0 4059 a FA(System)733 4060 y Fd(Co)s(ordinate)37
-b(system)h(used)h(to)f(describ)s(e)h(p)s(ositions)1418
-4175 y(within)e(the)i(domain)3355 4059 y FA(System)0
-4345 y Fc(Description:)44 b Fk(In)25 b(general)e(it)i(is)f(p)r(ossible)
-g(for)g(p)r(ositions)g(within)h(a)f(giv)n(en)g(ph)n(ysical)g(domain)g
-(to)g(b)r(e)h(describ)r(ed)f(using)227 4445 y(one)38
-b(of)g(sev)n(eral)f(di\013eren)n(t)h(co)r(ordinate)f(systems.)68
-b(F)-7 b(or)38 b(instance,)j(the)d(SkyF)-7 b(rame)38
-b(class)f(can)h(use)g(galactic)227 4545 y(co)r(ordinates,)f(equatorial)
-e(co)r(ordinates,)h(etc,)j(to)d(describ)r(e)g(p)r(ositions)f(on)h(the)h
-(sky)-7 b(.)62 b(As)36 b(another)f(example,)227 4644
-y(the)j(Sp)r(ecF)-7 b(rame)37 b(class)f(can)g(use)h(frequency)-7
-b(,)39 b(w)n(a)n(v)n(elength,)f(v)n(elo)r(cit)n(y)-7
-b(,)39 b(etc,)h(to)d(describ)r(e)f(a)h(p)r(osition)g(within)227
-4744 y(an)f(electromagnetic)f(sp)r(ectrum.)64 b(The)36
-b(System)h(attribute)f(iden)n(ti\014es)h(the)g(particular)e(co)r
-(ordinate)g(system)227 4843 y(represen)n(ted)29 b(b)n(y)g(a)g(F)-7
-b(rame.)42 b(Eac)n(h)28 b(class)h(of)g(F)-7 b(rame)29
-b(de\014nes)h(a)f(set)g(of)h(acceptable)e(v)-5 b(alues)30
-b(for)f(this)g(attribute,)227 4943 y(as)e(listed)h(b)r(elo)n(w)e(\(all)
-i(are)e(case)h(insensitiv)n(e\).)36 b(Where)27 b(more)g(than)g(one)g
-(alternativ)n(e)f(System)i(v)-5 b(alue)27 b(is)g(sho)n(wn,)227
-5043 y(the)h(\014rst)g(of)f(will)h(b)r(e)g(returned)f(when)h(an)f
-(enquiry)g(is)h(made.)0 5197 y Fc(T)m(yp)s(e:)227 5297
-y Fk(String.)0 5452 y Fc(Class)j(Applicabilit)m(y:)259
-5593 y(F)-8 b(rame)427 5693 y Fk(The)28 b(System)g(attribute)f(for)h(a)
-f(basic)g(F)-7 b(rame)27 b(alw)n(a)n(ys)e(equals)i Ft(")p
-Fk(Cartesian)p Ft(")p Fk(,)f(and)h(ma)n(y)g(not)h(b)r(e)g(altered.)p
-eop end
-%%Page: 460 470
-TeXDict begin 460 469 bop 0 52 a FG(460)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)259 351
-y Fc(CmpF)-8 b(rame)427 451 y Fk(The)27 b(System)g(attribute)f(for)g(a)
-h(CmpF)-7 b(rame)26 b(alw)n(a)n(ys)f(equals)g Ft(")p
-Fk(Comp)r(ound)p Ft(")p Fk(,)h(and)h(ma)n(y)f(not)g(b)r(e)h(altered.)
-427 551 y(In)21 b(addition,)g(the)g(CmpF)-7 b(rame)20
-b(class)f(allo)n(ws)g(the)i(System)f(attribute)g(to)g(b)r(e)h
-(referenced)e(for)h(a)g(comp)r(onen)n(t)427 650 y(F)-7
-b(rame)25 b(b)n(y)g(including)h(the)g(index)f(of)g(an)g(axis)g(within)h
-(the)g(required)e(comp)r(onen)n(t)h(F)-7 b(rame.)36 b(F)-7
-b(or)25 b(instance,)427 750 y Ft(")p Fk(System\(3\))p
-Ft(")h Fk(refers)g(to)g(the)h(System)f(attribute)h(of)f(the)h(comp)r
-(onen)n(t)f(F)-7 b(rame)26 b(whic)n(h)g(includes)h(axis)f(3)g(of)427
-849 y(the)i(CmpF)-7 b(rame.)259 993 y Fc(F)f(rameSet)427
-1093 y Fk(The)27 b(System)f(attribute)h(of)f(a)h(F)-7
-b(rameSet)26 b(is)g(the)h(same)f(as)g(that)g(of)h(its)g(curren)n(t)e(F)
--7 b(rame)26 b(\(as)g(sp)r(eci\014ed)h(b)n(y)427 1192
-y(the)h(Curren)n(t)f(attribute\).)259 1336 y Fc(SkyF)-8
-b(rame)427 1436 y Fk(The)26 b(SkyF)-7 b(rame)25 b(class)f(supp)r(orts)h
-(the)h(follo)n(wing)e(System)i(v)-5 b(alues)25 b(and)h(asso)r(ciated)e
-(celestial)h(co)r(ordinate)427 1535 y(systems:)510 1775
-y Fj(\017)45 b Ft(")p Fk(AZEL)p Ft(")p Fk(:)33 b(Horizon)20
-b(co)r(ordinates.)34 b(The)21 b(longitude)g(axis)g(is)g(azim)n(uth)h
-(suc)n(h)f(that)h(geographic)d(north)597 1875 y(has)j(an)g(azim)n(uth)g
-(of)h(zero)e(and)h(geographic)e(east)i(has)g(an)g(azim)n(uth)g(of)g
-(+PI/2)f(radians.)34 b(The)22 b(zenith)597 1974 y(has)f(elev)-5
-b(ation)21 b(+PI/2.)33 b(When)21 b(con)n(v)n(erting)f(to)h(and)g(from)g
-(other)f(celestial)h(co)r(ordinate)f(systems,)i(no)597
-2074 y(corrections)g(are)h(applied)h(for)g(atmospheric)f(refraction)g
-(or)g(p)r(olar)g(motion)h(\(ho)n(w)n(ev)n(er,)f(a)g(correction)597
-2174 y(for)28 b(diurnal)g(ab)r(erattion)g(is)g(applied\).)40
-b(Note,)29 b(unlik)n(e)f(most)h(other)f(celestial)g(co)r(ordinate)f
-(systems,)597 2273 y(this)38 b(system)g(is)g(righ)n(t)f(handed.)68
-b(Also,)40 b(unlik)n(e)e(other)f(SkyF)-7 b(rame)37 b(systems,)j(the)e
-(AzEl)g(system)597 2373 y(is)j(sensitiv)n(e)g(to)g(the)g(timescale)g
-(in)g(whic)n(h)g(the)h(Ep)r(o)r(c)n(h)e(v)-5 b(alue)41
-b(is)g(supplied.)78 b(This)41 b(is)g(b)r(ecause)597 2472
-y(of)c(the)g(gross)d(diurnal)i(rotation)f(whic)n(h)i(this)g(system)f
-(undergo)r(es,)h(causing)f(a)g(small)g(c)n(hange)f(in)597
-2572 y(time)c(to)e(translate)g(to)h(a)g(large)e(rotation.)43
-b(When)30 b(con)n(v)n(erting)e(to)i(or)f(from)h(an)f(AzEl)h(system,)g
-(the)597 2672 y(Ep)r(o)r(c)n(h)d(v)-5 b(alue)27 b(for)g(b)r(oth)g
-(source)f(and)h(destination)g(SkyF)-7 b(rames)26 b(should)h(b)r(e)h
-(supplied)f(in)h(the)f(TDB)597 2771 y(timescale.)36 b(The)27
-b(di\013erence)f(b)r(et)n(w)n(een)g(TDB)h(and)f(TT)g(is)h(b)r(et)n(w)n
-(een)f(1)g(and)g(2)g(milliseconds,)g(and)g(so)597 2871
-y(a)d(TT)h(v)-5 b(alue)23 b(can)g(usually)g(b)r(e)h(supplied)g(in)g
-(place)f(of)g(a)h(TDB)f(v)-5 b(alue.)36 b(The)23 b(TT)h(timescale)f(is)
-g(related)597 2971 y(to)28 b(T)-7 b(AI)28 b(via)f(TT)g(=)h(T)-7
-b(AI)28 b(+)f(32.184)e(seconds.)510 3092 y Fj(\017)45
-b Ft(")p Fk(ECLIPTIC)p Ft(")p Fk(:)31 b(Ecliptic)20 b(co)r(ordinates)f
-(\(IA)n(U)i(1980\),)f(referred)f(to)h(the)g(ecliptic)h(and)f(mean)f
-(equino)n(x)597 3192 y(sp)r(eci\014ed)28 b(b)n(y)f(the)h(qualifying)g
-(Equino)n(x)e(v)-5 b(alue.)510 3314 y Fj(\017)45 b Ft(")p
-Fk(FK4)p Ft(")p Fk(:)35 b(The)26 b(old)g(FK4)g(\(barycen)n(tric\))f
-(equatorial)g(co)r(ordinate)g(system,)h(whic)n(h)h(should)f(b)r(e)g
-(qual-)597 3413 y(i\014ed)k(b)n(y)g(an)f(Equino)n(x)g(v)-5
-b(alue.)43 b(The)30 b(underlying)g(mo)r(del)f(on)h(whic)n(h)g(this)g
-(is)g(based)f(is)h(non-inertial)597 3513 y(and)f(rotates)f(slo)n(wly)h
-(with)g(time,)h(so)f(for)g(accurate)f(w)n(ork)f(FK4)i(co)r(ordinate)f
-(systems)h(should)g(also)597 3612 y(b)r(e)f(quali\014ed)g(b)n(y)f(an)g
-(Ep)r(o)r(c)n(h)g(v)-5 b(alue.)510 3734 y Fj(\017)45
-b Ft(")p Fk(FK4-NO-E)p Ft(")24 b Fk(or)h Ft(")p Fk(FK4)p
-Ft(_)p Fk(NO)p Ft(_)p Fk(E)p Ft(")p Fk(:)33 b(The)26
-b(old)g(FK4)g(\(barycen)n(tric\))f(equatorial)g(system)h(but)g(with-)
-597 3834 y(out)32 b(the)g Ft(")p Fk(E-terms)f(of)h(ab)r(erration)p
-Ft(")e Fk(\(e.g.)49 b(some)31 b(radio)g(catalogues\).)48
-b(This)32 b(co)r(ordinate)f(system)597 3933 y(should)d(also)e(b)r(e)i
-(quali\014ed)g(b)n(y)f(b)r(oth)h(an)f(Equino)n(x)g(and)g(an)g(Ep)r(o)r
-(c)n(h)g(v)-5 b(alue.)510 4055 y Fj(\017)45 b Ft(")p
-Fk(FK5)p Ft(")26 b Fk(or)g Ft(")p Fk(EQUA)-7 b(TORIAL)p
-Ft(")p Fk(:)35 b(The)27 b(mo)r(dern)g(FK5)f(\(barycen)n(tric\))g
-(equatorial)g(co)r(ordinate)g(sys-)597 4155 y(tem.)38
-b(This)27 b(should)h(b)r(e)g(quali\014ed)f(b)n(y)g(an)h(Equino)n(x)e(v)
--5 b(alue.)510 4276 y Fj(\017)45 b Ft(")p Fk(GALA)n(CTIC)p
-Ft(")p Fk(:)37 b(Galactic)27 b(co)r(ordinates)f(\(IA)n(U)i(1958\).)510
-4398 y Fj(\017)45 b Ft(")p Fk(GAPPT)p Ft(")p Fk(,)36
-b Ft(")p Fk(GEOCENTRIC)p Ft(")d Fk(or)h Ft(")p Fk(APP)-7
-b(ARENT)p Ft(")p Fk(:)50 b(The)35 b(geo)r(cen)n(tric)e(apparen)n(t)h
-(equatorial)597 4497 y(co)r(ordinate)j(system,)j(whic)n(h)e(giv)n(es)e
-(the)i(apparen)n(t)f(p)r(ositions)g(of)h(sources)e(relativ)n(e)h(to)h
-(the)g(true)597 4597 y(plane)28 b(of)f(the)h(Earth's)e(equator)h(and)g
-(the)h(equino)n(x)f(\(the)h(co)r(ordinate)e(origin\))h(at)g(a)g(time)h
-(sp)r(eci\014ed)597 4697 y(b)n(y)i(the)f(qualifying)g(Ep)r(o)r(c)n(h)h
-(v)-5 b(alue.)42 b(\(Note)30 b(that)g(no)f(Equino)n(x)f(is)i(needed)f
-(to)h(qualify)f(this)h(co)r(ordi-)597 4796 y(nate)e(system)f(b)r
-(ecause)g(no)g(mo)r(del)g Ft(")p Fk(mean)g(equino)n(x)p
-Ft(")f Fk(is)h(in)n(v)n(olv)n(ed.\))36 b(These)27 b(co)r(ordinates)f
-(giv)n(e)g(the)597 4896 y(apparen)n(t)i(righ)n(t)g(ascension)g(and)h
-(declination)f(of)h(a)g(source)e(for)i(a)f(sp)r(eci\014ed)h(date)g(of)g
-(observ)-5 b(ation,)597 4996 y(and)31 b(therefore)f(form)h(an)g(appro)n
-(ximate)e(basis)h(for)h(p)r(oin)n(ting)g(a)g(telescop)r(e.)46
-b(Note,)32 b(ho)n(w)n(ev)n(er,)e(that)597 5095 y(they)35
-b(are)e(applicable)g(to)h(a)g(\014ctitious)g(observ)n(er)e(at)i(the)g
-(Earth's)f(cen)n(tre,)i(and)f(therefore)f(ignore)597
-5195 y(suc)n(h)20 b(e\013ects)g(as)g(atmospheric)f(refraction)g(and)h
-(the)g(\(normally)g(m)n(uc)n(h)g(smaller\))f(ab)r(erration)g(of)h(ligh)
-n(t)597 5295 y(due)34 b(to)f(the)g(rotational)f(v)n(elo)r(cit)n(y)g(of)
-h(the)g(Earth's)f(surface.)53 b(Geo)r(cen)n(tric)32 b(apparen)n(t)g(co)
-r(ordinates)597 5394 y(are)26 b(deriv)n(ed)f(from)i(the)g(standard)e
-(FK5)h(\(J2000.0\))e(barycen)n(tric)h(co)r(ordinates)g(b)n(y)i(taking)e
-(accoun)n(t)597 5494 y(of)h(the)h(gra)n(vitational)c(de\015ection)j(of)
-g(ligh)n(t)g(b)n(y)f(the)i(Sun)f(\(usually)g(small\),)g(the)g(ab)r
-(erration)f(of)h(ligh)n(t)597 5593 y(caused)i(b)n(y)g(the)h(motion)f
-(of)h(the)f(Earth's)g(cen)n(tre)f(with)i(resp)r(ect)g(to)f(the)h
-(barycen)n(tre)d(\(larger\),)i(and)597 5693 y(the)g(precession)e(and)i
-(n)n(utation)f(of)h(the)g(Earth's)e(spin)i(axis)f(\(normally)g(larger)e
-(still\).)p eop end
-%%Page: 461 471
-TeXDict begin 461 470 bop 3643 52 a FG(461)510 351 y
-Fj(\017)45 b Ft(")p Fk(HELIOECLIPTIC)p Ft(")p Fk(:)32
-b(Ecliptic)24 b(co)r(ordinates)e(\(IA)n(U)j(1980\),)e(referred)f(to)i
-(the)g(ecliptic)g(and)g(mean)597 451 y(equino)n(x)31
-b(of)h(J2000.0,)f(in)h(whic)n(h)g(an)f(o\013set)h(is)g(added)g(to)f
-(the)i(longitude)e(v)-5 b(alue)32 b(whic)n(h)g(results)f(in)597
-551 y(the)f(cen)n(tre)f(of)g(the)h(sun)g(b)r(eing)f(at)h(zero)e
-(longitude)h(at)h(the)f(date)h(giv)n(en)e(b)n(y)i(the)f(Ep)r(o)r(c)n(h)
-g(attribute.)597 650 y(A)n(ttempts)k(to)f(set)g(a)f(v)-5
-b(alue)32 b(for)g(the)g(Equino)n(x)f(attribute)h(will)g(b)r(e)g
-(ignored,)g(since)g(this)g(system)g(is)597 750 y(alw)n(a)n(ys)26
-b(referred)g(to)i(J2000.0.)510 867 y Fj(\017)45 b Ft(")p
-Fk(ICRS)p Ft(")p Fk(:)54 b(The)36 b(In)n(ternation)f(Celestial)h
-(Reference)f(System,)k(realised)c(through)g(the)i(Hipparcos)597
-967 y(catalogue.)j(Whilst)30 b(not)f(an)g(equatorial)f(system)h(b)n(y)g
-(de\014nition,)h(the)f(ICRS)h(is)f(v)n(ery)f(close)g(to)h(the)597
-1066 y(FK5)37 b(\(J2000\))e(system)i(and)g(is)g(usually)g(treated)g(as)
-f(an)h(equatorial)f(system.)65 b(The)37 b(distinction)597
-1166 y(b)r(et)n(w)n(een)d(ICRS)h(and)f(FK5)f(\(J2000\))f(only)i(b)r
-(ecomes)g(imp)r(ortan)n(t)g(when)g(accuracies)e(of)i(50)f(milli-)597
-1266 y(arcseconds)26 b(or)h(b)r(etter)h(are)e(required.)36
-b(ICRS)28 b(need)g(not)f(b)r(e)h(quali\014ed)g(b)n(y)f(an)g(Equino)n(x)
-g(v)-5 b(alue.)510 1383 y Fj(\017)45 b Ft(")p Fk(J2000)p
-Ft(")p Fk(:)h(An)34 b(equatorial)e(co)r(ordinate)g(system)h(based)g(on)
-g(the)h(mean)g(dynamical)f(equator)f(and)597 1482 y(equino)n(x)j(of)h
-(the)h(J2000)c(ep)r(o)r(c)n(h.)62 b(The)36 b(dynamical)g(equator)f(and)
-g(equino)n(x)g(di\013er)i(sligh)n(tly)e(from)597 1582
-y(those)40 b(used)h(b)n(y)f(the)h(FK5)f(mo)r(del,)k(and)c(so)g(a)g
-Ft(")p Fk(J2000)p Ft(")d Fk(SkyF)-7 b(rame)40 b(will)g(di\013er)h
-(sligh)n(tly)f(from)597 1682 y(an)31 b Ft(")p Fk(FK5\(Equino)n
-(x=J2000\))p Ft(")26 b Fk(SkyF)-7 b(rame.)47 b(The)32
-b(J2000)d(System)i(need)g(not)g(b)r(e)h(quali\014ed)f(b)n(y)g(an)597
-1781 y(Equino)n(x)c(v)-5 b(alue)510 1899 y Fj(\017)45
-b Ft(")p Fk(SUPER)n(GALA)n(CTIC)p Ft(")p Fk(:)36 b(De)28
-b(V)-7 b(aucouleurs)26 b(Sup)r(ergalactic)h(co)r(ordinates.)510
-2016 y Fj(\017)45 b Ft(")p Fk(UNKNO)n(WN)p Ft(")p Fk(:)54
-b(An)n(y)36 b(other)g(general)f(spherical)g(co)r(ordinate)g(system.)63
-b(No)36 b(Mapping)g(can)g(b)r(e)597 2115 y(created)27
-b(b)r(et)n(w)n(een)g(a)g(pair)g(of)g(SkyF)-7 b(rames)26
-b(if)i(either)g(of)f(the)h(SkyF)-7 b(rames)26 b(has)h(System)g(set)h
-(to)f Ft(")p Fk(Un-)597 2215 y(kno)n(wn)p Ft(")p Fk(.)427
-2350 y(Curren)n(tly)-7 b(,)30 b(the)g(default)h(System)f(v)-5
-b(alue)29 b(is)h Ft(")p Fk(ICRS)p Ft(")p Fk(.)43 b(Ho)n(w)n(ev)n(er,)29
-b(this)h(default)g(ma)n(y)f(c)n(hange)g(in)h(future)427
-2450 y(as)d(new)g(astrometric)e(standards)h(ev)n(olv)n(e.)35
-b(The)27 b(in)n(ten)n(tion)g(is)g(to)g(trac)n(k)e(the)j(most)f(mo)r
-(dern)f(appropriate)427 2549 y(standard.)53 b(F)-7 b(or)33
-b(this)h(reason,)f(y)n(ou)g(should)g(use)g(the)h(default)f(only)g(if)h
-(this)g(is)f(what)g(y)n(ou)g(in)n(tend)g(\(and)427 2649
-y(can)f(tolerate)g(an)n(y)f(asso)r(ciated)g(sligh)n(t)h(c)n(hange)f(in)
-i(future\).)51 b(If)33 b(y)n(ou)f(in)n(tend)g(to)g(use)h(the)f(ICRS)h
-(system)427 2748 y(inde\014nitely)-7 b(,)29 b(then)f(y)n(ou)f(should)g
-(sp)r(ecify)h(it)g(explicitly)-7 b(.)259 2883 y Fc(Sp)s(ecF)f(rame)427
-2983 y Fk(The)23 b(Sp)r(ecF)-7 b(rame)22 b(class)g(supp)r(orts)g(the)h
-(follo)n(wing)e(System)i(v)-5 b(alues)22 b(and)h(asso)r(ciated)e(sp)r
-(ectral)h(co)r(ordinate)427 3083 y(systems)i(\(the)h(default)g(is)g
-Ft(")p Fk(W)-9 b(A)g(VE)p Ft(")23 b Fk(-)h(w)n(a)n(v)n(elength\).)35
-b(They)24 b(are)g(all)g(de\014ned)h(in)f(FITS-W)n(CS)h(pap)r(er)f(I)r
-(I)r(I:)510 3309 y Fj(\017)45 b Ft(")p Fk(FREQ)p Ft(")p
-Fk(:)36 b(F)-7 b(requency)27 b(\(GHz\))510 3426 y Fj(\017)45
-b Ft(")p Fk(ENER)p Ft(")27 b Fk(or)f Ft(")p Fk(ENER)n(GY)p
-Ft(")p Fk(:)36 b(Energy)26 b(\(J\))510 3544 y Fj(\017)45
-b Ft(")p Fk(W)-9 b(A)g(VN)p Ft(")28 b Fk(or)f Ft(")p
-Fk(W)-9 b(A)g(VENUM)p Ft(")p Fk(:)36 b(W)-7 b(a)n(v)n(e-n)n(um)n(b)r
-(er)26 b(\(1/m\))510 3661 y Fj(\017)45 b Ft(")p Fk(W)-9
-b(A)g(VE)p Ft(")27 b Fk(or)g Ft(")p Fk(W)-9 b(A)g(VELEN)p
-Ft(")p Fk(:)35 b(V)-7 b(acuum)28 b(w)n(a)n(v)n(e-length)e(\(Angstrom\))
-510 3778 y Fj(\017)45 b Ft(")p Fk(A)-9 b(W)g(A)g(V)p
-Ft(")28 b Fk(or)e Ft(")p Fk(AIR)-9 b(W)g(A)g(VE)p Ft(")p
-Fk(:)36 b(W)-7 b(a)n(v)n(e-length)27 b(in)h(air)e(\(Angstrom\))510
-3895 y Fj(\017)45 b Ft(")p Fk(VRAD)p Ft(")28 b Fk(or)f
-Ft(")p Fk(VRADIO)p Ft(")p Fk(:)37 b(Radio)27 b(v)n(elo)r(cit)n(y)f
-(\(km/s\))510 4013 y Fj(\017)45 b Ft(")p Fk(V)n(OPT)p
-Ft(")26 b Fk(or)h Ft(")p Fk(V)n(OPTICAL)p Ft(")p Fk(:)35
-b(Optical)27 b(v)n(elo)r(cit)n(y)g(\(km/s\))510 4130
-y Fj(\017)45 b Ft(")p Fk(ZOPT)p Ft(")26 b Fk(or)h Ft(")p
-Fk(REDSHIFT)p Ft(")p Fk(:)36 b(Redshift)29 b(\(dimensionless\))510
-4247 y Fj(\017)45 b Ft(")p Fk(BET)-7 b(A)p Ft(")p Fk(:)36
-b(Beta)27 b(factor)g(\(dimensionless\))510 4364 y Fj(\017)45
-b Ft(")p Fk(VELO)p Ft(")26 b Fk(or)h Ft(")p Fk(VREL)p
-Ft(")p Fk(:)36 b(Apparen)n(t)27 b(radial)g(\()p Ft(")p
-Fk(relativistic)p Ft(")p Fk(\))f(v)n(elo)r(cit)n(y)h(\(km/s\))427
-4499 y(The)i(default)h(v)-5 b(alue)29 b(for)f(the)h(Unit)h(attribute)f
-(for)g(eac)n(h)f(system)g(is)h(sho)n(wn)g(in)g(paren)n(theses.)39
-b(Note)29 b(that)427 4599 y(the)i(default)f(v)-5 b(alue)30
-b(for)g(the)g(Activ)n(eUnit)h(\015ag)e(is)h(.TR)n(UE.)g(for)g(a)f(Sp)r
-(ecF)-7 b(rame,)31 b(meaning)f(that)g(c)n(hanges)427
-4699 y(to)g(the)g(Unit)g(attribute)g(for)f(a)g(Sp)r(ecF)-7
-b(rame)29 b(will)h(result)f(in)h(the)g(Sp)r(ecF)-7 b(rame)29
-b(b)r(eing)h(re-mapp)r(ed)f(within)427 4798 y(its)j(enclosing)e(F)-7
-b(rameSet)32 b(in)f(order)f(to)i(re\015ect)f(the)h(c)n(hange)e(in)i
-(units)f(\(see)h(AST)p Ft(_)p Fk(SET)-7 b(A)n(CTIVEUNIT)427
-4898 y(routine)27 b(for)h(further)f(information\).)259
-5033 y Fc(TimeF)-8 b(rame)427 5132 y Fk(The)21 b(TimeF)-7
-b(rame)21 b(class)f(supp)r(orts)h(the)g(follo)n(wing)f(System)h(v)-5
-b(alues)21 b(and)g(asso)r(ciated)e(co)r(ordinate)h(systems)427
-5232 y(\(the)29 b(default)f(is)f Ft(")p Fk(MJD)p Ft(")p
-Fk(\):)510 5459 y Fj(\017)45 b Ft(")p Fk(MJD)p Ft(")p
-Fk(:)37 b(Mo)r(di\014ed)28 b(Julian)f(Date)h(\(d\))510
-5576 y Fj(\017)45 b Ft(")p Fk(JD)p Ft(")p Fk(:)36 b(Julian)28
-b(Date)f(\(d\))510 5693 y Fj(\017)45 b Ft(")p Fk(JEPOCH)p
-Ft(")p Fk(:)35 b(Julian)27 b(ep)r(o)r(c)n(h)h(\(yr\))p
-eop end
-%%Page: 462 472
-TeXDict begin 462 471 bop 0 52 a FG(462)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)510 351
-y Fj(\017)45 b Ft(")p Fk(BEPOCH)p Ft(")p Fk(:)35 b(Besselian)27
-b(\(yr\))427 484 y(The)34 b(default)f(v)-5 b(alue)33
-b(for)g(the)h(Unit)g(attribute)f(for)g(eac)n(h)f(system)h(is)g(sho)n
-(wn)g(in)g(paren)n(theses.)52 b(Strictly)-7 b(,)427 584
-y(these)37 b(systems)e(should)i(not)f(allo)n(w)f(c)n(hanges)g(to)h(b)r
-(e)h(made)f(to)g(the)h(units.)63 b(F)-7 b(or)36 b(instance,)i(the)f
-(usual)427 684 y(de\014nition)26 b(of)g Ft(")p Fk(MJD)p
-Ft(")f Fk(and)h Ft(")p Fk(JD)p Ft(")f Fk(include)h(the)g(statemen)n(t)g
-(that)g(the)g(v)-5 b(alues)26 b(will)g(b)r(e)g(in)g(units)g(of)g(da)n
-(ys.)427 783 y(Ho)n(w)n(ev)n(er,)d(AST)h(do)r(es)g(allo)n(w)e(the)j
-(use)e(of)h(other)f(units)i(with)f(all)g(the)g(ab)r(o)n(v)n(e)e(supp)r
-(orted)i(systems)f(\(except)427 883 y(BEPOCH\),)38 b(on)g(the)g
-(understanding)g(that)h(con)n(v)n(ersion)d(to)i(the)g
-Ft(")p Fk(correct)p Ft(")f Fk(units)h(in)n(v)n(olv)n(es)f(nothing)427
-983 y(more)e(than)g(a)g(simple)h(scaling)e(\(1)i(yr)e(=)h(365.25)f(d,)j
-(1)e(d)h(=)f(24)f(h,)k(1)d(h)h(=)f(60)f(min,)k(1)d(min)h(=)f(60)f(s\).)
-427 1082 y(Besselian)e(ep)r(o)r(c)n(h)h(v)-5 b(alues)33
-b(are)f(de\014ned)i(in)f(terms)g(of)g(tropical)f(y)n(ears)g(of)h
-(365.2422)d(da)n(ys,)j(rather)f(than)427 1182 y(the)27
-b(usual)e(Julian)h(y)n(ear)f(of)h(365.25)e(da)n(ys.)35
-b(Therefore,)25 b(to)h(a)n(v)n(oid)f(an)n(y)g(confusion,)h(the)h(Unit)f
-(attribute)h(is)427 1281 y(automatically)i(cleared)g(to)g
-Ft(")p Fk(yr)p Ft(")g Fk(when)h(a)f(System)h(v)-5 b(alue)29
-b(of)h(BEPOCH)f(System)g(is)h(selected,)g(and)g(an)427
-1381 y(error)c(is)h(rep)r(orted)g(if)h(an)n(y)f(attempt)h(is)g
-(subsequen)n(tly)f(made)g(to)h(c)n(hange)e(the)i(Unit)h(attribute.)427
-1498 y(Note)42 b(that)g(the)h(default)f(v)-5 b(alue)42
-b(for)f(the)i(Activ)n(eUnit)f(\015ag)g(is)f(.TR)n(UE.)h(for)f(a)h
-(TimeF)-7 b(rame,)45 b(mean-)427 1597 y(ing)35 b(that)h(c)n(hanges)e
-(to)h(the)g(Unit)h(attribute)g(for)f(a)f(TimeF)-7 b(rame)35
-b(will)h(result)f(in)g(the)h(TimeF)-7 b(rame)35 b(b)r(e-)427
-1697 y(ing)40 b(re-mapp)r(ed)g(within)g(its)h(enclosing)e(F)-7
-b(rameSet)40 b(in)g(order)f(to)h(re\015ect)f(the)i(c)n(hange)e(in)h
-(units)h(\(see)427 1796 y(AST)p Ft(_)p Fk(SET)-7 b(A)n(CTIVEUNIT)28
-b(routine)f(for)g(further)g(information\).)259 1930 y
-Fc(FluxF)-8 b(rame)427 2029 y Fk(The)30 b(FluxF)-7 b(rame)30
-b(class)f(supp)r(orts)g(the)i(follo)n(wing)d(System)j(v)-5
-b(alues)29 b(and)h(asso)r(ciated)e(systems)i(for)f(mea-)427
-2129 y(suring)e(observ)n(ed)f(v)-5 b(alue:)510 2353 y
-Fj(\017)45 b Ft(")p Fk(FLXDN)p Ft(")p Fk(:)37 b(Flux)28
-b(p)r(er)g(unit)g(frequency)f(\(W/m)p Fj(^)p Fk(2/Hz\))510
-2469 y Fj(\017)45 b Ft(")p Fk(FLXDNW)p Ft(")p Fk(:)38
-b(Flux)28 b(p)r(er)f(unit)h(w)n(a)n(v)n(elength)e(\(W/m)p
-Fj(^)p Fk(2/Angstrom\))510 2586 y Fj(\017)45 b Ft(")p
-Fk(SF)n(CBR)p Ft(")p Fk(:)36 b(Surface)27 b(brigh)n(tness)g(in)h
-(frequency)f(units)h(\(W/m)p Fj(^)p Fk(2/Hz/arcmin)p
-Fj(\003\003)p Fk(2\))510 2702 y Fj(\017)45 b Ft(")p Fk(SF)n(CBR)-9
-b(W)p Ft(")p Fk(:)36 b(Surface)28 b(brigh)n(tness)e(in)i(w)n(a)n(v)n
-(elength)e(units)i(\(W/m)p Fj(^)p Fk(2/Angstrom/arcmin)p
-Fj(\003\003)p Fk(2\))427 2835 y(The)h(ab)r(o)n(v)n(e)e(lists)h(sp)r
-(eci\014ed)h(the)f(default)h(units)g(for)f(eac)n(h)f(System.)39
-b(If)29 b(an)f(explicit)h(v)-5 b(alue)28 b(is)g(set)g(for)g(the)427
-2935 y(Unit)e(attribute)f(but)g(no)g(v)-5 b(alue)25 b(is)g(set)f(for)h
-(System,)g(then)h(the)f(default)g(System)g(v)-5 b(alue)25
-b(is)g(determined)g(b)n(y)427 3035 y(the)j(Unit)f(string)g(\(if)g(the)h
-(units)f(are)f(not)h(appropriate)e(for)h(describing)h(an)n(y)f(of)h
-(the)g(supp)r(orted)g(Systems)427 3134 y(then)19 b(an)f(error)f(will)i
-(b)r(e)f(rep)r(orted)g(when)h(an)f(attempt)h(is)f(made)h(to)f(access)f
-(the)i(System)g(v)-5 b(alue\).)34 b(If)19 b(no)f(v)-5
-b(alue)427 3234 y(has)31 b(b)r(een)i(sp)r(eci\014ed)f(for)f(either)g
-(Unit)i(or)e(System,)h(then)h(System=FLXDN)f(and)g(Unit=W/m)p
-Fj(^)p Fk(2/Hz)427 3334 y(are)27 b(used.)p 0 3534 3780
-12 v 0 3672 a FA(T)-11 b(extLab\(axis\))1038 3665 y Fd(Dra)m(w)37
-b(descriptiv)m(e)g(axis)h(lab)s(els)g(for)g(a)1754 3780
-y(Plot?)2960 3672 y FA(T)-11 b(extLab\(axis\))0 3951
-y Fc(Description:)44 b Fk(This)30 b(attribute)g(con)n(trols)e(the)i
-(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 4050 y(AST)p Ft(_)p Fk(GRID)c(routine\))e(b)n(y)h
-(determining)g(whether)f(textual)h(lab)r(els)g(should)f(b)r(e)h(dra)n
-(wn)f(to)h(describ)r(e)f(the)h(quan-)227 4150 y(tit)n(y)30
-b(b)r(eing)f(represen)n(ted)f(on)g(eac)n(h)h(axis)f(of)h(a)f(Plot.)41
-b(It)30 b(tak)n(es)e(a)g(separate)g(v)-5 b(alue)29 b(for)f(eac)n(h)h
-(ph)n(ysical)f(axis)g(of)h(a)227 4250 y(Plot)i(so)f(that,)i(for)f
-(instance,)g(the)h(setting)e Ft(")p Fk(T)-7 b(extLab\(2\)=1)p
-Ft(")29 b Fk(sp)r(eci\014es)i(that)h(descriptiv)n(e)e(lab)r(els)g
-(should)h(b)r(e)227 4349 y(dra)n(wn)c(for)g(the)h(second)f(axis.)227
-4474 y(If)h(the)f(T)-7 b(extLab)27 b(v)-5 b(alue)27 b(of)g(a)g(Plot)f
-(axis)g(is)h(non-zero,)f(then)h(descriptiv)n(e)g(lab)r(els)g(will)g(b)r
-(e)g(dra)n(wn)f(for)h(that)g(axis,)227 4574 y(otherwise)j(they)h(will)g
-(b)r(e)g(omitted.)47 b(The)30 b(default)h(b)r(eha)n(viour)f(is)g(to)h
-(dra)n(w)f(descriptiv)n(e)g(lab)r(els)g(if)h(tic)n(k)g(marks)227
-4673 y(and)37 b(n)n(umerical)f(lab)r(els)h(are)f(b)r(eing)h(dra)n(wn)f
-(around)g(the)h(edges)f(of)h(the)g(plotting)g(area)f(\(see)h(the)g(Lab)
-r(elling)227 4773 y(attribute\),)28 b(but)h(to)e(omit)h(them)g
-(otherwise.)0 4923 y Fc(T)m(yp)s(e:)227 5023 y Fk(In)n(teger)f(\(b)r(o)
-r(olean\).)0 5173 y Fc(Class)k(Applicabilit)m(y:)259
-5310 y(Plot)427 5410 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)
-0 5572 y Fc(Notes:)p eop end
-%%Page: 463 473
-TeXDict begin 463 472 bop 3643 52 a FG(463)340 351 y
-Fj(\017)45 b Fk(The)c(text)g(used)f(for)g(the)h(descriptiv)n(e)f(lab)r
-(els)g(is)h(deriv)n(ed)e(from)i(the)f(Plot's)g(Lab)r(el\(axis\))g
-(attribute,)427 451 y(together)27 b(with)h(its)g(Unit\(axis\))g
-(attribute)g(if)g(appropriate)e(\(see)h(the)h(Lab)r(elUnits\(axis\))g
-(attribute\).)340 583 y Fj(\017)45 b Fk(The)20 b(dra)n(wing)f(of)h(n)n
-(umerical)f(axis)h(lab)r(els)f(for)h(a)g(Plot)f(\(whic)n(h)h(indicate)g
-(v)-5 b(alues)20 b(on)g(the)g(axis\))g(is)g(con)n(trolled)427
-683 y(b)n(y)28 b(the)g(NumLab\(axis\))f(attribute.)340
-815 y Fj(\017)45 b Fk(If)36 b(no)g(axis)e(is)i(sp)r(eci\014ed,)i
-(\(e.g.)60 b Ft(")p Fk(T)-7 b(extLab)p Ft(")35 b Fk(instead)g(of)h
-Ft(")p Fk(T)-7 b(extLab\(2\))p Ft(")p Fk(\),)37 b(then)f(a)f
-Ft(")p Fk(set)p Ft(")g Fk(or)f Ft(")p Fk(clear)p Ft(")427
-914 y Fk(op)r(eration)23 b(will)i(a\013ect)f(the)h(attribute)f(v)-5
-b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f
-Ft(")p Fk(get)p Ft(")f Fk(or)g Ft(")p Fk(test)p Ft(")h
-Fk(op)r(eration)427 1014 y(will)k(use)g(just)g(the)g(T)-7
-b(extLab\(1\))27 b(v)-5 b(alue.)p 0 1212 3780 12 v 0
-1350 a FA(T)-11 b(extLabGap\(axis\))1332 1343 y Fd(Spacing)38
-b(of)g(descriptiv)m(e)1360 1458 y(axis)g(lab)s(els)g(for)g(a)g(Plot)
-2714 1350 y FA(T)-11 b(extLabGap\(axis\))0 1627 y Fc(Description:)44
-b Fk(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)
-h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-1726 y(AST)p Ft(_)p Fk(GRID)i(routine\))f(b)n(y)g(determining)h(where)e
-(descriptiv)n(e)h(axis)f(lab)r(els)h(are)g(placed)g(relativ)n(e)f(to)h
-(the)h(axes)227 1826 y(they)f(describ)r(e.)45 b(It)31
-b(tak)n(es)e(a)h(separate)f(v)-5 b(alue)30 b(for)g(eac)n(h)g(ph)n
-(ysical)f(axis)h(of)g(a)g(Plot)g(so)g(that,)h(for)f(instance,)h(the)227
-1925 y(setting)e Ft(")p Fk(T)-7 b(extLabGap\(2\)=0.01)p
-Ft(")25 b Fk(sp)r(eci\014es)k(where)f(the)h(descriptiv)n(e)f(lab)r(el)g
-(for)g(the)h(second)f(axis)g(should)g(b)r(e)227 2025
-y(dra)n(wn.)227 2149 y(F)-7 b(or)27 b(eac)n(h)f(axis,)h(the)g(T)-7
-b(extLabGap)27 b(v)-5 b(alue)27 b(giv)n(es)f(the)h(spacing)f(b)r(et)n
-(w)n(een)i(the)f(descriptiv)n(e)f(lab)r(el)i(and)f(the)g(edge)227
-2249 y(of)k(a)f(b)r(o)n(x)g(enclosing)g(all)g(other)g(parts)g(of)g(the)
-h(annotated)f(grid)g(\(excluding)h(other)f(descriptiv)n(e)g(lab)r
-(els\).)46 b(The)227 2348 y(gap)25 b(is)g(measured)f(to)h(the)h
-(nearest)f(edge)f(of)i(the)f(lab)r(el)h(\(i.e.)36 b(the)26
-b(top)f(or)f(the)i(b)r(ottom\).)37 b(P)n(ositiv)n(e)23
-b(v)-5 b(alues)25 b(cause)227 2448 y(the)32 b(descriptiv)n(e)e(lab)r
-(el)i(to)f(b)r(e)g(placed)g(outside)g(the)h(b)r(ounding)f(b)r(o)n(x,)h
-(while)f(negativ)n(e)f(v)-5 b(alues)31 b(cause)f(it)i(to)f(b)r(e)227
-2548 y(placed)d(inside.)227 2672 y(The)34 b(T)-7 b(extLabGap)32
-b(v)-5 b(alue)33 b(should)g(b)r(e)h(giv)n(en)f(as)f(a)h(fraction)g(of)g
-(the)h(minim)n(um)g(dimension)f(of)g(the)h(plotting)227
-2771 y(area,)26 b(the)i(default)g(v)-5 b(alue)28 b(b)r(eing)g(+0.01.)0
-2920 y Fc(T)m(yp)s(e:)227 3020 y Fk(Floating)f(p)r(oin)n(t.)0
-3168 y Fc(Class)k(Applicabilit)m(y:)259 3304 y(Plot)427
-3404 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-3565 y Fc(Notes:)340 3847 y Fj(\017)45 b Fk(If)25 b(dra)n(wn,)f
-(descriptiv)n(e)g(lab)r(els)g(are)g(alw)n(a)n(ys)e(placed)j(at)f(the)h
-(edges)f(of)g(the)h(plotting)g(area,)e(ev)n(en)h(although)427
-3946 y(the)c(corresp)r(onding)e(n)n(umerical)h(lab)r(els)g(ma)n(y)g(b)r
-(e)h(dra)n(wn)f(along)f(axis)h(lines)h(in)g(the)g(in)n(terior)e(of)i
-(the)g(plotting)427 4046 y(area)26 b(\(see)i(the)g(Lab)r(elling)f
-(attribute\).)340 4178 y Fj(\017)45 b Fk(If)36 b(no)e(axis)g(is)h(sp)r
-(eci\014ed,)i(\(e.g.)58 b Ft(")p Fk(T)-7 b(extLabGap)p
-Ft(")34 b Fk(instead)g(of)h Ft(")p Fk(T)-7 b(extLabGap\(2\))p
-Ft(")p Fk(\),)36 b(then)f(a)f Ft(")p Fk(set)p Ft(")g
-Fk(or)427 4278 y Ft(")p Fk(clear)p Ft(")28 b Fk(op)r(eration)g(will)i
-(a\013ect)g(the)g(attribute)g(v)-5 b(alue)29 b(of)h(all)f(the)h(Plot)f
-(axes,)g(while)h(a)f Ft(")p Fk(get)p Ft(")f Fk(or)h Ft(")p
-Fk(test)p Ft(")427 4377 y Fk(op)r(eration)e(will)h(use)f(just)h(the)g
-(T)-7 b(extLabGap\(1\))27 b(v)-5 b(alue.)p 0 4575 V 0
-4707 a FA(Tic)l(kAll)441 b Fd(Dra)m(w)37 b(tic)m(k)h(marks)g(on)g(all)g
-(edges)h(of)f(a)g(Plot?)439 b FA(Tic)l(kAll)0 4898 y
-Fc(Description:)44 b Fk(This)30 b(attribute)g(con)n(trols)e(the)i(app)r
-(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g
-(with)h(the)227 4998 y(AST)p Ft(_)p Fk(GRID)f(routine\))e(b)n(y)g
-(determining)h(whether)f(tic)n(k)h(marks)e(should)i(b)r(e)g(dra)n(wn)e
-(on)h(all)h(edges)f(of)g(a)g(Plot.)227 5122 y(If)h(the)g(Tic)n(kAll)f
-(v)-5 b(alue)27 b(of)h(a)e(Plot)h(is)g(non-zero)f(\(the)i(default\),)g
-(then)g(tic)n(k)f(marks)g(will)g(b)r(e)h(dra)n(wn)e(on)h(all)g(edges)
-227 5222 y(of)c(the)g(Plot.)35 b(Otherwise,)23 b(they)g(will)g(b)r(e)g
-(dra)n(wn)f(only)g(on)h(those)f(edges)g(where)h(the)g(n)n(umerical)f
-(and)g(descriptiv)n(e)227 5322 y(axis)27 b(lab)r(els)g(are)g(dra)n(wn)g
-(\(see)g(the)h(Edge\(axis\))f(attribute\).)0 5470 y Fc(T)m(yp)s(e:)227
-5570 y Fk(In)n(teger)g(\(b)r(o)r(olean\).)0 5718 y Fc(Class)k
-(Applicabilit)m(y:)p eop end
-%%Page: 464 474
-TeXDict begin 464 473 bop 0 52 a FG(464)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)259 351
-y Fc(Plot)427 451 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-608 y Fc(Notes:)340 886 y Fj(\017)45 b Fk(In)26 b(some)g
-(circumstances,)f(n)n(umerical)g(lab)r(els)h(and)g(tic)n(k)g(marks)f
-(are)g(dra)n(wn)g(along)g(grid)g(lines)h(inside)g(the)427
-986 y(plotting)34 b(area,)g(rather)f(than)h(around)f(its)i(edges)e
-(\(see)h(the)g(Lab)r(elling)g(attribute\).)56 b(In)34
-b(this)g(case,)h(the)427 1085 y(v)-5 b(alue)28 b(of)f(the)h(Tic)n(kAll)
-g(attribute)g(is)f(ignored.)p 0 1276 3780 12 v 0 1407
-a FA(TimeOrigin)153 b Fd(The)35 b(zero)f(p)s(oin)m(t)f(for)h(TimeF)-10
-b(rame)33 b(axis)h(v)-7 b(alues)152 b FA(TimeOrigin)0
-1587 y Fc(Description:)44 b Fk(This)c(sp)r(eci\014es)f(the)g(origin)g
-(from)f(whic)n(h)i(all)f(time)g(v)-5 b(alues)39 b(are)g(measured.)71
-b(The)39 b(default)h(v)-5 b(alue)227 1687 y(\(zero\))24
-b(results)h(in)f(the)h(TimeF)-7 b(rame)25 b(describing)e(absolute)h
-(time)i(v)-5 b(alues)24 b(in)h(the)g(system)f(giv)n(en)g(b)n(y)g(the)h
-(System)227 1786 y(attribute)33 b(\(e.g.)53 b(MJD,)33
-b(Julian)f(ep)r(o)r(c)n(h,)j(etc\).)53 b(If)33 b(a)g(TimeF)-7
-b(rame)32 b(is)h(to)f(b)r(e)i(used)f(to)f(describ)r(e)h(elapsed)f(time)
-227 1886 y(since)f(some)f(origin,)h(the)g(TimeOrigin)f(attribute)h
-(should)f(b)r(e)h(set)g(to)g(hold)g(the)g(required)f(origin)f(v)-5
-b(alue.)47 b(The)227 1985 y(TimeOrigin)18 b(v)-5 b(alue)19
-b(stored)g(inside)g(the)h(TimeF)-7 b(rame)18 b(structure)h(is)g(mo)r
-(di\014ed)h(whenev)n(er)e(TimeF)-7 b(rame)18 b(attribute)227
-2085 y(v)-5 b(alues)27 b(are)g(c)n(hanged)g(so)g(that)g(it)h(refers)f
-(to)h(the)g(original)e(momen)n(t)h(in)h(time.)0 2230
-y Fc(T)m(yp)s(e:)227 2330 y Fk(Floating)f(p)r(oin)n(t.)0
-2474 y Fc(Class)k(Applicabilit)m(y:)259 2606 y(TimeF)-8
-b(rame)427 2706 y Fk(All)28 b(TimeF)-7 b(rames)27 b(ha)n(v)n(e)g(this)h
-(attribute.)-2 2863 y Fc(Input)33 b(F)-8 b(ormats)n(:)227
-3009 y Fk(The)43 b(formats)f(accepted)h(when)g(setting)g(a)f
-(TimeOrigin)g(v)-5 b(alue)43 b(are)f(listed)h(b)r(elo)n(w.)83
-b(They)42 b(are)g(all)h(case-)227 3109 y(insensitiv)n(e)27
-b(and)h(are)f(generally)f(toleran)n(t)g(of)i(extra)e(white)i(space)f
-(and)h(alternativ)n(e)e(\014eld)i(delimiters:)340 3363
-y Fj(\017)45 b Fk(Besselian)33 b(Ep)r(o)r(c)n(h:)48 b(Expressed)32
-b(in)i(decimal)f(y)n(ears,)h(with)g(or)e(without)i(decimal)g(places)f
-(\()p Ft(")p Fk(B1950)p Ft(")d Fk(or)427 3463 y Ft(")p
-Fk(B1976.13)p Ft(")24 b Fk(for)j(example\).)340 3591
-y Fj(\017)45 b Fk(Julian)e(Ep)r(o)r(c)n(h:)67 b(Expressed)42
-b(in)h(decimal)g(y)n(ears,)i(with)e(or)g(without)g(decimal)g(places)f
-(\()p Ft(")p Fk(J2000)p Ft(")e Fk(or)427 3691 y Ft(")p
-Fk(J2100.9)p Ft(")24 b Fk(for)j(example\).)340 3819 y
-Fj(\017)45 b Fk(Units:)62 b(An)40 b(unquali\014ed)g(decimal)f(v)-5
-b(alue)39 b(is)h(in)n(terpreted)f(as)g(a)g(v)-5 b(alue)40
-b(in)g(the)g(system)f(sp)r(eci\014ed)h(b)n(y)427 3918
-y(the)35 b(TimeF)-7 b(rame's)34 b(System)h(attribute,)i(in)e(the)g
-(units)g(giv)n(en)f(b)n(y)g(the)h(TimeF)-7 b(rame's)34
-b(Unit)h(attribute.)427 4018 y(Alternativ)n(ely)-7 b(,)35
-b(an)f(appropriate)e(unit)j(string)e(can)g(b)r(e)i(app)r(ended)f(to)g
-(the)g(end)g(of)g(the)g(\015oating)f(p)r(oin)n(t)427
-4118 y(v)-5 b(alue)20 b(\()p Ft(")p Fk(123.4)d(d)p Ft(")i
-Fk(for)g(example\),)i(in)e(whic)n(h)h(case)e(the)i(supplied)g(v)-5
-b(alue)19 b(is)g(scaled)g(in)n(to)g(the)h(units)f(sp)r(eci\014ed)427
-4217 y(b)n(y)28 b(the)g(Unit)g(attribute.)340 4346 y
-Fj(\017)45 b Fk(Julian)27 b(Date:)38 b(With)28 b(or)f(without)h
-(decimal)f(places)g(\()p Ft(")p Fk(JD)h(2454321.9)p Ft(")23
-b Fk(for)k(example\).)340 4474 y Fj(\017)45 b Fk(Mo)r(di\014ed)28
-b(Julian)f(Date:)37 b(With)29 b(or)e(without)h(decimal)f(places)g(\()p
-Ft(")p Fk(MJD)h(54321.4)p Ft(")c Fk(for)j(example\).)340
-4602 y Fj(\017)45 b Fk(Gregorian)32 b(Calendar)g(Date:)48
-b(With)35 b(the)f(mon)n(th)f(expressed)f(either)i(as)e(an)h(in)n(teger)
-g(or)f(a)h(3-c)n(haracter)427 4702 y(abbreviation,)27
-b(and)g(with)i(optional)e(decimal)g(places)g(to)h(represen)n(t)f(a)g
-(fraction)g(of)h(a)f(da)n(y)g(\()p Ft(")p Fk(1996-10-2)p
-Ft(")427 4801 y Fk(or)f Ft(")p Fk(1996-Oct-2.6)p Ft(")d
-Fk(for)j(example\).)37 b(If)27 b(no)g(fractional)f(part)g(of)h(a)g(da)n
-(y)f(is)h(giv)n(en,)f(the)i(time)f(refers)f(to)h(the)427
-4901 y(start)g(of)h(the)g(da)n(y)f(\(zero)f(hours\).)340
-5029 y Fj(\017)45 b Fk(Gregorian)18 b(Date)h(and)g(Time:)33
-b(An)n(y)20 b(calendar)e(date)h(\(as)g(ab)r(o)n(v)n(e\))f(but)i(with)g
-(a)f(fraction)g(of)g(a)g(da)n(y)g(expressed)427 5129
-y(as)28 b(hours,)h(min)n(utes)g(and)f(seconds)g(\()p
-Ft(")p Fk(1996-Oct-2)e(12:13:56.985)p Ft(")e Fk(for)k(example\).)41
-b(The)29 b(date)f(and)h(time)427 5229 y(can)e(b)r(e)h(separated)f(b)n
-(y)g(a)g(space)g(or)g(b)n(y)g(a)g Ft(")p Fk(T)p Ft(")g
-Fk(\(as)g(used)h(b)n(y)f(ISO8601)f(format\).)-2 5386
-y Fc(Output)32 b(F)-8 b(ormat)n(:)227 5532 y Fk(When)27
-b(enquiring)e(TimeOrigin)g(v)-5 b(alues,)26 b(the)h(returned)e
-(formatted)h(\015oating)f(p)r(oin)n(t)i(v)-5 b(alue)26
-b(represen)n(ts)e(a)i(v)-5 b(alue)227 5632 y(in)28 b(the)g(TimeF)-7
-b(rame's)27 b(System,)h(in)g(the)g(unit)g(sp)r(eci\014ed)g(b)n(y)f(the)
-h(TimeF)-7 b(rame's)27 b(Unit)i(attribute.)p eop end
-%%Page: 465 475
-TeXDict begin 465 474 bop 3643 52 a FG(465)p 0 351 3780
-12 v 0 483 a FA(TimeScale)1014 b Fd(Time)38 b(scale)1013
-b FA(TimeScale)0 644 y Fc(Description:)44 b Fk(This)23
-b(attribute)g(iden)n(ti\014es)f(the)h(time)g(scale)f(to)h(whic)n(h)f
-(the)h(time)g(axis)f(v)-5 b(alues)22 b(of)h(a)f(TimeF)-7
-b(rame)22 b(refer,)227 743 y(and)28 b(ma)n(y)f(tak)n(e)f(an)n(y)h(of)h
-(the)g(v)-5 b(alues)27 b(listed)h(in)g(the)g Ft(")p Fk(Time)f(Scales)p
-Ft(")g Fk(section)g(\(b)r(elo)n(w\).)227 867 y(The)20
-b(default)g(TimeScale)g(v)-5 b(alue)19 b(dep)r(ends)i(on)e(the)h
-(curren)n(t)f(System)h(v)-5 b(alue;)22 b(if)e(the)h(curren)n(t)e(TimeF)
--7 b(rame)19 b(system)227 966 y(is)31 b Ft(")p Fk(Besselian)e(ep)r(o)r
-(c)n(h)p Ft(")h Fk(the)h(default)g(is)f Ft(")p Fk(TT)p
-Ft(")p Fk(,)h(otherwise)e(it)i(is)g Ft(")p Fk(T)-7 b(AI)p
-Ft(")p Fk(.)45 b(Note,)31 b(if)g(the)g(System)g(attribute)g(is)227
-1066 y(set)23 b(so)g(that)g(the)g(TimeF)-7 b(rame)23
-b(represen)n(ts)f(Besselian)g(Ep)r(o)r(c)n(h,)h(then)h(an)f(error)e
-(will)i(b)r(e)g(rep)r(orted)g(if)g(an)g(attempt)227 1165
-y(is)28 b(made)f(to)h(set)f(the)h(TimeScale)f(to)h(an)n(ything)f(other)
-g(than)h(TT.)227 1289 y(Note,)22 b(the)e(supp)r(orted)g(time)h(scales)e
-(fall)h(in)n(to)f(t)n(w)n(o)h(groups.)33 b(The)20 b(\014rst)g(group)e
-(con)n(taining)h(UT1,)j(GMST,)e(LAST)227 1388 y(and)29
-b(LMST)h(de\014ne)f(time)h(in)f(terms)g(of)g(the)g(orien)n(tation)f(of)
-h(the)h(earth.)41 b(The)29 b(second)f(group)g(\(con)n(taining)h(all)227
-1488 y(the)k(remaining)f(time)h(scales\))f(de\014ne)h(time)g(in)g
-(terms)g(of)f(an)h(atomic)f(pro)r(cess.)51 b(Since)33
-b(the)g(rate)f(of)h(rotation)227 1588 y(of)28 b(the)h(earth)e(v)-5
-b(aries)27 b(in)h(an)g(unpredictable)g(w)n(a)n(y)-7 b(,)27
-b(con)n(v)n(ersion)f(b)r(et)n(w)n(een)i(t)n(w)n(o)f(timescales)h(in)g
-(di\013eren)n(t)g(groups)227 1687 y(relies)i(on)f(a)h(v)-5
-b(alue)30 b(b)r(eing)g(supplied)g(for)g(the)g(Dut1)h(attribute)f
-(\(de\014ned)g(b)n(y)g(the)g(paren)n(t)g(F)-7 b(rame)29
-b(class\).)44 b(This)227 1787 y(attribute)30 b(sp)r(eci\014es)g(the)g
-(di\013erence)f(b)r(et)n(w)n(een)h(the)g(UT1)f(and)h(UTC)f(time)i
-(scales,)e(in)h(seconds,)f(and)g(defaults)227 1886 y(to)f(zero.)36
-b(See)27 b(the)h(do)r(cumen)n(tation)f(for)g(the)h(Dut1)g(attribute)g
-(for)f(further)h(details.)0 2033 y Fc(T)m(yp)s(e:)227
-2133 y Fk(String.)0 2280 y Fc(Class)j(Applicabilit)m(y:)259
-2414 y(TimeF)-8 b(rame)427 2514 y Fk(All)28 b(TimeF)-7
-b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)-2 2673 y
-Fc(Time)j(Scales)n(:)227 2819 y Fk(The)d(TimeF)-7 b(rame)27
-b(class)g(supp)r(orts)g(the)h(follo)n(wing)e(TimeScale)i(v)-5
-b(alues)27 b(\(all)h(are)e(case-insensitiv)n(e\):)340
-3076 y Fj(\017)45 b Ft(")p Fk(T)-7 b(AI)p Ft(")27 b Fk(-)h(In)n
-(ternational)e(A)n(tomic)i(Time)340 3207 y Fj(\017)45
-b Ft(")p Fk(UTC)p Ft(")27 b Fk(-)h(Co)r(ordinated)e(Univ)n(ersal)h
-(Time)340 3337 y Fj(\017)45 b Ft(")p Fk(UT1)p Ft(")27
-b Fk(-)g(Univ)n(ersal)g(Time)340 3467 y Fj(\017)45 b
-Ft(")p Fk(GMST)p Ft(")27 b Fk(-)h(Green)n(wic)n(h)e(Mean)i(Sidereal)f
-(Time)340 3598 y Fj(\017)45 b Ft(")p Fk(LAST)p Ft(")27
-b Fk(-)h(Lo)r(cal)f(Apparen)n(t)g(Sidereal)g(Time)340
-3728 y Fj(\017)45 b Ft(")p Fk(LMST)p Ft(")27 b Fk(-)h(Lo)r(cal)e(Mean)i
-(Sidereal)f(Time)340 3859 y Fj(\017)45 b Ft(")p Fk(TT)p
-Ft(")27 b Fk(-)g(T)-7 b(errestrial)26 b(Time)340 3989
-y Fj(\017)45 b Ft(")p Fk(TDB)p Ft(")27 b Fk(-)h(Barycen)n(tric)d
-(Dynamical)j(Time)340 4119 y Fj(\017)45 b Ft(")p Fk(TCB)p
-Ft(")27 b Fk(-)g(Barycen)n(tric)f(Co)r(ordinate)g(Time)340
-4250 y Fj(\017)45 b Ft(")p Fk(TCG)p Ft(")27 b Fk(-)h(Geo)r(cen)n(tric)e
-(Co)r(ordinate)h(Time)340 4380 y Fj(\017)45 b Ft(")p
-Fk(L)-7 b(T)p Ft(")27 b Fk(-)g(Lo)r(cal)g(Time)h(\(the)g(o\013set)g
-(from)f(UTC)h(is)f(giv)n(en)g(b)n(y)h(attribute)f(L)-7
-b(TO\013set\))227 4539 y(An)19 b(v)n(ery)e(informativ)n(e)h
-(description)g(of)g(these)g(and)h(other)e(time)i(scales)f(is)g(a)n(v)-5
-b(ailable)17 b(at)h(h)n(ttp://www.ucolic)n(k.org/)p Fj(\030)p
-Fk(sla/leapsecs/timesca)o(les.h)n(tml.)-2 4686 y Fc(UTC)33
-b(W)-8 b(arnings)n(:)227 4833 y Fk(UTC)31 b(should)g(ideally)f(b)r(e)h
-(expressed)f(using)g(separate)g(hours,)g(min)n(utes)h(and)g(seconds)f
-(\014elds)g(\(or)g(at)h(least)f(in)227 4932 y(seconds)e(for)f(a)h(giv)n
-(en)g(date\))g(if)h(leap)f(seconds)f(are)g(to)h(b)r(e)h(tak)n(en)f(in)n
-(to)g(accoun)n(t.)38 b(Since)28 b(the)h(TimeF)-7 b(rame)28
-b(class)227 5032 y(represen)n(ts)e(eac)n(h)f(momen)n(t)i(in)g(time)g
-(using)g(a)f(single)g(\015oating)g(p)r(oin)n(t)h(n)n(um)n(b)r(er)g
-(\(the)g(axis)f(v)-5 b(alue\))27 b(there)f(will)h(b)r(e)227
-5131 y(an)f(am)n(biguit)n(y)f(during)g(a)h(leap)g(second.)35
-b(Th)n(us)26 b(an)g(error)e(of)i(up)g(to)g(1)f(second)g(can)h(result)g
-(when)g(using)f(AST)i(to)227 5231 y(con)n(v)n(ert)i(a)h(UTC)h(time)f
-(to)h(another)e(time)i(scale)e(if)i(the)g(time)g(o)r(ccurs)e(within)i
-(a)f(leap)g(second.)45 b(Leap)29 b(seconds)227 5331 y(o)r(ccur)f(at)h
-(most)g(t)n(wice)f(a)h(y)n(ear,)e(and)i(are)f(in)n(tro)r(duced)g(to)h
-(tak)n(e)f(accoun)n(t)g(of)h(v)-5 b(ariation)28 b(in)h(the)g(rotation)e
-(of)i(the)227 5430 y(earth.)35 b(The)22 b(most)g(recen)n(t)f(leap)h
-(second)f(o)r(ccurred)g(on)h(1st)f(Jan)n(uary)f(1999.)33
-b(Although)23 b(in)f(the)g(v)-5 b(ast)22 b(ma)5 b(jorit)n(y)21
-b(of)227 5530 y(cases)g(leap)h(second)g(am)n(biguities)f(w)n(on't)h
-(matter,)h(there)f(are)f(p)r(oten)n(tial)h(problems)g(in)g(on-line)g
-(data)f(acquisition)227 5630 y(systems)27 b(and)h(in)g(critical)f
-(applications)f(in)n(v)n(olving)g(taking)h(the)h(di\013erence)g(b)r(et)
-n(w)n(een)g(t)n(w)n(o)e(times.)p eop end
-%%Page: 466 476
-TeXDict begin 466 475 bop 0 52 a FG(466)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a FA(Title)1325 b Fd(F)-10 b(rame)38
-b(title)1323 b FA(Title)0 668 y Fc(Description:)44 b
-Fk(This)25 b(attribute)g(holds)g(a)f(string)g(whic)n(h)h(is)g(used)f
-(as)h(a)f(title)i(in)f(\(e.g.\))36 b(graphical)23 b(output)i(to)g
-(describ)r(e)227 767 y(the)32 b(co)r(ordinate)d(system)i(whic)n(h)g(a)f
-(F)-7 b(rame)31 b(represen)n(ts.)45 b(Examples)30 b(migh)n(t)h(b)r(e)g
-Ft(")p Fk(Detector)f(Co)r(ordinates)p Ft(")f Fk(or)227
-867 y Ft(")p Fk(Galactic)e(Co)r(ordinates)p Ft(")p Fk(.)227
-999 y(If)g(a)f(Title)h(v)-5 b(alue)26 b(has)g(not)g(b)r(een)h(set)f
-(for)g(a)g(F)-7 b(rame,)26 b(then)g(a)g(suitable)h(default)f(is)h
-(supplied,)g(dep)r(ending)f(on)g(the)227 1098 y(class)h(of)g(the)h(F)-7
-b(rame.)0 1262 y Fc(T)m(yp)s(e:)227 1362 y Fk(String.)0
-1526 y Fc(Class)31 b(Applicabilit)m(y:)259 1677 y(F)-8
-b(rame)427 1777 y Fk(The)33 b(default)g(supplied)g(b)n(y)f(the)h(F)-7
-b(rame)32 b(class)g(is)g Ft(")p Fm(<)p Fk(n)p Fm(>)p
-Fk(-d)f(co)r(ordinate)h(system)p Ft(")p Fk(,)h(where)f
-Fm(<)p Fk(n)p Fm(>)g Fk(is)g(the)427 1876 y(n)n(um)n(b)r(er)c(of)f(F)-7
-b(rame)27 b(axes)g(\(Naxes)g(attribute\).)259 2016 y
-Fc(CmpF)-8 b(rame)427 2116 y Fk(The)30 b(CmpF)-7 b(rame)30
-b(class)f(re-de\014nes)g(the)h(default)h(Title)f(v)-5
-b(alue)30 b(to)g(b)r(e)g Ft(")p Fm(<)p Fk(n)p Fm(>)p
-Fk(-d)f(comp)r(ound)h(co)r(ordinate)427 2216 y(system)p
-Ft(")p Fk(,)d(where)g Fm(<)p Fk(n)p Fm(>)g Fk(is)h(the)g(n)n(um)n(b)r
-(er)f(of)h(CmpF)-7 b(rame)27 b(axes)g(\(Naxes)g(attribute\).)259
-2356 y Fc(F)-8 b(rameSet)427 2455 y Fk(The)32 b(Title)g(attribute)f(of)
-h(a)f(F)-7 b(rameSet)31 b(is)h(the)g(same)f(as)f(that)i(of)g(its)f
-(curren)n(t)g(F)-7 b(rame)31 b(\(as)g(sp)r(eci\014ed)h(b)n(y)427
-2555 y(the)c(Curren)n(t)f(attribute\).)0 2732 y Fc(Notes:)340
-3029 y Fj(\017)45 b Fk(A)28 b(F)-7 b(rame's)26 b(Title)h(is)g(in)n
-(tended)h(purely)e(for)h(in)n(terpretation)f(b)n(y)h(h)n(uman)f
-(readers)g(and)h(not)g(b)n(y)f(soft)n(w)n(are.)p 0 3242
-V 0 3374 a FA(TitleGap)567 b Fd(V)-10 b(ertical)36 b(spacing)i(for)g(a)
-h(Plot)e(title)564 b FA(TitleGap)0 3582 y Fc(Description:)44
-b Fk(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)
-h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-3682 y(AST)p Ft(_)p Fk(GRID)f(routine\))e(b)n(y)g(determining)h(where)f
-(the)h(title)g(of)g(a)f(Plot)g(is)g(dra)n(wn.)227 3814
-y(Its)32 b(v)-5 b(alue)31 b(giv)n(es)g(the)h(spacing)e(b)r(et)n(w)n
-(een)i(the)g(b)r(ottom)f(edge)g(of)h(the)g(title)g(and)f(the)h(top)g
-(edge)f(of)g(a)h(b)r(ounding)227 3913 y(b)r(o)n(x)23
-b(con)n(taining)f(all)h(the)h(other)f(parts)f(of)i(the)f(annotated)g
-(grid.)35 b(P)n(ositiv)n(e)22 b(v)-5 b(alues)22 b(cause)h(the)h(title)g
-(to)f(b)r(e)h(dra)n(wn)227 4013 y(outside)k(the)g(b)r(o)n(x,)f(while)h
-(negativ)n(e)e(v)-5 b(alues)27 b(cause)g(it)h(to)g(b)r(e)g(dra)n(wn)e
-(inside.)227 4145 y(The)j(TitleGap)f(v)-5 b(alue)28 b(should)h(b)r(e)f
-(giv)n(en)g(as)g(a)f(fraction)h(of)h(the)f(minim)n(um)h(dimension)g(of)
-f(the)h(plotting)f(area,)227 4244 y(the)g(default)g(v)-5
-b(alue)28 b(b)r(eing)f(+0.05.)0 4408 y Fc(T)m(yp)s(e:)227
-4508 y Fk(Floating)g(p)r(oin)n(t.)0 4672 y Fc(Class)k(Applicabilit)m
-(y:)259 4823 y(Plot)427 4923 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)259 5063 y Fc(Plot3D)427 5162 y Fk(The)h(Plot3D)f(class)g
-(ignores)f(this)h(attributes)h(since)f(it)h(do)r(es)g(not)f(dra)n(w)g
-(a)g(Title.)0 5339 y Fc(Notes:)340 5636 y Fj(\017)45
-b Fk(The)28 b(text)g(used)f(for)h(the)g(title)g(is)f(obtained)h(from)f
-(the)h(Plot's)f(Title)h(attribute.)p eop end
-%%Page: 467 477
-TeXDict begin 467 476 bop 3643 52 a FG(467)p 0 351 3780
-12 v 0 483 a FA(T)-11 b(ol)1243 b Fd(Plotting)36 b(tolerance)1242
-b FA(T)-11 b(ol)0 679 y Fc(Description:)44 b Fk(This)28
-b(attribute)f(sp)r(eci\014es)h(the)f(plotting)h(tolerance)e(\(or)h
-(resolution\))f(to)h(b)r(e)h(used)g(for)e(the)i(graphical)227
-779 y(output)f(pro)r(duced)e(b)n(y)g(a)h(Plot.)35 b(Smaller)26
-b(v)-5 b(alues)25 b(will)h(result)f(in)h(smo)r(other)f(and)h(more)f
-(accurate)f(curv)n(es)h(b)r(eing)227 878 y(dra)n(wn,)c(but)f(ma)n(y)f
-(slo)n(w)f(do)n(wn)h(the)h(plotting)g(pro)r(cess.)33
-b(Con)n(v)n(ersely)-7 b(,)19 b(larger)f(v)-5 b(alues)19
-b(ma)n(y)g(sp)r(eed)h(up)g(the)g(plotting)227 978 y(pro)r(cess)27
-b(in)h(cases)e(where)h(high)h(resolution)e(is)i(not)f(required.)227
-1104 y(The)k(T)-7 b(ol)31 b(v)-5 b(alue)31 b(should)g(b)r(e)h(giv)n(en)
-e(as)h(a)f(fraction)h(of)g(the)g(minim)n(um)h(dimension)f(of)g(the)h
-(plotting)f(area,)g(and)227 1204 y(should)d(lie)f(in)h(the)g(range)e
-(from)i(1.0E-7)d(to)j(1.0.)36 b(By)27 b(default,)h(a)f(v)-5
-b(alue)28 b(of)f(0.01)g(is)g(used.)0 1356 y Fc(T)m(yp)s(e:)227
-1455 y Fk(Floating)g(p)r(oin)n(t.)0 1608 y Fc(Class)k(Applicabilit)m
-(y:)259 1747 y(Plot)427 1846 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)p 0 2049 V 0 2187 a FA(T)-11 b(op\(axis\))1156
-2180 y Fd(Highest)37 b(axis)h(v)-7 b(alue)39 b(to)f(displa)m(y)3224
-2187 y FA(T)-11 b(op\(axis\))0 2390 y Fc(Description:)44
-b Fk(This)21 b(attribute)f(giv)n(es)f(the)i(highest)f(axis)f(v)-5
-b(alue)20 b(to)g(b)r(e)h(displa)n(y)n(ed)e(\(for)h(instance,)h(b)n(y)f
-(the)h(AST)p Ft(_)p Fk(GRID)227 2489 y(metho)r(d\).)0
-2642 y Fc(T)m(yp)s(e:)227 2741 y Fk(Floating)27 b(p)r(oin)n(t.)0
-2893 y Fc(Class)k(Applicabilit)m(y:)259 3033 y(F)-8 b(rame)427
-3132 y Fk(The)28 b(default)g(supplied)g(b)n(y)f(the)h(F)-7
-b(rame)27 b(class)g(is)g(to)h(displa)n(y)f(all)g(axis)g(v)-5
-b(alues,)27 b(without)h(an)n(y)f(limit.)259 3266 y Fc(SkyF)-8
-b(rame)427 3366 y Fk(The)34 b(SkyF)-7 b(rame)32 b(class)g(re-de\014nes)
-h(the)g(default)h(T)-7 b(op)33 b(v)-5 b(alue)33 b(to)g(+90)f(degrees)g
-(for)g(latitude)i(axes,)g(and)427 3466 y(180)26 b(degrees)g(for)h
-(co-latitude)g(axes.)36 b(The)28 b(default)f(for)g(longitude)h(axes)e
-(is)h(to)h(displa)n(y)e(all)h(axis)g(v)-5 b(alues.)0
-3630 y Fc(Notes:)340 3916 y Fj(\017)45 b Fk(When)36 b(sp)r(ecifying)f
-(this)h(attribute)f(b)n(y)g(name,)i(it)f(should)f(b)r(e)h(subscripted)f
-(with)g(the)h(n)n(um)n(b)r(er)f(of)g(the)427 4015 y(F)-7
-b(rame)27 b(axis)g(to)h(whic)n(h)f(it)h(applies.)p 0
-4217 V 0 4349 a FA(T)-11 b(ranF)g(orw)l(ard)289 b Fd(F)-10
-b(orw)m(ard)37 b(transformation)e(de\014ned?)290 b FA(T)-11
-b(ranF)g(orw)l(ard)0 4517 y Fc(Description:)44 b Fk(This)29
-b(attribute)f(indicates)h(whether)f(a)g(Mapping)g(is)h(able)f(to)g
-(transform)f(co)r(ordinates)g(in)i(the)g Ft(")p Fk(for-)227
-4617 y(w)n(ard)p Ft(")34 b Fk(direction)g(\(i.e.)60 b(con)n(v)n(erting)
-33 b(input)i(co)r(ordinates)f(in)n(to)h(output)g(co)r(ordinates\).)58
-b(If)35 b(this)h(attribute)f(is)227 4717 y(non-zero,)26
-b(the)i(forw)n(ard)e(transformation)g(is)i(a)n(v)-5 b(ailable.)35
-b(Otherwise,)27 b(it)h(is)f(not.)0 4869 y Fc(T)m(yp)s(e:)227
-4968 y Fk(In)n(teger)g(\(b)r(o)r(olean\),)h(read-only)-7
-b(.)0 5121 y Fc(Class)31 b(Applicabilit)m(y:)259 5260
-y(Mapping)427 5360 y Fk(All)d(Mappings)f(ha)n(v)n(e)g(this)h
-(attribute.)259 5494 y Fc(CmpMap)427 5593 y Fk(The)j(T)-7
-b(ranF)g(orw)n(ard)28 b(attribute)j(v)-5 b(alue)30 b(for)h(a)f(CmpMap)h
-(is)f(giv)n(en)g(b)n(y)g(the)h(b)r(o)r(olean)f(AND)i(of)f(the)g(v)-5
-b(alue)427 5693 y(for)27 b(eac)n(h)g(comp)r(onen)n(t)g(Mapping.)p
-eop end
-%%Page: 468 478
-TeXDict begin 468 477 bop 0 52 a FG(468)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)259 351
-y Fc(F)-8 b(rameSet)427 451 y Fk(The)31 b(T)-7 b(ranF)g(orw)n(ard)27
-b(attribute)k(of)f(a)g(F)-7 b(rameSet)30 b(applies)g(to)g(the)h
-(transformation)e(whic)n(h)h(con)n(v)n(erts)f(b)r(e-)427
-551 y(t)n(w)n(een)22 b(the)g(F)-7 b(rameSet's)22 b(base)f(F)-7
-b(rame)22 b(and)g(its)g(curren)n(t)f(F)-7 b(rame)21 b(\(as)h(sp)r
-(eci\014ed)g(b)n(y)g(the)g(Base)g(and)f(Curren)n(t)427
-650 y(attributes\).)37 b(This)27 b(v)-5 b(alue)27 b(is)g(giv)n(en)g(b)n
-(y)g(the)g(b)r(o)r(olean)g(AND)h(of)f(the)h(T)-7 b(ranF)g(orw)n(ard)24
-b(v)-5 b(alues)27 b(whic)n(h)g(apply)427 750 y(to)33
-b(eac)n(h)f(of)g(the)h(individual)g(sub-Mappings)f(required)f(to)i(p)r
-(erform)f(this)h(con)n(v)n(ersion.)50 b(The)32 b(T)-7
-b(ranF)g(or-)427 849 y(w)n(ard)25 b(attribute)h(v)-5
-b(alue)26 b(for)g(a)f(F)-7 b(rameSet)26 b(ma)n(y)f(therefore)g(c)n
-(hange)g(if)h(a)g(new)g(Base)f(or)g(Curren)n(t)g(F)-7
-b(rame)26 b(is)427 949 y(selected.)0 1106 y Fc(Notes:)340
-1383 y Fj(\017)45 b Fk(An)38 b(error)e(will)i(result)f(if)h(a)f
-(Mapping)h(with)g(a)f(T)-7 b(ranF)g(orw)n(ard)35 b(v)-5
-b(alue)37 b(of)h(zero)e(is)i(used)f(to)h(transform)427
-1483 y(co)r(ordinates)26 b(in)i(the)g(forw)n(ard)e(direction.)p
-0 1672 3780 12 v 0 1802 a FA(T)-11 b(ranIn)l(v)l(erse)1083
-1803 y Fd(In)m(v)m(erse)38 b(transformation)c(de\014ned?)3083
-1802 y FA(T)-11 b(ranIn)l(v)l(erse)0 1958 y Fc(Description:)44
-b Fk(This)31 b(attribute)g(indicates)g(whether)f(a)h(Mapping)f(is)h
-(able)f(to)h(transform)f(co)r(ordinates)f(in)i(the)g
-Ft(")p Fk(in-)227 2058 y(v)n(erse)p Ft(")26 b Fk(direction)i(\(i.e.)38
-b(con)n(v)n(erting)26 b(output)j(co)r(ordinates)d(bac)n(k)h(in)n(to)h
-(input)g(co)r(ordinates\).)37 b(If)28 b(this)g(attribute)227
-2158 y(is)g(non-zero,)e(the)i(in)n(v)n(erse)e(transformation)g(is)h(a)n
-(v)-5 b(ailable.)36 b(Otherwise,)27 b(it)h(is)f(not.)0
-2302 y Fc(T)m(yp)s(e:)227 2402 y Fk(In)n(teger)g(\(b)r(o)r(olean\),)h
-(readonly)-7 b(.)0 2546 y Fc(Class)31 b(Applicabilit)m(y:)259
-2677 y(Mapping)427 2777 y Fk(All)d(Mappings)f(ha)n(v)n(e)g(this)h
-(attribute.)259 2904 y Fc(CmpMap)427 3004 y Fk(The)e(T)-7
-b(ranIn)n(v)n(erse)23 b(attribute)i(v)-5 b(alue)25 b(for)g(a)g(CmpMap)g
-(is)h(giv)n(en)e(b)n(y)h(the)h(b)r(o)r(olean)f(AND)h(of)f(the)h(v)-5
-b(alue)25 b(for)427 3103 y(eac)n(h)i(comp)r(onen)n(t)g(Mapping.)259
-3231 y Fc(F)-8 b(rameSet)427 3331 y Fk(The)19 b(T)-7
-b(ranIn)n(v)n(erse)17 b(attribute)i(of)g(a)g(F)-7 b(rameSet)19
-b(applies)g(to)f(the)i(transformation)d(whic)n(h)i(con)n(v)n(erts)f(b)r
-(et)n(w)n(een)427 3430 y(the)39 b(F)-7 b(rameSet's)38
-b(curren)n(t)g(F)-7 b(rame)38 b(and)g(its)g(base)g(F)-7
-b(rame)38 b(\(as)g(sp)r(eci\014ed)h(b)n(y)f(the)h(Curren)n(t)e(and)i
-(Base)427 3530 y(attributes\).)45 b(This)30 b(v)-5 b(alue)30
-b(is)f(giv)n(en)h(b)n(y)f(the)i(b)r(o)r(olean)e(AND)i(of)f(the)h(T)-7
-b(ranIn)n(v)n(erse)27 b(v)-5 b(alues)30 b(whic)n(h)g(apply)427
-3630 y(to)25 b(eac)n(h)e(of)i(the)g(individual)f(sub-Mappings)g
-(required)g(to)g(p)r(erform)g(this)h(con)n(v)n(ersion.)33
-b(The)25 b(T)-7 b(ranIn)n(v)n(erse)427 3729 y(attribute)40
-b(v)-5 b(alue)39 b(for)g(a)h(F)-7 b(rameSet)39 b(ma)n(y)g(therefore)f
-(c)n(hange)h(if)h(a)f(new)h(Base)e(or)h(Curren)n(t)g(F)-7
-b(rame)39 b(is)427 3829 y(selected.)0 3986 y Fc(Notes:)340
-4263 y Fj(\017)45 b Fk(An)c(error)e(will)h(result)g(if)h(a)f(Mapping)g
-(with)h(a)f(T)-7 b(ranIn)n(v)n(erse)38 b(v)-5 b(alue)40
-b(of)h(zero)e(is)h(used)h(to)f(transform)427 4363 y(co)r(ordinates)26
-b(in)i(the)g(in)n(v)n(erse)e(direction.)p 0 4551 V 0
-4690 a FA(Unit\(axis\))1404 4683 y Fd(Axis)39 b(ph)m(ysical)e(units)
-3180 4690 y FA(Unit\(axis\))0 4875 y Fc(Description:)44
-b Fk(This)35 b(attribute)f(con)n(tains)f(a)h(textual)g(represen)n
-(tation)f(of)h(the)h(ph)n(ysical)e(units)i(used)f(to)g(represen)n(t)227
-4974 y(co)r(ordinate)29 b(v)-5 b(alues)29 b(on)h(a)f(particular)f(axis)
-h(of)h(a)f(F)-7 b(rame.)43 b(The)29 b(AST)p Ft(_)p Fk(SET)-7
-b(A)n(CTIVEUNIT)30 b(routine)f(con)n(trols)227 5074 y(ho)n(w)e(the)h
-(Unit)h(v)-5 b(alues)27 b(are)f(used.)0 5218 y Fc(T)m(yp)s(e:)227
-5318 y Fk(String.)0 5462 y Fc(Class)31 b(Applicabilit)m(y:)259
-5593 y(F)-8 b(rame)427 5693 y Fk(The)28 b(default)g(supplied)g(b)n(y)f
-(the)h(F)-7 b(rame)27 b(class)g(is)g(an)h(empt)n(y)f(string.)p
-eop end
-%%Page: 469 479
-TeXDict begin 469 478 bop 3643 52 a FG(469)259 351 y
-Fc(SkyF)-8 b(rame)427 451 y Fk(The)35 b(SkyF)-7 b(rame)34
-b(class)g(re-de\014nes)g(the)h(default)g(Unit)g(v)-5
-b(alue)35 b(\(e.g.)58 b(to)35 b Ft(")p Fk(hh:mm:ss.sss)p
-Ft(")p Fk(\))e(to)i(describ)r(e)427 551 y(the)g(c)n(haracter)e(string)h
-(returned)g(b)n(y)h(the)g(AST)p Ft(_)p Fk(F)n(ORMA)-7
-b(T)34 b(function)i(when)f(formatting)f(co)r(ordinate)427
-650 y(v)-5 b(alues.)259 778 y Fc(Sp)s(ecF)d(rame)427
-877 y Fk(The)24 b(Sp)r(ecF)-7 b(rame)23 b(class)g(re-de\014nes)f(the)i
-(default)g(Unit)g(v)-5 b(alue)24 b(so)f(that)g(it)h(is)g(appropriate)e
-(for)h(the)g(curren)n(t)427 977 y(System)30 b(v)-5 b(alue.)43
-b(See)29 b(the)h(System)g(attribute)g(for)f(details.)42
-b(An)30 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)h(an)f(attempt)427
-1076 y(is)f(made)f(to)h(use)f(an)g(inappropriate)f(Unit.)259
-1204 y Fc(TimeF)-8 b(rame)427 1303 y Fk(The)22 b(TimeF)-7
-b(rame)22 b(class)f(re-de\014nes)h(the)g(default)h(Unit)g(v)-5
-b(alue)22 b(so)f(that)h(it)h(is)f(appropriate)e(for)i(the)g(curren)n(t)
-427 1403 y(System)30 b(v)-5 b(alue.)43 b(See)29 b(the)h(System)g
-(attribute)g(for)f(details.)42 b(An)30 b(error)e(will)i(b)r(e)g(rep)r
-(orted)f(if)h(an)f(attempt)427 1503 y(is)f(made)f(to)h(use)f(an)g
-(inappropriate)f(Unit)j(\(e.g.)37 b Ft(")p Fk(km)p Ft(")p
-Fk(\).)259 1630 y Fc(F)-8 b(rameSet)427 1730 y Fk(The)29
-b(Unit)h(attribute)f(of)g(a)g(F)-7 b(rameSet)29 b(axis)f(is)h(the)h
-(same)e(as)g(that)i(of)f(its)g(curren)n(t)f(F)-7 b(rame)29
-b(\(as)f(sp)r(eci\014ed)427 1829 y(b)n(y)g(the)g(Curren)n(t)e
-(attribute\).)0 1986 y Fc(Notes:)340 2263 y Fj(\017)45
-b Fk(When)36 b(sp)r(ecifying)f(this)h(attribute)f(b)n(y)g(name,)i(it)f
-(should)f(b)r(e)h(subscripted)f(with)g(the)h(n)n(um)n(b)r(er)f(of)g
-(the)427 2362 y(F)-7 b(rame)27 b(axis)g(to)h(whic)n(h)f(it)h(applies.)p
-0 2551 3780 12 v 0 2683 a FA(UnitRadius)318 b Fd(SphMap)39
-b(input)f(v)m(ectors)g(lie)g(on)g(a)h(unit)1699 2797
-y(sphere?)3106 2683 y FA(UnitRadius)0 2975 y Fc(Description:)44
-b Fk(This)30 b(is)f(a)g(b)r(o)r(olean)g(attribute)h(whic)n(h)f
-(indicates)h(whether)f(the)h(3-dimensional)e(v)n(ectors)g(whic)n(h)i
-(are)227 3075 y(supplied)i(as)f(input)i(to)e(a)g(SphMap)h(are)f(kno)n
-(wn)g(to)g(alw)n(a)n(ys)f(ha)n(v)n(e)g(unit)i(length,)h(so)e(that)h
-(they)g(lie)f(on)h(a)f(unit)227 3174 y(sphere)c(cen)n(tred)g(on)h(the)g
-(origin.)227 3296 y(If)36 b(this)h(condition)e(is)h(true)g(\(indicated)
-g(b)n(y)f(setting)h(UnitRadius)g(non-zero\),)h(it)f(implies)g(that)g(a)
-g(CmpMap)227 3396 y(whic)n(h)e(is)g(comp)r(osed)f(of)h(a)g(SphMap)g
-(applied)g(in)g(the)g(forw)n(ard)f(direction)g(follo)n(w)n(ed)g(b)n(y)h
-(a)f(similar)g(SphMap)227 3495 y(applied)22 b(in)h(the)f(in)n(v)n(erse)
-f(direction)h(ma)n(y)f(b)r(e)i(simpli\014ed)f(\(e.g.)35
-b(b)n(y)22 b(AST)p Ft(_)p Fk(SIMPLIFY\))g(to)g(b)r(ecome)g(a)g
-(UnitMap.)227 3595 y(This)j(is)f(b)r(ecause)g(the)h(input)g(and)f
-(output)h(v)n(ectors)e(will)h(b)r(oth)h(ha)n(v)n(e)e(unit)i(length)g
-(and)f(will)h(therefore)e(ha)n(v)n(e)g(the)227 3695 y(same)k(co)r
-(ordinate)g(v)-5 b(alues.)227 3816 y(If)35 b(UnitRadius)g(is)g(zero)e
-(\(the)j(default\),)h(then)e(although)f(the)h(output)g(v)n(ector)e(pro)
-r(duced)h(b)n(y)h(the)g(CmpMap)227 3916 y(\(ab)r(o)n(v)n(e\))25
-b(will)g(still)g(ha)n(v)n(e)f(unit)i(length,)g(the)f(input)h(v)n(ector)
-e(ma)n(y)g(not)h(ha)n(v)n(e.)35 b(This)25 b(will,)h(in)f(general,)f(c)n
-(hange)g(the)227 4016 y(co)r(ordinate)j(v)-5 b(alues,)27
-b(so)g(it)h(prev)n(en)n(ts)e(the)i(pair)f(of)h(SphMaps)f(b)r(eing)h
-(simpli\014ed.)0 4160 y Fc(T)m(yp)s(e:)227 4259 y Fk(In)n(teger)f(\(b)r
-(o)r(olean\).)0 4403 y Fc(Class)k(Applicabilit)m(y:)259
-4534 y(SphMap)427 4634 y Fk(All)d(SphMaps)g(ha)n(v)n(e)e(this)i
-(attribute.)0 4790 y Fc(Notes:)340 5067 y Fj(\017)45
-b Fk(This)28 b(attribute)g(is)g(in)n(tended)h(mainly)e(for)h(use)g
-(when)g(SphMaps)g(are)e(in)n(v)n(olv)n(ed)h(in)h(a)g(sequence)f(of)h
-(Map-)427 5167 y(pings)35 b(whic)n(h)g(pro)5 b(ject)34
-b(\(e.g.\))59 b(a)35 b(dataset)f(on)h(to)g(the)g(celestial)g(sphere.)58
-b(By)35 b(regarding)e(the)i(celestial)427 5267 y(sphere)24
-b(as)f(a)h(unit)h(sphere)e(\(and)h(setting)g(UnitRadius)h(to)f(b)r(e)g
-(non-zero\))f(it)i(b)r(ecomes)e(p)r(ossible)h(to)g(cancel)427
-5366 y(the)31 b(SphMaps)g(presen)n(t,)f(along)g(with)h(asso)r(ciated)e
-(sky)h(pro)5 b(jections,)30 b(when)g(t)n(w)n(o)g(datasets)g(are)f
-(aligned)427 5466 y(using)f(celestial)f(co)r(ordinates.)35
-b(This)28 b(often)g(considerably)e(impro)n(v)n(es)f(p)r(erformance.)340
-5593 y Fj(\017)45 b Fk(Suc)n(h)29 b(a)g(situations)f(often)i(arises)d
-(when)i(in)n(terpreting)f(FITS)i(data)e(and)h(is)g(handled)g
-(automatically)f(b)n(y)427 5693 y(the)g(FitsChan)g(class.)p
-eop end
-%%Page: 470 480
-TeXDict begin 470 479 bop 0 52 a FG(470)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)340 351
-y Fj(\017)45 b Fk(The)28 b(v)-5 b(alue)27 b(of)g(the)h(UnitRadius)g
-(attribute)g(is)f(used)g(only)g(to)h(con)n(trol)e(the)i
-(simpli\014cation)f(of)g(Mappings)427 451 y(and)i(has)f(no)h(e\013ect)g
-(on)g(the)g(v)-5 b(alue)28 b(of)h(the)g(co)r(ordinates)f(transformed)f
-(b)n(y)i(a)f(SphMap.)41 b(The)29 b(lengths)g(of)427 551
-y(the)f(input)f(3-dimensional)f(Cartesian)f(v)n(ectors)h(supplied)h
-(are)f(alw)n(a)n(ys)f(ignored,)h(ev)n(en)g(if)h(UnitRadius)h(is)427
-650 y(non-zero.)p 0 855 3780 12 v 0 986 a FA(UseDefs)262
-b Fd(Use)39 b(default)f(v)-7 b(alues)38 b(for)g(unsp)s(eci\014ed)h
-(attributes?)259 b FA(UseDefs)0 1181 y Fc(Description:)44
-b Fk(This)36 b(attribute)h(sp)r(eci\014es)e(whether)h(default)h(v)-5
-b(alues)35 b(should)h(b)r(e)h(used)f(in)n(ternally)f(for)g(ob)5
-b(ject)36 b(at-)227 1280 y(tributes)41 b(whic)n(h)g(ha)n(v)n(e)f(not)h
-(b)r(een)g(assigned)f(a)h(v)-5 b(alue)40 b(explicitly)-7
-b(.)77 b(If)42 b(a)e(non-zero)g(v)-5 b(alue)40 b(\(the)i(default\))g
-(is)227 1380 y(supplied)26 b(for)f(UseDefs,)h(then)g(default)g(v)-5
-b(alues)24 b(will)i(b)r(e)g(used)f(for)g(attributes)g(whic)n(h)g(ha)n
-(v)n(e)f(not)i(explicitly)f(b)r(een)227 1479 y(assigned)i(a)h(v)-5
-b(alue.)39 b(If)29 b(zero)f(is)g(supplied)g(for)g(UseDefs,)h(then)g(an)
-f(error)f(will)h(b)r(e)h(rep)r(orted)f(if)h(an)f(attribute)g(for)227
-1579 y(whic)n(h)g(no)f(explicit)h(v)-5 b(alue)27 b(has)h(b)r(een)g
-(supplied)f(is)h(needed)g(in)n(ternally)f(within)h(AST.)227
-1706 y(Man)n(y)20 b(attributes)g(\(including)g(the)h(UseDefs)g
-(attribute)f(itself)6 b(\))21 b(are)e(una\013ected)i(b)n(y)f(the)g
-(setting)h(of)f(the)g(UseDefs)227 1806 y(attribute,)28
-b(and)g(default)g(v)-5 b(alues)27 b(will)h(alw)n(a)n(ys)e(b)r(e)i(used)
-g(without)g(error)e(for)h(suc)n(h)g(attributes.)37 b(The)28
-b Ft(")p Fk(Applica-)227 1906 y(bilit)n(y:)p Ft(")g Fk(section)f(b)r
-(elo)n(w)g(lists)h(the)g(attributes)f(whic)n(h)h(are)e(a\013ected)i(b)n
-(y)f(the)h(setting)g(of)g(UseDefs.)227 2033 y(Note,)23
-b(UseDefs)f(only)f(a\013ects)g(access)f(to)i(attributes)f(in)n
-(ternally)g(within)h(AST.)g(The)f(public)h(accessor)d(functions)227
-2132 y(suc)n(h)24 b(as)f(AST)p Ft(_)p Fk(GETC)h(is)g(una\013ected)g(b)n
-(y)g(the)g(UseDefs)g(attribute)h(-)e(default)i(v)-5 b(alues)23
-b(will)i(alw)n(a)n(ys)d(b)r(e)i(returned)227 2232 y(if)39
-b(no)g(v)-5 b(alue)38 b(has)g(b)r(een)h(set.)70 b(Application)39
-b(co)r(de)f(should)g(use)h(the)g(AST)p Ft(_)p Fk(TEST)f(function)h(if)g
-(required)f(to)227 2332 y(determine)28 b(if)g(a)f(v)-5
-b(alue)28 b(has)f(b)r(een)h(set)f(for)g(an)h(attribute.)0
-2486 y Fc(T)m(yp)s(e:)227 2586 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-2741 y Fc(Class)k(Applicabilit)m(y:)259 2883 y(Ob)5 b(ject)427
-2982 y Fk(All)24 b(Ob)5 b(jects)22 b(ha)n(v)n(e)g(this)i(attribute,)g
-(but)g(ignore)d(its)j(setting)f(except)g(as)f(describ)r(ed)h(b)r(elo)n
-(w)g(for)f(individual)427 3082 y(classes.)259 3217 y
-Fc(F)-8 b(rameSet)427 3317 y Fk(The)23 b(default)f(v)-5
-b(alue)22 b(of)h(UseDefs)f(for)g(a)g(F)-7 b(rameSet)22
-b(is)g(rede\014ned)g(to)g(b)r(e)h(the)f(UseDefs)h(v)-5
-b(alue)22 b(of)g(its)g(curren)n(t)427 3417 y(F)-7 b(rame.)259
-3552 y Fc(CmpF)f(rame)427 3652 y Fk(The)26 b(default)g(v)-5
-b(alue)25 b(of)h(UseDefs)g(for)f(a)g(CmpF)-7 b(rame)26
-b(is)f(rede\014ned)h(to)f(b)r(e)h(the)g(UseDefs)g(v)-5
-b(alue)26 b(of)f(its)h(\014rst)427 3751 y(comp)r(onen)n(t)i(F)-7
-b(rame.)259 3887 y Fc(Region)427 3986 y Fk(The)30 b(default)f(v)-5
-b(alue)29 b(of)g(UseDefs)h(for)f(a)f(Region)h(is)g(rede\014ned)g(to)g
-(b)r(e)h(the)f(UseDefs)h(v)-5 b(alue)29 b(of)g(its)g(encap-)427
-4086 y(sulated)f(F)-7 b(rame.)259 4222 y Fc(F)f(rame)427
-4321 y Fk(If)24 b(UseDefs)g(is)f(zero,)g(an)g(error)e(is)j(rep)r(orted)
-e(when)i(aligning)e(F)-7 b(rames)22 b(if)i(the)g(Ep)r(o)r(c)n(h,)g
-(ObsLat)e(or)h(ObsLon)427 4421 y(attribute)28 b(is)g(required)e(but)i
-(has)f(not)h(b)r(een)g(assigned)e(a)i(v)-5 b(alue)27
-b(explicitly)-7 b(.)259 4556 y Fc(SkyF)f(rame)427 4656
-y Fk(If)41 b(UseDefs)f(is)g(zero,)h(an)f(error)e(is)h(rep)r(orted)h
-(when)g(aligning)e(SkyF)-7 b(rames)39 b(if)i(an)n(y)e(of)g(the)i(follo)
-n(wing)427 4756 y(attributes)28 b(are)e(required)h(but)h(ha)n(v)n(e)f
-(not)g(b)r(een)h(assigned)f(a)g(v)-5 b(alue)27 b(explicitly:)37
-b(Ep)r(o)r(c)n(h,)28 b(Equino)n(x.)259 4891 y Fc(Sp)s(ecF)-8
-b(rame)427 4991 y Fk(If)38 b(UseDefs)g(is)g(zero,)h(an)e(error)f(is)h
-(rep)r(orted)g(when)h(aligning)e(Sp)r(ecF)-7 b(rames)37
-b(if)h(an)n(y)f(of)h(the)g(follo)n(wing)427 5090 y(attributes)24
-b(are)f(required)f(but)j(ha)n(v)n(e)d(not)i(b)r(een)g(assigned)e(a)i(v)
--5 b(alue)23 b(explicitly:)35 b(Ep)r(o)r(c)n(h,)24 b(RefRA,)h(RefDec,)
-427 5190 y(RestF)-7 b(req,)28 b(SourceV)-7 b(el,)27 b(StdOfRest.)259
-5326 y Fc(DSBSp)s(ecF)-8 b(rame)427 5425 y Fk(If)27 b(UseDefs)g(is)g
-(zero,)f(an)g(error)f(is)h(rep)r(orted)g(when)h(aligning)f(DSBSp)r(ecF)
--7 b(rames)26 b(or)g(when)h(accessing)e(the)427 5525
-y(ImagF)-7 b(req)25 b(attribute)h(if)g(an)n(y)f(of)h(the)g(follo)n
-(wing)f(attributes)g(are)g(required)g(but)h(ha)n(v)n(e)f(not)h(b)r(een)
-g(assigned)427 5624 y(a)h(v)-5 b(alue)28 b(explicitly:)37
-b(Ep)r(o)r(c)n(h,)27 b(DSBCen)n(tre,)h(IF.)p eop end
-%%Page: 471 481
-TeXDict begin 471 480 bop 3643 52 a FG(471)p 0 351 3780
-12 v 0 483 a FA(W)-11 b(arnings)345 b Fd(Con)m(trols)36
-b(the)j(issuing)f(of)g(w)m(arnings)f(ab)s(out)1429 598
-y(v)-7 b(arious)38 b(conditions)3224 483 y FA(W)-11 b(arnings)0
-745 y Fc(Description:)44 b Fk(This)27 b(attribute)g(con)n(trols)f(the)h
-(issuing)g(of)f(w)n(arnings)g(ab)r(out)h(selected)f(conditions)h(when)g
-(an)g(Ob)5 b(ject)227 845 y(or)28 b(k)n(eyw)n(ord)f(is)i(read)f(from)h
-(or)f(written)h(to)g(a)f(FitsChan.)41 b(The)29 b(v)-5
-b(alue)29 b(supplied)g(for)f(the)h(W)-7 b(arnings)28
-b(attribute)227 945 y(should)d(consist)f(of)h(a)g(space)f(separated)g
-(list)h(of)g(condition)g(names)f(\(see)h(the)h(AllW)-7
-b(arnings)24 b(attribute)h(for)g(a)f(list)227 1044 y(of)29
-b(the)g(curren)n(tly)f(de\014ned)h(names\).)41 b(Eac)n(h)28
-b(name)g(indicates)h(a)f(condition)h(whic)n(h)g(should)f(b)r(e)i(rep)r
-(orted.)40 b(The)227 1144 y(default)28 b(v)-5 b(alue)28
-b(for)f(W)-7 b(arnings)27 b(is)g(the)h(string)f Ft(")p
-Fk(Tnx)g(Zp)n(x)g(BadCel)g(BadMat)g(BadPV)g(BadCTYPE)p
-Ft(")p Fk(.)227 1264 y(The)e(text)h(of)f(an)n(y)f(w)n(arning)g(will)i
-(b)r(e)f(stored)f(within)i(the)g(FitsChan)f(in)g(the)h(form)f(of)g(one)
-g(or)f(more)g(new)h(header)227 1364 y(cards)i(with)i(k)n(eyw)n(ord)d
-(ASTW)-9 b(ARN.)29 b(If)f(required,)f(applications)g(can)h(c)n(hec)n(k)
-f(the)h(FitsChan)g(for)f(ASTW)-9 b(ARN)227 1463 y(cards)24
-b(\(using)h(AST)p Ft(_)p Fk(FINDFITS\))h(after)e(the)i(call)e(to)h(AST)
-p Ft(_)p Fk(READ)g(or)f(AST)p Ft(_)p Fk(WRITE)g(has)h(b)r(een)g(p)r
-(erformed,)227 1563 y(and)33 b(rep)r(ort)g(the)g(text)h(of)f(an)n(y)f
-(suc)n(h)h(cards)f(to)h(the)g(user.)53 b(ASTW)-9 b(ARN)34
-b(cards)e(will)i(b)r(e)f(propagated)e(to)i(an)n(y)227
-1662 y(output)28 b(header)f(unless)h(they)f(are)g(deleted)h(from)f(the)
-h(FitsChan)g(using)f(astDelFits.)0 1803 y Fc(T)m(yp)s(e:)227
-1903 y Fk(String)0 2043 y Fc(Class)k(Applicabilit)m(y:)259
-2171 y(FitsChan)427 2270 y Fk(All)d(FitsChans)g(ha)n(v)n(e)e(this)i
-(attribute.)0 2423 y Fc(Notes:)227 2569 y Fk(This)36
-b(attribute)g(only)g(con)n(trols)e(the)j(w)n(arnings)d(that)i(are)f(to)
-h(b)r(e)g(stored)f(as)h(a)f(set)h(of)g(header)f(cards)g(in)h(the)227
-2669 y(FitsChan)d(as)f(describ)r(ed)g(ab)r(o)n(v)n(e.)51
-b(It)33 b(has)f(no)g(e\013ect)h(on)g(the)g(storage)d(of)j(w)n(arnings)e
-(in)i(the)g(paren)n(t)f(Channel)227 2769 y(structure.)i(All)19
-b(w)n(arnings)e(are)h(stored)g(in)h(the)g(paren)n(t)f(Channel)h
-(structure,)h(from)f(where)f(they)h(can)g(b)r(e)g(retriev)n(ed)227
-2868 y(using)28 b(the)f(AST)p Ft(_)p Fk(W)-9 b(ARNINGS)29
-b(function.)p 0 3050 V 0 3188 a FA(WcsAxis\(lonlat\))1196
-3180 y Fd(FITS-W)m(CS)39 b(pro)7 b(jection)36 b(axes)2826
-3188 y FA(WcsAxis\(lonlat\))0 3366 y Fc(Description:)44
-b Fk(This)21 b(attribute)g(giv)n(es)e(the)i(indices)g(of)g(the)g
-(longitude)f(and)h(latitude)g(co)r(ordinates)e(of)h(the)h(FITS-W)n(CS)
-227 3465 y(pro)5 b(jection)33 b(within)i(the)g(co)r(ordinate)e(space)g
-(used)h(b)n(y)g(a)f(WcsMap.)57 b(These)33 b(indices)h(are)f(de\014ned)i
-(when)f(the)227 3565 y(WcsMap)28 b(is)f(\014rst)g(created)g(using)h
-(AST)p Ft(_)p Fk(W)n(CSMAP)f(and)h(cannot)f(subsequen)n(tly)g(b)r(e)h
-(altered.)227 3685 y(If)j Ft(")p Fk(lonlat)p Ft(")d Fk(is)i(1,)g(the)h
-(index)f(of)g(the)g(longitude)g(axis)f(is)h(returned.)43
-b(Otherwise,)30 b(if)h(it)f(is)g(2,)g(the)g(index)g(of)g(the)227
-3785 y(latitude)e(axis)f(is)h(returned.)0 3925 y Fc(T)m(yp)s(e:)227
-4025 y Fk(In)n(teger,)f(read-only)-7 b(.)0 4165 y Fc(Class)31
-b(Applicabilit)m(y:)259 4293 y(WcsMap)427 4392 y Fk(All)d(WcsMaps)f(ha)
-n(v)n(e)g(this)h(attribute.)p 0 4574 V 0 4705 a FA(WcsT)l(yp)t(e)1193
-4704 y Fd(FITS-W)m(CS)39 b(pro)7 b(jection)36 b(t)m(yp)s(e)3227
-4705 y FA(WcsT)l(yp)t(e)0 4876 y Fc(Description:)44 b
-Fk(This)29 b(attribute)g(sp)r(eci\014es)g(whic)n(h)g(t)n(yp)r(e)g(of)f
-(FITS-W)n(CS)h(pro)5 b(jection)28 b(will)h(b)r(e)g(p)r(erformed)g(b)n
-(y)f(a)h(Wc-)227 4975 y(sMap.)49 b(The)32 b(v)-5 b(alue)32
-b(is)g(sp)r(eci\014ed)g(when)g(a)f(WcsMap)h(is)g(\014rst)f(created)g
-(using)h(AST)p Ft(_)p Fk(W)n(CSMAP)f(and)h(cannot)227
-5075 y(subsequen)n(tly)27 b(b)r(e)h(c)n(hanged.)227 5195
-y(The)36 b(v)-5 b(alues)36 b(used)g(are)f(represen)n(ted)f(b)n(y)i(sym)
-n(b)r(olic)f(constan)n(ts)g(with)i(names)e(of)h(the)g(form)g
-Ft(")p Fk(AST)p Ft(__)p Fk(XXX)p Ft(")p Fk(,)227 5295
-y(where)d Ft(")p Fk(XXX)p Ft(")f Fk(is)h(the)g(\(upp)r(er)g(case\))g
-(3-c)n(haracter)c(co)r(de)k(used)g(b)n(y)f(the)h(FITS-W)n(CS)g
-Ft(")p Fk(CTYPEi)p Ft(")e Fk(k)n(eyw)n(ord)227 5394 y(to)36
-b(iden)n(tify)g(the)g(pro)5 b(jection.)61 b(F)-7 b(or)35
-b(example,)i(p)r(ossible)f(v)-5 b(alues)35 b(are)g(AST)p
-Ft(__)p Fk(T)-7 b(AN)36 b(\(for)f(the)i(tangen)n(t)e(plane)227
-5494 y(or)e(gnomonic)h(pro)5 b(jection\))33 b(and)h(AST)p
-Ft(__)p Fk(AIT)g(\(for)g(the)g(Hammer-Aito\013)g(pro)5
-b(jection\).)56 b(AST)p Ft(__)p Fk(TPN)33 b(is)h(an)227
-5593 y(exception)d(in)g(that)g(it)h(is)f(not)g(part)f(of)h(the)h
-(FITS-W)n(CS)f(standard)f(\(it)h(represen)n(ts)f(a)g(T)-7
-b(AN)32 b(pro)5 b(jection)30 b(with)227 5693 y(p)r(olynomial)d
-(correction)f(terms)h(as)g(de\014ned)h(in)g(an)f(early)g(draft)g(of)h
-(the)g(FITS-W)n(CS)g(pap)r(er\).)p eop end
-%%Page: 472 482
-TeXDict begin 472 481 bop 0 52 a FG(472)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fc(T)m(yp)s(e:)227 451 y Fk(In)n(teger,)c(read-only)-7
-b(.)0 599 y Fc(Class)31 b(Applicabilit)m(y:)259 735 y(WcsMap)427
-834 y Fk(All)d(WcsMaps)f(ha)n(v)n(e)g(this)h(attribute.)0
-995 y Fc(Notes:)340 1277 y Fj(\017)45 b Fk(F)-7 b(or)27
-b(a)g(list)h(of)g(a)n(v)-5 b(ailable)26 b(pro)5 b(jections,)27
-b(see)g(the)h(FITS-W)n(CS)f(pap)r(er.)p 0 1474 3780 12
-v 0 1612 a FA(Width\(elemen)l(t\))1131 1606 y Fd(Line)38
-b(width)g(for)g(a)g(Plot)g(elemen)m(t)2840 1612 y FA(Width\(elemen)l
-(t\))0 1806 y Fc(Description:)44 b Fk(This)35 b(attribute)g(determines)
-g(the)h(line)f(width)g(used)g(when)g(dra)n(wing)f(eac)n(h)g(elemen)n(t)
-h(of)g(graphical)227 1906 y(output)40 b(pro)r(duced)g(b)n(y)f(a)h
-(Plot.)72 b(It)40 b(tak)n(es)f(a)g(separate)f(v)-5 b(alue)40
-b(for)f(eac)n(h)g(graphical)f(elemen)n(t)i(so)f(that,)k(for)227
-2005 y(instance,)28 b(the)h(setting)f Ft(")p Fk(Width\(b)r(order\)=2.0)
-p Ft(")f Fk(causes)g(the)h(Plot)g(b)r(order)f(to)h(b)r(e)h(dra)n(wn)e
-(using)h(a)g(line)g(width)227 2105 y(of)g(2.0.)37 b(A)28
-b(v)-5 b(alue)28 b(of)f(1.0)g(results)h(in)g(a)f(line)h(thic)n(kness)f
-(whic)n(h)h(is)g(appro)n(ximately)e(0.0005)f(times)k(the)f(length)g(of)
-227 2204 y(the)g(diagonal)e(of)i(the)g(en)n(tire)f(displa)n(y)g
-(surface.)227 2328 y(The)d(actual)f(app)r(earance)g(of)g(lines)h(dra)n
-(wn)f(with)h(an)n(y)f(particular)g(width,)i(and)e(the)i(range)d(of)i(a)
-n(v)-5 b(ailable)22 b(widths,)227 2428 y(is)e(determined)g(b)n(y)f(the)
-h(underlying)g(graphics)e(system.)34 b(The)20 b(default)g(b)r(eha)n
-(viour)e(is)i(for)f(all)h(graphical)e(elemen)n(ts)227
-2528 y(to)23 b(b)r(e)h(dra)n(wn)e(using)h(the)h(default)g(line)f(width)
-h(supplied)g(b)n(y)f(this)g(graphics)f(system.)35 b(This)23
-b(will)h(not)f(necessarily)227 2627 y(corresp)r(ond)j(to)i(a)f(Width)h
-(v)-5 b(alue)28 b(of)g(1.0.)0 2776 y Fc(T)m(yp)s(e:)227
-2875 y Fk(Floating)f(p)r(oin)n(t.)0 3024 y Fc(Class)k(Applicabilit)m
-(y:)259 3159 y(Plot)427 3259 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)0 3420 y Fc(Notes:)340 3701 y Fj(\017)45
-b Fk(F)-7 b(or)27 b(a)g(list)h(of)g(the)g(graphical)e(elemen)n(ts)h(a)n
-(v)-5 b(ailable,)27 b(see)g(the)h(description)f(of)g(the)h(Plot)f
-(class.)340 3833 y Fj(\017)45 b Fk(If)26 b(no)f(graphical)e(elemen)n(t)
-i(is)g(sp)r(eci\014ed,)h(\(e.g.)36 b Ft(")p Fk(Width)p
-Ft(")25 b Fk(instead)g(of)g Ft(")p Fk(Width\(b)r(order\))p
-Ft(")p Fk(\),)h(then)g(a)e Ft(")p Fk(set)p Ft(")427 3933
-y Fk(or)i Ft(")p Fk(clear)p Ft(")f Fk(op)r(eration)h(will)g(a\013ect)h
-(the)g(attribute)g(v)-5 b(alue)27 b(of)f(all)h(graphical)e(elemen)n
-(ts,)i(while)g(a)f Ft(")p Fk(get)p Ft(")f Fk(or)427 4032
-y Ft(")p Fk(test)p Ft(")i Fk(op)r(eration)g(will)h(use)f(just)h(the)g
-(Width\(Border\))g(v)-5 b(alue.)p 0 4230 V 0 4361 a FA(XmlF)-11
-b(ormat)207 b Fd(System)38 b(for)g(formatting)d(Ob)7
-b(jects)38 b(as)h(XML)207 b FA(XmlF)-11 b(ormat)0 4548
-y Fc(Description:)44 b Fk(This)29 b(attribute)h(sp)r(eci\014es)f(the)g
-(formatting)g(system)g(to)g(use)g(when)g(AST)g(Ob)5 b(jects)29
-b(are)f(written)i(out)227 4648 y(as)24 b(XML)g(through)f(an)h(XmlChan.)
-36 b(It)25 b(a\013ects)f(the)g(b)r(eha)n(viour)f(of)h(the)g(AST)p
-Ft(_)p Fk(WRITE)g(routine)g(when)g(they)h(are)227 4748
-y(used)j(to)f(transfer)g(an)n(y)g(AST)h(Ob)5 b(ject)27
-b(to)h(or)e(from)i(an)f(external)g(XML)h(represen)n(tation.)227
-4872 y(The)36 b(XmlChan)h(class)e(allo)n(ws)g(AST)h(ob)5
-b(jects)36 b(to)g(b)r(e)g(represen)n(ted)f(in)i(the)f(form)g(of)g(XML)g
-(in)h(sev)n(eral)d(w)n(a)n(ys)227 4971 y(\(con)n(v)n(en)n(tions\))27
-b(and)g(the)i(XmlF)-7 b(ormat)27 b(attribute)h(is)g(used)g(to)f(sp)r
-(ecify)h(whic)n(h)g(of)g(these)f(should)h(b)r(e)g(used.)38
-b(The)227 5071 y(formatting)27 b(options)g(a)n(v)-5 b(ailable)27
-b(are)f(outlined)i(in)g(the)g Ft(")p Fk(F)-7 b(ormats)26
-b(Av)-5 b(ailable)p Ft(")27 b Fk(section)g(b)r(elo)n(w.)227
-5195 y(By)35 b(default,)h(an)f(XmlChan)f(will)h(attempt)g(to)g
-(determine)f(whic)n(h)h(format)f(system)g(is)h(already)e(in)i(use,)h
-(and)227 5295 y(will)f(set)f(the)g(default)h(XmlF)-7
-b(ormat)34 b(v)-5 b(alue)34 b(accordingly)e(\(so)h(that)i(subsequen)n
-(t)f(I/O)f(op)r(erations)g(adopt)g(the)227 5394 y(same)26
-b(con)n(v)n(en)n(tions\).)36 b(It)27 b(do)r(es)f(this)h(b)n(y)g(lo)r
-(oking)e(for)i(certain)f(critical)g(items)h(whic)n(h)f(only)h(o)r(ccur)
-f(in)h(particular)227 5494 y(formats.)42 b(F)-7 b(or)29
-b(details)h(of)f(ho)n(w)g(this)h(w)n(orks,)e(see)i(the)g
-Ft(")p Fk(Choice)e(of)i(Default)g(F)-7 b(ormat)p Ft(")29
-b Fk(section)g(b)r(elo)n(w.)42 b(If)30 b(y)n(ou)227 5593
-y(wish)h(to)g(ensure)f(that)h(a)f(particular)g(format)g(system)g(is)h
-(used,)h(indep)r(enden)n(tly)f(of)g(an)n(y)f(XML)h(already)e(read,)227
-5693 y(y)n(ou)e(should)g(set)h(an)f(explicit)h(XmlF)-7
-b(ormat)28 b(v)-5 b(alue)27 b(y)n(ourself.)p eop end
-%%Page: 473 483
-TeXDict begin 473 482 bop 3643 52 a FG(473)0 351 y Fc(T)m(yp)s(e:)227
-451 y Fk(String.)0 602 y Fc(Class)31 b(Applicabilit)m(y:)259
-740 y(XmlChan)427 839 y Fk(All)d(XmlChans)g(ha)n(v)n(e)e(this)i
-(attribute.)-2 1003 y Fc(F)-8 b(ormats)32 b(Av)-5 b(ailable)n(:)227
-1149 y Fk(The)34 b(XmlF)-7 b(ormat)33 b(attribute)h(can)f(tak)n(e)f(an)
-n(y)h(of)g(the)h(follo)n(wing)f(\(case)f(insensitiv)n(e\))i(string)e(v)
--5 b(alues)33 b(to)h(select)227 1248 y(the)28 b(corresp)r(onding)e
-(formatting)h(system:)340 1512 y Fj(\017)45 b Ft(")p
-Fk(NA)-7 b(TIVE)p Ft(")p Fk(:)34 b(This)23 b(is)g(a)f(direct)h(con)n(v)
-n(ersion)e(to)h(XML)i(of)e(the)i(heirarc)n(hical)c(format)j(used)g(b)n
-(y)f(a)h(standard)427 1611 y(XML)28 b(c)n(hannel)f(\(and)h(also)f(b)n
-(y)g(the)h(NA)-7 b(TIVE)28 b(enco)r(ding)f(of)h(a)f(FitsChan\).)340
-1745 y Fj(\017)45 b Ft(")p Fk(QUOTED)p Ft(")p Fk(:)35
-b(This)27 b(is)g(the)g(same)f(as)h(NA)-7 b(TIVE)27 b(format)f(except)h
-(that)g(extra)f(information)g(is)h(included)427 1844
-y(whic)n(h)21 b(allo)n(ws)e(clien)n(t)i(co)r(de)g(to)f(con)n(v)n(ert)f
-(the)j(XML)f(in)n(to)f(a)g(form)h(whic)n(h)f(can)h(b)r(e)g(read)f(b)n
-(y)g(a)g(standard)g(AST)427 1944 y(Channel.)37 b(This)26
-b(extra)g(information)f(indicates)i(whic)n(h)f(AST)h(attribute)f(v)-5
-b(alues)27 b(should)f(b)r(e)h(enclosed)e(in)427 2044
-y(quotes)i(b)r(efore)h(b)r(eing)f(passed)g(to)h(a)f(Channel.)340
-2177 y Fj(\017)45 b Ft(")p Fk(IV)n(O)n(A)p Ft(")p Fk(:)63
-b(This)40 b(is)h(a)g(format)f(that)h(uses)g(an)g(early)e(draft)i(of)g
-(the)g(STC-X)g(sc)n(hema)f(dev)n(elop)r(ed)h(b)n(y)427
-2277 y(the)30 b(In)n(ternational)e(Virtual)h(Observ)-5
-b(atory)27 b(Alliance)i(\(IV)n(O)n(A)g(-)g(see)g Ft(")p
-Fk(h)n(ttp://www.iv)n(oa.net/)p Ft(")p Fk(\))e(to)i(de-)427
-2376 y(scrib)r(e)38 b(co)r(ordinate)f(systems,)j(regions,)f(mappings,)h
-(etc.)68 b(Supp)r(ort)38 b(is)g(limited)g(to)g(V1.20)f(describ)r(ed)427
-2476 y(at)d Ft(")p Fk(h)n(ttp://www.iv)n(oa.net/Do)r(cumen)n
-(ts/WD/STC/STC-2005022)o(5.h)n(tml)p Ft(")p Fk(.)49 b(Since)34
-b(the)g(v)n(ersion)e(of)427 2576 y(STC-X)i(\014nally)f(adopted)g(b)n(y)
-h(the)f(IV)n(O)n(A)g(di\013ers)h(in)g(sev)n(eral)d(signi\014can)n(t)i
-(resp)r(ects)g(from)g(V1.20,)h(this)427 2675 y(format)27
-b(is)g(no)n(w)f(mainly)h(of)g(historical)f(in)n(terest.)37
-b(Note,)27 b(the)g(alternativ)n(e)f Ft(")p Fk(STC-S)p
-Ft(")g Fk(format)h(\(a)g(simpler)427 2775 y(non-XML)h(enco)r(ding)f(of)
-g(the)h(STC)g(metadata\))f(is)h(supp)r(orted)f(b)n(y)h(the)g(StcsChan)f
-(class.)-2 2938 y Fc(Choice)32 b(of)f(Default)h(F)-8
-b(ormat;)n(:)227 3084 y Fk(If)30 b(the)f(XmlF)-7 b(ormat)29
-b(attribute)g(of)g(an)f(XmlChan)h(is)g(not)g(set,)g(the)h(default)f(v)
--5 b(alue)29 b(it)g(tak)n(es)f(is)h(determined)g(b)n(y)227
-3184 y(the)h(presence)f(of)g(certain)g(critical)g(items)h(within)g(the)
-g(do)r(cumen)n(t)f(most)h(recen)n(tly)e(read)h(using)g(AST)p
-Ft(_)p Fk(READ.)227 3284 y(The)f(sequence)f(of)h(decision)f(used)g(to)h
-(arriv)n(e)d(at)j(the)g(default)g(v)-5 b(alue)27 b(is)h(as)f(follo)n
-(ws:)340 3547 y Fj(\017)45 b Fk(If)19 b(the)g(previous)e(do)r(cumen)n
-(t)i(read)e(con)n(tained)h(an)n(y)f(elemen)n(ts)i(in)f(an)n(y)g(of)g
-(the)h(STC)f(namespaces)g(\()p Ft(")p Fk(urn:n)n(v)n(o-)427
-3646 y(stc)p Ft(")p Fk(,)28 b Ft(")p Fk(urn:n)n(v)n(o-co)r(ords)p
-Ft(")23 b Fk(or)k Ft(")p Fk(urn:n)n(v)n(o-region)p Ft(")p
-Fk(\),)d(then)k(the)g(default)g(v)-5 b(alue)28 b(is)f(IV)n(O)n(A.)340
-3780 y Fj(\017)45 b Fk(If)30 b(the)f(previous)f(do)r(cumen)n(t)h(read)f
-(con)n(tained)g(an)n(y)g(elemen)n(ts)h(in)g(the)g(AST)g(namespace)f
-(whic)n(h)h(had)g(an)427 3880 y(asso)r(ciated)e(XML)g(attribute)h
-(called)f Ft(")p Fk(quoted)p Ft(")p Fk(,)g(then)h(the)g(default)g(v)-5
-b(alue)28 b(is)f(QUOTED.)340 4013 y Fj(\017)45 b Fk(Otherwise,)31
-b(if)g(none)g(of)f(these)h(conditions)f(is)h(met)g(\(as)f(w)n(ould)h(b)
-r(e)g(the)g(case)f(if)h(no)f(do)r(cumen)n(t)h(had)g(y)n(et)427
-4113 y(b)r(een)d(read\),)f(then)h(NA)-7 b(TIVE)28 b(format)g(is)f
-(used.)227 4276 y(Setting)h(an)g(explicit)f(v)-5 b(alue)28
-b(for)f(the)h(XmlF)-7 b(ormat)27 b(attribute)h(alw)n(a)n(ys)e(o)n(v)n
-(er-rides)f(this)j(default)g(b)r(eha)n(viour.)-2 4427
-y Fc(The)k(IV)m(O)m(A)h(F)-8 b(ormat)n(:)227 4573 y Fk(The)39
-b(IV)n(O)n(A)g(supp)r(ort)g(caters)f(only)h(for)f(certain)h(parts)f(of)
-h(V1.20)g(of)g(the)g(draft)g(Space-Time)g(Co)r(ordinate)227
-4673 y(\(STC\))33 b(sc)n(hema)f(\(see)h(h)n(ttp://www.iv)n(oa.net/Do)r
-(cumen)n(ts/WD/STC/STC-2005022)o(5.h)n(tml\).)46 b(Note,)34
-b(this)227 4773 y(draft)f(has)g(no)n(w)f(b)r(een)i(sup)r(erceded)f(b)n
-(y)g(an)g(o\016cially)f(adopted)h(v)n(ersion)e(that)j(di\013ers)f(in)g
-(sev)n(eral)e(signi\014can)n(t)227 4872 y(resp)r(ects)c(from)h(V1.20.)
-35 b(Consequen)n(tly)-7 b(,)27 b(the)h Ft(")p Fk(IV)n(O)n(A)p
-Ft(")f Fk(XmlChan)h(format)f(is)g(of)h(historical)e(in)n(terest)h(only)
--7 b(.)227 4997 y(The)30 b(follo)n(wing)f(p)r(oin)n(ts)h(should)f(b)r
-(e)h(noted)g(when)g(using)g(an)f(XmlChan)h(to)g(read)f(or)g(write)g
-(STC)h(information)227 5097 y(\(note,)e(this)g(list)g(is)f(curren)n
-(tly)g(incomplete\):)340 5360 y Fj(\017)45 b Fk(Ob)5
-b(jects)27 b(can)h(curren)n(tly)e(only)h(b)r(e)h(read)f(using)g(this)h
-(format,)f(not)h(written.)340 5494 y Fj(\017)45 b Fk(The)23
-b(AST)f(ob)5 b(ject)22 b(generated)f(b)n(y)h(reading)f(an)h
-Fm(<)p Fk(STCMetadata)p Fm(>)f Fk(elemen)n(t)h(will)g(b)r(e)h(an)f
-(instance)g(of)g(one)427 5593 y(of)27 b(the)h(AST)g Ft(")p
-Fk(Stc)p Ft(")f Fk(classes:)35 b(StcResourcePro\014le,)25
-b(StcSearc)n(hLo)r(cation,)h(StcCatalogEn)n(tryLo)r(cation,)427
-5693 y(StcObsDataLo)r(cation.)p eop end
-%%Page: 474 484
-TeXDict begin 474 483 bop 0 52 a FG(474)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)340 351
-y Fj(\017)45 b Fk(When)27 b(reading)f(an)g Fm(<)p Fk(STCMetadata)p
-Fm(>)f Fk(elemen)n(t,)i(the)g(axes)f(in)h(the)g(returned)f(AST)h(Ob)5
-b(ject)26 b(will)h(b)r(e)g(in)427 451 y(the)j(order)e(space,)g(time,)j
-(sp)r(ectral,)e(redshift,)g(irresp)r(ectiv)n(e)f(of)h(the)h(order)e(in)
-h(whic)n(h)g(the)h(axes)e(o)r(ccur)g(in)427 551 y(the)34
-b Fm(<)p Fk(STCMetadata)p Fm(>)e Fk(elemen)n(t.)53 b(If)34
-b(the)g(supplied)f Fm(<)p Fk(STCMetadata)p Fm(>)f Fk(elemen)n(t)h(do)r
-(es)g(not)g(con)n(tain)427 650 y(all)h(of)h(these)f(axes,)i(the)f
-(returned)f(AST)h(Ob)5 b(ject)34 b(will)h(also)e(omit)i(them,)i(but)e
-(the)g(ordering)e(of)h(those)427 750 y(axes)h(whic)n(h)h(are)f(presen)n
-(t)g(will)i(b)r(e)f(as)f(stated)h(ab)r(o)n(v)n(e.)61
-b(If)36 b(the)g(spatial)g(frame)f(represen)n(ts)g(a)g(celestial)427
-849 y(co)r(ordinate)27 b(system)g(the)h(spatial)f(axes)g(will)g(b)r(e)h
-(in)g(the)g(order)f(\(longitude,)g(latitude\).)340 986
-y Fj(\017)45 b Fk(Un)n(til)25 b(suc)n(h)g(time)g(as)f(the)h(AST)g
-(TimeF)-7 b(rame)24 b(is)g(complete,)h(a)g(simple)f(1-dimensional)g(F)
--7 b(rame)24 b(\(with)h(Do-)427 1086 y(main)g(set)f(to)g(TIME\))g(will)
-h(b)r(e)g(used)f(to)g(represen)n(t)f(the)i(STC)f Fm(<)p
-Fk(TimeF)-7 b(rame)p Fm(>)23 b Fk(elemen)n(t.)36 b(Consequen)n(tly)-7
-b(,)427 1185 y(most)28 b(of)f(the)h(information)f(within)h(a)g
-Fm(<)p Fk(TimeF)-7 b(rame)p Fm(>)26 b Fk(elemen)n(t)i(is)f(curren)n
-(tly)g(ignored.)340 1322 y Fj(\017)45 b Fm(<)p Fk(SpaceF)-7
-b(rame)p Fm(>)27 b Fk(elemen)n(ts)i(can)f(only)g(b)r(e)h(read)f(if)h
-(they)g(describ)r(e)g(a)f(celestial)g(longitude)h(and)f(latitude)427
-1421 y(axes)33 b(supp)r(orted)g(b)n(y)g(the)h(AST)f(SkyF)-7
-b(rame)33 b(class.)53 b(The)33 b(space)g(axes)f(will)i(b)r(e)g
-(returned)f(in)g(the)h(order)427 1521 y(\(longitude,)28
-b(latitude\).)340 1658 y Fj(\017)45 b Fk(V)-7 b(elo)r(cities)28
-b(asso)r(ciated)e(with)i(SpaceF)-7 b(rames)27 b(cannot)g(b)r(e)h(read.)
-340 1794 y Fj(\017)45 b Fk(An)n(y)23 b Fm(<)p Fk(GenericCo)r(ordF)-7
-b(rame)p Fm(>)19 b Fk(elemen)n(ts)k(within)g(an)f Fm(<)p
-Fk(AstroCo)r(ordSystem)p Fm(>)e Fk(elemen)n(t)j(are)f(curren)n(tly)427
-1894 y(ignored.)340 2031 y Fj(\017)45 b Fk(An)n(y)29
-b(second)e(or)h(subsequen)n(t)g Fm(<)p Fk(AstroCo)r(ordSystem)p
-Fm(>)e Fk(found)j(within)g(an)f(STCMetaData)g(elemen)n(t)h(is)427
-2130 y(ignored.)340 2267 y Fj(\017)45 b Fk(An)n(y)37
-b(second)g(or)f(subsequen)n(t)h Fm(<)p Fk(AstroCo)r(ordArea)p
-Fm(>)d Fk(found)k(within)g(an)f(STCMetaData)f(elemen)n(t)i(is)427
-2366 y(ignored.)340 2503 y Fj(\017)45 b Fk(An)n(y)28
-b Fm(<)p Fk(O\013setCen)n(ter)p Fm(>)e Fk(found)i(within)g(a)f
-Fm(<)p Fk(SpaceF)-7 b(rame)p Fm(>)26 b Fk(is)i(ignored.)340
-2640 y Fj(\017)45 b Fk(An)n(y)28 b(Co)r(ordFla)n(v)n(or)c(elemen)n(t)k
-(found)g(within)g(a)g Fm(<)p Fk(SpaceF)-7 b(rame)p Fm(>)25
-b Fk(is)j(ignored.)340 2776 y Fj(\017)45 b Fm(<)p Fk(SpaceF)-7
-b(rame)p Fm(>)23 b Fk(elemen)n(ts)h(can)g(only)f(b)r(e)i(read)e(if)i
-(they)g(refer)e(to)h(one)g(of)g(the)h(follo)n(wing)e(space)h(reference)
-427 2876 y(frames:)36 b(ICRS,)28 b(GALA)n(CTIC)p Ft(_)p
-Fk(I)r(I,)g(SUPER)p Ft(_)p Fk(GALA)n(CTIC,)f(HEE,)g(FK4,)g(FK5,)g
-(ECLIPTIC.)340 3013 y Fj(\017)45 b Fm(<)p Fk(SpaceF)-7
-b(rame)p Fm(>)25 b Fk(elemen)n(ts)h(can)g(only)g(b)r(e)h(read)f(if)h
-(the)f(reference)g(p)r(osition)g(is)g(TOPOCENTER.)f(Also,)427
-3112 y(an)n(y)i(planetary)g(ephemeris)g(is)g(ignored.)340
-3249 y Fj(\017)45 b Fk(Regions:)36 b(there)26 b(is)g(curren)n(tly)g(no)
-g(supp)r(ort)g(for)g(STC)h(regions)e(of)h(t)n(yp)r(e)h(Sector,)f(Con)n
-(v)n(exHull)f(or)h(SkyIn-)427 3348 y(dex.)340 3485 y
-Fj(\017)45 b Fk(The)34 b(AST)g(Region)e(read)h(from)g(a)g(Co)r(ordIn)n
-(terv)-5 b(al)32 b(elemen)n(t)h(is)h(considered)e(to)i(b)r(e)f(op)r(en)
-h(if)g(either)f(the)427 3585 y(lo)p Ft(_)p Fk(include)27
-b(or)g(the)h(hi)p Ft(_)p Fk(include)g(attribute)g(is)f(set)h(to)f
-(false.)340 3721 y Fj(\017)45 b Fm(<)p Fk(RegionFile)p
-Fm(>)27 b Fk(elemen)n(ts)g(are)g(not)g(supp)r(orted.)340
-3858 y Fj(\017)45 b Fk(V)-7 b(ertices)33 b(within)h Fm(<)p
-Fk(P)n(olygon)p Fm(>)c Fk(elemen)n(ts)k(are)e(alw)n(a)n(ys)f
-(considered)h(to)h(b)r(e)h(joined)g(using)e(great)g(circles)427
-3957 y(\(that)c(is,)g Fm(<)p Fk(SmallCircle)p Fm(>)e
-Fk(elemen)n(ts)i(are)e(ignored\).)p 0 4164 3780 12 v
-0 4296 a FA(XmlInden)l(t)245 b Fd(Con)m(trols)36 b(output)i(of)g(inden)
-m(tation)e(and)j(line)1764 4411 y(feeds)3144 4296 y FA(XmlInden)l(t)0
-4584 y Fc(Description:)44 b Fk(This)39 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)e(of)h(the)h(XML)g(pro)r(duced)f(when)h(an)f(AST)h(ob)5
-b(ject)39 b(is)227 4683 y(written)21 b(to)g(an)g(XmlChan.)35
-b(If)21 b(it)h(is)f(non-zero,)f(then)i(extra)e(linefeed)h(c)n
-(haracters)e(will)i(b)r(e)g(inserted)g(as)f(necessary)227
-4783 y(to)26 b(ensure)f(that)i(eac)n(h)e(XML)h(tag)f(starts)g(on)h(a)g
-(new)g(line,)g(and)g(eac)n(h)f(tag)g(will)h(b)r(e)h(inden)n(ted)f(to)g
-(sho)n(w)f(its)h(depth)227 4883 y(in)k(the)f(con)n(tainmen)n(t)g
-(hierarc)n(h)n(y)-7 b(.)40 b(If)30 b(XmlInden)n(t)g(is)f(zero)f(\(the)i
-(default\),)g(then)g(no)f(linefeeds)g(or)g(inden)n(tation)227
-4982 y(strings)e(will)h(b)r(e)g(added)f(to)h(output)g(text.)0
-5139 y Fc(T)m(yp)s(e:)227 5239 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-5396 y Fc(Class)k(Applicabilit)m(y:)259 5540 y(XmlChan)427
-5639 y Fk(All)d(XmlChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-eop end
-%%Page: 475 485
-TeXDict begin 475 484 bop 3643 52 a FG(475)p 0 351 3780
-12 v 0 483 a FA(XmlLength)473 b Fd(Con)m(trols)36 b(output)i(bu\013er)h
-(length)471 b FA(XmlLength)0 653 y Fc(Description:)44
-b Fk(This)34 b(attribute)h(sp)r(eci\014es)e(the)i(maxim)n(um)f(length)g
-(to)g(use)g(when)g(writing)f(out)i(text)f(through)f(the)227
-753 y(sink)28 b(function)g(supplied)g(when)g(the)g(XmlChan)f(w)n(as)g
-(created.)227 872 y(The)h(n)n(um)n(b)r(er)g(of)g(c)n(haracters)d(in)j
-(eac)n(h)f(string)h(written)g(out)g(through)f(the)h(sink)g(function)g
-(will)g(not)g(b)r(e)g(greater)227 972 y(than)g(the)g(v)-5
-b(alue)27 b(of)h(this)g(attribute)g(\(but)g(ma)n(y)f(b)r(e)h(less\).)37
-b(A)28 b(v)-5 b(alue)27 b(of)h(zero)e(\(the)j(default\))f(means)f
-(there)g(is)h(no)227 1072 y(limit)h(-)e(eac)n(h)g(string)g(can)g(b)r(e)
-h(of)f(an)n(y)g(length.)227 1192 y(Note,)40 b(the)d(default)h(v)-5
-b(alue)37 b(of)g(zero)e(is)i(unlik)n(ely)g(to)g(b)r(e)g(appropriate)f
-(when)h(an)g(XmlChan)g(is)g(used)g(within)227 1291 y(F)-7
-b(ortran)36 b(co)r(de.)63 b(In)37 b(this)f(case,)i(XmlLength)f(should)f
-(usually)g(b)r(e)h(set)g(to)f(the)h(size)f(of)h(the)f(CHARA)n(CTER)227
-1391 y(v)-5 b(ariable)22 b(used)i(to)f(receiv)n(e)f(the)h(text)h
-(returned)e(b)n(y)h(AST)p Ft(_)p Fk(GETLINE)g(within)h(the)f(sink)g
-(function.)36 b(This)23 b(a)n(v)n(oids)227 1490 y(the)28
-b(p)r(ossibilit)n(y)g(of)f(long)g(lines)h(b)r(eing)f(truncated)h(in)n
-(visibly)f(within)h(AST)p Ft(_)p Fk(GETLINE.)0 1630 y
-Fc(T)m(yp)s(e:)227 1730 y Fk(In)n(teger.)0 1870 y Fc(Class)j
-(Applicabilit)m(y:)259 1997 y(XmlChan)427 2097 y Fk(All)d(XmlChans)g
-(ha)n(v)n(e)e(this)i(attribute.)p 0 2277 V 0 2409 a FA(XmlPre\014x)200
-b Fd(The)38 b(namespace)g(pre\014x)h(to)f(use)h(when)g(writing)197
-b FA(XmlPre\014x)0 2579 y Fc(Description:)44 b Fk(This)22
-b(attribute)h(is)f(a)g(string)f(whic)n(h)h(is)g(to)g(b)r(e)h(used)f(as)
-f(the)i(namespace)e(pre\014x)h(for)f(all)h(XML)h(elemen)n(ts)227
-2679 y(created)k(as)g(a)g(result)g(of)h(writing)f(an)g(AST)h(Ob)5
-b(ject)28 b(out)f(through)g(an)g(XmlChan.)37 b(The)28
-b(URI)g(asso)r(ciated)e(with)227 2778 y(the)33 b(namespace)e(pre\014x)h
-(is)g(giv)n(en)g(b)n(y)f(the)i(sym)n(b)r(olic)f(constan)n(t)f(AST)p
-Ft(__)p Fk(XMLNS)i(de\014ned)f(in)h(AST)p Ft(_)p Fk(P)-7
-b(AR.)32 b(A)227 2878 y(de\014nition)26 b(of)e(the)i(namespace)e
-(pre\014x)g(is)h(included)g(in)h(eac)n(h)e(top-lev)n(el)g(elemen)n(t)h
-(pro)r(duced)f(b)n(y)h(the)g(XmlChan.)227 2998 y(The)31
-b(default)g(v)-5 b(alue)30 b(is)g(a)g(blank)h(string)e(whic)n(h)i
-(causes)e(no)h(pre\014x)g(to)h(b)r(e)f(used.)46 b(In)31
-b(this)f(case)g(eac)n(h)g(top-lev)n(el)227 3097 y(elemen)n(t)e(will)g
-(set)f(the)h(default)g(namespace)f(to)g(b)r(e)h(the)g(v)-5
-b(alue)28 b(of)g(AST)p Ft(__)p Fk(XMLNS.)0 3237 y Fc(T)m(yp)s(e:)227
-3337 y Fk(String.)0 3477 y Fc(Class)j(Applicabilit)m(y:)259
-3604 y(Ob)5 b(ject)427 3704 y Fk(All)28 b(Ob)5 b(jects)28
-b(ha)n(v)n(e)e(this)i(attribute.)p 0 3884 V 0 4015 a
-FA(Zo)t(om)1322 4016 y Fd(Zo)s(omMap)37 b(scale)i(factor)3447
-4015 y FA(Zo)t(om)0 4186 y Fc(Description:)44 b Fk(This)24
-b(attribute)g(holds)g(the)g(Zo)r(omMap)f(scale)g(factor,)h(b)n(y)g
-(whic)n(h)g(co)r(ordinate)e(v)-5 b(alues)24 b(are)f(m)n(ultiplied)227
-4285 y(\(b)n(y)g(the)h(forw)n(ard)d(transformation\))g(or)h(divided)i
-(\(b)n(y)f(the)g(in)n(v)n(erse)f(transformation\).)34
-b(This)22 b(factor)h(is)f(set)h(when)227 4385 y(a)k(Zo)r(omMap)g(is)h
-(created,)e(but)j(ma)n(y)e(later)g(b)r(e)h(mo)r(di\014ed.)37
-b(The)27 b(default)i(v)-5 b(alue)27 b(is)g(unit)n(y)-7
-b(.)227 4505 y(Note)23 b(that)f(if)h(a)f(Zo)r(omMap)f(is)h(in)n(v)n
-(erted)g(\(e.g.)35 b(b)n(y)22 b(using)f(AST)p Ft(_)p
-Fk(INVER)-7 b(T\),)23 b(then)g(the)g(recipro)r(cal)d(of)j(this)f(zo)r
-(om)227 4604 y(factor)27 b(will,)h(in)g(e\013ect,)g(b)r(e)g(used.)0
-4745 y Fc(T)m(yp)s(e:)227 4844 y Fk(Double)g(precision.)0
-4984 y Fc(Class)j(Applicabilit)m(y:)259 5111 y(Zo)s(omMap)427
-5211 y Fk(All)d(Zo)r(omMaps)f(ha)n(v)n(e)f(this)i(attribute.)0
-5363 y Fc(Notes:)340 5636 y Fj(\017)45 b Fk(The)28 b(Zo)r(om)f
-(attribute)h(ma)n(y)f(not)g(b)r(e)h(set)g(to)f(zero.)p
-eop end
-%%Page: 476 486
-TeXDict begin 476 485 bop 0 52 a FG(476)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p eop end
-%%Page: 477 487
-TeXDict begin 477 486 bop 3643 52 a FG(477)0 351 y FA(D)135
-b(AST)43 b(Class)j(Descriptions)p 0 582 3780 12 v 0 713
-a(Axis)1057 b Fd(Store)38 b(axis)g(information)1054 b
-FA(Axis)0 861 y Fc(Description:)44 b Fk(The)30 b(Axis)f(class)f(is)h
-(used)g(to)g(store)g(information)f(asso)r(ciated)g(with)i(a)f
-(particular)f(axis)g(of)h(a)g(F)-7 b(rame.)227 960 y(It)28
-b(is)g(used)f(in)n(ternally)g(b)n(y)g(the)h(AST)g(library)e(and)i(has)f
-(no)g(constructor)f(function.)38 b(Y)-7 b(ou)27 b(should)g(encoun)n
-(ter)g(it)227 1060 y(only)g(within)i(textual)e(output)i(\(e.g.)36
-b(from)28 b(AST)p Ft(_)p Fk(WRITE\).)0 1200 y Fc(Constructor)k(F)-8
-b(unction:)227 1300 y Fk(None.)-2 1440 y Fc(Inheritance)n(:)227
-1586 y Fk(The)28 b(Axis)f(class)g(inherits)h(from)f(the)h(Ob)5
-b(ject)27 b(class.)p 0 1767 V 0 1898 a FA(Bo)l(x)480
-1899 y Fd(A)39 b(b)s(o)m(x)f(region)f(with)h(sides)h(parallel)d(to)i
-(the)h(axes)f(of)h(a)f(F)-10 b(rame)3549 1898 y FA(Bo)l(x)0
-2069 y Fc(Description:)44 b Fk(The)26 b(Bo)n(x)e(class)g(implemen)n(ts)
-i(a)e(Region)h(whic)n(h)g(represen)n(ts)f(a)h(b)r(o)n(x)f(with)i(sides)
-f(parallel)f(to)h(the)h(axes)227 2169 y(of)34 b(a)f(F)-7
-b(rame)32 b(\(i.e.)55 b(an)33 b(area)f(whic)n(h)h(encloses)g(a)g(giv)n
-(en)f(range)g(of)i(v)-5 b(alues)33 b(on)g(eac)n(h)f(axis\).)54
-b(A)34 b(Bo)n(x)e(is)h(similar)227 2269 y(to)e(an)g(In)n(terv)-5
-b(al,)31 b(the)g(only)g(real)f(di\013erence)g(b)r(eing)h(that)h(the)f
-(In)n(terv)-5 b(al)30 b(class)g(allo)n(ws)g(some)g(axis)g(limits)h(to)g
-(b)r(e)227 2368 y(unsp)r(eci\014ed.)37 b(Note,)26 b(a)e(Bo)n(x)h(will)g
-(only)g(lo)r(ok)f(lik)n(e)h(a)g(b)r(o)n(x)g(if)g(the)h(F)-7
-b(rame)25 b(geometry)f(is)h(appro)n(ximately)e(\015at.)36
-b(F)-7 b(or)227 2468 y(instance,)34 b(a)e(Bo)n(x)f(cen)n(tred)h(close)f
-(to)h(a)g(p)r(ole)h(in)f(a)g(SkyF)-7 b(rame)32 b(will)g(lo)r(ok)g(more)
-f(lik)n(e)h(a)g(fan)h(than)f(a)g(b)r(o)n(x)g(\(the)227
-2567 y(P)n(olygon)26 b(class)g(can)i(b)r(e)g(used)f(to)h(create)e(a)h
-(b)r(o)n(x-lik)n(e)g(region)f(close)h(to)g(a)h(p)r(ole\).)0
-2708 y Fc(Constructor)k(F)-8 b(unction:)227 2807 y Fk(AST)p
-Ft(_)p Fk(BO)n(X)-2 2948 y Fc(Inheritance)n(:)227 3094
-y Fk(The)28 b(Bo)n(x)e(class)h(inherits)h(from)f(the)h(Region)f(class.)
--2 3234 y Fc(A)m(ttributes)n(:)227 3380 y Fk(The)d(Bo)n(x)e(class)h(do)
-r(es)g(not)h(de\014ne)f(an)n(y)g(new)h(attributes)f(b)r(ey)n(ond)h
-(those)f(whic)n(h)g(are)g(applicable)g(to)g(all)g(Regions.)-2
-3521 y Fc(F)-8 b(unctions)n(:)227 3667 y Fk(The)26 b(Bo)n(x)e(class)g
-(do)r(es)h(not)h(de\014ne)f(an)n(y)g(new)g(routines)g(b)r(ey)n(ond)g
-(those)g(whic)n(h)g(are)f(applicable)h(to)g(all)g(Regions.)p
-0 3848 V 0 3979 a FA(Channel)1180 3986 y Fd(Basic)38
-b(\(textual\))e(I/O)j(c)m(hannel)3294 3979 y FA(Channel)0
-4168 y Fc(Description:)44 b Fk(The)35 b(Channel)g(class)f(implemen)n
-(ts)h(lo)n(w-lev)n(el)e(input/output)i(for)g(the)g(AST)g(library)-7
-b(.)57 b(W)-7 b(riting)35 b(an)227 4267 y(Ob)5 b(ject)36
-b(to)g(a)g(Channel)f(will)i(generate)d(a)i(textual)g(represen)n(tation)
-e(of)i(that)h(Ob)5 b(ject,)38 b(and)e(reading)e(from)i(a)227
-4367 y(Channel)28 b(will)g(create)e(a)h(new)h(Ob)5 b(ject)28
-b(from)f(its)h(textual)f(represen)n(tation.)227 4487
-y(Normally)-7 b(,)22 b(when)h(y)n(ou)e(use)g(a)h(Channel,)h(y)n(ou)e
-(should)h(pro)n(vide)e Ft(")p Fk(source)p Ft(")g Fk(and)i
-Ft(")p Fk(sink)p Ft(")f Fk(routines)g(whic)n(h)h(connect)227
-4587 y(it)38 b(to)f(an)f(external)h(data)f(store)g(b)n(y)h(reading)f
-(and)h(writing)f(the)i(resulting)e(text.)66 b(By)37 b(default,)j(ho)n
-(w)n(ev)n(er,)d(a)227 4686 y(Channel)28 b(will)g(read)e(from)i
-(standard)e(input)j(and)e(write)g(to)h(standard)e(output.)0
-4826 y Fc(Constructor)32 b(F)-8 b(unction:)227 4926 y
-Fk(AST)p Ft(_)p Fk(CHANNEL)-2 5066 y Fc(Inheritance)n(:)227
-5213 y Fk(The)28 b(Channel)f(class)g(inherits)h(from)f(the)h(Ob)5
-b(ject)27 b(class.)-2 5353 y Fc(A)m(ttributes)n(:)227
-5499 y Fk(In)34 b(addition)e(to)h(those)g(attributes)g(common)g(to)g
-(all)f(Ob)5 b(jects,)34 b(ev)n(ery)e(Channel)h(also)f(has)h(the)g
-(follo)n(wing)f(at-)227 5599 y(tributes:)p eop end
-%%Page: 478 488
-TeXDict begin 478 487 bop 0 52 a FG(478)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(Commen)n(t:)37 b(Include)28 b(textual)g(commen)n(ts)f(in)h
-(output?)340 484 y Fj(\017)45 b Fk(F)-7 b(ull:)38 b(Set)28
-b(lev)n(el)f(of)g(output)i(detail)340 617 y Fj(\017)45
-b Fk(Rep)r(ortLev)n(el:)36 b(Selects)28 b(the)g(lev)n(el)f(of)g(error)f
-(rep)r(orting)340 750 y Fj(\017)45 b Fk(Skip:)37 b(Skip)28
-b(irrelev)-5 b(an)n(t)27 b(data?)340 883 y Fj(\017)45
-b Fk(Strict:)37 b(Generate)27 b(errors)f(instead)h(of)h(w)n(arnings?)-2
-1046 y Fc(F)-8 b(unctions)n(:)227 1192 y Fk(In)29 b(addition)f(to)g
-(those)g(routines)f(applicable)h(to)g(all)g(Ob)5 b(jects,)28
-b(the)h(follo)n(wing)e(routines)g(ma)n(y)h(also)f(b)r(e)i(applied)227
-1291 y(to)f(all)f(Channels:)340 1553 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(W)-9 b(ARNINGS:)29 b(Return)f(w)n(arnings)e(from)h(the)h
-(previous)f(read)f(or)h(write)340 1686 y Fj(\017)45 b
-Fk(AST)p Ft(_)p Fk(READ:)28 b(Read)g(an)f(Ob)5 b(ject)27
-b(from)h(a)f(Channel)340 1819 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(WRITE:)28 b(W)-7 b(rite)28 b(an)f(Ob)5 b(ject)27
-b(to)h(a)f(Channel)p 0 2018 3780 12 v 0 2150 a FA(Circle)386
-b Fd(A)38 b(circular)f(or)h(spherical)g(region)f(within)g(a)i(F)-10
-b(rame)384 b FA(Circle)0 2339 y Fc(Description:)44 b
-Fk(The)27 b(Circle)e(class)h(implemen)n(ts)g(a)g(Region)f(whic)n(h)h
-(represen)n(ts)f(a)h(circle)g(or)f(sphere)g(within)i(a)f(F)-7
-b(rame.)0 2489 y Fc(Constructor)32 b(F)-8 b(unction:)227
-2589 y Fk(AST)p Ft(_)p Fk(CIR)n(CLE)-2 2739 y Fc(Inheritance)n(:)227
-2885 y Fk(The)28 b(Circle)f(class)g(inherits)g(from)g(the)h(Region)f
-(class.)-2 3034 y Fc(A)m(ttributes)n(:)227 3181 y Fk(The)19
-b(Circle)g(class)f(do)r(es)h(not)g(de\014ne)h(an)n(y)e(new)h
-(attributes)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f(applicable)h(to)g
-(all)f(Regions.)-2 3330 y Fc(F)-8 b(unctions)n(:)227
-3476 y Fk(In)28 b(addition)g(to)g(those)g(routines)f(applicable)h(to)f
-(all)h(Regions,)f(the)i(follo)n(wing)e(routines)g(ma)n(y)g(also)g(b)r
-(e)i(applied)227 3576 y(to)f(all)f(Circles:)p 0 3776
-V 0 3906 a FA(CmpF)-11 b(rame)1429 3907 y Fd(Comp)s(ound)37
-b(F)-10 b(rame)3128 3906 y FA(CmpF)f(rame)0 4101 y Fc(Description:)44
-b Fk(A)33 b(CmpF)-7 b(rame)32 b(is)g(a)f(comp)r(ound)i(F)-7
-b(rame)31 b(whic)n(h)h(allo)n(ws)f(t)n(w)n(o)g(comp)r(onen)n(t)h(F)-7
-b(rames)32 b(\(of)g(an)n(y)f(class\))227 4201 y(to)i(b)r(e)h(merged)e
-(together)g(to)h(form)g(a)g(more)f(complex)h(F)-7 b(rame.)53
-b(The)33 b(axes)f(of)i(the)f(t)n(w)n(o)g(comp)r(onen)n(t)f(F)-7
-b(rames)227 4300 y(then)25 b(app)r(ear)f(together)f(in)i(the)f
-(resulting)g(CmpF)-7 b(rame)24 b(\(those)h(of)f(the)h(\014rst)f(F)-7
-b(rame,)24 b(follo)n(w)n(ed)g(b)n(y)g(those)g(of)g(the)227
-4400 y(second)j(F)-7 b(rame\).)227 4525 y(Since)24 b(a)f(CmpF)-7
-b(rame)23 b(is)g(itself)h(a)f(F)-7 b(rame,)24 b(it)g(can)f(b)r(e)g
-(used)h(as)e(a)h(comp)r(onen)n(t)g(in)h(forming)f(further)g(CmpF)-7
-b(rames.)227 4624 y(F)g(rames)27 b(of)h(arbitrary)d(complexit)n(y)i(ma)
-n(y)g(b)r(e)h(built)g(from)g(simple)f(individual)h(F)-7
-b(rames)27 b(in)h(this)g(w)n(a)n(y)-7 b(.)227 4749 y(Also)39
-b(since)f(a)h(F)-7 b(rame)38 b(is)h(a)f(Mapping,)j(a)e(CmpF)-7
-b(rame)38 b(can)h(also)f(b)r(e)h(used)g(as)f(a)g(Mapping.)70
-b(Normally)-7 b(,)41 b(a)227 4849 y(CmpF)-7 b(rame)35
-b(is)g(simply)h(equiv)-5 b(alen)n(t)35 b(to)g(a)g(UnitMap,)i(but)f(if)g
-(either)f(of)g(the)h(comp)r(onen)n(t)f(F)-7 b(rames)34
-b(within)i(a)227 4948 y(CmpF)-7 b(rame)41 b(is)f(a)g(Region)g(\(a)g
-(sub-class)g(of)g(F)-7 b(rame\),)44 b(then)d(the)g(CmpF)-7
-b(rame)40 b(will)h(use)f(the)h(Region)f(as)g(a)227 5048
-y(Mapping)g(when)g(transforming)e(v)-5 b(alues)39 b(for)g(axes)g
-(describ)r(ed)h(b)n(y)f(the)h(Region.)73 b(Th)n(us)39
-b(input)i(axis)e(v)-5 b(alues)227 5148 y(corresp)r(onding)26
-b(to)h(p)r(ositions)h(whic)n(h)f(are)g(outside)g(the)h(Region)f(will)h
-(result)f(in)h(bad)f(output)i(axis)d(v)-5 b(alues.)0
-5297 y Fc(Constructor)32 b(F)-8 b(unction:)227 5397 y
-Fk(AST)p Ft(_)p Fk(CMPFRAME)-2 5547 y Fc(Inheritance)n(:)227
-5693 y Fk(The)28 b(CmpF)-7 b(rame)27 b(class)g(inherits)g(from)h(the)g
-(F)-7 b(rame)27 b(class.)p eop end
-%%Page: 479 489
-TeXDict begin 479 488 bop 3643 52 a FG(479)-2 351 y Fc(A)m(ttributes)n
-(:)227 497 y Fk(The)28 b(CmpF)-7 b(rame)28 b(class)g(do)r(es)f(not)h
-(de\014ne)h(an)n(y)e(new)h(attributes)g(b)r(ey)n(ond)g(those)g(whic)n
-(h)g(are)f(applicable)h(to)g(all)227 597 y(F)-7 b(rames.)34
-b(Ho)n(w)n(ev)n(er,)19 b(the)i(attributes)f(of)g(the)g(comp)r(onen)n(t)
-g(F)-7 b(rames)19 b(can)h(b)r(e)g(accessed)f(as)g(if)h(they)h(w)n(ere)e
-(attributes)227 697 y(of)29 b(the)g(CmpF)-7 b(rame.)39
-b(F)-7 b(or)28 b(instance,)g(if)h(a)g(CmpF)-7 b(rame)28
-b(con)n(tains)f(a)h(Sp)r(ecF)-7 b(rame)29 b(and)f(a)g(SkyF)-7
-b(rame,)28 b(then)h(the)227 796 y(CmpF)-7 b(rame)30 b(will)g(recognise)
-e(the)i Ft(")p Fk(Equino)n(x)p Ft(")e Fk(attribute)i(and)g(forw)n(ard)e
-(access)h(requests)g(to)h(the)g(comp)r(onen)n(t)227 896
-y(SkyF)-7 b(rame.)36 b(Lik)n(ewise,)27 b(it)h(will)f(recognise)f(the)h
-Ft(")p Fk(RestF)-7 b(req)p Ft(")26 b Fk(attribute)i(and)f(forw)n(ard)f
-(access)g(requests)g(to)h(the)227 995 y(comp)r(onen)n(t)36
-b(Sp)r(ecF)-7 b(rame.)63 b(An)36 b(axis)g(index)g(can)g(optionally)f(b)
-r(e)h(app)r(ended)h(to)f(the)h(end)f(of)g(an)n(y)f(attribute)227
-1095 y(name,)f(in)f(whic)n(h)f(case)g(the)g(request)g(to)h(access)e
-(the)i(attribute)f(will)h(b)r(e)g(forw)n(arded)e(to)h(the)h(primary)e
-(F)-7 b(rame)227 1195 y(de\014ning)28 b(the)g(sp)r(eci\014ed)g(axis.)-2
-1341 y Fc(F)-8 b(unctions)n(:)227 1487 y Fk(The)33 b(CmpF)-7
-b(rame)32 b(class)f(do)r(es)i(not)f(de\014ne)h(an)n(y)e(new)i(routines)
-f(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)g(applicable)g(to)g(all)227
-1587 y(F)-7 b(rames.)p 0 1781 3780 12 v 0 1911 a FA(CmpMap)1363
-1912 y Fd(Comp)s(ound)38 b(Mapping)3228 1911 y FA(CmpMap)0
-2100 y Fc(Description:)44 b Fk(A)e(CmpMap)f(is)g(a)g(comp)r(ound)g
-(Mapping)g(whic)n(h)g(allo)n(ws)f(t)n(w)n(o)g(comp)r(onen)n(t)h
-(Mappings)g(\(of)g(an)n(y)227 2200 y(class\))28 b(to)g(b)r(e)g
-(connected)g(together)g(to)g(form)g(a)f(more)h(complex)g(Mapping.)38
-b(This)28 b(connection)g(ma)n(y)f(either)h(b)r(e)227
-2300 y Ft(")p Fk(in)34 b(series)p Ft(")e Fk(\(where)h(the)h(\014rst)f
-(Mapping)h(is)f(used)h(to)f(transform)g(the)h(co)r(ordinates)e(of)h
-(eac)n(h)g(p)r(oin)n(t)h(and)f(the)227 2399 y(second)i(mapping)g(is)g
-(then)h(applied)f(to)g(the)g(result\),)i(or)e Ft(")p
-Fk(in)g(parallel)p Ft(")e Fk(\(where)i(one)g(Mapping)g(transforms)227
-2499 y(the)26 b(earlier)f(co)r(ordinates)f(for)h(eac)n(h)g(p)r(oin)n(t)
-h(and)g(the)g(second)f(Mapping)g(sim)n(ultaneously)g(transforms)f(the)i
-(later)227 2598 y(co)r(ordinates\).)227 2722 y(Since)g(a)f(CmpMap)g(is)
-h(itself)g(a)f(Mapping,)g(it)h(can)f(b)r(e)h(used)f(as)g(a)g(comp)r
-(onen)n(t)g(in)h(forming)e(further)i(CmpMaps.)227 2821
-y(Mappings)h(of)h(arbitrary)d(complexit)n(y)i(ma)n(y)g(b)r(e)h(built)h
-(from)e(simple)h(individual)f(Mappings)g(in)h(this)g(w)n(a)n(y)-7
-b(.)0 2968 y Fc(Constructor)32 b(F)-8 b(unction:)227
-3068 y Fk(AST)p Ft(_)p Fk(CMPMAP)-2 3214 y Fc(Inheritance)n(:)227
-3360 y Fk(The)28 b(CmpMap)g(class)e(inherits)i(from)f(the)h(Mapping)f
-(class.)-2 3507 y Fc(A)m(ttributes)n(:)227 3653 y Fk(The)33
-b(CmpMap)f(class)g(do)r(es)g(not)g(de\014ne)h(an)n(y)e(new)i
-(attributes)f(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)g(applicable)g(to)g
-(all)227 3753 y(Mappings.)-2 3899 y Fc(F)-8 b(unctions)n(:)227
-4045 y Fk(The)37 b(CmpMap)g(class)f(do)r(es)g(not)h(de\014ne)f(an)n(y)g
-(new)h(routines)f(b)r(ey)n(ond)h(those)f(whic)n(h)h(are)e(applicable)h
-(to)h(all)227 4145 y(Mappings.)p 0 4339 V 0 4470 a FA(CmpRegion)215
-b Fd(A)39 b(com)m(bination)c(of)k(t)m(w)m(o)e(regions)g(within)g(a)1567
-4585 y(single)h(F)-10 b(rame)3087 4470 y FA(CmpRegion)0
-4773 y Fc(Description:)44 b Fk(A)d(CmpRegion)f(is)g(a)g(Region)g(whic)n
-(h)h(allo)n(ws)e(t)n(w)n(o)g(comp)r(onen)n(t)h(Regions)g(\(of)g(an)n(y)
-g(class\))g(to)g(b)r(e)227 4872 y(com)n(bined)29 b(to)h(form)f(a)g
-(more)f(complex)h(Region.)42 b(This)30 b(com)n(bination)e(ma)n(y)h(b)r
-(e)h(p)r(erformed)f(a)g(b)r(o)r(olean)g(AND,)227 4972
-y(OR)i(or)f(X)n(OR)h(\(exclusiv)n(e)g(OR\))g(op)r(erator.)46
-b(If)31 b(the)h(AND)g(op)r(erator)d(is)j(used,)g(then)f(a)g(p)r
-(osition)g(is)g(inside)g(the)227 5072 y(CmpRegion)24
-b(only)f(if)i(it)f(is)g(inside)g(b)r(oth)g(of)g(its)g(t)n(w)n(o)f(comp)
-r(onen)n(t)h(Regions.)34 b(If)25 b(the)f(OR)g(op)r(erator)e(is)h(used,)
-i(then)227 5171 y(a)i(p)r(osition)f(is)h(inside)g(the)g(CmpRegion)f(if)
-h(it)h(is)e(inside)h(either)g(\(or)f(b)r(oth\))h(of)g(its)g(t)n(w)n(o)f
-(comp)r(onen)n(t)h(Regions.)35 b(If)227 5271 y(the)27
-b(X)n(OR)f(op)r(erator)f(is)h(used,)g(then)h(a)f(p)r(osition)g(is)h
-(inside)f(the)h(CmpRegion)f(if)h(it)f(is)h(inside)f(one)g(but)h(not)f
-(b)r(oth)227 5371 y(of)g(its)f(t)n(w)n(o)g(comp)r(onen)n(t)g(Regions.)
-35 b(Other)25 b(op)r(erators)e(can)i(b)r(e)g(formed)g(b)n(y)g(negating)
-g(one)g(or)f(b)r(oth)i(comp)r(onen)n(t)227 5470 y(Regions)h(b)r(efore)g
-(using)g(them)i(to)e(construct)g(a)g(new)h(CmpRegion.)227
-5593 y(The)h(t)n(w)n(o)e(comp)r(onen)n(t)h(Region)g(need)g(not)h(refer)
-e(to)h(the)h(same)f(co)r(ordinate)f(F)-7 b(rame,)28 b(but)h(it)g(m)n
-(ust)f(b)r(e)h(p)r(ossible)227 5693 y(for)22 b(the)h(AST)p
-Ft(_)p Fk(CONVER)-7 b(T)23 b(function)g(to)f(determine)h(a)f(Mapping)g
-(b)r(et)n(w)n(een)h(them)g(\(an)g(error)d(will)j(b)r(e)g(rep)r(orted)p
-eop end
-%%Page: 480 490
-TeXDict begin 480 489 bop 0 52 a FG(480)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)227 351 y Fk(otherwise)k(when)g(the)h
-(CmpRegion)f(is)g(created\).)54 b(F)-7 b(or)33 b(instance,)i(a)e
-(CmpRegion)g(ma)n(y)f(com)n(bine)h(a)g(Region)227 451
-y(de\014ned)k(within)f(an)g(ICRS)g(SkyF)-7 b(rame)36
-b(with)g(a)g(Region)f(de\014ned)i(within)f(a)g(Galactic)f(SkyF)-7
-b(rame.)62 b(This)36 b(is)227 551 y(acceptable)24 b(b)r(ecause)h(the)g
-(SkyF)-7 b(rame)24 b(class)g(kno)n(ws)f(ho)n(w)h(to)h(con)n(v)n(ert)e
-(b)r(et)n(w)n(een)i(these)g(t)n(w)n(o)f(systems,)h(and)f(con-)227
-650 y(sequen)n(tly)j(the)g(AST)p Ft(_)p Fk(CONVER)-7
-b(T)27 b(function)g(will)h(also)d(b)r(e)j(able)e(to)h(con)n(v)n(ert)f
-(b)r(et)n(w)n(een)h(them.)37 b(In)27 b(suc)n(h)g(cases,)227
-750 y(the)33 b(second)g(comp)r(onen)n(t)f(Region)g(will)h(b)r(e)h(mapp)
-r(ed)f(in)n(to)f(the)h(co)r(ordinate)f(F)-7 b(rame)32
-b(of)h(the)g(\014rst)g(comp)r(onen)n(t)227 849 y(Region,)g(and)g(the)f
-(F)-7 b(rame)32 b(represen)n(ted)g(b)n(y)g(the)h(CmpRegion)f(as)f(a)h
-(whole)g(will)h(b)r(e)g(the)g(F)-7 b(rame)32 b(of)g(the)h(\014rst)227
-949 y(comp)r(onen)n(t)28 b(Region.)227 1077 y(Since)20
-b(a)f(CmpRegion)f(is)i(itself)f(a)g(Region,)i(it)e(can)g(b)r(e)h(used)f
-(as)g(a)g(comp)r(onen)n(t)g(in)g(forming)g(further)g(CmpRegions.)227
-1176 y(Regions)27 b(of)g(arbitrary)f(complexit)n(y)h(ma)n(y)g(b)r(e)h
-(built)g(from)g(simple)f(individual)h(Regions)f(in)g(this)h(w)n(a)n(y)
--7 b(.)0 1332 y Fc(Constructor)32 b(F)-8 b(unction:)227
-1431 y Fk(AST)p Ft(_)p Fk(CMPREGION)-2 1587 y Fc(Inheritance)n(:)227
-1733 y Fk(The)28 b(CmpRegion)f(class)g(inherits)g(from)g(the)h(Region)f
-(class.)-2 1889 y Fc(A)m(ttributes)n(:)227 2035 y Fk(The)g(CmpRegion)f
-(class)g(do)r(es)g(not)h(de\014ne)g(an)n(y)e(new)i(attributes)g(b)r(ey)
-n(ond)f(those)g(whic)n(h)h(are)e(applicable)h(to)h(all)227
-2134 y(Regions.)-2 2290 y Fc(F)-8 b(unctions)n(:)227
-2436 y Fk(The)31 b(CmpRegion)g(class)f(do)r(es)g(not)h(de\014ne)g(an)n
-(y)g(new)g(routines)f(b)r(ey)n(ond)g(those)h(whic)n(h)g(are)f
-(applicable)g(to)h(all)227 2536 y(Regions.)p 0 2741 3780
-12 v 0 2872 a FA(DSBSp)t(ecF)-11 b(rame)1303 2873 y Fd(Dual)39
-b(sideband)f(sp)s(ectral)1128 2987 y(co)s(ordinate)e(system)j
-(description)2865 2872 y FA(DSBSp)t(ecF)-11 b(rame)0
-3182 y Fc(Description:)44 b Fk(A)d(DSBSp)r(ecF)-7 b(rame)41
-b(is)f(a)g(sp)r(ecialised)g(form)g(of)g(Sp)r(ecF)-7 b(rame)40
-b(whic)n(h)h(represen)n(ts)d(p)r(ositions)i(in)h(a)227
-3282 y(sp)r(ectrum)34 b(obtained)f(using)h(a)f(dual)g(sideband)h
-(instrumen)n(t.)55 b(Suc)n(h)33 b(an)h(instrumen)n(t)f(pro)r(duces)g(a)
-g(sp)r(ectrum)227 3381 y(in)d(whic)n(h)f(eac)n(h)g(p)r(oin)n(t)g(con)n
-(tains)g(con)n(tributions)f(from)h(t)n(w)n(o)g(distinctly)h(di\013eren)
-n(t)f(frequencies,)g(one)g(from)g(the)227 3481 y Ft(")p
-Fk(lo)n(w)n(er)34 b(side)i(band)p Ft(")f Fk(\(LSB\))i(and)e(one)h(from)
-f(the)i Ft(")p Fk(upp)r(er)e(side)h(band)p Ft(")f Fk(\(USB\).)i
-(Corresp)r(onding)d(LSB)i(and)227 3581 y(USB)26 b(frequencies)g(are)e
-(connected)i(b)n(y)f(the)i(fact)f(that)g(they)g(are)e(an)i(equal)f
-(distance)h(on)f(either)h(side)f(of)h(a)g(\014xed)227
-3680 y(cen)n(tral)h(frequency)g(kno)n(wn)g(as)g(the)h
-Ft(")p Fk(Lo)r(cal)e(Oscillator)p Ft(")g Fk(\(LO\))i(frequency)-7
-b(.)227 3808 y(When)33 b(quoting)e(a)g(p)r(osition)h(within)g(suc)n(h)g
-(a)f(sp)r(ectrum,)i(it)g(is)e(necessary)f(to)i(indicate)g(whether)g
-(the)g(quoted)227 3907 y(p)r(osition)27 b(is)g(the)g(USB)g(p)r(osition)
-g(or)f(the)i(corresp)r(onding)d(LSB)i(p)r(osition.)36
-b(The)27 b(SideBand)g(attribute)g(pro)n(vides)227 4007
-y(this)36 b(indication.)60 b(Another)35 b(option)g(that)h(the)f
-(SideBand)g(attribute)h(pro)n(vides)e(is)h(to)g(represen)n(t)f(a)h(sp)r
-(ectral)227 4107 y(p)r(osition)28 b(b)n(y)f(its)h(top)r(o)r(cen)n(tric)
-f(o\013set)g(from)h(the)g(LO)f(frequency)-7 b(.)227 4234
-y(In)32 b(practice,)f(the)h(LO)f(frequency)g(is)g(sp)r(eci\014ed)g(b)n
-(y)g(giving)g(the)h(distance)f(from)g(the)g(LO)g(frequency)g(to)g(some)
-227 4334 y Ft(")p Fk(cen)n(tral)p Ft(")37 b Fk(sp)r(ectral)h(p)r
-(osition.)69 b(T)n(ypically)37 b(this)i(cen)n(tral)e(p)r(osition)h(is)h
-(that)f(of)h(some)f(in)n(teresting)f(sp)r(ectral)227
-4434 y(feature.)f(The)23 b(distance)h(from)f(this)h(cen)n(tral)f(p)r
-(osition)g(to)h(the)g(LO)f(frequency)g(is)g(kno)n(wn)g(as)g(the)h
-Ft(")p Fk(in)n(termediate)227 4533 y(frequency)p Ft(")k
-Fk(\(IF\).)h(The)g(v)-5 b(alue)28 b(supplied)h(for)f(IF)h(can)f(b)r(e)h
-(a)f(signed)g(v)-5 b(alue)28 b(in)h(order)e(to)h(indicate)h(whether)f
-(the)227 4633 y(LO)f(frequency)h(is)f(ab)r(o)n(v)n(e)f(or)h(b)r(elo)n
-(w)g(the)h(cen)n(tral)f(p)r(osition.)0 4788 y Fc(Constructor)32
-b(F)-8 b(unction:)227 4888 y Fk(AST)p Ft(_)p Fk(DSBSPECFRAME)-2
-5044 y Fc(Inheritance)n(:)227 5190 y Fk(The)28 b(DSBSp)r(ecF)-7
-b(rame)28 b(class)e(inherits)i(from)f(the)h(Sp)r(ecF)-7
-b(rame)27 b(class.)-2 5345 y Fc(A)m(ttributes)n(:)227
-5491 y Fk(In)39 b(addition)g(to)g(those)f(attributes)h(common)g(to)f
-(all)h(Sp)r(ecF)-7 b(rames,)41 b(ev)n(ery)d(DSBSp)r(ecF)-7
-b(rame)39 b(also)f(has)g(the)227 5591 y(follo)n(wing)27
-b(attributes:)p eop end
-%%Page: 481 491
-TeXDict begin 481 490 bop 3643 52 a FG(481)340 351 y
-Fj(\017)45 b Fk(AlignSideBand:)37 b(Should)28 b(alignmen)n(t)f(o)r
-(ccur)g(b)r(et)n(w)n(een)g(sidebands?)340 477 y Fj(\017)45
-b Fk(DSBCen)n(tre:)37 b(The)28 b(cen)n(tral)e(p)r(osition)i(of)f(in)n
-(terest.)340 603 y Fj(\017)45 b Fk(IF:)28 b(The)g(in)n(termediate)f
-(frequency)g(used)h(to)f(de\014ne)h(the)g(LO)f(frequency)-7
-b(.)340 729 y Fj(\017)45 b Fk(ImagF)-7 b(req:)36 b(The)28
-b(image)e(sideband)i(equiv)-5 b(alen)n(t)27 b(of)h(the)g(rest)f
-(frequency)-7 b(.)340 854 y Fj(\017)45 b Fk(SideBand:)37
-b(Indicates)27 b(whic)n(h)h(sideband)f(the)h(DSBSp)r(ecF)-7
-b(rame)28 b(represen)n(ts.)-2 1009 y Fc(F)-8 b(unctions)n(:)227
-1155 y Fk(The)30 b(DSBSp)r(ecF)-7 b(rame)29 b(class)g(do)r(es)g(not)h
-(de\014ne)f(an)n(y)g(new)h(routines)f(b)r(ey)n(ond)g(those)g(whic)n(h)g
-(are)g(applicable)g(to)227 1255 y(all)f(Sp)r(ecF)-7 b(rames.)p
-0 1440 3780 12 v 0 1571 a FA(DssMap)696 1572 y Fd(Map)39
-b(p)s(oin)m(ts)f(using)g(a)h(Digitised)e(Sky)i(Surv)m(ey)f(plate)1688
-1686 y(solution)3303 1571 y FA(DssMap)0 1838 y Fc(Description:)44
-b Fk(The)29 b(DssMap)g(class)e(implemen)n(ts)j(a)e(Mapping)g(whic)n(h)h
-(transforms)e(b)r(et)n(w)n(een)i(2-dimensional)f(pixel)227
-1937 y(co)r(ordinates)38 b(and)h(an)g(equatorial)e(sky)h(co)r(ordinate)
-g(system)h(\(righ)n(t)g(ascension)e(and)i(declination\))g(using)g(a)227
-2037 y(Digitised)28 b(Sky)g(Surv)n(ey)e(\(DSS\))j(astrometric)d(plate)i
-(solution.)227 2158 y(The)e(input)g(co)r(ordinates)e(are)h(pixel)g(n)n
-(um)n(b)r(ers)g(along)g(the)h(\014rst)f(and)g(second)g(dimensions)g(of)
-h(an)f(image,)g(where)227 2258 y(the)j(cen)n(tre)f(of)h(the)g(\014rst)f
-(pixel)h(is)f(lo)r(cated)h(at)f(\(1,1\))g(and)h(the)g(spacing)e(b)r(et)
-n(w)n(een)i(pixel)g(cen)n(tres)e(is)i(unit)n(y)-7 b(.)227
-2379 y(The)34 b(output)h(co)r(ordinates)e(are)g(righ)n(t)g(ascension)g
-(and)h(declination)g(in)h(radians.)55 b(The)34 b(celestial)g(co)r
-(ordinate)227 2478 y(system)22 b(used)g(\(FK4,)h(FK5,)g(etc.\))35
-b(is)22 b(unsp)r(eci\014ed,)i(and)e(will)g(usually)g(b)r(e)g(indicated)
-h(b)n(y)e(appropriate)g(k)n(eyw)n(ords)227 2578 y(in)28
-b(a)f(FITS)h(header.)0 2720 y Fc(Constructor)k(F)-8 b(unction:)227
-2820 y Fk(The)24 b(DssMap)f(class)g(do)r(es)g(not)g(ha)n(v)n(e)g(a)g
-(constructor)f(function.)36 b(A)24 b(DssMap)f(is)h(created)e(only)h(as)
-g(a)g(b)n(y-pro)r(duct)227 2919 y(of)35 b(reading)e(a)h(F)-7
-b(rameSet)35 b(\(using)f(AST)p Ft(_)p Fk(READ\))h(from)f(a)g(FitsChan)h
-(whic)n(h)g(con)n(tains)e(FITS)i(header)f(cards)227 3019
-y(describing)25 b(a)f(DSS)i(plate)g(solution,)f(and)g(whose)f(Enco)r
-(ding)h(attribute)g(is)g(set)h(to)f Ft(")p Fk(DSS)p Ft(")p
-Fk(.)36 b(The)25 b(result)g(of)g(suc)n(h)227 3119 y(a)i(read,)g(if)h
-(successful,)g(is)f(a)g(F)-7 b(rameSet)28 b(whose)f(base)g(and)g
-(curren)n(t)g(F)-7 b(rames)27 b(are)f(related)h(b)n(y)g(a)h(DssMap.)-2
-3261 y Fc(Inheritance)n(:)227 3407 y Fk(The)g(DssMap)f(class)g
-(inherits)g(from)h(the)g(Mapping)f(class.)-2 3550 y Fc(A)m(ttributes)n
-(:)227 3696 y Fk(The)36 b(DssMap)f(class)g(do)r(es)g(not)g(de\014ne)h
-(an)n(y)f(new)g(attributes)g(b)r(ey)n(ond)h(those)f(whic)n(h)g(are)g
-(applicable)g(to)g(all)227 3795 y(Mappings.)-2 3938 y
-Fc(F)-8 b(unctions)n(:)227 4084 y Fk(The)40 b(DssMap)g(class)e(do)r(es)
-i(not)g(de\014ne)g(an)n(y)f(new)h(routines)f(b)r(ey)n(ond)g(those)h
-(whic)n(h)f(are)g(applicable)g(to)h(all)227 4183 y(Mappings.)p
-0 4368 V 0 4500 a FA(Ellipse)231 b Fd(An)39 b(elliptical)c(region)j
-(within)f(a)h(2-dimensional)e(F)-10 b(rame)229 b FA(Ellipse)0
-4675 y Fc(Description:)44 b Fk(The)31 b(Ellipse)e(class)h(implemen)n
-(ts)g(a)g(Region)f(whic)n(h)i(represen)n(ts)d(a)i(ellipse)g(within)h(a)
-f(2-dimensional)227 4774 y(F)-7 b(rame.)0 4917 y Fc(Constructor)32
-b(F)-8 b(unction:)227 5016 y Fk(AST)p Ft(_)p Fk(ELLIPSE)-2
-5159 y Fc(Inheritance)n(:)227 5305 y Fk(The)28 b(Ellipse)f(class)g
-(inherits)g(from)g(the)h(Region)f(class.)-2 5447 y Fc(A)m(ttributes)n
-(:)227 5593 y Fk(The)39 b(Ellipse)g(class)f(do)r(es)g(not)h(de\014ne)g
-(an)n(y)f(new)h(attributes)g(b)r(ey)n(ond)g(those)f(whic)n(h)h(are)f
-(applicable)g(to)h(all)227 5693 y(Regions.)p eop end
-%%Page: 482 492
-TeXDict begin 482 491 bop 0 52 a FG(482)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)-2 351 y Fc(F)-8 b(unctions)n(:)227
-497 y Fk(In)28 b(addition)g(to)g(those)g(routines)f(applicable)h(to)f
-(all)h(Regions,)f(the)i(follo)n(wing)e(routines)g(ma)n(y)g(also)g(b)r
-(e)i(applied)227 597 y(to)f(all)f(Ellipses:)p 0 798 3780
-12 v 0 930 a FA(FitsChan)843 937 y Fd(I/O)39 b(Channel)f(using)g(FITS)h
-(header)f(cards)h(to)1440 1058 y(represen)m(t)f(Ob)7
-b(jects)3240 930 y FA(FitsChan)0 1253 y Fc(Description:)44
-b Fk(A)27 b(FitsChan)e(is)h(a)g(sp)r(ecialised)f(form)h(of)f(Channel)h
-(whic)n(h)g(supp)r(orts)f(I/O)g(op)r(erations)g(in)n(v)n(olving)f(the)
-227 1353 y(use)32 b(of)h(FITS)f(\(Flexible)h(Image)e(T)-7
-b(ransp)r(ort)31 b(System\))i(header)e(cards.)50 b(W)-7
-b(riting)32 b(an)g(Ob)5 b(ject)33 b(to)f(a)g(FitsChan)227
-1453 y(\(using)22 b(AST)p Ft(_)p Fk(WRITE\))g(will,)h(if)f(the)g(Ob)5
-b(ject)22 b(is)f(suitable,)i(generate)e(a)g(description)g(of)h(that)g
-(Ob)5 b(ject)21 b(comp)r(osed)227 1552 y(of)k(FITS)h(header)e(cards,)h
-(and)g(reading)f(from)h(a)g(FitsChan)g(will)g(create)g(a)f(new)i(Ob)5
-b(ject)25 b(from)g(its)g(FITS)g(header)227 1652 y(card)i(description.)
-227 1777 y(While)36 b(a)e(FitsChan)h(is)f(activ)n(e,)i(it)f(represen)n
-(ts)f(a)g(bu\013er)h(whic)n(h)g(ma)n(y)f(con)n(tain)g(zero)f(or)h(more)
-g(80-c)n(haracter)227 1877 y Ft(")p Fk(header)29 b(cards)p
-Ft(")f Fk(conforming)g(to)i(FITS)f(con)n(v)n(en)n(tions.)41
-b(An)n(y)30 b(sequence)f(of)h(FITS-conforming)e(header)h(cards)227
-1977 y(ma)n(y)f(b)r(e)g(stored,)g(apart)f(from)h(the)h
-Ft(")p Fk(END)p Ft(")e Fk(card)h(whose)f(existence)h(is)g(merely)g
-(implied.)39 b(The)29 b(cards)e(ma)n(y)g(b)r(e)227 2076
-y(accessed)38 b(in)h(an)n(y)f(order)f(b)n(y)i(using)f(the)h(FitsChan's)
-g(in)n(teger)f(Card)g(attribute,)k(whic)n(h)c(iden)n(ti\014es)h(a)g
-Ft(")p Fk(cur-)227 2176 y(ren)n(t)p Ft(")44 b Fk(card,)k(to)c(whic)n(h)
-h(subsequen)n(t)f(op)r(erations)f(apply)-7 b(.)87 b(Searc)n(hes)43
-b(based)h(on)h(k)n(eyw)n(ord)d(ma)n(y)i(b)r(e)h(p)r(er-)227
-2276 y(formed)23 b(\(using)h(AST)p Ft(_)p Fk(FINDFITS\),)h(new)e(cards)
-f(ma)n(y)h(b)r(e)h(inserted)f(\(AST)p Ft(_)p Fk(PUTFITS,)h(AST)p
-Ft(_)p Fk(PUTCARDS,)227 2375 y(AST)p Ft(_)p Fk(SETFITS)p
-Fm(<)p Fk(X)p Fm(>)p Fk(\))18 b(and)g(existing)g(ones)g(ma)n(y)g(b)r(e)
-h(deleted)f(\(AST)p Ft(_)p Fk(DELFITS\),)h(extracted)f(\(AST)p
-Ft(_)p Fk(GETFITS)p Fm(<)p Fk(X)p Fm(>)p Fk(\))227 2475
-y(or)27 b(c)n(hanged)g(\(AST)p Ft(_)p Fk(SETFITS)p Fm(<)p
-Fk(X)p Fm(>)p Fk(\).)227 2600 y(When)37 b(y)n(ou)f(create)g(a)g
-(FitsChan,)j(y)n(ou)d(ha)n(v)n(e)g(the)h(option)f(of)h(sp)r(ecifying)g
-Ft(")p Fk(source)p Ft(")d Fk(and)j Ft(")p Fk(sink)p Ft(")e
-Fk(functions)227 2700 y(whic)n(h)26 b(connect)g(it)h(to)f(external)f
-(data)h(stores)f(b)n(y)h(reading)f(and)h(writing)g(FITS)g(header)g
-(cards.)35 b(If)26 b(y)n(ou)g(pro)n(vide)227 2800 y(a)h(source)f
-(function,)j(it)e(is)h(used)f(to)g(\014ll)h(the)g(FitsChan)f(with)h
-(header)f(cards)f(when)i(it)g(is)f(accessed)f(for)h(the)h(\014rst)227
-2899 y(time.)56 b(If)34 b(y)n(ou)f(do)h(not)f(pro)n(vide)g(a)g(source)g
-(function,)j(the)e(FitsChan)g(remains)e(empt)n(y)i(un)n(til)g(y)n(ou)f
-(explicitly)227 2999 y(en)n(ter)23 b(data)g(in)n(to)g(it)g(\(e.g.)36
-b(using)23 b(AST)p Ft(_)p Fk(PUTFITS,)g(AST)p Ft(_)p
-Fk(PUTCARDS)h(or)e(AST)p Ft(_)p Fk(WRITE\).)i(If)f(y)n(ou)g(pro)n(vide)
-227 3099 y(a)h(sink)f(function,)j(it)e(is)g(used)g(to)f(deliv)n(er)g
-(an)n(y)g(remaining)g(con)n(ten)n(ts)h(of)f(a)h(FitsChan)g(to)g(an)f
-(external)g(data)h(store)227 3198 y(when)30 b(the)g(FitsChan)g(is)f
-(deleted.)43 b(If)30 b(y)n(ou)f(do)g(not)h(pro)n(vide)e(a)h(sink)h
-(function,)h(an)n(y)d(header)h(cards)g(remaining)227
-3298 y(when)f(the)g(FitsChan)g(is)g(deleted)g(will)g(b)r(e)g(lost,)f
-(so)g(y)n(ou)g(should)h(arrange)d(to)i(extract)g(them)i(\014rst)e(if)h
-(necessary)227 3397 y(\(e.g.)37 b(using)27 b(AST)p Ft(_)p
-Fk(FINDFITS)i(or)e(AST)p Ft(_)p Fk(READ\).)227 3523 y(Co)r(ordinate)i
-(system)g(information)g(ma)n(y)g(b)r(e)h(describ)r(ed)g(using)f(FITS)h
-(header)f(cards)f(using)i(sev)n(eral)d(di\013eren)n(t)227
-3623 y(con)n(v)n(en)n(tions,)h(termed)h Ft(")p Fk(enco)r(dings)p
-Ft(")p Fk(.)39 b(When)29 b(an)g(AST)g(Ob)5 b(ject)29
-b(is)f(written)h(to)g(\(or)f(read)g(from\))h(a)f(FitsChan,)227
-3722 y(the)22 b(v)-5 b(alue)22 b(of)g(the)g(FitsChan's)g(Enco)r(ding)f
-(attribute)g(determines)h(ho)n(w)f(the)h(Ob)5 b(ject)22
-b(is)g(con)n(v)n(erted)e(to)i(\(or)f(from\))227 3822
-y(a)31 b(description)g(in)n(v)n(olving)g(FITS)g(header)g(cards.)48
-b(In)32 b(general,)f(di\013eren)n(t)h(enco)r(dings)f(will)g(result)h
-(in)f(di\013eren)n(t)227 3922 y(sets)24 b(of)f(header)g(cards)g(to)g
-(describ)r(e)h(the)g(same)f(Ob)5 b(ject.)35 b(Examples)23
-b(of)g(enco)r(dings)g(include)h(the)h(DSS)f(enco)r(ding)227
-4021 y(\(based)35 b(on)g(con)n(v)n(en)n(tions)f(used)h(b)n(y)g(the)h
-(STScI)g(Digitised)f(Sky)g(Surv)n(ey)g(data\),)i(the)f(FITS-W)n(CS)f
-(enco)r(ding)227 4121 y(\(based)30 b(on)g(a)g(prop)r(osed)f(FITS)h
-(standard\))g(and)g(the)g(NA)-7 b(TIVE)31 b(enco)r(ding)e(\(a)h(near)f
-(loss-less)g(w)n(a)n(y)g(of)h(storing)227 4220 y(AST)e(Ob)5
-b(jects)27 b(in)h(FITS)g(headers\).)227 4346 y(The)e(a)n(v)-5
-b(ailable)25 b(enco)r(dings)g(di\013er)h(in)g(the)g(range)f(of)h(Ob)5
-b(jects)25 b(they)h(can)g(represen)n(t,)f(in)h(the)g(n)n(um)n(b)r(er)g
-(of)g(Ob)5 b(ject)227 4446 y(descriptions)31 b(that)h(can)g(co)r(exist)
-f(in)h(the)g(same)g(FitsChan,)h(and)e(in)h(their)g(accessibilit)n(y)f
-(to)h(other)f(\(external\))227 4545 y(astronom)n(y)36
-b(applications)g(\(see)i(the)f(Enco)r(ding)g(attribute)h(for)f
-(details\).)66 b(Enco)r(dings)36 b(are)h(not)g(necessarily)227
-4645 y(m)n(utually)28 b(exclusiv)n(e)g(and)g(it)h(ma)n(y)e(sometimes)h
-(b)r(e)h(p)r(ossible)f(to)g(describ)r(e)g(the)g(same)g(Ob)5
-b(ject)28 b(in)h(sev)n(eral)d(w)n(a)n(ys)227 4744 y(within)j(a)e
-(particular)f(set)i(of)f(FITS)h(header)f(cards)f(b)n(y)i(using)f(sev)n
-(eral)f(di\013eren)n(t)h(enco)r(dings.)227 4870 y(The)k(detailed)h(b)r
-(eha)n(viour)e(of)h(AST)p Ft(_)p Fk(READ)g(and)g(AST)p
-Ft(_)p Fk(WRITE,)g(when)h(used)f(with)g(a)g(FitsChan,)h(dep)r(ends)227
-4970 y(on)h(the)h(enco)r(ding)f(in)g(use.)54 b(In)33
-b(general,)g(ho)n(w)n(ev)n(er,)g(all)g(successful)f(use)h(of)h(AST)p
-Ft(_)p Fk(READ)f(is)g(destructiv)n(e,)h(so)227 5069 y(that)29
-b(FITS)g(header)f(cards)f(are)h(consumed)g(in)h(the)g(pro)r(cess)f(of)g
-(reading)g(an)g(Ob)5 b(ject,)29 b(and)f(are)g(remo)n(v)n(ed)f(from)227
-5169 y(the)i(FitsChan)f(\(this)h(deletion)g(can)f(b)r(e)h(prev)n(en)n
-(ted)e(for)h(sp)r(eci\014c)g(cards)g(b)n(y)g(calling)f(the)i(AST)p
-Ft(_)p Fk(RET)-7 b(AINFITS)227 5269 y(routine\).)36 b(An)23
-b(unsuccessful)g(call)g(of)g(AST)p Ft(_)p Fk(READ)h(\(for)f(instance,)h
-(caused)f(b)n(y)f(the)i(FitsChan)f(not)h(con)n(taining)227
-5368 y(the)19 b(necessary)e(FITS)i(headers)e(cards)h(needed)g(to)h
-(create)e(an)i(Ob)5 b(ject\))18 b(results)g(in)h(the)g(con)n(ten)n(ts)f
-(of)h(the)g(FitsChan)227 5468 y(b)r(eing)28 b(left)g(unc)n(hanged.)227
-5593 y(If)38 b(the)f(enco)r(ding)f(in)h(use)g(allo)n(ws)f(only)g(a)h
-(single)f(Ob)5 b(ject)37 b(description)f(to)h(b)r(e)g(stored)f(in)h(a)g
-(FitsChan)g(\(e.g.)227 5693 y(the)31 b(DSS,)g(FITS-W)n(CS)g(and)f
-(FITS-IRAF)h(enco)r(dings\),)g(then)g(write)g(op)r(erations)e(using)h
-(AST)p Ft(_)p Fk(WRITE)g(will)p eop end
-%%Page: 483 493
-TeXDict begin 483 492 bop 3643 52 a FG(483)227 351 y
-Fk(o)n(v)n(er-write)36 b(an)n(y)i(existing)h(Ob)5 b(ject)38
-b(description)g(using)g(that)h(enco)r(ding.)70 b(Otherwise)37
-b(\(e.g.)70 b(the)39 b(NA)-7 b(TIVE)227 451 y(enco)r(ding\),)26
-b(m)n(ultiple)g(Ob)5 b(ject)25 b(descriptions)f(are)h(written)g(sequen)
-n(tially)g(and)g(ma)n(y)f(later)h(b)r(e)h(read)e(bac)n(k)h(in)g(the)227
-551 y(same)i(sequence.)0 699 y Fc(Constructor)32 b(F)-8
-b(unction:)227 799 y Fk(AST)p Ft(_)p Fk(FITSCHAN)-2 947
-y Fc(Inheritance)n(:)227 1093 y Fk(The)28 b(FitsChan)g(class)e
-(inherits)i(from)f(the)h(Channel)f(class.)-2 1242 y Fc(A)m(ttributes)n
-(:)227 1388 y Fk(In)37 b(addition)f(to)g(those)g(attributes)g(common)g
-(to)g(all)g(Channels,)i(ev)n(ery)d(FitsChan)h(also)f(has)h(the)h(follo)
-n(wing)227 1487 y(attributes:)340 1747 y Fj(\017)45 b
-Fk(AllW)-7 b(arnings:)37 b(A)28 b(list)f(of)h(the)g(a)n(v)-5
-b(ailable)26 b(conditions)340 1879 y Fj(\017)45 b Fk(Card:)36
-b(Index)28 b(of)g(curren)n(t)e(FITS)i(card)f(in)h(a)f(FitsChan)340
-2011 y Fj(\017)45 b Fk(CarLin:)36 b(Ignore)27 b(spherical)f(rotations)g
-(on)i(CAR)g(pro)5 b(jections?)340 2142 y Fj(\017)45 b
-Fk(CDMatrix:)37 b(Use)27 b(a)h(CD)g(matrix)f(instead)g(of)h(a)f(PC)g
-(matrix?)340 2274 y Fj(\017)45 b Fk(Clean:)37 b(Remo)n(v)n(e)26
-b(cards)h(used)g(whilst)h(reading)f(ev)n(en)g(if)h(an)f(error)f(o)r
-(ccurs?)340 2406 y Fj(\017)45 b Fk(DefB1950:)36 b(Use)27
-b(FK4)g(B1950)f(as)h(default)h(equatorial)e(co)r(ordinates?)340
-2538 y Fj(\017)45 b Fk(Enco)r(ding:)36 b(System)28 b(for)f(enco)r(ding)
-g(Ob)5 b(jects)28 b(as)f(FITS)g(headers)340 2670 y Fj(\017)45
-b Fk(FitsDigits:)38 b(Digits)27 b(of)h(precision)f(for)g(\015oating-p)r
-(oin)n(t)f(FITS)i(v)-5 b(alues)340 2802 y Fj(\017)45
-b Fk(Iw)n(c:)37 b(Add)28 b(a)f(F)-7 b(rame)27 b(describing)g(In)n
-(termediate)g(W)-7 b(orld)27 b(Co)r(ords?)340 2934 y
-Fj(\017)45 b Fk(Ncard:)37 b(Num)n(b)r(er)27 b(of)h(FITS)g(header)f
-(cards)f(in)i(a)f(FitsChan)340 3065 y Fj(\017)45 b Fk(W)-7
-b(arnings:)36 b(Pro)r(duces)27 b(w)n(arnings)e(ab)r(out)j(selected)f
-(conditions)-2 3226 y Fc(F)-8 b(unctions)n(:)227 3372
-y Fk(In)25 b(addition)g(to)f(those)g(routines)g(applicable)h(to)f(all)g
-(Channels,)h(the)g(follo)n(wing)f(routines)g(ma)n(y)g(also)g(b)r(e)h
-(applied)227 3472 y(to)j(all)f(FitsChans:)340 3732 y
-Fj(\017)45 b Fk(AST)p Ft(_)p Fk(DELFITS:)28 b(Delete)g(the)g(curren)n
-(t)f(FITS)h(card)f(in)g(a)h(FitsChan)340 3863 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(FINDFITS:)29 b(Find)f(a)f(FITS)h(card)f(in)h(a)f
-(FitsChan)h(b)n(y)f(k)n(eyw)n(ord)340 3995 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(GETFITS)p Fm(<)p Fk(X)p Fm(>)p Fk(:)36
-b(Get)28 b(a)g(k)n(eyw)n(ord)d(v)-5 b(alue)28 b(from)f(a)g(FitsChan)340
-4127 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(SETFITS)p Fm(<)p
-Fk(X)p Fm(>)p Fk(:)36 b(Store)27 b(a)h(new)f(k)n(eyw)n(ord)f(v)-5
-b(alue)27 b(in)h(a)g(FitsChan)340 4259 y Fj(\017)45 b
-Fk(AST)p Ft(_)p Fk(PUTFITS:)28 b(Store)f(a)g(FITS)h(header)f(card)g(in)
-g(a)h(FitsChan)340 4391 y Fj(\017)45 b Fk(AST)p Ft(_)p
-Fk(PUTCARDS:)29 b(Stores)d(a)i(set)f(of)h(FITS)g(header)e(card)h(in)h
-(a)f(FitsChan)340 4523 y Fj(\017)45 b Fk(AST)p Ft(_)p
-Fk(RET)-7 b(AINFITS:)28 b(Ensure)f(curren)n(t)g(card)f(is)i(retained)f
-(in)h(a)f(FitsChan)340 4655 y Fj(\017)45 b Fk(AST)p Ft(_)p
-Fk(TESTFITS:)28 b(T)-7 b(est)27 b(if)i(a)e(k)n(eyw)n(ord)e(has)i(a)h
-(de\014ned)g(v)-5 b(alue)27 b(in)h(a)f(FitsChan)p 0 4852
-3780 12 v 0 4984 a FA(FluxF)-11 b(rame)594 b Fd(Measured)39
-b(\015ux)g(description)592 b FA(FluxF)-11 b(rame)0 5170
-y Fc(Description:)44 b Fk(A)39 b(FluxF)-7 b(rame)37 b(is)h(a)f(sp)r
-(ecialised)h(form)f(of)h(one-dimensional)e(F)-7 b(rame)38
-b(whic)n(h)f(represen)n(ts)g(v)-5 b(arious)227 5270 y(systems)29
-b(used)h(to)f(represen)n(t)f(the)i(signal)f(lev)n(el)g(in)g(an)h
-(observ)-5 b(ation.)41 b(The)29 b(particular)f(co)r(ordinate)h(system)g
-(to)227 5370 y(b)r(e)i(used)f(is)g(sp)r(eci\014ed)g(b)n(y)g(setting)g
-(the)g(FluxF)-7 b(rame's)29 b(System)i(attribute)f(quali\014ed,)g(as)f
-(necessary)-7 b(,)29 b(b)n(y)h(other)227 5469 y(attributes)e(suc)n(h)f
-(as)g(the)h(units,)g(etc)g(\(see)f(the)h(description)f(of)h(the)g
-(System)g(attribute)f(for)g(details\).)227 5593 y(All)i(\015ux)f(v)-5
-b(alues)28 b(are)f(assumed)g(to)h(b)r(e)h(measured)e(at)h(the)h(same)e
-(frequency)h(or)f(w)n(a)n(v)n(elength)f(\(as)i(giv)n(en)f(b)n(y)h(the)
-227 5693 y(Sp)r(ecV)-7 b(al)28 b(attribute\).)38 b(Th)n(us)27
-b(this)h(class)e(is)i(more)f(appropriate)f(for)h(use)g(with)h(images)f
-(rather)f(than)i(sp)r(ectra.)p eop end
-%%Page: 484 494
-TeXDict begin 484 493 bop 0 52 a FG(484)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)0 351 y Fc(Constructor)j(F)-8
-b(unction:)227 451 y Fk(AST)p Ft(_)p Fk(FLUXFRAME)-2
-601 y Fc(Inheritance)n(:)227 747 y Fk(The)28 b(FluxF)-7
-b(rame)27 b(class)g(inherits)g(from)h(the)g(F)-7 b(rame)27
-b(class.)-2 897 y Fc(A)m(ttributes)n(:)227 1043 y Fk(In)38
-b(addition)f(to)g(those)g(attributes)g(common)g(to)g(all)g(F)-7
-b(rames,)38 b(ev)n(ery)e(FluxF)-7 b(rame)37 b(also)f(has)h(the)h(follo)
-n(wing)227 1143 y(attributes:)340 1404 y Fj(\017)45 b
-Fk(Sp)r(ecV)-7 b(al:)38 b(The)27 b(sp)r(ectral)g(p)r(osition)h(at)f
-(whic)n(h)h(the)g(\015ux)f(v)-5 b(alues)28 b(are)e(measured.)-2
-1567 y Fc(F)-8 b(unctions)n(:)227 1713 y Fk(The)33 b(FluxF)-7
-b(rame)33 b(class)f(do)r(es)h(not)g(de\014ne)g(an)n(y)f(new)h(routines)
-f(b)r(ey)n(ond)h(those)g(whic)n(h)g(are)f(applicable)g(to)h(all)227
-1812 y(F)-7 b(rames.)p 0 2012 3780 12 v 0 2143 a FA(F)c(rame)1112
-2144 y Fd(Co)s(ordinate)36 b(system)i(description)3412
-2143 y FA(F)-11 b(rame)0 2333 y Fc(Description:)44 b
-Fk(This)22 b(class)e(is)h(used)h(to)f(represen)n(t)f(co)r(ordinate)g
-(systems.)34 b(It)22 b(do)r(es)f(this)h(in)f(rather)g(the)g(same)g(w)n
-(a)n(y)f(that)227 2433 y(a)31 b(frame)f(around)g(a)h(graph)e(describ)r
-(es)i(the)g(co)r(ordinate)f(space)g(in)h(whic)n(h)g(data)f(are)g
-(plotted.)47 b(Consequen)n(tly)-7 b(,)227 2532 y(a)35
-b(F)-7 b(rame)34 b(has)g(a)g(Title)h(\(string\))g(attribute,)i(whic)n
-(h)e(describ)r(es)f(the)h(co)r(ordinate)e(space,)j(and)f(con)n(tains)f
-(axes)227 2632 y(whic)n(h)28 b(in)h(turn)f(hold)g(information)g(suc)n
-(h)g(as)f(Lab)r(el)h(and)g(Units)h(strings)e(whic)n(h)h(are)g(used)g
-(for)f(lab)r(elling)h(\(e.g.\))227 2731 y(graphical)e(output.)38
-b(In)27 b(general,)g(ho)n(w)n(ev)n(er,)e(the)j(n)n(um)n(b)r(er)g(of)f
-(axes)g(is)g(not)h(restricted)f(to)g(t)n(w)n(o.)227 2856
-y(F)-7 b(unctions)24 b(are)f(a)n(v)-5 b(ailable)23 b(for)g(con)n(v)n
-(erting)f(F)-7 b(rame)24 b(co)r(ordinate)e(v)-5 b(alues)24
-b(in)n(to)g(a)f(form)h(suitable)f(for)h(displa)n(y)-7
-b(,)24 b(and)227 2956 y(also)j(for)g(calculating)g(distances)g(and)g
-(o\013sets)g(b)r(et)n(w)n(een)h(p)r(ositions)f(within)h(the)g(F)-7
-b(rame.)227 3081 y(F)g(rames)27 b(ma)n(y)g(also)f(con)n(tain)h(kno)n
-(wledge)g(of)g(ho)n(w)g(to)h(transform)e(to)i(and)f(from)g(related)g
-(co)r(ordinate)g(systems.)0 3231 y Fc(Constructor)32
-b(F)-8 b(unction:)227 3330 y Fk(AST)p Ft(_)p Fk(FRAME)0
-3480 y Fc(Notes:)340 3763 y Fj(\017)45 b Fk(When)40 b(used)f(as)g(a)g
-(Mapping,)j(a)c(F)-7 b(rame)39 b(implemen)n(ts)h(a)f(unit)g(\(n)n
-(ull\))h(transformation)e(in)i(b)r(oth)f(the)427 3863
-y(forw)n(ard)22 b(and)g(in)n(v)n(erse)g(directions)g(\(equiv)-5
-b(alen)n(t)23 b(to)g(a)g(UnitMap\).)36 b(The)23 b(Nin)h(and)f(Nout)g
-(attribute)g(v)-5 b(alues)427 3962 y(are)27 b(b)r(oth)h(equal)f(to)g
-(the)h(n)n(um)n(b)r(er)g(of)f(F)-7 b(rame)27 b(axes.)-2
-4125 y Fc(Inheritance)n(:)227 4271 y Fk(The)h(F)-7 b(rame)27
-b(class)g(inherits)g(from)g(the)h(Mapping)g(class.)-2
-4421 y Fc(A)m(ttributes)n(:)227 4567 y Fk(In)33 b(addition)g(to)g
-(those)g(attributes)g(common)f(to)h(all)g(Mappings,)g(ev)n(ery)f(F)-7
-b(rame)32 b(also)g(has)h(the)g(follo)n(wing)f(at-)227
-4666 y(tributes)20 b(\(if)h(the)g(F)-7 b(rame)19 b(has)h(only)g(one)f
-(axis,)i(the)g(axis)e(sp)r(eci\014er)h(can)f(b)r(e)i(omited)f(from)g
-(the)g(follo)n(wing)f(attribute)227 4766 y(names\):)340
-5028 y Fj(\017)45 b Fk(AlignSystem:)37 b(Co)r(ordinate)27
-b(system)g(used)h(to)f(align)g(F)-7 b(rames)340 5161
-y Fj(\017)45 b Fk(Bottom\(axis\):)37 b(Lo)n(w)n(est)26
-b(axis)h(v)-5 b(alue)27 b(to)h(displa)n(y)340 5294 y
-Fj(\017)45 b Fk(Digits/Digits\(axis\):)37 b(Num)n(b)r(er)27
-b(of)h(digits)f(of)h(precision)340 5427 y Fj(\017)45
-b Fk(Direction\(axis\):)37 b(Displa)n(y)27 b(axis)g(in)h(con)n(v)n(en)n
-(tional)d(direction?)340 5560 y Fj(\017)45 b Fk(Domain:)37
-b(Co)r(ordinate)27 b(system)g(domain)340 5693 y Fj(\017)45
-b Fk(Dut1:)38 b(Di\013erence)27 b(b)r(et)n(w)n(een)h(the)g(UT1)f(and)h
-(UTC)g(timescale)p eop end
-%%Page: 485 495
-TeXDict begin 485 494 bop 3643 52 a FG(485)340 351 y
-Fj(\017)45 b Fk(Ep)r(o)r(c)n(h:)37 b(Ep)r(o)r(c)n(h)27
-b(of)g(observ)-5 b(ation)340 483 y Fj(\017)45 b Fk(F)-7
-b(ormat\(axis\):)36 b(F)-7 b(ormat)27 b(sp)r(eci\014cation)g(for)g
-(axis)g(v)-5 b(alues)340 615 y Fj(\017)45 b Fk(Lab)r(el\(axis\):)37
-b(Axis)27 b(lab)r(el)340 747 y Fj(\017)45 b Fk(Matc)n(hEnd:)37
-b(Matc)n(h)27 b(trailing)g(axes?)340 879 y Fj(\017)45
-b Fk(MaxAxes:)36 b(Maxim)n(um)28 b(n)n(um)n(b)r(er)f(of)h(F)-7
-b(rame)27 b(axes)f(to)i(matc)n(h)340 1011 y Fj(\017)45
-b Fk(MinAxes:)37 b(Minim)n(um)28 b(n)n(um)n(b)r(er)g(of)f(F)-7
-b(rame)27 b(axes)g(to)h(matc)n(h)340 1143 y Fj(\017)45
-b Fk(Naxes:)36 b(Num)n(b)r(er)28 b(of)g(F)-7 b(rame)27
-b(axes)340 1275 y Fj(\017)45 b Fk(NormUnit\(axis\):)37
-b(Normalised)27 b(axis)g(ph)n(ysical)f(units)340 1407
-y Fj(\017)45 b Fk(ObsAlt:)37 b(Geo)r(detic)28 b(altitude)g(of)g(observ)
-n(er)340 1539 y Fj(\017)45 b Fk(ObsLat:)36 b(Geo)r(detic)28
-b(latitude)g(of)g(observ)n(er)340 1671 y Fj(\017)45 b
-Fk(ObsLon:)36 b(Geo)r(detic)28 b(longitude)f(of)h(observ)n(er)340
-1803 y Fj(\017)45 b Fk(P)n(erm)n(ute:)36 b(P)n(erm)n(ute)27
-b(axis)f(order?)340 1935 y Fj(\017)45 b Fk(Preserv)n(eAxes:)34
-b(Preserv)n(e)26 b(axes?)340 2067 y Fj(\017)45 b Fk(Sym)n(b)r
-(ol\(axis\):)37 b(Axis)27 b(sym)n(b)r(ol)340 2199 y Fj(\017)45
-b Fk(System:)37 b(Co)r(ordinate)27 b(system)g(used)h(to)f(describ)r(e)g
-(the)h(domain)340 2331 y Fj(\017)45 b Fk(Title:)38 b(F)-7
-b(rame)27 b(title)340 2463 y Fj(\017)45 b Fk(T)-7 b(op\(axis\):)37
-b(Highest)27 b(axis)g(v)-5 b(alue)27 b(to)h(displa)n(y)340
-2595 y Fj(\017)45 b Fk(Unit\(axis\):)38 b(Axis)27 b(ph)n(ysical)g
-(units)-2 2756 y Fc(F)-8 b(unctions)n(:)227 2902 y Fk(In)24
-b(addition)f(to)g(those)g(routines)f(applicable)h(to)g(all)g(Mappings,)
-h(the)f(follo)n(wing)g(routines)f(ma)n(y)h(also)f(b)r(e)i(applied)227
-3001 y(to)k(all)f(F)-7 b(rames:)340 3261 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(ANGLE:)28 b(Find)g(the)g(angle)f(subtended)h(b)n
-(y)f(t)n(w)n(o)g(p)r(oin)n(ts)h(at)f(a)g(third)h(p)r(oin)n(t)340
-3393 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(AXANGLE:)29 b(Find)f(the)g
-(angle)e(from)i(an)f(axis,)g(to)g(a)h(line)f(through)g(t)n(w)n(o)g(p)r
-(oin)n(ts)340 3525 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(AXDIST)-7
-b(ANCE:)29 b(Calculate)e(the)h(distance)f(b)r(et)n(w)n(een)h(t)n(w)n(o)
-f(axis)g(v)-5 b(alues)340 3657 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(AX)n(OFFSET:)28 b(Calculate)f(an)g(o\013set)h(along)e(an)h
-(axis)340 3789 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(CONVER)-7
-b(T:)28 b(Determine)g(ho)n(w)f(to)g(con)n(v)n(ert)f(b)r(et)n(w)n(een)i
-(t)n(w)n(o)f(co)r(ordinate)f(systems)340 3921 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(DIST)-7 b(ANCE:)29 b(Calculate)d(the)i(distance)g
-(b)r(et)n(w)n(een)f(t)n(w)n(o)g(p)r(oin)n(ts)h(in)g(a)f(F)-7
-b(rame)340 4053 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(FINDFRAME:)29
-b(Find)f(a)f(co)r(ordinate)g(system)g(with)h(sp)r(eci\014ed)g(c)n
-(haracteristics)340 4185 y Fj(\017)45 b Fk(AST)p Ft(_)p
-Fk(F)n(ORMA)-7 b(T:)28 b(F)-7 b(ormat)27 b(a)g(co)r(ordinate)g(v)-5
-b(alue)27 b(for)g(a)g(F)-7 b(rame)27 b(axis)340 4317
-y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GET)-7 b(A)n(CTIVEUNIT:)28
-b(Determines)f(ho)n(w)g(the)h(Unit)h(attribute)f(will)f(b)r(e)h(used)
-340 4449 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(INTERSECT:)27
-b(Find)h(the)g(in)n(tersection)f(b)r(et)n(w)n(een)h(t)n(w)n(o)f(geo)r
-(desic)f(curv)n(es)340 4581 y Fj(\017)45 b Fk(AST)p Ft(_)p
-Fk(MA)-7 b(TCHAXES:)29 b(Find)f(an)n(y)f(corresp)r(onding)e(axes)i(in)h
-(t)n(w)n(o)f(F)-7 b(rames)340 4712 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(NORM:)28 b(Normalise)e(a)i(set)f(of)h(F)-7
-b(rame)27 b(co)r(ordinates)340 4844 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(OFFSET:)27 b(Calculate)g(an)h(o\013set)f(along)g(a)g(geo)r
-(desic)g(curv)n(e)340 4976 y Fj(\017)45 b Fk(AST)p Ft(_)p
-Fk(OFFSET2:)36 b(Calculate)27 b(an)h(o\013set)f(along)f(a)i(geo)r
-(desic)e(curv)n(e)h(in)h(a)f(2D)h(F)-7 b(rame)340 5108
-y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(PERMAXES:)27 b(P)n(erm)n(ute)g(the)h
-(order)e(of)i(a)f(F)-7 b(rame's)27 b(axes)340 5240 y
-Fj(\017)45 b Fk(AST)p Ft(_)p Fk(PICKAXES:)27 b(Create)g(a)g(new)h(F)-7
-b(rame)27 b(b)n(y)g(pic)n(king)g(axes)g(from)g(an)g(existing)g(one)340
-5372 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(RESOL)-9 b(VE:)27
-b(Resolv)n(e)f(a)h(v)n(ector)g(in)n(to)g(t)n(w)n(o)g(orthogonal)e(comp)
-r(onen)n(ts)340 5504 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(SET)-7
-b(A)n(CTIVEUNIT:)28 b(Sp)r(ecify)g(ho)n(w)f(the)h(Unit)g(attribute)g
-(should)f(b)r(e)h(used)340 5636 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(UNF)n(ORMA)-7 b(T:)28 b(Read)g(a)f(formatted)g(co)r(ordinate)
-g(v)-5 b(alue)27 b(for)g(a)g(F)-7 b(rame)28 b(axis)p
-eop end
-%%Page: 486 496
-TeXDict begin 486 495 bop 0 52 a FG(486)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)p 0 351 3780 12 v 0 482
-a FA(F)-11 b(rameSet)904 483 y Fd(Set)38 b(of)g(in)m(ter-related)e(co)s
-(ordinate)h(systems)3224 482 y FA(F)-11 b(rameSet)0 673
-y Fc(Description:)44 b Fk(A)27 b(F)-7 b(rameSet)27 b(consists)f(of)h(a)
-f(set)h(of)g(one)f(or)g(more)g(F)-7 b(rames)26 b(\(whic)n(h)h(describ)r
-(e)f(co)r(ordinate)g(systems\),)227 773 y(connected)g(together)f(b)n(y)
-g(Mappings)g(\(whic)n(h)h(describ)r(e)f(ho)n(w)h(the)g(co)r(ordinate)e
-(systems)h(are)g(in)n(ter-related\).)35 b(A)227 872 y(F)-7
-b(rameSet)26 b(mak)n(es)f(it)h(p)r(ossible)g(to)g(obtain)f(a)h(Mapping)
-f(b)r(et)n(w)n(een)h(an)n(y)f(pair)h(of)f(these)h(F)-7
-b(rames)26 b(\(i.e.)36 b(to)26 b(con)n(v)n(ert)227 972
-y(b)r(et)n(w)n(een)32 b(an)n(y)f(of)g(the)h(co)r(ordinate)f(systems)g
-(whic)n(h)g(it)i(describ)r(es\).)48 b(The)32 b(individual)g(F)-7
-b(rames)30 b(are)h(iden)n(ti\014ed)227 1072 y(within)f(the)f(F)-7
-b(rameSet)28 b(b)n(y)g(an)h(in)n(teger)e(index,)i(with)g(F)-7
-b(rames)28 b(b)r(eing)h(n)n(um)n(b)r(ered)f(consecutiv)n(ely)g(from)g
-(one)g(as)227 1171 y(they)g(are)f(added)g(to)h(the)g(F)-7
-b(rameSet.)227 1295 y(Ev)n(ery)29 b(F)-7 b(rameSet)30
-b(has)f(a)h Ft(")p Fk(base)p Ft(")e Fk(F)-7 b(rame)30
-b(and)g(a)g Ft(")p Fk(curren)n(t)p Ft(")e Fk(F)-7 b(rame)30
-b(\(whic)n(h)g(are)f(allo)n(w)n(ed)g(to)h(b)r(e)g(the)h(same\).)227
-1395 y(An)n(y)k(of)g(the)g(F)-7 b(rames)35 b(ma)n(y)f(b)r(e)h
-(nominated)g(to)g(hold)f(these)h(p)r(ositions,)i(and)e(the)g(c)n(hoice)
-f(is)h(determined)g(b)n(y)227 1494 y(the)d(v)-5 b(alues)31
-b(of)h(the)g(F)-7 b(rameSet's)31 b(Base)f(and)i(Curren)n(t)e
-(attributes,)j(whic)n(h)e(hold)h(the)f(indices)h(of)f(the)h(relev)-5
-b(an)n(t)227 1594 y(F)e(rames.)35 b(By)25 b(default,)h(the)f(\014rst)f
-(F)-7 b(rame)25 b(added)f(to)h(a)f(F)-7 b(rameSet)25
-b(is)f(its)h(base)f(F)-7 b(rame,)25 b(and)g(the)g(last)f(one)h(added)
-227 1694 y(is)j(its)g(curren)n(t)e(F)-7 b(rame.)227 1817
-y(The)36 b(base)f(F)-7 b(rame)35 b(describ)r(es)h(the)g
-Ft(")p Fk(nativ)n(e)p Ft(")e Fk(co)r(ordinate)h(system)g(of)h(whatev)n
-(er)f(the)h(F)-7 b(rameSet)35 b(is)h(used)g(to)227 1917
-y(calibrate)27 b(\(e.g.)36 b(the)28 b(pixel)f(co)r(ordinates)f(of)i(an)
-f(image\))g(and)g(the)h(curren)n(t)e(F)-7 b(rame)27 b(describ)r(es)g
-(the)h Ft(")p Fk(apparen)n(t)p Ft(")227 2017 y Fk(co)r(ordinate)21
-b(system)g(in)h(whic)n(h)g(it)g(should)f(b)r(e)h(view)n(ed)g(\(e.g.)34
-b(displa)n(y)n(ed,)22 b(etc.\).)36 b(An)n(y)21 b(further)h(F)-7
-b(rames)21 b(represen)n(t)227 2116 y(a)27 b(library)g(of)g(alternativ)n
-(e)g(co)r(ordinate)f(systems,)h(whic)n(h)h(ma)n(y)f(b)r(e)h(selected)f
-(b)n(y)g(making)g(them)h(curren)n(t.)227 2240 y(When)34
-b(a)e(F)-7 b(rameSet)33 b(is)g(used)g(in)g(a)f(con)n(text)h(that)g
-(requires)f(a)g(F)-7 b(rame,)34 b(\(e.g.)53 b(obtaining)32
-b(its)h(Title)g(v)-5 b(alue,)34 b(or)227 2340 y(n)n(um)n(b)r(er)h(of)g
-(axes\),)h(the)g(curren)n(t)e(F)-7 b(rame)34 b(is)h(used.)59
-b(A)35 b(F)-7 b(rameSet)35 b(ma)n(y)f(therefore)g(b)r(e)i(used)f(in)g
-(place)f(of)h(its)227 2439 y(curren)n(t)27 b(F)-7 b(rame)27
-b(in)h(most)f(situations.)227 2563 y(When)38 b(a)g(F)-7
-b(rameSet)37 b(is)g(used)h(in)g(a)f(con)n(text)g(that)h(requires)e(a)h
-(Mapping,)j(the)e(Mapping)f(used)h(is)f(the)h(one)227
-2663 y(b)r(et)n(w)n(een)25 b(its)h(base)e(F)-7 b(rame)25
-b(and)g(its)h(curren)n(t)e(F)-7 b(rame.)35 b(Th)n(us,)26
-b(a)f(F)-7 b(rameSet)25 b(ma)n(y)f(b)r(e)i(used)f(to)g(con)n(v)n(ert)f
-Ft(")p Fk(nativ)n(e)p Ft(")227 2762 y Fk(co)r(ordinates)35
-b(in)n(to)h Ft(")p Fk(apparen)n(t)p Ft(")f Fk(ones,)i(and)g(vice)f(v)n
-(ersa.)61 b(Lik)n(e)36 b(an)n(y)f(Mapping,)j(a)e(F)-7
-b(rameSet)36 b(ma)n(y)g(also)f(b)r(e)227 2862 y(in)n(v)n(erted)e(\(see)
-g(AST)p Ft(_)p Fk(INVER)-7 b(T\),)34 b(whic)n(h)f(has)g(the)h(e\013ect)
-g(of)f(in)n(terc)n(hanging)e(its)j(base)f(and)g(curren)n(t)f(F)-7
-b(rames)227 2961 y(and)28 b(hence)f(of)h(rev)n(ersing)d(the)j(Mapping)g
-(b)r(et)n(w)n(een)f(them.)227 3085 y(Regions)33 b(ma)n(y)f(b)r(e)i
-(added)f(in)n(to)h(a)f(F)-7 b(rameSet)33 b(\(since)g(a)g(Region)g(is)g
-(a)g(t)n(yp)r(e)h(of)f(F)-7 b(rame\),)35 b(either)e(explicitly)g(or)227
-3185 y(as)e(comp)r(onen)n(ts)g(within)h(CmpF)-7 b(rames.)48
-b(In)31 b(this)h(case)e(the)i(Mapping)f(b)r(et)n(w)n(een)g(a)g(pair)g
-(of)g(F)-7 b(rames)31 b(within)h(a)227 3284 y(F)-7 b(rameSet)35
-b(will)g(include)g(the)h(e\013ects)f(of)g(the)g(clipping)g(pro)r(duced)
-g(b)n(y)f(an)n(y)h(Regions)f(included)h(in)g(the)g(path)227
-3384 y(b)r(et)n(w)n(een)28 b(the)g(F)-7 b(rames.)0 3532
-y Fc(Constructor)32 b(F)-8 b(unction:)227 3632 y Fk(AST)p
-Ft(_)p Fk(FRAMESET)-2 3779 y Fc(Inheritance)n(:)227 3926
-y Fk(The)28 b(F)-7 b(rameSet)27 b(class)g(inherits)g(from)h(the)g(F)-7
-b(rame)27 b(class.)-2 4073 y Fc(A)m(ttributes)n(:)227
-4220 y Fk(In)41 b(addition)g(to)g(those)f(attributes)h(common)f(to)h
-(all)g(F)-7 b(rames,)43 b(ev)n(ery)d(F)-7 b(rameSet)40
-b(also)g(has)g(the)i(follo)n(wing)227 4319 y(attributes:)340
-4578 y Fj(\017)j Fk(Base:)36 b(F)-7 b(rameSet)28 b(base)f(F)-7
-b(rame)27 b(index)340 4709 y Fj(\017)45 b Fk(Curren)n(t:)36
-b(F)-7 b(rameSet)28 b(curren)n(t)e(F)-7 b(rame)28 b(index)340
-4840 y Fj(\017)45 b Fk(Nframe:)37 b(Num)n(b)r(er)28 b(of)f(F)-7
-b(rames)27 b(in)h(a)f(F)-7 b(rameSet)227 5001 y(Ev)n(ery)32
-b(F)-7 b(rameSet)32 b(also)g(inherits)h(an)n(y)f(further)h(attributes)g
-(that)g(b)r(elong)f(to)h(its)g(curren)n(t)f(F)-7 b(rame,)34
-b(regardless)227 5100 y(of)j(that)h(F)-7 b(rame's)36
-b(class.)65 b(\(F)-7 b(or)37 b(example,)i(the)f(Equino)n(x)e
-(attribute,)k(de\014ned)d(b)n(y)g(the)h(SkyF)-7 b(rame)36
-b(class,)j(is)227 5200 y(inherited)d(b)n(y)g(an)n(y)f(F)-7
-b(rameSet)35 b(whic)n(h)h(has)f(a)g(SkyF)-7 b(rame)35
-b(as)g(its)h(curren)n(t)f(F)-7 b(rame.\))61 b(The)36
-b(set)g(of)g(attributes)227 5299 y(b)r(elonging)27 b(to)h(a)f(F)-7
-b(rameSet)27 b(ma)n(y)g(therefore)g(c)n(hange)f(when)i(a)f(new)h
-(curren)n(t)f(F)-7 b(rame)27 b(is)g(selected.)-2 5447
-y Fc(F)-8 b(unctions)n(:)227 5593 y Fk(In)30 b(addition)f(to)h(those)f
-(routines)g(applicable)g(to)g(all)g(F)-7 b(rames,)29
-b(the)h(follo)n(wing)f(routines)g(ma)n(y)f(also)h(b)r(e)h(applied)227
-5693 y(to)e(all)f(F)-7 b(rameSets:)p eop end
-%%Page: 487 497
-TeXDict begin 487 496 bop 3643 52 a FG(487)340 522 y
-Fj(\017)45 b Fk(AST)p Ft(_)p Fk(ADDFRAME:)29 b(Add)f(a)g(F)-7
-b(rame)27 b(to)g(a)g(F)-7 b(rameSet)28 b(to)f(de\014ne)h(a)f(new)h(co)r
-(ordinate)e(system)340 672 y Fj(\017)45 b Fk(AST)p Ft(_)p
-Fk(GETFRAME:)28 b(Obtain)f(a)g(p)r(oin)n(ter)g(to)h(a)f(sp)r(eci\014ed)
-h(F)-7 b(rame)27 b(in)h(a)f(F)-7 b(rameSet)340 822 y
-Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GETMAPPING:)27 b(Obtain)h(a)f(Mapping)g
-(b)r(et)n(w)n(een)h(t)n(w)n(o)e(F)-7 b(rames)27 b(in)h(a)f(F)-7
-b(rameSet)340 972 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(REMAPFRAME:)28
-b(Mo)r(dify)g(a)f(F)-7 b(rame's)27 b(relationship)f(to)i(the)g(other)f
-(F)-7 b(rames)27 b(in)g(a)h(F)-7 b(rameSet)340 1122 y
-Fj(\017)45 b Fk(AST)p Ft(_)p Fk(REMO)n(VEFRAME:)27 b(Remo)n(v)n(e)f(a)i
-(F)-7 b(rame)27 b(from)g(a)g(F)-7 b(rameSet)p 0 1355
-3780 12 v 0 1487 a FA(GrismMap)160 b Fd(T)-10 b(ransform)36
-b(1-dimensional)g(co)s(ordinates)h(using)1186 1602 y(a)i(grism)e(disp)s
-(ersion)h(equation)3149 1487 y FA(GrismMap)0 1825 y Fc(Description:)44
-b Fk(A)22 b(GrismMap)f(is)g(a)g(sp)r(ecialised)g(form)g(of)g(Mapping)g
-(whic)n(h)g(transforms)f(1-dimensional)g(co)r(ordinates)227
-1924 y(using)f(the)h(sp)r(ectral)f(disp)r(ersion)g(equation)g(describ)r
-(ed)g(in)g(FITS-W)n(CS)h(pap)r(er)f(I)r(I)r(I)h Ft(")p
-Fk(Represen)n(tation)e(of)h(sp)r(ectral)227 2024 y(co)r(ordinates)26
-b(in)i(FITS)p Ft(")p Fk(.)37 b(This)28 b(describ)r(es)f(the)h(disp)r
-(ersion)f(pro)r(duced)g(b)n(y)g(gratings,)f(prisms)h(and)h(grisms.)227
-2166 y(When)23 b(initially)f(created,)g(the)h(forw)n(ard)d
-(transformation)g(of)i(a)g(GrismMap)f(transforms)g(input)h
-Ft(")p Fk(grism)f(param-)227 2265 y(eter)p Ft(")k Fk(v)-5
-b(alues)24 b(in)n(to)h(output)h(w)n(a)n(v)n(elength)d(v)-5
-b(alues.)36 b(The)25 b Ft(")p Fk(grism)f(parameter)p
-Ft(")f Fk(is)i(a)g(dimensionless)g(v)-5 b(alue)25 b(whic)n(h)227
-2365 y(is)30 b(linearly)e(related)h(to)g(p)r(osition)h(on)f(the)h
-(detector.)42 b(It)30 b(is)f(de\014ned)h(in)g(FITS-W)n(CS)f(pap)r(er)g
-(I)r(I)r(I)h(as)f Ft(")p Fk(the)h(o\013set)227 2464 y(on)25
-b(the)g(detector)f(from)h(the)g(p)r(oin)n(t)g(of)g(in)n(tersection)f
-(of)h(the)g(camera)f(axis,)g(measured)g(in)h(units)h(of)e(the)i
-(e\013ectiv)n(e)227 2564 y(lo)r(cal)f(length)p Ft(")p
-Fk(.)36 b(The)25 b(units)h(in)f(whic)n(h)g(w)n(a)n(v)n(elength)f(v)-5
-b(alues)25 b(are)f(exp)r(ected)i(or)e(returned)h(is)g(determined)g(b)n
-(y)g(the)227 2664 y(v)-5 b(alues)29 b(supplied)h(for)f(the)g(GrismW)-7
-b(a)n(v)n(eR,)29 b(GrismNRP)g(and)g(GrismG)g(attribute:)40
-b(whatev)n(er)29 b(units)g(are)g(used)227 2763 y(for)e(these)h
-(attributes)f(will)h(also)f(b)r(e)h(used)f(for)g(the)h(w)n(a)n(v)n
-(elength)e(v)-5 b(alues.)0 2947 y Fc(Constructor)32 b(F)-8
-b(unction:)227 3047 y Fk(AST)p Ft(_)p Fk(GRISMMAP)-2
-3230 y Fc(Inheritance)n(:)227 3376 y Fk(The)28 b(GrismMap)f(class)g
-(inherits)g(from)g(the)h(Mapping)g(class.)-2 3560 y Fc(A)m(ttributes)n
-(:)227 3706 y Fk(In)k(addition)f(to)g(those)g(attributes)g(common)g(to)
-g(all)g(Mappings,)g(ev)n(ery)f(GrismMap)h(also)f(has)h(the)h(follo)n
-(wing)227 3806 y(attributes:)340 4118 y Fj(\017)45 b
-Fk(GrismNR:)28 b(The)g(refractiv)n(e)e(index)i(at)f(the)h(reference)f
-(w)n(a)n(v)n(elength)340 4268 y Fj(\017)45 b Fk(GrismNRP:)28
-b(Rate)f(of)h(c)n(hange)e(of)i(refractiv)n(e)e(index)h(with)i(w)n(a)n
-(v)n(elength)340 4418 y Fj(\017)45 b Fk(GrismW)-7 b(a)n(v)n(eR:)27
-b(The)g(reference)g(w)n(a)n(v)n(elength)340 4568 y Fj(\017)45
-b Fk(GrismAlpha:)37 b(The)28 b(angle)e(of)i(incidence)g(of)f(the)h
-(incoming)f(ligh)n(t)340 4718 y Fj(\017)45 b Fk(GrismG:)28
-b(The)f(grating)g(ruling)g(densit)n(y)340 4868 y Fj(\017)45
-b Fk(GrismM:)28 b(The)f(in)n(terference)g(order)340 5018
-y Fj(\017)45 b Fk(GrismEps:)36 b(The)28 b(angle)f(b)r(et)n(w)n(een)g
-(the)h(normal)f(and)g(the)h(disp)r(ersion)f(plane)340
-5168 y Fj(\017)45 b Fk(GrismTheta:)37 b(Angle)27 b(b)r(et)n(w)n(een)h
-(normal)e(to)i(detector)f(plane)g(and)h(reference)e(ra)n(y)-2
-5364 y Fc(F)-8 b(unctions)n(:)227 5510 y Fk(The)34 b(GrismMap)f(class)f
-(do)r(es)i(not)f(de\014ne)h(an)n(y)f(new)g(routines)g(b)r(ey)n(ond)g
-(those)h(whic)n(h)f(are)g(applicable)f(to)i(all)227 5610
-y(Mappings.)p eop end
-%%Page: 488 498
-TeXDict begin 488 497 bop 0 52 a FG(488)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)p 0 351 3780 12 v 0 483
-a FA(In)l(terv)-7 b(al)186 b Fd(A)39 b(region)e(represen)m(ting)g(an)h
-(in)m(terv)-7 b(al)37 b(on)h(one)h(or)f(more)1485 598
-y(axes)h(of)f(a)h(F)-10 b(rame)3324 483 y FA(In)l(terv)j(al)0
-774 y Fc(Description:)44 b Fk(The)23 b(In)n(terv)-5 b(al)22
-b(class)g(implemen)n(ts)h(a)f(Region)g(whic)n(h)g(represen)n(ts)g(upp)r
-(er)g(and/or)f(lo)n(w)n(er)h(limits)h(on)f(one)227 874
-y(or)i(more)g(axes)g(of)g(a)h(F)-7 b(rame.)35 b(F)-7
-b(or)24 b(a)g(p)r(oin)n(t)h(to)g(b)r(e)g(within)g(the)g(region)f
-(represen)n(ted)f(b)n(y)i(the)g(In)n(terv)-5 b(al,)24
-b(the)h(p)r(oin)n(t)227 973 y(m)n(ust)j(satisfy)f(all)g(the)h
-(restrictions)e(placed)h(on)g(all)g(the)h(axes.)36 b(The)27
-b(p)r(oin)n(t)h(is)f(outside)g(the)h(region)e(if)i(it)g(fails)f(to)227
-1073 y(satisfy)j(an)n(y)g(one)f(of)i(the)f(restrictions.)44
-b(Eac)n(h)29 b(axis)g(ma)n(y)h(ha)n(v)n(e)f(either)h(an)g(upp)r(er)g
-(limit,)i(a)e(lo)n(w)n(er)e(limit,)k(b)r(oth)227 1173
-y(or)e(neither.)47 b(If)32 b(b)r(oth)f(limits)h(are)e(supplied)h(but)g
-(are)f(in)i(rev)n(erse)d(order)g(\(so)i(that)g(the)g(lo)n(w)n(er)f
-(limit)i(is)e(greater)227 1272 y(than)e(the)g(upp)r(er)g(limit\),)g
-(then)h(the)f(in)n(terv)-5 b(al)27 b(is)g(an)g(excluded)h(in)n(terv)-5
-b(al,)27 b(rather)g(than)g(an)h(included)g(in)n(terv)-5
-b(al.)227 1400 y(Note,)33 b(The)e(In)n(terv)-5 b(al)31
-b(class)g(mak)n(es)f(no)h(allo)n(w)n(ances)f(for)h(cyclic)g(nature)g
-(of)g(some)g(co)r(ordinate)g(systems)g(\(suc)n(h)227
-1500 y(as)25 b(SkyF)-7 b(rame)24 b(co)r(ordinates\).)35
-b(A)25 b(Bo)n(x)f(should)g(usually)h(b)r(e)g(used)g(in)g(these)g(cases)
-f(since)h(this)g(requires)f(the)h(user)227 1599 y(to)j(think)g(ab)r
-(out)f(suitable)h(upp)r(er)g(and)f(lo)n(w)n(er)f(limits,)0
-1755 y Fc(Constructor)32 b(F)-8 b(unction:)227 1855 y
-Fk(AST)p Ft(_)p Fk(INTER)f(V)g(AL)-2 2010 y Fc(Inheritance)n(:)227
-2156 y Fk(The)28 b(In)n(terv)-5 b(al)27 b(class)g(inherits)g(from)g
-(the)h(Region)f(class.)-2 2312 y Fc(A)m(ttributes)n(:)227
-2458 y Fk(The)37 b(In)n(terv)-5 b(al)35 b(class)h(do)r(es)g(not)g
-(de\014ne)h(an)n(y)e(new)i(attributes)f(b)r(ey)n(ond)g(those)g(whic)n
-(h)g(are)g(applicable)g(to)g(all)227 2558 y(Regions.)-2
-2714 y Fc(F)-8 b(unctions)n(:)227 2860 y Fk(The)41 b(In)n(terv)-5
-b(al)40 b(class)g(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)g(routines)g
-(b)r(ey)n(ond)h(those)f(whic)n(h)h(are)e(applicable)h(to)h(all)227
-2959 y(Regions.)p 0 3165 V 0 3296 a FA(In)l(traMap)801
-3297 y Fd(Map)e(p)s(oin)m(ts)f(using)g(a)h(priv)-7 b(ate)37
-b(transformation)1708 3408 y(routine)3218 3296 y FA(In)l(traMap)0
-3580 y Fc(Description:)44 b Fk(The)21 b(In)n(traMap)e(class)g(pro)n
-(vides)g(a)h(sp)r(ecialised)f(form)h(of)g(Mapping)g(whic)n(h)g
-(encapsulates)g(a)f(priv)-5 b(ately-)227 3679 y(de\014ned)26
-b(co)r(ordinate)d(transformation)h(routine)g(\(e.g.)36
-b(written)25 b(in)g(F)-7 b(ortran\))24 b(so)h(that)g(it)g(ma)n(y)g(b)r
-(e)g(used)g(lik)n(e)f(an)n(y)227 3779 y(other)h(AST)h(Mapping.)35
-b(This)25 b(allo)n(ws)f(y)n(ou)h(to)g(create)f(Mappings)h(that)g(p)r
-(erform)g(an)n(y)f(conceiv)-5 b(able)25 b(co)r(ordinate)227
-3878 y(transformation.)227 4006 y(Ho)n(w)n(ev)n(er,)30
-b(an)h(In)n(traMap)g(is)g(in)n(tended)g(for)g(use)g(within)h(a)f
-(single)f(program)g(or)g(a)h(priv)-5 b(ate)31 b(suite)g(of)g(soft)n(w)n
-(are,)227 4106 y(where)24 b(all)g(programs)d(ha)n(v)n(e)i(access)g(to)h
-(the)g(same)g(co)r(ordinate)f(transformation)f(functions)j(\(i.e.)36
-b(can)23 b(b)r(e)i(link)n(ed)227 4205 y(against)40 b(them\).)76
-b(In)n(traMaps)39 b(should)h(not)h(normally)e(b)r(e)i(stored)f(in)g
-(datasets)g(whic)n(h)g(ma)n(y)g(b)r(e)h(exp)r(orted)227
-4305 y(for)34 b(pro)r(cessing)f(b)n(y)h(other)g(soft)n(w)n(are,)g
-(since)g(that)h(soft)n(w)n(are)e(will)h(not)h(ha)n(v)n(e)e(the)i
-(necessary)d(transformation)227 4405 y(functions)c(a)n(v)-5
-b(ailable,)27 b(resulting)g(in)g(an)h(error.)227 4532
-y(Y)-7 b(ou)37 b(m)n(ust)g(register)e(an)n(y)h(co)r(ordinate)f
-(transformation)g(functions)i(to)f(b)r(e)h(used)g(using)f(AST)p
-Ft(_)p Fk(INTRAREG)227 4632 y(b)r(efore)28 b(creating)e(an)h(In)n
-(traMap.)0 4788 y Fc(Constructor)32 b(F)-8 b(unction:)227
-4887 y Fk(AST)p Ft(_)p Fk(INTRAMAP)28 b(\(also)f(see)g(AST)p
-Ft(_)p Fk(INTRAREG\))-2 5043 y Fc(Inheritance)n(:)227
-5189 y Fk(The)h(In)n(traMap)e(class)h(inherits)h(from)f(the)h(Mapping)f
-(class.)-2 5345 y Fc(A)m(ttributes)n(:)227 5491 y Fk(In)35
-b(addition)f(to)g(those)g(attributes)g(common)g(to)g(all)g(Mappings,)h
-(ev)n(ery)e(In)n(traMap)g(also)g(has)h(the)h(follo)n(wing)227
-5591 y(attributes:)p eop end
-%%Page: 489 499
-TeXDict begin 489 498 bop 3643 52 a FG(489)340 351 y
-Fj(\017)45 b Fk(In)n(traFlag:)36 b(In)n(traMap)26 b(iden)n
-(ti\014cation)i(string)-2 524 y Fc(F)-8 b(unctions)n(:)227
-670 y Fk(The)37 b(In)n(traMap)e(class)g(do)r(es)h(not)h(de\014ne)f(an)n
-(y)g(new)g(routines)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)g
-(applicable)g(to)g(all)227 769 y(Mappings.)p 0 979 3780
-12 v 0 1110 a FA(KeyMap)1140 1118 y Fd(Store)h(a)i(set)g(of)f(k)m(ey/v)
--7 b(alue)37 b(pairs)3274 1110 y FA(KeyMap)0 1324 y Fc(Description:)44
-b Fk(The)27 b(KeyMap)f(class)f(is)i(used)g(to)f(store)g(a)g(set)h(of)f
-(v)-5 b(alues)26 b(with)i(asso)r(ciated)d(k)n(eys)h(whic)n(h)g(iden)n
-(tify)h(the)227 1423 y(v)-5 b(alues.)41 b(The)29 b(k)n(eys)f(are)g
-(strings)g(\(case-sensitiv)n(e,)f(trailing)h(spaces)g(are)g(ignored\),)
-h(and)f(the)i(data)e(t)n(yp)r(e)h(of)g(the)227 1523 y(v)-5
-b(alues)31 b(can)f(b)r(e)h(in)n(teger,)g(\015oating)f(p)r(oin)n(t,)h(c)
-n(haracter)e(string)h(or)g(AST)h(Ob)5 b(ject)31 b(p)r(oin)n(ter.)46
-b(Eac)n(h)29 b(v)-5 b(alue)31 b(can)f(b)r(e)227 1623
-y(a)i(scalar)f(or)g(a)h(one-dimensional)f(v)n(ector.)49
-b(A)33 b(KeyMap)e(is)h(conceptually)g(similar)f(to)h(a)g(Mapping)g(in)h
-(that)f(a)227 1722 y(KeyMap)h(transforms)f(an)h(input)h(in)n(to)f(an)h
-(output)g(-)f(the)h(input)g(is)f(the)h(k)n(ey)-7 b(,)34
-b(and)g(the)g(output)g(is)f(the)h(v)-5 b(alue)227 1822
-y(asso)r(ciated)26 b(with)h(the)h(k)n(ey)-7 b(.)36 b(Ho)n(w)n(ev)n(er,)
-25 b(this)i(is)g(only)g(a)f(conceptual)h(similarit)n(y)-7
-b(,)26 b(and)h(it)g(should)g(b)r(e)g(noted)g(that)227
-1921 y(the)j(KeyMap)f(class)g(inherits)g(from)h(the)g(Ob)5
-b(ject)29 b(class)g(rather)g(than)g(the)i(Mapping)e(class.)42
-b(The)30 b(metho)r(ds)g(of)227 2021 y(the)e(Mapping)f(class)g(cannot)g
-(b)r(e)h(used)g(with)g(a)f(KeyMap.)0 2181 y Fc(Constructor)32
-b(F)-8 b(unction:)227 2281 y Fk(AST)p Ft(_)p Fk(KEYMAP)-2
-2441 y Fc(Inheritance)n(:)227 2587 y Fk(The)28 b(KeyMap)f(class)f
-(inherits)i(from)f(the)h(Ob)5 b(ject)27 b(class.)-2 2747
-y Fc(A)m(ttributes)n(:)227 2893 y Fk(In)33 b(addition)f(to)h(those)f
-(attributes)g(common)g(to)g(all)g(Ob)5 b(jects,)34 b(ev)n(ery)d(KeyMap)
-h(also)f(has)h(the)h(follo)n(wing)e(at-)227 2993 y(tributes:)340
-3269 y Fj(\017)45 b Fk(KeyError:)34 b(Rep)r(ort)28 b(an)f(error)e(if)k
-(the)f(requested)f(k)n(ey)f(do)r(es)i(not)f(exist?)340
-3407 y Fj(\017)45 b Fk(SizeGuess:)37 b(The)28 b(exp)r(ected)f(size)h
-(of)f(the)h(KeyMap.)-2 3580 y Fc(F)-8 b(unctions)n(:)227
-3726 y Fk(In)29 b(addition)f(to)g(those)g(routines)f(applicable)h(to)g
-(all)g(Ob)5 b(jects,)28 b(the)h(follo)n(wing)e(routines)g(ma)n(y)h
-(also)f(b)r(e)i(applied)227 3826 y(to)f(all)f(KeyMaps:)340
-4102 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(MAPGET0)p Fm(<)p
-Fk(X)p Fm(>)p Fk(:)36 b(Get)28 b(a)f(named)g(scalar)f(en)n(try)h(from)g
-(a)h(KeyMap)340 4241 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(MAPGET1)p
-Fm(<)p Fk(X)p Fm(>)p Fk(:)36 b(Get)28 b(a)f(named)g(v)n(ector)g(en)n
-(try)g(from)g(a)g(KeyMap)340 4379 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(MAPGETELEM)p Fm(<)p Fk(X)p Fm(>)p Fk(:)35 b(Get)28
-b(an)f(elemen)n(t)h(of)g(a)f(named)g(v)n(ector)g(en)n(try)g(from)g(a)g
-(KeyMap)340 4517 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(MAPHASKEY:)28
-b(Do)r(es)f(the)h(KeyMap)f(con)n(tain)g(a)g(named)h(en)n(try?)340
-4655 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(MAPKEY:)27 b(Return)h(the)g(k)n
-(ey)f(name)g(at)h(a)f(giv)n(en)g(index)g(in)h(the)g(KeyMap)340
-4793 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(MAPLENC:)27 b(Get)h(the)g
-(length)g(of)g(a)f(named)g(c)n(haracter)f(en)n(try)h(in)h(a)f(KeyMap)
-340 4931 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(MAPLENGTH:)28
-b(Get)g(the)g(length)g(of)f(a)g(named)h(en)n(try)f(in)h(a)f(KeyMap)340
-5069 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(MAPPUT0)p Fm(<)p
-Fk(X)p Fm(>)p Fk(:)36 b(Add)28 b(a)f(new)h(scalar)e(en)n(try)h(to)g(a)g
-(KeyMap)340 5207 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(MAPPUT1)p
-Fm(<)p Fk(X)p Fm(>)p Fk(:)36 b(Add)28 b(a)f(new)h(v)n(ector)e(en)n(try)
-h(to)h(a)f(KeyMap)340 5346 y Fj(\017)45 b Fk(AST)p Ft(_)p
-Fk(MAPREMO)n(VE:)27 b(Remo)n(v)n(ed)f(a)h(named)h(en)n(try)f(from)g(a)g
-(KeyMap)340 5484 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(MAPSIZE:)27
-b(Get)h(the)g(n)n(um)n(b)r(er)f(of)h(en)n(tries)f(in)h(a)f(KeyMap)340
-5622 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(MAPTYPE:)27 b(Return)h(the)g
-(data)f(t)n(yp)r(e)h(of)f(a)g(named)h(en)n(try)f(in)h(a)f(map.)p
-eop end
-%%Page: 490 500
-TeXDict begin 490 499 bop 0 52 a FG(490)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)p 0 351 3780 12 v 0 482
-a FA(LutMap)742 483 y Fd(T)-10 b(ransform)37 b(1-dimensional)f(co)s
-(ordinates)g(using)j(a)1571 598 y(lo)s(okup)f(table)3304
-482 y FA(LutMap)0 782 y Fc(Description:)44 b Fk(A)30
-b(LutMap)g(is)g(a)f(sp)r(ecialised)g(form)h(of)f(Mapping)h(whic)n(h)f
-(transforms)g(1-dimensional)f(co)r(ordinates)227 882
-y(b)n(y)g(using)f(linear)g(in)n(terp)r(olation)f(in)i(a)f(lo)r(okup)h
-(table.)227 1005 y(Eac)n(h)d(input)h(co)r(ordinate)e(v)-5
-b(alue)26 b(is)f(\014rst)g(scaled)g(to)g(giv)n(e)g(the)h(index)f(of)h
-(an)f(en)n(try)g(in)h(the)g(table)f(b)n(y)g(subtracting)227
-1105 y(a)32 b(starting)f(v)-5 b(alue)31 b(\(the)i(input)f(co)r
-(ordinate)f(corresp)r(onding)f(to)h(the)h(\014rst)g(table)g(en)n(try\))
-f(and)h(dividing)f(b)n(y)h(an)227 1205 y(incremen)n(t)c(\(the)g
-(di\013erence)f(in)h(input)h(co)r(ordinate)d(v)-5 b(alue)28
-b(b)r(et)n(w)n(een)f(adjacen)n(t)g(table)h(en)n(tries\).)227
-1328 y(The)j(resulting)g(index)g(will)g(usually)g(con)n(tain)f(a)h
-(fractional)f(part,)i(so)e(the)i(output)f(co)r(ordinate)f(v)-5
-b(alue)31 b(is)g(then)227 1428 y(generated)f(b)n(y)g(in)n(terp)r
-(olating)f(linearly)h(b)r(et)n(w)n(een)g(the)h(appropriate)d(en)n
-(tries)i(in)h(the)f(table.)46 b(If)31 b(the)f(index)h(lies)227
-1528 y(outside)h(the)h(range)e(of)h(the)h(table,)g(linear)e(extrap)r
-(olation)g(is)h(used)h(based)e(on)h(the)h(t)n(w)n(o)e(nearest)h(en)n
-(tries)f(\(i.e.)227 1627 y(the)26 b(t)n(w)n(o)e(en)n(tries)g(at)h(the)g
-(start)f(or)g(end)h(of)g(the)g(table,)h(as)e(appropriate\).)35
-b(If)25 b(either)g(of)g(the)g(en)n(tries)f(used)h(for)f(the)227
-1727 y(in)n(terplation)j(has)g(a)g(v)-5 b(alue)28 b(of)f(AST)p
-Ft(__)p Fk(BAD,)h(then)g(the)g(in)n(terp)r(olated)f(v)-5
-b(alue)28 b(is)f(returned)h(as)e(AST)p Ft(__)p Fk(BAD.)227
-1850 y(If)19 b(the)g(lo)r(okup)f(table)g(en)n(tries)g(increase)f(or)g
-(decrease)g(monotonically)g(\(and)i(if)g(the)g(table)f(con)n(tains)f
-(no)h(AST)p Ft(__)p Fk(BAD)227 1950 y(v)-5 b(alues\),)28
-b(then)g(the)g(in)n(v)n(erse)e(transformation)g(ma)n(y)h(also)f(b)r(e)i
-(p)r(erformed.)0 2097 y Fc(Constructor)k(F)-8 b(unction:)227
-2197 y Fk(AST)p Ft(_)p Fk(LUTMAP)-2 2344 y Fc(Inheritance)n(:)227
-2490 y Fk(The)28 b(LutMap)g(class)e(inherits)i(from)f(the)h(Mapping)f
-(class.)-2 2638 y Fc(A)m(ttributes)n(:)227 2784 y Fk(In)38
-b(addition)g(to)f(those)h(attributes)f(common)h(to)f(all)h(Mappings,)h
-(ev)n(ery)e(LutMap)h(also)e(has)i(the)g(follo)n(wing)227
-2884 y(attributes:)340 3142 y Fj(\017)45 b Fk(LutIn)n(terp:)37
-b(The)28 b(in)n(terp)r(olation)f(metho)r(d)h(to)f(use)h(b)r(et)n(w)n
-(een)f(table)h(en)n(tries.)-2 3301 y Fc(F)-8 b(unctions)n(:)227
-3448 y Fk(The)40 b(LutMap)g(class)f(do)r(es)g(not)h(de\014ne)g(an)n(y)e
-(new)i(routines)f(b)r(ey)n(ond)h(those)f(whic)n(h)h(are)e(applicable)h
-(to)h(all)227 3547 y(Mappings.)p 0 3742 V 0 3874 a FA(Mapping)466
-b Fd(In)m(ter-relate)36 b(t)m(w)m(o)h(co)s(ordinate)g(systems)466
-b FA(Mapping)0 4063 y Fc(Description:)44 b Fk(This)29
-b(class)e(pro)n(vides)g(the)i(basic)f(facilities)h(for)f(transforming)f
-(a)h(set)g(of)h(co)r(ordinates)e(\(represen)n(ting)227
-4163 y Ft(")p Fk(input)p Ft(")38 b Fk(p)r(oin)n(ts\))g(to)g(giv)n(e)e
-(a)i(new)g(set)f(of)h(co)r(ordinates)f(\(represen)n(ting)f
-Ft(")p Fk(output)p Ft(")i Fk(p)r(oin)n(ts\).)67 b(It)38
-b(is)g(used)g(to)227 4263 y(describ)r(e)28 b(the)g(relationship)f(whic)
-n(h)h(exists)f(b)r(et)n(w)n(een)h(t)n(w)n(o)f(di\013eren)n(t)h(co)r
-(ordinate)f(systems)h(and)f(to)h(implemen)n(t)227 4362
-y(op)r(erations)22 b(whic)n(h)i(mak)n(e)e(use)i(of)f(this)h(\(suc)n(h)f
-(as)g(transforming)f(co)r(ordinates)g(and)i(resampling)e(grids)g(of)i
-(data\).)227 4462 y(Ho)n(w)n(ev)n(er,)38 b(the)f(Mapping)g(class)f(do)r
-(es)h(not)g(ha)n(v)n(e)f(a)h(constructor)f(function)h(of)g(its)h(o)n
-(wn,)h(as)d(it)i(is)f(simply)g(a)227 4562 y(con)n(tainer)22
-b(class)g(for)g(a)g(family)h(of)g(sp)r(ecialised)f(Mappings)g(whic)n(h)
-h(implemen)n(t)g(particular)e(t)n(yp)r(es)i(of)g(co)r(ordinate)227
-4661 y(transformation.)0 4809 y Fc(Constructor)32 b(F)-8
-b(unction:)227 4908 y Fk(None.)-2 5056 y Fc(Inheritance)n(:)227
-5202 y Fk(The)28 b(Mapping)f(class)g(inherits)g(from)h(the)g(Ob)5
-b(ject)27 b(class.)-2 5349 y Fc(A)m(ttributes)n(:)227
-5495 y Fk(In)42 b(addition)e(to)h(those)g(attributes)g(common)g(to)f
-(all)h(Ob)5 b(jects,)44 b(ev)n(ery)c(Mapping)h(also)f(has)g(the)i
-(follo)n(wing)227 5595 y(attributes:)p eop end
-%%Page: 491 501
-TeXDict begin 491 500 bop 3643 52 a FG(491)340 351 y
-Fj(\017)45 b Fk(In)n(v)n(ert:)36 b(Mapping)27 b(in)n(v)n(ersion)f
-(\015ag)340 483 y Fj(\017)45 b Fk(IsLinear:)36 b(Is)27
-b(the)h(Mapping)g(linear?)340 615 y Fj(\017)45 b Fk(IsSimple:)37
-b(Has)28 b(the)g(Mapping)f(b)r(een)h(simpli\014ed?)340
-747 y Fj(\017)45 b Fk(Nin:)38 b(Num)n(b)r(er)27 b(of)h(input)g(co)r
-(ordinates)f(for)g(a)g(Mapping)340 879 y Fj(\017)45 b
-Fk(Nout:)37 b(Num)n(b)r(er)28 b(of)g(output)g(co)r(ordinates)e(for)h(a)
-g(Mapping)340 1011 y Fj(\017)45 b Fk(Rep)r(ort:)37 b(Rep)r(ort)27
-b(transformed)g(co)r(ordinates?)340 1143 y Fj(\017)45
-b Fk(T)-7 b(ranF)g(orw)n(ard:)35 b(F)-7 b(orw)n(ard)25
-b(transformation)h(de\014ned?)340 1275 y Fj(\017)45 b
-Fk(T)-7 b(ranIn)n(v)n(erse:)35 b(In)n(v)n(erse)26 b(transformation)g
-(de\014ned?)-2 1436 y Fc(F)-8 b(unctions)n(:)227 1582
-y Fk(In)29 b(addition)f(to)g(those)g(routines)f(applicable)h(to)g(all)g
-(Ob)5 b(jects,)28 b(the)h(follo)n(wing)e(routines)g(ma)n(y)h(also)f(b)r
-(e)i(applied)227 1682 y(to)f(all)f(Mappings:)340 1941
-y Fj(\017)45 b Fk(astRebinSeq)p Fm(<)p Fk(X)p Fm(>)p
-Fk(:)36 b(Rebin)28 b(a)g(region)e(of)h(a)h(sequence)f(of)g(data)g
-(grids)340 2073 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(DECOMPOSE:)26
-b(Decomp)r(ose)h(a)h(Mapping)f(in)n(to)g(t)n(w)n(o)g(comp)r(onen)n(t)g
-(Mappings)340 2205 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(TRANGRID:)29
-b(T)-7 b(ransform)26 b(a)i(grid)e(of)i(p)r(ositions)340
-2337 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(INVER)-7 b(T:)28
-b(In)n(v)n(ert)f(a)g(Mapping)340 2469 y Fj(\017)45 b
-Fk(AST)p Ft(_)p Fk(LINEARAPPR)n(O)n(X:)27 b(Calculate)g(a)g(linear)g
-(appro)n(ximation)e(to)j(a)f(Mapping)340 2601 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(MAPBO)n(X:)27 b(Find)h(a)g(b)r(ounding)f(b)r(o)n
-(x)g(for)g(a)h(Mapping)340 2733 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(MAPSPLIT:)27 b(Split)i(a)e(Mapping)g(up)h(in)n(to)f(parallel)
-g(comp)r(onen)n(t)g(Mappings)340 2865 y Fj(\017)45 b
-Fk(AST)p Ft(_)p Fk(RA)-7 b(TE:)28 b(Calculate)f(the)h(rate)f(of)g(c)n
-(hange)g(of)g(a)g(Mapping)h(output)340 2997 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(REBIN)p Fm(<)p Fk(X)p Fm(>)p Fk(:)36
-b(Rebin)28 b(a)f(region)g(of)g(a)g(data)h(grid)340 3129
-y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(REBINSEQ)p Fm(<)p Fk(X)p
-Fm(>)p Fk(:)35 b(Rebin)28 b(a)g(region)e(of)h(a)h(sequence)f(of)g(data)
-g(grids)340 3261 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(REMO)n(VEREGIONS:)26
-b(Remo)n(v)n(e)h(an)n(y)g(Regions)f(from)i(a)f(Mapping)340
-3393 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(RESAMPLE)p Fm(<)p
-Fk(X)p Fm(>)p Fk(:)36 b(Resample)27 b(a)g(region)f(of)i(a)f(data)g
-(grid)340 3525 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(SIMPLIFY:)28
-b(Simplify)g(a)g(Mapping)340 3657 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(TRAN1:)37 b(T)-7 b(ransform)26 b(1-dimensional)h(co)r
-(ordinates)340 3789 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(TRAN2:)37
-b(T)-7 b(ransform)26 b(2-dimensional)h(co)r(ordinates)340
-3921 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(TRANN:)29 b(T)-7
-b(ransform)26 b(N-dimensional)h(co)r(ordinates)p 0 4118
-3780 12 v 0 4250 a FA(MathMap)207 b Fd(T)-10 b(ransform)36
-b(co)s(ordinates)h(using)h(mathematical)1604 4361 y(expressions)3192
-4250 y FA(MathMap)0 4552 y Fc(Description:)44 b Fk(A)36
-b(MathMap)e(is)h(a)f(Mapping)h(whic)n(h)f(allo)n(ws)g(y)n(ou)g(to)h(sp)
-r(ecify)g(a)f(set)h(of)g(forw)n(ard)e(and/or)g(in)n(v)n(erse)227
-4652 y(transformation)26 b(functions)i(using)g(arithmetic)f(op)r
-(erations)g(and)g(mathematical)g(functions)h(similar)f(to)h(those)227
-4752 y(a)n(v)-5 b(ailable)30 b(in)i(F)-7 b(ortran.)46
-b(The)31 b(MathMap)g(in)n(terprets)g(these)g(functions)h(at)f
-(run-time,)h(whenev)n(er)e(its)h(forw)n(ard)227 4851
-y(or)c(in)n(v)n(erse)g(transformation)f(is)i(required.)37
-b(Because)27 b(the)h(functions)h(are)e(not)h(compiled)g(in)g(the)g
-(normal)f(sense)227 4951 y(\(unlik)n(e)g(an)e(In)n(traMap\),)h(they)g
-(ma)n(y)g(b)r(e)g(used)g(to)g(describ)r(e)g(co)r(ordinate)f
-(transformations)f(in)i(a)g(transp)r(ortable)227 5051
-y(manner.)53 b(A)33 b(MathMap)g(therefore)f(pro)n(vides)f(a)i
-(\015exible)g(w)n(a)n(y)f(of)h(de\014ning)g(new)g(t)n(yp)r(es)g(of)g
-(Mapping)f(whose)227 5150 y(descriptions)27 b(ma)n(y)g(b)r(e)h(stored)f
-(as)g(part)g(of)g(a)g(dataset)h(and)f(in)n(terpreted)g(b)n(y)g(other)g
-(programs.)0 5299 y Fc(Constructor)32 b(F)-8 b(unction:)227
-5398 y Fk(AST)p Ft(_)p Fk(MA)h(THMAP)-2 5547 y Fc(Inheritance)n(:)227
-5693 y Fk(The)28 b(MathMap)f(class)g(inherits)h(from)f(the)h(Mapping)f
-(class.)p eop end
-%%Page: 492 502
-TeXDict begin 492 501 bop 0 52 a FG(492)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)-2 351 y Fc(A)m(ttributes)n(:)227
-497 y Fk(In)34 b(addition)f(to)g(those)f(attributes)h(common)g(to)g
-(all)g(Mappings,)h(ev)n(ery)e(MathMap)h(also)f(has)g(the)i(follo)n
-(wing)227 597 y(attributes:)340 727 y Fj(\017)45 b Fk(Seed:)37
-b(Random)28 b(n)n(um)n(b)r(er)f(seed)340 853 y Fj(\017)45
-b Fk(SimpFI:)29 b(F)-7 b(orw)n(ard-in)n(v)n(erse)24 b(MathMap)j(pairs)g
-(simplify?)340 980 y Fj(\017)45 b Fk(SimpIF:)29 b(In)n(v)n(erse-forw)n
-(ard)24 b(MathMap)j(pairs)g(simplify?)-2 1135 y Fc(F)-8
-b(unctions)n(:)227 1281 y Fk(The)36 b(MathMap)f(class)f(do)r(es)h(not)g
-(de\014ne)h(an)n(y)e(new)i(routines)e(b)r(ey)n(ond)h(those)g(whic)n(h)h
-(are)e(applicable)h(to)g(all)227 1381 y(Mappings.)p 0
-1567 3780 12 v 0 1699 a FA(MatrixMap)264 b Fd(Map)39
-b(co)s(ordinates)e(b)m(y)h(m)m(ultiplying)d(b)m(y)k(a)1719
-1809 y(matrix)3103 1699 y FA(MatrixMap)0 1962 y Fc(Description:)44
-b Fk(A)20 b(MatrixMap)e(is)h(form)g(of)g(Mapping)g(whic)n(h)h(p)r
-(erforms)e(a)h(general)f(linear)g(transformation.)33
-b(Eac)n(h)18 b(set)227 2062 y(of)26 b(input)g(co)r(ordinates,)f
-(regarded)f(as)h(a)h(column-v)n(ector,)e(are)h(pre-m)n(ultiplied)g(b)n
-(y)h(a)f(matrix)g(\(whose)h(elemen)n(ts)227 2161 y(are)j(sp)r
-(eci\014ed)h(when)g(the)g(MatrixMap)f(is)g(created\))g(to)h(giv)n(e)e
-(a)i(new)f(column-v)n(ector)f(con)n(taining)h(the)h(output)227
-2261 y(co)r(ordinates.)36 b(If)28 b(appropriate,)e(the)i(in)n(v)n(erse)
-e(transformation)g(ma)n(y)h(also)f(b)r(e)i(p)r(erformed.)0
-2404 y Fc(Constructor)k(F)-8 b(unction:)227 2503 y Fk(AST)p
-Ft(_)p Fk(MA)h(TRIXMAP)-2 2646 y Fc(Inheritance)n(:)227
-2792 y Fk(The)28 b(MatrixMap)f(class)f(inherits)i(from)f(the)h(Mapping)
-f(class.)-2 2935 y Fc(A)m(ttributes)n(:)227 3081 y Fk(The)h(MatrixMap)e
-(class)h(do)r(es)g(not)g(de\014ne)h(an)n(y)f(new)g(attributes)h(b)r(ey)
-n(ond)f(those)g(whic)n(h)g(are)g(applicable)g(to)g(all)227
-3181 y(Mappings.)-2 3324 y Fc(F)-8 b(unctions)n(:)227
-3470 y Fk(The)32 b(MatrixMap)f(class)g(do)r(es)g(not)h(de\014ne)g(an)n
-(y)f(new)h(routines)f(b)r(ey)n(ond)g(those)h(whic)n(h)f(are)g
-(applicable)g(to)h(all)227 3570 y(Mappings.)p 0 3756
-V 0 3887 a FA(NormMap)890 3888 y Fd(Normalise)k(co)s(ordinates)h(using)
-h(a)h(supplied)1730 4001 y(F)-10 b(rame)3172 3887 y FA(NormMap)0
-4153 y Fc(Description:)44 b Fk(The)26 b(NormMap)e(class)g(implemen)n
-(ts)i(a)f(Mapping)g(whic)n(h)g(normalises)e(co)r(ordinate)i(v)-5
-b(alues)24 b(using)h(the)227 4253 y(AST)p Ft(_)p Fk(NORM)k(routine)g
-(of)g(a)f(supplied)i(F)-7 b(rame.)40 b(The)29 b(n)n(um)n(b)r(er)g(of)g
-(inputs)h(and)e(outputs)i(of)f(a)f(NormMap)h(are)227
-4353 y(b)r(oth)f(equal)f(to)h(the)g(n)n(um)n(b)r(er)f(of)h(axes)e(in)i
-(the)g(supplied)g(F)-7 b(rame.)227 4474 y(The)26 b(forw)n(ard)f(and)h
-(in)n(v)n(erse)e(transformation)h(of)h(a)f(NormMap)h(are)f(b)r(oth)h
-(de\014ned)g(but)h(are)e(iden)n(tical)h(\(that)h(is,)227
-4574 y(they)h(do)g(not)f(form)h(a)f(real)g(in)n(v)n(erse)f(pair)h(in)h
-(that)g(the)g(in)n(v)n(erse)e(transformation)g(do)r(es)i(not)f(undo)h
-(the)g(normal-)227 4673 y(isation,)h(instead)f(it)i(reapplies)d(it\).)
-42 b(Ho)n(w)n(ev)n(er,)27 b(the)i(AST)p Ft(_)p Fk(SIMPLIFY)g(function)g
-(will)g(replace)f(neigh)n(b)r(ouring)227 4773 y(pairs)f(of)g(forw)n
-(ard)f(and)i(in)n(v)n(erse)e(NormMaps)h(b)n(y)g(a)g(single)g(UnitMap.)0
-4916 y Fc(Constructor)32 b(F)-8 b(unction:)227 5015 y
-Fk(AST)p Ft(_)p Fk(NORMMAP)-2 5158 y Fc(Inheritance)n(:)227
-5304 y Fk(The)28 b(NormMap)f(class)f(inherits)i(from)f(the)h(Mapping)f
-(class.)-2 5447 y Fc(A)m(ttributes)n(:)227 5593 y Fk(The)h(MatrixMap)e
-(class)h(do)r(es)g(not)g(de\014ne)h(an)n(y)f(new)g(attributes)h(b)r(ey)
-n(ond)f(those)g(whic)n(h)g(are)g(applicable)g(to)g(all)227
-5693 y(Mappings.)p eop end
-%%Page: 493 503
-TeXDict begin 493 502 bop 3643 52 a FG(493)-2 351 y Fc(F)-8
-b(unctions)n(:)227 497 y Fk(The)35 b(NormMap)f(class)g(do)r(es)g(not)h
-(de\014ne)g(an)n(y)f(new)g(routines)g(b)r(ey)n(ond)h(those)f(whic)n(h)h
-(are)e(applicable)h(to)h(all)227 597 y(Mappings.)p 0
-789 3780 12 v 0 921 a FA(NullRegion)330 b Fd(A)39 b(b)s(oundless)f
-(region)g(within)f(a)h(F)-10 b(rame)328 b FA(NullRegion)0
-1103 y Fc(Description:)44 b Fk(The)21 b(NullRegion)g(class)f(implemen)n
-(ts)h(a)f(Region)h(with)g(no)f(b)r(ounds)h(within)h(a)e(F)-7
-b(rame.)35 b(If)21 b(the)g(Negated)227 1203 y(attribute)28
-b(of)f(a)h(NullRegion)f(is)g(false,)h(the)f(NullRegion)h(represen)n(ts)
-e(a)h(Region)g(con)n(taining)f(no)h(p)r(oin)n(ts.)37
-b(If)28 b(the)227 1302 y(Negated)k(attribute)g(of)h(a)e(NullRegion)i
-(is)f(true,)h(the)g(NullRegion)f(represen)n(ts)e(an)i(in\014nite)h
-(Region)f(\(that)h(is,)227 1402 y(all)28 b(p)r(oin)n(ts)f(in)h(the)g
-(co)r(ordinate)e(system)i(are)e(inside)i(the)g(NullRegion\).)0
-1548 y Fc(Constructor)k(F)-8 b(unction:)227 1648 y Fk(AST)p
-Ft(_)p Fk(NULLREGION)-2 1794 y Fc(Inheritance)n(:)227
-1940 y Fk(The)28 b(NullRegion)f(class)g(inherits)g(from)h(the)g(Region)
-f(class.)-2 2086 y Fc(A)m(ttributes)n(:)227 2232 y Fk(The)h(NullRegion)
-g(class)f(do)r(es)h(not)g(de\014ne)g(an)n(y)f(new)h(attributes)g(b)r
-(ey)n(ond)g(those)g(whic)n(h)g(are)f(applicable)g(to)h(all)227
-2332 y(Regions.)-2 2478 y Fc(F)-8 b(unctions)n(:)227
-2624 y Fk(The)33 b(NullRegion)f(class)f(do)r(es)h(not)g(de\014ne)h(an)n
-(y)e(new)i(routines)e(b)r(ey)n(ond)h(those)g(whic)n(h)h(are)e
-(applicable)h(to)g(all)227 2723 y(Regions.)p 0 2916 V
-0 3047 a FA(Ob)7 b(ject)710 b Fd(Base)39 b(class)f(for)g(all)g(AST)g
-(Ob)7 b(jects)709 b FA(Ob)7 b(ject)0 3229 y Fc(Description:)44
-b Fk(This)33 b(class)e(is)h(the)h(base)f(class)f(from)h(whic)n(h)g(all)
-g(other)g(classes)f(in)i(the)f(AST)h(library)e(are)g(deriv)n(ed.)227
-3329 y(It)e(pro)n(vides)e(all)h(the)g(basic)g(Ob)5 b(ject)28
-b(b)r(eha)n(viour)f(and)h(Ob)5 b(ject)28 b(manipulation)g(facilities)g
-(required)f(throughout)227 3429 y(the)h(library)-7 b(.)36
-b(There)27 b(is)g(no)h(Ob)5 b(ject)27 b(constructor,)f(ho)n(w)n(ev)n
-(er,)g(as)h(Ob)5 b(jects)27 b(on)g(their)h(o)n(wn)f(are)f(not)i
-(useful.)0 3575 y Fc(Constructor)k(F)-8 b(unction:)227
-3674 y Fk(None.)-2 3820 y Fc(Inheritance)n(:)227 3967
-y Fk(The)28 b(Ob)5 b(ject)27 b(base)g(class)g(do)r(es)g(not)h(inherit)g
-(from)f(an)n(y)g(other)g(class.)-2 4113 y Fc(A)m(ttributes)n(:)227
-4259 y Fk(All)h(Ob)5 b(jects)28 b(ha)n(v)n(e)e(the)i(follo)n(wing)e
-(attributes:)340 4514 y Fj(\017)45 b Fk(Class:)36 b(Ob)5
-b(ject)28 b(class)e(name)340 4644 y Fj(\017)45 b Fk(ID:)28
-b(Ob)5 b(ject)28 b(iden)n(ti\014cation)f(string)340 4773
-y Fj(\017)45 b Fk(Iden)n(t:)37 b(P)n(ermanen)n(t)26 b(Ob)5
-b(ject)28 b(iden)n(ti\014cation)f(string)340 4903 y Fj(\017)45
-b Fk(Nob)5 b(ject:)37 b(Num)n(b)r(er)28 b(of)g(Ob)5 b(jects)27
-b(in)h(class)340 5032 y Fj(\017)45 b Fk(Ob)5 b(jSize:)37
-b(The)28 b(in-memory)e(size)h(of)h(the)g(Ob)5 b(ject)27
-b(in)h(b)n(ytes)340 5162 y Fj(\017)45 b Fk(RefCoun)n(t:)37
-b(Coun)n(t)28 b(of)f(activ)n(e)g(Ob)5 b(ject)28 b(p)r(oin)n(ters)340
-5291 y Fj(\017)45 b Fk(UseDefs:)38 b(Allo)n(w)27 b(use)g(of)h(default)g
-(v)-5 b(alues)27 b(for)g(Ob)5 b(ject)28 b(attributes?)-2
-5450 y Fc(F)-8 b(unctions)n(:)227 5596 y Fk(The)28 b(follo)n(wing)e
-(routines)h(ma)n(y)g(b)r(e)h(applied)g(to)f(all)h(Ob)5
-b(jects:)p eop end
-%%Page: 494 504
-TeXDict begin 494 503 bop 0 52 a FG(494)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(ANNUL:)29 b(Ann)n(ul)f(a)f(p)r(oin)n(ter)g(to)h
-(an)f(Ob)5 b(ject)340 483 y Fj(\017)45 b Fk(AST)p Ft(_)p
-Fk(BEGIN:)28 b(Begin)f(a)g(new)h(AST)g(con)n(text)340
-614 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(CLEAR:)28 b(Clear)e(attribute)i
-(v)-5 b(alues)27 b(for)g(an)h(Ob)5 b(ject)340 745 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(CLONE:)27 b(Clone)g(a)h(p)r(oin)n(ter)f(to)g(an)h
-(Ob)5 b(ject)340 877 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(COPY:)27
-b(Cop)n(y)g(an)g(Ob)5 b(ject)340 1008 y Fj(\017)45 b
-Fk(AST)p Ft(_)p Fk(DELETE:)27 b(Delete)h(an)f(Ob)5 b(ject)340
-1140 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(END:)28 b(End)g(an)f(AST)h(con)n
-(text)340 1271 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(ESCAPES:)27
-b(Con)n(trol)f(whether)i(graphical)e(escap)r(e)h(sequences)g(are)f
-(remo)n(v)n(ed)340 1402 y Fj(\017)45 b Fk(AST)p Ft(_)p
-Fk(EXEMPT:)27 b(Exempt)g(an)h(Ob)5 b(ject)27 b(p)r(oin)n(ter)g(from)g
-(AST)h(con)n(text)g(handling)340 1534 y Fj(\017)45 b
-Fk(AST)p Ft(_)p Fk(EXPOR)-7 b(T:)27 b(Exp)r(ort)g(an)g(Ob)5
-b(ject)27 b(p)r(oin)n(ter)h(to)f(an)g(outer)g(con)n(text)340
-1665 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GET)p Fm(<)p Fk(X)p
-Fm(>)p Fk(:)36 b(Get)28 b(an)g(attribute)f(v)-5 b(alue)28
-b(for)f(an)g(Ob)5 b(ject)340 1797 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(IMPOR)-7 b(T:)27 b(Imp)r(ort)h(an)f(Ob)5 b(ject)28
-b(p)r(oin)n(ter)f(to)g(the)h(curren)n(t)f(con)n(text)340
-1928 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(ISA)p Fm(<)p Fk(CLASS)p
-Fm(>)p Fk(:)37 b(T)-7 b(est)28 b(class)e(mem)n(b)r(ership)340
-2059 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(SAME:)28 b(Do)g(t)n(w)n(o)e(AST)
-i(p)r(oin)n(ters)f(refer)g(to)h(the)g(same)f(Ob)5 b(ject?)340
-2191 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(SET:)28 b(Set)g(attribute)f(v)-5
-b(alues)28 b(for)f(an)g(Ob)5 b(ject)340 2322 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(SET)p Fm(<)p Fk(X)p Fm(>)p Fk(:)36
-b(Set)28 b(an)f(attribute)h(v)-5 b(alue)28 b(for)f(an)g(Ob)5
-b(ject)340 2454 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(SHO)n(W:)28
-b(Displa)n(y)f(a)g(textual)h(represen)n(tation)e(of)h(an)h(Ob)5
-b(ject)27 b(on)g(standard)g(output)340 2585 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(TEST:)27 b(T)-7 b(est)28 b(if)g(an)g(attribute)f
-(v)-5 b(alue)28 b(is)f(set)h(for)f(an)g(Ob)5 b(ject)340
-2717 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(TUNE:)28 b(Set)g(or)f(get)g(an)g
-(AST)h(tuning)g(parameter)340 2848 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(VERSION:)28 b(Return)g(the)f(v)n(erson)f(of)i(the)g(AST)g
-(library)e(b)r(eing)i(used.)p 0 3044 3780 12 v 0 3176
-a FA(PcdMap)891 3183 y Fd(Apply)38 b(2-dimensional)e(pincushion/barrel)
-1642 3304 y(distortion)3285 3176 y FA(PcdMap)0 3467 y
-Fc(Description:)44 b Fk(A)31 b(PcdMap)g(is)f(a)h(non-linear)e(Mapping)h
-(whic)n(h)h(transforms)f(2-dimensional)f(p)r(ositions)h(to)h(correct)
-227 3566 y(for)25 b(the)g(radial)f(distortion)g(in)n(tro)r(duced)h(b)n
-(y)f(some)h(cameras)e(and)i(telescop)r(es.)35 b(This)25
-b(can)g(tak)n(e)f(the)h(form)g(either)227 3666 y(of)j(pincushion)f(or)g
-(barrel)f(distortion,)h(and)h(is)f(c)n(haracterized)f(b)n(y)h(a)g
-(single)g(distortion)g(co)r(e\016cien)n(t.)227 3790 y(A)g(PcdMap)f(is)g
-(sp)r(eci\014ed)h(b)n(y)f(giving)g(this)h(distortion)f(co)r(e\016cien)n
-(t)g(and)g(the)h(co)r(ordinates)e(of)i(the)g(cen)n(tre)f(of)g(the)227
-3889 y(radial)h(distortion.)36 b(The)28 b(forw)n(ard)d(transformation)h
-(of)i(a)f(PcdMap)g(applies)g(the)h(distortion:)227 4013
-y(RD)g(=)g(R)g Fj(\003)f Fk(\()h(1)f(+)g(C)h Fj(\003)f
-Fk(R)h Fj(\003)f Fk(R)h(\))227 4137 y(where)h(R)h(is)g(the)g
-(undistorted)f(radial)g(distance)g(from)h(the)g(distortion)f(cen)n(tre)
-g(\(sp)r(eci\014ed)h(b)n(y)f(attribute)h(Pcd-)227 4237
-y(Cen\),)k(RD)e(is)g(the)g(radial)e(distance)i(from)f(the)i(same)e(cen)
-n(tre)g(in)h(the)g(presence)f(of)h(distortion,)g(and)g(C)g(is)f(the)227
-4336 y(distortion)c(co)r(e\016cien)n(t)h(\(giv)n(en)f(b)n(y)g
-(attribute)h(Disco\).)227 4460 y(The)33 b(in)n(v)n(erse)f
-(transformation)f(of)i(a)f(PcdMap)h(remo)n(v)n(es)d(the)k(distortion)e
-(pro)r(duced)h(b)n(y)f(the)h(forw)n(ard)f(trans-)227
-4560 y(formation.)42 b(The)29 b(expression)f(used)i(to)f(deriv)n(e)g(R)
-g(from)g(RD)i(is)e(an)g(appro)n(ximate)f(in)n(v)n(erse)g(of)h(the)h
-(expression)227 4659 y(ab)r(o)n(v)n(e.)0 4807 y Fc(Constructor)i(F)-8
-b(unction:)227 4907 y Fk(AST)p Ft(_)p Fk(PCDMAP)-2 5055
-y Fc(Inheritance)n(:)227 5201 y Fk(The)28 b(PcdMap)f(class)g(inherits)g
-(from)g(the)h(Mapping)f(class.)-2 5349 y Fc(A)m(ttributes)n(:)227
-5495 y Fk(In)38 b(addition)f(to)f(those)h(attributes)g(common)g(to)g
-(all)g(Mappings,)h(ev)n(ery)e(PcdMap)h(also)f(has)g(the)i(follo)n(wing)
-227 5595 y(attributes:)p eop end
-%%Page: 495 505
-TeXDict begin 495 504 bop 3643 52 a FG(495)340 351 y
-Fj(\017)45 b Fk(Disco:)37 b(PcdMap)27 b(pincushion/barrel)f(distortion)
-g(co)r(e\016cien)n(t)340 486 y Fj(\017)45 b Fk(PcdCen\(axis\):)36
-b(Cen)n(tre)28 b(co)r(ordinates)e(of)h(pincushion/barrel)f(distortion)
--2 651 y Fc(F)-8 b(unctions)n(:)227 797 y Fk(The)39 b(PcdMap)g(class)f
-(do)r(es)h(not)g(de\014ne)g(an)n(y)f(new)h(routines)g(b)r(ey)n(ond)g
-(those)f(whic)n(h)h(are)f(applicable)h(to)g(all)227 896
-y(Mappings.)p 0 1099 3780 12 v 0 1229 a FA(P)l(ermMap)1025
-1230 y Fd(Co)s(ordinate)d(p)s(erm)m(utation)g(Mapping)3195
-1229 y FA(P)l(ermMap)0 1422 y Fc(Description:)44 b Fk(A)37
-b(P)n(ermMap)e(is)h(a)g(Mapping)g(whic)n(h)g(p)r(erm)n(utes)h(the)f
-(order)f(of)h(co)r(ordinates,)i(and)e(p)r(ossibly)g(also)227
-1522 y(c)n(hanges)26 b(the)i(n)n(um)n(b)r(er)g(of)f(co)r(ordinates,)g
-(b)r(et)n(w)n(een)g(its)h(input)g(and)g(output.)227 1648
-y(In)37 b(addition)f(to)g(p)r(erm)n(uting)h(the)f(co)r(ordinate)g
-(order,)h(a)f(P)n(ermMap)f(ma)n(y)h(also)f(assign)g(constan)n(t)h(v)-5
-b(alues)36 b(to)227 1748 y(co)r(ordinates.)53 b(This)33
-b(is)g(useful)h(when)g(the)f(n)n(um)n(b)r(er)g(of)h(co)r(ordinates)d
-(is)j(b)r(eing)f(increased)f(as)h(it)h(allo)n(ws)e(\014xed)227
-1847 y(v)-5 b(alues)27 b(to)h(b)r(e)g(assigned)e(to)i(an)n(y)f(new)g
-(ones.)0 2000 y Fc(Constructor)32 b(F)-8 b(unction:)227
-2100 y Fk(AST)p Ft(_)p Fk(PERMMAP)-2 2252 y Fc(Inheritance)n(:)227
-2398 y Fk(The)28 b(P)n(ermMap)e(class)h(inherits)g(from)h(the)g
-(Mapping)f(class.)-2 2551 y Fc(A)m(ttributes)n(:)227
-2697 y Fk(The)32 b(P)n(ermMap)d(class)i(do)r(es)g(not)g(de\014ne)g(an)n
-(y)g(new)g(attributes)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f
-(applicable)h(to)g(all)227 2796 y(Mappings.)-2 2949 y
-Fc(F)-8 b(unctions)n(:)227 3095 y Fk(The)36 b(P)n(ermMap)e(class)h(do)r
-(es)g(not)g(de\014ne)h(an)n(y)f(new)g(routines)g(b)r(ey)n(ond)g(those)h
-(whic)n(h)f(are)g(applicable)f(to)i(all)227 3195 y(Mappings.)p
-0 3397 V 0 3529 a FA(Plot)588 b Fd(Pro)m(vide)37 b(facilities)f(for)i
-(2D)h(graphical)d(output)586 b FA(Plot)0 3721 y Fc(Description:)44
-b Fk(This)33 b(class)e(pro)n(vides)g(facilities)h(for)g(pro)r(ducing)f
-(2D)i(graphical)d(output.)52 b(A)32 b(Plot)g(is)g(a)g(sp)r(ecialised)
-227 3820 y(form)40 b(of)g(F)-7 b(rameSet,)43 b(in)e(whic)n(h)f(the)h
-(base)e(F)-7 b(rame)40 b(describ)r(es)f(a)h Ft(")p Fk(graphical)p
-Ft(")e Fk(co)r(ordinate)h(system)h(and)g(is)227 3920
-y(asso)r(ciated)28 b(with)i(a)e(rectangular)f(plotting)i(area)f(in)h
-(the)h(underlying)e(graphics)g(system.)41 b(This)29 b(plotting)g(area)
-227 4020 y(is)f(where)f(graphical)f(output)i(app)r(ears.)36
-b(It)28 b(is)f(de\014ned)h(when)g(the)g(Plot)f(is)g(created.)227
-4146 y(The)36 b(curren)n(t)e(F)-7 b(rame)35 b(of)h(a)f(Plot)g(describ)r
-(es)g(a)g Ft(")p Fk(ph)n(ysical)p Ft(")f Fk(co)r(ordinate)g(system,)j
-(whic)n(h)f(is)f(the)h(co)r(ordinate)227 4245 y(system)41
-b(in)h(whic)n(h)f(plotting)h(op)r(erations)e(are)g(sp)r(eci\014ed.)79
-b(The)41 b(results)g(of)g(eac)n(h)g(plotting)g(op)r(eration)g(are)227
-4345 y(automatically)26 b(transformed)f(in)n(to)i(graphical)e(co)r
-(ordinates)g(so)h(as)g(to)h(app)r(ear)e(in)i(the)g(plotting)g(area)e
-(\(sub)5 b(ject)227 4445 y(to)28 b(an)n(y)f(clipping)g(whic)n(h)h(ma)n
-(y)f(b)r(e)h(in)f(e\013ect\).)227 4571 y(Because)d(the)h(Mapping)f(b)r
-(et)n(w)n(een)g(ph)n(ysical)g(and)g(graphical)f(co)r(ordinates)g(ma)n
-(y)h(often)h(b)r(e)g(non-linear,)e(or)h(ev)n(en)227 4670
-y(discon)n(tin)n(uous,)33 b(most)f(plotting)g(do)r(es)g(not)h(result)f
-(in)g(simple)h(straigh)n(t)e(lines.)51 b(The)32 b(basic)g(plotting)g
-(elemen)n(t)227 4770 y(is)h(therefore)g(not)g(a)g(straigh)n(t)f(line,)j
-(but)f(a)f(geo)r(desic)f(curv)n(e)g(\(see)h(AST)p Ft(_)p
-Fk(CUR)-9 b(VE,)34 b(AST)p Ft(_)p Fk(GENCUR)-9 b(VE)33
-b(and)227 4870 y(AST)p Ft(_)p Fk(POL)-7 b(YCUR)e(VE\).)19
-b(A)g(Plot)f(also)g(pro)n(vides)g(facilities)h(for)f(dra)n(wing)g(mark)
-n(ers)f(or)h(sym)n(b)r(ols)g(\(AST)p Ft(_)p Fk(MARK\),)227
-4969 y(text)31 b(\(AST)p Ft(_)p Fk(TEXT\))g(and)g(grid)f(lines)g(\(AST)
-p Ft(_)p Fk(GRIDLINE\).)i(It)f(is)f(also)g(p)r(ossible)g(to)h(dra)n(w)e
-(curvilinear)h(axes)227 5069 y(with)23 b(optional)e(co)r(ordinate)g
-(grids)f(\(AST)p Ft(_)p Fk(GRID\).)k(A)e(range)e(of)i(Plot)g
-(attributes)f(is)h(a)n(v)-5 b(ailable)21 b(to)h(allo)n(w)e(precise)227
-5168 y(con)n(trol)27 b(o)n(v)n(er)e(the)j(app)r(earance)e(of)i
-(graphical)e(output)i(pro)r(duced)f(b)n(y)h(these)f(routines.)227
-5295 y(Y)-7 b(ou)20 b(ma)n(y)f(select)h(di\013eren)n(t)f(ph)n(ysical)g
-(co)r(ordinate)g(systems)g(in)h(whic)n(h)f(to)h(plot)g(\(including)g
-(the)g(nativ)n(e)f(graphical)227 5394 y(co)r(ordinate)33
-b(system)h(itself)6 b(\))35 b(b)n(y)f(selecting)g(di\013eren)n(t)g(F)-7
-b(rames)33 b(as)h(the)g(curren)n(t)f(F)-7 b(rame)34 b(of)g(a)g(Plot,)h
-(using)e(its)227 5494 y(Curren)n(t)21 b(attribute.)35
-b(Y)-7 b(ou)22 b(ma)n(y)e(also)h(set)g(up)h(clipping)g(\(see)f(AST)p
-Ft(_)p Fk(CLIP\))g(to)h(limit)g(the)g(exten)n(t)f(of)h(an)n(y)f
-(plotting)227 5593 y(y)n(ou)26 b(p)r(erform,)h(and)f(this)h(ma)n(y)f(b)
-r(e)h(done)f(in)h(an)n(y)f(of)h(the)g(co)r(ordinate)e(systems)i(asso)r
-(ciated)e(with)i(the)g(Plot,)g(not)227 5693 y(necessarily)f(the)i(one)f
-(y)n(ou)g(are)g(plotting)g(in.)p eop end
-%%Page: 496 506
-TeXDict begin 496 505 bop 0 52 a FG(496)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)227 351 y Fk(Lik)n(e)i(an)n(y)f(F)-7
-b(rameSet,)32 b(a)f(Plot)g(ma)n(y)f(also)g(b)r(e)i(used)f(as)g(a)f(F)-7
-b(rame.)47 b(In)32 b(this)f(case,)h(it)f(b)r(eha)n(v)n(es)f(lik)n(e)h
-(its)g(curren)n(t)227 451 y(F)-7 b(rame,)27 b(whic)n(h)h(describ)r(es)f
-(the)h(ph)n(ysical)f(co)r(ordinate)f(system.)227 576
-y(When)35 b(used)f(as)g(a)g(Mapping,)h(a)f(Plot)g(describ)r(es)f(the)i
-(in)n(ter-relation)e(b)r(et)n(w)n(een)h(graphical)e(co)r(ordinates)h
-(\(its)227 676 y(base)k(F)-7 b(rame\))38 b(and)f(ph)n(ysical)g(co)r
-(ordinates)g(\(its)h(curren)n(t)f(F)-7 b(rame\).)67 b(It)38
-b(di\013ers)f(from)h(a)f(normal)g(F)-7 b(rameSet,)227
-776 y(ho)n(w)n(ev)n(er,)29 b(in)h(that)h(an)e(attempt)i(to)f(transform)
-f(p)r(oin)n(ts)h(whic)n(h)g(lie)g(in)h(clipp)r(ed)f(areas)f(of)h(the)g
-(Plot)g(will)g(result)227 875 y(in)e(bad)g(co)r(ordinate)e(v)-5
-b(alues)27 b(\(AST)p Ft(__)p Fk(BAD\).)0 1026 y Fc(Constructor)32
-b(F)-8 b(unction:)227 1126 y Fk(AST)p Ft(_)p Fk(PLOT)-2
-1277 y Fc(Inheritance)n(:)227 1423 y Fk(The)28 b(Plot)f(class)g
-(inherits)g(from)g(the)h(F)-7 b(rameSet)28 b(class.)-2
-1574 y Fc(A)m(ttributes)n(:)227 1720 y Fk(In)37 b(addition)f(to)g
-(those)g(attributes)h(common)e(to)i(all)f(F)-7 b(rameSets,)38
-b(ev)n(ery)d(Plot)h(also)f(has)h(the)h(follo)n(wing)e(at-)227
-1820 y(tributes:)340 2084 y Fj(\017)45 b Fk(Abbrev:)37
-b(Abbreviate)27 b(leading)g(\014elds?)340 2217 y Fj(\017)45
-b Fk(Border:)36 b(Dra)n(w)26 b(a)i(b)r(order)e(around)h(v)-5
-b(alid)27 b(regions)g(of)g(a)g(Plot?)340 2351 y Fj(\017)45
-b Fk(Clip:)37 b(Clip)28 b(lines)g(and/or)e(mark)n(ers)f(at)j(the)g
-(Plot)f(b)r(oundary?)340 2485 y Fj(\017)45 b Fk(ClipOp:)37
-b(Com)n(bine)27 b(Plot)g(clipping)h(limits)g(using)f(a)h(b)r(o)r(olean)
-f(OR?)340 2618 y Fj(\017)45 b Fk(Colour\(elemen)n(t\):)37
-b(Colour)26 b(index)i(for)f(a)g(Plot)g(elemen)n(t)340
-2752 y Fj(\017)45 b Fk(Dra)n(wAxes\(axis\):)36 b(Dra)n(w)27
-b(axes)f(for)h(a)g(Plot?)340 2886 y Fj(\017)45 b Fk(Dra)n(wTitle:)37
-b(Dra)n(w)26 b(a)i(title)g(for)f(a)g(Plot?)340 3019 y
-Fj(\017)45 b Fk(Escap)r(e:)36 b(Allo)n(w)27 b(c)n(hanges)g(of)g(c)n
-(haracter)f(attributes)h(within)i(strings?)340 3153 y
-Fj(\017)45 b Fk(Edge\(axis\):)36 b(Whic)n(h)28 b(edges)f(to)g(lab)r(el)
-h(in)g(a)f(Plot)340 3287 y Fj(\017)45 b Fk(F)-7 b(on)n(t\(elemen)n
-(t\):)38 b(Character)26 b(fon)n(t)h(for)g(a)h(Plot)f(elemen)n(t)340
-3420 y Fj(\017)45 b Fk(Gap\(axis\):)37 b(In)n(terv)-5
-b(al)27 b(b)r(et)n(w)n(een)g(linearly)g(spaced)g(ma)5
-b(jor)26 b(axis)h(v)-5 b(alues)340 3554 y Fj(\017)45
-b Fk(Grf:)37 b(Select)28 b(the)g(graphics)e(in)n(terface)h(to)h(use.)
-340 3688 y Fj(\017)45 b Fk(Grid:)37 b(Dra)n(w)27 b(grid)g(lines)g(for)g
-(a)h(Plot?)340 3821 y Fj(\017)45 b Fk(In)n(visible:)37
-b(Dra)n(w)27 b(graphics)f(in)i(in)n(visible)f(ink?)340
-3955 y Fj(\017)45 b Fk(Lab)r(elA)n(t\(axis\):)37 b(Where)27
-b(to)h(place)f(n)n(umerical)g(lab)r(els)g(for)g(a)g(Plot)340
-4089 y Fj(\017)45 b Fk(Lab)r(elUnits\(axis\):)37 b(Use)28
-b(axis)f(unit)h(descriptions)f(in)h(a)f(Plot?)340 4222
-y Fj(\017)45 b Fk(Lab)r(elUp\(axis\):)37 b(Dra)n(w)27
-b(n)n(umerical)g(Plot)g(lab)r(els)g(uprigh)n(t?)340 4356
-y Fj(\017)45 b Fk(Lab)r(elling:)37 b(Lab)r(el)27 b(and)h(tic)n(k)f
-(placemen)n(t)g(option)h(for)f(a)g(Plot)340 4490 y Fj(\017)45
-b Fk(LogGap\(axis\):)36 b(In)n(terv)-5 b(al)27 b(b)r(et)n(w)n(een)g
-(logarithmically)f(spaced)h(ma)5 b(jor)26 b(axis)h(v)-5
-b(alues)340 4624 y Fj(\017)45 b Fk(LogPlot\(axis\):)35
-b(Map)28 b(the)g(plot)f(on)n(to)g(the)h(screen)f(logarithmically?)340
-4757 y Fj(\017)45 b Fk(LogTic)n(ks\(axis\):)35 b(Space)27
-b(the)h(ma)5 b(jor)27 b(tic)n(k)g(marks)g(logarithmically?)340
-4891 y Fj(\017)45 b Fk(Ma)5 b(jTic)n(kLen\(axis\):)36
-b(Length)27 b(of)h(ma)5 b(jor)26 b(tic)n(k)i(marks)e(for)h(a)g(Plot)340
-5025 y Fj(\017)45 b Fk(MinTic)n(kLen\(axis\):)37 b(Length)27
-b(of)h(minor)f(tic)n(k)g(marks)g(for)g(a)g(Plot)340 5158
-y Fj(\017)45 b Fk(MinTic)n(k\(axis\):)37 b(Densit)n(y)27
-b(of)h(minor)f(tic)n(k)g(marks)g(for)g(a)g(Plot)340 5292
-y Fj(\017)45 b Fk(NumLab\(axis\):)37 b(Dra)n(w)27 b(n)n(umerical)g
-(axis)f(lab)r(els)i(for)f(a)g(Plot?)340 5426 y Fj(\017)45
-b Fk(NumLabGap\(axis\):)37 b(Spacing)27 b(of)g(n)n(umerical)g(axis)g
-(lab)r(els)g(for)g(a)h(Plot)340 5559 y Fj(\017)45 b Fk(Size\(elemen)n
-(t\):)38 b(Character)26 b(size)h(for)g(a)g(Plot)g(elemen)n(t)340
-5693 y Fj(\017)45 b Fk(St)n(yle\(elemen)n(t\):)38 b(Line)27
-b(st)n(yle)h(for)f(a)g(Plot)g(elemen)n(t)p eop end
-%%Page: 497 507
-TeXDict begin 497 506 bop 3643 52 a FG(497)340 351 y
-Fj(\017)45 b Fk(T)-7 b(extLab\(axis\):)37 b(Dra)n(w)26
-b(descriptiv)n(e)h(axis)g(lab)r(els)g(for)g(a)h(Plot?)340
-482 y Fj(\017)45 b Fk(T)-7 b(extLabGap\(axis\):)36 b(Spacing)27
-b(of)h(descriptiv)n(e)f(axis)f(lab)r(els)i(for)f(a)g(Plot)340
-612 y Fj(\017)45 b Fk(Tic)n(kAll:)37 b(Dra)n(w)27 b(tic)n(k)g(marks)g
-(on)g(all)g(edges)g(of)h(a)f(Plot?)340 742 y Fj(\017)45
-b Fk(TitleGap:)37 b(V)-7 b(ertical)28 b(spacing)e(for)h(a)g(Plot)g
-(title)340 873 y Fj(\017)45 b Fk(T)-7 b(ol:)37 b(Plotting)27
-b(tolerance)340 1003 y Fj(\017)45 b Fk(Width\(elemen)n(t\):)39
-b(Line)27 b(width)i(for)e(a)g(Plot)g(elemen)n(t)-2 1162
-y Fc(F)-8 b(unctions)n(:)227 1308 y Fk(In)22 b(addition)g(to)f(those)h
-(routines)f(applicable)g(to)h(all)f(F)-7 b(rameSets,)23
-b(the)f(follo)n(wing)f(routines)g(ma)n(y)g(also)f(b)r(e)j(applied)227
-1408 y(to)28 b(all)f(Plots:)340 1665 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(BORDER:)27 b(Dra)n(w)g(a)g(b)r(order)g(around)g(v)-5
-b(alid)27 b(regions)f(of)i(a)f(Plot)340 1796 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(BOUNDINGBO)n(X:)28 b(Returns)f(a)h(b)r(ounding)f
-(b)r(o)n(x)g(for)h(previously)e(dra)n(wn)h(graphics)340
-1926 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(CLIP:)27 b(Set)h(up)g(or)f(remo)
-n(v)n(e)f(clipping)h(for)g(a)h(Plot)340 2056 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(CUR)-9 b(VE:)28 b(Dra)n(w)f(a)g(geo)r(desic)f
-(curv)n(e)340 2187 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GENCUR)-9
-b(VE:)28 b(Dra)n(w)f(a)g(generalized)f(curv)n(e)340 2317
-y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GETGRF)n(CONTEXT:)27
-b(Get)h(the)g(graphics)e(con)n(text)i(for)f(a)g(Plot)340
-2447 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GRFPOP:)27 b(Retriev)n(e)g
-(previously)f(sa)n(v)n(ed)g(graphics)h(functions)340
-2578 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GRFPUSH:)29 b(Sa)n(v)n(e)d(the)i
-(curren)n(t)f(graphics)f(functions)340 2708 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(GRFSET:)28 b(Register)f(a)g(graphics)f(routine)h
-(for)g(use)h(b)n(y)f(the)h(Plot)f(class)340 2838 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(GRID:)29 b(Dra)n(w)d(a)i(set)f(of)h(lab)r(elled)f
-(co)r(ordinate)g(axes)340 2969 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(GRIDLINE:)28 b(Dra)n(w)f(a)g(grid)g(line)h(\(or)f(axis\))g
-(for)g(a)g(Plot)340 3099 y Fj(\017)45 b Fk(AST)p Ft(_)p
-Fk(MARK:)28 b(Dra)n(w)f(a)g(set)h(of)f(mark)n(ers)f(for)h(a)g(Plot)340
-3229 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(POL)-7 b(YCUR)e(VE:)27
-b(Dra)n(w)g(a)g(series)g(of)g(connected)h(geo)r(desic)e(curv)n(es)340
-3360 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(TEXT:)28 b(Dra)n(w)e(a)i(text)g
-(string)e(for)i(a)f(Plot)-2 3519 y Fc(Graphical)33 b(Elemen)m(ts)n(:)
-227 3665 y Fk(The)21 b(colour)e(index,)j(c)n(haracter)d(fon)n(t,)j(c)n
-(haracter)c(size,)k(line)f(st)n(yle)f(and)g(line)h(width)g(used)g(for)f
-(plotting)g(can)h(b)r(e)g(set)227 3765 y(indep)r(enden)n(tly)g(for)f(v)
--5 b(arious)19 b(elemen)n(ts)h(of)g(the)g(graphical)f(output)h(pro)r
-(duced)g(b)n(y)g(a)g(Plot.)34 b(The)20 b(di\013eren)n(t)g(graph-)227
-3864 y(ical)h(elemen)n(ts)g(are)f(iden)n(ti\014ed)h(b)n(y)g(app)r
-(ending)f(the)i(strings)e(listed)h(b)r(elo)n(w)g(as)f(subscripts)g(to)h
-(the)g(Plot)g(attributes)227 3964 y(Colour\(elemen)n(t\),)k(F)-7
-b(on)n(t\(elemen)n(t\),)27 b(Size\(elemen)n(t\),)f(St)n(yle\(elemen)n
-(t\))g(and)f(Width\(elemen)n(t\).)38 b(These)25 b(strings)227
-4064 y(are)k(case-insensitiv)n(e)g(and)h(unam)n(biguous)f
-(abbreviations)f(ma)n(y)i(b)r(e)g(used.)44 b(Elemen)n(ts)30
-b(of)g(the)g(graphical)f(out-)227 4163 y(put)34 b(whic)n(h)g(relate)f
-(to)g(individual)h(axes)f(can)g(b)r(e)h(referred)e(to)i(either)f(indep)
-r(enden)n(tly)h(\(e.g.)55 b Ft(")p Fk(\(Grid1\))p Ft(")33
-b Fk(and)227 4263 y Ft(")p Fk(\(Grid2\))p Ft(")27 b Fk(\))h(or)f
-(together)f(\(e.g.)37 b Ft(")p Fk(\(Grid\))p Ft(")p Fk(\):)340
-4520 y Fj(\017)45 b Fk(Axes:)37 b(Axis)28 b(lines)f(dra)n(wn)g(through)
-g(tic)n(k)g(marks)f(using)i(AST)p Ft(_)p Fk(GRID)340
-4650 y Fj(\017)45 b Fk(Axis1:)37 b(Axis)27 b(line)h(dra)n(wn)f(through)
-f(tic)n(k)i(marks)e(on)i(axis)f(1)g(using)g(AST)p Ft(_)p
-Fk(GRID)340 4781 y Fj(\017)45 b Fk(Axis2:)37 b(Axis)27
-b(line)h(dra)n(wn)f(through)f(tic)n(k)i(marks)e(on)i(axis)f(2)g(using)g
-(AST)p Ft(_)p Fk(GRID)340 4911 y Fj(\017)45 b Fk(Border:)36
-b(The)27 b(Plot)g(b)r(order)g(dra)n(wn)g(using)g(AST)p
-Ft(_)p Fk(BORDER)g(or)g(AST)p Ft(_)p Fk(GRID)340 5041
-y Fj(\017)45 b Fk(Curv)n(es:)31 b(Geo)r(desic)18 b(curv)n(es)g(dra)n
-(wn)f(using)h(AST)p Ft(_)p Fk(CUR)-9 b(VE,)18 b(AST)p
-Ft(_)p Fk(GENCUR)-9 b(VE)18 b(or)g(AST)p Ft(_)p Fk(POL)-7
-b(YCUR)e(VE)340 5172 y Fj(\017)45 b Fk(Grid:)37 b(Grid)28
-b(lines)f(dra)n(wn)g(using)g(AST)p Ft(_)p Fk(GRIDLINE)h(or)f(AST)p
-Ft(_)p Fk(GRID)340 5302 y Fj(\017)45 b Fk(Grid1:)37 b(Grid)27
-b(lines)h(whic)n(h)f(cross)f(axis)h(1,)g(dra)n(wn)g(using)g(AST)p
-Ft(_)p Fk(GRIDLINE)h(or)f(AST)p Ft(_)p Fk(GRID)340 5432
-y Fj(\017)45 b Fk(Grid2:)37 b(Grid)27 b(lines)h(whic)n(h)f(cross)f
-(axis)h(2,)g(dra)n(wn)g(using)g(AST)p Ft(_)p Fk(GRIDLINE)h(or)f(AST)p
-Ft(_)p Fk(GRID)340 5563 y Fj(\017)45 b Fk(Mark)n(ers:)35
-b(Graphical)27 b(mark)n(ers)e(\(sym)n(b)r(ols\))j(dra)n(wn)e(using)i
-(AST)p Ft(_)p Fk(MARK)340 5693 y Fj(\017)45 b Fk(NumLab:)37
-b(Numerical)28 b(axis)e(lab)r(els)i(dra)n(wn)e(using)i(AST)p
-Ft(_)p Fk(GRID)p eop end
-%%Page: 498 508
-TeXDict begin 498 507 bop 0 52 a FG(498)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(NumLab1:)37 b(Numerical)27 b(lab)r(els)g(for)g(axis)g(1)g(dra)n
-(wn)g(using)g(AST)p Ft(_)p Fk(GRID)340 471 y Fj(\017)45
-b Fk(NumLab2:)37 b(Numerical)27 b(lab)r(els)g(for)g(axis)g(2)g(dra)n
-(wn)g(using)g(AST)p Ft(_)p Fk(GRID)340 591 y Fj(\017)45
-b Fk(Strings:)37 b(T)-7 b(ext)27 b(strings)g(dra)n(wn)g(using)g(AST)p
-Ft(_)p Fk(TEXT)340 711 y Fj(\017)45 b Fk(T)-7 b(extLab:)37
-b(Descriptiv)n(e)27 b(axis)g(lab)r(els)g(dra)n(wn)g(using)g(AST)p
-Ft(_)p Fk(GRID)340 830 y Fj(\017)45 b Fk(T)-7 b(extLab1:)36
-b(Descriptiv)n(e)27 b(lab)r(el)h(for)f(axis)g(1)g(dra)n(wn)g(using)g
-(AST)p Ft(_)p Fk(GRID)340 950 y Fj(\017)45 b Fk(T)-7
-b(extLab2:)36 b(Descriptiv)n(e)27 b(lab)r(el)h(for)f(axis)g(2)g(dra)n
-(wn)g(using)g(AST)p Ft(_)p Fk(GRID)340 1070 y Fj(\017)45
-b Fk(Tic)n(ks:)36 b(Tic)n(k)28 b(marks)e(\(b)r(oth)i(ma)5
-b(jor)27 b(and)g(minor\))g(dra)n(wn)g(using)g(AST)p Ft(_)p
-Fk(GRID)340 1190 y Fj(\017)45 b Fk(Tic)n(ks1:)36 b(Tic)n(k)27
-b(marks)f(\(b)r(oth)j(ma)5 b(jor)26 b(and)i(minor\))f(for)g(axis)g(1)g
-(dra)n(wn)g(using)g(AST)p Ft(_)p Fk(GRID)340 1309 y Fj(\017)45
-b Fk(Tic)n(ks2:)36 b(Tic)n(k)27 b(marks)f(\(b)r(oth)j(ma)5
-b(jor)26 b(and)i(minor\))f(for)g(axis)g(2)g(dra)n(wn)g(using)g(AST)p
-Ft(_)p Fk(GRID)340 1429 y Fj(\017)45 b Fk(Title:)38 b(The)27
-b(Plot)g(title)h(dra)n(wn)f(using)g(AST)p Ft(_)p Fk(GRID)p
-0 1602 3780 12 v 0 1734 a FA(Plot3D)418 b Fd(Pro)m(vide)37
-b(facilities)f(for)i(2D)h(graphical)d(output)415 b FA(Plot3D)0
-1897 y Fc(Description:)44 b Fk(A)28 b(Plot3D)g(is)f(a)h(sp)r(ecialised)
-f(form)g(of)h(Plot)f(that)h(pro)n(vides)e(facilities)i(for)f(pro)r
-(ducing)g(3D)h(graphical)227 1996 y(output,)35 b(including)d(fully)i
-(annotated)e(3D)g(co)r(ordinate)g(grids.)50 b(The)33
-b(base)f(F)-7 b(rame)32 b(in)h(a)f(Plot3D)g(describ)r(es)g(a)227
-2096 y(3-dimensional)c Ft(")p Fk(graphical)p Ft(")f Fk(co)r(ordinate)h
-(system.)42 b(The)29 b(axes)g(of)g(this)h(co)r(ordinate)e(system)h(are)
-f(assumed)h(to)227 2195 y(b)r(e)d(righ)n(t-handed)f(\(that)h(is,)f(if)h
-(X)g(app)r(ears)f(horizon)n(tally)e(to)j(the)g(righ)n(t)e(and)i(Y)g(v)n
-(ertically)e(up)n(w)n(ards,)g(then)i(Z)g(is)227 2295
-y(out)d(of)h(the)f(screen)g(to)n(w)n(ards)e(the)i(view)n(er\),)h(and)f
-(are)f(assumed)h(to)g(b)r(e)g(equally)g(scaled)f(\(that)i(is,)g(the)g
-(same)e(units)227 2395 y(are)32 b(used)g(to)g(measure)g(p)r(ositions)g
-(on)g(eac)n(h)f(of)i(the)g(3)f(axes\).)50 b(The)33 b(upp)r(er)f(and)h
-(lo)n(w)n(er)d(b)r(ounds)j(of)f(a)g(v)n(olume)227 2494
-y(within)25 b(this)g(graphical)d(co)r(ordinate)h(system)h(is)g(sp)r
-(eci\014ed)h(when)f(the)g(Plot3D)g(is)g(created,)g(and)g(all)g
-(subsequen)n(t)227 2594 y(graphics)i(are)h Ft(")p Fk(dra)n(wn)p
-Ft(")f Fk(in)i(this)g(v)n(olume.)227 2712 y(The)h(Plot3D)g(class)f(do)r
-(es)g(not)i(itself)f(include)g(an)n(y)g(abilit)n(y)f(to)h(dra)n(w)f(on)
-h(a)g(graphics)e(device.)41 b(Instead)29 b(it)g(calls)227
-2812 y(up)r(on)21 b(function)g(in)g(an)f(externally)g(supplied)g(mo)r
-(dule)h(\(the)g Ft(")p Fk(grf3d)p Ft(")e Fk(mo)r(dule\))i(to)g(do)f
-(the)h(required)e(dra)n(wing.)33 b(A)227 2911 y(mo)r(dule)23
-b(should)g(b)r(e)g(written)g(that)g(implemen)n(ts)h(the)f(functions)g
-(of)g(the)g(grf3d)f(in)n(terface)g(using)h(the)g(facilities)g(of)227
-3011 y(a)d(sp)r(eci\014c)g(graphics)e(system)h(This)h(mo)r(dule)g
-(should)g(then)g(b)r(e)g(link)n(ed)g(in)n(to)g(the)g(application)f(so)g
-(that)h(the)g(Plot3D)227 3110 y(class)30 b(can)f(use)h(its)h(functions)
-f(\(see)g(the)h(description)f(of)g(the)g(ast)p Ft(_)p
-Fk(link)g(commands)f(for)h(details)g(of)g(ho)n(w)g(to)g(do)227
-3210 y(this\).)35 b(The)19 b(grf3d)g(in)n(terface)g(de\014nes)g(a)g
-(few)h(simple)f(functions)h(for)f(dra)n(wing)f(primitiv)n(es)h(suc)n(h)
-g(as)f(straigh)n(t)h(lines,)227 3310 y(mark)n(ers)27
-b(and)h(c)n(haracter)e(strings.)38 b(These)28 b(functions)h(all)f
-(accept)g(p)r(ositions)f(in)i(the)g(3D)f(graphics)f(co)r(ordinate)227
-3409 y(system)21 b(\(the)h(base)e(F)-7 b(rame)21 b(of)f(the)i
-(Plot3D\),)f(and)f(so)h(the)g(grf3d)f(mo)r(dule)h(m)n(ust)h(also)d
-(manage)h(the)i(pro)5 b(jection)20 b(of)227 3509 y(these)i(3D)g(co)r
-(ordinates)e(on)n(to)h(the)h(2D)g(viewing)f(surface,)h(including)g(the)
-h(c)n(hoice)d(of)i Ft(")p Fk(ey)n(e)p Ft(")p Fk(/)p Ft(")p
-Fk(camera)p Ft(")c Fk(p)r(osition,)227 3609 y(direction)25
-b(of)g(viewing,)f(etc.)37 b(The)25 b(AST)g(library)e(includes)i(a)g
-(sample)f(implemen)n(tation)h(of)g(the)g(grf3d)f(in)n(terface)227
-3708 y(based)j(on)h(the)g(PGPLOT)e(graphics)h(system)g(\(see)h(\014le)f
-(grf3d)p Ft(_)p Fk(pgplot.c\).)36 b(This)28 b(implemen)n(tation)g(also)
-e(serv)n(es)227 3808 y(to)36 b(do)r(cumen)n(t)g(the)h(grf3d)e(in)n
-(terface)g(itself)i(and)f(should)g(b)r(e)g(consulted)g(for)g(details)f
-(b)r(efore)h(writing)g(a)g(new)227 3908 y(implemen)n(tation.)227
-4026 y(The)30 b(curren)n(t)g(F)-7 b(rame)29 b(of)h(a)g(Plot3D)f
-(describ)r(es)h(a)f Ft(")p Fk(ph)n(ysical)p Ft(")g Fk(3-dimensional)f
-(co)r(ordinate)h(system,)i(whic)n(h)f(is)227 4125 y(the)36
-b(co)r(ordinate)f(system)h(in)g(whic)n(h)f(plotting)h(op)r(erations)e
-(are)h(sp)r(eci\014ed)h(when)g(in)n(v)n(oking)e(the)j(metho)r(ds)f(of)
-227 4225 y(the)f(Plot3D)e(class.)55 b(The)34 b(results)f(of)h(eac)n(h)f
-(plotting)h(op)r(eration)f(are)g(automatically)g(transformed)g(in)n(to)
-h(3D)227 4324 y(graphical)29 b(co)r(ordinates)f(b)r(efore)i(b)r(eing)g
-(plotted)g(using)g(the)g(facilities)g(of)g(the)g(grf3d)f(mo)r(dule)i
-(link)n(ed)f(in)n(to)f(the)227 4424 y(application.)227
-4542 y(Y)-7 b(ou)20 b(ma)n(y)f(select)h(di\013eren)n(t)f(ph)n(ysical)g
-(co)r(ordinate)g(systems)g(in)h(whic)n(h)f(to)h(plot)g(\(including)g
-(the)g(nativ)n(e)f(graphical)227 4642 y(co)r(ordinate)26
-b(system)h(itself)6 b(\))29 b(b)n(y)e(selecting)f(di\013eren)n(t)i(F)-7
-b(rames)26 b(as)h(the)g(curren)n(t)f(F)-7 b(rame)27 b(of)g(a)g(Plot3D,)
-g(using)f(its)227 4741 y(Curren)n(t)h(attribute.)227
-4859 y(Lik)n(e)f(an)n(y)f(F)-7 b(rameSet,)26 b(a)g(Plot3D)f(ma)n(y)h
-(also)f(b)r(e)h(used)g(as)g(a)f(F)-7 b(rame.)36 b(In)26
-b(this)h(case,)e(it)i(b)r(eha)n(v)n(es)e(lik)n(e)g(its)h(curren)n(t)227
-4959 y(F)-7 b(rame,)27 b(whic)n(h)h(describ)r(es)f(the)h(ph)n(ysical)f
-(co)r(ordinate)f(system.)227 5077 y(When)i(used)g(as)f(a)g(Mapping,)g
-(a)g(Plot3D)g(describ)r(es)g(the)g(in)n(ter-relation)f(b)r(et)n(w)n
-(een)i(3D)f(graphical)f(co)r(ordinates)227 5177 y(\(its)i(base)f(F)-7
-b(rame\))28 b(and)f(3D)h(ph)n(ysical)e(co)r(ordinates)h(\(its)h(curren)
-n(t)e(F)-7 b(rame\).)227 5295 y(Although)26 b(the)g(Plot3D)e(class)h
-(inherits)g(from)g(the)h(Plot)f(class,)g(sev)n(eral)e(of)j(the)g
-(facilities)f(of)g(the)h(Plot)f(class)g(are)227 5394
-y(not)f(a)n(v)-5 b(ailable)22 b(in)i(the)g(Plot3D)f(class,)h(and)f(an)h
-(error)e(will)h(b)r(e)i(rep)r(orted)d(if)j(an)n(y)e(attempt)h(is)f
-(made)h(to)f(use)h(them.)227 5494 y(Sp)r(eci\014cally)-7
-b(,)38 b(the)d(Plot3D)g(class)f(do)r(es)h(not)g(supp)r(ort)g(clipping)g
-(using)g(the)h(astClip)f(function.)60 b(AST)p Ft(_)p
-Fk(CLIP)227 5593 y(routine.)36 b(Nor)24 b(do)r(es)h(it)g(supp)r(ort)g
-(the)g(sp)r(eci\014cation)g(of)g(graphics)e(primitiv)n(e)i(functions)g
-(at)g(run-time)g(using)f(the)227 5693 y(AST)p Ft(_)p
-Fk(GRFSET,)k(AST)p Ft(_)p Fk(GRFPOP)-7 b(,)27 b(AST)p
-Ft(_)p Fk(GRFPUSH,)h(and)f(AST)p Ft(_)p Fk(GETGRF)n(CONTEXT)g
-(routines.)p eop end
-%%Page: 499 509
-TeXDict begin 499 508 bop 3643 52 a FG(499)0 351 y Fc(Constructor)32
-b(F)-8 b(unction:)227 451 y Fk(AST)p Ft(_)p Fk(PLOT3D)-2
-649 y Fc(Inheritance)n(:)227 795 y Fk(The)28 b(Plot3D)f(class)g
-(inherits)g(from)g(the)h(Plot)f(class.)-2 992 y Fc(A)m(ttributes)n(:)
-227 1138 y Fk(In)d(addition)g(to)f(those)g(attributes)h(common)f(to)g
-(all)h(Plots,)f(ev)n(ery)g(Plot3D)g(also)f(has)h(the)h(follo)n(wing)f
-(attributes:)340 1472 y Fj(\017)45 b Fk(Norm:)37 b(Normal)26
-b(v)n(ector)h(de\014ning)g(the)h(2D)g(plane)f(used)h(for)f(text)h(and)f
-(mark)n(ers)340 1629 y Fj(\017)45 b Fk(Ro)r(otCorner:)35
-b(Sp)r(eci\014es)28 b(whic)n(h)g(edges)f(of)g(the)h(3D)g(b)r(o)n(x)f
-(should)g(b)r(e)h(annotated.)227 1839 y(Some)35 b(attributes)f(of)g
-(the)h(Plot)f(class)g(refer)f(to)i(sp)r(eci\014c)f(ph)n(ysical)g(co)r
-(ordinate)f(axes)h(\(e.g.)57 b(Gap,)36 b(Lab)r(elUp,)227
-1938 y(Dra)n(wAxes,)29 b(etc\).)43 b(F)-7 b(or)29 b(a)g(basic)g(Plot,)g
-(the)h(axis)f(index)g(m)n(ust)h(b)r(e)g(1)f(or)f(2,)i(but)g(for)f(a)g
-(Plot3D)g(the)h(axis)f(index)227 2038 y(can)e(b)r(e)h(1,)g(2)f(or)g(3.)
-227 2187 y(Certain)35 b(Plot)h(attributes)f(are)g(ignored)f(b)n(y)i
-(the)g(Plot3D)f(class)g(\(e.g.)61 b(Edge,)37 b(Dra)n(wTitle,)g
-(TitleGap,)h(etc\).)227 2286 y(Consult)28 b(the)g(Plot)f(attribute)h
-(do)r(cumen)n(tation)f(for)g(details.)-2 2484 y Fc(F)-8
-b(unctions)n(:)227 2630 y Fk(The)27 b(Plot3D)e(class)h(do)r(es)g(not)g
-(de\014ne)h(an)n(y)e(new)i(routines)f(b)r(ey)n(ond)g(those)g(whic)n(h)g
-(are)f(applicable)h(to)g(all)g(Plots.)227 2730 y(Note,)37
-b(ho)n(w)n(ev)n(er,)d(that)h(the)g(follo)n(wing)e(metho)r(ds)i
-(inherited)g(from)f(the)h(Plot)f(class)f(cannot)h(b)r(e)h(used)g(with)g
-(a)227 2829 y(Plot3D)27 b(and)h(will)f(rep)r(ort)g(an)h(error)d(if)j
-(called:)340 3014 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(BOUNDINGBO)n(X,)19
-b(AST)p Ft(_)p Fk(CLIP)-7 b(,)18 b(AST)p Ft(_)p Fk(CUR)-9
-b(VE,)18 b(AST)p Ft(_)p Fk(GENCUR)-9 b(VE,)18 b(AST)p
-Ft(_)p Fk(GETGRF)n(CONTEXT,)427 3113 y(AST)p Ft(_)p Fk(GRFPOP)-7
-b(,)27 b(AST)p Ft(_)p Fk(GRFPUSH,)h(AST)p Ft(_)p Fk(GRFSET,)g(AST)p
-Ft(_)p Fk(GRIDLINE,)g(AST)p Ft(_)p Fk(POL)-7 b(YCUR)e(VE.)p
-0 3361 3780 12 v 0 3493 a FA(P)l(oin)l(tList)508 b Fd(A)39
-b(collection)e(of)h(p)s(oin)m(ts)g(in)g(a)h(F)-10 b(rame)506
-b FA(P)l(oin)l(tList)0 3730 y Fc(Description:)44 b Fk(The)20
-b(P)n(oin)n(tList)e(class)g(implemen)n(ts)i(a)f(Region)f(whic)n(h)i
-(represen)n(ts)e(a)g(collection)h(of)g(p)r(oin)n(ts)h(in)f(a)g(F)-7
-b(rame.)0 3927 y Fc(Constructor)32 b(F)-8 b(unction:)227
-4027 y Fk(AST)p Ft(_)p Fk(POINTLIST)-2 4224 y Fc(Inheritance)n(:)227
-4371 y Fk(The)28 b(P)n(oin)n(tList)e(class)h(inherits)h(from)f(the)h
-(Region)f(class.)-2 4568 y Fc(A)m(ttributes)n(:)227 4714
-y Fk(In)40 b(addition)g(to)g(those)f(attributes)h(common)f(to)h(all)f
-(Regions,)j(ev)n(ery)d(P)n(oin)n(tList)f(also)h(has)g(the)i(follo)n
-(wing)227 4814 y(attributes:)340 5147 y Fj(\017)k Fk(ListSize:)37
-b(The)28 b(n)n(um)n(b)r(er)f(of)h(p)r(ositions)f(stored)g(in)h(the)g(P)
-n(oin)n(tList)-2 5357 y Fc(F)-8 b(unctions)n(:)227 5503
-y Fk(The)37 b(P)n(oin)n(tList)f(class)g(do)r(es)h(not)g(de\014ne)g(an)n
-(y)f(new)h(routines)g(b)r(ey)n(ond)f(those)h(whic)n(h)g(are)f
-(applicable)g(to)h(all)227 5603 y(Regions.)p eop end
-%%Page: 500 510
-TeXDict begin 500 509 bop 0 52 a FG(500)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)p 0 351 3780 12 v 0 483
-a FA(P)l(olyMap)225 b Fd(Map)38 b(co)s(ordinates)f(using)h(p)s
-(olynomial)e(functions)223 b FA(P)l(olyMap)0 644 y Fc(Description:)44
-b Fk(A)33 b(P)n(olyMap)f(is)g(a)g(form)h(of)g(Mapping)f(whic)n(h)h(p)r
-(erforms)f(a)g(general)f(p)r(olynomial)h(transformation.)227
-744 y(Eac)n(h)37 b(output)g(co)r(ordinate)g(is)g(a)g(p)r(olynomial)g
-(function)h(of)f(all)g(the)h(input)h(co)r(ordinates.)65
-b(The)37 b(co)r(e\016cien)n(ts)227 844 y(are)29 b(sp)r(eci\014ed)i
-(separately)d(for)i(eac)n(h)f(output)i(co)r(ordinate.)43
-b(The)30 b(forw)n(ard)f(and)h(in)n(v)n(erse)e(transformations)h(are)227
-943 y(de\014ned)f(indep)r(endan)n(tly)g(b)n(y)f(separate)g(sets)g(of)h
-(co)r(e\016cien)n(ts.)0 1079 y Fc(Constructor)k(F)-8
-b(unction:)227 1179 y Fk(AST)p Ft(_)p Fk(POL)h(YMAP)-2
-1314 y Fc(Inheritance)n(:)227 1460 y Fk(The)28 b(P)n(olyMap)e(class)h
-(inherits)g(from)g(the)h(Mapping)g(class.)-2 1596 y Fc(A)m(ttributes)n
-(:)227 1742 y Fk(The)34 b(P)n(olyMap)d(class)h(do)r(es)h(not)h
-(de\014ne)f(an)n(y)g(new)g(attributes)g(b)r(ey)n(ond)g(those)g(whic)n
-(h)g(are)f(applicable)h(to)g(all)227 1842 y(Mappings.)-2
-1978 y Fc(F)-8 b(unctions)n(:)227 2124 y Fk(The)38 b(P)n(olyMap)e
-(class)g(do)r(es)i(not)f(de\014ne)h(an)n(y)f(new)g(routines)g(b)r(ey)n
-(ond)g(those)g(whic)n(h)h(are)f(applicable)f(to)i(all)227
-2223 y(Mappings.)p 0 2395 V 0 2527 a FA(P)l(olygon)153
-b Fd(A)38 b(p)s(olygonal)d(region)h(within)h(a)g(2-dimensional)e(F)-10
-b(rame)152 b FA(P)l(olygon)0 2688 y Fc(Description:)44
-b Fk(The)25 b(P)n(olygon)e(class)g(implemen)n(ts)i(a)f(p)r(olygonal)g
-(area,)f(de\014ned)i(b)n(y)g(a)f(collection)g(of)h(v)n(ertices,)f
-(within)227 2788 y(a)k(2-dimensional)f(F)-7 b(rame.)39
-b(The)29 b(v)n(ertices)e(are)h(connected)g(together)f(b)n(y)i(geo)r
-(desic)e(curv)n(es)g(within)i(the)g(encap-)227 2887 y(sulated)g(F)-7
-b(rame.)42 b(F)-7 b(or)28 b(instance,)i(if)g(the)f(encapsulated)g(F)-7
-b(rame)29 b(is)g(a)g(simple)g(F)-7 b(rame)29 b(then)h(the)f(geo)r
-(desics)f(will)227 2987 y(b)r(e)34 b(straigh)n(t)d(lines,)j(but)g(if)f
-(the)g(F)-7 b(rame)33 b(is)f(a)h(SkyF)-7 b(rame)32 b(then)h(the)g(geo)r
-(desics)f(will)h(b)r(e)g(great)f(circles.)52 b(Note,)227
-3087 y(the)31 b(v)n(ertices)e(m)n(ust)h(b)r(e)h(supplied)g(in)f(an)g
-(order)f(suc)n(h)h(that)g(the)h(inside)f(of)g(the)h(p)r(olygon)e(is)h
-(to)g(the)h(left)g(of)f(the)227 3186 y(b)r(oundary)c(as)g(the)h(v)n
-(ertices)f(are)f(tra)n(v)n(ersed.)35 b(Supplying)27 b(them)g(in)g(the)g
-(rev)n(erse)e(order)g(will)i(e\013ectiv)n(ely)f(negate)227
-3286 y(the)i(p)r(olygon.)227 3404 y(Within)33 b(a)e(SkyF)-7
-b(rame,)32 b(neigh)n(b)r(ouring)e(v)n(ertices)g(are)h(alw)n(a)n(ys)e
-(joined)j(using)f(the)h(shortest)e(path.)49 b(Th)n(us)31
-b(if)h(an)227 3503 y(edge)f(of)g(180)f(degrees)g(or)g(more)g(in)i
-(length)f(is)g(required,)g(it)h(should)e(b)r(e)i(split)g(in)n(to)e
-(section)h(eac)n(h)g(of)g(whic)n(h)g(is)227 3603 y(less)k(than)h(180)e
-(degrees.)59 b(The)35 b(closed)g(path)g(joining)g(all)h(the)f(v)n
-(ertices)g(in)g(order)f(will)i(divide)f(the)h(celestial)227
-3702 y(sphere)f(in)n(to)h(t)n(w)n(o)f(disjoin)n(t)h(regions.)60
-b(The)36 b(inside)g(of)g(the)g(p)r(olygon)f(is)g(the)h(region)f(whic)n
-(h)h(is)f(circled)h(in)g(an)227 3802 y(an)n(ti-clo)r(c)n(kwise)25
-b(manner)h(\(when)i(view)n(ed)e(from)g(the)h(inside)g(of)g(the)g
-(celestial)f(sphere\))h(when)g(mo)n(ving)e(through)227
-3902 y(the)h(list)f(of)g(v)n(ertices)f(in)i(the)f(order)f(in)h(whic)n
-(h)g(they)h(w)n(ere)e(supplied)h(when)h(the)f(P)n(olygon)e(w)n(as)h
-(created)h(\(i.e.)36 b(the)227 4001 y(inside)28 b(is)f(to)h(the)g(left)
-g(of)g(the)g(b)r(oundary)f(when)g(mo)n(ving)g(through)g(the)h(v)n
-(ertices)e(in)i(the)g(order)e(supplied\).)0 4137 y Fc(Constructor)32
-b(F)-8 b(unction:)227 4237 y Fk(AST)p Ft(_)p Fk(POL)h(YGON)-2
-4372 y Fc(Inheritance)n(:)227 4518 y Fk(The)28 b(P)n(olygon)d(class)i
-(inherits)g(from)h(the)g(Region)f(class.)-2 4654 y Fc(A)m(ttributes)n
-(:)227 4800 y Fk(The)36 b(P)n(olygon)d(class)i(do)r(es)g(not)h
-(de\014ne)f(an)n(y)g(new)h(attributes)f(b)r(ey)n(ond)g(those)g(whic)n
-(h)h(are)e(applicable)h(to)h(all)227 4900 y(Regions.)-2
-5036 y Fc(F)-8 b(unctions)n(:)227 5182 y Fk(In)28 b(addition)g(to)g
-(those)g(routines)f(applicable)h(to)f(all)h(Regions,)f(the)i(follo)n
-(wing)e(routines)g(ma)n(y)g(also)g(b)r(e)i(applied)227
-5281 y(to)f(all)f(P)n(olygons:)340 5522 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(DO)n(WNSIZE:)28 b(Reduce)f(the)h(n)n(um)n(b)r(er)g
-(of)f(v)n(ertices)g(in)h(a)f(P)n(olygon.)340 5641 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(OUTLINE)p Fm(<)p Fk(X)p Fm(>)p Fk(:)36
-b(Create)27 b(a)g(P)n(olygon)e(outlining)j(v)-5 b(alues)27
-b(in)h(a)f(pixel)h(arra)n(y)p eop end
-%%Page: 501 511
-TeXDict begin 501 510 bop 3643 52 a FG(501)p 0 351 3780
-12 v 0 483 a FA(Prism)320 b Fd(An)39 b(extrusion)e(of)i(a)f(region)f
-(in)m(to)h(higher)g(dimensions)318 b FA(Prism)0 695 y
-Fc(Description:)44 b Fk(A)26 b(Prism)e(is)h(a)g(Region)f(whic)n(h)h
-(represen)n(ts)f(an)h(extrusion)f(of)h(an)g(existing)g(Region)f(in)n
-(to)h(one)g(or)f(more)227 794 y(orthogonal)32 b(dimensions)h(\(sp)r
-(eci\014ed)i(b)n(y)e(another)g(Region\).)55 b(If)34 b(the)g(Region)g
-(to)f(b)r(e)h(extruded)g(has)f(N)h(axes,)227 894 y(and)25
-b(the)g(Region)f(de\014ning)h(the)g(extrusion)f(has)g(M)h(axes,)g(then)
-g(the)g(resulting)g(Prism)e(will)i(ha)n(v)n(e)f(\(M+N\))h(axes.)227
-993 y(A)i(p)r(oin)n(t)g(is)g(inside)f(the)h(Prism)f(if)h(the)g(\014rst)
-g(N)g(axis)f(v)-5 b(alues)26 b(corresp)r(ond)f(to)i(a)f(p)r(oin)n(t)h
-(inside)f(the)i(Region)e(b)r(eing)227 1093 y(extruded,)34
-b(and)e(the)h(remaining)e(M)i(axis)e(v)-5 b(alues)32
-b(corresp)r(ond)f(to)h(a)g(p)r(oin)n(t)h(inside)f(the)h(Region)f
-(de\014ning)g(the)227 1193 y(extrusion.)227 1329 y(As)h(an)g(example,)h
-(a)f(cylinder)g(can)f(b)r(e)i(represen)n(ted)e(b)n(y)h(extruding)f(an)h
-(existing)g(Circle,)h(using)e(an)h(In)n(terv)-5 b(al)227
-1428 y(to)31 b(de\014ne)g(the)g(extrusion.)46 b(Ih)31
-b(this)g(case,)g(the)g(In)n(terv)-5 b(al)30 b(w)n(ould)h(ha)n(v)n(e)e
-(a)i(single)f(axis)g(and)h(w)n(ould)f(sp)r(ecify)h(the)227
-1528 y(upp)r(er)d(and)f(lo)n(w)n(er)f(limits)j(of)e(the)h(cylinder)f
-(along)g(its)g(length.)0 1700 y Fc(Constructor)32 b(F)-8
-b(unction:)227 1800 y Fk(AST)p Ft(_)p Fk(PRISM)-2 1972
-y Fc(Inheritance)n(:)227 2118 y Fk(The)28 b(Prism)f(class)f(inherits)i
-(from)f(the)h(Region)f(class.)-2 2290 y Fc(A)m(ttributes)n(:)227
-2436 y Fk(The)19 b(Prism)g(class)f(do)r(es)g(not)h(de\014ne)h(an)n(y)e
-(new)h(attributes)g(b)r(ey)n(ond)g(those)f(whic)n(h)h(are)f(applicable)
-h(to)g(all)f(Regions.)-2 2609 y Fc(F)-8 b(unctions)n(:)227
-2755 y Fk(The)21 b(Prism)f(class)g(do)r(es)h(not)g(de\014ne)g(an)n(y)f
-(new)h(routines)f(b)r(ey)n(ond)h(those)f(whic)n(h)h(are)f(applicable)g
-(to)h(all)g(Regions.)p 0 2977 V 0 3107 a FA(RateMap)844
-3108 y Fd(Mapping)38 b(whic)m(h)g(represen)m(ts)f(di\013eren)m(tiation)
-3232 3107 y FA(RateMap)0 3320 y Fc(Description:)44 b
-Fk(A)37 b(RateMap)e(is)h(a)f(Mapping)h(whic)n(h)g(represen)n(ts)e(a)i
-(single)f(elemen)n(t)h(of)g(the)g(Jacobian)e(matrix)i(of)227
-3420 y(another)h(Mapping.)67 b(The)38 b(Mapping)g(for)f(whic)n(h)h(the)
-g(Jacobian)e(is)i(required)f(is)g(sp)r(eci\014ed)h(when)g(the)h(new)227
-3519 y(RateMap)27 b(is)h(created,)f(and)g(is)h(referred)e(to)i(as)f
-(the)h Ft(")p Fk(encapsulated)e(Mapping)p Ft(")h Fk(b)r(elo)n(w.)227
-3655 y(The)39 b(n)n(um)n(b)r(er)f(of)g(inputs)h(to)f(a)g(RateMap)g(is)g
-(the)h(same)f(as)f(the)i(n)n(um)n(b)r(er)f(of)h(inputs)f(to)h(its)f
-(encapsulated)227 3755 y(Mapping.)e(The)27 b(n)n(um)n(b)r(er)f(of)h
-(outputs)g(from)f(a)g(RateMap)g(is)h(alw)n(a)n(ys)e(one.)36
-b(This)26 b(one)g(output)i(equals)d(the)i(rate)227 3854
-y(of)c(c)n(hange)f(of)h(a)g(sp)r(eci\014ed)g(output)h(of)f(the)g
-(encapsulated)g(Mapping)f(with)i(resp)r(ect)f(to)f(a)h(sp)r(eci\014ed)g
-(input)h(of)f(the)227 3954 y(encapsulated)k(Mapping)g(\(the)i(input)f
-(and)g(output)g(to)f(use)h(are)e(sp)r(eci\014ed)i(when)g(the)g(RateMap)
-f(is)h(created\).)227 4090 y(A)g(RateMap)f(whic)n(h)h(has)e(not)i(b)r
-(een)g(in)n(v)n(erted)e(do)r(es)i(not)f(de\014ne)h(an)f(in)n(v)n(erse)f
-(transformation.)35 b(If)28 b(a)f(RateMap)227 4190 y(has)g(b)r(een)h
-(in)n(v)n(erted)f(then)h(it)g(will)g(de\014ne)g(an)f(in)n(v)n(erse)f
-(transformation)g(but)j(not)e(a)g(forw)n(ard)f(transformation.)0
-4362 y Fc(Constructor)32 b(F)-8 b(unction:)227 4461 y
-Fk(AST)p Ft(_)p Fk(RA)h(TEMAP)-2 4634 y Fc(Inheritance)n(:)227
-4780 y Fk(The)28 b(RateMap)f(class)g(inherits)g(from)h(the)g(Mapping)f
-(class.)-2 4952 y Fc(A)m(ttributes)n(:)227 5098 y Fk(The)33
-b(RateMap)f(class)g(do)r(es)g(not)h(de\014ne)g(an)n(y)e(new)i
-(attributes)g(b)r(ey)n(ond)f(those)g(whic)n(h)h(are)e(applicable)h(to)h
-(all)227 5198 y(Mappings.)-2 5370 y Fc(F)-8 b(unctions)n(:)227
-5516 y Fk(The)37 b(RateMap)g(class)f(do)r(es)g(not)h(de\014ne)g(an)n(y)
-g(new)g(routines)f(b)r(ey)n(ond)g(those)h(whic)n(h)g(are)f(applicable)g
-(to)h(all)227 5616 y(Mappings.)p eop end
-%%Page: 502 512
-TeXDict begin 502 511 bop 0 52 a FG(502)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)p 0 351 3780 12 v 0 483
-a FA(Region)269 b Fd(Represen)m(ts)39 b(a)f(region)g(within)f(a)h(co)s
-(ordinate)f(system)267 b FA(Region)0 675 y Fc(Description:)44
-b Fk(This)25 b(class)e(pro)n(vides)g(the)h(basic)g(facilities)g(for)g
-(describing)g(a)f(region)g(within)i(a)f(sp)r(eci\014ed)h(co)r(ordinate)
-227 774 y(system.)37 b(Ho)n(w)n(ev)n(er,)26 b(the)h(Region)g(class)g
-(do)r(es)g(not)h(ha)n(v)n(e)e(a)h(constructor)f(function)i(of)g(its)f
-(o)n(wn,)g(as)g(it)h(is)g(simply)227 874 y(a)i(con)n(tainer)e(class)h
-(for)h(a)f(family)h(of)g(sp)r(ecialised)f(sub-classes)f(suc)n(h)i(as)f
-(Circle,)h(Bo)n(x,)g(etc,)g(whic)n(h)g(implemen)n(t)227
-973 y(Regions)d(with)h(particular)e(shap)r(es.)227 1099
-y(All)j(sub-classes)e(of)i(Region)f(require)g(a)g(F)-7
-b(rame)28 b(to)h(b)r(e)g(supplied)g(when)g(the)g(Region)f(is)g
-(created.)39 b(This)29 b(F)-7 b(rame)227 1199 y(describ)r(es)25
-b(the)h(co)r(ordinate)e(system)i(in)g(whic)n(h)f(the)h(Region)f(is)g
-(de\014ned,)i(and)e(is)g(referred)g(to)g(as)g(the)h Ft(")p
-Fk(encapsu-)227 1299 y(lated)g(F)-7 b(rame)p Ft(")24
-b Fk(b)r(elo)n(w.)36 b(Constructors)23 b(will)j(also)e(t)n(ypically)h
-(required)f(one)h(or)g(more)f(p)r(ositions)h(to)h(b)r(e)f(supplied)227
-1398 y(whic)n(h)32 b(de\014ne)g(the)g(lo)r(cation)g(and)f(exten)n(t)h
-(of)g(the)g(region.)48 b(These)32 b(p)r(ositions)f(m)n(ust)h(b)r(e)h
-(supplied)f(within)g(the)227 1498 y(encapsulated)27 b(F)-7
-b(rame.)227 1624 y(The)36 b(Region)g(class)f(inherits)g(from)h(the)g(F)
--7 b(rame)36 b(class,)h(and)f(so)f(a)h(Region)f(can)g(b)r(e)i(supplied)
-f(where-ev)n(er)e(a)227 1723 y(F)-7 b(rame)27 b(is)h(exp)r(ected.)37
-b(In)28 b(these)g(cases,)e(supplying)i(a)f(Region)g(is)h(equiv)-5
-b(alen)n(t)27 b(to)g(supplying)h(a)f(reference)g(to)g(its)227
-1823 y(encapsulated)33 b(F)-7 b(rame.)53 b(Th)n(us)32
-b(all)h(the)h(metho)r(ds)f(of)g(the)h(F)-7 b(rame)32
-b(class)g(can)h(b)r(e)h(used)f(on)g(the)g(Region)f(class.)227
-1923 y(F)-7 b(or)27 b(instance,)h(the)g(AST)p Ft(_)p
-Fk(F)n(ORMA)-7 b(T)27 b(routine)g(ma)n(y)g(b)r(e)h(used)g(on)f(a)g
-(Region)g(to)h(format)f(an)g(axis)g(v)-5 b(alue.)227
-2049 y(In)26 b(addition,)h(since)f(F)-7 b(rame)25 b(inherits)h(from)g
-(Mapping,)g(a)f(Region)h(is)g(also)f(a)g(sort)g(of)h(Mapping.)36
-b(T)-7 b(ransforming)227 2148 y(p)r(ositions)24 b(b)n(y)g(supplying)g
-(a)g(Region)f(to)h(one)g(of)g(the)h(AST)p Ft(_)p Fk(TRAN)p
-Fm(<)p Fk(X)p Fm(>)f Fk(routines)f(is)h(the)h(w)n(a)n(y)e(to)h
-(determine)g(if)227 2248 y(a)d(giv)n(en)f(p)r(osition)h(is)g(inside)g
-(or)f(outside)h(the)g(Region.)34 b(When)22 b(used)f(as)f(a)h(Mapping,)h
-(most)e(classes)g(of)h(F)-7 b(rame)21 b(are)227 2348
-y(equiv)-5 b(alen)n(t)26 b(to)g(a)g(UnitMap.)37 b(Ho)n(w)n(ev)n(er,)25
-b(the)i(Region)e(class)h(mo)r(di\014es)g(this)g(b)r(eha)n(viour)f(so)h
-(that)h(a)f(Region)f(acts)227 2447 y(lik)n(e)e(a)f(UnitMap)i(only)e
-(for)h(input)g(p)r(ositions)g(whic)n(h)g(are)e(within)j(the)f(area)f
-(represen)n(ted)f(b)n(y)i(the)g(Region.)35 b(Input)227
-2547 y(p)r(ositions)24 b(whic)n(h)h(are)e(outside)h(the)h(area)e(pro)r
-(duce)h(bad)g(output)h(v)-5 b(alues)24 b(\(i.e.)37 b(the)24
-b(output)h(v)-5 b(alues)24 b(are)g(equal)g(to)227 2646
-y(AST)p Ft(__)p Fk(BAD\).)k(This)f(b)r(eha)n(viour)f(is)h(the)h(same)e
-(for)h(b)r(oth)h(the)f(forw)n(ard)f(and)h(the)h(in)n(v)n(erse)d
-(transformation.)35 b(In)227 2746 y(this)d(sense)e(the)h
-Ft(")p Fk(in)n(v)n(erse)e(transformation)p Ft(")g Fk(is)i(not)g(a)g
-(true)g(in)n(v)n(erse)e(of)i(the)g(forw)n(ard)f(transformation,)g
-(since)227 2846 y(applying)d(the)h(forw)n(ard)e(transformation)h(to)g
-(a)g(p)r(oin)n(t)h(outside)g(the)g(Region,)f(and)h(then)g(applying)f
-(the)h(in)n(v)n(erse)227 2945 y(transformation)g(results,)i(in)g(a)f
-(set)h(of)f(AST)p Ft(__)p Fk(BAD)h(axis)f(v)-5 b(alues)29
-b(rather)g(than)h(the)g(original)e(axis)h(v)-5 b(alues.)42
-b(If)227 3045 y(required,)32 b(the)h(AST)p Ft(_)p Fk(REMO)n(VEREGIONS)d
-(function)j(can)e(b)r(e)i(used)f(to)f(remo)n(v)n(e)g(the)h
-Ft(")p Fk(masking)p Ft(")e Fk(e\013ect)j(of)227 3145
-y(an)n(y)e(Regions)f(con)n(tained)g(within)i(a)f(comp)r(ound)g(Mapping)
-g(or)f(F)-7 b(rameSet.)47 b(It)31 b(do)r(es)g(this)h(b)n(y)f(replacing)
-e(eac)n(h)227 3244 y(Region)35 b(with)g(a)g(UnitMap)h(or)e(equiv)-5
-b(alen)n(t)35 b(F)-7 b(rame)35 b(\(dep)r(ending)h(on)f(the)g(con)n
-(text)g(in)h(whic)n(h)f(the)g(Region)g(is)227 3344 y(used\).)227
-3470 y(If)d(the)f(co)r(ordinate)f(system)h(represen)n(ted)e(b)n(y)i
-(the)g(Region)g(is)g(c)n(hanged)e(\(b)n(y)i(c)n(hanging)f(the)h(v)-5
-b(alues)31 b(of)g(one)f(or)227 3569 y(more)23 b(of)g(the)h(attribute)g
-(whic)n(h)g(the)g(Region)e(inherits)i(from)f(its)h(encapsulated)f(F)-7
-b(rame\),)24 b(the)g(area)e(represen)n(ted)227 3669 y(b)n(y)f(the)h
-(Region)f(is)g(mapp)r(ed)h(in)n(to)f(the)g(new)h(co)r(ordinate)e
-(system.)35 b(F)-7 b(or)20 b(instance,)j(let's)e(sa)n(y)f(a)h(Circle)g
-(\(a)g(sub)r(class)227 3769 y(of)32 b(Region\))g(is)f(created,)i(a)e
-(SkyF)-7 b(rame)31 b(b)r(eing)h(supplied)h(to)e(the)i(constructor)d(so)
-h(that)i(the)f(Circle)f(describ)r(es)227 3868 y(a)g(circular)f(area)g
-(on)h(the)g(sky)g(in)h(FK4)e(equatorial)g(co)r(ordinates.)46
-b(Since)32 b(Region)e(inherits)i(from)f(F)-7 b(rame,)31
-b(the)227 3968 y(Circle)23 b(will)h(ha)n(v)n(e)f(a)g(System)h
-(attribute)f(and)h(this)g(attribute)g(will)f(b)r(e)h(set)g(to)g
-Ft(")p Fk(FK4)p Ft(")p Fk(.)34 b(If)24 b(the)g(System)f(attribute)227
-4068 y(of)29 b(the)g(Region)f(is)g(then)h(c)n(hanged)f(from)g(FK4)g(to)
-g(FK5,)h(the)g(circular)e(area)g(represen)n(ted)g(b)n(y)i(the)g(Region)
-e(will)227 4167 y(automatically)34 b(b)r(e)h(mapp)r(ed)g(from)f(the)h
-(FK4)f(system)g(in)n(to)h(the)g(FK5)f(system.)57 b(In)35
-b(general,)g(c)n(hanging)e(the)227 4267 y(co)r(ordinate)26
-b(system)h(in)h(this)f(w)n(a)n(y)f(ma)n(y)g(result)h(in)g(the)h(region)
-e(c)n(hanging)g(shap)r(e)h(-)f(for)h(instance,)g(a)g(circle)f(ma)n(y)
-227 4366 y(c)n(hange)33 b(in)n(to)g(an)g(ellipse)h(if)g(the)g
-(transformation)e(from)h(the)h(old)g(to)f(the)h(new)g(co)r(ordinate)e
-(system)i(is)f(linear)227 4466 y(but)j(with)g(di\013eren)n(t)f(scales)f
-(on)h(eac)n(h)g(axis.)58 b(Th)n(us)35 b(the)h(sp)r(eci\014c)f(class)g
-(of)g(a)f(Region)h(cannot)g(b)r(e)g(used)g(as)g(a)227
-4566 y(guaran)n(tee)22 b(of)h(the)h(shap)r(e)f(in)h(an)n(y)e
-(particular)g(co)r(ordinate)g(system.)36 b(If)23 b(the)h(AST)p
-Ft(_)p Fk(SIMPLIFY)f(routine)g(is)h(used)227 4665 y(on)g(a)g(Region,)g
-(it)h(will)f(endea)n(v)n(our)e(to)i(return)g(a)g(new)g(Region)f(of)h(a)
-g(sub-class)f(whic)n(h)h(accurately)f(describ)r(es)g(the)227
-4765 y(shap)r(e)28 b(in)g(the)f(curren)n(t)g(co)r(ordinate)g(system)g
-(of)h(the)g(Region)e(\(but)j(this)f(ma)n(y)f(not)g(alw)n(a)n(ys)f(b)r
-(e)i(p)r(ossible\).)227 4891 y(It)e(is)f(p)r(ossible)g(to)g(negate)f
-(an)h(existing)g(Region)f(so)h(that)g(it)h(represen)n(ts)e(all)g(areas)
-g(of)h(the)h(encapsulated)e(F)-7 b(rame)227 4990 y(except)28
-b(for)f(the)h(area)e(sp)r(eci\014ed)i(when)g(the)g(Region)f(w)n(as)f
-(created.)0 5143 y Fc(Constructor)32 b(F)-8 b(unction:)227
-5242 y Fk(None.)-2 5395 y Fc(Inheritance)n(:)227 5541
-y Fk(The)28 b(Region)f(class)f(inherits)i(from)f(the)h(F)-7
-b(rame)27 b(class.)-2 5693 y Fc(A)m(ttributes)n(:)p eop
-end
-%%Page: 503 513
-TeXDict begin 503 512 bop 3643 52 a FG(503)227 351 y
-Fk(In)20 b(addition)f(to)g(those)f(attributes)h(common)g(to)g(all)g(F)
--7 b(rames,)20 b(ev)n(ery)e(Region)g(also)g(has)h(the)h(follo)n(wing)e
-(attributes:)340 619 y Fj(\017)45 b Fk(Adaptiv)n(e:)37
-b(Should)28 b(the)g(area)e(adapt)h(to)h(c)n(hanges)e(in)i(the)g(co)r
-(ordinate)e(system?)340 754 y Fj(\017)45 b Fk(Negated:)37
-b(Has)27 b(the)h(original)e(region)g(b)r(een)i(negated?)340
-890 y Fj(\017)45 b Fk(Closed:)37 b(Should)27 b(the)h(b)r(oundary)f(b)r
-(e)h(considered)f(to)g(b)r(e)h(inside)g(the)g(region?)340
-1025 y Fj(\017)45 b Fk(MeshSize:)37 b(Num)n(b)r(er)28
-b(of)f(p)r(oin)n(ts)h(used)g(to)f(create)g(a)g(mesh)g(co)n(v)n(ering)f
-(the)i(Region)340 1160 y Fj(\017)45 b Fk(FillF)-7 b(actor:)37
-b(F)-7 b(raction)26 b(of)i(the)g(Region)f(whic)n(h)g(is)h(of)f(in)n
-(terest)340 1295 y Fj(\017)45 b Fk(Bounded:)37 b(Is)27
-b(the)h(Region)f(b)r(ounded?)227 1462 y(Ev)n(ery)21 b(Region)g(also)g
-(inherits)h(an)n(y)g(further)g(attributes)g(that)g(b)r(elong)g(to)g
-(the)h(encapsulated)e(F)-7 b(rame,)23 b(regardless)227
-1561 y(of)37 b(that)h(F)-7 b(rame's)36 b(class.)65 b(\(F)-7
-b(or)37 b(example,)i(the)f(Equino)n(x)e(attribute,)k(de\014ned)d(b)n(y)
-g(the)h(SkyF)-7 b(rame)36 b(class,)j(is)227 1661 y(inherited)28
-b(b)n(y)f(an)n(y)g(Region)g(whic)n(h)h(represen)n(ts)e(a)h(SkyF)-7
-b(rame.\))-2 1815 y Fc(F)f(unctions)n(:)227 1961 y Fk(In)30
-b(addition)f(to)h(those)f(routines)g(applicable)g(to)g(all)g(F)-7
-b(rames,)29 b(the)h(follo)n(wing)f(routines)g(ma)n(y)f(also)h(b)r(e)h
-(applied)227 2061 y(to)e(all)f(Regions:)340 2329 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(GETREGIONBOUNDS:)28 b(Get)g(the)g(b)r(ounds)f(of)h
-(a)f(Region)340 2464 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GETREGIONFRAME:)
-27 b(Get)h(a)g(cop)n(y)e(of)i(the)g(F)-7 b(rame)27 b(represen)n(t)f(b)n
-(y)i(a)f(Region)340 2599 y Fj(\017)45 b Fk(AST)p Ft(_)p
-Fk(GETREGIONPOINTS:)27 b(Get)h(the)g(p)r(ositions)f(that)h(de\014ne)f
-(a)h(Region)340 2734 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GETUNC:)28
-b(Obtain)f(uncertain)n(t)n(y)g(information)g(from)g(a)g(Region)340
-2870 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(MAPREGION:)27
-b(T)-7 b(ransform)27 b(a)g(Region)g(in)n(to)g(a)g(new)h(co)r(ordinate)e
-(system)340 3005 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(NEGA)-7
-b(TE:)28 b(T)-7 b(oggle)26 b(the)i(v)-5 b(alue)27 b(of)h(the)g(Negated)
-f(attribute)340 3140 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(O)n(VERLAP:)27
-b(Determines)g(the)h(nature)g(of)f(the)h(o)n(v)n(erlap)e(b)r(et)n(w)n
-(een)h(t)n(w)n(o)g(Regions)340 3275 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(MASK)p Fm(<)p Fk(X)p Fm(>)p Fk(:)37 b(Mask)27
-b(a)g(region)f(of)i(a)f(data)g(grid)340 3410 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(SETUNC:)28 b(Asso)r(ciate)f(a)g(new)h(uncertain)n
-(t)n(y)e(with)j(a)e(Region)340 3545 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(SHO)n(WMESH:)28 b(Displa)n(y)f(a)g(mesh)h(of)f(p)r(oin)n(ts)h
-(on)f(the)h(surface)f(of)h(a)f(Region)p 0 3749 3780 12
-v 0 3881 a FA(SelectorMap)298 b Fd(A)38 b(Mapping)g(that)g(lo)s(cates)g
-(p)s(ositions)889 3996 y(within)c(one)j(of)f(a)g(set)g(of)g(alternate)e
-(Regions)3043 3881 y FA(SelectorMap)0 4189 y Fc(Description:)44
-b Fk(A)26 b(SelectorMap)e(is)h(a)g(Mapping)g(that)h(iden)n(ti\014es)f
-(whic)n(h)g(Region)g(con)n(tains)f(a)h(giv)n(en)g(input)h(p)r(osition.)
-227 4316 y(A)40 b(SelectorMap)e(encapsulates)h(a)g(n)n(um)n(b)r(er)g
-(of)g(Regions)f(that)i(all)f(ha)n(v)n(e)f(the)i(same)f(n)n(um)n(b)r(er)
-g(of)g(axes)g(and)227 4416 y(represen)n(t)31 b(the)h(same)f(co)r
-(ordinate)g(F)-7 b(rame.)49 b(The)32 b(n)n(um)n(b)r(er)g(of)f(inputs)i
-(\(Nin)f(attribute\))h(of)e(the)i(SelectorMap)227 4515
-y(equals)24 b(the)h(n)n(um)n(b)r(er)f(of)g(axes)f(spanned)h(b)n(y)g
-(one)g(of)h(the)f(encapsulated)g(Region.)35 b(All)25
-b(SelectorMaps)e(ha)n(v)n(e)g(only)227 4615 y(a)k(single)h(output.)37
-b(SelectorMaps)26 b(do)i(not)f(de\014ne)h(an)f(in)n(v)n(erse)f
-(transformation.)227 4742 y(F)-7 b(or)36 b(eac)n(h)f(input)i(p)r
-(osition,)h(the)e(forw)n(ard)e(transformation)h(of)h(a)f(SelectorMap)g
-(searc)n(hes)f(through)h(the)i(en-)227 4841 y(capsulated)d(Regions)f
-(\(in)i(the)g(order)e(supplied)i(when)f(the)h(SelectorMap)e(w)n(as)h
-(created\))f(un)n(til)i(a)f(Region)g(is)227 4941 y(found)27
-b(whic)n(h)g(con)n(tains)f(the)h(input)g(p)r(osition.)36
-b(The)27 b(index)g(asso)r(ciated)e(with)i(this)g(Region)f(is)h
-(returned)f(as)g(the)227 5041 y(SelectorMap)h(output)h(v)-5
-b(alue)27 b(\(the)h(index)g(v)-5 b(alue)27 b(is)h(the)g(p)r(osition)f
-(of)h(the)f(Region)g(within)h(the)g(list)g(of)g(Regions)227
-5140 y(supplied)c(when)g(the)g(SelectorMap)f(w)n(as)g(created,)g
-(starting)g(at)h(1)f(for)g(the)h(\014rst)g(Region\).)35
-b(If)24 b(an)f(input)i(p)r(osition)227 5240 y(is)j(not)f(con)n(tained)g
-(within)i(an)n(y)d(Region,)h(a)h(v)-5 b(alue)27 b(of)h(zero)e(is)i
-(returned)f(b)n(y)g(the)h(forw)n(ard)e(transformation.)227
-5367 y(If)35 b(a)e(comp)r(ound)h(Mapping)g(con)n(tains)f(a)h
-(SelectorMap)f(in)h(series)f(with)i(its)f(o)n(wn)g(in)n(v)n(erse,)g
-(the)g(com)n(bination)227 5467 y(of)29 b(the)f(t)n(w)n(o)g(adjacen)n(t)
-g(SelectorMaps)f(will)h(b)r(e)h(replaced)e(b)n(y)h(a)g(UnitMap)h(when)g
-(the)f(comp)r(ound)h(Mapping)f(is)227 5566 y(simpli\014ed)g(using)g
-(AST)p Ft(_)p Fk(SIMPLIFY.)227 5693 y(In)g(practice,)f(SelectorMaps)f
-(are)h(often)h(used)f(in)h(conjunction)g(with)g(Switc)n(hMaps.)p
-eop end
-%%Page: 504 514
-TeXDict begin 504 513 bop 0 52 a FG(504)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)0 351 y Fc(Constructor)j(F)-8
-b(unction:)227 451 y Fk(AST)p Ft(_)p Fk(SELECTORMAP)-2
-600 y Fc(Inheritance)n(:)227 746 y Fk(The)28 b(SelectorMap)f(class)f
-(inherits)i(from)f(the)h(Mapping)f(class.)-2 895 y Fc(A)m(ttributes)n
-(:)227 1041 y Fk(The)e(SelectorMap)f(class)g(do)r(es)h(not)g(de\014ne)g
-(an)n(y)f(new)h(attributes)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f
-(applicable)g(to)h(all)227 1141 y(Mappings.)-2 1290 y
-Fc(F)-8 b(unctions)n(:)227 1436 y Fk(The)30 b(SelectorMap)e(class)g(do)
-r(es)h(not)h(de\014ne)f(an)n(y)g(new)g(routines)g(b)r(ey)n(ond)g(those)
-f(whic)n(h)i(are)e(applicable)h(to)g(all)227 1535 y(Mappings.)p
-0 1734 3780 12 v 0 1865 a FA(ShiftMap)306 b Fd(Add)39
-b(a)f(constan)m(t)f(v)-7 b(alue)39 b(to)f(eac)m(h)g(co)s(ordinate)304
-b FA(ShiftMap)0 2053 y Fc(Description:)44 b Fk(A)28 b(ShiftMap)h(is)e
-(a)g(linear)g(Mapping)g(whic)n(h)h(shifts)g(eac)n(h)f(axis)g(b)n(y)g(a)
-g(sp)r(eci\014ed)h(constan)n(t)f(v)-5 b(alue.)0 2202
-y Fc(Constructor)32 b(F)-8 b(unction:)227 2302 y Fk(AST)p
-Ft(_)p Fk(SHIFTMAP)-2 2451 y Fc(Inheritance)n(:)227 2597
-y Fk(The)28 b(ShiftMap)g(class)f(inherits)g(from)h(the)g(Mapping)f
-(class.)-2 2746 y Fc(A)m(ttributes)n(:)227 2892 y Fk(The)33
-b(ShiftMap)g(class)f(do)r(es)g(not)g(de\014ne)h(an)n(y)f(new)h
-(attributes)f(b)r(ey)n(ond)g(those)g(whic)n(h)h(are)e(applicable)h(to)h
-(all)227 2992 y(Mappings.)-2 3141 y Fc(F)-8 b(unctions)n(:)227
-3287 y Fk(The)37 b(ShiftMap)h(class)e(do)r(es)g(not)h(de\014ne)g(an)n
-(y)f(new)h(routines)f(b)r(ey)n(ond)h(those)f(whic)n(h)h(are)f
-(applicable)g(to)h(all)227 3387 y(Mappings.)p 0 3585
-V 0 3717 a FA(SkyAxis)619 b Fd(Store)38 b(celestial)e(axis)j
-(information)615 b FA(SkyAxis)0 3905 y Fc(Description:)44
-b Fk(The)c(SkyAxis)f(class)g(is)h(used)f(to)h(store)f(information)f
-(asso)r(ciated)h(with)h(a)f(particular)g(axis)f(of)i(a)227
-4004 y(SkyF)-7 b(rame.)43 b(It)30 b(is)g(used)g(in)n(ternally)f(b)n(y)g
-(the)h(AST)h(library)d(and)i(has)f(no)h(constructor)e(function.)44
-b(Y)-7 b(ou)30 b(should)227 4104 y(encoun)n(ter)d(it)h(only)f(within)i
-(textual)e(output)h(\(e.g.)37 b(from)27 b(AST)p Ft(_)p
-Fk(WRITE\).)0 4253 y Fc(Constructor)32 b(F)-8 b(unction:)227
-4352 y Fk(None.)-2 4501 y Fc(Inheritance)n(:)227 4648
-y Fk(The)28 b(SkyAxis)f(class)g(inherits)g(from)h(the)g(Axis)f(class.)p
-0 4846 V 0 4978 a FA(SkyF)-11 b(rame)306 b Fd(Celestial)37
-b(co)s(ordinate)f(system)i(description)305 b FA(SkyF)-11
-b(rame)0 5170 y Fc(Description:)44 b Fk(A)35 b(SkyF)-7
-b(rame)34 b(is)g(a)g(sp)r(ecialised)g(form)g(of)h(F)-7
-b(rame)34 b(whic)n(h)g(describ)r(es)g(celestial)g(longitude/latitude)
-227 5270 y(co)r(ordinate)f(systems.)56 b(The)34 b(particular)f
-(celestial)g(co)r(ordinate)g(system)h(to)g(b)r(e)g(represen)n(ted)f(is)
-h(sp)r(eci\014ed)g(b)n(y)227 5369 y(setting)24 b(the)h(SkyF)-7
-b(rame's)23 b(System)h(attribute)g(\(curren)n(tly)-7
-b(,)24 b(the)g(default)h(is)e(ICRS\))i(quali\014ed,)g(as)e(necessary)-7
-b(,)23 b(b)n(y)227 5469 y(a)k(mean)h(Equino)n(x)e(v)-5
-b(alue)28 b(and/or)e(an)h(Ep)r(o)r(c)n(h.)227 5593 y(F)-7
-b(or)34 b(eac)n(h)g(of)g(the)h(supp)r(orted)g(celestial)f(co)r
-(ordinate)f(systems,)j(a)e(SkyF)-7 b(rame)34 b(can)g(apply)g(an)g
-(optional)g(shift)227 5693 y(of)c(origin)f(to)h(create)f(a)g(co)r
-(ordinate)g(system)h(represen)n(ting)e(o\013sets)i(within)g(the)h
-(celestial)e(co)r(ordinate)g(system)p eop end
-%%Page: 505 515
-TeXDict begin 505 514 bop 3643 52 a FG(505)227 351 y
-Fk(from)33 b(some)f(sp)r(eci\014ed)i(reference)e(p)r(oin)n(t.)53
-b(This)33 b(o\013set)g(co)r(ordinate)f(system)g(can)h(also)f(b)r(e)h
-(rotated)f(to)h(de\014ne)227 451 y(new)28 b(longitude)f(and)h(latitude)
-g(axes.)36 b(See)27 b(attributes)h(SkyRef,)g(SkyRefIs,)f(SkyRefP)h(and)
-f(AlignO\013set.)227 573 y(All)34 b(the)f(co)r(ordinate)f(v)-5
-b(alues)33 b(used)g(b)n(y)g(a)g(SkyF)-7 b(rame)32 b(are)h(in)g
-(radians.)52 b(These)33 b(ma)n(y)g(b)r(e)g(formatted)g(in)g(more)227
-673 y(con)n(v)n(en)n(tional)26 b(w)n(a)n(ys)g(for)h(displa)n(y)g(b)n(y)
-g(using)g(AST)p Ft(_)p Fk(F)n(ORMA)-7 b(T.)0 818 y Fc(Constructor)32
-b(F)-8 b(unction:)227 918 y Fk(AST)p Ft(_)p Fk(SKYFRAME)-2
-1064 y Fc(Inheritance)n(:)227 1210 y Fk(The)28 b(SkyF)-7
-b(rame)27 b(class)f(inherits)i(from)f(the)h(F)-7 b(rame)27
-b(class.)-2 1355 y Fc(A)m(ttributes)n(:)227 1501 y Fk(In)40
-b(addition)f(to)h(those)f(attributes)h(common)f(to)g(all)g(F)-7
-b(rames,)42 b(ev)n(ery)c(SkyF)-7 b(rame)39 b(also)g(has)g(the)h(follo)n
-(wing)227 1601 y(attributes:)340 1856 y Fj(\017)45 b
-Fk(AlignO\013set:)37 b(Align)28 b(SkyF)-7 b(rames)26
-b(using)i(the)g(o\013set)f(co)r(ordinate)g(system?)340
-1985 y Fj(\017)45 b Fk(AsTime\(axis\):)37 b(F)-7 b(ormat)27
-b(celestial)g(co)r(ordinates)f(as)h(times?)340 2113 y
-Fj(\017)45 b Fk(Equino)n(x:)36 b(Ep)r(o)r(c)n(h)27 b(of)h(the)g(mean)f
-(equino)n(x)340 2242 y Fj(\017)45 b Fk(LatAxis:)37 b(Index)27
-b(of)h(the)g(latitude)g(axis)340 2371 y Fj(\017)45 b
-Fk(LonAxis:)37 b(Index)27 b(of)h(the)g(longitude)f(axis)340
-2500 y Fj(\017)45 b Fk(NegLon:)36 b(Displa)n(y)28 b(longitude)f(v)-5
-b(alues)27 b(in)h(the)g(range)e([-pi,pi]?)340 2629 y
-Fj(\017)45 b Fk(Pro)5 b(jection:)36 b(Sky)27 b(pro)5
-b(jection)27 b(description.)340 2757 y Fj(\017)45 b Fk(SkyRef:)37
-b(P)n(osition)27 b(de\014ning)g(lo)r(cation)g(of)h(the)g(o\013set)f(co)
-r(ordinate)g(system)340 2886 y Fj(\017)45 b Fk(SkyRefIs:)37
-b(Selects)28 b(the)g(nature)f(of)g(the)h(o\013set)g(co)r(ordinate)e
-(system)340 3015 y Fj(\017)45 b Fk(SkyRefP:)28 b(P)n(osition)e
-(de\014ning)h(orien)n(tation)g(of)g(the)h(o\013set)g(co)r(ordinate)e
-(system)-2 3173 y Fc(F)-8 b(unctions)n(:)227 3319 y Fk(The)36
-b(SkyF)-7 b(rame)34 b(class)g(do)r(es)h(not)g(de\014ne)h(an)n(y)e(new)h
-(routines)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f(applicable)h(to)g
-(all)227 3419 y(F)-7 b(rames.)p 0 3610 3780 12 v 0 3742
-a FA(SlaMap)328 b Fd(Sequence)39 b(of)g(celestial)e(co)s(ordinate)f
-(con)m(v)m(ersions)326 b FA(SlaMap)0 3922 y Fc(Description:)44
-b Fk(An)32 b(SlaMap)e(is)h(a)g(sp)r(ecialised)f(form)h(of)g(Mapping)f
-(whic)n(h)h(can)g(b)r(e)g(used)g(to)g(represen)n(t)f(a)g(sequence)227
-4022 y(of)e(con)n(v)n(ersions)d(b)r(et)n(w)n(een)i(standard)g
-(celestial)g(\(longitude,)h(latitude\))g(co)r(ordinate)f(systems.)227
-4145 y(When)d(an)e(SlaMap)h(is)g(\014rst)f(created,)h(it)h(simply)f(p)r
-(erforms)f(a)g(unit)i(\(n)n(ull\))f(Mapping)g(on)f(a)h(pair)f(of)h(co)r
-(ordinates.)227 4244 y(Using)39 b(the)g(AST)p Ft(_)p
-Fk(SLAADD)h(routine,)h(a)e(series)f(of)g(co)r(ordinate)g(con)n(v)n
-(ersion)e(steps)j(ma)n(y)f(then)h(b)r(e)h(added,)227
-4344 y(selected)34 b(from)f(those)h(pro)n(vided)e(b)n(y)i(the)g(SLALIB)
-g(P)n(ositional)e(Astronom)n(y)g(Library)h(\(Starlink)g(User)h(Note)227
-4443 y(SUN/67\).)44 b(This)30 b(allo)n(ws)e(m)n(ulti-step)i(con)n(v)n
-(ersions)e(b)r(et)n(w)n(een)i(a)f(v)-5 b(ariet)n(y)29
-b(of)h(celestial)g(co)r(ordinate)e(systems)i(to)227 4543
-y(b)r(e)e(assem)n(bled)f(out)h(of)f(the)h(building)g(blo)r(c)n(ks)f
-(pro)n(vided)f(b)n(y)i(SLALIB.)227 4666 y(F)-7 b(or)18
-b(details)g(of)g(the)h(individual)g(co)r(ordinate)e(con)n(v)n(ersions)f
-(a)n(v)-5 b(ailable,)19 b(see)f(the)h(description)e(of)i(the)f(AST)p
-Ft(_)p Fk(SLAADD)227 4765 y(routine.)0 4911 y Fc(Constructor)32
-b(F)-8 b(unction:)227 5010 y Fk(AST)p Ft(_)p Fk(SLAMAP)28
-b(\(also)f(see)g(AST)p Ft(_)p Fk(SLAADD\))-2 5156 y Fc(Inheritance)n(:)
-227 5302 y Fk(The)h(SlaMap)f(class)g(inherits)g(from)g(the)h(Mapping)g
-(class.)-2 5447 y Fc(A)m(ttributes)n(:)227 5593 y Fk(The)37
-b(SlaMap)f(class)g(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)h
-(attributes)f(b)r(ey)n(ond)h(those)f(whic)n(h)h(are)e(applicable)h(to)h
-(all)227 5693 y(Mappings.)p eop end
-%%Page: 506 516
-TeXDict begin 506 515 bop 0 52 a FG(506)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)-2 351 y Fc(F)-8 b(unctions)n(:)227
-497 y Fk(In)26 b(addition)f(to)h(those)f(routines)g(applicable)f(to)i
-(all)f(Mappings,)g(the)h(follo)n(wing)f(routine)g(ma)n(y)f(also)h(b)r
-(e)h(applied)227 597 y(to)i(all)f(SlaMaps:)340 853 y
-Fj(\017)45 b Fk(AST)p Ft(_)p Fk(SLAADD:)29 b(Add)g(a)e(celestial)g(co)r
-(ordinate)f(con)n(v)n(ersion)f(to)j(an)f(SlaMap)p 0 1045
-3780 12 v 0 1177 a FA(Sp)t(ecFluxF)-11 b(rame)1228 1183
-y Fd(Comp)s(ound)37 b(sp)s(ectrum/\015ux)1730 1303 y(F)-10
-b(rame)2871 1177 y FA(Sp)t(ecFluxF)f(rame)0 1462 y Fc(Description:)44
-b Fk(A)35 b(Sp)r(ecFluxF)-7 b(rame)35 b(com)n(bines)f(a)g(Sp)r(ecF)-7
-b(rame)34 b(and)g(a)g(FluxF)-7 b(rame)35 b(in)n(to)f(a)g(single)g
-(2-dimensional)227 1562 y(comp)r(ound)24 b(F)-7 b(rame.)34
-b(Suc)n(h)24 b(a)f(F)-7 b(rame)22 b(can)h(for)g(instance)g(b)r(e)h
-(used)f(to)g(describ)r(e)g(a)g(Plot)g(of)g(a)g(sp)r(ectrum)g(in)h(whic)
-n(h)227 1661 y(the)k(\014rst)g(axis)e(represen)n(ts)h(sp)r(ectral)g(p)r
-(osition)g(and)g(the)h(second)f(axis)g(represen)n(ts)f(\015ux.)0
-1807 y Fc(Constructor)32 b(F)-8 b(unction:)227 1907 y
-Fk(AST)p Ft(_)p Fk(SPECFLUXFRAME)-2 2053 y Fc(Inheritance)n(:)227
-2199 y Fk(The)28 b(Sp)r(ecFluxF)-7 b(rame)28 b(class)e(inherits)i(from)
-f(the)h(CmpF)-7 b(rame)27 b(class.)-2 2345 y Fc(A)m(ttributes)n(:)227
-2491 y Fk(The)e(Sp)r(ecFluxF)-7 b(rame)25 b(class)f(do)r(es)h(not)g
-(de\014ne)g(an)n(y)f(new)h(attributes)g(b)r(ey)n(ond)g(those)f(whic)n
-(h)h(are)f(applicable)h(to)227 2591 y(all)i(CmpF)-7 b(rames.)36
-b(Ho)n(w)n(ev)n(er,)24 b(the)j(attributes)g(of)f(the)h(comp)r(onen)n(t)
-g(F)-7 b(rames)25 b(can)i(b)r(e)f(accessed)g(as)g(if)h(they)g(w)n(ere)
-227 2690 y(attributes)d(of)f(the)h(Sp)r(ecFluxF)-7 b(rame.)36
-b(F)-7 b(or)23 b(instance,)h(the)g(Sp)r(ecFluxF)-7 b(rame)23
-b(will)h(recognise)e(the)i Ft(")p Fk(StdOfRest)p Ft(")227
-2790 y Fk(attribute)k(and)g(forw)n(ard)e(access)g(requests)h(to)g(the)h
-(comp)r(onen)n(t)g(Sp)r(ecF)-7 b(rame.)36 b(An)29 b(axis)d(index)i(can)
-f(optionally)227 2890 y(b)r(e)32 b(app)r(ended)f(to)g(the)h(end)f(of)g
-(an)n(y)f(attribute)i(name,)f(in)h(whic)n(h)f(case)f(the)i(request)e
-(to)h(access)f(the)h(attribute)227 2989 y(will)d(b)r(e)g(forw)n(arded)e
-(to)h(the)h(primary)f(F)-7 b(rame)27 b(de\014ning)h(the)g(sp)r
-(eci\014ed)f(axis.)-2 3135 y Fc(F)-8 b(unctions)n(:)227
-3281 y Fk(The)30 b(Sp)r(ecFluxF)-7 b(rame)30 b(class)e(do)r(es)h(not)h
-(de\014ne)g(an)n(y)f(new)g(routines)g(b)r(ey)n(ond)g(those)h(whic)n(h)f
-(are)g(applicable)g(to)227 3381 y(all)f(CmpF)-7 b(rames.)p
-0 3573 V 0 3704 a FA(Sp)t(ecF)c(rame)899 3705 y Fd(Sp)s(ectral)37
-b(co)s(ordinate)g(system)h(description)3138 3704 y FA(Sp)t(ecF)-11
-b(rame)0 3887 y Fc(Description:)44 b Fk(A)38 b(Sp)r(ecF)-7
-b(rame)38 b(is)g(a)f(sp)r(ecialised)g(form)h(of)f(one-dimensional)g(F)
--7 b(rame)37 b(whic)n(h)h(represen)n(ts)e(v)-5 b(arious)227
-3987 y(co)r(ordinate)22 b(systems)h(used)h(to)f(describ)r(e)g(p)r
-(ositions)g(within)h(an)f(electro-magnetic)f(sp)r(ectrum.)35
-b(The)24 b(particular)227 4086 y(co)r(ordinate)h(system)g(to)g(b)r(e)h
-(used)f(is)h(sp)r(eci\014ed)f(b)n(y)h(setting)f(the)h(Sp)r(ecF)-7
-b(rame's)25 b(System)g(attribute)h(\(the)g(default)227
-4186 y(is)i(w)n(a)n(v)n(elength\))e(quali\014ed,)h(as)g(necessary)-7
-b(,)26 b(b)n(y)i(other)f(attributes)g(suc)n(h)g(as)g(the)h(rest)f
-(frequency)-7 b(,)28 b(the)g(standard)227 4285 y(of)c(rest,)g(the)g(ep)
-r(o)r(c)n(h)f(of)h(observ)-5 b(ation,)23 b(units,)i(etc)f(\(see)f(the)h
-(description)f(of)h(the)g(System)g(attribute)f(for)g(details\).)227
-4408 y(By)h(setting)f(a)h(v)-5 b(alue)23 b(for)h(thr)f(Sp)r(ecOrigin)h
-(attribute,)g(a)g(Sp)r(ecF)-7 b(rame)23 b(can)h(b)r(e)g(made)f(to)h
-(represen)n(t)e(o\013sets)i(from)227 4508 y(a)j(giv)n(en)g(sp)r(ectral)
-g(p)r(osition,)h(rather)e(than)i(absolute)f(sp)r(ectral)g(v)-5
-b(alues.)0 4654 y Fc(Constructor)32 b(F)-8 b(unction:)227
-4753 y Fk(AST)p Ft(_)p Fk(SPECFRAME)-2 4899 y Fc(Inheritance)n(:)227
-5046 y Fk(The)28 b(Sp)r(ecF)-7 b(rame)27 b(class)g(inherits)g(from)h
-(the)g(F)-7 b(rame)27 b(class.)-2 5192 y Fc(A)m(ttributes)n(:)227
-5338 y Fk(In)38 b(addition)f(to)g(those)f(attributes)h(common)g(to)g
-(all)g(F)-7 b(rames,)39 b(ev)n(ery)d(Sp)r(ecF)-7 b(rame)37
-b(also)f(has)g(the)i(follo)n(wing)227 5437 y(attributes:)340
-5693 y Fj(\017)45 b Fk(AlignSp)r(ecO\013set:)38 b(Align)27
-b(Sp)r(ecF)-7 b(rames)27 b(using)h(the)g(o\013set)f(co)r(ordinate)g
-(system?)p eop end
-%%Page: 507 517
-TeXDict begin 507 516 bop 3643 52 a FG(507)340 351 y
-Fj(\017)45 b Fk(AlignStdOfRest:)38 b(Standard)27 b(of)g(rest)g(in)h
-(whic)n(h)g(to)f(align)g(Sp)r(ecF)-7 b(rames)340 479
-y Fj(\017)45 b Fk(RefDec:)38 b(Declination)27 b(of)h(the)g(source)e
-(\(FK5)i(J2000\))340 608 y Fj(\017)45 b Fk(RefRA:)29
-b(Righ)n(t)e(ascension)g(of)g(the)h(source)e(\(FK5)i(J2000\))340
-736 y Fj(\017)45 b Fk(RestF)-7 b(req:)37 b(Rest)28 b(frequency)340
-864 y Fj(\017)45 b Fk(SourceSys:)36 b(Source)27 b(v)n(elo)r(cit)n(y)f
-(sp)r(ectral)h(system)340 992 y Fj(\017)45 b Fk(SourceV)-7
-b(el:)37 b(Source)26 b(v)n(elo)r(cit)n(y)340 1120 y Fj(\017)45
-b Fk(SourceVRF:)28 b(Source)e(v)n(elo)r(cit)n(y)h(rest)g(frame)340
-1248 y Fj(\017)45 b Fk(Sp)r(ecOrigin:)36 b(The)28 b(zero)f(p)r(oin)n(t)
-g(for)g(Sp)r(ecF)-7 b(rame)28 b(axis)f(v)-5 b(alues)340
-1376 y Fj(\017)45 b Fk(StdOfRest:)38 b(Standard)27 b(of)g(rest)227
-1533 y(Sev)n(eral)35 b(of)h(the)g(F)-7 b(rame)35 b(attributes)h
-(inherited)g(b)n(y)g(the)g(Sp)r(ecF)-7 b(rame)36 b(class)f(refer)g(to)h
-(a)f(sp)r(eci\014c)h(axis)f(of)h(the)227 1633 y(F)-7
-b(rame)25 b(\(for)g(instance)f(Unit\(axis\),)j(Lab)r(el\(axis\),)e
-(etc\).)36 b(Since)26 b(a)e(Sp)r(ecF)-7 b(rame)25 b(is)g(strictly)g
-(one-dimensional,)f(it)227 1733 y(allo)n(ws)i(these)h(attributes)h(to)f
-(b)r(e)h(sp)r(eci\014ed)f(without)h(an)f(axis)f(index.)37
-b(So)27 b(for)g(instance,)g Ft(")p Fk(Unit)p Ft(")g Fk(is)g(allo)n(w)n
-(ed)f(in)227 1832 y(place)h(of)h Ft(")p Fk(Unit\(1\))p
-Ft(")p Fk(.)-2 1977 y Fc(F)-8 b(unctions)n(:)227 2123
-y Fk(In)30 b(addition)f(to)h(those)f(routines)g(applicable)g(to)g(all)g
-(F)-7 b(rames,)29 b(the)h(follo)n(wing)f(routines)g(ma)n(y)f(also)h(b)r
-(e)h(applied)227 2223 y(to)e(all)f(Sp)r(ecF)-7 b(rames:)340
-2477 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(SETREFPOS:)27
-b(Set)h(reference)e(p)r(osition)i(in)f(an)n(y)g(celestial)g(system)340
-2605 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GETREFPOS:)27
-b(Get)h(reference)e(p)r(osition)i(in)g(an)n(y)e(celestial)h(system)p
-0 2795 3780 12 v 0 2925 a FA(Sp)t(ecMap)775 2926 y Fd(Sequence)39
-b(of)f(sp)s(ectral)g(co)s(ordinate)f(con)m(v)m(ersions)3238
-2925 y FA(Sp)t(ecMap)0 3106 y Fc(Description:)44 b Fk(A)31
-b(Sp)r(ecMap)f(is)g(a)g(sp)r(ecialised)g(form)g(of)g(Mapping)g(whic)n
-(h)g(can)g(b)r(e)g(used)g(to)g(represen)n(t)f(a)h(sequence)227
-3205 y(of)e(con)n(v)n(ersions)d(b)r(et)n(w)n(een)i(standard)g(sp)r
-(ectral)g(co)r(ordinate)f(systems.)227 3328 y(When)19
-b(an)f(Sp)r(ecMap)h(is)f(\014rst)g(created,)i(it)e(simply)h(p)r
-(erforms)f(a)g(unit)h(\(n)n(ull\))g(Mapping.)33 b(Using)18
-b(the)h(AST)p Ft(_)p Fk(SPECADD)227 3427 y(routine,)35
-b(a)e(series)f(of)h(co)r(ordinate)f(con)n(v)n(ersion)f(steps)i(ma)n(y)g
-(then)h(b)r(e)g(added.)54 b(This)33 b(allo)n(ws)f(m)n(ulti-step)h(con-)
-227 3527 y(v)n(ersions)27 b(b)r(et)n(w)n(een)h(a)g(v)-5
-b(ariet)n(y)28 b(of)g(sp)r(ectral)g(co)r(ordinate)g(systems)g(to)g(b)r
-(e)h(assem)n(bled)e(out)i(of)f(a)g(set)h(of)f(building)227
-3626 y(blo)r(c)n(ks.)227 3749 y(Con)n(v)n(ersions)f(are)g(a)n(v)-5
-b(ailable)28 b(to)h(transform)e(b)r(et)n(w)n(een)i(standards)f(of)h
-(rest.)40 b(Suc)n(h)29 b(con)n(v)n(ersions)d(need)j(to)f(kno)n(w)227
-3848 y(the)23 b(source)e(p)r(osition)i(as)e(an)i(RA)f(and)h(DEC.)f
-(This)h(information)e(can)i(b)r(e)f(supplied)h(in)g(the)g(form)f(of)g
-(parameters)227 3948 y(for)27 b(the)g(relev)-5 b(an)n(t)26
-b(con)n(v)n(ersions,)e(in)j(whic)n(h)g(case)f(the)h(Sp)r(ecMap)g(is)f
-(1-dimensional,)g(simply)h(transforming)e(the)227 4047
-y(sp)r(ectral)c(axis)g(v)-5 b(alues.)35 b(This)21 b(means)g(that)h(the)
-g(same)f(source)g(p)r(osition)g(will)h(alw)n(a)n(ys)e(b)r(e)i(used)f(b)
-n(y)g(the)h(Sp)r(ecMap.)227 4147 y(Ho)n(w)n(ev)n(er,)32
-b(this)h(ma)n(y)f(not)g(b)r(e)h(appropriate)e(for)h(an)h(accurate)e
-(description)h(of)g(a)h(3-D)f(sp)r(ectral)g(cub)r(e,)i(where)227
-4247 y(c)n(hanges)c(of)h(spatial)g(p)r(osition)g(can)g(pro)r(duce)f
-(signi\014can)n(t)h(c)n(hanges)f(in)h(the)h(Doppler)f(shift)g(in)n(tro)
-r(duced)g(when)227 4346 y(transforming)19 b(b)r(et)n(w)n(een)h
-(standards)e(of)i(rest.)34 b(F)-7 b(or)20 b(this)g(situation,)h(a)f
-(3-dimensional)e(Sp)r(ecMap)i(can)g(b)r(e)g(created)227
-4446 y(in)30 b(whic)n(h)g(axes)e(2)h(and)h(3)f(corresp)r(ond)f(to)h
-(the)h(source)e(RA)i(and)g(DEC)f(The)h(Sp)r(ecMap)g(simply)f(copies)g
-(v)-5 b(alues)227 4546 y(for)24 b(axes)f(2)h(and)g(3)f(from)h(input)h
-(to)f(output\),)i(but)e(mo)r(di\014es)h(axis)e(1)h(v)-5
-b(alues)23 b(\(the)i(sp)r(ectral)f(axis\))f(appropriately)-7
-b(.)227 4668 y(F)g(or)18 b(details)g(of)g(the)h(individual)g(co)r
-(ordinate)e(con)n(v)n(ersions)f(a)n(v)-5 b(ailable,)19
-b(see)f(the)h(description)e(of)i(the)f(AST)p Ft(_)p Fk(SPECADD)227
-4767 y(routine.)0 4912 y Fc(Constructor)32 b(F)-8 b(unction:)227
-5012 y Fk(AST)p Ft(_)p Fk(SPECMAP)27 b(\(also)g(see)g(AST)p
-Ft(_)p Fk(SPECADD\))-2 5156 y Fc(Inheritance)n(:)227
-5303 y Fk(The)h(Sp)r(ecMap)g(class)e(inherits)i(from)f(the)h(Mapping)f
-(class.)-2 5447 y Fc(A)m(ttributes)n(:)227 5593 y Fk(The)33
-b(Sp)r(ecMap)g(class)f(do)r(es)h(not)f(de\014ne)i(an)n(y)e(new)g
-(attributes)h(b)r(ey)n(ond)g(those)f(whic)n(h)h(are)f(applicable)g(to)h
-(all)227 5693 y(Mappings.)p eop end
-%%Page: 508 518
-TeXDict begin 508 517 bop 0 52 a FG(508)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)-2 351 y Fc(F)-8 b(unctions)n(:)227
-497 y Fk(In)26 b(addition)f(to)h(those)f(routines)g(applicable)f(to)i
-(all)f(Mappings,)g(the)h(follo)n(wing)f(routine)g(ma)n(y)f(also)h(b)r
-(e)h(applied)227 597 y(to)i(all)f(Sp)r(ecMaps:)340 857
-y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(SPECADD:)28 b(Add)g(a)g(sp)r(ectral)f
-(co)r(ordinate)f(con)n(v)n(ersion)f(to)j(an)f(Sp)r(ecMap)p
-0 1056 3780 12 v 0 1187 a FA(SphMap)189 b Fd(Map)39 b(3-d)g(Cartesian)d
-(to)i(2-d)h(spherical)e(co)s(ordinates)189 b FA(SphMap)0
-1375 y Fc(Description:)44 b Fk(A)33 b(SphMap)g(is)f(a)g(Mapping)g(whic)
-n(h)g(transforms)f(p)r(oin)n(ts)h(from)g(a)g(3-dimensional)f(Cartesian)
-g(co)r(or-)227 1475 y(dinate)f(system)g(in)n(to)g(a)f(2-dimensional)g
-(spherical)f(co)r(ordinate)h(system)h(\(longitude)g(and)g(latitude)g
-(on)f(a)h(unit)227 1575 y(sphere)e(cen)n(tred)f(at)h(the)g(origin\).)37
-b(It)28 b(w)n(orks)f(b)n(y)g(regarding)f(the)i(input)h(co)r(ordinates)d
-(as)i(p)r(osition)f(v)n(ectors)g(and)227 1674 y(\014nding)38
-b(their)f(in)n(tersection)g(with)h(the)g(sphere)f(surface.)66
-b(The)38 b(in)n(v)n(erse)e(transformation)g(alw)n(a)n(ys)f(pro)r(duces)
-227 1774 y(p)r(oin)n(ts)28 b(whic)n(h)f(are)g(a)g(unit)h(distance)g
-(from)f(the)h(origin)e(\(i.e.)38 b(unit)28 b(v)n(ectors\).)0
-1923 y Fc(Constructor)k(F)-8 b(unction:)227 2022 y Fk(AST)p
-Ft(_)p Fk(SPHMAP)-2 2171 y Fc(Inheritance)n(:)227 2318
-y Fk(The)28 b(SphMap)g(class)e(inherits)i(from)f(the)h(Mapping)f
-(class.)-2 2467 y Fc(A)m(ttributes)n(:)227 2613 y Fk(In)38
-b(addition)f(to)g(those)g(attributes)g(common)f(to)h(all)g(Mappings,)i
-(ev)n(ery)d(SphMap)h(also)f(has)h(the)h(follo)n(wing)227
-2712 y(attributes:)340 2973 y Fj(\017)45 b Fk(UnitRadius:)38
-b(SphMap)27 b(input)i(v)n(ectors)d(lie)i(on)f(a)g(unit)h(sphere?)340
-3105 y Fj(\017)45 b Fk(P)n(olarLong:)34 b(The)28 b(longitude)f(v)-5
-b(alue)28 b(to)f(assign)f(to)i(either)f(p)r(ole)-2 3266
-y Fc(F)-8 b(unctions)n(:)227 3413 y Fk(The)39 b(SphMap)h(class)e(do)r
-(es)h(not)g(de\014ne)g(an)n(y)g(new)g(routines)f(b)r(ey)n(ond)h(those)g
-(whic)n(h)g(are)f(applicable)h(to)g(all)227 3512 y(Mappings.)p
-0 3711 V 0 3841 a FA(Stc)692 3842 y Fd(Represen)m(ts)g(an)f(instance)g
-(of)h(the)f(IV)m(O)m(A)h(STC)f(class)3593 3841 y FA(Stc)0
-4030 y Fc(Description:)44 b Fk(The)26 b(Stc)f(class)f(is)h(an)g
-(implemen)n(tation)g(of)g(the)h(IV)n(O)n(A)f(STC)g(class)f(whic)n(h)h
-(forms)g(part)f(of)i(the)f(IV)n(O)n(A)227 4130 y(Space-Time)i(Co)r
-(ordinate)g(Metadata)g(system.)36 b(See:)227 4254 y(h)n
-(ttp://hea-www.harv)-5 b(ard.edu/)p Fj(\030)p Fk(arots/n)n(v)n(ometa/)o
-(STC.h)n(tml)227 4378 y(The)36 b(Stc)g(class)e(do)r(es)i(not)f(ha)n(v)n
-(e)g(a)g(constructor)f(function)i(of)f(its)h(o)n(wn,)h(as)e(it)h(is)g
-(simply)f(a)g(con)n(tainer)g(class)227 4478 y(for)25
-b(a)f(family)i(of)f(sp)r(ecialised)f(sub-classes)g(including)h
-(StcCatalogEn)n(tryLo)r(cation,)d(StcResourcePro\014le,)i(Stc-)227
-4578 y(Searc)n(hLo)r(cation)i(and)h(StcObsDataLo)r(cation.)0
-4727 y Fc(Constructor)32 b(F)-8 b(unction:)227 4826 y
-Fk(AST)p Ft(_)p Fk(STC)-2 4975 y Fc(Inheritance)n(:)227
-5121 y Fk(The)28 b(Stc)g(class)f(inherits)g(from)g(the)h(Region)f
-(class.)-2 5270 y Fc(A)m(ttributes)n(:)227 5417 y Fk(In)g(addition)g
-(to)f(those)h(attributes)f(common)h(to)f(all)h(Regions,)f(ev)n(ery)f
-(Stc)i(also)f(has)g(the)h(follo)n(wing)f(attributes:)340
-5677 y Fj(\017)45 b Fk(RegionClass:)35 b(The)28 b(class)f(name)g(of)h
-(the)g(encapsulated)f(Region.)p eop end
-%%Page: 509 519
-TeXDict begin 509 518 bop 3643 52 a FG(509)-2 351 y Fc(F)-8
-b(unctions)n(:)227 497 y Fk(In)28 b(addition)g(to)g(those)g(routines)f
-(applicable)h(to)f(all)h(Regions,)f(the)i(follo)n(wing)e(routines)g(ma)
-n(y)g(also)g(b)r(e)i(applied)227 597 y(to)f(all)f(Stc's:)340
-854 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GETSTCREGION:)27
-b(Get)h(a)f(p)r(oin)n(ter)h(to)f(the)h(encapsulated)f(Region)340
-984 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GETSTCCOORD:)27
-b(Get)h(information)f(ab)r(out)h(an)f(AstroCo)r(ords)f(elemen)n(t)340
-1115 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GETSTCNCOORD:)28
-b(Returns)f(the)h(n)n(um)n(b)r(er)f(of)h(AstroCo)r(ords)e(elemen)n(ts)h
-(in)h(an)f(Stc)p 0 1309 3780 12 v 0 1441 a FA(StcCatalogEn)l(tryLo)t
-(cation)1637 1457 y Fd(Corresp)s(ond)1737 1572 y(to)38
-b(the)1739 1671 y(IV)m(O)m(A)1659 1771 y(STCCat-)1694
-1871 y(alogEn-)1671 1984 y(tryLo)s(ca-)1789 2095 y(tion)1772
-2195 y(class)2295 1441 y FA(StcCatalogEn)l(tryLo)t(cation)0
-2355 y Fc(Description:)44 b Fk(The)29 b(StcCatalogEn)n(tryLo)r(cation)d
-(class)i(is)h(a)f(sub-class)g(of)h(Stc)g(used)g(to)g(describ)r(e)f(the)
-i(co)n(v)n(erage)c(of)227 2455 y(the)i(datasets)f(con)n(tained)g(in)h
-(some)f(V)n(O)g(resource.)227 2578 y(See)h(h)n(ttp://hea-www.harv)-5
-b(ard.edu/)p Fj(\030)p Fk(arots/n)n(v)n(o)o(meta/STC.h)n(tml)0
-2725 y Fc(Constructor)32 b(F)-8 b(unction:)227 2825 y
-Fk(AST)p Ft(_)p Fk(STCCA)h(T)g(ALOGENTR)g(YLOCA)g(TION)-2
-2971 y Fc(Inheritance)n(:)227 3118 y Fk(The)28 b(StcCatalogEn)n(tryLo)r
-(cation)c(class)j(inherits)g(from)h(the)g(Stc)g(class.)-2
-3264 y Fc(A)m(ttributes)n(:)227 3411 y Fk(The)36 b(StcCatalogEn)n
-(tryLo)r(cation)c(class)j(do)r(es)h(not)f(de\014ne)h(an)n(y)f(new)h
-(attributes)f(b)r(ey)n(ond)h(those)f(whic)n(h)h(are)227
-3510 y(applicable)27 b(to)h(all)f(Stcs.)-2 3657 y Fc(F)-8
-b(unctions)n(:)227 3803 y Fk(The)41 b(StcCatalogEn)n(tryLo)r(cation)d
-(class)i(do)r(es)h(not)g(de\014ne)g(an)n(y)g(new)g(routines)f(b)r(ey)n
-(ond)h(those)g(whic)n(h)g(are)227 3903 y(applicable)27
-b(to)h(all)f(Stcs.)p 0 4097 V 0 4229 a FA(StcObsDataLo)t(cation)214
-b Fd(Corresp)s(ond)37 b(to)h(the)1739 4342 y(IV)m(O)m(A)1439
-4442 y(ObsDataLo)s(cation)1772 4541 y(class)2569 4229
-y FA(StcObsDataLo)t(cation)0 4702 y Fc(Description:)44
-b Fk(The)27 b(StcObsDataLo)r(cation)e(class)g(is)i(a)f(sub-class)f(of)h
-(Stc)h(used)f(to)g(describ)r(e)g(the)h(co)r(ordinate)e(space)227
-4801 y(o)r(ccupied)j(b)n(y)f(a)g(particular)g(observ)-5
-b(ational)25 b(dataset.)227 4925 y(See)j(h)n(ttp://hea-www.harv)-5
-b(ard.edu/)p Fj(\030)p Fk(arots/n)n(v)n(o)o(meta/STC.h)n(tml)227
-5048 y(An)29 b(STC)f(ObsDataLo)r(cation)f(elemen)n(t)h(sp)r(eci\014es)g
-(the)h(exten)n(t)f(of)g(the)g(observ)-5 b(ation)27 b(within)i(a)f(sp)r
-(eci\014ed)g(co)r(or-)227 5148 y(dinate)g(system,)f(and)h(also)e(sp)r
-(eci\014es)i(the)g(observ)-5 b(atory)25 b(lo)r(cation)i(within)h(a)g
-(second)e(co)r(ordinate)h(system.)227 5271 y(The)i(AST)g(StcObsDataLo)r
-(cation)f(class)g(inherits)g(from)h(Stc,)g(and)g(therefore)f(an)h
-(StcObsDataLo)r(cation)e(can)227 5370 y(b)r(e)f(used)g(directly)f(as)f
-(an)i(Stc.)36 b(When)26 b(used)g(in)f(this)h(w)n(a)n(y)-7
-b(,)25 b(the)h(StcObsDataLo)r(cation)e(describ)r(es)g(the)i(lo)r
-(cation)227 5470 y(of)i(the)g(observ)-5 b(ation)26 b(\(not)i(the)g
-(observ)-5 b(atory\).)227 5593 y(Ev)n(en)n(tually)e(,)27
-b(this)g(class)g(will)h(ha)n(v)n(e)e(a)h(metho)r(d)h(for)f(returning)g
-(an)g(Stc)h(describing)e(the)i(observ)-5 b(atory)25 b(lo)r(cation.)227
-5693 y(Ho)n(w)n(ev)n(er,)32 b(AST)i(curren)n(tly)e(do)r(es)g(not)h
-(include)g(an)n(y)f(classes)g(of)g(F)-7 b(rame)33 b(for)f(describing)g
-(terrestrial)f(or)h(solar)p eop end
-%%Page: 510 520
-TeXDict begin 510 519 bop 0 52 a FG(510)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)227 351 y Fk(system)h(p)r(ositions.)44
-b(Therefore,)29 b(the)h(pro)n(vision)f(for)g(returning)g(observ)-5
-b(atory)28 b(lo)r(cation)i(as)f(an)h(Stc)g(is)g(not)g(y)n(et)227
-451 y(a)n(v)-5 b(ailable.)34 b(Ho)n(w)n(ev)n(er,)21 b(for)g
-(terrestrial)g(observ)-5 b(ations,)21 b(the)h(p)r(osition)g(of)g(the)g
-(observ)-5 b(atory)19 b(can)j(still)g(b)r(e)g(recorded)227
-551 y(using)33 b(the)g(ObsLon)f(and)g(ObsLat)g(attributes)h(of)g(the)g
-(F)-7 b(rame)32 b(encapsulated)g(within)i(the)f(Stc)g(represen)n(ting)
-227 650 y(the)28 b(observ)-5 b(ation)26 b(lo)r(cation)h(\(this)i
-(assumes)d(the)i(observ)-5 b(atory)25 b(is)j(lo)r(cated)f(at)h(sea)f
-(lev)n(el\).)0 810 y Fc(Constructor)32 b(F)-8 b(unction:)227
-910 y Fk(AST)p Ft(_)p Fk(STCOBSD)n(A)h(T)g(ALOCA)g(TION)-2
-1070 y Fc(Inheritance)n(:)227 1216 y Fk(The)28 b(StcObsDataLo)r(cation)
-e(class)h(inherits)g(from)h(the)g(Stc)g(class.)-2 1376
-y Fc(A)m(ttributes)n(:)227 1522 y Fk(The)i(StcObsDataLo)r(cation)f
-(class)g(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)h(attributes)g(b)r(ey)
-n(ond)g(those)f(whic)n(h)h(are)f(appli-)227 1621 y(cable)e(to)h(all)f
-(Stcs.)-2 1781 y Fc(F)-8 b(unctions)n(:)227 1928 y Fk(The)23
-b(StcObsDataLo)r(cation)f(class)f(do)r(es)i(not)g(de\014ne)g(an)n(y)f
-(new)h(routines)f(b)r(ey)n(ond)g(those)h(whic)n(h)f(are)g(applicable)
-227 2027 y(to)28 b(all)f(Stcs.)p 0 2237 3780 12 v 0 2369
-a FA(StcResourcePro\014le)153 b Fd(Corresp)s(ond)33 b(to)g(the)h(IV)m
-(O)m(A)1377 2483 y(STCResourcePro\014le)1772 2583 y(class)2672
-2369 y FA(StcResourcePro\014le)0 2759 y Fc(Description:)44
-b Fk(The)37 b(StcResourcePro\014le)d(class)h(is)h(a)g(sub-class)e(of)j
-(Stc)f(used)g(to)g(describ)r(e)g(the)h(co)n(v)n(erage)c(of)j(the)227
-2859 y(datasets)27 b(con)n(tained)g(in)h(some)f(V)n(O)g(resource.)227
-2988 y(See)h(h)n(ttp://hea-www.harv)-5 b(ard.edu/)p Fj(\030)p
-Fk(arots/n)n(v)n(o)o(meta/STC.h)n(tml)0 3148 y Fc(Constructor)32
-b(F)-8 b(unction:)227 3248 y Fk(AST)p Ft(_)p Fk(STCRESOUR)n(CEPR)n
-(OFILE)-2 3408 y Fc(Inheritance)n(:)227 3554 y Fk(The)28
-b(StcResourcePro\014le)d(class)i(inherits)g(from)h(the)g(Stc)g(class.)
--2 3714 y Fc(A)m(ttributes)n(:)227 3860 y Fk(The)c
-(StcResourcePro\014le)e(class)h(do)r(es)g(not)h(de\014ne)g(an)n(y)f
-(new)h(attributes)g(b)r(ey)n(ond)f(those)h(whic)n(h)f(are)g(applicable)
-227 3960 y(to)28 b(all)f(Stcs.)-2 4120 y Fc(F)-8 b(unctions)n(:)227
-4266 y Fk(The)29 b(StcResourcePro\014le)e(class)g(do)r(es)i(not)g
-(de\014ne)g(an)n(y)f(new)h(routines)f(b)r(ey)n(ond)g(those)h(whic)n(h)f
-(are)g(applicable)227 4365 y(to)g(all)f(Stcs.)p 0 4575
-V 0 4707 a FA(StcSearc)l(hLo)t(cation)170 b Fd(Corresp)s(ond)37
-b(to)h(the)h(IV)m(O)m(A)1362 4821 y(Searc)m(hLo)s(cation)d(class)2697
-4707 y FA(StcSearc)l(hLo)t(cation)0 4998 y Fc(Description:)44
-b Fk(The)25 b(StcSearc)n(hLo)r(cation)e(class)g(is)i(a)f(sub-class)f
-(of)h(Stc)h(used)g(to)f(describ)r(e)g(the)h(co)n(v)n(erage)d(of)i(a)g
-(query)-7 b(.)227 5127 y(See)28 b(h)n(ttp://hea-www.harv)-5
-b(ard.edu/)p Fj(\030)p Fk(arots/n)n(v)n(o)o(meta/STC.h)n(tml)0
-5287 y Fc(Constructor)32 b(F)-8 b(unction:)227 5387 y
-Fk(AST)p Ft(_)p Fk(STCSEAR)n(CHLOCA)h(TION)-2 5547 y
-Fc(Inheritance)n(:)227 5693 y Fk(The)28 b(StcSearc)n(hLo)r(cation)e
-(class)g(inherits)i(from)f(the)h(Stc)g(class.)p eop end
-%%Page: 511 521
-TeXDict begin 511 520 bop 3643 52 a FG(511)-2 351 y Fc(A)m(ttributes)n
-(:)227 497 y Fk(The)25 b(StcSearc)n(hLo)r(cation)d(class)i(do)r(es)g
-(not)g(de\014ne)g(an)n(y)g(new)g(attributes)h(b)r(ey)n(ond)f(those)g
-(whic)n(h)g(are)f(applicable)227 597 y(to)28 b(all)f(Stcs.)-2
-745 y Fc(F)-8 b(unctions)n(:)227 891 y Fk(The)30 b(StcSearc)n(hLo)r
-(cation)d(class)h(do)r(es)h(not)h(de\014ne)f(an)n(y)g(new)g(routines)g
-(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f(applicable)227
-991 y(to)g(all)f(Stcs.)p 0 1188 3780 12 v 0 1319 a FA(StcsChan)897
-1326 y Fd(I/O)39 b(Channel)f(using)g(STC-S)g(to)h(represen)m(t)1693
-1447 y(Ob)7 b(jects)3228 1319 y FA(StcsChan)0 1638 y
-Fc(Description:)44 b Fk(A)24 b(StcsChan)f(is)h(a)f(sp)r(ecialised)g
-(form)g(of)g(Channel)g(whic)n(h)h(supp)r(orts)f(STC-S)g(I/O)f(op)r
-(erations.)35 b(W)-7 b(rit-)227 1738 y(ing)35 b(an)g(Ob)5
-b(ject)34 b(to)h(an)g(StcsChan)g(\(using)g(AST)p Ft(_)p
-Fk(WRITE\))g(will,)i(if)e(the)h(Ob)5 b(ject)35 b(is)f(suitable,)j
-(generate)d(an)227 1837 y(STC-S)e(description)f(of)h(that)g(Ob)5
-b(ject,)33 b(and)f(reading)f(from)g(an)h(StcsChan)g(will)g(create)f(a)g
-(new)h(Ob)5 b(ject)32 b(from)227 1937 y(its)c(STC-S)g(description.)227
-2061 y(When)37 b(an)e(STC-S)h(description)f(is)h(read)f(using)h(AST)p
-Ft(_)p Fk(READ,)g(the)g(returned)g(AST)g(Ob)5 b(ject)36
-b(ma)n(y)f(b)r(e)h(1\))g(a)227 2160 y(P)n(oin)n(tList)e(describing)g
-(the)h(STC)g(AstroCo)r(ords)e(\(i.e.)59 b(a)34 b(single)g(p)r(oin)n(t)h
-(of)g(in)n(terest)f(within)i(the)f(co)r(ordinate)227
-2260 y(frame)e(describ)r(ed)g(b)n(y)g(the)h(STC-S)f(description\),)i
-(or)d(2\))i(a)f(Region)f(describing)h(the)g(STC)h(AstrCo)r(ordsArea)227
-2360 y(\(i.e.)i(an)21 b(area)f(or)g(v)n(olume)h(of)h(in)n(terest)f
-(within)h(the)g(co)r(ordinate)e(frame)h(describ)r(ed)g(b)n(y)h(the)f
-(STC-S)h(description\),)227 2459 y(or)d(3\))g(a)f(KeyMap)h(con)n
-(taining)f(the)h(unin)n(terpreted)g(prop)r(ert)n(y)f(v)-5
-b(alues)19 b(read)g(form)f(the)i(STC-S)f(description,)h(or)f(4\))227
-2559 y(a)26 b(KeyMap)f(con)n(taining)g(an)n(y)g(com)n(bination)g(of)h
-(the)h(\014rst)f(3)f(options.)36 b(The)26 b(attributes)g(StcsArea,)g
-(StcsCo)r(ords)227 2659 y(and)i(StcsProps)e(con)n(trol)g(whic)n(h)i(of)
-f(the)h(ab)r(o)n(v)n(e)e(is)i(returned)f(b)n(y)g(AST)p
-Ft(_)p Fk(READ.)227 2782 y(When)h(an)e(STC-S)h(description)f(is)g
-(created)g(from)h(an)f(AST)h(Ob)5 b(ject)27 b(using)f(AST)p
-Ft(_)p Fk(WRITE,)h(the)g(AST)g(Ob)5 b(ject)227 2882 y(m)n(ust)21
-b(b)r(e)g(either)g(a)f(Region)g(or)g(a)h(KeyMap.)33 b(If)22
-b(it)f(is)g(a)f(Region,)h(it)h(is)e(assumed)g(to)h(de\014ne)g(the)g
-(AstroCo)r(ordsArea)227 2982 y(or)g(\(if)i(the)g(Region)e(is)h(a)g
-(single)f(p)r(oin)n(t\))i(the)f(AstroCo)r(ords)e(to)i(write)g(to)g(the)
-g(STC-S)g(description.)35 b(If)22 b(the)h(Ob)5 b(ject)227
-3081 y(is)24 b(a)f(KeyMap,)h(it)g(ma)n(y)f(con)n(tain)h(an)f(en)n(try)g
-(with)i(the)f(k)n(ey)f Ft(")p Fk(AREA)p Ft(")p Fk(,)h(holding)f(a)h
-(Region)f(to)h(b)r(e)g(used)g(to)f(de\014ne)227 3181
-y(the)i(AstroCo)r(ordsArea.)34 b(It)25 b(ma)n(y)f(also)g(con)n(tain)g
-(an)g(en)n(try)h(with)g(the)g(k)n(ey)f Ft(")p Fk(COORDS)p
-Ft(")p Fk(,)h(holding)f(a)h(Region)f(\(a)227 3281 y(P)n(oin)n(tList\))g
-(to)g(b)r(e)h(used)g(to)f(create)g(the)h(AstroCo)r(ords.)34
-b(It)25 b(ma)n(y)e(also)h(con)n(tain)g(an)g(en)n(try)g(with)h(k)n(ey)f
-Ft(")p Fk(PR)n(OPS)p Ft(")p Fk(,)227 3380 y(holding)d(a)f(KeyMap)g
-(that)h(con)n(tains)f(unin)n(terpreted)g(prop)r(ert)n(y)g(v)-5
-b(alues)21 b(to)f(b)r(e)h(used)g(as)f(defaults)h(for)g(an)n(y)f(STC-S)
-227 3480 y(prop)r(erties)k(that)g(are)f(not)h(determined)h(b)n(y)f(the)
-g(other)g(supplied)g(Regions.)35 b(In)24 b(addition,)h(a)f(KeyMap)f
-(supplied)227 3579 y(to)29 b(AST)p Ft(_)p Fk(WRITE)f(ma)n(y)g(itself)h
-(hold)f(the)h(default)g(STC-S)f(prop)r(erties)g(\(rather)g(than)g
-(defaults)h(b)r(eing)g(held)f(in)227 3679 y(a)f(secondary)f(KeyMap,)h
-(stored)g(as)g(the)h Ft(")p Fk(PR)n(OPS)p Ft(")d Fk(en)n(try)i(in)h
-(the)g(supplied)g(KeyMap\).)227 3803 y(The)43 b(AST)p
-Ft(_)p Fk(READ)g(and)f(AST)p Ft(_)p Fk(WRITE)g(functions)h(w)n(ork)e
-(together)g(so)h(that)h(an)n(y)f(Ob)5 b(ject)42 b(returned)g(b)n(y)227
-3903 y(AST)p Ft(_)p Fk(READ)28 b(can)f(immediately)h(b)r(e)g
-(re-written)f(using)g(AST)p Ft(_)p Fk(WRITE.)227 4026
-y(Normally)-7 b(,)40 b(when)e(y)n(ou)f(use)h(an)f(StcsChan,)k(y)n(ou)c
-(should)g(pro)n(vide)g Ft(")p Fk(source)p Ft(")f Fk(and)i
-Ft(")p Fk(sink)p Ft(")e Fk(routines)i(whic)n(h)227 4126
-y(connect)f(it)g(to)f(an)h(external)f(data)g(store)g(b)n(y)g(reading)f
-(and)i(writing)f(the)h(resulting)f(text.)65 b(These)36
-b(routines)227 4226 y(should)k(p)r(erform)f(an)n(y)h(con)n(v)n(ersions)
-d(needed)j(b)r(et)n(w)n(een)g(external)f(c)n(haracter)f(enco)r(dings)h
-(and)h(the)g(in)n(ternal)227 4325 y(ASCI)r(I)33 b(enco)r(ding.)51
-b(If)33 b(no)f(suc)n(h)g(routines)g(are)g(supplied,)i(a)e(Channel)g
-(will)h(read)e(from)h(standard)g(input)h(and)227 4425
-y(write)28 b(to)f(standard)g(output.)227 4549 y(Supp)r(ort)36
-b(for)f(STC-S)g(is)g(curren)n(tly)g(based)g(on)g(the)g(IV)n(O)n(A)g(do)
-r(cumen)n(t)h Ft(")p Fk(STC-S:)f(Space-Time)g(Co)r(ordinate)227
-4648 y(\(STC\))22 b(Metadata)d(Linear)h(String)g(Implemen)n(tation)p
-Ft(")p Fk(,)i(v)n(ersion)d(1.30)g(\(dated)i(5th)g(Decem)n(b)r(er)f
-(2007\),)h(a)n(v)-5 b(ailable)227 4748 y(at)21 b(h)n(ttp://www.iv)n
-(oa.net/Do)r(cumen)n(ts/latest/STC-S.h)n(tml.)32 b(Note,)23
-b(this)e(do)r(cumen)n(t)h(is)f(a)g(recommednation)227
-4848 y(only)27 b(and)h(do)r(es)f(not)h(constitute)g(an)f(accepted)g(IV)
-n(O)n(A)g(standard.)227 4972 y(The)f(full)h(text)f(of)g(v)n(ersion)e
-(1.30)g(is)i(supp)r(orted)g(b)n(y)f(the)h(StcsChan)g(class,)f(with)i
-(the)f(follo)n(wing)f(exceptions)g(and)227 5071 y(pro)n(visos:)340
-5330 y Fj(\017)45 b Fk(When)28 b(reading)f(an)g(STC-S)h(phrase,)e(case)
-h(is)h(ignored)e(except)i(when)f(reading)g(units)h(strings.)340
-5462 y Fj(\017)45 b Fk(There)31 b(is)g(no)h(supp)r(ort)f(for)g(m)n
-(ultiple)h(in)n(terv)-5 b(als)30 b(sp)r(eci\014ed)i(within)g(a)f
-(TimeIn)n(terv)-5 b(al,)32 b(P)n(ositionIn)n(terv)-5
-b(al,)427 5561 y(Sp)r(ectralIn)n(terv)g(al)27 b(or)g(RedshiftIn)n(terv)
--5 b(al.)340 5693 y Fj(\017)45 b Fk(If)28 b(the)g(ET)f(timescale)h(is)f
-(sp)r(eci\014ed,)h(TT)g(is)f(used)h(instead.)p eop end
-%%Page: 512 522
-TeXDict begin 512 521 bop 0 52 a FG(512)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(If)28 b(the)g(TEB)f(timescale)g(is)h(sp)r(eci\014ed,)g(TDB)g(is)f
-(used)h(instead.)340 484 y Fj(\017)45 b Fk(The)28 b(LOCAL)f(timescale)g
-(is)h(not)f(supp)r(orted.)340 617 y Fj(\017)45 b Fk(The)26
-b(AST)g(TimeF)-7 b(rame)25 b(and)h(SkyF)-7 b(rame)25
-b(classes)f(do)h(not)h(curren)n(tly)f(allo)n(w)f(a)h(reference)g(p)r
-(osition)h(to)f(b)r(e)427 717 y(sp)r(eci\014ed.)45 b(Consequen)n(tly)-7
-b(,)30 b(an)n(y)f Fm(<)p Fk(refp)r(os)p Fm(>)g Fk(sp)r(eci\014ed)h
-(within)h(the)f(Time)g(or)g(Space)f(sub-phrase)g(of)h(an)427
-817 y(STC-S)e(do)r(cumen)n(t)g(is)f(ignored.)340 950
-y Fj(\017)45 b Fk(The)28 b(Con)n(v)n(ex)e(iden)n(ti\014er)i(for)f(the)h
-(space)e(sub-phrase)h(is)g(not)h(supp)r(orted.)340 1083
-y Fj(\017)45 b Fk(The)28 b(GEO)p Ft(_)p Fk(C)e(and)i(GEO)p
-Ft(_)p Fk(D)f(space)g(frames)f(are)h(not)h(supp)r(orted.)340
-1216 y Fj(\017)45 b Fk(The)28 b(UNITSPHERE)f(and)h(SPHER3)e(space)h
-(\015a)n(v)n(ours)e(are)i(not)h(supp)r(orted.)340 1349
-y Fj(\017)45 b Fk(If)33 b(an)n(y)f(Error)d(v)-5 b(alues)32
-b(are)g(supplied)g(in)h(a)f(space)f(sub-phrase,)i(then)f(the)h(n)n(um)n
-(b)r(er)f(of)g(v)-5 b(alues)32 b(supplied)427 1448 y(should)c(equal)f
-(the)i(n)n(um)n(b)r(er)f(of)g(spatial)f(axes,)g(and)h(the)g(v)-5
-b(alues)28 b(are)f(assumed)g(to)h(sp)r(ecify)g(an)g(error)e(b)r(o)n(x)
-427 1548 y(\(i.e.)38 b(error)25 b(circles,)i(ellipses,)g(etc,)h(are)f
-(not)g(supp)r(orted\).)340 1681 y Fj(\017)45 b Fk(The)35
-b(sp)r(ectral)g(and)f(redshift)h(sub-phrases)f(do)g(not)h(supp)r(ort)g
-(the)g(follo)n(wing)f Fm(<)p Fk(refp)r(os)p Fm(>)f Fk(v)-5
-b(alues:)51 b(LO-)427 1781 y(CAL)p Ft(_)p Fk(GR)n(OUP)p
-Ft(_)p Fk(CENTER,)41 b(UNKNO)n(WNRefP)n(os,)46 b(EMBAR)-7
-b(YCENTER,)42 b(MOON,)g(MER)n(CUR)-7 b(Y,)427 1880 y(VENUS,)28
-b(MARS,)h(JUPITER,)d(SA)-7 b(TURN,)29 b(URANUS,)g(NEPTUNE,)e(PLUTO.)340
-2013 y Fj(\017)45 b Fk(Error)26 b(v)-5 b(alues)27 b(are)f(supp)r(orted)
-i(but)g(error)e(ranges)g(are)g(not.)340 2146 y Fj(\017)45
-b Fk(Resolution,)27 b(PixSize)g(and)h(Size)g(v)-5 b(alues)27
-b(are)f(ignored.)340 2280 y Fj(\017)45 b Fk(Space)28
-b(v)n(elo)r(cit)n(y)e(sub-phrases)g(are)h(ignored.)0
-2442 y Fc(Constructor)32 b(F)-8 b(unction:)227 2541 y
-Fk(AST)p Ft(_)p Fk(STCSCHAN)-2 2691 y Fc(Inheritance)n(:)227
-2837 y Fk(The)28 b(StcsChan)f(class)g(inherits)h(from)f(the)h(Channel)f
-(class.)-2 2987 y Fc(A)m(ttributes)n(:)227 3133 y Fk(In)36
-b(addition)g(to)g(those)f(attributes)h(common)f(to)h(all)g(Channels,)h
-(ev)n(ery)e(StcsChan)g(also)g(has)g(the)i(follo)n(wing)227
-3233 y(attributes:)340 3495 y Fj(\017)45 b Fk(StcsArea:)36
-b(Return)28 b(the)g(Co)r(ordinateArea)e(comp)r(onen)n(t)h(after)g
-(reading)g(an)g(STC-S?)340 3628 y Fj(\017)45 b Fk(StcsCo)r(ords:)36
-b(Return)28 b(the)g(Co)r(ordinates)e(comp)r(onen)n(t)h(after)h(reading)
-e(an)h(STC-S?)340 3761 y Fj(\017)45 b Fk(StcsInden)n(t:)38
-b(Con)n(trols)26 b(output)i(of)f(inden)n(tation)h(and)f(line)h(feeds)
-340 3894 y Fj(\017)45 b Fk(StcsLength:)37 b(Con)n(trols)26
-b(output)i(bu\013er)g(length)340 4027 y Fj(\017)45 b
-Fk(StcsProps:)36 b(Return)27 b(the)h(STC-S)g(prop)r(erties)f(after)g
-(reading)f(an)i(STC-S?)-2 4189 y Fc(F)-8 b(unctions)n(:)227
-4335 y Fk(The)37 b(StcsChan)f(class)g(do)r(es)g(not)g(de\014ne)h(an)n
-(y)f(new)g(routines)g(b)r(ey)n(ond)g(those)h(whic)n(h)f(are)g
-(applicable)g(to)g(all)227 4435 y(Channels.)p 0 4635
-3780 12 v 0 4766 a FA(Switc)l(hMap)268 b Fd(A)39 b(Mapping)f(that)f
-(encapsulates)h(a)h(set)f(of)1394 4881 y(alternate)e(Mappings)3120
-4766 y FA(Switc)l(hMap)0 5070 y Fc(Description:)44 b
-Fk(A)31 b(Switc)n(hMap)f(is)g(a)f(Mapping)h(whic)n(h)g(represen)n(ts)e
-(a)i(set)g(of)g(alternate)f(Mappings,)h(eac)n(h)g(of)g(whic)n(h)227
-5170 y(is)e(used)f(to)g(transform)g(p)r(ositions)g(within)h(a)f
-(particular)f(region)g(of)i(the)g(input)g(or)f(output)h(co)r(ordinate)e
-(system)227 5269 y(of)i(the)g(Switc)n(hMap.)227 5394
-y(A)34 b(Switc)n(hMap)e(can)h(encapsulate)f(an)n(y)g(n)n(um)n(b)r(er)h
-(of)g(Mappings,)h(but)f(they)h(m)n(ust)f(all)f(ha)n(v)n(e)g(the)h(same)
-g(n)n(um-)227 5494 y(b)r(er)d(of)g(inputs)h(\(Nin)f(attribute)g(v)-5
-b(alue\))31 b(and)e(the)i(same)e(n)n(um)n(b)r(er)h(of)g(outputs)g
-(\(Nout)g(attribute)g(v)-5 b(alue\).)45 b(The)227 5593
-y(Switc)n(hMap)20 b(itself)h(inherits)f(these)g(same)g(v)-5
-b(alues)20 b(for)f(its)i(Nin)f(and)g(Nout)h(attributes.)34
-b(Eac)n(h)19 b(of)h(these)g(Mappings)227 5693 y(represen)n(ts)33
-b(a)h Ft(")p Fk(route)p Ft(")f Fk(through)h(the)g(switc)n(h,)i(and)e
-(are)g(referred)f(to)h(as)g Ft(")p Fk(route)p Ft(")e
-Fk(Mappings)i(b)r(elo)n(w.)57 b(Eac)n(h)p eop end
-%%Page: 513 523
-TeXDict begin 513 522 bop 3643 52 a FG(513)227 351 y
-Fk(route)30 b(Mapping)f(transforms)g(p)r(ositions)h(b)r(et)n(w)n(een)g
-(the)g(input)h(and)f(output)g(co)r(ordinate)f(space)h(of)g(the)g(en)n
-(tire)227 451 y(Switc)n(hMap,)f(but)h(only)e(one)h(Mapping)f(will)h(b)r
-(e)h(used)e(to)h(transform)f(an)n(y)g(giv)n(en)g(p)r(osition.)40
-b(The)29 b(selection)g(of)227 551 y(the)e(appropriate)e(route)h
-(Mapping)g(to)g(use)g(with)h(an)n(y)f(giv)n(en)f(input)j(p)r(osition)e
-(is)g(made)g(b)n(y)g(another)g(Mapping,)227 650 y(called)31
-b(the)h Ft(")p Fk(selector)p Ft(")e Fk(Mapping.)48 b(Eac)n(h)30
-b(Switc)n(hMap)i(encapsulates)e(t)n(w)n(o)h(selector)f(Mappings)h(in)h
-(addition)227 750 y(to)d(its)g(route)f(Mappings;)h(one)g(for)f(use)h
-(with)g(the)g(Switc)n(hMap's)g(forw)n(ard)e(transformation)g(\(called)i
-(the)g Ft(")p Fk(for-)227 849 y(w)n(ard)24 b(selector)g(Mapping)p
-Ft(")p Fk(\),)i(and)f(one)g(for)f(use)h(with)h(the)g(Switc)n(hMap's)f
-(in)n(v)n(erse)f(transformation)f(\(called)i(the)227
-949 y Ft(")p Fk(in)n(v)n(erse)f(selector)h(Mapping)p
-Ft(")p Fk(\).)36 b(The)26 b(forw)n(ard)f(selector)g(Mapping)g(m)n(ust)h
-(ha)n(v)n(e)f(the)i(same)e(n)n(um)n(b)r(er)h(of)g(inputs)227
-1049 y(as)k(the)h(route)e(Mappings,)i(but)g(should)f(ha)n(v)n(e)f(only)
-h(one)g(output.)45 b(Lik)n(ewise,)30 b(the)h(in)n(v)n(erse)e(selector)g
-(Mapping)227 1148 y(m)n(ust)f(ha)n(v)n(e)e(the)i(same)f(n)n(um)n(b)r
-(er)h(of)f(outputs)h(as)f(the)h(route)f(Mappings,)g(but)h(should)g(ha)n
-(v)n(e)e(only)h(one)h(input.)227 1279 y(When)40 b(the)g(Switc)n(hMap)f
-(is)h(used)f(to)g(transform)g(a)g(p)r(osition)g(in)h(the)f(forw)n(ard)f
-(direction)h(\(from)h(input)g(to)227 1379 y(output\),)g(eac)n(h)35
-b(supplied)h(input)h(p)r(osition)f(is)h(\014rst)e(transformed)h(b)n(y)f
-(the)i(forw)n(ard)e(transformation)f(of)i(the)227 1478
-y(forw)n(ard)27 b(selector)g(Mapping.)38 b(This)28 b(pro)r(duces)f(a)h
-(single)f(output)i(v)-5 b(alue)28 b(for)g(eac)n(h)f(input)i(p)r
-(osition)f(referred)f(to)227 1578 y(as)j(the)h(selector)e(v)-5
-b(alue.)45 b(The)30 b(nearest)f(in)n(teger)h(to)g(the)g(selector)g(v)-5
-b(alue)30 b(is)g(found,)h(and)f(is)g(used)h(to)f(index)g(the)227
-1678 y(arra)n(y)25 b(of)i(route)f(Mappings)g(\(the)i(\014rst)f
-(supplied)g(route)f(Mapping)h(has)f(index)h(1,)g(the)g(second)g(route)f
-(Mapping)227 1777 y(has)34 b(index)h(2,)h(etc\).)59 b(If)35
-b(the)g(nearest)f(in)n(teger)g(to)g(the)h(selector)f(v)-5
-b(alue)35 b(is)f(less)h(than)f(1)h(or)e(greater)g(than)i(the)227
-1877 y(n)n(um)n(b)r(er)c(of)f(route)g(Mappings,)h(then)h(the)f(Switc)n
-(hMap)f(output)i(p)r(osition)e(is)h(set)f(to)h(a)f(v)-5
-b(alue)31 b(of)g(AST)p Ft(__)p Fk(BAD)227 1976 y(on)k(ev)n(ery)g(axis.)
-59 b(Otherwise,)37 b(the)f(forw)n(ard)e(transformation)f(of)j(the)g
-(selected)f(route)g(Mapping)g(is)g(used)h(to)227 2076
-y(transform)27 b(the)h(supplied)g(input)g(p)r(osition)f(to)h(pro)r
-(duce)f(the)h(Switc)n(hMap)g(output)g(p)r(osition.)227
-2207 y(When)33 b(the)g(Switc)n(hMap)f(is)g(used)g(to)g(transform)f(a)h
-(p)r(osition)g(in)h(the)f(in)n(v)n(erse)f(direction)h(\(from)g
-Ft(")p Fk(output)p Ft(")g Fk(to)227 2306 y Ft(")p Fk(input)p
-Ft(")p Fk(\),)26 b(eac)n(h)f(supplied)g Ft(")p Fk(output)p
-Ft(")g Fk(p)r(osition)g(is)g(\014rst)g(transformed)f(b)n(y)h(the)h(in)n
-(v)n(erse)e(transformation)f(of)i(the)227 2406 y(in)n(v)n(erse)31
-b(selector)f(Mapping.)49 b(This)32 b(pro)r(duces)f(a)g(selector)g(v)-5
-b(alue)31 b(for)g(eac)n(h)g Ft(")p Fk(output)p Ft(")h
-Fk(p)r(osition.)49 b(Again,)32 b(the)227 2506 y(nearest)g(in)n(teger)f
-(to)i(the)g(selector)e(v)-5 b(alue)32 b(is)h(found,)h(and)e(is)g(used)h
-(to)f(index)h(the)g(arra)n(y)d(of)i(route)g(Mappings.)227
-2605 y(If)f(this)f(selector)g(index)g(v)-5 b(alue)30
-b(is)g(within)h(the)g(b)r(ounds)f(of)g(the)h(arra)n(y)d(of)i(route)f
-(Mappings,)i(then)f(the)h(in)n(v)n(erse)227 2705 y(transformation)26
-b(of)i(the)g(selected)f(route)g(Mapping)g(is)g(used)h(to)f(transform)g
-(the)h(supplied)g Ft(")p Fk(output)p Ft(")f Fk(p)r(osition)227
-2805 y(to)32 b(pro)r(duce)f(the)h(Switc)n(hMap)f Ft(")p
-Fk(input)p Ft(")h Fk(p)r(osition.)49 b(If)32 b(the)g(selector)e(index)i
-(v)-5 b(alue)31 b(is)h(outside)f(the)h(b)r(ounds)g(of)227
-2904 y(the)25 b(arra)n(y)e(of)h(route)g(Mappings,)h(then)g(the)g(Switc)
-n(hMap)g Ft(")p Fk(input)p Ft(")f Fk(p)r(osition)h(is)f(set)h(to)f(a)g
-(v)-5 b(alue)25 b(of)g(AST)p Ft(__)p Fk(BAD)227 3004
-y(on)j(ev)n(ery)e(axis.)227 3135 y(In)f(practice,)f(appropriate)e
-(selector)h(Mappings)g(should)h(b)r(e)h(c)n(hosen)e(to)h(asso)r(ciate)f
-(a)g(di\013eren)n(t)h(route)g(Mapping)227 3234 y(with)30
-b(eac)n(h)e(region)g(of)h(co)r(ordinate)f(space.)41 b(Note)30
-b(that)f(the)h(SelectorMap)e(class)g(of)h(Mapping)g(is)g(particularly)
-227 3334 y(appropriate)d(for)h(this)h(purp)r(ose.)227
-3465 y(If)38 b(a)f(comp)r(ound)g(Mapping)g(con)n(tains)f(a)h(Switc)n
-(hMap)g(in)g(series)f(with)i(its)f(o)n(wn)g(in)n(v)n(erse,)h(the)f(com)
-n(bination)227 3564 y(of)31 b(the)h(t)n(w)n(o)f(adjacen)n(t)f(Switc)n
-(hMaps)h(will)h(b)r(e)f(replaced)g(b)n(y)g(a)g(UnitMap)g(when)h(the)g
-(comp)r(ound)f(Mapping)g(is)227 3664 y(simpli\014ed)d(using)g(AST)p
-Ft(_)p Fk(SIMPLIFY.)0 3826 y Fc(Constructor)k(F)-8 b(unction:)227
-3925 y Fk(AST)p Ft(_)p Fk(SWITCHMAP)-2 4087 y Fc(Inheritance)n(:)227
-4233 y Fk(The)28 b(Switc)n(hMap)f(class)g(inherits)h(from)f(the)h
-(Mapping)f(class.)-2 4395 y Fc(A)m(ttributes)n(:)227
-4541 y Fk(The)h(Switc)n(hMap)g(class)f(do)r(es)h(not)g(de\014ne)g(an)n
-(y)f(new)h(attributes)g(b)r(ey)n(ond)f(those)h(whic)n(h)g(are)f
-(applicable)g(to)h(all)227 4641 y(Mappings.)-2 4803 y
-Fc(F)-8 b(unctions)n(:)227 4949 y Fk(The)33 b(Switc)n(hMap)f(class)f
-(do)r(es)h(not)g(de\014ne)h(an)n(y)e(new)h(routines)g(b)r(ey)n(ond)g
-(those)g(whic)n(h)g(are)f(applicable)h(to)g(all)227 5049
-y(Mappings.)p 0 5260 3780 12 v 0 5392 a FA(TimeF)-11
-b(rame)304 b Fd(Time)38 b(co)s(ordinate)e(system)j(description)301
-b FA(TimeF)-11 b(rame)0 5593 y Fc(Description:)44 b Fk(A)37
-b(TimeF)-7 b(rame)35 b(is)h(a)f(sp)r(ecialised)h(form)f(of)h
-(one-dimensional)e(F)-7 b(rame)36 b(whic)n(h)f(represen)n(ts)g(v)-5
-b(arious)227 5693 y(co)r(ordinate)27 b(systems)g(used)g(to)h(describ)r
-(e)f(p)r(ositions)g(in)h(time.)p eop end
-%%Page: 514 524
-TeXDict begin 514 523 bop 0 52 a FG(514)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)227 351 y Fk(A)23 b(TimeF)-7
-b(rame)21 b(represen)n(ts)g(a)g(momen)n(t)h(in)g(time)h(as)e(either)h
-(an)f(Mo)r(di\014ed)i(Julian)e(Date)h(\(MJD\),)h(a)f(Julian)f(Date)227
-451 y(\(JD\),)f(a)f(Besselian)e(ep)r(o)r(c)n(h)i(or)f(a)h(Julian)g(ep)r
-(o)r(c)n(h,)h(as)f(determined)g(b)n(y)f(the)i(System)f(attribute.)34
-b(Optionally)-7 b(,)20 b(a)f(zero)227 551 y(p)r(oin)n(t)30
-b(can)g(b)r(e)g(sp)r(eci\014ed)h(\(using)e(attribute)i(TimeOrigin\))e
-(whic)n(h)h(results)f(in)h(the)h(TimeF)-7 b(rame)29 b(represen)n(ting)
-227 650 y(time)f(o\013sets)g(from)f(the)h(sp)r(eci\014ed)g(zero)e(p)r
-(oin)n(t.)227 772 y(Ev)n(en)g(though)g(JD)g(and)g(MJD)g(are)g
-(de\014ned)g(as)g(b)r(eing)g(in)g(units)h(of)f(da)n(ys,)g(the)g(TimeF)
--7 b(rame)26 b(class)f(allo)n(ws)g(other)227 872 y(units)31
-b(to)g(b)r(e)g(used)f(\(via)h(the)g(Unit)g(attribute\))g(on)f(the)h
-(basis)f(of)h(simple)g(scalings)e(\(60)h(seconds)g(=)g(1)g(min)n(ute,)
-227 971 y(60)i(min)n(utes)h(=)f(1)h(hour,)g(24)f(hours)g(=)g(1)g(da)n
-(y)-7 b(,)33 b(365.25)e(da)n(ys)h(=)g(1)g(y)n(ear\).)51
-b(Lik)n(ewise,)33 b(Julian)g(ep)r(o)r(c)n(hs)f(can)g(b)r(e)227
-1071 y(describ)r(ed)f(in)f(units)h(other)f(than)h(the)g(usual)f(y)n
-(ears.)44 b(Besselian)29 b(ep)r(o)r(c)n(h)i(are)e(alw)n(a)n(ys)g
-(represen)n(ted)g(in)i(units)g(of)227 1171 y(\(tropical\))c(y)n(ears.)
-227 1293 y(The)33 b(TimeScale)e(attribute)i(allo)n(ws)e(the)h(time)h
-(scale)e(to)h(b)r(e)h(sp)r(eci\014ed)g(\(that)f(is,)i(the)e(ph)n
-(ysical)g(pro)r(cess)f(used)227 1392 y(to)e(de\014ne)g(the)g(rate)f(of)
-g(\015o)n(w)g(of)h(time\).)41 b(MJD,)29 b(JD)g(and)f(Julian)g(ep)r(o)r
-(c)n(h)h(can)f(b)r(e)h(used)g(to)f(represen)n(t)g(a)g(time)h(in)227
-1492 y(an)n(y)d(supp)r(orted)h(time)g(scale.)36 b(Ho)n(w)n(ev)n(er,)25
-b(Besselian)h(ep)r(o)r(c)n(h)g(ma)n(y)g(only)h(b)r(e)g(used)g(with)g
-(the)g Ft(")p Fk(TT)p Ft(")f Fk(\(T)-7 b(errestrial)227
-1592 y(Time\))39 b(time)g(scale.)70 b(The)38 b(list)h(of)g(supp)r
-(orted)f(time)h(scales)f(includes)h(univ)n(ersal)e(time)i(and)f
-(siderial)g(time.)227 1691 y(Strictly)-7 b(,)30 b(these)g(represen)n(t)
-e(angles)g(rather)g(than)i(time)f(scales,)g(but)h(are)e(included)i(in)g
-(the)f(list)h(since)f(they)h(are)227 1791 y(in)e(common)f(use)h(and)f
-(are)g(often)h(though)n(t)f(of)g(as)g(time)h(scales.)227
-1913 y(When)h(a)e(time)h(v)-5 b(alue)28 b(is)f(formatted)h(it)g(can)f
-(b)r(e)h(formated)g(either)f(as)g(a)h(simple)g(\015oating)e(p)r(oin)n
-(t)i(v)-5 b(alue,)28 b(or)f(as)g(a)227 2012 y(Gregorian)f(date)h(\(see)
-h(the)g(F)-7 b(ormat)27 b(attribute\).)0 2157 y Fc(Constructor)32
-b(F)-8 b(unction:)227 2256 y Fk(AST)p Ft(_)p Fk(TIMEFRAME)-2
-2401 y Fc(Inheritance)n(:)227 2547 y Fk(The)28 b(TimeF)-7
-b(rame)27 b(class)g(inherits)g(from)g(the)h(F)-7 b(rame)28
-b(class.)-2 2691 y Fc(A)m(ttributes)n(:)227 2837 y Fk(In)36
-b(addition)g(to)f(those)h(attributes)f(common)g(to)h(all)f(F)-7
-b(rames,)37 b(ev)n(ery)e(TimeF)-7 b(rame)35 b(also)f(has)i(the)g(follo)
-n(wing)227 2937 y(attributes:)340 3190 y Fj(\017)45 b
-Fk(AlignTimeScale:)37 b(Time)28 b(scale)e(in)i(whic)n(h)g(to)f(align)g
-(TimeF)-7 b(rames)340 3318 y Fj(\017)45 b Fk(L)-7 b(TO\013set:)37
-b(The)28 b(o\013set)f(of)h(Lo)r(cal)f(Time)g(from)h(UTC,)g(in)g(hours.)
-340 3446 y Fj(\017)45 b Fk(TimeOrigin:)36 b(The)28 b(zero)e(p)r(oin)n
-(t)i(for)f(TimeF)-7 b(rame)27 b(axis)g(v)-5 b(alues)340
-3574 y Fj(\017)45 b Fk(TimeScale:)37 b(The)27 b(timescale)h(used)f(b)n
-(y)h(the)g(TimeF)-7 b(rame)227 3731 y(Sev)n(eral)33 b(of)i(the)g(F)-7
-b(rame)34 b(attributes)h(inherited)f(b)n(y)h(the)g(TimeF)-7
-b(rame)34 b(class)g(refer)f(to)i(a)f(sp)r(eci\014c)h(axis)f(of)g(the)
-227 3830 y(F)-7 b(rame)30 b(\(for)g(instance)g(Unit\(axis\),)h(Lab)r
-(el\(axis\),)g(etc\).)45 b(Since)30 b(a)g(TimeF)-7 b(rame)30
-b(is)g(strictly)g(one-dimensional,)227 3930 y(it)f(allo)n(ws)e(these)h
-(attributes)g(to)g(b)r(e)g(sp)r(eci\014ed)g(without)h(an)f(axis)f
-(index.)39 b(So)27 b(for)h(instance,)g Ft(")p Fk(Unit)p
-Ft(")g Fk(is)g(allo)n(w)n(ed)227 4029 y(in)g(place)f(of)h
-Ft(")p Fk(Unit\(1\))p Ft(")p Fk(.)-2 4174 y Fc(F)-8 b(unctions)n(:)227
-4320 y Fk(In)30 b(addition)f(to)h(those)f(routines)g(applicable)g(to)g
-(all)g(F)-7 b(rames,)29 b(the)h(follo)n(wing)f(routines)g(ma)n(y)f
-(also)h(b)r(e)h(applied)227 4420 y(to)e(all)f(TimeF)-7
-b(rames:)340 4673 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(CURRENTTIME:)28
-b(Return)f(the)h(curren)n(t)f(system)g(time)p 0 4862
-3780 12 v 0 4994 a FA(TimeMap)290 b Fd(Sequence)39 b(of)f(time)g(co)s
-(ordinate)e(con)m(v)m(ersions)288 b FA(TimeMap)0 5172
-y Fc(Description:)44 b Fk(A)22 b(TimeMap)e(is)h(a)f(sp)r(ecialised)h
-(form)f(of)h(1-dimensional)e(Mapping)i(whic)n(h)g(can)f(b)r(e)h(used)g
-(to)g(represen)n(t)227 5272 y(a)27 b(sequence)h(of)f(con)n(v)n(ersions)
-e(b)r(et)n(w)n(een)j(standard)e(time)i(co)r(ordinate)f(systems.)227
-5394 y(When)19 b(a)f(TimeMap)g(is)h(\014rst)f(created,)h(it)g(simply)g
-(p)r(erforms)e(a)h(unit)h(\(n)n(ull\))g(Mapping.)34 b(Using)18
-b(the)h(AST)p Ft(_)p Fk(TIMEADD)227 5494 y(routine,)35
-b(a)e(series)f(of)h(co)r(ordinate)f(con)n(v)n(ersion)f(steps)i(ma)n(y)g
-(then)h(b)r(e)g(added.)54 b(This)33 b(allo)n(ws)f(m)n(ulti-step)h(con-)
-227 5593 y(v)n(ersions)i(b)r(et)n(w)n(een)h(a)g(v)-5
-b(ariet)n(y)35 b(of)h(time)h(co)r(ordinate)e(systems)g(to)h(b)r(e)h
-(assem)n(bled)e(out)h(of)g(a)g(set)g(of)g(building)227
-5693 y(blo)r(c)n(ks.)p eop end
-%%Page: 515 525
-TeXDict begin 515 524 bop 3643 52 a FG(515)227 351 y
-Fk(F)-7 b(or)18 b(details)g(of)g(the)h(individual)g(co)r(ordinate)e
-(con)n(v)n(ersions)f(a)n(v)-5 b(ailable,)19 b(see)f(the)h(description)e
-(of)i(the)f(AST)p Ft(_)p Fk(TIMEADD)227 451 y(routine.)0
-610 y Fc(Constructor)32 b(F)-8 b(unction:)227 710 y Fk(AST)p
-Ft(_)p Fk(TIMEMAP)27 b(\(also)g(see)g(AST)p Ft(_)p Fk(TIMEADD\))-2
-870 y Fc(Inheritance)n(:)227 1016 y Fk(The)h(TimeMap)f(class)g
-(inherits)h(from)f(the)h(Mapping)f(class.)-2 1175 y Fc(A)m(ttributes)n
-(:)227 1321 y Fk(The)32 b(TimeMap)f(class)g(do)r(es)g(not)g(de\014ne)h
-(an)n(y)f(new)g(attributes)h(b)r(ey)n(ond)f(those)g(whic)n(h)g(are)g
-(applicable)g(to)g(all)227 1421 y(Mappings.)-2 1580 y
-Fc(F)-8 b(unctions)n(:)227 1727 y Fk(In)26 b(addition)f(to)h(those)f
-(routines)g(applicable)f(to)i(all)f(Mappings,)g(the)h(follo)n(wing)f
-(routine)g(ma)n(y)f(also)h(b)r(e)h(applied)227 1826 y(to)i(all)f
-(TimeMaps:)340 2102 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(TIMEADD:)29
-b(Add)f(a)f(time)h(co)r(ordinate)e(con)n(v)n(ersion)g(to)h(an)h
-(TimeMap)p 0 2312 3780 12 v 0 2442 a FA(T)-11 b(ranMap)772
-2443 y Fd(Mapping)38 b(with)g(sp)s(eci\014ed)h(forw)m(ard)d(and)j(in)m
-(v)m(erse)1488 2558 y(transformations)3234 2442 y FA(T)-11
-b(ranMap)0 2734 y Fc(Description:)44 b Fk(A)27 b(T)-7
-b(ranMap)25 b(is)h(a)f(Mapping)h(whic)n(h)g(com)n(bines)f(the)i(forw)n
-(ard)d(transformation)g(of)i(a)g(supplied)g(Map-)227
-2833 y(ping)i(with)h(the)g(in)n(v)n(erse)e(transformation)f(of)j
-(another)e(supplied)i(Mapping,)f(ignoring)e(the)j(un-used)f(transfor-)
-227 2933 y(mation)g(in)f(eac)n(h)g(Mapping)h(\(indeed)g(the)g(un-used)f
-(transformation)f(need)i(not)f(exist\).)227 3062 y(When)h(the)f(forw)n
-(ard)e(transformation)h(of)h(the)g(T)-7 b(ranMap)26 b(is)h(referred)f
-(to,)h(the)g(transformation)e(actually)i(used)227 3162
-y(is)k(the)g(forw)n(ard)e(transformation)h(of)g(the)i(\014rst)e
-(Mapping)h(supplied)g(when)g(the)g(T)-7 b(ranMap)30 b(w)n(as)g
-(constructed.)227 3262 y(Lik)n(ewise,)j(when)f(the)h(in)n(v)n(erse)d
-(transformation)h(of)h(the)h(T)-7 b(ranMap)31 b(is)h(referred)f(to,)i
-(the)g(transformation)d(ac-)227 3361 y(tually)f(used)g(is)g(the)g(in)n
-(v)n(erse)f(transformation)f(of)i(the)h(second)e(Mapping)h(supplied)g
-(when)g(the)h(T)-7 b(ranMap)28 b(w)n(as)227 3461 y(constructed.)0
-3620 y Fc(Constructor)k(F)-8 b(unction:)227 3720 y Fk(AST)p
-Ft(_)p Fk(TRANMAP)-2 3880 y Fc(Inheritance)n(:)227 4026
-y Fk(The)28 b(T)-7 b(ranMap)27 b(class)f(inherits)i(from)f(the)h
-(Mapping)f(class.)-2 4185 y Fc(A)m(ttributes)n(:)227
-4331 y Fk(The)33 b(T)-7 b(ranMap)31 b(class)h(do)r(es)g(not)h(de\014ne)
-f(an)n(y)g(new)h(attributes)f(b)r(ey)n(ond)g(those)h(whic)n(h)f(are)g
-(applicable)f(to)i(all)227 4431 y(Mappings.)-2 4591 y
-Fc(F)-8 b(unctions)n(:)227 4737 y Fk(The)37 b(T)-7 b(ranMap)36
-b(class)g(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)h(routines)f(b)r(ey)n
-(ond)h(those)f(whic)n(h)h(are)f(applicable)g(to)h(all)227
-4836 y(Mappings.)p 0 5046 V 0 5177 a FA(UnitMap)1368
-5184 y Fd(Unit)h(\(n)m(ull\))f(Mapping)3244 5177 y FA(UnitMap)0
-5394 y Fc(Description:)44 b Fk(A)36 b(UnitMap)g(is)f(a)g(unit)g(\(n)n
-(ull\))h(Mapping)f(that)h(has)e(no)h(e\013ect)h(on)f(the)g(co)r
-(ordinates)f(supplied)i(to)227 5494 y(it.)47 b(They)31
-b(are)f(simply)h(copied.)46 b(This)31 b(can)f(b)r(e)i(useful)f(if)g(a)g
-(Mapping)f(is)h(required)f(\(e.g.)46 b(to)31 b(pass)f(to)h(another)227
-5593 y(routine\))26 b(but)g(y)n(ou)e(do)h(not)h(w)n(an)n(t)f(it)h(to)f
-(ha)n(v)n(e)f(an)n(y)h(e\013ect.)36 b(The)26 b(Nin)g(and)f(Nout)h
-(attributes)f(of)h(a)f(UnitMap)h(are)227 5693 y(alw)n(a)n(ys)g(equal)h
-(and)g(are)g(sp)r(eci\014ed)h(when)g(it)g(is)f(created.)p
-eop end
-%%Page: 516 526
-TeXDict begin 516 525 bop 0 52 a FG(516)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)0 351 y Fc(Constructor)j(F)-8
-b(unction:)227 451 y Fk(AST)p Ft(_)p Fk(UNITMAP)-2 595
-y Fc(Inheritance)n(:)227 741 y Fk(The)28 b(UnitMap)g(class)f(inherits)g
-(from)g(the)h(Mapping)g(class.)-2 885 y Fc(A)m(ttributes)n(:)227
-1031 y Fk(The)33 b(UnitMap)h(class)e(do)r(es)h(not)g(de\014ne)h(an)n(y)
-e(new)h(attributes)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f
-(applicable)h(to)g(all)227 1130 y(Mappings.)-2 1274 y
-Fc(F)-8 b(unctions)n(:)227 1420 y Fk(The)38 b(UnitMap)g(class)e(do)r
-(es)h(not)h(de\014ne)g(an)n(y)e(new)i(routines)f(b)r(ey)n(ond)g(those)g
-(whic)n(h)g(are)g(applicable)g(to)g(all)227 1520 y(Mappings.)p
-0 1708 3780 12 v 0 1839 a FA(WcsMap)879 1840 y Fd(Implemen)m(t)g(a)i
-(FITS-W)m(CS)g(sky)f(pro)7 b(jection)3260 1839 y FA(WcsMap)0
-2017 y Fc(Description:)44 b Fk(This)28 b(class)e(is)i(used)f(to)g
-(represen)n(t)g(sky)g(co)r(ordinate)f(pro)5 b(jections)26
-b(as)h(describ)r(ed)g(in)h(the)g(FITS)g(w)n(orld)227
-2117 y(co)r(ordinate)k(system)g(\(FITS-W)n(CS\))i(pap)r(er)e(I)r(I)h
-Ft(")p Fk(Represen)n(tations)e(of)i(Celestial)f(Co)r(ordinates)f(in)i
-(FITS)p Ft(")g Fk(b)n(y)227 2216 y(M.)c(Calabretta)f(and)g(E.W.)h
-(Griesen.)40 b(This)29 b(pap)r(er)f(de\014nes)h(a)f(set)h(of)f
-(functions,)i(or)e(sky)g(pro)5 b(jections,)28 b(whic)n(h)227
-2316 y(transform)33 b(longitude-latitude)g(pairs)g(represen)n(ting)f
-(spherical)h(celestial)g(co)r(ordinates)f(in)n(to)i(corresp)r(onding)
-227 2416 y(pairs)27 b(of)g(Cartesian)g(co)r(ordinates)f(\(and)i(vice)f
-(v)n(ersa\).)227 2537 y(A)k(WcsMap)f(is)g(a)g(sp)r(ecialised)g(form)g
-(of)g(Mapping)g(whic)n(h)g(implemen)n(ts)h(these)f(sky)g(pro)5
-b(jections)29 b(and)h(applies)227 2637 y(them)25 b(to)g(a)f(sp)r
-(eci\014ed)h(pair)f(of)g(co)r(ordinates.)35 b(All)25
-b(the)g(pro)5 b(jections)23 b(in)i(the)g(FITS-W)n(CS)g(pap)r(er)f(are)g
-(supp)r(orted,)227 2737 y(plus)32 b(the)f(no)n(w)g(deprecated)f
-Ft(")p Fk(T)-7 b(AN)32 b(with)f(p)r(olynomial)g(correction)e(terms)p
-Ft(")i Fk(pro)5 b(jection)30 b(whic)n(h)h(is)g(refered)g(to)227
-2836 y(here)22 b(b)n(y)g(the)g(co)r(de)g Ft(")p Fk(TPN)p
-Ft(")p Fk(.)34 b(Using)22 b(the)g(FITS-W)n(CS)g(terminology)-7
-b(,)22 b(the)g(transformation)f(is)h(b)r(et)n(w)n(een)g
-Ft(")p Fk(nativ)n(e)227 2936 y(spherical)p Ft(")e Fk(and)h
-Ft(")p Fk(pro)5 b(jection)19 b(plane)p Ft(")i Fk(co)r(ordinates)e
-(\(also)h(called)h Ft(")p Fk(in)n(termediate)f(w)n(orld)g(co)r
-(ordinates)p Ft(")p Fk(.)33 b(These)227 3036 y(co)r(ordinates)20
-b(ma)n(y)-7 b(,)22 b(optionally)-7 b(,)22 b(b)r(e)g(em)n(b)r(edded)g
-(in)g(a)f(space)g(with)g(more)g(than)h(t)n(w)n(o)e(dimensions,)j(the)f
-(remaining)227 3135 y(co)r(ordinates)g(b)r(eing)h(copied)g(unc)n
-(hanged.)35 b(Note,)24 b(ho)n(w)n(ev)n(er,)e(that)i(for)e(consistency)h
-(with)g(other)g(AST)h(facilities,)227 3235 y(a)30 b(WcsMap)f(handles)h
-(co)r(ordinates)f(that)h(represen)n(t)e(angles)h(in)h(radians)f
-(\(rather)g(than)h(the)g(degrees)f(used)h(b)n(y)227 3334
-y(FITS-W)n(CS\).)227 3456 y(The)i(t)n(yp)r(e)g(of)f(FITS-W)n(CS)h(pro)5
-b(jection)31 b(to)g(b)r(e)h(used)g(and)f(the)h(co)r(ordinates)e
-(\(axes\))h(to)h(whic)n(h)f(it)h(applies)g(are)227 3556
-y(sp)r(eci\014ed)g(when)g(a)g(WcsMap)g(is)f(\014rst)h(created.)49
-b(The)32 b(pro)5 b(jection)31 b(t)n(yp)r(e)h(ma)n(y)f(subsequen)n(tly)g
-(b)r(e)h(determined)227 3655 y(using)g(the)f(WcsT)n(yp)r(e)h(attribute)
-g(and)f(the)h(co)r(ordinates)e(on)i(whic)n(h)f(it)h(acts)f(ma)n(y)g(b)r
-(e)h(determined)g(using)f(the)227 3755 y(WcsAxis\(lonlat\))d
-(attribute.)227 3877 y(Eac)n(h)37 b(WcsMap)i(also)e(allo)n(ws)g(up)i
-(to)f(100)f Ft(")p Fk(pro)5 b(jection)37 b(parameters)p
-Ft(")f Fk(to)i(b)r(e)h(asso)r(ciated)e(with)i(eac)n(h)e(axis.)227
-3976 y(These)31 b(sp)r(ecify)h(the)g(precise)f(form)g(of)g(the)h(pro)5
-b(jection,)31 b(and)h(are)e(accessed)g(using)h(PVi)p
-Ft(_)p Fk(m)h(attribute,)g(where)227 4076 y Ft(")p Fk(i)p
-Ft(")27 b Fk(is)h(the)g(in)n(teger)f(axis)h(index)f(\(starting)h(at)g
-(1\),)f(and)h(m)g(is)g(an)g(in)n(teger)f Ft(")p Fk(parameter)f(index)p
-Ft(")h Fk(in)h(the)h(range)d(0)227 4176 y(to)i(99.)39
-b(The)28 b(n)n(um)n(b)r(er)g(of)g(pro)5 b(jection)27
-b(parameters)g(required)g(b)n(y)h(eac)n(h)g(pro)5 b(jection,)27
-b(and)i(their)f(meanings,)g(are)227 4275 y(dep)r(enden)n(t)c(up)r(on)e
-(the)h(pro)5 b(jection)22 b(t)n(yp)r(e)h(\(most)g(pro)5
-b(jections)21 b(either)h(do)h(not)f(use)h(an)n(y)f(pro)5
-b(jection)21 b(parameters,)227 4375 y(or)h(use)g(parameters)f(1)h(and)g
-(2)g(asso)r(ciated)f(with)i(the)g(latitude)g(axis\).)35
-b(Before)21 b(creating)h(a)g(WcsMap)g(y)n(ou)g(should)227
-4475 y(consult)31 b(the)h(FITS-W)n(CS)g(pap)r(er)e(for)h(details)g(of)h
-(whic)n(h)f(pro)5 b(jection)30 b(parameters)g(are)g(required,)i(and)f
-(whic)n(h)227 4574 y(ha)n(v)n(e)h(defaults.)53 b(When)34
-b(creating)e(the)h(WcsMap,)h(y)n(ou)e(m)n(ust)h(explicitly)g(set)g(v)-5
-b(alues)33 b(for)f(all)h(those)g(required)227 4674 y(pro)5
-b(jection)27 b(parameters)f(whic)n(h)h(do)h(not)f(ha)n(v)n(e)g
-(defaults)g(de\014ned)h(in)g(this)g(pap)r(er.)0 4818
-y Fc(Constructor)k(F)-8 b(unction:)227 4917 y Fk(AST)p
-Ft(_)p Fk(W)n(CSMAP)-2 5061 y Fc(Inheritance)n(:)227
-5207 y Fk(The)28 b(WcsMap)f(class)g(inherits)g(from)h(the)g(Mapping)f
-(class.)-2 5351 y Fc(A)m(ttributes)n(:)227 5497 y Fk(In)36
-b(addition)g(to)g(those)g(attributes)g(common)f(to)h(all)g(Mappings,)h
-(ev)n(ery)e(WcsMap)h(also)f(has)g(the)i(follo)n(wing)227
-5597 y(attributes:)p eop end
-%%Page: 517 527
-TeXDict begin 517 526 bop 3643 52 a FG(517)340 351 y
-Fj(\017)45 b Fk(NatLat:)37 b(Nativ)n(e)27 b(latitude)h(of)g(the)g
-(reference)e(p)r(oin)n(t)i(of)g(a)f(FITS-W)n(CS)h(pro)5
-b(jection)340 483 y Fj(\017)45 b Fk(NatLon:)37 b(Nativ)n(e)27
-b(longitude)g(of)h(the)g(reference)f(p)r(oin)n(t)g(of)h(a)f(FITS-W)n
-(CS)h(pro)5 b(jection)340 614 y Fj(\017)45 b Fk(PVi)p
-Ft(_)p Fk(m:)37 b(FITS-W)n(CS)28 b(pro)5 b(jection)26
-b(parameters)340 746 y Fj(\017)45 b Fk(PVMax:)36 b(Maxim)n(um)28
-b(n)n(um)n(b)r(er)f(of)h(FITS-W)n(CS)f(pro)5 b(jection)27
-b(parameters)340 877 y Fj(\017)45 b Fk(WcsAxis\(lonlat\):)37
-b(FITS-W)n(CS)28 b(pro)5 b(jection)27 b(axes)340 1009
-y Fj(\017)45 b Fk(WcsT)n(yp)r(e:)37 b(FITS-W)n(CS)28
-b(pro)5 b(jection)26 b(t)n(yp)r(e)-2 1170 y Fc(F)-8 b(unctions)n(:)227
-1316 y Fk(The)38 b(WcsMap)g(class)f(do)r(es)h(not)g(de\014ne)g(an)n(y)g
-(new)g(routines)f(b)r(ey)n(ond)h(those)f(whic)n(h)h(are)f(applicable)h
-(to)g(all)227 1415 y(Mappings.)p 0 1612 3780 12 v 0 1744
-a FA(WinMap)180 b Fd(Map)39 b(one)g(windo)m(w)e(on)h(to)g(another)g(b)m
-(y)g(scaling)g(and)1449 1858 y(shifting)f(eac)m(h)h(axis)3261
-1744 y FA(WinMap)0 2045 y Fc(Description:)44 b Fk(A)26
-b(Winmap)g(is)g(a)f(linear)g(Mapping)h(whic)n(h)f(transforms)f(a)i
-(rectangular)d(windo)n(w)j(in)f(one)h(co)r(ordinate)227
-2144 y(system)k(in)n(to)f(a)g(similar)g(windo)n(w)g(in)g(another)g(co)r
-(ordinate)f(system)i(b)n(y)f(scaling)f(and)i(shifting)g(eac)n(h)e(axis)
-h(\(the)227 2244 y(windo)n(w)e(edges)g(b)r(eing)h(parallel)e(to)i(the)g
-(co)r(ordinate)e(axes\).)227 2368 y(A)g(WinMap)g(is)g(sp)r(eci\014ed)g
-(b)n(y)g(giving)f(the)h(co)r(ordinates)e(of)i(t)n(w)n(o)f(opp)r(osite)g
-(corners)f(\(A)j(and)e(B\))h(of)g(the)g(windo)n(w)227
-2467 y(in)i(b)r(oth)g(the)g(input)h(and)e(output)h(co)r(ordinate)f
-(systems.)0 2616 y Fc(Constructor)32 b(F)-8 b(unction:)227
-2715 y Fk(AST)p Ft(_)p Fk(WINMAP)-2 2863 y Fc(Inheritance)n(:)227
-3009 y Fk(The)28 b(WinMap)g(class)e(inherits)i(from)f(the)h(Mapping)f
-(class.)-2 3158 y Fc(A)m(ttributes)n(:)227 3304 y Fk(The)34
-b(WinMap)g(class)f(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)h
-(attributes)g(b)r(ey)n(ond)f(those)h(whic)n(h)f(are)g(applicable)g(to)h
-(all)227 3403 y(Mappings.)-2 3551 y Fc(F)-8 b(unctions)n(:)227
-3698 y Fk(The)38 b(WinMap)h(class)e(do)r(es)h(not)g(de\014ne)g(an)n(y)f
-(new)h(routines)g(b)r(ey)n(ond)g(those)f(whic)n(h)h(are)f(applicable)h
-(to)g(all)227 3797 y(Mappings.)p 0 3994 V 0 4126 a FA(XmlChan)716
-4132 y Fd(I/O)h(Channel)e(using)i(XML)g(to)f(represen)m(t)g(Ob)7
-b(jects)3217 4126 y FA(XmlChan)0 4330 y Fc(Description:)44
-b Fk(A)21 b(XmlChan)f(is)g(a)g(sp)r(ecialised)g(form)g(of)g(Channel)g
-(whic)n(h)g(supp)r(orts)g(XML)g(I/O)f(op)r(erations.)34
-b(W)-7 b(riting)227 4429 y(an)29 b(Ob)5 b(ject)30 b(to)f(an)g(XmlChan)h
-(\(using)f(AST)p Ft(_)p Fk(WRITE\))h(will,)g(if)g(the)g(Ob)5
-b(ject)29 b(is)g(suitable,)h(generate)e(an)h(XML)227
-4529 y(description)e(of)g(that)g(Ob)5 b(ject,)28 b(and)f(reading)e
-(from)i(an)g(XmlChan)h(will)f(create)f(a)h(new)g(Ob)5
-b(ject)27 b(from)g(its)g(XML)227 4629 y(description.)227
-4752 y(Normally)-7 b(,)39 b(when)f(y)n(ou)e(use)i(an)f(XmlChan,)j(y)n
-(ou)d(should)g(pro)n(vide)f Ft(")p Fk(source)p Ft(")f
-Fk(and)j Ft(")p Fk(sink)p Ft(")e Fk(routines)h(whic)n(h)227
-4852 y(connect)24 b(it)f(to)h(an)f(external)g(data)g(store)f(b)n(y)h
-(reading)f(and)i(writing)f(the)h(resulting)e(XML)i(text.)36
-b(These)23 b(routines)227 4952 y(should)40 b(p)r(erform)f(an)n(y)h(con)
-n(v)n(ersions)d(needed)j(b)r(et)n(w)n(een)g(external)f(c)n(haracter)f
-(enco)r(dings)h(and)h(the)g(in)n(ternal)227 5051 y(ASCI)r(I)33
-b(enco)r(ding.)51 b(If)33 b(no)f(suc)n(h)g(routines)g(are)g(supplied,)i
-(a)e(Channel)g(will)h(read)e(from)h(standard)g(input)h(and)227
-5151 y(write)28 b(to)f(standard)g(output.)0 5299 y Fc(Constructor)32
-b(F)-8 b(unction:)227 5399 y Fk(AST)p Ft(_)p Fk(XMLCHAN)-2
-5547 y Fc(Inheritance)n(:)227 5693 y Fk(The)28 b(XmlChan)g(class)e
-(inherits)i(from)f(the)h(Channel)g(class.)p eop end
-%%Page: 518 528
-TeXDict begin 518 527 bop 0 52 a FG(518)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)-2 351 y Fc(A)m(ttributes)n(:)227
-497 y Fk(In)36 b(addition)f(to)g(those)g(attributes)h(common)f(to)g
-(all)g(Channels,)i(ev)n(ery)d(XmlChan)i(also)e(has)h(the)h(follo)n
-(wing)227 597 y(attributes:)340 858 y Fj(\017)45 b Fk(XmlF)-7
-b(ormat:)37 b(System)28 b(for)f(formatting)g(Ob)5 b(jects)27
-b(as)g(XML)340 991 y Fj(\017)45 b Fk(XmlInden)n(t:)38
-b(Con)n(trols)26 b(output)i(of)g(inden)n(tation)f(and)h(line)f(feeds)
-340 1124 y Fj(\017)45 b Fk(XmlLength:)38 b(Con)n(trols)26
-b(output)i(bu\013er)g(length)340 1256 y Fj(\017)45 b
-Fk(XmlPre\014x:)37 b(The)27 b(namespace)g(pre\014x)g(to)g(use)h(when)g
-(writing)-2 1418 y Fc(F)-8 b(unctions)n(:)227 1564 y
-Fk(The)36 b(XmlChan)h(class)e(do)r(es)h(not)g(de\014ne)g(an)n(y)f(new)h
-(routines)g(b)r(ey)n(ond)g(those)f(whic)n(h)h(are)f(applicable)h(to)g
-(all)227 1664 y(Mappings.)p 0 1863 3780 12 v 0 1994 a
-FA(Zo)t(omMap)1000 1995 y Fd(Zo)s(om)i(co)s(ordinates)e(ab)s(out)i(the)
-h(origin)3179 1994 y FA(Zo)t(omMap)0 2184 y Fc(Description:)44
-b Fk(The)27 b(Zo)r(omMap)f(class)h(implemen)n(ts)g(a)f(Mapping)h(whic)n
-(h)g(p)r(erforms)f(a)h Ft(")p Fk(zo)r(om)p Ft(")f Fk(transformation)f
-(b)n(y)227 2283 y(m)n(ultiplying)g(all)g(co)r(ordinate)f(v)-5
-b(alues)25 b(b)n(y)f(the)i(same)e(scale)g(factor)h(\(the)g(in)n(v)n
-(erse)f(transformation)f(is)i(p)r(erformed)227 2383 y(b)n(y)39
-b(dividing)g(b)n(y)g(this)h(scale)e(factor\).)72 b(The)39
-b(n)n(um)n(b)r(er)g(of)g(co)r(ordinate)f(v)-5 b(alues)39
-b(represen)n(ting)f(eac)n(h)g(p)r(oin)n(t)i(is)227 2483
-y(unc)n(hanged.)0 2632 y Fc(Constructor)32 b(F)-8 b(unction:)227
-2732 y Fk(AST)p Ft(_)p Fk(ZOOMMAP)-2 2881 y Fc(Inheritance)n(:)227
-3027 y Fk(The)28 b(Zo)r(omMap)f(class)f(inherits)i(from)f(the)h
-(Mapping)f(class.)-2 3177 y Fc(A)m(ttributes)n(:)227
-3323 y Fk(In)33 b(addition)f(to)h(those)f(attributes)g(common)g(to)g
-(all)h(Mappings,)g(ev)n(ery)e(Zo)r(omMap)g(also)h(has)g(the)h(follo)n
-(wing)227 3422 y(attributes:)340 3683 y Fj(\017)45 b
-Fk(Zo)r(om:)36 b(Zo)r(omMap)27 b(scale)g(factor)-2 3845
-y Fc(F)-8 b(unctions)n(:)227 3991 y Fk(The)35 b(Zo)r(omMap)f(class)g
-(do)r(es)g(not)h(de\014ne)f(an)n(y)g(new)h(routines)f(b)r(ey)n(ond)h
-(those)f(whic)n(h)g(are)g(applicable)g(to)h(all)227 4091
-y(Mappings.)p eop end
-%%Page: 519 529
-TeXDict begin 519 528 bop 3643 52 a FG(519)0 351 y FA(E)135
-b(UNIX)45 b(Command)g(Descriptions)0 594 y FG(The)35
-b(commands)h(describ)s(ed)e(here)i(are)g(pro)m(vided)f(for)h(use)f
-(from)g(the)h(UNIX)g(shell)g(to)h(assist)f(with)f(dev)m(el-)0
-694 y(oping)e(soft)m(w)m(are)g(whic)m(h)g(uses)f(AST.)g(T)-8
-b(o)32 b(use)h(these)g(commands,)f(y)m(ou)h(should)f(ensure)f(that)i
-(the)g(directory)0 793 y(\\/star/bin")459 760 y Fv(37)565
-793 y FG(is)e(on)f(y)m(our)g(P)-8 b(A)g(TH.)p 0 945 3780
-12 v 0 1076 a FA(ast)p Fe(_)p FA(link)476 b Fd(Link)39
-b(a)f(program)e(with)i(the)h(AST)f(library)473 b FA(ast)p
-Fe(_)p FA(link)0 1270 y Fc(Description:)44 b Fk(This)36
-b(command)g(should)g(b)r(e)h(used)f(when)g(building)g(programs)e(whic)n
-(h)i(use)g(the)h(AST)f(library)-7 b(,)37 b(in)227 1369
-y(order)21 b(to)g(generate)f(the)i(correct)f(argumen)n(ts)f(to)h(allo)n
-(w)g(the)h(compiler)f(to)g(link)h(y)n(our)e(program.)33
-b(The)22 b(argumen)n(ts)227 1469 y(generated)k(are)g(written)h(to)f
-(standard)g(output)i(but)f(ma)n(y)f(b)r(e)h(substituted)h(in)n(to)f
-(the)g(compiler)f(command)g(line)227 1568 y(in)i(the)g(standard)f(UNIX)
-h(w)n(a)n(y)f(using)g(bac)n(kw)n(ard)e(quotes)i(\(see)h(b)r(elo)n(w\).)
-227 1695 y(By)35 b(default,)j(it)d(is)h(assumed)e(that)i(y)n(ou)e(are)g
-(building)i(a)f(stand-alone)f(program)f(whic)n(h)i(do)r(es)g(not)g(pro)
-r(duce)227 1795 y(graphical)26 b(output.)38 b(Ho)n(w)n(ev)n(er,)25
-b(switc)n(hes)i(are)g(pro)n(vided)g(for)g(linking)g(other)g(t)n(yp)r
-(es)h(of)f(program.)0 1949 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(f77)42 b(program.f)e(-L/star/lib)f(`ast_link)h([switches]`)f(-o)k
-(program)0 2102 y Fc(Examples:)227 2244 y Fy(f77)k(display.f)e
-(-L/star/lib)g(`ast)p Ft(_)p Fy(link)g(-pgplot`)h(-o)h(display)427
-2343 y Fk(Compiles)34 b(and)f(links)h(a)f(F)-7 b(ortran)32
-b(program)g(called)h(\\displa)n(y")f(whic)n(h)i(uses)f(the)h(standard)f
-(v)n(ersion)f(of)427 2442 y(PGPLOT)27 b(for)g(graphical)f(output.)227
-2578 y Fy(f77)47 b(plotit.f)f(-L.)h(-L/star/lib)d(`ast)p
-Ft(_)p Fy(link)h(-grf`)i(-lgrf)f(-o)h(plotit)427 2677
-y Fk(Compiles)32 b(and)f(links)h(a)g(F)-7 b(ortran)30
-b(program)g(\\plotit".)49 b(The)32 b(\\-grf)6 b(")31
-b(switc)n(h)g(indicates)h(that)g(graphical)427 2777 y(output)c(will)g
-(b)r(e)g(deliv)n(ered)f(through)g(a)g(graphical)f(in)n(terface)h(whic)n
-(h)g(y)n(ou)g(ha)n(v)n(e)g(implemen)n(ted)h(y)n(ourself,)427
-2876 y(whic)n(h)22 b(corresp)r(onds)e(to)h(the)h(in)n(terface)f
-(required)g(b)n(y)h(the)g(curren)n(t)f(v)n(ersion)f(of)h(AST.)i(Here,)f
-(this)g(in)n(terface)427 2976 y(is)28 b(supplied)g(b)n(y)f(means)g(of)h
-(the)g(\\-lgrf)6 b(")26 b(library)g(reference.)227 3112
-y Fy(f77)47 b(plotit.f)f(-L.)h(-L/star/lib)d(`ast)p Ft(_)p
-Fy(link)h(-grf)p Ft(_)p Fy(v2.0`)g(-lgrf)i(-o)g(plotit)427
-3210 y Fk(Compiles)25 b(and)g(links)f(a)h(F)-7 b(ortran)24
-b(program)e(\\plotit".)36 b(The)25 b(\\-grf)p Ft(_)p
-Fk(v2.0")c(switc)n(h)k(indicates)g(that)g(graph-)427
-3310 y(ical)f(output)i(will)e(b)r(e)h(deliv)n(ered)f(through)g(a)g
-(graphical)f(in)n(terface)h(whic)n(h)h(y)n(ou)f(ha)n(v)n(e)f(implemen)n
-(ted)i(y)n(our-)427 3410 y(self,)32 b(whic)n(h)f(corresp)r(onds)e(to)i
-(the)g(in)n(terface)f(required)g(b)n(y)h(v)n(ersion)e(2.0)h(of)h(AST.)h
-(Here,)f(this)g(in)n(terface)427 3509 y(is)d(supplied)g(b)n(y)f(means)g
-(of)h(the)g(\\-lgrf)6 b(")26 b(library)g(reference.)-2
-3675 y Fc(Switc)m(hes)n(:)227 3822 y Fk(The)i(follo)n(wing)e(switc)n
-(hes)i(ma)n(y)e(optionally)h(b)r(e)h(giv)n(en)f(to)g(this)h(command)g
-(to)f(mo)r(dify)h(its)g(b)r(eha)n(viour:)340 4089 y Fj(\017)45
-b Fk(\\-csla":)35 b(Ignored.)h(Pro)n(vided)26 b(for)h(bac)n(kw)n(ard)e
-(compatibilit)n(y)j(only)-7 b(.)340 4224 y Fj(\017)45
-b Fk(\\-fsla":)36 b(Ignored.)f(Pro)n(vided)26 b(for)h(bac)n(kw)n(ard)f
-(compatibilit)n(y)h(only)-7 b(.)340 4359 y Fj(\017)45
-b Fk(\\-ems":)e(Requests)31 b(that)g(the)h(program)d(b)r(e)i(link)n(ed)
-g(so)g(that)g(error)e(messages)h(pro)r(duced)h(b)n(y)g(the)g(AST)427
-4459 y(library)d(are)f(deliv)n(ered)h(via)g(the)i(Starlink)e(EMS)g
-(\(Error)f(Message)g(Service\))h(library)g(\(Starlink)g(System)427
-4558 y(Note)g(SSN/4\).)37 b(By)27 b(default,)h(error)e(messages)g(are)g
-(simply)i(written)g(to)f(standard)g(error.)340 4693 y
-Fj(\017)45 b Fk(\\-drama":)33 b(Requests)25 b(that)g(the)g(program)e(b)
-r(e)i(link)n(ed)f(so)g(that)h(error)e(messages)g(pro)r(duced)i(b)n(y)f
-(the)h(AST)427 4793 y(library)d(are)g(deliv)n(ered)g(via)h(the)g(DRAMA)
-h(Ers)e(\(Error)f(Rep)r(orting)i(Service\))f(library)-7
-b(.)34 b(By)23 b(default,)i(error)427 4892 y(messages)h(are)h(simply)g
-(written)h(to)g(standard)e(error.)340 5027 y Fj(\017)45
-b Fk(\\-grf)6 b(":)54 b(Requests)37 b(that)g(no)f(argumen)n(ts)g(b)r(e)
-h(generated)f(to)g(sp)r(ecify)h(whic)n(h)g(2D)g(graphics)e(system)i(is)
-427 5127 y(used)c(to)g(displa)n(y)g(output)g(from)g(the)h(AST)f
-(library)-7 b(.)53 b(Y)-7 b(ou)33 b(should)g(use)g(this)g(option)g
-(only)g(if)g(y)n(ou)g(ha)n(v)n(e)427 5227 y(implemen)n(ted)h(an)e(in)n
-(terface)h(to)f(a)h(new)g(graphics)e(system)i(y)n(ourself)f(and)g(wish)
-h(to)g(pro)n(vide)f(y)n(our)f(o)n(wn)427 5326 y(argumen)n(ts)i(for)h
-(linking)h(with)g(it.)58 b(This)34 b(switc)n(h)h(di\013ers)f(from)g
-(the)h(other)f(\\grf)6 b(")34 b(switc)n(hes)g(in)g(that)h(it)427
-5426 y(assumes)21 b(that)g(y)n(our)g(graphics)f(mo)r(dule)h(implemen)n
-(ts)h(the)g(complete)f(in)n(terface)g(required)g(b)n(y)g(the)g(curren)n
-(t)427 5526 y(v)n(ersion)28 b(of)h(AST.)g(If)g(future)h(v)n(ersions)d
-(of)i(AST)g(in)n(tro)r(duce)f(new)h(functions)h(to)e(the)i(graphics)d
-(in)n(terface,)p 0 5607 1512 4 v 73 5661 a Fs(37)138
-5693 y Fr(Or)f(the)f(equiv)l(alen)n(t)g(directory)g(if)i(AST)e(is)h
-(installed)h(in)f(a)g(non-standard)f(lo)r(cation.)p eop
-end
-%%Page: 520 530
-TeXDict begin 520 529 bop 0 52 a FG(520)1988 b Fz(E)91
-b(UNIX)30 b(COMMAND)i(DESCRIPTIONS)427 351 y Fk(this)e(switc)n(h)g
-(will)g(cause)f(\\unresolv)n(ed)f(sym)n(b)r(ol")h(errors)e(to)j(o)r
-(ccur)f(during)h(linking,)g(w)n(arning)e(y)n(ou)h(that)427
-451 y(y)n(ou)24 b(need)g(to)h(implemen)n(t)g(new)f(functions)h(in)f(y)n
-(our)g(graphics)e(mo)r(dule.)37 b(T)-7 b(o)24 b(a)n(v)n(oid)e(suc)n(h)j
-(errors,)d(y)n(ou)i(can)427 551 y(use)34 b(one)f(of)h(the)g(other,)g(v)
-n(ersion-sp)r(eci\014c,)f(switc)n(hes)h(in)f(place)h(of)f(the)h(\\-grf)
-6 b(")32 b(switc)n(h,)k(but)e(these)f(will)427 650 y(cause)28
-b(run-time)h(errors)d(to)j(b)r(e)g(rep)r(orted)f(if)h(an)n(y)f(AST)h
-(function)h(is)e(in)n(v)n(ok)n(ed)g(whic)n(h)g(requires)g(facilities)
-427 750 y(not)g(in)g(the)g(implemen)n(ted)g(in)n(terface.)340
-885 y Fj(\017)45 b Fk(\\-grf)p Ft(_)p Fk(v2.0":)37 b(This)29
-b(switc)n(h)g(is)g(equiv)-5 b(alen)n(t)29 b(to)g(the)h(\\-m)n(ygrf)6
-b(")27 b(switc)n(h.)42 b(It)29 b(indicates)g(that)h(y)n(ou)e(w)n(an)n
-(t)h(to)427 984 y(link)e(with)g(y)n(our)e(o)n(wn)g(graphics)g(mo)r
-(dule)i(whic)n(h)f(implemen)n(ts)h(the)g(2D)f(graphics)f(in)n(terface)h
-(required)f(b)n(y)427 1084 y(V2.0)i(of)h(AST.)340 1219
-y Fj(\017)45 b Fk(\\-grf)p Ft(_)p Fk(v3.2":)30 b(Indicates)20
-b(that)g(y)n(ou)g(w)n(an)n(t)f(to)h(link)h(with)f(y)n(our)f(o)n(wn)h
-(graphics)f(mo)r(dule)h(whic)n(h)g(implemen)n(ts)427
-1319 y(the)28 b(2D)g(graphics)e(in)n(terface)h(required)g(b)n(y)g(V3.2)
-g(of)g(AST.)340 1454 y Fj(\017)45 b Fk(\\-m)n(y)n(err":)34
-b(Requests)26 b(that)h(no)g(argumen)n(ts)e(b)r(e)j(generated)d(to)i(sp)
-r(ecify)g(ho)n(w)f(error)f(messages)g(pro)r(duced)427
-1553 y(b)n(y)30 b(the)g(AST)g(library)e(should)i(b)r(e)g(deliv)n(ered.)
-42 b(Y)-7 b(ou)30 b(should)g(use)f(this)h(option)g(only)f(if)h(y)n(ou)f
-(ha)n(v)n(e)g(imple-)427 1653 y(men)n(ted)34 b(an)f(in)n(terface)f(to)i
-(a)e(new)i(error)d(deliv)n(ery)h(system)h(y)n(ourself)g(and)g(wish)g
-(to)g(pro)n(vide)f(y)n(our)g(o)n(wn)427 1752 y(argumen)n(ts)27
-b(for)g(linking)g(with)h(it.)340 1887 y Fj(\017)45 b
-Fk(\\-m)n(ygrf)6 b(":)46 b(This)33 b(switc)n(h)g(has)g(b)r(een)g(sup)r
-(erceeded)g(b)n(y)g(the)g(\\-grf)6 b(")32 b(switc)n(h,)i(but)g(is)f
-(retained)g(in)g(order)427 1987 y(to)26 b(allo)n(w)e(applications)h(to)
-h(b)r(e)g(link)n(ed)f(with)h(a)g(graphics)e(mo)r(dule)i(whic)n(h)g
-(implemen)n(ts)g(the)g(2D)f(in)n(terface)427 2087 y(used)j(b)n(y)f(AST)
-h(V2.0.)36 b(It)28 b(is)g(equiv)-5 b(alen)n(t)27 b(to)h(the)g(\\-grf)p
-Ft(_)p Fk(v2.0")c(switc)n(h.)340 2222 y Fj(\017)45 b
-Fk(\\-pgp":)53 b(Requests)36 b(that)h(the)f(program)f(b)r(e)h(link)n
-(ed)g(so)g(that)h(2D)f(graphical)f(output)i(from)e(the)i(AST)427
-2321 y(library)c(is)h(displa)n(y)n(ed)f(via)g(the)i(Starlink)e(v)n
-(ersion)g(of)h(the)g(PGPLOT)f(graphics)f(pac)n(k)-5 b(age)33
-b(\(whic)n(h)h(uses)427 2421 y(GKS)29 b(for)g(its)g(output\).)42
-b(By)29 b(default,)h(no)e(2D)h(graphics)f(pac)n(k)-5
-b(age)28 b(is)g(link)n(ed)h(and)g(this)h(will)f(result)g(in)g(an)427
-2521 y(error)d(at)h(run)h(time)g(if)g(AST)g(routines)f(are)g(in)n(v)n
-(ok)n(ed)f(that)i(attempt)g(to)f(generate)g(graphical)f(output.)340
-2656 y Fj(\017)45 b Fk(\\-pgplot":)40 b(Requests)30 b(that)g(the)g
-(program)e(b)r(e)i(link)n(ed)g(so)f(that)h(2D)g(graphical)e(output)i
-(from)g(the)g(AST)427 2755 y(library)25 b(is)h(displa)n(y)n(ed)e(via)i
-(the)g(standard)f(\(or)g(\\nativ)n(e"\))g(v)n(ersion)f(of)i(the)g
-(PGPLOT)f(graphics)f(pac)n(k)-5 b(age.)427 2855 y(By)32
-b(default,)j(no)d(2D)g(graphics)f(pac)n(k)-5 b(age)31
-b(is)h(link)n(ed)h(and)f(this)h(will)f(result)g(in)h(an)f(error)f(at)h
-(run)g(time)h(if)427 2954 y(AST)28 b(routines)f(are)g(in)n(v)n(ok)n(ed)
-f(that)i(attempt)g(to)g(generate)e(graphical)g(output.)340
-3089 y Fj(\017)45 b Fk(\\-grf3d":)d(Requests)30 b(that)i(no)e(argumen)n
-(ts)g(b)r(e)h(generated)f(to)h(sp)r(ecify)g(whic)n(h)g(3D)g(graphics)f
-(system)h(is)427 3189 y(used)i(to)g(displa)n(y)g(output)g(from)g(the)h
-(AST)f(library)-7 b(.)53 b(Y)-7 b(ou)33 b(should)g(use)g(this)g(option)
-g(only)g(if)g(y)n(ou)g(ha)n(v)n(e)427 3289 y(implemen)n(ted)25
-b(an)e(in)n(terface)g(to)h(a)f(new)h(3D)f(graphics)g(system)g(y)n
-(ourself)g(and)g(wish)h(to)f(pro)n(vide)g(y)n(our)f(o)n(wn)427
-3388 y(argumen)n(ts)27 b(for)g(linking)g(with)h(it.)340
-3523 y Fj(\017)45 b Fk(\\-pgp3d":)c(Requests)30 b(that)h(the)g(program)
-d(b)r(e)j(link)n(ed)f(so)g(that)h(3D)f(graphical)f(output)i(from)f(the)
-h(AST)427 3623 y(library)i(is)h(displa)n(y)n(ed)f(via)g(the)i(Starlink)
-e(v)n(ersion)g(of)h(the)g(PGPLOT)f(graphics)f(pac)n(k)-5
-b(age)33 b(\(whic)n(h)h(uses)427 3722 y(GKS)29 b(for)g(its)g(output\).)
-42 b(By)29 b(default,)h(no)e(3D)h(graphics)f(pac)n(k)-5
-b(age)28 b(is)g(link)n(ed)h(and)g(this)h(will)f(result)g(in)g(an)427
-3822 y(error)d(at)h(run)h(time)g(if)g(AST)g(routines)f(are)g(in)n(v)n
-(ok)n(ed)f(that)i(attempt)g(to)f(generate)g(graphical)f(output.)340
-3957 y Fj(\017)45 b Fk(\\-pgplot3d":)33 b(Requests)23
-b(that)h(the)g(program)e(b)r(e)i(link)n(ed)f(so)g(that)h(3D)g
-(graphical)e(output)i(from)f(the)h(AST)427 4057 y(library)h(is)h
-(displa)n(y)n(ed)e(via)i(the)g(standard)f(\(or)g(\\nativ)n(e"\))g(v)n
-(ersion)f(of)i(the)g(PGPLOT)f(graphics)f(pac)n(k)-5 b(age.)427
-4156 y(By)32 b(default,)j(no)d(3D)g(graphics)f(pac)n(k)-5
-b(age)31 b(is)h(link)n(ed)h(and)f(this)h(will)f(result)g(in)h(an)f
-(error)f(at)h(run)g(time)h(if)427 4256 y(AST)28 b(routines)f(are)g(in)n
-(v)n(ok)n(ed)f(that)i(attempt)g(to)g(generate)e(graphical)g(output.)-2
-4422 y Fc(SLALIB)n(:)227 4568 y Fk(The)j(AST)h(distribution)f(includes)
-g(a)f(cut)i(do)n(wn)e(subset)h(of)g(the)g(C)g(v)n(ersion)f(of)g(the)i
-(SLALIB)f(library)e(written)227 4668 y(b)n(y)h(P)n(at)g(W)-7
-b(allace.)38 b(This)28 b(subset)h(con)n(tains)e(only)h(the)g(functions)
-h(needed)f(b)n(y)g(the)h(AST)g(library)-7 b(.)37 b(It)29
-b(is)f(built)h(as)227 4768 y(part)24 b(of)f(the)i(pro)r(cess)d(of)i
-(building)g(AST)h(and)e(is)h(distributed)g(under)g(GPL)g(\(and)g(is)f
-(th)n(us)h(compatible)g(with)g(the)227 4867 y(AST)f(license\).)35
-b(Previous)20 b(v)n(ersion)h(of)h(this)g(script)g(allo)n(w)n(ed)f(AST)h
-(applications)f(to)h(b)r(e)h(link)n(ed)f(against)e(external)227
-4967 y(SLALIB)34 b(libraries)e(\(either)i(F)-7 b(ortran)33
-b(or)g(C\))h(rather)e(than)i(the)g(in)n(ternal)f(v)n(ersion.)54
-b(The)34 b(curren)n(t)e(v)n(ersion)h(of)227 5066 y(this)g(script)f(do)r
-(es)g(not)h(pro)n(vide)e(this)h(option,)i(and)e(alw)n(a)n(ys)f(uses)h
-(the)g(in)n(ternal)g(SLALIB)g(library)-7 b(.)51 b(Ho)n(w)n(ev)n(er,)227
-5166 y(for)25 b(bac)n(kw)n(ard)f(compatibilit)n(y)-7
-b(,)26 b(this)g(script)f(still)h(allo)n(ws)f(the)h Ft(")p
-Fk(-fsla)p Ft(")e Fk(and)h Ft(")p Fk(-csla)p Ft(")f Fk(\015ags)h
-(\(previously)f(used)i(for)227 5266 y(selecting)h(whic)n(h)h(v)n
-(ersion)e(of)i(SLALIB)f(to)h(use\))f(to)h(b)r(e)g(sp)r(eci\014ed,)g
-(but)g(they)g(will)g(b)r(e)g(ignored.)p 0 5469 3780 12
-v 0 5601 a FA(ast)p Fe(_)p FA(link)p Fe(_)p FA(adam)189
-b Fd(Link)39 b(an)f(AD)m(AM)h(program)d(with)i(the)1581
-5715 y(AST)g(library)2948 5601 y FA(ast)p Fe(_)p FA(link)p
-Fe(_)p FA(adam)p eop end
-%%Page: 521 531
-TeXDict begin 521 530 bop 3643 52 a FG(521)0 351 y Fc(Description:)44
-b Fk(This)21 b(command)e(should)h(only)g(b)r(e)h(used)f(when)h
-(building)f(Starlink)g(AD)n(AM)h(programs)d(whic)n(h)i(use)g(the)227
-451 y(AST)29 b(library)-7 b(,)27 b(in)h(order)f(to)h(generate)f(the)i
-(correct)e(argumen)n(ts)f(to)i(allo)n(w)g(the)g(AD)n(AM)h(\\alink")e
-(command)h(to)227 551 y(link)22 b(the)h(program.)33 b(The)22
-b(argumen)n(ts)f(generated)g(are)g(written)h(to)g(standard)f(output)h
-(but)h(ma)n(y)e(b)r(e)i(substituted)227 650 y(in)n(to)28
-b(the)g(\\alink")e(command)h(line)h(in)g(the)g(standard)e(UNIX)j(w)n(a)
-n(y)d(using)h(bac)n(kw)n(ard)f(quotes)h(\(see)h(b)r(elo)n(w\).)227
-774 y(By)19 b(default,)i(it)f(is)e(assumed)h(that)g(y)n(ou)f(are)g
-(building)i(an)e(AD)n(AM)i(program)d(whic)n(h)i(do)r(es)g(not)g(pro)r
-(duce)f(graphical)227 874 y(output.)37 b(Ho)n(w)n(ev)n(er,)25
-b(switc)n(hes)g(are)g(pro)n(vided)g(for)h(linking)g(other)g(t)n(yp)r
-(es)g(of)g(program.)34 b(This)26 b(command)g(should)227
-974 y(not)40 b(b)r(e)g(used)f(when)h(building)g(stand-alone)e(\(non-AD)
-n(AM\))j(programs.)70 b(Use)40 b(the)g(\\ast)p Ft(_)p
-Fk(link")e(command)227 1073 y(instead.)0 1222 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(alink)41 b(program.f)f(-L/star/lib)f(`ast_link_adam)f
-([switches]`)0 1372 y Fc(Examples:)227 1509 y Fy(alink)47
-b(display.f)e(-L/star/lib)g(`ast)p Ft(_)p Fy(link)p Ft(_)p
-Fy(adam)e(-pgplot`)427 1607 y Fk(Compiles)37 b(and)h(links)f(an)h(AD)n
-(AM)g(F)-7 b(ortran)36 b(program)g(called)h(\\displa)n(y")f(whic)n(h)h
-(uses)h(the)g(standard)427 1707 y(v)n(ersion)26 b(of)i(PGPLOT)e(for)h
-(graphical)f(output.)227 1840 y Fy(alink)47 b(plotit.f)e(-L.)i
-(-L/star/lib)e(`ast)p Ft(_)p Fy(link)p Ft(_)p Fy(adam)e(-grf`)k(-lgrf)
-427 1939 y Fk(Compiles)34 b(and)f(links)g(an)h(AD)n(AM)g(F)-7
-b(ortran)33 b(program)e(\\plotit".)55 b(The)33 b(\\-grf)6
-b(")32 b(switc)n(h)i(indicates)f(that)427 2039 y(graphical)24
-b(output)h(will)h(b)r(e)f(deliv)n(ered)g(through)f(a)h(graphical)e(in)n
-(terface)i(whic)n(h)g(y)n(ou)f(ha)n(v)n(e)g(implemen)n(ted)427
-2138 y(y)n(ourself,)35 b(whic)n(h)f(corresp)r(onds)e(to)i(the)h(in)n
-(terface)e(required)h(b)n(y)g(the)g(curren)n(t)f(v)n(ersion)g(of)h
-(AST.)h(Here,)427 2238 y(this)28 b(in)n(terface)f(is)h(supplied)g(b)n
-(y)f(means)g(of)h(the)g(\\-lgrf)6 b(")26 b(library)g(reference.)227
-2371 y Fy(alink)47 b(plotit.f)e(-L.)i(-L/star/lib)e(`ast)p
-Ft(_)p Fy(link)p Ft(_)p Fy(adam)e(-grf)p Ft(_)p Fy(v2.0`)i(-lgrf)427
-2470 y Fk(Compiles)18 b(and)h(links)f(an)g(AD)n(AM)i(F)-7
-b(ortran)17 b(program)g(\\plotit".)33 b(The)18 b(\\-grf)p
-Ft(_)p Fk(v2.0")e(switc)n(h)i(indicates)g(that)427 2570
-y(graphical)24 b(output)h(will)h(b)r(e)f(deliv)n(ered)g(through)f(a)h
-(graphical)e(in)n(terface)i(whic)n(h)g(y)n(ou)f(ha)n(v)n(e)g(implemen)n
-(ted)427 2669 y(y)n(ourself,)c(whic)n(h)f(corresp)r(onds)f(to)h(the)g
-(in)n(terface)g(required)f(b)n(y)h(v)n(ersion)f(2.0)g(of)h(AST.)h
-(Here,)h(this)e(in)n(terface)427 2769 y(is)28 b(supplied)g(b)n(y)f
-(means)g(of)h(the)g(\\-lgrf)6 b(")26 b(library)g(reference.)-2
-2930 y Fc(Switc)m(hes)n(:)227 3077 y Fk(The)i(follo)n(wing)e(switc)n
-(hes)i(ma)n(y)e(optionally)h(b)r(e)h(giv)n(en)f(to)g(this)h(command)g
-(to)f(mo)r(dify)h(its)g(b)r(eha)n(viour:)340 3337 y Fj(\017)45
-b Fk(\\-csla":)35 b(Ignored.)h(Pro)n(vided)26 b(for)h(bac)n(kw)n(ard)e
-(compatibilit)n(y)j(only)-7 b(.)340 3469 y Fj(\017)45
-b Fk(\\-fsla":)36 b(Ignored.)f(Pro)n(vided)26 b(for)h(bac)n(kw)n(ard)f
-(compatibilit)n(y)h(only)-7 b(.)340 3602 y Fj(\017)45
-b Fk(\\-grf)6 b(":)54 b(Requests)37 b(that)g(no)f(argumen)n(ts)g(b)r(e)
-h(generated)f(to)g(sp)r(ecify)h(whic)n(h)g(2D)g(graphics)e(system)i(is)
-427 3702 y(used)c(to)g(displa)n(y)g(output)g(from)g(the)h(AST)f
-(library)-7 b(.)53 b(Y)-7 b(ou)33 b(should)g(use)g(this)g(option)g
-(only)g(if)g(y)n(ou)g(ha)n(v)n(e)427 3801 y(implemen)n(ted)h(an)e(in)n
-(terface)h(to)f(a)h(new)g(graphics)e(system)i(y)n(ourself)f(and)g(wish)
-h(to)g(pro)n(vide)f(y)n(our)f(o)n(wn)427 3901 y(argumen)n(ts)i(for)h
-(linking)h(with)g(it.)58 b(This)34 b(switc)n(h)h(di\013ers)f(from)g
-(the)h(other)f(\\grf)6 b(")34 b(switc)n(hes)g(in)g(that)h(it)427
-4000 y(assumes)21 b(that)g(y)n(our)g(graphics)f(mo)r(dule)h(implemen)n
-(ts)h(the)g(complete)f(in)n(terface)g(required)g(b)n(y)g(the)g(curren)n
-(t)427 4100 y(v)n(ersion)28 b(of)h(AST.)g(If)g(future)h(v)n(ersions)d
-(of)i(AST)g(in)n(tro)r(duce)f(new)h(functions)h(to)e(the)i(graphics)d
-(in)n(terface,)427 4200 y(this)j(switc)n(h)g(will)g(cause)f(\\unresolv)
-n(ed)f(sym)n(b)r(ol")h(errors)e(to)j(o)r(ccur)f(during)h(linking,)g(w)n
-(arning)e(y)n(ou)h(that)427 4299 y(y)n(ou)24 b(need)g(to)h(implemen)n
-(t)g(new)f(functions)h(in)f(y)n(our)g(graphics)e(mo)r(dule.)37
-b(T)-7 b(o)24 b(a)n(v)n(oid)e(suc)n(h)j(errors,)d(y)n(ou)i(can)427
-4399 y(use)34 b(one)f(of)h(the)g(other,)g(v)n(ersion-sp)r(eci\014c,)f
-(switc)n(hes)h(in)f(place)h(of)f(the)h(\\-grf)6 b(")32
-b(switc)n(h,)k(but)e(these)f(will)427 4499 y(cause)28
-b(run-time)h(errors)d(to)j(b)r(e)g(rep)r(orted)f(if)h(an)n(y)f(AST)h
-(function)h(is)e(in)n(v)n(ok)n(ed)g(whic)n(h)g(requires)g(facilities)
-427 4598 y(not)g(in)g(the)g(implemen)n(ted)g(in)n(terface.)340
-4731 y Fj(\017)45 b Fk(\\-grf)p Ft(_)p Fk(v2.0":)37 b(This)29
-b(switc)n(h)g(is)g(equiv)-5 b(alen)n(t)29 b(to)g(the)h(\\-m)n(ygrf)6
-b(")27 b(switc)n(h.)42 b(It)29 b(indicates)g(that)h(y)n(ou)e(w)n(an)n
-(t)h(to)427 4830 y(link)e(with)g(y)n(our)e(o)n(wn)g(graphics)g(mo)r
-(dule)i(whic)n(h)f(implemen)n(ts)h(the)g(2D)f(graphics)f(in)n(terface)h
-(required)f(b)n(y)427 4930 y(V2.0)i(of)h(AST.)340 5062
-y Fj(\017)45 b Fk(\\-grf)p Ft(_)p Fk(v3.2":)30 b(Indicates)20
-b(that)g(y)n(ou)g(w)n(an)n(t)f(to)h(link)h(with)f(y)n(our)f(o)n(wn)h
-(graphics)f(mo)r(dule)h(whic)n(h)g(implemen)n(ts)427
-5162 y(the)28 b(2D)g(graphics)e(in)n(terface)h(required)g(b)n(y)g(V3.2)
-g(of)g(AST.)340 5295 y Fj(\017)45 b Fk(\\-m)n(y)n(err":)34
-b(Requests)26 b(that)h(no)g(argumen)n(ts)e(b)r(e)j(generated)d(to)i(sp)
-r(ecify)g(ho)n(w)f(error)f(messages)g(pro)r(duced)427
-5394 y(b)n(y)30 b(the)g(AST)g(library)e(should)i(b)r(e)g(deliv)n(ered.)
-42 b(Y)-7 b(ou)30 b(should)g(use)f(this)h(option)g(only)f(if)h(y)n(ou)f
-(ha)n(v)n(e)g(imple-)427 5494 y(men)n(ted)34 b(an)f(in)n(terface)f(to)i
-(a)e(new)i(error)d(deliv)n(ery)h(system)h(y)n(ourself)g(and)g(wish)g
-(to)g(pro)n(vide)f(y)n(our)g(o)n(wn)427 5593 y(argumen)n(ts)20
-b(for)h(linking)g(with)h(it.)35 b(By)21 b(default,)i(error)c(messages)h
-(are)g(deliv)n(ered)g(in)i(the)g(standard)e(AD)n(AM)427
-5693 y(w)n(a)n(y)27 b(via)g(the)h(EMS)f(Error)e(Message)h(Service)h
-(\(Starlink)h(System)f(Note)h(SSN/4\).)p eop end
-%%Page: 522 532
-TeXDict begin 522 531 bop 0 52 a FG(522)1988 b Fz(E)91
-b(UNIX)30 b(COMMAND)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(\\-m)n(ygrf)6 b(":)35 b(This)26 b(switc)n(h)g(has)g(b)r(een)h(sup)
-r(erceeded)f(b)n(y)g(the)h(\\-grf)6 b(")25 b(switc)n(h,)h(but)h(is)f
-(retained)g(in)h(order)e(to)427 451 y(allo)n(w)j(applications)g(to)h(b)
-r(e)g(link)n(ed)g(with)h(a)e(graphics)g(mo)r(dule)h(whic)n(h)g
-(implemen)n(ts)g(the)g(in)n(terface)g(used)427 551 y(b)n(y)f(AST)g
-(V2.0.)36 b(It)28 b(is)f(equiv)-5 b(alen)n(t)28 b(to)f(the)h(\\-grf)p
-Ft(_)p Fk(v2.0")c(switc)n(h.)340 683 y Fj(\017)45 b Fk(\\-pgp":)53
-b(Requests)36 b(that)h(the)f(program)f(b)r(e)h(link)n(ed)g(so)g(that)h
-(2D)f(graphical)f(output)i(from)e(the)i(AST)427 783 y(library)c(is)h
-(displa)n(y)n(ed)f(via)g(the)i(Starlink)e(v)n(ersion)g(of)h(the)g
-(PGPLOT)f(graphics)f(pac)n(k)-5 b(age)33 b(\(whic)n(h)h(uses)427
-883 y(GKS)25 b(for)g(its)g(output\).)36 b(By)25 b(default,)h(no)f
-(graphics)e(pac)n(k)-5 b(age)23 b(is)i(link)n(ed)g(and)g(this)g(will)g
-(result)g(in)g(an)g(error)427 982 y(at)j(run)f(time)h(if)g(AST)g
-(routines)f(are)g(in)n(v)n(ok)n(ed)f(that)i(attempt)g(to)g(generate)e
-(graphical)g(output.)340 1115 y Fj(\017)45 b Fk(\\-pgplot":)40
-b(Requests)30 b(that)g(the)g(program)e(b)r(e)i(link)n(ed)g(so)f(that)h
-(2D)g(graphical)e(output)i(from)g(the)g(AST)427 1215
-y(library)25 b(is)h(displa)n(y)n(ed)e(via)i(the)g(standard)f(\(or)g
-(\\nativ)n(e"\))g(v)n(ersion)f(of)i(the)g(PGPLOT)f(graphics)f(pac)n(k)
--5 b(age.)427 1314 y(By)29 b(default,)h(no)e(graphics)g(pac)n(k)-5
-b(age)27 b(is)i(link)n(ed)g(and)g(this)g(will)g(result)g(in)g(an)g
-(error)e(at)h(run)h(time)h(if)f(AST)427 1414 y(routines)e(are)g(in)n(v)
-n(ok)n(ed)f(that)i(attempt)g(to)g(generate)e(graphical)g(output.)340
-1547 y Fj(\017)45 b Fk(\\-grf3d":)d(Requests)30 b(that)i(no)e(argumen)n
-(ts)g(b)r(e)h(generated)f(to)h(sp)r(ecify)g(whic)n(h)g(3D)g(graphics)f
-(system)h(is)427 1646 y(used)i(to)g(displa)n(y)g(output)g(from)g(the)h
-(AST)f(library)-7 b(.)53 b(Y)-7 b(ou)33 b(should)g(use)g(this)g(option)
-g(only)g(if)g(y)n(ou)g(ha)n(v)n(e)427 1746 y(implemen)n(ted)25
-b(an)e(in)n(terface)g(to)h(a)f(new)h(3D)f(graphics)g(system)g(y)n
-(ourself)g(and)g(wish)h(to)f(pro)n(vide)g(y)n(our)f(o)n(wn)427
-1846 y(argumen)n(ts)27 b(for)g(linking)g(with)h(it.)340
-1978 y Fj(\017)45 b Fk(\\-pgp3d":)c(Requests)30 b(that)h(the)g(program)
-d(b)r(e)j(link)n(ed)f(so)g(that)h(3D)f(graphical)f(output)i(from)f(the)
-h(AST)427 2078 y(library)i(is)h(displa)n(y)n(ed)f(via)g(the)i(Starlink)
-e(v)n(ersion)g(of)h(the)g(PGPLOT)f(graphics)f(pac)n(k)-5
-b(age)33 b(\(whic)n(h)h(uses)427 2178 y(GKS)29 b(for)g(its)g(output\).)
-42 b(By)29 b(default,)h(no)e(3D)h(graphics)f(pac)n(k)-5
-b(age)28 b(is)g(link)n(ed)h(and)g(this)h(will)f(result)g(in)g(an)427
-2277 y(error)d(at)h(run)h(time)g(if)g(AST)g(routines)f(are)g(in)n(v)n
-(ok)n(ed)f(that)i(attempt)g(to)f(generate)g(graphical)f(output.)340
-2410 y Fj(\017)45 b Fk(\\-pgplot3d":)33 b(Requests)23
-b(that)h(the)g(program)e(b)r(e)i(link)n(ed)f(so)g(that)h(3D)g
-(graphical)e(output)i(from)f(the)h(AST)427 2510 y(library)h(is)h
-(displa)n(y)n(ed)e(via)i(the)g(standard)f(\(or)g(\\nativ)n(e"\))g(v)n
-(ersion)f(of)i(the)g(PGPLOT)f(graphics)f(pac)n(k)-5 b(age.)427
-2609 y(By)32 b(default,)j(no)d(3D)g(graphics)f(pac)n(k)-5
-b(age)31 b(is)h(link)n(ed)h(and)f(this)h(will)f(result)g(in)h(an)f
-(error)f(at)h(run)g(time)h(if)427 2709 y(AST)28 b(routines)f(are)g(in)n
-(v)n(ok)n(ed)f(that)i(attempt)g(to)g(generate)e(graphical)g(output.)-2
-2871 y Fc(SLALIB)n(:)227 3017 y Fk(The)j(AST)h(distribution)f(includes)
-g(a)f(cut)i(do)n(wn)e(subset)h(of)g(the)g(C)g(v)n(ersion)f(of)g(the)i
-(SLALIB)f(library)e(written)227 3117 y(b)n(y)h(P)n(at)g(W)-7
-b(allace.)38 b(This)28 b(subset)h(con)n(tains)e(only)h(the)g(functions)
-h(needed)f(b)n(y)g(the)h(AST)g(library)-7 b(.)37 b(It)29
-b(is)f(built)h(as)227 3216 y(part)24 b(of)f(the)i(pro)r(cess)d(of)i
-(building)g(AST)h(and)e(is)h(distributed)g(under)g(GPL)g(\(and)g(is)f
-(th)n(us)h(compatible)g(with)g(the)227 3316 y(AST)f(license\).)35
-b(Previous)20 b(v)n(ersion)h(of)h(this)g(script)g(allo)n(w)n(ed)f(AST)h
-(applications)f(to)h(b)r(e)h(link)n(ed)f(against)e(external)227
-3416 y(SLALIB)34 b(libraries)e(\(either)i(F)-7 b(ortran)33
-b(or)g(C\))h(rather)e(than)i(the)g(in)n(ternal)f(v)n(ersion.)54
-b(The)34 b(curren)n(t)e(v)n(ersion)h(of)227 3515 y(this)g(script)f(do)r
-(es)g(not)h(pro)n(vide)e(this)h(option,)i(and)e(alw)n(a)n(ys)f(uses)h
-(the)g(in)n(ternal)g(SLALIB)g(library)-7 b(.)51 b(Ho)n(w)n(ev)n(er,)227
-3615 y(for)25 b(bac)n(kw)n(ard)f(compatibilit)n(y)-7
-b(,)26 b(this)g(script)f(still)h(allo)n(ws)f(the)h Ft(")p
-Fk(-fsla)p Ft(")e Fk(and)h Ft(")p Fk(-csla)p Ft(")f Fk(\015ags)h
-(\(previously)f(used)i(for)227 3714 y(selecting)h(whic)n(h)h(v)n
-(ersion)e(of)i(SLALIB)f(to)h(use\))f(to)h(b)r(e)g(sp)r(eci\014ed,)g
-(but)g(they)g(will)g(b)r(e)g(ignored.)p eop end
-%%Page: 523 533
-TeXDict begin 523 532 bop 3643 52 a FG(523)0 351 y FA(F)134
-b(FITS-W)l(CS)44 b(Co)l(v)l(erage)0 605 y FG(This)32
-b(app)s(endix)f(giv)m(es)i(details)h(of)e(the)h(FitsChan)f(class)h
-(implemen)m(tation)h(of)f(the)f(con)m(v)m(en)m(tions)j(describ)s(ed)0
-718 y(in)25 b(the)h(FITS-W)m(CS)g(pap)s(ers)e(a)m(v)-5
-b(ailable)28 b(at)f(h)m(ttp://\014ts.gsfc.nasa.go)m(v/\014ts)p
-Fy(_)p FG(w)m(cs.h)m(tml.)44 b(These)25 b(con)m(v)m(en)m(tions)0
-831 y(are)35 b(used)f(only)h(if)g(the)g(Enco)s(ding)f(attribute)h(of)g
-(the)g(FitsChan)g(has)f(the)h(v)-5 b(alue)35 b(\\FITS-W)m(CS")h
-(\(whether)0 944 y(set)f(explicitly)g(or)f(defaulted\).)52
-b(It)34 b(should)f(alw)m(a)m(ys)i(b)s(e)f(p)s(ossible)f(for)h(a)g(F)-8
-b(rameSet)36 b(to)e(b)s(e)g(read)f(\(using)h(the)0 1057
-y(AST)p Fy(_)p FG(READ)20 b(function\))h(from)f(a)h(FitsChan)f(con)m
-(taining)j(a)e(header)f(whic)m(h)g(conforms)h(to)g(these)g(con)m(v)m
-(en)m(tions.)0 1170 y(Ho)m(w)m(ev)m(er,)30 b(only)c(those)i(F)-8
-b(rameSets)27 b(whic)m(h)g(are)g(compatible)h(with)e(the)h(FITS-W)m(CS)
-f(mo)s(del)h(can)g(b)s(e)f Fx(written)0 1283 y FG(to)e(a)f(FitsChan)f
-(using)h(the)g(AST)p Fy(_)p FG(WRITE)e(function.)38 b(F)-8
-b(or)24 b(instance,)h(if)e(the)g(curren)m(t)f(F)-8 b(rame)24
-b(of)f(a)g(F)-8 b(rameSet)0 1396 y(is)28 b(re-mapp)s(ed)e(using,)i(sa)m
-(y)-8 b(,)30 b(an)d(arbitrary)g(MathMap)i(then)e(the)h(F)-8
-b(rameSet)29 b(will)f(no)f(longer)h(b)s(e)f(compatible)0
-1508 y(with)j(the)h(FITS-W)m(CS)f(mo)s(del,)g(and)g(so)g(will)h(not)g
-(b)s(e)f(written)g(out)h(successfully)f(to)h(a)g(FitsChan.)0
-1672 y(The)36 b(follo)m(wing)h(sub-sections)g(describ)s(e)e(the)i
-(details)g(of)f(the)h(implemen)m(tation)g(of)g(eac)m(h)g(of)f(the)h
-(\014rst)e(four)0 1785 y(FITS-W)m(CS)e(pap)s(ers.)49
-b(Here,)35 b(the)f(term)f(\\pixel)h(axes")h(is)e(used)g(to)h(refer)f
-(to)i(the)e(FITS)g(pixel)h(co)s(ordinates)0 1898 y(\(i.e.)72
-b(the)41 b(cen)m(tre)g(of)g(the)g(\014rst)e(image)j(pixel)f(has)f(a)h
-(v)-5 b(alue)41 b(1.0)g(on)g(eac)m(h)g(pixel)g(axis\);)47
-b(the)40 b(term)h(\\IW)m(C)0 2011 y(axes")35 b(is)f(used)f(to)i(refer)e
-(to)i(the)f(axes)g(of)g(the)g(In)m(termediate)i(W)-8
-b(orld)34 b(Co)s(ordinate)g(system;)i(and)d(the)h(term)0
-2124 y(\\W)m(CS)28 b(axes")g(is)g(used)e(to)i(refer)f(to)h(the)g(axes)g
-(of)g(the)f(\014nal)g(ph)m(ysical)h(co)s(ordinate)g(system)g(describ)s
-(ed)e(b)m(y)h(the)0 2236 y(CTYPE)p Fx(i)39 b FG(k)m(eyw)m(ords.)0
-2532 y Fw(F.1)113 b(P)m(ap)s(er)37 b(I)g(-)h(General)h(Linear)f(Co)s
-(ordinates)0 2755 y FG(When)27 b(reading)g(a)g(F)-8 b(rameSet)29
-b(from)d(a)h(FitsChan,)h(these)g(con)m(v)m(en)m(tions)h(are)e(used)f
-(if)h(the)h(CTYPE)p Fx(i)35 b FG(k)m(eyw)m(ord)0 2868
-y(v)-5 b(alues)42 b(within)f(the)h(FitsChan)g(do)f(not)h(conform)g(to)g
-(the)g(con)m(v)m(en)m(tions)i(describ)s(ed)c(in)i(later)g(pap)s(ers,)i
-(in)0 2981 y(whic)m(h)33 b(case)i(the)f(axes)g(are)g(assumed)f(to)h(b)s
-(e)f(linear.)51 b(When)33 b(writing)h(a)g(F)-8 b(rameSet)34
-b(to)h(a)f(FitsChan,)g(these)0 3094 y(con)m(v)m(en)m(tions)41
-b(are)f(used)f(for)g(axes)h(whic)m(h)f(are)h(describ)s(ed)e(b)m(y)h(a)h
-(simple)f(F)-8 b(rame)40 b(\()p Fx(i.e.)67 b FG(not)40
-b(a)g(SkyF)-8 b(rame,)0 3207 y(Sp)s(ecF)g(rame,)31 b
-Fx(etc.)p FG(\).)0 3370 y(T)-8 b(able)31 b(1)g(describ)s(es)e(the)i
-(use)f(made)g(b)m(y)h(AST)e(of)i(eac)m(h)g(k)m(eyw)m(ord)g(de\014ned)e
-(b)m(y)i(FITS-W)m(CS)f(pap)s(er)f(I.)0 3663 y FE(F.1.1)105
-b(Requiremen)m(ts)36 b(for)f(a)f(Successful)j(W)-9 b(rite)35
-b(Op)s(eration)0 3885 y FG(When)f(writing)g(a)h(F)-8
-b(rameSet)35 b(in)f(whic)m(h)f(the)i(W)m(CS)f(F)-8 b(rame)35
-b(is)f(a)h(simple)f(F)-8 b(rame)35 b(to)g(a)f(FitsChan,)h(success)0
-3998 y(dep)s(ends)28 b(on)i(the)g(Mapping)g(from)g(pixel)g(co)s
-(ordinates)h(\(the)f(base)g(F)-8 b(rame)31 b(in)f(the)g(F)-8
-b(rameSet\))32 b(to)e(the)g(W)m(CS)0 4111 y(F)-8 b(rame)31
-b(b)s(eing)f(linear.)41 b(The)30 b(write)h(op)s(eration)g(will)f(fail)h
-(if)g(this)f(is)g(not)h(the)g(case.)0 4404 y FE(F.1.2)105
-b(Use)35 b(and)g(Choice)g(of)g(CTYPE)p Fa(i)45 b FE(k)m(eyw)m(ords)0
-4626 y FG(When)37 b(reading)g(a)h(F)-8 b(rameSet)38 b(from)f(a)g
-(FitsChan)g(the)h(CTYPE)p Fx(i)45 b FG(v)-5 b(alues)38
-b(in)e(the)i(FitsChan)f(are)g(used)g(to)0 4739 y(set)32
-b(the)f(Sym)m(b)s(ol)g(attributes)h(of)f(the)g(corresp)s(onding)g(W)m
-(CS)g(F)-8 b(rame.)44 b(The)31 b(Lab)s(el)g(attributes)h(of)f(the)g(W)m
-(CS)0 4852 y(F)-8 b(rame)38 b(are)f(set)g(from)g(the)g(CNAME)p
-Fx(i)46 b FG(k)m(eyw)m(ords,)39 b(if)e(presen)m(t)g(in)f(the)h(header.)
-60 b(Otherwise)37 b(they)g(are)g(set)0 4965 y(from)42
-b(the)g(CTYPE)p Fx(i)51 b FG(commen)m(ts)43 b(strings)g(in)f(the)g
-(header,)k(so)c(long)h(as)g(eac)m(h)h(axis)e(has)h(a)f(unique)g(non-)0
-5078 y(blank)d(commen)m(t.)67 b(Otherwise,)41 b(the)e(Lab)s(el)g
-(attributes)g(are)h(set)f(to)h(the)f(CTYPE)p Fx(i)47
-b FG(v)-5 b(alues.)67 b(The)38 b(ab)s(o)m(v)m(e)0 5191
-y(pro)s(cedure)c(is)h(o)m(v)m(er-ridden)h(if)f(the)g(axis)g(t)m(yp)s
-(es)g(conform)g(to)h(the)f(con)m(v)m(en)m(tions)j(describ)s(ed)c(in)g
-(pap)s(er)g(I)s(I)g(or)0 5304 y(I)s(I)s(I,)29 b(as)i(describ)s(ed)e(b)s
-(elo)m(w.)0 5467 y(When)g(writing)h(a)g(F)-8 b(rameSet)31
-b(to)f(a)g(FitsChan,)g(eac)m(h)h(CTYPE)p Fx(i)38 b FG(v)-5
-b(alue)30 b(is)g(set)g(to)g(the)g(v)-5 b(alue)30 b(of)g(the)g(Sym)m(b)s
-(ol)0 5580 y(attribute)d(of)g(the)g(corresp)s(onding)e(axis)i(in)g(the)
-f(F)-8 b(rame)28 b(b)s(eing)e(written.)40 b(If)26 b(a)h(v)-5
-b(alue)27 b(has)f(b)s(een)g(set)h(explicitly)0 5693 y(for)i(the)g(axis)
-h(Lab)s(el)f(attribute,)h(it)g(is)f(used)g(as)g(the)h(axis)f(commen)m
-(t)i(\(except)f(that)g(an)m(y)f(existing)i(commen)m(ts)p
-eop end
-%%Page: 524 534
-TeXDict begin 524 533 bop 0 52 a FG(524)2489 b Fz(F)91
-b(FITS-W)m(CS)30 b(CO)m(VERA)m(GE)p 0 853 3841 4 v -2
-965 4 113 v 115 932 a FE(Keyw)m(ord)p 640 965 V 798 w(Read)p
-2240 965 V 1352 w(W)-9 b(rite)p 3839 965 V 0 969 3841
-4 v -2 1307 4 339 v 50 1048 a FG(W)m(CSAXES)p Fx(a)p
-640 1307 V 140 w FG(Ignored.)p 2240 1307 V 1273 w(Set)27
-b(to)h(the)f(n)m(um)m(b)s(er)e(of)i(axes)h(in)e(the)h(W)m(CS)2291
-1161 y(F)-8 b(rame)51 b(-)g(only)f(written)g(if)h(di\013eren)m(t)f(to)
-2291 1274 y(NAXIS.)p 3839 1307 V -2 1533 4 226 v 50 1386
-a(CR)-10 b(V)g(AL)p Fx(ia)p 640 1533 V 262 w FG(Used)24
-b(to)i(create)g(the)f(pixel)g(to)h(W)m(CS)f(Map-)692
-1499 y(ping.)p 2240 1533 V 2291 1386 a(Alw)m(a)m(ys)31
-b(written)f(\(see)h(\\Choice)g(of)f(Refer-)2291 1499
-y(ence)h(P)m(oin)m(t")h(b)s(elo)m(w\).)p 3839 1533 V
--2 1759 V 50 1612 a(CRPIX)p Fx(ja)p 640 1759 V 272 w
-FG(Used)24 b(to)i(create)g(the)f(pixel)g(to)h(W)m(CS)f(Map-)692
-1725 y(ping.)p 2240 1759 V 2291 1612 a(Alw)m(a)m(ys)31
-b(written)f(\(see)h(\\Choice)g(of)f(Refer-)2291 1725
-y(ence)h(P)m(oin)m(t")h(b)s(elo)m(w\).)p 3839 1759 V
--2 1985 V 50 1838 a(CDEL)-8 b(T)p Fx(ia)p 640 1985 V
-256 w FG(Used)24 b(to)i(create)g(the)f(pixel)g(to)h(W)m(CS)f(Map-)692
-1951 y(ping.)p 2240 1985 V 2291 1838 a(Only)63 b(written)h(if)g(the)g
-(CDMatrix)h(at-)2291 1951 y(tribute)30 b(of)h(the)g(FitsChan)f(is)g
-(set)h(to)g(zero.)p 3839 1985 V -2 2211 V 50 2064 a(CR)m(OT)-8
-b(A)p Fx(i)p 640 2211 V 287 w FG(Used)24 b(to)i(create)g(the)f(pixel)g
-(to)h(W)m(CS)f(Map-)692 2177 y(ping.)p 2240 2211 V 2291
-2064 a(Only)20 b(written)i(in)e(FITS-AIPS)g(and)h(FITS-)2291
-2177 y(AIPS++)29 b(enco)s(dings.)p 3839 2211 V -2 2888
-4 678 v 50 2290 a(CTYPE)p Fx(ia)p 640 2888 V 244 w FG(Used)66
-b(to)h(c)m(ho)s(ose)h(the)f(class)g(and)f(at-)692 2403
-y(tributes)46 b(of)h(the)f(W)m(CS)h(F)-8 b(rame,)52 b(and)46
-b(to)692 2516 y(create)63 b(the)f(pixel)g(to)g(W)m(CS)g(Mapping)692
-2629 y(\(note,)35 b(\\STOKES")d(and)h(\\COMPLEX")692
-2741 y(axes)53 b(are)g(treated)h(as)f(unkno)m(wn)e(linear)692
-2854 y(axes\).)p 2240 2888 V 2291 2290 a(Alw)m(a)m(ys)36
-b(written)f(\(see)g(\\Use)h(and)d(Choice)2291 2403 y(of)e(CTYPE)e(k)m
-(eyw)m(ords")i(b)s(elo)m(w\).)p 3839 2888 V -2 3340 4
-452 v 50 2967 a(CUNIT)p Fx(ia)p 640 3340 V 267 w FG(Used)25
-b(to)i(set)g(the)f(Units)g(attributes)h(of)f(the)692
-3080 y(W)m(CS)k(F)-8 b(rame.)p 2240 3340 V 2291 2967
-a(Only)32 b(written)h(if)g(the)g(Units)f(attribute)i(of)2291
-3080 y(the)39 b(W)m(CS)f(F)-8 b(rame)39 b(has)f(b)s(een)g(set)h
-(explic-)2291 3193 y(itly)-8 b(.)84 b(If)44 b(so,)49
-b(the)44 b(Units)h(v)-5 b(alue)45 b(for)f(eac)m(h)2291
-3306 y(axis)31 b(is)f(used)g(as)h(the)f(CUNIT)g(v)-5
-b(alue.)p 3839 3340 V -2 3566 4 226 v 50 3419 a(PC)p
-Fx(i)p Fy(_)p Fx(j)13 b(a)p 640 3566 V 351 w FG(Used)24
-b(to)i(create)g(the)f(pixel)g(to)h(W)m(CS)f(Map-)692
-3532 y(ping.)p 2240 3566 V 2291 3419 a(Only)63 b(written)h(if)g(the)g
-(CDMatrix)h(at-)2291 3532 y(tribute)30 b(of)h(the)g(FitsChan)f(is)g
-(set)h(to)g(zero.)p 3839 3566 V -2 3904 4 339 v 50 3645
-a(CD)p Fx(i)p Fy(_)p Fx(j)13 b(a)p 640 3904 V 344 w FG(Used)24
-b(to)i(create)g(the)f(pixel)g(to)h(W)m(CS)f(Map-)692
-3758 y(ping.)p 2240 3904 V 2291 3645 a(Only)63 b(written)h(if)g(the)g
-(CDMatrix)h(at-)2291 3758 y(tribute)23 b(of)g(the)h(FitsChan)e(is)i
-(set)f(to)h(a)f(non-)2291 3871 y(zero)31 b(v)-5 b(alue.)p
-3839 3904 V -2 4017 4 113 v 50 3983 a(PV)p Fx(i)p Fy(_)p
-Fx(ma)p 640 4017 V 316 w FG(Ignored)30 b(for)g(linear)g(axes.)p
-2240 4017 V 683 w(Not)h(written)g(if)f(the)h(axes)g(are)g(linear.)p
-3839 4017 V -2 4130 V 50 4096 a(PS)p Fx(i)p Fy(_)p Fx(ma)p
-640 4130 V 333 w FG(Ignored.)p 2240 4130 V 1273 w(Not)g(used.)p
-3839 4130 V -2 4582 4 452 v 50 4209 a(W)m(CSNAME)p Fx(a)p
-640 4582 V 108 w FG(Used)41 b(to)h(set)g(the)f(Domain)h(attribute)g(of)
-692 4322 y(the)30 b(W)m(CS)g(F)-8 b(rame.)p 2240 4582
-V 2291 4209 a(Only)34 b(written)h(if)f(the)h(Domain)g(attribute)2291
-4322 y(of)23 b(the)f(W)m(CS)h(F)-8 b(rame)23 b(has)f(b)s(een)g(set)h
-(explic-)2291 4435 y(itly)-8 b(.)40 b(If)26 b(so,)h(the)f(Domain)g(v)-5
-b(alue)26 b(is)g(used)f(as)2291 4548 y(the)31 b(W)m(CSNAME)g(v)-5
-b(alue.)p 3839 4582 V -2 4695 4 113 v 50 4661 a(CRDER)p
-Fx(ia)p 640 4695 V 237 w FG(Ignored.)p 2240 4695 V 1273
-w(Not)31 b(used.)p 3839 4695 V -2 4808 V 50 4774 a(CSYER)p
-Fx(ia)p 640 4808 V 254 w FG(Ignored.)p 2240 4808 V 1273
-w(Not)g(used.)p 3839 4808 V 0 4811 3841 4 v 986 5086
-a(T)-8 b(able)31 b(1:)41 b(Use)31 b(of)g(FITS-W)m(CS)f(P)m(ap)s(er)g(I)
-g(k)m(eyw)m(ords)p eop end
-%%Page: 525 535
-TeXDict begin 525 534 bop 0 52 a Fz(F.1)92 b(P)m(ap)s(er)30
-b(I)g(-)h(General)g(Linear)f(Co)s(ordinates)1933 b FG(525)0
-351 y(in)33 b(the)g(FitsChan)h(tak)m(e)g(precedence)g(if)f(the)h(k)m
-(eyw)m(ord)g(v)-5 b(alue)33 b(has)g(not)h(c)m(hanged\).)50
-b(The)33 b(ab)s(o)m(v)m(e)i(pro)s(cedure)0 464 y(is)d(o)m(v)m
-(er-ridden)g(if)f(the)h(F)-8 b(rame)32 b(is)g(a)g(SkyF)-8
-b(rame)32 b(or)f(a)h(Sp)s(ecF)-8 b(rame,)33 b(in)e(whic)m(h)g(case)i
-(the)f(CTYPE)p Fx(i)39 b FG(v)-5 b(alue)32 b(is)0 577
-y(deriv)m(ed)i(from)e(the)i(System)f(attribute)i(of)e(the)h(F)-8
-b(rame)34 b(and)f(the)h(nature)f(of)g(the)h(pixel)g(to)g(W)m(CS)g
-(Mapping)0 690 y(according)d(to)g(the)g(con)m(v)m(en)m(tions)h(of)f
-(pap)s(ers)e(I)s(I)h(and)f(I)s(I)s(I,)g(as)i(describ)s(ed)e(b)s(elo)m
-(w.)0 986 y FE(F.1.3)105 b(Choice)35 b(of)g(Reference)h(P)m(oin)m(t)0
-1210 y FG(When)31 b(writing)g(a)g(F)-8 b(rameSet)32 b(to)g(a)f
-(FitsChan,)h(the)f(pixel)g(co)s(ordinates)h(of)f(the)g(reference)g(p)s
-(oin)m(t)g(for)g(linear)0 1323 y(axes)g(\(i.e.)42 b(the)30
-b(CRPIX)p Fx(j)43 b FG(v)-5 b(alues\))31 b(are)g(c)m(hosen)g(as)g
-(follo)m(ws:)136 1590 y Fu(\017)46 b FG(If)35 b(the)h(F)-8
-b(rameSet)37 b(is)e(b)s(eing)g(written)h(to)g(a)g(FitsChan)f(whic)m(h)g
-(previously)h(con)m(tained)g(a)g(set)g(of)g(axis)227
-1703 y(descriptions)i(with)f(the)g(same)h(iden)m(tifying)g(letter,)i
-(then)d(the)h(previous)f(CR)-10 b(V)g(AL)p Fx(j)13 b
-FG(v)-5 b(alues)37 b(are)h(con-)227 1816 y(v)m(erted)c(in)m(to)h(the)f
-(co)s(ordinate)g(system)g(of)f(the)h(F)-8 b(rame)34 b(b)s(eing)f
-(written)h(\(if)g(p)s(ossible\).)50 b(These)33 b(v)-5
-b(alues)227 1929 y(are)29 b(then)e(transformed)h(in)m(to)h(the)f(pixel)
-g(F)-8 b(rame,)30 b(and)e(the)g(closest)h(in)m(teger)h(pixel)e(v)-5
-b(alues)29 b(are)f(used)f(as)227 2042 y(the)k(CRPIX)f(k)m(eyw)m(ords.)
-136 2233 y Fu(\017)46 b FG(If)34 b(the)g(ab)s(o)m(v)m(e)h(step)e(could)
-h(not)g(b)s(e)f(p)s(erformed)g(for)g(an)m(y)h(reason,)h(the)f(cen)m
-(tral)h(pixel)f(is)g(used)f(as)h(the)227 2346 y(reference)e(p)s(oin)m
-(t.)45 b(This)30 b(requires)h(the)h(image)h(dimensions)e(to)h(b)s(e)f
-(presen)m(t)h(in)f(the)h(FitsChan)f(in)g(the)227 2459
-y(form)f(of)h(a)f(set)h(of)g(NAXIS)p Fx(j)43 b FG(k)m(eyw)m(ord)31
-b(v)-5 b(alues.)136 2650 y Fu(\017)46 b FG(If)33 b(b)s(oth)f(the)h(ab)s
-(o)m(v)m(e)g(t)m(w)m(o)i(steps)d(failed)i(for)e(an)m(y)h(axis,)h(then)f
-(the)g(pixel)g(reference)g(p)s(osition)g(is)f(set)i(to)227
-2763 y(a)d(v)-5 b(alue)31 b(of)f(1.0)i(on)e(the)h(pixel)f(axis.)0
-3031 y(The)g(pixel)h(to)g(W)m(CS)f(Mapping)g(is)h(then)f(used)f(to)j
-(\014nd)c(the)j(corresp)s(onding)e(CR)-10 b(V)g(AL)p
-Fx(j)13 b FG(v)-5 b(alues.)0 3195 y(Again,)29 b(the)f(ab)s(o)m(v)m(e)h
-(pro)s(cedure)e(is)h(o)m(v)m(er-ridden)g(if)g(the)g(F)-8
-b(rame)28 b(is)g(a)g(SkyF)-8 b(rame)29 b(or)e(a)h(Sp)s(ecF)-8
-b(rame,)29 b(in)f(whic)m(h)0 3308 y(case)j(the)g(con)m(v)m(en)m(tions)h
-(of)f(pap)s(ers)e(I)s(I)h(and)f(I)s(I)s(I)g(are)i(used)f(as)g(describ)s
-(ed)f(b)s(elo)m(w.)0 3604 y FE(F.1.4)105 b(Choice)35
-b(of)g(Axis)g(Ordering)0 3828 y FG(When)e(reading)h(a)f(F)-8
-b(rameSet)35 b(from)e(a)h(FitsChan,)g(W)m(CS)f(axis)h
-Fp(i)g FG(in)f(the)h(curren)m(t)f(F)-8 b(rame)34 b(of)g(the)f
-(resulting)0 3941 y(F)-8 b(rameSet)32 b(corresp)s(onds)d(to)i(axis)g
-Fp(i)f FG(in)g(the)h(FITS)e(header.)0 4105 y(When)37
-b(writing)h(a)g(F)-8 b(rameSet)39 b(to)f(a)g(FitsChan,)i(the)e(axis)g
-(ordering)f(for)h(the)f(FITS)g(header)h(is)g(c)m(hosen)g(to)0
-4218 y(mak)m(e)30 b(the)e(CD)p Fx(i)p Fy(_)p Fx(j)42
-b FG(or)28 b(PC)p Fx(i)p Fy(_)p Fx(j)41 b FG(matrix)29
-b(predominately)g(diagonal.)41 b(This)28 b(means)h(that)g(the)f(axis)i
-(n)m(um)m(b)s(ering)0 4331 y(in)g(the)h(FITS)e(header)h(will)h(not)g
-(necessarily)g(b)s(e)f(the)g(same)h(as)g(that)g(in)f(the)g(AST)g(F)-8
-b(rame.)0 4627 y FE(F.1.5)105 b(Alternate)34 b(Axis)h(Descriptions)0
-4851 y FG(When)41 b(reading)h(a)f(F)-8 b(rameSet)43 b(from)e(a)g
-(FitsChan)h(whic)m(h)f(con)m(tains)h(alternate)h(axis)f(descriptions,)i
-(eac)m(h)0 4964 y(complete)37 b(set)f(of)g(axis)g(descriptions)f
-(results)h(in)f(a)h(single)g(F)-8 b(rame)37 b(b)s(eing)e(added)g(to)h
-(the)g(\014nal)f(F)-8 b(rameSet,)0 5077 y(connected)42
-b(via)f(an)g(appropriate)f(Mapping)h(to)g(the)g(base)g(pixel)g(F)-8
-b(rame.)73 b(The)40 b(Iden)m(t)h(attribute)g(of)g(the)0
-5190 y(F)-8 b(rame)36 b(is)f(set)g(to)h(hold)e(the)i(single)f(alphab)s
-(etical)h(c)m(haracter)h(whic)m(h)d(is)h(used)f(to)i(iden)m(tify)f(the)
-g(set)h(of)f(axis)0 5303 y(descriptions)30 b(within)g(the)h(FITS)e
-(header)h(\(a)i(single)f(space)g(is)f(used)g(for)g(the)g(primary)g
-(axis)h(descriptions\).)0 5467 y(When)37 b(writing)h(a)g(F)-8
-b(rameSet)39 b(to)f(a)g(FitsChan,)h(it)f(is)g(assumed)f(that)h(the)g
-(base)f(F)-8 b(rame)39 b(represen)m(ts)e(pixel)0 5580
-y(co)s(ordinates,)g(and)e(the)g(curren)m(t)g(F)-8 b(rame)36
-b(represen)m(ts)f(the)h(primary)e(axis)i(descriptions.)55
-b(If)34 b(there)i(are)f(an)m(y)0 5693 y(other)23 b(F)-8
-b(rames)24 b(presen)m(t)e(in)h(the)g(F)-8 b(rameSet,)25
-b(an)e(attempt)h(is)f(made)f(to)i(create)g(a)f(complete)i(set)e(of)g
-(\\alternate")p eop end
-%%Page: 526 536
-TeXDict begin 526 535 bop 0 52 a FG(526)2489 b Fz(F)91
-b(FITS-W)m(CS)30 b(CO)m(VERA)m(GE)0 351 y FG(set)j(of)f(k)m(eyw)m(ords)
-h(describing)f(eac)m(h)i(additional)f(F)-8 b(rame.)48
-b(The)32 b(\014rst)f(c)m(haracter)j(in)e(the)h(Iden)m(t)f(attribute)h
-(of)0 464 y(the)i(F)-8 b(rame)35 b(is)g(used)f(as)h(the)g(single)g(c)m
-(haracter)h(descriptor)f(to)g(b)s(e)f(app)s(ended)f(to)j(the)e(k)m(eyw)
-m(ord,)j(with)d(the)0 577 y(pro)m(viso)c(that)h(a)f(giv)m(en)h(c)m
-(haracter)h(can)e(only)g(b)s(e)f(used)g(once.)42 b(If)29
-b(a)i(second)f(F)-8 b(rame)30 b(is)g(found)f(with)h(an)f(Iden)m(t)0
-690 y(attribute)g(whic)m(h)e(has)h(already)g(b)s(een)f(used,)h(its)g
-(Iden)m(t)g(attribute)h(is)f(ignored)g(and)f(the)h(next)g(free)g(c)m
-(haracter)0 803 y(is)c(used)f(instead.)39 b(Note,)26
-b(failure)f(to)f(write)g(a)g(set)h(of)f(alternate)h(axis)g
-(descriptions)e(do)s(es)h(not)g(result)g(in)f(failure)0
-916 y(of)32 b(the)g(en)m(tire)g(write)g(op)s(eration:)44
-b(the)32 b(primary)f(axis)h(descriptions)g(are)g(still)g(written,)h
-(together)g(with)e(an)m(y)0 1029 y(other)g(alternate)h(axis)f
-(descriptions)f(whic)m(h)g(can)h(b)s(e)e(pro)s(duced)g(successfully)-8
-b(.)0 1335 y Fw(F.2)113 b(P)m(ap)s(er)37 b(I)s(I)g(-)h(Celestial)g(Co)s
-(ordinates)0 1562 y FG(These)33 b(con)m(v)m(en)m(tions)i(are)f(used)e
-(when)g(reading)i(a)f(F)-8 b(rameSet)34 b(from)f(a)h(FitsChan)f(con)m
-(taining)h(appropriate)0 1675 y(CTYPE)p Fx(i)39 b FG(v)-5
-b(alues,)31 b(and)e(when)h(writing)g(a)h(F)-8 b(rameSet)31
-b(in)g(whic)m(h)f(the)g(W)m(CS)h(F)-8 b(rame)31 b(is)f(a)h(SkyF)-8
-b(rame.)0 1841 y(T)g(able)31 b(2)g(describ)s(es)e(the)i(use)f(made)g(b)
-m(y)g(AST)g(of)g(eac)m(h)h(k)m(eyw)m(ord)g(whose)f(meaning)h(is)f
-(de\014ned)f(or)h(extended)0 1954 y(b)m(y)g(FITS-W)m(CS)g(pap)s(er)g(I)
-s(I.)0 2257 y FE(F.2.1)105 b(Requiremen)m(ts)36 b(for)f(a)f(Successful)
-j(W)-9 b(rite)35 b(Op)s(eration)0 2484 y FG(When)43 b(writing)g(a)h(F)
--8 b(rameSet)45 b(in)e(whic)m(h)g(the)g(W)m(CS)h(F)-8
-b(rame)44 b(is)f(a)h(SkyF)-8 b(rame)44 b(to)g(a)g(FitsChan,)i(success)0
-2597 y(dep)s(ends)29 b(on)h(the)g(follo)m(wing)i(conditions)f(b)s(eing)
-f(met:)111 2870 y(1.)46 b(The)h(Mapping)f(from)h(pixel)g(co)s
-(ordinates)h(\(the)f(base)g(F)-8 b(rame)48 b(in)e(the)h(F)-8
-b(rameSet\))49 b(to)e(the)g(W)m(CS)227 2983 y(SkyF)-8
-b(rame)31 b(includes)f(a)h(WcsMap.)111 3179 y(2.)46 b(The)30
-b(Mapping)g(prior)g(to)h(the)g(WcsMap)g(\()p Fx(i.e.)40
-b FG(from)30 b(pixel)h(to)g(IW)m(C\))g(is)g(linear.)111
-3374 y(3.)46 b(The)34 b(Mapping)g(after)g(the)g(WcsMap)h(\()p
-Fx(i.e.)52 b FG(from)33 b(nativ)m(e)i(spherical)g(to)f(celestial)j(co)s
-(ordinates\))e(is)f(a)227 3487 y(spherical)d(rotation)h(for)e(the)g
-(celestial)j(axes,)e(and)f(linear)h(for)f(an)m(y)h(other)f(axes.)0
-3760 y(If)g(an)m(y)h(of)f(the)h(ab)s(o)m(v)m(e)g(conditions)g(do)f(not)
-h(hold,)f(the)h(write)f(op)s(eration)h(will)g(b)s(e)f(unsuccessful.)0
-4063 y FE(F.2.2)105 b(Choice)35 b(of)g(LONPOLE/LA)-9
-b(TPOLE)0 4290 y FG(When)39 b(writing)h(a)f(F)-8 b(rameSet)41
-b(to)f(a)g(FitsChan,)i(the)d(c)m(hoice)i(of)f(LONPOLE)e(and)h(LA)-8
-b(TPOLE)39 b(v)-5 b(alues)39 b(is)0 4403 y(determined)30
-b(as)h(follo)m(ws:)111 4677 y(1.)46 b(If)41 b(the)f(pro)5
-b(jection)42 b(represen)m(ted)e(b)m(y)h(the)g(WcsMap)h(is)e(azim)m
-(uthal,)45 b(then)c(an)m(y)g(v)-5 b(alues)41 b(set)g(for)f(at-)227
-4790 y(tributes)33 b(\\PV)p Fx(i)9 b Fy(_)p FG(3")34
-b(and)e(\\PV)p Fx(i)9 b Fy(_)p FG(4")34 b(\(where)f(\\)p
-Fx(i)9 b FG(")34 b(is)f(the)g(index)g(of)g(the)g(longitude)g(axis\))h
-(within)e(the)227 4903 y(WcsMap)h(are)g(used)e(as)h(the)g(LONPOLE)f
-(and)g(LA)-8 b(TPOLE)32 b(v)-5 b(alues.)46 b(Reading)32
-b(a)g(F)-8 b(rameSet)34 b(from)d(a)227 5016 y(FITS-W)m(CS)i(header)f
-(results)g(in)h(the)g(original)h(LONPOLE)d(and)h(LA)-8
-b(TPOLE)32 b(v)-5 b(alues)33 b(b)s(eing)f(stored)227
-5128 y(within)27 b(a)i(WcsMap)f(within)f(the)h(F)-8 b(rameSet.)41
-b(Consequen)m(tly)-8 b(,)29 b(if)f(a)g(F)-8 b(rameSet)29
-b(is)f(read)g(from)f(a)h(FITS-)227 5241 y(W)m(CS)k(header)g(and)f(it)h
-(is)g(subsequen)m(tly)g(written)f(out)h(to)h(a)f(new)g(FITS-W)m(CS)f
-(header,)h(the)g(original)227 5354 y(LONPOLE)g(and)h(LA)-8
-b(TPOLE)33 b(v)-5 b(alues)33 b(will)h(usually)f(b)s(e)g(used)f(in)h
-(the)h(new)e(header)h(\(the)h(exception)227 5467 y(b)s(eing)h(if)g(the)
-g(WcsMap)h(has)f(b)s(een)g(explicitly)h(mo)s(di\014ed)e(b)s(efore)h(b)s
-(eing)g(written)g(out)g(again\).)56 b(An)m(y)227 5580
-y(extra)28 b(rotation)h(of)e(the)g(sky)g(is)g(absorb)s(ed)f(in)m(to)i
-(the)g(CD)p Fx(i)p Fy(_)p Fx(j)39 b FG(or)27 b(PC)p Fx(i)p
-Fy(_)p Fx(j)40 b FG(matrix)27 b(\(this)g(is)h(p)s(ossible)e(only)227
-5693 y(if)31 b(the)f(pro)5 b(jection)31 b(is)g(azim)m(uthal\).)p
-eop end
-%%Page: 527 537
-TeXDict begin 527 536 bop 0 52 a Fz(F.2)92 b(P)m(ap)s(er)30
-b(I)s(I)g(-)g(Celestial)i(Co)s(ordinates)2152 b FG(527)p
-0 853 3800 4 v -2 965 4 113 v 94 932 a FE(Keyw)m(ord)p
-598 965 V 777 w(Read)p 2198 965 V 1352 w(W)-9 b(rite)p
-3798 965 V 0 969 3800 4 v -2 1533 4 565 v 50 1048 a FG(CTYPE)p
-Fx(ia)p 598 1533 V 202 w FG(All)28 b(co)s(ordinate)g(systems)f(and)g
-(pro)5 b(jection)650 1161 y(t)m(yp)s(es)32 b(listed)g(in)f(pap)s(er)g
-(I)s(I)g(are)h(supp)s(orted)650 1274 y(\(note,)27 b(\\CUBEF)-10
-b(A)m(CE")26 b(axes)g(are)f(treated)650 1386 y(as)32
-b(unkno)m(wn)e(linear)i(axes\).)45 b(In)31 b(addition,)650
-1499 y("-HPX")h(\(HEALPix\))f(is)f(supp)s(orted.)p 2198
-1533 V 2249 1048 a(Determined)45 b(b)m(y)e(the)h(System)g(attribute)
-2249 1161 y(of)52 b(the)g(SkyF)-8 b(rame)52 b(and)f(the)h(WcsT)m(yp)s
-(e)2249 1274 y(attribute)45 b(of)f(the)g(WcsMap)h(within)e(the)2249
-1386 y(F)-8 b(rameSet.)p 3798 1533 V -2 1646 4 113 v
-50 1612 a(CUNIT)p Fx(ia)p 598 1646 V 225 w FG(Ignored)30
-b(\(assumed)g(to)h(b)s(e)f('degrees'\).)p 2198 1646 V
-235 w(Not)i(written.)p 3798 1646 V -2 1985 4 339 v 50
-1725 a(PV)p Fx(i)p Fy(_)p Fx(ma)p 598 1985 V 274 w FG(Used)25
-b(to)g(create)i(the)e(pixel)g(to)g(W)m(CS)g(Map-)650
-1838 y(ping)f(\(v)-5 b(alues)24 b(are)h(stored)f(as)g(attributes)h(of)
-650 1951 y(a)31 b(WcsMap)g(within)f(this)g(Mapping\).)p
-2198 1985 V 2249 1725 a(V)-8 b(alues)25 b(are)f(obtained)g(from)f(the)g
-(WcsMap)2249 1838 y(in)31 b(the)f(pixel)h(to)g(W)m(CS)f(Mapping.)p
-3798 1985 V -2 2437 4 452 v 50 2064 a(LONPOLE)p Fx(a)p
-598 2437 V 106 w FG(Used)25 b(to)g(create)i(the)e(pixel)g(to)g(W)m(CS)g
-(Map-)650 2177 y(ping.)106 b(Also)54 b(stored)e(as)h(a)g(PVi)p
-Fy(_)p FG(m)f(at-)650 2290 y(tribute)45 b(for)f(the)i(longitude)f(axis)
-g(of)h(the)650 2403 y(WcsMap.)p 2198 2437 V 2249 2064
-a(Only)c(written)g(if)h(not)f(equal)h(to)g(the)f(de-)2249
-2177 y(fault)52 b(v)-5 b(alue)52 b(de\014ned)e(in)h(pap)s(er)f(I)s(I)g
-(\(see)2249 2290 y(\\Choice)72 b(of)f(LONPOLE/LA)-8 b(TPOLE")2249
-2403 y(b)s(elo)m(w\).)p 3798 2437 V -2 2888 V 50 2516
-a(LA)g(TPOLE)p Fx(a)p 598 2888 V 119 w FG(Used)25 b(to)g(create)i(the)e
-(pixel)g(to)g(W)m(CS)g(Map-)650 2629 y(ping.)37 b(Also)22
-b(stored)g(as)g(a)f(PV)h(attribute)g(for)650 2741 y(the)30
-b(longitude)h(axis)g(of)g(the)f(WcsMap.)p 2198 2888 V
-2249 2516 a(Only)42 b(written)g(if)h(not)f(equal)h(to)g(the)f(de-)2249
-2629 y(fault)52 b(v)-5 b(alue)52 b(de\014ned)e(in)h(pap)s(er)f(I)s(I)g
-(\(see)2249 2741 y(\\Choice)72 b(of)f(LONPOLE/LA)-8 b(TPOLE")2249
-2854 y(b)s(elo)m(w\).)p 3798 2888 V -2 3340 V 50 2967
-a(RADESYS)p Fx(a)p 598 3340 V 118 w FG(Used)66 b(to)h(set)g(the)f
-(attributes)h(of)g(the)650 3080 y(SkyF)-8 b(rame.)77
-b(All)44 b(v)-5 b(alues)42 b(supp)s(orted)f(ex-)650 3193
-y(cept)31 b(that)g(ecliptic)i(co)s(ordinates)e(are)g(cur-)650
-3306 y(ren)m(tly)g(alw)m(a)m(ys)h(assumed)d(to)i(b)s(e)f(FK5.)p
-2198 3340 V 2249 2967 a(Alw)m(a)m(ys)46 b(written.)84
-b(Determined)46 b(b)m(y)e(the)2249 3080 y(System)31 b(attribute)g(of)f
-(the)h(SkyF)-8 b(rame.)p 3798 3340 V -2 3679 4 339 v
-50 3419 a(EQUINO)m(X)p Fx(a)p 598 3679 V 116 w FG(Used)39
-b(to)g(set)g(the)g(Equino)m(x)g(attribute)h(of)650 3532
-y(the)30 b(SkyF)-8 b(rame.)p 2198 3679 V 2249 3419 a(W)g(ritten)79
-b(if)f(relev)-5 b(an)m(t.)183 b(Determined)2249 3532
-y(b)m(y)80 b(the)g(Equino)m(x)f(attribute)h(of)g(the)2249
-3645 y(SkyF)-8 b(rame.)p 3798 3679 V -2 4130 4 452 v
-50 3758 a(EPOCH)p 598 4130 V 271 w(Used)39 b(to)g(set)g(the)g(Equino)m
-(x)g(attribute)h(of)650 3871 y(the)30 b(SkyF)-8 b(rame.)p
-2198 4130 V 2249 3758 a(Only)32 b(written)f(if)h(using)f(FITS-AIPS)g
-(and)2249 3871 y(FITS-AIPS++)72 b(enco)s(dings.)170 b(Deter-)2249
-3983 y(mined)26 b(b)m(y)g(the)g(Equino)m(x)g(attribute)g(of)g(the)2249
-4096 y(SkyF)-8 b(rame.)p 3798 4130 V -2 4808 4 678 v
-50 4209 a(MJD-OBS)p 598 4808 V 185 w(Used)51 b(to)h(set)g(the)g(Ep)s(o)
-s(c)m(h)e(attribute)j(of)650 4322 y(the)c(SkyF)-8 b(rame.)97
-b(D)m(A)-8 b(TE-OBS)50 b(is)g(used)650 4435 y(if)e(MJD-OBS)h(is)g(not)g
-(presen)m(t.)96 b(A)49 b(de-)650 4548 y(fault)42 b(v)-5
-b(alue)43 b(based)f(on)g(RADESYS)f(and)650 4661 y(EQUINO)m(X)h(is)h
-(used)f(if)g(used)g(if)g(D)m(A)-8 b(TE-)650 4774 y(OBS)30
-b(is)g(not)h(presen)m(t)f(either.)p 2198 4808 V 2249
-4209 a(Determined)e(b)m(y)f(the)h(Ep)s(o)s(c)m(h)e(attribute)i(of)2249
-4322 y(the)47 b(SkyF)-8 b(rame.)87 b(Only)46 b(written)g(if)g(this)2249
-4435 y(attribute)d(has)f(b)s(een)f(set)i(to)f(an)g(explicit)2249
-4548 y(v)-5 b(alue)53 b(\(in)f(whic)m(h)g(case)h(D)m(A)-8
-b(TE-OBS)53 b(is)2249 4661 y(also)32 b(written\).)p 3798
-4808 V 0 4811 3800 4 v 969 5086 a(T)-8 b(able)31 b(2:)41
-b(Use)30 b(of)h(FITS-W)m(CS)f(P)m(ap)s(er)g(I)s(I)g(k)m(eyw)m(ords)p
-eop end
-%%Page: 528 538
-TeXDict begin 528 537 bop 0 52 a FG(528)2489 b Fz(F)91
-b(FITS-W)m(CS)30 b(CO)m(VERA)m(GE)111 351 y FG(2.)46
-b(If)29 b(the)f(pro)5 b(jection)30 b(represen)m(ted)f(b)m(y)f(the)h
-(WcsMap)h(is)f(azim)m(uthal)h(but)e(no)g(v)-5 b(alues)29
-b(ha)m(v)m(e)h(b)s(een)e(set)i(for)227 464 y(the)38 b(\\PV)p
-Fx(i)9 b Fy(_)p FG(3")38 b(and)e(\\PV)p Fx(i)9 b Fy(_)p
-FG(4")39 b(attributes)e(within)g(the)g(WcsMap,)j(then)d(the)g(default)h
-(LONPOLE)227 577 y(and)f(LA)-8 b(TPOLE)37 b(v)-5 b(alues)38
-b(are)f(used.)61 b(This)37 b(results)g(in)g(no)h(LONPOLE)e(or)h(LA)-8
-b(TPOLE)37 b(k)m(eyw)m(ords)227 690 y(b)s(eing)28 b(stored)g(in)g(the)g
-(header)g(since)h(default)f(v)-5 b(alues)28 b(are)h(nev)m(er)f(stored.)
-40 b(An)m(y)29 b(extra)g(rotation)g(of)f(the)227 803
-y(sky)k(is)g(absorb)s(ed)f(in)m(to)i(the)g(CD)p Fx(i)p
-Fy(_)p Fx(j)45 b FG(or)32 b(PC)p Fx(i)p Fy(_)p Fx(j)44
-b FG(matrix)32 b(\(this)h(is)f(p)s(ossible)g(only)g(if)g(the)h(pro)5
-b(jection)32 b(is)227 916 y(azim)m(uthal\).)111 1121
-y(3.)46 b(If)35 b(the)g(pro)5 b(jection)35 b(represen)m(ted)g(b)m(y)g
-(the)g(WcsMap)g(is)g(not)g(azim)m(uthal,)j(then)c(the)h(v)-5
-b(alues)36 b(of)f(LON-)227 1234 y(POLE)j(and)g(LA)-8
-b(TPOLE)37 b(are)i(found)e(b)m(y)h(transforming)g(the)h(co)s(ordinates)
-g(of)g(the)f(celestial)j(north)227 1347 y(p)s(ole)28
-b(\()p Fx(i.e)34 b FG(longitude)28 b(zero,)h(latitude)g(+)p
-Fp(\031)s(=)p FG(2\))f(in)m(to)g(nativ)m(e)h(spherical)f(co)s
-(ordinates)g(using)f(the)h(in)m(v)m(erse)227 1459 y(of)j(the)f(Mapping)
-h(whic)m(h)f(follo)m(ws)h(the)g(WcsMap.)0 1778 y FE(F.2.3)105
-b(User)35 b(De\014ned)h(Fiducial)f(P)m(oin)m(ts)0 2012
-y FG(When)f(reading)g(a)h(F)-8 b(rameSet)36 b(from)d(a)i(FitsChan,)g
-(pro)5 b(jection)35 b(parameters)g(PV)p Fx(i)9 b Fy(_)p
-FG(0,)36 b(PV)p Fx(i)9 b Fy(_)p FG(1)34 b(and)g(PV)p
-Fx(i)9 b Fy(_)p FG(2)0 2125 y(\(for)29 b(longitude)h(axis)g(\\)p
-Fx(i)9 b FG("\))31 b(are)e(used)g(to)h(indicate)g(a)g(user-de\014ned)d
-(\014ducial)i(p)s(oin)m(t)h(as)f(describ)s(ed)f(in)h(section)0
-2238 y(2.5)37 b(of)f(pap)s(er)e(I)s(I.)h(This)g(results)h(in)f(a)h
-(shift)g(of)g(IW)m(C)g(origin)g(b)s(eing)f(applied)h
-Fx(b)-5 b(efor)g(e)43 b FG(the)36 b(WcsMap)h(whic)m(h)0
-2351 y(con)m(v)m(erts)g(IW)m(C)f(in)m(to)g(nativ)m(e)h(spherical)f(co)s
-(ordinates.)57 b(The)35 b(v)-5 b(alues)35 b(of)h(these)g(pro)5
-b(jection)36 b(parameters,)h(if)0 2464 y(supplied,)29
-b(are)i(stored)g(as)f(the)h(corresp)s(onding)e(PVi)p
-Fy(_)p FG(m)h(attributes)h(of)g(the)f(WcsMap.)0 2635
-y(When)24 b(writing)g(a)h(F)-8 b(rameSet)25 b(to)g(a)g(FitsChan,)h(the)
-e(PV)g(attributes)h(of)g(the)f(WcsMap)h(determine)g(the)f(nativ)m(e)0
-2748 y(co)s(ordinates)29 b(of)f(the)h(\014ducial)f(p)s(oin)m(t)g(\(the)
-h(\014xed)f(defaults)g(for)g(eac)m(h)h(pro)5 b(jection)29
-b(describ)s(ed)f(in)f(pap)s(er)h(I)s(I)f(are)0 2861 y(used)32
-b(if)h(the)g(PV)g(attributes)h(of)f(the)g(WcsMap)h(ha)m(v)m(e)g(not)g
-(b)s(een)e(assigned)h(a)h(v)-5 b(alue\).)49 b(The)32
-b(corresp)s(onding)0 2974 y(celestial)e(co)s(ordinates)f(are)f(used)e
-(as)i(the)g(CR)-10 b(V)g(AL)p Fx(i)36 b FG(k)m(eyw)m(ords)28
-b(and)f(the)h(corresp)s(onding)f(pixel)h(co)s(ordinates)0
-3087 y(as)j(the)f(CRPIX)p Fx(j)43 b FG(k)m(eyw)m(ords.)0
-3406 y FE(F.2.4)105 b(Common)35 b(Non-Standard)g(F)-9
-b(eatures)0 3640 y FG(A)39 b(collection)j(of)e(common)f(non-standard)f
-(features)i(are)f(supp)s(orted)e(when)i(reading)g(a)h(F)-8
-b(rameSet)40 b(from)0 3753 y(a)46 b(FitsChan,)j(in)c(addition)g(to)h
-(those)g(em)m(b)s(o)s(died)e(within)h(the)g(a)m(v)-5
-b(ailable)48 b(enco)s(dings)d(of)g(the)h(FitsChan)0 3866
-y(class.)j(These)33 b(are)h(translated)f(in)m(to)h(the)f(equiv)-5
-b(alen)m(t)35 b(standard)d(features)h(b)s(efore)g(b)s(eing)g(used)f(to)
-i(create)g(a)0 3979 y(F)-8 b(rameSet.)60 b(Note,)39 b(the)d(rev)m(erse)
-h(op)s(eration)g(is)f(nev)m(er)h(p)s(erformed:)51 b(it)37
-b(is)f(not)h(p)s(ossible)f(to)h(pro)s(duce)e(non-)0 4092
-y(standard)g(features)h(when)e(writing)i(a)g(F)-8 b(rameSet)37
-b(to)g(a)f(FitsChan)f(\(other)h(than)g(those)g(em)m(b)s(o)s(died)f(in)g
-(the)0 4205 y(a)m(v)-5 b(ailable)33 b(enco)s(dings)d(of)g(the)h
-(FitsChan)f(class\).)42 b(The)30 b(supp)s(orted)e(non-standard)i
-(features)g(include:)136 4493 y Fu(\017)46 b FG(EQUINO)m(X)28
-b(k)m(eyw)m(ords)h(with)e(string)h(v)-5 b(alues)29 b(equal)f(to)h(a)f
-(date)h(preceded)f(b)m(y)f(the)i(letter)g(B)f(or)g(J)g(\()p
-Fx(e.g.)227 4606 y FG(\\B1995.0"\).)136 4811 y Fu(\017)46
-b FG(EQUINO)m(X)31 b(or)f(EPOCH)g(k)m(eyw)m(ords)g(with)g(v)-5
-b(alue)31 b(zero)g(\(these)h(are)e(con)m(v)m(erted)i(to)f(B1950\).)136
-5016 y Fu(\017)46 b FG(The)22 b(IRAF)g(\\ZPX")g(pro)5
-b(jection)23 b(is)f(represen)m(ted)g(b)m(y)f(a)i(WcsMap)f(with)g(t)m
-(yp)s(e)g(of)g(AST)p Fy(__)p FG(ZPN.)f(Pro)5 b(jec-)227
-5128 y(tion)30 b(parameter)f(v)-5 b(alues)29 b(are)g(read)g(from)f(an)m
-(y)i(W)-10 b(A)i(T)p Fx(i)p Fy(_)p Fx(nnn)36 b FG(k)m(eyw)m(ords,)30
-b(and)e(corresp)s(onding)g(PVi)p Fy(_)p FG(m)227 5241
-y(attributes)36 b(are)f(set)h(in)e(the)i(WcsMap.)55 b(The)35
-b(W)-10 b(A)i(T)p Fx(i)p Fy(_)p Fx(nnn)42 b FG(k)m(eyw)m(ords)35
-b(ma)m(y)h(sp)s(ecify)f(corrections)h(to)227 5354 y(the)43
-b(basic)f(ZPN)g(pro)5 b(jection)43 b(b)m(y)g(including)e(\\lngcor")j
-(or)f(\\latcor")h(terms.)77 b(There)41 b(is)i(no)f(direct)227
-5467 y(equiv)-5 b(alen)m(t)30 b(in)d(FITS-W)m(CS)h(to)g(these)g(terms)g
-(and)f(so)h(they)g(are)h(ignored.)40 b(If)27 b(these)h(correction)i
-(terms)227 5580 y(are)d(found,)g(ASTW)-10 b(ARN)26 b(k)m(eyw)m(ords)h
-(are)g(added)f(to)h(the)g(FitsChan)g(con)m(taining)h(a)f(w)m(arning)f
-(message)227 5693 y(\(but)k(only)h(if)f(the)h(W)-8 b(arnings)30
-b(attribute)i(of)e(the)h(FitsChan)f(is)g(set)h(appropriately\).)p
-eop end
-%%Page: 529 539
-TeXDict begin 529 538 bop 0 52 a Fz(F.3)92 b(P)m(ap)s(er)30
-b(I)s(I)s(I)f(-)i(Sp)s(ectral)f(Co)s(ordinates)2129 b
-FG(529)136 351 y Fu(\017)46 b FG(The)37 b(IRAF)h(\\TNX")h(pro)5
-b(jection)38 b(is)g(represen)m(ted)f(b)m(y)h(a)g(WcsMap)h(with)e(t)m
-(yp)s(e)h(of)g(AST)p Fy(__)p FG(TPN)e(\(a)227 464 y(distorted)j(T)-8
-b(AN)39 b(pro)5 b(jection)39 b(retained)g(within)e(the)i(WcsMap)g
-(class)g(from)f(an)h(early)g(draft)f(of)g(the)227 577
-y(FITS-W)m(CS)22 b(pap)s(er)f(I)s(I\).)g(Pro)5 b(jection)23
-b(parameter)g(v)-5 b(alues)22 b(are)g(read)g(from)f(an)m(y)i(W)-10
-b(A)i(T)p Fx(i)p Fy(_)p Fx(nnn)29 b FG(k)m(eyw)m(ords,)227
-690 y(and)34 b(corresp)s(onding)f(PV)i(attributes)g(are)g(set)g(in)f
-(the)g(WcsMap.)54 b(If)34 b(the)g(TNX)h(pro)5 b(jection)35
-b(cannot)227 803 y(b)s(e)e(con)m(v)m(erted)i(exactly)g(in)m(to)f(an)g
-(AST)p Fy(__)p FG(TPN)d(pro)5 b(jection,)35 b(ASTW)-10
-b(ARN)34 b(k)m(eyw)m(ords)f(are)h(added)f(to)227 916
-y(the)40 b(FitsChan)g(con)m(taining)i(a)e(w)m(arning)g(message)h(\(but)
-e(only)h(if)g(the)g(W)-8 b(arnings)41 b(attribute)f(of)g(the)227
-1029 y(FitsChan)31 b(is)f(set)h(appropriately\).)136
-1222 y Fu(\017)46 b FG(\\QV")33 b(parameters)f(for)g(T)-8
-b(AN)32 b(pro)5 b(jections)33 b(\(as)f(pro)s(duced)f(b)m(y)h(A)m(UTO)m
-(ASTR)m(OM)g(are)g(renamed)g(to)227 1335 y(the)f(equiv)-5
-b(alen)m(t)32 b(\\PV")f(parameters.)0 1637 y Fw(F.3)113
-b(P)m(ap)s(er)37 b(I)s(I)s(I)g(-)h(Sp)s(ectral)g(Co)s(ordinates)0
-1862 y FG(These)27 b(con)m(v)m(en)m(tions)i(are)e(used)g(when)f
-(reading)h(a)h(F)-8 b(rameSet)28 b(from)e(a)i(FitsChan)f(whic)m(h)g
-(includes)f(appropri-)0 1975 y(ate)32 b(CTYPE)p Fx(i)38
-b FG(v)-5 b(alues,)31 b(and)f(when)f(writing)i(a)f(F)-8
-b(rameSet)32 b(in)e(whic)m(h)g(the)h(W)m(CS)f(F)-8 b(rame)31
-b(is)g(a)g(Sp)s(ecF)-8 b(rame.)0 2141 y(T)g(able)31 b(3)g(describ)s(es)
-e(the)i(use)f(made)g(b)m(y)g(AST)g(of)g(eac)m(h)h(k)m(eyw)m(ord)g
-(whose)f(meaning)h(is)f(de\014ned)f(or)h(extended)0 2253
-y(b)m(y)g(FITS-W)m(CS)g(pap)s(er)g(I)s(I)s(I.)0 2552
-y FE(F.3.1)105 b(Requiremen)m(ts)36 b(for)f(a)f(Successful)j(W)-9
-b(rite)35 b(Op)s(eration)0 2778 y FG(When)26 b(writing)f(a)i(F)-8
-b(rameSet)27 b(in)e(whic)m(h)h(the)g(W)m(CS)g(F)-8 b(rame)26
-b(is)g(a)g(Sp)s(ecF)-8 b(rame)27 b(to)f(a)g(FitsChan,)h(the)f(write)g
-(op-)0 2891 y(eration)d(is)g(successful)f(only)h(if)f(the)h(Mapping)f
-(from)g(pixel)h(co)s(ordinates)g(\(the)g(base)g(F)-8
-b(rame)23 b(in)f(the)h(F)-8 b(rameSet\))0 3004 y(to)31
-b(the)g(Sp)s(ecF)-8 b(rame)30 b(satis\014es)h(one)g(of)f(the)h(follo)m
-(wing)h(conditions:)111 3274 y(1.)46 b(It)31 b(is)f(linear.)111
-3467 y(2.)46 b(It)31 b(is)f(logarithmic.)111 3660 y(3.)46
-b(It)31 b(is)h(linear)f(if)g(the)g(Sp)s(ecF)-8 b(rame)32
-b(w)m(ere)f(to)h(b)s(e)f(re-mapp)s(ed)f(in)m(to)i(one)f(of)g(the)h
-(other)f(sp)s(ectral)g(systems)227 3773 y(supp)s(orted)e(b)m(y)h
-(FITS-W)m(CS)g(pap)s(er)f(I)s(I)s(I.)111 3966 y(4.)46
-b(It)33 b(con)m(tains)g(a)g(GrismMap,)g(and)e(the)i(Mapping)f(b)s
-(efore)f(the)i(GrismMap)f(\(from)g(pixel)h(co)s(ordinates)227
-4079 y(to)46 b(grism)e(parameter\))i(is)f(linear,)j(and)d(the)f
-(Mapping)h(after)g(the)g(GrismMap)g(is)g(either)g(n)m(ull)f(or)227
-4192 y(represen)m(ts)e(a)f(c)m(hange)i(of)e(sp)s(ectral)h(system)g
-(from)f(w)m(a)m(v)m(elength)i(\(air)f(or)g(v)-5 b(acuum\))41
-b(to)h(one)g(of)f(the)227 4304 y(supp)s(orted)29 b(sp)s(ectral)h
-(systems.)0 4575 y(If)g(none)g(of)h(the)f(ab)s(o)m(v)m(e)i(conditions)f
-(hold,)f(the)g(write)h(op)s(eration)g(will)g(b)s(e)e(unsuccessful.)0
-4874 y FE(F.3.2)105 b(Common)35 b(Non-Standard)g(F)-9
-b(eatures)0 5099 y FG(The)25 b(follo)m(wing)j(non-standard)c(features)i
-(are)h(supp)s(orted)d(when)g(reading)i(sp)s(ectral)g(axes)h(from)e(a)h
-(FitsChan:)136 5369 y Fu(\017)46 b FG(Con)m(v)m(ersion)32
-b(of)f(\\-W)-10 b(A)g(V",)33 b(\\-FR)m(Q")f(and)e(\\-VEL")i(algorithm)g
-(co)s(des)f(\(sp)s(eci\014ed)g(in)f(early)i(drafts)e(of)227
-5482 y(pap)s(er)g(I)s(I)s(I\))f(to)i(the)f(corresp)s(onding)g(\\-X2P")i
-(form.)136 5675 y Fu(\017)46 b FG(Con)m(v)m(ersion)31
-b(of)g(\\RESTFREQ")f(to)h(\\RESTFR)m(Q")p eop end
-%%Page: 530 540
-TeXDict begin 530 539 bop 0 52 a FG(530)2489 b Fz(F)91
-b(FITS-W)m(CS)30 b(CO)m(VERA)m(GE)p 0 263 4002 4 v -2
-376 4 113 v 196 342 a FE(Keyw)m(ord)p 801 376 V 877 w(Read)p
-2400 376 V 1353 w(W)-9 b(rite)p 4000 376 V 0 379 4002
-4 v -2 944 4 565 v 50 459 a FG(CTYPE)p Fx(ia)p 801 944
-V 404 w FG(All)28 b(co)s(ordinate)g(systems)g(and)e(pro)5
-b(jection)852 571 y(t)m(yp)s(es)22 b(listed)g(in)f(pap)s(er)g(I)s(I)s
-(I)f(are)i(supp)s(orted,)852 684 y(except)32 b(for)e(the)h(\\-T)-8
-b(AB")32 b(algorithm)f(\(the)852 797 y(\\-LOG")53 b(algorithm)f(ma)m(y)
-g(also)h(b)s(e)e(ap-)852 910 y(plied)30 b(to)h(non-sp)s(ectral)g
-(linear)g(axes\).)p 2400 944 V 2452 459 a(Determined)21
-b(b)m(y)f(the)g(System)g(attribute)h(of)2452 571 y(the)35
-b(Sp)s(ecF)-8 b(rame)35 b(and)g(the)g(nature)g(of)g(the)2452
-684 y(pixel)30 b(to)i(Sp)s(ecF)-8 b(rame)30 b(Mapping.)p
-4000 944 V -2 1396 4 452 v 50 1023 a(CUNIT)p Fx(ia)p
-801 1396 V 427 w FG(Used)h(to)h(set)g(the)f(Units)h(attribute)f(of)h
-(the)852 1136 y(Sp)s(ecF)-8 b(rame)35 b(\(note,)i(Sp)s(ecF)-8
-b(rames)34 b(alw)m(a)m(ys)852 1249 y(ha)m(v)m(e)j(an)g(\\activ)m(e")i
-(Units)d(attribute)h(\(see)852 1362 y(astSetActiv)m(eUnit\).)p
-2400 1396 V 2452 1023 a(Alw)m(a)m(ys)31 b(written.)p
-4000 1396 V -2 1734 4 339 v 50 1475 a(PV)p Fx(i)p Fy(_)p
-Fx(ma)p 801 1734 V 476 w FG(Used)25 b(to)g(create)i(the)e(pixel)g(to)h
-(W)m(CS)e(Map-)852 1588 y(ping)g(\(v)-5 b(alues)24 b(are)h(stored)f(as)
-g(attributes)h(of)852 1701 y(a)31 b(GrismMap\).)p 2400
-1734 V 2452 1475 a(Set)46 b(from)f(the)i(attributes)f(of)g(the)g(Gris-)
-2452 1588 y(mMap,)28 b(if)f(presen)m(t,)h(and)e(if)h(set)g(explicitly)
--8 b(.)p 4000 1734 V -2 2073 V 50 1813 a(SPECSYS)p Fx(a)p
-801 2073 V 345 w FG(Used)24 b(to)i(set)e(the)h(StdOfRest)f(attribute)h
-(of)852 1926 y(the)43 b(Sp)s(ecF)-8 b(rame)43 b(\(all)h(systems)f(are)g
-(sup-)852 2039 y(p)s(orted)30 b(except)h(CMBDIPOL\).)p
-2400 2073 V 2452 1813 a(Set)44 b(from)h(the)f(StdOfRest)g(attribute)h
-(of)2452 1926 y(the)26 b(Sp)s(ecF)-8 b(rame,)27 b(but)e(only)g(if)h(it)
-g(has)f(b)s(een)2452 2039 y(set)31 b(explicitly)-8 b(.)p
-4000 2073 V -2 2186 4 113 v 50 2152 a(SSYSOBS)p Fx(a)p
-801 2186 V 349 w FG(Ignored.)p 2400 2186 V 1274 w(Nev)m(er)31
-b(written.)p 4000 2186 V -2 2638 4 452 v 50 2265 a(OBSGEO-X/Y/Z)p
-801 2638 V 100 w(Used)39 b(to)h(set)g(the)g(ObsLon)e(and)g(ObsLat)852
-2378 y(attributes)28 b(of)f(the)g(F)-8 b(rame)28 b(\(the)g(observ)m
-(ers)852 2491 y(heigh)m(t)j(ab)s(o)m(v)m(e)h(sea)f(lev)m(el)h(is)e
-(ignored\).)p 2400 2638 V 2452 2265 a(Set)j(from)g(the)h(ObsLon)f(and)f
-(ObsLat)i(at-)2452 2378 y(tributes)51 b(of)g(the)g(F)-8
-b(rame,)57 b(if)51 b(they)g(ha)m(v)m(e)2452 2491 y(b)s(een)29
-b(set)i(explicitly)h(\(it)g(is)e(assumed)g(that)2452
-2604 y(the)g(observ)m(er)h(is)f(at)h(sea)g(lev)m(el\).)p
-4000 2638 V -2 2976 4 339 v 50 2717 a(MJD-A)-10 b(V)m(G)p
-801 2976 V 379 w(Used)21 b(to)h(set)f(the)g(Ep)s(o)s(c)m(h)f
-(attributes)i(of)f(the)852 2830 y(Sp)s(ecF)-8 b(rame.)p
-2400 2976 V 2452 2717 a(Set)43 b(from)g(the)g(Ep)s(o)s(c)m(h)f
-(attribute)i(of)f(the)2452 2830 y(Sp)s(ecF)-8 b(rame,)42
-b(if)e(it)g(has)f(b)s(een)g(set)i(explic-)2452 2943 y(itly)-8
-b(.)p 4000 2976 V -2 3315 V 50 3055 a(SSYSSR)m(C)p Fx(a)p
-801 3315 V 354 w FG(Used)35 b(to)h(set)g(the)f(SourceVRF)g(attribute)
-852 3168 y(of)24 b(the)f(Sp)s(ecF)-8 b(rame)24 b(\(all)h(systems)e(are)
-h(sup-)852 3281 y(p)s(orted)30 b(except)h(CMBDIPOL\).)p
-2400 3315 V 2452 3055 a(Set)36 b(from)f(the)h(SourceVRF)g(attribute)g
-(of)2452 3168 y(the)30 b(Sp)s(ecF)-8 b(rame.)p 4000 3315
-V -2 4106 4 791 v 50 3394 a(ZSOUR)m(CE)p Fx(a)p 801 4106
-V 318 w FG(Used)49 b(to)g(set)h(the)e(SourceV)-8 b(el)50
-b(attribute)852 3507 y(of)28 b(the)f(Sp)s(ecF)-8 b(rame)28
-b(\(the)g(SourceVRF)g(at-)852 3620 y(tribute)34 b(is)g(\014rst)f(set)h
-(to)h(the)f(system)g(indi-)852 3733 y(cated)g(b)m(y)f(the)g(SSYSSR)m(C)
-e(k)m(eyw)m(ord,)k(and)852 3846 y(the)23 b(ZSOUR)m(CE)e(v)-5
-b(alue)23 b(is)g(then)g(con)m(v)m(erted)852 3959 y(to)59
-b(an)g(apparen)m(t)g(radial)g(v)m(elo)s(cit)m(y)i(and)852
-4072 y(stored)31 b(as)f(the)h(SourceV)-8 b(el)31 b(attribute\).)p
-2400 4106 V 2452 3394 a(Set)49 b(from)g(the)h(SourceV)-8
-b(el)50 b(attribute)g(of)2452 3507 y(the)36 b(Sp)s(ecF)-8
-b(rame,)38 b(if)f(it)g(has)f(b)s(een)f(set)i(ex-)2452
-3620 y(plicitly)51 b(\(the)g(SourceV)-8 b(el)51 b(v)-5
-b(alue)51 b(is)f(\014rst)2452 3733 y(con)m(v)m(erted)33
-b(from)e(apparen)m(t)g(radial)h(v)m(elo)s(c-)2452 3846
-y(it)m(y)f(to)g(redshift\).)p 4000 4106 V -2 4444 4 339
-v 50 4185 a(VELOSYS)p Fx(a)p 801 4444 V 328 w FG(Ignored.)p
-2400 4444 V 1274 w(Set)95 b(from)f(the)h(attributes)g(of)g(the)2452
-4297 y(Sp)s(ecF)-8 b(rame)24 b(that)g(de\014ne)f(the)h(standard)f(of)
-2452 4410 y(rest)30 b(and)g(the)h(observ)m(ers)f(p)s(osition.)p
-4000 4444 V -2 5122 4 678 v 50 4523 a(RESTFR)m(Q)p Fx(a)p
-801 5122 V 316 w FG(Used)k(to)h(set)g(the)f(RestF)-8
-b(req)36 b(attribute)f(of)852 4636 y(the)c(Sp)s(ecF)-8
-b(rame.)p 2400 5122 V 2452 4523 a(Set)56 b(from)g(the)h(RestF)-8
-b(req)57 b(attribute)g(of)2452 4636 y(the)44 b(Sp)s(ecF)-8
-b(rame,)47 b(but)c(only)h(if)g(the)g(Sys-)2452 4749 y(tem)37
-b(attribute)h(is)f(not)h(set)f(to)h(\\W)-10 b(A)g(VE",)2452
-4862 y(\\V)m(OPT",)42 b(\\ZOPT")e(or)h(\\A)-10 b(W)g(A)g(V",)43
-b(and)2452 4975 y(only)c(if)g(RestF)-8 b(req)41 b(has)e(b)s(een)g(set)h
-(explic-)2452 5088 y(itly)-8 b(.)p 4000 5122 V -2 5799
-V 50 5201 a(RESTW)e(A)g(V)p Fx(a)p 801 5799 V 301 w FG(Used)34
-b(to)h(set)g(the)f(RestF)-8 b(req)36 b(attribute)f(of)852
-5314 y(the)c(Sp)s(ecF)-8 b(rame)31 b(\(after)h(con)m(v)m(ersion)g(from)
-852 5427 y(w)m(a)m(v)m(elength)h(to)e(frequency\).)p
-2400 5799 V 2452 5201 a(Set)56 b(from)g(the)h(RestF)-8
-b(req)57 b(attribute)g(of)2452 5314 y(the)28 b(Sp)s(ecF)-8
-b(rame)28 b(\(after)g(con)m(v)m(ersion\),)i(but)2452
-5427 y(only)56 b(if)h(the)g(System)f(attribute)h(is)g(set)2452
-5539 y(to)g(\\W)-10 b(A)g(VE",)58 b(\\V)m(OPT",)g(\\ZOPT")e(or)2452
-5652 y(\\A)-10 b(W)g(A)g(V",)54 b(and)e(only)g(if)g(RestF)-8
-b(req)54 b(has)2452 5765 y(b)s(een)29 b(set)i(explicitly)-8
-b(.)p 4000 5799 V -2 6138 4 339 v 50 5878 a(CNAME)p Fx(ia)p
-801 6138 V 381 w FG(Used)25 b(to)h(set)g(the)f(Lab)s(el)h(attributes)f
-(of)h(the)852 5991 y(W)m(CS)k(F)-8 b(rame)32 b(k)m(eyw)m(ords.)p
-2400 6138 V 2452 5878 a(Set)42 b(from)g(the)g(Lab)s(el)g(attributes)h
-(of)f(the)2452 5991 y(W)m(CS)28 b(F)-8 b(rame,)30 b(if)e(they)g(ha)m(v)
-m(e)i(b)s(een)d(set)i(ex-)2452 6104 y(plicitly)-8 b(.)p
-4000 6138 V 0 6141 4002 4 v 951 6416 a(T)g(able)31 b(3:)41
-b(Use)31 b(of)f(FITS-W)m(CS)g(P)m(ap)s(er)g(I)s(I)s(I)f(k)m(eyw)m(ords)
-p eop end
-%%Page: 531 541
-TeXDict begin 531 540 bop 0 52 a Fz(F.4)92 b(P)m(ap)s(er)30
-b(IV)g(-)h(Co)s(ordinate)f(Distortions)2056 b FG(531)0
-351 y Fw(F.4)113 b(P)m(ap)s(er)37 b(IV)g(-)h(Co)s(ordinate)g
-(Distortions)0 573 y FG(This)25 b(pap)s(er)f(prop)s(oses)h(that)h(an)g
-(additional)g(4)g(c)m(haracter)h(co)s(de)f(b)s(e)f(app)s(ended)f(to)i
-(the)g(end)f(of)h(the)f(CTYPE)p Fx(i)0 686 y FG(k)m(eyw)m(ord)k(to)h
-(sp)s(ecify)f(the)g(nature)f(of)h(an)m(y)h(distortion)f(a)m(w)m(a)m(y)i
-(from)d(the)h(basic)h(algorithm)g(describ)s(ed)d(b)m(y)i(the)0
-799 y(\014rst)37 b(8)h(c)m(haracters)h(of)f(the)g(CTYPE)p
-Fx(i)46 b FG(v)-5 b(alue.)63 b(Curren)m(tly)37 b(AST)g(ignores)h(all)h
-(suc)m(h)e(co)s(des)h(when)e(reading)0 911 y(a)h(F)-8
-b(rameSet)38 b(from)f(a)g(FitsChan)g(\(except)h(for)f(the)g(\\-SIP")g
-(co)s(de)g(de\014ned)f(b)m(y)h(the)g(SIR)-8 b(TF)36 b(pro)5
-b(ject)38 b(-)f(see)0 1024 y(b)s(elo)m(w\).)71 b(This)39
-b(means)h(that)h(a)f(F)-8 b(rameSet)42 b(can)e(still)h(b)s(e)f(read)g
-(from)f(suc)m(h)h(headers,)j(but)c(the)i(Mapping)0 1137
-y(whic)m(h)33 b(giv)m(es)h(the)f(W)m(CS)g(p)s(osition)g(asso)s(ciated)i
-(with)d(a)i(giv)m(en)g(pixel)f(p)s(osition)g(will)g(re\015ect)h(only)f
-(the)g(basic)0 1250 y(algorithm)e(and)f(will)h(not)f(include)h(the)f
-(e\013ects)i(of)e(the)h(distortion.)0 1413 y(If)40 b(suc)m(h)g(a)h(F)-8
-b(rameSet)42 b(is)f(then)f(written)h(out)f(to)i(a)f(FitsChan,)i(the)e
-(resulting)f(CTYPE)p Fx(i)49 b FG(k)m(eyw)m(ords)41 b(will)0
-1526 y(include)30 b(no)g(distortion)h(co)s(de.)0 1816
-y FE(F.4.1)105 b(The)35 b(\\-SIP")f(distortion)h(co)s(de)0
-2037 y FG(The)d(SIR)-8 b(TF)32 b(pro)5 b(ject)33 b(\(h)m
-(ttp://sirtf.caltec)m(h.edu/SSC/\))j(has)c(dev)m(elop)s(ed)h(its)g(o)m
-(wn)g(system)f(for)h(enco)s(ding)0 2150 y(2-dimensional)27
-b(image)g(distortion)g(within)e(a)i(FITS)e(header,)i(based)f(on)g(the)g
-(prop)s(osals)g(of)g(pap)s(er)f(IV.)h(A)g(de-)0 2263
-y(scription)20 b(of)h(this)f(system)g(is)h(a)m(v)-5 b(ailable)22
-b(in)e(h)m(ttp://sirtf.caltec)m(h.edu/SSC/do)s(cumen)m(ts/W)m(CSk)m
-(eyw)m(ords)p Fy(_)p FG(v1.3.p)s(df.)0 2376 y(In)k(this)g(system,)i
-(the)e(presence)h(of)f(distortion)h(is)f(indicated)h(b)m(y)f(app)s
-(ending)f(the)i(distortion)g(co)s(de)f(\\-SIP")h(to)0
-2489 y(the)f(CTYPE)p Fx(i)32 b FG(k)m(eyw)m(ord)24 b(v)-5
-b(alues)24 b(for)f(the)h(celestial)i(axes.)39 b(The)23
-b(distortion)h(tak)m(es)h(the)f(form)f(of)h(a)g(p)s(olynomial)0
-2602 y(function)30 b(whic)m(h)g(is)h(applied)f(to)h(the)f(pixel)h(co)s
-(ordinates,)g(after)g(subtraction)g(of)f(the)h(CRPIX)p
-Fx(j)43 b FG(v)-5 b(alues.)0 2764 y(This)39 b(system)h(is)g(a)g
-(strictly)h(2)f(dimensional)g(system.)69 b(When)39 b(reading)h(a)g(F)-8
-b(rameSet)41 b(from)e(a)i(FitsChan)0 2877 y(whic)m(h)c(includes)f(the)h
-(\\-SIP")g(distortion)h(co)s(de,)h(AST)d(assumes)g(that)i(it)f(is)g
-(only)g(applied)f(to)i(the)f(\014rst)f(2)0 2990 y(W)m(CS)j(axes)g(in)g
-(a)g(FITS)f(header)h(\(i.e.)67 b(CTYPE1)39 b(and)f(CTYPE2\).)66
-b(If)39 b(the)g(\\-SIP")g(distortion)g(co)s(de)g(is)0
-3103 y(attac)m(hed)h(to)f(other)f(axes,)j(it)e(will)f(b)s(e)f(ignored.)
-64 b(The)38 b(distortion)h(itself)g(is)f(represen)m(ted)g(b)m(y)g(a)g
-(P)m(olyMap)0 3216 y(within)30 b(the)g(resulting)h(F)-8
-b(rameSet.)0 3379 y(If)27 b(a)h(F)-8 b(rameSet)29 b(is)f(read)g(from)f
-(a)h(FitsChan)g(whic)m(h)g(includes)f(\\-SIP")h(distortion,)h(and)e(an)
-h(attempt)h(is)f(then)0 3492 y(made)d(to)g(write)f(this)h(F)-8
-b(rameSet)26 b(out)e(to)h(a)g(FitsChan,)h(the)f(write)g(op)s(eration)f
-(will)h(fail)g(unless)f(the)h(distortion)0 3605 y(is)34
-b(insigni\014can)m(t)i(\()p Fx(i.e.)52 b FG(is)34 b(so)h(small)g(that)g
-(the)g(tests)g(for)f(linearit)m(y)i(built)e(in)m(to)i(AST)d(are)i
-(passed\).)53 b(In)34 b(this)0 3718 y(case,)e(no)e(distortion)h(co)s
-(de)f(will)h(b)s(e)f(app)s(ended)f(to)i(the)f(resulting)h(CTYPE)p
-Fx(i)38 b FG(k)m(eyw)m(ord)31 b(v)-5 b(alues.)p eop end
-%%Page: 532 542
-TeXDict begin 532 541 bop 0 52 a FG(532)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)0 351 y FA(G)134
-b(Changes)46 b(and)e(New)i(F)-11 b(eatures)0 626 y Fw(G.1)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.1)0 866 y FG(The)26
-b(follo)m(wing)i(describ)s(es)d(the)i(most)f(signi\014can)m(t)i(c)m
-(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g(AST)g(library)g(b)s(et)m
-(w)m(een)0 979 y(v)m(ersions)31 b(V1.0)g(and)f(V1.1)i(\(not)f(the)f
-(most)h(recen)m(t)g(v)m(ersion\):)111 1279 y(1.)46 b(A)37
-b(new)g(\\Ho)m(w)h(T)-8 b(o.)16 b(.)f(.)h(")60 b(section)38
-b(\()p Fu(x)p FG(3\))h(has)d(b)s(een)g(added)h(to)g(this)g(do)s(cumen)m
-(t.)60 b(It)37 b(con)m(tains)h(simple)227 1392 y(recipies)31
-b(for)f(p)s(erforming)g(commonly-required)g(op)s(erations)h(using)f
-(AST.)111 1605 y(2.)46 b(A)25 b(new)f(AST)p Fy(_)p FG(UNF)m(ORMA)-8
-b(T)24 b(function)h(has)f(b)s(een)f(pro)m(vided)h(to)i(read)e
-(formatted)h(co)s(ordinate)g(v)-5 b(alues)227 1718 y(for)31
-b(the)g(axes)g(of)g(a)g(F)-8 b(rame)31 b(\()p Fu(x)p
-FG(7.8\).)44 b(In)30 b(essence,)h(this)g(function)f(is)h(the)g(in)m(v)m
-(erse)g(of)g(AST)p Fy(_)p FG(F)m(ORMA)-8 b(T.)227 1831
-y(It)27 b(ma)m(y)f(b)s(e)g(used)f(to)i(deco)s(de)f(user-supplied)f
-(formatted)i(v)-5 b(alues)26 b(represen)m(ting)g(co)s(ordinates,)i
-(turning)227 1944 y(them)36 b(in)m(to)g(n)m(umerical)g(v)-5
-b(alues)36 b(for)f(pro)s(cessing.)55 b(Celestial)38 b(co)s(ordinates)e
-(ma)m(y)g(also)g(b)s(e)f(read)g(using)227 2057 y(this)c(function)f(\()p
-Fu(x)p FG(8.7\))i(and)e(free-format)h(input)f(is)g(supp)s(orted.)111
-2270 y(3.)46 b(The)41 b(F)-8 b(ormat)42 b(attribute)g(string)f(used)f
-(b)m(y)h(a)h(SkyF)-8 b(rame)41 b(when)f(formatting)i(celestial)i(co)s
-(ordinate)227 2383 y(v)-5 b(alues)30 b(no)m(w)f(allo)m(ws)i(the)e
-(degrees/hours)g(\014eld)g(to)h(b)s(e)e(omitted,)j(so)e(that)h
-(celestial)i(co)s(ordinates)e(ma)m(y)227 2496 y(b)s(e)k(giv)m(en)i(in)e
-(\()p Fx(e.g.)p FG(\))53 b(arc-min)m(utes)35 b(and/or)f(arc-seconds)i
-(\()p Fu(x)p FG(8.6\).)55 b(As)34 b(a)h(result,)h(the)f(degrees/hours)
-227 2609 y(\014eld)28 b(is)f(no)h(longer)g(included)f(b)m(y)g(default.)
-40 b(A)28 b(new)f(\\t")i(format)f(sp)s(eci\014er)f(has)h(b)s(een)e(in)m
-(tro)s(duced)i(\(see)227 2721 y(the)i(F)-8 b(ormat)31
-b(attribute\))g(to)f(allo)m(w)h(min)m(utes)f(and/or)f(seconds)h(of)g
-(time)g(to)g(b)s(e)f(sp)s(eci\014ed)g(if)h(required.)111
-2934 y(4.)46 b(A)35 b(new)f(routine)h(AST)p Fy(_)p FG(MAPBO)m(X)f(has)h
-(b)s(een)f(in)m(tro)s(duced.)52 b(This)34 b(allo)m(ws)i(y)m(ou)f(to)g
-(\014nd)e(the)i(exten)m(t)227 3047 y(of)f(a)g(\\b)s(ounding)f(b)s(o)m
-(x")h(whic)m(h)f(just)h(encloses)g(another)g(b)s(o)m(x)g(after)g(it)h
-(has)e(b)s(een)g(transformed)g(b)m(y)h(a)227 3160 y(Mapping.)60
-b(A)36 b(t)m(ypical)i(use)f(migh)m(t)g(b)s(e)f(to)h(calculate)i(the)e
-(size)h(whic)m(h)e(an)g(image)i(w)m(ould)f(ha)m(v)m(e)g(if)g(it)227
-3273 y(w)m(ere)31 b(transformed)f(b)m(y)g(the)h(Mapping.)111
-3486 y(5.)46 b(A)26 b(new)e(class)j(of)e(Ob)5 b(ject,)27
-b(the)e(In)m(traMap,)i(has)e(b)s(een)g(in)m(tro)s(duced)g(\()p
-Fu(x)p FG(20\).)41 b(This)24 b(is)h(a)h(sp)s(ecialised)g(form)227
-3599 y(of)g(Mapping)g(whic)m(h)f(encapsulates)i(a)f(priv)-5
-b(ately-de\014ned)25 b(co)s(ordinate)i(transformation)f(routine)g(\()p
-Fx(e.g.)227 3712 y FG(written)31 b(in)g(F)-8 b(ortran\))31
-b(so)g(that)h(it)f(ma)m(y)h(b)s(e)e(used)g(lik)m(e)i(an)m(y)f(other)g
-(AST)f(Mapping.)42 b(This)30 b(allo)m(ws)i(y)m(ou)227
-3825 y(to)f(create)h(Mappings)e(that)h(p)s(erform)e(an)m(y)i(conceiv)-5
-b(able)32 b(co)s(ordinate)g(transformation.)111 4038
-y(6.)46 b(The)27 b(in)m(ternal)h(in)m(tegrit)m(y)h(of)e(a)h(F)-8
-b(rameSet)28 b(is)g(no)m(w)f(automatically)j(preserv)m(ed)d(whenev)m
-(er)g(c)m(hanges)h(are)227 4151 y(made)i(to)h(an)m(y)f(attributes)h
-(whic)m(h)f(a\013ect)h(the)g(curren)m(t)e(F)-8 b(rame)31
-b(\(either)g(b)m(y)f(setting)h(or)f(clearing)h(their)227
-4264 y(v)-5 b(alues\).)46 b(This)31 b(is)g(accomplished)i(b)m(y)e
-(appropriately)h(re-mapping)g(the)f(curren)m(t)h(F)-8
-b(rame)33 b(to)f(accoun)m(t)227 4377 y(for)e(an)m(y)h(c)m(hange)h(to)f
-(the)f(co)s(ordinate)i(system)e(whic)m(h)g(it)h(represen)m(ts)f(\()p
-Fu(x)p FG(14.6\).)111 4590 y(7.)46 b(The)33 b(in)m(ternal)g(structure)g
-(of)g(a)g(F)-8 b(rameSet)35 b(is)e(no)m(w)g(automatically)i(tidied)e
-(to)h(eliminate)h(redundan)m(t)227 4703 y(no)s(des)41
-b(whenev)m(er)g(an)m(y)h(of)g(its)g(F)-8 b(rames)42 b(is)g(remo)m(v)m
-(ed)h(or)e(re-mapp)s(ed.)73 b(Automatic)44 b(simpli\014cation)227
-4815 y(of)e(an)m(y)f(comp)s(ound)f(Mappings)h(whic)m(h)h(result)f(ma)m
-(y)h(also)g(o)s(ccur.)73 b(The)41 b(e\013ect)i(of)f(this)f(c)m(hange)h
-(is)227 4928 y(to)34 b(prev)m(en)m(t)g(the)f(accum)m(ulation)i(of)e
-(unnecessary)f(structure)h(in)g(F)-8 b(rameSets)34 b(whic)m(h)f(are)g
-(rep)s(eatedly)227 5041 y(mo)s(di\014ed.)111 5254 y(8.)46
-b(Some)39 b(impro)m(v)m(emen)m(ts)g(ha)m(v)m(e)h(b)s(een)d(made)i(to)g
-(the)g(algorithms)g(for)f(simplifying)g(comp)s(ound)f(Map-)227
-5367 y(pings,)30 b(as)h(used)f(b)m(y)g(AST)p Fy(_)p FG(SIMPLIFY.)111
-5580 y(9.)46 b(The)23 b(textual)h(represen)m(tation)g(used)e(for)h
-(some)g(Ob)5 b(jects)23 b(\()p Fx(i.e.)g FG(when)f(they)h(are)g
-(written)g(to)h(a)f(Channel\))227 5693 y(has)30 b(c)m(hanged)h(sligh)m
-(tly)-8 b(,)33 b(but)c(remains)i(compatible)g(with)f(earlier)i(v)m
-(ersions)e(of)h(AST.)p eop end
-%%Page: 533 543
-TeXDict begin 533 542 bop 0 52 a Fz(G.2)92 b(Changes)30
-b(In)m(tro)s(duced)f(in)i(V1.2)2294 b FG(533)66 351 y(10.)46
-b(A)23 b(problem)f(has)h(b)s(een)f(\014xed)g(whic)m(h)g(could)h(result)
-g(when)e(using)i(AST)p Fy(_)p FG(READ)f(to)h(read)g(FITS)f(headers)227
-464 y(in)h(whic)m(h)g(the)h(CDEL)-8 b(T)23 b(v)-5 b(alue)24
-b(is)f(zero.)39 b(Previously)-8 b(,)26 b(this)d(could)g(pro)s(duce)f(a)
-i(Mapping)f(whose)h(in)m(v)m(erse)227 577 y(transformation)37
-b(w)m(as)f(not)g(de\014ned)f(and)g(this)h(could)g(unnecessarily)g
-(restrict)h(the)f(use)g(to)g(whic)m(h)g(it)227 690 y(could)26
-b(b)s(e)e(put.)39 b(The)24 b(problem)h(has)g(b)s(een)g(o)m(v)m(ercome)i
-(b)m(y)f(supplying)e(a)h(suitable)h(small)g(CDEL)-8 b(T)25
-b(v)-5 b(alue)227 803 y(for)30 b(FITS)g(axes)h(whic)m(h)f(ha)m(v)m(e)i
-(only)e(a)h(single)g(pixel.)66 1003 y(11.)46 b(A)37 b(bug)f(has)h(b)s
-(een)f(\014xed)g(whic)m(h)g(could)h(o)s(ccasionally)i(cause)e(a)g
-(MatrixMap)h(to)g(b)s(e)e(used)g(with)g(the)227 1116
-y(wrong)e(In)m(v)m(ert)g(attribute)g(v)-5 b(alue)35 b(when)d(it)j
-(forms)e(part)h(of)f(a)i(comp)s(ound)d(Mapping)i(whic)m(h)f(is)h(b)s
-(eing)227 1229 y(simpli\014ed)c(using)g(AST)p Fy(_)p
-FG(SIMPLIFY.)66 1430 y(12.)46 b(A)33 b(bug)g(has)f(b)s(een)g(\014xed)h
-(whic)m(h)f(could)h(cause)h(the)f(AST)p Fy(__)p FG(BAD)g(parameter)g
-(to)h(ha)m(v)m(e)g(an)f(incorrect)227 1543 y(v)-5 b(alue)31
-b(on)f(some)h(platforms.)66 1743 y(13.)46 b(A)37 b(problem)f(has)g(b)s
-(een)g(\014xed)g(whic)m(h)h(could)f(prev)m(en)m(t)i(tic)m(k)g(marks)e
-(b)s(eing)g(dra)m(wn)g(on)h(a)g(co)s(ordinate)227 1856
-y(axis)31 b(close)h(to)f(a)g(singularit)m(y)g(in)f(the)h(co)s(ordinate)
-g(system.)0 2171 y Fw(G.2)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f
-(V1.2)0 2402 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 2515 y(v)m(ersions)31
-b(V1.1)g(and)f(V1.2)i(\(not)f(the)f(most)h(recen)m(t)g(v)m(ersion\):)
-111 2796 y(1.)46 b(A)32 b(new)f(routine,)i(AST)p Fy(_)p
-FG(POL)-8 b(YCUR)e(VE,)31 b(has)g(b)s(een)g(in)m(tro)s(duced)g(to)i
-(allo)m(w)g(more)f(e\016cien)m(t)h(plotting)227 2909
-y(of)e(m)m(ultiple)g(geo)s(desic)g(curv)m(es)g(\()p Fu(x)p
-FG(21.3\).)111 3110 y(2.)46 b(A)35 b(new)f(set)g(of)h(functions,)g(AST)
-p Fy(_)p FG(RESAMPLE)p Fp(<)p FG(X)p Fp(>)p FG(,)f(has)g(b)s(een)f(in)m
-(tro)s(duced)h(to)h(p)s(erform)e(resam-)227 3223 y(pling)f(of)h
-(gridded)e(data)i(suc)m(h)f(as)g(images)h(\()p Fx(i.e.)f
-FG(re-gridding\))g(under)f(the)h(con)m(trol)i(of)e(a)h(geometrical)227
-3336 y(transformation)e(sp)s(eci\014ed)f(b)m(y)g(a)h(Mapping.)111
-3536 y(3.)46 b(The)40 b(command-line)g(options)g(\\)p
-Fu(\000)p FG(pgp")g(and)f(\\)p Fu(\000)p FG(pgplot",)44
-b(whic)m(h)39 b(w)m(ere)i(previously)e(synon)m(ymous)227
-3649 y(when)20 b(used)g(with)h(the)g(\\ast)p Fy(_)p FG(link")h(and)f
-(\\ast)p Fy(_)p FG(link)p Fy(_)p FG(adam")h(commands,)g(are)g(no)e
-(longer)i(synon)m(ymous.)227 3762 y(The)28 b(option)h(\\)p
-Fu(\000)p FG(pgp")g(no)m(w)g(causes)g(linking)f(with)h(the)f(Starlink)h
-(v)m(ersion)g(of)f(PGPLOT)g(\(whic)m(h)h(uses)227 3875
-y(GKS)23 b(to)g(generate)i(its)e(output\),)i(while)e(\\)p
-Fu(\000)p FG(pgplot")h(links)e(with)h(the)g(standard)f(\(or)h(\\nativ)m
-(e"\))j(v)m(ersion)227 3988 y(of)31 b(PGPLOT.)111 4188
-y(4.)46 b(The)27 b(routine)h(AST)p Fy(_)p FG(MAPBO)m(X)f(has)g(b)s(een)
-g(c)m(hanged)h(to)g(execute)h(more)e(quic)m(kly)-8 b(,)30
-b(although)d(this)h(has)227 4301 y(b)s(een)i(ac)m(hiev)m(ed)i(at)f(the)
-g(cost)g(of)g(some)f(loss)h(of)g(robustness)e(when)g(used)h(with)g
-(di\016cult)g(Mappings.)111 4502 y(5.)46 b(A)21 b(new)e(v)-5
-b(alue)21 b(of)g(\\FITS-IRAF")g(has)f(b)s(een)f(in)m(tro)s(duced)h(for)
-g(the)g(Enco)s(ding)g(attribute)h(of)f(a)h(FitsChan.)227
-4615 y(This)30 b(new)g(enco)s(ding)h(pro)m(vides)g(an)g(in)m(terim)g
-(solution)g(to)h(the)f(problem)f(of)h(storing)g(co)s(ordinate)h(sys-)
-227 4727 y(tem)j(information)g(in)f(FITS)g(headers,)i(un)m(til)e(the)h
-(prop)s(osed)e(new)h(FITS-W)m(CS)h(standard)e(b)s(ecomes)227
-4840 y(stable.)111 5041 y(6.)46 b(When)27 b(a)g(F)-8
-b(rameSet)29 b(is)e(created)h(from)e(a)i(set)f(of)g(FITS)g(header)g
-(cards)f(\(b)m(y)i(reading)f(from)f(a)i(FitsChan)227
-5154 y(using)e(a)g(\\foreign")h(enco)s(ding\),)g(the)f(base)g(F)-8
-b(rame)27 b(of)e(the)h(resulting)g(F)-8 b(rameSet)27
-b(no)m(w)f(has)g(its)g(Domain)227 5267 y(attribute)31
-b(set)f(to)h(\\GRID".)g(This)e(re\015ects)h(the)g(fact)h(that)f(this)g
-(F)-8 b(rame)31 b(represen)m(ts)e(FITS)g(data)i(grid)227
-5380 y(co)s(ordinates)39 b(\(equiv)-5 b(alen)m(t)40 b(to)e(FITS)g
-(pixel)g(co)s(ordinates|see)h Fu(x)p FG(7.13\).)66 b(Previously)-8
-b(,)41 b(this)d(Domain)227 5493 y(v)-5 b(alue)31 b(w)m(as)g(not)f(set.)
-111 5693 y(7.)46 b(AST)p Fy(_)p FG(FINDFITS)30 b(no)m(w)g(ignores)h
-(trailing)g(spaces)g(in)f(its)h(k)m(eyw)m(ord)g(template.)p
-eop end
-%%Page: 534 544
-TeXDict begin 534 543 bop 0 52 a FG(534)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FG(8.)46
-b(AST)p Fy(_)p FG(PUTFITS)23 b(no)m(w)i(recognises)h(\\D")h(and)d(\\d")
-h(as)g(v)-5 b(alid)26 b(exp)s(onen)m(t)f(c)m(haracters)h(in)f
-(\015oating)g(p)s(oin)m(t)227 464 y(n)m(um)m(b)s(ers.)111
-660 y(9.)46 b(The)22 b(FitsChan)h(class)g(is)f(no)m(w)h(more)f(toleran)
-m(t)j(of)d(common)h(minor)f(violations)i(of)f(the)f(FITS)g(standard.)66
-857 y(10.)46 b(The)f(FitsChan)g(class)g(no)m(w)g(incorp)s(orates)h(an)f
-(impro)m(v)m(ed)g(test)h(for)f(the)g(linearit)m(y)h(of)f(Mappings,)227
-970 y(allo)m(wing)25 b(more)e(reliable)g(con)m(v)m(ersion)h(of)f(AST)f
-(data)i(in)m(to)f(FITS)f(\(using)h(\\foreign")h(FITS)e(enco)s(dings\).)
-66 1166 y(11.)46 b(Some)33 b(further)e(impro)m(v)m(emen)m(ts)i(ha)m(v)m
-(e)h(b)s(een)d(made)i(to)g(the)f(algorithms)i(for)e(simplifying)g(comp)
-s(ound)227 1279 y(Mappings,)f(as)f(used)g(b)m(y)g(AST)p
-Fy(_)p FG(SIMPLIFY.)66 1475 y(12.)46 b(A)33 b(new)f(UnitRadius)g
-(attribute)h(has)g(b)s(een)e(added)h(to)i(the)e(SphMap)g(class.)48
-b(This)31 b(allo)m(ws)j(impro)m(v)m(ed)227 1588 y(simpli\014cation)k
-(of)e(comp)s(ound)f(Mappings)i(\(CmpMaps\))f(in)m(v)m(olving)i(SphMaps)
-d(and)h(t)m(ypically)i(im-)227 1701 y(pro)m(v)m(es)31
-b(p)s(erformance)f(when)f(handling)h(FITS)g(w)m(orld)g(co)s(ordinate)h
-(information.)66 1897 y(13.)46 b(A)30 b(MatrixMap)h(no)e(longer)i
-(propagates)f(input)f(co)s(ordinate)h(v)-5 b(alues)30
-b(of)g(AST)p Fy(__)p FG(BAD)g(automatically)227 2010
-y(to)40 b(all)g(output)f(co)s(ordinates.)68 b(If)38 b(certain)i(output)
-f(co)s(ordinates)h(do)f(not)g(dep)s(end)f(on)h(the)g(a\013ected)227
-2123 y(input)g(co)s(ordinate\(s\))i(b)s(ecause)f(the)g(relev)-5
-b(an)m(t)41 b(matrix)f(elemen)m(ts)h(are)f(zero,)k(then)39
-b(they)h(ma)m(y)g(no)m(w)227 2236 y(remain)31 b(v)-5
-b(alid.)66 2432 y(14.)46 b(A)32 b(minor)e(bug)h(has)g(b)s(een)g
-(corrected)h(whic)m(h)f(could)g(cause)h(certain)g(pro)5
-b(jections)32 b(whic)m(h)f(in)m(v)m(olv)m(e)j(half)227
-2545 y(the)k(celestial)i(sphere)d(to)h(pro)s(duce)e(v)-5
-b(alid)38 b(co)s(ordinates)g(for)f(the)h(other)g(\(unpro)5
-b(jected\))37 b(half)h(of)f(the)227 2658 y(sphere)30
-b(as)g(w)m(ell.)66 2855 y(15.)46 b(A)30 b(bug)f(has)h(b)s(een)f
-(\014xed)g(whic)m(h)h(could)g(o)s(ccasionally)i(cause)e(AST)p
-Fy(_)p FG(CONVER)-8 b(T)29 b(to)h(think)f(that)i(con-)227
-2968 y(v)m(ersion)g(b)s(et)m(w)m(een)g(a)g(CmpF)-8 b(rame)30
-b(and)g(another)g(F)-8 b(rame)32 b(w)m(as)e(p)s(ossible)g(when,)g(in)g
-(fact,)i(it)f(w)m(asn't.)0 3275 y Fw(G.3)112 b(Changes)39
-b(In)m(tro)s(duced)f(in)f(V1.3)0 3503 y FG(The)26 b(follo)m(wing)i
-(describ)s(es)d(the)i(most)f(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f
-(o)s(ccurred)g(in)g(the)g(AST)g(library)g(b)s(et)m(w)m(een)0
-3616 y(v)m(ersions)31 b(V1.2)g(and)f(V1.3)i(\(not)f(the)f(most)h(recen)
-m(t)g(v)m(ersion\):)111 3892 y(1.)46 b(A)33 b(new)f(set)h(of)f
-(functions,)h(AST)p Fy(_)p FG(RESAMPLE)p Fp(<)p FG(X)p
-Fp(>)p FG(,)e(has)i(b)s(een)e(in)m(tro)s(duced)h(to)h(pro)m(vide)g
-(e\016cien)m(t)227 4004 y(resampling)26 b(of)g(gridded)f(data,)j(suc)m
-(h)e(as)g(sp)s(ectra)g(and)f(images,)j(under)d(the)h(con)m(trol)h(of)f
-(a)h(geometrical)227 4117 y(transformation)35 b(sp)s(eci\014ed)e(b)m(y)
-h(a)h(Mapping.)51 b(A)35 b(v)-5 b(ariet)m(y)35 b(of)f(sub-pixel)g(in)m
-(terp)s(olation)h(sc)m(hemes)g(are)227 4230 y(supp)s(orted.)111
-4427 y(2.)46 b(A)32 b(new)f(class,)i(PcdMap,)g(has)e(b)s(een)g(in)m
-(tro)s(duced.)44 b(This)31 b(is)h(a)g(sp)s(ecialised)g(form)f(of)h
-(Mapping)g(whic)m(h)227 4539 y(implemen)m(ts)f(2-dimensional)g
-(pincushion)e(or)i(barrel)f(distortion.)111 4736 y(3.)46
-b(A)40 b(bug)f(has)h(b)s(een)f(\014xed)g(whic)m(h)h(could)g(cause)g(a)g
-(FitsChan)g(to)h(pro)s(duce)d(to)s(o)j(man)m(y)f(digits)g(when)227
-4849 y(formatting)31 b(\015oating)g(p)s(oin)m(t)f(v)-5
-b(alues)31 b(for)e(inclusion)h(in)g(a)h(FITS)e(header)h(if)g(the)g(n)m
-(umerical)h(v)-5 b(alue)30 b(w)m(as)227 4962 y(in)g(the)h(range)g
-(-0.00099999.)20 b(.)15 b(.)g(to)32 b(-0.0001.)111 5158
-y(4.)46 b(A)32 b(bug)f(has)g(b)s(een)f(\014xed)h(whic)m(h)g(could)h
-(cause)g(a)f(FitsChan)h(to)g(lose)g(the)f(commen)m(t)i(asso)s(ciated)g
-(with)227 5271 y(a)e(string)f(v)-5 b(alue)31 b(in)f(a)h(FITS)f(header.)
-111 5467 y(5.)46 b(A)27 b(FitsChan)f(no)m(w)h(rep)s(orts)e(an)i(error)f
-(if)g(it)h(reads)g(a)f(FITS)g(header)h(whic)m(h)f(iden)m(ti\014es)h(a)g
-(non-standard)227 5580 y(sky)41 b(pro)5 b(jection)42
-b(\(previously)-8 b(,)44 b(this)d(w)m(as)g(accepted)h(without)f(error)g
-(and)f(a)h(Cartesian)h(pro)5 b(jection)227 5693 y(used)30
-b(instead\).)p eop end
-%%Page: 535 545
-TeXDict begin 535 544 bop 0 52 a Fz(G.4)92 b(Changes)30
-b(In)m(tro)s(duced)f(in)i(V1.4)2294 b FG(535)111 351
-y(6.)46 b(A)d(bug)f(has)h(b)s(een)e(\014xed)h(whic)m(h)h(could)g(prev)m
-(en)m(t)g(con)m(v)m(ersion)h(b)s(et)m(w)m(een)f(the)g(co)s(ordinate)g
-(systems)227 464 y(represen)m(ted)d(b)m(y)f(t)m(w)m(o)i(CmpF)-8
-b(rames.)69 b(This)38 b(could)i(only)g(o)s(ccur)f(if)h(the)g(CmpF)-8
-b(rames)39 b(con)m(tained)i(a)227 577 y(relativ)m(ely)33
-b(large)e(n)m(um)m(b)s(er)f(of)g(nested)g(F)-8 b(rames.)111
-766 y(7.)46 b(F)-8 b(urther)35 b(impro)m(v)m(emen)m(ts)h(ha)m(v)m(e)g
-(b)s(een)e(made)h(to)h(the)f(simpli\014cation)h(of)f(comp)s(ound)e
-(Mappings,)j(in-)227 879 y(cluding)29 b(\014xes)g(for)g(sev)m(eral)i
-(bugs)d(whic)m(h)h(could)h(cause)f(inde\014nite)g(lo)s(oping)h(or)f(un)
-m(w)m(an)m(ted)g(error)g(mes-)227 992 y(sages.)111 1181
-y(8.)46 b(Some)31 b(memory)f(leaks)h(ha)m(v)m(e)h(b)s(een)d(\014xed.)
-111 1369 y(9.)46 b(A)31 b(small)g(n)m(um)m(b)s(er)e(of)h(do)s(cumen)m
-(tation)h(errors)f(ha)m(v)m(e)i(b)s(een)e(corrected.)0
-1665 y Fw(G.4)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.4)0
-1887 y FG(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 2000 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V1.3)g(and)f(V1.4)i(\(not)f(the)f(most)h(recen)m(t)g(v)
-m(ersion\):)111 2264 y(1.)46 b(A)35 b(new)g(MathMap)h(class)g(has)e(b)s
-(een)h(in)m(tro)s(duced.)54 b(This)34 b(is)h(a)g(form)g(of)g(Mapping)g
-(that)h(allo)m(ws)g(y)m(ou)227 2377 y(to)c(de\014ne)f(co)s(ordinate)h
-(transformations)g(in)f(a)h(\015exible)f(and)g(transp)s(ortable)g(w)m
-(a)m(y)h(using)f(arithmetic)227 2490 y(op)s(erations)g(and)f
-(mathematical)i(functions)e(similar)h(to)g(those)g(a)m(v)-5
-b(ailable)33 b(in)d(F)-8 b(ortran.)111 2679 y(2.)46 b
-FE(W)-12 b(ARNING|INCOMP)j(A)g(TIBLE)32 b(CHANGE.)27
-b FG(T)-8 b(ransformation)28 b(routines)g(used)f(with)h(the)227
-2791 y(In)m(traMap)h(class)g(\(see,)g(for)f(example,)i(AST)p
-Fy(_)p FG(INTRAREG\))d(no)m(w)h(require)g(a)h(THIS)e(p)s(oin)m(ter)h
-(as)g(their)227 2904 y(\014rst)41 b(argumen)m(t.)74 b
-FE(Existing)47 b(implemen)m(tations)h(will)f(not)g(con)m(tin)m(ue)i(to)
-e(w)m(ork)g(correctly)227 3017 y(with)e(this)g(v)m(ersion)h(of)f(AST)g
-(unless)h(this)f(argumen)m(t)g(is)g(added.)67 b FG(There)39
-b(is)g(no)h(need)f(for)227 3130 y(existing)32 b(soft)m(w)m(are)f(to)h
-(mak)m(e)f(use)f(of)h(this)f(p)s(oin)m(ter,)g(but)g(it)h(m)m(ust)f(b)s
-(e)g(presen)m(t.)227 3281 y(This)45 b(c)m(hange)h(has)f(b)s(een)g(in)m
-(tro)s(duced)g(so)g(that)h(transformation)g(functions)f(can)g(gain)h
-(access)h(to)227 3394 y(In)m(traMap)31 b(attributes.)111
-3583 y(3.)46 b(A)34 b(new)e(In)m(traFlag)j(attribute)f(has)f(b)s(een)f
-(added)h(to)h(the)f(In)m(traMap)g(class.)50 b(This)33
-b(allo)m(ws)h(the)f(trans-)227 3696 y(formation)27 b(routines)g(used)f
-(b)m(y)g(In)m(traMaps)h(to)g(adapt)g(to)h(pro)s(duce)d(the)i(required)f
-(transformation)h(on)227 3809 y(a)k(p)s(er-In)m(traMap)f(basis)g(\()p
-Fu(x)p FG(20.9\).)111 3997 y(4.)46 b(The)30 b(Plot)h(attributes)g(Ma)5
-b(jTic)m(kLen)31 b(and)f(MinTic)m(kLen,)h(whic)m(h)f(con)m(trol)i(the)f
-(length)f(of)h(ma)5 b(jor)30 b(and)227 4110 y(minor)d(tic)m(k)i(marks)e
-(on)g(co)s(ordinate)h(axes,)h(ma)m(y)e(no)m(w)h(b)s(e)e(subscripted)g
-(using)h(an)g(axis)h(n)m(um)m(b)s(er.)38 b(This)227 4223
-y(allo)m(ws)31 b(tic)m(k)g(marks)e(of)g(di\013eren)m(t)h(lengths)g(to)g
-(b)s(e)f(used)g(on)g(eac)m(h)h(axis.)41 b(It)30 b(also)g(allo)m(ws)h
-(tic)m(k)g(marks)e(to)227 4336 y(b)s(e)h(suppressed)e(on)j(one)f(axis)h
-(only)g(b)m(y)f(setting)h(the)g(length)g(to)g(zero.)111
-4525 y(5.)46 b(The)33 b(v)-5 b(alue)34 b(of)f(the)h(Plot)g(attribute)g
-(NumLab,)f(whic)m(h)g(con)m(trols)h(the)g(plotting)g(of)f(n)m(umerical)
-h(lab)s(els)227 4638 y(on)h(co)s(ordinate)g(axes,)i(no)d(longer)i(has)e
-(an)m(y)h(e\013ect)h(on)e(whether)g(lab)s(elling)i(of)f(a)g(co)s
-(ordinate)g(grid)f(is)227 4751 y(in)m(terior)d(or)g(exterior)g(\(as)g
-(con)m(trolled)h(b)m(y)e(the)h(Lab)s(elling)g(attribute\).)111
-4940 y(6.)46 b(The)32 b(FitsChan)h(class)g(no)m(w)g(pro)m(vides)f(some)
-i(supp)s(ort)c(for)j(the)g(IRAF-sp)s(eci\014c)g(\\ZPX")g(sky)f(pro)5
-b(jec-)227 5053 y(tion,)28 b(whic)m(h)f(is)g(con)m(v)m(erted)h
-(transparen)m(tly)f(in)m(to)g(the)g(equiv)-5 b(alen)m(t)28
-b(FITS)e(\\ZPN")h(pro)5 b(jection)28 b(\(see)f(the)227
-5165 y(description)k(of)f(the)h(Enco)s(ding)f(attribute)h(for)f
-(details\).)111 5354 y(7.)46 b(The)28 b(FitsChan)g(class)h(no)m(w)f
-(recognises)h(the)f(co)s(ordinate)h(system)f(\\ICRS")g(\(In)m
-(ternational)i(Celestial)227 5467 y(Reference)36 b(System\))e(as)h
-(equiv)-5 b(alen)m(t)36 b(to)g(\\FK5".)54 b(This)34 b(is)h(an)f(in)m
-(terim)h(measure)g(and)f(full)g(supp)s(ort)227 5580 y(for)j(the)f
-(\(exceedingly)j(small\))e(di\013erence)g(b)s(et)m(w)m(een)g(ICRS)f
-(and)g(FK5)h(will)f(b)s(e)g(added)g(at)h(a)g(future)227
-5693 y(release.)p eop end
-%%Page: 536 546
-TeXDict begin 536 545 bop 0 52 a FG(536)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)227 351 y FG(Note)37
-b(that)f(\\ICRS")g(is)f(not)h(y)m(et)h(recognised)f(as)g(a)g(co)s
-(ordinate)g(system)g(b)m(y)g(other)f(classes)i(suc)m(h)e(as)227
-464 y(SkyF)-8 b(rame,)31 b(so)g(this)f(c)m(hange)i(only)e(facilitates)j
-(the)e(imp)s(ortation)g(of)f(foreign)h(data.)111 656
-y(8.)46 b(A)35 b(bug)f(in)g(the)g(FitsChan)g(class)i(has)e(b)s(een)f
-(\014xed)h(whic)m(h)g(could)h(result)f(in)g(longitude)h(v)-5
-b(alues)35 b(b)s(eing)227 768 y(incorrect)30 b(b)m(y)f(180)i(degrees)f
-(when)e(using)h(cylindrical)h(sky)e(pro)5 b(jections,)31
-b(suc)m(h)e(as)g(the)g(FITS)g(\\CAR")227 881 y(pro)5
-b(jection.)111 1073 y(9.)46 b(A)30 b(bug)f(in)g(the)h(FitsChan)f(class)
-h(has)f(b)s(een)g(\014xed)g(whic)m(h)g(could)h(result)f(in)g(the)h
-(FITS)f(sky)g(pro)5 b(jection)227 1186 y(parameters)40
-b(Pro)5 b(jP\(0\))39 b(to)h(Pro)5 b(jP\(9\))40 b(b)s(eing)e
-(incorrectly)i(named)f(PR)m(OJP1)f(to)i(PR)m(OJP10)f(when)227
-1299 y(written)31 b(out)f(as)h(FITS)f(cards.)66 1490
-y(10.)46 b(A)e(bug)e(in)i(the)f(FitsChan)g(class)h(has)g(b)s(een)e
-(\014xed)h(whic)m(h)g(could)g(cause)h(confusion)f(b)s(et)m(w)m(een)h
-(the)227 1603 y(FITS-IRAF)31 b(and)g(FITS-W)m(CS)g(enco)s(ding)g(sc)m
-(hemes)h(if)f(b)s(oth)g(a)g(CD)h(matrix)f(and)g(a)h(PC)e(matrix)i(are)
-227 1716 y(erroneously)f(presen)m(t)f(in)g(a)h(FITS)e(header.)66
-1907 y(11.)46 b(Some)31 b(minor)f(memory)g(leaks)h(ha)m(v)m(e)h(b)s
-(een)d(\014xed.)66 2099 y(12.)46 b(A)31 b(small)g(n)m(um)m(b)s(er)e(of)
-h(do)s(cumen)m(tation)h(errors)f(ha)m(v)m(e)i(b)s(een)e(corrected.)0
-2398 y Fw(G.5)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.5)0
-2622 y FG(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 2735 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V1.4)g(and)f(V1.5)i(\(not)f(the)f(most)h(recen)m(t)g(v)
-m(ersion\):)111 3003 y(1.)46 b(The)36 b(FitsChan)g(class)i(has)e(b)s
-(een)f(mo)s(di\014ed)h(to)h(supp)s(ort)d(the)j(latest)h(draft)e(FITS)g
-(W)m(CS)g(standard,)227 3116 y(describ)s(ed)27 b(in)g(the)h(t)m(w)m(o)h
-(pap)s(ers)e(\\Represen)m(tation)i(of)f(w)m(orld)g(co)s(ordinates)g(in)
-f(FITS")h(\(E.W.)16 b(Greisen)227 3229 y(and)31 b(M.)16
-b(Calabretta,)34 b(dated)d(30th)i(No)m(v)m(em)m(b)s(er,)g(1999\),)i
-(and)c(\\Represen)m(tation)i(of)f(celestial)i(co)s(ordi-)227
-3342 y(nates)27 b(in)e(FITS")h(\(M.)16 b(Calabretta)27
-b(and)f(E.W.)16 b(Greisen,)27 b(dated)f(24th)h(Septem)m(b)s(er,)f
-(1999\).)41 b(These)26 b(are)227 3455 y(a)m(v)-5 b(ailable)33
-b(at)e(h)m(ttp://www.cv.nrao.edu/\014ts/do)s(cumen)m(ts/w)m(cs/w)m
-(cs.h)m(tml.)227 3607 y(The)f(FITS-W)m(CS)g(enco)s(ding)g(no)m(w)h
-(uses)f(these)h(up)s(dated)e(con)m(v)m(en)m(tions.)42
-b(The)30 b(main)h(c)m(hanges)g(are:)336 3824 y Fu(\017)46
-b FG(Rotation)31 b(and)d(scaling)h(of)g(pixel)g(axes)g(is)g(no)m(w)f
-(represen)m(ted)h(b)m(y)f(a)h(matrix)g(of)g Fy(CDj_i)e
-FG(k)m(eyw)m(ords)427 3937 y(instead)k(of)f(a)h(com)m(bination)h(of)e
-Fy(PCjjjiii)f FG(and)g Fy(CDELTj)g FG(k)m(eyw)m(ords.)336
-4085 y Fu(\017)46 b FG(Pro)5 b(jection)37 b(parameters)g(are)f(no)m(w)g
-(asso)s(ciated)h(with)f(particular)g(axes)h(and)e(are)h(represen)m(ted)
-427 4198 y(b)m(y)31 b Fy(PVi_m)d FG(k)m(eyw)m(ords)j(instead)g(of)f
-(the)h Fy(PROJPm)e FG(k)m(eyw)m(ords.)336 4346 y Fu(\017)46
-b FG(The)31 b(tangen)m(t)j(plane)d(pro)5 b(jection)33
-b(\(\\T)-8 b(AN"\))33 b(can)f(no)m(w)g(include)f(optional)i(p)s
-(olynomial)f(correc-)427 4459 y(tion)f(terms.)336 4607
-y Fu(\017)46 b FG(An)24 b(en)m(tire)g(set)h(of)e(k)m(eyw)m(ords)i(m)m
-(ust)e(b)s(e)g(supplied)g(for)g(eac)m(h)i(set)f(of)g(secondary)g(axis)g
-(descriptions,)427 4720 y(and)39 b(eac)m(h)i(suc)m(h)e(k)m(eyw)m(ord)h
-(m)m(ust)g(\014nish)e(with)h(a)h(single)g(c)m(haracter)h(indicating)g
-(whic)m(h)e(set)h(it)427 4833 y(b)s(elongs)f(to.)67 b(This)39
-b(means)f(that)i(k)m(eyw)m(ords)f(whic)m(h)g(previously)g(o)s(ccupied)g
-(eigh)m(t)h(c)m(haracters)427 4946 y(ha)m(v)m(e)d(b)s(een)f(shorten)f
-(to)i(sev)m(en)f(to)h(lea)m(v)m(e)h(ro)s(om)e(for)f(this)h(extra)h(c)m
-(haracter.)59 b(Th)m(us)35 b Fy(LONGPOLE)427 5059 y FG(has)30
-b(b)s(ecome)h Fy(LONPOLE)e FG(and)g Fy(RADECSYS)f FG(has)j(b)s(ecome)f
-Fy(RADESYS)p FG(.)111 5276 y(2.)46 b(Tw)m(o)31 b(new)f(enco)s(dings)g
-(ha)m(v)m(e)h(b)s(een)f(added)g(to)h(the)f(FitsChan)h(class:)227
-5467 y FE(FITS-PC)45 b FG(This)34 b(enco)s(ding)g(uses)g(the)h(con)m(v)
-m(en)m(tions)i(of)d(the)h(no)m(w)g(sup)s(erseded)d(FITS)i(W)m(CS)h(pap)
-s(er)427 5580 y(b)m(y)j(E.W.)16 b(Greisen)37 b(and)g(M.)16
-b(Calabretta)39 b(whic)m(h)e(used)g(k)m(eyw)m(ords)h
-Fy(CDELTj)e FG(and)g Fy(PCjjjiii)g FG(to)427 5693 y(describ)s(e)27
-b(axis)h(scaling)h(and)e(rotation.)41 b(These)27 b(are)h(the)g(con)m(v)
-m(en)m(tions)h(whic)m(h)e(w)m(ere)h(used)f(b)m(y)g(the)p
-eop end
-%%Page: 537 547
-TeXDict begin 537 546 bop 0 52 a Fz(G.6)92 b(Changes)30
-b(In)m(tro)s(duced)f(in)i(V1.6)2294 b FG(537)427 351
-y(FITS-W)m(CS)30 b(enco)s(ding)f(prior)h(to)g(v)m(ersion)g(1.5)h(of)f
-(AST.)f(This)g(enco)s(ding)h(is)g(pro)m(vided)f(to)i(allo)m(w)427
-464 y(existing)c(data)f(whic)m(h)f(use)g(these)g(con)m(v)m(en)m(tions)j
-(to)e(b)s(e)e(read.)39 b(It)26 b(should)e(not)h(in)g(general)i(b)s(e)d
-(used)427 577 y(to)31 b(create)h(new)e(data.)227 716
-y FE(FITS-AIPS)45 b FG(This)26 b(enco)s(ding)g(is)h(based)f(on)g(the)h
-(con)m(v)m(en)m(tions)h(describ)s(ed)e(in)g(the)g(do)s(cumen)m(t)h
-(\\Non-)427 829 y(linear)d(Co)s(ordinate)g(Systems)g(in)f(AIPS")g(b)m
-(y)h(Eric)g(W.)g(Greisen)g(\(revised)g(9th)g(Septem)m(b)s(er,)h(1994)
-427 942 y(and)45 b(a)m(v)-5 b(ailable)48 b(b)m(y)d(ftp)g(from)g
-(\014ts.cv.nrao.edu)h(/\014ts/do)s(cumen)m(ts/w)m(cs/aips27.ps.Z\).)i
-(This)427 1055 y(enco)s(ding)31 b(uses)f Fy(CROTAi)e
-FG(and)i Fy(CDELTi)f FG(k)m(eyw)m(ords)h(to)h(describ)s(e)f(axis)h
-(rotation)h(and)e(scaling.)111 1236 y(3.)46 b(The)31
-b(FitsChan)g(class)h(no)m(w)f(pro)m(vides)h(some)f(supp)s(ort)f(for)h
-(the)g(IRAF-sp)s(eci\014c)h(\\TNX")g(sky)f(pro)5 b(jec-)227
-1349 y(tion,)28 b(whic)m(h)d(is)h(con)m(v)m(erted)i(transparen)m(tly)e
-(in)m(to)h(the)f(equiv)-5 b(alen)m(t)27 b(FITS)f(\\T)-8
-b(AN")27 b(pro)5 b(jection)26 b(\(see)h(the)227 1462
-y(description)k(of)f(the)h(Enco)s(ding)f(attribute)h(for)f(details\).)
-111 1642 y(4.)46 b(F)-8 b(rameSets)29 b(originally)g(read)f(from)g(a)g
-(DSS)f(enco)s(ded)h(FITS)f(header)h(can)g(no)m(w)g(b)s(e)f(written)h
-(out)g(using)227 1755 y(the)c(FITS-W)m(CS)f(enco)s(ding)h(\(a)g(T)-8
-b(AN)24 b(pro)5 b(jection)25 b(with)e(correction)i(terms)f(will)g(b)s
-(e)f(used\))g(in)g(addition)227 1868 y(to)28 b(the)e(DSS)g(enco)s
-(ding.)40 b(The)26 b(rev)m(erse)h(is)f(also)i(p)s(ossible:)38
-b(F)-8 b(rameSets)28 b(originally)g(read)e(from)g(a)h(FITS-)227
-1981 y(W)m(CS)g(enco)s(ded)e(FITS)h(header)g(and)g(whic)m(h)g(use)g(a)g
-(T)-8 b(AN)27 b(pro)5 b(jection)27 b(can)f(no)m(w)h(b)s(e)e(written)h
-(out)h(using)227 2094 y(the)k(DSS)f(enco)s(ding.)111
-2275 y(5.)46 b(The)d(algorithm)i(used)d(b)m(y)i(the)f(FitsChan)g(class)
-i(to)f(v)m(erify)g(that)g(a)f(F)-8 b(rameSet)45 b(conforms)e(to)h(the)
-227 2388 y(FITS-W)m(CS)26 b(mo)s(del)h(has)f(b)s(een)g(impro)m(v)m(ed)h
-(so)g(that)g(F)-8 b(rameSets)28 b(including)e(more)h(complex)g
-(mixtures)227 2500 y(of)k(parallel)g(and)f(serial)h(Mappings)f(can)h(b)
-s(e)f(written)g(out)h(using)f(the)g(FITS-W)m(CS)g(enco)s(ding.)111
-2681 y(6.)46 b(The)26 b(FitsChan)g(class)h(has)e(b)s(een)h(c)m(hanged)g
-(so)h(that)f(long)h(strings)f(included)f(in)h(the)g(description)g(of)h
-(an)227 2794 y(Ob)5 b(ject)32 b(can)f(b)s(e)g(sa)m(v)m(ed)h(and)f
-(restored)g(without)h(truncation)f(when)f(using)h(the)h(NA)-8
-b(TIVE)31 b(enco)s(ding.)227 2907 y(Previously)-8 b(,)34
-b(v)m(ery)e(long)h(F)-8 b(rame)33 b(titles,)i(mathematical)f
-(expressions,)f Fx(etc.)45 b FG(w)m(ere)33 b(truncated)f(if)g(they)227
-3020 y(exceeded)26 b(the)f(capacit)m(y)i(of)e(a)g(single)g(FITS)f
-(header)h(card.)39 b(They)24 b(are)h(no)m(w)g(split)f(o)m(v)m(er)j(sev)
-m(eral)f(header)227 3133 y(cards)j(so)h(that)g(they)f(can)h(b)s(e)e
-(restored)i(without)f(truncation.)41 b(Note,)31 b(this)e(facilit)m(y)i
-(is)f(only)f(a)m(v)-5 b(ailable)227 3246 y(when)30 b(using)g(NA)-8
-b(TIVE)30 b(enco)s(ding.)111 3426 y(7.)46 b(The)33 b(FitsChan)f(class)i
-(has)e(a)i(new)e(attribute)i(called)g(W)-8 b(arnings)33
-b(whic)m(h)f(can)i(b)s(e)e(used)g(to)h(select)i(p)s(o-)227
-3539 y(ten)m(tially)i(dangerous)c(conditions)i(under)e(whic)m(h)g(w)m
-(arnings)h(should)f(b)s(e)h(issued.)51 b(These)34 b(conditions)227
-3652 y(include)29 b(\(for)f(instance\))i(unsupp)s(orted)c(features)j
-(within)f(non-standard)f(pro)5 b(jections,)30 b(missing)e(k)m(ey-)227
-3765 y(w)m(ords)i(for)g(whic)m(h)g(default)h(v)-5 b(alues)31
-b(will)f(b)s(e)g(used,)g Fx(etc)p FG(.)111 3946 y(8.)46
-b(The)c(WcsMap)g(class)h(has)e(b)s(een)h(c)m(hanged)g(to)h(supp)s(ort)d
-(the)i(c)m(hanges)g(made)g(to)h(the)f(FITS-W)m(CS)227
-4059 y(enco)s(ding)31 b(in)f(the)g(FitsChan)g(class:)336
-4240 y Fu(\017)46 b FG(Pro)5 b(jection)42 b(parameters)f(are)g(no)m(w)f
-(asso)s(ciated)i(with)e(a)h(particular)g(axis)g(and)f(are)h(sp)s
-(eci\014ed)427 4352 y(using)h(a)g(new)g(set)g(of)g(attributes)h(called)
-g(PVj)p Fy(_)p FG(m.)75 b(Here,)45 b(\\j")e(is)f(the)g(index)g(of)g(an)
-g(axis)g(of)427 4465 y(WcsMap,)32 b(and)e(\\m")h(is)f(the)h(index)e(of)
-i(the)g(pro)5 b(jection)31 b(parameter.)336 4605 y Fu(\017)46
-b FG(The)28 b(old)g(attributes)g(Pro)5 b(jP\(0\))29 b(to)g(Pro)5
-b(jP\(9\))28 b(are)h(still)g(a)m(v)-5 b(ailable)30 b(but)d(are)h(no)m
-(w)g(deprecated)h(in)427 4717 y(fa)m(v)m(our)g(of)g(the)g(new)f(PVj)p
-Fy(_)p FG(m)f(attributes.)41 b(They)28 b(are)h(in)m(terpreted)f(as)h
-(aliases)h(for)e(PV\(axlat\))p Fy(_)p FG(0)427 4830 y(to)j(PV\(axlat\))
-p Fy(_)p FG(9,)i(where)d(\\axlat")j(is)d(the)h(index)f(of)g(the)h
-(latitude)g(axis.)336 4970 y Fu(\017)46 b FG(The)32 b(GLS)h(pro)5
-b(jection)33 b(pro)5 b(jection)33 b(has)f(b)s(een)g(renamed)g(as)h
-(SFL,)g(but)f(the)g(AST)p Fy(__)p FG(GLS)f(t)m(yp)s(e)427
-5082 y(has)f(b)s(een)g(retained)h(as)f(an)h(alias)g(for)f(AST)p
-Fy(__)p FG(SFL.)0 5366 y Fw(G.6)112 b(Changes)39 b(In)m(tro)s(duced)f
-(in)f(V1.6)0 5580 y FG(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 5693 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V1.5)g(and)f(V1.6:)p eop end
-%%Page: 538 548
-TeXDict begin 538 547 bop 0 52 a FG(538)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FG(1.)46
-b(A)24 b(bug)f(has)g(b)s(een)g(\014xed)g(in)g(the)h(Plot)h(class)f
-(whic)m(h)f(could)h(cause)g(groups)f(of)h(tic)m(k)h(marks)e(to)h(b)s(e)
-f(skipp)s(ed)227 464 y(when)30 b(using)g(v)m(ery)g(small)h(gaps.)111
-671 y(2.)46 b(A)35 b(bug)f(has)h(b)s(een)f(\014xed)g(in)h(the)g(Plot)g
-(class)h(whic)m(h)f(could)g(cause)g(axes)g(to)h(b)s(e)e(lab)s(eled)h
-(outside)g(the)227 784 y(visible)c(windo)m(w,)f(resulting)h(in)f(no)g
-(axes)h(b)s(eing)f(visible.)111 991 y(3.)46 b(The)32
-b(FITS-W)m(CS)h(enco)s(ding)g(used)e(b)m(y)i(the)g(FitsChan)g(class)g
-(no)m(w)g(includes)f(the)h(W)m(CSNAME)g(k)m(ey-)227 1103
-y(w)m(ord.)44 b(When)32 b(creating)h(a)f(F)-8 b(rameSet)32
-b(from)f(FITS)g(headers,)h(the)g(v)-5 b(alues)32 b(of)f(the)h(W)m
-(CSNAME)g(k)m(ey-)227 1216 y(w)m(ords)i(are)h(no)m(w)g(used)e(as)i(the)
-g(Domain)g(names)f(for)g(the)h(corresp)s(onding)f(F)-8
-b(rames)35 b(in)f(the)h(returned)227 1329 y(F)-8 b(rameSet.)42
-b(When)30 b(writing)g(a)h(F)-8 b(rameSet)32 b(to)f(a)f(FITS)g(header)g
-(the)g(Domain)h(names)g(of)f(eac)m(h)i(F)-8 b(rame)227
-1442 y(are)31 b(stored)g(in)f(W)m(CSNAME)h(k)m(eyw)m(ords)f(in)g(the)h
-(header.)111 1649 y(4.)46 b(The)34 b(FITS-W)m(CS)f(enco)s(ding)h(used)f
-(b)m(y)h(the)h(FitsChan)e(class)i(no)m(w)f(attempts)h(to)g(retain)f
-(the)g(iden)m(ti-)227 1762 y(\014cation)f(letter)f(asso)s(ciated)h
-(with)f(m)m(ultiple)g(axis)g(descriptions.)44 b(When)31
-b(reading)g(a)h(F)-8 b(rameSet)33 b(from)227 1875 y(a)38
-b(FITS)f(header,)j(the)e(iden)m(ti\014cation)h(letter)g(is)f(stored)g
-(in)g(the)g(Iden)m(t)f(attribute)i(for)e(eac)m(h)i(F)-8
-b(rame.)227 1988 y(When)42 b(writing)g(a)h(F)-8 b(rameSet)43
-b(to)g(a)f(FITS)f(header,)k(the)e(iden)m(ti\014cation)g(letter)h(is)e
-(read)g(from)f(the)227 2101 y(Iden)m(t)28 b(attribute)g(of)f(eac)m(h)i
-(F)-8 b(rame.)40 b(The)27 b(letter)i(to)f(asso)s(ciate)h(with)e(eac)m
-(h)i(F)-8 b(rame)28 b(can)g(b)s(e)f(c)m(hanged)h(b)m(y)227
-2213 y(assigning)j(a)g(new)f(v)-5 b(alue)31 b(to)g(the)f(F)-8
-b(rame's)32 b(Iden)m(t)e(attribute.)111 2420 y(5.)46
-b(The)31 b(FITS-W)m(CS,)h(FITS-PC,)f(FITS-IRAF)g(and)g(FITS-AIPS)f
-(enco)s(dings)i(used)e(b)m(y)i(the)g(FitsChan)227 2533
-y(class)g(no)m(w)e(create)i(a)f(SkyF)-8 b(rame)31 b(with)f(the)h
-(System)g(attribute)g(set)g(to)g(\\Unkno)m(wn")g(if)g(the)f(CTYPE)227
-2646 y(k)m(eyw)m(ords)h(in)f(the)h(supplied)e(header)h(refers)g(to)h
-(an)g(unkno)m(wn)e(celestial)k(co)s(ordinate)e(system.)41
-b(Previ-)227 2759 y(ously)-8 b(,)31 b(a)g(F)-8 b(rame)31
-b(w)m(as)g(used)f(instead)g(of)h(a)g(SkyF)-8 b(rame.)111
-2966 y(6.)46 b(The)31 b(FITS-W)m(CS,)h(FITS-PC,)f(FITS-IRAF)g(and)g
-(FITS-AIPS)f(enco)s(dings)i(used)e(b)m(y)i(the)g(FitsChan)227
-3079 y(class)38 b(no)f(longer)h(rep)s(ort)f(an)g(error)g(if)g(the)h
-(FITS)e(header)h(con)m(tains)i(no)e(CTYPE)f(k)m(eyw)m(ords.)62
-b(It)37 b(is)227 3191 y(assumed)22 b(that)i(a)f(missing)g(CTYPE)f(k)m
-(eyw)m(ord)i(implies)f(that)g(the)g(w)m(orld)g(co)s(ordinate)h(system)f
-(is)g(linear)227 3304 y(and)30 b(iden)m(tically)i(equal)f(to)g(\\in)m
-(termediate)i(w)m(orld)d(co)s(ordinates".)111 3511 y(7.)46
-b(The)37 b(new)f(v)-5 b(alue)37 b(\\no)s(ct)m(yp)s(e")h(is)f(no)m(w)g
-(recognized)h(b)m(y)f(the)g(W)-8 b(arnings)37 b(attribute)h(of)f(the)g
-(FitsChan)227 3624 y(class.)i(This)23 b(v)-5 b(alue)23
-b(causes)h(w)m(arnings)f(to)h(b)s(e)e(issued)h(if)g(CTYPE)f(k)m(eyw)m
-(ords)i(are)f(missing)g(from)g(foreign)227 3737 y(enco)s(dings.)111
-3944 y(8.)46 b(A)28 b(new)g(attribute)h(called)g(AllW)-8
-b(arnings)29 b(has)f(b)s(een)f(added)g(to)i(the)f(FitsChan)g(class.)41
-b(This)27 b(is)h(a)g(read-)227 4057 y(only)-8 b(,)34
-b(space)f(separated)f(list)h(of)g(all)g(the)g(kno)m(wn)e(condition)i
-(names)f(whic)m(h)g(can)h(b)s(e)f(sp)s(eci\014ed)f(in)h(the)227
-4170 y(W)-8 b(arnings)31 b(attribute.)111 4376 y(9.)46
-b(The)38 b(FitsChan)f(class)i(no)m(w)f(attempts)h(to)f(assigns)g(a)h
-(Title)f(to)h(eac)m(h)g(F)-8 b(rame)39 b(in)e(a)i(F)-8
-b(rameSet)39 b(read)227 4489 y(using)d(a)g(foreign)g(enco)s(ding.)57
-b(The)35 b(Title)i(is)f(based)f(on)h(the)g(Domain)g(name)g(of)g(the)g
-(F)-8 b(rame.)58 b(If)35 b(the)227 4602 y(F)-8 b(rame)32
-b(has)e(no)g(Domain)h(name,)g(the)f(default)h(Title)g(supplied)e(b)m(y)
-h(the)h(F)-8 b(rame)31 b(class)g(is)g(retained.)66 4809
-y(10.)46 b(The)36 b(FitsChan)g(class)g(uses)g(the)g(commen)m(ts)h(asso)
-s(ciated)g(with)f(CTYPE)f(k)m(eyw)m(ords)i(as)f(axis)g(lab)s(els)227
-4922 y(when)f(reading)h(a)g(foreign)g(enco)s(ding.)57
-b(This)35 b(b)s(eha)m(viour)g(has)h(b)s(een)f(mo)s(di\014ed)f(so)i
-(that)g(the)g(default)227 5035 y(lab)s(els)c(pro)m(vided)e(b)m(y)h(the)
-g(F)-8 b(rame)32 b(class)g(are)g(retained)f(\(instead)h(of)f(using)g
-(the)g(CTYPE)f(commen)m(ts\))227 5148 y(if)h(an)m(y)f(of)h(the)f(CTYPE)
-g(commen)m(ts)h(are)g(iden)m(tical.)66 5354 y(11.)46
-b(A)25 b(new)f(\\in)m(terp)s(olation")j(sc)m(heme)f(iden)m(ti\014ed)e
-(b)m(y)h(the)g(sym)m(b)s(olic)g(constan)m(t)h(AST)p Fy(__)p
-FG(BLOCKA)-10 b(VE)23 b(has)227 5467 y(b)s(een)36 b(added)f(to)i(the)g
-(AST)p Fy(_)p FG(RESAMPLE)p Fp(<)p FG(X)p Fp(>)d FG(set)j(of)g
-(functions.)58 b(The)35 b(new)h(sc)m(heme)h(calculates)227
-5580 y(eac)m(h)f(output)f(pixel)g(v)-5 b(alue)36 b(b)m(y)f(\014nding)f
-(the)h(mean)g(of)g(the)g(input)f(pixels)i(in)e(a)i(b)s(o)m(x)f(cen)m
-(tred)g(on)g(the)227 5693 y(output)30 b(pixel.)p eop
-end
-%%Page: 539 549
-TeXDict begin 539 548 bop 0 52 a Fz(G.7)92 b(Changes)30
-b(In)m(tro)s(duced)f(in)i(V1.7)2294 b FG(539)66 351 y(12.)46
-b(The)24 b(SkyF)-8 b(rame)25 b(class)h(can)e(no)m(w)h(b)s(e)f(used)g
-(to)h(represen)m(t)f(an)h(arbitrary)f(spherical)h(co)s(ordinate)g
-(system)227 464 y(b)m(y)31 b(setting)g(its)g(System)f(attribute)h(to)g
-(\\Unkno)m(wn".)66 645 y(13.)46 b(The)28 b(indices)f(of)h(the)g
-(latitude)h(and)e(longitude)i(axes)f(of)g(a)g(SkyF)-8
-b(rame)28 b(can)g(no)m(w)g(b)s(e)f(found)g(using)g(new)227
-758 y(read-only)35 b(attributes)h(LatAxis)f(and)f(LonAxis.)54
-b(The)34 b(e\013ects)j(of)d(an)m(y)i(axis)f(p)s(erm)m(utation)g(is)f
-(tak)m(en)227 871 y(in)m(to)e(accoun)m(t.)66 1052 y(14.)46
-b(A)37 b(new)f(attribute)h(called)g(Iden)m(t)f(has)h(b)s(een)e(added)h
-(to)h(the)f(Ob)5 b(ject)37 b(class.)59 b(This)36 b(serv)m(es)h(the)f
-(same)227 1165 y(purp)s(ose)f(as)h(the)g(existing)h(ID)f(attribute,)j
-(but)c(\(unlik)m(e)i(ID\))f(its)g(v)-5 b(alue)37 b(is)f(transferred)f
-(to)i(the)f(new)227 1278 y(Ob)5 b(ject)31 b(when)e(a)i(cop)m(y)g(is)f
-(made.)66 1458 y(15.)46 b(A)38 b(bug)e(has)h(b)s(een)f(\014xed)h(whic)m
-(h)g(could)g(prev)m(en)m(t)h(complex)g(CmpF)-8 b(rames)37
-b(b)s(eha)m(ving)g(correctly)h(\(for)227 1571 y(instance,)30
-b(resulting)f(in)f(the)g(failure)h(of)f(attempts)i(to)f(\014nd)e(a)i
-(Mapping)f(b)s(et)m(w)m(een)h(a)g(CmpF)-8 b(rame)28 b(and)227
-1684 y(itself)7 b(\).)0 1968 y Fw(G.7)112 b(Changes)39
-b(In)m(tro)s(duced)f(in)f(V1.7)0 2182 y FG(The)g(follo)m(wing)h
-(describ)s(es)f(the)g(most)h(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f
-(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g(AST)g(library)0
-2295 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V1.6)g(and)f(V1.7:)111
-2530 y(1.)46 b(The)22 b(F)-8 b(rame)24 b(class)f(has)f(a)h(new)f(metho)
-s(d)g(called)i(AST)p Fy(_)p FG(ANGLE)e(whic)m(h)g(returns)g(the)g
-(angle)i(subtended)227 2643 y(b)m(y)31 b(t)m(w)m(o)g(p)s(oin)m(ts)f(at)
-i(a)e(third)g(p)s(oin)m(t)g(within)g(a)h(2)g(or)f(3)h(dimensional)f(F)
--8 b(rame.)111 2824 y(2.)46 b(The)40 b(F)-8 b(rame)41
-b(class)g(has)f(a)h(new)e(metho)s(d)h(called)h(AST)p
-Fy(_)p FG(OFFSET2)e(whic)m(h)h(calculates)j(a)d(p)s(osition)227
-2937 y(whic)m(h)34 b(is)h(o\013set)g(a)m(w)m(a)m(y)i(from)d(a)h(giv)m
-(en)g(starting)g(p)s(oin)m(t)g(b)m(y)f(a)h(sp)s(eci\014ed)f(distance)h
-(along)g(a)g(geo)s(desic)227 3050 y(curv)m(e)i(whic)m(h)e(passes)h
-(through)g(the)g(starting)h(p)s(oin)m(t)f(at)h(a)f(giv)m(en)h(p)s
-(osition)g(angle.)58 b(It)37 b(can)f(only)g(b)s(e)227
-3163 y(used)30 b(with)g(2-dimensional)h(F)-8 b(rames.)111
-3344 y(3.)46 b(The)33 b(F)-8 b(rame)34 b(class)g(has)f(a)g(new)g(metho)
-s(d)f(called)j(AST)p Fy(_)p FG(AXDIST)-8 b(ANCE)32 b(whic)m(h)h
-(returns)f(the)h(incre-)227 3457 y(men)m(t)k(b)s(et)m(w)m(een)g(t)m(w)m
-(o)g(supplied)e(axis)h(v)-5 b(alues.)59 b(F)-8 b(or)36
-b(axes)h(b)s(elonging)f(to)h(SkyF)-8 b(rames,)38 b(the)f(returned)227
-3570 y(v)-5 b(alue)31 b(is)g(normalized)f(in)m(to)i(the)e(range)h
-Fu(\006)p Fp(\031)s FG(.)111 3751 y(4.)46 b(The)31 b(F)-8
-b(rame)31 b(class)h(has)f(a)g(new)f(metho)s(d)h(called)h(AST)p
-Fy(_)p FG(AX)m(OFFSET)e(whic)m(h)g(returns)g(an)h(axis)g(v)-5
-b(alue)227 3863 y(a)40 b(giv)m(en)g(incremen)m(t)g(a)m(w)m(a)m(y)i
-(from)d(a)g(sp)s(eci\014ed)g(axis)h(v)-5 b(alue.)68 b(F)-8
-b(or)40 b(axes)g(b)s(elonging)g(to)g(SkyF)-8 b(rames,)227
-3976 y(the)34 b(returned)f(v)-5 b(alue)34 b(is)f(normalized)i(in)m(to)f
-(the)g(range)g Fu(\006)p Fp(\031)j FG(\(for)c(latitude)i(axes\))g(or)e
-(zero)i(to)f(2)p Fp(\031)j FG(\(for)227 4089 y(longitude)31
-b(axes\).)111 4270 y(5.)46 b(The)27 b(Plot)i(class)f(has)g(a)g(new)f
-(metho)s(d)g(called)i(AST)p Fy(_)p FG(GENCUR)-10 b(VE)27
-b(whic)m(h)g(allo)m(ws)i(generalised)g(user-)227 4383
-y(de\014ned)f(curv)m(es)h(to)g(b)s(e)f(dra)m(wn.)40 b(The)28
-b(curv)m(e)h(is)g(de\014ned)e(b)m(y)i(a)g(user-supplied)e(Mapping)h
-(whic)m(h)h(maps)227 4496 y(distance)g(along)h(the)f(curv)m(e)f(in)m
-(to)i(the)f(corresp)s(onding)e(p)s(osition)i(in)f(the)g(curren)m(t)h(F)
--8 b(rame)29 b(of)g(the)f(Plot.)227 4609 y(The)c(new)f(metho)s(d)h
-(then)g(maps)f(these)i(curren)m(t)f(F)-8 b(rame)25 b(p)s(osition)f(in)m
-(to)h(graphics)f(co)s(ordinates,)j(taking)227 4722 y(care)k(of)g(an)m
-(y)g(non-linearities)g(or)g(discon)m(tin)m(uities)h(in)e(the)g
-(mapping.)111 4903 y(6.)46 b(The)26 b(Plot)h(class)g(has)f(a)h(new)e
-(metho)s(d)h(called)h(AST)p Fy(_)p FG(GRFSET)e(whic)m(h)h(allo)m(ws)i
-(the)e(underlying)f(prim-)227 5016 y(itiv)m(e)34 b(graphics)f
-(functions)f(to)h(b)s(e)f(selected)i(at)f(run-time.)47
-b(Previously)-8 b(,)34 b(the)e(functions)g(used)g(b)m(y)g(the)227
-5128 y(Plot)c(class)g(to)g(pro)s(duce)f(graphics)g(could)g(only)g(b)s
-(e)g(selected)i(at)f(link-time,)h(using)e(the)g(options)h(of)f(the)227
-5241 y(ast)p Fy(_)p FG(link)j(command.)40 b(The)28 b(new)g(Plot)i
-(metho)s(d)e(allo)m(ws)j(an)e(application)h(to)f(o)m(v)m(er-ride)i(the)
-e(functions)227 5354 y(established)40 b(at)g(link-time,)j(b)m(y)d(sp)s
-(ecifying)f(alternativ)m(e)j(primitiv)m(e)e(graphics)g(routines.)68
-b(In)39 b(addi-)227 5467 y(tion,)d(the)f(t)m(w)m(o)g(new)f(Plot)h
-(metho)s(ds)e(AST)p Fy(_)p FG(GRFPUSH)h(and)f(AST)p Fy(_)p
-FG(GRFPOP)h(allo)m(w)h(the)g(curren)m(t)227 5580 y(graphics)e(routines)
-g(to)g(b)s(e)f(sa)m(v)m(ed)i(and)e(restore)i(on)e(a)h
-(\014rst-in-last-out)h(stac)m(k,)h(allo)m(wing)g(temp)s(orary)227
-5693 y(c)m(hanges)d(to)f(b)s(e)e(made)i(to)g(the)g(set)g(of)f
-(registered)h(graphics)g(routines.)p eop end
-%%Page: 540 550
-TeXDict begin 540 549 bop 0 52 a FG(540)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FG(7.)46
-b(The)39 b(Dra)m(wAxes)i(attribute)f(of)g(the)g(Plot)g(class)h(can)f
-(no)m(w)f(b)s(e)g(sp)s(eci\014ed)g(indep)s(endan)m(tly)g(for)g(eac)m(h)
-227 464 y(axis,)31 b(b)m(y)g(app)s(ending)e(the)h(axis)h(index)f(to)h
-(the)g(end)e(of)i(the)f(attribute)i(name.)111 692 y(8.)46
-b(A)36 b(bug)f(has)g(b)s(een)g(\014xed)g(in)g(the)h(Plot)g(class)g
-(whic)m(h)g(could)f(result)h(in)f(axis)h(lab)s(els)g(b)s(eing)f(dra)m
-(wn)g(on)227 805 y(inappropriate)30 b(edges)h(of)g(the)f(plotting)i(b)s
-(o)m(x)e(when)g(using)f(\\in)m(terior")k(lab)s(elling.)111
-1033 y(9.)46 b(A)30 b(bug)f(has)h(b)s(een)f(\014xed)g(in)g(the)h(In)m
-(traMap)g(class)h(whic)m(h)e(could)h(cause)h(In)m(traMaps)f(to)g(b)s(e)
-f(corrupted)227 1145 y(after)i(transforming)f(an)m(y)h(p)s(oin)m(ts.)66
-1373 y(10.)46 b(Bugs)36 b(ha)m(v)m(e)g(b)s(een)f(\014xed)f(in)h(the)h
-(FitsChan)f(class)h(whic)m(h)f(could)g(cause)h(inappropriate)f
-(ordering)g(of)227 1486 y(headers)30 b(within)g(a)h(FitsChan)f(when)g
-(writing)g(or)g(reading)h(ob)5 b(jects)31 b(using)f(NA)-8
-b(TIVE)30 b(enco)s(dings.)66 1714 y(11.)46 b(A)32 b(bug)e(has)h(b)s
-(een)f(\014xed)h(in)g(the)g(FitsChan)g(class)h(whic)m(h)f(could)g
-(cause)h(the)f(celestial)j(longitude)e(of)f(a)227 1827
-y(pixel)26 b(to)h(b)s(e)e(estimated)i(incorrectly)g(b)m(y)e(180)i
-(degrees)f(if)g(the)g(reference)g(p)s(oin)m(t)g(is)g(at)g(either)g(the)
-g(north)227 1940 y(or)31 b(the)f(south)g(p)s(ole.)0 2300
-y Fw(G.8)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.8-2)0
-2551 y FG(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 2664 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V1.7)g(and)f(V1.8-2:)111 2986 y(1.)46
-b(The)33 b(SkyF)-8 b(rame)34 b(class)h(has)e(a)h(new)f(attribute)h
-(called)h(NegLon)f(whic)m(h)g(allo)m(ws)h(longitude)f(v)-5
-b(alues)34 b(to)227 3099 y(b)s(e)c(displa)m(y)m(ed)h(in)f(the)h(range)f
-Fu(\000)p Fp(\031)j FG(to)f(+)p Fp(\031)s FG(,)e(instead)h(of)f(the)h
-(usual)f(range)g(zero)h(to)h(2)p Fp(:\031)s FG(.)111
-3327 y(2.)46 b(Some)29 b(new)f(routines)g(\(AST)p Fy(_)p
-FG(ANGLE,)h(AST)p Fy(_)p FG(AXANGLE,)g(AST)p Fy(_)p FG(RESOL)-10
-b(VE,)26 b(AST)p Fy(_)p FG(OFFSET2,)227 3440 y(AST)p
-Fy(_)p FG(AX)m(OFFSET,)39 b(AST)p Fy(_)p FG(AXDIST)-8
-b(ANCE\))38 b(ha)m(v)m(e)j(b)s(een)d(added)g(to)i(the)f(F)-8
-b(rame)40 b(class)g(to)g(allo)m(w)227 3553 y(na)m(vigation)24
-b(of)e(the)g(co)s(ordinate)h(space)f(to)h(b)s(e)e(p)s(erformed)f
-(without)i(needing)g(to)h(kno)m(w)f(the)g(underlying)227
-3666 y(geometry)32 b(of)f(the)f(co-ordinate)i(system)f(\(for)f
-(instance,)h(whether)f(it)h(is)f(Cartesian)h(or)g(spherical\).)227
-3836 y(Note,)46 b(v)m(ersion)d(1.8-1)g(con)m(tained)g(man)m(y)f(of)g
-(these)g(facilities,)47 b(but)41 b(some)h(ha)m(v)m(e)h(b)s(een)e(c)m
-(hanged)i(in)227 3949 y(v)m(ersion)e(1.8-2.)71 b(P)m(articularly)-8
-b(,)45 b(p)s(ositions)40 b(angles)h(are)f(no)m(w)h(referred)e(to)i(the)
-f(second)g(F)-8 b(rame)41 b(axis)227 4062 y(for)e Fx(al)5
-b(l)40 b FG(classes)g(of)g(F)-8 b(rames)40 b(\(including)f(SkyF)-8
-b(rames\),)42 b(and)d(the)g(AST)p Fy(_)p FG(BEAR)g(routine)g(has)g(b)s
-(een)227 4175 y(replaced)31 b(b)m(y)f(AST)p Fy(_)p FG(AXANGLE.)0
-4535 y Fw(G.9)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.8-3)0
-4786 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 4899 y(v)m(ersions)31
-b(V1.8-2)h(and)e(V1.8-3:)111 5222 y(1.)46 b(A)33 b(new)f(metho)s(d)g
-(called)i(astDecomp)s(ose)h(has)d(b)s(een)g(added)g(to)i(the)f(Mapping)
-f(class)i(whic)m(h)e(enables)227 5335 y(p)s(oin)m(ters)f(to)g(b)s(e)e
-(obtained)i(to)g(the)g(comp)s(onen)m(t)f(parts)h(of)f(CmpMap)g(and)f
-(CmpF)-8 b(rame)31 b(ob)5 b(jects.)111 5562 y(2.)46 b(F)-8
-b(unctions)46 b(within)e(pro)5 b(j.c)44 b(and)g(w)m(cstrig.c)j(ha)m(v)m
-(e)f(b)s(een)e(renamed)g(to)h(a)m(v)m(oid)i(name)d(clashes)i(with)227
-5675 y(functions)30 b(in)g(more)h(recen)m(t)g(v)m(ersions)g(of)f(Mark)h
-(Calabretta's)h(w)m(cslib)f(library)-8 b(.)p eop end
-%%Page: 541 551
-TeXDict begin 541 550 bop 0 52 a Fz(G.10)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V1.8-4)2174 b FG(541)0 351
-y Fw(G.10)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.8-4)0
-560 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 673 y(v)m(ersions)31
-b(V1.8-3)h(and)e(V1.8-4:)111 887 y(1.)46 b(The)32 b(FitsChan)g(class)i
-(has)e(a)g(new)g(attribute)h(called)h(DefB1950)h(whic)m(h)d(can)h(b)s
-(e)f(used)f(to)i(select)h(the)227 999 y(default)22 b(reference)h(frame)
-f(and)f(equino)m(x)h(to)h(b)s(e)e(used)g(if)h(a)h(FitsChan)e(with)h
-(foreign)g(enco)s(ding)g(con)m(tains)227 1112 y(no)31
-b(indication)g(of)f(the)h(reference)g(frame)f(or)g(equino)m(x.)111
-1288 y(2.)46 b(A)36 b(bug)f(has)h(b)s(een)f(\014xed)g(in)g(the)h
-(FitsChan)g(class)g(whic)m(h)g(could)g(prev)m(en)m(t)g(astW)-8
-b(rite)38 b(from)d(creating)227 1401 y(a)k(set)f(of)h(FITS)e(headers)h
-(from)f(an)h(otherwise)h(v)-5 b(alid)38 b(F)-8 b(rameSet,)42
-b(when)37 b(when)g(using)h(FITS-AIPS)227 1514 y(enco)s(ding.)111
-1689 y(3.)46 b(A)37 b(bug)f(has)g(b)s(een)g(\014xed)g(in)g(the)h
-(FitsChan)f(class)h(whic)m(h)g(could)f(cause)h(astRead)h(to)f(mis-in)m
-(terpret)227 1802 y(the)31 b(FITS)e(CR)m(OT)-8 b(A)31
-b(k)m(eyw)m(ord)g(when)e(using)h(FITS-AIPS)f(enco)s(ding.)0
-2077 y Fw(G.11)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.8-5)0
-2286 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 2399 y(v)m(ersions)31
-b(V1.8-4)h(and)e(V1.8-5:)111 2612 y(1.)46 b(The)41 b(Plot)g(class)h
-(de\014nes)e(new)g(graphical)i(elemen)m(ts)g(Axis1,)i(Axis2,)g(Grid1,)g
-(Grid2,)g(NumLabs1,)227 2725 y(NumLabs2,)g(T)-8 b(extLab1,)45
-b(T)-8 b(extLab2,)45 b(Tic)m(ks1)d(and)f(Tic)m(ks2.)73
-b(These)41 b(allo)m(w)i(graphical)f(attributes)227 2838
-y(\(colour,)c(width,)e(etc\))h(to)f(b)s(e)f(set)g(for)h(eac)m(h)g(axis)
-g(individually)-8 b(.)55 b(Previously)-8 b(,)38 b(graphical)e
-(attributes)227 2951 y(could)31 b(only)g(b)s(e)g(set)g(for)g(b)s(oth)f
-(axes)i(together,)h(using)d(graphical)i(elemen)m(ts)g(Axes,)g(Grid,)f
-(NumLabs,)227 3064 y(T)-8 b(extLabs)31 b(and)f(Tic)m(ks.)0
-3339 y Fw(G.12)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.8-7)0
-3548 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 3661 y(v)m(ersions)31
-b(V1.8-5)h(and)e(V1.8-7:)111 3874 y(1.)46 b(A)23 b(new)f(attribute)h
-(called)g(CarLin)f(has)g(b)s(een)g(added)f(to)i(the)g(FitsChan)f(class)
-h(whic)m(h)f(con)m(trols)i(the)e(w)m(a)m(y)227 3987 y(CAR)34
-b(pro)5 b(jections)35 b(are)g(handled)f(when)f(reading)i(a)g(F)-8
-b(rameSet)35 b(from)f(a)h(non-nativ)m(e)h(FITS)d(header.)227
-4100 y(Some)45 b(FITS)e(writers)h(use)g(a)h(CAR)e(pro)5
-b(jection)45 b(to)g(represen)m(t)g(a)f(simple)g(linear)h
-(transformation)227 4213 y(b)s(et)m(w)m(een)37 b(pixel)f(co)s
-(ordinates)h(and)f(celestial)j(sky)c(co)s(ordinates.)59
-b(This)35 b(is)i(not)f(consisten)m(t)h(with)f(the)227
-4326 y(de\014nition)41 b(of)g(the)g(CAR)f(pro)5 b(jection)42
-b(in)e(the)h(draft)g(FITS-W)m(CS)f(standard,)j(whic)m(h)e(requires)f
-(the)227 4439 y(resultan)m(t)33 b(Mapping)f(to)h(include)f(a)g(3D)h
-(rotation)g(from)f(nativ)m(e)h(spherical)f(co)s(ordinates)h(to)g
-(celestial)227 4552 y(spherical)39 b(co)s(ordinates,)i(th)m(us)d
-(making)h(the)f(Mapping)h(non-linear.)64 b(Setting)40
-b(CarLin)d(to)i(1)g(forces)227 4665 y(AST)p Fy(_)p FG(READ)29
-b(to)i(ignore)f(the)g(FITS-W)m(CS)g(standard)f(and)g(treat)i(an)m(y)f
-(CAR)f(pro)5 b(jections)30 b(as)g(simple)227 4778 y(linear)h(Mappings)f
-(from)g(pixel)h(co)s(ordinates)g(to)g(celestial)i(co)s(ordinates.)111
-4953 y(2.)46 b(A)35 b(bug)e(has)h(b)s(een)g(\014xed)f(whic)m(h)h(could)
-h(result)f(in)g(axis)h(F)-8 b(ormat)35 b(attributes)g(set)g(b)m(y)f
-(the)g(user)g(b)s(eing)227 5066 y(ignored)d(under)e(certain)i
-(circumstances.)111 5241 y(3.)46 b(A)32 b(bug)f(in)h(the)g(w)m(a)m(y)g
-(tic)m(k)i(marks)d(p)s(ositions)h(are)g(selected)h(in)e(the)h(Plot)h
-(class)g(has)e(b)s(een)g(\014xed.)44 b(This)227 5354
-y(bug)c(could)h(result)f(in)g(extra)h(tic)m(ks)h(marks)e(b)s(eing)g
-(displa)m(y)m(ed)h(at)g(inappropriate)f(p)s(ositions.)71
-b(This)227 5467 y(bug)35 b(manifested)g(itself,)i(for)d(instance,)j(if)
-e(the)g(Mapping)g(represen)m(ted)g(b)m(y)f(the)h(Plot)h(w)m(as)f(a)g
-(simple)227 5580 y(Cartesian)e(to)g(P)m(olar)h(Mapping.)47
-b(In)31 b(this)i(example,)g(the)g(bug)f(caused)g(tic)m(k)i(marks)e(to)h
-(b)s(e)f(dra)m(wn)g(at)227 5693 y(negativ)m(e)h(radius)c(v)-5
-b(alues.)p eop end
-%%Page: 542 552
-TeXDict begin 542 551 bop 0 52 a FG(542)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FG(4.)46
-b(A)31 b(bug)e(has)h(b)s(een)g(\014xed)g(whic)m(h)g(could)g(prev)m(en)m
-(t)h(attribute)g(settings)g(from)f(b)s(eing)g(read)g(correctly)i(b)m(y)
-227 464 y(AST)p Fy(_)p FG(SET,)d(etc.,)j(on)e(certain)h(platforms)g
-(\(MacOS,)g(for)f(instance\).)0 754 y Fw(G.13)112 b(Changes)39
-b(In)m(tro)s(duced)f(in)f(V1.8-8)0 973 y FG(The)26 b(follo)m(wing)i
-(describ)s(es)d(the)i(most)f(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f
-(o)s(ccurred)g(in)g(the)g(AST)g(library)g(b)s(et)m(w)m(een)0
-1086 y(v)m(ersions)31 b(V1.8-7)h(and)e(V1.8-8:)111 1338
-y(1.)46 b(A)33 b(bug)g(has)g(b)s(een)f(\014xed)g(in)h(the)g(FitsChan)g
-(class)h(whic)m(h)f(could)g(cause)g(problems)g(when)f(creating)i(a)227
-1451 y(F)-8 b(rameSet)28 b(from)d(a)i(FITS)e(header)h(con)m(taining)i
-(W)m(CS)e(information)g(stored)h(in)e(the)i(form)e(of)i(Digitised)227
-1564 y(Digitised)i(Sky)e(Surv)m(ey)f(\(DSS\))i(k)m(eyw)m(ords.)40
-b(These)27 b(problems)f(only)i(o)s(ccurred)e(for)h(DSS)g(\014elds)f(in)
-h(the)227 1676 y(southern)k(hemisphere,)g(and)g(resulted)g(in)h(pixel)f
-(p)s(ositions)h(b)s(eing)f(mapp)s(ed)f(to)i(sky)g(p)s(ositions)f(close)
-227 1789 y(to)g(the)g(corresp)s(onding)e Fx(northern)j
-FG(hemispshere)e(\014eld.)111 1974 y(2.)46 b(A)d(new)e(metho)s(d)h
-(called)h(AST)p Fy(_)p FG(BOUNDINGBO)m(X)h(has)e(b)s(een)f(added)h(to)h
-(the)f(Plot)h(class.)77 b(This)227 2087 y(metho)s(d)37
-b(returns)g(the)h(b)s(ounding)d(b)s(o)m(x)j(of)g(the)f(previous)g
-(graphical)i(output)e(pro)s(duced)f(b)m(y)i(a)g(Plot)227
-2200 y(metho)s(d.)111 2385 y(3.)46 b(A)39 b(new)f(attribute)h(called)g
-(In)m(visible)g(has)f(b)s(een)g(added)f(to)j(the)e(Plot)h(class)g(whic)
-m(h)g(suppresses)d(the)227 2498 y(graphical)45 b(output)e(normally)g
-(pro)s(duced)f(b)m(y)i(Plot)g(metho)s(ds.)79 b(All)44
-b(the)g(calculations)i(needed)d(to)227 2611 y(pro)s(duce)25
-b(the)i(normal)f(output)f(are)i(still)g(p)s(erformed)e(ho)m(w)m(ev)m
-(er,)j(and)e(so)g(the)g(b)s(ounding)f(b)s(o)m(x)h(returned)227
-2724 y(b)m(y)31 b(the)f(new)g(AST)p Fy(_)p FG(BOUNDINGBO)m(X)h(metho)s
-(d)f(is)h(still)g(usable.)111 2909 y(4.)46 b(Bugs)30
-b(ha)m(v)m(e)h(b)s(een)e(\014xed)g(related)h(to)h(the)f(app)s(earance)g
-(of)f(graphical)i(output)e(pro)s(duced)f(b)m(y)i(the)g(Plot)227
-3022 y(class.)39 b(These)24 b(bugs)e(w)m(ere)i(to)h(do)e(with)g(the)h
-(w)m(a)m(y)g(in)g(whic)m(h)f(graphical)h(elemen)m(ts)h(relating)g(to)f
-(a)g(sp)s(eci\014c)227 3135 y(axis)36 b(\(e.g.)57 b Fy(Colour\(axis1\))
-p FG(,)33 b(etc.\))58 b(in)m(teracted)37 b(with)e(the)g(corresp)s
-(onding)g(generic)h(elemen)m(t)h(\(e.g.)227 3248 y Fy(Colour\(axes\))p
-FG(,)28 b(etc.\).)0 3537 y Fw(G.14)112 b(Changes)39 b(In)m(tro)s(duced)
-f(in)f(V1.8-13)0 3756 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i
-(most)f(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g
-(the)g(AST)g(library)g(b)s(et)m(w)m(een)0 3869 y(v)m(ersions)31
-b(V1.8-8)h(and)e(V1.8-13:)111 4122 y(1.)46 b(The)29 b(FitsChan)g(class)
-g(has)g(b)s(een)f(mo)s(di\014ed)g(so)h(that)h(LONPOLE)e(k)m(eyw)m(ords)
-h(are)g(only)g(pro)s(duced)f(b)m(y)227 4234 y(AST)p Fy(_)p
-FG(WRITE)e(when)f(necessary)-8 b(.)41 b(F)-8 b(or)27
-b(zenithal)h(pro)5 b(jections)27 b(suc)m(h)g(as)g(T)-8
-b(AN,)27 b(the)g(LONPOLE)e(k)m(ey-)227 4347 y(w)m(ord)i(can)f(alw)m(a)m
-(ys)j(tak)m(e)f(its)f(default)g(v)-5 b(alue)27 b(and)f(so)g(is)h(not)g
-(included)f(in)g(the)h(FITS)f(header)g(pro)s(duced)227
-4460 y(b)m(y)33 b(AST)p Fy(_)p FG(WRITE)f(Previously)-8
-b(,)35 b(the)e(unnecessary)g(pro)s(duction)f(of)h(a)h(LONPOLE)e(k)m
-(eyw)m(ord)h(could)227 4573 y(prev)m(en)m(t)24 b(F)-8
-b(rameSets)25 b(b)s(eing)e(written)g(out)h(using)f(enco)s(dings)g(whic)
-m(h)g(do)h(not)f(supp)s(ort)f(the)i(LONPOLE)227 4686
-y(k)m(eyw)m(ord)31 b(\(suc)m(h)g(as)f(FITS-IRAF\).)111
-4871 y(2.)46 b(The)31 b(FitsChan)g(class)h(has)f(b)s(een)g(mo)s
-(di\014ed)f(to)i(retain)g(leading)g(and)f(trailing)h(spaces)g(within)f
-(COM-)227 4984 y(MENT)g(cards.)111 5169 y(3.)46 b(The)41
-b(FitsChan)g(class)h(has)f(b)s(een)g(mo)s(di\014ed)f(to)i(only)f(use)g
-(CTYPE)g(commen)m(ts)h(as)f(axis)h(lab)s(els)f(if)227
-5282 y(all)d(non-celestial)i(axes)d(ha)m(v)m(e)i(unique)d(non-blank)h
-(commen)m(ts)h(\(otherwise)f(the)h(CTYPE)e(k)m(eyw)m(ord)227
-5395 y(v)-5 b(alues)31 b(are)g(used)e(as)i(lab)s(els\).)111
-5580 y(4.)46 b(The)29 b(FitsChan)g(class)h(has)f(b)s(een)f(mo)s
-(di\014ed)g(so)h(that)h(it)g(do)s(es)f(not)g(app)s(end)f(a)h(trailing)h
-(\\Z")g(c)m(haracter)227 5693 y(to)h(the)g(end)f(of)g(D)m(A)-8
-b(TE-OBS)31 b(k)m(eyw)m(ord)g(v)-5 b(alues.)p eop end
-%%Page: 543 553
-TeXDict begin 543 552 bop 0 52 a Fz(G.15)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V2.0)2249 b FG(543)111 351
-y(5.)46 b(The)e(FitsChan)g(class)h(has)f(b)s(een)g(mo)s(di\014ed)f(to)i
-(use)f(latest)i(list)e(of)h(FITS-W)m(CS)f(pro)5 b(jections,)48
-b(as)227 464 y(describ)s(ed)33 b(in)g(the)h(FITS-W)m(CS)f(pap)s(er)f(I)
-s(I,)h(\\Represen)m(tations)i(of)f(celestial)i(co)s(ordinates)f(in)e
-(FITS")227 577 y(\(Calabretta)42 b(&)d(Greisen,)k(draft)c(dated)h(23)g
-(April)g(2002\).)71 b(Supp)s(ort)37 b(has)j(b)s(een)f(retained)h(for)f
-(the)227 690 y(p)s(olynomial)44 b(correction)h(terms)e(whic)m(h)h
-(previous)f(drafts)g(ha)m(v)m(e)h(allo)m(w)m(ed)i(to)e(b)s(e)f(asso)s
-(ciated)i(with)227 803 y(T)-8 b(AN)31 b(pro)5 b(jections.)111
-998 y(6.)46 b(The)37 b(WcsMap)h(class)g(has)f(additional)i(pro)5
-b(jection)38 b(t)m(yp)s(es)f(of)g(AST)p Fy(__)p FG(TPN)f(\(whic)m(h)h
-(implemen)m(ts)h(a)227 1111 y(distorted)e(T)-8 b(AN)36
-b(pro)5 b(jection\))37 b(and)e(AST)p Fy(__)p FG(SZP)-8
-b(.)34 b(The)h(AST)p Fy(__)p FG(T)-8 b(AN)35 b(pro)5
-b(jection)36 b(t)m(yp)s(e)g(no)m(w)g(repre-)227 1223
-y(sen)m(ts)c(a)f(simple)g(T)-8 b(AN)31 b(pro)5 b(jection)32
-b(and)e(has)g(no)h(asso)s(ciated)i(pro)5 b(jection)31
-b(parameters.)43 b(In)30 b(addition,)227 1336 y(the)39
-b(usage)f(of)h(pro)5 b(jection)39 b(parameters)f(has)g(b)s(een)g
-(brough)m(t)g(in)m(to)h(line)f(with)g(the)g(the)h(FITS-W)m(CS)227
-1449 y(pap)s(er)30 b(I)s(I.)111 1644 y(7.)46 b(The)27
-b(WcsMap)h(class)f(has)g(b)s(een)f(mo)s(di\014ed)g(so)i(that)f(a)h
-(\\get")h(op)s(eration)e(on)g(a)g(pro)5 b(jection)28
-b(parameter)227 1757 y(attribute)34 b(will)f(return)f(the)h(default)h
-(v)-5 b(alue)33 b(de\014ned)f(in)h(the)g(FITS-W)m(CS)f(pap)s(er)g(I)s
-(I)g(if)h(no)g(v)-5 b(alue)34 b(has)227 1870 y(b)s(een)42
-b(set)g(for)g(the)g(attribute.)77 b(Previously)-8 b(,)45
-b(a)e(v)-5 b(alue)42 b(of)h(AST)p Fy(__)p FG(BAD)e(w)m(as)i(returned)e
-(in)g(suc)m(h)h(a)227 1983 y(situation.)111 2177 y(8.)k(The)29
-b(F)-8 b(rame)31 b(class)f(has)g(new)f(attributes)h(T)-8
-b(op\(axis\))31 b(and)e(Bottom\(axis\))j(whic)m(h)d(allo)m(w)j(a)e
-(\\plottable)227 2290 y(range")g(to)f(b)s(e)f(sp)s(eci\014ed)f(for)i
-(eac)m(h)g(F)-8 b(rame)30 b(axis.)40 b(The)28 b(grid)h(pro)s(duced)d(b)
-m(y)j(the)f(AST)p Fy(_)p FG(GRID)g(routine)227 2403 y(will)j(not)g
-(extend)f(b)s(ey)m(ond)g(these)h(limits.)0 2708 y Fw(G.15)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V2.0)0 2935 y
-FG(Note,)i(F)-8 b(rame)38 b(descriptions)e(created)h(using)f(AST)f
-(V2.0)j(will)f(not)f(b)s(e)g(readable)h(b)m(y)f(applications)h(link)m
-(ed)0 3048 y(with)30 b(earlier)h(v)m(ersions)g(of)g(AST.)e(This)h
-(applies)h(to)g(F)-8 b(rame)31 b(descriptions)f(created)i(using:)136
-3294 y Fu(\017)46 b FG(the)31 b(Channel)e(class)136 3489
-y Fu(\017)46 b FG(the)31 b(FitsChan)f(class)h(if)g(the)f(NA)-8
-b(TIVE)31 b(Enco)s(ding)f(is)g(used)136 3684 y Fu(\017)46
-b FG(the)31 b(AST)p Fy(_)p FG(SHO)m(W)f(routine.)0 3930
-y(Applications)35 b(m)m(ust)f(b)s(e)g(re-link)m(ed)h(with)f(AST)f(V2.0)
-i(in)f(order)g(to)h(b)s(e)f(able)g(to)h(read)f(F)-8 b(rame)36
-b(descriptions)0 4043 y(created)31 b(b)m(y)g(AST)e(v2.0.)0
-4209 y(The)37 b(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 4322 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V1.8-13)i(and)c(V2.0)j(\(the)f(curren)m(t)f(v)m
-(ersion\):)111 4595 y(1.)46 b(The)39 b(default)g(v)-5
-b(alue)40 b(for)f(the)h(Domain)g(attribute)g(pro)m(vided)f(b)m(y)g(the)
-g(CmpF)-8 b(rame)39 b(class)h(has)f(b)s(een)227 4708
-y(c)m(hanged)c(from)f(\\CMP")g(to)h(a)f(string)g(formed)g(b)m(y)g
-(concatenating)i(the)f(Domain)f(attributes)h(of)f(the)227
-4821 y(t)m(w)m(o)26 b(comp)s(onen)m(t)f(F)-8 b(rames,)27
-b(separated)e(b)m(y)g(a)g(min)m(us)e(sign.)39 b(If)24
-b(b)s(oth)g(comp)s(onen)m(t)h(Domains)h(are)f(blank,)227
-4934 y(then)30 b(the)h(old)f(default)h(of)g(\\CMP")g(is)f(retained)h
-(for)f(the)g(CmpF)-8 b(rame)31 b(Domain.)111 5128 y(2.)46
-b(The)f(implemen)m(tation)i(of)e(the)g(AST)p Fy(_)p FG(WRITE)f(routine)
-h(within)g(the)g(FitsChan)g(class)h(has)f(b)s(een)227
-5241 y(mo)s(di\014ed.)37 b(It)22 b(will)h(no)m(w)f(attempt)i(to)f(pro)s
-(duce)e(a)h(set)h(of)g(FITS)e(header)h(cards)g(to)h(describ)s(e)f(a)g
-(F)-8 b(rameSet)227 5354 y(ev)m(en)32 b(if)e(the)h(n)m(um)m(b)s(er)e
-(of)i(axes)g(in)f(the)h(Curren)m(t)e(F)-8 b(rames)32
-b(is)e(greater)i(than)e(the)h(n)m(um)m(b)s(er)e(in)i(the)f(Base)227
-5467 y(F)-8 b(rame)25 b(\(that)g(is,)g(if)f(there)g(are)h(more)f(W)m
-(CS)g(axes)g(than)g(pixel)g(axes\).)40 b(This)23 b(has)g(alw)m(a)m(ys)j
-(b)s(een)d(p)s(ossible)227 5580 y(with)32 b(NA)-8 b(TIVE)32
-b(enco)s(ding,)g(but)f(has)h(not)g(previously)f(b)s(een)g(p)s(ossible)h
-(for)f(foreign)h(enco)s(dings.)45 b(The)227 5693 y(W)m(CSAXES)30
-b(k)m(eyw)m(ord)h(is)g(used)e(to)i(store)g(the)g(n)m(um)m(b)s(er)e(of)h
-(W)m(CS)h(axes)g(in)f(the)g(FITS)g(header.)p eop end
-%%Page: 544 554
-TeXDict begin 544 553 bop 0 52 a FG(544)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FG(3.)46
-b(Another)23 b(c)m(hange)i(to)f(the)f(AST)p Fy(_)p FG(WRITE)f(routine)h
-(within)g(the)g(FitsChan)g(class)h(is)g(that)f(the)h(ordering)227
-464 y(of)32 b(\\foreign")h(axes)g(\()p Fx(i.e.)44 b FG(CTYPE)31
-b(k)m(eyw)m(ords\))i(is)f(no)m(w)g(c)m(hosen)g(to)h(mak)m(e)f(the)g(CD)
-g(\(or)g(PC\))g(matrix)227 577 y(as)h(diagonal)g(as)g(p)s(ossible)f(-)g
-(an)m(y)h(elemen)m(t)g(of)g(axis)f(transp)s(osition)h(is)f(remo)m(v)m
-(ed)h(b)m(y)f(this)g(re-ordering)227 690 y(as)37 b(recommended)f(in)h
-(FITS-W)m(CS)f(pap)s(er)f(I.)i(Previously)g(the)f(ordering)h(w)m(as)g
-(determined)f(b)m(y)g(the)227 803 y(order)e(of)g(the)h(axes)g(in)f(the)
-g(Curren)m(t)g(F)-8 b(rame)35 b(of)f(the)h(supplied)e(F)-8
-b(rameSet.)53 b(This)34 b(c)m(hange)h(do)s(es)f(not)227
-916 y(a\013ect)e(NA)-8 b(TIVE)31 b(enco)s(ding.)111 1097
-y(4.)46 b(Supp)s(ort)26 b(for)h(sp)s(ectral)h(co)s(ordinate)h(systems)e
-(has)h(b)s(een)f(in)m(tro)s(duced)g(through)m(t)h(the)f(addition)h(of)g
-(t)m(w)m(o)227 1210 y(new)36 b(classes,)j(Sp)s(ecF)-8
-b(rame)37 b(and)e(Sp)s(ecMap.)58 b(The)36 b(Sp)s(ecF)-8
-b(rame)36 b(is)h(a)f(1-dimensional)i(F)-8 b(rame)37 b(whic)m(h)227
-1322 y(can)c(b)s(e)f(used)g(to)h(describ)s(e)f(p)s(ositions)h(within)f
-(an)g(electromagnetic)k(sp)s(ectrum)c(in)g(v)-5 b(arious)32
-b(systems)227 1435 y(\(w)m(a)m(v)m(elength,)d(frequency)-8
-b(,)25 b(v)-5 b(arious)24 b(forms)g(of)g(v)m(elo)s(cit)m(y)-8
-b(,)27 b Fx(etc.)p FG(\))38 b(and)24 b(referred)f(to)i(v)-5
-b(arious)24 b(standards)f(of)227 1548 y(rest)30 b(\(top)s(o)s(cen)m
-(tric,)i(geo)s(cen)m(tric,)g(helio)s(cen)m(tric)g(LSRK,)d
-Fx(etc.)p FG(\).)40 b(The)30 b(Sp)s(ecMap)f(is)h(a)g(Mapping)g(whic)m
-(h)227 1661 y(can)37 b(transform)e(sp)s(ectral)i(axis)f(v)-5
-b(alues)37 b(b)s(et)m(w)m(een)g(these)f(v)-5 b(arious)37
-b(systems)f(and)f(standards)h(of)g(rest.)227 1774 y(Note,)h(FitsChans)c
-(whic)m(h)h(ha)m(v)m(e)h(a)f(foreign)g(enco)s(ding)g(\()p
-Fx(i.e.)50 b FG(an)m(y)34 b(enco)s(ding)g(other)g(than)g(NA)-8
-b(TIVE\))227 1887 y(are)31 b(not)g(y)m(et)g(able)g(to)g(read)f(or)h
-(write)f(these)h(new)f(classes.)111 2068 y(5.)46 b(F)-8
-b(acilities)38 b(ha)m(v)m(e)d(b)s(een)f(added)f(to)i(the)g(F)-8
-b(rame)35 b(class)g(whic)m(h)f(allo)m(w)i(di\013erences)f(in)f(axis)g
-(units)g(to)h(b)s(e)227 2181 y(tak)m(en)e(in)m(to)g(accoun)m(t)g(when)e
-(\014nding)f(a)i(Mapping)g(b)s(et)m(w)m(een)g(t)m(w)m(o)h(F)-8
-b(rames.)46 b(In)31 b(previous)g(v)m(ersions)h(of)227
-2294 y(AST,)k(the)g(Unit)h(attribute)f(w)m(as)h(a)f(purely)g
-(descriptiv)m(e)h(item)f(in)m(tended)g(only)h(for)e(h)m(uman)h(readers)
-227 2407 y(-)k(c)m(hanging)g(the)f(v)-5 b(alue)40 b(of)f(Unit)h(made)f
-(no)g(di\013erence)g(to)h(the)g(b)s(eha)m(viour)e(of)i(the)f(F)-8
-b(rame.)68 b(As)39 b(of)227 2520 y(v)m(ersion)31 b(2.0,)g(the)f(Unit)g
-(attribute)g(can)h(in\015uence)e(the)h(nature)f(of)h(the)g(Mappings)g
-(b)s(et)m(w)m(een)g(F)-8 b(rames.)227 2632 y(F)g(or)41
-b(instance,)i(if)d(the)g(AST)p Fy(_)p FG(FINDRAME)f(or)h(AST)p
-Fy(_)p FG(CONVER)-8 b(T)39 b(metho)s(d)g(is)h(used)f(to)h(\014nd)e(the)
-227 2745 y(Mapping)30 b(b)s(et)m(w)m(een)h(an)e(Axis)h(with)g(Unit)g
-(set)g(to)h(\\m")g(and)e(another)h(Axis)g(with)g(Unit)g(set)g(to)h
-(\\km",)227 2858 y(then)23 b(the)h(metho)s(d)f(will)g(return)f(a)i(Zo)s
-(omMap)f(whic)m(h)g(in)m(tro)s(duces)h(a)f(scaling)i(factor)f(of)g
-(0.001)h(b)s(et)m(w)m(een)227 2971 y(the)f(t)m(w)m(o)i(axes.)39
-b(These)24 b(facilities)i(assume)d(that)i(units)e(are)h(sp)s(eci\014ed)
-g(follo)m(wing)h(the)f(rules)g(included)f(in)227 3084
-y(FITS-W)m(CS)g(pap)s(er)f(I)h(\()p Fx(R)-5 b(epr)g(esentation)29
-b(of)d(World)h(Co)-5 b(or)g(dinates)29 b(in)d(FITS)p
-FG(,)e(Greisen)g(&)e(Calabretta\).)227 3231 y(In)h(order)g(to)h
-(minimise)f(the)h(risk)f(of)h(breaking)f(existing)i(soft)m(w)m(are,)h
-(the)e(default)f(b)s(eha)m(viour)g(for)g(simple)227 3344
-y(F)-8 b(rames)35 b(is)f(to)h(ignore)g(the)f(Unit)h(attribute)f(\()p
-Fx(i.e.)52 b FG(to)35 b(retain)f(the)h(previous)e(b)s(eha)m(viour\).)52
-b(Ho)m(w)m(ev)m(er,)227 3457 y(the)23 b(new)g(F)-8 b(rame)23
-b(metho)s(d)f(AST)p Fy(_)p FG(SET)-8 b(A)m(CTIVEUNIT)21
-b(ma)m(y)j(b)s(e)e(used)g(to)h(\\activ)-5 b(ate")27 b(\(or)c(deactiv)-5
-b(ate\))227 3570 y(the)35 b(new)f(facilities)j(within)d(a)g(sp)s
-(eci\014c)h(F)-8 b(rame.)54 b(Note,)37 b(the)d(new)g(Sp)s(ecF)-8
-b(rame)35 b(class)g(is)g(di\013eren)m(t)g(to)227 3683
-y(the)25 b(simple)g(F)-8 b(rame)26 b(class)g(in)e(that)i(the)f(new)g
-(facilities)i(for)d(handling)h(units)f(are)h(alw)m(a)m(ys)i(activ)m(e)g
-(within)227 3796 y(a)k(Sp)s(ecF)-8 b(rame.)111 3976 y(6.)46
-b(The)33 b(System)g(and)g(Ep)s(o)s(c)m(h)f(attributes)i(fo)f(the)g
-(SkyF)-8 b(rame)34 b(class)g(ha)m(v)m(e)g(b)s(een)f(mo)m(v)m(ed)h(to)g
-(the)f(paren)m(t)227 4089 y(F)-8 b(rame)34 b(class.)50
-b(This)32 b(enables)i(all)g(sub-classes)f(of)h(F)-8 b(rame)34
-b(\(suc)m(h)f(as)g(the)g(new)g(Sp)s(ecF)-8 b(rame)33
-b(class\))i(to)227 4202 y(share)30 b(these)h(attributes,)g(and)f(to)h
-(pro)m(vide)g(suitable)g(options)f(for)h(eac)m(h)g(class.)111
-4383 y(7.)46 b(The)37 b(F)-8 b(rame)38 b(class)h(has)e(a)h(new)e
-(attribute)i(called)h(AlignSystem,)h(whic)m(h)d(allo)m(ws)i(con)m(trol)
-g(o)m(v)m(er)f(the)227 4496 y(alignmen)m(t)32 b(pro)s(cess)e(p)s
-(erformed)f(b)m(y)h(the)h(metho)s(ds)e(AST)p Fy(_)p FG(FINDFRAME)i(and)
-f(AST)p Fy(_)p FG(CONVER)-8 b(T.)111 4677 y(8.)46 b(The)32
-b(CmpF)-8 b(rame)31 b(class)i(has)f(b)s(een)f(mo)s(di\014ed)g(so)h
-(that)g(attributes)h(of)f(a)g(comp)s(onen)m(t)g(F)-8
-b(rame)33 b(can)f(b)s(e)227 4790 y(accessed)h(without)f(needing)f(to)h
-(extract)h(the)f(F)-8 b(rame)33 b(\014rst.)43 b(T)-8
-b(o)32 b(do)f(this,)h(app)s(end)e(an)i(axis)g(index)f(to)227
-4903 y(the)g(end)g(of)g(the)g(attribute)h(name.)43 b(F)-8
-b(or)31 b(instance,)i(if)e(a)g(CmpF)-8 b(rame)31 b(con)m(tains)h(a)f
-(Sp)s(ecF)-8 b(rame)32 b(and)e(a)227 5016 y(SkyF)-8 b(rame)21
-b(\(in)g(that)g(order\),)i(then)e(the)f(StdOfRest)h(attribute)g(of)g
-(the)g(Sp)s(ecF)-8 b(rame)21 b(can)g(b)s(e)f(referred)g(to)227
-5128 y(as)28 b(the)f(\\StdOfRest\(1\)")i(attribute)e(of)h(the)f(CmpF)-8
-b(rame.)40 b(Lik)m(ewise,)29 b(the)e(Equino)m(x)g(attribute)h(of)f(the)
-227 5241 y(SkyF)-8 b(rame)35 b(can)f(b)s(e)g(accessed)h(as)g(the)f
-(\\Equino)m(x\(2\)")j(\(or)d(equiv)-5 b(alen)m(tly)36
-b(\\Equino)m(x\(3\)"\))h(attribute)227 5354 y(of)32 b(the)h(CmpF)-8
-b(rame.)45 b(The)32 b(\\System\(1\)")i(attribute)e(of)h(the)f(CmpF)-8
-b(rame)32 b(will)g(refer)g(to)g(the)h(System)227 5467
-y(attribute)i(of)g(the)g(Sp)s(ecF)-8 b(rame,)36 b(whereas)e(the)g
-(\\System\(2\)")j(and)c(\\System\(3\)")k(attributes)e(of)f(the)227
-5580 y(CmpF)-8 b(rame)38 b(will)h(refer)e(to)i(the)g(System)e
-(attribute)i(of)g(the)f(SkyF)-8 b(rame)38 b(\(the)h(\\System")g
-(attribute)227 5693 y(without)33 b(an)f(axis)h(sp)s(eci\014er)f(will)g
-(refer)g(to)h(the)g(System)f(attribute)h(of)g(the)f(CmpF)-8
-b(rame)33 b(as)f(a)h(whole,)p eop end
-%%Page: 545 555
-TeXDict begin 545 554 bop 0 52 a Fz(G.16)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V3.0)2249 b FG(545)227 351
-y(since)27 b(System)g(is)g(an)f(attribute)i(of)e(all)i(F)-8
-b(rames,)29 b(and)d(a)h(CmpF)-8 b(rame)26 b(is)h(a)g(F)-8
-b(rame)28 b(and)e(so)h(has)f(its)h(o)m(wn)227 464 y(System)j(v)-5
-b(alue)31 b(whic)m(h)f(is)h(indep)s(endan)m(t)e(of)i(the)f(System)g
-(attributes)h(of)g(its)g(comp)s(onen)m(t)f(F)-8 b(rames\).)111
-655 y(9.)46 b(The)22 b(algorithms)h(used)e(b)m(y)h(the)h(Plot)g(class)g
-(for)f(determining)g(when)f(to)i(omit)g(o)m(v)m(erlapping)g(axis)g(lab)
-s(els,)227 768 y(and)k(the)h(abbreviation)h(of)e(redundan)m(t)g
-(leading)h(\014elds)g(within)f(sexagesimal)i(axis)g(lab)s(els,)f(ha)m
-(v)m(e)h(b)s(een)227 881 y(impro)m(v)m(ed)i(to)g(a)m(v)m(oid)h(some)f
-(anomolous)g(b)s(eha)m(viour)f(in)g(previous)g(v)m(ersions.)66
-1072 y(10.)46 b(The)23 b(curv)m(e)g(dra)m(wing)g(algorithm)h(used)f(b)m
-(y)g(the)g(Plot)h(class)g(has)f(b)s(een)f(mo)s(di\014ed)g(to)i(reduce)f
-(the)g(c)m(hance)227 1185 y(of)28 b(it)h(\\missing")f(small)h(curv)m(e)
-f(sections,)i(suc)m(h)d(as)h(ma)m(y)h(b)s(e)e(pro)s(duced)f(if)i(a)g
-(grid)g(line)g(cuts)g(across)g(the)227 1298 y(plot)38
-b(v)m(ery)g(close)g(to)g(a)g(corner.)61 b(Previously)-8
-b(,)40 b(these)e(missed)f(sections)h(could)f(sometimes)i(result)e(in)
-227 1411 y(axis)31 b(lab)s(els)g(b)s(eing)f(omitted.)66
-1602 y(11.)46 b(A)25 b(new)f(function)g(\(AST)p Fy(_)p
-FG(VERSION\))g(has)g(b)s(een)g(added)g(to)h(return)f(the)g(v)m(ersion)h
-(of)g(the)g(AST)f(library)227 1715 y(in)30 b(use.)66
-1906 y(12.)46 b(Bugs)32 b(ha)m(v)m(e)g(b)s(een)f(\014xed)f(in)h(the)h
-(Plot)g(class)g(whic)m(h)f(caused)g(serious)h(problems)e(when)g
-(plotting)j(high)227 2019 y(precision)43 b(data.)79 b(These)42
-b(problems)h(could)f(range)i(from)e(the)h(omission)g(of)g(some)g(tic)m
-(k)h(marks)f(to)227 2132 y(complete)32 b(failure)f(to)g(pro)s(duce)e(a)
-i(plot.)0 2400 y(Programs)25 b(whic)m(h)g(are)h(statically)h(link)m(ed)
-f(will)f(need)g(to)h(b)s(e)f(re-link)m(ed)g(in)g(order)g(to)h(tak)m(e)h
-(adv)-5 b(an)m(tage)27 b(of)e(these)0 2513 y(new)30 b(facilities.)0
-2812 y Fw(G.16)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.0)0
-3036 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 3149 y(v)m(ersions)31
-b(V2.0)g(and)f(V3.0:)111 3417 y(1.)46 b(Man)m(y)30 b(c)m(hanges)f(ha)m
-(v)m(e)h(b)s(een)e(made)h(in)f(the)h(FitsChan)f(class)i(in)e(order)g
-(to)h(bring)f(the)h(FITS-W)m(CS)f(en-)227 3530 y(co)s(ding)21
-b(in)m(to)g(line)f(with)g(the)h(curren)m(t)f(v)m(ersions)h(of)f(the)g
-(FITS-W)m(CS)g(pap)s(ers)f(\(see)j(h)m(ttp://www.atnf.csiro.au/p)s
-(eople/mcalabre/W)m(CS/\):)336 3747 y Fu(\017)46 b FG(The)34
-b(rotation)h(and)e(scaling)j(of)e(the)g(pixel)g(axes)h(ma)m(y)f(no)m(w)
-g(b)s(e)g(sp)s(eci\014ed)f(using)h(either)g(CD)p Fx(i)p
-Fy(_)p Fx(j)427 3859 y FG(k)m(eyw)m(ords,)k(or)e(PC)p
-Fx(i)p Fy(_)p Fx(j)48 b FG(and)35 b(CDEL)-8 b(Tj)35 b(k)m(eyw)m(ords.)
-58 b(A)36 b(new)f(attribute)i(called)g(CDMatrix)g(has)427
-3972 y(b)s(een)c(added)g(to)i(the)f(FitsChan)f(class)i(to)f(indicate)h
-(whic)m(h)e(set)i(of)e(k)m(eyw)m(ords)h(should)f(b)s(e)g(used)427
-4085 y(when)d(writing)g(a)h(F)-8 b(rameSet)31 b(to)g(a)g(FITS-W)m(CS)f
-(header.)336 4233 y Fu(\017)46 b FG(The)33 b(FITS-W)m(CS)f(enco)s(ding)
-h(no)m(w)f(supp)s(orts)f(most)i(of)g(the)g(con)m(v)m(en)m(tions)i
-(describ)s(ed)c(in)i(FITS-)427 4346 y(W)m(CS)22 b(pap)s(er)f(I)s(I)s(I)
-g(for)g(the)i(description)f(of)g(sp)s(ectral)g(co)s(ordinates.)39
-b(The)21 b(exceptions)i(are)g(that)f(the)427 4459 y(SSYSOBS)30
-b(k)m(eyw)m(ord)i(is)g(not)f(supp)s(orted,)g(and)g(W)m(CS)g(stored)h
-(in)f(tabular)h(form)f(\(as)h(indicated)427 4572 y(b)m(y)f(the)f(\\-T)
--8 b(AB")32 b(algorithm)g(co)s(de\))f(is)f(not)h(supp)s(orted.)336
-4720 y Fu(\017)46 b FG(User-sp)s(eci\014ed)34 b(\014ducial)h(p)s(oin)m
-(ts)f(for)g(W)m(CS)h(pro)5 b(jections)35 b(are)f(no)m(w)h(supp)s(orted)
-d(b)m(y)j(FitsChans)427 4833 y(whic)m(h)29 b(use)f(FITS-W)m(CS)g(enco)s
-(ding.)40 b(This)28 b(use)g(k)m(eyw)m(ords)h(PVi)p Fy(_)p
-FG(0,)g(PVi)p Fy(_)p FG(1)g(and)f(PVi)p Fy(_)p FG(2)h(for)f(the)427
-4946 y(longitude)j(axis.)336 5093 y Fu(\017)46 b FG(When)37
-b(reading)g(a)h(FITS-W)m(CS)e(header,)j(a)e(FitsChan)g(will)h(no)m(w)f
-(use)f(k)m(eyw)m(ords)i(PVi)p Fy(_)p FG(3)f(and)427 5206
-y(PVi)p Fy(_)p FG(4)d(for)f(the)g(longitude)g(axis)h(\(if)f(presen)m
-(t\))h(in)f(preference)g(to)g(an)m(y)h(LONPOLE)e(and)g(LA)-8
-b(T-)427 5319 y(POLE)38 b(k)m(eyw)m(ords)h(whic)m(h)g(ma)m(y)g(b)s(e)f
-(presen)m(t.)66 b(When)38 b(writing)h(a)g(FITS-W)m(CS)f(header,)j(b)s
-(oth)427 5432 y(forms)30 b(are)h(written)f(out.)336 5580
-y Fu(\017)46 b FG(The)31 b(n)m(um)m(b)s(er)g(of)g(W)m(CS)h(axes)g(is)f
-(stored)h(in)f(the)h(W)m(CSAXES)f(k)m(eyw)m(ord)h(if)g(its)g(v)-5
-b(alue)32 b(w)m(ould)f(b)s(e)427 5693 y(di\013eren)m(t)g(to)g(that)g
-(of)g(the)f(NAXIS)g(k)m(eyw)m(ord.)p eop end
-%%Page: 546 556
-TeXDict begin 546 555 bop 0 52 a FG(546)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)336 351 y Fu(\017)46
-b FG(Helio-ecliptic)j(co)s(ordinates)c(are)g(no)m(w)g(supp)s(orted)e(b)
-m(y)h(FitsChans)h(whic)m(h)f(use)h(FITS-W)m(CS)427 464
-y(enco)s(ding.)h(This)31 b(uses)h(CTYPE)f(co)s(des)h(\\HLON")h(and)e
-(\\HLA)-8 b(T".)33 b(The)f(resulting)g(SkyF)-8 b(rame)427
-577 y(will)31 b(ha)m(v)m(e)g(a)f(System)g(v)-5 b(alue)30
-b(of)h(\\HELIOECLIPTIC",)d(and)i(all)g(the)h(usual)e(facilities,)k(suc)
-m(h)c(as)427 690 y(con)m(v)m(ersion)j(to)f(other)g(celestial)i
-(systems,)d(are)h(a)m(v)-5 b(ailable.)336 826 y Fu(\017)46
-b FG(The)33 b(FITS-W)m(CS)f(enco)s(ding)h(no)m(w)f(supp)s(orts)f(most)i
-(of)g(the)g(con)m(v)m(en)m(tions)i(describ)s(ed)c(in)i(FITS-)427
-939 y(W)m(CS)22 b(pap)s(er)f(I)s(I)s(I)g(for)g(the)i(description)f(of)g
-(sp)s(ectral)g(co)s(ordinates.)39 b(The)21 b(exceptions)i(are)g(that)f
-(the)427 1052 y(SSYSOBS)30 b(k)m(eyw)m(ord)i(is)g(not)f(supp)s(orted,)g
-(and)g(W)m(CS)g(stored)h(in)f(tabular)h(form)f(\(as)h(indicated)427
-1165 y(b)m(y)f(the)f(\\-T)-8 b(AB")32 b(algorithm)g(co)s(de\))f(is)f
-(not)h(supp)s(orted.)336 1300 y Fu(\017)46 b FG(When)29
-b(reading)g(a)g(FITS-W)m(CS)g(header,)g(a)h(FitsChan)f(will)g(no)m(w)g
-(ignore)h(an)m(y)f(distortion)g(co)s(des)427 1413 y(whic)m(h)24
-b(are)h(presen)m(t)g(in)f(CTYPE)f(k)m(eyw)m(ords.)40
-b(Here,)26 b(a)f(\\distortion)g(co)s(de")g(is)g(the)f(\014nal)g(group)g
-(of)427 1526 y(four)j(c)m(haracters)i(in)e(a)h(CTYPE)e(v)-5
-b(alue)28 b(of)g(the)f(form)g(\\xxxx-yyy-zzz",)k(as)d(describ)s(ed)e
-(in)h(FITS-)427 1639 y(W)m(CS)21 b(pap)s(er)f(IV.)h(The)f(exception)i
-(to)g(this)f(is)g(that)g(the)g(\\-SIP")g(distortion)h(co)s(de)f(\(as)g
-(used)g(b)m(y)f(the)427 1752 y(SIR)-8 b(TF)20 b(pro)5
-b(ject)21 b(-)f(see)41 b(h)m(ttp://sirtf.caltec)m(h.edu/SSC/do)s(cumen)
-m(ts/W)m(CSk)m(eyw)m(ords)p Fy(_)p FG(v1.3.p)s(df)7 b(\))427
-1865 y(is)31 b(in)m(terpreted)h(correctly)g(and)f(results)g(in)g(a)g(P)
-m(olyMap)i(b)s(eing)d(used)h(to)h(represen)m(t)f(the)g(distor-)427
-1978 y(tion)j(in)e(the)h(resulting)g(F)-8 b(rameSet.)49
-b(Note,)35 b(\\-SIP")e(distortion)g(co)s(des)g(can)g(only)g(b)s(e)f
-(read,)h(not)427 2091 y(written.)41 b(A)29 b(F)-8 b(rameSet)31
-b(whic)m(h)e(uses)g(a)h(P)m(olyMap)h(will)e(not)h(in)f(general)i(b)s(e)
-d(able)i(to)h(b)s(e)d(written)427 2204 y(out)38 b(to)h(a)f(FitsChan)g
-(using)g(an)m(y)g(foreign)g(enco)s(ding)g(\(although)h(NA)-8
-b(TIVE)38 b(enco)s(ding)g(can)g(of)427 2317 y(course)31
-b(b)s(e)f(used\).)336 2452 y Fu(\017)46 b FG(The)35 b(W)-8
-b(arnings)35 b(attribute)g(of)g(the)g(FitsChan)g(class)g(no)m(w)g
-(accepts)h(v)-5 b(alues)35 b(\\BadV)-8 b(al")37 b(\(whic)m(h)427
-2565 y(giv)m(es)k(w)m(arnings)e(ab)s(out)f(con)m(v)m(ersion)j(errors)e
-(when)f(reading)h(FITS)f(k)m(eyw)m(ord)i(v)-5 b(alues\),)42
-b(\\Dis-)427 2678 y(tortion")37 b(\(whic)m(h)f(giv)m(es)h(w)m(arnings)f
-(ab)s(out)f(unsupp)s(orted)e(distortion)j(co)s(des)g(within)f(CTYPE)427
-2791 y(v)-5 b(alues\),)31 b(and)e(\\BadMat")j(\(whic)m(h)e(giv)m(es)h
-(a)f(w)m(arning)g(if)f(the)h(rotation/scaling)j(matrix)d(cannot)427
-2904 y(b)s(e)g(in)m(v)m(erted\).)336 3040 y Fu(\017)46
-b FG(When)f(writing)g(a)g(F)-8 b(rameSet)46 b(to)g(a)f(FitsChan)g(whic)
-m(h)g(uses)f(a)i(non-Nativ)m(e)g(enco)s(ding,)j(the)427
-3153 y(commen)m(t)40 b(asso)s(ciated)g(with)e(an)m(y)h(card)f(already)i
-(in)e(the)h(FitsChan)f(will)h(b)s(e)f(retained)h(if)f(the)427
-3266 y(k)m(eyw)m(ord)23 b(v)-5 b(alue)22 b(b)s(eing)f(written)h(is)g
-(the)g(same)g(as)h(the)f(k)m(eyw)m(ord)g(v)-5 b(alue)22
-b(already)h(in)e(the)h(FitsChan.)336 3402 y Fu(\017)46
-b FG(A)26 b(F)-8 b(rameSet)26 b(whic)m(h)f(uses)g(the)g(non-FITS)f(pro)
-5 b(jection)26 b(t)m(yp)s(e)g(AST)p Fy(__)p FG(TPN)d(\(a)j(T)-8
-b(AN)26 b(pro)5 b(jection)427 3515 y(with)36 b(p)s(olynomial)f
-(distortion)h(terms\))g(can)g(no)m(w)g(b)s(e)f(written)g(to)h(a)g
-(FitsChan)g(if)f(the)h(Enco)s(d-)427 3627 y(ing)42 b(attribute)g(is)f
-(set)h(to)g(FITS-W)m(CS.)f(The)f(standard)h(\\-T)-8 b(AN")42
-b(co)s(de)g(is)f(used)g(within)f(the)427 3740 y(CTYPE)34
-b(v)-5 b(alues,)35 b(and)f(the)g(distortion)h(co)s(e\016cien)m(ts)h
-(are)e(enco)s(ded)g(in)g(k)m(eyw)m(ords)g(of)h(the)f(form)427
-3853 y(\\)g(QVi)p Fy(_)p FG(ma",)g(whic)m(h)f(are)g(directly)g
-(analogous)i(to)e(the)h(standard)e(\\PVi)p Fy(_)p FG(ma")i(pro)5
-b(jection)33 b(pa-)427 3966 y(rameter)i(k)m(eyw)m(ords.)53
-b(Th)m(us)33 b(a)h(FITS)g(reader)g(whic)m(h)g(do)s(es)g(not)g
-(recognise)i(the)e(QV)g(k)m(eyw)m(ords)427 4079 y(will)d(still)g(b)s(e)
-f(able)h(to)g(read)f(the)h(header,)f(but)g(the)h(distortion)f(will)h(b)
-s(e)f(ignored.)336 4215 y Fu(\017)46 b FG(The)30 b(default)g(v)-5
-b(alue)31 b(for)f(DefB1950)i(attribute)f(no)m(w)f(dep)s(ends)f(on)h
-(the)g(v)-5 b(alue)30 b(of)h(the)f(Enco)s(ding)427 4328
-y(attribute.)336 4464 y Fu(\017)46 b FG(A)d(new)e(app)s(endix)g(has)h
-(b)s(een)g(added)f(to)i(SUN/210)h(and)e(SUN/211)i(giving)f(details)g
-(of)f(the)427 4577 y(implemen)m(tation)36 b(pro)m(vided)e(b)m(y)g(the)g
-(FitsChan)g(class)h(of)f(the)g(con)m(v)m(en)m(tions)i(con)m(tained)g
-(in)d(the)427 4690 y(\014rst)d(four)g(FITS-W)m(CS)g(pap)s(ers.)111
-4887 y(2.)46 b(The)37 b(SkyF)-8 b(rame)38 b(class)h(no)m(w)e(supp)s
-(orts)f(t)m(w)m(o)j(new)e(co)s(ordinate)i(systems)e(\\ICRS")g(and)g
-(\\HELIOE-)227 5000 y(CLIPTIC".)e(The)h(default)g(for)g(the)g(System)g
-(attribute)h(for)f(SkyF)-8 b(rames)36 b(has)g(b)s(een)f(c)m(hanged)i
-(from)227 5112 y(\\FK5")32 b(to)f(\\ICRS".)111 5290 y(3.)46
-b(The)26 b(AST)p Fy(_)p FG(RA)-8 b(TE)25 b(function)g(has)h(b)s(een)f
-(added)g(whic)m(h)g(allo)m(ws)j(an)d(estimate)j(to)f(b)s(e)e(made)h(of)
-g(the)g(rate)227 5403 y(of)31 b(c)m(hange)g(of)g(a)g(Mapping)f(output)g
-(with)g(resp)s(ect)g(to)h(one)g(of)g(the)f(Mapping)h(inputs.)111
-5580 y(4.)46 b(All)38 b(attribute)f(names)f(for)h(F)-8
-b(rames)37 b(of)g(an)m(y)g(class)g(ma)m(y)g(no)m(w)g(include)f(an)h
-(optional)h(axis)f(sp)s(eci\014er.)227 5693 y(This)25
-b(includes)f(those)i(attributes)f(whic)m(h)g(describ)s(e)f(a)i(prop)s
-(ert)m(y)e(of)h(the)h(whole)f(F)-8 b(rame.)40 b(F)-8
-b(or)26 b(instance,)p eop end
-%%Page: 547 557
-TeXDict begin 547 556 bop 0 52 a Fz(G.17)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V3.1)2249 b FG(547)227 351
-y(the)39 b(Domain)h(attribute)g(ma)m(y)f(no)m(w)g(b)s(e)f(sp)s
-(eci\014ed)h(as)g(\\Domain\(1\)")i(in)e(addition)g(to)h(the)f(simpler)
-227 464 y(\\Domain".)61 b(In)35 b(cases)i(suc)m(h)f(as)h(this,)h(where)
-e(the)g(attribute)h(describ)s(es)f(a)h(prop)s(ert)m(y)e(of)i(the)f
-(whole)227 577 y(F)-8 b(rame,)31 b(axis)e(sp)s(eci\014ers)g(will)g
-(usually)g(b)s(e)f(ignored.)41 b(The)28 b(exception)i(is)f(that)h(a)f
-(CmpF)-8 b(rame)29 b(will)h(use)227 690 y(the)e(presence)g(of)f(an)h
-(axis)g(sp)s(eci\014er)f(to)h(indicate)h(that)f(the)g(attribute)g(name)
-f(relates)i(to)g(the)e(primary)227 803 y(F)-8 b(rame)32
-b(con)m(taining)f(the)g(sp)s(eci\014ed)f(axis,)h(rather)f(than)g(to)h
-(the)g(CmpF)-8 b(rame)30 b(as)h(a)f(whole.)111 992 y(5.)46
-b(A)35 b(new)f(sub)s(class)g(of)h(Mapping,)h(the)f(P)m(olyMap,)i(has)e
-(b)s(een)f(added)g(whic)m(h)g(p)s(erforms)f(a)i(general)h(N-)227
-1105 y(dimensional)31 b(p)s(olynomial)f(mapping.)111
-1293 y(6.)46 b(A)37 b(new)g(sub)s(class)f(of)i(Mapping,)g(the)g
-(GrismMap,)h(has)e(b)s(een)f(added)g(whic)m(h)h(mo)s(dels)g(the)g(sp)s
-(ectral)227 1406 y(disp)s(ersion)29 b(pro)s(duced)g(b)m(y)h(a)h
-(grating,)h(prism)d(or)h(grism.)111 1595 y(7.)46 b(A)38
-b(new)f(sub)s(class)g(of)h(Mapping,)i(the)e(ShiftMap,)h(has)f(b)s(een)f
-(added)g(whic)m(h)g(adds)g(constan)m(t)i(v)-5 b(alues)227
-1708 y(on)m(to)32 b(all)f(co)s(ordinates)g(\(this)g(is)f(equiv)-5
-b(alen)m(t)32 b(to)f(a)g(WinMap)g(with)f(unit)g(scaling)h(on)f(all)i
-(axes\).)111 1897 y(8.)46 b(Minor)32 b(bugs)f(ha)m(v)m(e)i(b)s(een)e
-(\014xed)g(within)g(the)h(Plot)h(class)f(to)h(do)e(with)h(the)f(c)m
-(hoice)j(and)d(placemen)m(t)i(of)227 2010 y(n)m(umerical)e(axis)g(lab)s
-(els.)111 2198 y(9.)46 b(The)33 b(SphMap)g(class)h(has)f(a)h(new)g
-(attribute)g(called)h(P)m(olarLong)g(whic)m(h)e(giv)m(es)i(the)f
-(longitude)g(v)-5 b(alue)227 2311 y(to)31 b(b)s(e)f(returned)f(when)g
-(a)i(Cartesian)f(p)s(osition)h(corresp)s(onding)e(to)i(either)f(the)h
-(north)e(or)i(south)e(p)s(ole)227 2424 y(is)i(transformed)e(in)m(to)j
-(spherical)e(co)s(ordinates.)66 2613 y(10.)46 b(The)33
-b(WcsMap)i(class)f(no)m(w)g(assigns)g(a)g(longitude)g(of)g(zero)g(to)h
-(output)e(celestial)j(co)s(ordinates)f(whic)m(h)227 2726
-y(ha)m(v)m(e)d(a)f(latitude)g(of)g(plus)e(or)h(min)m(us)g(90)h
-(degrees.)66 2915 y(11.)46 b(The)31 b(NatLat)h(and)f(NatLon)g
-(attributes)h(of)f(the)g(WcsMap)h(class)g(ha)m(v)m(e)g(b)s(een)f(c)m
-(hanged)g(so)h(that)f(they)227 3027 y(no)m(w)g(return)f(the)g(\014xed)h
-(nativ)m(e)h(co)s(ordinates)f(of)g(the)g(pro)5 b(jection)31
-b(reference)g(p)s(oin)m(t,)g(rather)g(than)f(the)227
-3140 y(nativ)m(e)i(co)s(ordinates)f(of)g(the)f(user-de\014ned)f
-(\014ducial)h(p)s(oin)m(t.)66 3329 y(12.)46 b(Notation)34
-b(has)d(b)s(een)g(c)m(hanged)h(in)f(b)s(oth)f(the)i(WcsMap)g(and)f
-(FitsChan)h(classes)g(to)g(re\015ect)g(the)g(con-)227
-3442 y(v)m(en)m(tion)39 b(used)d(in)h(the)h(FITS-W)m(CS)e(pap)s(ers)g
-(that)i(index)f(\\i")h(refers)f(to)h(a)g(w)m(orld)f(co)s(ordinate)h
-(axis,)227 3555 y(and)30 b(index)g(\\j")h(refers)f(to)h(a)g(pixel)g
-(axis.)66 3744 y(13.)46 b(Changes)24 b(ha)m(v)m(e)h(b)s(een)e(made)h
-(to)h(sev)m(eral)g(Mapping)f(classes)h(in)f(order)f(to)i(allo)m(w)h
-(the)e(AST)p Fy(_)p FG(SIMPLIFY)227 3857 y(function)30
-b(to)h(mak)m(e)h(simpli\014cations)f(in)f(a)h(CmpMap)e(whic)m(h)h
-(previously)g(w)m(ere)h(not)g(p)s(ossible.)66 4045 y(14.)46
-b(The)40 b(SlaMap)h(class)g(has)g(b)s(een)e(extended)i(b)m(y)f(the)h
-(addition)g(of)f(con)m(v)m(ersions)i(b)s(et)m(w)m(een)f(FK5)g(and)227
-4158 y(ICRS)29 b(co)s(ordinates,)j(and)e(b)s(et)m(w)m(een)h(FK5)f(and)g
-(helio-ecliptic)j(co)s(ordinates.)66 4347 y(15.)46 b(The)36
-b(Sp)s(ecMap)f(class)i(has)e(b)s(een)g(c)m(hanged)i(to)f(use)g(the)g
-(equation)h(for)e(the)h(refractiv)m(e)i(index)d(of)h(air)227
-4460 y(as)42 b(giv)m(en)g(in)f(the)g(curren)m(t)g(v)m(ersion)g(of)h
-(FITS-W)m(CS)e(pap)s(er)h(I)s(I)s(I.)e(Also,)45 b(the)c(forw)m(ard)g
-(and)g(in)m(v)m(erse)227 4573 y(transformations)33 b(b)s(et)m(w)m(een)h
-(frequency)e(and)g(air-w)m(a)m(v)m(elength)k(ha)m(v)m(e)e(b)s(een)e
-(made)h(more)g(compatible)227 4686 y(b)m(y)e(using)e(an)i(iterativ)m(e)
-i(pro)s(cedure)c(to)i(calculate)i(the)d(in)m(v)m(erse.)0
-4981 y Fw(G.17)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.1)0
-5203 y FG(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 5316 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V3.0)g(and)f(V3.1)i(\(the)f(curren)m(t)f(v)m(ersion\):)
-111 5580 y(1.)46 b(Addition)30 b(of)g(a)g(new)f(class)h(called)h
-(XmlChan)e(-)h(a)g(Channel)e(whic)m(h)i(reads)f(and)g(writes)h(AST)f
-(ob)5 b(jects)227 5693 y(in)30 b(the)h(form)f(of)g(XML.)p
-eop end
-%%Page: 548 558
-TeXDict begin 548 557 bop 0 52 a FG(548)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FG(2.)46
-b(A)30 b(bug)f(has)g(b)s(een)g(\014xed)g(in)g(the)g(Plot)i(class)f
-(whic)m(h)f(could)h(cause)g(incorrect)g(graphical)h(attributes)f(to)227
-464 y(b)s(e)35 b(used)g(for)g(v)-5 b(arious)36 b(parts)f(of)h(the)f
-(plot)h(if)g(either)g(axis)g(has)f(no)h(tic)m(k)h(marks)e(\(i.e.)57
-b(if)36 b(b)s(oth)e(ma)5 b(jor)227 577 y(and)30 b(minor)g(tic)m(k)i
-(marks)e(ha)m(v)m(e)h(zero)g(length\).)0 810 y(Programs)25
-b(whic)m(h)g(are)h(statically)h(link)m(ed)f(will)f(need)g(to)h(b)s(e)f
-(re-link)m(ed)g(in)g(order)g(to)h(tak)m(e)h(adv)-5 b(an)m(tage)27
-b(of)e(these)0 923 y(new)30 b(facilities.)0 1206 y Fw(G.18)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.2)0 1420 y
-FG(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h(signi\014can)m(t)g
-(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g(AST)g
-(library)0 1533 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V3.1)g(and)f
-(V3.2:)111 1766 y(1.)46 b(A)d(new)f(routine)g(AST)p Fy(_)p
-FG(PUTCARDS)f(has)h(b)s(een)g(added)f(to)i(the)g(FitsChan)f(class.)78
-b(This)41 b(allo)m(ws)227 1879 y(m)m(ultiple)33 b(concatenated)h
-(header)e(cards)g(to)h(b)s(e)f(stored)g(in)g(a)g(FitsChan)g(in)g(a)h
-(single)f(call,)j(pro)m(viding)227 1992 y(an)c(alternativ)m(e)h(to)f
-(the)g(existing)g(AST)p Fy(_)p FG(PUTCARDS)e(routine.)111
-2172 y(2.)46 b(Some)33 b(sign\014can)m(t)h(c)m(hanges)g(ha)m(v)m(e)g(b)
-s(een)f(made)g(to)h(the)f(simpli\014cation)h(of)f(Mappings)g(whic)m(h)f
-(should)227 2285 y(resultin)24 b(a)h(greater)h(degree)f(of)g
-(simplication)g(taking)h(place.Some)f(bugs)f(ha)m(v)m(e)i(also)f(b)s
-(een)f(\014xed)g(whic)m(h)227 2398 y(could)d(result)f(in)h(an)f
-(in\014nite)h(lo)s(op)f(b)s(eing)h(en)m(tered)g(when)e(attempting)j(to)
-g(simplify)e(certain)h(Mappings.)111 2578 y(3.)46 b(The)40
-b(FitsChan)h(class)g(no)m(w)g(translates)g(the)g(sp)s(ectral)g
-(algorithm)h(co)s(des)e(\\-W)-10 b(A)g(V",)43 b(\\-FR)m(Q")f(and)227
-2691 y(\\-VEL")d(\(sp)s(eci\014ed)e(in)g(early)h(drafts)f(of)g(pap)s
-(er)f(I)s(I)s(I\))h(to)h(the)f(corresp)s(onding)g(\\-X2P")i(form)d
-(when)227 2804 y(reading)31 b(a)g(sp)s(ectral)f(axis)h(description)f
-(from)g(a)h(set)g(of)g(FITS)e(header)h(cards.)111 2985
-y(4.)46 b(A)35 b(bug)f(has)g(b)s(een)g(\014xed)f(in)h(the)h(FitsChan)f
-(class)h(whic)m(h)g(could)f(cause)h(k)m(eyw)m(ords)g(asso)s(ciated)h
-(with)227 3098 y(alternate)c(axis)f(descriptions)f(to)i(b)s(e)d(mis-in)
-m(terpreted.)111 3278 y(5.)46 b(The)33 b(Plot)h(class)f(no)m(w)g(pro)m
-(vides)g(facilities)i(for)e(mo)s(difying)g(the)g(app)s(earance)g(of)g
-(sub-strings)f(within)227 3391 y(text)24 b(strings)f(suc)m(h)g(as)g
-(axis)g(lab)s(els,)i(titles,)h Fx(etc)p FG(,)e(b)m(y)f(pro)s(ducing)f
-(sup)s(er-scripts,)h(sub-scripts,)h(c)m(hanging)227 3504
-y(the)31 b(fon)m(t)g(colour,)g(size,)g Fx(etc)p FG(.)41
-b(See)31 b(attribute)g(Escap)s(e.)111 3684 y(6.)46 b(The)36
-b(default)g(v)-5 b(alue)36 b(of)g(the)h(T)-8 b(ol)36
-b(attribute)h(of)f(the)g(Plot)h(class)g(has)e(b)s(een)h(c)m(hanged)g
-(from)g(0.001)i(to)227 3797 y(0.01.)47 b(This)31 b(should)g(not)h
-(usually)f(cause)i(an)m(y)f(signi\014can)m(t)h(visible)f(c)m(hange)h
-(to)f(the)g(plot,)h(but)e(should)227 3910 y(mak)m(e)i(the)f(plotting)h
-(faster.)46 b(Y)-8 b(ou)33 b(ma)m(y)f(need)g(to)h(set)f(a)g(lo)m(w)m
-(er)i(v)-5 b(alue)32 b(for)g(T)-8 b(ol)32 b(if)g(y)m(ou)g(are)h(pro)s
-(ducing)227 4023 y(a)e(particularly)g(large)g(plot.)111
-4203 y(7.)46 b(The)30 b(algorithm)h(for)e(\014nding)g(the)h(default)g
-(v)-5 b(alue)31 b(for)e(the)h(Gap)h(attribute)f(has)g(b)s(een)f(c)m
-(hanged.)41 b(This)227 4316 y(attribute)34 b(sp)s(eci\014es)f(the)g
-(gap)h(b)s(et)m(w)m(een)g(ma)5 b(jor)33 b(axis)g(v)-5
-b(alues)34 b(in)f(an)g(annotated)h(grid)f(dra)m(wn)f(b)m(y)h(the)227
-4429 y(Plot)26 b(class.)40 b(The)25 b(c)m(hange)h(in)f(algorithm)h(ma)m
-(y)f(cause)h(the)f(default)h(v)-5 b(alue)25 b(to)h(b)s(e)f(di\013eren)m
-(t)g(to)h(previous)227 4542 y(v)m(ersions)31 b(in)f(cirtain)h
-(circumstances.)111 4722 y(8.)46 b(Some)39 b(bugs)f(ha)m(v)m(e)i(b)s
-(een)e(\014xed)g(in)g(the)h(Plot)h(class)f(whic)m(h)g(could)g(cause)g
-(the)g(system)g(to)g(hang)g(for)227 4835 y(a)k(long)g(time)g(while)g
-(dra)m(wing)f(certain)i(all-sky)f(grids)f(\(notable)i(some)f(of)f(the)h
-(FITS)f(Quad-cub)s(e)227 4948 y(pro)5 b(jections\).)111
-5128 y(9.)46 b(The)33 b(SkyAxis)g(class)i(has)e(extended)g(the)h(F)-8
-b(ormat)35 b(attribute)f(b)m(y)f(the)h(addition)g(of)f(the)h(\\g")h
-(option.)227 5241 y(this)k(option)g(is)f(similar)h(to)g(the)g(older)f
-(\\l")i(option)f(in)f(that)h(it)g(results)f(in)g(c)m(haracters)i
-(\(\\h",)i(\\m",)227 5354 y(\\s",)34 b Fx(etc)5 b FG(\))32
-b(b)s(eing)g(used)f(as)h(delimiters)h(b)s(et)m(w)m(een)f(the)h
-(sexagesimal)h(\014elds)d(of)h(the)h(celestial)h(p)s(osition.)227
-5467 y(The)g(di\013erence)i(is)e(that)i(the)e(\\g")i(option)f(includes)
-g(graphics)f(escap)s(e)i(sequences)e(in)h(the)g(returned)227
-5580 y(formatted)27 b(string)e(whic)m(h)h(result)g(in)f(the)h(\014eld)g
-(delimiter)g(c)m(haracters)i(b)s(eing)d(dra)m(wn)g(as)h(sup)s
-(er-scripts)227 5693 y(when)k(plotted)h(as)f(n)m(umerical)h(axis)g(v)-5
-b(alues)31 b(b)m(y)f(a)h(Plot.)p eop end
-%%Page: 549 559
-TeXDict begin 549 558 bop 0 52 a Fz(G.19)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V3.3)2249 b FG(549)66 351 y(10.)46
-b(The)30 b(Plot)h(class)g(has)f(b)s(een)f(extended)h(to)h(include)f
-(facilities)i(for)e(pro)s(ducing)f(logarithmic)j(axes.)41
-b(See)227 464 y(attributes)31 b(LogPlot,)h(LogTic)m(ks,)g(LogGap)g(and)
-d(LogLab)s(el.)66 672 y(11.)46 b(New)35 b(functions)g(astGCap)g(and)g
-(astGScales)h(ha)m(v)m(e)g(b)s(een)f(added)f(to)h(the)g(in)m(terface)i
-(de\014ned)d(b)m(y)g(\014le)227 785 y Fy(grf.h)p FG(.)39
-b(The)26 b(ast)p Fy(_)p FG(link)i(command)f(has)g(b)s(een)g(mo)s
-(di\014ed)f(so)h(that)h(the)g Fy(-mygrf)d FG(switc)m(h)j(loads)g(dumm)m
-(y)227 898 y(v)m(ersions)34 b(of)f(the)g(new)g(grf)g(functions.)48
-b(This)32 b(means)h(that)h(applications)g(should)e(con)m(tin)m(ue)j(to)
-f(build)227 1011 y(without)23 b(an)m(y)f(c)m(hange.)40
-b(Ho)m(w)m(ev)m(er,)26 b(the)c(facilities)j(for)d(in)m(terpreting)h
-(escap)s(e)g(sequences)g(within)f(strings)227 1124 y(dra)m(wn)j(b)m(y)g
-(the)g(Plot)i(class)f(will)f(not)h(b)s(e)e(a)m(v)-5 b(ailable)28
-b(unless)d(the)g(new)g(grf)g(functions)g(are)h(implemen)m(ted.)227
-1237 y(If)c(y)m(ou)g(c)m(ho)s(ose)h(to)f(implemen)m(t)h(them,)h(y)m(ou)
-e(should)f(mo)s(dify)g(y)m(our)h(linking)g(pro)s(cedure)e(to)j(use)f
-(the)g Fy(-grf)227 1349 y FG(switc)m(h)34 b(in)e(place)i(of)f(the)h
-(older)f Fy(-mygrf)e FG(switc)m(h.)49 b(See)33 b(the)g(description)g
-(of)g(the)g(ast)p Fy(_)p FG(link)h(command)227 1462 y(for)g(details)h
-(of)f(the)g(new)g(switc)m(hes.)52 b(Also)35 b(note)f(that)h(the)f
-(astGQc)m(h)h(function,)g(whilst)f(included)f(in)227
-1575 y(v)m(erb+grf.h+)i(in)h(p)s(ervious)f(v)m(ersions)i(of)f(AST,)g(w)
-m(as)h(not)f(actually)i(called.)59 b(As)36 b(of)h(this)f(v)m(ersion)g
-(of)227 1688 y(AST,)c(calls)i(are)f(made)f(to)h(the)g(astGQc)m(h)h
-(function,)e(and)g(so)h(an)m(y)g(bugs)e(in)i(the)f(implemen)m(tation)i
-(of)227 1801 y(astGQc)m(h)e(ma)m(y)f(cause)g(spurious)d(b)s(eha)m
-(viour)i(when)g(plotting)h(text)h(strings.)66 2009 y(12.)46
-b(A)c(new)f('static')i(metho)s(d)e(called)h(astEscap)s(es)g(has)f(b)s
-(een)g(added)f(whic)m(h)h(is)h(used)e(to)i(con)m(trol)h(and)227
-2122 y(enquire)33 b(whether)g(astGetC)h(and)f(astF)-8
-b(ormat)35 b(will)e(strip)g(an)m(y)h(graphical)g(escap)s(e)f(sequences)
-h(whic)m(h)227 2235 y(ma)m(y)d(b)s(e)f(presen)m(t)g(out)h(of)g(the)f
-(returned)f(v)-5 b(alue.)66 2443 y(13.)46 b(New)35 b(attribute)g
-(XmlPre\014x)f(has)g(b)s(een)f(added)h(to)h(the)g(XmlChan)e(class.)54
-b(It)34 b(allo)m(ws)i(XML)e(written)227 2556 y(b)m(y)d(the)f(XmlChan)g
-(class)h(to)g(include)f(an)g(explicit)i(namespace)f(pre\014x)e(on)i
-(eac)m(h)g(elemen)m(t.)66 2763 y(14.)46 b(New)33 b(attribute)g(XmlF)-8
-b(ormat)34 b(has)e(b)s(een)g(added)f(to)i(the)g(XmlChan)f(class.)47
-b(It)33 b(sp)s(eci\014es)f(the)g(format)227 2876 y(in)e(whic)m(h)g(AST)
-g(ob)5 b(jects)31 b(should)f(b)s(e)f(written.)66 3084
-y(15.)46 b(A)26 b(new)f(class)h(of)f(Mapping,)i(the)e(T)-8
-b(ranMap,)27 b(has)e(b)s(een)f(in)m(tro)s(duced.)39 b(A)25
-b(T)-8 b(ranMap)25 b(tak)m(es)i(its)f(forw)m(ard)227
-3197 y(transformation)41 b(from)g(an)f(existing)i(Mapping,)h(and)d(its)
-h(in)m(v)m(erse)h(transformation)f(from)f(another)227
-3310 y(existing)32 b(Mapping.)66 3518 y(16.)46 b(A)39
-b(bug)f(has)h(b)s(een)f(\014xed)g(in)h(WcsMap)g(whic)m(h)g(caused)g
-(error)f(rep)s(orts)g(to)i(include)e(erroneous)h(axis)227
-3631 y(n)m(um)m(b)s(ers)29 b(when)h(referring)f(to)j(missing)e
-(parameter)h(v)-5 b(alues.)0 3958 y Fw(G.19)112 b(Changes)39
-b(In)m(tro)s(duced)f(in)f(V3.3)0 4194 y FG(The)g(follo)m(wing)h
-(describ)s(es)f(the)g(most)h(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f
-(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g(AST)g(library)0
-4307 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V3.2)g(and)f(V3.3:)111
-4600 y(1.)46 b(Options)37 b(ha)m(v)m(e)i(b)s(een)e(added)g(to)h(the)g
-(SkyF)-8 b(rame)38 b(class)g(whic)m(h)g(allo)m(ws)h(the)e(origin)h(of)g
-(celestial)i(co-)227 4713 y(ordinates)c(to)g(b)s(e)f(mo)m(v)m(ed)i(to)f
-(an)m(y)f(sp)s(eci\014ed)g(p)s(oin)m(t.)56 b(See)36 b(the)g(new)f
-(attributes)h(SkyRef,)g(SkyRefIs,)227 4826 y(SkyRefP)30
-b(and)g(AlignO\013set.)111 5034 y(2.)46 b(An)33 b(option)g(has)g(b)s
-(een)f(added)g(to)i(the)f(FitsChan)f(class)i(whic)m(h)f(allo)m(ws)h
-(extra)g(F)-8 b(rames)33 b(represen)m(ting)227 5146 y(cartesian)i(pro)5
-b(jection)34 b(plane)f(co)s(ordinates)h(\(\\in)m(termediate)i(w)m(orld)
-d(co)s(ordinates")h(in)f(the)h(parlance)227 5259 y(of)29
-b(FITS-W)m(CS\))f(to)i(b)s(e)d(created)j(when)d(reading)i(W)m(CS)f
-(information)h(from)f(a)h(foreign)g(FITS)e(header.)227
-5372 y(This)j(option)h(is)f(con)m(trolled)i(b)m(y)e(a)h(new)f
-(attribute)h(called)h(Iw)m(c.)111 5580 y(3.)46 b(The)29
-b(FitsChan)f(class)i(whic)m(h)e(b)s(een)g(mo)s(di\014ed)g(to)h(in)m
-(terpret)g(FITS-W)m(CS)g(CAR)f(pro)5 b(jection)30 b(headers)227
-5693 y(correctly)i(if)e(the)h(longitude)g(reference)g(pixel)f
-(\(CRPIX\))h(is)f(v)m(ery)h(large.)p eop end
-%%Page: 550 560
-TeXDict begin 550 559 bop 0 52 a FG(550)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FG(4.)46
-b(The)35 b(FITS-AIPS++)e(enco)s(ding)j(in)e(the)i(FitsChan)f(class)h
-(no)m(w)f(recognised)h(sp)s(ectral)f(axes)h(if)f(they)227
-464 y(conform)42 b(to)h(the)g(AIPS)f(con)m(v)m(en)m(tion)i(in)e(whic)m
-(h)g(the)h(sp)s(ectral)f(axis)h(is)f(descirb)s(ed)f(b)m(y)i(a)f(CTYPE)
-227 577 y(k)m(eyw)m(ord)36 b(o)s(d)g(the)g(form)f("AAAA-BBB")k(where)c
-(\\AAAA")i(is)f(one)g(of)g(FREQ,)g(VELO)f(or)h(FELO,)227
-690 y(and)d(\\BBB")j(is)d(one)h(of)f(LSR,)g(LSD,)h(HEL)f(or)h(OBS.)f
-(Suc)m(h)g(sp)s(ectral)g(axes)h(can)g(b)s(e)f(b)s(oth)g(read)g(and)227
-803 y(written.)111 984 y(5.)46 b(The)24 b(FitsChan)g(class)h(no)m(w)g
-(has)f(a)h(FITS-AIPS++)d(enco)s(ding)j(whic)m(h)f(represen)m(ts)g(W)m
-(CS)g(information)227 1097 y(using)30 b(FITS)f(header)h(cards)g
-(recognised)h(b)m(y)f(the)g(AIPS++)f(pro)5 b(ject.)41
-b(Supp)s(ort)28 b(for)i(sp)s(ectral)h(axes)f(is)227 1210
-y(iden)m(tical)i(to)g(the)e(FITS-AIPS)f(enco)s(ding.)111
-1390 y(6.)46 b(The)39 b(organisation)i(of)f(the)g(AST)e(distribution)h
-(and)g(the)h(commands)f(for)g(building)f(it)i(ha)m(v)m(e)h(b)s(een)227
-1503 y(c)m(hanged.)h(Whereas)31 b(AST)f(used)f(to)j(b)s(e)d(built)i
-(and)e(installed)j(with)e Fy(./mk)46 b(build;)h(./mk)f(install)p
-FG(,)227 1616 y(it)36 b(no)m(w)e(builds)g(using)g(the)h(more)g
-(standard)f(idiom)h Fy(./configure;)44 b(make;)i(make)h(install)p
-FG(.)52 b(The)227 1729 y(installation)41 b(lo)s(cation)f(is)f(con)m
-(trolled)h(b)m(y)e(the)h Fy(--prefix)e FG(argumen)m(t)i(to)g
-(./con\014gure)g(\(as)g(is)g(usual)227 1842 y(for)30
-b(other)g(pac)m(k)-5 b(ages)32 b(whic)m(h)e(use)g(this)g(sc)m(heme\).)
-41 b(Note)32 b(that)e(the)h(INST)-8 b(ALL)29 b(en)m(vironmen)m(t)i(v)-5
-b(ariable)227 1955 y(no)m(w)28 b(has)g(a)g Fx(di\013er)-5
-b(ent)37 b FG(meaning)28 b(to)g(that)h(whic)m(h)e(it)h(had)g(b)s
-(efore,)g(and)f(it)h(should)f(generally)i(b)s(e)e Fx(unset)p
-FG(.)227 2068 y(Also,)32 b(there)e(is)h(no)f(need)g(to)h(set)g(the)g
-(SYSTEM)e(v)-5 b(ariable.)111 2249 y(7.)46 b(Shared)26
-b(libraries)g(are)h(no)m(w)g(installed)g(in)f(the)h(same)g(directory)g
-(as)g(the)g(static)h(libraries.)39 b(In)26 b(addition,)227
-2362 y(links)i(to)g(sharable)g(libraries)g(are)g(installed)h(with)e
-(names)h(whic)m(h)f(include)h(v)m(ersion)g(information,)h(and)227
-2475 y(\\libto)s(ol)22 b(libraries")f(are)f(also)i(installed)f(\(see)g
-(h)m(ttp://www.gn)m(u.org/soft)m(w)m(are/libto)s(ol/man)m(ual.h)m
-(tml\))q(.)111 2655 y(8.)46 b(The)22 b Fy(ast_dev)f FG(script)h(has)h
-(b)s(een)e(remo)m(v)m(ed.)39 b(Instead,)25 b(the)d(lo)s(cation)i(of)f
-(the)g(AST)f(include)g(\014les)g(should)227 2768 y(b)s(e)30
-b(sp)s(eci\014ed)g(using)g(the)g(-I)h(option)f(when)g(compiling.)111
-2949 y(9.)46 b(The)30 b(names)g(of)h(the)g(installed)g(AST)e(include)h
-(\014les)h(ha)m(v)m(e)g(b)s(een)f(c)m(hanged)h(to)g(upp)s(er)d(case.)0
-3233 y Fw(G.20)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.4)0
-3447 y FG(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 3560 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V3.3)g(and)f(V3.4:)111 3795 y(1.)46 b(The)e(Mapping)f
-(class)i(has)e(a)h(new)g(metho)s(d)f(\(AST)p Fy(_)p FG(LINEARAPPR)m(O)m
-(X\))h(whic)m(h)f(calculates)j(the)227 3908 y(co-e\016cien)m(ts)33
-b(of)e(a)f(linear)h(appro)m(ximation)h(to)f(a)f(Mapping.)111
-4089 y(2.)46 b(The)27 b(F)-8 b(ormat)29 b(attribute)g(for)e(simple)h(F)
--8 b(rames)28 b(and)f(SkyF)-8 b(rames)28 b(has)f(b)s(een)g(extended.)40
-b(It)28 b(has)f(alw)m(a)m(ys)227 4202 y(b)s(een)e(p)s(ossible,)h(in)f
-(b)s(oth)g(classes,)j(to)e(sp)s(ecify)f(a)h(precision)g(b)m(y)f
-(including)g(a)h(dot)f(in)h(the)f(F)-8 b(ormat)27 b(v)-5
-b(alue)227 4315 y(follo)m(w)m(ed)27 b(b)m(y)e(an)g(in)m(teger)i(\()p
-Fx(e.g.)39 b FG(\\)p Fy(dms.1)p FG(")24 b(for)h(a)h(SkyF)-8
-b(rame,)27 b(or)e(\\)p Fy(\045.10g)p FG(")g(for)g(a)g(simple)h(F)-8
-b(rame\).)40 b(The)227 4428 y(precision)31 b(can)g(no)m(w)g(also)g(b)s
-(e)f(sp)s(eci\014ed)g(using)g(an)h(asterisk)g(in)f(place)i(of)e(the)h
-(in)m(teger)h(\()p Fx(e.g.)41 b FG(\\)p Fy(dms.*)p FG(")227
-4541 y(or)36 b(\\)p Fy(\045.*g)p FG("\).)58 b(This)35
-b(causes)i(the)f(precision)g(to)h(b)s(e)e(deriv)m(ed)h(on)g(the)g
-(basis)g(of)g(the)g(Digits)i(attribute)227 4654 y(v)-5
-b(alue.)111 4835 y(3.)46 b(The)30 b(Plot)i(class)f(has)g(b)s(een)f(c)m
-(hanged)h(so)g(that)h(the)e(default)h(v)-5 b(alue)31
-b(used)f(for)h(the)g(Digits)h(attribute)f(is)227 4948
-y(c)m(hosen)f(to)h(b)s(e)e(the)g(smallest)i(v)-5 b(alue)30
-b(whic)m(h)f(results)h(in)f(no)h(pair)f(of)h(adjacen)m(t)g(lab)s(els)g
-(b)s(eing)f(iden)m(tical.)227 5060 y(F)-8 b(or)22 b(instance,)i(if)e
-(an)f(annotated)h(grid)f(is)g(b)s(eing)g(dra)m(wn)f(describing)h(a)h
-(SkyF)-8 b(rame,)24 b(and)d(the)g(F)-8 b(ormat\(1\))227
-5173 y(v)j(alue)30 b(is)e(set)i(to)f(\\)p Fy(hms.*g)p
-FG(")g(\(the)g(\\g")h(causes)f(\014eld)g(delimiters)g(to)h(b)s(e)e(dra)
-m(wn)g(as)h(sup)s(erscripts\),)f(and)227 5286 y(the)35
-b(Digits\(1\))i(v)-5 b(alue)36 b(is)e(unset,)i(then)e(the)h(seconds)g
-(\014eld)f(will)h(ha)m(v)m(e)h(a)f(n)m(um)m(b)s(er)e(of)i(decimal)h
-(places)227 5399 y(whic)m(h)30 b(results)h(in)f(no)g(pair)g(of)g(lab)s
-(els)h(b)s(eing)f(iden)m(tical.)111 5580 y(4.)46 b(Addition)34
-b(of)g(a)g(new)g(class)g(classed)h(DSBSp)s(ecF)-8 b(rame.)52
-b(This)33 b(is)h(a)g(sub-class)g(of)g(Sp)s(ecF)-8 b(rame)34
-b(whic)m(h)227 5693 y(can)d(b)s(e)f(used)f(to)i(describ)s(e)f(sp)s
-(ectral)h(axes)g(asso)s(ciated)h(with)e(dual)g(sideband)f(sp)s(ectral)i
-(data.)p eop end
-%%Page: 551 561
-TeXDict begin 551 560 bop 0 52 a Fz(G.21)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V3.5)2249 b FG(551)111 351
-y(5.)46 b(The)d(FitsChan)g(class)i(will)e(no)m(w)h(read)f(headers)g
-(whic)m(h)g(use)g(the)h(old)g(\\-GLS")g(pro)5 b(jection)44
-b(co)s(de,)227 464 y(con)m(v)m(erting)d(them)f(to)g(the)f(corresp)s
-(onding)f(mo)s(dern)g(\\-SFL")j(co)s(de,)h(pro)m(vided)c(that)i(the)g
-(celestial)227 577 y(axes)31 b(are)g(not)g(rotated.)111
-802 y(6.)46 b(The)36 b(FitsChan)f(class)i(has)f(a)g(new)f(Enco)s(ding,)
-i(\\FITS-CLASS",)e(whic)m(h)h(allo)m(ws)h(the)f(reading)g(and)227
-915 y(writing)21 b(of)f(FITS)g(headers)f(using)h(the)h(con)m(v)m(en)m
-(tions)h(of)e(the)h(CLASS)e(pac)m(k)-5 b(age)22 b(-)f(see)41
-b(h)m(ttp://www.iram.fr/IRAMFR/GILD)m(AS/do)s(c/h)m(tml/class-)227
-1028 y(h)m(tml/class.h)m(tml\).)0 1385 y Fw(G.21)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.5)0 1634 y
-FG(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h(signi\014can)m(t)g
-(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g(AST)g
-(library)0 1747 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V3.4)g(and)f
-(V3.5:)111 2066 y(1.)46 b(AST)29 b(no)m(w)g(pro)m(vides)h(facilities)i
-(for)d(represen)m(ting)g(regions)h(of)g(v)-5 b(arious)29
-b(shap)s(es)g(within)g(a)h(co)s(ordinate)227 2179 y(system.)43
-b(The)31 b(Region)g(class)h(pro)m(vides)f(general)h(facilities)h(whic)m
-(h)e(are)h(indep)s(enden)m(t)d(of)i(the)h(sp)s(eci\014c)227
-2292 y(shap)s(e)37 b(of)h(region)h(b)s(eing)e(used.)62
-b(V)-8 b(arious)39 b(sub-classes)f(of)g(Region)h(are)f(also)h(no)m(w)f
-(a)m(v)-5 b(ailable)40 b(whic)m(h)227 2404 y(pro)m(vide)25
-b(means)f(of)g(creating)h(Regions)g(of)g(sp)s(eci\014c)e(shap)s(e.)38
-b(F)-8 b(acilities)28 b(pro)m(vided)23 b(b)m(y)h(the)h(Region)g(class)
-227 2517 y(include)j(testing)h(p)s(oin)m(ts)f(to)h(see)f(if)g(they)h
-(are)f(inside)g(the)g(Region,)i(testing)f(t)m(w)m(o)g(Regions)g(for)f
-(o)m(v)m(erlap,)227 2630 y(transforming)i(Regions)h(from)f(one)h(co)s
-(ordinate)g(system)g(to)g(another)f Fx(etc)p FG(.)111
-2856 y(2.)46 b(A)31 b(new)f(class)h(of)g(1-dimensional)g(F)-8
-b(rame)32 b(called)g(FluxF)-8 b(rame)31 b(has)g(b)s(een)e(added)h(whic)
-m(h)g(can)h(b)s(e)f(used)227 2968 y(to)c(describ)s(e)e(v)-5
-b(arious)24 b(systems)h(for)f(describing)g(o)m(vserv)m(ed)i(v)-5
-b(alue)25 b(at)g(a)g(single)g(\014xed)f(sp)s(ectral)h(p)s(osition.)111
-3194 y(3.)46 b(A)33 b(new)f(class)h(of)f(2-dimensional)h(F)-8
-b(rame)34 b(called)f(Sp)s(ecFluxF)-8 b(rame)33 b(has)f(b)s(een)g(added)
-f(whic)m(h)h(can)h(b)s(e)227 3307 y(used)24 b(to)h(describ)s(e)f(a)h
-(2-d)g(frame)f(spanned)f(b)m(y)i(a)g(sp)s(ectral)g(p)s(osition)f(axis)h
-(and)f(and)g(an)g(observ)m(ed)h(v)-5 b(alue)227 3420
-y(axis.)111 3645 y(4.)46 b(A)c(new)f(class)h(of)g(Mapping)f(called)i
-(RateMap)f(has)g(b)s(een)e(added.)73 b(A)42 b(RateMap)h(encapsulates)f
-(a)227 3758 y(previously)32 b(created)h(Mapping.)44 b(The)31
-b(inputs)g(of)h(the)g(RateMap)h(corresp)s(ond)d(to)j(the)f(inputs)e(of)
-i(the)227 3871 y(encapsulated)i(Mapping.)48 b(All)33
-b(RateMaps)i(ha)m(v)m(e)f(just)e(a)h(single)h(output)e(whic)m(h)h
-(corresp)s(ond)f(to)h(the)227 3984 y(rate)24 b(of)g(c)m(hange)g(of)f(a)
-h(sp)s(eci\014ed)f(output)g(of)g(the)g(encapsulated)h(Mapping)f(with)g
-(resp)s(ect)h(to)g(a)f(sp)s(eci\014ed)227 4097 y(input.)111
-4322 y(5.)46 b(The)d(SkyF)-8 b(rame)45 b(class)f(no)m(w)g(supp)s(orts)e
-(a)i(v)-5 b(alue)44 b(of)g(\\J2000")i(for)d(System.)81
-b(This)43 b(system)h(is)g(an)227 4435 y(equatorial)29
-b(system)d(based)h(on)f(the)h(mean)g(dynamical)g(equator)g(and)f
-(equino)m(x)h(at)h(J2000,)h(and)d(di\013ers)227 4548
-y(sligh)m(tly)32 b(from)e(an)g(FK5\(J2000\))j(system.)111
-4773 y(6.)46 b(A)31 b(new)e(class)j(called)f(KeyMap)g(has)f(b)s(een)f
-(added.)40 b(A)31 b(KeyMap)f(can)h(b)s(e)f(used)f(to)i(store)g(a)g
-(collection)227 4886 y(of)d(v)m(ector)i(or)d(scalar)i(v)-5
-b(alues)28 b(or)g(Ob)5 b(jects,)29 b(indexed)e(b)m(y)h(a)g(c)m
-(haracter)h(string)f(rather)g(than)f(an)h(in)m(teger.)111
-5111 y(7.)46 b(The)33 b(parameter)h(list)g(for)f(the)g(AST)p
-Fy(_)p FG(RA)-8 b(TE)32 b(metho)s(d)h(of)g(the)h(Mapping)f(class)h(has)
-f(b)s(een)f(mo)s(di\014ed.)227 5224 y(It)j(no)f(longer)g(returns)f(a)i
-(second)f(deriv)-5 b(ativ)m(e)36 b(estimate.)53 b(Existing)35
-b(co)s(de)f(whic)m(h)g(uses)g(this)g(metho)s(d)227 5337
-y(will)d(need)f(to)h(b)s(e)f(c)m(hanged.)111 5562 y(8.)46
-b(Metho)s(ds)33 b(\(AST)p Fy(_)p FG(SETFITS<X>\))e(ha)m(v)m(e)i(b)s
-(een)f(added)g(to)h(the)g(FitsChan)f(class)i(to)f(allo)m(w)h(v)-5
-b(alues)33 b(for)227 5675 y(named)d(k)m(eyw)m(ords)h(to)g(b)s(e)f(c)m
-(hanged)h(or)f(added.)p eop end
-%%Page: 552 562
-TeXDict begin 552 561 bop 0 52 a FG(552)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)0 351 y Fw(G.22)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.6)0 574 y FG(The)26
-b(follo)m(wing)i(describ)s(es)d(the)i(most)f(signi\014can)m(t)i(c)m
-(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g(AST)g(library)g(b)s(et)m
-(w)m(een)0 687 y(v)m(ersions)31 b(V3.5)g(and)f(V3.6:)111
-953 y(1.)46 b(If)29 b(the)h(F)-8 b(ormat)30 b(attribute)h(asso)s
-(ciated)f(with)f(an)h(axis)g(of)f(a)h(SkyF)-8 b(rame)30
-b(starts)f(with)h(a)f(p)s(ercen)m(t)h(c)m(har-)227 1066
-y(acter)41 b(\(\\)p Fy(\045)p FG("\),)j(then)39 b(axis)i(v)-5
-b(alues)40 b(are)g(no)m(w)g(formatted)g(and)f(unformatted)h(as)g(a)g
-(decimal)h(radians)227 1179 y(v)-5 b(alue,)31 b(using)f(the)h(F)-8
-b(ormat)32 b(syn)m(tax)e(of)h(a)g(simple)f(F)-8 b(rame.)111
-1369 y(2.)46 b(The)34 b(Plot)i(class)f(has)f(a)h(new)f(attribute)h
-(called)h(Clip)e(whic)m(h)g(con)m(trols)i(the)f(clipping)g(p)s
-(erformed)e(b)m(y)227 1482 y(AST)d(at)h(the)g(plot)f(b)s(oundary)-8
-b(.)111 1672 y(3.)46 b(The)31 b(k)m(eys)g(used)g(to)g(lab)s(el)h(comp)s
-(onen)m(ts)f(of)g(the)g(P)m(olyMap)h(structure)f(when)f(a)h(P)m(olyMap)
-h(is)f(written)227 1785 y(out)24 b(through)g(a)g(Channel)f(ha)m(v)m(e)i
-(b)s(een)e(c)m(hanged.)40 b(The)23 b(new)g(k)m(eys)i(are)f(shorter)g
-(than)f(the)h(old)h(k)m(eys)f(and)227 1898 y(so)j(can)f(written)h
-(succesfully)f(to)h(a)g(FitsChan.)39 b(The)26 b(new)g(P)m(olyMap)h
-(class)g(alw)m(a)m(ys)h(writes)f(new)e(st)m(yles)227
-2011 y(k)m(eys)30 b(but)f(can)g(read)g(either)h(old)f(or)g(new)g(st)m
-(yle)h(k)m(eys.)41 b(Consequen)m(tly)-8 b(,)31 b(P)m(olyMap)f(dumps)d
-(written)j(b)m(y)227 2124 y(this)h(v)m(ersion)f(of)h(AST)f(cannot)h(b)s
-(e)e(read)i(b)m(y)f(older)g(v)m(ersions)h(of)g(AST.)111
-2314 y(4.)46 b(A)36 b(mimimal)f(cut)h(do)m(wn)f(subset)f(of)i(the)f(C)g
-(v)m(ersion)h(of)g(SLALIB)e(is)i(no)m(w)f(included)g(with)g(the)g(AST)
-227 2427 y(distribution)c(and)g(built)h(as)g(part)f(of)h(building)f
-(AST.)g(This)g(means)h(that)g(it)g(is)g(no)g(longer)g(necessary)227
-2540 y(to)i(ha)m(v)m(e)h(SLALIB)d(installed)i(separately)h(at)f(y)m
-(our)f(site.)50 b(The)33 b(SLALIB)f(co)s(de)i(included)e(with)h(AST)227
-2652 y(is)e(distrubuted)d(under)h(the)h(GPL.)h(The)e(default)i(b)s(eha)
-m(viour)f(of)g(the)g(ast)p Fy(_)p FG(link)h(script)f(is)g(no)m(w)h(to)g
-(link)227 2765 y(with)41 b(this)g(in)m(ternal)h(slalib)f(subset.)73
-b(Ho)m(w)m(ev)m(er,)46 b(the)41 b(\\-csla")i(option)f(can)f(still)h(b)s
-(e)f(used)f(to)i(force)227 2878 y(linking)29 b(with)f(an)g(external)h
-(full)f(C)g(SLALIB)g(library)-8 b(.)40 b(A)29 b(new)f(option)g
-(\\-fsla")i(has)e(b)s(een)g(in)m(tro)s(duced)227 2991
-y(whic)m(h)i(forces)h(linking)g(with)f(the)g(external)i(full)e(F)-8
-b(ortran)31 b(SLALIB)f(library)-8 b(.)0 3288 y Fw(G.23)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.7)0 3512 y
-FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f(signi\014can)m
-(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g(AST)g(library)g
-(b)s(et)m(w)m(een)0 3625 y(v)m(ersions)31 b(V3.6)g(and)f(V3.7:)111
-3890 y(1.)46 b(Supp)s(ort)37 b(for)i(time)g(co)s(ordinate)h(systems)f
-(has)f(b)s(een)h(in)m(tro)s(duced)f(through)m(t)h(the)g(addition)g(of)g
-(t)m(w)m(o)227 4003 y(new)31 b(classes,)h(TimeF)-8 b(rame)33
-b(and)d(TimeMap.)43 b(The)31 b(TimeF)-8 b(rame)32 b(is)f(a)h
-(1-dimensional)g(F)-8 b(rame)32 b(whic)m(h)227 4116 y(can)i(b)s(e)f
-(used)g(to)h(describ)s(e)f(momen)m(ts)h(in)f(time)i(\(either)f
-(absolute)g(or)g(relativ)m(e\))i(in)d(v)-5 b(arious)33
-b(systems)227 4229 y(\(MJD,)h(Julian)e(Ep)s(o)s(c)m(h,)g
-Fx(etc.)p FG(\))47 b(and)31 b(referred)h(to)h(v)-5 b(arious)32
-b(time)h(scales)h(\(T)-8 b(AI,)33 b(UTC,)f(UT1,)h(GMST,)227
-4342 y Fx(etc)5 b FG(\).)41 b(The)29 b(TimeMap)h(is)g(a)h(Mapping)e
-(whic)m(h)h(can)g(transform)f(time)i(v)-5 b(alues)30
-b(b)s(et)m(w)m(een)g(these)g(v)-5 b(arious)227 4455 y(systems)23
-b(and)f(time)h(scales.)40 b(Note,)25 b(FitsChans)e(whic)m(h)f(ha)m(v)m
-(e)i(a)f(foreign)g(enco)s(ding)g(\()p Fx(i.e.)38 b FG(an)m(y)23
-b(enco)s(ding)227 4568 y(other)31 b(than)f(NA)-8 b(TIVE\))31
-b(are)g(not)f(able)h(to)g(read)g(or)f(write)h(these)f(new)g(classes.)0
-4865 y Fw(G.24)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V4.0)0
-5088 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 5201 y(v)m(ersions)31
-b(V3.7)g(and)f(V4.0:)111 5467 y(1.)46 b(Exp)s(erimen)m(tal)41
-b(supp)s(ort)d(for)i(reading)g(IV)m(O)m(A)h(Space-Time-Co)s(ordinates)g
-(\(STC-X\))f(descriptions)227 5580 y(using)28 b(the)f(XmlChan)g(class)i
-(has)e(b)s(een)h(added.)39 b(Supp)s(ort)25 b(is)j(included)f(for)h(a)g
-(subset)f(of)h(V1.20)h(of)f(the)227 5693 y(draft)i(STC)f(sp)s
-(eci\014cation.)p eop end
-%%Page: 553 563
-TeXDict begin 553 562 bop 0 52 a Fz(G.25)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V4.1)2249 b FG(553)111 351
-y(2.)46 b(A)39 b(new)g(set)h(of)f(metho)s(ds)f(\(AST)p
-Fy(_)p FG(REBIN<X>/astRebin<X>\))j(has)e(b)s(een)f(added)g(to)i(the)g
-(Mapping)227 464 y(class.)e(These)20 b(are)h(\015ux-conserving)f
-(alternativ)m(es)j(to)e(the)f(existing)h(AST)p Fy(_)p
-FG(RESAMPLE<X>/astResample<X>)227 577 y(metho)s(ds.)0
-870 y Fw(G.25)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V4.1)0
-1091 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 1203 y(v)m(ersions)31
-b(V4.0)g(and)f(V4.1:)111 1464 y(1.)46 b(A)23 b(new)g(con)m(trol)h
-(\015ag)g(has)f(b)s(een)f(added)g(to)i(the)f(AST)p Fy(_)p
-FG(RESAMPLE<X>/astResample<X>)h(functions)227 1577 y(whic)m(h)30
-b(pro)s(duces)f(appro)m(ximate)j(\015ux)d(conserv)-5
-b(ation.)111 1764 y(2.)46 b(New)22 b(constan)m(ts)g(AST)p
-Fy(__)p FG(SOMB)f(and)f(AST)p Fy(__)p FG(SOMBCOS)f(ha)m(v)m(e)k(b)s
-(een)e(added)f(to)j(AST)p Fy(_)p FG(P)-8 b(AR.)21 b(These)227
-1877 y(sp)s(ecify)j(k)m(ernels)h(for)g(AST)p Fy(_)p FG(RESAMPLE)e(and)h
-(AST)p Fy(_)p FG(REBIN)f(based)h(on)h(the)g(\\Som)m(brero")g(function)
-227 1990 y(\()31 b(2)21 b Fu(\003)f Fp(J)9 b FG(1\()p
-Fp(x)p FG(\))p Fp(=x)32 b FG(where)e Fp(J)9 b FG(1\()p
-Fp(x)p FG(\))32 b(is)e(the)h(\014rst)e(order)h(Bessel)i(function)e(of)g
-(the)h(\014rst)e(kind\).)111 2177 y(3.)46 b(The)f(SkyF)-8
-b(rame)45 b(class)g(no)m(w)g(supp)s(orts)e(a)i(System)g(v)-5
-b(alue)45 b(of)g(AZEL)f(corresp)s(onding)g(to)h(horizon)227
-2290 y(\(azim)m(uth/elev)-5 b(ation\))34 b(co)s(ordinates.)111
-2477 y(4.)46 b(The)31 b(FitsChan)h(class)g(allo)m(ws)h(the)e
-(non-standard)g(strings)g(\\AZ{")h(and)f(\\EL{")i(to)f(b)s(e)f(used)f
-(as)i(axis)227 2590 y(t)m(yp)s(es)f(in)f(FITS-W)m(CS)g(CTYPE)f(k)m(eyw)
-m(ord)i(v)-5 b(alues.)111 2777 y(5.)46 b(The)28 b(F)-8
-b(rame)28 b(class)h(no)m(w)f(has)f(attributes)h(ObsLon)f(and)g(ObsLat)h
-(to)g(sp)s(ecify)f(the)h(geo)s(detic)i(longitude)227
-2890 y(and)g(latitude)h(of)g(the)g(observ)m(er.)111 3077
-y(6.)46 b(The)41 b(Clo)s(c)m(kLon)g(and)g(Clo)s(c)m(kLat)h(attributes)f
-(ha)m(v)m(e)i(b)s(een)d(remo)m(v)m(ed)i(from)e(the)h(TimeF)-8
-b(rame)42 b(class.)227 3190 y(Lik)m(ewise,)49 b(the)44
-b(GeoLon)h(and)e(GeoLat)j(attributes)e(ha)m(v)m(e)h(b)s(een)f(remo)m(v)
-m(ed)h(from)e(the)h(Sp)s(ecF)-8 b(rame)227 3303 y(class.)45
-b(Both)32 b(classes)g(no)m(w)f(use)g(the)h(ObsLon)e(and)h(ObsLat)g
-(attributes)h(of)f(the)h(paren)m(t)f(F)-8 b(rame)33 b(class)227
-3416 y(instead.)81 b(Ho)m(w)m(ev)m(er,)50 b(the)43 b(old)h(attribute)h
-(names)e(can)h(b)s(e)f(used)g(as)h(synon)m(yms)f(for)h(ObsLat)f(and)227
-3529 y(ObsLon.)e(Also,)32 b(dumps)d(created)j(using)f(the)g(old)g(sc)m
-(heme)h(can)f(b)s(e)f(read)h(succesfully)g(b)m(y)g(AST)f(V4.1)227
-3642 y(and)g(con)m(v)m(erted)i(to)f(the)g(new)e(form.)111
-3829 y(7.)46 b(A)d(new)e(routine)h(AST)p Fy(_)p FG(MAPSPLIT)f(has)g(b)s
-(een)h(added)f(to)i(the)g(Mapping)f(class.)77 b(This)41
-b(splits)h(a)227 3942 y(Mapping)30 b(in)m(to)h(t)m(w)m(o)g(comp)s(onen)
-m(t)g(Mappings)e(whic)m(h,)h(when)f(com)m(bined)i(in)e(parallel,)j(are)
-e(equiv)-5 b(alen)m(t)227 4055 y(to)31 b(the)g(original)g(Mapping.)111
-4242 y(8.)46 b(The)24 b(default)g(v)-5 b(alue)25 b(for)f(the)g
-(SkyRefIs)g(attribute)h(has)f(b)s(een)f(c)m(hanged)i(from)f(\\Origin")h
-(to)g(\\Ignored".)227 4355 y(This)41 b(means)h(that)h(if)e(y)m(ou)i(w)m
-(an)m(t)f(to)h(use)f(a)g(SkyF)-8 b(rame)42 b(to)h(represen)m(t)f
-(o\013sets)g(from)g(some)g(origin)227 4467 y(p)s(osition,)31
-b(y)m(ou)f(m)m(ust)g(no)m(w)g(set)h(the)f(SkyRefIs)f(attribute)i
-(explicitly)h(to)f(either)f(\\P)m(ole")j(or)d(\\Origin",)227
-4580 y(in)g(addition)h(to)g(assigning)g(the)f(required)g(origin)h(p)s
-(osition)f(to)h(the)g(SkyRef)f(attribute.)0 4873 y Fw(G.26)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V4.2)0 5094 y
-FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f(signi\014can)m
-(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g(AST)g(library)g
-(b)s(et)m(w)m(een)0 5207 y(v)m(ersions)31 b(V4.1)g(and)f(V4.2:)111
-5467 y(1.)46 b(The)41 b(SideBand)f(attribute)h(of)g(the)g(DSBSp)s(ecF)
--8 b(rame)42 b(class)f(can)g(no)m(w)g(tak)m(e)h(the)f(option)h(\\LO")f
-(in)227 5580 y(addition)c(to)g(\\USB")g(and)e(\\LSB".)i(The)f(new)g
-(option)h(causes)f(the)h(DSBSp)s(ecF)-8 b(rame)36 b(to)h(represen)m(t)
-227 5693 y(the)31 b(o\013set)g(from)f(the)h(lo)s(cal)g(oscillator)i
-(frequency)-8 b(,)31 b(rather)f(than)g(either)h(of)f(the)h(t)m(w)m(o)h
-(sidebands.)p eop end
-%%Page: 554 564
-TeXDict begin 554 563 bop 0 52 a FG(554)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FG(2.)46
-b(The)37 b(FitsChan)g(class)h(has)g(b)s(een)e(c)m(hanged)i(so)g(that)g
-(it)g(writes)f(out)h(a)g(VELOSYS)e(k)m(eyw)m(ord)h(when)227
-464 y(creating)k(a)e(FITS-W)m(CS)g(enco)s(ding)g(\(VELOSYS)f(indicates)
-h(the)h(top)s(o)s(cen)m(tric)g(apparen)m(t)f(v)m(elo)s(cit)m(y)227
-577 y(of)f(the)g(standard)f(of)h(rest\).)64 b(FitsChan)38
-b(also)g(strips)g(out)g(VELOSYS)e(k)m(eyw)m(ords)i(when)f(reading)h(a)
-227 690 y(F)-8 b(rameSet)32 b(from)e(a)g(FITS-W)m(CS)g(enco)s(ding.)111
-876 y(3.)46 b(The)31 b(FitsChan)h(class)g(has)g(a)f(new)h(metho)s(d)f
-(called)h(AST)p Fy(_)p FG(RET)-8 b(AINFITS)30 b(that)j(indicates)f
-(that)g(the)227 989 y(curren)m(t)j(card)h(in)f(the)g(FitsChan)g(should)
-g(not)g(b)s(e)g(stripp)s(ed)f(out)h(of)h(the)f(FitsChan)h(when)e(an)h
-(AST)227 1101 y(Ob)5 b(ject)26 b(is)g(read)g(from)g(the)g(FitsChan.)39
-b(Unless)26 b(this)g(metho)s(d)f(is)h(used,)g(all)h(cards)f(that)g(w)m
-(ere)h(in)m(v)m(olv)m(ed)227 1214 y(in)c(the)g(creation)i(of)e(the)h
-(AST)e(Ob)5 b(ject)23 b(will)h(b)s(e)e(stripp)s(ed)g(from)h(the)g
-(FitsChan)g(afte)h(a)g(read)f(op)s(eration.)111 1400
-y(4.)46 b(A)30 b(problem)e(with)h(unaligned)g(memory)g(access)i(that)f
-(could)f(cause)h(bus)e(errors)h(on)g(Solaris)g(has)g(b)s(een)227
-1513 y(\014xed.)111 1698 y(5.)46 b(A)32 b(new)f(read-only)g(attribute)i
-(called)f(Ob)5 b(jSize)31 b(has)g(b)s(een)g(added)g(to)h(the)f(base)h
-(Ob)5 b(ject)31 b(Class.)44 b(This)227 1811 y(giv)m(es)31
-b(the)e(n)m(um)m(b)s(er)f(of)h(b)m(ytes)g(of)h(memory)f(o)s(ccupied)f
-(b)m(y)h(the)h(Ob)5 b(ject.)40 b(Note,)31 b(this)e(is)g(the)g(size)h
-(of)f(the)227 1924 y(in)m(ternal)e(in-memory)g(represen)m(tation)g(of)g
-(the)f(Ob)5 b(ject,)28 b(not)f(the)f(size)i(of)e(the)h(textual)g
-(represen)m(tation)227 2037 y(pro)s(duced)i(b)m(y)h(writing)h(the)f(Ob)
-5 b(ject)31 b(out)f(through)g(a)h(Channel.)111 2223 y(6.)46
-b(A)28 b(new)e(function)h(AST)p Fy(_)p FG(TUNE)f(has)h(b)s(een)f(added)
-h(whic)m(h)g(can)g(b)s(e)g(used)f(to)i(get)g(and)f(set)h(global)g(AST)
-227 2336 y(tuning)i(parameters.)41 b(A)m(t)31 b(the)g(momen)m(t)g
-(there)f(are)h(only)f(t)m(w)m(o)i(suc)m(h)e(parameter,)h(b)s(oth)f(of)g
-(whic)m(h)g(are)227 2449 y(concerned)h(with)f(memory)g(managemen)m(t)i
-(within)e(AST.)111 2634 y(7.)46 b(A)e(new)f(metho)s(d)h(called)h(AST)p
-Fy(_)p FG(TRANGRID)e(has)g(b)s(een)g(added)g(to)i(the)f(Mapping)g
-(class.)81 b(This)227 2747 y(metho)s(d)40 b(creates)i(a)f(regular)g
-(grid)f(of)h(p)s(oin)m(ts)f(co)m(v)m(ering)j(a)e(rectangular)g(region)h
-(within)e(the)g(input)227 2860 y(space)c(of)f(a)h(Mapping,)h(and)d
-(then)h(transforms)f(this)i(set)f(of)h(p)s(oin)m(ts)f(in)m(to)h(the)f
-(output)g(space)h(of)f(the)227 2973 y(Mapping,)25 b(using)e(a)h
-(piecewise-con)m(tin)m(uous)h(linear)f(appro)m(ximation)g(to)g(the)g
-(Mapping)f(if)g(appropriate)227 3086 y(in)30 b(order)g(to)h(ac)m(hiv)m
-(e)i(higher)d(sp)s(eed.)111 3272 y(8.)46 b(A)34 b(new)f(sub)s(class)g
-(of)h(Mapping)f(has)h(b)s(een)f(added)g(called)i(Switc)m(hMap.)51
-b(A)33 b(Switc)m(hMap)i(represen)m(ts)227 3384 y(sev)m(eral)g
-(alternate)g(Mappings,)g(eac)m(h)g(of)e(whic)m(h)h(is)f(used)g(to)h
-(transforms)f(input)g(p)s(ositions)g(within)g(a)227 3497
-y(di\013eren)m(t)e(region)g(of)g(the)f(input)g(co)s(ordinate)h(space.)
-111 3683 y(9.)46 b(A)28 b(new)e(sub)s(class)h(of)g(Mapping)g(has)g(b)s
-(een)f(added)h(called)h(SelectorMap.)41 b(A)28 b(SelectorMap)g(tests)g
-(eac)m(h)227 3796 y(input)33 b(p)s(osition)h(to)h(see)f(if)g(it)g
-(falls)h(within)e(one)h(of)g(sev)m(eral)h(Regions.)52
-b(If)34 b(it)g(do)s(es,)h(the)f(index)f(of)h(the)227
-3909 y(Region)e(con)m(taining)f(the)g(input)e(p)s(osition)i(is)f
-(returned)g(as)g(the)h(Mapping)f(output.)66 4094 y(10.)46
-b(The)36 b(b)s(eha)m(viour)f(of)h(the)g(AST)p Fy(_)p
-FG(CONVER)-8 b(T)35 b(metho)s(d)g(when)g(trying)h(to)g(align)h(a)f
-(CmpF)-8 b(rame)36 b(with)227 4207 y(another)g(F)-8 b(rame)36
-b(has)f(b)s(een)g(mo)s(di\014ed.)54 b(If)35 b(no)g(con)m(v)m(ersion)i
-(b)s(et)m(w)m(een)f(p)s(ositions)f(in)g(the)h(F)-8 b(rame)36
-b(and)227 4320 y(CmpF)-8 b(rame)27 b(can)g(b)s(e)f(found,)g(an)g
-(attempt)i(is)f(no)m(w)f(made)h(to)g(\014nd)f(a)h(con)m(v)m(ersion)g(b)
-s(et)m(w)m(een)h(the)f(F)-8 b(rame)227 4433 y(and)23
-b(one)g(of)g(t)m(w)m(o)i(comp)s(onen)m(t)e(F)-8 b(rames)24
-b(con)m(tained)h(within)d(the)h(CmpF)-8 b(rame.)39 b(Th)m(us)22
-b(is)h(should)f(no)m(w)h(b)s(e)227 4546 y(p)s(ossible)30
-b(to)g(align)h(a)f(SkyF)-8 b(rame)30 b(with)f(a)i(CmpF)-8
-b(rame)29 b(con)m(taining)j(a)e(SkyF)-8 b(rame)30 b(and)f(a)h(Sp)s(ecF)
--8 b(rame)227 4659 y(\(for)31 b(instance\).)41 b(The)30
-b(returned)f(Mapping)h(pro)s(duces)f(bad)h(v)-5 b(alues)30
-b(for)g(the)h(extra)g(axes)f(\(i.e.)42 b(for)30 b(the)227
-4772 y(Sp)s(ecF)-8 b(rame)31 b(axis)g(in)f(the)g(ab)s(o)m(v)m(e)i
-(example\).)66 4957 y(11.)46 b(The)25 b(\\ast)p Fy(_)p
-FG(link)p Fy(_)p FG(adam")i(and)e(\\ast)p Fy(_)p FG(link")h(scripts)f
-(no)m(w)h(ignore)g(the)f Fy(-fsla)f FG(and)h Fy(-csla)f
-FG(options,)j(and)227 5070 y(alw)m(a)m(ys)32 b(link)e(against)i(the)f
-(minimal)f(cut-do)m(wn)h(v)m(ersion)g(of)f(SLALIB)g(distributed)f(as)i
-(part)f(of)h(AST.)0 5361 y Fw(G.27)112 b(Changes)39 b(In)m(tro)s(duced)
-f(in)f(V4.3)0 5580 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i
-(most)f(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g
-(the)g(AST)g(library)g(b)s(et)m(w)m(een)0 5693 y(v)m(ersions)31
-b(V4.2)g(and)f(V4.3:)p eop end
-%%Page: 555 565
-TeXDict begin 555 564 bop 0 52 a Fz(G.28)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V4.4)2249 b FG(555)111 351
-y(1.)46 b(The)35 b(AST)p Fy(_)p FG(GETFITSS)d(function)i(no)m(w)h
-(strips)f(trailing)i(white)f(space)g(from)g(the)g(returned)e(string,)
-227 464 y(if)e(the)f(original)i(string)e(con)m(tains)i(8)e(or)h(few)m
-(er)f(c)m(haracters)111 637 y(2.)46 b(The)d(Sp)s(ecF)-8
-b(rame)44 b(class)g(has)f(a)h(new)f(attribute)h(called)g(SourceSys)f
-(that)h(sp)s(eci\014ed)f(whether)f(the)227 750 y(SourceV)-8
-b(el)38 b(attribute)g(\(whic)m(h)f(sp)s(eci\014es)f(the)h(rest)h(frame)
-e(of)h(the)h(source\))f(should)f(b)s(e)g(accessed)i(as)227
-863 y(an)d(apparen)m(t)h(radial)f(v)m(elo)s(cit)m(y)j(or)d(a)h
-(redshift.)54 b(Note,)38 b(an)m(y)e(existing)g(soft)m(w)m(are)g(that)g
-(assumes)f(that)227 976 y(SourceV)-8 b(el)34 b(alw)m(a)m(ys)g(represen)
-m(ts)e(a)h(v)m(elo)s(cit)m(y)i(in)d(km/s)h(should)e(b)s(e)h(c)m(hanged)
-i(to)f(allo)m(w)h(for)e(the)h(p)s(ossi-)227 1089 y(bilit)m(y)f(of)e
-(SourceV)-8 b(el)32 b(represen)m(ting)e(a)h(redshift)f(v)-5
-b(alue.)0 1361 y Fw(G.28)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f
-(V4.4)0 1568 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 1680 y(v)m(ersions)31
-b(V4.3)g(and)f(V4.4:)111 1885 y(1.)46 b(The)28 b(AST)p
-Fy(_)p FG(FINDFRAME)g(function)f(can)i(no)m(w)e(b)s(e)h(used)f(to)h
-(searc)m(h)h(a)f(CmpF)-8 b(rame)27 b(for)h(an)g(instance)227
-1998 y(of)i(a)h(more)f(sp)s(ecialised)h(class)g(of)f(F)-8
-b(rame)31 b(\(SkyF)-8 b(rame,)31 b(TimeF)-8 b(rame,)31
-b(Sp)s(ecF)-8 b(rame,)31 b(DSBSp)s(ecF)-8 b(rame)227
-2110 y(or)36 b(FluxF)-8 b(rame\).)58 b(That)36 b(is,)h(if)f(an)f
-(instance)i(of)f(one)g(of)g(these)g(classes)h(is)e(used)g(as)h(the)g
-(\\template")227 2223 y(when)d(calling)h(AST)p Fy(_)p
-FG(FINDFRAME,)g(and)f(the)h(\\target")h(b)s(eing)e(searc)m(hed)h(is)g
-(a)f(CmpF)-8 b(rame)33 b(\(or)h(a)227 2336 y(F)-8 b(rameSet)27
-b(in)e(whic)m(h)f(the)i(curren)m(t)f(F)-8 b(rame)26 b(is)f(a)h(CmpF)-8
-b(rame\),)26 b(then)f(the)h(comp)s(onen)m(t)f(F)-8 b(rames)26
-b(within)227 2449 y(the)37 b(CmpF)-8 b(rame)36 b(will)g(b)s(e)g(searc)m
-(hed)h(for)f(an)g(instance)h(of)f(the)h(supplied)e(template)i(F)-8
-b(rame,)39 b(and,)e(if)227 2562 y(found,)44 b(a)f(suitable)g(Mapping)f
-(\(whic)m(h)g(will)h(include)f(a)h(P)m(ermMap)f(to)h(select)h(the)e
-(required)g(axes)227 2675 y(from)29 b(the)g(CmpF)-8 b(rame\))28
-b(will)i(b)s(e)e(returned)f(b)m(y)i(AST)p Fy(_)p FG(FINDFRAME.)g(Note,)
-i(for)e(this)f(to)i(w)m(ork,)f(the)227 2788 y(MaxAxes)h(and)e(MinAxes)h
-(attributes)g(of)f(the)h(template)h(F)-8 b(rame)29 b(m)m(ust)g(b)s(e)e
-(set)i(so)g(that)g(they)g(co)m(v)m(er)h(a)227 2901 y(range)h(that)g
-(includes)f(the)h(n)m(um)m(b)s(er)e(of)h(axes)h(in)f(the)h(target)h
-(CmpF)-8 b(rame.)111 3074 y(2.)46 b(The)23 b(SkyF)-8
-b(rame,)26 b(Sp)s(ecF)-8 b(rame,)26 b(DSBSp)s(ecF)-8
-b(rame,)25 b(TimeF)-8 b(rame)25 b(and)e(FluxF)-8 b(rame)25
-b(classes)f(no)m(w)g(allo)m(w)227 3187 y(the)34 b(MaxAxes)h(and)e
-(MinAxes)g(attributes)i(to)f(b)s(e)f(set)h(freely)g(to)g(an)m(y)g(v)-5
-b(alue.)50 b(In)33 b(previous)g(v)m(ersions)227 3300
-y(of)f(AST,)g(an)m(y)g(attempt)h(to)g(c)m(hange)g(the)f(v)-5
-b(alue)32 b(of)g(MinAxes)h(or)e(MaxAxes)i(w)m(as)g(ignored,)f
-(resulting)227 3413 y(in)e(them)h(alw)m(a)m(ys)h(taking)f(the)f
-(default)h(v)-5 b(alues.)111 3586 y(3.)46 b(The)38 b(DSBSp)s(ecF)-8
-b(rame)40 b(class)f(has)f(a)h(new)g(attribute)g(called)h(AlignSB)f
-(that)g(sp)s(eci\014es)f(whether)g(or)227 3699 y(not)32
-b(to)g(tak)m(e)i(accoun)m(t)f(of)f(the)f(SideBand)g(attributes)i(when)d
-(aligning)j(t)m(w)m(o)g(DSBSp)s(ecF)-8 b(rames)32 b(using)227
-3811 y(AST)p Fy(_)p FG(CONVER)-8 b(T.)111 3985 y(4.)46
-b(The)28 b(F)-8 b(rame)30 b(class)g(has)e(a)h(new)f(attribute)i(called)
-g(Dut1)f(that)h(can)f(b)s(e)f(used)g(to)h(store)g(a)h(v)-5
-b(alue)29 b(for)f(the)227 4097 y(di\013erence)j(b)s(et)m(w)m(een)g(the)
-g(UT1)f(and)g(UTC)g(timescales)i(at)f(the)g(ep)s(o)s(c)m(h)f(referred)g
-(to)h(b)m(y)f(the)g(F)-8 b(rame.)111 4271 y(5.)46 b(The)32
-b(n)m(um)m(b)s(er)f(of)h(digits)h(used)e(to)i(format)f(the)h(F)-8
-b(rame)33 b(attributes)f(ObsLat)g(and)f(ObsLon)g(has)h(b)s(een)227
-4383 y(increased.)111 4557 y(6.)46 b(The)24 b(use)h(of)g(the)f(SkyF)-8
-b(rame)25 b(attribute)h(AlignO\013set)f(has)g(b)s(een)f(c)m(hanged.)39
-b(This)24 b(attribute)h(is)g(used)f(to)227 4669 y(con)m(trol)36
-b(ho)m(w)e(t)m(w)m(o)h(SkyF)-8 b(rames)35 b(are)f(aligned)h(b)m(y)f
-(AST)p Fy(_)p FG(CONVER)-8 b(T.)33 b(If)h(the)g(template)h(and)f
-(target)227 4782 y(SkyF)-8 b(rames)41 b(b)s(oth)e(ha)m(v)m(e)j(a)f
-(non-zero)f(v)-5 b(alue)41 b(for)f(AlignO\013set,)k(then)c(alignmen)m
-(t)i(o)s(ccurs)e(b)s(et)m(w)m(een)227 4895 y(the)f(o\013set)i(co)s
-(ordinate)e(systems)g(\(that)h(is,)i(a)d(UnitMap)h(will)f(alw)m(a)m(ys)
-i(b)s(e)d(used)g(to)i(align)g(the)f(t)m(w)m(o)227 5008
-y(SkyF)-8 b(rames\).)111 5181 y(7.)46 b(The)29 b(Plot)h(class)g(has)f
-(a)h(new)f(attribute)h(called)g(F)-8 b(orceExterior)32
-b(that)e(can)f(b)s(e)g(used)g(to)h(force)f(exterior)227
-5294 y(\(rather)45 b(than)f(in)m(terior\))i(tic)m(k)g(marks)e(to)i(b)s
-(e)e(pro)s(duced.)81 b(By)45 b(default,)k(exterior)c(tic)m(ks)h(are)f
-(only)227 5407 y(pro)s(duced)29 b(if)h(this)h(w)m(ould)f(result)g(in)g
-(more)h(than)f(3)g(tic)m(k)i(marks)e(b)s(eing)g(dra)m(wn.)111
-5580 y(8.)46 b(The)40 b(TimeF)-8 b(rame)40 b(class)h(no)m(w)f(supp)s
-(orts)d(con)m(v)m(ersion)42 b(b)s(et)m(w)m(een)e(angle)h(based)e
-(timescales)j(suc)m(h)d(as)227 5693 y(UT1)31 b(and)f(atomic)i(based)e
-(timescales)i(suc)m(h)e(as)h(UTC.)p eop end
-%%Page: 556 566
-TeXDict begin 556 565 bop 0 52 a FG(556)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)0 351 y Fw(G.29)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V4.5)0 570 y FG(The)31
-b(follo)m(wing)h(describ)s(es)f(the)g(most)h(signi\014can)m(t)g(c)m
-(hanges)g(that)g(o)s(ccurred)e(in)h(the)h(AST)e(library)h(b)s(et)m(w)m
-(een)0 683 y(v)m(ersions)g(V4.4)g(and)f(V4.5:)111 933
-y(1.)46 b(All)28 b(FITS-CLASS)d(headers)i(are)g(no)m(w)g(created)h
-(with)e(a)i(frequency)e(axis.)40 b(If)27 b(the)g(F)-8
-b(rameSet)28 b(supplied)227 1046 y(to)39 b(AST)p Fy(_)p
-FG(WRITE)d(con)m(tains)k(a)e(v)m(elo)s(cit)m(y)i(axis)f(\(or)f(an)m(y)g
-(other)g(form)g(of)g(sp)s(ectral)g(axis\))g(it)h(will)f(b)s(e)227
-1159 y(con)m(v)m(erted)h(to)f(an)f(equiv)-5 b(alen)m(t)39
-b(frequency)e(axis)h(b)s(efore)e(b)s(eing)h(used)g(to)h(create)h(the)e
-(FITS-CLASS)227 1272 y(header.)111 1457 y(2.)46 b(The)32
-b(v)-5 b(alue)33 b(stored)f(in)g(the)h(FITS-CLASS)d(k)m(eyw)m(ord)j
-(\\VELO-LSR")f(has)g(b)s(een)g(c)m(hanged)g(from)g(the)227
-1570 y(v)m(elo)s(cit)m(y)h(of)e(the)f(source)h(to)g(the)f(v)m(elo)s
-(cit)m(y)j(of)e(the)f(reference)h(c)m(hannel.)111 1755
-y(3.)46 b(Addition)37 b(of)g(a)g(new)f(metho)s(d)g(call)i(AST)p
-Fy(_)p FG(PUR)m(GEW)m(CS)e(to)i(the)e(FitsChan)h(class.)60
-b(This)36 b(metho)s(d)227 1867 y(remo)m(v)m(es)c(all)f(W)m(CS-related)h
-(header)e(cards)g(from)g(a)h(FitsChan.)111 2052 y(4.)46
-b(The)37 b(Plot)h(class)h(has)e(a)h(new)e(attribute)j(called)f(GrfCon)m
-(text)g(that)g(can)g(b)s(e)f(used)f(to)j(comminicate)227
-2165 y(con)m(text)27 b(information)e(b)s(et)m(w)m(een)h(an)f
-(application)h(and)f(an)m(y)g(graphics)g(functions)g(registered)h(with)
-e(the)227 2278 y(Plot)32 b(class)f(via)g(the)f(AST)p
-Fy(_)p FG(GRFSET)f(routine.)111 2463 y(5.)46 b(F)-8 b(unctions)33
-b(registered)g(with)f(the)g(Plot)i(class)e(using)g(AST)p
-Fy(_)p FG(GRFSET)f(no)m(w)h(tak)m(e)i(a)f(new)f(additional)227
-2576 y(in)m(teger)h(parameter,)e(\\grfcon".)44 b(The)31
-b(Plot)g(class)h(sets)g(this)e(parameter)i(to)g(the)f(v)-5
-b(alue)31 b(of)g(the)g(Plot's)227 2689 y(GrfCon)m(text)e(attribute)f(b)
-s(efore)f(calling)i(the)f(graphics)f(function.)40 b(NOTE,)27
-b(THIS)g(CHANGE)h(WILL)227 2801 y(REQUIRE)h(EXISTING)g(CODE)g(THA)-8
-b(T)30 b(USES)e(AST)p Fy(_)p FG(GRFSET)g(TO)h(BE)h(MODIFIED)g(TO)f(IN-)
-227 2914 y(CLUDE)i(THE)f(NEW)g(P)-8 b(ARAMETER.)111 3099
-y(6.)46 b(The)36 b(AST)p Fy(_)p FG(REBINSEQ)e(routines)h(no)m(w)h(ha)m
-(v)m(e)h(an)e(extra)i(parameter)f(that)g(is)g(used)f(to)i(record)e(the)
-227 3212 y(total)27 b(n)m(um)m(b)s(er)d(of)h(input)f(data)h(v)-5
-b(alues)26 b(added)e(in)m(to)i(the)f(output)f(arra)m(y)-8
-b(.)40 b(This)24 b(is)h(necessary)h(to)f(correct)227
-3325 y(a)31 b(\015a)m(w)g(in)f(the)h(calculation)i(of)d(output)g(v)-5
-b(ariances)32 b(based)e(on)g(the)h(spread)f(of)h(input)e(v)-5
-b(alues.)42 b(NOTE,)227 3438 y(THIS)24 b(CHANGE)g(WILL)g(REQUIRE)g
-(EXISTING)f(CODE)h(TO)g(BE)g(MODIFIED)h(TO)f(INCLUDE)227
-3551 y(THE)30 b(NEW)h(P)-8 b(ARAMETER)31 b(\(CALLED)f("NUSED"\).)111
-3735 y(7.)46 b(Supp)s(ort)29 b(has)h(b)s(een)f(added)h(for)g(the)h
-(FITS-W)m(CS)f(\\HPX")h(\(HEALPix\))g(pro)5 b(jection.)111
-3920 y(8.)46 b(A)23 b(new)e(\015ag)i(\\AST)p Fy(__)p
-FG(V)-10 b(AR)g(W)m(GT")23 b(can)f(b)s(e)g(supplied)f(to)i(AST)p
-Fy(_)p FG(REBINSEQ.)e(This)g(causes)i(the)f(input)227
-4033 y(data)31 b(v)-5 b(alues)31 b(to)g(b)s(e)f(w)m(eigh)m(ted)i(using)
-e(the)g(recipro)s(cals)h(of)g(the)f(input)g(v)-5 b(ariances)31
-b(\(if)g(supplied\).)111 4218 y(9.)46 b(The)20 b(F)-8
-b(rame)22 b(class)f(has)f(a)h(new)f(read-only)h(attribute)h(called)f
-(NormUnit)g(that)g(returns)f(the)g(normalised)227 4331
-y(v)-5 b(alue)29 b(of)e(the)h(Unit)g(attribute)h(for)f(an)f(axis.)41
-b(Here,)29 b(\\normalisation")g(means)f(cancelling)i(redundan)m(t)227
-4444 y(units,)f(etc.)41 b(So)29 b(for)f(instance,)i(a)g(Unit)f(v)-5
-b(alue)29 b(of)g(\\s*\(m/s\)")h(w)m(ould)f(result)g(in)f(a)h(NormUnit)g
-(v)-5 b(alue)29 b(of)227 4557 y(\\m".)66 4741 y(10.)46
-b(A)28 b(new)f(routine)g(AST)p Fy(_)p FG(SHO)m(WMESH)g(has)g(b)s(een)g
-(added)f(to)j(the)e(Region)i(class.)40 b(It)28 b(displa)m(ys)f(a)h
-(mesh)227 4854 y(of)g(p)s(oin)m(ts)f(co)m(v)m(ering)i(the)f(surface)f
-(of)h(a)g(Region)g(b)m(y)f(writing)g(out)h(a)g(table)g(of)g(axis)f(v)-5
-b(alues)28 b(to)g(standard)227 4967 y(output.)66 5152
-y(11.)46 b(The)26 b(Plot)g(class)h(no)m(w)e(honours)g(the)h(v)-5
-b(alue)26 b(of)g(the)g(Lab)s(elUp)f(attribute)i(ev)m(en)f(if)g(n)m
-(umerical)g(lab)s(els)g(are)227 5265 y(placed)33 b(around)e(the)h(edge)
-h(of)g(the)f(Plot.)47 b(Previously)32 b(Lab)s(elUp)g(w)m(as)g(only)h
-(used)e(if)h(the)h(lab)s(els)f(w)m(ere)227 5378 y(dra)m(wn)f(within)g
-(the)h(in)m(terior)g(of)g(the)f(plot.)45 b(The)31 b(Lab)s(elUp)g
-(attribute)h(con)m(trols)h(whether)e(n)m(umerical)227
-5491 y(lab)s(els)g(are)g(dra)m(wn)e(horizon)m(tally)j(or)f(parallel)g
-(to)g(the)g(axis)g(they)f(describ)s(e.)66 5675 y(12.)46
-b(A)31 b(bug)f(has)g(b)s(een)f(\014xed)h(that)h(could)f(segmen)m
-(tation)j(violations)f(when)d(setting)j(attribute)f(v)-5
-b(alues.)p eop end
-%%Page: 557 567
-TeXDict begin 557 566 bop 0 52 a Fz(G.30)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V4.6)2249 b FG(557)0 351 y
-Fw(G.30)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V4.6)0
-566 y FG(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h(signi\014can)
-m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g
-(AST)g(library)0 679 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V4.5)g(and)f
-(V4.6:)111 917 y(1.)46 b(The)33 b(TimeF)-8 b(rame)35
-b(class)g(no)m(w)e(supp)s(ort)f(Lo)s(cal)j(Time)e(as)h(a)g(time)h
-(scale.)52 b(The)33 b(o\013set)h(from)g(UTC)f(to)227
-1030 y(Lo)s(cal)e(Time)g(is)f(sp)s(eci\014ed)g(b)m(y)g(a)h(new)f(TimeF)
--8 b(rame)31 b(attribute)g(called)h(L)-8 b(TO\013set.)111
-1211 y(2.)46 b(A)39 b(new)e(class)j(called)f(Plot3D)h(has)e(b)s(een)g
-(added.)64 b(The)37 b(Plot3D)j(class)f(allo)m(ws)h(the)f(creation)g(of)
-g(3-)227 1324 y(dimensional)31 b(annotated)g(co)s(ordinate)g(grids.)111
-1506 y(3.)46 b(A)34 b(correction)h(for)f(diurnal)e(ab)s(erration)i(is)g
-(no)m(w)g(included)e(when)h(con)m(v)m(erting)j(b)s(et)m(w)m(een)e(AZEL)
-f(and)227 1618 y(other)39 b(celestial)i(co)s(ordinate)f(systems.)65
-b(The)38 b(correction)i(is)e(based)g(on)h(the)f(v)-5
-b(alue)39 b(of)g(the)g(ObsLat)227 1731 y(F)-8 b(rame)32
-b(attribute)f(\(the)g(geo)s(detic)h(latitude)f(of)g(the)f(observ)m
-(er\).)111 1913 y(4.)46 b(A)35 b(bug)g(has)g(b)s(een)f(\014xed)h(whic)m
-(h)f(caused)i(the)f(DUT1)h(attribute)f(to)h(b)s(e)f(ignored)g(b)m(y)g
-(the)g(SkyF)-8 b(rame)227 2026 y(class)31 b(when)f(\014nding)f(con)m(v)
-m(ersions)i(b)s(et)m(w)m(een)g(AZEL)f(and)g(other)g(celestial)j(co)s
-(ordinate)f(systems.)0 2310 y Fw(G.31)112 b(Changes)39
-b(In)m(tro)s(duced)f(in)f(V5.0)0 2525 y FG(The)26 b(follo)m(wing)i
-(describ)s(es)d(the)i(most)f(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f
-(o)s(ccurred)g(in)g(the)g(AST)g(library)g(b)s(et)m(w)m(een)0
-2638 y(v)m(ersions)31 b(V4.6)g(and)f(V5.0:)111 2876 y(1.)46
-b(The)23 b(AST)f(library)g(is)h(no)m(w)g(thread-safe)g(\(assuming)g
-(that)h(the)f(POSIX)f(pthreads)g(library)g(is)h(a)m(v)-5
-b(ailable)227 2988 y(when)29 b(AST)h(is)g(built\).)40
-b(Man)m(y)31 b(of)f(the)g(macros)h(de\014ned)e(in)g(the)i(ast.h)f
-(header)g(\014le)g(ha)m(v)m(e)h(c)m(hanged.)41 b(It)227
-3101 y(is)31 b(therefore)g(necessary)f(to)h(re-compile)h(all)f(source)g
-(co)s(de)f(that)h(includes)f(ast.h.)111 3283 y(2.)46
-b(New)31 b(metho)s(ds)f(astLo)s(c)m(k)i(and)e(astUnlo)s(c)m(k)j(allo)m
-(w)f(an)e(AST)g(Ob)5 b(ject)31 b(to)h(b)s(e)e(lo)s(c)m(k)m(ed)i(for)f
-(exclusiv)m(e)h(use)227 3396 y(b)m(y)f(a)f(thread.)111
-3577 y(3.)46 b(The)33 b(TimeF)-8 b(rame)35 b(class)g(no)m(w)e(supp)s
-(ort)f(Lo)s(cal)j(Time)e(as)h(a)g(time)h(scale.)52 b(The)33
-b(o\013set)h(from)g(UTC)f(to)227 3690 y(Lo)s(cal)e(Time)g(is)f(sp)s
-(eci\014ed)g(b)m(y)g(a)h(new)f(TimeF)-8 b(rame)31 b(attribute)g(called)
-h(L)-8 b(TO\013set.)111 3871 y(4.)46 b(The)23 b(Channel)g(class)h(has)f
-(a)h(new)e(attribute)i(called)h(Strict)f(whic)m(h)f(con)m(trols)h
-(whether)f(or)g(not)h(to)g(rep)s(ort)227 3984 y(an)31
-b(error)f(if)h(unexp)s(ected)g(data)g(items)g(are)h(found)d(within)i
-(an)f(AST)g(Ob)5 b(ject)31 b(description)g(read)g(from)227
-4097 y(an)39 b(external)h(data)f(source.)66 b(Note,)43
-b(the)c(default)g(b)s(eha)m(viour)f(is)h(no)m(w)g(not)g(to)g(rep)s(ort)
-f(suc)m(h)h(errors.)227 4210 y(This)32 b(di\013ers)g(from)g(previous)g
-(v)m(ersions)g(of)h(AST)f(whic)m(h)g(alw)m(a)m(ys)i(rep)s(orted)d(an)i
-(error)f(is)g(unexp)s(ected)227 4323 y(input)e(items)h(w)m(ere)f
-(encoun)m(tered.)0 4607 y Fw(G.32)112 b(Changes)39 b(In)m(tro)s(duced)f
-(in)f(V5.1)0 4822 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i
-(most)f(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g
-(the)g(AST)g(library)g(b)s(et)m(w)m(een)0 4935 y(v)m(ersions)31
-b(V5.0)g(and)f(V5.1:)111 5173 y(1.)46 b(The)33 b(Prism)f(class)h(has)g
-(b)s(een)f(mo)s(di\014ed)f(so)i(that)g(an)m(y)h(class)f(of)g(Region)h
-(can)f(b)s(e)f(used)g(to)h(de\014ne)f(the)227 5286 y(extrusion)e(axes.)
-42 b(Previously)-8 b(,)31 b(only)f(a)h(Bo)m(x)h(or)e(In)m(terv)-5
-b(al)31 b(could)g(b)s(e)e(used)h(for)g(this)g(purp)s(ose.)111
-5467 y(2.)46 b(Impro)m(v)m(emen)m(ts)21 b(ha)m(v)m(e)h(b)s(een)d(made)i
-(to)g(the)f(w)m(a)m(y)h(that)g(Prisms)f(are)g(simpli\014ed)g(when)f
-(AST)p Fy(_)p FG(SIMPLIFY)227 5580 y(is)37 b(called.)63
-b(The)36 b(c)m(hanges)j(mean)e(that)h(more)f(t)m(yp)s(es)g(of)g(Prism)g
-(will)g(no)m(w)g(simplify)g(in)m(to)h(a)g(simpler)227
-5693 y(class)31 b(of)g(Region.)p eop end
-%%Page: 558 568
-TeXDict begin 558 567 bop 0 52 a FG(558)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FG(3.)46
-b(The)36 b(P)m(oin)m(tList)h(class)g(has)f(a)h(new)e(metho)s(d,)i(AST)p
-Fy(_)p FG(POINTS,)d(that)j(copies)g(the)f(axis)h(v)-5
-b(alues)36 b(from)227 464 y(the)31 b(P)m(oin)m(tList)h(in)m(to)f(a)g
-(supplied)e(arra)m(y)-8 b(.)111 648 y(4.)46 b(The)38
-b(P)m(oin)m(tList)h(class)g(has)f(a)g(new)g(\(read-only\))h(attribute,)
-i(ListSize,)g(that)d(giv)m(es)h(the)g(n)m(um)m(b)s(er)d(of)227
-761 y(p)s(oin)m(ts)31 b(stored)f(in)g(the)h(P)m(oin)m(tList.)111
-945 y(5.)46 b(The)34 b(handling)g(of)g(w)m(arnings)g(within)f
-(di\013eren)m(t)i(classes)g(of)g(Channel)e(has)h(b)s(een)f
-(rationalised.)54 b(The)227 1058 y(XmlStrict)35 b(attribute)f(and)f
-(AST)p Fy(_)p FG(XML)-10 b(W)g(ARNINGS)34 b(function)g(ha)m(v)m(e)h(b)s
-(een)e(remo)m(v)m(ed.)52 b(The)33 b(same)227 1170 y(functionalit)m(y)41
-b(is)e(no)m(w)g(a)m(v)-5 b(ailable)41 b(via)f(the)f(existing)h(Strict)g
-(attribute)f(\(whic)m(h)h(has)e(had)h(its)g(remit)227
-1283 y(widened\),)d(a)g(new)f(attribute)g(called)i(Rep)s(ortLev)m(el,)g
-(and)e(the)g(new)g(AST)p Fy(_)p FG(W)-10 b(ARNINGS)35
-b(function.)227 1396 y(This)h(new)h(function)f(can)h(b)s(e)f(used)g(on)
-h(an)m(y)g(class)h(of)f(Channel.)59 b(T)-8 b(eh)37 b(FitsChan)f(class)i
-(retains)f(its)227 1509 y(long)f(standing)f(abilit)m(y)i(to)g(store)f
-(w)m(arnings)f(as)g(header)g(cards)h(within)e(the)i(FitsChan,)h(but)e
-(it)h(also)227 1622 y(no)m(w)h(stores)f(w)m(arnings)g(in)g(the)h(paren)
-m(t)f(Channel)g(structure,)h(from)f(where)g(they)g(can)h(b)s(e)f
-(retriev)m(ed)227 1735 y(using)30 b(the)h(AST)p Fy(_)p
-FG(W)-10 b(ARNINGS)30 b(function.)111 1919 y(6.)46 b(A)30
-b(new)g(function)g(called)h(AST)p Fy(_)p FG(INTER)m(CEPT)d(has)i(b)s
-(een)f(added)g(to)i(the)f(F)-8 b(rame)31 b(class.)42
-b(This)29 b(func-)227 2032 y(tion)i(\014nds)e(the)h(p)s(oin)m(t)h(of)f
-(in)m(tersection)i(b)s(eteeen)f(t)m(w)m(o)h(geo)s(desic)g(curv)m(es.)
-111 2215 y(7.)46 b(A)34 b(bug)f(in)h(the)g(t)m(yp)s(e-c)m(hec)m(king)i
-(of)e(Ob)5 b(jects)34 b(passed)f(as)h(argumen)m(ts)h(to)f(constructor)g
-(functions)g(has)227 2328 y(b)s(een)e(\014xed.)48 b(This)32
-b(bug)g(could)h(lead)g(to)g(applications)h(crashing)f(or)g(sho)m(wing)g
-(strange)g(b)s(eha)m(viour)f(if)227 2441 y(an)f(inappropriate)f(class)h
-(of)f(Ob)5 b(ject)31 b(w)m(as)g(supplied)e(as)h(an)h(argumen)m(t)f(to)i
-(a)e(constructor.)111 2625 y(8.)46 b(The)35 b(AST)p Fy(_)p
-FG(PICKAXES)d(function)j(will)g(no)m(w)g(return)e(a)j(Region,)h(if)d(p)
-s(ossible,)i(when)e(applied)h(to)g(a)227 2738 y(Region.)42
-b(If)30 b(this)g(is)h(not)f(p)s(ossible,)g(a)h(F)-8 b(rame)31
-b(will)g(b)s(e)f(returned)f(as)i(b)s(efore.)111 2922
-y(9.)46 b(The)34 b(default)h(gap)g(size)g(b)s(et)m(w)m(een)h(the)e(ISO)
-g(date/time)i(lab)s(els)f(used)f(b)m(y)g(the)h(Plot)h(class)f(when)f
-(dis-)227 3035 y(pla)m(ying)d(an)f(annotated)h(axis)f(describ)s(ed)f(b)
-m(y)h(a)g(TimeF)-8 b(rame)31 b(has)f(b)s(een)f(c)m(hanged.)42
-b(The)29 b(c)m(hanges)i(are)227 3148 y(mean)m(t)i(to)g(impro)m(v)m(e)g
-(the)g(lab)s(elling)g(of)f(calendar)h(time)g(axes)g(that)f(span)g(in)m
-(terv)-5 b(als)33 b(from)f(a)h(da)m(y)f(to)h(a)227 3260
-y(few)d(y)m(ears.)66 3444 y(10.)46 b(A)f(new)g(function)f(called)i(AST)
-p Fy(_)p FG(TESTFITS)c(has)j(b)s(een)f(added)g(to)i(the)f(FitsChan)f
-(class.)85 b(This)227 3557 y(function)30 b(tests)h(a)g(FitsChan)f(to)h
-(see)g(if)f(it)h(con)m(tains)g(a)g(de\014ned)e(v)-5 b(alue)31
-b(for)f(sp)s(eci\014ed)f(FITS)h(k)m(eyw)m(ord.)66 3741
-y(11.)46 b(The)26 b(AST)p Fy(__)p FG(UNDEF<X>)g(parameters)h(used)e(to)
-i(\015ag)g(unde\014ned)d(FITS)h(k)m(eyw)m(ord)i(v)-5
-b(alues)27 b(ha)m(v)m(e)g(b)s(een)227 3854 y(remo)m(v)m(ed.)42
-b(Use)31 b(the)f(new)g(AST)p Fy(_)p FG(TESTFITS)e(function)i(instead.)0
-4141 y Fw(G.33)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V5.2)0
-4359 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 4472 y(v)m(ersions)31
-b(V5.1)g(and)f(V5.2:)111 4719 y(1.)46 b(A)30 b(new)g(metho)s(d)f
-(called)i(AST)p Fy(_)p FG(SETFITSCM)d(has)h(b)s(een)h(added)f(to)i(the)
-f(FitsChan)g(class.)41 b(It)30 b(stores)227 4832 y(a)d(pure)e(commen)m
-(t)i(card)f(in)g(a)h(FitsChan)f(\(that)h(is,)g(a)f(card)g(with)g(no)g
-(k)m(eyw)m(ord)h(name)f(or)g(equals)h(sign\).)111 5016
-y(2.)46 b(A)29 b(new)f(attribute)h(called)h(ObsAlt)e(has)h(b)s(een)f
-(added)g(to)h(the)g(F)-8 b(rame)29 b(class.)41 b(It)29
-b(records)f(the)h(geo)s(detic)227 5128 y(altitude)35
-b(of)f(the)g(observ)m(er,)h(in)f(metres.)51 b(It)34 b(defaults)g(to)g
-(zero.)52 b(It)34 b(is)g(used)f(when)f(con)m(v)m(erting)k(times)227
-5241 y(to)31 b(or)e(from)h(the)f(TDB)h(timescale,)j(or)c(con)m(v)m
-(erting)j(sp)s(ectral)e(p)s(ositions)f(to)i(or)e(from)g(the)h(top)s(o)s
-(cen)m(tric)227 5354 y(rest)d(frame,)g(or)f(con)m(v)m(erting)i(sky)e(p)
-s(ositions)g(to)h(or)f(from)g(horizon)g(co)s(ordinates.)40
-b(The)26 b(FitsChan)g(class)227 5467 y(will)g(include)f(its)g(e\013ect)
-i(when)d(creating)i(a)g(set)g(of)f(v)-5 b(alues)25 b(for)g(the)h
-(OBSGEO-X/Y/Z)f(k)m(eyw)m(ords,)i(and)227 5580 y(will)j(also)h(assign)f
-(a)f(v)-5 b(alue)31 b(to)f(it)g(when)e(reading)i(a)g(set)g(of)g
-(OBSGEO-X/Y/Z)g(k)m(eyw)m(ord)g(v)-5 b(alues)30 b(from)227
-5693 y(a)h(FITS)f(header.)p eop end
-%%Page: 559 569
-TeXDict begin 559 568 bop 0 52 a Fz(G.34)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V5.3)2249 b FG(559)111 351
-y(3.)46 b(The)21 b(TimeMap)g(con)m(v)m(ersions)h(\\TTTOTDB")f(and)g
-(\\TDBTOTT",)g(and)f(the)i(Sp)s(ecMap)e(con)m(v)m(ersions)227
-464 y(\\TPF2HL")38 b(and)e(\\HLF2TP",)i(no)m(w)f(ha)m(v)m(e)g(an)g
-(additional)g(argumen)m(t)g(-)g(the)g(observ)m(er's)g(geo)s(detic)227
-577 y(altitude.)111 758 y(4.)46 b(The)29 b(P)m(olygon)h(class)f(has)g
-(b)s(een)f(mo)s(di\014ed)f(to)j(mak)m(e)g(it)f(consisten)m(t)h(with)f
-(the)g(IV)m(O)m(A)g(STC)f(de\014nition)227 871 y(of)j(a)h(P)m(olygon.)
-44 b(Sp)s(eci\014cally)-8 b(,)32 b(the)f(inside)g(of)g(a)g(p)s(olygon)g
-(is)g(no)m(w)g(the)g(area)h(to)g(the)f(left)h(of)f(eac)m(h)h(edge)227
-984 y(as)k(the)f(v)m(ertices)i(are)f(tra)m(v)m(ersed)g(in)f(an)g(an)m
-(ti-clo)s(c)m(kwise)k(manner,)d(as)f(seen)h(from)e(the)i(inside)f(of)g
-(the)227 1097 y(celestial)c(sphere.)39 b(Previously)-8
-b(,)30 b(AST)d(used)h(the)h(an)m(ti-clo)s(c)m(kwise)i(con)m(v)m(en)m
-(tion,)g(but)d(view)m(ed)g(from)g(the)227 1210 y(outside)39
-b(of)g(the)g(celestial)i(sphere)d(instead)h(of)g(the)g(inside.)65
-b(An)m(y)39 b(P)m(olygon)h(sa)m(v)m(ed)g(using)e(previous)227
-1323 y(v)m(ersions)31 b(of)g(AST)e(will)i(b)s(e)f(iden)m(ti\014ed)g
-(and)g(negated)h(automatically)i(when)d(read)g(b)m(y)g(AST)g(V5.2.)111
-1503 y(5.)46 b(A)24 b(new)g(class)g(of)g(Channel,)h(called)g(StcsChan,)
-g(has)f(b)s(een)f(added)g(that)h(allo)m(ws)i(con)m(v)m(ersion)f(of)f
-(suitable)227 1616 y(AST)30 b(Ob)5 b(jects)30 b(to)h(and)f(from)g(IV)m
-(O)m(A)h(STC-S)e(format.)111 1797 y(6.)46 b(A)28 b(new)g(metho)s(d)f
-(called)j(AST)p Fy(_)p FG(REMO)m(VEREGIONS)c(has)i(b)s(een)f(added)h
-(to)g(the)h(Mapping)f(class.)40 b(It)227 1910 y(searc)m(hes)29
-b(a)g(\(p)s(ossibly)e(comp)s(ound\))g(Mapping)h(\(or)h(F)-8
-b(rame\))29 b(for)f(an)m(y)g(instances)h(of)f(the)g(AST)g(Region)227
-2023 y(class,)35 b(and)d(either)h(remo)m(v)m(es)i(them,)e(or)g
-(replaces)h(them)f(with)f(UnitMaps)i(\(or)f(equiv)-5
-b(alen)m(t)34 b(F)-8 b(rames\).)227 2136 y(It)38 b(can)g(b)s(e)e(used)h
-(to)h(remo)m(v)m(e)h(the)f(masking)g(e\013ects)g(of)g(Regions)g(from)f
-(a)h(comp)s(ound)e(Mapping)h(or)227 2249 y(F)-8 b(rame.)111
-2430 y(7.)46 b(A)27 b(new)f(metho)s(d)h(called)h(AST)p
-Fy(_)p FG(DO)m(WNSIZE)d(has)i(b)s(een)f(added)g(to)h(the)g(P)m(olygon)i
-(class.)40 b(It)27 b(pro)s(duces)227 2543 y(a)k(new)f(P)m(olygon)i
-(that)f(con)m(tains)g(a)g(subset)f(of)g(the)h(v)m(ertices)h(in)e(the)h
-(supplied)e(P)m(olygon.)42 b(The)30 b(subset)227 2655
-y(is)e(c)m(hosen)h(to)f(retain)g(the)g(main)g(features)g(of)g(the)g
-(supplied)f(P)m(olygion,)j(in)e(so)g(far)f(as)h(that)h(is)f(p)s
-(ossible,)227 2768 y(within)i(sp)s(eci\014ed)g(constrain)m(ts.)111
-2949 y(8.)46 b(A)32 b(new)g(constructor)g(called)h(AST)p
-Fy(_)p FG(OUTLINE)d(has)i(b)s(een)f(added)g(to)i(the)f(P)m(olygon)h
-(class.)46 b(Giv)m(en)33 b(a)227 3062 y(2D)26 b(data)f(arra)m(y)-8
-b(,)27 b(it)e(iden)m(ti\014es)g(the)g(b)s(oundary)e(of)h(a)h(region)h
-(within)e(the)g(arra)m(y)i(that)f(holds)f(pixels)h(with)227
-3175 y(sp)s(eci\014ed)35 b(v)-5 b(alues.)57 b(It)36 b(then)f(creates)j
-(a)e(new)f(P)m(olygon)i(to)f(describ)s(e)f(this)h(b)s(oundary)e(to)i(a)
-g(sp)s(eci\014ed)227 3288 y(accuracy)-8 b(.)111 3469
-y(9.)46 b(A)35 b(new)e(set)i(of)f(metho)s(ds,)h(called)g(AST)p
-Fy(_)p FG(MAPGETELEM<X>)f(has)g(b)s(een)f(added)h(to)h(the)f(KeyMap)227
-3582 y(class.)42 b(They)30 b(allo)m(w)h(a)g(single)g(elemen)m(t)h(of)f
-(a)f(v)m(ector)i(v)-5 b(alued)31 b(en)m(try)f(to)h(b)s(e)f(returned.)66
-3763 y(10.)46 b(A)24 b(new)f(attribute)h(called)h(KeyError)e(has)g(b)s
-(een)g(added)f(to)j(the)e(KeyMap)h(Class.)39 b(It)23
-b(con)m(trols)i(whether)227 3876 y(the)34 b(AST)p Fy(_)p
-FG(MAPGET...)50 b(family)34 b(of)g(functions)f(rep)s(ort)g(an)h(error)f
-(if)h(an)f(en)m(try)h(with)g(the)g(requested)227 3988
-y(k)m(ey)d(do)s(es)f(not)h(exist)g(in)f(the)h(KeyMap.)0
-4272 y Fw(G.34)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V5.3)0
-4486 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 4599 y(v)m(ersions)31
-b(V5.2)g(and)f(V5.3:)111 4835 y(1.)46 b(The)26 b(details)h(of)g(ho)m(w)
-f(a)h(F)-8 b(rame)27 b(is)g(aligned)g(with)f(another)g(F)-8
-b(rame)28 b(b)m(y)e(the)g(AST)p Fy(_)p FG(FINDFRAME)h(and)227
-4948 y(AST)p Fy(_)p FG(CONVER)-8 b(T)28 b(functions)g(ha)m(v)m(e)j(b)s
-(een)d(c)m(hanged.)41 b(The)28 b(c)m(hanges)i(mean)f(that)h(a)f(F)-8
-b(rame)30 b(can)f(no)m(w)227 5060 y(b)s(e)36 b(aligned)h(with)f(an)g
-(instance)h(of)g(a)f(sub-class)h(of)f(F)-8 b(rame,)39
-b(so)e(long)g(as)f(the)h(n)m(um)m(b)s(er)e(of)h(axes)h(and)227
-5173 y(the)27 b(Domain)f(v)-5 b(alues)27 b(are)f(consisten)m(t.)41
-b(F)-8 b(or)27 b(instance,)h(a)e(basic)h(2-dimensional)g(F)-8
-b(rame)27 b(with)f(Domain)227 5286 y(\\SKY")36 b(will)h(no)m(w)e(align)
-i(succesfully)f(with)g(a)g(SkyF)-8 b(rame,)38 b(con)m(v)m(ersion)f(b)s
-(et)m(w)m(een)f(the)g(t)m(w)m(o)i(F)-8 b(rames)227 5399
-y(b)s(eing)30 b(ac)m(hiev)m(ed)i(using)e(a)h(UnitMap.)111
-5580 y(2.)46 b(Added)21 b(metho)s(d)g(AST)p Fy(_)p FG(MA)-8
-b(TCHAXES)21 b(to)h(the)g(F)-8 b(rame)22 b(class.)39
-b(This)21 b(metho)s(d)g(allo)m(ws)h(corresp)s(onding)227
-5693 y(axes)31 b(within)f(t)m(w)m(o)i(F)-8 b(rames)31
-b(to)g(b)s(e)f(iden)m(ti\014ed.)p eop end
-%%Page: 560 570
-TeXDict begin 560 569 bop 0 52 a FG(560)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FG(3.)46
-b(The)22 b(AST)p Fy(_)p FG(ADDFRAME)h(metho)s(d)f(can)g(no)m(w)h(b)s(e)
-e(used)h(to)h(app)s(end)d(one)j(or)f(more)h(axes)g(to)g(all)g(F)-8
-b(rames)227 464 y(in)30 b(a)h(F)-8 b(rameSet.)0 757 y
-Fw(G.35)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V5.3-1)0
-979 y FG(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h(signi\014can)
-m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g
-(AST)g(library)0 1092 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V5.3)g(and)
-f(V5.3-1)j(\(the)d(curren)m(t)h(v)m(ersion\):)111 1354
-y(1.)46 b(The)e(StcsChan)f(class)i(no)m(w)f(ignores)g(case)h(when)e
-(reading)h(STC-S)f(phrases)g(\(except)i(that)g(units)227
-1467 y(strings)30 b(are)h(still)h(case)f(sensitiv)m(e\).)0
-1729 y(Programs)25 b(whic)m(h)g(are)h(statically)h(link)m(ed)f(will)f
-(need)g(to)h(b)s(e)f(re-link)m(ed)g(in)g(order)g(to)h(tak)m(e)h(adv)-5
-b(an)m(tage)27 b(of)e(these)0 1842 y(new)30 b(facilities.)p
-eop end
-%%Trailer
-
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/ast-5.3-1/sun210.tex b/ast-5.3-1/sun210.tex
deleted file mode 100644
index 47f7740..0000000
--- a/ast-5.3-1/sun210.tex
+++ /dev/null
@@ -1,45811 +0,0 @@
-\documentclass[twoside,11pt]{article}
-
-% ? Specify used packages
-\usepackage[english]{babel} % For correct hyphenation rules
-\usepackage{graphicx} % Use this one for final production.
-% \usepackage[draft]{graphicx} % Use this one for drafting.
-% ? End of specify used packages
-
-\pagestyle{headings}
-\pagenumbering{roman}
-
-% -----------------------------------------------------------------------------
-% ? Document identification
-% Fixed part
-\newcommand{\stardoccategory} {Starlink User Note}
-\newcommand{\stardocinitials} {SUN}
-\newcommand{\stardocsource} {sun\stardocnumber}
-
-% Variable part - replace [xxx] as appropriate.
-\newcommand{\stardocnumber} {210.26}
-\newcommand{\stardocauthors} {R.F. Warren-Smith \& D.S. Berry}
-\newcommand{\stardocdate} {30th October 2009}
-\newcommand{\stardoctitle} {AST\\
- A Library for Handling\\
- World Coordinate Systems\\
- in Astronomy}
-\newcommand{\stardoccopyright} {Copyright (C) 2009 Science \& Technology Facilities Council}
-\newcommand{\stardoctitlehtml} {AST - A Library for Handling World Coordinate
- Systems in Astronomy}
-\newcommand{\stardocversion} {V5.3}
-\newcommand{\stardocmanual} {Programmer's Guide\\(Fortran Version)}
-\newcommand{\stardocmanualhtml}{Programmer's Guide (Fortran Version)}
-\newcommand{\stardocabstract} {
-The AST library provides a comprehensive range of facilities for
-attaching world coordinate systems to astronomical data, for
-retrieving and interpreting that information in a variety of formats,
-including FITS-WCS, and for generating graphical output based on it.
-
-This programmer's manual should be of interest to anyone writing
-astronomical applications which need to manipulate coordinate system
-data, especially celestial or spectral coordinate systems. AST is portable and
-environment-independent.
-}
-% ? End of document identification
-% -----------------------------------------------------------------------------
-
-% +
-% Name:
-% sun.tex
-%
-% Purpose:
-% Template for Starlink User Note (SUN) documents.
-% Refer to SUN/199
-%
-% Authors:
-% AJC: A.J.Chipperfield (Starlink, RAL)
-% BLY: M.J.Bly (Starlink, RAL)
-%
-% History:
-% 17-JAN-1996 (AJC):
-% Original with hypertext macros, based on MDL plain originals.
-% 16-JUN-1997 (BLY):
-% Adapted for LaTeX2e.
-% Added picture commands.
-% {Add further history here}
-%
-% -
-
-\newcommand{\stardocname}{\stardocinitials /\stardocnumber}
-\markboth{\stardocname}{\stardocname}
-\setlength{\textwidth}{160mm}
-\setlength{\textheight}{230mm}
-\setlength{\topmargin}{-2mm}
-\setlength{\oddsidemargin}{0mm}
-\setlength{\evensidemargin}{0mm}
-\setlength{\parindent}{0mm}
-\setlength{\parskip}{\medskipamount}
-\setlength{\unitlength}{1mm}
-
-% -----------------------------------------------------------------------------
-% Hypertext definitions.
-% ======================
-% These are used by the LaTeX2HTML translator in conjunction with star2html.
-
-% \htmlref{Comment}{Comment}.sty: version 2.0, 19 June 1992
-% Selectively in/exclude pieces of text.
-%
-% Author
-% Victor Eijkhout <eijkhout at cs.utk.edu>
-% Department of Computer Science
-% University Tennessee at Knoxville
-% 104 Ayres Hall
-% Knoxville, TN 37996
-% USA
-
-% Do not remove the %begin{latexonly} and %end{latexonly} lines (used by
-% star2html to signify raw TeX that latex2html cannot process).
-%begin{latexonly}
-\makeatletter
-\def\makeinnocent#1{\catcode`#1=12 }
-\def\csarg#1#2{\expandafter#1\csname#2\endcsname}
-
-\def\ThrowAwayComment#1{\begingroup
- \def\CurrentComment{#1}%
- \let\do\makeinnocent \dospecials
- \makeinnocent\^^L% and whatever other special cases
- \endlinechar`\^^M \catcode`\^^M=12 \xComment}
-{\catcode`\^^M=12 \endlinechar=-1 %
- \gdef\xComment#1^^M{\def\test{#1}
- \csarg\ifx{PlainEnd\CurrentComment Test}\test
- \let\html at next\endgroup
- \else \csarg\ifx{LaLaEnd\CurrentComment Test}\test
- \edef\html at next{\endgroup\noexpand\end{\CurrentComment}}
- \else \let\html at next\xComment
- \fi \fi \html at next}
-}
-\makeatother
-
-\def\includecomment
- #1{\expandafter\def\csname#1\endcsname{}%
- \expandafter\def\csname end#1\endcsname{}}
-\def\excludecomment
- #1{\expandafter\def\csname#1\endcsname{\ThrowAwayComment{#1}}%
- {\escapechar=-1\relax
- \csarg\xdef{PlainEnd#1Test}{\string\\end#1}%
- \csarg\xdef{LaLaEnd#1Test}{\string\\end\string\{#1\string\}}%
- }}
-
-% Define environments that ignore their contents.
-\excludecomment{comment}
-\excludecomment{rawhtml}
-\excludecomment{htmlonly}
-
-% Hypertext commands etc. This is a condensed version of the html.sty
-% file supplied with LaTeX2HTML by: Nikos Drakos <nikos at cbl.leeds.ac.uk> &
-% Jelle van Zeijl <jvzeijl at isou17.estec.esa.nl>. The LaTeX2HTML documentation
-% should be consulted about all commands (and the environments defined above)
-% except \xref and \xlabel which are Starlink specific.
-
-\newcommand{\htmladdnormallinkfoot}[2]{#1\footnote{#2}}
-\newcommand{\htmladdnormallink}[2]{#1}
-\newcommand{\htmladdimg}[1]{}
-\newenvironment{latexonly}{}{}
-\newcommand{\hyperref}[4]{#2\ref{#4}#3}
-\newcommand{\htmlref}[2]{#1}
-\newcommand{\htmlimage}[1]{}
-\newcommand{\htmladdtonavigation}[1]{}
-\newcommand{\latexhtml}[2]{#1}
-\newcommand{\html}[1]{}
-
-% Starlink cross-references and labels.
-\newcommand{\xref}[3]{#1}
-\newcommand{\xlabel}[1]{}
-
-% LaTeX2HTML symbol.
-\newcommand{\latextohtml}{{\bf LaTeX}{2}{\tt{HTML}}}
-
-% Define command to re-centre underscore for Latex and leave as normal
-% for HTML (severe problems with \_ in tabbing environments and \_\_
-% generally otherwise).
-\newcommand{\latex}[1]{#1}
-\newcommand{\setunderscore}{\renewcommand{\_}{{\tt\symbol{95}}}}
-\latex{\setunderscore}
-
-% Redefine the \tableofcontents command. This procrastination is necessary
-% to stop the automatic creation of a second table of contents page
-% by latex2html.
-\newcommand{\latexonlytoc}[0]{\tableofcontents}
-
-% -----------------------------------------------------------------------------
-% Debugging.
-% =========
-% Remove % on the following to debug links in the HTML version using Latex.
-
-% \newcommand{\hotlink}[2]{\fbox{\begin{tabular}[t]{@{}c@{}}#1\\\hline{\footnotesize #2}\end{tabular}}}
-% \renewcommand{\htmladdnormallinkfoot}[2]{\hotlink{#1}{#2}}
-% \renewcommand{\htmladdnormallink}[2]{\hotlink{#1}{#2}}
-% \renewcommand{\hyperref}[4]{\hotlink{#1}{\S\ref{#4}}}
-% \renewcommand{\htmlref}[2]{\hotlink{#1}{\S\ref{#2}}}
-% \renewcommand{\xref}[3]{\hotlink{#1}{#2 -- #3}}
-%end{latexonly}
-% -----------------------------------------------------------------------------
-% ? Document specific \newcommand or \newenvironment commands.
-
-\newcommand{\appref}[1]{Appendix~\ref{#1}}
-\newcommand{\secref}[1]{\S\ref{#1}}
-\begin{htmlonly}
- \newcommand{\appref}[1]{\ref{#1}}
- \newcommand{\secref}[1]{\ref{#1}}
-\end{htmlonly}
-
-\newcommand{\fitsurl}[0]{http://fits.gsfc.nasa.gov/}
-\newcommand{\fitskey}[3]{{#1}&{#2}&{#3}\\}
-
-% The following stuff has been moved out of the document body
-% in an attempt to stop spurious behaviour form latex2html.
-
-\begin{htmlonly}
- \newcommand{\latexonlytoc}[0]{}
-\end{htmlonly}
-\renewcommand{\thepage}{\arabic{page}}
-
-% +
-% Name:
-% SST.TEX
-
-% Purpose:
-% Define LaTeX commands for laying out Starlink routine descriptions.
-
-% Language:
-% LaTeX
-
-% Type of Module:
-% LaTeX data file.
-
-% Description:
-% This file defines LaTeX commands which allow routine documentation
-% produced by the SST application PROLAT to be processed by LaTeX and
-% by LaTeX2html. The contents of this file should be included in the
-% source prior to any statements that make of the sst commands.
-
-% Notes:
-% The commands defined in the style file html.sty provided with LaTeX2html
-% are used. These should either be made available by using the appropriate
-% sun.tex (with hypertext extensions) or by putting the file html.sty
-% on your TEXINPUTS path (and including the name as part of the
-% documentstyle declaration).
-
-% Authors:
-% RFWS: R.F. Warren-Smith (STARLINK)
-% PDRAPER: P.W. Draper (Starlink - Durham University)
-
-% History:
-% 10-SEP-1990 (RFWS):
-% Original version.
-% 10-SEP-1990 (RFWS):
-% Added the implementation status section.
-% 12-SEP-1990 (RFWS):
-% Added support for the usage section and adjusted various spacings.
-% 8-DEC-1994 (PDRAPER):
-% Added support for simplified formatting using LaTeX2html.
-% {enter_further_changes_here}
-
-% Bugs:
-% {note_any_bugs_here}
-
-% -
-
-% Define length variables.
-\newlength{\sstbannerlength}
-\newlength{\sstcaptionlength}
-\newlength{\sstexampleslength}
-\newlength{\sstexampleswidth}
-
-% Define a \tt font of the required size.
-\latex{\newfont{\ssttt}{cmtt10 scaled1095}}
-\html{\newcommand{\ssttt}{\tt}}
-
-% Define a command to produce a routine header, including its name,
-% a purpose description and the rest of the routine's documentation.
-\newcommand{\sstlabel}[1]{}
-\newcommand{\sstroutine}[3]{
- \goodbreak
- \rule{\textwidth}{0.5mm}
- \vspace{-7ex}
- \newline
- \settowidth{\sstbannerlength}{{\Large {\bf #1}}}
- \setlength{\sstcaptionlength}{\textwidth}
- \setlength{\sstexampleslength}{\textwidth}
- \addtolength{\sstbannerlength}{0.5em}
- \addtolength{\sstcaptionlength}{-2.0\sstbannerlength}
- \addtolength{\sstcaptionlength}{-5.0pt}
- \settowidth{\sstexampleswidth}{{\bf Examples:}}
- \addtolength{\sstexampleslength}{-\sstexampleswidth}
- \parbox[t]{\sstbannerlength}{\flushleft{\Large {\bf #1}}}
- \parbox[t]{\sstcaptionlength}{\center{\Large #2}}
- \parbox[t]{\sstbannerlength}{\flushright{\Large {\bf #1}}}
- \begin{description}
- #3
- \end{description}
-}
-
-% Format the description section.
-\newcommand{\sstdescription}[1]{\item[Description:] #1}
-
-% Format the usage section.
-\newcommand{\sstusage}[1]{\item[Usage:] \mbox{} \\[1.3ex] {\ssttt #1}}
-
-% Format the invocation/synopsis section.
-\newcommand{\sstinvocation}[1]{\item[Invocation:]\hspace{0.4em}{\tt #1}}
-\newcommand{\sstsynopsis}[1]{\item[Synopsis:]\hspace{0.4em}{\tt #1}}
-
-% Format the attribute data type section.
-\newcommand{\sstattributetype}[1]{
- \item[Type:] \mbox{} \\
- #1
-}
-
-% Format the constructor section.
-\newcommand{\sstconstructor}[1]{
- \item[Constructor Function:] \mbox{} \\
- #1
-}
-
-% Format the arguments section.
-\newcommand{\sstarguments}[1]{
- \item[Arguments:] \mbox{} \\
- \vspace{-3.5ex}
- \begin{description}
- #1
- \end{description}
-}
-
-% Format the returned value section (for a function).
-\newcommand{\sstreturnedvalue}[1]{
- \item[Returned Value:] \mbox{} \\
- \vspace{-3.5ex}
- \begin{description}
- #1
- \end{description}
-}
-
-% Format the parameters section (for an application).
-\newcommand{\sstparameters}[1]{
- \item[Parameters:] \mbox{} \\
- \vspace{-3.5ex}
- \begin{description}
- #1
- \end{description}
-}
-
-% Format the applicability section.
-\newcommand{\sstapplicability}[1]{
- \item[Clas\mbox{}s Applicability:] \mbox{} \\
- \vspace{-3.5ex}
- \begin{description}
- #1
- \end{description}
-}
-
-% Format the examples section.
-\newcommand{\sstexamples}[1]{
- \item[Examples:] \mbox{} \\
- \vspace{-3.5ex}
- \begin{description}
- #1
- \end{description}
-}
-
-% Define the format of a subsection in a normal section.
-\newcommand{\sstsubsection}[1]{ \item[{#1}] \mbox{} \\}
-
-% Define the format of a subsection in the examples section.
-\newcommand{\sstexamplesubsection}[2]{\sloppy
-\item[\parbox{\sstexampleslength}{\ssttt #1}] \mbox{} \\ #2 }
-
-% Format the notes section.
-\newcommand{\sstnotes}[1]{\item[Notes:] \mbox{} \\[1.3ex] #1}
-
-% Provide a general-purpose format for additional (DIY) sections.
-\newcommand{\sstdiytopic}[2]{\item[{\hspace{-0.35em}#1\hspace{-0.35em}:}] \mbox{} \\[1.3ex] #2}
-
-% Format the a generic section as a list
-\newcommand{\sstdiylist}[2]{
- \item[#1:] \mbox{} \\
- \vspace{-3.5ex}
- \begin{description}
- #2
- \end{description}
-}
-
-% Format the implementation status section.
-\newcommand{\sstimplementationstatus}[1]{
- \item[{Implementation Status:}] \mbox{} \\[1.3ex] #1}
-
-% Format the bugs section.
-\newcommand{\sstbugs}[1]{\item[Bugs:] #1}
-
-% Format a list of items while in paragraph mode.
-\newcommand{\sstitemlist}[1]{
- \mbox{} \\
- \vspace{-3.5ex}
- \begin{itemize}
- #1
- \end{itemize}
-}
-
-% Define the format of an item.
-\newcommand{\sstitem}{\item}
-
-% Now define html equivalents of those already set. These are used by
-% latex2html and are defined in the html.sty files.
-\begin{htmlonly}
-
-% Re-define \ssttt.
- \newcommand{\ssttt}{\tt}
-
-% sstroutine.
-% \newcommand{\sstroutine}[3]{
-% \subsection{#1\xlabel{#1}-\label{#1}#2}
-% \begin{description}
-% #3
-% \end{description}
-% }
- \newcommand{\sstlabel}[1]{\label{#1}\xlabel{#1}}
- \newcommand{\sstroutine}[3]{
- \subsection{#1 - #2}
- \begin{description}
- #3
- \end{description}
- }
-
-% sstdescription
- \newcommand{\sstdescription}[1]{\item[Description:]
- \begin{description}
- #1
- \end{description}
- }
-
-% sstusage
- \newcommand{\sstusage}[1]{\item[Usage:]
- \begin{description}
- {\ssttt #1}
- \end{description}
- }
-
-% sstinvocation
- \newcommand{\sstinvocation}[1]{\item[Invocation:]
- \begin{description}
- {\ssttt #1}
- \end{description}
- }
-
-% sstsynopsis
- \newcommand{\sstsynopsis}[1]{\item[Synopsis:]
- \begin{description}
- {\ssttt #1}
- \end{description}
- }
-
-% sstattributetype
- \newcommand{\sstattributetype}[1]{\item[Type:]
- #1
- }
-
-% sstconstructor
- \newcommand{\sstconstructor}[1]{\item[Constructor Function:]
- #1
- }
-
-% sstarguments
- \newcommand{\sstarguments}[1]{
- \item[Arguments:]
- \begin{description}
- #1
- \end{description}
- }
-
-% sstreturnedvalue
- \newcommand{\sstreturnedvalue}[1]{
- \item[Returned Value:]
- \begin{description}
- #1
- \end{description}
- }
-
-% sstparameters
- \newcommand{\sstparameters}[1]{
- \item[Parameters:]
- \begin{description}
- #1
- \end{description}
- }
-
-% sstapplicability
- \newcommand{\sstapplicability}[1]{
- \item[Clas\mbox{}s Applicability:]
- \begin{description}
- #1
- \end{description}
- }
-
-% sstexamples
- \newcommand{\sstexamples}[1]{
- \item[Examples:]
- \begin{description}
- #1
- \end{description}
- }
-
-% sstsubsection
- \newcommand{\sstsubsection}[1]{\item[{#1}]}
-
-% sstexamplesubsection
- \newcommand{\sstexamplesubsection}[2]{\item[{\ssttt #1}] \\ #2}
-
-% sstnotes
- \newcommand{\sstnotes}[1]{\item[Notes:]
- \begin{description}
- #1
- \end{description}
- }
-
-% sstdiytopic
- \newcommand{\sstdiytopic}[2]{\item[{#1}]
- \begin{description}
- #2
- \end{description}
- }
-
-% sstimplementationstatus
- \newcommand{\sstimplementationstatus}[1]{\item[Implementation Status:]
- \begin{description}
- #1
- \end{description}
- }
-
-% sstitemlist
- \newcommand{\sstitemlist}[1]{
- \begin{itemize}
- #1
- \end{itemize}
- }
-\end{htmlonly}
-
-% End of "sst.tex" layout definitions.
-% .
-% @(#)sst.tex 1.4 95/06/06 11:46:41 96/07/05 10:28:17
-
-
-
-
-
-% ? End of document specific commands
-% -----------------------------------------------------------------------------
-% \htmlref{Title}{Title} Page.
-% ===========
-\renewcommand{\thepage}{\roman{page}}
-\begin{document}
-\thispagestyle{empty}
-
-% Latex document header.
-% ======================
-\begin{latexonly}
- CCLRC / {\sc Rutherford Appleton Laboratory} \hfill {\bf \stardocname}\\
- {\large Particle Physics \& Astronomy Research Council}\\
- {\large Starlink Project\\}
- {\large \stardoccategory\ \stardocnumber}
- \begin{flushright}
- \stardocauthors\\
- \stardocdate
- \end{flushright}
- \vspace{-4mm}
- \rule{\textwidth}{0.5mm}
- \vspace{-7mm}
- \begin{center}
- {\Huge\bf \stardoctitle \\ [2.0ex]}
- {\LARGE\bf \stardocversion \\ [1.0ex]}
- {\Huge\bf \stardocmanual}
- \end{center}
-
-% ? Add picture here if required for the LaTeX version.
- \begin{center}
- \mbox{}\hfill
- \includegraphics[scale=0.25,angle=-90]{sun210_figures/fronta_bw.eps}\hfill
- \includegraphics[scale=0.25,angle=-90]{sun210_figures/frontb_bw.eps}\hfill
- \includegraphics[scale=0.25,angle=-90]{sun210_figures/frontc_bw.eps}\hfill
- \mbox{}
- \end{center}
-% ? End of picture
-
-% ? Heading for abstract if used.
- \begin{center}
- {\Large\bf Abstract}
- \end{center}
-% ? End of heading for abstract.
-\end{latexonly}
-
-% HTML documentation header.
-% ==========================
-\begin{htmlonly}
- \xlabel{}
- \begin{rawhtml} <H1> \end{rawhtml}
- \stardoctitlehtml
- \begin{rawhtml} </H1> \end{rawhtml}
-
-% ? Add picture here if required for the hypertext version.
- \includegraphics[scale=0.3,angle=-90]{sun210_figures/fronta.eps}\hfill
- \includegraphics[scale=0.3,angle=-90]{sun210_figures/frontb.eps}\hfill
- \includegraphics[scale=0.3,angle=-90]{sun210_figures/frontc.eps}
-% ? End of picture
-
- \begin{rawhtml} <H1> \end{rawhtml}
- \stardocversion
- \stardocmanualhtml
- \begin{rawhtml} </H1> \end{rawhtml}
- \begin{rawhtml} <P> <I> \end{rawhtml}
- \stardoccategory\ \stardocnumber \\
- \stardocauthors \\
- \stardocdate
- \begin{rawhtml} </I> </P> \end{rawhtml}
- \begin{rawhtml} <P> <I> \end{rawhtml}
- (For the C version of this document, please see \xref{SUN/211}{sun211}{}.)
- \begin{rawhtml} </I> </P> \end{rawhtml}
- \begin{rawhtml} <H3> \end{rawhtml}
- \htmladdnormallink{CCLRC}{http://www.cclrc.ac.uk} /
- \htmladdnormallink{Rutherford Appleton Laboratory}
- {http://www.cclrc.ac.uk/ral} \\
- \htmladdnormallink{Particle Physics \& Astronomy Research Council}
- {http://www.pparc.ac.uk} \\
- \begin{rawhtml} </H3> <H2> \end{rawhtml}
- \htmladdnormallink{Starlink Project}{http://www.starlink.rl.ac.uk/}
- \begin{rawhtml} </H2> \end{rawhtml}
- \htmladdnormallink{\htmladdimg{source.gif} Retrieve hardcopy}
- {http://www.starlink.rl.ac.uk/cgi-bin/hcserver?\stardocsource}\\
-
-% HTML document table of contents.
-% ================================
-% Add table of contents header and a navigation button to return to this
-% point in the document (this should always go before the abstract \section).
- \label{stardoccontents}
- \begin{rawhtml}
- <HR>
- <H2>Contents</H2>
- \end{rawhtml}
- \htmladdtonavigation{\htmlref{\htmladdimg{contents_motif.gif}}
- {stardoccontents}}
-
-% ? New section for abstract if used.
- \section{\xlabel{abstract}Abstract}
-% ? End of new section for abstract
-\end{htmlonly}
-
-% -----------------------------------------------------------------------------
-% ? Document Abstract. (if used)
-% ==================
-\stardocabstract
-% ? End of document abstract
-% -----------------------------------------------------------------------------
-% ? Document Copyright Statement.
-% =============================
- \begin{latexonly}
- \newpage
- \vspace*{\fill}
- \stardoccopyright
- \end{latexonly}
-% ? End of Document Copyright Statement.
-% -----------------------------------------------------------------------------
-% ? Latex document Table of Contents (if used).
-% ===========================================
- \cleardoublepage
- \cleardoublepage
- \begin{latexonly}
- \setlength{\parskip}{0mm}
- \latexonlytoc
- \setlength{\parskip}{\medskipamount}
- \markboth{\stardocname}{\stardocname}
- \end{latexonly}
-% ? End of Latex document table of contents
-% -----------------------------------------------------------------------------
-\cleardoublepage
-\setcounter{page}{1}
-
-\null\vspace {5mm}
-\begin{latexonly}
- \begin {center}
- \rule{80mm}{0.5mm} \\ [1ex]
- {\Large\bf \stardoctitle \\ [2.5ex]
- \stardocversion} \\ [2ex]
- \rule{80mm}{0.5mm}
-
- \vspace{10mm}
- {\em{This is the Fortran version of this document.\\
- For the C version, please see SUN/211.}}
- \end{center}
-\end{latexonly}
-
-% Main text of document.
-\vspace{7mm}
-\pagenumbering{arabic}
-\section{Introduction}
-
-Welcome to the AST library. If you are writing software for astronomy
-and need to use celestial coordinates ({\em{e.g.}}\ RA and Dec), spectral
-coordinates ({\em{e.g.}}\ wavelength, frequency, {\em{etc.}}), or
-other coordinate system information, then this library should be of
-interest. It provides solutions for most of the problems you will meet
-and allows you to write robust and flexible software. It is able to read
-and write WCS information in a variety of formats, including
-\htmladdnormallink{FITS-WCS}{http://fits.gsfc.nasa.gov/fits_wcs.html}.
-
-%\subsection{TBW---What is a World Coordinate \htmlref{System}{System}?}
-
-\subsection{What Problems Does AST Tackle?}
-
-Here are some of the main problems you may face when handling world
-coordinate system (WCS) information and the solutions that AST
-provides:
-
-\begin{description}
-\item[1. The Variety of Coordinate Systems]\mbox{}\\
-Astronomers use a wide range of differing coordinate systems to describe
-positions within a variety of physical domains. For instance, there are a
-large number of celestial coordinate systems in use within astronomy to
-describe positions on the sky. Understanding these, and knowing how to
-convert coordinates between them, can require considerable expertise. It
-can also be difficult to decide which of them your software should support.
-The same applies to coordinate systems describing other domains, such as
-position within an electro-magnetic spectrum.
-
-{\bf{Solution.}} AST has built-in knowledge of many coordinate systems
-and allows you to convert freely between them without specialist
-knowledge. This avoids the need to embed details of specific
-coordinate systems in your software. You also benefit automatically
-when new coordinate systems are added to AST.
-
-\item[2. Storing and Retrieving WCS Information]\mbox{}\\
-Storing coordinate system information in astronomical datasets and
-retrieving it later can present a considerable challenge. Typically,
-it requires knowledge of rather complex conventions
-({\em{e.g.}}\ FITS) which are low-level, often mis-interpreted and may
-be subject to change. Exchanging information with other software
-systems is further complicated by the number of different conventions
-in use.
-
-{\bf{Solution.}} AST combines a unifying high-level description of WCS
-information with the ability to save and restore this using a variety
-of formats. Details of the formats, which include FITS, are handled
-internally by AST. This frees you from the need to understand them or
-embed the details in your software. Again, you benefit automatically
-when new formats are added to AST.
-
-\item[3. Generating Graphical Output]\mbox{}\\
-Producing graphical displays involving curvilinear coordinate systems,
-such as celestial coordinate grids, can be complicated. Particular
-difficulties arise when handling large areas of sky, the polar regions
-and discontinuous ({\em{e.g.}}\ segmented) sky projections. Even just
-numbering and labelling curvilinear axes is rarely straightforward.
-
-{\bf{Solution.}} AST provides plotting facilities especially designed
-for use with curvilinear coordinate systems. These include the
-plotting of axes and complete labelled coordinate grids. A large
-number of options are provided for tailoring the output to your
-specific needs.
-
-\item[4. Aligning Data from Different Sources]\mbox{}\\
-One of the main uses of coordinate systems is to facilitate the
-inter-comparison of data from different sources. A typical use might
-be to plot (say) radio contours over an optical image. In practice,
-however, different celestial coordinate systems may have been used,
-making accurate alignment far from simple.
-
-{\bf{Solution}} AST provides a one-step method of aligning datasets,
-searching for all possible intermediate coordinate systems. This
-makes it simple to directly inter-relate the pixel coordinates of
-different datasets.
-
-\item[5. Handling Different Types of Coordinate \htmlref{System}{System}]\mbox{}\\
-Not all coordinate systems used in astronomy are celestial ones, so if
-you are writing general-purpose software such as (say) a display tool,
-you may also need to handle axes representing wavelength, distance,
-time or whatever else comes along. Obviously, you would prefer not to
-handle each one as a special case.
-
-{\bf{Solution}} AST uses the same flexible high-level model to
-describe all types of coordinate system. This allows you to write
-software that handles different kinds of coordinate axis without
-introducing special cases.
-\end{description}
-
-\subsection{Other Design Objectives}
-
-As well as its scientific objectives, the AST library's design
-includes a number of technical criteria intended to make it applicable
-to as wide a range of projects as possible. The main considerations
-are described here:
-
-\begin{enumerate}
-\item {\bf{Minimum Software Dependencies.}}
-The AST library depends on no other other software\footnote{It now comes with a
-minimal cut-down version of the widely-available SLALIB positional astronomy
-library (\xref{SUN/67}{sun67}{}), including just those functions needed
-by AST, and the previous dependency on SLALIB is no longer present}.
-
-\item {\bf{Environment Independence.}}
-AST is designed so that it can operate in a variety of ``programming
-environments'' and is not tied to any particular one. To allow this,
-it uses simple, flexible interfaces to obtain the following services:
-
-\begin{itemize}
-\item {\bf{Data Storage.}} Data I/O operations are based on text
-and/or FITS headers. This makes it easy to interface to a wide variety
-of astronomical data formats in a machine-independent way.
-
-\item {\bf{Graphics.}} Graphical output is produced {\em{via}} a
-simple generic graphics interface, which may easily be re-implemented
-over different graphics systems. AST provides a default implementation
-based on the widely-used PGPLOT graphics system
-(\xref{SUN/15}{sun15}{}).
-
-\item {\bf{Error Handling.}} Error messages are written to standard
-error by default, but go through a simple generic interface similar to
-that used for graphics (above). This permits error message delivery
-{\em{via}} other routes when necessary ({\em{e.g.}} in a graphical
-interface).
-\end{itemize}
-
-\item {\bf{Multiple Language Support.}}
-AST has been designed to be called from more than one language.
-Both Fortran and C interfaces are available (see
-\xref{SUN/211}{sun211}{} for the C version)
-and use from C$++$ is also straightforward if the C interface is
-included using:
-
-\begin{quote}
-\small
-\begin{verbatim}
-extern "C" {
-#include "ast.h"
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-A JNI interface (known as ``JNIAST'' - see
-\htmladdnormallink{http://www.starlink.ac.uk/jniast/}
-{http://www.starlink.ac.uk/jniast/}) has also been developed by Starlink
-which allows AST to be used from Java.
-
-\item {\bf{\htmlref{Object}{Object} Oriented Design.}}
-AST uses ``object oriented'' techniques internally in order to provide
-a flexible and easily-extended programming model. A fairly
-traditional calling interface is provided, however, so that the
-library's facilities are easily accessible to programmers using
-Fortran and C.
-
-\item {\bf{Portability.}}
-AST is implemented entirely in ANSI standard C and, when called
-{\em{via}} its C interface, makes no explicit use of any
-machine-dependent facilities.
-
-The Fortran interface is, unavoidably, machine dependent. However, the
-potential for problems has been minimised by encapsulating the
-interface layer in a compact set of C macros which facilitate its
-transfer to other platforms. No Fortran compiler is needed to build
-the library.
-
-Currently, AST is supported by Starlink on PC~Linux, Sun~Solaris and
-Tru64~Unix (formerly DEC~UNIX) platforms.
-\end{enumerate}
-
-\subsection{What Does ``AST'' Stand For?}
-
-The library name ``AST'' stands for ``ASTrometry Library''. The name
-arose when it was thought that knowledge of ``astrometry''
-({\em{i.e.}}\ celestial coordinate systems) would form the bulk of the
-library. In fact, it turns out that astrometry forms only a minor
-component, but the name AST has stuck.
-
-\cleardoublepage
-\section{Overview of AST Concepts}
-
-This section presents a brief overview of AST concepts. It is intended
-as a basic orientation course before you move on to the more technical
-considerations in subsequent sections.
-
-\subsection{\label{ss:mappingoverview}Relationships Between Coordinate Systems}
-
-The relationships between coordinate systems are represented in AST by
-Objects called Mappings. A \htmlref{Mapping}{Mapping} does not represent a coordinate
-system itself, but merely the process by which you move from one
-coordinate system to another related one.
-
-\begin{latexonly}
- A convenient picture of a Mapping is as a ``black box''
- (Figure~\ref{fig:mapping}) into which you can feed sets of
- coordinates.
- \begin{figure}[bhtp]
- \begin{center}
- \includegraphics[scale=0.7]{sun210_figures/mapping.eps}
- \caption{A Mapping viewed as a ``black box'' for transforming coordinates.}
- \label{fig:mapping}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- A convenient picture of a Mapping is as a ``black box'' (see Figure
- below) into which you can feed sets of coordinates.
- \begin{quote}
- \begin{figure}[bhtp]
- \label{fig:mapping}
- \includegraphics[scale=1.2]{sun210_figures/mapping.eps}
- \caption{A Mapping viewed as a ``black box'' for transforming coordinates.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-For each set you feed in, the Mapping returns a corresponding set of
-transformed coordinates. Since each set of coordinates represents a
-point in a coordinate space, the Mapping acts to inter-relate
-corresponding positions in the two spaces, although what these spaces
-represent is unspecified. Notice that a Mapping need not have the
-same number of input and output coordinates. That is, the two
-coordinate spaces which it inter-relates need not have the same number
-of dimensions.
-
-In many cases, the transformation can, in principle, be performed in
-either direction: either from the {\em{input}} coordinate space to the
-{\em{output,}} or {\em{vice versa.}} The first of these is termed the
-{\em{forward}} transformation and the other the {\em{inverse}}
-transformation.
-
-
-{\bf{Further reading:}} For a more complete discussion of Mappings,
-see~\secref{ss:mappings}.
-
-\subsection{\label{ss:mappingselection}Mappings Available}
-
-The basic concept of a \htmlref{Mapping}{Mapping} (\secref{ss:mappingoverview}) is rather
-generic and obviously it is necessary to have specific Mappings that
-implement specific relationships between coordinate systems. AST
-provides a range of these, to perform transformations such as the
-following and, where appropriate, their inverses:
-
-\begin{itemize}
-\item Conversions between various celestial coordinate systems (the
-\htmlref{SlaMap}{SlaMap}).
-
-\item Conversions between various spectral coordinate systems (the
-\htmlref{SpecMap}{SpecMap} and \htmlref{GrismMap}{GrismMap}).
-
-\item Conversions between various time systems (the \htmlref{TimeMap}{TimeMap}).
-
-\item Conversion between 2-dimensional spherical celestial coordinates
-(longitude and latitude) and a 3-dimensional vectorial positions (the \htmlref{SphMap}{SphMap}).
-
-\item Various projections of the celestial sphere on to 2-dimensional
-coordinate spaces---{\em{i.e.}}\ map projections (the \htmlref{DssMap}{DssMap} and \htmlref{WcsMap}{WcsMap}).
-
-\item Permutation, introduction and elimination of coordinates (the
-\htmlref{PermMap}{PermMap}).
-
-\item Various linear coordinate transformations (the \htmlref{MatrixMap}{MatrixMap}, \htmlref{WinMap}{WinMap},
-\htmlref{ShiftMap}{ShiftMap} and \htmlref{ZoomMap}{ZoomMap}).
-
-\item General N-dimensional polynomial transformations (the \htmlref{PolyMap}{PolyMap}).
-
-\item Lookup tables (the \htmlref{LutMap}{LutMap}).
-
-\item General-purpose transformations expressed using arithmetic
-operations and functions similar to those available in Fortran (the
-\htmlref{MathMap}{MathMap}).
-
-\item Transformations for internal use within a program, based on
-private transformation routines which you write yourself in Fortran
-(the \htmlref{IntraMap}{IntraMap}).
-\end{itemize}
-
-{\bf{Further reading:}} For a more complete description of each of the
-Mappings mentioned above, see its entry in
-\appref{ss:classdescriptions}. In addition, see the discussion of the
-PermMap in \secref{ss:permmapexample}, the \htmlref{UnitMap}{UnitMap} in
-\secref{ss:unitmapexample} and the IntraMap in
-\secref{ss:intramaps}. The ZoomMap is used as an example throughout
-\secref{ss:primer}.
-
-\subsection{\label{ss:cmpmapoverview}Compound Mappings}
-
-The Mappings described in \secref{ss:mappingselection} provide a set
-of basic building blocks from which more complex Mappings may be
-constructed. The key to doing this is a type of \htmlref{Mapping}{Mapping} called a
-\htmlref{CmpMap}{CmpMap}, or compound Mapping. A CmpMap's role is, in principle, very
-simple: it allows any other pair of Mappings to be joined together
-into a single entity which behaves as if it were a single Mapping. A
-CmpMap is therefore a container for another pair of Mappings.
-
-\begin{latexonly}
- A pair of Mappings may be combined using a CmpMap in either of two
- ways. The first of these, {\em{in series,}} is illustrated in
- Figure~\ref{fig:seriescmpmap}.
- \begin{figure}
- \begin{center}
- \includegraphics[scale=0.5]{sun210_figures/series.eps}
- \caption{A CmpMap (compound Mapping) composed of two component
- Mappings joined in series. The output coordinates of the first Mapping
- feed into the input coordinates of the second one, so that the whole
- entity behaves like a single Mapping.}
- \label{fig:seriescmpmap}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- A pair of Mappings may be combined using a CmpMap in either of two
- ways. The first of these, {\em{in series,}} is illustrated in the
- following Figure.
- \begin{quote}
- \begin{figure}
- \label{fig:seriescmpmap}
- \includegraphics[scale=1.0]{sun210_figures/series.eps}
- \caption{A CmpMap (compound Mapping) composed of two component
- Mappings joined in series. The output coordinates of the first Mapping
- feed into the input coordinates of the second one, so that the whole
- entity behaves like a single Mapping.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-\begin{latexonly}
- Here, the transformations implemented by each component Mapping are
- performed one after the other, with the output from the first Mapping
- feeding into the second. The second way, {\em{in parallel,}} is shown in
- Figure~\ref{fig:parallelcmpmap}.
- \begin{figure}
- \begin{center}
- \includegraphics[scale=0.75]{sun210_figures/parallel.eps}
- \caption{A CmpMap composed of two Mappings joined in parallel. Each
- component Mapping acts on a complementary subset of the input and
- output coordinates.}
- \label{fig:parallelcmpmap}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- Here, the transformations implemented by each component Mapping are
- performed one after the other, with the output from the first Mapping
- feeding into the second. The second way, {\em{in parallel,}} is shown in
- the Figure below.
- \begin{quote}
- \begin{figure}
- \label{fig:parallelcmpmap}
- \includegraphics[scale=1.0]{sun210_figures/parallel.eps}
- \caption{A CmpMap composed of two Mappings joined in parallel. Each
- component Mapping acts on a complementary subset of the input and
- output coordinates.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-In this case, each Mapping acts on a complementary subset of the
-input and output coordinates.\footnote{A pair of Mappings can be combined
-in a third way using a \htmlref{TranMap}{TranMap}. A TranMap allows the forward
-transformation of one Mapping to be combined with the inverse
-transformation of another to produce a single Mapping.}
-
-\begin{latexonly}
- The CmpMap forms the key to building arbitrarily complex Mappings
- because it is itself a form of Mapping. This means that a CmpMap may
- contain other CmpMaps as components
- ({\em{e.g.}}\ Figure~\ref{fig:complexcmpmap}). This nesting of CmpMaps
- can be repeated indefinitely, so that complex Mappings may be built in
- a hierarchical manner out of simper ones.
- \begin{figure}
- \begin{center}
- \includegraphics[scale=0.6]{sun210_figures/complex.eps}
- \caption{CmpMaps (compound Mappings) may be nested in order to
- construct complex Mappings out of simpler building blocks.}
- \label{fig:complexcmpmap}
- \end{center}
- \end{figure}
- This gives AST great flexibility in the coordinate transformations it
- can describe.
-\end{latexonly}
-\begin{htmlonly}
- The CmpMap forms the key to building arbitrarily complex Mappings
- because it is itself a form of Mapping. This means that a CmpMap may
- contain other CmpMaps as components ({\em{e.g.}}\ the Figure
- below). This nesting of CmpMaps can be repeated indefinitely, so that
- complex Mappings may be built in a hierarchical manner out of simper
- ones. This gives AST great flexibility in the coordinate
- transformations it can describe.
- \begin{quote}
- \begin{figure}
- \label{fig:complexcmpmap}
- \includegraphics[scale=0.8]{sun210_figures/complex.eps}
- \caption{CmpMaps (compound Mappings) may be nested in order to
- construct complex Mappings out of simpler building blocks.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-
-{\bf{Further reading:}} For a more complete description of CmpMaps,
-see \secref{ss:cmpmaps}. Also see the CmpMap entry in
-\appref{ss:classdescriptions}.
-
-\subsection{Representing Coordinate Systems}
-
-\begin{latexonly}
- While Mappings (\secref{ss:mappingoverview}) represent the
- relationships between coordinate systems in AST, the coordinate
- systems themselves are represented by Objects called Frames
- (Figure~\ref{fig:frames}).
- \begin{figure}
- \begin{center}
- \includegraphics[scale=0.75]{sun210_figures/frames.eps}
- \caption{(a) A basic \htmlref{Frame}{Frame} is used to represent a Cartesian coordinate
- system, here 2-dimensional. (b) A \htmlref{SkyFrame}{SkyFrame} represents a (spherical)
- celestial coordinate system. (c) The axis order of any Frame may be
- permuted to match the coordinate space it describes.}
- \label{fig:frames}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- While Mappings (\secref{ss:mappingoverview}) represent the
- relationships between coordinate systems in AST, the coordinate
- systems themselves are represented by Objects called Frames (see
- Figure below).
- \begin{quote}
- \begin{figure}
- \label{fig:frames}
- \includegraphics[scale=1.5]{sun210_figures/frames.eps}
- \caption{(a) A basic Frame is used to represent a Cartesian coordinate
- system, here 2-dimensional. (b) A SkyFrame represents a (spherical)
- celestial coordinate system. (c) The axis order of any Frame may be
- permuted to match the coordinate space it describes.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-A Frame is similar in concept to the frame you might draw around a
-graph. It contains information about the labels which appear on the
-axes, the axis units, a title, knowledge of how to format the
-coordinate values on each axis, {\em{etc.}} An AST Frame is not,
-however, restricted to two dimensions and may have any number of axes.
-
-A basic Frame may be used to represent a Cartesian coordinate system
-by setting values for its {\em attributes} (all AST Objects have
-values associated with them called attributes, which may be set and
-enquired). Usually, this would involve setting appropriate axis
-labels and units, for example. Routines are provided for use with
-Frames to perform operations such as formatting coordinate values as
-text, calculating distances between points, interchanging axes,
-{\em{etc.}}
-
-There are several more specialised forms of Frame, which provide the
-additional functionality required when handling coordinates within some
-specific physical domain. This ranges from tasks such as formatting axis
-values, to complex tasks such as determining the transformation between
-any pair of related coordinate systems. For instance, the SkyFrame
-(Figure~\ref{fig:frames}b,c), represents celestial coordinate systems,
-the \htmlref{SpecFrame}{SpecFrame} represents spectral coordinate systems, and the \htmlref{TimeFrame}{TimeFrame}
-represents time coordinate systems. All these provide a wide range of
-different systems for describing positions within their associated physical
-domain, and these may be selected by setting appropriate attributes.
-
-\begin{latexonly}
- As with compound Mappings (\secref{ss:cmpmapoverview}), it is possible
- to merge two Frames together to form a compound Frame, or \htmlref{CmpFrame}{CmpFrame}, in
- which both sets of axes are combined. One could, for example, have
- celestial coordinates on two axes and an unrelated coordinate
- (wavelength, perhaps) on a third (Figure~\ref{fig:cmpframe}).
- Knowledge of the relationships between the axes is preserved
- internally by the process of constructing the CmpFrame which
- represents them.
- \begin{figure}
- \begin{center}
- \includegraphics[scale=0.85]{sun210_figures/cmpframe.eps}
- \caption{A CmpFrame (compound Frame) formed by combining two simpler
- Frames. Note how the special relationship which exists between the RA
- and Dec axes is preserved within this data structure. As with compound
- Mappings (Figure~\ref{fig:complexcmpmap}), CmpFrames may be nested in
- order to build more complex Frames.}
- \label{fig:cmpframe}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- As with compound Mappings (\secref{ss:cmpmapoverview}), it is possible
- to merge two Frames together to form a compound Frame, or CmpFrame, in
- which both sets of axes are combined. One could, for example, have
- celestial coordinates on two axes and an unrelated coordinate
- (wavelength, perhaps) on a third (see Figure below). Knowledge of the
- relationships between the axes is preserved internally by the process
- of constructing the CmpFrame which represents them.
- \begin{quote}
- \begin{figure}
- \label{fig:cmpframe}
- \includegraphics[scale=1.5]{sun210_figures/cmpframe.eps}
- \caption{A CmpFrame (compound Frame) formed by combining two simpler
- Frames. Note how the special relationship which exists between the RA
- and Dec axes is preserved within this data structure. As with compound
- Mappings (Figure~\ref{fig:complexcmpmap}), CmpFrames may be nested in
- order to build more complex Frames.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-
-{\bf{Further reading:}} For a more complete description of Frames see
-\secref{ss:frames}, for SkyFrames see \secref{ss:skyframes} and for
-SpecFrames see \secref{ss:specframes}. Also see the Frame, SkyFrame,
-SpecFrame, TimeFrame and CmpFrame entries in \appref{ss:classdescriptions}.
-
-\subsection{Networks of Coordinate Systems}
-
-\begin{latexonly}
- Mappings and Frames may be connected together to form networks called
- FrameSets, which are used to represent sets of inter-related
- coordinate systems (Figure~\ref{fig:frameset}).
- \begin{figure}
- \begin{center}
- \includegraphics[scale=0.75]{sun210_figures/frameset.eps}
- \caption{A \htmlref{FrameSet}{FrameSet} is a network of Frames inter-connected by Mappings
- such that there is exactly one conversion path, {\em{via}} Mappings,
- between any pair of Frames.}
- \label{fig:frameset}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- Mappings and Frames may be connected together to form networks called
- FrameSets, which are used to represent sets of inter-related
- coordinate systems (see Figure below).
- \begin{quote}
- \begin{figure}
- \label{fig:frameset}
- \includegraphics[scale=1.0]{sun210_figures/frameset.eps}
- \caption{A FrameSet is a network of Frames inter-connected by Mappings
- such that there is exactly one conversion path, {\em{via}} Mappings,
- between any pair of Frames.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-A FrameSet may be extended by adding a new \htmlref{Frame}{Frame} to it, together with
-an associated \htmlref{Mapping}{Mapping} which relates the new coordinate system to one
-which is already present. This process ensures that there is always
-exactly one path, {\em{via}} Mappings, between any pair of Frames. A
-function is provided for identifying this path and returning the
-complete Mapping.
-
-One of the Frames in a FrameSet is termed its {\em{base}} Frame. This
-underlies the FrameSet's purpose, which is to calibrate datasets and
-other entities by attaching coordinate systems to them. In this
-context, the base Frame represents the ``native'' coordinate system
-(for example, the pixel coordinates of an image). Similarly, one
-Frame is termed the {\em{current}} Frame and represents the
-``currently-selected'' coordinates. It might, typically, be a
-celestial or spectral coordinate system and would be used during
-interactions with
-a user, as when plotting axes on a graph or producing a table of
-results. Other Frames within the FrameSet represent a library of
-alternative coordinate systems which a software user can select by
-making them current.
-
-{\bf{Further reading:}} For a more complete description of
-FrameSets, see \secref{ss:framesets} and \secref{ss:fshigher}. Also
-see the FrameSet entry in \appref{ss:classdescriptions}.
-
-\subsection{Input/Output Facilities}
-
-AST allows you to convert any kind of \htmlref{Object}{Object} into a stream of text
-which contains a full description of that Object. This text may be
-written out by one program and read back in by another, thus allowing
-the original Object to be reconstructed.
-
-The filter which converts Objects into text and back again is itself a
-kind of Object, called a \htmlref{Channel}{Channel}. A Channel provides a number of
-options for controlling the information content of the text, such as
-the addition of comments for human interpretation. It is also
-possible to intercept the text being processed by a Channel so that it
-may be redirected to/from any chosen external data store, such as a
-text file, an astronomical dataset, or a network connection.
-
-The text format used by the basic Channel class is peculiar to the AST
-library - no other software will understand it. However, more specialised
-forms of Channel are provided which use text formats more widely
-understood.
-
-To further facilitate the storage of coordinate system information in
-astronomical datasets, a more specialised form of Channel called a
-\htmlref{FitsChan}{FitsChan} is provided. Instead of using free-format text, a FitsChan
-converts AST Objects to and from FITS header cards. It also allows the
-information to be encoded in the FITS cards in a number of ways
-(called {\em{encodings}}), so that WCS information from a variety of
-sources can be handled.
-
-Another sub-class of Channel, called \htmlref{XmlChan}{XmlChan}, is a specialised form of
-Channel that stores the text in the form of XML markup. Currently, two
-markup formats are provided by the XmlChan class, one is closely related
-to the text format produced by the basic Channel class (currently, no
-schema or DTD is available describing this format). The other is a subset
-of an early draft of the IVOA Space-Time-Coordinates XML (STC-X) schema
-(V1.20) described at \htmladdnormallink{
-http://www.ivoa.net/Documents/WD/STC/STC-20050225.html
-}{
-http://www.ivoa.net/Documents/WD/STC/STC-20050225.html
-}\footnote{XML documents which use only the subset of the STC schema
-supported by AST can be read by the XmlChan class to produce
-corresponding AST objects (subclasses of the \htmlref{Stc}{Stc} class). However, the
-reverse is not possible. That is, AST objects can not currently be
-written out in the form of STC documents.}. The version of STC-X that has
-been adopted by the IVOA differs in several significant respects from
-V1.20, and therefore this XmlChan format is of historical interest only.
-
-Finally, the \htmlref{StcsChan}{StcsChan} class provides facilities for reading and writing
-IVOA STC-S region descriptions. STC-S (see \htmladdnormallink{
-http://www.ivoa.net/Documents/latest/STC-S.html}{
-http://www.ivoa.net/Documents/latest/STC-S.html}) is a linear string
-syntax that allows simple specification of STC metadata. AST supports a
-subset of the STC-S specification, allowing an STC-S description of a
-region within an AST-supported astronomical coordinate system to be converted
-into an equivalent AST \htmlref{Region}{Region} object, and vice-versa.
-
-{\bf{Further reading:}} For a more complete description of Channels
-see \secref{ss:channels} and for FitsChans see \secref{ss:nativefits}
-and \secref{ss:foreignfits}. Also see the Channel and FitsChan entries
-in \appref{ss:classdescriptions} and the \htmlref{Encoding}{Encoding} entry in
-\appref{ss:attributedescriptions}.
-
-\subsection{Producing Graphical Output}
-
-Graphical output is supported by a specialised form of \htmlref{FrameSet}{FrameSet} called
-a \htmlref{Plot}{Plot}, whose base \htmlref{Frame}{Frame} corresponds with the native coordinates of
-the underlying graphics system. Plotting operations are specified in
-{\em{physical coordinates}} which correspond with the Plot's current
-Frame. Typically, this might be a celestial coordinate system.
-
-Operations, such as drawing lines, are automatically transformed from
-physical to graphical coordinates before plotting, using an adaptive
-algorithm which ensures smooth curves (because the transformation is
-usually non-linear). ``Missing'' coordinates ({\em{e.g.}}\ graphical
-coordinates which do not project on to the celestial sphere),
-discontinuities and generalised clipping are all consistently handled.
-It is possible, for example, to plot in equatorial coordinates and
-clip in galactic coordinates. The usual plotting operations are
-provided (text, markers), but a geodesic curve replaces the primitive
-straight line element. There is also a separate function for drawing
-axis lines, since these are normally not geodesics.
-
-In addition to drawing coordinate grids over an area of the sky, another
-common use of the Plot class is to produce line plots such as flux
-against wavelength, displacement again time, \emph{etc}. For these
-situations the current Frame of the Plot would be a compound Frame
-(\htmlref{CmpFrame}{CmpFrame}) containing a pair of 1-dimensional Frames - the first
-representing the X axis quantity (wavelength, time, etc), and the second
-representing the Y axis quantity (flux, displacement, etc). The Plot
-class includes an option for axes to be plotted logarithmically.
-
-\begin{latexonly}
- Perhaps the most useful graphics function available is for drawing
- fully annotated coordinate grids ({\em{e.g.}}\ Figure~\ref{fig:gridplot}).
- \begin{figure}
- \begin{center}
- \includegraphics[scale=0.8,angle=-90]{sun210_figures/gridplot_bw.eps}
- \caption{A labelled coordinate grid for an all-sky zenithal equal area
- projection in ecliptic coordinates. This was composed and drawn
- {\em{via}} a Plot using a
- single subroutine call.}
- \label{fig:gridplot}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- Perhaps the most useful graphics function available is for drawing
- fully annotated coordinate grids ({\em{e.g.}}\ the Figure below).
- \begin{quote}
- \begin{figure}
- \label{fig:gridplot}
- \includegraphics[scale=1.2,angle=-90]{sun210_figures/gridplot.eps}
- \caption{A labelled coordinate grid for an all-sky zenithal equal area
- projection in ecliptic coordinates. This was composed and drawn
- {\em{via}} a Plot using a
- single subroutine call.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-This uses a general algorithm which does not depend on knowledge of
-the coordinates being represented, so can also handle
-programmer-defined coordinate systems. Grids for all-sky projections,
-including polar regions, can be drawn and most aspects of the output
-(colour, line style, {\em{etc.}}) can be adjusted by setting
-appropriate Plot attributes.
-
-{\bf{Further reading:}} For a more complete description of
-Plots and how to produce graphical output, see \secref{ss:plots}. Also
-see the Plot entry in \appref{ss:classdescriptions}.
-
-\cleardoublepage
-\section{\label{ss:howto}How To\ldots}
-
-For those of you with a plane to catch, this section provides some
-instant templates and recipes for performing the most
-commonly-required operations using AST, but without going into
-detail. The examples given (sort of) follow on from each other, so you
-should be able to construct a variety of programs by piecing them
-together. Note that some of them appear longer than they actually
-are, because we have included plenty of comments and a few options
-that you probably won't need.
-
-If any of this material has you completely baffled, then you may want
-to read the introduction to AST programming concepts in
-\secref{ss:primer} first. Otherwise, references to more detailed
-reading are given after each example, just in case they don't quite do
-what you want.
-
-\subsection{\ldots Obtain and Install AST}
-The AST library is available both as a stand-alone package and also as
-part of the Starlink Software Collection\footnote{The Starlink Software
-Collection can be downloaded from
-\htmladdnormallink{http://www.starlink.ac.uk/Download/}
-{http://www.starlink.ac.uk/Download/}.}. If your site has the Starlink
-Software Collection installed then AST should already be available.
-
-If not, you can download the AST library by itself from
-\htmladdnormallink{http://www.starlink.ac.uk/ast/}
-{http://www.starlink.ac.uk/ast/}.
-
-\subsection{\ldots Structure an AST Program}
-
-An AST program normally has the following structure:
-
-\small
-\begin{verbatim}
-* Include the interface to the AST library.
- INCLUDE 'AST_PAR'
-
-* Declare an integer status variable.
- INTEGER STATUS
- <maybe other declarations>
-
-* Initialise the status to zero.
- STATUS = 0
- <maybe some Fortran statements>
-
-* Enclose the parts which use AST between AST_BEGIN and AST_END calls.
- CALL AST_BEGIN( STATUS )
- <Fortran statements which use AST>
- CALL AST_END( STATUS )
-
- <maybe more Fortran statements>
- END
-\end{verbatim}
-\normalsize
-
-The use of \htmlref{AST\_BEGIN}{AST_BEGIN} and \htmlref{AST\_END}{AST_END} is optional, but has the effect of
-tidying up after you have finished using AST, so is normally
-recommended. For more details of this, see \secref{ss:contexts}. For
-details of how to access the AST\_PAR include file, see
-\secref{ss:accessingheaderfile}.
-
-\subsection{\label{ss:howtobuild}\ldots Build an AST Program}
-
-To build a simple AST program that doesn't use graphics, use:
-
-\begin{quote}
-\small
-\begin{verbatim}
-f77 program.f -L/star/lib -I/star/include `ast_link` -o program
-\end{verbatim}
-\normalsize
-\end{quote}
-
-On Linux systems you should usually use \verb+g77 -fno-second-underscore+ in
-place of \verb+f77+ - see \xref{``Software development on Linux''}{sun212}
-{software_development_on_linux} in \xref{SUN/212}{sun212}{}.
-
-To build a program which uses PGPLOT for graphics, use:
-
-\begin{quote}
-\small
-\begin{verbatim}
-f77 program.f -L/star/lib `ast_link -pgplot` -o program
-\end{verbatim}
-\normalsize
-\end{quote}
-
-again using \verb+g77 -fno-second-underscore+ in place of \verb+f77+
-on Linux systems.
-
-For more details about accessing AST include files, see
-\secref{ss:accessingheaderfile}. For more
-details about linking programs, see \secref{ss:linking} and the
-description of the ``\htmlref{ast\_link}{ast_link}'' command in
-\appref{ss:commanddescriptions}.
-
-\subsection{\label{ss:howtoreadwcs}\ldots Read a WCS Calibration from a Dataset}
-
-
-Precisely how you extract world coordinate system (WCS) information
-from a dataset obviously depends on what type of dataset it
-is. Usually, however, you should be able to obtain a set of FITS
-header cards which contain the WCS information (and probably much more
-besides). Suppose that CARDS is an array of character strings
-containing a complete set of FITS header cards and NCARD is the number
-of cards. Then proceed as follows:
-
-\small
-\begin{verbatim}
- INTEGER FITSCHAN, ICARD, NCARD, WCSINFO
- CHARACTER * ( 80 ) CARDS( NCARD )
-
- ...
-
-* Create a FitsChan and fill it with FITS header cards.
- FITSCHAN = AST_FITSCHAN( AST_NULL, AST_NULL, ' ', STATUS )
- DO 1 ICARD = 1, NCARD
- CALL AST_PUTFITS( FITSCHAN, CARDS( ICARD ), .FALSE., STATUS )
- 1 CONTINUE
-
-* Rewind the FitsChan and read WCS information from it.
- CALL AST_CLEAR( FITSCHAN, 'Card', STATUS )
- WCSINFO = AST_READ( FITSCHAN, STATUS )
-\end{verbatim}
-\normalsize
-
-The result should be a pointer, WCSINFO, to a \htmlref{FrameSet}{FrameSet} which contains
-the WCS information. This pointer can now be used to perform many
-useful tasks, some of which are illustrated in the following recipes.
-
-Some datasets which do not easily yield FITS header cards may require
-a different approach, possibly involving use of a \htmlref{Channel}{Channel} or \htmlref{XmlChan}{XmlChan}
-(\secref{ss:channels}) rather than a \htmlref{FitsChan}{FitsChan}. In the case of the
-Starlink NDF data format, for example, all the above may be replaced
-by a single call to the routine
-\xref{NDF\_GTWCS}{sun33}{NDF_GTWCS}---see \xref{SUN/33}{sun33}{}. The
-whole process can probably be encapsulated in a similar way for most
-other data systems, whether they use FITS header cards or not.
-
-For more details about reading WCS information from datasets, see
-\secref{ss:identifyingfitsencoding} and
-\secref{ss:readingforeignfits}. For a more general description of
-FitsChans and their use with FITS header cards, see
-\secref{ss:nativefits} and \secref{ss:foreignfits}. For more details
-about FrameSets, see \secref{ss:framesets} and \secref{ss:fshigher}.
-
-\subsection{\ldots Validate WCS Information}
-
-Once you have read WCS information from a dataset, as in
-\secref{ss:howtoreadwcs}, you may wish to check that you have been
-successful. The following will detect and classify the things that
-might possibly go wrong:
-
-\small
-\begin{verbatim}
- IF ( STATUS .NE. 0 ) THEN
- <an error occurred (a message will have been issued)>
- ELSE IF ( WCSINFO .EQ. AST__NULL ) THEN
- <there was no WCS information present>
- ELSE IF ( AST_GETC( WCSINFO, 'Class', STATUS ) .NE. 'FrameSet' ) THEN
- <something unexpected was read (i.e. not a FrameSet)>
- ELSE
- <WCS information was read OK>
- END IF
-\end{verbatim}
-\normalsize
-
-For more information about detecting errors in AST routines, see
-\secref{ss:errordetection}. For details of how to validate input data
-read by AST, see \secref{ss:validatinginput} and
-\secref{ss:readingforeignfits}.
-
-\subsection{\ldots Display AST Data}
-
-If you have a pointer to any AST \htmlref{Object}{Object}, you can display the data
-stored in that Object in textual form as follows:
-
-\small
-\begin{verbatim}
- CALL AST_SHOW( WCSINFO, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, we have used a pointer to the \htmlref{FrameSet}{FrameSet} which we read earlier
-(\secref{ss:howtoreadwcs}). The result is written to the program's
-standard output stream. This can be very useful during debugging.
-
-For more details about using \htmlref{AST\_SHOW}{AST_SHOW}, see
-\secref{ss:displayingobjects}. For information about interpreting the
-output, also see \secref{ss:textualoutputformat}.
-
-\subsection{\label{ss:howtotransform}\ldots Convert Between Pixel and World Coordinates}
-
-You may use a pointer to a \htmlref{FrameSet}{FrameSet}, such as we read in
-\secref{ss:howtoreadwcs}, to transform a set of points between the
-pixel coordinates of an image and the associated world coordinates. If
-you are working in two dimensions, proceed as follows:
-
-\small
-\begin{verbatim}
- INTEGER N
- DOUBLE PRECISION XPIXEL( N ), YPIXEL( N )
- DOUBLE PRECISION XWORLD( N ), YWORLD( N )
-
- ...
-
- CALL AST_TRAN2( WCSINFO, N, XPIXEL, YPIXEL, .TRUE.,
- : XWORLD, YWORLD, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, N is the number of points to be transformed, XPIXEL and YPIXEL
-hold the pixel coordinates, and XWORLD and YWORLD receive the returned
-world coordinates.\footnote{By pixel coordinates, we mean a coordinate
-system in which the first pixel in the image is centred on (1,1) and
-each pixel is a unit square. Note that the world coordinates will not
-necessarily be celestial coordinates, but if they are, then they will
-be in radians.} To transform in the opposite direction, interchange
-the two pairs of arrays (so that the world coordinates are given as
-input) and change the fifth argument of \htmlref{AST\_TRAN2}{AST_TRAN2} to .FALSE..
-
-To transform points in one dimension, use \htmlref{AST\_TRAN1}{AST_TRAN1}. In any other
-number of dimensions (or if the number of dimensions is initially
-unknown), use \htmlref{AST\_TRANN}{AST_TRANN}. These routines are described in
-\appref{ss:functiondescriptions}.
-
-For more information about transforming coordinates, see
-\secref{ss:transforming} and \secref{ss:framesetasmapping}. For
-details of how to handle missing coordinates, see
-\secref{ss:badcoordinates}.
-
-\subsection{\label{ss:howtotestforcelestial}\ldots Test if a WCS is a Celestial Coordinate System}
-
-The world coordinate system (WCS) currently associated with an image
-may often be a celestial coordinate system, but this need not
-necessarily be the case. For instance, instead of right ascension and
-declination, an image might have a WCS with axes representing
-wavelength and slit position, or maybe just plain old pixels.
-
-If you have obtained a WCS calibration for an image, as in
-\secref{ss:howtoreadwcs}, in the form of a pointer WCSINFO to a
-\htmlref{FrameSet}{FrameSet}, then you may determine if the current coordinate system is a
-celestial one or not, as follows:
-
-\small
-\begin{verbatim}
- INTEGER FRAME
- LOGICAL ISSKY
-
- ...
-
-* Obtain a pointer to the current Frame and determine if it is a
-* SkyFrame.
- FRAME = AST_GETFRAME( WCSINFO, AST__CURRENT, STATUS )
- ISSKY = AST_ISASKYFRAME( FRAME, STATUS )
- CALL AST_ANNUL( FRAME, STATUS )
-\end{verbatim}
-\normalsize
-
-This will set ISSKY to .TRUE.\ if the WCS is a celestial coordinate
-system, and to .FALSE.\ otherwise.
-
-\subsection{\label{ss:howtotestforspectral}\ldots Test if a WCS is a Spectral Coordinate System}
-Testing for a spectral coordinate system is basically the same as testing
-for a celestial coordinate system (see the previous section). The one
-difference is that you use the
-AST\_ISASPECFRAME routine
-in place of the
-AST\_ISASKYFRAME routine.
-
-\subsection{\label{ss:howtoformatcoordinates}\ldots Format Coordinates for Display}
-
-Once you have converted pixel coordinates into world coordinates
-(\secref{ss:howtotransform}), you may want to format them as text
-before displaying them. Typically, this would convert from (say)
-radians into something more comprehensible. Using the \htmlref{FrameSet}{FrameSet} pointer
-WCSINFO obtained in \secref{ss:howtoreadwcs} and a pair of world
-coordinates XW and YW ({\em{e.g.}}\ see \secref{ss:howtotransform}),
-you could proceed as follows:
-
-\small
-\begin{verbatim}
- CHARACTER * ( 20 ) XTEXT, YTEXT
- DOUBLE PRECISION XW, YW
-
- ...
-
- XTEXT = AST_FORMAT( WCSINFO, 1, XW, STATUS )
- YTEXT = AST_FORMAT( WCSINFO, 2, YW, STATUS )
-
- WRITE ( *, 199 ) XTEXT, YTEXT
- 199 FORMAT( 'Position = ', A, ', ', A )
-\end{verbatim}
-\normalsize
-
-Here, the second argument to \htmlref{AST\_FORMAT}{AST_FORMAT} is the axis number.
-
-With celestial coordinates, this will usually result in sexagesimal
-notation, such as ``12:34:56.7''. However, the same method may be
-applied to any type of coordinates and appropriate formatting will be
-employed.
-
-For more information about formatting coordinate values and how to
-control the style of formatting used, see
-\secref{ss:formattingaxisvalues} and
-\secref{ss:formattingskyaxisvalues}. If necessary, also see
-\secref{ss:normalising} for details of how to ``normalise'' a set of
-coordinates so that they lie within the standard range ({\em{e.g.}}\ 0
-to 24 hours for right ascension and $\pm 90^\circ$ for
-declination).
-
-\subsection{\ldots Display Coordinates as they are Transformed}
-
-In addition to formatting coordinates as part of a program's output,
-you may also want to examine coordinate values while debugging your
-program. To save time, you can ``eavesdrop'' on the coordinate values
-being processed every time they are transformed. For example, when
-using the \htmlref{FrameSet}{FrameSet} pointer WCSINFO obtained in
-\secref{ss:howtoreadwcs} to transform coordinates
-(\secref{ss:howtotransform}), you could inspect the coordinate values
-as follows:
-
-\small
-\begin{verbatim}
- CALL AST_SET( WCSINFO, 'Report=1', STATUS )
- CALL AST_TRAN2( WCSINFO, N, XPIXEL, YPIXEL, .TRUE.,
- : XWORLD, YWORLD, STATUS )
-\end{verbatim}
-\normalsize
-
-By setting the FrameSet's \htmlref{Report}{Report} attribute to 1, coordinate
-transformations are automatically displayed on the program's standard
-output stream, appropriately formatted, for example:
-
-\begin{quote}
-\begin{verbatim}
-(42.1087, 20.2717) --> (2:06:03.0, 34:22:39)
-(43.0197, 21.1705) --> (2:08:20.6, 35:31:24)
-(43.9295, 22.0716) --> (2:10:38.1, 36:40:09)
-(44.8382, 22.9753) --> (2:12:55.6, 37:48:55)
-(45.7459, 23.8814) --> (2:15:13.1, 38:57:40)
-(46.6528, 24.7901) --> (2:17:30.6, 40:06:25)
-(47.5589, 25.7013) --> (2:19:48.1, 41:15:11)
-(48.4644, 26.6149) --> (2:22:05.6, 42:23:56)
-(49.3695, 27.5311) --> (2:24:23.1, 43:32:41)
-(50.2742, 28.4499) --> (2:26:40.6, 44:41:27)
-\end{verbatim}
-\end{quote}
-
-For a complete description of the Report attribute, see its entry in
-\appref{ss:attributedescriptions}. For further details of how to set
-and enquire attribute values, see \secref{ss:settingattributes} and
-\secref{ss:gettingattributes}.
-
-\subsection{\ldots Read Coordinates Entered by a User}
-
-In addition to writing out coordinate values generated by your program
-(\secref{ss:howtoformatcoordinates}), you may also need to accept
-coordinates entered by a user, or perhaps read from a file. In this
-case, you will probably want to allow ``free-format'' input, so that
-the user has some flexibility in the format that can be used. You will
-probably also want to detect any typing errors.
-
-Let's assume that you want to read a number of lines of text, each
-containing the world coordinates of a single point, and to split each
-line into individual numerical coordinate values. Using the \htmlref{FrameSet}{FrameSet}
-pointer WCSINFO obtained earlier (\secref{ss:howtoreadwcs}), you could
-proceed as follows:
-
-\small
-\begin{verbatim}
- CHARACTER TEXT * ( 80 )
- DOUBLE PRECISION COORD( 10 )
- INTEGER IAXIS, N, NAXES, T
-
- ...
-
-* Obtain the number of coordinate axes (if not already known).
- NAXES = AST_GETI( WCSINFO, 'Naxes', STATUS )
-
-* Loop to read each line of input text, in this case from the
-* standard input channel (your programming environment will probably
-* provide a better way of reading text than this). Set the index T to
-* the start of each line read.
- 2 CONTINUE
- READ( *, '(A)', END=99 ) TEXT
- T = 1
-
-* Attempt to read a coordinate for each axis.
- DO 3 IAXIS = 1, NAXES
- N = AST_UNFORMAT( WCSINFO, IAXIS, TEXT( T : ), COORD( IAXIS ),
- : STATUS )
-
-* If nothing was read and this is not the first axis and the end of
-* the text has not been reached, try stepping over a separator and
-* reading again.
- IF ( ( N .EQ. 0 ) .AND. ( IAXIS .GT. 1 ) .AND.
- : ( T .LT. LEN( STRING ) ) ) THEN
- T = T + 1
- N = AST_UNFORMAT( WCSINFO, IAXIS, TEXT( T : ),
- COORD( IAXIS ), STATUS )
- END IF
-
-* Quit if nothing was read, otherwise move on to the next coordinate.
- IF ( N .EQ. 0 ) GO TO 4
- T = T + N
- 3 CONTINUE
- 4 CONTINUE
-
-* Test for the possible errors that may occur...
-
-* Error detected by AST (a message will have been issued).
- IF ( STATUS .NE. 0 ) THEN
- GO TO 99
-
-* Error in input data at character TEXT( T + N : T + N ).
- ELSE IF ( ( T .LT. LEN( STRING ) ) .OR. ( N .EQ. 0 ) ) THEN
- <handle the error, or report your own message here>
- GO TO 99
-
- ELSE
- <coordinates were read OK>
- END IF
-
-* Return to read the next input line.
- GO TO 2
- 99 CONTINUE
-\end{verbatim}
-\normalsize
-
-This algorithm has the advantage of accepting free-format input in
-whatever style is appropriate for the world coordinates in use (under
-the control of the FrameSet whose pointer you provide). For example,
-wavelength values might be read as floating point numbers
-({\em{e.g.}}\ ``1.047'' or ``4787''), whereas celestial positions
-could be given in sexagesimal format ({\em{e.g.}}\ ``12:34:56'' or
-``12~34.5'') and would be converted into radians. Individual
-coordinate values may be separated by white space and/or any
-non-ambiguous separator character, such as a comma.
-
-For more information on reading coordinate values using the
-\htmlref{AST\_UNFORMAT}{AST_UNFORMAT} function, see \secref{ss:unformattingaxisvalues}. For
-details of how sexagesimal formats are handled, and the forms of input
-that may be used for for celestial coordinates, see
-\secref{ss:unformattingskyaxisvalues}.
-
-\subsection{\label{ss:howtocreatenewwcs}\ldots Create a New WCS Calibration}
-
-This section describes how to add a WCS calibration to a data set which you
-are creating from scratch, rather than modifying an existing data set.
-
-In most common cases, the simplest way to create a new WCS calibration
-from scratch is probably to create a set of strings describing the
-required calibration in terms of the keywords used by the FITS WCS
-standard, and then convert these strings into an AST \htmlref{FrameSet}{FrameSet} describing
-the calibration. This FrameSet can then be used for many other purposes, or
-simply stored in the data set.
-
-The full FITS-WCS standard is quite involved, currently running to four
-separate papers, but the basic kernel is quite simple, involving the
-following keywords (all of which end with an integer axis index,
-indicated below by $<i>$):
-
-\begin{description}
-\item[CRPIX<i>]\mbox{}\\
-hold the pixel coordinates at a reference point
-\item[CRVAL<i>]\mbox{}\\
-hold the corresponding WCS coordinates at the reference point
-\item[CTYPE<i>]\mbox{}\\
-name the quantity represented by the WCS axes, together with the
-projection algorithm used to convert the scaled and rotated pixel coordinates
-to WCS coordinates.
-\item[CD<i>\_<j>]\mbox{}\\
-a set of keywords which specify the elements of a matrix. This matrix scales
-pixel offsets from the reference point into the offsets required as input
-by the projection algorithm specified by the CTYPE keywords. This matrix
-specifies the scale and rotation of the image. If there is no rotation
-the off-diagonal elements of the matrix (\emph{e.g.} CD1\_2 and
-CD2\_1) can be omitted.
-\end{description}
-
-As an example consider the common case of a simple 2D image of the sky in
-which north is parallel to the second pixel axis and east parallel to the
-(negative) first pixel axis. The image scale is 1.2 arc-seconds per pixel
-on both axes, and the image is presumed to have been obtained with a
-tangent plane projection. Furthermore, it is known that pixel coordinates
-(100.5,98.4) correspond to an RA of 11:00:10 and a Dec. of -23:26:02.
-A suitable set of FITS-WCS header cards could be:
-
-\begin{quote}
-\small
-\begin{verbatim}
-CTYPE1 = 'RA---TAN' / Axis 1 represents RA with a tan projection
-CTYPE2 = 'DEC--TAN' / Axis 2 represents Dec with a tan projection
-CRPIX1 = 100.5 / Pixel coordinates of reference point
-CRPIX2 = 98.4 / Pixel coordinates of reference point
-CRVAL1 = 165.04167 / Degrees equivalent of "11:00:10" hours
-CRVAL2 = -23.433889 / Decimal equivalent of "-23:26:02" degrees
-CD1_1 = -0.0003333333 / Decimal degrees equivalent of -1.2 arc-seconds
-CD2_2 = 0.0003333333 / Decimal degrees equivalent of 1.2 arc-seconds
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Notes:
-\begin{itemize}
-\item a FITS header card begins with the keyword name starting at column 1,
-has an equals sign in column 9, and the keyword value in columns 11 to 80.
-\item string values must be enclosed in single quotes.
-\item celestial longitude and latitude must both be specified in decimal degrees.
-\item the CD1\_1 value is negative to indicate that RA increases as the
-first pixel axis decreases.
-\item the (RA,Dec) coordinates will be taken as ICRS coordinates. For FK5
-you should add:
-
-\begin{quote}
-\small
-\begin{verbatim}
-RADESYS = 'FK5'
-EQUINOX = 2005.6
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The EQUINOX value defaults to J2000.0 if omitted. FK4 can also be used in
-place of FK5, in which case EQUINOX defaults to B1950.0.
-
-\end{itemize}
-
-Once you have created these FITS-WCS header card strings, you should
-store them in a \htmlref{FitsChan}{FitsChan} and then read the corresponding FrameSet from the
-FitsChan. How to do this is described in \secref{ss:howtoreadwcs}.
-
-Having created the WCS calibration, you may want to store it in a data
-file. How to do this is described in \secref{ss:howtowritewcs}).\footnote{If
-you are writing the WCS calibration to a FITS file you obviously
-have the choice of storing the FITS-WCS cards directly.}
-
-If the required WCS calibration cannot be described as a set of FITS-WCS
-headers, then a different approach is necessary. In this case, you should
-first create a \htmlref{Frame}{Frame} describing pixel coordinates, and store this Frame
-in a new FrameSet. You should then create a new Frame describing the
-world coordinate system. This Frame may be a specific subclass of Frame such
-as a \htmlref{SkyFrame}{SkyFrame} for celestial coordinates, a \htmlref{SpecFrame}{SpecFrame} for spectral
-coordinates, a Timeframe for time coordinates, or a \htmlref{CmpFrame}{CmpFrame} for a combination
-of different coordinates.
-You also need to create a suitable \htmlref{Mapping}{Mapping} which transforms pixel
-coordinates into world coordinates. AST provides many different types of
-Mappings, all of which can be combined together in arbitrary fashions to
-create more complicated Mappings. The WCS Frame should then be added into
-the FrameSet, using the Mapping to connect the WCS Frame with the pixel
-Frame.
-
-\subsection{\label{ss:howtomodifywcs}\ldots Modify a WCS Calibration}
-
-The usual reason for wishing to modify the WCS calibration associated
-with a dataset is that the data have been geometrically transformed in
-some way (here, we will assume a 2-dimensional image dataset). This
-causes the image features (stars, galaxies, {\em{etc.}}) to move with
-respect to the grid of pixels which they occupy, so that any
-coordinate systems previously associated with the image become
-invalid.
-
-To correct for this, it is necessary to set up a \htmlref{Mapping}{Mapping} which
-expresses the positions of image features in the new data grid in
-terms of their positions in the old grid. In both cases, the grid
-coordinates we use will have the first pixel centred at (1,1) with
-each pixel being a unit square.
-
-AST allows you to correct for any type of geometrical transformation
-in this way, so long as a suitable Mapping to describe it can be
-constructed. For purposes of illustration, we will assume here that
-the new image coordinates XNEW and YNEW can be expressed in terms of
-the old coordinates XOLD and YOLD as follows:
-
-\small
-\begin{verbatim}
- DOUBLE PRECISION XNEW, XOLD, YNEW, YOLD
- DOUBLE PRECISION M( 4 ), Z( 2 )
-
- ...
-
- XNEW = XOLD * M( 1 ) + YOLD * M( 2 ) + Z( 1 )
- YNEW = XOLD * M( 3 ) + YOLD * M( 4 ) + Z( 2 )
-\end{verbatim}
-\normalsize
-
-where M is a 2$\times$2 transformation matrix and Z represents a shift
-of origin. This is therefore a general linear coordinate
-transformation which can represent displacement, rotation,
-magnification and shear.
-
-In AST, it can be represented by concatenating two Mappings. The first
-is a \htmlref{MatrixMap}{MatrixMap}, which implements the matrix multiplication. The second
-is a \htmlref{WinMap}{WinMap}, which linearly transforms one coordinate window on to
-another, but will be used here simply to implement the shift of
-origin (alternatively, a \htmlref{ShiftMap}{ShiftMap} could have been used in place of a
-WinMap). These Mappings may be constructed and concatenated as follows:
-
-\small
-\begin{verbatim}
- DOUBLE PRECISION INA( 2 ), INB( 2 ), OUTA( 2 ), OUTB( 2 )
- INTEGER MATRIXMAP, WINMAP
-
- ...
-
-* Set up the corners of a unit square.
- DATA INA / 2 * 0.0D0 /
- DATA INB / 2 * 1.0D0 /
-
-* The MatrixMap may be constructed directly from the matrix M.
- MATRIXMAP = AST_MATRIXMAP( 2, 2, 0, M, ' ', STATUS )
-
-* For the WinMap, we take the coordinates of the corners of a unit
-* square (window) and then shift them by the required amounts.
- OUTA( 1 ) = INA( 1 ) + Z( 1 )
- OUTA( 2 ) = INA( 2 ) + Z( 2 )
- OUTB( 1 ) = INB( 1 ) + Z( 1 )
- OUTB( 2 ) = INB( 2 ) + Z( 2 )
-
-* The WinMap will then implement this shift.
- WINMAP = AST_WINMAP( 2, INA, INB, OUTA, OUTB, ' ', STATUS )
-
-* Join the two Mappings together, so that they are applied one after
-* the other.
- NEWMAP = AST_CMPMAP( MATRIXMAP, WINMAP, 1, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-You might, of course, create any other form of Mapping depending on
-the type of geometrical transformation involved. For an overview of
-the Mappings provided by AST, see \secref{ss:mappingselection}, and
-for a description of the capabilities of each class of Mapping, see
-its entry in \appref{ss:classdescriptions}. For an overview of how
-individual Mappings may be combined, see \secref{ss:cmpmapoverview}
-(\secref{ss:cmpmaps} gives more details).
-
-Assuming you have obtained a WCS calibration for your original image
-in the form of a pointer to a \htmlref{FrameSet}{FrameSet}, WCSINFO1
-(\secref{ss:howtoreadwcs}), the Mapping created above may be used to
-produce a calibration for the new image as follows:
-
-\small
-\begin{verbatim}
- INTEGER WCSINFO1, WCSINFO2
-
- ...
-
-* If necessary, make a copy of the WCS calibration, since we are
-* about to alter it.
- WCSINFO2 = AST_COPY( WCSINFO1, STATUS )
-
-* Re-map the base Frame so that it refers to the new data grid
-* instead of the old one.
- CALL AST_REMAPFRAME( WCSINFO2, AST__BASE, NEWMAP, STATUS )
-\end{verbatim}
-\normalsize
-
-This will produce a pointer, WCSINFO2, to a new FrameSet in which all
-the coordinate systems associated with the original image are modified
-so that they are correctly registered with your new image instead.
-
-For more information about re-mapping the Frames within a FrameSet,
-see \secref{ss:remapframe}. Also see \secref{ss:wcsprocessingexample}
-for a similar example to the above, applicable to the case of reducing
-the size of an image by binning.
-
-\subsection{\label{ss:howtowritewcs}\ldots Write a Modified WCS Calibration to a Dataset}
-
-If you have modified the WCS calibration associated with a dataset,
-such as in the example above (\secref{ss:howtomodifywcs}), then you
-will need to write the modified version out along with any new data.
-
-In the same way as when reading a WCS calibration
-(\secref{ss:howtoreadwcs}), how you do this will depend on your data
-system, but we will assume that you wish to generate a set of FITS
-header cards that can be stored with the data. You should usually make
-preparations for doing this when you first read the WCS calibration
-from your input dataset by modifying the example given in
-\secref{ss:howtoreadwcs} as follows:
-
-\small
-\begin{verbatim}
- INTEGER FITSCHAN1, WCSINFO1
- CHARACTER * ( 20 ) ENCODE
-
- ...
-
-* Create an input FitsChan and fill it with FITS header cards. Note,
-* if you have all the header cards in a single string, use AST_PUTCARDS in
-* place of AST_PUTFITS.
- FITSCHAN1 = AST_FITSCHAN( AST_NULL, AST_NULL, ' ', STATUS )
- DO 1 ICARD = 1, NCARD
- CALL AST_PUTFITS( FITSCHAN1, CARDS( ICARD ), .FALSE., STATUS )
- 1 CONTINUE
-
-* Note which encoding has been used for the WCS information.
- ENCODE = AST_GETC( FITSCHAN1, 'Encoding', STATUS );
-
-* Rewind the input FitsChan and read the WCS information from it.
- CALL AST_CLEAR( FITSCHAN1, 'Card', STATUS )
- WCSINFO1 = AST_READ( FITSCHAN1, STATUS )
-\end{verbatim}
-\normalsize
-
-Note how we have added an enquiry to determine how the WCS information
-is encoded in the input FITS cards, storing the resulting string in
-the ENCODE variable. This must be done {\bf{before}} actually reading
-the WCS calibration.
-
-
-Once you have produced a modified WCS calibration for the output
-dataset ({\em{e.g.}}\ \secref{ss:howtomodifywcs}), in the form of a
-\htmlref{FrameSet}{FrameSet} identified by the pointer WCSINFO2, you can produce a new
-\htmlref{FitsChan}{FitsChan} containing the output FITS header cards as follows:
-
-\small
-\begin{verbatim}
- INTEGER FITSCHAN2, JUNK, WCSINFO2
-
- ...
-
-* Make a copy of the input FitsChan, AFTER the WCS information has
-* been read from it. This will propagate all the input FITS header
-* cards, apart from those describing the WCS calibration.
- FITSCHAN2 = AST_COPY( FITSCHAN1, STATUS )
-
-* If necessary, make modifications to the cards in FITSCHAN2
-* (e.g. you might need to change NAXIS1, NAXIS2, etc., to account for
-* a change in image size). You probably only need to do this if your
-* data system does not provide these facilities itself.
- <details not shown - see below>
-
-* Alternatively, if your data system handles the propagation of FITS
-* header cards to the output dataset for you, then simply create an
-* empty FitsChan to contain the output WCS information alone.
-* FITSCHAN2 = AST_FITSCHAN( AST_NULL, AST_NULL, ' ', STATUS )
-
-* Rewind the new FitsChan (if necessary) and attempt to write the
-* output WCS information to it using the same encoding method as the
-* input dataset.
- CALL AST_SET( FITSCHAN2, 'Card=1, Encoding=' // ENCODE, STATUS )
- IF ( AST_WRITE( FITSCHAN2, WCSINFO2, STATUS ) .EQ. 0 ) THEN
-
-* If this didn't work (the WCS FrameSet has become too complex), then
-* use the native AST encoding instead.
- CALL AST_SETC( FITSCHAN2, 'Encoding', 'NATIVE', STATUS );
- JUNK = AST_WRITE( FITSCHAN2, WCSINFO2, STATUS );
- END IF
-\end{verbatim}
-\normalsize
-
-For details of how to modify the contents of the output FitsChan in
-other ways, such as by adding, over-writing or deleting header cards,
-see \secref{ss:addressingfitscards}, \secref{ss:addingmulticards}, \secref{ss:addingfitscards} and
-\secref{ss:findingandchangingfits}.
-
-Once you have assembled the output FITS cards, you may retrieve them
-from the FitsChan that contains them as follows:
-
-\small
-\begin{verbatim}
- CHARACTER * ( 80 ) CARD
-
- ...
-
- CALL AST_CLEAR( FITSCHAN2, 'Card', STATUS )
- 5 CONTINUE
- IF ( AST_FINDFITS( FITSCHAN2, '%f', CARD, .TRUE., STATUS ) ) THEN
- WRITE ( *, '(A)' ) CARD
- GO TO 5
- END IF
-\end{verbatim}
-\normalsize
-
-Here, we have simply written each card to the standard output unit,
-but you would obviously replace this with a subroutine call to store
-the cards in your output dataset.
-
-For data systems that do not use FITS header cards, a different
-approach may be needed, possibly involving use of a \htmlref{Channel}{Channel} or \htmlref{XmlChan}{XmlChan}
-(\secref{ss:channels}) rather than a FitsChan. In the case of the
-Starlink NDF data format, for example, all of the above may be
-replaced by a single call to the routine
-\xref{NDF\_PTWCS}{sun33}{NDF_PTWCS}---see \xref{SUN/33}{sun33}{}. The
-whole process can probably be encapsulated in a similar way for most
-other data systems, whether they use FITS header cards or not.
-
-For an overview of how to propagate WCS information through data
-processing steps, see \secref{ss:propagatingwcsinformation}. For more
-information about writing WCS information to FitsChans, see
-\secref{ss:writingnativefits} and \secref{ss:writingforeignfits}. For
-information about the options for encoding WCS information in FITS
-header cards, see \secref{ss:nativeencoding},
-\secref{ss:foreignencodings}, and the description of the \htmlref{Encoding}{Encoding}
-attribute in \appref{ss:attributedescriptions}. For a complete
-understanding of FitsChans and their use with FITS header cards, you
-should read \secref{ss:nativefits} and \secref{ss:foreignfits}.
-
-\subsection{\label{ss:howtoplotgrid}\ldots Display a Graphical Coordinate Grid}
-
-\begin{latexonly}
- A common requirement when displaying image data is to plot an
- associated coordinate grid ({\em{e.g.}}\ Figure~\ref{fig:overgrid})
- over the displayed image.
- \begin{figure}
- \begin{center}
- \includegraphics[scale=0.7]{sun210_figures/overgrid_bw.eps}
- \caption{An example of a displayed image with a coordinate grid
- plotted over it.}
- \label{fig:overgrid}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- A common requirement when displaying image data is to plot an
- associated coordinate grid over the displayed image ({\em{e.g.}}\
- the following Figure):
- \begin{quote}
- \begin{figure}[bhtp]
- \label{fig:overgrid}
- \includegraphics[scale=0.8]{sun210_figures/overgrid.eps}
- \caption{An example of a displayed image with a coordinate grid
- plotted over it.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-The use of AST in such circumstances is independent of the underlying
-graphics system, so starting up the graphics system, setting up a
-coordinate system, displaying the image, and closing down afterwards
-can all be done using the graphics routines you would normally use.
-
-However, displaying an image at a precise location can be a little
-fiddly with some graphics systems, and obviously the grid drawn by AST
-will not be accurately registered with the image unless this is done
-correctly. In the following template, we therefore illustrate both
-steps, basing the image display on the PGPLOT graphics
-package.\footnote{An interface is provided with AST that allows it to
-use PGPLOT (\xref{SUN/15}{sun15}{}) for its graphics, although
-interfaces to other graphics systems may also be written.} Plotting a
-coordinate grid with AST then becomes a relatively minor part of what
-is almost a complete graphics program.
-
-Once again, we assume that a pointer, WCSINFO, to a suitable \htmlref{FrameSet}{FrameSet}
-associated with the image has already been obtained
-(\secref{ss:howtoreadwcs}).
-
-\small
-\begin{verbatim}
- DOUBLE PRECISION BBOX( 4 )
- INTEGER NX, NY, PGBEG, PLOT
- REAL DATA( NX, NY ), GBOX( 4 ), HI, LO, SCALE, TR( 6 )
- REAL X1, X2, XLEFT, XRIGHT, Y1, Y2, YBOTTOM, YTOP
-
- ...
-
-* Access the image data, which we assume will be stored in the real
-* 2-dimensional array DATA with dimension sizes NX and NY. Also
-* derive limits for scaling it, which we assign to the variables HI
-* and LO.
- <this stage depends on your data system, so is not shown>
-
-* Open PGPLOT using the device given by environment variable
-* PGPLOT_DEV and check for success.
- IF ( PGBEG( 0, ' ', 1, 1 ) .EQ. 1 ) THEN
-
-* Clear the screen and ensure equal scales on both axes.
- CALL PGPAGE
- CALL PGWNAD( 0.0, 1.0, 0.0, 1.0 )
-
-* Obtain the extent of the plotting area (not strictly necessary for
-* PGPLOT, but possibly for other graphics systems). From this, derive
-* the display scale in graphics units per pixel so that the image
-* will fit within the display area.
- CALL PGQWIN( X1, X2, Y1, Y2 )
- SCALE = MIN( ( X2 - X1 ) / NX, ( Y2 - Y1 ) / NY )
-
-* Calculate the extent of the area in graphics units that the image
-* will occupy, so as to centre it within the display area.
- XLEFT = 0.5 * ( X1 + X2 - NX * SCALE )
- XRIGHT = 0.5 * ( X1 + X2 + NX * SCALE )
- YBOTTOM = 0.5 * ( Y1 + Y2 - NY * SCALE )
- YTOP = 0.5 * ( Y1 + Y2 + NY * SCALE )
-
-* Set up a PGPLOT coordinate transformation matrix and display the
-* image data as a grey scale map (these details are specific to
-* PGPLOT).
- TR( 1 ) = XLEFT - 0.5 * SCALE
- TR( 2 ) = SCALE
- TR( 3 ) = 0.0
- TR( 4 ) = YBOTTOM - 0.5 * SCALE
- TR( 5 ) = 0.0
- TR( 6 ) = SCALE
- CALL PGGRAY( DATA, NX, NY, 1, NX, 1, NY, HI, LO, TR )
-
-* BEGINNING OF AST BIT
-* ====================
-* Store the locations of the bottom left and top right corners of the
-* region used to display the image, in graphics coordinates.
- GBOX( 1 ) = XLEFT
- GBOX( 2 ) = YBOTTOM
- GBOX( 3 ) = XRIGHT
- GBOX( 4 ) = YTOP
-
-* Similarly, store the locations of the image's bottom left and top
-* right corners, in pixel coordinates -- with the first pixel centred
-* at (1,1).
- BBOX( 1 ) = 0.5D0
- BBOX( 2 ) = 0.5D0
- BBOX( 3 ) = NX + 0.5D0
- BBOX( 4 ) = NY + 0.5D0
-
-* Create a Plot, based on the FrameSet associated with the
-* image. This attaches the Plot to the graphics surface so that it
-* matches the displayed image. Specify that a complete set of grid
-* lines should be drawn (rather than just coordinate axes).
- PLOT = AST_PLOT( WCSINFO, GBOX, BBOX, 'Grid=1', STATUS )
-
-* Optionally, we can now set other Plot attributes to control the
-* appearance of the grid. The values assigned here use the
-* colour/font indices defined by the underlying graphics system.
- CALL AST_SET( PLOT, 'Colour(grid)=2, Font(textlab)=3', STATUS )
-
-* Use the Plot to draw the coordinate grid.
- CALL AST_GRID( PLOT, STATUS )
-
- <maybe some more AST graphics here>
-
-* Annul the Plot when finished (or use the AST_BEGIN/AST_END
-* technique shown earlier).
- CALL AST_ANNUL( PLOT, STATUS )
-
-* END OF AST BIT
-* ==============
-
-* Close down the graphics system.
- CALL PGEND
- END IF
-\end{verbatim}
-\normalsize
-
-Note that once you have set up a \htmlref{Plot}{Plot} which is aligned with a
-displayed image, you may also use it to generate further graphical
-output of your own, specified in the image's world coordinate system
-(such as markers to represent astronomical objects, annotation,
-{\em{etc.}}). There is also a range of Plot attributes which gives
-control over most aspects of the output's appearance. For details of
-the facilities available, see \secref{ss:plots} and the description of
-the Plot class in \appref{ss:classdescriptions}.
-
-For details of how to build a graphics program which uses PGPLOT, see
-\secref{ss:howtobuild} and the description of the \htmlref{ast\_link}{ast_link} command in
-\appref{ss:commanddescriptions}.
-
-\subsection{\label{ss:howtoswitchgrid}\ldots Switch to Plot a Different Celestial Coordinate Grid}
-
-Once you have set up a \htmlref{Plot}{Plot} to draw a coordinate grid
-(\secref{ss:howtoplotgrid}), it is a simple matter to change things so
-that the grid represents a different celestial coordinate system. For
-example, after creating the Plot with \htmlref{AST\_PLOT}{AST_PLOT}, you could use:
-
-\small
-\begin{verbatim}
- CALL AST_SET( PLOT, 'System=Galactic', STATUS )
-\end{verbatim}
-\normalsize
-or:
-\small
-\begin{verbatim}
- CALL AST_SET( PLOT, 'System=FK5, Equinox=J2010', STATUS )
-\end{verbatim}
-\normalsize
-
-and any axes and/or grid drawn subsequently would represent the new
-celestial coordinate system you specified. Note, however, that this
-will only work if the original grid represented celestial coordinates
-of some kind (see \secref{ss:howtotestforcelestial} for how to
-determine if this is the case\footnote{Note that the methods applied
-to a \htmlref{FrameSet}{FrameSet} may be used equally well with a Plot.}). If it did not,
-you will get an error message.
-
-For more information about the celestial coordinate systems available,
-see the descriptions of the \htmlref{System}{System}, \htmlref{Equinox}{Equinox} and \htmlref{Epoch}{Epoch} attributes in
-\appref{ss:attributedescriptions}.
-
-\subsection{\ldots Give a User Control Over the Appearance of a Plot}
-
-The idea of using a \htmlref{Plot}{Plot}'s attributes to control the appearance of the
-graphical output it produces (\secref{ss:howtoplotgrid} and
-\secref{ss:howtoswitchgrid}) can easily be extended to allow the user
-of a program complete control over such matters.
-
-For instance, if the file ``plot.config'' contains a series of
-plotting options in the form of Plot attribute assignments (see below
-for an example), then we could create a Plot and implement these
-assignments before producing the graphical output as follows:
-
-\small
-\begin{verbatim}
- CHARACTER LINE( 120 )
- INTEGER BASE
-
- ...
-
-* Create a Plot and define the default appearance of the graphical
-* output it will produce.
- PLOT = AST_PLOT( WCSINFO, GBOX, PBOX,
- : 'Grid=1, Colour(grid)=2, Font(textlab)=3',
- : STATUS )
-
-* Obtain the value of any Plot attributes we want to preserve.
- BASE = AST_GETI( PLOT, 'Base', STATUS )
-
-* Open the plot configuration file, if it exists.
- OPEN ( 1, FILE = 'plot.config', STATUS = 'OLD', ERR = 8 )
-
-* Read each line of text and use it to set new Plot attribute
-* values. Close the file when done.
- 6 CONTINUE
- READ ( 1, '(A)', END = 7 ) LINE
- CALL AST_SET( PLOT, LINE, STATUS )
- GO TO 6
- 7 CLOSE ( 1 )
- 8 CONTINUE
-
-* Restore any attribute values we are preserving.
- CALL AST_SETI( PLOT, 'Base', BASE, STATUS )
-
-* Produce the graphical output (e.g.).
- CALL AST_GRID( PLOT, STATUS )
-\end{verbatim}
-\normalsize
-
-Notice that we take care that the Plot's \htmlref{Base}{Base} attribute is preserved
-so that the user cannot change it. This is because graphical output
-will not be produced successfully if the base \htmlref{Frame}{Frame} does not describe
-the plotting surface to which we attached the Plot when we created it.
-
-The arrangement shown above allows the contents of the ``plot.config''
-file to control most aspects of the graphical output produced
-(including the coordinate system used; the colour, line style,
-thickness and font used for each component; the positioning of axes
-and tick marks; the precision, format and positioning of labels;
-{\em{etc.}}) {\em{via}} assignments of the form:
-
-\begin{quote}
-\small
-\begin{verbatim}
-System=Galactic, Equinox = 2001
-Border = 1, Colour( border ) = 1
-Colour( grid ) = 2
-DrawAxes = 1
-Colour( axes ) = 3
-Digits = 8
-Labelling = Interior
-\end{verbatim}
-\normalsize
-\end{quote}
-
-For a more sophisticated interface, you could obviously perform
-pre-processing on this input---for example, to translate words like
-``red'', ``green'' and ``blue'' into colour indices, to permit
-comments and blank lines, {\em{etc.}}
-
-For a full list of the attributes that may be used to control the
-appearance of graphical output, see the description of the Plot class
-in \appref{ss:classdescriptions}. For a complete description of each
-individual attribute ({\em{e.g.}}\ those above), see the attribute's
-entry in \appref{ss:attributedescriptions}.
-
-\cleardoublepage
-\section{\label{ss:primer}An AST Object Primer}
-
-The AST library deals throughout with entities called Objects and a
-basic understanding of how to handle these is needed before you can
-use the library effectively. If you are already familiar with an
-object-oriented language, such as C$++$, few of the concepts should
-seem new to you. Be aware, however, that AST is designed to be used
-{\em{via}} fairly conventional Fortran and C interfaces, so some
-things have to be done a little differently.
-
-If you are not already familiar with object-oriented programming, then
-don't worry---we will not emphasise this aspect more than is necessary
-and will not assume any background knowledge. Instead, this section
-concentrates on presenting all the fundamental information you will
-need, explaining how AST Objects behave and how to manipulate them
-from conventional Fortran programs.
-
-If you like to read documents from cover to cover, then you can
-consider this section as an introduction to the programming techniques
-used in the rest of the document. Otherwise, you may prefer to skim
-through it on a first reading and return to it later as reference
-material.
-
-\subsection{AST Objects}
-
-An AST \htmlref{Object}{Object} is an entity which is used to store information and
-Objects come in various kinds, called {\em{classes,}} according to the
-sort of information they hold. Throughout this section, we will make
-use of a simple Object belonging to the ``\htmlref{ZoomMap}{ZoomMap}'' class to
-illustrate many of the basic concepts.
-
-A ZoomMap is an Object that contains a recipe for converting
-coordinates between two hypothetical coordinate systems. It does this
-by multiplying all the coordinate values by a constant called the
-{\em{\htmlref{Zoom}{Zoom} factor.}} A ZoomMap is a very simple Object which exists
-mainly for use in examples. It allows us to illustrate the ways in
-which Objects are manipulated and to introduce the concept of a
-\htmlref{Mapping}{Mapping}---a recipe for converting coordinates---which is fundamental
-to the way the AST library works.
-
-\subsection{\label{ss:objectcreation}Object Creation and Pointers}
-
-Let us first consider how to create a \htmlref{ZoomMap}{ZoomMap}. This is done very
-simply as follows:
-
-\small
-\begin{verbatim}
- INCLUDE 'AST_PAR'
- INTEGER STATUS, ZOOMMAP
-
- STATUS = 0
-
- ...
-
- ZOOMMAP = AST_ZOOMMAP( 2, 5.0D0, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-The first step is to include the file AST\_PAR which defines the
-interface to the AST library and, amongst other things, declares
-\htmlref{AST\_ZOOMMAP}{AST_ZOOMMAP} to be an integer function. We then declare an integer
-variable ZOOMMAP to receive the result and an integer STATUS variable
-to hold the error status, which we initialise to zero. Next, we invoke
-AST\_ZOOMMAP to create the ZoomMap. The pattern is the same for all
-other classes of AST \htmlref{Object}{Object}---you simply prefix ``AST\_'' to the class
-name to obtain the function that creates the Object.
-
-These functions are called {\em{constructor functions,}} or simply
-{\em{constructors}} (you can find an individual description of all AST
-functions in \appref{ss:functiondescriptions}) and the arguments
-passed to the constructor are used to initialise the new Object. In
-this case, we specify 2 as the number of coordinates ({\em{i.e.}}\ we
-are going to work in a 2-dimensional
-space) and 5.0D0 as the \htmlref{Zoom}{Zoom} factor to be applied. Note that this is a
-Fortran double precision value. We will return to the final two
-arguments, a blank string and the error status, shortly
-(\secref{ss:attributeinitialisation} and \secref{ss:errordetection}).
-
-The integer value returned by the constructor is termed an {\em{Object
-pointer}} or, in this case, a {\em{ZoomMap pointer.}} This pointer is not
-an Object itself, but is a value used to refer to the Object. You
-should be careful not to modify any Object pointer yourself, as this
-may render it invalid. Instead, you perform all subsequent operations
-on the Object by passing this pointer to other AST routines.
-
-\subsection{\label{ss:objecthierarchy}The Object Hierarchy}
-
-Now that we have created our first \htmlref{ZoomMap}{ZoomMap}, let us examine how it
-relates to other kinds of \htmlref{Object}{Object} before investigating what we can do
-with it.
-
-We have so far indicated that a ZoomMap is a kind of Object and have
-also mentioned that it is a kind of \htmlref{Mapping}{Mapping} as well. These statements
-can be represented very simply using the following hierarchy:
-
-\begin{quote}
-\small
-\begin{verbatim}
-Object
- Mapping
- ZoomMap
-\end{verbatim}
-\normalsize
-\end{quote}
-
-which is a way of stating that a ZoomMap is a special class of
-Mapping, while a Mapping, in turn, is a special class of Object. This
-is exactly like saying that an Oak is a special form of Tree, while a
-Tree, in turn, is a special form of Plant. This may seem almost
-trivial, but before you turn to read something less dull, be assured
-that it is a very important idea to keep in mind in what follows.
-
-If we look at some of the other Objects used by the AST library, we
-can see how these are all related in a similar way (don't worry about
-what they do at this stage):
-\label{ss:mappinghierarchy}
-
-\begin{quote}
-\small
-\begin{verbatim}
-Object
- Mapping
- Frame
- FrameSet
- Plot
- UnitMap
- ZoomMap
- Channel
- FitsChan
- XmlChan
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Notice that there are several different types of Mapping available
-({\em{i.e.}}\ there are classes of Object indented beneath the
-``Mapping'' heading) and, in addition, other types of Object which are
-not Mappings---Channels for instance (which are at the same
-hierarchical level as Mappings).
-
-The most specialised Object we have shown here is the \htmlref{Plot}{Plot} (which we
-will not discuss in detail until \secref{ss:plots}). As you can see, a
-Plot is a \htmlref{FrameSet}{FrameSet}\ldots\ and a \htmlref{Frame}{Frame}\ldots\ and a Mapping\ldots\ and,
-like everything else, ultimately an Object.
-
-What this means is that you can use a Plot not only for its own
-specialised behaviour, but also whenever any of these other
-less-specialised classes of Object is called for. The general rule is
-that an Object of a particular class may substitute for any of the
-classes appearing above it in this hierarchy. The Object is then said
-to {\em{inherit}} the behaviour of these higher classes. We can
-therefore use our ZoomMap whenever a ZoomMap, a Mapping or an Object
-is called for.
-
-Sometimes, this can lead to some spectacular short-cuts by avoiding
-the need to break large Objects down in order to access their
-components. With some practice and a little lateral thinking you
-should soon be able to spot opportunities for this.
-
-You can find the full {\em{class hierarchy}}, as this is called, for
-the AST library in \appref{ss:classhierarchy} and you may need to
-refer to it occasionally until you are familiar with the classes you
-need to use.
-
-\subsection{\label{ss:displayingobjects}Displaying Objects}
-
-Let us now return to the \htmlref{ZoomMap}{ZoomMap} that we created earlier
-(\secref{ss:objectcreation}) and examine what it's made of.
-There is a routine for doing this, called \htmlref{AST\_SHOW}{AST_SHOW}, which is provided
-mainly for looking at Objects while you are debugging programs.
-
-If you consult the description of AST\_SHOW in
-\appref{ss:functiondescriptions}, you will find that it takes a
-pointer to an \htmlref{Object}{Object} as its argument (in addition to the usual STATUS
-argument). Although we have only a ZoomMap pointer available,
-fortunately this is not a problem. If you refer to the brief class
-hierarchy described above (\secref{ss:mappinghierarchy}), you will see
-that a ZoomMap is an Object, albeit a specialised one, so it inherits
-the properties of all Objects and can be substituted wherever an
-Object is required. We can therefore pass our ZoomMap pointer
-directly to AST\_SHOW, as follows:
-
-\small
-\begin{verbatim}
- CALL AST_SHOW( ZOOMMAP, STATUS )
-\end{verbatim}
-\normalsize
-
-The output from this will appear on the standard output stream and
-should look like the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
-Begin ZoomMap
- Nin = 2
-IsA Mapping
- Zoom = 5
-End ZoomMap
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, the ``Begin'' and ``End'' lines mark the beginning and end of
-the ZoomMap, while the values 2 and 5 are simply the values we
-supplied to initialise it (\secref{ss:objectcreation}). These have
-been given simple names to make them easy to refer to.
-
-The line in the middle which says ``IsA~\htmlref{Mapping}{Mapping}'' is a dividing line
-between the two values. It indicates that the ``\htmlref{Nin}{Nin}'' value is a
-property shared by all Mappings, so the ZoomMap has inherited this
-from its {\em{parent class}} (Mapping). The ``\htmlref{Zoom}{Zoom}'' value, however,
-is specific to a ZoomMap and isn't shared by other kinds of Mappings.
-
-\subsection{\label{ss:gettingattributes}Getting Attribute Values}
-
-We saw above (\secref{ss:displayingobjects}) how to display the
-internal values of an \htmlref{Object}{Object}, but what about accessing these values
-from a program? Not all internal Object values are accessible in this
-way, but many are. Those that are, are called {\em{attributes}}. A
-description of all the attributes used by the AST library can be found
-in \appref{ss:attributedescriptions}.
-
-Attributes come in several data types (character string, integer,
-boolean and floating point) and there is a standard way of obtaining
-their values. As an example, consider obtaining the value of the \htmlref{Nin}{Nin}
-attribute for the \htmlref{ZoomMap}{ZoomMap} created earlier. This could be done as
-follows:
-
-\small
-\begin{verbatim}
- INTEGER NIN
-
- ...
-
- NIN = AST_GETI( ZOOMMAP, 'Nin', STATUS )
-\end{verbatim}
-\normalsize
-
-Here, the integer function AST\_GETI is used to extract the attribute
-value by giving it the ZoomMap pointer and the attribute name
-(attribute names are not case sensitive, but we have used consistent
-capitalisation in this document in order to identify them). Remember
-to use the AST\_PAR include file to save having to declare AST\_GETI
-as integer yourself.
-
-If we had wanted the value of the \htmlref{Zoom}{Zoom} attribute, we would probably
-have used AST\_GETD instead, this being a double precision version of
-the same function, for example:
-
-\small
-\begin{verbatim}
- DOUBLE PRECISION ZOOM
-
- ...
-
- ZOOM = AST_GETD( ZOOMMAP, 'Zoom', STATUS )
-\end{verbatim}
-\normalsize
-
-However, we could equally well have read the Nin value as double
-precision, or the Zoom value as an integer, or whatever we wanted.
-
-The data type you want returned is specified simply by replacing the
-final character of the AST\_GETx function name with C~(character),
-D~(double precision), I~(integer), L~(logical) or R~(real). If
-possible, the value is converted to the type you want. If not, an
-error message will result. In converting from integer to logical, zero
-is regarded as .FALSE.\ and non-zero as .TRUE.. Note that all floating
-point values are stored internally as double precision. Boolean values
-are stored as integers, but only take the values 1 and 0 (for
-true/false).
-
-\subsection{\label{ss:settingattributes}Setting Attribute Values}
-
-Some attribute values are read-only and cannot be altered after an
-\htmlref{Object}{Object} has been created. The \htmlref{Nin}{Nin} attribute of a \htmlref{ZoomMap}{ZoomMap} (describing
-the number of coordinates) is like this. It is defined when the
-ZoomMap is created, but cannot then be altered.
-
-Other attributes, however, can be modified whenever you want. A
-ZoomMap's \htmlref{Zoom}{Zoom} attribute is like this. If we wanted to change it, this
-could be done simply as follows:
-
-\small
-\begin{verbatim}
- CALL AST_SETD( ZOOMMAP, 'Zoom', 99.6D0, STATUS )
-\end{verbatim}
-\normalsize
-
-which sets the value to 99.6 (double precision). As when getting an
-attribute value (\secref{ss:gettingattributes}), you have a choice of
-which data type you will use to supply the new value. For instance,
-you could use an integer value, as in:
-
-\small
-\begin{verbatim}
- CALL AST_SETI( ZOOMMAP, 'Zoom', 99, STATUS )
-\end{verbatim}
-\normalsize
-
-and the necessary data conversion would occur. You specify the data
-type you want to supply simply by replacing the final character of the
-AST\_SETx routine name with C~(character), D~(double precision),
-I~(integer), L~(logical) or R~(real). Setting a boolean attribute to
-any non-zero integer causes it to take the value 1.
-
-An alternative way of setting attribute values for Objects is to use
-the \htmlref{AST\_SET}{AST_SET} routine ({\em{i.e.}}\ with no final character specifying
-a data type). In this case, you supply the attribute values in a
-character string. The big advantage of this method is that you can
-assign values to several attributes at once, separating them with
-commas. This also reads more naturally in programs. For example:
-
-\small
-\begin{verbatim}
- CALL AST_SET( ZOOMMAP, 'Zoom=99.6, Report=1', STATUS )
-\end{verbatim}
-\normalsize
-
-would set values for both the Zoom attribute and the \htmlref{Report}{Report} attribute
-(about which more shortly---\secref{ss:transforming}). You don't really
-have to worry about data types with this method, as any character
-representation will do (although you must use 0/1 instead of
-.TRUE./.FALSE., which are not supported).
-
-\label{ss:attributeinitialisation}
-
-Finally, a very convenient way of setting attribute values is to do so
-at the same time as you create an Object. Every Object constructor
-function has a penultimate character argument which allows you to do
-this. Although you can simply leave this blank, it is an ideal
-opportunity to initialise the Object to have just the attributes you
-want. For example, we might have created our original ZoomMap with:
-
-\small
-\begin{verbatim}
- ZOOMMAP = AST_ZOOMMAP( 2, 5.0D0, 'Report=1', STATUS )
-\end{verbatim}
-\normalsize
-
-and it would then start life with its Report attribute set to 1.
-
-\subsection{\label{ss:defaultingattributes}Testing, Clearing and Defaulting Attributes}
-
-You can use the AST\_GETx family of routines
-(\secref{ss:gettingattributes}) to get a value for any \htmlref{Object}{Object} attribute
-at any time, regardless of whether a value has previously been set for
-it. If no value has been set, the AST library will generate a suitable
-default value.
-
-Often, the default value of an attribute will not simply be trivial
-(zero or blank) but may involve considerable processing to
-calculate. Wherever possible, defaults are designed to be real-life,
-sensible values that convey information about the state of the
-Object. In particular, they may often be based on the values of other
-attributes, so their values may change in response to changes in these
-other attributes. The \htmlref{ZoomMap}{ZoomMap} class that we have studied so far is a
-little too simple to show this behaviour, but we will meet it later
-on.
-
-An attribute that returns a default value in this way is said to be
-{\em{un-set.}} Conversely, once an explicit value has been assigned to
-an attribute, it becomes {\em{set}} and will always return precisely
-that value, never a default.
-
-The distinction between set and un-set attributes is important and
-affects the behaviour of several key routines in the AST library. You
-can test if an attribute is set using the logical function \htmlref{AST\_TEST}{AST_TEST},
-as in:
-
-\small
-\begin{verbatim}
- IF ( AST_TEST( ZOOMMAP, 'Report', STATUS ) ) THEN
- <the Report attribute is set>
- END IF
-\end{verbatim}
-\normalsize
-
-(as usual, remember to include the AST\_PAR file to declare the
-function as LOGICAL, or make this declaration yourself).
-
-Once an attribute is set, you can return it to its un-set state using
-\htmlref{AST\_CLEAR}{AST_CLEAR}. The effect is as if it had never been set in the first
-place. For example:
-
-\small
-\begin{verbatim}
- CALL AST_CLEAR( ZOOMMAP, 'Report', STATUS )
-\end{verbatim}
-\normalsize
-
-would ensure that the default value of the \htmlref{Report}{Report} attribute is used
-subsequently.
-
-%\subsection{TBW--Handling Character Attributes}
-
-\subsection{\label{ss:transforming}Transforming Coordinates}
-
-We now have the necessary apparatus to start using our \htmlref{ZoomMap}{ZoomMap} to show
-what it is really for. Here, we will also encounter a routine that is
-a little more fussy about the type of pointer it will accept.
-
-The purpose of a ZoomMap is to multiply coordinates by a constant zoom
-factor. To witness this in action, we will first set the \htmlref{Report}{Report}
-attribute for our ZoomMap to a non-zero value:
-
-\small
-\begin{verbatim}
- CALL AST_SET( ZOOMMAP, 'Report=1', STATUS )
-\end{verbatim}
-\normalsize
-
-This boolean (integer) attribute, which is present in all Mappings
-(and a ZoomMap is a \htmlref{Mapping}{Mapping}), causes the automatic display of all
-coordinate values that the Mapping converts. It is not a good idea to
-leave this feature turned on in a finished program, but it can save a
-lot of work during debugging.
-
-Our next step is to set up some coordinates for the ZoomMap to work
-on, using two arrays XIN and YIN, and two arrays to receive the
-transformed coordinates, XOUT and YOUT. Note that these arrays are
-double precision, as are all coordinate data processed by the AST
-library:
-
-\small
-\begin{verbatim}
- DOUBLE PRECISION XIN( 10 ), YIN( 10 ), XOUT( 10 ), YOUT( 10 )
- DATA XIN / 0D0, 1D0, 2D0, 3D0, 4D0, 5D0, 6D0, 7D0, 8D0, 9D0 /
- DATA YIN / 0D0, 2D0, 4D0, 6D0, 8D0, 10D0, 12D0, 14D0, 16D0, 18D0 /
-\end{verbatim}
-\normalsize
-
-We will now use the routine \htmlref{AST\_TRAN2}{AST_TRAN2} to transform the input
-coordinates. This is the most commonly-used (2-dimensional) coordinate
-transformation routine. If you look at its description in
-\appref{ss:functiondescriptions}, you will see that it requires a
-pointer to a Mapping, so we cannot supply just any old \htmlref{Object}{Object} pointer,
-as we could with the routines discussed previously. If we passed it a
-pointer to an inappropriate Object, an error message would result.
-
-Fortunately, a ZoomMap is a Mapping (\appref{ss:classhierarchy}), so we
-can use it with AST\_TRAN2 to transform our coordinates, as follows:
-
-\small
-\begin{verbatim}
- CALL AST_TRAN2( ZOOMMAP, 10, XIN, YIN, .TRUE., XOUT, YOUT, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, 10 is the number of points we want to transform and the fifth
-argument value of .TRUE.\ indicates that we want to transform in the
-{\em{forward}} direction (from input to output).
-
-Because our ZoomMap's Report attribute is set to 1, this will cause
-the effects of the ZoomMap on the coordinates to be displayed on the
-standard output stream:
-
-\begin{quote}
-\small
-\begin{verbatim}
-(0, 0) --> (0, 0)
-(1, 2) --> (5, 10)
-(2, 4) --> (10, 20)
-(3, 6) --> (15, 30)
-(4, 8) --> (20, 40)
-(5, 10) --> (25, 50)
-(6, 12) --> (30, 60)
-(7, 14) --> (35, 70)
-(8, 16) --> (40, 80)
-(9, 18) --> (45, 90)
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This shows the coordinate values of each point both before and after
-the ZoomMap is applied. You can see that each coordinate value has
-been multiplied by the factor 5 determined by the \htmlref{Zoom}{Zoom} attribute
-value. The transformed coordinates are now stored in the XOUT and YOUT
-arrays.
-
-If we wanted to transform in the opposite direction, we need simply
-change the fifth argument of AST\_TRAN2 from .TRUE. to .FALSE.. We can
-also feed the output coordinates from the above back into the routine:
-
-\small
-\begin{verbatim}
- CALL AST_TRAN2( ZOOMMAP, 10, XOUT, YOUT, .FALSE., XIN, YIN, STATUS )
-\end{verbatim}
-\normalsize
-
-The output would then look like:
-
-\begin{quote}
-\small
-\begin{verbatim}
-(0, 0) --> (0, 0)
-(5, 10) --> (1, 2)
-(10, 20) --> (2, 4)
-(15, 30) --> (3, 6)
-(20, 40) --> (4, 8)
-(25, 50) --> (5, 10)
-(30, 60) --> (6, 12)
-(35, 70) --> (7, 14)
-(40, 80) --> (8, 16)
-(45, 90) --> (9, 18)
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This is termed the {\em{inverse}} transformation (we have converted
-from output to input) and you can see that the original coordinates
-have been recovered by dividing by the Zoom factor.
-
-\subsection{\label{ss:annullingpointers}Managing Object Pointers}
-
-So far, we have looked at creating Objects and using them in various
-simple ways but have not yet considered how to get rid of them again.
-
-Every \htmlref{Object}{Object} consumes various computer resources (principally memory)
-and should be disposed of when it is no longer required, so as to free
-up these resources. One way of doing this (not necessarily the
-best---\secref{ss:contexts}) is to {\em{annul}} each Object pointer once
-you have finished with it, using \htmlref{AST\_ANNUL}{AST_ANNUL}. For example:
-
-\small
-\begin{verbatim}
- CALL AST_ANNUL( ZOOMMAP, STATUS )
-\end{verbatim}
-\normalsize
-
-This indicates that you have finished with the pointer and sets it to
-the null value AST\_\_NULL (as defined in the AST\_PAR include file),
-so that any attempt to use it again will generate an error message.
-
-In general, this process may not delete the Object, because there may
-still be other pointers associated with it. However, each Object
-maintains a count of the number of pointers associated with it and
-will be deleted if you annul the final pointer. Using AST\_ANNUL
-consistently will therefore ensure that all Objects are disposed of at
-the correct time. You can determine how many pointers are associated
-with an Object by examining its (read-only) \htmlref{RefCount}{RefCount} attribute.
-
-\subsection{\label{ss:contexts}AST Pointer Contexts---Begin and End}
-
-The use of \htmlref{AST\_ANNUL}{AST_ANNUL} (\secref{ss:annullingpointers}) is not completely
-foolproof, however. Consider the following:
-
-\small
-\begin{verbatim}
- CALL AST_SHOW( AST_ZOOMMAP( 2, 5.ODO, ' ', STATUS ), STATUS )
-\end{verbatim}
-\normalsize
-
-This creates a \htmlref{ZoomMap}{ZoomMap} and displays it on standard output
-(\secref{ss:displayingobjects}). Using function invocations as
-arguments to other routines in this way is very convenient because it
-avoids the need for intermediate pointer variables. However, the
-pointer generated by \htmlref{AST\_ZOOMMAP}{AST_ZOOMMAP} is still active, and since we have
-not stored its value, we cannot use AST\_ANNUL to annul it. The
-ZoomMap will therefore stay around until the end of the program.
-
-A simple way to avoid this problem is to enclose all use of AST
-routines between calls to \htmlref{AST\_BEGIN}{AST_BEGIN} and \htmlref{AST\_END}{AST_END}, for example:
-
-\small
-\begin{verbatim}
- CALL AST_BEGIN( STATUS )
- CALL AST_SHOW( AST_ZOOMMAP( 2, 5.ODO, ' ', STATUS ), STATUS )
- CALL AST_END( STATUS )
-\end{verbatim}
-\normalsize
-
-When the AST\_END call executes, every \htmlref{Object}{Object} pointer created since
-the previous AST\_BEGIN call is automatically annulled and any Objects
-left without pointers are deleted. This provides a simple solution to
-managing Objects and their pointers, and allows you to create Objects
-very freely without needing to keep detailed track of each one.
-Because this is so convenient, we implicitly assume that AST\_BEGIN
-and AST\_END are used in most of the examples given in this document.
-Pointer management is not generally shown explicitly unless it is
-particularly relevant to the point being illustrated.
-
-If necessary, calls to AST\_BEGIN and AST\_END may be nested, like
-\htmlref{IF}{IF}\ldots ENDIF blocks in Fortran, to define a series of AST pointer
-contexts. Each call to AST\_END will then annul only those Object
-pointers created since the matching call to AST\_BEGIN.
-
-\subsection{Exporting, Importing and Exempting AST Pointers}
-The \htmlref{AST\_EXPORT}{AST_EXPORT} routine allows you to export particular pointers from
-one AST context (\secref{ss:contexts}) to the next outer one, as
-follows:
-
-\small
-\begin{verbatim}
- CALL AST_EXPORT( ZOOMMAP, STATUS )
-\end{verbatim}
-\normalsize
-
-This would identify the pointer stored in ZOOMMAP as being required after
-the end of the current AST context. It causes any pointers nominated
-in this way to survive the next call to \htmlref{AST\_END}{AST_END} (but only one such
-call) unscathed, so that they are available to the next outer context.
-This facility is not needed often, but is invaluable when the purpose
-of your \htmlref{AST\_BEGIN}{AST_BEGIN}\ldots AST\_END block is basically to generate an
-\htmlref{Object}{Object} pointer. Without this, there is no way of getting that pointer
-out.
-
-The \htmlref{AST\_IMPORT}{AST_IMPORT} routine can be used in a similar manner to import a
-pointer into the current context, so that it is deleted when the current
-context is closed using AST\_END.
-
-
-Sometimes, you may also want to exempt a pointer from all the effects
-of AST contexts. You should not need to do this often, but it will
-prove essential if you ever need to write a library of routines that
-stores AST pointers as part of its own internal data. Without some
-form of exemption, the caller of your routines could cause the
-pointers you have stored to be annulled---thus corrupting your
-internal data---simply by using AST\_END. To avoid this, you should
-use \htmlref{AST\_EXEMPT}{AST_EXEMPT} on each pointer that you store, for example:
-
-\small
-\begin{verbatim}
- CALL AST_EXEMPT( ZOOMMAP, STATUS )
-\end{verbatim}
-\normalsize
-
-This will prevent the pointer being affected by any subsequent use of
-AST\_END. Of course, it then becomes your responsibility to annul this
-pointer (using \htmlref{AST\_ANNUL}{AST_ANNUL}) when it is no longer required.
-
-
-
-
-\subsection{\label{ss:copyingobjects}Copying Objects}
-
-The AST library makes extensive use of pointers, not only for
-accessing Objects directly, but also as a means of storing Objects
-inside other Objects (a number of classes of \htmlref{Object}{Object} are designed to
-hold collections of other Objects). Rather than copy an Object in its
-entirety, a pointer to the interior Object is simply stored in the
-enclosing Object.
-
-This means that Objects may frequently not be completely independent
-of each other because, for instance, they both contain pointers to the
-same sub-Object. In this situation, changing one Object (say assigning
-an attribute value) may affect the other one {\em{via}} the common
-Object.
-
-It is difficult to describe all cases where this may happen, so you
-should always be alert to the possibility. Fortunately, there is a
-simple solution. If you require two Objects to be independent, then
-simply use \htmlref{AST\_COPY}{AST_COPY} to make a copy of one, {\em{e.g:}}
-
-\small
-\begin{verbatim}
- INTEGER ZOOMMAP1, ZOOMMAP2
-
- ...
-
- ZOOMMAP2 = AST_COPY( ZOOMMAP1, STATUS )
-\end{verbatim}
-\normalsize
-
-This process will create a true copy of any Object and return a
-pointer to the copy. This copy will not contain any pointers to any
-component of the original Object (everything is duplicated), so you
-can then modify it safely, without fear of affecting either the
-original or any other Object.
-
-%\subsection{TBW - Inheritance}
-
-
-\subsection{\label{ss:errordetection}Error Detection}
-
-If an error occurs in an AST routine (for example, if you supply an
-invalid argument, such as a pointer to the wrong class of \htmlref{Object}{Object}), an
-error message will be written to the standard error stream and the
-function will immediately return.
-
-To indicate that an error has occurred, each AST routine that can
-potentially fail has a final integer {\em{error status}} argument
-called STATUS. This is both an input and an output argument.
-Normally, you should declare a single error status variable and pass
-it as the STATUS argument to every AST routine you invoke. This
-variable must initially be cleared ({\em{i.e}}\ set to
-zero\footnote{We will assume throughout that the ``OK'' value is zero,
-as it currently is. However, a different value could, in principle, be
-used if the environment in which AST is running requires it. To allow
-for this possibility, you might prefer to use a parameter constant to
-represent the value zero when testing for errors.} to indicate no
-error). If an error occurs, the STATUS argument is returned set to a
-different {\em{error value}}, which allows you to detect the error, as
-follows:
-
-\small
-\begin{verbatim}
- STATUS = 0
-
- ...
-
- ZOOMMAP = AST_ZOOMMAP( 2, 5.0D0, 'Title=My ZoomMap', STATUS )
- IF ( STATUS .NE. 0 ) THEN
- <an error has occurred>
- END IF
-\end{verbatim}
-\normalsize
-
-In this example, an error would be detected because we have attempted
-to set a value for the \htmlref{Title}{Title} attribute of a \htmlref{ZoomMap}{ZoomMap} and a ZoomMap does
-not have such an attribute.
-
-A consequence of the error status variable STATUS being set to an
-error value is that almost all AST routines will subsequently cease to
-function and will instead simply return without action. This means
-that you do not need to check for errors very frequently. Instead, you
-can usually simply invoke a succession of AST routines. If an error
-occurs in any of them, the following ones will do nothing and you can
-check for the error at the end, for example:
-
-\small
-\begin{verbatim}
- STATUS = 0
-
- ...
-
- CALL AST_ROUTINEA( ... , STATUS )
- CALL AST_ROUTINEB( ... , STATUS )
- CALL AST_ROUTINEC( ... , STATUS )
- IF ( STATUS .NE. 0 ) THEN
- <an error has occurred>
- END IF
-\end{verbatim}
-\normalsize
-
-There are, however, a few routines which do not adhere to this general
-rule and which will attempt to execute if their STATUS argument is
-initially set. These routines, such as \htmlref{AST\_ANNUL}{AST_ANNUL}, are concerned with
-cleaning up and recovering resources. For example, in the following:
-
-\small
-\begin{verbatim}
- STATUS = 0
-
- ...
-
- ZOOMMAP = AST_ZOOMMAP( 2, 5.0D0, ' ', STATUS )
-
- CALL AST_ROUTINEX( ... , STATUS )
- CALL AST_ROUTINEY( ... , STATUS )
- CALL AST_ROUTINEZ( ... , STATUS )
-
- CALL AST_ANNUL( ZOOMMAP, STATUS )
- IF ( STATUS .NE. 0 ) THEN
- <an error has occurred>
- END IF
-\end{verbatim}
-\normalsize
-
-AST\_ANNUL will execute normally in order to recover the resources
-associated with the ZoomMap that was created earlier, regardless of
-whether an error has occurred in any of the intermediate routines.
-Routines which behave in this way are noted in the relevant
-descriptions in \appref{ss:functiondescriptions}.
-
-If a serious error occurs, you will probably want to abort your
-program, but sometimes you may want to recover and carry on. This is
-simply done by resetting your error status variable to zero, whereupon
-the AST routines you pass it to will execute normally again.
-
-
-
-
-
-
-
-\cleardoublepage
-\section{\label{ss:mappings}Inter-Relating Coordinate Systems (Mappings)}
-
-In \secref{ss:primer} we used the \htmlref{ZoomMap}{ZoomMap} as an example of a
-\htmlref{Mapping}{Mapping}. We saw how it could be used to transform coordinates from its
-input to its output and back again (\secref{ss:transforming}). We also
-saw how its behaviour could be controlled by setting various
-attributes, such as the \htmlref{Zoom}{Zoom} factor and the \htmlref{Report}{Report} attribute that made
-it display coordinate values as it transformed them.
-
-In this section, we will look at Mappings a bit more thoroughly and
-explore the behaviour which is common to all the Mappings provided by
-AST. This is good background for what follows, because many of the
-Objects we discuss later will also turn out to be Mappings in various
-disguises.
-
-\subsection{\label{ss:mappingclass}The Mapping Class}
-
-Before we start, it is worth taking a quick look at the \htmlref{Mapping}{Mapping} class
-as a whole and some of the sub-classes it contains:
-
-\begin{quote}
-\begin{verbatim}
- Mapping
- CmpMap
- DssMap
- GrismMap
- IntraMap
- LutMap
- MathMap
- MatrixMap
- PermMap
- PolyMap
- SlaMap
- SpecMap
- TimeMap
- UnitMap
- WcsMap
- ZoomMap
-
- Frame
- <various types of Frame>
-\end{verbatim}
-\end{quote}
-
-The \htmlref{Frame}{Frame} sub-class has been separated out here because it is covered
-in detail in \secref{ss:frames}. We start by looking at the parent
-class, Mapping.
-
-AST does not provide a function to create a basic Mapping
-({\em{i.e.}}\ the AST\_MAPPING constructor does not exist). This is
-because the Mapping class itself is ``virtual'' and basic Mappings are
-of no use in themselves. The Mapping class serves simply to contain
-the various specialised Mappings that exist.
-However, it provides more than just a convenient heading for them
-because it bestows all classes of Mapping with common properties
-({\em{e.g.}}\ attributes) and behaviour. By examining the Mapping
-class, we are therefore examining the things that all other Mappings
-have in common.
-
-\subsection{The Mapping Model}
-
-The concept of a \htmlref{Mapping}{Mapping} was illustrated in Figure~\ref{fig:mapping}.
-It is a black box which you can supply with a set of coordinate values
-in return for a set of transformed coordinates. The two sets are
-termed {\em{input}} and {\em{output}} coordinates. You can also go
-back the other way and transform output coordinates back into input
-coordinates, as we saw in \secref{ss:transforming}.
-
-\subsection{Input and Output Coordinate Numbers}
-
-In general, the number of coordinates you feed into a \htmlref{Mapping}{Mapping} to
-represent a single point need not be the same as the number that comes
-out. Often these numbers will be the same, and often they will both
-equal 2 (because 2-dimensional coordinate systems are common), but
-this needn't necessarily be the case.
-
-The number of coordinates required to specify an input point is
-represented by the integer attribute \htmlref{Nin}{Nin} and the number required to
-specify an output point is represented by \htmlref{Nout}{Nout}. These are read-only
-attributes common to all Mappings. Generally, their values are fixed
-when a Mapping is created.
-
-In \secref{ss:objectcreation}, we saw how the Nin attribute for a
-\htmlref{ZoomMap}{ZoomMap} was initialised by the call to the constructor function
-\htmlref{AST\_ZOOMMAP}{AST_ZOOMMAP} which created it. In this case, the Nout attribute was
-not needed and it implicitly took the same value as Nout, but we could
-have enquired about its value had we wanted, as follows:
-
-\small
-\begin{verbatim}
- INCLUDE 'AST_PAR'
- INTEGER NOUT, STATUS, ZOOMMAP
-
- STATUS = 0
-
- ...
-
- NOUT = AST_GETI( ZOOMMAP, 'Nout', STATUS )
-\end{verbatim}
-\normalsize
-
-\subsection{Forward and Inverse Transformations}
-
-We stated earlier that a \htmlref{Mapping}{Mapping} may be used to transform coordinates
-either from input to output, or {\em{vice versa.}} These are termed
-its {\em{forward}} and {\em{inverse}} transformations.
-
-This statement was not quite accurate, however, because in general
-Mappings are only {\bf{potentially}} capable of working in both
-directions. In practice, coordinate transformation may only be
-feasible in one direction or the other because some functions are not
-easily inverted (they may be multi-valued, for instance). Allowance
-must be made for this, so each Mapping has two read-only boolean
-(integer) attributes, \htmlref{TranForward}{TranForward} and \htmlref{TranInverse}{TranInverse}, which indicate
-whether each transformation is available.
-
-A transformation is available if the corresponding attribute is
-non-zero, otherwise it is not.\footnote{Most of the Mappings provided
-by the AST library work in both directions, although the \htmlref{LutMap}{LutMap} can
-behave otherwise.} If you enquire about the value of these attributes,
-a value of 0 or 1 is returned. Attempting to use a Mapping to apply a
-transformation which is not available will result in an error.
-
-\subsection{\label{ss:invertingmappings}Inverting Mappings}
-
-An important attribute, common to all Mappings, is the \htmlref{Invert}{Invert}
-flag. This is a boolean (integer) attribute that can be assigned a new
-value at any time. If it is non-zero, it has the effect of
-interchanging the \htmlref{Mapping}{Mapping}'s input and output coordinates and the
-Mapping is then said to be {\em{inverted.}} By default, the Invert
-attribute is zero.
-
-There is no magic in this. There is no fancy arithmetic involved in
-inverting mathematical functions, for instance. The Invert flag is
-simply a switch that interchanges a Mapping's input and output
-ports. If it is non-zero, the Mapping's \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes are
-swapped, its \htmlref{TranForward}{TranForward} and \htmlref{TranInverse}{TranInverse} attributes are swapped, and
-when you ask for what was once the forward transformation you get the
-inverse transformation instead (and {\em{vice versa}}). When you
-return the Invert attribute to zero, or clear it, the Mapping returns
-to its original behaviour.
-
-Often, the actual value of the Invert attribute is unimportant and you
-simply wish to invert its boolean sense, so that what was the
-Mapping's input becomes its output and {\em{vice versa.}} This is most
-easily accomplished using \htmlref{AST\_INVERT}{AST_INVERT}, as follows:
-
-\small
-\begin{verbatim}
- INTEGER MAPPING
-
- ...
-
- CALL AST_INVERT( MAPPING, STATUS )
-\end{verbatim}
-\normalsize
-
-If the Mapping you have happens to be the wrong way around,
-AST\_INVERT allows you to correct the problem.
-
-\subsection{Finding the Rate of Change of a Mapping Output}
-The
-\htmlref{AST\_RATE}{AST_RATE}
-function can be used to find the rate of change of any \htmlref{Mapping}{Mapping} output
-with respect to any Mapping input, at a given input position. The method
-used produces good accuracy (typically a relative error of 10E-10 or
-less) but may require the Mapping to be evaluated 100 or more times.
-An estimate of the second derivative is also produced by this function.
-
-
-\subsection{Reporting Coordinate Transformations}
-
-We have already seen (\secref{ss:transforming}) how the boolean
-(integer) \htmlref{Report}{Report} attribute of a \htmlref{Mapping}{Mapping} works. If it is non-zero, the
-operation of transforming a set of coordinates will result in a report
-being written to standard output. This will display the coordinate
-values before and after transformation. It can save considerable time
-during program development by eliminating the need to add loops and
-output statements to your program.
-
-In a finished program, however, you should be careful that the Report
-attribute is not set to a non-zero value unless you want to see the
-output (there may often be rather a lot of this!). To help prevent
-unwanted output being produced by accident, the Report attribute is
-unusual in that its value is not preserved when a Mapping is copied
-using \htmlref{AST\_COPY}{AST_COPY} (\secref{ss:copyingobjects}). Instead, it reverts to
-its default of zero ({\em{i.e.}}\ un-set) in the copy. It also reverts
-to zero when a Mapping is written out, {\em{e.g.}}\ to a file using a
-\htmlref{Channel}{Channel} (\secref{ss:channels}).
-
-%\subsection{TBW---More on Transforming Coordinates}
-
-\subsection{\label{ss:badcoordinates}Handling Missing (Bad) Coordinate Values}
-
-Even when coordinates can, in principle, be transformed in either
-direction by a \htmlref{Mapping}{Mapping}, there may still be instances where specific
-coordinate values cannot be handled. For example, the Mapping may be
-mathematically intractable ({\em{e.g.}}\ singular) in certain places,
-or it may map a subset of one space on to another, so that some points
-in one space are not represented in the other. Sky projections often
-show this behaviour, since it is quite common to project only half of
-the celestial sphere on to two dimensions, omitting points on the
-opposite side of the sky. There are many other examples.
-
-To indicate when coordinates cannot be transformed, for whatever
-reason, AST substitutes a special output coordinate value given by the
-parameter constant AST\_\_BAD (as defined in the AST\_PAR include
-file). Before making use of coordinates generated by any of the AST
-transformation routines, therefore, you may need to check for the
-presence of this value.
-
-Because coordinates with the value AST\_\_BAD can be generated in this
-way, all other AST routines are also capable of recognising this value
-and handling it appropriately. The coordinate transformation routines
-do this by propagating any missing input coordinate information
-through to their output. This means that if you supply coordinates
-with the value AST\_\_BAD, the returned coordinates are also likely to
-contain this value. Here, for example, is what happens if you use a
-\htmlref{ZoomMap}{ZoomMap} (with \htmlref{Zoom}{Zoom} factor 5) to transform such a set of coordinates:
-
-\begin{quote}
-\small
-\begin{verbatim}
-(0, 0) --> (0, 0)
-(<bad>, 2) --> (<bad>, 10)
-(2, 4) --> (10, 20)
-(3, 6) --> (15, 30)
-(4, <bad>) --> (20, <bad>)
-(5, 10) --> (25, 50)
-(<bad>, <bad>) --> (<bad>, <bad>)
-(7, 14) --> (35, 70)
-(8, 16) --> (40, 80)
-(9, 18) --> (45, 90)
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The AST\_\_BAD value is represented by the string ``$<$bad$>$''. This
-is a case of ``garbage in, garbage out'' but at least it's consistent
-garbage that you can recognise!
-
-Note how the presence of the AST\_\_BAD value in one input dimension
-does not necessarily result in the loss of information for all output
-dimensions. Sometimes, such loss will be unavoidable, but in general
-an attempt is made to preserve information as far as possible. The
-exact behaviour will depend on the Mapping involved.
-
-\subsection{\label{ss:unitmapexample}Example---the UnitMap}
-
-The \htmlref{UnitMap}{UnitMap} is the simplest of Mappings. It is a null \htmlref{Mapping}{Mapping}. Its
-purpose is simply to copy coordinate values, unaltered, from its input
-to its output and {\em{vice versa.}}
-
-A UnitMap has no additional attributes beyond those of a basic
-Mapping. Its \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes are always equal and are
-specified by the first argument supplied to its constructor. For
-example:
-
-\small
-\begin{verbatim}
- INTEGER UNITMAP
-
- ...
-
- UNITMAP = AST_UNITMAP( 2, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-will create a UnitMap that copies 2-dimensional coordinates. Inverting
-a UnitMap has no effect beyond changing the value of its \htmlref{Invert}{Invert}
-attribute.
-
-The main use of a UnitMap is to allow a Mapping to be supplied when one
-is required (as an argument to a routine, for example) but you wish
-it to leave coordinate values unchanged.
-
-\subsection{\label{ss:permmapexample}Example---the PermMap}
-
-The \htmlref{PermMap}{PermMap} is a rather more complicated \htmlref{Mapping}{Mapping} than we have met
-previously. Its purpose is to change the order, or number, of
-coordinates. It is also able to substitute fixed values for
-coordinates.
-
-To illustrate its action, suppose our input coordinates are denoted by
-($x_1,x_2,x_3,x_4$) in a 4-dimensional space and suppose our output
-coordinates are to be ($x_4,x_1,x_2,x_3$). Our PermMap, therefore,
-should rotate the coordinate values by one position.
-
-To create such a PermMap, we first set up two integer arrays. One of
-these, OUTPERM, controls the selection of input coordinates for use in
-the output and the other, INPERM, controls selection of output
-coordinates for use in the input:
-
-\small
-\begin{verbatim}
- INTEGER OUTPERM( 4 ), INPERM( 4 )
- DATA OUTPERM / 4, 1, 2, 3 /
- DATA INPERM / 2, 3, 4, 1 /
-\end{verbatim}
-\normalsize
-
-Note that the numbers we store in these arrays are the indices of the
-coordinates that we want to select. We have chosen these so that the
-forward and inverse transformations will perform complementary
-permutations on the coordinates.
-
-The PermMap is then created by passing these arrays to its
-constructor, as follows:
-
-\small
-\begin{verbatim}
- INTEGER PERMMAP
- DOUBLE PRECISION DUMMY( 1 )
-
- ...
-
- PERMMAP = AST_PERMMAP( 4, INPERM, 4, OUTPERM, DUMMY, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-(the fifth argument is not being used, so a dummy array has been supplied).
-Note that we specify the number of input and output coordinates
-separately, but set both to 4 in this example. The resulting PermMap
-would have the following effect when used to transform coordinates:
-
-\begin{quote}
-\begin{verbatim}
-Forward:
- (1, 2, 3, 4) --> (4, 1, 2, 3)
- (2, 4, 6, 8) --> (8, 2, 4, 6)
- (3, 6, 9, 12) --> (12, 3, 6, 9)
- (4, 8, 12, 16) --> (16, 4, 8, 12)
- (5, 10, 15, 20) --> (20, 5, 10, 15)
-
-Inverse:
- (4, 1, 2, 3) --> (1, 2, 3, 4)
- (8, 2, 4, 6) --> (2, 4, 6, 8)
- (12, 3, 6, 9) --> (3, 6, 9, 12)
- (16, 4, 8, 12) --> (4, 8, 12, 16)
- (20, 5, 10, 15) --> (5, 10, 15, 20)
-\end{verbatim}
-\end{quote}
-
-If the number of input and output coordinates are unequal so, also,
-will be the size of the OUTPERM and INPERM arrays. This means,
-however, that we cannot fill them with coordinate indices so that they
-perform complementary permutations, because one transformation will
-lose information (discard a coordinate) that the other cannot recover.
-To give an example, consider the following:
-
-\small
-\begin{verbatim}
- INTEGER OUTPERM( 3 ), INPERM( 4 )
- DOUBLE PRECISION CONST( 1 )
- DATA OUTPERM / 4, 3, 2 /
- DATA INPERM / -1, 3, 2, 1 /
- DATA CONST / 99.004D0 /
-\end{verbatim}
-\normalsize
-
-In this case, the forward transformation will change
-($x_1,x_2,x_3,x_4$) into ($x_4,x_3,x_2$) and will discard $x_1$. The
-inverse transformation restores the original coordinate order, but has
-no value to assign to the first coordinate. In this case, the number
-entered in the INPERM array is $-$1.
-
-This negative value indicates that the coordinate value should be
-obtained by addressing the CONST array using an index of 1 (the
-absolute value). This array, ignored in the previous example, may then
-be used to supply a value for the missing coordinate.
-
-The constructor function:
-
-\small
-\begin{verbatim}
- PERMMAP = AST_PERMMAP( 4, INPERM, 3, OUTPERM, CONST, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-will then create a PermMap with the following effect when used to
-transform coordinates:
-
-\begin{quote}
-\begin{verbatim}
-Forward:
- (1, 2, 3, 4) --> (4, 3, 2)
- (2, 4, 6, 8) --> (8, 6, 4)
- (3, 6, 9, 12) --> (12, 9, 6)
- (4, 8, 12, 16) --> (16, 12, 8)
- (5, 10, 15, 20) --> (20, 15, 10)
-
-Inverse:
- (4, 3, 2) --> (99.004, 2, 3, 4)
- (8, 6, 4) --> (99.004, 4, 6, 8)
- (12, 9, 6) --> (99.004, 6, 9, 12)
- (16, 12, 8) --> (99.004, 8, 12, 16)
- (20, 15, 10) --> (99.004, 10, 15, 20)
-\end{verbatim}
-\end{quote}
-
-The CONST array may contain more than one value if necessary and may
-be addressed by both the INPERM and OUTPERM arrays using coordinate
-indices $-$1, $-$2, $-$3,~{\em{etc.}}\ to refer to the first, second,
-third,~{\em{etc.}}\ elements.
-
-If there is no suitable replacement value that can be supplied
-{\em{via}} the CONST array, a value of zero may be entered into the
-OUTPERM and/or INPERM arrays. This causes the value AST\_\_BAD to be
-used for the affected coordinate (as defined in the AST\_PAR include
-file), thus indicating a missing coordinate value
-(\secref{ss:badcoordinates}).
-
-The principle use for a PermMap lies in matching a coordinate system
-to a data array where there is a choice of storage order for the data.
-PermMaps are also useful for discarding unwanted coordinates so as to
-reduce the number of dimensions, such as when selecting a ``slice''
-from a multi-dimensional array.
-
-\cleardoublepage
-\section{\label{ss:cmpmaps}Compound Mappings (CmpMaps)}
-
-We now turn to a rather special form of \htmlref{Mapping}{Mapping}, the \htmlref{CmpMap}{CmpMap}. The
-Mappings we have considered so far have been atomic, in the sense that
-they perform pre-defined elementary transformations. A CmpMap,
-however, is a compound Mapping. In essence, it is a framework for
-containing other Mappings and its purpose is to allow those Mappings
-to work together in various combinations while appearing as a single
-\htmlref{Object}{Object}. A CmpMap's behaviour is therefore not pre-defined, but is
-determined by the other Mappings it contains.
-
-\subsection{\label{ss:seriescmpmap}Combining Mappings in Series}
-
-Consider a simple example based on two 2-dimensional coordinate
-systems. Suppose that to convert from one to the other we must swap
-the coordinate order and multiply both coordinates by 5, so that the
-coordinates ($x_1,x_2$) transform into ($5x_2,5x_1$). This can be done
-in two stages:
-
-\begin{enumerate}
-\item Apply a \htmlref{PermMap}{PermMap} (\secref{ss:permmapexample}) to swap the
-coordinate order.
-
-\item Apply a \htmlref{ZoomMap}{ZoomMap} (\secref{ss:transforming}) to multiply both
-coordinate values by the constant 5.
-\end{enumerate}
-
-The PermMap and ZoomMap are then said to operate {\em{in series,}}
-because they are applied sequentially
-({\em{c.f.}}\ Figure~\ref{fig:seriescmpmap}). We can create a \htmlref{CmpMap}{CmpMap}
-that applies these Mappings in series as follows:
-
-\small
-\begin{verbatim}
- INCLUDE 'AST_PAR'
- INTEGER CMPMAP, PERMMAP, STATUS, ZOOMMAP
- INTEGER INPERM( 2 ), OUTPERM( 2 ), CONST( 1 )
- DATA INPERM / 1, 2 /
- DATA OUTPERM / 1, 2 /
-
- STATUS = 0
-
- ...
-
-* Create the individual Mappings.
- PERMMAP = AST_PERMMAP( 2, INPERM, 2, OUTPERM, CONST, ' ', STATUS )
- ZOOMMAP = AST_ZOOMMAP( 2, 5.0D0, ' ', STATUS )
-
-* Combine them in series.
- CMPMAP = AST_CMPMAP( PERMMAP, ZOOMMAP, .TRUE., ' ', STATUS )
-
-* Annul the individual Mapping pointers.
- CALL AST_ANNUL( PERMMAP, STATUS )
- CALL AST_ANNUL( ZOOMMAP, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, the third argument (.TRUE.) of the constructor function
-\htmlref{AST\_CMPMAP}{AST_CMPMAP} indicates ``in series''.
-
-When used to transform coordinates in the forward direction, the
-resulting CmpMap will apply the first component \htmlref{Mapping}{Mapping} (the PermMap)
-and then the second one (the ZoomMap). When transforming in the
-inverse direction, it will apply the second one (in the inverse
-direction) and then the first one (also in the inverse direction). In
-general, although not in this particular example, the order in which
-the two component Mappings are supplied is significant. Clearly, also,
-the \htmlref{Nout}{Nout} attribute (number of output coordinates) for the first
-Mapping must equal the \htmlref{Nin}{Nin} attribute (number of input coordinates) for
-the second one.
-
-\subsection{Combining Mappings in Parallel}
-
-Connecting two Mappings in series (\secref{ss:seriescmpmap}) is not the
-only way of combining them. The alternative, {\em{in parallel,}}
-involves applying the two Mappings at once but on different subsets of
-the coordinate values.
-
-Consider, for example, a set of 3-dimensional coordinates and suppose
-we wish to transform them by swapping the first two coordinate values
-and multiplying the final one by 5, so that ($x_1,x_2,x_3$) transforms
-into ($x_2,x_1,5x_3$). Again, we can perform each of these steps
-individually using exactly the same \htmlref{PermMap}{PermMap} and \htmlref{ZoomMap}{ZoomMap} as used
-earlier (\secref{ss:seriescmpmap}). In this case, however, these
-individual Mappings are applied in parallel
-({\em{c.f.}}\ Figure~\ref{fig:parallelcmpmap}).
-
-Creating a \htmlref{CmpMap}{CmpMap} for this purpose is also very simple:
-
-\small
-\begin{verbatim}
- CMPMAP = AST_CMPMAP( PERMMAP, ZOOMMAP, .FALSE., ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-The only difference is that the third argument of \htmlref{AST\_CMPMAP}{AST_CMPMAP} is now
-.FALSE., meaning ``in parallel''.
-
-As before, the order in which the two component Mappings are supplied
-is significant. The first one acts on the lower-numbered input
-coordinate values (however many it needs) and produces the
-lower-numbered output coordinates, while the second \htmlref{Mapping}{Mapping} acts on
-the higher-numbered input coordinates (however many remain) and
-generates the remaining higher-numbered output coordinates. When the
-CmpMap transforms coordinates in the inverse direction, both component
-Mappings are applied to the same coordinates, but in the inverse
-direction.
-
-Note that the \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes of the component Mappings
-({\em{i.e.}}\ the numbers of input and output coordinates) will sum to
-give the Nin and Nout attributes of the overall CmpMap.
-
-\subsection{\label{ss:cmpmapcomponents}The Component Mappings}
-
-A \htmlref{CmpMap}{CmpMap} does not store copies of its component Mappings, but simply
-holds pointers to them. In th example above (\secref{ss:seriescmpmap}),
-we were free to annul the individual \htmlref{Mapping}{Mapping} pointers after creating
-the CmpMap because the pointers held internally by the CmpMap
-increased the reference count (\htmlref{RefCount}{RefCount} attribute) of each component
-Mapping by one. The individual components are therefore not deleted by
-\htmlref{AST\_ANNUL}{AST_ANNUL}, but retained until the CmpMap itself is deleted and annuls
-the pointers it holds. Consistent use of AST\_ANNUL
-(\secref{ss:annullingpointers}) and/or pointer contexts
-(\secref{ss:contexts}) will therefore ensure that all Objects are
-deleted at the appropriate time.
-
-Note that access to a CmpMap's component Mappings is not generally
-available unless pointers to them are retained when the CmpMap is
-created. If such pointers are retained, then subsequent modifications
-to the individual components can be used to indirectly modify the
-behaviour of the overall CmpMap.
-
-There is an important exception to this, however, because a CmpMap
-retains a copy of the initial \htmlref{Invert}{Invert} flag settings of each of its
-components and uses these in order to ignore any subsequent external
-changes. This means that you may invert either component Mapping
-before inserting it into a CmpMap and need not worry if you un-invert
-it again later. The CmpMap's behaviour will not be affected by the
-later action.
-
-\subsection{\label{ss:complexcmpmap}Creating More Complex Mappings}
-
-Because a \htmlref{CmpMap}{CmpMap} is itself a \htmlref{Mapping}{Mapping}, any existing CmpMap can
-substitute (\secref{ss:objecthierarchy}) as a component Mapping when
-constructing a new CmpMap using \htmlref{AST\_CMPMAP}{AST_CMPMAP}. This has the effect of
-nesting one CmpMap inside another and opens up many new possibilities.
-For example, combining three Mappings in series can be accomplished as
-follows:
-
-\small
-\begin{verbatim}
- INTEGER MAP1, MAP2, MAP3
-
- ...
-
- CMPMAP = AST_CMPMAP( MAP1, AST_CMPMAP( MAP2, MAP3, .TRUE., ' ', STATUS ),
- : .TRUE., ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-The way in which the individual component Mappings are grouped within
-the nested CmpMaps is not usually important.
-
-A similar technique can be used to combine multiple Mappings in
-parallel and, of course, mixed series and parallel combinations are
-also possible (Figure~\ref{fig:complexcmpmap}). There is no built-in
-limit to how many CmpMaps may be nested in this way, so this mechanism
-provides an indefinitely extensible method of building complex
-Mappings out of the elemental building blocks provided by AST.
-
-In practice, you might not need to construct such complex CmpMaps
-yourself very frequently, but they will often be returned by AST
-routines. Nested CmpMaps underlie the library's entire ability to
-represent a wide range of different coordinate transformations.
-
-\subsection{\label{ss:cmpmapexample}Example---Transforming Between Two Calibrated Images}
-
-Consider, as a practical example of CmpMaps, two images of the
-sky. Suppose that for each image we have a \htmlref{Mapping}{Mapping} which converts from
-pixel coordinates to a standard celestial coordinate system, say
-FK5~(J2000.0). If we wish to inter-compare these images, we can do so
-by using this celestial coordinate system to align them. That is, we
-first convert from pixel coordinates in the first image into FK5
-coordinates and we then convert from FK5 coordinates into pixel
-coordinates in the second image.
-
-If MAPA and MAPB are pointers to our two original Mappings, we could
-form a \htmlref{CmpMap}{CmpMap} which transforms directly between the pixel coordinates
-of the first and second images by combining these Mappings, as
-follows:
-
-\small
-\begin{verbatim}
- INTEGER ALIGNMAP, MAPA, MAPB
-
- ...
-
- CALL AST_INVERT( MAPB, STATUS )
- ALIGNMAP = AST_CMPMAP( MAPA, MAPB, .TRUE., ' ', STATUS )
- CALL AST_INVERT( MAPB, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, we have used \htmlref{AST\_INVERT}{AST_INVERT} (\secref{ss:invertingmappings}) to
-invert MAPB before inserting it into the CmpMap because, as supplied,
-it converted in the wrong direction. Afterwards, we invert it again to
-return it to its original state. The CmpMap, however, will ignore this
-subsequent change (\secref{ss:cmpmapcomponents}).
-
-The forward transformation of the resulting CmpMap will now transform
-from pixel coordinates in the first image to pixel coordinates in the
-second image, while its inverse transformation will convert in the
-opposite direction.
-
-\subsection{\label{ss:overcomplexcmpmaps}Over-Complex Compound Mappings}
-
-While a \htmlref{CmpMap}{CmpMap} provides a very flexible way of constructing
-arbitrarily complex Mappings (\secref{ss:complexcmpmap}), it
-unfortunately also provides an opportunity for representing simple
-Mappings in complex ways. Sometimes, unnecessary complexity can be
-difficult to avoid but can obscure important simplifications.
-
-Consider the example above (\secref{ss:cmpmapexample}), in which we
-inter-related two images of the sky {\em{via}} a CmpMap. If the two
-images turned out to be simply offset from each other by a shift along
-each pixel axis, then this approach would align them correctly, but it
-would be inefficient. This is because it would introduce unnecessary
-and expensive transformations to and from an intermediate celestial
-coordinate system, whereas a simple shift of pixel origin would
-suffice.
-
-Recognising that a simpler and more efficient solution exists
-obviously requires a little more than simply joining two Mappings
-end-to-end. We must also determine whether the resulting CmpMap is
-more complex than it needs to be, {\em{i.e.}}\ contains redundant
-information. If it is, we then need a way to simplify it.
-
-The problem is not always just one of efficiency, however. Sometimes
-we may also need to know something about the actual form a \htmlref{Mapping}{Mapping}
-takes---{\em{i.e.}}\ the nature of the operations it performs.
-Unnecessary complexity can obscure this, but such complexity can
-easily accumulate during normal data processing.
-
-For example, a Mapping that transforms pixel coordinates into
-positions on the sky might be repeatedly modified as changes are made
-to the shape and size of the image. Typically, on each occasion,
-another Mapping will be concatenated to reflect what has happened to
-the image. This could soon make it difficult to discern the overall
-nature of the transformation from the complex CmpMap that
-accumulates. If only shifts of origin were involved on each occasion,
-however, they could be combined into a single shift which could be
-represented much more simply.
-
-Suppose we now wanted to represent our image's celestial coordinate
-calibration using FITS conventions (\secref{ss:foreignfits}). This
-requires AST to determine whether the Mapping which relates pixel
-coordinate to sky positions conforms to the FITS model (for example,
-whether it is equivalent to applying a single set of shifts and scale
-factors followed by a map projection). Clearly, there is an important
-use here for some means of simplifying the internal structure of a
-CmpMap.
-
-\subsection{\label{ss:simplifyingcmpmaps}Simplifying Compound Mappings}
-
-The ability to simplify compound Mappings is provided by the
-\htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY} function. This function encapsulates a number of
-heuristics for converting Mappings, or combinations of Mappings within
-a \htmlref{CmpMap}{CmpMap}, into simpler, equivalent ones. When applied to a CmpMap,
-AST\_SIMPLIFY tries to reduce the number of individual Mappings within
-it by merging neighbouring component Mappings together. It will do
-this with both series and parallel combinations of Mappings, or both,
-and will handle CmpMaps nested to any depth
-(\secref{ss:complexcmpmap}).
-
-\begin{latexonly}
- To illustrate how AST\_SIMPLIFY works, consider the combination of
- Mappings shown in Figure~\ref{fig:simplifyexample}.
- \begin{figure}
- \begin{center}
- \includegraphics[scale=0.65]{sun210_figures/simpexamp.eps}
- \caption{An over-complex compound \htmlref{Mapping}{Mapping}, consisting of PermMaps,
- ZoomMaps and a \htmlref{UnitMap}{UnitMap}, which can be simplified to become a single
- UnitMap. The enclosing nested CmpMaps have been omitted for clarity.}
- \label{fig:simplifyexample}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- To illustrate how AST\_SIMPLIFY works, consider the combination of
- Mappings shown in the Figure below.
- \begin{quote}
- \begin{figure}
- \label{fig:simplifyexample}
- \includegraphics[scale=1.1]{sun210_figures/simpexamp.eps}
- \caption{An over-complex compound Mapping, consisting of PermMaps,
- ZoomMaps and a UnitMap, which can be simplified to become a single
- UnitMap. The enclosing nested CmpMaps have been omitted for clarity.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-If this were contained in a CmpMap, it could be simplified as follows:
-
-\small
-\begin{verbatim}
- INTEGER SIMPLER
-
- ...
-
- SIMPLER = AST_SIMPLIFY( CMPMAP, STATUS );
-\end{verbatim}
-\normalsize
-
-In this case, the result would be a simple 3-dimensional UnitMap (the
-identity Mapping). To reach this conclusion, AST\_SIMPLIFY will have
-made a number of deductions, roughly as follows:
-
-\begin{enumerate}
-\item The two 2-dimensional ZoomMaps in series are equivalent to a
-single \htmlref{ZoomMap}{ZoomMap} with a combined \htmlref{Zoom}{Zoom} factor of unity. This, in turn, is
-equivalent to a 2-dimensional UnitMap.
-
-\item This UnitMap in parallel with the other 1-dimensional UnitMap is
-equivalent to a single 3-dimensional UnitMap. This UnitMap, sandwiched
-between any other pair of Mappings, can then be eliminated.
-
-\item The remaining two PermMaps in series are equivalent to a single
-3-dimensional \htmlref{PermMap}{PermMap}. When these are combined, the resulting PermMap
-is found to be equivalent to a 3-dimensional UnitMap.
-\end{enumerate}
-
-This example is a little contrived, but illustrates how AST\_SIMPLIFY
-can deal with even quite complicated compound Mappings through a
-series of incremental simplifications. Where possible, this will
-result in either a simpler compound Mapping or, if feasible, an atomic
-(non-compound) Mapping, as here. If no simplification is possible,
-AST\_SIMPLIFY will just return a pointer to the original Mapping.
-
-Although AST\_SIMPLIFY cannot identify every simplification that is
-theoretically possible, sufficient rules are included to deal with the
-most common and important cases.
-
-\cleardoublepage
-\section{\label{ss:frames}Representing Coordinate Systems (Frames)}
-
-An AST \htmlref{Frame}{Frame} is an \htmlref{Object}{Object} that is used to represent a coordinate
-system. Contrast this with a \htmlref{Mapping}{Mapping} (\secref{ss:mappings}), which is
-used to describe how to convert between coordinate systems. The two
-concepts are complementary and we will see how they work together in
-\secref{ss:framesets}.
-
-In this section we will discuss only basic Frames, which represent
-Cartesian coordinate systems. More specialised types of Frame
-({\em{e.g.}}\ the \htmlref{SkyFrame}{SkyFrame}, which represents celestial coordinate
-systems, and the \htmlref{SpecFrame}{SpecFrame}, which represents spectral coordinate
-systems) are covered later (\secref{ss:skyframes} and \secref{ss:specframes})
-and, naturally, inherit the properties and behaviour of the simple Frames
-discussed here.
-
-\subsection{The Frame Model}
-
-The best way to think about a \htmlref{Frame}{Frame} is like the frame that you would
-plot around a graph. In two dimensions, you would have an ``$x$'' and
-a ``$y$'' axis, a title on the graph and labels on the axes, together
-with an indication of the physical units being plotted. The values
-marked along each axis would be formatted in a human-readable way. The
-frame around a graph therefore defines a coordinate space within which
-you can locate points, draw lines, calculate distances, {\em{etc.}}
-
-An AST Frame works in much the same way, embodying all of these
-concepts and a few more. It also allows any number of axes, which
-means that a Frame can represent coordinate systems with any number of
-dimensions. You specify how many when you create it.
-
-Remember that the basic Frame we are considering here is completely
-general. It knows nothing of celestial coordinates, for example, and
-all its axes are equivalent. It can be adapted to describe any general
-purpose Cartesian coordinate system by setting its attributes, such as
-its \htmlref{Title}{Title} and axis Labels, {\em{etc.}}\ to appropriate values.
-
-\subsection{\label{ss:creatingframes}Creating a Frame}
-
-Creating a \htmlref{Frame}{Frame} is straightforward and follows the usual pattern:
-
-\small
-\begin{verbatim}
- INCLUDE 'AST_PAR'
- INTEGER FRAME, STATUS
-
- STATUS = 0
-
- ...
-
- FRAME = AST_FRAME( 2, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-The first argument of the \htmlref{AST\_FRAME}{AST_FRAME} constructor function specifies
-the number of axes which the Frame should have.
-
-\subsection{\label{ss:frameasmapping}Using a Frame as a Mapping}
-
-We should briefly point out that the \htmlref{Frame}{Frame} we created above
-(\secref{ss:creatingframes}) is also a \htmlref{Mapping}{Mapping}
-(\secref{ss:mappingclass}) and therefore inherits the properties and
-behaviour common to other Mappings.
-
-One way to see this is to set the Frame's \htmlref{Report}{Report} attribute (inherited
-from the Mapping class) to a non-zero value and pass the Frame pointer
-to a coordinate transformation routine, such as \htmlref{AST\_TRAN2}{AST_TRAN2}.
-
-\small
-\begin{verbatim}
- DOUBLE PRECISION XIN( 5 ), YIN( 5 ), XOUT( 5 ), YOUT( 5 )
- DATA XIN / 0D0, 1D0, 2D0, 3D0, 4D0, 5D0 /
- DATA YIN / 0D0, 2D0, 4D0, 6D0, 8D0, 10D0 /
-
- CALL AST_SET( FRAME, 'Report=1', STATUS )
- CALL AST_TRAN2( FRAME, 5, XIN, YIN, .TRUE., XOUT, YOUT, STATUS )
-\end{verbatim}
-\normalsize
-
-The resulting output might then look like this:
-
-\begin{quote}
-\begin{verbatim}
-(1, 2) --> (1, 2)
-(2, 4) --> (2, 4)
-(3, 6) --> (3, 6)
-(4, 8) --> (4, 8)
-(5, 10) --> (5, 10)
-\end{verbatim}
-\end{quote}
-
-This is not very exciting because a Frame implements an identity
-transformation just like a \htmlref{UnitMap}{UnitMap}
-(\secref{ss:unitmapexample}). However, it illustrates that a Frame can
-be used as a Mapping and that its \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes are both
-equal to the number of Frame axes.
-
-When we consider more specialised Frames
-({\em{e.g.}}~\secref{ss:framesets}), we will see that using them as
-Mappings can be very useful indeed.
-
-\subsection{\label{ss:frameaxisattributes}Frame Axis Attributes}
-
-Frames have a number of attributes which can take multiple values, one
-for each axis. These separate values are identified by appending the
-axis number in parentheses to the attribute name. For example, the
-Label(1) attribute is a character string containing the label which
-appears on the first axis.
-
-\htmlref{Axis}{Axis} attributes are accessed in the same way as all other attributes
-(\secref{ss:gettingattributes}, \secref{ss:settingattributes} and
-\secref{ss:defaultingattributes}). For example, the Label on the second
-axis might be obtained as follows:
-
-\small
-\begin{verbatim}
- CHARACTER * ( 70 ) LABEL
-
- ...
-
- LABEL = AST_GETC( FRAME, 'Label(2)', STATUS )
-\end{verbatim}
-\normalsize
-
-Other attribute access routines (AST\_SETx, \htmlref{AST\_TEST}{AST_TEST} and \htmlref{AST\_CLEAR}{AST_CLEAR})
-may also be applied to axis attributes in the same way.
-
-If the axis number is stored in a program variable, then its value
-must be formatted to generate a suitable attribute name before using
-this to access the attribute itself. For example, the following will
-print out the Label value for each axis of a \htmlref{Frame}{Frame}:
-
-\small
-\begin{verbatim}
- CHARACTER * ( 10 ) AXIS
- INTEGER IAXIS
-
- ...
-
- DO 1 IAXIS = 1, AST_GETI( FRAME, 'Naxes', STATUS )
- WRITE ( AXIS, '( I10 )' ) IAXIS
- LABEL = AST_GETC( FRAME, 'Label(' // AXIS // ')', STATUS )
- WRITE ( *, 199 ) IAXIS, LABEL
- 199 FORMAT ( 'Label ', I2, ': ', A )
- 1 CONTINUE
-\end{verbatim}
-\normalsize
-
-Note the use of the \htmlref{Naxes}{Naxes} attribute to determine the number of Frame
-axes.
-
-The output from this might look like the following:
-
-\begin{quote}
-\begin{verbatim}
-Label 1: Axis 1
-Label 2: Axis 2
-\end{verbatim}
-\end{quote}
-
-In this case, the Frame's default axis Labels have been revealed as
-rather un-exciting. Normally, you would set much more useful values,
-typically when you create the Frame---perhaps something like:
-
-\small
-\begin{verbatim}
- FRAME = AST_FRAME( 2, 'Label(1)=Offset from centre of field,' //
- 'Unit(1) =mm,' //
- 'Label(2)=Transmission coefficient,' //
- 'Unit(2) =%', STATUS )
-\end{verbatim}
-\normalsize
-
-Here, we have also set the (character string) Unit attribute for each
-axis to describe the physical units represented on that axis. All the
-attribute assignments have been combined into a single string,
-separated by commas.
-
-\subsection{\label{ss:frameattributes}Frame Attributes}
-
-We will now briefly outline the various attributes associated with a
-\htmlref{Frame}{Frame} (this is, of course, in addition to those inherited from the
-\htmlref{Mapping}{Mapping} class). We will not delve too deeply into the details of each
-attribute, for which you should consult the appropriate description in
-\appref{ss:attributedescriptions}. Instead, we aim simply to sketch
-the range of facilities available:
-
-\begin{quote}
-\begin{description}
-\item[\htmlref{Naxes}{Naxes}]\mbox{}\\
-A read-only integer giving the number of Frame axes.
-
-\item[\htmlref{Title}{Title}]\mbox{}\\
-A string describing the coordinate system which the Frame represents.
-
-\item[\htmlref{Label(axis)}{Labelaxis}]\mbox{}\\
-A label string for each axis.
-
-\item[\htmlref{Unit(axis)}{Unitaxis}]\mbox{}\\
-A string describing the physical units on each axis. You can choose
-whether to make this attribute ``active'' or ``passive'' (using
-\htmlref{AST\_SETACTIVEUNIT}{AST_SETACTIVEUNIT}
-). If active, its value will be taken into account when finding the
-Mapping between two Frames (\emph{e.g.} a scaling of 0.001 would be used
-to connect two axis with units of ``km'' and ``m''). If passive, its value
-is ignored. Its use is described in more detail in \secref{ss:frameunits}.
-
-\item[\htmlref{Symbol(axis)}{Symbolaxis}]\mbox{}\\
-A string containing a ``short form'' symbol ({\em{e.g.}}\ like ``X''
-or ``Y'') used to represent the quantity plotted on each axis.
-
-\item[\htmlref{Digits/Digits(axis)}{DigitsDigitsaxis}]\mbox{}\\
-The preferred number of digits of precision to be used when formatting
-values for display on each axis.
-
-\item[\htmlref{Format(axis)}{Formataxis}]\mbox{}\\
-A string containing a {\em{format specifier}} which determines exactly
-how values should be formatted for display on each axis
-(\secref{ss:formattingaxisvalues}). If this attribute is un-set, the
-formatting is based on the Digits value, otherwise the Format string
-over-rides the Digits value.
-
-\item[\htmlref{Direction(axis)}{Directionaxis}]\mbox{}\\
-A boolean (integer) value which indicates in which direction each axis
-should be plotted. If it is non-zero (the default), the axis should be
-plotted in the conventional direction---{\em{i.e.}}\ increasing to the
-right for the abscissa and increasing upwards for the ordinate. If it
-is zero, the axis should be plotted in reverse. This attribute is
-provided as a hint only and programs are free to ignore it if they
-wish.
-
-\item[\htmlref{Domain}{Domain}]\mbox{}\\
-A character string which identifies the {\em{physical domain}} to
-which the Frame's coordinate system applies. The primary purpose of
-this attribute is to prevent unwanted conversions from occurring
-between coordinate systems which are not related. Its use is described
-in more detail in \secref{ss:framedomains}.
-
-\item[\htmlref{System}{System}]\mbox{}\\
-A character string which identifies the specific coordinate system used
-to describe positions within the physical domain represented by the Frame.
-For a simple Frame, this attribute currently has a fixed value of
-``Cartesian'', but could in principle be extended to include options such
-as ``Polar'', ``Cylindrical'', {\em{etc}}. More specialised Frames such
-as the \htmlref{SkyFrame}{SkyFrame}, \htmlref{TimeFrame}{TimeFrame} and \htmlref{SpecFrame}{SpecFrame}, re-define the allowed values to be
-appropriate to the domain which they describe. For instance, the SkyFrame
-allows values such as ``FK4'' and ``Galactic'', and the SpecFrame allows
-values such as ``frequency'' and ``wavelength''.
-
-\item[\htmlref{Epoch}{Epoch}]\mbox{}\\
-This value is used to qualify a coordinate system by giving the moment in
-time when the coordinates are correct. Usually, this will be the date of
-observation. The Epoch value is important in cases where coordinates
-systems move with respect to each other over time. An example of two such
-coordinate systems are the FK4 and FK5 celestial coordinate systems.
-
-\item[\htmlref{ObsLon}{ObsLon}]\mbox{}\\
-Specifies the longitude of the observer (assumed to be on the surface of
-the earth). The basic Frame class does not use this value, but
-specialised sub-classes may. For instance, the SpecFrame class uses it to
-calculate the relative velocity of the observer and the centre of the
-earth for use in converting between standards of rest.
-
-\item[\htmlref{ObsLat}{ObsLat}]\mbox{}\\
-Specifies the latitude of the observer. Use in conjunction with ObsLon.
-
-\end{description}
-\end{quote}
-
-There are also some further Frame attributes, not described above,
-which are important when Frames are used as templates to search for
-other Frames. Their use goes beyond the present discussion.
-%TBW---Add reference here.
-
-\subsection{\label{ss:formattingaxisvalues}Formatting Axis Values}
-
-The coordinate values associated with each axis of a \htmlref{Frame}{Frame} are stored
-({\em{e.g.}}\ within your program) as double precision values. The
-Frame class therefore provides a function, \htmlref{AST\_FORMAT}{AST_FORMAT}, to convert
-these values into formatted strings for display:
-
-\small
-\begin{verbatim}
- CHARACTER * ( 50 ) STRING
- DOUBLE PRECISION VALUE
-
- ...
-
- STRING = AST_FORMAT( FRAME, IAXIS, VALUE, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, the AST\_FORMAT character function is passed a Frame pointer,
-the number of an axis (IAXIS) and a double precision value to format
-(VALUE). It returns a character string containing the formatted value.
-\label{ss:formattingwithdigits}
-
-By default, the formatting applied will be determined by the Frame's
-Digits attribute and will normally display results with seven digits
-of precision (corresponding approximately to the Fortran REAL data
-type on many machines). Setting a different Digits value, however,
-allows you to adjust the precision as necessary to suit the accuracy
-of the coordinate data you are processing. If finer control is
-needed, it is also possible to set a Digits value for each individual
-axis by appending an axis number to the attribute name
-({\em{e.g.}}\ ``Digits(2)''). If this is done, it over-rides the
-effect of the Frame's main Digits value for that axis.
-
-Even finer control is possible by setting the (character string)
-Format attribute for a Frame axis. The string given should contain a
-{\em{format specifier}} which explicitly determines how the values on
-that axis should be formatted. This will over-ride the effects of any
-Digits value\footnote{The exception to this rule is that if the Format value
-includes a precision of ``$.*$'', then Digits will be used to determine
-the actual precision used.}. Unfortunately for Fortran programmers, this must
-be a C language format specifier,\footnote{This is a consequence of
-implementing the AST library in C.} so you might find the Digits
-approach preferable.
-
-The simplest type of format specifier takes the form ``\%m.nG'', where
-``m'' and ``n'' are integers giving the minimum field width in characters
-and the number of significant digits to display ({\em{e.g.}}\
-``\%10.5G''). The ''n'' value may be replaced by an asterisk, in which
-case the value of the Digits attribute is used to determine the number of
-significant digits to display. Other formatting options are also possible
-and if you need to use them you may wish to consult a book on C (see the
-``printf'' function), remembering that you want to format a double
-precision (C double) value.
-
-It is recommended that you use AST\_FORMAT whenever you display
-formatted coordinate values, even although you could format them
-yourself using a WRITE statement. This is because it puts the Frame in
-control of formatting. When you start to handle more elaborate Frames
-(representing, say, celestial coordinates), you will need different
-formatting methods. This approach delivers them without any change to
-your software.
-
-You should also consider regularly using the \htmlref{AST\_NORM}{AST_NORM} routine,
-described below (\secref{ss:normalising}), for any values that will be
-made visible to the user of your software.
-
-\subsection{\label{ss:normalising}Normalising Frame Coordinates}
-
-The routine \htmlref{AST\_NORM}{AST_NORM} is provided to cope with the fact that some
-coordinate systems do not extend indefinitely in all directions. Some
-may have boundaries, outside which coordinates are meaningless, while
-others wrap around on themselves, so that after a certain distance you
-return to the beginning again (coordinate systems based on circles and
-spheres, for instance). A basic \htmlref{Frame}{Frame} has no such complications, but
-other more specialised Frames (such as SkyFrames, representing the
-celestial sphere---\secref{ss:skyframes}) do.
-
-The role played by AST\_NORM is to {\em{normalise}} any arbitrary set
-of coordinates by converting them into a set which is ``within
-bounds'', interpreted according to the particular Frame in
-question. For example, on the celestial sphere, a right ascension
-value of 24~hours or more can have a suitable multiple of 24~hours
-subtracted without affecting its meaning and AST\_NORM would perform
-this task. Similarly, negative values of right ascension would have a
-multiple of 24~hours added, so that the result lies in the range zero
-to 24~hours. The coordinates in question are modified in place by
-AST\_NORM, as follows:
-
-\small
-\begin{verbatim}
- DOUBLE PRECISION POINT( 2 )
-
- ...
-
- CALL AST_NORM( FRAME, POINT, STATUS )
-\end{verbatim}
-\normalsize
-
-If the coordinates supplied are initially OK, as they would always be
-with a basic Frame, then they are returned unchanged.
-
-Because the main purpose of AST\_NORM is to convert coordinates into
-the preferred range for human consumption, its use is almost always
-appropriate immediately before formatting coordinate values for
-display using \htmlref{AST\_FORMAT}{AST_FORMAT} (\secref{ss:formattingaxisvalues}). Even if
-the Frame in question does not restrict the range of coordinates, so
-that AST\_NORM does nothing, using it will allow you to process other
-more specialised Frames, where normalisation is important, without
-changing your software.
-
-\subsection{\label{ss:unformattingaxisvalues}Reading Formatted Axis Values}
-
-The process of converting a formatted coordinate value for a \htmlref{Frame}{Frame}
-axis, such as might be produced by \htmlref{AST\_FORMAT}{AST_FORMAT}
-(\secref{ss:formattingaxisvalues}), back into a numerical (double
-precision) value ready for processing is performed by \htmlref{AST\_UNFORMAT}{AST_UNFORMAT}.
-However, although this process is essentially the inverse of that
-performed by AST\_FORMAT, there are a number of additional difficulties
-that must be addressed in practice.
-
-The main use for AST\_UNFORMAT is in reading formatted coordinate
-values which have been entered by the user of a program, or read from
-a file. As such, we can rarely assume that the values are neatly
-formatted in the way that AST\_FORMAT would produce. Instead, it is
-usually desirable to allow considerable flexibility in the form of
-input that can be accommodated, so as to permit ``free-format'' data
-input by the user. In addition, we may need to extract individual
-coordinate values embedded in other textual data.
-
-Underlying these requirements is the root difficulty that the textual
-format used to represent a coordinate value will depend on the class
-of Frame we are considering. For example, for a basic Frame,
-AST\_UNFORMAT may have to read a value like ``1.25E-6'', whereas a
-more specialised Frame representing celestial coordinates may have to
-handle a value like ``-07d~49m~13s''. Of course, the format might also
-depend on which axis is being considered.
-
-Ideally, we would like to write software that can handle any kind of
-Frame. However, this makes it a little more difficult to analyse
-textual input data to extract individual coordinate values, since we
-cannot make assumptions about how the values are formatted. It would
-not be safe, for example, simply to assume that the values being read
-are separated by white space. This is not just because they might be
-separated by some other character, but also because celestial
-coordinate values might themselves contain spaces. In fact, to be
-completely safe, we cannot make any assumptions about how a formatted
-coordinate value is separated from the surrounding text, except that
-it should be separated in some way which is not ambiguous.
-
-This is the very basic assumption upon which AST\_UNFORMAT works. It is
-invoked as follows:
-
-\small
-\begin{verbatim}
- INTEGER N
-
- ...
-
- N = AST_UNFORMAT( FRAME, IAXIS, STRING, VALUE, STATUS )
-\end{verbatim}
-\normalsize
-
-It is supplied with a Frame pointer (FRAME), the number of an axis
-(IAXIS) and a character string to be read (STRING). If it succeeds in
-reading a value, AST\_UNFORMAT returns the resulting coordinate
-{\em{via}} its penultimate argument (VALUE). The returned function
-value indicates how many characters were read from the string in order
-to obtain this result.
-
-The string is read as follows:
-
-\begin{enumerate}
-\item Any white space at the start is skipped over.
-
-\item Further characters are considered, one at a time, until the next
-character no longer matches any of the acceptable forms of input
-(given the characters that precede it). The longest sequence of
-characters which matches is then considered ``read''.
-
-\item If a suitable sequence of characters was read successfully, it
-is converted into a coordinate value which is returned. Any white
-space following this sequence is then skipped over and the total
-number of characters consumed is returned as the function value.
-
-\item If the sequence of characters read is empty, or insufficient to
-define a coordinate value, then the string does not contain a value to
-read. In this case, the read is aborted and AST\_UNFORMAT returns a
-function value of zero and no coordinate value. However, it returns
-without error.
-\end{enumerate}
-
-Note that failing to read a coordinate value does not constitute an
-error, at least so far as AST\_UNFORMAT is concerned. However, an
-error can occur if the sequence of characters read appears to have the
-correct form but cannot be converted into a valid coordinate
-value. Typically, this will be because it violates some constraint,
-such as a limit on the value of one of its fields. The resulting error
-message will give details.
-
-For any given Frame axis, AST\_UNFORMAT does not necessarily always
-use the same algorithm for converting the sequence of characters it
-reads into a coordinate value. This is because some forms of input
-(particularly free-format input) can be ambiguous and might be
-interpreted in several ways depending on the context. For example, the
-celestial longitude ``12:34:56.7'' could represent an angle in degrees
-or a right ascension in hours. To decide which to use, AST\_UNFORMAT
-may examine the Frame's attributes and, in particular, the appropriate
-\htmlref{Format(axis)}{Formataxis} string which is used by AST\_FORMAT when formatting
-coordinate values (\secref{ss:formattingaxisvalues}). This is done in
-order that AST\_FORMAT and AST\_UNFORMAT should complement each
-other---so that formatting a value and then un-formatting it will
-yield the original value, subject to any rounding error.
-
-To give a simple (but crucially incomplete!) example, consider reading
-a value for the axis of a basic Frame, as follows:
-
-\small
-\begin{verbatim}
- N = AST_UNFORMAT( FRAME, IAXIS, ' 1.5E6 -99.0', VALUE, STATUS )
-\end{verbatim}
-\normalsize
-
-AST\_UNFORMAT will skip over the initial space in the string supplied
-and then examine each successive character. It will accept the
-sequence ``1.5E6'' as input, but reject the space which follows
-because it does not form part of the format of a floating point
-number. It will then convert the characters ``1.5E6'' into a
-coordinate value and skip over the three spaces which follow them. The
-returned function value will therefore be 9, equal to the total number
-of characters consumed. This result may be used to address the string
-during a subsequent read, so as to commence reading at the start of
-``-99.0''.
-
-Most importantly, however, note that if the user of a program
-mistakenly enters the string ``~1.5R6\ldots'' instead of
-``~1.5E6\ldots'', a coordinate value of 1.5 and a function result of 4
-will be returned, because the ``R'' would prematurely terminate the
-attempt to read the value. Because this sort of mistake does not
-automatically result in an error but can produce incorrect results, it
-is {\bf{vital}} to check the returned function value to ensure that
-the expected number of characters have been read. For example, if the
-string is expected to contain exactly one value, and nothing else,
-then the following would suffice:
-
-\small
-\begin{verbatim}
- N = AST_UNFORMAT( FRAME, IAXIS, STRING, VALUE, STATUS )
- IF ( STATUS .EQ. 0 ) THEN
- IF ( N .LT. LEN( STRING ) ) THEN
- <error in input data>
- ELSE
- <value read correctly>
- END IF
- END IF
-\end{verbatim}
-\normalsize
-
-If AST\_UNFORMAT does not detect an error itself, we check that it has
-read to the end of the string. If this reveals an error, the value of
-N indicates where it occurred.
-
-Another common requirement is to obtain a position by reading a list
-of coordinates from a string which contains one value for each axis of
-a Frame. We assume that the values are separated in some unambiguous
-manner, perhaps using white space and/or some unspecified
-single-character separator. The choice of separator is up to the data
-supplier, who must choose it so as not to conflict with the format of
-the coordinate values, but our software does not need to know what it
-is. The following is a template algorithm for reading data in this
-form:
-
-\small
-\begin{verbatim}
- INTEGER I
- DOUBLE PRECISION VALUES( 10 )
-
- ...
-
-* Initialise the string index.
- I = 1
-
-* Obtain the number of Frame axes and loop through them.
- DO 1 IAXIS = 1, AST_GETI( FRAME, 'Naxes', STATUS )
-
-* Attempt to read a value for this axis.
- N = AST_UNFORMAT( FRAME, IAXIS, STRING( I : ),
- : VALUES( IAXIS ), STATUS )
-
-* If nothing was read and this is not the first axis and the end of
-* the string has not been reached, try stepping over a separator and
-* reading again.
- IF ( ( N .EQ. 0 ) .AND. ( IAXIS .GT. 1 ) .AND.
- : ( I .LT. LEN( STRING ) ) ) THEN
- I = I + 1
- N = AST_UNFORMAT( FRAME, IAXIS, STRING( I : ),
- : VALUES( IAXIS ), STATUS )
- END IF
-
-* Quit if nothing was read, otherwise move on to the next value.
- IF ( N .EQ. 0 ) GO TO 2
- I = I + N
- 1 CONTINUE
- 2 CONTINUE
-
-* Check for possible errors.
- IF ( STATUS .EQ. 0 ) THEN
- IF ( ( I .LT. LEN( STRING ) ) .OR. ( N .EQ. 0 ) ) THEN
- <error in input data>
- ELSE
- <values read correctly>
- END IF
- END IF
-\end{verbatim}
-\normalsize
-
-In this case, the value of I will indicate the location of any input error.
-
-Note that this algorithm is insensitive to the precise format of the
-data and will therefore work with any class of Frame and any
-reasonably unambiguous input data. For example, here is a range of
-suitable input data for a 3-dimensional basic Frame:
-
-\begin{quote}
-\small
-\begin{verbatim}
-1 2.5 3
-3.1,3.2,3.3
-1.5, 2.6, -9.9e2
--1.1+0.4-1.8
- .1/.2/.3
- 44.0 ; 55.1 -14
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\subsection{\label{ss:permutingaxes}Permuting Frame Axes}
-
-Once a \htmlref{Frame}{Frame} has been created, it is not possible to change the number
-of axes it contains, but it is possible to change the order in which
-these axes occur. To do so, an integer {\em{permutation array}} is
-filled with the numbers of the axes so as to specify the new order,
-{\em{e.g:}}
-
-\small
-\begin{verbatim}
- INTEGER PERM( 2 )
- DATA PERM / 2, 1 /
-\end{verbatim}
-\normalsize
-
-In this case, the axes of a 2-dimensional Frame could be interchanged
-by passing this permutation array to the \htmlref{AST\_PERMAXES}{AST_PERMAXES} function. That
-is, an ($x_1,x_2$) coordinate system would be changed into an
-($x_2,x_1$) coordinate system by:
-
-\small
-\begin{verbatim}
- CALL AST_PERMAXES( FRAME, PERM, STATUS )
-\end{verbatim}
-\normalsize
-
-If the axes are permuted more than once, the effects are cumulative.
-You are, of course, not restricted to Frames with only two axes.
-
-\subsection{Selecting Frame Axes}
-
-An alternative to changing the number of \htmlref{Frame}{Frame} axes, which is not
-allowed, is to create a new Frame by selecting axes from an existing
-one. The method of doing this is very similar to the way \htmlref{AST\_PERMAXES}{AST_PERMAXES}
-is used (\secref{ss:permutingaxes}), in that we supply an integer
-array filled with the numbers of the axes we want, in their new
-order. In this case, however, the number of array elements need not
-equal the number of Frame axes.
-
-For example, we could select axes 3 and 2 (in that order) from a
-3-dimensional Frame as follows:
-
-\small
-\begin{verbatim}
- INTEGER FRAME1, FRAME2, MAPPING, PICK( 2 )
- DATA PICK / 3, 2 /
-
- ...
-
- FRAME2 = AST_PICKAXES( FRAME1, 2, PICK, MAPPING, STATUS )
-\end{verbatim}
-\normalsize
-
-This would return a pointer to a 2-dimensional Frame (FRAME2) which
-contains the information associated with axes 3 and 2, in that order,
-from the original Frame (FRAME1). The original Frame is not altered by
-this process. Beware, however, that the axis information may still be
-shared by both Frames, so if you wish to alter either of them
-independently you may first need to use \htmlref{AST\_COPY}{AST_COPY}
-(\secref{ss:copyingobjects}) to make an independent copy.
-
-In addition to the new Frame pointer, \htmlref{AST\_PICKAXES}{AST_PICKAXES} will also return a
-pointer to a new \htmlref{Mapping}{Mapping} {\em{via}} its fourth argument. This Mapping will
-inter-relate the two Frames. By this we mean that its forward
-transformation will convert coordinates originally in the coordinate
-system represented by FRAME1 into that represented by FRAME2, while
-its inverse transformation will convert in the opposite direction. In
-this particular case, the Mapping would be a \htmlref{PermMap}{PermMap}
-(\secref{ss:permmapexample}) and would implement the following
-transformations:
-
-\begin{quote}
-\begin{verbatim}
-Forward:
- (1, 2, 3) --> (3, 2)
- (2, 4, 6) --> (6, 4)
- (3, 6, 9) --> (9, 6)
- (4, 8, 12) --> (12, 8)
- (5, 10, 15) --> (15, 10)
-
-Inverse:
- (3, 2) --> (<bad>, 2, 3)
- (6, 4) --> (<bad>, 4, 6)
- (9, 6) --> (<bad>, 6, 9)
- (12, 8) --> (<bad>, 8, 12)
- (15, 10) --> (<bad>, 10, 15)
-\end{verbatim}
-\end{quote}
-
-This is our first introduction to the idea of inter-relating pairs of
-Frames {\em{via}} a Mapping, but this will assume a central role later on.
-
-Note that when using AST\_PICKAXES, it is also possible to request
-more axes than there were in the original Frame. This will involve
-selecting axes from the original Frame that do not exist. To do this,
-the corresponding axis number (in the PICK array) should be set to
-zero and the effect is to introduce an additional new axis which is
-not derived from the original Frame. This axis will have default
-values for all its attributes. You will need to do this because
-AST\_PICKAXES does not allow you to select any of the original axes
-more than once.\footnote{It will probably not be obvious why this
-restriction is necessary, but consider creating a Frame with one
-longitude axis and two latitude axes. Which latitude axis should be
-associated with the longitude axis?}
-
-\subsection{\label{ss:distanceandoffset}Calculating Distances, Angles and Offsets}
-Some complementary
-routines
-are provided for use with Frames to allow you to perform geometric
-operations without needing to know the nature of the coordinate system
-represented by the \htmlref{Frame}{Frame}.
-
-Routines
-can be used to find the distance between two points, and to offset a
-specified distance along a line joining two points, {\em{etc.}} In essence,
-these define the metric of the coordinate space which the Frame represents. In
-the case of a basic Frame, this is a Cartesian metric.
-
-The first of these routines, \htmlref{AST\_DISTANCE}{AST_DISTANCE}, returns a double precision
-distance value when supplied with the Frame coordinates of two
-points. For example:
-
-\small
-\begin{verbatim}
- DOUBLE PRECISION DIST, POINT1( 2 ), POINT2( 2 )
- DATA POINT1 / 0D0, 0D0 /
- DATA POINT2 / 1D0, 1D0 /
-
- ...
-
- DIST = AST_DISTANCE( FRAME, POINT1, POINT2, STATUS )
-\end{verbatim}
-\normalsize
-
-This calculates the distance between the origin (0,0) and a point at
-position (1,1). In this case, the result, as you would expect, is
-$\surd{2}$. However, this is only true for the Cartesian coordinate
-system which a basic Frame represents. In general, AST\_DISTANCE will
-calculate the geodesic distance between the two points, so that with a
-more specialised Frame (such as a \htmlref{SkyFrame}{SkyFrame}, representing the celestial
-sphere) a great-circle distance might be returned.
-
-The \htmlref{AST\_OFFSET}{AST_OFFSET} routine is really the inverse of AST\_DISTANCE. Given
-two points in a Frame, it calculates the coordinates of a third point
-which is offset a specified distance away from the first point along
-the geodesic joining it to the second one. For example:
-
-\small
-\begin{verbatim}
- DOUBLE PRECISION POINT1( 2 ), POINT2( 2 ), POINT3( 2 )
- DATA POINT1 / 0D0, 0D0 /
- DATA POINT2 / 1D0, 1D0 /
-
- ...
-
- CALL AST_OFFSET( FRAME, POINT1, POINT2, 0.5D0, POINT3, STATUS )
-\end{verbatim}
-\normalsize
-
-This would fill the POINT3 array with the coordinates of a point which
-is offset 0.5 units away from the origin (0,0) in the direction of the
-position (1,1). Again, this is a simple result in a Cartesian Frame,
-as varying the offset will trace out a straight line. On the celestial
-sphere, however ({\em{e.g.}}\ using a SkyFrame), it would trace out a
-great circle.
-
-The routines \htmlref{AST\_AXDISTANCE}{AST_AXDISTANCE} and \htmlref{AST\_AXOFFSET}{AST_AXOFFSET} are similar to AST\_DISTANCE
-and AST\_OFFSET, except that the curves which they use as ``straight
-lines'' are not geodesics, but curves parallel to a specified axis\footnote
-{For instance, a line of constant Declination is not a geodesic}. One
-reason for using these routines is to deal with the cyclic ambiguity of
-longitude and latitude axes.
-
-The \htmlref{AST\_OFFSET2}{AST_OFFSET2} routine is similar to AST\_OFFSET, but instead of using the
-geodesic which passes through two positions, it uses the geodesic which
-passes at a given position angle through the starting position.
-
-Position angles are always measured from the positive direction of the
-second Frame axis to the required line, with positive angles being in the
-same sense as rotation from the positive direction of the second axis to
-the positive direction of the first Frame axis. This definition applies
-to all classes of Frame, including SkyFrame. The default ordering of axes
-in a SkyFrame makes the second axis equivalent to north, and so the
-definition of position angle given above corresponds to the normal
-astronomical usage, ``from north, through east''. However, it should be
-remembered that it is possible to permute the axes of a SkyFrame (or
-indeed any Frame), so that north becomes axis 1. In this case, an AST
-``position angle'' would be the angle ``from east, through north''.
-Always take the axis ordering into account when deriving an astronomical
-position angle from an AST position angle.
-
-Within a Cartesian coordinate system, the position angle of a geodesic
-({\em{i.e.}}\ a straight line) is constant along its entire length, but
-this is not necessarily true of other coordinate systems. Within a
-spherical coordinate system, for instance, the position angle of a geodesic
-will vary along its length (except for the special cases of a meridian and
-the equator). In addition to returning the required offset position, the
-AST\_OFFSET2 routine
-returns the position angle of the geodesic at the
-offset position. This is useful if you want to trace out a path which
-involves turning through specified angles. For instance, tracing out a
-rectangle in which each side is a geodesic involves turning through 90
-degrees at the corners. To do this, use AST\_OFFSET2 to calculate the
-position of each corner, and then add (or subtract) 90 degrees from the
-position angle returned by AST\_OFFSET2.
-
-The \htmlref{AST\_ANGLE}{AST_ANGLE} routine
-calculates the angle subtended by two points, at a third point.
-If used with a 2-dimensional Frame the returned angle
-is signed to indicate the sense of rotation (clockwise or anti-clockwise)
-in taking the ``shortest route'' from the first point to the second.
-If the Frame has more than 2 axes, the result is un-signed and is always
-in the range zero to $\pi$.
-
-The \htmlref{AST\_AXANGLE}{AST_AXANGLE} routine is similar to AST\_AXANGLE,
-but the ``reference direction'', from which angles are measured, is
-a specified axis.
-
-The \htmlref{AST\_RESOLVE}{AST_RESOLVE} routine
-resolves a given displacement within a Frame into two components, parallel and
-perpendicular to a given reference direction.
-
-The displacement is specified by two positions within the Frame; the
-starting and ending positions. The reference direction is defined by the
-geodesic curve passing through the starting position and a third specified
-position. The lengths of the two components are returned, together with
-the position on the reference geodesic which is closest to the third
-supplied point.
-
-\subsection{\label{ss:framedomains}The Domain Attribute}
-
-The \htmlref{Domain}{Domain} attribute is one of the most important properties of a
-\htmlref{Frame}{Frame}, although the concept it expresses can sometimes seem a little
-subtle. We will introduce it here, but its true value will probably
-not become apparent until later (\secref{ss:framesetconverting}).
-
-To understand the need for the Domain attribute, consider using
-different Frames to represent the following different coordinate
-systems associated with a CCD image:
-
-\begin{enumerate}
-\item A coordinate system based on pixel numbers.
-
-\item Positions on the CCD chip, measured in $\mu$m.
-
-\item Positions in the focal plane of the telescope, measured in mm.
-
-\item A celestial coordinate system, measured in radians.
-\end{enumerate}
-
-If we had two such CCD images, we might legitimately want to align
-them pixel-for-pixel ({\em{i.e.}}\ using the coordinate system based
-on pixel numbers) in order to, say, divide by a flat-field exposure.
-We might similarly consider aligning them using any of the other
-coordinate systems so as to achieve different results. For example, we
-might consider merging separate images from a CCD mosaic by using
-focal plane positions.
-
-It would obviously not be legitimate, however, to directly compare
-positions in one image measured in pixels with positions in the other
-measured in mm, nor to equate chip positions in $\mu$m with sky
-coordinates in radians. If we wanted to inter-compare these
-coordinates, we would need to do it indirectly, using other
-information based on the experimental set-up. For instance, we might
-need to know the size of the pixels expressed in mm and the
-orientation of the CCD chip in the focal plane.
-
-Note that it is not simply the difference in physical units which
-prevents certain coordinates from being directly inter-compared
-(because the appropriate unit scaling factors could be included
-without any additional information). Neither is it the fact that
-different coordinate systems are in use (because we could legitimately
-inter-compare two different celestial coordinate systems without any
-extra information). Instead, it is the different nature of the
-coordinate spaces to which these coordinate systems have been applied.
-
-We normally express this by saying that the coordinate systems apply
-to different {\em{physical domains}}. Although we may establish
-{\em{ad hoc}} relationships between coordinates in different physical
-domains, they are not intrinsically related to each other and we need
-to supply extra information before we can convert coordinates between
-them.
-
-In AST, the role of the (character string) Domain attribute is to
-assign Frames to their respective physical domains. The way it
-operates is as follows:
-
-\begin{itemize}
-\item Coordinate systems which apply to the same physical domain
-({\em{i.e.}}\ whose Frames have the same Domain value) can be directly
-inter-compared.
-
-If the domain has several coordinate systems associated with it
-({\em{e.g.}}\ the celestial sphere), then a coordinate conversion may
-be involved. Otherwise, coordinate values may simply be equated.
-
-\item Coordinate systems which apply to different physical domains
-({\em{i.e.}}\ whose Frames have different Domain values) cannot be
-directly inter-compared.
-
-If any relationship does exist between such coordinate systems---and
-it need not---then additional information must be supplied in order to
-establish the relationship between them in any particular case. We
-will see later (\secref{ss:framesets}) how to establish such
-relationships between Frames in different domains.
-\end{itemize}
-
-With the basic Frames we are considering here, each physical domain only
-has a single (Cartesian) coordinate system associated with it, so that if
-two such Frames have the same Domain value, their coordinate systems will
-be identical and may simply be equated. With more specialised Frames,
-however, more than one coordinate system may apply to each domain. In
-such cases, a coordinate conversion may need to be performed.
-
-When a basic Frame is created, its Domain attribute defaults to a
-blank string. This means that all such Frames belong to the same
-(null) domain by default and therefore describe the same unspecified
-physical coordinate space. In order to assign a Frame to a different
-domain, you simply need to set its Domain value. This is normally most
-conveniently done when it is created, as follows:
-
-\small
-\begin{verbatim}
- FRAME1 = AST_FRAME( 2, 'Domain=CCD_CHIP,' //
- 'Unit(1)=micron,' //
- 'Unit(2)=micron', STATUS )
- FRAME2 = AST_FRAME( 2, 'Domain=FOCAL_PLANE,' //
- 'Unit(1)=mm,' //
- 'Unit(2)=mm', STATUS )
-\end{verbatim}
-\normalsize
-
-Here, we have created two Frames in different physical
-domains. Although their coordinate values all have units of length,
-they cannot be directly inter-compared (because their axes may be
-rotated with respect to each other, for instance).
-
-All Domain values are automatically converted to upper case and white
-space is removed, but there are no other restrictions on the names you
-may use to label different physical domains. From a practical point of
-view, however, it is worth following a few conventions
-(\secref{ss:domainconventions}).
-
-\subsection{\label{ss:domainconventions}Conventions for Domain Names}
-
-When choosing a value for the \htmlref{Domain}{Domain} attribute of a \htmlref{Frame}{Frame}, it
-obviously makes sense to avoid generic names which might clash with
-those used for similar (but subtly different!) purposes by other
-programmers. If you are developing software for an instrument, for
-example, and want to identify an instrumental coordinate system, then
-it is sensible to add a distinguishing prefix. For instance, you might
-use $<$INST$>$\_FOCAL\_PLANE, where $<$INST$>$ ({\em{e.g.}}\ an
-acronym) identifies your instrument.
-
-For some purposes, however, a standard choice of Domain name is
-desirable so that different items of software can communicate. For
-this purpose, the following Domain names are reserved by AST and the
-use recommended below should be carefully observed:
-
-\begin{quote}
-\begin{description}
-\item[GRAPHICS]\mbox{}\\
-Identifies the coordinate space used by an underlying computer
-graphics system to specify plotting operations. Typically, when
-performing graphical operations, AST is used to define additional
-coordinate systems which are related to these ``native'' graphical
-coordinates. Plotting may be carried out in any of these coordinate
-systems, but the GRAPHICS domain identifies the native coordinates
-through which AST communicates with the underlying graphics system.
-
-\item[GRID]\mbox{}\\
-Identifies the instantaneous {\em{data grid}} used to store and handle
-data, together with an associated coordinate system. In this
-coordinate system, the first element stored in an array of data always
-has a coordinate value of unity at its centre and all elements have
-unit extent. This applies to all dimensions.
-
-If data are copied or transformed to a new data grid (by whatever
-means), or a subset of the original grid is extracted, then the same
-rules apply to the copy or subset. Its first element therefore has
-GRID coordinate values of unity at its centre. Note that this means
-that GRID coordinates remain attached to the first element of the data
-grid and not to its data content ({\em{e.g.}}\ the features in an
-image).
-
-\item[PIXEL]\mbox{}\\
-Identifies an array of pixels and an associated {\em{pixel-based}}
-coordinate system which is related to the GRID coordinate system
-(above) simply by a shift of origin along each axis. This shift may be
-integral, fractional, positive, negative or zero. The data elements
-retain their unit extent along each axis.
-
-Because the amount of shift is unspecified, the PIXEL domain is
-distinct from the GRID domain. The relationship between them contains
-a degree of uncertainty, such as typically arises from the different
-conventions used by different software systems. For instance, in some
-software the first pixel is regarded as being centred at (1,1), while
-in other software it is at (0.5,0.5). In addition, some software
-packages implement a ``pixel origin'' which allows pixel coordinates
-to start at an arbitrary value.
-
-The GRID domain (which corresponds with the pixel-numbering convention
-used by FITS) is a special case of the PIXEL domain and avoids this
-uncertainty. In general, additional information is required in order
-to convert from one to the other.
-
-\item[SKY]\mbox{}\\
-Identifies the domain which contains all equivalent celestial
-coordinate systems. Because these are represented in AST by SkyFrames
-(\secref{ss:skyframes}), it should be no surprise that the default
-Domain value for a \htmlref{SkyFrame}{SkyFrame} is SKY. Since there is only one sky, you
-probably won't need to change this very often.
-
-\item[SPECTRUM]\mbox{}\\
-Identifies the domain used to describe positions within an
-electro-magnetic spectrum. The AST \htmlref{SpecFrame}{SpecFrame} (\secref{ss:specframes})
-class describes positions within this domain, allowing a wide range of
-different coordinate systems to be used (frequency, wavelength,
-{\em{etc}}). The default Domain value for a SpecFrame is SPECTRUM.
-
-\item[TIME]\mbox{}\\
-Identifies the domain used to describe moments in time. The AST \htmlref{TimeFrame}{TimeFrame}
-class describes positions within this domain, allowing a wide range of
-different coordinate systems and timescales to be used. The default Domain
-value for a TimeFrame is TIME.
-
-\end{description}
-\end{quote}
-
-Although we have drawn a necessary distinction here between the GRID
-and PIXEL domains, we will continue to refer in general terms to image
-``pixels'' and ``pixel coordinates'' whenever this distinction is not
-important. This should not be taken to imply that the GRID convention
-for numbering pixels is excluded---in fact, it is usually to be
-preferred (at the level of data handling being discussed in this
-document) and we recommend it.
-
-\subsection{\label{ss:frameunits}The Unit Attribute}
-Each axis of a \htmlref{Frame}{Frame} has a Unit attribute which holds the physical units used
-to describe positions on the axis. The index of the axis to which the
-attribute refers should normally be placed in parentheses following the
-attribute name (``Unit(2)'' for instance). However, if the Frame has only
-a single axis, then the axis index can be omitted.
-
-In versions of AST prior to version 2.0, the Unit attribute was nothing
-more than a descriptive string intended purely for human readers---no
-part of the AST system used the Unit string for any purpose (other than
-inclusion in axis labels produced by the \htmlref{Plot}{Plot} class). In particular, no
-account was taken of the Unit attribute when finding the \htmlref{Mapping}{Mapping} between
-two Frames. Thus if the conversion between a pair of 1-dimensional Frames
-representing velocity was found (using
-\htmlref{AST\_CONVERT}{AST_CONVERT}
-) the returned Mapping would always be a \htmlref{UnitMap}{UnitMap}, even if the Unit
-attributes of the two Frames were ``km/h'' and ``m/s''. This behaviour is
-referred to below as a \emph{passive} Unit attribute.
-
-As of AST version 2.0, a facility exists which allows the Unit attribute
-to be \emph{active}; that is, differences in the
-Unit attribute may be taken into account when finding the Mapping between
-two Frames. In order to minimise the risk of breaking older software, the
-\emph{default} behaviour of simple Frames and SkyFrames is unchanged from
-previous versions (\emph{i.e.} they have passive Unit attributes). However,
-the new
-routines \htmlref{AST\_SETACTIVEUNIT}{AST_SETACTIVEUNIT} and \htmlref{AST\_GETACTIVEUNIT}{AST_GETACTIVEUNIT}
-allow this default behaviour to be changed. The \htmlref{SpecFrame}{SpecFrame} and \htmlref{TimeFrame}{TimeFrame}
-classes \emph{always} have an active Unit attribute (attempts to change this
-are ignored).
-
-For instance, consider the above example of two 1-dimensional Frames
-describing velocity. These Frames can be created as follows:
-
-\small
-\begin{verbatim}
- INTEGER FRAME1, FRAME2
-
- FRAME1 = AST_FRAME( 1, 'Domain=VELOCITY,Unit=km/h' )
- FRAME2 = AST_FRAME( 1, 'Domain=VELOCITY,Unit=m/s' )
-
-\end{verbatim}
-\normalsize
-
-By default, these Frames have passive Unit attributes, and so an attempt
-to find a Mapping between them would ignore the difference in their Unit
-attributes and return a unit Mapping. To avoid this, we indicate that we
-want these Frames to have \emph{active} Unit attributes, as follows:
-
-\small
-\begin{verbatim}
- CALL AST_SETACTIVEUNIT( FRAME1, .TRUE., STATUS )
- CALL AST_SETACTIVEUNIT( FRAME2, .TRUE., STATUS )
-\end{verbatim}
-\normalsize
-
-If we then find the Mapping between them as follows:
-
-\small
-\begin{verbatim}
- INTEGER CVT
- ...
- CVT = AST_CONVERT( FRAME1, FRAME2, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-the Mapping contained within the \htmlref{FrameSet}{FrameSet} returned by
-AST\_CONVERT
-will be a one-dimensional \htmlref{ZoomMap}{ZoomMap} which simply scales its input (a
-velocity in $km/h$) by a factor of 0.278 to create its output (a velocity
-in $m/s$).
-
-In fact we need not have set the Unit attribute active in FRAME1
-since the behaviour of AST\_CONVERT is determined by its TO Frame
-(the second Frame argument).
-
-\subsubsection{\label{ss:unitsyntax}The Syntax for Unit Strings}
-Conversion between units systems relies on the use of a specific syntax
-for the Unit attribute. If the value of the Unit attribute does not
-conform to this syntax, then an error will be reported if an attempt is
-made to use it to determine an inter-unit \htmlref{Mapping}{Mapping} (this will never happen
-if the Unit attribute is \emph{passive}).
-
-The adopted syntax is that described in FITS-WCS paper I "Representation
-of World Coordinate in FITS" by Greisen \& Calabretta. We distinguish
-here between ``basic'' units and ``derived'' units: derived units are
-defined in terms of other units (either derived or basic), whereas basic
-units have no such definitions. Derived units may be represented by their
-own \emph{symbol} (\emph{e.g.} ``Jy''---the Jansky) or by a
-\emph{mathematical expression} which combines other symbols and constants
-to form a definition of the unit (\emph{e.g.} ``km/s''---kilometres per
-second). Unit symbols may be prefixed by a string representing a standard
-multiple or sub-multiple.
-
-In addition to the unit symbols listed in FITS-WCS Paper I, any other
-arbitrary unit symbol may be used, with the proviso that it will not be
-possible to convert between Frames using such units. The exception to
-this is if both Frames refer to the same unknown unit string. For instance,
-an axis with unknown unit symbol "flop" \emph{could} be converted to an axis
-with unit "Mflop" (Mega-flop).
-
-Unit symbols (optionally prefixed with a multiple or sub-multiple) can be
-combined together using a limited range of mathematical operators and
-functions, to produce new units. Such expressions may also contain
-parentheses and numerical constants (these may optionally use
-``scientific'' notation including an ``E'' character to represent the
-power of 10).
-
-The following tables list the symbols for the basic and derived units which
-may be included in a units string, the standard prefixes for multiples
-and sub-multiples, and the strings which may be used to represent
-mathematical operators and functions.
-
-\begin{table}[htbp]
-\begin{center}
-\begin{tabular}{|l|l|l|}
-\hline
-\multicolumn{3}{|c|}{{\large Basic units}} \\ \hline
-\multicolumn{1}{|c|}{Quantity} & \multicolumn{1}{|c|}{Symbol} &
-\multicolumn{1}{c|}{\htmlref{Full}{Full} Name} \\ \hline
-length & m & metre \\
-mass & g & gram \\
-time & s & second \\
-plane angle & rad & radian \\
-solid angle & sr & steradian \\
-temperature & K & Kelvin \\
-electric current & A & Ampere \\
-amount of substance & mol & mole \\
-luminous intensity & cd & candela \\
-\hline
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}[htbp]
-\begin{center}
-\begin{tabular}{|l|l|l|l|}
-\hline
-\multicolumn{4}{|c|}{{\large Derived units}} \\ \hline
-\multicolumn{1}{|c|}{Quantity} & \multicolumn{1}{|c|}{Symbol} &
-\multicolumn{1}{c|}{Full Name} & \multicolumn{1}{c|}{Definition} \\ \hline
-area & barn & barn & 1.0E-28 m**2 \\
-area & pix & pixel & \\
-area & pixel & pixel & \\
-electric capacitance & F & Farad & C/V \\
-electric charge & C & Coulomb & A s \\
-electric conductance & S & Siemens & A/V \\
-electric potential & V & Volt & J/C \\
-electric resistance & Ohm & Ohm & V/A \\
-energy & J & Joule & N m \\
-energy & Ry & Rydberg & 13.605692 eV \\
-energy & eV & electron-Volt & 1.60217733E-19 J \\
-energy & erg & erg & 1.0E-7 J \\
-events & count & count & \\
-events & ct & count & \\
-events & ph & photon & \\
-events & photon & photon & \\
-flux density & Jy & Jansky & 1.0E-26 W /m**2 /Hz \\
-flux density & R & Rayleigh & 1.0E10/(4*PI) photon.m**-2 /s/sr \\
-flux density & mag & magnitude & \\
-force & N & Newton & kg m/s**2 \\
-frequency & Hz & Hertz & 1/s \\
-illuminance & lx & lux & lm/m**2 \\
-inductance & H & Henry & Wb/A \\
-length & AU & astronomical unit & 1.49598E11 m \\
-length & Angstrom & Angstrom & 1.0E-10 m \\
-length & lyr & light year & 9.460730E15 m \\
-length & pc & parsec & 3.0867E16 m \\
-length & solRad & solar radius & 6.9599E8 m \\
-luminosity & solLum & solar luminosity & 3.8268E26 W \\
-luminous flux & lm & lumen & cd sr \\
-magnetic field & G & Gauss & 1.0E-4 T \\
-magnetic flux & Wb & Weber & V s \\
-mass & solMass & solar mass & 1.9891E30 kg \\
-mass & u & unified atomic mass unit & 1.6605387E-27 kg \\
-magnetic flux density & T & Tesla & Wb/m**2 \\
-plane angle & arcmin & arc-minute & 1/60 deg \\
-plane angle & arcsec & arc-second & 1/3600 deg \\
-plane angle & mas & milli-arcsecond & 1/3600000 deg \\
-plane angle & deg & degree & pi/180 rad \\
-power & W & Watt & J/s \\
-pressure, stress & Pa & Pascal & N/m**2 \\
-time & a & year & 31557600 s \\
-time & d & day & 86400 s \\
-time & h & hour & 3600 s \\
-time & yr & year & 31557600 s \\
-time & min & minute & 60 s \\
- & D & Debye & 1.0E-29/3 C.m \\
-\hline
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}[htbp]
-\begin{center}
-\begin{tabular}{|lll|lll|}
-\hline
-\multicolumn{6}{|c|}{{\large Prefixes for multiples \&
-sub-multiples}} \\ \hline
-\multicolumn{1}{|c}{Sub-multiple} & \multicolumn{1}{c}{Name} &
-\multicolumn{1}{c|}{Prefix} &
-\multicolumn{1}{|c}{Sub-multiple} & \multicolumn{1}{c}{Name} &
-\multicolumn{1}{c|}{Prefix} \\ \hline
-$10^{-1}$ & deci & d & $10$ & deca & da \\
-$10^{-2}$ & centi & c & $10^{2}$ & hecto & h \\
-$10^{-3}$ & milli & m & $10^{3}$ & kilo & k \\
-$10^{-6}$ & micro & u & $10^{6}$ & mega & M \\
-$10^{-9}$ & nano & n & $10^{9}$ & giga & G \\
-$10^{-12}$ & pico & p & $10^{12}$ & tera & T \\
-$10^{-15}$ & femto & f & $10^{15}$ & peta & P \\
-$10^{-18}$ & atto & a & $10^{18}$ & exa & E \\
-$10^{-21}$ & zepto & z & $10^{21}$ & zetta & Z \\
-$10^{-24}$ & yocto & y & $10^{24}$ & yotta & Y \\
-\hline
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}[htbp]
-\begin{center}
-\begin{tabular}{|l|l|}
-\hline
-\multicolumn{2}{|c|}{{\large Mathematical operators \& functions}} \\
-\hline
-\multicolumn{1}{|c|}{String} & \multicolumn{1}{|c|}{Meaning} \\ \hline
-sym1 sym2 & multiplication (a space) \\
-sym1*sym2 & multiplication (an asterisk) \\
-sym1.sym2 & multiplication (a dot) \\
-sym1/sym2 & division \\
-sym1**y & exponentiation ($y$ must be a numerical constant)\\
-sym1\verb+^+y & exponentiation ($y$ must be a numerical constant)\\
-log(sym1) & common logarithm \\
-ln(sym1) & natural logarithm \\
-exp(sym1) & exponential \\
-sqrt(sym1) & square root \\
-\hline
-\end{tabular}
-\end{center}
-\end{table}
-
-\subsubsection{Side-effects of Changing the Unit attribute}
-If an \htmlref{Axis}{Axis} has an active Unit attribute, changing its value (either by
-setting a new value or by clearing it so that the default value is
-re-instated) may cause the Label and Symbol attributes to be changed
-accordingly. For instance, if an Axis has Unit, Label and Symbol of ``Hz'',
-``Frequency'' and ``nu'', then changing its Unit attribute to ``log(Hz)''
-will cause AST to change its Label and Symbol to ``log(Frequency)'' and
-``Log(nu)''. These changes are only made if the Unit attribute is active,
-and a \htmlref{Mapping}{Mapping} can be found from the old units to the new units. On the other
- hand, changing the Unit from ``Hz'' to ``MHz'' would not cause any change
-to the Label or Symbol attributes.
-
-\cleardoublepage
-\section{\label{ss:skyframes}Celestial Coordinate Systems (SkyFrames)}
-
-A \htmlref{Frame}{Frame} which is specialised for representing coordinate systems on
-the celestial sphere is obviously of great importance in
-astronomy. The \htmlref{SkyFrame}{SkyFrame} is such a Frame. In this section we examine
-the additional properties and behaviour of a SkyFrame that distinguish
-it from a basic Frame (\secref{ss:frames}).
-
-\subsection{The SkyFrame Model}
-
-A \htmlref{SkyFrame}{SkyFrame} is, of course, a \htmlref{Frame}{Frame} (\secref{ss:frames}) and also a
-\htmlref{Mapping}{Mapping} (\secref{ss:mappings}), so it inherits all the properties and
-behaviour of these two ancestral classes. When used as a Mapping, a
-SkyFrame implements a unit transformation, exactly like a basic Frame
-(\secref{ss:frameasmapping}) or a \htmlref{UnitMap}{UnitMap}, so this aspect of its
-behaviour is not of great importance.
-
-When used as a Frame, however, a SkyFrame represents a 2-dimensional
-{\em{spherical}} coordinate system, in which the shortest distance
-between two points is a great circle. A SkyFrame therefore always has
-exactly two axes which represent the longitude and latitude of a
-coordinate system residing on the celestial sphere. Many such
-coordinate systems can be represented by a SkyFrame, as we will see
-shortly.
-
-A SkyFrame can represent any of the commonly used celestial coordinate
-systems. Optionally, the origin of the longitude/latitude system can be
-moved to any specified point in the standard celestial system, allowing
-a SkyFrame to represent offsets from a specified sky position.
-
-When it is first created, a SkyFrame's axes are always in the order
-(longitude,~latitude) but this can be changed, if required, by using the
-\htmlref{AST\_PERMAXES}{AST_PERMAXES} routine (\secref{ss:permutingaxes}). The order of the axes
-can be determined at any time using the \htmlref{LatAxis}{LatAxis} and \htmlref{LonAxis}{LonAxis} attributes. A
-SkyFrame's coordinate values are always stored as angles in (double
-precision) radians, regardless of the setting of the Unit attribute.
-
-\subsection{Creating a SkyFrame}
-
-The \htmlref{SkyFrame}{SkyFrame} constructor function is particularly simple and a
-SkyFrame with default attributes is created as follows:
-
-\small
-\begin{verbatim}
- INCLUDE 'AST_PAR'
- INTEGER SKYFRAME, STATUS
-
- STATUS = 0
-
- ...
-
- SKYFRAME = AST_SKYFRAME( ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-Such a SkyFrame would represent the default celestial coordinate
-system which, at present, is the ICRS system (the default was "FK5(J2000)"
-in versions of AST prior to 3.0).
-
-\subsection{Specifying a Particular Celestial Coordinate System}
-
-For many purposes, the ICRS coordinate system is perfectly
-adequate. In order to support conversion between a variety of
-celestial coordinate systems, however, you can create SkyFrames that
-represent any of these.
-
-Selection of a particular coordinate system is performed simply by
-setting a value for the \htmlref{SkyFrame}{SkyFrame}'s (character string) \htmlref{System}{System}
-attribute. This setting is most conveniently done when the SkyFrame is
-created. For example, a SkyFrame representing the old FK4~(B1950.0)
-coordinate system would be created by:
-
-\small
-\begin{verbatim}
- SKYFRAME = AST_SKYFRAME( 'System=FK4', STATUS )
-\end{verbatim}
-\normalsize
-
-Note that specifying ``System$=$FK4'' also changes the associated
-equinox (from J2000.0 to B1950.0). This is because the default value
-of the SkyFrame's \htmlref{Equinox}{Equinox} attribute (\secref{ss:equinoxitem}) depends
-on the System attribute setting.
-
-You may change the System value at any time, although this is not
-usually needed. The values supported are set out in the attribute's
-description in \appref{ss:attributedescriptions} and include a variety
-of equatorial coordinate systems, together with ecliptic and galactic
-coordinates.
-
-General spherical coordinates are supported by specifying
-``System$=$unknown''. You should note, though, that no \htmlref{Mapping}{Mapping} can be
-created to convert between ``unknown'' coordinates and any of the other
-celestial coordinate systems (see \secref{ss:introducingconversion} ).
-
-\subsection{Attributes which Qualify Celestial Coordinate Systems}
-
-Many celestial coordinate systems have some additional free parameters
-which serve to identify a particular coordinate system from amongst a
-broader class of related coordinate systems. For example, the
-FK5~(J2010.0) system is distinguished from the FK5~(J2000.0)
-system by a different equinox---and the coordinates of a fixed
-astronomical source would have different values when expressed in
-these two systems.
-
-In AST, these free parameters are represented by additional \htmlref{SkyFrame}{SkyFrame}
-attributes, each of which has a default appropriate to
-({\em{i.e.}}\ defined by) the setting of the main \htmlref{System}{System}
-attribute. Each of these {\em{qualifying attributes}} may, however, be
-assigned an explicit value so as to select a particular coordinate
-system. Note, it is usually best to assign explicit
-values whenever possible rather than relying on defaults. Attribute
-should only be left at their default value if you ``don't care'' what
-value is used. In certain circumstances (particularly, when aligning two
-Frames), a default value for an attribute may be replaced by the value
-from another similar \htmlref{Frame}{Frame}. Such value replacement can be prevented by
-assigning an explicit value to the attribute, rather than simply relying on
-the default.
-
-
-The main SkyFrame attributes which qualify the System attribute are:
-
-\begin{quote}
-\begin{description}
-
-\item[\label{ss:epochitem}\htmlref{Epoch}{Epoch}]\mbox{}\\
-This attribute is inherited from the Frame class. It gives the moment in
-time when the coordinates are correct for the astronomical source
-under study (usually the date of observation).
-
-\item[\label{ss:equinoxitem}\htmlref{Equinox}{Equinox}]\mbox{}\\
-This value is used to qualify celestial coordinate systems that are
-notionally based on the Earth's equator and/or the ecliptic (the plane
-of the Earth's orbit around the Sun). The position of either of these
-planes is difficult to specify precisely, so in practice a model
-{\em{mean}}\ equator and/or ecliptic are used instead. These, together
-with the point on the sky that defines the coordinate origin (termed
-the {\em{mean equinox}}) move with time according to some model which
-smoothes out the more rapid fluctuations. The SkyFrame class supports
-both the old FK4 model and the newer FK5 one.
-
-Coordinates expressed in any of these systems vary with time due to
-movement (by definition) of the coordinate system itself, and must
-therefore be qualified by a moment in time (the {\em{epoch of the mean
-equinox,}} or ``equinox'' for short) which specifies the position of
-the model coordinate system on the sky. This is the role of the
-Equinox attribute.
-
-Note that it is quite valid and common to relate the position of a
-source to an equinox other than the date of observation. Usually a
-standard equinox such as J2000.0 is used, meaning that the coordinates
-are referred to axes defined by where the model mean equator and
-ecliptic would lie on the sky at the Julian epoch J2000.0.
-\end{description}
-\end{quote}
-
-For further details of these attributes you should consult their
-descriptions in \appref{ss:attributedescriptions} and for details of
-the System settings for which they are relevant, see the description
-of the System attribute (also in \appref{ss:attributedescriptions}).
-For the interested reader, an excellent overview of celestial
-coordinate systems can also be found in the documentation for the
-SLALIB library (\xref{SUN/67}{sun67}{}).
-
-The value of these qualifying attributes is most conveniently set at
-the same time as the System value, {\em{e.g.}}\ when a SkyFrame is
-created. For instance:
-
-\small
-\begin{verbatim}
- SKYFRAME = AST_SKYFRAME( 'System=Ecliptic, Equinox=J2005.5', STATUS )
-\end{verbatim}
-\normalsize
-
-would create a SkyFrame representing an ecliptic coordinate system
-referred to the mean equinox and ecliptic of Julian epoch J2005.5.
-
-Note that it does no harm to assign values to qualifying attributes
-which are not relevant to the main System value. Any such values are
-stored, but are not used unless the System value is later set so that
-they become relevant.
-
-\subsection{Using Default SkyFrame Attributes}
-
-The default values supplied for many \htmlref{SkyFrame}{SkyFrame} attributes will depend
-on the value of the SkyFrame's \htmlref{System}{System} attribute. In practice, this
-means that there is usually little need to specify many of these
-attributes explicitly unless you have some special requirement. This
-can be illustrated by using \htmlref{AST\_SHOW}{AST_SHOW} to examine a SkyFrame, as
-follows:
-
-\small
-\begin{verbatim}
- CALL AST_SHOW( AST_SKYFRAME( 'System=FK4-NO-E, Epoch=1958', STATUS ), STATUS )
-\end{verbatim}
-\normalsize
-
-The output from this might look like the following:
-
-\begin{quote}
-\begin{verbatim}
- Begin SkyFrame # Description of celestial coordinate system
-# Title = "FK4 equatorial coordinates; no E-terms; mean equinox B1950.0;
-epoch B1958.0" # Title of coordinate system
- Naxes = 2 # Number of coordinate axes
-# Domain = "SKY" # Coordinate system domain
- Epoch = 1958 # Besselian epoch of observation
-# Lbl1 = "Right ascension" # Label for axis 1
-# Lbl2 = "Declination" # Label for axis 2
- System = "FK4-NO-E" # Coordinate system type
-# Uni1 = "hh:mm:ss.s" # Units for axis 1
-# Uni2 = "ddd:mm:ss" # Units for axis 2
-# Dir1 = 0 # Plot axis 1 in reverse direction
-# Bot2 = -1.5707963267949 # Lowest legal axis value
-# Top2 = 1.5707963267949 # Highest legal axis value
- Ax1 = # Axis number 1
- Begin SkyAxis # Celestial coordinate axis
- End SkyAxis
- Ax2 = # Axis number 2
- Begin SkyAxis # Celestial coordinate axis
- End SkyAxis
- IsA Frame # Coordinate system description
-# Eqnox = 1950 # Besselian epoch of mean equinox
- End SkyFrame
-\end{verbatim}
-\end{quote}
-
-Note that the defaults (indicated by the ``\verb?#?'' comment
-character at the start of the line) for attributes such as the \htmlref{Title}{Title},
-axis Labels and Format specifiers are all set to values appropriate
-for the particular equatorial coordinate system that the SkyFrame
-represents.
-
-This means, for example, that if we were to use this SkyFrame to
-format a right ascension value stored in radians using \htmlref{AST\_FORMAT}{AST_FORMAT}
-(\secref{ss:formattingaxisvalues}), it would automatically result in a
-string in sexagesimal notation (such as ``12:14:35.7'') suitable for
-display. If we changed the value of the SkyFrame's Digits attribute
-(which is inherited from the \htmlref{Frame}{Frame} class), the number of digits
-appearing would also change accordingly.
-
-These choices would be appropriate for a System value of ``FK4-NO-E'',
-but if a different System value were set, the defaults would be
-correspondingly different. For example, ecliptic longitude is
-traditionally expressed in degrees, so setting ``System=ecliptic''
-would result in coordinate values being formatted as degrees by
-default.
-
-Of course, if you do not like any of these defaults, you may always
-over-ride them by setting explicit attribute values yourself.
-
-\subsection{\label{ss:formattingskyaxisvalues}Formatting Celestial Coordinates}
-
-SkyFrames use \htmlref{AST\_FORMAT}{AST_FORMAT} for formatting coordinate values in the same
-way as other Frames (\secref{ss:formattingaxisvalues}). However, they
-offer a different set of formatting options more appropriate to
-celestial coordinates.
-
-The Digits attribute of a \htmlref{SkyFrame}{SkyFrame} behaves in essentially the same way
-as for a basic \htmlref{Frame}{Frame} (\secref{ss:formattingwithdigits}), so the
-precision with which celestial coordinates are displayed can also be
-adjusted in this way. However, the range of format specifiers that can
-be given for the \htmlref{Format(axis)}{Formataxis} attribute, and the default format
-resulting from any particular Digits value, is different.
-
-The syntax of SkyFrame format specifiers is detailed under the
-description of the Format(axis) attribute in
-\appref{ss:attributedescriptions}. Briefly, however, it allows
-celestial coordinates to be expressed either as angles or times and to
-include one or more of the fields:
-
-\begin{quote}
-\begin{itemize}
-\item degrees or hours
-\item arc-minutes or minutes
-\item arc-seconds or seconds
-\end{itemize}
-\end{quote}
-
-with a specified number of decimal places for the final field. A range
-of field separators is also available, as the following examples show:
-
-\begin{quote}
-\begin{center}
-\begin{tabular}{|l|l|}
-\hline
-{\bf{Format Specifier}} & {\bf{Example Formatted Value}}\\
-\hline \hline
-{\tt{d}} & {\tt{219}}\\
-{\tt{d.3}} & {\tt{219.123}}\\
-{\tt{dm}} & {\tt{219:05}}\\
-{\tt{dm.2}} & {\tt{219:05.44}}\\
-{\tt{dms}} & {\tt{219:05:42}}\\
-{\tt{hms.1}} & {\tt{15:44:13.8}}\\
-{\tt{bdms.2}} & {\tt{219 05 42.81}}\\
-{\tt{lhms.3}} & {\tt{15h44m13.88s}}\\
-{\tt{+zlhms}} & {\tt{+06h10m44s}}\\
-{\tt{ms.1}} & {\tt{13145:42.8}}\\
-{\tt{lmst.3}} & {\tt{876m22.854s}}\\
-{\tt{s.2}} & {\tt{788742.81}}\\
-\hline
-\end{tabular}
-\end{center}
-\end{quote}
-
-Note the following key points:
-
-\begin{itemize}
-\item The required fields are specified using characters chosen from
-either ``dms'' or ``hms'' according to whether the value is to be
-formatted as an angle (in degrees) or a time (in hours).
-
-\item If no degrees or hours field is required, the distinction
-between angle and time may be made by including ``t'' to request time.
-
-\item The number of decimal places (for the final field) is indicated
-using ``{\tt{.}}'' followed by an integer. An asterisk can be used in
-place of an integer, in which case the number of decimal places is
-chosen so that the total number of digits in the formatted value is equal
-to the value of the Digits attribute.
-
-\item ``b'' causes fields to be separated by blanks, while ``l''
-causes them to be separated by the appropriate letters (the default
-being a colon).
-
-\item ``z'' causes padding with leading zeros.
-
-\item ``+'' cause a plus sign to be prefixed to positive values
-(negative values always have a minus sign).
-\end{itemize}
-
-The formatting performed by a SkyFrame is also influenced by the
-\htmlref{AsTime(axis)}{AsTimeaxis} attribute, which has a boolean (integer) value for each
-SkyFrame axis. It determines whether the default format specifier for
-an axis will present values as angles ({\em{e.g.}}\ in degrees) if it
-is zero, or as times ({\em{e.g.}}\ in hours) if it is non-zero.
-
-The default AsTime value depends on the celestial coordinate system
-which the SkyFrame represents which, in turn, depends on its \htmlref{System}{System}
-attribute value. For example, equatorial longitude values (right
-ascension) are normally expressed in hours, whereas ecliptic
-longitudes are normally expressed in degrees, so their default AsTime
-values will reflect this difference.
-
-The value of the AsTime attribute may be set explicitly to over-ride
-these defaults if required, with the formatting precision being
-determined by the \htmlref{Digits/Digits(axis)}{DigitsDigitsaxis} value. Alternatively, the
-Format(axis) attribute may be set explicitly to specify both the
-format and precision required. Setting an explicit Format value always
-over-rides the effects of both the Digits and AsTime attributes (unless
-the Format value does not specify the required number of decimal places,
-in which case Digits is used to determine the default number of decimal
-places)
-
-\subsection{\label{ss:unformattingskyaxisvalues}Reading Formatted Celestial Coordinates}
-
-The process of converting formatted celestial coordinates, such as
-might be produced by the \htmlref{AST\_FORMAT}{AST_FORMAT} function
-(\secref{ss:formattingskyaxisvalues}), into numerical (double
-precision) coordinate values is performed by using \htmlref{AST\_UNFORMAT}{AST_UNFORMAT}
-(\secref{ss:unformattingaxisvalues}) and passing it a pointer to a
-\htmlref{SkyFrame}{SkyFrame}. The use of a SkyFrame means that the range of input formats
-accepted is appropriate to positions on the sky expressed as angles
-and/or times, while the returned value is in radians.
-
-The following describes the forms of celestial coordinate which are
-supported:
-
-\begin{itemize}
-\item You may supply an optional sign, followed by between one and
-three fields representing either degrees, arc-minutes, arc-seconds or
-hours, minutes, seconds ({\em{e.g.}}\ ``$-$12~42~03'').
-
-\item Each field should consist of a sequence of one or more digits,
-which may include leading zeros. At most one field may contain a
-decimal point, in which case it is taken to be the final field
-({\em{e.g.}}\ decimal degrees might be given as ``124.707'', while
-degrees and decimal arc-minutes might be given as ``$-$13~33.8'').
-
-\item The first field given may take any value, allowing angles and
-times outside the conventional ranges to be represented. However,
-subsequent fields must have values of less than 60 ({\em{e.g.}}
-``720~45~31'' is valid, whereas ``11~45~61'' is not).
-
-\item Fields may be separated by white space or by ``:'' (colon), but
-the choice of separator must be used consistently throughout the
-value. Additional white space may be present around fields and
-separators ({\em{e.g.}}\ ``$-$~2:~04~:~7.1'').
-
-\item The following field identification characters may be used as
-separators to replace those above (or may be appended to the final
-field), in order to identify the field to which they are appended:
-
-\begin{quote}
-\begin{tabular}{lll}
-d & -- & degrees \\
-h & -- & hours \\
-m & -- & minutes (of arc or time) \\
-s & -- & seconds (of arc or time) \\
-{\tt{'}} & -- & arc-minutes \\
-{\tt{"}} & -- & arc-seconds
-\end{tabular}
-\end{quote}
-
-Either lower or upper case may be used. Fields must be given in order
-of decreasing significance
-({\em{e.g.}}\ ``$-$11D~3{\tt{'}}~14.4{\tt{"}}'' or ``22h14m11.2s'').
-
-\item The presence of certain field identification characters
-indicates whether the value is to be interpreted as an angle or a time
-(with 24 hours corresponding to 360 degrees), as follows:
-
-\begin{quote}
-\begin{tabular}{lll}
-d & -- & angle \\
-{\tt{'}} & -- & angle \\
-{\tt{"}} & -- & angle \\
-h & -- & time
-\end{tabular}
-\end{quote}
-
-Incompatible angle/time identification characters may not be mixed
-({\em{e.g.}}\ ``10h14{\tt{'}}3{\tt{"}}'' is not valid). The remaining
-field identification characters and separators do not specify a
-preference for an angle or a time and may be used with either.
-
-\item If no preference for an angle or a time is expressed anywhere
-within the value, then it is interpreted as an angle if the Format
-attribute string associated with the SkyFrame axis generates an angle
-and as a time otherwise. This ensures that values produced by
-AST\_FORMAT (\secref{ss:formattingskyaxisvalues}) are correctly
-interpreted by AST\_UNFORMAT.
-
-\item Fields may be omitted, in which case they default to zero. The
-remaining fields may be identified by using appropriate field
-identification characters (see above) and/or by adding extra colon
-separators (e.g. ``$-$05m13s'' is equivalent to ``$-$:05:13''). If a field
-is not identified explicitly, it is assumed that adjacent fields have
-been given, after taking account of any extra separator
-characters. For example:
-
-\begin{quote}
-\begin{tabular}{lll}
-10d & -- & degrees \\
-10d12 & -- & degrees and arc-minutes \\
-11:14{\tt{"}} & -- & arc-minutes and arc-seconds \\
-9h13s & -- & hours and seconds of time \\
-:45:33 & -- & minutes and seconds (of arc or time) \\
-:55: & -- & minutes (of arc or time) \\
-::13 & -- & seconds (of arc or time) \\
-$-$6::2.5 & -- & degrees/hours and seconds (of arc or time) \\
-07m14 & -- & minutes and seconds (of arc or time) \\
-$-$8:14{\tt{'}} & -- & degrees and arc-minutes \\
-$-$h3:14 & -- & minutes and seconds of time \\
-h:2.1 & -- & seconds of time
-\end{tabular}
-\end{quote}
-
-\item If fields are omitted in such a way that the remaining ones
-cannot be identified uniquely (e.g. ``01:02''), then the first field
-(either given explicitly or implied by an extra leading colon
-separator) is taken to be the most significant field that AST\_FORMAT
-would produce when formatting a value (using the Format attribute
-associated with the SkyFrame axis). By default, this means that the
-first field will normally be interpreted as degrees or hours. However,
-if this does not result in consistent field identification, then the
-last field (either given explicitly or implied by an extra trailing
-colon separator) is taken to to be the least significant field that
-AST\_FORMAT would produce.
-
-\end{itemize}
-
-This final convention is intended to ensure that values formatted by
-AST\_FORMAT which contain less than three fields will be correctly
-interpreted if read back using AST\_UNFORMAT, even if they do not
-contain field identification characters. However, it also affects
-other forms of input. For example, if the \htmlref{Format(axis)}{Formataxis} string were set
-to ``mst.1'' (producing two fields representing minutes and seconds of
-time), then formatted input would be interpreted by AST\_UNFORMAT as
-follows:
-
-\begin{quote}
-\begin{tabular}{lll}
-12 13 & -- & minutes and seconds \\
-12 & -- & minutes \\
-:13 & -- & seconds \\
-$-$18: & -- & minutes \\
-12.8 & -- & minutes \\
-1 2 3 & -- & hours, minutes and seconds \\
-& & \\
-4{\tt{'}} & -- & arc-minutes \\
-60::{\tt{"}} & -- & degrees \\
-$-$23:{\tt{"}} & -- & arc-minutes \\
-$-$33h & -- & hours
-\end{tabular}
-\end{quote}
-
-(in the last four cases, explicit field identification has been given
-which overrides the implicit identification).
-
-Alternatively, if the Format(axis) string were set to ``s.3''
-(producing only an arc-seconds field), then formatted input would be
-interpreted by AST\_UNFORMAT as follows:
-
-\begin{quote}
-\begin{tabular}{lll}
-12.8 & -- & arc-seconds \\
-12 13 & -- & arc-minutes and arc-seconds \\
-:12 & -- & arc-seconds \\
-13: & -- & arc-minutes \\
-1 2 3 & -- & degrees, arc-minutes and arc-seconds
-\end{tabular}
-\end{quote}
-
-In general, if you are preparing formatted input data containing
-celestial coordinates and wish to omit certain fields, then you are
-advised to identify clearly those that you do provide by using the
-appropriate field identification characters and/or extra colon
-separators. This prevents you depending on the implicit field
-identification described above which, in turn, depends on an
-appropriate Format(axis) string having been set.
-
-When writing software, it is also a good idea to set the Format(axis)
-string so that data input will be as simple as possible for the
-user. Unless some special effect is desired, this normally means that
-it should contain ``d'' or ``h'' to ensure that the first field
-entered by the user will be interpreted as degrees or hours, unless
-otherwise identified. This is the normal behaviour unless an explicit
-Format(axis) value has been set to override the default.
-
-\subsection{Representing Offsets from a Specified Sky Position}
-A \htmlref{SkyFrame}{SkyFrame} can be modified so that its longitude and latitude axes are
-referred to an origin at any specified sky position. Such a coordinate
-system is referred to as an ``offset'' coordinate syetem. First, the \htmlref{System}{System}
-attribute should be set to represent the celestial coordinate system in
-which the origin is to be specified. Then the SkyRef attribute should be
-set to hold the coordinates of the origin within the selected celestial
-coordinate system.
-
-By default, ``north'' in the new offset coordinate system is parallel to
-north in the original celestial coordinate system. However, the direction
-of north in the offset system can be controlled by assigning a value to
-the SkyRefP attribute. This attribute should be assigned the celestial
-coordinates of a point which is on the zero longitude meridian and which
-has non-zero latitude.
-
-By default, the position given by the SkyRef attribute is used as the
-origin of the new longitude/latitude system, but an option exists to use
-it as the north pole of the system instead. This option is controlled by
-the \htmlref{SkyRefIs}{SkyRefIs} attribute. The choice of value for SkyRefIs depends on what
-sort of offset coordinate system you want. Setting SkyRefIs to
-``Origin'' (the default) produces an offset coordinate system which is
-approximately Cartesian close to the specified position. Setting SkyRefIs
-to
-``Pole'' produces an offset coordinate system which is approximately Polar
-close to the specified position.
-
-\cleardoublepage
-\section{\xlabel{ss_specframes}\label{ss:specframes}Spectral Coordinate Systems (SpecFrames)}
-
-The \htmlref{SpecFrame}{SpecFrame} is a \htmlref{Frame}{Frame} which is specialised for representing coordinate
-systems which describe a position within an electro-magnetic spectrum.
-In this section we examine the additional properties and behaviour of a
-SpecFrame that distinguish it from a basic Frame (\secref{ss:frames}).
-
-\subsection{The SpecFrame Model}
-
-As for a \htmlref{SkyFrame}{SkyFrame}, a \htmlref{SpecFrame}{SpecFrame} is a \htmlref{Frame}{Frame} (\secref{ss:frames}) and also a
-\htmlref{Mapping}{Mapping} (\secref{ss:mappings}), so it inherits all the properties and
-behaviour of these two ancestral classes. When used as a Mapping, a
-SpecFrame implements a unit transformation, exactly like a basic Frame
-(\secref{ss:frameasmapping}) or a \htmlref{UnitMap}{UnitMap}, so this aspect of its
-behaviour is not of great importance.
-
-When used as a Frame, however, a SpecFrame represents a wide range of
-different 1-dimensional coordinate system which can be used to describe
-positions within a spectrum. The options available largely mirror those
-described in the FITS-WCS paper III \emph{Representations of spectral
-coordinates in FITS} (Greisen, Valdes, Calabretta \& Allen).
-
-\subsection{Creating a SpecFrame}
-
-The \htmlref{SpecFrame}{SpecFrame} constructor function is particularly simple and a
-SpecFrame with default attributes is created as follows:
-
-\small
-\begin{verbatim}
- INCLUDE 'AST_PAR'
- INTEGER SPECFRAME, STATUS
-
- STATUS = 0
-
- ...
-
- SPECFRAME = AST_SPECFRAME( ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-Such a SpecFrame would represent the default coordinate system which is
-heliocentric wavelength in metres (i.e. wavelength corrected to take into
-account the Doppler shift caused by the velocity of the observer around the
-sun).
-
-\subsection{Specifying a Particular Spectral Coordinate System}
-
-Selection of a particular coordinate system is performed simply by
-setting a value for the \htmlref{SpecFrame}{SpecFrame}'s (character string) \htmlref{System}{System}
-attribute. This setting is most conveniently done when the SpecFrame is
-created. For example, a SpecFrame representing Energy would be created by:
-
-\small
-\begin{verbatim}
- SPECFRAME = AST_SPECFRAME( 'System=Energy', STATUS )
-\end{verbatim}
-\normalsize
-
-Note that specifying ``System$=$Energy'' also changes the associated
-Unit (from metres to Joules). This is because the default value
-of the SpecFrame's Unit attribute depends on the System attribute setting.
-
-You may change the System value at any time, although this is not
-usually needed. The values supported are set out in the attribute's
-description in \appref{ss:attributedescriptions} and include a variety
-of velocity systems, together with frequency, wavelength, energy,
-wave-number, \emph{etc}.
-
-\subsection{Attributes which Qualify Spectral Coordinate Systems}
-
-Many spectral coordinate systems have some additional free parameters
-which serve to identify a particular coordinate system from amongst a
-broader class of related coordinate systems. For example, the
-velocity systems are all parameterised by a rest frequency---the
-frequency which defines zero velocity, and all coordinate systems
-are qualified by a `standard of rest'' which indicates the rest frame to
-which the values refer.
-
-In AST, these free parameters are represented by additional \htmlref{SpecFrame}{SpecFrame}
-attributes, each of which has a default appropriate to
-({\em{i.e.}}\ defined by) the setting of the main \htmlref{System}{System}
-attribute. Each of these {\em{qualifying attributes}} may, however, be
-assigned an explicit value so as to select a particular coordinate
-system. Note, it is usually best to assign explicit
-values whenever possible rather than relying on defaults. Attribute
-should only be left at their default value if you ``don't care'' what
-value is used. In certain circumstances (particularly, when aligning two
-Frames), a default value for an attribute may be replaced by the value
-from another similar \htmlref{Frame}{Frame}. Such value replacement can be prevented by
-assigning an explicit value to the attribute, rather than simply relying on
-the default.
-
-
-The main SpecFrame attributes which qualify the System attribute are:
-
-\begin{quote}
-\begin{description}
-
-\item[\htmlref{Epoch}{Epoch}]\mbox{}\\
-This attribute is inherited from the Frame class. It gives the moment in
-time when the coordinates are correct for the astronomical source
-under study (usually the date of observation). It is needed in order to
-calculate the Doppler shift produced by the velocity of the observer
-relative to the centre of the earth, and of the earth relative to the sun.
-
-\item[\htmlref{StdOfRest}{StdOfRest}]\mbox{}\\
-This specifies the rest frame in which the coordinates are correct.
-Transforming between different standards of rest involves taking account
-of the Doppler shift introduced by the relative motion of the two
-standards of rest.
-
-\item[\htmlref{RestFreq}{RestFreq}]\mbox{}\\
-Specifies the frequency which correspond to zero velocity. When setting a
-value for this attribute, the value may be supplied as a wavelength
-(including an indication of the units being used, ``nm'' ``Angstrom'',
-\emph{etc.}), which will be automatically be converted to a frequency.
-
-\item[\htmlref{RefRA}{RefRA}]\mbox{}\\
-Specifies the RA (FK5 J2000) of the source. This is used when converting
-between standards of rest. It specifies the direction along which the
-component of the relative velocity of the two standards of rest is taken.
-
-\item[\htmlref{RefDec}{RefDec}]\mbox{}\\
-Specifies the Dec (FK5 J2000) of the source. Used in conjunction with
-REFRA.
-
-\item[\htmlref{SourceVel}{SourceVel}]\mbox{}\\
-This defines the ``source'' standard of rest. This is a rest frame which
-is moving towards the position given by RefRA and RefDec, at a velocity
-given by SourceVel. The velocity is stored internally as a heliocentric
-velocity, but can be given in any of the other supported standards of rest.
-
-\end{description}
-\end{quote}
-
-For further details of these attributes you should consult their
-descriptions in \appref{ss:attributedescriptions} and for details of
-the System settings for which they are relevant, see the description
-of the System attribute (also in \appref{ss:attributedescriptions}).
-
-Note that it does no harm to assign values to qualifying attributes
-which are not relevant to the main System value. Any such values are
-stored, but are not used unless the System value is later set so that
-they become relevant.
-
-\subsection{Using Default SpecFrame Attributes}
-
-The default values supplied for many \htmlref{SpecFrame}{SpecFrame} attributes will depend
-on the value of the SpecFrame's \htmlref{System}{System} attribute. In practice, this
-means that there is usually little need to specify many of these
-attributes explicitly unless you have some special requirement. This
-can be illustrated by using \htmlref{AST\_SHOW}{AST_SHOW} to examine a SpecFrame, as
-follows:
-
-\small
-\begin{verbatim}
- CALL AST_SHOW( AST_SPECFRAME( 'System=Vopt, RestFreq=250 GHz', STATUS ),
- : STATUS )
-\end{verbatim}
-\normalsize
-
-The output from this might look like the following:
-
-\begin{quote}
-\begin{verbatim}
- Begin SpecFrame # Description of spectral coordinate system
-# Title = "Optical velocity, rest frequency = 250 GHz" # Title
-of coordinate system
- Naxes = 1 # Number of coordinate axes
-# Domain = "SPECTRUM" # Coordinate system domain
-# Epoch = 2000 # Julian epoch of observation
-# Lbl1 = "Optical velocity" # Label for axis 1
- System = "VOPT" # Coordinate system type
-# Uni1 = "km/s" # Units for axis 1
- Ax1 = # Axis number 1
- Begin Axis # Coordinate axis
- End Axis
- IsA Frame # Coordinate system description
-# SoR = "Heliocentric" # Standard of rest
- RstFrq = 250000000000 # Rest frequency (Hz)
- End SpecFrame
-\end{verbatim}
-\end{quote}
-
-Note that the defaults (indicated by the ``\verb?#?'' comment
-character at the start of the line) for attributes such as the \htmlref{Title}{Title},
-axis Labels and Unit specifiers are all set to values appropriate
-for the particular velocity system that the SpecFrame represents.
-
-These choices would be appropriate for a System value of ``Vopt'',
-but if a different System value were set, the defaults would be
-correspondingly different. For example, by default frequency is measured in
-units of GHz, not $km/s$, so setting ``System=freq''
-would change the appropriate line above from:
-
-\begin{quote}
-\begin{verbatim}
-# Uni1 = "km/s" # Units for axis 1
-\end{verbatim}
-\end{quote}
-
-to
-
-\begin{quote}
-\begin{verbatim}
-# Uni1 = "GHz" # Units for axis 1
-\end{verbatim}
-\end{quote}
-
-Of course, if you do not like any of these defaults, you may always
-over-ride them by setting explicit attribute values yourself. For
-instance, you may choose to have your frequency axis expressed in ``kHz''
-rather than ``GHz''. To do this simply set the attribute value as follows:
-
-\small
-\begin{verbatim}
- CALL AST_SETC( SPECFRAME, 'Unit', 'kHz', STATUS )
-\end{verbatim}
-\normalsize
-
-No error will be reported if you accidentally set an inappropriate Unit value
-(say "J" - Joules)---after all, AST cannot tell what you are about to do,
-and you \emph{may} be about to change the System value to ``Energy''.
-However, an error \emph{will} be reported if you attempt to find a
-conversion between two SpecFrames (for instance using
-\htmlref{AST\_CONVERT}{AST_CONVERT}
-) if either SpecFrame has a Unit value which is inappropriate for its
-System value.
-
-SpecFrame attributes, like all other attributes, all have default
-value. However, be aware that for some attributes these default values
-can never be more than ``a legal numerical value'' and have no
-astronomical significance. For instance, the \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec} attributes
-(which give the source position) both have a default value of zero. So
-unless your source happens to be at that point (highly unlikely!) you will
-need to set new values. Likewise, the \htmlref{RestFreq}{RestFreq} (rest frequency) attribute
-has an arbitrary default value of 1.0E5 GHz. Some operations are not
-affected by inappropriate values for these attributes (for instance,
-converting from frequency to wavelength, changing axis units, \emph{etc}),
-but some are. For instance, converting from frequency to velocity
-requires a correct rest frequency, moving between different standards of
-rest requires a correct source position. The moral is, always set explicit
-values for as many attributes as possible.
-
-\subsection{\label{ss:creatingspectralcubes}Creating Spectral Cubes}
-You can use a \htmlref{SpecFrame}{SpecFrame} to describe the spectral axis in a data cube
-containing two spatial axes and a spectral axis. To do this you would
-create an appropriate SpecFrame, together with a 2-dimensional \htmlref{Frame}{Frame}
-(often a \htmlref{SkyFrame}{SkyFrame}) to describe the spatial axes. You would then combine
-these two Frames together into a single \htmlref{CmpFrame}{CmpFrame}.
-
-\small
-\begin{verbatim}
- INTEGER SKYFRAME
- INTEGER SPECFRAME
- INTEGER CMPFRAME
- ...
- SKYFRAME = AST_SKYFRAME( 'Epoch=J2002', STATUS )
- SPECFRAME = AST_SPECFRAME( 'System=Freq,StdOfRest=LSRK',
- : STATUS )
- CMPFRAME = AST_CMPFRAME( SKYFRAME, SPECFRAME, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-In the resulting CmpFrame, axis 1 will be RA, axis 2 will be Dec and axis
-3 will be Frequency. If this is not the order you want, you can permute
-the axes using
-\htmlref{AST\_PERMAXES}{AST_PERMAXES}.
-
-There is one potential problem with this approach if you are interested in
-unusually high accuracy. Conversion between different standards of rest
-involves taking account of the Doppler shift caused by the relative
-motion of the two standards of rest. At some point this involves finding
-the component of the relative velocity in the direction of interest.
-For a SpecFrame, this direction is always given by the \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec}
-attributes, even if the SpecFrame is embedded within a CmpFrame as above.
-It would be more appropriate if this ``direction of interest'' was
-specified by the values passed into the CmpFrame on the RA and DEC axes,
-allowing each pixel within a data cube to have a slightly different
-correction for Doppler shift.
-
-Unfortunately, the SpecFrame class cannot do this (since it is purely a
-1-dimensional Frame), and so some small degree of error will be
-introduced when converting between standards of rest, the size of the
-error varying from pixel to pixel. It is hoped that at some point in the
-future a sub-class of CmpFrame (a SpecCubeFrame) will be added to AST which
-allows for this spatial variation in Doppler shift.
-
-The maximum velocity error introduced by this problem is of the order of
-$V*SIN(FOV)$, where $FOV$ is the angular field of view, and $V$ is the
-relative velocity of the two standards of rest. As an example, when
-correcting from the observers rest frame (i.e. the topocentric rest
-frame) to the kinematic local standard of rest the maximum value of $V$
-is about 20 $km/s$, so for 5 arc-minute field of view the maximum
-velocity error introduced by the correction will be about 0.03 $km/s$. As
-another example, the maximum error when correcting from the observers
-rest frame to the local group is about 5 $km/s$ over a 1 degree field of
-view.
-
-\subsection{\label{ss:handlingdualsidebandspectra}Handling Dual-Sideband Spectra}
-Dual sideband super-heterodyne receivers produce spectra in which each channel
-contains contributions from two different frequencies, referred to as the
-``upper sideband frequency'' and the ``lower sideband frequency''. In the
-rest frame of the observer (topocentric), these are related to each other as
-follows:
-
-\begin{quote}
-\begin{small}
-\begin{equation}
-\label{eqn:dsb}
- f_{lsb} = 2.f_{LO} - f_{usb}
-\end{equation}
-\end{small}
-\end{quote}
-
-where $f_{LO}$ is a fixed frequency known as the ``local oscillator
-frequency''. In other words, the local oscillator frequency is always
-mid-way between any pair of corresponding upper and lower sideband
-frequencies\footnote{Note, this simple relationship only applies if all
-frequencies are topocentric.}. If you want to describe the spectral axis
-of such a spectrum using a \htmlref{SpecFrame}{SpecFrame} you must choose whether you want the
-SpecFrame to describe $f_{lsb}$ or $f_{usb}$ - a basic SpecFrame cannot
-describe both sidebands simultaneously. However, there is a sub-class of
-SpecFrame, called \htmlref{DSBSpecFrame}{DSBSpecFrame}, which overcomes this difficulty.
-
-A DSBSpecFrame has a \htmlref{SideBand}{SideBand} attribute which indicates if the
-DSBSpecFrame is currently being used to describe the upper or lower
-sideband spectral axis. The value of this attribute can be changed at any
-time. If you use the
-\htmlref{AST\_CONVERT}{AST_CONVERT}
-function to find the \htmlref{Mapping}{Mapping} between two DSBSpecFrames, the setting for
-the two SideBand attributes will be taken into account. Thus, if you take
-a copy of a DSBSpecFrame, toggle its SideBand attribute, and then use
-AST\_CONVERT
-to find a Mapping from the original to the modified copy, the resulting
-Mapping will be of the form of equation \ref{eqn:dsb} (if the
-DSBSpecFrame has its \htmlref{StdOfRest}{StdOfRest} attribute set to ``Topocentric'').
-
-In general, when finding a Mapping between two arbitrary DSBSpecFrames,
-the total Mapping is made of of three parts in series:
-
-\begin{enumerate}
-\item A Mapping which converts the first DSBSpecFrame into its upper
-sideband representation. If the DSBSpecFrame already represents its upper
-sideband, this Mapping will be a \htmlref{UnitMap}{UnitMap}.
-\item A Mapping which converts from the first to the second DSBSpecFrame,
-treating them as if they were both basic SpecFrames. This takes account of
-any difference in units, standard of rest, system, \emph{etc} between the
-two DSBSpecFrames.
-\item A Mapping which converts the second DSBSpecFrame from its upper
-sideband representation to its current sideband. If the DSBSpecFrame
-currently represents its upper sideband, this Mapping will be a UnitMap.
-\end{enumerate}
-
-If an attempt is made to find the Mapping between a DSBSpecFrame and a
-basic SpecFrame, then the DSBSpecFrame will be treated like a basic
-SpecFrame. In other words, the returned Mapping will not be affected by
-the setting of the SideBand attribute (or any of the other attributes
-specific to the DSBSpecFrame class).
-
-In practice, the local oscillator frequency for a dual sideband
-instrument may not be easily available to an observer. Instead, it is
-common practice to specify the spectral position of some central feature
-in the observation (commonly the centre of the instrument passband),
-together with an ``intermediate frequency''. Together, these two values
-allow the local oscillator frequency to be determined. The intermediate
-frequency is the difference between the topocentric frequency at the
-central spectral position and the topocentric frequency of the local
-oscillator. So:
-
-\begin{quote}
-\begin{small}
-\begin{equation}
-\label{eqn:dsb2}
- f_{LO} = f_{central} + f_{if}
-\end{equation}
-\end{small}
-\end{quote}
-
-The DSBSpecFrame class uses the \htmlref{DSBCentre}{DSBCentre} attribute to specify the central
-spectral position ($f_{central}$), and the \htmlref{IF}{IF} attribute to specify the
-intermediate frequency ($f_{if}$). The DSBCentre value is given and returned
-in the spectral system described by the DSBSpecFrame (thus you do not need to
-calculate the corresponding topocentric frequency yourself - this will be
-done automatically by the DSBSpecFrame when you assign a new value to the
-DSBCentre attribute). The value assigned to the IF attribute should
-always be a topocentric frequency in units of Hz, however a negative
-value may be given to indicate that the DSBCentre value is in the upper
-sideband (that is, if $IF < 0$ then $f_{central} > f_{LO}$). A positive
-value for IF indicates that the DSBCentre value is in the lower sideband
-(that is, if $IF > 0$ then $f_{central} < f_{LO}$).
-
-
-\cleardoublepage
-\section{\xlabel{ss_timeframes}\label{ss:timeframes}Time Systems (TimeFrames)}
-
-The \htmlref{TimeFrame}{TimeFrame} is a \htmlref{Frame}{Frame} which is specialised for representing moments in
-time. In this section we examine the additional properties and behaviour of a
-TimeFrame that distinguish it from a basic Frame (\secref{ss:frames}).
-
-\subsection{The TimeFrame Model}
-
-As for a \htmlref{SkyFrame}{SkyFrame}, a \htmlref{TimeFrame}{TimeFrame} is a \htmlref{Frame}{Frame} (\secref{ss:frames}) and also a
-\htmlref{Mapping}{Mapping} (\secref{ss:mappings}), so it inherits all the properties and
-behaviour of these two ancestral classes. When used as a Mapping, a
-TimeFrame implements a unit transformation, exactly like a basic Frame
-(\secref{ss:frameasmapping}) or a \htmlref{UnitMap}{UnitMap}, so this aspect of its
-behaviour is not of great importance.
-
-When used as a Frame, however, a TimeFrame represents a wide range of
-different 1-dimensional coordinate system which can be used to describe
-moments in time. Absolute times and relative (i.e. elapsed) times are
-supported (attribute \htmlref{TimeOrigin}{TimeOrigin}), as are a range of different time scales
-(attribute \htmlref{TimeScale}{TimeScale}). An absolute or relative value in any time scale can
-be represented in different forms such as Modified Julian Date, Julian \htmlref{Epoch}{Epoch},
-\emph{etc} (attribute \htmlref{System}{System}). AST extends the definition of these systems to
-allow them to be used with any unit of time (attribute Unit). The TimeFrame
-class also allows times to formatted as either a simple floating point value
-or as a Gregorian date and time of day (attribute Format).
-
-\subsection{Creating a TimeFrame}
-
-The \htmlref{TimeFrame}{TimeFrame} constructor function is particularly simple and a
-TimeFrame with default attributes is created as follows:
-
-\small
-\begin{verbatim}
- INCLUDE 'AST_PAR'
- INTEGER TIMEFRAME, STATUS
-
- STATUS = 0
-
- ...
-
- TIMEFRAME = AST_TIMEFRAME( ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-Such a TimeFrame would represent the default coordinate system which is
-Modified Julian Date (with the usual units of days) in the International
-Atomic Time (TAI) time scale.
-
-\subsection{Specifying a Particular Time System}
-By setting the \htmlref{System}{System} attribute appropriately, the \htmlref{TimeFrame}{TimeFrame} can represent
-Julian Date, Modified Julian Date, Julian \htmlref{Epoch}{Epoch} or Besselian Epoch (the
-time scale is specified by a separate attribute called \htmlref{TimeScale}{TimeScale}).
-
-Selection of a particular coordinate system is performed simply by
-setting a value for the TimeFrame's (character string) System
-attribute. This setting is most conveniently done when the TimeFrame is
-created. For example, a TimeFrame representing Julian Epoch would be created
-by:
-
-\small
-\begin{verbatim}
- TIMEFRAME = AST_TIMEFRAME( 'System=JEPOCH', STATUS )
-\end{verbatim}
-\normalsize
-
-Note that specifying ``System$=$JEPOCH'' also changes the associated
-default Unit (from days to years). This is because the default value
-of the TimeFrame's Unit attribute depends on the System attribute setting.
-
-You may change the System value at any time, although this is not
-usually needed. The values supported are set out in the attribute's
-description in \appref{ss:attributedescriptions}.
-
-\subsection{Attributes which Qualify Time Coordinate Systems}
-
-Time coordinate systems require some additional free parameters to identify
-a particular coordinate system from amongst a broader class of related
-coordinate systems. For example, all TimeFrames are qualified by the time
-scale (that is, the physical process used to define the flow of time),
-and some require the position of the observer's clock.
-
-In AST, these free parameters are represented by additional \htmlref{TimeFrame}{TimeFrame}
-attributes, each of which has a default appropriate to ({\em{i.e.}}\ defined
-by) the setting of the main \htmlref{System}{System} attribute. Each of these {\em{qualifying
-attributes}} may, however, be assigned an explicit value so as to select a
-particular coordinate system. Note, it is usually best to assign explicit
-values whenever possible rather than relying on defaults. Attribute
-should only be left at their default value if you ``don't care'' what
-value is used. In certain circumstances (particularly, when aligning two
-Frames), a default value for an attribute may be replaced by the value
-from another similar \htmlref{Frame}{Frame}. Such value replacement can be prevented by
-assigning an explicit value to the attribute, rather than simply relying on
-the default.
-
-The main TimeFrame attributes which qualify the System attribute are:
-
-\begin{quote}
-\begin{description}
-
-\item[\htmlref{TimeScale}{TimeScale}]\mbox{}\\
-This specifies the time scale.
-
-\item[\htmlref{LTOffset}{LTOffset}]\mbox{}\\
-This specifies the offset from Local Time to UTC in hours (time zones
-east of Greenwich have positive values). Note, AST uses the value as
-supplied without making any correction for daylight saving.
-
-\item[\htmlref{TimeOrigin}{TimeOrigin}]\mbox{}\\
-This specifies the zero point from which time values are measured, within
-the system specified by the System attribute. Thus, a value ofzero (the
-default) indicates that time values represent absolute times. Non-zero
-values may be used to indicate that the TimeFrame represents elapsed time
-since the specified origin.
-
-\end{description}
-\end{quote}
-
-For further details of these attributes you should consult their
-descriptions in \appref{ss:attributedescriptions} and for details of
-the System settings for which they are relevant, see the description
-of the System attribute (also in \appref{ss:attributedescriptions}).
-
-Note that it does no harm to assign values to qualifying attributes
-which are not relevant to the main System or TimeScale value. Any such
-values are stored, but are not used unless the System and/or TimeScale
-value is later set so that they become relevant.
-
-\cleardoublepage
-\section{\label{ss:cmpframes}Compound Frames (CmpFrames)}
-
-We now turn to a rather special form of \htmlref{Mapping}{Mapping}, the \htmlref{CmpFrame}{CmpFrame}. The
-Frames we have considered so far have been atomic, in the sense that
-they represent pre-defined elementary physical domains. A CmpFrame,
-however, is a compound \htmlref{Frame}{Frame}. In essence, it is a structure for
-containing other Frames and its purpose is to allow those Frames
-to work together in various combinations while appearing as a single
-\htmlref{Object}{Object}. A CmpFrame's behaviour is therefore not pre-defined, but is
-determined by the other Frames it contains (its ``component'' Frames).
-
-As with compound Mappings, compound Frames can be nested within each
-other, forming arbitrarily complex Frames.
-
-\subsection{Creating a CmpFrame}
-A very common use for a \htmlref{CmpFrame}{CmpFrame} within astronomy is to represent a
-``spectral cube''. This is a 3-dimensional \htmlref{Frame}{Frame} in which one of the axes
-represents position within a spectrum, and the other two axes represent
-position on the sky (or some other spatial domain such as the focal plane
-of a telescope). As an example, we create such a CmpFrame in which axes
-1 and 2 represent Right Ascension and Declination (ICRS), and axis 3
-represents wavelength (these are the default coordinate Systems
-represented by a \htmlref{SkyFrame}{SkyFrame} and a \htmlref{SpecFrame}{SpecFrame} respectively):
-
-\small
-\begin{verbatim}
- INTEGER SKYFRAME
- INTEGER SPECFRAME
- INTEGER CMPFRAME
- ...
- SKYFRAME = AST_SKYFRAME( ' ', STATUS )
- SPECFRAME = AST_SPECFRAME( ' ', STATUS )
- CMPFRAME = AST_CMPFRAME( SKYFRAME, SPECFRAME, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-If it was desired to make RA and Dec correspond to axes 1 and 3, with
-axis 2 being the spectral axis, then the axes of the CmpFrame created
-above would need to be permuted as follows:
-
-\small
-\begin{verbatim}
- INTEGER PERM(3)
- ...
-
- PERM( 1 ) = 1
- PERM( 2 ) = 3
- PERM( 3 ) = 2
- CALL AST_PERMAXES( CMPFRAME, PERM, STATUS )
-\end{verbatim}
-\normalsize
-
-\subsection{The Attributes of a CmpFrame}
-
-A \htmlref{CmpFrame}{CmpFrame} \emph{is a} \htmlref{Frame}{Frame} and so has all the attributes of a Frame.
-The default value for the \htmlref{Domain}{Domain} attribute for a CmpFrame is formed by
-concatenating the Domains of the two component Frames, separated by a
-minus sign (``-'').\footnote{If both component Frames have blank Domains,
-then the default Domain for the CmpFrame is the string ``CMP''.} The (fixed)
-value for its \htmlref{System}{System} attribute is ``Compound''.\footnote{Any attempt to
-change the System value of a CmpFrame is ignored.} A CmpFrame has no
-further attributes over and above those common to all Frames. However,
-attributes of the two component Frames can be accessed as if they were
-attributes of the CmpFrame, as described below.
-
-Frame attributes which are specific to individual axes (such as Label(2),
-Format(1), \emph{etc}) simply mirror the corresponding axes of the
-relevant component Frame. That is, if the ``Label(2)'' attribute of a
-CmpFrame is accessed, the CmpFrame will forward the access request to the
-component Frame which contains axis 2. Thus, default values for axis
-attributes will be the same as those provided by the component Frames.
-
-An axis index can optionally be appended to the name of Frames attributes
-which do not normally have such an index (System, Domain, \htmlref{Epoch}{Epoch}, \htmlref{Title}{Title},
-\emph{etc}). If this is done, the access request is forwarded to the
-component Frame containing the indicated axis. For instance, if a
-CmpFrame contains a \htmlref{SpecFrame}{SpecFrame} and a \htmlref{SkyFrame}{SkyFrame} in that order, and the axes
-have not been permuted, then getting the value of attribute ``System'' will
-return ``Compound'' as mentioned above (that is, the System value of the
-CmpFrame as a whole), whereas getting the value of attribute
-``System(1)'' will return ``Spectral''(that is, the System value of the
-component Frame containing axis 1 --- the SpecFrame).
-
-This technique is not limited to attributes common to all Frames. For
-instance, the SkyFrame class defines an attribute called \htmlref{Equinox}{Equinox} which is
-not held by other classes of Frames. To set a value for the Equinox
-attribute of the SkyFrame contained within the above CmpFrame, assign the
-value to the ``Equinox(2)'' attribute of the CmpFrame. Since the SkyFrame
-defines both axes 2 and 3 of the CmpFrame, we could equivalently have set
-a value for ``Equinox(3)'' since this would also result in the attribute
-access being forwarded to the SkyFrame.
-
-Finally, if an attribute is not qualified by a axis index, attempts will
-be made to access it using each of the CmpFrame axes in turn. Using the
-above example of the spectral cube, if an attempt was made to get the
-value of attribute ``Equinox'' (with no axis index), each axis in turn
-would be used. Since axis 1 is contained within a SpecFrame, the first
-attempt would fail since the SpecFrame class does not have an Equinox
-attribute. However, the second attempt would succeed because axis 2 is
-contained within a SkyFrame which \emph{does} have an Equinox attribute. Thus
-the returned attribute value would be that obtained from the SkyFrame
-containing axis 2. When getting or testing an attribute value, the
-returned value is determined by the \emph{first} axis which recognises
-the attribute. When setting an attribute value, \emph{all} axes
-which recognises the attribute have the attribute value set to the given
-value. Likewise, when clearing an attribute value, all axes
-which recognises the attribute have the attribute value cleared.
-
-\cleardoublepage
-\section{\label{ss:introducingconversion}An Introduction to Coordinate System Conversions}
-
-In this section, we start to look at techniques for converting between
-different coordinate systems. At this stage, the tools we have available
-are Frames (\secref{ss:frames}), SkyFrames (\secref{ss:skyframes}),
-SpecFrames (\secref{ss:specframes}), TimeFrames (\secref{ss:timeframes}) and
-various Mappings (\secref{ss:mappings}). These are sufficient to allow us to
-begin examining the problem, but more sophisticated approaches will also emerge
-later (\secref{ss:framesetconverting}).
-
-\subsection{\label{ss:convertingskyframes}Converting between Celestial Coordinate Systems}
-
-We begin by examining how to convert between two celestial coordinate
-systems represented by SkyFrames, as this is both an illuminating and
-practical example. Consider the problem of converting celestial
-coordinates between:
-
-\begin{enumerate}
-\item The old FK4 system, with no E terms, a Besselian epoch of
-1958.0 and a Besselian equinox of 1960.0.
-
-\item An ecliptic coordinate system based on the mean equinox and
-ecliptic of Julian epoch 2010.5.
-\end{enumerate}
-
-This example is arbitrary but not completely unrealistic. Unless you
-already have expertise with such conversions, you are unlikely to find
-it straightforward.
-
-Using AST, we begin by creating two SkyFrames to represent these
-coordinate systems, as follows:
-
-\small
-\begin{verbatim}
- INCLUDE 'AST_PAR'
- INTEGER SKYFRAME1, SKYFRAME2, STATUS
-
- STATUS = 0
-
- ...
-
- SKYFRAME1 = AST_SKYFRAME( 'System=FK4-NO-E, Epoch=B1958, Equinox=B1960', STATUS )
- SKYFRAME2 = AST_SKYFRAME( 'System=Ecliptic, Equinox=J2010.5', STATUS )
-\end{verbatim}
-\normalsize
-
-Note how specifying the coordinate systems consists simply of
-initialising the attributes of each \htmlref{SkyFrame}{SkyFrame} appropriately. The next
-step is to find a way of converting between these SkyFrames. This is
-done using \htmlref{AST\_CONVERT}{AST_CONVERT}, as follows:
-
-\small
-\begin{verbatim}
- INTEGER CVT
-
- ...
-
- CVT = AST_CONVERT( SKYFRAME1, SKYFRAME2, ' ', STATUS )
- IF ( CVT .EQ. AST__NULL ) THEN
- <conversion is not possible>
- ELSE
- <conversion is possible>
- END IF
-\end{verbatim}
-\normalsize
-
-The third argument of AST\_CONVERT is not used here and should be a
-blank string.
-
-AST\_CONVERT will return a null result, AST\_\_NULL (as defined in the
-AST\_PAR include file), if conversion is not possible. In this
-example, conversion is possible, so it will return a pointer to a new
-\htmlref{Object}{Object} that describes the conversion.
-
-The Object returned is called a \htmlref{FrameSet}{FrameSet}. We have not discussed
-FrameSets yet (\secref{ss:framesets}), but for the present purposes we
-can consider them simply as Objects that can behave both as Mappings
-and as Frames. It is the FrameSet's behaviour as a \htmlref{Mapping}{Mapping} in which we
-are mainly interested here, because the Mapping it implements is the
-one we require---{\em{i.e.}}\ it converts between the two celestial
-coordinate systems (\secref{ss:framesetsfromconvert}).
-
-For example, if ALPHA1 and DELTA1 are two arrays containing the
-longitude and latitude, in radians, of N points on the sky in the
-original coordinate system (corresponding to SKYFRAME1), then they
-could be converted into the new coordinate system (represented by
-SKYFRAME2) as follows:
-
-\small
-\begin{verbatim}
- INTEGER N
- DOUBLE PRECISION ALPHA1( N ), DELTA1( N )
- DOUBLE PRECISION ALPHA2( N ), DELTA2( N )
-
- ...
-
- CALL AST_TRAN2( CVT, N, ALPHA1, DELTA1, .TRUE., ALPHA2, DELTA2, STATUS )
-\end{verbatim}
-\normalsize
-
-The new coordinates are returned {\em{via}} the ALPHA2 and DELTA2
-arrays. To transform coordinates in the opposite direction, we simply
-invert the 5th (logical) argument to \htmlref{AST\_TRAN2}{AST_TRAN2}, as follows:
-
-\small
-\begin{verbatim}
- CALL AST_TRAN2( CVT, N, ALPHA2, DELTA2, .FALSE., ALPHA1, DELTA1, STATUS )
-\end{verbatim}
-\normalsize
-
-The FrameSet returned by AST\_CONVERT also contains information about
-the SkyFrames used in the conversion
-(\secref{ss:framesetsfromconvert}). As we mentioned above, a FrameSet
-may be used as a \htmlref{Frame}{Frame} and in this case it behaves like the
-``destination'' Frame used in the conversion ({\em{i.e.}}\ like
-SKYFRAME2). We could therefore use the CVT FrameSet to calculate the
-distance between two points (with coordinates in radians) in the
-destination coordinate system, using \htmlref{AST\_DISTANCE}{AST_DISTANCE}:
-
-\small
-\begin{verbatim}
- DOUBLE PRECISION DISTANCE, POINT1( 2 ), POINT2( 2 )
-
- ...
-
- DISTANCE = AST_DISTANCE( CVT, POINT1, POINT2, STATUS )
-\end{verbatim}
-\normalsize
-
-and the result would be the same as if the SKYFRAME2 SkyFrame had been
-used.
-
-Another way to see how the FrameSet produced by astConvert retains
-information about the coordinate systems involved is to set its \htmlref{Report}{Report}
-attribute (inherited from the Mapping class) so that it displays the
-coordinates before and after conversion (\secref{ss:transforming}):
-
-\small
-\begin{verbatim}
- CALL AST_SET( CVT, 'Report=1', STATUS )
- CALL AST_TRAN2( CVT, N, ALPHA1, DELTA1, .TRUE., ALPHA2, DELTA2, STATUS )
-\end{verbatim}
-\normalsize
-
-The output from this might look like the following:
-
-\begin{quote}
-\begin{verbatim}
-(2:06:03.0, 34:22:39) --> (42.1087, 20.2717)
-(2:08:20.6, 35:31:24) --> (43.0197, 21.1705)
-(2:10:38.1, 36:40:09) --> (43.9295, 22.0716)
-(2:12:55.6, 37:48:55) --> (44.8382, 22.9753)
-(2:15:13.1, 38:57:40) --> (45.7459, 23.8814)
-(2:17:30.6, 40:06:25) --> (46.6528, 24.7901)
-(2:19:48.1, 41:15:11) --> (47.5589, 25.7013)
-(2:22:05.6, 42:23:56) --> (48.4644, 26.6149)
-(2:24:23.1, 43:32:41) --> (49.3695, 27.5311)
-(2:26:40.6, 44:41:27) --> (50.2742, 28.4499)
-\end{verbatim}
-\end{quote}
-
-Here, we see that the input FK4 equatorial coordinate values (given in
-radians) have been formatted automatically in sexagesimal notation
-using the conventional hours for right ascension and degrees for
-declination. Conversely, the output ecliptic coordinates are shown in
-decimal degrees, as is conventional for ecliptic coordinates. Both are
-displayed using the default precision of 7 digits.\footnote{The
-leading digit is zero and is therefore not seen in this particular
-example.}
-
-In fact, the CVT FrameSet has access to all the information in the
-original SkyFrames which were passed to AST\_CONVERT. If you had set a
-new Digits attribute value for either of these, the formatting above
-would reflect the different precision you requested by displaying a
-greater or smaller number of digits.
-
-
-\subsection{\label{ss:convertingspecframes}Converting between Spectral Coordinate Systems}
-The principles described in the previous section for converting between
-celestial coordinate systems also apply to the task of converting between
-spectral coordinate systems. As an example, let's look at how we might
-convert between frequency measured in $GHz$ as measured in the rest frame
-of the telescope, and radio velocity measured in $km/s$ measured with
-respect the kinematic Local Standard of Rest.
-
-First we create a default \htmlref{SpecFrame}{SpecFrame}, and then set its attributes to
-describe the required radio velocity system (this is slightly more
-convenient, given the relatively large number of attributes, than
-specifying the attribute values in a single string such as would be
-passed to the SpecFrame constructor). We then take a copy of this
-SpecFrame, and change the attribute values so that the copy describes the
-original frequency system (modifying a copy, rather than creating a new
-SpecFrame from scratch, avoids the need to specify the epoch, reference
-position, \emph{etc} a second time since they are all inherited by the copy):
-
-\small
-\begin{verbatim}
- INCLUDE 'AST_PAR'
- INTEGER SPECFRAME1, SPECFRAME2, STATUS
-
- STATUS = 0
-
- ...
-
- SPECFRAME1 = AST_SPECFRAME( ' ', STATUS )
- CALL AST_SETC( SPECFRAME1, 'System=vradio', STATUS )
- CALL AST_SETC( SPECFRAME1, 'Unit=km/s', STATUS )
- CALL AST_SETC( SPECFRAME1, 'Epoch=1996-Oct-2 12:13:56.985',
- : STATUS )
- CALL AST_SETC( SPECFRAME1, 'ObsLon=W155:28:18', STATUS )
- CALL AST_SETC( SPECFRAME1, 'ObsLat=N19:49:34', STATUS )
- CALL AST_SETC( SPECFRAME1, 'RefRA=18:14:50.6', STATUS )
- CALL AST_SETC( SPECFRAME1, 'RefDec=-4:40:49', STATUS )
- CALL AST_SETC( SPECFRAME1, 'RestFreq=230.538 GHz', STATUS )
- CALL AST_SETC( SPECFRAME1, 'StdOfRest=LSRK', STATUS )
-
- SPECFRAME2 = AST_COPY( SPECFRAME1, STATUS )
- CALL AST_SETC( SPECFRAME1, 'System=freq', STATUS )
- CALL AST_SETC( SPECFRAME1, 'Unit=GHz', STATUS )
- CALL AST_SETC( SPECFRAME1, 'StdOfRest=Topocentric', STATUS )
-
-\end{verbatim}
-\normalsize
-
-Note, the fact that a SpecFrame has only a single axis means that we were
-able to refer to the Unit attribute without an axis index. The other
-attributes are: the time of of observation (\htmlref{Epoch}{Epoch}), the geographical
-position of the telescope (\htmlref{ObsLat}{ObsLat} \& \htmlref{ObsLon}{ObsLon}), the position of the source
-on the sky (\htmlref{RefRA}{RefRA} \& \htmlref{RefDec}{RefDec}), the rest frequency (\htmlref{RestFreq}{RestFreq}) and the
-standard of rest (\htmlref{StdOfRest}{StdOfRest}).
-
-The next step is to find a way of converting between these SpecFrames. We
-use exactly the same code that we did in the previous section where we were
-converting between celestial coordinate systems:
-
-\small
-\begin{verbatim}
- INTEGER CVT
-
- ...
-
- CVT = AST_CONVERT( SPECFRAME1, SPECFRAME2, ' ', STATUS )
- IF ( CVT .EQ. AST__NULL ) THEN
- <conversion is not possible>
- ELSE
- <conversion is possible>
- END IF
-\end{verbatim}
-\normalsize
-
-A before, this will give us a \htmlref{FrameSet}{FrameSet} (assuming conversion is possible,
-which should always be the case for our example), and we can use the
-FrameSet to convert between the two spectral coordinate systems. We use
-\htmlref{AST\_TRAN1}{AST_TRAN1} in place of \htmlref{AST\_TRAN2}{AST_TRAN2}
-since a SpecFrame has only one axis (unlike a \htmlref{SkyFrame}{SkyFrame} which has two).
-
-For example, if FRQ is an array containing the observed frequency, in
-GHz, of N spectral channels (describe by SPECFRAME1), then they
-could be converted into the new coordinate system (represented by
-SPECFRAME2) as follows:
-
-\small
-\begin{verbatim}
- INTEGER N
- DOUBLE PRECISION FRQ( N )
- DOUBLE PRECISION VEL( N )
-
- ...
-
- CALL AST_TRAN1( CVT, N, FRQ, .TRUE., VEL, STATUS )
-\end{verbatim}
-\normalsize
-
-The radio velocity values are returned in the VEL array.
-
-\subsection{Converting between Time Coordinate Systems}
-All the principles outlined in the previous section about aligning
-spectral cocordinate systems (SpecFrames) can be applied directly to the
-problem of aligning time coordinate systems (TimeFrames).
-
-\subsection{\label{ss:convertingpermutedaxes}Handling SkyFrame Axis Permutations}
-
-We can illustrate an important point if we swap the axis order of
-either \htmlref{SkyFrame}{SkyFrame} in the example above (\secref{ss:convertingskyframes})
-before identifying the conversion. Let's assume we use \htmlref{AST\_PERMAXES}{AST_PERMAXES}
-(\secref{ss:permutingaxes}) to do this to the second SkyFrame, before
-applying \htmlref{AST\_CONVERT}{AST_CONVERT}, as follows:
-
-\small
-\begin{verbatim}
- INTEGER PERM( 2 )
- DATA PERM / 2, 1 /
-
- ...
-
- CALL AST_PERMAXES( SKYFRAME2, PERM, STATUS )
- CVT = AST_CONVERT( SKYFRAME1, SKYFRAME2, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-Now, the destination SkyFrame system no longer represents the
-coordinate system:
-
-\begin{quote}
-(ecliptic~longitude, ecliptic~latitude)
-\end{quote}
-
-but instead represents the transposed system:
-
-\begin{quote}
-(ecliptic~latitude, ecliptic~longitude)
-\end{quote}
-
-As a consequence, when we use the \htmlref{FrameSet}{FrameSet} returned by AST\_CONVERT to
-apply a coordinate transformation, we obtain something like the
-following:
-
-\begin{quote}
-\begin{verbatim}
-(2:06:03.0, 34:22:39) --> (20.2717, 42.1087)
-(2:08:20.6, 35:31:24) --> (21.1705, 43.0197)
-(2:10:38.1, 36:40:09) --> (22.0716, 43.9295)
-(2:12:55.6, 37:48:55) --> (22.9753, 44.8382)
-(2:15:13.1, 38:57:40) --> (23.8814, 45.7459)
-(2:17:30.6, 40:06:25) --> (24.7901, 46.6528)
-(2:19:48.1, 41:15:11) --> (25.7013, 47.5589)
-(2:22:05.6, 42:23:56) --> (26.6149, 48.4644)
-(2:24:23.1, 43:32:41) --> (27.5311, 49.3695)
-(2:26:40.6, 44:41:27) --> (28.4499, 50.2742)
-\end{verbatim}
-\end{quote}
-
-When compared to the original (\secref{ss:convertingskyframes}), the
-output coordinate order has been swapped to compensate for the
-different destination SkyFrame axis order.
-
-In all, there are four possible axis combinations, corresponding to two
-possible axis orders for each of the source and destination SkyFrames,
-and AST\_CONVERT will convert correctly between any of these.
-The point to note is that a SkyFrame contains knowledge about how to
-convert to and from other SkyFrames. Since its two axes (longitude and
-latitude) are distinguishable, the conversion is able to take account
-of the axis order.
-
-If you need to identify the axes of a SkyFrame explicitly, taking into
-account any axis permutations, the \htmlref{LatAxis}{LatAxis} and \htmlref{LonAxis}{LonAxis} attributes can be
-used. These are read-only attributes which give the indices of the
-latitude and longitude axes respectively.
-
-\subsection{\label{ss:convertingframes}Converting Between Frames}
-
-Having seen how clever SkyFrames are (\secref{ss:convertingskyframes}
-and \secref{ss:convertingpermutedaxes}), we will next examine how dumb
-a basic \htmlref{Frame}{Frame} can be in comparison. For example, if we create two
-2-dimensional Frames and use \htmlref{AST\_CONVERT}{AST_CONVERT} to derive a conversion
-between them, as follows:
-
-\small
-\begin{verbatim}
- INTEGER FRAME1, FRAME2
-
- ...
-
- FRAME1 = AST_FRAME( 2, ' ', STATUS )
- FRAME2 = AST_FRAME( 2, ' ', STATUS )
- CVT = AST_CONVERT( FRAME1, FRAME2, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-then the coordinate transformation which the ``cvt'' \htmlref{FrameSet}{FrameSet} performs
-will be as follows:
-
-\begin{quote}
-\begin{verbatim}
-(1, 2) --> (1, 2)
-(2, 4) --> (2, 4)
-(3, 6) --> (3, 6)
-(4, 8) --> (4, 8)
-(5, 10) --> (5, 10)
-\end{verbatim}
-\end{quote}
-
-This is an identity transformation, exactly the same as a \htmlref{UnitMap}{UnitMap}
-(\secref{ss:unitmapexample}). Even if we permute the axis order of our
-Frames, as we did above (\secref{ss:convertingpermutedaxes}), we will
-fare no better. The conversion between our two basic Frames will
-always be an identity transformation.
-
-The reason for this is that, unlike a \htmlref{SkyFrame}{SkyFrame}, all basic Frames start
-life the same and have axes that are indistinguishable. Therefore,
-permuting their axes doesn't make them look any different---they still
-represent the same coordinate system.
-%Actually, this behaviour isn't as dumb as it seems and can actually be
-%very useful, as the following example illustrates.
-%
-%\subsection{Distinguishable and Indistinguishable Axes}
-%
-%c+
-%Imagine you have two Frames which represent the pixel coordinates of
-%two 2-dimensional images. Let's call their axes ``X'' and ``Y''.
-%Suppose you now transpose the second image and swap its Frame axes
-%(with astPermAxes) to take account of this.
-%c-
-%f+
-%Imagine you have two Frames which represent the pixel coordinates of
-%two 2-dimensional images. Let's call their axes ``X'' and ``Y''.
-%Suppose you now transpose the second image and swap its Frame axes
-%(with astPermAxes) to take account of this.
-%f-
-%
-%Next, consider what happens if you want to subtract one image from the
-%other. If you have a ``subtract'' program that is intelligent and
-%tries to align the two images for you, one of two things could happen:
-%
-%\begin{enumerate}
-%c+
-%\item If the axes are distinguishable, when your program invokes
-%astConvert it will derive a transformation between the two images
-%which swaps the X and Y coordinates (corresponding to the transposition
-%you applied to the second image). However, in aligning X-with-X and
-%Y-with-Y, this will completely undo the effects of your transposition!
-%c-
-%f+
-%\item If the axes are distinguishable, when your program invokes
-%AST\_CONVERT it will derive a transformation between the two images
-%which swaps the X and Y coordinates (corresponding to the transposition
-%you applied to the second image). However, in aligning X-with-X and
-%Y-with-Y, this will completely undo the effects of your transposition!
-%f-
-%
-%\item If the axes are indistinguishable, the transformation between
-%the two images will always be an identity
-%(\secref{ss:convertingframes}). Therefore, your program will align
-%X-with-Y and Y-with-X, so that you see the effects of your earlier
-%transposition of the second image.
-%\end{enumerate}
-%
-%Clearly, if we are considering pixel coordinates, the latter behaviour
-%is preferable, since there would be no point in implementing an image
-%transposition program if we could never see the effects of it. This
-%indicates that a basic Frame, with is indistinguishable axes, is the
-%correct type of \htmlref{Object}{Object} to represent a pixel coordinate system, where
-%this behaviour is necessary.
-%
-%Conversely, the former behaviour would be more useful if the axes we
-%were considering were, say, wavelength (in nm) and slit position (in
-%mm). In this case, we would expect our ``subtract'' program to
-%subtract data at corresponding wavelengths and slit positions, not
-%just at corresponding pixels. This case requires distinguishable axes,
-%so that corresponding axes in the two images can be matched up, just
-%as happens with a SkyFrame (\secref{ss:convertingpermutedaxes}).
-%
-%Of course, there may also be intermediate cases, where some axes are
-%distinguishable and others aren't.
-
-\subsection{\label{ss:alignmentsystem}The Choice of Alignment System}
-
-In practice, when AST is asked to find a conversion between two Frames
-describing two different coordinate systems on a given physical domain,
-it uses an intermediate ``alignment'' system. Thus, when finding a
-conversion from system A to system B, AST first finds the \htmlref{Mapping}{Mapping} from
-system A to some alignment system, system C, and then finds the Mapping
-from this system C to the required system B. It finally concatenates
-these two Mappings to get the Mapping from system A to system B.
-
-One advantage of this is that it cuts down the number of conversion
-algorithms required. If there are $N$ different Systems which may be used
-to describe positions within the \htmlref{Domain}{Domain}, then this approach requires
-about $2*N$ conversion algorithms to be written. The alternative approach
-of going directly from system A to system B would require about $N*N$
-conversion algorithms.
-
-In addition, the use of an intermediate alignment system highlights the
-nature of the conversion process. What do we mean by saying that a
-Mapping ``converts a position in one coordinate system into the
-corresponding position in another''? In practice, it means that the input
-and output coordinates correspond to the same coordinates \emph{in some
-third coordinate system}. The choice of this third coordinate system, the
-``alignment'' system, can completely alter the nature of the Mapping. The
-\htmlref{Frame}{Frame} class has an attribute called \htmlref{AlignSystem}{AlignSystem} which can be used to
-specify the alignment system.
-
-As an example, consider the case of aligning two spectra calibrated in
-radio velocity, but each with a different rest frequency (each spectrum
-will be described by a \htmlref{SpecFrame}{SpecFrame}). Since the rest frequencies differ, a
-given velocity will correspond to different frequencies in the two
-spectra. So when we come to ``align'' these two spectra (that is, find a
-Mapping which converts positions in one SpecFrame to the corresponding
-positions in the other), we have the choice of aligning the frequencies
-or aligning the velocities. Different Mappings will be required to
-describe these two forms of alignment. If we set AlignSystem to ``Freq''
-then the returned Mapping will align the frequencies described by the two
-SpecFrames. On the other hand, if we set AlignSystem to ``Vradio''
-then the returned Mapping will align the velocities.
-
-Some choices of alignment system are redundant. For instance, in the
-above example, changing the alignment system from frequency to wavelength
-has no effect on the returned Mapping: if two spectra are aligned in
-frequency they will also be aligned in wavelength (assuming the speed of
-light doesn't change).
-
-The default value for AlignSystem depends on the class of Frame. For a
-SpecFrame, the default is wavelength (or equivalently, frequency)
-since this is the system in which observations are usually made. The
-SpecFrame class also has an attribute called \htmlref{AlignStdOfRest}{AlignStdOfRest} which
-allows the standard of rest of the alignment system to be specified.
-Similarly, the \htmlref{TimeFrame}{TimeFrame} class has an attribute called \htmlref{AlignTimeScale}{AlignTimeScale}
-which allows the time scale of the alignment system to be specified.
-Currently, the \htmlref{SkyFrame}{SkyFrame} uses ICRS as the default for AlignSystem, since
-this is a close approximation to an inertial frame of rest.
-
-\cleardoublepage
-\section{\label{ss:framesets}Coordinate System Networks (FrameSets)}
-
-We saw in \secref{ss:introducingconversion} how \htmlref{AST\_CONVERT}{AST_CONVERT} could be
-used to find a \htmlref{Mapping}{Mapping} that inter-relates a pair of coordinate systems
-represented by Frames. There is a limitation to this, however, in that
-it can only be applied to coordinate systems that are inter-related by
-suitable conventions. In the case of celestial coordinates, the
-relevant conventions are standards set out by the International
-Astronomical Union, and others, that define what these coordinate
-systems mean. In practice, however, the relationships between many
-other coordinate systems are also of practical importance.
-
-Consider, for example, the focal plane of a telescope upon which an
-image of the sky is falling. We could measure positions in this focal
-plane in millimetres or, if there were a detector system such as a CCD
-present, we could count pixels. We could also use celestial
-coordinates of many different kinds. All of these systems are
-equivalent in their effectiveness at specifying positions in the focal
-plane, but some are more convenient than others for particular
-purposes.
-
-Although we could, in principle, convert between all of these focal
-plane coordinate systems, there is no pre-defined convention for doing
-so. This is because the conversions required depend on where the
-telescope is pointing and how the CCD is mounted in the focal
-plane. Clearly, knowledge about this cannot be built into the AST
-library and must be supplied in some other way. Note that this is
-exactly the same problem as we met in \secref{ss:framedomains} when
-discussing the \htmlref{Domain}{Domain} attribute---{\em{i.e.}}\ coordinate systems that
-apply to different physical domains require that extra information be
-supplied before we can convert between them.
-
-What we need, therefore, is a general way to describe how coordinate
-systems are inter-related, so that when there is no convention already
-in place, we can define our own. We can then look forward to
-converting, say, from pixels into galactic coordinates and {\em{vice
-versa.}} In AST, the \htmlref{FrameSet}{FrameSet} class provides this capability.
-
-\subsection{The FrameSet Model}
-
-Consider a coordinate system (call it number 1) which is represented
-by a \htmlref{Frame}{Frame} of some kind. Now consider a \htmlref{Mapping}{Mapping} which, when applied to
-the coordinates in system 1 yields coordinates in another system,
-number 2. The Mapping therefore inter-relates coordinate systems 1 and
-2.
-
-Now consider a second Mapping which inter-relates system 1 and a
-further coordinate system, number 3. If we wanted to convert
-coordinates between systems 2 and 3, we could do so by:
-
-\begin{enumerate}
-\item Applying our first Mapping in reverse, so as to convert between
-systems 2 and 1.
-
-\item Applying the second Mapping, as given, to convert between
-systems 1 and 3.
-\end{enumerate}
-
-We are not limited to three coordinate systems, of course. In fact, we
-could continue to introduce any number of further coordinate systems,
-so long as we have a suitable Mapping for each one which relates it to
-one of the Frames already present. Continuing in this way, we can
-build up a network in which Frames are inter-related by Mappings in
-such a way that there is always a way of converting between any pair
-of coordinate systems.
-
-The \htmlref{FrameSet}{FrameSet} (Figure~\ref{fig:frameset}) encapsulates these ideas. It
-is a network composed of Frames and associated Mappings, in which
-there is always exactly one path, {\em{via}} Mappings, between any
-pair of Frames. Since we assemble FrameSets ourselves, they can be
-used to represent any coordinate systems we choose and to set up the
-particular relationships between them that we want.
-
-\subsection{\label{ss:creatingaframeset}Creating a FrameSet}
-
-Before we can create a \htmlref{FrameSet}{FrameSet}, we must have a \htmlref{Frame}{Frame} of some kind to
-put into it, so let's create a simple one:
-
-\small
-\begin{verbatim}
- INCLUDE 'AST_PAR'
- INTEGER FRAME1, STATUS
-
- STATUS = 0
-
- ...
-
- FRAME1 = AST_FRAME( 2, 'Domain=A', STATUS )
-\end{verbatim}
-\normalsize
-
-We have set this Frame's \htmlref{Domain}{Domain} attribute (\secref{ss:framedomains}) to
-A so that it will be distinct from the others we will be using. We can
-now create a new FrameSet containing just this Frame, as follows:
-
-\small
-\begin{verbatim}
- INTEGER FRAMESET
-
- ...
-
- FRAMESET = AST_FRAMESET( FRAME1, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-So far, however, this Frame isn't related to any others.
-
-\subsection{\label{ss:addingframes}Adding New Frames to a FrameSet}
-
-We can now add further Frames to the \htmlref{FrameSet}{FrameSet} created above
-(\secref{ss:creatingaframeset}). To do so, we must supply a new \htmlref{Frame}{Frame}
-and an associated \htmlref{Mapping}{Mapping} that relates it to any of the Frames that
-are already present (there is only one present so far). To keep the
-example simple, we will just use a \htmlref{ZoomMap}{ZoomMap} that multiplies coordinates
-by 10. The required Objects are created as follows:
-
-\small
-\begin{verbatim}
- INTEGER FRAME2, MAPPING12
-
- ...
-
- FRAME2 = AST_FRAME( 2, 'Domain=B', STATUS )
- MAPPING12 = AST_ZOOMMAP( 2, 10.0D0, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-To add the new Frame into our FrameSet, we use the \htmlref{AST\_ADDFRAME}{AST_ADDFRAME}
-routine:
-
-\small
-\begin{verbatim}
- CALL AST_ADDFRAME( FRAMESET, 1, MAPPING12, FRAME2, STATUS )
-\end{verbatim}
-\normalsize
-
-Whenever a Frame is added to a FrameSet, it is assigned an integer
-index. This index starts with 1 for the initial Frame used to create
-the FrameSet (\secref{ss:creatingaframeset}) and increments by one
-every time a new Frame is added. This index is the primary way of
-identifying the Frames within a FrameSet.
-
-When a Frame is added, we also have to specify which of the existing
-ones the new Frame is related to. Here, we chose number 1, the only
-one present so far, and the new one we added became number 2.
-
-Note that a FrameSet does not make copies of the Frames and Mappings
-that you insert into it. Instead, it holds pointers to them. This
-means that if you retain the original pointers to these Objects and
-alter them, you will indirectly be altering the FrameSet's
-contents. You can, of course, always use \htmlref{AST\_COPY}{AST_COPY}
-(\secref{ss:copyingobjects}) to make a separate copy of any \htmlref{Object}{Object} if
-you need to ensure its independence.
-
-We could also add a third Frame into our FrameSet, this time defining
-a coordinate system which is reached by multiplying the original
-coordinates (of FRAME1) by 5:
-
-\small
-\begin{verbatim}
- CALL AST_ADDFRAME( FRAMESET, 1,
- : AST_ZOOMMAP( 2, 5.0D0, ' ', STATUS ),
- : AST_FRAME( 2, 'Domain=C', STATUS ),
- : STATUS )
-\end{verbatim}
-\normalsize
-
-Here, we have avoided storing unnecessary pointer values by using
-function invocations directly as arguments for AST\_ADDFRAME. This
-assumes that we are using \htmlref{AST\_BEGIN}{AST_BEGIN} and \htmlref{AST\_END}{AST_END}
-(\secref{ss:contexts}) to ensure that Objects are correctly deleted
-when no longer required.
-
-\begin{latexonly}
- Our example FrameSet now contains three Frames and two Mappings with
- the arrangement shown in Figure~\ref{fig:fsexample}.
- \begin{figure}
- \begin{center}
- \includegraphics[scale=0.6]{sun210_figures/fsexample.eps}
- \caption{An example FrameSet, in which Frames~2 and 3 are related to
- Frame~1 by multiplying its coordinates by factors of 10 and 5
- respectively. The FrameSet's \htmlref{Base}{Base} attribute has the value 1 and its
- \htmlref{Current}{Current} attribute has the value 3. The transformation performed when
- the FrameSet is used as a Mapping ({\em{i.e.}}\ from its base to
- its current Frame) is shown in bold.}
- \label{fig:fsexample}
- \end{center}
- \end{figure}
- The total number of Frames is given by its read-only \htmlref{Nframe}{Nframe} attribute.
-\end{latexonly}
-\begin{htmlonly}
- Our example FrameSet now contains three Frames and two Mappings with
- the arrangement shown in the Figure below. The total number of Frames
- is given by its read-only Nframe attribute.
- \begin{quote}
- \begin{figure}
- \label{fig:fsexample}
- \includegraphics[scale=0.9]{sun210_figures/fsexample.eps}
- \caption{An example FrameSet, in which Frames~2 and 3 are related to
- Frame~1 by multiplying its coordinates by factors of 10 and 5
- respectively. The FrameSet's Base attribute has the value 1 and its
- Current attribute has the value 3. The transformation performed when
- the FrameSet is used as a Mapping ({\em{i.e.}}\ from its base to
- its current Frame) is shown in bold.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-
-
-\subsection{\label{ss:baseandcurrent}The Base and Current Frames}
-
-At all times, one of the Frames in a \htmlref{FrameSet}{FrameSet} is designated to be its
-{\em{base}} \htmlref{Frame}{Frame} and one to be its {\em{current}} Frame
-(Figure~\ref{fig:fsexample}). These Frames are identified by two
-integer FrameSet attributes, \htmlref{Base}{Base} and \htmlref{Current}{Current}, which hold the indices
-of the nominated Frames within the FrameSet.
-
-The existence of the base and current Frames reflects an important
-application of FrameSets, which is to attach coordinate systems to
-entities such as data arrays, data files, plotting surfaces (for
-graphics), {\em{etc.}} In this context, the base Frame represents the
-``native'' coordinate system of the attached entity---for example, the
-pixel coordinates of an image or the intrinsic coordinates of a
-plotting surface. The other Frames within the FrameSet represent
-alternative coordinate systems which may also be used to refer to
-positions within that entity. The current Frame represents the
-particular coordinate system which is currently selected for use. For
-instance, if an image were being displayed, you would aim to label it
-with coordinates corresponding to the current Frame. In order to see a
-different coordinate system, a software user would arrange for a
-different Frame to be made current.
-
-The choice of base and current Frames may be changed at any time,
-simply by assigning new values to the FrameSet's Base and Current
-attributes. For example, to make the Frame with index 3 become the
-current Frame, you could use:
-
-\small
-\begin{verbatim}
- CALL AST_SETI( FRAMESET, 'Current', 3, STATUS )
-\end{verbatim}
-\normalsize
-
-You can nominate the same Frame to be both the base and current Frame
-if you wish.
-\label{ss:baseandcurrentdefault}
-
-By default ({\em{i.e.}}\ if the Base or Current attribute is un-set),
-the first Frame added to a FrameSet becomes its base Frame and the
-last one added becomes its current Frame.\footnote{Although this is
-reversed if the FrameSet's \htmlref{Invert}{Invert} attribute is non-zero.} Whenever a
-new Frame is added to a FrameSet, the Current attribute is modified so
-that the new Frame becomes the current one. This behaviour is
-reflected in the state of the example FrameSet in
-Figure~\ref{fig:fsexample}.
-
-\subsection{\label{ss:astbaseandastcurrent}Referring to the Base and Current Frames}
-
-It is often necessary to refer to the base and current Frames
-(\secref{ss:baseandcurrent}) within a \htmlref{FrameSet}{FrameSet}, but it can be
-cumbersome having to obtain their indices from the \htmlref{Base}{Base} and \htmlref{Current}{Current}
-attributes on each occasion. To make this easier, two parameter
-constants, AST\_\_BASE and AST\_\_CURRENT, are defined in the AST\_PAR
-include file and may be used to represent the indices of the base and
-current Frames respectively. They may be used whenever a \htmlref{Frame}{Frame} index
-is required.
-
-For example, when adding a new Frame to a FrameSet
-(\secref{ss:addingframes}), you could use the following to indicate
-that the new Frame is related to the existing current Frame, whatever
-its index happens to be:
-
-\small
-\begin{verbatim}
- INTEGER FRAME, MAPPING
-
- ...
-
- CALL AST_ADDFRAME( FRAMESET, AST__CURRENT, MAPPING, FRAME, STATUS )
-\end{verbatim}
-\normalsize
-
-Of course, the Frame you added would then become the new current
-Frame.
-
-\subsection{\label{ss:framesetasmapping}Using a FrameSet as a Mapping}
-
-The \htmlref{FrameSet}{FrameSet} class inherits properties and behaviour from the \htmlref{Frame}{Frame}
-class (\secref{ss:frames}) and, in turn, from the \htmlref{Mapping}{Mapping} class
-(\secref{ss:mappings}). Its behaviour when used as a Mapping is
-particularly important.
-
-Consider, for instance, passing a FrameSet pointer to a coordinate
-transformation routine such as \htmlref{AST\_TRAN2}{AST_TRAN2}:
-
-\small
-\begin{verbatim}
- INTEGER N
- DOUBLE PRECISION XIN( N ), YIN( N )
- DOUBLE PRECISION XOUT( N ), YOUT( N )
-
- ...
-
- CALL AST_TRAN2( FRAMESET, N, XIN, YIN, .TRUE., XOUT, YOUT, STATUS )
-\end{verbatim}
-\normalsize
-
-The coordinate transformation applied by this FrameSet would be the
-one which converts between its base and current Frames. Using the
-FrameSet in Figure~\ref{fig:fsexample}, for example, the coordinates
-would be multiplied by a factor of 5. If we instead requested the
-FrameSet's inverse transformation, we would be transforming from its
-current Frame to its base Frame, so our example FrameSet would then
-multiply by a factor of 0.2.
-
-Whenever the choice of base and current Frames changes, the
-transformations which a FrameSet performs when used as a Mapping also
-change to reflect this. The \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes may also change in
-consequence, because they are determined by the numbers of axes in the
-FrameSet's base and current Frames respectively. These numbers need
-not necessarily be equal, of course.
-
-Like any Mapping, a FrameSet may also be inverted by changing the
-boolean sense of its \htmlref{Invert}{Invert} attribute, {\em{e.g.}}\ using \htmlref{AST\_INVERT}{AST_INVERT}
-(\secref{ss:invertingmappings}). If this is happens, the values of the
-FrameSet's \htmlref{Base}{Base} and \htmlref{Current}{Current} attributes are interchanged, along with
-its Nin and Nout attributes, so that its base and current Frames swap
-places. When used as a Mapping, the FrameSet will therefore perform
-the inverse transformation to that which it performed previously.
-
-To summarise, a FrameSet may be used exactly like any other Mapping
-which inter-relates the coordinate systems described by its base and
-current Frames.
-
-\subsection{\label{ss:extractingamapping}Extracting a Mapping from a FrameSet}
-
-Although it is very convenient to use a \htmlref{FrameSet}{FrameSet} when a \htmlref{Mapping}{Mapping} is
-required (\secref{ss:framesetasmapping}), a FrameSet necessarily
-contains additional information and sometimes this might cause
-inefficiency or confusion. For example, if you wanted to use a
-Mapping contained in one FrameSet and insert it into another, it would
-probably not be efficient to insert the whole of the first FrameSet
-into the second one, although it would work.
-
-In such a situation, the \htmlref{AST\_GETMAPPING}{AST_GETMAPPING} function allows you to
-extract a Mapping from a FrameSet. You do this by specifying the two
-Frames which the Mapping should inter-relate using their indices
-within the FrameSet. For example:
-
-\small
-\begin{verbatim}
- MAP = AST_GETMAPPING( FRAMESET, 2, 3, STATUS )
-\end{verbatim}
-\normalsize
-
-would return a pointer to a Mapping that converted between Frames~2
-and 3 in the FrameSet. Its inverse transformation would then convert
-in the opposite direction, {\em{i.e.}}\ between Frames~3 and 2. Note
-that this Mapping might not be independent of the Mappings contained
-within the FrameSet---{\em{i.e.}}\ they may share sub-Objects---so
-\htmlref{AST\_COPY}{AST_COPY} should be used to make a copy if you need to guarantee
-independence (\secref{ss:copyingobjects}).
-
-Very often, the Mapping returned by AST\_GETMAPPING will be a compound
-Mapping, or \htmlref{CmpMap}{CmpMap} (\secref{ss:cmpmaps}). This reflects the fact that
-conversion between the two Frames may need to be done {\em{via}} an
-intermediate coordinate system so that several stages may be involved.
-You can, however, easily simplify this Mapping (where this is possible)
-by using the \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY} function (\secref{ss:simplifyingcmpmaps})
-and this is recommended if you plan to use it for transforming a large
-amount of data.
-
-\subsection{\label{ss:framesetasframe}Using a FrameSet as a Frame}
-
-A \htmlref{FrameSet}{FrameSet} can also be used as a \htmlref{Frame}{Frame}, in which capacity it almost
-always behaves as if its current Frame had been used instead. For
-example, if you request the \htmlref{Title}{Title} attribute of a FrameSet using:
-
-\small
-\begin{verbatim}
- CHARACTER * ( 80 ) TITLE
-
- ...
-
- TITLE = AST_GETC( FRAMESET, 'Title', STATUS )
-\end{verbatim}
-\normalsize
-
-the result will be the Title of the current Frame, or a suitable
-default if the current Frame's Title attribute is un-set. The same
-also applies to other attribute operations---{\em{i.e.}}\ setting,
-clearing and testing attributes. Most attributes shared by both
-Frames and FrameSets behave in this way, such as \htmlref{Naxes}{Naxes}, \htmlref{Label(axis)}{Labelaxis},
-\htmlref{Format(axis)}{Formataxis}, {\em{etc.}} There are, however, a few exceptions:
-
-\begin{quote}
-\begin{description}
-\item[\htmlref{Class}{Class}]\mbox{}\\
-Has the value ``FrameSet''.
-
-\item[\htmlref{ID}{ID}]\mbox{}\\
-Identifies the particular FrameSet (not its current Frame).
-
-\item[\htmlref{Nin}{Nin}]\mbox{}\\
-Equals the number of axes in the FrameSet's base Frame.
-
-\item[\htmlref{Invert}{Invert}]\mbox{}\\
-Is independent of any of the Objects within the FrameSet.
-
-\item[\htmlref{Nobject}{Nobject}]\mbox{}\\
-Counts the number of active FrameSets.
-
-\item[\htmlref{RefCount}{RefCount}]\mbox{}\\
-Counts the number of active pointers to the FrameSet (not to its
-current Frame).
-\end{description}
-\end{quote}
-
-Note that the set of attributes possessed by a FrameSet can vary,
-depending on the nature of its current Frame. For example, if the
-current Frame is a \htmlref{SkyFrame}{SkyFrame} (\secref{ss:skyframes}), then the FrameSet
-will acquire an \htmlref{Equinox}{Equinox} attribute from it which can be set, enquired,
-{\em{etc.}} However, if the current Frame is changed to be a basic
-Frame, which does not have an Equinox attribute, then this attribute
-will be absent from the FrameSet as well. Any attempt to reference it
-will then result in an error.
-
-\subsection{Extracting a Frame from a FrameSet}
-
-Although a \htmlref{FrameSet}{FrameSet} may be used in place of its current \htmlref{Frame}{Frame} in most
-situations, it is sometimes convenient to have direct access to a
-specified Frame within it. This may be obtained using the
-\htmlref{AST\_GETFRAME}{AST_GETFRAME} function, as follows:
-
-\small
-\begin{verbatim}
- FRAME = AST_GETFRAME( FRAMESET, AST__BASE, STATUS )
-\end{verbatim}
-\normalsize
-
-This would return a pointer (not a copy) to the base Frame within the
-FrameSet. Note the use of AST\_\_BASE
-(\secref{ss:astbaseandastcurrent}) as shorthand for the value of the
-FrameSet's \htmlref{Base}{Base} attribute, which gives the base Frame's index.
-
-\subsection{Removing a Frame from a FrameSet}
-
-Removing a \htmlref{Frame}{Frame} from a \htmlref{FrameSet}{FrameSet} is straightforward and is performed
-using the \htmlref{AST\_REMOVEFRAME}{AST_REMOVEFRAME} routine. You identify the Frame you wish to
-remove in the usual way, by giving its index within the FrameSet. For
-example, the following would remove the Frame with index 1:
-
-\small
-\begin{verbatim}
- CALL AST_REMOVEFRAME( FRAMESET, 1, STATUS );
-\end{verbatim}
-\normalsize
-
-The only restriction is that you cannot remove the last remaining
-Frame because a FrameSet must always contain at least one Frame. When
-a Frame is removed, the Frames which follow it are re-numbered
-({\em{i.e.}}\ their indices are reduced by one) so as to preserve the
-sequence of consecutive Frame indices. The FrameSet's \htmlref{Nframe}{Nframe}
-attribute is also decremented.
-
-If appropriate, AST\_REMOVEFRAME will modify the FrameSet's \htmlref{Base}{Base}
-and/or \htmlref{Current}{Current} attributes so that they continue to identify the same
-Frames as previously. If either the base or current Frame is removed,
-however, the corresponding attribute will become un-set, so that it
-reverts to its default value (\secref{ss:baseandcurrentdefault}) and
-therefore identifies an alternative Frame.
-
-Note that it is quite permissible to remove any Frame from a FrameSet,
-even although other Frames may appear to depend on it. For example, in
-Figure~\ref{fig:fsexample}, if Frame~1 were removed, the correct
-relationship between Frames~2 and 3 would still be preserved, although
-they would be re-numbered as Frames~1 and 2.
-
-\cleardoublepage
-\section{\label{ss:fshigher}Higher Level Operations on FrameSets}
-
-\subsection{\label{ss:framesetsfromconvert}Creating FrameSets with AST\_CONVERT}
-
-Before considering the important subject of using FrameSets to convert
-between coordinate systems (\secref{ss:framesetconverting}), let us
-return briefly to reconsider the output generated by \htmlref{AST\_CONVERT}{AST_CONVERT}. We
-used this function earlier (\secref{ss:introducingconversion}), when
-converting between the coordinate systems represented by various kinds
-of \htmlref{Frame}{Frame}, and indicated that it returns a \htmlref{FrameSet}{FrameSet} to represent the
-coordinate conversion it identifies. We are now in a position to
-examine the structure of this FrameSet.
-
-Take our earlier example (\secref{ss:convertingskyframes}) of
-converting between the celestial coordinate systems represented by two
-SkyFrames:
-
-\small
-\begin{verbatim}
- INCLUDE 'AST_PAR'
- INTEGER SKYFRAME1, SKYFRAME2, STATUS
-
- STATUS = 0
-
- ...
-
- SKYFRAME1 = AST_SKYFRAME( 'System=FK4-NO-E, Epoch=B1958, Equinox=B1960', STATUS )
- SKYFRAME2 = AST_SKYFRAME( 'System=Ecliptic, Equinox=J2010.5', STATUS )
-
- CVT = AST_CONVERT( SKYFRAME1, SKYFRAME2, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-\begin{latexonly}
- This will produce a pointer, CVT, to the FrameSet shown in
- Figure~\ref{fig:fsconvert}.
- \begin{figure}[bhtp]
- \begin{center}
- \includegraphics[scale=0.65]{sun210_figures/fsconvert.eps}
- \caption{The FrameSet produced when AST\_CONVERT is used to convert
- between the coordinate systems represented by two SkyFrames. The
- source \htmlref{SkyFrame}{SkyFrame} becomes the base Frame, while the destination SkyFrame
- becomes the current Frame. The \htmlref{Mapping}{Mapping} between them implements the
- required conversion.}
- \label{fig:fsconvert}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- This will produce a pointer, CVT, to the FrameSet shown in the Figure
- below.
- \begin{quote}
- \begin{figure}[bhtp]
- \label{fig:fsconvert}
- \includegraphics[scale=1.0]{sun210_figures/fsconvert.eps}
- \caption{The FrameSet produced when AST\_CONVERT is used to convert
- between the coordinate systems represented by two SkyFrames. The
- source SkyFrame becomes the base Frame, while the destination SkyFrame
- becomes the current Frame. The Mapping between them implements the
- required conversion.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-As can be seen, this FrameSet contains just two Frames. The source
-Frame supplied to AST\_CONVERT becomes its base Frame, while the
-destination Frame becomes its current Frame. (The FrameSet, of course,
-simply holds pointers to these Frames, rather than making copies.) The
-Mapping which relates the base Frame to the current Frame is the one
-which implements the required conversion.
-
-As we noted earlier (\secref{ss:convertingskyframes}), the FrameSet
-returned by AST\_CONVERT may be used both as a Mapping and as a Frame
-to perform most of the functions you are likely to need. However, the
-Mapping may be extracted for use on its own if necessary, using
-\htmlref{AST\_GETMAPPING}{AST_GETMAPPING} (\secref{ss:extractingamapping}), for example:
-
-\small
-\begin{verbatim}
- INTEGER MAPPING
-
- ...
-
- MAPPING = AST_GETMAPPING( CVT, AST__BASE, AST__CURRENT, STATUS )
-\end{verbatim}
-\normalsize
-
-\subsection{\label{ss:framesetconverting}Converting between FrameSet Coordinate Systems}
-
-\begin{latexonly}
- We now consider the process of converting between the coordinate
- systems represented by two FrameSets. This is a most important
- operation, as a subsequent example (\secref{ss:registeringimages})
- will show, and is illustrated in Figure~\ref{fig:fsalign}.
- \begin{figure}
- \begin{center}
- \includegraphics[scale=0.6]{sun210_figures/fsalign.eps}
- \caption{Conversion between two FrameSets is performed by establishing
- a link between a pair of Frames, one from each \htmlref{FrameSet}{FrameSet}. If conversion
- between these two Frames is possible, then a route for converting
- between the current Frames of both FrameSets can also be found. In
- practice, there may be many ways of pairing Frames to find the
- ``missing link'', so the Frames' \htmlref{Domain}{Domain} attribute may be used to
- narrow the choice.}
- \label{fig:fsalign}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- We now consider the process of converting between the coordinate
- systems represented by two FrameSets. This is a most important
- operation, as a subsequent example (\secref{ss:registeringimages})
- will show, and is illustrated in the Figure below.
- \begin{quote}
- \begin{figure}
- \label{fig:fsconvert}
- \includegraphics[scale=1.0]{sun210_figures/fsalign.eps}
- \caption{Conversion between two FrameSets is performed by establishing
- a link between a pair of Frames, one from each FrameSet. If conversion
- between these two Frames is possible, then a route for converting
- between the current Frames of both FrameSets can also be found. In
- practice, there may be many ways of pairing Frames to find the
- ``missing link'', so the Frames' Domain attribute may be used to
- narrow the choice.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-Recalling (\secref{ss:framesetasframe}) that a FrameSet will behave
-like its current \htmlref{Frame}{Frame} when necessary, conversion between two
-FrameSets is performed using \htmlref{AST\_CONVERT}{AST_CONVERT}
-(\secref{ss:convertingskyframes}), but supplying pointers to FrameSets
-instead of Frames. The effect of this is to convert between the
-coordinate systems represented by the current Frames of each FrameSet:
-
-\small
-\begin{verbatim}
- INTEGER FRAMESETA, FRAMESETB
-
- ...
-
- CVT = AST_CONVERT( FRAMESETA, FRAMESETB, 'SKY', STATUS )
-\end{verbatim}
-\normalsize
-
-When using FrameSets, we are presented with considerably more
-conversion options than when using Frames alone. This is because each
-current Frame is related to all the other Frames in its respective
-FrameSet. Therefore, if we can establish a link between any pair of
-Frames, one from each FrameSet, we can form a complete conversion path
-between the two current Frames (Figure~\ref{fig:fsalign}).
-
-This expanded range of options is, of course, precisely the
-intention. By connecting Frames together within a FrameSet, we have
-extended the range of coordinate systems that can be reached from any
-one of them. We are therefore no longer restricted to converting
-between Frames with the same Domain value (\secref{ss:framedomains}),
-but can go {\em{via}} a range of intermediate coordinate systems in
-order to make the connection we require. Transformation between
-different domains has therefore become possible because, in assembling
-the FrameSets, we provided the additional information needed to
-inter-relate them.
-
-It is important to appreciate, however, that the choice of ``missing
-link'' is crucial in determining the conversion that results.
-Although each FrameSet may be perfectly self-consistent internally,
-this does not mean that all conversion paths through the combined
-network of Mappings are equivalent. Quite the contrary in fact:
-everything depends on where the inter-connecting link between the two
-FrameSets is made. In practice, there may be a large number of
-possible pairings of Frames and hence of possible links. Other factors
-must therefore be used to restrict the choice. These are:
-
-\begin{enumerate}
-\item Not every possible pairing of Frames is legitimate. For example,
-you cannot convert directly between a basic Frame and a \htmlref{SkyFrame}{SkyFrame} which
-belong to different classes, so such pairings will be ignored.
-
-\item In a similar way, you cannot convert directly between Frames
-with different Domain values (\secref{ss:framedomains}). If the Domain
-attribute is used consistently (typically only one Frame in each
-FrameSet will have a particular Domain value), then this further
-restricts the choice.
-
-\item The third argument of AST\_CONVERT may then be used to specify
-explicitly which Domain value the paired Frames should have. You may
-also supply a comma-separated list of preferences here (see below).
-
-\item If the above steps fail to uniquely identify the link, then the
-first suitable pairing of Frames is used, so that any ambiguity is
-resolved by the order in which Frames are considered for pairing (see
-the description of the AST\_CONVERT function in
-\appref{ss:functiondescriptions} for details of the search
-order).\footnote{If you find that how this ambiguity is resolved
-actually makes a difference to the conversion that results, then you
-have probably constructed a FrameSet which lacks internal
-self-consistency. For example, you might have two Frames representing
-indistinguishable coordinate systems but inter-related by a non-null
-\htmlref{Mapping}{Mapping}.}
-\end{enumerate}
-
-In the example above we supplied the string ``SKY'' as the third
-argument of AST\_CONVERT. This constitutes a request that a pair of
-Frames with
-the Domain value SKY ({\em{i.e.}}\ representing celestial coordinate
-systems) should be used to inter-relate the two FrameSets. Note that
-this does not specify which celestial coordinate system to use, but is
-a general request that the two FrameSets be inter-related using
-coordinates on the celestial sphere.
-
-Of course, it may be that this request cannot be met because there may
-not be a celestial coordinate system in both FrameSets. If this is
-likely to happen, we can supply a list of preferences, or a
-{\em{domain search path,}}
-as the third argument to AST\_CONVERT, such as
-the following:
-
-\small
-\begin{verbatim}
- CVT = AST_CONVERT( FRAMESETA, FRAMESETB, 'SKY,PIXEL,GRID,', STATUS )
-\end{verbatim}
-\normalsize
-
-Now, if the two FrameSets cannot be inter-related using the SKY domain,
-AST\_CONVERT will attempt to use the PIXEL domain instead. If this
-also fails, it will try the GRID domain. A blank field in the domain
-search path (here indicated by the final comma) allows any Domain
-value to be used. This can be employed as a last resort when all else
-has failed.
-
-If astConvert succeeds in identifying a conversion, it will return a
-pointer to a FrameSet (\secref{ss:framesetsfromconvert}) in which the
-source and destination Frames are inter-connected by the required
-Mapping. In this case, of course, these Frames will be the current
-Frames of the two FrameSets, but in all other respects the returned
-FrameSet is the same as when converting between Frames.
-
-Very importantly, however, AST\_CONVERT may modify the FrameSets you
-are converting between. It does this, in order to indicate which
-pairing of Frames was used to inter-relate them, by changing the \htmlref{Base}{Base}
-attribute for each FrameSet so that the Frame used in the pairing
-becomes its base Frame (\secref{ss:baseandcurrent}).
-
-Finally, note that AST\_CONVERT may also be used to convert between a
-FrameSet and a Frame, or {\em{vice versa.}} If a pointer to a Frame is
-supplied for either the first or second argument, it will behave like
-a FrameSet containing only a single Frame.
-
-\subsection{\label{ss:registeringimages}Example---Registering Two Images}
-
-Consider two images which have been calibrated by attaching FrameSets
-to them, such that the base \htmlref{Frame}{Frame} of each \htmlref{FrameSet}{FrameSet} corresponds to the
-raw data grid coordinates of each image (the GRID domain of
-\secref{ss:domainconventions}). Suppose, also, that these FrameSets
-contain an unknown number of other Frames, representing alternative
-world coordinate systems. What we wish to do is register these two
-images, such that we can transform from a position in the data grid of
-one into the corresponding position in the data grid of the other.
-This is a very practical example because images will typically be
-calibrated using FrameSets in precisely this way.
-
-The first step will probably involve making a copy of both FrameSets
-(using \htmlref{AST\_COPY}{AST_COPY}---\secref{ss:copyingobjects}), since we will be
-modifying them. Let ``frameseta'' and ``framesetb'' be pointers to
-these copies. Since we want to convert between the base Frames of
-these FrameSets ({\em{i.e.}}\ their data grid coordinates), the next
-step is to make these Frames current. This is simply done by inverting
-both FrameSets, which interchanges their base and current
-Frames. astInvert will perform this task:
-
-\small
-\begin{verbatim}
- CALL AST_INVERT( FRAMESETA, STATUS )
- CALL AST_INVERT( FRAMESETB, STATUS )
-\end{verbatim}
-\normalsize
-
-To identify the required conversion, we now use \htmlref{AST\_CONVERT}{AST_CONVERT},
-supplying a suitable domain search path with which we would like our
-two images to be registered:
-
-\small
-\begin{verbatim}
- CVT = AST_CONVERT( FRAMESETA, FRAMESETB, 'SKY,PIXEL,GRID', STATUS )
- IF ( CVT .EQ. AST__NULL ) THEN
- <no conversion was possible>
- ELSE
- <conversion was possible>
- END IF
-\end{verbatim}
-\normalsize
-
-The effects of this are:
-
-\begin{enumerate}
-\item AST\_CONVERT first attempts to register the two images on the
-celestial sphere ({\em{i.e.}}\ using the SKY domain). To do this, it
-searches for a celestial coordinate system, although not necessarily
-the same one, attached to each image. If it finds a suitable pair of
-coordinate systems, it then registers the images by matching
-corresponding positions on the sky.
-
-\item If this fails, AST\_CONVERT next tries to match positions in the
-PIXEL domain (\secref{ss:framedomains}). If it succeeds, the two
-images will then be registered so that their corresponding pixel
-positions correspond. If the PIXEL domain is offset from the data grid
-(as typically happens in data reduction systems which implement a
-``pixel origin''), then this will be correctly accounted for.
-
-\item If this also fails, the GRID domain is finally used. This will
-result in image registration by matching corresponding points in the
-data grids used by both images. This means they will be
-aligned so that the first element their data arrays correspond.
-
-\item If all of the above fail, AST\_CONVERT will return the value
-AST\_\_NULL. Otherwise a pointer to a FrameSet will be returned.
-\end{enumerate}
-
-The resulting CVT FrameSet may then be used directly
-(\secref{ss:convertingskyframes}) to convert between positions in the
-data grid of the first image and corresponding positions in the data
-grid of the second image.
-
-To determine which domain was used to achieve registration,
-we can use the fact that the \htmlref{Base}{Base} attribute of each FrameSet is set by
-AST\_CONVERT to indicate which intermediate Frames were used. We
-can therefore simply invert either FrameSet (to make its base Frame
-become the current one) and then enquire the \htmlref{Domain}{Domain} value:
-
-\small
-\begin{verbatim}
- CHARACTER * ( 20 ) DOMAIN
-
- ...
-
-
- CALL AST_INVERT( FRAMESETA, STATUS )
- DOMAIN = AST_GETC( FRAMESETA, 'Domain', STATUS )
-\end{verbatim}
-\normalsize
-
-If conversion was successful, the result will be one of the strings
-``SKY'', ``PIXEL'' or ``GRID''.
-
-\subsection{\label{ss:remapframe}Re-Defining a FrameSet Coordinate System}
-
-As discussed earlier (\secref{ss:baseandcurrent}), an important
-application of a \htmlref{FrameSet}{FrameSet} is to allow coordinate system information to
-be attached to entities such as images in order to calibrate them. In
-addition, one of the main objectives of AST is to simplify the
-propagation of such information through successive stages of data
-processing, so that it remains consistent with the associated image
-data.
-
-In such a situation, the FrameSet's base \htmlref{Frame}{Frame} would correspond with
-the image's data grid coordinates and its other Frames (if any) with
-the various alternative world coordinate systems associated with the
-image. If the data processing being performed does not change the
-relationship between the image's data grid coordinates and any of the
-associated world coordinate systems, then propagation of the WCS
-information is straightforward and simply involves copying the
-FrameSet associated with the image.
-
-If any of these relationships change, however, then corresponding
-changes must be made to the way Frames within the FrameSet are
-inter-related. By far the most common case occurs when the image
-undergoes some geometrical transformation resulting in ``re-gridding''
-on to another data grid, but the same principles can be applied to any
-re-definition of a coordinate system.
-
-To pursue the re-gridding example, we would need to modify our
-FrameSet to account for the fact that the image's data grid coordinate
-system (corresponding to the FrameSet's base Frame) has
-changed. Looking at the steps needed in detail, we might proceed as
-follows:
-
-\begin{enumerate}
-\item Create a \htmlref{Mapping}{Mapping} which represents the relationship between the
-original data grid coordinate system and the new one.
-
-\item Obtain a Frame to represent the new data grid coordinate system
-(we could re-use the original base Frame here, using \htmlref{AST\_GETFRAME}{AST_GETFRAME} to
-obtain a pointer to it).
-
-\item Add the new Frame to the FrameSet, related to the original base
-Frame by the new Mapping. This Frame now represents the new data grid
-coordinate system and is correctly related to all the other Frames
-present.\footnote{This is because any transformation to or from this
-new Frame must go {\em{via}} the base Frame representing the original
-data grid coordinate system, which we assume was correctly related to
-all the other Frames present.}
-
-\item Remove the original base Frame (representing the old data grid
-coordinate system).
-
-\item Make the new Frame the base Frame and restore the original
-current Frame.
-\end{enumerate}
-
-\begin{latexonly}
- The effect of these steps is to change the relationship between the
- base Frame and all the other Frames present. It is as if a new Mapping
- has been interposed between the Frame we want to alter and all the
- other Frames within the FrameSet (Figure~\ref{fig:fsremap}).
- \begin{figure}[hbtp]
- \begin{center}
- \includegraphics[scale=0.6]{sun210_figures/fsremap.eps}
- \caption{The effect of \htmlref{AST\_REMAPFRAME}{AST_REMAPFRAME} is to interpose a Mapping between
- a nominated Frame within a FrameSet and the remaining contents of the
- FrameSet. This effectively ``re-defines'' the coordinate system
- represented by the affected Frame. It may be used to compensate (say)
- for geometrical changes made to an associated image. The
- inter-relationships between all the other Frames within the FrameSet
- remain unchanged.}
- \label{fig:fsremap}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- The effect of these steps is to change the relationship between the
- base Frame and all the other Frames present. It is as if a new Mapping
- has been interposed between the Frame we want to alter and all the
- other Frames within the FrameSet (see Figure below).
- \begin{quote}
- \begin{figure}[hbtp]
- \label{fig:fsremap}
- \includegraphics[scale=0.9]{sun210_figures/fsremap.eps}
- \caption{The effect of AST\_REMAPFRAME is to interpose a Mapping between
- a nominated Frame within a FrameSet and the remaining contents of the
- FrameSet. This effectively ``re-defines'' the coordinate system
- represented by the affected Frame. It may be used to compensate (say)
- for geometrical changes made to an associated image. The
- inter-relationships between all the other Frames within the FrameSet
- remain unchanged.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-
-Performing the steps above is rather lengthy, however, so the
-AST\_REMAPFRAME function is provided to perform all of these
-operations in one go. A practical example of its use is given below
-(\secref{ss:wcsprocessingexample}).
-
-\subsection{\label{ss:wcsprocessingexample}Example---Binning an Image}
-
-As an example of using \htmlref{AST\_REMAPFRAME}{AST_REMAPFRAME}, consider a case where the
-pixels of a 2-dimensional image have been binned 2$\times$2, so as to
-reduce the image size by a factor of two in each dimension. We must
-now modify the associated \htmlref{FrameSet}{FrameSet} to reflect this change to the
-image. Much the same process would be needed for any other geometrical
-change the image might undergo.
-
-We first set up a \htmlref{Mapping}{Mapping} (a \htmlref{WinMap}{WinMap} in this case) which relates the
-data grid coordinates in the original image to those in the new one:
-
-\small
-\begin{verbatim}
- INTEGER WINMAP
- DOUBLE PRECISION INA( 2 ), INB( 2 ), OUTA( 2 ), OUTB( 2 )
- DATA INA / 0.5D0, 0.5D0 /
- DATA INB / 2.5D0, 2.5D0 /
- DATA OUTA / 0.5D0, 0.5D0 /
- DATA OUTB / 1.5DO, 1.5DO /
-
- ...
-
- WINMAP = AST_WINMAP( 2, INA, INB, OUTA, OUTB, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-Here, we have simply set up arrays containing the data grid
-coordinates of the bottom left and top right corners of the first
-element in the output image (OUTA and OUTB) and the corresponding
-coordinates in the input image (INA and INB). \htmlref{AST\_WINMAP}{AST_WINMAP} then creates
-a WinMap which performs the required transformation. We do not need to
-know the size of the image.
-
-We can then pass this WinMap to AST\_REMAPFRAME. This modifies the
-relationship between our FrameSet's base \htmlref{Frame}{Frame} and the other Frames in
-the FrameSet, so that the base Frame represents the data grid
-coordinate system of the new image rather than the old one:
-
-\small
-\begin{verbatim}
- INTEGER FRAMESET
-
- ...
-
- CALL AST_REMAPFRAME( FRAMESET, AST__BASE, WINMAP, STATUS )
-\end{verbatim}
-\normalsize
-
-Any other coordinate systems described by the FrameSet, no matter how
-many of these there might be, are now correctly associated with the
-new image.
-
-\subsection{\label{ss:framesetintegrity}Maintaining the Integrity of FrameSets}
-
-When constructing a \htmlref{FrameSet}{FrameSet}, you are provided with a framework into
-which you can place any combination of Frames and Mappings that you
-wish. There are relatively few constraints on this process and no
-checks are performed to see whether the FrameSet you construct makes
-physical sense. It is quite possible, for example, to construct a
-FrameSet containing two identical SkyFrames which are inter-related by
-a non-unit \htmlref{Mapping}{Mapping}. AST will not object if you do this, but it makes
-no sense, because applying a non-unit Mapping to any set of celestial
-coordinates cannot yield positions that are still in the original
-coordinate system. If you use such a FrameSet to perform coordinate
-conversions, you are likely to get unpredictable results because the
-information in the FrameSet is corrupt.
-
-It is, of course, your responsibility as a programmer to ensure the
-validity of any information which you insert into a
-FrameSet. Normally, this is straightforward and simply consists of
-formulating your problem correctly (a diagram can often help to
-clarify how coordinate systems are inter-related) and writing the
-appropriate bug-free code to construct the FrameSet. However, once you
-start to modify an existing FrameSet, there are new opportunities for
-corrupting it!
-
-Consider, for example, a FrameSet whose current \htmlref{Frame}{Frame} is a
-\htmlref{SkyFrame}{SkyFrame}. We can set a new value for this SkyFrame's \htmlref{Equinox}{Equinox} attribute
-simply by using \htmlref{AST\_SET}{AST_SET} on the FrameSet, as follows:
-
-\small
-\begin{verbatim}
- CALL AST_SET( FRAMESET, 'Equinox=J2010', STATUS )
-\end{verbatim}
-\normalsize
-
-The effect of this will be to change the celestial coordinate system
-which the current Frame represents. You can see, however, that this
-has the potential to make the FrameSet corrupt unless corresponding
-changes are also made to the Mapping which relates this SkyFrame to
-the other Frames within the FrameSet. In fact, it is a general rule
-that any change to a FrameSet which affects its current Frame can
-potentially require corresponding changes to the FrameSet's Mappings
-in order to maintain its overall integrity.
-
-Fortunately, once you have stored valid information in a FrameSet, AST
-will look after these details for you automatically, so that the
-FrameSet's integrity is maintained. In the example above, it would do
-this by appropriately re-mapping the current Frame (as if
-\htmlref{AST\_REMAPFRAME}{AST_REMAPFRAME} had been used---\secref{ss:remapframe}) in response to
-the use of AST\_SET. One way of illustrating this process is as
-follows:
-
-\small
-\begin{verbatim}
- INTEGER SKYFRAME
-
- ...
-
- SKYFRAME = AST_SKYFRAME( ' ', STATUS )
- FRAMESET = AST_FRAMESET( SKYFRAME, STATUS )
- CALL AST_ADDFRAME( FRAMESET, 1, AST_UNITMAP( 2, ' ', STATUS )
- : SKYFRAME, STATUS )
-\end{verbatim}
-\normalsize
-
-This constructs a trivial FrameSet whose base and current Frames are
-both the same SkyFrame connected by a \htmlref{UnitMap}{UnitMap}. You can think of this
-as a ``pipe'' connecting two coordinate systems. At present, these two
-systems represent identical ICRS coordinates, so the FrameSet
-implements a unit Mapping. We can change the coordinate system on the
-current end of this pipe as follows:
-
-\small
-\begin{verbatim}
- CALL AST_SET( FRAMESET, 'System=Ecliptic, Equinox=J2010', STATUS )
-\end{verbatim}
-\normalsize
-
-and the Mapping which the FrameSet implements would change
-accordingly. To change the coordinate system on the base end of the
-pipe, we might use:
-
-\small
-\begin{verbatim}
- CALL AST_INVERT( FRAMESET )
- CALL AST_SET( FRAMESET, 'System=Galactic', STATUS )
- CALL AST_INVERT( FRAMESET )
-\end{verbatim}
-\normalsize
-
-The FrameSet would then convert between galactic and ecliptic
-coordinates.
-
-Note that AST\_SET is not the only function which has this effect:
-\htmlref{AST\_CLEAR}{AST_CLEAR} behaves similarly, as also does \htmlref{AST\_PERMAXES}{AST_PERMAXES}
-(\secref{ss:permutingaxes}). If you need to circumvent this mechanism
-for any reason, this can be done by going behind the scenes and
-obtaining a pointer directly to the Frame you wish to modify. Consider
-the following, for example:
-
-\small
-\begin{verbatim}
- SKYFRAME = AST_GETFRAME( FRAMESET, AST__CURRENT, STATUS )
- CALL AST_SET( SKYFRAME, 'Equinox=J2010', STATUS )
- CALL AST_ANNUL( SKYFRAME, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, AST\_SET is applied to the SkyFrame pointer rather than the
-FrameSet pointer, so the usual checks on FrameSet integrity do not
-occur. The SkyFrame's Equinox attribute will therefore be modified
-without any corresponding change to the FrameSet's Mappings. In this
-case you must take responsibility yourself for maintaining the
-FrameSet's integrity, perhaps through appropriate use of
-AST\_REMAPFRAME.
-
-\subsection{Merging FrameSets}
-
-\begin{latexonly}
- As well as adding individual Frames to a \htmlref{FrameSet}{FrameSet}
- (\secref{ss:addingframes}), it is also possible to add complete sets of
- inter-related Frames which are contained within another
- FrameSet. This, of course, corresponds to the process of merging two
- FrameSets (Figure~\ref{fig:fsmerge}).
- \begin{figure}[hbtp]
- \begin{center}
- \includegraphics[scale=0.6]{sun210_figures/fsmerge.eps}
- \caption{Two FrameSets in the process of being merged using
- \htmlref{AST\_ADDFRAME}{AST_ADDFRAME}. FrameSet~B is being added to FrameSet~A by supplying a
- new \htmlref{Mapping}{Mapping} which inter-relates a nominated \htmlref{Frame}{Frame} in A (here number~1)
- and the current Frame of B. In the merged FrameSet, the Frames
- contributed by B will be re-numbered to become Frames~4, 5 and 6. The
- base Frame will remain unchanged, but the current Frame of B becomes
- the new current Frame. Note that FrameSet~B itself is not
- altered by this process.}
- \label{fig:fsmerge}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- As well as adding individual Frames to a FrameSet
- (\secref{ss:addingframes}), it is also possible to add complete sets of
- inter-related Frames which are contained within another
- FrameSet. This, of course, corresponds to the process of merging two
- FrameSets (see Figure below).
- \begin{quote}
- \begin{figure}[hbtp]
- \label{fig:fsmerge}
- \includegraphics[scale=0.75]{sun210_figures/fsmerge.eps}
- \caption{Two FrameSets in the process of being merged using
- AST\_ADDFRAME. FrameSet~B is being added to FrameSet~A by supplying a
- new Mapping which inter-relates a nominated Frame in A (here number~1)
- and the current Frame of B. In the merged FrameSet, the Frames
- contributed by B will be re-numbered to become Frames~4, 5 and 6. The
- base Frame will remain unchanged, but the current Frame of B becomes
- the new current Frame. Note that FrameSet~B itself is not
- altered by this process.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-
-This process is performed by adding one FrameSet to another using
-AST\_ADDFRAME, in much the same manner as when adding a new Frame to
-an existing FrameSet (\secref{ss:addingframes}). It is simply a matter
-of providing a FrameSet pointer, instead of a Frame pointer, for the
-4th argument. In performing the merger you must, as usual, supply a
-Mapping, but in this case the Mapping should relate the current Frame
-of the FrameSet being added to one of the Frames already present. For
-example, you might perform the merger shown in
-Figure~\ref{fig:fsmerge} as follows:
-
-\small
-\begin{verbatim}
- INTEGER MAPPING
-
- ...
-
- CALL AST_ADDFRAME( FRAMESETA, 1, MAPPING, FRAMESETB, STATUS )
-\end{verbatim}
-\normalsize
-
-The Frames acquired by FRAMESETA from the FrameSet being added
-(FRAMESETB) are re-numbered so that they retain their original order
-and follow on consecutively after the Frames that were already
-present, whose indices remain unchanged. The base Frame of FRAMESETA
-remains unchanged, but the current Frame of FRAMESETB becomes its new
-current Frame. All the inter-relationships between Frames in both
-FrameSets remain in place and are preserved in the merged FrameSet.
-
-Note that while this process modifies the first FrameSet (FRAMESETA),
-it leaves the original contents of the one being added (FRAMESETB)
-unchanged.
-
-%\cleardoublepage
-%\section{\label{ss:searching}TBW - Searching for Coordinate Systems}
-
-\cleardoublepage
-\section{\label{ss:channels}Saving and Restoring Objects (Channels)}
-
-Facilities are provided by the AST library for performing input and
-output (I/O) with any kind of \htmlref{Object}{Object}. This means it is possible
-to write any Object into various external representations for
-storage, and then to read these representations back in, so as to
-restore the original Object. Typically, an Object would be written by
-one program and read back in by another.
-
-We refer to ``external representations'' in the plural because AST is
-designed to function independently of any particular data storage
-system. This means that Objects may need converting into a number of
-different external representations in order to be compatible with
-(say) the astronomical data storage system in which they will reside.
-
-In this section, we discuss the basic I/O facilities which support
-external representations based on a textual format referred to as the AST
-``native format''. These are implemented using a new kind of Object---a
-\htmlref{Channel}{Channel}. We will examine later how to use other representations, based on
-an XML format or on the use of FITS headers, for storing Objects. These
-are implemented using more specialised forms of Channel called \htmlref{XmlChan}{XmlChan}
-(\secref{ss:xmlchan}) and \htmlref{FitsChan}{FitsChan} (\secref{ss:nativefits}).
-
-\subsection{The Channel Model}
-
-The best way to start thinking about a \htmlref{Channel}{Channel} is like a Fortran I/O
-unit (also represented by an integer, as it happens) and to think of
-the process of creating a Channel as the combined process of
-allocating a unit number and attaching it to a file by opening the
-file on that unit. Subsequently, you can read and write Objects
-{\em{via}} the Channel.
-
-This analogy is not quite perfect, however, because a Channel has, in
-principle, two ``files'' attached to it. One is used when reading, and
-the other when writing. These are termed the Channel's {\em{source}}
-and {\em{sink}} respectively. In practice, the source and sink may
-both be the same, in which case the analogy with the Fortran I/O unit
-is correct, but this need not always be so. It is not necessarily so
-with the basic Channel, as we will now see
-(\secref{ss:creatingachannel}).
-
-\subsection{\label{ss:creatingachannel}Creating a Channel}
-
-The process of creating a \htmlref{Channel}{Channel} is straightforward. As you
-might expect, it uses the constructor function \htmlref{AST\_CHANNEL}{AST_CHANNEL}:
-
-\small
-\begin{verbatim}
- INCLUDE 'AST_PAR'
- INTEGER CHANNEL, STATUS
-
- STATUS = 0
-
- ...
-
- CHANNEL = AST_CHANNEL( AST_NULL, AST_NULL, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-The first two arguments to AST\_CHANNEL specify the external source
-and sink that the Channel is to use. There arguments are the names of
-Fortran subroutines and we will examine their use in more detail later
-(\secref{ss:channelsource} and \secref{ss:channelsink}).
-
-In this very simple example we have supplied the name of the null
-routine AST\_NULL\footnote{Note that AST\_NULL (one underscore) is a
-routine name and is distinct from AST\_\_NULL (two underscores) which
-is a null \htmlref{Object}{Object} pointer. Since we are passing the name of one
-routine to another routine, AST\_NULL would normally have to appear in
-a Fortran EXTERNAL statement. In this example, however, a suitable
-statement is already present in the AST\_PAR include file.} for both
-the source and sink routines. This requests the default behaviour,
-which means that textual input will be read from the program's
-standard input stream (typically, this means your keyboard) while
-textual output will go to the standard output stream (typically
-appearing on your screen). On UNIX systems, of course, either of these
-streams can easily be redirected to files.
-
-\subsection{\label{ss:writingtoachannel}Writing Objects to a Channel}
-
-The process of saving Objects is very straightforward. You can
-simply write any \htmlref{Object}{Object} to a \htmlref{Channel}{Channel} using the \htmlref{AST\_WRITE}{AST_WRITE}
-function, as follows:
-
-\small
-\begin{verbatim}
- INTEGER NOBJ, OBJECT
-
- ...
-
- NOBJ = AST_WRITE( CHANNEL, OBJECT, STATUS )
-\end{verbatim}
-\normalsize
-
-The effect of this will be to produce a textual description of the
-Object which will appear, by default, on your program's standard
-output stream. Any class of Object may be converted into text in this
-way.
-
-AST\_WRITE returns a count of the number of Objects written. Usually,
-this will be one, unless the Object supplied cannot be
-represented. With a basic Channel all Objects can be represented, so a
-value of one will always be returned unless there has been an
-error. We will see later, however, that more specialised forms of
-Channel may impose restrictions on the kind of Object you can write
-(\secref{ss:foreignfitslimitations}). In such cases, AST\_WRITE may
-return zero to indicate that the Object was not acceptable.
-
-\subsection{\label{ss:readingfromachannel}Reading Objects from a Channel}
-
-Before discussing the format of the output produced above
-(\secref{ss:writingtoachannel}), let us consider how to read it back,
-so as to reconstruct the original \htmlref{Object}{Object}. Naturally, we would first
-need to save the output in a file. On UNIX systems, we can do that
-simply by redirecting standard output to a file using a shell command
-like:
-
-\begin{quote}
-\small
-\begin{verbatim}
-program1 >file
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Within a subsequent program, we can read this Object back in by
-using the \htmlref{AST\_READ}{AST_READ} function, having first created a suitable
-\htmlref{Channel}{Channel}:
-
-\small
-\begin{verbatim}
- OBJECT = AST_READ( CHANNEL, STATUS )
-\end{verbatim}
-\normalsize
-
-By default, this function will read from the standard input stream
-(the default source for a basic Channel), so we would need to ensure
-that our second program reads its input from the file in which the
-Object description is stored. On UNIX systems, we could again use a
-shell redirection command such as:
-
-\begin{quote}
-\small
-\begin{verbatim}
-program2 <file
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\subsection{Saving and Restoring Multiple Objects}
-
-I/O operations performed on a basic \htmlref{Channel}{Channel} are sequential. This
-means that if you write more than one \htmlref{Object}{Object} to a Channel,
-each new Object's textual description is simply appended to the
-previous one. You can store any number of Objects in this way,
-subject only to the storage space you have available.
-
-After you read an Object back from a basic Channel, the
-Channel is ``positioned'' at the end of that Object's
-textual description. If you then perform another read, you will
-read the next Object's textual description and therefore
-retrieve the next Object. This process may be repeated to read
-each Object in turn. When there are no more Objects to be
-read, \htmlref{AST\_READ}{AST_READ} will return the value AST\_\_NULL to indicate an
-{\em{end-of-file.}}
-
-\subsection{\label{ss:validatinginput}Validating Input}
-
-The pointer returned by \htmlref{AST\_READ}{AST_READ} (\secref{ss:readingfromachannel})
-could identify any class of \htmlref{Object}{Object}---this is determined entirely by
-the external data being read. If it is necessary to test for a
-particular class (say a \htmlref{Frame}{Frame}), this may be done as follows using the
-appropriate member of the \htmlref{AST\_ISA$<$CLASS$>$}{AST_ISACLASS} family of functions:
-
-\small
-\begin{verbatim}
- LOGICAL OK
-
- ...
-
- OK = AST_ISAFRAME( OBJECT, STATUS )
-\end{verbatim}
-\normalsize
-
-Note, however, that this will accept any Frame, so would be equally
-happy with a basic Frame or a \htmlref{SkyFrame}{SkyFrame}. An alternative validation
-strategy would be to obtain the value of the Object's \htmlref{Class}{Class} attribute
-and then test this character string, as follows:
-
-\small
-\begin{verbatim}
- OK = AST_GETC( OBJECT, 'Class', STATUS ) .EQ. 'Frame'
-\end{verbatim}
-\normalsize
-
-This would only accept a basic Frame and would reject a SkyFrame.
-
-\subsection{Storing an ID String with an Object}
-
-Occasionally, you may want to store a number of Objects and later
-retrieve them and use each for a different purpose. If the Objects are
-of the same class, you cannot use the \htmlref{Class}{Class} attribute to distinguish
-them when you read them back
-({\em{c.f.}}~\secref{ss:validatinginput}). Although relying on the
-order in which they are stored is a possible solution, this becomes
-complicated if some of the Objects are optional and may not always be
-present. It also makes extending your data format in future more
-difficult.
-
-To help with this, every AST \htmlref{Object}{Object} has an \htmlref{ID}{ID} attribute and an \htmlref{Ident}{Ident}
-attribute, both of which allows you, in effect, to attach a textual
-identification label to it. You simply set the ID or Ident attribute before
-writing the Object:
-
-\small
-\begin{verbatim}
- CALL AST_SET( OBJECT, 'ID=Calibration', STATUS )
- NOBJ = AST_WRITE( CHANNEL, OBJECT, STATUS )
-\end{verbatim}
-\normalsize
-
-You can then test its value after you read the Object back:
-
-\small
-\begin{verbatim}
- OBJECT = AST_READ( CHANNEL, STATUS )
- IF ( AST_GETC( OBJECT, 'ID', STATUS ) .EQ. 'Calibration' ) THEN
- <the Calibration Object has been read>
- ELSE
- <some other Object has been read>
- END IF
-\end{verbatim}
-\normalsize
-
-The only difference between the ID and Ident attributes is that the ID
-attribute is unique to a particular Object and is lost if, for example,
-you make a copy of the Object. The Ident attrubute, on the other hand, is
-transferred to the new Object when a copy is made. Consequently, it is
-safest to set the value of the ID attribute immediately before you
-perform the write.
-
-\subsection{\label{ss:textualoutputformat}The Textual Output Format}
-
-Let us now examine the format of the textual output produced by
-writing an \htmlref{Object}{Object} to a basic \htmlref{Channel}{Channel}
-(\secref{ss:writingtoachannel}). To give a concrete example, suppose
-the Object in question is a \htmlref{SkyFrame}{SkyFrame}, written out as follows:
-
-\small
-\begin{verbatim}
- INTEGER SKYFRAME
-
- ...
-
- NOBJ = AST_WRITE( CHANNEL, SKYFRAME, STATUS )
-\end{verbatim}
-\normalsize
-
-The output should then look like the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
- Begin SkyFrame # Description of celestial coordinate system
-# Title = "FK4 Equatorial Coordinates, no E-terms, Mean Equinox B1950.0, Epoch B1958.0" # Title of coordinate system
- Naxes = 2 # Number of coordinate axes
-# Domain = "SKY" # Coordinate system domain
-# Lbl1 = "Right Ascension" # Label for axis 1
-# Lbl2 = "Declination" # Label for axis 2
-# Uni1 = "hh:mm:ss.s" # Units for axis 1
-# Uni2 = "ddd:mm:ss" # Units for axis 2
-# Dir1 = 0 # Plot axis 1 in reverse direction (hint)
- Ax1 = # Axis number 1
- Begin SkyAxis # Celestial coordinate axis
- End SkyAxis
- Ax2 = # Axis number 2
- Begin SkyAxis # Celestial coordinate axis
- End SkyAxis
- IsA Frame # Coordinate system description
- System = "FK4-NO-E" # Celestial coordinate system type
- Epoch = 1958 # Besselian epoch of observation
-# Eqnox = 1950 # Besselian epoch of mean equinox
- End SkyFrame
-\end{verbatim}
-\normalsize
-\end{quote}
-
-You will notice that this output is designed both for a human reader,
-in that it is formatted, and also to be read back by a computer in
-order to reconstruct the SkyFrame. In fact, this is precisely the way
-that \htmlref{AST\_SHOW}{AST_SHOW} works (\secref{ss:displayingobjects}), this routine
-being roughly equivalent to the following use of a Channel:
-
-\small
-\begin{verbatim}
- CHANNEL = AST_CHANNEL( AST_NULL, AST_NULL, ' ', STATUS )
- NOBJ = AST_WRITE( CHANNEL, OBJECT, STATUS )
- CALL AST_ANNUL( CHANNEL, STATUS )
-\end{verbatim}
-\normalsize
-
-Some lines of the output start with a ``\verb?#?'' comment character,
-which turns the rest of the line into a comment. These lines will be
-ignored when read back in by \htmlref{AST\_READ}{AST_READ}. They typically contain
-default values, or values that can be derived in some way from the
-other data present, so that they do not actually need to be stored in
-order to reconstruct the original Object. They are provided purely for
-human information. The same comment character is also used to append
-explanatory comments to most output lines.
-
-It is not sensible to attempt a complete description of this output
-format because every class of Object is potentially different and each
-can define how its own data should be represented. However, there are
-some basic rules, which mean that the following common features will
-usually be present:
-
-\begin{enumerate}
-\item Each Object is delimited by matching ``Begin'' and ``End''
-lines, which also identify the class of Object involved.
-
-\item Within each Object description, data values are represented
-by a simple ``keyword~$=$~value'' syntax, with one value to a line.
-
-\item Lines beginning ``IsA'' are used to mark the divisions between
-data belonging to different levels in the class hierarchy
-(\appref{ss:classhierarchy}). Thus, ``IsA~\htmlref{Frame}{Frame}'' marks the end of data
-associated with the Frame class and the start of data associated with
-some derived class (a SkyFrame in the above example). ``IsA'' lines
-may be omitted if associated data values are absent and no confusion
-arises.
-
-\item Objects may contain other Objects as data. This is
-indicated by an absent value, with the description of the data
-Object following on subsequent lines.
-
-\item Indentation is used to clarify the overall structure.
-\end{enumerate}
-
-Beyond these general principles, the best guide to what a particular
-line of output represents will generally be the comment which
-accompanies it together with a general knowledge of the class of
-Object being described.
-
-\subsection{\label{ss:controllingchanneloutput}Controlling the Amount of Output}
-
-It is not always necessary for the output from \htmlref{AST\_WRITE}{AST_WRITE}
-(\secref{ss:writingtoachannel}) to be human-readable, so a \htmlref{Channel}{Channel} has
-attributes that allow the amount of detail in the output to be
-controlled.
-
-The first of these is the integer attribute \htmlref{Full}{Full}, which controls the
-extent to which optional, commented out, output lines are produced. By
-default, Full is zero, and this results in the standard style of
-output (\secref{ss:textualoutputformat}) where default values that may
-be helpful to humans are included. To suppress these optional lines,
-Full should be set to $-$1. This is most conveniently done when the
-Channel is created, so that:
-
-\small
-\begin{verbatim}
- CHANNEL = AST_CHANNEL( AST_NULL, AST_NULL, 'Full=-1', STATUS )
- NOBJ = AST_WRITE( CHANNEL, SKYFRAME, STATUS )
- CALL AST_ANNUL( CHANNEL, STATUS )
-\end{verbatim}
-\normalsize
-
-would result in output containing only the essential information, such
-as:
-
-\begin{quote}
-\small
-\begin{verbatim}
- Begin SkyFrame # Description of celestial coordinate system
- Naxes = 2 # Number of coordinate axes
- Ax1 = # Axis number 1
- Begin SkyAxis # Celestial coordinate axis
- End SkyAxis
- Ax2 = # Axis number 2
- Begin SkyAxis # Celestial coordinate axis
- End SkyAxis
- IsA Frame # Coordinate system description
- System = "FK4-NO-E" # Celestial coordinate system type
- Epoch = 1958 # Besselian epoch of observation
- End SkyFrame
-\end{verbatim}
-\normalsize
-\end{quote}
-
-In contrast, setting Full to $+$1 will result in additional output
-lines which will reveal every last detail of the \htmlref{Object}{Object}'s
-construction. Often this will be rather more than you want, especially
-for more complex Objects, but it can sometimes help when debugging
-programs. This is how a \htmlref{SkyFrame}{SkyFrame} appears at this level of detail:
-
-\begin{quote}
-\small
-\begin{verbatim}
- Begin SkyFrame # Description of celestial coordinate system
-# RefCnt = 1 # Count of active Object pointers
-# Nobj = 1 # Count of active Objects in same class
- IsA Object # Astrometry Object
-# Nin = 2 # Number of input coordinates
-# Nout = 2 # Number of output coordinates
-# Invert = 0 # Mapping not inverted
-# Fwd = 1 # Forward transformation defined
-# Inv = 1 # Inverse transformation defined
-# Report = 0 # Don't report coordinate transformations
- IsA Mapping # Mapping between coordinate systems
-# Title = "FK4 Equatorial Coordinates, no E-terms, Mean Equinox B1950.0, Epoch B1958.0" # Title of coordinate system
- Naxes = 2 # Number of coordinate axes
-# Domain = "SKY" # Coordinate system domain
-# Lbl1 = "Right Ascension" # Label for axis 1
-# Lbl2 = "Declination" # Label for axis 2
-# Sym1 = "RA" # Symbol for axis 1
-# Sym2 = "Dec" # Symbol for axis 2
-# Uni1 = "hh:mm:ss.s" # Units for axis 1
-# Uni2 = "ddd:mm:ss" # Units for axis 2
-# Dig1 = 7 # Individual precision for axis 1
-# Dig2 = 7 # Individual precision for axis 2
-# Digits = 7 # Default formatting precision
-# Fmt1 = "hms.1" # Format specifier for axis 1
-# Fmt2 = "dms" # Format specifier for axis 2
-# Dir1 = 0 # Plot axis 1 in reverse direction (hint)
-# Dir2 = 1 # Plot axis 2 in conventional direction (hint)
-# Presrv = 0 # Don't preserve target axes
-# Permut = 1 # Axes may be permuted to match
-# MinAx = 2 # Minimum number of axes to match
-# MaxAx = 2 # Maximum number of axes to match
-# MchEnd = 0 # Match initial target axes
-# Prm1 = 1 # Axis 1 not permuted
-# Prm2 = 2 # Axis 2 not permuted
- Ax1 = # Axis number 1
- Begin SkyAxis # Celestial coordinate axis
-# RefCnt = 1 # Count of active Object pointers
-# Nobj = 2 # Count of active Objects in same class
- IsA Object # Astrometry Object
-# Label = "Angle on Sky" # Axis Label
-# Symbol = "delta" # Axis symbol
-# Unit = "ddd:mm:ss" # Axis units
-# Digits = 7 # Default formatting precision
-# Format = "dms" # Format specifier
-# Dirn = 1 # Plot in conventional direction
- IsA Axis # Coordinate axis
-# Format = "dms" # Format specifier
-# IsLat = 0 # Longitude axis (not latitude)
-# AsTime = 0 # Display values as angles (not times)
- End SkyAxis
- Ax2 = # Axis number 2
- Begin SkyAxis # Celestial coordinate axis
-# RefCnt = 1 # Count of active Object pointers
-# Nobj = 2 # Count of active Objects in same class
- IsA Object # Astrometry Object
-# Label = "Angle on Sky" # Axis Label
-# Symbol = "delta" # Axis symbol
-# Unit = "ddd:mm:ss" # Axis units
-# Digits = 7 # Default formatting precision
-# Format = "dms" # Format specifier
-# Dirn = 1 # Plot in conventional direction
- IsA Axis # Coordinate axis
-# Format = "dms" # Format specifier
-# IsLat = 0 # Longitude axis (not latitude)
-# AsTime = 0 # Display values as angles (not times)
- End SkyAxis
- IsA Frame # Coordinate system description
- System = "FK4-NO-E" # Celestial coordinate system type
- Epoch = 1958 # Besselian epoch of observation
-# Eqnox = 1950 # Besselian epoch of mean equinox
- End SkyFrame
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\subsection{\label{ss:channelcommenting}Controlling Commenting}
-
-Another way of controlling output from a \htmlref{Channel}{Channel} is {\em{via}} the
-boolean (integer) \htmlref{Comment}{Comment} attribute, which controls whether comments
-are appended to describe the purpose of each value. Comment has the
-value 1 by default but, if set to zero, will suppress these
-comments. This is normally appropriate only if you wish to minimise
-the amount of output, for example:
-
-\small
-\begin{verbatim}
- CALL AST_SET( CHANNEL, 'Full=-1, Comment=0', STATUS )
- NOBJ = AST_WRITE( CHANNEL, SKYFRAME, STATUS )
-\end{verbatim}
-\normalsize
-
-might result in the following more compact output:
-
-\begin{quote}
-\small
-\begin{verbatim}
- Begin SkyFrame
- Naxes = 2
- Ax1 =
- Begin SkyAxis
- End SkyAxis
- Ax2 =
- Begin SkyAxis
- End SkyAxis
- IsA Frame
- System = "FK4-NO-E"
- Epoch = 1958
- End SkyFrame
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\subsection{Editing Textual Output}
-
-The safest advice about editing the textual output from \htmlref{AST\_WRITE}{AST_WRITE} (or
-\htmlref{AST\_SHOW}{AST_SHOW}) is ``don't!''---unless you know what you are doing.
-
-Having given that warning, however, it is sometimes possible to make
-changes to the text, or even to write entire \htmlref{Object}{Object} descriptions from
-scratch, and to read the results back in to construct new
-Objects. Normally, simple changes to numerical values are safest, but
-be aware that this is a back door method of creating Objects, so
-you are on your own! There are a number of potential pitfalls. In
-particular:
-
-\begin{itemize}
-\item \htmlref{AST\_READ}{AST_READ} is intended for retrieving data written by AST\_WRITE
-and not for reading data input by humans. As such, the data validation
-provided is very limited and is certainly not foolproof. This makes it
-quite easy to construct Objects that are internally inconsistent by
-this means. In contrast, the normal programming interface incorporates
-numerous checks designed to make it impossible to construct invalid
-Objects. You should not necessarily think you have found a bug if your
-changes to an Object's textual description fail to produce the results
-you expected!
-
-\item In many instances the names associated with values in textual
-output will correspond with Object attributes. Sometimes, however,
-these names may differ from the attribute name. This is mainly because
-of length restrictions imposed by other common external formats, such
-as FITS headers. Some of the names used do not correspond with
-attributes at all.
-
-\item It is safest to change single numerical or string values.
-Beware of changing the size or shape of Objects ({\em{e.g.}}\ the
-number of axes in a \htmlref{Frame}{Frame}). Often, these values must match others
-stored elsewhere within the Object and changing them in a haphazard
-fashion will not produce useful results.
-
-\item Be wary about un-commenting default values. Sometimes this will
-work, but often these values are derived from other Objects stored
-more deeply in the structure and the proper place to insert a new
-value is not where the default itself appears.
-\end{itemize}
-
-\subsection{\label{ss:mixingchanneltext}Mixing Objects with other Text}
-
-By default, when you use \htmlref{AST\_READ}{AST_READ} to read from a basic \htmlref{Channel}{Channel}
-(\secref{ss:readingfromachannel}), it is assumed that you are reading a
-stream of text containing only AST Objects, which follow each other
-end-to-end. If any extraneous input data are encountered which do not
-appear to form part of the textual description of an \htmlref{Object}{Object}, then an
-error will result. In particular, the first input line must identify
-the start of an Object description, so you cannot start reading half
-way through an Object.
-
-Sometimes, however, you may want to store AST Object descriptions
-intermixed with other textual data. You can do this by setting the
-Channel's boolean (integer) \htmlref{Skip}{Skip} attribute to 1. This will cause every
-read to skip over extraneous data until the start of a new AST Object
-description, if any, is found. So long as your other data do not mimic
-the appearance of an AST Object description, the two sets of data can
-co-exist.
-
-For example, by setting Skip to 1, the following complete Fortran
-program will read all the AST Objects whose descriptions appear in the
-source of this document, ignoring the other text. \htmlref{AST\_SHOW}{AST_SHOW} is used to
-display those found:
-
-\small
-\begin{verbatim}
- INCLUDE 'AST_PAR'
- INTEGER CHANNEL, OBJECT, STATUS
-
- STATUS = 0
- CHANNEL = AST_CHANNEL( AST_NULL, AST_NULL, 'Skip=1', STATUS )
- 1 OBJECT = AST_READ( CHANNEL, STATUS )
- IF ( OBJECT .NE. AST__NULL ) THEN
- CALL AST_SHOW( OBJECT, STATUS )
- CALL AST_ANNUL( OBJECT, STATUS )
- GO TO 1
- END IF
- CALL AST_ANNUL( CHANNEL, STATUS )
- END
-\end{verbatim}
-\normalsize
-
-\subsection{\label{ss:channelsource}Reading Objects from Files}
-
-Thus far, we have only considered the default behaviour of a \htmlref{Channel}{Channel}
-in reading and writing Objects through a program's standard input and
-output streams. We will now consider how to access Objects stored in
-files more directly.
-
-Because the AST library is designed to be used from more than one
-language, it has to be a little careful about reading and writing to
-files. This is due to the incompatibilities that often exist between
-the file I/O facilities provided by different languages. Fortunately,
-this ties in well with the principle that AST should also be
-independent of any particular data storage system, which we mention
-again in \secref{ss:otherplaces}.
-
-What this means in practice is that you must provide some simple
-Fortran routines that perform the actual transfer of data to and from
-files and similar external data stores. The routines you provide are
-supplied as the source and/or sink routine arguments to \htmlref{AST\_CHANNEL}{AST_CHANNEL}
-when you create a Channel (\secref{ss:creatingachannel}). An example is
-the best way to illustrate this.
-
-Consider the following simple subroutine called SOURCE. It reads a
-single line of text from a Fortran I/O unit and then calls
-\htmlref{AST\_PUTLINE}{AST_PUTLINE} to pass it to the AST library, together with its
-length. It sets this length to be negative if there is no more input:
-
-\small
-\begin{verbatim}
- SUBROUTINE SOURCE( STATUS )
- INTEGER STATUS
- CHARACTER * ( 200 ) BUFFER
-
- READ( 1, '(A)', END = 99 ) BUFFER
- CALL AST_PUTLINE( BUFFER, LEN( BUFFER ), STATUS )
- RETURN
-
- 99 CALL AST_PUTLINE( BUFFER, -1, STATUS )
- END
-\end{verbatim}
-\normalsize
-
-Our main program might then look something like this (omitting error
-checking for brevity):
-
-\small
-\begin{verbatim}
- EXTERNAL SOURCE
-
- ...
-
-* Open the input file.
- OPEN( UNIT = 1, FILE = 'infile.ast', STATUS = 'OLD' )
-
-* Create the Channel and read an Object from it.
- CHANNEL = AST_CHANNEL( SOURCE, AST_NULL, ' ', STATUS )
- OBJECT = AST_READ( CHANNEL, STATUS )
-
- ...
-
-* Annul the Channel and close the file when done.
- CALL AST_ANNUL( CHANNEL, STATUS )
- CLOSE( 1 )
-\end{verbatim}
-\normalsize
-
-Here, we first open the required input file. We then pass the name of
-our SOURCE routine as the first argument to AST\_CHANNEL when creating
-a new Channel (ensuring that SOURCE also appears in an EXTERNAL
-statement). When we read an \htmlref{Object}{Object} from this Channel using
-\htmlref{AST\_READ}{AST_READ}, the SOURCE routine will be called to obtain the textual
-data from the file, the end-of-file being detected when it yields a
-negative line length.
-
-\subsection{\label{ss:channelsink}Writing Objects to Files}
-
-We can also write a SINK routine, that obtains a line of output text
-from the AST library by calling \htmlref{AST\_GETLINE}{AST_GETLINE} and then writes it to a
-file. We can use this in basically the same way as the SOURCE routine
-in the previous section (\secref{ss:channelsource}):
-
-\small
-\begin{verbatim}
- SUBROUTINE SINK( STATUS )
- INTEGER L, STATUS
- CHARACTER * ( 200 ) BUFFER
-
- CALL AST_GETLINE( BUFFER, L, STATUS )
- IF ( L .GT. 0 ) WRITE( 2, '(A)' ) BUFFER( : L )
-
- END
-\end{verbatim}
-\normalsize
-
-In this case, our main program would supply the name of this SINK
-routine as the second argument to \htmlref{AST\_CHANNEL}{AST_CHANNEL} (ensuring that it also
-appears in an EXTERNAL statement), as follows:
-
-\small
-\begin{verbatim}
- EXTERNAL SINK
-
- ...
-
-* Open the output file.
- OPEN( UNIT = 2, FILE = 'outfile.ast', STATUS = 'NEW' )
-
-* Create a Channel and write an Object to it.
- CHANNEL = AST_CHANNEL( SOURCE, SINK, ' ', STATUS )
- NOBJ = AST_WRITE( CHANNEL, OBJECT, STATUS )
-
- ...
-
-* Annul the Channel and close the file when done.
- CALL AST_ANNUL( CHANNEL, STATUS )
- CLOSE( 2 )
-\end{verbatim}
-\normalsize
-
-Note that we can specify a source and/or a sink routine for the
-\htmlref{Channel}{Channel}, and that these may use either the same file, or different
-files according to whether we are reading or writing. AST has no
-knowledge of the underlying file system, nor of file positioning. It
-just reads and writes sequentially. If you wish, for example, to
-reposition a file at the beginning in between reads and writes, then
-this can be done directly (and completely independently of AST) using
-standard Fortran statements.
-
-If an error occurs in your source or sink routine, you can communicate
-this to the AST library by setting the STATUS argument to any error
-value. This will immediately terminate the read or write operation.
-
-\subsection{\label{ss:otherplaces}Reading and Writing Objects to other Places}
-
-It should be obvious from the above (\secref{ss:channelsource} and
-\secref{ss:channelsink}) that a \htmlref{Channel}{Channel}'s source and sink routines
-provide a flexible means of intercepting textual data that describes
-AST Objects as it flows in and out of your program. In fact, you might
-like to regard a Channel simply as a filter for converting AST Objects
-to and from a stream of text which is then handled by your source and
-sink routines, where the real I/O occurs.
-
-This gives you the ability to store AST Objects in virtually any data
-system, so long as you can convert a stream of text into something
-that can be stored (it need no longer be text) and retrieve it
-again. There is generally no need to retain comments. Other
-possibilities, such as inter-process and network communication, could
-also be implemented {\em{via}} source and sink functions in basically
-the same way.
-
-\cleardoublepage
-\section{\label{ss:nativefits}Storing AST Objects in FITS Headers (FitsChans)}
-
-\begin{latexonly}
-A FITS header is a sequence of 80-character strings, formatted
-according to particular rules defined by the Flexible Image Transport
-\htmlref{System}{System}
-(FITS). FITS\footnote{http://fits.gsfc.nasa.gov/}
-is a widely-used standard for data interchange in astronomy and has
-also been adopted as a data processing format in some astronomical
-data reduction systems. The individual 80-character strings in a FITS
-header are usually called {\em{cards}} or {\em{header cards}} (for
-entirely anachronistic reasons).
-\end{latexonly}
-\begin{htmlonly}
-A FITS header is a sequence of 80-character strings, formatted
-according to particular rules defined by the Flexible Image Transport
-System (FITS).
-\htmladdnormallink{FITS}{http://fits.gsfc.nasa.gov/}
-is a widely-used standard for data interchange in astronomy and has
-also been adopted as a data processing format in some astronomical
-data reduction systems. The individual 80-character strings in a FITS
-header are usually called {\em{cards}} or {\em{header cards}} (for
-entirely anachronistic reasons).
-\end{htmlonly}
-
-A sequence of FITS cards appears as a header at the start of every
-FITS data file, and sometimes also at other points within it, and is
-used to provide ancillary information which qualifies or describes the
-main array of data stored in the file. As such, FITS headers are prime
-territory for storing information about the coordinate systems
-associated with data held in FITS files.
-
-In this section, we will examine how to store information in FITS
-headers directly in the form of AST Objects---a process which is
-supported by a specialised class of \htmlref{Channel}{Channel} called a \htmlref{FitsChan}{FitsChan}. Our
-discussion here will turn out to be a transitional step that
-emphasises the similarities between a FitsChan and a Channel
-(\secref{ss:channels}). At the same time, it will prepare us for the
-next section (\secref{ss:foreignfits}), where we will examine how to
-use a FitsChan to tackle some of the more difficult problems that FITS
-headers can present.
-
-\subsection{\label{ss:nativeencoding}The Native FITS Encoding}
-
-As it turns out, we are not the first to have thought of storing WCS
-information in FITS headers. In fact, the original FITS standard (1981
-vintage) defined a set of header keywords for this purpose which have
-been widely used, although they have proved too limited for many
-practical purposes.
-
-At the time of writing, a number of different ways of using FITS
-headers for storing WCS information are in use, most (although not
-all) based on the original standard. We will refer to these
-alternative ways of storing the information as FITS {\em{encodings}}
-but will defer a discussion of their advantages and limitations until
-the next section (\secref{ss:foreignfits}).
-
-Here, we will examine how to store AST Objects directly in FITS
-headers. In effect, this defines a new encoding, which we will term
-the {\em{native encoding.}} This is a special kind of encoding,
-because not only does it allow us to associate conventional
-WCS calibration information with FITS data, but it also allows any other
-information that can be expressed in terms of AST Objects to be stored
-as well. In fact, the native encoding provides us with facilities
-roughly analogous to those of the \htmlref{Channel}{Channel}
-(\secref{ss:channels})---{\em{i.e.}}\ a lossless way of
-transferring AST Objects from program to program---but based on FITS
-headers instead of free-format text.
-
-\subsection{The FitsChan Model}
-
-I/O between AST Objects and FITS headers is supported by a specialised
-form of \htmlref{Channel}{Channel} called a \htmlref{FitsChan}{FitsChan}. A FitsChan contains a buffer which
-may hold any number, including zero, of FITS header cards. This buffer
-forms a workspace in which you can assemble FITS cards and manipulate
-them before writing them out to a FITS file.
-
-By default, when a FitsChan is first created, it contains no cards and
-there are four ways of inserting cards into it:
-
-\begin{enumerate}
-\item You may add cards yourself, one at a time, using \htmlref{AST\_PUTFITS}{AST_PUTFITS}
-(\secref{ss:addingfitscards}).
-
-\item You may add cards yourself, supplying all cards concatenated into a
-single string, using \htmlref{AST\_PUTCARDS}{AST_PUTCARDS}.
-(\secref{ss:addingmulticards}).
-
-\item You may write an AST \htmlref{Object}{Object} to the FitsChan (using \htmlref{AST\_WRITE}{AST_WRITE}),
-which will have the effect of creating new cards within the FitsChan
-which describe the Object (\secref{ss:writingnativefits}).
-
-\item You may specify a source routine which reads data from some
-external store of FITS cards, just like the source associated with a
-basic Channel (\secref{ss:channelsource}). If you supply a source
-routine, it will be called when the FitsChan is created in order to
-fill it with an initial set of cards (\secref{ss:fitssourceandsink}).
-\end{enumerate}
-
-There are also three ways of removing cards from a FitsChan:
-
-\begin{enumerate}
-\item You may delete cards yourself, one at a time, using \htmlref{AST\_DELFITS}{AST_DELFITS}
-(\secref{ss:findingandchangingfits}).
-
-\item You may read an AST Object from the FitsChan (using \htmlref{AST\_READ}{AST_READ}),
-which will have the effect of removing those cards from the FitsChan
-which describe the Object (\secref{ss:readingnativefits}).
-
-\item You may specify a sink routine which writes data to some
-external store of FITS cards, just like the sink associated with a
-basic Channel (\secref{ss:channelsink}). If you supply a sink routine,
-it will be called when the FitsChan is deleted in order to write out
-any FITS cards that remain in it (\secref{ss:fitssourceandsink}).
-\end{enumerate}
-
-Note, in particular, that reading an AST Object from a FitsChan is
-{\em{destructive.}} That is, it deletes the FITS cards that describe the
-Object. The reason for this is explained in
-\secref{ss:destructiveread}.
-
-In addition to the above, you may also read individual cards from a
-FitsChan using the function \htmlref{AST\_FINDFITS}{AST_FINDFITS} (which is not
-destructive). This is the main means of writing out FITS cards if you
-have not supplied a sink routine. AST\_FINDFITS also provides a means
-of searching for particular FITS cards (by keyword, for example) and
-there are other facilities for overwriting cards when required
-(\secref{ss:findingandchangingfits}).
-
-\subsection{\label{ss:creatingafitschan}Creating a FitsChan}
-
-The \htmlref{FitsChan}{FitsChan} constructor function, \htmlref{AST\_FITSCHAN}{AST_FITSCHAN}, is straightforward
-to use:
-
-\small
-\begin{verbatim}
- INCLUDE 'AST_PAR'
- INTEGER FITSCHAN, STATUS
-
- STATUS = 0
-
- ...
-
- FITSCHAN = AST_FITSCHAN( AST_NULL, AST_NULL, 'Encoding=NATIVE', STATUS )
-\end{verbatim}
-\normalsize
-
-Here, we have omitted any source or sink functions by supplying the
-AST\_NULL routine for the first two arguments (remember to include the
-AST\_PAR include file which contains the required EXTERNAL statement
-for this routine).
-We have also initialised the FitsChan's \htmlref{Encoding}{Encoding} attribute to
-NATIVE. This indicates that we will be using the native encoding
-(\secref{ss:nativeencoding}) to store and retrieve Objects. If this
-was left unspecified, the default would depend on the FitsChan's
-contents. An attempt is made to use whatever encoding appears to have
-been used previously. For an empty FitsChan, the default is NATIVE,
-but it does no harm to be sure.
-
-\subsection{\label{ss:addressingfitscards}Addressing Cards in a FitsChan}
-
-Because a \htmlref{FitsChan}{FitsChan} contains an ordered sequence of header cards, a
-mechanism is needed for addressing them. This allows you to specify
-where new cards are to be added, for example, or which card is to be
-deleted.
-
-This role is filled by the FitsChan's integer \htmlref{Card}{Card} attribute, which
-gives the index of the {\em{current card}} in the FitsChan. You can
-nominate any card you like to be current, simply by setting a new
-value for the Card attribute, for example:
-
-\small
-\begin{verbatim}
- INTEGER ICARD
-
- ...
-
- CALL AST_SETI( FITSCHAN, 'Card', ICARD, STATUS )
-\end{verbatim}
-\normalsize
-
-where ICARD contains the index of the card on which you wish to
-operate next. Some functions will update the Card attribute as a
-means of advancing through the sequence of cards, when reading them
-for example, or to indicate which card matches a search criterion.
-
-The default value for Card is one, which is the index of the first
-card. This means that you can ``rewind'' a FitsChan to access its
-first card by clearing the Card attribute:
-
-\small
-\begin{verbatim}
- CALL AST_CLEAR( FITSCHAN, 'Card', STATUS )
-\end{verbatim}
-\normalsize
-
-The total number of cards in a FitsChan is given by the integer \htmlref{Ncard}{Ncard}
-attribute. This is a read-only attribute whose value is automatically
-updated as you add or remove cards. It means you can address all the
-cards in sequence using a loop such as the following:
-
-\small
-\begin{verbatim}
- DO 1 ICARD = 1, AST_GETI( FITSCHAN, 'Ncard', STATUS )
- CALL AST_SETI( FITSCHAN, 'Card', ICARD, STATUS )
- <access the current card>
- 1 CONTINUE
-\end{verbatim}
-\normalsize
-
-However, it is usually possible to write slightly tidier loops based
-on the \htmlref{AST\_FINDFITS}{AST_FINDFITS} function described later
-(\secref{ss:extractingfitscards} and
-\secref{ss:findingandchangingfits}).
-
-If you set the Card attribute to a value larger than Ncard, the
-FitsChan is regarded as being positioned at its {\em{end-of-file.}} In
-this case there is no current card and an attempt to obtain a value
-for the Card attribute will always return the value Ncard~$+$~1. When
-a FitsChan is empty, it is always at the end-of-file.
-
-\subsection{\label{ss:writingnativefits}Writing Native Objects to a FitsChan}
-
-Having created an empty \htmlref{FitsChan}{FitsChan} (\secref{ss:creatingafitschan}), you
-can write any AST \htmlref{Object}{Object} to it in the native encoding using the
-\htmlref{AST\_WRITE}{AST_WRITE} function. Let us assume we are writing a
-\htmlref{SkyFrame}{SkyFrame},\footnote{More probably, you would want to write a \htmlref{FrameSet}{FrameSet},
-but for purposes of illustration a SkyFrame contains a more manageable
-amount of data.} as follows:
-
-\small
-\begin{verbatim}
- INTEGER NOBJ, SKYFRAME
-
- ...
-
- NOBJ = AST_WRITE( FITSCHAN, SKYFRAME, STATUS )
-\end{verbatim}
-\normalsize
-
-Since we have selected the native encoding
-(\secref{ss:nativeencoding}), there are no restrictions on the class
-of Object we may write, so AST\_WRITE should always return a value of
-one, unless an error occurs. Unlike a basic \htmlref{Channel}{Channel}
-(\secref{ss:writingtoachannel}), this write operation will not produce
-any output from our program. The FITS headers produced are simply
-stored inside the FitsChan.
-
-After this write operation, the \htmlref{Ncard}{Ncard} attribute will be updated to
-reflect the number of new cards added to the FitsChan and the \htmlref{Card}{Card}
-attribute will point at the card immediately after the last one
-written. Since our FitsChan was initially empty, the Card attribute
-will, in this example, point at the end-of-file
-(\secref{ss:addressingfitscards}).
-
-The FITS standard imposes a limit of 68 characters on the length of
-strings which may be stored in a single header card. Sometimes, a
-description of an AST Object involves the use of strings which exceed
-this limit ({\em{e.g.}}\ a \htmlref{Frame}{Frame} title can be of arbitrary length). If
-this occurs, the long string will be split over two or more header cards.
-Each ``continuation'' card will have the keyword {\tt CONTINUE} in
-columns 1 to 8, and will contain a space in column 9 (instead of the
-usual equals sign). An ampersand (``{\tt \&}'') is appended to the end of
-each of the strings (except the last one) to indicate that the string is
-continued on the next card.
-
-
-Note, this splitting of long strings over several cards only occurs when
-writing AST Objects to a FitsChan using the AST\_WRITE routine and the
-{\em native} encoding. If a long string is stored in a FitsChan using
-(for instance) the \htmlref{AST\_PUTFITS}{AST_PUTFITS} or \htmlref{AST\_PUTCARDS}{AST_PUTCARDS} routine, it will simply be truncated.
-
-\subsection{\label{ss:extractingfitscards}Extracting Individual Cards from a FitsChan}
-
-To examine the contents of the \htmlref{FitsChan}{FitsChan} after writing the \htmlref{SkyFrame}{SkyFrame}
-above (\secref{ss:writingnativefits}), we must write a simple loop to
-extract each card in turn and print it out. We must also remember to
-rewind the FitsChan first, {\em{e.g.}}\ using \htmlref{AST\_CLEAR}{AST_CLEAR}. The
-following loop would do:
-
-\small
-\begin{verbatim}
- CHARACTER * ( 80 ) CARD
-
- ...
-
- CALL AST_CLEAR( FITSCHAN, 'Card', STATUS )
-
- 2 CONTINUE
- IF ( AST_FINDFITS( FITSCHAN, '%f', CARD, .TRUE., STATUS ) ) THEN
- WRITE ( *, '(A)' ) CARD
- GO TO 2
- END IF
-\end{verbatim}
-\normalsize
-
-Here, we have used the \htmlref{AST\_FINDFITS}{AST_FINDFITS} function to find a FITS card by
-keyword. It is given a keyword template of ``\%f'', which matches any
-FITS keyword, so it always finds the current card, which it
-returns. Its fourth argument is set to .TRUE., to indicate that the
-\htmlref{Card}{Card} attribute should be incremented afterwards so that the following
-card will be found the next time around the loop. AST\_FINDFITS
-returns .FALSE.\ when it reaches the end-of-file and this terminates
-the loop.
-
-If we were storing the FITS headers in an output FITS file instead of
-printing them out, we might use a loop like this but replace the WRITE
-statement with a call to a suitable data access routine to store the
-header card. This would only be necessary if we had not provided a
-sink routine for the FitsChan (\secref{ss:fitssourceandsink}).
-
-\subsection{The Native FitsChan Output Format}
-
-If we print out the FITS header cards describing the \htmlref{SkyFrame}{SkyFrame} we wrote
-earlier (\secref{ss:writingnativefits}), we should obtain something
-like the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
-COMMENT AST ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ AST
-COMMENT AST Beginning of AST data for SkyFrame object AST
-COMMENT AST ................................................................ AST
-BEGAST_A= 'SkyFrame' / Description of celestial coordinate system
-NAXES_A = 2 / Number of coordinate axes
-AX1_A = ' ' / Axis number 1
-BEGAST_B= 'SkyAxis ' / Celestial coordinate axis
-ENDAST_A= 'SkyAxis ' / End of object definition
-AX2_A = ' ' / Axis number 2
-BEGAST_C= 'SkyAxis ' / Celestial coordinate axis
-ENDAST_B= 'SkyAxis ' / End of object definition
-ISA_A = 'Frame ' / Coordinate system description
-SYSTEM_A= 'FK4-NO-E' / Celestial coordinate system type
-EPOCH_A = 1958.0 / Besselian epoch of observation
-ENDAST_C= 'SkyFrame' / End of object definition
-COMMENT AST ................................................................ AST
-COMMENT AST End of AST data for SkyFrame object AST
-COMMENT AST ---------------------------------------------------------------- AST
-\end{verbatim}
-\normalsize
-\end{quote}
-
-As you can see, this resembles the information that would be written
-to a basic \htmlref{Channel}{Channel} to describe the same SkyFrame
-(\secref{ss:textualoutputformat}), except that it has been formatted
-into 80-character header cards according to FITS conventions.
-
-There are also a number of other differences worth noting:
-
-\begin{enumerate}
-\item There is no unnecessary information about default values
-provided for the benefit of the human reader. This is because the \htmlref{Full}{Full}
-attribute for a \htmlref{FitsChan}{FitsChan} defaults to $-$1, thus suppressing this
-information ({\em{c.f.}}~\secref{ss:controllingchanneloutput}). You
-can restore the information if you wish by setting Full to 0 or $+$1,
-in which case additional COMMENT cards will be generated to hold it.
-
-\item The information is not indented, because FITS does not allow
-this. However, if you change the Full attribute to 0 or $+$1, comments
-will be included that are intended to help break up the sequence of
-headers and highlight its structure. This will probably only be of use
-if you are attempting to track down a problem by examining the FITS
-cards produced in detail.
-
-\item The FITS keywords which appear to the left of the ``$=$'' signs
-have additional characters (``\_A'', ``\_B'', {\em{etc.}}) appended to
-them. This is done in order to make each keyword unique.
-\end{enumerate}
-
-This last point is worth further comment and is necessary because the
-FITS standard only allows for certain keywords (such as COMMENT and
-HISTORY) to appear more than once. \htmlref{AST\_WRITE}{AST_WRITE} therefore appends an
-arbitrary sequence of two characters to each new keyword it generates
-in order to ensure that it does not duplicate any already present in
-the FitsChan.
-
-The main risk from not following this convention is that some software
-might ignore (say) all but the last occurrence of a keyword before
-passing the FITS headers on. Such an event is unlikely, but would
-obviously destroy the information present, so AST\_WRITE enforces the
-uniqueness of the keywords it uses. The extra characters added are
-ignored when the information is read back.
-
-As with a basic Channel, you can also suppress the comments produced
-in a FitsChan by setting the boolean (integer) \htmlref{Comment}{Comment} attribute to
-zero (\secref{ss:channelcommenting}). However, FITS headers are
-traditionally generously commented, so this is not recommended.
-
-\subsection{\label{ss:addingfitscards}Adding Individual Cards to a FitsChan}
-
-To insert individual cards into a \htmlref{FitsChan}{FitsChan}, prior to reading them back
-as Objects for example, you should use the \htmlref{AST\_PUTFITS}{AST_PUTFITS} routine. You
-can insert a card in front of the current one as follows:
-
-\small
-\begin{verbatim}
- CALL AST_PUTFITS( FITSCHAN, CARD, .FALSE., STATUS )
-\end{verbatim}
-\normalsize
-
-where the third argument of .FALSE.\ indicates that the current card
-should not be overwritten. Note that facilities are not provided by
-AST for formatting the card contents.
-
-After inserting a card, the FitsChan's \htmlref{Card}{Card} attribute points at the
-original Card, or at the end-of-file if the FitsChan was originally
-empty. Entering a sequence of cards is therefore straightforward. If
-CARDS is an array of character strings containing FITS header cards
-and NCARDS is the number of cards, then a loop such as the following
-will insert the cards in sequence into a FitsChan:
-
-\small
-\begin{verbatim}
- INTEGER NCARD
- CHARACTER * ( 80 ) CARDS( NCARD )
-
- ...
-
- DO 3 ICARD = 1, NCARD
- CALL AST_PUTFITS( FITSCHAN, CARDS( ICARD ), .FALSE., STATUS )
- 3 CONTINUE
-\end{verbatim}
-\normalsize
-
-
-Note that AST\_PUTFITS enforces the validity of a FitsChan by
-rejecting any cards which do not adhere to the FITS standard. If any
-such cards are detected, an error will result.
-
-\subsection{\label{ss:addingmulticards}Adding Concatenated Cards to a FitsChan}
-
-If you have all your cards concatenated together into a single long string,
-each occupying 80 characters (with no delimiters), you can insert them
-into a \htmlref{FitsChan}{FitsChan} in a single call using
-\htmlref{AST\_PUTCARDS}{AST_PUTCARDS}.
-This call first empties the supplied FitsChan of any existing cards, then
-inserts the new cards, and finally rewinds the FitsChan so that a
-subsequent call to
-\htmlref{AST\_READ}{AST_READ}
-will start reading from the first supplied card. The
-AST\_PUTCARDS routine uses \htmlref{AST\_PUTFITS}{AST_PUTFITS}
-internally to interpret and store each individual card, and so the
-caveats in \secref{ss:addingfitscards} should be read.
-
-
-\subsection{\label{ss:readingnativefits}Reading Native Objects From a FitsChan}
-
-Once you have stored a FITS header description of an \htmlref{Object}{Object} in a
-\htmlref{FitsChan}{FitsChan} using the native encoding (\secref{ss:writingnativefits}),
-you can read it back using \htmlref{AST\_READ}{AST_READ} in much the same way as with a
-basic \htmlref{Channel}{Channel} (\secref{ss:readingfromachannel}). Similar comments
-about validating the Object you read also apply
-(\secref{ss:validatinginput}). If you have just written to the
-FitsChan, you must remember to rewind it first:
-
-\small
-\begin{verbatim}
- INTEGER OBJECT
-
- ...
-
- CALL AST_CLEAR( FITSCHAN, 'Card', STATUS )
- OBJECT = AST_READ( FITSCHAN, STATUS )
-\end{verbatim}
-\normalsize
-
-An important feature of a FitsChan is that read operations are
-destructive. This means that if an Object description is found, it
-will be consumed by AST\_READ which will remove all the cards
-involved, including associated COMMENT cards, from the FitsChan. Thus,
-if you write an Object to a FitsChan, rewind, and read the same Object
-back, you should end up with the original FitsChan contents. If you
-need to circumvent this behaviour for any reason, it is a simple
-matter to make a copy of a FitsChan using \htmlref{AST\_COPY}{AST_COPY}
-(\secref{ss:copyingobjects}). If you then read from the copy, the
-original FitsChan will remain untouched.
-
-After a read completes, the FitsChan's \htmlref{Card}{Card} attribute identifies the
-card immediately following the last card read, or the end-of-file of
-there are no more cards.
-
-
-Since the {\em native} encoding is being used, any long strings involved
-in the object description will have been split into two or more adjacent
-contuation cards when the Object was stored in the header using routine
-\htmlref{AST\_WRITE}{AST_WRITE}. The AST\_READ routine reverses this process by concatenating
-any such adjacent continuation cards to re-create the original long
-string.
-
-\subsection{Saving and Restoring Multiple Objects in a FitsChan}
-
-When using the native FITS encoding, multiple Objects may be stored
-and all I/O operations are sequential. This means that you can simply
-write a sequence of Objects to a \htmlref{FitsChan}{FitsChan}. After each write operation,
-the \htmlref{Card}{Card} attribute will be updated so that the next write appends the
-next \htmlref{Object}{Object} description to the previous one.
-
-If you then rewind the FitsChan, you can read the Objects back in the
-original order. Reading them back will, of course, remove their
-descriptions from the FitsChan (\secref{ss:readingnativefits}) but the
-behaviour of the Card attribute is such that successive reads will
-simply return each Object in sequence.
-
-The only thing that may require care, given that a FitsChan can always
-be addressed randomly by setting its Card attribute, is to avoid
-writing one Object on top of another. For obvious reasons, the Object
-descriptions in a FitsChan must remain separate if they are to make
-sense when read back.
-
-\subsection{Mixing Native Objects with Other FITS Cards}
-
-Of course, any real FITS header will contain other information besides
-AST Objects, if only the mandatory FITS cards that must accompany all
-FITS data. When FITS headers are read in from a real dataset,
-therefore, any native AST \htmlref{Object}{Object} descriptions will be inter-mixed with
-many other cards.
-
-Because this is the normal state of affairs, the boolean (integer)
-\htmlref{Skip}{Skip} attribute for a \htmlref{FitsChan}{FitsChan} defaults to one. This means that when
-you read an Object From a FitsChan, any irrelevant cards will simply
-be skipped over until the start of the next Object description, if
-any, is found. If you start reading part way through an Object
-description, no error will result. The remainder of the description
-will simply be skipped.
-
-Setting Skip to zero will change this behaviour to resemble that of a
-basic \htmlref{Channel}{Channel} (\secref{ss:mixingchanneltext}), where extraneous data
-are not permitted by default, but this will probably rarely be useful.
-
-\subsection{\label{ss:findingandchangingfits}Finding and Changing Cards in a FitsChan}
-
-You can search for, and retrieve, particular cards in a \htmlref{FitsChan}{FitsChan} by
-keyword, using the function \htmlref{AST\_FINDFITS}{AST_FINDFITS}. This performs a search,
-starting at the current card, until it finds a card whose keyword
-matches the template you supply, or the end-of-file is reached.
-
-If a suitable card is found, AST\_FINDFITS returns the card's contents
-and then sets the FitsChan's \htmlref{Card}{Card} attribute either to identify the
-card found, or the one following it. The way you want the Card
-attribute to be set is indicated by the fourth (logical) argument to
-AST\_FINDFITS. A value of .TRUE.\ is returned to indicate success. If
-a suitable card cannot be found, AST\_FINDFITS returns a value of
-.FALSE.\ to indicate failure and sets the FitsChan's Card attribute to
-the end-of-file.
-
-Requesting that the Card attribute be set to indicate the card that
-AST\_FINDFITS finds is useful if you want to replace that card with a
-new one, as in this example:
-
-\small
-\begin{verbatim}
- CHARACTER * ( 80 ) NEWCARD
- LOGICAL JUNK
-
- ...
-
- JUNK = AST_FINDFITS( FITSCHAN, 'AIRMASS', CARD, .FALSE., STATUS )
- CALL AST_PUTFITS( FITSCHAN, NEWCARD, .TRUE., STATUS )
-\end{verbatim}
-\normalsize
-
-Here, AST\_FINDFITS is used to search for a card with the keyword
-AIRMASS. If the card is found, \htmlref{AST\_PUTFITS}{AST_PUTFITS} then overwrites it with a
-new card. Otherwise, the Card attribute ends up pointing at the
-end-of-file and the new card is simply appended to the end of the
-FitsChan.
-
-A similar approach can be used to delete selected cards from a
-FitsChan using \htmlref{AST\_DELFITS}{AST_DELFITS}, which deletes the current card:
-
-\small
-\begin{verbatim}
- IF ( AST_FINDFITS( FITSCHAN, 'BSCALE', CARD, .FALSE., STATUS ) ) THEN
- CALL AST_DELFITS( FITSCHAN, STATUS )
- END IF
-\end{verbatim}
-\normalsize
-
-This deletes the first card, if any, with the BSCALE keyword.
-
-Requesting that AST\_FINDFITS increments the Card attribute to
-identify the card following the one found is more useful when writing
-loops. For example, the following loop extracts each card whose
-keyword matches the template ``CD\%6d'' (that is, ``CD'' followed by
-six decimal digits):
-
-\small
-\begin{verbatim}
- 4 CONTINUE
- IF ( AST_FINDFITS( FITSCHAN, 'CD%6d', CARD, .TRUE., STATUS ) ) THEN
- <process the card's contents>
- GO TO 4
- END IF
-\end{verbatim}
-\normalsize
-
-For further details of keyword templates, see the description of
-AST\_FINDFITS in \appref{ss:functiondescriptions}.
-
-\subsection{\label{ss:fitssourceandsink}Source and Sink Routines for FitsChans}
-
-The use of source and sink routines with a \htmlref{FitsChan}{FitsChan} is optional. This
-is because you can always arrange to explicitly fill a FitsChan with
-FITS cards (\secref{ss:addingfitscards} and \secref{ss:addingmulticards})
-and you can also extract any
-cards that remain and write them out yourself
-(\secref{ss:extractingfitscards}) before you delete the FitsChan.
-
-If you choose to use these routines, however, they behave in a very
-similar manner to those used by a \htmlref{Channel}{Channel} (\secref{ss:channelsource}
-and \secref{ss:channelsink}). You supply these routines, as arguments
-to the constructor function \htmlref{AST\_FITSCHAN}{AST_FITSCHAN} when you create the FitsChan
-(\secref{ss:creatingafitschan}). The source routine is invoked
-implicitly at this point to fill the FitsChan with FITS cards and the
-FitsChan is then rewound, so that the first card becomes current. The
-sink routine is automatically invoked later, when the FitsChan is
-deleted, in order to write out any cards that remain in it.
-
-
-The only real difference between the source and sink routines for a
-FitsChan and a basic Channel is that FITS cards are limited in length
-to 80~characters, so the choice of buffer size is simplified. This
-affects the way the card contents are passed, so the routines
-themselves are slightly different. The following is therefore the
-FitsChan equivalent of the Channel SOURCE routine given in
-\secref{ss:channelsource}:
-
-\small
-\begin{verbatim}
- INTEGER FUNCTION FITSSOURCE( CARD, STATUS )
- CHARACTER * ( 80 ) CARD
- INTEGER STATUS
-
- READ( 1, '(A)', END = 99 ) CARD
- FITSSOURCE = 1
- RETURN
-
- 99 FITSSOURCE = 0
- END
-\end{verbatim}
-\normalsize
-
-Here, the FITS card contents are returned {\em{via}} the CARD argument
-(the \htmlref{AST\_PUTLINE}{AST_PUTLINE} routine should not be used) and the function returns
-1 to indicate that a card has been read. A value of zero is returned
-if there are no more cards to read.
-
-The sink routine for a FitsChan is also a little different
-({\em{c.f.}}\ the SINK routine in~\secref{ss:channelsink}), as
-follows:
-
-\small
-\begin{verbatim}
- SUBROUTINE FITSSINK( CARD, STATUS )
- CHARACTER * ( 80 ) CARD
- INTEGER STATUS
-
- WRITE( 2, '(A)' ) CARD
-
- END
-\end{verbatim}
-\normalsize
-
-The contents of the FITS card being written are passed {\em{via}}\ the
-CARD argument (the \htmlref{AST\_GETLINE}{AST_GETLINE} routine should not be used).
-
-Of course, both of these examples assume that you are accessing text
-files. If this is not the case, then appropriate changes to the I/O
-statements would be needed. The details obviously depend on the
-format of the file you are handling, which need not necessarily be a
-true FITS file.
-
-\cleardoublepage
-\section{\label{ss:foreignfits}Using Foreign FITS Encodings}
-
-We saw in the previous section (\secref{ss:nativefits}) how to store
-and retrieve any kind of AST \htmlref{Object}{Object} in a FITS header by using a
-\htmlref{FitsChan}{FitsChan}. To achieve this, we set the FitsChan's \htmlref{Encoding}{Encoding} attribute to
-NATIVE. However, the Objects we wrote could then only be read back by
-other programs that use AST.
-
-In practice, we will also encounter FITS headers containing WCS
-information written by other software systems. We will probably also
-need to write FITS headers in a format that can be understood by these
-systems. Indeed, this interchange of data is one of the main reasons
-for the existence of FITS, so in this section we will examine how to
-accommodate these requirements.
-
-\subsection{\label{ss:foreignencodings}The Foreign FITS Encodings}
-
-As mentioned previously (\secref{ss:nativeencoding}), there are a
-number of conventions currently in use for storing WCS information in
-FITS headers, which we call {\em{encodings.}} Here, we are concerned
-with those encodings defined by software systems other than AST, which
-we term {\em{foreign encodings.}}
-
-Currently, AST supports six foreign encodings, which may be selected
-by setting the \htmlref{Encoding}{Encoding} attribute of a \htmlref{FitsChan}{FitsChan} to one of the
-following (character string) values:
-
-\begin{quote}
-\begin{description}
-\item[DSS]\mbox{}\\
-This encoding stores WCS information using the convention developed at
-the Space Telescope Science Institute for the Digitised Sky Survey
-(DSS) astrometric plate calibrations. DSS images which use this
-convention are widely available and it is understood by a number of
-important and well-established astronomy applications.
-
-However, the calibration model used (based on a polynomial fit) is not
-easily applicable to other types of data and creating the polynomial
-coefficients needed to calibrate your own images can prove
-difficult. For this reason, the DSS encoding is probably best viewed
-as a ``read-only'' format. It is possible, however, to read in WCS
-information using this encoding and then to write it back out again,
-so long as only minor changes have been made.
-
-\item[FITS-WCS]\mbox{}\\
-This encoding is very important because it is based on a new FITS standard
-which should, for the first time, address the problem of celestial coordinate
-systems in a proper manner, by considerably extending the original FITS
-standard.
-
-The conventions used are described in a series of papers by
-E.W.\,Greisen, M.\,Calabretta, \emph{et. al.}, often referred to as the
-``FITS-WCS papers''. They are described at
-\htmladdnormallink{http://fits.gsfc.nasa.gov/fits\_wcs.html}
-{http://fits.gsfc.nasa.gov/fits_wcs.html}. Now that the first two papers
-in this series have been agreed, this encoding should be understood by any
-FITS-WCS compliant software and it is likely to be adopted widely for FITS
-data in future. For details of the coverage of these conventions provided
-by the FitsChan class, see \appref{ss:fitswcscoverage}.
-
-\item[FITS-IRAF]\mbox{}\\
-This encoding is based on the conventions described in the document
-``World Coordinate Systems Representations Within the FITS Format'' by R.J.
-Hanisch and D.G. Wells, 1988.\footnote{Available by ftp from
-fits.cv.nrao.edu /fits/documents/wcs/wcs88.ps.Z} It is employed
-by the IRAF data analysis facility, so its use will facilitate data
-exchange with IRAF. This encoding is in effect a sub-set of the current
-FITS-WCS encoding.
-
-\item[FITS-PC]\mbox{}\\
-This encoding is based on a previous version of the proposed new FITS WCS
-standard which used {\tt PCjjjjiii} and {\tt CDELTj} keywords to describe
-axis rotation and scaling. Versions of AST prior to V1.5 used this scheme
-for the FITS-WCS encoding. As of V1.5, FITS-WCS uses {\tt CDi\_j}
-keywords instead.\footnote{There are many other differences between the
-previous and the current FITS-WCS encodings. The keywords to describe
-axis rotation and scaling is used purely as a label to identify the
-scheme.} The FITS-PC encoding is included in AST V1.5 only to allow
-FITS-WCS data created with previous versions to be read. It should not,
-in general, be used to create new data sets.
-
-\item[FITS-AIPS]\mbox{}\\
-This encoding is based on the conventions described in the document
-``Non-linear Coordinate Systems in AIPS'' by Eric W. Greisen (revised 9th
-September, 1994).\footnote{Available by ftp from fits.cv.nrao.edu
-/fits/documents/wcs/aips27.ps.Z} It is currently employed by the AIPS
-data analysis facility, so its use will facilitate data exchange with
-AIPS. This encoding uses {\tt CROTAi} and {\tt CDELTi} keywords to
-describe axis rotation and scaling.
-
-\item[FITS-AIPS++]\mbox{}\\
-Encodes coordinate system information in FITS
-header cards using the conventions used by the AIPS++ project.
-This is an extension of FITS-AIPS which includes some of the
-features of FITS-PC and FITS-IRAF.
-\end{description}
-\end{quote}
-
-For more detail about the above encodings, see the description of the
-Encoding attribute in \appref{ss:attributedescriptions}.
-
-\subsection{\label{ss:foreignfitslimitations}Limitations of Foreign Encodings}
-
-The foreign encodings available for storing WCS information in FITS
-headers have a number of limitations when compared with the native
-encoding of AST Objects (\secref{ss:nativefits}). The main ones are:
-
-\begin{enumerate}
-\item Only one class of AST \htmlref{Object}{Object}, the \htmlref{FrameSet}{FrameSet}, may be represented
-using a foreign FITS encoding. This should not come as a surprise,
-because the purpose of storing WCS information in FITS headers is to
-attach coordinate systems to an associated array of data. Since the
-FrameSet is the AST Object designed for the same purpose
-(\secref{ss:baseandcurrent}), there is a natural correspondence.
-
-The way in which a FrameSet is translated to and from the foreign
-encoding also follows from this correspondence. The FrameSet's base
-\htmlref{Frame}{Frame} identifies the data grid coordinates of the associated FITS
-data. These are the same as FITS pixel coordinates, in which the first
-pixel (in 2 dimensions) has coordinates (1,1) at its
-centre. Similarly, the current Frame of the FrameSet identifies the
-FITS world coordinate system associated with the data.
-
-\item You may store a representation of only a single FrameSet in any
-individual set of FITS header cards ({\em{i.e.}}\ in a single
-\htmlref{FitsChan}{FitsChan}) at one time. If you attempt to store more than one, you may
-over-write the previous one or generate an invalid representation of
-your WCS information.
-
-This is mainly a consequence of the use of fixed FITS keywords by
-foreign encodings and the fact that you cannot, in general, have
-multiple FITS cards with the same keyword.
-
-\item In general, it will not be possible to store every possible
-FrameSet that you might construct. Depending on the encoding, only
-certain FrameSets that conform to particular restrictions can be
-represented and, even then, some of their information may be lost. See
-the description of the \htmlref{Encoding}{Encoding} attribute in
-\appref{ss:attributedescriptions} for more details of these
-limitations.
-\end{enumerate}
-
-It should be understood that using foreign encodings to read and write
-information held in AST Objects is essentially a process of converting
-the data format. As such, it potentially suffers from the same
-problems faced by all such processes, {\em{i.e.}}\ differences between
-the AST data model and that of the foreign encoding may cause some
-information to be lost. Because the AST model is extremely flexible,
-however, any data loss can largely be eliminated when reading.
-Instead, this effect manifests itself in the form of the above
-encoding-dependent restrictions on the kind of AST Objects which may
-be written.
-
-One of the aims of the AST library, of course, is to insulate you from
-the details of these foreign encodings and the restrictions they
-impose. We will see shortly, therefore, how AST provides a mechanism
-for determining whether your WCS information satisfies the necessary
-conditions and allows you to make an automatic choice of which
-encoding to use.
-
-\subsection{\label{ss:identifyingfitsencoding}Identifying Foreign Encodings on Input}
-
-Let us now examine the practicalities of extracting WCS information
-from a set of FITS header cards which have been written by some other
-software system. We will pretend that our program does not know which
-encoding has been used for the WCS information and must discover this
-for itself. In order to have a concrete example, however, we will use
-the following set of cards. These use the FITS-AIPS encoding and
-contain a typical mix of other FITS cards which are irrelevant to the
-WCS information in which we are interested:
-
-\begin{quote}
-\small
-\begin{verbatim}
-SIMPLE = T / Written by IDL: 30-Jul-1997 05:35:42.00
-BITPIX = -32 / Bits per pixel.
-NAXIS = 2 / Number of dimensions
-NAXIS1 = 300 / Length of x axis.
-NAXIS2 = 300 / Length of y axis.
-CTYPE1 = 'GLON-ZEA' / X-axis type
-CTYPE2 = 'GLAT-ZEA' / Y-axis type
-CRVAL1 = -149.56866 / Reference pixel value
-CRVAL2 = -19.758201 / Reference pixel value
-CRPIX1 = 150.500 / Reference pixel
-CRPIX2 = 150.500 / Reference pixel
-CDELT1 = -1.20000 / Degrees/pixel
-CDELT2 = 1.20000 / Degrees/pixel
-CROTA1 = 0.00000 / Rotation in degrees.
-SURVEY = 'COBE DIRBE'
-BUNITS = 'MJy/sr ' /
-ORIGIN = 'CDAC ' / Cosmology Data Analysis Center
-TELESCOP= 'COBE ' / COsmic Background Explorer satellite
-INSTRUME= 'DIRBE ' / COBE instrument [DIRBE, DMR, FIRAS]
-PIXRESOL= 9 / Quad tree pixel resolution [6, 9]
-DATE = '27/09/94' / FITS file creation date (dd/mm/yy)
-DATE-MAP= '16/09/94' / Date of original file creation (dd/mm/yy)
-COMMENT COBE specific keywords
-DATE-BEG= '08/12/89' / date of initial data represented (dd/mm/yy)
-DATE-END= '25/09/90' / date of final data represented (dd/mm/yy)
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The first step is to create a \htmlref{FitsChan}{FitsChan} and insert these cards into
-it. If CARDS is an array of character strings holding the header cards
-and NCARDS is the number of cards, this could be done as follows:
-
-\small
-\begin{verbatim}
- INCLUDE 'AST_PAR'
- INTEGER FITSCHAN, ICARD, NCARD, STATUS
- CHARACTER * ( 80 ) CARDS( NCARD )
-
- STATUS = 0
-
- ...
-
- FITSCHAN = AST_FITSCHAN( AST_NULL, AST_NULL, ' ', STATUS )
- DO 1 ICARD = 1, NCARD
- CALL AST_PUTFITS( FITSCHAN, CARDS( ICARD ), .FALSE., STATUS )
- 1 CONTINUE
-\end{verbatim}
-\normalsize
-
-Note that we have not initialised the \htmlref{Encoding}{Encoding} attribute of the
-FitsChan as we did in \secref{ss:creatingafitschan} when we wanted to
-use the native encoding. This is because we are pretending not to know
-which encoding to use and want AST to determine this for us. By
-leaving the Encoding attribute un-set, its default value will adjust
-to whichever encoding AST considers to be most appropriate, according
-to the FITS header cards present. For details of how this choice is
-made, see the description of the Encoding attribute in
-\appref{ss:attributedescriptions}.
-
-This approach has the obvious advantages of making our program simpler
-and more flexible and of freeing us from having to know about the
-different encodings available. As a bonus, it also means that the
-program will be able to read any new encodings that AST may support in
-future, without needing to be changed.
-
-At this point, we could enquire the default value of the Encoding
-attribute, which indicates which encoding AST intends to use, as
-follows:
-
-\small
-\begin{verbatim}
- CHARACTER * ( 20 ) ENCODE
-
- ...
-
- ENCODE = AST_GETC( FITSCHAN, 'Encoding', STATUS )
-\end{verbatim}
-\normalsize
-
-The result of this enquiry would be the string ``FITS-AIPS''. Note
-that we could also have set the FitsChan's Encoding attribute
-explicitly, such as when creating it:
-
-\small
-\begin{verbatim}
- FITSCHAN = AST_FITSCHAN( AST_NULL, AST_NULL, 'Encoding=FITS-AIPS', STATUS )
-\end{verbatim}
-\normalsize
-
-If we tried to read information using this encoding
-(\secref{ss:readingforeignfits}), but failed, we could then change the
-encoding and try again. This would allow our program to take control
-of how the optimum choice of encoding is arrived at. However, it would
-also involve using explicit knowledge of the encodings available and
-this is best avoided if possible.
-
-\subsection{\label{ss:readingforeignfits}Reading Foreign WCS Information from a FITS Header}
-
-Having stored a set of FITS header cards in a \htmlref{FitsChan}{FitsChan} and determined
-how the WCS information is encoded
-(\secref{ss:identifyingfitsencoding}), the next step is to read an AST
-\htmlref{Object}{Object} from the FitsChan using \htmlref{AST\_READ}{AST_READ}. We must also remember to
-rewind the FitsChan first, if necessary, such as by clearing its \htmlref{Card}{Card}
-attribute, which defaults to 1:
-
-\small
-\begin{verbatim}
- INTEGER WCSINFO
-
- ...
-
- CALL AST_CLEAR( FITSCHAN, 'Card', STATUS )
- WCSINFO = AST_READ( FITSCHAN, STATUS )
-\end{verbatim}
-\normalsize
-
-If the pointer returned by AST\_READ is not equal to AST\_\_NULL, then
-an Object has been read successfully. Otherwise, there was either no
-information to read or the choice of FITS encoding
-(\secref{ss:identifyingfitsencoding}) was inappropriate.
-
-At this point you might like to indulge in a little data validation
-along the lines described in \secref{ss:validatinginput}, for example:
-
-\small
-\begin{verbatim}
- IF ( AST_GETC( WCSINFO, 'Class', STATUS ) .EQ. 'FrameSet' ) THEN
- <the Object is a FrameSet, so use it>
- ELSE
- <something unexpected was read>
- END IF
-\end{verbatim}
-\normalsize
-
-If a foreign encoding has definitely been used, then the Object will
-automatically be a \htmlref{FrameSet}{FrameSet} (\secref{ss:foreignfitslimitations}), so
-this stage can be omitted. However, if the native encoding
-(\secref{ss:nativeencoding}) might have been employed, which is a
-possibility if you accept the FitsChan's default \htmlref{Encoding}{Encoding} value, then
-any class of Object might have been read and a quick check would be
-worthwhile.
-
-If you used \htmlref{AST\_SHOW}{AST_SHOW} (\secref{ss:displayingobjects}) to examine the
-FrameSet which results from reading our example FITS header
-(\secref{ss:identifyingfitsencoding}), you would find that its base
-\htmlref{Frame}{Frame} describes the image's pixel coordinate system and that its
-current Frame is a \htmlref{SkyFrame}{SkyFrame} representing galactic coordinates. These
-two Frames are inter-related by a \htmlref{Mapping}{Mapping} (actually a \htmlref{CmpMap}{CmpMap}) which
-incorporates the effects of various rotations, scalings and a
-``zenithal equal area'' sky projection, so that each pixel of the FITS
-image is mapped on to a corresponding sky position in galactic
-coordinates.
-
-Because this FrameSet may be used both as a Mapping
-(\secref{ss:framesetasmapping}) and as a Frame
-(\secref{ss:framesetasframe}), it may be employed directly to perform
-many useful operations without any need to decompose it into its
-component parts. These include:
-
-\begin{itemize}
-\item Transforming data grid (FITS pixel) coordinates into galactic
-coordinates and {\em{vice versa}} (\secref{ss:framesetasmapping}).
-
-\item Formatting coordinate values (either pixel or galactic
-coordinates) ready for display to a user
-(\secref{ss:formattingaxisvalues} and \secref{ss:normalising}).
-
-\item Enquiring about axis labels (or other axis
-information---\secref{ss:frameattributes}) which might be used, for
-example, to label columns of coordinates in a table
-(\secref{ss:frameaxisattributes}).
-
-\item Aligning the image with another image from which a similar
-FrameSet has been obtained (\secref{ss:registeringimages}).
-
-\item Creating a \htmlref{Plot}{Plot} (\secref{ss:plots}), which can be used to overlay
-a variety of graphical information (including a coordinate
-grid---Figure~\ref{fig:gridplot}) on the displayed image.
-
-\item Generating a new FrameSet which reflects any geometrical
-processing you perform on the associated image data
-(\secref{ss:wcsprocessingexample}). This new FrameSet could then be
-written out as FITS headers to describe the modified image
-(\secref{ss:writingforeignfits}).
-\end{itemize}
-
-If the FrameSet contains other Frames (apart from the base and current
-Frames), then you would also have access to information about other
-coordinate systems associated with the image.
-
-\subsection{\label{ss:destructiveread}Removing WCS Information from FITS Headers---the Destructive Read}
-
-It is instructive at this point to examine the contents of a \htmlref{FitsChan}{FitsChan}
-after we have read a \htmlref{FrameSet}{FrameSet} from it
-(\secref{ss:readingforeignfits}). The following would rewind our
-FitsChan and display its contents:
-
-\small
-\begin{verbatim}
- CHARACTER CARD * ( 80 )
-
- ...
-
- CALL AST_CLEAR( FITSCHAN, 'Card', STATUS )
- 2 CONTINUE
- IF ( AST_FINDFITS( FITSCHAN, '%f', CARD, .TRUE., STATUS ) ) THEN
- WRITE ( *, '(A)' ) CARD
- GO TO 2
- END IF
-\end{verbatim}
-\normalsize
-
-The output, if we started with the example FITS header in
-\secref{ss:identifyingfitsencoding}, might look like this:
-
-\begin{quote}
-\small
-\begin{verbatim}
-SIMPLE = T / Written by IDL: 30-Jul-1997 05:35:42.00
-BITPIX = -32 / Bits per pixel.
-NAXIS = 2 / Number of dimensions
-NAXIS1 = 300 / Length of x axis.
-NAXIS2 = 300 / Length of y axis.
-SURVEY = 'COBE DIRBE'
-BUNITS = 'MJy/sr '
-ORIGIN = 'CDAC ' / Cosmology Data Analysis Center
-TELESCOP= 'COBE ' / COsmic Background Explorer satellite
-INSTRUME= 'DIRBE ' / COBE instrument [DIRBE, DMR, FIRAS]
-PIXRESOL= 9 / Quad tree pixel resolution [6, 9]
-DATE = '27/09/94' / FITS file creation date (dd/mm/yy)
-DATE-MAP= '16/09/94' / Date of original file creation (dd/mm/yy)
-COMMENT COBE specific keywords
-DATE-BEG= '08/12/89' / date of initial data represented (dd/mm/yy)
-DATE-END= '25/09/90' / date of final data represented (dd/mm/yy)
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Comparing this with the original, you can see that all the FITS cards
-that represent WCS information have been removed. They have
-effectively been ``sucked out'' of the FitsChan by the destructive
-read that \htmlref{AST\_READ}{AST_READ} performs and converted into an equivalent
-FrameSet. AST remembers where they were stored, however, so that if we
-later write WCS information back into the FitsChan
-(\secref{ss:writingforeignfits}) they will, as far as possible, go
-back into their original locations. This helps to preserve the
-overall layout of the FITS header.
-
-You can now see why AST\_READ performs destructive reads. It is a
-mechanism for removing WCS information from a FITS header while
-insulating you, as a programmer, from the details of the encoding
-being used. It means you can ensure that all relevant header cards
-have been removed, giving you a clean slate, without having to know
-which FITS keywords any particular encoding uses.
-
-Clearing this WCS information out of a FITS header is particularly
-important when considering how to write new WCS information back after
-processing (\secref{ss:writingforeignfits}). If any relevant FITS
-cards are left over from the input dataset and find their way into the
-new processed header, they could interfere with the new information
-being written.\footnote{This can happen if a particular keyword is
-present in the input header but is not used in the output header
-(whether particular keywords are used can depend on the WCS
-information being stored). In such a case, the original value would
-not be over-written by a new output value, so would remain erroneously
-present.} The destructive read mechanism ensures that this doesn't
-happen.
-
-\subsection{\label{ss:propagatingwcsinformation}Propagating WCS Information through Data Processing Steps}
-
-One of the purposes of AST is to make it feasible to propagate WCS
-information through successive stages of data processing, so that it
-remains consistent with the associated image data. As far as possible,
-this should happen regardless of the FITS encoding used to store the
-original WCS information.
-
-If the data processing being performed does not change the
-relationship between image pixel and world coordinates (whatever these
-may be), then propagation of the WCS information is
-straightforward. You can simply copy the FITS header from input to
-output.
-
-If this relationship changes, however, then the WCS information must
-be processed alongside the image data and a new FITS header generated
-to represent it. In this case, the sequence of operations within your
-program would probably be as follows:
-
-\begin{enumerate}
-\item Read the image data and associated FITS header from the input
-dataset, putting the header cards into a \htmlref{FitsChan}{FitsChan}
-(\secref{ss:identifyingfitsencoding}).
-
-\item Read an AST \htmlref{Object}{Object}, a \htmlref{FrameSet}{FrameSet}, from the FitsChan (typically
-using a foreign FITS encoding---\secref{ss:readingforeignfits}).
-
-\item Process the image data and modify the FrameSet accordingly
-({\em{e.g.}}~\secref{ss:wcsprocessingexample}).
-
-\item Write the FrameSet back into the FitsChan
-(\secref{ss:writingforeignfits}).
-
-\item Perform any other modification of FITS header cards your program
-may require.
-
-\item Write the FitsChan contents ({\em{i.e.}}\ processed header
-cards) and image data to the output dataset.
-\end{enumerate}
-
-In stage (2), the original WCS information will be removed from the
-FitsChan by a destructive read. Later, in stage (4), new WCS
-information is written to replace it. This is the process which we
-consider next (\secref{ss:writingforeignfits}).
-
-\subsection{\label{ss:writingforeignfits}Writing Foreign WCS Information to a FITS Header}
-
-Before we can write processed WCS information held in a \htmlref{FrameSet}{FrameSet} back
-into a \htmlref{FitsChan}{FitsChan} in preparation for output, we must select the FITS
-encoding to use. Unfortunately, we cannot simply depend on the
-default value of the \htmlref{Encoding}{Encoding} attribute, as we did when reading the
-input information (\secref{ss:identifyingfitsencoding}), because the
-destructive action of reading the WCS data
-(\secref{ss:destructiveread}) will have altered the FitsChan's
-contents. This, in turn, will have changed the choice of default
-encoding, probably causing it to revert to NATIVE.
-
-We will return to the question of the optimum choice of encoding
-below. For now, let's assume we want to use the same encoding for
-output as we used for input. Since we enquired what that was before we
-read the input WCS data from the FitsChan
-(\secref{ss:identifyingfitsencoding}), we can now set that value
-explicitly. We can also set the FitsChan's \htmlref{Card}{Card} attribute back to 1 at
-the same time (because the write will fail if the FitsChan is not
-rewound). \htmlref{AST\_WRITE}{AST_WRITE} can then be used to write the output WCS
-information into the FitsChan:
-
-\small
-\begin{verbatim}
- INTEGER NOBJ
-
- ...
-
-
- CALL AST_SET( FITSCHAN, 'Card=1, Encoding=' // ENCODE, STATUS )
- NOBJ = AST_WRITE( FITSCHAN, WCSINFO, STATUS )
-\end{verbatim}
-\normalsize
-
-The value returned by AST\_WRITE (assigned to NOBJ) indicates how many
-Objects were written. This will either be 1 or zero. A value of zero
-is used to indicate that the information could not be encoded in the
-form you requested. If this happens, nothing will have been written.
-
-If your choice of encoding proves inadequate, the probable reason is
-that the changes you have made to the FrameSet have caused it to
-depart from the data model which the encoding assumes. AST knows
-about the data model used by each encoding and will attempt to
-simplify the FrameSet you provide so as to fit into that model, thus
-relieving you of the need to understand the details and limitations of
-each encoding yourself. When this attempt fails, however, you must
-consider what alternative encoding to use.
-
-Ideally, you would probably want to try a sequence of alternative
-encodings, using an approach such as the following:
-
-\small
-\begin{verbatim}
-* 1.
- CALL AST_SET( FITSCHAN, 'Card=1, Encoding=FITS-WCS', STATUS )
- IF ( AST_WRITE( FITSCHAN, WCSINFO, STATUS ) .EQ. 0 ) THEN
-
-* 2.
- CALL AST_SETC( FITSCHAN, 'Encoding', ENCODE, STATUS )
- IF ( AST_WRITE( FITSCHAN, WCSINFO, STATUS ) .EQ. 0 ) THEN
-
-* 3.
- CALL AST_SET( FITSCHAN, 'Encoding=NATIVE', STATUS )
- NOBJ = AST_WRITE( FITSCHAN, WCSINFO, STATUS )
- END IF
- END IF
-\end{verbatim}
-\normalsize
-
-That is:
-
-\begin{enumerate}
-\item Start by trying the FITS-WCS encoding, on the grounds that FITS
-should provide a universal interchange standard in which all WCS
-information should be expressed if possible.
-
-\item If that fails, then try the original encoding used for the input
-WCS information, on the grounds that you are at least not making the
-information any harder for others to read than it originally was.
-
-\item If that also fails, then you are probably trying to store fairly
-complex information for which you need the native encoding. Only other
-AST programs will then be able to read this information, but these are
-probably the only programs that will be able to do anything sensible
-with it anyway.
-\end{enumerate}
-
-An alternative approach might be to encode the WCS information in several
-ways, since this gives the maximum chance that other software will be
-able to read it. This approach is only possible if there is no
-significant conflict between the FITS keywords used by the different
-encodings\footnote{In practice, this means you should avoid mixing
-FITS-IRAF, FITS-WCS, FITS-AIPS, FITS-AIPS++ and FITS-PC encodings since they share
-many keywords.}. Adopting this approach would simply require multiple
-calls to AST\_WRITE, rewinding the FitsChan and changing its Encoding value
-before each one.
-
-Unfortunately, however, there is a drawback to duplicating WCS
-information in the FITS header in this way, because any program which
-modifies one version of this information and simply copies the
-remainder of the header will risk producing two inconsistent sets of
-information. This could obviously be confusing to subsequent
-software. Whether you consider this a worthwhile risk probably depends
-on the use to which you expect your data to be put.
-
-\cleardoublepage
-\section{\label{ss:xmlchan}Storing AST Objects as XML (XmlChan)}
-
-\begin{latexonly}
-XML\footnote{http://www.w3.org/XML/}
-\end{latexonly}
-\begin{htmlonly}
-\htmladdnormallink{XML}{http://www.w3.org/XML/}
-\end{htmlonly}
-is fast becoming the standard format for passing structured data around
-the internet, and much general purpose software has been written for
-tasks such as the parsing, editing, display and transformation of XML
-data. The \htmlref{XmlChan}{XmlChan} class (a specialised form of \htmlref{Channel}{Channel}) provides
-facilities for storing AST objects externally in the form of XML documents,
-thus allowing such software to be used.
-
-The primary XML format used by the XmlChan class is a fairly close
-transliteration of the AST native format produced by the basic Channel
-class. Currently, there is no DTD or schema defining the structure of data
-produced in this format by an XmlChan. The following is a native AST
-representation of a simple 1-D \htmlref{Frame}{Frame} (including comments and with the \htmlref{Full}{Full}
-attribute set to zero so that some default attribute values are included
-as extra comments):
-
-\begin{quote}
-\small
-\begin{verbatim}
- Begin Frame # Coordinate system description
-# Title = "1-d coordinate system" # Title of coordinate system
- Naxes = 1 # Number of coordinate axes
- Domain = "SCREEN" # Coordinate system domain
-# Lbl1 = "Axis 1" # Label for axis 1
-# Uni1 = "cm" # Units for axis 1
- Ax1 = # Axis number 1
- Begin Axis # Coordinate axis
- Unit = "cm" # Axis units
- End Axis
- End Frame
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The corresponding XmlChan output would look like:
-
-\begin{quote}
-\small
-\begin{verbatim}
- <Frame xmlns="http://www.starlink.ac.uk/ast/xml/"
- desc="Coordinate system description">
- <_attribute name="Title" quoted="true" value="1-d coordinate system"
- desc="Title of coordinate system" default="true"/>
- <_attribute name="Naxes" value="1" desc="Number of coordinate axes"/>
- <_attribute name="Domain" quoted="true" value="SCREEN"
- desc="Coordinate system domain"/>
- <_attribute name="Lbl1" quoted="true" value="Axis 1"
- desc="Label for axis 1" default="true"/>
- <_attribute name="Uni1" quoted="true" value="cm"
- desc="Units for axis 1" default="true"/>
- <Axis label="Ax1" desc="Coordinate axis">
- <!--Axis number 1-->
- <_attribute name="Unit" quoted="true" value="cm" desc="Axis units"/>
- </Axis>
- </Frame>
-\end{verbatim}
-\normalsize
-\end{quote}
-
-
-Notes:
-
-\begin{enumerate}
-\item The AST class name is used as the name for an XML element which contain
-a description of an AST object.
-
-\item AST attributes are described by XML elements with the name
-``\_attribute''. Unfortunately, the word ``attribute'' is also used by XML
-to refer to a ``name=value'' pair within an element start tag. So for
-instance, the ``\htmlref{Title}{Title}'' attribute of the AST Frame object is described
-within an XML element with name ``\_attribute'' in which the XML attribute
-``name'' has the value ``Title'', and the XML attribute ``value'' has the
-value ``1-d coordinate system''. The moral is always to be clear clear
-about the context (AST or XML) in which the word \emph{attribute} is being
-used!
-
-\item The XML includes comments both as XML attributes with the name ``desc'',
-and as separate comment tags.
-
-\item Elements which describe default values are identified by the fact
-that they have an XML attribute called ``default'' set to the value
-``true''. These elements are ignored when being read back into an XmlChan.
-
-\item The outer-most XML element of an AST object will set the default
-namespace to \verb+http://www.starlink.ac.uk/ast/xml/+ which will be
-inherited by all nested elements.
-
-\end{enumerate}
-
-
-The XmlChan class changes the default value for the \htmlref{Comment}{Comment} and Full
-attributes (inherited from the base Channel class) to zero and -1,
-resulting in terse output by default. With the default values for these
-attributes, the above XML is reduced to the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
- <Frame xmlns="http://www.starlink.ac.uk/ast/xml/">
- <_attribute name="Naxes" value="1"/>
- <_attribute name="Domain" quoted="true" value="SCREEN"/>
- <Axis label="Ax1">
- <_attribute name="Unit" quoted="true" value="cm"/>
- </Axis>
- </Frame>
-\end{verbatim}
-\normalsize
-\end{quote}
-
-
-The XmlChan class uses the \htmlref{Skip}{Skip} attributes very similarly to the Channel
-class. If Skip is zero (the default) then an error will be reported if the text
-supplied by the source function does not begin with an AST \htmlref{Object}{Object}. If
-Skip is non-zero, then initial text is skipped over without error until
-the start of an AST object is found. this allows an AST object to be
-located within a larger XML document.
-
-\subsection{Reading IVOA Space-Time-Coordinates XML (STC-X) Descriptions}
-The \htmlref{XmlChan}{XmlChan} class also provides support for reading (but not writing) XML
-documents which use a restricted subset of an early draft (V1.20) of the
-IVOA Space-Time-Coordinates XML (STC-X) system. The version of STC-X
-finally adopted by the IVOA differs in several significant respects from
-V1.20, and so the STC-X support currently provided by AST is mainly of
-historical interest. Note, AST also supports the alternative ``STC-S''
-linear string description of the STC model (see \secref{ss:stcschans}).
-
-STC-X V1.20 is documented at \htmladdnormallink{
-http://www.ivoa.net/Documents/WD/STC/STC-20050225.html}{
-http://www.ivoa.net/Documents/WD/STC/STC-20050225.html}, and the current
-version is documented at \htmladdnormallink{
-http://www.ivoa.net/Documents/latest/STC-X.html}{
-http://www.ivoa.net/Documents/latest/STC-X.html}.
-
-When an STC-X document is read using an XmlChan, the read operation
-produces an AST \htmlref{Object}{Object} of the \htmlref{Stc}{Stc} class, which is itself a subclass of
-\htmlref{Region}{Region}. Specifically, each such Object will be an instance of
-\htmlref{StcSearchLocation}{StcSearchLocation}, \htmlref{StcResourceProfile}{StcResourceProfile}, \htmlref{StcCatalogEntryLocation}{StcCatalogEntryLocation} or
-\htmlref{StcObsDataLocation}{StcObsDataLocation}. See the description of the XmlChan class and the
-\htmlref{XmlFormat}{XmlFormat} attribute for further details.
-
-\cleardoublepage
-\section{\label{ss:stcschans}Reading and writing STC-S descriptions (StcsChans)}
-
-The \htmlref{StcsChan}{StcsChan} class provides facilities for reading and writing
-IVOA ``STC-S'' descriptions. STC-S (see \htmladdnormallink{
-http://www.ivoa.net/Documents/latest/STC-S.html}{
-http://www.ivoa.net/Documents/latest/STC-S.html}) is a linear string
-syntax that allows simple specification of the STC metadata describing a
-region in an astronomical coordinate system. AST supports a
-subset of the STC-S specification, allowing an STC-S description of a
-region within an AST-supported astronomical coordinate system to be converted
-into an equivalent AST \htmlref{Region}{Region} object, and vice-versa. For further
-details, see the full description of the StcsChan class in
-\appref{ss:classdescriptions}.
-
-
-\cleardoublepage
-\section{\label{ss:intramaps}Creating Your Own Private Mappings (IntraMaps)}
-
-\subsection{The Need for Extensibility}
-
-However many \htmlref{Mapping}{Mapping} classes are provided by AST, sooner or later you
-will want to transform coordinates in some way that has not been
-foreseen. You might want to plot a graph in some novel curvilinear
-coordinate system (perhaps you already have a WCS system in your
-software and just want to use AST for its graphical capabilities).
-Alternatively, you might need to calibrate a complex dataset (like an
-objective prism plate) where each position must be converted to world
-coordinates with reference to calibration data under the control of an
-elaborate algorithm.
-
-In such cases, it is clear that the basic pre-formed components
-provided by AST for building Mappings are just not enough. What you
-need is access to a programming language. However, if you write your
-own software to transform coordinate values, then it must be made
-available in the form of an AST class (from which you can create
-Objects) before it can be used in conjunction with other AST
-facilities.
-
-At this point you might consider writing your own AST class, but this
-is not recommended. Not only would the internal conventions used by
-AST take some time to master, but you might also find yourself having
-to change your software whenever a new version of AST was
-released. Fortunately, there is a much easier route provided by the
-\htmlref{IntraMap}{IntraMap} class.
-
-\subsection{The IntraMap Model}
-
-To allow you to write your own Mappings, AST provides a special kind
-of \htmlref{Mapping}{Mapping} called an \htmlref{IntraMap}{IntraMap}. An IntraMap is a sort of ``wrapper''
-for a coordinate transformation routine written in Fortran. You write
-this routine yourself and then register it with AST. This, in effect,
-creates a new class from which you can create Mappings
-({\em{i.e.}}\ IntraMaps) which will transform coordinates in whatever
-way your transformation routine specifies.
-
-Because IntraMaps are Mappings, they may be used in the same way as
-any other Mapping. For instance, they may be combined in series or
-parallel with other Mappings using a \htmlref{CmpMap}{CmpMap} (\secref{ss:cmpmaps}),
-they may be inverted (\secref{ss:invertingmappings}), you may enquire
-about their attributes (\secref{ss:gettingattributes}), they may be
-inserted into FrameSets (\secref{ss:framesets}), {\em{etc.}} They do,
-however, have some important limitations of which you should be aware
-before we go on to consider how to create them.
-
-\subsection{\label{ss:intramaplimitations}Limitations of IntraMaps}
-
-By now, you might be wondering why any other kind of \htmlref{Mapping}{Mapping} is
-required at all. After all, why not simply write your own coordinate
-transformation routines in Fortran, wrap them up in IntraMaps and do
-away with all the other Mapping classes in AST?
-
-The reason is not too hard to find. Any transformation routine you
-write is created solely by you, so it is a private extension which
-does not form a permanent part of AST. If you use it to calibrate some
-data and then pass that data to someone else, who has only the
-standard version of AST, then they will not be able to interpret it.
-
-Thus, while an \htmlref{IntraMap}{IntraMap} is fine for use by you and your collaborators
-(who we assume have access to the same transformation routines), it
-does not address the need for universal data exchange like other AST
-Mappings do. This is where the ``Intra'' in the class name
-``IntraMap'' comes from, implying private or internal usage.
-
-For this reason, it is unwise to store IntraMaps in datasets, unless
-they will be used solely for communication between collaborating items
-of software which share conventions about their use. A private
-database describing coordinate systems on a graphics device might be
-an example where IntraMaps would be suitable, because the data would
-probably never be accessed by anyone else's software. Restricting
-IntraMap usage to within a single program ({\em{i.e.}} never writing
-it out) is, of course, completely safe.
-
-If, by accident, an IntraMap should happen to escape as part of a
-dataset, then the unsuspecting recipient is likely to receive an error
-message when they attempt to read the data. However, AST will
-associate details of the IntraMap's transformation routine and its
-author (if provided) with the data, so that the recipient can make an
-intelligent enquiry to obtain the necessary software if this proves
-essential.
-
-\subsection{\label{ss:transformationfunctions}Writing a Transformation Routine}
-
-The first stage in creating an \htmlref{IntraMap}{IntraMap} is to write the coordinate
-transformation routine. This should have a calling interface like the
-\htmlref{AST\_TRANN}{AST_TRANN} function provided by AST ({\em{q.v.}}). Here is a simple
-example of a suitable transformation routine which transforms
-coordinates by squaring them:
-\xlabel{SqrTran}
-
-\small
-\begin{verbatim}
- SUBROUTINE SQRTRAN( THIS, NPOINT, NCOORD_IN, INDIM, IN, FORWARD,
- : NCOORD_OUT, OUTDIM, OUT, STATUS )
- INTEGER THIS, NPOINT, NCOORD_IN, INDIM, NCOORD_OUT, OUTDIM, STATUS
- DOUBLE PRECISION IN( INDIM, NCOORD_IN ), OUT( OUTDIM, NCOORD_OUT )
- LOGICAL FORWARD
-
- INCLUDE 'AST_PAR'
- DOUBLE PRECISION X
- INTEGER COORD, POINT
-
-* Forward transformation.
- IF ( FORWARD ) THEN
- DO 2 POINT = 1, NPOINT
- DO 1 COORD = 1, NCOORD_IN
- X = IN( POINT, COORD )
- IF ( X .EQ. AST__BAD ) THEN
- OUT( POINT, COORD ) = AST__BAD
- ELSE
- OUT( POINT, COORD ) = X * X
- ENDIF
- 1 CONTINUE
- 2 CONTINUE
-
-* Inverse transformation.
- ELSE
- DO 4 POINT = 1, NPOINT
- DO 3 COORD = 1, NCOORD_IN
- X = IN( POINT, COORD )
- IF ( X .LT. 0.0D0 .OR. X .EQ. AST__BAD ) THEN
- OUT( POINT, COORD ) = AST__BAD
- ELSE
- OUT( POINT, COORD ) = SQRT( X )
- ENDIF
- 3 CONTINUE
- 4 CONTINUE
- ENDIF
- END
-\end{verbatim}
-\normalsize
-
-As you can see, the routine comes in two halves which implement the
-forward and inverse coordinate transformations. The number of points
-to be transformed (NPOINT) and the numbers of input and output
-coordinates per point (NCOORD\_IN and NCOORD\_OUT---in this case both
-are assumed equal) are passed to the routine. A pair of loops then
-accesses all the coordinate values. Note that it is legitimate to
-omit one or other of the forward/inverse transformations and simply
-not to implement it, if it will not be required. It is also
-permissible to require that the numbers of input and output
-coordinates be fixed ({\em{e.g.}}\ at 2), or to write the routine so
-that it can handle arbitrary dimensionality, as here.
-
-Before using an incoming coordinate, the routine must first check that
-it is not set to the value AST\_\_BAD, which indicates missing data
-(\secref{ss:badcoordinates}). If it is, the same value is also
-assigned to any affected output coordinates. The value AST\_\_BAD is
-also generated if any coordinates cannot be transformed. In this
-example, this can happen with the inverse transformation if negative
-values are encountered, so that the square root cannot be taken.
-
-There are very few restrictions on what a coordinate transformation
-routine may do. For example, it may freely perform I/O to access any
-external data needed, it may invoke other AST facilities (but beware
-of unwanted recursion), {\em{etc.}} Typically, you may also want to
-pass information to it {\em{via}}\ global variables held in common
-blocks. Remember, however, that whatever facilities the
-transformation routine requires must be available in every program
-which uses it.
-
-Generally, it is not a good idea to retain context information within
-a transformation routine. That is, it should transform each set of
-coordinates as a single point and retain no memory of the points it
-has transformed before. This is in order to conform with the AST model
-of a \htmlref{Mapping}{Mapping}.
-
-If an error occurs within a transformation routine, it should set its
-STATUS argument to an error value before returning. This will alert
-AST to the error, causing it to abort the current operation. The error
-value AST\_\_ITFER is available for this purpose, but other values may
-also be used ({\em{e.g.}}\ if you wish to distinguish different types
-of error). The AST\_\_ITFER error value is defined in the AST\_ERR
-include file.
-
-\subsection{\label{ss:registeringintramaps}Registering a Transformation Routine}
-
-Having written your coordinate transformation routine, the next step
-is to register it with AST. Registration is performed using
-\htmlref{AST\_INTRAREG}{AST_INTRAREG}, as follows:
-
-\small
-\begin{verbatim}
- EXTERNAL SQRTRAN
-
- CHARACTER * ( 80 ) AUTHOR, CONTACT, PURPOSE
-
- ...
-
- PURPOSE = 'Square each coordinate value'
- AUTHOR = 'R.F. Warren-Smith & D.S. Berry'
- CONTACT = 'http://www.starlink.rl.ac.uk/cgi-bin/htxserver/' //
- 'sun210.htx/?xref_SqrTran'
-
- CALL AST_INTRAREG( 'SqrTran', 2, 2, SQRTRAN, 0,
- : PURPOSE, AUTHOR, CONTACT, STATUS )
-\end{verbatim}
-\normalsize
-
-Note that the transformation routine must also appear in a Fortran
-EXTERNAL statement.
-
-The first argument to AST\_INTRAREG is a name by which the
-transformation routine will be known. This will be used when we come
-to create an \htmlref{IntraMap}{IntraMap} and is case sensitive. We recommend that you
-base this on the actual routine name and make this sufficiently
-unusual that it is unlikely to clash with any other routines in most
-people's software.
-
-The next two arguments specify the number of input and output
-coordinates which the transformation routine will handle. These
-correspond with the \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes of the IntraMap we will
-create. Here, we have set them both to 2, which means that we will
-only be able to create IntraMaps with 2 input and 2 output coordinates
-(despite the fact that the transformation routine can actually handle
-other dimensionalities). We will see later
-(\secref{ss:variableintramapcoordinates}) how to remove this
-restriction.
-
-The fourth argument should contain a set of flags which describe the
-transformation routine in a little more detail. We will return to this
-shortly (\secref{ss:restrictedintramaps} \&
-\secref{ss:simplifyingintramaps}). For now, we supply a value of zero.
-
-The remaining arguments are character strings which document the
-transformation routine, mainly for the benefit of anyone who is
-unfortunate enough to encounter a reference to it in their data which
-they cannot interpret. As explained above
-(\secref{ss:intramaplimitations}), you should try and avoid this, but
-accidents will happen, so you should always provide strings containing
-the following:
-
-\begin{enumerate}
-\item A short description of what the transformation routine is for.
-\item The name of the author.
-\item Contact details, such as an e-mail or WWW address.
-\end{enumerate}
-
-The idea is that anyone finding an IntraMap in their data, but lacking
-the necessary transformation routine, should be able to contact the
-author and make a sensible enquiry in order to obtain it. If you
-expect many enquiries, you may like to set up a World Wide Web page
-and use that instead (in the example above, we use the WWW address of
-the relevant part of this document).
-
-\subsection{Creating an IntraMap}
-
-Once a transformation routine been registered, creating an \htmlref{IntraMap}{IntraMap}
-from it is simple:
-
-\small
-\begin{verbatim}
- INTEGER INTRAMAP
-
- ...
-
- INTRAMAP = AST_INTRAMAP( 'SqrTran', 2, 2, ' ', STATUS );
-\end{verbatim}
-\normalsize
-
-We simply use the \htmlref{AST\_INTRAMAP}{AST_INTRAMAP} constructor function and pass it the
-name of the transformation routine to use. This name is the same (case
-sensitive) one that we associated with the routine when we registered
-it using \htmlref{AST\_INTRAREG}{AST_INTRAREG} (\secref{ss:registeringintramaps}).
-
-You can, of course, register any number of transformation routines and
-select which one to use whenever you create an IntraMap. You can also
-create any number of independent IntraMaps using each transformation
-routine. In this sense, each transformation routine you register
-effectively creates a new ``sub-class'' of IntraMap, from which you
-can create Objects just like any other class. However, an error will
-occur if you attempt to use a transformation routine that has not yet
-been registered.
-
-The second and third arguments to AST\_INTRAMAP are the numbers of
-input and output coordinates. These define the \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes
-for the IntraMap that is created and they must match the corresponding
-numbers given when the transformation routine was registered.
-
-The penultimate argument is the usual attribute initialisation
-string. You may set attribute values for an IntraMap in exactly the
-same way as for any other \htmlref{Mapping}{Mapping} (\secref{ss:settingattributes}, and
-also see \secref{ss:intraflag}).
-
-\subsection{\label{ss:restrictedintramaps}Restricted Implementations of Transformation Routines}
-
-You may not always want to use both the forward and inverse
-transformations when you create an \htmlref{IntraMap}{IntraMap}, so it is possible to omit
-either from the underlying coordinate transformation routine. Consider
-the following, for example:
-
-\small
-\begin{verbatim}
- SUBROUTINE POLY3TRAN( THIS, NPOINT, NCOORD_IN, INDIM, IN, FORWARD,
- : NCOORD_OUT, OUTDIM, OUT, STATUS )
- INTEGER THIS, NPOINT, NCOORD_IN, INDIM, NCOORD_OUT, OUTDIM, STATUS
- DOUBLE PRECISION IN( INDIM, NCOORD_IN ), OUT( OUTDIM, NCOORD_OUT )
- LOGICAL FORWARD
-
- INCLUDE 'AST_PAR'
- DOUBLE PRECISION X
- INTEGER POINT
-
-* Forward transformation.
- DO 1 POINT = 1, NPOINT
- X = IN( POINT, 1 )
- IF ( X .EQ. AST__BAD ) THEN
- OUT( POINT, 1 ) = AST__BAD
- ELSE
- OUT( POINT, 1 ) =
- : 6.18D0 + X * ( 0.12D0 + X * ( -0.003D0 + X * 0.0000101D0 ) )
- END IF
- 1 CONTINUE
- END
-\end{verbatim}
-\normalsize
-
-This implements a 1-dimensional cubic polynomial transformation. Since
-this is somewhat awkward to invert, however, we have only implemented
-the forward transformation. When registering the routine, this is
-indicated via the FLAGS argument to \htmlref{AST\_INTRAREG}{AST_INTRAREG}, as follows:
-
-\small
-\begin{verbatim}
- EXTERNAL POLY3TRAN
-
- ...
-
- CALL AST_INTRAREG( 'Poly3Tran', 1, 1, POLY3TRAN, AST__NOINV,
- : PURPOSE, AUTHOR, CONTACT, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, the fifth argument has been set to the flag value AST\_\_NOINV
-to indicate the lack of an inverse. If the forward transformation were
-absent, we would use AST\_\_NOFOR instead. Flag values for this
-argument may be combined by summing them if necessary.
-
-\subsection{\label{ss:variableintramapcoordinates}Variable Numbers of Coordinates}
-
-In our earlier examples, we have used a fixed number of input and
-output coordinates when registering a coordinate transformation
-routine. It is not necessary to impose this restriction, however, if
-the transformation routine can cope with a variable number of
-coordinates (as with the example in
-\secref{ss:transformationfunctions}). We indicate the acceptability of
-a variable number when registering the transformation routine by
-supplying the value AST\_\_ANY for the number of input and/or output
-coordinates, as follows:
-
-\small
-\begin{verbatim}
- CALL AST_INTRAREG( 'SqrTran', AST__ANY, AST__ANY, SQRTRAN, 0,
- : PURPOSE, AUTHOR, CONTACT, STATUS )
-\end{verbatim}
-\normalsize
-
-The result is that an \htmlref{IntraMap}{IntraMap} may now be created with any number of
-input and output coordinates. For example:
-
-\small
-\begin{verbatim}
- INTEGER INTRAMAP1, INTRAMAP2
-
- ...
-
- INTRAMAP1 = AST_INTRAMAP( 'SqrTran', 1, 1, ' ', STATUS )
- INTRAMAP2 = AST_INTRAMAP( 'SqrTran', 3, 3, 'Invert=1', STATUS )
-\end{verbatim}
-\normalsize
-
-It is possible to fix either the number of input or output coordinates
-(by supplying an explicit number to \htmlref{AST\_INTRAREG}{AST_INTRAREG}), but more subtle
-restrictions on the number of coordinates, such as requiring that \htmlref{Nin}{Nin}
-and \htmlref{Nout}{Nout} be equal, are not supported. This means that:
-
-\small
-\begin{verbatim}
- INTRAMAP = AST_INTRAMAP( 'SqrTran', 1, 2, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-will be accepted without error, although the transformation routine
-cannot actually handle such a combination sensibly. If this is
-important, it would be worth adding a check within the transformation
-routine itself, so that the error would be detected when it came to be
-used.
-
-\subsection{\label{ss:intraflag}Adapting a Transformation Routine to Individual IntraMaps}
-
-In the examples given so far, our coordinate transformation routines
-have not made use of the THIS pointer passed to them (which identifies
-the \htmlref{IntraMap}{IntraMap} whose transformation we are implementing). In practice,
-this will often be the case. However, the presence of the THIS pointer
-allows the transformation routine to invoke any other AST routine on
-the IntraMap, and this permits enquiries about its attributes. The
-transformation routine's behaviour can therefore be modified according
-to any attribute values which are set. This turns out to be a useful
-thing to do, so each IntraMap has a special \htmlref{IntraFlag}{IntraFlag} attribute reserved
-for exactly this purpose.
-
-Consider, for instance, the case where the transformation routine has
-access to several alternative sets of internally-stored data which it
-may apply to perform its transformation. Rather than implement many
-different versions of the transformation routine, you may switch
-between them by setting a value for the IntraFlag attribute when you
-create an instance of an IntraMap, for example:
-
-\small
-\begin{verbatim}
- INTRAMAP1 = AST_INTRAMAP( 'MyTran', 2, 2, 'IntraFlag=A', STATUS )
- INTRAMAP2 = AST_INTRAMAP( 'MyTran', 2, 2, 'IntraFlag=B', STATUS )
-\end{verbatim}
-\normalsize
-
-The transformation routine may then enquire the value of the IntraFlag
-attribute ({\em{e.g.}}\ using AST\_GETC and passing it the THIS
-pointer) and use whichever dataset is required for that particular
-IntraMap.
-
-This approach is particularly useful when the number of possible
-transformations is unbounded or not known in advance, in which case
-the IntraFlag attribute may be used to hold numerical values encoded
-as part of a character string (effectively using them as data for the
-IntraMap). It is also superior to the use of a global switch for
-communication ({\em{e.g.}}\ setting an index to select the ``current''
-data before using the IntraMap), because it continues to work when
-several IntraMaps are embedded within a more complex compound \htmlref{Mapping}{Mapping},
-when you may have no control over the order in which they are used.
-
-\subsection{\xlabel{MaxTran}\label{ss:simplifyingintramaps}Simplifying IntraMaps}
-
-A notable disadvantage of IntraMaps is that they are ``black boxes''
-as far as AST is concerned. This means that they have limited ability
-to participate in the simplification of compound Mappings performed,
-{\em{e.g.}}, by \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY} (\secref{ss:simplifyingcmpmaps}),
-because AST cannot know how they interact with other Mappings. In
-reality, of course, they will often implement such specialised
-coordinate transformations that the simplification possibilities will
-be rather limited anyway.
-
-One important simplification, however, is the ability of a \htmlref{Mapping}{Mapping} to
-cancel with its own inverse to yield a unit Mapping (a \htmlref{UnitMap}{UnitMap}). This
-is important because Mappings are frequently used to relate a dataset
-to some external standard (a celestial coordinate system, for
-example). When inter-relating two similar datasets calibrated using
-the same standard, part of the Mapping often cancels, because it is
-applied first in one direction and then the other, effectively
-eliminating the reference to the standard. This is often a useful
-simplification and can lead to greater efficiency.
-
-Many transformations have this property of cancelling with their own
-inverse, but not necessarily all. Consider the following
-transformation routine, for example:
-
-\small
-\begin{verbatim}
- SUBROUTINE MAXTRAN( THIS, NPOINT, NCOORD_IN, INDIM, IN, FORWARD,
- : NCOORD_OUT, OUTDIM, OUT, STATUS )
- INTEGER THIS, NPOINT, NCOORD_IN, INDIM, NCOORD_OUT, OUTDIM, STATUS
- DOUBLE PRECISION IN( INDIM, NCOORD_IN ), OUT( OUTDIM, NCOORD_OUT )
- LOGICAL FORWARD
-
- INCLUDE 'AST_PAR'
- DOUBLE PRECISION HI, X
- INTEGER COORD, POINT
-
-* Forward transformation.
- IF ( FORWARD ) THEN
- DO 2 POINT = 1, NPOINT
- HI = AST__BAD
- DO 1 COORD = 1, NCOORD_IN
- X = IN( POINT, COORD )
- IF ( X .NE. AST__BAD ) THEN
- IF ( X .GT. HI .OR. HI .EQ. AST__BAD ) HI = X
- END IF
- 1 CONTINUE
- 2 CONTINUE
-
-* Inverse transformation.
- ELSE
- DO 4 COORD = 1, NCOORD_OUT
- DO 3 POINT = 1, NPOINT
- OUT( POINT, COORD ) = IN( POINT, 1 )
- 3 CONTINUE
- 4 CONTINUE
- END IF
- END
-\end{verbatim}
-\normalsize
-
-This routine takes any number of input coordinates and returns a
-single output coordinate which is the maximum value of the input
-coordinates. Its inverse (actually a ``pseudo-inverse'') sets all the
-input coordinates to the value of the output
-coordinate.\footnote{Remember that IN holds the original ``output''
-coordinates when applying the inverse transformation and OUT holds the
-original ``input'' coordinates.}
-
-If this routine is applied in the forward direction and then in the
-inverse direction, it does {\bf{not}} in general restore the original
-coordinate values. However, if applied in the inverse direction and
-then the forward direction, it does. Hence, replacing the sequence of
-operations with an equivalent UnitMap is possible in the latter case,
-but not in the former.
-
-To distinguish these possibilities, two flag values are provided for
-use with \htmlref{AST\_INTRAREG}{AST_INTRAREG} to indicate what simplification (if any) is
-possible. For example, to register the above transformation routine,
-we might use:
-
-\small
-\begin{verbatim}
- EXTERNAL MAXTRAN
-
- ...
-
- CALL AST_INTRAREG( 'MaxTran', AST__ANY, 1, MAXTRAN, AST__SIMPIF,
- : PURPOSE, AUTHOR, CONTACT, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, the flag value AST\_\_SIMPIF supplied for the fifth argument
-indicates that simplification is possible if the transformation is
-applied in the inverse direction followed by the forward direction. To
-indicate the complementary case, the flag AST\_\_SIMPFI would be used
-instead. If both simplifications are possible (as with the SQRTRAN
-function in \secref{ss:transformationfunctions}), then we would use
-the sum of both values.
-
-In practice, some judgement is usually necessary when deciding whether
-to allow simplification. For example, seen in one light our SQRTRAN
-routine (\secref{ss:transformationfunctions}) does not cancel with its
-own inverse, because squaring a coordinate value and then taking its
-square root can change the original value, if this was
-negative. Therefore, replacing this combination with a UnitMap will
-change the behaviour of a compound Mapping and should not be
-allowed. Seen in another light, however, where the coordinates being
-processed are intrinsically all positive, it is a permissible and
-probably useful simplification.
-
-If such distinctions are ever important in practice, it is simple to
-register the same transformation routine twice with different flag
-values (use a separate name for each) and then use whichever is
-appropriate when creating an \htmlref{IntraMap}{IntraMap}.
-
-\subsection{\label{ss:readingandwritingintramaps}Writing and Reading IntraMaps}
-
-It is most important to realise that when you write an \htmlref{IntraMap}{IntraMap} to a
-\htmlref{Channel}{Channel} (\secref{ss:writingtoachannel}), the transformation routine
-which it uses is not stored with it. To do so is impossible, because
-the routine has been compiled and loaded into memory ready for
-execution before AST gets to see it. However, AST does store the name
-associated with the transformation routine and various details about
-the IntraMap itself.
-
-This means that any program attempting to read the IntraMap
-(\secref{ss:readingfromachannel}) cannot make use of it unless it also
-has independent access to the original transformation routine. If it
-does not have access to this routine, an error will occur at the point
-where the IntraMap is read and the associated error message will
-direct the user to the author of the transformation routine for more
-information.
-
-However, if the necessary transformation routine is available, and
-has been registered before the read operation takes place, then AST is
-able to re-create the original IntraMap and will do so. Registration
-of the transformation routine must, of course, use the same name
-(and, in fact, be identical in most particulars) as was used in the
-original program which wrote the data.
-
-This means that a set of co-operating programs which all have access
-to the same set of transformation routines and register them in
-identical fashion (see \secref{ss:intramaplibrary} for how this can
-best be achieved) can freely exchange data that contain IntraMaps. The
-need to avoid exporting such data to unsuspecting third parties
-(\secref{ss:intramaplimitations}) must, however, be re-iterated.
-
-\subsection{\label{ss:intramaplibrary}Managing Transformation Routines in Libraries}
-
-If you are developing a large suite of data reduction software, you
-may have a need to use IntraMaps at various points within it. Very
-probably this will occur in unrelated modules which are compiled
-separately and then stored in a library. Since the transformation
-routines required must be registered before they can be used, this
-makes it difficult to decide where to perform this registration,
-especially since any particular data reduction program may use an
-arbitrary subset of the modules in your library.
-
-To assist with this problem, AST allows you to perform the same
-registration of a transformation routine any number of times, so long
-as it is performed using an identical invocation of \htmlref{AST\_INTRAREG}{AST_INTRAREG} on
-each occasion ({\em{i.e.}}\ all of its arguments must be
-identical). This means you do not have to keep track of whether a
-particular routine has already been registered but could, in fact,
-register it on each occasion immediately before it is required
-(wherever that may be). In order that all registrations are identical,
-however, it is recommended that you group them all together into a
-single routine, perhaps as follows:
-
-\small
-\begin{verbatim}
- SUBROUTINE MYTRANS( STATUS )
- INTEGER STATUS
-
- INCLUDE 'AST_PAR'
- EXTERNAL MAXTRAN, POLY3TRAN, SQRTRAN
-
- ...
-
- CALL AST_INTRAREG( 'MaxTran', AST__ANY, 1, MAXTRAN, AST__SIMPIF,
- : PURPOSE, AUTHOR, CONTACT, STATUS )
-
- ...
-
- CALL AST_INTRAREG( 'Poly3Tran', 1, 1, POLY3TRAN, AST__NOINV,
- : PURPOSE, AUTHOR, CONTACT, STATUS )
-
- ...
-
- CALL AST_INTRAREG( 'SqrTran, 2, 2, SQRTRAN, 0,
- : PURPOSE, AUTHOR, CONTACT, STATUS )
- END
-\end{verbatim}
-\normalsize
-
-You can then simply invoke this routine wherever necessary. It is, in
-fact, particularly important to register all relevant transformation
-routines in this way before you attempt to read an \htmlref{Object}{Object} that might
-be (or contain) an \htmlref{IntraMap}{IntraMap}
-(\secref{ss:readingandwritingintramaps}). This is because you may not
-know in advance which of these transformation routines the IntraMap
-will use, so they must all be available in order to avoid an error.
-
-\cleardoublepage
-\section{\label{ss:plots}Producing Graphical Output (Plots)}
-
-Graphical output from AST is performed though an \htmlref{Object}{Object} called a \htmlref{Plot}{Plot},
-which is a specialised form of \htmlref{FrameSet}{FrameSet}. A Plot does not represent the
-graphical content itself, but is a route through which plotting
-operations, such as drawing lines and curves, are conveyed on to a
-plotting surface to appear as visible graphics.
-
-\subsection{The Plot Model}
-
-When a \htmlref{Plot}{Plot} is created, it is initialised by providing a \htmlref{FrameSet}{FrameSet} whose
-base \htmlref{Frame}{Frame} (as specified by its \htmlref{Base}{Base} attribute) is mapped linearly or
-logarithmically (as specified by the LogPlot attribues) on to a
-{\em{plotting area.}} This is a rectangular region in the graphical
-coordinate space of the underlying graphics system and becomes the new
-base Frame of the Plot. In effect, the Plot becomes attached to the
-plotting surface, in rather the same way that a basic FrameSet might be
-attached to (say) an image.
-
-The current Frame of the Plot (derived from the current Frame of the
-FrameSet supplied) is used to represent a {\em{physical coordinate
-system.}} This is the system in which plotting operations are
-performed by your program. Every plotting operation is then
-transformed through the \htmlref{Mapping}{Mapping} which inter-relates the Plot's current
-and base Frames in order to appear on the plotting surface.
-
-An example may help here. Suppose we start with a FrameSet whose base
-Frame describes the pixel coordinates of an image and whose current
-Frame describes a celestial (equatorial) coordinate system. Let us
-assume that these two Frames are inter-related by a Mapping within the
-FrameSet which represents a particular sky projection.
-
-When a Plot is created from this FrameSet, we specify how the pixel
-coordinates (the base Frame) maps on to the plotting surface. This
-simply corresponds to telling the Plot where we have previously
-plotted the image data. If we now use the Plot to plot a line with
-latitude zero in our physical coordinate system, as given by the
-current Frame, this line would appear as a curve (the equator) on the
-plotting surface, correctly registered with the image.
-
-There are a number of plotting functions provided, which all work in a
-similar way. Plotting operations are transformed through the Mapping
-which the Plot represents before they appear on the plotting
-surface.\footnote{Like any FrameSet, a Plot can be used as a
-Mapping. In this case it is the inverse transformation which is used
-when plotting ({\em{i.e.}}\ that which transforms between the current
-and base Frames).} It is possible to draw symbols, lines, axes,
-entire grids and more in this way.
-
-%\subsection{TBW---Creating a Plot}
-
-\subsection{Plotting Symbols}
-
-The simplest form of plotting is to draw symbols (termed
-{\em{markers}}) at a set of points. This is performed by \htmlref{AST\_MARK}{AST_MARK},
-which is supplied with a set of physical coordinates at which to place
-the markers:
-
-\small
-\begin{verbatim}
- INCLUDE 'AST_PAR'
- INTEGER NCOORD, NMARK, TYPE, STATUS
- DOUBLE PRECISION IN( NMARK, NCOORD )
-
- STATUS = 0
-
- ...
-
- CALL AST_MARK( PLOT, NMARK, NCOORD, NMARK, IN, TYPE, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, NMARK specifies how many markers to plot and NCOORD specifies
-how many coordinates are being supplied for each
-point.\footnote{Remember, the physical coordinate space need not
-necessarily be 2-dimensional, even if the plotting surface is.} The
-array IN supplies the coordinates and the integer TYPE specifies which
-type of marker to plot.
-
-\subsection{\label{ss:plottinggeodesics}Plotting Geodesic Curves}
-
-There is no \htmlref{Plot}{Plot} routine to draw a straight line, because any straight
-line in physical coordinates can potentially turn into a curve in
-graphical coordinates. We therefore start by considering how to draw
-geodesic curves. These are curves which trace the path of shortest
-distance between two points in physical coordinates
- and are the basic drawing element in a Plot.
-
-In many instances, the geodesic will, in fact, be a straight line, but
-this depends on the Plot's current \htmlref{Frame}{Frame}. If this represents a
-celestial coordinate system, for instance, it will be a great circle
-(corresponding with the behaviour of the \htmlref{AST\_DISTANCE}{AST_DISTANCE} function which
-defines the metric of the physical coordinate space). The geodesic
-will, of course, be transformed into graphics coordinates before being
-plotted. A geodesic curve is plotted using \htmlref{AST\_CURVE}{AST_CURVE} as follows:
-
-\small
-\begin{verbatim}
- DOUBLE PRECISION START( NCOORD ), FINISH( NCOORD )
-
- ...
-
- CALL AST_CURVE( PLOT, START, FINISH, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, START and FINISH are arrays containing the starting and
-finishing coordinates of the curve. The \htmlref{AST\_OFFSET}{AST_OFFSET} and AST\_DISTANCE
-routines can often be useful for computing these
-(\secref{ss:distanceandoffset}).
-
-If you need to draw a series of curves end-to-end (when drawing a
-contour line, for example), then a more efficient alternative is to
-use \htmlref{AST\_POLYCURVE}{AST_POLYCURVE}. This has the same effect as a sequence of calls to
-AST\_CURVE, but allows you to supply a whole set of points at the same
-time. AST\_POLYLINE then joins them, in sequence, using geodesic
-curves:
-
-\small
-\begin{verbatim}
- INTEGER NPOINT
- DOUBLE PRECISION COORDS( NPOINT, NCOORD )
-
- ...
-
- CALL AST_POLYCURVE( PLOT, NPOINT, NCOORD, NPOINT, COORDS, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, NPOINT specifies how many points are to be joined and NCOORD
-specifies how many coordinates are being supplied for each point. The
-array COORDS supplies the coordinates of the points in the Plot's
-physical coordinate system.
-
-\subsection{Plotting Curves Parallel to Axes}
-
-As there is no \htmlref{Plot}{Plot} routine to draw a ``straight line'', drawing axes
-and grid lines to represent coordinate systems requires a slightly
-different approach. The problem is that for some coordinate systems,
-these grid lines will not be geodesics, so \htmlref{AST\_CURVE}{AST_CURVE} and
-\htmlref{AST\_POLYCURVE}{AST_POLYCURVE} (\secref{ss:plottinggeodesics}) cannot easily be used
-(you would have to resort to approximating grid lines by many small
-elements). Lines of constant celestial latitude provide an example of
-this, with the exception of the equator which is a geodesic.
-
-The \htmlref{AST\_GRIDLINE}{AST_GRIDLINE} routine allows these curves to be drawn, as follows:
-
-\small
-\begin{verbatim}
- INTEGER AXIS
- DOUBLE PRECISION LENGTH
-
- ...
-
- CALL AST_GRIDLINE( PLOT, AXIS, START, LENGTH, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, AXIS specifies which physical coordinate axis we wish to draw
-parallel to. The START array contains the coordinates of the start of
-the curve and LENGTH specifies the distance to draw along the axis in
-physical coordinate space.
-
-\subsection{\label{ss:plottinggeneralizedcurves}Plotting Generalized Curves}
-We have seen how geodesic curves and grid lines can be drawn. The \htmlref{Plot}{Plot}
-class includes another method,
-\htmlref{AST\_GENCURVE}{AST_GENCURVE},
-which allows curves of {\em any} form to be drawn. The caller supplies a
-\htmlref{Mapping}{Mapping} which maps offset along the curve\footnote{normalized so that the
-start of the curve is at offset 0.0 and the end of the curve is at offset
-1.0 - offset need not be linearly related to distance.} into the
-corresponding position in the current \htmlref{Frame}{Frame} of the Plot.
-AST\_GENCURVE,
-then takes care of Mapping these positions into graphics coordinates. The
-choice of exactly which positions along the curve are to be used to
-define the curve is also made by
-AST\_GENCURVE,
-using an adaptive algorithm which concentrates points around areas where
-the curve is bending sharply or is discontinuous in graphics coordinates.
-
-The \htmlref{IntraMap}{IntraMap} class may be of particular use in this context since it allows
-you to code your own Mappings to do any transformation you choose.
-
-
-\subsection{\label{ss:clipping}Clipping}
-
-Like many graphics systems, a \htmlref{Plot}{Plot} allows you to {\em{clip}} the graphics
-you produce. This means that plotting is restricted to certain regions
-of the plotting surface so that anything drawn outside these regions
-will not appear. All Plots automatically clip at the edges of the
-plotting area specified when the Plot is created. This means that
-graphics are ultimately restricted to the rectangular region of
-plotting space to which you have attached the Plot.
-
-In addition to this, you may also specify lower and upper limits on
-each axis at which clipping should occur. This permits you to further
-restrict the plotting region. Moreover, you may attach these clipping
-limits to {\em{any}} of the Frames in the Plot. This allows you to
-place restrictions on where plotting will take place in either the
-physical coordinate system, the graphical coordinate system, or in any
-other coordinate system which is described by a \htmlref{Frame}{Frame} within the Plot.
-
-For example, you could plot using equatorial coordinates and set up
-clipping limits in galactic coordinates. In general, you could set up
-arbitrary clipping regions by adding a new Frame to a Plot (in which
-clipping will be performed) and inter-relating this to the other
-Frames in a suitable way.
-
-Clipping limits are defined using the \htmlref{AST\_CLIP}{AST_CLIP} routine, as follows:
-
-\small
-\begin{verbatim}
- INTEGER IFRAME, NAXES
- DOUBLE PRECISION LBND( NAXES ), UBND( NAXES )
-
- ...
-
- CALL AST_CLIP( PLOT, IFRAME, LBND, UBND, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, the IFRAME value gives the index of the Frame within the Plot to
-which clipping is to be applied, while LBND and UBND give the limits
-on each axis of the selected Frame (NAXES is the number of axes in
-this Frame).
-
-You can remove clipping by giving a value of AST\_\_NOFRAME for IFRAME.
-
-\subsection{Using a Plot as a Mapping}
-
-All Plots are also Mappings (just like the FrameSets from which they
-are derived), so can be used to transform coordinates.
-
-Like FrameSets, the forward transformation of a \htmlref{Plot}{Plot} will convert
-coordinates between the base and current Frames ({\em{i.e.}}\ between
-graphical and physical coordinates). This would be useful if you were
-(say) reading a cursor position in graphical coordinates and needed to
-convert this into physical coordinates for display.
-
-Conversely, a Plot's inverse transformation converts between its
-current and base Frames ({\em{i.e.}}\ from physical coordinates to
-graphical coordinates). This transformation is applied automatically
-whenever plotting operations are carried out by AST routines. It may
-also be useful to apply it directly, however, if you wish to perform
-additional plotting operations ({\em{e.g.}}\ those provided by the
-native graphics system) at positions specified in physical
-coordinates.
-
-There is, however. one important difference between using a \htmlref{FrameSet}{FrameSet}
-and a Plot to transform coordinates, and this is that clipping may be
-applied by a Plot (if it has been enabled using
-\htmlref{AST\_CLIP}{AST_CLIP}---\secref{ss:clipping}). Any point which lies within the
-clipped region of a Plot will, when transformed, yield coordinates
-with the value AST\_\_BAD. If you wish to avoid this clipping, you
-should extract the relevant \htmlref{Mapping}{Mapping} from the Plot (using
-\htmlref{AST\_GETMAPPING}{AST_GETMAPPING}) and use this, instead of the Plot, to transform the
-coordinates.
-
-\subsection{Using a Plot as a Frame}
-
-Every \htmlref{Plot}{Plot} is also a \htmlref{Frame}{Frame}, so can be used to obtain the values of
-Frame attributes such as a \htmlref{Title}{Title}, axis Labels, axis Units,
-{\em{etc.,}} which are typically used when displaying data and/or
-coordinates. These attributes are, as for any \htmlref{FrameSet}{FrameSet}, derived from
-the current Frame of the Plot (\secref{ss:framesetasframe}). They are
-also used automatically when using the Plot to plot coordinate axes
-and coordinate grids ({\em{e.g.}}\ for labelling
-them---\secref{ss:plottingagrid}).
-
-Because the current Frame of a Plot represents physical coordinates,
-any Frame operation applied to the Plot will effectively be working in
-this coordinate system. For example, the \htmlref{AST\_DISTANCE}{AST_DISTANCE} and \htmlref{AST\_OFFSET}{AST_OFFSET}
-routines will compute distances and offsets in physical coordinate
-space, and \htmlref{AST\_FORMAT}{AST_FORMAT} will format physical coordinates in an
-appropriate way for display.
-
-\subsection{\label{ss:validphysicalcoordinates}Regions of Valid Physical Coordinates}
-
-When points in physical coordinate space are transformed by a \htmlref{Plot}{Plot}
-into graphics coordinates for plotting, they may not always yield
-valid coordinates, irrespective of any clipping being applied
-(\secref{ss:clipping}). To indicate this, the resulting coordinate
-values will be set to the value AST\_\_BAD
-(\secref{ss:badcoordinates}).
-
-There are a number of reasons why this may occur, but typically it
-will be because physical coordinates only map on to a subset of the
-graphics coordinate space. This situation is commonly encountered with
-all-sky projections where, typically, the celestial sphere appears,
-when plotted, as a distorted shape ({\em{e.g.}}\ an ellipse) which
-does not entirely fill the graphics space. In some cases, there may
-even be multiple regions of valid and invalid physical coordinates.
-
-When plotting is performed {\em{via}} a Plot, graphical output will
-only appear in the regions of valid physical coordinates. Nothing will
-appear where invalid coordinates occur. Such output is effectively
-clipped. If you wish to plot in these areas, you must change
-coordinate system and use, say, graphical coordinates to address the
-plotting surface directly.
-
-\subsection{Plotting Borders}
-
-The \htmlref{AST\_BORDER}{AST_BORDER} routine is provided to draw a (line) border around
-your graphical output. With most graphics systems, this would simply
-be a rectangular box around the plotting area. With a \htmlref{Plot}{Plot}, however,
-this boundary follows the edge of each region containing valid,
-unclipped physical coordinates (\secref{ss:validphysicalcoordinates}).
-
-This means, for example, that if you were plotting an all-sky
-projection, this boundary would outline the perimeter of the celestial
-sphere when projected on to your plotting surface. Of course, if there
-is no clipping and all physical coordinates are valid, then you will
-get the traditional rectangular box. AST\_BORDER requires only a
-pointer to the Plot and the usual STATUS argument:
-
-\small
-\begin{verbatim}
- LOGICAL HOLES
-
- ...
-
- HOLES = AST_BORDER( PLOT, STATUS )
-\end{verbatim}
-\normalsize
-
-It returns a logical value to indicate if any invalid or clipped
-physical coordinates were found within the plotting area. If they
-were, it will draw around the valid unclipped regions and return
-.TRUE.. Otherwise, it will draw a simple rectangular border and return
-.FALSE..
-
-\subsection{Plotting Text}
-
-Using a \htmlref{Plot}{Plot} to draw text involves supplying a string of text to be
-displayed and a position in physical coordinates where the text is to
-appear. The position is transformed into graphical coordinates to
-determine where the text should appear on the plotting surface. You
-must also provide a 2-element UP vector which gives the upward
-direction of the text in graphical coordinates. This allows text to be
-drawn at any angle.
-
-Plotting is performed by \htmlref{AST\_TEXT}{AST_TEXT}, for example:
-
-\small
-\begin{verbatim}
- CHARACTER * ( 20 ) TEXT
- DOUBLE PRECISION POS( NCOORD )
- REAL UP( 2 )
- DATA UP / 0.0, 1.0 /
-
- ...
-
- CALL AST_TEXT( PLOT, TEXT, POS, UP, 'TL', STATUS )
-\end{verbatim}
-\normalsize
-
-Here, TEXT contains the string to be drawn, POS is an array of
-physical coordinates and UP specifies the upward vector. In this case,
-the text will be drawn horizontally. The penultimate argument
-specifies the text justification, here indicating that the top left
-corner of the text should appear at the position given.
-
-Further control over the appearance of the text is possible by setting
-values for various Plot attributes, for example Colour, Font and Size.
-Sub-strings within the displayed text can be given different appearances,
-or turned into super-scripts or sub-scripts, by the inclusion of escape
-sequences (see section~\secref{ss:escapes}) within the supplied text string.
-
-\subsection{\label{ss:plottingagrid}Plotting a Grid}
-
-The most comprehensive plotting routine available is \htmlref{AST\_GRID}{AST_GRID}, which
-can be used to draw labelled coordinate axes and, optionally, to
-overlay coordinate grids on the plotting area
-(Figure~\ref{fig:gridplot}). The routine is straightforward to use,
-simply requiring a pointer to the \htmlref{Plot}{Plot} and a STATUS argument:
-
-\small
-\begin{verbatim}
- CALL AST_GRID( PLOT, STATUS )
-\end{verbatim}
-\normalsize
-
-It will draw both linear and curvilinear axes and grids, as required
-by the particular Plot. The appearance of the output can be modified
-in a wide variety of ways by setting various Plot attributes.
-The Label attributes of the current \htmlref{Frame}{Frame} are displayed as the axis
-labels in the grid, and the \htmlref{Title}{Title} attribute as the plot title. Sub-strings
-within these strings can be given different appearances, or turned into
-super-scripts or sub-scripts, by the inclusion of escape sequences (see
-section~\secref{ss:escapes}) within the Label attributes.
-
-\subsection{\label{ss:escapes}Controlling the Appearance of Sub-strings}
-Normally, each string of characters displayed using a \htmlref{Plot}{Plot} will be
-plotted so that all characters in the string have the same font size,
-colour, {\em{etc.,}} specified by the appropriate attributes of the
-Plot. However, it is possible to include \emph{escape sequences} within
-the text to modify the appearance of sub-strings. \htmlref{Escape}{Escape} sequences can be
-used to change, colour, font, size, width, to introduce extra horizontal
-space between characters, and to change the base line of characters (thus
-allowing super-scripts and sub-scripts to be created). See the entry for
-the Escape attribute in \appref{ss:attributedescriptions} for details.
-
-As an example, if the character string ``\verb+10\%^50+\%s70+0.5+'' is
-plotted, it will be displayed as ``$10^{0.5}$'' - that is, with a
-super-scripted exponent. The exponent text will be 70\% of the size of
-normal text (as determined by the Size attribute), and its baseline will
-be raised by 50\% of the height of a normal character.
-
-Such escape sequences can be used in the strings assigned to textual
-attributes of the Plot (such as the axis Labels), and may also be
-included in strings plotted using
-\htmlref{AST\_TEXT}{AST_TEXT}.
-
-The Format attribute for the \htmlref{SkyAxis}{SkyAxis} class includes the ``g'' option
-which will cause escape sequences to be included when formatting
-celestial positions so that super-script characters are used as
-delimiters for the various fields (a super-script ``h'' for hours, ``m''
-for minutes, \emph{etc}).
-
-Note, the facility for interpreting escape sequences is only available if
-the graphics wrapper functions which provide the interface to the
-underlying graphics system support all the functions included in the
-\verb+grf.h+ file as of AST V3.2. Older grf interfaces may need to be
-extended by the addition of new functions before escape sequences can be
-interpretted.
-
-\subsection{\label{ss:logaxes}Producing Logarithmic Axes}
-In certain situations you may wish for one or both of the plotted axes to
-be displayed logarithmically rather than linearly. For instance, you may
-wish to do this when using a \htmlref{Plot}{Plot} to represent a spectrum of, say, flux
-against frequency. In this case, you can cause the frequency axis to be drawn
-logarithmically simply by setting the boolean LogPlot attribute for the
-frequency axis to a non-zero value. This causes several things to happen:
-
-\begin{enumerate}
-
-\item The \htmlref{Mapping}{Mapping} between the base \htmlref{Frame}{Frame} of the Plot (which represents
-the underlying graphics world coordinate system) and the base Frame of
-the \htmlref{FrameSet}{FrameSet} supplied when the Plot was created, is modified. By
-default, this mapping is linear on both axes, but setting LogPlot non-zero
-for an axis causes the Mapping to be modified so that it is logarithmic
-on the specified axis. This is only possible if the displayed section of
-the axis does not include the value zero (otherwise the attempt to set
-a new value for LogPlot is ignored,and it retains its default value of
-zero).
-
-\item The major tick marks drawn as part of the annotated coordinate grid
-are spaced logarithmically rather than linearly. That is, major axis
-values are chosen so that there is a constant ratio between adjacent
-tick mark values. This ratio is constrained to be a power of ten. The
-minor tick marks are drawn at linearly distributed points between the
-adjoining major tick values. Thus if a pair of adjacent major tick values
-are drawn at axis values 10.0 and 100.0, minor ticks will be placed at
-20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0 and 90.0 (note only 8 minor tick
-marks are drawn).
-
-\item If possible, numerical axis labels are shown as powers of ten.
-This depends on the facilities implemented by the graphics wrapper
-functions (see the next section). Extra functions were introduced to this
-set of wrapper functions at AST V3.2 which enable super-scripts and
-sub-scripts to be produced. Some older wrappers may not yet have
-implemented these functiosn and this will result in axis labels being
-drawn in usual scientific or decimal notation.
-
-\end{enumerate}
-
-Whilst the LogPlot attribute can be used to control all three of the above
-facilities, it is possible to control them individually as well. The
-LogTicks and LogLabel attributes control the behaviour specified in items
-2 and 3 above, but the default values for these attributes depend on the
-setting of the LogPlot attribute. This means that setting LogPlot
-non-zero will swicth all three facilites on, so long as zero values have
-not been assigned explicitly to LogTicks or LogLabel.
-
-
-\subsection{\label{ss:choosingagraphicspackage}Choosing a Graphics Package}
-The \htmlref{Plot}{Plot} class itself does not include any code for actually drawing on a
-graphics device. Instead, it requires a set of functions to be provided
-which it uses to draw the required graphics. These include functions
-to draw a straight line, draw a text string, \emph{etc}. You may choose
-to provide functions from your favorite graphics package, or you can even
-write your own! To accomodate variations in the calling interfaces of
-different graphics packages, AST defines a standard interface for these
-routines. If this interface differs from the interface provided by your
-graphics package (which in general it will), then you must write a set of
-\emph{wrapper functions}, which provide the interface expected by AST but
-which then call functions from your graphics package to provide the
-required functionality. AST comes with wrapper functions suitable for
-the PGPLOT graphics package (see \xref{SUN/15}{sun15}{}).
-
-There are two ways of indicating which wrapper functions are to be used by
-the Plot class:
-\begin{enumerate}
-
-\item A file containing C functions with pre-defined names can be written
-and linked with the application using options of the \htmlref{ast\_link}{ast_link} command.
-(see \secref{ss:howtobuild} and \appref{ss:commanddescriptions}). AST is
-distributed with such a file (called {\tt grf\_pgplot.c}) which calls PGPLOT
-functions to implement the required functionality. This file can be used
-as a template for writing your own.
-Currently, it is not possible to write such ``grf modules'' in Fortran.
-If you want to use wrapper functions written in Fortran, then you must
-use the \htmlref{AST\_GRFSET}{AST_GRFSET} method as described below.
-
-\item The
-AST\_GRFSET
-method of the Plot class can be used to ``register''
-wrapper functions at run-time. This allows an application to switch
-between graphics systems if required. Graphics functions registered in
-this way do not need to have the pre-defined names used in the link-time
-method described above.
-
-\end{enumerate}
-
-For details of the interfaces of the wrapper routines, see
-the reference documentation for the AST\_GRFSET method.
-
-\cleardoublepage
-\section{Compiling and Linking Software that Uses AST}
-
-A small number of UNIX commands are provided by AST to assist with the
-process of building software. A description of these can be found in
-\appref{ss:commanddescriptions} and their use is discussed here. Note
-that in order to access these commands, the appropriate directory
-(normally ``/star/bin'') should be on your PATH.\footnote{If you have
-not installed AST in the usual location, then substitute the
-appropriate directory in place of ``/star'' wherever it occurs.}
-
-\subsection{\label{ss:accessingheaderfile}Accessing AST Include Files}
-
-
-The include files provided for use with Fortran are:
-
-\begin{quote}
-\begin{description}
-\item[AST\_PAR]\mbox{}\\
-Declares the types of all AST functions and defines parameter
-constants, except those that identify error values.
-
-\item[AST\_ERR]\mbox{}\\
-Defines parameter constants to represent the various error values to
-which the AST error status may be set when an error occurs
-(\secref{ss:errordetection}).
-\end{description}
-\end{quote}
-
-References to AST include files should be in upper case. Most modern
-Fortran compilers allow the directory to be specified as a command line
-option:
-
-\begin{quote}
-\small
-\begin{verbatim}
-f77 prog.f -I/star/include -o prog
-\end{verbatim}
-\normalsize
-\end{quote}
-
-If you are using such a compiler then your Fortran source code should,
-for instance, include:
-
-\small
-\begin{verbatim}
- INCLUDE 'AST_PAR'
-\end{verbatim}
-\normalsize
-
-(that is, there is no need to include the directory within the INCLUDE
-statement). If your compiler does not provide such an option then your
-source code must contain an absolute file name identifying the directory
-where the include files reside, for instance:
-
-\small
-\begin{verbatim}
- INCLUDE '/star/include/AST_PAR'
-\end{verbatim}
-\normalsize
-
-
-\subsection{\label{ss:linking}Linking with AST Facilities}
-
-Fortran programs may be linked with AST by including execution of the
-command ``\htmlref{ast\_link}{ast_link}'' on the compiler command line. Thus, to compile
-and link a program called ``prog'', the following might be used:
-
-\begin{quote}
-\small
-\begin{verbatim}
-f77 prog.f -L/star/lib `ast_link` -o prog
-\end{verbatim}
-\normalsize
-\end{quote}
-
-On Linux systems you should usually use \verb+g77 -fno-second-underscore+ in
-place of \verb+f77+ - see \xref{``Software development on Linux''}{sun212}
-{software_development_on_linux} in \xref{SUN/212}{sun212}{}.
-
-
-Note the use of backward quote characters, which cause the
-``ast\_link'' command to be executed and its result substituted into
-the compiler command. An alternative is to save the output from
-``ast\_link'' in (say) a shell variable and use this instead. You may
-find this a little faster if you are building software repeatedly
-during development.
-
-Programs which use AST can also be linked in a number of other ways,
-depending on the facilities they require. In the example above, we
-have used the default method which assumes that the program will not
-be generating graphical output, so that no graphics libraries need be
-linked. If you need other facilities, then various switches can be
-applied to the ``ast\_link'' command in order to control the linking
-process.
-
-For example, if you were producing graphical output using the PGPLOT
-graphics package, you could link with the AST/PGPLOT interface by
-using the ``$-$pgplot'' switch with ``ast\_link'', as
-follows:\footnote{Use the ``$-$pgp'' option instead if you wish to use
-the Starlink version of PGPLOT which uses GKS to generate its output.}
-
-\begin{quote}
-\small
-\begin{verbatim}
-f77 prog.f -L/star/lib `ast_link -pgplot` -o prog
-\end{verbatim}
-\normalsize
-\end{quote}
-
-again using \verb+g77 -fno-second-underscore+ in place of \verb+f77+
-on Linux systems.
-
-
-See the ``ast\_link'' command description in
-\appref{ss:commanddescriptions} for details of the options available.
-
-\subsection{Building ADAM Applications that Use AST}
-
-Users of Starlink's \xref{ADAM}{sg4}{} programming environment
-\latex{(SG/4)} on UNIX should use the
-``\xref{alink}{sun144}{ADAM_link_scripts}'' command
-(\xref{SUN/144}{sun144}{}) to compile and link applications and can
-access the AST library by including execution of the command
-``\htmlref{ast\_link\_adam}{ast_link_adam}'' on the command line, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-alink adamprog.f `ast_link_adam`
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note the use of backward quote characters.
-
-By default, AST error messages produced by applications built in this
-way will be delivered {\em{via}} the Starlink EMS Error Message
-Service (\xref{SSN/4}{ssn4}{}) so that error handling by AST is
-consistent with the \xref{{\em{inherited
-status}}}{sun104}{inherited_status} error handling normally used in
-Starlink software.
-
-Switches may be given to the ``ast\_link\_adam'' command (in a similar
-way to ``\htmlref{ast\_link}{ast_link}''---\secref{ss:linking}) in order to link with
-additional AST-related facilities, such as a graphics interface. See
-the ``ast\_link\_adam'' command description in
-\appref{ss:commanddescriptions} for details of the options available.
-
-\appendix
-\cleardoublepage
-\section{\label{ss:classhierarchy}The AST Class Hierarchy}
-The following table shows the hierarchy of classes in the AST library.
-For a description of each class, you should consult
-\appref{ss:classdescriptions}.
-
-\small
-\begin{verbatim}
-Object - Base class for all AST Objects
- Axis - Store axis information
- SkyAxis - Store celestial axis information
- Channel - Basic (textual) I/O channel
- FitsChan - I/O Channel using FITS header cards
- XmlChan - I/O Channel using XML
- StcsChan - I/O Channel using IVOA STC-S descriptions
- KeyMap - Store a set of key/value pairs
- Mapping - Inter-relate two coordinate systems
- CmpMap - Compound Mapping
- DssMap - Map points using Digitised Sky Survey plate solution
- Frame - Coordinate system description
- CmpFrame - Compound Frame
- SpecFluxFrame - Observed value versus spectral position
- FluxFrame - Observed value at a given fixed spectral position
- FrameSet - Set of inter-related coordinate systems
- Plot - Provide facilities for graphical output
- Region - Specify areas within a coordinate system
- Box - A box region with sides parallel to the axes of a Frame
- Circle - A circular or spherical region within a Frame
- CmpRegion - A combination of two regions within a single Frame
- Ellipse - An elliptical region within a 2-dimensional Frame
- Interval - Intervals on one or more axes of a Frame.
- NullRegion - A boundless region within a Frame
- PointList - A collection of points in a Frame
- Polygon - A polygonal region within a 2-dimensional Frame
- Prism - An extrusion of a Region into orthogonal dimensions
- Stc - Represents an generic instance of an IVOA STC-X description
- StcResourceProfile - Represents an an IVOA STC-X ResourceProfile
- StcSearchLocation - Represents an an IVOA STC-X SearchLocation
- StcCatalogEntryLocation - Represents an an IVOA STC-X CatalogEntryLocation
- StcObsDataLocation - Represents an an IVOA STC-X ObsDataLocation
- SkyFrame - Celestial coordinate system description
- SpecFrame - Spectral coordinate system description
- DSBSpecFrame - Dual sideband spectral coordinate system description
- TimeFrame - Time coordinate system description
- GrismMap - Models the spectral dispersion produced by a grism
- IntraMap - Map points using a private transformation function
- LutMap - Transform 1-dimensional coordinates using a lookup table
- MathMap - Transform coordinates using mathematical expressions
- MatrixMap - Map positions by multiplying them by a matrix
- NormMap - Normalise coordinates using a supplied Frame
- PcdMap - Apply 2-dimensional pincushion/barrel distortion
- PermMap - Coordinate permutation Mapping
- PolyMap - General N-dimensional polynomial Mapping
- RateMap - Calculates an element of a Mapping's Jacobian matrix
- SelectorMap - Locates positions within a set of Regions
- ShiftMap - Shifts each axis by a constant amount
- SlaMap - Sequence of celestial coordinate conversions
- SpecMap - Sequence of spectral coordinate conversions
- SphMap - Map 3-d Cartesian to 2-d spherical coordinates
- SwitchMap - Encapuslates a set of alternate Mappings
- TimeMap - Sequence of time coordinate conversions
- TranMap - Combine fwd. and inv. transformations from two Mappings
- UnitMap - Unit (null) Mapping
- WcsMap - Implement a FITS-WCS sky projection
- WinMap - Match windows by scaling and shifting each axis
- ZoomMap - Zoom coordinates about the origin
-\end{verbatim}
-\normalsize
-
-\cleardoublepage
-\section{\label{ss:functiondescriptions}AST Routine Descriptions}
-\small
-\sstroutine{
- AST\_SET\sstlabel{AST_SET}
-}{
- Set attribute values for an Object
-}{
- \sstdescription{
- This routine assigns a set of attribute values to an \htmlref{Object}{Object},
- over-riding any previous values. The attributes and their new
- values are specified via a character string, which should
- contain a comma-separated list of the form:
-
- {\tt{"}}attribute\_1 = value\_1, attribute\_2 = value\_2, ... {\tt{"}}
-
- where {\tt{"}}attribute\_n{\tt{"}} specifies an attribute name, and the value
- to the right of each {\tt{"}}={\tt{"}} sign should be a suitable textual
- representation of the value to be assigned. This value will be
- interpreted according to the attribute's data type.
- }
- \sstinvocation{
- CALL AST\_SET( THIS, SETTINGS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Object.
- }
- \sstsubsection{
- SETTINGS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing a comma-separated list of
- attribute settings in the form described above.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This routine applies to all Objects.
- }
- }
- \sstexamples{
- \sstexamplesubsection{
- CALL AST\_SET( MAP, '\htmlref{Report}{Report} = 1, \htmlref{Zoom}{Zoom} = 25.0', STATUS )
- }{
- Sets the Report attribute for Object MAP to the value 1 and
- the Zoom attribute to 25.0.
- }
- \sstexamplesubsection{
- CALL AST\_SET( FRAME, 'Label( 1 ) =Offset from cluster axis', STATUS )
- }{
- Sets the Label(1) attribute for Object FRAME to a suitable
- string.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Attribute names are not case sensitive and may be surrounded
- by white space.
-
- \sstitem
- White space may also surround attribute values, where it will
- generally be ignored (except for string-valued attributes where
- it is significant and forms part of the value to be assigned).
-
- \sstitem
- It is not possible to include a comma in the value to be
- assigned to an attribute using this routine. If such a value is
- needed, then AST\_SETC should be used instead.
-
- \sstitem
- An error will result if an attempt is made to set a value for
- a read-only attribute.
- }
- }
-}
-\sstroutine{
- AST\_ADDFRAME\sstlabel{AST_ADDFRAME}
-}{
- Add a Frame to a FrameSet to define a new coordinate system
-}{
- \sstdescription{
- This routine adds a new \htmlref{Frame}{Frame} and an associated \htmlref{Mapping}{Mapping} to a
- \htmlref{FrameSet}{FrameSet} so as to define a new coordinate system, derived from
- one which already exists within the FrameSet. The new Frame then
- becomes the FrameSet's current Frame.
-
- This routine
- may also be used to merge two FrameSets, or to append extra axes
- to every Frame in a FrameSet.
- }
- \sstinvocation{
- CALL AST\_ADDFRAME( THIS, IFRAME, MAP, FRAME, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the FrameSet.
- }
- \sstsubsection{
- IFRAME = INTEGER (Given)
- }{
- The index of the Frame within the FrameSet which describes
- the coordinate system upon which the new one is to be based.
- This value should lie in the range from 1 to the number of
- Frames already in the FrameSet (as given by its \htmlref{Nframe}{Nframe}
- attribute). As a special case, AST\_\_ALLFRAMES may be supplied,
- in which case the axes defined by the supplied Frame are appended
- to every Frame in the FrameSet (see the Notes section for details).
- }
- \sstsubsection{
- MAP = INTEGER (Given)
- }{
- Pointer to a Mapping which describes how to convert
- coordinates from the old coordinate system (described by the
- Frame with index IFRAME) into coordinates in the new
- system. The Mapping's forward transformation should perform
- this conversion, and its inverse transformation should
- convert in the opposite direction. The supplied Mapping is ignored
- if parameter IFRAME is equal to AST\_\_ALLFRAMES.
- }
- \sstsubsection{
- FRAME = INTEGER (Given)
- }{
- Pointer to a Frame that describes the new coordinate system.
- Any class of Frame may be supplied (including Regions and
- FrameSets).
-
- This routine may also be used to merge two FrameSets by
- supplying a pointer to a second FrameSet for this argument
- (see the Notes section for details).
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A value of AST\_\_BASE or AST\_\_CURRENT may be given for the
- IFRAME argument to specify the base Frame or the current
- Frame respectively.
-
- \sstitem
- This routine sets the value of the \htmlref{Current}{Current} attribute for the
- FrameSet so that the new Frame subsequently becomes the current
- Frame.
-
- \sstitem
- The number of input coordinate values accepted by the supplied
- Mapping (its \htmlref{Nin}{Nin} attribute) must match the number of axes in the
- Frame identified by the IFRAME argument. Similarly, the
- number of output coordinate values generated by this Mapping
- (its \htmlref{Nout}{Nout} attribute) must match the number of axes in the new
- Frame.
-
- \sstitem
- As a special case, if a pointer to a FrameSet is given for the
- FRAME argument, this is treated as a request to merge a pair of
- FrameSets. This is done by appending all the new Frames (in the
- FRAME FrameSet) to the original FrameSet, while preserving
- their order and retaining all the inter-relationships
- (i.e. Mappings) between them. The two sets of Frames are
- inter-related within the merged FrameSet by using the Mapping
- supplied. This should convert between the Frame identified by
- the IFRAME argument (in the original FrameSet) and the current
- Frame of the FRAME FrameSet. This latter Frame becomes the
- current Frame in the merged FrameSet.
-
- \sstitem
- As another special case, if a value of AST\_\_ALLFRAMES is supplied
- for parameter
- IFRAME,
- then the supplied Mapping is ignored, and the axes defined by the
- supplied Frame are appended to each Frame in the FrameSet. In detail,
- each Frame in the FrameSet is replaced by a \htmlref{CmpFrame}{CmpFrame} containing the
- original Frame and the Frame specified by parameter
- FRAME.
- In addition, each Mapping in the FrameSet is replaced by a \htmlref{CmpMap}{CmpMap}
- containing the original Mapping and a \htmlref{UnitMap}{UnitMap} in parallel. The Nin and
- Nout attributes of the UnitMap are set equal to the number of axes
- in the supplied Frame. Each new CmpMap is simplified using
- \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}
- before being stored in the FrameSet.
- }
- }
-}
-\sstroutine{
- AST\_ANGLE\sstlabel{AST_ANGLE}
-}{
- Calculate the angle subtended by two points at a third point
-}{
- \sstdescription{
- This routine
- finds the angle at point B between the line joining points A and B,
- and the line joining points C and B. These lines will in fact be
- geodesic curves appropriate to the \htmlref{Frame}{Frame} in use. For instance, in
- \htmlref{SkyFrame}{SkyFrame}, they will be great circles.
- }
- \sstinvocation{
- RESULT = AST\_ANGLE( THIS, A, B, C, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Frame.
- }
- \sstsubsection{
- A( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each Frame axis
- (\htmlref{Naxes}{Naxes} attribute) containing the coordinates of the first point.
- }
- \sstsubsection{
- B( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each Frame axis
- (Naxes attribute) containing the coordinates of the second point.
- }
- \sstsubsection{
- C( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each Frame axis
- (Naxes attribute) containing the coordinates of the third point.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_ANGLE = DOUBLE PRECISION
- }{
- The angle in radians, from the line AB to the line CB. If the
- Frame is 2-dimensional, it will be in the range \$$\backslash$pm $\backslash$pi\$,
- and positive rotation is in the same sense as rotation from
- the positive direction of axis 2 to the positive direction of
- axis 1. If the Frame has more than 2 axes, a positive value will
- always be returned in the range zero to \$$\backslash$pi\$.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A value of AST\_\_BAD will also be returned if points A and B are
- co-incident, or if points B and C are co-incident.
-
- \sstitem
- A value of AST\_\_BAD will also be returned if this function is
- invoked with STATUS set to an error value, or if it should fail for
- any reason.
- }
- }
-}
-\sstroutine{
- AST\_ANNUL\sstlabel{AST_ANNUL}
-}{
- Annul a pointer to an Object
-}{
- \sstdescription{
- This routine annuls a pointer to an \htmlref{Object}{Object} so that it is no
- longer recognised as a valid pointer by the AST library. Any
- resources associated with the pointer are released and made
- available for re-use.
-
- This routine also decrements the Object's \htmlref{RefCount}{RefCount} attribute by
- one. If this attribute reaches zero (which happens when the last
- pointer to the Object is annulled), then the Object is deleted.
- }
- \sstinvocation{
- CALL AST\_ANNUL( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given and Returned)
- }{
- The Object pointer to be annulled. A null pointer value (AST\_\_NULL)
- is always returned.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This routine applies to all Objects.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This routine attempts to execute even if STATUS is set to an
- error value
- on entry, although no further error report will be
- made if it subsequently fails under these circumstances. In
- particular, it will fail if the pointer suppled is not valid,
- but this will only be reported if the error status is clear on
- entry.
- }
- }
-}
-\sstroutine{
- AST\_AXANGLE\sstlabel{AST_AXANGLE}
-}{
- Returns the angle from an axis, to a line through two points
-}{
- \sstdescription{
- This routine
- finds the angle, as seen from point A, between the positive
- direction of a specified axis, and the geodesic curve joining point
- A to point B.
- }
- \sstinvocation{
- RESULT = AST\_AXANGLE( THIS, A, B, AXIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the \htmlref{Frame}{Frame}.
- }
- \sstsubsection{
- A( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each Frame axis
- (\htmlref{Naxes}{Naxes} attribute) containing the coordinates of the first point.
- }
- \sstsubsection{
- B( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each Frame axis
- (Naxes attribute) containing the coordinates of the second point.
- }
- \sstsubsection{
- AXIS = INTEGER (Given)
- }{
- The number of the Frame axis from which the angle is to be
- measured (axis numbering starts at 1 for the first axis).
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_AXANGLE = DOUBLE PRECISION
- }{
- The angle in radians, from the positive direction of the
- specified axis, to the line AB. If the Frame is 2-dimensional,
- it will be in the range [-PI/2,$+$PI/2], and positive rotation is in
- the same sense as rotation from the positive direction of axis 2
- to the positive direction of axis 1. If the Frame has more than 2
- axes, a positive value will always be returned in the range zero
- to PI.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The geodesic curve used by this routine is the path of
- shortest distance between two points, as defined by the
- \htmlref{AST\_DISTANCE}{AST_DISTANCE} function.
-
- \sstitem
- This function will return {\tt{"}}bad{\tt{"}} coordinate values (AST\_\_BAD)
- if any of the input coordinates has this value, or if the require
- position angle is undefined.
- }
- }
-}
-\sstroutine{
- AST\_AXDISTANCE\sstlabel{AST_AXDISTANCE}
-}{
- Find the distance between two axis values
-}{
- \sstdescription{
- This routine returns a signed value representing the axis increment
- from axis value v1 to axis value v2.
-
- For a simple \htmlref{Frame}{Frame}, this is a trivial operation returning the
- difference between the two axis values. But for other derived classes
- of Frame (such as a \htmlref{SkyFrame}{SkyFrame}) this is not the case.
- }
- \sstinvocation{
- RESULT = AST\_AXDISTANCE( THIS, AXIS, V1, V2, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Frame.
- }
- \sstsubsection{
- AXIS = INTEGER (Given)
- }{
- The index of the axis to which the supplied values refer. The
- first axis has index 1.
- }
- \sstsubsection{
- V1 = DOUBLE PRECISION (Given)
- }{
- The first axis value.
- }
- \sstsubsection{
- V2 = DOUBLE PRECISION (Given)
- }{
- The second axis value.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_AXDISTANCE = DOUBLE PRECISION
- }{
- The distance from the first to the second axis value.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function will return a {\tt{"}}bad{\tt{"}} result value (AST\_\_BAD) if
- any of the input values has this value.
-
- \sstitem
- A {\tt{"}}bad{\tt{"}} value will also be returned if this function is
- invoked with STATUS set to an error value, or if it should fail for
- any reason.
- }
- }
-}
-\sstroutine{
- AST\_AXOFFSET\sstlabel{AST_AXOFFSET}
-}{
- Add an increment onto a supplied axis value
-}{
- \sstdescription{
- This routine returns an axis value formed by adding a signed axis
- increment onto a supplied axis value.
-
- For a simple \htmlref{Frame}{Frame}, this is a trivial operation returning the
- sum of the two supplied values. But for other derived classes
- of Frame (such as a \htmlref{SkyFrame}{SkyFrame}) this is not the case.
- }
- \sstinvocation{
- RESULT = AST\_AXOFFSET( THIS, AXIS, V1, DIST, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Frame.
- }
- \sstsubsection{
- AXIS = INTEGER (Given)
- }{
- The index of the axis to which the supplied values refer. The
- first axis has index 1.
- }
- \sstsubsection{
- V1 = DOUBLE PRECISION (Given)
- }{
- The original axis value.
- }
- \sstsubsection{
- DIST = DOUBLE PRECISION (Given)
- }{
- The axis increment to add to the original axis value.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_AXOFFSET = DOUBLE PRECISION
- }{
- The incremented axis value.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function will return a {\tt{"}}bad{\tt{"}} result value (AST\_\_BAD) if
- any of the input values has this value.
-
- \sstitem
- A {\tt{"}}bad{\tt{"}} value will also be returned if this function is
- invoked with STATUS set to an error value, or if it should fail for
- any reason.
- }
- }
-}
-\sstroutine{
- AST\_BEGIN\sstlabel{AST_BEGIN}
-}{
- Begin a new AST context
-}{
- \sstdescription{
- This routine begins a new AST context. Any \htmlref{Object}{Object} pointers
- created within this context will be annulled when it is later
- ended using \htmlref{AST\_END}{AST_END} (just as if \htmlref{AST\_ANNUL}{AST_ANNUL} had been invoked),
- unless they have first been exported using \htmlref{AST\_EXPORT}{AST_EXPORT} or rendered
- exempt using \htmlref{AST\_EXEMPT}{AST_EXEMPT}. If
- annulling a pointer causes an Object's \htmlref{RefCount}{RefCount} attribute to
- fall to zero (which happens when the last pointer to it is
- annulled), then the Object will be deleted.
- }
- \sstinvocation{
- CALL AST\_BEGIN( STATUS )
- }
- \sstarguments{
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This routine applies to all Objects.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This routine attempts to execute even if STATUS is set to an
- error value.
-
- \sstitem
- Contexts delimited by AST\_BEGIN and AST\_END may be nested to any
- depth.
- }
- }
-}
-\sstroutine{
- AST\_BORDER\sstlabel{AST_BORDER}
-}{
- Draw a border around valid regions of a Plot
-}{
- \sstdescription{
- This function draws a (line) border around regions of the
- plotting area of a \htmlref{Plot}{Plot} which correspond to valid, unclipped
- physical coordinates. For example, when plotting using an
- all-sky map projection, this function could be used to draw the
- boundary of the celestial sphere when it is projected on to the
- plotting surface.
-
- If the entire plotting area contains valid, unclipped physical
- coordinates, then the boundary will just be a rectangular box
- around the edges of the plotting area.
-
- If the Plot is a \htmlref{Plot3D}{Plot3D}, this method is applied individually to
- each of the three 2D Plots encapsulated within the Plot3D (each of
- these Plots corresponds to a single 2D plane in the 3D graphics
- system). In addition, if the entire plotting volume has valid
- coordinates in the 3D current \htmlref{Frame}{Frame} of the Plot3D, then additional
- lines are drawn along the edges of the 3D plotting volume so that
- the entire plotting volume is enclosed within a cuboid grid.
- }
- \sstinvocation{
- RESULT = AST\_BORDER( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Plot.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_BORDER = LOGICAL
- }{
- .FALSE. is returned if the plotting space is completely filled by
- valid, unclipped physical coordinates (so that only a
- rectangular box was drawn around the edge). Otherwise, .TRUE. is
- returned.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A value of .FALSE. will be returned if this function is invoked
- with STATUS set to an error value, or if it should fail for any
- reason.
-
- \sstitem
- An error results if either the current Frame or the base Frame
- of the Plot is not 2-dimensional or (for a Plot3D) 3-dimensional.
-
- \sstitem
- An error also results if the transformation between the base
- and current Frames of the Plot is not defined (i.e. the Plot's
- \htmlref{TranForward}{TranForward} attribute is zero).
- }
- }
-}
-\sstroutine{
- AST\_BOUNDINGBOX\sstlabel{AST_BOUNDINGBOX}
-}{
- Return a bounding box for previously drawn graphics
-}{
- \sstdescription{
- This routine returns the bounds of a box which just encompasess the
- graphics produced by the previous call to any of the \htmlref{Plot}{Plot} methods
- which produce graphical output. If no such previous call has yet
- been made, or if the call failed for any reason, then the bounding box
- returned by this routine is undefined.
- }
- \sstinvocation{
- CALL AST\_BOUNDINGBOX( THIS, LBND, UBND, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Plot.
- }
- \sstsubsection{
- LBND( 2 ) = REAL (Returned)
- }{
- A two element array in which is returned the lower limits of the
- bounding box on each of the two axes of the graphics coordinate
- system (the base \htmlref{Frame}{Frame} of the Plot).
- }
- \sstsubsection{
- UBND( 2 ) = REAL (Returned)
- }{
- A two element array in which is returned the upper limits of the
- bounding box on each of the two axes of the graphics coordinate
- system (the base Frame of the Plot).
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- An error results if the base Frame of the Plot is not
- 2-dimensional.
- }
- }
-}
-\sstroutine{
- AST\_BOX\sstlabel{AST_BOX}
-}{
- Create a Box
-}{
- \sstdescription{
- This function creates a new \htmlref{Box}{Box} and optionally initialises its
- attributes.
-
- The Box class implements a \htmlref{Region}{Region} which represents a box with sides
- parallel to the axes of a \htmlref{Frame}{Frame} (i.e. an area which encloses a given
- range of values on each axis). A Box is similar to an \htmlref{Interval}{Interval}, the
- only real difference being that the Interval class allows some axis
- limits to be unspecified. Note, a Box will only look like a box if
- the Frame geometry is approximately flat. For instance, a Box centred
- close to a pole in a \htmlref{SkyFrame}{SkyFrame} will look more like a fan than a box
- (the \htmlref{Polygon}{Polygon} class can be used to create a box-like region close to a
- pole).
- }
- \sstinvocation{
- RESULT = AST\_BOX( FRAME, FORM, POINT1, POINT2, UNC, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- FRAME = INTEGER (Given)
- }{
- A pointer to the Frame in which the region is defined. A deep
- copy is taken of the supplied Frame. This means that any
- subsequent changes made to the Frame using the supplied pointer
- will have no effect the Region.
- }
- \sstsubsection{
- FORM = INTEGER (Given)
- }{
- Indicates how the box is described by the remaining parameters.
- A value of zero indicates that the box is specified by a centre
- position and a corner position. A value of one indicates that the
- box is specified by a two opposite corner positions.
- }
- \sstsubsection{
- POINT1( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each Frame axis
- (\htmlref{Naxes}{Naxes} attribute). If
- FORM
- is zero, this array should contain the coordinates at the centre of
- the box.
- If FORM
- is one, it should contain the coordinates at the corner of the box
- which is diagonally opposite the corner specified by
- POINT2.
- }
- \sstsubsection{
- POINT2( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each Frame axis
- (Naxes attribute) containing the coordinates at any corner of the
- box.
- }
- \sstsubsection{
- UNC = INTEGER (Given)
- }{
- An optional pointer to an existing Region which specifies the
- uncertainties associated with the boundary of the Box being created.
- The uncertainty in any point on the boundary of the Box is found by
- shifting the supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at
- the boundary point being considered. The area covered by the
- shifted uncertainty Region then represents the uncertainty in the
- boundary position. The uncertainty is assumed to be the same for
- all points.
-
- If supplied, the uncertainty Region must be of a class for which
- all instances are centro-symetric (e.g. Box, \htmlref{Circle}{Circle}, \htmlref{Ellipse}{Ellipse}, etc.)
- or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
- copy of the supplied Region will be taken, so subsequent changes to
- the uncertainty Region using the supplied pointer will have no
- effect on the created Box. Alternatively,
- a null \htmlref{Object}{Object} pointer (AST\_\_NULL)
- may be supplied, in which case a default uncertainty is used
- equivalent to a box 1.0E-6 of the size of the Box being created.
-
- The uncertainty Region has two uses: 1) when the
- \htmlref{AST\_OVERLAP}{AST_OVERLAP}
- function compares two Regions for equality the uncertainty
- Region is used to determine the tolerance on the comparison, and 2)
- when a Region is mapped into a different coordinate system and
- subsequently simplified (using
- \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}),
- the uncertainties are used to determine if the transformed boundary
- can be accurately represented by a specific shape of Region.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new Box. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_BOX = INTEGER
- }{
- A pointer to the new Box.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- AST\_CHANNEL\sstlabel{AST_CHANNEL}
-}{
- Create a Channel
-}{
- \sstdescription{
- This function creates a new \htmlref{Channel}{Channel} and optionally initialises
- its attributes.
-
- A Channel implements low-level input/output for the AST library.
- Writing an \htmlref{Object}{Object} to a Channel (using \htmlref{AST\_WRITE}{AST_WRITE}) will generate a
- textual representation of that Object, and reading from a
- Channel (using \htmlref{AST\_READ}{AST_READ}) will create a new Object from its
- textual representation.
-
- Normally, when you use a Channel, you should provide {\tt{"}}source{\tt{"}}
- and {\tt{"}}sink{\tt{"}} routines which connect it to an external data store
- by reading and writing the resulting text. By default, however,
- a Channel will read from standard input and write to standard
- output.
- }
- \sstinvocation{
- RESULT = AST\_CHANNEL( SOURCE, SINK, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- SOURCE = SUBROUTINE (Given)
- }{
- A source routine, which is a subroutine which takes a single
- integer error status argument. This routine will be used by
- the Channel to obtain lines of input text. On each
- invocation, it should read the next input line from some
- external data store, and then return the resulting text to
- the AST library by calling \htmlref{AST\_PUTLINE}{AST_PUTLINE}. It should supply a
- negative line length when there are no more lines to read.
- If an error occurs, it should set its own error status
- argument to an error value before returning.
-
- If the null routine AST\_NULL is suppied as the SOURCE value,
- the Channel will read from standard input instead.
- }
- \sstsubsection{
- SINK = SUBROUTINE (Given)
- }{
- A sink routine, which is a subroutine which takes a single
- integer error status argument. This routine will be used by
- the Channel to deliver lines of output text. On each
- invocation, it should obtain the next output line from the
- AST library by calling \htmlref{AST\_GETLINE}{AST_GETLINE}, and then deliver the
- resulting text to some external data store. If an error
- occurs, it should set its own error status argument to an
- error value before returning.
-
- If the null routine AST\_NULL is suppied as the SINK value,
- the Channel will write to standard output instead.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new Channel. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_CHANNEL = INTEGER
- }{
- A pointer to the new Channel.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The names of the routines supplied for the SOURCE and SINK
- arguments should appear in EXTERNAL statements in the Fortran
- routine which invokes AST\_CHANNEL. However, this is not generally
- necessary for the null routine AST\_NULL (so long as the AST\_PAR
- include file has been used).
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
-
- \sstitem
- Note that the null routine AST\_NULL (one underscore) is
- different to AST\_\_NULL (two underscores), which is the null Object
- pointer.
- }
- }
-}
-\sstroutine{
- AST\_CIRCLE\sstlabel{AST_CIRCLE}
-}{
- Create a Circle
-}{
- \sstdescription{
- This function creates a new \htmlref{Circle}{Circle} and optionally initialises its
- attributes.
-
- A Circle is a \htmlref{Region}{Region} which represents a circle or sphere within the
- supplied \htmlref{Frame}{Frame}.
- }
- \sstinvocation{
- RESULT = AST\_CIRCLE( FRAME, FORM, CENTRE, POINT, UNC, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- FRAME = INTEGER (Given)
- }{
- A pointer to the Frame in which the region is defined. A deep
- copy is taken of the supplied Frame. This means that any
- subsequent changes made to the Frame using the supplied pointer
- will have no effect the Region.
- }
- \sstsubsection{
- FORM = INTEGER (Given)
- }{
- Indicates how the circle is described by the remaining parameters.
- A value of zero indicates that the circle is specified by a
- centre position and a position on the circumference. A value of one
- indicates that the circle is specified by a centre position and a
- scalar radius.
- }
- \sstsubsection{
- CENTRE( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each Frame axis
- (\htmlref{Naxes}{Naxes} attribute) containing the coordinates at the centre of
- the circle or sphere.
- }
- \sstsubsection{
- POINT( $*$ ) = DOUBLE PRECISION (Given)
- }{
- If FORM
- is zero, then this array should have one element for each Frame
- axis (Naxes attribute), and should be supplied holding the
- coordinates at a point on the circumference of the circle or sphere.
- If FORM
- is one, then this array should have one element only which should
- be supplied holding the scalar radius of the circle or sphere,
- as a geodesic distance within the Frame.
- }
- \sstsubsection{
- UNC = INTEGER (Given)
- }{
- An optional pointer to an existing Region which specifies the
- uncertainties associated with the boundary of the Circle being created.
- The uncertainty in any point on the boundary of the Circle is found by
- shifting the supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at
- the boundary point being considered. The area covered by the
- shifted uncertainty Region then represents the uncertainty in the
- boundary position. The uncertainty is assumed to be the same for
- all points.
-
- If supplied, the uncertainty Region must be of a class for which
- all instances are centro-symetric (e.g. \htmlref{Box}{Box}, Circle, \htmlref{Ellipse}{Ellipse}, etc.)
- or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
- copy of the supplied Region will be taken, so subsequent changes to
- the uncertainty Region using the supplied pointer will have no
- effect on the created Circle. Alternatively,
- a null \htmlref{Object}{Object} pointer (AST\_\_NULL)
- may be supplied, in which case a default uncertainty is used
- equivalent to a box 1.0E-6 of the size of the Circle being created.
-
- The uncertainty Region has two uses: 1) when the
- \htmlref{AST\_OVERLAP}{AST_OVERLAP}
- function compares two Regions for equality the uncertainty
- Region is used to determine the tolerance on the comparison, and 2)
- when a Region is mapped into a different coordinate system and
- subsequently simplified (using
- \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}),
- the uncertainties are used to determine if the transformed boundary
- can be accurately represented by a specific shape of Region.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new Circle. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_CIRCLE = INTEGER
- }{
- A pointer to the new Circle.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_CIRCLEPARS\sstlabel{AST_CIRCLEPARS}
-}{
- Returns the geometric parameters of an Circle
-}{
- \sstdescription{
- This routine
- returns the geometric parameters describing the supplied \htmlref{Circle}{Circle}.
- }
- \sstinvocation{
- CALL AST\_CIRCLEPARS( THIS, CENTRE, RADIUS, P1, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the \htmlref{Region}{Region}.
- }
- \sstsubsection{
- CENTRE( $*$ ) = DOUBLE PRECISION (Returned)
- }{
- An array
- in which to return the coordinates of the Circle centre.
- The length of this array should be no less than the number of
- axes in the associated coordinate system.
- }
- \sstsubsection{
- RADIUS = DOUBLE PRECISION (Returned)
- }{
- Returned holding the radius of the Circle, as an geodesic
- distance in the associated coordinate system.
- }
- \sstsubsection{
- P1( $*$ ) = DOUBLE PRECISION (Returned)
- }{
- An array
- in which to return the coordinates of a point on the
- circumference of the Circle. The length of this array should be
- no less than the number of axes in the associated coordinate system.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the coordinate system represented by the Circle has been
- changed since it was first created, the returned parameters refer
- to the new (changed) coordinate system, rather than the original
- coordinate system. Note however that if the transformation from
- original to new coordinate system is non-linear, the shape
- represented by the supplied Circle object may not be an accurate
- circle.
- }
- }
-}
-\sstroutine{
- AST\_CLEAR\sstlabel{AST_CLEAR}
-}{
- Clear attribute values for an Object
-}{
- \sstdescription{
- This routine clears the values of a specified set of attributes
- for an \htmlref{Object}{Object}. Clearing an attribute cancels any value that has
- previously been explicitly set for it, so that the standard
- default attribute value will subsequently be used instead. This
- also causes the \htmlref{AST\_TEST}{AST_TEST} function to return the value .FALSE. for
- the attribute, indicating that no value has been set.
- }
- \sstinvocation{
- CALL AST\_CLEAR( THIS, ATTRIB, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Object.
- }
- \sstsubsection{
- ATTRIB = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing a comma-separated list of the
- names of the attributes to be cleared.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This routine applies to all Objects.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Attribute names are not case sensitive and may be surrounded
- by white space.
-
- \sstitem
- It does no harm to clear an attribute whose value has not been
- set.
-
- \sstitem
- An error will result if an attempt is made to clear the value
- of a read-only attribute.
- }
- }
-}
-\sstroutine{
- AST\_CLIP\sstlabel{AST_CLIP}
-}{
- Set up or remove clipping for a Plot
-}{
- \sstdescription{
- This routine defines regions of a \htmlref{Plot}{Plot} which are to be clipped.
- Any subsequent graphical output created using the Plot will then
- be visible only within the unclipped regions of the plotting
- area. See also the \htmlref{Clip}{Clip} attribute.
- }
- \sstinvocation{
- CALL AST\_CLIP( THIS, IFRAME, LBND, UBND, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Plot.
- }
- \sstsubsection{
- IFRAME = INTEGER (Given)
- }{
- The index of the \htmlref{Frame}{Frame} within the Plot to which the clipping
- limits supplied in LBND and UBND (below) refer. Clipping
- may be applied to any of the coordinate systems associated
- with a Plot (as defined by the Frames it contains), so this
- index may take any value from 1 to the number of Frames in
- the Plot (\htmlref{Nframe}{Nframe} attribute). In addition, the values
- AST\_\_BASE and AST\_\_CURRENT may be used to specify the base
- and current Frames respectively.
-
- For example, a value of AST\_\_CURRENT causes clipping to be
- performed in physical coordinates, while a value of AST\_\_BASE
- would clip in graphical coordinates. Clipping may also be
- removed completely by giving a value of AST\_\_NOFRAME. In this
- case any clipping bounds supplied (below) are ignored.
- }
- \sstsubsection{
- LBND( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each axis of the clipping Frame
- (identified by the index IFRAME). This should contain the
- lower bound, on each axis, of the region which is to remain
- visible (unclipped).
- }
- \sstsubsection{
- UBND( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each axis of the clipping Frame
- (identified by the index IFRAME). This should contain the
- upper bound, on each axis, of the region which is to remain
- visible (unclipped).
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Only one clipping Frame may be active at a time. This routine
- will deactivate any previously-established clipping Frame before
- setting up new clipping limits.
-
- \sstitem
- The clipping produced by this routine is in addition to that
- specified by the Clip attribute which occurs at the edges of the
- plotting area
- established when the Plot is created (see \htmlref{AST\_PLOT}{AST_PLOT}). The
- underlying graphics system may also impose further clipping.
-
- \sstitem
- When testing a graphical position for clipping, it is first
- transformed into the clipping Frame. The resulting coordinate on
- each axis is then checked against the clipping limits (given by
- LBND and UBND). By default, a position is clipped if any
- coordinate lies outside these limits. However, if a non-zero
- value is assigned to the Plot's \htmlref{ClipOp}{ClipOp} attribute, then a
- position is only clipped if the coordinates on all axes lie
- outside their clipping limits.
-
- \sstitem
- If the lower clipping limit exceeds the upper limit for any
- axis, then the sense of clipping for that axis is reversed (so
- that coordinate values lying between the limits are clipped
- instead of those lying outside the limits). To produce a {\tt{"}}hole{\tt{"}}
- in a coordinate space (that is, an internal region where nothing
- is plotted), you should supply all the bounds in reversed order,
- and set the ClipOp attribute for the Plot to a non-zero value.
-
- \sstitem
- Either clipping limit may be set to the value AST\_\_BAD, which
- is equivalent to setting it to infinity (or minus infinity for a
- lower bound) so that it is not used.
-
- \sstitem
- If a graphical position results in any bad coordinate values
- (AST\_\_BAD) when transformed into the clipping Frame, then it is
- treated (for the purposes of producing graphical output) as if
- it were clipped.
-
- \sstitem
- When a Plot is used as a \htmlref{Mapping}{Mapping} to transform points
- (e.g. using \htmlref{AST\_TRAN2}{AST_TRAN2}), any clipped output points are assigned
- coordinate values of AST\_\_BAD.
-
- \sstitem
- An error results if the base Frame of the Plot is not
- 2-dimensional.
- }
- }
-}
-\sstroutine{
- AST\_CLONE\sstlabel{AST_CLONE}
-}{
- Clone (duplicate) an Object pointer
-}{
- \sstdescription{
- This function returns a duplicate pointer to an existing
- \htmlref{Object}{Object}. It also increments the Object's \htmlref{RefCount}{RefCount} attribute to
- keep track of how many pointers have been issued.
-
- Note that this function is NOT equivalent to an assignment
- statement, as in general the two pointers will not have the same
- value.
- }
- \sstinvocation{
- RESULT = AST\_CLONE( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Original pointer to the Object.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This function applies to all Objects.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_CLONE = INTEGER
- }{
- A duplicate pointer to the same Object.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_CMPFRAME\sstlabel{AST_CMPFRAME}
-}{
- Create a CmpFrame
-}{
- \sstdescription{
- This function creates a new \htmlref{CmpFrame}{CmpFrame} and optionally initialises
- its attributes.
-
- A CmpFrame is a compound \htmlref{Frame}{Frame} which allows two component Frames
- (of any class) to be merged together to form a more complex
- Frame. The axes of the two component Frames then appear together
- in the resulting CmpFrame (those of the first Frame, followed by
- those of the second Frame).
-
- Since a CmpFrame is itself a Frame, it can be used as a
- component in forming further CmpFrames. Frames of arbitrary
- complexity may be built from simple individual Frames in this
- way.
-
- Also since a Frame is a \htmlref{Mapping}{Mapping}, a CmpFrame can also be used as a
- Mapping. Normally, a CmpFrame is simply equivalent to a \htmlref{UnitMap}{UnitMap},
- but if either of the component Frames within a CmpFrame is a \htmlref{Region}{Region}
- (a sub-class of Frame), then the CmpFrame will use the Region as a
- Mapping when transforming values for axes described by the Region.
- Thus input axis values corresponding to positions which are outside the
- Region will result in bad output axis values.
- }
- \sstinvocation{
- RESULT = AST\_CMPFRAME( FRAME1, FRAME2, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- FRAME1 = INTEGER (Given)
- }{
- Pointer to the first component Frame.
- }
- \sstsubsection{
- FRAME2 = INTEGER (Given)
- }{
- Pointer to the second component Frame.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new CmpFrame. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_CMPFRAME = INTEGER
- }{
- A pointer to the new CmpFrame.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- AST\_CMPMAP\sstlabel{AST_CMPMAP}
-}{
- Create a CmpMap
-}{
- \sstdescription{
- This function creates a new \htmlref{CmpMap}{CmpMap} and optionally initialises
- its attributes.
-
- A CmpMap is a compound \htmlref{Mapping}{Mapping} which allows two component
- Mappings (of any class) to be connected together to form a more
- complex Mapping. This connection may either be {\tt{"}}in series{\tt{"}}
- (where the first Mapping is used to transform the coordinates of
- each point and the second mapping is then applied to the
- result), or {\tt{"}}in parallel{\tt{"}} (where one Mapping transforms the
- earlier coordinates for each point and the second Mapping
- simultaneously transforms the later coordinates).
-
- Since a CmpMap is itself a Mapping, it can be used as a
- component in forming further CmpMaps. Mappings of arbitrary
- complexity may be built from simple individual Mappings in this
- way.
- }
- \sstinvocation{
- RESULT = AST\_CMPMAP( MAP1, MAP2, SERIES, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- MAP1 = INTEGER (Given)
- }{
- Pointer to the first component Mapping.
- }
- \sstsubsection{
- MAP2 = INTEGER (Given)
- }{
- Pointer to the second component Mapping.
- }
- \sstsubsection{
- SERIES = LOGICAL (Given)
- }{
- If a .TRUE. value is given for this argument, the two
- component Mappings will be connected in series. A
- .FALSE. value requests that they are connected in parallel.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new CmpMap. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_CMPMAP = INTEGER
- }{
- A pointer to the new CmpMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the component Mappings are connected in series, then using
- the resulting CmpMap to transform coordinates will cause the
- first Mapping to be applied, followed by the second Mapping. If
- the inverse CmpMap transformation is requested, the two
- component Mappings will be applied in both the reverse order and
- the reverse direction.
-
- \sstitem
- When connecting two component Mappings in series, the number
- of output coordinates generated by the first Mapping (its \htmlref{Nout}{Nout}
- attribute) must equal the number of input coordinates accepted
- by the second Mapping (its \htmlref{Nin}{Nin} attribute).
-
- \sstitem
- If the component Mappings of a CmpMap are connected in
- parallel, then the first Mapping will be used to transform the
- earlier input coordinates for each point (and to produce the
- earlier output coordinates) and the second Mapping will be used
- simultaneously to transform the remaining input coordinates (to
- produce the remaining output coordinates for each point). If the
- inverse transformation is requested, each Mapping will still be
- applied to the same coordinates, but in the reverse direction.
-
- \sstitem
- When connecting two component Mappings in parallel, there is
- no restriction on the number of input and output coordinates for
- each Mapping.
-
- \sstitem
- Note that the component Mappings supplied are not copied by
- AST\_CMPMAP (the new CmpMap simply retains a reference to
- them). They may continue to be used for other purposes, but
- should not be deleted. If a CmpMap containing a copy of its
- component Mappings is required, then a copy of the CmpMap should
- be made using \htmlref{AST\_COPY}{AST_COPY}.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_CMPREGION\sstlabel{AST_CMPREGION}
-}{
- Create a CmpRegion
-}{
- \sstdescription{
- This function creates a new \htmlref{CmpRegion}{CmpRegion} and optionally initialises
- its attributes.
-
- A CmpRegion is a \htmlref{Region}{Region} which allows two component
- Regions (of any class) to be combined to form a more complex
- Region. This combination may be performed a boolean AND, OR
- or XOR (exclusive OR) operator. If the AND operator is
- used, then a position is inside the CmpRegion only if it is
- inside both of its two component Regions. If the OR operator is
- used, then a position is inside the CmpRegion if it is inside
- either (or both) of its two component Regions. If the XOR operator
- is used, then a position is inside the CmpRegion if it is inside
- one but not both of its two component Regions. Other operators can
- be formed by negating one or both component Regions before using
- them to construct a new CmpRegion.
-
- The two component Region need not refer to the same coordinate
- \htmlref{Frame}{Frame}, but it must be possible for the
- \htmlref{AST\_CONVERT}{AST_CONVERT}
- function to determine a \htmlref{Mapping}{Mapping} between them (an error will be
- reported otherwise when the CmpRegion is created). For instance,
- a CmpRegion may combine a Region defined within an ICRS \htmlref{SkyFrame}{SkyFrame}
- with a Region defined within a Galactic SkyFrame. This is
- acceptable because the SkyFrame class knows how to convert between
- these two systems, and consequently the
- AST\_CONVERT
- function will also be able to convert between them. In such cases,
- the second component Region will be mapped into the coordinate Frame
- of the first component Region, and the Frame represented by the
- CmpRegion as a whole will be the Frame of the first component Region.
-
- Since a CmpRegion is itself a Region, it can be used as a
- component in forming further CmpRegions. Regions of arbitrary
- complexity may be built from simple individual Regions in this
- way.
- }
- \sstinvocation{
- RESULT = AST\_CMPREGION( REGION1, REGION2, OPER, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- REGION1 = INTEGER (Given)
- }{
- Pointer to the first component Region.
- }
- \sstsubsection{
- REGION2 = INTEGER (Given)
- }{
- Pointer to the second component Region. This Region will be
- transformed into the coordinate Frame of the first region before
- use. An error will be reported if this is not possible.
- }
- \sstsubsection{
- OPER = INTEGER (Given)
- }{
- The boolean operator with which to combine the two Regions. This
- must be one of the symbolic constants AST\_\_AND, AST\_\_OR or AST\_\_XOR.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new CmpRegion. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_CMPREGION = INTEGER
- }{
- A pointer to the new CmpRegion.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If one of the supplied Regions has an associated uncertainty,
- that uncertainty will also be used for the returned CmpRegion.
- If both supplied Regions have associated uncertainties, the
- uncertainty associated with the first Region will be used for the
- returned CmpRegion.
-
- \sstitem
- Deep copies are taken of the supplied Regions. This means that
- any subsequent changes made to the component Regions using the
- supplied pointers will have no effect on the CmpRegion.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_CONVERT\sstlabel{AST_CONVERT}
-}{
- Determine how to convert between two coordinate systems
-}{
- \sstdescription{
- This function compares two Frames and determines whether it is
- possible to convert between the coordinate systems which they
- represent. If conversion is possible, it returns a \htmlref{FrameSet}{FrameSet}
- which describes the conversion and which may be used (as a
- \htmlref{Mapping}{Mapping}) to transform coordinate values in either direction.
-
- The same function may also be used to determine how to convert
- between two FrameSets (or between a \htmlref{Frame}{Frame} and a FrameSet, or
- vice versa). This mode is intended for use when (for example)
- two images have been calibrated by attaching a FrameSet to each.
- AST\_CONVERT might then be used to search for a
- celestial coordinate system that both images have in common, and
- the result could then be used to convert between the pixel
- coordinates of both images -- having effectively used their
- celestial coordinate systems to align them.
-
- When using FrameSets, there may be more than one possible
- intermediate coordinate system in which to perform the
- conversion (for instance, two FrameSets might both have
- celestial coordinates, detector coordinates, pixel coordinates,
- etc.). A comma-separated list of coordinate system domains may
- therefore be given which defines a priority order to use when
- selecting the intermediate coordinate system. The path used for
- conversion must go via an intermediate coordinate system whose
- \htmlref{Domain}{Domain} attribute matches one of the domains given. If conversion
- cannot be achieved using the first domain, the next one is
- considered, and so on, until success is achieved.
- }
- \sstinvocation{
- RESULT = AST\_CONVERT( FROM, TO, DOMAINLIST, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- FROM = INTEGER (Given)
- }{
- Pointer to a Frame which represents the {\tt{"}}source{\tt{"}} coordinate
- system. This is the coordinate system in which you already
- have coordinates available.
-
- If a FrameSet is given, its current Frame (as determined by
- its \htmlref{Current}{Current} attribute) is taken to describe the source
- coordinate system. Note that the \htmlref{Base}{Base} attribute of this
- FrameSet may be modified by this function to indicate which
- intermediate coordinate system was used (see under
- {\tt{"}}FrameSets{\tt{"}} in the {\tt{"}}Applicability{\tt{"}} section for details).
- }
- \sstsubsection{
- TO = INTEGER (Given)
- }{
- Pointer to a Frame which represents the {\tt{"}}destination{\tt{"}}
- coordinate system. This is the coordinate system into which
- you wish to convert your coordinates.
-
- If a FrameSet is given, its current Frame (as determined by
- its Current attribute) is taken to describe the destination
- coordinate system. Note that the Base attribute of this
- FrameSet may be modified by this function to indicate which
- intermediate coordinate system was used (see under
- {\tt{"}}FrameSets{\tt{"}} in the {\tt{"}}Applicability{\tt{"}} section for details).
- }
- \sstsubsection{
- DOMAINLIST = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing a
- comma-separated list of Frame domains. This may be used to
- define a priority order for the different intermediate
- coordinate systems that might be used to perform the
- conversion.
-
- The function will first try to obtain a conversion by making
- use only of an intermediate coordinate system whose Domain
- attribute matches the first domain in this list. If this
- fails, the second domain in the list will be used, and so on,
- until conversion is achieved. A blank domain (e.g. two
- consecutive commas) indicates that all coordinate systems
- should be considered, regardless of their domains.
-
- This list is case-insensitive and all white space is ignored.
- If you do not wish to restrict the domain in this way,
- you should supply a blank string. This is normally
- appropriate if either of the source or destination coordinate
- systems are described by Frames (rather than FrameSets),
- since there is then usually only one possible choice of
- intermediate coordinate system.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{DSBSpecFrame}{DSBSpecFrame}
- }{
- If the \htmlref{AlignSideBand}{AlignSideBand} attribute is non-zero, alignment occurs in the
- upper sideband expressed within the spectral system and standard of
- rest given by attributes \htmlref{AlignSystem}{AlignSystem} and \htmlref{AlignStdOfRest}{AlignStdOfRest}. If
- AlignSideBand is zero, the two DSBSpecFrames are aligned as if
- they were simple SpecFrames (i.e. the \htmlref{SideBand}{SideBand} is ignored).
- }
- \sstsubsection{
- Frame
- }{
- This function applies to all Frames. Alignment occurs within the
- coordinate system given by attribute AlignSystem.
- }
- \sstsubsection{
- FrameSet
- }{
- If either of the FROM or TO arguments is a pointer to a
- FrameSet, then AST\_CONVERT will attempt to convert from the
- coordinate system described by the current Frame of the FROM
- FrameSet to that described by the current Frame of the TO
- FrameSet.
-
- To achieve this, it will consider all of the Frames within
- each FrameSet as a possible way of reaching an intermediate
- coordinate system that can be used for the conversion. There
- is then the possibility that more than one conversion path
- may exist and, unless the choice is sufficiently restricted
- by the DOMAINLIST string, the sequence in which the Frames
- are considered can be important. In this case, the search
- for a conversion path proceeds as follows:
- \sstitemlist{
-
- \sstitem
- Each field in the DOMAINLIST string is considered in turn.
-
- \sstitem
- The Frames within each FrameSet are considered in a
- specific order: (1) the base Frame is always considered
- first, (2) after this come all the other Frames in
- Frame-index order (but omitting the base and current Frames),
- (3) the current Frame is always considered last. However, if
- either FrameSet's \htmlref{Invert}{Invert} attribute is set to a non-zero value
- (so that the FrameSet is inverted), then its Frames are
- considered in reverse order. (Note that this still means that
- the base Frame is considered first and the current Frame
- last, because the Invert value will also cause these Frames
- to swap places.)
-
- \sstitem
- All source Frames are first considered (in the appropriate
- order) for conversion to the first destination Frame. If no
- suitable intermediate coordinate system emerges, they are
- then considered again for conversion to the second
- destination Frame (in the appropriate order), and so on.
-
- \sstitem
- Generally, the first suitable intermediate coordinate
- system found is used. However, the overall Mapping between
- the source and destination coordinate systems is also
- examined. Preference is given to cases where both the
- forward and inverse transformations are defined (as indicated
- by the \htmlref{TranForward}{TranForward} and \htmlref{TranInverse}{TranInverse} attributes). If only one
- transformation is defined, the forward one is preferred.
-
- \sstitem
- If the domain of the intermediate coordinate system matches
- the current DOMAINLIST field, the conversion path is
- accepted. Otherwise, the next DOMAINLIST field is considered
- and the process repeated.
-
- }
- If conversion is possible, the Base attributes of the two
- FrameSets will be modified on exit to identify the Frames
- used to access the intermediate coordinate system which was
- finally accepted.
-
- Note that it is possible to force a particular Frame within a
- FrameSet to be used as the basis for the intermediate
- coordinate system, if it is suitable, by (a) focussing
- attention on
- it by specifying its domain in the DOMAINLIST string, or (b)
- making it the base Frame, since this is always considered
- first.
- }
- \sstsubsection{
- \htmlref{SpecFrame}{SpecFrame}
- }{
- Alignment occurs within the spectral system and standard of rest
- given by attributes AlignSystem and AlignStdOfRest.
- }
- \sstsubsection{
- \htmlref{TimeFrame}{TimeFrame}
- }{
- Alignment occurs within the time system and time scale given by
- attributes AlignSystem and \htmlref{AlignTimeScale}{AlignTimeScale}.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_CONVERT = INTEGER
- }{
- If the requested coordinate conversion is possible, the
- function returns a pointer to a FrameSet which describes the
- conversion. Otherwise, a null \htmlref{Object}{Object} pointer (AST\_\_NULL) is
- returned without error.
-
- If a FrameSet is returned, it will contain two Frames. Frame
- number 1 (its base Frame) will describe the source coordinate
- system, corresponding to the FROM argument. Frame number 2
- (its current Frame) will describe the destination coordinate
- system, corresponding to the TO argument. The Mapping
- which inter-relates these two Frames will perform the
- required conversion between their respective coordinate
- systems.
-
- Note that a FrameSet may be used both as a Mapping and as a
- Frame. If the result is used as a Mapping (e.g. with
- \htmlref{AST\_TRAN2}{AST_TRAN2}), then it provides a means of converting coordinates
- from the source to the destination coordinate system (or
- vice versa if its inverse transformation is selected). If it
- is used as a Frame, its attributes will describe the
- destination coordinate system.
- }
- }
- \sstexamples{
- \sstexamplesubsection{
- CVT = AST\_CONVERT( A, B, ' ', STATUS )
- }{
- Attempts to convert between the coordinate systems represented
- by A and B (assumed to be Frames). If successful, a FrameSet
- is returned via the CVT pointer which may be used to apply the
- conversion to sets of coordinates (e.g. using AST\_TRAN2).
- }
- \sstexamplesubsection{
- CVT = AST\_CONVERT( \htmlref{AST\_SKYFRAME}{AST_SKYFRAME}( ' ', STATUS ), AST\_SKYFRAME( '\htmlref{Equinox}{Equinox}=2005', STATUS ), ' ', STATUS )
- }{
- Creates a FrameSet which describes precession in the default
- FK5 celestial coordinate system between equinoxes J2000 (also
- the default) and J2005. The returned CVT pointer may then
- be passed to AST\_TRAN2 to apply this precession correction to
- any number of coordinate values given in radians.
-
- Note that the returned FrameSet also contains information
- about how to format coordinate values. This means that
- setting its \htmlref{Report}{Report} attribute to 1 is a simple way to obtain
- printed output (formatted in sexagesimal notation) to show
- the coordinate values before and after conversion.
- }
- \sstexamplesubsection{
- CVT = AST\_CONVERT( A, B, 'SKY,DETECTOR,', STATUS )
- }{
- Attempts to convert between the coordinate systems
- represented by the current Frames of A and B
- (now assumed to be FrameSets), via the intermediate {\tt{"}}SKY{\tt{"}}
- coordinate system. This, by default, is the Domain
- associated with a celestial coordinate system represented by
- a \htmlref{SkyFrame}{SkyFrame}.
-
- If this fails (for example, because either FrameSet lacks
- celestial coordinate information), then the user-defined
- {\tt{"}}DETECTOR{\tt{"}} coordinate system is used instead. If this also
- fails, then all other possible ways of achieving conversion
- are considered before giving up.
-
- The returned pointer CVT indicates whether conversion was
- possible and will have the value AST\_\_NULL if it was not. If
- conversion was possible, CVT will point at a new FrameSet
- describing the conversion.
-
- The Base attributes of the two FrameSets
- will be set by AST\_CONVERT to indicate which of their Frames was
- used for the intermediate coordinate system. This means that
- you can subsequently determine which coordinate system was
- used by enquiring the Domain attribute of either base Frame.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The Mapping represented by the returned FrameSet results in
- alignment taking place in the coordinate system specified by the
- AlignSystem attribute of the TO Frame. See the description of the
- AlignSystem attribute for further details.
-
- \sstitem
- When aligning (say) two images, which have been calibrated by
- attaching FrameSets to them, it is usually necessary to convert
- between the base Frames (representing {\tt{"}}native{\tt{"}} pixel
- coordinates) of both FrameSets. This may be achieved by
- inverting the FrameSets (e.g. using astInvert) so as to
- interchange their base and current Frames before using
- astConvert.
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_COPY\sstlabel{AST_COPY}
-}{
- Copy an Object
-}{
- \sstdescription{
- This function creates a copy of an \htmlref{Object}{Object} and returns a pointer
- to the resulting new Object. It makes a {\tt{"}}deep{\tt{"}} copy, which
- contains no references to any other Object (i.e. if the original
- Object contains references to other Objects, then the actual
- data are copied, not simply the references). This means that
- modifications may safely be made to the copy without indirectly
- affecting any other Object.
- }
- \sstinvocation{
- RESULT = AST\_COPY( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Object to be copied.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This function applies to all Objects.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_COPY = INTEGER
- }{
- Pointer to the new Object.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_CURRENTTIME\sstlabel{AST_CURRENTTIME}
-}{
- Return the current system time
-}{
- \sstdescription{
- This routine
- returns the current system time, represented in the form specified
- by the supplied \htmlref{TimeFrame}{TimeFrame}. That is, the returned floating point
- value should be interpreted using the attribute values of the
- TimeFrame. This includes \htmlref{System}{System}, \htmlref{TimeOrigin}{TimeOrigin}, \htmlref{LTOffset}{LTOffset}, \htmlref{TimeScale}{TimeScale},
- and Unit.
- }
- \sstinvocation{
- RESULT = AST\_CURRENTTIME( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the TimeFrame.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_CURRENTTIME = DOUBLE
- }{
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Values of AST\_\_BAD will be returned if this function is
- invoked with STATUS set to an error value, or if it should fail for
- any reason.
-
- \sstitem
- It is assumes that the system time (returned by the C time()
- function) follows the POSIX standard, representing a continuous
- monotonic increasing count of SI seconds since the epoch 00:00:00
- UTC 1 January 1970 AD (equivalent to TAI with a constant offset).
- Resolution is one second.
-
- \sstitem
- An error will be reported if the TimeFrame has a TimeScale value
- which cannot be converted to TAI (e.g. {\tt{"}}angular{\tt{"}} systems such as
- UT1, GMST, LMST and LAST).
-
- \sstitem
- Any inaccuracy in the system clock will be reflected in the value
- returned by this function.
- }
- }
-}
-\sstroutine{
- AST\_CURVE\sstlabel{AST_CURVE}
-}{
- Draw a geodesic curve
-}{
- \sstdescription{
- This routine draws a geodesic curve between two points in the
- physical coordinate system of a \htmlref{Plot}{Plot}. The curve drawn is the
- path of shortest distance joining the two points (as defined by
- the \htmlref{AST\_DISTANCE}{AST_DISTANCE} function for the current \htmlref{Frame}{Frame} of the Plot).
- For example, if the current Frame is a basic Frame, then the
- curve joining the two points will be a straight line in physical
- coordinate space. If the current Frame is more specialised and
- describes, for instance, a sky coordinate system, then the
- geodesic curve would be a great circle in physical coordinate
- space passing through the two sky positions given.
-
- Note that the geodesic curve is transformed into graphical
- coordinate space for plotting, so that a straight line in
- physical coordinates may result in a curved line being drawn if
- the \htmlref{Mapping}{Mapping} involved is non-linear. Any discontinuities in the
- Mapping between physical and graphical coordinates are
- catered for, as is any clipping established using \htmlref{AST\_CLIP}{AST_CLIP}.
-
- If you need to draw many geodesic curves end-to-end, then the
- \htmlref{AST\_POLYCURVE}{AST_POLYCURVE} routine is equivalent to repeatedly calling
- AST\_CURVE, but will usually be more efficient.
-
- If you need to draw curves which are not geodesics, see \htmlref{AST\_GENCURVE}{AST_GENCURVE}
- or \htmlref{AST\_GRIDLINE}{AST_GRIDLINE}.
- }
- \sstinvocation{
- CALL AST\_CURVE( THIS, START, FINISH, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Plot.
- }
- \sstsubsection{
- START( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array, with one element for each axis of the Plot, giving
- the physical coordinates of the first point on the geodesic
- curve.
- }
- \sstsubsection{
- FINISH( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array, with one element for each axis of the Plot, giving
- the physical coordinates of the second point on the geodesic
- curve.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- No curve is drawn if either of the START or FINISH arrays
- contains any coordinates with the value AST\_\_BAD.
-
- \sstitem
- An error results if the base Frame of the Plot is not 2-dimensional.
-
- \sstitem
- An error also results if the transformation between the
- current and base Frames of the Plot is not defined (i.e. the
- Plot's \htmlref{TranInverse}{TranInverse} attribute is zero).
- }
- }
-}
-\sstroutine{
- AST\_DECOMPOSE\sstlabel{AST_DECOMPOSE}
-}{
- Decompose a Mapping into two component Mappings
-}{
- \sstdescription{
- This routine returns pointers to two Mappings which, when applied
- either in series or parallel, are equivalent to the supplied \htmlref{Mapping}{Mapping}.
-
- Since the \htmlref{Frame}{Frame} class inherits from the Mapping class, Frames can
- be considered as special types of Mappings and so this method can
- be used to decompose either CmpMaps or CmpFrames.
- }
- \sstinvocation{
- CALL AST\_DECOMPOSE( THIS, MAP1, MAP2, SERIES, INVERT1, INVERT2, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Mapping.
- }
- \sstsubsection{
- MAP1 = INTEGER (Returned)
- }{
- A pointer to first component
- Mapping.
- }
- \sstsubsection{
- MAP2 = INTEGER (Returned)
- }{
- A pointer to second component
- Mapping.
- }
- \sstsubsection{
- SERIES = LOGICAL (Returned)
- }{
- Indicates if the
- component Mappings are applied in series or parallel. A .TRUE.
- value means that the supplied Mapping is equivalent to applying MAP1
- followed by MAP2 in series. A zero value means that the supplied
- Mapping is equivalent to applying MAP1 to the lower numbered axes
- and MAP2 to the higher numbered axes, in parallel.
- }
- \sstsubsection{
- INVERT1 = INTEGER (Returned)
- }{
- The value of the \htmlref{Invert}{Invert} attribute to be used with MAP1.
- }
- \sstsubsection{
- INVERT2 = INTEGER (Returned)
- }{
- The value of the Invert attribute to be used with MAP2.
- }
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{CmpMap}{CmpMap}
- }{
- If the supplied Mapping is a CmpMap, then MAP1 and MAP2 will be
- returned holding pointers to the component Mappings used to
- create the CmpMap, either in series or parallel. Note, changing
- the Invert attribute of either of the component Mappings using
- the returned pointers will have no effect on the supplied CmpMap.
- This is because the CmpMap remembers and uses the original settings
- of the Invert attributes (that is, the values of the Invert
- attributes when the CmpMap was first created). These are the
- Invert values which are returned in INVERT1 and INVERT2.
- }
- \sstsubsection{
- \htmlref{TranMap}{TranMap}
- }{
- If the supplied Mapping is a TranMap, then MAP1 and MAP2 will be
- returned holding pointers to the forward and inverse Mappings
- represented by the TranMap (zero will be returned for
- SERIES).
- Note, changing the Invert attribute of
- either of the component Mappings using the returned pointers will
- have no effect on the supplied TranMap. This is because the TranMap
- remembers and uses the original settings of the Invert attributes
- (that is, the values of the Invert attributes when the TranMap was
- first created). These are the
- Invert values which are returned in INVERT1 and INVERT2.
- }
- \sstsubsection{
- Mapping
- }{
- For any class of Mapping other than a CmpMap, MAP1 will be
- returned holding a clone of the supplied Mapping pointer, and MAP2
- will be returned holding AST\_\_NULL. INVERT1 will be returned
- holding the current value of the Invert attribute for the supplied
- Mapping, and INVERT2 will be returned holding zero.
- }
- \sstsubsection{
- \htmlref{CmpFrame}{CmpFrame}
- }{
- If the supplied Mapping is a CmpFrame, then MAP1 and MAP2 will be
- returned holding pointers to the component Frames used to
- create the CmpFrame. The component Frames are considered to be in
- applied in parallel.
- }
- \sstsubsection{
- Frame
- }{
- For any class of Frame other than a CmpFrame, MAP1 will be
- returned holding a clone of the supplied Frame pointer, and MAP2
- will be returned holding AST\_\_NULL.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The returned Invert values should be used in preference to the
- current values of the Invert attribute in map1 and map2. This is
- because the attributes may have changed value since the Mappings
- were combined.
-
- \sstitem
- Any changes made to the component Mappings using the returned
- pointers will be reflected in the supplied Mapping.
- }
- }
-}
-\sstroutine{
- AST\_DELETE\sstlabel{AST_DELETE}
-}{
- Delete an Object
-}{
- \sstdescription{
- This routine deletes an \htmlref{Object}{Object}, freeing all resources
- associated with it and rendering any remaining pointers to the
- Object invalid.
-
- Note that deletion is unconditional, regardless of whether other
- pointers to the Object are still in use (possibly within other
- Objects). A safer approach is to defer deletion, until all
- references to an Object have expired, by using \htmlref{AST\_BEGIN}{AST_BEGIN}/\htmlref{AST\_END}{AST_END}
- (together with \htmlref{AST\_CLONE}{AST_CLONE} and \htmlref{AST\_ANNUL}{AST_ANNUL} if necessary).
- }
- \sstinvocation{
- CALL AST\_DELETE( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given and Returned)
- }{
- Pointer to the Object to be deleted. A null pointer value
- (AST\_\_NULL) is always returned.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This routine applies to all Objects.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This routine attempts to execute even if STATUS is set to an error
- value
- on entry, although no further error report will be
- made if it subsequently fails under these circumstances.
- }
- }
-}
-\sstroutine{
- AST\_DELFITS\sstlabel{AST_DELFITS}
-}{
- Delete the current FITS card in a FitsChan
-}{
- \sstdescription{
- This routine deletes the current FITS card from a \htmlref{FitsChan}{FitsChan}. The
- current card may be selected using the \htmlref{Card}{Card} attribute (if its index
- is known) or by using \htmlref{AST\_FINDFITS}{AST_FINDFITS} (if only the FITS keyword is
- known).
-
- After deletion, the following card becomes the current card.
- }
- \sstinvocation{
- CALL AST\_DELFITS( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the FitsChan.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function returns without action if the FitsChan is
- initially positioned at the {\tt{"}}end-of-file{\tt{"}} (i.e. if the Card
- attribute exceeds the number of cards in the FitsChan).
-
- \sstitem
- If there are no subsequent cards in the FitsChan, then the
- Card attribute is left pointing at the {\tt{"}}end-of-file{\tt{"}} after
- deletion (i.e. is set to one more than the number of cards in
- the FitsChan).
- }
- }
-}
-\sstroutine{
- AST\_DISTANCE\sstlabel{AST_DISTANCE}
-}{
- Calculate the distance between two points in a Frame
-}{
- \sstdescription{
- This function finds the distance between two points whose \htmlref{Frame}{Frame}
- coordinates are given. The distance calculated is that along
- the geodesic curve that joins the two points.
-
- For example, in a basic Frame, the distance calculated will be
- the Cartesian distance along the straight line joining the two
- points. For a more specialised Frame describing a sky coordinate
- system, however, it would be the distance along the great circle
- passing through two sky positions.
- }
- \sstinvocation{
- RESULT = AST\_DISTANCE( THIS, POINT1, POINT2, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Frame.
- }
- \sstsubsection{
- POINT1( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each Frame axis
- (\htmlref{Naxes}{Naxes} attribute) containing the coordinates of the first point.
- }
- \sstsubsection{
- POINT2( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each Frame axis
- containing the coordinates of the second point.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_DISTANCE = DOUBLE PRECISION
- }{
- The distance between the two points.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function will return a {\tt{"}}bad{\tt{"}} result value (AST\_\_BAD) if
- any of the input coordinates has this value.
-
- \sstitem
- A {\tt{"}}bad{\tt{"}} value will also be returned if this function is
- invoked with STATUS set to an error value, or if it should fail for
- any reason.
- }
- }
-}
-\sstroutine{
- AST\_DOWNSIZE\sstlabel{AST_DOWNSIZE}
-}{
- Reduce the number of vertices in a Polygon
-}{
- \sstdescription{
- This function returns a pointer to a new \htmlref{Polygon}{Polygon} that contains a
- subset of the vertices in the supplied Polygon. The subset is
- chosen so that the returned Polygon is a good approximation to
- the supplied Polygon, within the limits specified by the supplied
- parameter values. That is, the density of points in the returned
- Polygon is greater at points where the curvature of the boundary of
- the supplied Polygon is greater.
- }
- \sstinvocation{
- RESULT = AST\_DOWNSIZE( THIS, MAXERR, MAXVERT, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Polygon.
- }
- \sstsubsection{
- MAXERR = DOUBLE PRECISION (Given)
- }{
- The maximum allowed discrepancy between the supplied and
- returned Polygons, expressed as a geodesic distance within the
- Polygon's coordinate frame. If this is zero or less, the
- returned Polygon will have the number of vertices specified by
- MAXVERT.
- }
- \sstsubsection{
- MAXVERT = INTEGER (Given)
- }{
- The maximum allowed number of vertices in the returned Polygon.
- If this is less than 3, the number of vertices in the returned
- Polygon will be the minimum needed to achieve the maximum
- discrepancy specified by
- MAXERR.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_DOWNSIZE = INTEGER
- }{
- Pointer to the new Polygon.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_DSBSPECFRAME\sstlabel{AST_DSBSPECFRAME}
-}{
- Create a DSBSpecFrame
-}{
- \sstdescription{
- This function creates a new \htmlref{DSBSpecFrame}{DSBSpecFrame} and optionally initialises its
- attributes.
-
- A DSBSpecFrame is a specialised form of \htmlref{SpecFrame}{SpecFrame} which represents
- positions in a spectrum obtained using a dual sideband instrument.
- Such an instrument produces a spectrum in which each point contains
- contributions from two distinctly different frequencies, one from
- the {\tt{"}}lower side band{\tt{"}} (LSB) and one from the {\tt{"}}upper side band{\tt{"}} (USB).
- Corresponding LSB and USB frequencies are connected by the fact
- that they are an equal distance on either side of a fixed central
- frequency known as the {\tt{"}}Local Oscillator{\tt{"}} (LO) frequency.
-
- When quoting a position within such a spectrum, it is necessary to
- indicate whether the quoted position is the USB position or the
- corresponding LSB position. The \htmlref{SideBand}{SideBand} attribute provides this
- indication. Another option that the SideBand attribute provides is
- to represent a spectral position by its topocentric offset from the
- LO frequency.
-
- In practice, the LO frequency is specified by giving the distance
- from the LO frequency to some {\tt{"}}central{\tt{"}} spectral position. Typically
- this central position is that of some interesting spectral feature.
- The distance from this central position to the LO frequency is known
- as the {\tt{"}}intermediate frequency{\tt{"}} (\htmlref{IF}{IF}). The value supplied for IF can
- be a signed value in order to indicate whether the LO frequency is
- above or below the central position.
- }
- \sstinvocation{
- RESULT = AST\_DSBSPECFRAME( OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new DSBSpecFrame. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_DSBSPECFRAME = INTEGER
- }{
- A pointer to the new DSBSpecFrame.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_ELLIPSE\sstlabel{AST_ELLIPSE}
-}{
- Create a Ellipse
-}{
- \sstdescription{
- This function creates a new \htmlref{Ellipse}{Ellipse} and optionally initialises its
- attributes.
-
- A Ellipse is a \htmlref{Region}{Region} which represents a elliptical area within the
- supplied 2-dimensional \htmlref{Frame}{Frame}.
- }
- \sstinvocation{
- RESULT = AST\_ELLIPSE( FRAME, FORM, CENTRE, POINT1, POINT2, UNC, OPTIONS,
- STATUS )
- }
- \sstarguments{
- \sstsubsection{
- FRAME = INTEGER (Given)
- }{
- A pointer to the Frame in which the region is defined. It must
- have exactly 2 axes. A deep copy is taken of the supplied Frame.
- This means that any subsequent changes made to the Frame using the
- supplied pointer will have no effect the Region.
- }
- \sstsubsection{
- FORM = INTEGER (Given)
- }{
- Indicates how the ellipse is described by the remaining parameters.
- A value of zero indicates that the ellipse is specified by a
- centre position and two positions on the circumference. A value of
- one indicates that the ellipse is specified by its centre position,
- the half-lengths of its two axes, and the orientation of its first
- axis.
- }
- \sstsubsection{
- CENTRE( 2 ) = DOUBLE PRECISION (Given)
- }{
- An array
- containing the coordinates at the centre of
- the ellipse.
- }
- \sstsubsection{
- POINT1( 2 ) = DOUBLE PRECISION (Given)
- }{
- If FORM
- is zero, this array should contain the coordinates of one of the four
- points where an axis of the ellipse crosses the circumference of the
- ellipse.
- If FORM
- is one, it should contain the lengths of semi-major and
- semi-minor axes of the ellipse, given as geodesic distances
- within the Frame.
- }
- \sstsubsection{
- POINT2( 2 ) = DOUBLE PRECISION (Given)
- }{
- If FORM
- is zero, this array should containing the coordinates at some other
- point on the circumference of the ellipse, distinct from
- POINT1. If FORM
- is one, the first element of this array should hold the angle
- between the second axis of the Frame and the first ellipse axis
- (i.e. the ellipse axis which is specified first in the
- POINT1
- array), and the second element will be ignored. The angle should be
- given in radians, measured positive in the same sense as rotation
- from the positive direction of the second Frame axis to the positive
- direction of the first Frame axis.
- }
- \sstsubsection{
- UNC = INTEGER (Given)
- }{
- An optional pointer to an existing Region which specifies the
- uncertainties associated with the boundary of the \htmlref{Box}{Box} being created.
- The uncertainty in any point on the boundary of the Box is found by
- shifting the supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at
- the boundary point being considered. The area covered by the
- shifted uncertainty Region then represents the uncertainty in the
- boundary position. The uncertainty is assumed to be the same for
- all points.
-
- If supplied, the uncertainty Region must be of a class for which
- all instances are centro-symetric (e.g. Box, \htmlref{Circle}{Circle}, Ellipse, etc.)
- or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
- copy of the supplied Region will be taken, so subsequent changes to
- the uncertainty Region using the supplied pointer will have no
- effect on the created Box. Alternatively,
- a null \htmlref{Object}{Object} pointer (AST\_\_NULL)
- may be supplied, in which case a default uncertainty is used
- equivalent to a box 1.0E-6 of the size of the Box being created.
-
- The uncertainty Region has two uses: 1) when the
- \htmlref{AST\_OVERLAP}{AST_OVERLAP}
- function compares two Regions for equality the uncertainty
- Region is used to determine the tolerance on the comparison, and 2)
- when a Region is mapped into a different coordinate system and
- subsequently simplified (using
- \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}),
- the uncertainties are used to determine if the transformed boundary
- can be accurately represented by a specific shape of Region.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new Ellipse. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_ELLIPSE = INTEGER
- }{
- A pointer to the new Ellipse.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_ELLIPSEPARS\sstlabel{AST_ELLIPSEPARS}
-}{
- Returns the geometric parameters of an Ellipse
-}{
- \sstdescription{
- This routine
- returns the geometric parameters describing the supplied ellipse.
- }
- \sstinvocation{
- CALL AST\_ELLIPSEPARS( THIS, CENTRE, A, B, ANGLE, P1, P2, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the \htmlref{Region}{Region}.
- }
- \sstsubsection{
- CENTRE( 2 ) = DOUBLE PRECISION (Returned)
- }{
- The coordinates of the \htmlref{Ellipse}{Ellipse} centre are returned in this arrays.
- }
- \sstsubsection{
- A = DOUBLE PRECISION (Returned)
- }{
- Returned holding the half-length of the first axis of the
- ellipse.
- }
- \sstsubsection{
- B = DOUBLE PRECISION (Returned)
- }{
- Returned holding the half-length of the second axis of the
- ellipse.
- }
- \sstsubsection{
- ANGLE = DOUBLE PRECISION (Returned)
- }{
- If the coordinate system in which the Ellipse is defined has
- axes (X,Y), then
- ANGLE
- is returned holding the angle from the positive direction of
- the Y axis to the first axis of the ellipse, in radians.
- Positive rotation is in the same sense as rotation from the
- positive direction of Y to the positive direction of X.
- }
- \sstsubsection{
- P1( 2 ) = DOUBLE PRECISION (Returned)
- }{
- An array in which to return the coordinates at one of the two ends
- of the first axis of the ellipse.
- }
- \sstsubsection{
- P2( 2 ) = DOUBLE PRECISION (Returned)
- }{
- An array in which to return the coordinates at one of the two ends
- of the second axis of the ellipse.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the coordinate system represented by the Ellipse has been
- changed since it was first created, the returned parameters refer
- to the new (changed) coordinate system, rather than the original
- coordinate system. Note however that if the transformation from
- original to new coordinate system is non-linear, the shape
- represented by the supplied Ellipse object may not be an accurate
- ellipse.
-
- \sstitem
- Values of AST\_\_BAD are returned for the parameters without error
- if the ellipse is degenerate or undefined.
- }
- }
-}
-\sstroutine{
- AST\_END\sstlabel{AST_END}
-}{
- End an AST context
-}{
- \sstdescription{
- This routine ends an AST context which was
- begun with a matching invocation of \htmlref{AST\_BEGIN}{AST_BEGIN}. Any \htmlref{Object}{Object}
- pointers created within this context will be annulled (just as
- if \htmlref{AST\_ANNUL}{AST_ANNUL} had been invoked) and will cease to be valid
- afterwards, unless they have previously been exported using
- \htmlref{AST\_EXPORT}{AST_EXPORT} or rendered exempt using \htmlref{AST\_EXEMPT}{AST_EXEMPT}.
- If annulling a pointer causes an Object's \htmlref{RefCount}{RefCount} attribute to
- fall to zero (which happens when the last pointer to it is
- annulled), then the Object will be deleted.
- }
- \sstinvocation{
- CALL AST\_END( STATUS )
- }
- \sstarguments{
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This routine applies to all Objects.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This routine attempts to execute even if STATUS is set to an
- error value.
-
- \sstitem
- Contexts delimited by AST\_BEGIN and AST\_END may be nested to any
- depth.
- }
- }
-}
-\sstroutine{
- AST\_ESCAPES\sstlabel{AST_ESCAPES}
-}{
- Control whether graphical escape sequences are included in strings
-}{
- \sstdescription{
- The \htmlref{Plot}{Plot} class defines a set of escape sequences which can be
- included within a text string in order to control the appearance of
- sub-strings within the text. See the \htmlref{Escape}{Escape} attribute for a
- description of these escape sequences. It is usually inappropriate
- for AST to return strings containing such escape sequences when
- called by application code. For instance, an application which
- displays the value of the \htmlref{Title}{Title} attribute of a \htmlref{Frame}{Frame} usually does
- not want the displayed string to include potentially long escape
- sequences which a human read would have difficuly interpreting.
- Therefore the default behaviour is for AST to strip out such escape
- sequences when called by application code. This default behaviour
- can be changed using this function.
- }
- \sstinvocation{
- RESULT = AST\_ESCAPES( NEWVAL, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- NEWVAL = INTEGER (Given)
- }{
- A flag which indicates if escapes sequences should be included
- in returned strings. If zero is supplied, escape sequences will
- be stripped out of all strings returned by any AST function. If
- a positive value is supplied, then any escape sequences will be
- retained in the value returned to the caller. If a negative
- value is supplied, the current value of the flag will be left
- unchanged.
- }
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{Object}{Object}
- }{
- This routine applies to all Objects.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_ESCAPES = INTEGER
- }{
- The value of the flag on entry to this function.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function also controls whether the
- \htmlref{AST\_STRIPESCAPES}{AST_STRIPESCAPES}
- function removes escape sequences from the supplied string, or
- returns the supplied string without change.
-
- \sstitem
- This function attempts to execute even if an error has already
- occurred.
- }
- }
-}
-\sstroutine{
- AST\_EXEMPT\sstlabel{AST_EXEMPT}
-}{
- Exempt an Object pointer from AST context handling
-}{
- \sstdescription{
- This routine exempts an \htmlref{Object}{Object} pointer from AST context
- handling, as implemented by \htmlref{AST\_BEGIN}{AST_BEGIN} and \htmlref{AST\_END}{AST_END}. This means that
- the pointer will not be affected when AST\_END is called and will
- remain active until the end of the program, or until explicitly
- annulled using \htmlref{AST\_ANNUL}{AST_ANNUL}.
-
- If possible, you should avoid using this routine when writing
- applications. It is provided mainly for developers of other
- libraries, who may wish to retain references to AST Objects in
- internal data structures, and who therefore need to avoid the
- effects of AST\_BEGIN and AST\_END.
- }
- \sstinvocation{
- CALL AST\_EXEMPT( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Object pointer to be exempted from context handling.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This routine applies to all Objects.
- }
- }
-}
-\sstroutine{
- AST\_EXPORT\sstlabel{AST_EXPORT}
-}{
- Export an Object pointer to an outer context
-}{
- \sstdescription{
- This routine exports an \htmlref{Object}{Object} pointer from the current AST context
- into the context that encloses the current one. This means that
- the pointer will no longer be annulled when the current context
- is ended (with \htmlref{AST\_END}{AST_END}), but only when the next outer context (if
- any) ends.
- }
- \sstinvocation{
- CALL AST\_EXPORT( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Object pointer to be exported.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This routine applies to all Objects.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- It is only sensible to apply this routine to pointers that
- have been created within (or exported to) the current context
- and have not been rendered exempt using \htmlref{AST\_EXEMPT}{AST_EXEMPT}.
- Applying it to an unsuitable Object pointer has no effect.
- }
- }
-}
-\sstroutine{
- AST\_FINDFITS\sstlabel{AST_FINDFITS}
-}{
- Find a FITS card in a FitsChan by keyword
-}{
- \sstdescription{
- This function searches for a card in a \htmlref{FitsChan}{FitsChan} by keyword. The
- search commences at the current card (identified by the \htmlref{Card}{Card}
- attribute) and ends when a card is found whose FITS keyword
- matches the template supplied, or when the last card in the
- FitsChan has been searched.
-
- If the search is successful (i.e. a card is found which matches
- the template), the contents of the card are
- returned and the Card attribute is adjusted to identify the card
- found or, if required, the one following it. If the search is
- not successful, the function returns .FALSE. and the Card attribute
- is set to the {\tt{"}}end-of-file{\tt{"}}.
- }
- \sstinvocation{
- RESULT = AST\_FINDFITS( THIS, NAME, CARD, INC, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the FitsChan.
- }
- \sstsubsection{
- NAME = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing a
- template for the keyword to be found. In the simplest case,
- this should simply be the keyword name (the search is case
- insensitive and trailing spaces are ignored). However, this
- template may also contain {\tt{"}}field specifiers{\tt{"}} which are
- capable of matching a range of characters (see the {\tt{"}}Keyword
- Templates{\tt{"}} section for details). In this case, the first card
- with a keyword which matches the template will be found. To
- find the next FITS card regardless of its keyword, you should
- use the template {\tt{"}}\%f{\tt{"}}.
- }
- \sstsubsection{
- CARD = CHARACTER $*$ ( 80 ) (Returned)
- }{
- A character variable with at least 80 characters
- in which the FITS card which is found will be returned. If
- the search is not successful, a
- card will not be returned.
- }
- \sstsubsection{
- INC = LOGICAL (Given)
- }{
- If this value is .FALSE. (and the search is successful), the
- FitsChan's Card attribute will be set to the index of the card
- that was found. If it is .TRUE., however, the Card
- attribute will be incremented to identify the card which
- follows the one found.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_FINDFITS = LOGICAL
- }{
- .TRUE. if the search was successful, otherwise .FALSE..
- }
- }
- \sstexamples{
- \sstexamplesubsection{
- RESULT = AST\_FINDFITS( FITSCHAN, '\%f', CARD, .TRUE., STATUS )
- }{
- Returns the current card in a FitsChan and advances the Card
- attribute to identify the card that follows (the {\tt{"}}\%f{\tt{"}}
- template matches any keyword).
- }
- \sstexamplesubsection{
- RESULT = AST\_FINDFITS( FITSCHAN, 'BITPIX', CARD, .TRUE., STATUS )
- }{
- Searches a FitsChan for a FITS card with the {\tt{"}}BITPIX{\tt{"}} keyword
- and returns that card. The Card attribute is then incremented
- to identify the card that follows it.
- }
- \sstexamplesubsection{
- RESULT = AST\_FINDFITS( FITSCHAN, 'COMMENT', CARD, .FALSE., STATUS )
- }{
- Sets the Card attribute of a FitsChan to identify the next
- COMMENT card (if any) and returns that card.
- }
- \sstexamplesubsection{
- RESULT = AST\_FINDFITS( FITSCHAN, 'CRVAL\%1d', CARD, .TRUE., STATUS )
- }{
- Searches a FitsChan for the next card with a keyword of the
- form {\tt{"}}CRVALi{\tt{"}} (for example, any of the keywords {\tt{"}}CRVAL1{\tt{"}},
- {\tt{"}}CRVAL2{\tt{"}} or {\tt{"}}CRVAL3{\tt{"}} would be matched). The card found (if
- any) is returned, and the Card attribute is then incremented
- to identify the following card (ready to search for another
- keyword with the same form, perhaps).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The search always starts with the current card, as identified
- by the Card attribute. To ensure you search the entire contents
- of a FitsChan, you should first clear the Card attribute (using
- \htmlref{AST\_CLEAR}{AST_CLEAR}). This effectively {\tt{"}}rewinds{\tt{"}} the FitsChan.
-
- \sstitem
- If a search is unsuccessful, the Card attribute is set to the
- {\tt{"}}end-of-file{\tt{"}} (i.e. to one more than the number of cards in the
- FitsChan). No error occurs.
-
- \sstitem
- A value of .FALSE. will be returned if this function is invoked
- with the AST error status set, or if it should fail for any
- reason.
- }
- }
- \sstdiytopic{
- Keyword Templates
- }{
- The templates used to match FITS keywords are normally composed
- of literal characters, which must match the keyword exactly
- (apart from case). However, a template may also contain {\tt{"}}field
- specifiers{\tt{"}} which can match a range of possible characters. This
- allows you to search for keywords that contain (for example)
- numbers, where the digits comprising the number are not known in
- advance.
-
- A field specifier starts with a {\tt{"}}\%{\tt{"}} character. This is followed
- by an optional single digit (0 to 9) specifying a field
- width. Finally, there is a single character which specifies the
- type of character to be matched, as follows:
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}c{\tt{"}}: matches all upper case letters,
-
- \sstitem
- {\tt{"}}d{\tt{"}}: matches all decimal digits,
-
- \sstitem
- {\tt{"}}f{\tt{"}}: matches all characters which are permitted within a FITS
- keyword (upper case letters, digits, underscores and hyphens).
-
- }
- If the field width is omitted, the field specifier matches one
- or more characters. If the field width is zero, it matches zero
- or more characters. Otherwise, it matches exactly the number of
- characters specified. In addition to this:
-
- \sstitemlist{
-
- \sstitem
- The template {\tt{"}}\%f{\tt{"}} will match a blank FITS keyword consisting
- of 8 spaces (as well as matching all other keywords).
-
- \sstitem
- A template consisting of 8 spaces will match a blank keyword
- (only).
-
- }
- For example:
-
- \sstitemlist{
-
- \sstitem
- The template {\tt{"}}BitPix{\tt{"}} will match the keyword {\tt{"}}BITPIX{\tt{"}} only.
-
- \sstitem
- The template {\tt{"}}crpix\%1d{\tt{"}} will match keywords consisting of
- {\tt{"}}CRPIX{\tt{"}} followed by one decimal digit.
-
- \sstitem
- The template {\tt{"}}P\%c{\tt{"}} will match any keyword starting with {\tt{"}}P{\tt{"}}
- and followed by one or more letters.
-
- \sstitem
- The template {\tt{"}}E\%0f{\tt{"}} will match any keyword beginning with {\tt{"}}E{\tt{"}}.
-
- \sstitem
- The template {\tt{"}}\%f{\tt{"}} will match any keyword at all (including a
- blank one).
- }
- }
-}
-\sstroutine{
- AST\_FINDFRAME\sstlabel{AST_FINDFRAME}
-}{
- Find a coordinate system with specified characteristics
-}{
- \sstdescription{
- This function uses a {\tt{"}}template{\tt{"}} \htmlref{Frame}{Frame} to search another Frame
- (or \htmlref{FrameSet}{FrameSet}) to identify a coordinate system which has a
- specified set of characteristics. If a suitable coordinate
- system can be found, the function returns a pointer to a
- FrameSet which describes the required coordinate system and how
- to convert coordinates to and from it.
-
- This function is provided to help answer general questions about
- coordinate systems, such as typically arise when coordinate
- information is imported into a program as part of an initially
- unknown dataset. For example:
- \sstitemlist{
-
- \sstitem
- Is there a wavelength scale?
-
- \sstitem
- Is there a 2-dimensional coordinate system?
-
- \sstitem
- Is there a celestial coordinate system?
-
- \sstitem
- Can I plot the data in ecliptic coordinates?
-
- }
- You can also use this function as a means of reconciling a
- user's preference for a particular coordinate system (for
- example, what type of axes to draw) with what is actually
- possible given the coordinate information available.
-
- To perform a search, you supply a {\tt{"}}target{\tt{"}} Frame (or FrameSet)
- which represents the set of coordinate systems to be searched.
- If a basic Frame is given as the target, this set of coordinate
- systems consists of the one described by this Frame, plus all
- other {\tt{"}}virtual{\tt{"}} coordinate systems which can potentially be
- reached from it by applying built-in conversions (for example,
- any of the celestial coordinate conversions known to the AST
- library would constitute a {\tt{"}}built-in{\tt{"}} conversion). If a FrameSet
- is given as the target, the set of coordinate systems to be
- searched consists of the union of those represented by all the
- individual Frames within it.
-
- To select from this large set of possible coordinate systems,
- you supply a {\tt{"}}template{\tt{"}} Frame which is an instance of the type
- of Frame you are looking for. Effectively, you then ask the
- function to {\tt{"}}find a coordinate system that looks like this{\tt{"}}.
-
- You can make your request more or less specific by setting
- attribute values for the template Frame. If a particular
- attribute is set in the template, then the function will only
- find coordinate systems which have exactly the same value for
- that attribute. If you leave a template attribute un-set,
- however, then the function has discretion about the value the
- attribute should have in any coordinate system it finds. The
- attribute will then take its value from one of the actual
- (rather than virtual) coordinate systems in the target. If the
- target is a FrameSet, its \htmlref{Current}{Current} attribute will be modified to
- indicate which of its Frames was used for this purpose.
-
- The result of this process is a coordinate system represented by
- a hybrid Frame which acquires some attributes from the template
- (but only if they were set) and the remainder from the
- target. This represents the {\tt{"}}best compromise{\tt{"}} between what you
- asked for and what was available. A \htmlref{Mapping}{Mapping} is then generated
- which converts from the target coordinate system to this hybrid
- one, and the returned FrameSet encapsulates all of this
- information.
- }
- \sstinvocation{
- RESULT = AST\_FINDFRAME( TARGET, TEMPLATE, DOMAINLIST, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- TARGET = INTEGER (Given)
- }{
- Pointer to the target Frame (or FrameSet).
-
- Note that if a FrameSet is supplied (and a suitable
- coordinate system is found), then its Current attribute will
- be modified to indicate which Frame was used to obtain
- attribute values which were not specified by the template.
- This Frame will, in some sense, represent the {\tt{"}}closest{\tt{"}}
- non-virtual coordinate system to the one you requested.
- }
- \sstsubsection{
- TEMPLATE = INTEGER (Given)
- }{
- Pointer to the template Frame, which should be an instance of
- the type of Frame you wish to find. If you wanted to find a
- Frame describing a celestial coordinate system, for example,
- then you might use a \htmlref{SkyFrame}{SkyFrame} here. See the {\tt{"}}Examples{\tt{"}}
- section for more ideas.
- }
- \sstsubsection{
- DOMAINLIST = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing a
- comma-separated list of Frame domains. This may be used to
- establish a priority order for the different types of
- coordinate system that might be found.
-
- The function will first try to find a suitable coordinate
- system whose \htmlref{Domain}{Domain} attribute equals the first domain in this
- list. If this fails, the second domain in the list will be
- used, and so on, until a result is obtained. A blank domain
- (e.g. two consecutive commas) indicates that any coordinate
- system is acceptable (subject to the template) regardless of
- its domain.
-
- This list is case-insensitive and all white space is ignored.
- If you do not wish to restrict the domain in this way,
- you should supply a blank string.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- This function applies to all Frames.
- }
- \sstsubsection{
- FrameSet
- }{
- If the target is a FrameSet, the possibility exists that
- several of the Frames within it might be matched by the
- template. Unless the choice is sufficiently restricted by
- the DOMAINLIST string, the sequence in which Frames are
- searched can then become important. In this case, the search
- proceeds as follows:
- \sstitemlist{
-
- \sstitem
- Each field in the DOMAINLIST string is considered in turn.
-
- \sstitem
- An attempt is made to match the template to each of the
- target's Frames in the order: (1) the current Frame, (2) the
- base Frame, (3) each remaining Frame in the order of being
- added to the target FrameSet.
-
- \sstitem
- Generally, the first match found is used. However, the
- Mapping between the target coordinate system and the
- resulting Frame is also examined. Preference is given to
- cases where both the forward and inverse transformations are
- defined (as indicated by the \htmlref{TranForward}{TranForward} and \htmlref{TranInverse}{TranInverse}
- attributes). If only one transformation is defined, the
- forward one is preferred.
-
- \sstitem
- If a match is found and the domain of the resulting Frame also
- matches the current DOMAINLIST field, it is
- accepted. Otherwise, the next DOMAINLIST field is considered
- and the process repeated.
-
- }
- If a suitable coordinate system is found, the Current
- attribute of the target FrameSet will be modified on exit to
- identify the Frame whose match with the target was eventually
- accepted.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_FINDFRAME = INTEGER
- }{
- If the search is successful, the function returns a pointer
- to a FrameSet which contains the Frame found and a
- description of how to convert to (and from) the coordinate
- system it represents. Otherwise, a null \htmlref{Object}{Object} pointer
- (AST\_\_NULL) is returned without error.
-
- If a FrameSet is returned, it will contain two Frames. Frame
- number 1 (its base Frame) represents the target coordinate
- system and will be the same as the (base Frame of the)
- target. Frame number 2 (its current Frame) will be a Frame
- representing the coordinate system which the function
- found. The Mapping which inter-relates these two Frames will
- describe how to convert between their respective coordinate
- systems.
-
- Note that a FrameSet may be used both as a Mapping and as a
- Frame. If the result is used as a Mapping (e.g. with
- astTran2), then it provides a means of converting coordinates
- from the target coordinate system into the new coordinate
- system that was found (and vice versa if its inverse
- transformation is selected). If it is used as a Frame, its
- attributes will describe the new coordinate system.
- }
- }
- \sstexamples{
- \sstexamplesubsection{
- RESULT = AST\_FINDFRAME( TARGET, \htmlref{AST\_FRAME}{AST_FRAME}( 3, ' ', STATUS ), ' ', STATUS )
- }{
- Searches for a 3-dimensional coordinate system in the target
- Frame (or FrameSet). No attributes have been set in the
- template Frame (created by AST\_FRAME), so no restriction has
- been placed on the required coordinate system, other than
- that it should have 3 dimensions. The first suitable Frame
- found will be returned as part of the RESULT FrameSet.
- }
- \sstexamplesubsection{
- RESULT = AST\_FINDFRAME( TARGET, \htmlref{AST\_SKYFRAME}{AST_SKYFRAME}( ' ', STATUS ), ' ', STATUS )
- }{
- Searches for a celestial coordinate system in the target
- Frame (or FrameSet). The type of celestial coordinate system
- is unspecified, so AST\_FINDFRAME will return the first one
- found as part of the RESULT FrameSet. If the target is
- a FrameSet, then its Current attribute will be updated to
- identify the Frame that was used.
-
- If no celestial coordinate system can be found, a value of
- AST\_\_NULL will be returned without error.
- }
- \sstexamplesubsection{
- RESULT = AST\_FINDFRAME( TARGET, AST\_SKYFRAME( '\htmlref{MaxAxes}{MaxAxes}=100', STATUS ), ' ', STATUS )
- }{
- This is like the last example, except that in the event of the
- target being a \htmlref{CmpFrame}{CmpFrame}, the component Frames encapsulated by the
- CmpFrame will be searched for a SkyFrame. If found, the returned
- Mapping will included a \htmlref{PermMap}{PermMap} which selects the required axes
- from the target CmpFrame.
-
- This is acomplished by setting the MaxAxes attribute of the
- template SkyFrame to a large number (larger than or equal to the
- number of axes in the target CmpFrame). This allows the SkyFrame
- to be used as a match for Frames containing from 2 to 100 axes.
- }
- \sstexamplesubsection{
- RESULT = AST\_FINDFRAME( TARGET, AST\_SKYFRAME( '\htmlref{System}{System}=FK5', STATUS ), ' ', STATUS )
- }{
- Searches for an equatorial (FK5) coordinate system in the
- target. The \htmlref{Equinox}{Equinox} value for the coordinate system has not
- been specified, so will be obtained from the target. If the
- target is a FrameSet, its Current attribute will be updated
- to indicate which SkyFrame was used to obtain this value.
- }
- \sstexamplesubsection{
- RESULT = AST\_FINDFRAME( TARGET, AST\_FRAME( 2, ' ', STATUS ), 'SKY,PIXEL,', STATUS )
- }{
- Searches for a 2-dimensional coordinate system in the
- target. Initially, a search is made for a suitable coordinate
- system whose Domain attribute has the value {\tt{"}}SKY{\tt{"}}. If this
- search fails, a search is then made for one with the domain
- {\tt{"}}PIXEL{\tt{"}}. If this also fails, then any 2-dimensional
- coordinate system is returned as part of the RESULT
- FrameSet.
-
- Only if no 2-dimensional coordinate systems can be reached by
- applying built-in conversions to any of the Frames in the
- target will a value of AST\_\_NULL be returned.
- }
- \sstexamplesubsection{
- RESULT = AST\_FINDFRAME( TARGET, AST\_FRAME( 1, 'Domain=WAVELENGTH', STATUS ), ' ', STATUS )
- }{
- Searches for any 1-dimensional coordinate system in the
- target which has the domain {\tt{"}}WAVELENGTH{\tt{"}}.
- }
- \sstexamplesubsection{
- RESULT = AST\_FINDFRAME( TARGET, AST\_FRAME( 1, ' ', STATUS ), 'WAVELENGTH', STATUS )
- }{
- This example has exactly the same effect as that above. It
- illustrates the equivalence of the template's Domain attribute
- and the fields in the DOMAINLIST string.
- }
- \sstexamplesubsection{
- RESULT = AST\_FINDFRAME( TARGET, AST\_FRAME( 1, 'MaxAxes=3', STATUS ), ' ', STATUS )
- }{
- This is a more advanced example which will search for any
- coordinate system in the target having 1, 2 or 3
- dimensions. The Frame returned (as part of the RESULT
- FrameSet) will always be 1-dimensional, but will be related
- to the coordinate system that was found by a suitable Mapping
- (e.g. a PermMap) which simply extracts the first axis.
-
- If we had wanted a Frame representing the actual (1, 2 or
- 3-dimensional) coordinate system found, we could set the
- \htmlref{PreserveAxes}{PreserveAxes} attribute to a non-zero value in the template.
- }
- \sstexamplesubsection{
- RESULT = AST\_FINDFRAME( TARGET, AST\_SKYFRAME( '\htmlref{Permute}{Permute}=0', STATUS ), ' ', STATUS )
- }{
- Searches for any celestial coordinate system in the target,
- but only finds one if its axes are in the conventional
- (longitude,latitude) order and have not been permuted
- (e.g. with \htmlref{AST\_PERMAXES}{AST_PERMAXES}).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The Mapping represented by the returned FrameSet results in
- alignment taking place in the coordinate system specified by the
- \htmlref{AlignSystem}{AlignSystem} attribute of the TEMPLATE Frame. See the description
- of the AlignSystem attribute for further details.
-
- \sstitem
- Beware of setting the Domain attribute of the template and then
- using a DOMAINLIST string which does not include the template's domain
- (or a blank field). If you do so, no coordinate system will be
- found.
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- More on Using Templates
- }{
- A Frame (describing a coordinate system) will be found by this
- function if (a) it is {\tt{"}}matched{\tt{"}} by the template you supply, and
- (b) the value of its Domain attribute appears in the DOMAINLIST
- string (except that a blank field in this string permits any
- domain). A successful match by the template depends on a number
- of criteria, as outlined below:
- \sstitemlist{
-
- \sstitem
- In general, a template will only match another Frame which
- belongs to the same class as the template, or to a derived (more
- specialised) class. For example, a SkyFrame template will match
- any other SkyFrame, but will not match a basic
- Frame. Conversely, a basic Frame template will match any class
- of Frame.
-
- \sstitem
- The exception to this is that a Frame of any class can be used to
- match a CmpFrame, if that CmpFrame contains a Frame of the same
- class as the template. Note however, the MaxAxes and \htmlref{MinAxes}{MinAxes}
- attributes of the template must be set to suitable values to allow
- it to match the CmpFrame. That is, the MinAxes attribute must be
- less than or equal to the number of axes in the target, and the MaxAxes
- attribute must be greater than or equal to the number of axes in
- the target.
-
- \sstitem
- If using a CmpFrame as a template frame, the MinAxes and MaxAxes
- for the template are determined by the MinAxes and MaxAxes values of
- the component Frames within the template. So if you want a template
- CmpFrame to be able to match Frames with different numbers of axes,
- then you must set the MaxAxes and/or MinAxes attributes in the component
- template Frames, before combining them together into the template
- CmpFrame.
-
- \sstitem
- If a template has a value set for any of its main attributes, then
- it will only match Frames which have an identical value for that
- attribute (or which can be transformed, using a built-in
- conversion, so that they have the required value for that
- attribute). If any attribute in the template is un-set, however,
- then Frames are matched regardless of the value they may have
- for that attribute. You may therefore make a template more or
- less specific by choosing the attributes for which you set
- values. This requirement does not apply to 'descriptive' attributes
- such as titles, labels, symbols, etc.
-
- \sstitem
- An important application of this principle involves the Domain
- attribute. Setting the Domain attribute of the template has the
- effect of restricting the search to a particular type of Frame
- (with the domain you specify). Conversely, if the Domain
- attribute is not set in the template, then the domain of the
- Frame found is not relevant, so all Frames are searched. Note
- that the
- DOMAINLIST string provides an alternative way of restricting the
- search in the same manner, but is a more convenient interface if
- you wish to search automatically for another domain if the first
- search fails.
-
- \sstitem
- Normally, a template will only match a Frame which has the
- same number of axes as itself. However, for some classes of
- template, this default behaviour may be changed by means of the
- MinAxes, MaxAxes and \htmlref{MatchEnd}{MatchEnd} attributes. In addition, the
- behaviour of a template may be influenced by its Permute and
- PreserveAxes attributes, which control whether it matches Frames
- whose axes have been permuted, and whether this permutation is
- retained in the Frame which is returned (as opposed to returning
- the axes in the order specified in the template, which is the
- default behaviour). You should consult the descriptions of these
- attributes for details of this more advanced use of templates.
- }
- }
-}
-\sstroutine{
- AST\_FITSCHAN\sstlabel{AST_FITSCHAN}
-}{
- Create a FitsChan
-}{
- \sstdescription{
- This function creates a new \htmlref{FitsChan}{FitsChan} and optionally initialises
- its attributes.
-
- A FitsChan is a specialised form of \htmlref{Channel}{Channel} which supports I/O
- operations involving the use of FITS (Flexible Image Transport
- \htmlref{System}{System}) header cards. Writing an \htmlref{Object}{Object} to a FitsChan (using
- \htmlref{AST\_WRITE}{AST_WRITE}) will, if the Object is suitable, generate a
- description of that Object composed of FITS header cards, and
- reading from a FitsChan will create a new Object from its FITS
- header card description.
-
- While a FitsChan is active, it represents a buffer which may
- contain zero or more 80-character {\tt{"}}header cards{\tt{"}} conforming to
- FITS conventions. Any sequence of FITS-conforming header cards
- may be stored, apart from the {\tt{"}}END{\tt{"}} card whose existence is
- merely implied. The cards may be accessed in any order by using
- the FitsChan's integer \htmlref{Card}{Card} attribute, which identifies a {\tt{"}}current{\tt{"}}
- card, to which subsequent operations apply. Searches
- based on keyword may be performed (using \htmlref{AST\_FINDFITS}{AST_FINDFITS}), new
- cards may be inserted (\htmlref{AST\_PUTFITS}{AST_PUTFITS}, \htmlref{AST\_PUTCARDS}{AST_PUTCARDS}, \htmlref{AST\_SETFITS$<$X$>$}{AST_SETFITSX}) and
- existing ones may be deleted (\htmlref{AST\_DELFITS}{AST_DELFITS}) or changed (AST\_SETFITS$<$X$>$).
-
- When you create a FitsChan, you have the option of specifying
- {\tt{"}}source{\tt{"}} and {\tt{"}}sink{\tt{"}} functions which connect it to external data
- stores by reading and writing FITS header cards. If you provide
- a source function, it is used to fill the FitsChan with header cards
- when it is accessed for the first time. If you do not provide a source
- function, the FitsChan remains empty until you explicitly enter
- data into it (e.g. using AST\_PUTCARDS, AST\_PUTFITS or AST\_WRITE). If you
- provide a sink function, it is used to deliver any remaining
- contents of a FitsChan to an external data store when the
- FitsChan is deleted. If you do not provide a sink function, any
- header cards remaining when the FitsChan is deleted will be
- lost, so you should arrange to extract them first if necessary
- (e.g. using AST\_FINDFITS or \htmlref{AST\_READ}{AST_READ}).
-
- Coordinate system information may be described using FITS header
- cards using several different conventions, termed
- {\tt{"}}encodings{\tt{"}}. When an AST Object is written to (or read from) a
- FitsChan, the value of the FitsChan's \htmlref{Encoding}{Encoding} attribute
- determines how the Object is converted to (or from) a
- description involving FITS header cards. In general, different
- encodings will result in different sets of header cards to
- describe the same Object. Examples of encodings include the DSS
- encoding (based on conventions used by the STScI Digitised Sky
- Survey data), the FITS-WCS encoding (based on a proposed FITS
- standard) and the NATIVE encoding (a near loss-less way of
- storing AST Objects in FITS headers).
-
- The available encodings differ in the range of Objects they can
- represent, in the number of Object descriptions that can coexist
- in the same FitsChan, and in their accessibility to other
- (external) astronomy applications (see the Encoding attribute
- for details). Encodings are not necessarily mutually exclusive
- and it may sometimes be possible to describe the same Object in
- several ways within a particular set of FITS header cards by
- using several different encodings.
-
- The detailed behaviour of AST\_READ and AST\_WRITE, when used with
- a FitsChan, depends on the encoding in use. In general, however,
- all use of AST\_READ is destructive, so that FITS header cards
- are consumed in the process of reading an Object, and are
- removed from the FitsChan (this deletion can be prevented for
- specific cards by calling the
- \htmlref{AST\_RETAINFITS}{AST_RETAINFITS} routine).
-
- If the encoding in use allows only a single Object description
- to be stored in a FitsChan (e.g. the DSS, FITS-WCS and FITS-IRAF
- encodings), then write operations using AST\_WRITE will
- over-write any existing Object description using that
- encoding. Otherwise (e.g. the NATIVE encoding), multiple Object
- descriptions are written sequentially and may later be read
- back in the same sequence.
- }
- \sstinvocation{
- RESULT = AST\_FITSCHAN( SOURCE, SINK, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- SOURCE = FUNCTION (Given)
- }{
- A source routine, which is a function taking two arguments: a
- character argument of length 80 to contain a FITS card, and an
- integer error status argument. It should return an integer value.
- This function will be used by the FitsChan to obtain input
- FITS header cards. On each invocation, it should read the
- next input card from some external source (such as a FITS
- file), and return the contents of the card via its character
- argument. It should return a function result of one unless
- there are no more cards to be read, in which case it should
- return zero. If an error occurs, it should set its error
- status argument to an error value before returning.
-
- If the null routine AST\_NULL is supplied as the SOURCE value,
- the FitsChan will remain empty until cards are explicitly
- stored in it (e.g. using AST\_PUTCARDS or AST\_PUTFITS).
- }
- \sstsubsection{
- SINK = SUBROUTINE (Given)
- }{
- A sink routine, which is a subroutine which takes two
- arguments: a character argument of length 80 to contain a
- FITS card, and an integer error status argument. This routine
- will be used by the FitsChan to deliver any FITS header cards
- it contains when it is finally deleted. On each invocation,
- it should deliver the contents of the character string passed
- to it as a FITS header card to some external data store (such
- as a FITS file). If an error occurs, it should set its error
- status argument to an error value before returning.
-
- If the null routine AST\_NULL is supplied as the SINK value,
- the contents of the FitsChan will not be written out when it
- is deleted.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new FitsChan. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_FITSCHAN = INTEGER
- }{
- A pointer to the new FitsChan.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The names of the routines supplied for the SOURCE and SINK
- arguments should appear in EXTERNAL statements in the Fortran
- routine which invokes AST\_FITSCHAN. However, this is not generally
- necessary for the null routine AST\_NULL (so long as the AST\_PAR
- include file has been used).
-
- \sstitem
- No FITS {\tt{"}}END{\tt{"}} card will be written via the sink routine. You
- should add this card yourself after the FitsChan has been
- deleted.
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
-
- \sstitem
- Note that the null routine AST\_NULL (one underscore) is
- different to AST\_\_NULL (two underscores), which is the null Object
- pointer.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- AST\_FLUXFRAME\sstlabel{AST_FLUXFRAME}
-}{
- Create a FluxFrame
-}{
- \sstdescription{
- This function creates a new \htmlref{FluxFrame}{FluxFrame} and optionally initialises
- its attributes.
-
- A FluxFrame is a specialised form of one-dimensional \htmlref{Frame}{Frame} which
- represents various systems used to represent the signal level in an
- observation. The particular coordinate system to be used is specified
- by setting the FluxFrame's \htmlref{System}{System} attribute qualified, as necessary, by
- other attributes such as the units, etc (see the description of the
- System attribute for details).
-
- All flux values are assumed to be measured at the same frequency or
- wavelength (as given by the \htmlref{SpecVal}{SpecVal} attribute). Thus this class is
- more appropriate for use with images rather than spectra.
- }
- \sstinvocation{
- RESULT = AST\_FLUXFRAME( SPECVAL, SPECFRM, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- SPECVAL = DOUBLE PRECISION (Given)
- }{
- The spectral value to which the flux values refer, given in the
- spectral coordinate system specified by
- SPECFRM. The value supplied for the SPECVAL
- parameter becomes the default value for the SpecVal attribute.
- A value of AST\_\_BAD may be supplied if the spectral position is
- unknown, but this may result in it not being possible for the
- \htmlref{AST\_CONVERT}{AST_CONVERT}
- function to determine a \htmlref{Mapping}{Mapping} between the new FluxFrame and
- some other FluxFrame.
- }
- \sstsubsection{
- SPECFRM = INTEGER (Given)
- }{
- A pointer to a \htmlref{SpecFrame}{SpecFrame} describing the spectral coordinate system
- in which the
- SPECVAL
- parameter is given. A deep copy of this object is taken, so any
- subsequent changes to the SpecFrame using the supplied pointer will
- have no effect on the new FluxFrame.
- AST\_\_NULL can be supplied if AST\_\_BAD is supplied for SPECVAL.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new FluxFrame. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine. If no initialisation is required, a blank
- value may be supplied.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_FLUXFRAME = INTEGER
- }{
- A pointer to the new FluxFrame.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When conversion between two FluxFrames is requested (as when
- supplying FluxFrames AST\_CONVERT),
- account will be taken of the nature of the flux coordinate systems
- they represent, together with any qualifying attribute values, including
- the \htmlref{AlignSystem}{AlignSystem} attribute. The results will therefore fully reflect the
- relationship between positions measured in the two systems. In addition,
- any difference in the Unit attributes of the two systems will also be
- taken into account.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_FORMAT\sstlabel{AST_FORMAT}
-}{
- Format a coordinate value for a Frame axis
-}{
- \sstdescription{
- This function returns a character string containing the
- formatted (character) version of a coordinate value for a \htmlref{Frame}{Frame}
- axis. The formatting applied is determined by the Frame's
- attributes and, in particular, by any Format attribute string
- that has been set for the axis. A suitable default format (based
- on the Digits attribute value) will be applied if necessary.
- }
- \sstinvocation{
- RESULT = AST\_FORMAT( THIS, AXIS, VALUE, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (given)
- }{
- Pointer to the Frame.
- }
- \sstsubsection{
- AXIS = INTEGER (Given)
- }{
- The number of the Frame axis for which formatting is to be
- performed (axis numbering starts at 1 for the first axis).
- }
- \sstsubsection{
- VALUE = DOUBLE PRECISION (Given)
- }{
- The coordinate value to be formatted.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_FORMAT = CHARACTER $*$ ( AST\_\_SZCHR )
- }{
- The formatted value.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A formatted value may be converted back into a numerical
- (double precision) value using \htmlref{AST\_UNFORMAT}{AST_UNFORMAT}.
-
- \sstitem
- A blank string will be returned if this function is invoked
- with STATUS set to an error value, or if it should fail for any
- reason.
- }
- }
-}
-\sstroutine{
- AST\_FRAME\sstlabel{AST_FRAME}
-}{
- Create a Frame
-}{
- \sstdescription{
- This function creates a new \htmlref{Frame}{Frame} and optionally initialises its
- attributes.
-
- A Frame is used to represent a coordinate system. It does this
- in rather the same way that a frame around a graph describes the
- coordinate space in which data are plotted. Consequently, a
- Frame has a \htmlref{Title}{Title} (string) attribute, which describes the
- coordinate space, and contains axes which in turn hold
- information such as Label and Units strings which are used for
- labelling (e.g.) graphical output. In general, however, the
- number of axes is not restricted to two.
-
- Functions are available for converting Frame coordinate values
- into a form suitable for display, and also for calculating
- distances and offsets between positions within the Frame.
-
- Frames may also contain knowledge of how to transform to and
- from related coordinate systems.
- }
- \sstinvocation{
- RESULT = AST\_FRAME( NAXES, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- NAXES = INTEGER (Given)
- }{
- The number of Frame axes (i.e. the number of dimensions of
- the coordinate space which the Frame describes).
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new Frame. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine. If no initialisation is required, a blank
- value may be supplied.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_FRAME = INTEGER
- }{
- A pointer to the new Frame.
- }
- }
- \sstexamples{
- \sstexamplesubsection{
- FRAME = AST\_FRAME( 2, 'Title=Energy Spectrum', STATUS );
- }{
- Creates a new 2-dimensional Frame and initialises its Title
- attribute to the string {\tt{"}}Energy Spectrum{\tt{"}}.
- }
- \sstexamplesubsection{
- FRAME = AST\_FRAME( 2, 'Label(1)=Energy, Label(2)=Response', STATUS );
- }{
- Creates a new 2-dimensional Frame and initialises its axis
- Label attributes to suitable string values.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_FRAMESET\sstlabel{AST_FRAMESET}
-}{
- Create a FrameSet
-}{
- \sstdescription{
- This function creates a new \htmlref{FrameSet}{FrameSet} and optionally initialises
- its attributes.
-
- A FrameSet consists of a set of one or more Frames (which
- describe coordinate systems), connected together by Mappings
- (which describe how the coordinate systems are inter-related). A
- FrameSet makes it possible to obtain a \htmlref{Mapping}{Mapping} between any pair
- of these Frames (i.e. to convert between any of the coordinate
- systems which it describes). The individual Frames are
- identified within the FrameSet by an integer index, with Frames
- being numbered consecutively from one as they are added to the
- FrameSet.
-
- Every FrameSet has a {\tt{"}}base{\tt{"}} \htmlref{Frame}{Frame} and a {\tt{"}}current{\tt{"}} Frame (which
- are allowed to be the same). Any of the Frames may be nominated
- to hold these positions, and the choice is determined by the
- values of the FrameSet's \htmlref{Base}{Base} and \htmlref{Current}{Current} attributes, which hold
- the indices of the relevant Frames. By default, the first Frame
- added to a FrameSet is its base Frame, and the last one added is
- its current Frame.
-
- The base Frame describes the {\tt{"}}native{\tt{"}} coordinate system of
- whatever the FrameSet is used to calibrate (e.g. the pixel
- coordinates of an image) and the current Frame describes the
- {\tt{"}}apparent{\tt{"}} coordinate system in which it should be viewed
- (e.g. displayed, etc.). Any further Frames represent a library
- of alternative coordinate systems, which may be selected by
- making them current.
-
- When a FrameSet is used in a context that requires a Frame,
- (e.g. obtaining its \htmlref{Title}{Title} value, or number of axes), the current
- Frame is used. A FrameSet may therefore be used in place of its
- current Frame in most situations.
-
- When a FrameSet is used in a context that requires a Mapping,
- the Mapping used is the one between its base Frame and its
- current Frame. Thus, a FrameSet may be used to convert {\tt{"}}native{\tt{"}}
- coordinates into {\tt{"}}apparent{\tt{"}} ones, and vice versa. Like any
- Mapping, a FrameSet may also be inverted (see \htmlref{AST\_INVERT}{AST_INVERT}), which
- has the effect of interchanging its base and current Frames and
- hence of reversing the Mapping between them.
-
- Regions may be added into a FrameSet (since a \htmlref{Region}{Region} is a type of
- Frame), either explicitly or as components within CmpFrames. In this
- case the Mapping between a pair of Frames within a FrameSet will
- include the effects of the clipping produced by any Regions included
- in the path between the Frames.
- }
- \sstinvocation{
- RESULT = AST\_FRAMESET( FRAME, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- FRAME = INTEGER (Given)
- }{
- Pointer to the first Frame to be inserted into the
- FrameSet. This initially becomes both the base and the
- current Frame. (Further Frames may be added using the
- \htmlref{AST\_ADDFRAME}{AST_ADDFRAME} routine.)
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new FrameSet. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine. If no initialisation is required, a blank
- value may be supplied.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_FRAMESET
- }{
- A pointer to the new FrameSet.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If a pointer to an existing FrameSet is given for the FRAME
- argument, then the new FrameSet will (as a special case) be
- initialised to contain the same Frames and Mappings, and to have
- the same attribute values, as the one supplied. This process is
- similar to making a copy of a FrameSet (see \htmlref{AST\_COPY}{AST_COPY}), except
- that the Frames and Mappings contained in the original are not
- themselves copied, but are shared by both FrameSets.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_GENCURVE\sstlabel{AST_GENCURVE}
-}{
- Draw a generalized curve
-}{
- \sstdescription{
- This routine draws a general user-defined curve defined by the
- supplied \htmlref{Mapping}{Mapping}. Note that the curve is transformed into graphical
- coordinate space for plotting, so that a straight line in
- physical coordinates may result in a curved line being drawn if
- the Mapping involved is non-linear. Any discontinuities in the
- Mapping between physical and graphical coordinates are
- catered for, as is any clipping established using \htmlref{AST\_CLIP}{AST_CLIP}.
-
- If you need to draw simple straight lines (geodesics), \htmlref{AST\_CURVE}{AST_CURVE}
- or \htmlref{AST\_POLYCURVE}{AST_POLYCURVE} will usually be easier to use and faster.
- }
- \sstinvocation{
- CALL AST\_GENCURVE( THIS, MAP )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the \htmlref{Plot}{Plot}.
- }
- \sstsubsection{
- MAP = INTEGER (Given)
- }{
- Pointer to a Mapping. This Mapping should have 1 input
- coordinate representing offset along the required curve,
- normalized so that the start of the curve is at offset 0.0,
- and the end of the curve is at offset 1.0. Note, this offset
- does not need to be linearly related to distance along the curve.
- The number of output coordinates should equal the number of axes
- in the current \htmlref{Frame}{Frame} of the Plot. The Mapping should map a
- specified offset along the curve, into the corresponding
- coordinates in the current Frame of the Plot. The inverse
- transformation need not be defined.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- An error results if the base Frame of the Plot is not 2-dimensional.
-
- \sstitem
- An error also results if the transformation between the
- current and base Frames of the Plot is not defined (i.e. the
- Plot's \htmlref{TranInverse}{TranInverse} attribute is zero).
- }
- }
-}
-\sstroutine{
- AST\_GET$<$X$>$\sstlabel{AST_GETX}
-}{
- Get an attribute value for an Object
-}{
- \sstdescription{
- This is a family of functions which return a specified attribute
- value for an \htmlref{Object}{Object} using one of several different data
- types. The type is selected by replacing $<$X$>$ in the function name
- by C, D, I, L or R, to obtain a result in Character, Double
- precision, Integer, Logical or Real format, respectively.
-
- If possible, the attribute value is converted to the type you
- request. If conversion is not possible, an error will result.
- }
- \sstinvocation{
- RESULT = AST\_GET$<$X$>$( THIS, ATTRIB, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Object.
- }
- \sstsubsection{
- ATTRIB = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing the name of the attribute whose
- value is required.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- These functions apply to all Objects.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_GET$<$X$>$ = $<$X$>$type
- }{
- The attribute value, in the data type corresponding to $<$X$>$.
- }
- }
- \sstexamples{
- \sstexamplesubsection{
- WRITE( $*$, '('' \htmlref{RefCount}{RefCount} = '', A10 )' ) AST\_GETC( Z, 'RefCount', STATUS )
- }{
- Prints the RefCount attribute value for Object Z as a character
- string.
- }
- \sstexamplesubsection{
- NAXES = AST\_GETI( FRAME, '\htmlref{Naxes}{Naxes}', STATUS )
- }{
- Obtains the value of the Naxes attribute for Object FRAME as an
- integer.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Attribute names are not case sensitive and may be surrounded
- by white space.
-
- \sstitem
- An appropriate {\tt{"}}null{\tt{"}} value will be returned if this function
- is invoked with STATUS set to an error value, or if it should
- fail for any reason. This null value is zero for numeric
- values, .FALSE. for logical values, and blank for character values.
-
- \sstitem
- Numerical attribute values of zero translate to logical value
- .FALSE. and all other numerical values translate to .TRUE..
- }
- }
-}
-\sstroutine{
- AST\_GETACTIVEUNIT\sstlabel{AST_GETACTIVEUNIT}
-}{
- Determines how the Unit attribute will be used
-}{
- \sstdescription{
- This routine
- returns the current value of the ActiveUnit flag for a \htmlref{Frame}{Frame}. See
- the description of the \htmlref{AST\_SETACTIVEUNIT}{AST_SETACTIVEUNIT} routine
- for a description of the ActiveUnit flag.
- }
- \sstinvocation{
- RESULT = AST\_GETACTIVEUNIT( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Frame.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_GETACTIVEUNIT = LOGICAL
- }{
- The current value of the ActiveUnit flag.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A value of .FALSE. will be returned if this function is
- invoked with STATUS set to an error value, or if it should fail for
- any reason.
- }
- }
-}
-\sstroutine{
- AST\_GETFITS$<$X$>$\sstlabel{AST_GETFITSX}
-}{
- Get a named keyword value from a FitsChan
-}{
- \sstdescription{
- This is a family of functions which gets a value for a named keyword
- from a \htmlref{FitsChan}{FitsChan} using one of several different data types. The data
- type of the returned value is selected by replacing $<$X$>$ in the function
- name by one of the following strings representing the recognised FITS
- data types:
-
- The data type of the returned value is selected by replacing $<$X$>$ in the
- function name by one of the following strings representing the
- recognised FITS data types:
-
- \sstitemlist{
-
- \sstitem
- CF - Complex floating point values.
-
- \sstitem
- CI - Complex integer values.
-
- \sstitem
- F - Floating point values.
-
- \sstitem
- I - Integer values.
-
- \sstitem
- L - Logical (i.e. boolean) values.
-
- \sstitem
- S - String values.
-
- \sstitem
- CN - A {\tt{"}}CONTINUE{\tt{"}} value, these are treated like string values, but
- are encoded without an equals sign.
-
- }
- The data type of the {\tt{"}}value{\tt{"}}
- argument
- depends on $<$X$>$ as follows:
-
- \sstitemlist{
-
- \sstitem
- CF - DOUBLE PRECISION(2) (a 2 element array to hold the real and
- imaginary parts of the complex value).
-
- \sstitem
- CI - INTEGER(2) (a 2 element array to hold the real and imaginary
- parts of the complex value).
-
- \sstitem
- F - DOUBLE PRECISION.
-
- \sstitem
- I - INTEGER
-
- \sstitem
- L - LOGICAL
-
- \sstitem
- S - CHARACTER
-
- \sstitem
- CN - CHARACTER
- }
- }
- \sstinvocation{
- RESULT = AST\_GETFITS$<$X$>$( THIS, NAME, VALUE, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the FitsChan.
- }
- \sstsubsection{
- NAME = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string
- containing the FITS keyword name. This may be a complete FITS
- header card, in which case the keyword to use is extracted from
- it. No more than 80 characters are read from this string.
- }
- \sstsubsection{
- VALUE = $<$X$>$type (Given)
- }{
- A
- buffer to receive the keyword value. The data type depends on $<$X$>$
- as described above.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_GETFITS$<$X$>$ = LOGICAL
- }{
- .FALSE.
- is returned if the keyword was not found in the FitsChan (no error
- is reported). Otherwise, a value of
- .TRUE.
- is returned.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The card following the current card is checked first. If this is
- not the required card, then the rest of the FitsChan is searched,
- starting with the first card added to the FitsChan. Therefore cards
- should be accessed in the order they are stored in the FitsChan (if
- possible) as this will minimise the time spent searching for cards.
-
- \sstitem
- If the requested card is found, it becomes the current card,
- otherwise the current card is left pointing at the {\tt{"}}end-of-file{\tt{"}}.
-
- \sstitem
- If the stored keyword value is not of the requested type, it is
- converted into the requested type.
-
- \sstitem
- If the keyword is found in the FitsChan, but has no associated
- value, an error is reported. If necessary, the
- \htmlref{AST\_TESTFITS}{AST_TESTFITS}
- function can be used to determine if the keyword has a defined
- value in the FitsChan prior to calling this function.
-
- \sstitem
- An error will be reported if the keyword name does not conform
- to FITS requirements.
-
- \sstitem
- .FALSE.
- is returned as the function value if an error has already occurred,
- or if this function should fail for any reason.
-
- \sstitem
- The FITS standard says that string keyword values should be
- padded with trailing spaces if they are shorter than 8 characters.
- For this reason, trailing spaces are removed from the string
- returned by
- AST\_GETFITSS
- if the original string (including any trailing spaces) contains 8
- or fewer characters. Trailing spaces are not removed from longer
- strings.
- }
- }
-}
-\sstroutine{
- AST\_GETFRAME\sstlabel{AST_GETFRAME}
-}{
- Obtain a pointer to a specified Frame in a FrameSet
-}{
- \sstdescription{
- This function returns a pointer to a specified \htmlref{Frame}{Frame} in a
- \htmlref{FrameSet}{FrameSet}.
- }
- \sstinvocation{
- RESULT = AST\_GETFRAME( THIS, IFRAME, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the FrameSet.
- }
- \sstsubsection{
- IFRAME = INTEGER (Given)
- }{
- The index of the required Frame within the FrameSet. This
- value should lie in the range from 1 to the number of Frames
- in the FrameSet (as given by its \htmlref{Nframe}{Nframe} attribute).
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_GETFRAME = INTEGER
- }{
- A pointer to the requested Frame.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A value of AST\_\_BASE or AST\_\_CURRENT may be given for the
- IFRAME argument to specify the base Frame or the current
- Frame respectively.
-
- \sstitem
- This function increments the \htmlref{RefCount}{RefCount} attribute of the
- selected Frame by one.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_GETGRFCONTEXT\sstlabel{AST_GETGRFCONTEXT}
-}{
- Return the KeyMap that describes a Plot's graphics context
-}{
- \sstdescription{
- This routine
- returns a reference to a \htmlref{KeyMap}{KeyMap} that will be passed to any drawing
- routines registered using \htmlref{AST\_GRFSET}{AST_GRFSET}.
- This KeyMap can be used by an application to pass information to
- the drawing routines
- about the context in which they are being called. The contents of
- the KeyMap are never accessed byt the \htmlref{Plot}{Plot} class itself.
- }
- \sstinvocation{
- RESULT = AST\_GETGRFCONTEXT( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Plot.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_GETGRFCONTEXT = INTEGER
- }{
- A pointer to the graphics context KeyMap. The returned pointer
- should be annulled when it is no longer needed.
- }
- }
-}
-\sstroutine{
- AST\_GETLINE\sstlabel{AST_GETLINE}
-}{
- Obtain text to be written by a Channel sink routine
-}{
- \sstdescription{
- This routine should only be used when implementing a routine
- which will be passed as the SINK argument to \htmlref{AST\_CHANNEL}{AST_CHANNEL}. It
- should be used to obtain (from the AST library) each line of
- text which is to be written to the external data sink. One such
- line should be obtained in this way for each invocation of the
- sink routine.
- }
- \sstinvocation{
- CALL AST\_GETLINE( LINE, L, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- LINE = CHARACTER $*$ ( $*$ ) (Returned)
- }{
- The line of text to be written. Depending on the length of
- character variable supplied, the returned text may be
- truncated if necessary. Note, however, that it will not be
- padded with blanks in order to fill this variable.
- }
- \sstsubsection{
- L = INTEGER (Returned)
- }{
- The number of characters returned, which may be zero. Note
- that characters beyond the L'th character in the LINE
- variable are not modified and may therefore contain junk.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This routine is only available in the Fortran interface to the
- AST library.
- }
- }
-}
-\sstroutine{
- AST\_GETMAPPING\sstlabel{AST_GETMAPPING}
-}{
- Obtain a Mapping that converts between two Frames in a FrameSet
-}{
- \sstdescription{
- This function returns a pointer to a \htmlref{Mapping}{Mapping} that will convert
- coordinates between the coordinate systems represented by two
- Frames in a \htmlref{FrameSet}{FrameSet}.
- }
- \sstinvocation{
- RESULT = AST\_GETMAPPING( THIS, IFRAME1, IFRAME2, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the FrameSet.
- }
- \sstsubsection{
- IFRAME1 = INTEGER (Given)
- }{
- The index of the first \htmlref{Frame}{Frame} in the FrameSet. This Frame describes
- the coordinate system for the {\tt{"}}input{\tt{"}} end of the Mapping.
- }
- \sstsubsection{
- IFRAME2 = INTEGER (Given)
- }{
- The index of the second Frame in the FrameSet. This Frame
- describes the coordinate system for the {\tt{"}}output{\tt{"}} end of the
- Mapping.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_GETMAPPING = INTEGER
- }{
- Pointer to a Mapping whose forward transformation converts
- coordinates from the first coordinate system to the second
- one, and whose inverse transformation converts coordinates in
- the opposite direction.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The returned Mapping will include the clipping effect of any
- Regions which occur on the path between the two supplied Frames
- (this includes the two supplied Frames themselves).
-
- \sstitem
- The values given for the IFRAME1 and IFRAME2 arguments
- should lie in the range from 1 to the number of Frames in the
- FrameSet (as given by its \htmlref{Nframe}{Nframe} attribute). A value of
- AST\_\_BASE or AST\_\_CURRENT may also be given to identify the
- FrameSet's base Frame or current Frame respectively. It is
- permissible for both these arguments to have the same value, in
- which case a unit Mapping (\htmlref{UnitMap}{UnitMap}) is returned.
-
- \sstitem
- It should always be possible to generate the Mapping
- requested, but this does necessarily guarantee that it will be
- able to perform the required coordinate conversion. If
- necessary, the \htmlref{TranForward}{TranForward} and \htmlref{TranInverse}{TranInverse} attributes of the
- returned Mapping should be inspected to determine if the
- required transformation is available.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_GETREFPOS\sstlabel{AST_GETREFPOS}
-}{
- Return the reference position in a specified celestial coordinate system
-}{
- \sstdescription{
- This routine
- returns the reference position (specified by attributes \htmlref{RefRA}{RefRA} and
- \htmlref{RefDec}{RefDec}) converted to the celestial coordinate system represented by
- a supplied \htmlref{SkyFrame}{SkyFrame}. The celestial longitude and latitude values
- are returned in radians.
- }
- \sstinvocation{
- CALL AST\_GETREFPOS( THIS, FRM, LON, LAT, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the \htmlref{SpecFrame}{SpecFrame}.
- }
- \sstsubsection{
- FRM = INTEGER (Given)
- }{
- Pointer to the SkyFrame which defines the required celestial
- coordinate system.
- If AST\_\_NULL
- is supplied, then the longitude and latitude values are returned
- as FK5 J2000 RA and Dec values.
- }
- \sstsubsection{
- LON = DOUBLE PRECISION (Returned)
- }{
- The
- longitude of the reference point, in the coordinate system
- represented by the supplied SkyFrame (radians).
- }
- \sstsubsection{
- LAT = DOUBLE PRECISION (Returned)
- }{
- The
- latitude of the reference point, in the coordinate system
- represented by the supplied SkyFrame (radians).
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Values of AST\_\_BAD will be returned if this function is
- invoked with STATUS set to an error value, or if it should fail for
- any reason.
- }
- }
-}
-\sstroutine{
- AST\_GETREGIONBOUNDS\sstlabel{AST_GETREGIONBOUNDS}
-}{
- Returns the bounding box of Region
-}{
- \sstdescription{
- This routine
- returns the upper and lower limits of a box which just encompasses
- the supplied \htmlref{Region}{Region}. The limits are returned as axis values within
- the \htmlref{Frame}{Frame} represented by the Region. The value of the \htmlref{Negated}{Negated}
- attribute is ignored (i.e. it is assumed that the Region has not
- been negated).
- }
- \sstinvocation{
- CALL AST\_GETREGIONBOUNDS( THIS, LBND, UBND, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Region.
- }
- \sstsubsection{
- LBND() = DOUBLE PRECISION (Returned)
- }{
- An
- array in which to return the lower axis bounds covered by the Region.
- It should have at least as many elements as there are axes in the
- Region. If an axis has no lower limit, the returned value will
- be the largest possible negative value.
- }
- \sstsubsection{
- UBND() = DOUBLE PRECISION (Returned)
- }{
- An
- array in which to return the upper axis bounds covered by the Region.
- It should have at least as many elements as there are axes in the
- Region. If an axis has no upper limit, the returned value will
- be the largest possible positive value.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The value of the Negated attribute is ignored (i.e. it is assumed that
- the Region has not been negated).
-
- \sstitem
- If an axis has no extent on an axis then the lower limit will be
- returned larger than the upper limit. Note, this is different to an
- axis which has a constant value (in which case both lower and upper
- limit will be returned set to the constant value).
- }
- }
-}
-\sstroutine{
- AST\_GETREGIONFRAME\sstlabel{AST_GETREGIONFRAME}
-}{
- Obtain a pointer to the encapsulated Frame within a Region
-}{
- \sstdescription{
- This function returns a pointer to the \htmlref{Frame}{Frame} represented by a
- \htmlref{Region}{Region}.
- }
- \sstinvocation{
- RESULT = AST\_GETREGIONFRAME( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Region.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_GETREGIONFRAME = INTEGER
- }{
- A pointer to a deep copy of the Frame represented by the Region.
- Using this pointer to modify the Frame will have no effect on
- the Region. To modify the Region, use the Region pointer directly.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_GETREGIONPOINTS\sstlabel{AST_GETREGIONPOINTS}
-}{
- Returns the positions that define the given Region
-}{
- \sstdescription{
- This routine
- returns the axis values at the points that define the supplied
- \htmlref{Region}{Region}. The particular meaning of these points will depend on the
- type of class supplied, as listed below under {\tt{"}}Applicability:{\tt{"}}.
- }
- \sstinvocation{
- CALL AST\_GETREGIONPOINTS( THIS, MAXPOINT, MAXCOORD, NPOINT, POINTS,
- STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Region.
- }
- \sstsubsection{
- MAXPOINT = INTEGER (Given)
- }{
- If zero, the number of points needed to define the Region is
- returned in
- NPOINT,
- but no axis values are returned and all other parameters are ignored.
- If not zero, the supplied value should be the length of the
- first dimension of the POINTS
- array. An error is reported if the number of points needed to define
- the Region exceeds this number.
- }
- \sstsubsection{
- MAXCOORD = INTEGER (Given)
- }{
- The length of the
- second dimension of the POINTS array.
- An error is reported if the number of axes in the supplied Region
- exceeds this number.
- }
- \sstsubsection{
- NPOINT = INTEGER (Returned)
- }{
- The
- number of points defining the Region.
- }
- \sstsubsection{
- POINTS( MAXPOINT, MAXCOORD ) = DOUBLE PRECISION (Returned)
- }{
- An array in which to return the coordinates values at the
- positions that define the Region. These are stored such that the
- value of coordinate number COORD for point number POINT
- is found in element POINTS(POINT,COORD).
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Region
- }{
- All Regions have this attribute.
- }
- \sstsubsection{
- \htmlref{Box}{Box}
- }{
- The first returned position is the Box centre, and the second is
- a Box corner.
- }
- \sstsubsection{
- \htmlref{Circle}{Circle}
- }{
- The first returned position is the Circle centre, and the second is
- a point on the circumference.
- }
- \sstsubsection{
- \htmlref{CmpRegion}{CmpRegion}
- }{
- Returns a value of zero for
- NPOINT
- and leaves the supplied array contents unchanged. To find the
- points defining a CmpRegion, use this method on the component
- Regions, which can be accessed by invoking
- \htmlref{AST\_DECOMPOSE}{AST_DECOMPOSE}
- on the CmpRegion.
- }
- \sstsubsection{
- \htmlref{Ellipse}{Ellipse}
- }{
- The first returned position is the Ellipse centre. The second is
- the end of one of the axes of the ellipse. The third is some
- other point on the circumference of the ellipse, distinct from
- the second point.
- }
- \sstsubsection{
- \htmlref{Interval}{Interval}
- }{
- The first point corresponds to the lower bounds position, and
- the second point corresponds to the upper bounds position. These
- are reversed to indicate an extcluded interval rather than an
- included interval. See the Interval constructor for more
- information.
- }
- \sstsubsection{
- \htmlref{NullRegion}{NullRegion}
- }{
- Returns a value of zero for
- NPOINT
- and leaves the supplied array contents unchanged.
- }
- \sstsubsection{
- \htmlref{PointList}{PointList}
- }{
- The positions returned are those that were supplied when the
- PointList was constructed.
- }
- \sstsubsection{
- \htmlref{Polygon}{Polygon}
- }{
- The positions returned are the vertex positions that were supplied
- when the Polygon was constructed.
- }
- \sstsubsection{
- \htmlref{Prism}{Prism}
- }{
- Returns a value of zero for
- NPOINT
- and leaves the supplied array contents unchanged. To find the
- points defining a Prism, use this method on the component
- Regions, which can be accessed by invoking
- AST\_DECOMPOSE
- on the CmpRegion.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the coordinate system represented by the Region has been
- changed since it was first created, the returned axis values refer
- to the new (changed) coordinate system, rather than the original
- coordinate system. Note however that if the transformation from
- original to new coordinate system is non-linear, the shape within
- the new coordinate system may be distorted, and so may not match
- that implied by the name of the Region subclass (Circle, Box, etc).
- }
- }
-}
-\sstroutine{
- AST\_GETSTCCOORD\sstlabel{AST_GETSTCCOORD}
-}{
- Return information about an AstroCoords element stored in an Stc
-}{
- \sstdescription{
- When any sub-class of \htmlref{Stc}{Stc} is created, the constructor function
- allows one or more AstroCoords elements to be stored within the Stc.
- This function allows any one of these AstroCoords elements to be
- retrieved. The format of the returned information is the same as
- that used to pass the original information to the Stc constructor.
- That is, the information is returned in a \htmlref{KeyMap}{KeyMap} structure
- containing elements with one or more of the keys given by symbolic
- constants AST\_\_STCNAME, AST\_\_STCVALUE, AST\_\_STCERROR, AST\_\_STCRES,
- AST\_\_STCSIZE and AST\_\_STCPIXSZ.
-
- If the coordinate system represented by the Stc has been changed
- since it was created (for instance, by changing its \htmlref{System}{System}
- attribute), then the sizes and positions in the returned KeyMap
- will reflect the change in coordinate system.
- }
- \sstinvocation{
- RESULT = AST\_GETSTCCOORD( THIS, ICOORD, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Stc.
- }
- \sstsubsection{
- ICOORD = INTEGER (Given)
- }{
- The index of the AstroCoords element required. The first has index
- one. The number of AstroCoords elements in the Stc can be found using
- function \htmlref{AST\_GETSTCNCOORD}{AST_GETSTCNCOORD}.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_GETSTCCOORD = INTEGER
- }{
- A pointer to a new KeyMap containing the required information.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_GETSTCNCOORD\sstlabel{AST_GETSTCNCOORD}
-}{
- Return the number of AstroCoords elements stored in an Stc
-}{
- \sstdescription{
- This function returns the number of AstroCoords elements stored in
- an \htmlref{Stc}{Stc}.
- }
- \sstinvocation{
- RESULT = AST\_GETSTCNCOORD( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Stc.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_GETSTCNCOORD = INTEGER
- }{
- The number of AstroCoords elements stored in the Stc.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Zero will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_GETSTCREGION\sstlabel{AST_GETSTCREGION}
-}{
- Obtain a copy of the encapsulated Region within a Stc
-}{
- \sstdescription{
- This function returns a pointer to a deep copy of the \htmlref{Region}{Region}
- supplied when the \htmlref{Stc}{Stc} was created.
- }
- \sstinvocation{
- RESULT = AST\_GETSTCREGION( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Stc.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_GETSTCREGION = INTEGER
- }{
- A pointer to a deep copy of the Region encapsulated within the
- supplied Stc.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_GETUNC\sstlabel{AST_GETUNC}
-}{
- Obtain uncertainty information from a Region
-}{
- \sstdescription{
- This function returns a \htmlref{Region}{Region} which represents the uncertainty
- associated with positions within the supplied Region. See
- \htmlref{AST\_SETUNC}{AST_SETUNC}
- for more information about Region uncertainties and their use.
- }
- \sstinvocation{
- RESULT = AST\_GETUNC( THIS, DEF, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Region.
- }
- \sstsubsection{
- DEF = LOGICAL (Given)
- }{
- Controls what is returned if no uncertainty information has been
- associated explicitly with the supplied Region. If
- .TRUE.
- is supplied, then the default uncertainty Region used internally
- within AST is returned (see {\tt{"}}Applicability{\tt{"}} below). If
- .FALSE. is supplied, then AST\_\_NULL
- will be returned (without error).
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{CmpRegion}{CmpRegion}
- }{
- The default uncertainty for a CmpRegion is taken from one of the
- two component Regions. If the first component Region has a
- non-default uncertainty, then it is used as the default uncertainty
- for the parent CmpRegion. Otherwise, if the second component Region
- has a non-default uncertainty, then it is used as the default
- uncertainty for the parent CmpRegion. If neither of the
- component Regions has non-default uncertainty, then the default
- uncertainty for the CmpRegion is 1.0E-6 of the bounding box of
- the CmpRegion.
- }
- \sstsubsection{
- \htmlref{Prism}{Prism}
- }{
- The default uncertainty for a Prism is formed by combining the
- uncertainties from the two component Regions. If a component
- Region does not have a non-default uncertainty, then its default
- uncertainty will be used to form the default uncertainty of the
- parent Prism.
- }
- \sstsubsection{
- Region
- }{
- For other classes of Region, the default uncertainty is 1.0E-6
- of the bounding box of the Region. If the bounding box has zero
- width on any axis, then the uncertainty will be 1.0E-6 of the
- axis value.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_GETUNC = INTEGER
- }{
- A pointer to a Region describing the uncertainty in the supplied
- Region.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If uncertainty information is associated with a Region, and the
- coordinate system described by the Region is subsequently changed
- (e.g. by changing the value of its \htmlref{System}{System} attribute, or using the
- \htmlref{AST\_MAPREGION}{AST_MAPREGION}
- function), then the uncertainty information returned by this function
- will be modified so that it refers to the coordinate system currently
- described by the supplied Region.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_GRFPOP\sstlabel{AST_GRFPOP}
-}{
- Restore previously saved graphics functions used by a Plot
-}{
- \sstdescription{
- The \htmlref{AST\_GRFPUSH}{AST_GRFPUSH} and AST\_GRFPOP functions are intended for situations
- where it is necessary to make temporary changes to the graphics
- functions used by the \htmlref{Plot}{Plot}. The current functions should first be
- saved by calling AST\_GRFPUSH. New functions should then be registered
- using \htmlref{AST\_GRFSET}{AST_GRFSET}. The required graphics should then be produced.
- Finally, AST\_GRFPOP should be called to restore the original graphics
- functions.
- }
- \sstinvocation{
- CALL AST\_GRFPOP( THIS STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Plot.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This routine returns without action if there are no snapshots to
- restore. No error is reported in this case.
- }
- }
-}
-\sstroutine{
- AST\_GRFPUSH\sstlabel{AST_GRFPUSH}
-}{
- Save the current graphics functions used by a Plot
-}{
- \sstdescription{
- This routine takes a snapshot of the graphics functions which are
- currently registered with the supplied \htmlref{Plot}{Plot}, and saves the snapshot
- on a first-in-last-out stack within the Plot. The snapshot can be
- restored later using function
- \htmlref{AST\_GRFPOP}{AST_GRFPOP}.
-
- The AST\_GRFPUSH and AST\_GRFPOP functions are intended for situations
- where it is necessary to make temporary changes to the graphics
- functions used by the Plot. The current functions should first be
- saved by calling AST\_GRFPUSH. New functions should then be registered
- using \htmlref{AST\_GRFSET}{AST_GRFSET}. The required graphics should then be produced.
- Finally, AST\_GRFPOP should be called to restore the original graphics
- functions.
- }
- \sstinvocation{
- CALL AST\_GRFPUSH( THIS STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Plot.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
-}
-\sstroutine{
- AST\_GRFSET\sstlabel{AST_GRFSET}
-}{
- Register a graphics routine for use by a Plot
-}{
- \sstdescription{
- This routine can be used to select the underlying graphics
- routines to be used when the supplied \htmlref{Plot}{Plot} produces graphical output.
- If this routine is not called prior to producing graphical
- output, then the underlying graphics routines selected at
- link-time (using the \htmlref{ast\_link}{ast_link} command) will be used. To use
- alternative graphics routines, call this routine before
- the graphical output is created, specifying the graphics
- routines to be used. This will register the routine for future
- use, but the routine will not actually be used until the \htmlref{Grf}{Grf}
- attribute is given a non-zero value.
- }
- \sstinvocation{
- CALL AST\_GRFSET( THIS, NAME, FUN, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Plot.
- }
- \sstsubsection{
- NAME = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A name indicating the graphics routine to be replaced.
- Various graphics routines are used by the
- Plot class, and any combination of them may be supplied by calling
- this routine once for each routine to be replaced. If any of the
- graphics routines are not replaced in this way, the
- corresponding routines in the graphics interface selected at
- link-time (using the ast\_link command) are used. The allowed
- function names are:
-
- \sstitemlist{
-
- \sstitem
- Attr - Enquire or set a graphics attribute value
-
- \sstitem
- Cap - Inquire a capability
-
- \sstitem
- Flush - Flush all pending graphics to the output device
-
- \sstitem
- Line - Draw a polyline (i.e. a set of connected lines)
-
- \sstitem
- Mark - Draw a set of markers
-
- \sstitem
- Qch - Return the character height in world coordinates
-
- \sstitem
- Scales - Get the axis scales
-
- \sstitem
- Text - Draw a character string
-
- \sstitem
- TxExt - Get the extent of a character string
-
- }
- The string is case insensitive. For details of the interface
- required for each, see the sections below.
- }
- \sstsubsection{
- FUN = INTEGER FUNCTION (Given)
- }{
- The name of the routine to be used to provide the
- functionality indicated by parameter NAME (the name
- should also appear in a Fortran EXTERNAL statement in the
- routine which invokes AST\_GRFSET).
-
- Once a routine has been provided, the {\tt{"}}null{\tt{"}} routine AST\_NULL can
- be supplied in a subsequent call to astGrfSet to reset the routine
- to the corresponding routine in the graphics interface selected at
- link-time. AST\_NULL is defined in the AST\_PAR include file.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstdiytopic{
- Function Interfaces
- }{
- All the functions listed below (except for {\tt{"}}Cap{\tt{"}}) should return an
- integer value of 0 if an error occurs, and 1 otherwise. All x and y
- values refer
- to {\tt{"}}graphics cordinates{\tt{"}} as defined by the GRAPHBOX parameter of
- the \htmlref{AST\_PLOT}{AST_PLOT} call which created the Plot.
-
- The first argument (GRFCON)
- for each function is an AST \htmlref{KeyMap}{KeyMap} pointer that can be used by the
- called function to establish the context in which it is being called.
- The contents of the KeyMap are determined by the calling
- application, which should obtain a pointer to the KeyMap using the
- \htmlref{AST\_GETGRFCONTEXT}{AST_GETGRFCONTEXT} routine,
- and then store any necessary information in the KeyMap using the
- methods of the KeyMap class. Note, the functions listed below
- should never annul or delete the supplied KeyMap pointer.
- }
- \sstdiytopic{
- Attr
- }{
- The {\tt{"}}Attr{\tt{"}} function returns the current value of a specified graphics
- attribute, and optionally establishes a new value. The supplied
- value is converted to an integer value if necessary before use.
- It requires the following interface:
-
- INTEGER FUNCTION ATTR( GRFCON, ATT, VAL, OLDVAL, PRIM )
-
- \sstitemlist{
-
- \sstitem
- GRFCON = INTEGER (Given) -
- A KeyMap containing information passed from the calling application.
-
- \sstitem
- ATT = INTEGER (Given) - An integer identifying the required attribute.
- The following symbolic values are defined in GRF\_PAR:
- GRF\_\_STYLE (Line style),
- GRF\_\_WIDTH (Line width),
- GRF\_\_SIZE (Character and marker size scale factor),
- GRF\_\_FONT (Character font),
- GRF\_\_COLOUR (Colour index).
-
- \sstitem
- VAL = DOUBLE PRECISION (Given) -
- no value is stored.
-
- \sstitem
- OLDVAL = DOUBLE PRECISION (Returned) - Returned holding
- the attribute value.
-
- \sstitem
- PRIM = INTEGER (Given) -
- The sort of graphics primitive to be drawn with the new attribute.
- Identified by the following values defined in GRF\_PAR:
- GRF\_\_LINE,
- GRF\_\_MARK,
- GRF\_\_TEXT.
- }
- }
- \sstdiytopic{
- Cap
- }{
- The {\tt{"}}Cap{\tt{"}} function is called to determine if the grf module has a
- given capability, as indicated by the {\tt{"}}cap{\tt{"}} argument:
-
- INTEGER FUNCTION CAP( GRFCON, CAP, VALUE )
-
- \sstitemlist{
-
- \sstitem
- GRFCON = INTEGER (Given) -
- A KeyMap containing information passed from the calling application.
-
- \sstitem
- CAP = INTEGER (Given)
- The capability being inquired about. This will be one of the
- following constants defined in GRF\_PAR:
-
- }
- GRF\_\_SCALES: This function should return a non-zero value if the
- {\tt{"}}Scales{\tt{"}} function is implemented, and zero otherwise. The supplied
- VALUE argument should be ignored.
-
- GRF\_\_MJUST: This function should return a non-zero value if
- the {\tt{"}}Text{\tt{"}} and {\tt{"}}TxExt{\tt{"}} functions recognise {\tt{"}}M{\tt{"}} as a
- character in the justification string. If the first character of
- a justification string is {\tt{"}}M{\tt{"}}, then the text should be justified
- with the given reference point at the bottom of the bounding box.
- This is different to {\tt{"}}B{\tt{"}} justification, which requests that the
- reference point be put on the baseline of the text, since some
- characters hang down below the baseline. If the {\tt{"}}Text{\tt{"}} or
- {\tt{"}}TxExt{\tt{"}} function cannot differentiate between {\tt{"}}M{\tt{"}} and {\tt{"}}B{\tt{"}},
- then this function should return zero, in which case {\tt{"}}M{\tt{"}}
- justification will never be requested by Plot. The supplied
- VALUE argument should be ignored.
-
- GRF\_\_ESC: This function should return a non-zero value if the
- {\tt{"}}Text{\tt{"}} and {\tt{"}}TxExt{\tt{"}} functions can recognise and interpret
- graphics escape sequences within the supplied string (see
- attribute \htmlref{Escape}{Escape}). Zero should be returned if escape sequences
- cannot be interpreted (in which case the Plot class will interpret
- them itself if needed). The supplied VALUE argument should be
- ignored only if escape sequences cannot be interpreted by {\tt{"}}Text{\tt{"}} and
- {\tt{"}}TxExt{\tt{"}}. Otherwise, VALUE indicates whether {\tt{"}}Text{\tt{"}} and {\tt{"}}TxExt{\tt{"}}
- should interpret escape sequences in subsequent calls. If VALUE is
- non-zero then escape sequences should be interpreted by {\tt{"}}Text{\tt{"}} and
- {\tt{"}}TxExt{\tt{"}}. Otherwise, they should be drawn as literal text.
-
- \sstitemlist{
-
- \sstitem
- VALUE = INTEGER (Given)
- The use of this parameter depends on the value of CAP as
- described above.
-
- \sstitem
- Returned Function Value:
- The value returned by the function depends on the value of CAP
- as described above. Zero should be returned if the supplied
- capability is not recognised.
- }
- }
- \sstdiytopic{
- Flush
- }{
- The {\tt{"}}Flush{\tt{"}} function ensures that the display device is up-to-date,
- by flushing any pending graphics to the output device. It
- requires the following interface:
-
- INTEGER FUNCTION FLUSH( GRFCON )
-
- \sstitemlist{
-
- \sstitem
- GRFCON = INTEGER (Given) -
- A KeyMap containing information passed from the calling application.
- }
- }
- \sstdiytopic{
- Line
- }{
- The {\tt{"}}Line{\tt{"}} function displays lines joining the given positions and
- requires the following interface:
-
- INTEGER FUNCTION LINE( GRFCON, N, X, Y )
-
- \sstitemlist{
-
- \sstitem
- GRFCON = INTEGER (Given) -
- A KeyMap containing information passed from the calling application.
-
- \sstitem
- N = INTEGER (Given) - The number of positions to be joined together.
-
- \sstitem
- X( N ) = REAL (Given) - An array holding the {\tt{"}}n{\tt{"}} x values.
-
- \sstitem
- Y( N ) = REAL (Given) - An array holding the {\tt{"}}n{\tt{"}} y values.
- }
- }
- \sstdiytopic{
- Mark
- }{
- The {\tt{"}}Mark{\tt{"}} function displays markers at the given positions. It
- requires the following interface:
-
- INTEGER FUNCTION MARK( GRFCON, N, X, Y, TYPE )
-
- \sstitemlist{
-
- \sstitem
- GRFCON = INTEGER (Given) -
- A KeyMap containing information passed from the calling application.
-
- \sstitem
- N = INTEGER (Given) - The number of positions to be marked.
-
- \sstitem
- X( N ) = REAL (Given) - An array holding the {\tt{"}}n{\tt{"}} x values.
-
- \sstitem
- Y( N ) = REAL (Given) - An array holding the {\tt{"}}n{\tt{"}} y values.
-
- \sstitem
- TYPE = INTEGER (Given) - An integer which can be used to indicate
- the type of marker symbol required.
- }
- }
- \sstdiytopic{
- Qch
- }{
- The {\tt{"}}Qch{\tt{"}} function returns the heights of characters drawn vertically
- and horizontally in graphics coordinates. It requires the following
- interface:
-
- INTEGER FUNCTION QCH( GRFCON, CHV, CHH )
-
- \sstitemlist{
-
- \sstitem
- GRFCON = INTEGER (Given) -
- A KeyMap containing information passed from the calling application.
-
- \sstitem
- CHV = REAL (Returned) The height of
- characters drawn with a vertical baseline. This will be an
- increment in the X axis.
-
- \sstitem
- CHH = REAL (Returned) The height of
- characters drawn with a horizontal baseline. This will be an
- increment in the Y axis.
- }
- }
- \sstdiytopic{
- Scales
- }{
- The {\tt{"}}Scales{\tt{"}} function returns two values (one for each axis) which
- scale increments on the corresponding axis into a {\tt{"}}normal{\tt{"}} coordinate
- system in which: 1) the axes have equal scale in terms of (for instance)
- millimetres per unit distance, 2) X values increase from left to
- right, and 3) Y values increase from bottom to top. It requires the
- following interface:
-
- INTEGER FUNCTION SCALES( GRFCON, ALPHA, BETA )
-
- \sstitemlist{
-
- \sstitem
- GRFCON = INTEGER (Given) -
- A KeyMap containing information passed from the calling application.
-
- \sstitem
- ALPHA = REAL (Returned) The
- scale for the X axis (i.e. Xnorm = alpha$*$Xworld).
-
- \sstitem
- BETA = REAL (Returned) The
- scale for the Y axis (i.e. Ynorm = beta$*$Yworld).
- }
- }
- \sstdiytopic{
- Text
- }{
- The {\tt{"}}Text{\tt{"}} function displays a character string at a given
- position using a specified justification and up-vector. It
- requires the following interface:
-
- INTEGER FUNCTION TEXT( GRFCON, TEXT, X, Y, JUST, UPX, UPY )
-
- \sstitemlist{
-
- \sstitem
- GRFCON = INTEGER (Given) -
- A KeyMap containing information passed from the calling application.
-
- \sstitem
- TEXT = CHARACTER $*$ ( $*$ ) (Given) - The string to be displayed.
-
- \sstitem
- X = REAL (Given) - The reference x coordinate.
-
- \sstitem
- Y = REAL (Given) - The reference y coordinate.
-
- \sstitem
- JUST = CHARACTER $*$ ( $*$ ) (Given ) - A string which specifies the
- location within the
- text string which is to be placed at the reference position
- given by x and y. The first character may be 'T' for {\tt{"}}top{\tt{"}},
- 'C' for {\tt{"}}centre{\tt{"}}, or 'B' for {\tt{"}}bottom{\tt{"}}, and specifies the
- vertical location of the reference position. Note, {\tt{"}}bottom{\tt{"}}
- corresponds to the base-line of normal text. Some characters
- (eg {\tt{"}}y{\tt{"}}, {\tt{"}}g{\tt{"}}, {\tt{"}}p{\tt{"}}, etc) descend below the base-line. The second
- character may be 'L' for {\tt{"}}left{\tt{"}}, 'C' for {\tt{"}}centre{\tt{"}}, or 'R'
- for {\tt{"}}right{\tt{"}}, and specifies the horizontal location of the
- reference position. If the string has less than 2 characters
- then 'C' is used for the missing characters.
-
- \sstitem
- UPX = REAL (Given) - The x component of the up-vector for the text.
- If necessary the supplied value should be negated
- to ensure that positive values always refer to displacements from
- left to right on the screen.
-
- \sstitem
- UPX = REAL (Given) - The y component of the up-vector for the text.
- If necessary the supplied value should be negated
- to ensure that positive values always refer to displacements from
- bottom to top on the screen.
- }
- }
- \sstdiytopic{
- TxExt
- }{
- The {\tt{"}}TxExt{\tt{"}} function returns the corners of a box which would enclose
- the supplied character string if it were displayed using the
- Text function described above. The returned box includes any leading
- or trailing spaces. It requires the following interface:
-
- INTEGER FUNCTION TXEXT( GRFCON, TEXT, X, Y, JUST, UPX, UPY, XB, YB )
-
- \sstitemlist{
-
- \sstitem
- GRFCON = INTEGER (Given) -
- A KeyMap containing information passed from the calling application.
-
- \sstitem
- TEXT = CHARACTER $*$ ( $*$ ) (Given) - The string to be displayed.
-
- \sstitem
- X = REAL (Given) - The reference x coordinate.
-
- \sstitem
- Y = REAL (Given) - The reference y coordinate.
-
- \sstitem
- JUST = CHARACTER $*$ ( $*$ ) (Given ) - A string which specifies the
- location within the
- text string which is to be placed at the reference position
- given by x and y. See {\tt{"}}Text{\tt{"}} above.
-
- \sstitem
- UPX = REAL (Given) - The x component of the up-vector for the text.
- See {\tt{"}}Text{\tt{"}} above.
-
- \sstitem
- UPX = REAL (Given) - The y component of the up-vector for the text.
- See {\tt{"}}Text{\tt{"}} above.
-
- \sstitem
- XB( 4 ) = REAL (Returned) - Returned holding the x coordinate of
- each corner of the bounding box.
-
- \sstitem
- YB( 4 ) = REAL (Returned) - Returned holding the y coordinate of
- each corner of the bounding box.
- }
- }
-}
-\sstroutine{
- AST\_GRID\sstlabel{AST_GRID}
-}{
- Draw a set of labelled coordinate axes
-}{
- \sstdescription{
- This routine draws a complete annotated set of
- coordinate axes for a \htmlref{Plot}{Plot} with (optionally) a coordinate grid
- superimposed. Details of the axes and grid can be controlled by
- setting values for the various attributes defined by the Plot
- class (q.v.).
- }
- \sstinvocation{
- CALL AST\_GRID( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Plot.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the supplied Plot is a \htmlref{Plot3D}{Plot3D}, the axes will be annotated
- using three 2-dimensional Plots, one for each 2D plane in the 3D
- current coordinate system. The plots will be {\tt{"}}pasted{\tt{"}} onto 3 faces
- of the cuboid graphics volume specified when the Plot3D was
- constructed. The faces to be used can be controlled by the {\tt{"}}\htmlref{RootCorner}{RootCorner}{\tt{"}}
- attribute.
-
- \sstitem
- An error results if either the current \htmlref{Frame}{Frame} or the base Frame
- of the Plot is not 2-dimensional or (for a Plot3D) 3-dimensional.
-
- \sstitem
- An error also results if the transformation between the base
- and current Frames of the Plot is not defined in either
- direction (i.e. the Plot's \htmlref{TranForward}{TranForward} or \htmlref{TranInverse}{TranInverse} attribute
- is zero).
- }
- }
-}
-\sstroutine{
- AST\_GRIDLINE\sstlabel{AST_GRIDLINE}
-}{
- Draw a grid line (or axis) for a Plot
-}{
- \sstdescription{
- This routine draws a curve in the physical coordinate system of
- a \htmlref{Plot}{Plot} by varying only one of the coordinates along the length
- of the curve. It is intended for drawing coordinate axes,
- coordinate grids, and tick marks on axes (but note that these
- are also available via the more comprehensive \htmlref{AST\_GRID}{AST_GRID} routine).
-
- The curve is transformed into graphical coordinate space for
- plotting, so that a straight line in physical coordinates may
- result in a curved line being drawn if the \htmlref{Mapping}{Mapping} involved is
- non-linear. Any discontinuities in the Mapping between physical
- and graphical coordinates are catered for, as is any
- clipping established using \htmlref{AST\_CLIP}{AST_CLIP}.
- }
- \sstinvocation{
- CALL AST\_GRIDLINE( THIS, AXIS, START, LENGTH, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Plot.
- }
- \sstsubsection{
- AXIS = INTEGER (Given)
- }{
- The index of the Plot axis whose physical coordinate value is
- to be varied along the length of the curve (all other
- coordinates will remain fixed). This value should lie in the
- range from 1 to the number of Plot axes (\htmlref{Naxes}{Naxes} attribute).
- }
- \sstsubsection{
- START( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array, with one element for each axis of the Plot, giving
- the physical coordinates of the start of the curve.
- }
- \sstsubsection{
- LENGTH = DOUBLE PRECISION (Given)
- }{
- The length of curve to be drawn, given as an increment along
- the selected physical axis. This may be positive or negative.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- No curve is drawn if the START array contains any
- coordinates with the value AST\_\_BAD, nor if LENGTH has this value.
-
- \sstitem
- An error results if the base \htmlref{Frame}{Frame} of the Plot is not 2-dimensional.
-
- \sstitem
- An error also results if the transformation between the
- current and base Frames of the Plot is not defined (i.e. the
- Plot's \htmlref{TranInverse}{TranInverse} attribute is zero).
- }
- }
-}
-\sstroutine{
- AST\_GRISMMAP\sstlabel{AST_GRISMMAP}
-}{
- Create a GrismMap
-}{
- \sstdescription{
- This function creates a new \htmlref{GrismMap}{GrismMap} and optionally initialises
- its attributes.
-
- A GrismMap is a specialised form of \htmlref{Mapping}{Mapping} which transforms
- 1-dimensional coordinates using the spectral dispersion equation
- described in FITS-WCS paper III {\tt{"}}Representation of spectral
- coordinates in FITS{\tt{"}}. This describes the dispersion produced by
- gratings, prisms and grisms.
-
- When initially created, the forward transformation of a GrismMap
- transforms input {\tt{"}}grism parameter{\tt{"}} values into output wavelength
- values. The {\tt{"}}grism parameter{\tt{"}} is a dimensionless value which is
- linearly related to position on the detector. It is defined in FITS-WCS
- paper III as {\tt{"}}the offset on the detector from the point of intersection
- of the camera axis, measured in units of the effective local length{\tt{"}}.
- The units in which wavelength values are expected or returned is
- determined by the values supplied for the \htmlref{GrismWaveR}{GrismWaveR}, \htmlref{GrismNRP}{GrismNRP} and
- \htmlref{GrismG}{GrismG} attribute: whatever units are used for these attributes will
- also be used for the wavelength values.
- }
- \sstinvocation{
- RESULT = AST\_GRISMMAP( OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new GrismMap. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_GRISMMAP = INTEGER
- }{
- A pointer to the new GrismMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_IMPORT\sstlabel{AST_IMPORT}
-}{
- Import an Object pointer to the current context
-}{
- \sstdescription{
- This routine
- imports an \htmlref{Object}{Object} pointer that was created in a higher or lower
- level context, into the current AST context.
- This means that the pointer will be annulled when the current context
- is ended (with \htmlref{AST\_END}{AST_END}).
- }
- \sstinvocation{
- CALL AST\_IMPORT( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Object pointer to be imported.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This routine applies to all Objects.
- }
- }
-}
-\sstroutine{
- AST\_INTERSECT\sstlabel{AST_INTERSECT}
-}{
- Find the point of intersection between two geodesic curves
-}{
- \sstdescription{
- This routine
- finds the coordinate values at the point of intersection between
- two geodesic curves. Each curve is specified by two points on
- the curve. It can only be used with 2-dimensional Frames.
-
- For example, in a basic \htmlref{Frame}{Frame}, it will find the point of
- intersection between two straight lines. But for a \htmlref{SkyFrame}{SkyFrame} it
- will find an intersection of two great circles.
- }
- \sstinvocation{
- CALL AST\_INTERSECT( THIS, A1, A2, B1, B2, CROSS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Frame.
- }
- \sstsubsection{
- A1( 2 ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each Frame axis
- (\htmlref{Naxes}{Naxes} attribute). This should contain the coordinates of the
- first point on the first geodesic curve.
- }
- \sstsubsection{
- A2( 2 ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each Frame axis
- (Naxes attribute). This should contain the coordinates of a
- second point on the first geodesic curve. It should not be
- co-incident with the first point.
- }
- \sstsubsection{
- B1( 2 ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each Frame axis
- (Naxes attribute). This should contain the coordinates of the
- first point on the second geodesic curve.
- }
- \sstsubsection{
- B2( 2 ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each Frame axis
- (Naxes attribute). This should contain the coordinates of a
- second point on the second geodesic curve. It should not be
- co-incident with the first point.
- }
- \sstsubsection{
- CROSS( 2 ) = DOUBLE PRECISION (Returned)
- }{
- An array with one element for each Frame axis
- in which the coordinates of the required intersection will
- be returned.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- For SkyFrames each curve will be a great circle, and in general
- each pair of curves will intersect at two diametrically opposite
- points on the sky. The returned position is the one which is
- closest to point
- A1.
-
- \sstitem
- This function will return {\tt{"}}bad{\tt{"}} coordinate values (AST\_\_BAD)
- if any of the input coordinates has this value, or if the two
- points defining either geodesic are co-incident, or if the two
- curves do not intersect.
-
- \sstitem
- The geodesic curve used by this routine is the path of
- shortest distance between two points, as defined by the
- \htmlref{AST\_DISTANCE}{AST_DISTANCE} function.
-
- \sstitem
- An error will be reported if the Frame is not 2-dimensional.
- }
- }
-}
-\sstroutine{
- AST\_INTERVAL\sstlabel{AST_INTERVAL}
-}{
- Create a Interval
-}{
- \sstdescription{
- This function creates a new \htmlref{Interval}{Interval} and optionally initialises its
- attributes.
-
- A Interval is a \htmlref{Region}{Region} which represents upper and/or lower limits on
- one or more axes of a \htmlref{Frame}{Frame}. For a point to be within the region
- represented by the Interval, the point must satisfy all the
- restrictions placed on all the axes. The point is outside the region
- if it fails to satisfy any one of the restrictions. Each axis may have
- either an upper limit, a lower limit, both or neither. If both limits
- are supplied but are in reverse order (so that the lower limit is
- greater than the upper limit), then the interval is an excluded
- interval, rather than an included interval.
-
- At least one axis limit must be supplied.
-
- Note, The Interval class makes no allowances for cyclic nature of
- some coordinate systems (such as \htmlref{SkyFrame}{SkyFrame} coordinates). A \htmlref{Box}{Box}
- should usually be used in these cases since this requires the user
- to think about suitable upper and lower limits,
- }
- \sstinvocation{
- RESULT = AST\_INTERVAL( FRAME, LBND, UBND, UNC, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- FRAME = INTEGER (Given)
- }{
- A pointer to the Frame in which the region is defined. A deep
- copy is taken of the supplied Frame. This means that any
- subsequent changes made to the Frame using the supplied pointer
- will have no effect the Region.
- }
- \sstsubsection{
- LBND( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each Frame axis
- (\htmlref{Naxes}{Naxes} attribute) containing the lower limits on each axis.
- Set a value to AST\_\_BAD to indicate that the axis has no lower
- limit.
- }
- \sstsubsection{
- UBND( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each Frame axis
- (Naxes attribute) containing the upper limits on each axis.
- Set a value to AST\_\_BAD to indicate that the axis has no upper
- limit.
- }
- \sstsubsection{
- UNC = INTEGER (Given)
- }{
- An optional pointer to an existing Region which specifies the
- uncertainties associated with the boundary of the Box being created.
- The uncertainty in any point on the boundary of the Box is found by
- shifting the supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at
- the boundary point being considered. The area covered by the
- shifted uncertainty Region then represents the uncertainty in the
- boundary position. The uncertainty is assumed to be the same for
- all points.
-
- If supplied, the uncertainty Region must be of a class for which
- all instances are centro-symetric (e.g. Box, \htmlref{Circle}{Circle}, \htmlref{Ellipse}{Ellipse}, etc.)
- or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
- copy of the supplied Region will be taken, so subsequent changes to
- the uncertainty Region using the supplied pointer will have no
- effect on the created Box. Alternatively,
- a null \htmlref{Object}{Object} pointer (AST\_\_NULL)
- may be supplied, in which case a default uncertainty is used
- equivalent to a box 1.0E-6 of the size of the Box being created.
-
- The uncertainty Region has two uses: 1) when the
- \htmlref{AST\_OVERLAP}{AST_OVERLAP}
- function compares two Regions for equality the uncertainty
- Region is used to determine the tolerance on the comparison, and 2)
- when a Region is mapped into a different coordinate system and
- subsequently simplified (using
- \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}),
- the uncertainties are used to determine if the transformed boundary
- can be accurately represented by a specific shape of Region.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new Interval. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_INTERVAL = INTEGER
- }{
- A pointer to the new Interval.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- AST\_INTRAMAP\sstlabel{AST_INTRAMAP}
-}{
- Create an IntraMap
-}{
- \sstdescription{
- This function creates a new \htmlref{IntraMap}{IntraMap} and optionally initialises
- its attributes.
-
- An IntraMap is a specialised form of \htmlref{Mapping}{Mapping} which encapsulates
- a privately-defined coordinate transformation routine
- (e.g. written in Fortran) so that it may be used like any other
- AST Mapping. This allows you to create Mappings that perform any
- conceivable coordinate transformation.
-
- However, an IntraMap is intended for use within a single program
- or a private suite of software, where all programs have access
- to the same coordinate transformation functions (i.e. can be
- linked against them). IntraMaps should not normally be stored in
- datasets which may be exported for processing by other software,
- since that software will not have the necessary transformation
- functions available, resulting in an error.
-
- You must register any coordinate transformation functions to be
- used using \htmlref{AST\_INTRAREG}{AST_INTRAREG} before creating an IntraMap.
- }
- \sstinvocation{
- RESULT = AST\_INTRAMAP( NAME, NIN, NOUT, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- NAME = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing the name of the transformation
- routine to use (which should previously have been registered
- using AST\_INTRAREG). This name is case sensitive. All white
- space will be removed before use.
- }
- \sstsubsection{
- NIN = INTEGER (Given)
- }{
- The number of input coordinates. This must be compatible with
- the number of input coordinates accepted by the
- transformation routine (as specified when this routine was
- registered using AST\_INTRAREG).
- }
- \sstsubsection{
- NOUT = INTEGER (Given)
- }{
- The number of output coordinates. This must be compatible
- with the number of output coordinates produced by the
- transformation routine (as specified when this routine was
- registered using AST\_INTRAREG).
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new IntraMap. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_INTRAMAP = INTEGER
- }{
- A pointer to the new IntraMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_INTRAREG\sstlabel{AST_INTRAREG}
-}{
- Register a transformation routine for use by an IntraMap
-}{
- \sstdescription{
- This function registers a privately-defined coordinate
- transformation routine written in Fortran so that it may be used
- to create an \htmlref{IntraMap}{IntraMap}. An IntraMap is a specialised form of
- \htmlref{Mapping}{Mapping} which encapsulates the Fortran routine so that it may be
- used like any other AST Mapping. This allows you to create
- Mappings that perform any conceivable coordinate transformation.
-
- Registration of relevant transformation routines is required
- before using the \htmlref{AST\_INTRAMAP}{AST_INTRAMAP} constructor function to create an
- IntraMap or reading an external representation of an IntraMap
- from a \htmlref{Channel}{Channel}.
- }
- \sstinvocation{
- CALL AST\_INTRAREG( NAME, NIN, NOUT, TRAN, FLAGS, PURPOSE, AUTHOR,
- CONTACT, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- NAME = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing a unique name to be associated
- with the transformation routine in order to identify it. This
- name is case sensitive. All white space will be removed
- before use.
- }
- \sstsubsection{
- NIN = INTEGER (Given)
- }{
- The number of input coordinates accepted by the
- transformation routine (i.e. the number of dimensions of the
- space in which the input points reside). A value of AST\_\_ANY
- may be given if the routine is able to accommodate a variable
- number of input coordinates.
- }
- \sstsubsection{
- NOUT = INTEGER (Given)
- }{
- The number of output coordinates produced by the
- transformation routine (i.e. the number of dimensions of the
- space in which the output points reside). A value of AST\_\_ANY
- may be given if the routine is able to produce a variable
- number of output coordinates.
- }
- \sstsubsection{
- TRAN = SUBROUTINE (Given)
- }{
- The transformation routine to be registered. This routine
- should perform whatever coordinate transformations are
- required and should have an interface like \htmlref{AST\_TRANN}{AST_TRANN} (q.v.).
-
- This transformation routine must also appear in an EXTERNAL
- statement in the routine which calls AST\_INTRAREG.
- }
- \sstsubsection{
- FLAGS = INTEGER (Given)
- }{
- This value may be used to supply a set of flags which
- describe the transformation routine and which may affect the
- behaviour of any IntraMap which uses it. Often, a value of
- zero will be given here, but you may also supply the sum of a
- set of flags as described in the {\tt{"}}Transformation Flags{\tt{"}}
- section (below).
- }
- \sstsubsection{
- PURPOSE = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing a short (one line) textual
- comment to describe the purpose of the transformation
- routine.
- }
- \sstsubsection{
- AUTHOR = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing the name of the author of the
- transformation routine.
- }
- \sstsubsection{
- CONTACT = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing contact details for the author
- of the transformation routine (e.g. an e-mail or WWW
- address). If any IntraMap which uses this transformation
- routine is exported as part of a dataset to an external user
- who does not have access to the routine, then these contact
- details should allow them to obtain the necessary code.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Beware that an external representation of an IntraMap (created
- by writing it to a Channel) will not include the coordinate
- transformation routine which it uses, so will only refer to the
- routine by its name (as assigned using AST\_INTRAREG).
- Consequently, the external representation cannot be utilised by
- another program unless that program has also registered the same
- transformation routine with the same name using an identical
- invocation of AST\_INTRAREG. If no such registration has been
- performed, then attempting to read the external representation
- will result in an error.
-
- \sstitem
- You may use AST\_INTRAREG to register a transformation routine
- with the same name more than once, but only if the arguments
- supplied are identical on each occasion (i.e there is no way of
- changing things once a routine has been successfully registered
- under a given name, and attempting to do so will result in an
- error). This feature simply allows registration to be performed
- independently, but consistently, at several places within your
- program, without having to check whether it has already been
- done.
-
- \sstitem
- If an error occurs in the transformation routine, this may be
- indicated by setting its STATUS argument to an error value
- before it returns. This will immediately terminate the current
- AST operation. The error value AST\_\_ITFER is available for this
- purpose, but other values may also be used (e.g. if you wish to
- distinguish different types of error). The AST\_\_ITFER error
- value is defined in the AST\_ERR include file.
- }
- }
- \sstdiytopic{
- Transformation Flags
- }{
- The following flags are defined in the AST\_PAR include file and
- allow you to provide further information about the nature of the
- transformation routine. Having selected the set of flags which
- apply, you should supply the sum of their values as the FLAGS
- argument to AST\_INTRAREG.
-
- \sstitemlist{
-
- \sstitem
- AST\_\_NOFWD: If this flag is set, it indicates that the
- transformation routine does not implement a forward coordinate
- transformation. In this case, any IntraMap which uses it will
- have a \htmlref{TranForward}{TranForward} attribute value of zero and the
- transformation routine itself will not be called with its
- FORWARD argument set to .TRUE.. By default, it is assumed that a
- forward transformation is provided.
-
- \sstitem
- AST\_\_NOINV: If this flag is set, it indicates that the
- transformation routine does not implement an inverse coordinate
- transformation. In this case, any IntraMap which uses it will
- have a \htmlref{TranInverse}{TranInverse} attribute value of zero and the
- transformation routine itself will not be called with its
- FORWARD argument set to .FALSE.. By default, it is assumed that
- an inverse transformation is provided.
-
- \sstitem
- AST\_\_SIMPFI: You may set this flag if applying the
- transformation routine's forward coordinate transformation,
- followed immediately by the matching inverse transformation,
- should always restore the original set of coordinates. It
- indicates that AST may replace such a sequence of operations by
- an identity Mapping (a \htmlref{UnitMap}{UnitMap}) if it is encountered while
- simplifying a compound Mapping (e.g. using \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}). It is
- not necessary that both transformations have actually been
- implemented.
-
- \sstitem
- AST\_\_SIMPIF: You may set this flag if applying the
- transformation routine's inverse coordinate transformation,
- followed immediately by the matching forward transformation,
- should always restore the original set of coordinates. It
- indicates that AST may replace such a sequence of operations by
- an identity Mapping (a UnitMap) if it is encountered while
- simplifying a compound Mapping (e.g. using AST\_SIMPLIFY). It is
- not necessary that both transformations have actually been
- implemented.
- }
- }
-}
-\sstroutine{
- AST\_INVERT\sstlabel{AST_INVERT}
-}{
- Invert a Mapping
-}{
- \sstdescription{
- This routine inverts a \htmlref{Mapping}{Mapping} by reversing the boolean sense
- of its \htmlref{Invert}{Invert} attribute. If this attribute is zero (the
- default), the Mapping will transform coordinates in the way
- specified when it was created. If it is non-zero, the input and
- output coordinates will be inter-changed so that the direction
- of the Mapping is reversed. This will cause it to display the
- inverse of its original behaviour.
- }
- \sstinvocation{
- CALL AST\_INVERT( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Mapping.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
-}
-\sstroutine{
- AST\_ISA$<$CLASS$>$\sstlabel{AST_ISACLASS}
-}{
- Test membership of a class by an Object
-}{
- \sstdescription{
- This is a family of functions which test whether an \htmlref{Object}{Object} is a
- member of the class called $<$CLASS$>$, or of any class derived from
- it.
- }
- \sstinvocation{
- RESULT = AST\_ISA$<$CLASS$>$( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Object.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- These functions apply to all Objects.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_ISA$<$CLASS$>$ = LOGICAL
- }{
- .TRUE. if the Object belongs to the class called $<$CLASS$>$ (or to
- a class derived from it), otherwise .FALSE..
- }
- }
- \sstexamples{
- \sstexamplesubsection{
- MEMBER = AST\_ISAFRAME( OBJ, STATUS );
- }{
- Tests whether Object OBJ is a member of the \htmlref{Frame}{Frame} class, or
- of any class derived from a Frame.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Every AST class provides a function (AST\_ISA$<$CLASS$>$) of this
- form, where $<$CLASS$>$ should be replaced by the class name.
-
- \sstitem
- This function attempts to execute even if STATUS is set to an
- error value
- on entry, although no further error report will be made
- if it subsequently fails under these circumstances.
-
- \sstitem
- A value of .FALSE. will be returned if this function should fail
- for any reason. In particular, it will fail if the pointer
- supplied does not identify an Object of any sort.
- }
- }
-}
-\sstroutine{
- AST\_KEYMAP\sstlabel{AST_KEYMAP}
-}{
- Create a KeyMap
-}{
- \sstdescription{
- This function creates a new empty \htmlref{KeyMap}{KeyMap} and optionally initialises its
- attributes. Entries can then be added to the KeyMap using the
- \htmlref{AST\_MAPPUT0$<$X$>$}{AST_MAPPUT0X} and \htmlref{AST\_MAPPUT1$<$X$>$}{AST_MAPPUT1X} functions.
-
- The KeyMap class is used to store a set of values with associated keys
- which identify the values. The keys are strings (case-sensitive,
- trailing spaces are ignored), and the data type of the values can be
- integer, floating point, character string or AST \htmlref{Object}{Object} pointer. Each
- value can be a scalar or a one-dimensional vector. A KeyMap is
- conceptually similar to a \htmlref{Mapping}{Mapping} in that a KeyMap transforms an
- input into an output - the input is the key, and the output is the
- value associated with the key. However, this is only a conceptual
- similarity, and it should be noted that the KeyMap class inherits from
- the Object class rather than the Mapping class. The methods of the
- Mapping class cannot be used with a KeyMap.
- }
- \sstinvocation{
- RESULT = AST\_KEYMAP( OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new KeyMap. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_MAP = INTEGER
- }{
- A pointer to the new KeyMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- AST\_LINEARAPPROX\sstlabel{AST_LINEARAPPROX}
-}{
- Obtain a linear approximation to a Mapping, if appropriate
-}{
- \sstdescription{
- This function tests the forward coordinate transformation
- implemented by a \htmlref{Mapping}{Mapping} over a given range of input coordinates. If
- the transformation is found to be linear to a specified level of
- accuracy, then an array of fit coefficients is returned. These
- may be used to implement a linear approximation to the Mapping's
- forward transformation within the specified range of output coordinates.
- If the transformation is not sufficiently linear, no coefficients
- are returned.
- }
- \sstinvocation{
- RESULT = AST\_LINEARAPPROX( THIS, LBND, UBND, TOL, FIT, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Mapping.
- }
- \sstsubsection{
- LBND( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array
- containing the lower bounds of a box defined within the input
- coordinate system of the Mapping. The number of elements in this
- array should equal the value of the Mapping's \htmlref{Nin}{Nin} attribute. This
- box should specify the region over which linearity is required.
- }
- \sstsubsection{
- UBND( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array
- containing the upper bounds of the box specifying the region over
- which linearity is required.
- }
- \sstsubsection{
- TOL = DOUBLE PRECISION (Given)
- }{
- The maximum permitted deviation from linearity, expressed as
- a positive Cartesian displacement in the output coordinate
- space of the Mapping. If a linear fit to the forward
- transformation of the Mapping deviates from the true transformation
- by more than this amount at any point which is tested, then no fit
- coefficients will be returned.
- }
- \sstsubsection{
- FIT( $*$ ) = DOUBLE PRECISION (Returned)
- }{
- An array
- in which to return the co-efficients of the linear
- approximation to the specified transformation. This array should
- have at least {\tt{"}}( Nin $+$ 1 ) $*$ \htmlref{Nout}{Nout}{\tt{"}}, elements. The first Nout elements
- hold the constant offsets for the transformation outputs. The
- remaining elements hold the gradients. So if the Mapping has 2 inputs
- and 3 outputs the linear approximation to the forward transformation
- is:
-
- X\_out = fit(1) $+$ fit(4)$*$X\_in $+$ fit(5)$*$Y\_in
-
- Y\_out = fit(2) $+$ fit(6)$*$X\_in $+$ fit(7)$*$Y\_in
-
- Z\_out = fit(3) $+$ fit(8)$*$X\_in $+$ fit(9)$*$Y\_in
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_LINEARAPPROX = LOGICAL
- }{
- If the forward transformation is sufficiently linear,
- .TRUE is returned. Otherwise .FALSE. is returned
- and the fit co-efficients are set to AST\_\_BAD.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function fits the Mapping's forward transformation. To fit
- the inverse transformation, the Mapping should be inverted using
- \htmlref{AST\_INVERT}{AST_INVERT}
- before invoking this function.
-
- \sstitem
- A value of .FALSE.
- will be returned if this function is invoked
- with the global error status set, or if it should fail for any
- reason.
- }
- }
-}
-\sstroutine{
- AST\_LUTMAP\sstlabel{AST_LUTMAP}
-}{
- Create a LutMap
-}{
- \sstdescription{
- This function creates a new \htmlref{LutMap}{LutMap} and optionally initialises
- its attributes.
-
- A LutMap is a specialised form of \htmlref{Mapping}{Mapping} which transforms
- 1-dimensional coordinates by using linear interpolation in a
- lookup table. Each input coordinate value is first scaled to
- give the index of an entry in the table by subtracting a
- starting value (the input coordinate corresponding to the first
- table entry) and dividing by an increment (the difference in
- input coordinate value between adjacent table entries).
-
- The resulting index will usually contain a fractional part, so
- the output coordinate value is then generated by interpolating
- linearly between the appropriate entries in the table. If the
- index lies outside the range of the table, linear extrapolation
- is used based on the two nearest entries (i.e. the two entries
- at the start or end of the table, as appropriate).
-
- If the lookup table entries increase or decrease monotonically,
- then the inverse transformation may also be performed.
- }
- \sstinvocation{
- RESULT = AST\_LUTMAP( NLUT, LUT, START, INC, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- NLUT = INTEGER (Given)
- }{
- The number of entries in the lookup table. This value must be
- at least 2.
- }
- \sstsubsection{
- LUT( NLUT ) = DOUBLE PRECISION (Given)
- }{
- An array containing the
- lookup table entries.
- }
- \sstsubsection{
- START = DOUBLE PRECISION (Given)
- }{
- The input coordinate value which corresponds to the first lookup
- table entry.
- }
- \sstsubsection{
- INC = DOUBLE PRECISION (Given)
- }{
- The lookup table spacing (the increment in input coordinate
- value between successive lookup table entries). This value
- may be positive or negative, but must not be zero.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new LutMap. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_LUTMAP = INTEGER
- }{
- A pointer to the new LutMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the entries in the lookup table either increase or decrease
- monotonically, then the new LutMap's \htmlref{TranInverse}{TranInverse} attribute will
- have a value of one, indicating that the inverse transformation
- can be performed. Otherwise, it will have a value of zero, so
- that any attempt to use the inverse transformation will result
- in an error.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- AST\_MAPBOX\sstlabel{AST_MAPBOX}
-}{
- Find a bounding box for a Mapping
-}{
- \sstdescription{
- This routine allows you to find the {\tt{"}}bounding box{\tt{"}} which just
- encloses another box after it has been transformed by a \htmlref{Mapping}{Mapping}
- (using either its forward or inverse transformation). A typical
- use might be to calculate the size of an image after being
- transformed by a Mapping.
-
- The routine works on one dimension at a time. When supplied with
- the lower and upper bounds of a rectangular region (box) of
- input coordinate space, it finds the lowest and highest values
- taken by a nominated output coordinate within that region. It
- also returns the input coordinates where these bounding values
- are attained. It should be used repeatedly to obtain the extent
- of the bounding box in more than one dimension.
- }
- \sstinvocation{
- CALL AST\_MAPBOX( THIS, LBND\_IN, UBND\_IN, FORWARD, COORD\_OUT,
- LBND\_OUT, UBND\_OUT, XL, XU, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Mapping.
- }
- \sstsubsection{
- LBND\_IN( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each Mapping input
- coordinate. This should contain the lower bound of the input
- box in each input dimension.
- }
- \sstsubsection{
- UBND\_IN( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each Mapping input
- coordinate. This should contain the upper bound of the input
- box in each input dimension.
-
- Note that it is permissible for the upper bound to be less
- than the corresponding lower bound, as the values will simply
- be swapped before use.
- }
- \sstsubsection{
- FORWARD = LOGICAL (Given)
- }{
- If this value is .TRUE., then the Mapping's forward
- transformation will be used to transform the input
- box. Otherwise, its inverse transformation will be used.
-
- (If the inverse transformation is selected, then references
- to {\tt{"}}input{\tt{"}} and {\tt{"}}output{\tt{"}} coordinates in this description
- should be transposed. For example, the size of the LBND\_IN
- and UBND\_IN arrays should match the number of output
- coordinates, as given by the Mapping's \htmlref{Nout}{Nout} attribute.
- Similarly, the COORD\_OUT argument, below, should nominate one
- of the Mapping's input coordinates.)
- }
- \sstsubsection{
- COORD\_OUT = INTEGER (Given)
- }{
- The index of the output coordinate for which the lower and
- upper bounds are required. This value should be at least one,
- and no larger than the number of Mapping output coordinates.
- }
- \sstsubsection{
- LBND\_OUT = DOUBLE PRECISION (Returned)
- }{
- The lowest value taken by the nominated output coordinate
- within the specified region of input coordinate space.
- }
- \sstsubsection{
- UBND\_OUT = DOUBLE PRECISION (Returned)
- }{
- The highest value taken by the nominated output coordinate
- within the specified region of input coordinate space.
- }
- \sstsubsection{
- XL( $*$ ) = DOUBLE PRECISION (Returned)
- }{
- An array with one element for each Mapping input
- coordinate. This will return the coordinates of an input
- point (although not necessarily a unique one) for which the
- nominated output coordinate attains the lower bound value
- returned in LBND\_OUT.
- }
- \sstsubsection{
- XU( $*$ ) = DOUBLE PRECISION (Returned)
- }{
- An array with one element for each Mapping input
- coordinate. This will return the coordinates of an input
- point (although not necessarily a unique one) for which the
- nominated output coordinate attains the upper bound value
- returned in UBND\_OUT.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Any input points which are transformed by the Mapping to give
- output coordinates containing the value AST\_\_BAD are regarded as
- invalid and are ignored. They will make no contribution to
- determining the output bounds, even although the nominated
- output coordinate might still have a valid value at such points.
-
- \sstitem
- An error will occur if the required output bounds cannot be
- found. Typically, this might happen if all the input points
- which the routine considers turn out to be invalid (see
- above). The number of points considered before generating such
- an error is quite large, so this is unlikely to occur by
- accident unless valid points are restricted to a very small
- subset of the input coordinate space.
-
- \sstitem
- The values returned via LBND\_OUT, UBND\_OUT, XL and XU will be
- set to the value AST\_\_BAD if this routine should fail for any
- reason. Their initial values on entry will not be altered if the
- routine is invoked with STATUS set to an error value.
- }
- }
-}
-\sstroutine{
- AST\_MAPGET0$<$X$>$\sstlabel{AST_MAPGET0X}
-}{
- Get a scalar value from a KeyMap
-}{
- \sstdescription{
- This is a set of functions for retrieving a scalar value from a \htmlref{KeyMap}{KeyMap}.
- You should replace $<$X$>$ in the generic function name
- AST\_MAPGET0$<$X$>$
- by an appropriate 1-character type code (see the {\tt{"}}Data Type Codes{\tt{"}}
- section below for the code appropriate to each supported data type).
- The stored value is converted to the data type indiced by $<$X$>$
- before being returned (an error is reported if it is not possible to
- convert the stored value to the requested data type).
- Note, the version of this function which returns character strings,
- AST\_MAPGET0C, has an extra parameter in which is returned the number
- of characters written into the supplied CHARACTER variable.
- }
- \sstinvocation{
- RESULT = AST\_MAPGET0$<$X$>$( THIS, KEY, VALUE, STATUS )
-
- RESULT = AST\_MAPGET0C( THIS, KEY, VALUE, L, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the KeyMap.
- }
- \sstsubsection{
- KEY = CHARACTER $*$ ( $*$ ) (Given)
- }{
- The character string identifying the value to be retrieved. Trailing
- spaces are ignored.
- }
- \sstsubsection{
- VALUE = $<$X$>$type (Returned)
- }{
- The requested value.
- If the requested key is not found, then the contents of the
- buffer on entry to this function will be unchanged on exit.
- }
- \sstsubsection{
- L = INTEGER (Returned)
- }{
- This parameter is only present in the interface for the AST\_MAPGET0C
- function. It is returned holding the number of characters
- written into the CHARACTER variable supplied for parameter VALUE.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_MAPGET0$<$X$>$ = LOGICAL
- }{
- A flag which is set to
- .TRUE.
- if the requested key name was found, and is set to
- .FALSE.
- otherwise.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- No error is reported if the requested key cannot be found in the
- given KeyMap, but a
- .FALSE.
- value will be returned as the function value. The supplied buffer
- will be returned unchanged.
-
- \sstitem
- Key names are case sensitive, and white space is considered
- significant.
-
- \sstitem
- If the stored value is a vector value, then the first value in
- the vector will be returned.
-
- \sstitem
- If the returned value is an AST \htmlref{Object}{Object} pointer, the Object's reference
- count is incremented by this call. Any subsequent changes made to
- the Object using the returned pointer will be reflected in any
- any other active pointers for the Object. The returned pointer
- should be annulled using
- \htmlref{AST\_ANNUL}{AST_ANNUL}
- when it is no longer needed.
- }
- }
- \sstdiytopic{
- Data Type Codes
- }{
- To select the appropriate
- routine, you should replace $<$X$>$ in the generic routine name AST\_MAPGET0$<$X$>$
- with a 1-character data type code, so as to match the data type $<$X$>$type
- of the data you are processing, as follows:
- \sstitemlist{
-
- \sstitem
- D: DOUBLE PRECISION
-
- \sstitem
- R: REAL
-
- \sstitem
- I: INTEGER
-
- \sstitem
- C: CHARACTER
-
- \sstitem
- A: INTEGER used to identify an AstObject
-
- }
- For example, AST\_MAPGET0D would be used to get a DOUBLE PRECISION value,
- while AST\_MAPGET0I would be used to get an INTEGER, etc.
- }
-}
-\sstroutine{
- AST\_MAPGET1$<$X$>$\sstlabel{AST_MAPGET1X}
-}{
- Get a vector value from a KeyMap
-}{
- \sstdescription{
- This is a set of functions for retrieving a vector value from a \htmlref{KeyMap}{KeyMap}.
- You should replace $<$X$>$ in the generic function name
- AST\_MAPGET1$<$X$>$
- by an appropriate 1-character type code (see the {\tt{"}}Data Type Codes{\tt{"}}
- section below for the code appropriate to each supported data type).
- The stored value is converted to the data type indiced by $<$X$>$
- before being returned (an error is reported if it is not possible to
- convert the stored value to the requested data type).
- }
- \sstinvocation{
- RESULT = AST\_MAPGET1$<$X$>$( THIS, KEY, MXVAL, NVAL, VALUE, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the KeyMap.
- }
- \sstsubsection{
- KEY = CHARACTER $*$ ( $*$ ) (Given)
- }{
- The character string identifying the value to be retrieved. Trailing
- spaces are ignored.
- }
- \sstsubsection{
- MXVAL = INTEGER (Given)
- }{
- The number of elements in the
- VALUE array.
- }
- \sstsubsection{
- NVAL = INTEGER (Returned)
- }{
- The
- number of elements stored in the
- Any unused elements of the array are left unchanged.
- }
- \sstsubsection{
- VALUE( MXVAL ) = $<$X$>$type (Returned)
- }{
- The requested values.
- If the requested key is not found, then the contents of the
- buffer on entry to this function will be unchanged on exit.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_MAPGET1$<$X$>$ = LOGICAL
- }{
- A flag which is set to
- .TRUE.
- if the requested key name was found, and is set to
- .FALSE.
- otherwise.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- No error is reported if the requested key cannot be found in the
- given KeyMap, but a
- .FALSE.
- value will be returned as the function value. The supplied array
- will be returned unchanged.
-
- \sstitem
- Key names are case sensitive, and white space is considered
- significant.
-
- \sstitem
- If the stored value is a scalar value, then the value will be
- returned in the first element of the supplied array, and
- NVAL
- will be returned set to 1.
- }
- }
- \sstdiytopic{
- Data Type Codes
- }{
- To select the appropriate
- routine, you should replace $<$X$>$ in the generic routine name AST\_MAPGET1$<$X$>$
- with a 1-character data type code, so as to match the data type $<$X$>$type
- of the data you are processing, as follows:
- \sstitemlist{
-
- \sstitem
- D: DOUBLE PRECISION
-
- \sstitem
- R: REAL
-
- \sstitem
- I: INTEGER
-
- \sstitem
- C: CHARACTER
-
- \sstitem
- A: INTEGER used to identify an AstObject
-
- }
- For example, AST\_MAPGET1D would be used to get DOUBLE PRECISION values,
- while AST\_MAPGET1I would be used to get INTEGER values, etc.
- }
-}
-\sstroutine{
- AST\_MAPGETELEM$<$X$>$\sstlabel{AST_MAPGETELEMX}
-}{
- Get a single element of a vector value from a KeyMap
-}{
- \sstdescription{
- This is a set of functions for retrieving a single element of a vector
- value from a \htmlref{KeyMap}{KeyMap}. You should replace $<$X$>$ in the generic function name
- AST\_MAPGETELEM$<$X$>$
- by an appropriate 1-character type code (see the {\tt{"}}Data Type Codes{\tt{"}}
- section below for the code appropriate to each supported data type).
- The stored value is converted to the data type indiced by $<$X$>$
- before being returned (an error is reported if it is not possible to
- convert the stored value to the requested data type).
- }
- \sstinvocation{
- RESULT = AST\_MAPGETELEM$<$X$>$( THIS, KEY, ELEM, VALUE, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the KeyMap.
- }
- \sstsubsection{
- KEY = CHARACTER $*$ ( $*$ ) (Given)
- }{
- The character string identifying the value to be retrieved. Trailing
- spaces are ignored.
- }
- \sstsubsection{
- ELEM = INTEGER (Given)
- }{
- The index of the required vector element, starting at
- one.
- An error will be reported if the value is outside the range of
- the vector.
- }
- \sstsubsection{
- VALUE = $<$X$>$type (Returned)
- }{
- The requested value.
- If the requested key is not found, then the contents of the
- buffer on entry to this function will be unchanged on exit.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_MAPGETELEM$<$X$>$ = LOGICAL
- }{
- A flag which is set to
- .TRUE.
- if the requested key name was found, and is set to
- .FALSE.
- otherwise.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- No error is reported if the requested key cannot be found in the
- given KeyMap, but a
- .FALSE.
- value will be returned as the function value.
-
- \sstitem
- Key names are case sensitive, and white space is considered
- significant.
- }
- }
- \sstdiytopic{
- Data Type Codes
- }{
- To select the appropriate
- routine, you should replace $<$X$>$ in the generic routine name
- AST\_MAPGETELEM$<$X$>$
- with a 1-character data type code, so as to match the data type $<$X$>$type
- of the data you are processing, as follows:
- \sstitemlist{
-
- \sstitem
- D: DOUBLE PRECISION
-
- \sstitem
- R: REAL
-
- \sstitem
- I: INTEGER
-
- \sstitem
- C: CHARACTER
-
- \sstitem
- A: INTEGER used to identify an AstObject
-
- }
- For example, AST\_MAPGETELEMD would be used to get a DOUBLE PRECISION
- value, while AST\_MAPGETELEMI would be used to get an INTEGER value, etc.
- }
-}
-\sstroutine{
- AST\_MAPHASKEY\sstlabel{AST_MAPHASKEY}
-}{
- Check if an entry with a given key exists in a KeyMap
-}{
- \sstdescription{
- This function returns a flag indicating if the \htmlref{KeyMap}{KeyMap} contains an
- entry with the given key.
- }
- \sstinvocation{
- RESULT = AST\_MAPHASKEY( THIS, KEY, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the KeyMap.
- }
- \sstsubsection{
- KEY = CHARACTER $*$ ( $*$ ) (Given)
- }{
- The character string identifying the KeyMap entry. Trailing spaces are
- ignored.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_MAPHASKEY = LOGICAL
- }{
- .TRUE. if the key was found, and .FALSE. otherwise.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A function value of
- .FALSE.
- will be returned if an error has already occurred, or if this
- function should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_MAPKEY\sstlabel{AST_MAPKEY}
-}{
- Get the key at a given index within the KeyMap
-}{
- \sstdescription{
- This function returns a string holding the key for the entry with
- the given index within the \htmlref{KeyMap}{KeyMap}.
-
- This function is intended primarily as a means of iterating round all
- the elements in a KeyMap. For this purpose, the number of entries in
- the KeyMap should first be found using
- \htmlref{AST\_MAPSIZE}{AST_MAPSIZE}
- and this function should then be called in a loop, with the index
- value going from
- one to the size of the KeyMap.
- The index associated with a given entry is not, in general, related to
- the order in which the entries are added to the KeyMap, and may change
- if other entries are added to or removed from the KeyMap.
- }
- \sstinvocation{
- RESULT = AST\_MAPKEY( THIS, INDEX, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the KeyMap.
- }
- \sstsubsection{
- INDEX = INTEGER (Given)
- }{
- The index into the KeyMap. The first entry has index
- one, and the last has index SIZE, the value returned by the
- AST\_MAPSIZE function.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_MAPKEY = CHARACTER $*$ ( AST\_\_SZCHR )
- }{
- The key value.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A blank string will be returned if this function is invoked
- with STATUS set to an error value, or if it should fail for any
- reason.
- }
- }
-}
-\sstroutine{
- AST\_MAPLENC\sstlabel{AST_MAPLENC}
-}{
- Get the number of characters in a character entry in a KeyMap
-}{
- \sstdescription{
- This function returns the minimum length which a character variable
- which must have in order to be able to store a specified entry in
- the supplied \htmlref{KeyMap}{KeyMap}. If the named entry is a vector entry, then the
- returned value is the length of the longest element of the vector
- value.
- }
- \sstinvocation{
- RESULT = AST\_MAPLENC( THIS, KEY, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the KeyMap.
- }
- \sstsubsection{
- KEY = CHARACTER $*$ ( $*$ ) (Given)
- }{
- The character string identifying the KeyMap entry. Trailing
- spaces are ignored.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_MAPLENC = INTEGER
- }{
- The length (i.e. number of characters) of the longest formatted
- value associated with the named entry.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A function value of zero will be returned without error if the
- named entry cannot be formatted as a character string.
-
- \sstitem
- A function value of zero will be returned if an error has already
- occurred, or if this function should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_MAPLENGTH\sstlabel{AST_MAPLENGTH}
-}{
- Get the vector length of an entry in a KeyMap
-}{
- \sstdescription{
- This function returns the vector length of a named entry in a \htmlref{KeyMap}{KeyMap},
- (that is, how many values are associated with the entry).
- }
- \sstinvocation{
- RESULT = AST\_MAPLENGTH( THIS, KEY, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the KeyMap.
- }
- \sstsubsection{
- KEY = CHARACTER $*$ ( $*$ ) (Given)
- }{
- The character string identifying the KeyMap entry. Trailing
- spaces are ignored.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_MAPLENGTH = INTEGER
- }{
- The length of the entry. One for a scalar, greater than one for
- a vector. A value of zero is returned if the KeyMap does not
- contain the named entry.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A function value of zero will be returned if an error has already
- occurred, or if this function should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_MAPPUT0$<$X$>$\sstlabel{AST_MAPPUT0X}
-}{
- Add a scalar value to a KeyMap
-}{
- \sstdescription{
- This is a set of routine
- for adding scalar values to a \htmlref{KeyMap}{KeyMap}. You should use a
- routine
- which matches the data type of the data you wish to add to the KeyMap
- by replacing $<$X$>$ in the generic
- routine name AST\_MAPPUT0$<$X$>$
- by an appropriate 1-character type code (see the {\tt{"}}Data Type Codes{\tt{"}}
- section below for the code appropriate to each supported data type).
- }
- \sstinvocation{
- CALL AST\_MAPPUT0$<$X$>$( THIS, KEY, VALUE, COMMENT, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the KeyMap in which to store the supplied value.
- }
- \sstsubsection{
- KEY = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string to be stored with the value, which can later
- be used to identify the value. Trailing spaces are ignored.
- }
- \sstsubsection{
- VALUE = $<$X$>$type (Given)
- }{
- The value to be stored. The data type of this value should match the
- 1-character type code appended to the
- routine name (e.g. if you are using AST\_MAPPUT0A, the type of this
- value should be {\tt{"}}integer pointer for an AstObject{\tt{"}}).
- }
- \sstsubsection{
- COMMENT = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A comment string to be stored with the value.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Key names are case sensitive, and white space is considered
- significant.
-
- \sstitem
- If the supplied key is already in use in the KeyMap, the new value
- will replace the old value.
-
- \sstitem
- If the stored value is an AST \htmlref{Object}{Object} pointer, the Object's reference
- count is incremented by this call. Any subsequent changes made to
- the Object using the returned pointer will be reflected in any
- any other active pointers for the Object, including any obtained
- later using
- AST\_MAPGET0A.
- The reference count for the Object will be decremented when the
- KeyMap is destroyed, or the entry is removed or over-written with a
- different pointer.
- }
- }
- \sstdiytopic{
- Data Type Codes
- }{
- To select the appropriate
- routine, you should replace $<$X$>$ in the generic routine name AST\_MAPPUT0$<$X$>$
- with a 1-character data type code, so as to match the data type $<$X$>$type
- of the data you are processing, as follows:
- \sstitemlist{
-
- \sstitem
- D: DOUBLE PRECISION
-
- \sstitem
- R: REAL
-
- \sstitem
- I: INTEGER
-
- \sstitem
- C: CHARACTER
-
- \sstitem
- A: INTEGER used to identify an AstObject
-
- }
- For example, AST\_MAPPUT0D would be used to store a DOUBLE PRECISION value,
- while AST\_MAPPUT0I would be used to store an INTEGER, etc.
- }
-}
-\sstroutine{
- AST\_MAPPUT1$<$X$>$\sstlabel{AST_MAPPUT1X}
-}{
- Add a vector value to a KeyMap
-}{
- \sstdescription{
- This is a set of routine
- for adding vector values to a \htmlref{KeyMap}{KeyMap}. You should use a
- routine
- which matches the data type of the data you wish to add to the KeyMap
- by replacing $<$X$>$ in the generic
- routine name AST\_MAPPUT1$<$X$>$
- by an appropriate 1-character type code (see the {\tt{"}}Data Type Codes{\tt{"}}
- section below for the code appropriate to each supported data type).
- }
- \sstinvocation{
- CALL AST\_MAPPUT1$<$X$>$( THIS, KEY, SIZE, VALUE, COMMENT, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the KeyMap in which to store the supplied values.
- }
- \sstsubsection{
- KEY = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string to be stored with the values, which can later
- be used to identify the values. Trailing spaces are ignored.
- }
- \sstsubsection{
- SIZE = INTEGER (Given)
- }{
- The number of elements in the supplied array of values.
- }
- \sstsubsection{
- VALUE( $*$ ) = $<$X$>$type (Given)
- }{
- The array of values to be stored. The data type of this value should
- match the 1-character type code appended to the
- routine name (e.g. if you are using AST\_MAPPUT1A, the type of this
- value should be {\tt{"}}integer pointer for an AstObject){\tt{"}}.
- }
- \sstsubsection{
- COMMENT = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A comment string to be stored with the values.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the supplied key is already in use in the KeyMap, the new values
- will replace the old values.
-
- \sstitem
- Key names are case sensitive, and white space is considered
- significant.
- }
- }
- \sstdiytopic{
- Data Type Codes
- }{
- To select the appropriate
- routine, you should replace $<$X$>$ in the generic routine name AST\_MAPPUT1$<$X$>$
- with a 1-character data type code, so as to match the data type $<$X$>$type
- of the data you are processing, as follows:
- \sstitemlist{
-
- \sstitem
- D: DOUBLE PRECISION
-
- \sstitem
- R: REAL
-
- \sstitem
- I: INTEGER
-
- \sstitem
- C: CHARACTER
-
- \sstitem
- A: INTEGER used to identify an AstObject
-
- }
- For example, AST\_MAPPUT1D would be used to store DOUBLE PRECISION values,
- while AST\_MAPPUT1I would be used to store INTEGER, etc.
- }
-}
-\sstroutine{
- AST\_MAPREGION\sstlabel{AST_MAPREGION}
-}{
- Transform a Region into a new Frame using a given Mapping
-}{
- \sstdescription{
- This function returns a pointer to a new \htmlref{Region}{Region} which corresponds to
- supplied Region described by some other specified coordinate system. A
- \htmlref{Mapping}{Mapping} is supplied which transforms positions between the old and new
- coordinate systems. The new Region may not be of the same class as
- the original region.
- }
- \sstinvocation{
- RESULT = AST\_MAPREGION( THIS, MAP, FRAME, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Region.
- }
- \sstsubsection{
- MAP = INTEGER (Given)
- }{
- Pointer to a Mapping which transforms positions from the
- coordinate system represented by the supplied Region to the
- coordinate system specified by
- FRAME.
- The supplied Mapping should define both forward and inverse
- transformations, and these transformations should form a genuine
- inverse pair. That is, transforming a position using the forward
- transformation and then using the inverse transformation should
- produce the original input position. Some Mapping classes (such
- as \htmlref{PermMap}{PermMap}, \htmlref{MathMap}{MathMap}, \htmlref{SphMap}{SphMap}) can result in Mappings for which this
- is not true.
- }
- \sstsubsection{
- FRAME = INTEGER (Given)
- }{
- Pointer to a \htmlref{Frame}{Frame} describing the coordinate system in which
- the new Region is required.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_MAPREGION = INTEGER
- }{
- A pointer to a new Region. This Region will represent the area
- within the coordinate system specified by
- FRAME
- which corresponds to the supplied Region.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The uncertainty associated with the supplied Region is modified
- using the supplied Mapping.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_MAPREMOVE\sstlabel{AST_MAPREMOVE}
-}{
- Removed a named entry from a KeyMap
-}{
- \sstdescription{
- This routine
- removes a named entry from a \htmlref{KeyMap}{KeyMap}. It returns without action if the
- KeyMap does not contain the specified key.
- }
- \sstinvocation{
- CALL AST\_MAPREMOVE( THIS, KEY, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the KeyMap.
- }
- \sstsubsection{
- KEY = CHARACTER $*$ ( $*$ ) (Given)
- }{
- The character string identifying the value to be retrieved. Trailing
- spaces are ignored.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
-}
-\sstroutine{
- AST\_MAPSIZE\sstlabel{AST_MAPSIZE}
-}{
- Get the number of entries in a KeyMap
-}{
- \sstdescription{
- This function returns the number of entries in a \htmlref{KeyMap}{KeyMap}.
- }
- \sstinvocation{
- RESULT = AST\_MAPSIZE( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the KeyMap.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_MAPSIZE = INTEGER
- }{
- The number of entries in the KeyMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A function value of zero will be returned if an error has already
- occurred, or if this function should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_MAPSPLIT\sstlabel{AST_MAPSPLIT}
-}{
- Split a Mapping up into parallel component Mappings
-}{
- \sstdescription{
- This routine
- creates a new \htmlref{Mapping}{Mapping} which connects specified inputs within a
- supplied Mapping to the corresponding outputs of the supplied Mapping.
- This is only possible if the specified inputs correspond to some
- subset of the Mapping outputs. That is, there must exist a subset of
- the Mapping outputs for which each output depends only on the selected
- Mapping inputs, and not on any of the inputs which have not been
- selected. Also, any output which is not in this subset must not depend
- on any of the selected inputs. If these conditions are not met by the
- supplied Mapping, then
- an AST\_\_NULL
- Mapping pointer is returned.
- }
- \sstinvocation{
- CALL AST\_MAPSPLIT( THIS, NIN, IN, OUT, MAP, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Mapping to be split.
- }
- \sstsubsection{
- NIN = INTEGER (Given)
- }{
- The number of inputs to pick from THIS.
- }
- \sstsubsection{
- IN( NIN ) = INTEGER (Given)
- }{
- An
- array holding the indices within the supplied Mapping of the inputs
- which are to be picked from the Mapping.
- If {\tt{"}}\htmlref{Nin}{Nin}{\tt{"}} is the number of inputs of the supplied Mapping, then each
- element should have a value in the range 1 to Nin.
- }
- \sstsubsection{
- OUT( $*$ ) = INTEGER (Returned)
- }{
- An
- array in which to return the indices of the outputs of the supplied
- Mapping which are fed by the picked inputs. A value of one is
- used to refer to the first Mapping output. The supplied array should
- have a length at least equal to the number of outputs in the
- supplied Mapping. The number of values stored in the array on
- exit will equal the number of outputs in the returned Mapping.
- The i'th element in the returned array holds the index within
- the supplied Mapping which corresponds to the i'th output of
- the returned Mapping.
- }
- \sstsubsection{
- MAP = INTEGER (Returned)
- }{
- The
- returned Mapping. This Mapping will have
- NIN inputs (the number of outputs may be different to NIN). AST\_\_NULL
- is returned if the supplied Mapping has no subset of outputs which
- depend only on the selected inputs.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If this
- routine
- is invoked with the global error status set, or if it should fail for
- any reason, then
- AST\_\_NULL
- will be returned for
- MAP.
- }
- }
-}
-\sstroutine{
- AST\_MAPTYPE\sstlabel{AST_MAPTYPE}
-}{
- Get the data type of an entry in a KeyMap
-}{
- \sstdescription{
- This function returns a value indicating the data type of a
- named entry in a \htmlref{KeyMap}{KeyMap}. This is the data type which was used when the
- entry was added to the KeyMap.
- }
- \sstinvocation{
- RESULT = AST\_MAPTYPE( THIS, KEY, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the KeyMap.
- }
- \sstsubsection{
- KEY = CHARACTER $*$ ( $*$ ) (Given)
- }{
- The character string identifying the KeyMap entry. Trailing
- spaces are ignored.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_MAPTYPE = INTEGER
- }{
- One of AST\_\_INTTYPE (for integer), AST\_\_DOUBLETYPE (for double
- precision floating point), AST\_\_FLOATTYPE (for single
- precision floating point), AST\_\_STRINGTYPE (for character string)
- or AST\_\_OBJECTTYPE (for AST \htmlref{Object}{Object} pointer). AST\_\_BADTYPE is
- returned if the supplied key is not found in the KeyMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A function value of AST\_\_BADTYPE will be returned if an error has
- already occurred, or if this function should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_MARK\sstlabel{AST_MARK}
-}{
- Draw a set of markers for a Plot
-}{
- \sstdescription{
- This routine draws a set of markers (symbols) at positions
- specified in the physical coordinate system of a \htmlref{Plot}{Plot}. The
- positions are transformed into graphical coordinates to
- determine where the markers should appear within the plotting
- area.
- }
- \sstinvocation{
- CALL AST\_MARK( THIS, NMARK, NCOORD, INDIM, IN, TYPE, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Plot.
- }
- \sstsubsection{
- NMARK = INTEGER (Given)
- }{
- The number of markers to draw. This may be zero, in which
- case nothing will be drawn.
- }
- \sstsubsection{
- NCOORD = INTEGER (Given)
- }{
- The number of coordinates being supplied for each mark
- (i.e. the number of axes in the current \htmlref{Frame}{Frame} of the Plot, as
- given by its \htmlref{Naxes}{Naxes} attribute).
- }
- \sstsubsection{
- INDIM = INTEGER (Given)
- }{
- The number of elements along the first dimension of the IN
- array (which contains the marker coordinates). This value is
- required so that the coordinate values can be correctly
- located if they do not entirely fill this array. The value
- given should not be less than NMARK.
- }
- \sstsubsection{
- IN( INDIM, NCOORD ) = DOUBLE PRECISION (Given)
- }{
- A 2-dimensional array giving the physical coordinates of the
- points where markers are to be drawn. These should be
- stored such that the value of coordinate number COORD for
- input mark number MARK is found in element IN(MARK,COORD).
- }
- \sstsubsection{
- TYPE = INTEGER (Given)
- }{
- A value specifying the type (e.g. shape) of marker to be
- drawn. The set of values which may be used (and the shapes
- that will result) is determined by the underlying graphics
- system.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Markers are not drawn at positions which have any coordinate
- equal to the value AST\_\_BAD (or where the transformation into
- graphical coordinates yields coordinates containing the value
- AST\_\_BAD).
-
- \sstitem
- If any marker position is clipped (see \htmlref{AST\_CLIP}{AST_CLIP}), then the
- entire marker is not drawn.
-
- \sstitem
- An error results if the base Frame of the Plot is not 2-dimensional.
-
- \sstitem
- An error also results if the transformation between the
- current and base Frames of the Plot is not defined (i.e. the
- Plot's \htmlref{TranInverse}{TranInverse} attribute is zero).
- }
- }
-}
-\sstroutine{
- AST\_MASK$<$X$>$\sstlabel{AST_MASKX}
-}{
- Mask a region of a data grid
-}{
- \sstdescription{
- This is a set of functions for masking out regions within gridded data
- (e.g. an image). The functions modifies a given data grid by
- assigning a specified value to all samples which are inside (or outside
- if INSIDE is .FALSE.)
- the specified \htmlref{Region}{Region}.
-
- You should use a masking function which matches the numerical
- type of the data you are processing by replacing $<$X$>$ in
- the generic function name AST\_MASK$<$X$>$ by an appropriate 1- or
- 2-character type code. For example, if you are masking data
- with type REAL, you should use the function AST\_MASKR (see
- the {\tt{"}}Data Type Codes{\tt{"}} section below for the codes appropriate to
- other numerical types).
- }
- \sstinvocation{
- RESULT = AST\_MASK$<$X$>$( THIS, MAP, INSIDE, NDIM, LBND, UBND, IN, VAL,
- STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to a Region.
- }
- \sstsubsection{
- MAP = INTEGER (Given)
- }{
- Pointer to a \htmlref{Mapping}{Mapping}. The forward transformation should map
- positions in the coordinate system of the supplied Region
- into pixel coordinates as defined by the
- LBND and UBND arguments. A value of AST\_\_NULL
- can be supplied if the coordinate system of the supplied Region
- corresponds to pixel coordinates. This is equivalent to
- supplying a \htmlref{UnitMap}{UnitMap}.
-
- The number of inputs for this Mapping (as given by its \htmlref{Nin}{Nin} attribute)
- should match the number of axes in the supplied Region (as given
- by the \htmlref{Naxes}{Naxes} attribute of the Region).
- The number of outputs for the Mapping (as given by its \htmlref{Nout}{Nout} attribute)
- should match the number of
- grid dimensions given by the value of NDIM
- below.
- }
- \sstsubsection{
- INSIDE = INTEGER (Given)
- }{
- A boolean value which indicates which pixel are to be masked. If
- .TRUE.
- is supplied, then all grid pixels with centres inside the supplied
- Region are assigned the value given by
- VAL,
- and all other pixels are left unchanged. If
- .FALSE.
- is supplied, then all grid pixels with centres not inside the supplied
- Region are assigned the value given by
- VAL,
- and all other pixels are left unchanged. Note, the \htmlref{Negated}{Negated}
- attribute of the Region is used to determine which pixel are
- inside the Region and which are outside. So the inside of a Region
- which has not been negated is the same as the outside of the
- corresponding negated Region.
-
- For types of Region such as \htmlref{PointList}{PointList} which have zero volume,
- pixel centres will rarely fall exactly within the Region. For
- this reason, the inclusion criterion is changed for zero-volume
- Regions so that pixels are included (or excluded) if any part of
- the Region passes through the pixel. For a PointList, this means
- that pixels are included (or excluded) if they contain at least
- one of the points listed in the PointList.
- }
- \sstsubsection{
- NDIM = INTEGER (Given)
- }{
- The number of dimensions in the input grid. This should be at
- least one.
- }
- \sstsubsection{
- LBND( NDIM ) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the centre of the first pixel
- in the input grid along each dimension.
- }
- \sstsubsection{
- UBND( NDIM ) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the centre of the last pixel in
- the input grid along each dimension.
-
- Note that LBND and UBND together define the shape
- and size of the input grid, its extent along a particular
- (J'th) dimension being UBND(J)-LBND(J)$+$1. They also define
- the input grid's coordinate system, each pixel having unit
- extent along each dimension with integral coordinate values
- at its centre.
- }
- \sstsubsection{
- IN( $*$ ) = $<$Xtype$>$ (Given and Returned)
- }{
- An array, with one element for each pixel in the
- input grid, containing the data to be masked. The
- numerical type of this array should match the 1- or
- 2-character type code appended to the function name (e.g. if
- you are using AST\_MASKR, the type of each array element
- should be REAL).
-
- The storage order of data within this array should be such
- that the index of the first grid dimension varies most
- rapidly and that of the final dimension least rapidly
- (i.e. normal Fortran array storage order).
-
- On exit, the samples specified by
- INSIDE are set to the value of VAL.
- All other samples are left unchanged.
- }
- \sstsubsection{
- VAL = $<$Xtype$>$ (Given)
- }{
- This argument should have the same type as the elements of
- the IN array. It specifies the value used to flag the
- masked data (see
- INSIDE).
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_MASK$<$X$>$ = INTEGER
- }{
- The number of pixels to which a value of
- BADVAL
- has been assigned.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A value of zero will be returned if this function is invoked
- with the global error status set, or if it should fail for any
- reason.
- }
- }
- \sstdiytopic{
- Data Type Codes
- }{
- To select the appropriate masking function, you should
- replace $<$X$>$ in the generic function name AST\_MASK$<$X$>$ with a
- 1- or 2-character data type code, so as to match the numerical
- type $<$Xtype$>$ of the data you are processing, as follows:
- \sstitemlist{
-
- \sstitem
- D: DOUBLE PRECISION
-
- \sstitem
- R: REAL
-
- \sstitem
- I: INTEGER
-
- \sstitem
- UI: INTEGER (treated as unsigned)
-
- \sstitem
- S: INTEGER$*$2 (short integer)
-
- \sstitem
- US: INTEGER$*$2 (short integer, treated as unsigned)
-
- \sstitem
- B: BYTE (treated as signed)
-
- \sstitem
- UB: BYTE (treated as unsigned)
-
- }
- For example, AST\_MASKD would be used to process DOUBLE
- PRECISION data, while AST\_MASKS would be used to process
- short integer data (stored in an INTEGER$*$2 array), etc.
-
- For compatibility with other Starlink facilities, the codes W
- and UW are provided as synonyms for S and US respectively (but
- only in the Fortran interface to AST).
- }
-}
-\sstroutine{
- AST\_MATCHAXES\sstlabel{AST_MATCHAXES}
-}{
- Find any corresponding axes in two Frames
-}{
- \sstdescription{
- This function looks for corresponding axes within two supplied
- Frames. An array of integers is returned that contains an element
- for each axis in the second supplied \htmlref{Frame}{Frame}. An element in this array
- will be set to zero if the associated axis within the second Frame
- has no corresponding axis within the first Frame. Otherwise, it
- will be set to the index (a non-zero positive integer) of the
- corresponding axis within the first supplied Frame.
- }
- \sstinvocation{
- CALL AST\_MATCHAXES( FRM1, FRM2, AXES, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- FRM1 = INTEGER (Given)
- }{
- Pointer to the first Frame.
- }
- \sstsubsection{
- FRM2 = INTEGER (Given)
- }{
- Pointer to the second Frame.
- }
- \sstsubsection{
- AXES = INTEGER( $*$ ) (Returned)
- }{
- An
- integer array in which to return the indices of the axes (within
- the first Frame) that correspond to each axis within the second
- Frame. \htmlref{Axis}{Axis} indices start at 1. A value of zero will be stored
- in the returned array for each axis in the second Frame that has
- no corresponding axis in the first Frame.
-
- The number of elements in this array must be greater than or
- equal to the number of axes in the second Frame.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- This function applies to all Frames.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Corresponding axes are identified by the fact that a \htmlref{Mapping}{Mapping} can
- be found between them using
- \htmlref{AST\_FINDFRAME}{AST_FINDFRAME} or \htmlref{AST\_CONVERT}{AST_CONVERT}.
- Thus, {\tt{"}}corresponding axes{\tt{"}} are not necessarily identical. For
- instance, \htmlref{SkyFrame}{SkyFrame} axes in two Frames will match even if they
- describe different celestial coordinate systems
- }
- }
-}
-\sstroutine{
- AST\_MATHMAP\sstlabel{AST_MATHMAP}
-}{
- Create a MathMap
-}{
- \sstdescription{
- This function creates a new \htmlref{MathMap}{MathMap} and optionally initialises its
- attributes.
-
- A MathMap is a \htmlref{Mapping}{Mapping} which allows you to specify a set of forward
- and/or inverse transformation functions using arithmetic operations
- and mathematical functions similar to those available in Fortran. The
- MathMap interprets these functions at run-time, whenever its forward
- or inverse transformation is required. Because the functions are not
- compiled in the normal sense (unlike an \htmlref{IntraMap}{IntraMap}), they may be used to
- describe coordinate transformations in a transportable manner. A
- MathMap therefore provides a flexible way of defining new types of
- Mapping whose descriptions may be stored as part of a dataset and
- interpreted by other programs.
- }
- \sstinvocation{
- RESULT = AST\_MATHMAP( NIN, NOUT, NFWD, FWD, NINV, INV, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- NIN = INTEGER
- }{
- Number of input variables for the MathMap. This determines the
- value of its \htmlref{Nin}{Nin} attribute.
- }
- \sstsubsection{
- NOUT = INTEGER
- }{
- Number of output variables for the MathMap. This determines the
- value of its \htmlref{Nout}{Nout} attribute.
- }
- \sstsubsection{
- NFWD = INTEGER
- }{
- The number of forward transformation functions being supplied.
- This must be at least equal to NOUT, but may be increased to
- accommodate any additional expressions which define intermediate
- variables for the forward transformation (see the {\tt{"}}Calculating
- Intermediate Values{\tt{"}} section below).
- }
- \sstsubsection{
- FWD = CHARACTER $*$ ( $*$ )( NFWD )
- }{
- An array which contains the expressions defining the forward
- transformation.
- The syntax of these expressions is described below.
- }
- \sstsubsection{
- NINV = INTEGER
- }{
- The number of inverse transformation functions being supplied.
- This must be at least equal to NIN, but may be increased to
- accommodate any additional expressions which define intermediate
- variables for the inverse transformation (see the {\tt{"}}Calculating
- Intermediate Values{\tt{"}} section below).
- }
- \sstsubsection{
- INV = CHARACTER $*$ ( $*$ )( NINV )
- }{
- An array which contains the expressions defining the inverse
- transformation.
- The syntax of these expressions is described below.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new MathMap. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine. If no initialisation is required, a blank
- value may be supplied.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_MATHMAP = INTEGER
- }{
- A pointer to the new MathMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The sequence of numbers produced by the random number functions
- available within a MathMap is normally unpredictable and different for
- each MathMap. However, this behaviour may be controlled by means of
- the MathMap's \htmlref{Seed}{Seed} attribute.
-
- \sstitem
- Normally, compound Mappings (CmpMaps) which involve MathMaps will
- not be subject to simplification (e.g. using \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}) because AST
- cannot know how different MathMaps will interact. However, in the
- special case where a MathMap occurs in series with its own inverse,
- then simplification may be possible. Whether simplification does, in
- fact, occur under these circumstances is controlled by the MathMap's
- \htmlref{SimpFI}{SimpFI} and \htmlref{SimpIF}{SimpIF} attributes.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Defining Transformation Functions
- }{
- A MathMap's transformation functions are supplied as a set of
- expressions in an array of character strings. Normally you would
- supply the same number of expressions for the forward transformation,
- via the FWD argument, as there are output variables (given by the
- MathMap's Nout attribute). For instance, if Nout is 2 you might use:
- \sstitemlist{
-
- \sstitem
- 'R = SQRT( X $*$ X $+$ Y $*$ Y )'
-
- \sstitem
- 'THETA = ATAN2( Y, X )'
-
- }
- which defines a transformation from Cartesian to polar
- coordinates. Here, the variables that appear on the left of each
- expression (R and THETA) provide names for the output variables and
- those that appear on the right (X and Y) are references to input
- variables.
-
- To complement this, you must also supply expressions for the inverse
- transformation via the INV argument. In this case, the number of
- expressions given would normally match the number of MathMap input
- coordinates (given by the Nin attribute). If Nin is 2, you might use:
- \sstitemlist{
-
- \sstitem
- 'X = R $*$ COS( THETA )'
-
- \sstitem
- 'Y = R $*$ SIN( THETA )'
-
- }
- which expresses the transformation from polar to Cartesian
- coordinates. Note that here the input variables (X and Y) are named on
- the left of each expression, and the output variables (R and THETA)
- are referenced on the right.
-
- Normally, you cannot refer to a variable on the right of an expression
- unless it is named on the left of an expression in the complementary
- set of functions. Therefore both sets of functions (forward and
- inverse) must be formulated using the same consistent set of variable
- names. This means that if you wish to leave one of the transformations
- undefined, you must supply dummy expressions which simply name each of
- the output (or input) variables. For example, you might use:
- \sstitemlist{
-
- \sstitem
- 'X'
-
- \sstitem
- 'Y'
-
- }
- for the inverse transformation above, which serves to name the input
- variables but without defining an inverse transformation.
- }
- \sstdiytopic{
- Calculating Intermediate Values
- }{
- It is sometimes useful to calculate intermediate values and then to
- use these in the final expressions for the output (or input)
- variables. This may be done by supplying additional expressions for
- the forward (or inverse) transformation functions. For instance, the
- following array of five expressions describes 2-dimensional pin-cushion
- distortion:
- \sstitemlist{
-
- \sstitem
- 'R = SQRT( XIN $*$ XIN $+$ YIN $*$ YIN )'
-
- \sstitem
- 'ROUT = R $*$ ( 1 $+$ 0.1 $*$ R $*$ R )'
-
- \sstitem
- 'THETA = ATAN2( YIN, XIN )',
-
- \sstitem
- 'XOUT = ROUT $*$ COS( THETA )'
-
- \sstitem
- 'YOUT = ROUT $*$ SIN( THETA )'
-
- }
- Here, we first calculate three intermediate results (R, ROUT
- and THETA) and then use these to calculate the final results (XOUT
- and YOUT). The MathMap knows that only the final two results
- constitute values for the output variables because its Nout attribute
- is set to 2. You may define as many intermediate variables in this
- way as you choose. Having defined a variable, you may then refer to it
- on the right of any subsequent expressions.
-
- Note that when defining the inverse transformation you may only refer
- to the output variables XOUT and YOUT. The intermediate variables R,
- ROUT and THETA (above) are private to the forward transformation and
- may not be referenced by the inverse transformation. The inverse
- transformation may, however, define its own private intermediate
- variables.
- }
- \sstdiytopic{
- Expression Syntax
- }{
- The expressions given for the forward and inverse transformations
- closely follow the syntax of Fortran (with some extensions for
- compatibility with the C language). They may contain references to
- variables and literal constants, together with arithmetic, logical,
- relational and bitwise operators, and function invocations. A set of
- symbolic constants is also available. Each of these is described in
- detail below. Parentheses may be used to over-ride the normal order of
- evaluation. There is no built-in limit to the length of expressions
- and they are insensitive to case or the presence of additional white
- space.
- }
- \sstdiytopic{
- Variables
- }{
- Variable names must begin with an alphabetic character and may contain
- only alphabetic characters, digits, and the underscore character
- {\tt{"}}\_{\tt{"}}. There is no built-in limit to the length of variable names.
- }
- \sstdiytopic{
- Literal Constants
- }{
- Literal constants, such as {\tt{"}}0{\tt{"}}, {\tt{"}}1{\tt{"}}, {\tt{"}}0.007{\tt{"}} or {\tt{"}}2.505E-16{\tt{"}} may appear
- in expressions, with the decimal point and exponent being optional (a
- {\tt{"}}D{\tt{"}} may also be used as an exponent character). A unary minus {\tt{"}}-{\tt{"}} may
- be used as a prefix.
- }
- \sstdiytopic{
- Arithmetic Precision
- }{
- All arithmetic is floating point, performed in double precision.
- }
- \sstdiytopic{
- Propagation of Missing Data
- }{
- Unless indicated otherwise, if any argument of a function or operator
- has the value AST\_\_BAD (indicating missing data), then the result of
- that function or operation is also AST\_\_BAD, so that such values are
- propagated automatically through all operations performed by MathMap
- transformations. The special value AST\_\_BAD can be represented in
- expressions by the symbolic constant {\tt{"}}$<$bad$>${\tt{"}}.
-
- A $<$bad$>$ result (i.e. equal to AST\_\_BAD) is also produced in response
- to any numerical error (such as division by zero or numerical
- overflow), or if an invalid argument value is provided to a function
- or operator.
- }
- \sstdiytopic{
- Arithmetic Operators
- }{
- The following arithmetic operators are available:
- \sstitemlist{
-
- \sstitem
- X1 $+$ X2: Sum of X1 and X2.
-
- \sstitem
- X1 - X2: Difference of X1 and X2.
-
- \sstitem
- X1 $*$ X2: Product of X1 and X2.
-
- \sstitem
- X1 / X2: Ratio of X1 and X2.
-
- \sstitem
- X1 $*$$*$ X2: X1 raised to the power of X2.
-
- \sstitem
- $+$ X: Unary plus, has no effect on its argument.
-
- \sstitem
- - X: Unary minus, negates its argument.
- }
- }
- \sstdiytopic{
- Logical Operators
- }{
- Logical values are represented using zero to indicate .FALSE. and
- non-zero to indicate .TRUE.. In addition, the value AST\_\_BAD is taken to
- mean {\tt{"}}unknown{\tt{"}}. The values returned by logical operators may therefore
- be 0, 1 or AST\_\_BAD. Where appropriate, {\tt{"}}tri-state{\tt{"}} logic is
- implemented. For example, A.OR.B may evaluate to 1 if A is non-zero,
- even if B has the value AST\_\_BAD. This is because the result of the
- operation would not be affected by the value of B, so long as A is
- non-zero.
-
- The following logical operators are available:
- \sstitemlist{
-
- \sstitem
- X1 .AND. X2: Logical AND between X1 and X2, returning 1 if both X1
- and X2 are non-zero, and 0 otherwise. This operator implements
- tri-state logic. (The synonym {\tt{"}}\&\&{\tt{"}} is also provided for compatibility
- with C.)
-
- \sstitem
- X1 .OR. X2: Logical OR between X1 and X2, returning 1 if either X1
- or X2 are non-zero, and 0 otherwise. This operator implements
- tri-state logic. (The synonym {\tt{"}}$|$$|${\tt{"}} is also provided for compatibility
- with C.)
-
- \sstitem
- X1 .NEQV. X2: Logical exclusive OR (XOR) between X1 and X2,
- returning 1 if exactly one of X1 and X2 is non-zero, and 0
- otherwise. Tri-state logic is not used with this operator. (The
- synonym {\tt{"}}.XOR.{\tt{"}} is also provided, although this is not standard
- Fortran. In addition, the C-like synonym {\tt{"}}$\wedge$$\wedge${\tt{"}} may be used, although
- this is also not standard.)
-
- \sstitem
- X1 .EQV. X2: Tests whether the logical states of X1 and X2
- (i.e. .TRUE./.FALSE.) are equal. It is the negative of the exclusive OR
- (XOR) function. Tri-state logic is not used with this operator.
-
- \sstitem
- .NOT. X: Logical unary NOT operation, returning 1 if X is zero, and
- 0 otherwise. (The synonym {\tt{"}}!{\tt{"}} is also provided for compatibility with
- C.)
- }
- }
- \sstdiytopic{
- Relational Operators
- }{
- Relational operators return the logical result (0 or 1) of comparing
- the values of two floating point values for equality or inequality. The
- value AST\_\_BAD may also be returned if either argument is $<$bad$>$.
-
- The following relational operators are available:
- \sstitemlist{
-
- \sstitem
- X1 .EQ. X2: Tests whether X1 equals X2. (The synonym {\tt{"}}=={\tt{"}} is also
- provided for compatibility with C.)
-
- \sstitem
- X1 .NE. X2: Tests whether X1 is unequal to X2. (The synonym {\tt{"}}!={\tt{"}} is
- also provided for compatibility with C.)
-
- \sstitem
- X1 .GT. X2: Tests whether X1 is greater than X2. (The synonym {\tt{"}}$>${\tt{"}} is
- also provided for compatibility with C.)
-
- \sstitem
- X1 .GE. X2: Tests whether X1 is greater than or equal to X2. (The
- synonym {\tt{"}}$>$={\tt{"}} is also provided for compatibility with C.)
-
- \sstitem
- X1 .LT. X2: Tests whether X1 is less than X2. (The synonym {\tt{"}}$<${\tt{"}} is also
- provided for compatibility with C.)
-
- \sstitem
- X1 .LE. X2: Tests whether X1 is less than or equal to X2. (The synonym
- {\tt{"}}$<$={\tt{"}} is also provided for compatibility with C.)
-
- }
- Note that relational operators cannot usefully be used to compare
- values with the $<$bad$>$ value (representing missing data), because the
- result is always $<$bad$>$. The ISBAD() function should be used instead.
-
- Note, also, that because logical operators can operate on floating
- point values, care must be taken to use parentheses in some cases
- where they would not normally be required in Fortran. For example,
- the expresssion:
- \sstitemlist{
-
- \sstitem
- .NOT. A .EQ. B
-
- }
- must be written:
- \sstitemlist{
-
- \sstitem
- .NOT. ( A .EQ. B )
-
- }
- to prevent the .NOT. operator from associating with the variable A.
- }
- \sstdiytopic{
- Bitwise Operators
- }{
- Bitwise operators are often useful when operating on raw data
- (e.g. from instruments), so they are provided for use in MathMap
- expressions. In this case, however, the values on which they operate
- are floating point values rather than the more usual pure integers. In
- order to produce results which match the pure integer case, the
- operands are regarded as fixed point binary numbers (i.e. with the
- binary equivalent of a decimal point) with negative numbers
- represented using twos-complement notation. For integer values, the
- resulting bit pattern corresponds to that of the equivalent signed
- integer (digits to the right of the point being zero). Operations on
- the bits representing the fractional part are also possible, however.
-
- The following bitwise operators are available:
- \sstitemlist{
-
- \sstitem
- X1 $>$$>$ X2: Rightward bit shift. The integer value of X2 is taken
- (rounding towards zero) and the bits representing X1 are then
- shifted this number of places to the right (or to the left if the
- number of places is negative). This is equivalent to dividing X1 by
- the corresponding power of 2.
-
- \sstitem
- X1 $<$$<$ X2: Leftward bit shift. The integer value of X2 is taken
- (rounding towards zero), and the bits representing X1 are then
- shifted this number of places to the left (or to the right if the
- number of places is negative). This is equivalent to multiplying X1
- by the corresponding power of 2.
-
- \sstitem
- X1 \& X2: Bitwise AND between the bits of X1 and those of X2
- (equivalent to a logical AND applied at each bit position in turn).
-
- \sstitem
- X1 $|$ X2: Bitwise OR between the bits of X1 and those of X2
- (equivalent to a logical OR applied at each bit position in turn).
-
- \sstitem
- X1 $\wedge$ X2: Bitwise exclusive OR (XOR) between the bits of X1 and
- those of X2 (equivalent to a logical XOR applied at each bit
- position in turn).
-
- }
- Note that no bit inversion operator is provided. This is
- because inverting the bits of a twos-complement fixed point binary
- number is equivalent to simply negating it. This differs from the
- pure integer case because bits to the right of the binary point are
- also inverted. To invert only those bits to the left of the binary
- point, use a bitwise exclusive OR with the value -1 (i.e. X$\wedge$-1).
- }
- \sstdiytopic{
- Functions
- }{
- The following functions are available:
- \sstitemlist{
-
- \sstitem
- ABS(X): Absolute value of X (sign removal), same as FABS(X).
-
- \sstitem
- ACOS(X): Inverse cosine of X, in radians.
-
- \sstitem
- ACOSD(X): Inverse cosine of X, in degrees.
-
- \sstitem
- ACOSH(X): Inverse hyperbolic cosine of X.
-
- \sstitem
- ACOTH(X): Inverse hyperbolic cotangent of X.
-
- \sstitem
- ACSCH(X): Inverse hyperbolic cosecant of X.
-
- \sstitem
- AINT(X): Integer part of X (round towards zero), same as INT(X).
-
- \sstitem
- ASECH(X): Inverse hyperbolic secant of X.
-
- \sstitem
- ASIN(X): Inverse sine of X, in radians.
-
- \sstitem
- ASIND(X): Inverse sine of X, in degrees.
-
- \sstitem
- ASINH(X): Inverse hyperbolic sine of X.
-
- \sstitem
- ATAN(X): Inverse tangent of X, in radians.
-
- \sstitem
- ATAND(X): Inverse tangent of X, in degrees.
-
- \sstitem
- ATANH(X): Inverse hyperbolic tangent of X.
-
- \sstitem
- ATAN2(X1, X2): Inverse tangent of X1/X2, in radians.
-
- \sstitem
- ATAN2D(X1, X2): Inverse tangent of X1/X2, in degrees.
-
- \sstitem
- CEIL(X): Smallest integer value not less then X (round towards
- plus infinity).
-
- \sstitem
- COS(X): Cosine of X in radians.
-
- \sstitem
- COSD(X): Cosine of X in degrees.
-
- \sstitem
- COSH(X): Hyperbolic cosine of X.
-
- \sstitem
- COTH(X): Hyperbolic cotangent of X.
-
- \sstitem
- CSCH(X): Hyperbolic cosecant of X.
-
- \sstitem
- DIM(X1, X2): Returns X1-X2 if X1 is greater than X2, otherwise 0.
-
- \sstitem
- EXP(X): Exponential function of X.
-
- \sstitem
- FABS(X): Absolute value of X (sign removal), same as ABS(X).
-
- \sstitem
- FLOOR(X): Largest integer not greater than X (round towards
- minus infinity).
-
- \sstitem
- FMOD(X1, X2): Remainder when X1 is divided by X2, same as
- MOD(X1, X2).
-
- \sstitem
- GAUSS(X1, X2): Random sample from a Gaussian distribution with mean
- X1 and standard deviation X2.
-
- \sstitem
- INT(X): Integer part of X (round towards zero), same as AINT(X).
-
- \sstitem
- ISBAD(X): Returns 1 if X has the $<$bad$>$ value (AST\_\_BAD), otherwise 0.
-
- \sstitem
- LOG(X): Natural logarithm of X.
-
- \sstitem
- LOG10(X): Logarithm of X to base 10.
-
- \sstitem
- MAX(X1, X2, ...): Maximum of two or more values.
-
- \sstitem
- MIN(X1, X2, ...): Minimum of two or more values.
-
- \sstitem
- MOD(X1, X2): Remainder when X1 is divided by X2, same as
- FMOD(X1, X2).
-
- \sstitem
- NINT(X): Nearest integer to X (round to nearest).
-
- \sstitem
- POISSON(X): Random integer-valued sample from a Poisson
- distribution with mean X.
-
- \sstitem
- POW(X1, X2): X1 raised to the power of X2.
-
- \sstitem
- QIF(x1, x2, x3): Returns X2 if X1 is true, and X3 otherwise.
-
- \sstitem
- RAND(X1, X2): Random sample from a uniform distribution in the
- range X1 to X2 inclusive.
-
- \sstitem
- SECH(X): Hyperbolic secant of X.
-
- \sstitem
- SIGN(X1, X2): Absolute value of X1 with the sign of X2
- (transfer of sign).
-
- \sstitem
- SIN(X): Sine of X in radians.
-
- \sstitem
- SINC(X): Sinc function of X [= SIN(X)/X].
-
- \sstitem
- SIND(X): Sine of X in degrees.
-
- \sstitem
- SINH(X): Hyperbolic sine of X.
-
- \sstitem
- SQR(X): Square of X (= X$*$X).
-
- \sstitem
- SQRT(X): Square root of X.
-
- \sstitem
- TAN(X): Tangent of X in radians.
-
- \sstitem
- TAND(X): Tangent of X in degrees.
-
- \sstitem
- TANH(X): Hyperbolic tangent of X.
- }
- }
- \sstdiytopic{
- Symbolic Constants
- }{
- The following symbolic constants are available (the enclosing {\tt{"}}$<$$>${\tt{"}}
- brackets must be included):
- \sstitemlist{
-
- \sstitem
- $<$bad$>$: The {\tt{"}}bad{\tt{"}} value (AST\_\_BAD) used to flag missing data. Note
- that you cannot usefully compare values with this constant because the
- result is always $<$bad$>$. The ISBAD() function should be used instead.
-
- \sstitem
- $<$dig$>$: Number of decimal digits of precision available in a
- floating point (double precision) value.
-
- \sstitem
- $<$e$>$: \htmlref{Base}{Base} of natural logarithms.
-
- \sstitem
- $<$epsilon$>$: Smallest positive number such that 1.0$+$$<$epsilon$>$ is
- distinguishable from unity.
-
- \sstitem
- $<$mant\_dig$>$: The number of base $<$radix$>$ digits stored in the
- mantissa of a floating point (double precision) value.
-
- \sstitem
- $<$max$>$: Maximum representable floating point (double precision) value.
-
- \sstitem
- $<$max\_10\_exp$>$: Maximum integer such that 10 raised to that power
- can be represented as a floating point (double precision) value.
-
- \sstitem
- $<$max\_exp$>$: Maximum integer such that $<$radix$>$ raised to that
- power minus 1 can be represented as a floating point (double precision)
- value.
-
- \sstitem
- $<$min$>$: Smallest positive number which can be represented as a
- normalised floating point (double precision) value.
-
- \sstitem
- $<$min\_10\_exp$>$: Minimum negative integer such that 10 raised to that
- power can be represented as a normalised floating point (double
- precision) value.
-
- \sstitem
- $<$min\_exp$>$: Minimum negative integer such that $<$radix$>$ raised to
- that power minus 1 can be represented as a normalised floating point
- (double precision) value.
-
- \sstitem
- $<$pi$>$: Ratio of the circumference of a circle to its diameter.
-
- \sstitem
- $<$radix$>$: The radix (number base) used to represent the mantissa of
- floating point (double precision) values.
-
- \sstitem
- $<$rounds$>$: The mode used for rounding floating point results after
- addition. Possible values include: -1 (indeterminate), 0 (toward
- zero), 1 (to nearest), 2 (toward plus infinity) and 3 (toward minus
- infinity). Other values indicate machine-dependent behaviour.
- }
- }
- \sstdiytopic{
- Evaluation Precedence and Associativity
- }{
- Items appearing in expressions are evaluated in the following order
- (highest precedence first):
- \sstitemlist{
-
- \sstitem
- Constants and variables
-
- \sstitem
- Function arguments and parenthesised expressions
-
- \sstitem
- Function invocations
-
- \sstitem
- Unary $+$ - ! .not.
-
- \sstitem
- $*$$*$
-
- \sstitem
- $*$ /
-
- \sstitem
- $+$ -
-
- \sstitem
- $<$$<$ $>$$>$
-
- \sstitem
- $<$ .lt. $<$= .le. $>$ .gt. $>$= .ge.
-
- \sstitem
- == .eq. != .ne.
-
- \sstitem
- \&
-
- \sstitem
- $\wedge$
-
- \sstitem
- $|$
-
- \sstitem
- \&\& .and.
-
- \sstitem
- $\wedge$$\wedge$
-
- \sstitem
- $|$$|$ .or
-
- \sstitem
- .eqv. .neqv. .xor.
-
- }
- All operators associate from left-to-right, except for unary $+$,
- unary -, !, .not. and $*$$*$ which associate from right-to-left.
- }
-}
-\sstroutine{
- AST\_MATRIXMAP\sstlabel{AST_MATRIXMAP}
-}{
- Create a MatrixMap
-}{
- \sstdescription{
- This function creates a new \htmlref{MatrixMap}{MatrixMap} and optionally initialises
- its attributes.
-
- A MatrixMap is a form of \htmlref{Mapping}{Mapping} which performs a general linear
- transformation. Each set of input coordinates, regarded as a
- column-vector, are pre-multiplied by a matrix (whose elements
- are specified when the MatrixMap is created) to give a new
- column-vector containing the output coordinates. If appropriate,
- the inverse transformation may also be performed.
- }
- \sstinvocation{
- RESULT = AST\_MATRIXMAP( NIN, NOUT, FORM, MATRIX, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- NIN = INTEGER (Given)
- }{
- The number of input coordinates, which determines the number
- of columns in the matrix.
- }
- \sstsubsection{
- NOUT = INTEGER (Given)
- }{
- The number of output coordinates, which determines the number
- of rows in the matrix.
- }
- \sstsubsection{
- FORM = INTEGER (Given)
- }{
- An integer which indicates the form in which the matrix
- elements will be supplied.
-
- A value of zero indicates that a full NOUT x NIN matrix
- of values will be supplied via the MATRIX argument
- (below). In this case, the elements should be given in row
- order (the elements of the first row, followed by the
- elements of the second row, etc.).
-
- A value of 1 indicates that only the diagonal elements of the
- matrix will be supplied, and that all others should be
- zero. In this case, the elements of MATRIX should contain
- only the diagonal elements, stored consecutively.
-
- A value of 2 indicates that a {\tt{"}}unit{\tt{"}} matrix is required,
- whose diagonal elements are set to unity (with all other
- elements zero). In this case, the MATRIX argument is not used.
- }
- \sstsubsection{
- MATRIX( $*$ ) = DOUBLE PRECISION (Given)
- }{
- The array of matrix elements to be used, stored according to
- the value of FORM.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new MatrixMap. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_MATRIXMAP = INTEGER
- }{
- A pointer to the new MatrixMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- In general, a MatrixMap's forward transformation will always
- be available (as indicated by its \htmlref{TranForward}{TranForward} attribute), but
- its inverse transformation (\htmlref{TranInverse}{TranInverse} attribute) will only be
- available if the associated matrix is square and non-singular.
-
- \sstitem
- As an exception to this, the inverse transformation is always
- available if a unit or diagonal matrix is specified. In this
- case, if the matrix is not square, one or more of the input
- coordinate values may not be recoverable from a set of output
- coordinates. Any coordinates affected in this way will simply be
- set to the value zero.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- AST\_NEGATE\sstlabel{AST_NEGATE}
-}{
- Negate the area represented by a Region
-}{
- \sstdescription{
- This function negates the area represented by a \htmlref{Region}{Region}. That is,
- points which were previously inside the region will then be
- outside, and points which were outside will be inside. This is
- acomplished by toggling the state of the \htmlref{Negated}{Negated} attribute for
- the supplied region.
- }
- \sstinvocation{
- CALL AST\_NEGATE( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Region.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
-}
-\sstroutine{
- AST\_NORM\sstlabel{AST_NORM}
-}{
- Normalise a set of Frame coordinates
-}{
- \sstdescription{
- This routine normalises a set of \htmlref{Frame}{Frame} coordinate values which
- might be unsuitable for display (e.g. may lie outside the
- expected range) into a set of acceptable values suitable for
- display.
- }
- \sstinvocation{
- CALL AST\_NORM( THIS, VALUE, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Frame.
- }
- \sstsubsection{
- VALUE( $*$ ) = DOUBLE PRECISION (Given and Returned)
- }{
- An array with one element for each Frame axis
- (\htmlref{Naxes}{Naxes} attribute). Initially, this should contain a set of
- coordinate values representing a point in the space which the
- Frame describes. If these values lie outside the expected
- range for the Frame, they will be replaced with more
- acceptable (normalised) values. Otherwise, they will be
- returned unchanged.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- For some classes of Frame, whose coordinate values are not
- constrained, this function will never modify the values
- supplied. However, for Frames whose axes represent cyclic
- quantities (such as angles or positions on the sky), coordinates
- will typically be wrapped into an appropriate standard range,
- such as zero to 2$*$pi.
-
- \sstitem
- The \htmlref{NormMap}{NormMap} class is a \htmlref{Mapping}{Mapping} which can be used to normalise a
- set of points using the
- AST\_NORM routine
- of a specified Frame.
-
- \sstitem
- It is intended to be possible to put any set of coordinates
- into a form suitable for display by using this function to
- normalise them, followed by appropriate formatting
- (using \htmlref{AST\_FORMAT}{AST_FORMAT}).
- }
- }
-}
-\sstroutine{
- AST\_NORMMAP\sstlabel{AST_NORMMAP}
-}{
- Create a NormMap
-}{
- \sstdescription{
- This function creates a new \htmlref{NormMap}{NormMap} and optionally initialises its
- attributes.
-
- A NormMap is a \htmlref{Mapping}{Mapping} which normalises coordinate values using the
- \htmlref{AST\_NORM}{AST_NORM} routine
- of the supplied \htmlref{Frame}{Frame}. The number of inputs and outputs of a NormMap
- are both equal to the number of axes in the supplied Frame.
-
- The forward and inverse transformation of a NormMap are both
- defined but are identical (that is, they do not form a real inverse
- pair in that the inverse transformation does not undo the
- normalisation, instead it reapplies it). However, the
- \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}
- function will replace neighbouring pairs of forward and inverse
- NormMaps by a single \htmlref{UnitMap}{UnitMap}.
- }
- \sstinvocation{
- RESULT = AST\_NORMMAP( FRAME, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- FRAME = INTEGER (Given)
- }{
- A pointer to the Frame which is to be used to normalise the
- supplied axis values.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new NormMap. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_NORMMAP = INTEGER
- }{
- A pointer to the new NormMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- AST\_NULLREGION\sstlabel{AST_NULLREGION}
-}{
- Create a NullRegion
-}{
- \sstdescription{
- This function creates a new \htmlref{NullRegion}{NullRegion} and optionally initialises its
- attributes.
-
- A NullRegion is a \htmlref{Region}{Region} with no bounds. If the \htmlref{Negated}{Negated} attribute of a
- NullRegion is false, the NullRegion represents a Region containing no
- points. If the Negated attribute of a NullRegion is true, the NullRegion
- represents an infinite Region containing all points within the
- coordinate system.
- }
- \sstinvocation{
- RESULT = AST\_NULLREGION( FRAME, UNC, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- FRAME = INTEGER (Given)
- }{
- A pointer to the \htmlref{Frame}{Frame} in which the region is defined. A deep
- copy is taken of the supplied Frame. This means that any
- subsequent changes made to the Frame using the supplied pointer
- will have no effect the Region.
- }
- \sstsubsection{
- UNC = INTEGER (Given)
- }{
- An optional pointer to an existing Region which specifies the
- uncertainties associated with positions in the supplied Frame.
- The uncertainty in any point in the Frame is found by shifting the
- supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at the point
- being considered. The area covered by the shifted uncertainty
- Region then represents the uncertainty in the position. The
- uncertainty is assumed to be the same for all points.
-
- If supplied, the uncertainty Region must be of a class for which
- all instances are centro-symetric (e.g. \htmlref{Box}{Box}, \htmlref{Circle}{Circle}, \htmlref{Ellipse}{Ellipse}, etc.)
- or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
- copy of the supplied Region will be taken, so subsequent changes to
- the uncertainty Region using the supplied pointer will have no
- effect on the created Box. Alternatively,
- a null \htmlref{Object}{Object} pointer (AST\_\_NULL)
- may be supplied, in which case a default uncertainty of zero is
- used.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new NullRegion. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_NULLREGION = INTEGER
- }{
- A pointer to the new NullRegion.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_OFFSET\sstlabel{AST_OFFSET}
-}{
- Calculate an offset along a geodesic curve
-}{
- \sstdescription{
- This routine finds the \htmlref{Frame}{Frame} coordinate values of a point which
- is offset a specified distance along the geodesic curve between
- two other points.
-
- For example, in a basic Frame, this offset will be along the
- straight line joining two points. For a more specialised Frame
- describing a sky coordinate system, however, it would be along
- the great circle passing through two sky positions.
- }
- \sstinvocation{
- CALL AST\_OFFSET( THIS, POINT1, POINT2, OFFSET, POINT3, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Frame.
- }
- \sstsubsection{
- POINT1( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each Frame axis
- (\htmlref{Naxes}{Naxes} attribute). This should contain the coordinates of the
- point marking the start of the geodesic curve.
- }
- \sstsubsection{
- POINT2( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each Frame axis.
- This should contain the coordinates of the point marking the
- end of the geodesic curve.
- }
- \sstsubsection{
- OFFSET = DOUBLE PRECISION
- }{
- The required offset from the first point along the geodesic
- curve. If this is positive, it will be towards the second
- point. If it is negative, it will be in the opposite
- direction. This offset need not imply a position lying
- between the two points given, as the curve will be
- extrapolated if necessary.
- }
- \sstsubsection{
- POINT3( $*$ ) = DOUBLE PRECISION (Returned)
- }{
- An array with one element for each Frame axis
- in which the coordinates of the required point will be returned.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The geodesic curve used by this routine is the path of
- shortest distance between two points, as defined by the
- \htmlref{AST\_DISTANCE}{AST_DISTANCE} function.
-
- \sstitem
- This function will return {\tt{"}}bad{\tt{"}} coordinate values (AST\_\_BAD)
- if any of the input coordinates has this value.
-
- \sstitem
- {\tt{"}}Bad{\tt{"}} coordinate values will also be returned if the two
- points supplied are coincident (or otherwise fail to uniquely
- specify a geodesic curve) but the requested offset is non-zero.
- }
- }
-}
-\sstroutine{
- AST\_OFFSET2\sstlabel{AST_OFFSET2}
-}{
- Calculate an offset along a geodesic curve in a 2D Frame
-}{
- \sstdescription{
- This routine finds the \htmlref{Frame}{Frame} coordinate values of a point which
- is offset a specified distance along the geodesic curve at a
- given angle from a specified starting point. It can only be
- used with 2-dimensional Frames.
-
- For example, in a basic Frame, this offset will be along the
- straight line joining two points. For a more specialised Frame
- describing a sky coordinate system, however, it would be along
- the great circle passing through two sky positions.
- }
- \sstinvocation{
- RESULT = AST\_OFFSET2( THIS, POINT1, ANGLE, OFFSET, POINT2, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Frame.
- }
- \sstsubsection{
- POINT1( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each Frame axis
- (\htmlref{Naxes}{Naxes} attribute). This should contain the coordinates of the
- point marking the start of the geodesic curve.
- }
- \sstsubsection{
- ANGLE = DOUBLE PRECISION (Given)
- }{
- The angle (in radians) from the positive direction of the second
- axis, to the direction of the required position, as seen from
- the starting position. Positive rotation is in the sense of
- rotation from the positive direction of axis 2 to the positive
- direction of axis 1.
- }
- \sstsubsection{
- OFFSET = DOUBLE PRECISION
- }{
- The required offset from the first point along the geodesic
- curve. If this is positive, it will be in the direction of the
- given angle. If it is negative, it will be in the opposite
- direction.
- }
- \sstsubsection{
- POINT2( $*$ ) = DOUBLE PRECISION (Returned)
- }{
- An array with one element for each Frame axis
- in which the coordinates of the required point will be returned.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_OFFSET2 = DOUBLE PRECISION
- }{
- The direction of the geodesic curve at the end point. That is, the
- angle (in radians) between the positive direction of the second
- axis and the continuation of the geodesic curve at the requested
- end point. Positive rotation is in the sense of rotation from
- the positive direction of axis 2 to the positive direction of axis
- 1.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The geodesic curve used by this routine is the path of
- shortest distance between two points, as defined by the
- \htmlref{AST\_DISTANCE}{AST_DISTANCE} function.
-
- \sstitem
- An error will be reported if the Frame is not 2-dimensional.
-
- \sstitem
- This function will return {\tt{"}}bad{\tt{"}} coordinate values (AST\_\_BAD)
- if any of the input coordinates has this value.
- }
- }
-}
-\sstroutine{
- AST\_OUTLINE$<$X$>$\sstlabel{AST_OUTLINEX}
-}{
- Create a new Polygon outling values in a 2D data grid
-}{
- \sstdescription{
- This is a set of functions that create a \htmlref{Polygon}{Polygon} enclosing a single
- contiguous set of pixels that have a specified value within a gridded
- 2-dimensional data array (e.g. an image).
-
- A basic 2-dimensional \htmlref{Frame}{Frame} is used to represent the pixel coordinate
- system in the returned Polygon. The \htmlref{Domain}{Domain} attribute is set to
- {\tt{"}}PIXEL{\tt{"}}, the \htmlref{Title}{Title} attribute is set to {\tt{"}}Pixel coordinates{\tt{"}}, and the
- Unit attribute for each axis is set to {\tt{"}}pixel{\tt{"}}. All other
- attributes are left unset. The nature of the pixel coordinate system
- is determined by parameter
- STARPIX.
-
- The
- MAXERR and MAXVERT
- parameters can be used to control how accurately the returned
- Polygon represents the required region in the data array. The
- number of vertices in the returned Polygon will be the minimum
- needed to achieve the required accuracy.
-
- You should use a function which matches the numerical type of the
- data you are processing by replacing $<$X$>$ in the generic function
- name
- AST\_OUTLINE$<$X$>$
- are procesing data with type
- REAL, you should use the function AST\_OUTLINER
- (see the {\tt{"}}Data Type Codes{\tt{"}} section below for the codes appropriate to
- other numerical types).
- }
- \sstinvocation{
- RESULT = AST\_OUTLINE$<$X$>$( VALUE, OPER, ARRAY, LBND, UBND, MAXERR,
- MAXVERT, INSIDE, STARPIX, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- VALUE = $<$Xtype$>$ (Given)
- }{
- A data value that specifies the pixels to be outlined.
- }
- \sstsubsection{
- OPER = INTEGER (Given)
- }{
- Indicates how the
- VALUE
- parameter is used to select the outlined pixels. It can
- have any of the following values:
- \sstitemlist{
-
- \sstitem
- AST\_\_LT: outline pixels with value less than VALUE.
-
- \sstitem
- AST\_\_LE: outline pixels with value less than or equal to VALUE.
-
- \sstitem
- AST\_\_EQ: outline pixels with value equal to VALUE.
-
- \sstitem
- AST\_\_NE: outline pixels with value not equal to VALUE.
-
- \sstitem
- AST\_\_GE: outline pixels with value greater than or equal to VALUE.
-
- \sstitem
- AST\_\_GT: outline pixels with value greater than VALUE.
- }
- }
- \sstsubsection{
- ARRAY( $*$ ) = $<$Xtype$>$ (Given)
- }{
- A
- 2-dimensional array containing the data to be processed. The
- numerical type of this array should match the 1- or
- 2-character type code appended to the function name (e.g. if
- you are using AST\_OUTLINER, the type of each array element
- should be REAL).
-
- The storage order of data within this array should be such
- that the index of the first grid dimension varies most
- rapidly and that of the second dimension least rapidly
- (i.e. normal Fortran array storage order).
- }
- \sstsubsection{
- LBND( 2 ) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the centre of the first pixel
- in the input grid along each dimension.
- }
- \sstsubsection{
- UBND( 2) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the centre of the last pixel in
- the input grid along each dimension.
-
- Note that LBND and UBND together define the shape
- and size of the input grid, its extent along a particular
- (J'th) dimension being UBND(J)-LBND(J)$+$1. They also define
- the input grid's coordinate system, each pixel having unit
- extent along each dimension with integral coordinate values
- at its centre or upper corner, as selected by parameter
- STARPIX.
- }
- \sstsubsection{
- MAXERR = DOUBLE PRECISION (Given)
- }{
- Together with
- MAXVERT,
- this determines how accurately the returned Polygon represents
- the required region of the data array. It gives the target
- discrepancy between the returned Polygon and the accurate outline
- in the data array, expressed as a number of pixels. Insignificant
- vertices are removed from the accurate outline, one by one, until
- the number of vertices remaining in the returned Polygon equals
- MAXVERT,
- or the largest discrepancy between the accurate outline and the
- returned Polygon is greater than
- MAXERR. If MAXERR
- is zero or less, its value is ignored and the returned Polygon will
- have the number of vertices specified by
- MAXVERT.
- }
- \sstsubsection{
- MAXVERT = INTEGER (Given)
- }{
- Together with
- MAXERR,
- this determines how accurately the returned Polygon represents
- the required region of the data array. It gives the maximum
- allowed number of vertices in the returned Polygon. Insignificant
- vertices are removed from the accurate outline, one by one, until
- the number of vertices remaining in the returned Polygon equals
- MAXVERT,
- or the largest discrepancy between the accurate outline and the
- returned Polygon is greater than
- MAXERR. If MAXVERT
- is less than 3, its value is ignored and the number of vertices in
- the returned Polygon will be the minimum needed to ensure that the
- discrepancy between the accurate outline and the returned
- Polygon is less than
- MAXERR.
- }
- \sstsubsection{
- INSIDE( 2 ) = INTEGER (Given)
- }{
- An array
- containing the indices of a pixel known to be inside the
- required region. This is needed because the supplied data
- array may contain several disjoint areas of pixels that satisfy
- the criterion specified by
- VALUE and OPER.
- In such cases, the area described by the returned Polygon will
- be the one that contains the pixel specified by
- INSIDE.
- If the specified pixel is outside the bounds given by
- LBND and UBND,
- or has a value that does not meet the criterion specified by
- VALUE and OPER,
- then this function will search for a suitable pixel. The search
- starts at the central pixel and proceeds in a spiral manner until
- a pixel is found that meets the specified crierion.
- }
- \sstsubsection{
- STARPIX = LOGICAL (Given)
- }{
- A flag indicating the nature of the pixel coordinate system used
- to describe the vertex positions in the returned Polygon. If
- .TRUE.,
- the standard Starlink definition of pixel coordinate is used in
- which a pixel with integer index I spans a range of pixel coordinate
- from (I-1) to I (i.e. pixel corners have integral pixel coordinates).
- If .FALSE.,
- the definition of pixel coordinate used by other AST functions
- such as AST\_RESAMPLE, AST\_MASK,
- etc., is used. In this definition, a pixel with integer index I
- spans a range of pixel coordinate from (I-0.5) to (I$+$0.5) (i.e.
- pixel centres have integral pixel coordinates).
- }
- \sstsubsection{
- BOXSIZE = INTEGER (Given)
- }{
- The full width in pixels of a smoothing box to be applied to the
- polygon vertices before downsizing the polygon to a smaller number
- of vertices. If an even number is supplied, the next larger odd
- number is used. Values of one or zero result in no smoothing.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_OUTLINE$<$X$>$ = INTEGER
- }{
- The number of pixels to which a value of
- BADVAL
- has been assigned.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function proceeds by first finding a very accurate polygon,
- and then removing insignificant vertices from this fine polygon
- using
- \htmlref{AST\_DOWNSIZE}{AST_DOWNSIZE}.
-
- \sstitem
- The returned Polygon is the outer boundary of the contiguous set
- of pixels that includes ths specified {\tt{"}}inside{\tt{"}} point, and satisfy
- the specified value requirement. This set of pixels may potentially
- include {\tt{"}}holes{\tt{"}} where the pixel values fail to meet the specified
- value requirement. Such holes will be ignored by this function.
-
- \sstitem
- A value of zero will be returned if this function is invoked
- with the global error status set, or if it should fail for any
- reason.
- }
- }
- \sstdiytopic{
- Data Type Codes
- }{
- To select the appropriate masking function, you should
- replace $<$X$>$ in the generic function name AST\_OUTLINE$<$X$>$ with a
- 1- or 2-character data type code, so as to match the numerical
- type $<$Xtype$>$ of the data you are processing, as follows:
- \sstitemlist{
-
- \sstitem
- D: DOUBLE PRECISION
-
- \sstitem
- R: REAL
-
- \sstitem
- I: INTEGER
-
- \sstitem
- UI: INTEGER (treated as unsigned)
-
- \sstitem
- S: INTEGER$*$2 (short integer)
-
- \sstitem
- US: INTEGER$*$2 (short integer, treated as unsigned)
-
- \sstitem
- B: BYTE (treated as signed)
-
- \sstitem
- UB: BYTE (treated as unsigned)
-
- }
- For example, AST\_OUTLINED would be used to process DOUBLE
- PRECISION data, while AST\_OUTLINES would be used to process
- short integer data (stored in an INTEGER$*$2 array), etc.
-
- For compatibility with other Starlink facilities, the codes W
- and UW are provided as synonyms for S and US respectively (but
- only in the Fortran interface to AST).
- }
-}
-\sstroutine{
- AST\_OVERLAP\sstlabel{AST_OVERLAP}
-}{
- Test if two regions overlap each other
-}{
- \sstdescription{
- This function returns an integer value indicating if the two
- supplied Regions overlap. The two Regions are converted to a commnon
- coordinate system before performing the check. If this conversion is
- not possible (for instance because the two Regions represent areas in
- different domains), then the check cannot be performed and a zero value
- is returned to indicate this.
- }
- \sstinvocation{
- RESULT = AST\_OVERLAP( THIS, THAT, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the first \htmlref{Region}{Region}.
- }
- \sstsubsection{
- THAT = INTEGER (Given)
- }{
- Pointer to the second Region.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_OVERLAP = INTEGER
- }{
- A value indicating if there is any overlap between the two Regions.
- Possible values are:
-
- 0 - The check could not be performed because the second Region
- could not be mapped into the coordinate system of the first
- Region.
-
- 1 - There is no overlap between the two Regions.
-
- 2 - The first Region is completely inside the second Region.
-
- 3 - The second Region is completely inside the first Region.
-
- 4 - There is partial overlap between the two Regions.
-
- 5 - The Regions are identical to within their uncertainties.
-
- 6 - The second Region is the exact negation of the first Region
- to within their uncertainties.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The returned values 5 and 6 do not check the value of the \htmlref{Closed}{Closed}
- attribute in the two Regions.
-
- \sstitem
- A value of zero will be returned if this function is invoked with the
- AST error status set, or if it should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_PCDMAP\sstlabel{AST_PCDMAP}
-}{
- Create a PcdMap
-}{
- \sstdescription{
- This function creates a new \htmlref{PcdMap}{PcdMap} and optionally initialises its
- attributes.
-
- A PcdMap is a non-linear \htmlref{Mapping}{Mapping} which transforms 2-dimensional
- positions to correct for the radial distortion introduced by some
- cameras and telescopes. This can take the form either of pincushion
- or barrel distortion, and is characterized by a single distortion
- coefficient.
-
- A PcdMap is specified by giving this distortion coefficient and the
- coordinates of the centre of the radial distortion. The forward
- transformation of a PcdMap applies the distortion:
-
- RD = R $*$ ( 1 $+$ C $*$ R $*$ R )
-
- where R is the undistorted radial distance from the distortion
- centre (specified by attribute PcdCen), RD is the radial distance
- from the same centre in the presence of distortion, and C is the
- distortion coefficient (given by attribute \htmlref{Disco}{Disco}).
-
- The inverse transformation of a PcdMap removes the distortion
- produced by the forward transformation. The expression used to derive
- R from RD is an approximate inverse of the expression above, obtained
- from two iterations of the Newton-Raphson method. The mismatch between
- the forward and inverse expressions is negligible for astrometric
- applications (to reach 1 milliarcsec at the edge of the Anglo-Australian
- Telescope triplet or a Schmidt field would require field diameters of
- 2.4 and 42 degrees respectively).
-
- If a PcdMap is inverted (e.g. using \htmlref{AST\_INVERT}{AST_INVERT}) then the roles of the
- forward and inverse transformations are reversed; the forward
- transformation will remove the distortion, and the inverse
- transformation will apply it.
- }
- \sstinvocation{
- RESULT = AST\_PCDMAP( DISCO, PCDCEN, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- DISCO = DOUBLE PRECISION (Given)
- }{
- The distortion coefficient. Negative values give barrel
- distortion, positive values give pincushion distortion, and
- zero gives no distortion.
- }
- \sstsubsection{
- PCDCEN( 2 ) = DOUBLE PRECISION (Given)
- }{
- An array containing the coordinates of the centre of the
- distortion.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new PcdMap. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_PCDMAP = INTEGER
- }{
- A pointer to the new PcdMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- AST\_PERMAXES\sstlabel{AST_PERMAXES}
-}{
- Permute the axis order in a Frame
-}{
- \sstdescription{
- This routine permutes the order in which a \htmlref{Frame}{Frame}'s axes occur.
- }
- \sstinvocation{
- CALL AST\_PERMAXES( THIS, PERM, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Frame.
- }
- \sstsubsection{
- PERM( $*$ ) = INTEGER (Given)
- }{
- An array with one element for each axis of the Frame (\htmlref{Naxes}{Naxes}
- attribute). This should list the axes in their new order,
- using the original axis numbering (which starts at 1 for the
- first axis).
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Only genuine permutations of the axis order are permitted, so
- each axis must be referenced exactly once in the PERM array.
-
- \sstitem
- If successive axis permutations are applied to a Frame, then
- the effects are cumulative.
- }
- }
-}
-\sstroutine{
- AST\_PERMMAP\sstlabel{AST_PERMMAP}
-}{
- Create a PermMap
-}{
- \sstdescription{
- This function creates a new \htmlref{PermMap}{PermMap} and optionally initialises its
- attributes.
-
- A PermMap is a \htmlref{Mapping}{Mapping} which permutes the order of coordinates,
- and possibly also changes the number of coordinates, between its
- input and output.
-
- In addition to permuting the coordinate order, a PermMap may
- also assign constant values to coordinates. This is useful when
- the number of coordinates is being increased as it allows fixed
- values to be assigned to any new ones.
- }
- \sstinvocation{
- RESULT = AST\_PERMMAP( NIN, INPERM, NOUT, OUTPERM, CONSTANT, OPTIONS,
- STATUS )
- }
- \sstarguments{
- \sstsubsection{
- NIN = INTEGER (Given)
- }{
- The number of input coordinates.
- }
- \sstsubsection{
- INPERM = INTEGER( NIN ) (Given)
- }{
- An array which, for each input
- coordinate, should contain the number of the output
- coordinate whose value is to be used (note that this array
- therefore defines the inverse coordinate transformation).
- Coordinates are numbered starting from 1.
-
- For details of additional special values that may be used in
- this array, see the description of the CONSTANT argument.
- }
- \sstsubsection{
- NOUT = INTEGER (Given)
- }{
- The number of output coordinates.
- }
- \sstsubsection{
- OUTPERM = INTEGER( NOUT ) (Given)
- }{
- An array which, for each output
- coordinate, should contain the number of the input coordinate
- whose value is to be used (note that this array therefore
- defines the forward coordinate transformation). Coordinates
- are numbered starting from 1.
-
- For details of additional special values that may be used in
- this array, see the description of the CONSTANT argument.
- }
- \sstsubsection{
- CONSTANT = DOUBLE PRECISION( $*$ ) (Given)
- }{
- An array containing values which may be assigned to
- input and/or output coordinates instead of deriving them
- from other coordinate values. If either of the INPERM or
- OUTPERM arrays contains a negative value, it is used to
- address this CONSTANT array (such that -1 addresses the
- first element, -2 addresses the second element, etc.) and the
- value obtained is used as the corresponding coordinate value.
-
- Care should be taken to ensure that locations lying outside
- the extent of this array are not accidentally addressed. The
- array is not used if the INPERM and OUTPERM arrays do not
- contain negative values.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new PermMap. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_PERMMAP = INTEGER
- }{
- A pointer to the new PermMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If either of the INPERM or OUTPERM arrays contains a
- zero value (or a positive value which does not identify a valid
- output/input coordinate, as appropriate), then the value
- AST\_\_BAD is assigned as the new coordinate value.
-
- \sstitem
- This function does not attempt to ensure that the forward and
- inverse transformations performed by the PermMap are
- self-consistent in any way. You are therefore free to supply
- coordinate permutation arrays that achieve whatever effect is
- desired.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_PICKAXES\sstlabel{AST_PICKAXES}
-}{
- Create a new Frame by picking axes from an existing one
-}{
- \sstdescription{
- This function creates a new \htmlref{Frame}{Frame} whose axes are copied from an
- existing Frame along with other Frame attributes, such as its
- \htmlref{Title}{Title}. Any number (zero or more) of the original Frame's axes
- may be copied, in any order, and additional axes with default
- attributes may also be included in the new Frame.
-
- A \htmlref{Mapping}{Mapping} that converts between the coordinate
- systems described by the two Frames will also be returned.
- }
- \sstinvocation{
- RESULT = AST\_PICKAXES( THIS, NAXES, AXES, MAP, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the original Frame.
- }
- \sstsubsection{
- NAXES = INTEGER (Given)
- }{
- The number of axes required in the new Frame.
- }
- \sstsubsection{
- AXES( NAXES ) = INTEGER (Given)
- }{
- An array which lists the axes to be
- copied. These should be given in the order required in the
- new Frame, using the axis numbering in the original Frame
- (which starts at 1 for the first axis). Axes may be selected
- in any order, but each may only be used once. If additional
- (default) axes are also to be included, the corresponding
- elements of this array should be set to zero.
- }
- \sstsubsection{
- MAP = INTEGER (Returned)
- }{
- A pointer to a new
- Mapping. This will be a \htmlref{PermMap}{PermMap} (or a \htmlref{UnitMap}{UnitMap} as a special
- case) that describes the axis permutation that has taken
- place between the original and new Frames. The Mapping's
- forward transformation will convert coordinates from the
- original Frame into the new one, and vice versa.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- This function applies to all Frames. The class of Frame returned
- may differ from that of the original Frame, depending on which
- axes are selected. For example, if a single axis is picked from a
- \htmlref{SkyFrame}{SkyFrame} (which must always have two axes) then the resulting
- Frame cannot be a valid SkyFrame, so will revert to the parent
- class (Frame) instead.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- Using this function on a FrameSet is identical to using it on
- the current Frame in the FrameSet. The returned Frame will not
- be a FrameSet.
- }
- \sstsubsection{
- \htmlref{Region}{Region}
- }{
- If this function is used on a Region, an attempt is made to
- retain the bounds information on the selected axes. If
- succesful, the returned Frame will be a Region of some class.
- Otherwise, the returned Frame is obtained by calling this
- function on the Frame represented by the supplied Region (the
- returned Frame will then not be a Region). In order to be
- succesful, the selected axes in the Region must be independent
- of the others. For instance, a \htmlref{Box}{Box} can be split in this way but
- a \htmlref{Circle}{Circle} cannot. Another requirement for success is that no
- default axes are added (that is, the
- AXES
- array must not contain any zero values.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_PICKAXES = INTEGER
- }{
- A pointer to the new Frame.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The new Frame will contain a {\tt{"}}deep{\tt{"}} copy (c.f. \htmlref{AST\_COPY}{AST_COPY}) of all
- the data selected from the original Frame. Modifying any aspect
- of the new Frame will therefore not affect the original one.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_PLOT\sstlabel{AST_PLOT}
-}{
- Create a Plot
-}{
- \sstdescription{
- This function creates a new \htmlref{Plot}{Plot} and optionally initialises its
- attributes.
-
- A Plot is a specialised form of \htmlref{FrameSet}{FrameSet}, in which the base
- \htmlref{Frame}{Frame} describes a {\tt{"}}graphical{\tt{"}} coordinate system and is
- associated with a rectangular plotting area in the underlying
- graphics system. This plotting area is where graphical output
- appears. It is defined when the Plot is created.
-
- The current Frame of a Plot describes a {\tt{"}}physical{\tt{"}} coordinate
- system, which is the coordinate system in which plotting
- operations are specified. The results of each plotting operation
- are automatically transformed into graphical coordinates so as
- to appear in the plotting area (subject to any clipping which
- may be in effect).
-
- Because the \htmlref{Mapping}{Mapping} between physical and graphical coordinates
- may often be non-linear, or even discontinuous, most plotting
- does not result in simple straight lines. The basic plotting
- element is therefore not a straight line, but a geodesic curve
- (see \htmlref{AST\_CURVE}{AST_CURVE}). A Plot also provides facilities for drawing
- markers or symbols (\htmlref{AST\_MARK}{AST_MARK}), text (\htmlref{AST\_TEXT}{AST_TEXT}) and grid lines
- (\htmlref{AST\_GRIDLINE}{AST_GRIDLINE}). It is also possible to draw curvilinear axes
- with optional coordinate grids (\htmlref{AST\_GRID}{AST_GRID}).
- A range of Plot attributes is available to allow precise control
- over the appearance of graphical output produced by these
- routines.
-
- You may select different physical coordinate systems in which to
- plot (including the native graphical coordinate system itself)
- by selecting different Frames as the current Frame of a Plot,
- using its \htmlref{Current}{Current} attribute. You may also set up clipping (see
- \htmlref{AST\_CLIP}{AST_CLIP}) to limit the extent of any plotting you perform, and
- this may be done in any of the coordinate systems associated
- with the Plot, not necessarily the one you are plotting in.
-
- Like any FrameSet, a Plot may also be used as a Frame. In this
- case, it behaves like its current Frame, which describes the
- physical coordinate system.
-
- When used as a Mapping, a Plot describes the inter-relation
- between graphical coordinates (its base Frame) and physical
- coordinates (its current Frame). It differs from a normal
- FrameSet, however, in that an attempt to transform points which
- lie in clipped areas of the Plot will result in bad coordinate
- values (AST\_\_BAD).
- }
- \sstinvocation{
- RESULT = AST\_PLOT( FRAME, GRAPHBOX, BASEBOX, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- FRAME = INTEGER (Given)
- }{
- Pointer to a Frame describing the physical coordinate system
- in which to plot. A pointer to a FrameSet may also be given,
- in which case its current Frame will be used to define the
- physical coordinate system and its base Frame will be mapped
- on to graphical coordinates (see below).
-
- If a null \htmlref{Object}{Object} pointer (AST\_\_NULL) is given, a default
- 2-dimensional Frame will be used to describe the physical
- coordinate system. Labels, etc. may then be attached to this
- by setting the appropriate Frame attributes
- (e.g. \htmlref{Label(axis)}{Labelaxis}) for the Plot.
- }
- \sstsubsection{
- GRAPHBOX( 4 ) = REAL (Given)
- }{
- An array giving the position and extent of the plotting area
- (on the plotting surface of the underlying graphics system)
- in which graphical output is to appear. This must be
- specified using graphical coordinates appropriate to the
- underlying graphics system.
-
- The first pair of values should give the coordinates of the
- bottom left corner of the plotting area and the second pair
- should give the coordinates of the top right corner. The
- coordinate on the horizontal axis should be given first in
- each pair. Note that the order in which these points are
- given is important because it defines up, down, left and
- right for subsequent graphical operations.
- }
- \sstsubsection{
- BASEBOX( 4 ) = DOUBLE PRECISION (Given)
- }{
- An array giving the coordinates of two points in the supplied
- Frame (or in the base Frame if a FrameSet was supplied) which
- correspond to the bottom left and top right corners of the
- plotting area, as specified above. This range of coordinates
- will be mapped linearly on to the plotting area. The
- coordinates should be given in the same order as above.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new Plot. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine. If no initialisation is required, a blank
- value may be supplied.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_PLOT
- }{
- A pointer to the new Plot.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The base Frame of the returned Plot will be a new Frame which
- is created by this function to represent the coordinate system
- of the underlying graphics system (graphical coordinates). It is
- given a Frame index of 1 within the Plot. The choice of base
- Frame (\htmlref{Base}{Base} attribute) should not, in general, be changed once a
- Plot has been created (although you could use this as a way of
- moving the plotting area around on the plotting surface).
-
- \sstitem
- If a Frame is supplied (via the FRAME pointer), then it
- becomes the current Frame of the new Plot and is given a Frame
- index of 2.
-
- \sstitem
- If a FrameSet is supplied (via the FRAME pointer), then
- all the Frames within this FrameSet become part of the new Plot
- (where their Frame indices are increased by 1), with the
- FrameSet's current Frame becoming the current Frame of the Plot.
-
- \sstitem
- If a null Object pointer (AST\_\_NULL) is supplied (via the
- FRAME pointer), then the returned Plot will contain two
- Frames, both created by this function. The base Frame will
- describe graphics coordinates (as above) and the current Frame
- will be a basic Frame with no attributes set (this will
- therefore give default values for such things as the Plot \htmlref{Title}{Title}
- and the Label on each axis). Physical coordinates will be mapped
- linearly on to graphical coordinates.
-
- \sstitem
- An error will result if the Frame supplied (or the base Frame
- if a FrameSet was supplied) is not 2-dimensional.
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_PLOT3D\sstlabel{AST_PLOT3D}
-}{
- Create a Plot3D
-}{
- \sstdescription{
- This function creates a new \htmlref{Plot3D}{Plot3D} and optionally initialises
- its attributes.
-
- A Plot3D is a specialised form of \htmlref{Plot}{Plot} that provides facilities
- for producing 3D graphical output.
- }
- \sstinvocation{
- RESULT = AST\_PLOT3D( FRAME, GRAPHBOX, BASEBOX, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- FRAME = INTEGER (Given)
- }{
- Pointer to a \htmlref{Frame}{Frame} describing the physical coordinate system
- in which to plot. A pointer to a \htmlref{FrameSet}{FrameSet} may also be given,
- in which case its current Frame will be used to define the
- physical coordinate system and its base Frame will be mapped
- on to graphical coordinates (see below).
-
- If a null \htmlref{Object}{Object} pointer (AST\_\_NULL) is given, a default
- 3-dimensional Frame will be used to describe the physical
- coordinate system. Labels, etc. may then be attached to this
- by setting the appropriate Frame attributes
- (e.g. \htmlref{Label(axis)}{Labelaxis}) for the Plot.
- }
- \sstsubsection{
- GRAPHBOX( 6 ) = REAL (Given)
- }{
- An array giving the position and extent of the plotting volume
- (within the plotting space of the underlying graphics system)
- in which graphical output is to appear. This must be
- specified using graphical coordinates appropriate to the
- underlying graphics system.
-
- The first triple of values should give the coordinates of the
- bottom left corner of the plotting volume and the second triple
- should give the coordinates of the top right corner. The
- coordinate on the horizontal axis should be given first in
- each pair. Note that the order in which these points are
- given is important because it defines up, down, left and
- right for subsequent graphical operations.
- }
- \sstsubsection{
- BASEBOX( 6 ) = DOUBLE PRECISION (Given)
- }{
- An array giving the coordinates of two points in the supplied
- Frame (or in the base Frame if a FrameSet was supplied) which
- correspond to the bottom left and top right corners of the
- plotting volume, as specified above. This range of coordinates
- will be mapped linearly on to the plotting area. The
- coordinates should be given in the same order as above.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new Plot3D. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine. If no initialisation is required, a blank
- value may be supplied.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_PLOT3D = INTEGER
- }{
- A pointer to the new Plot3D.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The base Frame of the returned Plot3D will be a new Frame which
- is created by this function to represent the coordinate system
- of the underlying graphics system (graphical coordinates). It is
- given a Frame index of 1 within the Plot3D. The choice of base
- Frame (\htmlref{Base}{Base} attribute) should not, in general, be changed once a
- Plot3D has been created (although you could use this as a way of
- moving the plotting area around on the plotting surface).
-
- \sstitem
- If a Frame is supplied (via the FRAME pointer), then it
- becomes the current Frame of the new Plot3D and is given a Frame
- index of 2.
-
- \sstitem
- If a FrameSet is supplied (via the FRAME pointer), then
- all the Frames within this FrameSet become part of the new Plot3D
- (where their Frame indices are increased by 1), with the
- FrameSet's current Frame becoming the current Frame of the Plot3D.
-
- \sstitem
- If a null Object pointer (AST\_\_NULL) is supplied (via the
- FRAME pointer), then the returned Plot3D will contain two
- Frames, both created by this function. The base Frame will
- describe graphics coordinates (as above) and the current Frame
- will be a basic Frame with no attributes set (this will
- therefore give default values for such things as the Plot3D \htmlref{Title}{Title}
- and the Label on each axis). Physical coordinates will be mapped
- linearly on to graphical coordinates.
-
- \sstitem
- An error will result if the Frame supplied (or the base Frame
- if a FrameSet was supplied) is not 3-dimensional.
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_POINTLIST\sstlabel{AST_POINTLIST}
-}{
- Create a PointList
-}{
- \sstdescription{
- This function creates a new \htmlref{PointList}{PointList} object and optionally initialises
- its attributes.
-
- A PointList object is a specialised type of \htmlref{Region}{Region} which represents a
- collection of points in a coordinate \htmlref{Frame}{Frame}.
- }
- \sstinvocation{
- RESULT = AST\_POINTLIST( FRAME, NPNT, COORD, DIM, POINTS, UNC, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- FRAME = INTEGER (Given)
- }{
- A pointer to the Frame in which the region is defined. A deep
- copy is taken of the supplied Frame. This means that any
- subsequent changes made to the Frame using the supplied pointer
- will have no effect the Region.
- }
- \sstsubsection{
- NPNT = INTEGER (Given)
- }{
- The number of points in the Region.
- }
- \sstsubsection{
- NCOORD = INTEGER (Given)
- }{
- The number of coordinates being supplied for each point. This
- must equal the number of axes in the supplied Frame, given by
- its \htmlref{Naxes}{Naxes} attribute.
- }
- \sstsubsection{
- DIM = INTEGER (Given)
- }{
- The number of elements along the first dimension of the POINTS
- array (which contains the point coordinates). This value is
- required so that the coordinate values can be correctly
- located if they do not entirely fill this array. The value
- given should not be less than NPNT.
- }
- \sstsubsection{
- POINTS( DIM, NCOORD ) = DOUBLE PRECISION (Given)
- }{
- A 2-dimensional array giving the physical coordinates of the
- points. These should be stored such that the value of coordinate
- number COORD for point number PNT is found in element IN(PNT,COORD).
- }
- \sstsubsection{
- UNC = INTEGER (Given)
- }{
- An optional pointer to an existing Region which specifies the uncertainties
- associated with each point in the PointList being created. The
- uncertainty at any point in the PointList is found by shifting the
- supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at the point
- being considered. The area covered by the shifted uncertainty Region
- then represents the uncertainty in the position. The uncertainty is
- assumed to be the same for all points.
-
- If supplied, the uncertainty Region must be of a class for which
- all instances are centro-symetric (e.g. \htmlref{Box}{Box}, \htmlref{Circle}{Circle}, \htmlref{Ellipse}{Ellipse}, etc.)
- or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
- copy of the supplied Region will be taken, so subsequent changes to
- the uncertainty Region using the supplied pointer will have no
- effect on the created Box. Alternatively,
- a null \htmlref{Object}{Object} pointer (AST\_\_NULL)
- may be supplied, in which case a default uncertainty is used
- equivalent to a box 1.0E-6 of the size of the bounding box of the
- PointList being created.
-
- The uncertainty Region has two uses: 1) when the
- \htmlref{AST\_OVERLAP}{AST_OVERLAP}
- function compares two Regions for equality the uncertainty
- Region is used to determine the tolerance on the comparison, and 2)
- when a Region is mapped into a different coordinate system and
- subsequently simplified (using
- \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}),
- the uncertainties are used to determine if the transformed boundary
- can be accurately represented by a specific shape of Region.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new PointList. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_POINTLIST = INTEGER
- }{
- A pointer to the new PointList.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- AST\_POLYCURVE\sstlabel{AST_POLYCURVE}
-}{
- Draw a series of connected geodesic curves
-}{
- \sstdescription{
- This routine joins a series of points specified in the physical
- coordinate system of a \htmlref{Plot}{Plot} by drawing a sequence of geodesic
- curves. It is equivalent to making repeated calls to the
- \htmlref{AST\_CURVE}{AST_CURVE} routine (q.v.), except that AST\_POLYCURVE will
- generally be more efficient when drawing many geodesic curves
- end-to-end. A typical application of this might be in drawing
- contour lines.
-
- As with AST\_CURVE, full account is taken of the \htmlref{Mapping}{Mapping} between
- physical and graphical coordinate systems. This includes any
- discontinuities and clipping established using \htmlref{AST\_CLIP}{AST_CLIP}.
- }
- \sstinvocation{
- CALL AST\_POLYCURVE( THIS, NPOINT, NCOORD, INDIM, IN, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Plot.
- }
- \sstsubsection{
- NPOINT = INTEGER (Given)
- }{
- The number of points between which geodesic curves are to be drawn.
- }
- \sstsubsection{
- NCOORD = INTEGER (Given)
- }{
- The number of coordinates being supplied for each point (i.e.
- the number of axes in the current \htmlref{Frame}{Frame} of the Plot, as given
- by its \htmlref{Naxes}{Naxes} attribute).
- }
- \sstsubsection{
- INDIM = INTEGER (Given)
- }{
- The number of elements along the first dimension of the IN
- array (which contains the input coordinates). This value is
- required so that the coordinate values can be correctly
- located if they do not entirely fill this array. The value
- given should not be less than NPOINT.
- }
- \sstsubsection{
- IN( INDIM, NCOORD ) = DOUBLE PRECISION (Given)
- }{
- A 2-dimensional array giving the physical coordinates of the
- points which are to be joined in sequence by geodesic
- curves. These should be stored such that the value of
- coordinate number COORD for input point number POINT is found
- in element IN(POINT,COORD).
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- No curve is drawn on either side of any point which has any
- coordinate equal to the value AST\_\_BAD.
-
- \sstitem
- An error results if the base Frame of the Plot is not
- 2-dimensional.
-
- \sstitem
- An error also results if the transformation between the
- current and base Frames of the Plot is not defined (i.e. the
- Plot's \htmlref{TranInverse}{TranInverse} attribute is zero).
- }
- }
-}
-\sstroutine{
- AST\_POLYGON\sstlabel{AST_POLYGON}
-}{
- Create a Polygon
-}{
- \sstdescription{
- This function creates a new \htmlref{Polygon}{Polygon} object and optionally initialises
- its attributes.
-
- The Polygon class implements a polygonal area, defined by a
- collection of vertices, within a 2-dimensional \htmlref{Frame}{Frame}. The vertices
- are connected together by geodesic curves within the encapsulated Frame.
- For instance, if the encapsulated Frame is a simple Frame then the
- geodesics will be straight lines, but if the Frame is a \htmlref{SkyFrame}{SkyFrame} then
- the geodesics will be great circles. Note, the vertices must be
- supplied in an order such that the inside of the polygon is to the
- left of the boundary as the vertices are traversed. Supplying them
- in the reverse order will effectively negate the polygon.
-
- Within a SkyFrame, neighbouring vertices are always joined using the
- shortest path. Thus if an edge of 180 degrees or more in length is
- required, it should be split into section each of which is less
- than 180 degrees. The closed path joining all the vertices in order
- will divide the celestial sphere into two disjoint regions. The
- inside of the polygon is the region which is circled in an
- anti-clockwise manner (when viewed from the inside of the celestial
- sphere) when moving through the list of vertices in the order in
- which they were supplied when the Polygon was created (i.e. the
- inside is to the left of the boundary when moving through the
- vertices in the order supplied).
- }
- \sstinvocation{
- RESULT = AST\_POLYGON( FRAME, NPNT, DIM, POINTS, UNC, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- FRAME = INTEGER (Given)
- }{
- A pointer to the Frame in which the region is defined. It must
- have exactly 2 axes. A deep copy is taken of the supplied Frame.
- This means that any subsequent changes made to the Frame using the
- supplied pointer will have no effect the \htmlref{Region}{Region}.
- }
- \sstsubsection{
- NPNT = INTEGER (Given)
- }{
- The number of points in the Region.
- }
- \sstsubsection{
- DIM = INTEGER (Given)
- }{
- The number of elements along the first dimension of the POINTS
- array (which contains the point coordinates). This value is
- required so that the coordinate values can be correctly
- located if they do not entirely fill this array. The value
- given should not be less than NPNT.
- }
- \sstsubsection{
- POINTS( DIM, 2 ) = DOUBLE PRECISION (Given)
- }{
- A 2-dimensional array giving the physical coordinates of the
- vertices. These should be stored such that the value of coordinate
- number COORD for point number PNT is found in element IN(PNT,COORD).
- }
- \sstsubsection{
- UNC = INTEGER (Given)
- }{
- An optional pointer to an existing Region which specifies the
- uncertainties associated with the boundary of the \htmlref{Box}{Box} being created.
- The uncertainty in any point on the boundary of the Box is found by
- shifting the supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at
- the boundary point being considered. The area covered by the
- shifted uncertainty Region then represents the uncertainty in the
- boundary position. The uncertainty is assumed to be the same for
- all points.
-
- If supplied, the uncertainty Region must be of a class for which
- all instances are centro-symetric (e.g. Box, \htmlref{Circle}{Circle}, \htmlref{Ellipse}{Ellipse}, etc.)
- or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
- copy of the supplied Region will be taken, so subsequent changes to
- the uncertainty Region using the supplied pointer will have no
- effect on the created Box. Alternatively,
- a null \htmlref{Object}{Object} pointer (AST\_\_NULL)
- may be supplied, in which case a default uncertainty is used
- equivalent to a box 1.0E-6 of the size of the Box being created.
-
- The uncertainty Region has two uses: 1) when the
- \htmlref{AST\_OVERLAP}{AST_OVERLAP}
- function compares two Regions for equality the uncertainty
- Region is used to determine the tolerance on the comparison, and 2)
- when a Region is mapped into a different coordinate system and
- subsequently simplified (using
- \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}),
- the uncertainties are used to determine if the transformed boundary
- can be accurately represented by a specific shape of Region.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new Polygon. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_POLYGON = INTEGER
- }{
- A pointer to the new Polygon.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- AST\_POLYMAP\sstlabel{AST_POLYMAP}
-}{
- Create a PolyMap
-}{
- \sstdescription{
- This function creates a new \htmlref{PolyMap}{PolyMap} and optionally initialises
- its attributes.
-
- A PolyMap is a form of \htmlref{Mapping}{Mapping} which performs a general polynomial
- transformation. Each output coordinate is a polynomial function of
- all the input coordinates. The coefficients are specified separately
- for each output coordinate. The forward and inverse transformations
- are defined independantly by separate sets of coefficients.
- }
- \sstinvocation{
- RESULT = AST\_POLYMAP( NIN, NOUT, NCOEFF\_F, COEFF\_F, NCOEFF\_I, COEFF\_I,
- OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- NIN = INTEGER (Given)
- }{
- The number of input coordinates.
- }
- \sstsubsection{
- NOUT = INTEGER (Given)
- }{
- The number of output coordinates.
- }
- \sstsubsection{
- NCOEFF\_F = INTEGER (Given)
- }{
- The number of non-zero coefficients necessary to define the
- forward transformation of the PolyMap. If zero is supplied, the
- forward transformation will be undefined.
- }
- \sstsubsection{
- COEFF\_F( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array containing
- {\tt{"}}NCOEFF\_F$*$( 2 $+$ NIN ){\tt{"}} elements. Each group of {\tt{"}}2 $+$ NIN{\tt{"}}
- adjacent elements describe a single coefficient of the forward
- transformation. Within each such group, the first element is the
- coefficient value; the next element is the integer index of the
- PolyMap output which uses the coefficient within its defining
- polynomial (the first output has index 1); the remaining elements
- of the group give the integer powers to use with each input
- coordinate value (powers must not be negative, and floating
- point values are rounded to the nearest integer).
-
- For instance, if the PolyMap has 3 inputs and 2 outputs, each group
- consisting of 5 elements, A groups such as {\tt{"}}(1.2, 2.0, 1.0, 3.0, 0.0){\tt{"}}
- describes a coefficient with value 1.2 which is used within the
- definition of output 2. The output value is incremented by the
- product of the coefficient value, the value of input coordinate
- 1 raised to the power 1, and the value of input coordinate 2 raised
- to the power 3. Input coordinate 3 is not used since its power is
- specified as zero. As another example, the group {\tt{"}}(-1.0, 1.0,
- 0.0, 0.0, 0.0 ){\tt{"}} describes adds a constant value -1.0 onto
- output 1 (it is a constant value since the power for every input
- axis is given as zero).
-
- Each final output coordinate value is the sum of the {\tt{"}}NCOEFF\_F{\tt{"}} terms
- described by the {\tt{"}}NCOEFF\_F{\tt{"}} groups within the supplied array.
- }
- \sstsubsection{
- NCOEFF\_I = INTEGER (Given)
- }{
- The number of non-zero coefficients necessary to define the
- inverse transformation of the PolyMap. If zero is supplied, the
- inverse transformation will be undefined.
- }
- \sstsubsection{
- COEFF\_I( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array containing
- {\tt{"}}NCOEFF\_I$*$( 2 $+$ NOUT ){\tt{"}} elements. Each group of {\tt{"}}2 $+$ NOUT{\tt{"}}
- adjacent elements describe a single coefficient of the inverse
- transformation, using the same schame as {\tt{"}}COEFF\_F{\tt{"}},
- except that {\tt{"}}inputs{\tt{"}} and {\tt{"}}outputs{\tt{"}} are transposed.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new PolyMap. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_POLYMAP = INTEGER
- }{
- A pointer to the new PolyMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_PRISM\sstlabel{AST_PRISM}
-}{
- Create a Prism
-}{
- \sstdescription{
- This function creates a new \htmlref{Prism}{Prism} and optionally initialises
- its attributes.
-
- A Prism is a \htmlref{Region}{Region} which represents an extrusion of an existing Region
- into one or more orthogonal dimensions (specified by another Region).
- If the Region to be extruded has N axes, and the Region defining the
- extrusion has M axes, then the resulting Prism will have (M$+$N) axes.
- A point is inside the Prism if the first N axis values correspond to
- a point inside the Region being extruded, and the remaining M axis
- values correspond to a point inside the Region defining the extrusion.
-
- As an example, a cylinder can be represented by extruding an existing
- \htmlref{Circle}{Circle}, using an \htmlref{Interval}{Interval} to define the extrusion. Ih this case, the
- Interval would have a single axis and would specify the upper and
- lower limits of the cylinder along its length.
- }
- \sstinvocation{
- RESULT = AST\_PRISM( REGION1, REGION2, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- REGION1 = INTEGER (Given)
- }{
- Pointer to the Region to be extruded.
- }
- \sstsubsection{
- REGION2 = INTEGER (Given)
- }{
- Pointer to the Region defining the extent of the extrusion.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new Prism. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_PRISM = INTEGER
- }{
- A pointer to the new Prism.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Deep copies are taken of the supplied Regions. This means that
- any subsequent changes made to the component Regions using the
- supplied pointers will have no effect on the Prism.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_PURGEWCS\sstlabel{AST_PURGEWCS}
-}{
- Delete all cards in the FitsChan describing WCS information
-}{
- \sstdescription{
- This routine
- deletes all cards in a \htmlref{FitsChan}{FitsChan} that relate to any of the recognised
- WCS encodings. On exit, the current card is the first remaining card
- in the FitsChan.
- }
- \sstinvocation{
- CALL AST\_PURGEWCS( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the FitsChan.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
-}
-\sstroutine{
- AST\_PUTCARDS\sstlabel{AST_PUTCARDS}
-}{
- Store a set of FITS header cards in a FitsChan
-}{
- \sstdescription{
- This routine
- stores a set of FITS header cards in a \htmlref{FitsChan}{FitsChan}. The cards are
- supplied concatenated together into a single character string.
- Any existing cards in the FitsChan are removed before the new cards
- are added. The FitsChan is {\tt{"}}re-wound{\tt{"}} on exit by clearing its \htmlref{Card}{Card}
- attribute. This means that a subsequent invocation of
- \htmlref{AST\_READ}{AST_READ}
- can be made immediately without the need to re-wind the FitsChan
- first.
- }
- \sstinvocation{
- CALL AST\_PUTCARDS( THIS, CARDS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the FitsChan.
- }
- \sstsubsection{
- CARDS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string
- containing the FITS cards to be stored. Each individual card
- should occupy 80 characters in this string, and there should be
- no delimiters, new lines, etc, between adjacent cards. The final
- card may be less than 80 characters long.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- An error will result if the supplied string contains any cards
- which cannot be interpreted.
- }
- }
-}
-\sstroutine{
- AST\_PUTFITS\sstlabel{AST_PUTFITS}
-}{
- Store a FITS header card in a FitsChan
-}{
- \sstdescription{
- This routine stores a FITS header card in a \htmlref{FitsChan}{FitsChan}. The card
- is either inserted before the current card (identified by the
- \htmlref{Card}{Card} attribute), or over-writes the current card, as required.
- }
- \sstinvocation{
- CALL AST\_PUTFITS( THIS, CARD, OVERWRITE, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the FitsChan.
- }
- \sstsubsection{
- CARD = CHARACTER $*$ ( 80 ) (Given)
- }{
- A character string string containing the FITS card to be
- stored. No more than 80 characters will be used from this
- string.
- }
- \sstsubsection{
- OVERWRITE = LOGICAL (Given)
- }{
- If this value is .FALSE., the new card is inserted in front of
- the current card in the FitsChan (as identified by the
- initial value of the Card attribute). If it is .TRUE., the
- new card replaces the current card. In either case, the Card
- attribute is then incremented by one so that it subsequently
- identifies the card following the one stored.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the Card attribute initially points at the {\tt{"}}end-of-file{\tt{"}}
- (i.e. exceeds the number of cards in the FitsChan), then the new
- card is appended as the last card in the FitsChan.
-
- \sstitem
- An error will result if the supplied string cannot be interpreted
- as a FITS header card.
- }
- }
-}
-\sstroutine{
- AST\_PUTLINE\sstlabel{AST_PUTLINE}
-}{
- Store a text line read by a Channel source routine
-}{
- \sstdescription{
- This routine should only be used when implementing a routine
- which will be passed as the SOURCE argument to \htmlref{AST\_CHANNEL}{AST_CHANNEL}. It
- should be used to pass back (to the AST library) each line of
- text read from the external data source. One such line should be
- passed back in this way for each invocation of the source
- routine.
- }
- \sstinvocation{
- CALL AST\_PUTLINE( LINE, L, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- LINE = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing the line of input text which
- has been read.
- }
- \sstsubsection{
- L = INTEGER (Given)
- }{
- The number of characters in the input line, which may be
- zero. If there is no more input available (e.g. an end of
- file has been reached), this value should be set negative and
- this will terminate the read operation on the \htmlref{Channel}{Channel}.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This routine is only available in the Fortran interface to the
- AST library.
- }
- }
-}
-\sstroutine{
- AST\_RATE\sstlabel{AST_RATE}
-}{
- Calculate the rate of change of a Mapping output
-}{
- \sstdescription{
- This routine
- evaluates the rate of change of a specified output of the supplied
- \htmlref{Mapping}{Mapping} with respect to a specified input, at a specified input
- position.
-
- The result is estimated by interpolating the function using a
- fourth order polynomial in the neighbourhood of the specified
- position. The size of the neighbourhood used is chosen to minimise
- the RMS residual per unit length between the interpolating
- polynomial and the supplied Mapping function. This method produces
- good accuracy but can involve evaluating the Mapping 100 or more
- times.
- }
- \sstinvocation{
- RESULT = AST\_RATE( THIS, AT, AX1, AX2, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Mapping to be applied.
- }
- \sstsubsection{
- AT( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An
- array holding the axis values at the position at which the rate
- of change is to be evaluated. The number of elements in this
- array should equal the number of inputs to the Mapping.
- }
- \sstsubsection{
- AX1 = INTEGER (Given)
- }{
- The index of the Mapping output for which the rate of change is to
- be found (output numbering starts at 1 for the first output).
- }
- \sstsubsection{
- AX2 = INTEGER (Given)
- }{
- The index of the Mapping input which is to be varied in order to
- find the rate of change (input numbering starts at 1 for the first
- input).
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_RATE = DOUBLE PRECISION
- }{
- The rate of change of Mapping output AX1 with respect to input
- AX2, evaluated at AT, or AST\_\_BAD if the value cannot be
- calculated.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A value of AST\_\_BAD will be returned if this function is invoked
- with the global error status set, or if it should fail for any
- reason.
- }
- }
-}
-\sstroutine{
- AST\_RATEMAP\sstlabel{AST_RATEMAP}
-}{
- Create a RateMap
-}{
- \sstdescription{
- This function creates a new \htmlref{RateMap}{RateMap} and optionally initialises
- its attributes.
-
- A RateMap is a \htmlref{Mapping}{Mapping} which represents a single element of the
- Jacobian matrix of another Mapping. The Mapping for which the
- Jacobian is required is specified when the new RateMap is created,
- and is referred to as the {\tt{"}}encapsulated Mapping{\tt{"}} below.
-
- The number of inputs to a RateMap is the same as the number of inputs
- to its encapsulated Mapping. The number of outputs from a RateMap
- is always one. This one output equals the rate of change of a
- specified output of the encapsulated Mapping with respect to a
- specified input of the encapsulated Mapping (the input and output
- to use are specified when the RateMap is created).
-
- A RateMap which has not been inverted does not define an inverse
- transformation. If a RateMap has been inverted then it will define
- an inverse transformation but not a forward transformation.
- }
- \sstinvocation{
- RESULT = AST\_RATEMAP( MAP, AX1, AX2, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- MAP = INTEGER (Given)
- }{
- Pointer to the encapsulated Mapping.
- }
- \sstsubsection{
- AX1 = INTEGER (Given)
- }{
- Index of the output from the encapsulated Mapping for which the
- rate of change is required. This corresponds to the delta
- quantity forming the numerator of the required element of the
- Jacobian matrix. The first axis has index 1.
- }
- \sstsubsection{
- AX2 = INTEGER (Given)
- }{
- Index of the input to the encapsulated Mapping which is to be
- varied. This corresponds to the delta quantity forming the
- denominator of the required element of the Jacobian matrix.
- The first axis has index 1.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new RateMap. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_RATEMAP = INTEGER
- }{
- A pointer to the new RateMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The forward transformation of the encapsulated Mapping must be
- defined.
-
- \sstitem
- Note that the component Mappings supplied are not copied by
- AST\_RATEMAP (the new RateMap simply retains a reference to
- them). They may continue to be used for other purposes, but
- should not be deleted. If a RateMap containing a copy of its
- component Mappings is required, then a copy of the RateMap should
- be made using \htmlref{AST\_COPY}{AST_COPY}.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_READ\sstlabel{AST_READ}
-}{
- Read an Object from a Channel
-}{
- \sstdescription{
- This function reads the next \htmlref{Object}{Object} from a \htmlref{Channel}{Channel} and returns a
- pointer to the new Object.
- }
- \sstinvocation{
- RESULT = AST\_READ( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Channel.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{FitsChan}{FitsChan}
- }{
- All successful use of AST\_READ on a FitsChan is destructive, so that
- FITS header cards are consumed in the process of reading an Object,
- and are removed from the FitsChan (this deletion can be prevented
- for specific cards by calling the FitsChan
- \htmlref{AST\_RETAINFITS}{AST_RETAINFITS} routine).
- An unsuccessful call of
- AST\_READ
- (for instance, caused by the FitsChan not containing the necessary
- FITS headers cards needed to create an Object) results in the
- contents of the FitsChan being left unchanged.
- }
- \sstsubsection{
- \htmlref{StcsChan}{StcsChan}
- }{
- The AST Object returned by a successful use of
- AST\_READ
- on an StcsChan, will be either a \htmlref{Region}{Region} or a \htmlref{KeyMap}{KeyMap}, depending
- on the values of the \htmlref{StcsArea}{StcsArea}, \htmlref{StcsCoords}{StcsCoords} and \htmlref{StcsProps}{StcsProps}
- attributes. See the documentation for these attributes for further
- information.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_READ = INTEGER
- }{
- A pointer to the new Object. The class to which this will
- belong is determined by the input data, so is not known in
- advance.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned, without
- error, if the Channel contains no further Objects to be read.
-
- \sstitem
- A null Object pointer will also be returned if this function
- is invoked with STATUS set to an error value, or if it should fail
- for any reason.
- }
- }
-}
-\sstroutine{
- AST\_REBIN$<$X$>$\sstlabel{AST_REBINX}
-}{
- Rebin a region of a data grid
-}{
- \sstdescription{
- This is a set of functions for rebinning gridded data (e.g. an
- image) under the control of a geometrical transformation, which
- is specified by a \htmlref{Mapping}{Mapping}. The functions operate on a pair of
- data grids (input and output), each of which may have any number
- of dimensions. Rebinning may be restricted to a specified
- region of the input grid. An associated grid of error estimates
- associated with the input data may also be supplied (in the form
- of variance values), so as to produce error estimates for the
- rebined output data. Propagation of missing data (bad pixels)
- is supported.
-
- Note, if you will be rebining a sequence of input arrays and then
- co-adding them into a single array, the alternative
- \htmlref{AST\_REBINSEQ$<$X$>$}{AST_REBINSEQX} routines
- will in general be more efficient.
-
- You should use a rebinning function which matches the numerical
- type of the data you are processing by replacing $<$X$>$ in
- the generic function name AST\_REBIN$<$X$>$ by an appropriate 1- or
- 2-character type code. For example, if you are rebinning data
- with type REAL, you should use the function AST\_REBINR (see
- the {\tt{"}}Data Type Codes{\tt{"}} section below for the codes appropriate to
- other numerical types).
-
- Rebinning of the grid of input data is performed by transforming
- the coordinates of the centre of each input grid element (or pixel)
- into the coordinate system of the output grid. The input pixel
- value is then divided up and assigned to the output pixels in the
- neighbourhood of the central output coordinates. A choice of
- schemes are provided for determining how each input pixel value is
- divided up between the output pixels. In general, each output pixel
- may be assigned values from more than one input pixel. All
- contributions to a given output pixel are summed to produce the
- final output pixel value. Output pixels can be set to the supplied
- bad value if they receive contributions from an insufficient number
- of input pixels. This is controlled by the
- WLIM argument.
-
- Input pixel coordinates are transformed into the coordinate
- system of the output grid using the forward transformation of the
- Mapping which is supplied. This means that geometrical features
- in the input data are subjected to the Mapping's forward
- transformation as they are transferred from the input to the
- output grid.
-
- In practice, transforming the coordinates of every pixel of a
- large data grid can be time-consuming, especially if the Mapping
- involves complicated functions, such as sky projections. To
- improve performance, it is therefore possible to approximate
- non-linear Mappings by a set of linear transformations which are
- applied piece-wise to separate sub-regions of the data. This
- approximation process is applied automatically by an adaptive
- algorithm, under control of an accuracy criterion which
- expresses the maximum tolerable geometrical distortion which may
- be introduced, as a fraction of a pixel.
-
- This algorithm first attempts to approximate the Mapping with a
- linear transformation applied over the whole region of the
- input grid which is being used. If this proves to be
- insufficiently accurate, the input region is sub-divided into
- two along its largest dimension and the process is repeated
- within each of the resulting sub-regions. This process of
- sub-division continues until a sufficiently good linear
- approximation is found, or the region to which it is being
- applied becomes too small (in which case the original Mapping is
- used directly).
- }
- \sstinvocation{
- CALL AST\_REBIN$<$X$>$( THIS, WLIM, NDIM\_IN, LBND\_IN, UBND\_IN, IN, IN\_VAR,
- SPREAD, PARAMS, FLAGS,
- TOL, MAXPIX, BADVAL,
- NDIM\_OUT, LBND\_OUT, UBND\_OUT,
- LBND, UBND, OUT, OUT\_VAR, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to a Mapping, whose forward transformation will be
- used to transform the coordinates of pixels in the input
- grid into the coordinate system of the output grid.
-
- The number of input coordinates used by this Mapping (as
- given by its \htmlref{Nin}{Nin} attribute) should match the number of input
- grid dimensions given by the value of NDIM\_IN
- below. Similarly, the number of output coordinates (\htmlref{Nout}{Nout}
- attribute) should match the number of output grid dimensions
- given by NDIM\_OUT.
- }
- \sstsubsection{
- WLIM = DOUBLE PRECISION (Given)
- }{
- Gives the required number of input pixel values which must contribute
- to an output pixel in order for the output pixel value to be
- considered valid. If the sum of the input pixel weights contributing
- to an output pixel is less than the supplied
- WLIM
- value, then the output pixel value is returned set to the
- supplied bad value.
- }
- \sstsubsection{
- NDIM\_IN = INTEGER (Given)
- }{
- The number of dimensions in the input grid. This should be at
- least one.
- }
- \sstsubsection{
- LBND\_IN( NDIM\_IN ) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the centre of the first pixel
- in the input grid along each dimension.
- }
- \sstsubsection{
- UBND\_IN( NDIM\_IN ) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the centre of the last pixel in
- the input grid along each dimension.
-
- Note that LBND\_IN and UBND\_IN together define the shape
- and size of the input grid, its extent along a particular
- (J'th) dimension being UBND\_IN(J)-LBND\_IN(J)$+$1. They also define
- the input grid's coordinate system, each pixel having unit
- extent along each dimension with integral coordinate values
- at its centre.
- }
- \sstsubsection{
- IN( $*$ ) = $<$Xtype$>$ (Given)
- }{
- An array, with one element for each pixel in the
- input grid, containing the input data to be rebined. The
- numerical type of this array should match the 1- or
- 2-character type code appended to the function name (e.g. if
- you are using AST\_REBINR, the type of each array element
- should be REAL).
-
- The storage order of data within this array should be such
- that the index of the first grid dimension varies most
- rapidly and that of the final dimension least rapidly
- (i.e. normal Fortran array storage order).
- }
- \sstsubsection{
- IN\_VAR( $*$ ) = $<$Xtype$>$ (Given)
- }{
- An optional second array with the same size and type as the
- IN array. If the AST\_\_USEVAR flag is set via the FLAGS
- argument (below), this array should contain a set of
- non-negative values which represent estimates of the
- statistical variance associated with each element of the IN
- array. Estimates of the variance of the rebined output data
- will then be calculated.
-
- If the AST\_\_USEVAR flag is not set, no input variance
- estimates are required and this array will not be used. A
- dummy (e.g. one-element) array may then be supplied.
- }
- \sstsubsection{
- SPREAD = INTEGER (Given)
- }{
- This argument specifies the scheme to be used for dividing
- each input data value up amongst the corresponding output pixels.
- It may be used to select
- from a set of pre-defined schemes by supplying one of the
- values described in the {\tt{"}}Pixel Spreading Schemes{\tt{"}}
- section below. If a value of zero is supplied, then the
- default linear spreading scheme is used (equivalent to
- supplying the value AST\_\_LINEAR).
- }
- \sstsubsection{
- PARAMS( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An optional array which should contain
- any additional parameter values required by the pixel
- spreading scheme. If such parameters are required, this
- will be noted in the {\tt{"}}Pixel Spreading Schemes{\tt{"}}
- section below.
-
- If no additional parameters are required, this array is not
- used. A dummy (e.g. one-element) array may then be supplied.
- }
- \sstsubsection{
- FLAGS = INTEGER (Given)
- }{
- The sum of a set of flag values which may be used to
- provide additional control over the rebinning operation. See
- the {\tt{"}}Control Flags{\tt{"}} section below for a description of the
- options available. If no flag values are to be set, a value
- of zero should be given.
- }
- \sstsubsection{
- TOL = DOUBLE PRECISION (Given)
- }{
- The maximum tolerable geometrical distortion which may be
- introduced as a result of approximating non-linear Mappings
- by a set of piece-wise linear transformations. This should be
- expressed as a displacement in pixels in the output grid's
- coordinate system.
-
- If piece-wise linear approximation is not required, a value
- of zero may be given. This will ensure that the Mapping is
- used without any approximation, but may increase execution
- time.
-
- If the value is too high, discontinuities between the linear
- approximations used in adjacent panel will be higher, and may
- cause the edges of the panel to be visible when viewing the output
- image at high contrast. If this is a problem, reduce the
- tolerance value used.
- }
- \sstsubsection{
- MAXPIX = INTEGER (Given)
- }{
- A value which specifies an initial scale size (in pixels) for
- the adaptive algorithm which approximates non-linear Mappings
- with piece-wise linear transformations. Normally, this should
- be a large value (larger than any dimension of the region of
- the input grid being used). In this case, a first attempt to
- approximate the Mapping by a linear transformation will be
- made over the entire input region.
-
- If a smaller value is used, the input region will first be
- divided into sub-regions whose size does not exceed MAXPIX
- pixels in any dimension. Only at this point will attempts at
- approximation commence.
-
- This value may occasionally be useful in preventing false
- convergence of the adaptive algorithm in cases where the
- Mapping appears approximately linear on large scales, but has
- irregularities (e.g. holes) on smaller scales. A value of,
- say, 50 to 100 pixels can also be employed as a safeguard in
- general-purpose software, since the effect on performance is
- minimal.
-
- If too small a value is given, it will have the effect of
- inhibiting linear approximation altogether (equivalent to
- setting TOL to zero). Although this may degrade
- performance, accurate results will still be obtained.
- }
- \sstsubsection{
- BADVAL = $<$Xtype$>$ (Given)
- }{
- This argument should have the same type as the elements of
- the IN array. It specifies the value used to flag missing
- data (bad pixels) in the input and output arrays.
-
- If the AST\_\_USEBAD flag is set via the FLAGS argument,
- then this value is used to test for bad pixels in the IN
- (and IN\_VAR) array(s).
-
- In all cases, this value is also used to flag any output
- elements in the OUT (and OUT\_VAR) array(s) for which
- rebined values could not be obtained (see the {\tt{"}}Propagation
- of Missing Data{\tt{"}} section below for details of the
- circumstances under which this may occur).
- }
- \sstsubsection{
- NDIM\_OUT = INTEGER (Given)
- }{
- The number of dimensions in the output grid. This should be
- at least one. It need not necessarily be equal to the number
- of dimensions in the input grid.
- }
- \sstsubsection{
- LBND\_OUT( NDIM\_OUT ) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the centre of the first pixel
- in the output grid along each dimension.
- }
- \sstsubsection{
- UBND\_OUT( NDIM\_OUT ) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the centre of the last pixel in
- the output grid along each dimension.
-
- Note that LBND\_OUT and UBND\_OUT together define the
- shape, size and coordinate system of the output grid in the
- same way as LBND\_IN and UBND\_IN define the shape, size
- and coordinate system of the input grid.
- }
- \sstsubsection{
- LBND( NDIM\_IN ) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the first pixel in the region
- of the input grid which is to be included in the rebined output
- array.
- }
- \sstsubsection{
- UBND( NDIM\_IN ) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the last pixel in the region of
- the input grid which is to be included in the rebined output
- array.
-
- Note that LBND and UBND together define the shape and
- position of a (hyper-)rectangular region of the input grid
- which is to be included in the rebined output array. This region
- should lie wholly within the extent of the input grid (as
- defined by the LBND\_IN and UBND\_IN arrays). Regions of
- the input grid lying outside this region will not be used.
- }
- \sstsubsection{
- OUT( $*$ ) = $<$Xtype$>$ (Returned)
- }{
- An array, with one element for each pixel in the
- output grid, in which the rebined data values will be
- returned. The numerical type of this array should match that
- of the IN array, and the data storage order should be such
- that the index of the first grid dimension varies most
- rapidly and that of the final dimension least rapidly
- (i.e. normal Fortran array storage order).
- }
- \sstsubsection{
- OUT\_VAR( $*$ ) = $<$Xtype$>$ (Returned)
- }{
- An optional array with the same type and size as the OUT
- array. If the AST\_\_USEVAR flag is set via the FLAGS argument,
- this array will be used to return variance estimates for the
- rebined data values.
-
- The output variance values will be calculated on the
- assumption that errors on the input data values are
- statistically independent and that their variance estimates
- may simply be summed (with appropriate weighting factors)
- when several input pixels contribute to an output data
- value. If this assumption is not valid, then the output error
- estimates may be biased. In addition, note that the
- statistical errors on neighbouring output data values (as
- well as the estimates of those errors) may often be
- correlated, even if the above assumption about the input data
- is correct, because of the pixel spreading schemes
- employed.
-
- If the AST\_\_USEVAR flag is not set, no output variance
- estimates will be calculated and this array will not be
- used. A dummy (e.g. one-element) array may then be supplied.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstdiytopic{
- Data Type Codes
- }{
- To select the appropriate rebinning function, you should
- replace $<$X$>$ in the generic function name AST\_REBIN$<$X$>$ with a
- 1- or 2-character data type code, so as to match the numerical
- type $<$Xtype$>$ of the data you are processing, as follows:
- \sstitemlist{
-
- \sstitem
- D: DOUBLE PRECISION
-
- \sstitem
- R: REAL
-
- \sstitem
- I: INTEGER
-
- }
- For example, AST\_REBIND would be used to process DOUBLE
- PRECISION data, while AST\_REBINI would be used to process
- integer data (stored in an INTEGER array), etc.
-
- Note that, unlike
- \htmlref{AST\_RESAMPLE$<$X$>$}{AST_RESAMPLEX}, the AST\_REBIN$<$X$>$
- set of functions does not yet support unsigned integer data types
- or integers of different sizes.
- }
- \sstdiytopic{
- Pixel Spreading Schemes
- }{
- The pixel spreading scheme specifies the Point Spread Function (PSF)
- applied to each input pixel value as it is copied into the output
- array. It can be thought of as the inverse of the sub-pixel
- interpolation schemes used by the
- AST\_RESAMPLE$<$X$>$
- group of functions. That is, in a sub-pixel interpolation scheme the
- kernel specifies the weight to assign to each input pixel when
- forming the weighted mean of the input pixels, whereas the kernel in a
- pixel spreading scheme specifies the fraction of the input data value
- which is to be assigned to each output pixel. As for interpolation, the
- choice of suitable pixel spreading scheme involves stricking a balance
- between schemes which tend to degrade sharp features in the data by
- smoothing them, and those which attempt to preserve sharp features but
- which often tend to introduce unwanted artifacts. See the
- AST\_RESAMPLE$<$X$>$
- documentation for further discussion.
-
- The binning algorithm used has the ability to introduce artifacts
- not seen when using a resampling algorithm. Particularly, when
- viewing the output image at high contrast, systems of curves lines
- covering the entire image may be visible. These are caused by a
- beating effect between the input pixel positions and the output pixels
- position, and their nature and strength depend critically upon the
- nature of the Mapping and the spreading function being used. In
- general, the nearest neighbour spreading function demonstrates this
- effect more clearly than the other functions, and for this reason
- should be used with caution.
-
- The following values (defined in the
- AST\_PAR include file)
- may be assigned to the
- SPREAD
- parameter. See the
- AST\_RESAMPLE$<$X$>$
- documentation for details of these schemes including the use of the
- FSPREAD and PARAMS arguments:
-
- \sstitemlist{
-
- \sstitem
- AST\_\_NEAREST
-
- \sstitem
- AST\_\_LINEAR
-
- \sstitem
- AST\_\_SINC
-
- \sstitem
- AST\_\_SINCSINC
-
- \sstitem
- AST\_\_SINCCOS
-
- \sstitem
- AST\_\_SINCGAUSS
-
- \sstitem
- AST\_\_SOMBCOS
-
- }
- In addition, the following schemes can be used with
- AST\_REBIN$<$X$>$ but not with AST\_RESAMPLE$<$X$>$:
-
- \sstitemlist{
-
- \sstitem
- AST\_\_GAUSS: This scheme uses a kernel of the form exp(-k$*$x$*$x), with k
- a positive constant determined by the full-width at half-maximum (FWHM).
- The FWHM should be supplied in units of output pixels by means of the
- PARAMS(2)
- value and should be at least 0.1. The
- PARAMS(1)
- value should be used to specify at what point the Gaussian is truncated
- to zero. This should be given as a number of output pixels on either
- side of the central output point in each dimension (the nearest integer
- value is used).
- }
- }
- \sstdiytopic{
- Control Flags
- }{
- The following flags are defined in the AST\_PAR include file and
- may be used to provide additional control over the rebinning
- process. Having selected a set of flags, you should supply the
- sum of their values via the FLAGS argument:
-
- \sstitemlist{
-
- \sstitem
- AST\_\_USEBAD: Indicates that there may be bad pixels in the
- input array(s) which must be recognised by comparing with the
- value given for BADVAL and propagated to the output array(s).
- If this flag is not set, all input values are treated literally
- and the BADVAL value is only used for flagging output array
- values.
-
- \sstitem
- AST\_\_USEVAR: Indicates that variance information should be
- processed in order to provide estimates of the statistical error
- associated with the rebined values. If this flag is not set,
- no variance processing will occur and the IN\_VAR and OUT\_VAR
- arrays will not be used. (Note that this flag is only available
- in the Fortran interface to AST.)
- }
- }
- \sstdiytopic{
- Propagation of Missing Data
- }{
- Instances of missing data (bad pixels) in the output grid are
- identified by occurrences of the BADVAL value in the OUT
- array. These are produced if the sum of the weights of the
- contributing input pixels is less than
- WLIM.
-
- An input pixel is considered bad (and is consequently ignored) if
- its
- data value is equal to BADVAL and the AST\_\_USEBAD flag is
- set via the FLAGS argument.
-
- In addition, associated output variance estimates (if
- calculated) may be declared bad and flagged with the BADVAL
- value in the OUT\_VAR array for similar reasons.
- }
-}
-\sstroutine{
- AST\_REBINSEQ$<$X$>$\sstlabel{AST_REBINSEQX}
-}{
- Rebin a region of a sequence of data grids
-}{
- \sstdescription{
- This set of
- routines is identical to \htmlref{AST\_REBIN$<$X$>$}{AST_REBINX}
- except that the rebinned input data is added into the supplied
- output arrays, rather than simply over-writing the contents of the
- output arrays. Thus, by calling this
- routine
- repeatedly, a sequence of input arrays can be rebinned and accumulated
- into a single output array, effectively forming a mosaic of the
- input data arrays.
-
- In addition, the weights associated with each output pixel are
- returned. The weight of an output pixel indicates the number of input
- pixels which have been accumulated in that output pixel. If the entire
- value of an input pixel is assigned to a single output pixel, then the
- weight of that output pixel is incremented by one. If some fraction of
- the value of an input pixel is assigned to an output pixel, then the
- weight of that output pixel is incremented by the fraction used.
-
- The start of a new sequence is indicated by specifying the
- AST\_\_REBININIT flag via the
- FLAGS argument.
- This causes the supplied arrays to be filled with zeros before the
- rebinned input data is added into them. Subsequenct invocations
- within the same sequence should omit the AST\_\_REBININIT flag.
-
- The last call in a sequence is indicated by specifying the AST\_\_REBINEND
- flag. This causes the output data and variance arrays to be normalised
- before being returned. This normalisation consists of dividing the data
- array by the weights array, and can eliminate artifacts which may be
- introduced into the rebinned data as a consequence of aliasing between
- the input and output grids. However, it can also result in small changes to
- the total pixel value in any given area of the output array. In addition to
- normalisation of the output data values, any output variances are also
- appropriately normalised, and any output data values with weight less
- than
- WLIM are set to BADVAL.
-
- Output variances can be generated in two ways; by rebinning the supplied
- input variances with appropriate weights, or by finding the spread of
- input data values contributing to each output pixel (see the AST\_\_GENVAR
- and AST\_\_USEVAR flags).
- }
- \sstinvocation{
- CALL AST\_REBINSEQ$<$X$>$( THIS, WLIM, NDIM\_IN, LBND\_IN, UBND\_IN, IN, IN\_VAR,
- SPREAD, PARAMS, FLAGS, TOL, MAXPIX, BADVAL,
- NDIM\_OUT, LBND\_OUT, UBND\_OUT, LBND, UBND, OUT,
- OUT\_VAR, WEIGHTS, NUSED, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to a \htmlref{Mapping}{Mapping}, whose forward transformation will be
- used to transform the coordinates of pixels in the input
- grid into the coordinate system of the output grid.
-
- The number of input coordinates used by this Mapping (as
- given by its \htmlref{Nin}{Nin} attribute) should match the number of input
- grid dimensions given by the value of NDIM\_IN
- below. Similarly, the number of output coordinates (\htmlref{Nout}{Nout}
- attribute) should match the number of output grid dimensions
- given by NDIM\_OUT.
- }
- \sstsubsection{
- WLIM = DOUBLE PRECISION (Given)
- }{
- This value is only used if the AST\_\_REBINEND flag is specified
- via the
- FLAGS argument.
- It gives the required number of input pixel values which must
- contribute to an output pixel (i.e. the output pixel weight) in
- order for the output pixel value to be considered valid. If the sum
- of the input pixel weights contributing to an output pixel is less
- than the supplied
- WLIM
- value, then the output pixel value is returned set to the
- supplied bad value. If the supplied value is less than 1.0E-10
- then 1.0E-10 is used instead.
- }
- \sstsubsection{
- NDIM\_IN = INTEGER (Given)
- }{
- The number of dimensions in the input grid. This should be at
- least one.
- }
- \sstsubsection{
- LBND\_IN( NDIM\_IN ) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the centre of the first pixel
- in the input grid along each dimension.
- }
- \sstsubsection{
- UBND\_IN( NDIM\_IN ) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the centre of the last pixel in
- the input grid along each dimension.
-
- Note that LBND\_IN and UBND\_IN together define the shape
- and size of the input grid, its extent along a particular
- (J'th) dimension being UBND\_IN(J)-LBND\_IN(J)$+$1. They also define
- the input grid's coordinate system, each pixel having unit
- extent along each dimension with integral coordinate values
- at its centre.
- }
- \sstsubsection{
- IN( $*$ ) = $<$Xtype$>$ (Given)
- }{
- An array, with one element for each pixel in the
- input grid, containing the input data to be rebined. The
- numerical type of this array should match the 1- or
- 2-character type code appended to the function name (e.g. if
- you are using AST\_REBINSEQR, the type of each array element
- should be REAL).
-
- The storage order of data within this array should be such
- that the index of the first grid dimension varies most
- rapidly and that of the final dimension least rapidly
- (i.e. normal Fortran array storage order).
- }
- \sstsubsection{
- IN\_VAR( $*$ ) = $<$Xtype$>$ (Given)
- }{
- An optional
- second array with the same size and type as the
- IN
- array. If given, this should contain a set of non-negative values
- which represent estimates of the statistical variance associated
- with each element of the
- IN
- array.
- If neither the AST\_\_USEVAR nor the AST\_\_VARWGT flag is set, no
- input variance estimates are required and this
- array
- will not be used.
- A dummy (e.g. one-element) array
- may then be supplied.
- }
- \sstsubsection{
- SPREAD = INTEGER (Given)
- }{
- This argument specifies the scheme to be used for dividing
- each input data value up amongst the corresponding output pixels.
- It may be used to select
- from a set of pre-defined schemes by supplying one of the
- values described in the {\tt{"}}Pixel Spreading Schemes{\tt{"}}
- section in the description of the
- AST\_REBIN$<$X$>$ routines.
- If a value of zero is supplied, then the default linear spreading
- scheme is used (equivalent to supplying the value AST\_\_LINEAR).
- }
- \sstsubsection{
- PARAMS( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An optional array which should contain
- any additional parameter values required by the pixel
- spreading scheme. If such parameters are required, this
- will be noted in the {\tt{"}}Pixel Spreading Schemes{\tt{"}} section in the
- description of the
- AST\_REBIN$<$X$>$ routines.
-
- If no additional parameters are required, this array is not
- used. A dummy (e.g. one-element) array may then be supplied.
- }
- \sstsubsection{
- FLAGS = INTEGER (Given)
- }{
- The sum of a set of flag values which may be used to
- provide additional control over the rebinning operation. See
- the {\tt{"}}Control Flags{\tt{"}} section below for a description of the
- options available. If no flag values are to be set, a value
- of zero should be given.
- }
- \sstsubsection{
- TOL = DOUBLE PRECISION (Given)
- }{
- The maximum tolerable geometrical distortion which may be
- introduced as a result of approximating non-linear Mappings
- by a set of piece-wise linear transformations. This should be
- expressed as a displacement in pixels in the output grid's
- coordinate system.
-
- If piece-wise linear approximation is not required, a value
- of zero may be given. This will ensure that the Mapping is
- used without any approximation, but may increase execution
- time.
-
- If the value is too high, discontinuities between the linear
- approximations used in adjacent panel will be higher, and may
- cause the edges of the panel to be visible when viewing the output
- image at high contrast. If this is a problem, reduce the
- tolerance value used.
- }
- \sstsubsection{
- MAXPIX = INTEGER (Given)
- }{
- A value which specifies an initial scale size (in pixels) for
- the adaptive algorithm which approximates non-linear Mappings
- with piece-wise linear transformations. Normally, this should
- be a large value (larger than any dimension of the region of
- the input grid being used). In this case, a first attempt to
- approximate the Mapping by a linear transformation will be
- made over the entire input region.
-
- If a smaller value is used, the input region will first be
- divided into sub-regions whose size does not exceed MAXPIX
- pixels in any dimension. Only at this point will attempts at
- approximation commence.
-
- This value may occasionally be useful in preventing false
- convergence of the adaptive algorithm in cases where the
- Mapping appears approximately linear on large scales, but has
- irregularities (e.g. holes) on smaller scales. A value of,
- say, 50 to 100 pixels can also be employed as a safeguard in
- general-purpose software, since the effect on performance is
- minimal.
-
- If too small a value is given, it will have the effect of
- inhibiting linear approximation altogether (equivalent to
- setting TOL to zero). Although this may degrade
- performance, accurate results will still be obtained.
- }
- \sstsubsection{
- BADVAL = $<$Xtype$>$ (Given)
- }{
- This argument should have the same type as the elements of
- the IN array. It specifies the value used to flag missing
- data (bad pixels) in the input and output arrays.
-
- If the AST\_\_USEBAD flag is set via the FLAGS argument,
- then this value is used to test for bad pixels in the IN
- (and IN\_VAR) array(s).
-
- In all cases, this value is also used to flag any output
- elements in the OUT (and OUT\_VAR) array(s) for which
- rebined values could not be obtained (see the {\tt{"}}Propagation
- of Missing Data{\tt{"}} section below for details of the
- circumstances under which this may occur).
- }
- \sstsubsection{
- NDIM\_OUT = INTEGER (Given)
- }{
- The number of dimensions in the output grid. This should be
- at least one. It need not necessarily be equal to the number
- of dimensions in the input grid.
- }
- \sstsubsection{
- LBND\_OUT( NDIM\_OUT ) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the centre of the first pixel
- in the output grid along each dimension.
- }
- \sstsubsection{
- UBND\_OUT( NDIM\_OUT ) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the centre of the last pixel in
- the output grid along each dimension.
-
- Note that LBND\_OUT and UBND\_OUT together define the
- shape, size and coordinate system of the output grid in the
- same way as LBND\_IN and UBND\_IN define the shape, size
- and coordinate system of the input grid.
- }
- \sstsubsection{
- LBND( NDIM\_IN ) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the first pixel in the region
- of the input grid which is to be included in the rebined output
- array.
- }
- \sstsubsection{
- UBND( NDIM\_IN ) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the last pixel in the region of
- the input grid which is to be included in the rebined output
- array.
-
- Note that LBND and UBND together define the shape and
- position of a (hyper-)rectangular region of the input grid
- which is to be included in the rebined output array. This region
- should lie wholly within the extent of the input grid (as
- defined by the LBND\_IN and UBND\_IN arrays). Regions of
- the input grid lying outside this region will not be used.
- }
- \sstsubsection{
- OUT( $*$ ) = $<$Xtype$>$ (Given and Returned)
- }{
- An array, with one element for each pixel in the
- output grid. The rebined data values will be added into the
- original contents of this array. The numerical type of this array
- should match that of the
- IN array, and the data storage order should be such
- that the index of the first grid dimension varies most
- rapidly and that of the final dimension least rapidly
- (i.e. normal Fortran array storage order).
- }
- \sstsubsection{
- OUT\_VAR( $*$ ) = $<$Xtype$>$ (Given and Returned)
- }{
- A
- array with the same type and size as the
- OUT
- array. This
- array
- will only be used if the AST\_\_USEVAR or AST\_\_GENVAR flag is set
- via the FLAGS argument,
- via the {\tt{"}}flags{\tt{"}} parameter,
- in which case variance estimates for the rebined data values will
- be added into the array. If neither the AST\_\_USEVAR flag nor the
- AST\_\_GENVAR flag is set, no output variance estimates will be
- calculated and this
- array
- will not be used. A
- dummy (e.g. one-element) array
- may then be supplied.
- }
- \sstsubsection{
- WEIGHTS( $*$ ) = DOUBLE PRECISION (Given and Returned)
- }{
- An array
- with one or two elements for each pixel in the output grid,
- depending on whether or not the AST\_\_GENVAR flag has been supplied
- via the
- FLAGS parameter.
- If AST\_\_GENVAR has not been specified then the array should have
- one element for each output pixel, and it will be used to
- accumulate the weight associated with each output pixel.
- If AST\_\_GENVAR has been specified then the array should have
- two elements for each output pixel. The first half of the array
- is again used to accumulate the weight associated with each output
- pixel, and the second half is used to accumulate the square of
- the weights. In each half, the data storage order should be such that
- the index of the first grid dimension varies most rapidly and that of
- the final dimension least rapidly
- (i.e. normal Fortran array storage order).
- }
- \sstsubsection{
- NUSED = INTEGER (Given and Returned)
- }{
- The
- number of input data values that have been added into the output
- array so far. The supplied value is incremented on exit by the
- number of input values used. The value is initially set to zero
- if the AST\_\_REBININIT flag is set in
- FLAGS.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstdiytopic{
- Data Type Codes
- }{
- To select the appropriate rebinning function, you should
- replace $<$X$>$ in the generic function name AST\_REBINSEQ$<$X$>$ with a
- 1- or 2-character data type code, so as to match the numerical
- type $<$Xtype$>$ of the data you are processing, as follows:
- \sstitemlist{
-
- \sstitem
- D: DOUBLE PRECISION
-
- \sstitem
- R: REAL
-
- \sstitem
- I: INTEGER
-
- }
- For example, AST\_REBIND would be used to process DOUBLE
- PRECISION data, while AST\_REBINI would be used to process
- integer data (stored in an INTEGER array), etc.
-
- Note that, unlike
- \htmlref{AST\_RESAMPLE$<$X$>$}{AST_RESAMPLEX}, the AST\_REBINSEQ$<$X$>$
- set of functions does not yet support unsigned integer data types
- or integers of different sizes.
- }
- \sstdiytopic{
- Control Flags
- }{
- The following flags are defined in the AST\_PAR include file and
- may be used to provide additional control over the rebinning
- process. Having selected a set of flags, you should supply the
- sum of their values via the FLAGS argument:
-
- \sstitemlist{
-
- \sstitem
- AST\_\_REBININIT: Used to mark the first call in a sequence. It indicates
- that the supplied
- OUT, OUT\_VAR and WEIGHTS
- arrays should be filled with zeros (thus over-writing any supplied
- values) before adding the rebinned input data into them. This flag
- should be used when rebinning the first input array in a sequence.
-
- \sstitem
- AST\_\_REBINEND: Used to mark the last call in a sequence. It causes
- each value in the
- OUT and OUT\_VAR
- arrays to be divided by a normalisation factor before being
- returned. The normalisation factor for each output data value is just the
- corresponding value from the weights array. The normalisation factor
- for each output variance value is the square of the data value
- normalisation factor. It also causes output data values to be set
- bad if the corresponding weight is less than the value supplied for
- argument WLIM.
- It also causes any temporary values stored in the output variance array
- (see flag AST\_\_GENVAR below) to be converted into usable variance values.
-
- \sstitem
- AST\_\_USEBAD: Indicates that there may be bad pixels in the
- input array(s) which must be recognised by comparing with the
- value given for BADVAL and propagated to the output array(s).
- If this flag is not set, all input values are treated literally
- and the BADVAL value is only used for flagging output array
- values.
-
- \sstitem
- AST\_\_USEVAR: Indicates that output variance estimates should be
- created by rebinning the supplied input variance estimates. An
- error will be reported if both this flag and the AST\_\_GENVAR flag
- are supplied.
-
- \sstitem
- AST\_\_GENVAR: Indicates that output variance estimates should be
- created based on the spread of input data values contributing to each
- output pixel. An error will be reported if both this flag and the
- AST\_\_USEVAR flag are supplied. If the AST\_\_GENVAR flag is specified,
- the supplied output variance array is first used as a work array to
- accumulate the temporary values needed to generate the output
- variances. When the sequence ends (as indicated by the
- AST\_\_REBINEND flag), the contents of the output variance array are
- converted into the required variance estimates. If the generation of
- such output variances is required, this flag should be used on every
- invocation of this
- routine
- within a sequence, and any supplied input variances will have no effect
- on the output variances (although input variances will still be used
- to weight the input data if the AST\_\_VARWGT flag is also supplied).
-
- \sstitem
- AST\_\_VARWGT: Indicates that the input data should be weighted by
- the reciprocal of the input variances. Otherwise, all input data are
- given equal weight. If this flag is specified, the calculation of the
- output variances (if any) is modified to take account of the
- varying weights assigned to the input data values.
- }
- }
- \sstdiytopic{
- Propagation of Missing Data
- }{
- Instances of missing data (bad pixels) in the output grid are
- identified by occurrences of the BADVAL value in the OUT
- array. These are only produced if the AST\_\_REBINEND flag is
- specified and a pixel has zero weight.
-
- An input pixel is considered bad (and is consequently ignored) if
- its
- data value is equal to BADVAL and the AST\_\_USEBAD flag is
- set via the FLAGS argument.
-
- In addition, associated output variance estimates (if
- calculated) may be declared bad and flagged with the BADVAL
- value in the OUT\_VAR array for similar reasons.
- }
-}
-\sstroutine{
- AST\_REMAPFRAME\sstlabel{AST_REMAPFRAME}
-}{
- Modify a Frame's relationship to other Frames in a FrameSet
-}{
- \sstdescription{
- This routine modifies the relationship (i.e. \htmlref{Mapping}{Mapping}) between a
- specified \htmlref{Frame}{Frame} in a \htmlref{FrameSet}{FrameSet} and the other Frames in that
- FrameSet.
-
- Typically, this might be required if the FrameSet has been used
- to calibrate (say) an image, and that image is re-binned. The
- Frame describing the image will then have undergone a coordinate
- transformation, and this should be communicated to the associated
- FrameSet using this routine.
- }
- \sstinvocation{
- CALL AST\_REMAPFRAME( THIS, IFRAME, MAP, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the FrameSet.
- }
- \sstsubsection{
- IFRAME = INTEGER (Given)
- }{
- The index within the FrameSet of the Frame to be modified.
- This value should lie in the range from 1 to the number of
- Frames in the FrameSet (as given by its \htmlref{Nframe}{Nframe} attribute).
- }
- \sstsubsection{
- MAP = INTEGER (Given)
- }{
- Pointer to a Mapping whose forward transformation converts
- coordinate values from the original coordinate system
- described by the Frame to the new one, and whose inverse
- transformation converts in the opposite direction.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A value of AST\_\_BASE or AST\_\_CURRENT may be given for the
- IFRAME argument to specify the base Frame or the current
- Frame respectively.
-
- \sstitem
- The relationship between the selected Frame and any other
- Frame within the FrameSet will be modified by this routine,
- but the relationship between all other Frames in the FrameSet
- remains unchanged.
-
- \sstitem
- The number of input coordinate values accepted by the Mapping
- (its \htmlref{Nin}{Nin} attribute) and the number of output coordinate values
- generated (its \htmlref{Nout}{Nout} attribute) must be equal and must match the
- number of axes in the Frame being modified.
-
- \sstitem
- If a simple change of axis order is required, then the
- \htmlref{AST\_PERMAXES}{AST_PERMAXES} routine may provide a more straightforward method
- of making the required changes to the FrameSet.
-
- \sstitem
- This routine cannot be used to change the number of Frame
- axes. To achieve this, a new Frame must be added to the FrameSet
- (\htmlref{AST\_ADDFRAME}{AST_ADDFRAME}) and the original one removed if necessary
- (\htmlref{AST\_REMOVEFRAME}{AST_REMOVEFRAME}).
- }
- }
-}
-\sstroutine{
- AST\_REMOVEFRAME\sstlabel{AST_REMOVEFRAME}
-}{
- Remove a Frame from a FrameSet
-}{
- \sstdescription{
- This routine removes a \htmlref{Frame}{Frame} from a \htmlref{FrameSet}{FrameSet}. All other Frames
- in the FrameSet have their indices re-numbered from one (if
- necessary), but are otherwise unchanged.
- }
- \sstinvocation{
- CALL AST\_REMOVEFRAME( THIS, IFRAME, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the FrameSet.
- }
- \sstsubsection{
- IFRAME = INTEGER (Given)
- }{
- The index within the FrameSet of the Frame to be removed.
- This value should lie in the range from 1 to the number of
- Frames in the FrameSet (as given by its \htmlref{Nframe}{Nframe} attribute).
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Removing a Frame from a FrameSet does not affect the
- relationship between other Frames in the FrameSet, even if they
- originally depended on the Frame being removed.
-
- \sstitem
- The number of Frames in a FrameSet cannot be reduced to zero.
- An error will result if an attempt is made to remove the only
- remaining Frame.
-
- \sstitem
- A value of AST\_\_BASE or AST\_\_CURRENT may be given for the
- IFRAME argument to specify the base Frame or the current
- Frame respectively.
-
- \sstitem
- If a FrameSet's base or current Frame is removed, the \htmlref{Base}{Base} or
- \htmlref{Current}{Current} attribute (respectively) of the FrameSet will have its
- value cleared, so that another Frame will then assume its role
- by default.
-
- \sstitem
- If any other Frame is removed, the base and current Frames
- will remain the same. To ensure this, the Base and/or Current
- attributes of the FrameSet will be changed, if necessary, to
- reflect any change in the indices of these Frames.
- }
- }
-}
-\sstroutine{
- AST\_REMOVEREGIONS\sstlabel{AST_REMOVEREGIONS}
-}{
- Remove any Regions from a Mapping
-}{
- \sstdescription{
- This function searches the suppliedMapping (which may be a
- compound \htmlref{Mapping}{Mapping} such as a \htmlref{CmpMap}{CmpMap}) for any component Mappings
- that are instances of the AST \htmlref{Region}{Region} class. It then creates a new
- Mapping from which all Regions have been removed. If a Region
- cannot simply be removed (for instance, if it is a component of a
- parallel CmpMap), then it is replaced with an equivalent \htmlref{UnitMap}{UnitMap}
- in the returned Mapping.
- }
- \sstinvocation{
- RESULT = AST\_REMOVEREGIONS( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the original Mapping.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{CmpFrame}{CmpFrame}
- }{
- If the supplied Mapping is a CmpFrame, any component Frames that
- are instances of the Region class are replaced by the equivalent
- \htmlref{Frame}{Frame}.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- If the supplied Mapping is a FrameSet, the returned Mapping
- will be a copy of the supplied FrameSet in which Regions have
- been removed from all the inter-Frame Mappings, and any Frames
- which are instances of the Region class are repalced by the
- equivalent Frame.
- }
- \sstsubsection{
- Mapping
- }{
- This function applies to all Mappings.
- }
- \sstsubsection{
- Region
- }{
- If the supplied Mapping is a Region, the returned Mapping will
- be the equivalent Frame.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_REMOVEREGIONS = INTEGER
- }{
- A new pointer to the (possibly modified) Mapping.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function can safely be applied even to Mappings which
- contain no Regions. If no Regions are found, it
- behaves exactly like \htmlref{AST\_CLONE}{AST_CLONE} and returns a pointer to the
- original Mapping.
-
- \sstitem
- The Mapping returned by this function may not be independent
- of the original (even if some Regions were removed), and
- modifying it may therefore result in indirect modification of
- the original. If a completely independent result is required, a
- copy should be made using \htmlref{AST\_COPY}{AST_COPY}.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_RESAMPLE$<$X$>$\sstlabel{AST_RESAMPLEX}
-}{
- Resample a region of a data grid
-}{
- \sstdescription{
- This is a set of functions for resampling gridded data (e.g. an
- image) under the control of a geometrical transformation, which
- is specified by a \htmlref{Mapping}{Mapping}. The functions operate on a pair of
- data grids (input and output), each of which may have any number
- of dimensions. Resampling may be restricted to a specified
- region of the output grid. An associated grid of error estimates
- associated with the input data may also be supplied (in the form
- of variance values), so as to produce error estimates for the
- resampled output data. Propagation of missing data (bad pixels)
- is supported.
-
- You should use a resampling function which matches the numerical
- type of the data you are processing by replacing $<$X$>$ in
- the generic function name AST\_RESAMPLE$<$X$>$ by an appropriate 1- or
- 2-character type code. For example, if you are resampling data
- with type REAL, you should use the function AST\_RESAMPLER (see
- the {\tt{"}}Data Type Codes{\tt{"}} section below for the codes appropriate to
- other numerical types).
-
- Resampling of the grid of input data is performed by
- transforming the coordinates of the centre of each output grid
- element (or pixel) into the coordinate system of the input grid.
- Since the resulting coordinates will not, in general, coincide
- with the centre of an input pixel, sub-pixel interpolation is
- performed between the neighbouring input pixels. This produces a
- resampled value which is then assigned to the output pixel. A
- choice of sub-pixel interpolation schemes is provided, but you
- may also implement your own.
-
- This algorithm samples the input data value, it does not integrate
- it. Thus total data value in the input image will not, in general,
- be conserved. However, an option is provided (see the {\tt{"}}Control Flags{\tt{"}}
- section below) which can produce approximate flux conservation by
- scaling the output values using the ratio of the output pixel size
- to the input pixel size. However, if accurate flux conservation is
- important to you, consder using the
- \htmlref{AST\_REBIN$<$X$>$}{AST_REBINX} or \htmlref{AST\_REBINSEQ$<$X$>$}{AST_REBINSEQX} family of routines
- instead.
-
- Output pixel coordinates are transformed into the coordinate
- system of the input grid using the inverse transformation of the
- Mapping which is supplied. This means that geometrical features
- in the input data are subjected to the Mapping's forward
- transformation as they are transferred from the input to the
- output grid (although the Mapping's forward transformation is
- not explicitly used).
-
- In practice, transforming the coordinates of every pixel of a
- large data grid can be time-consuming, especially if the Mapping
- involves complicated functions, such as sky projections. To
- improve performance, it is therefore possible to approximate
- non-linear Mappings by a set of linear transformations which are
- applied piece-wise to separate sub-regions of the data. This
- approximation process is applied automatically by an adaptive
- algorithm, under control of an accuracy criterion which
- expresses the maximum tolerable geometrical distortion which may
- be introduced, as a fraction of a pixel.
-
- This algorithm first attempts to approximate the Mapping with a
- linear transformation applied over the whole region of the
- output grid which is being used. If this proves to be
- insufficiently accurate, the output region is sub-divided into
- two along its largest dimension and the process is repeated
- within each of the resulting sub-regions. This process of
- sub-division continues until a sufficiently good linear
- approximation is found, or the region to which it is being
- applied becomes too small (in which case the original Mapping is
- used directly).
- }
- \sstinvocation{
- RESULT = AST\_RESAMPLE$<$X$>$( THIS, NDIM\_IN, LBND\_IN, UBND\_IN, IN, IN\_VAR,
- INTERP, FINTERP, PARAMS, FLAGS,
- TOL, MAXPIX, BADVAL,
- NDIM\_OUT, LBND\_OUT, UBND\_OUT,
- LBND, UBND, OUT, OUT\_VAR, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to a Mapping, whose inverse transformation will be
- used to transform the coordinates of pixels in the output
- grid into the coordinate system of the input grid. This
- yields the positions which are used to obtain resampled
- values by sub-pixel interpolation within the input grid.
-
- The number of input coordinates used by this Mapping (as
- given by its \htmlref{Nin}{Nin} attribute) should match the number of input
- grid dimensions given by the value of NDIM\_IN
- below. Similarly, the number of output coordinates (\htmlref{Nout}{Nout}
- attribute) should match the number of output grid dimensions
- given by NDIM\_OUT.
- }
- \sstsubsection{
- NDIM\_IN = INTEGER (Given)
- }{
- The number of dimensions in the input grid. This should be at
- least one.
- }
- \sstsubsection{
- LBND\_IN( NDIM\_IN ) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the centre of the first pixel
- in the input grid along each dimension.
- }
- \sstsubsection{
- UBND\_IN( NDIM\_IN ) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the centre of the last pixel in
- the input grid along each dimension.
-
- Note that LBND\_IN and UBND\_IN together define the shape
- and size of the input grid, its extent along a particular
- (J'th) dimension being UBND\_IN(J)-LBND\_IN(J)$+$1. They also define
- the input grid's coordinate system, each pixel having unit
- extent along each dimension with integral coordinate values
- at its centre.
- }
- \sstsubsection{
- IN( $*$ ) = $<$Xtype$>$ (Given)
- }{
- An array, with one element for each pixel in the
- input grid, containing the input data to be resampled. The
- numerical type of this array should match the 1- or
- 2-character type code appended to the function name (e.g. if
- you are using AST\_RESAMPLER, the type of each array element
- should be REAL).
-
- The storage order of data within this array should be such
- that the index of the first grid dimension varies most
- rapidly and that of the final dimension least rapidly
- (i.e. normal Fortran array storage order).
- }
- \sstsubsection{
- IN\_VAR( $*$ ) = $<$Xtype$>$ (Given)
- }{
- An optional second array with the same size and type as the
- IN array. If the AST\_\_USEVAR flag is set via the FLAGS
- argument (below), this array should contain a set of
- non-negative values which represent estimates of the
- statistical variance associated with each element of the IN
- array. Estimates of the variance of the resampled output data
- will then be calculated.
-
- If the AST\_\_USEVAR flag is not set, no input variance
- estimates are required and this array will not be used. A
- dummy (e.g. one-element) array may then be supplied.
- }
- \sstsubsection{
- INTERP = INTEGER (Given)
- }{
- This argument specifies the scheme to be used for sub-pixel
- interpolation within the input grid. It may be used to select
- from a set of pre-defined schemes by supplying one of the
- values described in the {\tt{"}}Sub-Pixel Interpolation Schemes{\tt{"}}
- section below. If a value of zero is supplied, then the
- default linear interpolation scheme is used (equivalent to
- supplying the value AST\_\_LINEAR).
-
- Alternatively, you may supply a value which indicates that
- you will provide your own routine to perform sub-pixel
- interpolation by means of the FINTERP argument. Again, see
- the {\tt{"}}Sub-Pixel Interpolation Schemes{\tt{"}} section below for
- details.
- }
- \sstsubsection{
- FINTERP = SUBROUTINE (Given)
- }{
- If the value given for the INTERP argument indicates that you
- will provide your own routine for sub-pixel interpolation,
- then the name of that routine should be given here (the name
- should also appear in a Fortran EXTERNAL statement in the
- routine which invokes AST\_RESAMPLE$<$X$>$). For details of the
- interface which the routine should have (several are
- possible, depending on the value of INTERP), see the
- {\tt{"}}Sub-Pixel Interpolation Schemes{\tt{"}} section below.
-
- If the INTERP argument has any other value, corresponding to
- one of the pre-defined interpolation schemes, then this
- routine will not be used and you may supply the null routine
- AST\_NULL here (note only one underscore). No EXTERNAL
- statement is required for this routine, so long as the AST\_PAR
- include file has been used.
- }
- \sstsubsection{
- PARAMS( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An optional array which should contain
- any additional parameter values required by the sub-pixel
- interpolation scheme. If such parameters are required, this
- will be noted in the {\tt{"}}Sub-Pixel Interpolation Schemes{\tt{"}}
- section below (you may also use this array to pass values
- to your own interpolation routine).
-
- If no additional parameters are required, this array is not
- used. A dummy (e.g. one-element) array may then be supplied.
- }
- \sstsubsection{
- FLAGS = INTEGER (Given)
- }{
- The sum of a set of flag values which may be used to
- provide additional control over the resampling operation. See
- the {\tt{"}}Control Flags{\tt{"}} section below for a description of the
- options available. If no flag values are to be set, a value
- of zero should be given.
- }
- \sstsubsection{
- TOL = DOUBLE PRECISION (Given)
- }{
- The maximum tolerable geometrical distortion which may be
- introduced as a result of approximating non-linear Mappings
- by a set of piece-wise linear transformations. This should be
- expressed as a displacement in pixels in the input grid's
- coordinate system.
-
- If piece-wise linear approximation is not required, a value
- of zero may be given. This will ensure that the Mapping is
- used without any approximation, but may increase execution
- time.
- }
- \sstsubsection{
- MAXPIX = INTEGER (Given)
- }{
- A value which specifies an initial scale size (in pixels) for
- the adaptive algorithm which approximates non-linear Mappings
- with piece-wise linear transformations. Normally, this should
- be a large value (larger than any dimension of the region of
- the output grid being used). In this case, a first attempt to
- approximate the Mapping by a linear transformation will be
- made over the entire output region.
-
- If a smaller value is used, the output region will first be
- divided into sub-regions whose size does not exceed MAXPIX
- pixels in any dimension. Only at this point will attempts at
- approximation commence.
-
- This value may occasionally be useful in preventing false
- convergence of the adaptive algorithm in cases where the
- Mapping appears approximately linear on large scales, but has
- irregularities (e.g. holes) on smaller scales. A value of,
- say, 50 to 100 pixels can also be employed as a safeguard in
- general-purpose software, since the effect on performance is
- minimal.
-
- If too small a value is given, it will have the effect of
- inhibiting linear approximation altogether (equivalent to
- setting TOL to zero). Although this may degrade
- performance, accurate results will still be obtained.
- }
- \sstsubsection{
- BADVAL = $<$Xtype$>$ (Given)
- }{
- This argument should have the same type as the elements of
- the IN array. It specifies the value used to flag missing
- data (bad pixels) in the input and output arrays.
-
- If the AST\_\_USEBAD flag is set via the FLAGS argument,
- then this value is used to test for bad pixels in the IN
- (and IN\_VAR) array(s).
-
- Unless the AST\_\_NOBAD flag is set via the FLAGS argument,
- this value is also used to flag any output
- elements in the OUT (and OUT\_VAR) array(s) for which
- resampled values could not be obtained (see the {\tt{"}}Propagation
- of Missing Data{\tt{"}} section below for details of the
- circumstances under which this may occur). The AST\_RESAMPLE$<$X$>$
- function return value indicates whether any such values have
- been produced. If the AST\_\_NOBAD flag is set. then output array
- elements for which no resampled value could be obtained are
- left set to the value they had on entry to this function.
- }
- \sstsubsection{
- NDIM\_OUT = INTEGER (Given)
- }{
- The number of dimensions in the output grid. This should be
- at least one. It need not necessarily be equal to the number
- of dimensions in the input grid.
- }
- \sstsubsection{
- LBND\_OUT( NDIM\_OUT ) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the centre of the first pixel
- in the output grid along each dimension.
- }
- \sstsubsection{
- UBND\_OUT( NDIM\_OUT ) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the centre of the last pixel in
- the output grid along each dimension.
-
- Note that LBND\_OUT and UBND\_OUT together define the
- shape, size and coordinate system of the output grid in the
- same way as LBND\_IN and UBND\_IN define the shape, size
- and coordinate system of the input grid.
- }
- \sstsubsection{
- LBND( NDIM\_OUT ) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the first pixel in the region
- of the output grid for which a resampled value is to be
- calculated.
- }
- \sstsubsection{
- UBND( NDIM\_OUT ) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the last pixel in the region of
- the output grid for which a resampled value is to be
- calculated.
-
- Note that LBND and UBND together define the shape and
- position of a (hyper-)rectangular region of the output grid
- for which resampled values should be produced. This region
- should lie wholly within the extent of the output grid (as
- defined by the LBND\_OUT and UBND\_OUT arrays). Regions of
- the output grid lying outside this region will not be
- modified.
- }
- \sstsubsection{
- OUT( $*$ ) = $<$Xtype$>$ (Returned)
- }{
- An array, with one element for each pixel in the
- output grid, into which the resampled data values will be
- returned. The numerical type of this array should match that
- of the IN array, and the data storage order should be such
- that the index of the first grid dimension varies most
- rapidly and that of the final dimension least rapidly
- (i.e. normal Fortran array storage order).
- }
- \sstsubsection{
- OUT\_VAR( $*$ ) = $<$Xtype$>$ (Returned)
- }{
- An optional array with the same type and size as the OUT
- array. If the AST\_\_USEVAR flag is set via the FLAGS argument,
- this array will be used to return variance estimates for the
- resampled data values.
-
- The output variance values will be calculated on the
- assumption that errors on the input data values are
- statistically independent and that their variance estimates
- may simply be summed (with appropriate weighting factors)
- when several input pixels contribute to an output data
- value. If this assumption is not valid, then the output error
- estimates may be biased. In addition, note that the
- statistical errors on neighbouring output data values (as
- well as the estimates of those errors) may often be
- correlated, even if the above assumption about the input data
- is correct, because of the sub-pixel interpolation schemes
- employed.
-
- If the AST\_\_USEVAR flag is not set, no output variance
- estimates will be calculated and this array will not be
- used. A dummy (e.g. one-element) array may then be supplied.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_RESAMPLE$<$X$>$ = INTEGER
- }{
- The number of output pixels for which no valid resampled value
- could be obtained. Thus, in the absence of any error, a returned
- value of zero indicates that all the required output pixels
- received valid resampled data values (and variances). See the
- BADVAL and FLAGS arguments.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A value of zero will be returned if this function is invoked
- with the global error status set, or if it should fail for any
- reason.
- }
- }
- \sstdiytopic{
- Data Type Codes
- }{
- To select the appropriate resampling function, you should
- replace $<$X$>$ in the generic function name AST\_RESAMPLE$<$X$>$ with a
- 1- or 2-character data type code, so as to match the numerical
- type $<$Xtype$>$ of the data you are processing, as follows:
- \sstitemlist{
-
- \sstitem
- D: DOUBLE PRECISION
-
- \sstitem
- R: REAL
-
- \sstitem
- I: INTEGER
-
- \sstitem
- UI: INTEGER (treated as unsigned)
-
- \sstitem
- S: INTEGER$*$2 (short integer)
-
- \sstitem
- US: INTEGER$*$2 (short integer, treated as unsigned)
-
- \sstitem
- B: BYTE (treated as signed)
-
- \sstitem
- UB: BYTE (treated as unsigned)
-
- }
- For example, AST\_RESAMPLED would be used to process DOUBLE
- PRECISION data, while AST\_RESAMPLES would be used to process
- short integer data (stored in an INTEGER$*$2 array), etc.
-
- For compatibility with other Starlink facilities, the codes W
- and UW are provided as synonyms for S and US respectively (but
- only in the Fortran interface to AST).
- }
- \sstdiytopic{
- Sub-Pixel Interpolation Schemes
- }{
- There is no such thing as a perfect sub-pixel interpolation
- scheme and, in practice, all resampling will result in some
- degradation of gridded data. A range of schemes is therefore
- provided, from which you can choose the one which best suits
- your needs.
-
- In general, a balance must be struck between schemes which tend
- to degrade sharp features in the data by smoothing them, and
- those which attempt to preserve sharp features. The latter will
- often tend to introduce unwanted oscillations, typically visible
- as {\tt{"}}ringing{\tt{"}} around sharp features and edges, especially if the
- data are under-sampled (i.e. if the sharpest features are less
- than about two pixels across). In practice, a good interpolation
- scheme is likely to be a compromise and may exhibit some aspects
- of both these features.
-
- For under-sampled data, some interpolation schemes may appear to
- preserve data resolution because they transform single input
- pixels into single output pixels, rather than spreading their
- data between several output pixels. While this may look
- better cosmetically, it can result in a geometrical shift of
- sharp features in the data. You should beware of this if you
- plan to use such features (e.g.) for image alignment.
-
- The following are two easy-to-use sub-pixel interpolation
- schemes which are generally applicable. They are selected by
- supplying the appropriate value (defined in the AST\_PAR include
- file) via the INTERP argument. In these cases, the FINTERP
- and PARAMS arguments are not used:
-
- \sstitemlist{
-
- \sstitem
- AST\_\_NEAREST: This is the simplest possible scheme, in which
- the value of the input pixel with the nearest centre to the
- interpolation point is used. This is very quick to execute and
- will preserve single-pixel features in the data, but may
- displace them by up to half their width along each dimension. It
- often gives a good cosmetic result, so is useful for quick-look
- processing, but is unsuitable if accurate geometrical
- transformation is required.
-
- \sstitem
- AST\_\_LINEAR: This is the default scheme, which uses linear
- interpolation between the nearest neighbouring pixels in the
- input grid (there are two neighbours in one dimension, four
- neighbours in two dimensions, eight in three dimensions,
- etc.). It is superior to the nearest-pixel scheme (above) in not
- displacing features in the data, yet it still executes fairly
- rapidly. It is generally a safe choice if you do not have any
- particular reason to favour another scheme, since it cannot
- introduce oscillations. However, it does introduce some spatial
- smoothing which varies according to the distance of the
- interpolation point from the neighbouring pixels. This can
- degrade the shape of sharp features in the data in a
- position-dependent way. It may also show in the output variance
- grid (if used) as a pattern of stripes or fringes.
-
- }
- An alternative set of interpolation schemes is based on forming
- the interpolated value from the weighted sum of a set of
- surrounding pixel values (not necessarily just the nearest
- neighbours). This approach has its origins in the theory of
- digital filtering, in which interpolated values are obtained by
- conceptually passing the sampled data (represented by a grid of
- delta functions) through a linear filter which implements a
- convolution. Because the convolution kernel is continuous, the
- convolution yields a continuous function which may then be
- evaluated at fractional pixel positions. The (possibly
- multi-dimensional) kernel is usually regarded as {\tt{"}}separable{\tt{"}} and
- formed from the product of a set of identical 1-dimensional
- kernel functions, evaluated along each dimension. Different
- interpolation schemes are then distinguished by the choice of
- this 1-dimensional interpolation kernel. The number of
- surrounding pixels which contribute to the result may also be
- varied.
-
- From a practical standpoint, it is useful to divide the weighted
- sum of pixel values by the sum of the weights when determining
- the interpolated value. Strictly, this means that a true
- convolution is no longer being performed. However, the
- distinction is rarely important in practice because (for
- slightly subtle reasons) the sum of weights is always
- approximately constant for good interpolation kernels. The
- advantage of this technique, which is used here, is that it can
- easily accommodate missing data and tends to minimise unwanted
- oscillations at the edges of the data grid.
-
- In the following schemes, which are based on a 1-dimensional
- interpolation kernel, the first element of the PARAMS array
- should be used to specify how many pixels are to contribute to the
- interpolated result on either side of the interpolation point in
- each dimension (the nearest integer value is used). Execution time
- increases rapidly with this number. Typically, a value of 2 is
- appropriate and the minimum value used will be 1 (i.e. two pixels
- altogether, one on either side of the interpolation point).
- A value of zero or less may be given for PARAMS(1)
- to indicate that a suitable number of pixels should be calculated
- automatically.
-
- In each of these cases, the FINTERP argument is not used:
-
- \sstitemlist{
-
- \sstitem
- AST\_\_SINC: This scheme uses a sinc(pi$*$x) kernel, where x is the
- pixel offset from the interpolation point and sinc(z)=sin(z)/z. This
- sometimes features as an {\tt{"}}optimal{\tt{"}} interpolation kernel in books on
- image processing. Its supposed optimality depends on the assumption
- that the data are band-limited (i.e. have no spatial frequencies above
- a certain value) and are adequately sampled. In practice, astronomical
- data rarely meet these requirements. In addition, high spatial
- frequencies are often present due (e.g.) to image defects and cosmic
- ray events. Consequently, substantial ringing can be experienced with
- this kernel. The kernel also decays slowly with distance, so that
- many surrounding pixels are required, leading to poor performance.
- Abruptly truncating it, by using only a few neighbouring pixels,
- improves performance and may reduce ringing (if PARAMS(1) is set to
- zero, then only two pixels will be used on either side). However, a
- more gradual truncation, as implemented by other kernels, is generally
- to be preferred. This kernel is provided mainly so that you can
- convince yourself not to use it!
-
- \sstitem
- AST\_\_SINCSINC: This scheme uses an improved kernel, of the form
- sinc(pi$*$x).sinc(k$*$pi$*$x), with k a constant, out to the point where
- sinc(k$*$pi$*$x) goes to zero, and zero beyond. The second sinc() factor
- provides an {\tt{"}}envelope{\tt{"}} which gradually rolls off the normal sinc(pi$*$x)
- kernel at large offsets. The width of this envelope is specified by
- giving the number of pixels offset at which it goes to zero by means
- of the PARAMS(2) value, which should be at least 1.0 (in addition,
- setting PARAMS(1) to zero will select the number of contributing
- pixels so as to utilise the full width of the kernel, out to where it
- reaches zero). The case given by PARAMS(1)=2, PARAMS(2)=2 is typically
- a good choice and is sometimes known as the Lanczos kernel. This is a
- valuable general-purpose interpolation scheme, intermediate in its
- visual effect on images between the AST\_\_NEAREST and AST\_\_LINEAR
- schemes. Although the kernel is slightly oscillatory, ringing is
- adequately suppressed if the data are well sampled.
-
- \sstitem
- AST\_\_SINCCOS: This scheme uses a kernel of the form
- sinc(pi$*$x).cos(k$*$pi$*$x), with k a constant, out to the point where
- cos(k$*$pi$*$x) goes to zero, and zero beyond. As above, the cos() factor
- provides an envelope which gradually rolls off the sinc() kernel
- at large offsets. The width of this envelope is specified by giving
- the number of pixels offset at which it goes to zero by means
- of the PARAMS(2) value, which should be at least 1.0 (in addition,
- setting PARAMS(1) to zero will select the number of contributing
- pixels so as to utilise the full width of the kernel, out to where it
- reaches zero). This scheme gives similar results to the
- AST\_\_SINCSINC scheme, which it resembles.
-
- \sstitem
- AST\_\_SINCGAUSS: This scheme uses a kernel of the form
- sinc(pi$*$x).exp(-k$*$x$*$x), with k a positive constant. Here, the sinc()
- kernel is rolled off using a Gaussian envelope which is specified by
- giving its full-width at half-maximum (FWHM) by means of the PARAMS(2)
- value, which should be at least 0.1 (in addition, setting PARAMS(1)
- to zero will select the number of contributing pixels so as to utilise
- the width of the kernel out to where the envelope declines to 1\% of its
- maximum value). On astronomical images and spectra, good results are
- often obtained by approximately matching the FWHM of the
- envelope function, given by PARAMS(2), to the point spread function
- of the input data. However, there does not seem to be any theoretical
- reason for this.
-
- \sstitem
- AST\_\_SOMB: This scheme uses a somb(pi$*$x) kernel (a {\tt{"}}sombrero{\tt{"}}
- function), where x is the pixel offset from the interpolation point
- and somb(z)=2$*$J1(z)/z (J1 is a Bessel function of the first kind of
- order 1). It is similar to the AST\_\_SINC kernel, and has the same
- parameter usage.
-
- \sstitem
- AST\_\_SOMBCOS: This scheme uses a kernel of the form
- somb(pi$*$x).cos(k$*$pi$*$x), with k a constant, out to the point where
- cos(k$*$pi$*$x) goes to zero, and zero beyond. It is similar to the
- AST\_\_SINCCOS kernel, and has the same parameter usage.
-
- }
- In addition, the following schemes are provided which are not based
- on a 1-dimensional kernel:
-
- \sstitemlist{
-
- \sstitem
- AST\_\_BLOCKAVE: This scheme simply takes an average of all the
- pixels on the input grid in a cube centred on the interpolation
- point. The number of pixels in the cube is determined by the
- value of the first element of the PARAMS array, which gives
- the number of pixels in each dimension on either side of the
- central point. Hence a block of (2 $*$ PARAMS(1))$*$$*$NDIM\_IN
- pixels in the input grid will be examined to determine the
- value of the output pixel. If the variance is not being used
- (USEVAR = .FALSE.) then all valid pixels in this cube
- will be averaged in to the result with equal weight.
- If variances are being used, then each input pixel will be
- weighted proportionally to the reciprocal of its variance; any
- pixel without a valid variance will be discarded. This scheme
- is suitable where the output grid is much coarser than the
- input grid; if the ratio of pixel sizes is R then a suitable
- value of PARAMS(1) may be R/2.
-
- }
- Finally, supplying the following values for INTERP allows you to
- implement your own sub-pixel interpolation scheme by means of
- your own routine. You should supply the name of this routine via
- the FINTERP argument:
-
- \sstitemlist{
-
- \sstitem
- AST\_\_UKERN1: In this scheme, you supply a routine to evaluate
- your own 1-dimensional interpolation kernel, which is then used
- to perform sub-pixel interpolation (as described above). The
- routine you supply should have the same interface as the
- fictitious \htmlref{AST\_UKERN1}{AST_UKERN1} routine (q.v.). In addition, a value
- should be given via PARAMS(1) to specify the number of
- neighbouring pixels which are to contribute to each interpolated
- value (in the same way as for the pre-defined interpolation
- schemes described above). Other elements of the PARAMS array
- are available to pass values to your interpolation routine.
-
- \sstitem
- AST\_\_UINTERP: This is a completely general scheme, in which
- your interpolation routine has access to all of the input
- data. This allows you to implement any interpolation algorithm
- you choose, which could (for example) be non-linear, or
- adaptive. In this case, the AST\_RESAMPLE$<$X$>$ functions play no
- role in the sub-pixel interpolation process and simply handle
- the geometrical transformation of coordinates and other
- housekeeping. The routine you supply should have the same
- interface as the fictitious \htmlref{AST\_UINTERP}{AST_UINTERP} routine (q.v.). In this
- case, the PARAMS argument is not used by AST\_RESAMPLE$<$X$>$, but
- is available to pass values to your interpolation routine.
- }
- }
- \sstdiytopic{
- Control Flags
- }{
- The following flags are defined in the AST\_PAR include file and
- may be used to provide additional control over the resampling
- process. Having selected a set of flags, you should supply the
- sum of their values via the FLAGS argument:
-
- \sstitemlist{
-
- \sstitem
- AST\_\_NOBAD: Indicates that any output array elements for which no
- resampled value could be obtained should be left set to the value
- they had on entry to this function. If this flag is not supplied,
- such output array elements are set to the value supplied for
- argument BADVAL. Note, this flag cannot be used in conjunction
- with the AST\_\_CONSERVEFLUX flag (an error will be reported if both
- flags are specified).
-
- \sstitem
- AST\_\_URESAMP1, 2, 3 \& 4: A set of four flags which are
- reserved for your own use. They may be used to pass private
- information to any sub-pixel interpolation routine which you
- implement yourself. They are ignored by all the pre-defined
- interpolation schemes.
-
- \sstitem
- AST\_\_USEBAD: Indicates that there may be bad pixels in the
- input array(s) which must be recognised by comparing with the
- value given for BADVAL and propagated to the output array(s).
- If this flag is not set, all input values are treated literally
- and the BADVAL value is only used for flagging output array
- values.
-
- \sstitem
- AST\_\_USEVAR: Indicates that variance information should be
- processed in order to provide estimates of the statistical error
- associated with the resampled values. If this flag is not set,
- no variance processing will occur and the IN\_VAR and OUT\_VAR
- arrays will not be used. (Note that this flag is only available
- in the Fortran interface to AST.)
-
- \sstitem
- AST\_\_CONSERVEFLUX: Indicates that the output pixel values should
- be scaled in such a way as to preserve (approximately) the total data
- value in a feature on the sky. Without this flag, each output pixel
- value represents an instantaneous sample of the input data values at
- the corresponding input position. This is appropriate if the input
- data represents the spatial density of some quantity (e.g. surface
- brightness in Janskys per square arc-second) because the output
- pixel values will have the same normalisation and units as the
- input pixel values. However, if the input data values represent
- flux (or some other physical quantity) per pixel, then the
- AST\_\_CONSERVEFLUX flag could be used. This causes each output
- pixel value to be scaled by the ratio of the output pixel size to
- the input pixel size.
-
- }
- This flag can only be used if the Mapping is succesfully approximated
- by one or more linear transformations. Thus an error will be reported
- if it used when the
- TOL argument
- is set to zero (which stops the use of linear approximations), or
- if the Mapping is too non-linear to be approximated by a piece-wise
- linear transformation. The ratio of output to input pixel size is
- evaluated once for each panel of the piece-wise linear approximation to
- the Mapping, and is assumed to be constant for all output pixels in the
- panel. The scaling factors for adjacent panels will in general
- differ slightly, and so the joints between panels may be visible when
- viewing the output image at high contrast. If this is a problem,
- reduce the value of the
- TOL argument
- until the difference between adjacent panels is sufficiently small
- to be insignificant.
-
- Note, this flag cannot be used in conjunction with the AST\_\_NOBAD
- flag (an error will be reported if both flags are specified).
-
- Flux conservation can only be approximate when using a resampling
- algorithm. For accurate flux conservation use the
- AST\_REBIN$<$X$>$ or AST\_REBINSEQ$<$X$>$ routine
- instead.
- }
- \sstdiytopic{
- Propagation of Missing Data
- }{
- Unless the AST\_\_NOBAD flag is specified, instances of missing data
- (bad pixels) in the output grid are
- identified by occurrences of the BADVAL value in the OUT
- array. These may be produced if any of the following happen:
-
- \sstitemlist{
-
- \sstitem
- The input position (the transformed position of the output
- pixel's centre) lies outside the boundary of the grid of input
- pixels.
-
- \sstitem
- The input position lies inside the boundary of a bad input
- pixel. In this context, an input pixel is considered bad if its
- data value is equal to BADVAL and the AST\_\_USEBAD flag is
- set via the FLAGS argument.
- (Positions which have half-integral coordinate values, and
- therefore lie on a pixel boundary, are regarded as lying within
- the pixel with the larger, i.e. more positive, index.)
-
- \sstitem
- The set of neighbouring input pixels (excluding those which
- are bad) is unsuitable for calculating an interpolated
- value. Whether this is true may depend on the sub-pixel
- interpolation scheme in use.
-
- \sstitem
- The interpolated value lies outside the range which can be
- represented using the data type of the OUT array.
-
- }
- In addition, associated output variance estimates (if
- calculated) may be declared bad and flagged with the BADVAL
- value in the OUT\_VAR array under any of the following
- circumstances:
-
- \sstitemlist{
-
- \sstitem
- The associated resampled data value (in the OUT array) is bad.
-
- \sstitem
- The set of neighbouring input pixels which contributed to the
- output data value do not all have valid variance estimates
- associated with them. In this context, an input variance
- estimate may be regarded as bad either because it has the value
- BADVAL (and the AST\_\_USEBAD flag is set), or because it is
- negative.
-
- \sstitem
- The set of neighbouring input pixels for which valid variance
- values are available is unsuitable for calculating an overall
- variance value. Whether this is true may depend on the sub-pixel
- interpolation scheme in use.
-
- \sstitem
- The variance value lies outside the range which can be
- represented using the data type of the OUT\_VAR array.
-
- }
- If the AST\_\_NOBAD flag is specified via
- argument FLAGS,
- then output array elements that would otherwise be set to
- BADVAL
- are instead left holding the value they had on entry to this
- function. The number of such array elements is returned as
- the function value.
- }
-}
-\sstroutine{
- AST\_RESOLVE\sstlabel{AST_RESOLVE}
-}{
- Resolve a vector into two orthogonal components
-}{
- \sstdescription{
- This routine resolves a vector into two perpendicular components.
- The vector from point 1 to point 2 is used as the basis vector.
- The vector from point 1 to point 3 is resolved into components
- parallel and perpendicular to this basis vector. The lengths of the
- two components are returned, together with the position of closest
- aproach of the basis vector to point 3.
- }
- \sstinvocation{
- CALL AST\_RESOLVE( THIS, POINT1, POINT2, POINT3, POINT4, D1, D2,
- STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the \htmlref{Frame}{Frame}.
- }
- \sstsubsection{
- POINT1( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each Frame axis
- (\htmlref{Naxes}{Naxes} attribute). This marks the start of the basis vector,
- and of the vector to be resolved.
- }
- \sstsubsection{
- POINT2( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each Frame axis
- (Naxes attribute). This marks the end of the basis vector.
- }
- \sstsubsection{
- POINT3( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array with one element for each Frame axis
- (Naxes attribute). This marks the end of the vector to be
- resolved.
- }
- \sstsubsection{
- POINT4( $*$ ) = DOUBLE PRECISION (Returned)
- }{
- An array with one element for each Frame axis
- in which the coordinates of the point of closest approach of the
- basis vector to point 3 will be returned.
- }
- \sstsubsection{
- D1 = DOUBLE PRECISION (Returned)
- }{
- The distance from
- point 1 to point 4 (that is, the length of the component parallel
- to the basis vector). Positive values are in the same sense as
- movement from point 1 to point 2.
- }
- \sstsubsection{
- D2 = DOUBLE PRECISION (Returned)
- }{
- The distance from
- point 4 to point 3 (that is, the length of the component
- perpendicular to the basis vector). The value is always positive.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Each vector used in this routine is the path of
- shortest distance between two points, as defined by the
- \htmlref{AST\_DISTANCE}{AST_DISTANCE} function.
-
- \sstitem
- This function will return {\tt{"}}bad{\tt{"}} coordinate values (AST\_\_BAD)
- if any of the input coordinates has this value, or if the required
- output values are undefined.
- }
- }
-}
-\sstroutine{
- AST\_RETAINFITS\sstlabel{AST_RETAINFITS}
-}{
- Indicate that the current card in a FitsChan should be retained
-}{
- \sstdescription{
- This routine
- stores a flag with the current card in the \htmlref{FitsChan}{FitsChan} indicating that
- the card should not be removed from the FitsChan when an \htmlref{Object}{Object} is
- read from the FitsChan using
- \htmlref{AST\_READ}{AST_READ}.
-
- Cards that have not been flagged in this way are removed when a
- read operation completes succesfully, but only if the card was used
- in the process of creating the returned AST Object. Any cards that
- are irrelevant to the creation of the AST Object are retained whether
- or not they are flagged.
- }
- \sstinvocation{
- CALL AST\_RETAINFITS( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the FitsChan.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function returns without action if the FitsChan is
- initially positioned at the {\tt{"}}end-of-file{\tt{"}} (i.e. if the \htmlref{Card}{Card}
- attribute exceeds the number of cards in the FitsChan).
-
- \sstitem
- The current card is not changed by this function.
- }
- }
-}
-\sstroutine{
- AST\_SAME\sstlabel{AST_SAME}
-}{
- Test if two AST pointers refer to the same Object
-}{
- \sstdescription{
- This function returns a logical result to indicate
- whether two pointers refer to the same \htmlref{Object}{Object}.
- }
- \sstinvocation{
- RESULT = AST\_SAME( THIS, THAT, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the first Object.
- }
- \sstsubsection{
- THAT = INTEGER (Given)
- }{
- Pointer to the second Object.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This routine applies to all Objects.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_SAME = LOGICAL
- }{
- .TRUE. if the two pointers refer to the same Object, otherwise
- .FALSE.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Two independent Objects that happen to be identical are not
- considered to be the same Object by this function.
-
- \sstitem
- A value of .FALSE. will be returned if this function is invoked
- with STATUS set to an error value, or if it should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_SELECTORMAP\sstlabel{AST_SELECTORMAP}
-}{
- Create a SelectorMap
-}{
- \sstdescription{
- This function creates a new \htmlref{SelectorMap}{SelectorMap} and optionally initialises
- its attributes.
-
- A SelectorMap is a \htmlref{Mapping}{Mapping} that identifies which \htmlref{Region}{Region} contains
- a given input position.
-
- A SelectorMap encapsulates a number of Regions that all have the same
- number of axes and represent the same coordinate \htmlref{Frame}{Frame}. The number of
- inputs (\htmlref{Nin}{Nin} attribute) of the SelectorMap equals the number of axes
- spanned by one of the encapsulated Region. All SelectorMaps have only
- a single output. SelectorMaps do not define an inverse transformation.
-
- For each input position, the forward transformation of a SelectorMap
- searches through the encapsulated Regions (in the order supplied when
- the SelectorMap was created) until a Region is found which contains
- the input position. The index associated with this Region is
- returned as the SelectorMap output value (the index value is the
- position of the Region within the list of Regions supplied when the
- SelectorMap was created, starting at 1 for the first Region). If an
- input position is not contained within any Region, a value of zero is
- returned by the forward transformation.
-
- If a compound Mapping contains a SelectorMap in series with its own
- inverse, the combination of the two adjacent SelectorMaps will be
- replaced by a \htmlref{UnitMap}{UnitMap} when the compound Mapping is simplified using
- \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}.
-
- In practice, SelectorMaps are often used in conjunction with SwitchMaps.
- }
- \sstinvocation{
- RESULT = AST\_SELECTORMAP( NREG, REGS, BADVAL, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- NREG = INTEGER (Given)
- }{
- The number of supplied Regions.
- }
- \sstsubsection{
- REGS( NREG ) = INTEGER (Given)
- }{
- An array of pointers to the Regions. All the supplied Regions must
- relate to the same coordinate Frame. The number of axes in this
- coordinate Frame defines the number of inputs for the SelectorMap.
- }
- \sstsubsection{
- BADVAL = DOUBLE PRECISION (Given)
- }{
- The value to be returned by the forward transformation of the
- SelectorMap for any input positions that have a bad (AST\_\_BAD)
- value on any axis.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new SelectorMap. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_SELECTORMAP = INTEGER
- }{
- A pointer to the new SelectorMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Deep copies are taken of the supplied Regions. This means that
- any subsequent changes made to the component Regions using the
- supplied pointers will have no effect on the SelectorMap.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_SET\sstlabel{AST_SET}
-}{
- Set attribute values for an Object
-}{
- \sstdescription{
- This routine assigns a set of attribute values to an \htmlref{Object}{Object},
- over-riding any previous values. The attributes and their new
- values are specified via a character string, which should
- contain a comma-separated list of the form:
-
- {\tt{"}}attribute\_1 = value\_1, attribute\_2 = value\_2, ... {\tt{"}}
-
- where {\tt{"}}attribute\_n{\tt{"}} specifies an attribute name, and the value
- to the right of each {\tt{"}}={\tt{"}} sign should be a suitable textual
- representation of the value to be assigned. This value will be
- interpreted according to the attribute's data type.
- }
- \sstinvocation{
- CALL AST\_SET( THIS, SETTINGS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Object.
- }
- \sstsubsection{
- SETTINGS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing a comma-separated list of
- attribute settings in the form described above.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This routine applies to all Objects.
- }
- }
- \sstexamples{
- \sstexamplesubsection{
- CALL AST\_SET( MAP, '\htmlref{Report}{Report} = 1, \htmlref{Zoom}{Zoom} = 25.0', STATUS )
- }{
- Sets the Report attribute for Object MAP to the value 1 and
- the Zoom attribute to 25.0.
- }
- \sstexamplesubsection{
- CALL AST\_SET( FRAME, 'Label( 1 ) =Offset from cluster axis', STATUS )
- }{
- Sets the Label(1) attribute for Object FRAME to a suitable
- string.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Attribute names are not case sensitive and may be surrounded
- by white space.
-
- \sstitem
- White space may also surround attribute values, where it will
- generally be ignored (except for string-valued attributes where
- it is significant and forms part of the value to be assigned).
-
- \sstitem
- It is not possible to include a comma in the value to be
- assigned to an attribute using this routine. If such a value is
- needed, then AST\_SETC should be used instead.
-
- \sstitem
- An error will result if an attempt is made to set a value for
- a read-only attribute.
- }
- }
-}
-\sstroutine{
- AST\_SET$<$X$>$\sstlabel{AST_SETX}
-}{
- Set an attribute value for an Object
-}{
- \sstdescription{
- This is a family of routines which set a specified attribute
- value for an \htmlref{Object}{Object} using one of several different data
- types. The type is selected by replacing $<$X$>$ in the routine name
- by C, D, I, L or R, to supply a value in Character, Double
- precision, Integer, Logical or Real format, respectively.
-
- If possible, the value you supply is converted to the type of
- the attribute. If conversion is not possible, an error will
- result.
- }
- \sstinvocation{
- CALL AST\_SET$<$X$>$( THIS, ATTRIB, VALUE, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Object.
- }
- \sstsubsection{
- ATTRIB = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing the name of the attribute whose
- value is to be set.
- }
- \sstsubsection{
- VALUE = $<$X$>$type (Given)
- }{
- The value to be set for the attribute, in the data type corresponding
- to $<$X$>$.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- These routines apply to all Objects.
- }
- }
- \sstexamples{
- \sstexamplesubsection{
- CALL AST\_SETC( PLOT, '\htmlref{Title}{Title}', CVALUE, STATUS )
- }{
- Sets the Title attribute value for Object PLOT to the contents
- of the character variable CVALUE.
- }
- \sstexamplesubsection{
- CALL AST\_SETL( FRAME, 'Preserve', .TRUE., STATUS );
- }{
- Sets the Preserve attribute value for Object FRAME to 1 (true).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Attribute names are not case sensitive and may be surrounded
- by white space.
-
- \sstitem
- The logical value .FALSE. will translate to a numerical attribute
- value of zero and logical .TRUE. will translate to one.
-
- \sstitem
- An error will result if an attempt is made to set a value for
- a read-only attribute.
- }
- }
-}
-\sstroutine{
- AST\_SETACTIVEUNIT\sstlabel{AST_SETACTIVEUNIT}
-}{
- Specify how the Unit attribute should be used
-}{
- \sstdescription{
- This routine
- sets the current value of the ActiveUnit flag for a \htmlref{Frame}{Frame}, which
- controls how the Frame behaves when it is used (by
- \htmlref{AST\_FINDFRAME}{AST_FINDFRAME} or \htmlref{AST\_CONVERT}{AST_CONVERT})
- to match another Frame. If the ActiveUnit flag is set in both
- template and target Frames then the returned \htmlref{Mapping}{Mapping} takes into account
- any differences in axis units. The default value for simple Frames is
- zero, which preserves the behaviour of versions of AST prior to
- version 2.0.
-
- If the ActiveUnit flag of either Frame is
- .FALSE.,
- then the Mapping will ignore any difference in the Unit attributes of
- corresponding template and target axes. In this mode, the Unit
- attributes are purely descriptive commentary for the benefit of
- human readers and do not influence the Mappings between Frames.
- This is the behaviour which all Frames had in older version of AST,
- prior to the introduction of this attribute.
-
- If the ActiveUnit flag of both Frames is
- .TRUE.,
- then the Mapping from template to target will take account of any
- difference in the axis Unit attributes, where-ever possible. For
- instance, if corresponding target and template axes have Unit strings of
- {\tt{"}}km{\tt{"}} and {\tt{"}}m{\tt{"}}, then the \htmlref{FrameSet}{FrameSet} class will use a \htmlref{ZoomMap}{ZoomMap} to connect
- them which introduces a scaling of 1000. If no Mapping can be found
- between the corresponding units string, then an error is reported.
- In this mode, it is assumed that values of the Unit attribute conform
- to the syntax for units strings described in the FITS WCS Paper I
- {\tt{"}}Representations of world coordinates in FITS{\tt{"}} (Greisen \& Calabretta).
- Particularly, any of the named unit symbols, functions, operators or
- standard multiplier prefixes listed within that paper can be used within
- a units string. A units string may contain symbols for unit which are
- not listed in the FITS paper, but transformation to any other units
- will then not be possible (except to units which depend only on the
- same unknown units - thus {\tt{"}}flops{\tt{"}} can be transformed to {\tt{"}}Mflops{\tt{"}}
- even though {\tt{"}}flops{\tt{"}} is not a standard FITS unit symbol).
-
- A range of common non-standard variations of unit names and multiplier
- prefixes are also allowed, such as adding an {\tt{"}}s{\tt{"}} to the end of Angstrom,
- using a lower case {\tt{"}}a{\tt{"}} at the start of {\tt{"}}angstrom{\tt{"}}, {\tt{"}}micron{\tt{"}} instead of
- {\tt{"}}um{\tt{"}}, {\tt{"}}sec{\tt{"}} instead of {\tt{"}}s{\tt{"}}, etc.
-
- If the ActiveUnit flag is .TRUE., setting a new Unit value for an
- axis may also change its Label and Symbol attributes. For instance, if
- an axis has Unit {\tt{"}}Hz{\tt{"}} and Label {\tt{"}}frequency{\tt{"}}, then changing its Unit to
- {\tt{"}}log(Hz){\tt{"}} will change its Label to {\tt{"}}log( frequency ){\tt{"}}. In addition,
- the \htmlref{Axis}{Axis} Format attribute will be cleared when-ever a new value
- is assigned to the Unit attribute.
-
- Note, if a .TRUE. value is set for the ActiveUnit flag, then changing a
- Unit value for the current Frame within a FrameSet will result in the
- Frame being re-mapped (that is, the Mappings which define the
- relationships between Frames within the FrameSet will be modified to
- take into account the change in Units).
- }
- \sstinvocation{
- CALL AST\_SETACTIVEUNIT( THIS, VALUE, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Frame.
- }
- \sstsubsection{
- VALUE = LOGICAL (Given)
- }{
- The new value to use.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- The ActiveUnit flag for a SkyFrame is always .FALSE. (any value
- supplied using this routine is ignored).
- }
- \sstsubsection{
- \htmlref{SpecFrame}{SpecFrame}
- }{
- The ActiveUnit flag for a SpecFrame is always .TRUE. (any value
- supplied using this routine is ignored).
- }
- \sstsubsection{
- \htmlref{FluxFrame}{FluxFrame}
- }{
- The ActiveUnit flag for a FluxFrame is always .TRUE. (any value
- supplied using this routine is ignored).
- }
- \sstsubsection{
- \htmlref{CmpFrame}{CmpFrame}
- }{
- The default ActiveUnit flag for a CmpFrame is .TRUE. if both of the
- component Frames are using active units, and .FALSE. otherwise. When
- a new value is set for the ActiveUnit flag, the flag value
- is propagated to the component Frames. This change will be
- reflected through all references to the component Frames, not
- just those encapsulated within the CmpFrame.
- }
- \sstsubsection{
- \htmlref{Region}{Region}:
- }{
- Regions always use active units if possible.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The ActiveUnit flag resembles a Frame attribute, except that it
- cannot be tested or cleared, and it cannot be accessed using the
- generic \htmlref{AST\_GET$<$X$>$}{AST_GETX} and \htmlref{AST\_SET$<$X$>$}{AST_SETX} routines.
-
- \sstitem
- The \htmlref{AST\_GETACTIVEUNIT}{AST_GETACTIVEUNIT} routine can be used to retrieve the current
- value of the ActiveUnit flag.
- }
- }
-}
-\sstroutine{
- AST\_SETFITS$<$X$>$\sstlabel{AST_SETFITSX}
-}{
- Store a keyword value in a FitsChan
-}{
- \sstdescription{
- This is a family of routines which store values for named keywords
- within a \htmlref{FitsChan}{FitsChan} at the current card position. The supplied keyword
- value can either over-write an existing keyword value, or can be
- inserted as a new header card into the FitsChan.
-
- The keyword data type is selected by replacing $<$X$>$ in the routine name
- by one of the following strings representing the recognised FITS data
- types:
-
- \sstitemlist{
-
- \sstitem
- CF - Complex floating point values.
-
- \sstitem
- CI - Complex integer values.
-
- \sstitem
- F - Floating point values.
-
- \sstitem
- I - Integer values.
-
- \sstitem
- L - Logical (i.e. boolean) values.
-
- \sstitem
- S - String values.
-
- \sstitem
- CN - A {\tt{"}}CONTINUE{\tt{"}} value, these are treated like string values, but
- are encoded without an equals sign.
-
- }
- The data type of the {\tt{"}}value{\tt{"}} parameter depends on $<$X$>$ as follows:
-
- \sstitemlist{
-
- \sstitem
- CF - DOUBLE PRECISION(2) (a 2 element array holding the real and
- imaginary parts of the complex value).
-
- \sstitem
- CI - INTEGER(2) (a 2 element array holding the real and imaginary
- parts of the complex value).
-
- \sstitem
- F - DOUBLE PRECISION.
-
- \sstitem
- I - INTEGER
-
- \sstitem
- L - LOGICAL
-
- \sstitem
- S - CHARACTER
-
- \sstitem
- CN - CHARACTER
- }
- }
- \sstinvocation{
- CALL AST\_SETFITS$<$X$>$( THIS, NAME, VALUE, COMMENT, OVERWRITE, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the FitsChan.
- }
- \sstsubsection{
- NAME = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string
- containing the FITS keyword name. This may be a complete FITS
- header card, in which case the keyword to use is extracted from
- it. No more than 80 characters are read from this string.
- }
- \sstsubsection{
- VALUE = $<$X$>$type (Given)
- }{
- The keyword value to store with the named keyword. The data type
- of this parameter depends on $<$X$>$ as described above.
- }
- \sstsubsection{
- COMMENT = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A string
- holding a comment to associated with the keyword.
- If
- a blank string is supplied, then any comment included in the string
- supplied for the
- NAME parameter is used instead. If NAME
- contains no comment, then any existing comment in the card being
- over-written is retained. Otherwise, no comment is stored with
- the card.
- }
- \sstsubsection{
- OVERWRITE = LOGICAL (Given)
- }{
- If .TRUE.,
- the new card formed from the supplied keyword name, value and comment
- string over-writes the current card, and the current card is
- incremented to refer to the next card (see the {\tt{"}}\htmlref{Card}{Card}{\tt{"}} attribute). If
- .FALSE.,
- the new card is inserted in front of the current card and the current
- card is left unchanged. In either case, if the current card on entry
- points to the {\tt{"}}end-of-file{\tt{"}}, the new card is appended to the end of
- the list.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The
- routine \htmlref{AST\_SETFITSU}{AST_SETFITSU}
- can be used to indicate that no value is associated with a keyword.
-
- \sstitem
- The
- routine \htmlref{AST\_SETFITSCM}{AST_SETFITSCM}
- can be used to store a pure comment card (i.e. a card with a blank
- keyword).
-
- \sstitem
- To assign a new value for an existing keyword within a FitsChan,
- first find the card describing the keyword using \htmlref{AST\_FINDFITS}{AST_FINDFITS}, and
- then use one of the AST\_SETFITS$<$X$>$ family to over-write the old value.
-
- \sstitem
- If, on exit, there are no cards following the card written by
- this routine, then the current card is left pointing at the
- {\tt{"}}end-of-file{\tt{"}}.
-
- \sstitem
- An error will be reported if the keyword name does not conform
- to FITS requirements.
- }
- }
-}
-\sstroutine{
- AST\_SETFITSCM\sstlabel{AST_SETFITSCM}
-}{
- Store a comment card in a FitsChan
-}{
- \sstdescription{
- This
- routine
- stores a comment card ( i.e. a card with no keyword name or equals
- sign) within a \htmlref{FitsChan}{FitsChan} at the current card position. The new card
- can either over-write an existing card, or can be inserted as a new
- card into the FitsChan.
- }
- \sstinvocation{
- CALL AST\_SETFITSCM( THIS, COMMENT, OVERWRITE, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the FitsChan.
- }
- \sstsubsection{
- COMMENT = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A string
- holding the text of the comment card.
- If
- a blank string is supplied, then a totally blank card is produced.
- }
- \sstsubsection{
- OVERWRITE = LOGICAL (Given)
- }{
- If .TRUE.,
- the new card over-writes the current card, and the current card is
- incremented to refer to the next card (see the {\tt{"}}\htmlref{Card}{Card}{\tt{"}} attribute). If
- .FALSE.,
- the new card is inserted in front of the current card and the current
- card is left unchanged. In either case, if the current card on entry
- points to the {\tt{"}}end-of-file{\tt{"}}, the new card is appended to the end of
- the list.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If, on exit, there are no cards following the card written by
- this function, then the current card is left pointing at the
- {\tt{"}}end-of-file{\tt{"}}.
- }
- }
-}
-\sstroutine{
- AST\_SETFITSU\sstlabel{AST_SETFITSU}
-}{
- Store an undefined keyword value in a FitsChan
-}{
- \sstdescription{
- This
- routine
- stores an undefined value for a named keyword within
- a \htmlref{FitsChan}{FitsChan} at the current card position. The new undefined value
- can either over-write an existing keyword value, or can be inserted
- as a new header card into the FitsChan.
- }
- \sstinvocation{
- CALL AST\_SETFITSU( THIS, NAME, COMMENT, OVERWRITE, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the FitsChan.
- }
- \sstsubsection{
- NAME = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string
- containing the FITS keyword name. This may be a complete FITS
- header card, in which case the keyword to use is extracted from
- it. No more than 80 characters are read from this string.
- }
- \sstsubsection{
- COMMENT = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A string
- holding a comment to associated with the keyword.
- If
- a blank string is supplied, then any comment included in the string
- supplied for the
- NAME parameter is used instead. If NAME
- contains no comment, then any existing comment in the card being
- over-written is retained. Otherwise, no comment is stored with
- the card.
- }
- \sstsubsection{
- OVERWRITE = LOGICAL (Given)
- }{
- If .TRUE.,
- the new card formed from the supplied keyword name and comment
- string over-writes the current card, and the current card is
- incremented to refer to the next card (see the {\tt{"}}\htmlref{Card}{Card}{\tt{"}} attribute). If
- .FALSE.,
- the new card is inserted in front of the current card and the current
- card is left unchanged. In either case, if the current card on entry
- points to the {\tt{"}}end-of-file{\tt{"}}, the new card is appended to the end of
- the list.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If, on exit, there are no cards following the card written by
- this function, then the current card is left pointing at the
- {\tt{"}}end-of-file{\tt{"}}.
-
- \sstitem
- An error will be reported if the keyword name does not conform
- to FITS requirements.
- }
- }
-}
-\sstroutine{
- AST\_SETREFPOS\sstlabel{AST_SETREFPOS}
-}{
- Set the reference position in a specified celestial coordinate system
-}{
- \sstdescription{
- This routine
- sets the reference position (see attributes \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec}) using
- axis values (in radians) supplied within the celestial coordinate
- system represented by a supplied \htmlref{SkyFrame}{SkyFrame}.
- }
- \sstinvocation{
- CALL AST\_SETREFPOS( THIS, FRM, LON, LAT, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the \htmlref{SpecFrame}{SpecFrame}.
- }
- \sstsubsection{
- FRM = INTEGER (Given)
- }{
- Pointer to the SkyFrame which defines the celestial coordinate
- system in which the longitude and latitude values are supplied.
- If AST\_\_NULL
- is supplied, then the supplied longitude and latitude values are
- assumed to be FK5 J2000 RA and Dec values.
- }
- \sstsubsection{
- LON = DOUBLE PRECISION (Given)
- }{
- The longitude of the reference point, in the coordinate system
- represented by the supplied SkyFrame (radians).
- }
- \sstsubsection{
- LAT = DOUBLE PRECISION (Given)
- }{
- The latitude of the reference point, in the coordinate system
- represented by the supplied SkyFrame (radians).
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
-}
-\sstroutine{
- AST\_SETUNC\sstlabel{AST_SETUNC}
-}{
- Store uncertainty information in a Region
-}{
- \sstdescription{
- Each \htmlref{Region}{Region} (of any class) can have an {\tt{"}}uncertainty{\tt{"}} which specifies
- the uncertainties associated with the boundary of the Region. This
- information is supplied in the form of a second Region. The uncertainty
- in any point on the boundary of a Region is found by shifting the
- associated {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at the boundary
- point being considered. The area covered by the shifted uncertainty
- Region then represents the uncertainty in the boundary position.
- The uncertainty is assumed to be the same for all points.
-
- The uncertainty is usually specified when the Region is created, but
- this
- routine
- allows it to be changed at any time.
- }
- \sstinvocation{
- CALL AST\_SETUNC( THIS, UNC, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Region which is to be assigned a new uncertainty.
- }
- \sstsubsection{
- UNC = INTEGER (Given)
- }{
- Pointer to the new uncertainty Region. This must be of a class for
- which all instances are centro-symetric (e.g. \htmlref{Box}{Box}, \htmlref{Circle}{Circle}, \htmlref{Ellipse}{Ellipse},
- etc.) or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions.
- A deep copy of the supplied Region will be taken, so subsequent
- changes to the uncertainty Region using the supplied pointer will
- have no effect on the Region
- THIS.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
-}
-\sstroutine{
- AST\_SHIFTMAP\sstlabel{AST_SHIFTMAP}
-}{
- Create a ShiftMap
-}{
- \sstdescription{
- This function creates a new \htmlref{ShiftMap}{ShiftMap} and optionally initialises its
- attributes.
-
- A ShiftMap is a linear \htmlref{Mapping}{Mapping} which shifts each axis by a
- specified constant value.
- }
- \sstinvocation{
- RESULT = AST\_SHIFTMAP( NCOORD, SHIFT, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- NCOORD = INTEGER (Given)
- }{
- The number of coordinate values for each point to be
- transformed (i.e. the number of dimensions of the space in
- which the points will reside). The same number is applicable
- to both input and output points.
- }
- \sstsubsection{
- SHIFT( NCOORD ) = DOUBLE PRECISION (Given)
- }{
- An array containing the values to be added on to the input
- coordinates in order to create the output coordinates. A separate
- value should be supplied for each coordinate.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new ShiftMap. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_SHIFTMAP = INTEGER
- }{
- A pointer to the new ShiftMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- AST\_SHOW\sstlabel{AST_SHOW}
-}{
- Display a textual representation of an Object on standard output
-}{
- \sstdescription{
- This routine displays a textual description of any AST \htmlref{Object}{Object}
- on standard output. It is provided primarily as an aid to
- debugging.
- }
- \sstinvocation{
- CALL AST\_SHOW( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Object to be displayed.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This routine applies to all Objects.
- }
- }
-}
-\sstroutine{
- AST\_SHOWMESH\sstlabel{AST_SHOWMESH}
-}{
- Display a mesh of points covering the surface of a Region
-}{
- \sstdescription{
- This routine
- writes a table to standard output containing the axis values at a
- mesh of points covering the surface of the supplied \htmlref{Region}{Region}. Each row
- of output contains a tab-separated list of axis values, one for
- each axis in the \htmlref{Frame}{Frame} encapsulated by the Region. The number of
- points in the mesh is determined by the \htmlref{MeshSize}{MeshSize} attribute.
-
- The table is preceeded by a given title string, and followed by a
- single line containing the word {\tt{"}}ENDMESH{\tt{"}}.
- }
- \sstinvocation{
- CALL AST\_SHOWMESH( THIS, FORMAT, TTL, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Region.
- }
- \sstsubsection{
- FORMAT = LOGICAL (Given)
- }{
- A boolean value indicating if the displayed axis values should
- be formatted according to the Format attribute associated with
- the Frame's axis. Otherwise, they are displayed as simple
- floating point values.
- }
- \sstsubsection{
- TTL = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A title to display before displaying the first position.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
-}
-\sstroutine{
- AST\_SIMPLIFY\sstlabel{AST_SIMPLIFY}
-}{
- Simplify a Mapping
-}{
- \sstdescription{
- This function simplifies a \htmlref{Mapping}{Mapping} (which may be a compound
- Mapping such as a \htmlref{CmpMap}{CmpMap}) to eliminate redundant computational
- steps, or to merge separate steps which can be performed more
- efficiently in a single operation.
-
- As a simple example, a Mapping which multiplied coordinates by
- 5, and then multiplied the result by 10, could be simplified to
- a single step which multiplied by 50. Similarly, a Mapping which
- multiplied by 5, and then divided by 5, could be reduced to a
- simple copying operation.
-
- This function should typically be applied to Mappings which have
- undergone substantial processing or have been formed by merging
- other Mappings. It is of potential benefit, for example, in
- reducing execution time if applied before using a Mapping to
- transform a large number of coordinates.
- }
- \sstinvocation{
- RESULT = AST\_SIMPLIFY( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the original Mapping.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Mapping
- }{
- This function applies to all Mappings.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- If the supplied Mapping is a FrameSet, the returned Mapping
- will be a copy of the supplied FrameSet in which all the
- inter-\htmlref{Frame}{Frame} Mappings have been simplified.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_SIMPLIFY = INTEGER
- }{
- A new pointer to the (possibly simplified) Mapping.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function can safely be applied even to Mappings which
- cannot be simplified. If no simplification is possible, it
- behaves exactly like \htmlref{AST\_CLONE}{AST_CLONE} and returns a pointer to the
- original Mapping.
-
- \sstitem
- The Mapping returned by this function may not be independent
- of the original (even if simplification was possible), and
- modifying it may therefore result in indirect modification of
- the original. If a completely independent result is required, a
- copy should be made using \htmlref{AST\_COPY}{AST_COPY}.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_SKYFRAME\sstlabel{AST_SKYFRAME}
-}{
- Create a SkyFrame
-}{
- \sstdescription{
- This function creates a new \htmlref{SkyFrame}{SkyFrame} and optionally initialises
- its attributes.
-
- A SkyFrame is a specialised form of \htmlref{Frame}{Frame} which describes
- celestial longitude/latitude coordinate systems. The particular
- celestial coordinate system to be represented is specified by
- setting the SkyFrame's \htmlref{System}{System} attribute (currently, the default
- is ICRS) qualified, as necessary, by a mean \htmlref{Equinox}{Equinox} value and/or
- an \htmlref{Epoch}{Epoch}.
-
- For each of the supported celestial coordinate systems, a SkyFrame
- can apply an optional shift of origin to create a coordinate system
- representing offsets within the celestial coordinate system from some
- specified point. This offset coordinate system can also be rotated to
- define new longitude and latitude axes. See attributes SkyRef, \htmlref{SkyRefIs}{SkyRefIs}
- and SkyRefP
-
- All the coordinate values used by a SkyFrame are in
- radians. These may be formatted in more conventional ways for
- display by using \htmlref{AST\_FORMAT}{AST_FORMAT}.
- }
- \sstinvocation{
- RESULT = AST\_SKYFRAME( OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new SkyFrame. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine. If no initialisation is required, a blank
- value may be supplied.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_SKYFRAME = INTEGER
- }{
- A pointer to the new SkyFrame.
- }
- }
- \sstexamples{
- \sstexamplesubsection{
- FRAME = AST\_SKYFRAME( ' ', STATUS )
- }{
- Creates a SkyFrame to describe the default ICRS celestial
- coordinate system.
- }
- \sstexamplesubsection{
- FRAME = AST\_SKYFRAME( 'System = FK5, Equinox = J2005, Digits = 10', STATUS )
- }{
- Creates a SkyFrame to describe the FK5 celestial
- coordinate system, with a mean Equinox of J2005.0.
- Because especially accurate coordinates will be used,
- additional precision (10 digits) has been requested. This will
- be used when coordinate values are formatted for display.
- }
- \sstexamplesubsection{
- FRAME = AST\_SKYFRAME( 'System = FK4, Equinox = 1955-SEP-2', STATUS )
- }{
- Creates a SkyFrame to describe the old FK4 celestial
- coordinate system. A default Epoch value (B1950.0) is used,
- but the mean Equinox value is given explicitly as {\tt{"}}1955-SEP-2{\tt{"}}.
- }
- \sstexamplesubsection{
- FRAME = AST\_SKYFRAME( 'System = GAPPT, Epoch = ' // DATE, STATUS )
- }{
- Creates a SkyFrame to describe the Geocentric Apparent
- celestial coordinate system. The Epoch value, which specifies
- the date of observation, is obtained from a date/time string
- contained in the character variable DATE.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Currently, the default celestial coordinate system is
- ICRS. However, this default may change in future as new
- astrometric standards evolve. The intention is to track the most
- modern appropriate standard. For this reason, you should use the
- default only if this is what you intend (and can tolerate any
- associated slight change in behaviour with future versions of
- this function). If you intend to use the ICRS system
- indefinitely, then you should specify it explicitly using an
- OPTIONS value of {\tt{"}}System=ICRS{\tt{"}}.
-
- \sstitem
- Whichever celestial coordinate system is represented, it will
- have two axes. The first of these will be the longitude axis
- and the second will be the latitude axis. This order can be
- changed using \htmlref{AST\_PERMAXES}{AST_PERMAXES} if required.
-
- \sstitem
- When conversion between two SkyFrames is requested (as when
- supplying SkyFrames \htmlref{AST\_CONVERT}{AST_CONVERT}),
- account will be taken of the nature of the celestial coordinate
- systems they represent, together with any qualifying mean Equinox or
- Epoch values, etc. The \htmlref{AlignSystem}{AlignSystem} attribute will also be taken into
- account. The results will therefore fully reflect the
- relationship between positions on the sky measured in the two
- systems.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_SLAADD\sstlabel{AST_SLAADD}
-}{
- Add a celestial coordinate conversion to an SlaMap
-}{
- \sstdescription{
- This routine adds one of the standard celestial coordinate
- system conversions provided by the SLALIB Positional Astronomy
- Library (Starlink User Note SUN/67) to an existing \htmlref{SlaMap}{SlaMap}.
-
- When an SlaMap is first created (using \htmlref{AST\_SLAMAP}{AST_SLAMAP}), it simply
- performs a unit (null) \htmlref{Mapping}{Mapping}. By using AST\_SLAADD (repeatedly
- if necessary), one or more coordinate conversion steps may then
- be added, which the SlaMap will perform in sequence. This allows
- multi-step conversions between a variety of celestial coordinate
- systems to be assembled out of the building blocks provided by
- SLALIB.
-
- Normally, if an SlaMap's \htmlref{Invert}{Invert} attribute is zero (the default),
- then its forward transformation is performed by carrying out
- each of the individual coordinate conversions specified by
- AST\_SLAADD in the order given (i.e. with the most recently added
- conversion applied last).
-
- This order is reversed if the SlaMap's Invert attribute is
- non-zero (or if the inverse transformation is requested by any
- other means) and each individual coordinate conversion is also
- replaced by its own inverse. This process inverts the overall
- effect of the SlaMap. In this case, the first conversion to be
- applied would be the inverse of the one most recently added.
- }
- \sstinvocation{
- CALL AST\_SLAADD( THIS, CVT, ARGS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the SlaMap.
- }
- \sstsubsection{
- CVT = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string which identifies the
- celestial coordinate conversion to be added to the
- SlaMap. See the {\tt{"}}SLALIB Conversions{\tt{"}} section for details of
- those available.
- }
- \sstsubsection{
- ARGS( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array containing argument values for the celestial
- coordinate conversion. The number of arguments required, and
- hence the number of array elements used, depends on the
- conversion specified (see the {\tt{"}}SLALIB Conversions{\tt{"}}
- section). This array is ignored
- if no arguments are needed.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- All coordinate values processed by an SlaMap are in
- radians. The first coordinate is the celestial longitude and the
- second coordinate is the celestial latitude.
-
- \sstitem
- When assembling a multi-stage conversion, it can sometimes be
- difficult to determine the most economical conversion path. For
- example, converting to the standard FK5 coordinate system as an
- intermediate stage is often sensible in formulating the problem,
- but may introduce unnecessary extra conversion steps. A solution
- to this is to include all the steps which are (logically)
- necessary, but then to use \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY} to simplify the resulting
- SlaMap. The simplification process will eliminate any steps
- which turn out not to be needed.
-
- \sstitem
- This routine does not check to ensure that the sequence of
- coordinate conversions added to an SlaMap is physically
- meaningful.
- }
- }
- \sstdiytopic{
- SLALIB Conversions
- }{
- The following strings (which are case-insensitive) may be supplied
- via the CVT argument to indicate which celestial coordinate
- conversion is to be added to the SlaMap. Each string is derived
- from the name of the SLALIB routine that performs the
- conversion and the relevant documentation (SUN/67) should be
- consulted for details. Where arguments are needed by
- the conversion, they are listed in parentheses. Values for
- these arguments should be given, via the ARGS array, in the
- order indicated. The argument names match the corresponding
- SLALIB routine arguments and their values should be given using
- exactly the same units, time scale, calendar, etc. as described
- in SUN/67:
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}ADDET{\tt{"}} (EQ): Add E-terms of aberration.
-
- \sstitem
- {\tt{"}}SUBET{\tt{"}} (EQ): Subtract E-terms of aberration.
-
- \sstitem
- {\tt{"}}PREBN{\tt{"}} (BEP0,BEP1): Apply Bessel-Newcomb pre-IAU 1976 (FK4)
- precession model.
-
- \sstitem
- {\tt{"}}PREC{\tt{"}} (EP0,EP1): Apply IAU 1975 (FK5) precession model.
-
- \sstitem
- {\tt{"}}FK45Z{\tt{"}} (BEPOCH): Convert FK4 to FK5 (no proper motion or parallax).
-
- \sstitem
- {\tt{"}}FK54Z{\tt{"}} (BEPOCH): Convert FK5 to FK4 (no proper motion or parallax).
-
- \sstitem
- {\tt{"}}AMP{\tt{"}} (DATE,EQ): Convert geocentric apparent to mean place.
-
- \sstitem
- {\tt{"}}MAP{\tt{"}} (EQ,DATE): Convert mean place to geocentric apparent.
-
- \sstitem
- {\tt{"}}ECLEQ{\tt{"}} (DATE): Convert ecliptic coordinates to FK5 J2000.0 equatorial.
-
- \sstitem
- {\tt{"}}EQECL{\tt{"}} (DATE): Convert equatorial FK5 J2000.0 to ecliptic coordinates.
-
- \sstitem
- {\tt{"}}GALEQ{\tt{"}}: Convert galactic coordinates to FK5 J2000.0 equatorial.
-
- \sstitem
- {\tt{"}}EQGAL{\tt{"}}: Convert FK5 J2000.0 equatorial to galactic coordinates.
-
- \sstitem
- {\tt{"}}HFK5Z{\tt{"}} (JEPOCH): Convert ICRS coordinates to FK5 J2000.0 equatorial.
-
- \sstitem
- {\tt{"}}FK5HZ{\tt{"}} (JEPOCH): Convert FK5 J2000.0 equatorial coordinates to ICRS.
-
- \sstitem
- {\tt{"}}GALSUP{\tt{"}}: Convert galactic to supergalactic coordinates.
-
- \sstitem
- {\tt{"}}SUPGAL{\tt{"}}: Convert supergalactic coordinates to galactic.
-
- \sstitem
- {\tt{"}}J2000H{\tt{"}}: Convert dynamical J2000.0 to ICRS.
-
- \sstitem
- {\tt{"}}HJ2000{\tt{"}}: Convert ICRS to dynamical J2000.0.
-
- \sstitem
- {\tt{"}}R2H{\tt{"}} (LAST): Convert RA to Hour Angle.
-
- \sstitem
- {\tt{"}}H2R{\tt{"}} (LAST): Convert Hour Angle to RA.
-
- }
- For example, to use the {\tt{"}}ADDET{\tt{"}} conversion, which takes a single
- argument EQ, you should consult the documentation for the SLALIB
- routine SLA\_ADDET. This describes the conversion in detail and
- shows that EQ is the Besselian epoch of the mean equator and
- equinox.
- This value should then be supplied to AST\_SLAADD in ARGS(1).
-
- In addition the following strings may be supplied for more complex
- conversions which do not correspond to any one single SLALIB routine
- (DIURAB is the magnitude of the diurnal aberration vector in units
- of {\tt{"}}day/(2.PI){\tt{"}}, DATE is the Modified Julian Date of the observation,
- and (OBSX,OBSY,OBZ) are the Heliocentric-Aries-Ecliptic cartesian
- coordinates, in metres, of the observer):
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}HPCEQ{\tt{"}} (DATE,OBSX,OBSY,OBSZ): Convert Helioprojective-Cartesian coordinates to J2000.0 equatorial.
-
- \sstitem
- {\tt{"}}EQHPC{\tt{"}} (DATE,OBSX,OBSY,OBSZ): Convert J2000.0 equatorial coordinates to Helioprojective-Cartesian.
-
- \sstitem
- {\tt{"}}HPREQ{\tt{"}} (DATE,OBSX,OBSY,OBSZ): Convert Helioprojective-Radial coordinates to J2000.0 equatorial.
-
- \sstitem
- {\tt{"}}EQHPR{\tt{"}} (DATE,OBSX,OBSY,OBSZ): Convert J2000.0 equatorial coordinates to Helioprojective-Radial.
-
- \sstitem
- {\tt{"}}HEEQ{\tt{"}} (DATE): Convert helio-ecliptic coordinates to J2000.0 equatorial.
-
- \sstitem
- {\tt{"}}EQHE{\tt{"}} (DATE): Convert J2000.0 equatorial coordinates to helio-ecliptic.
-
- \sstitem
- {\tt{"}}H2E{\tt{"}} (LAT,DIRUAB): Convert horizon coordinates to equatorial.
-
- \sstitem
- {\tt{"}}E2H{\tt{"}} (LAT,DIURAB): Convert equatorial coordinates to horizon.
-
- }
- Note, the {\tt{"}}H2E{\tt{"}} and {\tt{"}}E2H{\tt{"}} conversions convert between topocentric
- horizon coordinates (azimuth,elevation), and apparent local equatorial
- coordinates (hour angle,declination). Thus, the effects of diurnal
- aberration are taken into account in the conversions but the effects
- of atmospheric refraction are not.
- }
-}
-\sstroutine{
- AST\_SLAMAP\sstlabel{AST_SLAMAP}
-}{
- Create an SlaMap
-}{
- \sstdescription{
- This function creates a new \htmlref{SlaMap}{SlaMap} and optionally initialises
- its attributes.
-
- An SlaMap is a specialised form of \htmlref{Mapping}{Mapping} which can be used to
- represent a sequence of conversions between standard celestial
- (longitude, latitude) coordinate systems.
-
- When an SlaMap is first created, it simply performs a unit
- (null) Mapping on a pair of coordinates. Using the \htmlref{AST\_SLAADD}{AST_SLAADD}
- routine, a series of coordinate conversion steps may then be
- added, selected from those provided by the SLALIB Positional
- Astronomy Library (Starlink User Note SUN/67). This allows
- multi-step conversions between a variety of celestial coordinate
- systems to be assembled out of the building blocks provided by
- SLALIB.
-
- For details of the individual coordinate conversions available,
- see the description of the AST\_SLAADD routine.
- }
- \sstinvocation{
- RESULT = AST\_SLAMAP( FLAGS, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- FLAGS = INTEGER (Given)
- }{
- This argument is reserved for future use and should currently
- always be set to zero.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new SlaMap. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine. If no initialisation is required, a blank
- value may be supplied.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_SLAMAP = INTEGER
- }{
- A pointer to the new SlaMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes (number of input and output
- coordinates) for an SlaMap are both equal to 2. The first
- coordinate is the celestial longitude and the second coordinate
- is the celestial latitude. All coordinate values are in radians.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_SPECADD\sstlabel{AST_SPECADD}
-}{
- Add a spectral coordinate conversion to a SpecMap
-}{
- \sstdescription{
- This routine adds one of the standard spectral coordinate
- system conversions listed below to an existing \htmlref{SpecMap}{SpecMap}.
-
- When a SpecMap is first created (using \htmlref{AST\_SPECMAP}{AST_SPECMAP}), it simply
- performs a unit (null) \htmlref{Mapping}{Mapping}. By using AST\_SPECADD (repeatedly
- if necessary), one or more coordinate conversion steps may then
- be added, which the SpecMap will perform in sequence. This allows
- multi-step conversions between a variety of spectral coordinate
- systems to be assembled out of the building blocks provided by
- this class.
-
- Normally, if a SpecMap's \htmlref{Invert}{Invert} attribute is zero (the default),
- then its forward transformation is performed by carrying out
- each of the individual coordinate conversions specified by
- AST\_SPECADD in the order given (i.e. with the most recently added
- conversion applied last).
-
- This order is reversed if the SpecMap's Invert attribute is
- non-zero (or if the inverse transformation is requested by any
- other means) and each individual coordinate conversion is also
- replaced by its own inverse. This process inverts the overall
- effect of the SpecMap. In this case, the first conversion to be
- applied would be the inverse of the one most recently added.
- }
- \sstinvocation{
- CALL AST\_SPECADD( THIS, CVT, ARGS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the SpecMap.
- }
- \sstsubsection{
- CVT = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string which identifies the
- spectral coordinate conversion to be added to the
- SpecMap. See the {\tt{"}}Available Conversions{\tt{"}} section for details of
- those available.
- }
- \sstsubsection{
- ARGS( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array containing argument values for the spectral
- coordinate conversion. The number of arguments required, and
- hence the number of array elements used, depends on the
- conversion specified (see the {\tt{"}}Available Conversions{\tt{"}}
- section). This array is ignored
- if no arguments are needed.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When assembling a multi-stage conversion, it can sometimes be
- difficult to determine the most economical conversion path. For
- example, when converting between reference frames, converting first
- to the heliographic reference frame as an intermediate stage is often
- sensible in formulating the problem, but may introduce unnecessary
- extra conversion steps. A solution to this is to include all the steps
- which are (logically) necessary, but then to use
- \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY} to simplify the resulting
- SpecMap. The simplification process will eliminate any steps
- which turn out not to be needed.
-
- \sstitem
- This routine does not check to ensure that the sequence of
- coordinate conversions added to a SpecMap is physically
- meaningful.
- }
- }
- \sstdiytopic{
- Available Conversions
- }{
- The following strings (which are case-insensitive) may be supplied
- via the CVT argument to indicate which spectral coordinate
- conversion is to be added to the SpecMap. Where arguments are needed by
- the conversion, they are listed in parentheses. Values for
- these arguments should be given, via the ARGS array, in the
- order indicated. Units and argument names are described at the end of
- the list of conversions.
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}FRTOVL{\tt{"}} (RF): Convert frequency to relativistic velocity.
-
- \sstitem
- {\tt{"}}VLTOFR{\tt{"}} (RF): Convert relativistic velocity to Frequency.
-
- \sstitem
- {\tt{"}}ENTOFR{\tt{"}}: Convert energy to frequency.
-
- \sstitem
- {\tt{"}}FRTOEN{\tt{"}}: Convert frequency to energy.
-
- \sstitem
- {\tt{"}}WNTOFR{\tt{"}}: Convert wave number to frequency.
-
- \sstitem
- {\tt{"}}FRTOWN{\tt{"}}: Convert frequency to wave number.
-
- \sstitem
- {\tt{"}}WVTOFR{\tt{"}}: Convert wavelength (vacuum) to frequency.
-
- \sstitem
- {\tt{"}}FRTOWV{\tt{"}}: Convert frequency to wavelength (vacuum).
-
- \sstitem
- {\tt{"}}AWTOFR{\tt{"}}: Convert wavelength (air) to frequency.
-
- \sstitem
- {\tt{"}}FRTOAW{\tt{"}}: Convert frequency to wavelength (air).
-
- \sstitem
- {\tt{"}}VRTOVL{\tt{"}}: Convert radio to relativistic velocity.
-
- \sstitem
- {\tt{"}}VLTOVR{\tt{"}}: Convert relativistic to radio velocity.
-
- \sstitem
- {\tt{"}}VOTOVL{\tt{"}}: Convert optical to relativistic velocity.
-
- \sstitem
- {\tt{"}}VLTOVO{\tt{"}}: Convert relativistic to optical velocity.
-
- \sstitem
- {\tt{"}}ZOTOVL{\tt{"}}: Convert redshift to relativistic velocity.
-
- \sstitem
- {\tt{"}}VLTOZO{\tt{"}}: Convert relativistic velocity to redshift.
-
- \sstitem
- {\tt{"}}BTTOVL{\tt{"}}: Convert beta factor to relativistic velocity.
-
- \sstitem
- {\tt{"}}VLTOBT{\tt{"}}: Convert relativistic velocity to beta factor.
-
- \sstitem
- {\tt{"}}USF2HL{\tt{"}} (VOFF,RA,DEC): Convert frequency from a user-defined
- reference frame to heliocentric.
-
- \sstitem
- {\tt{"}}HLF2US{\tt{"}} (VOFF,RA,DEC): Convert frequency from heliocentric
- reference frame to user-defined.
-
- \sstitem
- {\tt{"}}TPF2HL{\tt{"}} (OBSLON,OBSLAT,OBSALT,EPOCH,RA,DEC): Convert frequency from
- topocentric reference frame to heliocentric.
-
- \sstitem
- {\tt{"}}HLF2TP{\tt{"}} (OBSLON,OBSLAT,OBSALT,EPOCH,RA,DEC): Convert frequency from
- heliocentric reference frame to topocentric.
-
- \sstitem
- {\tt{"}}GEF2HL{\tt{"}} (EPOCH,RA,DEC): Convert frequency from geocentric
- reference frame to heliocentric.
-
- \sstitem
- {\tt{"}}HLF2GE{\tt{"}} (EPOCH,RA,DEC): Convert frequency from
- heliocentric reference frame to geocentric.
-
- \sstitem
- {\tt{"}}BYF2HL{\tt{"}} (EPOCH,RA,DEC): Convert frequency from
- barycentric reference frame to heliocentric.
-
- \sstitem
- {\tt{"}}HLF2BY{\tt{"}} (EPOCH,RA,DEC): Convert frequency from
- heliocentric reference frame to barycentric.
-
- \sstitem
- {\tt{"}}LKF2HL{\tt{"}} (RA,DEC): Convert frequency from kinematic LSR
- reference frame to heliocentric.
-
- \sstitem
- {\tt{"}}HLF2LK{\tt{"}} (RA,DEC): Convert frequency from heliocentric
- reference frame to kinematic LSR.
-
- \sstitem
- {\tt{"}}LDF2HL{\tt{"}} (RA,DEC): Convert frequency from dynamical LSR
- reference frame to heliocentric.
-
- \sstitem
- {\tt{"}}HLF2LD{\tt{"}} (RA,DEC): Convert frequency from heliocentric
- reference frame to dynamical LSR.
-
- \sstitem
- {\tt{"}}LGF2HL{\tt{"}} (RA,DEC): Convert frequency from local group
- reference frame to heliocentric.
-
- \sstitem
- {\tt{"}}HLF2LG{\tt{"}} (RA,DEC): Convert frequency from heliocentric
- reference frame to local group.
-
- \sstitem
- {\tt{"}}GLF2HL{\tt{"}} (RA,DEC): Convert frequency from galactic
- reference frame to heliocentric.
-
- \sstitem
- {\tt{"}}HLF2GL{\tt{"}} (RA,DEC): Convert frequency from heliocentric
- reference frame to galactic.
-
- }
- The units for the values processed by the above conversions are as
- follows:
-
- \sstitemlist{
-
- \sstitem
- all velocities: metres per second (positive if the source receeds from
- the observer).
-
- \sstitem
- frequency: Hertz.
-
- \sstitem
- all wavelengths: metres.
-
- \sstitem
- energy: Joules.
-
- \sstitem
- wave number: cycles per metre.
-
- }
- The arguments used in the above conversions are as follows:
-
- \sstitemlist{
-
- \sstitem
- RF: Rest frequency (Hz).
-
- \sstitem
- OBSALT: Geodetic altitude of observer (IAU 1975, metres).
-
- \sstitem
- OBSLAT: Geodetic latitude of observer (IAU 1975, radians).
-
- \sstitem
- OBSLON: Longitude of observer (radians - positive eastwards).
-
- \sstitem
- EPOCH: \htmlref{Epoch}{Epoch} of observation (UT1 expressed as a Modified Julian Date).
-
- \sstitem
- RA: Right Ascension of source (radians, FK5 J2000).
-
- \sstitem
- DEC: Declination of source (radians, FK5 J2000).
-
- \sstitem
- VOFF: Velocity of the user-defined reference frame, towards the
- position given by RA and DEC, measured in the heliocentric
- reference frame.
-
- }
- If the SpecMap is 3-dimensional, source positions are provided by the
- values supplied to inputs 2 and 3 of the SpecMap (which are simply
- copied to outputs 2 and 3). Note, usable values are still required
- for the RA and DEC arguments in order to define the {\tt{"}}user-defined{\tt{"}}
- reference frame used by USF2HL and HLF2US. However, AST\_\_BAD can be
- supplied for RA and DEC if the user-defined reference frame is not
- required.
- }
-}
-\sstroutine{
- AST\_SPECFLUXFRAME\sstlabel{AST_SPECFLUXFRAME}
-}{
- Create a SpecFluxFrame
-}{
- \sstdescription{
- This function creates a new \htmlref{SpecFluxFrame}{SpecFluxFrame} and optionally initialises
- its attributes.
-
- A SpecFluxFrame combines a \htmlref{SpecFrame}{SpecFrame} and a \htmlref{FluxFrame}{FluxFrame} into a single
- 2-dimensional compound \htmlref{Frame}{Frame}. Such a Frame can for instance be used
- to describe a \htmlref{Plot}{Plot} of a spectrum in which the first axis represents
- spectral position and the second axis represents flux.
- }
- \sstinvocation{
- RESULT = AST\_SPECFLUXFRAME( FRAME1, FRAME2, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- FRAME1 = INTEGER (Given)
- }{
- Pointer to the SpecFrame. This will form the first axis in the
- new SpecFluxFrame.
- }
- \sstsubsection{
- FRAME2 = INTEGER (Given)
- }{
- Pointer to the FluxFrame. This will form the second axis in the
- new SpecFluxFrame. The {\tt{"}}\htmlref{SpecVal}{SpecVal}{\tt{"}} attribute of this FluxFrame is
- not used by the SpecFluxFrame class and so may be set to AST\_\_BAD
- when the FluxFrame is created.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new SpecFluxFrame. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_SPECFLUXFRAME = INTEGER
- }{
- A pointer to the new SpecFluxFrame.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The supplied Frame pointers are stored directly, rather than
- being used to create deep copies of the supplied Frames. This means
- that any subsequent changes made to the Frames via the supplied
- pointers will result in equivalent changes being visible in the
- SpecFluxFrame.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- AST\_SPECFRAME\sstlabel{AST_SPECFRAME}
-}{
- Create a SpecFrame
-}{
- \sstdescription{
- This function creates a new \htmlref{SpecFrame}{SpecFrame} and optionally initialises
- its attributes.
-
- A SpecFrame is a specialised form of one-dimensional \htmlref{Frame}{Frame} which
- represents various coordinate systems used to describe positions within
- an electro-magnetic spectrum. The particular coordinate system to be
- used is specified by setting the SpecFrame's \htmlref{System}{System} attribute (the
- default is wavelength) qualified, as necessary, by other attributes
- such as the rest frequency, the standard of rest, the epoch of
- observation, etc (see the description of the System attribute for
- details).
-
- By setting a value for thr \htmlref{SpecOrigin}{SpecOrigin} attribute, a SpecFrame can be made
- to represent offsets from a given spectral position, rather than absolute
- }
- \sstinvocation{
- RESULT = AST\_SPECFRAME( OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new SpecFrame. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine. If no initialisation is required, a blank
- value may be supplied.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_SPECFRAME = INTEGER
- }{
- A pointer to the new SpecFrame.
- }
- }
- \sstexamples{
- \sstexamplesubsection{
- FRAME = AST\_SPECFRAME( ' ', STATUS )
- }{
- Creates a SpecFrame to describe the default wavelength spectral
- coordinate system. The \htmlref{RestFreq}{RestFreq} attribute (rest frequency) is
- unspecified, so it will not be possible to align this SpecFrame
- with another SpecFrame on the basis of a velocity-based system. The
- standard of rest is also unspecified. This means that alignment
- will be possible with other SpecFrames, but no correction will be
- made for Doppler shift caused by change of rest frame during the
- alignment.
- }
- \sstexamplesubsection{
- FRAME = AST\_SPECFRAME( 'System=VELO, RestFreq=1.0E15, \htmlref{StdOfRest}{StdOfRest}=LSRK', STATUS )
- }{
- Creates a SpecFrame describing a apparent radial velocity ({\tt{"}}VELO{\tt{"}}) axis
- with rest frequency 1.0E15 Hz (about 3000 Angstroms), measured
- in the kinematic Local Standard of Rest ({\tt{"}}LSRK{\tt{"}}). Since the
- source position has not been specified (using attributes \htmlref{RefRA}{RefRA} and
- \htmlref{RefDec}{RefDec}), it will only be possible to align this SpecFrame with
- other SpecFrames which are also measured in the LSRK standard of
- rest.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When conversion between two SpecFrames is requested (as when
- supplying SpecFrames \htmlref{AST\_CONVERT}{AST_CONVERT}),
- account will be taken of the nature of the spectral coordinate systems
- they represent, together with any qualifying rest frequency, standard
- of rest, epoch values, etc. The \htmlref{AlignSystem}{AlignSystem} and \htmlref{AlignStdOfRest}{AlignStdOfRest}
- attributes will also be taken into account. The results will therefore
- fully reflect the relationship between positions measured in the two
- systems. In addition, any difference in the Unit attributes of the two
- systems will also be taken into account.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_SPECMAP\sstlabel{AST_SPECMAP}
-}{
- Create a SpecMap
-}{
- \sstdescription{
- This function creates a new \htmlref{SpecMap}{SpecMap} and optionally initialises
- its attributes.
-
- An SpecMap is a specialised form of \htmlref{Mapping}{Mapping} which can be used to
- represent a sequence of conversions between standard spectral
- coordinate systems. This includes conversions between frequency,
- wavelength, and various forms of velocity, as well as conversions
- between different standards of rest.
-
- When a SpecMap is first created, it simply performs a unit
- (null) Mapping. Using the \htmlref{AST\_SPECADD}{AST_SPECADD} routine,
- a series of coordinate conversion steps may then be added, selected
- from the list of supported conversions. This allows multi-step
- conversions between a variety of spectral coordinate systems to
- be assembled out of the building blocks provided by this class.
-
- For details of the individual coordinate conversions available,
- see the description of the AST\_SPECADD routine.
-
- Conversions are available to transform between standards of rest.
- Such conversions need to know the source position as an RA and DEC.
- This information can be supplied in the form of parameters for
- the relevant conversions, in which case the SpecMap is 1-dimensional,
- simply transforming the spectral axis values. This means that the
- same source position will always be used by the SpecMap. However, this
- may not be appropriate for an accurate description of a 3-D spectral
- cube, where changes of spatial position can produce significant
- changes in the Doppler shift introduced when transforming between
- standards of rest. For this situation, a 3-dimensional SpecMap can
- be created in which axes 2 and 3 correspond to the source RA and DEC
- The SpecMap simply copies values for axes 2 and 3 from input to
- output).
- }
- \sstinvocation{
- RESULT = AST\_SPECMAP( NIN, FLAGS, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- NIN = INTEGER (Given)
- }{
- The number of inputs to the Mapping (this will also equal the
- number of outputs). This value must be either 1 or 3. In either
- case, the first input and output correspoindis the spectral axis.
- For a 3-axis SpecMap, the second and third axes give the RA and
- DEC (J2000 FK5) of the source. This positional information is
- used by conversions which transform between standards of rest,
- and replaces the {\tt{"}}RA{\tt{"}} and {\tt{"}}DEC{\tt{"}} arguments for the individual
- conversions listed in description of the {\tt{"}}SpecAdd{\tt{"}}
- routine.
- }
- \sstsubsection{
- FLAGS = INTEGER (Given)
- }{
- This argument is reserved for future use and should currently
- always be set to zero.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new SpecMap. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine. If no initialisation is required, a blank
- value may be supplied.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_SPECMAP = INTEGER
- }{
- A pointer to the new SpecMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The nature and units of the coordinate values supplied for the
- first input (i.e. the spectral input) of a SpecMap must be appropriate
- to the first conversion step applied by the SpecMap. For instance, if
- the first conversion step is {\tt{"}}FRTOVL{\tt{"}} (frequency to relativistic
- velocity), then the coordinate values for the first input should
- be frequency in units of Hz. Similarly, the nature and units of the
- coordinate values returned by a SpecMap will be determined by the
- last conversion step applied by the SpecMap. For instance, if the
- last conversion step is {\tt{"}}VLTOVO{\tt{"}} (relativistic velocity to optical
- velocity), then the coordinate values for the first output will be optical
- velocity in units of metres per second. See the description of the
- AST\_SPECADD routine for the units expected and returned by each
- conversion.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_SPHMAP\sstlabel{AST_SPHMAP}
-}{
- Create a SphMap
-}{
- \sstdescription{
- This function creates a new \htmlref{SphMap}{SphMap} and optionally initialises
- its attributes.
-
- A SphMap is a \htmlref{Mapping}{Mapping} which transforms points from a
- 3-dimensional Cartesian coordinate system into a 2-dimensional
- spherical coordinate system (longitude and latitude on a unit
- sphere centred at the origin). It works by regarding the input
- coordinates as position vectors and finding their intersection
- with the sphere surface. The inverse transformation always
- produces points which are a unit distance from the origin
- (i.e. unit vectors).
- }
- \sstinvocation{
- RESULT = AST\_SPHMAP( OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new SphMap. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_SPHMAP = INTEGER
- }{
- A pointer to the new SphMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The spherical coordinates are longitude (positive
- anti-clockwise looking from the positive latitude pole) and
- latitude. The Cartesian coordinates are right-handed, with the x
- axis (axis 1) at zero longitude and latitude, and the z axis
- (axis 3) at the positive latitude pole.
-
- \sstitem
- At either pole, the longitude is set to the value of the
- \htmlref{PolarLong}{PolarLong} attribute.
-
- \sstitem
- If the Cartesian coordinates are all zero, then the longitude
- and latitude are set to the value AST\_\_BAD.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- AST\_STCCATALOGENTRYLOCATION\sstlabel{AST_STCCATALOGENTRYLOCATION}
-}{
- Create a StcCatalogEntryLocation
-}{
- \sstdescription{
- This function creates a new \htmlref{StcCatalogEntryLocation}{StcCatalogEntryLocation} and optionally initialises its
- attributes.
-
- The StcCatalogEntryLocation class is a sub-class of \htmlref{Stc}{Stc} used to describe
- the coverage of the datasets contained in some VO resource.
-
- See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
- }
- \sstinvocation{
- RESULT = AST\_STCCATALOGENTRYLOCATION( REGION, NCOORDS, COORDS, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- REGION = INTEGER (Given)
- }{
- Pointer to the encapsulated \htmlref{Region}{Region}.
- }
- \sstsubsection{
- NCOORDS = INTEGER (Given)
- }{
- The length of the COORDS array. Supply zero if COORDS should be
- ignored.
- }
- \sstsubsection{
- COORDS( NCOORDS ) = INTEGER (Given)
- }{
- An array holding NCOORDS AstKeyMap pointers (if NCOORDS
- is zero, the supplied value is ignored). Each supplied \htmlref{KeyMap}{KeyMap}
- describes the contents of a single STC $<$AstroCoords$>$ element, and
- should have elements with keys given by constants AST\_\_STCNAME,
- AST\_\_STCVALUE, AST\_\_STCERROR, AST\_\_STCRES, AST\_\_STCSIZE,
- AST\_\_STCPIXSZ. Any of these elements may be omitted, but no other
- elements should be included. If supplied, the AST\_\_STCNAME element
- should be a vector of character string pointers holding the {\tt{"}}Name{\tt{"}}
- item for each axis in the coordinate system represented by
- REGION.
- Any other supplied elements should be scalar elements, each holding
- a pointer to a Region describing the associated item of ancillary
- information (error, resolution, size, pixel size or value). These
- Regions should describe a volume within the coordinate system
- represented by REGION.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new StcCatalogEntryLocation. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_STCCATALOGENTRYLOCATION = INTEGER
- }{
- A pointer to the new StcCatalogEntryLocation.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A deep copy is taken of the supplied Region. This means that
- any subsequent changes made to the encapsulated Region using the
- supplied pointer will have no effect on the Stc.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_STCOBSDATALOCATION\sstlabel{AST_STCOBSDATALOCATION}
-}{
- Create a StcObsDataLocation
-}{
- \sstdescription{
- This function creates a new \htmlref{StcObsDataLocation}{StcObsDataLocation} and optionally initialises its
- attributes.
-
- The StcObsDataLocation class is a sub-class of \htmlref{Stc}{Stc} used to describe
- the coverage of the datasets contained in some VO resource.
-
- See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
- }
- \sstinvocation{
- RESULT = AST\_STCOBSDATALOCATION( REGION, NCOORDS, COORDS, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- REGION = INTEGER (Given)
- }{
- Pointer to the encapsulated \htmlref{Region}{Region}.
- }
- \sstsubsection{
- NCOORDS = INTEGER (Given)
- }{
- The length of the COORDS array. Supply zero if COORDS should be
- ignored.
- }
- \sstsubsection{
- COORDS( NCOORDS ) = INTEGER (Given)
- }{
- An array holding NCOORDS AstKeyMap pointers (if NCOORDS
- is zero, the supplied value is ignored). Each supplied \htmlref{KeyMap}{KeyMap}
- describes the contents of a single STC $<$AstroCoords$>$ element, and
- should have elements with keys given by constants AST\_\_STCNAME,
- AST\_\_STCVALUE, AST\_\_STCERROR, AST\_\_STCRES, AST\_\_STCSIZE,
- AST\_\_STCPIXSZ. Any of these elements may be omitted, but no other
- elements should be included. If supplied, the AST\_\_STCNAME element
- should be a vector of character string pointers holding the {\tt{"}}Name{\tt{"}}
- item for each axis in the coordinate system represented by
- REGION.
- Any other supplied elements should be scalar elements, each holding
- a pointer to a Region describing the associated item of ancillary
- information (error, resolution, size, pixel size or value). These
- Regions should describe a volume within the coordinate system
- represented by REGION.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new StcObsDataLocation. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_STCOBSDATALOCATION = INTEGER
- }{
- A pointer to the new StcObsDataLocation.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A deep copy is taken of the supplied Region. This means that
- any subsequent changes made to the encapsulated Region using the
- supplied pointer will have no effect on the Stc.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_STCRESOURCEPROFILE\sstlabel{AST_STCRESOURCEPROFILE}
-}{
- Create a StcResourceProfile
-}{
- \sstdescription{
- This function creates a new \htmlref{StcResourceProfile}{StcResourceProfile} and optionally initialises its
- attributes.
-
- The StcResourceProfile class is a sub-class of \htmlref{Stc}{Stc} used to describe
- the coverage of the datasets contained in some VO resource.
-
- See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
- }
- \sstinvocation{
- RESULT = AST\_STCRESOURCEPROFILE( REGION, NCOORDS, COORDS, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- REGION = INTEGER (Given)
- }{
- Pointer to the encapsulated \htmlref{Region}{Region}.
- }
- \sstsubsection{
- NCOORDS = INTEGER (Given)
- }{
- The length of the COORDS array. Supply zero if COORDS should be
- ignored.
- }
- \sstsubsection{
- COORDS( NCOORDS ) = INTEGER (Given)
- }{
- An array holding NCOORDS AstKeyMap pointers (if NCOORDS
- is zero, the supplied value is ignored). Each supplied \htmlref{KeyMap}{KeyMap}
- describes the contents of a single STC $<$AstroCoords$>$ element, and
- should have elements with keys given by constants AST\_\_STCNAME,
- AST\_\_STCVALUE, AST\_\_STCERROR, AST\_\_STCRES, AST\_\_STCSIZE,
- AST\_\_STCPIXSZ. Any of these elements may be omitted, but no other
- elements should be included. If supplied, the AST\_\_STCNAME element
- should be a vector of character string pointers holding the {\tt{"}}Name{\tt{"}}
- item for each axis in the coordinate system represented by
- REGION.
- Any other supplied elements should be scalar elements, each holding
- a pointer to a Region describing the associated item of ancillary
- information (error, resolution, size, pixel size or value). These
- Regions should describe a volume within the coordinate system
- represented by REGION.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new StcResourceProfile. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_STCRESOURCEPROFILE = INTEGER
- }{
- A pointer to the new StcResourceProfile.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A deep copy is taken of the supplied Region. This means that
- any subsequent changes made to the encapsulated Region using the
- supplied pointer will have no effect on the Stc.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- AST\_STCSCHAN\sstlabel{AST_STCSCHAN}
-}{
- Create an StcsChan
-}{
- \sstdescription{
- This function creates a new \htmlref{StcsChan}{StcsChan} and optionally initialises
- its attributes.
-
- A StcsChan is a specialised form of \htmlref{Channel}{Channel} which supports STC-S
- I/O operations. Writing an \htmlref{Object}{Object} to an StcsChan (using
- \htmlref{AST\_WRITE}{AST_WRITE}) will, if the Object is suitable, generate an
- STC-S description of that Object, and reading from an StcsChan will
- create a new Object from its STC-S description.
-
- Normally, when you use an StcsChan, you should provide {\tt{"}}source{\tt{"}}
- and {\tt{"}}sink{\tt{"}} routines which connect it to an external data store
- by reading and writing the resulting text. These routines
- should perform any conversions needed between external character
- encodings and the internal ASCII encoding. If no such routines
- are supplied, a Channel will read from standard input and write
- to standard output.
- }
- \sstinvocation{
- RESULT = AST\_STCSCHAN( SOURCE, SINK, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- SOURCE = SUBROUTINE (Given)
- }{
- A source routine, which is a subroutine which takes a single
- integer error status argument. This routine will be used by
- the StcsChan to obtain lines of input text. On each
- invocation, it should read the next input line from some
- external data store, and then return the resulting text to
- the AST library by calling \htmlref{AST\_PUTLINE}{AST_PUTLINE}. It should supply a
- negative line length when there are no more lines to read.
- If an error occurs, it should set its own error status
- argument to an error value before returning.
-
- If the null routine AST\_NULL is suppied as the SOURCE value,
- the Channel will read from standard input instead.
- }
- \sstsubsection{
- SINK = SUBROUTINE (Given)
- }{
- A sink routine, which is a subroutine which takes a single
- integer error status argument. This routine will be used by
- the StcsChan to deliver lines of output text. On each
- invocation, it should obtain the next output line from the
- AST library by calling \htmlref{AST\_GETLINE}{AST_GETLINE}, and then deliver the
- resulting text to some external data store. If an error
- occurs, it should set its own error status argument to an
- error value before returning.
-
- If the null routine AST\_NULL is suppied as the SINK value,
- the Channel will write to standard output instead.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new StcsChan. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_STCSCHAN = INTEGER
- }{
- A pointer to the new StcsChan.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The names of the routines supplied for the SOURCE and SINK
- arguments should appear in EXTERNAL statements in the Fortran
- routine which invokes AST\_STCSCHAN. However, this is not generally
- necessary for the null routine AST\_NULL (so long as the AST\_PAR
- include file has been used).
-
- \sstitem
- If the external data source or sink uses a character encoding
- other than ASCII, the supplied source and sink functions should
- translate between the external character encoding and the internal
- ASCII encoding used by AST.
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
-
- \sstitem
- Note that the null routine AST\_NULL (one underscore) is
- different to AST\_\_NULL (two underscores), which is the null Object
- pointer.
- }
- }
-}
-\sstroutine{
- AST\_STCSEARCHLOCATION\sstlabel{AST_STCSEARCHLOCATION}
-}{
- Create a StcSearchLocation
-}{
- \sstdescription{
- This function creates a new \htmlref{StcSearchLocation}{StcSearchLocation} and optionally initialises its
- attributes.
-
- The StcSearchLocation class is a sub-class of \htmlref{Stc}{Stc} used to describe
- the coverage of a VO query.
-
- See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
- }
- \sstinvocation{
- RESULT = AST\_STCSEARCHLOCATION( REGION, NCOORDS, COORDS, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- REGION = INTEGER (Given)
- }{
- Pointer to the encapsulated \htmlref{Region}{Region}.
- }
- \sstsubsection{
- NCOORDS = INTEGER (Given)
- }{
- The length of the COORDS array. Supply zero if COORDS should be
- ignored.
- }
- \sstsubsection{
- COORDS( NCOORDS ) = INTEGER (Given)
- }{
- An array holding NCOORDS AstKeyMap pointers (if NCOORDS
- is zero, the supplied value is ignored). Each supplied \htmlref{KeyMap}{KeyMap}
- describes the contents of a single STC $<$AstroCoords$>$ element, and
- should have elements with keys given by constants AST\_\_STCNAME,
- AST\_\_STCVALUE, AST\_\_STCERROR, AST\_\_STCRES, AST\_\_STCSIZE,
- AST\_\_STCPIXSZ. Any of these elements may be omitted, but no other
- elements should be included. If supplied, the AST\_\_STCNAME element
- should be a vector of character string pointers holding the {\tt{"}}Name{\tt{"}}
- item for each axis in the coordinate system represented by
- REGION.
- Any other supplied elements should be scalar elements, each holding
- a pointer to a Region describing the associated item of ancillary
- information (error, resolution, size, pixel size or value). These
- Regions should describe a volume within the coordinate system
- represented by REGION.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new StcSearchLocation. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_STCSEARCHLOCATION = INTEGER
- }{
- A pointer to the new StcSearchLocation.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A deep copy is taken of the supplied Region. This means that
- any subsequent changes made to the encapsulated Region using the
- supplied pointer will have no effect on the Stc.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- AST\_STRIPESCAPES\sstlabel{AST_STRIPESCAPES}
-}{
- Remove AST escape sequences from a string
-}{
- \sstdescription{
- This function removes AST escape sequences from a supplied string,
- returning the resulting text as the function value. The behaviour
- of this function can be controlled by invoking the
- \htmlref{AST\_ESCAPES}{AST_ESCAPES} routine,
- which can be used to supress or enable the removal of escape
- sequences by this function.
-
- AST escape sequences are used by the \htmlref{Plot}{Plot} class to modify the
- appearance and position of sub-strings within a plotted text string.
- See the {\tt{"}}\htmlref{Escape}{Escape}{\tt{"}} attribute for further information.
- }
- \sstinvocation{
- RESULT = AST\_STRIPESCAPES( TEXT )
- }
- \sstarguments{
- \sstsubsection{
- TEXT
- }{
- The string to be checked.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_STRIPESCAPES = CHARACTER
- }{
- The modified string. If the AST\_ESCAPES routine
- has been called indicating that escape sequences should not be
- stripped, then the supplied string is returned without change.
- }
- }
-}
-\sstroutine{
- AST\_SWITCHMAP\sstlabel{AST_SWITCHMAP}
-}{
- Create a SwitchMap
-}{
- \sstdescription{
- This function creates a new \htmlref{SwitchMap}{SwitchMap} and optionally initialises
- its attributes.
-
- A SwitchMap is a \htmlref{Mapping}{Mapping} which represents a set of alternate
- Mappings, each of which is used to transform positions within a
- particular region of the input or output coordinate system of the
- SwitchMap.
-
- A SwitchMap can encapsulate any number of Mappings, but they must
- all have the same number of inputs (\htmlref{Nin}{Nin} attribute value) and the
- same number of outputs (\htmlref{Nout}{Nout} attribute value). The SwitchMap itself
- inherits these same values for its Nin and Nout attributes. Each of
- these Mappings represents a {\tt{"}}route{\tt{"}} through the switch, and are
- referred to as {\tt{"}}route{\tt{"}} Mappings below. Each route Mapping transforms
- positions between the input and output coordinate space of the entire
- SwitchMap, but only one Mapping will be used to transform any given
- position. The selection of the appropriate route Mapping to use with
- any given input position is made by another Mapping, called the
- {\tt{"}}selector{\tt{"}} Mapping. Each SwitchMap encapsulates two selector
- Mappings in addition to its route Mappings; one for use with the
- SwitchMap's forward transformation (called the {\tt{"}}forward selector
- Mapping{\tt{"}}), and one for use with the SwitchMap's inverse transformation
- (called the {\tt{"}}inverse selector Mapping{\tt{"}}). The forward selector Mapping
- must have the same number of inputs as the route Mappings, but
- should have only one output. Likewise, the inverse selector Mapping
- must have the same number of outputs as the route Mappings, but
- should have only one input.
-
- When the SwitchMap is used to transform a position in the forward
- direction (from input to output), each supplied input position is
- first transformed by the forward transformation of the forward selector
- Mapping. This produces a single output value for each input position
- referred to as the selector value. The nearest integer to the selector
- value is found, and is used to index the array of route Mappings (the
- first supplied route Mapping has index 1, the second route Mapping has
- index 2, etc). If the nearest integer to the selector value is less
- than 1 or greater than the number of route Mappings, then the SwitchMap
- output position is set to a value of AST\_\_BAD on every axis. Otherwise,
- the forward transformation of the selected route Mapping is used to
- transform the supplied input position to produce the SwitchMap output
- position.
-
- When the SwitchMap is used to transform a position in the inverse
- direction (from {\tt{"}}output{\tt{"}} to {\tt{"}}input{\tt{"}}), each supplied {\tt{"}}output{\tt{"}} position
- is first transformed by the inverse transformation of the inverse
- selector Mapping. This produces a selector value for each {\tt{"}}output{\tt{"}}
- position. Again, the nearest integer to the selector value is found,
- and is used to index the array of route Mappings. If this selector
- index value is within the bounds of the array of route Mappings, then
- the inverse transformation of the selected route Mapping is used to
- transform the supplied {\tt{"}}output{\tt{"}} position to produce the SwitchMap
- {\tt{"}}input{\tt{"}} position. If the selector index value is outside the bounds
- of the array of route Mappings, then the SwitchMap {\tt{"}}input{\tt{"}} position is
- set to a value of AST\_\_BAD on every axis.
-
- In practice, appropriate selector Mappings should be chosen to
- associate a different route Mapping with each region of coordinate
- space. Note that the \htmlref{SelectorMap}{SelectorMap} class of Mapping is particularly
- appropriate for this purpose.
-
- If a compound Mapping contains a SwitchMap in series with its own
- inverse, the combination of the two adjacent SwitchMaps will be
- replaced by a \htmlref{UnitMap}{UnitMap} when the compound Mapping is simplified using
- \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}.
- }
- \sstinvocation{
- RESULT = AST\_SWITCHMAP( FSMAP, ISMAP, NROUTE, ROUTEMAPS, OPTIONS,
- STATUS )
- }
- \sstarguments{
- \sstsubsection{
- FSMAP = INTEGER (Given)
- }{
- Pointer to the forward selector Mapping. This must have a
- defined forward transformation, but need not have a defined
- inverse transformation. It must have one output, and the number of
- inputs must match the number of inputs of each of the supplied
- route Mappings.
- AST\_\_NULL
- may be supplied, in which case the SwitchMap will have an undefined
- forward Mapping.
- }
- \sstsubsection{
- ISMAP = INTEGER (Given)
- }{
- Pointer to the inverse selector Mapping. This must have a
- defined inverse transformation, but need not have a defined
- forward transformation. It must have one input, and the number of
- outputs must match the number of outputs of each of the supplied
- route Mappings.
- AST\_\_NULL
- may be supplied, in which case the SwitchMap will have an undefined
- inverse Mapping.
- }
- \sstsubsection{
- NROUTE = INTEGER (Given)
- }{
- The number of supplied route Mappings.
- }
- \sstsubsection{
- ROUTEMAPS( NROUTE ) = INTEGER (Given)
- }{
- An array of pointers to the route Mappings. All the supplied
- route Mappings must have common values for the Nin and Nout
- attributes, and these values define the number of inputs and
- outputs of the SwitchMap.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new SwitchMap. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_SWITCHMAP = INTEGER
- }{
- A pointer to the new SwitchMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Note that the component Mappings supplied are not copied by
- AST\_SWITCHMAP (the new SwitchMap simply retains a reference to
- them). They may continue to be used for other purposes, but
- should not be deleted. If a SwitchMap containing a copy of its
- component Mappings is required, then a copy of the SwitchMap should
- be made using \htmlref{AST\_COPY}{AST_COPY}.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_TEST\sstlabel{AST_TEST}
-}{
- Test if an Object attribute value is set
-}{
- \sstdescription{
- This function returns a logical result to indicate
- whether a value has been explicitly set for one of an \htmlref{Object}{Object}'s
- attributes.
- }
- \sstinvocation{
- RESULT = AST\_TEST( THIS, ATTRIB, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Object.
- }
- \sstsubsection{
- ATTRIB = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing the name of the attribute to be
- tested.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This routine applies to all Objects.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_TEST = LOGICAL
- }{
- .TRUE. if a value has previously been explicitly set for the
- attribute (and hasn't been cleared), otherwise .FALSE..
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Attribute names are not case sensitive and may be surrounded
- by white space.
-
- \sstitem
- A value of .FALSE. will be returned if this function is invoked
- with STATUS set to an error value, or if it should fail for any reason.
-
- \sstitem
- A value of .FALSE. will also be returned if this function is used
- to test a read-only attribute, although no error will result.
- }
- }
-}
-\sstroutine{
- AST\_TESTFITS\sstlabel{AST_TESTFITS}
-}{
- See if a named keyword has a defined value in a FitsChan
-}{
- \sstdescription{
- This function serches for a named keyword in a \htmlref{FitsChan}{FitsChan}. If found,
- and if the keyword has a value associated with it, a
- .TRUE.
- value is returned. If the keyword is not found, or if it does not
- have an associated value, a
- .FALSE.
- value is returned.
- }
- \sstinvocation{
- RESULT = AST\_TESTFITS( THIS, NAME, THERE, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the FitsChan.
- }
- \sstsubsection{
- NAME = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string
- containing the FITS keyword name. This may be a complete FITS
- header card, in which case the keyword to use is extracted from
- it. No more than 80 characters are read from this string.
- }
- \sstsubsection{
- THERE = LOGICAL (Returned)
- }{
- A value of .TRUE. will be returned if the keyword was found in the
- header, and .FALSE. otherwise.
- This parameter allows a distinction to be made between the case
- where a keyword is not present, and the case where a keyword is
- present but has no associated value.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_TESTFITS = LOGICAL
- }{
- A value of zero
- .FALSE.
- is returned if the keyword was not found in the FitsChan or has
- no associated value. Otherwise, a value of
- .TRUE.
- is returned.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The current card is left unchanged by this function.
-
- \sstitem
- The card following the current card is checked first. If this is
- not the required card, then the rest of the FitsChan is searched,
- starting with the first card added to the FitsChan. Therefore cards
- should be accessed in the order they are stored in the FitsChan (if
- possible) as this will minimise the time spent searching for cards.
-
- \sstitem
- An error will be reported if the keyword name does not conform
- to FITS requirements.
-
- \sstitem
- .FALSE.
- is returned as the function value if an error has already occurred,
- or if this function should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_TEXT\sstlabel{AST_TEXT}
-}{
- Draw a text string for a Plot
-}{
- \sstdescription{
- This function draws a string of text at a position specified in
- the physical coordinate system of a \htmlref{Plot}{Plot}. The physical position
- is transformed into graphical coordinates to determine where the
- text should appear within the plotting area.
- }
- \sstinvocation{
- CALL AST\_TEXT( THIS, TEXT, POS, UP, JUST, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Plot.
- }
- \sstsubsection{
- TEXT = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing the
- text to be drawn. Trailing white space is ignored.
- }
- \sstsubsection{
- POS( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array, with one element for each axis of the Plot, giving
- the physical coordinates of the point where the reference
- position of the text string is to be placed.
- }
- \sstsubsection{
- UP( $*$ ) = REAL (Given)
- }{
- An array holding the components of a vector in the {\tt{"}}up{\tt{"}}
- direction of the text (in graphical coordinates). For
- example, to get horizontal text, the vector [0.0,1.0] should
- be supplied. For a basic Plot, 2 values should be supplied. For
- a \htmlref{Plot3D}{Plot3D}, 3 values should be supplied, and the actual up vector
- used is the projection of the supplied up vector onto the text plane
- specified by the current value of the Plot3D's Norm attribute.
- }
- \sstsubsection{
- JUST = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string identifying the
- reference point for the text being drawn. The first character in
- this string identifies the reference position in the {\tt{"}}up{\tt{"}} direction
- and may be {\tt{"}}B{\tt{"}} (baseline), {\tt{"}}C{\tt{"}} (centre), {\tt{"}}T{\tt{"}} (top) or {\tt{"}}M{\tt{"}} (bottom).
- The second character identifies the side-to-side reference position
- and may be {\tt{"}}L{\tt{"}} (left), {\tt{"}}C{\tt{"}} (centre) or {\tt{"}}R{\tt{"}} (right ). The string is
- case-insensitive, and only the first two characters are significant.
-
- For example, a value of {\tt{"}}BL{\tt{"}} means that the left end of the
- baseline of the original (un-rotated) text is to be drawn at the
- position given by POS.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The Plot3D class currently does not interpret graphical escape
- sequences contained within text displayed using this method.
-
- \sstitem
- Text is not drawn at positions which have any coordinate equal
- to the value AST\_\_BAD (or where the transformation into
- graphical coordinates yields coordinates containing the value
- AST\_\_BAD).
-
- \sstitem
- If the plotting position is clipped (see \htmlref{AST\_CLIP}{AST_CLIP}), then no
- text is drawn.
-
- \sstitem
- An error results if the base \htmlref{Frame}{Frame} of the Plot is not
- 2-dimensional or (for a Plot3D) 3-dimensional.
-
- \sstitem
- An error also results if the transformation between the
- current and base Frames of the Plot is not defined (i.e. the
- Plot's \htmlref{TranInverse}{TranInverse} attribute is zero).
- }
- }
-}
-\sstroutine{
- AST\_TIMEADD\sstlabel{AST_TIMEADD}
-}{
- Add a time coordinate conversion to a TimeMap
-}{
- \sstdescription{
- This routine adds one of the standard time coordinate
- system conversions listed below to an existing \htmlref{TimeMap}{TimeMap}.
-
- When a TimeMap is first created (using \htmlref{AST\_TIMEMAP}{AST_TIMEMAP}), it simply
- performs a unit (null) \htmlref{Mapping}{Mapping}. By using AST\_TIMEADD (repeatedly
- if necessary), one or more coordinate conversion steps may then
- be added, which the TimeMap will perform in sequence. This allows
- multi-step conversions between a variety of time coordinate
- systems to be assembled out of the building blocks provided by
- this class.
-
- Normally, if a TimeMap's \htmlref{Invert}{Invert} attribute is zero (the default),
- then its forward transformation is performed by carrying out
- each of the individual coordinate conversions specified by
- AST\_TIMEADD in the order given (i.e. with the most recently added
- conversion applied last).
-
- This order is reversed if the TimeMap's Invert attribute is
- non-zero (or if the inverse transformation is requested by any
- other means) and each individual coordinate conversion is also
- replaced by its own inverse. This process inverts the overall
- effect of the TimeMap. In this case, the first conversion to be
- applied would be the inverse of the one most recently added.
- }
- \sstinvocation{
- CALL AST\_TIMEADD( THIS, CVT, ARGS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the TimeMap.
- }
- \sstsubsection{
- CVT = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string which identifies the
- time coordinate conversion to be added to the
- TimeMap. See the {\tt{"}}Available Conversions{\tt{"}} section for details of
- those available.
- }
- \sstsubsection{
- ARGS( $*$ ) = DOUBLE PRECISION (Given)
- }{
- An array containing argument values for the time
- coordinate conversion. The number of arguments required, and
- hence the number of array elements used, depends on the
- conversion specified (see the {\tt{"}}Available Conversions{\tt{"}}
- section). This array is ignored
- if no arguments are needed.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When assembling a multi-stage conversion, it can sometimes be
- difficult to determine the most economical conversion path. A solution
- to this is to include all the steps which are (logically) necessary,
- but then to use
- \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY} to simplify the resulting
- TimeMap. The simplification process will eliminate any steps
- which turn out not to be needed.
-
- \sstitem
- This routine does not check to ensure that the sequence of
- coordinate conversions added to a TimeMap is physically
- meaningful.
- }
- }
- \sstdiytopic{
- Available Conversions
- }{
- The following strings (which are case-insensitive) may be supplied
- via the CVT argument to indicate which time coordinate
- conversion is to be added to the TimeMap. Where arguments are needed by
- the conversion, they are listed in parentheses. Values for
- these arguments should be given, via the ARGS array, in the
- order indicated. Units and argument names are described at the end of
- the list of conversions, and {\tt{"}}MJD{\tt{"}} means Modified Julian Date.
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}MJDTOMJD{\tt{"}} (MJDOFF1,MJDOFF2): Convert MJD from one offset to another.
-
- \sstitem
- {\tt{"}}MJDTOJD{\tt{"}} (MJDOFF,JDOFF): Convert MJD to Julian Date.
-
- \sstitem
- {\tt{"}}JDTOMJD{\tt{"}} (JDOFF,MJDOFF): Convert Julian Date to MJD.
-
- \sstitem
- {\tt{"}}MJDTOBEP{\tt{"}} (MJDOFF,BEPOFF): Convert MJD to Besselian epoch.
-
- \sstitem
- {\tt{"}}BEPTOMJD{\tt{"}} (BEPOFF,MJDOFF): Convert Besselian epoch to MJD.
-
- \sstitem
- {\tt{"}}MJDTOJEP{\tt{"}} (MJDOFF,JEPOFF): Convert MJD to Julian epoch.
-
- \sstitem
- {\tt{"}}JEPTOMJD{\tt{"}} (JEPOFF,MJDOFF): Convert Julian epoch to MJD.
-
- \sstitem
- {\tt{"}}TAITOUTC{\tt{"}} (MJDOFF): Convert a TAI MJD to a UTC MJD.
-
- \sstitem
- {\tt{"}}UTCTOTAI{\tt{"}} (MJDOFF): Convert a UTC MJD to a TAI MJD.
-
- \sstitem
- {\tt{"}}TAITOTT{\tt{"}} (MJDOFF): Convert a TAI MJD to a TT MJD.
-
- \sstitem
- {\tt{"}}TTTOTAI{\tt{"}} (MJDOFF): Convert a TT MJD to a TAI MJD.
-
- \sstitem
- {\tt{"}}TTTOTDB{\tt{"}} (MJDOFF, OBSLON, OBSLAT, OBSALT): Convert a TT MJD to a TDB MJD.
-
- \sstitem
- {\tt{"}}TDBTOTT{\tt{"}} (MJDOFF, OBSLON, OBSLAT, OBSALT): Convert a TDB MJD to a TT MJD.
-
- \sstitem
- {\tt{"}}TTTOTCG{\tt{"}} (MJDOFF): Convert a TT MJD to a TCG MJD.
-
- \sstitem
- {\tt{"}}TCGTOTT{\tt{"}} (MJDOFF): Convert a TCG MJD to a TT MJD.
-
- \sstitem
- {\tt{"}}TDBTOTCB{\tt{"}} (MJDOFF): Convert a TDB MJD to a TCB MJD.
-
- \sstitem
- {\tt{"}}TCBTOTDB{\tt{"}} (MJDOFF): Convert a TCB MJD to a TDB MJD.
-
- \sstitem
- {\tt{"}}UTTOGMST{\tt{"}} (MJDOFF): Convert a UT MJD to a GMST MJD.
-
- \sstitem
- {\tt{"}}GMSTTOUT{\tt{"}} (MJDOFF): Convert a GMST MJD to a UT MJD.
-
- \sstitem
- {\tt{"}}GMSTTOLMST{\tt{"}} (MJDOFF, OBSLON, OBSLAT): Convert a GMST MJD to a LMST MJD.
-
- \sstitem
- {\tt{"}}LMSTTOGMST{\tt{"}} (MJDOFF, OBSLON, OBSLAT): Convert a LMST MJD to a GMST MJD.
-
- \sstitem
- {\tt{"}}LASTTOLMST{\tt{"}} (MJDOFF, OBSLON, OBSLAT): Convert a GMST MJD to a LMST MJD.
-
- \sstitem
- {\tt{"}}LMSTTOLAST{\tt{"}} (MJDOFF, OBSLON, OBSLAT): Convert a LMST MJD to a GMST MJD.
-
- \sstitem
- {\tt{"}}UTTOUTC{\tt{"}} (DUT1): Convert a UT1 MJD to a UTC MJD.
-
- \sstitem
- {\tt{"}}UTCTOUT{\tt{"}} (DUT1): Convert a UTC MJD to a UT1 MJD.
-
- \sstitem
- {\tt{"}}LTTOUTC{\tt{"}} (LTOFF): Convert a Local Time MJD to a UTC MJD.
-
- \sstitem
- {\tt{"}}UTCTOLT{\tt{"}} (LTOFF): Convert a UTC MJD to a Local Time MJD.
-
- }
- The units for the values processed by the above conversions are as
- follows:
-
- \sstitemlist{
-
- \sstitem
- Julian epochs and offsets: Julian years
-
- \sstitem
- Besselian epochs and offsets: Tropical years
-
- \sstitem
- Modified Julian Dates and offsets: days
-
- \sstitem
- Julian Dates and offsets: days
-
- }
- The arguments used in the above conversions are the zero-points
- used by the
- AST\_TRANSFORM routine.
- The axis values supplied and returned by
- AST\_TRANSFORM
- are offsets away from these zero-points:
-
- \sstitemlist{
-
- \sstitem
- MJDOFF: The zero-point being used with MJD values.
-
- \sstitem
- JDOFF: The zero-point being used with Julian Date values.
-
- \sstitem
- BEPOFF: The zero-point being used with Besselian epoch values.
-
- \sstitem
- JEPOFF: The zero-point being used with Julian epoch values.
-
- \sstitem
- OBSLON: Observer longitude in radians ($+$ve westwards).
-
- \sstitem
- OBSLAT: Observer geodetic latitude (IAU 1975) in radians ($+$ve northwards).
-
- \sstitem
- OBSALT: Observer geodetic altitude (IAU 1975) in metres.
-
- \sstitem
- DUT1: The UT1-UTC value to use.
-
- \sstitem
- LTOFF: The offset between Local Time and UTC (in hours, positive
- for time zones east of Greenwich).
- }
- }
-}
-\sstroutine{
- AST\_TIMEFRAME\sstlabel{AST_TIMEFRAME}
-}{
- Create a TimeFrame
-}{
- \sstdescription{
- This function creates a new \htmlref{TimeFrame}{TimeFrame} and optionally initialises
- its attributes.
-
- A TimeFrame is a specialised form of one-dimensional \htmlref{Frame}{Frame} which
- represents various coordinate systems used to describe positions in
- time.
-
- A TimeFrame represents a moment in time as either an Modified Julian
- Date (MJD), a Julian Date (JD), a Besselian epoch or a Julian epoch,
- as determined by the \htmlref{System}{System} attribute. Optionally, a zero point can be
- specified (using attribute \htmlref{TimeOrigin}{TimeOrigin}) which results in the TimeFrame
- representing time offsets from the specified zero point.
-
- Even though JD and MJD are defined as being in units of days, the
- TimeFrame class allows other units to be used (via the Unit attribute)
- on the basis of simple scalings (60 seconds = 1 minute, 60 minutes = 1
- hour, 24 hours = 1 day, 365.25 days = 1 year). Likewise, Julian epochs
- can be described in units other than the usual years. Besselian epoch
- are always represented in units of (tropical) years.
-
- The \htmlref{TimeScale}{TimeScale} attribute allows the time scale to be specified (that
- is, the physical proces used to define the rate of flow of time).
- MJD, JD and Julian epoch can be used to represent a time in any
- supported time scale. However, Besselian epoch may only be used with the
- {\tt{"}}TT{\tt{"}} (Terrestrial Time) time scale. The list of supported time scales
- includes universal time and siderial time. Strictly, these represent
- angles rather than time scales, but are included in the list since
- they are in common use and are often thought of as time scales.
-
- When a time value is formatted it can be formated either as a simple
- floating point value, or as a Gregorian date (see the Format
- attribute).
- }
- \sstinvocation{
- RESULT = AST\_TIMEFRAME( OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new TimeFrame. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine. If no initialisation is required, a blank
- value may be supplied.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_TIMEFRAME = INTEGER
- }{
- A pointer to the new TimeFrame.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When conversion between two TimeFrames is requested (as when
- supplying TimeFrames \htmlref{AST\_CONVERT}{AST_CONVERT}),
- account will be taken of the nature of the time coordinate systems
- they represent, together with any qualifying time scale, offset,
- unit, etc. The \htmlref{AlignSystem}{AlignSystem} and \htmlref{AlignTimeScale}{AlignTimeScale} attributes will also be
- taken into account.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_TIMEMAP\sstlabel{AST_TIMEMAP}
-}{
- Create a TimeMap
-}{
- \sstdescription{
- This function creates a new \htmlref{TimeMap}{TimeMap} and optionally initialises
- its attributes.
-
- A TimeMap is a specialised form of 1-dimensional \htmlref{Mapping}{Mapping} which can be
- used to represent a sequence of conversions between standard time
- coordinate systems.
-
- When a TimeMap is first created, it simply performs a unit
- (null) Mapping. Using the \htmlref{AST\_TIMEADD}{AST_TIMEADD}
- routine, a series of coordinate conversion steps may then be
- added. This allows multi-step conversions between a variety of
- time coordinate systems to be assembled out of a set of building
- blocks.
-
- For details of the individual coordinate conversions available,
- see the description of the AST\_TIMEADD routine.
- }
- \sstinvocation{
- RESULT = AST\_TIMEMAP( FLAGS, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- FLAGS = INTEGER (Given)
- }{
- This argument is reserved for future use and should currently
- always be set to zero.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new TimeMap. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine. If no initialisation is required, a blank
- value may be supplied.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_TIMEMAP = INTEGER
- }{
- A pointer to the new TimeMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The nature and units of the coordinate values supplied for the
- first input (i.e. the time input) of a TimeMap must be appropriate
- to the first conversion step applied by the TimeMap. For instance, if
- the first conversion step is {\tt{"}}MJDTOBEP{\tt{"}} (Modified Julian Date to
- Besselian epoch) then the coordinate values for the first input should
- be date in units of days. Similarly, the nature and units of the
- coordinate values returned by a TimeMap will be determined by the
- last conversion step applied by the TimeMap.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_TRAN1\sstlabel{AST_TRAN1}
-}{
- Transform 1-dimensional coordinates
-}{
- \sstdescription{
- This routine applies a \htmlref{Mapping}{Mapping} to transform the coordinates of
- a set of points in one dimension.
- }
- \sstinvocation{
- CALL AST\_TRAN1( THIS, NPOINT, XIN, FORWARD, XOUT, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Mapping to be applied.
- }
- \sstsubsection{
- NPOINT = INTEGER (Given)
- }{
- The number of points to be transformed.
- }
- \sstsubsection{
- XIN( NPOINT ) = DOUBLE PRECISION (Given)
- }{
- An array of coordinate values for the input
- (untransformed) points.
- }
- \sstsubsection{
- FORWARD = LOGICAL (Given)
- }{
- A .TRUE. value indicates that the Mapping's forward
- coordinate transformation is to be applied, while a .FALSE.
- value indicates that the inverse transformation should be
- used.
- }
- \sstsubsection{
- XOUT( NPOINT ) = DOUBLE PRECISION (Returned)
- }{
- An array into which the
- coordinates of the output (transformed) points will be written.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The Mapping supplied must have the value 1 for both its \htmlref{Nin}{Nin}
- and \htmlref{Nout}{Nout} attributes.
- }
- }
-}
-\sstroutine{
- AST\_TRAN2\sstlabel{AST_TRAN2}
-}{
- Transform 2-dimensional coordinates
-}{
- \sstdescription{
- This routine applies a \htmlref{Mapping}{Mapping} to transform the coordinates of
- a set of points in two dimensions.
- }
- \sstinvocation{
- CALL AST\_TRAN2( THIS, NPOINT, XIN, YIN, FORWARD, XOUT, YOUT, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Mapping to be applied.
- }
- \sstsubsection{
- NPOINT = INTEGER (Given)
- }{
- The number of points to be transformed.
- }
- \sstsubsection{
- XIN( NPOINT ) = DOUBLE PRECISION (Given)
- }{
- An array of X-coordinate values for the input
- (untransformed) points.
- }
- \sstsubsection{
- YIN( NPOINT ) = DOUBLE PRECISION (Given)
- }{
- An array of Y-coordinate values for the input
- (untransformed) points.
- }
- \sstsubsection{
- FORWARD = LOGICAL (Given)
- }{
- A .TRUE. value indicates that the Mapping's forward
- coordinate transformation is to be applied, while a .FALSE.
- value indicates that the inverse transformation should be
- used.
- }
- \sstsubsection{
- XOUT( NPOINT ) = DOUBLE PRECISION (Returned)
- }{
- An array into which the
- X-coordinates of the output (transformed) points will be written.
- }
- \sstsubsection{
- YOUT( NPOINT ) = DOUBLE PRECISION (Returned)
- }{
- An array into which the
- Y-coordinates of the output (transformed) points will be written.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The Mapping supplied must have the value 2 for both its \htmlref{Nin}{Nin}
- and \htmlref{Nout}{Nout} attributes.
- }
- }
-}
-\sstroutine{
- AST\_TRANGRID\sstlabel{AST_TRANGRID}
-}{
- Transform a grid of positions
-}{
- \sstdescription{
- This function uses the supplied \htmlref{Mapping}{Mapping} to transforms a regular square
- grid of points covering a specified box. It attempts to do this
- quickly by first approximating the Mapping with a linear transformation
- applied over the whole region of the input grid which is being used.
- If this proves to be insufficiently accurate, the input region is
- sub-divided into two along its largest dimension and the process is
- repeated within each of the resulting sub-regions. This process of
- sub-division continues until a sufficiently good linear approximation
- is found, or the region to which it is being applied becomes too small
- (in which case the original Mapping is used directly).
- }
- \sstinvocation{
- CALL AST\_TRANGRID( THIS, NCOORD\_IN, LBND, UBND, TOL, MAXPIX,
- FORWARD, NCOORD\_OUT, OUTDIM, OUT, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Mapping to be applied.
- }
- \sstsubsection{
- NCOORD\_IN = INTEGER (Given)
- }{
- The number of coordinates being supplied for each box corner
- (i.e. the number of dimensions of the space in which the
- input points reside).
- }
- \sstsubsection{
- LBND( NCOORD\_IN ) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the centre of the first pixel
- in the input grid along each dimension.
- }
- \sstsubsection{
- UBND( NCOORD\_IN ) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the centre of the last pixel in
- the input grid along each dimension.
-
- Note that LBND and UBND together define the shape
- and size of the input grid, its extent along a particular
- (J'th) dimension being UBND(J)-LBND(J)$+$1. They also define
- the input grid's coordinate system, each pixel having unit
- extent along each dimension with integral coordinate values
- at its centre.
- }
- \sstsubsection{
- TOL = DOUBLE PRECISION (Given)
- }{
- The maximum tolerable geometrical distortion which may be
- introduced as a result of approximating non-linear Mappings
- by a set of piece-wise linear transformations. This should be
- expressed as a displacement within the output coordinate system
- of the Mapping.
-
- If piece-wise linear approximation is not required, a value
- of zero may be given. This will ensure that the Mapping is
- used without any approximation, but may increase execution
- time.
-
- If the value is too high, discontinuities between the linear
- approximations used in adjacent panel will be higher. If this
- is a problem, reduce the tolerance value used.
- }
- \sstsubsection{
- MAXPIX = INTEGER (Given)
- }{
- A value which specifies an initial scale size (in input grid points)
- for the adaptive algorithm which approximates non-linear Mappings
- with piece-wise linear transformations. Normally, this should
- be a large value (larger than any dimension of the region of
- the input grid being used). In this case, a first attempt to
- approximate the Mapping by a linear transformation will be
- made over the entire input region.
-
- If a smaller value is used, the input region will first be
- divided into sub-regions whose size does not exceed MAXPIX
- grid points in any dimension. Only at this point will attempts
- at approximation commence.
-
- This value may occasionally be useful in preventing false
- convergence of the adaptive algorithm in cases where the
- Mapping appears approximately linear on large scales, but has
- irregularities (e.g. holes) on smaller scales. A value of,
- say, 50 to 100 grid points can also be employed as a safeguard
- in general-purpose software, since the effect on performance is
- minimal.
-
- If too small a value is given, it will have the effect of
- inhibiting linear approximation altogether (equivalent to
- setting TOL to zero). Although this may degrade
- performance, accurate results will still be obtained.
- }
- \sstsubsection{
- FORWARD = LOGICAL (Given)
- }{
- A .TRUE. value indicates that the Mapping's forward
- coordinate transformation is to be applied, while a .FALSE.
- value indicates that the inverse transformation should be
- used.
- }
- \sstsubsection{
- NCOORD\_OUT = INTEGER (Given)
- }{
- The number of coordinates being generated by the Mapping for
- each output point (i.e. the number of dimensions of the
- space in which the output points reside). This need not be
- the same as NCOORD\_IN.
- }
- \sstsubsection{
- OUTDIM = INTEGER (Given)
- }{
- The number of elements along the first dimension of the OUT
- array (which will contain the output coordinates). The value
- given should not be less than the number of points in the grid.
- }
- \sstsubsection{
- OUT( OUTDIM, NCOORD\_OUT ) = DOUBLE PRECISION (Returned)
- }{
- An array into which the coordinates of the output
- (transformed) points will be written. These will be stored
- such that the value of coordinate number COORD for output
- point number POINT will be found in element OUT(POINT,COORD).
- The points are ordered such that the first axis of the input
- grid changes most rapidly. For example, if the input grid is
- 2-dimensional and extends from (2,-1) to (3,1), the output
- points will be stored in the order (2,-1), (3, -1), (2,0), (3,0),
- (2,1), (3,1).
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the forward coordinate transformation is being applied, the
- Mapping supplied must have the value of NCOORD\_IN for its \htmlref{Nin}{Nin}
- attribute and the value of NCOORD\_OUT for its \htmlref{Nout}{Nout} attribute. If
- the inverse transformation is being applied, these values should
- be reversed.
- }
- }
-}
-\sstroutine{
- AST\_TRANMAP\sstlabel{AST_TRANMAP}
-}{
- Create a TranMap
-}{
- \sstdescription{
- This function creates a new \htmlref{TranMap}{TranMap} and optionally initialises
- its attributes.
-
- A TranMap is a \htmlref{Mapping}{Mapping} which combines the forward transformation of
- a supplied Mapping with the inverse transformation of another
- supplied Mapping, ignoring the un-used transformation in each
- Mapping (indeed the un-used transformation need not exist).
-
- When the forward transformation of the TranMap is referred to, the
- transformation actually used is the forward transformation of the
- first Mapping supplied when the TranMap was constructed. Likewise,
- when the inverse transformation of the TranMap is referred to, the
- transformation actually used is the inverse transformation of the
- second Mapping supplied when the TranMap was constructed.
- }
- \sstinvocation{
- RESULT = AST\_TRANMAP( MAP1, MAP2, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- MAP1 = INTEGER (Given)
- }{
- Pointer to the first component Mapping, which defines the
- forward transformation.
- }
- \sstsubsection{
- MAP2 = INTEGER (Given)
- }{
- Pointer to the second component Mapping, which defines the
- inverse transformation.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new TranMap. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_TRANMAP = INTEGER
- }{
- A pointer to the new TranMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The number of output coordinates generated by the two Mappings
- (their \htmlref{Nout}{Nout} attribute) must be equal, as must the number of input
- coordinates accepted by each Mapping (their \htmlref{Nin}{Nin} attribute).
-
- \sstitem
- The forward transformation of the first Mapping must exist.
-
- \sstitem
- The inverse transformation of the second Mapping must exist.
-
- \sstitem
- Note that the component Mappings supplied are not copied by
- AST\_TRANMAP (the new TranMap simply retains a reference to
- them). They may continue to be used for other purposes, but
- should not be deleted. If a TranMap containing a copy of its
- component Mappings is required, then a copy of the TranMap should
- be made using \htmlref{AST\_COPY}{AST_COPY}.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- AST\_TRANN\sstlabel{AST_TRANN}
-}{
- Transform N-dimensional coordinates
-}{
- \sstdescription{
- This routine applies a \htmlref{Mapping}{Mapping} to transform the coordinates of
- a set of points in an arbitrary number of dimensions. It is the
- appropriate routine to use if the coordinates are not purely 1-
- or 2-dimensional and are stored in a single array (which they
- need not fill completely).
- }
- \sstinvocation{
- CALL AST\_TRANN( THIS, NPOINT,
- NCOORD\_IN, INDIM, IN,
- FORWARD, NCOORD\_OUT, OUTDIM, OUT, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Mapping to be applied.
- }
- \sstsubsection{
- NPOINT = INTEGER (Given)
- }{
- The number of points to be transformed.
- }
- \sstsubsection{
- NCOORD\_IN = INTEGER (Given)
- }{
- The number of coordinates being supplied for each input point
- (i.e. the number of dimensions of the space in which the
- input points reside).
- }
- \sstsubsection{
- INDIM = INTEGER (Given)
- }{
- The number of elements along the first dimension of the IN
- array (which contains the input coordinates). This value is
- required so that the coordinate values can be correctly
- located if they do not entirely fill this array. The value
- given should not be less than NPOINT.
- }
- \sstsubsection{
- IN( INDIM, NCOORD\_IN ) = DOUBLE PRECISION (Given)
- }{
- An array containing the coordinates of the input
- (untransformed) points. These should be stored such that the
- value of coordinate number COORD for input point number POINT
- is found in element IN(POINT,COORD).
- }
- \sstsubsection{
- FORWARD = LOGICAL (Given)
- }{
- A .TRUE. value indicates that the Mapping's forward
- coordinate transformation is to be applied, while a .FALSE.
- value indicates that the inverse transformation should be
- used.
- }
- \sstsubsection{
- NCOORD\_OUT = INTEGER (Given)
- }{
- The number of coordinates being generated by the Mapping for
- each output point (i.e. the number of dimensions of the
- space in which the output points reside). This need not be
- the same as NCOORD\_IN.
- }
- \sstsubsection{
- OUTDIM = INTEGER (Given)
- }{
- The number of elements along the first dimension of the OUT
- array (which will contain the output coordinates). This value
- is required so that the coordinate values can be correctly
- located if they will not entirely fill this array. The value
- given should not be less than NPOINT.
- }
- \sstsubsection{
- OUT( OUTDIM, NCOORD\_OUT ) = DOUBLE PRECISION (Returned)
- }{
- An array into which the coordinates of the output
- (transformed) points will be written. These will be stored
- such that the value of coordinate number COORD for output
- point number POINT will be found in element OUT(POINT,COORD).
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the forward coordinate transformation is being applied, the
- Mapping supplied must have the value of NCOORD\_IN for its \htmlref{Nin}{Nin}
- attribute and the value of NCOORD\_OUT for its \htmlref{Nout}{Nout} attribute. If
- the inverse transformation is being applied, these values should
- be reversed.
- }
- }
-}
-\sstroutine{
- AST\_TUNE\sstlabel{AST_TUNE}
-}{
- Set or get an AST global tuning parameter
-}{
- \sstdescription{
- This function returns the current value of an AST global tuning
- parameter, optionally storing a new value for the parameter.
- }
- \sstinvocation{
- RESULT = AST\_TUNE( NAME, VALUE, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- NAME = CHARACTER $*$ ( $*$ ) (Given)
- }{
- The name of the tuning parameter (case-insensitive).
- }
- \sstsubsection{
- VALUE = INTEGER (Given)
- }{
- The new value for the tuning parameter. If this is AST\_\_TUNULL,
- the existing current value will be retained.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_TUNE = INTEGER
- }{
- be returned if no value has been set for the parameter.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This routine attempts to execute even if STATUS is set to an
- error value
- on entry, although no further error report will be
- made if it subsequently fails under these circumstances.
-
- \sstitem
- All threads in a process share the same AST tuning parameters
- values.
- }
- }
- \sstdiylist{
- Tuning Parameters
- }{
- \sstsubsection{
- ObjectCaching
- }{
- A boolean flag which indicates what should happen
- to the memory occupied by an AST \htmlref{Object}{Object} when the Object is deleted
- (i.e. when its reference count falls to zero or it is deleted using
- \htmlref{AST\_DELETE}{AST_DELETE}).
- If this is zero, the memory is simply freed using the systems {\tt{"}}free{\tt{"}}
- function. If it is non-zero, the memory is not freed. Instead a
- pointer to it is stored in a pool of such pointers, all of which
- refer to allocated but currently unused blocks of memory. This allows
- AST to speed up subsequent Object creation by re-using previously
- allocated memory blocks rather than allocating new memory using the
- systems malloc function. The default value for this parameter is
- zero. Setting it to a non-zero value will result in Object memory
- being cached in future. Setting it back to zero causes any memory
- blocks currently in the pool to be freed. Note, this tuning parameter
- only controls the caching of memory used to store AST Objects. To
- cache other memory blocks allocated by AST, use MemoryCaching.
- }
- \sstsubsection{
- MemoryCaching
- }{
- A boolean flag similar to ObjectCaching except
- that it controls caching of all memory blocks of less than 300 bytes
- allocated by AST (whether for internal or external use), not just
- memory used to store AST Objects.
- }
- }
-}
-\sstroutine{
- AST\_UINTERP\sstlabel{AST_UINTERP}
-}{
- Perform sub-pixel interpolation on a grid of data
-}{
- \sstdescription{
- This is a fictitious routine which does not actually
- exist. Instead, this description constitutes a template so that
- you may implement a routine with this interface for yourself
- (and give it any name you wish). Such a routine
- may be passed via the FINTERP argument of the \htmlref{AST\_RESAMPLE$<$X$>$}{AST_RESAMPLEX}
- functions (q.v.) in order to perform sub-pixel interpolation
- during resampling of gridded data (you must also set the
- INTERP argument of AST\_RESAMPLE$<$X$>$ to the value
- AST\_\_UINTERP). This allows you to use your own interpolation
- algorithm in addition to those which are pre-defined.
-
- The routine interpolates an input grid of data (and,
- optionally, processes associated statistical variance estimates)
- at a specified set of points.
- }
- \sstinvocation{
- CALL AST\_UINTERP( NDIM\_IN, LBND\_IN, UBND\_IN, IN, IN\_VAR,
- NPOINT, OFFSET, COORDS, PARAMS, FLAGS, BADVAL,
- OUT, OUT\_VAR, NBAD, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- NDIM\_IN = INTEGER (Given)
- }{
- The number of dimensions in the input grid. This will be at
- least one.
- }
- \sstsubsection{
- LBND\_IN( NDIM\_IN ) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the centre of the first pixel
- in the input grid along each dimension.
- }
- \sstsubsection{
- UBND\_IN( NDIM\_IN ) = INTEGER (Given)
- }{
- An array
- containing the coordinates of the centre of the last pixel in
- the input grid along each dimension.
-
- Note that LBND\_IN and UBND\_IN together define the shape,
- size and coordinate system of the input grid in the same
- way as they do in AST\_RESAMPLE$<$X$>$.
- }
- \sstsubsection{
- IN( $*$ ) = $<$Xtype$>$ (Given)
- }{
- An array, with one element for each pixel in the
- input grid, containing the input data. This will be the same
- array as was passed to AST\_RESAMPLE$<$X$>$ via the IN argument.
- The numerical type of this array should match that of the
- data being processed.
- }
- \sstsubsection{
- IN\_VAR( $*$ ) = $<$Xtype$>$ (Given)
- }{
- An optional second array with the same size and type as the
- IN array. This will only be given if the AST\_\_USEVAR flag is
- set via the FLAGS argument (below). If given, it will contain
- the set of variance values associated with the input data and
- will be the same array as was passed to AST\_RESAMPLE$<$X$>$ via
- the IN\_VAR argument.
-
- If the AST\_\_USEVAR flag is not set, then no variance values
- are being processed. In this case, this array of variance
- values may be a dummy (e.g. one-element) array and should not
- be used.
- }
- \sstsubsection{
- NPOINT = INTEGER (Given)
- }{
- The number of points at which the input grid is to be
- interpolated. This will be at least one.
- }
- \sstsubsection{
- OFFSET( NPOINT ) = INTEGER (Given)
- }{
- For each interpolation point, this array will contain the
- offset from the start of the OUT (and OUT\_VAR) array(s) at
- which the interpolated value (and its variance, if required)
- should be stored. For example, the interpolated value for
- point number POINT should be stored in OUT(1$+$OFFSET(POINT)).
- }
- \sstsubsection{
- COORDS( NPOINT, NDIM\_IN ) = DOUBLE PRECISION (Given)
- }{
- A 2-dimensional array containing the coordinates of the
- points at which interpolation should be performed. These will
- be stored so that coordinate number COORD for interpolation
- point number POINT is found in element COORDS(POINT,COORD).
-
- If any interpolation point has any of its coordinates equal
- to the value AST\_\_BAD (as defined in the AST\_PAR include
- file), then the corresponding output data (and variance)
- should either be set to the value given by BADVAL,
- or left unchanged, depending on whether the AST\_\_NOBAD flag is
- specified by FLAGS.
- }
- \sstsubsection{
- PARAMS( $*$ ) = DOUBLE PRECISION (Given)
- }{
- This will be the same array as was given via the
- PARAMS argument of AST\_RESAMPLE$<$X$>$. You may use this to
- pass any additional parameter values required by your
- interpolation algorithm.
- }
- \sstsubsection{
- FLAGS = INTEGER (Given)
- }{
- This will be the same value as was given via the FLAGS
- argument of AST\_RESAMPLE$<$X$>$. You may test this value to
- provide additional control over the operation of your
- resampling algorithm. Note that the special flag values
- AST\_\_URESAMP1, 2, 3 \& 4 are reserved for you to use for your
- own purposes and will not clash with other pre-defined flag
- values (see AST\_RESAMPLE$<$X$>$).
- }
- \sstsubsection{
- BADVAL = $<$Xtype$>$ (Given)
- }{
- This will be the same value as was given for the BADVAL
- argument of AST\_RESAMPLE$<$X$>$, and will have the same numerical
- type as the data being processed (i.e. as elements of the IN
- array). It should be used to test for bad pixels in the
- input grid (but only if the AST\_\_USEBAD flag is set via the
- FLAGS argument) and (unless the AST\_\_NOBAD flag is set in
- FLAGS) for identifying bad output values in the OUT (and
- OUT\_VAR) array(s).
- }
- \sstsubsection{
- OUT( $*$ ) = $<$Xtype$>$ (Returned)
- }{
- An array with the same numerical type as the IN
- array, into which the interpolated data values should be
- returned. Note that details of the storage order and number
- of dimensions of this array are not required, since the
- OFFSET array contains all necessary information about where
- each returned value should be stored.
-
- In general, not all elements of this array (or the OUT\_VAR
- array below) may be used in any particular invocation of the
- routine. Those which are not used should be returned
- unchanged.
- }
- \sstsubsection{
- OUT\_VAR( $*$ ) = $<$Xtype$>$ (Returned)
- }{
- An optional array with the same type and size as the OUT
- array, into which variance estimates for the resampled values
- should be returned. This array will only be given if the
- AST\_\_USEVAR flag is set via the FLAGS argument.
-
- If given, it is addressed in exactly the same way (via the
- OFFSET array) as the OUT array. The values returned should be
- estimates of the statistical variance of the corresponding
- values in the OUT array, on the assumption that all errors in
- input data values are statistically independent and that
- their variance estimates may simply be summed (with
- appropriate weighting factors).
-
- If the AST\_\_USEVAR flag is not set, then variance values are
- not being processed. In this case, this array may be a dummy
- (e.g. one-element) array and should not be used.
- }
- \sstsubsection{
- NBAD = INTEGER (Returned)
- }{
- This should return the number of interpolation points at
- which no valid interpolated value could be obtained. The maximum
- value that should be returned is NPOINT, and the minimum is
- zero (indicating that all output values were successfully
- obtained).
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The data type $<$Xtype$>$ indicates the numerical type of the data
- being processed, as for AST\_RESAMPLE$<$X$>$.
-
- \sstitem
- This routine will typically be invoked more than once for each
- invocation of AST\_RESAMPLE$<$X$>$.
-
- \sstitem
- If an error occurs within this routine, it should set the
- STATUS argument to an error value before returning. This will
- cause an immediate return from AST\_RESAMPLE$<$X$>$. The error value
- AST\_\_UINER is available for this purpose, but other values may also
- be used (e.g. if you wish to distinguish different types of error).
- The AST\_\_UINER error value is defined in the AST\_ERR include file.
- }
- }
-}
-\sstroutine{
- AST\_UKERN1\sstlabel{AST_UKERN1}
-}{
- 1-dimensional sub-pixel interpolation kernel
-}{
- \sstdescription{
- This is a fictitious routine which does not actually
- exist. Instead, this description constitutes a template so that
- you may implement a routine with this interface for yourself
- (and give it any name you wish). Such a routine
- may be passed via the FINTERP argument of the \htmlref{AST\_RESAMPLE$<$X$>$}{AST_RESAMPLEX}
- functions (q.v.) in order to supply a 1-dimensional
- interpolation kernel to the algorithm which performs sub-pixel
- interpolation during resampling of gridded data (you must also
- set the INTERP argument of AST\_RESAMPLE$<$X$>$ to the value
- AST\_\_UKERN1). This allows you to use your own interpolation
- kernel in addition to those which are pre-defined.
-
- The routine calculates the value of a 1-dimensional sub-pixel
- interpolation kernel. This determines how the weight given to
- neighbouring pixels in calculating an interpolated value depends
- on the pixel's offset from the interpolation point. In more than
- one dimension, the weight assigned to a pixel is formed by
- evaluating this 1-dimensional kernel using the offset along each
- dimension in turn. The product of the returned values is then
- used as the pixel weight.
- }
- \sstinvocation{
- CALL AST\_UKERN1( OFFSET, PARAMS, FLAGS, VALUE, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- OFFSET = DOUBLE PRECISION (Given)
- }{
- This will be the offset of the pixel from the interpolation
- point, measured in pixels. This value may be positive or
- negative, but for most practical interpolation schemes its
- sign should be ignored.
- }
- \sstsubsection{
- PARAMS( $*$ ) = DOUBLE PRECISION (Given)
- }{
- This will be the same array as was given via the
- PARAMS argument of AST\_RESAMPLE$<$X$>$. You may use this to
- pass any additional parameter values required by your kernel,
- but note that PARAMS(1) will already have been used to specify
- the number of neighbouring pixels which contribute to the
- interpolated value.
- }
- \sstsubsection{
- FLAGS = INTEGER (Given)
- }{
- This will be the same value as was given via the FLAGS
- argument of AST\_RESAMPLE$<$X$>$. You may test this value to
- provide additional control over the operation of your
- routine. Note that the special flag values AST\_\_URESAMP1, 2,
- 3 \& 4 are reserved for you to use for your own purposes and
- will not clash with other pre-defined flag
- values (see AST\_RESAMPLE$<$X$>$).
- }
- \sstsubsection{
- VALUE = DOUBLE PRECISION (Returned)
- }{
- The calculated kernel value,
- which may be positive or negative.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Not all functions make good interpolation kernels. In general,
- acceptable kernels tend to be symmetrical about zero, to have a
- positive peak (usually unity) at zero, and to evaluate to zero
- whenever the pixel offset has any other integral value (this
- ensures that the interpolated values pass through the original
- data). An interpolation kernel may or may not have regions with
- negative values. You should consult a good book on image
- processing for more details.
-
- \sstitem
- If an error occurs within this routine, it should set the
- STATUS argument to an error value before returning. This will
- cause an immediate return from AST\_RESAMPLE$<$X$>$. The error value
- AST\_\_UK1ER is available for this purpose, but other values may also
- be used (e.g. if you wish to distinguish different types of error).
- The AST\_\_UK1ER error value is defined in the AST\_ERR include file.
- }
- }
-}
-\sstroutine{
- AST\_UNFORMAT\sstlabel{AST_UNFORMAT}
-}{
- Read a formatted coordinate value for a Frame axis
-}{
- \sstdescription{
- This function reads a formatted coordinate value (given as a
- character string) for a \htmlref{Frame}{Frame} axis and returns the equivalent
- numerical (double precision) value. It also returns the number
- of characters read from the string.
-
- The principle use of this function is in decoding user-supplied
- input which contains formatted coordinate values. Free-format
- input is supported as far as possible. If input is ambiguous, it
- is interpreted with reference to the Frame's attributes (in
- particular, the Format string associated with the Frame's
- axis). This function is, in essence, the inverse of \htmlref{AST\_FORMAT}{AST_FORMAT}.
- }
- \sstinvocation{
- RESULT = AST\_UNFORMAT( THIS, AXIS, STRING, VALUE, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Frame.
- }
- \sstsubsection{
- AXIS = INTEGER (Given)
- }{
- The number of the Frame axis for which a coordinate value is to
- be read (axis numbering starts at 1 for the first axis).
- }
- \sstsubsection{
- STRING = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing the formatted coordinate value.
- This string may contain additional information following the
- value to be read, in which case reading stops at the first
- character which cannot be interpreted as part of the value.
- Any white space before or after the value is discarded.
- }
- \sstsubsection{
- VALUE = DOUBLE PRECISION (Returned)
- }{
- The coordinate value read.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- This function applies to all Frames. See the {\tt{"}}Frame Input
- Format{\tt{"}} section below for details of the input formats
- accepted by a basic Frame.
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- The SkyFrame class re-defines the input format to be suitable
- for representing angles and times, with the resulting
- coordinate value returned in radians. See the {\tt{"}}SkyFrame
- Input Format{\tt{"}} section below for details of the formats
- accepted.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The input formats accepted by a FrameSet are determined by
- its current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_UNFORMAT = INTEGER
- }{
- The number of characters read from the string in order to
- obtain the coordinate value. This will include any white
- space which occurs before or after the value.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A function value of zero (and no coordinate value) will be
- returned, without error, if the string supplied does not contain
- a suitably formatted value.
-
- \sstitem
- Beware that it is possible for a formatting error part-way
- through an input string to terminate input before it has been
- completely read, but to yield a coordinate value that appears
- valid. For example, if a user types {\tt{"}}1.5R6{\tt{"}} instead of {\tt{"}}1.5E6{\tt{"}},
- the {\tt{"}}R{\tt{"}} will terminate input, giving an incorrect coordinate
- value of 1.5. It is therefore most important to check the return
- value of this function to ensure that the correct number of
- characters have been read.
-
- \sstitem
- An error will result if a value is read which appears to have
- the correct format, but which cannot be converted into a valid
- coordinate value (for instance, because the value of one or more
- of its fields is invalid).
-
- \sstitem
- The string {\tt{"}}$<$bad$>${\tt{"}} is recognised as a special case and will
- yield the coordinate value AST\_\_BAD without error. The test for
- this string is case-insensitive and also permits embedded white
- space.
-
- \sstitem
- A function result of zero will be returned and no coordinate
- value will be returned via the VALUE argument if this function
- is invoked with the AST error status set, or if it should fail
- for any reason.
- }
- }
- \sstdiytopic{
- Frame Input Format
- }{
- The input format accepted for a basic Frame axis is as follows:
- \sstitemlist{
-
- \sstitem
- An optional sign, followed by:
-
- \sstitem
- A sequence of one or more digits possibly containing a decimal point,
- followed by:
-
- \sstitem
- An optional exponent field.
-
- \sstitem
- The exponent field, if present, consists of {\tt{"}}E{\tt{"}} or {\tt{"}}e{\tt{"}}
- followed by a possibly signed integer.
-
- }
- Examples of acceptable Frame input formats include:
- \sstitemlist{
-
- \sstitem
- 99
-
- \sstitem
- 1.25
-
- \sstitem
- -1.6
-
- \sstitem
- 1E8
-
- \sstitem
- -.99e-17
-
- \sstitem
- $<$bad$>$
- }
- }
- \sstdiytopic{
- SkyFrame Input Format
- }{
- The input format accepted for a SkyFrame axis is as follows:
- \sstitemlist{
-
- \sstitem
- An optional sign, followed by between one and three fields
- representing either degrees, arc-minutes, arc-seconds or hours,
- minutes, seconds (e.g. {\tt{"}}-12 42 03{\tt{"}}).
-
- \sstitem
- Each field should consist of a sequence of one or more digits,
- which may include leading zeros. At most one field may contain a
- decimal point, in which case it is taken to be the final field
- (e.g. decimal degrees might be given as {\tt{"}}124.707{\tt{"}}, while degrees
- and decimal arc-minutes might be given as {\tt{"}}-13 33.8{\tt{"}}).
-
- \sstitem
- The first field given may take any value, allowing angles and
- times outside the conventional ranges to be
- represented. However, subsequent fields must have values of less
- than 60 (e.g. {\tt{"}}720 45 31{\tt{"}} is valid, whereas {\tt{"}}11 45 61{\tt{"}} is not).
-
- \sstitem
- Fields may be separated by white space or by {\tt{"}}:{\tt{"}} (colon), but
- the choice of separator must be used consistently throughout the
- value. Additional white space may be present around fields and
- separators (e.g. {\tt{"}}- 2: 04 : 7.1{\tt{"}}).
-
- \sstitem
- The following field identification characters may be used as
- separators to replace either of those above (or may be appended
- to the final field), in order to identify the field to which
- they are appended: {\tt{"}}d{\tt{"}}---degrees; {\tt{"}}h{\tt{"}}---hours; {\tt{"}}m{\tt{"}}---minutes of
- arc or time; {\tt{"}}s{\tt{"}}---seconds of arc or time; {\tt{"}}'{\tt{"}} (single
- quote)---minutes of arc; {\tt{"}}{\tt{"}}{\tt{"}} (double quote)---seconds of arc.
- Either lower or upper case may be used. Fields must be given in
- order of decreasing significance (e.g. {\tt{"}}-11D 3' 14.4{\tt{"}}{\tt{"}} or
- {\tt{"}}22h14m11.2s{\tt{"}}).
-
- \sstitem
- The presence of any of the field identification characters
- {\tt{"}}d{\tt{"}}, {\tt{"}}'{\tt{"}} (single quote) or {\tt{"}}{\tt{"}}{\tt{"}} (double quote) indicates that the
- value is to be interpreted as an angle. Conversely, the presence
- of {\tt{"}}h{\tt{"}} indicates that it is to be interpreted as a time (with 24
- hours corresponding to 360 degrees). Incompatible angle/time
- identification characters may not be mixed (e.g. {\tt{"}}10h14'3{\tt{"}}{\tt{"}} is
- not valid). The remaining field identification characters and
- separators do not specify a preference for an angle or a time
- and may be used with either.
-
- \sstitem
- If no preference for an angle or a time is expressed anywhere
- within the value, it is interpreted as an angle if the Format
- attribute string associated with the SkyFrame axis generates an
- angle and as a time otherwise. This ensures that values produced
- by AST\_FORMAT are correctly interpreted by AST\_UNFORMAT.
-
- \sstitem
- Fields may be omitted, in which case they default to zero. The
- remaining fields may be identified by using appropriate field
- identification characters (see above) and/or by adding extra
- colon separators (e.g. {\tt{"}}-05m13s{\tt{"}} is equivalent to {\tt{"}}-:05:13{\tt{"}}). If
- a field is not identified explicitly, it is assumed that
- adjacent fields have been given, after taking account of any
- extra separator characters (e.g. {\tt{"}}14:25.4s{\tt{"}} specifies minutes
- and seconds, while {\tt{"}}14::25.4s{\tt{"}} specifies degrees and seconds).
-
- \sstitem
- If fields are omitted in such a way that the remaining ones
- cannot be identified uniquely (e.g. {\tt{"}}01:02{\tt{"}}), then the first
- field (either given explicitly or implied by an extra leading
- colon separator) is taken to be the most significant field that
- AST\_FORMAT would produce when formatting a value (using the
- Format attribute associated with the SkyFrame axis). By
- default, this means that the first field will normally be
- interpreted as degrees or hours. However, if this does not
- result in consistent field identification, then the last field
- (either given explicitly or implied by an extra trailing colon
- separator) is taken to to be the least significant field that
- AST\_FORMAT would produce.
-
- }
- This final convention is intended to ensure that values formatted
- by AST\_FORMAT which contain less than three fields will be
- correctly interpreted if read back using AST\_UNFORMAT, even if
- they do not contain field identification characters.
-
- Examples of acceptable SkyFrame input formats (with
- interpretation in parentheses) include:
- \sstitemlist{
-
- \sstitem
- -14d 13m 22.2s (-14d 13' 22.2{\tt{"}})
-
- \sstitem
- $+$ 12:34:56.7 (12d 34' 56.7{\tt{"}} or 12h 34m 56.7s)
-
- \sstitem
- 001 : 02 : 03.4 (1d 02' 03.4{\tt{"}} or 1h 02m 03.4s)
-
- \sstitem
- 22h 30 (22h 30m 00s)
-
- \sstitem
- 136::10{\tt{"}} (136d 00' 10{\tt{"}} or 136h 00m 10s)
-
- \sstitem
- -14M 27S (-0d 14' 27{\tt{"}} or -0h 14m 27s)
-
- \sstitem
- -:14: (-0d 14' 00{\tt{"}} or -0h 14m 00s)
-
- \sstitem
- -::4.1 (-0d 00' 04.1{\tt{"}} or -0h 00m 04.1s)
-
- \sstitem
- .9{\tt{"}} (0d 00' 00.9{\tt{"}})
-
- \sstitem
- d12m (0d 12' 00{\tt{"}})
-
- \sstitem
- H 12:22.3s (0h 12m 22.3s)
-
- \sstitem
- $<$bad$>$ (AST\_\_BAD)
-
- }
- Where alternative interpretations are shown, the choice of angle or
- time depends on the associated \htmlref{Format(axis)}{Formataxis} attribute.
- }
-}
-\sstroutine{
- AST\_UNITMAP\sstlabel{AST_UNITMAP}
-}{
- Create a UnitMap
-}{
- \sstdescription{
- This function creates a new \htmlref{UnitMap}{UnitMap} and optionally initialises
- its attributes.
-
- A UnitMap is a unit (null) \htmlref{Mapping}{Mapping} that has no effect on the
- coordinates supplied to it. They are simply copied. This can be
- useful if a Mapping is required (e.g. to pass to another
- routine) but you do not want it to have any effect.
- }
- \sstinvocation{
- RESULT = AST\_UNITMAP( NCOORD, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- NCOORD = INTEGER (Given)
- }{
- The number of input and output coordinates (these numbers are
- necessarily the same).
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new UnitMap. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_UNITMAP = INTEGER
- }{
- A pointer to the new UnitMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_VERSION\sstlabel{AST_VERSION}
-}{
- Return the version of the AST library being used
-}{
- \sstdescription{
- This function
- returns an integer representing the version of the AST library
- being used. The library version is formatted as a string such as
- {\tt{"}}2.0-7{\tt{"}} which contains integers representing the {\tt{"}}major version{\tt{"}} (2),
- the {\tt{"}}minor version{\tt{"}} (0) and the {\tt{"}}release{\tt{"}} (7). The integer returned
- by this function combines all three integers together into a single
- integer using the expresion:
-
- (major version)$*$1E6 $+$ (minor version)$*$1E3 $+$ (release)
- }
- \sstinvocation{
- RESULT = AST\_VERSION()
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{Object}{Object}
- }{
- This routine applies to all Objects.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_VERSION = INTEGER
- }{
- The major version, minor version and release numbers for the AST
- library, encoded as a single integer.
- }
- }
-}
-\sstroutine{
- AST\_WARNINGS\sstlabel{AST_WARNINGS}
-}{
- Returns any warnings issued by the previous read or write operation
-}{
- \sstdescription{
- This function returns an AST \htmlref{KeyMap}{KeyMap} object holding the text of any
- warnings issued as a result of the previous invocation of the
- \htmlref{AST\_READ}{AST_READ} or \htmlref{AST\_WRITE}{AST_WRITE}
- function on the \htmlref{Channel}{Channel}. If no warnings were issued, a
- AST\_\_NULL
- will be returned.
-
- Such warnings are non-fatal and will not prevent the
- read or write operation succeeding. However, the converted object
- may not be identical to the original object in all respects.
- Differences which would usually be deemed as insignificant in most
- usual cases will generate a warning, whereas more significant
- differences will generate an error.
-
- The {\tt{"}}\htmlref{Strict}{Strict}{\tt{"}} attribute allows this warning facility to be switched
- off, so that a fatal error is always reported for any conversion
- error.
- }
- \sstinvocation{
- RESULT = AST\_WARNINGS( THIS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Channel.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Channel
- }{
- The basic Channel class generates a warning when ever an
- un-recognised item is encountered whilst reading an \htmlref{Object}{Object} from
- an external data source. If Strict is zero (the default), then
- unexpected items in the Object description are simply ignored,
- and any remaining items are used to construct the returned
- Object. If Strict is non-zero, an error will be reported and a
- NULL Object pointer returned if any unexpected items are
- encountered.
-
- As AST continues to be developed, new attributes are added
- occasionally to selected classes. If an older version of AST is
- used to read external Object descriptions created by a more
- recent version of AST, then the Channel class will, by default,
- ignore the new attributes, using the remaining attributes to
- construct the Object. This is usually a good thing. However,
- since external Object descriptions are often stored in plain
- text, it is possible to edit them using a text editor. This
- gives rise to the possibility of genuine errors in the
- description due to finger-slips, typos, or simple
- mis-understanding. Such inappropriate attributes will be ignored
- if Strict is left at its default zero value. This will cause the
- mis-spelled attribute to revert to its default value,
- potentially causing subtle changes in the behaviour of
- application software. If such an effect is suspected, the Strict
- attribute can be set non-zero, resulting in the erroneous
- attribute being identified in an error message.
- }
- \sstsubsection{
- \htmlref{FitsChan}{FitsChan}
- }{
- The returned KeyMap will contain warnings for all conditions
- listed in the \htmlref{Warnings}{Warnings} attribute.
- }
- \sstsubsection{
- \htmlref{XmlChan}{XmlChan}
- }{
- Reports conversion errors that result in what are usally
- insignificant changes.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_WARNINGS = INTEGER
- }{
- A pointer to the KeyMap holding the warning messages, or
- AST\_\_NULL
- if no warnings were issued during the previous read operation.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The returned KeyMap uses keys of the form {\tt{"}}Warning\_1{\tt{"}},
- {\tt{"}}Warning\_2{\tt{"}}, etc.
-
- \sstitem
- A value of
- AST\_\_NULL will be returned if this function is invoked with STATUS
- set to an error value,
- or if it should fail for any reason.
- }
- }
-}
-\sstroutine{
- AST\_WCSMAP\sstlabel{AST_WCSMAP}
-}{
- Create a WcsMap
-}{
- \sstdescription{
- This function creates a new \htmlref{WcsMap}{WcsMap} and optionally initialises its
- attributes.
-
- A WcsMap is used to represent sky coordinate projections as
- described in the (draft) FITS world coordinate system (FITS-WCS)
- paper by E.W. Griesen and M. Calabretta (A \& A, in preparation).
- This paper defines a set of functions, or sky projections, which
- transform longitude-latitude pairs representing spherical
- celestial coordinates into corresponding pairs of Cartesian
- coordinates (and vice versa).
-
- A WcsMap is a specialised form of \htmlref{Mapping}{Mapping} which implements these
- sky projections and applies them to a specified pair of coordinates.
- All the projections in the FITS-WCS paper are supported, plus the now
- deprecated {\tt{"}}TAN with polynomial correction terms{\tt{"}} projection which
- is refered to here by the code {\tt{"}}TPN{\tt{"}}. Using the FITS-WCS terminology,
- the transformation is between {\tt{"}}native spherical{\tt{"}} and {\tt{"}}projection
- plane{\tt{"}} coordinates. These coordinates may, optionally, be embedded in
- a space with more than two dimensions, the remaining coordinates being
- copied unchanged. Note, however, that for consistency with other AST
- facilities, a WcsMap handles coordinates that represent angles
- in radians (rather than the degrees used by FITS-WCS).
-
- The type of FITS-WCS projection to be used and the coordinates
- (axes) to which it applies are specified when a WcsMap is first
- created. The projection type may subsequently be determined
- using the \htmlref{WcsType}{WcsType} attribute and the coordinates on which it acts
- may be determined using the \htmlref{WcsAxis(lonlat)}{WcsAxislonlat} attribute.
-
- Each WcsMap also allows up to 100 {\tt{"}}projection parameters{\tt{"}} to be
- associated with each axis. These specify the precise form of the
- projection, and are accessed using \htmlref{PVi\_m}{PVi_m} attribute, where {\tt{"}}i{\tt{"}} is
- the integer axis index (starting at 1), and m is an integer
- {\tt{"}}parameter index{\tt{"}} in the range 0 to 99. The number of projection
- parameters required by each projection, and their meanings, are
- dependent upon the projection type (most projections either do not
- use any projection parameters, or use parameters 1 and 2 associated
- with the latitude axis). Before creating a WcsMap you should consult
- the FITS-WCS paper for details of which projection parameters are
- required, and which have defaults. When creating the WcsMap, you must
- explicitly set values for all those required projection parameters
- which do not have defaults defined in this paper.
- }
- \sstinvocation{
- RESULT = AST\_WCSMAP( NCOORD, TYPE, LONAX, LATAX, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- NCOORD = INTEGER (Given)
- }{
- The number of coordinate values for each point to be
- transformed (i.e. the number of dimensions of the space in
- which the points will reside). This must be at least 2. The
- same number is applicable to both input and output points.
- }
- \sstsubsection{
- TYPE = INTEGER (Given)
- }{
- The type of FITS-WCS projection to apply. This should be
- given as a symbolic value such as AST\_\_TAN (for a tangent
- plane projection), where the characters following the double
- underscore give the projection type code (in upper case) as
- used in the FITS-WCS {\tt{"}}CTYPEi{\tt{"}} keyword. You should consult the
- FITS-WCS paper for a list of the available projections. The
- additional code of AST\_\_TPN can be supplied which represents a
- TAN projection with polynomial correction terms as defined in an
- early draft of the FITS-WCS paper.
- }
- \sstsubsection{
- LONAX = INTEGER (Given)
- }{
- The index of the longitude axis. This should lie in the range
- 1 to NCOORD.
- }
- \sstsubsection{
- LATAX = INTEGER (Given)
- }{
- The index of the latitude axis. This should lie in the range
- 1 to NCOORD and be distinct from LONAX.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new WcsMap. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
-
- If the sky projection to be implemented requires projection
- parameter values to be set, then this should normally be done
- here via the PVi\_m attribute (see the {\tt{"}}Examples{\tt{"}}
- section). Setting values for these parameters is mandatory if
- they do not have default values (as defined in the FITS-WCS
- paper).
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_WCSMAP = INTEGER
- }{
- A pointer to the new WcsMap.
- }
- }
- \sstexamples{
- \sstexamplesubsection{
- WCSMAP = AST\_WCSMAP( 2, AST\_\_MER, 1, 2, ' ', STATUS )
- }{
- Creates a WcsMap that implements a FITS-WCS Mercator
- projection on pairs of coordinates, with coordinates 1 and 2
- representing the longitude and latitude respectively. Note
- that the FITS-WCS Mercator projection does not require any
- projection parameters.
- }
- \sstexamplesubsection{
- WCSMAP = AST\_WCSMAP( 3, AST\_\_COE, 2, 3, 'PV3\_1=40.0', STATUS )
- }{
- Creates a WcsMap that implements a FITS-WCS conical equal
- area projection. The WcsMap acts on points in a 3-dimensional
- space; coordinates 2 and 3 represent longitude and latitude
- respectively, while the values of coordinate 1 are copied
- unchanged. \htmlref{Projection}{Projection} parameter 1 associatyed with the latitude
- axis (corresponding to FITS keyword {\tt{"}}PV3\_1{\tt{"}}) is required and has
- no default, so is set explicitly to 40.0 degrees. Projection
- parameter 2 (corresponding to FITS keyword {\tt{"}}PV3\_2{\tt{"}}) is required
- but has a default of zero, so need not be specified.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The forward transformation of a WcsMap converts between
- FITS-WCS {\tt{"}}native spherical{\tt{"}} and {\tt{"}}relative physical{\tt{"}} coordinates,
- while the inverse transformation converts in the opposite
- direction. This arrangement may be reversed, if required, by
- using \htmlref{AST\_INVERT}{AST_INVERT} or by setting the \htmlref{Invert}{Invert} attribute to a non-zero
- value.
-
- \sstitem
- If any set of coordinates cannot be transformed (for example,
- many projections do not cover the entire celestial sphere), then
- a WcsMap will yield coordinate values of AST\_\_BAD.
-
- \sstitem
- The validity of any projection parameters given via the PVi\_m
- parameter in the OPTIONS string is not checked by this
- function. However, their validity is checked when the resulting
- WcsMap is used to transform coordinates, and an error will
- result if the projection parameters do not satisfy all the
- required constraints (as defined in the FITS-WCS paper).
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- AST\_WINMAP\sstlabel{AST_WINMAP}
-}{
- Create a WinMap
-}{
- \sstdescription{
- This function creates a new \htmlref{WinMap}{WinMap} and optionally initialises its
- attributes.
-
- A Winmap is a linear \htmlref{Mapping}{Mapping} which transforms a rectangular
- window in one coordinate system into a similar window in another
- coordinate system by scaling and shifting each axis (the window
- edges being parallel to the coordinate axes).
-
- A WinMap is specified by giving the coordinates of two opposite
- corners (A and B) of the window in both the input and output
- coordinate systems.
- }
- \sstinvocation{
- RESULT = AST\_WINMAP( NCOORD, INA, INB, OUTA, OUTB, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- NCOORD = INTEGER (Given)
- }{
- The number of coordinate values for each point to be
- transformed (i.e. the number of dimensions of the space in
- which the points will reside). The same number is applicable
- to both input and output points.
- }
- \sstsubsection{
- INA( NCOORD ) = DOUBLE PRECISION (Given)
- }{
- An array containing the
- coordinates of corner A of the window in the input coordinate
- system.
- }
- \sstsubsection{
- INB( NCOORD ) = DOUBLE PRECISION (Given)
- }{
- An array containing the
- coordinates of corner B of the window in the input coordinate
- system.
- }
- \sstsubsection{
- OUTA( NCOORD ) = DOUBLE PRECISION (Given)
- }{
- An array containing the
- coordinates of corner A of the window in the output coordinate
- system.
- }
- \sstsubsection{
- OUTB( NCOORD ) = DOUBLE PRECISION (Given)
- }{
- An array containing the
- coordinates of corner B of the window in the output coordinate
- system.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new WinMap. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_WINMAP = INTEGER
- }{
- A pointer to the new WinMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- AST\_WRITE\sstlabel{AST_WRITE}
-}{
- Write an Object to a Channel
-}{
- \sstdescription{
- This function writes an \htmlref{Object}{Object} to a \htmlref{Channel}{Channel}, appending it to any
- previous Objects written to that Channel.
- }
- \sstinvocation{
- RESULT = AST\_WRITE( THIS, OBJECT, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- THIS = INTEGER (Given)
- }{
- Pointer to the Channel.
- }
- \sstsubsection{
- OBJECT = INTEGER (Given)
- }{
- Pointer to the Object which is to be written.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_WRITE = INTEGER
- }{
- The number of Objects written to the Channel by this
- invocation of AST\_WRITE (normally, this will be one).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A value of zero will be returned if this function is invoked
- with STATUS set to an error value, or if it should fail for any
- reason.
-
- \sstitem
- Invoking this function will usually cause the sink function
- associated with the channel to be called in order to transfer a
- textual description of the supplied object to some external data
- store. However, the \htmlref{FitsChan}{FitsChan} class behaves differently. Invoking
- this function on a FitsChan causes new FITS header cards to be
- added to an internal buffer (the sink function is not invoked).
- This buffer is written out through the sink function only when the
- FitsChan is deleted.
- }
- }
-}
-\sstroutine{
- AST\_XMLCHAN\sstlabel{AST_XMLCHAN}
-}{
- Create an XmlChan
-}{
- \sstdescription{
- This function creates a new \htmlref{XmlChan}{XmlChan} and optionally initialises
- its attributes.
-
- A XmlChan is a specialised form of \htmlref{Channel}{Channel} which supports XML I/O
- operations. Writing an \htmlref{Object}{Object} to an XmlChan (using
- \htmlref{AST\_WRITE}{AST_WRITE}) will, if the Object is suitable, generate an
- XML description of that Object, and reading from an XmlChan will
- create a new Object from its XML description.
-
- Normally, when you use an XmlChan, you should provide {\tt{"}}source{\tt{"}}
- and {\tt{"}}sink{\tt{"}} routines which connect it to an external data store
- by reading and writing the resulting XML text. By default, however,
- a Channel will read from standard input and write to standard
- output.
- }
- \sstinvocation{
- RESULT = AST\_XMLCHAN( SOURCE, SINK, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- SOURCE = SUBROUTINE (Given)
- }{
- A source routine, which is a subroutine which takes a single
- integer error status argument. This routine will be used by
- the XmlChan to obtain lines of input text. On each
- invocation, it should read the next input line from some
- external XML data store, and then return the resulting text to
- the AST library by calling \htmlref{AST\_PUTLINE}{AST_PUTLINE}. It should supply a
- negative line length when there are no more lines to read.
- If an error occurs, it should set its own error status
- argument to an error value before returning.
-
- If the null routine AST\_NULL is suppied as the SOURCE value,
- the Channel will read from standard input instead.
- }
- \sstsubsection{
- SINK = SUBROUTINE (Given)
- }{
- A sink routine, which is a subroutine which takes a single
- integer error status argument. This routine will be used by
- the XmlChan to deliver lines of output text. On each
- invocation, it should obtain the next output line from the
- AST library by calling \htmlref{AST\_GETLINE}{AST_GETLINE}, and then deliver the
- resulting text to some external XML data store. If an error
- occurs, it should set its own error status argument to an
- error value before returning.
-
- If the null routine AST\_NULL is suppied as the SINK value,
- the Channel will write to standard output instead.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new XmlChan. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_XMLCHAN = INTEGER
- }{
- A pointer to the new XmlChan.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The names of the routines supplied for the SOURCE and SINK
- arguments should appear in EXTERNAL statements in the Fortran
- routine which invokes AST\_XMLCHAN. However, this is not generally
- necessary for the null routine AST\_NULL (so long as the AST\_PAR
- include file has been used).
-
- \sstitem
- If the external data source or sink uses a character encoding
- other than ASCII, the supplied source and sink functions should
- translate between the external character encoding and the internal
- ASCII encoding used by AST.
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
-
- \sstitem
- Note that the null routine AST\_NULL (one underscore) is
- different to AST\_\_NULL (two underscores), which is the null Object
- pointer.
- }
- }
-}
-\sstroutine{
- AST\_ZOOMMAP\sstlabel{AST_ZOOMMAP}
-}{
- Create a ZoomMap
-}{
- \sstdescription{
- This function creates a new \htmlref{ZoomMap}{ZoomMap} and optionally initialises its
- attributes.
-
- A ZoomMap is a \htmlref{Mapping}{Mapping} which {\tt{"}}zooms{\tt{"}} a set of points about the
- origin by multiplying all coordinate values by the same scale
- factor (the inverse transformation is performed by dividing by
- this scale factor).
- }
- \sstinvocation{
- RESULT = AST\_ZOOMMAP( NCOORD, ZOOM, OPTIONS, STATUS )
- }
- \sstarguments{
- \sstsubsection{
- NCOORD = INTEGER (Given)
- }{
- The number of coordinate values for each point to be
- transformed (i.e. the number of dimensions of the space in
- which the points will reside). The same number is applicable
- to both input and output points.
- }
- \sstsubsection{
- ZOOM = DOUBLE PRECISION (Given)
- }{
- Initial scale factor by which coordinate values should be
- multiplied (by the forward transformation) or divided (by the
- inverse transformation). This factor may subsequently be
- changed via the ZoomMap's \htmlref{Zoom}{Zoom} attribute. It may be positive
- or negative, but should not be zero.
- }
- \sstsubsection{
- OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
- }{
- A character string containing an optional comma-separated
- list of attribute assignments to be used for initialising the
- new ZoomMap. The syntax used is identical to that for the
- \htmlref{AST\_SET}{AST_SET} routine.
- }
- \sstsubsection{
- STATUS = INTEGER (Given and Returned)
- }{
- The global status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- AST\_ZOOMMAP = INTEGER
- }{
- A pointer to the new ZoomMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with STATUS set to an error value, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\normalsize
-
-\cleardoublepage
-\section{\label{ss:attributedescriptions}AST Attribute Descriptions}
-\small
-\sstroutine{
- Abbrev(axis)\sstlabel{Abbrevaxis}
-}{
- Abbreviate leading fields within numerical axis labels?
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
- whether matching leading fields should be removed from adjacent
- numerical axis labels. It takes a separate value for each physical
- axis of a \htmlref{Plot}{Plot} so that, for instance, the setting {\tt{"}}Abbrev(2)=0{\tt{"}}
- specifies that matching leading fields should not be removed on
- the second axis.
-
- If the Abbrev value of a Plot is non-zero (the default), then
- leading fields will be removed from adjacent axis labels if they
- are equal.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}Abbrev{\tt{"}} instead of
- {\tt{"}}Abbrev(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
- the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
- {\tt{"}}test{\tt{"}} operation will use just the Abbrev(1) value.
- }
- }
-}
-\sstroutine{
- Adaptive\sstlabel{Adaptive}
-}{
- Should the area adapt to changes in the coordinate system?
-}{
- \sstdescription{
- The coordinate system represented by a \htmlref{Region}{Region} may be changed by
- assigning new values to attributes such as \htmlref{System}{System}, Unit, etc.
- For instance, a Region representing an area on the sky in ICRS
- coordinates may have its System attribute changed so that it
- represents (say) Galactic coordinates instead of ICRS. This
- attribute controls what happens when the coordinate system
- represented by a Region is changed in this way.
-
- If Adaptive is non-zero (the default), then area represented by the
- Region adapts to the new coordinate system. That is, the numerical
- values which define the area represented by the Region are changed
- by mapping them from the old coordinate system into the new coordinate
- system. Thus the Region continues to represent the same physical
- area.
-
- If Adaptive is zero, then area represented by the Region does not adapt
- to the new coordinate system. That is, the numerical values which
- define the area represented by the Region are left unchanged. Thus
- the physical area represented by the Region will usually change.
-
- As an example, consider a Region describe a range of wavelength from
- 2000 Angstrom to 4000 Angstrom. If the Unit attribute for the Region
- is changed from Angstrom to {\tt{"}}nm{\tt{"}} (nanometre), what happens depends
- on the setting of Adaptive. If Adaptive is non-zero, the \htmlref{Mapping}{Mapping}
- from the old to the new coordinate system is found. In this case it
- is a simple scaling by a factor of 0.1 (since 1 Angstrom is 0.1 nm).
- This Mapping is then used to modify the numerical values within the
- Region, changing 2000 to 200 and 4000 to 400. Thus the modified
- region represents 200 nm to 400 nm, the same physical space as
- the original 2000 Angstrom to 4000 Angstrom. However, if Adaptive
- had been zero, then the numerical values would not have been changed,
- resulting in the final Region representing 2000 nm to 4000 nm.
-
- Setting Adaptive to zero can be necessary if you want correct
- inaccurate attribute settings in an existing Region. For instance,
- when creating a Region you may not know what \htmlref{Epoch}{Epoch} value to use, so
- you would leave Epoch unset resulting in some default value being used.
- If at some later point in the application, the correct Epoch value
- is determined, you could assign the correct value to the Epoch
- attribute. However, you would first need to set Adaptive temporarily
- to zero, because otherwise the area represented by the Region would
- be Mapped from the spurious default Epoch to the new correct Epoch,
- which is not what is required.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Region
- }{
- All Regions have this attribute.
- }
- }
-}
-\sstroutine{
- AlignOffset\sstlabel{AlignOffset}
-}{
- Align SkyFrames using the offset coordinate system?
-}{
- \sstdescription{
- This attribute is a boolean value which controls how a \htmlref{SkyFrame}{SkyFrame}
- behaves when it is used (by
- \htmlref{AST\_FINDFRAME}{AST_FINDFRAME} or \htmlref{AST\_CONVERT}{AST_CONVERT}) as a template to match another (target)
- SkyFrame. It determines the coordinate system in which the two
- SkyFrames are aligned if a match occurs.
-
- If the template and target SkyFrames both have defined offset coordinate
- systems (i.e. the \htmlref{SkyRefIs}{SkyRefIs} attribute is set to either {\tt{"}}Origin{\tt{"}} or {\tt{"}}
- Pole{\tt{"}}), and they both have a non-zero value for AlignOffset, then
- alignment occurs within the offset coordinate systems (that is, a
- \htmlref{UnitMap}{UnitMap} will always be used to align the two SkyFrames). If either
- the template or target SkyFrame has zero (the default value) for
- AlignOffset, or if either SkyFrame has SkyRefIs set to {\tt{"}}Ignored{\tt{"}}, then
- alignment occurring within the coordinate system specified by the
- \htmlref{AlignSystem}{AlignSystem} attribute.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- SkyFrame
- }{
- All SkyFrames have this attribute.
- }
- }
-}
-\sstroutine{
- AlignSideBand\sstlabel{AlignSideBand}
-}{
- Should the SideBand attribute be taken into account when aligning
- this \htmlref{DSBSpecFrame}{DSBSpecFrame} with another DSBSpecFrame?
-}{
- \sstdescription{
- This attribute controls how a DSBSpecFrame behaves when an attempt
- is made to align it with another DSBSpecFrame using
- \htmlref{AST\_FINDFRAME}{AST_FINDFRAME} or \htmlref{AST\_CONVERT}{AST_CONVERT}.
- If both DSBSpecFrames have a non-zero value for AlignSideBand, the
- value of the \htmlref{SideBand}{SideBand} attribute in each DSBSpecFrame is used so that
- alignment occurs between sidebands. That is, if one DSBSpecFrame
- represents USB and the other represents LSB then
- AST\_FINDFRAME and AST\_CONVERT
- will recognise that the DSBSpecFrames represent different sidebands
- and will take this into account when constructing the \htmlref{Mapping}{Mapping} that
- maps positions in one DSBSpecFrame into the other. If AlignSideBand
- in either DSBSpecFrame is set to zero, then the values of the SideBand
- attributes are ignored. In the above example, this would result in a
- frequency in the first DSBSpecFrame being mapped onto the same
- frequency in the second DSBSpecFrame, even though those frequencies
- refer to different sidebands. In other words, if either AlignSideBand
- attribute is zero, then the two DSBSpecFrames aligns like basic
- SpecFrames. The default value for AlignSideBand is zero.
-
- When AST\_FINDFRAME or AST\_CONVERT
- is used on two DSBSpecFrames (potentially describing different spectral
- coordinate systems and/or sidebands), it returns a Mapping which can be
- used to transform a position in one DSBSpecFrame into the corresponding
- position in the other. The Mapping is made up of the following steps in
- the indicated order:
-
- \sstitemlist{
-
- \sstitem
- If both DSBSpecFrames have a value of 1 for the AlignSideBand
- attribute, map values from the target's current sideband (given by its
- SideBand attribute) to the observed sideband (whether USB or LSB). If
- the target already represents the observed sideband, this step will
- leave the values unchanged. If either of the two DSBSpecFrames have a
- value of zero for its AlignSideBand attribute, then this step is omitted.
-
- \sstitem
- Map the values from the spectral system of the target to the spectral
- system of the template. This Mapping takes into account all the
- inherited \htmlref{SpecFrame}{SpecFrame} attributes such as \htmlref{System}{System}, \htmlref{StdOfRest}{StdOfRest}, Unit, etc.
-
- \sstitem
- If both DSBSpecFrames have a value of 1 for the AlignSideBand
- attribute, map values from the result's observed sideband to the
- result's current sideband (given by its SideBand attribute). If the
- result already represents the observed sideband, this step will leave
- the values unchanged. If either of the two DSBSpecFrames have a value
- of zero for its AlignSideBand attribute, then this step is omitted.
- }
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- DSBSpecFrame
- }{
- All DSBSpecFrames have this attribute.
- }
- }
-}
-\sstroutine{
- AlignSpecOffset\sstlabel{AlignSpecOffset}
-}{
- Align SpecFrames using the offset coordinate system?
-}{
- \sstdescription{
- This attribute is a boolean value which controls how a \htmlref{SpecFrame}{SpecFrame}
- behaves when it is used (by
- \htmlref{AST\_FINDFRAME}{AST_FINDFRAME} or \htmlref{AST\_CONVERT}{AST_CONVERT}) as a template to match another (target)
- SpecFrame. It determines whether alignment occurs between the offset
- values defined by the current value of the SpecOffset attribute, or
- between the corresponding absolute spectral values.
-
- The default value of zero results in the two SpecFrames being aligned
- so that a given absolute spectral value in one is mapped to the same
- absolute value in the other. A non-zero value results in the SpecFrames
- being aligned so that a given offset value in one is mapped to the same
- offset value in the other.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- SpecFrame
- }{
- All SpecFrames have this attribute.
- }
- }
-}
-\sstroutine{
- AlignStdOfRest\sstlabel{AlignStdOfRest}
-}{
- Standard of rest to use when aligning SpecFrames
-}{
- \sstdescription{
- This attribute controls how a \htmlref{SpecFrame}{SpecFrame} behaves when it is used (by
- \htmlref{AST\_FINDFRAME}{AST_FINDFRAME} or \htmlref{AST\_CONVERT}{AST_CONVERT}) as a template to match another (target)
- SpecFrame. It identifies the standard of rest in which alignment is
- to occur. See the \htmlref{StdOfRest}{StdOfRest} attribute for a desription of the values
- which may be assigned to this attribute. The default AlignStdOfRest
- value is {\tt{"}}Helio{\tt{"}} (heliographic).
-
- When AST\_FindFrame or AST\_CONVERT is used on two SpecFrames (potentially
- describing different spectral coordinate systems), it returns a \htmlref{Mapping}{Mapping}
- which can be used to transform a position in one SpecFrame into the
- corresponding position in the other. The Mapping is made up of the
- following steps in the indicated order:
-
- \sstitemlist{
-
- \sstitem
- Map values from the system used by the target (wavelength,
- apparent radial velocity, etc) to the system specified by the
- \htmlref{AlignSystem}{AlignSystem} attribute, using the target's rest frequency if necessary.
-
- \sstitem
- Map these values from the target's standard of rest to the standard of
- rest specified by the AlignStdOfRest attribute, using the \htmlref{Epoch}{Epoch}, \htmlref{ObsLat}{ObsLat},
- \htmlref{ObsLon}{ObsLon}, \htmlref{ObsAlt}{ObsAlt}, \htmlref{RefDec}{RefDec} and \htmlref{RefRA}{RefRA} attributes of the target to define the
- two standards of rest.
-
- \sstitem
- Map these values from the standard of rest specified by the
- AlignStdOfRest attribute, to the template's standard of rest, using the
- Epoch, ObsLat, ObsLon, ObsAlt, RefDec and RefRA attributes of the
- template to define the two standards of rest.
-
- \sstitem
- Map these values from the system specified by the AlignSystem
- attribute, to the system used by the template, using the template's
- rest frequency if necessary.
- }
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- SpecFrame
- }{
- All SpecFrames have this attribute.
- }
- }
-}
-\sstroutine{
- AlignSystem\sstlabel{AlignSystem}
-}{
- Coordinate system in which to align the Frame
-}{
- \sstdescription{
- This attribute controls how a \htmlref{Frame}{Frame} behaves when it is used (by
- \htmlref{AST\_FINDFRAME}{AST_FINDFRAME} or \htmlref{AST\_CONVERT}{AST_CONVERT}) as a template to match another (target)
- Frame. It identifies the coordinate system in which the two Frames
- will be aligned by the match.
-
- The values which may be assigned to this attribute, and its default
- value, depend on the class of Frame and are described in the
- {\tt{"}}Applicability{\tt{"}} section below. In general, the AlignSystem attribute
- will accept any of the values which may be assigned to the \htmlref{System}{System}
- attribute.
-
- The \htmlref{Mapping}{Mapping} returned by astFindFrame or astConvert will use the
- coordinate system specified by the AlignSystem attribute as an
- intermediate coordinate system. The total returned Mapping will first
- map positions from the first Frame into this intermediate coordinate
- system, using the attributes of the first Frame. It will then map
- these positions from the intermediate coordinate system into the
- second Frame, using the attributes of the second Frame.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The AlignSystem attribute for a basic Frame always equals {\tt{"}}Cartesian{\tt{"}},
- and may not be altered.
- }
- \sstsubsection{
- \htmlref{CmpFrame}{CmpFrame}
- }{
- The AlignSystem attribute for a CmpFrame always equals {\tt{"}}Compound{\tt{"}},
- and may not be altered.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The AlignSystem attribute of a FrameSet is the same as that of its
- current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- The default AlignSystem attribute for a SkyFrame is {\tt{"}}ICRS{\tt{"}}.
- }
- \sstsubsection{
- \htmlref{SpecFrame}{SpecFrame}
- }{
- The default AlignSystem attribute for a SpecFrame is {\tt{"}}Wave{\tt{"}}
- (wavelength).
- }
- \sstsubsection{
- \htmlref{TimeFrame}{TimeFrame}
- }{
- The default AlignSystem attribute for a TimeFrame is {\tt{"}}MJD{\tt{"}}.
- }
- }
-}
-\sstroutine{
- AlignTimeScale\sstlabel{AlignTimeScale}
-}{
- Time scale to use when aligning TimeFrames
-}{
- \sstdescription{
- This attribute controls how a \htmlref{TimeFrame}{TimeFrame} behaves when it is used (by
- \htmlref{AST\_FINDFRAME}{AST_FINDFRAME} or \htmlref{AST\_CONVERT}{AST_CONVERT}) as a template to match another (target)
- TimeFrame. It identifies the time scale in which alignment is
- to occur. See the \htmlref{TimeScale}{TimeScale} attribute for a desription of the values
- which may be assigned to this attribute. The default AlignTimeScale
- value depends on the current value of TimeScale: if TimeScale is
- UT1, GMST, LMST or LAST, the default for AlignTimeScale is UT1, for all
- other TimeScales the default is TAI.
-
- When AST\_FindFrame or AST\_CONVERT is used on two TimeFrames (potentially
- describing different time coordinate systems), it returns a \htmlref{Mapping}{Mapping}
- which can be used to transform a position in one TimeFrame into the
- corresponding position in the other. The Mapping is made up of the
- following steps in the indicated order:
-
- \sstitemlist{
-
- \sstitem
- Map values from the system used by the target (MJD, JD, etc) to the
- system specified by the \htmlref{AlignSystem}{AlignSystem} attribute.
-
- \sstitem
- Map these values from the target's time scale to the time scale
- specified by the AlignTimeScale attribute.
-
- \sstitem
- Map these values from the time scale specified by the AlignTimeScale
- attribute, to the template's time scale.
-
- \sstitem
- Map these values from the system specified by the AlignSystem
- attribute, to the system used by the template.
- }
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- TimeFrame
- }{
- All TimeFrames have this attribute.
- }
- }
-}
-\sstroutine{
- AllWarnings\sstlabel{AllWarnings}
-}{
- A list of all currently available condition names
-}{
- \sstdescription{
- This read-only attribute is a space separated list of all the conditions
- names recognized by the \htmlref{Warnings}{Warnings} attribute. The names are listed
- below.
- }
- \sstattributetype{
- String, read-only
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{FitsChan}{FitsChan}
- }{
- All FitsChans have this attribute.
- }
- }
- \sstdiytopic{
- Conditions
- }{
- The following conditions are currently recognised (all are
- case-insensitive):
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}BadCel{\tt{"}}: This condition arises when reading a \htmlref{FrameSet}{FrameSet} from a
- non-Native encoded FitsChan if an unknown celestial co-ordinate
- system is specified by the CTYPE keywords.
-
- \sstitem
- {\tt{"}}BadCTYPE{\tt{"}}: This condition arises when reading a FrameSet from a
- non-Native encoded FitsChan if an illegal algorithm code is specified
- by a CTYPE keyword, and the illegal code can be converted to an
- equivalent legal code.
-
- \sstitem
- {\tt{"}}BadLat{\tt{"}}: This condition arises when reading a FrameSet from a
- non-Native encoded FitsChan if the latitude of the reference point
- has an absolute value greater than 90 degrees. The actual absolute
- value used is set to exactly 90 degrees in these cases.
-
- \sstitem
- {\tt{"}}BadMat{\tt{"}}: This condition arises if the matrix describing the
- transformation from pixel offsets to intermediate world coordinates
- cannot be inverted. This matrix describes the scaling, rotation, shear,
- etc., applied to the pixel axes, and is specified by keywords such as
- PCi\_j, CDi\_j, CROTA, etc. For example, the matrix will not be invertable
- if any rows or columns consist entirely of zeros. The FITS-WCS Paper I
- {\tt{"}}Representation of World Coordinates in FITS{\tt{"}} by Greisen \& Calabretta
- requires that this matrix be invertable. Many operations (such as
- grid plotting) will not be possible if the matrix cannot be inverted.
-
- \sstitem
- {\tt{"}}BadPV{\tt{"}}: This condition arises when reading a FrameSet from a
- non-Native encoded FitsChan. It is issued if a \htmlref{PVi\_m}{PVi_m} header is found
- that refers to a projection parameter that is not used by the
- projection type specified by CTYPE.
-
- \sstitem
- {\tt{"}}BadVal{\tt{"}}: This condition arises when reading a FrameSet from a
- non-Native encoded FitsChan if it is not possible to convert the
- value of a FITS keywords to the expected type. For instance, this
- can occur if the FITS header contains a string value for a keyword
- which should have a floating point value, or if the keyword has no
- value at all (i.e. is a comment card).
-
- \sstitem
- {\tt{"}}Distortion{\tt{"}}: This condition arises when reading a FrameSet from a
- non-Native encoded FitsChan if any of the CTYPE keywords specify an
- unsupported distortion code using the {\tt{"}}4-3-3{\tt{"}} format specified in
- FITS-WCS paper IV. Such distortion codes are ignored.
-
- \sstitem
- {\tt{"}}NoCTYPE{\tt{"}}: This condition arises if a default CTYPE value is used
- within \htmlref{AST\_READ}{AST_READ}, due to no value being present in the supplied FitsChan.
- This condition is only tested for when using non-Native encodings.
-
- \sstitem
- {\tt{"}}NoEquinox{\tt{"}}: This condition arises if a default equinox value is used
- within AST\_READ, due to no value being present in the supplied FitsChan.
- This condition is only tested for when using non-Native encodings.
-
- \sstitem
- {\tt{"}}NoRadesys{\tt{"}}: This condition arises if a default reference frame is
- used for an equatorial co-ordinate system within AST\_READ, due to no
- value being present in the supplied FitsChan. This condition is only
- tested for when using non-Native encodings.
-
- \sstitem
- {\tt{"}}NoLonpole{\tt{"}}: This condition arises if a default value is used for
- the LONPOLE keyword within AST\_READ, due to no value being present
- in the supplied FitsChan. This condition is only tested for when
- using non-Native encodings.
-
- \sstitem
- {\tt{"}}NoLatpole{\tt{"}}: This condition arises if a default value is used for
- the LATPOLE keyword within AST\_READ, due to no value being present
- in the supplied FitsChan. This condition is only tested for when
- using non-Native encodings.
-
- \sstitem
- {\tt{"}}NoMjd-obs{\tt{"}}: This condition arises if a default value is used for
- the date of observation within AST\_READ, due to no value being present
- in the supplied FitsChan. This condition is only tested for when using
- non-Native encodings.
-
- \sstitem
- {\tt{"}}Tnx{\tt{"}}: This condition arises if a FrameSet is read from a FITS
- header containing an IRAF {\tt{"}}TNX{\tt{"}} projection which includes terms
- not supproted by AST. Such terms are ignored and so the resulting
- FrameSet may be inaccurate.
-
- \sstitem
- {\tt{"}}Zpx{\tt{"}}: This condition arises if a FrameSet is read from a FITS
- header containing an IRAF {\tt{"}}ZPX{\tt{"}} projection which includes {\tt{"}}lngcor{\tt{"}}
- or {\tt{"}}latcor{\tt{"}} correction terms. These terms are not supported by AST
- and are ignored. The resulting FrameSet may therefore be inaccurate.
- }
- }
-}
-\sstroutine{
- AsTime(axis)\sstlabel{AsTimeaxis}
-}{
- Format celestal coordinates as times?
-}{
- \sstdescription{
- This attribute specifies the default style of formatting to be
- used (e.g. by \htmlref{AST\_FORMAT}{AST_FORMAT}) for the celestial coordinate values
- described by a \htmlref{SkyFrame}{SkyFrame}. It takes a separate boolean value for
- each SkyFrame axis so that, for instance, the setting
- {\tt{"}}AsTime(2)=0{\tt{"}} specifies the default formatting style for
- celestial latitude values.
-
- If the AsTime attribute for a SkyFrame axis is zero, then
- coordinates on that axis will be formatted as angles by default
- (using degrees, minutes and seconds), otherwise they will be
- formatted as times (using hours, minutes and seconds).
-
- The default value of AsTime is chosen according to the sky
- coordinate system being represented, as determined by the
- SkyFrame's \htmlref{System}{System} attribute. This ensures, for example, that
- right ascension values will be formatted as times by default,
- following normal conventions.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- SkyFrame
- }{
- All SkyFrames have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The AsTime attribute operates by changing the default value of
- the corresponding \htmlref{Format(axis)}{Formataxis} attribute. This, in turn, may
- also affect the value of the \htmlref{Unit(axis)}{Unitaxis} attribute.
-
- \sstitem
- Only the default style of formatting is affected by the AsTime
- value. If an explicit Format(axis) value is set, it will
- over-ride any effect from the AsTime attribute.
- }
- }
-}
-\sstroutine{
- Base\sstlabel{Base}
-}{
- FrameSet base Frame index
-}{
- \sstdescription{
- This attribute gives the index of the \htmlref{Frame}{Frame} which is to be
- regarded as the {\tt{"}}base{\tt{"}} Frame within a \htmlref{FrameSet}{FrameSet}. The default is
- the first Frame added to the FrameSet when it is created (this
- Frame always has an index of 1).
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- FrameSet
- }{
- All FrameSets have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Inverting a FrameSet (inverting the boolean sense of its
- \htmlref{Invert}{Invert} attribute, with the \htmlref{AST\_INVERT}{AST_INVERT} routine for example) will
- interchange the values of its Base and \htmlref{Current}{Current} attributes.
- }
- }
-}
-\sstroutine{
- Border\sstlabel{Border}
-}{
- Draw a border around valid regions of a Plot?
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
- whether a border is drawn around regions corresponding to the
- valid physical coordinates of a \htmlref{Plot}{Plot} (c.f. \htmlref{AST\_BORDER}{AST_BORDER}).
-
- If the Border value of a Plot is non-zero, then this border will
- be drawn as part of the grid. Otherwise, the border is not drawn
- (although axis labels and tick marks will still appear, unless
- other relevant Plot attributes indicate that they should
- not). The default behaviour is to draw the border if tick marks
- and numerical labels will be drawn around the edges of the
- plotting area (see the \htmlref{Labelling}{Labelling} attribute), but to omit it
- otherwise.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
-}
-\sstroutine{
- Bottom(axis)\sstlabel{Bottomaxis}
-}{
- Lowest axis value to display
-}{
- \sstdescription{
- This attribute gives the lowest axis value to be displayed (for
- instance, by the \htmlref{AST\_GRID}{AST_GRID} method).
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{Frame}{Frame}
- }{
- The default supplied by the Frame class is to display all axis
- values, without any limit.
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- The SkyFrame class re-defines the default Bottom value to -90 degrees
- for latitude axes, and 0 degrees for co-latitude axes. The
- default for longitude axes is to display all axis values.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When specifying this attribute by name, it should be
- subscripted with the number of the Frame axis to which it
- applies.
- }
- }
-}
-\sstroutine{
- Bounded\sstlabel{Bounded}
-}{
- Is the Region bounded?
-}{
- \sstdescription{
- This is a read-only attribute indicating if the \htmlref{Region}{Region} is bounded.
- A Region is bounded if it is contained entirely within some
- finite-size bounding box.
- }
- \sstattributetype{
- Integer (boolean), read-only.
- }
- \sstapplicability{
- \sstsubsection{
- Region
- }{
- All Regions have this attribute.
- }
- }
-}
-\sstroutine{
- CDMatrix\sstlabel{CDMatrix}
-}{
- Use CDi\_j keywords to represent pixel scaling, rotation, etc?
-}{
- \sstdescription{
- This attribute is a boolean value which specifies how the linear
- transformation from pixel coordinates to intermediate world
- coordinates should be represented within a \htmlref{FitsChan}{FitsChan} when using
- FITS-WCS encoding. This transformation describes the scaling,
- rotation, shear, etc., of the pixel axes.
-
- If the attribute has a non-zero value then the transformation is
- represented by a set of CDi\_j keywords representing a square matrix
- (where {\tt{"}}i{\tt{"}} is the index of an intermediate world coordinate axis
- and {\tt{"}}j{\tt{"}} is the index of a pixel axis). If the attribute has a zero
- value the transformation is represented by a set of PCi\_j keywords
- (which also represent a square matrix) together with a corresponding
- set of CDELTi keywords representing the axis scalings. See FITS-WCS
- paper II {\tt{"}}Representation of Celestial Coordinates in FITS{\tt{"}} by
- M. Calabretta \& E.W. Greisen, for a complete description of these two
- schemes.
-
- The default value of the CDMatrix attribute is determined by the
- contents of the FitsChan at the time the attribute is accessed. If
- the FitsChan contains any CDi\_j keywords then the default value is
- non-zero. Otherwise it is zero. Note, reading a \htmlref{FrameSet}{FrameSet} from a
- FitsChan will in general consume any CDi\_j keywords present in the
- FitsChan. Thus the default value for CDMatrix following a read will
- usually be zero, even if the FitsChan originally contained some
- CDi\_j keywords. This behaviour is similar to that of the \htmlref{Encoding}{Encoding}
- attribute, the default value for which is determined by the contents
- of the FitsChan at the time the attribute is accessed. If you wish
- to retain the original value of the CDMatrix attribute (that is,
- the value before reading the FrameSet) then you should enquire the
- default value before doing the read, and then set that value
- explicitly.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- FitsChan
- }{
- All FitsChans have this attribute.
- }
- }
-}
-\sstroutine{
- CarLin\sstlabel{CarLin}
-}{
- Ignore spherical rotations on CAR projections?
-}{
- \sstdescription{
- This attribute is a boolean value which specifies how FITS {\tt{"}}CAR{\tt{"}}
- (plate carree, or {\tt{"}}Cartesian{\tt{"}}) projections should be treated when
- reading a \htmlref{FrameSet}{FrameSet} from a foreign encoded FITS header. If zero (the
- default), it is assumed that the CAR projection conforms to the
- conventions described in the FITS world coordinate system (FITS-WCS)
- paper II {\tt{"}}Representation of Celestial Coordinates in FITS{\tt{"}} by
- M. Calabretta \& E.W. Greisen. If CarLin is non-zero, then these
- conventions are ignored, and it is assumed that the mapping from pixel
- coordinates to celestial coordinates is a simple linear transformation
- (hence the attribute name {\tt{"}}CarLin{\tt{"}}). This is appropriate for some older
- FITS data which claims to have a {\tt{"}}CAR{\tt{"}} projection, but which in fact do
- not conform to the conventions of the FITS-WCS paper. Furthermore, if
- CarLin is non-zero, it is assumed that CDELT and CD keywords are
- in units of degrees rather than radians (as required by the
- FITS-WCS papers).
-
- The FITS-WCS paper specifies that headers which include a CAR projection
- represent a linear mapping from pixel coordinates to {\tt{"}}native spherical
- coordinates{\tt{"}}, NOT celestial coordinates. An extra mapping is then
- required from native spherical to celestial. This mapping is a 3D
- rotation and so the overall \htmlref{Mapping}{Mapping} from pixel to celestial coordinates
- is NOT linear. See the FITS-WCS papers for further details.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{FitsChan}{FitsChan}
- }{
- All FitsChans have this attribute.
- }
- }
-}
-\sstroutine{
- Card\sstlabel{Card}
-}{
- Index of current FITS card in a FitsChan
-}{
- \sstdescription{
- This attribute gives the index of the {\tt{"}}current{\tt{"}} FITS header card
- within a \htmlref{FitsChan}{FitsChan}, the first card having an index of 1. The
- choice of current card affects the behaviour of routines that
- access the contents of the FitsChan, such as \htmlref{AST\_DELFITS}{AST_DELFITS},
- \htmlref{AST\_FINDFITS}{AST_FINDFITS} and \htmlref{AST\_PUTFITS}{AST_PUTFITS}.
-
- A value assigned to Card will position the FitsChan at any
- desired point, so that a particular card within it can be
- accessed. Alternatively, the value of Card may be enquired in
- order to determine the current position of a FitsChan.
-
- The default value of Card is 1. This means that clearing
- this attribute (using \htmlref{AST\_CLEAR}{AST_CLEAR}) effectively {\tt{"}}rewinds{\tt{"}} the
- FitsChan, so that the first card is accessed next. If Card is
- set to a value which exceeds the total number of cards in the
- FitsChan (as given by its \htmlref{Ncard}{Ncard} attribute), it is regarded as
- pointing at the {\tt{"}}end-of-file{\tt{"}}. In this case, the value returned
- in response to an enquiry is always one more than the number of
- cards in the FitsChan.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- FitsChan
- }{
- All FitsChans have this attribute.
- }
- }
-}
-\sstroutine{
- Class\sstlabel{Class}
-}{
- Object class name
-}{
- \sstdescription{
- This attribute gives the name of the class to which an \htmlref{Object}{Object}
- belongs.
- }
- \sstattributetype{
- Character string, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- All Objects have this attribute.
- }
- }
-}
-\sstroutine{
- Clean\sstlabel{Clean}
-}{
- Remove cards used whilst reading even if an error occurs?
-}{
- \sstdescription{
- This attribute indicates whether or not cards should be removed from
- the \htmlref{FitsChan}{FitsChan} if an error occurs within
- \htmlref{AST\_READ}{AST_READ}.
- A succesful read on a FitsChan always results in the removal of
- the cards which were involved in the description of the returned
- \htmlref{Object}{Object}. However, in the event of an error during the read (for instance
- if the cards in the FitsChan have illegal values, or if some required
- cards are missing) no cards will be removed from the FitsChan if
- the Clean attribute is zero (the default). If Clean is non-zero then
- any cards which were used in the aborted attempt to read an object
- will be removed.
-
- This provides a means of {\tt{"}}cleaning{\tt{"}} a FitsChan of WCS related cards
- which works even in the event of the cards not forming a legal WCS
- description.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- FitsChan
- }{
- All FitsChans have this attribute.
- }
- }
-}
-\sstroutine{
- Clip\sstlabel{Clip}
-}{
- Clip lines and/or markers at the Plot boundary?
-}{
- \sstdescription{
- This attribute controls whether curves and markers are clipped at the
- boundary of the graphics box specified when the \htmlref{Plot}{Plot} was created. A
- value of 3 implies both markers and curves are clipped at the Plot
- boundary. A value of 2 implies markers are clipped, but not curves. A
- value of 1 implies curves are clipped, but not markers. A value of
- zero implies neither curves nor markers are clipped. The default
- value is 1. Note, this attributes controls only the clipping
- performed internally within AST. The underlying graphics system may
- also apply clipping. In such cases, removing clipping using this
- attribute does not guarantee that no clipping will be visible in the
- final plot.
-
- The \htmlref{AST\_CLIP}{AST_CLIP} routine
- can be used to establish generalised clipping within arbitrary
- regions of the Plot.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
-}
-\sstroutine{
- ClipOp\sstlabel{ClipOp}
-}{
- Combine Plot clipping limits using a boolean OR?
-}{
- \sstdescription{
- This attribute controls how the clipping limits specified for
- each axis of a \htmlref{Plot}{Plot} (using the \htmlref{AST\_CLIP}{AST_CLIP} routine) are
- combined. This, in turn, determines which parts of the graphical
- output will be visible.
-
- If the ClipOp attribute of a Plot is zero (the default),
- graphical output is visible only if it satisfies the clipping
- limits on all the axes of the clipping \htmlref{Frame}{Frame} (a boolean
- AND). Otherwise, if ClipOp is non-zero, output is visible if it
- satisfies the clipping limits on one or more axes (a boolean
- OR).
-
- An important use of this attribute is to allow areas of a Plot
- to be left clear (e.g. as a background for some text). To
- achieve this, the lower and upper clipping bounds supplied to
- AST\_CLIP should be reversed, and the ClipOp attribute of the
- Plot should be set to a non-zero value.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
-}
-\sstroutine{
- Closed\sstlabel{Closed}
-}{
- Should the boundary be considered to be inside the region?
-}{
- \sstdescription{
- This attribute controls whether points on the boundary of a \htmlref{Region}{Region}
- are considered to be inside or outside the region. If the attribute
- value is non-zero (the default), points on the boundary are considered
- to be inside the region (that is, the Region is {\tt{"}}closed{\tt{"}}). However,
- if the attribute value is zero, points on the bounary are considered
- to be outside the region.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Region
- }{
- All Regions have this attribute.
- }
- \sstsubsection{
- \htmlref{PointList}{PointList}
- }{
- The value of the Closed attribute is ignored by PointList regions.
- If the PointList region has not been negated, then it is always
- assumed to be closed. If the PointList region has been negated, then
- it is always assumed to be open. This is required since points
- have zero volume and therefore consist entirely of boundary.
- }
- \sstsubsection{
- \htmlref{CmpRegion}{CmpRegion}
- }{
- The default Closed value for a CmpRegion is the Closed value of its
- first component Region.
- }
- \sstsubsection{
- \htmlref{Stc}{Stc}
- }{
- The default Closed value for an Stc is the Closed value of its
- encapsulated Region.
- }
- }
-}
-\sstroutine{
- Colour(element)\sstlabel{Colourelement}
-}{
- Colour index for a Plot element
-}{
- \sstdescription{
- This attribute determines the colour index used when drawing
- each element of graphical output produced by a \htmlref{Plot}{Plot}. It takes a
- separate value for each graphical element so that, for instance,
- the setting {\tt{"}}Colour(title)=2{\tt{"}} causes the Plot title to be drawn
- using colour index 2. The synonym {\tt{"}}Color{\tt{"}} may also be used.
-
- The range of integer colour indices available and their
- appearance is determined by the underlying graphics system. The
- default behaviour is for all graphical elements to be drawn
- using the default colour index supplied by this graphics system
- (normally, this is likely to result in white plotting on a black
- background, or vice versa).
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- For a list of the graphical elements available, see the
- description of the Plot class.
-
- \sstitem
- If no graphical element is specified, (e.g. {\tt{"}}Colour{\tt{"}} instead
- of {\tt{"}}Colour(title){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will
- affect the attribute value of all graphical elements, while a
- {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}} operation will use just the Colour(TextLab)
- value.
- }
- }
-}
-\sstroutine{
- Comment\sstlabel{Comment}
-}{
- Include textual comments in output?
-}{
- \sstdescription{
- This is a boolean attribute which controls whether textual
- comments are to be included in the output generated by a
- \htmlref{Channel}{Channel}. If included, they will describe what each item of
- output represents.
-
- If Comment is non-zero, then comments will be included. If
- it is zero, comments will be omitted.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Channel
- }{
- The default value is non-zero for a normal Channel.
- }
- \sstsubsection{
- \htmlref{FitsChan}{FitsChan}
- }{
- The default value is non-zero for a FitsChan.
- }
- \sstsubsection{
- \htmlref{XmlChan}{XmlChan}
- }{
- The default value is zero for an XmlChan.
- }
- }
-}
-\sstroutine{
- Current\sstlabel{Current}
-}{
- FrameSet current Frame index
-}{
- \sstdescription{
- This attribute gives the index of the \htmlref{Frame}{Frame} which is to be
- regarded as the {\tt{"}}current{\tt{"}} Frame within a \htmlref{FrameSet}{FrameSet}. The default
- is the most recent Frame added to the FrameSet (this Frame
- always has an index equal to the FrameSet's \htmlref{Nframe}{Nframe} attribute).
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- FrameSet
- }{
- All FrameSets have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Inverting a FrameSet (inverting the boolean sense of its
- \htmlref{Invert}{Invert} attribute, with the \htmlref{AST\_INVERT}{AST_INVERT} routine for example) will
- interchange the values of its \htmlref{Base}{Base} and Current attributes.
- }
- }
-}
-\sstroutine{
- DSBCentre\sstlabel{DSBCentre}
-}{
- The central position of interest in a dual sideband spectrum
-}{
- \sstdescription{
- This attribute specifies the central position of interest in a dual
- sideband spectrum. Its sole use is to determine the local oscillator
- frequency (the frequency which marks the boundary between the lower
- and upper sidebands). See the description of the \htmlref{IF}{IF} (intermediate
- frequency) attribute for details of how the local oscillator frequency
- is calculated. The sideband containing this central position is
- referred to as the {\tt{"}}observed{\tt{"}} sideband, and the other sideband as
- the {\tt{"}}image{\tt{"}} sideband.
-
- The value is accessed as a position in the spectral system
- represented by the \htmlref{SpecFrame}{SpecFrame} attributes inherited by this class, but
- is stored internally as topocentric frequency. Thus, if the \htmlref{System}{System}
- attribute of the \htmlref{DSBSpecFrame}{DSBSpecFrame} is set to {\tt{"}}VRAD{\tt{"}}, the Unit attribute
- set to {\tt{"}}m/s{\tt{"}} and the \htmlref{StdOfRest}{StdOfRest} attribute set to {\tt{"}}LSRK{\tt{"}}, then values
- for the DSBCentre attribute should be supplied as radio velocity in
- units of {\tt{"}}m/s{\tt{"}} relative to the kinematic LSR (alternative units may
- be used by appending a suitable units string to the end of the value).
- This value is then converted to topocentric frequency and stored. If
- (say) the Unit attribute is subsequently changed to {\tt{"}}km/s{\tt{"}} before
- retrieving the current value of the DSBCentre attribute, the stored
- topocentric frequency will be converted back to LSRK radio velocity,
- this time in units of {\tt{"}}km/s{\tt{"}}, before being returned.
-
- The default value for this attribute is 30 GHz.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- DSBSpecFrame
- }{
- All DSBSpecFrames have this attribute.
- }
- }
- \sstdiytopic{
- Note
- }{
- \sstitemlist{
-
- \sstitem
- The attributes which define the transformation to or from topocentric
- frequency should be assigned their correct values before accessing
- this attribute. These potentially include System, Unit, StdOfRest,
- \htmlref{ObsLon}{ObsLon}, \htmlref{ObsLat}{ObsLat}, \htmlref{ObsAlt}{ObsAlt}, \htmlref{Epoch}{Epoch}, \htmlref{RefRA}{RefRA}, \htmlref{RefDec}{RefDec} and \htmlref{RestFreq}{RestFreq}.
- }
- }
-}
-\sstroutine{
- DefB1950\sstlabel{DefB1950}
-}{
- Use FK4 B1950 as defaults?
-}{
- \sstdescription{
- This attribute is a boolean value which specifies a default equinox
- and reference frame to use when reading a \htmlref{FrameSet}{FrameSet} from a \htmlref{FitsChan}{FitsChan}
- with a foreign (i.e. non-native) encoding. It is only used if the FITS
- header contains RA and DEC axes but contains no information about the
- reference frame or equinox. If this is the case, then values of FK4 and
- B1950 are assumed if the DefB1950 attribute has a non-zero value and
- ICRS is assumed if DefB1950 is zero. The default value for DefB1950
- depends on the value of the \htmlref{Encoding}{Encoding} attribute: for FITS-WCS encoding
- the default is zero, and for all other encodings it is one.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- FitsChan
- }{
- All FitsChans have this attribute.
- }
- }
-}
-\sstroutine{
- Digits/Digits(axis)\sstlabel{DigitsDigitsaxis}
-}{
- Number of digits of precision
-}{
- \sstdescription{
- This attribute specifies how many digits of precision are
- required by default when a coordinate value is formatted for a
- \htmlref{Frame}{Frame} axis (e.g. using \htmlref{AST\_FORMAT}{AST_FORMAT}). Its value may be set either
- for a Frame as a whole, or (by subscripting the attribute name
- with the number of an axis) for each axis individually. Any
- value set for an individual axis will over-ride the value for
- the Frame as a whole.
-
- Note that the Digits value acts only as a means of determining a
- default Format string. Its effects are over-ridden if a Format
- string is set explicitly for an axis. However, if the Format
- attribute specifies the precision using the string {\tt{"}}.$*${\tt{"}}, then
- the Digits attribute is used to determine the number of decimal
- places to produce.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The default Digits value supplied by the Frame class is 7. If
- a value less than 1 is supplied, then 1 is used instead.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Digits attribute of a FrameSet (or one of its axes) is
- the same as that of its current Frame (as specified by the
- \htmlref{Current}{Current} attribute).
- }
- \sstsubsection{
- \htmlref{Plot}{Plot}
- }{
- The default Digits value used by the Plot class when drawing
- annotated axis labels is the smallest value which results in all
- adjacent labels being distinct.
- }
- \sstsubsection{
- \htmlref{TimeFrame}{TimeFrame}
- }{
- The Digits attribute is ignored when a TimeFrame formats a value
- as a date and time string (see the Format attribute).
- }
- }
-}
-\sstroutine{
- Direction(axis)\sstlabel{Directionaxis}
-}{
- Display axis in conventional direction?
-}{
- \sstdescription{
- This attribute is a boolean value which suggests how the axes of
- a \htmlref{Frame}{Frame} should be displayed (e.g.) in graphical output. By
- default, it has the value one, indicating that they should be
- shown in the conventional sense (increasing left to right for an
- abscissa, and bottom to top for an ordinate). If set to zero,
- this attribute indicates that the direction should be reversed,
- as would often be done for an astronomical magnitude or a right
- ascension axis.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The default Direction value supplied by the Frame class is 1,
- indicating that all axes should be displayed in the
- conventional direction.
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- The SkyFrame class re-defines the default Direction value to
- suggest that certain axes (e.g. right ascension) should be
- plotted in reverse when appropriate.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Direction attribute of a FrameSet axis is the same as
- that of its current Frame (as specified by the \htmlref{Current}{Current}
- attribute).
- }
- \sstsubsection{
- \htmlref{Plot}{Plot}
- }{
- The Direction attribute of the base Frame in a Plot is set to
- indicate the sense of the two graphics axes, as implied by the
- graphics bounding box supplied when the Plot was created.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When specifying this attribute by name, it should be
- subscripted with the number of the Frame axis to which it
- applies.
-
- \sstitem
- The Direction attribute does not directly affect the behaviour
- of the AST library. Instead, it serves as a hint to applications
- programs about the orientation in which they may wish to display
- any data associated with the Frame. Applications are free to
- ignore this hint if they wish.
- }
- }
-}
-\sstroutine{
- Disco\sstlabel{Disco}
-}{
- PcdMap pincushion/barrel distortion coefficient
-}{
- \sstdescription{
- This attribute specifies the pincushion/barrel distortion coefficient
- used by a \htmlref{PcdMap}{PcdMap}. This coefficient is set when the PcdMap is created,
- but may later be modified. If the attribute is cleared, its default
- value is zero, which gives no distortion. For pincushion distortion,
- the value should be positive. For barrel distortion, it should be
- negative.
-
- Note that the forward transformation of a PcdMap applies the
- distortion specified by this attribute and the inverse
- transformation removes this distortion. If the PcdMap is inverted
- (e.g. using \htmlref{AST\_INVERT}{AST_INVERT}), then the forward transformation will
- remove the distortion and the inverse transformation will apply
- it. The distortion itself will still be given by the same value of
- Disco.
- }
- \sstattributetype{
- Double precision.
- }
- \sstapplicability{
- \sstsubsection{
- PcdMap
- }{
- All PcdMaps have this attribute.
- }
- }
-}
-\sstroutine{
- Domain\sstlabel{Domain}
-}{
- Coordinate system domain
-}{
- \sstdescription{
- This attribute contains a string which identifies the physical
- domain of the coordinate system that a \htmlref{Frame}{Frame} describes.
-
- The Domain attribute also controls how a Frame behaves when it is
- used (by \htmlref{AST\_FINDFRAME}{AST_FINDFRAME}) as a template to match another (target)
- Frame. It does this by specifying the Domain that the target
- Frame should have in order to match the template. If the Domain
- value in the template Frame is set, then only targets with the
- same Domain value will be matched. If the template's Domain
- value is not set, however, then the target's Domain will be
- ignored.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The default Domain value supplied by the Frame class is an
- empty string.
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- The SkyFrame class re-defines the default Domain value to be
- {\tt{"}}SKY{\tt{"}}.
- }
- \sstsubsection{
- \htmlref{CmpFrame}{CmpFrame}
- }{
- The CmpFrame class re-defines the default Domain value to be
- of the form {\tt{"}}$<$dom1$>$-$<$dom2$>${\tt{"}}, where $<$dom1$>$ and $<$dom2$>$ are the
- Domains of the two component Frames. If both these Domains are
- blank, then the string {\tt{"}}CMP{\tt{"}} is used as the default Domain name.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Domain attribute of a FrameSet is the same as that of its
- current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- \sstsubsection{
- \htmlref{SpecFrame}{SpecFrame}
- }{
- The SpecFrame class re-defines the default Domain value to be
- {\tt{"}}SPECTRUM{\tt{"}}.
- }
- \sstsubsection{
- \htmlref{DSBSpecFrame}{DSBSpecFrame}
- }{
- The DSBSpecFrame class re-defines the default Domain value to be
- {\tt{"}}DSBSPECTRUM{\tt{"}}.
- }
- \sstsubsection{
- \htmlref{FluxFrame}{FluxFrame}
- }{
- The FluxFrame class re-defines the default Domain value to be
- {\tt{"}}FLUX{\tt{"}}.
- }
- \sstsubsection{
- \htmlref{SpecFluxFrame}{SpecFluxFrame}
- }{
- The FluxFrame class re-defines the default Domain value to be
- {\tt{"}}SPECTRUM-FLUX{\tt{"}}.
- }
- \sstsubsection{
- \htmlref{TimeFrame}{TimeFrame}
- }{
- The TimeFrame class re-defines the default Domain value to be
- {\tt{"}}TIME{\tt{"}}.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- All Domain values are converted to upper case and white space
- is removed before use.
- }
- }
-}
-\sstroutine{
- DrawAxes(axis)\sstlabel{DrawAxesaxis}
-}{
- Draw axes for a Plot?
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
- whether curves representing coordinate axes should be drawn.
- It takes a separate value for each physical axis of a
- \htmlref{Plot}{Plot} so that, for instance, the setting {\tt{"}}DrawAxes(2)=0{\tt{"}}
- specifies that no axis should be drawn for the second axis.
-
- If drawn, these axis lines will pass through any tick marks
- associated with numerical labels drawn to mark values on the
- axes. The location of these tick marks and labels (and hence the
- axis lines) is determined by the Plot's \htmlref{LabelAt(axis)}{LabelAtaxis} attribute.
-
- If the DrawAxes value of a Plot is non-zero (the default), then
- axis lines will be drawn, otherwise they will be omitted.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- \htmlref{Axis}{Axis} lines are drawn independently of any coordinate grid
- lines (see the \htmlref{Grid}{Grid} attribute) so grid lines may be used to
- substitute for axis lines if required.
-
- \sstitem
- In some circumstances, numerical labels and tick marks are
- drawn around the edges of the plotting area (see the \htmlref{Labelling}{Labelling}
- attribute). In this case, the value of the DrawAxes attribute
- is ignored.
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}DrawAxes{\tt{"}} instead of
- {\tt{"}}DrawAxes(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
- the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
- {\tt{"}}test{\tt{"}} operation will use just the DrawAxes(1) value.
- }
- }
-}
-\sstroutine{
- DrawTitle\sstlabel{DrawTitle}
-}{
- Draw a title for a Plot?
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
- whether a title is drawn.
-
- If the DrawTitle value of a \htmlref{Plot}{Plot} is non-zero (the default), then
- the title will be drawn, otherwise it will be omitted.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- \sstsubsection{
- \htmlref{Plot3D}{Plot3D}
- }{
- The Plot3D class ignores this attributes, assuming a value of
- zero.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The text used for the title is obtained from the Plot's \htmlref{Title}{Title}
- attribute.
-
- \sstitem
- The vertical placement of the title can be controlled using
- the \htmlref{TitleGap}{TitleGap} attribute.
- }
- }
-}
-\sstroutine{
- Dut1\sstlabel{Dut1}
-}{
- The UT1-UTC correction
-}{
- \sstdescription{
- This attribute is used when calculating the Local Apparent Sidereal
- Time corresponding to \htmlref{SkyFrame}{SkyFrame}'s \htmlref{Epoch}{Epoch} value (used when converting
- positions to or from the {\tt{"}}AzEl{\tt{"}} system). It should be set to the
- difference, in seconds, between the UT1 and UTC timescales at the
- moment in time represented by the SkyFrame's Epoch attribute. The
- value to use is unpredictable and depends on changes in the earth's
- rotation speed. Values for UT1-UTC can be obtained from the
- International Earth Rotation and Reference Systems Service
- (IERS) at http://www.iers.org/.
-
- Currently, the correction is always less than 1 second. This is
- ensured by the occasional introduction of leap seconds into the UTC
- timescale. Therefore no great error will usually result if no value
- is assigned to this attribute (in which case a default value of
- zero is used). However, it is possible that a decision may be taken
- at some time in the future to abandon the introduction of leap
- seconds, in which case the DUT correction could grow to significant
- sizes.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{Frame}{Frame}
- }{
- All Frames have this attribute.
- }
- }
-}
-\sstroutine{
- Edge(axis)\sstlabel{Edgeaxis}
-}{
- Which edges to label in a Plot
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
- which edges of a \htmlref{Plot}{Plot} are used for displaying numerical and
- descriptive axis labels. It takes a separate value for each
- physical axis of the Plot so that, for instance, the setting
- {\tt{"}}Edge(2)=left{\tt{"}} specifies which edge to use to display labels for
- the second axis.
-
- The values {\tt{"}}left{\tt{"}}, {\tt{"}}top{\tt{"}}, {\tt{"}}right{\tt{"}} and {\tt{"}}bottom{\tt{"}} (or any
- abbreviation) can be supplied for this attribute. The default is
- usually {\tt{"}}bottom{\tt{"}} for the first axis and {\tt{"}}left{\tt{"}} for the second
- axis. However, if exterior labelling was requested (see the
- \htmlref{Labelling}{Labelling} attribute) but cannot be produced using these default
- Edge values, then the default values will be swapped if this
- enables exterior labelling to be produced.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- \sstsubsection{
- \htmlref{Plot3D}{Plot3D}
- }{
- The Plot3D class ignores this attributes. Instead it uses its
- own \htmlref{RootCorner}{RootCorner} attribute to determine which edges of the 3D plot
- to label.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- In some circumstances, numerical labels will be drawn along
- internal grid lines instead of at the edges of the plotting area
- (see the Labelling attribute). In this case, the Edge attribute
- only affects the placement of the descriptive labels (these are
- drawn at the edges of the plotting area, rather than along the
- axis lines).
- }
- }
-}
-\sstroutine{
- Encoding\sstlabel{Encoding}
-}{
- System for encoding Objects as FITS headers
-}{
- \sstdescription{
- This attribute specifies the encoding system to use when AST
- Objects are stored as FITS header cards in a \htmlref{FitsChan}{FitsChan}. It
- affects the behaviour of the \htmlref{AST\_WRITE}{AST_WRITE} and \htmlref{AST\_READ}{AST_READ} routines when
- they are used to transfer any AST \htmlref{Object}{Object} to or from an external
- representation consisting of FITS header cards (i.e. whenever a
- write or read operation is performed using a FitsChan as the I/O
- \htmlref{Channel}{Channel}).
-
- There are several ways (conventions) by which coordinate system
- information may be represented in the form of FITS headers and
- the Encoding attribute is used to specify which of these should
- be used. The encoding options available are outlined in the
- {\tt{"}}Encodings Available{\tt{"}} section below, and in more detail in the
- sections which follow.
-
- Encoding systems differ in the range of possible Objects
- (e.g. classes) they can represent, in the restrictions they
- place on these Objects (e.g. compatibility with some
- externally-defined coordinate system model) and in the number of
- Objects that can be stored together in any particular set of
- FITS header cards (e.g. multiple Objects, or only a single
- Object). The choice of encoding also affects the range of
- external applications which can potentially read and interpret
- the FITS header cards produced.
-
- The encoding options available are not necessarily mutually
- exclusive, and it may sometimes be possible to store multiple
- Objects (or the same Object several times) using different
- encodings within the same set of FITS header cards. This
- possibility increases the likelihood of other applications being
- able to read and interpret the information.
-
- By default, a FitsChan will attempt to determine which encoding
- system is already in use, and will set the default Encoding
- value accordingly (so that subsequent I/O operations adopt the
- same conventions). It does this by looking for certain critical
- FITS keywords which only occur in particular encodings. For
- details of how this works, see the {\tt{"}}Choice of Default Encoding{\tt{"}}
- section below. If you wish to ensure that a particular encoding
- system is used, independently of any FITS cards already present,
- you should set an explicit Encoding value yourself.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- FitsChan
- }{
- All FitsChans have this attribute.
- }
- }
- \sstdiytopic{
- Encodings Available
- }{
- The Encoding attribute can take any of the following (case
- insensitive) string values to select the corresponding encoding
- system:
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}DSS{\tt{"}}: Encodes coordinate system information in FITS header
- cards using the convention developed at the Space Telescope
- Science Institute (STScI) for the Digitised Sky Survey (DSS)
- astrometric plate calibrations. The main advantages of this
- encoding are that FITS images which use it are widely available
- and it is understood by a number of important and
- well-established astronomy applications. For further details,
- see the section {\tt{"}}The DSS Encoding{\tt{"}} below.
-
- \sstitem
- {\tt{"}}FITS-WCS{\tt{"}}: Encodes coordinate system information in FITS
- header cards using the conventions described in the FITS
- world coordinate system (FITS-WCS) papers by E.W. Greisen,
- M. Calabretta, et al. The main advantages of this encoding are that
- it should be understood by any FITS-WCS compliant application and
- is likely to be adopted widely for FITS data in future. For further
- details, see the section {\tt{"}}The FITS-WCS Encoding{\tt{"}} below.
-
- \sstitem
- {\tt{"}}FITS-PC{\tt{"}}: Encodes coordinate system information in FITS
- header cards using the conventions described in an earlier draft
- of the FITS world coordinate system papers by E.W. Greisen and
- M. Calabretta. This encoding uses a combination of CDELTi and
- PCiiijjj keywords to describe the scale and rotation of the pixel
- axes. This encoding is included to support existing data and
- software which uses these now superceded conventions. In general,
- the {\tt{"}}FITS-WCS{\tt{"}} encoding (which uses CDi\_j or PCi\_j keywords to
- describe the scale and rotation) should be used in preference to
- {\tt{"}}FITS-PC{\tt{"}}.
-
- \sstitem
- {\tt{"}}FITS-IRAF{\tt{"}}: Encodes coordinate system information in FITS
- header cards using the conventions described in the document
- {\tt{"}}World Coordinate Systems Representations Within the FITS
- Format{\tt{"}} by R.J. Hanisch and D.G. Wells, 1988. This encoding is
- currently employed by the IRAF data analysis facility, so its
- use will facilitate data exchange with IRAF. Its main advantages
- are that it is a stable convention which approximates to a
- subset of the propsed FITS-WCS encoding (above). This makes it
- suitable as an interim method for storing coordinate system
- information in FITS headers until the FITS-WCS encoding becomes
- stable. Since many datasets currently use the FITS-IRAF
- encoding, conversion of data from FITS-IRAF to the final form of
- FITS-WCS is likely to be well supported.
-
- \sstitem
- {\tt{"}}FITS-AIPS{\tt{"}}: Encodes coordinate system information in FITS
- header cards using the conventions originally introduced by the
- AIPS data analysis facility. This is base on the use of CDELTi and
- CROTAi keuwords to desribe the scale and rotation of each axis.
- These conventions have been superceded but are still widely used.
-
- \sstitem
- {\tt{"}}FITS-AIPS$+$$+${\tt{"}}: Encodes coordinate system information in FITS
- header cards using the conventions used by the AIPS$+$$+$ project.
- This is an extension of FITS-AIPS which includes some of the
- features of FITS-IRAF and FITS-PC.
-
- \sstitem
- {\tt{"}}FITS-CLASS{\tt{"}}: Encodes coordinate system information in FITS
- header cards using the conventions used by the CLASS project.
- CLASS is a software package for reducing single-dish radio and
- sub-mm spectroscopic data. See the section {\tt{"}}CLASS FITS format{\tt{"}} at
- http://www.iram.fr/IRAMFR/GILDAS/doc/html/class-html/.
-
- \sstitem
- {\tt{"}}NATIVE{\tt{"}}: Encodes AST Objects in FITS header cards using a
- convention which is private to the AST library (but adheres to
- the general FITS standard) and which uses FITS keywords that
- will not clash with other encoding systems. The main advantages
- of this are that any class of AST Object may be encoded, and any
- (reasonable) number of Objects may be stored sequentially in the
- same FITS header. This makes FITS headers an almost loss-less
- communication path for passing AST Objects between applications
- (although all such applications must, of course, make use of the
- AST library to interpret the information). For further details,
- see the section {\tt{"}}The NATIVE Encoding{\tt{"}} below.
- }
- }
- \sstdiytopic{
- Choice of Default Encoding
- }{
- If the Encoding attribute of a FitsChan is not set, the default
- value it takes is determined by the presence of certain critical
- FITS keywords within the FitsChan. The sequence of decisions
- used to arrive at the default value is as follows:
-
- \sstitemlist{
-
- \sstitem
- If the FitsChan contains any keywords beginning with the
- string {\tt{"}}BEGAST{\tt{"}}, then NATIVE encoding is used,
-
- \sstitem
- Otherwise, FITS-CLASS is used if the FitsChan contains a DELTAV
- keyword and a keyword of the form VELO-xxx, where xxx indicates one
- of the rest frames used by class (e.g. {\tt{"}}VELO-LSR{\tt{"}}).
-
- \sstitem
- Otherwise, if the FitsChan contains a CTYPE keyword which
- represents a spectral axis using the conventions of the AIPS and
- AIPS$+$$+$ projects (e.g. {\tt{"}}FELO-LSR{\tt{"}}, etc), then one of FITS-AIPS or
- FITS-AIPS$+$$+$ encoding is used. FITS-AIPS$+$$+$ is used if any of the
- keywords CDi\_j, PROJP, LONPOLE or LATPOLE are
- found in the FitsChan. Otherwise FITS-AIPS is used.
-
- \sstitem
- Otherwise, if the FitsChan contains a keyword of the form
- {\tt{"}}PCiiijjj{\tt{"}}, where {\tt{"}}i{\tt{"}} and {\tt{"}}j{\tt{"}} are single digits, then
- FITS-PC encoding is used,
-
- \sstitem
- Otherwise, if the FitsChan contains a keyword of the form
- {\tt{"}}CDiiijjj{\tt{"}}, where {\tt{"}}i{\tt{"}} and {\tt{"}}j{\tt{"}} are single digits, then
- FITS-IRAF encoding is used,
-
- \sstitem
- Otherwise, if the FitsChan contains a keyword of the form
- {\tt{"}}CDi\_j{\tt{"}}, and at least one of RADECSYS, PROJPi, or CjVALi
- where {\tt{"}}i{\tt{"}} and {\tt{"}}j{\tt{"}} are single digits, then FITS-IRAF encoding is
- used.
-
- \sstitem
- Otherwise, if the FitsChan contains any keywords of the form
- PROJPi, CjVALi or RADECSYS, where {\tt{"}}i{\tt{"}} and {\tt{"}}j{\tt{"}} are single digits,
- then FITS-PC encoding is used.
-
- \sstitem
- Otherwise, if the FitsChan contains a keyword of the form
- CROTAi, where {\tt{"}}i{\tt{"}} is a single digit, then FITS-AIPS encoding is
- used.
-
- \sstitem
- Otherwise, if the FitsChan contains a keyword of the form
- CRVALi, where {\tt{"}}i{\tt{"}} is a single digit, then FITS-WCS encoding is
- used.
-
- \sstitem
- Otherwise, if the FitsChan contains the {\tt{"}}PLTRAH{\tt{"}} keyword, then
- DSS encoding is used,
-
- \sstitem
- Otherwise, if none of these conditions is met (as would be the
- case when using an empty FitsChan), then NATIVE encoding is
- used.
-
- }
- Except for the NATIVE and DSS encodings, all the above checks
- also require that the header contains at least one CTYPE, CRPIX and
- CRVAL keyword (otherwise the checking process continues to the next
- case).
-
- Setting an explicit value for the Encoding attribute always
- over-rides this default behaviour.
-
- Note that when writing information to a FitsChan, the choice of
- encoding will depend greatly on the type of application you
- expect to be reading the information in future. If you do not
- know this, there may sometimes be an advantage in writing the
- information several times, using a different encoding on each
- occasion.
- }
- \sstdiytopic{
- The DSS Encoding
- }{
- The DSS encoding uses FITS header cards to store a multi-term
- polynomial which relates pixel positions on a digitised
- photographic plate to celestial coordinates (right ascension and
- declination). This encoding may only be used to store a single
- AST Object in any set of FITS header cards, and that Object must
- be a \htmlref{FrameSet}{FrameSet} which conforms to the STScI/DSS coordinate system
- model (this means the \htmlref{Mapping}{Mapping} which relates its base and current
- Frames must include either a \htmlref{DssMap}{DssMap} or a \htmlref{WcsMap}{WcsMap} with type
- AST\_\_TAN or AST\_\_TPN).
-
- When reading a DSS encoded Object (using AST\_READ), the FitsChan
- concerned must initially be positioned at the first card (its
- \htmlref{Card}{Card} attribute must equal 1) and the result of the read, if
- successful, will always be a pointer to a FrameSet. The base
- \htmlref{Frame}{Frame} of this FrameSet represents DSS pixel coordinates, and the
- current Frame represents DSS celestial coordinates. Such a read
- is always destructive and causes the FITS header cards required
- for the construction of the FrameSet to be removed from the
- FitsChan, which is then left positioned at the {\tt{"}}end-of-file{\tt{"}}. A
- subsequent read using the same encoding will therefore not
- return another FrameSet, even if the FitsChan is rewound.
-
- When AST\_WRITE is used to store a FrameSet using DSS encoding,
- an attempt is first made to simplify the FrameSet to see if it
- conforms to the DSS model. Specifically, the current Frame must
- be a FK5 \htmlref{SkyFrame}{SkyFrame}; the projection must be a tangent plane
- (gnomonic) projection with polynomial corrections conforming to
- DSS requirements, and north must be parallel to the second base
- Frame axis.
-
- If the simplification process succeeds, a description of the
- FrameSet is written to the FitsChan using appropriate DSS FITS
- header cards. The base Frame of the FrameSet is used to form the
- DSS pixel coordinate system and the current Frame gives the DSS
- celestial coordinate system. A successful write operation will
- over-write any existing DSS encoded data in the FitsChan, but
- will not affect other (non-DSS) header cards. If a destructive
- read of a DSS encoded Object has previously occurred, then an
- attempt will be made to store the FITS header cards back in
- their original locations.
-
- If an attempt to simplify a FrameSet to conform to the DSS model
- fails (or if the Object supplied is not a FrameSet), then no
- data will be written to the FitsChan and AST\_WRITE will return
- zero. No error will result.
- }
- \sstdiytopic{
- The FITS-WCS Encoding
- }{
- The FITS-WCS convention uses FITS header cards to describe the
- relationship between pixels in an image (not necessarily
- 2-dimensional) and one or more related {\tt{"}}world coordinate systems{\tt{"}}.
- The FITS-WCS encoding may only be used to store a single AST Object
- in any set of FITS header cards, and that Object must be a FrameSet
- which conforms to the FITS-WCS model (the FrameSet may, however,
- contain multiple Frames which will be result in multiple FITS
- {\tt{"}}alternate axis descriptions{\tt{"}}). Details of the use made by this
- Encoding of the conventions described in the FITS-WCS papers are
- given in the appendix {\tt{"}}FITS-WCS Coverage{\tt{"}} of this document. A few
- main points are described below.
-
- The rotation and scaling of the intermediate world coordinate system
- can be specified using either {\tt{"}}CDi\_j{\tt{"}} keywords, or {\tt{"}}PCi\_j{\tt{"}} together
- with {\tt{"}}CDELTi{\tt{"}} keywords. When writing a FrameSet to a FitsChan, the
- the value of the \htmlref{CDMatrix}{CDMatrix} attribute of the FitsChan determines
- which system is used.
-
- In addition, this encoding supports the {\tt{"}}TAN with polynomial correction
- terms{\tt{"}} projection which was included in a draft of the FITS-WCS paper,
- but was not present in the final version. A {\tt{"}}TAN with polynomial
- correction terms{\tt{"}} projection is represented using a WcsMap with type
- AST\_\_TPN (rather than AST\_\_TAN which is used to represent simple
- TAN projections). When reading a FITS header, a CTYPE keyword value
- including a {\tt{"}}-TAN{\tt{"}} code results in an AST\_\_TPN projection if there are
- any projection parameters (given by the \htmlref{PVi\_m}{PVi_m} keywords) associated with
- the latitude axis, or if there are projection parameters associated
- with the longitude axis for m greater than 4. When writing a
- FrameSet to a FITS header, an AST\_\_TPN projection gives rise to a
- CTYPE value including the normal {\tt{"}}-TAN{\tt{"}} code, but the projection
- parameters are stored in keywords with names {\tt{"}}QVi\_m{\tt{"}}, instead of the
- usual {\tt{"}}PVi\_m{\tt{"}}. Since these QV parameters are not part of the
- FITS-WCS standard they will be ignored by other non-AST software,
- resulting in the WCS being interpreted as a simple TAN projection
- without any corrections. This should be seen as an interim solution
- until such time as an agreed method for describing projection
- distortions within FITS-WCS has been published.
-
- AST extends the range of celestial coordinate sytstems which may be
- described using this encoding by inclusion of the allowing the use of
- {\tt{"}}AZ--{\tt{"}} and {\tt{"}}EL--{\tt{"}} as the coordinate specification within CTYPE
- values. These form a longitude/latitude pair of axes which describe
- azimuth and elevation. The geographic position of the observer
- should be supplied using the OBSGEO-X/Y/Z keywords described in FITS-WCS
- paper III. Currently, a simple model is used which includes diurnal
- aberration, but ignores atmospheric refraction, polar motion, etc.
- These may be added in a leter release.
-
- When reading a FITS-WCS encoded Object (using AST\_READ), the FitsChan
- concerned must initially be positioned at the first card (its
- Card attribute must equal 1) and the result of the read, if
- successful, will always be a pointer to a FrameSet. The base
- Frame of this FrameSet represents FITS-WCS pixel coordinates,
- and the current Frame represents the physical coordinate system
- described by the FITS-WCS primary axis descriptions. If
- secondary axis descriptions are also present, then the FrameSet
- may contain additional (non-current) Frames which represent
- these. Such a read is always destructive and causes the FITS
- header cards required for the construction of the FrameSet to be
- removed from the FitsChan, which is then left positioned at the
- {\tt{"}}end-of-file{\tt{"}}. A subsequent read using the same encoding will
- therefore not return another FrameSet, even if the FitsChan is
- rewound.
-
- When AST\_WRITE is used to store a FrameSet using FITS-WCS
- encoding, an attempt is first made to simplify the FrameSet to
- see if it conforms to the FITS-WCS model. If this simplification
- process succeeds (as it often should, as the model is reasonably
- flexible), a description of the FrameSet is written to the
- FitsChan using appropriate FITS header cards. The base Frame of
- the FrameSet is used to form the FITS-WCS pixel coordinate
- system and the current Frame gives the physical coordinate
- system to be described by the FITS-WCS primary axis
- descriptions. Any additional Frames in the FrameSet may be used
- to construct secondary axis descriptions, where appropriate.
-
- A successful write operation will over-write any existing
- FITS-WCS encoded data in the FitsChan, but will not affect other
- (non-FITS-WCS) header cards. If a destructive read of a FITS-WCS
- encoded Object has previously occurred, then an attempt will be
- made to store the FITS header cards back in their original
- locations. Otherwise, the new cards will be inserted following
- any other FITS-WCS related header cards present or, failing
- that, in front of the current card (as given by the Card
- attribute).
-
- If an attempt to simplify a FrameSet to conform to the FITS-WCS
- model fails (or if the Object supplied is not a FrameSet), then
- no data will be written to the FitsChan and AST\_WRITE will
- return zero. No error will result.
- }
- \sstdiytopic{
- The FITS-IRAF Encoding
- }{
- The FITS-IRAF encoding can, for most purposes, be considered as
- a subset of the FITS-WCS encoding (above), although it differs
- in the details of the FITS keywords used. It is used in exactly
- the same way and has the same restrictions, but with the
- addition of the following:
-
- \sstitemlist{
-
- \sstitem
- The only celestial coordinate systems that may be represented
- are equatorial, galactic and ecliptic,
-
- \sstitem
- Sky projections can be represented only if any associated
- projection parameters are set to their default values.
-
- \sstitem
- Secondary axis descriptions are not supported, so when writing
- a FrameSet to a FitsChan, only information from the base and
- current Frames will be stored.
-
- }
- Note that this encoding is provided mainly as an interim measure to
- provide a more stable alternative to the FITS-WCS encoding until the
- FITS standard for encoding WCS information is finalised. The name
- {\tt{"}}FITS-IRAF{\tt{"}} indicates the general keyword conventions used and does
- not imply that this encoding will necessarily support all features of
- the WCS scheme used by IRAF software. Nevertheless, an attempt has
- been made to support a few such features where they are known to be
- used by important sources of data.
-
- When writing a FrameSet using the FITS-IRAF encoding, axis rotations
- are specified by a matrix of FITS keywords of the form {\tt{"}}CDi\_j{\tt{"}}, where
- {\tt{"}}i{\tt{"}} and {\tt{"}}j{\tt{"}} are single digits. The alternative form {\tt{"}}CDiiijjj{\tt{"}}, which
- is also in use, is recognised when reading an Object, but is never
- written.
-
- In addition, the experimental IRAF {\tt{"}}ZPX{\tt{"}} and {\tt{"}}TNX{\tt{"}} sky projections will
- be accepted when reading, but will never be written (the corresponding
- FITS {\tt{"}}ZPN{\tt{"}} or {\tt{"}}distorted TAN{\tt{"}} projection being used instead). However,
- there are restrictions on the use of these experimental projections.
- For {\tt{"}}ZPX{\tt{"}}, longitude and latitude correction surfaces (appearing as
- {\tt{"}}lngcor{\tt{"}} or {\tt{"}}latcor{\tt{"}} terms in the IRAF-specific {\tt{"}}WAT{\tt{"}} keywords) are
- not supported. For {\tt{"}}TNX{\tt{"}} projections, only cubic surfaces encoded as
- simple polynomials with {\tt{"}}half cross-terms{\tt{"}} are supported. If an
- un-usable {\tt{"}}TNX{\tt{"}} or {\tt{"}}ZPX{\tt{"}} projection is encountered while reading
- from a FitsChan, a simpler form of TAN or ZPN projection is used
- which ignores the unsupported features and may therefore be
- inaccurate. If this happens, a warning message is added to the
- contents of the FitsChan as a set of cards using the keyword {\tt{"}}ASTWARN{\tt{"}}.
-
- You should not normally attempt to mix the foreign FITS encodings within
- the same FitsChan, since there is a risk that keyword clashes may occur.
- }
- \sstdiytopic{
- The FITS-PC Encoding
- }{
- The FITS-PC encoding can, for most purposes, be considered as
- equivalent to the FITS-WCS encoding (above), although it differs
- in the details of the FITS keywords used. It is used in exactly
- the same way and has the same restrictions.
- }
- \sstdiytopic{
- The FITS-AIPS Encoding
- }{
- The FITS-AIPS encoding can, for most purposes, be considered as
- equivalent to the FITS-WCS encoding (above), although it differs
- in the details of the FITS keywords used. It is used in exactly
- the same way and has the same restrictions, but with the
- addition of the following:
-
- \sstitemlist{
-
- \sstitem
- The only celestial coordinate systems that may be represented
- are equatorial, galactic and ecliptic,
-
- \sstitem
- Spectral axes can only be represented if they represent
- frequency, radio velocity or optical velocity, and are linearly
- sampled in frequency. In addition, the standard of rest
- must be LSRK, LSRD, barycentric or geocentric.
-
- \sstitem
- Sky projections can be represented only if any associated
- projection parameters are set to their default values.
-
- \sstitem
- The AIT, SFL and MER projections can only be written if the CRVAL
- keywords are zero for both longitude and latitude axes.
-
- \sstitem
- Secondary axis descriptions are not supported, so when writing
- a FrameSet to a FitsChan, only information from the base and
- current Frames will be stored.
-
- \sstitem
- If there are more than 2 axes in the base and current Frames, any
- rotation must be restricted to the celestial plane, and must involve
- no shear.
- }
- }
- \sstdiytopic{
- The FITS-AIPS$+$$+$ Encoding
- }{
- The FITS-AIPS$+$$+$ encoding is based on the FITS-AIPS encoding, but
- includes some features of the FITS-IRAF and FITS-PC encodings.
- Specifically, any celestial projections supported by FITS-PC may be
- used, including those which require parameterisation, and the axis
- rotation and scaling may be specified using CDi\_j keywords. When
- writing a FITS header, rotation will be specified using CROTA/CDELT
- keywords if possible, otherwise CDi\_j keywords will be used instead.
- }
- \sstdiytopic{
- The FITS-CLASS Encoding
- }{
- The FITS-CLASS encoding uses the conventions of the CLASS project.
- These are described in the section {\tt{"}}Developer Manual{\tt{"}}/{\tt{"}}CLASS FITS
- Format{\tt{"}} contained in the CLASS documentation at:
-
- http://www.iram.fr/IRAMFR/GILDAS/doc/html/class-html/class.html.
-
- This encoding is similar to FITS-AIPS with the following restrictions:
-
- \sstitemlist{
-
- \sstitem
- When a \htmlref{SpecFrame}{SpecFrame} is created by reading a FITS-CLASS header, the
- attributes describing the observer's position (\htmlref{ObsLat}{ObsLat}, \htmlref{ObsLon}{ObsLon} and
- \htmlref{ObsAlt}{ObsAlt}) are left unset because the CLASS encoding does not specify
- these values. Conversions to or from the topocentric standard of rest
- will therefore be inaccurate (typically by up to about 0.5 km/s)
- unless suitable values are assigned to these attributes after the
- FrameSet has been created.
-
- \sstitem
- When writing a FrameSet to a FITS-CLASS header, the current Frame
- in the FrameSet must have at least 3 WCS axes, of which one must be
- a linear spectral axis. The spectral axis in the created header will
- always describe frequency. If the spectral axis in the supplied
- FrameSet refers to some other system (e.g. radio velocity, etc),
- then it will be converted to frequency.
-
- \sstitem
- There must be a pair of celestial axes - either (RA,Dec) or
- (GLON,GLAT). RA and Dec must be either FK4/B1950 or FK5/J2000.
-
- \sstitem
- A limited range of projection codes (TAN, ARC, STG, AIT, SFL, SIN)
- can be used. For AIT and SFL, the reference point must be at the
- origin of longitude and latitude. For SIN, the associated projection
- parameters must both be zero.
-
- \sstitem
- No rotation of the celestial axes is allowed, unless the spatial
- axes are degenerate (i.e. cover only a single pixel).
-
- \sstitem
- The frequency axis in the created header will always describe
- frequency in the source rest frame. If the supplied FrameSet uses
- some other standard of rest then suitable conversion will be applied.
-
- \sstitem
- The source velocity must be defined. In other words, the SpecFrame
- attributes \htmlref{SourceVel}{SourceVel} and \htmlref{SourceVRF}{SourceVRF} must have been assigned values.
-
- \sstitem
- The frequency axis in a FITS-CLASS header does not represent
- absolute frequency, but instead represents offsets from the rest
- frequency in the standard of rest of the source.
-
- }
- When writing a FrameSet out using FITS-CLASS encoding, the current
- Frame may be temporarily modified if this will allow the header
- to be produced. If this is done, the associated pixel-$>$WCS Mapping
- will also be modified to take account of the changes to the Frame.
- The modifications performed include re-ordering axes (WCS axes, not
- pixel axes), changing spectral coordinate system and standard of
- rest, changing the celestial coordinate system and reference equinox,
- and changing axis units.
- }
- \sstdiytopic{
- The NATIVE Encoding
- }{
- The NATIVE encoding may be used to store a description of any
- class of AST Object in the form of FITS header cards, and (for
- most practical purposes) any number of these Object descriptions
- may be stored within a single set of FITS cards. If multiple
- Object descriptions are stored, they are written and read
- sequentially. The NATIVE encoding makes use of unique FITS
- keywords which are designed not to clash with keywords that have
- already been used for other purposes (if a potential clash is
- detected, an alternative keyword is constructed to avoid the
- clash).
-
- When reading a NATIVE encoded object from a FitsChan (using
- AST\_READ), FITS header cards are read, starting at the current
- card (as determined by the Card attribute), until the start of
- the next Object description is found. This description is then
- read and converted into an AST Object, for which a pointer is
- returned. Such a read is always destructive and causes all the
- FITS header cards involved in the Object description to be
- removed from the FitsChan, which is left positioned at the
- following card.
-
- The Object returned may be of any class, depending on the
- description that was read, and other AST routines may be used to
- validate it (for example, by examining its \htmlref{Class}{Class} or \htmlref{ID}{ID} attribute
- using AST\_GETC). If further NATIVE encoded Object descriptions
- exist in the FitsChan, subsequent calls to AST\_READ will return
- the Objects they describe in sequence (and destroy their
- descriptions) until no more remain between the current card and
- the {\tt{"}}end-of-file{\tt{"}}.
-
- When AST\_WRITE is used to write an Object using NATIVE encoding,
- a description of the Object is inserted immediately before the
- current card (as determined by the Card attribute). Multiple
- Object descriptions may be written in this way and are stored
- separately (and sequentially if the Card attribute is not
- modified between the writes). A write operation using the NATIVE
- encoding does not over-write previously written Object
- descriptions. Note, however, that subsequent behaviour is
- undefined if an Object description is written inside a
- previously-written description, so this should be avoided.
-
- When an Object is written to a FitsChan using NATIVE encoding,
- AST\_WRITE should (barring errors) always transfer data and
- return a value of 1.
- }
-}
-\sstroutine{
- Epoch\sstlabel{Epoch}
-}{
- Epoch of observation
-}{
- \sstdescription{
- This attribute is used to qualify the coordinate systems described by
- a \htmlref{Frame}{Frame}, by giving the moment in time when the coordinates are known
- to be correct. Often, this will be the date of observation, and is
- important in cases where coordinates systems move with respect to each
- other over the course of time.
-
- The Epoch attribute is stored as a Modified Julian Date, but
- when setting its value it may be given in a variety of
- formats. See the {\tt{"}}Input Formats{\tt{"}} section (below) for details.
- Strictly, the Epoch value should be supplied in the TDB timescale,
- but for some purposes (for instance, for converting sky positions
- between different types of equatorial system) the timescale is not
- significant, and UTC may be used.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- All Frames have this attribute. The basic Frame class provides
- a default of J2000.0 (Julian) but makes no use of the Epoch value.
- This is because the Frame class does not distinguish between
- different Cartesian coordinate systems (see the \htmlref{System}{System} attribute).
- }
- \sstsubsection{
- \htmlref{CmpFrame}{CmpFrame}
- }{
- The default Epoch value for a CmpFrame is selected as follows;
- if the Epoch attribute has been set in the first component Frame
- then the Epoch value from the first component Frame is used as
- the default for the CmpFrame. Otherwise, if the Epoch attribute has
- been set in the second component Frame then the Epoch value from the
- second component Frame is used as the default for the CmpFrame.
- Otherwise, the default Epoch value from the first component
- Frame is used as the default for the CmpFrame. When the Epoch
- attribute of a CmpFrame is set or cleared, it is also set or
- cleared in the two component Frames.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Epoch attribute of a FrameSet is the same as that of its current
- Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- The coordinates of sources within a SkyFrame can changed with time
- for various reasons, including: (i) changing aberration of light
- caused by the observer's velocity (e.g. due to the Earth's motion
- around the Sun), (ii) changing gravitational deflection by the Sun
- due to changes in the observer's position with time, (iii) fictitious
- motion due to rotation of non-inertial coordinate systems (e.g. the
- old FK4 system), and (iv) proper motion of the source itself (although
- this last effect is not handled by the SkyFrame class because it
- affects individual sources rather than the coordinate system as
- a whole).
-
- The default Epoch value in a SkyFrame is B1950.0 (Besselian) for the
- old FK4-based coordinate systems (see the System attribute) and
- J2000.0 (Julian) for all others.
-
- Care must be taken to distinguish the Epoch value, which relates to
- motion (or apparent motion) of the source, from the superficially
- similar \htmlref{Equinox}{Equinox} value. The latter is used to qualify a coordinate
- system which is itself in motion in a (notionally) predictable way
- as a result of being referred to a slowly moving reference plane
- (e.g. the equator).
-
- See the description of the System attribute for details of which
- qualifying attributes apply to each celestial coordinate system.
- }
- \sstsubsection{
- \htmlref{TimeFrame}{TimeFrame}
- }{
- A TimeFrame describes a general time axis and so cannot be completely
- characterised by a single Epoch value. For this reason the TimeFrame
- class makes no use of the Epoch attribute. However, user code can
- still make use of the attribute if necessary to represent a {\tt{"}}typical{\tt{"}}
- time spanned by the TimeFrame. The default Epoch value for a TimeFrame
- will be the TDB equivalent of the current value of the TimeFrame's
- \htmlref{TimeOrigin}{TimeOrigin} attribute. If no value has been set for TimeOrigin,
- then the default Epoch value is J2000.0.
- }
- }
- \sstdiytopic{
- Input Formats
- }{
- The formats accepted when setting an Epoch value are listed
- below. They are all case-insensitive and are generally tolerant
- of extra white space and alternative field delimiters:
-
- \sstitemlist{
-
- \sstitem
- Besselian Epoch: Expressed in decimal years, with or without
- decimal places ({\tt{"}}B1950{\tt{"}} or {\tt{"}}B1976.13{\tt{"}} for example).
-
- \sstitem
- Julian Epoch: Expressed in decimal years, with or without
- decimal places ({\tt{"}}J2000{\tt{"}} or {\tt{"}}J2100.9{\tt{"}} for example).
-
- \sstitem
- Year: Decimal years, with or without decimal places ({\tt{"}}1996.8{\tt{"}}
- for example). Such values are interpreted as a Besselian epoch
- (see above) if less than 1984.0 and as a Julian epoch otherwise.
-
- \sstitem
- Julian Date: With or without decimal places ({\tt{"}}JD 2454321.9{\tt{"}} for
- example).
-
- \sstitem
- Modified Julian Date: With or without decimal places
- ({\tt{"}}MJD 54321.4{\tt{"}} for example).
-
- \sstitem
- Gregorian Calendar Date: With the month expressed either as an
- integer or a 3-character abbreviation, and with optional decimal
- places to represent a fraction of a day ({\tt{"}}1996-10-2{\tt{"}} or
- {\tt{"}}1996-Oct-2.6{\tt{"}} for example). If no fractional part of a day is
- given, the time refers to the start of the day (zero hours).
-
- \sstitem
- Gregorian Date and Time: Any calendar date (as above) but with
- a fraction of a day expressed as hours, minutes and seconds
- ({\tt{"}}1996-Oct-2 12:13:56.985{\tt{"}} for example). The date and time can be
- separated by a space or by a {\tt{"}}T{\tt{"}} (as used by ISO8601 format).
- }
- }
- \sstdiytopic{
- Output Format
- }{
- When enquiring Epoch values, the format used is the {\tt{"}}Year{\tt{"}}
- format described under {\tt{"}}Input Formats{\tt{"}}. This is a value in
- decimal years which will be a Besselian epoch if less than
- 1984.0 and a Julian epoch otherwise. By omitting any character
- prefix, this format allows the Epoch value to be obtained as
- either a character string or a floating point value.
- }
-}
-\sstroutine{
- Equinox\sstlabel{Equinox}
-}{
- Epoch of the mean equinox
-}{
- \sstdescription{
- This attribute is used to qualify those celestial coordinate
- systems described by a \htmlref{SkyFrame}{SkyFrame} which are notionally based on
- the ecliptic (the plane of the Earth's orbit around the Sun)
- and/or the Earth's equator.
-
- Both of these planes are in motion and their positions are
- difficult to specify precisely. In practice, therefore, a model
- ecliptic and/or equator are used instead. These, together with
- the point on the sky that defines the coordinate origin (the
- intersection of the two planes termed the {\tt{"}}mean equinox{\tt{"}}) move
- with time according to some model which removes the more rapid
- fluctuations. The SkyFrame class supports both the FK4 and
- FK5 models.
-
- The position of a fixed source expressed in any of these
- coordinate systems will appear to change with time due to
- movement of the coordinate system itself (rather than motion of
- the source). Such coordinate systems must therefore be
- qualified by a moment in time (the {\tt{"}}epoch of the mean equinox{\tt{"}}
- or {\tt{"}}equinox{\tt{"}} for short) which allows the position of the model
- coordinate system on the sky to be determined. This is the role
- of the Equinox attribute.
-
- The Equinox attribute is stored as a Modified Julian Date, but
- when setting or getting its value you may use the same formats
- as for the \htmlref{Epoch}{Epoch} attribute (q.v.).
-
- The default Equinox value is B1950.0 (Besselian) for the old
- FK4-based coordinate systems (see the \htmlref{System}{System} attribute) and
- J2000.0 (Julian) for all others.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- SkyFrame
- }{
- All SkyFrames have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Care must be taken to distinguish the Equinox value, which
- relates to the definition of a time-dependent coordinate system
- (based on solar system reference planes which are in motion),
- from the superficially similar Epoch value. The latter is used
- to qualify coordinate systems where the positions of sources
- change with time (or appear to do so) for a variety of other
- reasons, such as aberration of light caused by the observer's
- motion, etc.
-
- \sstitem
- See the description of the System attribute for details of
- which qualifying attributes apply to each celestial coordinate
- system.
- }
- }
-}
-\sstroutine{
- Escape\sstlabel{Escape}
-}{
- Allow changes of character attributes within strings?
-}{
- \sstdescription{
- This attribute controls the appearance of text strings and numerical
- labels drawn by the \htmlref{AST\_GRID}{AST_GRID} and (for the \htmlref{Plot}{Plot} class) \htmlref{AST\_TEXT}{AST_TEXT} routines,
- by determining if any escape sequences contained within the strings
- should be used to control the appearance of the text, or should
- be printed literally. Note, the \htmlref{Plot3D}{Plot3D} class only interprets escape
- sequences within the
- AST\_GRID routine.
-
- If the Escape value of a Plot is one (the default), then any
- escape sequences in text strings produce the effects described
- below when printed. Otherwise, they are printed literally.
-
- See also the \htmlref{AST\_ESCAPES}{AST_ESCAPES} function.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstdiytopic{
- Escape Sequences
- }{
- Escape sequences are introduced into the text string by a percent
- {\tt{"}}\%{\tt{"}} character. Any unrecognised, illegal or incomplete escape sequences
- are printed literally. The following escape sequences are
- currently recognised ({\tt{"}}...{\tt{"}} represents a string of one or more
- decimal digits):
-
- \%\% - Print a literal {\tt{"}}\%{\tt{"}} character.
-
- \%$\wedge$...$+$ - Draw subsequent characters as super-scripts. The digits
- {\tt{"}}...{\tt{"}} give the distance from the base-line of {\tt{"}}normal{\tt{"}}
- text to the base-line of the super-script text, scaled
- so that a value of {\tt{"}}100{\tt{"}} corresponds to the height of
- {\tt{"}}normal{\tt{"}} text.
- \%$\wedge$$+$ - Draw subsequent characters with the normal base-line.
-
- \%v...$+$ - Draw subsequent characters as sub-scripts. The digits
- {\tt{"}}...{\tt{"}} give the distance from the base-line of {\tt{"}}normal{\tt{"}}
- text to the base-line of the sub-script text, scaled
- so that a value of {\tt{"}}100{\tt{"}} corresponds to the height of
- {\tt{"}}normal{\tt{"}} text.
-
- \%v$+$ - Draw subsequent characters with the normal base-line
- (equivalent to \%$\wedge$$+$).
-
- \%$>$...$+$ - Leave a gap before drawing subsequent characters.
- The digits {\tt{"}}...{\tt{"}} give the size of the gap, scaled
- so that a value of {\tt{"}}100{\tt{"}} corresponds to the height of
- {\tt{"}}normal{\tt{"}} text.
-
- \%$<$...$+$ - Move backwards before drawing subsequent characters.
- The digits {\tt{"}}...{\tt{"}} give the size of the movement, scaled
- so that a value of {\tt{"}}100{\tt{"}} corresponds to the height of
- {\tt{"}}normal{\tt{"}} text.
-
- \%s...$+$ - Change the Size attribute for subsequent characters. The
- digits {\tt{"}}...{\tt{"}} give the new Size as a fraction of the
- {\tt{"}}normal{\tt{"}} Size, scaled so that a value of {\tt{"}}100{\tt{"}} corresponds
- to 1.0;
-
- \%s$+$ - Reset the Size attribute to its {\tt{"}}normal{\tt{"}} value.
-
- \%w...$+$ - Change the Width attribute for subsequent characters. The
- digits {\tt{"}}...{\tt{"}} give the new width as a fraction of the
- {\tt{"}}normal{\tt{"}} Width, scaled so that a value of {\tt{"}}100{\tt{"}} corresponds
- to 1.0;
-
- \%w$+$ - Reset the Size attribute to its {\tt{"}}normal{\tt{"}} value.
-
- \%f...$+$ - Change the Font attribute for subsequent characters. The
- digits {\tt{"}}...{\tt{"}} give the new Font value.
-
- \%f$+$ - Reset the Font attribute to its {\tt{"}}normal{\tt{"}} value.
-
- \%c...$+$ - Change the Colour attribute for subsequent characters. The
- digits {\tt{"}}...{\tt{"}} give the new Colour value.
-
- \%c$+$ - Reset the Colour attribute to its {\tt{"}}normal{\tt{"}} value.
-
- \%t...$+$ - Change the Style attribute for subsequent characters. The
- digits {\tt{"}}...{\tt{"}} give the new Style value.
-
- \%t$+$ - Reset the Style attribute to its {\tt{"}}normal{\tt{"}} value.
-
- \%h$+$ - Remember the current horizontal position (see {\tt{"}}\%g$+${\tt{"}})
-
- \%g$+$ - Go to the horizontal position of the previous {\tt{"}}\%h$+${\tt{"}} (if any).
-
- \%- - Push the current graphics attribute values onto the top of
- the stack (see {\tt{"}}\%$+${\tt{"}}).
-
- \%$+$ - Pop attributes values of the top the stack (see {\tt{"}}\%-{\tt{"}}). If
- the stack is empty, {\tt{"}}normal{\tt{"}} attribute values are restored.
- }
-}
-\sstroutine{
- FillFactor\sstlabel{FillFactor}
-}{
- Fraction of the Region which is of interest
-}{
- \sstdescription{
- This attribute indicates the fraction of the \htmlref{Region}{Region} which is of
- interest. AST does not use this attribute internally for any purpose.
- Typically, it could be used to indicate the fraction of the Region for
- which data is available.
-
- The supplied value must be in the range 0.0 to 1.0, and the default
- value is 1.0 (except as noted below).
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- Region
- }{
- All Regions have this attribute.
- }
- \sstsubsection{
- \htmlref{CmpRegion}{CmpRegion}
- }{
- The default FillFactor for a CmpRegion is the FillFactor of its
- first component Region.
- }
- \sstsubsection{
- \htmlref{Prism}{Prism}
- }{
- The default FillFactor for a Prism is the product of the
- FillFactors of its two component Regions.
- }
- \sstsubsection{
- \htmlref{Stc}{Stc}
- }{
- The default FillFactor for an Stc is the FillFactor of its
- encapsulated Region.
- }
- }
-}
-\sstroutine{
- FitsDigits\sstlabel{FitsDigits}
-}{
- Digits of precision for floating point FITS values
-}{
- \sstdescription{
- This attribute gives the number of significant decimal digits to
- use when formatting floating point values for inclusion in the
- FITS header cards within a \htmlref{FitsChan}{FitsChan}.
-
- By default, a positive value is used which results in no loss of
- information, assuming that the value is double precision.
- Usually, this causes no problems.
-
- However, to adhere strictly to the recommendations of the FITS
- standard, the width of the formatted value (including sign,
- decimal point and exponent) ought not to be more than 20
- characters. If you are concerned about this, you should set
- FitsDigits to a negative value, such as -15. In this case, the
- absolute value ($+$15) indicates the maximum number of significant
- digits to use, but the actual number used may be fewer than this
- to ensure that the FITS recommendations are satisfied. When
- using this approach, the resulting number of significant digits
- may depend on the value being formatted and on the presence of
- any sign, decimal point or exponent.
-
- The value of this attribute is effective when FITS header cards
- are output, either using
- \htmlref{AST\_FINDFITS}{AST_FINDFITS} or by the action of the FitsChan's sink routine
- when it is finally deleted.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- FitsChan
- }{
- All FitsChans have this attribute.
- }
- }
-}
-\sstroutine{
- Font(element)\sstlabel{Fontelement}
-}{
- Character font for a Plot element
-}{
- \sstdescription{
- This attribute determines the character font index used when
- drawing each element of graphical output produced by a \htmlref{Plot}{Plot}. It
- takes a separate value for each graphical element so that, for
- instance, the setting {\tt{"}}Font(title)=2{\tt{"}} causes the Plot title to
- be drawn using font number 2.
-
- The range of integer font indices available and the appearance
- of the resulting text is determined by the underlying graphics
- system. The default behaviour is for all graphical elements to
- be drawn using the default font supplied by this graphics
- system.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- For a list of the graphical elements available, see the
- description of the Plot class.
-
- \sstitem
- If no graphical element is specified, (e.g. {\tt{"}}Font{\tt{"}} instead
- of {\tt{"}}Font(title){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will
- affect the attribute value of all graphical elements, while a
- {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}} operation will use just the Font(TextLab)
- value.
- }
- }
-}
-\sstroutine{
- Format(axis)\sstlabel{Formataxis}
-}{
- Format specification for axis values
-}{
- \sstdescription{
- This attribute specifies the format to be used when displaying
- coordinate values associated with a particular \htmlref{Frame}{Frame} axis
- (i.e. to convert values from binary to character form). It is
- interpreted by the \htmlref{AST\_FORMAT}{AST_FORMAT} function and determines the
- formatting which it applies.
-
- If no Format value is set for a Frame axis, a default value is
- supplied instead. This is based on the value of the Digits, or
- Digits(axis), attribute and is chosen so that it displays the
- requested number of digits of precision.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The Frame class interprets this attribute as a format
- specification string to be passed to the C {\tt{"}}printf{\tt{"}} function
- (e.g. {\tt{"}}\%1.7G{\tt{"}}) in order to format a single coordinate value
- (supplied as a double precision number).
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- The SkyFrame class re-defines the syntax and default value of
- the Format string to allow the formatting of sexagesimal
- values as appropriate for the particular celestial coordinate
- system being represented. The syntax of SkyFrame Format
- strings is described (below) in the {\tt{"}}SkyFrame Formats{\tt{"}}
- section.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Format attribute of a FrameSet axis is the same as that
- of its current Frame (as specified by the \htmlref{Current}{Current}
- attribute). Note that the syntax of the Format string is also
- determined by the current Frame.
- }
- \sstsubsection{
- \htmlref{TimeFrame}{TimeFrame}
- }{
- The TimeFrame class extends the syntax of the Format string to
- allow the formatting of TimeFrame axis values as Gregorian calendar
- dates and times. The syntax of TimeFrame Format strings is described
- (below) in the {\tt{"}}TimeFrame Formats{\tt{"}} section.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When specifying this attribute by name, it should be
- subscripted with the number of the Frame axis to which it
- applies.
- }
- }
- \sstdiytopic{
- SkyFrame Formats
- }{
- The Format string supplied for a SkyFrame should contain zero or
- more of the following characters. These may occur in any order,
- but the following is recommended for clarity:
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}$+${\tt{"}}: Indicates that a plus sign should be prefixed to positive
- values. By default, no plus sign is used.
-
- \sstitem
- {\tt{"}}z{\tt{"}}: Indicates that leading zeros should be prefixed to the
- value so that the first field is of constant width, as would be
- required in a fixed-width table (leading zeros are always
- prefixed to any fields that follow). By default, no leading
- zeros are added.
-
- \sstitem
- {\tt{"}}i{\tt{"}}: Use the standard ISO field separator (a colon) between
- fields. This is the default behaviour.
-
- \sstitem
- {\tt{"}}b{\tt{"}}: Use a blank to separate fields.
-
- \sstitem
- {\tt{"}}l{\tt{"}}: Use a letter ({\tt{"}}h{\tt{"}}/{\tt{"}}d{\tt{"}}, {\tt{"}}m{\tt{"}} or {\tt{"}}s{\tt{"}} as appropriate) to
- separate fields.
-
- \sstitem
- {\tt{"}}g{\tt{"}}: Use a letter and symbols to separate fields ({\tt{"}}h{\tt{"}}/{\tt{"}}d{\tt{"}}, {\tt{"}}m{\tt{"}} or {\tt{"}}s{\tt{"}},
- etc, as appropriate), but include escape sequences in the formatted
- value so that the \htmlref{Plot}{Plot} class will draw the separators as small
- super-scripts.
-
- \sstitem
- {\tt{"}}d{\tt{"}}: Include a degrees field. Expressing the angle purely in
- degrees is also the default if none of {\tt{"}}h{\tt{"}}, {\tt{"}}m{\tt{"}}, {\tt{"}}s{\tt{"}} or {\tt{"}}t{\tt{"}} are
- given.
-
- \sstitem
- {\tt{"}}h{\tt{"}}: Express the angle as a time and include an hours field
- (where 24 hours correspond to 360 degrees). Expressing the angle
- purely in hours is also the default if {\tt{"}}t{\tt{"}} is given without
- either {\tt{"}}m{\tt{"}} or {\tt{"}}s{\tt{"}}.
-
- \sstitem
- {\tt{"}}m{\tt{"}}: Include a minutes field. By default this is not included.
-
- \sstitem
- {\tt{"}}s{\tt{"}}: Include a seconds field. By default this is not included.
- This request is ignored if {\tt{"}}d{\tt{"}} or {\tt{"}}h{\tt{"}} is given, unless a minutes
- field is also included.
-
- \sstitem
- {\tt{"}}t{\tt{"}}: Express the angle as a time (where 24 hours correspond to
- 360 degrees). This option is ignored if either {\tt{"}}d{\tt{"}} or {\tt{"}}h{\tt{"}} is
- given and is intended for use where the value is to be expressed
- purely in minutes and/or seconds of time (with no hours
- field). If {\tt{"}}t{\tt{"}} is given without {\tt{"}}d{\tt{"}}, {\tt{"}}h{\tt{"}}, {\tt{"}}m{\tt{"}} or {\tt{"}}s{\tt{"}} being
- present, then it is equivalent to {\tt{"}}h{\tt{"}}.
-
- \sstitem
- {\tt{"}}.{\tt{"}}: Indicates that decimal places are to be given for the
- final field in the formatted string (whichever field this
- is). The {\tt{"}}.{\tt{"}} should be followed immediately by an unsigned
- integer which gives the number of decimal places required, or by an
- asterisk. If an asterisk is supplied, a default number of decimal
- places is used which is based on the value of the Digits
- attribute.
-
- }
- All of the above format specifiers are case-insensitive. If
- several characters make conflicting requests (e.g. if both {\tt{"}}i{\tt{"}}
- and {\tt{"}}b{\tt{"}} appear), then the character occurring last takes
- precedence, except that {\tt{"}}d{\tt{"}} and {\tt{"}}h{\tt{"}} always override {\tt{"}}t{\tt{"}}.
-
- If the format string starts with a percentage sign (\%), then the
- whole format string is assumed to conform to the syntax defined by
- the Frame class, and the axis values is formated as a decimal
- radians value.
- }
- \sstdiytopic{
- TimeFrame Formats
- }{
- The Format string supplied for a TimeFrame should either use the
- syntax defined by the base Frame class (i.e. a C {\tt{"}}printf{\tt{"}} format
- string), or the extended {\tt{"}}iso{\tt{"}} syntax described below (the default
- value is inherited from the Frame class):
-
- \sstitemlist{
-
- \sstitem
- C {\tt{"}}printf{\tt{"}} syntax: If the Format string is a C {\tt{"}}printf{\tt{"}} format
- description such as {\tt{"}}\%1.7G{\tt{"}}, the TimeFrame axis value will be
- formatted without change as a floating point value using this format.
- The formatted string will thus represent an offset from the zero point
- specified by the TimeFrame's \htmlref{TimeOrigin}{TimeOrigin} attribute, measured in
- units given by the TimeFrame's Unit attribute.
-
- \sstitem
- {\tt{"}}iso{\tt{"}} syntax: This is used to format a TimeFrame axis value as a
- Gregorian date followed by an optional time of day. If the Format
- value commences with the string {\tt{"}}iso{\tt{"}} then the TimeFrame axis value
- will be converted to an absolute MJD, including the addition of the
- current TimeOrigin value, and then formatted as a Gregorian date
- using the format {\tt{"}}yyyy-mm-dd{\tt{"}}. Optionally, the Format value may
- include an integer precision following the {\tt{"}}iso{\tt{"}} specification (e.g.
- {\tt{"}}iso.2{\tt{"}}), in which case the time of day will be appended to the
- formatted date (if no time of day is included, the date field is
- rounded to the nearest day). The integer value in the Format string
- indicates the number of decimal places to use in the seconds field. For
- instance, a Format value of {\tt{"}}iso.0{\tt{"}} produces a time of day of the form
- {\tt{"}}hh:mm:ss{\tt{"}}, and a Format value of {\tt{"}}iso.2{\tt{"}} produces a time of day of the
- form {\tt{"}}hh:mm:ss.ss{\tt{"}}. The date and time fields will be separated by a
- space unless 'T' is appended to the end of string, in which case
- the letter T (upper case) will be used as the separator. The value of
- the Digits attribute is ignored when using this {\tt{"}}iso{\tt{"}} format.
- }
- }
-}
-\sstroutine{
- Full\sstlabel{Full}
-}{
- Set level of output detail
-}{
- \sstdescription{
- This attribute is a three-state flag and takes values of -1, 0
- or $+$1. It controls the amount of information included in the
- output generated by a \htmlref{Channel}{Channel}.
-
- If Full is zero, then a modest amount of
- non-essential but useful information will be included in the
- output. If Full is negative, all non-essential information will
- be suppressed to minimise the amount of output, while if it is
- positive, the output will include the maximum amount of detailed
- information about the \htmlref{Object}{Object} being written.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- Channel
- }{
- The default value is zero for a normal Channel.
- }
- \sstsubsection{
- \htmlref{FitsChan}{FitsChan}
- }{
- The default value is zero for a FitsChan.
- }
- \sstsubsection{
- \htmlref{XmlChan}{XmlChan}
- }{
- The default value is -1 for an XmlChan.
- }
- \sstsubsection{
- \htmlref{StcsChan}{StcsChan}
- }{
- The default value is zero for an StcsChan. Set a positive value
- to cause default values to be included in STC-S descriptions.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- All positive values supplied for this attribute are converted
- to $+$1 and all negative values are converted to -1.
- }
- }
-}
-\sstroutine{
- Gap(axis)\sstlabel{Gapaxis}
-}{
- Interval between linearly spaced major axis values of a Plot
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
- the linear interval between the {\tt{"}}major{\tt{"}} axis values of a \htmlref{Plot}{Plot}, at
- which (for example) major tick marks are drawn. It takes a separate
- value for each physical axis of the Plot so that, for instance,
- the setting {\tt{"}}Gap(2)=3.0{\tt{"}} specifies the difference between adjacent major
- values along the second axis. The Gap attribute is only used when
- the LogTicks attribute indicates that the spacing between major axis
- values is to be linear. If major axis values are logarithmically spaced
- then the gap is specified using attribute LogGap.
-
- The Gap value supplied will usually be rounded to the nearest
- {\tt{"}}nice{\tt{"}} value, suitable (e.g.) for generating axis labels, before
- use. To avoid this {\tt{"}}nicing{\tt{"}} you should set an explicit format
- for the axis using the \htmlref{Format(axis)}{Formataxis} or \htmlref{Digits/Digits(axis)}{DigitsDigitsaxis}
- attribute. The default behaviour is for the Plot to generate its
- own Gap value when required, based on the range of axis values
- to be represented.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The Gap value should use the same units as are used internally
- for storing coordinate values on the corresponding axis. For
- example, with a celestial coordinate system, the Gap value
- should be in radians, not hours or degrees.
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}Gap{\tt{"}} instead of {\tt{"}}Gap(2){\tt{"}}),
- then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the attribute
- value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}} operation
- will use just the Gap(1) value.
- }
- }
-}
-\sstroutine{
- Grf\sstlabel{Grf}
-}{
- Use Grf routines registered through AST\_GRFSET?
-}{
- \sstdescription{
- This attribute selects the routines which are used to draw graphics by
- the \htmlref{Plot}{Plot} class. If it is zero, then the routines in the graphics
- interface selected at link-time are used (see the \htmlref{ast\_link}{ast_link} script).
- Otherwise, routines registered using \htmlref{AST\_GRFSET}{AST_GRFSET} are used. In this
- case, if a routine is needed which has not been registered,
- then the routine in the graphics interface selected at link-time is
- used.
-
- The default is to use the graphics interface
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- \sstsubsection{
- \htmlref{Plot3D}{Plot3D}
- }{
- The Plot3D class ignores this attributes, assuming a value of
- zero.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The value of this attribute is not saved when the Plot is written
- out through a \htmlref{Channel}{Channel} to an external data store. On re-loading such
- a Plot using \htmlref{AST\_READ}{AST_READ}, the attribute will be cleared, resulting in the
- graphics interface selected at link-time being used.
- }
- }
-}
-\sstroutine{
- Grid\sstlabel{Grid}
-}{
- Draw grid lines for a Plot?
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
- whether grid lines (a grid of curves marking the {\tt{"}}major{\tt{"}} values
- on each axis) are drawn across the plotting area.
-
- If the Grid value of a \htmlref{Plot}{Plot} is non-zero, then grid lines will be
- drawn. Otherwise, short tick marks on the axes are used to mark
- the major axis values. The default behaviour is to use tick
- marks if the entire plotting area is filled by valid physical
- coordinates, but to draw grid lines otherwise.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The spacing between major axis values, which determines the
- spacing of grid lines, may be set using the \htmlref{Gap(axis)}{Gapaxis} attribute.
- }
- }
-}
-\sstroutine{
- GrismAlpha\sstlabel{GrismAlpha}
-}{
- The angle of incidence of the incoming light on the grating surface
-}{
- \sstdescription{
- This attribute holds the angle between the incoming light and the
- normal to the grating surface, in radians. The default value is 0.
- }
- \sstattributetype{
- Double precision.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{GrismMap}{GrismMap}
- }{
- All GrismMaps have this attribute.
- }
- }
-}
-\sstroutine{
- GrismEps\sstlabel{GrismEps}
-}{
- The angle between the normal and the dispersion plane
-}{
- \sstdescription{
- This attribute holds the angle (in radians) between the normal to
- the grating or exit prism face, and the dispersion plane. The
- dispersion plane is the plane spanned by the incoming and outgoing
- ray. The default value is 0.0.
- }
- \sstattributetype{
- Double precision.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{GrismMap}{GrismMap}
- }{
- All GrismMaps have this attribute.
- }
- }
-}
-\sstroutine{
- GrismG\sstlabel{GrismG}
-}{
- The grating ruling density
-}{
- \sstdescription{
- This attribute holds the number of grating rulings per unit length.
- The unit of length used should be consistent with the units used
- for attributes \htmlref{GrismWaveR}{GrismWaveR} and \htmlref{GrismNRP}{GrismNRP}. The default value is 0.0.
- (the appropriate value for a pure prism disperser with no grating).
- }
- \sstattributetype{
- Double precision.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{GrismMap}{GrismMap}
- }{
- All GrismMaps have this attribute.
- }
- }
-}
-\sstroutine{
- GrismM\sstlabel{GrismM}
-}{
- The interference order
-}{
- \sstdescription{
- This attribute holds the interference order being considered.
- The default value is 0.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{GrismMap}{GrismMap}
- }{
- All GrismMaps have this attribute.
- }
- }
-}
-\sstroutine{
- GrismNR\sstlabel{GrismNR}
-}{
- The refractive index at the reference wavelength
-}{
- \sstdescription{
- This attribute holds refractive index of the grism material at the
- reference wavelength (given by attribute \htmlref{GrismWaveR}{GrismWaveR}). The default
- value is 1.0.
- }
- \sstattributetype{
- Double precision.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{GrismMap}{GrismMap}
- }{
- All GrismMaps have this attribute.
- }
- }
-}
-\sstroutine{
- GrismNRP\sstlabel{GrismNRP}
-}{
- The rate of change of refractive index with wavelength
-}{
- \sstdescription{
- This attribute holds the rate of change of the refractive index of the
- grism material with respect to wavelength at the reference wavelength
- (given by attribute \htmlref{GrismWaveR}{GrismWaveR}). The default value is 0.0 (the
- appropriate value for a pure grating disperser with no prism). The
- units of this attribute should be consistent with those of attributes
- GrismWaveR and \htmlref{GrismG}{GrismG}.
- }
- \sstattributetype{
- Double precision.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{GrismMap}{GrismMap}
- }{
- All GrismMaps have this attribute.
- }
- }
-}
-\sstroutine{
- GrismTheta\sstlabel{GrismTheta}
-}{
- Angle between normal to detector plane and reference ray
-}{
- \sstdescription{
- This attribute gives the angle of incidence of light of the
- reference wavelength (given by attribute \htmlref{GrismWaveR}{GrismWaveR}) onto the
- detector. Specifically, it holds the angle (in radians) between
- the normal to the detector plane and an incident ray at the reference
- wavelength. The default value is 0.0.
- }
- \sstattributetype{
- Double precision.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{GrismMap}{GrismMap}
- }{
- All GrismMaps have this attribute.
- }
- }
-}
-\sstroutine{
- GrismWaveR\sstlabel{GrismWaveR}
-}{
- The reference wavelength
-}{
- \sstdescription{
- This attribute holds reference wavelength. The default value is
- 5000 (Angstrom). The units of this attribute should be consistent with
- those of attributes \htmlref{GrismNRP}{GrismNRP} and \htmlref{GrismG}{GrismG}.
- }
- \sstattributetype{
- Double precision.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{GrismMap}{GrismMap}
- }{
- All GrismMaps have this attribute.
- }
- }
-}
-\sstroutine{
- ID\sstlabel{ID}
-}{
- Object identification string
-}{
- \sstdescription{
- This attribute contains a string which may be used to identify
- the \htmlref{Object}{Object} to which it is attached. There is no restriction on
- the contents of this string, which is not used internally by the
- AST library, and is simply returned without change when
- required. The default value is an empty string.
-
- An identification string can be valuable when, for example,
- several Objects have been stored in a file (using \htmlref{AST\_WRITE}{AST_WRITE}) and
- are later retrieved (using \htmlref{AST\_READ}{AST_READ}). Consistent use of the ID
- attribute allows the retrieved Objects to be identified without
- depending simply on the order in which they were stored.
-
- This attribute may also be useful during debugging, to
- distinguish similar Objects when using \htmlref{AST\_SHOW}{AST_SHOW} to display them.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- All Objects have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Unlike most other attributes, the value of the ID attribute is
- not transferred when an Object is copied. Instead, its value is
- undefined (and therefore defaults to an empty string) in any
- copy. However, it is retained in any external representation of
- an Object produced by the AST\_WRITE routine.
- }
- }
-}
-\sstroutine{
- IF\sstlabel{IF}
-}{
- The intermediate frequency in a dual sideband spectrum
-}{
- \sstdescription{
- This attribute specifies the (topocentric) intermediate frequency in
- a dual sideband spectrum. Its sole use is to determine the local
- oscillator (LO) frequency (the frequency which marks the boundary
- between the lower and upper sidebands). The LO frequency is
- equal to the sum of the centre frequency and the intermediate
- frequency. Here, the {\tt{"}}centre frequency{\tt{"}} is the topocentric
- frequency in Hz corresponding to the current value of the \htmlref{DSBCentre}{DSBCentre}
- attribute. The value of the IF attribute may be positive or
- negative: a positive value results in the LO frequency being above
- the central frequency, whilst a negative IF value results in the LO
- frequency being below the central frequency. The sign of the IF
- attribute value determines the default value for the \htmlref{SideBand}{SideBand}
- attribute.
-
- When setting a new value for this attribute, the units in which the
- frequency value is supplied may be indicated by appending a suitable
- string to the end of the formatted value. If the units are not
- specified, then the supplied value is assumed to be in units of GHz.
- For instance, the following strings all result in an IF of 4 GHz being
- used: {\tt{"}}4.0{\tt{"}}, {\tt{"}}4.0 GHz{\tt{"}}, {\tt{"}}4.0E9 Hz{\tt{"}}, etc.
-
- When getting the value of this attribute, the returned value is
- always in units of GHz. The default value for this attribute is 4 GHz.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{DSBSpecFrame}{DSBSpecFrame}
- }{
- All DSBSpecFrames have this attribute.
- }
- }
-}
-\sstroutine{
- Ident\sstlabel{Ident}
-}{
- Permanent Object identification string
-}{
- \sstdescription{
- This attribute is like the \htmlref{ID}{ID} attribute, in that it contains a
- string which may be used to identify the \htmlref{Object}{Object} to which it is
- attached. The only difference between ID and Ident is that Ident
- is transferred when an Object is copied, but ID is not.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- All Objects have this attribute.
- }
- }
-}
-\sstroutine{
- ImagFreq\sstlabel{ImagFreq}
-}{
- The image sideband equivalent of the rest frequency
-}{
- \sstdescription{
- This is a read-only attribute giving the frequency which
- corresponds to the rest frequency but is in the opposite sideband.
-
- The value is calculated by first transforming the rest frequency
- (given by the \htmlref{RestFreq}{RestFreq} attribute) from the standard of rest of the
- source (given by the \htmlref{SourceVel}{SourceVel} and \htmlref{SourceVRF}{SourceVRF} attributes) to the
- standard of rest of the observer (i.e. the topocentric standard of
- rest). The resulting topocentric frequency is assumed to be in the
- same sideband as the value given for the \htmlref{DSBCentre}{DSBCentre} attribute (the
- {\tt{"}}observed{\tt{"}} sideband), and is transformed to the other sideband (the
- {\tt{"}}image{\tt{"}} sideband). The new frequency is converted back to the standard
- of rest of the source, and the resulting value is returned as the
- attribute value, in units of GHz.
- }
- \sstattributetype{
- Floating point, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{DSBSpecFrame}{DSBSpecFrame}
- }{
- All DSBSpecFrames have this attribute.
- }
- }
-}
-\sstroutine{
- IntraFlag\sstlabel{IntraFlag}
-}{
- IntraMap identification string
-}{
- \sstdescription{
- This attribute allows an \htmlref{IntraMap}{IntraMap} to be flagged so that it is
- distinguishable from other IntraMaps. The transformation routine
- associated with the IntraMap may then enquire the value of this
- attribute and adapt the transformation it provides according to the
- particular IntraMap involved.
-
- Although this is a string attribute, it may often be useful to store
- numerical values here, encoded as a character string, and to use these
- as data within the transformation routine. Note, however, that this
- mechanism is not suitable for transferring large amounts of data (more
- than about 1000 characters) to an IntraMap. For that purpose, global
- variables are recommended, although the IntraFlag value can be used to
- supplement this approach. The default IntraFlag value is an empty
- string.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- IntraMap
- }{
- All IntraMaps have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A pair of IntraMaps whose transformations may potentially cancel
- cannot be simplified to produce a \htmlref{UnitMap}{UnitMap} (e.g. using \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY})
- unless they have the same IntraFlag values. The test for equality is
- case-sensitive.
- }
- }
-}
-\sstroutine{
- Invert\sstlabel{Invert}
-}{
- Mapping inversion flag
-}{
- \sstdescription{
- This attribute controls which one of a \htmlref{Mapping}{Mapping}'s two possible
- coordinate transformations is considered the {\tt{"}}forward{\tt{"}}
- transformation (the other being the {\tt{"}}inverse{\tt{"}}
- transformation). If the attribute value is zero (the default),
- the Mapping's behaviour will be the same as when it was first
- created. However, if it is non-zero, its two transformations
- will be inter-changed, so that the Mapping displays the inverse
- of its original behaviour.
-
- Inverting the boolean sense of the Invert attribute will cause
- the values of a Mapping's \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes to be
- interchanged. The values of its \htmlref{TranForward}{TranForward} and \htmlref{TranInverse}{TranInverse}
- attributes will also be interchanged. This operation may be
- performed with the \htmlref{AST\_INVERT}{AST_INVERT} routine.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Mapping
- }{
- All Mappings have this attribute.
- }
- \sstsubsection{
- \htmlref{UnitMap}{UnitMap}
- }{
- The value of the Invert attribute has no effect on the
- behaviour of a UnitMap.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- Inverting the boolean sense of the Invert attribute for a
- FrameSet will cause its base and current Frames (and its \htmlref{Base}{Base}
- and \htmlref{Current}{Current} attributes) to be interchanged. This, in turn,
- may affect other properties and attributes of the FrameSet
- (such as Nin, Nout, \htmlref{Naxes}{Naxes}, TranForward, TranInverse,
- etc.). The Invert attribute of a FrameSet is not itself
- affected by selecting a new base or current \htmlref{Frame}{Frame}.
- }
- }
-}
-\sstroutine{
- Invisible\sstlabel{Invisible}
-}{
- Draw graphics using invisible ink?
-}{
- \sstdescription{
- This attribute controls the appearance of all graphics produced by
- \htmlref{Plot}{Plot} methods by determining whether graphics should be visible or
- invisible.
-
- If the Invisible value of a Plot is non-zero, then all the Plot
- methods which normally generate graphical output do not do so (you
- can think of them drawing with {\tt{"}}invisible ink{\tt{"}}). Such methods do,
- however, continue to do all the calculations which would be needed to
- produce the graphics. In particular, the bounding box enclosing the
- graphics is still calculated and can be retrieved as normal using
- \htmlref{AST\_BOUNDINGBOX}{AST_BOUNDINGBOX}. The default value is zero, resulting in all methods
- drawing graphics as normal, using visible ink.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
-}
-\sstroutine{
- IsLinear\sstlabel{IsLinear}
-}{
- Is the Mapping linear?
-}{
- \sstdescription{
- This attribute indicates whether a \htmlref{Mapping}{Mapping} is an instance of a
- class that always represents a linear transformation. Note, some
- Mapping classes can represent linear or non-linear transformations
- (the \htmlref{MathMap}{MathMap} class for instance). Such classes have a zero value for
- the IsLinear attribute. Specific instances of such classes can be
- tested for linearity using the
- astLinearApprox function.
- \htmlref{AST\_LINEARAPPROX}{AST_LINEARAPPROX} routine.
- }
- \sstattributetype{
- Integer (boolean), read-only.
- }
- \sstapplicability{
- \sstsubsection{
- Mapping
- }{
- All Mappings have this attribute.
- }
- \sstsubsection{
- \htmlref{CmpMap}{CmpMap}
- }{
- The IsLinear value for a CmpMap is determined by the classes
- of the encapsulated Mappings. For instance, a CmpMap that combines
- a \htmlref{ZoomMap}{ZoomMap} and a \htmlref{ShiftMap}{ShiftMap} will have a non-zero value for its IsLinear
- attribute, but a CmpMap that contains a MathMap will have a
- value of zero for its IsLinear attribute.
- }
- \sstsubsection{
- \htmlref{Frame}{Frame}
- }{
- The IsLinear value for a Frame is 1 (since a Frame is equivalent
- to a \htmlref{UnitMap}{UnitMap}).
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The IsLinear value for a FrameSet is obtained from the Mapping
- from the base Frame to the current Frame.
- }
- }
-}
-\sstroutine{
- IsSimple\sstlabel{IsSimple}
-}{
- Has the Mapping been simplified?
-}{
- \sstdescription{
- This attribute indicates whether a \htmlref{Mapping}{Mapping} has been simplified
- by the
- \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}
- method. If the IsSimple value is non-zero, then the Mapping has
- been simplified and so there is nothing to be gained by simplifying
- it again. Indeed, the
- AST\_SIMPLIFY
- method will immediately return the Mapping unchanged if the IsSimple
- attribute indicates that the Mapping has already been simplified.
- }
- \sstattributetype{
- Integer (boolean), read-only.
- }
- \sstapplicability{
- \sstsubsection{
- Mapping
- }{
- All Mappings have this attribute.
- }
- \sstsubsection{
- \htmlref{Frame}{Frame}
- }{
- All classes of Frame return zero for the IsSimple attribute.
- This is because changes can be made to a Frame which affect the
- Mapping represented by the Frame, and so there can be no
- guarantee that the Mapping may not need re-simplifying. Most
- non-Frame Mappings, on the other hand, are immutable and so when
- they are simplified it is certain that they weill remain in a
- simple state.
- }
- }
-}
-\sstroutine{
- Iwc\sstlabel{Iwc}
-}{
- Include a Frame representing FITS-WCS intermediate world coordinates?
-}{
- \sstdescription{
- This attribute is a boolean value which is used when a \htmlref{FrameSet}{FrameSet} is
- read from a \htmlref{FitsChan}{FitsChan} with a foreign FITS encoding (e.g. FITS-WCS) using
- \htmlref{AST\_READ}{AST_READ}.
- If it has a non-zero value then the returned FrameSet will include
- Frames representing {\tt{"}}intermediate world coordinates{\tt{"}} (IWC). These
- Frames will have \htmlref{Domain}{Domain} name {\tt{"}}IWC{\tt{"}} for primary axis descriptions, and
- {\tt{"}}IWCa{\tt{"}} for secondary axis descriptions, where {\tt{"}}a{\tt{"}} is replaced by
- the single alternate axis description character, as used in the
- FITS-WCS header. The default value for {\tt{"}}Iwc{\tt{"}} is zero.
-
- FITS-WCS paper 1 defines IWC as a Cartesian coordinate system with one
- axis for each WCS axis, and is the coordinate system produced by the
- rotation matrix (represented by FITS keyword PCi\_j, CDi\_j, etc).
- For instance, for a 2-D FITS-WCS header describing projected
- celestial longitude and latitude, the intermediate world
- coordinates represent offsets in degrees from the reference point
- within the plane of projection.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- FitsChan
- }{
- All FitsChans have this attribute.
- }
- }
-}
-\sstroutine{
- KeyError\sstlabel{KeyError}
-}{
- Report an error when getting the value of a non-existant KeyMap entry?
-}{
- \sstdescription{
- This attribute is a boolean value which controls how the
- AST\_MAPGET...
- functions behave if the requested key is not found in the \htmlref{KeyMap}{KeyMap}.
- If KeyError is zero (the default), then these functions will return
- .FALSE.
- but no error will be reported. If KeyError is non-zero, then the
- same values are returned but an error is also reported.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- KeyMap
- }{
- All KeyMaps have this attribute.
- }
- }
-}
-\sstroutine{
- LTOffset\sstlabel{LTOffset}
-}{
- The offset from UTC to Local Time, in hours
-}{
- \sstdescription{
- This specifies the offset from UTC to Local Time, in hours (fractional
- hours can be supplied). It is positive for time zones east of Greenwich.
- AST uses the figure as given, without making any attempt to correct for
- daylight saving. The default value is zero.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{TimeFrame}{TimeFrame}
- }{
- All TimeFrames have this attribute.
- }
- }
-}
-\sstroutine{
- Label(axis)\sstlabel{Labelaxis}
-}{
- Axis label
-}{
- \sstdescription{
- This attribute specifies a label to be attached to each axis of
- a \htmlref{Frame}{Frame} when it is represented (e.g.) in graphical output.
-
- If a Label value has not been set for a Frame axis, then a
- suitable default is supplied.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The default supplied by the Frame class is the string {\tt{"}}\htmlref{Axis}{Axis}
- $<$n$>${\tt{"}}, where $<$n$>$ is 1, 2, etc. for each successive axis.
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- The SkyFrame class re-defines the default Label value
- (e.g. to {\tt{"}}Right ascension{\tt{"}} or {\tt{"}}Galactic latitude{\tt{"}}) as
- appropriate for the particular celestial coordinate system
- being represented.
- }
- \sstsubsection{
- \htmlref{TimeFrame}{TimeFrame}
- }{
- The TimeFrame class re-defines the default Label value as
- appropriate for the particular time system being represented.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Label attribute of a FrameSet axis is the same as that of
- its current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Axis labels are intended purely for interpretation by human
- readers and not by software.
-
- \sstitem
- When specifying this attribute by name, it should be
- subscripted with the number of the Frame axis to which it
- applies.
- }
- }
-}
-\sstroutine{
- LabelAt(axis)\sstlabel{LabelAtaxis}
-}{
- Where to place numerical labels for a Plot
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
- where numerical axis labels and associated tick marks are
- placed. It takes a separate value for each physical axis of a
- \htmlref{Plot}{Plot} so that, for instance, the setting {\tt{"}}LabelAt(2)=10.0{\tt{"}}
- specifies where the numerical labels and tick marks for the
- second axis should be drawn.
-
- For each axis, the LabelAt value gives the value on the other
- axis at which numerical labels and tick marks should be placed
- (remember that Plots suitable for use with AST\_GRID may only
- have two axes). For example, in a celestial (RA,Dec) coordinate
- system, LabelAt(1) gives a Dec value which defines a line (of
- constant Dec) along which the numerical RA labels and their
- associated tick marks will be drawn. Similarly, LabelAt(2) gives
- the RA value at which the Dec labels and ticks will be drawn.
-
- The default bahaviour is for the Plot to generate its own
- position for numerical labels and tick marks.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The LabelAt value should use the same units as are used
- internally for storing coordinate values on the appropriate
- axis. For example, with a celestial coordinate system, the
- LabelAt value should be in radians, not hours or degrees.
-
- \sstitem
- Normally, the LabelAt value also determines where the lines
- representing coordinate axes will be drawn, so that the tick
- marks will lie on these lines (but also see the DrawAxes
- attribute).
-
- \sstitem
- In some circumstances, numerical labels and tick marks are
- drawn around the edges of the plotting area (see the \htmlref{Labelling}{Labelling}
- attribute). In this case, the value of the LabelAt attribute is
- ignored.
- }
- }
-}
-\sstroutine{
- LabelUnits(axis)\sstlabel{LabelUnitsaxis}
-}{
- Use axis unit descriptions in a Plot?
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
- whether the descriptive labels drawn for each axis of a \htmlref{Plot}{Plot}
- should include a description of the units being used on the
- axis. It takes a separate value for each physical axis of a
- Plot so that, for instance, the setting {\tt{"}}LabelUnits(2)=1{\tt{"}}
- specifies that a unit description should be included in the
- label for the second axis.
-
- If the LabelUnits value of a Plot axis is non-zero, a unit
- description will be included in the descriptive label for that
- axis, otherwise it will be omitted. The default behaviour is to
- include a unit description unless the current \htmlref{Frame}{Frame} of the Plot
- is a \htmlref{SkyFrame}{SkyFrame} representing equatorial, ecliptic, galactic or
- supergalactic coordinates, in which case it is omitted.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The text used for the unit description is obtained from the
- Plot's \htmlref{Unit(axis)}{Unitaxis} attribute.
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}LabelUnits{\tt{"}} instead of
- {\tt{"}}LabelUnits(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
- the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
- {\tt{"}}test{\tt{"}} operation will use just the LabelUnits(1) value.
-
- \sstitem
- If the current Frame of the Plot is not a SkyFrame, but includes
- axes which were extracted from a SkyFrame, then the default behaviour
- is to include a unit description only for those axes which were not
- extracted from a SkyFrame.
- }
- }
-}
-\sstroutine{
- LabelUp(axis)\sstlabel{LabelUpaxis}
-}{
- Draw numerical Plot labels upright?
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
- whether the numerical labels for each axis of a \htmlref{Plot}{Plot} should be
- drawn upright or not. It takes a separate value for each
- physical axis of a Plot so that, for instance, the setting
- {\tt{"}}LabelUp(2)=1{\tt{"}} specifies that numerical labels for the second
- axis should be drawn upright.
-
- If the LabelUp value of a Plot axis is non-zero, it causes
- numerical labels for that axis to be plotted upright (i.e. as
- normal, horizontal text), otherwise labels are drawn parallel to
- the axis to which they apply.
-
- The default is to produce upright labels if the labels are placed
- around the edge of the plot, and to produce labels that follow the
- axes if the labels are placed within the interior of the plot (see
- attribute \htmlref{Labelling}{Labelling}).
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- In some circumstances, numerical labels and tick marks are
- drawn around the edges of the plotting area (see the Labelling
- attribute). In this case, the value of the LabelUp attribute is
- ignored.
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}LabelUp{\tt{"}} instead of
- {\tt{"}}LabelUp(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the
- attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
- operation will use just the LabelUp(1) value.
- }
- }
-}
-\sstroutine{
- Labelling\sstlabel{Labelling}
-}{
- Label and tick placement option for a Plot
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
- the strategy for placing numerical labels and tick marks for a \htmlref{Plot}{Plot}.
-
- If the Labelling value of a Plot is {\tt{"}}exterior{\tt{"}} (the default), then
- numerical labels and their associated tick marks are placed
- around the edges of the plotting area, if possible. If this is
- not possible, or if the Labelling value is {\tt{"}}interior{\tt{"}}, then they
- are placed along grid lines inside the plotting area.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The \htmlref{LabelAt(axis)}{LabelAtaxis} attribute may be used to determine the exact
- placement of labels and tick marks that are drawn inside the
- plotting area.
- }
- }
-}
-\sstroutine{
- LatAxis\sstlabel{LatAxis}
-}{
- Index of the latitude axis
-}{
- \sstdescription{
- This read-only attribute gives the index (1 or 2) of the latitude
- axis within the \htmlref{SkyFrame}{SkyFrame} (taking into account any current axis
- permutations).
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- SkyFrame
- }{
- All SkyFrames have this attribute.
- }
- }
-}
-\sstroutine{
- ListSize\sstlabel{ListSize}
-}{
- Number of points in a PointList
-}{
- \sstdescription{
- This is a read-only attribute giving the number of points in a
- \htmlref{PointList}{PointList}. This value is determined when the PointList is created.
- }
- \sstattributetype{
- Integer, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- PointList
- }{
- All PointLists have this attribute.
- }
- }
-}
-\sstroutine{
- LogGap(axis)\sstlabel{LogGapaxis}
-}{
- Interval between major axis values of a Plot
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
- the logarithmic interval between the {\tt{"}}major{\tt{"}} axis values of a \htmlref{Plot}{Plot}, at
- which (for example) major tick marks are drawn. It takes a separate
- value for each physical axis of the Plot so that, for instance,
- the setting {\tt{"}}LogGap(2)=100.0{\tt{"}} specifies the ratio between adjacent major
- values along the second axis. The LogGap attribute is only used when
- the LogTicks attribute indicates that the spacing between major axis
- values is to be logarithmic. If major axis values are linearly spaced
- then the gap is specified using attribute Gap.
-
- The LogGap value supplied will be rounded to the nearest power of 10.
- The reciprocal of the supplied value may be used if this is necessary
- to produce usable major axis values. If a zero or negative value is
- supplied, an error will be reported when the grid is drawn. The default
- behaviour is for the Plot to generate its own LogGap value when
- required, based on the range of axis values to be represented.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The LogGap value is a ratio between axis values and is therefore
- dimensionless.
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}LogGap{\tt{"}} instead of {\tt{"}}LogGap(2){\tt{"}}),
- then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the attribute
- value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}} operation
- will use just the LogGap(1) value.
- }
- }
-}
-\sstroutine{
- LogLabel(axis)\sstlabel{LogLabelaxis}
-}{
- Use exponential format for numerical axis labels?
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
- whether the numerical axis labels should be in normal decimal form
- or should be represented as 10 raised to the appropriate power.
- That is, an axis value of 1000.0 will be drawn as {\tt{"}}1000.0{\tt{"}} if
- LogLabel is zero, but as {\tt{"}}10$\wedge$3{\tt{"}} if LogLabel is non-zero. If
- graphical escape sequences are supported (see attribute \htmlref{Escape}{Escape}),
- the power in such exponential labels will be drawn as a small
- superscript instead of using a {\tt{"}}$\wedge${\tt{"}} character to represent
- exponentiation.
-
- The default is to produce exponential labels if the major tick
- marks are logarithmically spaced (see the LogTicks attribute).
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{Plot}{Plot}
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}LogLabel{\tt{"}} instead of
- {\tt{"}}LogLabel(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the
- attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
- operation will use just the LogLabel(1) value.
- }
- }
-}
-\sstroutine{
- LogPlot(axis)\sstlabel{LogPlotaxis}
-}{
- Map the plot logarithmically onto the screen?
-}{
- \sstdescription{
- This attribute controls the appearance of all graphics produced by
- the \htmlref{Plot}{Plot}, by determining whether the axes of the plotting surface
- are mapped logarithmically or linearly onto the base \htmlref{Frame}{Frame} of the
- \htmlref{FrameSet}{FrameSet} supplied when the Plot was constructed. It takes a separate
- value for each axis of the graphics coordinate system (i.e. the
- base Frame in the Plot) so that, for instance, the setting
- {\tt{"}}LogPlot(2)=1{\tt{"}} specifies that the second axis of the graphics
- coordinate system (usually the vertical axis) should be mapped
- logarithmically onto the second axis of the base Frame of the
- FrameSet supplied when the Plot was constructed.
-
- If the LogPlot value of a Plot axis is non-zero, it causes that
- axis to be mapped logarithmically, otherwise (the default) the axis
- is mapped linearly.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The setting of the LogPlot attribute provides the default value
- for the related LogTicks attribute. By selecting suitable values for
- LogPlot and LogTicks, it is possible to have tick marks which are evenly
- spaced in value but which are mapped logarithmically onto the screen
- (and vice-versa).
-
- \sstitem
- An axis may only be mapped logarithmically if the visible part of
- the axis does not include the value zero. The visible part of the
- axis is that part which is mapped onto the plotting area, and is
- measured within the base Frame of the FrameSet which was supplied when
- the Plot was constructed. Any attempt to set LogPlot to a non-zero value
- will be ignored (without error) if the visible part of the axis
- includes the value zero
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}LogPlot{\tt{"}} instead of
- {\tt{"}}LogPlot(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the
- attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
- operation will use just the LogPlot(1) value.
- }
- }
-}
-\sstroutine{
- LogTicks(axis)\sstlabel{LogTicksaxis}
-}{
- Space the major tick marks logarithmically?
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
- whether the major tick marks should be spaced logarithmically or
- linearly in axis value. It takes a separate value for each physical
- axis of the \htmlref{Plot}{Plot} so that, for instance, the setting {\tt{"}}LogTicks(2)=1{\tt{"}}
- specifies that the major tick marks on the second axis should be
- spaced logarithmically.
-
- If the LogTicks value for a physical axis is non-zero, the major
- tick marks on that axis will be spaced logarithmically (that is,
- there will be a constant ratio between the axis values at adjacent
- major tick marks). An error will be reported if the dynamic range of
- the axis (the ratio of the largest to smallest displayed axis value)
- is less than 10.0. If the LogTicks value is zero, the major tick marks
- will be evenly spaced (that is, there will be a constant difference
- between the axis values at adjacent major tick marks). The default is
- to produce logarithmically spaced tick marks if the corresponding
- LogPlot attribute is non-zero and the ratio of maximum axis value
- to minimum axis value is 100 or more. If either of these conditions
- is not met, the default is to produce linearly spaced tick marks.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The setting of the LogTicks attribute does not affect the mapping
- of the plot onto the screen, which is controlled by attribute LogPlot.
- By selecting suitable values for LogPlot and LogTicks, it is possible to
- have tick marks which are evenly spaced in value but which are mapped
- logarithmically onto the screen (and vica-versa).
-
- \sstitem
- An error will be reported when drawing an annotated axis grid if
- the visible part of the physical axis includes the value zero.
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}LogTicks{\tt{"}} instead of
- {\tt{"}}LogTicks(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the
- attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
- operation will use just the LogTicks(1) value.
- }
- }
-}
-\sstroutine{
- LonAxis\sstlabel{LonAxis}
-}{
- Index of the longitude axis
-}{
- \sstdescription{
- This read-only attribute gives the index (1 or 2) of the longitude
- axis within the \htmlref{SkyFrame}{SkyFrame} (taking into account any current axis
- permutations).
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- SkyFrame
- }{
- All SkyFrames have this attribute.
- }
- }
-}
-\sstroutine{
- LutInterp\sstlabel{LutInterp}
-}{
- Look-up table interpolation method
-}{
- \sstdescription{
- This attribute indicates the method to be used when finding the
- output value of a \htmlref{LutMap}{LutMap} for an input value part way between two
- table entries. If it is set to 0 (the default) then linear
- interpolation is used. Otherwise, nearest neighbour interpolation
- is used.
-
- Using nearest neighbour interpolation causes AST\_\_BAD to be returned
- for any point which falls outside the bounds of the table. Linear
- interpolation results in an extrapolated value being returned based
- on the two end entries in the table.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- LutMap
- }{
- All LutMaps have this attribute.
- }
- }
-}
-\sstroutine{
- MajTickLen(axis)\sstlabel{MajTickLenaxis}
-}{
- Length of major tick marks for a Plot
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
- the length of the major tick marks drawn on the axes of a \htmlref{Plot}{Plot}.
- It takes a separate value for each physical axis of the Plot so
- that, for instance, the setting {\tt{"}}MajTickLen(2)=0{\tt{"}} specifies the
- length of the major tick marks drawn on the second axis.
-
- The MajTickLen value should be given as a fraction of the
- minimum dimension of the plotting area. Negative values cause
- major tick marks to be placed on the outside of the
- corresponding grid line or axis (but subject to any clipping
- imposed by the underlying graphics system), while positive
- values cause them to be placed on the inside.
-
- The default behaviour depends on whether a coordinate grid is
- drawn inside the plotting area (see the \htmlref{Grid}{Grid} attribute). If so,
- the default MajTickLen value is zero (so that major ticks are
- not drawn), otherwise the default is $+$0.015.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}MajTickLen{\tt{"}} instead of
- {\tt{"}}MajTickLen(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
- the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
- operation will use just the MajTickLen(1) value.
- }
- }
-}
-\sstroutine{
- MatchEnd\sstlabel{MatchEnd}
-}{
- Match trailing axes?
-}{
- \sstdescription{
- This attribute is a boolean value which controls how a \htmlref{Frame}{Frame}
- behaves when it is used (by \htmlref{AST\_FINDFRAME}{AST_FINDFRAME}) as a template to match
- another (target) Frame. It applies only in the case where a
- match occurs between template and target Frames with different
- numbers of axes.
-
- If the MatchEnd value of the template Frame is zero, then the
- axes which occur first in the target Frame will be matched and
- any trailing axes (in either the target or template) will be
- disregarded. If it is non-zero, the final axes in each Frame
- will be matched and any un-matched leading axes will be
- disregarded instead.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The default MatchEnd value for a Frame is zero, so that
- trailing axes are disregarded.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The MatchEnd attribute of a FrameSet is the same as that of
- its current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- }
-}
-\sstroutine{
- MaxAxes\sstlabel{MaxAxes}
-}{
- Maximum number of Frame axes to match
-}{
- \sstdescription{
- This attribute controls how a \htmlref{Frame}{Frame} behaves when it is used (by
- \htmlref{AST\_FINDFRAME}{AST_FINDFRAME}) as a template to match another (target) Frame. It
- specifies the maximum number of axes that the target Frame may
- have in order to match the template.
-
- Normally, this value will equal the number of Frame axes, so
- that a template Frame will only match another Frame with the
- same number of axes as itself. By setting a different value,
- however, the matching process may be used to identify Frames
- with specified numbers of axes.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The default MaxAxes value for a Frame is equal to the number
- of Frame axes (\htmlref{Naxes}{Naxes} attribute).
- }
- \sstsubsection{
- \htmlref{CmpFrame}{CmpFrame}
- }{
- The MaxAxes attribute of a CmpFrame defaults to a large number
- (1000000) which is much larger than any likely number of axes in
- a Frame. Combined with the \htmlref{MinAxes}{MinAxes} default of zero (for a
- CmpFrame), this means that the default behaviour for a CmpFrame
- is to match any target Frame that consists of a subset of the
- axes in the template CmpFrame. To change this so that a CmpFrame
- will only match Frames that have the same number of axes, you
- should set the CmpFrame MaxAxes and MinAxes attributes to the
- number of axes in the CmpFrame.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The MaxAxes attribute of a FrameSet is the same as that of
- its current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When setting a MaxAxes value, the value of the MinAxes
- attribute may also be silently changed so that it remains
- consistent with (i.e. does not exceed) the new value. The
- default MaxAxes value may also be reduced to remain consistent
- with the MinAxes value.
-
- \sstitem
- If a template Frame is used to match a target with a different
- number of axes, the \htmlref{MatchEnd}{MatchEnd} attribute of the template is used
- to determine how the individual axes of each Frame should match.
- }
- }
-}
-\sstroutine{
- MeshSize\sstlabel{MeshSize}
-}{
- Number of points used to represent the boundary of a Region
-}{
- \sstdescription{
- This attribute controls how many points are used when creating a
- mesh of points covering the boundary of a \htmlref{Region}{Region}. This mesh is used
- primarily when testing for overlap with a second Region: each point in
- the mesh is checked to see if it is inside or outside the second Region.
- Thus, the reliability of the overlap check depends on the value assigned
- to this attribute. If the value used is very low, it is possible for
- overlaps to go unnoticed. High values produce more reliable results, but
- can result in the overlap test being very slow. The default value is 200
- for two dimensional Regions and 2000 for three or more dimensional
- Regions (this attribute is not used for 1-dimensional regions since the
- boundary of a simple 1-d Region can only ever have two points). A
- value of five is used if the supplied value is less than five.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- Region
- }{
- All Regions have this attribute.
- }
- \sstsubsection{
- \htmlref{CmpRegion}{CmpRegion}
- }{
- The default MeshSize for a CmpRegion is the MeshSize of its
- first component Region.
- }
- \sstsubsection{
- \htmlref{Stc}{Stc}
- }{
- The default MeshSize for an Stc is the MeshSize of its
- encapsulated Region.
- }
- }
-}
-\sstroutine{
- MinAxes\sstlabel{MinAxes}
-}{
- Minimum number of Frame axes to match
-}{
- \sstdescription{
- This attribute controls how a \htmlref{Frame}{Frame} behaves when it is used (by
- \htmlref{AST\_FINDFRAME}{AST_FINDFRAME}) as a template to match another (target) Frame. It
- specifies the minimum number of axes that the target Frame may
- have in order to match the template.
-
- Normally, this value will equal the number of Frame axes, so
- that a template Frame will only match another Frame with the
- same number of axes as itself. By setting a different value,
- however, the matching process may be used to identify Frames
- with specified numbers of axes.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The default MinAxes value for a Frame is equal to the number
- of Frame axes (\htmlref{Naxes}{Naxes} attribute).
- }
- \sstsubsection{
- \htmlref{CmpFrame}{CmpFrame}
- }{
- The MinAxes attribute of a CmpFrame defaults to zero. Combined
- with the \htmlref{MaxAxes}{MaxAxes} default of 1000000 (for a CmpFrame), this means
- that the default behaviour for a CmpFrame is to match any target
- Frame that consists of a subset of the axes in the template
- CmpFrame. To change this so that a CmpFrame will only match Frames
- that have the same number of axes, you should set the CmpFrame
- MinAxes and MaxAxes attributes to the number of axes in the CmpFrame.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The MinAxes attribute of a FrameSet is the same as that of
- its current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When setting a MinAxes value, the value of the MaxAxes
- attribute may also be silently changed so that it remains
- consistent with (i.e. is not less than) the new value. The
- default MinAxes value may also be reduced to remain consistent
- with the MaxAxes value.
-
- \sstitem
- If a template Frame is used to match a target with a different
- number of axes, the \htmlref{MatchEnd}{MatchEnd} attribute of the template is used
- to determine how the individual axes of each Frame should match.
- }
- }
-}
-\sstroutine{
- MinTick(axis)\sstlabel{MinTickaxis}
-}{
- Density of minor tick marks for a Plot
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
- the density of minor tick marks which appear between the major
- axis values of a \htmlref{Plot}{Plot}. It takes a separate value for each
- physical axis of a Plot so that, for instance, the setting
- {\tt{"}}MinTick(2)=2{\tt{"}} specifies the density of minor tick marks along
- the second axis.
-
- The value supplied should be the number of minor divisions
- required between each pair of major axis values, this being one
- more than the number of minor tick marks to be drawn. By
- default, a value is chosen that depends on the gap between major
- axis values and the nature of the axis.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}MinTick{\tt{"}} instead of
- {\tt{"}}MinTick(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
- the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
- {\tt{"}}test{\tt{"}} operation will use just the MinTick(1) value.
- }
- }
-}
-\sstroutine{
- MinTickLen(axis)\sstlabel{MinTickLenaxis}
-}{
- Length of minor tick marks for a Plot
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
- the length of the minor tick marks drawn on the axes of a \htmlref{Plot}{Plot}.
- It takes a separate value for each physical axis of the Plot so
- that, for instance, the setting {\tt{"}}MinTickLen(2)=0{\tt{"}} specifies the
- length of the minor tick marks drawn on the second axis.
-
- The MinTickLen value should be given as a fraction of the
- minimum dimension of the plotting area. Negative values cause
- minor tick marks to be placed on the outside of the
- corresponding grid line or axis (but subject to any clipping
- imposed by the underlying graphics system), while positive
- values cause them to be placed on the inside.
-
- The default value is $+$0.007.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The number of minor tick marks drawn is determined by the
- Plot's \htmlref{MinTick(axis)}{MinTickaxis} attribute.
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}MinTickLen{\tt{"}} instead of
- {\tt{"}}MinTickLen(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
- the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
- operation will use just the MinTickLen(1) value.
- }
- }
-}
-\sstroutine{
- NatLat\sstlabel{NatLat}
-}{
- Native latitude of the reference point of a FITS-WCS projection
-}{
- \sstdescription{
- This attribute gives the latitude of the reference point of the
- FITS-WCS projection implemented by a \htmlref{WcsMap}{WcsMap}. The value is in
- radians in the {\tt{"}}native spherical{\tt{"}} coordinate system. This value is
- fixed for most projections, for instance it is PI/2 (90 degrees)
- for all zenithal projections. For some projections (e.g. the conics)
- the value is not fixed, but is specified by parameter one on the
- latitude axis.
-
- FITS-WCS paper II introduces the concept of a {\tt{"}}fiducial point{\tt{"}}
- which is logical distinct from the projection reference point.
- It is easy to confuse the use of these two points. The fiducial
- point is the point which has celestial coordinates given by the
- CRVAL FITS keywords. The native spherical coordinates for this point
- default to the values of the NatLat and \htmlref{NatLon}{NatLon}, but these defaults
- mey be over-ridden by values stored in the PVi\_j keywords. Put
- another way, the CRVAL keywords will by default give the celestial
- coordinates of the projection reference point, but may refer to
- some other point if alternative native longitude and latitude values
- are provided through the PVi\_j keywords.
-
- The NatLat attribute is read-only.
- }
- \sstattributetype{
- Floating point, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- WcsMap
- }{
- All WcsMaps have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A default value of AST\_\_BAD is used if no latitude value is available.
- }
- }
-}
-\sstroutine{
- NatLon\sstlabel{NatLon}
-}{
- Native longitude of the reference point of a FITS-WCS projection
-}{
- \sstdescription{
- This attribute gives the longitude of the reference point of the
- FITS-WCS projection implemented by a \htmlref{WcsMap}{WcsMap}. The value is in
- radians in the {\tt{"}}native spherical{\tt{"}} coordinate system, and will
- usually be zero. See the description of attribute \htmlref{NatLat}{NatLat} for further
- information.
-
- The NatLon attribute is read-only.
- }
- \sstattributetype{
- Floating point, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- WcsMap
- }{
- All WcsMaps have this attribute.
- }
- }
-}
-\sstroutine{
- Naxes\sstlabel{Naxes}
-}{
- Number of Frame axes
-}{
- \sstdescription{
- This is a read-only attribute giving the number of axes in a
- \htmlref{Frame}{Frame} (i.e. the number of dimensions of the coordinate space
- which the Frame describes). This value is determined when the
- Frame is created.
- }
- \sstattributetype{
- Integer, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- All Frames have this attribute.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Naxes attribute of a FrameSet is the same as that of its
- current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- \sstsubsection{
- \htmlref{CmpFrame}{CmpFrame}
- }{
- The Naxes attribute of a CmpFrame is equal to the sum of the
- Naxes values of its two component Frames.
- }
- }
-}
-\sstroutine{
- Ncard\sstlabel{Ncard}
-}{
- Number of FITS header cards in a FitsChan
-}{
- \sstdescription{
- This attribute gives the total number of FITS header cards
- stored in a \htmlref{FitsChan}{FitsChan}. It is updated as cards are added or
- deleted.
- }
- \sstattributetype{
- Integer, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- FitsChan
- }{
- All FitsChans have this attribute.
- }
- }
-}
-\sstroutine{
- NegLon\sstlabel{NegLon}
-}{
- Display negative longitude values?
-}{
- \sstdescription{
- This attribute is a boolean value which controls how longitude values
- are normalized for display by \htmlref{AST\_NORM}{AST_NORM}.
-
- If the NegLon attribute is zero, then normalized
- longitude values will be in the range zero to 2.pi. If NegLon is
- non-zero, then normalized longitude values will be in the range -pi
- to pi.
-
- The default value depends on the current value of the \htmlref{SkyRefIs}{SkyRefIs}
- attribute, If SkyRefIs has a value of {\tt{"}}Origin{\tt{"}}, then the default for
- NegLon is one, otherwise the default is zero.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- All SkyFrames have this attribute.
- }
- }
-}
-\sstroutine{
- Negated\sstlabel{Negated}
-}{
- Region negation flag
-}{
- \sstdescription{
- This attribute controls whether a \htmlref{Region}{Region} represents the {\tt{"}}inside{\tt{"}} or
- the {\tt{"}}outside{\tt{"}} of the area which was supplied when the Region was
- created. If the attribute value is zero (the default), the Region
- represents the inside of the original area. However, if it is non-zero,
- it represents the outside of the original area. The value of this
- attribute may be toggled using the
- \htmlref{AST\_NEGATE}{AST_NEGATE} routine.
-
- Note, whether the boundary is considered to be inside the Region or
- not is controlled by the \htmlref{Closed}{Closed} attribute. Changing the value of
- the Negated attribute does not change the value of the Closed attribute.
- Thus, if Region is closed, then the boundary of the Region will be
- inside the Region, whatever the setting of the Negated attribute.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Region
- }{
- All Regions have this attribute.
- }
- }
-}
-\sstroutine{
- Nframe\sstlabel{Nframe}
-}{
- Number of Frames in a FrameSet
-}{
- \sstdescription{
- This attrbute gives the number of Frames in a \htmlref{FrameSet}{FrameSet}. This
- value will change as Frames are added or removed, but will
- always be at least one.
- }
- \sstattributetype{
- Integer, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- FrameSet
- }{
- All FrameSets have this attribute.
- }
- }
-}
-\sstroutine{
- Nin\sstlabel{Nin}
-}{
- Number of input coordinates for a Mapping
-}{
- \sstdescription{
- This attribute gives the number of coordinate values required to
- specify an input point for a \htmlref{Mapping}{Mapping} (i.e. the number of
- dimensions of the space in which the Mapping's input points
- reside).
- }
- \sstattributetype{
- Integer, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- Mapping
- }{
- All Mappings have this attribute.
- }
- \sstsubsection{
- \htmlref{CmpMap}{CmpMap}
- }{
- If a CmpMap's component Mappings are joined in series, then
- its Nin attribute is equal to the Nin attribute of the first
- component (or to the \htmlref{Nout}{Nout} attribute of the second component
- if the the CmpMap's \htmlref{Invert}{Invert} attribute is non-zero).
-
- If a CmpMap's component Mappings are joined in parallel, then
- its Nin attribute is given by the sum of the Nin attributes
- of each component (or to the sum of their Nout attributes if
- the CmpMap's Invert attribute is non-zero).
- }
- \sstsubsection{
- \htmlref{Frame}{Frame}
- }{
- The Nin attribute for a Frame is always equal to the number
- of Frame axes (\htmlref{Naxes}{Naxes} attribute).
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Nin attribute of a FrameSet is equal to the number of
- axes (Naxes attribute) of its base Frame (as specified by the
- FrameSet's \htmlref{Base}{Base} attribute). The Nin attribute value may
- therefore change if a new base Frame is selected.
- }
- }
-}
-\sstroutine{
- Nobject\sstlabel{Nobject}
-}{
- Number of Objects in class
-}{
- \sstdescription{
- This attribute gives the total number of Objects currently in
- existence in the same class as the \htmlref{Object}{Object} whose attribute value
- is requested. This count does not include Objects which belong
- to derived (more specialised) classes.
-
- This attribute is mainly intended for debugging. It can be used
- to detect whether Objects which should have been deleted have,
- in fact, been deleted.
- }
- \sstattributetype{
- Integer, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- All Objects have this attribute.
- }
- }
-}
-\sstroutine{
- Norm(axis)\sstlabel{Normaxis}
-}{
- Specifies the plane upon which a Plot3D draws text and markers
-}{
- \sstdescription{
- This attribute controls the appearance of text and markers drawn
- by a \htmlref{Plot3D}{Plot3D}. It specifies the orientation of the plane upon which
- text and markers will be drawn by all subsequent invocations of the
- \htmlref{AST\_TEXT}{AST_TEXT} and \htmlref{AST\_MARK}{AST_MARK} functions.
-
- When setting or getting the Norm attribute, the attribute name must
- be qualified by an axis index in the range 1 to 3. The 3 elements of
- the Norm attribute are together interpreted as a vector in 3D graphics
- coordinates that is normal to the plane upon which text and marks
- should be drawn. When testing or clearing the attribute, the axis
- index is optional. If no index is supplied, then clearing the Norm
- attribute will clear all three elements, and testing the Norm attribute
- will return a non-zero value if any of the three elements are set.
-
- The default value is 1.0 for each of the 3 elements. The length of
- the vector is insignificant, but an error will be reported when
- attempting to draw text or markers if the vector has zero length.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{Plot}{Plot}
- }{
- All Plot3Ds have this attribute.
- }
- }
-}
-\sstroutine{
- NormUnit(axis)\sstlabel{NormUnitaxis}
-}{
- Normalised Axis physical units
-}{
- \sstdescription{
- The value of this read-only attribute is derived from the current
- value of the Unit attribute. It will represent an equivalent system
- of units to the Unit attribute, but will potentially be simplified.
- For instance, if Unit is set to {\tt{"}}s$*$(m/s){\tt{"}}, the NormUnit value will
- be {\tt{"}}m{\tt{"}}. If no simplification can be performed, the value of the
- NormUnit attribute will equal that of the Unit attribute.
- }
- \sstattributetype{
- String, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{Frame}{Frame}
- }{
- All Frames have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When specifying this attribute by name, it should be
- subscripted with the number of the Frame axis to which it
- applies.
- }
- }
-}
-\sstroutine{
- Nout\sstlabel{Nout}
-}{
- Number of output coordinates for a Mapping
-}{
- \sstdescription{
- This attribute gives the number of coordinate values generated
- by a \htmlref{Mapping}{Mapping} to specify each output point (i.e. the number of
- dimensions of the space in which the Mapping's output points
- reside).
- }
- \sstattributetype{
- Integer, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- Mapping
- }{
- All Mappings have this attribute.
- }
- \sstsubsection{
- \htmlref{CmpMap}{CmpMap}
- }{
- If a CmpMap's component Mappings are joined in series, then
- its Nout attribute is equal to the Nout attribute of the
- second component (or to the \htmlref{Nin}{Nin} attribute of the first
- component if the the CmpMap's \htmlref{Invert}{Invert} attribute is non-zero).
-
- If a CmpMap's component Mappings are joined in parallel, then
- its Nout attribute is given by the sum of the Nout attributes
- of each component (or to the sum of their Nin attributes if
- the CmpMap's Invert attribute is non-zero).
- }
- \sstsubsection{
- \htmlref{Frame}{Frame}
- }{
- The Nout attribute for a Frame is always equal to the number
- of Frame axes (\htmlref{Naxes}{Naxes} attribute).
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Nout attribute of a FrameSet is equal to the number of
- FrameSet axes (Naxes attribute) which, in turn, is equal to
- the Naxes attribute of the FrameSet's current Frame (as
- specified by the \htmlref{Current}{Current} attribute). The Nout attribute value
- may therefore change if a new current Frame is selected.
- }
- }
-}
-\sstroutine{
- NumLab(axis)\sstlabel{NumLabaxis}
-}{
- Draw numerical axis labels for a Plot?
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
- whether labels should be drawn to represent the numerical values
- along each axis of a \htmlref{Plot}{Plot}. It takes a separate value for each
- physical axis of a Plot so that, for instance, the setting
- {\tt{"}}NumLab(2)=1{\tt{"}} specifies that numerical labels should be drawn
- for the second axis.
-
- If the NumLab value of a Plot axis is non-zero (the default),
- then numerical labels will be drawn for that axis, otherwise
- they will be omitted.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The drawing of associated descriptive axis labels for a Plot
- (describing the quantity being plotted along each axis) is
- controlled by the \htmlref{TextLab(axis)}{TextLabaxis} attribute.
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}NumLab{\tt{"}} instead of
- {\tt{"}}NumLab(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the
- attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
- operation will use just the NumLab(1) value.
- }
- }
-}
-\sstroutine{
- NumLabGap(axis)\sstlabel{NumLabGapaxis}
-}{
- Spacing of numerical labels for a Plot
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
- where numerical axis labels are placed relative to the axes they
- describe. It takes a separate value for each physical axis of a
- \htmlref{Plot}{Plot} so that, for instance, the setting {\tt{"}}NumLabGap(2)=-0.01{\tt{"}}
- specifies where the numerical label for the second axis should
- be drawn.
-
- For each axis, the NumLabGap value gives the spacing between the
- axis line (or edge of the plotting area, if appropriate) and the
- nearest edge of the corresponding numerical axis
- labels. Positive values cause the descriptive label to be placed
- on the opposite side of the line to the default tick marks,
- while negative values cause it to be placed on the same side.
-
- The NumLabGap value should be given as a fraction of the minimum
- dimension of the plotting area, the default value being $+$0.01.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}NumLabGap{\tt{"}} instead of
- {\tt{"}}NumLabGap(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
- the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
- {\tt{"}}test{\tt{"}} operation will use just the NumLabGap(1) value.
- }
- }
-}
-\sstroutine{
- ObjSize\sstlabel{ObjSize}
-}{
- The in-memory size of the Object
-}{
- \sstdescription{
- This attribute gives the total number of bytes of memory used by
- the \htmlref{Object}{Object}. This includes any Objects which are encapsulated within
- the supplied Object.
- }
- \sstattributetype{
- Integer, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- All Objects have this attribute.
- }
- }
-}
-\sstroutine{
- ObsAlt\sstlabel{ObsAlt}
-}{
- The geodetic altitude of the observer
-}{
- \sstdescription{
- This attribute specifies the geodetic altitude of the observer, in
- metres, relative to the IAU 1976 reference ellipsoid. The basic \htmlref{Frame}{Frame}
- class makes no use of this attribute, but specialised subclasses of
- Frame may use it. For instance, the \htmlref{SpecFrame}{SpecFrame}, \htmlref{SkyFrame}{SkyFrame} and \htmlref{TimeFrame}{TimeFrame}
- classes use it. The default value is zero.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- All Frames have this attribute.
- }
- \sstsubsection{
- SpecFrame
- }{
- Together with the \htmlref{ObsLon}{ObsLon}, \htmlref{Epoch}{Epoch}, \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec} attributes,
- it defines the Doppler shift introduced by the observers diurnal
- motion around the earths axis, which is needed when converting to
- or from the topocentric standard of rest. The maximum velocity
- error which can be caused by an incorrect value is 0.5 km/s. The
- default value for the attribute is zero.
- }
- \sstsubsection{
- TimeFrame
- }{
- Together with the ObsLon attribute, it is used when converting
- between certain time scales (TDB, TCB, LMST, LAST)
- }
- }
-}
-\sstroutine{
- ObsLat\sstlabel{ObsLat}
-}{
- The geodetic latitude of the observer
-}{
- \sstdescription{
- This attribute specifies the geodetic latitude of the observer, in
- degrees, relative to the IAU 1976 reference ellipsoid. The basic \htmlref{Frame}{Frame}
- class makes no use of this attribute, but specialised subclasses of
- Frame may use it. For instance, the \htmlref{SpecFrame}{SpecFrame}, \htmlref{SkyFrame}{SkyFrame} and \htmlref{TimeFrame}{TimeFrame}
- classes use it. The default value is zero.
-
- The value is stored internally in radians, but is converted to and
- from a degrees string for access. Some example input formats are:
- {\tt{"}}22:19:23.2{\tt{"}}, {\tt{"}}22 19 23.2{\tt{"}}, {\tt{"}}22:19.387{\tt{"}}, {\tt{"}}22.32311{\tt{"}}, {\tt{"}}N22.32311{\tt{"}},
- {\tt{"}}-45.6{\tt{"}}, {\tt{"}}S45.6{\tt{"}}. As indicated, the sign of the latitude can
- optionally be indicated using characters {\tt{"}}N{\tt{"}} and {\tt{"}}S{\tt{"}} in place of the
- usual {\tt{"}}$+${\tt{"}} and {\tt{"}}-{\tt{"}}. When converting the stored value to a string, the
- format {\tt{"}}[s]dd:mm:ss.ss{\tt{"}} is used, when {\tt{"}}[s]{\tt{"}} is {\tt{"}}N{\tt{"}} or {\tt{"}}S{\tt{"}}.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- All Frames have this attribute.
- }
- \sstsubsection{
- SpecFrame
- }{
- Together with the \htmlref{ObsLon}{ObsLon}, \htmlref{Epoch}{Epoch}, \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec} attributes,
- it defines the Doppler shift introduced by the observers diurnal
- motion around the earths axis, which is needed when converting to
- or from the topocentric standard of rest. The maximum velocity
- error which can be caused by an incorrect value is 0.5 km/s. The
- default value for the attribute is zero.
- }
- \sstsubsection{
- TimeFrame
- }{
- Together with the ObsLon attribute, it is used when converting
- between certain time scales (TDB, TCB, LMST, LAST)
- }
- }
-}
-\sstroutine{
- ObsLon\sstlabel{ObsLon}
-}{
- The geodetic longitude of the observer
-}{
- \sstdescription{
- This attribute specifies the geodetic (or equivalently, geocentric)
- longitude of the observer, in degrees, measured positive eastwards.
- See also attribute \htmlref{ObsLat}{ObsLat}. The basic \htmlref{Frame}{Frame} class makes no use of this
- attribute, but specialised subclasses of Frame may use it. For instance,
- the \htmlref{SpecFrame}{SpecFrame}, \htmlref{SkyFrame}{SkyFrame} and \htmlref{TimeFrame}{TimeFrame} classes use it. The default value
- is zero.
-
- The value is stored internally in radians, but is converted to and
- from a degrees string for access. Some example input formats are:
- {\tt{"}}155:19:23.2{\tt{"}}, {\tt{"}}155 19 23.2{\tt{"}}, {\tt{"}}155:19.387{\tt{"}}, {\tt{"}}155.32311{\tt{"}}, {\tt{"}}E155.32311{\tt{"}},
- {\tt{"}}-204.67689{\tt{"}}, {\tt{"}}W204.67689{\tt{"}}. As indicated, the sign of the longitude can
- optionally be indicated using characters {\tt{"}}E{\tt{"}} and {\tt{"}}W{\tt{"}} in place of the
- usual {\tt{"}}$+${\tt{"}} and {\tt{"}}-{\tt{"}}. When converting the stored value to a string, the
- format {\tt{"}}[s]ddd:mm:ss.ss{\tt{"}} is used, when {\tt{"}}[s]{\tt{"}} is {\tt{"}}E{\tt{"}} or {\tt{"}}W{\tt{"}} and the
- numerical value is chosen to be less than 180 degrees.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- All Frames have this attribute.
- }
- \sstsubsection{
- SpecFrame
- }{
- Together with the ObsLon, \htmlref{Epoch}{Epoch}, \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec} attributes,
- it defines the Doppler shift introduced by the observers diurnal
- motion around the earths axis, which is needed when converting to
- or from the topocentric standard of rest. The maximum velocity
- error which can be caused by an incorrect value is 0.5 km/s. The
- default value for the attribute is zero.
- }
- \sstsubsection{
- TimeFrame
- }{
- Together with the ObsLon attribute, it is used when converting
- between certain time scales (TDB, TCB, LMST, LAST)
- }
- }
-}
-\sstroutine{
- PVMax(i)\sstlabel{PVMaxi}
-}{
- Maximum number of FITS-WCS projection parameters
-}{
- \sstdescription{
- This attribute specifies the largest legal index for a PV projection
- parameter attached to a specified axis of the \htmlref{WcsMap}{WcsMap} (i.e. the
- largest legal value for {\tt{"}}m{\tt{"}} when accessing the {\tt{"}}\htmlref{PVi\_m}{PVi_m}{\tt{"}} attribute).
- The axis index is specified by i, and should be in the range 1 to 99.
- The value for each axis is determined by the projection type specified
- when the WcsMap
- is first created using \htmlref{AST\_WCSMAP}{AST_WCSMAP} and cannot subsequently be
- changed.
- }
- \sstattributetype{
- Integer, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- WcsMap
- }{
- All WcsMaps have this attribute.
- }
- }
-}
-\sstroutine{
- PVi\_m\sstlabel{PVi_m}
-}{
- FITS-WCS projection parameters
-}{
- \sstdescription{
- This attribute specifies the projection parameter values to be
- used by a \htmlref{WcsMap}{WcsMap} when implementing a FITS-WCS sky projection.
- Each PV attribute name should include two integers, i and m,
- separated by an underscore. The axis index is specified
- by i, and should be in the range 1 to 99. The parameter number
- is specified by m, and should be in the range 0 to 99. For
- example, {\tt{"}}PV2\_1=45.0{\tt{"}} would specify a value for projection
- parameter 1 of axis 2 in a WcsMap.
-
- These projection parameters correspond exactly to the values
- stored using the FITS-WCS keywords {\tt{"}}PV1\_1{\tt{"}}, {\tt{"}}PV1\_2{\tt{"}}, etc. This
- means that projection parameters which correspond to angles must
- be given in degrees (despite the fact that the angular
- coordinates and other attributes used by a WcsMap are in
- radians).
-
- The set of projection parameters used by a WcsMap depends on the
- type of projection, which is determined by its \htmlref{WcsType}{WcsType}
- parameter. Most projections either do not require projection
- parameters, or use parameters 1 and 2 associated with the latitude
- axis. You should consult the FITS-WCS paper for details.
-
- Some projection parameters have default values (as defined in
- the FITS-WCS paper) which apply if no explicit value is given.
- You may omit setting a value for these {\tt{"}}optional{\tt{"}} parameters and the
- default will apply. Some projection parameters, however, have no
- default and a value must be explicitly supplied. This is most
- conveniently
- done using the OPTIONS argument of \htmlref{AST\_WCSMAP}{AST_WCSMAP} (q.v.) when a WcsMap
- is first created. An error will result when a WcsMap is used to
- transform coordinates if any of its required projection
- parameters has not been set and lacks a default value.
-
- A {\tt{"}}get{\tt{"}} operation for a parameter which has not been assigned a value
- will return the default value defined in the FITS-WCS paper, or
- AST\_\_BAD if the paper indicates that the parameter has no default.
- A default value of zero is returned for parameters which are not
- accessed by the projection.
-
- Note, the FITS-WCS paper reserves parameters 1 and 2 on the longitude
- axis to hold the native longitude and latitude of the fiducial
- point of the projection, in degrees. The default values for these
- parameters are determined by the projection type. The AST-specific
- TPN projection does not use this convention - all projection
- parameters for both axes are used to represent polynomical correction
- terms, and the native longitude and latitude at the fiducial point may
- not be changed from the default values of zero and 90 degrees.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- WcsMap
- }{
- All WcsMaps have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the projection parameter values given for a WcsMap do not
- satisfy all the required constraints (as defined in the FITS-WCS
- paper), then an error will result when the WcsMap is used to
- transform coordinates.
- }
- }
-}
-\sstroutine{
- PcdCen(axis)\sstlabel{PcdCenaxis}
-}{
- Centre coordinates of pincushion/barrel distortion
-}{
- \sstdescription{
- This attribute specifies the centre of the pincushion/barrel
- distortion implemented by a \htmlref{PcdMap}{PcdMap}. It takes a separate value for
- each axis of the PcdMap so that, for instance, the settings
- {\tt{"}}PcdCen(1)=345.0,PcdCen(2)=-104.4{\tt{"}} specify that the pincushion
- distortion is centred at positions of 345.0 and -104.4 on axes 1 and 2
- respectively. This attribute is set when a PcdMap is created, but may
- later be modified. If the attribute is cleared, the default value for
- both axes is zero.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- PcdMap
- }{
- All PcdMaps have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}PcdCen{\tt{"}} instead of
- {\tt{"}}PcdCen(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
- the attribute value of both axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
- operation will use just the PcdCen(1) value.
- }
- }
-}
-\sstroutine{
- Permute\sstlabel{Permute}
-}{
- Permute axis order?
-}{
- \sstdescription{
- This attribute is a boolean value which controls how a \htmlref{Frame}{Frame}
- behaves when it is used (by \htmlref{AST\_FINDFRAME}{AST_FINDFRAME}) as a template to match
- another (target) Frame. It specifies whether the axis order of
- the target Frame may be permuted in order to obtain a match.
-
- If the template's Permute value is zero, it will match a target
- only if it can do so without changing the order of its
- axes. Otherwise, it will attempt to permute the target's axes as
- necessary.
-
- The default value is 1, so that axis permutation will be attempted.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- All Frames have this attribute. However, the Frame class
- effectively ignores this attribute and behaves as if it has
- the value 1. This is because the axes of a basic Frame are
- not distinguishable and will always match any other Frame
- whatever their order.
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- Unlike a basic Frame, the SkyFrame class makes use of this
- attribute.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Permute attribute of a FrameSet is the same as that of
- its current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- }
-}
-\sstroutine{
- PolarLong\sstlabel{PolarLong}
-}{
- The longitude value to assign to either pole
-}{
- \sstdescription{
- This attribute holds the longitude value, in radians, to be
- returned when a Cartesian position corresponding to either the north
- or south pole is transformed into spherical coordinates. The
- default value is zero.
- }
- \sstattributetype{
- Double precision.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{SphMap}{SphMap}
- }{
- All SphMaps have this attribute.
- }
- }
-}
-\sstroutine{
- PreserveAxes\sstlabel{PreserveAxes}
-}{
- Preserve axes?
-}{
- \sstdescription{
- This attribute controls how a \htmlref{Frame}{Frame} behaves when it is used (by
- \htmlref{AST\_FINDFRAME}{AST_FINDFRAME}) as a template to match another (target) Frame. It
- determines which axes appear (and in what order) in the {\tt{"}}result{\tt{"}}
- Frame produced.
-
- If PreserveAxes is zero in the template Frame, then the result
- Frame will have the same number (and order) of axes as the
- template. If it is non-zero, however, the axes of the target
- Frame will be preserved, so that the result Frame will have the
- same number (and order) of axes as the target.
-
- The default value is zero, so that target axes are not preserved
- and the result Frame resembles the template.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- All Frames have this attribute.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The PreserveAxes attribute of a FrameSet is the same as that
- of its current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- }
-}
-\sstroutine{
- ProjP(m)\sstlabel{ProjPm}
-}{
- FITS-WCS projection parameters
-}{
- \sstdescription{
- This attribute provides aliases for the PV attributes, which
- specifies the projection parameter values to be used by a \htmlref{WcsMap}{WcsMap}
- when implementing a FITS-WCS sky projection. ProjP is retained for
- compatibility with previous versions of FITS-WCS and AST. New
- applications should use the PV attibute instead.
-
- Attributes ProjP(0) to ProjP(9) correspond to attributes PV$<$axlat$>$\_0
- to PV$<$axlat$>$\_9, where $<$axlat$>$ is replaced by the index of the
- latitude axis (given by attribute WcsAxis(2)). See PV for further
- details.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- WcsMap
- }{
- All WcsMaps have this attribute.
- }
- }
-}
-\sstroutine{
- Projection\sstlabel{Projection}
-}{
- Sky projection description
-}{
- \sstdescription{
- This attribute provides a place to store a description of the
- type of sky projection used when a \htmlref{SkyFrame}{SkyFrame} is attached to a
- 2-dimensional object, such as an image or plotting surface. For
- example, typical values might be {\tt{"}}orthographic{\tt{"}}, {\tt{"}}Hammer-Aitoff{\tt{"}}
- or {\tt{"}}cylindrical equal area{\tt{"}}.
-
- The Projection value is purely descriptive and does not affect
- the celestial coordinate system represented by the SkyFrame in
- any way. If it is set to a non-blank string, the description
- provided may be used when forming the default value for the
- SkyFrame's \htmlref{Title}{Title} attribute (so that typically it will appear in
- graphical output, for instance). The default value is an empty
- string.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- SkyFrame
- }{
- All SkyFrames have this attribute.
- }
- }
-}
-\sstroutine{
- RefCount\sstlabel{RefCount}
-}{
- Count of active Object pointers
-}{
- \sstdescription{
- This attribute gives the number of active pointers associated
- with an \htmlref{Object}{Object}. It is modified whenever pointers are created or
- annulled (by \htmlref{AST\_CLONE}{AST_CLONE}, \htmlref{AST\_ANNUL}{AST_ANNUL} or \htmlref{AST\_END}{AST_END} for example). The count
- includes the initial pointer issued when the Object was created.
-
- If the reference count for an Object falls to zero as the result
- of annulling a pointer to it, then the Object will be deleted.
- }
- \sstattributetype{
- Integer, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- All Objects have this attribute.
- }
- }
-}
-\sstroutine{
- RefDec\sstlabel{RefDec}
-}{
- The declination of the reference point
-}{
- \sstdescription{
- This attribute specifies the FK5 J2000.0 declination of a reference
- point on the sky. See the description of attribute \htmlref{RefRA}{RefRA} for details.
- The default RefDec is {\tt{"}}0:0:0{\tt{"}}.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{SpecFrame}{SpecFrame}
- }{
- All SpecFrames have this attribute.
- }
- }
-}
-\sstroutine{
- RefRA\sstlabel{RefRA}
-}{
- The right ascension of the reference point
-}{
- \sstdescription{
- This attribute, together with the \htmlref{RefDec}{RefDec} attribute, specifies the FK5
- J2000.0 coordinates of a reference point on the sky. For 1-dimensional
- spectra, this should normally be the position of the source. For
- spectral data with spatial coverage (spectral cubes, etc), this should
- be close to centre of the spatial coverage. It is used to define the
- correction for Doppler shift to be applied when using the
- \htmlref{AST\_FINDFRAME}{AST_FINDFRAME} or \htmlref{AST\_CONVERT}{AST_CONVERT}
- method to convert between different standards of rest.
-
- The \htmlref{SpecFrame}{SpecFrame} class assumes this velocity correction is spatially
- invariant. If a single SpecFrame is used (for instance, as a
- component of a \htmlref{CmpFrame}{CmpFrame}) to describe spectral values at different
- points on the sky, then it is assumes that the doppler shift at any
- spatial position is the same as at the reference position. The
- maximum velocity error introduced by this assumption is of the order
- of V$*$SIN(FOV), where FOV is the angular field of view, and V is the
- relative velocity of the two standards of rest. As an example, when
- correcting from the observers rest frame (i.e. the topocentric rest
- frame) to the kinematic local standard of rest the maximum value of V
- is about 20 km/s, so for 5 arc-minute field of view the maximum velocity
- error introduced by the correction will be about 0.03 km/s. As another
- example, the maximum error when correcting from the observers rest frame
- to the local group is about 5 km/s over a 1 degree field of view.
-
- The RefRA and RefDec attributes are stored internally in radians, but
- are converted to and from a string for access. The format {\tt{"}}hh:mm:ss.ss{\tt{"}}
- is used for RefRA, and {\tt{"}}dd:mm:ss.s{\tt{"}} is used for RefDec. The methods
- \htmlref{AST\_SETREFPOS}{AST_SETREFPOS} and \htmlref{AST\_GETREFPOS}{AST_GETREFPOS} may be used to access the value of
- these attributes directly as unformatted values in radians.
-
- The default for RefRA is {\tt{"}}0:0:0{\tt{"}}.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- SpecFrame
- }{
- All SpecFrames have this attribute.
- }
- }
-}
-\sstroutine{
- RegionClass\sstlabel{RegionClass}
-}{
- The AST class name of the Region encapsulated within an Stc
-}{
- \sstdescription{
- This is a read-only attribute giving the AST class name of the
- \htmlref{Region}{Region} encapsulated within an \htmlref{Stc}{Stc} (that is, the class of the Region
- which was supplied when the Stc was created).
- }
- \sstattributetype{
- String, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- Stc
- }{
- All Stc objects this attribute.
- }
- }
-}
-\sstroutine{
- Report\sstlabel{Report}
-}{
- Report transformed coordinates?
-}{
- \sstdescription{
- This attribute controls whether coordinate values are reported
- whenever a \htmlref{Mapping}{Mapping} is used to transform a set of points. If its
- value is zero (the default), no report is made. However, if it
- is non-zero, the coordinates of each point are reported (both
- before and after transformation) by writing them to standard
- output.
-
- This attribute is provided as an aid to debugging, and to avoid
- having to report values explicitly in simple programs.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Mapping
- }{
- All Mappings have this attribute.
- }
- \sstsubsection{
- \htmlref{CmpMap}{CmpMap}
- }{
- When applied to a compound Mapping (CmpMap), only the Report
- attribute of the CmpMap, and not those of its component
- Mappings, is used. Coordinate information is never reported
- for the component Mappings individually, only for the
- complete CmpMap.
- }
- \sstsubsection{
- \htmlref{Frame}{Frame}
- }{
- When applied to any Frame, the formatting capabilities of the
- Frame (as provided by the \htmlref{AST\_FORMAT}{AST_FORMAT} function) will be used to
- format the reported coordinates.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- When applied to any FrameSet, the formatting capabilities of
- the base and current Frames will be used (as above) to
- individually format the input and output coordinates, as
- appropriate. The Report attribute of a FrameSet is not itself
- affected by selecting a new base or current Frame, but the
- resulting formatting capabilities may be.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Unlike most other attributes, the value of the Report
- attribute is not transferred when a Mapping is copied. Instead,
- its value is undefined (and therefore defaults to zero) in any
- copy. Similarly, it becomes undefined in any external
- representation of a Mapping produced by the \htmlref{AST\_WRITE}{AST_WRITE} routine.
- }
- }
-}
-\sstroutine{
- ReportLevel\sstlabel{ReportLevel}
-}{
- Determines which read/write conditions are reported
-}{
- \sstdescription{
- This attribute determines which, if any, of the conditions that occur
- whilst reading or writing an \htmlref{Object}{Object} should be reported. These
- conditions will generate either a fatal error or a warning, as
- determined by attribute \htmlref{Strict}{Strict}. ReportLevel can take any of the
- following values:
-
- 0 - Do not report any conditions.
-
- 1 - \htmlref{Report}{Report} only conditions where significant information content has been
- changed. For instance, an unsupported time-scale has been replaced by a
- supported near-equivalent time-scale. Another example is if a basic
- \htmlref{Channel}{Channel} unexpected encounters data items that may have been introduced
- by later versions of AST.
-
- 2 - Report the above, and in addition report significant default
- values. For instance, if no time-scale was specified when reading an
- Object from an external data source, report the default time-scale
- that is being used.
-
- 3 - Report the above, and in addition report any other potentially
- interesting conditions that have no significant effect on the
- conversion. For instance, report if a time-scale of {\tt{"}}TT{\tt{"}}
- (terrestrial time) is used in place of {\tt{"}}ET{\tt{"}} (ephemeris time). This
- change has no signficiant effect because ET is the predecessor of,
- and is continuous with, TT. Synonyms such as {\tt{"}}IAT{\tt{"}} and {\tt{"}}TAI{\tt{"}} are
- another example.
-
- The default value is 1. Note, there are many other conditions that
- can occur whilst reading or writing an Object that completely
- prevent the conversion taking place. Such conditions will always
- generate errors, irrespective of the ReportLevel and Strict attributes.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Channel
- }{
- All Channels have this attribute.
- }
- \sstsubsection{
- \htmlref{FitsChan}{FitsChan}
- }{
- All the conditions selected by the FitsChan \htmlref{Warnings}{Warnings} attribute are
- reported at level 1.
- }
- }
-}
-\sstroutine{
- RestFreq\sstlabel{RestFreq}
-}{
- The rest frequency
-}{
- \sstdescription{
- This attribute specifies the frequency corresponding to zero
- velocity. It is used when converting between between velocity-based
- coordinate systems and and other coordinate systems (such as frequency,
- wavelength, energy, etc). The default value is 1.0E5 GHz.
-
- When setting a new value for this attribute, the new value can be
- supplied either directly as a frequency, or indirectly as a wavelength
- or energy, in which case the supplied value is converted to a frequency
- before being stored. The nature of the supplied value is indicated by
- appending text to the end of the numerical value indicating the units in
- which the value is supplied. If the units are not specified, then the
- supplied value is assumed to be a frequency in units of GHz. If the
- supplied unit is a unit of frequency, the supplied value is assumed to
- be a frequency in the given units. If the supplied unit is a unit of
- length, the supplied value is assumed to be a (vacuum) wavelength. If
- the supplied unit is a unit of energy, the supplied value is assumed to
- be an energy. For instance, the following strings all result in
- a rest frequency of around 1.4E14 Hz being used: {\tt{"}}1.4E5{\tt{"}}, {\tt{"}}1.4E14 Hz{\tt{"}},
- {\tt{"}}1.4E14 s$*$$*$-1{\tt{"}}, {\tt{"}}1.4E5 GHz{\tt{"}}, {\tt{"}}2.14E-6 m{\tt{"}}, {\tt{"}}21400 Angstrom{\tt{"}}, {\tt{"}}9.28E-20 J{\tt{"}},
- {\tt{"}}9.28E-13 erg{\tt{"}}, {\tt{"}}0.58 eV{\tt{"}}, etc.
-
- When getting the value of this attribute, the returned value is
- always a frequency in units of GHz.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{SpecFrame}{SpecFrame}
- }{
- All SpecFrames have this attribute.
- }
- }
-}
-\sstroutine{
- RootCorner\sstlabel{RootCorner}
-}{
- Specifies which edges of the 3D box should be annotated
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
- which edges of the cube enclosing the 3D graphics space are used
- for displaying numerical and descriptive axis labels. The attribute
- value identifies one of the eight corners of the cube within
- which graphics are being drawn (i.e. the cube specified by the
- GRAPHBOX argument when \htmlref{AST\_PLOT3D}{AST_PLOT3D}
- was called tp create the \htmlref{Plot3D}{Plot3D}). \htmlref{Axis}{Axis} labels and tick marks will
- be placed on the three cube edges that meet at the given corner.
-
- The attribute value should consist of three character, each of
- which must be either {\tt{"}}U{\tt{"}} or {\tt{"}}L{\tt{"}}. The first character in the string
- specifies the position of the corner on the first graphics axis.
- If the character is {\tt{"}}U{\tt{"}} then the corner is at the upper bound on the
- first graphics axis. If it is {\tt{"}}L{\tt{"}}, then the corner is at the lower
- bound on the first axis. Likewise, the second and third characters
- in the string specify the location of the corner on the second and
- third graphics axes.
-
- For instance, corner {\tt{"}}LLL{\tt{"}} is the corner that is at the lower bound
- on all three graphics axes, and corner {\tt{"}}ULU{\tt{"}} is at the upper bound
- on axes 1 and 3 but at the lower bound on axis 2.
-
- The default value is {\tt{"}}LLL{\tt{"}}.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Plot3D
- }{
- All Plot3Ds have this attribute.
- }
- }
-}
-\sstroutine{
- Seed\sstlabel{Seed}
-}{
- Random number seed for a MathMap
-}{
- \sstdescription{
- This attribute, which may take any integer value, determines the
- sequence of random numbers produced by the random number functions in
- \htmlref{MathMap}{MathMap} expressions. It is set to an unpredictable default value when
- a MathMap is created, so that by default each MathMap uses a different
- set of random numbers.
-
- If required, you may set this Seed attribute to a value of your
- choosing in order to produce repeatable behaviour from the random
- number functions. You may also enquire the Seed value (e.g. if an
- initially unpredictable value has been used) and then use it to
- reproduce the resulting sequence of random numbers, either from the
- same MathMap or from another one.
-
- Clearing the Seed attribute gives it a new unpredictable default
- value.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- MathMap
- }{
- All MathMaps have this attribute.
- }
- }
-}
-\sstroutine{
- SideBand\sstlabel{SideBand}
-}{
- Indicates which sideband a dual sideband spectrum represents
-}{
- \sstdescription{
- This attribute indicates whether the \htmlref{DSBSpecFrame}{DSBSpecFrame} currently
- represents its lower or upper sideband, or an offset from the local
- oscillator frequency. When querying the current value, the returned
- string is always one of {\tt{"}}usb{\tt{"}} (for upper sideband), {\tt{"}}lsb{\tt{"}} (for lower
- sideband), or {\tt{"}}lo{\tt{"}} (for offset from the local oscillator frequency).
- When setting a new value, any of the strings {\tt{"}}lsb{\tt{"}}, {\tt{"}}usb{\tt{"}}, {\tt{"}}observed{\tt{"}},
- {\tt{"}}image{\tt{"}} or {\tt{"}}lo{\tt{"}} may be supplied (case insensitive). The {\tt{"}}observed{\tt{"}}
- sideband is which ever sideband (upper or lower) contains the central
- spectral position given by attribute \htmlref{DSBCentre}{DSBCentre}, and the {\tt{"}}image{\tt{"}}
- sideband is the other sideband. It is the sign of the \htmlref{IF}{IF} attribute
- which determines if the observed sideband is the upper or lower
- sideband. The default value for SideBand is the observed sideband.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- DSBSpecFrame
- }{
- All DSBSpecFrames have this attribute.
- }
- }
-}
-\sstroutine{
- SimpFI\sstlabel{SimpFI}
-}{
- Forward-inverse MathMap pairs simplify?
-}{
- \sstdescription{
- This attribute should be set to a non-zero value if applying a
- \htmlref{MathMap}{MathMap}'s forward transformation, followed immediately by the matching
- inverse transformation will always restore the original set of
- coordinates. It indicates that AST may replace such a sequence of
- operations by an identity \htmlref{Mapping}{Mapping} (a \htmlref{UnitMap}{UnitMap}) if it is encountered
- while simplifying a compound Mapping (e.g. using \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}).
-
- By default, the SimpFI attribute is zero, so that AST will not perform
- this simplification unless you have set SimpFI to indicate that it is
- safe to do so.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- MathMap
- }{
- All MathMaps have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- For simplification to occur, the two MathMaps must be in series and
- be identical (with textually identical transformation
- functions). Functional equivalence is not sufficient.
-
- \sstitem
- The consent of both MathMaps is required before simplification can
- take place. If either has a SimpFI value of zero, then simplification
- will not occur.
-
- \sstitem
- The SimpFI attribute controls simplification only in the case where
- a MathMap's forward transformation is followed by the matching inverse
- transformation. It does not apply if an inverse transformation is
- followed by a forward transformation. This latter case is controlled
- by the \htmlref{SimpIF}{SimpIF} attribute.
-
- \sstitem
- The {\tt{"}}forward{\tt{"}} and {\tt{"}}inverse{\tt{"}} transformations referred to are those
- defined when the MathMap is created (corresponding to the FWD and
- INV arguments of its constructor function). If the MathMap is
- inverted (i.e. its \htmlref{Invert}{Invert} attribute is non-zero), then the role of the
- SimpFI and SimpIF attributes will be interchanged.
- }
- }
-}
-\sstroutine{
- SimpIF\sstlabel{SimpIF}
-}{
- Inverse-forward MathMap pairs simplify?
-}{
- \sstdescription{
- This attribute should be set to a non-zero value if applying a
- \htmlref{MathMap}{MathMap}'s inverse transformation, followed immediately by the matching
- forward transformation will always restore the original set of
- coordinates. It indicates that AST may replace such a sequence of
- operations by an identity \htmlref{Mapping}{Mapping} (a \htmlref{UnitMap}{UnitMap}) if it is encountered
- while simplifying a compound Mapping (e.g. using \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}).
-
- By default, the SimpIF attribute is zero, so that AST will not perform
- this simplification unless you have set SimpIF to indicate that it is
- safe to do so.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- MathMap
- }{
- All MathMaps have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- For simplification to occur, the two MathMaps must be in series and
- be identical (with textually identical transformation
- functions). Functional equivalence is not sufficient.
-
- \sstitem
- The consent of both MathMaps is required before simplification can
- take place. If either has a SimpIF value of zero, then simplification
- will not occur.
-
- \sstitem
- The SimpIF attribute controls simplification only in the case where
- a MathMap's inverse transformation is followed by the matching forward
- transformation. It does not apply if a forward transformation is
- followed by an inverse transformation. This latter case is controlled
- by the \htmlref{SimpFI}{SimpFI} attribute.
-
- \sstitem
- The {\tt{"}}forward{\tt{"}} and {\tt{"}}inverse{\tt{"}} transformations referred to are those
- defined when the MathMap is created (corresponding to the FWD and
- INV arguments of its constructor function). If the MathMap is
- inverted (i.e. its \htmlref{Invert}{Invert} attribute is non-zero), then the role of the
- SimpFI and SimpIF attributes will be interchanged.
- }
- }
-}
-\sstroutine{
- Size(element)\sstlabel{Sizeelement}
-}{
- Character size for a Plot element
-}{
- \sstdescription{
- This attribute determines the character size used when drawing
- each element of graphical output produced by a \htmlref{Plot}{Plot}. It takes a
- separate value for each graphical element so that, for instance,
- the setting {\tt{"}}Size(title)=2.0{\tt{"}} causes the Plot title to be drawn
- using twice the default character size.
-
- The range of character sizes available and the appearance of the
- resulting text is determined by the underlying graphics system.
- The default behaviour is for all graphical elements to be drawn
- using the default character size supplied by this graphics
- system.
- }
- \sstattributetype{
- Floating Point.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- For a list of the graphical elements available, see the
- description of the Plot class.
-
- \sstitem
- If no graphical element is specified, (e.g. {\tt{"}}Size{\tt{"}} instead
- of {\tt{"}}Size(title){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will
- affect the attribute value of all graphical elements, while a
- {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}} operation will use just the Size(TextLab)
- value.
- }
- }
-}
-\sstroutine{
- SizeGuess\sstlabel{SizeGuess}
-}{
- The expected size of the KeyMap
-}{
- \sstdescription{
- This is attribute gives an estimate of the number of entries that
- will be stored in the \htmlref{KeyMap}{KeyMap}. It is used to tune the internal
- properties of the KeyMap for speed and efficiency. A larger value
- will result in faster access at the expense of increased memory
- requirements. However if the SizeGuess value is much larger than
- the actual size of the KeyMap, then there will be little, if any,
- speed gained by making the SizeGuess even larger. The default value
- is 300.
-
- The value of this attribute can only be changed if the KeyMap is
- empty. Its value can be set conveniently when creating the KeyMap.
- An error will be reported if an attempt is made to set or clear the
- attribute when the KeyMap contains any entries.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- KeyMap
- }{
- All KeyMaps have this attribute.
- }
- }
-}
-\sstroutine{
- Skip\sstlabel{Skip}
-}{
- Skip irrelevant data?
-}{
- \sstdescription{
- This is a boolean attribute which indicates whether the \htmlref{Object}{Object}
- data being read through a \htmlref{Channel}{Channel} are inter-mixed with other,
- irrelevant, external data.
-
- If Skip is zero (the default), then the source of input data is
- expected to contain descriptions of AST Objects and comments and
- nothing else (if anything else is read, an error will
- result). If Skip is non-zero, then any non-Object data
- encountered between Objects will be ignored and simply skipped
- over in order to reach the next Object.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Channel
- }{
- All Channels have this attribute.
- }
- \sstsubsection{
- \htmlref{FitsChan}{FitsChan}
- }{
- The FitsChan class sets the default value of this attribute
- to 1, so that all irrelevant FITS headers will normally be
- ignored.
- }
- }
-}
-\sstroutine{
- SkyRef(axis)\sstlabel{SkyRefaxis}
-}{
- Position defining the offset coordinate system
-}{
- \sstdescription{
- This attribute allows a \htmlref{SkyFrame}{SkyFrame} to represent offsets, rather than
- absolute axis values, within the coordinate system specified by the
- \htmlref{System}{System} attribute. If supplied, SkyRef should be set to hold the
- longitude and latitude of a point within the coordinate system
- specified by the System attribute. The coordinate system represented
- by the SkyFrame will then be rotated in order to put the specified
- position at either the pole or the origin of the new coordinate system
- (as indicated by the \htmlref{SkyRefIs}{SkyRefIs} attribute). The orientation of the
- modified coordinate system is then controlled using the SkyRefP
- attribute.
-
- If an integer axis index is included in the attribute name (e.g.
- {\tt{"}}SkyRef(1){\tt{"}}) then the attribute value should be supplied as a single
- floating point axis value, in radians, when setting a value for the
- attribute, and will be returned in the same form when getting the value
- of the attribute. In this case the integer axis index should be {\tt{"}}1{\tt{"}}
- or {\tt{"}}2{\tt{"}} (the values to use for longitude and latitue axes are
- given by the \htmlref{LonAxis}{LonAxis} and \htmlref{LatAxis}{LatAxis} attributes).
-
- If no axis index is included in the attribute name (e.g. {\tt{"}}SkyRef{\tt{"}}) then
- the attribute value should be supplied as a character string
- containing two formatted axis values (an axis 1 value followed by a
- comma, followed by an axis 2 value). The same form
- will be used when getting the value of the attribute.
-
- The default values for SkyRef are zero longitude and zero latitude.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- SkyFrame
- }{
- All SkyFrames have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the System attribute of the SkyFrame is changed, any position
- given for SkyRef is transformed into the new System.
-
- \sstitem
- If a value has been assigned to SkyRef attribute, then
- the default values for certain attributes are changed as follows:
- the default axis Labels for the SkyFrame are modified by appending
- {\tt{"}} offset{\tt{"}} to the end, the default axis Symbols for the SkyFrame are
- modified by prepending the character {\tt{"}}D{\tt{"}} to the start, and the
- default title is modified by replacing the projection information by the
- origin information.
- }
- }
- \sstdiytopic{
- Aligning SkyFrames with Offset Coordinate Systems
- }{
- The offset coordinate system within a SkyFrame should normally be
- considered as a superficial {\tt{"}}re-badging{\tt{"}} of the axes of the coordinate
- system specified by the System attribute - it merely provides an
- alternative numerical {\tt{"}}label{\tt{"}} for each position in the System coordinate
- system. The SkyFrame retains full knowledge of the celestial coordinate
- system on which the offset coordinate system is based (given by the
- System attribute). For instance, the SkyFrame retains knowledge of the
- way that one celestial coordinate system may {\tt{"}}drift{\tt{"}} with respect to
- another over time. Normally, if you attempt to align two SkyFrames (e.g.
- using the \htmlref{AST\_CONVERT}{AST_CONVERT} or \htmlref{AST\_FINDFRAME}{AST_FINDFRAME} routine),
- the effect of any offset coordinate system defined in either SkyFrame
- will be removed, resulting in alignment being performed in the
- celestial coordinate system given by the \htmlref{AlignSystem}{AlignSystem} attribute.
- However, by setting the \htmlref{AlignOffset}{AlignOffset} attribute ot a non-zero value, it
- is possible to change this behaviour so that the effect of the offset
- coordinate system is not removed when aligning two SkyFrames.
- }
-}
-\sstroutine{
- SkyRefIs\sstlabel{SkyRefIs}
-}{
- Selects the nature of the offset coordinate system
-}{
- \sstdescription{
- This attribute controls how the values supplied for the SkyRef and
- SkyRefP attributes are used. These three attributes together allow
- a \htmlref{SkyFrame}{SkyFrame} to represent offsets relative to some specified origin
- or pole within the coordinate system specified by the \htmlref{System}{System} attribute,
- rather than absolute axis values. SkyRefIs can take one of the
- case-insensitive values {\tt{"}}Origin{\tt{"}}, {\tt{"}}Pole{\tt{"}} or {\tt{"}}Ignored{\tt{"}}.
-
- If SkyRefIs is set to {\tt{"}}Origin{\tt{"}}, then the coordinate system
- represented by the SkyFrame is modified to put the origin of longitude
- and latitude at the position specified by the SkyRef attribute.
-
- If SkyRefIs is set to {\tt{"}}Pole{\tt{"}}, then the coordinate system represented
- by the SkyFrame is modified to put the north pole at the position
- specified by the SkyRef attribute.
-
- If SkyRefIs is set to {\tt{"}}Ignored{\tt{"}} (the default), then any value set for the
- SkyRef attribute is ignored, and the SkyFrame represents the coordinate
- system specified by the System attribute directly without any rotation.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- SkyFrame
- }{
- All SkyFrames have this attribute.
- }
- }
-}
-\sstroutine{
- SkyRefP(axis)\sstlabel{SkyRefPaxis}
-}{
- Position on primary meridian of offset coordinate system
-}{
- \sstdescription{
- This attribute is used to control the orientation of the offset
- coordinate system defined by attributes SkyRef and \htmlref{SkyRefIs}{SkyRefIs}. If used,
- it should be set to hold the longitude and latitude of a point within
- the coordinate system specified by the \htmlref{System}{System} attribute. The offset
- coordinate system represented by the \htmlref{SkyFrame}{SkyFrame} will then be rotated in
- order to put the position supplied for SkyRefP on the zero longitude
- meridian. This rotation is about an axis from the centre of the
- celestial sphere to the point specified by the SkyRef attribute.
- The default value for SkyRefP is usually the north pole (that is, a
- latitude of $+$90 degrees in the coordinate system specified by the System
- attribute). The exception to this is if the SkyRef attribute is
- itself set to either the north or south pole. In these cases the
- default for SkyRefP is the origin (that is, a (0,0) in the coordinate
- system specified by the System attribute).
-
- If an integer axis index is included in the attribute name (e.g.
- {\tt{"}}SkyRefP(1){\tt{"}}) then the attribute value should be supplied as a single
- floating point axis value, in radians, when setting a value for the
- attribute, and will be returned in the same form when getting the value
- of the attribute. In this case the integer axis index should be {\tt{"}}1{\tt{"}}
- or {\tt{"}}2{\tt{"}} (the values to use for longitude and latitue axes are
- given by the \htmlref{LonAxis}{LonAxis} and \htmlref{LatAxis}{LatAxis} attributes).
-
- If no axis index is included in the attribute name (e.g. {\tt{"}}SkyRefP{\tt{"}}) then
- the attribute value should be supplied as a character string
- containing two formatted axis values (an axis 1 value followed by a
- comma, followed by an axis 2 value). The same form
- will be used when getting the value of the attribute.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- SkyFrame
- }{
- All SkyFrames have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the position given by the SkyRef attribute defines the origin
- of the offset coordinate system (that is, if the SkyRefIs attribute
- is set to {\tt{"}}origin{\tt{"}}), then there will in general be two orientations
- which will put the supplied SkyRefP position on the zero longitude
- meridian. The orientation which is actually used is the one which
- gives the SkyRefP position a positive latitude in the offset coordinate
- system (the other possible orientation would give the SkyRefP position
- a negative latitude).
-
- \sstitem
- An error will be reported if an attempt is made to use a
- SkyRefP value which is co-incident with SkyRef or with the point
- diametrically opposite to SkyRef on the celestial sphere. The
- reporting of this error is deferred until the SkyRef and SkyRefP
- attribute values are used within a calculation.
-
- \sstitem
- If the System attribute of the SkyFrame is changed, any position
- given for SkyRefP is transformed into the new System.
- }
- }
-}
-\sstroutine{
- SourceSys\sstlabel{SourceSys}
-}{
- Spectral system in which the source velocity is stored
-}{
- \sstdescription{
- This attribute identifies the spectral system in which the
- \htmlref{SourceVel}{SourceVel} attribute value (the source velocity) is supplied and
- returned. It can be one of the following:
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}VRAD{\tt{"}} or {\tt{"}}VRADIO{\tt{"}}: Radio velocity (km/s)
-
- \sstitem
- {\tt{"}}VOPT{\tt{"}} or {\tt{"}}VOPTICAL{\tt{"}}: Optical velocity (km/s)
-
- \sstitem
- {\tt{"}}ZOPT{\tt{"}} or {\tt{"}}REDSHIFT{\tt{"}}: Redshift (dimensionless)
-
- \sstitem
- {\tt{"}}BETA{\tt{"}}: Beta factor (dimensionless)
-
- \sstitem
- {\tt{"}}VELO{\tt{"}} or {\tt{"}}VREL{\tt{"}}: Apparent radial ({\tt{"}}relativistic{\tt{"}}) velocity (km/s)
-
- }
- When setting a new value for the SourceVel attribute, the source
- velocity should be supplied in the spectral system indicated
- by this attribute. Likewise, when getting the value of the SourceVel
- attribute, the velocity will be returned in this spectral system.
-
- If the value of SourceSys is changed, the value stored for SourceVel
- will be converted from the old to the new spectral systems.
-
- The default value is {\tt{"}}VELO{\tt{"}} (apparent radial velocity).
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{SpecFrame}{SpecFrame}
- }{
- All SpecFrames have this attribute.
- }
- }
-}
-\sstroutine{
- SourceVRF\sstlabel{SourceVRF}
-}{
- Rest frame in which the source velocity is stored
-}{
- \sstdescription{
- This attribute identifies the rest frame in which the source
- velocity or redshift is stored (the source velocity or redshift is
- accessed using attribute \htmlref{SourceVel}{SourceVel}). When setting a new value for the
- SourceVel attribute, the source velocity or redshift should be supplied
- in the rest frame indicated by this attribute. Likewise, when getting
- the value of the SourceVel attribute, the velocity or redshift will be
- returned in this rest frame.
-
- If the value of SourceVRF is changed, the value stored for SourceVel
- will be converted from the old to the new rest frame.
-
- The values which can be supplied are the same as for the \htmlref{StdOfRest}{StdOfRest}
- attribute (except that SourceVRF cannot be set to {\tt{"}}Source{\tt{"}}). The
- default value is {\tt{"}}Helio{\tt{"}}.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{SpecFrame}{SpecFrame}
- }{
- All SpecFrames have this attribute.
- }
- }
-}
-\sstroutine{
- SourceVel\sstlabel{SourceVel}
-}{
- The source velocity
-}{
- \sstdescription{
- This attribute (together with \htmlref{SourceSys}{SourceSys}, \htmlref{SourceVRF}{SourceVRF}, \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec})
- defines the {\tt{"}}Source{\tt{"}} standard of rest (see attribute \htmlref{StdOfRest}{StdOfRest}). This is
- a rest frame which is moving towards the position given by RefRA and
- RefDec at a velocity given by SourceVel. A positive value means
- the source is moving away from the observer. When a new value is
- assigned to this attribute, the supplied value is assumed to refer
- to the spectral system specified by the SourceSys attribute. For
- instance, the SourceVel value may be supplied as a radio velocity, a
- redshift, a beta factor, etc. Similarly, when the current value of
- the SourceVel attribute is obtained, the returned value will refer
- to the spectral system specified by the SourceSys value. If the
- SourceSys value is changed, any value previously stored for the SourceVel
- attribute will be changed automatically from the old spectral system
- to the new spectral system.
-
- When setting a value for SourceVel, the value should be supplied in the
- rest frame specified by the SourceVRF attribute. Likewise, when getting
- the value of SourceVel, it will be returned in the rest frame specified
- by the SourceVRF attribute.
-
- The default SourceVel value is zero.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{SpecFrame}{SpecFrame}
- }{
- All SpecFrames have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- It is important to set an appropriate value for SourceVRF and
- SourceSys before setting a value for SourceVel. If a new value is later
- set for SourceVRF or SourceSys, the value stored for SourceVel will
- simultaneously be changed to the new standard of rest or spectral
- system.
- }
- }
-}
-\sstroutine{
- SpecOrigin\sstlabel{SpecOrigin}
-}{
- The zero point for SpecFrame axis values
-}{
- \sstdescription{
- This specifies the origin from which all spectral values are measured.
- The default value (zero) results in the \htmlref{SpecFrame}{SpecFrame} describing
- absolute spectral values in the system given by the \htmlref{System}{System} attribute
- (e.g. frequency, velocity, etc). If a SpecFrame is to be used to
- describe offset from some origin, the SpecOrigin attribute
- should be set to hold the required origin value. The SpecOrigin value
- stored inside the SpecFrame structure is modified whenever SpecFrame
- attribute values are changed so that it refers to the original spectral
- position.
-
- When setting a new value for this attribute, the supplied value is assumed
- to be in the system, units and standard of rest described by the SpecFrame.
- Likewise, when getting the value of this attribute, the value is returned
- in the system, units and standard of rest described by the SpecFrame. If
- any of these attributes are changed, then any previously stored SpecOrigin
- value will also be changed so that refers to the new system, units or
- standard of rest.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- SpecFrame
- }{
- All SpecFrames have this attribute.
- }
- }
-}
-\sstroutine{
- SpecVal\sstlabel{SpecVal}
-}{
- The spectral position at which flux values are measured
-}{
- \sstdescription{
- This attribute specifies the spectral position (frequency, wavelength,
- etc.), at which the values described by the \htmlref{FluxFrame}{FluxFrame} are measured.
- It is used when determining the \htmlref{Mapping}{Mapping} between between FluxFrames.
-
- The default value and spectral system used for this attribute are
- both specified when the FluxFrame is created.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- FluxFrame
- }{
- All FluxFrames have this attribute.
- }
- }
-}
-\sstroutine{
- StcsArea\sstlabel{StcsArea}
-}{
- Return the CoordinateArea component when reading an STC-S document?
-}{
- \sstdescription{
- This is a boolean attribute which controls what is returned
- by the
- \htmlref{AST\_READ}{AST_READ}
- function when it is used to read from an \htmlref{StcsChan}{StcsChan}.
- If StcsArea is set non-zero (the default), then a \htmlref{Region}{Region}
- representing the STC CoordinateArea will be returned by
- AST\_READ.
- If StcsArea is set to zero, then the STC CoordinateArea
- will not be returned.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- StcsChan
- }{
- All StcsChans have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Other attributes such as \htmlref{StcsCoords}{StcsCoords} and \htmlref{StcsProps}{StcsProps} can be used to
- specify other Objects to be returned by
- AST\_READ.
- If more than one of these attributes is set non-zero, then the
- actual \htmlref{Object}{Object} returned by
- AST\_READ
- will be a \htmlref{KeyMap}{KeyMap}, containing the requested Objects. In this
- case, the Region representing the STC CoordinateArea will be
- stored in the returned KeyMap using the key {\tt{"}}AREA{\tt{"}}. If StcsArea
- is the only attribute to be set non-zero, then the Object returned by
- AST\_READ
- will be the CoordinateArea Region itself.
-
- \sstitem
- The class of Region used to represent the CoordinateArea for each
- STC-S sub-phrase is determined by the first word in the
- sub-phrase (the {\tt{"}}sub-phrase identifier{\tt{"}}). The individual sub-phrase
- Regions are combined into a single \htmlref{Prism}{Prism}, which is then simplified
- using \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}
- to form the returned region.
-
- \sstitem
- Sub-phrases that represent a single value ( that is, have
- identifiers {\tt{"}}Time{\tt{"}}, {\tt{"}}Position{\tt{"}}, {\tt{"}}Spectral{\tt{"}} or {\tt{"}}Redshift{\tt{"}} ) are
- considered to be be part of the STC CoordinateArea component.
-
- \sstitem
- The \htmlref{TimeFrame}{TimeFrame} used to represent a time STC-S sub-phrase will have
- its \htmlref{TimeOrigin}{TimeOrigin} attribute set to the sub-phrase start time. If no
- start time is specified by the sub-phrase, then the stop time will be
- used instead. If no stop time is specified by the sub-phrase, then
- the single time value specified in the sub-phrase will be used
- instead. Subsequently clearing the TimeOrigin attribute (or setting
- its value to zero) will cause the TimeFrame to reprsent absolute times.
-
- \sstitem
- The \htmlref{Epoch}{Epoch} attribute for the returned Region is set in the same
- way as the TimeOrigin attribute (see above).
- }
- }
-}
-\sstroutine{
- StcsCoords\sstlabel{StcsCoords}
-}{
- Return the Coordinates component when reading an STC-S document?
-}{
- \sstdescription{
- This is a boolean attribute which controls what is returned
- by the
- \htmlref{AST\_READ}{AST_READ}
- function when it is used to read from an \htmlref{StcsChan}{StcsChan}.
- If StcsCoords is set non-zero, then a \htmlref{PointList}{PointList}
- representing the STC Coordinates will be returned by
- AST\_READ.
- If StcsCoords is set to zero (the default), then the STC
- Coordinates will not be returned.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- StcsChan
- }{
- All StcsChans have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Other attributes such as \htmlref{StcsArea}{StcsArea} and \htmlref{StcsProps}{StcsProps} can be used to
- specify other Objects to be returned by
- AST\_READ.
- If more than one of these attributes is set non-zero, then the
- actual \htmlref{Object}{Object} returned by
- AST\_READ
- will be a \htmlref{KeyMap}{KeyMap}, containing the requested Objects. In this
- case, the PointList representing the STC Coordinates will be
- stored in the returned KeyMap using the key {\tt{"}}COORDS{\tt{"}}. If StcsCoords
- is the only attribute to be set non-zero, then the Object returned by
- AST\_READ
- will be the Coordinates PointList itself.
-
- \sstitem
- The Coordinates component is specified by the additional axis
- values embedded within the body of each STC-S sub-phrase that
- represents an extended area. Sub-phrases that represent a single
- value ( that is, have identifiers {\tt{"}}Time{\tt{"}}, {\tt{"}}Position{\tt{"}}, {\tt{"}}Spectral{\tt{"}}
- or {\tt{"}}Redshift{\tt{"}} ) are not considered to be be part of the STC
- Coordinates component.
-
- \sstitem
- If the STC-S documents does not contain a Coordinates component,
- then a NULL object pointer
- (AST\_\_NULL)
- will be returned by
- AST\_READ
- if the Coordinates component is the only object being returned. If
- other objects are also being returned (see attributes StcsProps and
- StcsArea), then the returned KeyMap will contain a {\tt{"}}COORDS{\tt{"}} key
- only if the Coordinates component is read succesfully.
-
- \sstitem
- The \htmlref{TimeFrame}{TimeFrame} used to represent a time STC-S sub-phrase will have
- its \htmlref{TimeOrigin}{TimeOrigin} attribute set to the sub-phrase start time. If no
- start time is specified by the sub-phrase, then the stop time will be
- used instead. If no stop time is specified by the sub-phrase, then
- the single time value specified in the sub-phrase will be used
- instead. Subsequently clearing the TimeOrigin attribute (or setting
- its value to zero) will cause the TimeFrame to reprsent absolute times.
-
- \sstitem
- The \htmlref{Epoch}{Epoch} attribute for the returned \htmlref{Region}{Region} is set in the same
- way as the TimeOrigin attribute (see above).
- }
- }
-}
-\sstroutine{
- StcsIndent\sstlabel{StcsIndent}
-}{
- Controls indentation and line splitting of output text
-}{
- \sstdescription{
- This attribute controls how the STC-S text is written out to the
- sink function when writing an AST object to an \htmlref{StcsChan}{StcsChan}. If it is
- zero (the default) the entire STC-S description is written out by a
- single invocation of the sink function. The text supplied to the
- sink function will not contain any linefeed characters, and each
- pair of adjacent words will be separated by a single space. The
- text may thus be arbitrarily large and the \htmlref{StcsLength}{StcsLength} attribute is
- ignored.
-
- If StcsIndent is non-zero, then the text is written out via
- multiple calls to the sink function, each call corresponding to a
- single {\tt{"}}line{\tt{"}} of text (although no line feed characters will be
- inserted by AST). The complete STC-S description is broken into
- lines so that:
-
- \sstitemlist{
-
- \sstitem
- the line length specified by attribute StcsLength is not exceeded
-
- \sstitem
- each sub-phrase (time, space, etc.) starts on a new line
-
- \sstitem
- each argument in a compound spatial region starts on a new line
-
- }
- If this causes a sub-phrase to extend to two or more lines, then the
- second and subsequent lines will be indented by three spaces compared
- to the first line. In addition, lines within a compound spatial region
- will have extra indentation to highlight the nesting produced by the
- parentheses. Each new level of nesting will be indented by a further
- three spaces.
-
- Note, the default value of zero is unlikely to be appropriate when
- an StcsChan is used within Fortran code. In this case, StcsIndent
- should usually be set non-zero, and the StcsLength attribute set to
- the size of the CHARACTER variable used to
- receive the text returned by \htmlref{AST\_GETLINE}{AST_GETLINE} within the sink function.
- This avoids the possibility of long lines being truncated invisibly
- within AST\_GETLINE.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- StcsChan
- }{
- All StcsChans have this attribute.
- }
- }
-}
-\sstroutine{
- StcsLength\sstlabel{StcsLength}
-}{
- Controls output line length
-}{
- \sstdescription{
- This attribute specifies the maximum length to use when writing out
- text through the sink function supplied when the \htmlref{StcsChan}{StcsChan} was created.
- It is ignored if the \htmlref{StcsIndent}{StcsIndent} attribute is zero (in which case
- the text supplied to the sink function can be of any length). The
- default value is 70.
-
- The number of characters in each string written out through the sink
- function will not usually be greater than the value of this attribute
- (but may be less). However, if any single word in the STC-S
- description exceeds the specified length, then the word will be
- written out as a single line.
-
- Note, the default value of zero is unlikely to be appropriate when
- an StcsChan is used within Fortran code. In this case, StcsLength
- should usually be set to the size of the CHARACTER variable used to
- receive the text returned by \htmlref{AST\_GETLINE}{AST_GETLINE} within the sink function.
- In addition, the StcsIndent attribute should be set non-zero. This
- avoids the possibility of long lines being truncated invisibly
- within AST\_GETLINE.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- StcsChan
- }{
- All StcsChans have this attribute.
- }
- }
-}
-\sstroutine{
- StcsProps\sstlabel{StcsProps}
-}{
- Return all properties when reading an STC-S document?
-}{
- \sstdescription{
- This is a boolean attribute which controls what is returned
- by the
- \htmlref{AST\_READ}{AST_READ}
- function when it is used to read from an \htmlref{StcsChan}{StcsChan}.
- If StcsProps is set non-zero, then a \htmlref{KeyMap}{KeyMap} containing all the
- properties read from the STC-S document will be returned by
- AST\_READ.
- If StcsProps is set to zero (the default), then the properties
- will not be returned.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- StcsChan
- }{
- All StcsChans have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Other attributes such as \htmlref{StcsCoords}{StcsCoords} and \htmlref{StcsArea}{StcsArea} can be used to
- specify other Objects to be returned by
- AST\_READ.
- If more than one of these attributes is set non-zero, then the
- actual \htmlref{Object}{Object} returned by
- AST\_READ
- will be a KeyMap containing the requested Objects. In this
- case, the properties KeyMap will be stored in the returned KeyMap
- using the key {\tt{"}}PROPS{\tt{"}}. If StcsProps is the only attribute to be
- set non-zero, then the Object returned by
- AST\_READ
- will be the properties KeyMap itself.
-
- \sstitem
- The KeyMap containing the properties will have entries for one or
- more of the following keys: {\tt{"}}TIME\_PROPS{\tt{"}}, {\tt{"}}SPACE\_PROPS{\tt{"}}, {\tt{"}}SPECTRAL\_PROPS{\tt{"}}
- and {\tt{"}}REDSHIFT\_PROPS{\tt{"}}. Each of these entries will be another KeyMap
- containing the properties of the corresponding STC-S sub-phrase.
- }
- }
-}
-\sstroutine{
- StdOfRest\sstlabel{StdOfRest}
-}{
- Standard of rest
-}{
- \sstdescription{
- This attribute identifies the standard of rest to which the spectral
- axis values of a \htmlref{SpecFrame}{SpecFrame} refer, and may take any of the values
- listed in the {\tt{"}}Standards of Rest{\tt{"}} section (below).
-
- The default StdOfRest value is {\tt{"}}Helio{\tt{"}}.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- SpecFrame
- }{
- All SpecFrames have this attribute.
- }
- }
- \sstdiytopic{
- Standards of Rest
- }{
- The SpecFrame class supports the following StdOfRest values (all are
- case-insensitive):
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}Topocentric{\tt{"}}, {\tt{"}}Topocent{\tt{"}} or {\tt{"}}Topo{\tt{"}}: The observers rest-frame (assumed
- to be on the surface of the earth). Spectra recorded in this standard of
- rest suffer a Doppler shift which varies over the course of a day
- because of the rotation of the observer around the axis of the earth.
- This standard of rest must be qualified using the \htmlref{ObsLat}{ObsLat}, \htmlref{ObsLon}{ObsLon},
- \htmlref{ObsAlt}{ObsAlt}, \htmlref{Epoch}{Epoch}, \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec} attributes.
-
- \sstitem
- {\tt{"}}Geocentric{\tt{"}}, {\tt{"}}Geocentr{\tt{"}} or {\tt{"}}Geo{\tt{"}}: The rest-frame of the earth centre.
- Spectra recorded in this standard of rest suffer a Doppler shift which
- varies over the course of a year because of the rotation of the earth
- around the Sun. This standard of rest must be qualified using the Epoch,
- RefRA and RefDec attributes.
-
- \sstitem
- {\tt{"}}Barycentric{\tt{"}}, {\tt{"}}Barycent{\tt{"}} or {\tt{"}}Bary{\tt{"}}: The rest-frame of the solar-system
- barycentre. Spectra recorded in this standard of rest suffer a Doppler
- shift which depends both on the velocity of the Sun through the Local
- Standard of Rest, and on the movement of the planets through the solar
- system. This standard of rest must be qualified using the Epoch, RefRA
- and RefDec attributes.
-
- \sstitem
- {\tt{"}}Heliocentric{\tt{"}}, {\tt{"}}Heliocen{\tt{"}} or {\tt{"}}Helio{\tt{"}}: The rest-frame of the Sun.
- Spectra recorded in this standard of rest suffer a Doppler shift which
- depends on the velocity of the Sun through the Local Standard of Rest.
- This standard of rest must be qualified using the RefRA and RefDec
- attributes.
-
- \sstitem
- {\tt{"}}LSRK{\tt{"}}, {\tt{"}}LSR{\tt{"}}: The rest-frame of the kinematical Local Standard of
- Rest. Spectra recorded in this standard of rest suffer a Doppler shift
- which depends on the velocity of the kinematical Local Standard of Rest
- through the galaxy. This standard of rest must be qualified using the
- RefRA and RefDec attributes.
-
- \sstitem
- {\tt{"}}LSRD{\tt{"}}: The rest-frame of the dynamical Local Standard of Rest. Spectra
- recorded in this standard of rest suffer a Doppler shift which depends
- on the velocity of the dynamical Local Standard of Rest through the
- galaxy. This standard of rest must be qualified using the RefRA and
- RefDec attributes.
-
- \sstitem
- {\tt{"}}Galactic{\tt{"}}, {\tt{"}}Galactoc{\tt{"}} or {\tt{"}}Gal{\tt{"}}: The rest-frame of the galactic centre.
- Spectra recorded in this standard of rest suffer a Doppler shift which
- depends on the velocity of the galactic centre through the local group.
- This standard of rest must be qualified using the RefRA and RefDec
- attributes.
-
- \sstitem
- {\tt{"}}Local\_group{\tt{"}}, {\tt{"}}Localgrp{\tt{"}} or {\tt{"}}LG{\tt{"}}: The rest-frame of the local group.
- This standard of rest must be qualified using the RefRA and RefDec
- attributes.
-
- \sstitem
- {\tt{"}}Source{\tt{"}}, or {\tt{"}}src{\tt{"}}: The rest-frame of the source. This standard of
- rest must be qualified using the RefRA, RefDec and \htmlref{SourceVel}{SourceVel} attributes.
-
- }
- Where more than one alternative \htmlref{System}{System} value is shown above, the
- first of these will be returned when an enquiry is made.
- }
-}
-\sstroutine{
- Strict\sstlabel{Strict}
-}{
- Report an error if any unexpeted data items are found?
-}{
- \sstdescription{
- This is a boolean attribute which indicates whether a warning
- rather than an error should be issed for insignificant conversion
- problems. If it is set non-zero, then fatal errors are issued
- instead of warnings, resulting in the
- inherited STATUS variable being set to an error value.
- If Strict is zero (the default), then execution continues after minor
- conversion problems, and a warning message is added to the \htmlref{Channel}{Channel}
- structure. Such messages can be retrieved using the
- \htmlref{AST\_WARNINGS}{AST_WARNINGS}
- function.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Channel
- }{
- All Channels have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This attribute was introduced in AST version 5.0. Prior to this
- version of AST unexpected data items read by a basic Channel always
- caused an error to be reported. So applications linked against
- versions of AST prior to version 5.0 may not be able to read \htmlref{Object}{Object}
- descriptions created by later versions of AST, if the Object's class
- description has changed.
- }
- }
-}
-\sstroutine{
- Style(element)\sstlabel{Styleelement}
-}{
- Line style for a Plot element
-}{
- \sstdescription{
- This attribute determines the line style used when drawing each
- element of graphical output produced by a \htmlref{Plot}{Plot}. It takes a
- separate value for each graphical element so that, for instance,
- the setting {\tt{"}}Style(border)=2{\tt{"}} causes the Plot border to be drawn
- using line style 2 (which might result in, say, a dashed line).
-
- The range of integer line styles available and their appearance
- is determined by the underlying graphics system. The default
- behaviour is for all graphical elements to be drawn using the
- default line style supplied by this graphics system (normally,
- this is likely to give a solid line).
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- For a list of the graphical elements available, see the
- description of the Plot class.
-
- \sstitem
- If no graphical element is specified, (e.g. {\tt{"}}Style{\tt{"}} instead of
- {\tt{"}}Style(border){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
- the attribute value of all graphical elements, while a {\tt{"}}get{\tt{"}} or
- {\tt{"}}test{\tt{"}} operation will use just the Style(\htmlref{Border}{Border}) value.
- }
- }
-}
-\sstroutine{
- Symbol(axis)\sstlabel{Symbolaxis}
-}{
- Axis symbol
-}{
- \sstdescription{
- This attribute specifies a short-form symbol to be used to
- represent coordinate values for a particular axis of a
- \htmlref{Frame}{Frame}. This might be used (e.g.) in algebraic expressions where
- a full description of the axis would be inappropriate. Examples
- include {\tt{"}}RA{\tt{"}} and {\tt{"}}Dec{\tt{"}} (for Right Ascension and Declination).
-
- If a Symbol value has not been set for a Frame axis, then a
- suitable default is supplied.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The default Symbol value supplied by the Frame class is the
- string {\tt{"}}$<$\htmlref{Domain}{Domain}$>$$<$n$>${\tt{"}}, where $<$n$>$ is 1, 2, etc. for successive
- axes, and $<$Domain$>$ is the value of the Frame's Domain
- attribute (truncated if necessary so that the final string
- does not exceed 15 characters). If no Domain value has been
- set, {\tt{"}}x{\tt{"}} is used as the $<$Domain$>$ value in constructing this
- default string.
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- The SkyFrame class re-defines the default Symbol value
- (e.g. to {\tt{"}}RA{\tt{"}} or {\tt{"}}Dec{\tt{"}}) as appropriate for the particular
- celestial coordinate system being represented.
- }
- \sstsubsection{
- \htmlref{TimeFrame}{TimeFrame}
- }{
- The TimeFrame class re-defines the default Symbol value as
- appropriate for the particular time system being represented.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Symbol attribute of a FrameSet axis is the same as that
- of its current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When specifying this attribute by name, it should be
- subscripted with the number of the Frame axis to which it
- applies.
- }
- }
-}
-\sstroutine{
- System\sstlabel{System}
-}{
- Coordinate system used to describe positions within the domain
-}{
- \sstdescription{
- In general it is possible for positions within a given physical
- domain to be described using one of several different coordinate
- systems. For instance, the \htmlref{SkyFrame}{SkyFrame} class can use galactic
- coordinates, equatorial coordinates, etc, to describe positions on
- the sky. As another example, the \htmlref{SpecFrame}{SpecFrame} class can use frequency,
- wavelength, velocity, etc, to describe a position within an
- electromagnetic spectrum. The System attribute identifies the particular
- coordinate system represented by a \htmlref{Frame}{Frame}. Each class of Frame
- defines a set of acceptable values for this attribute, as listed
- below (all are case insensitive). Where more than one alternative
- System value is shown, the first of will be returned when an
- enquiry is made.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The System attribute for a basic Frame always equals {\tt{"}}Cartesian{\tt{"}},
- and may not be altered.
- }
- \sstsubsection{
- \htmlref{CmpFrame}{CmpFrame}
- }{
- The System attribute for a CmpFrame always equals {\tt{"}}Compound{\tt{"}},
- and may not be altered. In addition, the CmpFrame class allows
- the System attribute to be referenced for a component Frame by
- including the index of an axis within the required component
- Frame. For instance, {\tt{"}}System(3){\tt{"}} refers to the System attribute
- of the component Frame which includes axis 3 of the CmpFrame.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The System attribute of a FrameSet is the same as that of its
- current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- \sstsubsection{
- SkyFrame
- }{
- The SkyFrame class supports the following System values and
- associated celestial coordinate systems:
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}AZEL{\tt{"}}: Horizon coordinates. The longitude axis is azimuth
- such that geographic north has an azimuth of zero and geographic
- east has an azimuth of $+$PI/2 radians. The zenith has elevation
- $+$PI/2. When converting to and from other celestial coordinate
- systems, no corrections are applied for atmospheric refraction
- or polar motion (however, a correction for diurnal aberattion is
- applied). Note, unlike most other
- celestial coordinate systems, this system is right handed. Also,
- unlike other SkyFrame systems, the AzEl system is sensitive to
- the timescale in which the \htmlref{Epoch}{Epoch} value is supplied. This is
- because of the gross diurnal rotation which this system undergoes,
- causing a small change in time to translate to a large rotation.
- When converting to or from an AzEl system, the Epoch value for
- both source and destination SkyFrames should be supplied in the
- TDB timescale. The difference between TDB and TT is between 1
- and 2 milliseconds, and so a TT value can usually be supplied in
- place of a TDB value. The TT timescale is related to TAI via
- TT = TAI $+$ 32.184 seconds.
-
- \sstitem
- {\tt{"}}ECLIPTIC{\tt{"}}: Ecliptic coordinates (IAU 1980), referred to the
- ecliptic and mean equinox specified by the qualifying \htmlref{Equinox}{Equinox}
- value.
-
- \sstitem
- {\tt{"}}FK4{\tt{"}}: The old FK4 (barycentric) equatorial coordinate system,
- which should be qualified by an Equinox value. The underlying
- model on which this is based is non-inertial and rotates slowly
- with time, so for accurate work FK4 coordinate systems should
- also be qualified by an Epoch value.
-
- \sstitem
- {\tt{"}}FK4-NO-E{\tt{"}} or {\tt{"}}FK4\_NO\_E{\tt{"}}: The old FK4 (barycentric) equatorial
- system but without the {\tt{"}}E-terms of aberration{\tt{"}} (e.g. some radio
- catalogues). This coordinate system should also be qualified by
- both an Equinox and an Epoch value.
-
- \sstitem
- {\tt{"}}FK5{\tt{"}} or {\tt{"}}EQUATORIAL{\tt{"}}: The modern FK5 (barycentric) equatorial
- coordinate system. This should be qualified by an Equinox value.
-
- \sstitem
- {\tt{"}}GALACTIC{\tt{"}}: Galactic coordinates (IAU 1958).
-
- \sstitem
- {\tt{"}}GAPPT{\tt{"}}, {\tt{"}}GEOCENTRIC{\tt{"}} or {\tt{"}}APPARENT{\tt{"}}: The geocentric apparent
- equatorial coordinate system, which gives the apparent positions
- of sources relative to the true plane of the Earth's equator and
- the equinox (the coordinate origin) at a time specified by the
- qualifying Epoch value. (Note that no Equinox is needed to
- qualify this coordinate system because no model {\tt{"}}mean equinox{\tt{"}}
- is involved.) These coordinates give the apparent right
- ascension and declination of a source for a specified date of
- observation, and therefore form an approximate basis for
- pointing a telescope. Note, however, that they are applicable to
- a fictitious observer at the Earth's centre, and therefore
- ignore such effects as atmospheric refraction and the (normally
- much smaller) aberration of light due to the rotational velocity
- of the Earth's surface. Geocentric apparent coordinates are
- derived from the standard FK5 (J2000.0) barycentric coordinates
- by taking account of the gravitational deflection of light by
- the Sun (usually small), the aberration of light caused by the
- motion of the Earth's centre with respect to the barycentre
- (larger), and the precession and nutation of the Earth's spin
- axis (normally larger still).
-
- \sstitem
- {\tt{"}}HELIOECLIPTIC{\tt{"}}: Ecliptic coordinates (IAU 1980), referred to the
- ecliptic and mean equinox of J2000.0, in which an offset is added to
- the longitude value which results in the centre of the sun being at
- zero longitude at the date given by the Epoch attribute. Attempts to
- set a value for the Equinox attribute will be ignored, since this
- system is always referred to J2000.0.
-
- \sstitem
- {\tt{"}}ICRS{\tt{"}}: The Internation Celestial Reference System, realised
- through the Hipparcos catalogue. Whilst not an equatorial system
- by definition, the ICRS is very close to the FK5 (J2000) system
- and is usually treated as an equatorial system. The distinction
- between ICRS and FK5 (J2000) only becomes important when accuracies
- of 50 milli-arcseconds or better are required. ICRS need not be
- qualified by an Equinox value.
-
- \sstitem
- {\tt{"}}J2000{\tt{"}}: An equatorial coordinate system based on the mean
- dynamical equator and equinox of the J2000 epoch. The dynamical
- equator and equinox differ slightly from those used by the FK5
- model, and so a {\tt{"}}J2000{\tt{"}} SkyFrame will differ slightly from an
- {\tt{"}}FK5(Equinox=J2000){\tt{"}} SkyFrame. The J2000 System need not be
- qualified by an Equinox value
-
- \sstitem
- {\tt{"}}SUPERGALACTIC{\tt{"}}: De Vaucouleurs Supergalactic coordinates.
-
- \sstitem
- {\tt{"}}UNKNOWN{\tt{"}}: Any other general spherical coordinate system. No
- \htmlref{Mapping}{Mapping} can be created between a pair of SkyFrames if either of the
- SkyFrames has System set to {\tt{"}}Unknown{\tt{"}}.
-
- }
- Currently, the default System value is {\tt{"}}ICRS{\tt{"}}. However, this
- default may change in future as new astrometric standards
- evolve. The intention is to track the most modern appropriate
- standard. For this reason, you should use the default only if
- this is what you intend (and can tolerate any associated slight
- change in future). If you intend to use the ICRS system
- indefinitely, then you should specify it explicitly.
- }
- \sstsubsection{
- SpecFrame
- }{
- The SpecFrame class supports the following System values and
- associated spectral coordinate systems (the default is {\tt{"}}WAVE{\tt{"}} -
- wavelength). They are all defined in FITS-WCS paper III:
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}FREQ{\tt{"}}: Frequency (GHz)
-
- \sstitem
- {\tt{"}}ENER{\tt{"}} or {\tt{"}}ENERGY{\tt{"}}: Energy (J)
-
- \sstitem
- {\tt{"}}WAVN{\tt{"}} or {\tt{"}}WAVENUM{\tt{"}}: Wave-number (1/m)
-
- \sstitem
- {\tt{"}}WAVE{\tt{"}} or {\tt{"}}WAVELEN{\tt{"}}: Vacuum wave-length (Angstrom)
-
- \sstitem
- {\tt{"}}AWAV{\tt{"}} or {\tt{"}}AIRWAVE{\tt{"}}: Wave-length in air (Angstrom)
-
- \sstitem
- {\tt{"}}VRAD{\tt{"}} or {\tt{"}}VRADIO{\tt{"}}: Radio velocity (km/s)
-
- \sstitem
- {\tt{"}}VOPT{\tt{"}} or {\tt{"}}VOPTICAL{\tt{"}}: Optical velocity (km/s)
-
- \sstitem
- {\tt{"}}ZOPT{\tt{"}} or {\tt{"}}REDSHIFT{\tt{"}}: Redshift (dimensionless)
-
- \sstitem
- {\tt{"}}BETA{\tt{"}}: Beta factor (dimensionless)
-
- \sstitem
- {\tt{"}}VELO{\tt{"}} or {\tt{"}}VREL{\tt{"}}: Apparent radial ({\tt{"}}relativistic{\tt{"}}) velocity (km/s)
-
- }
- The default value for the Unit attribute for each system is shown
- in parentheses. Note that the default value for the ActiveUnit flag
- is .TRUE.
- for a SpecFrame, meaning that changes to the Unit attribute for
- a SpecFrame will result in the SpecFrame being re-mapped within
- its enclosing FrameSet in order to reflect the change in units
- (see \htmlref{AST\_SETACTIVEUNIT}{AST_SETACTIVEUNIT} routine for further information).
- }
- \sstsubsection{
- \htmlref{TimeFrame}{TimeFrame}
- }{
- The TimeFrame class supports the following System values and
- associated coordinate systems (the default is {\tt{"}}MJD{\tt{"}}):
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}MJD{\tt{"}}: Modified Julian Date (d)
-
- \sstitem
- {\tt{"}}JD{\tt{"}}: Julian Date (d)
-
- \sstitem
- {\tt{"}}JEPOCH{\tt{"}}: Julian epoch (yr)
-
- \sstitem
- {\tt{"}}BEPOCH{\tt{"}}: Besselian (yr)
-
- }
- The default value for the Unit attribute for each system is shown
- in parentheses. Strictly, these systems should not allow changes
- to be made to the units. For instance, the usual definition of
- {\tt{"}}MJD{\tt{"}} and {\tt{"}}JD{\tt{"}} include the statement that the values will be in
- units of days. However, AST does allow the use of other units
- with all the above supported systems (except BEPOCH), on the
- understanding that conversion to the {\tt{"}}correct{\tt{"}} units involves
- nothing more than a simple scaling (1 yr = 365.25 d, 1 d = 24 h,
- 1 h = 60 min, 1 min = 60 s). Besselian epoch values are defined
- in terms of tropical years of 365.2422 days, rather than the
- usual Julian year of 365.25 days. Therefore, to avoid any
- confusion, the Unit attribute is automatically cleared to {\tt{"}}yr{\tt{"}} when
- a System value of BEPOCH System is selected, and an error is
- reported if any attempt is subsequently made to change the Unit
- attribute.
-
- Note that the default value for the ActiveUnit flag
- is .TRUE.
- for a TimeFrame, meaning that changes to the Unit attribute for
- a TimeFrame will result in the TimeFrame being re-mapped within
- its enclosing FrameSet in order to reflect the change in units
- (see AST\_SETACTIVEUNIT routine for further information).
- }
- \sstsubsection{
- \htmlref{FluxFrame}{FluxFrame}
- }{
- The FluxFrame class supports the following System values and
- associated systems for measuring observed value:
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}FLXDN{\tt{"}}: Flux per unit frequency (W/m$\wedge$2/Hz)
-
- \sstitem
- {\tt{"}}FLXDNW{\tt{"}}: Flux per unit wavelength (W/m$\wedge$2/Angstrom)
-
- \sstitem
- {\tt{"}}SFCBR{\tt{"}}: Surface brightness in frequency units (W/m$\wedge$2/Hz/arcmin$*$$*$2)
-
- \sstitem
- {\tt{"}}SFCBRW{\tt{"}}: Surface brightness in wavelength units (W/m$\wedge$2/Angstrom/arcmin$*$$*$2)
-
- }
- The above lists specified the default units for each System. If an
- explicit value is set for the Unit attribute but no value is set
- for System, then the default System value is determined by the Unit
- string (if the units are not appropriate for describing any of the
- supported Systems then an error will be reported when an attempt is
- made to access the System value). If no value has been specified for
- either Unit or System, then System=FLXDN and Unit=W/m$\wedge$2/Hz are
- used.
- }
- }
-}
-\sstroutine{
- TextLab(axis)\sstlabel{TextLabaxis}
-}{
- Draw descriptive axis labels for a Plot?
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
- whether textual labels should be drawn to describe the quantity
- being represented on each axis of a \htmlref{Plot}{Plot}. It takes a separate
- value for each physical axis of a Plot so that, for instance,
- the setting {\tt{"}}TextLab(2)=1{\tt{"}} specifies that descriptive labels
- should be drawn for the second axis.
-
- If the TextLab value of a Plot axis is non-zero, then
- descriptive labels will be drawn for that axis, otherwise they
- will be omitted. The default behaviour is to draw descriptive
- labels if tick marks and numerical labels are being drawn around
- the edges of the plotting area (see the \htmlref{Labelling}{Labelling} attribute),
- but to omit them otherwise.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The text used for the descriptive labels is derived from the
- Plot's \htmlref{Label(axis)}{Labelaxis} attribute, together with its \htmlref{Unit(axis)}{Unitaxis}
- attribute if appropriate (see the \htmlref{LabelUnits(axis)}{LabelUnitsaxis} attribute).
-
- \sstitem
- The drawing of numerical axis labels for a Plot (which
- indicate values on the axis) is controlled by the \htmlref{NumLab(axis)}{NumLabaxis}
- attribute.
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}TextLab{\tt{"}} instead of
- {\tt{"}}TextLab(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
- the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
- {\tt{"}}test{\tt{"}} operation will use just the TextLab(1) value.
- }
- }
-}
-\sstroutine{
- TextLabGap(axis)\sstlabel{TextLabGapaxis}
-}{
- Spacing of descriptive axis labels for a Plot
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
- where descriptive axis labels are placed relative to the axes they
- describe. It takes a separate value for each physical axis of a
- \htmlref{Plot}{Plot} so that, for instance, the setting {\tt{"}}TextLabGap(2)=0.01{\tt{"}}
- specifies where the descriptive label for the second axis should
- be drawn.
-
- For each axis, the TextLabGap value gives the spacing between the
- descriptive label and the edge of a box enclosing all other parts
- of the annotated grid (excluding other descriptive labels). The gap
- is measured to the nearest edge of the label (i.e. the top or the
- bottom). Positive values cause the descriptive label to be placed
- outside the bounding box, while negative values cause it to be placed
- inside.
-
- The TextLabGap value should be given as a fraction of the minimum
- dimension of the plotting area, the default value being $+$0.01.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If drawn, descriptive labels are always placed at the edges of
- the plotting area, even although the corresponding numerical
- labels may be drawn along axis lines in the interior of the
- plotting area (see the \htmlref{Labelling}{Labelling} attribute).
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}TextLabGap{\tt{"}} instead of
- {\tt{"}}TextLabGap(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
- the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
- {\tt{"}}test{\tt{"}} operation will use just the TextLabGap(1) value.
- }
- }
-}
-\sstroutine{
- TickAll\sstlabel{TickAll}
-}{
- Draw tick marks on all edges of a Plot?
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
- whether tick marks should be drawn on all edges of a \htmlref{Plot}{Plot}.
-
- If the TickAll value of a Plot is non-zero (the default), then
- tick marks will be drawn on all edges of the Plot. Otherwise,
- they will be drawn only on those edges where the numerical and
- descriptive axis labels are drawn (see the \htmlref{Edge(axis)}{Edgeaxis}
- attribute).
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- In some circumstances, numerical labels and tick marks are
- drawn along grid lines inside the plotting area, rather than
- around its edges (see the \htmlref{Labelling}{Labelling} attribute). In this case,
- the value of the TickAll attribute is ignored.
- }
- }
-}
-\sstroutine{
- TimeOrigin\sstlabel{TimeOrigin}
-}{
- The zero point for TimeFrame axis values
-}{
- \sstdescription{
- This specifies the origin from which all time values are measured.
- The default value (zero) results in the \htmlref{TimeFrame}{TimeFrame} describing
- absolute time values in the system given by the \htmlref{System}{System} attribute
- (e.g. MJD, Julian epoch, etc). If a TimeFrame is to be used to
- describe elapsed time since some origin, the TimeOrigin attribute
- should be set to hold the required origin value. The TimeOrigin value
- stored inside the TimeFrame structure is modified whenever TimeFrame
- attribute values are changed so that it refers to the original moment
- in time.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- TimeFrame
- }{
- All TimeFrames have this attribute.
- }
- }
- \sstdiytopic{
- Input Formats
- }{
- The formats accepted when setting a TimeOrigin value are listed
- below. They are all case-insensitive and are generally tolerant
- of extra white space and alternative field delimiters:
-
- \sstitemlist{
-
- \sstitem
- Besselian \htmlref{Epoch}{Epoch}: Expressed in decimal years, with or without
- decimal places ({\tt{"}}B1950{\tt{"}} or {\tt{"}}B1976.13{\tt{"}} for example).
-
- \sstitem
- Julian Epoch: Expressed in decimal years, with or without
- decimal places ({\tt{"}}J2000{\tt{"}} or {\tt{"}}J2100.9{\tt{"}} for example).
-
- \sstitem
- Units: An unqualified decimal value is interpreted as a value in
- the system specified by the TimeFrame's System attribute, in the
- units given by the TimeFrame's Unit attribute. Alternatively, an
- appropriate unit string can be appended to the end of the floating
- point value ({\tt{"}}123.4 d{\tt{"}} for example), in which case the supplied value
- is scaled into the units specified by the Unit attribute.
-
- \sstitem
- Julian Date: With or without decimal places ({\tt{"}}JD 2454321.9{\tt{"}} for
- example).
-
- \sstitem
- Modified Julian Date: With or without decimal places
- ({\tt{"}}MJD 54321.4{\tt{"}} for example).
-
- \sstitem
- Gregorian Calendar Date: With the month expressed either as an
- integer or a 3-character abbreviation, and with optional decimal
- places to represent a fraction of a day ({\tt{"}}1996-10-2{\tt{"}} or
- {\tt{"}}1996-Oct-2.6{\tt{"}} for example). If no fractional part of a day is
- given, the time refers to the start of the day (zero hours).
-
- \sstitem
- Gregorian Date and Time: Any calendar date (as above) but with
- a fraction of a day expressed as hours, minutes and seconds
- ({\tt{"}}1996-Oct-2 12:13:56.985{\tt{"}} for example). The date and time can be
- separated by a space or by a {\tt{"}}T{\tt{"}} (as used by ISO8601 format).
- }
- }
- \sstdiytopic{
- Output Format
- }{
- When enquiring TimeOrigin values, the returned formatted floating
- point value represents a value in the TimeFrame's System, in the unit
- specified by the TimeFrame's Unit attribute.
- }
-}
-\sstroutine{
- TimeScale\sstlabel{TimeScale}
-}{
- Time scale
-}{
- \sstdescription{
- This attribute identifies the time scale to which the time axis values
- of a \htmlref{TimeFrame}{TimeFrame} refer, and may take any of the values listed in the
- {\tt{"}}Time Scales{\tt{"}} section (below).
-
- The default TimeScale value depends on the current \htmlref{System}{System} value; if
- the current TimeFrame system is {\tt{"}}Besselian epoch{\tt{"}} the default is
- {\tt{"}}TT{\tt{"}}, otherwise it is {\tt{"}}TAI{\tt{"}}. Note, if the System attribute is set
- so that the TimeFrame represents Besselian \htmlref{Epoch}{Epoch}, then an error
- will be reported if an attempt is made to set the TimeScale to
- anything other than TT.
-
- Note, the supported time scales fall into two groups. The first group
- containing UT1, GMST, LAST and LMST define time in terms of the
- orientation of the earth. The second group (containing all the remaining
- time scales) define time in terms of an atomic process. Since the rate of
- rotation of the earth varies in an unpredictable way, conversion between
- two timescales in different groups relies on a value being supplied for
- the \htmlref{Dut1}{Dut1} attribute (defined by the parent \htmlref{Frame}{Frame} class). This attribute
- specifies the difference between the UT1 and UTC time scales, in seconds,
- and defaults to zero. See the documentation for the Dut1 attribute for
- further details.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- TimeFrame
- }{
- All TimeFrames have this attribute.
- }
- }
- \sstdiytopic{
- Time Scales
- }{
- The TimeFrame class supports the following TimeScale values (all are
- case-insensitive):
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}TAI{\tt{"}} - International Atomic Time
-
- \sstitem
- {\tt{"}}UTC{\tt{"}} - Coordinated Universal Time
-
- \sstitem
- {\tt{"}}UT1{\tt{"}} - Universal Time
-
- \sstitem
- {\tt{"}}GMST{\tt{"}} - Greenwich Mean Sidereal Time
-
- \sstitem
- {\tt{"}}LAST{\tt{"}} - Local Apparent Sidereal Time
-
- \sstitem
- {\tt{"}}LMST{\tt{"}} - Local Mean Sidereal Time
-
- \sstitem
- {\tt{"}}TT{\tt{"}} - Terrestrial Time
-
- \sstitem
- {\tt{"}}TDB{\tt{"}} - Barycentric Dynamical Time
-
- \sstitem
- {\tt{"}}TCB{\tt{"}} - Barycentric Coordinate Time
-
- \sstitem
- {\tt{"}}TCG{\tt{"}} - Geocentric Coordinate Time
-
- \sstitem
- {\tt{"}}LT{\tt{"}} - Local Time (the offset from UTC is given by attribute \htmlref{LTOffset}{LTOffset})
-
- }
- An very informative description of these and other time scales is
- available at http://www.ucolick.org/$\sim$sla/leapsecs/timescales.html.
- }
- \sstdiytopic{
- UTC \htmlref{Warnings}{Warnings}
- }{
- UTC should ideally be expressed using separate hours, minutes and
- seconds fields (or at least in seconds for a given date) if leap seconds
- are to be taken into account. Since the TimeFrame class represents
- each moment in time using a single floating point number (the axis value)
- there will be an ambiguity during a leap second. Thus an error of up to
- 1 second can result when using AST to convert a UTC time to another
- time scale if the time occurs within a leap second. Leap seconds
- occur at most twice a year, and are introduced to take account of
- variation in the rotation of the earth. The most recent leap second
- occurred on 1st January 1999. Although in the vast majority of cases
- leap second ambiguities won't matter, there are potential problems in
- on-line data acquisition systems and in critical applications involving
- taking the difference between two times.
- }
-}
-\sstroutine{
- Title\sstlabel{Title}
-}{
- Frame title
-}{
- \sstdescription{
- This attribute holds a string which is used as a title in (e.g.)
- graphical output to describe the coordinate system which a \htmlref{Frame}{Frame}
- represents. Examples might be {\tt{"}}Detector Coordinates{\tt{"}} or
- {\tt{"}}Galactic Coordinates{\tt{"}}.
-
- If a Title value has not been set for a Frame, then a suitable
- default is supplied, depending on the class of the Frame.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The default supplied by the Frame class is {\tt{"}}$<$n$>$-d coordinate
- system{\tt{"}}, where $<$n$>$ is the number of Frame axes (\htmlref{Naxes}{Naxes}
- attribute).
- }
- \sstsubsection{
- \htmlref{CmpFrame}{CmpFrame}
- }{
- The CmpFrame class re-defines the default Title value to be
- {\tt{"}}$<$n$>$-d compound coordinate system{\tt{"}}, where $<$n$>$ is the number
- of CmpFrame axes (Naxes attribute).
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Title attribute of a FrameSet is the same as that of its
- current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A Frame's Title is intended purely for interpretation by human
- readers and not by software.
- }
- }
-}
-\sstroutine{
- TitleGap\sstlabel{TitleGap}
-}{
- Vertical spacing for a Plot title
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
- where the title of a \htmlref{Plot}{Plot} is drawn.
-
- Its value gives the spacing between the bottom edge of the title
- and the top edge of a bounding box containing all the other parts
- of the annotated grid. Positive values cause the title to be
- drawn outside the box, while negative values cause it to be drawn
- inside.
-
- The TitleGap value should be given as a fraction of the minimum
- dimension of the plotting area, the default value being $+$0.05.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- \sstsubsection{
- \htmlref{Plot3D}{Plot3D}
- }{
- The Plot3D class ignores this attributes since it does not draw
- a \htmlref{Title}{Title}.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The text used for the title is obtained from the Plot's Title
- attribute.
- }
- }
-}
-\sstroutine{
- Tol\sstlabel{Tol}
-}{
- Plotting tolerance
-}{
- \sstdescription{
- This attribute specifies the plotting tolerance (or resolution)
- to be used for the graphical output produced by a \htmlref{Plot}{Plot}. Smaller
- values will result in smoother and more accurate curves being
- drawn, but may slow down the plotting process. Conversely,
- larger values may speed up the plotting process in cases where
- high resolution is not required.
-
- The Tol value should be given as a fraction of the minimum
- dimension of the plotting area, and should lie in the range
- from 1.0E-7 to 1.0. By default, a value of 0.01 is used.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
-}
-\sstroutine{
- Top(axis)\sstlabel{Topaxis}
-}{
- Highest axis value to display
-}{
- \sstdescription{
- This attribute gives the highest axis value to be displayed (for
- instance, by the \htmlref{AST\_GRID}{AST_GRID} method).
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{Frame}{Frame}
- }{
- The default supplied by the Frame class is to display all axis
- values, without any limit.
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- The SkyFrame class re-defines the default Top value to $+$90 degrees
- for latitude axes, and 180 degrees for co-latitude axes. The
- default for longitude axes is to display all axis values.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When specifying this attribute by name, it should be
- subscripted with the number of the Frame axis to which it
- applies.
- }
- }
-}
-\sstroutine{
- TranForward\sstlabel{TranForward}
-}{
- Forward transformation defined?
-}{
- \sstdescription{
- This attribute indicates whether a \htmlref{Mapping}{Mapping} is able to transform
- coordinates in the {\tt{"}}forward{\tt{"}} direction (i.e. converting input
- coordinates into output coordinates). If this attribute is
- non-zero, the forward transformation is available. Otherwise, it
- is not.
- }
- \sstattributetype{
- Integer (boolean), read-only.
- }
- \sstapplicability{
- \sstsubsection{
- Mapping
- }{
- All Mappings have this attribute.
- }
- \sstsubsection{
- \htmlref{CmpMap}{CmpMap}
- }{
- The TranForward attribute value for a CmpMap is given by the
- boolean AND of the value for each component Mapping.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The TranForward attribute of a FrameSet applies to the
- transformation which converts between the FrameSet's base
- \htmlref{Frame}{Frame} and its current Frame (as specified by the \htmlref{Base}{Base} and
- \htmlref{Current}{Current} attributes). This value is given by the boolean AND
- of the TranForward values which apply to each of the
- individual sub-Mappings required to perform this conversion.
- The TranForward attribute value for a FrameSet may therefore
- change if a new Base or Current Frame is selected.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- An error will result if a Mapping with a TranForward value of
- zero is used to transform coordinates in the forward direction.
- }
- }
-}
-\sstroutine{
- TranInverse\sstlabel{TranInverse}
-}{
- Inverse transformation defined?
-}{
- \sstdescription{
- This attribute indicates whether a \htmlref{Mapping}{Mapping} is able to transform
- coordinates in the {\tt{"}}inverse{\tt{"}} direction (i.e. converting output
- coordinates back into input coordinates). If this attribute is
- non-zero, the inverse transformation is available. Otherwise, it
- is not.
- }
- \sstattributetype{
- Integer (boolean), readonly.
- }
- \sstapplicability{
- \sstsubsection{
- Mapping
- }{
- All Mappings have this attribute.
- }
- \sstsubsection{
- \htmlref{CmpMap}{CmpMap}
- }{
- The TranInverse attribute value for a CmpMap is given by the
- boolean AND of the value for each component Mapping.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The TranInverse attribute of a FrameSet applies to the
- transformation which converts between the FrameSet's current
- \htmlref{Frame}{Frame} and its base Frame (as specified by the \htmlref{Current}{Current} and
- \htmlref{Base}{Base} attributes). This value is given by the boolean AND of
- the TranInverse values which apply to each of the individual
- sub-Mappings required to perform this conversion.
- The TranInverse attribute value for a FrameSet may therefore
- change if a new Base or Current Frame is selected.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- An error will result if a Mapping with a TranInverse value of
- zero is used to transform coordinates in the inverse direction.
- }
- }
-}
-\sstroutine{
- Unit(axis)\sstlabel{Unitaxis}
-}{
- Axis physical units
-}{
- \sstdescription{
- This attribute contains a textual representation of the physical
- units used to represent coordinate values on a particular axis
- of a \htmlref{Frame}{Frame}. The \htmlref{AST\_SETACTIVEUNIT}{AST_SETACTIVEUNIT} routine controls how the Unit values
- are used.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The default supplied by the Frame class is an empty string.
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- The SkyFrame class re-defines the default Unit value (e.g. to
- {\tt{"}}hh:mm:ss.sss{\tt{"}}) to describe the character string returned by
- the \htmlref{AST\_FORMAT}{AST_FORMAT} function when formatting coordinate values.
- }
- \sstsubsection{
- \htmlref{SpecFrame}{SpecFrame}
- }{
- The SpecFrame class re-defines the default Unit value so that it
- is appropriate for the current \htmlref{System}{System} value. See the System
- attribute for details. An error will be reported if an attempt
- is made to use an inappropriate Unit.
- }
- \sstsubsection{
- \htmlref{TimeFrame}{TimeFrame}
- }{
- The TimeFrame class re-defines the default Unit value so that it
- is appropriate for the current System value. See the System
- attribute for details. An error will be reported if an attempt
- is made to use an inappropriate Unit (e.g. {\tt{"}}km{\tt{"}}).
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Unit attribute of a FrameSet axis is the same as that of
- its current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When specifying this attribute by name, it should be
- subscripted with the number of the Frame axis to which it
- applies.
- }
- }
-}
-\sstroutine{
- UnitRadius\sstlabel{UnitRadius}
-}{
- SphMap input vectors lie on a unit sphere?
-}{
- \sstdescription{
- This is a boolean attribute which indicates whether the
- 3-dimensional vectors which are supplied as input to a \htmlref{SphMap}{SphMap}
- are known to always have unit length, so that they lie on a unit
- sphere centred on the origin.
-
- If this condition is true (indicated by setting UnitRadius
- non-zero), it implies that a \htmlref{CmpMap}{CmpMap} which is composed of a
- SphMap applied in the forward direction followed by a similar
- SphMap applied in the inverse direction may be simplified
- (e.g. by \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}) to become a \htmlref{UnitMap}{UnitMap}. This is because the
- input and output vectors will both have unit length and will
- therefore have the same coordinate values.
-
- If UnitRadius is zero (the default), then although the output
- vector produced by the CmpMap (above) will still have unit
- length, the input vector may not have. This will, in general,
- change the coordinate values, so it prevents the pair of SphMaps
- being simplified.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- SphMap
- }{
- All SphMaps have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This attribute is intended mainly for use when SphMaps are
- involved in a sequence of Mappings which project (e.g.) a
- dataset on to the celestial sphere. By regarding the celestial
- sphere as a unit sphere (and setting UnitRadius to be non-zero)
- it becomes possible to cancel the SphMaps present, along with
- associated sky projections, when two datasets are aligned using
- celestial coordinates. This often considerably improves
- performance.
-
- \sstitem
- Such a situations often arises when interpreting FITS data and
- is handled automatically by the \htmlref{FitsChan}{FitsChan} class.
-
- \sstitem
- The value of the UnitRadius attribute is used only to control
- the simplification of Mappings and has no effect on the value of
- the coordinates transformed by a SphMap. The lengths of the
- input 3-dimensional Cartesian vectors supplied are always
- ignored, even if UnitRadius is non-zero.
- }
- }
-}
-\sstroutine{
- UseDefs\sstlabel{UseDefs}
-}{
- Use default values for unspecified attributes?
-}{
- \sstdescription{
- This attribute specifies whether default values should be used
- internally for object attributes which have not been assigned a
- value explicitly. If a non-zero value (the default) is supplied for
- UseDefs, then default values will be used for attributes which have
- not explicitly been assigned a value. If zero is supplied for UseDefs,
- then an error will be reported if an attribute for which no explicit
- value has been supplied is needed internally within AST.
-
- Many attributes (including the UseDefs attribute itself) are unaffected
- by the setting of the UseDefs attribute, and default values will always
- be used without error for such attributes. The {\tt{"}}Applicability:{\tt{"}} section
- below lists the attributes which are affected by the setting of UseDefs.
-
- Note, UseDefs only affects access to attributes internally within
- AST. The public accessor functions such as
- AST\_GETC
- is unaffected by the UseDefs attribute - default values will always
- be returned if no value has been set. Application code should use the
- \htmlref{AST\_TEST}{AST_TEST}
- function if required to determine if a value has been set for an
- attribute.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{Object}{Object}
- }{
- All Objects have this attribute, but ignore its setting except
- as described below for individual classes.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The default value of UseDefs for a FrameSet is redefined to be
- the UseDefs value of its current \htmlref{Frame}{Frame}.
- }
- \sstsubsection{
- \htmlref{CmpFrame}{CmpFrame}
- }{
- The default value of UseDefs for a CmpFrame is redefined to be
- the UseDefs value of its first component Frame.
- }
- \sstsubsection{
- \htmlref{Region}{Region}
- }{
- The default value of UseDefs for a Region is redefined to be
- the UseDefs value of its encapsulated Frame.
- }
- \sstsubsection{
- Frame
- }{
- If UseDefs is zero, an error is reported when aligning Frames if the
- \htmlref{Epoch}{Epoch}, \htmlref{ObsLat}{ObsLat} or \htmlref{ObsLon}{ObsLon} attribute is required but has not been
- assigned a value explicitly.
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- If UseDefs is zero, an error is reported when aligning SkyFrames
- if any of the following attributes are required but have not been
- assigned a value explicitly: Epoch, \htmlref{Equinox}{Equinox}.
- }
- \sstsubsection{
- \htmlref{SpecFrame}{SpecFrame}
- }{
- If UseDefs is zero, an error is reported when aligning SpecFrames
- if any of the following attributes are required but have not been
- assigned a value explicitly: Epoch, \htmlref{RefRA}{RefRA}, \htmlref{RefDec}{RefDec}, \htmlref{RestFreq}{RestFreq},
- \htmlref{SourceVel}{SourceVel}, \htmlref{StdOfRest}{StdOfRest}.
- }
- \sstsubsection{
- \htmlref{DSBSpecFrame}{DSBSpecFrame}
- }{
- If UseDefs is zero, an error is reported when aligning DSBSpecFrames
- or when accessing the \htmlref{ImagFreq}{ImagFreq} attribute if any of the following
- attributes are required but have not been assigned a value explicitly:
- Epoch, \htmlref{DSBCentre}{DSBCentre}, \htmlref{IF}{IF}.
- }
- }
-}
-\sstroutine{
- Warnings\sstlabel{Warnings}
-}{
- Controls the issuing of warnings about various conditions
-}{
- \sstdescription{
- This attribute controls the issuing of warnings about selected
- conditions when an \htmlref{Object}{Object} or keyword is read from or written to a
- \htmlref{FitsChan}{FitsChan}. The value supplied for the Warnings attribute should
- consist of a space separated list of condition names (see the
- \htmlref{AllWarnings}{AllWarnings} attribute for a list of the currently defined names).
- Each name indicates a condition which should be reported. The default
- value for Warnings is the string {\tt{"}}Tnx Zpx BadCel BadMat BadPV BadCTYPE{\tt{"}}.
-
- The text of any warning will be stored within the FitsChan in the
- form of one or more new header cards with keyword ASTWARN. If
- required, applications can check the FitsChan for ASTWARN cards
- (using \htmlref{AST\_FINDFITS}{AST_FINDFITS}) after the call to \htmlref{AST\_READ}{AST_READ} or \htmlref{AST\_WRITE}{AST_WRITE} has been
- performed, and report the text of any such cards to the user. ASTWARN
- cards will be propagated to any output header unless they are
- deleted from the FitsChan using astDelFits.
- }
- \sstattributetype{
- String
- }
- \sstapplicability{
- \sstsubsection{
- FitsChan
- }{
- All FitsChans have this attribute.
- }
- }
- \sstnotes{
- This attribute only controls the warnings that are to be stored as
- a set of header cards in the FitsChan as described above. It has no
- effect on the storage of warnings in the parent \htmlref{Channel}{Channel} structure.
- All warnings are stored in the parent Channel structure, from where
- they can be retrieved using the
- \htmlref{AST\_WARNINGS}{AST_WARNINGS}
- function.
- }
-}
-\sstroutine{
- WcsAxis(lonlat)\sstlabel{WcsAxislonlat}
-}{
- FITS-WCS projection axes
-}{
- \sstdescription{
- This attribute gives the indices of the longitude and latitude
- coordinates of the FITS-WCS projection within the coordinate
- space used by a \htmlref{WcsMap}{WcsMap}. These indices are defined when the
- WcsMap is first created using \htmlref{AST\_WCSMAP}{AST_WCSMAP} and cannot
- subsequently be altered.
-
- If {\tt{"}}lonlat{\tt{"}} is 1, the index of the longitude axis is
- returned. Otherwise, if it is 2, the index of the latitude axis
- is returned.
- }
- \sstattributetype{
- Integer, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- WcsMap
- }{
- All WcsMaps have this attribute.
- }
- }
-}
-\sstroutine{
- WcsType\sstlabel{WcsType}
-}{
- FITS-WCS projection type
-}{
- \sstdescription{
- This attribute specifies which type of FITS-WCS projection will
- be performed by a \htmlref{WcsMap}{WcsMap}. The value is specified when a WcsMap
- is first created using \htmlref{AST\_WCSMAP}{AST_WCSMAP} and cannot subsequently be
- changed.
-
- The values used are represented by symbolic constants with names of
- the form {\tt{"}}AST\_\_XXX{\tt{"}}, where {\tt{"}}XXX{\tt{"}} is the (upper case) 3-character
- code used by the FITS-WCS {\tt{"}}CTYPEi{\tt{"}} keyword to identify the
- projection. For example, possible values are AST\_\_TAN (for the
- tangent plane or gnomonic projection) and AST\_\_AIT (for the
- Hammer-Aitoff projection). AST\_\_TPN is an exception in that it
- is not part of the FITS-WCS standard (it represents a TAN
- projection with polynomial correction terms as defined in an early
- draft of the FITS-WCS paper).
- }
- \sstattributetype{
- Integer, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- WcsMap
- }{
- All WcsMaps have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- For a list of available projections, see the FITS-WCS paper.
- }
- }
-}
-\sstroutine{
- Width(element)\sstlabel{Widthelement}
-}{
- Line width for a Plot element
-}{
- \sstdescription{
- This attribute determines the line width used when drawing each
- element of graphical output produced by a \htmlref{Plot}{Plot}. It takes a
- separate value for each graphical element so that, for instance,
- the setting {\tt{"}}Width(border)=2.0{\tt{"}} causes the Plot border to be
- drawn using a line width of 2.0. A value of 1.0 results in a
- line thickness which is approximately 0.0005 times the length of
- the diagonal of the entire display surface.
-
- The actual appearance of lines drawn with any particular width,
- and the range of available widths, is determined by the
- underlying graphics system. The default behaviour is for all
- graphical elements to be drawn using the default line width
- supplied by this graphics system. This will not necessarily
- correspond to a Width value of 1.0.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- For a list of the graphical elements available, see the
- description of the Plot class.
-
- \sstitem
- If no graphical element is specified, (e.g. {\tt{"}}Width{\tt{"}} instead of
- {\tt{"}}Width(border){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
- the attribute value of all graphical elements, while a {\tt{"}}get{\tt{"}} or
- {\tt{"}}test{\tt{"}} operation will use just the Width(\htmlref{Border}{Border}) value.
- }
- }
-}
-\sstroutine{
- XmlFormat\sstlabel{XmlFormat}
-}{
- System for formatting Objects as XML
-}{
- \sstdescription{
- This attribute specifies the formatting system to use when AST
- Objects are written out as XML through an \htmlref{XmlChan}{XmlChan}. It
- affects the behaviour of the \htmlref{AST\_WRITE}{AST_WRITE} routine when
- they are used to transfer any AST \htmlref{Object}{Object} to or from an external
- XML representation.
-
- The XmlChan class allows AST objects to be represented in the form
- of XML in several ways (conventions) and the XmlFormat attribute is
- used to specify which of these should be used. The formatting options
- available are outlined in the {\tt{"}}Formats Available{\tt{"}} section below.
-
- By default, an XmlChan will attempt to determine which format system
- is already in use, and will set the default XmlFormat value
- accordingly (so that subsequent I/O operations adopt the same
- conventions). It does this by looking for certain critical items
- which only occur in particular formats. For details of how this
- works, see the {\tt{"}}Choice of Default Format{\tt{"}} section below. If you wish
- to ensure that a particular format system is used, independently of
- any XML already read, you should set an explicit XmlFormat value
- yourself.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- XmlChan
- }{
- All XmlChans have this attribute.
- }
- }
- \sstdiytopic{
- Formats Available
- }{
- The XmlFormat attribute can take any of the following (case
- insensitive) string values to select the corresponding formatting
- system:
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}NATIVE{\tt{"}}: This is a direct conversion to XML of the heirarchical
- format used by a standard XML channel (and also by the NATIVE
- encoding of a \htmlref{FitsChan}{FitsChan}).
-
- \sstitem
- {\tt{"}}QUOTED{\tt{"}}: This is the same as NATIVE format except that extra
- information is included which allows client code to convert the
- XML into a form which can be read by a standard AST \htmlref{Channel}{Channel}. This
- extra information indicates which AST attribute values should be
- enclosed in quotes before being passed to a Channel.
-
- \sstitem
- {\tt{"}}IVOA{\tt{"}}: This is a format that uses an early draft of the STC-X schema
- developed by the International Virtual Observatory Alliance (IVOA -
- see {\tt{"}}http://www.ivoa.net/{\tt{"}}) to describe coordinate systems, regions,
- mappings, etc. Support is limited to V1.20 described at
- {\tt{"}}http://www.ivoa.net/Documents/WD/STC/STC-20050225.html{\tt{"}}. Since the
- version of STC-X finally adopted by the IVOA differs in several
- significant respects from V1.20, this format is now mainly of
- historical interest. Note, the alternative {\tt{"}}STC-S{\tt{"}} format (a
- simpler non-XML encoding of the STC metadata) is supported by the
- \htmlref{StcsChan}{StcsChan} class.
- }
- }
- \sstdiytopic{
- Choice of Default Format;
- }{
- If the XmlFormat attribute of an XmlChan is not set, the default
- value it takes is determined by the presence of certain critical
- items within the document most recently read using
- \htmlref{AST\_READ}{AST_READ}.
- The sequence of decision used to arrive at the default value is as
- follows:
-
- \sstitemlist{
-
- \sstitem
- If the previous document read contained any elements in any of the STC
- namespaces ({\tt{"}}urn:nvo-stc{\tt{"}}, {\tt{"}}urn:nvo-coords{\tt{"}} or {\tt{"}}urn:nvo-region{\tt{"}}), then
- the default value is IVOA.
-
- \sstitem
- If the previous document read contained any elements in the AST
- namespace which had an associated XML attribute called {\tt{"}}quoted{\tt{"}}, then
- the default value is QUOTED.
-
- \sstitem
- Otherwise, if none of these conditions is met (as would be the
- case if no document had yet been read), then NATIVE format is
- used.
-
- }
- Setting an explicit value for the XmlFormat attribute always
- over-rides this default behaviour.
- }
- \sstdiytopic{
- The IVOA Format
- }{
- The IVOA support caters only for certain parts of V1.20 of the
- draft Space-Time Coordinate (STC) schema (see
- http://www.ivoa.net/Documents/WD/STC/STC-20050225.html). Note, this
- draft has now been superceded by an officially adopted version that
- differs in several significant respects from V1.20. Consequently,
- the {\tt{"}}IVOA{\tt{"}} XmlChan format is of historical interest only.
-
- The following points should be noted when using an XmlChan to read
- or write STC information (note, this list is currently incomplete):
-
- \sstitemlist{
-
- \sstitem
- Objects can currently only be read using this format, not written.
-
- \sstitem
- The AST object generated by reading an $<$STCMetadata$>$ element will
- be an instance of one of the AST {\tt{"}}\htmlref{Stc}{Stc}{\tt{"}} classes: \htmlref{StcResourceProfile}{StcResourceProfile},
- \htmlref{StcSearchLocation}{StcSearchLocation}, \htmlref{StcCatalogEntryLocation}{StcCatalogEntryLocation}, \htmlref{StcObsDataLocation}{StcObsDataLocation}.
-
- \sstitem
- When reading an $<$STCMetadata$>$ element, the axes in the returned
- AST Object will be in the order space, time, spectral, redshift,
- irrespective of the order in which the axes occur in the $<$STCMetadata$>$
- element. If the supplied $<$STCMetadata$>$ element does not contain all of
- these axes, the returned AST Object will also omit them, but the
- ordering of those axes which are present will be as stated above. If
- the spatial frame represents a celestial coordinate system the
- spatial axes will be in the order (longitude, latitude).
-
- \sstitem
- Until such time as the AST \htmlref{TimeFrame}{TimeFrame} is complete, a simple
- 1-dimensional \htmlref{Frame}{Frame} (with \htmlref{Domain}{Domain} set to TIME) will be used to
- represent the STC $<$TimeFrame$>$ element. Consequently, most of the
- information within a $<$TimeFrame$>$ element is currently ignored.
-
- \sstitem
- $<$SpaceFrame$>$ elements can only be read if they describe a celestial
- longitude and latitude axes supported by the AST \htmlref{SkyFrame}{SkyFrame} class. The
- space axes will be returned in the order (longitude, latitude).
-
- \sstitem
- Velocities associated with SpaceFrames cannot be read.
-
- \sstitem
- Any $<$GenericCoordFrame$>$ elements within an $<$AstroCoordSystem$>$ element
- are currently ignored.
-
- \sstitem
- Any second or subsequent $<$AstroCoordSystem$>$ found within an
- STCMetaData element is ignored.
-
- \sstitem
- Any second or subsequent $<$AstroCoordArea$>$ found within an
- STCMetaData element is ignored.
-
- \sstitem
- Any $<$OffsetCenter$>$ found within a $<$SpaceFrame$>$ is ignored.
-
- \sstitem
- Any CoordFlavor element found within a $<$SpaceFrame$>$ is ignored.
-
- \sstitem
- $<$SpaceFrame$>$ elements can only be read if they refer to
- one of the following space reference frames: ICRS, GALACTIC\_II,
- SUPER\_GALACTIC, HEE, FK4, FK5, ECLIPTIC.
-
- \sstitem
- $<$SpaceFrame$>$ elements can only be read if the reference
- position is TOPOCENTER. Also, any planetary ephemeris is ignored.
-
- \sstitem
- Regions: there is currently no support for STC regions of type
- Sector, ConvexHull or SkyIndex.
-
- \sstitem
- The AST \htmlref{Region}{Region} read from a CoordInterval element is considered to
- be open if either the lo\_include or the hi\_include attribute is
- set to false.
-
- \sstitem
- $<$RegionFile$>$ elements are not supported.
-
- \sstitem
- Vertices within $<$\htmlref{Polygon}{Polygon}$>$ elements are always considered to be
- joined using great circles (that is, $<$SmallCircle$>$ elements are
- ignored).
- }
- }
-}
-\sstroutine{
- XmlIndent\sstlabel{XmlIndent}
-}{
- Controls output of indentation and line feeds
-}{
- \sstdescription{
- This attribute controls the appearance of the XML produced when an
- AST object is written to an \htmlref{XmlChan}{XmlChan}. If it is non-zero, then extra
- linefeed characters will be inserted as necessary to ensure that each
- XML tag starts on a new line, and each tag will be indented to show
- its depth in the containment hierarchy. If XmlIndent is zero (the
- default), then no linefeeds or indentation strings will be added to
- output text.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- XmlChan
- }{
- All XmlChans have this attribute.
- }
- }
-}
-\sstroutine{
- XmlLength\sstlabel{XmlLength}
-}{
- Controls output buffer length
-}{
- \sstdescription{
- This attribute specifies the maximum length to use when writing out
- text through the sink function supplied when the \htmlref{XmlChan}{XmlChan} was created.
-
- The number of characters in each string written out through the sink
- function will not be greater than the value of this attribute (but
- may be less). A value of zero (the default) means there is no limit -
- each string can be of any length.
-
- Note, the default value of zero is unlikely to be appropriate when
- an XmlChan is used within Fortran code. In this case, XmlLength
- should usually be set to the size of the CHARACTER variable used to
- receive the text returned by \htmlref{AST\_GETLINE}{AST_GETLINE} within the sink function.
- This avoids the possibility of long lines being truncated invisibly
- within AST\_GETLINE.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- XmlChan
- }{
- All XmlChans have this attribute.
- }
- }
-}
-\sstroutine{
- XmlPrefix\sstlabel{XmlPrefix}
-}{
- The namespace prefix to use when writing
-}{
- \sstdescription{
- This attribute is a string which is to be used as the namespace
- prefix for all XML elements created as a result of writing an AST
- \htmlref{Object}{Object} out through an \htmlref{XmlChan}{XmlChan}. The URI associated with the namespace
- prefix is given by the symbolic constant AST\_\_XMLNS defined in
- AST\_PAR.
- A definition of the namespace prefix is included in each top-level
- element produced by the XmlChan.
-
- The default value is a blank string which causes no prefix to be
- used. In this case each top-level element will set the default
- namespace to be the value of AST\_\_XMLNS.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- All Objects have this attribute.
- }
- }
-}
-\sstroutine{
- Zoom\sstlabel{Zoom}
-}{
- ZoomMap scale factor
-}{
- \sstdescription{
- This attribute holds the \htmlref{ZoomMap}{ZoomMap} scale factor, by which
- coordinate values are multiplied (by the forward transformation)
- or divided (by the inverse transformation). This factor is set
- when a ZoomMap is created, but may later be modified. The
- default value is unity.
-
- Note that if a ZoomMap is inverted (e.g. by using \htmlref{AST\_INVERT}{AST_INVERT}),
- then the reciprocal of this zoom factor will, in effect, be
- used.
- }
- \sstattributetype{
- Double precision.
- }
- \sstapplicability{
- \sstsubsection{
- ZoomMap
- }{
- All ZoomMaps have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The Zoom attribute may not be set to zero.
- }
- }
-}
-\normalsize
-
-\cleardoublepage
-\section{\label{ss:classdescriptions}AST Class Descriptions}
-\small
-\sstroutine{
- Axis\sstlabel{Axis}
-}{
- Store axis information
-}{
- \sstdescription{
- The Axis class is used to store information associated with a
- particular axis of a \htmlref{Frame}{Frame}. It is used internally by the AST
- library and has no constructor function. You should encounter it
- only within textual output (e.g. from \htmlref{AST\_WRITE}{AST_WRITE}).
- }
- \sstconstructor{
- None.
- }
- \sstdiytopic{
- Inheritance
- }{
- The Axis class inherits from the \htmlref{Object}{Object} class.
- }
-}
-\sstroutine{
- Box\sstlabel{Box}
-}{
- A box region with sides parallel to the axes of a Frame
-}{
- \sstdescription{
- The Box class implements a \htmlref{Region}{Region} which represents a box with sides
- parallel to the axes of a \htmlref{Frame}{Frame} (i.e. an area which encloses a given
- range of values on each axis). A Box is similar to an \htmlref{Interval}{Interval}, the
- only real difference being that the Interval class allows some axis
- limits to be unspecified. Note, a Box will only look like a box if
- the Frame geometry is approximately flat. For instance, a Box centred
- close to a pole in a \htmlref{SkyFrame}{SkyFrame} will look more like a fan than a box
- (the \htmlref{Polygon}{Polygon} class can be used to create a box-like region close to a
- pole).
- }
- \sstconstructor{
- \htmlref{AST\_BOX}{AST_BOX}
- }
- \sstdiytopic{
- Inheritance
- }{
- The Box class inherits from the Region class.
- }
- \sstdiytopic{
- Attributes
- }{
- The Box class does not define any new attributes beyond
- those which are applicable to all Regions.
- }
- \sstdiytopic{
- Functions
- }{
- The Box class does not define any new routines beyond those
- which are applicable to all Regions.
- }
-}
-\sstroutine{
- Channel\sstlabel{Channel}
-}{
- Basic (textual) I/O channel
-}{
- \sstdescription{
- The Channel class implements low-level input/output for the AST
- library. Writing an \htmlref{Object}{Object} to a Channel will generate a textual
- representation of that Object, and reading from a Channel will
- create a new Object from its textual representation.
-
- Normally, when you use a Channel, you should provide {\tt{"}}source{\tt{"}}
- and {\tt{"}}sink{\tt{"}} routines which connect it to an external data store
- by reading and writing the resulting text. By default, however,
- a Channel will read from standard input and write to standard
- output.
- }
- \sstconstructor{
- \htmlref{AST\_CHANNEL}{AST_CHANNEL}
- }
- \sstdiytopic{
- Inheritance
- }{
- The Channel class inherits from the Object class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Objects, every
- Channel also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{Comment}{Comment}: Include textual comments in output?
-
- \sstitem
- \htmlref{Full}{Full}: Set level of output detail
-
- \sstitem
- \htmlref{ReportLevel}{ReportLevel}: Selects the level of error reporting
-
- \sstitem
- \htmlref{Skip}{Skip}: Skip irrelevant data?
-
- \sstitem
- \htmlref{Strict}{Strict}: Generate errors instead of warnings?
- }
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those routines applicable to all Objects, the
- following routines may also be applied to all Channels:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AST\_WARNINGS}{AST_WARNINGS}: Return warnings from the previous read or write
-
- \sstitem
- \htmlref{AST\_READ}{AST_READ}: Read an Object from a Channel
-
- \sstitem
- \htmlref{AST\_WRITE}{AST_WRITE}: Write an Object to a Channel
- }
- }
-}
-\sstroutine{
- Circle\sstlabel{Circle}
-}{
- A circular or spherical region within a Frame
-}{
- \sstdescription{
- The Circle class implements a \htmlref{Region}{Region} which represents a circle or
- sphere within a \htmlref{Frame}{Frame}.
- }
- \sstconstructor{
- \htmlref{AST\_CIRCLE}{AST_CIRCLE}
- }
- \sstdiytopic{
- Inheritance
- }{
- The Circle class inherits from the Region class.
- }
- \sstdiytopic{
- Attributes
- }{
- The Circle class does not define any new attributes beyond
- those which are applicable to all Regions.
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those routines applicable to all Regions, the
- following routines may also be applied to all Circles:
- }
-}
-\sstroutine{
- CmpFrame\sstlabel{CmpFrame}
-}{
- Compound Frame
-}{
- \sstdescription{
- A CmpFrame is a compound \htmlref{Frame}{Frame} which allows two component Frames
- (of any class) to be merged together to form a more complex
- Frame. The axes of the two component Frames then appear together
- in the resulting CmpFrame (those of the first Frame, followed by
- those of the second Frame).
-
- Since a CmpFrame is itself a Frame, it can be used as a
- component in forming further CmpFrames. Frames of arbitrary
- complexity may be built from simple individual Frames in this
- way.
-
- Also since a Frame is a \htmlref{Mapping}{Mapping}, a CmpFrame can also be used as a
- Mapping. Normally, a CmpFrame is simply equivalent to a \htmlref{UnitMap}{UnitMap},
- but if either of the component Frames within a CmpFrame is a \htmlref{Region}{Region}
- (a sub-class of Frame), then the CmpFrame will use the Region as a
- Mapping when transforming values for axes described by the Region.
- Thus input axis values corresponding to positions which are outside the
- Region will result in bad output axis values.
- }
- \sstconstructor{
- \htmlref{AST\_CMPFRAME}{AST_CMPFRAME}
- }
- \sstdiytopic{
- Inheritance
- }{
- The CmpFrame class inherits from the Frame class.
- }
- \sstdiytopic{
- Attributes
- }{
- The CmpFrame class does not define any new attributes beyond
- those which are applicable to all Frames. However, the attributes
- of the component Frames can be accessed as if they were attributes
- of the CmpFrame. For instance, if a CmpFrame contains a \htmlref{SpecFrame}{SpecFrame}
- and a \htmlref{SkyFrame}{SkyFrame}, then the CmpFrame will recognise the {\tt{"}}\htmlref{Equinox}{Equinox}{\tt{"}}
- attribute and forward access requests to the component SkyFrame.
- Likewise, it will recognise the {\tt{"}}\htmlref{RestFreq}{RestFreq}{\tt{"}} attribute and forward
- access requests to the component SpecFrame. An axis index can
- optionally be appended to the end of any attribute name, in which
- case the request to access the attribute will be forwarded to the
- primary Frame defining the specified axis.
- }
- \sstdiytopic{
- Functions
- }{
- The CmpFrame class does not define any new routines beyond those
- which are applicable to all Frames.
- }
-}
-\sstroutine{
- CmpMap\sstlabel{CmpMap}
-}{
- Compound Mapping
-}{
- \sstdescription{
- A CmpMap is a compound \htmlref{Mapping}{Mapping} which allows two component
- Mappings (of any class) to be connected together to form a more
- complex Mapping. This connection may either be {\tt{"}}in series{\tt{"}}
- (where the first Mapping is used to transform the coordinates of
- each point and the second mapping is then applied to the
- result), or {\tt{"}}in parallel{\tt{"}} (where one Mapping transforms the
- earlier coordinates for each point and the second Mapping
- simultaneously transforms the later coordinates).
-
- Since a CmpMap is itself a Mapping, it can be used as a
- component in forming further CmpMaps. Mappings of arbitrary
- complexity may be built from simple individual Mappings in this
- way.
- }
- \sstconstructor{
- \htmlref{AST\_CMPMAP}{AST_CMPMAP}
- }
- \sstdiytopic{
- Inheritance
- }{
- The CmpMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The CmpMap class does not define any new attributes beyond those
- which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The CmpMap class does not define any new routines beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- CmpRegion\sstlabel{CmpRegion}
-}{
- A combination of two regions within a single Frame
-}{
- \sstdescription{
- A CmpRegion is a \htmlref{Region}{Region} which allows two component
- Regions (of any class) to be combined to form a more complex
- Region. This combination may be performed a boolean AND, OR
- or XOR (exclusive OR) operator. If the AND operator is
- used, then a position is inside the CmpRegion only if it is
- inside both of its two component Regions. If the OR operator is
- used, then a position is inside the CmpRegion if it is inside
- either (or both) of its two component Regions. If the XOR operator
- is used, then a position is inside the CmpRegion if it is inside
- one but not both of its two component Regions. Other operators can
- be formed by negating one or both component Regions before using
- them to construct a new CmpRegion.
-
- The two component Region need not refer to the same coordinate
- \htmlref{Frame}{Frame}, but it must be possible for the
- \htmlref{AST\_CONVERT}{AST_CONVERT}
- function to determine a \htmlref{Mapping}{Mapping} between them (an error will be
- reported otherwise when the CmpRegion is created). For instance,
- a CmpRegion may combine a Region defined within an ICRS \htmlref{SkyFrame}{SkyFrame}
- with a Region defined within a Galactic SkyFrame. This is
- acceptable because the SkyFrame class knows how to convert between
- these two systems, and consequently the
- AST\_CONVERT
- function will also be able to convert between them. In such cases,
- the second component Region will be mapped into the coordinate Frame
- of the first component Region, and the Frame represented by the
- CmpRegion as a whole will be the Frame of the first component Region.
-
- Since a CmpRegion is itself a Region, it can be used as a
- component in forming further CmpRegions. Regions of arbitrary
- complexity may be built from simple individual Regions in this
- way.
- }
- \sstconstructor{
- \htmlref{AST\_CMPREGION}{AST_CMPREGION}
- }
- \sstdiytopic{
- Inheritance
- }{
- The CmpRegion class inherits from the Region class.
- }
- \sstdiytopic{
- Attributes
- }{
- The CmpRegion class does not define any new attributes beyond those
- which are applicable to all Regions.
- }
- \sstdiytopic{
- Functions
- }{
- The CmpRegion class does not define any new routines beyond those
- which are applicable to all Regions.
- }
-}
-\sstroutine{
- DSBSpecFrame\sstlabel{DSBSpecFrame}
-}{
- Dual sideband spectral coordinate system description
-}{
- \sstdescription{
- A DSBSpecFrame is a specialised form of \htmlref{SpecFrame}{SpecFrame} which represents
- positions in a spectrum obtained using a dual sideband instrument.
- Such an instrument produces a spectrum in which each point contains
- contributions from two distinctly different frequencies, one from
- the {\tt{"}}lower side band{\tt{"}} (LSB) and one from the {\tt{"}}upper side band{\tt{"}} (USB).
- Corresponding LSB and USB frequencies are connected by the fact
- that they are an equal distance on either side of a fixed central
- frequency known as the {\tt{"}}Local Oscillator{\tt{"}} (LO) frequency.
-
- When quoting a position within such a spectrum, it is necessary to
- indicate whether the quoted position is the USB position or the
- corresponding LSB position. The \htmlref{SideBand}{SideBand} attribute provides this
- indication. Another option that the SideBand attribute provides is
- to represent a spectral position by its topocentric offset from the
- LO frequency.
-
- In practice, the LO frequency is specified by giving the distance
- from the LO frequency to some {\tt{"}}central{\tt{"}} spectral position. Typically
- this central position is that of some interesting spectral feature.
- The distance from this central position to the LO frequency is known
- as the {\tt{"}}intermediate frequency{\tt{"}} (\htmlref{IF}{IF}). The value supplied for IF can
- be a signed value in order to indicate whether the LO frequency is
- above or below the central position.
- }
- \sstconstructor{
- \htmlref{AST\_DSBSPECFRAME}{AST_DSBSPECFRAME}
- }
- \sstdiytopic{
- Inheritance
- }{
- The DSBSpecFrame class inherits from the SpecFrame class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all SpecFrames, every
- DSBSpecFrame also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AlignSideBand}{AlignSideBand}: Should alignment occur between sidebands?
-
- \sstitem
- \htmlref{DSBCentre}{DSBCentre}: The central position of interest.
-
- \sstitem
- \htmlref{IF}{IF}: The intermediate frequency used to define the LO frequency.
-
- \sstitem
- \htmlref{ImagFreq}{ImagFreq}: The image sideband equivalent of the rest frequency.
-
- \sstitem
- \htmlref{SideBand}{SideBand}: Indicates which sideband the DSBSpecFrame represents.
- }
- }
- \sstdiytopic{
- Functions
- }{
- The DSBSpecFrame class does not define any new routines beyond those
- which are applicable to all SpecFrames.
- }
-}
-\sstroutine{
- DssMap\sstlabel{DssMap}
-}{
- Map points using a Digitised Sky Survey plate solution
-}{
- \sstdescription{
- The DssMap class implements a \htmlref{Mapping}{Mapping} which transforms between
- 2-dimensional pixel coordinates and an equatorial sky coordinate
- system (right ascension and declination) using a Digitised Sky
- Survey (DSS) astrometric plate solution.
-
- The input coordinates are pixel numbers along the first and
- second dimensions of an image, where the centre of the first
- pixel is located at (1,1) and the spacing between pixel centres
- is unity.
-
- The output coordinates are right ascension and declination in
- radians. The celestial coordinate system used (FK4, FK5, etc.)
- is unspecified, and will usually be indicated by appropriate
- keywords in a FITS header.
- }
- \sstconstructor{
- The DssMap class does not have a constructor function. A DssMap
- is created only as a by-product of reading a \htmlref{FrameSet}{FrameSet} (using
- \htmlref{AST\_READ}{AST_READ}) from a \htmlref{FitsChan}{FitsChan} which contains FITS header cards
- describing a DSS plate solution, and whose \htmlref{Encoding}{Encoding} attribute is
- set to {\tt{"}}DSS{\tt{"}}. The result of such a read, if successful, is a
- FrameSet whose base and current Frames are related by a DssMap.
- }
- \sstdiytopic{
- Inheritance
- }{
- The DssMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The DssMap class does not define any new attributes beyond those
- which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The DssMap class does not define any new routines beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- Ellipse\sstlabel{Ellipse}
-}{
- An elliptical region within a 2-dimensional Frame
-}{
- \sstdescription{
- The Ellipse class implements a \htmlref{Region}{Region} which represents a ellipse
- within a 2-dimensional \htmlref{Frame}{Frame}.
- }
- \sstconstructor{
- \htmlref{AST\_ELLIPSE}{AST_ELLIPSE}
- }
- \sstdiytopic{
- Inheritance
- }{
- The Ellipse class inherits from the Region class.
- }
- \sstdiytopic{
- Attributes
- }{
- The Ellipse class does not define any new attributes beyond
- those which are applicable to all Regions.
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those routines applicable to all Regions, the
- following routines may also be applied to all Ellipses:
- }
-}
-\sstroutine{
- FitsChan\sstlabel{FitsChan}
-}{
- I/O Channel using FITS header cards to represent Objects
-}{
- \sstdescription{
- A FitsChan is a specialised form of \htmlref{Channel}{Channel} which supports I/O
- operations involving the use of FITS (Flexible Image Transport
- \htmlref{System}{System}) header cards. Writing an \htmlref{Object}{Object} to a FitsChan (using
- \htmlref{AST\_WRITE}{AST_WRITE}) will, if the Object is suitable, generate a
- description of that Object composed of FITS header cards, and
- reading from a FitsChan will create a new Object from its FITS
- header card description.
-
- While a FitsChan is active, it represents a buffer which may
- contain zero or more 80-character {\tt{"}}header cards{\tt{"}} conforming to
- FITS conventions. Any sequence of FITS-conforming header cards
- may be stored, apart from the {\tt{"}}END{\tt{"}} card whose existence is
- merely implied. The cards may be accessed in any order by using
- the FitsChan's integer \htmlref{Card}{Card} attribute, which identifies a {\tt{"}}current{\tt{"}}
- card, to which subsequent operations apply. Searches
- based on keyword may be performed (using \htmlref{AST\_FINDFITS}{AST_FINDFITS}), new
- cards may be inserted (\htmlref{AST\_PUTFITS}{AST_PUTFITS}, \htmlref{AST\_PUTCARDS}{AST_PUTCARDS}, \htmlref{AST\_SETFITS$<$X$>$}{AST_SETFITSX}) and
- existing ones may be deleted (\htmlref{AST\_DELFITS}{AST_DELFITS}), extracted
- (\htmlref{AST\_GETFITS$<$X$>$}{AST_GETFITSX}) or changed (AST\_SETFITS$<$X$>$).
-
- When you create a FitsChan, you have the option of specifying
- {\tt{"}}source{\tt{"}} and {\tt{"}}sink{\tt{"}} functions which connect it to external data
- stores by reading and writing FITS header cards. If you provide
- a source function, it is used to fill the FitsChan with header cards
- when it is accessed for the first time. If you do not provide a
- source function, the FitsChan remains empty until you explicitly enter
- data into it (e.g. using AST\_PUTFITS, AST\_PUTCARDS or AST\_WRITE). If you
- provide a sink function, it is used to deliver any remaining
- contents of a FitsChan to an external data store when the
- FitsChan is deleted. If you do not provide a sink function, any
- header cards remaining when the FitsChan is deleted will be
- lost, so you should arrange to extract them first if necessary
- (e.g. using AST\_FINDFITS or \htmlref{AST\_READ}{AST_READ}).
-
- Coordinate system information may be described using FITS header
- cards using several different conventions, termed
- {\tt{"}}encodings{\tt{"}}. When an AST Object is written to (or read from) a
- FitsChan, the value of the FitsChan's \htmlref{Encoding}{Encoding} attribute
- determines how the Object is converted to (or from) a
- description involving FITS header cards. In general, different
- encodings will result in different sets of header cards to
- describe the same Object. Examples of encodings include the DSS
- encoding (based on conventions used by the STScI Digitised Sky
- Survey data), the FITS-WCS encoding (based on a proposed FITS
- standard) and the NATIVE encoding (a near loss-less way of
- storing AST Objects in FITS headers).
-
- The available encodings differ in the range of Objects they can
- represent, in the number of Object descriptions that can coexist
- in the same FitsChan, and in their accessibility to other
- (external) astronomy applications (see the Encoding attribute
- for details). Encodings are not necessarily mutually exclusive
- and it may sometimes be possible to describe the same Object in
- several ways within a particular set of FITS header cards by
- using several different encodings.
-
- The detailed behaviour of AST\_READ and AST\_WRITE, when used with
- a FitsChan, depends on the encoding in use. In general, however,
- all successful use of AST\_READ is destructive, so that FITS header cards
- are consumed in the process of reading an Object, and are
- removed from the FitsChan (this deletion can be prevented for
- specific cards by calling the
- \htmlref{AST\_RETAINFITS}{AST_RETAINFITS} routine).
- An unsuccessful call of
- AST\_READ
- (for instance, caused by the FitsChan not containing the necessary
- FITS headers cards needed to create an Object) results in the
- contents of the FitsChan being left unchanged.
-
- If the encoding in use allows only a single Object description
- to be stored in a FitsChan (e.g. the DSS, FITS-WCS and FITS-IRAF
- encodings), then write operations using AST\_WRITE will
- over-write any existing Object description using that
- encoding. Otherwise (e.g. the NATIVE encoding), multiple Object
- descriptions are written sequentially and may later be read
- back in the same sequence.
- }
- \sstconstructor{
- \htmlref{AST\_FITSCHAN}{AST_FITSCHAN}
- }
- \sstdiytopic{
- Inheritance
- }{
- The FitsChan class inherits from the Channel class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Channels, every
- FitsChan also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AllWarnings}{AllWarnings}: A list of the available conditions
-
- \sstitem
- \htmlref{Card}{Card}: Index of current FITS card in a FitsChan
-
- \sstitem
- \htmlref{CarLin}{CarLin}: Ignore spherical rotations on CAR projections?
-
- \sstitem
- \htmlref{CDMatrix}{CDMatrix}: Use a CD matrix instead of a PC matrix?
-
- \sstitem
- \htmlref{Clean}{Clean}: Remove cards used whilst reading even if an error occurs?
-
- \sstitem
- \htmlref{DefB1950}{DefB1950}: Use FK4 B1950 as default equatorial coordinates?
-
- \sstitem
- \htmlref{Encoding}{Encoding}: System for encoding Objects as FITS headers
-
- \sstitem
- \htmlref{FitsDigits}{FitsDigits}: Digits of precision for floating-point FITS values
-
- \sstitem
- \htmlref{Iwc}{Iwc}: Add a \htmlref{Frame}{Frame} describing Intermediate World Coords?
-
- \sstitem
- \htmlref{Ncard}{Ncard}: Number of FITS header cards in a FitsChan
-
- \sstitem
- \htmlref{Warnings}{Warnings}: Produces warnings about selected conditions
- }
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those routines applicable to all Channels, the
- following routines may also be applied to all FitsChans:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AST\_DELFITS}{AST_DELFITS}: Delete the current FITS card in a FitsChan
-
- \sstitem
- \htmlref{AST\_FINDFITS}{AST_FINDFITS}: Find a FITS card in a FitsChan by keyword
-
- \sstitem
- \htmlref{AST\_GETFITS$<$X$>$}{AST_GETFITSX}: Get a keyword value from a FitsChan
-
- \sstitem
- \htmlref{AST\_SETFITS$<$X$>$}{AST_SETFITSX}: Store a new keyword value in a FitsChan
-
- \sstitem
- \htmlref{AST\_PUTFITS}{AST_PUTFITS}: Store a FITS header card in a FitsChan
-
- \sstitem
- \htmlref{AST\_PUTCARDS}{AST_PUTCARDS}: Stores a set of FITS header card in a FitsChan
-
- \sstitem
- \htmlref{AST\_RETAINFITS}{AST_RETAINFITS}: Ensure current card is retained in a FitsChan
-
- \sstitem
- \htmlref{AST\_TESTFITS}{AST_TESTFITS}: Test if a keyword has a defined value in a FitsChan
- }
- }
-}
-\sstroutine{
- FluxFrame\sstlabel{FluxFrame}
-}{
- Measured flux description
-}{
- \sstdescription{
- A FluxFrame is a specialised form of one-dimensional \htmlref{Frame}{Frame} which
- represents various systems used to represent the signal level in an
- observation. The particular coordinate system to be used is specified
- by setting the FluxFrame's \htmlref{System}{System} attribute qualified, as necessary, by
- other attributes such as the units, etc (see the description of the
- System attribute for details).
-
- All flux values are assumed to be measured at the same frequency or
- wavelength (as given by the \htmlref{SpecVal}{SpecVal} attribute). Thus this class is
- more appropriate for use with images rather than spectra.
- }
- \sstconstructor{
- \htmlref{AST\_FLUXFRAME}{AST_FLUXFRAME}
- }
- \sstdiytopic{
- Inheritance
- }{
- The FluxFrame class inherits from the Frame class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Frames, every
- FluxFrame also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{SpecVal}{SpecVal}: The spectral position at which the flux values are measured.
- }
- }
- \sstdiytopic{
- Functions
- }{
- The FluxFrame class does not define any new routines beyond those
- which are applicable to all Frames.
- }
-}
-\sstroutine{
- Frame\sstlabel{Frame}
-}{
- Coordinate system description
-}{
- \sstdescription{
- This class is used to represent coordinate systems. It does this
- in rather the same way that a frame around a graph describes the
- coordinate space in which data are plotted. Consequently, a
- Frame has a \htmlref{Title}{Title} (string) attribute, which describes the
- coordinate space, and contains axes which in turn hold
- information such as Label and Units strings which are used for
- labelling (e.g.) graphical output. In general, however, the
- number of axes is not restricted to two.
-
- Functions are available for converting Frame coordinate values
- into a form suitable for display, and also for calculating
- distances and offsets between positions within the Frame.
-
- Frames may also contain knowledge of how to transform to and
- from related coordinate systems.
- }
- \sstconstructor{
- \htmlref{AST\_FRAME}{AST_FRAME}
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When used as a \htmlref{Mapping}{Mapping}, a Frame implements a unit (null)
- transformation in both the forward and inverse directions
- (equivalent to a \htmlref{UnitMap}{UnitMap}). The \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attribute values are
- both equal to the number of Frame axes.
- }
- }
- \sstdiytopic{
- Inheritance
- }{
- The Frame class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Mappings, every
- Frame also has the following attributes (if the Frame has only one
- axis, the axis specifier can be omited from the following attribute
- names):
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AlignSystem}{AlignSystem}: Coordinate system used to align Frames
-
- \sstitem
- \htmlref{Bottom(axis)}{Bottomaxis}: Lowest axis value to display
-
- \sstitem
- \htmlref{Digits/Digits(axis)}{DigitsDigitsaxis}: Number of digits of precision
-
- \sstitem
- \htmlref{Direction(axis)}{Directionaxis}: Display axis in conventional direction?
-
- \sstitem
- \htmlref{Domain}{Domain}: Coordinate system domain
-
- \sstitem
- \htmlref{Dut1}{Dut1}: Difference between the UT1 and UTC timescale
-
- \sstitem
- \htmlref{Epoch}{Epoch}: Epoch of observation
-
- \sstitem
- \htmlref{Format(axis)}{Formataxis}: Format specification for axis values
-
- \sstitem
- \htmlref{Label(axis)}{Labelaxis}: \htmlref{Axis}{Axis} label
-
- \sstitem
- \htmlref{MatchEnd}{MatchEnd}: Match trailing axes?
-
- \sstitem
- \htmlref{MaxAxes}{MaxAxes}: Maximum number of Frame axes to match
-
- \sstitem
- \htmlref{MinAxes}{MinAxes}: Minimum number of Frame axes to match
-
- \sstitem
- \htmlref{Naxes}{Naxes}: Number of Frame axes
-
- \sstitem
- \htmlref{NormUnit(axis)}{NormUnitaxis}: Normalised axis physical units
-
- \sstitem
- \htmlref{ObsAlt}{ObsAlt}: Geodetic altitude of observer
-
- \sstitem
- \htmlref{ObsLat}{ObsLat}: Geodetic latitude of observer
-
- \sstitem
- \htmlref{ObsLon}{ObsLon}: Geodetic longitude of observer
-
- \sstitem
- \htmlref{Permute}{Permute}: Permute axis order?
-
- \sstitem
- \htmlref{PreserveAxes}{PreserveAxes}: Preserve axes?
-
- \sstitem
- \htmlref{Symbol(axis)}{Symbolaxis}: Axis symbol
-
- \sstitem
- \htmlref{System}{System}: Coordinate system used to describe the domain
-
- \sstitem
- \htmlref{Title}{Title}: Frame title
-
- \sstitem
- \htmlref{Top(axis)}{Topaxis}: Highest axis value to display
-
- \sstitem
- \htmlref{Unit(axis)}{Unitaxis}: Axis physical units
- }
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those routines applicable to all Mappings, the
- following routines may also be applied to all Frames:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AST\_ANGLE}{AST_ANGLE}: Find the angle subtended by two points at a third point
-
- \sstitem
- \htmlref{AST\_AXANGLE}{AST_AXANGLE}: Find the angle from an axis, to a line through two points
-
- \sstitem
- \htmlref{AST\_AXDISTANCE}{AST_AXDISTANCE}: Calculate the distance between two axis values
-
- \sstitem
- \htmlref{AST\_AXOFFSET}{AST_AXOFFSET}: Calculate an offset along an axis
-
- \sstitem
- \htmlref{AST\_CONVERT}{AST_CONVERT}: Determine how to convert between two coordinate systems
-
- \sstitem
- \htmlref{AST\_DISTANCE}{AST_DISTANCE}: Calculate the distance between two points in a Frame
-
- \sstitem
- \htmlref{AST\_FINDFRAME}{AST_FINDFRAME}: Find a coordinate system with specified characteristics
-
- \sstitem
- \htmlref{AST\_FORMAT}{AST_FORMAT}: Format a coordinate value for a Frame axis
-
- \sstitem
- \htmlref{AST\_GETACTIVEUNIT}{AST_GETACTIVEUNIT}: Determines how the Unit attribute will be used
-
- \sstitem
- \htmlref{AST\_INTERSECT}{AST_INTERSECT}: Find the intersection between two geodesic curves
-
- \sstitem
- \htmlref{AST\_MATCHAXES}{AST_MATCHAXES}: Find any corresponding axes in two Frames
-
- \sstitem
- \htmlref{AST\_NORM}{AST_NORM}: Normalise a set of Frame coordinates
-
- \sstitem
- \htmlref{AST\_OFFSET}{AST_OFFSET}: Calculate an offset along a geodesic curve
-
- \sstitem
- \htmlref{AST\_OFFSET2}{AST_OFFSET2}: Calculate an offset along a geodesic curve in a 2D Frame
-
- \sstitem
- \htmlref{AST\_PERMAXES}{AST_PERMAXES}: Permute the order of a Frame's axes
-
- \sstitem
- \htmlref{AST\_PICKAXES}{AST_PICKAXES}: Create a new Frame by picking axes from an existing one
-
- \sstitem
- \htmlref{AST\_RESOLVE}{AST_RESOLVE}: Resolve a vector into two orthogonal components
-
- \sstitem
- \htmlref{AST\_SETACTIVEUNIT}{AST_SETACTIVEUNIT}: Specify how the Unit attribute should be used
-
- \sstitem
- \htmlref{AST\_UNFORMAT}{AST_UNFORMAT}: Read a formatted coordinate value for a Frame axis
- }
- }
-}
-\sstroutine{
- FrameSet\sstlabel{FrameSet}
-}{
- Set of inter-related coordinate systems
-}{
- \sstdescription{
- A FrameSet consists of a set of one or more Frames (which
- describe coordinate systems), connected together by Mappings
- (which describe how the coordinate systems are inter-related). A
- FrameSet makes it possible to obtain a \htmlref{Mapping}{Mapping} between any pair
- of these Frames (i.e. to convert between any of the coordinate
- systems which it describes). The individual Frames are
- identified within the FrameSet by an integer index, with Frames
- being numbered consecutively from one as they are added to the
- FrameSet.
-
- Every FrameSet has a {\tt{"}}base{\tt{"}} \htmlref{Frame}{Frame} and a {\tt{"}}current{\tt{"}} Frame (which
- are allowed to be the same). Any of the Frames may be nominated
- to hold these positions, and the choice is determined by the
- values of the FrameSet's \htmlref{Base}{Base} and \htmlref{Current}{Current} attributes, which hold
- the indices of the relevant Frames. By default, the first Frame
- added to a FrameSet is its base Frame, and the last one added is
- its current Frame.
-
- The base Frame describes the {\tt{"}}native{\tt{"}} coordinate system of
- whatever the FrameSet is used to calibrate (e.g. the pixel
- coordinates of an image) and the current Frame describes the
- {\tt{"}}apparent{\tt{"}} coordinate system in which it should be viewed
- (e.g. displayed, etc.). Any further Frames represent a library
- of alternative coordinate systems, which may be selected by
- making them current.
-
- When a FrameSet is used in a context that requires a Frame,
- (e.g. obtaining its \htmlref{Title}{Title} value, or number of axes), the current
- Frame is used. A FrameSet may therefore be used in place of its
- current Frame in most situations.
-
- When a FrameSet is used in a context that requires a Mapping,
- the Mapping used is the one between its base Frame and its
- current Frame. Thus, a FrameSet may be used to convert {\tt{"}}native{\tt{"}}
- coordinates into {\tt{"}}apparent{\tt{"}} ones, and vice versa. Like any
- Mapping, a FrameSet may also be inverted (see \htmlref{AST\_INVERT}{AST_INVERT}), which
- has the effect of interchanging its base and current Frames and
- hence of reversing the Mapping between them.
-
- Regions may be added into a FrameSet (since a \htmlref{Region}{Region} is a type of
- Frame), either explicitly or as components within CmpFrames. In this
- case the Mapping between a pair of Frames within a FrameSet will
- include the effects of the clipping produced by any Regions included
- in the path between the Frames.
- }
- \sstconstructor{
- \htmlref{AST\_FRAMESET}{AST_FRAMESET}
- }
- \sstdiytopic{
- Inheritance
- }{
- The FrameSet class inherits from the Frame class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Frames, every
- FrameSet also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{Base}{Base}: FrameSet base Frame index
-
- \sstitem
- \htmlref{Current}{Current}: FrameSet current Frame index
-
- \sstitem
- \htmlref{Nframe}{Nframe}: Number of Frames in a FrameSet
-
- }
- Every FrameSet also inherits any further attributes that belong
- to its current Frame, regardless of that Frame's class. (For
- example, the \htmlref{Equinox}{Equinox} attribute, defined by the \htmlref{SkyFrame}{SkyFrame} class, is
- inherited by any FrameSet which has a SkyFrame as its current
- Frame.) The set of attributes belonging to a FrameSet may therefore
- change when a new current Frame is selected.
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those routines applicable to all Frames, the
- following routines may also be applied to all FrameSets:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AST\_ADDFRAME}{AST_ADDFRAME}: Add a Frame to a FrameSet to define a new coordinate
- system
-
- \sstitem
- \htmlref{AST\_GETFRAME}{AST_GETFRAME}: Obtain a pointer to a specified Frame in a FrameSet
-
- \sstitem
- \htmlref{AST\_GETMAPPING}{AST_GETMAPPING}: Obtain a Mapping between two Frames in a FrameSet
-
- \sstitem
- \htmlref{AST\_REMAPFRAME}{AST_REMAPFRAME}: Modify a Frame's relationship to the other Frames in a
- FrameSet
-
- \sstitem
- \htmlref{AST\_REMOVEFRAME}{AST_REMOVEFRAME}: Remove a Frame from a FrameSet
- }
- }
-}
-\sstroutine{
- GrismMap\sstlabel{GrismMap}
-}{
- Transform 1-dimensional coordinates using a grism dispersion equation
-}{
- \sstdescription{
- A GrismMap is a specialised form of \htmlref{Mapping}{Mapping} which transforms
- 1-dimensional coordinates using the spectral dispersion equation
- described in FITS-WCS paper III {\tt{"}}Representation of spectral
- coordinates in FITS{\tt{"}}. This describes the dispersion produced by
- gratings, prisms and grisms.
-
- When initially created, the forward transformation of a GrismMap
- transforms input {\tt{"}}grism parameter{\tt{"}} values into output wavelength
- values. The {\tt{"}}grism parameter{\tt{"}} is a dimensionless value which is
- linearly related to position on the detector. It is defined in FITS-WCS
- paper III as {\tt{"}}the offset on the detector from the point of intersection
- of the camera axis, measured in units of the effective local length{\tt{"}}.
- The units in which wavelength values are expected or returned is
- determined by the values supplied for the \htmlref{GrismWaveR}{GrismWaveR}, \htmlref{GrismNRP}{GrismNRP} and
- \htmlref{GrismG}{GrismG} attribute: whatever units are used for these attributes will
- also be used for the wavelength values.
- }
- \sstconstructor{
- \htmlref{AST\_GRISMMAP}{AST_GRISMMAP}
- }
- \sstdiytopic{
- Inheritance
- }{
- The GrismMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Mappings, every
- GrismMap also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{GrismNR}{GrismNR}: The refractive index at the reference wavelength
-
- \sstitem
- \htmlref{GrismNRP}{GrismNRP}: Rate of change of refractive index with wavelength
-
- \sstitem
- \htmlref{GrismWaveR}{GrismWaveR}: The reference wavelength
-
- \sstitem
- \htmlref{GrismAlpha}{GrismAlpha}: The angle of incidence of the incoming light
-
- \sstitem
- \htmlref{GrismG}{GrismG}: The grating ruling density
-
- \sstitem
- \htmlref{GrismM}{GrismM}: The interference order
-
- \sstitem
- \htmlref{GrismEps}{GrismEps}: The angle between the normal and the dispersion plane
-
- \sstitem
- \htmlref{GrismTheta}{GrismTheta}: Angle between normal to detector plane and reference ray
- }
- }
- \sstdiytopic{
- Functions
- }{
- The GrismMap class does not define any new routines beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- Interval\sstlabel{Interval}
-}{
- A region representing an interval on one or more axes of a Frame
-}{
- \sstdescription{
- The Interval class implements a \htmlref{Region}{Region} which represents upper
- and/or lower limits on one or more axes of a \htmlref{Frame}{Frame}. For a point to
- be within the region represented by the Interval, the point must
- satisfy all the restrictions placed on all the axes. The point is
- outside the region if it fails to satisfy any one of the restrictions.
- Each axis may have either an upper limit, a lower limit, both or
- neither. If both limits are supplied but are in reverse order (so
- that the lower limit is greater than the upper limit), then the
- interval is an excluded interval, rather than an included interval.
-
- Note, The Interval class makes no allowances for cyclic nature of
- some coordinate systems (such as \htmlref{SkyFrame}{SkyFrame} coordinates). A \htmlref{Box}{Box}
- should usually be used in these cases since this requires the user
- to think about suitable upper and lower limits,
- }
- \sstconstructor{
- \htmlref{AST\_INTERVAL}{AST_INTERVAL}
- }
- \sstdiytopic{
- Inheritance
- }{
- The Interval class inherits from the Region class.
- }
- \sstdiytopic{
- Attributes
- }{
- The Interval class does not define any new attributes beyond
- those which are applicable to all Regions.
- }
- \sstdiytopic{
- Functions
- }{
- The Interval class does not define any new routines beyond those
- which are applicable to all Regions.
- }
-}
-\sstroutine{
- IntraMap\sstlabel{IntraMap}
-}{
- Map points using a private transformation routine
-}{
- \sstdescription{
- The IntraMap class provides a specialised form of \htmlref{Mapping}{Mapping} which
- encapsulates a privately-defined coordinate transformation
- routine (e.g. written in Fortran) so that it may be used like
- any other AST Mapping. This allows you to create Mappings that
- perform any conceivable coordinate transformation.
-
- However, an IntraMap is intended for use within a single program
- or a private suite of software, where all programs have access
- to the same coordinate transformation functions (i.e. can be
- linked against them). IntraMaps should not normally be stored in
- datasets which may be exported for processing by other software,
- since that software will not have the necessary transformation
- functions available, resulting in an error.
-
- You must register any coordinate transformation functions to be
- used using \htmlref{AST\_INTRAREG}{AST_INTRAREG} before creating an IntraMap.
- }
- \sstconstructor{
- \htmlref{AST\_INTRAMAP}{AST_INTRAMAP} (also see AST\_INTRAREG)
- }
- \sstdiytopic{
- Inheritance
- }{
- The IntraMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Mappings, every
- IntraMap also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{IntraFlag}{IntraFlag}: IntraMap identification string
- }
- }
- \sstdiytopic{
- Functions
- }{
- The IntraMap class does not define any new routines beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- KeyMap\sstlabel{KeyMap}
-}{
- Store a set of key/value pairs
-}{
- \sstdescription{
- The KeyMap class is used to store a set of values with associated keys
- which identify the values. The keys are strings (case-sensitive,
- trailing spaces are ignored), and the data type of the values can be
- integer, floating point,
- character string or AST \htmlref{Object}{Object} pointer. Each
- value can be a scalar or a one-dimensional vector. A KeyMap is
- conceptually similar to a \htmlref{Mapping}{Mapping} in that a KeyMap transforms an
- input into an output - the input is the key, and the output is the
- value associated with the key. However, this is only a conceptual
- similarity, and it should be noted that the KeyMap class inherits from
- the Object class rather than the Mapping class. The methods of the
- Mapping class cannot be used with a KeyMap.
- }
- \sstconstructor{
- \htmlref{AST\_KEYMAP}{AST_KEYMAP}
- }
- \sstdiytopic{
- Inheritance
- }{
- The KeyMap class inherits from the Object class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Objects, every
- KeyMap also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{KeyError}{KeyError}: \htmlref{Report}{Report} an error if the requested key does not exist?
-
- \sstitem
- \htmlref{SizeGuess}{SizeGuess}: The expected size of the KeyMap.
- }
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those routines applicable to all Objects, the
- following routines may also be applied to all KeyMaps:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AST\_MAPGET0$<$X$>$}{AST_MAPGET0X}: Get a named scalar entry from a KeyMap
-
- \sstitem
- \htmlref{AST\_MAPGET1$<$X$>$}{AST_MAPGET1X}: Get a named vector entry from a KeyMap
-
- \sstitem
- \htmlref{AST\_MAPGETELEM$<$X$>$}{AST_MAPGETELEMX}: Get an element of a named vector entry from a KeyMap
-
- \sstitem
- \htmlref{AST\_MAPHASKEY}{AST_MAPHASKEY}: Does the KeyMap contain a named entry?
-
- \sstitem
- \htmlref{AST\_MAPKEY}{AST_MAPKEY}: Return the key name at a given index in the KeyMap
-
- \sstitem
- \htmlref{AST\_MAPLENC}{AST_MAPLENC}: Get the length of a named character entry in a KeyMap
-
- \sstitem
- \htmlref{AST\_MAPLENGTH}{AST_MAPLENGTH}: Get the length of a named entry in a KeyMap
-
- \sstitem
- \htmlref{AST\_MAPPUT0$<$X$>$}{AST_MAPPUT0X}: Add a new scalar entry to a KeyMap
-
- \sstitem
- \htmlref{AST\_MAPPUT1$<$X$>$}{AST_MAPPUT1X}: Add a new vector entry to a KeyMap
-
- \sstitem
- \htmlref{AST\_MAPREMOVE}{AST_MAPREMOVE}: Removed a named entry from a KeyMap
-
- \sstitem
- \htmlref{AST\_MAPSIZE}{AST_MAPSIZE}: Get the number of entries in a KeyMap
-
- \sstitem
- \htmlref{AST\_MAPTYPE}{AST_MAPTYPE}: Return the data type of a named entry in a map.
- }
- }
-}
-\sstroutine{
- LutMap\sstlabel{LutMap}
-}{
- Transform 1-dimensional coordinates using a lookup table
-}{
- \sstdescription{
- A LutMap is a specialised form of \htmlref{Mapping}{Mapping} which transforms
- 1-dimensional coordinates by using linear interpolation in a
- lookup table.
-
- Each input coordinate value is first scaled to give the index of
- an entry in the table by subtracting a starting value (the input
- coordinate corresponding to the first table entry) and dividing
- by an increment (the difference in input coordinate value
- between adjacent table entries).
-
- The resulting index will usually contain a fractional part, so
- the output coordinate value is then generated by interpolating
- linearly between the appropriate entries in the table. If the
- index lies outside the range of the table, linear extrapolation
- is used based on the two nearest entries (i.e. the two entries
- at the start or end of the table, as appropriate). If either of the
- entries used for the interplation has a value of AST\_\_BAD, then the
- interpolated value is returned as AST\_\_BAD.
-
- If the lookup table entries increase or decrease monotonically (and
- if the table contains no AST\_\_BAD values), then the inverse
- transformation may also be performed.
- }
- \sstconstructor{
- \htmlref{AST\_LUTMAP}{AST_LUTMAP}
- }
- \sstdiytopic{
- Inheritance
- }{
- The LutMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Mappings, every
- LutMap also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{LutInterp}{LutInterp}: The interpolation method to use between table entries.
- }
- }
- \sstdiytopic{
- Functions
- }{
- The LutMap class does not define any new routines beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- Mapping\sstlabel{Mapping}
-}{
- Inter-relate two coordinate systems
-}{
- \sstdescription{
- This class provides the basic facilities for transforming a set
- of coordinates (representing {\tt{"}}input{\tt{"}} points) to give a new set
- of coordinates (representing {\tt{"}}output{\tt{"}} points). It is used to
- describe the relationship which exists between two different
- coordinate systems and to implement operations which make use of
- this (such as transforming coordinates and resampling grids of
- data). However, the Mapping class does not have a constructor
- function of its own, as it is simply a container class for a
- family of specialised Mappings which implement particular types
- of coordinate transformation.
- }
- \sstconstructor{
- None.
- }
- \sstdiytopic{
- Inheritance
- }{
- The Mapping class inherits from the \htmlref{Object}{Object} class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Objects, every
- Mapping also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{Invert}{Invert}: Mapping inversion flag
-
- \sstitem
- \htmlref{IsLinear}{IsLinear}: Is the Mapping linear?
-
- \sstitem
- \htmlref{IsSimple}{IsSimple}: Has the Mapping been simplified?
-
- \sstitem
- \htmlref{Nin}{Nin}: Number of input coordinates for a Mapping
-
- \sstitem
- \htmlref{Nout}{Nout}: Number of output coordinates for a Mapping
-
- \sstitem
- \htmlref{Report}{Report}: Report transformed coordinates?
-
- \sstitem
- \htmlref{TranForward}{TranForward}: Forward transformation defined?
-
- \sstitem
- \htmlref{TranInverse}{TranInverse}: Inverse transformation defined?
- }
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those routines applicable to all Objects, the
- following routines may also be applied to all Mappings:
-
- \sstitemlist{
-
- \sstitem
- astRebinSeq$<$X$>$: Rebin a region of a sequence of data grids
-
- \sstitem
- \htmlref{AST\_DECOMPOSE}{AST_DECOMPOSE}: Decompose a Mapping into two component Mappings
-
- \sstitem
- \htmlref{AST\_TRANGRID}{AST_TRANGRID}: Transform a grid of positions
-
- \sstitem
- \htmlref{AST\_INVERT}{AST_INVERT}: Invert a Mapping
-
- \sstitem
- \htmlref{AST\_LINEARAPPROX}{AST_LINEARAPPROX}: Calculate a linear approximation to a Mapping
-
- \sstitem
- \htmlref{AST\_MAPBOX}{AST_MAPBOX}: Find a bounding box for a Mapping
-
- \sstitem
- \htmlref{AST\_MAPSPLIT}{AST_MAPSPLIT}: Split a Mapping up into parallel component Mappings
-
- \sstitem
- \htmlref{AST\_RATE}{AST_RATE}: Calculate the rate of change of a Mapping output
-
- \sstitem
- \htmlref{AST\_REBIN$<$X$>$}{AST_REBINX}: Rebin a region of a data grid
-
- \sstitem
- \htmlref{AST\_REBINSEQ$<$X$>$}{AST_REBINSEQX}: Rebin a region of a sequence of data grids
-
- \sstitem
- \htmlref{AST\_REMOVEREGIONS}{AST_REMOVEREGIONS}: Remove any Regions from a Mapping
-
- \sstitem
- \htmlref{AST\_RESAMPLE$<$X$>$}{AST_RESAMPLEX}: Resample a region of a data grid
-
- \sstitem
- \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}: Simplify a Mapping
-
- \sstitem
- \htmlref{AST\_TRAN1}{AST_TRAN1}: Transform 1-dimensional coordinates
-
- \sstitem
- \htmlref{AST\_TRAN2}{AST_TRAN2}: Transform 2-dimensional coordinates
-
- \sstitem
- \htmlref{AST\_TRANN}{AST_TRANN}: Transform N-dimensional coordinates
- }
- }
-}
-\sstroutine{
- MathMap\sstlabel{MathMap}
-}{
- Transform coordinates using mathematical expressions
-}{
- \sstdescription{
- A MathMap is a \htmlref{Mapping}{Mapping} which allows you to specify a set of forward
- and/or inverse transformation functions using arithmetic operations
- and mathematical functions similar to those available in Fortran. The
- MathMap interprets these functions at run-time, whenever its forward
- or inverse transformation is required. Because the functions are not
- compiled in the normal sense (unlike an \htmlref{IntraMap}{IntraMap}), they may be used to
- describe coordinate transformations in a transportable manner. A
- MathMap therefore provides a flexible way of defining new types of
- Mapping whose descriptions may be stored as part of a dataset and
- interpreted by other programs.
- }
- \sstconstructor{
- \htmlref{AST\_MATHMAP}{AST_MATHMAP}
- }
- \sstdiytopic{
- Inheritance
- }{
- The MathMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Mappings, every
- MathMap also has the following attributes:
- \sstitemlist{
-
- \sstitem
- \htmlref{Seed}{Seed}: Random number seed
-
- \sstitem
- \htmlref{SimpFI}{SimpFI}: Forward-inverse MathMap pairs simplify?
-
- \sstitem
- \htmlref{SimpIF}{SimpIF}: Inverse-forward MathMap pairs simplify?
- }
- }
- \sstdiytopic{
- Functions
- }{
- The MathMap class does not define any new routines beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- MatrixMap\sstlabel{MatrixMap}
-}{
- Map coordinates by multiplying by a matrix
-}{
- \sstdescription{
- A MatrixMap is form of \htmlref{Mapping}{Mapping} which performs a general linear
- transformation. Each set of input coordinates, regarded as a
- column-vector, are pre-multiplied by a matrix (whose elements
- are specified when the MatrixMap is created) to give a new
- column-vector containing the output coordinates. If appropriate,
- the inverse transformation may also be performed.
- }
- \sstconstructor{
- \htmlref{AST\_MATRIXMAP}{AST_MATRIXMAP}
- }
- \sstdiytopic{
- Inheritance
- }{
- The MatrixMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The MatrixMap class does not define any new attributes beyond
- those which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The MatrixMap class does not define any new routines beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- NormMap\sstlabel{NormMap}
-}{
- Normalise coordinates using a supplied Frame
-}{
- \sstdescription{
- The NormMap class implements a \htmlref{Mapping}{Mapping} which normalises coordinate
- values using the
- \htmlref{AST\_NORM}{AST_NORM} routine
- of a supplied \htmlref{Frame}{Frame}. The number of inputs and outputs of a NormMap
- are both equal to the number of axes in the supplied Frame.
-
- The forward and inverse transformation of a NormMap are both
- defined but are identical (that is, they do not form a real inverse
- pair in that the inverse transformation does not undo the
- normalisation, instead it reapplies it). However, the
- \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}
- function will replace neighbouring pairs of forward and inverse
- NormMaps by a single \htmlref{UnitMap}{UnitMap}.
- }
- \sstconstructor{
- \htmlref{AST\_NORMMAP}{AST_NORMMAP}
- }
- \sstdiytopic{
- Inheritance
- }{
- The NormMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The \htmlref{MatrixMap}{MatrixMap} class does not define any new attributes beyond
- those which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The NormMap class does not define any new routines beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- NullRegion\sstlabel{NullRegion}
-}{
- A boundless region within a Frame
-}{
- \sstdescription{
- The NullRegion class implements a \htmlref{Region}{Region} with no bounds within a \htmlref{Frame}{Frame}.
- If the \htmlref{Negated}{Negated} attribute of a NullRegion is false, the NullRegion
- represents a Region containing no points. If the Negated attribute of
- a NullRegion is true, the NullRegion represents an infinite Region
- (that is, all points in the coordinate system are inside the NullRegion).
- }
- \sstconstructor{
- \htmlref{AST\_NULLREGION}{AST_NULLREGION}
- }
- \sstdiytopic{
- Inheritance
- }{
- The NullRegion class inherits from the Region class.
- }
- \sstdiytopic{
- Attributes
- }{
- The NullRegion class does not define any new attributes beyond
- those which are applicable to all Regions.
- }
- \sstdiytopic{
- Functions
- }{
- The NullRegion class does not define any new routines beyond those
- which are applicable to all Regions.
- }
-}
-\sstroutine{
- Object\sstlabel{Object}
-}{
- Base class for all AST Objects
-}{
- \sstdescription{
- This class is the base class from which all other classes in the
- AST library are derived. It provides all the basic Object
- behaviour and Object manipulation facilities required throughout
- the library. There is no Object constructor, however, as Objects
- on their own are not useful.
- }
- \sstconstructor{
- None.
- }
- \sstdiytopic{
- Inheritance
- }{
- The Object base class does not inherit from any other class.
- }
- \sstdiytopic{
- Attributes
- }{
- All Objects have the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{Class}{Class}: Object class name
-
- \sstitem
- \htmlref{ID}{ID}: Object identification string
-
- \sstitem
- \htmlref{Ident}{Ident}: Permanent Object identification string
-
- \sstitem
- \htmlref{Nobject}{Nobject}: Number of Objects in class
-
- \sstitem
- \htmlref{ObjSize}{ObjSize}: The in-memory size of the Object in bytes
-
- \sstitem
- \htmlref{RefCount}{RefCount}: Count of active Object pointers
-
- \sstitem
- \htmlref{UseDefs}{UseDefs}: Allow use of default values for Object attributes?
- }
- }
- \sstdiytopic{
- Functions
- }{
- The following routines may be applied to all Objects:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AST\_ANNUL}{AST_ANNUL}: Annul a pointer to an Object
-
- \sstitem
- \htmlref{AST\_BEGIN}{AST_BEGIN}: Begin a new AST context
-
- \sstitem
- \htmlref{AST\_CLEAR}{AST_CLEAR}: Clear attribute values for an Object
-
- \sstitem
- \htmlref{AST\_CLONE}{AST_CLONE}: Clone a pointer to an Object
-
- \sstitem
- \htmlref{AST\_COPY}{AST_COPY}: Copy an Object
-
- \sstitem
- \htmlref{AST\_DELETE}{AST_DELETE}: Delete an Object
-
- \sstitem
- \htmlref{AST\_END}{AST_END}: End an AST context
-
- \sstitem
- \htmlref{AST\_ESCAPES}{AST_ESCAPES}: Control whether graphical escape sequences are removed
-
- \sstitem
- \htmlref{AST\_EXEMPT}{AST_EXEMPT}: Exempt an Object pointer from AST context handling
-
- \sstitem
- \htmlref{AST\_EXPORT}{AST_EXPORT}: Export an Object pointer to an outer context
-
- \sstitem
- \htmlref{AST\_GET$<$X$>$}{AST_GETX}: Get an attribute value for an Object
-
- \sstitem
- \htmlref{AST\_IMPORT}{AST_IMPORT}: Import an Object pointer to the current context
-
- \sstitem
- \htmlref{AST\_ISA$<$CLASS$>$}{AST_ISACLASS}: Test class membership
-
- \sstitem
- \htmlref{AST\_SAME}{AST_SAME}: Do two AST pointers refer to the same Object?
-
- \sstitem
- \htmlref{AST\_SET}{AST_SET}: Set attribute values for an Object
-
- \sstitem
- \htmlref{AST\_SET$<$X$>$}{AST_SETX}: Set an attribute value for an Object
-
- \sstitem
- \htmlref{AST\_SHOW}{AST_SHOW}: Display a textual representation of an Object on standard
- output
-
- \sstitem
- \htmlref{AST\_TEST}{AST_TEST}: Test if an attribute value is set for an Object
-
- \sstitem
- \htmlref{AST\_TUNE}{AST_TUNE}: Set or get an AST tuning parameter
-
- \sstitem
- \htmlref{AST\_VERSION}{AST_VERSION}: Return the verson of the AST library being used.
- }
- }
-}
-\sstroutine{
- PcdMap\sstlabel{PcdMap}
-}{
- Apply 2-dimensional pincushion/barrel distortion
-}{
- \sstdescription{
- A PcdMap is a non-linear \htmlref{Mapping}{Mapping} which transforms 2-dimensional
- positions to correct for the radial distortion introduced by some
- cameras and telescopes. This can take the form either of pincushion
- or barrel distortion, and is characterized by a single distortion
- coefficient.
-
- A PcdMap is specified by giving this distortion coefficient and the
- coordinates of the centre of the radial distortion. The forward
- transformation of a PcdMap applies the distortion:
-
- RD = R $*$ ( 1 $+$ C $*$ R $*$ R )
-
- where R is the undistorted radial distance from the distortion
- centre (specified by attribute PcdCen), RD is the radial distance
- from the same centre in the presence of distortion, and C is the
- distortion coefficient (given by attribute \htmlref{Disco}{Disco}).
-
- The inverse transformation of a PcdMap removes the distortion
- produced by the forward transformation. The expression used to derive
- R from RD is an approximate inverse of the expression above.
- }
- \sstconstructor{
- \htmlref{AST\_PCDMAP}{AST_PCDMAP}
- }
- \sstdiytopic{
- Inheritance
- }{
- The PcdMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Mappings, every
- PcdMap also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{Disco}{Disco}: PcdMap pincushion/barrel distortion coefficient
-
- \sstitem
- \htmlref{PcdCen(axis)}{PcdCenaxis}: Centre coordinates of pincushion/barrel distortion
- }
- }
- \sstdiytopic{
- Functions
- }{
- The PcdMap class does not define any new routines beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- PermMap\sstlabel{PermMap}
-}{
- Coordinate permutation Mapping
-}{
- \sstdescription{
- A PermMap is a \htmlref{Mapping}{Mapping} which permutes the order of coordinates,
- and possibly also changes the number of coordinates, between its
- input and output.
-
- In addition to permuting the coordinate order, a PermMap may
- also assign constant values to coordinates. This is useful when
- the number of coordinates is being increased as it allows fixed
- values to be assigned to any new ones.
- }
- \sstconstructor{
- \htmlref{AST\_PERMMAP}{AST_PERMMAP}
- }
- \sstdiytopic{
- Inheritance
- }{
- The PermMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The PermMap class does not define any new attributes beyond
- those which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The PermMap class does not define any new routines beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- Plot\sstlabel{Plot}
-}{
- Provide facilities for 2D graphical output
-}{
- \sstdescription{
- This class provides facilities for producing 2D graphical output.
- A Plot is a specialised form of \htmlref{FrameSet}{FrameSet}, in which the base
- \htmlref{Frame}{Frame} describes a {\tt{"}}graphical{\tt{"}} coordinate system and is
- associated with a rectangular plotting area in the underlying
- graphics system. This plotting area is where graphical output
- appears. It is defined when the Plot is created.
-
- The current Frame of a Plot describes a {\tt{"}}physical{\tt{"}} coordinate
- system, which is the coordinate system in which plotting
- operations are specified. The results of each plotting operation
- are automatically transformed into graphical coordinates so as
- to appear in the plotting area (subject to any clipping which
- may be in effect).
-
- Because the \htmlref{Mapping}{Mapping} between physical and graphical coordinates
- may often be non-linear, or even discontinuous, most plotting
- does not result in simple straight lines. The basic plotting
- element is therefore not a straight line, but a geodesic curve
- (see \htmlref{AST\_CURVE}{AST_CURVE}, \htmlref{AST\_GENCURVE}{AST_GENCURVE} and \htmlref{AST\_POLYCURVE}{AST_POLYCURVE}). A Plot also provides facilities
- for drawing markers or symbols (\htmlref{AST\_MARK}{AST_MARK}), text (\htmlref{AST\_TEXT}{AST_TEXT}) and grid
- lines (\htmlref{AST\_GRIDLINE}{AST_GRIDLINE}). It is also possible to draw curvilinear axes
- with optional coordinate grids (\htmlref{AST\_GRID}{AST_GRID}).
- A range of Plot attributes is available to allow precise control
- over the appearance of graphical output produced by these
- routines.
-
- You may select different physical coordinate systems in which to
- plot (including the native graphical coordinate system itself)
- by selecting different Frames as the current Frame of a Plot,
- using its \htmlref{Current}{Current} attribute. You may also set up clipping (see
- \htmlref{AST\_CLIP}{AST_CLIP}) to limit the extent of any plotting you perform, and
- this may be done in any of the coordinate systems associated
- with the Plot, not necessarily the one you are plotting in.
-
- Like any FrameSet, a Plot may also be used as a Frame. In this
- case, it behaves like its current Frame, which describes the
- physical coordinate system.
-
- When used as a Mapping, a Plot describes the inter-relation
- between graphical coordinates (its base Frame) and physical
- coordinates (its current Frame). It differs from a normal
- FrameSet, however, in that an attempt to transform points which
- lie in clipped areas of the Plot will result in bad coordinate
- values (AST\_\_BAD).
- }
- \sstconstructor{
- \htmlref{AST\_PLOT}{AST_PLOT}
- }
- \sstdiytopic{
- Inheritance
- }{
- The Plot class inherits from the FrameSet class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all FrameSets, every
- Plot also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- Abbrev: Abbreviate leading fields?
-
- \sstitem
- \htmlref{Border}{Border}: Draw a border around valid regions of a Plot?
-
- \sstitem
- \htmlref{Clip}{Clip}: Clip lines and/or markers at the Plot boundary?
-
- \sstitem
- \htmlref{ClipOp}{ClipOp}: Combine Plot clipping limits using a boolean OR?
-
- \sstitem
- \htmlref{Colour(element)}{Colourelement}: Colour index for a Plot element
-
- \sstitem
- \htmlref{DrawAxes(axis)}{DrawAxesaxis}: Draw axes for a Plot?
-
- \sstitem
- \htmlref{DrawTitle}{DrawTitle}: Draw a title for a Plot?
-
- \sstitem
- \htmlref{Escape}{Escape}: Allow changes of character attributes within strings?
-
- \sstitem
- \htmlref{Edge(axis)}{Edgeaxis}: Which edges to label in a Plot
-
- \sstitem
- \htmlref{Font(element)}{Fontelement}: Character font for a Plot element
-
- \sstitem
- \htmlref{Gap(axis)}{Gapaxis}: \htmlref{Interval}{Interval} between linearly spaced major axis values
-
- \sstitem
- \htmlref{Grf}{Grf}: Select the graphics interface to use.
-
- \sstitem
- \htmlref{Grid}{Grid}: Draw grid lines for a Plot?
-
- \sstitem
- \htmlref{Invisible}{Invisible}: Draw graphics in invisible ink?
-
- \sstitem
- \htmlref{LabelAt(axis)}{LabelAtaxis}: Where to place numerical labels for a Plot
-
- \sstitem
- \htmlref{LabelUnits(axis)}{LabelUnitsaxis}: Use axis unit descriptions in a Plot?
-
- \sstitem
- \htmlref{LabelUp(axis)}{LabelUpaxis}: Draw numerical Plot labels upright?
-
- \sstitem
- \htmlref{Labelling}{Labelling}: Label and tick placement option for a Plot
-
- \sstitem
- \htmlref{LogGap(axis)}{LogGapaxis}: Interval between logarithmically spaced major axis values
-
- \sstitem
- \htmlref{LogPlot(axis)}{LogPlotaxis}: Map the plot onto the screen logarithmically?
-
- \sstitem
- \htmlref{LogTicks(axis)}{LogTicksaxis}: Space the major tick marks logarithmically?
-
- \sstitem
- \htmlref{MajTickLen(axis)}{MajTickLenaxis}: Length of major tick marks for a Plot
-
- \sstitem
- \htmlref{MinTickLen(axis)}{MinTickLenaxis}: Length of minor tick marks for a Plot
-
- \sstitem
- \htmlref{MinTick(axis)}{MinTickaxis}: Density of minor tick marks for a Plot
-
- \sstitem
- \htmlref{NumLab(axis)}{NumLabaxis}: Draw numerical axis labels for a Plot?
-
- \sstitem
- \htmlref{NumLabGap(axis)}{NumLabGapaxis}: Spacing of numerical axis labels for a Plot
-
- \sstitem
- \htmlref{Size(element)}{Sizeelement}: Character size for a Plot element
-
- \sstitem
- \htmlref{Style(element)}{Styleelement}: Line style for a Plot element
-
- \sstitem
- \htmlref{TextLab(axis)}{TextLabaxis}: Draw descriptive axis labels for a Plot?
-
- \sstitem
- \htmlref{TextLabGap(axis)}{TextLabGapaxis}: Spacing of descriptive axis labels for a Plot
-
- \sstitem
- \htmlref{TickAll}{TickAll}: Draw tick marks on all edges of a Plot?
-
- \sstitem
- \htmlref{TitleGap}{TitleGap}: Vertical spacing for a Plot title
-
- \sstitem
- \htmlref{Tol}{Tol}: Plotting tolerance
-
- \sstitem
- \htmlref{Width(element)}{Widthelement}: Line width for a Plot element
- }
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those routines applicable to all FrameSets, the
- following routines may also be applied to all Plots:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AST\_BORDER}{AST_BORDER}: Draw a border around valid regions of a Plot
-
- \sstitem
- \htmlref{AST\_BOUNDINGBOX}{AST_BOUNDINGBOX}: Returns a bounding box for previously drawn graphics
-
- \sstitem
- \htmlref{AST\_CLIP}{AST_CLIP}: Set up or remove clipping for a Plot
-
- \sstitem
- \htmlref{AST\_CURVE}{AST_CURVE}: Draw a geodesic curve
-
- \sstitem
- \htmlref{AST\_GENCURVE}{AST_GENCURVE}: Draw a generalized curve
-
- \sstitem
- \htmlref{AST\_GETGRFCONTEXT}{AST_GETGRFCONTEXT}: Get the graphics context for a Plot
-
- \sstitem
- \htmlref{AST\_GRFPOP}{AST_GRFPOP}: Retrieve previously saved graphics functions
-
- \sstitem
- \htmlref{AST\_GRFPUSH}{AST_GRFPUSH}: Save the current graphics functions
-
- \sstitem
- \htmlref{AST\_GRFSET}{AST_GRFSET}: Register a graphics routine for use by the Plot class
-
- \sstitem
- \htmlref{AST\_GRID}{AST_GRID}: Draw a set of labelled coordinate axes
-
- \sstitem
- \htmlref{AST\_GRIDLINE}{AST_GRIDLINE}: Draw a grid line (or axis) for a Plot
-
- \sstitem
- \htmlref{AST\_MARK}{AST_MARK}: Draw a set of markers for a Plot
-
- \sstitem
- \htmlref{AST\_POLYCURVE}{AST_POLYCURVE}: Draw a series of connected geodesic curves
-
- \sstitem
- \htmlref{AST\_TEXT}{AST_TEXT}: Draw a text string for a Plot
- }
- }
- \sstdiytopic{
- Graphical Elements
- }{
- The colour index, character font, character size, line style and
- line width used for plotting can be set independently for
- various elements of the graphical output produced by a Plot.
- The different graphical elements are identified by appending the
- strings listed below as subscripts to the Plot attributes
- Colour(element), Font(element), Size(element), Style(element)
- and Width(element). These strings are case-insensitive and
- unambiguous abbreviations may be used. Elements of the graphical
- output which relate to individual axes can be referred to either
- independently (e.g. {\tt{"}}(Grid1){\tt{"}} and {\tt{"}}(Grid2){\tt{"}} ) or together (e.g.
- {\tt{"}}(Grid){\tt{"}}):
-
- \sstitemlist{
-
- \sstitem
- Axes: \htmlref{Axis}{Axis} lines drawn through tick marks using AST\_GRID
-
- \sstitem
- Axis1: Axis line drawn through tick marks on axis 1 using AST\_GRID
-
- \sstitem
- Axis2: Axis line drawn through tick marks on axis 2 using AST\_GRID
-
- \sstitem
- Border: The Plot border drawn using AST\_BORDER or AST\_GRID
-
- \sstitem
- Curves: Geodesic curves drawn using AST\_CURVE, AST\_GENCURVE or AST\_POLYCURVE
-
- \sstitem
- Grid: Grid lines drawn using AST\_GRIDLINE or AST\_GRID
-
- \sstitem
- Grid1: Grid lines which cross axis 1, drawn using AST\_GRIDLINE or AST\_GRID
-
- \sstitem
- Grid2: Grid lines which cross axis 2, drawn using AST\_GRIDLINE or AST\_GRID
-
- \sstitem
- Markers: Graphical markers (symbols) drawn using AST\_MARK
-
- \sstitem
- NumLab: Numerical axis labels drawn using AST\_GRID
-
- \sstitem
- NumLab1: Numerical labels for axis 1 drawn using AST\_GRID
-
- \sstitem
- NumLab2: Numerical labels for axis 2 drawn using AST\_GRID
-
- \sstitem
- Strings: Text strings drawn using AST\_TEXT
-
- \sstitem
- TextLab: Descriptive axis labels drawn using AST\_GRID
-
- \sstitem
- TextLab1: Descriptive label for axis 1 drawn using AST\_GRID
-
- \sstitem
- TextLab2: Descriptive label for axis 2 drawn using AST\_GRID
-
- \sstitem
- Ticks: Tick marks (both major and minor) drawn using AST\_GRID
-
- \sstitem
- Ticks1: Tick marks (both major and minor) for axis 1 drawn using AST\_GRID
-
- \sstitem
- Ticks2: Tick marks (both major and minor) for axis 2 drawn using AST\_GRID
-
- \sstitem
- \htmlref{Title}{Title}: The Plot title drawn using AST\_GRID
- }
- }
-}
-\sstroutine{
- Plot3D\sstlabel{Plot3D}
-}{
- Provide facilities for 2D graphical output
-}{
- \sstdescription{
- A Plot3D is a specialised form of \htmlref{Plot}{Plot} that provides facilities
- for producing 3D graphical output, including fully annotated 3D
- coordinate grids. The base \htmlref{Frame}{Frame} in a Plot3D describes a 3-dimensional
- {\tt{"}}graphical{\tt{"}} coordinate system. The axes of this coordinate system are
- assumed to be right-handed (that is, if X appears horizontally to the
- right and Y vertically upwards, then Z is out of the screen towards
- the viewer), and are assumed to be equally scaled (that is, the same
- units are used to measure positions on each of the 3 axes). The upper
- and lower bounds of a volume within this graphical coordinate system
- is specified when the Plot3D is created, and all subsequent graphics
- are {\tt{"}}drawn{\tt{"}} in this volume.
-
- The Plot3D class does not itself include any ability to draw on a
- graphics device. Instead it calls upon function in an externally
- supplied module (the {\tt{"}}grf3d{\tt{"}} module) to do the required drawing.
- A module should be written that implements the functions of the
- grf3d interface using the facilities of a specific graphics system
- This module should then be linked into the application so that the
- Plot3D class can use its functions (see the description of the
- \htmlref{ast\_link}{ast_link} commands for details of how to do this). The grf3d interface
- defines a few simple functions for drawing primitives such as straight
- lines, markers and character strings. These functions all accept
- positions in the 3D graphics coordinate system (the base Frame of the
- Plot3D), and so the grf3d module must also manage the projection of
- these 3D coordinates onto the 2D viewing surface, including the choice
- of {\tt{"}}eye{\tt{"}}/{\tt{"}}camera{\tt{"}} position, direction of viewing, etc. The AST
- library includes a sample implementation of the grf3d interface
- based on the PGPLOT graphics system (see file grf3d\_pgplot.c). This
- implementation also serves to document the grf3d interface itself and
- should be consulted for details before writing a new implementation.
-
- The current Frame of a Plot3D describes a {\tt{"}}physical{\tt{"}} 3-dimensional
- coordinate system, which is the coordinate system in which plotting
- operations are specified when invoking the methods of the Plot3D
- class. The results of each plotting operation are automatically
- transformed into 3D graphical coordinates before being plotted
- using the facilities of the grf3d module linked into the application.
-
- You may select different physical coordinate systems in which to
- plot (including the native graphical coordinate system itself)
- by selecting different Frames as the current Frame of a Plot3D,
- using its \htmlref{Current}{Current} attribute.
-
- Like any \htmlref{FrameSet}{FrameSet}, a Plot3D may also be used as a Frame. In this
- case, it behaves like its current Frame, which describes the
- physical coordinate system.
-
- When used as a \htmlref{Mapping}{Mapping}, a Plot3D describes the inter-relation
- between 3D graphical coordinates (its base Frame) and 3D physical
- coordinates (its current Frame).
-
- Although the Plot3D class inherits from the Plot class, several of
- the facilities of the Plot class are not available in the Plot3D
- class, and an error will be reported if any attempt is made to use
- them. Specifically, the Plot3D class does not support clipping
- using the
- astClip function.
- \htmlref{AST\_CLIP}{AST_CLIP} routine.
- Nor does it support the specification of graphics primitive functions
- at run-time using the
- \htmlref{AST\_GRFSET}{AST_GRFSET}, \htmlref{AST\_GRFPOP}{AST_GRFPOP}, \htmlref{AST\_GRFPUSH}{AST_GRFPUSH}, and \htmlref{AST\_GETGRFCONTEXT}{AST_GETGRFCONTEXT} routines.
- }
- \sstconstructor{
- \htmlref{AST\_PLOT3D}{AST_PLOT3D}
- }
- \sstdiytopic{
- Inheritance
- }{
- The Plot3D class inherits from the Plot class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Plots, every
- Plot3D also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- Norm: Normal vector defining the 2D plane used for text and markers
-
- \sstitem
- \htmlref{RootCorner}{RootCorner}: Specifies which edges of the 3D box should be annotated.
-
- }
- Some attributes of the Plot class refer to specific physical
- coordinate axes (e.g. Gap, LabelUp, DrawAxes, etc). For a basic
- Plot, the axis index must be 1 or 2, but for a Plot3D the axis index
- can be 1, 2 or 3.
-
- Certain Plot attributes are ignored by the Plot3D class (e.g. Edge,
- \htmlref{DrawTitle}{DrawTitle}, \htmlref{TitleGap}{TitleGap}, etc). Consult the Plot attribute documentation
- for details.
- }
- \sstdiytopic{
- Functions
- }{
- The Plot3D class does not define any new routines beyond those
- which are applicable to all Plots. Note, however, that the
- following methods inherited from the Plot class cannot be used with
- a Plot3D and will report an error if called:
- \sstitemlist{
-
- \sstitem
- \htmlref{AST\_BOUNDINGBOX}{AST_BOUNDINGBOX}, AST\_CLIP, \htmlref{AST\_CURVE}{AST_CURVE}, \htmlref{AST\_GENCURVE}{AST_GENCURVE},
- AST\_GETGRFCONTEXT, AST\_GRFPOP, AST\_GRFPUSH, AST\_GRFSET,
- \htmlref{AST\_GRIDLINE}{AST_GRIDLINE}, \htmlref{AST\_POLYCURVE}{AST_POLYCURVE}.
- }
- }
-}
-\sstroutine{
- PointList\sstlabel{PointList}
-}{
- A collection of points in a Frame
-}{
- \sstdescription{
- The PointList class implements a \htmlref{Region}{Region} which represents a collection
- of points in a \htmlref{Frame}{Frame}.
- }
- \sstconstructor{
- \htmlref{AST\_POINTLIST}{AST_POINTLIST}
- }
- \sstdiytopic{
- Inheritance
- }{
- The PointList class inherits from the Region class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Regions, every
- PointList also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{ListSize}{ListSize}: The number of positions stored in the PointList
- }
- }
- \sstdiytopic{
- Functions
- }{
- The PointList class does not define any new routines beyond those
- which are applicable to all Regions.
- }
-}
-\sstroutine{
- PolyMap\sstlabel{PolyMap}
-}{
- Map coordinates using polynomial functions
-}{
- \sstdescription{
- A PolyMap is a form of \htmlref{Mapping}{Mapping} which performs a general polynomial
- transformation. Each output coordinate is a polynomial function of
- all the input coordinates. The coefficients are specified separately
- for each output coordinate. The forward and inverse transformations
- are defined independantly by separate sets of coefficients.
- }
- \sstconstructor{
- \htmlref{AST\_POLYMAP}{AST_POLYMAP}
- }
- \sstdiytopic{
- Inheritance
- }{
- The PolyMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The PolyMap class does not define any new attributes beyond
- those which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The PolyMap class does not define any new routines beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- Polygon\sstlabel{Polygon}
-}{
- A polygonal region within a 2-dimensional Frame
-}{
- \sstdescription{
- The Polygon class implements a polygonal area, defined by a
- collection of vertices, within a 2-dimensional \htmlref{Frame}{Frame}. The vertices
- are connected together by geodesic curves within the encapsulated Frame.
- For instance, if the encapsulated Frame is a simple Frame then the
- geodesics will be straight lines, but if the Frame is a \htmlref{SkyFrame}{SkyFrame} then
- the geodesics will be great circles. Note, the vertices must be
- supplied in an order such that the inside of the polygon is to the
- left of the boundary as the vertices are traversed. Supplying them
- in the reverse order will effectively negate the polygon.
-
- Within a SkyFrame, neighbouring vertices are always joined using the
- shortest path. Thus if an edge of 180 degrees or more in length is
- required, it should be split into section each of which is less
- than 180 degrees. The closed path joining all the vertices in order
- will divide the celestial sphere into two disjoint regions. The
- inside of the polygon is the region which is circled in an
- anti-clockwise manner (when viewed from the inside of the celestial
- sphere) when moving through the list of vertices in the order in
- which they were supplied when the Polygon was created (i.e. the
- inside is to the left of the boundary when moving through the
- vertices in the order supplied).
- }
- \sstconstructor{
- \htmlref{AST\_POLYGON}{AST_POLYGON}
- }
- \sstdiytopic{
- Inheritance
- }{
- The Polygon class inherits from the \htmlref{Region}{Region} class.
- }
- \sstdiytopic{
- Attributes
- }{
- The Polygon class does not define any new attributes beyond
- those which are applicable to all Regions.
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those routines applicable to all Regions, the
- following routines may also be applied to all Polygons:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AST\_DOWNSIZE}{AST_DOWNSIZE}: Reduce the number of vertices in a Polygon.
-
- \sstitem
- \htmlref{AST\_OUTLINE$<$X$>$}{AST_OUTLINEX}: Create a Polygon outlining values in a pixel array
- }
- }
-}
-\sstroutine{
- Prism\sstlabel{Prism}
-}{
- An extrusion of a region into higher dimensions
-}{
- \sstdescription{
- A Prism is a \htmlref{Region}{Region} which represents an extrusion of an existing Region
- into one or more orthogonal dimensions (specified by another Region).
- If the Region to be extruded has N axes, and the Region defining the
- extrusion has M axes, then the resulting Prism will have (M$+$N) axes.
- A point is inside the Prism if the first N axis values correspond to
- a point inside the Region being extruded, and the remaining M axis
- values correspond to a point inside the Region defining the extrusion.
-
- As an example, a cylinder can be represented by extruding an existing
- \htmlref{Circle}{Circle}, using an \htmlref{Interval}{Interval} to define the extrusion. Ih this case, the
- Interval would have a single axis and would specify the upper and
- lower limits of the cylinder along its length.
- }
- \sstconstructor{
- \htmlref{AST\_PRISM}{AST_PRISM}
- }
- \sstdiytopic{
- Inheritance
- }{
- The Prism class inherits from the Region class.
- }
- \sstdiytopic{
- Attributes
- }{
- The Prism class does not define any new attributes beyond those
- which are applicable to all Regions.
- }
- \sstdiytopic{
- Functions
- }{
- The Prism class does not define any new routines beyond those
- which are applicable to all Regions.
- }
-}
-\sstroutine{
- RateMap\sstlabel{RateMap}
-}{
- Mapping which represents differentiation
-}{
- \sstdescription{
- A RateMap is a \htmlref{Mapping}{Mapping} which represents a single element of the
- Jacobian matrix of another Mapping. The Mapping for which the
- Jacobian is required is specified when the new RateMap is created,
- and is referred to as the {\tt{"}}encapsulated Mapping{\tt{"}} below.
-
- The number of inputs to a RateMap is the same as the number of inputs
- to its encapsulated Mapping. The number of outputs from a RateMap
- is always one. This one output equals the rate of change of a
- specified output of the encapsulated Mapping with respect to a
- specified input of the encapsulated Mapping (the input and output
- to use are specified when the RateMap is created).
-
- A RateMap which has not been inverted does not define an inverse
- transformation. If a RateMap has been inverted then it will define
- an inverse transformation but not a forward transformation.
- }
- \sstconstructor{
- \htmlref{AST\_RATEMAP}{AST_RATEMAP}
- }
- \sstdiytopic{
- Inheritance
- }{
- The RateMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The RateMap class does not define any new attributes beyond those
- which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The RateMap class does not define any new routines beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- Region\sstlabel{Region}
-}{
- Represents a region within a coordinate system
-}{
- \sstdescription{
- This class provides the basic facilities for describing a region within
- a specified coordinate system. However, the Region class does not
- have a constructor function of its own, as it is simply a container
- class for a family of specialised sub-classes such as \htmlref{Circle}{Circle}, \htmlref{Box}{Box}, etc,
- which implement Regions with particular shapes.
-
- All sub-classes of Region require a \htmlref{Frame}{Frame} to be supplied when the Region
- is created. This Frame describes the coordinate system in which the
- Region is defined, and is referred to as the {\tt{"}}encapsulated Frame{\tt{"}} below.
- Constructors will also typically required one or more positions to be
- supplied which define the location and extent of the region. These
- positions must be supplied within the encapsulated Frame.
-
- The Region class inherits from the Frame class, and so a Region can be
- supplied where-ever a Frame is expected. In these cases, supplying a
- Region is equivalent to supplying a reference to its encapsulated Frame.
- Thus all the methods of the Frame class can be used on the Region class.
- For instance, the
- \htmlref{AST\_FORMAT}{AST_FORMAT} routine
- may be used on a Region to format an axis value.
-
- In addition, since Frame inherits from \htmlref{Mapping}{Mapping}, a Region is also a sort
- of Mapping. Transforming positions by supplying a Region to one of the
- AST\_TRAN$<$X$>$ routines
- is the way to determine if a given position is inside or outside the
- Region. When used as a Mapping, most classes of Frame are equivalent to
- a \htmlref{UnitMap}{UnitMap}. However, the Region class modifies this behaviour so that a
- Region acts like a UnitMap only for input positions which are within the
- area represented by the Region. Input positions which are outside the
- area produce bad output values (i.e. the output values are equal to
- AST\_\_BAD). This behaviour is the same for both the forward and the
- inverse transformation. In this sense the {\tt{"}}inverse transformation{\tt{"}}
- is not a true inverse of the forward transformation, since applying
- the forward transformation to a point outside the Region, and then
- applying the inverse transformation results, in a set of AST\_\_BAD axis
- values rather than the original axis values. If required, the
- \htmlref{AST\_REMOVEREGIONS}{AST_REMOVEREGIONS}
- function can be used to remove the {\tt{"}}masking{\tt{"}} effect of any Regions
- contained within a compound Mapping or \htmlref{FrameSet}{FrameSet}. It does this by
- replacing each Region with a UnitMap or equivalent Frame (depending
- on the context in which the Region is used).
-
- If the coordinate system represented by the Region is changed (by
- changing the values of one or more of the attribute which the Region
- inherits from its encapsulated Frame), the area represented by
- the Region is mapped into the new coordinate system. For instance, let's
- say a Circle (a subclass of Region) is created, a \htmlref{SkyFrame}{SkyFrame} being
- supplied to the constructor so that the Circle describes a circular
- area on the sky in FK4 equatorial coordinates. Since Region inherits
- from Frame, the Circle will have a \htmlref{System}{System} attribute and this attribute
- will be set to {\tt{"}}FK4{\tt{"}}. If the System attribute of the Region is then
- changed from FK4 to FK5, the circular area represented by the Region
- will automatically be mapped from the FK4 system into the FK5 system.
- In general, changing the coordinate system in this way may result in the
- region changing shape - for instance, a circle may change into an
- ellipse if the transformation from the old to the new coordinate system
- is linear but with different scales on each axis. Thus the specific
- class of a Region cannot be used as a guarantee of the shape in any
- particular coordinate system. If the
- \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY} routine
- is used on a Region, it will endeavour to return a new Region of
- a sub-class which accurately describes the shape in the current
- coordinate system of the Region (but this may not always be possible).
-
- It is possible to negate an existing Region so that it represents all
- areas of the encapsulated Frame except for the area specified when
- the Region was created.
- }
- \sstconstructor{
- None.
- }
- \sstdiytopic{
- Inheritance
- }{
- The Region class inherits from the Frame class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Frames, every
- Region also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{Adaptive}{Adaptive}: Should the area adapt to changes in the coordinate system?
-
- \sstitem
- \htmlref{Negated}{Negated}: Has the original region been negated?
-
- \sstitem
- \htmlref{Closed}{Closed}: Should the boundary be considered to be inside the region?
-
- \sstitem
- \htmlref{MeshSize}{MeshSize}: Number of points used to create a mesh covering the Region
-
- \sstitem
- \htmlref{FillFactor}{FillFactor}: Fraction of the Region which is of interest
-
- \sstitem
- \htmlref{Bounded}{Bounded}: Is the Region bounded?
-
- }
- Every Region also inherits any further attributes that belong
- to the encapsulated Frame, regardless of that Frame's class. (For
- example, the \htmlref{Equinox}{Equinox} attribute, defined by the SkyFrame class, is
- inherited by any Region which represents a SkyFrame.)
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those routines applicable to all Frames, the
- following routines may also be applied to all Regions:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AST\_GETREGIONBOUNDS}{AST_GETREGIONBOUNDS}: Get the bounds of a Region
-
- \sstitem
- \htmlref{AST\_GETREGIONFRAME}{AST_GETREGIONFRAME}: Get a copy of the Frame represent by a Region
-
- \sstitem
- \htmlref{AST\_GETREGIONPOINTS}{AST_GETREGIONPOINTS}: Get the positions that define a Region
-
- \sstitem
- \htmlref{AST\_GETUNC}{AST_GETUNC}: Obtain uncertainty information from a Region
-
- \sstitem
- \htmlref{AST\_MAPREGION}{AST_MAPREGION}: Transform a Region into a new coordinate system
-
- \sstitem
- \htmlref{AST\_NEGATE}{AST_NEGATE}: Toggle the value of the Negated attribute
-
- \sstitem
- \htmlref{AST\_OVERLAP}{AST_OVERLAP}: Determines the nature of the overlap between two Regions
-
- \sstitem
- \htmlref{AST\_MASK$<$X$>$}{AST_MASKX}: Mask a region of a data grid
-
- \sstitem
- \htmlref{AST\_SETUNC}{AST_SETUNC}: Associate a new uncertainty with a Region
-
- \sstitem
- \htmlref{AST\_SHOWMESH}{AST_SHOWMESH}: Display a mesh of points on the surface of a Region
- }
- }
-}
-\sstroutine{
- SelectorMap\sstlabel{SelectorMap}
-}{
- A Mapping that locates positions within one of a set of alternate
- Regions
-}{
- \sstdescription{
- A SelectorMap is a \htmlref{Mapping}{Mapping} that identifies which \htmlref{Region}{Region} contains
- a given input position.
-
- A SelectorMap encapsulates a number of Regions that all have the same
- number of axes and represent the same coordinate \htmlref{Frame}{Frame}. The number of
- inputs (\htmlref{Nin}{Nin} attribute) of the SelectorMap equals the number of axes
- spanned by one of the encapsulated Region. All SelectorMaps have only
- a single output. SelectorMaps do not define an inverse transformation.
-
- For each input position, the forward transformation of a SelectorMap
- searches through the encapsulated Regions (in the order supplied when
- the SelectorMap was created) until a Region is found which contains
- the input position. The index associated with this Region is
- returned as the SelectorMap output value (the index value is the
- position of the Region within the list of Regions supplied when the
- SelectorMap was created, starting at 1 for the first Region). If an
- input position is not contained within any Region, a value of zero is
- returned by the forward transformation.
-
- If a compound Mapping contains a SelectorMap in series with its own
- inverse, the combination of the two adjacent SelectorMaps will be
- replaced by a \htmlref{UnitMap}{UnitMap} when the compound Mapping is simplified using
- \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}.
-
- In practice, SelectorMaps are often used in conjunction with SwitchMaps.
- }
- \sstconstructor{
- \htmlref{AST\_SELECTORMAP}{AST_SELECTORMAP}
- }
- \sstdiytopic{
- Inheritance
- }{
- The SelectorMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The SelectorMap class does not define any new attributes beyond those
- which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The SelectorMap class does not define any new routines beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- ShiftMap\sstlabel{ShiftMap}
-}{
- Add a constant value to each coordinate
-}{
- \sstdescription{
- A ShiftMap is a linear \htmlref{Mapping}{Mapping} which shifts each axis by a
- specified constant value.
- }
- \sstconstructor{
- \htmlref{AST\_SHIFTMAP}{AST_SHIFTMAP}
- }
- \sstdiytopic{
- Inheritance
- }{
- The ShiftMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The ShiftMap class does not define any new attributes beyond those
- which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The ShiftMap class does not define any new routines beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- SkyAxis\sstlabel{SkyAxis}
-}{
- Store celestial axis information
-}{
- \sstdescription{
- The SkyAxis class is used to store information associated with a
- particular axis of a \htmlref{SkyFrame}{SkyFrame}. It is used internally by the AST
- library and has no constructor function. You should encounter it
- only within textual output (e.g. from \htmlref{AST\_WRITE}{AST_WRITE}).
- }
- \sstconstructor{
- None.
- }
- \sstdiytopic{
- Inheritance
- }{
- The SkyAxis class inherits from the \htmlref{Axis}{Axis} class.
- }
-}
-\sstroutine{
- SkyFrame\sstlabel{SkyFrame}
-}{
- Celestial coordinate system description
-}{
- \sstdescription{
- A SkyFrame is a specialised form of \htmlref{Frame}{Frame} which describes
- celestial longitude/latitude coordinate systems. The particular
- celestial coordinate system to be represented is specified by
- setting the SkyFrame's \htmlref{System}{System} attribute (currently, the default
- is ICRS) qualified, as necessary, by a mean \htmlref{Equinox}{Equinox} value and/or
- an \htmlref{Epoch}{Epoch}.
-
- For each of the supported celestial coordinate systems, a SkyFrame
- can apply an optional shift of origin to create a coordinate system
- representing offsets within the celestial coordinate system from some
- specified reference point. This offset coordinate system can also be
- rotated to define new longitude and latitude axes. See attributes
- SkyRef, \htmlref{SkyRefIs}{SkyRefIs}, SkyRefP and \htmlref{AlignOffset}{AlignOffset}.
-
- All the coordinate values used by a SkyFrame are in
- radians. These may be formatted in more conventional ways for
- display by using \htmlref{AST\_FORMAT}{AST_FORMAT}.
- }
- \sstconstructor{
- \htmlref{AST\_SKYFRAME}{AST_SKYFRAME}
- }
- \sstdiytopic{
- Inheritance
- }{
- The SkyFrame class inherits from the Frame class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Frames, every
- SkyFrame also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AlignOffset}{AlignOffset}: Align SkyFrames using the offset coordinate system?
-
- \sstitem
- \htmlref{AsTime(axis)}{AsTimeaxis}: Format celestial coordinates as times?
-
- \sstitem
- \htmlref{Equinox}{Equinox}: Epoch of the mean equinox
-
- \sstitem
- \htmlref{LatAxis}{LatAxis}: Index of the latitude axis
-
- \sstitem
- \htmlref{LonAxis}{LonAxis}: Index of the longitude axis
-
- \sstitem
- \htmlref{NegLon}{NegLon}: Display longitude values in the range [-pi,pi]?
-
- \sstitem
- \htmlref{Projection}{Projection}: Sky projection description.
-
- \sstitem
- SkyRef: Position defining location of the offset coordinate system
-
- \sstitem
- \htmlref{SkyRefIs}{SkyRefIs}: Selects the nature of the offset coordinate system
-
- \sstitem
- SkyRefP: Position defining orientation of the offset coordinate system
- }
- }
- \sstdiytopic{
- Functions
- }{
- The SkyFrame class does not define any new routines beyond those
- which are applicable to all Frames.
- }
-}
-\sstroutine{
- SlaMap\sstlabel{SlaMap}
-}{
- Sequence of celestial coordinate conversions
-}{
- \sstdescription{
- An SlaMap is a specialised form of \htmlref{Mapping}{Mapping} which can be used to
- represent a sequence of conversions between standard celestial
- (longitude, latitude) coordinate systems.
-
- When an SlaMap is first created, it simply performs a unit
- (null) Mapping on a pair of coordinates. Using the \htmlref{AST\_SLAADD}{AST_SLAADD}
- routine, a series of coordinate conversion steps may then be
- added, selected from those provided by the SLALIB Positional
- Astronomy Library (Starlink User Note SUN/67). This allows
- multi-step conversions between a variety of celestial coordinate
- systems to be assembled out of the building blocks provided by
- SLALIB.
-
- For details of the individual coordinate conversions available,
- see the description of the AST\_SLAADD routine.
- }
- \sstconstructor{
- \htmlref{AST\_SLAMAP}{AST_SLAMAP} (also see AST\_SLAADD)
- }
- \sstdiytopic{
- Inheritance
- }{
- The SlaMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The SlaMap class does not define any new attributes beyond those
- which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those routines applicable to all Mappings, the
- following routine may also be applied to all SlaMaps:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AST\_SLAADD}{AST_SLAADD}: Add a celestial coordinate conversion to an SlaMap
- }
- }
-}
-\sstroutine{
- SpecFluxFrame\sstlabel{SpecFluxFrame}
-}{
- Compound spectrum/flux Frame
-}{
- \sstdescription{
- A SpecFluxFrame combines a \htmlref{SpecFrame}{SpecFrame} and a \htmlref{FluxFrame}{FluxFrame} into a single
- 2-dimensional compound \htmlref{Frame}{Frame}. Such a Frame can for instance be used
- to describe a \htmlref{Plot}{Plot} of a spectrum in which the first axis represents
- spectral position and the second axis represents flux.
- }
- \sstconstructor{
- \htmlref{AST\_SPECFLUXFRAME}{AST_SPECFLUXFRAME}
- }
- \sstdiytopic{
- Inheritance
- }{
- The SpecFluxFrame class inherits from the \htmlref{CmpFrame}{CmpFrame} class.
- }
- \sstdiytopic{
- Attributes
- }{
- The SpecFluxFrame class does not define any new attributes beyond
- those which are applicable to all CmpFrames. However, the attributes
- of the component Frames can be accessed as if they were attributes
- of the SpecFluxFrame. For instance, the SpecFluxFrame will recognise
- the {\tt{"}}\htmlref{StdOfRest}{StdOfRest}{\tt{"}} attribute and forward access requests to the component
- SpecFrame. An axis index can optionally be appended to the end of any
- attribute name, in which case the request to access the attribute will
- be forwarded to the primary Frame defining the specified axis.
- }
- \sstdiytopic{
- Functions
- }{
- The SpecFluxFrame class does not define any new routines beyond those
- which are applicable to all CmpFrames.
- }
-}
-\sstroutine{
- SpecFrame\sstlabel{SpecFrame}
-}{
- Spectral coordinate system description
-}{
- \sstdescription{
- A SpecFrame is a specialised form of one-dimensional \htmlref{Frame}{Frame} which
- represents various coordinate systems used to describe positions within
- an electro-magnetic spectrum. The particular coordinate system to be
- used is specified by setting the SpecFrame's \htmlref{System}{System} attribute (the
- default is wavelength) qualified, as necessary, by other attributes
- such as the rest frequency, the standard of rest, the epoch of
- observation, units, etc (see the description of the System attribute
- for details).
-
- By setting a value for thr \htmlref{SpecOrigin}{SpecOrigin} attribute, a SpecFrame can be made
- to represent offsets from a given spectral position, rather than absolute
- spectral values.
- }
- \sstconstructor{
- \htmlref{AST\_SPECFRAME}{AST_SPECFRAME}
- }
- \sstdiytopic{
- Inheritance
- }{
- The SpecFrame class inherits from the Frame class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Frames, every
- SpecFrame also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AlignSpecOffset}{AlignSpecOffset}: Align SpecFrames using the offset coordinate system?
-
- \sstitem
- \htmlref{AlignStdOfRest}{AlignStdOfRest}: Standard of rest in which to align SpecFrames
-
- \sstitem
- \htmlref{RefDec}{RefDec}: Declination of the source (FK5 J2000)
-
- \sstitem
- \htmlref{RefRA}{RefRA}: Right ascension of the source (FK5 J2000)
-
- \sstitem
- \htmlref{RestFreq}{RestFreq}: Rest frequency
-
- \sstitem
- \htmlref{SourceSys}{SourceSys}: Source velocity spectral system
-
- \sstitem
- \htmlref{SourceVel}{SourceVel}: Source velocity
-
- \sstitem
- \htmlref{SourceVRF}{SourceVRF}: Source velocity rest frame
-
- \sstitem
- \htmlref{SpecOrigin}{SpecOrigin}: The zero point for SpecFrame axis values
-
- \sstitem
- \htmlref{StdOfRest}{StdOfRest}: Standard of rest
-
- }
- Several of the Frame attributes inherited by the SpecFrame class
- refer to a specific axis of the Frame (for instance \htmlref{Unit(axis)}{Unitaxis},
- \htmlref{Label(axis)}{Labelaxis}, etc). Since a SpecFrame is strictly one-dimensional,
- it allows these attributes to be specified without an axis index.
- So for instance, {\tt{"}}Unit{\tt{"}} is allowed in place of {\tt{"}}Unit(1){\tt{"}}.
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those routines applicable to all Frames, the
- following routines may also be applied to all SpecFrames:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AST\_SETREFPOS}{AST_SETREFPOS}: Set reference position in any celestial system
-
- \sstitem
- \htmlref{AST\_GETREFPOS}{AST_GETREFPOS}: Get reference position in any celestial system
- }
- }
-}
-\sstroutine{
- SpecMap\sstlabel{SpecMap}
-}{
- Sequence of spectral coordinate conversions
-}{
- \sstdescription{
- A SpecMap is a specialised form of \htmlref{Mapping}{Mapping} which can be used to
- represent a sequence of conversions between standard spectral
- coordinate systems.
-
- When an SpecMap is first created, it simply performs a unit
- (null) Mapping. Using the \htmlref{AST\_SPECADD}{AST_SPECADD}
- routine, a series of coordinate conversion steps may then be
- added. This allows multi-step conversions between a variety of
- spectral coordinate systems to be assembled out of a set of building
- blocks.
-
- Conversions are available to transform between standards of rest.
- Such conversions need to know the source position as an RA and DEC.
- This information can be supplied in the form of parameters for
- the relevant conversions, in which case the SpecMap is 1-dimensional,
- simply transforming the spectral axis values. This means that the
- same source position will always be used by the SpecMap. However, this
- may not be appropriate for an accurate description of a 3-D spectral
- cube, where changes of spatial position can produce significant
- changes in the Doppler shift introduced when transforming between
- standards of rest. For this situation, a 3-dimensional SpecMap can
- be created in which axes 2 and 3 correspond to the source RA and DEC
- The SpecMap simply copies values for axes 2 and 3 from input to
- output), but modifies axis 1 values (the spectral axis) appropriately.
-
- For details of the individual coordinate conversions available,
- see the description of the AST\_SPECADD routine.
- }
- \sstconstructor{
- \htmlref{AST\_SPECMAP}{AST_SPECMAP} (also see AST\_SPECADD)
- }
- \sstdiytopic{
- Inheritance
- }{
- The SpecMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The SpecMap class does not define any new attributes beyond those
- which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those routines applicable to all Mappings, the
- following routine may also be applied to all SpecMaps:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AST\_SPECADD}{AST_SPECADD}: Add a spectral coordinate conversion to an SpecMap
- }
- }
-}
-\sstroutine{
- SphMap\sstlabel{SphMap}
-}{
- Map 3-d Cartesian to 2-d spherical coordinates
-}{
- \sstdescription{
- A SphMap is a \htmlref{Mapping}{Mapping} which transforms points from a
- 3-dimensional Cartesian coordinate system into a 2-dimensional
- spherical coordinate system (longitude and latitude on a unit
- sphere centred at the origin). It works by regarding the input
- coordinates as position vectors and finding their intersection
- with the sphere surface. The inverse transformation always
- produces points which are a unit distance from the origin
- (i.e. unit vectors).
- }
- \sstconstructor{
- \htmlref{AST\_SPHMAP}{AST_SPHMAP}
- }
- \sstdiytopic{
- Inheritance
- }{
- The SphMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Mappings, every
- SphMap also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{UnitRadius}{UnitRadius}: SphMap input vectors lie on a unit sphere?
-
- \sstitem
- \htmlref{PolarLong}{PolarLong}: The longitude value to assign to either pole
- }
- }
- \sstdiytopic{
- Functions
- }{
- The SphMap class does not define any new routines beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- Stc\sstlabel{Stc}
-}{
- Represents an instance of the IVOA STC class
-}{
- \sstdescription{
- The Stc class is an implementation of the IVOA STC class which forms
- part of the IVOA Space-Time Coordinate Metadata system. See:
-
- http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
-
- The Stc class does not have a constructor function of its own, as it
- is simply a container class for a family of specialised sub-classes
- including \htmlref{StcCatalogEntryLocation}{StcCatalogEntryLocation}, \htmlref{StcResourceProfile}{StcResourceProfile}, \htmlref{StcSearchLocation}{StcSearchLocation}
- and \htmlref{StcObsDataLocation}{StcObsDataLocation}.
- }
- \sstconstructor{
- AST\_STC
- }
- \sstdiytopic{
- Inheritance
- }{
- The Stc class inherits from the \htmlref{Region}{Region} class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Regions, every
- Stc also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{RegionClass}{RegionClass}: The class name of the encapsulated Region.
- }
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those routines applicable to all Regions, the
- following routines may also be applied to all Stc's:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AST\_GETSTCREGION}{AST_GETSTCREGION}: Get a pointer to the encapsulated Region
-
- \sstitem
- \htmlref{AST\_GETSTCCOORD}{AST_GETSTCCOORD}: Get information about an AstroCoords element
-
- \sstitem
- \htmlref{AST\_GETSTCNCOORD}{AST_GETSTCNCOORD}: Returns the number of AstroCoords elements in an Stc
- }
- }
-}
-\sstroutine{
- StcCatalogEntryLocation\sstlabel{StcCatalogEntryLocation}
-}{
- Correspond to the IVOA STCCatalogEntryLocation class
-}{
- \sstdescription{
- The StcCatalogEntryLocation class is a sub-class of \htmlref{Stc}{Stc} used to describe
- the coverage of the datasets contained in some VO resource.
-
- See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
- }
- \sstconstructor{
- \htmlref{AST\_STCCATALOGENTRYLOCATION}{AST_STCCATALOGENTRYLOCATION}
- }
- \sstdiytopic{
- Inheritance
- }{
- The StcCatalogEntryLocation class inherits from the Stc class.
- }
- \sstdiytopic{
- Attributes
- }{
- The StcCatalogEntryLocation class does not define any new attributes beyond
- those which are applicable to all Stcs.
- }
- \sstdiytopic{
- Functions
- }{
- The StcCatalogEntryLocation class does not define any new routines beyond those
- which are applicable to all Stcs.
- }
-}
-\sstroutine{
- StcObsDataLocation\sstlabel{StcObsDataLocation}
-}{
- Correspond to the IVOA ObsDataLocation class
-}{
- \sstdescription{
- The StcObsDataLocation class is a sub-class of \htmlref{Stc}{Stc} used to describe
- the coordinate space occupied by a particular observational dataset.
-
- See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
-
- An STC ObsDataLocation element specifies the extent of the
- observation within a specified coordinate system, and also specifies
- the observatory location within a second coordinate system.
-
- The AST StcObsDataLocation class inherits from Stc, and therefore
- an StcObsDataLocation can be used directly as an Stc. When used
- in this way, the StcObsDataLocation describes the location of the
- observation (not the observatory).
-
- Eventually, this class will have a method for returning an Stc
- describing the observatory location. However, AST currently does not
- include any classes of \htmlref{Frame}{Frame} for describing terrestrial or solar
- system positions. Therefore, the provision for returning observatory
- location as an Stc is not yet available. However, for terrestrial
- observations, the position of the observatory can still be recorded
- using the \htmlref{ObsLon}{ObsLon} and \htmlref{ObsLat}{ObsLat} attributes of the Frame encapsulated
- within the Stc representing the observation location (this assumes
- the observatory is located at sea level).
- }
- \sstconstructor{
- \htmlref{AST\_STCOBSDATALOCATION}{AST_STCOBSDATALOCATION}
- }
- \sstdiytopic{
- Inheritance
- }{
- The StcObsDataLocation class inherits from the Stc class.
- }
- \sstdiytopic{
- Attributes
- }{
- The StcObsDataLocation class does not define any new attributes beyond
- those which are applicable to all Stcs.
- }
- \sstdiytopic{
- Functions
- }{
- The StcObsDataLocation class does not define any new routines beyond those
- which are applicable to all Stcs.
- }
-}
-\sstroutine{
- StcResourceProfile\sstlabel{StcResourceProfile}
-}{
- Correspond to the IVOA STCResourceProfile class
-}{
- \sstdescription{
- The StcResourceProfile class is a sub-class of \htmlref{Stc}{Stc} used to describe
- the coverage of the datasets contained in some VO resource.
-
- See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
- }
- \sstconstructor{
- \htmlref{AST\_STCRESOURCEPROFILE}{AST_STCRESOURCEPROFILE}
- }
- \sstdiytopic{
- Inheritance
- }{
- The StcResourceProfile class inherits from the Stc class.
- }
- \sstdiytopic{
- Attributes
- }{
- The StcResourceProfile class does not define any new attributes beyond
- those which are applicable to all Stcs.
- }
- \sstdiytopic{
- Functions
- }{
- The StcResourceProfile class does not define any new routines beyond those
- which are applicable to all Stcs.
- }
-}
-\sstroutine{
- StcSearchLocation\sstlabel{StcSearchLocation}
-}{
- Correspond to the IVOA SearchLocation class
-}{
- \sstdescription{
- The StcSearchLocation class is a sub-class of \htmlref{Stc}{Stc} used to describe
- the coverage of a query.
-
- See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
- }
- \sstconstructor{
- \htmlref{AST\_STCSEARCHLOCATION}{AST_STCSEARCHLOCATION}
- }
- \sstdiytopic{
- Inheritance
- }{
- The StcSearchLocation class inherits from the Stc class.
- }
- \sstdiytopic{
- Attributes
- }{
- The StcSearchLocation class does not define any new attributes beyond
- those which are applicable to all Stcs.
- }
- \sstdiytopic{
- Functions
- }{
- The StcSearchLocation class does not define any new routines beyond those
- which are applicable to all Stcs.
- }
-}
-\sstroutine{
- StcsChan\sstlabel{StcsChan}
-}{
- I/O Channel using STC-S to represent Objects
-}{
- \sstdescription{
- A StcsChan is a specialised form of \htmlref{Channel}{Channel} which supports STC-S
- I/O operations. Writing an \htmlref{Object}{Object} to an StcsChan (using
- \htmlref{AST\_WRITE}{AST_WRITE}) will, if the Object is suitable, generate an
- STC-S description of that Object, and reading from an StcsChan will
- create a new Object from its STC-S description.
-
- When an STC-S description is read using
- \htmlref{AST\_READ}{AST_READ},
- the returned AST Object may be 1) a \htmlref{PointList}{PointList} describing the STC
- AstroCoords (i.e. a single point of interest within the coordinate frame
- described by the STC-S description), or 2) a \htmlref{Region}{Region} describing the STC
- AstrCoordsArea (i.e. an area or volume of interest within the coordinate
- frame described by the STC-S description), or 3) a \htmlref{KeyMap}{KeyMap}
- containing the uninterpreted property values read form the STC-S
- description, or 4) a KeyMap containing any combination of the first
- 3 options. The attributes \htmlref{StcsArea}{StcsArea}, \htmlref{StcsCoords}{StcsCoords} and \htmlref{StcsProps}{StcsProps}
- control which of the above is returned by
- AST\_READ.
-
- When an STC-S description is created from an AST Object using
- AST\_WRITE,
- the AST Object must be either a Region or a KeyMap. If it is a
- Region, it is assumed to define the AstroCoordsArea or (if the
- Region is a single point) the AstroCoords to write to the STC-S
- description. If the Object is a KeyMap, it may contain an entry
- with the key {\tt{"}}AREA{\tt{"}}, holding a Region to be used to define the
- AstroCoordsArea. It may also contain an entry with the key {\tt{"}}COORDS{\tt{"}},
- holding a Region (a PointList) to be used to create the
- AstroCoords. It may also contain an entry with key {\tt{"}}PROPS{\tt{"}}, holding
- a KeyMap that contains uninterpreted property values to be used as
- defaults for any STC-S properties that are not determined by the
- other supplied Regions. In addition, a KeyMap supplied to
- AST\_WRITE
- may itself hold the default STC-S properties (rather than defaults
- being held in a secondary KeyMap, stored as the {\tt{"}}PROPS{\tt{"}} entry in the
- supplied KeyMap).
-
- The
- AST\_READ and AST\_WRITE
- functions work together so that any Object returned by
- AST\_READ can immediately be re-written using AST\_WRITE.
-
- Normally, when you use an StcsChan, you should provide {\tt{"}}source{\tt{"}}
- and {\tt{"}}sink{\tt{"}} routines which connect it to an external data store
- by reading and writing the resulting text. These routines
- should perform any conversions needed between external character
- encodings and the internal ASCII encoding. If no such routines
- are supplied, a Channel will read from standard input and write
- to standard output.
-
- Support for STC-S is currently based on the IVOA document {\tt{"}}STC-S:
- Space-Time Coordinate (STC) Metadata Linear String Implementation{\tt{"}},
- version 1.30 (dated 5th December 2007), available at
- http://www.ivoa.net/Documents/latest/STC-S.html. Note, this
- document is a recommednation only and does not constitute an accepted
- IVOA standard.
-
- The full text of version 1.30 is supported by the StcsChan class,
- with the following exceptions and provisos:
-
- \sstitemlist{
-
- \sstitem
- When reading an STC-S phrase, case is ignored except when reading
- units strings.
-
- \sstitem
- There is no support for multiple intervals specified within a
- TimeInterval, PositionInterval, SpectralInterval or RedshiftInterval.
-
- \sstitem
- If the ET timescale is specified, TT is used instead.
-
- \sstitem
- If the TEB timescale is specified, TDB is used instead.
-
- \sstitem
- The LOCAL timescale is not supported.
-
- \sstitem
- The AST \htmlref{TimeFrame}{TimeFrame} and \htmlref{SkyFrame}{SkyFrame} classes do not currently allow a
- reference position to be specified. Consequently, any $<$refpos$>$
- specified within the Time or Space sub-phrase of an STC-S document
- is ignored.
-
- \sstitem
- The Convex identifier for the space sub-phrase is not supported.
-
- \sstitem
- The GEO\_C and GEO\_D space frames are not supported.
-
- \sstitem
- The UNITSPHERE and SPHER3 space flavours are not supported.
-
- \sstitem
- If any Error values are supplied in a space sub-phrase, then the
- number of values supplied should equal the number of spatial axes,
- and the values are assumed to specify an error box (i.e. error
- circles, ellipses, etc, are not supported).
-
- \sstitem
- The spectral and redshift sub-phrases do not support the
- following $<$refpos$>$ values: LOCAL\_GROUP\_CENTER, UNKNOWNRefPos,
- EMBARYCENTER, MOON, MERCURY, VENUS, MARS, JUPITER, SATURN, URANUS,
- NEPTUNE, PLUTO.
-
- \sstitem
- Error values are supported but error ranges are not.
-
- \sstitem
- Resolution, PixSize and Size values are ignored.
-
- \sstitem
- Space velocity sub-phrases are ignored.
- }
- }
- \sstconstructor{
- \htmlref{AST\_STCSCHAN}{AST_STCSCHAN}
- }
- \sstdiytopic{
- Inheritance
- }{
- The StcsChan class inherits from the Channel class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Channels, every
- StcsChan also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{StcsArea}{StcsArea}: Return the CoordinateArea component after reading an STC-S?
-
- \sstitem
- \htmlref{StcsCoords}{StcsCoords}: Return the Coordinates component after reading an STC-S?
-
- \sstitem
- \htmlref{StcsIndent}{StcsIndent}: Controls output of indentation and line feeds
-
- \sstitem
- \htmlref{StcsLength}{StcsLength}: Controls output buffer length
-
- \sstitem
- \htmlref{StcsProps}{StcsProps}: Return the STC-S properties after reading an STC-S?
- }
- }
- \sstdiytopic{
- Functions
- }{
- The StcsChan class does not define any new routines beyond those
- which are applicable to all Channels.
- }
-}
-\sstroutine{
- SwitchMap\sstlabel{SwitchMap}
-}{
- A Mapping that encapsulates a set of alternate Mappings
-}{
- \sstdescription{
- A SwitchMap is a \htmlref{Mapping}{Mapping} which represents a set of alternate
- Mappings, each of which is used to transform positions within a
- particular region of the input or output coordinate system of the
- SwitchMap.
-
- A SwitchMap can encapsulate any number of Mappings, but they must
- all have the same number of inputs (\htmlref{Nin}{Nin} attribute value) and the
- same number of outputs (\htmlref{Nout}{Nout} attribute value). The SwitchMap itself
- inherits these same values for its Nin and Nout attributes. Each of
- these Mappings represents a {\tt{"}}route{\tt{"}} through the switch, and are
- referred to as {\tt{"}}route{\tt{"}} Mappings below. Each route Mapping transforms
- positions between the input and output coordinate space of the entire
- SwitchMap, but only one Mapping will be used to transform any given
- position. The selection of the appropriate route Mapping to use with
- any given input position is made by another Mapping, called the
- {\tt{"}}selector{\tt{"}} Mapping. Each SwitchMap encapsulates two selector
- Mappings in addition to its route Mappings; one for use with the
- SwitchMap's forward transformation (called the {\tt{"}}forward selector
- Mapping{\tt{"}}), and one for use with the SwitchMap's inverse transformation
- (called the {\tt{"}}inverse selector Mapping{\tt{"}}). The forward selector Mapping
- must have the same number of inputs as the route Mappings, but
- should have only one output. Likewise, the inverse selector Mapping
- must have the same number of outputs as the route Mappings, but
- should have only one input.
-
- When the SwitchMap is used to transform a position in the forward
- direction (from input to output), each supplied input position is
- first transformed by the forward transformation of the forward selector
- Mapping. This produces a single output value for each input position
- referred to as the selector value. The nearest integer to the selector
- value is found, and is used to index the array of route Mappings (the
- first supplied route Mapping has index 1, the second route Mapping has
- index 2, etc). If the nearest integer to the selector value is less
- than 1 or greater than the number of route Mappings, then the SwitchMap
- output position is set to a value of AST\_\_BAD on every axis. Otherwise,
- the forward transformation of the selected route Mapping is used to
- transform the supplied input position to produce the SwitchMap output
- position.
-
- When the SwitchMap is used to transform a position in the inverse
- direction (from {\tt{"}}output{\tt{"}} to {\tt{"}}input{\tt{"}}), each supplied {\tt{"}}output{\tt{"}} position
- is first transformed by the inverse transformation of the inverse
- selector Mapping. This produces a selector value for each {\tt{"}}output{\tt{"}}
- position. Again, the nearest integer to the selector value is found,
- and is used to index the array of route Mappings. If this selector
- index value is within the bounds of the array of route Mappings, then
- the inverse transformation of the selected route Mapping is used to
- transform the supplied {\tt{"}}output{\tt{"}} position to produce the SwitchMap
- {\tt{"}}input{\tt{"}} position. If the selector index value is outside the bounds
- of the array of route Mappings, then the SwitchMap {\tt{"}}input{\tt{"}} position is
- set to a value of AST\_\_BAD on every axis.
-
- In practice, appropriate selector Mappings should be chosen to
- associate a different route Mapping with each region of coordinate
- space. Note that the \htmlref{SelectorMap}{SelectorMap} class of Mapping is particularly
- appropriate for this purpose.
-
- If a compound Mapping contains a SwitchMap in series with its own
- inverse, the combination of the two adjacent SwitchMaps will be
- replaced by a \htmlref{UnitMap}{UnitMap} when the compound Mapping is simplified using
- \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}.
- }
- \sstconstructor{
- \htmlref{AST\_SWITCHMAP}{AST_SWITCHMAP}
- }
- \sstdiytopic{
- Inheritance
- }{
- The SwitchMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The SwitchMap class does not define any new attributes beyond those
- which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The SwitchMap class does not define any new routines beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- TimeFrame\sstlabel{TimeFrame}
-}{
- Time coordinate system description
-}{
- \sstdescription{
- A TimeFrame is a specialised form of one-dimensional \htmlref{Frame}{Frame} which
- represents various coordinate systems used to describe positions in
- time.
-
- A TimeFrame represents a moment in time as either an Modified Julian
- Date (MJD), a Julian Date (JD), a Besselian epoch or a Julian epoch,
- as determined by the \htmlref{System}{System} attribute. Optionally, a zero point can be
- specified (using attribute \htmlref{TimeOrigin}{TimeOrigin}) which results in the TimeFrame
- representing time offsets from the specified zero point.
-
- Even though JD and MJD are defined as being in units of days, the
- TimeFrame class allows other units to be used (via the Unit attribute)
- on the basis of simple scalings (60 seconds = 1 minute, 60 minutes = 1
- hour, 24 hours = 1 day, 365.25 days = 1 year). Likewise, Julian epochs
- can be described in units other than the usual years. Besselian epoch
- are always represented in units of (tropical) years.
-
- The \htmlref{TimeScale}{TimeScale} attribute allows the time scale to be specified (that
- is, the physical process used to define the rate of flow of time).
- MJD, JD and Julian epoch can be used to represent a time in any
- supported time scale. However, Besselian epoch may only be used with the
- {\tt{"}}TT{\tt{"}} (Terrestrial Time) time scale. The list of supported time scales
- includes universal time and siderial time. Strictly, these represent
- angles rather than time scales, but are included in the list since
- they are in common use and are often thought of as time scales.
-
- When a time value is formatted it can be formated either as a simple
- floating point value, or as a Gregorian date (see the Format
- attribute).
- }
- \sstconstructor{
- \htmlref{AST\_TIMEFRAME}{AST_TIMEFRAME}
- }
- \sstdiytopic{
- Inheritance
- }{
- The TimeFrame class inherits from the Frame class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Frames, every
- TimeFrame also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AlignTimeScale}{AlignTimeScale}: Time scale in which to align TimeFrames
-
- \sstitem
- \htmlref{LTOffset}{LTOffset}: The offset of Local Time from UTC, in hours.
-
- \sstitem
- \htmlref{TimeOrigin}{TimeOrigin}: The zero point for TimeFrame axis values
-
- \sstitem
- \htmlref{TimeScale}{TimeScale}: The timescale used by the TimeFrame
-
- }
- Several of the Frame attributes inherited by the TimeFrame class
- refer to a specific axis of the Frame (for instance \htmlref{Unit(axis)}{Unitaxis},
- \htmlref{Label(axis)}{Labelaxis}, etc). Since a TimeFrame is strictly one-dimensional,
- it allows these attributes to be specified without an axis index.
- So for instance, {\tt{"}}Unit{\tt{"}} is allowed in place of {\tt{"}}Unit(1){\tt{"}}.
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those routines applicable to all Frames, the
- following routines may also be applied to all TimeFrames:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AST\_CURRENTTIME}{AST_CURRENTTIME}: Return the current system time
- }
- }
-}
-\sstroutine{
- TimeMap\sstlabel{TimeMap}
-}{
- Sequence of time coordinate conversions
-}{
- \sstdescription{
- A TimeMap is a specialised form of 1-dimensional \htmlref{Mapping}{Mapping} which can be
- used to represent a sequence of conversions between standard time
- coordinate systems.
-
- When a TimeMap is first created, it simply performs a unit
- (null) Mapping. Using the \htmlref{AST\_TIMEADD}{AST_TIMEADD}
- routine, a series of coordinate conversion steps may then be
- added. This allows multi-step conversions between a variety of
- time coordinate systems to be assembled out of a set of building
- blocks.
-
- For details of the individual coordinate conversions available,
- see the description of the AST\_TIMEADD routine.
- }
- \sstconstructor{
- \htmlref{AST\_TIMEMAP}{AST_TIMEMAP} (also see AST\_TIMEADD)
- }
- \sstdiytopic{
- Inheritance
- }{
- The TimeMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The TimeMap class does not define any new attributes beyond those
- which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those routines applicable to all Mappings, the
- following routine may also be applied to all TimeMaps:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AST\_TIMEADD}{AST_TIMEADD}: Add a time coordinate conversion to an TimeMap
- }
- }
-}
-\sstroutine{
- TranMap\sstlabel{TranMap}
-}{
- Mapping with specified forward and inverse transformations
-}{
- \sstdescription{
- A TranMap is a \htmlref{Mapping}{Mapping} which combines the forward transformation of
- a supplied Mapping with the inverse transformation of another
- supplied Mapping, ignoring the un-used transformation in each
- Mapping (indeed the un-used transformation need not exist).
-
- When the forward transformation of the TranMap is referred to, the
- transformation actually used is the forward transformation of the
- first Mapping supplied when the TranMap was constructed. Likewise,
- when the inverse transformation of the TranMap is referred to, the
- transformation actually used is the inverse transformation of the
- second Mapping supplied when the TranMap was constructed.
- }
- \sstconstructor{
- \htmlref{AST\_TRANMAP}{AST_TRANMAP}
- }
- \sstdiytopic{
- Inheritance
- }{
- The TranMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The TranMap class does not define any new attributes beyond those
- which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The TranMap class does not define any new routines beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- UnitMap\sstlabel{UnitMap}
-}{
- Unit (null) Mapping
-}{
- \sstdescription{
- A UnitMap is a unit (null) \htmlref{Mapping}{Mapping} that has no effect on the
- coordinates supplied to it. They are simply copied. This can be
- useful if a Mapping is required (e.g. to pass to another
- routine) but you do not want it to have any effect.
- The \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes of a UnitMap are always equal and
- are specified when it is created.
- }
- \sstconstructor{
- \htmlref{AST\_UNITMAP}{AST_UNITMAP}
- }
- \sstdiytopic{
- Inheritance
- }{
- The UnitMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The UnitMap class does not define any new attributes beyond
- those which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The UnitMap class does not define any new routines beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- WcsMap\sstlabel{WcsMap}
-}{
- Implement a FITS-WCS sky projection
-}{
- \sstdescription{
- This class is used to represent sky coordinate projections as
- described in the FITS world coordinate system (FITS-WCS) paper II
- {\tt{"}}Representations of Celestial Coordinates in FITS{\tt{"}} by M. Calabretta
- and E.W. Griesen. This paper defines a set of functions, or sky
- projections, which transform longitude-latitude pairs representing
- spherical celestial coordinates into corresponding pairs of Cartesian
- coordinates (and vice versa).
-
- A WcsMap is a specialised form of \htmlref{Mapping}{Mapping} which implements these
- sky projections and applies them to a specified pair of coordinates.
- All the projections in the FITS-WCS paper are supported, plus the now
- deprecated {\tt{"}}TAN with polynomial correction terms{\tt{"}} projection which
- is refered to here by the code {\tt{"}}TPN{\tt{"}}. Using the FITS-WCS terminology,
- the transformation is between {\tt{"}}native spherical{\tt{"}} and {\tt{"}}projection
- plane{\tt{"}} coordinates (also called {\tt{"}}intermediate world coordinates{\tt{"}}.
- These coordinates may, optionally, be embedded in a space with more
- than two dimensions, the remaining coordinates being copied unchanged.
- Note, however, that for consistency with other AST facilities, a
- WcsMap handles coordinates that represent angles in radians (rather
- than the degrees used by FITS-WCS).
-
- The type of FITS-WCS projection to be used and the coordinates
- (axes) to which it applies are specified when a WcsMap is first
- created. The projection type may subsequently be determined
- using the \htmlref{WcsType}{WcsType} attribute and the coordinates on which it acts
- may be determined using the \htmlref{WcsAxis(lonlat)}{WcsAxislonlat} attribute.
-
- Each WcsMap also allows up to 100 {\tt{"}}projection parameters{\tt{"}} to be
- associated with each axis. These specify the precise form of the
- projection, and are accessed using \htmlref{PVi\_m}{PVi_m} attribute, where {\tt{"}}i{\tt{"}} is
- the integer axis index (starting at 1), and m is an integer
- {\tt{"}}parameter index{\tt{"}} in the range 0 to 99. The number of projection
- parameters required by each projection, and their meanings, are
- dependent upon the projection type (most projections either do not
- use any projection parameters, or use parameters 1 and 2 associated
- with the latitude axis). Before creating a WcsMap you should consult
- the FITS-WCS paper for details of which projection parameters are
- required, and which have defaults. When creating the WcsMap, you must
- explicitly set values for all those required projection parameters
- which do not have defaults defined in this paper.
- }
- \sstconstructor{
- \htmlref{AST\_WCSMAP}{AST_WCSMAP}
- }
- \sstdiytopic{
- Inheritance
- }{
- The WcsMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Mappings, every
- WcsMap also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{NatLat}{NatLat}: Native latitude of the reference point of a FITS-WCS projection
-
- \sstitem
- \htmlref{NatLon}{NatLon}: Native longitude of the reference point of a FITS-WCS projection
-
- \sstitem
- \htmlref{PVi\_m}{PVi_m}: FITS-WCS projection parameters
-
- \sstitem
- PVMax: Maximum number of FITS-WCS projection parameters
-
- \sstitem
- \htmlref{WcsAxis(lonlat)}{WcsAxislonlat}: FITS-WCS projection axes
-
- \sstitem
- \htmlref{WcsType}{WcsType}: FITS-WCS projection type
- }
- }
- \sstdiytopic{
- Functions
- }{
- The WcsMap class does not define any new routines beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- WinMap\sstlabel{WinMap}
-}{
- Map one window on to another by scaling and shifting each axis
-}{
- \sstdescription{
- A Winmap is a linear \htmlref{Mapping}{Mapping} which transforms a rectangular
- window in one coordinate system into a similar window in another
- coordinate system by scaling and shifting each axis (the window
- edges being parallel to the coordinate axes).
-
- A WinMap is specified by giving the coordinates of two opposite
- corners (A and B) of the window in both the input and output
- coordinate systems.
- }
- \sstconstructor{
- \htmlref{AST\_WINMAP}{AST_WINMAP}
- }
- \sstdiytopic{
- Inheritance
- }{
- The WinMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The WinMap class does not define any new attributes beyond those
- which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The WinMap class does not define any new routines beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- XmlChan\sstlabel{XmlChan}
-}{
- I/O Channel using XML to represent Objects
-}{
- \sstdescription{
- A XmlChan is a specialised form of \htmlref{Channel}{Channel} which supports XML I/O
- operations. Writing an \htmlref{Object}{Object} to an XmlChan (using
- \htmlref{AST\_WRITE}{AST_WRITE}) will, if the Object is suitable, generate an
- XML description of that Object, and reading from an XmlChan will
- create a new Object from its XML description.
-
- Normally, when you use an XmlChan, you should provide {\tt{"}}source{\tt{"}}
- and {\tt{"}}sink{\tt{"}} routines which connect it to an external data store
- by reading and writing the resulting XML text. These routines
- should perform any conversions needed between external character
- encodings and the internal ASCII encoding. If no such routines
- are supplied, a Channel will read from standard input and write
- to standard output.
- }
- \sstconstructor{
- \htmlref{AST\_XMLCHAN}{AST_XMLCHAN}
- }
- \sstdiytopic{
- Inheritance
- }{
- The XmlChan class inherits from the Channel class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Channels, every
- XmlChan also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{XmlFormat}{XmlFormat}: \htmlref{System}{System} for formatting Objects as XML
-
- \sstitem
- \htmlref{XmlIndent}{XmlIndent}: Controls output of indentation and line feeds
-
- \sstitem
- \htmlref{XmlLength}{XmlLength}: Controls output buffer length
-
- \sstitem
- \htmlref{XmlPrefix}{XmlPrefix}: The namespace prefix to use when writing
- }
- }
- \sstdiytopic{
- Functions
- }{
- The XmlChan class does not define any new routines beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- ZoomMap\sstlabel{ZoomMap}
-}{
- Zoom coordinates about the origin
-}{
- \sstdescription{
- The ZoomMap class implements a \htmlref{Mapping}{Mapping} which performs a {\tt{"}}zoom{\tt{"}}
- transformation by multiplying all coordinate values by the same
- scale factor (the inverse transformation is performed by
- dividing by this scale factor). The number of coordinate values
- representing each point is unchanged.
- }
- \sstconstructor{
- \htmlref{AST\_ZOOMMAP}{AST_ZOOMMAP}
- }
- \sstdiytopic{
- Inheritance
- }{
- The ZoomMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Mappings, every
- ZoomMap also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{Zoom}{Zoom}: ZoomMap scale factor
- }
- }
- \sstdiytopic{
- Functions
- }{
- The ZoomMap class does not define any new routines beyond those
- which are applicable to all Mappings.
- }
-}
-\normalsize
-
-\cleardoublepage
-\section{\label{ss:commanddescriptions}UNIX Command Descriptions}
-The commands described here are provided for use from the UNIX shell
-to assist with developing software which uses AST. To use these
-commands, you should ensure that the directory
-``/star/bin''\footnote{Or the equivalent directory if AST is installed
-in a non-standard location.} is on your PATH.
-\small
-\sstroutine{
- ast\_link\sstlabel{ast_link}
-}{
- Link a program with the AST library
-}{
- \sstdescription{
- This command should be used when building programs which use the AST
- library, in order to generate the correct arguments to allow the compiler
- to link your program. The arguments generated are written to standard
- output but may be substituted into the compiler command line in the
- standard UNIX way using backward quotes (see below).
-
- By default, it is assumed that you are building a stand-alone program
- which does not produce graphical output. However, switches are provided
- for linking other types of program.
- }
- \sstinvocation{
- f77 program.f -L/star/lib `ast\_link [switches]` -o program
- }
- \sstexamples{
- \sstexamplesubsection{
- f77 display.f -L/star/lib `ast\_link -pgplot` -o display
- }{
- Compiles and links a Fortran program called ``display'' which uses
- the standard version of PGPLOT for graphical output.
- }
- \sstexamplesubsection{
- f77 plotit.f -L. -L/star/lib `ast\_link -grf` -lgrf -o plotit
- }{
- Compiles and links a Fortran program ``plotit''. The ``-grf''
- switch indicates that graphical output will be delivered through
- a graphical interface which you have implemented yourself, which
- corresponds to the interface required by the current version of AST.
- Here, this interface is supplied by means of the ``-lgrf'' library
- reference.
- }
- \sstexamplesubsection{
- f77 plotit.f -L. -L/star/lib `ast\_link -grf\_v2.0` -lgrf -o plotit
- }{
- Compiles and links a Fortran program ``plotit''. The ``-grf\_v2.0''
- switch indicates that graphical output will be delivered through
- a graphical interface which you have implemented yourself, which
- corresponds to the interface required by version 2.0 of AST.
- Here, this interface is supplied by means of the ``-lgrf'' library
- reference.
- }
- }
- \sstdiytopic{
- Switches
- }{
- The following switches may optionally be given to this command to
- modify its behaviour:
-
- \sstitemlist{
-
- \sstitem
- ``-csla'': Ignored. Provided for backward compatibility only.
-
- \sstitem
- ``-fsla'': Ignored. Provided for backward compatibility only.
-
- \sstitem
- ``-ems'': Requests that the program be linked so that error messages
- produced by the AST library are delivered via the Starlink EMS (Error
- Message Service) library (Starlink \htmlref{System}{System} Note SSN/4). By default,
- error messages are simply written to standard error.
-
- \sstitem
- ``-drama'': Requests that the program be linked so that error messages
- produced by the AST library are delivered via the DRAMA Ers (Error
- Reporting Service) library. By default, error messages are simply
- written to standard error.
-
- \sstitem
- ``-grf'': Requests that no arguments be generated to specify which
- 2D graphics system is used to display output from the AST library. You
- should use this option only if you have implemented an interface to a
- new graphics system yourself and wish to provide your own arguments for
- linking with it. This switch differs from the other ``grf'' switches in
- that it assumes that your graphics module implements the complete
- interface required by the current version of AST. If future versions of
- AST introduce new functions to the graphics interface, this switch will
- cause ``unresolved symbol'' errors to occur during linking, warning you
- that you need to implement new functions in your graphics module. To
- avoid such errors, you can use one of the other, version-specific,
- switches in place of the ``-grf'' switch, but these will cause run-time
- errors to be reported if any AST function is invoked which requires
- facilities not in the implemented interface.
-
- \sstitem
- ``-grf\_v2.0'': This switch is equivalent to the ``-mygrf'' switch.
- It indicates that you want to link with your own graphics module
- which implements the 2D graphics interface required by V2.0 of AST.
-
- \sstitem
- ``-grf\_v3.2'': Indicates that you want to link with your own
- graphics module which implements the 2D graphics interface required by
- V3.2 of AST.
-
- \sstitem
- ``-myerr'': Requests that no arguments be generated to specify how
- error messages produced by the AST library should be delivered. You
- should use this option only if you have implemented an interface to a
- new error delivery system yourself and wish to provide your own
- arguments for linking with it.
-
- \sstitem
- ``-mygrf'': This switch has been superceeded by the ``-grf'' switch,
- but is retained in order to allow applications to be linked with a
- graphics module which implements the 2D interface used by AST V2.0. It
- is equivalent to the ``-grf\_v2.0'' switch.
-
- \sstitem
- ``-pgp'': Requests that the program be linked so that 2D
- graphical output from the AST library is displayed via the
- Starlink version of the PGPLOT graphics package (which uses GKS
- for its output). By default, no 2D graphics package is linked and
- this will result in an error at run time if AST routines are
- invoked that attempt to generate graphical output.
-
- \sstitem
- ``-pgplot'': Requests that the program be linked so that 2D
- graphical output from the AST library is displayed via
- the standard (or ``native'') version of the PGPLOT graphics
- package. By default, no 2D graphics package is linked and this will
- result in an error at run time if AST routines are invoked that
- attempt to generate graphical output.
-
- \sstitem
- ``-grf3d'': Requests that no arguments be generated to specify which
- 3D graphics system is used to display output from the AST library. You
- should use this option only if you have implemented an interface to a
- new 3D graphics system yourself and wish to provide your own arguments
- for linking with it.
-
- \sstitem
- ``-pgp3d'': Requests that the program be linked so that 3D
- graphical output from the AST library is displayed via the
- Starlink version of the PGPLOT graphics package (which uses GKS
- for its output). By default, no 3D graphics package is linked and
- this will result in an error at run time if AST routines are
- invoked that attempt to generate graphical output.
-
- \sstitem
- ``-pgplot3d'': Requests that the program be linked so that 3D
- graphical output from the AST library is displayed via
- the standard (or ``native'') version of the PGPLOT graphics
- package. By default, no 3D graphics package is linked and this will
- result in an error at run time if AST routines are invoked that
- attempt to generate graphical output.
- }
- }
- \sstdiytopic{
- SLALIB
- }{
- The AST distribution includes a cut down subset of the C version of
- the SLALIB library written by Pat Wallace. This subset contains only
- the functions needed by the AST library. It is built as part of the
- process of building AST and is distributed under GPL (and is thus
- compatible with the AST license). Previous version of this script
- allowed AST applications to be linked against external SLALIB
- libraries (either Fortran or C) rather than the internal version.
- The current version of this script does not provide this option,
- and always uses the internal SLALIB library. However, for backward
- compatibility, this script still allows the {\tt{"}}-fsla{\tt{"}} and {\tt{"}}-csla{\tt{"}} flags
- (previously used for selecting which version of SLALIB to use) to be
- specified, but they will be ignored.
- }
-}
-\sstroutine{
- ast\_link\_adam\sstlabel{ast_link_adam}
-}{
- Link an ADAM program with the AST library
-}{
- \sstdescription{
- This command should only be used when building Starlink ADAM programs
- which use the AST library, in order to generate the correct arguments
- to allow the ADAM ``alink'' command to link the program. The arguments
- generated are written to standard output but may be substituted into
- the ``alink'' command line in the standard UNIX way using backward
- quotes (see below).
-
- By default, it is assumed that you are building an ADAM program which
- does not produce graphical output. However, switches are provided for
- linking other types of program. This command should not be used when
- building stand-alone (non-ADAM) programs. Use the ``\htmlref{ast\_link}{ast_link}'' command
- instead.
- }
- \sstinvocation{
- alink program.f -L/star/lib `ast\_link\_adam [switches]`
- }
- \sstexamples{
- \sstexamplesubsection{
- alink display.f -L/star/lib `ast\_link\_adam -pgplot`
- }{
- Compiles and links an ADAM Fortran program called ``display'' which
- uses the standard version of PGPLOT for graphical output.
- }
- \sstexamplesubsection{
- alink plotit.f -L. -L/star/lib `ast\_link\_adam -grf` -lgrf
- }{
- Compiles and links an ADAM Fortran program ``plotit''. The ``-grf''
- switch indicates that graphical output will be delivered through
- a graphical interface which you have implemented yourself, which
- corresponds to the interface required by the current version of AST.
- Here, this interface is supplied by means of the ``-lgrf'' library
- reference.
- }
- \sstexamplesubsection{
- alink plotit.f -L. -L/star/lib `ast\_link\_adam -grf\_v2.0` -lgrf
- }{
- Compiles and links an ADAM Fortran program ``plotit''. The ``-grf\_v2.0''
- switch indicates that graphical output will be delivered through
- a graphical interface which you have implemented yourself, which
- corresponds to the interface required by version 2.0 of AST.
- Here, this interface is supplied by means of the ``-lgrf'' library
- reference.
- }
- }
- \sstdiytopic{
- Switches
- }{
- The following switches may optionally be given to this command to
- modify its behaviour:
-
- \sstitemlist{
-
- \sstitem
- ``-csla'': Ignored. Provided for backward compatibility only.
-
- \sstitem
- ``-fsla'': Ignored. Provided for backward compatibility only.
-
- \sstitem
- ``-grf'': Requests that no arguments be generated to specify which
- 2D graphics system is used to display output from the AST library. You
- should use this option only if you have implemented an interface to a
- new graphics system yourself and wish to provide your own arguments for
- linking with it. This switch differs from the other ``grf'' switches in
- that it assumes that your graphics module implements the complete
- interface required by the current version of AST. If future versions of
- AST introduce new functions to the graphics interface, this switch will
- cause ``unresolved symbol'' errors to occur during linking, warning you
- that you need to implement new functions in your graphics module. To
- avoid such errors, you can use one of the other, version-specific,
- switches in place of the ``-grf'' switch, but these will cause run-time
- errors to be reported if any AST function is invoked which requires
- facilities not in the implemented interface.
-
- \sstitem
- ``-grf\_v2.0'': This switch is equivalent to the ``-mygrf'' switch.
- It indicates that you want to link with your own graphics module which
- implements the 2D graphics interface required by V2.0 of AST.
-
- \sstitem
- ``-grf\_v3.2'': Indicates that you want to link with your own graphics
- module which implements the 2D graphics interface required by V3.2 of AST.
-
- \sstitem
- ``-myerr'': Requests that no arguments be generated to specify how
- error messages produced by the AST library should be delivered. You
- should use this option only if you have implemented an interface to a
- new error delivery system yourself and wish to provide your own
- arguments for linking with it. By default, error messages are delivered
- in the standard ADAM way via the EMS Error Message Service (Starlink
- \htmlref{System}{System} Note SSN/4).
-
- \sstitem
- ``-mygrf'': This switch has been superceeded by the ``-grf'' switch,
- but is retained in order to allow applications to be linked with a
- graphics module which implements the interface used by AST V2.0. It is
- equivalent to the ``-grf\_v2.0'' switch.
-
- \sstitem
- ``-pgp'': Requests that the program be linked so that 2D
- graphical output from the AST library is displayed via the
- Starlink version of the PGPLOT graphics package (which uses GKS
- for its output). By default, no graphics package is linked and
- this will result in an error at run time if AST routines are
- invoked that attempt to generate graphical output.
-
- \sstitem
- ``-pgplot'': Requests that the program be linked so that 2D
- graphical output from the AST library is displayed via the
- standard (or ``native'') version of the PGPLOT graphics
- package. By default, no graphics package is linked and this will
- result in an error at run time if AST routines are invoked that
- attempt to generate graphical output.
-
- \sstitem
- ``-grf3d'': Requests that no arguments be generated to specify which
- 3D graphics system is used to display output from the AST library. You
- should use this option only if you have implemented an interface to a
- new 3D graphics system yourself and wish to provide your own arguments
- for linking with it.
-
- \sstitem
- ``-pgp3d'': Requests that the program be linked so that 3D
- graphical output from the AST library is displayed via the
- Starlink version of the PGPLOT graphics package (which uses GKS
- for its output). By default, no 3D graphics package is linked and
- this will result in an error at run time if AST routines are
- invoked that attempt to generate graphical output.
-
- \sstitem
- ``-pgplot3d'': Requests that the program be linked so that 3D
- graphical output from the AST library is displayed via
- the standard (or ``native'') version of the PGPLOT graphics
- package. By default, no 3D graphics package is linked and this will
- result in an error at run time if AST routines are invoked that
- attempt to generate graphical output.
- }
- }
- \sstdiytopic{
- SLALIB
- }{
- The AST distribution includes a cut down subset of the C version of
- the SLALIB library written by Pat Wallace. This subset contains only
- the functions needed by the AST library. It is built as part of the
- process of building AST and is distributed under GPL (and is thus
- compatible with the AST license). Previous version of this script
- allowed AST applications to be linked against external SLALIB
- libraries (either Fortran or C) rather than the internal version.
- The current version of this script does not provide this option,
- and always uses the internal SLALIB library. However, for backward
- compatibility, this script still allows the {\tt{"}}-fsla{\tt{"}} and {\tt{"}}-csla{\tt{"}} flags
- (previously used for selecting which version of SLALIB to use) to be
- specified, but they will be ignored.
- }
-}
-\normalsize
-
-\newpage
-\section{\xlabel{FitsWcsCoverage}\label{ss:fitswcscoverage}FITS-WCS Coverage}
-
-This appendix gives details of the \htmlref{FitsChan}{FitsChan} class
-implementation of the conventions described in the FITS-WCS papers
-available at
-\htmladdnormallink{http://fits.gsfc.nasa.gov/fits\_wcs.html}
-{http://fits.gsfc.nasa.gov/fits_wcs.html}. These conventions are
-used only if the \htmlref{Encoding}{Encoding} attribute of the FitsChan
-has the value ``FITS-WCS'' (whether set explicitly or defaulted). It
-should always be possible for a \htmlref{FrameSet}{FrameSet} to be read
-(using the
-\htmlref{AST\_READ}{AST_READ}
-function) from a FitsChan containing a header which conforms to these
-conventions. However, only those FrameSets which are compatible with the
-FITS-WCS model can be \emph{written} to a FitsChan using the
-\htmlref{AST\_WRITE}{AST_WRITE}
-function. For instance, if the current \htmlref{Frame}{Frame} of a
-FrameSet is re-mapped using, say, an arbitrary \htmlref{MathMap}{MathMap}
-then the FrameSet will no longer be compatible with the FITS-WCS model,
-and so will not be written out successfully to a FitsChan.
-
-The following sub-sections describe the details of the implementation of
-each of the first four FITS-WCS papers. Here, the term ``pixel axes'' is
-used to refer to the FITS pixel coordinates (i.e. the centre of the
-first image pixel has a value 1.0 on each pixel axis); the term ``IWC
-axes'' is used to refer to the axes of the Intermediate World Coordinate
-system; and the term ``WCS axes'' is used to refer to the axes of the final
-physical coordinate system described by the CTYPE\emph{i} keywords.
-
-\subsection{Paper I - General Linear Coordinates}
-When reading a \htmlref{FrameSet}{FrameSet} from a \htmlref{FitsChan}{FitsChan}, these conventions are used if the CTYPE\emph{i} keyword
-values within the FitsChan do not conform to the conventions described in
-later papers, in which case the axes are assumed to be linear. When
-writing a FrameSet to a FitsChan, these conventions are used for axes
-which are described by a simple \htmlref{Frame}{Frame} (\emph{i.e.} not a
-\htmlref{SkyFrame}{SkyFrame}, \htmlref{SpecFrame}{SpecFrame}, \emph{etc.}).
-
-Table \ref{tab:fitspaper1} describes the use made by AST of each keyword
-defined by FITS-WCS paper I.
-
-\begin{table}[htbp]
-\begin{tabular}{|l|p{2.5in}|p{2.5in}|}
-\hline
-\multicolumn{1}{|c|}{{\bf Keyword}} & \multicolumn{1}{c|}{{\bf Read}}
-& \multicolumn{1}{c|}{{\bf Write}} \\ \hline
-
-\fitskey{WCSAXES\emph{a}}{Ignored.}{Set to the number of axes in the WCS
-Frame - only written if different to NAXIS.}
-
-\fitskey{CRVAL\emph{ia}}{Used to create the pixel to WCS
-\htmlref{Mapping}{Mapping}.}{Always written (see ``Choice of Reference
-Point'' below).}
-
-\fitskey{CRPIX\emph{ja}}{Used to create the pixel to WCS Mapping.}{Always
-written (see ``Choice of Reference Point'' below).}
-
-\fitskey{CDELT\emph{ia}}{Used to create the pixel to WCS Mapping.}{Only
-written if the \htmlref{CDMatrix}{CDMatrix} attribute of the FitsChan is
-set to zero.}
-
-\fitskey{CROTA\emph{i}}{Used to create the pixel to WCS Mapping.}{Only
-written in FITS-AIPS and FITS-AIPS++ encodings.}
-
-\fitskey{CTYPE\emph{ia}}{Used to choose the class and attributes of the
-WCS Frame, and to create the pixel to WCS Mapping (note, ``STOKES'' and
-``COMPLEX'' axes are treated as unknown linear axes).}{Always written
-(see ``Use and Choice of CTYPE keywords'' below).}
-
-\fitskey{CUNIT\emph{ia}}{Used to set the Units attributes
-of the WCS Frame.}{Only written if the Units attribute of the WCS Frame
-has been set explicitly. If so, the Units value for each axis is used as
-the CUNIT value.}
-
-\fitskey{PC\emph{i\_j}\emph{a}}{Used to create the pixel to WCS
-Mapping.}{Only written if the CDMatrix attribute of the FitsChan is set to
-zero.}
-
-\fitskey{CD\emph{i\_j}\emph{a}}{Used to create the pixel to WCS
-Mapping.}{Only written if the CDMatrix attribute of the FitsChan is set to
-a non-zero value.}
-
-\fitskey{PV\emph{i\_ma}}{Ignored for linear axes.}{Not written if the axes
-are linear.}
-
-\fitskey{PS\emph{i\_ma}}{Ignored.}{Not used.}
-
-\fitskey{WCSNAME\emph{a}}{Used to set the \htmlref{Domain}{Domain} attribute
-of the WCS Frame.}{Only written if the Domain attribute of the WCS Frame
-has been set explicitly. If so, the Domain value is used as the WCSNAME
-value.}
-
-\fitskey{CRDER\emph{ia}}{Ignored.}{Not used.}
-
-\fitskey{CSYER\emph{ia}}{Ignored.}{Not used.}
-
-\hline
-\end{tabular}
-\vspace{3.mm}
-\caption{Use of FITS-WCS Paper I keywords}
-\label{tab:fitspaper1}
-\end{table}
-
-\subsubsection{Requirements for a Successful Write Operation}
-When writing a \htmlref{FrameSet}{FrameSet} in which the WCS
-\htmlref{Frame}{Frame} is a simple Frame to a \htmlref{FitsChan}{FitsChan},
-success depends on the \htmlref{Mapping}{Mapping} from pixel coordinates
-(the base Frame in the FrameSet) to the WCS Frame being linear. The write
-operation will fail if this is not the case.
-
-\subsubsection{Use and Choice of CTYPE\emph{i} keywords}
-When reading a \htmlref{FrameSet}{FrameSet} from a \htmlref{FitsChan}{FitsChan} the CTYPE\emph{i} values in the FitsChan are used to set the
-Symbol attributes of the corresponding WCS \htmlref{Frame}{Frame}. The Label attributes of the WCS Frame are set from
-the CNAME\emph{i} keywords, if present in the header. Otherwise they are set
-from the CTYPE\emph{i} comments strings in the header, so long as each
-axis has a unique non-blank comment. Otherwise, the Label attributes are
-set to the CTYPE\emph{i} values. The above procedure is over-ridden if
-the axis types conform to the conventions described in paper II or III,
-as described below.
-
-When writing a FrameSet to a FitsChan, each CTYPE\emph{i} value is set to
-the value of the Symbol attribute of the corresponding axis in the Frame
-being written. If a value has been set explicitly for the axis Label
-attribute, it is used as the axis comment (except that any existing
-comments in the FitsChan take precedence if the keyword value has not
-changed). The above procedure is over-ridden if the Frame is a
-\htmlref{SkyFrame}{SkyFrame} or a \htmlref{SpecFrame}{SpecFrame}, in which
-case the CTYPE\emph{i} value is derived from the \htmlref{System}{System}
-attribute of the Frame and the nature of the pixel to WCS \htmlref{Mapping}{Mapping}
-according to the conventions of papers II and III, as described below.
-
-\subsubsection{Choice of Reference Point}
-When writing a \htmlref{FrameSet}{FrameSet} to a
-\htmlref{FitsChan}{FitsChan}, the pixel coordinates of the
-reference point for linear axes (i.e. the CRPIX\emph{j} values) are
-chosen as follows:
-
-\begin{itemize}
-\item If the FrameSet is being written to a FitsChan which previously
-contained a set of axis descriptions with the same identifying letter,
-then the previous CRVAL\emph{j}values are converted into the coordinate system
-of the \htmlref{Frame}{Frame} being written (if possible). These values are then
-transformed into the pixel Frame, and the closest integer pixel values
-are used as the CRPIX keywords.
-\item If the above step could not be performed for any reason, the
-central pixel is used as the reference point. This requires the image
-dimensions to be present in the FitsChan in the form of a set of
-NAXIS\emph{j} keyword values.
-\item If both the above two steps failed for any axis, then the pixel
-reference position is set to a value of 1.0 on the pixel axis.
-\end{itemize}
-
-The pixel to WCS \htmlref{Mapping}{Mapping} is then used to find the corresponding
-CRVAL\emph{j}values.
-
-Again, the above procedure is over-ridden if the Frame is a
-\htmlref{SkyFrame}{SkyFrame} or a \htmlref{SpecFrame}{SpecFrame}, in which
-case the conventions of papers II and III are used as described below.
-
-
-\subsubsection{Choice of Axis Ordering}
-When reading a \htmlref{FrameSet}{FrameSet} from a
-\htmlref{FitsChan}{FitsChan}, WCS axis $i$ in the current
-\htmlref{Frame}{Frame} of the
-resulting FrameSet corresponds to axis $i$ in the FITS header.
-
-When writing a FrameSet to a FitsChan, the axis ordering for the FITS
-header is chosen to make the CD\emph{i\_j} or PC\emph{i\_j} matrix
-predominately diagonal. This means that the axis numbering in the FITS
-header will not necessarily be the same as that in the AST Frame.
-
-\subsubsection{Alternate Axis Descriptions}
-When reading a \htmlref{FrameSet}{FrameSet} from a
-\htmlref{FitsChan}{FitsChan} which contains alternate axis descriptions,
-each complete set of axis descriptions results in a single \htmlref{Frame}{Frame} being added
-to the final FrameSet, connected via an appropriate
-\htmlref{Mapping}{Mapping} to the base pixel Frame. The \htmlref{Ident}{Ident} attribute of the Frame is set to hold the single alphabetical
-character which is used to identify the set of axis descriptions within
-the FITS header (a single space is used for the primary axis descriptions).
-
-When writing a FrameSet to a FitsChan, it is assumed that the base Frame
-represents pixel coordinates, and the current Frame represents the
-primary axis descriptions. If there are any other Frames present in the
-FrameSet, an attempt is made to create a complete set of ``alternate''
-set of keywords describing each additional Frame. The first character in
-the Ident attribute of the Frame is used as the single character
-descriptor to be appended to the keyword, with the proviso that a given
-character can only be used once. If a second Frame is found with an Ident
-attribute which has already been used, its Ident attribute is ignored and
-the next free character is used instead. Note, failure to write a set of
-alternate axis descriptions does not result in failure of the entire
-write operation: the primary axis descriptions are still written,
-together with any other alternate axis descriptions which can be produced
-successfully.
-
-\subsection{Paper II - Celestial Coordinates}
-These conventions are used when reading a \htmlref{FrameSet}{FrameSet}
-from a \htmlref{FitsChan}{FitsChan} containing appropriate CTYPE\emph{i}
-values, and when writing a FrameSet in which the WCS \htmlref{Frame}{Frame}
-is a \htmlref{SkyFrame}{SkyFrame}.
-
-Table \ref{tab:fitspaper2} describes the use made by AST of each keyword
-whose meaning is defined or extended by FITS-WCS paper II.
-
-\begin{table}[htbp]
-\begin{tabular}{|l|p{2.5in}|p{2.5in}|}
-\hline
-\multicolumn{1}{|c|}{{\bf Keyword}} & \multicolumn{1}{c|}{{\bf Read}}
-& \multicolumn{1}{c|}{{\bf Write}} \\ \hline
-
-\fitskey{CTYPE\emph{ia}}{All coordinate systems and projection types
-listed in paper II are supported (note, ``CUBEFACE'' axes are treated as
-unknown linear axes). In addition, "-HPX" (HEALPix) is supported.}{Determined by the \htmlref{System}{System} attribute
-of the SkyFrame and the \htmlref{WcsType}{WcsType} attribute of the
-\htmlref{WcsMap}{WcsMap} within the FrameSet.}
-
-\fitskey{CUNIT\emph{ia}}{Ignored (assumed to be 'degrees').}{Not written.}
-
-\fitskey{PV\emph{i\_ma}}{Used to create the pixel to WCS \htmlref{Mapping}{Mapping} (values
-are stored as attributes of a WcsMap within this Mapping).}{Values are
-obtained from the WcsMap in the pixel to WCS Mapping.}
-
-\fitskey{LONPOLE\emph{a}}{Used to create the pixel to WCS Mapping. Also
-stored as a \htmlref{PVi\_m}{PVi_m} attribute for the longitude axis of the WcsMap.}{Only
-written if not equal to the default value defined in paper II (see
-``Choice of LONPOLE/LATPOLE'' below).}
-
-\fitskey{LATPOLE\emph{a}}{Used to create the pixel to WCS Mapping. Also
-stored as a PV attribute for the longitude axis of the WcsMap.}{Only
-written if not equal to the default value defined in paper II (see
-``Choice of LONPOLE/LATPOLE'' below).}
-
-\fitskey{RADESYS\emph{a}}{Used to set the attributes of the SkyFrame. All
-values supported except that ecliptic coordinates are currently always
-assumed to be FK5.}{Always written. Determined by the System attribute of
-the SkyFrame.}
-
-\fitskey{EQUINOX\emph{a}}{Used to set the \htmlref{Equinox}{Equinox} attribute
-of the SkyFrame.}{Written if relevant. Determined by the Equinox attribute of
-the SkyFrame.}
-
-\fitskey{EPOCH}{Used to set the Equinox attribute of the SkyFrame.}{Only
-written if using FITS-AIPS and FITS-AIPS++ encodings. Determined by the Equinox attribute
-of the SkyFrame.}
-
-\fitskey{MJD-OBS}{Used to set the \htmlref{Epoch}{Epoch} attribute of the
-SkyFrame. DATE-OBS is used if MJD-OBS is not present. A default value based on
-RADESYS and EQUINOX is used if used if DATE-OBS is not present
-either.}{Determined by the Epoch attribute of the SkyFrame. Only written
-if this attribute has been set to an explicit value (in which case
-DATE-OBS is also written).}
-
-\hline
-\end{tabular}
-\vspace{3.mm}
-\caption{Use of FITS-WCS Paper II keywords}
-\label{tab:fitspaper2}
-\end{table}
-
-\subsubsection{Requirements for a Successful Write Operation}
-When writing a \htmlref{FrameSet}{FrameSet} in which the WCS
-\htmlref{Frame}{Frame} is a \htmlref{SkyFrame}{SkyFrame} to a
-\htmlref{FitsChan}{FitsChan}, success depends on the following conditions
-being met:
-
-\begin{enumerate}
-\item The \htmlref{Mapping}{Mapping} from pixel coordinates (the base Frame
-in the FrameSet) to the WCS SkyFrame includes a \htmlref{WcsMap}{WcsMap}.
-\item The Mapping prior to the WcsMap (\emph{i.e.} from pixel to IWC) is linear.
-\item The Mapping after the WcsMap (\emph{i.e.} from native spherical to
-celestial coordinates) is a spherical rotation for the
-celestial axes, and linear for any other axes.
-\end{enumerate}
-
-If any of the above conditions do not hold, the write operation will be
-unsuccessful.
-
-\subsubsection{Choice of LONPOLE/LATPOLE}
-When writing a \htmlref{FrameSet}{FrameSet} to a \htmlref{FitsChan}{FitsChan},
-the choice of LONPOLE and LATPOLE values is determined as follows:
-
-\begin{enumerate}
-
-\item If the projection represented by the \htmlref{WcsMap}{WcsMap} is
-azimuthal, then any values set for attributes ``PV\emph{i}\_3''
-and ``PV\emph{i}\_4'' (where ``\emph{i}'' is the index of the longitude axis)
-within the WcsMap are used as the LONPOLE and LATPOLE values. Reading a
-FrameSet from a FITS-WCS header
-results in the original LONPOLE and LATPOLE values being stored within a
-WcsMap within the FrameSet. Consequently, if a FrameSet is read from a
-FITS-WCS header and it is subsequently written out to a new FITS-WCS
-header, the original LONPOLE and LATPOLE values will usually be used in
-the new header (the exception being if the WcsMap has been explicitly
-modified before being written out again). Any extra rotation of the sky
-is absorbed into the CD\emph{i\_j} or PC\emph{i\_j} matrix (this is
-possible only if the projection is azimuthal).
-
-\item If the projection represented by the WcsMap is azimuthal but no
-values have been set for the ``PV\emph{i}\_3'' and ``PV\emph{i}\_4''
-attributes within the WcsMap, then the default LONPOLE and LATPOLE values
-are used. This results in no LONPOLE or LATPOLE keywords being stored in
-the header since default values are never stored. Any extra rotation of
-the sky is absorbed into the CD\emph{i\_j} or PC\emph{i\_j} matrix (this
-is possible only if the projection is azimuthal).
-
-\item If the projection represented by the WcsMap is not azimuthal,
-then the values of LONPOLE and LATPOLE are found by transforming the
-coordinates of the celestial north pole (\emph{i.e} longitude zero,
-latitude $+\pi/2$) into native spherical coordinates using the inverse of
-the \htmlref{Mapping}{Mapping} which follows the WcsMap.
-
-\end{enumerate}
-
-\subsubsection{User Defined Fiducial Points}
-When reading a \htmlref{FrameSet}{FrameSet} from a \htmlref{FitsChan}{FitsChan}, projection parameters
-PV\emph{i}\_0, PV\emph{i}\_1 and PV\emph{i}\_2 (for longitude axis
-``\emph{i}'') are used to indicate a user-defined fiducial point as
-described in section 2.5 of paper II. This results in a shift of IWC
-origin being applied \emph{before} the \htmlref{WcsMap}{WcsMap} which converts
-IWC into
-native spherical coordinates. The values of these projection parameters,
-if supplied, are stored as the corresponding \htmlref{PVi\_m}{PVi_m} attributes
-of the WcsMap.
-
-When writing a FrameSet to a FitsChan, the PV attributes of the WcsMap
-determine the native coordinates of the fiducial point (the fixed
-defaults for each projection described in paper II are used if the PV
-attributes of the WcsMap have not been assigned a value). The
-corresponding celestial coordinates are used as the CRVAL\emph{i}
-keywords and the corresponding pixel coordinates as the CRPIX\emph{j}
-keywords.
-
-\subsubsection{Common Non-Standard Features}
-A collection of common non-standard features are supported when reading a
-\htmlref{FrameSet}{FrameSet} from a \htmlref{FitsChan}{FitsChan}, in addition
-to those embodied within the
-available encodings of the FitsChan class. These are translated into the
-equivalent standard features before being used to create a FrameSet.
-Note, the reverse operation is never performed: it is not possible to
-produce non-standard features when writing a FrameSet to a FitsChan
-(other than those embodied in the available encodings of the FitsChan
-class). The supported non-standard features include:
-
-\begin{itemize}
-\item EQUINOX keywords with string values equal to a date preceded
-by the letter B or J (\emph{e.g.} ``B1995.0'').
-
-\item EQUINOX or EPOCH keywords with value zero (these are converted to
-B1950).
-
-\item The IRAF ``ZPX'' projection is represented by a
-\htmlref{WcsMap}{WcsMap} with type of
-AST\_\_ZPN. \htmlref{Projection}{Projection} parameter values are read from any WAT\emph{i\_nnn}
-keywords, and corresponding \htmlref{PVi\_m}{PVi_m} attributes are set in the
-WcsMap. The WAT\emph{i\_nnn} keywords may specify corrections to the basic
-ZPN projection by including ``lngcor'' or ``latcor'' terms. There is no
-direct equivalent in FITS-WCS to these terms and so they are ignored. If
-these correction terms are found, ASTWARN keywords are added to the FitsChan
-containing a warning message (but only if the \htmlref{Warnings}{Warnings}
-attribute of the FitsChan is set appropriately).
-
-\item The IRAF ``TNX'' projection is represented by a WcsMap with type of
-AST\_\_TPN (a distorted TAN projection retained within the WcsMap class
-from an early draft of the FITS-WCS paper II). Projection parameter values
-are read from any WAT\emph{i\_nnn} keywords, and corresponding PV
-attributes are set in the WcsMap. If the TNX projection cannot be
-converted exactly into an AST\_\_TPN projection, ASTWARN keywords are
-added to the FitsChan containing a warning message (but only if the
-Warnings attribute of the FitsChan is set appropriately).
-
-\item ``QV'' parameters for TAN projections (as produced by
-\htmladdnormallink{AUTOASTROM}{http://www.astro.gla.ac.uk/users/norman/star/autoastrom/}
-are renamed to the equivalent ``PV'' parameters.
-
-\end{itemize}
-
-\subsection{Paper III - Spectral Coordinates}
-These conventions are used when reading a \htmlref{FrameSet}{FrameSet}
-from a \htmlref{FitsChan}{FitsChan} which includes appropriate
-CTYPE\emph{i} values, and when writing a FrameSet in which
-the WCS \htmlref{Frame}{Frame} is a \htmlref{SpecFrame}{SpecFrame}.
-
-Table \ref{tab:fitspaper3} describes the use made by AST of each keyword
-whose meaning is defined or extended by FITS-WCS paper III.
-
-\begin{table}[htbp]
-\begin{tabular}{|l|p{2.5in}|p{2.5in}|}
-\hline
-\multicolumn{1}{|c|}{{\bf Keyword}} & \multicolumn{1}{c|}{{\bf Read}}
-& \multicolumn{1}{c|}{{\bf Write}} \\ \hline
-
-\fitskey{CTYPE\emph{ia}}{All coordinate systems and projection types
-listed in paper III are supported, except for the ``-TAB''
-algorithm (the ``-LOG'' algorithm may also be applied to non-spectral linear
-axes).}{Determined by the \htmlref{System}{System} attribute of the
-SpecFrame and the nature of the pixel to SpecFrame
-\htmlref{Mapping}{Mapping}.}
-
-\fitskey{CUNIT\emph{ia}}{Used to set the Units attribute of
-the SpecFrame (note, SpecFrames always have an ``active'' Units attribute
-(see astSetActiveUnit).}{Always written.}
-
-\fitskey{PV\emph{i\_ma}}{Used to create the pixel to WCS Mapping (values
-are stored as attributes of a \htmlref{GrismMap}{GrismMap}).}
-{Set from the attributes of the GrismMap, if present, and if set explicitly.}
-
-\fitskey{SPECSYS\emph{a}}{Used to set the \htmlref{StdOfRest}{StdOfRest}
-attribute of the SpecFrame (all systems are supported except CMBDIPOL).}
-{Set from the StdOfRest attribute of the SpecFrame, but only if it has been
-set explicitly.}
-
-\fitskey{SSYSOBS\emph{a}}{Ignored.}{Never written.}
-
-\fitskey{OBSGEO-X/Y/Z}{Used to set the \htmlref{ObsLon}{ObsLon} and
-\htmlref{ObsLat}{ObsLat} attributes of the Frame (the observers
-height above sea level is ignored).}{Set from the ObsLon and ObsLat
-attributes of the Frame, if they have been set explicitly (it is
-assumed that the observer is at sea level).}
-
-\fitskey{MJD-AVG}{Used to set the \htmlref{Epoch}{Epoch} attributes of
-the SpecFrame.}{Set from the Epoch attribute of the SpecFrame, if it has
-been set explicitly.}
-
-\fitskey{SSYSSRC\emph{a}}{Used to set the \htmlref{SourceVRF}{SourceVRF} attribute of the
-SpecFrame
-(all systems are supported except CMBDIPOL).} {Set from the SourceVRF
-attribute of the SpecFrame.}
-
-\fitskey{ZSOURCE\emph{a}}{Used to set the \htmlref{SourceVel}{SourceVel}
-attribute of the SpecFrame (the SourceVRF attribute
-is first set to the system indicated by the SSYSSRC keyword, and the
-ZSOURCE value is then converted to an apparent radial velocity and stored
-as the SourceVel attribute).}
-{Set from the SourceVel attribute of
-the SpecFrame, if it has been set explicitly (the SourceVel value is
-first converted from apparent radial velocity to redshift).}
-
-\fitskey{VELOSYS\emph{a}}{Ignored.}{Set from the attributes of the
-SpecFrame that define the standard of rest and the observers position.}
-
-\fitskey{RESTFRQ\emph{a}}{Used to set the \htmlref{RestFreq}{RestFreq}
-attribute of the SpecFrame.}{Set from the RestFreq attribute of the
-SpecFrame, but only if the System attribute is not set to
-``WAVE'', ``VOPT'', ``ZOPT'' or ``AWAV'', and only if RestFreq has been set
-explicitly.}
-
-\fitskey{RESTWAV\emph{a}}{Used to set the RestFreq
-attribute of the SpecFrame (after conversion from wavelength to frequency).}
-{Set from the RestFreq attribute of the SpecFrame (after conversion), but only if the
-System attribute is set to ``WAVE'', ``VOPT'', ``ZOPT'' or
-``AWAV'', and only if RestFreq has been set explicitly.}
-
-\fitskey{CNAME\emph{ia}}{Used to set the Label attributes of
-the WCS Frame keywords.}{Set from the Label attributes of the WCS Frame,
-if they have been set explicitly.}
-\hline
-\end{tabular}
-\vspace{3.mm}
-\caption{Use of FITS-WCS Paper III keywords}
-\label{tab:fitspaper3}
-\end{table}
-
-\subsubsection{Requirements for a Successful Write Operation}
-When writing a \htmlref{FrameSet}{FrameSet} in which the WCS \htmlref{Frame}{Frame} is a \htmlref{SpecFrame}{SpecFrame} to a
-\htmlref{FitsChan}{FitsChan}, the write operation is successful only if
-the \htmlref{Mapping}{Mapping} from pixel coordinates (the base Frame
-in the FrameSet) to the SpecFrame satisfies one of the following conditions:
-
-\begin{enumerate}
-\item It is linear.
-\item It is logarithmic.
-\item It is linear if the SpecFrame were to be re-mapped into one of the
-other spectral systems supported by FITS-WCS paper III.
-\item It contains a \htmlref{GrismMap}{GrismMap}, and the Mapping before the GrismMap (from
-pixel coordinates to grism parameter) is linear, and the Mapping after the
-GrismMap is either null or represents a change of spectral system from wavelength (air or
-vacuum) to one of the supported spectral systems.
-\end{enumerate}
-
-If none of the above conditions hold, the write operation will be
-unsuccessful.
-
-\subsubsection{Common Non-Standard Features}
-The following non-standard features are supported when reading spectral
-axes from a \htmlref{FitsChan}{FitsChan}:
-
-\begin{itemize}
-\item Conversion of ``-WAV'', ``-FRQ'' and ``-VEL'' algorithm codes
-(specified in early drafts of paper III) to the corresponding
-``-X2P'' form.
-\item Conversion of ``RESTFREQ'' to ``RESTFRQ''
-\end{itemize}
-
-\subsection{Paper IV - Coordinate Distortions}
-
-This paper proposes that an additional 4 character code be appended to
-the end of the CTYPE\emph{i} keyword to specify the nature of any
-distortion away from the basic algorithm described by the first 8
-characters of the CTYPE\emph{i} value. Currently AST ignores all such
-codes when reading a \htmlref{FrameSet}{FrameSet} from a
-\htmlref{FitsChan}{FitsChan} (except for the ``-SIP'' code
-defined by the SIRTF project - see below). This means that a FrameSet can
-still be read from such headers, but the \htmlref{Mapping}{Mapping} which
-gives the WCS
-position associated with a given pixel position will reflect only the
-basic algorithm and will not include the effects of the distortion.
-
-If such a FrameSet is then written out to a FitsChan, the resulting
-CTYPE\emph{i} keywords will include no distortion code.
-
-\subsubsection{The ``-SIP'' distortion code}
-
-The SIRTF project
-(\htmladdnormallink{http://sirtf.caltech.edu/SSC/}{http://sirtf.caltech.edu/SSC/})
-has developed its own system for encoding 2-dimensional image distortion
-within a FITS header, based on the proposals of paper IV. A description
-of this system is available in \htmladdnormallink
-{http://sirtf.caltech.edu/SSC/documents/WCSkeywords\_v1.3.pdf}
-{http://sirtf.caltech.edu/SSC/documents/WCSkeywords\_v1.3.pdf}. In this
-system, the presence of distortion is indicated by appending the
-distortion code ``-SIP'' to the CTYPE\emph{i} keyword values for the
-celestial axes. The distortion takes the form of a polynomial function
-which is applied to the pixel coordinates, after subtraction of the
-CRPIX\emph{j} values.
-
-This system is a strictly 2 dimensional system. When reading a
-\htmlref{FrameSet}{FrameSet} from a \htmlref{FitsChan}{FitsChan} which
-includes the ``-SIP'' distortion code, AST assumes that it
-is only applied to the first 2 WCS axes in a FITS header (i.e.
-CTYPE1 and CTYPE2). If the ``-SIP'' distortion code is attached to other
-axes, it will be ignored. The distortion itself is represented by a
-\htmlref{PolyMap}{PolyMap} within the resulting FrameSet.
-
-If a FrameSet is read from a FitsChan which includes ``-SIP''
-distortion, and an attempt is then made to write this FrameSet out to a
-FitsChan, the write operation will fail unless the distortion is
-insignificant (\emph{i.e.} is so small that the tests for linearity built
-into AST are passed). In this case, no distortion code will be appended to
-the resulting CTYPE\emph{i} keyword values.
-
-\newpage
-\section{\xlabel{changes_and_new_features}\label{ss:changes}Changes and New Features}
-
-\subsection{Changes Introduced in V1.1}
-
-The following describes the most significant changes which occurred in
-the AST library between versions V1.0 and V1.1 (not the most recent
-version):
-
-\begin{enumerate}
-
-\item A new ``How To\ldots'' section (\secref{ss:howto}) has been
-added to this document. It contains simple recipies for performing
-commonly-required operations using AST.
-
-\item A new \htmlref{AST\_UNFORMAT}{AST_UNFORMAT} function has been provided to read formatted
-coordinate values for the axes of a \htmlref{Frame}{Frame}
-(\secref{ss:unformattingaxisvalues}). In essence, this function is the
-inverse of \htmlref{AST\_FORMAT}{AST_FORMAT}. It may be used to decode user-supplied
-formatted values representing coordinates, turning them into numerical
-values for processing. Celestial coordinates may also be read using
-this function (\secref{ss:unformattingskyaxisvalues}) and free-format
-input is supported.
-
-\item The Format attribute string used by a \htmlref{SkyFrame}{SkyFrame} when formatting
-celestial coordinate values now allows the degrees/hours field to be
-omitted, so that celestial coordinates may be given in ({\em{e.g.}})
-arc-minutes and/or arc-seconds
-(\secref{ss:formattingskyaxisvalues}). As a result, the degrees/hours
-field is no longer included by default. A new ``t'' format specifier
-has been introduced (see the Format attribute) to allow minutes and/or
-seconds of time to be specified if required.
-
-\item A new routine \htmlref{AST\_MAPBOX}{AST_MAPBOX} has been introduced. This allows you
-to find the extent of a ``bounding box'' which just encloses another
-box after it has been transformed by a \htmlref{Mapping}{Mapping}. A typical use might be
-to calculate the size which an image would have if it were transformed
-by the Mapping.
-
-\item A new class of \htmlref{Object}{Object}, the \htmlref{IntraMap}{IntraMap}, has been introduced
-(\secref{ss:intramaps}). This is a specialised form of Mapping which
-encapsulates a privately-defined coordinate transformation routine
-({\em{e.g.}}\ written in Fortran) so that it may be used like any
-other AST Mapping. This allows you to create Mappings that perform any
-conceivable coordinate transformation.
-
-\item The internal integrity of a \htmlref{FrameSet}{FrameSet} is now automatically
-preserved whenever changes are made to any attributes which affect the
-current Frame (either by setting or clearing their values). This is
-accomplished by appropriately re-mapping the current Frame to account
-for any change to the coordinate system which it represents
-(\secref{ss:framesetintegrity}).
-
-\item The internal structure of a FrameSet is now automatically tidied
-to eliminate redundant nodes whenever any of its Frames is removed or
-re-mapped. Automatic simplification of any compound Mappings which
-result may also occur. The effect of this change is to prevent the
-accumulation of unnecessary structure in FrameSets which are
-repeatedly modified.
-
-\item Some improvements have been made to the algorithms for
-simplifying compound Mappings, as used by \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}.
-
-\item The textual representation used for some Objects
-({\em{i.e.}}\ when they are written to a \htmlref{Channel}{Channel}) has changed
-slightly, but remains compatible with earlier versions of AST.
-
-
-\item A problem has been fixed which could result when using \htmlref{AST\_READ}{AST_READ}
-to read FITS headers in which the CDELT value is zero. Previously,
-this could produce a Mapping whose inverse transformation was not
-defined and this could unnecessarily restrict the use to which it
-could be put. The problem has been overcome by supplying a suitable
-small CDELT value for FITS axes which have only a single pixel.
-
-\item A bug has been fixed which could occasionally cause a \htmlref{MatrixMap}{MatrixMap}
-to be used with the wrong \htmlref{Invert}{Invert} attribute value when it forms part of
-a compound Mapping which is being simplified using AST\_SIMPLIFY.
-
-\item A bug has been fixed which could cause the AST\_\_BAD parameter
-to have an incorrect value on some platforms.
-
-\item A problem has been fixed which could prevent tick marks being
-drawn on a coordinate axis close to a singularity in the coordinate
-system.
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.2}
-
-The following describes the most significant changes which occurred in
-the AST library between versions V1.1 and V1.2 (not the most recent
-version):
-
-\begin{enumerate}
-\item A new routine, \htmlref{AST\_POLYCURVE}{AST_POLYCURVE}, has been introduced to allow more
-efficient plotting of multiple geodesic curves
-(\secref{ss:plottinggeodesics}).
-
-\item A new set of functions, \htmlref{AST\_RESAMPLE$<$X$>$}{AST_RESAMPLEX}, has been
-introduced to perform resampling of gridded data such as images
-({\em{i.e.}}\ re-gridding) under the control of a geometrical
-transformation specified by a \htmlref{Mapping}{Mapping}.
-
-\item The command-line options ``$-$pgp'' and ``$-$pgplot'', which
-were previously synonymous when used with the ``\htmlref{ast\_link}{ast_link}'' and
-``\htmlref{ast\_link\_adam}{ast_link_adam}'' commands, are no longer synonymous. The option
-``$-$pgp'' now causes linking with the Starlink version of PGPLOT
-(which uses GKS to generate its output), while ``$-$pgplot'' links
-with the standard (or ``native'') version of PGPLOT.
-
-\item The routine \htmlref{AST\_MAPBOX}{AST_MAPBOX} has been changed to execute more
-quickly, although this has been achieved at the cost of some loss of
-robustness when used with difficult Mappings.
-
-\item A new value of ``FITS-IRAF'' has been introduced for the
-\htmlref{Encoding}{Encoding} attribute of a \htmlref{FitsChan}{FitsChan}. This new encoding provides an
-interim solution to the problem of storing coordinate system
-information in FITS headers, until the proposed new FITS-WCS standard
-becomes stable.
-
-\item When a \htmlref{FrameSet}{FrameSet} is created from a set of FITS header cards (by
-reading from a FitsChan using a ``foreign'' encoding), the base \htmlref{Frame}{Frame}
-of the resulting FrameSet now has its \htmlref{Domain}{Domain} attribute set to
-``GRID''. This reflects the fact that this Frame represents FITS data
-grid coordinates (equivalent to FITS pixel coordinates---see
-\secref{ss:domainconventions}). Previously, this Domain value was not
-set.
-
-\item \htmlref{AST\_FINDFITS}{AST_FINDFITS} now ignores trailing spaces in its keyword template.
-
-\item \htmlref{AST\_PUTFITS}{AST_PUTFITS} now recognises ``D'' and ``d'' as valid exponent
-characters in floating point numbers.
-
-\item The FitsChan class is now more tolerant of common minor
-violations of the FITS standard.
-
-\item The FitsChan class now incorporates an improved test for the
-linearity of Mappings, allowing more reliable conversion of AST data
-into FITS (using ``foreign'' FITS encodings).
-
-\item Some further improvements have been made to the algorithms for
-simplifying compound Mappings, as used by \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}.
-
-\item A new \htmlref{UnitRadius}{UnitRadius} attribute has been added to the \htmlref{SphMap}{SphMap}
-class. This allows improved simplification of compound Mappings
-(CmpMaps) involving SphMaps and typically improves performance when
-handling FITS world coordinate information.
-
-\item A \htmlref{MatrixMap}{MatrixMap} no longer propagates input coordinate values of
-AST\_\_BAD automatically to all output coordinates. If certain output
-coordinates do not depend on the affected input coordinate(s) because
-the relevant matrix elements are zero, then they may now remain valid.
-
-\item A minor bug has been corrected which could cause certain
-projections which involve half the celestial sphere to produce valid
-coordinates for the other (unprojected) half of the sphere as well.
-
-\item A bug has been fixed which could occasionally cause \htmlref{AST\_CONVERT}{AST_CONVERT}
-to think that conversion between a \htmlref{CmpFrame}{CmpFrame} and another Frame was
-possible when, in fact, it wasn't.
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.3}
-
-The following describes the most significant changes which occurred in
-the AST library between versions V1.2 and V1.3 (not the most recent
-version):
-
-\begin{enumerate}
-\item A new set of functions, \htmlref{AST\_RESAMPLE$<$X$>$}{AST_RESAMPLEX}, has been introduced to
-provide efficient resampling of gridded data, such as spectra and
-images, under the control of a geometrical transformation specified by
-a \htmlref{Mapping}{Mapping}. A variety of sub-pixel interpolation schemes are supported.
-
-\item A new class, \htmlref{PcdMap}{PcdMap}, has been introduced. This is a specialised
-form of Mapping which implements 2-dimensional pincushion or barrel
-distortion.
-
-\item A bug has been fixed which could cause a \htmlref{FitsChan}{FitsChan} to produce too
-many digits when formatting floating point values for inclusion in a
-FITS header if the numerical value was in the range -0.00099999\ldots
-to -0.0001.
-
-\item A bug has been fixed which could cause a FitsChan to lose the
-comment associated with a string value in a FITS header.
-
-\item A FitsChan now reports an error if it reads a FITS header which
-identifies a non-standard sky projection (previously, this was
-accepted without error and a Cartesian projection used instead).
-
-\item A bug has been fixed which could prevent conversion between the
-coordinate systems represented by two CmpFrames. This could only occur
-if the CmpFrames contained a relatively large number of nested Frames.
-
-%\item A bug has been fixed which could cause a program to crash if
-%FrameSets were nested inside each other (for example, if one \htmlref{FrameSet}{FrameSet}
-%had another FrameSet added to it for use as a \htmlref{Frame}{Frame} or Mapping). The
-%problem could only occur if the nested structure was loaded from a data
-%c+
-%file (using astRead).
-%c-
-%f+
-%file (using \htmlref{AST\_READ}{AST_READ}).
-%f-
-%
-\item Further improvements have been made to the simplification of
-compound Mappings, including fixes for several bugs which could cause
-indefinite looping or unwanted error messages.
-
-\item Some memory leaks have been fixed.
-
-\item A small number of documentation errors have been corrected.
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.4}
-
-The following describes the most significant changes which have occurred
-in the AST library between versions V1.3 and V1.4 (not the most recent
-version):
-
-\begin{enumerate}
-\item A new \htmlref{MathMap}{MathMap} class has been introduced. This is a form of
-\htmlref{Mapping}{Mapping} that allows you to define coordinate transformations in a
-flexible and transportable way using arithmetic operations and
-mathematical functions similar to those available in Fortran.
-
-\item {\bf{WARNING---INCOMPATIBLE CHANGE.}} Transformation routines
-used with the \htmlref{IntraMap}{IntraMap} class (see, for example, \htmlref{AST\_INTRAREG}{AST_INTRAREG}) now
-require a THIS pointer as their first argument. {\bf{Existing
-implementations will not continue to work correctly with this version
-of AST unless this argument is added.}} There is no need for existing
-software to make use of this pointer, but it must be present.
-
-This change has been introduced so that transformation functions can gain
-access to IntraMap attributes.
-
-\item A new \htmlref{IntraFlag}{IntraFlag} attribute has been added to the IntraMap
-class. This allows the transformation routines used by IntraMaps to
-adapt to produce the required transformation on a per-IntraMap basis
-(\secref{ss:intraflag}).
-
-\item The \htmlref{Plot}{Plot} attributes MajTickLen and MinTickLen, which control the
-length of major and minor tick marks on coordinate axes, may now be
-subscripted using an axis number. This allows tick marks of different
-lengths to be used on each axis. It also allows tick marks to be
-suppressed on one axis only by setting the length to zero.
-
-\item The value of the Plot attribute NumLab, which controls the
-plotting of numerical labels on coordinate axes, no longer has any
-effect on whether labelling of a coordinate grid is interior or
-exterior (as controlled by the \htmlref{Labelling}{Labelling} attribute).
-
-\item The \htmlref{FitsChan}{FitsChan} class now provides some support for the
-IRAF-specific ``ZPX'' sky projection, which is converted transparently
-into the equivalent FITS ``ZPN'' projection (see the description of the
-\htmlref{Encoding}{Encoding} attribute for details).
-
-\item The FitsChan class now recognises the coordinate system ``ICRS''
-(International Celestial Reference \htmlref{System}{System}) as equivalent to
-``FK5''. This is an interim measure and full support for the
-(exceedingly small) difference between ICRS and FK5 will be added at a
-future release.
-
-Note that ``ICRS'' is not yet recognised as a coordinate system by other
-classes such as \htmlref{SkyFrame}{SkyFrame}, so this change only facilitates the
-importation of foreign data.
-
-\item A bug in the FitsChan class has been fixed which could result in
-longitude values being incorrect by 180 degrees when using cylindrical
-sky projections, such as the FITS ``CAR'' projection.
-
-\item A bug in the FitsChan class has been fixed which could result in
-the FITS sky projection parameters ProjP(0) to ProjP(9) being
-incorrectly named PROJP1 to PROJP10 when written out as FITS cards.
-
-\item A bug in the FitsChan class has been fixed which could cause
-confusion between the FITS-IRAF and FITS-WCS encoding schemes if both
-a CD matrix and a PC matrix are erroneously present in a FITS header.
-
-\item Some minor memory leaks have been fixed.
-
-\item A small number of documentation errors have been corrected.
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.5}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V1.4 and V1.5 (not the most
-recent version):
-
-\begin{enumerate}
-
-\item The \htmlref{FitsChan}{FitsChan} class has been modified to support the latest draft
-FITS WCS standard, described in the two papers ``Representation of world
-coordinates in FITS'' (E.W.\,Greisen and M.\,Calabretta, dated 30th
-November, 1999), and ``Representation of celestial coordinates in FITS''
-(M.\,Calabretta and E.W.\,Greisen, dated 24th September, 1999). These are
-available at
-\htmladdnormallink{http://www.cv.nrao.edu/fits/documents/wcs/wcs.html}
-{http://www.cv.nrao.edu/fits/documents/wcs/wcs.html}.
-
-The FITS-WCS encoding now uses these updated conventions. The main
-changes are:
-
-\begin{itemize}
-\item Rotation and scaling of pixel axes is now represented by a matrix
-of {\tt CDj\_i} keywords instead of a combination of {\tt PCjjjiii} and
-{\tt CDELTj} keywords.
-\item \htmlref{Projection}{Projection} parameters are now associated with particular axes and
-are represented by {\tt \htmlref{PVi\_m}{PVi_m}} keywords instead of the {\tt PROJPm}
-keywords.
-\item The tangent plane projection (``TAN'') can now include optional
-polynomial correction terms.
-\item An entire set of keywords must be supplied for each set of secondary
-axis descriptions, and each such keyword must finish with a single
-character indicating which set it belongs to. This means that keywords
-which previously occupied eight characters have been shorten to seven to
-leave room for this extra character. Thus {\tt LONGPOLE} has become {\tt
-LONPOLE} and {\tt RADECSYS} has become {\tt RADESYS}.
-\end{itemize}
-
-\item Two new encodings have been added to the FitsChan class:
-\begin{description}
-
-\item [FITS-PC] This encoding uses the conventions of the now superseded
-FITS WCS paper by E.W.\,Greisen and M.\,Calabretta which used keywords
-{\tt CDELTj} and {\tt PCjjjiii} to describe axis scaling and rotation.
-These are the conventions which were used by the FITS-WCS encoding prior
-to version 1.5 of AST. This encoding is provided to allow existing data
-which use these conventions to be read. It should not in general be used
-to create new data.
-
-\item [FITS-AIPS] This encoding is based on the conventions described in the
-document ``Non-linear Coordinate Systems in AIPS'' by Eric W. Greisen
-(revised 9th September, 1994 and available by ftp from fits.cv.nrao.edu
-/fits/documents/wcs/aips27.ps.Z). This encoding uses {\tt CROTAi} and
-{\tt CDELTi} keywords to describe axis rotation and scaling.
-
-\end{description}
-
-\item The FitsChan class now provides some support for the IRAF-specific
-``TNX'' sky projection, which is converted transparently into the
-equivalent FITS ``TAN'' projection (see the description of the \htmlref{Encoding}{Encoding}
-attribute for details).
-
-\item FrameSets originally read from a DSS encoded FITS header can now be
-written out using the FITS-WCS encoding (a TAN projection with correction
-terms will be used) in addition to the DSS encoding. The reverse is also
-possible: FrameSets originally read from a FITS-WCS encoded FITS header
-and which use a TAN projection can now be written out using the DSS
-encoding.
-
-\item The algorithm used by the FitsChan class to verify that a \htmlref{FrameSet}{FrameSet}
-conforms to the FITS-WCS model has been improved so that FrameSets
-including more complex mixtures of parallel and serial Mappings
-can be written out using the FITS-WCS encoding.
-
-\item The FitsChan class has been changed so that long strings included in
-the description of an \htmlref{Object}{Object} can be saved and restored without truncation
-when using the NATIVE encoding. Previously, very long \htmlref{Frame}{Frame} titles,
-mathematical expressions, {\em etc.} were truncated if they exceeded the
-capacity of a single FITS header card. They are now split over several
-header cards so that they can be restored without truncation. Note, this
-facility is only available when using NATIVE encoding.
-
-\item The FitsChan class has a new attribute called \htmlref{Warnings}{Warnings} which
-can be used to select potentially dangerous conditions under which
-warnings should be issued. These conditions include (for instance)
-unsupported features within non-standard projections, missing keywords
-for which default values will be used, {\em etc}.
-
-\item The \htmlref{WcsMap}{WcsMap} class has been changed to support the changes made to the
-FITS-WCS encoding in the FitsChan class:
-\begin{itemize}
-\item Projection parameters are now associated with a particular axis and
-are specified using a new set of attributes called PVj\_m. Here, ``j'' is
-the index of an axis of WcsMap, and ``m'' is the index of the projection
-parameter.
-\item The old attributes ProjP(0) to ProjP(9) are still available but are
-now deprecated in favour of the new PVj\_m attributes. They are interpreted
-as aliases for PV(axlat)\_0 to PV(axlat)\_9, where ``axlat'' is the index of
-the latitude axis.
-\item The GLS projection projection has been renamed as SFL, but the
-AST\_\_GLS type has been retained as an alias for AST\_\_SFL.
-\end{itemize}
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.6}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V1.5 and V1.6:
-
-\begin{enumerate}
-
-
-\item A bug has been fixed in the \htmlref{Plot}{Plot} class which could cause groups
-of tick marks to be skipped when using very small gaps.
-
-\item A bug has been fixed in the Plot class which could cause axes to be
-labeled outside the visible window, resulting in no axes being visible.
-
-\item The FITS-WCS encoding used by the \htmlref{FitsChan}{FitsChan} class now includes the
-WCSNAME keyword. When creating a \htmlref{FrameSet}{FrameSet} from FITS headers, the values of
-the WCSNAME keywords are now used as the \htmlref{Domain}{Domain} names for the corresponding
-Frames in the returned FrameSet. When writing a FrameSet to a FITS header
-the Domain names of each \htmlref{Frame}{Frame} are stored in WCSNAME keywords in the
-header.
-
-\item The FITS-WCS encoding used by the FitsChan class now attempts to
-retain the identification letter associated with multiple axis
-descriptions. When reading a FrameSet from a FITS header, the identification
-letter is stored in the \htmlref{Ident}{Ident} attribute for each Frame. When writing a
-FrameSet to a FITS header, the identification letter is read from the
-Ident attribute of each Frame. The letter to associate with each Frame
-can be changed by assigning a new value to the Frame's Ident attribute.
-
-\item The FITS-WCS, FITS-PC, FITS-IRAF and FITS-AIPS encodings used by the
-FitsChan class now create a \htmlref{SkyFrame}{SkyFrame} with the \htmlref{System}{System} attribute set to
-``Unknown'' if the CTYPE keywords in the supplied header refers to an
-unknown celestial coordinate system. Previously, a Frame was used instead
-of a SkyFrame.
-
-\item The FITS-WCS, FITS-PC, FITS-IRAF and FITS-AIPS encodings used by the
-FitsChan class no longer report an error if the FITS header contains no
-CTYPE keywords. It is assumed that a missing CTYPE keyword implies that
-the world coordinate system is linear and identically equal to
-``intermediate world coordinates''.
-
-\item The new value ``noctype'' is now recognized by the \htmlref{Warnings}{Warnings} attribute
-of the FitsChan class. This value causes warnings to be issued if CTYPE
-keywords are missing from foreign encodings.
-
-\item A new attribute called \htmlref{AllWarnings}{AllWarnings} has been added to the FitsChan
-class. This is a read-only, space separated list of all the known condition
-names which can be specified in the Warnings attribute.
-
-\item The FitsChan class now attempts to assigns a \htmlref{Title}{Title} to each Frame in
-a FrameSet read using a foreign encoding. The Title is based on the Domain
-name of the Frame. If the Frame has no Domain name, the default Title
-supplied by the Frame class is retained.
-
-\item The FitsChan class uses the comments associated with CTYPE
-keywords as axis labels when reading a foreign encoding. This behaviour
-has been modified so that the default labels provided by the Frame class
-are retained (instead of using the CTYPE comments) if any of the CTYPE
-comments are identical.
-
-\item A new ``interpolation'' scheme identified by the symbolic constant
-AST\_\_BLOCKAVE has been added to the \htmlref{AST\_RESAMPLE$<$X$>$}{AST_RESAMPLEX} set of
-functions. The new scheme calculates each output pixel value by finding
-the mean of the input pixels in a box centred on the output pixel.
-
-\item The SkyFrame class can now be used to represent an arbitrary spherical
-coordinate system by setting its System attribute to ``Unknown''.
-
-\item The indices of the latitude and longitude axes of a SkyFrame can
-now be found using new read-only attributes \htmlref{LatAxis}{LatAxis} and \htmlref{LonAxis}{LonAxis}. The
-effects of any axis permutation is taken into account.
-
-\item A new attribute called Ident has been added to the \htmlref{Object}{Object} class.
-This serves the same purpose as the existing \htmlref{ID}{ID} attribute, but (unlike ID)
-its value is transferred to the new Object when a copy is made.
-
-\item A bug has been fixed which could prevent complex CmpFrames
-behaving correctly (for instance, resulting in the failure of attempts
-to find a \htmlref{Mapping}{Mapping} between a \htmlref{CmpFrame}{CmpFrame} and itself).
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.7}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V1.6 and V1.7:
-
-\begin{enumerate}
-
-\item The \htmlref{Frame}{Frame} class has a new method called
-\htmlref{AST\_ANGLE}{AST_ANGLE}
-which returns the angle subtended by two points at a third point within a
-2 or 3 dimensional Frame.
-
-\item The Frame class has a new method called
-\htmlref{AST\_OFFSET2}{AST_OFFSET2}
-which calculates a position which is offset away from a given starting
-point by a specified distance along a geodesic curve which passes
-through the starting point at a given position angle. It can only be used
-with 2-dimensional Frames.
-
-\item The Frame class has a new method called
-\htmlref{AST\_AXDISTANCE}{AST_AXDISTANCE}
-which returns the increment between two supplied axis values. For
-axes belonging to SkyFrames, the returned value is normalized into
-the range $\pm\pi$.
-
-\item The Frame class has a new method called
-\htmlref{AST\_AXOFFSET}{AST_AXOFFSET}
-which returns an axis value a given increment away from a specified axis
-value. For axes belonging to SkyFrames, the returned value is normalized into
-the range $\pm\pi$ (for latitude axes) or zero to $2\pi$ (for longitude
-axes).
-
-\item The \htmlref{Plot}{Plot} class has a new method called
-\htmlref{AST\_GENCURVE}{AST_GENCURVE}
-which allows generalised user-defined curves to be drawn. The curve is
-defined by a user-supplied \htmlref{Mapping}{Mapping} which maps distance along the curve
-into the corresponding position in the current Frame of the Plot. The new
-method then maps these current Frame position into graphics coordinates,
-taking care of any non-linearities or discontinuities in the mapping.
-
-\item The Plot class has a new method called
-\htmlref{AST\_GRFSET}{AST_GRFSET}
-which allows the underlying primitive graphics functions to be selected
-at run-time. Previously, the functions used by the Plot class to produce
-graphics could only be selected at link-time, using the options of the
-\htmlref{ast\_link}{ast_link} command. The new Plot method allows an application to over-ride
-the functions established at link-time, by specifying alternative
-primitive graphics routines. In addition, the two new Plot methods
-\htmlref{AST\_GRFPUSH}{AST_GRFPUSH} and \htmlref{AST\_GRFPOP}{AST_GRFPOP}
-allow the current graphics routines to be saved and restore on a
-first-in-last-out stack, allowing temporary changes to be made to the set
-of registered graphics routines.
-
-\item The DrawAxes attribute of the Plot class can now be specified
-independantly for each axis, by appending the axis index to the
-end of the attribute name.
-
-\item A bug has been fixed in the Plot class which could result in axis
-labels being drawn on inappropriate edges of the plotting box when using
-``interior'' labelling.
-
-\item A bug has been fixed in the \htmlref{IntraMap}{IntraMap} class which could cause IntraMaps
-to be corrupted after transforming any points.
-
-\item Bugs have been fixed in the \htmlref{FitsChan}{FitsChan} class which could cause
-inappropriate ordering of headers within a FitsChan when writing or
-reading objects using NATIVE encodings.
-
-\item A bug has been fixed in the FitsChan class which could cause the
-celestial longitude of a pixel to be estimated incorrectly by 180 degrees
-if the reference point is at either the north or the south pole.
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V1.8-2}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V1.7 and V1.8-2:
-
-\begin{enumerate}
-
-\item The \htmlref{SkyFrame}{SkyFrame} class has a new attribute called \htmlref{NegLon}{NegLon} which allows
- longitude values to be displayed in the range $-\pi$ to $+\pi$, instead
- of the usual range zero to $2.\pi$.
-
-\item Some new
-routines (\htmlref{AST\_ANGLE}{AST_ANGLE}, \htmlref{AST\_AXANGLE}{AST_AXANGLE}, \htmlref{AST\_RESOLVE}{AST_RESOLVE}, \htmlref{AST\_OFFSET2}{AST_OFFSET2}, \htmlref{AST\_AXOFFSET}{AST_AXOFFSET},
-\htmlref{AST\_AXDISTANCE}{AST_AXDISTANCE})
-have been added to the \htmlref{Frame}{Frame} class to allow navigation of the coordinate space
-to be performed without needing to know the underlying geometry
-of the co-ordinate system (for instance, whether it is Cartesian or
-spherical).
-
-Note, version 1.8-1 contained many of these facilities, but
-some have been changed in version 1.8-2. Particularly, positions angles
-are now referred to the second Frame axis for {\em all} classes of Frames
-(including SkyFrames), and the
-AST\_BEAR routine has been replaced by AST\_AXANGLE.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.8-3}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V1.8-2 and V1.8-3:
-
-\begin{enumerate}
-
-\item A new method called astDecompose has been added to the \htmlref{Mapping}{Mapping} class
-which enables pointers to be obtained to the component parts of \htmlref{CmpMap}{CmpMap} and
-\htmlref{CmpFrame}{CmpFrame} objects.
-
-\item Functions within proj.c and wcstrig.c have been renamed to avoid name
-clashes with functions in more recent versions of Mark Calabretta's wcslib
-library.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.8-4}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V1.8-3 and V1.8-4:
-
-\begin{enumerate}
-
-\item The \htmlref{FitsChan}{FitsChan} class has a new attribute called \htmlref{DefB1950}{DefB1950} which can be
-used to select the default reference frame and equinox to be used if
-a FitsChan with foreign encoding contains no indication of the
-reference frame or equinox.
-
-\item A bug has been fixed in the FitsChan class which could prevent
-astWrite from creating a set of FITS headers from an otherwise valid
-\htmlref{FrameSet}{FrameSet}, when when using FITS-AIPS encoding.
-
-\item A bug has been fixed in the FitsChan class which could cause
-astRead to mis-interpret the FITS CROTA keyword when using FITS-AIPS
-encoding.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.8-5}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V1.8-4 and V1.8-5:
-
-\begin{enumerate}
-
-\item The \htmlref{Plot}{Plot} class defines new graphical elements Axis1, Axis2,
-Grid1, Grid2, NumLabs1, NumLabs2, TextLab1, TextLab2, Ticks1 and Ticks2.
-These allow graphical attributes (colour, width, etc) to be set for each
-axis individually. Previously, graphical attributes could only be set for
-both axes together, using graphical elements Axes, \htmlref{Grid}{Grid}, NumLabs,
-TextLabs and Ticks.
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V1.8-7}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V1.8-5 and V1.8-7:
-
-\begin{enumerate}
-
-\item A new attribute called \htmlref{CarLin}{CarLin} has been added to the \htmlref{FitsChan}{FitsChan} class
-which controls the way CAR projections are handled when reading a
-\htmlref{FrameSet}{FrameSet} from a non-native FITS header. Some FITS writers use a CAR
-projection to represent a simple linear transformation between pixel
-coordinates and celestial sky coordinates. This is not consistent with
-the definition of the CAR projection in the draft FITS-WCS standard, which
-requires the resultant \htmlref{Mapping}{Mapping} to include a 3D rotation from native
-spherical coordinates to celestial spherical coordinates, thus making the
-Mapping non-linear. Setting CarLin to 1 forces
-\htmlref{AST\_READ}{AST_READ}
-to ignore the FITS-WCS standard and treat any CAR projections as simple
-linear Mappings from pixel coordinates to celestial coordinates.
-
-\item A bug has been fixed which could result in axis Format attributes
-set by the user being ignored under certain circumstances.
-
-\item A bug in the way tick marks positions are selected in the \htmlref{Plot}{Plot} class
-has been fixed. This bug could result in extra ticks marks being displayed at
-inappropriate positions. This bug manifested itself, for instance, if the
-Mapping represented by the Plot was a simple Cartesian to Polar Mapping.
-In this example, the bug caused tick marks to be drawn at negative radius
-values.
-
-\item A bug has been fixed which could prevent attribute settings from
-being read correctly by
-\htmlref{AST\_SET}{AST_SET},
-etc., on certain platforms (MacOS, for instance).
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.8-8}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V1.8-7 and V1.8-8:
-
-\begin{enumerate}
-
-\item A bug has been fixed in the \htmlref{FitsChan}{FitsChan} class which could cause
-problems when creating a \htmlref{FrameSet}{FrameSet} from a FITS header containing WCS
-information stored in the form of Digitised Digitised Sky Survey (DSS)
-keywords. These problems only occurred for DSS fields in the southern
-hemisphere, and resulted in pixel positions being mapped to sky positions
-close to the corresponding {\em northern} hemispshere field.
-
-\item A new method called
-\htmlref{AST\_BOUNDINGBOX}{AST_BOUNDINGBOX}
-has been added to the \htmlref{Plot}{Plot} class. This method returns the bounding box of
-the previous graphical output produced by a Plot method.
-
-\item A new attribute called \htmlref{Invisible}{Invisible} has been added to the Plot class
-which suppresses the graphical output normally produced by Plot methods.
-All the calculations needed to produce the normal output are still
-performed however, and so the bounding box returned by the new
-AST\_BOUNDINGBOX
-method is still usable.
-
-\item Bugs have been fixed related to the appearance of graphical output
-produced by the Plot class. These bugs were to do with the way in which
-graphical elements relating to a specific axis (e.g. {\tt Colour(axis1)}, etc.)
-interacted with the corresponding generic element (e.g.
-{\tt Colour(axes)}, etc.).
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V1.8-13}
-
-The following describes the most significant changes which occurred
-in the AST library between versions V1.8-8 and V1.8-13:
-
-\begin{enumerate}
-
-\item The \htmlref{FitsChan}{FitsChan} class has been modified so that LONPOLE keywords
-are only produced by \htmlref{AST\_WRITE}{AST_WRITE} when necessary. For zenithal projections such as
-TAN, the LONPOLE keyword can always take its default value and so is
-not included in the FITS header produced by AST\_WRITE
-Previously, the unnecessary production of a LONPOLE keyword could prevent
-FrameSets being written out using encodings which do not support the
-LONPOLE keyword (such as FITS-IRAF).
-
-\item The FitsChan class has been modified to retain leading and trailing
-spaces within COMMENT cards.
-
-\item The FitsChan class has been modified to only use CTYPE comments as
-axis labels if all non-celestial axes have unique non-blank comments
-(otherwise the CTYPE keyword values are used as labels).
-
-\item The FitsChan class has been modified so that it does not append a
-trailing ``Z'' character to the end of DATE-OBS keyword values.
-
-\item The FitsChan class has been modified to use latest list of FITS-WCS
-projections, as described in the FITS-WCS paper II, ``Representations of
-celestial coordinates in FITS'' (Calabretta \& Greisen, draft dated 23
-April 2002). Support has been retained for the polynomial correction
-terms which previous drafts have allowed to be associated with TAN
-projections.
-
-\item The \htmlref{WcsMap}{WcsMap} class has additional projection types of AST\_\_TPN
-(which implements a distorted TAN projection) and AST\_\_SZP. The AST\_\_TAN
-projection type now represents a simple TAN projection and has no
-associated projection parameters. In addition, the usage of projection
-parameters has been brought into line with the the FITS-WCS paper II.
-
-\item The WcsMap class has been modified so that a ``get'' operation on a
-projection parameter attribute will return the default value defined in the
-FITS-WCS paper II if no value has been set for the attribute. Previously, a
-value of AST\_\_BAD was returned in such a situation.
-
-\item The \htmlref{Frame}{Frame} class has new attributes \htmlref{Top(axis)}{Topaxis} and \htmlref{Bottom(axis)}{Bottomaxis} which
-allow a ``plottable range'' to be specified for each Frame axis. The grid
-produced by the \htmlref{AST\_GRID}{AST_GRID} routine will not extend beyond these limits.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V2.0}
-
-Note, \htmlref{Frame}{Frame} descriptions created using AST V2.0 will not be readable by
-applications linked with earlier versions of AST. This applies to Frame
-descriptions created using:
-\begin{itemize}
-\item the \htmlref{Channel}{Channel} class
-\item the \htmlref{FitsChan}{FitsChan} class if the NATIVE \htmlref{Encoding}{Encoding} is used
-\item the \htmlref{AST\_SHOW}{AST_SHOW} routine.
-\end{itemize}
-
-Applications must be re-linked with AST V2.0 in order to be able to read
-Frame descriptions created by AST v2.0.
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V1.8-13 and V2.0 (the
-current version):
-
-\begin{enumerate}
-
-\item The default value for the \htmlref{Domain}{Domain} attribute provided by the \htmlref{CmpFrame}{CmpFrame}
-class has been changed from ``CMP'' to a string formed by concatenating
-the Domain attributes of the two component Frames, separated by a minus
-sign. If both component Domains are blank, then the old default of
-``CMP'' is retained for the CmpFrame Domain.
-
-\item The implementation of the
-\htmlref{AST\_WRITE}{AST_WRITE} routine
-within the FitsChan class has been modified. It will now attempt to
-produce a set of FITS header cards to describe a \htmlref{FrameSet}{FrameSet} even if the
-number of axes in the \htmlref{Current}{Current} Frames is greater than the number in the
-\htmlref{Base}{Base} Frame (that is, if there are more WCS axes than pixel axes). This
-has always been possible with NATIVE encoding, but has not previously
-been possible for foreign encodings. The WCSAXES keyword is used to store
-the number of WCS axes in the FITS header.
-
-\item Another change to the
-AST\_WRITE routine
-within the FitsChan class is that the ordering of ``foreign'' axes
-(\emph{i.e.} CTYPE keywords) is now chosen to make the CD (or PC) matrix
-as diagonal as possible - any element of axis transposition is removed by
-this re-ordering as recommended in FITS-WCS paper I. Previously the
-ordering was determined by the order of the axes in the Current Frame of
-the supplied FrameSet. This change does not affect NATIVE encoding.
-
-\item Support for spectral coordinate systems has been introduced
-throught the addition of two new classes, \htmlref{SpecFrame}{SpecFrame} and \htmlref{SpecMap}{SpecMap}.
-The SpecFrame is a 1-dimensional Frame which can be used to describe
-positions within an electromagnetic spectrum in various systems
-(wavelength, frequency, various forms of velocity,~{\em{etc.}}) and referred
-to various standards of rest (topocentric, geocentric, heliocentric
-LSRK,~{\em{etc.}}). The SpecMap is a \htmlref{Mapping}{Mapping} which can transform spectral
-axis values between these various systems and standards of rest. Note,
-FitsChans which have a foreign encoding (\emph{i.e.} any encoding other
-than NATIVE) are not yet able to read or write these new classes.
-
-\item Facilities have been added to the Frame class which allow
-differences in axis units to be taken into account when finding a Mapping
-between two Frames. In previous versions of AST, the Unit attribute was a
-purely descriptive item intended only for human readers - changing the
-value of Unit made no difference to the behaviour of the Frame. As of
-version 2.0, the Unit attribute can influence the nature of the Mappings
-between Frames. For instance, if the
-AST\_FINDRAME or \htmlref{AST\_CONVERT}{AST_CONVERT}
-method is used to find the Mapping between an \htmlref{Axis}{Axis} with Unit set to ``m''
-and another Axis with Unit set to ``km'', then the method will return a
-\htmlref{ZoomMap}{ZoomMap} which introduces a scaling factor of 0.001 between the two axes.
-These facilities assume that units are specified following the rules
-included in FITS-WCS paper I ({\em Representation of World
-Coordinates in FITS}, Greisen \& Calabretta).
-
-In order to minimise the risk of breaking existing software, the default
-behaviour for simple Frames is to ignore the Unit attribute ({\em{i.e.}}
-to retain the previous behaviour). However, the new Frame method
-\htmlref{AST\_SETACTIVEUNIT}{AST_SETACTIVEUNIT}
-may be used to ``activate'' (or deactivate) the new facilities within a
-specific Frame. Note, the new SpecFrame class is different to the simple
-Frame class in that the new facilities for handling units are always active
-within a SpecFrame.
-
-\item The \htmlref{System}{System} and \htmlref{Epoch}{Epoch} attributes fo the \htmlref{SkyFrame}{SkyFrame} class have been
-moved to the parent Frame class. This enables all sub-classes of Frame
-(such as the new SpecFrame class) to share these attributes, and to provide
-suitable options for each class.
-
-\item The Frame class has a new attribute called \htmlref{AlignSystem}{AlignSystem}, which allows
-control over the alignment process performed by the methods
-\htmlref{AST\_FINDFRAME}{AST_FINDFRAME} and AST\_CONVERT.
-
-
-\item The CmpFrame class has been modified so that attributes of a
-component Frame can be accessed without needing to extract the Frame first.
-To do this, append an axis index to the end of the attribute name. For
-instance, if a CmpFrame contains a SpecFrame and a SkyFrame (in that order),
-then the \htmlref{StdOfRest}{StdOfRest} attribute of the SpecFrame can be referred to as the
-``StdOfRest(1)'' attribute of the CmpFrame. Likewise, the \htmlref{Equinox}{Equinox} attribute
-of the SkyFrame can be accessed as the ``Equinox(2)'' (or equivalently
-``Equinox(3)'') attribute of the CmpFrame. The ``System(1)'' attribute of the
-CmpFrame will refer to the System attribute of the SpecFrame, whereas the
-``System(2)'' and ``System(3)'' attributes of the CmpFrame will refer to the
-System attribute of the SkyFrame (the ``System'' attribute without an axis
-specifier will refer to the System attribute of the CmpFrame as a whole,
-since System is an attribute of all Frames, and a CmpFrame is a Frame and
-so has its own System value which is independant of the System attributes
-of its component Frames).
-
-\item The algorithms used by the \htmlref{Plot}{Plot} class for determining when to omit
-overlapping axis labels, and the abbreviation of redundant leading fields
-within sexagesimal axis labels, have been improved to avoid some anomolous
-behaviour in previous versions.
-
-\item The curve drawing algorithm used by the Plot class has been
-modified to reduce the chance of it ``missing'' small curve sections,
-such as may be produced if a grid line cuts across the plot very close to
-a corner. Previously, these missed sections could sometimes result in
-axis labels being omitted.
-
-\item A new function
-(\htmlref{AST\_VERSION}{AST_VERSION})
-has been added to return the version of the AST library in use.
-
-\item Bugs have been fixed in the Plot class which caused serious problems
-when plotting high precision data. These problems could range from the
-omission of some tick marks to complete failure to produce a plot.
-
-\end{enumerate}
-
-Programs which are statically linked will need to be re-linked in
-order to take advantage of these new facilities.
-
-
-\subsection{Changes Introduced in V3.0}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V2.0 and V3.0:
-
-\begin{enumerate}
-
-\item Many changes have been made in the \htmlref{FitsChan}{FitsChan} class in order to bring
-the FITS-WCS encoding into line with the current versions of the FITS-WCS
-papers (see \htmladdnormallink{http://www.atnf.csiro.au/people/mcalabre/WCS/}
-{http://www.atnf.csiro.au/people/mcalabre/WCS/}):
-
-\begin{itemize}
-
-\item The rotation and scaling of the pixel axes may now be specified using
-either CD\emph{i\_j} keywords, or PC\emph{i\_j} and CDELTj keywords. A new attribute
-called \htmlref{CDMatrix}{CDMatrix} has been added to the FitsChan class to indicate which
-set of keywords should be used when writing a \htmlref{FrameSet}{FrameSet} to a FITS-WCS
-header.
-
-\item The FITS-WCS encoding now supports most of the conventions
-described in FITS-WCS paper III for the description of spectral
-coordinates. The exceptions are that the SSYSOBS keyword is not
-supported, and WCS stored in tabular form (as indicated by the ``-TAB''
-algorithm code) is not supported.
-
-
-\item User-specified fiducial points for WCS projections are now
-supported by FitsChans which use FITS-WCS encoding. This use keywords
-PVi\_0, PVi\_1 and PVi\_2 for the longitude axis.
-
-\item When reading a FITS-WCS header, a FitsChan will now use keywords PVi\_3
-and PVi\_4 for the longitude axis (if present) in preference to any LONPOLE
-and LATPOLE keywords which may be present. When writing a FITS-WCS header,
-both forms are written out.
-
-\item The number of WCS axes is stored in the WCSAXES keyword if its value
-would be different to that of the NAXIS keyword.
-
-\item Helio-ecliptic coordinates are now supported by FitsChans which use
-FITS-WCS encoding. This uses CTYPE codes ``HLON'' and ``HLAT''. The
-resulting \htmlref{SkyFrame}{SkyFrame} will have a \htmlref{System}{System} value of ``HELIOECLIPTIC'', and all
-the usual facilities, such as conversion to other celestial systems, are
-available.
-
-\item The FITS-WCS encoding now supports most of the conventions
-described in FITS-WCS paper III for the description of spectral
-coordinates. The exceptions are that the SSYSOBS keyword is not
-supported, and WCS stored in tabular form (as indicated by the ``-TAB''
-algorithm code) is not supported.
-
-\item When reading a FITS-WCS header, a FitsChan will now ignore any
-distortion codes which are present in CTYPE keywords. Here, a ``distortion
-code'' is the final group of four characters in a CTYPE value of the
-form ``xxxx-yyy-zzz'', as described in FITS-WCS paper IV. The exception
-to this is that the ``-SIP'' distortion code (as used by the SIRTF
-project - see
-\htmladdnormallink{
-http://sirtf.caltech.edu/SSC/documents/WCSkeywords\_v1.3.pdf}{
-http://sirtf.caltech.edu/SSC/documents/WCSkeywords\_v1.3.pdf}) is
-interpreted correctly and results in a \htmlref{PolyMap}{PolyMap} being used to represent
-the distortion in the resulting FrameSet. Note, ``-SIP'' distortion codes
-can only be read, not written. A FrameSet which uses a PolyMap will not
-in general be able to be written out to a FitsChan using any foreign
-encoding (although NATIVE encoding can of course be used).
-
-\item The \htmlref{Warnings}{Warnings} attribute of the FitsChan class now accepts values
-``BadVal'' (which gives warnings about conversion errors when reading
-FITS keyword values), ``Distortion'' (which gives warnings about
-unsupported distortion codes within CTYPE values), and ``BadMat'' (which
-gives a warning if the rotation/scaling matrix cannot be inverted).
-
-\item When writing a FrameSet to a FitsChan which uses a non-Native
-encoding, the comment associated with any card already in the FitsChan
-will be retained if the keyword value being written is the same as the
-keyword value already in the FitsChan.
-
-\item A FrameSet which uses the non-FITS projection type AST\_\_TPN (a TAN
-projection with polynomial distortion terms) can now be written to a
-FitsChan if the \htmlref{Encoding}{Encoding} attribute is set to FITS-WCS. The standard
-``-TAN'' code is used within the CTYPE values, and the distortion
-coefficients are encoded in keywords of the form `` QVi\_ma'', which are
-directly analogous to the standard ``PVi\_ma'' projection parameter keywords.
-Thus a FITS reader which does not recognise the QV keywords will still
-be able to read the header, but the distortion will be ignored.
-
-\item The default value for \htmlref{DefB1950}{DefB1950} attribute now depends on the value
-of the Encoding attribute.
-
-\item A new appendix has been added to SUN/210 and SUN/211 giving details
-of the implementation provided by the FitsChan class of the
-conventions contained in the first four FITS-WCS papers.
-\end{itemize}
-
-\item The SkyFrame class now supports two new coordinate systems ``ICRS''
-and ``HELIOECLIPTIC''. The default for the System attribute for SkyFrames
-has been changed from ``FK5'' to ``ICRS''.
-
-\item The
-\htmlref{AST\_RATE}{AST_RATE}
-function has been added which allows an estimate to be made of the rate of
-change of a \htmlref{Mapping}{Mapping} output with respect to one of the Mapping inputs.
-
-\item All attribute names for Frames of any class may now include an optional
-axis specifier. This includes those attributes which describe a property
-of the whole \htmlref{Frame}{Frame}. For instance, the \htmlref{Domain}{Domain} attribute may now be
-specified as ``Domain(1)'' in addition to the simpler ``Domain''. In cases
-such as this, where the attribute describes a property of the whole
-Frame, axis specifiers will usually be ignored. The exception is that a
-\htmlref{CmpFrame}{CmpFrame} will use the presence of an axis specifier to indicate that the
-attribute name relates to the primary Frame containing the specified
-axis, rather than to the CmpFrame as a whole.
-
-\item A new subclass of Mapping, the PolyMap, has been added which
-performs a general N-dimensional polynomial mapping.
-
-\item A new subclass of Mapping, the \htmlref{GrismMap}{GrismMap}, has been added which
-models the spectral dispersion produced by a grating, prism or grism.
-
-\item A new subclass of Mapping, the \htmlref{ShiftMap}{ShiftMap}, has been added which adds
-constant values onto all coordinates (this is equivalent to a \htmlref{WinMap}{WinMap}
-with unit scaling on all axes).
-
-\item Minor bugs have been fixed within the \htmlref{Plot}{Plot} class to do with the choice
-and placement of numerical axis labels.
-
-\item The \htmlref{SphMap}{SphMap} class has a new attribute called \htmlref{PolarLong}{PolarLong} which gives the
-longitude value to be returned when a Cartesian position corresponding to
-either the north or south pole is transformed into spherical coordinates.
-
-\item The \htmlref{WcsMap}{WcsMap} class now assigns a longitude of zero to output
-celestial coordinates which have a latitude of plus or minus 90 degrees.
-
-\item The \htmlref{NatLat}{NatLat} and \htmlref{NatLon}{NatLon} attributes of the WcsMap class have been
-changed so that they now return the fixed native coordinates of the
-projection reference point, rather than the native coordinates of the
-user-defined fiducial point.
-
-\item Notation has been changed in both the WcsMap and FitsChan classes to
-reflect the convention used in the FITS-WCS papers that index ``i'' refers
-to a world coordinate axis, and index ``j'' refers to a pixel axis.
-
-\item Changes have been made to several Mapping classes in order to allow
-the
-\htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}
-function to make simplifications in a \htmlref{CmpMap}{CmpMap} which previously were not
-possible.
-
-\item The \htmlref{SlaMap}{SlaMap} class has been extended by the addition of conversions
-between FK5 and ICRS coordinates, and between FK5 and helio-ecliptic coordinates.
-
-\item The \htmlref{SpecMap}{SpecMap} class has been changed to use the equation for the
-refractive index of air as given in the current version of FITS-WCS paper
-III. Also, the forward and inverse transformations between frequency and
-air-wavelength have been made more compatible by using an iterative
-procedure to calculate the inverse.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V3.1}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V3.0 and V3.1 (the
-current version):
-
-\begin{enumerate}
-\item Addition of a new class called \htmlref{XmlChan}{XmlChan} - a \htmlref{Channel}{Channel} which
-reads and writes AST objects in the form of XML.
-\item A bug has been fixed in the \htmlref{Plot}{Plot} class which could cause incorrect
-graphical attributes to be used for various parts of the plot if either
-axis has no tick marks (i.e. if both major and minor tick marks have zero
-length).
-\end{enumerate}
-
-Programs which are statically linked will need to be re-linked in
-order to take advantage of these new facilities.
-
-
-\subsection{Changes Introduced in V3.2}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V3.1 and V3.2:
-
-\begin{enumerate}
-
-\item A new
-routine \htmlref{AST\_PUTCARDS}{AST_PUTCARDS}
-has been added to the \htmlref{FitsChan}{FitsChan} class. This allows multiple concatenated header
-cards to be stored in a FitsChan in a single call, providing an alternative to
-the existing
-AST\_PUTCARDS routine.
-
-\item Some signficant changes have been made to the simplification of Mappings
- which should resultin a greater degree of simplication taking place.Some
- bugs have also been fixed which could result in an infinite loop being
- entered when attempting to simplify certain Mappings.
-
-\item The FitsChan class now translates the spectral algorithm codes
-``-WAV'', ``-FRQ'' and ``-VEL'' (specified in early drafts of paper III) to
-the corresponding ``-X2P'' form when reading a spectral axis description
-from a set of FITS header cards.
-
-\item A bug has been fixed in the FitsChan class which could cause
-keywords associated with alternate axis descriptions to be mis-interpreted.
-
-\item The \htmlref{Plot}{Plot} class now provides facilities for modifying the appearance
-of sub-strings within text strings such as axis labels, titles, \emph{etc},
-by producing super-scripts, sub-scripts, changing the font colour, size,
-\emph{etc}. See attribute \htmlref{Escape}{Escape}.
-
-\item The default value of the \htmlref{Tol}{Tol} attribute of the Plot class has been
-changed from 0.001 to 0.01. This should not usually cause any significant
-visible change to the plot, but should make the plotting faster. You may
-need to set a lower value for Tol if you are producing a particularly
-large plot.
-
-\item The algorithm for finding the default value for the Gap attribute
-has been changed. This attribute specifies the gap between major axis
-values in an annotated grid drawn by the Plot class. The change in
-algorithm may cause the default value to be different to previous versions
-in cirtain circumstances.
-
-\item Some bugs have been fixed in the Plot class which could cause the
-system to hang for a long time while drawing certain all-sky grids
-(notable some of the FITS Quad-cube projections).
-
-\item The \htmlref{SkyAxis}{SkyAxis} class has extended the Format attribute by the addition
-of the ``g'' option. this option is similar to the older ``l'' option in that
-it results in characters (``h'', ``m'', ``s'', \emph{etc}) being used as
-delimiters between the sexagesimal fields of the celestial position. The
-difference is that the ``g'' option includes graphics escape sequences
-in the returned formatted string which result in the field delimiter
-characters being drawn as super-scripts when plotted as numerical axis values
-by a Plot.
-
-\item The Plot class has been extended to include facilities for producing
-logarithmic axes. See attributes LogPlot, LogTicks, LogGap and LogLabel.
-
-\item New functions astGCap and astGScales have been added to the interface
-defined by file \verb+grf.h+. The \htmlref{ast\_link}{ast_link} command has been modified so
-that the \verb+-mygrf+ switch loads dummy versions of the new grf
-functions. This means that applications should continue to build without
-any change. However, the facilities for interpreting escape sequences
-within strings drawn by the Plot class will not be available unless the
-new grf functions are implemented. If you choose to implement them, you
-should modify your linking procedure to use the \verb+-grf+ switch in
-place of the older \verb+-mygrf+ switch. See the description of the ast\_link
-command for details of the new switches. Also note that the astGQch
-function, whilst included in verb+grf.h+ in pervious versions of AST, was
-not actually called. As of this version of AST, calls are made to the
-astGQch function, and so any bugs in the implementation of astGQch may
-cause spurious behaviour when plotting text strings.
-
-\item A new 'static' method called astEscapes has been added which is used
-to control and enquire whether astGetC and astFormat will strip any graphical
-escape sequences which may be present out of the returned value.
-
-\item New attribute \htmlref{XmlPrefix}{XmlPrefix} has been added to the \htmlref{XmlChan}{XmlChan} class. It
-allows XML written by the XmlChan class to include an explicit namespace
-prefix on each element.
-
-\item New attribute \htmlref{XmlFormat}{XmlFormat} has been added to the XmlChan class. It
-specifies the format in which AST objects should be written.
-
-\item A new class of \htmlref{Mapping}{Mapping}, the \htmlref{TranMap}{TranMap}, has been introduced. A TranMap
-takes its forward transformation from an existing Mapping, and its inverse
-transformation from another existing Mapping.
-
-\item A bug has been fixed in \htmlref{WcsMap}{WcsMap} which caused error reports to
-include erroneous axis numbers when referring to missing parameter values.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V3.3}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V3.2 and V3.3:
-
-\begin{enumerate}
-
-\item Options have been added to the \htmlref{SkyFrame}{SkyFrame} class which allows the
-origin
-of celestial coordinates to be moved to any specified point. See the new
-attributes SkyRef, \htmlref{SkyRefIs}{SkyRefIs}, SkyRefP and \htmlref{AlignOffset}{AlignOffset}.
-
-\item An option has been added to the \htmlref{FitsChan}{FitsChan} class which allows extra
-Frames representing cartesian projection plane coordinates (``intermediate
-world coordinates'' in the parlance of FITS-WCS) to be created when
-reading
-WCS information from a foreign FITS header. This option is controlled by
-a new attribute called \htmlref{Iwc}{Iwc}.
-
-\item The FitsChan class which been modified to interpret FITS-WCS CAR
-projection headers correctly if the longitude reference pixel (CRPIX) is
-very large.
-
-\item The FITS-AIPS++ encoding in the FitsChan class now recognised
-spectral axes if they conform to the AIPS convention in which the
-spectral axis is descirbed by a CTYPE keyword od the form "AAAA-BBB"
-where ``AAAA'' is one of FREQ, VELO or FELO, and ``BBB'' is one of LSR, LSD,
-HEL or OBS. Such spectral axes can be both read and written.
-
-\item The FitsChan class now has a FITS-AIPS++ encoding which represents
-WCS information using FITS header cards recognised by the AIPS++ project.
-Support for spectral axes is identical to the FITS-AIPS encoding.
-
-\item The organisation of the AST distribution and the commands for
-building it have been changed. Whereas AST used to be built and installed
-with \verb+./mk build; ./mk install+, it now builds using the more standard
-idiom \verb+./configure; make; make install+. The installation location is
-controlled by the \verb+--prefix+ argument to ./configure (as is usual
-for other packages which use this scheme). Note that the INSTALL environment
-variable now has a \emph{different} meaning to that which it had
-before, and it should generally be \emph{unset}. Also, there is no need to
-set the SYSTEM variable.
-
-\item Shared libraries are now installed in the same directory as the
-static libraries. In addition, links to sharable libraries are installed
-with names which include version information, and ``libtool libraries''
-are also installed (see \htmladdnormallink{http://www.gnu.org/software/libtool/manual.html}{
-http://www.gnu.org/software/libtool/manual.html}).
-
-\item The \verb+ast_dev+ script has been removed. Instead, the location of
-the AST include files should be specified using the -I option when
-compiling.
-
-\item The names of the installed AST include files have been changed to
-upper case.
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V3.4}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V3.3 and V3.4:
-
-\begin{enumerate}
-
-\item The \htmlref{Mapping}{Mapping} class has a new method
-(\htmlref{AST\_LINEARAPPROX}{AST_LINEARAPPROX})
-which calculates the co-efficients of a linear approximation to a Mapping.
-
-\item The Format attribute for simple Frames and SkyFrames has been extended.
-It has always been possible, in both classes, to specify a precision by
-including a dot in the Format value followed by an integer (\emph{e.g.}
-``\verb+dms.1+'' for a \htmlref{SkyFrame}{SkyFrame}, or ``\verb+%.10g+'' for a simple \htmlref{Frame}{Frame}).
-The precision can now also be specified using an asterisk in place of the
-integer (\emph{e.g.} ``\verb+dms.*+'' or ``\verb+%.*g+''). This causes the
-precision to be derived on the basis of the Digits attribute value.
-
-\item The \htmlref{Plot}{Plot} class has been changed so that the default value used for the
-Digits attribute is chosen to be the smallest value which results in no
-pair of adjacent labels being identical. For instance, if an annotated
-grid is being drawn describing a SkyFrame, and the Format(1) value is set
-to ``\verb+hms.*g+'' (the ``g'' causes field delimiters to be drawn as
-superscripts), and the Digits(1) value is unset, then the seconds field
-will have a number of decimal places which results in no pair of labels
-being identical.
-
-\item Addition of a new class classed \htmlref{DSBSpecFrame}{DSBSpecFrame}. This is a
-sub-class of \htmlref{SpecFrame}{SpecFrame} which can be used to describe spectral axes
-associated with dual sideband spectral data.
-
-\item The \htmlref{FitsChan}{FitsChan} class will now read headers which use the old ``-GLS''
-projection code, converting them to the corresponding modern ``-SFL'' code,
-provided that the celestial axes are not rotated.
-
-\item The FitsChan class has a new \htmlref{Encoding}{Encoding}, ``FITS-CLASS'', which allows
-the reading and writing of FITS headers using the conventions of the CLASS
-package - see
-\htmladdnormallink{
-http://www.iram.fr/IRAMFR/GILDAS/doc/html/class-html/class.html}{
-http://www.iram.fr/IRAMFR/GILDAS/doc/html/class-html/class.html}).
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V3.5}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V3.4 and V3.5:
-
-\begin{enumerate}
-
-\item AST now provides facilities for representing regions of various
-shapes within a coordinate system. The \htmlref{Region}{Region} class provides general
-facilities which are independent of the specific shape of region being
-used. Various sub-classes of Region are also now available which provide
-means of creating Regions of specific shape. Facilities provided by the
-Region class include testing points to see if they are inside the
-Region, testing two Regions for overlap, transforming Regions from one
-coordinate system to another \emph{etc}.
-
-\item A new class of 1-dimensional \htmlref{Frame}{Frame} called \htmlref{FluxFrame}{FluxFrame} has been added which
-can be used to describe various systems for describing ovserved value at a
-single fixed spectral position.
-
-\item A new class of 2-dimensional Frame called \htmlref{SpecFluxFrame}{SpecFluxFrame} has been added which
-can be used to describe a 2-d frame spanned by a spectral position axis
-and and an observed value axis.
-
-\item A new class of \htmlref{Mapping}{Mapping} called \htmlref{RateMap}{RateMap} has been added. A RateMap encapsulates
-a previously created Mapping. The inputs of the RateMap correspond to the
-inputs of the encapsulated Mapping. All RateMaps have just a single
-output which correspond to the rate of change of a specified output of
-the encapsulated Mapping with respect to a specified input.
-
-\item The \htmlref{SkyFrame}{SkyFrame} class now supports a value of ``J2000'' for \htmlref{System}{System}.
-This system is an equatorial system based on the mean dynamical equator and
-equinox at J2000, and differs slightly from an FK5(J2000) system.
-
-\item A new class called \htmlref{KeyMap}{KeyMap} has been added. A KeyMap can be used to
-store a collection of vector or scalar values or Objects, indexed by a
-character string rather than an integer.
-
-\item The parameter list for the
-\htmlref{AST\_RATE}{AST_RATE}
-method of the Mapping class has been modified. It no longer returns a second
-derivative estimate. Existing code which uses this method will need to be
-changed.
-
-\item Methods
-(AST\_SETFITS<X>)
-have been added to the \htmlref{FitsChan}{FitsChan} class to allow values for named
-keywords to be changed or added.
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V3.6}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V3.5 and V3.6:
-
-\begin{enumerate}
-
-\item If the Format attribute associated with an axis of a \htmlref{SkyFrame}{SkyFrame}
-starts with a percent character (``\verb+%+''), then axis values are
-now formatted and unformatted as a decimal radians value, using the
-Format syntax of a simple \htmlref{Frame}{Frame}.
-
-\item The \htmlref{Plot}{Plot} class has a new attribute called \htmlref{Clip}{Clip} which controls the
-clipping performed by AST at the plot boundary.
-
-\item The keys used to label components of the \htmlref{PolyMap}{PolyMap} structure when a
-PolyMap is written out through a \htmlref{Channel}{Channel} have been changed. The new keys
-are shorter than the old keys and so can written succesfully to a \htmlref{FitsChan}{FitsChan}.
-The new PolyMap class always writes new styles keys but can read either
-old or new style keys. Consequently, PolyMap dumps written by this
-version of AST cannot be read by older versions of AST.
-
-\item A mimimal cut down subset of the C version of SLALIB is now
-included with the AST distribution and built as part of building AST.
-This means that it is no longer necessary to have SLALIB installed
-separately at your site. The SLALIB code included with AST is distrubuted
-under the GPL. The default behaviour of the \htmlref{ast\_link}{ast_link} script is now to
-link with this internal slalib subset. However, the ``-csla'' option can
-still be used to force linking with an external full C SLALIB library.
-A new option ``-fsla'' has been introduced which forces linking with the
-external full Fortran SLALIB library.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V3.7}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V3.6 and V3.7:
-
-\begin{enumerate}
-
-\item Support for time coordinate systems has been introduced
-throught the addition of two new classes, \htmlref{TimeFrame}{TimeFrame} and \htmlref{TimeMap}{TimeMap}.
-The TimeFrame is a 1-dimensional \htmlref{Frame}{Frame} which can be used to describe
-moments in time (either absolute or relative) in various systems (MJD,
-Julian \htmlref{Epoch}{Epoch}, \emph{etc.}) and referred to various time scales (TAI, UTC,
-UT1, GMST, \emph{etc}). The TimeMap is a \htmlref{Mapping}{Mapping} which can transform time
-values between these various systems and time scales. Note,
-FitsChans which have a foreign encoding (\emph{i.e.} any encoding other
-than NATIVE) are not able to read or write these new classes.
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V4.0}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V3.7 and V4.0:
-
-\begin{enumerate}
-
-\item Experimental support for reading IVOA Space-Time-Coordinates (STC-X)
-descriptions using the \htmlref{XmlChan}{XmlChan} class has been added. Support is included
-for a subset of V1.20 of the draft STC specification.
-
-\item A new set of methods (AST\_REBIN<X>/astRebin<X>) has been added to
-the \htmlref{Mapping}{Mapping} class. These are flux-conserving alternatives to the existing
-AST\_RESAMPLE<X>/astResample<X> methods.
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V4.1}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V4.0 and V4.1:
-
-\begin{enumerate}
-
-\item A new control flag has been added to the AST\_RESAMPLE<X>/astResample<X>
-functions which produces approximate flux conservation.
-
-\item New constants AST\_\_SOMB and AST\_\_SOMBCOS have been added to
-AST\_PAR. These specify kernels for AST\_RESAMPLE and AST\_REBIN
-based on the ``Sombrero'' function ( $2*J1(x)/x$ where $J1(x)$ is the
-first order Bessel function of the first kind).
-
-\item The \htmlref{SkyFrame}{SkyFrame} class now supports a \htmlref{System}{System} value of AZEL corresponding
-to horizon (azimuth/elevation) coordinates.
-
-\item The \htmlref{FitsChan}{FitsChan} class allows the non-standard strings ``AZ--'' and
-``EL--'' to be used as axis types in FITS-WCS CTYPE keyword values.
-
-\item The \htmlref{Frame}{Frame} class now has attributes \htmlref{ObsLon}{ObsLon} and \htmlref{ObsLat}{ObsLat} to specify
-the geodetic longitude and latitude of the observer.
-
-\item The ClockLon and ClockLat attributes have been removed from the
-\htmlref{TimeFrame}{TimeFrame} class. Likewise, the GeoLon and GeoLat attributes have been
-removed from the \htmlref{SpecFrame}{SpecFrame} class. Both classes now use the ObsLon and
-ObsLat attributes of the parent Frame class instead. However, the old
-attribute names can be used as synonyms for ObsLat and ObsLon. Also,
-dumps created using the old scheme can be read succesfully by AST V4.1
-and converted to the new form.
-
-\item A new
-routine \htmlref{AST\_MAPSPLIT}{AST_MAPSPLIT}
-has been added to the \htmlref{Mapping}{Mapping} class. This splits a Mapping into two component
-Mappings which, when combined in parallel, are equivalent to the original
-Mapping.
-
-\item The default value for the \htmlref{SkyRefIs}{SkyRefIs} attribute has been changed from
-``Origin'' to ``Ignored''. This means that if you want to use a SkyFrame
-to represent offsets from some origin position, you must now set the
-SkyRefIs attribute explicitly to either ``Pole'' or ``Origin'', in
-addition to assigning the required origin position to the SkyRef attribute.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V4.2}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V4.1 and V4.2:
-
-\begin{enumerate}
-
-\item The \htmlref{SideBand}{SideBand} attribute of the \htmlref{DSBSpecFrame}{DSBSpecFrame} class can now take the
-option ``LO'' in addition to ``USB'' and ``LSB''. The new option causes the
-DSBSpecFrame to represent the offset from the local oscillator frequency,
-rather than either of the two sidebands.
-
-\item The \htmlref{FitsChan}{FitsChan} class has been changed so that it writes out a VELOSYS
-keyword when creating a FITS-WCS encoding (VELOSYS indicates the topocentric
-apparent velocity of the standard of rest). FitsChan also strips out VELOSYS
-keywords when reading a \htmlref{FrameSet}{FrameSet} from a FITS-WCS encoding.
-
-\item The FitsChan class has a new method called
-\htmlref{AST\_RETAINFITS}{AST_RETAINFITS}
-that indicates that the current card in the FitsChan should not be
-stripped out of the FitsChan when an AST \htmlref{Object}{Object} is read from the FitsChan.
-Unless this method is used, all cards that were involved in the creation
-of the AST Object will be stripped from the FitsChan afte a read operation.
-
-\item A problem with unaligned memory access that could cause bus errors on
-Solaris has been fixed.
-
-\item A new read-only attribute called \htmlref{ObjSize}{ObjSize} has been added to the base
-Object \htmlref{Class}{Class}. This gives the number of bytes of memory occupied by the
-Object. Note, this is the size of the internal in-memory representation of
-the Object, not the size of the textual representation produced by
-writing the Object out through a \htmlref{Channel}{Channel}.
-
-\item A new function
-\htmlref{AST\_TUNE}{AST_TUNE}
-has been added which can be used to get and set global AST tuning
-parameters. At the moment there are only two such parameter, both of
-which are concerned with memory management within AST.
-
-\item A new method called
-\htmlref{AST\_TRANGRID}{AST_TRANGRID}
-has been added to the \htmlref{Mapping}{Mapping} class. This method creates a regular
-grid of points covering a rectangular region within the input space of a
-Mapping, and then transforms this set of points into the output space of the
-Mapping, using a piecewise-continuous linear approximation to the Mapping
-if appropriate in order to achive higher speed.
-
-\item A new subclass of Mapping has been added called \htmlref{SwitchMap}{SwitchMap}. A
-SwitchMap represents several alternate Mappings, each of which is used to
-transforms input positions within a different region of the input
-coordinate space.
-
-\item A new subclass of Mapping has been added called \htmlref{SelectorMap}{SelectorMap}. A
-SelectorMap tests each input position to see if it falls within one of
-several Regions. If it does, the index of the \htmlref{Region}{Region} containing the
-input position is returned as the Mapping output.
-
-\item The behaviour of the
-\htmlref{AST\_CONVERT}{AST_CONVERT}
-method when trying to align a \htmlref{CmpFrame}{CmpFrame} with another \htmlref{Frame}{Frame} has been
-modified. If no conversion between positions in the Frame and CmpFrame
-can be found, an attempt is now made to find a conversion between the
-Frame and one of two component Frames contained within the CmpFrame. Thus
-is should now be possible to align a \htmlref{SkyFrame}{SkyFrame} with a CmpFrame containing a
-SkyFrame and a \htmlref{SpecFrame}{SpecFrame} (for instance). The returned Mapping produces bad
-values for the extra axes (i.e. for the SpecFrame axis in the above example).
-
-\item The ``\htmlref{\htmlref{ast\_link}{ast_link}\_adam}{ast_link_adam}'' and ``ast\_link'' scripts now ignore the
-\verb+-fsla+ and \verb+-csla+ options, and always link against the
-minimal cut-down version of SLALIB distributed as part of AST.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V4.3}
-
-The following describes the most significant changes which occurred in the
-AST library between versions V4.2 and V4.3:
-
-\begin{enumerate}
-
-\item The
-AST\_GETFITSS
-function now strips trailing white space from the returned string, if the
-original string contains 8 or fewer characters
-
-\item The \htmlref{SpecFrame}{SpecFrame} class has a new attribute called \htmlref{SourceSys}{SourceSys} that specified
-whether the \htmlref{SourceVel}{SourceVel} attribute (which specifies the rest frame of the
-source) should be accessed as an apparent radial velocity or a redshift.
-Note, any existing software that assumes that SourceVel always represents
-a velocity in km/s should be changed to allow for the possibility of
-SourceVel representing a redshift value.
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V4.4}
-
-The following describes the most significant changes which occurred in
-the AST library between versions V4.3 and V4.4:
-
-\begin{enumerate}
-
-\item The
-\htmlref{AST\_FINDFRAME}{AST_FINDFRAME}
-function can now be used to search a \htmlref{CmpFrame}{CmpFrame} for an instance of a more
-specialised class of \htmlref{Frame}{Frame} (\htmlref{SkyFrame}{SkyFrame}, \htmlref{TimeFrame}{TimeFrame}, \htmlref{SpecFrame}{SpecFrame}, \htmlref{DSBSpecFrame}{DSBSpecFrame}
-or \htmlref{FluxFrame}{FluxFrame}). That is, if an instance of one of these classes is used as
-the ``template'' when calling
-AST\_FINDFRAME,
-and the ``target'' being searched is a CmpFrame (or a \htmlref{FrameSet}{FrameSet} in which the
-current Frame is a CmpFrame), then the component Frames within the CmpFrame
-will be searched for an instance of the supplied template Frame, and, if
-found, a suitable \htmlref{Mapping}{Mapping} (which will include a \htmlref{PermMap}{PermMap} to select the
-required axes from the CmpFrame) will be returned by
-AST\_FINDFRAME.
-Note, for this to work, the \htmlref{MaxAxes}{MaxAxes} and \htmlref{MinAxes}{MinAxes} attributes of the template
-Frame must be set so that they cover a range that includes the number of axes
-in the target CmpFrame.
-
-\item The SkyFrame, SpecFrame, DSBSpecFrame, TimeFrame and FluxFrame classes
-now allow the MaxAxes and MinAxes attributes to be set freely to any value.
-In previous versions of AST, any attempt to change the value of MinAxes
-or MaxAxes was ignored, resulting in them always taking the default values.
-
-\item The DSBSpecFrame class has a new attribute called AlignSB that
-specifies whether or not to take account of the \htmlref{SideBand}{SideBand} attributes when
-aligning two DSBSpecFrames using
-\htmlref{AST\_CONVERT}{AST_CONVERT}.
-
-\item The Frame class has a new attribute called \htmlref{Dut1}{Dut1} that can be used to
-store a value for the difference between the UT1 and UTC timescales at
-the epoch referred to by the Frame.
-
-\item The number of digits used to format the Frame attributes \htmlref{ObsLat}{ObsLat} and
-\htmlref{ObsLon}{ObsLon} has been increased.
-
-\item The use of the SkyFrame attribute \htmlref{AlignOffset}{AlignOffset} has been changed. This
-attribute is used to control how two SkyFrames are aligned by
-AST\_CONVERT.
-If the template and target SkyFrames both have a non-zero value for
-AlignOffset, then alignment occurs between the offset coordinate systems
-(that is, a \htmlref{UnitMap}{UnitMap} will always be used to align the two SkyFrames).
-
-\item The \htmlref{Plot}{Plot} class has a new attribute called ForceExterior that can be
-used to force exterior (rather than interior) tick marks to be produced.
-By default, exterior ticks are only produced if this would result in
-more than 3 tick marks being drawn.
-
-\item The TimeFrame class now supports conversion between angle based
-timescales such as UT1 and atomic based timescales such as UTC.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V4.5}
-
-The following describes the most significant changes that
-occurred in the AST library between versions V4.4 and V4.5:
-
-\begin{enumerate}
-
-
-
-\item All FITS-CLASS headers are now created with a frequency axis. If the
-\htmlref{FrameSet}{FrameSet} supplied to
-\htmlref{AST\_WRITE}{AST_WRITE}
-contains a velocity axis (or any other form
-of spectral axis) it will be converted to an equivalent frequency axis
-before being used to create the FITS-CLASS header.
-
-\item The value stored in the FITS-CLASS keyword ``VELO-LSR'' has been changed
-from the velocity of the source to the velocity of the reference channel.
-
-\item Addition of a new method call
-\htmlref{AST\_PURGEWCS}{AST_PURGEWCS}
-to the \htmlref{FitsChan}{FitsChan}
-class. This method removes all WCS-related header cards from a FitsChan.
-
-\item The \htmlref{Plot}{Plot} class has a new attribute called GrfContext that can be used
-to comminicate context information between an application and any
-graphics functions registered with the Plot class via the
-\htmlref{AST\_GRFSET}{AST_GRFSET} routine.
-\item Functions registered with the Plot class using
-AST\_GRFSET
-now take a new additional integer parameter, ``grfcon''. The Plot class
-sets this parameter to the value of the Plot's GrfContext attribute before
-calling the graphics function. NOTE, THIS CHANGE WILL REQUIRE EXISTING
-CODE THAT USES
-AST\_GRFSET
-TO BE MODIFIED TO INCLUDE THE NEW PARAMETER.
-\item The
-AST\_REBINSEQ routines
-now have an extra parameter that is used to record the total number of input
-data values added into the output array. This is necessary to correct a
-flaw in the calculation of output variances based on the spread of input
-values. NOTE, THIS CHANGE WILL REQUIRE EXISTING CODE TO BE MODIFIED TO
-INCLUDE THE NEW PARAMETER (CALLED "NUSED").
-\item Support has been added for the FITS-WCS ``HPX'' (HEALPix) projection.
-\item A new flag ``AST\_\_VARWGT'' can be supplied to
-AST\_REBINSEQ.
-This causes the input data values to be weighted using the reciprocals of
-the input variances (if supplied).
-
-\item The \htmlref{Frame}{Frame} class has a new read-only attribute called NormUnit that
-returns the normalised value of the Unit attribute for an axis. Here,
-``normalisation'' means cancelling redundant units, etc. So for instance, a
-Unit value of ``s*(m/s)'' would result in a NormUnit value of ``m''.
-
-\item A new
-routine \htmlref{AST\_SHOWMESH}{AST_SHOWMESH}
-has been added to the \htmlref{Region}{Region} class. It displays a mesh of points covering
-the surface of a Region by writing out a table of axis values to standard
-output.
-
-\item The Plot class now honours the value of the LabelUp attribute even if
-numerical labels are placed around the edge of the Plot. Previously
-LabelUp was only used if the labels were drawn within the interior of
-the plot. The LabelUp attribute controls whether numerical labels are
-drawn horizontally or parallel to the axis they describe.
-
-\item A bug has been fixed that could segmentation violations when setting
-attribute values.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V4.6}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V4.5 and V4.6:
-
-\begin{enumerate}
-
-\item The \htmlref{TimeFrame}{TimeFrame} class now support Local Time as a time scale. The offset
-from UTC to Local Time is specified by a new TimeFrame attribute called
-\htmlref{LTOffset}{LTOffset}.
-
-\item A new class called \htmlref{Plot3D}{Plot3D} has been added. The Plot3D class allows
-the creation of 3-dimensional annotated coordinate grids.
-
-\item A correction for diurnal aberration is now included when
-converting between AZEL and other celestial coordinate systems. The
-correction is based on the value of the \htmlref{ObsLat}{ObsLat} \htmlref{Frame}{Frame} attribute (the
-geodetic latitude of the observer).
-
-\item A bug has been fixed which caused the DUT1 attribute to be ignored
-by the \htmlref{SkyFrame}{SkyFrame} class when finding conversions between AZEL and other
-celestial coordinate systems.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V5.0}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V4.6 and V5.0:
-
-\begin{enumerate}
-
-
-\item The AST library is now thread-safe (assuming that the POSIX pthreads
-library is available when AST is built). Many of the macros defined in
-the ast.h header file have changed. It is therefore necessary to
-re-compile all source code that includes ast.h.
-
-\item New methods astLock and astUnlock allow an AST \htmlref{Object}{Object} to be locked
-for exclusive use by a thread.
-
-\item The \htmlref{TimeFrame}{TimeFrame} class now support Local Time as a time scale. The offset
-from UTC to Local Time is specified by a new TimeFrame attribute called
-\htmlref{LTOffset}{LTOffset}.
-
-\item The \htmlref{Channel}{Channel} class has a new attribute called \htmlref{Strict}{Strict} which controls
-whether or not to report an error if unexpected data items are found
-within an AST Object description read from an external data source. Note,
-the default behaviour is now not to report such errors. This differs from
-previous versions of AST which always reported an error is unexpected
-input items were encountered.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V5.1}
-
-The following describes the most significant changes which occurred in the
-AST library between versions V5.0 and V5.1:
-
-\begin{enumerate}
-
-
-\item The \htmlref{Prism}{Prism} class has been modified so that any class of \htmlref{Region}{Region} can
-be used to define the extrusion axes. Previously, only a \htmlref{Box}{Box} or \htmlref{Interval}{Interval}
-could be used for this purpose.
-
-
-\item Improvements have been made to the way that Prisms are simplified
-when
-\htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}
-is called. The changes mean that more types of Prism will now simplify
-into a simpler class of Region.
-
-\item The \htmlref{PointList}{PointList} class has a new method,
-AST\_POINTS,
-that copies the axis values from the PointList into a supplied array.
-
-\item The PointList class has a new (read-only) attribute, \htmlref{ListSize}{ListSize}, that
-gives the number of points stored in the PointList.
-
-\item The handling of warnings within different classes of \htmlref{Channel}{Channel} has
-been rationalised. The XmlStrict attribute and
-AST\_XMLWARNINGS
-function have been removed. The same functionality is now available via
-the existing \htmlref{Strict}{Strict} attribute (which has had its remit widened), a new
-attribute called \htmlref{ReportLevel}{ReportLevel}, and the new
-\htmlref{AST\_WARNINGS}{AST_WARNINGS}
-function. This new function can be used on any class of Channel. Teh
-\htmlref{FitsChan}{FitsChan} class retains its long standing ability to store warnings as
-header cards within the FitsChan, but it also now stores warnings in the
-parent Channel structure, from where they can be retrieved using the
-AST\_WARNINGS
-function.
-
-\item A new function called
-AST\_INTERCEPT
-has been added to the \htmlref{Frame}{Frame} class. This function finds the point of
-intersection beteeen two geodesic curves.
-
-\item A bug in the type-checking of Objects passed as arguments to constructor
-functions has been fixed. This bug could lead to applications crashing or
-showing strange behaviour if an inappropriate class of \htmlref{Object}{Object} was
-supplied as an argument to a constructor.
-
-\item The
-\htmlref{AST\_PICKAXES}{AST_PICKAXES}
-function will now return a Region, if possible, when applied to a Region. If
-this is not possible, a Frame will be returned as before.
-
-\item The default gap size between the ISO date/time labels used by the \htmlref{Plot}{Plot}
-class when displaying an annotated axis described by a \htmlref{TimeFrame}{TimeFrame} has been
-changed. The changes are meant to improve the labelling of calendar time
-axes that span intervals from a day to a few years.
-
-\item A new function called
-\htmlref{AST\_TESTFITS}{AST_TESTFITS}
-has been added to the FitsChan class. This function tests a FitsChan to
-see if it contains a defined value for specified FITS keyword.
-
-\item The AST\_\_UNDEF<X> parameters used to flag undefined FITS keyword values
-have been removed. Use the new
-AST\_TESTFITS
-function instead.
-
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V5.2}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V5.1 and V5.2:
-
-\begin{enumerate}
-
-\item A new method called
-\htmlref{AST\_SETFITSCM}{AST_SETFITSCM}
-has been added to the \htmlref{FitsChan}{FitsChan} class. It stores a pure comment card in a
-FitsChan (that is, a card with no keyword name or equals sign).
-
-\item A new attribute called \htmlref{ObsAlt}{ObsAlt} has been added to the \htmlref{Frame}{Frame} class. It
-records the geodetic altitude of the observer, in metres. It defaults to
-zero. It is used when converting times to or from the TDB timescale, or
-converting spectral positions to or from the topocentric rest frame, or
-converting sky positions to or from horizon coordinates. The FitsChan
-class will include its effect when creating a set of values for the
-OBSGEO-X/Y/Z keywords, and will also assign a value to it when reading a
-set of OBSGEO-X/Y/Z keyword values from a FITS header.
-
-\item The \htmlref{TimeMap}{TimeMap} conversions ``TTTOTDB'' and ``TDBTOTT'', and the \htmlref{SpecMap}{SpecMap}
-conversions ``TPF2HL'' and ``HLF2TP'', now have an additional argument -
-the observer's geodetic altitude.
-
-\item The \htmlref{Polygon}{Polygon} class has been modified to make it consistent with the
-IVOA STC definition of a Polygon. Specifically, the inside of a polygon
-is now the area to the left of each edge as the vertices are traversed in
-an anti-clockwise manner, as seen from the inside of the celestial sphere.
-Previously, AST used the anti-clockwise convention, but viewed from the
-outside of the celestial sphere instead of the inside. Any Polygon saved
-using previous versions of AST will be identified and negated automatically
-when read by AST V5.2.
-
-\item A new class of \htmlref{Channel}{Channel}, called \htmlref{StcsChan}{StcsChan}, has been added that allows
-conversion of suitable AST Objects to and from IVOA STC-S format.
-
-\item A new method called
-\htmlref{AST\_REMOVEREGIONS}{AST_REMOVEREGIONS}
-has been added to the \htmlref{Mapping}{Mapping} class. It searches a (possibly compound)
-Mapping (or Frame) for any instances of the AST \htmlref{Region}{Region} class, and either
-removes them, or replaces them with UnitMaps (or equivalent Frames). It
-can be used to remove the masking effects of Regions from a compound
-Mapping or Frame.
-
-\item A new method called
-\htmlref{AST\_DOWNSIZE}{AST_DOWNSIZE}
-has been added to the Polygon class. It produces a new Polygon that
-contains a subset of the vertices in the supplied Polygon. The subset is
-chosen to retain the main features of the supplied Polygion, in so far
-as that is possible, within specified constraints.
-
-\item A new constructor called
-AST\_OUTLINE
-has been added to the Polygon class. Given a 2D data array, it identifies
-the boundary of a region within the array that holds pixels with
-specified values. It then creates a new Polygon to describe this boundary
-to a specified accuracy.
-
-\item A new set of methods, called
-AST\_MAPGETELEM<X>
-has been added to the \htmlref{KeyMap}{KeyMap} class. They allow a single element of a vector
-valued entry to be returned.
-
-\item A new attribute called \htmlref{KeyError}{KeyError} has been added to the KeyMap \htmlref{Class}{Class}. It
-controls whether the
-AST\_MAPGET...
-family of functions report an error if an entry with the requested key does
-not exist in the KeyMap.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V5.3}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V5.2 and V5.3:
-
-\begin{enumerate}
-
-\item The details of how a \htmlref{Frame}{Frame} is aligned with another Frame by the
-\htmlref{AST\_FINDFRAME}{AST_FINDFRAME} and \htmlref{AST\_CONVERT}{AST_CONVERT}
-functions have been changed. The changes mean that a Frame can now be
-aligned with an instance of a sub-class of Frame, so long as the number
-of axes and the \htmlref{Domain}{Domain} values are consistent. For instance, a basic
-2-dimensional Frame with Domain ``SKY'' will now align succesfully with
-a \htmlref{SkyFrame}{SkyFrame}, conversion between the two Frames being achieved using a
-\htmlref{UnitMap}{UnitMap}.
-
-
-\item Added method
-\htmlref{AST\_MATCHAXES}{AST_MATCHAXES}
-to the Frame class. This method allows corresponding axes within two
-Frames to be identified.
-
-\item The
-\htmlref{AST\_ADDFRAME}{AST_ADDFRAME}
-method can now be used to append one or more axes to all Frames in a \htmlref{FrameSet}{FrameSet}.
-\end{enumerate}
-
-\subsection{\xlabel{changes}\xlabel{list_of_most_recent_changes}Changes
-Introduced in V5.3-1}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V5.3 and V5.3-1 (the
-current version):
-
-\begin{enumerate}
-
-\item The \htmlref{StcsChan}{StcsChan} class now ignores case when reading STC-S phrases (except
-that units strings are still case sensitive).
-
-\end{enumerate}
-
-Programs which are statically linked will need to be re-linked in
-order to take advantage of these new facilities.
-
-\end{document}
diff --git a/ast-5.3-1/sun210_figures/cmpframe.eps b/ast-5.3-1/sun210_figures/cmpframe.eps
deleted file mode 100644
index c5b6aaa..0000000
--- a/ast-5.3-1/sun210_figures/cmpframe.eps
+++ /dev/null
@@ -1,931 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 215 202 384 394
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 17:24:02
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-3657.35 3700.55 m
-3657.35 3800.15 3576.95 3880.55 3477.35 3880.55 c
-2396.15 3880.55 l
-2296.55 3880.55 2216.15 3800.15 2216.15 3700.55 c
-2216.15 2210.15 l
-2216.15 2110.55 2296.55 2030.15 2396.15 2030.15 c
-3477.35 2030.15 l
-3576.95 2030.15 3657.35 2110.55 3657.35 2210.15 c
-f*
-1 g
-3592.55 3755.75 m
-3592.55 3854.15 3513.35 3934.55 3413.75 3934.55 c
-2340.95 3934.55 l
-2241.35 3934.55 2162.15 3854.15 2162.15 3755.75 c
-2162.15 2273.75 l
-2162.15 2174.15 2241.35 2094.95 2340.95 2094.95 c
-3413.75 2094.95 l
-3513.35 2094.95 3592.55 2174.15 3592.55 2273.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-3592.55 3755.75 m
-3592.55 3854.15 3513.35 3934.55 3413.75 3934.55 c
-2340.95 3934.55 l
-2241.35 3934.55 2162.15 3854.15 2162.15 3755.75 c
-2162.15 2273.75 l
-2162.15 2174.15 2241.35 2094.95 2340.95 2094.95 c
-3413.75 2094.95 l
-3513.35 2094.95 3592.55 2174.15 3592.55 2273.75 c
-h
-S
-0.564706 g
-3297.35 3532.55 m
-3297.35 3591.35 3250.55 3638.15 3191.75 3638.15 c
-2381.75 3638.15 l
-2322.95 3638.15 2276.15 3591.35 2276.15 3532.55 c
-2276.15 2902.55 l
-2276.15 2843.75 2322.95 2796.95 2381.75 2796.95 c
-3191.75 2796.95 l
-3250.55 2796.95 3297.35 2843.75 3297.35 2902.55 c
-f*
-1 g
-3232.55 3588.95 m
-3232.55 3646.55 3186.95 3692.15 3129.35 3692.15 c
-2325.35 3692.15 l
-2267.75 3692.15 2222.15 3646.55 2222.15 3588.95 c
-2222.15 2964.95 l
-2222.15 2907.35 2267.75 2861.75 2325.35 2861.75 c
-3129.35 2861.75 l
-3186.95 2861.75 3232.55 2907.35 3232.55 2964.95 c
-f*
-0 g
-3232.55 3588.95 m
-3232.55 3646.55 3186.95 3692.15 3129.35 3692.15 c
-2325.35 3692.15 l
-2267.75 3692.15 2222.15 3646.55 2222.15 3588.95 c
-2222.15 2964.95 l
-2222.15 2907.35 2267.75 2861.75 2325.35 2861.75 c
-3129.35 2861.75 l
-3186.95 2861.75 3232.55 2907.35 3232.55 2964.95 c
-h
-S
-3050.15 2847.35 15.5999 849.6 re
-Y
-3057.35 3699.35 m
-3057.35 2854.55 l
-S
-3057.35 3088.55 188.4 248.4 re
-Y
-3057.35 3336.95 m
-3237.35 3096.95 l
-S
-0 0 6120 7920 re
-Y
-3095.75 3338.15 m
-3095.75 3360.95 3077.75 3378.95 3056.15 3378.95 c
-3034.55 3378.95 3016.55 3360.95 3016.55 3338.15 c
-3016.55 3316.55 3034.55 3298.55 3056.15 3298.55 c
-3077.75 3298.55 3095.75 3316.55 3095.75 3338.15 c
-f*
-3275.75 3098.15 m
-3275.75 3120.95 3257.75 3138.95 3236.15 3138.95 c
-3214.55 3138.95 3196.55 3120.95 3196.55 3098.15 c
-3196.55 3076.55 3214.55 3058.55 3236.15 3058.55 c
-3257.75 3058.55 3275.75 3076.55 3275.75 3098.15 c
-f*
-3057.35 3088.55 188.4 248.4 re
-Y
-3057.35 3096.95 m
-3237.35 3336.95 l
-S
-0 0 6120 7920 re
-Y
-3095.75 3098.15 m
-3095.75 3120.95 3077.75 3138.95 3056.15 3138.95 c
-3034.55 3138.95 3016.55 3120.95 3016.55 3098.15 c
-3016.55 3076.55 3034.55 3058.55 3056.15 3058.55 c
-3077.75 3058.55 3095.75 3076.55 3095.75 3098.15 c
-f*
-3275.75 3338.15 m
-3275.75 3360.95 3257.75 3378.95 3236.15 3378.95 c
-3214.55 3378.95 3196.55 3360.95 3196.55 3338.15 c
-3196.55 3316.55 3214.55 3298.55 3236.15 3298.55 c
-3257.75 3298.55 3275.75 3316.55 3275.75 3338.15 c
-f*
-q[1 0 0 1 0 0]concat
-72 100 true[1 0 0 1 -2333 -3514]@85 imagemask
-#CldSIt.M!!!e#S
-5QC``!!!8>!WW3"huE`^^`WUVs82is#N5X^s8W*!!!iQ(s1n[7^]4W>s82j%s6p!ns8V!W!WVop#QOgS
-!!%NH!!iQ'!!!!`rW!3'qu?]s+9)<Gs7cQo!"]*[#QO8n!!!9(^^'nt!!!!(s54.^^]4?7"97iqs*t(L
-!!E8j#QFc(!!!'"p]pg!!!!!"s7ciuz!WW'&qu?]s!!3,t#Q+Q%!!!'"rWi2u!!!!"s8E8uz!WW-(n,NFg
-!!3-!#Oh]n!!!'"rs/#n!!!!$s8N>^z"98B+huE`W!!E9$#N,R^!!!9(rs-=>!!!!0s8N>>z
-+92?G^]4?7!'gM`#J^<>!!%NKrs+&S!!!'"s8N=S!!!!$s8W*!z&-)\/z!'gM`rVuou!!*'!
-s8Duu!!!-$s8W&u!!!!0s8W,sz5QCc`qu?]s!<<*!s7cQo!!iQ(s8Vio!!!Q0s8W,g!!!!`s8W-!n,NFgs8W-!
-s53kW"98E$s8V!W!!iQ(s8W,7!!", at s8W-!J,fR6s8W-!rr<$!J,fQKs8Duu!WW3"s8Vus!!E9$s8W,o
-!!!9(s8W-!n,NG!s8W-!s1eU7&-)\0s8N'!!$D7 at s8Vus!!#7`s8W,g!!!"Ks8W-!^]4?7J,fQKrr<$!
-!<<*!s82is!!*'!s8VQg!!!'"s8W,7!!!!"s8W-!z!WW3"qu?]s!!3-"s6p!g!!!-$s8Tk7!!!!$s8W*!z
-"98E!z!!E9$p](9o!:U*js53kW!!)Kjs8Tk7!!!&h"98CO!!!!"n,r^jz!Up3krVuou!!D]m
-s82is!!!,j"989!!!!!(n,`Rez#Ohcop](9o!"\Q"s7cQo!!!Q!!WVop!!!!@n,WL`z+7K:1
-p](9o!'frQs7cQo!!#7Q!.XbD!!!"Kn,Rt9zs6p"Qqu?]s!WVWh5PtK]!!E8j!$D1?!!!9(n,O!u!!!!0s6p"!rr<$!+91g1#QK;S!.Y%<!!E8Z!!3-"n,NIg
-n,N^ns6p!gJ,TF4s8VQg!'gM`s8RlD!!!Q0s8Virn,NFjs8W,7!Up'h!.Y%J!!2Qh!!!9(huEfI~>
-Q
-q[1 0 0 1 0 0]concat
-76 95 true[1 0 0 1 -2409 -3517]@85 imagemask
-+92B at p`KP9s6q-1
-s8Vj9s8W,g+92B at p`KP9s6pR!s8VQns8W,7!WW3"!!*'!s*t+Ls8DuuJ,fNK!.Y%H!!%NKrr<%Ks82is
-J,fKJ!'gM]!!*'!qu?^]s82iss8Vus!'gM]!!3-"p](:Ys82j!s8VQg!'gM]!!E9$huEaAs82j%s8V!W
-!'gM]!"],0^]4@!s82j-s8RTL!'gM]!$D7 at J,fR6s82j]s8N'!!'gM]!.Y%J!!!!`s82kHs82is!'gM]!<<)s!!!!`
-s82ots7cQo!'gM]!WW2h!!!!`s83!!s53kW!'gM]#QOh^!!!!`s83E-s1eU7!'gM]&-)Z[!!!!`s83u=
-s*t(L!'gM_5QC``!!!!`s8G7_rVuou!'gM`J,fEH!!!!`s8W-!qu?]s!'gM`s8Vio!!!!`s8W-!n,NFg
-!'gM`s8V!W!!!!`s8DuthuE`W!'gM]s8Tk7!!!!`s87BHJ,fQL!'gM]5Q?66!!!!`s83u=z!'gM]&,lP/!!!!`
-s83-"z!'gM]"8i-!!!!!`s82oqz!'gM]!<)ru!!!!`s82kHz!'gM]!'bu6!!!!`s82j=
-^]4?7!'gM]!"[uf!!!!`s82j%n,NFg!'gM]!!Dur!!!!`s82j!qu?]s!'gM]!!3'!!!!!`s82isrr<$!
-!'gM]!!%M!!!!!`s82isJ%u$a!'gM]!!#7Q!!!!`s82is5PP3Y!'gM]!!#7_!!!!`s82isJ,b$!!'gM]!!3-"huEaA
-s82j]s8W*!!'gM]!'gM`rr<$`s82j]s8W*!!'gM]!'gM`rr<$`s82isz!'gM]z!!!!`s82is
-z!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!", at s82isz+92B=z!!", at s82isz+92B=z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 94 true[1 0 0 1 -2489 -3488]@85 imagemask
-!$C\1z!!%NJ
-z!!!'"s*t(L!!!!$s8Tk7z#QOh^z!"],0n,NFg!!", at s7cQo!!!!@s8Vusz5QC9O
-z!'gMAIK0?J!!#7`i'%,@!!!!`s56*Az5QBX`z!'gMA%tFW[!!", at i"(><!!!!@s54-t
-z+917(^]4?7!"]+F"5j.Z!!!9(J-4^0!!!!"rW!&Yz!!!!"n,NFgz!Up'hz!!2ipz!!!#o
-zzp](9oz!;lfsz!!%BHz!!!"HzzIK0?Jz!<)ruz!!*$!
-z!!!'"z!!!!"rr<$!z"93lOz!!E7Oz!!!-$J,fQL!!!!(s1eU7z#QMR>
-z!"]+fz!!!Q0huE`W!!!!0s53kWz+91g1z!$D71z!!#7`n,NFg!!!!`s7cQoz5QCKY
-z!.Y%Hz!!%NKqu?]s!!!$!s82iszs8W&uz!<<)uz!!3-"rVuou!!!'"s8N'!
-!!!!$s8UsVz"98DYJ,fQL!!E9$O+731!!!9(s,V[1!!!!(s8Rkiz&-)Y7^]4?7!"],0#J^<>
-!!", at rr_0Z!!!!@s8E,Yz+92<Bn,NFg!'gM]!Up'h!!#7`quQ9e!!!"Ks82omzJ,f9Dp](9o!.Y%D!;HNo
-!!*'!n,W at d!!!$!s6p#9!!!!"s8VQgIK0?J!WW2X!.FnJ!!3-"huGq@!!!-$s1eV!!!!!$s8Tk7*rl9@
-#QOh>!$;1@!!iQ(J,g[A!!!Q0s*t([J,fQ[s8RTL&&8/F+92?@!"ZjF!$D7@!!!8>!!#7`rVup'huEaA
-s8Duu#N,R^5QC]_!!D]j!.Y%H!!!,j!!%NKqu?^!n,NIgs82is"8Diss8Vus!!iE%!WW3!!!!9'!!iQ(rr<$@rr>:`s8Virs8V"As8W,o"98DZ5QCc`p]LQri'78As7c]rs53~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -2558 -3517]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -2643 -3517]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2706 -3515]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2777 -3517]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2892 -3515]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-92 93 true[1 0 0 1 -2691 -3295]@85 imagemask
-5QCc`s*t(L#QOhn
-5QCc`s*t(L#QOhn5QCc`s*t(L&-)\!!<<*!huE`W+92?@!$D7 at z5QCKY!"],-zJ,f!<!!iQ%
-zJ,eF,!!iQ!zs8Tk7!!iQ!!!!!"s8RTL!!E8j!!!!$s8N'!!!E8j!!!!$s8Duu!!E8j!!!!(
-s82is!!E8j!!!!0s7cQo!!E8j!!!!@s7cQo!!E8j!!!!@s6p!g!!E8j!!!!`s53kW!!E8j!!!"Ks1eU7!!E8j!!!$!
-s*t(L!!E8j!!!'"s*t(L!!E8j!!!'"rr<$!!!E8j!!!-$rVuou!!E8j!!!9(qu?]s!!E8j!!!Q0p](9o
-!!E8j!!!Q0n,NFg!!E8j!!", at n,NFg!!E8j!!#7`huE`W!!E8j!!%NK^]4?7!!E8j!!*'!J,fQL!!E8j
-!!*'!z!!E8j!!3-"z!!E8j!!E9#z!!E8j!!iQ%z!!E8j!!iQ!z!!E8j!"],!z!!E8j
-!$D71z!!E8j!'gMAz!!E8j!'gM!z!!E8j!.Y$!z!!E8j!<<'!z!!E8j!WW-!
-z!!E8j"98?#z!!E8j"989!z!!E8j#QOQ!z!!E9$s8VQgz!!E9$s8V!Wz
-!!E9$s8W&uz!!E9$s8W,Wz!!E9$s8W,oz!!E8j"98E$z!!E8j!!iQ(^]4?7!!E8j!!*'!huE`W
-!!E8j!!", at p](9o!!E8j!!!9(qu?]s!!E8j!!!-$rVuou!!E8j!!!$!rr<$!!!E8j!!!"Ks*t(L!!E8j
-!!!!`s*t(L!!E8j!!!!`s1eU7!!E8j!!!!@s1eU7!!E8j!!!!@s53kW!!E8j!!!!0s53kW!!E8j!!!!0
-s53kW!!E8j!!!!0s53kW!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(
-s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g
-!!E8j!!!!(s6p!g!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!@s1eU7!!E8j
-!!!!@s1eU7!!E8j!!!!`s1eU7!!E8j!!!!`s*t(L!!E8j!!!"Krr<$!!!E8j!!!$!rr<$!!!E8j!!!'"rVuou!!iPn!!!9(qu?]s!!iQ!!!", at n,NFg!!iQ!!!*'!huE`W!"],/!$D7 at J,fQL
-!'gM`s8W-!z"98E$s8W,oz5QCc`s8W,7z5QCc`s8W&uz5QCc`s8RTLz~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -2785 -3295]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-62 107 true[1 0 0 1 -3768 -3293]@85 imagemask
-!!!$!huE`W!!!Q0
-rVuou!!#7`s*t(L!!*'!s53kW!!E9$s7cQo!!iQ(s82is!"],0s8N'!!'gMQ+9-ik!.Y$a"96.:!<<'!
-!<:sW!WW-!!.XJ<!WW&t!'g5Y"98,r!$D+=#QO8n!"]&/#QO8n!"]&/&-(Pf!!iN(+90+V!!iOS+90+V
-!!E7O+90+V!!E8:5Q?66!!E8Z5Q?66!!3,XJ,b$!!!3,XJ,]KK!!3,hJ,]KK!!3,hJ,]KK!!*&os8N'!!!*&os8N'!
-!!*&os8Duu!!*&os8Duu!!*&os8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu
-!!*&ss8Duu!!*&ss8Duu!!*&sJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,t5Q:]`!!3,p5Q:]`
-!!E8r+9)<@!!E8r+9)<@!!E8r+9-ik!!iQ!&-%.[!!iPn#QK;S!"],!#QMR>!"],!"96.:!$D7!!WV'X!$D7!!WV'X
-!'gM!!<;Ng!'gM!!.XbD!.Y$!!'gA]!<<(L!$D1?!WW0"!!iN("98?#!!E7O"98?#!!3,X#QO]%!!%ND
-&-)D)!!", at +91g1!!!9(s8V!W!!!$!s8Tk7!!!!`s8RTL!!!!(s8N'!!!!!(s8Duu!!!!0s82is!!!!@
-s7cQo!!!!`s53kW!!!"Ks1eU7!!!$!rr<$!!!!'"rVuou!!!-$p](9o!!!9(huE`W!!!Q0^]4?7!!", at z!!%NH
-z!!*&oz!!3,Xz!!E8:z!!iN(z!"]&/z!"\u-z!$Ct9z!'frQ
-z!'fBAz!.Vcaz!.TM!!!Dur!<3$!!"]&/!<3$!!$D1?!<)ru!'gJ`!<)ru!.Y"K!<)ru
-!<<'!!<)ru!WW0"!<)ru"98B$!<3$!#QOf(!<3$!&-)V/!.TM!5QC]_!.VcaJ,fEH!'fBBs8Vio!$D+Ds8VQg!"],0s8Tk7!!iQ(s8RTL!!E9$s8Duu!!*'!s6p!g!!#7`s*t(L!!!'"n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-79 106 true[1 0 0 1 -3756 -2453]@85 imagemask
-z!!!!(n,NFg
-z!$D1?"979Z!!!!`rr<0$huE`W!<<(L!WVWh!!!'"s1e[8n,NFg!WW2X!<;fo!!!-$s6p$gp](9o
-#QOhn!<;rs!!!9(s7cSDqu?]s&-)\)!.XtJ!!!Q0s7cRYrVuou+92B=!'gJ`!!",@"8i- at rr<$!5PtQ[
-!$D5k!!#7Y!.4bWs*t(L5O\Z%!"]+F!!#7A!'UAfs1eU7J%u%*!!iP^!!%Ma!$2+Bs53kWIt.M?!!E8j!!%M!!"Ju2
-s6p!grr<$/!!3,h!!*$!!"Ju0s7cQorVup.!!*&o!!)uuzs82itrVuou!!%NH!!2utzJ,TEK
-qu?]s!!#7_!!2utz5Q:]aqu?]s!!",@!!2utz+9-inp](9o!!!Q0J-5QHz&-'EIp](9o
-!!!Q0^]X?3z#QN]an,NFg!!!9(i!8`Oz"97iqn,NFg!!!-$n-AF_z!WVWon,NFg!!!'"p]o^Wz
-!<;g!huE`W!!!$!r"%]cz!.XnWhuE`W!!!"KrX[oez!'gGn^]4?7!!!!`rsumFz!'gJo
-^]4?7!!!!@s.@(,z!$D65^]4?7!!!!0s5/>,z!"]+eJ,fQL!!!!(s8RTLz!!iQ(J,fQL
-!!!!$s8RTLz!!E9$z!!!!"s8N'!z!!3-"zzs8N'!z!!*'!zzs8Duuz
-!!%NJzzJ,TEJz!!#7_zz5Q1W_z!!",=zz+8c*=z!!!Q-
-zz&,ZD-z!!!9%zz#P\9!z!!!,rzz"8Dirz!!!,rz
-z"7Q9jz!!!8nzz#Oh]nz!!!8nzz#N,R^z!!!Pfzz&)[Efz
-!!!Pfzz+2 at jV!!!"D!!"+Vz!-eJD+2 at jV!!!!Y!!#66z!&srY5C`_6!!!!]!!#66
-z!'C5]IfKHK!!!!_!!%KKz!'UA_rr<$!!!!!@!!3'!z!$?^nrVuou!!!!@^^'i=z
-!$CtXqu?]s!!!!0s8Vusz!"],0qu?]s!!!!0s8Vioz!!iQ(p](9o!!!!(s8VQgz!!E9$huE`W!!!!"s8Tk7z!!3-"J,fQLzJ,]KKz!!#7]zz&+BQ!z~>
-Q
-q[1 0 0 1 0 0]concat
-96 93 true[1 0 0 1 -2675 -3060]@85 imagemask
-5QCc`s8V!Wz
-5QCc`s8W+Lz5QCc`s8W,sz!.Y%Ks8W-!J,fQL!$D7 at s8W-!n,NFg!!iQ(!!E9$qu?]s!!E9!
-!!!Q0s*t(L!!E9!!!!$!s53kW!!E8r!!!!@s6p!g!!3,p!!!!(s82is!!3,p!!!!"s8Duu!!3,pz
-J,b$!!!3,pz5QAM!!!3,pz+917!!!3,pz#QO8n!!3,pz"98,r!!3,pz!WW&t!!3,pz
-!<;rs!!3,pz!.XtJ!!3,pz!.Y"K!!3,pz!'gJ`!!3,pz!$D5k!!3,pz!$D6V
-!!3,pz!"]+F!!3,pz!!iP^!!3,pz!!iP^!!3,pz!!iPn!!3,pz!!E8j!!3,p
-z!!E8r!!3,pz!!3,p!!3,pz!!3,p!!3,pz!!3,t!!3,pz!!3,t!!3,pz!!*&s!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!%NJ!!3,pz
-!!%NJ!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!*'!!!3,pz!!*&u!!3,pz!!*&u!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!3-!!!3,pz!!3,t!!3,pz!!3,t!!3,pz
-!!E9!!!3,pz!!E9!!!3,pz!!E8r!!3,pz!!iQ!!!3,pz!!iQ!!!3,pz!"],!!!3,pz
-!"],!!!3,pz!$D7!!!3,pz!$D7!!!3,pz!'gM!!!3,pz!.Y$!!!3,pz!<<(L
-!!3,pz!<<'!!!3,pz!WW-!!!3,pz"989!!!3,pz#QO]%!!3,pz&-)D)!!3,p
-z+91g1!!3,pzJ,eF,!!3,pzs8Tk7!!3,p!!!!"s8N'!!!3,p!!!!(s8Duu!!3,p!!!!@s7cQo!!E8r!!!"Ks6p!g!!E9!!!!-$s1eU7!!iQ%!!", at rr<$!!"],0!!iQ(qu?]s
-!$D7 at s8W-!n,NFg!WW3"s8W-!J,fQL5QCc`s8W,oz5QCc`s8W+Lz5QCc`s8Tk7z~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2777 -3059]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-58 65 true[1 0 0 1 -2839 -3059]@85 imagemask
-!!!'"p](9o!!!Q0
-rr<$!!!#7`s1eU7!!*'!s53kW!!3-"s7cQo!!E9$s82is!"],0s8Duu!$D7 at s8N'!!$D7 at s8RTL!'gM`
-s8Tk7!.Y%H!'fBA!<<)W!!hun!<<(L!!D]j!WW0"!!)co!WW-!!!%BH"989!!!#+]"98,r!!"&?#QO8n
-!!!N0#QN]^!!!6(#QN]^!!!7S&-'EF!!!+O&-%.[!!!&8&-%.[!!!$"&,uV0z+9)<@z+9)<@z+8u6?
-z+8u6?z+8u6?z+8u6?z+8u6?z+8c*=z+8c*=z+8c*=z+8c*=
-z+8c*=z+8c*=z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z#Q+Q%
-z#Q=]'z#Q=]'z"9&9#!!2Qh"9&9#!!i9!!WN-"!"\u-!WN-"!"]&/!<3$!!$D1?!<7QL!$D4@!.TM!!'gJ`!'e7!!'gJ`!$C,!!'gG_!$C,!!'gG_!"\Q!!.XtJ!!i9!!.XnH!!E-!
-!.XbD!!)uu!<;Ng!!%M!!WV'X!!#7Q"96.:!!!Q0s8RTL!!!-$s8Duu!!!$!s7cQo!!!!@s1eU7~>
-Q
-0.564706 g
-3297.35 2610.95 m
-3297.35 2648.15 3267.35 2678.15 3230.15 2678.15 c
-2343.35 2678.15 l
-2306.15 2678.15 2276.15 2648.15 2276.15 2610.95 c
-2276.15 2204.15 l
-2276.15 2166.95 2306.15 2136.95 2343.35 2136.95 c
-3230.15 2136.95 l
-3267.35 2136.95 3297.35 2166.95 3297.35 2204.15 c
-f*
-1 g
-3232.55 2666.15 m
-3232.55 2703.35 3203.75 2732.15 3166.55 2732.15 c
-2288.15 2732.15 l
-2252.15 2732.15 2222.15 2703.35 2222.15 2666.15 c
-2222.15 2267.75 l
-2222.15 2230.55 2252.15 2201.75 2288.15 2201.75 c
-3166.55 2201.75 l
-3202.55 2201.75 3232.55 2230.55 3232.55 2267.75 c
-f*
-0 g
-3232.55 2666.15 m
-3232.55 2703.35 3203.75 2732.15 3166.55 2732.15 c
-2288.15 2732.15 l
-2252.15 2732.15 2222.15 2703.35 2222.15 2666.15 c
-2222.15 2267.75 l
-2222.15 2230.55 2252.15 2201.75 2288.15 2201.75 c
-3166.55 2201.75 l
-3202.55 2201.75 3232.55 2230.55 3232.55 2267.75 c
-h
-S
-3050.15 2187.35 15.5999 549.6 re
-Y
-3057.35 2739.35 m
-3057.35 2194.55 l
-S
-3057.35 2368.55 189.6 15.5999 re
-Y
-3054.95 2376.95 m
-3239.75 2376.95 l
-S
-0 0 6120 7920 re
-Y
-3095.75 2378.15 m
-3095.75 2400.95 3077.75 2418.95 3056.15 2418.95 c
-3034.55 2418.95 3016.55 2400.95 3016.55 2378.15 c
-3016.55 2356.55 3034.55 2338.55 3056.15 2338.55 c
-3077.75 2338.55 3095.75 2356.55 3095.75 2378.15 c
-f*
-3275.75 2378.15 m
-3275.75 2400.95 3257.75 2418.95 3236.15 2418.95 c
-3214.55 2418.95 3196.55 2400.95 3196.55 2378.15 c
-3196.55 2356.55 3214.55 2338.55 3236.15 2338.55 c
-3257.75 2338.55 3275.75 2356.55 3275.75 2378.15 c
-f*
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -2581 -2562]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -2666 -2562]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2729 -2560]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2798 -2562]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2915 -2560]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-130 95 true[1 0 0 1 -2289 -2338]@85 imagemask
-z!&+BQ!!!#7
-zz!!"tYzhuE`Wz!!!"Dz!T3qXzzGQ7^D!!2!Xzz!.4bH
-!!!&hzz!!)os!!!!$n,NFgz!!!#sz"7Q9jzzrVuou!!Durzz
-!WE'!!!!9!zz!!3*"!!!!(p](9oz!!!'"z&,ZD-z!!!!$rr<$!!"\u-zz"93lO
-!!!Q-zz!!iOS!!!!@rVuouz!!!9(J,fQL+8u6?z!!!!(s1eU7!$D1?zz
-&-'EF!!#7`zz!"]+F!!!!`rr<$!z!!!Q0huE`WJ,]KKz!!!!@s53kW!.Y$!z
-z+91g1!!%NKJ,fQLz!$D71!!!$!s*t(Lz!!#7`n,NFgs8Tk7z!!!!`s7cQo!WW28zz
-J,f9D!!3-"^]4?7z!.Y%D!!!'"s53kWz!!%NKqu?^!s8V!Wz!!!$!s82is"98DZz
-zs8Vus!!E8qn,NFgz!<<&t!!!9(p[A._z!!3-!rVup's7>^[z!!!'"r-n\H&-(\b
-z!!!!"s87?H!"]+ip](9oz"989`!!!Q0iV3BQz!!E8r5C`_Us2"U5z!!!-$pcj9/+901Tz
-!!!!(s7d[d!$D5kqu?]sz#QO98^]6V!JGoNKz!"],!+2 at k@s+#Ouz!!!Q0i"*U'J,]Lt
-z!!!!0s54FG!.Y"KIfKHKz+917(huJ9+!'^G`z!$D6V#Oh`nrW#._z!!",@^^'?/
-s8E!_J,fQL!!!!`s*t4@!<;rs++O=kz5Q?69p]:Em!$?^kz!'gL6"8Dosqu at hSz!!%NK!!2iss7cR)
-^]4?7!!!"Krr<)t"98,r&)[EfzJ,]KKqucug!!hE^z!<<#u!;m*%n,N^Oz!!*&u!!*!'
-s6p!nn,NFg!!!'"qu?_G#QN]^"7Q9j!!!!"s82isIh2S;!!D]jz!WW&t!.POZ^]4K3z!!E8r
-!!#5*s1eU8p](9o!!!-$p](:YTDu\,!VcWp!!!!$s6p!g+.rR`!!)osz#QO8n!$AuUJ,fTIz!!iPn!!",@
-rr<$!rVuou!!!9(huE`fs8N'!!.FnJ!!!!0s53kW&-)Y0!!%HJz&-(Pf!!iQ'!!!"Kz!$D6V
-!!!9(rVuou56(Z`!!",@^]4?>s8Duu!'^G`!!!!@s*t(L"989!!!#66z5Q?66!!E9!!!!!@J,fQL
-!'gL6!!!-$p](9o++O=k!!#7`!!!!$s7cQo!"ZjF!!!"Krr<$!"98,r!!!PFzJ,TEJ!!E8j!!!!0huE`W!.XtJ
-!!!9(n,NFg#N,R^!!*&u!!!!(s53kW!!hE^!!!$!qu?]s&-(Pf!!!8nzs82is!"]+f!!!!$n,NFg
-!WW&t!!!Q0^]4?7"7Q9j!!3,p!!!!@s1eU7!!2ip!!!-$p](9o+90+V!!!&p!!!!$s6p!g!'gL6!!!!"
-qu?]s"97ij!!#7`J,fQL!W2ot!!iPn!!!!`rr<$!!!)os!!!9(huE`WJ,]KK!!!#u!!!!0s53kW!.XtJzrVuou
-&-(Pf!!*&uz!<)ru!$D6V!!!$!rVuou!!*$!!!",@^]4?8s8Duu!!!$!!!!!`s1eU7!WW&tz
-s*t(LJ,d:a!!E9!z!<7QL!.Y$a!!!9(rVuou!!*&7!!*'!^]4?>s8Duu!!!'"huElZs53kW+92?@
-!!!!$s7cR)s8Vus!.Y%KhuE`W5QC``J,fQKi",kfs8RTL!WW3"^jlCas54Ffs8W+L!!3-"s1j-as8V!fs8W-!J,fWMs8Tk~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -2423 -2339]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-67 65 true[1 0 0 1 -2484 -2338]@85 imagemask
-z(]XO9z
-!&srYz!!#+]z!!!"HzzIK0?Jz!.FnJz!!*$!z!!!$!z!!!!"
-rr<$!z!WRZMz!!3+Mz!!!-$^]4?7!!!!$s1eU7z#QMR>z!!iP^z!!!Q0
-huE`W!!!!0s6p!gz&-),!z!$D71z!!",?p](9o!!!!`r:g6lz5Q#m/z!'g7+z!!%ND
-HiO-H!!!"Kpc\ZXzs6r2Pz!<;OQz!!3,X*rl9@!!!'"i#_q!!!!!"s54E<z"96.I
-J,fQL!!E8:&&8/F!!!9(J-Wji!!!!(s*t?iz#QK;VhuE`W!"])0"5j.Z!!!Q0!!D]j!!!!@rVuug
-z+8u6 at n,NFg!'gG_!VcWp!!#7]!!)co!!!!`qu?`pzJ+s!DHiO-H!.XbD!.4bH!!*&o!!%HJ!!!$!n,NGPzs6p!g4obQ_!WV'X!'^G`!!3,X!!")@!!!-$huEa!J,fQOs1eU7%tFW[
-#QMR>!"XS[!!iOS!!!PF!!!Q0J,fQS^]4?Fs*t(L#N,R^+9)<@!!hE^!$D4@!!!,j!!#7`!!!!$n,NGQ
-rr<$!"8DirJ,]KK!!Dur!<<'!!!!9%!!3-"J,fQ[rW!3's53kW5Q?6Us8Vus!WW2X+92B=!!3-"hu~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2553 -2339]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-36 95 true[1 0 0 1 -2616 -2340]@85 imagemask
-+92B at n/q]1s6p'h
-s8N'!5QCKY!"]+f!!!9(huE`^s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!iP>!!!9(^]4?Fs1eUVs8Tk7+92AV!$D7@^]4E8s1eU7+90+V!!3,8!!!!`^]4?7#J^<~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2655 -2339]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -2718 -2340]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-66 95 true[1 0 0 1 -2787 -2309]@85 imagemask
-!!!-$huE`W!!!"K
-s8N'!!!!!"s8W,Wz&-)\0qu?]s!$D7 at s8N'!!!%NKs8W,7!!!$!s8W-!n,NFhs8W-!s7cQo"98DZ
-!'gG_!!iQ'!!!'"!!!9(n,NFg5C`_Es1eU7!!hE^&-%.[!!!&h!"])0zp](j(z!-eJSrVuou
-!!#+]&,ZD-!!!!?!!iE%z%KHb3z!"T&7qu?]s!!!6("8i-!!!!!(J-#QJz#ClgRz!!e#SIK0?J
-!!!7S!.OtK!!!!(J,g[Az%tFWjJ,fQL!$?^k#J^<>!!%M!!!D-Z!!!Q0!!!&h"98E$rr<$!F8u:?
-s8N'!!.Y%Ks8W&u!!3-"s8W,s!!!9(s8W-!qu?^-s8W-!s7cQo+92B at s8V!W!$D7 at s8W,7!!#7`s8W-!
-!!!!`s8W-!n,NFg5QCc_z!$D4 at z!!",1z!!!!@huE`Wz&)[Efz!!hE^z!!!,Zz
-!!!!"n,NFgz!:Tsgz!!%6Dz!!!!]zz*WQ0?z!"XS[z!!!8mrVuou
-!!!!$s8V!Wz#QOi!z!"],0rVuou!!#7`!WN-"!!!"KquD5^!!!!"s6p"1huE`W"979Z&+BQ!
-!!E8:!"\i)!!!9(^]4W;!!!!0s*t(Squ?]s&,uV0#Q=]'!$D4@!!E3#!!",?!!!-$!!!!`rVup#rr<$!5Q1W_"9/?$
-!'gA]!!E7O!!#7]!!!-$J,fR6qu?^!s*t(L5PtK]"93lO!'gA]!!E7O!!#7]!!!-$J,fR6p](:!s*t(L
-5PP3Y#QK;S!'g5Y!!iOS!!#7Y!!!9(J,fQkp](:)s*t(L+8>g9&,uV0!$Ct9!"])0!!!Q)!!",@!!!!0
-qu?^=rr<$!#Q+Q%+8u6?!!iE%!'gG_!!!-#!!#7]!!!!$rVuqJs8Tk7!WN-"s8W,7!!*%L!WW3"^]4 at a^]XW:s1eU75N!(Ps8Tk7!"],0s1eU7!!!-$s82iszs8VQgz!'gJ`!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -2857 -2339]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-68 95 true[1 0 0 1 -2897 -2340]@85 imagemask
-J,fQJ"98E$n:1K<
-rWE3#s6pR!s7cSDs8Tk8s8RTL#QOc'!<<'!!!E9!!!%NJ!!!'"p](;DrVup!s7cQo5Q1W_!WVWh!'gA]
-!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]
-!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]
-!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]s
-s6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!
-n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!
-n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!3,h!!#7_!!!'"huEaArr<$"s53kW5QAM!"979Z!'gMA!!E8Z
-!!#7^n,N^n^]4@!rVQX+s1eU75Q(N]5QAM!!'gC2s8W+L!!#7]5QCc`J,fR6r#bt=rr<$!5Pu&ls8Duu
-!'gA`s8Vus!!#7]!WW2p!!!!`quD6HhuE`W5PtKls*t(L!'gA]z!!#7]z!!!!`qu?]sz5PtK]z
-!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz
-5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`
-qu?]sz5PtK]z!'gA]z!!%NHz!!!$!qu?]s!!!"Ks82iszJ,fEHz!'gM]z!!!9(qu?]szs82isz!"\u-z!!!&tzz49,?]!!!!~>
-Q
-3346.55 2079.35 15.5999 1860 re
-Y
-3353.75 3941.75 m
-3353.75 2087.75 l
-S
-3237.35 3328.55 129.6 15.5999 re
-Y
-3234.95 3336.95 m
-3359.75 3336.95 l
-S
-0 0 6120 7920 re
-Y
-3275.75 3338.15 m
-3275.75 3360.95 3257.75 3378.95 3236.15 3378.95 c
-3214.55 3378.95 3196.55 3360.95 3196.55 3338.15 c
-3196.55 3316.55 3214.55 3298.55 3236.15 3298.55 c
-3257.75 3298.55 3275.75 3316.55 3275.75 3338.15 c
-f*
-3395.75 3338.15 m
-3395.75 3360.95 3377.75 3378.95 3356.15 3378.95 c
-3334.55 3378.95 3316.55 3360.95 3316.55 3338.15 c
-3316.55 3316.55 3334.55 3298.55 3356.15 3298.55 c
-3377.75 3298.55 3395.75 3316.55 3395.75 3338.15 c
-f*
-3237.35 3088.55 129.6 15.5999 re
-Y
-3234.95 3096.95 m
-3359.75 3096.95 l
-S
-0 0 6120 7920 re
-Y
-3275.75 3098.15 m
-3275.75 3120.95 3257.75 3138.95 3236.15 3138.95 c
-3214.55 3138.95 3196.55 3120.95 3196.55 3098.15 c
-3196.55 3076.55 3214.55 3058.55 3236.15 3058.55 c
-3257.75 3058.55 3275.75 3076.55 3275.75 3098.15 c
-f*
-3395.75 3098.15 m
-3395.75 3120.95 3377.75 3138.95 3356.15 3138.95 c
-3334.55 3138.95 3316.55 3120.95 3316.55 3098.15 c
-3316.55 3076.55 3334.55 3058.55 3356.15 3058.55 c
-3377.75 3058.55 3395.75 3076.55 3395.75 3098.15 c
-f*
-3237.35 2368.55 129.6 15.5999 re
-Y
-3234.95 2376.95 m
-3359.75 2376.95 l
-S
-0 0 6120 7920 re
-Y
-3275.75 2378.15 m
-3275.75 2400.95 3257.75 2418.95 3236.15 2418.95 c
-3214.55 2418.95 3196.55 2400.95 3196.55 2378.15 c
-3196.55 2356.55 3214.55 2338.55 3236.15 2338.55 c
-3257.75 2338.55 3275.75 2356.55 3275.75 2378.15 c
-f*
-3395.75 2378.15 m
-3395.75 2400.95 3377.75 2418.95 3356.15 2418.95 c
-3334.55 2418.95 3316.55 2400.95 3316.55 2378.15 c
-3316.55 2356.55 3334.55 2338.55 3356.15 2338.55 c
-3377.75 2338.55 3395.75 2356.55 3395.75 2378.15 c
-f*
-3357.35 3328.55 249.6 15.5999 re
-Y
-3354.95 3336.95 m
-3599.75 3336.95 l
-S
-0 0 6120 7920 re
-Y
-3395.75 3338.15 m
-3395.75 3360.95 3377.75 3378.95 3356.15 3378.95 c
-3334.55 3378.95 3316.55 3360.95 3316.55 3338.15 c
-3316.55 3316.55 3334.55 3298.55 3356.15 3298.55 c
-3377.75 3298.55 3395.75 3316.55 3395.75 3338.15 c
-f*
-3635.75 3338.15 m
-3635.75 3360.95 3617.75 3378.95 3596.15 3378.95 c
-3574.55 3378.95 3556.55 3360.95 3556.55 3338.15 c
-3556.55 3316.55 3574.55 3298.55 3596.15 3298.55 c
-3617.75 3298.55 3635.75 3316.55 3635.75 3338.15 c
-f*
-3357.35 2368.55 248.4 188.4 re
-Y
-3357.35 2376.95 m
-3597.35 2556.95 l
-S
-0 0 6120 7920 re
-Y
-3395.75 2378.15 m
-3395.75 2400.95 3377.75 2418.95 3356.15 2418.95 c
-3334.55 2418.95 3316.55 2400.95 3316.55 2378.15 c
-3316.55 2356.55 3334.55 2338.55 3356.15 2338.55 c
-3377.75 2338.55 3395.75 2356.55 3395.75 2378.15 c
-f*
-3635.75 2558.15 m
-3635.75 2580.95 3617.75 2598.95 3596.15 2598.95 c
-3574.55 2598.95 3556.55 2580.95 3556.55 2558.15 c
-3556.55 2536.55 3574.55 2518.55 3596.15 2518.55 c
-3617.75 2518.55 3635.75 2536.55 3635.75 2558.15 c
-f*
-3357.35 2908.55 248.4 188.4 re
-Y
-3357.35 3096.95 m
-3597.35 2916.95 l
-S
-0 0 6120 7920 re
-Y
-3395.75 3098.15 m
-3395.75 3120.95 3377.75 3138.95 3356.15 3138.95 c
-3334.55 3138.95 3316.55 3120.95 3316.55 3098.15 c
-3316.55 3076.55 3334.55 3058.55 3356.15 3058.55 c
-3377.75 3058.55 3395.75 3076.55 3395.75 3098.15 c
-f*
-3635.75 2918.15 m
-3635.75 2940.95 3617.75 2958.95 3596.15 2958.95 c
-3574.55 2958.95 3556.55 2940.95 3556.55 2918.15 c
-3556.55 2896.55 3574.55 2878.55 3596.15 2878.55 c
-3617.75 2878.55 3635.75 2896.55 3635.75 2918.15 c
-f*
-q[1 0 0 1 0 0]concat
-82 74 true[1 0 0 1 -3758 -2873]@85 imagemask
-!!!$!huE`W&&8/F
-!"],/!!!!`n,NFgJ,fP!!!%ND!!!'"s8V!W!<;rs!!E9$s7cQps82is&-(QPqu?j!rVup?s*tX[!!E9#
-!!#7_!!iOS#QOf(!.XnH"96.As8N'!s7cQps54Ffrr<*"p](<on.5R!J-#]>!!%N<&,:X)"979Z!.Xbc
-n/m/cs53kW5PuV]%tFob^]4?Vr'.t-J.M[q!!",?5C`uh&-'EF!"]&nJ-Wk3s*t(L&-%+Z#J_G]J,fQSs*k"N^`WT,
-!!!9(rW!&95Q?66!!E9#!!C#$rr<$!"989!"2I/$!!!!$s82j!^jl at a!!!'"qu?]sJ,]KK!!3,p!!!"K
-rr<$!!<;fo!!%NKzs7cQo!.XtJ!!!$!p](9oJ,TEJ!!%ND!!!$!rVuou!.XbD!!*&uzJ,B9H
-!<<#u!!!!`qu?]ss8Duu!!#7]!!!$!rVuou!'gG_!!*&uz+8u6?!<<#u!!!!@rVuous8Duu!!",@!!!$!rVuou
-!$D4@!!*&uz+9)<@!<<#u!!!!@s*t(Ls8Duu!!", at J,fTLrVuou!'gL6!!*&uz5QAM!!<<#u
-!!!!`s1eU7s8Duu!!#7`huEb,rVuou!'gMA!!%NKzJ,eF,!.Y"K!!!"Ks6p!gJ,]KK!!%KJn,NH<
-rr<$!!.Ot;!!#7`zrr;`n!'gJ`!!!#uJ+s!D5Q?66!!)qHp](:Ys*t(L!W7HF!!", at J,fQMr'1)Z!$D5k!!!&p
-5PtK]&-'EF!!E!\rVup/s1eU7"8Eu;!!!9(^]4?>n/qZ1!!iP^!!!8n+9)<@"979Z!"[uurr<$$s6p!g
-+5d\0J,fWMn,NGQ^^pHq!!*&o!!#7!#QK;S!.XnH!<7QSs1eU75Q1W`rr<0$^]4?Vrr<<'!!E8:!!!Q0
-i#hjs"979Z!!iQ(s7cQps53kW!WW3"n,NLhn,NFgJ,fQ,!!3,h!!!!@s8RTL!<;Ng!!!9(rVuous7cQo!!%N,z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-96 100 true[1 0 0 1 -2325 -3767]@85 imagemask
-z!!!Q)z
-z!!iQ(n,NFgz!.Y%Krr<$!z"98E$s1eU7z+92B at s7cQozJ,fQKs82is!!!!"
-s8W-!s8N'!!!!!(s8W+Ms8Tk7!!!!0s8VQg#QN]^!!!!`s8RTL!<;Ng!!!"Ks8Duu!$D+=!!!$!s7cQo
-!!iK'!!!'"s6p!g!!E6$!!!9(s53kW!!*%L!!!Q0s*t(L!!%Ma!!", at rr<$!!!",!!!", at rr<$!!!!Q!!!#7`rVuou
-!!!9!!!%NKqu?]s!!!-!!!*'!qu?]s!!!'!!!3-"p](9o!!!$!!!3-"p](9o!!!"J!!E9$n,NFg!!!!]
-!!E9$n,NFg!!!!9!!iQ(huE`Wz!!iQ(huE`Wz!"],0huE`Wz!"],0^]4?7z!$D7@
-^]4?7z!$D7@^]4?7z!'gM`^]4?7z!'gM`J,fQLz!'gM`J,fQLz!.Y%KJ,fQLz!.Y%K
-J,fQLz!.Y%KJ,fQLz!<<*!J,fQLz!<<*!J,fQLz!<<*!J,fQLz!<<*!z
-z!<<*!zz!<<*!zz!WW3"zz!WW3"zz!WW3"zz
-!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"zz
-!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"
-zz!<<*!zz!<<*!zz!<<*!zz!<<*!zz!<<*!z
-z!<<*!J,fQLz!.Y%KJ,fQLz!.Y%KJ,fQLz!.Y%KJ,fQLz!'gM`J,fQLz!'gM`J,fQL
-!!!!]!'gM`J,fQL!!!"H!$D7@^]4?7!!!"H!$D7@^]4?7!!!#s!$D7@^]4?7!!!#s!"],0^]4?7!!!&t
-!"],0^]4?7!!!&t!!iQ(huE`W!!!-!!!iQ(huE`W!!!-!!!E9$huE`W!!!9%!!3-"n,NFg!!!Q-!!3-"
-n,NFg!!!Q-!!*'!n,NFg!!",=!!%NKp](9o!!#7]!!%NKp](9o!!#7]!!#7`qu?]s!!%NH!!", at qu?]s!!*&s!!!Q0
-rVuou!!3,t!!!9(rVuou!!E9!!!!-$rr<$!!!iQ%!!!'"s*t(L!"],-!!!$!s1eU7!$D7=!!!"Ks53kW
-!.Y%H!!!!`s6p!g!<<)s!!!!0s7cQo"98E!!!!!(s8Duu&-)\-!!!!"s8RTL5Q?B6zJ,f!=s82oq
-z+92B at s6p$dz#QOi(s*t+Iz!WW3"qu?_Ez!$D7 at huEb)z!!*&s!!!!]~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2426 -3770]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-73 96 true[1 0 0 1 -2543 -3741]@85 imagemask
-+92B at s*t(L!!",@
-s8W+Lz+92B at s*t(L!!", at s8Vioz"98E$^]4?7!!!$!s8RTLz!.Y%Kz!!!!`s8Duu
-z!'gM_z!!!!`s8Duuz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`
-s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82j=
-^]4?7!'gM]!WW&t!!!!`s83-%s*t(L!'gM]&-)[f!!!!`s83u=s6p!g!'gM]J,fQD!!!!`s8;oss8Duu
-!'gM^s8W-!!!!!`s8W!=s8N'!!'gM`n-B!nJ,fR6s8Tk8s8Tk7!'gM`J,oWLhuEaAs8N'!s8V!W!'gM`!!%NKn,NGQ
-s8DuuJ,f!<!'gM]!!#7`p](:Ys82is5QCKY!'gM]!!#7`qu?^]s82is+926=!'gM]!!", at rVup_s82is
-+92<?!'gM]!!", at rVup_s82is+92<?!'gM]!!", at rr<$`s82is&-)Y0!'gM]!!!Q0rr<$`s82is&-)Y0
-!'gM]!!!Q0rr<$`s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6
-s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is
-&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0rr<$`s82is&-)Y0!'gM]!!!Q0rr<$`s82is+92?@
-!'gM]!!", at rr<$`s82is+92<?!'gM]!!", at rVup_s82is+92<?!'gM]!!", at qu?^]s8Duu5QCW]!'gM_!!#7`p](:Ys8N'!5QCKY!'gM`J,k*!n,NGQs8Tk7
-J,f!<!'gM`huNfWhuEaAs8DEfs8V!W!'gM^qud!!^]4 at as8;m-s8RTL!<<)sJ,fQK!!!-$s87BHs8Duu
-+92B=5QCc]!!", at s83u=s7cQo+92B=&-)[f!!", at s83!!s*t(Lz!<<#uz!!!!0^]4?7~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -2619 -3770]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -2706 -3770]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2768 -3768]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2839 -3770]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2955 -3768]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/complex.eps b/ast-5.3-1/sun210_figures/complex.eps
deleted file mode 100644
index 2d8ccb0..0000000
--- a/ast-5.3-1/sun210_figures/complex.eps
+++ /dev/null
@@ -1,1572 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 38 119 571 462
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/05 15:49:04
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5333.75 4140.95 m
-5333.75 4372.55 5145.35 4560.95 4913.75 4560.95 c
-1312.55 4560.95 l
-1080.95 4560.95 892.55 4372.55 892.55 4140.95 c
-892.55 1619.75 l
-892.55 1388.15 1080.95 1199.75 1312.55 1199.75 c
-4913.75 1199.75 l
-5145.35 1199.75 5333.75 1388.15 5333.75 1619.75 c
-f*
-1 g
-5268.95 4196.15 m
-5268.95 4427.75 5081.75 4614.95 4850.15 4614.95 c
-1257.35 4614.95 l
-1025.75 4614.95 838.55 4427.75 838.55 4196.15 c
-838.55 1683.35 l
-838.55 1451.75 1025.75 1264.55 1257.35 1264.55 c
-4850.15 1264.55 l
-5081.75 1264.55 5268.95 1451.75 5268.95 1683.35 c
-f*
-8 w
-1 J
-1 j
-0 g
-5268.95 4196.15 m
-5268.95 4427.75 5081.75 4614.95 4850.15 4614.95 c
-1257.35 4614.95 l
-1025.75 4614.95 838.55 4427.75 838.55 4196.15 c
-838.55 1683.35 l
-838.55 1451.75 1025.75 1264.55 1257.35 1264.55 c
-4850.15 1264.55 l
-5081.75 1264.55 5268.95 1451.75 5268.95 1683.35 c
-h
-S
-0.564706 g
-4913.75 3743.75 m
-4913.75 3896.15 4788.95 4020.95 4636.55 4020.95 c
-2969.75 4020.95 l
-2817.35 4020.95 2692.55 3896.15 2692.55 3743.75 c
-2692.55 1716.95 l
-2692.55 1564.55 2817.35 1439.75 2969.75 1439.75 c
-4636.55 1439.75 l
-4788.95 1439.75 4913.75 1564.55 4913.75 1716.95 c
-f*
-1 g
-4848.95 3798.95 m
-4848.95 3951.35 4725.35 4074.95 4572.95 4074.95 c
-2914.55 4074.95 l
-2762.15 4074.95 2638.55 3951.35 2638.55 3798.95 c
-2638.55 1780.55 l
-2638.55 1628.15 2762.15 1504.55 2914.55 1504.55 c
-4572.95 1504.55 l
-4725.35 1504.55 4848.95 1628.15 4848.95 1780.55 c
-f*
-0 g
-4848.95 3798.95 m
-4848.95 3951.35 4725.35 4074.95 4572.95 4074.95 c
-2914.55 4074.95 l
-2762.15 4074.95 2638.55 3951.35 2638.55 3798.95 c
-2638.55 1780.55 l
-2638.55 1628.15 2762.15 1504.55 2914.55 1504.55 c
-4572.95 1504.55 l
-4725.35 1504.55 4848.95 1628.15 4848.95 1780.55 c
-h
-S
-0.564706 g
-4493.75 2205.35 m
-4493.75 2247.35 4460.15 2280.95 4418.15 2280.95 c
-3188.15 2280.95 l
-3146.15 2280.95 3112.55 2247.35 3112.55 2205.35 c
-3112.55 1755.35 l
-3112.55 1713.35 3146.15 1679.75 3188.15 1679.75 c
-4418.15 1679.75 l
-4460.15 1679.75 4493.75 1713.35 4493.75 1755.35 c
-f*
-1 g
-4428.95 2261.75 m
-4428.95 2302.55 4396.55 2334.95 4354.55 2334.95 c
-3132.95 2334.95 l
-3090.95 2334.95 3058.55 2302.55 3058.55 2261.75 c
-3058.55 1817.75 l
-3058.55 1776.95 3090.95 1744.55 3132.95 1744.55 c
-4354.55 1744.55 l
-4396.55 1744.55 4428.95 1776.95 4428.95 1817.75 c
-f*
-0 g
-4428.95 2261.75 m
-4428.95 2302.55 4396.55 2334.95 4354.55 2334.95 c
-3132.95 2334.95 l
-3090.95 2334.95 3058.55 2302.55 3058.55 2261.75 c
-3058.55 1817.75 l
-3058.55 1776.95 3090.95 1744.55 3132.95 1744.55 c
-4354.55 1744.55 l
-4396.55 1744.55 4428.95 1776.95 4428.95 1817.75 c
-h
-S
-843.35 3052.55 319.2 15.5999 re
-Y
-840.95 3060.95 m
-1155.35 3060.95 l
-S
-0 0 6120 7920 re
-Y
-882.95 3062.15 m
-882.95 3083.75 864.95 3101.75 843.35 3101.75 c
-820.55 3101.75 802.55 3083.75 802.55 3062.15 c
-802.55 3040.55 820.55 3022.55 843.35 3022.55 c
-864.95 3022.55 882.95 3040.55 882.95 3062.15 c
-f*
-1113.35 3012.95 m
-1132.55 3060.95 l
-1113.35 3108.95 l
-1265.75 3060.95 l
-f*
-0.564706 g
-2393.75 3225.35 m
-2393.75 3299.75 2333.75 3360.95 2258.15 3360.95 c
-1448.15 3360.95 l
-1373.75 3360.95 1312.55 3299.75 1312.55 3225.35 c
-1312.55 2355.35 l
-1312.55 2280.95 1373.75 2219.75 1448.15 2219.75 c
-2258.15 2219.75 l
-2333.75 2219.75 2393.75 2280.95 2393.75 2355.35 c
-f*
-1 g
-2328.95 3281.75 m
-2328.95 3354.95 2270.15 3414.95 2195.75 3414.95 c
-1391.75 3414.95 l
-1318.55 3414.95 1258.55 3354.95 1258.55 3281.75 c
-1258.55 2417.75 l
-1258.55 2344.55 1318.55 2284.55 1391.75 2284.55 c
-2195.75 2284.55 l
-2268.95 2284.55 2328.95 2344.55 2328.95 2417.75 c
-f*
-0 g
-2328.95 3281.75 m
-2328.95 3354.95 2270.15 3414.95 2195.75 3414.95 c
-1391.75 3414.95 l
-1318.55 3414.95 1258.55 3354.95 1258.55 3281.75 c
-1258.55 2417.75 l
-1258.55 2344.55 1318.55 2284.55 1391.75 2284.55 c
-2195.75 2284.55 l
-2268.95 2284.55 2328.95 2344.55 2328.95 2417.75 c
-h
-S
-843.35 2632.55 319.2 15.5999 re
-Y
-840.95 2640.95 m
-1155.35 2640.95 l
-S
-0 0 6120 7920 re
-Y
-882.95 2642.15 m
-882.95 2663.75 864.95 2681.75 843.35 2681.75 c
-820.55 2681.75 802.55 2663.75 802.55 2642.15 c
-802.55 2620.55 820.55 2602.55 843.35 2602.55 c
-864.95 2602.55 882.95 2620.55 882.95 2642.15 c
-f*
-1113.35 2592.95 m
-1132.55 2640.95 l
-1113.35 2688.95 l
-1265.75 2640.95 l
-f*
-0.2 i
-1502 2904.14 m
-1502 2822.6 l
-1502 2807.66 1499.88 2805.32 1485.94 2804.42 c
-1485.94 2801 l
-1536.34 2801 l
-1536.34 2804.42 l
-1523.2 2805.32 1521 2807.84 1521 2820.62 c
-1521 2900.54 l
-1521 2913.32 1523.29 2915.66 1536.34 2916.74 c
-1536.34 2920 l
-1500.52 2920 l
-1460.74 2829.26 l
-1419.16 2920 l
-1383.52 2920 l
-1383.52 2917 l
-1398.28 2916.09 1401 2913.89 1401 2900.54 c
-1401 2827.46 l
-1401 2808.92 1398.43 2805.5 1383.16 2804.42 c
-1383.16 2801 l
-1425.46 2801 l
-1425.46 2804 l
-1411.6 2804.73 1409 2808.95 1409 2827.46 c
-1409 2900 l
-1453.72 2801 l
-1456.24 2801 l
-h
-1541.02 2801 m
-f*
-1620.56 2812.88 m
-1617.5 2810.36 1615.34 2809.2 1612.64 2809.2 c
-1608.5 2809.2 1607 2811.78 1607 2819.9 c
-1607 2855 l
-1607 2864.18 1606.16 2869.22 1603.82 2873.36 c
-1600.04 2880.2 1592.3 2883.8 1581.32 2883.8 c
-1572.14 2883.8 1563.5 2881.28 1558.46 2877.14 c
-1553.96 2873.36 1551 2868.14 1551 2863.64 c
-1551 2859.5 1554.46 2855.9 1558.82 2855.9 c
-1563.14 2855.9 1566.92 2859.5 1566.92 2863.46 c
-1566.92 2864.18 1566.74 2865.08 1566.56 2866.34 c
-1566.2 2867.96 1566 2869.4 1566 2870.66 c
-1566 2875.52 1571.77 2879.8 1578.98 2879.8 c
-1587.8 2879.8 1592 2874.47 1592 2864.54 c
-1592 2853.56 l
-1564.76 2842.4 1561.75 2840.96 1554.14 2834.12 c
-1550.18 2830.52 1547.66 2824.4 1547.66 2818.46 c
-1547.66 2807.12 1555.4 2799.2 1566.56 2799.2 c
-1574.48 2799.2 1581.86 2802.98 1592.84 2812.34 c
-1593.74 2802.8 1596.98 2799.2 1604.36 2799.2 c
-1610.48 2799.2 1614.26 2801.36 1620.56 2808.2 c
-h
-1592 2823.14 m
-1592 2817.56 1591.23 2815.94 1587.98 2813.6 c
-1583.66 2811.08 1578.62 2809.2 1574.84 2809.2 c
-1568.54 2809.2 1563.48 2815.51 1563.48 2823.5 c
-1563.48 2824.22 l
-1563.48 2834.84 1570.7 2841.32 1592 2849.24 c
-h
-1620.92 2801 m
-f*
-1622.62 2871.74 m
-1624.24 2871.92 1625.5 2871.92 1627.12 2871.92 c
-1633.24 2871.92 1635 2870.12 1635 2861.66 c
-1635 2777.42 l
-1635 2768.06 1632.94 2766.08 1621.9 2765 c
-1621.9 2762 l
-1665.46 2762 l
-1665.46 2765 l
-1651.96 2765.18 1650 2767.19 1650 2778.68 c
-1650 2806.94 l
-1656.34 2801 1660.4 2799.2 1667.8 2799.2 c
-1689.22 2799.2 1705 2819.36 1705 2845.46 c
-1705 2867.78 1692.65 2883.8 1675.54 2883.8 c
-1665.61 2883.8 1657.8 2879.48 1650 2869.58 c
-1650 2883.44 l
-1648.54 2883.8 l
-1639 2880.02 1632.52 2877.68 1622.62 2874.62 c
-h
-1650 2861.12 m
-1650 2866.52 1659.87 2872.8 1667.98 2872.8 c
-1681.3 2872.8 1690 2859.2 1690 2838.26 c
-1690 2818.46 1681.23 2804.2 1668.34 2804.2 c
-1659.88 2804.2 1650 2811.09 1650 2816.84 c
-h
-1711 2801 m
-f*
-1712.62 2871.74 m
-1714.24 2871.92 1715.5 2871.92 1717.12 2871.92 c
-1723.24 2871.92 1725 2870.12 1725 2861.66 c
-1725 2777.42 l
-1725 2768.06 1722.94 2766.08 1711.9 2765 c
-1711.9 2762 l
-1755.46 2762 l
-1755.46 2765 l
-1741.96 2765.18 1740 2767.19 1740 2778.68 c
-1740 2806.94 l
-1746.34 2801 1750.4 2799.2 1757.8 2799.2 c
-1779.22 2799.2 1795 2819.36 1795 2845.46 c
-1795 2867.78 1782.65 2883.8 1765.54 2883.8 c
-1755.61 2883.8 1747.8 2879.48 1740 2869.58 c
-1740 2883.44 l
-1738.54 2883.8 l
-1729 2880.02 1722.52 2877.68 1712.62 2874.62 c
-h
-1740 2861.12 m
-1740 2866.52 1749.87 2872.8 1757.98 2872.8 c
-1771.3 2872.8 1780 2859.2 1780 2838.26 c
-1780 2818.46 1771.23 2804.2 1758.34 2804.2 c
-1749.88 2804.2 1740 2811.09 1740 2816.84 c
-h
-1801 2801 m
-f*
-1832.5 2883.8 m
-1804.6 2873.9 l
-1804.6 2871.2 l
-1806.04 2871.38 l
-1808.2 2871.74 1810.54 2871.72 1812.16 2871.72 c
-1816.48 2871.72 1818 2868.89 1818 2861.12 c
-1818 2819.36 l
-1818 2806.4 1816.21 2804.42 1803.88 2803.7 c
-1803.88 2801 l
-1846.54 2801 l
-1846.54 2803.7 l
-1834.66 2804.6 1833 2806.4 1833 2819.36 c
-1833 2883.26 l
-h
-1824.22 2924 m
-1819.18 2924 1815 2919.83 1815 2914.76 c
-1815 2909.54 1818.98 2906 1824.04 2906 c
-1829.44 2906 1834 2909.78 1834 2914.76 c
-1834 2919.8 1829.59 2924 1824.22 2924 c
-h
-1851.04 2801 m
-f*
-1853.88 2872.64 m
-1855.14 2873.18 1856.76 2873.36 1858.74 2873.36 c
-1863.78 2873.36 1865 2870.66 1865 2861.84 c
-1865 2817.2 l
-1865 2806.94 1863.09 2804.42 1854.24 2803.7 c
-1854.24 2801 l
-1892.4 2801 l
-1892.4 2803.7 l
-1883.22 2804.42 1880 2806.58 1880 2813.06 c
-1880 2863.64 l
-1888.7 2871.74 1892.95 2873.8 1899.06 2873.8 c
-1907.88 2873.8 1912 2868.25 1912 2856.44 c
-1912 2818.82 l
-1912 2807.48 1909.7 2804.42 1900.86 2803.7 c
-1900.86 2801 l
-1938.3 2801 l
-1938.3 2803.7 l
-1929.48 2804.6 1927 2806.76 1927 2815.58 c
-1927 2856.8 l
-1927 2873.72 1919.2 2883.8 1906.08 2883.8 c
-1897.64 2883.8 1891.94 2880.74 1879.46 2869.22 c
-1879.46 2883.44 l
-1878.72 2883.8 l
-1869.9 2880.56 1863.78 2878.58 1853.88 2875.7 c
-h
-1941 2801 m
-f*
-2025.6 2871 m
-2025.6 2878 l
-2011.74 2878 l
-2008.14 2878 2005.44 2878.5 2001.84 2879.66 c
-1997.88 2881.1 l
-1993.02 2882.9 1988.16 2883.8 1983.48 2883.8 c
-1966.74 2883.8 1953.38 2870.84 1953.38 2854.46 c
-1953.38 2843.12 1958.07 2836.28 1970.16 2830.34 c
-1967.64 2827.82 1965.12 2825.48 1962.42 2823.14 c
-1956.48 2817.92 1954.1 2814.32 1954.1 2810.72 c
-1954.1 2806.76 1956.09 2804.78 1963.68 2801.18 c
-1950.72 2791.82 1946 2785.88 1946 2779.22 c
-1946 2769.68 1959.88 2762 1977.18 2762 c
-1990.14 2762 2003.82 2766.23 2013.18 2773.28 c
-2020.56 2779.04 2024 2784.98 2024 2792.18 c
-2024 2803.34 2015.53 2810.9 2002.2 2811.44 c
-1978.98 2812.52 l
-1969.26 2812.88 1964.94 2814.5 1964.94 2817.38 c
-1964.94 2820.98 1970.88 2827.28 1975.74 2828.72 c
-1979.16 2828.36 l
-1982.4 2828 1984.92 2828 1986 2828 c
-1992.3 2828 1999.32 2830.46 2004.72 2834.84 c
-2011.2 2839.88 2014 2846.36 2014 2855.72 c
-2014 2861 2013.12 2865.18 2010.66 2871 c
-h
-1967.46 2800.64 m
-1973.58 2799.38 1987.8 2798.3 1996.62 2798.3 c
-2013 2798.3 2019 2796.14 2019 2789.48 c
-2019 2779.04 2005.3 2772 1984.74 2772 c
-1968.9 2772 1959 2777.23 1959 2785.16 c
-1959 2789.3 1960.55 2792 1967.46 2800.64 c
-h
-1968.36 2861.84 m
-1968.36 2872.46 1973.4 2878.8 1981.68 2878.8 c
-1987.26 2878.8 1991.94 2875.73 1994.82 2870.3 c
-1998.24 2864 2000 2855.9 2000 2848.52 c
-2000 2838.62 1994.87 2833 1986.9 2833 c
-1975.74 2833 1968.36 2844.43 1968.36 2861.3 c
-h
-2031 2801 m
-f*
-2076 2801 m
-f*
-2203.08 2804.42 m
-2194.98 2804.96 2193.18 2806.76 2186.88 2820.08 c
-2142.06 2922.16 l
-2138.46 2922.16 l
-2101.02 2833.94 l
-2089.5 2807.66 2087.34 2804.96 2078.7 2804.42 c
-2078.7 2801 l
-2114.34 2801 l
-2114.34 2804.82 l
-2105.7 2804.82 2102.1 2807.03 2102.1 2811.8 c
-2102.1 2813.96 2102.64 2816.48 2103.54 2818.82 c
-2111.82 2840 l
-2158.98 2840 l
-2166.36 2822.6 l
-2168.52 2817.56 2169.78 2813.06 2169.78 2810.36 c
-2169.78 2808.74 2168.7 2806.76 2167.26 2806.04 c
-2165.1 2804.78 2163.66 2804.82 2157.18 2804.82 c
-2157.18 2801 l
-2203.08 2801 l
-h
-2114.88 2847 m
-2135.58 2896.76 l
-2156.46 2847 l
-h
-2205.96 2801 m
-f*
-2705.6 4382 m
-2703.98 4422.52 l
-2700.2 4422.52 l
-2699.12 4418.84 2696.24 4416.58 2692.82 4416.58 c
-2691.02 4416.58 2688.5 4417.17 2685.62 4418.36 c
-2676.8 4421.24 2667.98 4422.52 2659.16 4422.52 c
-2645.3 4422.52 2631.08 4417.36 2620.1 4408.46 c
-2606.42 4397.12 2599 4380.02 2599 4359.5 c
-2599 4322.96 2622.96 4298.48 2658.8 4298.48 c
-2679.14 4298.48 2696.96 4306.76 2707.94 4321.34 c
-2704.7 4324.58 l
-2691.38 4311.8 2679.5 4306.48 2664.56 4306.48 c
-2653.76 4306.48 2644.04 4309.69 2636.48 4315.94 c
-2625.86 4324.76 2620 4340.96 2620 4361.84 c
-2620 4394.42 2636.71 4415.52 2662.76 4415.52 c
-2673.2 4415.52 2682.38 4411.73 2689.58 4404.5 c
-2695.34 4398.74 2698.04 4393.7 2701.46 4382 c
-h
-2714.06 4301 m
-f*
-2717.14 4372.64 m
-2719.48 4373.18 2720.92 4373.36 2722.9 4373.36 c
-2727.58 4373.36 2729 4370.48 2729 4361.84 c
-2729 4316.3 l
-2729 4306.58 2726.52 4303.88 2716.6 4303.7 c
-2716.6 4301 l
-2756.56 4301 l
-2756.56 4304 l
-2747.02 4304.35 2744 4306.27 2744 4313.06 c
-2744 4363.82 l
-2744 4364.18 2745.23 4365.44 2746.66 4366.88 c
-2750.98 4371.2 2759.08 4374.8 2765.74 4374.8 c
-2773.48 4374.8 2778 4368.2 2778 4355.54 c
-2778 4316.48 l
-2778 4306.4 2775.93 4304.42 2765.2 4303.7 c
-2765.2 4301 l
-2805.52 4301 l
-2805.52 4304 l
-2795.26 4304.18 2793 4307.17 2793 4318.1 c
-2793 4363.46 l
-2798.28 4371.2 2803.91 4374.8 2812.18 4374.8 c
-2822.44 4374.8 2826 4369.85 2826 4354.64 c
-2826 4316.66 l
-2826 4306.4 2824.52 4304.96 2813.8 4303.7 c
-2813.8 4301 l
-2853.22 4301 l
-2853.22 4303.7 l
-2848.54 4304.06 l
-2843.14 4304.42 2841 4307.66 2841 4314.68 c
-2841 4351.76 l
-2841 4373 2833.91 4383.8 2819.92 4383.8 c
-2809.48 4383.8 2800.3 4379.12 2790.58 4368.68 c
-2787.34 4378.94 2781.22 4383.8 2771.5 4383.8 c
-2763.31 4383.8 2758.57 4381.46 2743.28 4369.94 c
-2743.28 4383.44 l
-2742.34 4383.8 l
-2733.16 4380.38 2727.04 4378.4 2717.14 4375.7 c
-h
-2854.04 4301 m
-f*
-2854.62 4371.74 m
-2856.24 4371.92 2857.5 4371.92 2859.12 4371.92 c
-2865.24 4371.92 2867 4370.12 2867 4361.66 c
-2867 4277.42 l
-2867 4268.06 2864.94 4266.08 2853.9 4265 c
-2853.9 4262 l
-2897.46 4262 l
-2897.46 4265 l
-2883.96 4265.18 2882 4267.19 2882 4278.68 c
-2882 4306.94 l
-2888.34 4301 2892.4 4299.2 2899.8 4299.2 c
-2921.22 4299.2 2937 4319.36 2937 4345.46 c
-2937 4367.78 2924.65 4383.8 2907.54 4383.8 c
-2897.61 4383.8 2889.8 4379.48 2882 4369.58 c
-2882 4383.44 l
-2880.54 4383.8 l
-2871 4380.02 2864.52 4377.68 2854.62 4374.62 c
-h
-2882 4361.12 m
-2882 4366.52 2891.87 4372.8 2899.98 4372.8 c
-2913.3 4372.8 2922 4359.2 2922 4338.26 c
-2922 4318.46 2913.23 4304.2 2900.34 4304.2 c
-2891.88 4304.2 2882 4311.09 2882 4316.84 c
-h
-2943 4301 m
-f*
-3064 4404.14 m
-3064 4322.6 l
-3064 4307.66 3061.88 4305.32 3047.94 4304.42 c
-3047.94 4301 l
-3098.34 4301 l
-3098.34 4304.42 l
-3085.2 4305.32 3083 4307.84 3083 4320.62 c
-3083 4400.54 l
-3083 4413.32 3085.29 4415.66 3098.34 4416.74 c
-3098.34 4420 l
-3062.52 4420 l
-3022.74 4329.26 l
-2981.16 4420 l
-2945.52 4420 l
-2945.52 4417 l
-2960.28 4416.09 2963 4413.89 2963 4400.54 c
-2963 4327.46 l
-2963 4308.92 2960.43 4305.5 2945.16 4304.42 c
-2945.16 4301 l
-2987.46 4301 l
-2987.46 4304 l
-2973.6 4304.73 2971 4308.95 2971 4327.46 c
-2971 4400 l
-3015.72 4301 l
-3018.24 4301 l
-h
-3103.02 4301 m
-f*
-3183.56 4312.88 m
-3180.5 4310.36 3178.34 4309.2 3175.64 4309.2 c
-3171.5 4309.2 3170 4311.78 3170 4319.9 c
-3170 4355 l
-3170 4364.18 3169.16 4369.22 3166.82 4373.36 c
-3163.04 4380.2 3155.3 4383.8 3144.32 4383.8 c
-3135.14 4383.8 3126.5 4381.28 3121.46 4377.14 c
-3116.96 4373.36 3114 4368.14 3114 4363.64 c
-3114 4359.5 3117.46 4355.9 3121.82 4355.9 c
-3126.14 4355.9 3129.92 4359.5 3129.92 4363.46 c
-3129.92 4364.18 3129.74 4365.08 3129.56 4366.34 c
-3129.2 4367.96 3129 4369.4 3129 4370.66 c
-3129 4375.52 3134.77 4379.8 3141.98 4379.8 c
-3150.8 4379.8 3155 4374.47 3155 4364.54 c
-3155 4353.56 l
-3127.76 4342.4 3124.75 4340.96 3117.14 4334.12 c
-3113.18 4330.52 3110.66 4324.4 3110.66 4318.46 c
-3110.66 4307.12 3118.4 4299.2 3129.56 4299.2 c
-3137.48 4299.2 3144.86 4302.98 3155.84 4312.34 c
-3156.74 4302.8 3159.98 4299.2 3167.36 4299.2 c
-3173.48 4299.2 3177.26 4301.36 3183.56 4308.2 c
-h
-3155 4323.14 m
-3155 4317.56 3154.23 4315.94 3150.98 4313.6 c
-3146.66 4311.08 3141.62 4309.2 3137.84 4309.2 c
-3131.54 4309.2 3126.48 4315.51 3126.48 4323.5 c
-3126.48 4324.22 l
-3126.48 4334.84 3133.7 4341.32 3155 4349.24 c
-h
-3183.92 4301 m
-f*
-3184.62 4371.74 m
-3186.24 4371.92 3187.5 4371.92 3189.12 4371.92 c
-3195.24 4371.92 3197 4370.12 3197 4361.66 c
-3197 4277.42 l
-3197 4268.06 3194.94 4266.08 3183.9 4265 c
-3183.9 4262 l
-3227.46 4262 l
-3227.46 4265 l
-3213.96 4265.18 3212 4267.19 3212 4278.68 c
-3212 4306.94 l
-3218.34 4301 3222.4 4299.2 3229.8 4299.2 c
-3251.22 4299.2 3267 4319.36 3267 4345.46 c
-3267 4367.78 3254.65 4383.8 3237.54 4383.8 c
-3227.61 4383.8 3219.8 4379.48 3212 4369.58 c
-3212 4383.44 l
-3210.54 4383.8 l
-3201 4380.02 3194.52 4377.68 3184.62 4374.62 c
-h
-3212 4361.12 m
-3212 4366.52 3221.87 4372.8 3229.98 4372.8 c
-3243.3 4372.8 3252 4359.2 3252 4338.26 c
-3252 4318.46 3243.23 4304.2 3230.34 4304.2 c
-3221.88 4304.2 3212 4311.09 3212 4316.84 c
-h
-3273 4301 m
-f*
-1 i
-423.35 3052.55 319.2 15.5999 re
-Y
-420.95 3060.95 m
-735.35 3060.95 l
-S
-0 0 6120 7920 re
-Y
-462.95 3062.15 m
-462.95 3083.75 444.95 3101.75 423.35 3101.75 c
-400.55 3101.75 382.55 3083.75 382.55 3062.15 c
-382.55 3040.55 400.55 3022.55 423.35 3022.55 c
-444.95 3022.55 462.95 3040.55 462.95 3062.15 c
-f*
-693.35 3012.95 m
-712.55 3060.95 l
-693.35 3108.95 l
-845.75 3060.95 l
-f*
-0.564706 g
-4493.75 3531.35 m
-4493.75 3602.15 4436.15 3660.95 4364.15 3660.95 c
-3242.15 3660.95 l
-3170.15 3660.95 3112.55 3602.15 3112.55 3531.35 c
-3112.55 2752.55 l
-3112.55 2680.55 3170.15 2622.95 3242.15 2622.95 c
-4364.15 2622.95 l
-4436.15 2622.95 4493.75 2680.55 4493.75 2752.55 c
-f*
-1 g
-4428.95 3586.55 m
-4428.95 3657.35 4372.55 3714.95 4300.55 3714.95 c
-3186.95 3714.95 l
-3116.15 3714.95 3058.55 3657.35 3058.55 3586.55 c
-3058.55 2814.95 l
-3058.55 2745.35 3116.15 2687.75 3186.95 2687.75 c
-4300.55 2687.75 l
-4371.35 2687.75 4428.95 2745.35 4428.95 2814.95 c
-f*
-0 g
-4428.95 3586.55 m
-4428.95 3657.35 4372.55 3714.95 4300.55 3714.95 c
-3186.95 3714.95 l
-3116.15 3714.95 3058.55 3657.35 3058.55 3586.55 c
-3058.55 2814.95 l
-3058.55 2745.35 3116.15 2687.75 3186.95 2687.75 c
-4300.55 2687.75 l
-4371.35 2687.75 4428.95 2745.35 4428.95 2814.95 c
-h
-S
-423.35 2632.55 319.2 15.5999 re
-Y
-420.95 2640.95 m
-735.35 2640.95 l
-S
-0 0 6120 7920 re
-Y
-462.95 2642.15 m
-462.95 2663.75 444.95 2681.75 423.35 2681.75 c
-400.55 2681.75 382.55 2663.75 382.55 2642.15 c
-382.55 2620.55 400.55 2602.55 423.35 2602.55 c
-444.95 2602.55 462.95 2620.55 462.95 2642.15 c
-f*
-693.35 2592.95 m
-712.55 2640.95 l
-693.35 2688.95 l
-845.75 2640.95 l
-f*
-2643.35 3232.55 308.4 103.2 re
-Y
-2643.35 3240.95 m
-2943.35 3328.55 l
-S
-0 0 6120 7920 re
-Y
-2682.95 3242.15 m
-2682.95 3263.75 2664.95 3281.75 2643.35 3281.75 c
-2620.55 3281.75 2602.55 3263.75 2602.55 3242.15 c
-2602.55 3220.55 2620.55 3202.55 2643.35 3202.55 c
-2664.95 3202.55 2682.95 3220.55 2682.95 3242.15 c
-f*
-2919.35 3272.15 m
-2925.35 3322.55 l
-2894.15 3362.15 l
-3053.75 3359.75 l
-f*
-2643.35 2812.55 320.4 190.8 re
-Y
-2643.35 2820.95 m
-2955.35 3003.35 l
-S
-0 0 6120 7920 re
-Y
-2682.95 2822.15 m
-2682.95 2843.75 2664.95 2861.75 2643.35 2861.75 c
-2620.55 2861.75 2602.55 2843.75 2602.55 2822.15 c
-2602.55 2800.55 2620.55 2782.55 2643.35 2782.55 c
-2664.95 2782.55 2682.95 2800.55 2682.95 2822.15 c
-f*
-2945.75 2942.15 m
-2937.35 2992.55 l
-2897.75 3024.95 l
-3053.75 3059.75 l
-f*
-0.2 i
-3427 3264.14 m
-3427 3182.6 l
-3427 3167.66 3424.88 3165.32 3410.94 3164.42 c
-3410.94 3161 l
-3461.34 3161 l
-3461.34 3164.42 l
-3448.2 3165.32 3446 3167.84 3446 3180.62 c
-3446 3260.54 l
-3446 3273.32 3448.29 3275.66 3461.34 3276.74 c
-3461.34 3280 l
-3425.52 3280 l
-3385.74 3189.26 l
-3344.16 3280 l
-3308.52 3280 l
-3308.52 3277 l
-3323.28 3276.09 3326 3273.89 3326 3260.54 c
-3326 3187.46 l
-3326 3168.92 3323.43 3165.5 3308.16 3164.42 c
-3308.16 3161 l
-3350.46 3161 l
-3350.46 3164 l
-3336.6 3164.73 3334 3168.95 3334 3187.46 c
-3334 3260 l
-3378.72 3161 l
-3381.24 3161 l
-h
-3466.02 3161 m
-f*
-3546.56 3172.88 m
-3543.5 3170.36 3541.34 3169.2 3538.64 3169.2 c
-3534.5 3169.2 3533 3171.78 3533 3179.9 c
-3533 3215 l
-3533 3224.18 3532.16 3229.22 3529.82 3233.36 c
-3526.04 3240.2 3518.3 3243.8 3507.32 3243.8 c
-3498.14 3243.8 3489.5 3241.28 3484.46 3237.14 c
-3479.96 3233.36 3477 3228.14 3477 3223.64 c
-3477 3219.5 3480.46 3215.9 3484.82 3215.9 c
-3489.14 3215.9 3492.92 3219.5 3492.92 3223.46 c
-3492.92 3224.18 3492.74 3225.08 3492.56 3226.34 c
-3492.2 3227.96 3492 3229.4 3492 3230.66 c
-3492 3235.52 3497.77 3239.8 3504.98 3239.8 c
-3513.8 3239.8 3518 3234.47 3518 3224.54 c
-3518 3213.56 l
-3490.76 3202.4 3487.75 3200.96 3480.14 3194.12 c
-3476.18 3190.52 3473.66 3184.4 3473.66 3178.46 c
-3473.66 3167.12 3481.4 3159.2 3492.56 3159.2 c
-3500.48 3159.2 3507.86 3162.98 3518.84 3172.34 c
-3519.74 3162.8 3522.98 3159.2 3530.36 3159.2 c
-3536.48 3159.2 3540.26 3161.36 3546.56 3168.2 c
-h
-3518 3183.14 m
-3518 3177.56 3517.23 3175.94 3513.98 3173.6 c
-3509.66 3171.08 3504.62 3169.2 3500.84 3169.2 c
-3494.54 3169.2 3489.48 3175.51 3489.48 3183.5 c
-3489.48 3184.22 l
-3489.48 3194.84 3496.7 3201.32 3518 3209.24 c
-h
-3546.92 3161 m
-f*
-3547.62 3231.74 m
-3549.24 3231.92 3550.5 3231.92 3552.12 3231.92 c
-3558.24 3231.92 3560 3230.12 3560 3221.66 c
-3560 3137.42 l
-3560 3128.06 3557.94 3126.08 3546.9 3125 c
-3546.9 3122 l
-3590.46 3122 l
-3590.46 3125 l
-3576.96 3125.18 3575 3127.19 3575 3138.68 c
-3575 3166.94 l
-3581.34 3161 3585.4 3159.2 3592.8 3159.2 c
-3614.22 3159.2 3630 3179.36 3630 3205.46 c
-3630 3227.78 3617.65 3243.8 3600.54 3243.8 c
-3590.61 3243.8 3582.8 3239.48 3575 3229.58 c
-3575 3243.44 l
-3573.54 3243.8 l
-3564 3240.02 3557.52 3237.68 3547.62 3234.62 c
-h
-3575 3221.12 m
-3575 3226.52 3584.87 3232.8 3592.98 3232.8 c
-3606.3 3232.8 3615 3219.2 3615 3198.26 c
-3615 3178.46 3606.23 3164.2 3593.34 3164.2 c
-3584.88 3164.2 3575 3171.09 3575 3176.84 c
-h
-3636 3161 m
-f*
-3637.62 3231.74 m
-3639.24 3231.92 3640.5 3231.92 3642.12 3231.92 c
-3648.24 3231.92 3650 3230.12 3650 3221.66 c
-3650 3137.42 l
-3650 3128.06 3647.94 3126.08 3636.9 3125 c
-3636.9 3122 l
-3680.46 3122 l
-3680.46 3125 l
-3666.96 3125.18 3665 3127.19 3665 3138.68 c
-3665 3166.94 l
-3671.34 3161 3675.4 3159.2 3682.8 3159.2 c
-3704.22 3159.2 3720 3179.36 3720 3205.46 c
-3720 3227.78 3707.65 3243.8 3690.54 3243.8 c
-3680.61 3243.8 3672.8 3239.48 3665 3229.58 c
-3665 3243.44 l
-3663.54 3243.8 l
-3654 3240.02 3647.52 3237.68 3637.62 3234.62 c
-h
-3665 3221.12 m
-3665 3226.52 3674.87 3232.8 3682.98 3232.8 c
-3696.3 3232.8 3705 3219.2 3705 3198.26 c
-3705 3178.46 3696.23 3164.2 3683.34 3164.2 c
-3674.88 3164.2 3665 3171.09 3665 3176.84 c
-h
-3726 3161 m
-f*
-3757.5 3243.8 m
-3729.6 3233.9 l
-3729.6 3231.2 l
-3731.04 3231.38 l
-3733.2 3231.74 3735.54 3231.72 3737.16 3231.72 c
-3741.48 3231.72 3743 3228.89 3743 3221.12 c
-3743 3179.36 l
-3743 3166.4 3741.21 3164.42 3728.88 3163.7 c
-3728.88 3161 l
-3771.54 3161 l
-3771.54 3163.7 l
-3759.66 3164.6 3758 3166.4 3758 3179.36 c
-3758 3243.26 l
-h
-3749.22 3284 m
-3744.18 3284 3740 3279.83 3740 3274.76 c
-3740 3269.54 3743.98 3266 3749.04 3266 c
-3754.44 3266 3759 3269.78 3759 3274.76 c
-3759 3279.8 3754.59 3284 3749.22 3284 c
-h
-3776.04 3161 m
-f*
-3778.88 3232.64 m
-3780.14 3233.18 3781.76 3233.36 3783.74 3233.36 c
-3788.78 3233.36 3790 3230.66 3790 3221.84 c
-3790 3177.2 l
-3790 3166.94 3788.09 3164.42 3779.24 3163.7 c
-3779.24 3161 l
-3817.4 3161 l
-3817.4 3163.7 l
-3808.22 3164.42 3805 3166.58 3805 3173.06 c
-3805 3223.64 l
-3813.7 3231.74 3817.95 3233.8 3824.06 3233.8 c
-3832.88 3233.8 3837 3228.25 3837 3216.44 c
-3837 3178.82 l
-3837 3167.48 3834.7 3164.42 3825.86 3163.7 c
-3825.86 3161 l
-3863.3 3161 l
-3863.3 3163.7 l
-3854.48 3164.6 3852 3166.76 3852 3175.58 c
-3852 3216.8 l
-3852 3233.72 3844.2 3243.8 3831.08 3243.8 c
-3822.64 3243.8 3816.94 3240.74 3804.46 3229.22 c
-3804.46 3243.44 l
-3803.72 3243.8 l
-3794.9 3240.56 3788.78 3238.58 3778.88 3235.7 c
-h
-3866 3161 m
-f*
-3950.6 3231 m
-3950.6 3238 l
-3936.74 3238 l
-3933.14 3238 3930.44 3238.5 3926.84 3239.66 c
-3922.88 3241.1 l
-3918.02 3242.9 3913.16 3243.8 3908.48 3243.8 c
-3891.74 3243.8 3878.38 3230.84 3878.38 3214.46 c
-3878.38 3203.12 3883.07 3196.28 3895.16 3190.34 c
-3892.64 3187.82 3890.12 3185.48 3887.42 3183.14 c
-3881.48 3177.92 3879.1 3174.32 3879.1 3170.72 c
-3879.1 3166.76 3881.09 3164.78 3888.68 3161.18 c
-3875.72 3151.82 3871 3145.88 3871 3139.22 c
-3871 3129.68 3884.88 3122 3902.18 3122 c
-3915.14 3122 3928.82 3126.23 3938.18 3133.28 c
-3945.56 3139.04 3949 3144.98 3949 3152.18 c
-3949 3163.34 3940.53 3170.9 3927.2 3171.44 c
-3903.98 3172.52 l
-3894.26 3172.88 3889.94 3174.5 3889.94 3177.38 c
-3889.94 3180.98 3895.88 3187.28 3900.74 3188.72 c
-3904.16 3188.36 l
-3907.4 3188 3909.92 3188 3911 3188 c
-3917.3 3188 3924.32 3190.46 3929.72 3194.84 c
-3936.2 3199.88 3939 3206.36 3939 3215.72 c
-3939 3221 3938.12 3225.18 3935.66 3231 c
-h
-3892.46 3160.64 m
-3898.58 3159.38 3912.8 3158.3 3921.62 3158.3 c
-3938 3158.3 3944 3156.14 3944 3149.48 c
-3944 3139.04 3930.3 3132 3909.74 3132 c
-3893.9 3132 3884 3137.23 3884 3145.16 c
-3884 3149.3 3885.55 3152 3892.46 3160.64 c
-h
-3893.36 3221.84 m
-3893.36 3232.46 3898.4 3238.8 3906.68 3238.8 c
-3912.26 3238.8 3916.94 3235.73 3919.82 3230.3 c
-3923.24 3224 3925 3215.9 3925 3208.52 c
-3925 3198.62 3919.87 3193 3911.9 3193 c
-3900.74 3193 3893.36 3204.43 3893.36 3221.3 c
-h
-3956 3161 m
-f*
-4001 3161 m
-f*
-4004.06 3280 m
-4004.06 3277 l
-4019.18 3276.09 4021 3274.07 4021 3260.54 c
-4021 3180.62 l
-4021 3167.3 4018.71 3164.96 4004.06 3164.42 c
-4004.06 3161 l
-4064.18 3161 l
-4091 3161 4108 3173.42 4108 3193.4 c
-4108 3201.32 4104.85 3208.52 4098.92 3213.74 c
-4093.52 3218.6 4088.66 3220.94 4076.96 3223.64 c
-4086.32 3225.98 4090.1 3227.78 4094.42 3231.56 c
-4098.92 3235.52 4102 3242.18 4102 3249.56 c
-4102 3269.72 4085.85 3280 4054.46 3280 c
-h
-4040 3219.68 m
-4056.94 3219.68 4064.78 3218.78 4071.56 3216.26 c
-4082 3212.12 4087 3204.74 4087 3193.22 c
-4087 3183.5 4083.23 3176.48 4076.06 3172.34 c
-4070.3 3168.92 4063.1 3168 4050.5 3168 c
-4042.22 3168 4040 3169.55 4040 3175.04 c
-h
-4040 3226.88 m
-4040 3268.1 l
-4040 3271.88 4041.16 3273 4043.66 3273 c
-4051.58 3273 l
-4072.28 3273 4083 3264.71 4083 3248.84 c
-4083 3234.8 4073.55 3226.88 4056.8 3226.88 c
-h
-4121.06 3161 m
-f*
-3487 2064.14 m
-3487 1982.6 l
-3487 1967.66 3484.88 1965.32 3470.94 1964.42 c
-3470.94 1961 l
-3521.34 1961 l
-3521.34 1964.42 l
-3508.2 1965.32 3506 1967.84 3506 1980.62 c
-3506 2060.54 l
-3506 2073.32 3508.29 2075.66 3521.34 2076.74 c
-3521.34 2080 l
-3485.52 2080 l
-3445.74 1989.26 l
-3404.16 2080 l
-3368.52 2080 l
-3368.52 2077 l
-3383.28 2076.09 3386 2073.89 3386 2060.54 c
-3386 1987.46 l
-3386 1968.92 3383.43 1965.5 3368.16 1964.42 c
-3368.16 1961 l
-3410.46 1961 l
-3410.46 1964 l
-3396.6 1964.73 3394 1968.95 3394 1987.46 c
-3394 2060 l
-3438.72 1961 l
-3441.24 1961 l
-h
-3526.02 1961 m
-f*
-3606.56 1972.88 m
-3603.5 1970.36 3601.34 1969.2 3598.64 1969.2 c
-3594.5 1969.2 3593 1971.78 3593 1979.9 c
-3593 2015 l
-3593 2024.18 3592.16 2029.22 3589.82 2033.36 c
-3586.04 2040.2 3578.3 2043.8 3567.32 2043.8 c
-3558.14 2043.8 3549.5 2041.28 3544.46 2037.14 c
-3539.96 2033.36 3537 2028.14 3537 2023.64 c
-3537 2019.5 3540.46 2015.9 3544.82 2015.9 c
-3549.14 2015.9 3552.92 2019.5 3552.92 2023.46 c
-3552.92 2024.18 3552.74 2025.08 3552.56 2026.34 c
-3552.2 2027.96 3552 2029.4 3552 2030.66 c
-3552 2035.52 3557.77 2039.8 3564.98 2039.8 c
-3573.8 2039.8 3578 2034.47 3578 2024.54 c
-3578 2013.56 l
-3550.76 2002.4 3547.75 2000.96 3540.14 1994.12 c
-3536.18 1990.52 3533.66 1984.4 3533.66 1978.46 c
-3533.66 1967.12 3541.4 1959.2 3552.56 1959.2 c
-3560.48 1959.2 3567.86 1962.98 3578.84 1972.34 c
-3579.74 1962.8 3582.98 1959.2 3590.36 1959.2 c
-3596.48 1959.2 3600.26 1961.36 3606.56 1968.2 c
-h
-3578 1983.14 m
-3578 1977.56 3577.23 1975.94 3573.98 1973.6 c
-3569.66 1971.08 3564.62 1969.2 3560.84 1969.2 c
-3554.54 1969.2 3549.48 1975.51 3549.48 1983.5 c
-3549.48 1984.22 l
-3549.48 1994.84 3556.7 2001.32 3578 2009.24 c
-h
-3606.92 1961 m
-f*
-3607.62 2031.74 m
-3609.24 2031.92 3610.5 2031.92 3612.12 2031.92 c
-3618.24 2031.92 3620 2030.12 3620 2021.66 c
-3620 1937.42 l
-3620 1928.06 3617.94 1926.08 3606.9 1925 c
-3606.9 1922 l
-3650.46 1922 l
-3650.46 1925 l
-3636.96 1925.18 3635 1927.19 3635 1938.68 c
-3635 1966.94 l
-3641.34 1961 3645.4 1959.2 3652.8 1959.2 c
-3674.22 1959.2 3690 1979.36 3690 2005.46 c
-3690 2027.78 3677.65 2043.8 3660.54 2043.8 c
-3650.61 2043.8 3642.8 2039.48 3635 2029.58 c
-3635 2043.44 l
-3633.54 2043.8 l
-3624 2040.02 3617.52 2037.68 3607.62 2034.62 c
-h
-3635 2021.12 m
-3635 2026.52 3644.87 2032.8 3652.98 2032.8 c
-3666.3 2032.8 3675 2019.2 3675 1998.26 c
-3675 1978.46 3666.23 1964.2 3653.34 1964.2 c
-3644.88 1964.2 3635 1971.09 3635 1976.84 c
-h
-3696 1961 m
-f*
-3697.62 2031.74 m
-3699.24 2031.92 3700.5 2031.92 3702.12 2031.92 c
-3708.24 2031.92 3710 2030.12 3710 2021.66 c
-3710 1937.42 l
-3710 1928.06 3707.94 1926.08 3696.9 1925 c
-3696.9 1922 l
-3740.46 1922 l
-3740.46 1925 l
-3726.96 1925.18 3725 1927.19 3725 1938.68 c
-3725 1966.94 l
-3731.34 1961 3735.4 1959.2 3742.8 1959.2 c
-3764.22 1959.2 3780 1979.36 3780 2005.46 c
-3780 2027.78 3767.65 2043.8 3750.54 2043.8 c
-3740.61 2043.8 3732.8 2039.48 3725 2029.58 c
-3725 2043.44 l
-3723.54 2043.8 l
-3714 2040.02 3707.52 2037.68 3697.62 2034.62 c
-h
-3725 2021.12 m
-3725 2026.52 3734.87 2032.8 3742.98 2032.8 c
-3756.3 2032.8 3765 2019.2 3765 1998.26 c
-3765 1978.46 3756.23 1964.2 3743.34 1964.2 c
-3734.88 1964.2 3725 1971.09 3725 1976.84 c
-h
-3786 1961 m
-f*
-3817.5 2043.8 m
-3789.6 2033.9 l
-3789.6 2031.2 l
-3791.04 2031.38 l
-3793.2 2031.74 3795.54 2031.72 3797.16 2031.72 c
-3801.48 2031.72 3803 2028.89 3803 2021.12 c
-3803 1979.36 l
-3803 1966.4 3801.21 1964.42 3788.88 1963.7 c
-3788.88 1961 l
-3831.54 1961 l
-3831.54 1963.7 l
-3819.66 1964.6 3818 1966.4 3818 1979.36 c
-3818 2043.26 l
-h
-3809.22 2084 m
-3804.18 2084 3800 2079.83 3800 2074.76 c
-3800 2069.54 3803.98 2066 3809.04 2066 c
-3814.44 2066 3819 2069.78 3819 2074.76 c
-3819 2079.8 3814.59 2084 3809.22 2084 c
-h
-3836.04 1961 m
-f*
-3838.88 2032.64 m
-3840.14 2033.18 3841.76 2033.36 3843.74 2033.36 c
-3848.78 2033.36 3850 2030.66 3850 2021.84 c
-3850 1977.2 l
-3850 1966.94 3848.09 1964.42 3839.24 1963.7 c
-3839.24 1961 l
-3877.4 1961 l
-3877.4 1963.7 l
-3868.22 1964.42 3865 1966.58 3865 1973.06 c
-3865 2023.64 l
-3873.7 2031.74 3877.95 2033.8 3884.06 2033.8 c
-3892.88 2033.8 3897 2028.25 3897 2016.44 c
-3897 1978.82 l
-3897 1967.48 3894.7 1964.42 3885.86 1963.7 c
-3885.86 1961 l
-3923.3 1961 l
-3923.3 1963.7 l
-3914.48 1964.6 3912 1966.76 3912 1975.58 c
-3912 2016.8 l
-3912 2033.72 3904.2 2043.8 3891.08 2043.8 c
-3882.64 2043.8 3876.94 2040.74 3864.46 2029.22 c
-3864.46 2043.44 l
-3863.72 2043.8 l
-3854.9 2040.56 3848.78 2038.58 3838.88 2035.7 c
-h
-3926 1961 m
-f*
-4010.6 2031 m
-4010.6 2038 l
-3996.74 2038 l
-3993.14 2038 3990.44 2038.5 3986.84 2039.66 c
-3982.88 2041.1 l
-3978.02 2042.9 3973.16 2043.8 3968.48 2043.8 c
-3951.74 2043.8 3938.38 2030.84 3938.38 2014.46 c
-3938.38 2003.12 3943.07 1996.28 3955.16 1990.34 c
-3952.64 1987.82 3950.12 1985.48 3947.42 1983.14 c
-3941.48 1977.92 3939.1 1974.32 3939.1 1970.72 c
-3939.1 1966.76 3941.09 1964.78 3948.68 1961.18 c
-3935.72 1951.82 3931 1945.88 3931 1939.22 c
-3931 1929.68 3944.88 1922 3962.18 1922 c
-3975.14 1922 3988.82 1926.23 3998.18 1933.28 c
-4005.56 1939.04 4009 1944.98 4009 1952.18 c
-4009 1963.34 4000.53 1970.9 3987.2 1971.44 c
-3963.98 1972.52 l
-3954.26 1972.88 3949.94 1974.5 3949.94 1977.38 c
-3949.94 1980.98 3955.88 1987.28 3960.74 1988.72 c
-3964.16 1988.36 l
-3967.4 1988 3969.92 1988 3971 1988 c
-3977.3 1988 3984.32 1990.46 3989.72 1994.84 c
-3996.2 1999.88 3999 2006.36 3999 2015.72 c
-3999 2021 3998.12 2025.18 3995.66 2031 c
-h
-3952.46 1960.64 m
-3958.58 1959.38 3972.8 1958.3 3981.62 1958.3 c
-3998 1958.3 4004 1956.14 4004 1949.48 c
-4004 1939.04 3990.3 1932 3969.74 1932 c
-3953.9 1932 3944 1937.23 3944 1945.16 c
-3944 1949.3 3945.55 1952 3952.46 1960.64 c
-h
-3953.36 2021.84 m
-3953.36 2032.46 3958.4 2038.8 3966.68 2038.8 c
-3972.26 2038.8 3976.94 2035.73 3979.82 2030.3 c
-3983.24 2024 3985 2015.9 3985 2008.52 c
-3985 1998.62 3979.87 1993 3971.9 1993 c
-3960.74 1993 3953.36 2004.43 3953.36 2021.3 c
-h
-4016 1961 m
-f*
-4061 1961 m
-f*
-4172.6 2042 m
-4170.98 2082.52 l
-4167.2 2082.52 l
-4166.12 2078.84 4163.24 2076.58 4159.82 2076.58 c
-4158.02 2076.58 4155.5 2077.17 4152.62 2078.36 c
-4143.8 2081.24 4134.98 2082.52 4126.16 2082.52 c
-4112.3 2082.52 4098.08 2077.36 4087.1 2068.46 c
-4073.42 2057.12 4066 2040.02 4066 2019.5 c
-4066 1982.96 4089.96 1958.48 4125.8 1958.48 c
-4146.14 1958.48 4163.96 1966.76 4174.94 1981.34 c
-4171.7 1984.58 l
-4158.38 1971.8 4146.5 1966.48 4131.56 1966.48 c
-4120.76 1966.48 4111.04 1969.69 4103.48 1975.94 c
-4092.86 1984.76 4087 2000.96 4087 2021.84 c
-4087 2054.42 4103.71 2075.52 4129.76 2075.52 c
-4140.2 2075.52 4149.38 2071.73 4156.58 2064.5 c
-4162.34 2058.74 4165.04 2053.7 4168.46 2042 c
-h
-4181.06 1961 m
-f*
-3485.6 3962 m
-3483.98 4002.52 l
-3480.2 4002.52 l
-3479.12 3998.84 3476.24 3996.58 3472.82 3996.58 c
-3471.02 3996.58 3468.5 3997.17 3465.62 3998.36 c
-3456.8 4001.24 3447.98 4002.52 3439.16 4002.52 c
-3425.3 4002.52 3411.08 3997.36 3400.1 3988.46 c
-3386.42 3977.12 3379 3960.02 3379 3939.5 c
-3379 3902.96 3402.96 3878.48 3438.8 3878.48 c
-3459.14 3878.48 3476.96 3886.76 3487.94 3901.34 c
-3484.7 3904.58 l
-3471.38 3891.8 3459.5 3886.48 3444.56 3886.48 c
-3433.76 3886.48 3424.04 3889.69 3416.48 3895.94 c
-3405.86 3904.76 3400 3920.96 3400 3941.84 c
-3400 3974.42 3416.71 3995.52 3442.76 3995.52 c
-3453.2 3995.52 3462.38 3991.73 3469.58 3984.5 c
-3475.34 3978.74 3478.04 3973.7 3481.46 3962 c
-h
-3494.06 3881 m
-f*
-3497.14 3952.64 m
-3499.48 3953.18 3500.92 3953.36 3502.9 3953.36 c
-3507.58 3953.36 3509 3950.48 3509 3941.84 c
-3509 3896.3 l
-3509 3886.58 3506.52 3883.88 3496.6 3883.7 c
-3496.6 3881 l
-3536.56 3881 l
-3536.56 3884 l
-3527.02 3884.35 3524 3886.27 3524 3893.06 c
-3524 3943.82 l
-3524 3944.18 3525.23 3945.44 3526.66 3946.88 c
-3530.98 3951.2 3539.08 3954.8 3545.74 3954.8 c
-3553.48 3954.8 3558 3948.2 3558 3935.54 c
-3558 3896.48 l
-3558 3886.4 3555.93 3884.42 3545.2 3883.7 c
-3545.2 3881 l
-3585.52 3881 l
-3585.52 3884 l
-3575.26 3884.18 3573 3887.17 3573 3898.1 c
-3573 3943.46 l
-3578.28 3951.2 3583.91 3954.8 3592.18 3954.8 c
-3602.44 3954.8 3606 3949.85 3606 3934.64 c
-3606 3896.66 l
-3606 3886.4 3604.52 3884.96 3593.8 3883.7 c
-3593.8 3881 l
-3633.22 3881 l
-3633.22 3883.7 l
-3628.54 3884.06 l
-3623.14 3884.42 3621 3887.66 3621 3894.68 c
-3621 3931.76 l
-3621 3953 3613.91 3963.8 3599.92 3963.8 c
-3589.48 3963.8 3580.3 3959.12 3570.58 3948.68 c
-3567.34 3958.94 3561.22 3963.8 3551.5 3963.8 c
-3543.31 3963.8 3538.57 3961.46 3523.28 3949.94 c
-3523.28 3963.44 l
-3522.34 3963.8 l
-3513.16 3960.38 3507.04 3958.4 3497.14 3955.7 c
-h
-3634.04 3881 m
-f*
-3634.62 3951.74 m
-3636.24 3951.92 3637.5 3951.92 3639.12 3951.92 c
-3645.24 3951.92 3647 3950.12 3647 3941.66 c
-3647 3857.42 l
-3647 3848.06 3644.94 3846.08 3633.9 3845 c
-3633.9 3842 l
-3677.46 3842 l
-3677.46 3845 l
-3663.96 3845.18 3662 3847.19 3662 3858.68 c
-3662 3886.94 l
-3668.34 3881 3672.4 3879.2 3679.8 3879.2 c
-3701.22 3879.2 3717 3899.36 3717 3925.46 c
-3717 3947.78 3704.65 3963.8 3687.54 3963.8 c
-3677.61 3963.8 3669.8 3959.48 3662 3949.58 c
-3662 3963.44 l
-3660.54 3963.8 l
-3651 3960.02 3644.52 3957.68 3634.62 3954.62 c
-h
-3662 3941.12 m
-3662 3946.52 3671.87 3952.8 3679.98 3952.8 c
-3693.3 3952.8 3702 3939.2 3702 3918.26 c
-3702 3898.46 3693.23 3884.2 3680.34 3884.2 c
-3671.88 3884.2 3662 3891.09 3662 3896.84 c
-h
-3723 3881 m
-f*
-3844 3984.14 m
-3844 3902.6 l
-3844 3887.66 3841.88 3885.32 3827.94 3884.42 c
-3827.94 3881 l
-3878.34 3881 l
-3878.34 3884.42 l
-3865.2 3885.32 3863 3887.84 3863 3900.62 c
-3863 3980.54 l
-3863 3993.32 3865.29 3995.66 3878.34 3996.74 c
-3878.34 4000 l
-3842.52 4000 l
-3802.74 3909.26 l
-3761.16 4000 l
-3725.52 4000 l
-3725.52 3997 l
-3740.28 3996.09 3743 3993.89 3743 3980.54 c
-3743 3907.46 l
-3743 3888.92 3740.43 3885.5 3725.16 3884.42 c
-3725.16 3881 l
-3767.46 3881 l
-3767.46 3884 l
-3753.6 3884.73 3751 3888.95 3751 3907.46 c
-3751 3980 l
-3795.72 3881 l
-3798.24 3881 l
-h
-3883.02 3881 m
-f*
-3963.56 3892.88 m
-3960.5 3890.36 3958.34 3889.2 3955.64 3889.2 c
-3951.5 3889.2 3950 3891.78 3950 3899.9 c
-3950 3935 l
-3950 3944.18 3949.16 3949.22 3946.82 3953.36 c
-3943.04 3960.2 3935.3 3963.8 3924.32 3963.8 c
-3915.14 3963.8 3906.5 3961.28 3901.46 3957.14 c
-3896.96 3953.36 3894 3948.14 3894 3943.64 c
-3894 3939.5 3897.46 3935.9 3901.82 3935.9 c
-3906.14 3935.9 3909.92 3939.5 3909.92 3943.46 c
-3909.92 3944.18 3909.74 3945.08 3909.56 3946.34 c
-3909.2 3947.96 3909 3949.4 3909 3950.66 c
-3909 3955.52 3914.77 3959.8 3921.98 3959.8 c
-3930.8 3959.8 3935 3954.47 3935 3944.54 c
-3935 3933.56 l
-3907.76 3922.4 3904.75 3920.96 3897.14 3914.12 c
-3893.18 3910.52 3890.66 3904.4 3890.66 3898.46 c
-3890.66 3887.12 3898.4 3879.2 3909.56 3879.2 c
-3917.48 3879.2 3924.86 3882.98 3935.84 3892.34 c
-3936.74 3882.8 3939.98 3879.2 3947.36 3879.2 c
-3953.48 3879.2 3957.26 3881.36 3963.56 3888.2 c
-h
-3935 3903.14 m
-3935 3897.56 3934.23 3895.94 3930.98 3893.6 c
-3926.66 3891.08 3921.62 3889.2 3917.84 3889.2 c
-3911.54 3889.2 3906.48 3895.51 3906.48 3903.5 c
-3906.48 3904.22 l
-3906.48 3914.84 3913.7 3921.32 3935 3929.24 c
-h
-3963.92 3881 m
-f*
-3964.62 3951.74 m
-3966.24 3951.92 3967.5 3951.92 3969.12 3951.92 c
-3975.24 3951.92 3977 3950.12 3977 3941.66 c
-3977 3857.42 l
-3977 3848.06 3974.94 3846.08 3963.9 3845 c
-3963.9 3842 l
-4007.46 3842 l
-4007.46 3845 l
-3993.96 3845.18 3992 3847.19 3992 3858.68 c
-3992 3886.94 l
-3998.34 3881 4002.4 3879.2 4009.8 3879.2 c
-4031.22 3879.2 4047 3899.36 4047 3925.46 c
-4047 3947.78 4034.65 3963.8 4017.54 3963.8 c
-4007.61 3963.8 3999.8 3959.48 3992 3949.58 c
-3992 3963.44 l
-3990.54 3963.8 l
-3981 3960.02 3974.52 3957.68 3964.62 3954.62 c
-h
-3992 3941.12 m
-3992 3946.52 4001.87 3952.8 4009.98 3952.8 c
-4023.3 3952.8 4032 3939.2 4032 3918.26 c
-4032 3898.46 4023.23 3884.2 4010.34 3884.2 c
-4001.88 3884.2 3992 3891.09 3992 3896.84 c
-h
-4053 3881 m
-f*
-1 i
-4433.75 3262.55 330 104.4 re
-Y
-4433.75 3359.75 m
-4755.35 3270.95 l
-S
-0 0 6120 7920 re
-Y
-4472.15 3360.95 m
-4472.15 3382.55 4454.15 3400.55 4432.55 3400.55 c
-4410.95 3400.55 4392.95 3382.55 4392.95 3360.95 c
-4392.95 3339.35 4410.95 3321.35 4432.55 3321.35 c
-4454.15 3321.35 4472.15 3339.35 4472.15 3360.95 c
-f*
-4706.15 3234.95 m
-4737.35 3275.75 l
-4731.35 3327.35 l
-4865.75 3240.95 l
-f*
-4433.75 2868.95 339.6 190.8 re
-Y
-4433.75 3059.75 m
-4764.95 2877.35 l
-S
-0 0 6120 7920 re
-Y
-4472.15 3060.95 m
-4472.15 3082.55 4454.15 3100.55 4432.55 3100.55 c
-4410.95 3100.55 4392.95 3082.55 4392.95 3060.95 c
-4392.95 3039.35 4410.95 3021.35 4432.55 3021.35 c
-4454.15 3021.35 4472.15 3039.35 4472.15 3060.95 c
-f*
-4709.75 2853.35 m
-4748.15 2885.75 l
-4756.55 2936.15 l
-4865.75 2820.95 l
-f*
-2633.75 2105.75 342 294 re
-Y
-2633.75 2399.75 m
-2967.35 2114.15 l
-S
-0 0 6120 7920 re
-Y
-2672.15 2400.95 m
-2672.15 2422.55 2654.15 2440.55 2632.55 2440.55 c
-2610.95 2440.55 2592.95 2422.55 2592.95 2400.95 c
-2592.95 2379.35 2610.95 2361.35 2632.55 2361.35 c
-2654.15 2361.35 2672.15 2379.35 2672.15 2400.95 c
-f*
-2907.35 2103.35 m
-2951.75 2127.35 l
-2968.55 2174.15 l
-3053.75 2039.75 l
-f*
-4433.75 2031.35 342 295.2 re
-Y
-4433.75 2039.75 m
-4767.35 2326.55 l
-S
-0 0 6120 7920 re
-Y
-4472.15 2040.95 m
-4472.15 2062.55 4454.15 2080.55 4432.55 2080.55 c
-4410.95 2080.55 4392.95 2062.55 4392.95 2040.95 c
-4392.95 2019.35 4410.95 2001.35 4432.55 2001.35 c
-4454.15 2001.35 4472.15 2019.35 4472.15 2040.95 c
-f*
-4768.55 2264.15 m
-4751.75 2312.15 l
-4707.35 2336.15 l
-4853.75 2399.75 l
-f*
-4863.35 3232.55 319.2 15.5999 re
-Y
-4860.95 3240.95 m
-5175.35 3240.95 l
-S
-0 0 6120 7920 re
-Y
-4902.95 3242.15 m
-4902.95 3263.75 4884.95 3281.75 4863.35 3281.75 c
-4840.55 3281.75 4822.55 3263.75 4822.55 3242.15 c
-4822.55 3220.55 4840.55 3202.55 4863.35 3202.55 c
-4884.95 3202.55 4902.95 3220.55 4902.95 3242.15 c
-f*
-5133.35 3192.95 m
-5152.55 3240.95 l
-5133.35 3288.95 l
-5285.75 3240.95 l
-f*
-4863.35 2812.55 319.2 15.5999 re
-Y
-4860.95 2820.95 m
-5175.35 2820.95 l
-S
-0 0 6120 7920 re
-Y
-4902.95 2822.15 m
-4902.95 2843.75 4884.95 2861.75 4863.35 2861.75 c
-4840.55 2861.75 4822.55 2843.75 4822.55 2822.15 c
-4822.55 2800.55 4840.55 2782.55 4863.35 2782.55 c
-4884.95 2782.55 4902.95 2800.55 4902.95 2822.15 c
-f*
-5133.35 2772.95 m
-5152.55 2820.95 l
-5133.35 2868.95 l
-5285.75 2820.95 l
-f*
-4863.35 2392.55 319.2 15.5999 re
-Y
-4860.95 2400.95 m
-5175.35 2400.95 l
-S
-0 0 6120 7920 re
-Y
-4902.95 2402.15 m
-4902.95 2423.75 4884.95 2441.75 4863.35 2441.75 c
-4840.55 2441.75 4822.55 2423.75 4822.55 2402.15 c
-4822.55 2380.55 4840.55 2362.55 4863.35 2362.55 c
-4884.95 2362.55 4902.95 2380.55 4902.95 2402.15 c
-f*
-5133.35 2352.95 m
-5152.55 2400.95 l
-5133.35 2448.95 l
-5285.75 2400.95 l
-f*
-2333.75 3231.35 206.4 16.7996 re
-Y
-2333.75 3239.75 m
-2531.75 3240.95 l
-S
-0 0 6120 7920 re
-Y
-2372.15 3240.95 m
-2372.15 3262.55 2354.15 3280.55 2332.55 3280.55 c
-2310.95 3280.55 2292.95 3262.55 2292.95 3240.95 c
-2292.95 3219.35 2310.95 3201.35 2332.55 3201.35 c
-2354.15 3201.35 2372.15 3219.35 2372.15 3240.95 c
-f*
-2493.35 3192.95 m
-2512.55 3240.95 l
-2493.35 3288.95 l
-2645.75 3240.95 l
-f*
-2333.75 2811.35 206.4 16.7996 re
-Y
-2333.75 2819.75 m
-2531.75 2820.95 l
-S
-0 0 6120 7920 re
-Y
-2372.15 2820.95 m
-2372.15 2842.55 2354.15 2860.55 2332.55 2860.55 c
-2310.95 2860.55 2292.95 2842.55 2292.95 2820.95 c
-2292.95 2799.35 2310.95 2781.35 2332.55 2781.35 c
-2354.15 2781.35 2372.15 2799.35 2372.15 2820.95 c
-f*
-2493.35 2772.95 m
-2512.55 2820.95 l
-2493.35 2868.95 l
-2645.75 2820.95 l
-f*
-2333.75 2391.35 206.4 16.7996 re
-Y
-2333.75 2399.75 m
-2531.75 2400.95 l
-S
-0 0 6120 7920 re
-Y
-2372.15 2400.95 m
-2372.15 2422.55 2354.15 2440.55 2332.55 2440.55 c
-2310.95 2440.55 2292.95 2422.55 2292.95 2400.95 c
-2292.95 2379.35 2310.95 2361.35 2332.55 2361.35 c
-2354.15 2361.35 2372.15 2379.35 2372.15 2400.95 c
-f*
-2493.35 2352.95 m
-2512.55 2400.95 l
-2493.35 2448.95 l
-2645.75 2400.95 l
-f*
-5283.35 3232.55 319.2 15.5999 re
-Y
-5280.95 3240.95 m
-5595.35 3240.95 l
-S
-0 0 6120 7920 re
-Y
-5322.95 3242.15 m
-5322.95 3263.75 5304.95 3281.75 5283.35 3281.75 c
-5260.55 3281.75 5242.55 3263.75 5242.55 3242.15 c
-5242.55 3220.55 5260.55 3202.55 5283.35 3202.55 c
-5304.95 3202.55 5322.95 3220.55 5322.95 3242.15 c
-f*
-5553.35 3192.95 m
-5572.55 3240.95 l
-5553.35 3288.95 l
-5705.75 3240.95 l
-f*
-5283.35 2812.55 319.2 15.5999 re
-Y
-5280.95 2820.95 m
-5595.35 2820.95 l
-S
-0 0 6120 7920 re
-Y
-5322.95 2822.15 m
-5322.95 2843.75 5304.95 2861.75 5283.35 2861.75 c
-5260.55 2861.75 5242.55 2843.75 5242.55 2822.15 c
-5242.55 2800.55 5260.55 2782.55 5283.35 2782.55 c
-5304.95 2782.55 5322.95 2800.55 5322.95 2822.15 c
-f*
-5553.35 2772.95 m
-5572.55 2820.95 l
-5553.35 2868.95 l
-5705.75 2820.95 l
-f*
-5283.35 2392.55 319.2 15.5999 re
-Y
-5280.95 2400.95 m
-5595.35 2400.95 l
-S
-0 0 6120 7920 re
-Y
-5322.95 2402.15 m
-5322.95 2423.75 5304.95 2441.75 5283.35 2441.75 c
-5260.55 2441.75 5242.55 2423.75 5242.55 2402.15 c
-5242.55 2380.55 5260.55 2362.55 5283.35 2362.55 c
-5304.95 2362.55 5322.95 2380.55 5322.95 2402.15 c
-f*
-5553.35 2352.95 m
-5572.55 2400.95 l
-5553.35 2448.95 l
-5705.75 2400.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/frames.eps b/ast-5.3-1/sun210_figures/frames.eps
deleted file mode 100644
index a9ae19f..0000000
--- a/ast-5.3-1/sun210_figures/frames.eps
+++ /dev/null
@@ -1,1095 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 141 322 422 581
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:50:26
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-2266.55 5424.95 m
-2266.55 5477.75 2223.35 5522.15 2169.35 5522.15 c
-1582.55 5522.15 l
-1529.75 5522.15 1485.35 5477.75 1485.35 5424.95 c
-1485.35 4778.15 l
-1485.35 4725.35 1529.75 4680.95 1582.55 4680.95 c
-2169.35 4680.95 l
-2223.35 4680.95 2266.55 4725.35 2266.55 4778.15 c
-f*
-1 g
-2201.75 5480.15 m
-2201.75 5532.95 2159.75 5576.15 2105.75 5576.15 c
-1527.35 5576.15 l
-1474.55 5576.15 1431.35 5532.95 1431.35 5480.15 c
-1431.35 4841.75 l
-1431.35 4788.95 1474.55 4745.75 1527.35 4745.75 c
-2105.75 4745.75 l
-2158.55 4745.75 2201.75 4788.95 2201.75 4841.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-2201.75 5480.15 m
-2201.75 5532.95 2159.75 5576.15 2105.75 5576.15 c
-1527.35 5576.15 l
-1474.55 5576.15 1431.35 5532.95 1431.35 5480.15 c
-1431.35 4841.75 l
-1431.35 4788.95 1474.55 4745.75 1527.35 4745.75 c
-2105.75 4745.75 l
-2158.55 4745.75 2201.75 4788.95 2201.75 4841.75 c
-h
-S
-2019.35 4731.35 15.5999 849.6 re
-Y
-2026.55 5583.35 m
-2026.55 4738.55 l
-S
-2026.55 5212.55 189.6 15.5999 re
-Y
-2024.15 5220.95 m
-2208.95 5220.95 l
-S
-0 0 6120 7920 re
-Y
-2064.95 5222.15 m
-2064.95 5243.75 2046.95 5261.75 2025.35 5261.75 c
-2002.55 5261.75 1984.55 5243.75 1984.55 5222.15 c
-1984.55 5200.55 2002.55 5182.55 2025.35 5182.55 c
-2046.95 5182.55 2064.95 5200.55 2064.95 5222.15 c
-f*
-2244.95 5222.15 m
-2244.95 5243.75 2226.95 5261.75 2205.35 5261.75 c
-2182.55 5261.75 2164.55 5243.75 2164.55 5222.15 c
-2164.55 5200.55 2182.55 5182.55 2205.35 5182.55 c
-2226.95 5182.55 2244.95 5200.55 2244.95 5222.15 c
-f*
-2026.55 4972.55 189.6 15.5999 re
-Y
-2024.15 4980.95 m
-2208.95 4980.95 l
-S
-0 0 6120 7920 re
-Y
-2064.95 4982.15 m
-2064.95 5003.75 2046.95 5021.75 2025.35 5021.75 c
-2002.55 5021.75 1984.55 5003.75 1984.55 4982.15 c
-1984.55 4960.55 2002.55 4942.55 2025.35 4942.55 c
-2046.95 4942.55 2064.95 4960.55 2064.95 4982.15 c
-f*
-2244.95 4982.15 m
-2244.95 5003.75 2226.95 5021.75 2205.35 5021.75 c
-2182.55 5021.75 2164.55 5003.75 2164.55 4982.15 c
-2164.55 4960.55 2182.55 4942.55 2205.35 4942.55 c
-2226.95 4942.55 2244.95 4960.55 2244.95 4982.15 c
-f*
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -1530 -5401]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -1615 -5401]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -1677 -5399]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -1747 -5401]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -1863 -5399]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -1569 -5179]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -1671 -5179]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -1741 -5179]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -1779 -5178]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-39 95 true[1 0 0 1 -1851 -5179]@85 imagemask
-J,fQKrdXtJs8E-#
-s8N'!5QCKY!$D7!!!!Q0huE`^s1eU7#QMR>!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:J-Z+i!8n+^^]8`m
-s1eUVs8Tk7#QOh>!!3-"^]4 at as1eU7+90+V!!iP>!!!'"^]4?7J%u$a!$AuV!!!8>!!!!$^]4?7!.Y%~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -2316 -5179]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-39 95 true[1 0 0 1 -2403 -5179]@85 imagemask
-J,fQKrdXtJs8E-#
-s8N'!5QCKY!$D7!!!!Q0huE`^s1eU7#QMR>!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:J-Z+i!8n+^^]8`m
-s1eUVs8Tk7#QOh>!!3-"^]4 at as1eU7+90+V!!iP>!!!'"^]4?7J%u$a!$AuV!!!8>!!!!$^]4?7!.Y%~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -2316 -4939]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-66 95 true[1 0 0 1 -2387 -4939]@85 imagemask
-&-)\0s8W,W!"],0
-s8W-!huF#^s8W-!s6p!js8W-!s8VQg!WW3"s8W,o!!*'!s8W-!p](;Ds8W-!s7cQo5QCc`s8Vus!$D7@
-s8W,s!!!Q0s8W-!rVup's8W-!s8Duu#J^<>!!)uu!!D-Z!!!!@!!!&hz%fcS0p](9o!!e#S!.4bH
-!!!+O!!#1_!!!!$J,fQkz!Pe[8%tFW[!!'e7!!g:>!!!#7!!!,Zz!!!!"n,NFgz!;HNoz!!%BH
-z!!!!_zz*rl9 at z!"XS[z!!!8>z!!!!(huE`Wz"7Q9jz!!2ip
-z!!!#szzIK0?Jz!'^G`z!!"*kz!!!!@^]4?7z&)[Efz!!hun
-z!!!8nz!!!!$p](9oz!W2otz!!3'!z!!!$!zzIt.M!z!.TM!z!!#7!
-z!!!!`huE`Wz+5d,!z!$C\1z!!!Q)z!!!!0p](9oz&,ZD-z!!iE%
-z!!!9'z!!!!(rVuouz"9/?$z!!E6$z!!!-$J,fQL!!!!$s*t(Lz!WRZM
-z!!3,8z!!!'"^]4?7!!!!"s1eU7z!WTq8z!!3,Xz!!!'"huEfY!!!!"s53k^z!WV'X
-#64`(!!3,X!!e#S!!!'"huF"4!!!!$s53kZ^]4?7"979Z"2Fm:!!E8Z!!D-Z!!!9(huEf9!!!!(s53kX
-n,NFg&-'EF!Up'h!"]+F!!)co!!",@^]4B4!!!!`s1eU7IK0?J5Q?66!.OtK!.Y$!!!#66!!3-"!!!!`
-^]4K:rr<$!+7K7 at s8Duu!"]&/s8Vus!!!9(s8W,s!!!!$s8W-!p](9o!WW3"s6p!g!!*'!s8V!W!!!"Ks8W,7z+92B at z!"],0rVuou!!!-$s7cQozJ,d:az!"\u-!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -1568 -4944]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -1670 -4944]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -1740 -4944]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -1778 -4943]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-66 95 true[1 0 0 1 -1833 -4944]@85 imagemask
-&-)\0s8W,W!"],0
-s8W-!huF#^s8W-!s6p!js8W-!s8VQg!WW3"s8W,o!!*'!s8W-!p](;Ds8W-!s7cQo5QCc`s8Vus!$D7@
-s8W,s!!!Q0s8W-!rVup's8W-!s8Duu#J^<>!!)uu!!D-Z!!!!@!!!&hz%fcS0p](9o!!e#S!.4bH
-!!!+O!!#1_!!!!$J,fQkz!Pe[8%tFW[!!'e7!!g:>!!!#7!!!,Zz!!!!"n,NFgz!;HNoz!!%BH
-z!!!!_zz*rl9 at z!"XS[z!!!8>z!!!!(huE`Wz"7Q9jz!!2ip
-z!!!#szzIK0?Jz!'^G`z!!"*kz!!!!@^]4?7z&)[Efz!!hun
-z!!!8nz!!!!$p](9oz!W2otz!!3'!z!!!$!zzIt.M!z!.TM!z!!#7!
-z!!!!`huE`Wz+5d,!z!$C\1z!!!Q)z!!!!0p](9oz&,ZD-z!!iE%
-z!!!9'z!!!!(rVuouz"9/?$z!!E6$z!!!-$J,fQL!!!!$s*t(Lz!WRZM
-z!!3,8z!!!'"^]4?7!!!!"s1eU7z!WTq8z!!3,Xz!!!'"huEfY!!!!"s53k^z!WV'X
-#64`(!!3,X!!e#S!!!'"huF"4!!!!$s53kZ^]4?7"979Z"2Fm:!!E8Z!!D-Z!!!9(huEf9!!!!(s53kX
-n,NFg&-'EF!Up'h!"]+F!!)co!!",@^]4B4!!!!`s1eU7IK0?J5Q?66!.OtK!.Y$!!!#66!!3-"!!!!`
-^]4K:rr<$!+7K7 at s8Duu!"]&/s8Vus!!!9(s8W,s!!!!$s8W-!p](9o!WW3"s6p!g!!*'!s8V!W!!!"Ks8W,7z+92B at z!"],0rVuou!!!-$s7cQozJ,d:az!"\u-!!!!~>
-Q
-0.564706 g
-4055.75 4824.95 m
-4055.75 4883.75 4008.95 4930.55 3950.15 4930.55 c
-3140.15 4930.55 l
-3081.35 4930.55 3034.55 4883.75 3034.55 4824.95 c
-3034.55 4194.95 l
-3034.55 4136.15 3081.35 4089.35 3140.15 4089.35 c
-3950.15 4089.35 l
-4008.95 4089.35 4055.75 4136.15 4055.75 4194.95 c
-f*
-1 g
-3990.95 4881.35 m
-3990.95 4938.95 3945.35 4984.55 3887.75 4984.55 c
-3083.75 4984.55 l
-3026.15 4984.55 2980.55 4938.95 2980.55 4881.35 c
-2980.55 4257.35 l
-2980.55 4199.75 3026.15 4154.15 3083.75 4154.15 c
-3887.75 4154.15 l
-3945.35 4154.15 3990.95 4199.75 3990.95 4257.35 c
-f*
-0 g
-3990.95 4881.35 m
-3990.95 4938.95 3945.35 4984.55 3887.75 4984.55 c
-3083.75 4984.55 l
-3026.15 4984.55 2980.55 4938.95 2980.55 4881.35 c
-2980.55 4257.35 l
-2980.55 4199.75 3026.15 4154.15 3083.75 4154.15 c
-3887.75 4154.15 l
-3945.35 4154.15 3990.95 4199.75 3990.95 4257.35 c
-h
-S
-3808.55 4139.75 15.5999 849.6 re
-Y
-3815.75 4991.75 m
-3815.75 4146.95 l
-S
-3815.75 4620.95 190.8 15.5999 re
-Y
-3813.35 4629.35 m
-3998.15 4629.35 l
-S
-0 0 6120 7920 re
-Y
-3855.35 4630.55 m
-3855.35 4653.35 3837.35 4671.35 3815.75 4671.35 c
-3792.95 4671.35 3774.95 4653.35 3774.95 4630.55 c
-3774.95 4608.95 3792.95 4590.95 3815.75 4590.95 c
-3837.35 4590.95 3855.35 4608.95 3855.35 4630.55 c
-f*
-4035.35 4630.55 m
-4035.35 4653.35 4017.35 4671.35 3995.75 4671.35 c
-3972.95 4671.35 3954.95 4653.35 3954.95 4630.55 c
-3954.95 4608.95 3972.95 4590.95 3995.75 4590.95 c
-4017.35 4590.95 4035.35 4608.95 4035.35 4630.55 c
-f*
-3815.75 4380.95 190.8 15.5999 re
-Y
-3813.35 4389.35 m
-3998.15 4389.35 l
-S
-0 0 6120 7920 re
-Y
-3855.35 4390.55 m
-3855.35 4413.35 3837.35 4431.35 3815.75 4431.35 c
-3792.95 4431.35 3774.95 4413.35 3774.95 4390.55 c
-3774.95 4368.95 3792.95 4350.95 3815.75 4350.95 c
-3837.35 4350.95 3855.35 4368.95 3855.35 4390.55 c
-f*
-4035.35 4390.55 m
-4035.35 4413.35 4017.35 4431.35 3995.75 4431.35 c
-3972.95 4431.35 3954.95 4413.35 3954.95 4390.55 c
-3954.95 4368.95 3972.95 4350.95 3995.75 4350.95 c
-4017.35 4350.95 4035.35 4368.95 4035.35 4390.55 c
-f*
-q[1 0 0 1 0 0]concat
-72 100 true[1 0 0 1 -3071 -4806]@85 imagemask
-#CldSIt.M!!!e#S
-5QC``!!!8>!WW3"huE`^^`WUVs82is#N5X^s8W*!!!iQ(s1n[7^]4W>s82j%s6p!ns8V!W!WVop#QOgS
-!!%NH!!iQ'!!!!`rW!3'qu?]s+9)<Gs7cQo!"]*[#QO8n!!!9(^^'nt!!!!(s54.^^]4?7"97iqs*t(L
-!!E8j#QFc(!!!'"p]pg!!!!!"s7ciuz!WW'&qu?]s!!3,t#Q+Q%!!!'"rWi2u!!!!"s8E8uz!WW-(n,NFg
-!!3-!#Oh]n!!!'"rs/#n!!!!$s8N>^z"98B+huE`W!!E9$#N,R^!!!9(rs-=>!!!!0s8N>>z
-+92?G^]4?7!'gM`#J^<>!!%NKrs+&S!!!'"s8N=S!!!!$s8W*!z&-)\/z!'gM`rVuou!!*'!
-s8Duu!!!-$s8W&u!!!!0s8W,sz5QCc`qu?]s!<<*!s7cQo!!iQ(s8Vio!!!Q0s8W,g!!!!`s8W-!n,NFgs8W-!
-s53kW"98E$s8V!W!!iQ(s8W,7!!", at s8W-!J,fR6s8W-!rr<$!J,fQKs8Duu!WW3"s8Vus!!E9$s8W,o
-!!!9(s8W-!n,NG!s8W-!s1eU7&-)\0s8N'!!$D7 at s8Vus!!#7`s8W,g!!!"Ks8W-!^]4?7J,fQKrr<$!
-!<<*!s82is!!*'!s8VQg!!!'"s8W,7!!!!"s8W-!z!WW3"qu?]s!!3-"s6p!g!!!-$s8Tk7!!!!$s8W*!z
-"98E!z!!E9$p](9o!:U*js53kW!!)Kjs8Tk7!!!&h"98CO!!!!"n,r^jz!Up3krVuou!!D]m
-s82is!!!,j"989!!!!!(n,`Rez#Ohcop](9o!"\Q"s7cQo!!!Q!!WVop!!!!@n,WL`z+7K:1
-p](9o!'frQs7cQo!!#7Q!.XbD!!!"Kn,Rt9zs6p"Qqu?]s!WVWh5PtK]!!E8j!$D1?!!!9(n,O!u!!!!0s6p"!rr<$!+91g1#QK;S!.Y%<!!E8Z!!3-"n,NIg
-n,N^ns6p!gJ,TF4s8VQg!'gM`s8RlD!!!Q0s8Virn,NFjs8W,7!Up'h!.Y%J!!2Qh!!!9(huEfI~>
-Q
-q[1 0 0 1 0 0]concat
-76 95 true[1 0 0 1 -3149 -4809]@85 imagemask
-+92B at p`KP9s6q-1
-s8Vj9s8W,g+92B at p`KP9s6pR!s8VQns8W,7!WW3"!!*'!s*t+Ls8DuuJ,fNK!.Y%H!!%NKrr<%Ks82is
-J,fKJ!'gM]!!*'!qu?^]s82iss8Vus!'gM]!!3-"p](:Ys82j!s8VQg!'gM]!!E9$huEaAs82j%s8V!W
-!'gM]!"],0^]4@!s82j-s8RTL!'gM]!$D7 at J,fR6s82j]s8N'!!'gM]!.Y%J!!!!`s82kHs82is!'gM]!<<)s!!!!`
-s82ots7cQo!'gM]!WW2h!!!!`s83!!s53kW!'gM]#QOh^!!!!`s83E-s1eU7!'gM]&-)Z[!!!!`s83u=
-s*t(L!'gM_5QC``!!!!`s8G7_rVuou!'gM`J,fEH!!!!`s8W-!qu?]s!'gM`s8Vio!!!!`s8W-!n,NFg
-!'gM`s8V!W!!!!`s8DuthuE`W!'gM]s8Tk7!!!!`s87BHJ,fQL!'gM]5Q?66!!!!`s83u=z!'gM]&,lP/!!!!`
-s83-"z!'gM]"8i-!!!!!`s82oqz!'gM]!<)ru!!!!`s82kHz!'gM]!'bu6!!!!`s82j=
-^]4?7!'gM]!"[uf!!!!`s82j%n,NFg!'gM]!!Dur!!!!`s82j!qu?]s!'gM]!!3'!!!!!`s82isrr<$!
-!'gM]!!%M!!!!!`s82isJ%u$a!'gM]!!#7Q!!!!`s82is5PP3Y!'gM]!!#7_!!!!`s82isJ,b$!!'gM]!!3-"huEaA
-s82j]s8W*!!'gM]!'gM`rr<$`s82j]s8W*!!'gM]!'gM`rr<$`s82isz!'gM]z!!!!`s82is
-z!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!", at s82isz+92B=z!!", at s82isz+92B=z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 94 true[1 0 0 1 -3228 -4780]@85 imagemask
-!$C\1z!!%NJ
-z!!!'"s*t(L!!!!$s8Tk7z#QOh^z!"],0n,NFg!!", at s7cQo!!!!@s8Vusz5QC9O
-z!'gMAIK0?J!!#7`i'%,@!!!!`s56*Az5QBX`z!'gMA%tFW[!!", at i"(><!!!!@s54-t
-z+917(^]4?7!"]+F"5j.Z!!!9(J-4^0!!!!"rW!&Yz!!!!"n,NFgz!Up'hz!!2ipz!!!#o
-zzp](9oz!;lfsz!!%BHz!!!"HzzIK0?Jz!<)ruz!!*$!
-z!!!'"z!!!!"rr<$!z"93lOz!!E7Oz!!!-$J,fQL!!!!(s1eU7z#QMR>
-z!"]+fz!!!Q0huE`W!!!!0s53kWz+91g1z!$D71z!!#7`n,NFg!!!!`s7cQoz5QCKY
-z!.Y%Hz!!%NKqu?]s!!!$!s82iszs8W&uz!<<)uz!!3-"rVuou!!!'"s8N'!
-!!!!$s8UsVz"98DYJ,fQL!!E9$O+731!!!9(s,V[1!!!!(s8Rkiz&-)Y7^]4?7!"],0#J^<>
-!!", at rr_0Z!!!!@s8E,Yz+92<Bn,NFg!'gM]!Up'h!!#7`quQ9e!!!"Ks82omzJ,f9Dp](9o!.Y%D!;HNo
-!!*'!n,W at d!!!$!s6p#9!!!!"s8VQgIK0?J!WW2X!.FnJ!!3-"huGq@!!!-$s1eV!!!!!$s8Tk7*rl9@
-#QOh>!$;1@!!iQ(J,g[A!!!Q0s*t([J,fQ[s8RTL&&8/F+92?@!"ZjF!$D7@!!!8>!!#7`rVup'huEaA
-s8Duu#N,R^5QC]_!!D]j!.Y%H!!!,j!!%NKqu?^!n,NIgs82is"8Diss8Vus!!iE%!WW3!!!!9'!!iQ(rr<$@rr>:`s8Virs8V"As8W,o"98DZ5QCc`p]LQri'78As7c]rs53~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -3297 -4809]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -3383 -4809]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -3445 -4807]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -3515 -4809]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -3631 -4807]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-92 93 true[1 0 0 1 -3429 -4587]@85 imagemask
-5QCc`s*t(L#QOhn
-5QCc`s*t(L#QOhn5QCc`s*t(L&-)\!!<<*!huE`W+92?@!$D7 at z5QCKY!"],-zJ,f!<!!iQ%
-zJ,eF,!!iQ!zs8Tk7!!iQ!!!!!"s8RTL!!E8j!!!!$s8N'!!!E8j!!!!$s8Duu!!E8j!!!!(
-s82is!!E8j!!!!0s7cQo!!E8j!!!!@s7cQo!!E8j!!!!@s6p!g!!E8j!!!!`s53kW!!E8j!!!"Ks1eU7!!E8j!!!$!
-s*t(L!!E8j!!!'"s*t(L!!E8j!!!'"rr<$!!!E8j!!!-$rVuou!!E8j!!!9(qu?]s!!E8j!!!Q0p](9o
-!!E8j!!!Q0n,NFg!!E8j!!", at n,NFg!!E8j!!#7`huE`W!!E8j!!%NK^]4?7!!E8j!!*'!J,fQL!!E8j
-!!*'!z!!E8j!!3-"z!!E8j!!E9#z!!E8j!!iQ%z!!E8j!!iQ!z!!E8j!"],!z!!E8j
-!$D71z!!E8j!'gMAz!!E8j!'gM!z!!E8j!.Y$!z!!E8j!<<'!z!!E8j!WW-!
-z!!E8j"98?#z!!E8j"989!z!!E8j#QOQ!z!!E9$s8VQgz!!E9$s8V!Wz
-!!E9$s8W&uz!!E9$s8W,Wz!!E9$s8W,oz!!E8j"98E$z!!E8j!!iQ(^]4?7!!E8j!!*'!huE`W
-!!E8j!!", at p](9o!!E8j!!!9(qu?]s!!E8j!!!-$rVuou!!E8j!!!$!rr<$!!!E8j!!!"Ks*t(L!!E8j
-!!!!`s*t(L!!E8j!!!!`s1eU7!!E8j!!!!@s1eU7!!E8j!!!!@s53kW!!E8j!!!!0s53kW!!E8j!!!!0
-s53kW!!E8j!!!!0s53kW!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(
-s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g
-!!E8j!!!!(s6p!g!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!@s1eU7!!E8j
-!!!!@s1eU7!!E8j!!!!`s1eU7!!E8j!!!!`s*t(L!!E8j!!!"Krr<$!!!E8j!!!$!rr<$!!!E8j!!!'"rVuou!!iPn!!!9(qu?]s!!iQ!!!", at n,NFg!!iQ!!!*'!huE`W!"],/!$D7 at J,fQL
-!'gM`s8W-!z"98E$s8W,oz5QCc`s8W,7z5QCc`s8W&uz5QCc`s8RTLz~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -3524 -4587]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-82 74 true[1 0 0 1 -4137 -4585]@85 imagemask
-!!!$!huE`W&&8/F
-!"],/!!!!`n,NFgJ,fP!!!%ND!!!'"s8V!W!<;rs!!E9$s7cQps82is&-(QPqu?j!rVup?s*tX[!!E9#
-!!#7_!!iOS#QOf(!.XnH"96.As8N'!s7cQps54Ffrr<*"p](<on.5R!J-#]>!!%N<&,:X)"979Z!.Xbc
-n/m/cs53kW5PuV]%tFob^]4?Vr'.t-J.M[q!!",?5C`uh&-'EF!"]&nJ-Wk3s*t(L&-%+Z#J_G]J,fQSs*k"N^`WT,
-!!!9(rW!&95Q?66!!E9#!!C#$rr<$!"989!"2I/$!!!!$s82j!^jl at a!!!'"qu?]sJ,]KK!!3,p!!!"K
-rr<$!!<;fo!!%NKzs7cQo!.XtJ!!!$!p](9oJ,TEJ!!%ND!!!$!rVuou!.XbD!!*&uzJ,B9H
-!<<#u!!!!`qu?]ss8Duu!!#7]!!!$!rVuou!'gG_!!*&uz+8u6?!<<#u!!!!@rVuous8Duu!!",@!!!$!rVuou
-!$D4@!!*&uz+9)<@!<<#u!!!!@s*t(Ls8Duu!!", at J,fTLrVuou!'gL6!!*&uz5QAM!!<<#u
-!!!!`s1eU7s8Duu!!#7`huEb,rVuou!'gMA!!%NKzJ,eF,!.Y"K!!!"Ks6p!gJ,]KK!!%KJn,NH<
-rr<$!!.Ot;!!#7`zrr;`n!'gJ`!!!#uJ+s!D5Q?66!!)qHp](:Ys*t(L!W7HF!!", at J,fQMr'1)Z!$D5k!!!&p
-5PtK]&-'EF!!E!\rVup/s1eU7"8Eu;!!!9(^]4?>n/qZ1!!iP^!!!8n+9)<@"979Z!"[uurr<$$s6p!g
-+5d\0J,fWMn,NGQ^^pHq!!*&o!!#7!#QK;S!.XnH!<7QSs1eU75Q1W`rr<0$^]4?Vrr<<'!!E8:!!!Q0
-i#hjs"979Z!!iQ(s7cQps53kW!WW3"n,NLhn,NFgJ,fQ,!!3,h!!!!@s8RTL!<;Ng!!!9(rVuous7cQo!!%N,z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-62 107 true[1 0 0 1 -4147 -4345]@85 imagemask
-!!!$!huE`W!!!Q0
-rVuou!!#7`s*t(L!!*'!s53kW!!E9$s7cQo!!iQ(s82is!"],0s8N'!!'gMQ+9-ik!.Y$a"96.:!<<'!
-!<:sW!WW-!!.XJ<!WW&t!'g5Y"98,r!$D+=#QO8n!"]&/#QO8n!"]&/&-(Pf!!iN(+90+V!!iOS+90+V
-!!E7O+90+V!!E8:5Q?66!!E8Z5Q?66!!3,XJ,b$!!!3,XJ,]KK!!3,hJ,]KK!!3,hJ,]KK!!*&os8N'!!!*&os8N'!
-!!*&os8Duu!!*&os8Duu!!*&os8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu
-!!*&ss8Duu!!*&ss8Duu!!*&sJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,t5Q:]`!!3,p5Q:]`
-!!E8r+9)<@!!E8r+9)<@!!E8r+9-ik!!iQ!&-%.[!!iPn#QK;S!"],!#QMR>!"],!"96.:!$D7!!WV'X!$D7!!WV'X
-!'gM!!<;Ng!'gM!!.XbD!.Y$!!'gA]!<<(L!$D1?!WW0"!!iN("98?#!!E7O"98?#!!3,X#QO]%!!%ND
-&-)D)!!", at +91g1!!!9(s8V!W!!!$!s8Tk7!!!!`s8RTL!!!!(s8N'!!!!!(s8Duu!!!!0s82is!!!!@
-s7cQo!!!!`s53kW!!!"Ks1eU7!!!$!rr<$!!!!'"rVuou!!!-$p](9o!!!9(huE`W!!!Q0^]4?7!!", at z!!%NH
-z!!*&oz!!3,Xz!!E8:z!!iN(z!"]&/z!"\u-z!$Ct9z!'frQ
-z!'fBAz!.Vcaz!.TM!!!Dur!<3$!!"]&/!<3$!!$D1?!<)ru!'gJ`!<)ru!.Y"K!<)ru
-!<<'!!<)ru!WW0"!<)ru"98B$!<3$!#QOf(!<3$!&-)V/!.TM!5QC]_!.VcaJ,fEH!'fBBs8Vio!$D+Ds8VQg!"],0s8Tk7!!iQ(s8RTL!!E9$s8Duu!!*'!s6p!g!!#7`s*t(L!!!'"n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-96 93 true[1 0 0 1 -3414 -4352]@85 imagemask
-5QCc`s8V!Wz
-5QCc`s8W+Lz5QCc`s8W,sz!.Y%Ks8W-!J,fQL!$D7 at s8W-!n,NFg!!iQ(!!E9$qu?]s!!E9!
-!!!Q0s*t(L!!E9!!!!$!s53kW!!E8r!!!!@s6p!g!!3,p!!!!(s82is!!3,p!!!!"s8Duu!!3,pz
-J,b$!!!3,pz5QAM!!!3,pz+917!!!3,pz#QO8n!!3,pz"98,r!!3,pz!WW&t!!3,pz
-!<;rs!!3,pz!.XtJ!!3,pz!.Y"K!!3,pz!'gJ`!!3,pz!$D5k!!3,pz!$D6V
-!!3,pz!"]+F!!3,pz!!iP^!!3,pz!!iP^!!3,pz!!iPn!!3,pz!!E8j!!3,p
-z!!E8r!!3,pz!!3,p!!3,pz!!3,p!!3,pz!!3,t!!3,pz!!3,t!!3,pz!!*&s!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!%NJ!!3,pz
-!!%NJ!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!*'!!!3,pz!!*&u!!3,pz!!*&u!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!3-!!!3,pz!!3,t!!3,pz!!3,t!!3,pz
-!!E9!!!3,pz!!E9!!!3,pz!!E8r!!3,pz!!iQ!!!3,pz!!iQ!!!3,pz!"],!!!3,pz
-!"],!!!3,pz!$D7!!!3,pz!$D7!!!3,pz!'gM!!!3,pz!.Y$!!!3,pz!<<(L
-!!3,pz!<<'!!!3,pz!WW-!!!3,pz"989!!!3,pz#QO]%!!3,pz&-)D)!!3,p
-z+91g1!!3,pzJ,eF,!!3,pzs8Tk7!!3,p!!!!"s8N'!!!3,p!!!!(s8Duu!!3,p!!!!@s7cQo!!E8r!!!"Ks6p!g!!E9!!!!-$s1eU7!!iQ%!!", at rr<$!!"],0!!iQ(qu?]s
-!$D7 at s8W-!n,NFg!WW3"s8W-!J,fQL5QCc`s8W,oz5QCc`s8W+Lz5QCc`s8Tk7z~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -3515 -4351]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-58 65 true[1 0 0 1 -3577 -4351]@85 imagemask
-!!!'"p](9o!!!Q0
-rr<$!!!#7`s1eU7!!*'!s53kW!!3-"s7cQo!!E9$s82is!"],0s8Duu!$D7 at s8N'!!$D7 at s8RTL!'gM`
-s8Tk7!.Y%H!'fBA!<<)W!!hun!<<(L!!D]j!WW0"!!)co!WW-!!!%BH"989!!!#+]"98,r!!"&?#QO8n
-!!!N0#QN]^!!!6(#QN]^!!!7S&-'EF!!!+O&-%.[!!!&8&-%.[!!!$"&,uV0z+9)<@z+9)<@z+8u6?
-z+8u6?z+8u6?z+8u6?z+8u6?z+8c*=z+8c*=z+8c*=z+8c*=
-z+8c*=z+8c*=z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z#Q+Q%
-z#Q=]'z#Q=]'z"9&9#!!2Qh"9&9#!!i9!!WN-"!"\u-!WN-"!"]&/!<3$!!$D1?!<7QL!$D4@!.TM!!'gJ`!'e7!!'gJ`!$C,!!'gG_!$C,!!'gG_!"\Q!!.XtJ!!i9!!.XnH!!E-!
-!.XbD!!)uu!<;Ng!!%M!!WV'X!!#7Q"96.:!!!Q0s8RTL!!!-$s8Duu!!!$!s7cQo!!!!@s1eU7~>
-Q
-0.564706 g
-2662.55 3959.75 m
-2662.55 4018.55 2615.75 4065.35 2556.95 4065.35 c
-1746.95 4065.35 l
-1688.15 4065.35 1641.35 4018.55 1641.35 3959.75 c
-1641.35 3329.75 l
-1641.35 3270.95 1688.15 3224.15 1746.95 3224.15 c
-2556.95 3224.15 l
-2615.75 3224.15 2662.55 3270.95 2662.55 3329.75 c
-f*
-1 g
-2597.75 4016.15 m
-2597.75 4073.75 2552.15 4119.35 2494.55 4119.35 c
-1690.55 4119.35 l
-1632.95 4119.35 1587.35 4073.75 1587.35 4016.15 c
-1587.35 3392.15 l
-1587.35 3334.55 1632.95 3288.95 1690.55 3288.95 c
-2494.55 3288.95 l
-2552.15 3288.95 2597.75 3334.55 2597.75 3392.15 c
-f*
-0 g
-2597.75 4016.15 m
-2597.75 4073.75 2552.15 4119.35 2494.55 4119.35 c
-1690.55 4119.35 l
-1632.95 4119.35 1587.35 4073.75 1587.35 4016.15 c
-1587.35 3392.15 l
-1587.35 3334.55 1632.95 3288.95 1690.55 3288.95 c
-2494.55 3288.95 l
-2552.15 3288.95 2597.75 3334.55 2597.75 3392.15 c
-h
-S
-2415.35 3274.55 15.5999 849.6 re
-Y
-2422.55 4127.75 m
-2422.55 3281.75 l
-S
-2422.55 3520.55 177.6 243.6 re
-Y
-2422.55 3764.15 m
-2591.75 3528.95 l
-S
-0 0 6120 7920 re
-Y
-2460.95 3765.35 m
-2460.95 3788.15 2442.95 3806.15 2421.35 3806.15 c
-2398.55 3806.15 2380.55 3788.15 2380.55 3765.35 c
-2380.55 3743.75 2398.55 3725.75 2421.35 3725.75 c
-2442.95 3725.75 2460.95 3743.75 2460.95 3765.35 c
-f*
-2631.35 3528.95 m
-2631.35 3551.75 2613.35 3569.75 2591.75 3569.75 c
-2568.95 3569.75 2550.95 3551.75 2550.95 3528.95 c
-2550.95 3507.35 2568.95 3489.35 2591.75 3489.35 c
-2613.35 3489.35 2631.35 3507.35 2631.35 3528.95 c
-f*
-2422.55 3515.75 182.4 252 re
-Y
-2422.55 3524.15 m
-2596.55 3767.75 l
-S
-0 0 6120 7920 re
-Y
-2460.95 3525.35 m
-2460.95 3548.15 2442.95 3566.15 2421.35 3566.15 c
-2398.55 3566.15 2380.55 3548.15 2380.55 3525.35 c
-2380.55 3503.75 2398.55 3485.75 2421.35 3485.75 c
-2442.95 3485.75 2460.95 3503.75 2460.95 3525.35 c
-f*
-2634.95 3767.75 m
-2634.95 3790.55 2616.95 3808.55 2595.35 3808.55 c
-2572.55 3808.55 2554.55 3790.55 2554.55 3767.75 c
-2554.55 3746.15 2572.55 3728.15 2595.35 3728.15 c
-2616.95 3728.15 2634.95 3746.15 2634.95 3767.75 c
-f*
-q[1 0 0 1 0 0]concat
-72 100 true[1 0 0 1 -1677 -3941]@85 imagemask
-#CldSIt.M!!!e#S
-5QC``!!!8>!WW3"huE`^^`WUVs82is#N5X^s8W*!!!iQ(s1n[7^]4W>s82j%s6p!ns8V!W!WVop#QOgS
-!!%NH!!iQ'!!!!`rW!3'qu?]s+9)<Gs7cQo!"]*[#QO8n!!!9(^^'nt!!!!(s54.^^]4?7"97iqs*t(L
-!!E8j#QFc(!!!'"p]pg!!!!!"s7ciuz!WW'&qu?]s!!3,t#Q+Q%!!!'"rWi2u!!!!"s8E8uz!WW-(n,NFg
-!!3-!#Oh]n!!!'"rs/#n!!!!$s8N>^z"98B+huE`W!!E9$#N,R^!!!9(rs-=>!!!!0s8N>>z
-+92?G^]4?7!'gM`#J^<>!!%NKrs+&S!!!'"s8N=S!!!!$s8W*!z&-)\/z!'gM`rVuou!!*'!
-s8Duu!!!-$s8W&u!!!!0s8W,sz5QCc`qu?]s!<<*!s7cQo!!iQ(s8Vio!!!Q0s8W,g!!!!`s8W-!n,NFgs8W-!
-s53kW"98E$s8V!W!!iQ(s8W,7!!", at s8W-!J,fR6s8W-!rr<$!J,fQKs8Duu!WW3"s8Vus!!E9$s8W,o
-!!!9(s8W-!n,NG!s8W-!s1eU7&-)\0s8N'!!$D7 at s8Vus!!#7`s8W,g!!!"Ks8W-!^]4?7J,fQKrr<$!
-!<<*!s82is!!*'!s8VQg!!!'"s8W,7!!!!"s8W-!z!WW3"qu?]s!!3-"s6p!g!!!-$s8Tk7!!!!$s8W*!z
-"98E!z!!E9$p](9o!:U*js53kW!!)Kjs8Tk7!!!&h"98CO!!!!"n,r^jz!Up3krVuou!!D]m
-s82is!!!,j"989!!!!!(n,`Rez#Ohcop](9o!"\Q"s7cQo!!!Q!!WVop!!!!@n,WL`z+7K:1
-p](9o!'frQs7cQo!!#7Q!.XbD!!!"Kn,Rt9zs6p"Qqu?]s!WVWh5PtK]!!E8j!$D1?!!!9(n,O!u!!!!0s6p"!rr<$!+91g1#QK;S!.Y%<!!E8Z!!3-"n,NIg
-n,N^ns6p!gJ,TF4s8VQg!'gM`s8RlD!!!Q0s8Virn,NFjs8W,7!Up'h!.Y%J!!2Qh!!!9(huEfI~>
-Q
-q[1 0 0 1 0 0]concat
-76 95 true[1 0 0 1 -1755 -3944]@85 imagemask
-+92B at p`KP9s6q-1
-s8Vj9s8W,g+92B at p`KP9s6pR!s8VQns8W,7!WW3"!!*'!s*t+Ls8DuuJ,fNK!.Y%H!!%NKrr<%Ks82is
-J,fKJ!'gM]!!*'!qu?^]s82iss8Vus!'gM]!!3-"p](:Ys82j!s8VQg!'gM]!!E9$huEaAs82j%s8V!W
-!'gM]!"],0^]4@!s82j-s8RTL!'gM]!$D7 at J,fR6s82j]s8N'!!'gM]!.Y%J!!!!`s82kHs82is!'gM]!<<)s!!!!`
-s82ots7cQo!'gM]!WW2h!!!!`s83!!s53kW!'gM]#QOh^!!!!`s83E-s1eU7!'gM]&-)Z[!!!!`s83u=
-s*t(L!'gM_5QC``!!!!`s8G7_rVuou!'gM`J,fEH!!!!`s8W-!qu?]s!'gM`s8Vio!!!!`s8W-!n,NFg
-!'gM`s8V!W!!!!`s8DuthuE`W!'gM]s8Tk7!!!!`s87BHJ,fQL!'gM]5Q?66!!!!`s83u=z!'gM]&,lP/!!!!`
-s83-"z!'gM]"8i-!!!!!`s82oqz!'gM]!<)ru!!!!`s82kHz!'gM]!'bu6!!!!`s82j=
-^]4?7!'gM]!"[uf!!!!`s82j%n,NFg!'gM]!!Dur!!!!`s82j!qu?]s!'gM]!!3'!!!!!`s82isrr<$!
-!'gM]!!%M!!!!!`s82isJ%u$a!'gM]!!#7Q!!!!`s82is5PP3Y!'gM]!!#7_!!!!`s82isJ,b$!!'gM]!!3-"huEaA
-s82j]s8W*!!'gM]!'gM`rr<$`s82j]s8W*!!'gM]!'gM`rr<$`s82isz!'gM]z!!!!`s82is
-z!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!", at s82isz+92B=z!!", at s82isz+92B=z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 94 true[1 0 0 1 -1833 -3915]@85 imagemask
-!$C\1z!!%NJ
-z!!!'"s*t(L!!!!$s8Tk7z#QOh^z!"],0n,NFg!!", at s7cQo!!!!@s8Vusz5QC9O
-z!'gMAIK0?J!!#7`i'%,@!!!!`s56*Az5QBX`z!'gMA%tFW[!!", at i"(><!!!!@s54-t
-z+917(^]4?7!"]+F"5j.Z!!!9(J-4^0!!!!"rW!&Yz!!!!"n,NFgz!Up'hz!!2ipz!!!#o
-zzp](9oz!;lfsz!!%BHz!!!"HzzIK0?Jz!<)ruz!!*$!
-z!!!'"z!!!!"rr<$!z"93lOz!!E7Oz!!!-$J,fQL!!!!(s1eU7z#QMR>
-z!"]+fz!!!Q0huE`W!!!!0s53kWz+91g1z!$D71z!!#7`n,NFg!!!!`s7cQoz5QCKY
-z!.Y%Hz!!%NKqu?]s!!!$!s82iszs8W&uz!<<)uz!!3-"rVuou!!!'"s8N'!
-!!!!$s8UsVz"98DYJ,fQL!!E9$O+731!!!9(s,V[1!!!!(s8Rkiz&-)Y7^]4?7!"],0#J^<>
-!!", at rr_0Z!!!!@s8E,Yz+92<Bn,NFg!'gM]!Up'h!!#7`quQ9e!!!"Ks82omzJ,f9Dp](9o!.Y%D!;HNo
-!!*'!n,W at d!!!$!s6p#9!!!!"s8VQgIK0?J!WW2X!.FnJ!!3-"huGq@!!!-$s1eV!!!!!$s8Tk7*rl9@
-#QOh>!$;1@!!iQ(J,g[A!!!Q0s*t([J,fQ[s8RTL&&8/F+92?@!"ZjF!$D7@!!!8>!!#7`rVup'huEaA
-s8Duu#N,R^5QC]_!!D]j!.Y%H!!!,j!!%NKqu?^!n,NIgs82is"8Diss8Vus!!iE%!WW3!!!!9'!!iQ(rr<$@rr>:`s8Virs8V"As8W,o"98DZ5QCc`p]LQri'78As7c]rs53~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -1904 -3944]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -1988 -3944]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2051 -3942]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2121 -3944]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2238 -3942]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-92 93 true[1 0 0 1 -2036 -3722]@85 imagemask
-5QCc`s*t(L#QOhn
-5QCc`s*t(L#QOhn5QCc`s*t(L&-)\!!<<*!huE`W+92?@!$D7 at z5QCKY!"],-zJ,f!<!!iQ%
-zJ,eF,!!iQ!zs8Tk7!!iQ!!!!!"s8RTL!!E8j!!!!$s8N'!!!E8j!!!!$s8Duu!!E8j!!!!(
-s82is!!E8j!!!!0s7cQo!!E8j!!!!@s7cQo!!E8j!!!!@s6p!g!!E8j!!!!`s53kW!!E8j!!!"Ks1eU7!!E8j!!!$!
-s*t(L!!E8j!!!'"s*t(L!!E8j!!!'"rr<$!!!E8j!!!-$rVuou!!E8j!!!9(qu?]s!!E8j!!!Q0p](9o
-!!E8j!!!Q0n,NFg!!E8j!!", at n,NFg!!E8j!!#7`huE`W!!E8j!!%NK^]4?7!!E8j!!*'!J,fQL!!E8j
-!!*'!z!!E8j!!3-"z!!E8j!!E9#z!!E8j!!iQ%z!!E8j!!iQ!z!!E8j!"],!z!!E8j
-!$D71z!!E8j!'gMAz!!E8j!'gM!z!!E8j!.Y$!z!!E8j!<<'!z!!E8j!WW-!
-z!!E8j"98?#z!!E8j"989!z!!E8j#QOQ!z!!E9$s8VQgz!!E9$s8V!Wz
-!!E9$s8W&uz!!E9$s8W,Wz!!E9$s8W,oz!!E8j"98E$z!!E8j!!iQ(^]4?7!!E8j!!*'!huE`W
-!!E8j!!", at p](9o!!E8j!!!9(qu?]s!!E8j!!!-$rVuou!!E8j!!!$!rr<$!!!E8j!!!"Ks*t(L!!E8j
-!!!!`s*t(L!!E8j!!!!`s1eU7!!E8j!!!!@s1eU7!!E8j!!!!@s53kW!!E8j!!!!0s53kW!!E8j!!!!0
-s53kW!!E8j!!!!0s53kW!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(
-s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g
-!!E8j!!!!(s6p!g!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!@s1eU7!!E8j
-!!!!@s1eU7!!E8j!!!!`s1eU7!!E8j!!!!`s*t(L!!E8j!!!"Krr<$!!!E8j!!!$!rr<$!!!E8j!!!'"rVuou!!iPn!!!9(qu?]s!!iQ!!!", at n,NFg!!iQ!!!*'!huE`W!"],/!$D7 at J,fQL
-!'gM`s8W-!z"98E$s8W,oz5QCc`s8W,7z5QCc`s8W&uz5QCc`s8RTLz~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -2130 -3722]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-62 107 true[1 0 0 1 -2754 -3720]@85 imagemask
-!!!$!huE`W!!!Q0
-rVuou!!#7`s*t(L!!*'!s53kW!!E9$s7cQo!!iQ(s82is!"],0s8N'!!'gMQ+9-ik!.Y$a"96.:!<<'!
-!<:sW!WW-!!.XJ<!WW&t!'g5Y"98,r!$D+=#QO8n!"]&/#QO8n!"]&/&-(Pf!!iN(+90+V!!iOS+90+V
-!!E7O+90+V!!E8:5Q?66!!E8Z5Q?66!!3,XJ,b$!!!3,XJ,]KK!!3,hJ,]KK!!3,hJ,]KK!!*&os8N'!!!*&os8N'!
-!!*&os8Duu!!*&os8Duu!!*&os8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu
-!!*&ss8Duu!!*&ss8Duu!!*&sJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,t5Q:]`!!3,p5Q:]`
-!!E8r+9)<@!!E8r+9)<@!!E8r+9-ik!!iQ!&-%.[!!iPn#QK;S!"],!#QMR>!"],!"96.:!$D7!!WV'X!$D7!!WV'X
-!'gM!!<;Ng!'gM!!.XbD!.Y$!!'gA]!<<(L!$D1?!WW0"!!iN("98?#!!E7O"98?#!!3,X#QO]%!!%ND
-&-)D)!!", at +91g1!!!9(s8V!W!!!$!s8Tk7!!!!`s8RTL!!!!(s8N'!!!!!(s8Duu!!!!0s82is!!!!@
-s7cQo!!!!`s53kW!!!"Ks1eU7!!!$!rr<$!!!!'"rVuou!!!-$p](9o!!!9(huE`W!!!Q0^]4?7!!", at z!!%NH
-z!!*&oz!!3,Xz!!E8:z!!iN(z!"]&/z!"\u-z!$Ct9z!'frQ
-z!'fBAz!.Vcaz!.TM!!!Dur!<3$!!"]&/!<3$!!$D1?!<)ru!'gJ`!<)ru!.Y"K!<)ru
-!<<'!!<)ru!WW0"!<)ru"98B$!<3$!#QOf(!<3$!&-)V/!.TM!5QC]_!.VcaJ,fEH!'fBBs8Vio!$D+Ds8VQg!"],0s8Tk7!!iQ(s8RTL!!E9$s8Duu!!*'!s6p!g!!#7`s*t(L!!!'"n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-82 74 true[1 0 0 1 -2743 -3480]@85 imagemask
-!!!$!huE`W&&8/F
-!"],/!!!!`n,NFgJ,fP!!!%ND!!!'"s8V!W!<;rs!!E9$s7cQps82is&-(QPqu?j!rVup?s*tX[!!E9#
-!!#7_!!iOS#QOf(!.XnH"96.As8N'!s7cQps54Ffrr<*"p](<on.5R!J-#]>!!%N<&,:X)"979Z!.Xbc
-n/m/cs53kW5PuV]%tFob^]4?Vr'.t-J.M[q!!",?5C`uh&-'EF!"]&nJ-Wk3s*t(L&-%+Z#J_G]J,fQSs*k"N^`WT,
-!!!9(rW!&95Q?66!!E9#!!C#$rr<$!"989!"2I/$!!!!$s82j!^jl at a!!!'"qu?]sJ,]KK!!3,p!!!"K
-rr<$!!<;fo!!%NKzs7cQo!.XtJ!!!$!p](9oJ,TEJ!!%ND!!!$!rVuou!.XbD!!*&uzJ,B9H
-!<<#u!!!!`qu?]ss8Duu!!#7]!!!$!rVuou!'gG_!!*&uz+8u6?!<<#u!!!!@rVuous8Duu!!",@!!!$!rVuou
-!$D4@!!*&uz+9)<@!<<#u!!!!@s*t(Ls8Duu!!", at J,fTLrVuou!'gL6!!*&uz5QAM!!<<#u
-!!!!`s1eU7s8Duu!!#7`huEb,rVuou!'gMA!!%NKzJ,eF,!.Y"K!!!"Ks6p!gJ,]KK!!%KJn,NH<
-rr<$!!.Ot;!!#7`zrr;`n!'gJ`!!!#uJ+s!D5Q?66!!)qHp](:Ys*t(L!W7HF!!", at J,fQMr'1)Z!$D5k!!!&p
-5PtK]&-'EF!!E!\rVup/s1eU7"8Eu;!!!9(^]4?>n/qZ1!!iP^!!!8n+9)<@"979Z!"[uurr<$$s6p!g
-+5d\0J,fWMn,NGQ^^pHq!!*&o!!#7!#QK;S!.XnH!<7QSs1eU75Q1W`rr<0$^]4?Vrr<<'!!E8:!!!Q0
-i#hjs"979Z!!iQ(s7cQps53kW!WW3"n,NLhn,NFgJ,fQ,!!3,h!!!!@s8RTL!<;Ng!!!9(rVuous7cQo!!%N,z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-96 93 true[1 0 0 1 -2019 -3487]@85 imagemask
-5QCc`s8V!Wz
-5QCc`s8W+Lz5QCc`s8W,sz!.Y%Ks8W-!J,fQL!$D7 at s8W-!n,NFg!!iQ(!!E9$qu?]s!!E9!
-!!!Q0s*t(L!!E9!!!!$!s53kW!!E8r!!!!@s6p!g!!3,p!!!!(s82is!!3,p!!!!"s8Duu!!3,pz
-J,b$!!!3,pz5QAM!!!3,pz+917!!!3,pz#QO8n!!3,pz"98,r!!3,pz!WW&t!!3,pz
-!<;rs!!3,pz!.XtJ!!3,pz!.Y"K!!3,pz!'gJ`!!3,pz!$D5k!!3,pz!$D6V
-!!3,pz!"]+F!!3,pz!!iP^!!3,pz!!iP^!!3,pz!!iPn!!3,pz!!E8j!!3,p
-z!!E8r!!3,pz!!3,p!!3,pz!!3,p!!3,pz!!3,t!!3,pz!!3,t!!3,pz!!*&s!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!%NJ!!3,pz
-!!%NJ!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!*'!!!3,pz!!*&u!!3,pz!!*&u!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!3-!!!3,pz!!3,t!!3,pz!!3,t!!3,pz
-!!E9!!!3,pz!!E9!!!3,pz!!E8r!!3,pz!!iQ!!!3,pz!!iQ!!!3,pz!"],!!!3,pz
-!"],!!!3,pz!$D7!!!3,pz!$D7!!!3,pz!'gM!!!3,pz!.Y$!!!3,pz!<<(L
-!!3,pz!<<'!!!3,pz!WW-!!!3,pz"989!!!3,pz#QO]%!!3,pz&-)D)!!3,p
-z+91g1!!3,pzJ,eF,!!3,pzs8Tk7!!3,p!!!!"s8N'!!!3,p!!!!(s8Duu!!3,p!!!!@s7cQo!!E8r!!!"Ks6p!g!!E9!!!!-$s1eU7!!iQ%!!", at rr<$!!"],0!!iQ(qu?]s
-!$D7 at s8W-!n,NFg!WW3"s8W-!J,fQL5QCc`s8W,oz5QCc`s8W+Lz5QCc`s8Tk7z~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2121 -3486]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-58 65 true[1 0 0 1 -2184 -3486]@85 imagemask
-!!!'"p](9o!!!Q0
-rr<$!!!#7`s1eU7!!*'!s53kW!!3-"s7cQo!!E9$s82is!"],0s8Duu!$D7 at s8N'!!$D7 at s8RTL!'gM`
-s8Tk7!.Y%H!'fBA!<<)W!!hun!<<(L!!D]j!WW0"!!)co!WW-!!!%BH"989!!!#+]"98,r!!"&?#QO8n
-!!!N0#QN]^!!!6(#QN]^!!!7S&-'EF!!!+O&-%.[!!!&8&-%.[!!!$"&,uV0z+9)<@z+9)<@z+8u6?
-z+8u6?z+8u6?z+8u6?z+8u6?z+8c*=z+8c*=z+8c*=z+8c*=
-z+8c*=z+8c*=z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z#Q+Q%
-z#Q=]'z#Q=]'z"9&9#!!2Qh"9&9#!!i9!!WN-"!"\u-!WN-"!"]&/!<3$!!$D1?!<7QL!$D4@!.TM!!'gJ`!'e7!!'gJ`!$C,!!'gG_!$C,!!'gG_!"\Q!!.XtJ!!i9!!.XnH!!E-!
-!.XbD!!)uu!<;Ng!!%M!!WV'X!!#7Q"96.:!!!Q0s8RTL!!!-$s8Duu!!!$!s7cQo!!!!@s1eU7~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -1413 -5707]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-40 120 true[1 0 0 1 -1483 -5686]@85 imagemask
-$ig8-!"Ju/!!!O[
-!!!!0huE`W"7Q9j!!2ut!!!#uz56(Z`!$?^k!!!Pf!!!!(n,NFg"8Dir!!2ut!!!#szrVuou
-!.OtK!!%M!!!!!`^]4?75MuMA!$C,!!!",1!!!!0p](9o&,6,)!"\u-!!!9'!!!!(rVuou#QFc(!!iN(
-!!!9(J,fQOs*t(L"96.:!!E8:!!!-$huE`Zs53kW"979Z!!3,h!!!'"n,NFhs6p!g!WVop!!3,p!!!'"p](9ps82is
-!WW&t!!3,t!!!$!qu?]ss8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&u!!!$!rr<$!s8N'!!<<'!
-!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!
-!!!$!rr<$!s8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&s!!!$!qu?]ts82is!WW&t!!3,p!!!'"p](9ps7cQo
-!WVWh!!3,h!!!'"n,NFhs53kW"979Z!!E8:!!!-$^]4?:s1eU7"93lO!!iOS!!!9(!!!!(rr<$!#Q=]'
-!"\u-!!!Q-!!!!0p](9o+7K71!$C\1!!",!!!!!`^]4?75JR7!!.TM!!!*$!!!!#u!!!!"qu?]s"8Dir
-!!D]j!!!8^!!!!0^]4?75C`_6!.FnJ!!)os!!!,r!!!!(huE`W&&8/F!"T&0!!!E-!!!!)z~>
-Q
-q[1 0 0 1 0 0]concat
-73 97 true[1 0 0 1 -2960 -5116]@85 imagemask
-!&+BQ&,lP/!!!!]
-!!%NKhuE`W!'UAbs8Vus!!!!`!!iQ(rr<$!!'e7 at s8W,7!!!!`i'6]qs53kW!'g7.^^'o7!!!!`rVqBM
-s82is!'gM`!!3-!!!!!`s8Duus8N'!!'gM_!!*'!J,fR6s8DuuJ,d:a!'gM]!!%NK^]4@!s82is5QBXA
-!'gM]!!#7`n,NGQs82is5QC3Q!'gM]!!#7`p](:Ys82is+92*9!'gM]!!", at qu?^]s82is+926=!'gM]!!", at qu?^]
-s82is+92<?!'gM]!!", at rVup_s82is&-)V/!'gM]!!!Q0rr<$`s82is&-)Y0!'gM]!!!Q0rr<$`s82is
-&-)Y0!'gM]!!!Q0rr<$`s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[
-!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6
-s82is&-)Z[!'gM]!!!Q0s*t)6s82is+92?@!'gM]!!", at rr<$`s82is+92?@!'gM]!!", at rr<$`s82is
-+92<?!'gM]!!", at rVup_s82is5QC]_!'gM]!!#7`rVup_s82is5QCW]!'gM]!!%NKqu?^]s82isJ,f9D
-!'gM_!!%NKp](:Ys8Duus8VQg!'gM`!!3-"n,NGQs8RTMs8V!W!'gM`^]XW:^]4@!s8V!fs8Tk7!'gM`pj`>DJ,fR6
-s8Duts8N'!!'gM]s8W,u!!!!`s87BHs82is!'gM]5QCcQ!!!!`s83E-s53kW!'gM]#QOgS!!!!`s82ot
-qu?]s!'gM]!"ZjF!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!#7`s82isz5QCc]z!!#7`s82isz5QCc]z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-40 120 true[1 0 0 1 -3037 -5095]@85 imagemask
-$ig8-!"Ju/!!!O[
-!!!!0huE`W"7Q9j!!2ut!!!#uz56(Z`!$?^k!!!Pf!!!!(n,NFg"8Dir!!2ut!!!#szrVuou
-!.OtK!!%M!!!!!`^]4?75MuMA!$C,!!!",1!!!!0p](9o&,6,)!"\u-!!!9'!!!!(rVuou#QFc(!!iN(
-!!!9(J,fQOs*t(L"96.:!!E8:!!!-$huE`Zs53kW"979Z!!3,h!!!'"n,NFhs6p!g!WVop!!3,p!!!'"p](9ps82is
-!WW&t!!3,t!!!$!qu?]ss8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&u!!!$!rr<$!s8N'!!<<'!
-!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!
-!!!$!rr<$!s8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&s!!!$!qu?]ts82is!WW&t!!3,p!!!'"p](9ps7cQo
-!WVWh!!3,h!!!'"n,NFhs53kW"979Z!!E8:!!!-$^]4?:s1eU7"93lO!!iOS!!!9(!!!!(rr<$!#Q=]'
-!"\u-!!!Q-!!!!0p](9o+7K71!$C\1!!",!!!!!`^]4?75JR7!!.TM!!!*$!!!!#u!!!!"qu?]s"8Dir
-!!D]j!!!8^!!!!0^]4?75C`_6!.FnJ!!)os!!!,r!!!!(huE`W&&8/F!"T&0!!!E-!!!!)z~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -1580 -4260]@85 imagemask
-!!!!0rVuou!!!$!
-s53kW!!!9(s82is!!", at s8N'!!!%NKs8RTL!!*'!s8V!W!!3-"s8VQg!!iQ(s8Vio!"],0s8W&u!$D7@
-rW3$!!$D7 at n,P\'!'gM`^]5I,!.Y%KJ,fhi!<<*!!!!,Z!<<)u!!!&h!WW2t!!!#W!WW2p!!!!a"98Dr
-z"98Djz#QOh^z#QOh^z#QOh>z&-)[Fz&-)[Fz&-)Z[z&-)Z[z&-)Z[
-z+92?@z+92?@z+92?@z+92?@z+92?@z+92?@z+92<?z+92<?
-z+92<?z+92<?z+92<?z+92<?z+92<?z&-)V/z&-)V/z&-)V/
-z&-)V/z#QOc'!!D]j#QOc'!"]&/#QOc'!$D4@"98?#!'gL6"98B$!'gL6"98B$!.Y$a!WW0"!.Y$a!WW0"!.Y$a!<<'!!.Y$a!.Y$!
-!.Y$a!.Y$!!.Y$a!'gL6!.Y$a!$D6V!.Y$a!"]+F!.Y$!!"]+f!.Y$!!!iP^!.Y"K!!3,h!.Y"K!!*&o
-!<<#u!!%NJ!WW&t!!", at L]@,L!!!Q0s8V!W!!!-$s8Tk7!!!$!s8N'!!!!!0s7cQozIfKHK~>
-Q
-q[1 0 0 1 0 0]concat
-40 120 true[1 0 0 1 -1643 -4239]@85 imagemask
-$ig8-!"Ju/!!!O[
-!!!!0huE`W"7Q9j!!2ut!!!#uz56(Z`!$?^k!!!Pf!!!!(n,NFg"8Dir!!2ut!!!#szrVuou
-!.OtK!!%M!!!!!`^]4?75MuMA!$C,!!!",1!!!!0p](9o&,6,)!"\u-!!!9'!!!!(rVuou#QFc(!!iN(
-!!!9(J,fQOs*t(L"96.:!!E8:!!!-$huE`Zs53kW"979Z!!3,h!!!'"n,NFhs6p!g!WVop!!3,p!!!'"p](9ps82is
-!WW&t!!3,t!!!$!qu?]ss8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&u!!!$!rr<$!s8N'!!<<'!
-!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!
-!!!$!rr<$!s8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&s!!!$!qu?]ts82is!WW&t!!3,p!!!'"p](9ps7cQo
-!WVWh!!3,h!!!'"n,NFhs53kW"979Z!!E8:!!!-$^]4?:s1eU7"93lO!!iOS!!!9(!!!!(rr<$!#Q=]'
-!"\u-!!!Q-!!!!0p](9o+7K71!$C\1!!",!!!!!`^]4?75JR7!!.TM!!!*$!!!!#u!!!!"qu?]s"8Dir
-!!D]j!!!8^!!!!0^]4?75C`_6!.FnJ!!)os!!!,r!!!!(huE`W&&8/F!"T&0!!!E-!!!!)z~>
-Q
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/frameset.eps b/ast-5.3-1/sun210_figures/frameset.eps
deleted file mode 100644
index 6d44d25..0000000
--- a/ast-5.3-1/sun210_figures/frameset.eps
+++ /dev/null
@@ -1,2990 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 107 108 516 547
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 17:14:16
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5153.75 4907.75 m
-5153.75 5184.95 4928.15 5410.55 4650.95 5410.55 c
-1635.35 5410.55 l
-1358.15 5410.55 1132.55 5184.95 1132.55 4907.75 c
-1132.55 1592.15 l
-1132.55 1314.95 1358.15 1089.35 1635.35 1089.35 c
-4650.95 1089.35 l
-4928.15 1089.35 5153.75 1314.95 5153.75 1592.15 c
-f*
-1 g
-5088.95 4964.15 m
-5088.95 5240.15 4864.55 5464.55 4588.55 5464.55 c
-1578.95 5464.55 l
-1302.95 5464.55 1078.55 5240.15 1078.55 4964.15 c
-1078.55 1654.55 l
-1078.55 1378.55 1302.95 1154.15 1578.95 1154.15 c
-4588.55 1154.15 l
-4864.55 1154.15 5088.95 1378.55 5088.95 1654.55 c
-f*
-8 w
-1 J
-1 j
-0 g
-5088.95 4964.15 m
-5088.95 5240.15 4864.55 5464.55 4588.55 5464.55 c
-1578.95 5464.55 l
-1302.95 5464.55 1078.55 5240.15 1078.55 4964.15 c
-1078.55 1654.55 l
-1078.55 1378.55 1302.95 1154.15 1578.95 1154.15 c
-4588.55 1154.15 l
-4864.55 1154.15 5088.95 1378.55 5088.95 1654.55 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1563.35 5256.95 l
-1451.75 5256.95 1360.55 5165.75 1360.55 5055.35 c
-1360.55 4917.35 l
-1360.55 4806.95 1451.75 4715.75 1563.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-f*
-0 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-h
-S
-0.201248 i
-1539.33 5152 m
-1425.22 5152 l
-1425.22 5147 l
-1439.11 5146.2 1443 5143.18 1443 5132.72 c
-1443 5035.32 l
-1443 5024.85 1440.17 5022.64 1425.22 5021.03 c
-1425.22 5016 l
-1497.67 5016 l
-1497.67 5021 l
-1479.15 5021.81 1476 5024.23 1476 5035.32 c
-1476 5082.21 l
-1496.22 5081.81 1503.55 5074.36 1506.32 5051.02 c
-1511.35 5051.02 l
-1511.35 5119.04 l
-1506.32 5119.04 l
-1502.76 5096.1 1495.82 5089.05 1476 5089.05 c
-1476 5135.74 l
-1476 5143.19 1478.52 5145 1488.41 5145 c
-1507.13 5145 1518.8 5141.64 1525.04 5134.74 c
-1529.47 5129.71 1531.68 5124.27 1534.5 5111.59 c
-1539.33 5111.59 l
-h
-1544.96 5016 m
-f*
-1589.19 5109 m
-1550.84 5109 l
-1550.84 5103.95 l
-1559.49 5102.74 1562 5100.12 1562 5092.07 c
-1562 5032.9 l
-1562 5024.65 1559.93 5022.44 1550.84 5020.83 c
-1550.84 5016 l
-1604.37 5016 l
-1604.37 5020.83 l
-1592.09 5021.63 1590 5024.25 1590 5036.73 c
-1590 5074.76 l
-1590 5085.23 1595.49 5093.88 1601.95 5093.88 c
-1603.56 5093.88 1605.37 5092.47 1607.59 5089.25 c
-1611.41 5083.82 1614.43 5082.01 1619.66 5082.01 c
-1627.11 5082.01 1632.34 5087.64 1632.34 5095.29 c
-1632.34 5104.55 1625.5 5111.41 1616.04 5111.41 c
-1606.1 5111.41 1598.54 5106.12 1589.19 5092.27 c
-h
-1634.35 5016 m
-f*
-1729.19 5028.88 m
-1727.18 5026.87 l
-1726.57 5026.26 1725.97 5026.06 1724.96 5026.06 c
-1722.15 5026.06 1721 5027.67 1721 5031.09 c
-1721 5083.62 l
-1721 5100.73 1705.6 5111.42 1680.89 5111.42 c
-1658.15 5111.42 1642.85 5101.06 1642.85 5085.83 c
-1642.85 5077.38 1647.69 5072.55 1655.94 5072.55 c
-1663.99 5072.55 1669.62 5077.38 1669.62 5084.22 c
-1669.62 5087.04 1668.61 5089.66 1666 5092.88 c
-1664.19 5094.89 1663.58 5096.1 1663.58 5097.3 c
-1663.58 5101.53 1669.02 5104.42 1676.26 5104.42 c
-1688.14 5104.42 1693.86 5099.08 1693.86 5087.04 c
-1693.86 5072.35 l
-1669.91 5065.1 1660.29 5061.48 1652.51 5056.45 c
-1643.46 5050.41 1639 5043.37 1639 5034.52 c
-1639 5022.24 1648.27 5013.18 1661.17 5013.18 c
-1672.84 5013.18 1682.1 5017.21 1693.17 5027.27 c
-1695.38 5017.01 1699.81 5013.18 1709.67 5013.18 c
-1718.32 5013.18 1724.56 5016.4 1732.21 5024.65 c
-h
-1693 5036.13 m
-1687.55 5029.89 1683.52 5027.47 1678.68 5027.47 c
-1672.64 5027.47 1668 5032.91 1668 5040.96 c
-1668 5052.63 1676.61 5060.88 1693 5065.31 c
-h
-1734.62 5016 m
-f*
-1776.4 5109 m
-1737.7 5109 l
-1737.7 5103.95 l
-1746.55 5102.74 1749 5100.32 1749 5092.07 c
-1749 5032.9 l
-1749 5024.65 1746.74 5022.44 1737.7 5020.83 c
-1737.7 5016 l
-1786 5016 l
-1786 5020.83 l
-1778.95 5021.84 1777 5024.65 1777 5032.3 c
-1777 5086.03 l
-1777 5087.04 1779.87 5090.66 1782.18 5092.88 c
-1786.4 5096.1 1790.02 5098.42 1793.65 5098.42 c
-1801.5 5098.42 1805 5093.59 1805 5081 c
-1805 5032.3 l
-1805 5024.05 1802.68 5021.43 1794.85 5020.83 c
-1794.85 5016 l
-1841.95 5016 l
-1841.95 5020.83 l
-1834.9 5021.64 1833 5024.65 1833 5032.3 c
-1833 5086.03 l
-1833 5087.04 1835.73 5090.46 1837.92 5092.68 c
-1842.35 5096.1 1845.97 5098.42 1849.59 5098.42 c
-1857.24 5098.42 1860 5093.38 1860 5081 c
-1860 5032.3 l
-1860 5023.85 1857.85 5021.43 1850.4 5020.83 c
-1850.4 5016 l
-1898.3 5016 l
-1898.3 5021 l
-1890.45 5021.4 1888 5023.78 1888 5032.3 c
-1888 5082.81 l
-1888 5100.12 1877.43 5111.42 1861.07 5111.42 c
-1849.59 5111.42 1841.95 5106.73 1831.48 5093.68 c
-1825.44 5106.36 1818.4 5111.42 1805.72 5111.42 c
-1792.95 5111.42 1783.98 5105.91 1776.4 5093.68 c
-h
-1901.64 5016 m
-f*
-1979.9 5041.16 m
-1971.65 5031.29 1965.61 5027.18 1956.96 5027.18 c
-1949.31 5027.18 1943.27 5030.77 1939.25 5037.94 c
-1935.43 5044.54 1933.82 5051.56 1933.01 5066 c
-1983.73 5066 l
-1982.52 5082.36 1979.5 5091.43 1973.26 5099.12 c
-1966.82 5106.96 1957.36 5111.42 1946.09 5111.42 c
-1920.94 5111.42 1904.03 5091.4 1904.03 5061.88 c
-1904.03 5032.5 1920.53 5013.18 1945.49 5013.18 c
-1961.79 5013.18 1971.65 5019.42 1984.73 5038.34 c
-h
-1932 5073 m
-1932.61 5096.96 1936.23 5104.42 1946.09 5104.42 c
-1951.93 5104.42 1955.55 5101.38 1957.16 5095.49 c
-1958.17 5091.67 1958.57 5086.03 1958.97 5075.77 c
-1958.97 5073 l
-h
-1988.35 5016 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -5016]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4722.95 4254.95 m
-4722.95 4366.55 4631.75 4457.75 4520.15 4457.75 c
-4023.35 4457.75 l
-3911.75 4457.75 3820.55 4366.55 3820.55 4254.95 c
-3820.55 4118.15 l
-3820.55 4006.55 3911.75 3915.35 4023.35 3915.35 c
-4520.15 3915.35 l
-4631.75 3915.35 4722.95 4006.55 4722.95 4118.15 c
-f*
-1 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-f*
-16 w
-0 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-h
-S
-0.201248 i
-3999.33 4353 m
-3885.22 4353 l
-3885.22 4348 l
-3899.11 4347.2 3903 4344.18 3903 4333.72 c
-3903 4236.32 l
-3903 4225.85 3900.17 4223.64 3885.22 4222.03 c
-3885.22 4217 l
-3957.67 4217 l
-3957.67 4222 l
-3939.15 4222.81 3936 4225.23 3936 4236.32 c
-3936 4283.21 l
-3956.22 4282.81 3963.55 4275.36 3966.32 4252.02 c
-3971.35 4252.02 l
-3971.35 4320.04 l
-3966.32 4320.04 l
-3962.76 4297.1 3955.82 4290.05 3936 4290.05 c
-3936 4336.74 l
-3936 4344.19 3938.52 4346 3948.41 4346 c
-3967.13 4346 3978.8 4342.64 3985.04 4335.74 c
-3989.47 4330.71 3991.68 4325.27 3994.5 4312.59 c
-3999.33 4312.59 l
-h
-4004.96 4217 m
-f*
-4049.19 4310 m
-4010.84 4310 l
-4010.84 4304.95 l
-4019.49 4303.74 4022 4301.12 4022 4293.07 c
-4022 4233.9 l
-4022 4225.65 4019.93 4223.44 4010.84 4221.83 c
-4010.84 4217 l
-4064.37 4217 l
-4064.37 4221.83 l
-4052.09 4222.63 4050 4225.25 4050 4237.73 c
-4050 4275.76 l
-4050 4286.23 4055.49 4294.88 4061.95 4294.88 c
-4063.56 4294.88 4065.37 4293.47 4067.59 4290.25 c
-4071.41 4284.82 4074.43 4283.01 4079.66 4283.01 c
-4087.11 4283.01 4092.34 4288.64 4092.34 4296.29 c
-4092.34 4305.55 4085.5 4312.41 4076.04 4312.41 c
-4066.1 4312.41 4058.54 4307.12 4049.19 4293.27 c
-h
-4094.35 4217 m
-f*
-4189.19 4229.88 m
-4187.18 4227.87 l
-4186.57 4227.26 4185.97 4227.06 4184.96 4227.06 c
-4182.15 4227.06 4181 4228.67 4181 4232.09 c
-4181 4284.62 l
-4181 4301.73 4165.6 4312.42 4140.89 4312.42 c
-4118.15 4312.42 4102.85 4302.06 4102.85 4286.83 c
-4102.85 4278.38 4107.69 4273.55 4115.94 4273.55 c
-4123.99 4273.55 4129.62 4278.38 4129.62 4285.22 c
-4129.62 4288.04 4128.61 4290.66 4126 4293.88 c
-4124.19 4295.89 4123.58 4297.1 4123.58 4298.3 c
-4123.58 4302.53 4129.02 4305.42 4136.26 4305.42 c
-4148.14 4305.42 4153.86 4300.08 4153.86 4288.04 c
-4153.86 4273.35 l
-4129.91 4266.1 4120.29 4262.48 4112.51 4257.45 c
-4103.46 4251.41 4099 4244.37 4099 4235.52 c
-4099 4223.24 4108.27 4214.18 4121.17 4214.18 c
-4132.84 4214.18 4142.1 4218.21 4153.17 4228.27 c
-4155.38 4218.01 4159.81 4214.18 4169.67 4214.18 c
-4178.32 4214.18 4184.56 4217.4 4192.21 4225.65 c
-h
-4153 4237.13 m
-4147.55 4230.89 4143.52 4228.47 4138.68 4228.47 c
-4132.64 4228.47 4128 4233.91 4128 4241.96 c
-4128 4253.63 4136.61 4261.88 4153 4266.31 c
-h
-4194.62 4217 m
-f*
-4236.4 4310 m
-4197.7 4310 l
-4197.7 4304.95 l
-4206.55 4303.74 4209 4301.32 4209 4293.07 c
-4209 4233.9 l
-4209 4225.65 4206.74 4223.44 4197.7 4221.83 c
-4197.7 4217 l
-4246 4217 l
-4246 4221.83 l
-4238.95 4222.84 4237 4225.65 4237 4233.3 c
-4237 4287.03 l
-4237 4288.04 4239.87 4291.66 4242.18 4293.88 c
-4246.4 4297.1 4250.02 4299.42 4253.65 4299.42 c
-4261.5 4299.42 4265 4294.59 4265 4282 c
-4265 4233.3 l
-4265 4225.05 4262.68 4222.43 4254.85 4221.83 c
-4254.85 4217 l
-4301.95 4217 l
-4301.95 4221.83 l
-4294.9 4222.64 4293 4225.65 4293 4233.3 c
-4293 4287.03 l
-4293 4288.04 4295.73 4291.46 4297.92 4293.68 c
-4302.35 4297.1 4305.97 4299.42 4309.59 4299.42 c
-4317.24 4299.42 4320 4294.38 4320 4282 c
-4320 4233.3 l
-4320 4224.85 4317.85 4222.43 4310.4 4221.83 c
-4310.4 4217 l
-4358.3 4217 l
-4358.3 4222 l
-4350.45 4222.4 4348 4224.78 4348 4233.3 c
-4348 4283.81 l
-4348 4301.12 4337.43 4312.42 4321.07 4312.42 c
-4309.59 4312.42 4301.95 4307.73 4291.48 4294.68 c
-4285.44 4307.36 4278.4 4312.42 4265.72 4312.42 c
-4252.95 4312.42 4243.98 4306.91 4236.4 4294.68 c
-h
-4361.64 4217 m
-f*
-4439.9 4242.16 m
-4431.65 4232.29 4425.61 4228.18 4416.96 4228.18 c
-4409.31 4228.18 4403.27 4231.77 4399.25 4238.94 c
-4395.43 4245.54 4393.82 4252.56 4393.01 4267 c
-4443.73 4267 l
-4442.52 4283.36 4439.5 4292.43 4433.26 4300.12 c
-4426.82 4307.96 4417.36 4312.42 4406.09 4312.42 c
-4380.94 4312.42 4364.03 4292.4 4364.03 4262.88 c
-4364.03 4233.5 4380.53 4214.18 4405.49 4214.18 c
-4421.79 4214.18 4431.65 4220.42 4444.73 4239.34 c
-h
-4392 4274 m
-4392.61 4297.96 4396.23 4305.42 4406.09 4305.42 c
-4411.93 4305.42 4415.55 4302.38 4417.16 4296.49 c
-4418.17 4292.67 4418.57 4287.03 4418.97 4276.77 c
-4418.97 4274 l
-h
-4448.35 4217 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4484 -4215]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-2447.75 1960.55 m
-2447.75 2070.95 2356.55 2162.15 2244.95 2162.15 c
-1749.35 2162.15 l
-1637.75 2162.15 1546.55 2070.95 1546.55 1960.55 c
-1546.55 1822.55 l
-1546.55 1712.15 1637.75 1620.95 1749.35 1620.95 c
-2244.95 1620.95 l
-2356.55 1620.95 2447.75 1712.15 2447.75 1822.55 c
-f*
-1 g
-2378.15 2016.95 m
-2378.15 2123.75 2289.35 2211.35 2180.15 2211.35 c
-1695.35 2211.35 l
-1586.15 2211.35 1497.35 2123.75 1497.35 2016.95 c
-1497.35 1884.95 l
-1497.35 1778.15 1586.15 1690.55 1695.35 1690.55 c
-2180.15 1690.55 l
-2289.35 1690.55 2378.15 1778.15 2378.15 1884.95 c
-f*
-0 g
-2378.15 2016.95 m
-2378.15 2123.75 2289.35 2211.35 2180.15 2211.35 c
-1695.35 2211.35 l
-1586.15 2211.35 1497.35 2123.75 1497.35 2016.95 c
-1497.35 1884.95 l
-1497.35 1778.15 1586.15 1690.55 1695.35 1690.55 c
-2180.15 1690.55 l
-2289.35 1690.55 2378.15 1778.15 2378.15 1884.95 c
-h
-S
-0.201248 i
-1725.33 2057 m
-1611.22 2057 l
-1611.22 2052 l
-1625.11 2051.2 1629 2048.18 1629 2037.72 c
-1629 1940.32 l
-1629 1929.85 1626.17 1927.64 1611.22 1926.03 c
-1611.22 1921 l
-1683.67 1921 l
-1683.67 1926 l
-1665.15 1926.81 1662 1929.23 1662 1940.32 c
-1662 1987.21 l
-1682.22 1986.81 1689.55 1979.36 1692.32 1956.02 c
-1697.35 1956.02 l
-1697.35 2024.04 l
-1692.32 2024.04 l
-1688.76 2001.1 1681.82 1994.05 1662 1994.05 c
-1662 2040.74 l
-1662 2048.19 1664.52 2050 1674.41 2050 c
-1693.13 2050 1704.8 2046.64 1711.04 2039.74 c
-1715.47 2034.71 1717.68 2029.27 1720.5 2016.59 c
-1725.33 2016.59 l
-h
-1730.96 1921 m
-f*
-1774.19 2014 m
-1735.84 2014 l
-1735.84 2008.95 l
-1744.49 2007.74 1747 2005.12 1747 1997.07 c
-1747 1937.9 l
-1747 1929.65 1744.93 1927.44 1735.84 1925.83 c
-1735.84 1921 l
-1789.37 1921 l
-1789.37 1925.83 l
-1777.09 1926.63 1775 1929.25 1775 1941.73 c
-1775 1979.76 l
-1775 1990.23 1780.49 1998.88 1786.95 1998.88 c
-1788.56 1998.88 1790.37 1997.47 1792.59 1994.25 c
-1796.41 1988.82 1799.43 1987.01 1804.66 1987.01 c
-1812.11 1987.01 1817.34 1992.64 1817.34 2000.29 c
-1817.34 2009.55 1810.5 2016.41 1801.04 2016.41 c
-1791.1 2016.41 1783.54 2011.12 1774.19 1997.27 c
-h
-1819.35 1921 m
-f*
-1914.19 1933.88 m
-1912.18 1931.87 l
-1911.57 1931.26 1910.97 1931.06 1909.96 1931.06 c
-1907.15 1931.06 1906 1932.67 1906 1936.09 c
-1906 1988.62 l
-1906 2005.73 1890.6 2016.42 1865.89 2016.42 c
-1843.15 2016.42 1827.85 2006.06 1827.85 1990.83 c
-1827.85 1982.38 1832.69 1977.55 1840.94 1977.55 c
-1848.99 1977.55 1854.62 1982.38 1854.62 1989.22 c
-1854.62 1992.04 1853.61 1994.66 1851 1997.88 c
-1849.19 1999.89 1848.58 2001.1 1848.58 2002.3 c
-1848.58 2006.53 1854.02 2009.42 1861.26 2009.42 c
-1873.14 2009.42 1878.86 2004.08 1878.86 1992.04 c
-1878.86 1977.35 l
-1854.91 1970.1 1845.29 1966.48 1837.51 1961.45 c
-1828.46 1955.41 1824 1948.37 1824 1939.52 c
-1824 1927.24 1833.27 1918.18 1846.17 1918.18 c
-1857.84 1918.18 1867.1 1922.21 1878.17 1932.27 c
-1880.38 1922.01 1884.81 1918.18 1894.67 1918.18 c
-1903.32 1918.18 1909.56 1921.4 1917.21 1929.65 c
-h
-1878 1941.13 m
-1872.55 1934.89 1868.52 1932.47 1863.68 1932.47 c
-1857.64 1932.47 1853 1937.91 1853 1945.96 c
-1853 1957.63 1861.61 1965.88 1878 1970.31 c
-h
-1919.62 1921 m
-f*
-1961.4 2014 m
-1922.7 2014 l
-1922.7 2008.95 l
-1931.55 2007.74 1934 2005.32 1934 1997.07 c
-1934 1937.9 l
-1934 1929.65 1931.74 1927.44 1922.7 1925.83 c
-1922.7 1921 l
-1971 1921 l
-1971 1925.83 l
-1963.95 1926.84 1962 1929.65 1962 1937.3 c
-1962 1991.03 l
-1962 1992.04 1964.87 1995.66 1967.18 1997.88 c
-1971.4 2001.1 1975.02 2003.42 1978.65 2003.42 c
-1986.5 2003.42 1990 1998.59 1990 1986 c
-1990 1937.3 l
-1990 1929.05 1987.68 1926.43 1979.85 1925.83 c
-1979.85 1921 l
-2026.95 1921 l
-2026.95 1925.83 l
-2019.9 1926.64 2018 1929.65 2018 1937.3 c
-2018 1991.03 l
-2018 1992.04 2020.73 1995.46 2022.92 1997.68 c
-2027.35 2001.1 2030.97 2003.42 2034.59 2003.42 c
-2042.24 2003.42 2045 1998.38 2045 1986 c
-2045 1937.3 l
-2045 1928.85 2042.85 1926.43 2035.4 1925.83 c
-2035.4 1921 l
-2083.3 1921 l
-2083.3 1926 l
-2075.45 1926.4 2073 1928.78 2073 1937.3 c
-2073 1987.81 l
-2073 2005.12 2062.43 2016.42 2046.07 2016.42 c
-2034.59 2016.42 2026.95 2011.73 2016.48 1998.68 c
-2010.44 2011.36 2003.4 2016.42 1990.72 2016.42 c
-1977.95 2016.42 1968.98 2010.91 1961.4 1998.68 c
-h
-2086.64 1921 m
-f*
-2165.9 1946.16 m
-2157.65 1936.29 2151.61 1932.18 2142.96 1932.18 c
-2135.31 1932.18 2129.27 1935.77 2125.25 1942.94 c
-2121.43 1949.54 2119.82 1956.56 2119.01 1971 c
-2169.73 1971 l
-2168.52 1987.36 2165.5 1996.43 2159.26 2004.12 c
-2152.82 2011.96 2143.36 2016.42 2132.09 2016.42 c
-2106.94 2016.42 2090.03 1996.4 2090.03 1966.88 c
-2090.03 1937.5 2106.53 1918.18 2131.49 1918.18 c
-2147.79 1918.18 2157.65 1924.42 2170.73 1943.34 c
-h
-2118 1978 m
-2118.61 2001.96 2122.23 2009.42 2132.09 2009.42 c
-2137.93 2009.42 2141.55 2006.38 2143.16 2000.49 c
-2144.17 1996.67 2144.57 1991.03 2144.97 1980.77 c
-2144.97 1978 l
-h
-2174.35 1921 m
-f*
-q[1 0 0 1 0 0]concat
-66 97 true[1 0 0 1 -2209 -1921]@85 imagemask
-z"98D:z
-!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z
-"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$
-s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!
-s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!
-s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7++O=k"98D:!"XS[!!E9$
-^]4n\!!!-$s1eU>huE`Zs8Tk7"7Q9j"98D:!!D]j!!E9$^]4E1!!!-$s1eU7qu?^!s8Tk7!;lfs"98D:!!%HJ!!E9$
-^]4@!!!!-$s1eU75C`_9s8Tk7!$?^k"98D:!!!PF!!E9$^]4?FhuElZs1eU7#Oh]qs8Tk7!!D]j"98D:
-!!!,r!!E9$^]4?8qu?j!s1eU7!;lg!s8Tk7!!%HJ"98D:!!!"K!!E9$^]4?75C`k9s1eU7!$?^ns8Tk7
-!!"+V"98D:!!!!0huj#Z^]4?7#N,^as1eU7!!D]ms8Tk7!!!,r"98D:!!!!"qud!!^]4?7!;ls!s1eU7!!%HMs8Tk7
-!!!"K"98D:z56Lrc^]4?7!$?jns1eU7!!!PIs8Tk7!!!!0j8].pz#NPja^]4?7!!Dims1eU7
-!!!&ss8Tk7!!!!"qu?]3z!<<*!^]4?7!!%NKs1eU7!!!!`s8Tk7z5QCc!z!$D7@^]4?7
-!!!Q0s1eU7!!!!(s8Tk7z#QOh>z!!E9$^]4?7!!!'"s1eU7zs8Tk7z!<<)7z!!%NK^]4?7
-!!!!`s1eU7z+90+Vz!$D6Vz!!!Q0^]4?7!!!!(s1eU7z"96.:z!!E8:!!~>
-Q
-1 i
-0.564706 g
-3804.95 3548.15 m
-3804.95 3658.55 3713.75 3749.75 3602.15 3749.75 c
-3106.55 3749.75 l
-2994.95 3749.75 2903.75 3658.55 2903.75 3548.15 c
-2903.75 3410.15 l
-2903.75 3299.75 2994.95 3208.55 3106.55 3208.55 c
-3602.15 3208.55 l
-3713.75 3208.55 3804.95 3299.75 3804.95 3410.15 c
-f*
-1 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-f*
-8 w
-0 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-h
-S
-0.201248 i
-3082.33 3645 m
-2968.22 3645 l
-2968.22 3640 l
-2982.11 3639.2 2986 3636.18 2986 3625.72 c
-2986 3528.32 l
-2986 3517.85 2983.17 3515.64 2968.22 3514.03 c
-2968.22 3509 l
-3040.67 3509 l
-3040.67 3514 l
-3022.15 3514.81 3019 3517.23 3019 3528.32 c
-3019 3575.21 l
-3039.22 3574.81 3046.55 3567.36 3049.32 3544.02 c
-3054.35 3544.02 l
-3054.35 3612.04 l
-3049.32 3612.04 l
-3045.76 3589.1 3038.82 3582.05 3019 3582.05 c
-3019 3628.74 l
-3019 3636.19 3021.52 3638 3031.41 3638 c
-3050.13 3638 3061.8 3634.64 3068.04 3627.74 c
-3072.47 3622.71 3074.68 3617.27 3077.5 3604.59 c
-3082.33 3604.59 l
-h
-3087.96 3509 m
-f*
-3131.19 3602 m
-3092.84 3602 l
-3092.84 3596.95 l
-3101.49 3595.74 3104 3593.12 3104 3585.07 c
-3104 3525.9 l
-3104 3517.65 3101.93 3515.44 3092.84 3513.83 c
-3092.84 3509 l
-3146.37 3509 l
-3146.37 3513.83 l
-3134.09 3514.63 3132 3517.25 3132 3529.73 c
-3132 3567.76 l
-3132 3578.23 3137.49 3586.88 3143.95 3586.88 c
-3145.56 3586.88 3147.37 3585.47 3149.59 3582.25 c
-3153.41 3576.82 3156.43 3575.01 3161.66 3575.01 c
-3169.11 3575.01 3174.34 3580.64 3174.34 3588.29 c
-3174.34 3597.55 3167.5 3604.41 3158.04 3604.41 c
-3148.1 3604.41 3140.54 3599.12 3131.19 3585.27 c
-h
-3176.35 3509 m
-f*
-3271.19 3521.88 m
-3269.18 3519.87 l
-3268.57 3519.26 3267.97 3519.06 3266.96 3519.06 c
-3264.15 3519.06 3263 3520.67 3263 3524.09 c
-3263 3576.62 l
-3263 3593.73 3247.6 3604.42 3222.89 3604.42 c
-3200.15 3604.42 3184.85 3594.06 3184.85 3578.83 c
-3184.85 3570.38 3189.69 3565.55 3197.94 3565.55 c
-3205.99 3565.55 3211.62 3570.38 3211.62 3577.22 c
-3211.62 3580.04 3210.61 3582.66 3208 3585.88 c
-3206.19 3587.89 3205.58 3589.1 3205.58 3590.3 c
-3205.58 3594.53 3211.02 3597.42 3218.26 3597.42 c
-3230.14 3597.42 3235.86 3592.08 3235.86 3580.04 c
-3235.86 3565.35 l
-3211.91 3558.1 3202.29 3554.48 3194.51 3549.45 c
-3185.46 3543.41 3181 3536.37 3181 3527.52 c
-3181 3515.24 3190.27 3506.18 3203.17 3506.18 c
-3214.84 3506.18 3224.1 3510.21 3235.17 3520.27 c
-3237.38 3510.01 3241.81 3506.18 3251.67 3506.18 c
-3260.32 3506.18 3266.56 3509.4 3274.21 3517.65 c
-h
-3235 3529.13 m
-3229.55 3522.89 3225.52 3520.47 3220.68 3520.47 c
-3214.64 3520.47 3210 3525.91 3210 3533.96 c
-3210 3545.63 3218.61 3553.88 3235 3558.31 c
-h
-3276.62 3509 m
-f*
-3318.4 3602 m
-3279.7 3602 l
-3279.7 3596.95 l
-3288.55 3595.74 3291 3593.32 3291 3585.07 c
-3291 3525.9 l
-3291 3517.65 3288.74 3515.44 3279.7 3513.83 c
-3279.7 3509 l
-3328 3509 l
-3328 3513.83 l
-3320.95 3514.84 3319 3517.65 3319 3525.3 c
-3319 3579.03 l
-3319 3580.04 3321.87 3583.66 3324.18 3585.88 c
-3328.4 3589.1 3332.02 3591.42 3335.65 3591.42 c
-3343.5 3591.42 3347 3586.59 3347 3574 c
-3347 3525.3 l
-3347 3517.05 3344.68 3514.43 3336.85 3513.83 c
-3336.85 3509 l
-3383.95 3509 l
-3383.95 3513.83 l
-3376.9 3514.64 3375 3517.65 3375 3525.3 c
-3375 3579.03 l
-3375 3580.04 3377.73 3583.46 3379.92 3585.68 c
-3384.35 3589.1 3387.97 3591.42 3391.59 3591.42 c
-3399.24 3591.42 3402 3586.38 3402 3574 c
-3402 3525.3 l
-3402 3516.85 3399.85 3514.43 3392.4 3513.83 c
-3392.4 3509 l
-3440.3 3509 l
-3440.3 3514 l
-3432.45 3514.4 3430 3516.78 3430 3525.3 c
-3430 3575.81 l
-3430 3593.12 3419.43 3604.42 3403.07 3604.42 c
-3391.59 3604.42 3383.95 3599.73 3373.48 3586.68 c
-3367.44 3599.36 3360.4 3604.42 3347.72 3604.42 c
-3334.95 3604.42 3325.98 3598.91 3318.4 3586.68 c
-h
-3443.64 3509 m
-f*
-3523.9 3534.16 m
-3515.65 3524.29 3509.61 3520.18 3500.96 3520.18 c
-3493.31 3520.18 3487.27 3523.77 3483.25 3530.94 c
-3479.43 3537.54 3477.82 3544.56 3477.01 3559 c
-3527.73 3559 l
-3526.52 3575.36 3523.5 3584.43 3517.26 3592.12 c
-3510.82 3599.96 3501.36 3604.42 3490.09 3604.42 c
-3464.94 3604.42 3448.03 3584.4 3448.03 3554.88 c
-3448.03 3525.5 3464.53 3506.18 3489.49 3506.18 c
-3505.79 3506.18 3515.65 3512.42 3528.73 3531.34 c
-h
-3476 3566 m
-3476.61 3589.96 3480.23 3597.42 3490.09 3597.42 c
-3495.93 3597.42 3499.55 3594.38 3501.16 3588.49 c
-3502.17 3584.67 3502.57 3579.03 3502.97 3568.77 c
-3502.97 3566 l
-h
-3532.35 3509 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -3509]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-0.564706 g
-3962.15 2110.55 m
-3962.15 2220.95 3870.95 2312.15 3759.35 2312.15 c
-3263.75 2312.15 l
-3152.15 2312.15 3060.95 2220.95 3060.95 2110.55 c
-3060.95 1972.55 l
-3060.95 1862.15 3152.15 1770.95 3263.75 1770.95 c
-3759.35 1770.95 l
-3870.95 1770.95 3962.15 1862.15 3962.15 1972.55 c
-f*
-1 g
-3897.35 2168.15 m
-3897.35 2277.35 3808.55 2366.15 3698.15 2366.15 c
-3207.35 2366.15 l
-3095.75 2366.15 3006.95 2277.35 3006.95 2168.15 c
-3006.95 2033.75 l
-3006.95 1924.55 3095.75 1835.75 3207.35 1835.75 c
-3696.95 1835.75 l
-3808.55 1835.75 3897.35 1924.55 3897.35 2033.75 c
-f*
-0 g
-3897.35 2168.15 m
-3897.35 2277.35 3808.55 2366.15 3698.15 2366.15 c
-3207.35 2366.15 l
-3095.75 2366.15 3006.95 2277.35 3006.95 2168.15 c
-3006.95 2033.75 l
-3006.95 1924.55 3095.75 1835.75 3207.35 1835.75 c
-3696.95 1835.75 l
-3808.55 1835.75 3897.35 1924.55 3897.35 2033.75 c
-h
-S
-0.201248 i
-3239.33 2207 m
-3125.22 2207 l
-3125.22 2202 l
-3139.11 2201.2 3143 2198.18 3143 2187.72 c
-3143 2090.32 l
-3143 2079.85 3140.17 2077.64 3125.22 2076.03 c
-3125.22 2071 l
-3197.67 2071 l
-3197.67 2076 l
-3179.15 2076.81 3176 2079.23 3176 2090.32 c
-3176 2137.21 l
-3196.22 2136.81 3203.55 2129.36 3206.32 2106.02 c
-3211.35 2106.02 l
-3211.35 2174.04 l
-3206.32 2174.04 l
-3202.76 2151.1 3195.82 2144.05 3176 2144.05 c
-3176 2190.74 l
-3176 2198.19 3178.52 2200 3188.41 2200 c
-3207.13 2200 3218.8 2196.64 3225.04 2189.74 c
-3229.47 2184.71 3231.68 2179.27 3234.5 2166.59 c
-3239.33 2166.59 l
-h
-3244.96 2071 m
-f*
-3289.19 2164 m
-3250.84 2164 l
-3250.84 2158.95 l
-3259.49 2157.74 3262 2155.12 3262 2147.07 c
-3262 2087.9 l
-3262 2079.65 3259.93 2077.44 3250.84 2075.83 c
-3250.84 2071 l
-3304.37 2071 l
-3304.37 2075.83 l
-3292.09 2076.63 3290 2079.25 3290 2091.73 c
-3290 2129.76 l
-3290 2140.23 3295.49 2148.88 3301.95 2148.88 c
-3303.56 2148.88 3305.37 2147.47 3307.59 2144.25 c
-3311.41 2138.82 3314.43 2137.01 3319.66 2137.01 c
-3327.11 2137.01 3332.34 2142.64 3332.34 2150.29 c
-3332.34 2159.55 3325.5 2166.41 3316.04 2166.41 c
-3306.1 2166.41 3298.54 2161.12 3289.19 2147.27 c
-h
-3334.35 2071 m
-f*
-3428.19 2083.88 m
-3426.18 2081.87 l
-3425.57 2081.26 3424.97 2081.06 3423.96 2081.06 c
-3421.15 2081.06 3420 2082.67 3420 2086.09 c
-3420 2138.62 l
-3420 2155.73 3404.6 2166.42 3379.89 2166.42 c
-3357.15 2166.42 3341.85 2156.06 3341.85 2140.83 c
-3341.85 2132.38 3346.69 2127.55 3354.94 2127.55 c
-3362.99 2127.55 3368.62 2132.38 3368.62 2139.22 c
-3368.62 2142.04 3367.61 2144.66 3365 2147.88 c
-3363.19 2149.89 3362.58 2151.1 3362.58 2152.3 c
-3362.58 2156.53 3368.02 2159.42 3375.26 2159.42 c
-3387.14 2159.42 3392.86 2154.08 3392.86 2142.04 c
-3392.86 2127.35 l
-3368.91 2120.1 3359.29 2116.48 3351.51 2111.45 c
-3342.46 2105.41 3338 2098.37 3338 2089.52 c
-3338 2077.24 3347.27 2068.18 3360.17 2068.18 c
-3371.84 2068.18 3381.1 2072.21 3392.17 2082.27 c
-3394.38 2072.01 3398.81 2068.18 3408.67 2068.18 c
-3417.32 2068.18 3423.56 2071.4 3431.21 2079.65 c
-h
-3392 2091.13 m
-3386.55 2084.89 3382.52 2082.47 3377.68 2082.47 c
-3371.64 2082.47 3367 2087.91 3367 2095.96 c
-3367 2107.63 3375.61 2115.88 3392 2120.31 c
-h
-3433.62 2071 m
-f*
-3476.4 2164 m
-3437.7 2164 l
-3437.7 2158.95 l
-3446.55 2157.74 3449 2155.32 3449 2147.07 c
-3449 2087.9 l
-3449 2079.65 3446.74 2077.44 3437.7 2075.83 c
-3437.7 2071 l
-3486 2071 l
-3486 2075.83 l
-3478.95 2076.84 3477 2079.65 3477 2087.3 c
-3477 2141.03 l
-3477 2142.04 3479.87 2145.66 3482.18 2147.88 c
-3486.4 2151.1 3490.02 2153.42 3493.65 2153.42 c
-3501.5 2153.42 3505 2148.59 3505 2136 c
-3505 2087.3 l
-3505 2079.05 3502.68 2076.43 3494.85 2075.83 c
-3494.85 2071 l
-3541.95 2071 l
-3541.95 2075.83 l
-3534.9 2076.64 3533 2079.65 3533 2087.3 c
-3533 2141.03 l
-3533 2142.04 3535.73 2145.46 3537.92 2147.68 c
-3542.35 2151.1 3545.97 2153.42 3549.59 2153.42 c
-3557.24 2153.42 3560 2148.38 3560 2136 c
-3560 2087.3 l
-3560 2078.85 3557.85 2076.43 3550.4 2075.83 c
-3550.4 2071 l
-3598.3 2071 l
-3598.3 2076 l
-3590.45 2076.4 3588 2078.78 3588 2087.3 c
-3588 2137.81 l
-3588 2155.12 3577.43 2166.42 3561.07 2166.42 c
-3549.59 2166.42 3541.95 2161.73 3531.48 2148.68 c
-3525.44 2161.36 3518.4 2166.42 3505.72 2166.42 c
-3492.95 2166.42 3483.98 2160.91 3476.4 2148.68 c
-h
-3601.64 2071 m
-f*
-3680.9 2096.16 m
-3672.65 2086.29 3666.61 2082.18 3657.96 2082.18 c
-3650.31 2082.18 3644.27 2085.77 3640.25 2092.94 c
-3636.43 2099.54 3634.82 2106.56 3634.01 2121 c
-3684.73 2121 l
-3683.52 2137.36 3680.5 2146.43 3674.26 2154.12 c
-3667.82 2161.96 3658.36 2166.42 3647.09 2166.42 c
-3621.94 2166.42 3605.03 2146.4 3605.03 2116.88 c
-3605.03 2087.5 3621.53 2068.18 3646.49 2068.18 c
-3662.79 2068.18 3672.65 2074.42 3685.73 2093.34 c
-h
-3633 2128 m
-3633.61 2151.96 3637.23 2159.42 3647.09 2159.42 c
-3652.93 2159.42 3656.55 2156.38 3658.16 2150.49 c
-3659.17 2146.67 3659.57 2141.03 3659.97 2130.77 c
-3659.97 2128 l
-h
-3689.35 2071 m
-f*
-q[1 0 0 1 0 0]concat
-66 96 true[1 0 0 1 -3723 -2070]@85 imagemask
-!!*'!z!!!9(
-s7cQo!!!!`s8W*!zs8W-!^]4?7!WW3"s7cQo!!E9$s8W&u!!!9(s8W-!!!!!0s8W-!s1eU7&-)\0
-s8V!W!$D7 at s56-2!!", at s8N'(p](:9s8Vus!W2ot+92B1!!)uu!$D7 at huEb,!!", at s*t(L5C`_Es8N'!
-!'e7!&-)P-!!"+V!!iQ!!!!!@huElZhuE`W+5d,"s*t(L!"\Q!!&srY!!!Q!z!!!!0p](9oz&,6,)z
-!"\i)z!!!Q-z!!!!0qu?]sz&,ZD-z!$D+=z!!",?z!!!!@rVuouz
-5Q1W_z!'gG_z!!%NJz!!!$!rVuou!!!!"s8Duuz"98?#z!!iQ'z!!!Q0
-rVuou!!!!@s8DuuzJ,fEHz!<<)sz!!E9$qu?]s!!", at s82is!!!$!s8Vio!!!!(s8W,ozJ,fQK
-p](9o5QCc`s6p!hs8W-!s8VQg!WW3"s8W,W!!*'!s8W-!huEcWs8W-!s1eU7s8W-!s8RTL!.Y%Ks8W+L
-!!%NKs8W-!!!!"Ks8W-!rVuouJ,fQKs82is!'gM`s8Vio!!#7`s8W,g!!!!`s8W-!^]4?7+92B at s*t(L
-!$D7 at s8Duu!!", at s8Vio!!!!@s8W,Wz&-)\0z!"],0n,NFg!!!Q0qu?]s!!!!0^]4?7z#J^<>z
-!!g:>z!!!8^z!!!!$huE`Wz"5j.Zz!!D-Zz!!!,jz!!!!"n,NFgz
-!Up'hz!!2Qhz!!!#ozzs8W-!s6p!g!<<*!s8VQg!!*'!s8W,o!!!"Ks8W-!p](9o
-J,fQKs7cQo!.Y%Ks8Vus!!#7`s8W,s!!!!`s8W-!qu?]s5QCc`s8Duu!'gM`s8W&u!!", at s8W,u!!!!@
-s8W-!rr<$!+92B at s8N'!!$D7 at s8W*!!!!Q0s8W-!J,fQ[s8W-!s*t(L&-)\0s8RTL!!iQ(s8W,7~>
-Q
-1 i
-1751.75 4750.55 m
-1751.75 4758.95 1751.75 4758.95 1751.75 4750.55 c
-1751.75 4602.95 1791.35 4461.35 1863.35 4360.55 c
-S
-1804.55 4366.55 m
-1853.75 4382.15 l
-1878.95 4427.75 l
-1940.15 4280.15 l
-f*
-2244.95 3784.55 m
-2334.95 3666.95 2519.75 3582.95 2740.55 3561.35 c
-S
-2699.75 3518.15 m
-2721.35 3564.95 l
-2705.75 3612.95 l
-2854.55 3556.55 l
-f*
-2855.75 3413.75 m
-2625.35 3369.35 2448.95 3267.35 2384.15 3140.15 c
-S
-2360.15 3190.55 m
-2399.75 3158.15 l
-2450.15 3160.55 l
-2357.75 3030.95 l
-f*
-2178.95 2306.15 m
-2232.95 2368.55 2274.95 2441.75 2302.55 2520.95 c
-S
-2168.15 2369.75 m
-2189.75 2322.95 l
-2237.75 2303.75 l
-2097.35 2226.95 l
-f*
-2831.75 5164.55 m
-2729.75 5264.15 2584.55 5321.75 2430.95 5321.75 c
-2326.55 5321.75 2224.55 5295.35 2136.95 5244.95 c
-S
-2766.95 5158.55 m
-2814.95 5174.15 l
-2838.95 5219.75 l
-2902.55 5073.35 l
-f*
-3186.95 4588.55 m
-3275.75 4414.55 3440.15 4289.75 3635.75 4250.15 c
-S
-3591.35 4210.55 m
-3616.55 4256.15 l
-3604.55 4306.55 l
-3748.55 4235.75 l
-f*
-3302.15 3256.55 m
-3302.15 3262.55 3302.15 3262.55 3302.15 3255.35 c
-3302.15 3064.55 3456.95 2896.55 3682.55 2846.15 c
-S
-3638.15 2810.15 m
-3664.55 2853.35 l
-3654.95 2902.55 l
-3797.75 2830.55 l
-f*
-4030.55 2122.55 m
-4202.15 2176.55 4323.35 2344.55 4332.95 2540.15 c
-S
-4058.15 2181.35 m
-4048.55 2130.95 l
-4076.15 2088.95 l
-3917.75 2105.75 l
-f*
-0.564706 g
-3638.15 4764.95 m
-3503.75 4800.95 l
-3599.75 4857.35 l
-3446.15 4865.75 l
-3488.15 4936.55 l
-3340.55 4916.15 l
-3323.75 4986.95 l
-3203.75 4942.55 l
-3128.15 5006.15 l
-3052.55 4942.55 l
-2932.55 4986.95 l
-2914.55 4916.15 l
-2765.75 4936.55 l
-2810.15 4865.75 l
-2656.55 4857.35 l
-2752.55 4800.95 l
-2616.95 4764.95 l
-2752.55 4730.15 l
-2656.55 4673.75 l
-2810.15 4664.15 l
-2765.75 4594.55 l
-2914.55 4614.95 l
-2932.55 4542.95 l
-3052.55 4588.55 l
-3128.15 4524.95 l
-3203.75 4588.55 l
-3323.75 4542.95 l
-3340.55 4614.95 l
-3488.15 4594.55 l
-3446.15 4664.15 l
-3599.75 4673.75 l
-3503.75 4730.15 l
-f*
-1 g
-3578.15 4824.95 m
-3443.75 4860.95 l
-3539.75 4917.35 l
-3386.15 4925.75 l
-3428.15 4996.55 l
-3280.55 4976.15 l
-3263.75 5046.95 l
-3143.75 5002.55 l
-3068.15 5066.15 l
-2992.55 5002.55 l
-2872.55 5046.95 l
-2854.55 4976.15 l
-2705.75 4996.55 l
-2750.15 4925.75 l
-2596.55 4917.35 l
-2692.55 4860.95 l
-2556.95 4824.95 l
-2692.55 4790.15 l
-2596.55 4733.75 l
-2750.15 4724.15 l
-2705.75 4654.55 l
-2854.55 4674.95 l
-2872.55 4602.95 l
-2992.55 4648.55 l
-3068.15 4584.95 l
-3143.75 4648.55 l
-3263.75 4602.95 l
-3280.55 4674.95 l
-3428.15 4654.55 l
-3386.15 4724.15 l
-3539.75 4733.75 l
-3443.75 4790.15 l
-f*
-0 g
-3578.15 4824.95 m
-3443.75 4860.95 l
-3539.75 4917.35 l
-3386.15 4925.75 l
-3428.15 4996.55 l
-3280.55 4976.15 l
-3263.75 5046.95 l
-3143.75 5002.55 l
-3068.15 5066.15 l
-2992.55 5002.55 l
-2872.55 5046.95 l
-2854.55 4976.15 l
-2705.75 4996.55 l
-2750.15 4925.75 l
-2596.55 4917.35 l
-2692.55 4860.95 l
-2556.95 4824.95 l
-2692.55 4790.15 l
-2596.55 4733.75 l
-2750.15 4724.15 l
-2705.75 4654.55 l
-2854.55 4674.95 l
-2872.55 4602.95 l
-2992.55 4648.55 l
-3068.15 4584.95 l
-3143.75 4648.55 l
-3263.75 4602.95 l
-3280.55 4674.95 l
-3428.15 4654.55 l
-3386.15 4724.15 l
-3539.75 4733.75 l
-3443.75 4790.15 l
-3578.15 4824.95 l
-3539.75 4824.95 l
-3417.35 4793.75 l
-3506.15 4740.95 l
-3368.15 4733.75 l
-3408.95 4667.75 l
-3273.35 4685.75 l
-3256.55 4617.35 l
-3141.35 4659.35 l
-3068.15 4596.95 l
-2994.95 4659.35 l
-2879.75 4617.35 l
-2861.75 4685.75 l
-2726.15 4667.75 l
-2766.95 4733.75 l
-2630.15 4740.95 l
-2718.95 4793.75 l
-2596.55 4824.95 l
-2717.75 4857.35 l
-2630.15 4910.15 l
-2766.95 4917.35 l
-2726.15 4983.35 l
-2861.75 4964.15 l
-2879.75 5033.75 l
-2994.95 4990.55 l
-3068.15 5052.95 l
-3141.35 4990.55 l
-3256.55 5033.75 l
-3273.35 4964.15 l
-3408.95 4983.35 l
-3368.15 4917.35 l
-3506.15 4910.15 l
-3417.35 4857.35 l
-3539.75 4824.95 l
-3578.15 4824.95 l
-f*
-0.2 i
-2890.08 4876.76 m
-2870.08 4802.52 l
-2867.52 4793.88 2864.48 4791.64 2854.08 4791 c
-2854.08 4787 l
-2904 4787 l
-2904 4791 l
-2894.72 4791.48 2892.48 4792.76 2892.48 4797.88 c
-2892.48 4799.64 2892.8 4801.4 2893.76 4805.08 c
-2893.92 4805.88 l
-2894.08 4806.68 l
-2913.76 4878.52 l
-2916.16 4886.84 2918.56 4889.08 2926.72 4890.04 c
-2926.72 4894 l
-2892.8 4894 l
-2843.2 4817.24 l
-2834.56 4894 l
-2799.2 4894 l
-2799.2 4890 l
-2809.28 4889.52 2810.72 4888.89 2810.72 4884.44 c
-2810.72 4882.2 2810.08 4879.32 2808.96 4875.16 c
-2791.52 4815.48 l
-2785.12 4794.68 2784 4792.92 2775.36 4791 c
-2775.36 4787 l
-2808.48 4787 l
-2808.48 4791 l
-2798.24 4792.28 2795.68 4794.2 2795.68 4800.76 c
-2795.68 4803.48 2796.48 4807.48 2798.72 4815.48 c
-2814.88 4874.52 l
-2825.6 4785.08 l
-2830.08 4785.08 l
-h
-2922.24 4787 m
-f*
-2991.44 4807.32 m
-2984.88 4798.52 2982.48 4795.76 2979.92 4795.76 c
-2978.64 4795.76 2978 4796.86 2978 4798.52 c
-2978 4802.52 2979.44 4809.08 2983.44 4822.2 c
-2994.8 4859.96 l
-2977.04 4858.84 l
-2974.16 4849.4 l
-2972.72 4857.56 2969.2 4861.08 2962.32 4861.08 c
-2942.64 4861.08 2919 4830.27 2919 4805.24 c
-2919 4793.08 2925.74 4784.92 2935.92 4784.92 c
-2945.68 4784.92 2953.04 4790.68 2962.16 4806.04 c
-2960.24 4799.48 2960 4797.56 2960 4795.32 c
-2960 4789.4 2964.76 4784.76 2970.64 4784.76 c
-2978.16 4784.76 2985.52 4791 2994.8 4804.92 c
-h
-2964.56 4854.2 m
-2968.08 4853.88 2970.56 4851 2970.56 4846.68 c
-2970.56 4837.08 2965.24 4819.32 2958.96 4808.28 c
-2954.64 4800.44 2949.84 4795.92 2945.52 4795.92 c
-2941.36 4795.92 2938 4799.75 2938 4804.92 c
-2938 4813.24 2943.42 4829.24 2950.16 4841.08 c
-2954.96 4849.56 2960.24 4854.52 2964.56 4854.2 c
-h
-3002 4787 m
-f*
-3036.56 4860.92 m
-3020.24 4858.36 3014 4857.4 3005.68 4856.44 c
-3005.68 4852 l
-3012.88 4851.69 3014.32 4851.07 3014.32 4848.12 c
-3014.32 4846.52 3013.04 4840.76 3010.8 4832.44 c
-2994.8 4770.36 l
-2991.76 4759.8 2990.48 4758.84 2982.8 4759 c
-2982.8 4754 l
-3022.64 4754 l
-3022.64 4759 l
-3014.64 4759.14 3012.24 4760.16 3012.24 4763.64 c
-3012.24 4765.88 3013.36 4770.68 3016.4 4781.88 c
-3017.52 4785.72 3017.52 4786.04 3018.16 4788.44 c
-3023.76 4785.56 3025.68 4784.92 3029.04 4784.92 c
-3050.8 4784.92 3073.36 4813.88 3073.36 4841.56 c
-3073.36 4853.4 3066.64 4861.08 3056.08 4861.08 c
-3046.96 4861.08 3039.92 4855.92 3030.48 4842.52 c
-h
-3047.12 4849.56 m
-3051.28 4849.24 3053.68 4845.56 3053.36 4840.44 c
-3052.72 4829.88 3047.6 4814.04 3041.84 4803.64 c
-3036.88 4795 3031.76 4789.92 3026.32 4789.92 c
-3022.8 4789.92 3020.08 4792.75 3020.08 4796.28 c
-3020.08 4799 3021.84 4805.56 3026.16 4820.12 c
-3029.68 4831.8 3031.12 4835.8 3033.52 4839.48 c
-3037.52 4845.72 3042.96 4849.88 3047.12 4849.56 c
-h
-3082 4787 m
-f*
-3117.56 4860.92 m
-3101.24 4858.36 3095 4857.4 3086.68 4856.44 c
-3086.68 4852 l
-3093.88 4851.69 3095.32 4851.07 3095.32 4848.12 c
-3095.32 4846.52 3094.04 4840.76 3091.8 4832.44 c
-3075.8 4770.36 l
-3072.76 4759.8 3071.48 4758.84 3063.8 4759 c
-3063.8 4754 l
-3103.64 4754 l
-3103.64 4759 l
-3095.64 4759.14 3093.24 4760.16 3093.24 4763.64 c
-3093.24 4765.88 3094.36 4770.68 3097.4 4781.88 c
-3098.52 4785.72 3098.52 4786.04 3099.16 4788.44 c
-3104.76 4785.56 3106.68 4784.92 3110.04 4784.92 c
-3131.8 4784.92 3154.36 4813.88 3154.36 4841.56 c
-3154.36 4853.4 3147.64 4861.08 3137.08 4861.08 c
-3127.96 4861.08 3120.92 4855.92 3111.48 4842.52 c
-h
-3128.12 4849.56 m
-3132.28 4849.24 3134.68 4845.56 3134.36 4840.44 c
-3133.72 4829.88 3128.6 4814.04 3122.84 4803.64 c
-3117.88 4795 3112.76 4789.92 3107.32 4789.92 c
-3103.8 4789.92 3101.08 4792.75 3101.08 4796.28 c
-3101.08 4799 3102.84 4805.56 3107.16 4820.12 c
-3110.68 4831.8 3112.12 4835.8 3114.52 4839.48 c
-3118.52 4845.72 3123.96 4849.88 3128.12 4849.56 c
-h
-3163 4787 m
-f*
-3196.56 4809.56 m
-3194.32 4806.36 l
-3190.16 4800.12 3186.48 4796.56 3184.08 4796.56 c
-3182.8 4796.56 3182 4797.77 3182 4799.16 c
-3182 4800.6 3182.62 4804.76 3183.12 4807.48 c
-3197.68 4860.92 l
-3189.22 4859 3178.26 4857.4 3166.04 4856.44 c
-3166.04 4852 l
-3167.44 4852 l
-3172.24 4852 3175.48 4850.44 3175.48 4847.48 c
-3175.48 4846.2 3174.71 4843.8 3173.68 4841.08 c
-3164.4 4806.68 l
-3163.12 4802.04 3163 4797.88 3163 4795.64 c
-3163 4789.56 3167.2 4785.56 3173.36 4785.56 c
-3182.96 4785.56 3188.88 4790.36 3200.08 4807.32 c
-h
-3192.88 4896.4 m
-3187.44 4896.4 3183 4891.46 3183 4886.04 c
-3183 4879.8 3187.26 4875.4 3193.04 4875.4 c
-3199.12 4875.4 3204 4879.86 3204 4885.56 c
-3204 4891.48 3199 4896.4 3192.88 4896.4 c
-h
-3206.48 4787 m
-f*
-3281.36 4808.6 m
-3274.96 4798.68 3272.88 4796.56 3270.16 4796.56 c
-3268.88 4796.56 3268 4797.63 3268 4799.16 c
-3268 4800.76 3268.94 4804.12 3271.92 4813.08 c
-3277.68 4830.52 l
-3280.24 4838.04 3282 4845.08 3282 4848.92 c
-3282 4856.76 3277.78 4861.08 3270.16 4861.08 c
-3264.24 4861.08 3258.48 4858.62 3254.16 4854.36 c
-3248.24 4848.76 3245.2 4844.92 3234.48 4829.08 c
-3244.72 4860.76 l
-3234.48 4858.52 3221.68 4856.92 3212.72 4856.6 c
-3212.72 4851.8 l
-3219.44 4851.65 3221.36 4850.92 3221.36 4848.12 c
-3221.36 4846.2 3219.12 4837.72 3214 4819.64 c
-3210.32 4806.68 3209.2 4802.52 3205.04 4787 c
-3224.4 4787 l
-3231.92 4814.68 3237.68 4828.6 3247.6 4841.56 c
-3250.8 4845.88 3255.76 4849.08 3258.64 4849.08 c
-3260.72 4849.08 3263 4847.63 3263 4846.04 c
-3263 4845.56 3262.54 4844.28 3261.84 4842.68 c
-3253.04 4816.12 l
-3250.48 4808.44 3249 4799.32 3249 4795.16 c
-3249 4789.08 3252.84 4785.56 3259.44 4785.56 c
-3269.04 4785.56 3275.6 4791 3284.88 4806.52 c
-h
-3294.96 4787 m
-f*
-3372.48 4856 m
-3354.72 4856 l
-3349.28 4859.58 3344.48 4861.08 3337.12 4861.08 c
-3317.44 4861.08 3301 4848.05 3301 4831.8 c
-3301 4823.64 3305.35 4817.88 3314.4 4814.2 c
-3301.28 4806.84 3299 4804.6 3299 4798.68 c
-3299 4793.56 3301.89 4790.52 3308.96 4788.12 c
-3299.04 4785.72 3295.84 4784.44 3292 4781.4 c
-3289.44 4779.16 3288 4775.32 3288 4771.48 c
-3288 4761.08 3299.56 4755 3317.76 4755 c
-3340.32 4755 3356 4764.72 3356 4778.52 c
-3356 4788.28 3349.6 4793.56 3332.16 4798.52 c
-3323.68 4800.92 l
-3318.56 4802.36 3315 4804.6 3315 4807 c
-3315 4809.56 3317.68 4812.28 3320 4812.28 c
-3320.8 4812.28 3321.92 4812.24 3323.2 4812.12 c
-3324.96 4811.64 3326.24 4811 3328.16 4811 c
-3335.2 4811 3342.4 4813.09 3348.48 4816.92 c
-3357.76 4822.2 3363 4830.36 3363 4839.96 c
-3363 4842.64 3362.59 4844.32 3361.76 4847 c
-3372.48 4847 l
-h
-3314.4 4786.04 m
-3316.32 4785.88 3328.48 4781.72 3332 4780.12 c
-3336.48 4777.88 3339 4775.16 3339 4771 c
-3339 4763.96 3331.8 4760 3319.36 4760 c
-3308.96 4760 3302 4765.1 3302 4772.44 c
-3302 4775.48 3303.32 4778.2 3306.24 4781.24 c
-3308.32 4783.32 3313.12 4786.2 3314.4 4786.04 c
-h
-3336.8 4856.08 m
-3340.96 4856.08 3344 4852.19 3344 4846.52 c
-3344 4841.08 3342.08 4833.4 3339.36 4827.48 c
-3336 4820.12 3331.84 4816 3326.88 4816 c
-3322.56 4816 3320 4819.52 3320 4825.88 c
-3320 4832.28 3322.79 4842.04 3326.24 4848.12 c
-3329.28 4853.4 3332.64 4856.08 3336.8 4856.08 c
-h
-3376 4787 m
-f*
-1 i
-0.564706 g
-2708.15 3969.35 m
-2573.75 4006.55 l
-2669.75 4061.75 l
-2516.15 4071.35 l
-2558.15 4140.95 l
-2410.55 4120.55 l
-2393.75 4192.55 l
-2273.75 4146.95 l
-2198.15 4210.55 l
-2122.55 4146.95 l
-2002.55 4192.55 l
-1984.55 4120.55 l
-1835.75 4140.95 l
-1880.15 4071.35 l
-1726.55 4061.75 l
-1822.55 4006.55 l
-1686.95 3969.35 l
-1822.55 3934.55 l
-1726.55 3878.15 l
-1880.15 3869.75 l
-1835.75 3800.15 l
-1984.55 3819.35 l
-2002.55 3748.55 l
-2122.55 3792.95 l
-2198.15 3729.35 l
-2273.75 3792.95 l
-2393.75 3748.55 l
-2410.55 3819.35 l
-2558.15 3800.15 l
-2516.15 3869.75 l
-2669.75 3878.15 l
-2573.75 3934.55 l
-f*
-1 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-f*
-0 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-2648.15 4029.35 l
-2609.75 4029.35 l
-2487.35 3998.15 l
-2576.15 3946.55 l
-2438.15 3938.15 l
-2478.95 3872.15 l
-2343.35 3891.35 l
-2326.55 3821.75 l
-2211.35 3864.95 l
-2138.15 3802.55 l
-2064.95 3864.95 l
-1949.75 3821.75 l
-1931.75 3891.35 l
-1796.15 3872.15 l
-1836.95 3938.15 l
-1700.15 3946.55 l
-1788.95 3998.15 l
-1666.55 4029.35 l
-1787.75 4061.75 l
-1700.15 4114.55 l
-1836.95 4121.75 l
-1796.15 4188.95 l
-1931.75 4169.75 l
-1949.75 4238.15 l
-2064.95 4196.15 l
-2138.15 4258.55 l
-2211.35 4196.15 l
-2326.55 4238.15 l
-2343.35 4169.75 l
-2478.95 4188.95 l
-2438.15 4121.75 l
-2576.15 4114.55 l
-2487.35 4061.75 l
-2609.75 4029.35 l
-2648.15 4029.35 l
-f*
-0.2 i
-1960.08 4080.76 m
-1940.08 4006.52 l
-1937.52 3997.88 1934.48 3995.64 1924.08 3995 c
-1924.08 3991 l
-1974 3991 l
-1974 3995 l
-1964.72 3995.48 1962.48 3996.76 1962.48 4001.88 c
-1962.48 4003.64 1962.8 4005.4 1963.76 4009.08 c
-1963.92 4009.88 l
-1964.08 4010.68 l
-1983.76 4082.52 l
-1986.16 4090.84 1988.56 4093.08 1996.72 4094.04 c
-1996.72 4098 l
-1962.8 4098 l
-1913.2 4021.24 l
-1904.56 4098 l
-1869.2 4098 l
-1869.2 4094 l
-1879.28 4093.52 1880.72 4092.89 1880.72 4088.44 c
-1880.72 4086.2 1880.08 4083.32 1878.96 4079.16 c
-1861.52 4019.48 l
-1855.12 3998.68 1854 3996.92 1845.36 3995 c
-1845.36 3991 l
-1878.48 3991 l
-1878.48 3995 l
-1868.24 3996.28 1865.68 3998.2 1865.68 4004.76 c
-1865.68 4007.48 1866.48 4011.48 1868.72 4019.48 c
-1884.88 4078.52 l
-1895.6 3989.08 l
-1900.08 3989.08 l
-h
-1992.24 3991 m
-f*
-2061.44 4011.32 m
-2054.88 4002.52 2052.48 3999.76 2049.92 3999.76 c
-2048.64 3999.76 2048 4000.86 2048 4002.52 c
-2048 4006.52 2049.44 4013.08 2053.44 4026.2 c
-2064.8 4063.96 l
-2047.04 4062.84 l
-2044.16 4053.4 l
-2042.72 4061.56 2039.2 4065.08 2032.32 4065.08 c
-2012.64 4065.08 1989 4034.27 1989 4009.24 c
-1989 3997.08 1995.74 3988.92 2005.92 3988.92 c
-2015.68 3988.92 2023.04 3994.68 2032.16 4010.04 c
-2030.24 4003.48 2030 4001.56 2030 3999.32 c
-2030 3993.4 2034.76 3988.76 2040.64 3988.76 c
-2048.16 3988.76 2055.52 3995 2064.8 4008.92 c
-h
-2034.56 4058.2 m
-2038.08 4057.88 2040.56 4055 2040.56 4050.68 c
-2040.56 4041.08 2035.24 4023.32 2028.96 4012.28 c
-2024.64 4004.44 2019.84 3999.92 2015.52 3999.92 c
-2011.36 3999.92 2008 4003.75 2008 4008.92 c
-2008 4017.24 2013.42 4033.24 2020.16 4045.08 c
-2024.96 4053.56 2030.24 4058.52 2034.56 4058.2 c
-h
-2072 3991 m
-f*
-2106.56 4064.92 m
-2090.24 4062.36 2084 4061.4 2075.68 4060.44 c
-2075.68 4056 l
-2082.88 4055.69 2084.32 4055.07 2084.32 4052.12 c
-2084.32 4050.52 2083.04 4044.76 2080.8 4036.44 c
-2064.8 3974.36 l
-2061.76 3963.8 2060.48 3962.84 2052.8 3963 c
-2052.8 3958 l
-2092.64 3958 l
-2092.64 3963 l
-2084.64 3963.14 2082.24 3964.16 2082.24 3967.64 c
-2082.24 3969.88 2083.36 3974.68 2086.4 3985.88 c
-2087.52 3989.72 2087.52 3990.04 2088.16 3992.44 c
-2093.76 3989.56 2095.68 3988.92 2099.04 3988.92 c
-2120.8 3988.92 2143.36 4017.88 2143.36 4045.56 c
-2143.36 4057.4 2136.64 4065.08 2126.08 4065.08 c
-2116.96 4065.08 2109.92 4059.92 2100.48 4046.52 c
-h
-2117.12 4053.56 m
-2121.28 4053.24 2123.68 4049.56 2123.36 4044.44 c
-2122.72 4033.88 2117.6 4018.04 2111.84 4007.64 c
-2106.88 3999 2101.76 3993.92 2096.32 3993.92 c
-2092.8 3993.92 2090.08 3996.75 2090.08 4000.28 c
-2090.08 4003 2091.84 4009.56 2096.16 4024.12 c
-2099.68 4035.8 2101.12 4039.8 2103.52 4043.48 c
-2107.52 4049.72 2112.96 4053.88 2117.12 4053.56 c
-h
-2152 3991 m
-f*
-2187.56 4064.92 m
-2171.24 4062.36 2165 4061.4 2156.68 4060.44 c
-2156.68 4056 l
-2163.88 4055.69 2165.32 4055.07 2165.32 4052.12 c
-2165.32 4050.52 2164.04 4044.76 2161.8 4036.44 c
-2145.8 3974.36 l
-2142.76 3963.8 2141.48 3962.84 2133.8 3963 c
-2133.8 3958 l
-2173.64 3958 l
-2173.64 3963 l
-2165.64 3963.14 2163.24 3964.16 2163.24 3967.64 c
-2163.24 3969.88 2164.36 3974.68 2167.4 3985.88 c
-2168.52 3989.72 2168.52 3990.04 2169.16 3992.44 c
-2174.76 3989.56 2176.68 3988.92 2180.04 3988.92 c
-2201.8 3988.92 2224.36 4017.88 2224.36 4045.56 c
-2224.36 4057.4 2217.64 4065.08 2207.08 4065.08 c
-2197.96 4065.08 2190.92 4059.92 2181.48 4046.52 c
-h
-2198.12 4053.56 m
-2202.28 4053.24 2204.68 4049.56 2204.36 4044.44 c
-2203.72 4033.88 2198.6 4018.04 2192.84 4007.64 c
-2187.88 3999 2182.76 3993.92 2177.32 3993.92 c
-2173.8 3993.92 2171.08 3996.75 2171.08 4000.28 c
-2171.08 4003 2172.84 4009.56 2177.16 4024.12 c
-2180.68 4035.8 2182.12 4039.8 2184.52 4043.48 c
-2188.52 4049.72 2193.96 4053.88 2198.12 4053.56 c
-h
-2233 3991 m
-f*
-2266.56 4013.56 m
-2264.32 4010.36 l
-2260.16 4004.12 2256.48 4000.56 2254.08 4000.56 c
-2252.8 4000.56 2252 4001.77 2252 4003.16 c
-2252 4004.6 2252.62 4008.76 2253.12 4011.48 c
-2267.68 4064.92 l
-2259.22 4063 2248.26 4061.4 2236.04 4060.44 c
-2236.04 4056 l
-2237.44 4056 l
-2242.24 4056 2245.48 4054.44 2245.48 4051.48 c
-2245.48 4050.2 2244.71 4047.8 2243.68 4045.08 c
-2234.4 4010.68 l
-2233.12 4006.04 2233 4001.88 2233 3999.64 c
-2233 3993.56 2237.2 3989.56 2243.36 3989.56 c
-2252.96 3989.56 2258.88 3994.36 2270.08 4011.32 c
-h
-2262.88 4100.4 m
-2257.44 4100.4 2253 4095.46 2253 4090.04 c
-2253 4083.8 2257.26 4079.4 2263.04 4079.4 c
-2269.12 4079.4 2274 4083.86 2274 4089.56 c
-2274 4095.48 2269 4100.4 2262.88 4100.4 c
-h
-2276.48 3991 m
-f*
-2351.36 4012.6 m
-2344.96 4002.68 2342.88 4000.56 2340.16 4000.56 c
-2338.88 4000.56 2338 4001.63 2338 4003.16 c
-2338 4004.76 2338.94 4008.12 2341.92 4017.08 c
-2347.68 4034.52 l
-2350.24 4042.04 2352 4049.08 2352 4052.92 c
-2352 4060.76 2347.78 4065.08 2340.16 4065.08 c
-2334.24 4065.08 2328.48 4062.62 2324.16 4058.36 c
-2318.24 4052.76 2315.2 4048.92 2304.48 4033.08 c
-2314.72 4064.76 l
-2304.48 4062.52 2291.68 4060.92 2282.72 4060.6 c
-2282.72 4055.8 l
-2289.44 4055.65 2291.36 4054.92 2291.36 4052.12 c
-2291.36 4050.2 2289.12 4041.72 2284 4023.64 c
-2280.32 4010.68 2279.2 4006.52 2275.04 3991 c
-2294.4 3991 l
-2301.92 4018.68 2307.68 4032.6 2317.6 4045.56 c
-2320.8 4049.88 2325.76 4053.08 2328.64 4053.08 c
-2330.72 4053.08 2333 4051.63 2333 4050.04 c
-2333 4049.56 2332.54 4048.28 2331.84 4046.68 c
-2323.04 4020.12 l
-2320.48 4012.44 2319 4003.32 2319 3999.16 c
-2319 3993.08 2322.84 3989.56 2329.44 3989.56 c
-2339.04 3989.56 2345.6 3995 2354.88 4010.52 c
-h
-2364.96 3991 m
-f*
-2442.48 4060 m
-2424.72 4060 l
-2419.28 4063.58 2414.48 4065.08 2407.12 4065.08 c
-2387.44 4065.08 2371 4052.05 2371 4035.8 c
-2371 4027.64 2375.35 4021.88 2384.4 4018.2 c
-2371.28 4010.84 2369 4008.6 2369 4002.68 c
-2369 3997.56 2371.89 3994.52 2378.96 3992.12 c
-2369.04 3989.72 2365.84 3988.44 2362 3985.4 c
-2359.44 3983.16 2358 3979.32 2358 3975.48 c
-2358 3965.08 2369.56 3959 2387.76 3959 c
-2410.32 3959 2426 3968.72 2426 3982.52 c
-2426 3992.28 2419.6 3997.56 2402.16 4002.52 c
-2393.68 4004.92 l
-2388.56 4006.36 2385 4008.6 2385 4011 c
-2385 4013.56 2387.68 4016.28 2390 4016.28 c
-2390.8 4016.28 2391.92 4016.24 2393.2 4016.12 c
-2394.96 4015.64 2396.24 4015 2398.16 4015 c
-2405.2 4015 2412.4 4017.09 2418.48 4020.92 c
-2427.76 4026.2 2433 4034.36 2433 4043.96 c
-2433 4046.64 2432.59 4048.32 2431.76 4051 c
-2442.48 4051 l
-h
-2384.4 3990.04 m
-2386.32 3989.88 2398.48 3985.72 2402 3984.12 c
-2406.48 3981.88 2409 3979.16 2409 3975 c
-2409 3967.96 2401.8 3964 2389.36 3964 c
-2378.96 3964 2372 3969.1 2372 3976.44 c
-2372 3979.48 2373.32 3982.2 2376.24 3985.24 c
-2378.32 3987.32 2383.12 3990.2 2384.4 3990.04 c
-h
-2406.8 4060.08 m
-2410.96 4060.08 2414 4056.19 2414 4050.52 c
-2414 4045.08 2412.08 4037.4 2409.36 4031.48 c
-2406 4024.12 2401.84 4020 2396.88 4020 c
-2392.56 4020 2390 4023.52 2390 4029.88 c
-2390 4036.28 2392.79 4046.04 2396.24 4052.12 c
-2399.28 4057.4 2402.64 4060.08 2406.8 4060.08 c
-h
-2446 3991 m
-f*
-1 i
-0.564706 g
-2894.15 2729.75 m
-2758.55 2765.75 l
-2854.55 2822.15 l
-2700.95 2830.55 l
-2744.15 2901.35 l
-2596.55 2880.95 l
-2578.55 2951.75 l
-2458.55 2907.35 l
-2384.15 2970.95 l
-2307.35 2907.35 l
-2187.35 2951.75 l
-2169.35 2880.95 l
-2020.55 2901.35 l
-2064.95 2830.55 l
-1911.35 2822.15 l
-2007.35 2765.75 l
-1871.75 2729.75 l
-2007.35 2694.95 l
-1911.35 2638.55 l
-2064.95 2630.15 l
-2020.55 2559.35 l
-2169.35 2579.75 l
-2187.35 2508.95 l
-2307.35 2553.35 l
-2384.15 2489.75 l
-2458.55 2553.35 l
-2578.55 2508.95 l
-2596.55 2579.75 l
-2744.15 2559.35 l
-2700.95 2630.15 l
-2854.55 2638.55 l
-2758.55 2694.95 l
-f*
-1 g
-2834.15 2789.75 m
-2698.55 2825.75 l
-2794.55 2882.15 l
-2640.95 2890.55 l
-2684.15 2961.35 l
-2536.55 2940.95 l
-2518.55 3011.75 l
-2398.55 2967.35 l
-2324.15 3030.95 l
-2247.35 2967.35 l
-2127.35 3011.75 l
-2109.35 2940.95 l
-1960.55 2961.35 l
-2004.95 2890.55 l
-1851.35 2882.15 l
-1947.35 2825.75 l
-1811.75 2789.75 l
-1947.35 2754.95 l
-1851.35 2698.55 l
-2004.95 2690.15 l
-1960.55 2619.35 l
-2109.35 2639.75 l
-2127.35 2568.95 l
-2247.35 2613.35 l
-2324.15 2549.75 l
-2398.55 2613.35 l
-2518.55 2568.95 l
-2536.55 2639.75 l
-2684.15 2619.35 l
-2640.95 2690.15 l
-2794.55 2698.55 l
-2698.55 2754.95 l
-f*
-0 g
-2834.15 2789.75 m
-2698.55 2825.75 l
-2794.55 2882.15 l
-2640.95 2890.55 l
-2684.15 2961.35 l
-2536.55 2940.95 l
-2518.55 3011.75 l
-2398.55 2967.35 l
-2324.15 3030.95 l
-2247.35 2967.35 l
-2127.35 3011.75 l
-2109.35 2940.95 l
-1960.55 2961.35 l
-2004.95 2890.55 l
-1851.35 2882.15 l
-1947.35 2825.75 l
-1811.75 2789.75 l
-1947.35 2754.95 l
-1851.35 2698.55 l
-2004.95 2690.15 l
-1960.55 2619.35 l
-2109.35 2639.75 l
-2127.35 2568.95 l
-2247.35 2613.35 l
-2324.15 2549.75 l
-2398.55 2613.35 l
-2518.55 2568.95 l
-2536.55 2639.75 l
-2684.15 2619.35 l
-2640.95 2690.15 l
-2794.55 2698.55 l
-2698.55 2754.95 l
-2834.15 2789.75 l
-2794.55 2789.75 l
-2672.15 2758.55 l
-2760.95 2705.75 l
-2624.15 2698.55 l
-2663.75 2632.55 l
-2528.15 2650.55 l
-2511.35 2582.15 l
-2396.15 2624.15 l
-2324.15 2561.75 l
-2249.75 2624.15 l
-2134.55 2582.15 l
-2117.75 2650.55 l
-1980.95 2632.55 l
-2021.75 2698.55 l
-1884.95 2705.75 l
-1973.75 2758.55 l
-1851.35 2789.75 l
-1972.55 2822.15 l
-1884.95 2874.95 l
-2021.75 2882.15 l
-1980.95 2948.15 l
-2117.75 2930.15 l
-2134.55 2998.55 l
-2249.75 2956.55 l
-2324.15 3018.95 l
-2396.15 2956.55 l
-2511.35 2998.55 l
-2528.15 2930.15 l
-2663.75 2948.15 l
-2624.15 2882.15 l
-2760.95 2874.95 l
-2672.15 2822.15 l
-2794.55 2789.75 l
-2834.15 2789.75 l
-f*
-0.2 i
-2145.08 2840.76 m
-2125.08 2766.52 l
-2122.52 2757.88 2119.48 2755.64 2109.08 2755 c
-2109.08 2751 l
-2159 2751 l
-2159 2755 l
-2149.72 2755.48 2147.48 2756.76 2147.48 2761.88 c
-2147.48 2763.64 2147.8 2765.4 2148.76 2769.08 c
-2148.92 2769.88 l
-2149.08 2770.68 l
-2168.76 2842.52 l
-2171.16 2850.84 2173.56 2853.08 2181.72 2854.04 c
-2181.72 2858 l
-2147.8 2858 l
-2098.2 2781.24 l
-2089.56 2858 l
-2054.2 2858 l
-2054.2 2854 l
-2064.28 2853.52 2065.72 2852.89 2065.72 2848.44 c
-2065.72 2846.2 2065.08 2843.32 2063.96 2839.16 c
-2046.52 2779.48 l
-2040.12 2758.68 2039 2756.92 2030.36 2755 c
-2030.36 2751 l
-2063.48 2751 l
-2063.48 2755 l
-2053.24 2756.28 2050.68 2758.2 2050.68 2764.76 c
-2050.68 2767.48 2051.48 2771.48 2053.72 2779.48 c
-2069.88 2838.52 l
-2080.6 2749.08 l
-2085.08 2749.08 l
-h
-2177.24 2751 m
-f*
-2247.44 2771.32 m
-2240.88 2762.52 2238.48 2759.76 2235.92 2759.76 c
-2234.64 2759.76 2234 2760.86 2234 2762.52 c
-2234 2766.52 2235.44 2773.08 2239.44 2786.2 c
-2250.8 2823.96 l
-2233.04 2822.84 l
-2230.16 2813.4 l
-2228.72 2821.56 2225.2 2825.08 2218.32 2825.08 c
-2198.64 2825.08 2175 2794.27 2175 2769.24 c
-2175 2757.08 2181.74 2748.92 2191.92 2748.92 c
-2201.68 2748.92 2209.04 2754.68 2218.16 2770.04 c
-2216.24 2763.48 2216 2761.56 2216 2759.32 c
-2216 2753.4 2220.76 2748.76 2226.64 2748.76 c
-2234.16 2748.76 2241.52 2755 2250.8 2768.92 c
-h
-2220.56 2818.2 m
-2224.08 2817.88 2226.56 2815 2226.56 2810.68 c
-2226.56 2801.08 2221.24 2783.32 2214.96 2772.28 c
-2210.64 2764.44 2205.84 2759.92 2201.52 2759.92 c
-2197.36 2759.92 2194 2763.75 2194 2768.92 c
-2194 2777.24 2199.42 2793.24 2206.16 2805.08 c
-2210.96 2813.56 2216.24 2818.52 2220.56 2818.2 c
-h
-2258 2751 m
-f*
-2291.56 2824.92 m
-2275.24 2822.36 2269 2821.4 2260.68 2820.44 c
-2260.68 2816 l
-2267.88 2815.69 2269.32 2815.07 2269.32 2812.12 c
-2269.32 2810.52 2268.04 2804.76 2265.8 2796.44 c
-2249.8 2734.36 l
-2246.76 2723.8 2245.48 2722.84 2237.8 2723 c
-2237.8 2718 l
-2277.64 2718 l
-2277.64 2723 l
-2269.64 2723.14 2267.24 2724.16 2267.24 2727.64 c
-2267.24 2729.88 2268.36 2734.68 2271.4 2745.88 c
-2272.52 2749.72 2272.52 2750.04 2273.16 2752.44 c
-2278.76 2749.56 2280.68 2748.92 2284.04 2748.92 c
-2305.8 2748.92 2328.36 2777.88 2328.36 2805.56 c
-2328.36 2817.4 2321.64 2825.08 2311.08 2825.08 c
-2301.96 2825.08 2294.92 2819.92 2285.48 2806.52 c
-h
-2302.12 2813.56 m
-2306.28 2813.24 2308.68 2809.56 2308.36 2804.44 c
-2307.72 2793.88 2302.6 2778.04 2296.84 2767.64 c
-2291.88 2759 2286.76 2753.92 2281.32 2753.92 c
-2277.8 2753.92 2275.08 2756.75 2275.08 2760.28 c
-2275.08 2763 2276.84 2769.56 2281.16 2784.12 c
-2284.68 2795.8 2286.12 2799.8 2288.52 2803.48 c
-2292.52 2809.72 2297.96 2813.88 2302.12 2813.56 c
-h
-2337 2751 m
-f*
-2371.56 2824.92 m
-2355.24 2822.36 2349 2821.4 2340.68 2820.44 c
-2340.68 2816 l
-2347.88 2815.69 2349.32 2815.07 2349.32 2812.12 c
-2349.32 2810.52 2348.04 2804.76 2345.8 2796.44 c
-2329.8 2734.36 l
-2326.76 2723.8 2325.48 2722.84 2317.8 2723 c
-2317.8 2718 l
-2357.64 2718 l
-2357.64 2723 l
-2349.64 2723.14 2347.24 2724.16 2347.24 2727.64 c
-2347.24 2729.88 2348.36 2734.68 2351.4 2745.88 c
-2352.52 2749.72 2352.52 2750.04 2353.16 2752.44 c
-2358.76 2749.56 2360.68 2748.92 2364.04 2748.92 c
-2385.8 2748.92 2408.36 2777.88 2408.36 2805.56 c
-2408.36 2817.4 2401.64 2825.08 2391.08 2825.08 c
-2381.96 2825.08 2374.92 2819.92 2365.48 2806.52 c
-h
-2382.12 2813.56 m
-2386.28 2813.24 2388.68 2809.56 2388.36 2804.44 c
-2387.72 2793.88 2382.6 2778.04 2376.84 2767.64 c
-2371.88 2759 2366.76 2753.92 2361.32 2753.92 c
-2357.8 2753.92 2355.08 2756.75 2355.08 2760.28 c
-2355.08 2763 2356.84 2769.56 2361.16 2784.12 c
-2364.68 2795.8 2366.12 2799.8 2368.52 2803.48 c
-2372.52 2809.72 2377.96 2813.88 2382.12 2813.56 c
-h
-2417 2751 m
-f*
-2452.56 2773.56 m
-2450.32 2770.36 l
-2446.16 2764.12 2442.48 2760.56 2440.08 2760.56 c
-2438.8 2760.56 2438 2761.77 2438 2763.16 c
-2438 2764.6 2438.62 2768.76 2439.12 2771.48 c
-2453.68 2824.92 l
-2445.22 2823 2434.26 2821.4 2422.04 2820.44 c
-2422.04 2816 l
-2423.44 2816 l
-2428.24 2816 2431.48 2814.44 2431.48 2811.48 c
-2431.48 2810.2 2430.71 2807.8 2429.68 2805.08 c
-2420.4 2770.68 l
-2419.12 2766.04 2419 2761.88 2419 2759.64 c
-2419 2753.56 2423.2 2749.56 2429.36 2749.56 c
-2438.96 2749.56 2444.88 2754.36 2456.08 2771.32 c
-h
-2448.88 2860.4 m
-2443.44 2860.4 2439 2855.46 2439 2850.04 c
-2439 2843.8 2443.26 2839.4 2449.04 2839.4 c
-2455.12 2839.4 2460 2843.86 2460 2849.56 c
-2460 2855.48 2455 2860.4 2448.88 2860.4 c
-h
-2462.48 2751 m
-f*
-2536.36 2772.6 m
-2529.96 2762.68 2527.88 2760.56 2525.16 2760.56 c
-2523.88 2760.56 2523 2761.63 2523 2763.16 c
-2523 2764.76 2523.94 2768.12 2526.92 2777.08 c
-2532.68 2794.52 l
-2535.24 2802.04 2537 2809.08 2537 2812.92 c
-2537 2820.76 2532.78 2825.08 2525.16 2825.08 c
-2519.24 2825.08 2513.48 2822.62 2509.16 2818.36 c
-2503.24 2812.76 2500.2 2808.92 2489.48 2793.08 c
-2499.72 2824.76 l
-2489.48 2822.52 2476.68 2820.92 2467.72 2820.6 c
-2467.72 2815.8 l
-2474.44 2815.65 2476.36 2814.92 2476.36 2812.12 c
-2476.36 2810.2 2474.12 2801.72 2469 2783.64 c
-2465.32 2770.68 2464.2 2766.52 2460.04 2751 c
-2479.4 2751 l
-2486.92 2778.68 2492.68 2792.6 2502.6 2805.56 c
-2505.8 2809.88 2510.76 2813.08 2513.64 2813.08 c
-2515.72 2813.08 2518 2811.63 2518 2810.04 c
-2518 2809.56 2517.54 2808.28 2516.84 2806.68 c
-2508.04 2780.12 l
-2505.48 2772.44 2504 2763.32 2504 2759.16 c
-2504 2753.08 2507.84 2749.56 2514.44 2749.56 c
-2524.04 2749.56 2530.6 2755 2539.88 2770.52 c
-h
-2549.96 2751 m
-f*
-2627.48 2820 m
-2609.72 2820 l
-2604.28 2823.58 2599.48 2825.08 2592.12 2825.08 c
-2572.44 2825.08 2556 2812.05 2556 2795.8 c
-2556 2787.64 2560.35 2781.88 2569.4 2778.2 c
-2556.28 2770.84 2554 2768.6 2554 2762.68 c
-2554 2757.56 2556.89 2754.52 2563.96 2752.12 c
-2554.04 2749.72 2550.84 2748.44 2547 2745.4 c
-2544.44 2743.16 2543 2739.32 2543 2735.48 c
-2543 2725.08 2554.56 2719 2572.76 2719 c
-2595.32 2719 2611 2728.72 2611 2742.52 c
-2611 2752.28 2604.6 2757.56 2587.16 2762.52 c
-2578.68 2764.92 l
-2573.56 2766.36 2570 2768.6 2570 2771 c
-2570 2773.56 2572.68 2776.28 2575 2776.28 c
-2575.8 2776.28 2576.92 2776.24 2578.2 2776.12 c
-2579.96 2775.64 2581.24 2775 2583.16 2775 c
-2590.2 2775 2597.4 2777.09 2603.48 2780.92 c
-2612.76 2786.2 2618 2794.36 2618 2803.96 c
-2618 2806.64 2617.59 2808.32 2616.76 2811 c
-2627.48 2811 l
-h
-2569.4 2750.04 m
-2571.32 2749.88 2583.48 2745.72 2587 2744.12 c
-2591.48 2741.88 2594 2739.16 2594 2735 c
-2594 2727.96 2586.8 2724 2574.36 2724 c
-2563.96 2724 2557 2729.1 2557 2736.44 c
-2557 2739.48 2558.32 2742.2 2561.24 2745.24 c
-2563.32 2747.32 2568.12 2750.2 2569.4 2750.04 c
-h
-2591.8 2820.08 m
-2595.96 2820.08 2599 2816.19 2599 2810.52 c
-2599 2805.08 2597.08 2797.4 2594.36 2791.48 c
-2591 2784.12 2586.84 2780 2581.88 2780 c
-2577.56 2780 2575 2783.52 2575 2789.88 c
-2575 2796.28 2577.79 2806.04 2581.24 2812.12 c
-2584.28 2817.4 2587.64 2820.08 2591.8 2820.08 c
-h
-2631 2751 m
-f*
-1 i
-0.564706 g
-4908.95 2769.35 m
-4773.35 2806.55 l
-4869.35 2861.75 l
-4715.75 2871.35 l
-4758.95 2940.95 l
-4611.35 2920.55 l
-4593.35 2992.55 l
-4473.35 2946.95 l
-4398.95 3010.55 l
-4322.15 2946.95 l
-4202.15 2992.55 l
-4185.35 2920.55 l
-4036.55 2940.95 l
-4079.75 2871.35 l
-3926.15 2861.75 l
-4022.15 2806.55 l
-3887.75 2769.35 l
-4022.15 2734.55 l
-3926.15 2678.15 l
-4079.75 2669.75 l
-4036.55 2600.15 l
-4185.35 2619.35 l
-4202.15 2548.55 l
-4322.15 2592.95 l
-4398.95 2529.35 l
-4473.35 2592.95 l
-4593.35 2548.55 l
-4611.35 2619.35 l
-4758.95 2600.15 l
-4715.75 2669.75 l
-4869.35 2678.15 l
-4773.35 2734.55 l
-f*
-1 g
-4848.95 2829.35 m
-4713.35 2866.55 l
-4809.35 2921.75 l
-4655.75 2931.35 l
-4698.95 3000.95 l
-4551.35 2980.55 l
-4533.35 3052.55 l
-4413.35 3006.95 l
-4338.95 3070.55 l
-4262.15 3006.95 l
-4142.15 3052.55 l
-4125.35 2980.55 l
-3976.55 3000.95 l
-4019.75 2931.35 l
-3866.15 2921.75 l
-3962.15 2866.55 l
-3827.75 2829.35 l
-3962.15 2794.55 l
-3866.15 2738.15 l
-4019.75 2729.75 l
-3976.55 2660.15 l
-4125.35 2679.35 l
-4142.15 2608.55 l
-4262.15 2652.95 l
-4338.95 2589.35 l
-4413.35 2652.95 l
-4533.35 2608.55 l
-4551.35 2679.35 l
-4698.95 2660.15 l
-4655.75 2729.75 l
-4809.35 2738.15 l
-4713.35 2794.55 l
-f*
-0 g
-4848.95 2829.35 m
-4713.35 2866.55 l
-4809.35 2921.75 l
-4655.75 2931.35 l
-4698.95 3000.95 l
-4551.35 2980.55 l
-4533.35 3052.55 l
-4413.35 3006.95 l
-4338.95 3070.55 l
-4262.15 3006.95 l
-4142.15 3052.55 l
-4125.35 2980.55 l
-3976.55 3000.95 l
-4019.75 2931.35 l
-3866.15 2921.75 l
-3962.15 2866.55 l
-3827.75 2829.35 l
-3962.15 2794.55 l
-3866.15 2738.15 l
-4019.75 2729.75 l
-3976.55 2660.15 l
-4125.35 2679.35 l
-4142.15 2608.55 l
-4262.15 2652.95 l
-4338.95 2589.35 l
-4413.35 2652.95 l
-4533.35 2608.55 l
-4551.35 2679.35 l
-4698.95 2660.15 l
-4655.75 2729.75 l
-4809.35 2738.15 l
-4713.35 2794.55 l
-4848.95 2829.35 l
-4809.35 2829.35 l
-4686.95 2798.15 l
-4775.75 2746.55 l
-4638.95 2738.15 l
-4678.55 2672.15 l
-4544.15 2691.35 l
-4526.15 2621.75 l
-4410.95 2664.95 l
-4338.95 2602.55 l
-4264.55 2664.95 l
-4149.35 2621.75 l
-4132.55 2691.35 l
-3995.75 2672.15 l
-4037.75 2738.15 l
-3899.75 2746.55 l
-3988.55 2798.15 l
-3866.15 2829.35 l
-3987.35 2861.75 l
-3899.75 2914.55 l
-4037.75 2921.75 l
-3995.75 2988.95 l
-4132.55 2969.75 l
-4149.35 3038.15 l
-4264.55 2996.15 l
-4338.95 3058.55 l
-4410.95 2996.15 l
-4526.15 3038.15 l
-4544.15 2969.75 l
-4678.55 2988.95 l
-4638.95 2921.75 l
-4775.75 2914.55 l
-4686.95 2861.75 l
-4809.35 2829.35 l
-4848.95 2829.35 l
-f*
-0.2 i
-4160.08 2880.76 m
-4140.08 2806.52 l
-4137.52 2797.88 4134.48 2795.64 4124.08 2795 c
-4124.08 2791 l
-4174 2791 l
-4174 2795 l
-4164.72 2795.48 4162.48 2796.76 4162.48 2801.88 c
-4162.48 2803.64 4162.8 2805.4 4163.76 2809.08 c
-4163.92 2809.88 l
-4164.08 2810.68 l
-4183.76 2882.52 l
-4186.16 2890.84 4188.56 2893.08 4196.72 2894.04 c
-4196.72 2898 l
-4162.8 2898 l
-4113.2 2821.24 l
-4104.56 2898 l
-4069.2 2898 l
-4069.2 2894 l
-4079.28 2893.52 4080.72 2892.89 4080.72 2888.44 c
-4080.72 2886.2 4080.08 2883.32 4078.96 2879.16 c
-4061.52 2819.48 l
-4055.12 2798.68 4054 2796.92 4045.36 2795 c
-4045.36 2791 l
-4078.48 2791 l
-4078.48 2795 l
-4068.24 2796.28 4065.68 2798.2 4065.68 2804.76 c
-4065.68 2807.48 4066.48 2811.48 4068.72 2819.48 c
-4084.88 2878.52 l
-4095.6 2789.08 l
-4100.08 2789.08 l
-h
-4192.24 2791 m
-f*
-4262.44 2811.32 m
-4255.88 2802.52 4253.48 2799.76 4250.92 2799.76 c
-4249.64 2799.76 4249 2800.86 4249 2802.52 c
-4249 2806.52 4250.44 2813.08 4254.44 2826.2 c
-4265.8 2863.96 l
-4248.04 2862.84 l
-4245.16 2853.4 l
-4243.72 2861.56 4240.2 2865.08 4233.32 2865.08 c
-4213.64 2865.08 4190 2834.27 4190 2809.24 c
-4190 2797.08 4196.74 2788.92 4206.92 2788.92 c
-4216.68 2788.92 4224.04 2794.68 4233.16 2810.04 c
-4231.24 2803.48 4231 2801.56 4231 2799.32 c
-4231 2793.4 4235.76 2788.76 4241.64 2788.76 c
-4249.16 2788.76 4256.52 2795 4265.8 2808.92 c
-h
-4235.56 2858.2 m
-4239.08 2857.88 4241.56 2855 4241.56 2850.68 c
-4241.56 2841.08 4236.24 2823.32 4229.96 2812.28 c
-4225.64 2804.44 4220.84 2799.92 4216.52 2799.92 c
-4212.36 2799.92 4209 2803.75 4209 2808.92 c
-4209 2817.24 4214.42 2833.24 4221.16 2845.08 c
-4225.96 2853.56 4231.24 2858.52 4235.56 2858.2 c
-h
-4273 2791 m
-f*
-4306.56 2864.92 m
-4290.24 2862.36 4284 2861.4 4275.68 2860.44 c
-4275.68 2856 l
-4282.88 2855.69 4284.32 2855.07 4284.32 2852.12 c
-4284.32 2850.52 4283.04 2844.76 4280.8 2836.44 c
-4264.8 2774.36 l
-4261.76 2763.8 4260.48 2762.84 4252.8 2763 c
-4252.8 2758 l
-4292.64 2758 l
-4292.64 2763 l
-4284.64 2763.14 4282.24 2764.16 4282.24 2767.64 c
-4282.24 2769.88 4283.36 2774.68 4286.4 2785.88 c
-4287.52 2789.72 4287.52 2790.04 4288.16 2792.44 c
-4293.76 2789.56 4295.68 2788.92 4299.04 2788.92 c
-4320.8 2788.92 4343.36 2817.88 4343.36 2845.56 c
-4343.36 2857.4 4336.64 2865.08 4326.08 2865.08 c
-4316.96 2865.08 4309.92 2859.92 4300.48 2846.52 c
-h
-4317.12 2853.56 m
-4321.28 2853.24 4323.68 2849.56 4323.36 2844.44 c
-4322.72 2833.88 4317.6 2818.04 4311.84 2807.64 c
-4306.88 2799 4301.76 2793.92 4296.32 2793.92 c
-4292.8 2793.92 4290.08 2796.75 4290.08 2800.28 c
-4290.08 2803 4291.84 2809.56 4296.16 2824.12 c
-4299.68 2835.8 4301.12 2839.8 4303.52 2843.48 c
-4307.52 2849.72 4312.96 2853.88 4317.12 2853.56 c
-h
-4352 2791 m
-f*
-4386.56 2864.92 m
-4370.24 2862.36 4364 2861.4 4355.68 2860.44 c
-4355.68 2856 l
-4362.88 2855.69 4364.32 2855.07 4364.32 2852.12 c
-4364.32 2850.52 4363.04 2844.76 4360.8 2836.44 c
-4344.8 2774.36 l
-4341.76 2763.8 4340.48 2762.84 4332.8 2763 c
-4332.8 2758 l
-4372.64 2758 l
-4372.64 2763 l
-4364.64 2763.14 4362.24 2764.16 4362.24 2767.64 c
-4362.24 2769.88 4363.36 2774.68 4366.4 2785.88 c
-4367.52 2789.72 4367.52 2790.04 4368.16 2792.44 c
-4373.76 2789.56 4375.68 2788.92 4379.04 2788.92 c
-4400.8 2788.92 4423.36 2817.88 4423.36 2845.56 c
-4423.36 2857.4 4416.64 2865.08 4406.08 2865.08 c
-4396.96 2865.08 4389.92 2859.92 4380.48 2846.52 c
-h
-4397.12 2853.56 m
-4401.28 2853.24 4403.68 2849.56 4403.36 2844.44 c
-4402.72 2833.88 4397.6 2818.04 4391.84 2807.64 c
-4386.88 2799 4381.76 2793.92 4376.32 2793.92 c
-4372.8 2793.92 4370.08 2796.75 4370.08 2800.28 c
-4370.08 2803 4371.84 2809.56 4376.16 2824.12 c
-4379.68 2835.8 4381.12 2839.8 4383.52 2843.48 c
-4387.52 2849.72 4392.96 2853.88 4397.12 2853.56 c
-h
-4432 2791 m
-f*
-4467.56 2813.56 m
-4465.32 2810.36 l
-4461.16 2804.12 4457.48 2800.56 4455.08 2800.56 c
-4453.8 2800.56 4453 2801.77 4453 2803.16 c
-4453 2804.6 4453.62 2808.76 4454.12 2811.48 c
-4468.68 2864.92 l
-4460.22 2863 4449.26 2861.4 4437.04 2860.44 c
-4437.04 2856 l
-4438.44 2856 l
-4443.24 2856 4446.48 2854.44 4446.48 2851.48 c
-4446.48 2850.2 4445.71 2847.8 4444.68 2845.08 c
-4435.4 2810.68 l
-4434.12 2806.04 4434 2801.88 4434 2799.64 c
-4434 2793.56 4438.2 2789.56 4444.36 2789.56 c
-4453.96 2789.56 4459.88 2794.36 4471.08 2811.32 c
-h
-4463.88 2900.4 m
-4458.44 2900.4 4454 2895.46 4454 2890.04 c
-4454 2883.8 4458.26 2879.4 4464.04 2879.4 c
-4470.12 2879.4 4475 2883.86 4475 2889.56 c
-4475 2895.48 4470 2900.4 4463.88 2900.4 c
-h
-4477.48 2791 m
-f*
-4551.36 2812.6 m
-4544.96 2802.68 4542.88 2800.56 4540.16 2800.56 c
-4538.88 2800.56 4538 2801.63 4538 2803.16 c
-4538 2804.76 4538.94 2808.12 4541.92 2817.08 c
-4547.68 2834.52 l
-4550.24 2842.04 4552 2849.08 4552 2852.92 c
-4552 2860.76 4547.78 2865.08 4540.16 2865.08 c
-4534.24 2865.08 4528.48 2862.62 4524.16 2858.36 c
-4518.24 2852.76 4515.2 2848.92 4504.48 2833.08 c
-4514.72 2864.76 l
-4504.48 2862.52 4491.68 2860.92 4482.72 2860.6 c
-4482.72 2855.8 l
-4489.44 2855.65 4491.36 2854.92 4491.36 2852.12 c
-4491.36 2850.2 4489.12 2841.72 4484 2823.64 c
-4480.32 2810.68 4479.2 2806.52 4475.04 2791 c
-4494.4 2791 l
-4501.92 2818.68 4507.68 2832.6 4517.6 2845.56 c
-4520.8 2849.88 4525.76 2853.08 4528.64 2853.08 c
-4530.72 2853.08 4533 2851.63 4533 2850.04 c
-4533 2849.56 4532.54 2848.28 4531.84 2846.68 c
-4523.04 2820.12 l
-4520.48 2812.44 4519 2803.32 4519 2799.16 c
-4519 2793.08 4522.84 2789.56 4529.44 2789.56 c
-4539.04 2789.56 4545.6 2795 4554.88 2810.52 c
-h
-4564.96 2791 m
-f*
-4642.48 2860 m
-4624.72 2860 l
-4619.28 2863.58 4614.48 2865.08 4607.12 2865.08 c
-4587.44 2865.08 4571 2852.05 4571 2835.8 c
-4571 2827.64 4575.35 2821.88 4584.4 2818.2 c
-4571.28 2810.84 4569 2808.6 4569 2802.68 c
-4569 2797.56 4571.89 2794.52 4578.96 2792.12 c
-4569.04 2789.72 4565.84 2788.44 4562 2785.4 c
-4559.44 2783.16 4558 2779.32 4558 2775.48 c
-4558 2765.08 4569.56 2759 4587.76 2759 c
-4610.32 2759 4626 2768.72 4626 2782.52 c
-4626 2792.28 4619.6 2797.56 4602.16 2802.52 c
-4593.68 2804.92 l
-4588.56 2806.36 4585 2808.6 4585 2811 c
-4585 2813.56 4587.68 2816.28 4590 2816.28 c
-4590.8 2816.28 4591.92 2816.24 4593.2 2816.12 c
-4594.96 2815.64 4596.24 2815 4598.16 2815 c
-4605.2 2815 4612.4 2817.09 4618.48 2820.92 c
-4627.76 2826.2 4633 2834.36 4633 2843.96 c
-4633 2846.64 4632.59 2848.32 4631.76 2851 c
-4642.48 2851 l
-h
-4584.4 2790.04 m
-4586.32 2789.88 4598.48 2785.72 4602 2784.12 c
-4606.48 2781.88 4609 2779.16 4609 2775 c
-4609 2767.96 4601.8 2764 4589.36 2764 c
-4578.96 2764 4572 2769.1 4572 2776.44 c
-4572 2779.48 4573.32 2782.2 4576.24 2785.24 c
-4578.32 2787.32 4583.12 2790.2 4584.4 2790.04 c
-h
-4606.8 2860.08 m
-4610.96 2860.08 4614 2856.19 4614 2850.52 c
-4614 2845.08 4612.08 2837.4 4609.36 2831.48 c
-4606 2824.12 4601.84 2820 4596.88 2820 c
-4592.56 2820 4590 2823.52 4590 2829.88 c
-4590 2836.28 4592.79 2846.04 4596.24 2852.12 c
-4599.28 2857.4 4602.64 2860.08 4606.8 2860.08 c
-h
-4646 2791 m
-f*
-1 i
-1 g
-1836.95 1421.75 m
-1919.75 1421.75 l
-1919.75 1268.15 l
-2086.55 1268.15 l
-2086.55 1421.75 l
-2166.95 1421.75 l
-2003.75 1572.95 l
-f*
-0 g
-1836.95 1421.75 m
-1919.75 1421.75 l
-1919.75 1268.15 l
-2086.55 1268.15 l
-2086.55 1421.75 l
-2166.95 1421.75 l
-2003.75 1572.95 l
-1836.95 1421.75 l
-1863.35 1432.55 l
-2003.75 1559.75 l
-2141.75 1432.55 l
-2075.75 1432.55 l
-2075.75 1278.95 l
-1929.35 1278.95 l
-1929.35 1432.55 l
-1863.35 1432.55 l
-1836.95 1421.75 l
-f*
-0.2 i
-2275.88 1447 m
-2275.88 1442 l
-2288.3 1441.29 2292 1438.45 2292 1429.4 c
-2292 1342.28 l
-2292 1333.1 2289.25 1330.94 2275.88 1329.5 c
-2275.88 1325 l
-2333.84 1325 l
-2364.26 1325 2384 1338.5 2384 1358.84 c
-2384 1367.12 2380.73 1374.32 2374.7 1379.9 c
-2368.4 1385.48 2362.28 1388 2349.68 1390.7 c
-2370.56 1396.82 2378 1404.2 2378 1417.88 c
-2378 1436.42 2361.55 1447 2331.5 1447 c
-h
-2321 1386.74 m
-2325.92 1386.74 l
-2344.46 1386.74 2353 1377.2 2353 1357.22 c
-2353 1339.76 2345.77 1331 2331.5 1331 c
-2323.58 1331 2321 1333.99 2321 1341.74 c
-h
-2321 1432.46 m
-2321 1438.94 2323.39 1442 2330.24 1442 c
-2342.84 1442 2349 1434.03 2349 1416.62 c
-2349 1397.72 2343.08 1392.68 2321 1392.14 c
-h
-2393.06 1325 m
-f*
-2478.14 1336.52 m
-2476.34 1334.72 l
-2475.8 1334.18 2475.26 1334 2474.36 1334 c
-2471.84 1334 2471 1335.44 2471 1338.5 c
-2471 1385.48 l
-2471 1400.78 2457.16 1410.16 2434.94 1410.16 c
-2414.6 1410.16 2400.92 1400.97 2400.92 1387.46 c
-2400.92 1379.9 2405.24 1375.58 2412.62 1375.58 c
-2419.82 1375.58 2424.86 1379.9 2424.86 1386.02 c
-2424.86 1388.54 2423.96 1390.88 2421.62 1393.76 c
-2420 1395.56 2419.46 1396.64 2419.46 1397.72 c
-2419.46 1401.5 2424.32 1404.16 2430.8 1404.16 c
-2441.42 1404.16 2446 1399.37 2446 1388.54 c
-2446 1375.4 l
-2424.89 1368.92 2416.41 1365.68 2409.56 1361.18 c
-2401.46 1355.78 2398 1349.48 2398 1341.56 c
-2398 1330.58 2406.07 1322.48 2417.3 1322.48 c
-2427.74 1322.48 2436.02 1326.08 2445.92 1335.08 c
-2447.9 1325.9 2451.86 1322.48 2460.68 1322.48 c
-2468.42 1322.48 2474 1325.36 2480.84 1332.74 c
-h
-2446 1343 m
-2441.04 1337.42 2437.37 1335.26 2432.96 1335.26 c
-2427.56 1335.26 2424 1340.12 2424 1347.32 c
-2424 1357.76 2431.57 1365.14 2446 1369.1 c
-h
-2483 1325 m
-f*
-2544.22 1383.68 m
-2544.22 1409.8 l
-2540.24 1409.8 l
-2539.16 1407.08 2538.08 1406.2 2535.74 1406.2 c
-2534.66 1406.2 2533.04 1406.55 2530.16 1407.44 c
-2524.4 1409.42 2520.26 1410.16 2516.12 1410.16 c
-2499.74 1410.16 2488 1398.99 2488 1383.86 c
-2488 1371.98 2495.34 1363.7 2513.42 1355.96 c
-2525.84 1350.56 2531 1346.06 2531 1340.3 c
-2531 1333.28 2525.48 1328.48 2517.2 1328.48 c
-2504.6 1328.48 2496.32 1336.62 2492.54 1352.36 c
-2487.5 1352.36 l
-2487.5 1322.66 l
-2492 1322.66 l
-2493.98 1326.44 2495.06 1327.7 2496.68 1327.7 c
-2497.58 1327.7 2499.02 1327.34 2500.82 1326.62 c
-2506.04 1324.46 2515.22 1322.48 2520.26 1322.48 c
-2536.64 1322.48 2548 1333.64 2548 1349.84 c
-2548 1362.62 2541.15 1370.54 2523.14 1377.92 c
-2510.9 1383.14 2506 1387.64 2506 1393.76 c
-2506 1399.7 2510.98 1404.16 2517.74 1404.16 c
-2522.6 1404.16 2527.28 1402.19 2531.24 1398.44 c
-2535.02 1394.84 2537 1391.42 2539.7 1383.68 c
-h
-2553.02 1325 m
-f*
-2624.36 1347.5 m
-2616.98 1338.68 2611.58 1335.48 2603.84 1335.48 c
-2597 1335.48 2591.6 1338.53 2588 1344.62 c
-2584.58 1350.36 2583.14 1356.45 2582.42 1369 c
-2627.78 1369 l
-2626.7 1383.99 2624 1392.3 2618.42 1399.34 c
-2612.66 1406.36 2604.2 1410.16 2594.12 1410.16 c
-2571.62 1410.16 2556.5 1392.33 2556.5 1366.04 c
-2556.5 1339.76 2571.26 1322.48 2593.58 1322.48 c
-2608.16 1322.48 2616.98 1328.06 2628.68 1344.98 c
-h
-2581.52 1376 m
-2582.06 1397.42 2585.3 1404.16 2594.12 1404.16 c
-2599.34 1404.16 2602.58 1401.42 2604.02 1396.1 c
-2604.92 1392.68 2605.28 1387.64 2605.64 1378.46 c
-2605.64 1376 l
-h
-2631.92 1325 m
-f*
-2678 1325 m
-f*
-2781.94 1447 m
-2679.88 1447 l
-2679.88 1442 l
-2692.3 1441.29 2696 1438.63 2696 1429.4 c
-2696 1342.28 l
-2696 1332.92 2693.44 1330.94 2679.88 1329.5 c
-2679.88 1325 l
-2744.68 1325 l
-2744.68 1330 l
-2728.12 1330.69 2725 1332.77 2725 1342.28 c
-2725 1384.22 l
-2743.28 1383.86 2749.91 1377.2 2752.42 1356.32 c
-2756.92 1356.32 l
-2756.92 1417.16 l
-2752.42 1417.16 l
-2749.19 1396.64 2742.92 1390.34 2725 1390.34 c
-2725 1432.1 l
-2725 1438.76 2727.32 1441 2736.4 1441 c
-2753.14 1441 2763.58 1437.8 2769.16 1431.2 c
-2773.12 1426.7 2775.1 1421.84 2777.62 1410.5 c
-2781.94 1410.5 l
-h
-2786.98 1325 m
-f*
-2826.28 1408 m
-2792.22 1408 l
-2792.22 1403.66 l
-2799.96 1402.58 2802 1400.24 2802 1393.04 c
-2802 1340.12 l
-2802 1332.74 2800.19 1330.76 2792.22 1329.32 c
-2792.22 1325 l
-2840.1 1325 l
-2840.1 1329.32 l
-2829.12 1330.04 2827 1332.38 2827 1343.54 c
-2827 1377.56 l
-2827 1386.92 2832.02 1394.66 2837.94 1394.66 c
-2839.38 1394.66 2841 1393.4 2842.98 1390.52 c
-2846.4 1385.66 2849.1 1384.04 2853.78 1384.04 c
-2860.44 1384.04 2865.12 1389.08 2865.12 1395.92 c
-2865.12 1404.2 2859 1410.16 2850.54 1410.16 c
-2841.55 1410.16 2834.73 1405.47 2826.28 1393.22 c
-h
-2866.92 1325 m
-f*
-2953.14 1336.52 m
-2951.34 1334.72 l
-2950.8 1334.18 2950.26 1334 2949.36 1334 c
-2946.84 1334 2946 1335.44 2946 1338.5 c
-2946 1385.48 l
-2946 1400.78 2932.16 1410.16 2909.94 1410.16 c
-2889.6 1410.16 2875.92 1400.97 2875.92 1387.46 c
-2875.92 1379.9 2880.24 1375.58 2887.62 1375.58 c
-2894.82 1375.58 2899.86 1379.9 2899.86 1386.02 c
-2899.86 1388.54 2898.96 1390.88 2896.62 1393.76 c
-2895 1395.56 2894.46 1396.64 2894.46 1397.72 c
-2894.46 1401.5 2899.32 1404.16 2905.8 1404.16 c
-2916.42 1404.16 2921 1399.37 2921 1388.54 c
-2921 1375.4 l
-2899.89 1368.92 2891.41 1365.68 2884.56 1361.18 c
-2876.46 1355.78 2873 1349.48 2873 1341.56 c
-2873 1330.58 2881.07 1322.48 2892.3 1322.48 c
-2902.74 1322.48 2911.02 1326.08 2920.92 1335.08 c
-2922.9 1325.9 2926.86 1322.48 2935.68 1322.48 c
-2943.42 1322.48 2949 1325.36 2955.84 1332.74 c
-h
-2921 1343 m
-2916.04 1337.42 2912.37 1335.26 2907.96 1335.26 c
-2902.56 1335.26 2899 1340.12 2899 1347.32 c
-2899 1357.76 2906.57 1365.14 2921 1369.1 c
-h
-2958 1325 m
-f*
-2995.46 1408 m
-2960.73 1408 l
-2960.73 1403.66 l
-2968.65 1402.58 2971 1400.42 2971 1393.04 c
-2971 1340.12 l
-2971 1332.74 2968.95 1330.76 2960.73 1329.32 c
-2960.73 1325 l
-3003.93 1325 l
-3003.93 1329.32 l
-2997.63 1330.22 2996 1332.74 2996 1339.58 c
-2996 1387.64 l
-2996 1388.54 2998.51 1391.78 3000.51 1393.76 c
-3004.29 1396.64 3007.53 1398.16 3010.77 1398.16 c
-3017.79 1398.16 3021 1394 3021 1383.14 c
-3021 1339.58 l
-3021 1332.2 3018.9 1329.86 3011.85 1329.32 c
-3011.85 1325 l
-3053.97 1325 l
-3053.97 1329.32 l
-3047.67 1330.04 3046 1332.74 3046 1339.58 c
-3046 1387.64 l
-3046 1388.54 3048.43 1391.6 3050.37 1393.58 c
-3054.33 1396.64 3057.57 1398.16 3060.81 1398.16 c
-3067.65 1398.16 3070 1393.82 3070 1383.14 c
-3070 1339.58 l
-3070 1332.02 3068.1 1329.86 3061.53 1329.32 c
-3061.53 1325 l
-3104.37 1325 l
-3104.37 1329 l
-3097.35 1329.37 3095 1331.6 3095 1339.58 c
-3095 1384.76 l
-3095 1400.24 3085.6 1410.16 3071.07 1410.16 c
-3060.81 1410.16 3053.97 1406.01 3044.61 1394.48 c
-3039.21 1405.82 3032.91 1410.16 3021.57 1410.16 c
-3010.2 1410.16 3002.21 1405.29 2995.46 1394.48 c
-h
-3107.94 1325 m
-f*
-3180.36 1347.5 m
-3172.98 1338.68 3167.58 1335.48 3159.84 1335.48 c
-3153 1335.48 3147.6 1338.53 3144 1344.62 c
-3140.58 1350.36 3139.14 1356.45 3138.42 1369 c
-3183.78 1369 l
-3182.7 1383.99 3180 1392.3 3174.42 1399.34 c
-3168.66 1406.36 3160.2 1410.16 3150.12 1410.16 c
-3127.62 1410.16 3112.5 1392.33 3112.5 1366.04 c
-3112.5 1339.76 3127.26 1322.48 3149.58 1322.48 c
-3164.16 1322.48 3172.98 1328.06 3184.68 1344.98 c
-h
-3137.52 1376 m
-3138.06 1397.42 3141.3 1404.16 3150.12 1404.16 c
-3155.34 1404.16 3158.58 1401.42 3160.02 1396.1 c
-3160.92 1392.68 3161.28 1387.64 3161.64 1378.46 c
-3161.64 1376 l
-h
-3187.92 1325 m
-f*
-1 i
-2272.55 1289.75 914.4 15.5999 re
-f
-0.2 i
-3784.26 5016.36 m
-3773.64 5005.2 3767.88 5000.88 3759.06 4997.46 c
-3753.84 4995.3 3747.9 4994.58 3742.86 4994.58 c
-3730.98 4994.58 3719.64 5000.74 3714.42 5009.88 c
-3709.2 5019.42 3707 5032.2 3707 5050.38 c
-3707 5087.64 3718.23 5107.7 3739.8 5107.7 c
-3748.26 5107.7 3756 5104.38 3763.74 5097.36 c
-3771.48 5090.52 3775.62 5084.4 3781.92 5070.72 c
-3786.42 5070.72 l
-3786.42 5113.16 l
-3781.56 5113.16 l
-3778.86 5106.43 3777.06 5104.56 3773.64 5104.56 c
-3771.84 5104.56 3769.5 5105.28 3765.36 5107.08 c
-3754.92 5111.4 3746.1 5113.7 3737.46 5113.7 c
-3701.64 5113.7 3675 5085.84 3675 5048.76 c
-3675 5011.68 3701.21 4985.58 3738.54 4985.58 c
-3759.24 4985.58 3771.48 4991.88 3789.66 5011.86 c
-h
-3795.96 4989 m
-f*
-3859.18 4986.66 m
-3866.78 4989.36 3871.02 4990.08 3882.5 4991.34 c
-3893.66 4992.6 l
-3893.66 4997 l
-3885.74 4997.35 3884 4999.63 3884 5007.18 c
-3884 5072 l
-3847.4 5072 l
-3847.4 5067.66 l
-3856.4 5066.94 3859 5064.78 3859 5057.04 c
-3859 5006.1 l
-3852.88 5000.16 3849.18 4998.48 3843.8 4998.48 c
-3836.42 4998.48 3834 5002 3834 5010.96 c
-3834 5072 l
-3799.88 5072 l
-3799.88 5067.66 l
-3807.26 5066.22 3809 5064.6 3809 5057.04 c
-3809 5011.68 l
-3809 4995.84 3817.89 4986.48 3832.64 4986.48 c
-3842.16 4986.48 3848.56 4989.36 3859.18 4998.36 c
-h
-3897.08 4989 m
-f*
-3935.28 5072 m
-3901.22 5072 l
-3901.22 5067.66 l
-3908.96 5066.58 3911 5064.24 3911 5057.04 c
-3911 5004.12 l
-3911 4996.74 3909.19 4994.76 3901.22 4993.32 c
-3901.22 4989 l
-3949.1 4989 l
-3949.1 4993.32 l
-3938.12 4994.04 3936 4996.38 3936 5007.54 c
-3936 5041.56 l
-3936 5050.92 3941.02 5058.66 3946.94 5058.66 c
-3948.38 5058.66 3950 5057.4 3951.98 5054.52 c
-3955.4 5049.66 3958.1 5048.04 3962.78 5048.04 c
-3969.44 5048.04 3974.12 5053.08 3974.12 5059.92 c
-3974.12 5068.2 3968 5074.16 3959.54 5074.16 c
-3950.55 5074.16 3943.73 5069.47 3935.28 5057.22 c
-h
-3975.92 4989 m
-f*
-4016.28 5072 m
-3982.22 5072 l
-3982.22 5067.66 l
-3989.96 5066.58 3992 5064.24 3992 5057.04 c
-3992 5004.12 l
-3992 4996.74 3990.19 4994.76 3982.22 4993.32 c
-3982.22 4989 l
-4030.1 4989 l
-4030.1 4993.32 l
-4019.12 4994.04 4017 4996.38 4017 5007.54 c
-4017 5041.56 l
-4017 5050.92 4022.02 5058.66 4027.94 5058.66 c
-4029.38 5058.66 4031 5057.4 4032.98 5054.52 c
-4036.4 5049.66 4039.1 5048.04 4043.78 5048.04 c
-4050.44 5048.04 4055.12 5053.08 4055.12 5059.92 c
-4055.12 5068.2 4049 5074.16 4040.54 5074.16 c
-4031.55 5074.16 4024.73 5069.47 4016.28 5057.22 c
-h
-4056.92 4989 m
-f*
-4128.36 5011.5 m
-4120.98 5002.68 4115.58 4999.48 4107.84 4999.48 c
-4101 4999.48 4095.6 5002.53 4092 5008.62 c
-4088.58 5014.36 4087.14 5020.45 4086.42 5033 c
-4131.78 5033 l
-4130.7 5047.99 4128 5056.3 4122.42 5063.34 c
-4116.66 5070.36 4108.2 5074.16 4098.12 5074.16 c
-4075.62 5074.16 4060.5 5056.33 4060.5 5030.04 c
-4060.5 5003.76 4075.26 4986.48 4097.58 4986.48 c
-4112.16 4986.48 4120.98 4992.06 4132.68 5008.98 c
-h
-4085.52 5040 m
-4086.06 5061.42 4089.3 5068.16 4098.12 5068.16 c
-4103.34 5068.16 4106.58 5065.42 4108.02 5060.1 c
-4108.92 5056.68 4109.28 5051.64 4109.64 5042.46 c
-4109.64 5040 l
-h
-4135.92 4989 m
-f*
-4173.82 5072 m
-4139.78 5072 l
-4139.78 5067.66 l
-4147.7 5066.4 4149 5064.6 4149 5057.04 c
-4149 5004.12 l
-4149 4996.56 4147.61 4994.94 4139.78 4993.32 c
-4139.78 4989 l
-4183.16 4989 l
-4183.16 4993.32 l
-4176.5 4994.22 4174 4996.92 4174 5003.58 c
-4174 5051.64 l
-4174 5052.36 4175.4 5054.16 4177.4 5055.96 c
-4181.36 5059.92 4185.68 5062.16 4190 5062.16 c
-4196.12 5062.16 4199 5057.27 4199 5047.14 c
-4199 5003.58 l
-4199 4996.92 4196.71 4994.04 4190.72 4993.32 c
-4190.72 4989 l
-4233.02 4989 l
-4233.02 4993.32 l
-4226 4993.86 4224 4996.02 4224 5003.58 c
-4224 5048.76 l
-4224 5064.24 4214.54 5074.16 4199.9 5074.16 c
-4188.96 5074.16 4180.57 5069.11 4173.82 5058.48 c
-h
-4236.08 4989 m
-f*
-4290.9 5072 m
-4274 5072 l
-4274 5102.4 l
-4269.48 5102.4 l
-4258.5 5086.92 4251.3 5078.82 4239.6 5068.92 c
-4239.6 5064 l
-4249 5064 l
-4249 5005.74 l
-4249 4994.04 4256.73 4986.84 4269.12 4986.84 c
-4281.18 4986.84 4288.38 4992.24 4295.76 5007 c
-4291.26 5008.98 l
-4287.66 5002.14 4284.78 4999.84 4281 4999.84 c
-4275.96 4999.84 4274 5002.83 4274 5009.88 c
-4274 5064 l
-4290.9 5064 l
-h
-4295.94 4989 m
-f*
-4341 4989 m
-f*
-4445.94 5111 m
-4343.88 5111 l
-4343.88 5106 l
-4356.3 5105.29 4360 5102.63 4360 5093.4 c
-4360 5006.28 l
-4360 4996.92 4357.44 4994.94 4343.88 4993.5 c
-4343.88 4989 l
-4408.68 4989 l
-4408.68 4994 l
-4392.12 4994.69 4389 4996.77 4389 5006.28 c
-4389 5048.22 l
-4407.28 5047.86 4413.91 5041.2 4416.42 5020.32 c
-4420.92 5020.32 l
-4420.92 5081.16 l
-4416.42 5081.16 l
-4413.19 5060.64 4406.92 5054.34 4389 5054.34 c
-4389 5096.1 l
-4389 5102.76 4391.32 5105 4400.4 5105 c
-4417.14 5105 4427.58 5101.8 4433.16 5095.2 c
-4437.12 5090.7 4439.1 5085.84 4441.62 5074.5 c
-4445.94 5074.5 l
-h
-4450.98 4989 m
-f*
-4490.28 5072 m
-4456.22 5072 l
-4456.22 5067.66 l
-4463.96 5066.58 4466 5064.24 4466 5057.04 c
-4466 5004.12 l
-4466 4996.74 4464.19 4994.76 4456.22 4993.32 c
-4456.22 4989 l
-4504.1 4989 l
-4504.1 4993.32 l
-4493.12 4994.04 4491 4996.38 4491 5007.54 c
-4491 5041.56 l
-4491 5050.92 4496.02 5058.66 4501.94 5058.66 c
-4503.38 5058.66 4505 5057.4 4506.98 5054.52 c
-4510.4 5049.66 4513.1 5048.04 4517.78 5048.04 c
-4524.44 5048.04 4529.12 5053.08 4529.12 5059.92 c
-4529.12 5068.2 4523 5074.16 4514.54 5074.16 c
-4505.55 5074.16 4498.73 5069.47 4490.28 5057.22 c
-h
-4530.92 4989 m
-f*
-4616.14 5000.52 m
-4614.34 4998.72 l
-4613.8 4998.18 4613.26 4998 4612.36 4998 c
-4609.84 4998 4609 4999.44 4609 5002.5 c
-4609 5049.48 l
-4609 5064.78 4595.16 5074.16 4572.94 5074.16 c
-4552.6 5074.16 4538.92 5064.97 4538.92 5051.46 c
-4538.92 5043.9 4543.24 5039.58 4550.62 5039.58 c
-4557.82 5039.58 4562.86 5043.9 4562.86 5050.02 c
-4562.86 5052.54 4561.96 5054.88 4559.62 5057.76 c
-4558 5059.56 4557.46 5060.64 4557.46 5061.72 c
-4557.46 5065.5 4562.32 5068.16 4568.8 5068.16 c
-4579.42 5068.16 4584 5063.37 4584 5052.54 c
-4584 5039.4 l
-4562.89 5032.92 4554.41 5029.68 4547.56 5025.18 c
-4539.46 5019.78 4536 5013.48 4536 5005.56 c
-4536 4994.58 4544.07 4986.48 4555.3 4986.48 c
-4565.74 4986.48 4574.02 4990.08 4583.92 4999.08 c
-4585.9 4989.9 4589.86 4986.48 4598.68 4986.48 c
-4606.42 4986.48 4612 4989.36 4618.84 4996.74 c
-h
-4584 5007 m
-4579.04 5001.42 4575.37 4999.26 4570.96 4999.26 c
-4565.56 4999.26 4562 5004.12 4562 5011.32 c
-4562 5021.76 4569.57 5029.14 4584 5033.1 c
-h
-4621 4989 m
-f*
-4658.46 5072 m
-4623.73 5072 l
-4623.73 5067.66 l
-4631.65 5066.58 4634 5064.42 4634 5057.04 c
-4634 5004.12 l
-4634 4996.74 4631.95 4994.76 4623.73 4993.32 c
-4623.73 4989 l
-4666.93 4989 l
-4666.93 4993.32 l
-4660.63 4994.22 4659 4996.74 4659 5003.58 c
-4659 5051.64 l
-4659 5052.54 4661.51 5055.78 4663.51 5057.76 c
-4667.29 5060.64 4670.53 5062.16 4673.77 5062.16 c
-4680.79 5062.16 4684 5058 4684 5047.14 c
-4684 5003.58 l
-4684 4996.2 4681.9 4993.86 4674.85 4993.32 c
-4674.85 4989 l
-4716.97 4989 l
-4716.97 4993.32 l
-4710.67 4994.04 4709 4996.74 4709 5003.58 c
-4709 5051.64 l
-4709 5052.54 4711.43 5055.6 4713.37 5057.58 c
-4717.33 5060.64 4720.57 5062.16 4723.81 5062.16 c
-4730.65 5062.16 4733 5057.82 4733 5047.14 c
-4733 5003.58 l
-4733 4996.02 4731.1 4993.86 4724.53 4993.32 c
-4724.53 4989 l
-4767.37 4989 l
-4767.37 4993 l
-4760.35 4993.37 4758 4995.6 4758 5003.58 c
-4758 5048.76 l
-4758 5064.24 4748.6 5074.16 4734.07 5074.16 c
-4723.81 5074.16 4716.97 5070.01 4707.61 5058.48 c
-4702.21 5069.82 4695.91 5074.16 4684.57 5074.16 c
-4673.2 5074.16 4665.21 5069.29 4658.46 5058.48 c
-h
-4770.94 4989 m
-f*
-4843.36 5011.5 m
-4835.98 5002.68 4830.58 4999.48 4822.84 4999.48 c
-4816 4999.48 4810.6 5002.53 4807 5008.62 c
-4803.58 5014.36 4802.14 5020.45 4801.42 5033 c
-4846.78 5033 l
-4845.7 5047.99 4843 5056.3 4837.42 5063.34 c
-4831.66 5070.36 4823.2 5074.16 4813.12 5074.16 c
-4790.62 5074.16 4775.5 5056.33 4775.5 5030.04 c
-4775.5 5003.76 4790.26 4986.48 4812.58 4986.48 c
-4827.16 4986.48 4835.98 4992.06 4847.68 5008.98 c
-h
-4800.52 5040 m
-4801.06 5061.42 4804.3 5068.16 4813.12 5068.16 c
-4818.34 5068.16 4821.58 5065.42 4823.02 5060.1 c
-4823.92 5056.68 4824.28 5051.64 4824.64 5042.46 c
-4824.64 5040 l
-h
-4850.92 4989 m
-f*
-1 i
-3665.75 4954.55 1184.4 15.5999 re
-f
-1 g
-4048.55 4732.55 m
-4130.15 4732.55 l
-4130.15 4581.35 l
-4295.75 4581.35 l
-4295.75 4732.55 l
-4378.55 4732.55 l
-4211.75 4886.15 l
-f*
-0 g
-4048.55 4732.55 m
-4130.15 4732.55 l
-4130.15 4581.35 l
-4295.75 4581.35 l
-4295.75 4732.55 l
-4378.55 4732.55 l
-4211.75 4886.15 l
-4048.55 4732.55 l
-4073.75 4742.15 l
-4211.75 4871.75 l
-4353.35 4742.15 l
-4286.15 4742.15 l
-4286.15 4590.95 l
-4139.75 4590.95 l
-4139.75 4742.15 l
-4073.75 4742.15 l
-4048.55 4732.55 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/fronta.eps b/ast-5.3-1/sun210_figures/fronta.eps
deleted file mode 100644
index 0369c80..0000000
--- a/ast-5.3-1/sun210_figures/fronta.eps
+++ /dev/null
@@ -1,6473 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 20 100 530 631
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:47:19
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-1 0 1 rg
-533.21 1777.32 4343.81 4343.81 re
-Y
-4877 5612 m
-4853 5612 l
-S
-4829 5613 m
-4805 5613 l
-S
-4781 5614 m
-4757 5614 l
-S
-4733 5614 m
-4709 5615 l
-S
-4685 5615 m
-4661 5616 l
-S
-4637 5616 m
-4613 5617 l
-S
-4589 5617 m
-4565 5618 l
-S
-4541 5618 m
-4517 5619 l
-S
-4493 5619 m
-4469 5620 l
-S
-4445 5620 m
-4421 5621 l
-S
-4397 5621 m
-4373 5621 l
-S
-4349 5622 m
-4325 5622 l
-S
-4301 5623 m
-4277 5623 l
-S
-4253 5624 m
-4229 5624 l
-S
-4205 5625 m
-4181 5625 l
-S
-4157 5626 m
-4133 5626 l
-S
-4109 5627 m
-4101 5627 l
-4085 5627 l
-S
-4061 5628 m
-4037 5628 l
-S
-4013 5628 m
-3989 5629 l
-S
-3965 5629 m
-3941 5630 l
-S
-3917 5630 m
-3893 5631 l
-S
-3869 5631 m
-3845 5632 l
-S
-3821 5632 m
-3797 5633 l
-S
-3773 5633 m
-3749 5634 l
-S
-3725 5634 m
-3701 5635 l
-S
-3677 5635 m
-3652 5636 l
-S
-3628 5636 m
-3604 5636 l
-S
-3580 5637 m
-3564 5637 l
-3556 5637 l
-S
-3532 5638 m
-3508 5638 l
-S
-3484 5639 m
-3460 5639 l
-S
-3436 5640 m
-3412 5640 l
-S
-3388 5641 m
-3364 5641 l
-S
-3340 5642 m
-3316 5642 l
-S
-3292 5643 m
-3268 5643 l
-S
-3244 5643 m
-3220 5644 l
-S
-3196 5644 m
-3172 5645 l
-S
-3148 5645 m
-3124 5646 l
-S
-3100 5646 m
-3076 5647 l
-S
-3052 5647 m
-3028 5648 l
-S
-3004 5648 m
-2980 5649 l
-S
-2956 5649 m
-2932 5650 l
-S
-2908 5650 m
-2884 5650 l
-S
-2860 5651 m
-2836 5651 l
-S
-2812 5652 m
-2788 5652 l
-S
-2764 5653 m
-2740 5653 l
-S
-2716 5654 m
-2692 5654 l
-S
-2668 5655 m
-2644 5655 l
-S
-2620 5656 m
-2596 5656 l
-S
-2572 5657 m
-2548 5657 l
-S
-2524 5657 m
-2500 5658 l
-S
-2476 5658 m
-2452 5659 l
-S
-2428 5659 m
-2404 5660 l
-S
-2380 5660 m
-2356 5661 l
-S
-2332 5661 m
-2308 5662 l
-S
-2284 5662 m
-2260 5663 l
-S
-2236 5663 m
-2212 5664 l
-S
-2188 5664 m
-2164 5665 l
-S
-2140 5665 m
-2116 5665 l
-S
-2092 5666 m
-2068 5666 l
-S
-2044 5667 m
-2020 5667 l
-S
-1996 5668 m
-1972 5668 l
-S
-1948 5669 m
-1924 5669 l
-S
-1900 5670 m
-1876 5670 l
-S
-1852 5671 m
-1828 5671 l
-S
-1804 5672 m
-1780 5672 l
-S
-1756 5672 m
-1732 5673 l
-S
-1708 5673 m
-1684 5674 l
-S
-1660 5674 m
-1636 5675 l
-S
-1612 5675 m
-1588 5676 l
-S
-1564 5676 m
-1540 5677 l
-S
-1516 5677 m
-1492 5678 l
-S
-1468 5678 m
-1444 5679 l
-S
-1420 5679 m
-1416 5679 l
-1396 5679 l
-S
-1372 5680 m
-1348 5680 l
-S
-1323 5681 m
-1299 5681 l
-S
-1275 5682 m
-1251 5682 l
-S
-1227 5683 m
-1203 5683 l
-S
-1179 5684 m
-1155 5684 l
-S
-1131 5685 m
-1107 5685 l
-S
-1083 5686 m
-1059 5686 l
-S
-1035 5687 m
-1011 5687 l
-S
-987 5687 m
-963 5688 l
-S
-939 5688 m
-915 5689 l
-S
-891 5689 m
-879 5690 l
-867 5690 l
-S
-843 5690 m
-819 5691 l
-S
-795 5691 m
-771 5692 l
-S
-747 5692 m
-723 5693 l
-S
-699 5693 m
-675 5694 l
-S
-651 5694 m
-627 5694 l
-S
-603 5695 m
-579 5695 l
-S
-555 5696 m
-533 5696 l
-S
-4877 4985 m
-4875 4985 l
-S
-4851 4986 m
-4827 4986 l
-S
-4803 4987 m
-4779 4987 l
-S
-4755 4988 m
-4731 4988 l
-S
-4707 4988 m
-4683 4989 l
-S
-4659 4989 m
-4635 4990 l
-S
-4611 4990 m
-4601 4991 l
-4587 4991 l
-S
-4563 4991 m
-4539 4992 l
-S
-4515 4992 m
-4491 4993 l
-S
-4467 4993 m
-4443 4994 l
-S
-4419 4994 m
-4395 4995 l
-S
-4371 4995 m
-4347 4996 l
-S
-4323 4996 m
-4299 4997 l
-S
-4275 4997 m
-4251 4997 l
-S
-4227 4998 m
-4203 4998 l
-S
-4179 4999 m
-4155 4999 l
-S
-4131 5000 m
-4107 5000 l
-S
-4083 5001 m
-4064 5001 l
-4059 5001 l
-S
-4035 5002 m
-4011 5002 l
-S
-3987 5003 m
-3963 5003 l
-S
-3939 5004 m
-3915 5004 l
-S
-3891 5005 m
-3867 5005 l
-S
-3843 5006 m
-3819 5006 l
-S
-3795 5007 m
-3770 5007 l
-S
-3746 5007 m
-3722 5008 l
-S
-3698 5008 m
-3674 5009 l
-S
-3650 5009 m
-3626 5010 l
-S
-3602 5010 m
-3578 5011 l
-S
-3554 5011 m
-3530 5012 l
-S
-3506 5012 m
-3482 5013 l
-S
-3458 5013 m
-3434 5014 l
-S
-3410 5014 m
-3386 5015 l
-S
-3362 5015 m
-3338 5016 l
-S
-3314 5016 m
-3290 5016 l
-S
-3266 5017 m
-3242 5017 l
-S
-3218 5018 m
-3194 5018 l
-S
-3170 5019 m
-3146 5019 l
-S
-3122 5020 m
-3098 5020 l
-S
-3074 5021 m
-3050 5021 l
-S
-3026 5022 m
-3002 5022 l
-S
-2978 5023 m
-2954 5023 l
-S
-2930 5024 m
-2906 5024 l
-S
-2882 5025 m
-2858 5025 l
-S
-2834 5025 m
-2810 5026 l
-S
-2786 5026 m
-2762 5027 l
-S
-2738 5027 m
-2714 5028 l
-S
-2690 5028 m
-2666 5029 l
-S
-2642 5029 m
-2618 5030 l
-S
-2594 5030 m
-2570 5031 l
-S
-2546 5031 m
-2522 5032 l
-S
-2498 5032 m
-2474 5033 l
-S
-2450 5033 m
-2426 5034 l
-S
-2402 5034 m
-2378 5035 l
-S
-2354 5035 m
-2330 5035 l
-S
-2306 5036 m
-2282 5036 l
-S
-2258 5037 m
-2234 5037 l
-S
-2210 5038 m
-2186 5038 l
-S
-2162 5039 m
-2138 5039 l
-S
-2114 5040 m
-2090 5040 l
-S
-2066 5041 m
-2042 5041 l
-S
-2018 5042 m
-1994 5042 l
-S
-1970 5043 m
-1946 5043 l
-S
-1922 5044 m
-1916 5044 l
-1898 5044 l
-S
-1874 5044 m
-1850 5045 l
-S
-1826 5045 m
-1802 5046 l
-S
-1778 5046 m
-1754 5047 l
-S
-1730 5047 m
-1706 5048 l
-S
-1682 5048 m
-1658 5049 l
-S
-1634 5049 m
-1610 5050 l
-S
-1586 5050 m
-1562 5051 l
-S
-1538 5051 m
-1514 5052 l
-S
-1490 5052 m
-1466 5053 l
-S
-1442 5053 m
-1418 5053 l
-S
-1393 5054 m
-1379 5054 l
-1369 5054 l
-S
-1345 5055 m
-1321 5055 l
-S
-1297 5056 m
-1273 5056 l
-S
-1249 5057 m
-1225 5057 l
-S
-1201 5058 m
-1177 5058 l
-S
-1153 5059 m
-1129 5059 l
-S
-1105 5060 m
-1081 5060 l
-S
-1057 5061 m
-1033 5061 l
-S
-1009 5062 m
-985 5062 l
-S
-961 5063 m
-937 5063 l
-S
-913 5063 m
-889 5064 l
-S
-865 5064 m
-842 5065 l
-841 5065 l
-S
-817 5065 m
-793 5066 l
-S
-769 5066 m
-745 5067 l
-S
-721 5067 m
-697 5068 l
-S
-673 5068 m
-649 5069 l
-S
-625 5069 m
-601 5070 l
-S
-577 5070 m
-553 5071 l
-S
-4873 4359 m
-4849 4359 l
-S
-4825 4360 m
-4801 4360 l
-S
-4777 4361 m
-4753 4361 l
-S
-4729 4362 m
-4705 4362 l
-S
-4681 4362 m
-4657 4363 l
-S
-4633 4363 m
-4609 4364 l
-S
-4585 4364 m
-4563 4365 l
-4561 4365 l
-S
-4537 4365 m
-4513 4366 l
-S
-4489 4366 m
-4465 4367 l
-S
-4441 4367 m
-4417 4368 l
-S
-4393 4368 m
-4369 4369 l
-S
-4345 4369 m
-4321 4370 l
-S
-4297 4370 m
-4273 4371 l
-S
-4249 4371 m
-4225 4372 l
-S
-4201 4372 m
-4177 4373 l
-S
-4153 4373 m
-4129 4374 l
-S
-4105 4374 m
-4081 4375 l
-S
-4057 4375 m
-4033 4375 l
-S
-4009 4376 m
-3985 4376 l
-S
-3961 4377 m
-3937 4377 l
-S
-3913 4378 m
-3889 4378 l
-S
-3865 4379 m
-3841 4379 l
-S
-3816 4380 m
-3792 4380 l
-S
-3768 4381 m
-3744 4381 l
-S
-3720 4382 m
-3696 4382 l
-S
-3672 4383 m
-3648 4383 l
-S
-3624 4384 m
-3600 4384 l
-S
-3576 4385 m
-3552 4385 l
-S
-3528 4386 m
-3504 4386 l
-S
-3480 4387 m
-3456 4387 l
-S
-3432 4387 m
-3408 4388 l
-S
-3384 4388 m
-3360 4389 l
-S
-3336 4389 m
-3312 4390 l
-S
-3288 4390 m
-3264 4391 l
-S
-3240 4391 m
-3216 4392 l
-S
-3192 4392 m
-3168 4393 l
-S
-3144 4393 m
-3120 4394 l
-S
-3096 4394 m
-3072 4395 l
-S
-3048 4395 m
-3024 4396 l
-S
-3000 4396 m
-2976 4397 l
-S
-2952 4397 m
-2928 4398 l
-S
-2904 4398 m
-2880 4399 l
-S
-2856 4399 m
-2832 4400 l
-S
-2808 4400 m
-2784 4400 l
-S
-2760 4401 m
-2736 4401 l
-S
-2712 4402 m
-2688 4402 l
-S
-2664 4403 m
-2640 4403 l
-S
-2616 4404 m
-2592 4404 l
-S
-2568 4405 m
-2544 4405 l
-S
-2520 4406 m
-2496 4406 l
-S
-2472 4407 m
-2448 4407 l
-S
-2424 4408 m
-2416 4408 l
-2400 4408 l
-S
-2376 4409 m
-2352 4409 l
-S
-2328 4410 m
-2304 4410 l
-S
-2280 4411 m
-2256 4411 l
-S
-2232 4412 m
-2208 4412 l
-S
-2184 4413 m
-2160 4413 l
-S
-2136 4413 m
-2112 4414 l
-S
-2088 4414 m
-2064 4415 l
-S
-2040 4415 m
-2016 4416 l
-S
-1992 4416 m
-1968 4417 l
-S
-1944 4417 m
-1920 4418 l
-S
-1896 4418 m
-1879 4419 l
-1872 4419 l
-S
-1848 4419 m
-1824 4420 l
-S
-1800 4420 m
-1776 4421 l
-S
-1752 4421 m
-1728 4422 l
-S
-1704 4422 m
-1680 4423 l
-S
-1656 4423 m
-1632 4424 l
-S
-1608 4424 m
-1584 4425 l
-S
-1560 4425 m
-1536 4426 l
-S
-1512 4426 m
-1488 4426 l
-S
-1464 4427 m
-1439 4427 l
-S
-1415 4428 m
-1391 4428 l
-S
-1367 4429 m
-1343 4429 l
-S
-1319 4430 m
-1295 4430 l
-S
-1271 4431 m
-1247 4431 l
-S
-1223 4432 m
-1199 4432 l
-S
-1175 4433 m
-1151 4433 l
-S
-1127 4434 m
-1103 4434 l
-S
-1079 4435 m
-1055 4435 l
-S
-1031 4436 m
-1007 4436 l
-S
-983 4437 m
-959 4437 l
-S
-935 4438 m
-911 4438 l
-S
-887 4439 m
-863 4439 l
-S
-839 4439 m
-815 4440 l
-S
-791 4440 m
-767 4441 l
-S
-743 4441 m
-719 4442 l
-S
-695 4442 m
-671 4443 l
-S
-647 4443 m
-623 4444 l
-S
-599 4444 m
-575 4445 l
-S
-551 4445 m
-533 4446 l
-S
-4877 3732 m
-4871 3732 l
-S
-4847 3733 m
-4823 3733 l
-S
-4799 3734 m
-4775 3734 l
-S
-4751 3735 m
-4727 3735 l
-S
-4703 3735 m
-4679 3736 l
-S
-4655 3736 m
-4631 3737 l
-S
-4607 3737 m
-4583 3738 l
-S
-4559 3738 m
-4535 3739 l
-S
-4511 3739 m
-4487 3740 l
-S
-4463 3740 m
-4439 3741 l
-S
-4415 3741 m
-4391 3742 l
-S
-4367 3742 m
-4343 3743 l
-S
-4319 3743 m
-4295 3744 l
-S
-4271 3744 m
-4247 3745 l
-S
-4223 3745 m
-4199 3746 l
-S
-4175 3746 m
-4151 3747 l
-S
-4127 3747 m
-4103 3748 l
-S
-4079 3748 m
-4055 3749 l
-S
-4031 3749 m
-4007 3750 l
-S
-3983 3750 m
-3959 3751 l
-S
-3935 3751 m
-3911 3752 l
-S
-3887 3752 m
-3863 3753 l
-S
-3839 3753 m
-3814 3754 l
-S
-3790 3754 m
-3766 3755 l
-S
-3742 3755 m
-3718 3755 l
-S
-3694 3756 m
-3670 3756 l
-S
-3646 3757 m
-3622 3757 l
-S
-3598 3758 m
-3574 3758 l
-S
-3550 3759 m
-3526 3759 l
-S
-3502 3760 m
-3478 3760 l
-S
-3454 3761 m
-3451 3761 l
-3430 3761 l
-S
-3406 3762 m
-3382 3762 l
-S
-3358 3763 m
-3334 3763 l
-S
-3310 3764 m
-3286 3764 l
-S
-3262 3765 m
-3238 3765 l
-S
-3214 3766 m
-3190 3766 l
-S
-3166 3767 m
-3142 3767 l
-S
-3118 3768 m
-3094 3768 l
-S
-3070 3769 m
-3046 3769 l
-S
-3022 3770 m
-2998 3770 l
-S
-2974 3771 m
-2950 3771 l
-S
-2926 3772 m
-2914 3772 l
-2902 3772 l
-S
-2878 3773 m
-2854 3773 l
-S
-2830 3774 m
-2806 3774 l
-S
-2782 3775 m
-2758 3775 l
-S
-2734 3776 m
-2710 3776 l
-S
-2686 3776 m
-2662 3777 l
-S
-2638 3777 m
-2614 3778 l
-S
-2590 3778 m
-2566 3779 l
-S
-2542 3779 m
-2518 3780 l
-S
-2494 3780 m
-2470 3781 l
-S
-2446 3781 m
-2422 3782 l
-S
-2398 3782 m
-2378 3783 l
-2374 3783 l
-S
-2350 3783 m
-2326 3784 l
-S
-2302 3784 m
-2278 3785 l
-S
-2254 3785 m
-2230 3786 l
-S
-2206 3786 m
-2182 3787 l
-S
-2158 3787 m
-2134 3788 l
-S
-2110 3788 m
-2086 3789 l
-S
-2062 3789 m
-2038 3790 l
-S
-2014 3790 m
-1990 3791 l
-S
-1966 3791 m
-1942 3792 l
-S
-1918 3792 m
-1894 3793 l
-S
-1870 3793 m
-1846 3794 l
-S
-1822 3794 m
-1798 3795 l
-S
-1774 3795 m
-1750 3796 l
-S
-1726 3796 m
-1702 3796 l
-S
-1678 3797 m
-1654 3797 l
-S
-1630 3798 m
-1606 3798 l
-S
-1582 3799 m
-1558 3799 l
-S
-1534 3800 m
-1510 3800 l
-S
-1486 3801 m
-1462 3801 l
-S
-1438 3802 m
-1414 3802 l
-S
-1389 3803 m
-1365 3803 l
-S
-1341 3804 m
-1317 3804 l
-S
-1293 3805 m
-1269 3805 l
-S
-1245 3806 m
-1221 3806 l
-S
-1197 3807 m
-1173 3807 l
-S
-1149 3808 m
-1125 3808 l
-S
-1101 3809 m
-1077 3809 l
-S
-1053 3810 m
-1029 3810 l
-S
-1005 3811 m
-981 3811 l
-S
-957 3812 m
-933 3812 l
-S
-909 3813 m
-885 3813 l
-S
-861 3814 m
-837 3814 l
-S
-813 3815 m
-789 3815 l
-S
-765 3816 m
-741 3816 l
-S
-717 3817 m
-693 3817 l
-S
-669 3817 m
-645 3818 l
-S
-621 3818 m
-597 3819 l
-S
-573 3819 m
-549 3820 l
-S
-4869 3105 m
-4845 3106 l
-S
-4821 3106 m
-4797 3107 l
-S
-4773 3107 m
-4749 3108 l
-S
-4725 3108 m
-4701 3109 l
-S
-4677 3109 m
-4653 3110 l
-S
-4629 3110 m
-4605 3111 l
-S
-4581 3111 m
-4557 3112 l
-S
-4533 3112 m
-4509 3113 l
-S
-4485 3113 m
-4461 3114 l
-S
-4437 3114 m
-4413 3115 l
-S
-4389 3115 m
-4365 3116 l
-S
-4341 3116 m
-4317 3117 l
-S
-4293 3117 m
-4269 3118 l
-S
-4245 3118 m
-4221 3119 l
-S
-4197 3119 m
-4173 3120 l
-S
-4149 3120 m
-4125 3121 l
-S
-4101 3121 m
-4077 3122 l
-S
-4053 3122 m
-4029 3123 l
-S
-4005 3123 m
-3981 3124 l
-S
-3957 3124 m
-3950 3124 l
-3933 3125 l
-S
-3909 3125 m
-3885 3126 l
-S
-3861 3126 m
-3837 3127 l
-S
-3813 3127 m
-3789 3128 l
-S
-3764 3128 m
-3740 3129 l
-S
-3716 3129 m
-3692 3130 l
-S
-3668 3130 m
-3644 3131 l
-S
-3620 3131 m
-3596 3132 l
-S
-3572 3132 m
-3548 3133 l
-S
-3524 3133 m
-3500 3134 l
-S
-3476 3134 m
-3452 3135 l
-S
-3428 3135 m
-3413 3135 l
-3404 3136 l
-S
-3380 3136 m
-3356 3137 l
-S
-3332 3137 m
-3308 3138 l
-S
-3284 3138 m
-3260 3139 l
-S
-3236 3139 m
-3212 3140 l
-S
-3188 3140 m
-3164 3141 l
-S
-3140 3141 m
-3116 3142 l
-S
-3092 3142 m
-3068 3143 l
-S
-3044 3143 m
-3020 3144 l
-S
-2996 3144 m
-2972 3145 l
-S
-2948 3145 m
-2924 3146 l
-S
-2900 3146 m
-2876 3147 l
-S
-2852 3147 m
-2828 3148 l
-S
-2804 3148 m
-2780 3149 l
-S
-2756 3149 m
-2732 3150 l
-S
-2708 3150 m
-2684 3151 l
-S
-2660 3151 m
-2636 3152 l
-S
-2612 3152 m
-2588 3152 l
-S
-2564 3153 m
-2540 3153 l
-S
-2516 3154 m
-2492 3154 l
-S
-2468 3155 m
-2444 3155 l
-S
-2420 3156 m
-2396 3156 l
-S
-2372 3157 m
-2348 3157 l
-S
-2324 3158 m
-2300 3158 l
-S
-2276 3159 m
-2252 3159 l
-S
-2228 3160 m
-2204 3160 l
-S
-2180 3161 m
-2156 3161 l
-S
-2132 3162 m
-2108 3162 l
-S
-2084 3163 m
-2060 3163 l
-S
-2036 3164 m
-2012 3164 l
-S
-1988 3165 m
-1964 3165 l
-S
-1940 3166 m
-1916 3166 l
-S
-1892 3167 m
-1868 3167 l
-S
-1844 3168 m
-1820 3168 l
-S
-1796 3169 m
-1772 3169 l
-S
-1748 3170 m
-1724 3170 l
-S
-1700 3171 m
-1676 3171 l
-S
-1652 3172 m
-1628 3172 l
-S
-1604 3173 m
-1580 3173 l
-S
-1556 3174 m
-1532 3174 l
-S
-1508 3175 m
-1484 3175 l
-S
-1460 3176 m
-1436 3176 l
-S
-1412 3177 m
-1388 3177 l
-S
-1364 3178 m
-1340 3178 l
-S
-1315 3179 m
-1291 3179 l
-S
-1267 3180 m
-1265 3180 l
-1243 3180 l
-S
-1219 3181 m
-1195 3181 l
-S
-1171 3182 m
-1147 3182 l
-S
-1123 3183 m
-1099 3183 l
-S
-1075 3184 m
-1051 3184 l
-S
-1027 3185 m
-1003 3185 l
-S
-979 3186 m
-955 3186 l
-S
-931 3187 m
-907 3187 l
-S
-883 3188 m
-859 3188 l
-S
-835 3189 m
-811 3189 l
-S
-787 3190 m
-763 3190 l
-S
-739 3191 m
-728 3191 l
-715 3191 l
-S
-691 3192 m
-667 3192 l
-S
-643 3193 m
-619 3193 l
-S
-595 3194 m
-571 3194 l
-S
-547 3195 m
-533 3195 l
-S
-4877 2479 m
-4867 2479 l
-S
-4843 2479 m
-4819 2480 l
-S
-4795 2480 m
-4771 2481 l
-S
-4747 2481 m
-4723 2482 l
-S
-4699 2482 m
-4675 2483 l
-S
-4651 2483 m
-4627 2484 l
-S
-4603 2484 m
-4579 2485 l
-S
-4555 2485 m
-4531 2486 l
-S
-4507 2486 m
-4483 2487 l
-S
-4459 2487 m
-4448 2488 l
-4435 2488 l
-S
-4411 2488 m
-4387 2489 l
-S
-4363 2489 m
-4339 2490 l
-S
-4315 2490 m
-4291 2491 l
-S
-4267 2491 m
-4243 2492 l
-S
-4219 2492 m
-4195 2493 l
-S
-4171 2493 m
-4147 2494 l
-S
-4123 2494 m
-4099 2495 l
-S
-4075 2495 m
-4051 2496 l
-S
-4027 2496 m
-4003 2497 l
-S
-3979 2497 m
-3955 2498 l
-S
-3931 2498 m
-3911 2499 l
-3907 2499 l
-S
-3883 2499 m
-3859 2500 l
-S
-3835 2500 m
-3811 2501 l
-S
-3787 2501 m
-3763 2502 l
-S
-3739 2502 m
-3715 2503 l
-S
-3691 2503 m
-3667 2504 l
-S
-3642 2504 m
-3618 2505 l
-S
-3594 2505 m
-3570 2506 l
-S
-3546 2506 m
-3522 2507 l
-S
-3498 2507 m
-3474 2508 l
-S
-3450 2508 m
-3426 2509 l
-S
-3402 2509 m
-3378 2510 l
-S
-3354 2510 m
-3330 2511 l
-S
-3306 2511 m
-3282 2512 l
-S
-3258 2512 m
-3234 2513 l
-S
-3210 2513 m
-3186 2514 l
-S
-3162 2514 m
-3138 2515 l
-S
-3114 2515 m
-3090 2516 l
-S
-3066 2516 m
-3042 2517 l
-S
-3018 2517 m
-2994 2518 l
-S
-2970 2519 m
-2946 2519 l
-S
-2922 2520 m
-2898 2520 l
-S
-2874 2521 m
-2850 2521 l
-S
-2826 2522 m
-2802 2522 l
-S
-2778 2523 m
-2754 2523 l
-S
-2730 2524 m
-2706 2524 l
-S
-2682 2525 m
-2658 2525 l
-S
-2634 2526 m
-2610 2526 l
-S
-2586 2527 m
-2562 2527 l
-S
-2538 2528 m
-2514 2528 l
-S
-2490 2529 m
-2466 2529 l
-S
-2442 2530 m
-2418 2530 l
-S
-2394 2531 m
-2370 2531 l
-S
-2346 2532 m
-2322 2532 l
-S
-2298 2533 m
-2274 2533 l
-S
-2250 2534 m
-2226 2534 l
-S
-2202 2535 m
-2178 2535 l
-S
-2154 2536 m
-2130 2536 l
-S
-2106 2537 m
-2082 2537 l
-S
-2058 2538 m
-2034 2538 l
-S
-2010 2539 m
-1986 2539 l
-S
-1962 2540 m
-1938 2540 l
-S
-1914 2541 m
-1890 2541 l
-S
-1866 2542 m
-1842 2542 l
-S
-1818 2543 m
-1794 2543 l
-S
-1770 2544 m
-1763 2544 l
-1746 2544 l
-S
-1722 2545 m
-1698 2545 l
-S
-1674 2546 m
-1650 2546 l
-S
-1626 2547 m
-1602 2547 l
-S
-1578 2548 m
-1554 2548 l
-S
-1530 2549 m
-1506 2549 l
-S
-1482 2550 m
-1458 2550 l
-S
-1434 2551 m
-1410 2551 l
-S
-1386 2552 m
-1362 2552 l
-S
-1338 2553 m
-1314 2553 l
-S
-1290 2554 m
-1266 2554 l
-S
-1242 2555 m
-1226 2555 l
-1218 2555 l
-S
-1194 2556 m
-1170 2556 l
-S
-1145 2557 m
-1121 2557 l
-S
-1097 2558 m
-1073 2558 l
-S
-1049 2559 m
-1025 2559 l
-S
-1001 2560 m
-977 2560 l
-S
-953 2561 m
-929 2561 l
-S
-905 2562 m
-881 2562 l
-S
-857 2563 m
-833 2563 l
-S
-809 2564 m
-785 2564 l
-S
-761 2565 m
-737 2565 l
-S
-713 2566 m
-689 2566 l
-S
-665 2567 m
-641 2567 l
-S
-617 2568 m
-593 2568 l
-S
-569 2569 m
-545 2569 l
-S
-4865 1852 m
-4841 1853 l
-S
-4817 1853 m
-4793 1854 l
-S
-4769 1854 m
-4745 1855 l
-S
-4721 1855 m
-4697 1856 l
-S
-4673 1856 m
-4649 1857 l
-S
-4625 1857 m
-4601 1858 l
-S
-4577 1858 m
-4553 1859 l
-S
-4529 1859 m
-4505 1860 l
-S
-4481 1860 m
-4457 1861 l
-S
-4433 1861 m
-4409 1862 l
-S
-4385 1862 m
-4361 1863 l
-S
-4337 1863 m
-4313 1864 l
-S
-4289 1864 m
-4265 1865 l
-S
-4241 1865 m
-4217 1866 l
-S
-4193 1866 m
-4169 1867 l
-S
-4145 1867 m
-4121 1868 l
-S
-4097 1869 m
-4073 1869 l
-S
-4049 1870 m
-4025 1870 l
-S
-4001 1871 m
-3977 1871 l
-S
-3953 1872 m
-3929 1872 l
-S
-3905 1873 m
-3881 1873 l
-S
-3857 1874 m
-3833 1874 l
-S
-3809 1875 m
-3785 1875 l
-S
-3761 1876 m
-3737 1876 l
-S
-3713 1877 m
-3689 1877 l
-S
-3665 1878 m
-3641 1878 l
-S
-3617 1879 m
-3593 1879 l
-S
-3569 1880 m
-3545 1880 l
-S
-3521 1881 m
-3497 1881 l
-S
-3473 1882 m
-3448 1882 l
-S
-3424 1883 m
-3400 1883 l
-S
-3376 1884 m
-3352 1884 l
-S
-3328 1885 m
-3304 1885 l
-S
-3280 1886 m
-3256 1886 l
-S
-3232 1887 m
-3208 1887 l
-S
-3184 1888 m
-3160 1888 l
-S
-3136 1889 m
-3112 1889 l
-S
-3088 1890 m
-3064 1890 l
-S
-3040 1891 m
-3016 1891 l
-S
-2992 1892 m
-2968 1892 l
-S
-2944 1893 m
-2920 1893 l
-S
-2896 1894 m
-2872 1894 l
-S
-2848 1895 m
-2824 1895 l
-S
-2800 1896 m
-2797 1896 l
-2776 1896 l
-S
-2752 1897 m
-2728 1897 l
-S
-2704 1898 m
-2680 1898 l
-S
-2656 1899 m
-2632 1900 l
-S
-2608 1900 m
-2584 1901 l
-S
-2560 1901 m
-2536 1902 l
-S
-2512 1902 m
-2488 1903 l
-S
-2464 1903 m
-2440 1904 l
-S
-2416 1904 m
-2392 1905 l
-S
-2368 1905 m
-2344 1906 l
-S
-2320 1906 m
-2296 1907 l
-S
-2272 1907 m
-2260 1907 l
-2248 1908 l
-S
-2224 1908 m
-2200 1909 l
-S
-2176 1909 m
-2152 1910 l
-S
-2128 1910 m
-2104 1911 l
-S
-2080 1911 m
-2056 1912 l
-S
-2032 1912 m
-2008 1913 l
-S
-1984 1913 m
-1960 1914 l
-S
-1936 1914 m
-1912 1915 l
-S
-1888 1915 m
-1864 1916 l
-S
-1840 1916 m
-1816 1917 l
-S
-1792 1917 m
-1768 1918 l
-S
-1744 1918 m
-1724 1919 l
-1720 1919 l
-S
-1696 1919 m
-1672 1920 l
-S
-1648 1920 m
-1624 1921 l
-S
-1600 1921 m
-1576 1922 l
-S
-1552 1922 m
-1528 1923 l
-S
-1504 1923 m
-1480 1924 l
-S
-1456 1924 m
-1432 1925 l
-S
-1408 1925 m
-1384 1926 l
-S
-1360 1926 m
-1336 1927 l
-S
-1312 1927 m
-1288 1928 l
-S
-1264 1928 m
-1240 1929 l
-S
-1216 1930 m
-1192 1930 l
-S
-1168 1931 m
-1144 1931 l
-S
-1120 1932 m
-1096 1932 l
-S
-1072 1933 m
-1048 1933 l
-S
-1024 1934 m
-1000 1934 l
-S
-976 1935 m
-952 1935 l
-S
-927 1936 m
-903 1936 l
-S
-879 1937 m
-855 1937 l
-S
-831 1938 m
-807 1938 l
-S
-783 1939 m
-759 1939 l
-S
-735 1940 m
-711 1940 l
-S
-687 1941 m
-663 1941 l
-S
-639 1942 m
-615 1942 l
-S
-591 1943 m
-567 1943 l
-S
-543 1944 m
-533 1944 l
-S
-4877 2742 m
-4876 2728 l
-S
-4875 2704 m
-4873 2680 l
-S
-4872 2656 m
-4870 2632 l
-S
-4869 2608 m
-4867 2584 l
-S
-4866 2560 m
-4864 2536 l
-S
-4863 2512 m
-4861 2488 l
-S
-4860 2464 m
-4858 2440 l
-S
-4857 2416 m
-4855 2392 l
-S
-4854 2368 m
-4852 2344 l
-S
-4851 2320 m
-4849 2296 l
-S
-4848 2273 m
-4846 2249 l
-S
-4845 2225 m
-4843 2201 l
-S
-4842 2177 m
-4840 2153 l
-S
-4838 2129 m
-4838 2121 l
-4837 2105 l
-S
-4835 2081 m
-4834 2057 l
-S
-4832 2033 m
-4831 2009 l
-S
-4829 1985 m
-4828 1961 l
-S
-4826 1937 m
-4825 1913 l
-S
-4823 1889 m
-4822 1865 l
-S
-4820 1841 m
-4819 1817 l
-S
-4817 1793 m
-4816 1777 l
-S
-4502 6121 m
-4501 6113 l
-S
-4500 6089 m
-4498 6065 l
-S
-4497 6041 m
-4496 6017 l
-S
-4494 5993 m
-4493 5969 l
-S
-4491 5945 m
-4490 5921 l
-S
-4489 5897 m
-4488 5888 l
-4487 5874 l
-S
-4486 5850 m
-4484 5826 l
-S
-4483 5802 m
-4482 5778 l
-S
-4480 5754 m
-4479 5730 l
-S
-4477 5706 m
-4476 5682 l
-S
-4475 5658 m
-4473 5634 l
-S
-4472 5610 m
-4470 5586 l
-S
-4469 5562 m
-4468 5538 l
-S
-4466 5514 m
-4465 5490 l
-S
-4463 5466 m
-4462 5442 l
-S
-4461 5418 m
-4459 5394 l
-S
-4458 5370 m
-4457 5351 l
-4456 5346 l
-S
-4455 5322 m
-4454 5298 l
-S
-4452 5274 m
-4451 5250 l
-S
-4449 5226 m
-4448 5202 l
-S
-4446 5178 m
-4445 5155 l
-S
-4444 5131 m
-4442 5107 l
-S
-4441 5083 m
-4439 5059 l
-S
-4438 5035 m
-4436 5011 l
-S
-4435 4987 m
-4434 4963 l
-S
-4432 4939 m
-4431 4915 l
-S
-4429 4891 m
-4428 4867 l
-S
-4426 4843 m
-4425 4819 l
-S
-4424 4795 m
-4422 4771 l
-S
-4421 4747 m
-4419 4723 l
-S
-4418 4699 m
-4416 4675 l
-S
-4415 4651 m
-4414 4627 l
-S
-4412 4603 m
-4411 4579 l
-S
-4409 4555 m
-4408 4531 l
-S
-4406 4507 m
-4405 4484 l
-S
-4403 4460 m
-4402 4436 l
-S
-4401 4412 m
-4399 4388 l
-S
-4398 4364 m
-4396 4340 l
-S
-4395 4316 m
-4393 4292 l
-S
-4392 4268 m
-4390 4244 l
-S
-4389 4220 m
-4388 4196 l
-S
-4386 4172 m
-4385 4148 l
-S
-4383 4124 m
-4382 4100 l
-S
-4380 4076 m
-4379 4052 l
-S
-4377 4028 m
-4376 4004 l
-S
-4374 3980 m
-4373 3956 l
-S
-4372 3932 m
-4370 3908 l
-S
-4369 3884 m
-4367 3860 l
-S
-4366 3836 m
-4364 3813 l
-S
-4363 3789 m
-4361 3765 l
-S
-4360 3741 m
-4358 3717 l
-S
-4357 3693 m
-4355 3669 l
-S
-4354 3645 m
-4353 3621 l
-S
-4351 3597 m
-4350 3573 l
-S
-4348 3549 m
-4347 3525 l
-S
-4345 3501 m
-4344 3477 l
-S
-4342 3453 m
-4341 3429 l
-S
-4339 3405 m
-4338 3381 l
-S
-4336 3357 m
-4335 3333 l
-S
-4333 3309 m
-4332 3285 l
-S
-4330 3261 m
-4329 3237 l
-S
-4327 3213 m
-4327 3206 l
-4326 3190 l
-S
-4324 3166 m
-4323 3142 l
-S
-4321 3118 m
-4320 3094 l
-S
-4318 3070 m
-4317 3046 l
-S
-4316 3022 m
-4314 2998 l
-S
-4313 2974 m
-4311 2950 l
-S
-4310 2926 m
-4308 2902 l
-S
-4307 2878 m
-4305 2854 l
-S
-4304 2830 m
-4302 2806 l
-S
-4301 2782 m
-4299 2758 l
-S
-4298 2734 m
-4296 2710 l
-S
-4295 2686 m
-4294 2670 l
-4293 2662 l
-S
-4292 2638 m
-4290 2614 l
-S
-4289 2590 m
-4287 2567 l
-S
-4286 2543 m
-4284 2519 l
-S
-4283 2495 m
-4281 2471 l
-S
-4280 2447 m
-4278 2423 l
-S
-4277 2399 m
-4275 2375 l
-S
-4274 2351 m
-4272 2327 l
-S
-4270 2303 m
-4269 2279 l
-S
-4267 2255 m
-4266 2231 l
-S
-4264 2207 m
-4263 2183 l
-S
-4261 2159 m
-4260 2135 l
-S
-4258 2111 m
-4257 2087 l
-S
-4255 2063 m
-4254 2039 l
-S
-4252 2015 m
-4251 1991 l
-S
-4249 1968 m
-4248 1944 l
-S
-4246 1920 m
-4245 1896 l
-S
-4243 1872 m
-4242 1848 l
-S
-4240 1824 m
-4239 1800 l
-S
-3923 6120 m
-3921 6096 l
-S
-3920 6072 m
-3918 6048 l
-S
-3917 6024 m
-3916 6000 l
-S
-3914 5976 m
-3913 5952 l
-S
-3912 5928 m
-3910 5904 l
-S
-3909 5880 m
-3907 5856 l
-S
-3906 5832 m
-3905 5808 l
-S
-3903 5784 m
-3902 5760 l
-S
-3900 5736 m
-3899 5712 l
-S
-3898 5688 m
-3896 5664 l
-S
-3895 5640 m
-3893 5616 l
-S
-3892 5592 m
-3890 5568 l
-S
-3889 5544 m
-3888 5521 l
-S
-3886 5497 m
-3885 5473 l
-S
-3883 5449 m
-3882 5425 l
-S
-3881 5401 m
-3879 5377 l
-S
-3878 5353 m
-3876 5329 l
-S
-3875 5305 m
-3874 5281 l
-S
-3872 5257 m
-3871 5233 l
-S
-3869 5209 m
-3868 5185 l
-S
-3866 5161 m
-3865 5137 l
-S
-3864 5113 m
-3862 5089 l
-S
-3861 5065 m
-3859 5041 l
-S
-3858 5017 m
-3857 4993 l
-S
-3855 4969 m
-3854 4945 l
-S
-3852 4921 m
-3851 4897 l
-S
-3849 4873 m
-3848 4849 l
-S
-3847 4826 m
-3845 4802 l
-S
-3844 4778 m
-3842 4754 l
-S
-3841 4730 m
-3839 4706 l
-S
-3838 4682 m
-3836 4658 l
-S
-3835 4634 m
-3834 4610 l
-S
-3832 4586 m
-3831 4562 l
-S
-3829 4538 m
-3828 4514 l
-S
-3826 4490 m
-3825 4466 l
-S
-3823 4442 m
-3822 4418 l
-S
-3821 4394 m
-3819 4370 l
-S
-3818 4346 m
-3816 4322 l
-S
-3815 4298 m
-3814 4290 l
-3813 4274 l
-S
-3812 4250 m
-3810 4226 l
-S
-3809 4202 m
-3808 4178 l
-S
-3806 4155 m
-3805 4131 l
-S
-3803 4107 m
-3802 4083 l
-S
-3800 4059 m
-3799 4035 l
-S
-3797 4011 m
-3796 3987 l
-S
-3794 3963 m
-3793 3939 l
-S
-3792 3915 m
-3790 3891 l
-S
-3789 3867 m
-3787 3843 l
-S
-3786 3819 m
-3784 3795 l
-S
-3783 3771 m
-3782 3754 l
-3781 3747 l
-S
-3780 3723 m
-3778 3699 l
-S
-3777 3675 m
-3775 3651 l
-S
-3774 3627 m
-3772 3603 l
-S
-3771 3579 m
-3770 3555 l
-S
-3768 3531 m
-3767 3508 l
-S
-3765 3484 m
-3764 3460 l
-S
-3762 3436 m
-3761 3412 l
-S
-3759 3388 m
-3758 3364 l
-S
-3756 3340 m
-3755 3316 l
-S
-3753 3292 m
-3752 3268 l
-S
-3750 3244 m
-3749 3220 l
-S
-3747 3196 m
-3746 3172 l
-S
-3744 3148 m
-3743 3124 l
-S
-3741 3100 m
-3740 3076 l
-S
-3738 3052 m
-3737 3028 l
-S
-3735 3004 m
-3734 2980 l
-S
-3732 2956 m
-3731 2932 l
-S
-3730 2908 m
-3728 2885 l
-S
-3727 2861 m
-3725 2837 l
-S
-3724 2813 m
-3722 2789 l
-S
-3721 2765 m
-3719 2741 l
-S
-3718 2717 m
-3716 2693 l
-S
-3715 2669 m
-3713 2645 l
-S
-3712 2621 m
-3710 2597 l
-S
-3709 2573 m
-3707 2549 l
-S
-3706 2525 m
-3704 2501 l
-S
-3703 2477 m
-3701 2453 l
-S
-3699 2429 m
-3698 2405 l
-S
-3696 2381 m
-3695 2357 l
-S
-3693 2333 m
-3692 2309 l
-S
-3690 2286 m
-3689 2262 l
-S
-3687 2238 m
-3686 2214 l
-S
-3684 2190 m
-3683 2166 l
-S
-3681 2142 m
-3680 2118 l
-S
-3678 2094 m
-3677 2070 l
-S
-3675 2046 m
-3674 2022 l
-S
-3672 1998 m
-3671 1974 l
-S
-3669 1950 m
-3668 1926 l
-S
-3666 1902 m
-3665 1878 l
-S
-3663 1854 m
-3662 1830 l
-S
-3660 1806 m
-3658 1782 l
-S
-3343 6102 m
-3341 6078 l
-S
-3340 6054 m
-3339 6030 l
-S
-3337 6006 m
-3336 5982 l
-S
-3334 5958 m
-3333 5934 l
-S
-3332 5910 m
-3332 5910 l
-3330 5887 l
-S
-3329 5863 m
-3327 5839 l
-S
-3326 5815 m
-3325 5791 l
-S
-3323 5767 m
-3322 5743 l
-S
-3320 5719 m
-3319 5695 l
-S
-3318 5671 m
-3316 5647 l
-S
-3315 5623 m
-3313 5599 l
-S
-3312 5575 m
-3311 5551 l
-S
-3309 5527 m
-3308 5503 l
-S
-3306 5479 m
-3305 5455 l
-S
-3304 5431 m
-3302 5407 l
-S
-3301 5383 m
-3300 5374 l
-3299 5359 l
-S
-3298 5335 m
-3296 5311 l
-S
-3295 5287 m
-3294 5263 l
-S
-3292 5239 m
-3291 5215 l
-S
-3289 5191 m
-3288 5168 l
-S
-3287 5144 m
-3285 5120 l
-S
-3284 5096 m
-3282 5072 l
-S
-3281 5048 m
-3279 5024 l
-S
-3278 5000 m
-3277 4976 l
-S
-3275 4952 m
-3274 4928 l
-S
-3272 4904 m
-3271 4880 l
-S
-3269 4856 m
-3268 4838 l
-3268 4832 l
-S
-3267 4808 m
-3265 4784 l
-S
-3264 4760 m
-3262 4736 l
-S
-3261 4712 m
-3259 4688 l
-S
-3258 4664 m
-3256 4640 l
-S
-3255 4616 m
-3254 4592 l
-S
-3252 4568 m
-3251 4544 l
-S
-3249 4520 m
-3248 4497 l
-S
-3246 4473 m
-3245 4449 l
-S
-3244 4425 m
-3242 4401 l
-S
-3241 4377 m
-3239 4353 l
-S
-3238 4329 m
-3236 4305 l
-S
-3235 4281 m
-3233 4257 l
-S
-3232 4233 m
-3231 4209 l
-S
-3229 4185 m
-3228 4161 l
-S
-3226 4137 m
-3225 4113 l
-S
-3223 4089 m
-3222 4065 l
-S
-3220 4041 m
-3219 4017 l
-S
-3217 3993 m
-3216 3969 l
-S
-3214 3945 m
-3213 3921 l
-S
-3212 3897 m
-3210 3873 l
-S
-3209 3849 m
-3207 3826 l
-S
-3206 3802 m
-3204 3778 l
-S
-3203 3754 m
-3201 3730 l
-S
-3200 3706 m
-3198 3682 l
-S
-3197 3658 m
-3195 3634 l
-S
-3194 3610 m
-3192 3586 l
-S
-3191 3562 m
-3190 3538 l
-S
-3188 3514 m
-3187 3490 l
-S
-3185 3466 m
-3184 3442 l
-S
-3182 3418 m
-3181 3394 l
-S
-3179 3370 m
-3178 3346 l
-S
-3176 3322 m
-3175 3298 l
-S
-3173 3274 m
-3172 3250 l
-S
-3170 3226 m
-3169 3203 l
-S
-3167 3179 m
-3166 3155 l
-S
-3164 3131 m
-3163 3107 l
-S
-3161 3083 m
-3160 3059 l
-S
-3158 3035 m
-3157 3011 l
-S
-3155 2987 m
-3154 2963 l
-S
-3152 2939 m
-3151 2915 l
-S
-3149 2891 m
-3148 2867 l
-S
-3146 2843 m
-3145 2819 l
-S
-3143 2795 m
-3142 2771 l
-S
-3141 2747 m
-3139 2723 l
-S
-3138 2699 m
-3137 2694 l
-3136 2675 l
-S
-3135 2651 m
-3133 2627 l
-S
-3131 2603 m
-3130 2580 l
-S
-3128 2556 m
-3127 2532 l
-S
-3125 2508 m
-3124 2484 l
-S
-3122 2460 m
-3121 2436 l
-S
-3119 2412 m
-3118 2388 l
-S
-3116 2364 m
-3115 2340 l
-S
-3113 2316 m
-3112 2292 l
-S
-3110 2268 m
-3109 2244 l
-S
-3107 2220 m
-3106 2196 l
-S
-3104 2172 m
-3103 2158 l
-3103 2148 l
-S
-3101 2124 m
-3100 2100 l
-S
-3098 2076 m
-3097 2052 l
-S
-3095 2028 m
-3094 2004 l
-S
-3092 1981 m
-3091 1957 l
-S
-3089 1933 m
-3088 1909 l
-S
-3086 1885 m
-3084 1861 l
-S
-3083 1837 m
-3081 1813 l
-S
-3080 1789 m
-3079 1777 l
-S
-2765 6121 m
-2764 6109 l
-S
-2763 6085 m
-2761 6061 l
-S
-2760 6037 m
-2759 6013 l
-S
-2757 5989 m
-2756 5965 l
-S
-2755 5941 m
-2753 5921 l
-2753 5917 l
-S
-2752 5893 m
-2750 5869 l
-S
-2749 5845 m
-2748 5821 l
-S
-2746 5797 m
-2745 5773 l
-S
-2743 5749 m
-2742 5725 l
-S
-2741 5701 m
-2739 5677 l
-S
-2738 5653 m
-2736 5629 l
-S
-2735 5605 m
-2733 5581 l
-S
-2732 5557 m
-2731 5534 l
-S
-2729 5510 m
-2728 5486 l
-S
-2726 5462 m
-2725 5438 l
-S
-2724 5414 m
-2722 5390 l
-S
-2721 5366 m
-2719 5342 l
-S
-2718 5318 m
-2717 5294 l
-S
-2715 5270 m
-2714 5246 l
-S
-2712 5222 m
-2711 5198 l
-S
-2709 5174 m
-2708 5150 l
-S
-2707 5126 m
-2705 5102 l
-S
-2704 5078 m
-2702 5054 l
-S
-2701 5030 m
-2699 5006 l
-S
-2698 4982 m
-2697 4958 l
-S
-2695 4934 m
-2694 4910 l
-S
-2692 4886 m
-2691 4862 l
-S
-2689 4839 m
-2688 4815 l
-S
-2687 4791 m
-2685 4767 l
-S
-2684 4743 m
-2682 4719 l
-S
-2681 4695 m
-2679 4671 l
-S
-2678 4647 m
-2677 4623 l
-S
-2675 4599 m
-2674 4575 l
-S
-2672 4551 m
-2671 4527 l
-S
-2669 4503 m
-2668 4479 l
-S
-2666 4455 m
-2665 4431 l
-S
-2664 4407 m
-2662 4383 l
-S
-2661 4359 m
-2659 4335 l
-S
-2658 4311 m
-2656 4287 l
-S
-2655 4263 m
-2653 4239 l
-S
-2652 4215 m
-2651 4191 l
-S
-2649 4168 m
-2648 4144 l
-S
-2646 4120 m
-2645 4096 l
-S
-2643 4072 m
-2642 4048 l
-S
-2640 4024 m
-2639 4000 l
-S
-2637 3976 m
-2636 3952 l
-S
-2634 3928 m
-2633 3904 l
-S
-2632 3880 m
-2630 3856 l
-S
-2629 3832 m
-2627 3808 l
-S
-2626 3784 m
-2625 3778 l
-2624 3760 l
-S
-2623 3736 m
-2621 3712 l
-S
-2620 3688 m
-2618 3664 l
-S
-2617 3640 m
-2615 3616 l
-S
-2614 3592 m
-2612 3568 l
-S
-2611 3544 m
-2610 3521 l
-S
-2608 3497 m
-2607 3473 l
-S
-2605 3449 m
-2604 3425 l
-S
-2602 3401 m
-2601 3377 l
-S
-2599 3353 m
-2598 3329 l
-S
-2596 3305 m
-2595 3281 l
-S
-2593 3257 m
-2592 3242 l
-2592 3233 l
-S
-2590 3209 m
-2589 3185 l
-S
-2587 3161 m
-2586 3137 l
-S
-2584 3113 m
-2583 3089 l
-S
-2581 3065 m
-2580 3041 l
-S
-2578 3017 m
-2577 2993 l
-S
-2575 2969 m
-2574 2945 l
-S
-2572 2921 m
-2571 2898 l
-S
-2569 2874 m
-2568 2850 l
-S
-2566 2826 m
-2565 2802 l
-S
-2563 2778 m
-2562 2754 l
-S
-2560 2730 m
-2559 2706 l
-2559 2706 l
-S
-2557 2682 m
-2556 2658 l
-S
-2554 2634 m
-2553 2610 l
-S
-2551 2586 m
-2550 2562 l
-S
-2548 2538 m
-2547 2514 l
-S
-2545 2490 m
-2544 2466 l
-S
-2542 2442 m
-2541 2418 l
-S
-2539 2394 m
-2538 2370 l
-S
-2536 2346 m
-2535 2322 l
-S
-2533 2299 m
-2532 2275 l
-S
-2530 2251 m
-2529 2227 l
-S
-2527 2203 m
-2526 2179 l
-S
-2524 2155 m
-2523 2131 l
-S
-2521 2107 m
-2520 2083 l
-S
-2518 2059 m
-2517 2035 l
-S
-2515 2011 m
-2514 1987 l
-S
-2512 1963 m
-2511 1939 l
-S
-2509 1915 m
-2507 1891 l
-S
-2506 1867 m
-2504 1843 l
-S
-2503 1819 m
-2501 1795 l
-S
-2186 6115 m
-2184 6091 l
-S
-2183 6067 m
-2182 6043 l
-S
-2180 6019 m
-2179 5995 l
-S
-2177 5971 m
-2176 5947 l
-S
-2175 5923 m
-2173 5900 l
-S
-2172 5876 m
-2170 5852 l
-S
-2169 5828 m
-2168 5804 l
-S
-2166 5780 m
-2165 5756 l
-S
-2163 5732 m
-2162 5708 l
-S
-2161 5684 m
-2159 5660 l
-S
-2158 5636 m
-2156 5612 l
-S
-2155 5588 m
-2154 5564 l
-S
-2152 5540 m
-2151 5516 l
-S
-2149 5492 m
-2148 5468 l
-S
-2147 5444 m
-2145 5420 l
-S
-2144 5396 m
-2142 5372 l
-S
-2141 5348 m
-2139 5324 l
-S
-2138 5300 m
-2137 5276 l
-S
-2135 5252 m
-2134 5228 l
-S
-2132 5205 m
-2131 5181 l
-S
-2129 5157 m
-2128 5133 l
-S
-2127 5109 m
-2125 5085 l
-S
-2124 5061 m
-2122 5037 l
-S
-2121 5013 m
-2120 4989 l
-S
-2118 4965 m
-2117 4941 l
-S
-2115 4917 m
-2114 4893 l
-S
-2112 4869 m
-2112 4861 l
-2111 4845 l
-S
-2110 4821 m
-2108 4797 l
-S
-2107 4773 m
-2105 4749 l
-S
-2104 4725 m
-2102 4701 l
-S
-2101 4677 m
-2099 4653 l
-S
-2098 4629 m
-2097 4605 l
-S
-2095 4581 m
-2094 4557 l
-S
-2092 4533 m
-2091 4510 l
-S
-2089 4486 m
-2088 4462 l
-S
-2086 4438 m
-2085 4414 l
-S
-2084 4390 m
-2082 4366 l
-S
-2081 4342 m
-2080 4325 l
-2079 4318 l
-S
-2078 4294 m
-2076 4270 l
-S
-2075 4246 m
-2073 4222 l
-S
-2072 4198 m
-2071 4174 l
-S
-2069 4150 m
-2068 4126 l
-S
-2066 4102 m
-2065 4078 l
-S
-2063 4054 m
-2062 4030 l
-S
-2060 4006 m
-2059 3982 l
-S
-2057 3958 m
-2056 3934 l
-S
-2054 3910 m
-2053 3886 l
-S
-2052 3863 m
-2050 3839 l
-S
-2049 3815 m
-2047 3791 l
-S
-2046 3767 m
-2044 3743 l
-S
-2043 3719 m
-2041 3695 l
-S
-2040 3671 m
-2038 3647 l
-S
-2037 3623 m
-2035 3599 l
-S
-2034 3575 m
-2032 3551 l
-S
-2031 3527 m
-2030 3503 l
-S
-2028 3479 m
-2027 3455 l
-S
-2025 3431 m
-2024 3407 l
-S
-2022 3383 m
-2021 3359 l
-S
-2019 3335 m
-2018 3311 l
-S
-2016 3287 m
-2015 3263 l
-S
-2013 3239 m
-2012 3216 l
-S
-2010 3192 m
-2009 3168 l
-S
-2007 3144 m
-2006 3120 l
-S
-2004 3096 m
-2003 3072 l
-S
-2001 3048 m
-2000 3024 l
-S
-1998 3000 m
-1997 2976 l
-S
-1995 2952 m
-1994 2928 l
-S
-1992 2904 m
-1991 2880 l
-S
-1989 2856 m
-1988 2832 l
-S
-1986 2808 m
-1985 2784 l
-S
-1983 2760 m
-1982 2736 l
-S
-1980 2712 m
-1979 2688 l
-S
-1977 2664 m
-1976 2640 l
-S
-1974 2617 m
-1973 2593 l
-S
-1971 2569 m
-1970 2545 l
-S
-1968 2521 m
-1967 2497 l
-S
-1965 2473 m
-1964 2449 l
-S
-1962 2425 m
-1961 2401 l
-S
-1959 2377 m
-1958 2353 l
-S
-1956 2329 m
-1955 2305 l
-S
-1953 2281 m
-1952 2257 l
-S
-1950 2233 m
-1949 2209 l
-S
-1947 2185 m
-1947 2182 l
-1946 2161 l
-S
-1944 2137 m
-1943 2113 l
-S
-1941 2089 m
-1940 2065 l
-S
-1938 2041 m
-1937 2018 l
-S
-1935 1994 m
-1933 1970 l
-S
-1932 1946 m
-1930 1922 l
-S
-1929 1898 m
-1927 1874 l
-S
-1926 1850 m
-1924 1826 l
-S
-1923 1802 m
-1921 1778 l
-S
-1606 6098 m
-1604 6074 l
-S
-1603 6050 m
-1602 6026 l
-S
-1600 6002 m
-1599 5978 l
-S
-1598 5954 m
-1597 5944 l
-1596 5930 l
-S
-1595 5906 m
-1593 5882 l
-S
-1592 5858 m
-1591 5834 l
-S
-1589 5810 m
-1588 5786 l
-S
-1586 5762 m
-1585 5738 l
-S
-1583 5714 m
-1582 5690 l
-S
-1581 5666 m
-1579 5642 l
-S
-1578 5618 m
-1576 5594 l
-S
-1575 5571 m
-1574 5547 l
-S
-1572 5523 m
-1571 5499 l
-S
-1569 5475 m
-1568 5451 l
-S
-1567 5427 m
-1566 5408 l
-1565 5403 l
-S
-1564 5379 m
-1562 5355 l
-S
-1561 5331 m
-1560 5307 l
-S
-1558 5283 m
-1557 5259 l
-S
-1555 5235 m
-1554 5211 l
-S
-1552 5187 m
-1551 5163 l
-S
-1550 5139 m
-1548 5115 l
-S
-1547 5091 m
-1545 5067 l
-S
-1544 5043 m
-1542 5019 l
-S
-1541 4995 m
-1540 4971 l
-S
-1538 4947 m
-1537 4923 l
-S
-1535 4899 m
-1534 4876 l
-S
-1532 4852 m
-1531 4828 l
-S
-1530 4804 m
-1528 4780 l
-S
-1527 4756 m
-1525 4732 l
-S
-1524 4708 m
-1522 4684 l
-S
-1521 4660 m
-1519 4636 l
-S
-1518 4612 m
-1517 4588 l
-S
-1515 4564 m
-1514 4540 l
-S
-1512 4516 m
-1511 4492 l
-S
-1509 4468 m
-1508 4444 l
-S
-1507 4420 m
-1505 4396 l
-S
-1504 4372 m
-1502 4348 l
-S
-1501 4324 m
-1499 4300 l
-S
-1498 4276 m
-1496 4252 l
-S
-1495 4228 m
-1493 4205 l
-S
-1492 4181 m
-1491 4157 l
-S
-1489 4133 m
-1488 4109 l
-S
-1486 4085 m
-1485 4061 l
-S
-1483 4037 m
-1482 4013 l
-S
-1480 3989 m
-1479 3965 l
-S
-1477 3941 m
-1476 3917 l
-S
-1475 3893 m
-1473 3869 l
-S
-1472 3845 m
-1470 3821 l
-S
-1469 3797 m
-1467 3773 l
-S
-1466 3749 m
-1464 3725 l
-S
-1463 3701 m
-1461 3677 l
-S
-1460 3653 m
-1458 3629 l
-S
-1457 3605 m
-1455 3581 l
-S
-1454 3558 m
-1452 3534 l
-S
-1451 3510 m
-1449 3486 l
-S
-1448 3462 m
-1447 3438 l
-S
-1445 3414 m
-1444 3390 l
-S
-1442 3366 m
-1441 3342 l
-S
-1439 3318 m
-1438 3294 l
-S
-1436 3270 m
-1436 3266 l
-1435 3246 l
-S
-1433 3222 m
-1432 3198 l
-S
-1430 3174 m
-1429 3150 l
-S
-1427 3126 m
-1426 3102 l
-S
-1424 3078 m
-1423 3054 l
-S
-1421 3030 m
-1420 3006 l
-S
-1418 2982 m
-1417 2958 l
-S
-1415 2935 m
-1414 2911 l
-S
-1412 2887 m
-1411 2863 l
-S
-1409 2839 m
-1408 2815 l
-S
-1406 2791 m
-1405 2767 l
-S
-1403 2743 m
-1403 2730 l
-1402 2719 l
-S
-1400 2695 m
-1399 2671 l
-S
-1397 2647 m
-1396 2623 l
-S
-1394 2599 m
-1393 2575 l
-S
-1391 2551 m
-1390 2527 l
-S
-1388 2503 m
-1387 2479 l
-S
-1385 2455 m
-1384 2431 l
-S
-1382 2407 m
-1381 2383 l
-S
-1379 2359 m
-1378 2336 l
-S
-1376 2312 m
-1375 2288 l
-S
-1373 2264 m
-1372 2240 l
-S
-1370 2216 m
-1369 2194 l
-1369 2192 l
-S
-1367 2168 m
-1366 2144 l
-S
-1364 2120 m
-1363 2096 l
-S
-1361 2072 m
-1360 2048 l
-S
-1358 2024 m
-1356 2000 l
-S
-1355 1976 m
-1353 1952 l
-S
-1352 1928 m
-1350 1904 l
-S
-1349 1880 m
-1347 1856 l
-S
-1346 1832 m
-1344 1808 l
-S
-1343 1784 m
-1342 1777 l
-S
-1028 6121 m
-1027 6104 l
-S
-1026 6080 m
-1025 6056 l
-S
-1023 6032 m
-1022 6008 l
-S
-1020 5984 m
-1019 5960 l
-S
-1018 5937 m
-1016 5913 l
-S
-1015 5889 m
-1013 5865 l
-S
-1012 5841 m
-1011 5817 l
-S
-1009 5793 m
-1008 5769 l
-S
-1006 5745 m
-1005 5721 l
-S
-1004 5697 m
-1002 5673 l
-S
-1001 5649 m
-999 5625 l
-S
-998 5601 m
-997 5577 l
-S
-995 5553 m
-994 5529 l
-S
-992 5505 m
-991 5481 l
-S
-990 5457 m
-988 5433 l
-S
-987 5409 m
-985 5385 l
-S
-984 5361 m
-982 5337 l
-S
-981 5313 m
-980 5289 l
-S
-978 5265 m
-977 5242 l
-S
-975 5218 m
-974 5194 l
-S
-972 5170 m
-971 5146 l
-S
-970 5122 m
-968 5098 l
-S
-967 5074 m
-965 5050 l
-S
-964 5026 m
-962 5002 l
-S
-961 4978 m
-960 4954 l
-S
-958 4930 m
-957 4906 l
-S
-955 4882 m
-954 4858 l
-S
-952 4834 m
-951 4810 l
-S
-950 4786 m
-948 4762 l
-S
-947 4738 m
-945 4714 l
-S
-944 4690 m
-942 4666 l
-S
-941 4642 m
-940 4618 l
-S
-938 4594 m
-937 4571 l
-S
-935 4547 m
-934 4523 l
-S
-932 4499 m
-931 4475 l
-S
-929 4451 m
-928 4427 l
-S
-927 4403 m
-925 4379 l
-S
-924 4355 m
-923 4348 l
-922 4331 l
-S
-921 4307 m
-919 4283 l
-S
-918 4259 m
-916 4235 l
-S
-915 4211 m
-913 4187 l
-S
-912 4163 m
-911 4139 l
-S
-909 4115 m
-908 4091 l
-S
-906 4067 m
-905 4043 l
-S
-903 4019 m
-902 3995 l
-S
-900 3971 m
-899 3947 l
-S
-897 3923 m
-896 3900 l
-S
-895 3876 m
-893 3852 l
-S
-892 3828 m
-891 3813 l
-890 3804 l
-S
-889 3780 m
-887 3756 l
-S
-886 3732 m
-884 3708 l
-S
-883 3684 m
-881 3660 l
-S
-880 3636 m
-878 3612 l
-S
-877 3588 m
-875 3564 l
-S
-874 3540 m
-872 3516 l
-S
-871 3492 m
-869 3468 l
-S
-868 3444 m
-867 3420 l
-S
-865 3396 m
-864 3372 l
-S
-862 3348 m
-861 3324 l
-S
-859 3300 m
-858 3278 l
-858 3277 l
-S
-856 3253 m
-855 3229 l
-S
-853 3205 m
-852 3181 l
-S
-850 3157 m
-849 3133 l
-S
-847 3109 m
-846 3085 l
-S
-844 3061 m
-843 3037 l
-S
-841 3013 m
-840 2989 l
-S
-838 2965 m
-837 2941 l
-S
-835 2917 m
-834 2893 l
-S
-832 2869 m
-831 2845 l
-S
-829 2821 m
-828 2797 l
-S
-826 2773 m
-825 2749 l
-S
-823 2725 m
-822 2701 l
-S
-820 2677 m
-819 2654 l
-S
-817 2630 m
-816 2606 l
-S
-814 2582 m
-813 2558 l
-S
-811 2534 m
-810 2510 l
-S
-808 2486 m
-807 2462 l
-S
-805 2438 m
-804 2414 l
-S
-802 2390 m
-801 2366 l
-S
-799 2342 m
-798 2318 l
-S
-796 2294 m
-795 2270 l
-S
-793 2246 m
-792 2222 l
-S
-790 2198 m
-789 2174 l
-S
-787 2150 m
-786 2126 l
-S
-784 2102 m
-782 2078 l
-S
-781 2055 m
-779 2031 l
-S
-778 2007 m
-776 1983 l
-S
-775 1959 m
-773 1935 l
-S
-772 1911 m
-770 1887 l
-S
-769 1863 m
-767 1839 l
-S
-766 1815 m
-764 1791 l
-S
-0 0 1 rg
-4877 6113 m
-4847 6113 l
-S
-4877 5988 m
-4847 5988 l
-S
-4877 5862 m
-4847 5863 l
-S
-4877 5737 m
-4847 5738 l
-S
-4877 5486 m
-4847 5487 l
-S
-4877 5361 m
-4847 5362 l
-S
-4877 5236 m
-4847 5236 l
-S
-4877 5110 m
-4847 5111 l
-S
-4877 4860 m
-4847 4860 l
-S
-4877 4734 m
-4847 4735 l
-S
-4877 4609 m
-4847 4610 l
-S
-4877 4484 m
-4847 4484 l
-S
-4877 4233 m
-4847 4234 l
-S
-4877 4108 m
-4847 4109 l
-S
-4877 3983 m
-4847 3983 l
-S
-4877 3857 m
-4847 3858 l
-S
-4877 3607 m
-4847 3607 l
-S
-4877 3481 m
-4847 3482 l
-S
-4877 3356 m
-4847 3357 l
-S
-4877 3231 m
-4847 3231 l
-S
-4877 2980 m
-4847 2981 l
-S
-4877 2855 m
-4847 2855 l
-S
-4877 2729 m
-4847 2730 l
-S
-4877 2604 m
-4847 2605 l
-S
-4877 2353 m
-4847 2354 l
-S
-4877 2228 m
-4847 2229 l
-S
-4877 2103 m
-4847 2103 l
-S
-4877 1977 m
-4847 1978 l
-S
-4671 1777 m
-4673 1808 l
-S
-4527 1777 m
-4529 1808 l
-S
-4382 1777 m
-4384 1808 l
-S
-4092 1777 m
-4094 1808 l
-S
-3948 1777 m
-3950 1808 l
-S
-3803 1777 m
-3805 1808 l
-S
-3513 1777 m
-3515 1808 l
-S
-3369 1777 m
-3371 1808 l
-S
-3224 1777 m
-3226 1808 l
-S
-2934 1777 m
-2936 1808 l
-S
-2790 1777 m
-2792 1808 l
-S
-2645 1777 m
-2647 1808 l
-S
-2355 1777 m
-2357 1808 l
-S
-2211 1777 m
-2213 1808 l
-S
-2066 1777 m
-2068 1808 l
-S
-1777 1777 m
-1778 1808 l
-S
-1632 1777 m
-1634 1808 l
-S
-1487 1777 m
-1489 1808 l
-S
-1198 1777 m
-1199 1808 l
-S
-1053 1777 m
-1055 1808 l
-S
-908 1777 m
-910 1808 l
-S
-619 1777 m
-621 1808 l
-S
-533 6071 m
-564 6071 l
-S
-533 5946 m
-564 5946 l
-S
-533 5821 m
-564 5821 l
-S
-533 5571 m
-564 5571 l
-S
-533 5446 m
-564 5446 l
-S
-533 5321 m
-564 5321 l
-S
-533 5196 m
-564 5195 l
-S
-533 4946 m
-564 4945 l
-S
-533 4821 m
-564 4820 l
-S
-533 4696 m
-564 4695 l
-S
-533 4571 m
-564 4570 l
-S
-533 4321 m
-564 4320 l
-S
-533 4195 m
-564 4195 l
-S
-533 4070 m
-564 4070 l
-S
-533 3945 m
-564 3945 l
-S
-533 3695 m
-564 3695 l
-S
-533 3570 m
-564 3569 l
-S
-533 3445 m
-564 3444 l
-S
-533 3320 m
-564 3319 l
-S
-533 3070 m
-564 3069 l
-S
-533 2945 m
-564 2944 l
-S
-533 2820 m
-564 2819 l
-S
-533 2695 m
-564 2694 l
-S
-533 2444 m
-564 2444 l
-S
-533 2319 m
-564 2319 l
-S
-533 2194 m
-564 2194 l
-S
-533 2069 m
-564 2068 l
-S
-533 1819 m
-564 1818 l
-S
-4791 6121 m
-4789 6091 l
-S
-4646 6121 m
-4645 6091 l
-S
-4357 6121 m
-4355 6091 l
-S
-4212 6121 m
-4210 6091 l
-S
-4068 6121 m
-4066 6091 l
-S
-3778 6121 m
-3776 6091 l
-S
-3633 6121 m
-3632 6091 l
-S
-3489 6121 m
-3487 6091 l
-S
-3199 6121 m
-3197 6091 l
-S
-3054 6121 m
-3053 6091 l
-S
-2910 6121 m
-2908 6091 l
-S
-2620 6121 m
-2619 6091 l
-S
-2476 6121 m
-2474 6091 l
-S
-2331 6121 m
-2329 6091 l
-S
-2041 6121 m
-2040 6091 l
-S
-1897 6121 m
-1895 6091 l
-S
-1752 6121 m
-1750 6091 l
-S
-1463 6121 m
-1461 6091 l
-S
-1318 6121 m
-1316 6091 l
-S
-1173 6121 m
-1171 6091 l
-S
-884 6121 m
-882 6091 l
-S
-739 6121 m
-737 6091 l
-S
-594 6121 m
-592 6091 l
-S
-4877 1777 m
-4877 2088 l
-4877 2398 l
-4877 2708 l
-4877 3018 l
-4877 3329 l
-4877 3639 l
-4877 3949 l
-4877 4260 l
-4877 4570 l
-4877 4880 l
-4877 5190 l
-4877 5501 l
-4877 5811 l
-4877 6121 l
-S
-4877 6121 m
-4567 6121 l
-4256 6121 l
-3946 6121 l
-3636 6121 l
-3326 6121 l
-3015 6121 l
-2705 6121 l
-2395 6121 l
-2085 6121 l
-1774 6121 l
-1464 6121 l
-1154 6121 l
-843 6121 l
-533 6121 l
-S
-533 6121 m
-533 5811 l
-533 5501 l
-533 5190 l
-533 4880 l
-533 4570 l
-533 4260 l
-533 3949 l
-533 3639 l
-533 3329 l
-533 3018 l
-533 2708 l
-533 2398 l
-533 2088 l
-533 1777 l
-S
-533 1777 m
-843 1777 l
-1154 1777 l
-1464 1777 l
-1774 1777 l
-2085 1777 l
-2395 1777 l
-2705 1777 l
-3015 1777 l
-3326 1777 l
-3636 1777 l
-3946 1777 l
-4256 1777 l
-4567 1777 l
-4877 1777 l
-S
-1 g
-Y
-5029.5 2159.2 m
-4920 2159 l
-4920 2798 l
-5029 2798 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4935 2185 m
-4935 2227 l
-4966 2204 l
-4966 2216 l
-4969 2223 l
-4973 2227 l
-4984 2231 l
-4992 2231 l
-5003 2227 l
-5011 2219 l
-5014 2208 l
-5014 2197 l
-5011 2185 l
-5007 2182 l
-4999 2178 l
-S
-4935 2257 m
-5014 2257 l
-S
-4977 2257 m
-4966 2268 l
-4962 2276 l
-4962 2287 l
-4966 2294 l
-4977 2298 l
-5014 2298 l
-S
-4954 2328 m
-4951 2328 l
-4943 2332 l
-4939 2336 l
-4935 2343 l
-4935 2358 l
-4939 2366 l
-4943 2370 l
-4951 2373 l
-4958 2373 l
-4966 2370 l
-4977 2362 l
-5014 2325 l
-5014 2377 l
-S
-4935 2422 m
-4939 2411 l
-4951 2403 l
-4969 2400 l
-4981 2400 l
-4999 2403 l
-5011 2411 l
-5014 2422 l
-5014 2430 l
-5011 2441 l
-4999 2449 l
-4981 2452 l
-4969 2452 l
-4951 2449 l
-4939 2441 l
-4935 2430 l
-4935 2422 l
-S
-4962 2479 m
-5014 2479 l
-S
-4977 2479 m
-4966 2490 l
-4962 2497 l
-4962 2509 l
-4966 2516 l
-4977 2520 l
-5014 2520 l
-S
-4977 2520 m
-4966 2531 l
-4962 2539 l
-4962 2550 l
-4966 2558 l
-4977 2561 l
-5014 2561 l
-S
-4935 2610 m
-4939 2599 l
-4951 2591 l
-4969 2588 l
-4981 2588 l
-4999 2591 l
-5011 2599 l
-5014 2610 l
-5014 2618 l
-5011 2629 l
-4999 2637 l
-4981 2640 l
-4969 2640 l
-4951 2637 l
-4939 2629 l
-4935 2618 l
-4935 2610 l
-S
-4935 2685 m
-4939 2674 l
-4951 2667 l
-4969 2663 l
-4981 2663 l
-4999 2667 l
-5011 2674 l
-5014 2685 l
-5014 2693 l
-5011 2704 l
-4999 2712 l
-4981 2716 l
-4969 2716 l
-4951 2712 l
-4939 2704 l
-4935 2693 l
-4935 2685 l
-S
-4973 2779 m
-4966 2776 l
-4962 2764 l
-4962 2753 l
-4966 2742 l
-4973 2738 l
-4981 2742 l
-4984 2749 l
-4988 2768 l
-4992 2776 l
-4999 2779 l
-5003 2779 l
-5011 2776 l
-5014 2764 l
-5014 2753 l
-5011 2742 l
-5003 2738 l
-S
-1 g
-Y
-5029.5 3617.3 m
-4920 3617 l
-4920 3847 l
-5029 3847 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4935 3674 m
-4988 3636 l
-4988 3692 l
-S
-4935 3674 m
-5014 3674 l
-S
-4935 3734 m
-4939 3723 l
-4951 3715 l
-4969 3711 l
-4981 3711 l
-4999 3715 l
-5011 3723 l
-5014 3734 l
-5014 3741 l
-5011 3753 l
-4999 3760 l
-4981 3764 l
-4969 3764 l
-4951 3760 l
-4939 3753 l
-4935 3741 l
-4935 3734 l
-S
-4973 3828 m
-4966 3824 l
-4962 3813 l
-4962 3801 l
-4966 3790 l
-4973 3786 l
-4981 3790 l
-4984 3798 l
-4988 3817 l
-4992 3824 l
-4999 3828 l
-5003 3828 l
-5011 3824 l
-5014 3813 l
-5014 3801 l
-5011 3790 l
-5003 3786 l
-S
-1 g
-Y
-5029.5 4870.5 m
-4920 4870 l
-4920 5100 l
-5029 5100 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4954 4893 m
-4951 4893 l
-4943 4897 l
-4939 4901 l
-4935 4908 l
-4935 4923 l
-4939 4931 l
-4943 4934 l
-4951 4938 l
-4958 4938 l
-4966 4934 l
-4977 4927 l
-5014 4889 l
-5014 4942 l
-S
-4935 4987 m
-4939 4976 l
-4951 4968 l
-4969 4964 l
-4981 4964 l
-4999 4968 l
-5011 4976 l
-5014 4987 l
-5014 4995 l
-5011 5006 l
-4999 5013 l
-4981 5017 l
-4969 5017 l
-4951 5013 l
-4939 5006 l
-4935 4995 l
-4935 4987 l
-S
-4973 5081 m
-4966 5077 l
-4962 5066 l
-4962 5055 l
-4966 5043 l
-4973 5040 l
-4981 5043 l
-4984 5051 l
-4988 5070 l
-4992 5077 l
-4999 5081 l
-5003 5081 l
-5011 5077 l
-5014 5066 l
-5014 5055 l
-5011 5043 l
-5003 5040 l
-S
-1 g
-Y
-2562.2 1200.1 m
-2453 1200 l
-2453 1741 l
-2562 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-2468 1256 m
-2521 1219 l
-2521 1275 l
-S
-2468 1256 m
-2547 1256 l
-S
-2483 1305 m
-2480 1313 l
-2468 1324 l
-2547 1324 l
-S
-2495 1377 m
-2498 1373 l
-2502 1377 l
-2498 1381 l
-2495 1377 l
-S
-2540 1377 m
-2543 1373 l
-2547 1377 l
-2543 1381 l
-2540 1377 l
-S
-2468 1414 m
-2468 1456 l
-2498 1433 l
-2498 1444 l
-2502 1452 l
-2506 1456 l
-2517 1459 l
-2525 1459 l
-2536 1456 l
-2543 1448 l
-2547 1437 l
-2547 1426 l
-2543 1414 l
-2540 1411 l
-2532 1407 l
-S
-2468 1505 m
-2472 1493 l
-2483 1486 l
-2502 1482 l
-2513 1482 l
-2532 1486 l
-2543 1493 l
-2547 1505 l
-2547 1512 l
-2543 1523 l
-2532 1531 l
-2513 1535 l
-2502 1535 l
-2483 1531 l
-2472 1523 l
-2468 1512 l
-2468 1505 l
-S
-2495 1565 m
-2498 1561 l
-2502 1565 l
-2498 1568 l
-2495 1565 l
-S
-2540 1565 m
-2543 1561 l
-2547 1565 l
-2543 1568 l
-2540 1565 l
-S
-2468 1617 m
-2472 1606 l
-2483 1599 l
-2502 1595 l
-2513 1595 l
-2532 1599 l
-2543 1606 l
-2547 1617 l
-2547 1625 l
-2543 1636 l
-2532 1644 l
-2513 1647 l
-2502 1647 l
-2483 1644 l
-2472 1636 l
-2468 1625 l
-2468 1617 l
-S
-2468 1693 m
-2472 1681 l
-2483 1674 l
-2502 1670 l
-2513 1670 l
-2532 1674 l
-2543 1681 l
-2547 1693 l
-2547 1700 l
-2543 1711 l
-2532 1719 l
-2513 1723 l
-2502 1723 l
-2483 1719 l
-2472 1711 l
-2468 1700 l
-2468 1693 l
-S
-1 g
-Y
-3141.2 1388.1 m
-3032 1388 l
-3032 1741 l
-3141 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3066 1411 m
-3062 1411 l
-3055 1414 l
-3051 1418 l
-3047 1426 l
-3047 1441 l
-3051 1448 l
-3055 1452 l
-3062 1456 l
-3070 1456 l
-3077 1452 l
-3089 1444 l
-3126 1407 l
-3126 1459 l
-S
-3074 1531 m
-3085 1527 l
-3092 1520 l
-3096 1508 l
-3096 1505 l
-3092 1493 l
-3085 1486 l
-3074 1482 l
-3070 1482 l
-3059 1486 l
-3051 1493 l
-3047 1505 l
-3047 1508 l
-3051 1520 l
-3059 1527 l
-3074 1531 l
-3092 1531 l
-3111 1527 l
-3122 1520 l
-3126 1508 l
-3126 1501 l
-3122 1490 l
-3115 1486 l
-S
-3074 1565 m
-3077 1561 l
-3081 1565 l
-3077 1568 l
-3074 1565 l
-S
-3119 1565 m
-3122 1561 l
-3126 1565 l
-3122 1568 l
-3119 1565 l
-S
-3047 1617 m
-3051 1606 l
-3062 1599 l
-3081 1595 l
-3092 1595 l
-3111 1599 l
-3122 1606 l
-3126 1617 l
-3126 1625 l
-3122 1636 l
-3111 1644 l
-3092 1647 l
-3081 1647 l
-3062 1644 l
-3051 1636 l
-3047 1625 l
-3047 1617 l
-S
-3047 1693 m
-3051 1681 l
-3062 1674 l
-3081 1670 l
-3092 1670 l
-3111 1674 l
-3122 1681 l
-3126 1693 l
-3126 1700 l
-3122 1711 l
-3111 1719 l
-3092 1723 l
-3081 1723 l
-3062 1719 l
-3051 1711 l
-3047 1700 l
-3047 1693 l
-S
-1 g
-Y
-3720.2 1388.1 m
-3611 1388 l
-3611 1741 l
-3720 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3645 1411 m
-3641 1411 l
-3634 1414 l
-3630 1418 l
-3626 1426 l
-3626 1441 l
-3630 1448 l
-3634 1452 l
-3641 1456 l
-3649 1456 l
-3656 1452 l
-3668 1444 l
-3705 1407 l
-3705 1459 l
-S
-3626 1501 m
-3630 1490 l
-3637 1486 l
-3645 1486 l
-3653 1490 l
-3656 1497 l
-3660 1512 l
-3664 1523 l
-3671 1531 l
-3679 1535 l
-3690 1535 l
-3698 1531 l
-3701 1527 l
-3705 1516 l
-3705 1501 l
-3701 1490 l
-3698 1486 l
-3690 1482 l
-3679 1482 l
-3671 1486 l
-3664 1493 l
-3660 1505 l
-3656 1520 l
-3653 1527 l
-3645 1531 l
-3637 1531 l
-3630 1527 l
-3626 1516 l
-3626 1501 l
-S
-3653 1565 m
-3656 1561 l
-3660 1565 l
-3656 1568 l
-3653 1565 l
-S
-3698 1565 m
-3701 1561 l
-3705 1565 l
-3701 1568 l
-3698 1565 l
-S
-3626 1617 m
-3630 1606 l
-3641 1599 l
-3660 1595 l
-3671 1595 l
-3690 1599 l
-3701 1606 l
-3705 1617 l
-3705 1625 l
-3701 1636 l
-3690 1644 l
-3671 1647 l
-3660 1647 l
-3641 1644 l
-3630 1636 l
-3626 1625 l
-3626 1617 l
-S
-3626 1693 m
-3630 1681 l
-3641 1674 l
-3660 1670 l
-3671 1670 l
-3690 1674 l
-3701 1681 l
-3705 1693 l
-3705 1700 l
-3701 1711 l
-3690 1719 l
-3671 1723 l
-3660 1723 l
-3641 1719 l
-3630 1711 l
-3626 1700 l
-3626 1693 l
-S
-1 g
-Y
-4299.2 1388.1 m
-4190 1388 l
-4190 1741 l
-4299 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4224 1411 m
-4220 1411 l
-4213 1414 l
-4209 1418 l
-4205 1426 l
-4205 1441 l
-4209 1448 l
-4213 1452 l
-4220 1456 l
-4228 1456 l
-4235 1452 l
-4247 1444 l
-4284 1407 l
-4284 1459 l
-S
-4205 1535 m
-4284 1497 l
-S
-4205 1482 m
-4205 1535 l
-S
-4231 1565 m
-4235 1561 l
-4239 1565 l
-4235 1568 l
-4231 1565 l
-S
-4277 1565 m
-4280 1561 l
-4284 1565 l
-4280 1568 l
-4277 1565 l
-S
-4205 1617 m
-4209 1606 l
-4220 1599 l
-4239 1595 l
-4250 1595 l
-4269 1599 l
-4280 1606 l
-4284 1617 l
-4284 1625 l
-4280 1636 l
-4269 1644 l
-4250 1647 l
-4239 1647 l
-4220 1644 l
-4209 1636 l
-4205 1625 l
-4205 1617 l
-S
-4205 1693 m
-4209 1681 l
-4220 1674 l
-4239 1670 l
-4250 1670 l
-4269 1674 l
-4280 1681 l
-4284 1693 l
-4284 1700 l
-4280 1711 l
-4269 1719 l
-4250 1723 l
-4239 1723 l
-4220 1719 l
-4209 1711 l
-4205 1700 l
-4205 1693 l
-S
-1 g
-Y
-4878.1 1388.1 m
-4769 1388 l
-4769 1741 l
-4878 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4803 1411 m
-4799 1411 l
-4792 1414 l
-4788 1418 l
-4784 1426 l
-4784 1441 l
-4788 1448 l
-4792 1452 l
-4799 1456 l
-4807 1456 l
-4814 1452 l
-4826 1444 l
-4863 1407 l
-4863 1459 l
-S
-4795 1531 m
-4788 1527 l
-4784 1516 l
-4784 1508 l
-4788 1497 l
-4799 1490 l
-4818 1486 l
-4837 1486 l
-4852 1490 l
-4859 1497 l
-4863 1508 l
-4863 1512 l
-4859 1523 l
-4852 1531 l
-4841 1535 l
-4837 1535 l
-4826 1531 l
-4818 1523 l
-4814 1512 l
-4814 1508 l
-4818 1497 l
-4826 1490 l
-4837 1486 l
-S
-4810 1565 m
-4814 1561 l
-4818 1565 l
-4814 1568 l
-4810 1565 l
-S
-4856 1565 m
-4859 1561 l
-4863 1565 l
-4859 1568 l
-4856 1565 l
-S
-4784 1617 m
-4788 1606 l
-4799 1599 l
-4818 1595 l
-4829 1595 l
-4848 1599 l
-4859 1606 l
-4863 1617 l
-4863 1625 l
-4859 1636 l
-4848 1644 l
-4829 1647 l
-4818 1647 l
-4799 1644 l
-4788 1636 l
-4784 1625 l
-4784 1617 l
-S
-4784 1693 m
-4788 1681 l
-4799 1674 l
-4818 1670 l
-4829 1670 l
-4848 1674 l
-4859 1681 l
-4863 1693 l
-4863 1700 l
-4859 1711 l
-4848 1719 l
-4829 1723 l
-4818 1723 l
-4799 1719 l
-4788 1711 l
-4784 1700 l
-4784 1693 l
-S
-1 g
-Y
-1983.3 1388.1 m
-1874 1388 l
-1874 1741 l
-1983 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-1889 1414 m
-1889 1456 l
-1919 1433 l
-1919 1444 l
-1923 1452 l
-1927 1456 l
-1938 1459 l
-1946 1459 l
-1957 1456 l
-1964 1448 l
-1968 1437 l
-1968 1426 l
-1964 1414 l
-1961 1411 l
-1953 1407 l
-S
-1904 1493 m
-1901 1501 l
-1889 1512 l
-1968 1512 l
-S
-1916 1565 m
-1919 1561 l
-1923 1565 l
-1919 1568 l
-1916 1565 l
-S
-1961 1565 m
-1964 1561 l
-1968 1565 l
-1964 1568 l
-1961 1565 l
-S
-1889 1617 m
-1893 1606 l
-1904 1599 l
-1923 1595 l
-1934 1595 l
-1953 1599 l
-1964 1606 l
-1968 1617 l
-1968 1625 l
-1964 1636 l
-1953 1644 l
-1934 1647 l
-1923 1647 l
-1904 1644 l
-1893 1636 l
-1889 1625 l
-1889 1617 l
-S
-1889 1693 m
-1893 1681 l
-1904 1674 l
-1923 1670 l
-1934 1670 l
-1953 1674 l
-1964 1681 l
-1968 1693 l
-1968 1700 l
-1964 1711 l
-1953 1719 l
-1934 1723 l
-1923 1723 l
-1904 1719 l
-1893 1711 l
-1889 1700 l
-1889 1693 l
-S
-1 g
-Y
-1404.3 1388.1 m
-1295 1388 l
-1295 1741 l
-1404 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-1310 1414 m
-1310 1456 l
-1340 1433 l
-1340 1444 l
-1344 1452 l
-1348 1456 l
-1359 1459 l
-1367 1459 l
-1378 1456 l
-1385 1448 l
-1389 1437 l
-1389 1426 l
-1385 1414 l
-1382 1411 l
-1374 1407 l
-S
-1329 1486 m
-1325 1486 l
-1318 1490 l
-1314 1493 l
-1310 1501 l
-1310 1516 l
-1314 1523 l
-1318 1527 l
-1325 1531 l
-1333 1531 l
-1340 1527 l
-1352 1520 l
-1389 1482 l
-1389 1535 l
-S
-1337 1565 m
-1340 1561 l
-1344 1565 l
-1340 1568 l
-1337 1565 l
-S
-1382 1565 m
-1385 1561 l
-1389 1565 l
-1385 1568 l
-1382 1565 l
-S
-1310 1617 m
-1314 1606 l
-1325 1599 l
-1344 1595 l
-1355 1595 l
-1374 1599 l
-1385 1606 l
-1389 1617 l
-1389 1625 l
-1385 1636 l
-1374 1644 l
-1355 1647 l
-1344 1647 l
-1325 1644 l
-1314 1636 l
-1310 1625 l
-1310 1617 l
-S
-1310 1693 m
-1314 1681 l
-1325 1674 l
-1344 1670 l
-1355 1670 l
-1374 1674 l
-1385 1681 l
-1389 1693 l
-1389 1700 l
-1385 1711 l
-1374 1719 l
-1355 1723 l
-1344 1723 l
-1325 1719 l
-1314 1711 l
-1310 1700 l
-1310 1693 l
-S
-1 g
-Y
-825.3 1388.1 m
-716 1388 l
-716 1741 l
-825 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-731 1414 m
-731 1456 l
-761 1433 l
-761 1444 l
-765 1452 l
-769 1456 l
-780 1459 l
-788 1459 l
-799 1456 l
-807 1448 l
-810 1437 l
-810 1426 l
-807 1414 l
-803 1411 l
-795 1407 l
-S
-731 1490 m
-731 1531 l
-761 1508 l
-761 1520 l
-765 1527 l
-769 1531 l
-780 1535 l
-788 1535 l
-799 1531 l
-807 1523 l
-810 1512 l
-810 1501 l
-807 1490 l
-803 1486 l
-795 1482 l
-S
-758 1565 m
-761 1561 l
-765 1565 l
-761 1568 l
-758 1565 l
-S
-803 1565 m
-807 1561 l
-810 1565 l
-807 1568 l
-803 1565 l
-S
-731 1617 m
-735 1606 l
-746 1599 l
-765 1595 l
-776 1595 l
-795 1599 l
-807 1606 l
-810 1617 l
-810 1625 l
-807 1636 l
-795 1644 l
-776 1647 l
-765 1647 l
-746 1644 l
-735 1636 l
-731 1625 l
-731 1617 l
-S
-731 1693 m
-735 1681 l
-746 1674 l
-765 1670 l
-776 1670 l
-795 1674 l
-807 1681 l
-810 1693 l
-810 1700 l
-807 1711 l
-795 1719 l
-776 1723 l
-765 1723 l
-746 1719 l
-735 1711 l
-731 1700 l
-731 1693 l
-S
-1 g
-Y
-5319.8 3163 m
-5088 3163 l
-5088 4736 l
-5320 4736 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-5119 3194 m
-5251 3194 l
-S
-5119 3194 m
-5119 3251 l
-5126 3269 l
-5132 3276 l
-5144 3282 l
-5157 3282 l
-5169 3276 l
-5176 3269 l
-5182 3251 l
-5182 3194 l
-S
-5182 3238 m
-5251 3282 l
-S
-5119 3320 m
-5126 3326 l
-5119 3332 l
-5113 3326 l
-5119 3320 l
-S
-5163 3326 m
-5251 3326 l
-S
-5163 3445 m
-5263 3445 l
-5282 3439 l
-5288 3432 l
-5295 3420 l
-5295 3401 l
-5288 3389 l
-S
-5182 3445 m
-5169 3432 l
-5163 3420 l
-5163 3401 l
-5169 3389 l
-5182 3376 l
-5201 3370 l
-5213 3370 l
-5232 3376 l
-5245 3389 l
-5251 3401 l
-5251 3420 l
-5245 3432 l
-5232 3445 l
-S
-5119 3495 m
-5251 3495 l
-S
-5188 3495 m
-5169 3514 l
-5163 3526 l
-5163 3545 l
-5169 3558 l
-5188 3564 l
-5251 3564 l
-S
-5119 3620 m
-5226 3620 l
-5245 3627 l
-5251 3639 l
-5251 3652 l
-S
-5163 3602 m
-5163 3645 l
-S
-5163 3858 m
-5251 3858 l
-S
-5182 3858 m
-5169 3846 l
-5163 3833 l
-5163 3815 l
-5169 3802 l
-5182 3789 l
-5201 3783 l
-5213 3783 l
-5232 3789 l
-5245 3802 l
-5251 3815 l
-5251 3833 l
-5245 3846 l
-5232 3858 l
-S
-5182 3971 m
-5169 3965 l
-5163 3946 l
-5163 3927 l
-5169 3909 l
-5182 3902 l
-5194 3909 l
-5201 3921 l
-5207 3952 l
-5213 3965 l
-5226 3971 l
-5232 3971 l
-5245 3965 l
-5251 3946 l
-5251 3927 l
-5245 3909 l
-5232 3902 l
-S
-5182 4084 m
-5169 4071 l
-5163 4059 l
-5163 4040 l
-5169 4028 l
-5182 4015 l
-5201 4009 l
-5213 4009 l
-5232 4015 l
-5245 4028 l
-5251 4040 l
-5251 4059 l
-5245 4071 l
-5232 4084 l
-S
-5201 4122 m
-5201 4197 l
-5188 4197 l
-5176 4190 l
-5169 4184 l
-5163 4172 l
-5163 4153 l
-5169 4140 l
-5182 4128 l
-5201 4122 l
-5213 4122 l
-5232 4128 l
-5245 4140 l
-5251 4153 l
-5251 4172 l
-5245 4184 l
-5232 4197 l
-S
-5163 4241 m
-5251 4241 l
-S
-5188 4241 m
-5169 4259 l
-5163 4272 l
-5163 4291 l
-5169 4303 l
-5188 4309 l
-5251 4309 l
-S
-5182 4422 m
-5169 4416 l
-5163 4397 l
-5163 4378 l
-5169 4360 l
-5182 4353 l
-5194 4360 l
-5201 4372 l
-5207 4403 l
-5213 4416 l
-5226 4422 l
-5232 4422 l
-5245 4416 l
-5251 4397 l
-5251 4378 l
-5245 4360 l
-5232 4353 l
-S
-5119 4460 m
-5126 4466 l
-5119 4472 l
-5113 4466 l
-5119 4460 l
-S
-5163 4466 m
-5251 4466 l
-S
-5163 4541 m
-5169 4529 l
-5182 4516 l
-5201 4510 l
-5213 4510 l
-5232 4516 l
-5245 4529 l
-5251 4541 l
-5251 4560 l
-5245 4573 l
-5232 4585 l
-5213 4591 l
-5201 4591 l
-5182 4585 l
-5169 4573 l
-5163 4560 l
-5163 4541 l
-S
-5163 4635 m
-5251 4635 l
-S
-5188 4635 m
-5169 4654 l
-5163 4667 l
-5163 4685 l
-5169 4698 l
-5188 4704 l
-5251 4704 l
-S
-1 g
-Y
-3240.9 1170.4 m
-3241 982 l
-2170 982 l
-2170 1170 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3210 1014 m
-3210 1145 l
-S
-3210 1014 m
-3166 1014 l
-3147 1020 l
-3134 1033 l
-3128 1045 l
-3122 1064 l
-3122 1095 l
-3128 1114 l
-3134 1127 l
-3147 1139 l
-3166 1145 l
-3210 1145 l
-S
-3084 1095 m
-3009 1095 l
-3009 1083 l
-3015 1070 l
-3022 1064 l
-3034 1058 l
-3053 1058 l
-3066 1064 l
-3078 1076 l
-3084 1095 l
-3084 1108 l
-3078 1127 l
-3066 1139 l
-3053 1145 l
-3034 1145 l
-3022 1139 l
-3009 1127 l
-S
-2896 1076 m
-2909 1064 l
-2921 1058 l
-2940 1058 l
-2953 1064 l
-2965 1076 l
-2972 1095 l
-2972 1108 l
-2965 1127 l
-2953 1139 l
-2940 1145 l
-2921 1145 l
-2909 1139 l
-2896 1127 l
-S
-2853 1014 m
-2853 1145 l
-S
-2809 1014 m
-2802 1020 l
-2796 1014 l
-2802 1008 l
-2809 1014 l
-S
-2802 1058 m
-2802 1145 l
-S
-2752 1058 m
-2752 1145 l
-S
-2752 1083 m
-2733 1064 l
-2721 1058 l
-2702 1058 l
-2690 1064 l
-2683 1083 l
-2683 1145 l
-S
-2564 1058 m
-2564 1145 l
-S
-2564 1076 m
-2577 1064 l
-2589 1058 l
-2608 1058 l
-2621 1064 l
-2633 1076 l
-2639 1095 l
-2639 1108 l
-2633 1127 l
-2621 1139 l
-2608 1145 l
-2589 1145 l
-2577 1139 l
-2564 1127 l
-S
-2508 1014 m
-2508 1120 l
-2502 1139 l
-2489 1145 l
-2477 1145 l
-S
-2527 1058 m
-2483 1058 l
-S
-2445 1014 m
-2439 1020 l
-2433 1014 l
-2439 1008 l
-2445 1014 l
-S
-2439 1058 m
-2439 1145 l
-S
-2364 1058 m
-2376 1064 l
-2389 1076 l
-2395 1095 l
-2395 1108 l
-2389 1127 l
-2376 1139 l
-2364 1145 l
-2345 1145 l
-2333 1139 l
-2320 1127 l
-2314 1108 l
-2314 1095 l
-2320 1076 l
-2333 1064 l
-2345 1058 l
-2364 1058 l
-S
-2270 1058 m
-2270 1145 l
-S
-2270 1083 m
-2251 1064 l
-2239 1058 l
-2220 1058 l
-2207 1064 l
-2201 1083 l
-2201 1145 l
-S
-1 g
-Y
-371.2 1568.5 m
-186 1568 l
-186 6330 l
-371 6330 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-236 1669 m
-226 1664 l
-216 1654 l
-211 1644 l
-211 1624 l
-216 1614 l
-226 1604 l
-236 1599 l
-251 1594 l
-276 1594 l
-291 1599 l
-301 1604 l
-311 1614 l
-316 1624 l
-316 1644 l
-311 1654 l
-301 1664 l
-291 1669 l
-276 1669 l
-S
-276 1644 m
-276 1669 l
-S
-276 1699 m
-276 1759 l
-266 1759 l
-256 1754 l
-251 1749 l
-246 1739 l
-246 1724 l
-251 1714 l
-261 1704 l
-276 1699 l
-286 1699 l
-301 1704 l
-311 1714 l
-316 1724 l
-316 1739 l
-311 1749 l
-301 1759 l
-S
-246 1814 m
-251 1804 l
-261 1794 l
-276 1789 l
-286 1789 l
-301 1794 l
-311 1804 l
-316 1814 l
-316 1829 l
-311 1839 l
-301 1849 l
-286 1854 l
-276 1854 l
-261 1849 l
-251 1839 l
-246 1829 l
-246 1814 l
-S
-261 1944 m
-251 1934 l
-246 1924 l
-246 1909 l
-251 1899 l
-261 1889 l
-276 1884 l
-286 1884 l
-301 1889 l
-311 1899 l
-316 1909 l
-316 1924 l
-311 1934 l
-301 1944 l
-S
-276 1974 m
-276 2035 l
-266 2035 l
-256 2030 l
-251 2025 l
-246 2015 l
-246 2000 l
-251 1990 l
-261 1979 l
-276 1974 l
-286 1974 l
-301 1979 l
-311 1990 l
-316 2000 l
-316 2015 l
-311 2025 l
-301 2035 l
-S
-246 2070 m
-316 2070 l
-S
-266 2070 m
-251 2085 l
-246 2095 l
-246 2110 l
-251 2120 l
-266 2125 l
-316 2125 l
-S
-211 2170 m
-296 2170 l
-311 2175 l
-316 2185 l
-316 2195 l
-S
-246 2155 m
-246 2190 l
-S
-246 2225 m
-316 2225 l
-S
-276 2225 m
-261 2230 l
-251 2240 l
-246 2250 l
-246 2265 l
-S
-211 2285 m
-216 2290 l
-211 2295 l
-206 2290 l
-211 2285 l
-S
-246 2290 m
-316 2290 l
-S
-261 2385 m
-251 2375 l
-246 2365 l
-246 2350 l
-251 2340 l
-261 2330 l
-276 2325 l
-286 2325 l
-301 2330 l
-311 2340 l
-316 2350 l
-316 2365 l
-311 2375 l
-301 2385 l
-S
-246 2556 m
-316 2556 l
-S
-261 2556 m
-251 2546 l
-246 2536 l
-246 2521 l
-251 2511 l
-261 2501 l
-276 2496 l
-286 2496 l
-301 2501 l
-311 2511 l
-316 2521 l
-316 2536 l
-311 2546 l
-301 2556 l
-S
-246 2596 m
-351 2596 l
-S
-261 2596 m
-251 2606 l
-246 2616 l
-246 2631 l
-251 2641 l
-261 2651 l
-276 2656 l
-286 2656 l
-301 2651 l
-311 2641 l
-316 2631 l
-316 2616 l
-311 2606 l
-301 2596 l
-S
-246 2691 m
-351 2691 l
-S
-261 2691 m
-251 2701 l
-246 2711 l
-246 2726 l
-251 2736 l
-261 2746 l
-276 2751 l
-286 2751 l
-301 2746 l
-311 2736 l
-316 2726 l
-316 2711 l
-311 2701 l
-301 2691 l
-S
-246 2842 m
-316 2842 l
-S
-261 2842 m
-251 2832 l
-246 2822 l
-246 2806 l
-251 2796 l
-261 2786 l
-276 2781 l
-286 2781 l
-301 2786 l
-311 2796 l
-316 2806 l
-316 2822 l
-311 2832 l
-301 2842 l
-S
-246 2882 m
-316 2882 l
-S
-276 2882 m
-261 2887 l
-251 2897 l
-246 2907 l
-246 2922 l
-S
-276 2942 m
-276 3002 l
-266 3002 l
-256 2997 l
-251 2992 l
-246 2982 l
-246 2967 l
-251 2957 l
-261 2947 l
-276 2942 l
-286 2942 l
-301 2947 l
-311 2957 l
-316 2967 l
-316 2982 l
-311 2992 l
-301 3002 l
-S
-246 3037 m
-316 3037 l
-S
-266 3037 m
-251 3052 l
-246 3062 l
-246 3077 l
-251 3087 l
-266 3092 l
-316 3092 l
-S
-211 3137 m
-296 3137 l
-311 3142 l
-316 3152 l
-316 3162 l
-S
-246 3122 m
-246 3157 l
-S
-276 3268 m
-276 3328 l
-266 3328 l
-256 3323 l
-251 3318 l
-246 3308 l
-246 3293 l
-251 3283 l
-261 3273 l
-276 3268 l
-286 3268 l
-301 3273 l
-311 3283 l
-316 3293 l
-316 3308 l
-311 3318 l
-301 3328 l
-S
-246 3418 m
-351 3418 l
-S
-261 3418 m
-251 3408 l
-246 3398 l
-246 3383 l
-251 3373 l
-261 3363 l
-276 3358 l
-286 3358 l
-301 3363 l
-311 3373 l
-316 3383 l
-316 3398 l
-311 3408 l
-301 3418 l
-S
-246 3458 m
-296 3458 l
-311 3463 l
-316 3473 l
-316 3488 l
-311 3498 l
-296 3513 l
-S
-246 3513 m
-316 3513 l
-S
-246 3608 m
-316 3608 l
-S
-261 3608 m
-251 3598 l
-246 3588 l
-246 3573 l
-251 3563 l
-261 3553 l
-276 3548 l
-286 3548 l
-301 3553 l
-311 3563 l
-316 3573 l
-316 3588 l
-311 3598 l
-301 3608 l
-S
-211 3654 m
-296 3654 l
-311 3659 l
-316 3669 l
-316 3679 l
-S
-246 3638 m
-246 3674 l
-S
-246 3729 m
-251 3719 l
-261 3709 l
-276 3704 l
-286 3704 l
-301 3709 l
-311 3719 l
-316 3729 l
-316 3744 l
-311 3754 l
-301 3764 l
-286 3769 l
-276 3769 l
-261 3764 l
-251 3754 l
-246 3744 l
-246 3729 l
-S
-246 3804 m
-316 3804 l
-S
-276 3804 m
-261 3809 l
-251 3819 l
-246 3829 l
-246 3844 l
-S
-211 3864 m
-216 3869 l
-211 3874 l
-206 3869 l
-211 3864 l
-S
-246 3869 m
-316 3869 l
-S
-246 3964 m
-316 3964 l
-S
-261 3964 m
-251 3954 l
-246 3944 l
-246 3929 l
-251 3919 l
-261 3909 l
-276 3904 l
-286 3904 l
-301 3909 l
-311 3919 l
-316 3929 l
-316 3944 l
-311 3954 l
-301 3964 l
-S
-211 4004 m
-316 4004 l
-S
-261 4180 m
-251 4170 l
-246 4160 l
-246 4145 l
-251 4135 l
-261 4125 l
-276 4120 l
-286 4120 l
-301 4125 l
-311 4135 l
-316 4145 l
-316 4160 l
-311 4170 l
-301 4180 l
-S
-246 4235 m
-251 4225 l
-261 4215 l
-276 4210 l
-286 4210 l
-301 4215 l
-311 4225 l
-316 4235 l
-316 4250 l
-311 4260 l
-301 4270 l
-286 4275 l
-276 4275 l
-261 4270 l
-251 4260 l
-246 4250 l
-246 4235 l
-S
-246 4330 m
-251 4320 l
-261 4310 l
-276 4305 l
-286 4305 l
-301 4310 l
-311 4320 l
-316 4330 l
-316 4345 l
-311 4355 l
-301 4365 l
-286 4370 l
-276 4370 l
-261 4365 l
-251 4355 l
-246 4345 l
-246 4330 l
-S
-246 4405 m
-316 4405 l
-S
-276 4405 m
-261 4410 l
-251 4420 l
-246 4430 l
-246 4445 l
-S
-211 4526 m
-316 4526 l
-S
-261 4526 m
-251 4516 l
-246 4506 l
-246 4491 l
-251 4481 l
-261 4470 l
-276 4465 l
-286 4465 l
-301 4470 l
-311 4481 l
-316 4491 l
-316 4506 l
-311 4516 l
-301 4526 l
-S
-211 4561 m
-216 4566 l
-211 4571 l
-206 4566 l
-211 4561 l
-S
-246 4566 m
-316 4566 l
-S
-246 4606 m
-316 4606 l
-S
-266 4606 m
-251 4621 l
-246 4631 l
-246 4646 l
-251 4656 l
-266 4661 l
-316 4661 l
-S
-246 4756 m
-316 4756 l
-S
-261 4756 m
-251 4746 l
-246 4736 l
-246 4721 l
-251 4711 l
-261 4701 l
-276 4696 l
-286 4696 l
-301 4701 l
-311 4711 l
-316 4721 l
-316 4736 l
-311 4746 l
-301 4756 l
-S
-211 4801 m
-296 4801 l
-311 4806 l
-316 4816 l
-316 4826 l
-S
-246 4786 m
-246 4821 l
-S
-276 4851 m
-276 4912 l
-266 4912 l
-256 4907 l
-251 4902 l
-246 4892 l
-246 4876 l
-251 4866 l
-261 4856 l
-276 4851 l
-286 4851 l
-301 4856 l
-311 4866 l
-316 4876 l
-316 4892 l
-311 4902 l
-301 4912 l
-S
-261 4997 m
-251 4992 l
-246 4977 l
-246 4962 l
-251 4947 l
-261 4942 l
-271 4947 l
-276 4957 l
-281 4982 l
-286 4992 l
-296 4997 l
-301 4997 l
-311 4992 l
-316 4977 l
-316 4962 l
-311 4947 l
-301 4942 l
-S
-246 5037 m
-251 5032 l
-256 5037 l
-251 5042 l
-246 5037 l
-S
-311 5042 m
-316 5037 l
-311 5032 l
-306 5037 l
-311 5042 l
-321 5042 l
-331 5037 l
-336 5032 l
-S
-276 5157 m
-276 5217 l
-266 5217 l
-256 5212 l
-251 5207 l
-246 5197 l
-246 5182 l
-251 5172 l
-261 5162 l
-276 5157 l
-286 5157 l
-301 5162 l
-311 5172 l
-316 5182 l
-316 5197 l
-311 5207 l
-301 5217 l
-S
-246 5252 m
-351 5252 l
-S
-261 5252 m
-251 5262 l
-246 5272 l
-246 5287 l
-251 5297 l
-261 5308 l
-276 5313 l
-286 5313 l
-301 5308 l
-311 5297 l
-316 5287 l
-316 5272 l
-311 5262 l
-301 5252 l
-S
-246 5368 m
-251 5358 l
-261 5348 l
-276 5343 l
-286 5343 l
-301 5348 l
-311 5358 l
-316 5368 l
-316 5383 l
-311 5393 l
-301 5403 l
-286 5408 l
-276 5408 l
-261 5403 l
-251 5393 l
-246 5383 l
-246 5368 l
-S
-261 5498 m
-251 5488 l
-246 5478 l
-246 5463 l
-251 5453 l
-261 5443 l
-276 5438 l
-286 5438 l
-301 5443 l
-311 5453 l
-316 5463 l
-316 5478 l
-311 5488 l
-301 5498 l
-S
-211 5533 m
-316 5533 l
-S
-266 5533 m
-251 5548 l
-246 5558 l
-246 5573 l
-251 5583 l
-266 5588 l
-316 5588 l
-S
-211 5749 m
-291 5749 l
-306 5744 l
-311 5739 l
-316 5729 l
-316 5718 l
-311 5708 l
-306 5703 l
-291 5698 l
-281 5698 l
-S
-231 5799 m
-226 5809 l
-211 5824 l
-316 5824 l
-S
-246 5949 m
-261 5944 l
-271 5934 l
-276 5919 l
-276 5914 l
-271 5899 l
-261 5889 l
-246 5884 l
-241 5884 l
-226 5889 l
-216 5899 l
-211 5914 l
-211 5919 l
-216 5934 l
-226 5944 l
-246 5949 l
-271 5949 l
-296 5944 l
-311 5934 l
-316 5919 l
-316 5909 l
-311 5894 l
-301 5889 l
-S
-246 6049 m
-261 6044 l
-271 6034 l
-276 6019 l
-276 6014 l
-271 5999 l
-261 5989 l
-246 5984 l
-241 5984 l
-226 5989 l
-216 5999 l
-211 6014 l
-211 6019 l
-216 6034 l
-226 6044 l
-246 6049 l
-271 6049 l
-296 6044 l
-311 6034 l
-316 6019 l
-316 6009 l
-311 5994 l
-301 5989 l
-S
-211 6155 m
-316 6104 l
-S
-211 6084 m
-211 6155 l
-S
-306 6195 m
-311 6190 l
-316 6195 l
-311 6200 l
-306 6195 l
-S
-211 6295 m
-211 6245 l
-256 6240 l
-251 6245 l
-246 6260 l
-246 6275 l
-251 6290 l
-261 6300 l
-276 6305 l
-286 6305 l
-301 6300 l
-311 6290 l
-316 6275 l
-316 6260 l
-311 6245 l
-306 6240 l
-296 6235 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/fronta_bw.eps b/ast-5.3-1/sun210_figures/fronta_bw.eps
deleted file mode 100644
index 73d133f..0000000
--- a/ast-5.3-1/sun210_figures/fronta_bw.eps
+++ /dev/null
@@ -1,6472 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 20 100 530 631
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:47:36
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-4877 5612 m
-4853 5612 l
-S
-4829 5613 m
-4805 5613 l
-S
-4781 5614 m
-4757 5614 l
-S
-4733 5614 m
-4709 5615 l
-S
-4685 5615 m
-4661 5616 l
-S
-4637 5616 m
-4613 5617 l
-S
-4589 5617 m
-4565 5618 l
-S
-4541 5618 m
-4517 5619 l
-S
-4493 5619 m
-4469 5620 l
-S
-4445 5620 m
-4421 5621 l
-S
-4397 5621 m
-4373 5621 l
-S
-4349 5622 m
-4325 5622 l
-S
-4301 5623 m
-4277 5623 l
-S
-4253 5624 m
-4229 5624 l
-S
-4205 5625 m
-4181 5625 l
-S
-4157 5626 m
-4133 5626 l
-S
-4109 5627 m
-4101 5627 l
-4085 5627 l
-S
-4061 5628 m
-4037 5628 l
-S
-4013 5628 m
-3989 5629 l
-S
-3965 5629 m
-3941 5630 l
-S
-3917 5630 m
-3893 5631 l
-S
-3869 5631 m
-3845 5632 l
-S
-3821 5632 m
-3797 5633 l
-S
-3773 5633 m
-3749 5634 l
-S
-3725 5634 m
-3701 5635 l
-S
-3677 5635 m
-3652 5636 l
-S
-3628 5636 m
-3604 5636 l
-S
-3580 5637 m
-3564 5637 l
-3556 5637 l
-S
-3532 5638 m
-3508 5638 l
-S
-3484 5639 m
-3460 5639 l
-S
-3436 5640 m
-3412 5640 l
-S
-3388 5641 m
-3364 5641 l
-S
-3340 5642 m
-3316 5642 l
-S
-3292 5643 m
-3268 5643 l
-S
-3244 5643 m
-3220 5644 l
-S
-3196 5644 m
-3172 5645 l
-S
-3148 5645 m
-3124 5646 l
-S
-3100 5646 m
-3076 5647 l
-S
-3052 5647 m
-3028 5648 l
-S
-3004 5648 m
-2980 5649 l
-S
-2956 5649 m
-2932 5650 l
-S
-2908 5650 m
-2884 5650 l
-S
-2860 5651 m
-2836 5651 l
-S
-2812 5652 m
-2788 5652 l
-S
-2764 5653 m
-2740 5653 l
-S
-2716 5654 m
-2692 5654 l
-S
-2668 5655 m
-2644 5655 l
-S
-2620 5656 m
-2596 5656 l
-S
-2572 5657 m
-2548 5657 l
-S
-2524 5657 m
-2500 5658 l
-S
-2476 5658 m
-2452 5659 l
-S
-2428 5659 m
-2404 5660 l
-S
-2380 5660 m
-2356 5661 l
-S
-2332 5661 m
-2308 5662 l
-S
-2284 5662 m
-2260 5663 l
-S
-2236 5663 m
-2212 5664 l
-S
-2188 5664 m
-2164 5665 l
-S
-2140 5665 m
-2116 5665 l
-S
-2092 5666 m
-2068 5666 l
-S
-2044 5667 m
-2020 5667 l
-S
-1996 5668 m
-1972 5668 l
-S
-1948 5669 m
-1924 5669 l
-S
-1900 5670 m
-1876 5670 l
-S
-1852 5671 m
-1828 5671 l
-S
-1804 5672 m
-1780 5672 l
-S
-1756 5672 m
-1732 5673 l
-S
-1708 5673 m
-1684 5674 l
-S
-1660 5674 m
-1636 5675 l
-S
-1612 5675 m
-1588 5676 l
-S
-1564 5676 m
-1540 5677 l
-S
-1516 5677 m
-1492 5678 l
-S
-1468 5678 m
-1444 5679 l
-S
-1420 5679 m
-1416 5679 l
-1396 5679 l
-S
-1372 5680 m
-1348 5680 l
-S
-1323 5681 m
-1299 5681 l
-S
-1275 5682 m
-1251 5682 l
-S
-1227 5683 m
-1203 5683 l
-S
-1179 5684 m
-1155 5684 l
-S
-1131 5685 m
-1107 5685 l
-S
-1083 5686 m
-1059 5686 l
-S
-1035 5687 m
-1011 5687 l
-S
-987 5687 m
-963 5688 l
-S
-939 5688 m
-915 5689 l
-S
-891 5689 m
-879 5690 l
-867 5690 l
-S
-843 5690 m
-819 5691 l
-S
-795 5691 m
-771 5692 l
-S
-747 5692 m
-723 5693 l
-S
-699 5693 m
-675 5694 l
-S
-651 5694 m
-627 5694 l
-S
-603 5695 m
-579 5695 l
-S
-555 5696 m
-533 5696 l
-S
-4877 4985 m
-4875 4985 l
-S
-4851 4986 m
-4827 4986 l
-S
-4803 4987 m
-4779 4987 l
-S
-4755 4988 m
-4731 4988 l
-S
-4707 4988 m
-4683 4989 l
-S
-4659 4989 m
-4635 4990 l
-S
-4611 4990 m
-4601 4991 l
-4587 4991 l
-S
-4563 4991 m
-4539 4992 l
-S
-4515 4992 m
-4491 4993 l
-S
-4467 4993 m
-4443 4994 l
-S
-4419 4994 m
-4395 4995 l
-S
-4371 4995 m
-4347 4996 l
-S
-4323 4996 m
-4299 4997 l
-S
-4275 4997 m
-4251 4997 l
-S
-4227 4998 m
-4203 4998 l
-S
-4179 4999 m
-4155 4999 l
-S
-4131 5000 m
-4107 5000 l
-S
-4083 5001 m
-4064 5001 l
-4059 5001 l
-S
-4035 5002 m
-4011 5002 l
-S
-3987 5003 m
-3963 5003 l
-S
-3939 5004 m
-3915 5004 l
-S
-3891 5005 m
-3867 5005 l
-S
-3843 5006 m
-3819 5006 l
-S
-3795 5007 m
-3770 5007 l
-S
-3746 5007 m
-3722 5008 l
-S
-3698 5008 m
-3674 5009 l
-S
-3650 5009 m
-3626 5010 l
-S
-3602 5010 m
-3578 5011 l
-S
-3554 5011 m
-3530 5012 l
-S
-3506 5012 m
-3482 5013 l
-S
-3458 5013 m
-3434 5014 l
-S
-3410 5014 m
-3386 5015 l
-S
-3362 5015 m
-3338 5016 l
-S
-3314 5016 m
-3290 5016 l
-S
-3266 5017 m
-3242 5017 l
-S
-3218 5018 m
-3194 5018 l
-S
-3170 5019 m
-3146 5019 l
-S
-3122 5020 m
-3098 5020 l
-S
-3074 5021 m
-3050 5021 l
-S
-3026 5022 m
-3002 5022 l
-S
-2978 5023 m
-2954 5023 l
-S
-2930 5024 m
-2906 5024 l
-S
-2882 5025 m
-2858 5025 l
-S
-2834 5025 m
-2810 5026 l
-S
-2786 5026 m
-2762 5027 l
-S
-2738 5027 m
-2714 5028 l
-S
-2690 5028 m
-2666 5029 l
-S
-2642 5029 m
-2618 5030 l
-S
-2594 5030 m
-2570 5031 l
-S
-2546 5031 m
-2522 5032 l
-S
-2498 5032 m
-2474 5033 l
-S
-2450 5033 m
-2426 5034 l
-S
-2402 5034 m
-2378 5035 l
-S
-2354 5035 m
-2330 5035 l
-S
-2306 5036 m
-2282 5036 l
-S
-2258 5037 m
-2234 5037 l
-S
-2210 5038 m
-2186 5038 l
-S
-2162 5039 m
-2138 5039 l
-S
-2114 5040 m
-2090 5040 l
-S
-2066 5041 m
-2042 5041 l
-S
-2018 5042 m
-1994 5042 l
-S
-1970 5043 m
-1946 5043 l
-S
-1922 5044 m
-1916 5044 l
-1898 5044 l
-S
-1874 5044 m
-1850 5045 l
-S
-1826 5045 m
-1802 5046 l
-S
-1778 5046 m
-1754 5047 l
-S
-1730 5047 m
-1706 5048 l
-S
-1682 5048 m
-1658 5049 l
-S
-1634 5049 m
-1610 5050 l
-S
-1586 5050 m
-1562 5051 l
-S
-1538 5051 m
-1514 5052 l
-S
-1490 5052 m
-1466 5053 l
-S
-1442 5053 m
-1418 5053 l
-S
-1393 5054 m
-1379 5054 l
-1369 5054 l
-S
-1345 5055 m
-1321 5055 l
-S
-1297 5056 m
-1273 5056 l
-S
-1249 5057 m
-1225 5057 l
-S
-1201 5058 m
-1177 5058 l
-S
-1153 5059 m
-1129 5059 l
-S
-1105 5060 m
-1081 5060 l
-S
-1057 5061 m
-1033 5061 l
-S
-1009 5062 m
-985 5062 l
-S
-961 5063 m
-937 5063 l
-S
-913 5063 m
-889 5064 l
-S
-865 5064 m
-842 5065 l
-841 5065 l
-S
-817 5065 m
-793 5066 l
-S
-769 5066 m
-745 5067 l
-S
-721 5067 m
-697 5068 l
-S
-673 5068 m
-649 5069 l
-S
-625 5069 m
-601 5070 l
-S
-577 5070 m
-553 5071 l
-S
-4873 4359 m
-4849 4359 l
-S
-4825 4360 m
-4801 4360 l
-S
-4777 4361 m
-4753 4361 l
-S
-4729 4362 m
-4705 4362 l
-S
-4681 4362 m
-4657 4363 l
-S
-4633 4363 m
-4609 4364 l
-S
-4585 4364 m
-4563 4365 l
-4561 4365 l
-S
-4537 4365 m
-4513 4366 l
-S
-4489 4366 m
-4465 4367 l
-S
-4441 4367 m
-4417 4368 l
-S
-4393 4368 m
-4369 4369 l
-S
-4345 4369 m
-4321 4370 l
-S
-4297 4370 m
-4273 4371 l
-S
-4249 4371 m
-4225 4372 l
-S
-4201 4372 m
-4177 4373 l
-S
-4153 4373 m
-4129 4374 l
-S
-4105 4374 m
-4081 4375 l
-S
-4057 4375 m
-4033 4375 l
-S
-4009 4376 m
-3985 4376 l
-S
-3961 4377 m
-3937 4377 l
-S
-3913 4378 m
-3889 4378 l
-S
-3865 4379 m
-3841 4379 l
-S
-3816 4380 m
-3792 4380 l
-S
-3768 4381 m
-3744 4381 l
-S
-3720 4382 m
-3696 4382 l
-S
-3672 4383 m
-3648 4383 l
-S
-3624 4384 m
-3600 4384 l
-S
-3576 4385 m
-3552 4385 l
-S
-3528 4386 m
-3504 4386 l
-S
-3480 4387 m
-3456 4387 l
-S
-3432 4387 m
-3408 4388 l
-S
-3384 4388 m
-3360 4389 l
-S
-3336 4389 m
-3312 4390 l
-S
-3288 4390 m
-3264 4391 l
-S
-3240 4391 m
-3216 4392 l
-S
-3192 4392 m
-3168 4393 l
-S
-3144 4393 m
-3120 4394 l
-S
-3096 4394 m
-3072 4395 l
-S
-3048 4395 m
-3024 4396 l
-S
-3000 4396 m
-2976 4397 l
-S
-2952 4397 m
-2928 4398 l
-S
-2904 4398 m
-2880 4399 l
-S
-2856 4399 m
-2832 4400 l
-S
-2808 4400 m
-2784 4400 l
-S
-2760 4401 m
-2736 4401 l
-S
-2712 4402 m
-2688 4402 l
-S
-2664 4403 m
-2640 4403 l
-S
-2616 4404 m
-2592 4404 l
-S
-2568 4405 m
-2544 4405 l
-S
-2520 4406 m
-2496 4406 l
-S
-2472 4407 m
-2448 4407 l
-S
-2424 4408 m
-2416 4408 l
-2400 4408 l
-S
-2376 4409 m
-2352 4409 l
-S
-2328 4410 m
-2304 4410 l
-S
-2280 4411 m
-2256 4411 l
-S
-2232 4412 m
-2208 4412 l
-S
-2184 4413 m
-2160 4413 l
-S
-2136 4413 m
-2112 4414 l
-S
-2088 4414 m
-2064 4415 l
-S
-2040 4415 m
-2016 4416 l
-S
-1992 4416 m
-1968 4417 l
-S
-1944 4417 m
-1920 4418 l
-S
-1896 4418 m
-1879 4419 l
-1872 4419 l
-S
-1848 4419 m
-1824 4420 l
-S
-1800 4420 m
-1776 4421 l
-S
-1752 4421 m
-1728 4422 l
-S
-1704 4422 m
-1680 4423 l
-S
-1656 4423 m
-1632 4424 l
-S
-1608 4424 m
-1584 4425 l
-S
-1560 4425 m
-1536 4426 l
-S
-1512 4426 m
-1488 4426 l
-S
-1464 4427 m
-1439 4427 l
-S
-1415 4428 m
-1391 4428 l
-S
-1367 4429 m
-1343 4429 l
-S
-1319 4430 m
-1295 4430 l
-S
-1271 4431 m
-1247 4431 l
-S
-1223 4432 m
-1199 4432 l
-S
-1175 4433 m
-1151 4433 l
-S
-1127 4434 m
-1103 4434 l
-S
-1079 4435 m
-1055 4435 l
-S
-1031 4436 m
-1007 4436 l
-S
-983 4437 m
-959 4437 l
-S
-935 4438 m
-911 4438 l
-S
-887 4439 m
-863 4439 l
-S
-839 4439 m
-815 4440 l
-S
-791 4440 m
-767 4441 l
-S
-743 4441 m
-719 4442 l
-S
-695 4442 m
-671 4443 l
-S
-647 4443 m
-623 4444 l
-S
-599 4444 m
-575 4445 l
-S
-551 4445 m
-533 4446 l
-S
-4877 3732 m
-4871 3732 l
-S
-4847 3733 m
-4823 3733 l
-S
-4799 3734 m
-4775 3734 l
-S
-4751 3735 m
-4727 3735 l
-S
-4703 3735 m
-4679 3736 l
-S
-4655 3736 m
-4631 3737 l
-S
-4607 3737 m
-4583 3738 l
-S
-4559 3738 m
-4535 3739 l
-S
-4511 3739 m
-4487 3740 l
-S
-4463 3740 m
-4439 3741 l
-S
-4415 3741 m
-4391 3742 l
-S
-4367 3742 m
-4343 3743 l
-S
-4319 3743 m
-4295 3744 l
-S
-4271 3744 m
-4247 3745 l
-S
-4223 3745 m
-4199 3746 l
-S
-4175 3746 m
-4151 3747 l
-S
-4127 3747 m
-4103 3748 l
-S
-4079 3748 m
-4055 3749 l
-S
-4031 3749 m
-4007 3750 l
-S
-3983 3750 m
-3959 3751 l
-S
-3935 3751 m
-3911 3752 l
-S
-3887 3752 m
-3863 3753 l
-S
-3839 3753 m
-3814 3754 l
-S
-3790 3754 m
-3766 3755 l
-S
-3742 3755 m
-3718 3755 l
-S
-3694 3756 m
-3670 3756 l
-S
-3646 3757 m
-3622 3757 l
-S
-3598 3758 m
-3574 3758 l
-S
-3550 3759 m
-3526 3759 l
-S
-3502 3760 m
-3478 3760 l
-S
-3454 3761 m
-3451 3761 l
-3430 3761 l
-S
-3406 3762 m
-3382 3762 l
-S
-3358 3763 m
-3334 3763 l
-S
-3310 3764 m
-3286 3764 l
-S
-3262 3765 m
-3238 3765 l
-S
-3214 3766 m
-3190 3766 l
-S
-3166 3767 m
-3142 3767 l
-S
-3118 3768 m
-3094 3768 l
-S
-3070 3769 m
-3046 3769 l
-S
-3022 3770 m
-2998 3770 l
-S
-2974 3771 m
-2950 3771 l
-S
-2926 3772 m
-2914 3772 l
-2902 3772 l
-S
-2878 3773 m
-2854 3773 l
-S
-2830 3774 m
-2806 3774 l
-S
-2782 3775 m
-2758 3775 l
-S
-2734 3776 m
-2710 3776 l
-S
-2686 3776 m
-2662 3777 l
-S
-2638 3777 m
-2614 3778 l
-S
-2590 3778 m
-2566 3779 l
-S
-2542 3779 m
-2518 3780 l
-S
-2494 3780 m
-2470 3781 l
-S
-2446 3781 m
-2422 3782 l
-S
-2398 3782 m
-2378 3783 l
-2374 3783 l
-S
-2350 3783 m
-2326 3784 l
-S
-2302 3784 m
-2278 3785 l
-S
-2254 3785 m
-2230 3786 l
-S
-2206 3786 m
-2182 3787 l
-S
-2158 3787 m
-2134 3788 l
-S
-2110 3788 m
-2086 3789 l
-S
-2062 3789 m
-2038 3790 l
-S
-2014 3790 m
-1990 3791 l
-S
-1966 3791 m
-1942 3792 l
-S
-1918 3792 m
-1894 3793 l
-S
-1870 3793 m
-1846 3794 l
-S
-1822 3794 m
-1798 3795 l
-S
-1774 3795 m
-1750 3796 l
-S
-1726 3796 m
-1702 3796 l
-S
-1678 3797 m
-1654 3797 l
-S
-1630 3798 m
-1606 3798 l
-S
-1582 3799 m
-1558 3799 l
-S
-1534 3800 m
-1510 3800 l
-S
-1486 3801 m
-1462 3801 l
-S
-1438 3802 m
-1414 3802 l
-S
-1389 3803 m
-1365 3803 l
-S
-1341 3804 m
-1317 3804 l
-S
-1293 3805 m
-1269 3805 l
-S
-1245 3806 m
-1221 3806 l
-S
-1197 3807 m
-1173 3807 l
-S
-1149 3808 m
-1125 3808 l
-S
-1101 3809 m
-1077 3809 l
-S
-1053 3810 m
-1029 3810 l
-S
-1005 3811 m
-981 3811 l
-S
-957 3812 m
-933 3812 l
-S
-909 3813 m
-885 3813 l
-S
-861 3814 m
-837 3814 l
-S
-813 3815 m
-789 3815 l
-S
-765 3816 m
-741 3816 l
-S
-717 3817 m
-693 3817 l
-S
-669 3817 m
-645 3818 l
-S
-621 3818 m
-597 3819 l
-S
-573 3819 m
-549 3820 l
-S
-4869 3105 m
-4845 3106 l
-S
-4821 3106 m
-4797 3107 l
-S
-4773 3107 m
-4749 3108 l
-S
-4725 3108 m
-4701 3109 l
-S
-4677 3109 m
-4653 3110 l
-S
-4629 3110 m
-4605 3111 l
-S
-4581 3111 m
-4557 3112 l
-S
-4533 3112 m
-4509 3113 l
-S
-4485 3113 m
-4461 3114 l
-S
-4437 3114 m
-4413 3115 l
-S
-4389 3115 m
-4365 3116 l
-S
-4341 3116 m
-4317 3117 l
-S
-4293 3117 m
-4269 3118 l
-S
-4245 3118 m
-4221 3119 l
-S
-4197 3119 m
-4173 3120 l
-S
-4149 3120 m
-4125 3121 l
-S
-4101 3121 m
-4077 3122 l
-S
-4053 3122 m
-4029 3123 l
-S
-4005 3123 m
-3981 3124 l
-S
-3957 3124 m
-3950 3124 l
-3933 3125 l
-S
-3909 3125 m
-3885 3126 l
-S
-3861 3126 m
-3837 3127 l
-S
-3813 3127 m
-3789 3128 l
-S
-3764 3128 m
-3740 3129 l
-S
-3716 3129 m
-3692 3130 l
-S
-3668 3130 m
-3644 3131 l
-S
-3620 3131 m
-3596 3132 l
-S
-3572 3132 m
-3548 3133 l
-S
-3524 3133 m
-3500 3134 l
-S
-3476 3134 m
-3452 3135 l
-S
-3428 3135 m
-3413 3135 l
-3404 3136 l
-S
-3380 3136 m
-3356 3137 l
-S
-3332 3137 m
-3308 3138 l
-S
-3284 3138 m
-3260 3139 l
-S
-3236 3139 m
-3212 3140 l
-S
-3188 3140 m
-3164 3141 l
-S
-3140 3141 m
-3116 3142 l
-S
-3092 3142 m
-3068 3143 l
-S
-3044 3143 m
-3020 3144 l
-S
-2996 3144 m
-2972 3145 l
-S
-2948 3145 m
-2924 3146 l
-S
-2900 3146 m
-2876 3147 l
-S
-2852 3147 m
-2828 3148 l
-S
-2804 3148 m
-2780 3149 l
-S
-2756 3149 m
-2732 3150 l
-S
-2708 3150 m
-2684 3151 l
-S
-2660 3151 m
-2636 3152 l
-S
-2612 3152 m
-2588 3152 l
-S
-2564 3153 m
-2540 3153 l
-S
-2516 3154 m
-2492 3154 l
-S
-2468 3155 m
-2444 3155 l
-S
-2420 3156 m
-2396 3156 l
-S
-2372 3157 m
-2348 3157 l
-S
-2324 3158 m
-2300 3158 l
-S
-2276 3159 m
-2252 3159 l
-S
-2228 3160 m
-2204 3160 l
-S
-2180 3161 m
-2156 3161 l
-S
-2132 3162 m
-2108 3162 l
-S
-2084 3163 m
-2060 3163 l
-S
-2036 3164 m
-2012 3164 l
-S
-1988 3165 m
-1964 3165 l
-S
-1940 3166 m
-1916 3166 l
-S
-1892 3167 m
-1868 3167 l
-S
-1844 3168 m
-1820 3168 l
-S
-1796 3169 m
-1772 3169 l
-S
-1748 3170 m
-1724 3170 l
-S
-1700 3171 m
-1676 3171 l
-S
-1652 3172 m
-1628 3172 l
-S
-1604 3173 m
-1580 3173 l
-S
-1556 3174 m
-1532 3174 l
-S
-1508 3175 m
-1484 3175 l
-S
-1460 3176 m
-1436 3176 l
-S
-1412 3177 m
-1388 3177 l
-S
-1364 3178 m
-1340 3178 l
-S
-1315 3179 m
-1291 3179 l
-S
-1267 3180 m
-1265 3180 l
-1243 3180 l
-S
-1219 3181 m
-1195 3181 l
-S
-1171 3182 m
-1147 3182 l
-S
-1123 3183 m
-1099 3183 l
-S
-1075 3184 m
-1051 3184 l
-S
-1027 3185 m
-1003 3185 l
-S
-979 3186 m
-955 3186 l
-S
-931 3187 m
-907 3187 l
-S
-883 3188 m
-859 3188 l
-S
-835 3189 m
-811 3189 l
-S
-787 3190 m
-763 3190 l
-S
-739 3191 m
-728 3191 l
-715 3191 l
-S
-691 3192 m
-667 3192 l
-S
-643 3193 m
-619 3193 l
-S
-595 3194 m
-571 3194 l
-S
-547 3195 m
-533 3195 l
-S
-4877 2479 m
-4867 2479 l
-S
-4843 2479 m
-4819 2480 l
-S
-4795 2480 m
-4771 2481 l
-S
-4747 2481 m
-4723 2482 l
-S
-4699 2482 m
-4675 2483 l
-S
-4651 2483 m
-4627 2484 l
-S
-4603 2484 m
-4579 2485 l
-S
-4555 2485 m
-4531 2486 l
-S
-4507 2486 m
-4483 2487 l
-S
-4459 2487 m
-4448 2488 l
-4435 2488 l
-S
-4411 2488 m
-4387 2489 l
-S
-4363 2489 m
-4339 2490 l
-S
-4315 2490 m
-4291 2491 l
-S
-4267 2491 m
-4243 2492 l
-S
-4219 2492 m
-4195 2493 l
-S
-4171 2493 m
-4147 2494 l
-S
-4123 2494 m
-4099 2495 l
-S
-4075 2495 m
-4051 2496 l
-S
-4027 2496 m
-4003 2497 l
-S
-3979 2497 m
-3955 2498 l
-S
-3931 2498 m
-3911 2499 l
-3907 2499 l
-S
-3883 2499 m
-3859 2500 l
-S
-3835 2500 m
-3811 2501 l
-S
-3787 2501 m
-3763 2502 l
-S
-3739 2502 m
-3715 2503 l
-S
-3691 2503 m
-3667 2504 l
-S
-3642 2504 m
-3618 2505 l
-S
-3594 2505 m
-3570 2506 l
-S
-3546 2506 m
-3522 2507 l
-S
-3498 2507 m
-3474 2508 l
-S
-3450 2508 m
-3426 2509 l
-S
-3402 2509 m
-3378 2510 l
-S
-3354 2510 m
-3330 2511 l
-S
-3306 2511 m
-3282 2512 l
-S
-3258 2512 m
-3234 2513 l
-S
-3210 2513 m
-3186 2514 l
-S
-3162 2514 m
-3138 2515 l
-S
-3114 2515 m
-3090 2516 l
-S
-3066 2516 m
-3042 2517 l
-S
-3018 2517 m
-2994 2518 l
-S
-2970 2519 m
-2946 2519 l
-S
-2922 2520 m
-2898 2520 l
-S
-2874 2521 m
-2850 2521 l
-S
-2826 2522 m
-2802 2522 l
-S
-2778 2523 m
-2754 2523 l
-S
-2730 2524 m
-2706 2524 l
-S
-2682 2525 m
-2658 2525 l
-S
-2634 2526 m
-2610 2526 l
-S
-2586 2527 m
-2562 2527 l
-S
-2538 2528 m
-2514 2528 l
-S
-2490 2529 m
-2466 2529 l
-S
-2442 2530 m
-2418 2530 l
-S
-2394 2531 m
-2370 2531 l
-S
-2346 2532 m
-2322 2532 l
-S
-2298 2533 m
-2274 2533 l
-S
-2250 2534 m
-2226 2534 l
-S
-2202 2535 m
-2178 2535 l
-S
-2154 2536 m
-2130 2536 l
-S
-2106 2537 m
-2082 2537 l
-S
-2058 2538 m
-2034 2538 l
-S
-2010 2539 m
-1986 2539 l
-S
-1962 2540 m
-1938 2540 l
-S
-1914 2541 m
-1890 2541 l
-S
-1866 2542 m
-1842 2542 l
-S
-1818 2543 m
-1794 2543 l
-S
-1770 2544 m
-1763 2544 l
-1746 2544 l
-S
-1722 2545 m
-1698 2545 l
-S
-1674 2546 m
-1650 2546 l
-S
-1626 2547 m
-1602 2547 l
-S
-1578 2548 m
-1554 2548 l
-S
-1530 2549 m
-1506 2549 l
-S
-1482 2550 m
-1458 2550 l
-S
-1434 2551 m
-1410 2551 l
-S
-1386 2552 m
-1362 2552 l
-S
-1338 2553 m
-1314 2553 l
-S
-1290 2554 m
-1266 2554 l
-S
-1242 2555 m
-1226 2555 l
-1218 2555 l
-S
-1194 2556 m
-1170 2556 l
-S
-1145 2557 m
-1121 2557 l
-S
-1097 2558 m
-1073 2558 l
-S
-1049 2559 m
-1025 2559 l
-S
-1001 2560 m
-977 2560 l
-S
-953 2561 m
-929 2561 l
-S
-905 2562 m
-881 2562 l
-S
-857 2563 m
-833 2563 l
-S
-809 2564 m
-785 2564 l
-S
-761 2565 m
-737 2565 l
-S
-713 2566 m
-689 2566 l
-S
-665 2567 m
-641 2567 l
-S
-617 2568 m
-593 2568 l
-S
-569 2569 m
-545 2569 l
-S
-4865 1852 m
-4841 1853 l
-S
-4817 1853 m
-4793 1854 l
-S
-4769 1854 m
-4745 1855 l
-S
-4721 1855 m
-4697 1856 l
-S
-4673 1856 m
-4649 1857 l
-S
-4625 1857 m
-4601 1858 l
-S
-4577 1858 m
-4553 1859 l
-S
-4529 1859 m
-4505 1860 l
-S
-4481 1860 m
-4457 1861 l
-S
-4433 1861 m
-4409 1862 l
-S
-4385 1862 m
-4361 1863 l
-S
-4337 1863 m
-4313 1864 l
-S
-4289 1864 m
-4265 1865 l
-S
-4241 1865 m
-4217 1866 l
-S
-4193 1866 m
-4169 1867 l
-S
-4145 1867 m
-4121 1868 l
-S
-4097 1869 m
-4073 1869 l
-S
-4049 1870 m
-4025 1870 l
-S
-4001 1871 m
-3977 1871 l
-S
-3953 1872 m
-3929 1872 l
-S
-3905 1873 m
-3881 1873 l
-S
-3857 1874 m
-3833 1874 l
-S
-3809 1875 m
-3785 1875 l
-S
-3761 1876 m
-3737 1876 l
-S
-3713 1877 m
-3689 1877 l
-S
-3665 1878 m
-3641 1878 l
-S
-3617 1879 m
-3593 1879 l
-S
-3569 1880 m
-3545 1880 l
-S
-3521 1881 m
-3497 1881 l
-S
-3473 1882 m
-3448 1882 l
-S
-3424 1883 m
-3400 1883 l
-S
-3376 1884 m
-3352 1884 l
-S
-3328 1885 m
-3304 1885 l
-S
-3280 1886 m
-3256 1886 l
-S
-3232 1887 m
-3208 1887 l
-S
-3184 1888 m
-3160 1888 l
-S
-3136 1889 m
-3112 1889 l
-S
-3088 1890 m
-3064 1890 l
-S
-3040 1891 m
-3016 1891 l
-S
-2992 1892 m
-2968 1892 l
-S
-2944 1893 m
-2920 1893 l
-S
-2896 1894 m
-2872 1894 l
-S
-2848 1895 m
-2824 1895 l
-S
-2800 1896 m
-2797 1896 l
-2776 1896 l
-S
-2752 1897 m
-2728 1897 l
-S
-2704 1898 m
-2680 1898 l
-S
-2656 1899 m
-2632 1900 l
-S
-2608 1900 m
-2584 1901 l
-S
-2560 1901 m
-2536 1902 l
-S
-2512 1902 m
-2488 1903 l
-S
-2464 1903 m
-2440 1904 l
-S
-2416 1904 m
-2392 1905 l
-S
-2368 1905 m
-2344 1906 l
-S
-2320 1906 m
-2296 1907 l
-S
-2272 1907 m
-2260 1907 l
-2248 1908 l
-S
-2224 1908 m
-2200 1909 l
-S
-2176 1909 m
-2152 1910 l
-S
-2128 1910 m
-2104 1911 l
-S
-2080 1911 m
-2056 1912 l
-S
-2032 1912 m
-2008 1913 l
-S
-1984 1913 m
-1960 1914 l
-S
-1936 1914 m
-1912 1915 l
-S
-1888 1915 m
-1864 1916 l
-S
-1840 1916 m
-1816 1917 l
-S
-1792 1917 m
-1768 1918 l
-S
-1744 1918 m
-1724 1919 l
-1720 1919 l
-S
-1696 1919 m
-1672 1920 l
-S
-1648 1920 m
-1624 1921 l
-S
-1600 1921 m
-1576 1922 l
-S
-1552 1922 m
-1528 1923 l
-S
-1504 1923 m
-1480 1924 l
-S
-1456 1924 m
-1432 1925 l
-S
-1408 1925 m
-1384 1926 l
-S
-1360 1926 m
-1336 1927 l
-S
-1312 1927 m
-1288 1928 l
-S
-1264 1928 m
-1240 1929 l
-S
-1216 1930 m
-1192 1930 l
-S
-1168 1931 m
-1144 1931 l
-S
-1120 1932 m
-1096 1932 l
-S
-1072 1933 m
-1048 1933 l
-S
-1024 1934 m
-1000 1934 l
-S
-976 1935 m
-952 1935 l
-S
-927 1936 m
-903 1936 l
-S
-879 1937 m
-855 1937 l
-S
-831 1938 m
-807 1938 l
-S
-783 1939 m
-759 1939 l
-S
-735 1940 m
-711 1940 l
-S
-687 1941 m
-663 1941 l
-S
-639 1942 m
-615 1942 l
-S
-591 1943 m
-567 1943 l
-S
-543 1944 m
-533 1944 l
-S
-4877 2742 m
-4876 2728 l
-S
-4875 2704 m
-4873 2680 l
-S
-4872 2656 m
-4870 2632 l
-S
-4869 2608 m
-4867 2584 l
-S
-4866 2560 m
-4864 2536 l
-S
-4863 2512 m
-4861 2488 l
-S
-4860 2464 m
-4858 2440 l
-S
-4857 2416 m
-4855 2392 l
-S
-4854 2368 m
-4852 2344 l
-S
-4851 2320 m
-4849 2296 l
-S
-4848 2273 m
-4846 2249 l
-S
-4845 2225 m
-4843 2201 l
-S
-4842 2177 m
-4840 2153 l
-S
-4838 2129 m
-4838 2121 l
-4837 2105 l
-S
-4835 2081 m
-4834 2057 l
-S
-4832 2033 m
-4831 2009 l
-S
-4829 1985 m
-4828 1961 l
-S
-4826 1937 m
-4825 1913 l
-S
-4823 1889 m
-4822 1865 l
-S
-4820 1841 m
-4819 1817 l
-S
-4817 1793 m
-4816 1777 l
-S
-4502 6121 m
-4501 6113 l
-S
-4500 6089 m
-4498 6065 l
-S
-4497 6041 m
-4496 6017 l
-S
-4494 5993 m
-4493 5969 l
-S
-4491 5945 m
-4490 5921 l
-S
-4489 5897 m
-4488 5888 l
-4487 5874 l
-S
-4486 5850 m
-4484 5826 l
-S
-4483 5802 m
-4482 5778 l
-S
-4480 5754 m
-4479 5730 l
-S
-4477 5706 m
-4476 5682 l
-S
-4475 5658 m
-4473 5634 l
-S
-4472 5610 m
-4470 5586 l
-S
-4469 5562 m
-4468 5538 l
-S
-4466 5514 m
-4465 5490 l
-S
-4463 5466 m
-4462 5442 l
-S
-4461 5418 m
-4459 5394 l
-S
-4458 5370 m
-4457 5351 l
-4456 5346 l
-S
-4455 5322 m
-4454 5298 l
-S
-4452 5274 m
-4451 5250 l
-S
-4449 5226 m
-4448 5202 l
-S
-4446 5178 m
-4445 5155 l
-S
-4444 5131 m
-4442 5107 l
-S
-4441 5083 m
-4439 5059 l
-S
-4438 5035 m
-4436 5011 l
-S
-4435 4987 m
-4434 4963 l
-S
-4432 4939 m
-4431 4915 l
-S
-4429 4891 m
-4428 4867 l
-S
-4426 4843 m
-4425 4819 l
-S
-4424 4795 m
-4422 4771 l
-S
-4421 4747 m
-4419 4723 l
-S
-4418 4699 m
-4416 4675 l
-S
-4415 4651 m
-4414 4627 l
-S
-4412 4603 m
-4411 4579 l
-S
-4409 4555 m
-4408 4531 l
-S
-4406 4507 m
-4405 4484 l
-S
-4403 4460 m
-4402 4436 l
-S
-4401 4412 m
-4399 4388 l
-S
-4398 4364 m
-4396 4340 l
-S
-4395 4316 m
-4393 4292 l
-S
-4392 4268 m
-4390 4244 l
-S
-4389 4220 m
-4388 4196 l
-S
-4386 4172 m
-4385 4148 l
-S
-4383 4124 m
-4382 4100 l
-S
-4380 4076 m
-4379 4052 l
-S
-4377 4028 m
-4376 4004 l
-S
-4374 3980 m
-4373 3956 l
-S
-4372 3932 m
-4370 3908 l
-S
-4369 3884 m
-4367 3860 l
-S
-4366 3836 m
-4364 3813 l
-S
-4363 3789 m
-4361 3765 l
-S
-4360 3741 m
-4358 3717 l
-S
-4357 3693 m
-4355 3669 l
-S
-4354 3645 m
-4353 3621 l
-S
-4351 3597 m
-4350 3573 l
-S
-4348 3549 m
-4347 3525 l
-S
-4345 3501 m
-4344 3477 l
-S
-4342 3453 m
-4341 3429 l
-S
-4339 3405 m
-4338 3381 l
-S
-4336 3357 m
-4335 3333 l
-S
-4333 3309 m
-4332 3285 l
-S
-4330 3261 m
-4329 3237 l
-S
-4327 3213 m
-4327 3206 l
-4326 3190 l
-S
-4324 3166 m
-4323 3142 l
-S
-4321 3118 m
-4320 3094 l
-S
-4318 3070 m
-4317 3046 l
-S
-4316 3022 m
-4314 2998 l
-S
-4313 2974 m
-4311 2950 l
-S
-4310 2926 m
-4308 2902 l
-S
-4307 2878 m
-4305 2854 l
-S
-4304 2830 m
-4302 2806 l
-S
-4301 2782 m
-4299 2758 l
-S
-4298 2734 m
-4296 2710 l
-S
-4295 2686 m
-4294 2670 l
-4293 2662 l
-S
-4292 2638 m
-4290 2614 l
-S
-4289 2590 m
-4287 2567 l
-S
-4286 2543 m
-4284 2519 l
-S
-4283 2495 m
-4281 2471 l
-S
-4280 2447 m
-4278 2423 l
-S
-4277 2399 m
-4275 2375 l
-S
-4274 2351 m
-4272 2327 l
-S
-4270 2303 m
-4269 2279 l
-S
-4267 2255 m
-4266 2231 l
-S
-4264 2207 m
-4263 2183 l
-S
-4261 2159 m
-4260 2135 l
-S
-4258 2111 m
-4257 2087 l
-S
-4255 2063 m
-4254 2039 l
-S
-4252 2015 m
-4251 1991 l
-S
-4249 1968 m
-4248 1944 l
-S
-4246 1920 m
-4245 1896 l
-S
-4243 1872 m
-4242 1848 l
-S
-4240 1824 m
-4239 1800 l
-S
-3923 6120 m
-3921 6096 l
-S
-3920 6072 m
-3918 6048 l
-S
-3917 6024 m
-3916 6000 l
-S
-3914 5976 m
-3913 5952 l
-S
-3912 5928 m
-3910 5904 l
-S
-3909 5880 m
-3907 5856 l
-S
-3906 5832 m
-3905 5808 l
-S
-3903 5784 m
-3902 5760 l
-S
-3900 5736 m
-3899 5712 l
-S
-3898 5688 m
-3896 5664 l
-S
-3895 5640 m
-3893 5616 l
-S
-3892 5592 m
-3890 5568 l
-S
-3889 5544 m
-3888 5521 l
-S
-3886 5497 m
-3885 5473 l
-S
-3883 5449 m
-3882 5425 l
-S
-3881 5401 m
-3879 5377 l
-S
-3878 5353 m
-3876 5329 l
-S
-3875 5305 m
-3874 5281 l
-S
-3872 5257 m
-3871 5233 l
-S
-3869 5209 m
-3868 5185 l
-S
-3866 5161 m
-3865 5137 l
-S
-3864 5113 m
-3862 5089 l
-S
-3861 5065 m
-3859 5041 l
-S
-3858 5017 m
-3857 4993 l
-S
-3855 4969 m
-3854 4945 l
-S
-3852 4921 m
-3851 4897 l
-S
-3849 4873 m
-3848 4849 l
-S
-3847 4826 m
-3845 4802 l
-S
-3844 4778 m
-3842 4754 l
-S
-3841 4730 m
-3839 4706 l
-S
-3838 4682 m
-3836 4658 l
-S
-3835 4634 m
-3834 4610 l
-S
-3832 4586 m
-3831 4562 l
-S
-3829 4538 m
-3828 4514 l
-S
-3826 4490 m
-3825 4466 l
-S
-3823 4442 m
-3822 4418 l
-S
-3821 4394 m
-3819 4370 l
-S
-3818 4346 m
-3816 4322 l
-S
-3815 4298 m
-3814 4290 l
-3813 4274 l
-S
-3812 4250 m
-3810 4226 l
-S
-3809 4202 m
-3808 4178 l
-S
-3806 4155 m
-3805 4131 l
-S
-3803 4107 m
-3802 4083 l
-S
-3800 4059 m
-3799 4035 l
-S
-3797 4011 m
-3796 3987 l
-S
-3794 3963 m
-3793 3939 l
-S
-3792 3915 m
-3790 3891 l
-S
-3789 3867 m
-3787 3843 l
-S
-3786 3819 m
-3784 3795 l
-S
-3783 3771 m
-3782 3754 l
-3781 3747 l
-S
-3780 3723 m
-3778 3699 l
-S
-3777 3675 m
-3775 3651 l
-S
-3774 3627 m
-3772 3603 l
-S
-3771 3579 m
-3770 3555 l
-S
-3768 3531 m
-3767 3508 l
-S
-3765 3484 m
-3764 3460 l
-S
-3762 3436 m
-3761 3412 l
-S
-3759 3388 m
-3758 3364 l
-S
-3756 3340 m
-3755 3316 l
-S
-3753 3292 m
-3752 3268 l
-S
-3750 3244 m
-3749 3220 l
-S
-3747 3196 m
-3746 3172 l
-S
-3744 3148 m
-3743 3124 l
-S
-3741 3100 m
-3740 3076 l
-S
-3738 3052 m
-3737 3028 l
-S
-3735 3004 m
-3734 2980 l
-S
-3732 2956 m
-3731 2932 l
-S
-3730 2908 m
-3728 2885 l
-S
-3727 2861 m
-3725 2837 l
-S
-3724 2813 m
-3722 2789 l
-S
-3721 2765 m
-3719 2741 l
-S
-3718 2717 m
-3716 2693 l
-S
-3715 2669 m
-3713 2645 l
-S
-3712 2621 m
-3710 2597 l
-S
-3709 2573 m
-3707 2549 l
-S
-3706 2525 m
-3704 2501 l
-S
-3703 2477 m
-3701 2453 l
-S
-3699 2429 m
-3698 2405 l
-S
-3696 2381 m
-3695 2357 l
-S
-3693 2333 m
-3692 2309 l
-S
-3690 2286 m
-3689 2262 l
-S
-3687 2238 m
-3686 2214 l
-S
-3684 2190 m
-3683 2166 l
-S
-3681 2142 m
-3680 2118 l
-S
-3678 2094 m
-3677 2070 l
-S
-3675 2046 m
-3674 2022 l
-S
-3672 1998 m
-3671 1974 l
-S
-3669 1950 m
-3668 1926 l
-S
-3666 1902 m
-3665 1878 l
-S
-3663 1854 m
-3662 1830 l
-S
-3660 1806 m
-3658 1782 l
-S
-3343 6102 m
-3341 6078 l
-S
-3340 6054 m
-3339 6030 l
-S
-3337 6006 m
-3336 5982 l
-S
-3334 5958 m
-3333 5934 l
-S
-3332 5910 m
-3332 5910 l
-3330 5887 l
-S
-3329 5863 m
-3327 5839 l
-S
-3326 5815 m
-3325 5791 l
-S
-3323 5767 m
-3322 5743 l
-S
-3320 5719 m
-3319 5695 l
-S
-3318 5671 m
-3316 5647 l
-S
-3315 5623 m
-3313 5599 l
-S
-3312 5575 m
-3311 5551 l
-S
-3309 5527 m
-3308 5503 l
-S
-3306 5479 m
-3305 5455 l
-S
-3304 5431 m
-3302 5407 l
-S
-3301 5383 m
-3300 5374 l
-3299 5359 l
-S
-3298 5335 m
-3296 5311 l
-S
-3295 5287 m
-3294 5263 l
-S
-3292 5239 m
-3291 5215 l
-S
-3289 5191 m
-3288 5168 l
-S
-3287 5144 m
-3285 5120 l
-S
-3284 5096 m
-3282 5072 l
-S
-3281 5048 m
-3279 5024 l
-S
-3278 5000 m
-3277 4976 l
-S
-3275 4952 m
-3274 4928 l
-S
-3272 4904 m
-3271 4880 l
-S
-3269 4856 m
-3268 4838 l
-3268 4832 l
-S
-3267 4808 m
-3265 4784 l
-S
-3264 4760 m
-3262 4736 l
-S
-3261 4712 m
-3259 4688 l
-S
-3258 4664 m
-3256 4640 l
-S
-3255 4616 m
-3254 4592 l
-S
-3252 4568 m
-3251 4544 l
-S
-3249 4520 m
-3248 4497 l
-S
-3246 4473 m
-3245 4449 l
-S
-3244 4425 m
-3242 4401 l
-S
-3241 4377 m
-3239 4353 l
-S
-3238 4329 m
-3236 4305 l
-S
-3235 4281 m
-3233 4257 l
-S
-3232 4233 m
-3231 4209 l
-S
-3229 4185 m
-3228 4161 l
-S
-3226 4137 m
-3225 4113 l
-S
-3223 4089 m
-3222 4065 l
-S
-3220 4041 m
-3219 4017 l
-S
-3217 3993 m
-3216 3969 l
-S
-3214 3945 m
-3213 3921 l
-S
-3212 3897 m
-3210 3873 l
-S
-3209 3849 m
-3207 3826 l
-S
-3206 3802 m
-3204 3778 l
-S
-3203 3754 m
-3201 3730 l
-S
-3200 3706 m
-3198 3682 l
-S
-3197 3658 m
-3195 3634 l
-S
-3194 3610 m
-3192 3586 l
-S
-3191 3562 m
-3190 3538 l
-S
-3188 3514 m
-3187 3490 l
-S
-3185 3466 m
-3184 3442 l
-S
-3182 3418 m
-3181 3394 l
-S
-3179 3370 m
-3178 3346 l
-S
-3176 3322 m
-3175 3298 l
-S
-3173 3274 m
-3172 3250 l
-S
-3170 3226 m
-3169 3203 l
-S
-3167 3179 m
-3166 3155 l
-S
-3164 3131 m
-3163 3107 l
-S
-3161 3083 m
-3160 3059 l
-S
-3158 3035 m
-3157 3011 l
-S
-3155 2987 m
-3154 2963 l
-S
-3152 2939 m
-3151 2915 l
-S
-3149 2891 m
-3148 2867 l
-S
-3146 2843 m
-3145 2819 l
-S
-3143 2795 m
-3142 2771 l
-S
-3141 2747 m
-3139 2723 l
-S
-3138 2699 m
-3137 2694 l
-3136 2675 l
-S
-3135 2651 m
-3133 2627 l
-S
-3131 2603 m
-3130 2580 l
-S
-3128 2556 m
-3127 2532 l
-S
-3125 2508 m
-3124 2484 l
-S
-3122 2460 m
-3121 2436 l
-S
-3119 2412 m
-3118 2388 l
-S
-3116 2364 m
-3115 2340 l
-S
-3113 2316 m
-3112 2292 l
-S
-3110 2268 m
-3109 2244 l
-S
-3107 2220 m
-3106 2196 l
-S
-3104 2172 m
-3103 2158 l
-3103 2148 l
-S
-3101 2124 m
-3100 2100 l
-S
-3098 2076 m
-3097 2052 l
-S
-3095 2028 m
-3094 2004 l
-S
-3092 1981 m
-3091 1957 l
-S
-3089 1933 m
-3088 1909 l
-S
-3086 1885 m
-3084 1861 l
-S
-3083 1837 m
-3081 1813 l
-S
-3080 1789 m
-3079 1777 l
-S
-2765 6121 m
-2764 6109 l
-S
-2763 6085 m
-2761 6061 l
-S
-2760 6037 m
-2759 6013 l
-S
-2757 5989 m
-2756 5965 l
-S
-2755 5941 m
-2753 5921 l
-2753 5917 l
-S
-2752 5893 m
-2750 5869 l
-S
-2749 5845 m
-2748 5821 l
-S
-2746 5797 m
-2745 5773 l
-S
-2743 5749 m
-2742 5725 l
-S
-2741 5701 m
-2739 5677 l
-S
-2738 5653 m
-2736 5629 l
-S
-2735 5605 m
-2733 5581 l
-S
-2732 5557 m
-2731 5534 l
-S
-2729 5510 m
-2728 5486 l
-S
-2726 5462 m
-2725 5438 l
-S
-2724 5414 m
-2722 5390 l
-S
-2721 5366 m
-2719 5342 l
-S
-2718 5318 m
-2717 5294 l
-S
-2715 5270 m
-2714 5246 l
-S
-2712 5222 m
-2711 5198 l
-S
-2709 5174 m
-2708 5150 l
-S
-2707 5126 m
-2705 5102 l
-S
-2704 5078 m
-2702 5054 l
-S
-2701 5030 m
-2699 5006 l
-S
-2698 4982 m
-2697 4958 l
-S
-2695 4934 m
-2694 4910 l
-S
-2692 4886 m
-2691 4862 l
-S
-2689 4839 m
-2688 4815 l
-S
-2687 4791 m
-2685 4767 l
-S
-2684 4743 m
-2682 4719 l
-S
-2681 4695 m
-2679 4671 l
-S
-2678 4647 m
-2677 4623 l
-S
-2675 4599 m
-2674 4575 l
-S
-2672 4551 m
-2671 4527 l
-S
-2669 4503 m
-2668 4479 l
-S
-2666 4455 m
-2665 4431 l
-S
-2664 4407 m
-2662 4383 l
-S
-2661 4359 m
-2659 4335 l
-S
-2658 4311 m
-2656 4287 l
-S
-2655 4263 m
-2653 4239 l
-S
-2652 4215 m
-2651 4191 l
-S
-2649 4168 m
-2648 4144 l
-S
-2646 4120 m
-2645 4096 l
-S
-2643 4072 m
-2642 4048 l
-S
-2640 4024 m
-2639 4000 l
-S
-2637 3976 m
-2636 3952 l
-S
-2634 3928 m
-2633 3904 l
-S
-2632 3880 m
-2630 3856 l
-S
-2629 3832 m
-2627 3808 l
-S
-2626 3784 m
-2625 3778 l
-2624 3760 l
-S
-2623 3736 m
-2621 3712 l
-S
-2620 3688 m
-2618 3664 l
-S
-2617 3640 m
-2615 3616 l
-S
-2614 3592 m
-2612 3568 l
-S
-2611 3544 m
-2610 3521 l
-S
-2608 3497 m
-2607 3473 l
-S
-2605 3449 m
-2604 3425 l
-S
-2602 3401 m
-2601 3377 l
-S
-2599 3353 m
-2598 3329 l
-S
-2596 3305 m
-2595 3281 l
-S
-2593 3257 m
-2592 3242 l
-2592 3233 l
-S
-2590 3209 m
-2589 3185 l
-S
-2587 3161 m
-2586 3137 l
-S
-2584 3113 m
-2583 3089 l
-S
-2581 3065 m
-2580 3041 l
-S
-2578 3017 m
-2577 2993 l
-S
-2575 2969 m
-2574 2945 l
-S
-2572 2921 m
-2571 2898 l
-S
-2569 2874 m
-2568 2850 l
-S
-2566 2826 m
-2565 2802 l
-S
-2563 2778 m
-2562 2754 l
-S
-2560 2730 m
-2559 2706 l
-2559 2706 l
-S
-2557 2682 m
-2556 2658 l
-S
-2554 2634 m
-2553 2610 l
-S
-2551 2586 m
-2550 2562 l
-S
-2548 2538 m
-2547 2514 l
-S
-2545 2490 m
-2544 2466 l
-S
-2542 2442 m
-2541 2418 l
-S
-2539 2394 m
-2538 2370 l
-S
-2536 2346 m
-2535 2322 l
-S
-2533 2299 m
-2532 2275 l
-S
-2530 2251 m
-2529 2227 l
-S
-2527 2203 m
-2526 2179 l
-S
-2524 2155 m
-2523 2131 l
-S
-2521 2107 m
-2520 2083 l
-S
-2518 2059 m
-2517 2035 l
-S
-2515 2011 m
-2514 1987 l
-S
-2512 1963 m
-2511 1939 l
-S
-2509 1915 m
-2507 1891 l
-S
-2506 1867 m
-2504 1843 l
-S
-2503 1819 m
-2501 1795 l
-S
-2186 6115 m
-2184 6091 l
-S
-2183 6067 m
-2182 6043 l
-S
-2180 6019 m
-2179 5995 l
-S
-2177 5971 m
-2176 5947 l
-S
-2175 5923 m
-2173 5900 l
-S
-2172 5876 m
-2170 5852 l
-S
-2169 5828 m
-2168 5804 l
-S
-2166 5780 m
-2165 5756 l
-S
-2163 5732 m
-2162 5708 l
-S
-2161 5684 m
-2159 5660 l
-S
-2158 5636 m
-2156 5612 l
-S
-2155 5588 m
-2154 5564 l
-S
-2152 5540 m
-2151 5516 l
-S
-2149 5492 m
-2148 5468 l
-S
-2147 5444 m
-2145 5420 l
-S
-2144 5396 m
-2142 5372 l
-S
-2141 5348 m
-2139 5324 l
-S
-2138 5300 m
-2137 5276 l
-S
-2135 5252 m
-2134 5228 l
-S
-2132 5205 m
-2131 5181 l
-S
-2129 5157 m
-2128 5133 l
-S
-2127 5109 m
-2125 5085 l
-S
-2124 5061 m
-2122 5037 l
-S
-2121 5013 m
-2120 4989 l
-S
-2118 4965 m
-2117 4941 l
-S
-2115 4917 m
-2114 4893 l
-S
-2112 4869 m
-2112 4861 l
-2111 4845 l
-S
-2110 4821 m
-2108 4797 l
-S
-2107 4773 m
-2105 4749 l
-S
-2104 4725 m
-2102 4701 l
-S
-2101 4677 m
-2099 4653 l
-S
-2098 4629 m
-2097 4605 l
-S
-2095 4581 m
-2094 4557 l
-S
-2092 4533 m
-2091 4510 l
-S
-2089 4486 m
-2088 4462 l
-S
-2086 4438 m
-2085 4414 l
-S
-2084 4390 m
-2082 4366 l
-S
-2081 4342 m
-2080 4325 l
-2079 4318 l
-S
-2078 4294 m
-2076 4270 l
-S
-2075 4246 m
-2073 4222 l
-S
-2072 4198 m
-2071 4174 l
-S
-2069 4150 m
-2068 4126 l
-S
-2066 4102 m
-2065 4078 l
-S
-2063 4054 m
-2062 4030 l
-S
-2060 4006 m
-2059 3982 l
-S
-2057 3958 m
-2056 3934 l
-S
-2054 3910 m
-2053 3886 l
-S
-2052 3863 m
-2050 3839 l
-S
-2049 3815 m
-2047 3791 l
-S
-2046 3767 m
-2044 3743 l
-S
-2043 3719 m
-2041 3695 l
-S
-2040 3671 m
-2038 3647 l
-S
-2037 3623 m
-2035 3599 l
-S
-2034 3575 m
-2032 3551 l
-S
-2031 3527 m
-2030 3503 l
-S
-2028 3479 m
-2027 3455 l
-S
-2025 3431 m
-2024 3407 l
-S
-2022 3383 m
-2021 3359 l
-S
-2019 3335 m
-2018 3311 l
-S
-2016 3287 m
-2015 3263 l
-S
-2013 3239 m
-2012 3216 l
-S
-2010 3192 m
-2009 3168 l
-S
-2007 3144 m
-2006 3120 l
-S
-2004 3096 m
-2003 3072 l
-S
-2001 3048 m
-2000 3024 l
-S
-1998 3000 m
-1997 2976 l
-S
-1995 2952 m
-1994 2928 l
-S
-1992 2904 m
-1991 2880 l
-S
-1989 2856 m
-1988 2832 l
-S
-1986 2808 m
-1985 2784 l
-S
-1983 2760 m
-1982 2736 l
-S
-1980 2712 m
-1979 2688 l
-S
-1977 2664 m
-1976 2640 l
-S
-1974 2617 m
-1973 2593 l
-S
-1971 2569 m
-1970 2545 l
-S
-1968 2521 m
-1967 2497 l
-S
-1965 2473 m
-1964 2449 l
-S
-1962 2425 m
-1961 2401 l
-S
-1959 2377 m
-1958 2353 l
-S
-1956 2329 m
-1955 2305 l
-S
-1953 2281 m
-1952 2257 l
-S
-1950 2233 m
-1949 2209 l
-S
-1947 2185 m
-1947 2182 l
-1946 2161 l
-S
-1944 2137 m
-1943 2113 l
-S
-1941 2089 m
-1940 2065 l
-S
-1938 2041 m
-1937 2018 l
-S
-1935 1994 m
-1933 1970 l
-S
-1932 1946 m
-1930 1922 l
-S
-1929 1898 m
-1927 1874 l
-S
-1926 1850 m
-1924 1826 l
-S
-1923 1802 m
-1921 1778 l
-S
-1606 6098 m
-1604 6074 l
-S
-1603 6050 m
-1602 6026 l
-S
-1600 6002 m
-1599 5978 l
-S
-1598 5954 m
-1597 5944 l
-1596 5930 l
-S
-1595 5906 m
-1593 5882 l
-S
-1592 5858 m
-1591 5834 l
-S
-1589 5810 m
-1588 5786 l
-S
-1586 5762 m
-1585 5738 l
-S
-1583 5714 m
-1582 5690 l
-S
-1581 5666 m
-1579 5642 l
-S
-1578 5618 m
-1576 5594 l
-S
-1575 5571 m
-1574 5547 l
-S
-1572 5523 m
-1571 5499 l
-S
-1569 5475 m
-1568 5451 l
-S
-1567 5427 m
-1566 5408 l
-1565 5403 l
-S
-1564 5379 m
-1562 5355 l
-S
-1561 5331 m
-1560 5307 l
-S
-1558 5283 m
-1557 5259 l
-S
-1555 5235 m
-1554 5211 l
-S
-1552 5187 m
-1551 5163 l
-S
-1550 5139 m
-1548 5115 l
-S
-1547 5091 m
-1545 5067 l
-S
-1544 5043 m
-1542 5019 l
-S
-1541 4995 m
-1540 4971 l
-S
-1538 4947 m
-1537 4923 l
-S
-1535 4899 m
-1534 4876 l
-S
-1532 4852 m
-1531 4828 l
-S
-1530 4804 m
-1528 4780 l
-S
-1527 4756 m
-1525 4732 l
-S
-1524 4708 m
-1522 4684 l
-S
-1521 4660 m
-1519 4636 l
-S
-1518 4612 m
-1517 4588 l
-S
-1515 4564 m
-1514 4540 l
-S
-1512 4516 m
-1511 4492 l
-S
-1509 4468 m
-1508 4444 l
-S
-1507 4420 m
-1505 4396 l
-S
-1504 4372 m
-1502 4348 l
-S
-1501 4324 m
-1499 4300 l
-S
-1498 4276 m
-1496 4252 l
-S
-1495 4228 m
-1493 4205 l
-S
-1492 4181 m
-1491 4157 l
-S
-1489 4133 m
-1488 4109 l
-S
-1486 4085 m
-1485 4061 l
-S
-1483 4037 m
-1482 4013 l
-S
-1480 3989 m
-1479 3965 l
-S
-1477 3941 m
-1476 3917 l
-S
-1475 3893 m
-1473 3869 l
-S
-1472 3845 m
-1470 3821 l
-S
-1469 3797 m
-1467 3773 l
-S
-1466 3749 m
-1464 3725 l
-S
-1463 3701 m
-1461 3677 l
-S
-1460 3653 m
-1458 3629 l
-S
-1457 3605 m
-1455 3581 l
-S
-1454 3558 m
-1452 3534 l
-S
-1451 3510 m
-1449 3486 l
-S
-1448 3462 m
-1447 3438 l
-S
-1445 3414 m
-1444 3390 l
-S
-1442 3366 m
-1441 3342 l
-S
-1439 3318 m
-1438 3294 l
-S
-1436 3270 m
-1436 3266 l
-1435 3246 l
-S
-1433 3222 m
-1432 3198 l
-S
-1430 3174 m
-1429 3150 l
-S
-1427 3126 m
-1426 3102 l
-S
-1424 3078 m
-1423 3054 l
-S
-1421 3030 m
-1420 3006 l
-S
-1418 2982 m
-1417 2958 l
-S
-1415 2935 m
-1414 2911 l
-S
-1412 2887 m
-1411 2863 l
-S
-1409 2839 m
-1408 2815 l
-S
-1406 2791 m
-1405 2767 l
-S
-1403 2743 m
-1403 2730 l
-1402 2719 l
-S
-1400 2695 m
-1399 2671 l
-S
-1397 2647 m
-1396 2623 l
-S
-1394 2599 m
-1393 2575 l
-S
-1391 2551 m
-1390 2527 l
-S
-1388 2503 m
-1387 2479 l
-S
-1385 2455 m
-1384 2431 l
-S
-1382 2407 m
-1381 2383 l
-S
-1379 2359 m
-1378 2336 l
-S
-1376 2312 m
-1375 2288 l
-S
-1373 2264 m
-1372 2240 l
-S
-1370 2216 m
-1369 2194 l
-1369 2192 l
-S
-1367 2168 m
-1366 2144 l
-S
-1364 2120 m
-1363 2096 l
-S
-1361 2072 m
-1360 2048 l
-S
-1358 2024 m
-1356 2000 l
-S
-1355 1976 m
-1353 1952 l
-S
-1352 1928 m
-1350 1904 l
-S
-1349 1880 m
-1347 1856 l
-S
-1346 1832 m
-1344 1808 l
-S
-1343 1784 m
-1342 1777 l
-S
-1028 6121 m
-1027 6104 l
-S
-1026 6080 m
-1025 6056 l
-S
-1023 6032 m
-1022 6008 l
-S
-1020 5984 m
-1019 5960 l
-S
-1018 5937 m
-1016 5913 l
-S
-1015 5889 m
-1013 5865 l
-S
-1012 5841 m
-1011 5817 l
-S
-1009 5793 m
-1008 5769 l
-S
-1006 5745 m
-1005 5721 l
-S
-1004 5697 m
-1002 5673 l
-S
-1001 5649 m
-999 5625 l
-S
-998 5601 m
-997 5577 l
-S
-995 5553 m
-994 5529 l
-S
-992 5505 m
-991 5481 l
-S
-990 5457 m
-988 5433 l
-S
-987 5409 m
-985 5385 l
-S
-984 5361 m
-982 5337 l
-S
-981 5313 m
-980 5289 l
-S
-978 5265 m
-977 5242 l
-S
-975 5218 m
-974 5194 l
-S
-972 5170 m
-971 5146 l
-S
-970 5122 m
-968 5098 l
-S
-967 5074 m
-965 5050 l
-S
-964 5026 m
-962 5002 l
-S
-961 4978 m
-960 4954 l
-S
-958 4930 m
-957 4906 l
-S
-955 4882 m
-954 4858 l
-S
-952 4834 m
-951 4810 l
-S
-950 4786 m
-948 4762 l
-S
-947 4738 m
-945 4714 l
-S
-944 4690 m
-942 4666 l
-S
-941 4642 m
-940 4618 l
-S
-938 4594 m
-937 4571 l
-S
-935 4547 m
-934 4523 l
-S
-932 4499 m
-931 4475 l
-S
-929 4451 m
-928 4427 l
-S
-927 4403 m
-925 4379 l
-S
-924 4355 m
-923 4348 l
-922 4331 l
-S
-921 4307 m
-919 4283 l
-S
-918 4259 m
-916 4235 l
-S
-915 4211 m
-913 4187 l
-S
-912 4163 m
-911 4139 l
-S
-909 4115 m
-908 4091 l
-S
-906 4067 m
-905 4043 l
-S
-903 4019 m
-902 3995 l
-S
-900 3971 m
-899 3947 l
-S
-897 3923 m
-896 3900 l
-S
-895 3876 m
-893 3852 l
-S
-892 3828 m
-891 3813 l
-890 3804 l
-S
-889 3780 m
-887 3756 l
-S
-886 3732 m
-884 3708 l
-S
-883 3684 m
-881 3660 l
-S
-880 3636 m
-878 3612 l
-S
-877 3588 m
-875 3564 l
-S
-874 3540 m
-872 3516 l
-S
-871 3492 m
-869 3468 l
-S
-868 3444 m
-867 3420 l
-S
-865 3396 m
-864 3372 l
-S
-862 3348 m
-861 3324 l
-S
-859 3300 m
-858 3278 l
-858 3277 l
-S
-856 3253 m
-855 3229 l
-S
-853 3205 m
-852 3181 l
-S
-850 3157 m
-849 3133 l
-S
-847 3109 m
-846 3085 l
-S
-844 3061 m
-843 3037 l
-S
-841 3013 m
-840 2989 l
-S
-838 2965 m
-837 2941 l
-S
-835 2917 m
-834 2893 l
-S
-832 2869 m
-831 2845 l
-S
-829 2821 m
-828 2797 l
-S
-826 2773 m
-825 2749 l
-S
-823 2725 m
-822 2701 l
-S
-820 2677 m
-819 2654 l
-S
-817 2630 m
-816 2606 l
-S
-814 2582 m
-813 2558 l
-S
-811 2534 m
-810 2510 l
-S
-808 2486 m
-807 2462 l
-S
-805 2438 m
-804 2414 l
-S
-802 2390 m
-801 2366 l
-S
-799 2342 m
-798 2318 l
-S
-796 2294 m
-795 2270 l
-S
-793 2246 m
-792 2222 l
-S
-790 2198 m
-789 2174 l
-S
-787 2150 m
-786 2126 l
-S
-784 2102 m
-782 2078 l
-S
-781 2055 m
-779 2031 l
-S
-778 2007 m
-776 1983 l
-S
-775 1959 m
-773 1935 l
-S
-772 1911 m
-770 1887 l
-S
-769 1863 m
-767 1839 l
-S
-766 1815 m
-764 1791 l
-S
-4877 6113 m
-4847 6113 l
-S
-4877 5988 m
-4847 5988 l
-S
-4877 5862 m
-4847 5863 l
-S
-4877 5737 m
-4847 5738 l
-S
-4877 5486 m
-4847 5487 l
-S
-4877 5361 m
-4847 5362 l
-S
-4877 5236 m
-4847 5236 l
-S
-4877 5110 m
-4847 5111 l
-S
-4877 4860 m
-4847 4860 l
-S
-4877 4734 m
-4847 4735 l
-S
-4877 4609 m
-4847 4610 l
-S
-4877 4484 m
-4847 4484 l
-S
-4877 4233 m
-4847 4234 l
-S
-4877 4108 m
-4847 4109 l
-S
-4877 3983 m
-4847 3983 l
-S
-4877 3857 m
-4847 3858 l
-S
-4877 3607 m
-4847 3607 l
-S
-4877 3481 m
-4847 3482 l
-S
-4877 3356 m
-4847 3357 l
-S
-4877 3231 m
-4847 3231 l
-S
-4877 2980 m
-4847 2981 l
-S
-4877 2855 m
-4847 2855 l
-S
-4877 2729 m
-4847 2730 l
-S
-4877 2604 m
-4847 2605 l
-S
-4877 2353 m
-4847 2354 l
-S
-4877 2228 m
-4847 2229 l
-S
-4877 2103 m
-4847 2103 l
-S
-4877 1977 m
-4847 1978 l
-S
-4671 1777 m
-4673 1808 l
-S
-4527 1777 m
-4529 1808 l
-S
-4382 1777 m
-4384 1808 l
-S
-4092 1777 m
-4094 1808 l
-S
-3948 1777 m
-3950 1808 l
-S
-3803 1777 m
-3805 1808 l
-S
-3513 1777 m
-3515 1808 l
-S
-3369 1777 m
-3371 1808 l
-S
-3224 1777 m
-3226 1808 l
-S
-2934 1777 m
-2936 1808 l
-S
-2790 1777 m
-2792 1808 l
-S
-2645 1777 m
-2647 1808 l
-S
-2355 1777 m
-2357 1808 l
-S
-2211 1777 m
-2213 1808 l
-S
-2066 1777 m
-2068 1808 l
-S
-1777 1777 m
-1778 1808 l
-S
-1632 1777 m
-1634 1808 l
-S
-1487 1777 m
-1489 1808 l
-S
-1198 1777 m
-1199 1808 l
-S
-1053 1777 m
-1055 1808 l
-S
-908 1777 m
-910 1808 l
-S
-619 1777 m
-621 1808 l
-S
-533 6071 m
-564 6071 l
-S
-533 5946 m
-564 5946 l
-S
-533 5821 m
-564 5821 l
-S
-533 5571 m
-564 5571 l
-S
-533 5446 m
-564 5446 l
-S
-533 5321 m
-564 5321 l
-S
-533 5196 m
-564 5195 l
-S
-533 4946 m
-564 4945 l
-S
-533 4821 m
-564 4820 l
-S
-533 4696 m
-564 4695 l
-S
-533 4571 m
-564 4570 l
-S
-533 4321 m
-564 4320 l
-S
-533 4195 m
-564 4195 l
-S
-533 4070 m
-564 4070 l
-S
-533 3945 m
-564 3945 l
-S
-533 3695 m
-564 3695 l
-S
-533 3570 m
-564 3569 l
-S
-533 3445 m
-564 3444 l
-S
-533 3320 m
-564 3319 l
-S
-533 3070 m
-564 3069 l
-S
-533 2945 m
-564 2944 l
-S
-533 2820 m
-564 2819 l
-S
-533 2695 m
-564 2694 l
-S
-533 2444 m
-564 2444 l
-S
-533 2319 m
-564 2319 l
-S
-533 2194 m
-564 2194 l
-S
-533 2069 m
-564 2068 l
-S
-533 1819 m
-564 1818 l
-S
-4791 6121 m
-4789 6091 l
-S
-4646 6121 m
-4645 6091 l
-S
-4357 6121 m
-4355 6091 l
-S
-4212 6121 m
-4210 6091 l
-S
-4068 6121 m
-4066 6091 l
-S
-3778 6121 m
-3776 6091 l
-S
-3633 6121 m
-3632 6091 l
-S
-3489 6121 m
-3487 6091 l
-S
-3199 6121 m
-3197 6091 l
-S
-3054 6121 m
-3053 6091 l
-S
-2910 6121 m
-2908 6091 l
-S
-2620 6121 m
-2619 6091 l
-S
-2476 6121 m
-2474 6091 l
-S
-2331 6121 m
-2329 6091 l
-S
-2041 6121 m
-2040 6091 l
-S
-1897 6121 m
-1895 6091 l
-S
-1752 6121 m
-1750 6091 l
-S
-1463 6121 m
-1461 6091 l
-S
-1318 6121 m
-1316 6091 l
-S
-1173 6121 m
-1171 6091 l
-S
-884 6121 m
-882 6091 l
-S
-739 6121 m
-737 6091 l
-S
-594 6121 m
-592 6091 l
-S
-4877 1777 m
-4877 2088 l
-4877 2398 l
-4877 2708 l
-4877 3018 l
-4877 3329 l
-4877 3639 l
-4877 3949 l
-4877 4260 l
-4877 4570 l
-4877 4880 l
-4877 5190 l
-4877 5501 l
-4877 5811 l
-4877 6121 l
-S
-4877 6121 m
-4567 6121 l
-4256 6121 l
-3946 6121 l
-3636 6121 l
-3326 6121 l
-3015 6121 l
-2705 6121 l
-2395 6121 l
-2085 6121 l
-1774 6121 l
-1464 6121 l
-1154 6121 l
-843 6121 l
-533 6121 l
-S
-533 6121 m
-533 5811 l
-533 5501 l
-533 5190 l
-533 4880 l
-533 4570 l
-533 4260 l
-533 3949 l
-533 3639 l
-533 3329 l
-533 3018 l
-533 2708 l
-533 2398 l
-533 2088 l
-533 1777 l
-S
-533 1777 m
-843 1777 l
-1154 1777 l
-1464 1777 l
-1774 1777 l
-2085 1777 l
-2395 1777 l
-2705 1777 l
-3015 1777 l
-3326 1777 l
-3636 1777 l
-3946 1777 l
-4256 1777 l
-4567 1777 l
-4877 1777 l
-S
-1 g
-Y
-5029.5 2159.2 m
-4920 2159 l
-4920 2798 l
-5029 2798 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4935 2185 m
-4935 2227 l
-4966 2204 l
-4966 2216 l
-4969 2223 l
-4973 2227 l
-4984 2231 l
-4992 2231 l
-5003 2227 l
-5011 2219 l
-5014 2208 l
-5014 2197 l
-5011 2185 l
-5007 2182 l
-4999 2178 l
-S
-4935 2257 m
-5014 2257 l
-S
-4977 2257 m
-4966 2268 l
-4962 2276 l
-4962 2287 l
-4966 2294 l
-4977 2298 l
-5014 2298 l
-S
-4954 2328 m
-4951 2328 l
-4943 2332 l
-4939 2336 l
-4935 2343 l
-4935 2358 l
-4939 2366 l
-4943 2370 l
-4951 2373 l
-4958 2373 l
-4966 2370 l
-4977 2362 l
-5014 2325 l
-5014 2377 l
-S
-4935 2422 m
-4939 2411 l
-4951 2403 l
-4969 2400 l
-4981 2400 l
-4999 2403 l
-5011 2411 l
-5014 2422 l
-5014 2430 l
-5011 2441 l
-4999 2449 l
-4981 2452 l
-4969 2452 l
-4951 2449 l
-4939 2441 l
-4935 2430 l
-4935 2422 l
-S
-4962 2479 m
-5014 2479 l
-S
-4977 2479 m
-4966 2490 l
-4962 2497 l
-4962 2509 l
-4966 2516 l
-4977 2520 l
-5014 2520 l
-S
-4977 2520 m
-4966 2531 l
-4962 2539 l
-4962 2550 l
-4966 2558 l
-4977 2561 l
-5014 2561 l
-S
-4935 2610 m
-4939 2599 l
-4951 2591 l
-4969 2588 l
-4981 2588 l
-4999 2591 l
-5011 2599 l
-5014 2610 l
-5014 2618 l
-5011 2629 l
-4999 2637 l
-4981 2640 l
-4969 2640 l
-4951 2637 l
-4939 2629 l
-4935 2618 l
-4935 2610 l
-S
-4935 2685 m
-4939 2674 l
-4951 2667 l
-4969 2663 l
-4981 2663 l
-4999 2667 l
-5011 2674 l
-5014 2685 l
-5014 2693 l
-5011 2704 l
-4999 2712 l
-4981 2716 l
-4969 2716 l
-4951 2712 l
-4939 2704 l
-4935 2693 l
-4935 2685 l
-S
-4973 2779 m
-4966 2776 l
-4962 2764 l
-4962 2753 l
-4966 2742 l
-4973 2738 l
-4981 2742 l
-4984 2749 l
-4988 2768 l
-4992 2776 l
-4999 2779 l
-5003 2779 l
-5011 2776 l
-5014 2764 l
-5014 2753 l
-5011 2742 l
-5003 2738 l
-S
-1 g
-Y
-5029.5 3617.3 m
-4920 3617 l
-4920 3847 l
-5029 3847 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4935 3674 m
-4988 3636 l
-4988 3692 l
-S
-4935 3674 m
-5014 3674 l
-S
-4935 3734 m
-4939 3723 l
-4951 3715 l
-4969 3711 l
-4981 3711 l
-4999 3715 l
-5011 3723 l
-5014 3734 l
-5014 3741 l
-5011 3753 l
-4999 3760 l
-4981 3764 l
-4969 3764 l
-4951 3760 l
-4939 3753 l
-4935 3741 l
-4935 3734 l
-S
-4973 3828 m
-4966 3824 l
-4962 3813 l
-4962 3801 l
-4966 3790 l
-4973 3786 l
-4981 3790 l
-4984 3798 l
-4988 3817 l
-4992 3824 l
-4999 3828 l
-5003 3828 l
-5011 3824 l
-5014 3813 l
-5014 3801 l
-5011 3790 l
-5003 3786 l
-S
-1 g
-Y
-5029.5 4870.5 m
-4920 4870 l
-4920 5100 l
-5029 5100 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4954 4893 m
-4951 4893 l
-4943 4897 l
-4939 4901 l
-4935 4908 l
-4935 4923 l
-4939 4931 l
-4943 4934 l
-4951 4938 l
-4958 4938 l
-4966 4934 l
-4977 4927 l
-5014 4889 l
-5014 4942 l
-S
-4935 4987 m
-4939 4976 l
-4951 4968 l
-4969 4964 l
-4981 4964 l
-4999 4968 l
-5011 4976 l
-5014 4987 l
-5014 4995 l
-5011 5006 l
-4999 5013 l
-4981 5017 l
-4969 5017 l
-4951 5013 l
-4939 5006 l
-4935 4995 l
-4935 4987 l
-S
-4973 5081 m
-4966 5077 l
-4962 5066 l
-4962 5055 l
-4966 5043 l
-4973 5040 l
-4981 5043 l
-4984 5051 l
-4988 5070 l
-4992 5077 l
-4999 5081 l
-5003 5081 l
-5011 5077 l
-5014 5066 l
-5014 5055 l
-5011 5043 l
-5003 5040 l
-S
-1 g
-Y
-2562.2 1200.1 m
-2453 1200 l
-2453 1741 l
-2562 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2468 1256 m
-2521 1219 l
-2521 1275 l
-S
-2468 1256 m
-2547 1256 l
-S
-2483 1305 m
-2480 1313 l
-2468 1324 l
-2547 1324 l
-S
-2495 1377 m
-2498 1373 l
-2502 1377 l
-2498 1381 l
-2495 1377 l
-S
-2540 1377 m
-2543 1373 l
-2547 1377 l
-2543 1381 l
-2540 1377 l
-S
-2468 1414 m
-2468 1456 l
-2498 1433 l
-2498 1444 l
-2502 1452 l
-2506 1456 l
-2517 1459 l
-2525 1459 l
-2536 1456 l
-2543 1448 l
-2547 1437 l
-2547 1426 l
-2543 1414 l
-2540 1411 l
-2532 1407 l
-S
-2468 1505 m
-2472 1493 l
-2483 1486 l
-2502 1482 l
-2513 1482 l
-2532 1486 l
-2543 1493 l
-2547 1505 l
-2547 1512 l
-2543 1523 l
-2532 1531 l
-2513 1535 l
-2502 1535 l
-2483 1531 l
-2472 1523 l
-2468 1512 l
-2468 1505 l
-S
-2495 1565 m
-2498 1561 l
-2502 1565 l
-2498 1568 l
-2495 1565 l
-S
-2540 1565 m
-2543 1561 l
-2547 1565 l
-2543 1568 l
-2540 1565 l
-S
-2468 1617 m
-2472 1606 l
-2483 1599 l
-2502 1595 l
-2513 1595 l
-2532 1599 l
-2543 1606 l
-2547 1617 l
-2547 1625 l
-2543 1636 l
-2532 1644 l
-2513 1647 l
-2502 1647 l
-2483 1644 l
-2472 1636 l
-2468 1625 l
-2468 1617 l
-S
-2468 1693 m
-2472 1681 l
-2483 1674 l
-2502 1670 l
-2513 1670 l
-2532 1674 l
-2543 1681 l
-2547 1693 l
-2547 1700 l
-2543 1711 l
-2532 1719 l
-2513 1723 l
-2502 1723 l
-2483 1719 l
-2472 1711 l
-2468 1700 l
-2468 1693 l
-S
-1 g
-Y
-3141.2 1388.1 m
-3032 1388 l
-3032 1741 l
-3141 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3066 1411 m
-3062 1411 l
-3055 1414 l
-3051 1418 l
-3047 1426 l
-3047 1441 l
-3051 1448 l
-3055 1452 l
-3062 1456 l
-3070 1456 l
-3077 1452 l
-3089 1444 l
-3126 1407 l
-3126 1459 l
-S
-3074 1531 m
-3085 1527 l
-3092 1520 l
-3096 1508 l
-3096 1505 l
-3092 1493 l
-3085 1486 l
-3074 1482 l
-3070 1482 l
-3059 1486 l
-3051 1493 l
-3047 1505 l
-3047 1508 l
-3051 1520 l
-3059 1527 l
-3074 1531 l
-3092 1531 l
-3111 1527 l
-3122 1520 l
-3126 1508 l
-3126 1501 l
-3122 1490 l
-3115 1486 l
-S
-3074 1565 m
-3077 1561 l
-3081 1565 l
-3077 1568 l
-3074 1565 l
-S
-3119 1565 m
-3122 1561 l
-3126 1565 l
-3122 1568 l
-3119 1565 l
-S
-3047 1617 m
-3051 1606 l
-3062 1599 l
-3081 1595 l
-3092 1595 l
-3111 1599 l
-3122 1606 l
-3126 1617 l
-3126 1625 l
-3122 1636 l
-3111 1644 l
-3092 1647 l
-3081 1647 l
-3062 1644 l
-3051 1636 l
-3047 1625 l
-3047 1617 l
-S
-3047 1693 m
-3051 1681 l
-3062 1674 l
-3081 1670 l
-3092 1670 l
-3111 1674 l
-3122 1681 l
-3126 1693 l
-3126 1700 l
-3122 1711 l
-3111 1719 l
-3092 1723 l
-3081 1723 l
-3062 1719 l
-3051 1711 l
-3047 1700 l
-3047 1693 l
-S
-1 g
-Y
-3720.2 1388.1 m
-3611 1388 l
-3611 1741 l
-3720 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3645 1411 m
-3641 1411 l
-3634 1414 l
-3630 1418 l
-3626 1426 l
-3626 1441 l
-3630 1448 l
-3634 1452 l
-3641 1456 l
-3649 1456 l
-3656 1452 l
-3668 1444 l
-3705 1407 l
-3705 1459 l
-S
-3626 1501 m
-3630 1490 l
-3637 1486 l
-3645 1486 l
-3653 1490 l
-3656 1497 l
-3660 1512 l
-3664 1523 l
-3671 1531 l
-3679 1535 l
-3690 1535 l
-3698 1531 l
-3701 1527 l
-3705 1516 l
-3705 1501 l
-3701 1490 l
-3698 1486 l
-3690 1482 l
-3679 1482 l
-3671 1486 l
-3664 1493 l
-3660 1505 l
-3656 1520 l
-3653 1527 l
-3645 1531 l
-3637 1531 l
-3630 1527 l
-3626 1516 l
-3626 1501 l
-S
-3653 1565 m
-3656 1561 l
-3660 1565 l
-3656 1568 l
-3653 1565 l
-S
-3698 1565 m
-3701 1561 l
-3705 1565 l
-3701 1568 l
-3698 1565 l
-S
-3626 1617 m
-3630 1606 l
-3641 1599 l
-3660 1595 l
-3671 1595 l
-3690 1599 l
-3701 1606 l
-3705 1617 l
-3705 1625 l
-3701 1636 l
-3690 1644 l
-3671 1647 l
-3660 1647 l
-3641 1644 l
-3630 1636 l
-3626 1625 l
-3626 1617 l
-S
-3626 1693 m
-3630 1681 l
-3641 1674 l
-3660 1670 l
-3671 1670 l
-3690 1674 l
-3701 1681 l
-3705 1693 l
-3705 1700 l
-3701 1711 l
-3690 1719 l
-3671 1723 l
-3660 1723 l
-3641 1719 l
-3630 1711 l
-3626 1700 l
-3626 1693 l
-S
-1 g
-Y
-4299.2 1388.1 m
-4190 1388 l
-4190 1741 l
-4299 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4224 1411 m
-4220 1411 l
-4213 1414 l
-4209 1418 l
-4205 1426 l
-4205 1441 l
-4209 1448 l
-4213 1452 l
-4220 1456 l
-4228 1456 l
-4235 1452 l
-4247 1444 l
-4284 1407 l
-4284 1459 l
-S
-4205 1535 m
-4284 1497 l
-S
-4205 1482 m
-4205 1535 l
-S
-4231 1565 m
-4235 1561 l
-4239 1565 l
-4235 1568 l
-4231 1565 l
-S
-4277 1565 m
-4280 1561 l
-4284 1565 l
-4280 1568 l
-4277 1565 l
-S
-4205 1617 m
-4209 1606 l
-4220 1599 l
-4239 1595 l
-4250 1595 l
-4269 1599 l
-4280 1606 l
-4284 1617 l
-4284 1625 l
-4280 1636 l
-4269 1644 l
-4250 1647 l
-4239 1647 l
-4220 1644 l
-4209 1636 l
-4205 1625 l
-4205 1617 l
-S
-4205 1693 m
-4209 1681 l
-4220 1674 l
-4239 1670 l
-4250 1670 l
-4269 1674 l
-4280 1681 l
-4284 1693 l
-4284 1700 l
-4280 1711 l
-4269 1719 l
-4250 1723 l
-4239 1723 l
-4220 1719 l
-4209 1711 l
-4205 1700 l
-4205 1693 l
-S
-1 g
-Y
-4878.1 1388.1 m
-4769 1388 l
-4769 1741 l
-4878 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4803 1411 m
-4799 1411 l
-4792 1414 l
-4788 1418 l
-4784 1426 l
-4784 1441 l
-4788 1448 l
-4792 1452 l
-4799 1456 l
-4807 1456 l
-4814 1452 l
-4826 1444 l
-4863 1407 l
-4863 1459 l
-S
-4795 1531 m
-4788 1527 l
-4784 1516 l
-4784 1508 l
-4788 1497 l
-4799 1490 l
-4818 1486 l
-4837 1486 l
-4852 1490 l
-4859 1497 l
-4863 1508 l
-4863 1512 l
-4859 1523 l
-4852 1531 l
-4841 1535 l
-4837 1535 l
-4826 1531 l
-4818 1523 l
-4814 1512 l
-4814 1508 l
-4818 1497 l
-4826 1490 l
-4837 1486 l
-S
-4810 1565 m
-4814 1561 l
-4818 1565 l
-4814 1568 l
-4810 1565 l
-S
-4856 1565 m
-4859 1561 l
-4863 1565 l
-4859 1568 l
-4856 1565 l
-S
-4784 1617 m
-4788 1606 l
-4799 1599 l
-4818 1595 l
-4829 1595 l
-4848 1599 l
-4859 1606 l
-4863 1617 l
-4863 1625 l
-4859 1636 l
-4848 1644 l
-4829 1647 l
-4818 1647 l
-4799 1644 l
-4788 1636 l
-4784 1625 l
-4784 1617 l
-S
-4784 1693 m
-4788 1681 l
-4799 1674 l
-4818 1670 l
-4829 1670 l
-4848 1674 l
-4859 1681 l
-4863 1693 l
-4863 1700 l
-4859 1711 l
-4848 1719 l
-4829 1723 l
-4818 1723 l
-4799 1719 l
-4788 1711 l
-4784 1700 l
-4784 1693 l
-S
-1 g
-Y
-1983.3 1388.1 m
-1874 1388 l
-1874 1741 l
-1983 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1889 1414 m
-1889 1456 l
-1919 1433 l
-1919 1444 l
-1923 1452 l
-1927 1456 l
-1938 1459 l
-1946 1459 l
-1957 1456 l
-1964 1448 l
-1968 1437 l
-1968 1426 l
-1964 1414 l
-1961 1411 l
-1953 1407 l
-S
-1904 1493 m
-1901 1501 l
-1889 1512 l
-1968 1512 l
-S
-1916 1565 m
-1919 1561 l
-1923 1565 l
-1919 1568 l
-1916 1565 l
-S
-1961 1565 m
-1964 1561 l
-1968 1565 l
-1964 1568 l
-1961 1565 l
-S
-1889 1617 m
-1893 1606 l
-1904 1599 l
-1923 1595 l
-1934 1595 l
-1953 1599 l
-1964 1606 l
-1968 1617 l
-1968 1625 l
-1964 1636 l
-1953 1644 l
-1934 1647 l
-1923 1647 l
-1904 1644 l
-1893 1636 l
-1889 1625 l
-1889 1617 l
-S
-1889 1693 m
-1893 1681 l
-1904 1674 l
-1923 1670 l
-1934 1670 l
-1953 1674 l
-1964 1681 l
-1968 1693 l
-1968 1700 l
-1964 1711 l
-1953 1719 l
-1934 1723 l
-1923 1723 l
-1904 1719 l
-1893 1711 l
-1889 1700 l
-1889 1693 l
-S
-1 g
-Y
-1404.3 1388.1 m
-1295 1388 l
-1295 1741 l
-1404 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1310 1414 m
-1310 1456 l
-1340 1433 l
-1340 1444 l
-1344 1452 l
-1348 1456 l
-1359 1459 l
-1367 1459 l
-1378 1456 l
-1385 1448 l
-1389 1437 l
-1389 1426 l
-1385 1414 l
-1382 1411 l
-1374 1407 l
-S
-1329 1486 m
-1325 1486 l
-1318 1490 l
-1314 1493 l
-1310 1501 l
-1310 1516 l
-1314 1523 l
-1318 1527 l
-1325 1531 l
-1333 1531 l
-1340 1527 l
-1352 1520 l
-1389 1482 l
-1389 1535 l
-S
-1337 1565 m
-1340 1561 l
-1344 1565 l
-1340 1568 l
-1337 1565 l
-S
-1382 1565 m
-1385 1561 l
-1389 1565 l
-1385 1568 l
-1382 1565 l
-S
-1310 1617 m
-1314 1606 l
-1325 1599 l
-1344 1595 l
-1355 1595 l
-1374 1599 l
-1385 1606 l
-1389 1617 l
-1389 1625 l
-1385 1636 l
-1374 1644 l
-1355 1647 l
-1344 1647 l
-1325 1644 l
-1314 1636 l
-1310 1625 l
-1310 1617 l
-S
-1310 1693 m
-1314 1681 l
-1325 1674 l
-1344 1670 l
-1355 1670 l
-1374 1674 l
-1385 1681 l
-1389 1693 l
-1389 1700 l
-1385 1711 l
-1374 1719 l
-1355 1723 l
-1344 1723 l
-1325 1719 l
-1314 1711 l
-1310 1700 l
-1310 1693 l
-S
-1 g
-Y
-825.3 1388.1 m
-716 1388 l
-716 1741 l
-825 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-731 1414 m
-731 1456 l
-761 1433 l
-761 1444 l
-765 1452 l
-769 1456 l
-780 1459 l
-788 1459 l
-799 1456 l
-807 1448 l
-810 1437 l
-810 1426 l
-807 1414 l
-803 1411 l
-795 1407 l
-S
-731 1490 m
-731 1531 l
-761 1508 l
-761 1520 l
-765 1527 l
-769 1531 l
-780 1535 l
-788 1535 l
-799 1531 l
-807 1523 l
-810 1512 l
-810 1501 l
-807 1490 l
-803 1486 l
-795 1482 l
-S
-758 1565 m
-761 1561 l
-765 1565 l
-761 1568 l
-758 1565 l
-S
-803 1565 m
-807 1561 l
-810 1565 l
-807 1568 l
-803 1565 l
-S
-731 1617 m
-735 1606 l
-746 1599 l
-765 1595 l
-776 1595 l
-795 1599 l
-807 1606 l
-810 1617 l
-810 1625 l
-807 1636 l
-795 1644 l
-776 1647 l
-765 1647 l
-746 1644 l
-735 1636 l
-731 1625 l
-731 1617 l
-S
-731 1693 m
-735 1681 l
-746 1674 l
-765 1670 l
-776 1670 l
-795 1674 l
-807 1681 l
-810 1693 l
-810 1700 l
-807 1711 l
-795 1719 l
-776 1723 l
-765 1723 l
-746 1719 l
-735 1711 l
-731 1700 l
-731 1693 l
-S
-1 g
-Y
-5319.8 3163 m
-5088 3163 l
-5088 4736 l
-5320 4736 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-5119 3194 m
-5251 3194 l
-S
-5119 3194 m
-5119 3251 l
-5126 3269 l
-5132 3276 l
-5144 3282 l
-5157 3282 l
-5169 3276 l
-5176 3269 l
-5182 3251 l
-5182 3194 l
-S
-5182 3238 m
-5251 3282 l
-S
-5119 3320 m
-5126 3326 l
-5119 3332 l
-5113 3326 l
-5119 3320 l
-S
-5163 3326 m
-5251 3326 l
-S
-5163 3445 m
-5263 3445 l
-5282 3439 l
-5288 3432 l
-5295 3420 l
-5295 3401 l
-5288 3389 l
-S
-5182 3445 m
-5169 3432 l
-5163 3420 l
-5163 3401 l
-5169 3389 l
-5182 3376 l
-5201 3370 l
-5213 3370 l
-5232 3376 l
-5245 3389 l
-5251 3401 l
-5251 3420 l
-5245 3432 l
-5232 3445 l
-S
-5119 3495 m
-5251 3495 l
-S
-5188 3495 m
-5169 3514 l
-5163 3526 l
-5163 3545 l
-5169 3558 l
-5188 3564 l
-5251 3564 l
-S
-5119 3620 m
-5226 3620 l
-5245 3627 l
-5251 3639 l
-5251 3652 l
-S
-5163 3602 m
-5163 3645 l
-S
-5163 3858 m
-5251 3858 l
-S
-5182 3858 m
-5169 3846 l
-5163 3833 l
-5163 3815 l
-5169 3802 l
-5182 3789 l
-5201 3783 l
-5213 3783 l
-5232 3789 l
-5245 3802 l
-5251 3815 l
-5251 3833 l
-5245 3846 l
-5232 3858 l
-S
-5182 3971 m
-5169 3965 l
-5163 3946 l
-5163 3927 l
-5169 3909 l
-5182 3902 l
-5194 3909 l
-5201 3921 l
-5207 3952 l
-5213 3965 l
-5226 3971 l
-5232 3971 l
-5245 3965 l
-5251 3946 l
-5251 3927 l
-5245 3909 l
-5232 3902 l
-S
-5182 4084 m
-5169 4071 l
-5163 4059 l
-5163 4040 l
-5169 4028 l
-5182 4015 l
-5201 4009 l
-5213 4009 l
-5232 4015 l
-5245 4028 l
-5251 4040 l
-5251 4059 l
-5245 4071 l
-5232 4084 l
-S
-5201 4122 m
-5201 4197 l
-5188 4197 l
-5176 4190 l
-5169 4184 l
-5163 4172 l
-5163 4153 l
-5169 4140 l
-5182 4128 l
-5201 4122 l
-5213 4122 l
-5232 4128 l
-5245 4140 l
-5251 4153 l
-5251 4172 l
-5245 4184 l
-5232 4197 l
-S
-5163 4241 m
-5251 4241 l
-S
-5188 4241 m
-5169 4259 l
-5163 4272 l
-5163 4291 l
-5169 4303 l
-5188 4309 l
-5251 4309 l
-S
-5182 4422 m
-5169 4416 l
-5163 4397 l
-5163 4378 l
-5169 4360 l
-5182 4353 l
-5194 4360 l
-5201 4372 l
-5207 4403 l
-5213 4416 l
-5226 4422 l
-5232 4422 l
-5245 4416 l
-5251 4397 l
-5251 4378 l
-5245 4360 l
-5232 4353 l
-S
-5119 4460 m
-5126 4466 l
-5119 4472 l
-5113 4466 l
-5119 4460 l
-S
-5163 4466 m
-5251 4466 l
-S
-5163 4541 m
-5169 4529 l
-5182 4516 l
-5201 4510 l
-5213 4510 l
-5232 4516 l
-5245 4529 l
-5251 4541 l
-5251 4560 l
-5245 4573 l
-5232 4585 l
-5213 4591 l
-5201 4591 l
-5182 4585 l
-5169 4573 l
-5163 4560 l
-5163 4541 l
-S
-5163 4635 m
-5251 4635 l
-S
-5188 4635 m
-5169 4654 l
-5163 4667 l
-5163 4685 l
-5169 4698 l
-5188 4704 l
-5251 4704 l
-S
-1 g
-Y
-3240.9 1170.4 m
-3241 982 l
-2170 982 l
-2170 1170 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3210 1014 m
-3210 1145 l
-S
-3210 1014 m
-3166 1014 l
-3147 1020 l
-3134 1033 l
-3128 1045 l
-3122 1064 l
-3122 1095 l
-3128 1114 l
-3134 1127 l
-3147 1139 l
-3166 1145 l
-3210 1145 l
-S
-3084 1095 m
-3009 1095 l
-3009 1083 l
-3015 1070 l
-3022 1064 l
-3034 1058 l
-3053 1058 l
-3066 1064 l
-3078 1076 l
-3084 1095 l
-3084 1108 l
-3078 1127 l
-3066 1139 l
-3053 1145 l
-3034 1145 l
-3022 1139 l
-3009 1127 l
-S
-2896 1076 m
-2909 1064 l
-2921 1058 l
-2940 1058 l
-2953 1064 l
-2965 1076 l
-2972 1095 l
-2972 1108 l
-2965 1127 l
-2953 1139 l
-2940 1145 l
-2921 1145 l
-2909 1139 l
-2896 1127 l
-S
-2853 1014 m
-2853 1145 l
-S
-2809 1014 m
-2802 1020 l
-2796 1014 l
-2802 1008 l
-2809 1014 l
-S
-2802 1058 m
-2802 1145 l
-S
-2752 1058 m
-2752 1145 l
-S
-2752 1083 m
-2733 1064 l
-2721 1058 l
-2702 1058 l
-2690 1064 l
-2683 1083 l
-2683 1145 l
-S
-2564 1058 m
-2564 1145 l
-S
-2564 1076 m
-2577 1064 l
-2589 1058 l
-2608 1058 l
-2621 1064 l
-2633 1076 l
-2639 1095 l
-2639 1108 l
-2633 1127 l
-2621 1139 l
-2608 1145 l
-2589 1145 l
-2577 1139 l
-2564 1127 l
-S
-2508 1014 m
-2508 1120 l
-2502 1139 l
-2489 1145 l
-2477 1145 l
-S
-2527 1058 m
-2483 1058 l
-S
-2445 1014 m
-2439 1020 l
-2433 1014 l
-2439 1008 l
-2445 1014 l
-S
-2439 1058 m
-2439 1145 l
-S
-2364 1058 m
-2376 1064 l
-2389 1076 l
-2395 1095 l
-2395 1108 l
-2389 1127 l
-2376 1139 l
-2364 1145 l
-2345 1145 l
-2333 1139 l
-2320 1127 l
-2314 1108 l
-2314 1095 l
-2320 1076 l
-2333 1064 l
-2345 1058 l
-2364 1058 l
-S
-2270 1058 m
-2270 1145 l
-S
-2270 1083 m
-2251 1064 l
-2239 1058 l
-2220 1058 l
-2207 1064 l
-2201 1083 l
-2201 1145 l
-S
-1 g
-Y
-371.2 1568.5 m
-186 1568 l
-186 6330 l
-371 6330 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-236 1669 m
-226 1664 l
-216 1654 l
-211 1644 l
-211 1624 l
-216 1614 l
-226 1604 l
-236 1599 l
-251 1594 l
-276 1594 l
-291 1599 l
-301 1604 l
-311 1614 l
-316 1624 l
-316 1644 l
-311 1654 l
-301 1664 l
-291 1669 l
-276 1669 l
-S
-276 1644 m
-276 1669 l
-S
-276 1699 m
-276 1759 l
-266 1759 l
-256 1754 l
-251 1749 l
-246 1739 l
-246 1724 l
-251 1714 l
-261 1704 l
-276 1699 l
-286 1699 l
-301 1704 l
-311 1714 l
-316 1724 l
-316 1739 l
-311 1749 l
-301 1759 l
-S
-246 1814 m
-251 1804 l
-261 1794 l
-276 1789 l
-286 1789 l
-301 1794 l
-311 1804 l
-316 1814 l
-316 1829 l
-311 1839 l
-301 1849 l
-286 1854 l
-276 1854 l
-261 1849 l
-251 1839 l
-246 1829 l
-246 1814 l
-S
-261 1944 m
-251 1934 l
-246 1924 l
-246 1909 l
-251 1899 l
-261 1889 l
-276 1884 l
-286 1884 l
-301 1889 l
-311 1899 l
-316 1909 l
-316 1924 l
-311 1934 l
-301 1944 l
-S
-276 1974 m
-276 2035 l
-266 2035 l
-256 2030 l
-251 2025 l
-246 2015 l
-246 2000 l
-251 1990 l
-261 1979 l
-276 1974 l
-286 1974 l
-301 1979 l
-311 1990 l
-316 2000 l
-316 2015 l
-311 2025 l
-301 2035 l
-S
-246 2070 m
-316 2070 l
-S
-266 2070 m
-251 2085 l
-246 2095 l
-246 2110 l
-251 2120 l
-266 2125 l
-316 2125 l
-S
-211 2170 m
-296 2170 l
-311 2175 l
-316 2185 l
-316 2195 l
-S
-246 2155 m
-246 2190 l
-S
-246 2225 m
-316 2225 l
-S
-276 2225 m
-261 2230 l
-251 2240 l
-246 2250 l
-246 2265 l
-S
-211 2285 m
-216 2290 l
-211 2295 l
-206 2290 l
-211 2285 l
-S
-246 2290 m
-316 2290 l
-S
-261 2385 m
-251 2375 l
-246 2365 l
-246 2350 l
-251 2340 l
-261 2330 l
-276 2325 l
-286 2325 l
-301 2330 l
-311 2340 l
-316 2350 l
-316 2365 l
-311 2375 l
-301 2385 l
-S
-246 2556 m
-316 2556 l
-S
-261 2556 m
-251 2546 l
-246 2536 l
-246 2521 l
-251 2511 l
-261 2501 l
-276 2496 l
-286 2496 l
-301 2501 l
-311 2511 l
-316 2521 l
-316 2536 l
-311 2546 l
-301 2556 l
-S
-246 2596 m
-351 2596 l
-S
-261 2596 m
-251 2606 l
-246 2616 l
-246 2631 l
-251 2641 l
-261 2651 l
-276 2656 l
-286 2656 l
-301 2651 l
-311 2641 l
-316 2631 l
-316 2616 l
-311 2606 l
-301 2596 l
-S
-246 2691 m
-351 2691 l
-S
-261 2691 m
-251 2701 l
-246 2711 l
-246 2726 l
-251 2736 l
-261 2746 l
-276 2751 l
-286 2751 l
-301 2746 l
-311 2736 l
-316 2726 l
-316 2711 l
-311 2701 l
-301 2691 l
-S
-246 2842 m
-316 2842 l
-S
-261 2842 m
-251 2832 l
-246 2822 l
-246 2806 l
-251 2796 l
-261 2786 l
-276 2781 l
-286 2781 l
-301 2786 l
-311 2796 l
-316 2806 l
-316 2822 l
-311 2832 l
-301 2842 l
-S
-246 2882 m
-316 2882 l
-S
-276 2882 m
-261 2887 l
-251 2897 l
-246 2907 l
-246 2922 l
-S
-276 2942 m
-276 3002 l
-266 3002 l
-256 2997 l
-251 2992 l
-246 2982 l
-246 2967 l
-251 2957 l
-261 2947 l
-276 2942 l
-286 2942 l
-301 2947 l
-311 2957 l
-316 2967 l
-316 2982 l
-311 2992 l
-301 3002 l
-S
-246 3037 m
-316 3037 l
-S
-266 3037 m
-251 3052 l
-246 3062 l
-246 3077 l
-251 3087 l
-266 3092 l
-316 3092 l
-S
-211 3137 m
-296 3137 l
-311 3142 l
-316 3152 l
-316 3162 l
-S
-246 3122 m
-246 3157 l
-S
-276 3268 m
-276 3328 l
-266 3328 l
-256 3323 l
-251 3318 l
-246 3308 l
-246 3293 l
-251 3283 l
-261 3273 l
-276 3268 l
-286 3268 l
-301 3273 l
-311 3283 l
-316 3293 l
-316 3308 l
-311 3318 l
-301 3328 l
-S
-246 3418 m
-351 3418 l
-S
-261 3418 m
-251 3408 l
-246 3398 l
-246 3383 l
-251 3373 l
-261 3363 l
-276 3358 l
-286 3358 l
-301 3363 l
-311 3373 l
-316 3383 l
-316 3398 l
-311 3408 l
-301 3418 l
-S
-246 3458 m
-296 3458 l
-311 3463 l
-316 3473 l
-316 3488 l
-311 3498 l
-296 3513 l
-S
-246 3513 m
-316 3513 l
-S
-246 3608 m
-316 3608 l
-S
-261 3608 m
-251 3598 l
-246 3588 l
-246 3573 l
-251 3563 l
-261 3553 l
-276 3548 l
-286 3548 l
-301 3553 l
-311 3563 l
-316 3573 l
-316 3588 l
-311 3598 l
-301 3608 l
-S
-211 3654 m
-296 3654 l
-311 3659 l
-316 3669 l
-316 3679 l
-S
-246 3638 m
-246 3674 l
-S
-246 3729 m
-251 3719 l
-261 3709 l
-276 3704 l
-286 3704 l
-301 3709 l
-311 3719 l
-316 3729 l
-316 3744 l
-311 3754 l
-301 3764 l
-286 3769 l
-276 3769 l
-261 3764 l
-251 3754 l
-246 3744 l
-246 3729 l
-S
-246 3804 m
-316 3804 l
-S
-276 3804 m
-261 3809 l
-251 3819 l
-246 3829 l
-246 3844 l
-S
-211 3864 m
-216 3869 l
-211 3874 l
-206 3869 l
-211 3864 l
-S
-246 3869 m
-316 3869 l
-S
-246 3964 m
-316 3964 l
-S
-261 3964 m
-251 3954 l
-246 3944 l
-246 3929 l
-251 3919 l
-261 3909 l
-276 3904 l
-286 3904 l
-301 3909 l
-311 3919 l
-316 3929 l
-316 3944 l
-311 3954 l
-301 3964 l
-S
-211 4004 m
-316 4004 l
-S
-261 4180 m
-251 4170 l
-246 4160 l
-246 4145 l
-251 4135 l
-261 4125 l
-276 4120 l
-286 4120 l
-301 4125 l
-311 4135 l
-316 4145 l
-316 4160 l
-311 4170 l
-301 4180 l
-S
-246 4235 m
-251 4225 l
-261 4215 l
-276 4210 l
-286 4210 l
-301 4215 l
-311 4225 l
-316 4235 l
-316 4250 l
-311 4260 l
-301 4270 l
-286 4275 l
-276 4275 l
-261 4270 l
-251 4260 l
-246 4250 l
-246 4235 l
-S
-246 4330 m
-251 4320 l
-261 4310 l
-276 4305 l
-286 4305 l
-301 4310 l
-311 4320 l
-316 4330 l
-316 4345 l
-311 4355 l
-301 4365 l
-286 4370 l
-276 4370 l
-261 4365 l
-251 4355 l
-246 4345 l
-246 4330 l
-S
-246 4405 m
-316 4405 l
-S
-276 4405 m
-261 4410 l
-251 4420 l
-246 4430 l
-246 4445 l
-S
-211 4526 m
-316 4526 l
-S
-261 4526 m
-251 4516 l
-246 4506 l
-246 4491 l
-251 4481 l
-261 4470 l
-276 4465 l
-286 4465 l
-301 4470 l
-311 4481 l
-316 4491 l
-316 4506 l
-311 4516 l
-301 4526 l
-S
-211 4561 m
-216 4566 l
-211 4571 l
-206 4566 l
-211 4561 l
-S
-246 4566 m
-316 4566 l
-S
-246 4606 m
-316 4606 l
-S
-266 4606 m
-251 4621 l
-246 4631 l
-246 4646 l
-251 4656 l
-266 4661 l
-316 4661 l
-S
-246 4756 m
-316 4756 l
-S
-261 4756 m
-251 4746 l
-246 4736 l
-246 4721 l
-251 4711 l
-261 4701 l
-276 4696 l
-286 4696 l
-301 4701 l
-311 4711 l
-316 4721 l
-316 4736 l
-311 4746 l
-301 4756 l
-S
-211 4801 m
-296 4801 l
-311 4806 l
-316 4816 l
-316 4826 l
-S
-246 4786 m
-246 4821 l
-S
-276 4851 m
-276 4912 l
-266 4912 l
-256 4907 l
-251 4902 l
-246 4892 l
-246 4876 l
-251 4866 l
-261 4856 l
-276 4851 l
-286 4851 l
-301 4856 l
-311 4866 l
-316 4876 l
-316 4892 l
-311 4902 l
-301 4912 l
-S
-261 4997 m
-251 4992 l
-246 4977 l
-246 4962 l
-251 4947 l
-261 4942 l
-271 4947 l
-276 4957 l
-281 4982 l
-286 4992 l
-296 4997 l
-301 4997 l
-311 4992 l
-316 4977 l
-316 4962 l
-311 4947 l
-301 4942 l
-S
-246 5037 m
-251 5032 l
-256 5037 l
-251 5042 l
-246 5037 l
-S
-311 5042 m
-316 5037 l
-311 5032 l
-306 5037 l
-311 5042 l
-321 5042 l
-331 5037 l
-336 5032 l
-S
-276 5157 m
-276 5217 l
-266 5217 l
-256 5212 l
-251 5207 l
-246 5197 l
-246 5182 l
-251 5172 l
-261 5162 l
-276 5157 l
-286 5157 l
-301 5162 l
-311 5172 l
-316 5182 l
-316 5197 l
-311 5207 l
-301 5217 l
-S
-246 5252 m
-351 5252 l
-S
-261 5252 m
-251 5262 l
-246 5272 l
-246 5287 l
-251 5297 l
-261 5308 l
-276 5313 l
-286 5313 l
-301 5308 l
-311 5297 l
-316 5287 l
-316 5272 l
-311 5262 l
-301 5252 l
-S
-246 5368 m
-251 5358 l
-261 5348 l
-276 5343 l
-286 5343 l
-301 5348 l
-311 5358 l
-316 5368 l
-316 5383 l
-311 5393 l
-301 5403 l
-286 5408 l
-276 5408 l
-261 5403 l
-251 5393 l
-246 5383 l
-246 5368 l
-S
-261 5498 m
-251 5488 l
-246 5478 l
-246 5463 l
-251 5453 l
-261 5443 l
-276 5438 l
-286 5438 l
-301 5443 l
-311 5453 l
-316 5463 l
-316 5478 l
-311 5488 l
-301 5498 l
-S
-211 5533 m
-316 5533 l
-S
-266 5533 m
-251 5548 l
-246 5558 l
-246 5573 l
-251 5583 l
-266 5588 l
-316 5588 l
-S
-211 5749 m
-291 5749 l
-306 5744 l
-311 5739 l
-316 5729 l
-316 5718 l
-311 5708 l
-306 5703 l
-291 5698 l
-281 5698 l
-S
-231 5799 m
-226 5809 l
-211 5824 l
-316 5824 l
-S
-246 5949 m
-261 5944 l
-271 5934 l
-276 5919 l
-276 5914 l
-271 5899 l
-261 5889 l
-246 5884 l
-241 5884 l
-226 5889 l
-216 5899 l
-211 5914 l
-211 5919 l
-216 5934 l
-226 5944 l
-246 5949 l
-271 5949 l
-296 5944 l
-311 5934 l
-316 5919 l
-316 5909 l
-311 5894 l
-301 5889 l
-S
-246 6049 m
-261 6044 l
-271 6034 l
-276 6019 l
-276 6014 l
-271 5999 l
-261 5989 l
-246 5984 l
-241 5984 l
-226 5989 l
-216 5999 l
-211 6014 l
-211 6019 l
-216 6034 l
-226 6044 l
-246 6049 l
-271 6049 l
-296 6044 l
-311 6034 l
-316 6019 l
-316 6009 l
-311 5994 l
-301 5989 l
-S
-211 6155 m
-316 6104 l
-S
-211 6084 m
-211 6155 l
-S
-306 6195 m
-311 6190 l
-316 6195 l
-311 6200 l
-306 6195 l
-S
-211 6295 m
-211 6245 l
-256 6240 l
-251 6245 l
-246 6260 l
-246 6275 l
-251 6290 l
-261 6300 l
-276 6305 l
-286 6305 l
-301 6300 l
-311 6290 l
-316 6275 l
-316 6260 l
-311 6245 l
-306 6240 l
-296 6235 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/frontb.eps b/ast-5.3-1/sun210_figures/frontb.eps
deleted file mode 100644
index 8572584..0000000
--- a/ast-5.3-1/sun210_figures/frontb.eps
+++ /dev/null
@@ -1,21511 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 30 189 477 603
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:07:04
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 1 0 rg
-533.21 1777.32 4343.81 4343.81 re
-Y
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3111 3017 l
-3112 3018 l
-3114 3019 l
-3116 3020 l
-3117 3021 l
-3119 3021 l
-3120 3022 l
-3142 3035 l
-3164 3048 l
-3186 3061 l
-3207 3075 l
-3229 3089 l
-3250 3103 l
-3270 3117 l
-3291 3132 l
-3311 3147 l
-3331 3163 l
-3351 3179 l
-3371 3195 l
-3390 3211 l
-3409 3228 l
-3428 3245 l
-3447 3262 l
-3465 3280 l
-3483 3297 l
-3501 3315 l
-3518 3334 l
-3536 3353 l
-3553 3371 l
-3569 3391 l
-3586 3410 l
-3602 3430 l
-3617 3450 l
-3633 3470 l
-3648 3490 l
-3663 3511 l
-3677 3532 l
-3691 3553 l
-3705 3574 l
-3719 3596 l
-3732 3618 l
-3745 3640 l
-3757 3662 l
-3769 3684 l
-3781 3707 l
-3792 3730 l
-3803 3753 l
-3814 3776 l
-3824 3800 l
-3834 3823 l
-3843 3847 l
-3852 3871 l
-3861 3895 l
-3869 3919 l
-3877 3944 l
-3884 3968 l
-3891 3993 l
-3898 4018 l
-3904 4043 l
-3910 4068 l
-3915 4094 l
-3920 4119 l
-3924 4144 l
-3928 4170 l
-3932 4196 l
-3935 4222 l
-3937 4248 l
-3939 4274 l
-3941 4300 l
-3942 4326 l
-3942 4352 l
-3943 4379 l
-3942 4405 l
-3941 4431 l
-3940 4458 l
-3938 4484 l
-3935 4511 l
-3932 4538 l
-3929 4564 l
-3925 4591 l
-3920 4617 l
-3915 4644 l
-3909 4671 l
-3903 4697 l
-3896 4724 l
-3888 4750 l
-3880 4776 l
-3872 4803 l
-3862 4829 l
-3852 4855 l
-3842 4881 l
-3831 4907 l
-3819 4933 l
-3807 4959 l
-3794 4984 l
-3780 5010 l
-3766 5035 l
-3751 5060 l
-3736 5085 l
-3720 5110 l
-3703 5134 l
-3685 5159 l
-3667 5183 l
-3648 5206 l
-3629 5230 l
-3609 5253 l
-3588 5276 l
-3566 5298 l
-3544 5320 l
-3521 5342 l
-3497 5363 l
-3473 5384 l
-3448 5405 l
-3422 5425 l
-3396 5444 l
-3369 5463 l
-3341 5482 l
-3312 5500 l
-3283 5517 l
-3254 5534 l
-3223 5551 l
-3192 5566 l
-3160 5581 l
-3128 5595 l
-3095 5609 l
-3061 5622 l
-3026 5634 l
-2992 5645 l
-2956 5656 l
-2920 5665 l
-2883 5674 l
-2846 5682 l
-2808 5689 l
-2770 5695 l
-2732 5700 l
-2693 5704 l
-2653 5707 l
-2613 5709 l
-2573 5710 l
-2533 5710 l
-2492 5709 l
-2451 5707 l
-2410 5703 l
-2368 5699 l
-2327 5693 l
-2285 5686 l
-2243 5678 l
-2202 5669 l
-2160 5658 l
-2119 5647 l
-2077 5634 l
-2036 5620 l
-1995 5605 l
-1992 5603 l
-1989 5602 l
-1986 5601 l
-1984 5600 l
-1981 5599 l
-1978 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3110 3018 l
-3110 3019 l
-3111 3021 l
-3112 3022 l
-3112 3023 l
-3113 3025 l
-3113 3026 l
-3122 3046 l
-3129 3067 l
-3137 3087 l
-3145 3108 l
-3152 3129 l
-3159 3150 l
-3166 3171 l
-3172 3192 l
-3179 3213 l
-3185 3234 l
-3191 3256 l
-3196 3277 l
-3202 3299 l
-3207 3320 l
-3212 3342 l
-3217 3364 l
-3222 3386 l
-3226 3408 l
-3230 3430 l
-3234 3452 l
-3238 3475 l
-3242 3497 l
-3245 3519 l
-3248 3542 l
-3251 3564 l
-3254 3587 l
-3257 3610 l
-3259 3632 l
-3261 3655 l
-3263 3678 l
-3265 3700 l
-3266 3723 l
-3268 3746 l
-3269 3769 l
-3270 3792 l
-3270 3815 l
-3271 3838 l
-3271 3861 l
-3271 3884 l
-3271 3907 l
-3271 3929 l
-3270 3952 l
-3269 3975 l
-3268 3998 l
-3267 4021 l
-3266 4044 l
-3264 4067 l
-3263 4090 l
-3261 4113 l
-3259 4136 l
-3256 4158 l
-3254 4181 l
-3251 4204 l
-3248 4227 l
-3245 4249 l
-3242 4272 l
-3238 4294 l
-3234 4317 l
-3230 4339 l
-3226 4362 l
-3222 4384 l
-3217 4406 l
-3212 4429 l
-3207 4451 l
-3202 4473 l
-3197 4495 l
-3191 4517 l
-3186 4538 l
-3180 4560 l
-3173 4582 l
-3167 4603 l
-3160 4625 l
-3154 4646 l
-3146 4667 l
-3139 4688 l
-3132 4709 l
-3124 4730 l
-3116 4751 l
-3108 4771 l
-3100 4792 l
-3092 4812 l
-3083 4832 l
-3074 4852 l
-3065 4872 l
-3055 4892 l
-3046 4912 l
-3036 4931 l
-3026 4950 l
-3016 4970 l
-3005 4989 l
-2995 5007 l
-2984 5026 l
-2973 5044 l
-2962 5063 l
-2950 5081 l
-2938 5099 l
-2926 5116 l
-2914 5134 l
-2902 5151 l
-2889 5168 l
-2876 5185 l
-2863 5202 l
-2849 5218 l
-2836 5234 l
-2822 5250 l
-2808 5266 l
-2793 5281 l
-2778 5296 l
-2764 5311 l
-2748 5326 l
-2733 5340 l
-2717 5355 l
-2701 5368 l
-2685 5382 l
-2668 5395 l
-2652 5408 l
-2634 5421 l
-2617 5433 l
-2599 5445 l
-2581 5457 l
-2563 5468 l
-2544 5479 l
-2526 5489 l
-2506 5499 l
-2487 5509 l
-2467 5519 l
-2447 5528 l
-2426 5536 l
-2405 5544 l
-2384 5552 l
-2362 5559 l
-2340 5566 l
-2318 5572 l
-2295 5578 l
-2272 5583 l
-2248 5587 l
-2224 5591 l
-2200 5595 l
-2175 5598 l
-2150 5600 l
-2124 5601 l
-2098 5602 l
-2072 5602 l
-2045 5602 l
-2017 5600 l
-1989 5598 l
-1987 5598 l
-1985 5598 l
-1983 5597 l
-1981 5597 l
-1979 5597 l
-1977 5597 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3109 3017 l
-3108 3019 l
-3107 3020 l
-3106 3021 l
-3106 3022 l
-3105 3023 l
-3104 3024 l
-3094 3041 l
-3083 3057 l
-3073 3074 l
-3062 3090 l
-3052 3107 l
-3041 3124 l
-3031 3141 l
-3020 3158 l
-3010 3175 l
-2999 3192 l
-2989 3210 l
-2978 3227 l
-2968 3245 l
-2957 3263 l
-2947 3280 l
-2936 3298 l
-2926 3316 l
-2915 3334 l
-2905 3352 l
-2894 3371 l
-2884 3389 l
-2873 3407 l
-2863 3426 l
-2852 3444 l
-2841 3463 l
-2831 3482 l
-2820 3500 l
-2810 3519 l
-2799 3538 l
-2789 3557 l
-2779 3576 l
-2768 3595 l
-2758 3614 l
-2747 3633 l
-2737 3653 l
-2726 3672 l
-2716 3691 l
-2706 3710 l
-2695 3730 l
-2685 3749 l
-2675 3769 l
-2664 3788 l
-2654 3808 l
-2644 3827 l
-2634 3847 l
-2624 3866 l
-2614 3886 l
-2603 3906 l
-2593 3925 l
-2583 3945 l
-2573 3965 l
-2563 3984 l
-2553 4004 l
-2544 4024 l
-2534 4043 l
-2524 4063 l
-2514 4083 l
-2504 4103 l
-2495 4122 l
-2485 4142 l
-2475 4162 l
-2466 4181 l
-2456 4201 l
-2447 4221 l
-2438 4240 l
-2428 4260 l
-2419 4279 l
-2410 4299 l
-2400 4319 l
-2391 4338 l
-2382 4357 l
-2373 4377 l
-2364 4396 l
-2355 4416 l
-2347 4435 l
-2338 4454 l
-2329 4473 l
-2321 4493 l
-2312 4512 l
-2304 4531 l
-2295 4550 l
-2287 4569 l
-2278 4588 l
-2270 4607 l
-2262 4625 l
-2254 4644 l
-2246 4663 l
-2238 4681 l
-2230 4700 l
-2223 4718 l
-2215 4737 l
-2208 4755 l
-2200 4773 l
-2193 4792 l
-2185 4810 l
-2178 4828 l
-2171 4846 l
-2164 4863 l
-2157 4881 l
-2150 4899 l
-2144 4916 l
-2137 4934 l
-2130 4951 l
-2124 4969 l
-2118 4986 l
-2111 5003 l
-2105 5020 l
-2099 5037 l
-2093 5053 l
-2088 5070 l
-2082 5087 l
-2076 5103 l
-2071 5119 l
-2066 5136 l
-2061 5152 l
-2055 5168 l
-2051 5184 l
-2046 5200 l
-2041 5215 l
-2036 5231 l
-2032 5246 l
-2028 5261 l
-2024 5277 l
-2020 5292 l
-2016 5307 l
-2012 5321 l
-2009 5336 l
-2005 5351 l
-2002 5365 l
-1999 5379 l
-1996 5393 l
-1993 5408 l
-1991 5421 l
-1988 5435 l
-1986 5449 l
-1984 5462 l
-1982 5476 l
-1980 5489 l
-1979 5502 l
-1978 5515 l
-1977 5528 l
-1976 5541 l
-1975 5553 l
-1975 5566 l
-1975 5578 l
-1975 5590 l
-1975 5591 l
-1975 5592 l
-1975 5593 l
-1975 5594 l
-1975 5595 l
-1975 5596 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3108 3016 l
-3106 3017 l
-3104 3017 l
-3103 3017 l
-3101 3017 l
-3099 3017 l
-3098 3018 l
-3075 3021 l
-3052 3024 l
-3029 3028 l
-3006 3032 l
-2983 3036 l
-2960 3041 l
-2937 3046 l
-2914 3051 l
-2892 3057 l
-2869 3063 l
-2846 3069 l
-2824 3075 l
-2801 3082 l
-2779 3089 l
-2757 3096 l
-2735 3104 l
-2712 3112 l
-2690 3120 l
-2668 3128 l
-2646 3137 l
-2625 3146 l
-2603 3155 l
-2581 3164 l
-2560 3174 l
-2538 3184 l
-2517 3194 l
-2496 3205 l
-2475 3216 l
-2454 3227 l
-2433 3238 l
-2412 3249 l
-2392 3261 l
-2371 3273 l
-2351 3285 l
-2331 3297 l
-2311 3310 l
-2291 3323 l
-2271 3336 l
-2252 3349 l
-2232 3363 l
-2213 3377 l
-2194 3391 l
-2175 3405 l
-2156 3419 l
-2138 3434 l
-2119 3449 l
-2101 3464 l
-2083 3479 l
-2065 3495 l
-2047 3510 l
-2030 3526 l
-2012 3542 l
-1995 3559 l
-1978 3575 l
-1962 3592 l
-1945 3609 l
-1929 3626 l
-1913 3643 l
-1897 3660 l
-1881 3678 l
-1866 3695 l
-1851 3713 l
-1836 3731 l
-1821 3750 l
-1807 3768 l
-1793 3787 l
-1779 3806 l
-1765 3824 l
-1752 3844 l
-1738 3863 l
-1725 3882 l
-1713 3902 l
-1700 3922 l
-1688 3941 l
-1677 3962 l
-1665 3982 l
-1654 4002 l
-1643 4022 l
-1632 4043 l
-1622 4064 l
-1612 4085 l
-1602 4106 l
-1593 4127 l
-1584 4148 l
-1575 4170 l
-1566 4191 l
-1558 4213 l
-1551 4235 l
-1543 4257 l
-1536 4279 l
-1530 4301 l
-1523 4323 l
-1517 4345 l
-1512 4368 l
-1507 4391 l
-1502 4413 l
-1497 4436 l
-1493 4459 l
-1490 4482 l
-1487 4505 l
-1484 4528 l
-1481 4551 l
-1480 4575 l
-1478 4598 l
-1477 4622 l
-1477 4645 l
-1477 4669 l
-1477 4693 l
-1478 4717 l
-1479 4741 l
-1481 4764 l
-1483 4788 l
-1486 4812 l
-1490 4837 l
-1494 4861 l
-1498 4885 l
-1504 4909 l
-1509 4933 l
-1515 4958 l
-1522 4982 l
-1530 5006 l
-1538 5030 l
-1547 5055 l
-1556 5079 l
-1566 5103 l
-1577 5127 l
-1588 5152 l
-1601 5176 l
-1613 5200 l
-1627 5224 l
-1641 5248 l
-1657 5272 l
-1673 5295 l
-1689 5319 l
-1707 5343 l
-1725 5366 l
-1745 5389 l
-1765 5412 l
-1786 5435 l
-1808 5457 l
-1831 5480 l
-1855 5502 l
-1880 5523 l
-1906 5545 l
-1933 5566 l
-1960 5586 l
-1962 5588 l
-1965 5589 l
-1967 5591 l
-1969 5592 l
-1971 5594 l
-1973 5595 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3108 3015 l
-3106 3014 l
-3104 3014 l
-3103 3013 l
-3101 3012 l
-3100 3011 l
-3098 3010 l
-3076 2998 l
-3053 2987 l
-3030 2975 l
-3007 2965 l
-2984 2954 l
-2961 2944 l
-2938 2934 l
-2914 2925 l
-2890 2916 l
-2866 2907 l
-2842 2899 l
-2818 2891 l
-2794 2883 l
-2769 2876 l
-2745 2869 l
-2720 2863 l
-2695 2857 l
-2671 2852 l
-2646 2846 l
-2620 2842 l
-2595 2837 l
-2570 2833 l
-2545 2830 l
-2519 2827 l
-2494 2824 l
-2468 2822 l
-2443 2820 l
-2417 2819 l
-2392 2818 l
-2366 2817 l
-2340 2817 l
-2315 2818 l
-2289 2818 l
-2263 2820 l
-2237 2821 l
-2211 2824 l
-2186 2826 l
-2160 2829 l
-2134 2833 l
-2109 2837 l
-2083 2842 l
-2057 2847 l
-2032 2852 l
-2006 2858 l
-1981 2865 l
-1955 2872 l
-1930 2879 l
-1905 2887 l
-1880 2896 l
-1855 2905 l
-1830 2914 l
-1805 2925 l
-1780 2935 l
-1756 2946 l
-1732 2958 l
-1707 2970 l
-1683 2983 l
-1660 2996 l
-1636 3010 l
-1612 3024 l
-1589 3039 l
-1566 3054 l
-1543 3070 l
-1521 3087 l
-1499 3104 l
-1477 3122 l
-1455 3140 l
-1433 3159 l
-1412 3178 l
-1391 3198 l
-1371 3218 l
-1351 3239 l
-1331 3261 l
-1312 3283 l
-1293 3306 l
-1274 3329 l
-1256 3353 l
-1238 3378 l
-1221 3403 l
-1204 3429 l
-1188 3455 l
-1172 3482 l
-1156 3509 l
-1142 3537 l
-1128 3565 l
-1114 3594 l
-1101 3624 l
-1089 3654 l
-1077 3685 l
-1066 3716 l
-1055 3748 l
-1046 3780 l
-1037 3812 l
-1028 3846 l
-1021 3879 l
-1014 3914 l
-1008 3948 l
-1003 3983 l
-999 4019 l
-996 4055 l
-993 4091 l
-992 4128 l
-991 4165 l
-992 4202 l
-993 4239 l
-996 4277 l
-999 4315 l
-1003 4354 l
-1009 4392 l
-1015 4431 l
-1023 4470 l
-1032 4509 l
-1041 4548 l
-1052 4587 l
-1065 4625 l
-1078 4664 l
-1092 4703 l
-1108 4742 l
-1124 4780 l
-1142 4818 l
-1161 4856 l
-1181 4894 l
-1202 4931 l
-1225 4968 l
-1248 5004 l
-1273 5040 l
-1298 5075 l
-1325 5110 l
-1353 5144 l
-1382 5178 l
-1412 5210 l
-1442 5242 l
-1474 5273 l
-1507 5304 l
-1540 5333 l
-1575 5361 l
-1610 5389 l
-1646 5415 l
-1682 5441 l
-1719 5465 l
-1757 5488 l
-1796 5511 l
-1835 5532 l
-1874 5552 l
-1914 5571 l
-1955 5588 l
-1957 5589 l
-1960 5591 l
-1963 5592 l
-1966 5593 l
-1969 5594 l
-1972 5595 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3109 3015 l
-3108 3013 l
-3107 3012 l
-3107 3010 l
-3106 3009 l
-3106 3008 l
-3105 3006 l
-3096 2986 l
-3088 2966 l
-3079 2947 l
-3069 2927 l
-3060 2908 l
-3050 2889 l
-3040 2870 l
-3030 2851 l
-3019 2832 l
-3008 2814 l
-2997 2796 l
-2986 2778 l
-2975 2760 l
-2963 2742 l
-2951 2725 l
-2939 2707 l
-2926 2690 l
-2913 2674 l
-2900 2657 l
-2887 2641 l
-2873 2624 l
-2859 2609 l
-2845 2593 l
-2831 2578 l
-2816 2562 l
-2801 2548 l
-2786 2533 l
-2770 2519 l
-2754 2505 l
-2738 2491 l
-2721 2478 l
-2704 2464 l
-2687 2452 l
-2669 2439 l
-2651 2427 l
-2633 2415 l
-2615 2404 l
-2596 2393 l
-2576 2382 l
-2557 2372 l
-2537 2362 l
-2516 2353 l
-2495 2344 l
-2474 2335 l
-2452 2327 l
-2430 2319 l
-2408 2312 l
-2385 2306 l
-2361 2300 l
-2337 2294 l
-2313 2289 l
-2288 2285 l
-2263 2281 l
-2237 2278 l
-2211 2275 l
-2184 2274 l
-2157 2273 l
-2129 2272 l
-2101 2273 l
-2072 2274 l
-2042 2277 l
-2012 2280 l
-1981 2284 l
-1950 2289 l
-1918 2295 l
-1886 2302 l
-1853 2311 l
-1819 2320 l
-1785 2331 l
-1750 2343 l
-1714 2357 l
-1679 2372 l
-1642 2388 l
-1605 2407 l
-1567 2426 l
-1529 2448 l
-1491 2472 l
-1452 2497 l
-1413 2525 l
-1373 2555 l
-1334 2587 l
-1294 2621 l
-1254 2658 l
-1214 2697 l
-1175 2738 l
-1136 2783 l
-1097 2830 l
-1060 2879 l
-1023 2932 l
-987 2987 l
-952 3045 l
-919 3105 l
-888 3169 l
-859 3234 l
-831 3302 l
-829 3307 l
-828 3312 l
-826 3317 l
-824 3322 l
-822 3327 l
-820 3332 l
-819 3337 l
-817 3342 l
-815 3347 l
-813 3352 l
-811 3357 l
-810 3362 l
-808 3367 l
-806 3373 l
-805 3378 l
-803 3383 l
-801 3388 l
-800 3393 l
-798 3398 l
-796 3403 l
-795 3408 l
-793 3414 l
-792 3419 l
-790 3424 l
-789 3429 l
-787 3434 l
-786 3440 l
-784 3445 l
-783 3450 l
-781 3455 l
-780 3461 l
-778 3466 l
-777 3471 l
-775 3476 l
-774 3482 l
-773 3487 l
-771 3492 l
-770 3498 l
-768 3503 l
-767 3508 l
-766 3514 l
-764 3519 l
-763 3524 l
-762 3530 l
-761 3535 l
-759 3540 l
-758 3546 l
-757 3551 l
-756 3557 l
-755 3562 l
-753 3567 l
-752 3573 l
-751 3578 l
-750 3584 l
-749 3589 l
-748 3595 l
-747 3600 l
-746 3606 l
-745 3611 l
-744 3616 l
-743 3622 l
-742 3627 l
-741 3633 l
-740 3638 l
-739 3644 l
-738 3649 l
-737 3655 l
-736 3660 l
-735 3666 l
-734 3672 l
-733 3677 l
-733 3683 l
-732 3688 l
-731 3694 l
-730 3699 l
-729 3705 l
-729 3710 l
-728 3716 l
-727 3722 l
-727 3727 l
-726 3733 l
-725 3738 l
-725 3744 l
-724 3750 l
-723 3755 l
-723 3761 l
-722 3766 l
-722 3772 l
-721 3778 l
-720 3783 l
-720 3789 l
-719 3794 l
-719 3800 l
-719 3806 l
-718 3811 l
-S
-718 3811 m
-718 3817 l
-717 3823 l
-717 3828 l
-716 3834 l
-716 3839 l
-716 3845 l
-715 3851 l
-715 3856 l
-715 3862 l
-715 3868 l
-714 3873 l
-714 3879 l
-714 3885 l
-714 3890 l
-713 3896 l
-713 3902 l
-713 3907 l
-713 3913 l
-713 3918 l
-713 3924 l
-713 3930 l
-713 3935 l
-713 3941 l
-713 3947 l
-713 3952 l
-713 3958 l
-713 3964 l
-713 3969 l
-713 3975 l
-713 3981 l
-713 3986 l
-713 3992 l
-713 3997 l
-713 4003 l
-713 4009 l
-713 4014 l
-714 4020 l
-714 4026 l
-714 4031 l
-714 4037 l
-715 4042 l
-715 4048 l
-715 4054 l
-715 4059 l
-716 4065 l
-716 4071 l
-716 4076 l
-717 4082 l
-717 4087 l
-718 4093 l
-718 4099 l
-718 4104 l
-719 4110 l
-719 4115 l
-720 4121 l
-720 4126 l
-721 4132 l
-721 4137 l
-722 4143 l
-723 4149 l
-723 4154 l
-724 4160 l
-724 4165 l
-725 4171 l
-726 4176 l
-726 4182 l
-727 4187 l
-728 4193 l
-728 4198 l
-729 4204 l
-730 4209 l
-731 4215 l
-731 4220 l
-732 4226 l
-733 4231 l
-734 4237 l
-735 4242 l
-736 4248 l
-737 4253 l
-737 4258 l
-738 4264 l
-739 4269 l
-740 4275 l
-741 4280 l
-742 4285 l
-743 4291 l
-744 4296 l
-745 4302 l
-746 4307 l
-747 4312 l
-748 4318 l
-749 4323 l
-750 4328 l
-751 4334 l
-753 4339 l
-754 4344 l
-755 4350 l
-756 4355 l
-757 4360 l
-758 4365 l
-760 4371 l
-761 4376 l
-762 4381 l
-763 4386 l
-765 4392 l
-766 4397 l
-767 4402 l
-768 4407 l
-770 4412 l
-771 4418 l
-772 4423 l
-774 4428 l
-775 4433 l
-777 4438 l
-778 4443 l
-799 4514 l
-822 4583 l
-848 4649 l
-875 4713 l
-905 4774 l
-936 4833 l
-968 4889 l
-1001 4943 l
-1036 4994 l
-1071 5042 l
-1107 5088 l
-1143 5131 l
-1180 5171 l
-1217 5210 l
-1254 5245 l
-1291 5279 l
-1328 5310 l
-1365 5340 l
-1401 5367 l
-1438 5392 l
-1474 5416 l
-1510 5438 l
-1545 5458 l
-1580 5476 l
-1614 5493 l
-1648 5508 l
-1682 5522 l
-1715 5535 l
-1747 5546 l
-1779 5556 l
-1811 5565 l
-1842 5573 l
-1872 5580 l
-1902 5586 l
-1932 5591 l
-1961 5595 l
-1963 5595 l
-1965 5595 l
-1967 5596 l
-1969 5596 l
-1971 5596 l
-1973 5596 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3110 3015 l
-3111 3014 l
-3111 3013 l
-3112 3012 l
-3113 3010 l
-3114 3009 l
-3114 3008 l
-3125 2992 l
-3135 2976 l
-3146 2960 l
-3156 2945 l
-3166 2929 l
-3176 2914 l
-3187 2899 l
-3197 2884 l
-3207 2869 l
-3217 2854 l
-3228 2839 l
-3238 2825 l
-3248 2811 l
-3258 2796 l
-3268 2782 l
-3278 2769 l
-3288 2755 l
-3298 2741 l
-3308 2728 l
-3318 2715 l
-3328 2702 l
-3338 2689 l
-3348 2676 l
-3358 2664 l
-3368 2652 l
-3378 2639 l
-3388 2628 l
-3398 2616 l
-3408 2604 l
-3417 2593 l
-3427 2582 l
-3437 2571 l
-3447 2560 l
-3457 2550 l
-3466 2539 l
-3476 2529 l
-3486 2519 l
-3496 2510 l
-3506 2500 l
-3515 2491 l
-3525 2482 l
-3535 2473 l
-3545 2465 l
-3555 2457 l
-3565 2449 l
-3574 2441 l
-3584 2434 l
-3594 2427 l
-3604 2420 l
-3614 2413 l
-3625 2407 l
-3635 2401 l
-3645 2395 l
-3656 2390 l
-3666 2385 l
-3677 2380 l
-3687 2376 l
-3698 2372 l
-3709 2368 l
-3721 2365 l
-3732 2362 l
-3744 2360 l
-3755 2358 l
-3768 2357 l
-3780 2356 l
-3793 2356 l
-3806 2356 l
-3819 2357 l
-3833 2359 l
-3848 2361 l
-3863 2364 l
-3878 2368 l
-3895 2373 l
-3912 2379 l
-3930 2386 l
-3949 2395 l
-3969 2405 l
-3991 2416 l
-4014 2430 l
-4038 2446 l
-4065 2465 l
-4093 2486 l
-4125 2511 l
-4159 2541 l
-4196 2576 l
-4238 2618 l
-4283 2669 l
-4287 2673 l
-4290 2677 l
-4294 2681 l
-4297 2685 l
-4301 2689 l
-4304 2693 l
-4308 2698 l
-4312 2702 l
-4315 2706 l
-4319 2711 l
-4323 2716 l
-4326 2720 l
-4330 2725 l
-4334 2730 l
-4338 2734 l
-4342 2739 l
-4346 2744 l
-4349 2749 l
-4353 2755 l
-4357 2760 l
-4361 2765 l
-4365 2770 l
-4369 2776 l
-4373 2781 l
-4378 2787 l
-4382 2793 l
-4386 2798 l
-4390 2804 l
-4394 2810 l
-4399 2816 l
-4403 2822 l
-4407 2829 l
-4411 2835 l
-4416 2841 l
-4420 2848 l
-4425 2855 l
-4429 2861 l
-4434 2868 l
-4438 2875 l
-4443 2882 l
-4447 2889 l
-4452 2897 l
-4456 2904 l
-4461 2912 l
-4466 2919 l
-4470 2927 l
-4475 2935 l
-4480 2943 l
-4485 2951 l
-4489 2960 l
-4494 2968 l
-4499 2977 l
-4504 2986 l
-4509 2994 l
-4514 3003 l
-4519 3013 l
-4524 3022 l
-4529 3032 l
-4534 3041 l
-4539 3051 l
-4544 3061 l
-4549 3071 l
-4554 3082 l
-4559 3092 l
-4564 3103 l
-4569 3114 l
-4574 3125 l
-4579 3136 l
-4584 3148 l
-4589 3159 l
-4594 3171 l
-4599 3183 l
-4605 3196 l
-4610 3208 l
-4615 3221 l
-4620 3234 l
-4625 3247 l
-4630 3261 l
-4635 3274 l
-4640 3288 l
-4645 3302 l
-4649 3317 l
-4654 3331 l
-4659 3346 l
-4664 3362 l
-4669 3377 l
-4673 3393 l
-4678 3409 l
-4682 3425 l
-4687 3441 l
-4691 3458 l
-4695 3475 l
-4700 3493 l
-4704 3510 l
-4708 3528 l
-4712 3547 l
-4715 3565 l
-4719 3584 l
-4723 3603 l
-4726 3623 l
-4729 3643 l
-4732 3663 l
-4735 3683 l
-S
-4735 3683 m
-4738 3704 l
-4741 3725 l
-4743 3747 l
-4745 3768 l
-4747 3790 l
-4749 3813 l
-4751 3835 l
-4752 3858 l
-4753 3881 l
-4754 3905 l
-4754 3929 l
-4755 3953 l
-4755 3978 l
-4754 4002 l
-4754 4027 l
-4753 4053 l
-4751 4078 l
-4750 4104 l
-4748 4130 l
-4745 4157 l
-4743 4183 l
-4740 4210 l
-4736 4237 l
-4732 4264 l
-4728 4292 l
-4723 4319 l
-4718 4347 l
-4713 4375 l
-4707 4403 l
-4701 4431 l
-4694 4459 l
-4686 4488 l
-4679 4516 l
-4671 4545 l
-4662 4573 l
-4653 4602 l
-4643 4630 l
-4633 4659 l
-4623 4687 l
-4612 4716 l
-4600 4744 l
-4589 4772 l
-4576 4800 l
-4564 4828 l
-4550 4856 l
-4537 4883 l
-4523 4911 l
-4509 4938 l
-4494 4965 l
-4479 4992 l
-4463 5018 l
-4447 5044 l
-4431 5070 l
-4414 5095 l
-4397 5121 l
-4380 5146 l
-4363 5170 l
-4345 5194 l
-4327 5218 l
-4309 5241 l
-4290 5264 l
-4271 5287 l
-4252 5309 l
-4233 5331 l
-4214 5352 l
-4195 5373 l
-4175 5393 l
-4155 5413 l
-4136 5433 l
-4116 5452 l
-4096 5471 l
-4076 5489 l
-4056 5507 l
-4036 5524 l
-4016 5541 l
-3996 5558 l
-3976 5574 l
-3956 5589 l
-3936 5604 l
-3916 5619 l
-3896 5634 l
-3876 5648 l
-3856 5661 l
-3837 5674 l
-3817 5687 l
-3798 5700 l
-3778 5712 l
-3759 5723 l
-3740 5735 l
-3721 5746 l
-3702 5756 l
-3684 5767 l
-3665 5777 l
-3647 5786 l
-3629 5795 l
-3611 5804 l
-3593 5813 l
-3575 5822 l
-3558 5830 l
-3540 5838 l
-3523 5845 l
-3506 5852 l
-3489 5859 l
-3473 5866 l
-3456 5873 l
-3440 5879 l
-3424 5885 l
-3408 5891 l
-3392 5897 l
-3377 5902 l
-3362 5907 l
-3346 5912 l
-3331 5917 l
-3317 5922 l
-3302 5926 l
-3288 5931 l
-3273 5935 l
-3259 5939 l
-3246 5943 l
-3232 5946 l
-3218 5950 l
-3205 5953 l
-3192 5956 l
-3179 5960 l
-3166 5963 l
-3153 5965 l
-3141 5968 l
-3128 5971 l
-3116 5973 l
-3104 5976 l
-3092 5978 l
-3081 5980 l
-3069 5982 l
-3058 5984 l
-3046 5986 l
-3035 5988 l
-3024 5989 l
-3014 5991 l
-3003 5993 l
-2992 5994 l
-2982 5995 l
-2972 5997 l
-2962 5998 l
-2952 5999 l
-2942 6000 l
-2932 6001 l
-2923 6002 l
-2913 6003 l
-2904 6004 l
-2895 6005 l
-2885 6006 l
-2876 6006 l
-2868 6007 l
-2859 6008 l
-2850 6008 l
-2842 6009 l
-2833 6009 l
-2825 6009 l
-2817 6010 l
-2809 6010 l
-2801 6010 l
-2793 6011 l
-2785 6011 l
-2777 6011 l
-2770 6011 l
-2762 6011 l
-2755 6011 l
-2747 6012 l
-2740 6012 l
-2733 6012 l
-2726 6012 l
-2719 6011 l
-2712 6011 l
-2705 6011 l
-2699 6011 l
-2692 6011 l
-2685 6011 l
-2679 6011 l
-2673 6010 l
-2666 6010 l
-2660 6010 l
-2654 6010 l
-2648 6009 l
-2642 6009 l
-2636 6009 l
-2630 6008 l
-2624 6008 l
-2618 6008 l
-2613 6007 l
-2607 6007 l
-2601 6006 l
-2596 6006 l
-2590 6006 l
-2585 6005 l
-2580 6005 l
-2575 6004 l
-2569 6004 l
-2564 6003 l
-2559 6003 l
-S
-2559 6003 m
-2554 6002 l
-2549 6002 l
-2544 6001 l
-2539 6001 l
-2535 6000 l
-2530 5999 l
-2468 5991 l
-2415 5981 l
-2369 5971 l
-2328 5960 l
-2292 5950 l
-2260 5939 l
-2232 5928 l
-2206 5918 l
-2184 5907 l
-2163 5896 l
-2144 5886 l
-2127 5875 l
-2112 5865 l
-2098 5855 l
-2085 5844 l
-2073 5834 l
-2063 5823 l
-2053 5813 l
-2044 5803 l
-2036 5792 l
-2028 5782 l
-2021 5771 l
-2015 5761 l
-2010 5750 l
-2004 5739 l
-2000 5728 l
-1996 5717 l
-1992 5706 l
-1989 5695 l
-1986 5684 l
-1983 5673 l
-1981 5661 l
-1979 5650 l
-1978 5638 l
-1977 5626 l
-1976 5615 l
-1975 5603 l
-1975 5602 l
-1975 5601 l
-1975 5600 l
-1975 5599 l
-1975 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3111 3016 l
-3113 3016 l
-3114 3016 l
-3116 3015 l
-3117 3015 l
-3119 3015 l
-3121 3015 l
-3144 3012 l
-3167 3010 l
-3190 3009 l
-3213 3007 l
-3236 3006 l
-3260 3005 l
-3283 3005 l
-3306 3005 l
-3329 3005 l
-3352 3006 l
-3375 3007 l
-3398 3008 l
-3421 3010 l
-3444 3012 l
-3467 3014 l
-3490 3017 l
-3513 3021 l
-3536 3024 l
-3559 3028 l
-3582 3033 l
-3604 3038 l
-3627 3043 l
-3650 3049 l
-3672 3055 l
-3695 3061 l
-3717 3068 l
-3739 3076 l
-3761 3084 l
-3784 3092 l
-3806 3101 l
-3827 3110 l
-3849 3120 l
-3871 3130 l
-3892 3141 l
-3913 3152 l
-3935 3163 l
-3956 3176 l
-3977 3188 l
-3997 3201 l
-4018 3215 l
-4038 3229 l
-4058 3244 l
-4078 3260 l
-4098 3276 l
-4117 3292 l
-4136 3309 l
-4155 3327 l
-4174 3345 l
-4193 3364 l
-4211 3384 l
-4228 3404 l
-4246 3425 l
-4263 3446 l
-4280 3469 l
-4296 3491 l
-4312 3515 l
-4328 3539 l
-4343 3564 l
-4358 3590 l
-4372 3616 l
-4386 3643 l
-4399 3671 l
-4412 3700 l
-4424 3729 l
-4435 3759 l
-4446 3790 l
-4456 3822 l
-4466 3855 l
-4475 3888 l
-4482 3922 l
-4490 3957 l
-4496 3993 l
-4501 4030 l
-4506 4067 l
-4509 4106 l
-4511 4145 l
-4513 4185 l
-4513 4225 l
-4512 4267 l
-4509 4309 l
-4506 4352 l
-4501 4395 l
-4494 4439 l
-4486 4484 l
-4477 4530 l
-4466 4575 l
-4454 4622 l
-4439 4669 l
-4423 4716 l
-4406 4763 l
-4386 4811 l
-4365 4858 l
-4342 4906 l
-4317 4954 l
-4290 5001 l
-4261 5048 l
-4230 5095 l
-4197 5141 l
-4162 5187 l
-4126 5232 l
-4087 5276 l
-4047 5319 l
-4005 5361 l
-3962 5402 l
-3917 5441 l
-3870 5479 l
-3822 5515 l
-3773 5550 l
-3722 5583 l
-3670 5614 l
-3618 5644 l
-3565 5671 l
-3511 5697 l
-3456 5720 l
-3401 5742 l
-3346 5761 l
-3291 5779 l
-3235 5794 l
-3180 5808 l
-3125 5819 l
-3070 5829 l
-3016 5836 l
-2962 5842 l
-2909 5846 l
-2856 5848 l
-2804 5849 l
-2753 5848 l
-2703 5845 l
-2654 5841 l
-2606 5835 l
-2559 5828 l
-2513 5820 l
-2468 5811 l
-2425 5800 l
-2382 5789 l
-2341 5776 l
-2300 5762 l
-2261 5748 l
-2223 5733 l
-2187 5717 l
-2151 5700 l
-2116 5682 l
-2083 5664 l
-2051 5646 l
-2020 5626 l
-1989 5607 l
-1987 5605 l
-1985 5604 l
-1983 5602 l
-1981 5601 l
-1979 5599 l
-1977 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3586 3410 m
-3585 3411 l
-3584 3412 l
-3583 3413 l
-3571 3424 l
-3559 3435 l
-3547 3445 l
-3533 3455 l
-3520 3464 l
-3506 3473 l
-3491 3481 l
-3477 3489 l
-3462 3496 l
-3446 3502 l
-3430 3509 l
-3414 3514 l
-3398 3519 l
-3381 3524 l
-3364 3528 l
-3347 3531 l
-3330 3534 l
-3312 3537 l
-3294 3539 l
-3276 3541 l
-3258 3542 l
-3240 3542 l
-3222 3542 l
-3204 3542 l
-3185 3541 l
-3167 3539 l
-3148 3537 l
-3129 3535 l
-3111 3532 l
-3092 3529 l
-3074 3525 l
-3055 3521 l
-3037 3516 l
-3018 3511 l
-3000 3506 l
-2982 3500 l
-2963 3494 l
-2945 3487 l
-2927 3480 l
-2910 3472 l
-2892 3464 l
-2875 3456 l
-2858 3447 l
-2841 3438 l
-2824 3429 l
-2808 3419 l
-2791 3409 l
-2775 3398 l
-2760 3388 l
-2744 3377 l
-2729 3365 l
-2715 3353 l
-2700 3341 l
-2686 3329 l
-2673 3316 l
-2660 3303 l
-2647 3290 l
-2634 3277 l
-2622 3263 l
-2611 3249 l
-2600 3235 l
-2589 3220 l
-2579 3206 l
-2570 3191 l
-2561 3176 l
-2552 3161 l
-2544 3145 l
-2537 3130 l
-2530 3114 l
-2524 3098 l
-2518 3082 l
-2513 3066 l
-2509 3050 l
-2505 3034 l
-2502 3018 l
-2500 3002 l
-2498 2985 l
-2497 2969 l
-2496 2953 l
-2497 2937 l
-2498 2920 l
-2500 2904 l
-2502 2888 l
-2506 2872 l
-2510 2856 l
-2514 2841 l
-2520 2825 l
-2526 2810 l
-2534 2795 l
-2542 2780 l
-2550 2765 l
-2560 2751 l
-2570 2737 l
-2581 2723 l
-2593 2709 l
-2606 2697 l
-2620 2684 l
-2634 2672 l
-2649 2660 l
-2665 2649 l
-2681 2638 l
-2699 2628 l
-2717 2619 l
-2735 2610 l
-2755 2602 l
-2774 2594 l
-2795 2587 l
-2816 2581 l
-2838 2576 l
-2860 2571 l
-2883 2567 l
-2906 2564 l
-2930 2562 l
-2954 2561 l
-2978 2560 l
-3003 2561 l
-3028 2562 l
-3053 2564 l
-3078 2567 l
-3103 2571 l
-3128 2576 l
-3154 2581 l
-3179 2588 l
-3204 2596 l
-3229 2604 l
-3253 2613 l
-3277 2623 l
-3301 2634 l
-3325 2646 l
-3348 2658 l
-3371 2671 l
-3393 2685 l
-3414 2700 l
-3435 2715 l
-3455 2730 l
-3475 2747 l
-3493 2764 l
-3511 2781 l
-3529 2799 l
-3545 2817 l
-3560 2835 l
-3575 2854 l
-3589 2873 l
-3602 2893 l
-3614 2912 l
-3625 2932 l
-3635 2951 l
-3644 2971 l
-3652 2991 l
-3659 3011 l
-3666 3031 l
-3671 3050 l
-3676 3070 l
-3679 3089 l
-3682 3109 l
-3684 3128 l
-3685 3146 l
-3685 3165 l
-3684 3183 l
-3683 3201 l
-3681 3219 l
-3677 3236 l
-3674 3253 l
-3669 3269 l
-3664 3285 l
-3657 3301 l
-3651 3316 l
-3643 3331 l
-3635 3346 l
-3626 3359 l
-3617 3373 l
-3607 3386 l
-3597 3398 l
-3586 3410 l
-S
-3881 3956 m
-3879 3957 l
-3877 3958 l
-3875 3960 l
-3851 3975 l
-3826 3989 l
-3800 4003 l
-3774 4016 l
-3748 4027 l
-3721 4038 l
-3693 4048 l
-3665 4057 l
-3637 4065 l
-3609 4073 l
-3580 4079 l
-3551 4085 l
-3521 4090 l
-3492 4094 l
-3462 4097 l
-3432 4100 l
-3402 4102 l
-3371 4103 l
-3341 4104 l
-3310 4103 l
-3279 4102 l
-3248 4101 l
-3217 4098 l
-3186 4095 l
-3155 4091 l
-3124 4087 l
-3093 4082 l
-3061 4076 l
-3030 4070 l
-2999 4063 l
-2968 4056 l
-2937 4047 l
-2907 4039 l
-2876 4029 l
-2845 4019 l
-2815 4009 l
-2785 3998 l
-2755 3986 l
-2725 3974 l
-2695 3962 l
-2666 3948 l
-2637 3935 l
-2608 3920 l
-2579 3906 l
-2551 3890 l
-2523 3875 l
-2495 3858 l
-2468 3842 l
-2441 3824 l
-2415 3807 l
-2389 3789 l
-2363 3770 l
-2338 3751 l
-2313 3731 l
-2288 3711 l
-2265 3691 l
-2241 3670 l
-2219 3649 l
-2196 3627 l
-2175 3605 l
-2154 3583 l
-2133 3560 l
-2113 3537 l
-2094 3514 l
-2076 3490 l
-2058 3465 l
-2041 3441 l
-2025 3416 l
-2009 3390 l
-1994 3365 l
-1981 3339 l
-1967 3313 l
-1955 3286 l
-1944 3259 l
-1934 3232 l
-1924 3205 l
-1916 3177 l
-1908 3149 l
-1902 3121 l
-1897 3092 l
-1892 3064 l
-1889 3035 l
-1888 3006 l
-1887 2977 l
-1888 2947 l
-1889 2918 l
-1893 2888 l
-1897 2859 l
-1903 2829 l
-1911 2799 l
-1920 2770 l
-1930 2740 l
-1943 2710 l
-1956 2681 l
-1972 2652 l
-1989 2623 l
-2008 2594 l
-2029 2565 l
-2051 2537 l
-2076 2510 l
-2102 2483 l
-2131 2456 l
-2161 2430 l
-2194 2405 l
-2228 2381 l
-2265 2358 l
-2304 2336 l
-2345 2316 l
-2388 2296 l
-2432 2278 l
-2479 2262 l
-2528 2248 l
-2579 2235 l
-2632 2225 l
-2686 2216 l
-2742 2210 l
-2799 2206 l
-2857 2205 l
-2917 2207 l
-2977 2211 l
-3038 2218 l
-3100 2228 l
-3161 2241 l
-3223 2256 l
-3284 2275 l
-3344 2296 l
-3404 2320 l
-3463 2347 l
-3520 2376 l
-3575 2408 l
-3629 2442 l
-3681 2478 l
-3730 2516 l
-3777 2556 l
-3822 2597 l
-3864 2640 l
-3904 2683 l
-3941 2728 l
-3975 2773 l
-4006 2818 l
-4035 2864 l
-4061 2910 l
-4084 2956 l
-4104 3002 l
-4122 3047 l
-4138 3092 l
-4151 3136 l
-4162 3180 l
-4170 3223 l
-4177 3265 l
-4181 3306 l
-4183 3346 l
-4183 3385 l
-4182 3423 l
-4179 3460 l
-4174 3496 l
-4167 3531 l
-4160 3565 l
-4150 3598 l
-4139 3629 l
-4127 3660 l
-4114 3689 l
-4100 3717 l
-4084 3744 l
-4068 3770 l
-4050 3795 l
-4032 3819 l
-4013 3842 l
-3993 3863 l
-3972 3884 l
-3950 3903 l
-3928 3922 l
-3904 3939 l
-3881 3956 l
-S
-3924 4591 m
-3922 4592 l
-3920 4593 l
-3917 4593 l
-3884 4604 l
-3851 4614 l
-3817 4623 l
-3783 4631 l
-3749 4638 l
-3715 4645 l
-3680 4650 l
-3645 4655 l
-3609 4659 l
-3574 4662 l
-3538 4664 l
-3502 4666 l
-3466 4667 l
-3430 4667 l
-3394 4666 l
-3358 4665 l
-3321 4663 l
-3284 4661 l
-3248 4657 l
-3211 4653 l
-3174 4649 l
-3137 4643 l
-3100 4638 l
-3063 4631 l
-3026 4624 l
-2989 4616 l
-2952 4608 l
-2916 4599 l
-2879 4590 l
-2842 4580 l
-2805 4569 l
-2769 4558 l
-2732 4547 l
-2696 4534 l
-2659 4522 l
-2623 4509 l
-2587 4495 l
-2552 4481 l
-2516 4466 l
-2481 4451 l
-2445 4435 l
-2411 4419 l
-2376 4402 l
-2341 4385 l
-2307 4367 l
-2273 4349 l
-2240 4331 l
-2206 4312 l
-2174 4292 l
-2141 4272 l
-2109 4252 l
-2077 4231 l
-2045 4210 l
-2014 4188 l
-1984 4166 l
-1953 4144 l
-1924 4121 l
-1894 4098 l
-1865 4074 l
-1837 4050 l
-1809 4026 l
-1782 4001 l
-1755 3976 l
-1729 3950 l
-1703 3925 l
-1678 3898 l
-1654 3871 l
-1630 3844 l
-1607 3817 l
-1584 3789 l
-1563 3761 l
-1542 3732 l
-1521 3703 l
-1502 3674 l
-1483 3644 l
-1465 3614 l
-1448 3584 l
-1432 3553 l
-1417 3522 l
-1402 3490 l
-1389 3458 l
-1376 3426 l
-1365 3393 l
-1354 3360 l
-1345 3326 l
-1337 3292 l
-1330 3257 l
-1325 3222 l
-1320 3187 l
-1317 3151 l
-1316 3114 l
-1316 3078 l
-1317 3040 l
-1321 3002 l
-1326 2964 l
-1332 2925 l
-1341 2886 l
-1352 2845 l
-1365 2805 l
-1381 2764 l
-1399 2722 l
-1419 2680 l
-1443 2637 l
-1469 2594 l
-1499 2551 l
-1533 2507 l
-1570 2462 l
-1573 2459 l
-1576 2456 l
-1579 2453 l
-1582 2450 l
-1585 2447 l
-1588 2443 l
-1590 2440 l
-1593 2437 l
-1596 2434 l
-1599 2431 l
-1603 2427 l
-1606 2424 l
-1609 2421 l
-1612 2418 l
-1615 2415 l
-1618 2412 l
-1621 2408 l
-1624 2405 l
-1628 2402 l
-1631 2399 l
-1634 2396 l
-1638 2393 l
-1641 2389 l
-1644 2386 l
-1648 2383 l
-1651 2380 l
-1654 2377 l
-1658 2374 l
-1661 2370 l
-1665 2367 l
-1668 2364 l
-1672 2361 l
-1675 2358 l
-1679 2355 l
-1683 2351 l
-1686 2348 l
-1690 2345 l
-1694 2342 l
-1697 2339 l
-1701 2336 l
-1705 2332 l
-1709 2329 l
-1712 2326 l
-1716 2323 l
-1720 2320 l
-1724 2317 l
-1728 2314 l
-1732 2310 l
-1736 2307 l
-1740 2304 l
-1744 2301 l
-1748 2298 l
-1752 2295 l
-1756 2292 l
-1760 2289 l
-1765 2286 l
-1769 2282 l
-1773 2279 l
-1777 2276 l
-1782 2273 l
-1786 2270 l
-1790 2267 l
-1795 2264 l
-1799 2261 l
-1803 2258 l
-1808 2255 l
-1812 2252 l
-1817 2249 l
-1822 2245 l
-1826 2242 l
-1831 2239 l
-1835 2236 l
-1840 2233 l
-1845 2230 l
-1849 2227 l
-1854 2224 l
-1859 2221 l
-1864 2218 l
-1869 2215 l
-1874 2212 l
-1879 2209 l
-1883 2206 l
-1888 2203 l
-1893 2200 l
-1899 2198 l
-1904 2195 l
-1909 2192 l
-1914 2189 l
-1919 2186 l
-S
-1919 2186 m
-1924 2183 l
-1930 2180 l
-1935 2177 l
-1940 2174 l
-1945 2171 l
-1951 2169 l
-1956 2166 l
-1962 2163 l
-1967 2160 l
-1973 2157 l
-1978 2154 l
-1984 2152 l
-1989 2149 l
-1995 2146 l
-2001 2143 l
-2006 2141 l
-2012 2138 l
-2018 2135 l
-2024 2132 l
-2030 2130 l
-2036 2127 l
-2041 2124 l
-2047 2122 l
-2053 2119 l
-2059 2116 l
-2065 2114 l
-2072 2111 l
-2078 2109 l
-2084 2106 l
-2090 2103 l
-2096 2101 l
-2103 2098 l
-2109 2096 l
-2115 2093 l
-2122 2091 l
-2128 2088 l
-2135 2086 l
-2141 2084 l
-2148 2081 l
-2154 2079 l
-2161 2076 l
-2167 2074 l
-2174 2072 l
-2181 2069 l
-2187 2067 l
-2194 2065 l
-2201 2063 l
-2208 2060 l
-2215 2058 l
-2222 2056 l
-2229 2054 l
-2236 2052 l
-2243 2050 l
-2250 2048 l
-2257 2045 l
-2264 2043 l
-2271 2041 l
-2279 2039 l
-2286 2037 l
-2293 2035 l
-2300 2034 l
-2308 2032 l
-2315 2030 l
-2323 2028 l
-2330 2026 l
-2338 2024 l
-2345 2022 l
-2353 2021 l
-2360 2019 l
-2368 2017 l
-2376 2016 l
-2383 2014 l
-2391 2012 l
-2399 2011 l
-2407 2009 l
-2415 2008 l
-2423 2006 l
-2431 2005 l
-2439 2004 l
-2447 2002 l
-2455 2001 l
-2463 1999 l
-2471 1998 l
-2479 1997 l
-2487 1996 l
-2495 1995 l
-2504 1993 l
-2512 1992 l
-2520 1991 l
-2529 1990 l
-2537 1989 l
-2545 1988 l
-2554 1987 l
-2562 1986 l
-2571 1986 l
-2579 1985 l
-2588 1984 l
-2597 1983 l
-2605 1983 l
-2614 1982 l
-2623 1981 l
-2631 1981 l
-2640 1980 l
-2649 1980 l
-2658 1979 l
-2667 1979 l
-2676 1978 l
-2684 1978 l
-2693 1978 l
-2702 1978 l
-2711 1977 l
-2720 1977 l
-2729 1977 l
-2739 1977 l
-2748 1977 l
-2757 1977 l
-2766 1977 l
-2775 1977 l
-2784 1977 l
-2794 1978 l
-2803 1978 l
-2812 1978 l
-2821 1979 l
-2831 1979 l
-2840 1979 l
-2849 1980 l
-2859 1980 l
-2868 1981 l
-2878 1982 l
-2887 1982 l
-2896 1983 l
-2906 1984 l
-2915 1985 l
-2925 1986 l
-2935 1987 l
-2944 1988 l
-2954 1989 l
-2963 1990 l
-2973 1991 l
-2982 1992 l
-2992 1993 l
-3002 1995 l
-3011 1996 l
-3021 1998 l
-3031 1999 l
-3040 2001 l
-3050 2002 l
-3060 2004 l
-3069 2006 l
-3079 2007 l
-3089 2009 l
-3098 2011 l
-3108 2013 l
-3118 2015 l
-3128 2017 l
-3137 2019 l
-3147 2021 l
-3157 2023 l
-3167 2026 l
-3176 2028 l
-3186 2030 l
-3196 2033 l
-3206 2035 l
-3215 2038 l
-3225 2040 l
-3235 2043 l
-3245 2045 l
-3254 2048 l
-3264 2051 l
-3274 2054 l
-3284 2057 l
-3293 2060 l
-3303 2063 l
-3313 2066 l
-3322 2069 l
-3332 2072 l
-3342 2075 l
-3351 2079 l
-3361 2082 l
-3371 2085 l
-3380 2089 l
-3390 2092 l
-3399 2096 l
-3409 2100 l
-3419 2103 l
-3428 2107 l
-3438 2111 l
-3447 2115 l
-3457 2118 l
-3466 2122 l
-3476 2126 l
-3485 2130 l
-3494 2135 l
-3504 2139 l
-3513 2143 l
-3522 2147 l
-3532 2151 l
-3541 2156 l
-3550 2160 l
-S
-3550 2160 m
-3559 2165 l
-3569 2169 l
-3578 2174 l
-3587 2178 l
-3596 2183 l
-3605 2187 l
-3614 2192 l
-3623 2197 l
-3632 2202 l
-3641 2207 l
-3650 2212 l
-3659 2217 l
-3668 2222 l
-3677 2227 l
-3686 2232 l
-3694 2237 l
-3703 2242 l
-3712 2247 l
-3720 2252 l
-3729 2258 l
-3738 2263 l
-3746 2268 l
-3755 2274 l
-3763 2279 l
-3772 2285 l
-3780 2290 l
-3788 2296 l
-3797 2302 l
-3805 2307 l
-3813 2313 l
-3821 2319 l
-3829 2324 l
-3838 2330 l
-3846 2336 l
-3854 2342 l
-3862 2348 l
-3869 2354 l
-3877 2360 l
-3885 2366 l
-3893 2372 l
-3901 2378 l
-3908 2384 l
-3916 2390 l
-3924 2396 l
-3931 2402 l
-3939 2408 l
-3946 2415 l
-3954 2421 l
-3961 2427 l
-3968 2433 l
-3976 2440 l
-3983 2446 l
-3990 2452 l
-3997 2459 l
-4004 2465 l
-4011 2472 l
-4018 2478 l
-4025 2485 l
-4032 2491 l
-4039 2498 l
-4045 2504 l
-4052 2511 l
-4059 2517 l
-4065 2524 l
-4072 2530 l
-4079 2537 l
-4085 2544 l
-4091 2550 l
-4098 2557 l
-4104 2564 l
-4110 2570 l
-4117 2577 l
-4123 2584 l
-4129 2590 l
-4135 2597 l
-4141 2604 l
-4147 2611 l
-4153 2617 l
-4159 2624 l
-4165 2631 l
-4170 2638 l
-4176 2645 l
-4182 2651 l
-4187 2658 l
-4193 2665 l
-4198 2672 l
-4204 2679 l
-4209 2686 l
-4215 2692 l
-4220 2699 l
-4225 2706 l
-4230 2713 l
-4235 2720 l
-4241 2727 l
-4246 2734 l
-4251 2740 l
-4256 2747 l
-4260 2754 l
-4265 2761 l
-4270 2768 l
-4275 2775 l
-4280 2782 l
-4284 2788 l
-4289 2795 l
-4293 2802 l
-4298 2809 l
-4302 2816 l
-4307 2823 l
-4311 2829 l
-4316 2836 l
-4320 2843 l
-4324 2850 l
-4328 2857 l
-4332 2864 l
-4337 2870 l
-4341 2877 l
-4345 2884 l
-4349 2891 l
-4352 2898 l
-4356 2904 l
-4360 2911 l
-4364 2918 l
-4368 2925 l
-4371 2931 l
-4375 2938 l
-4379 2945 l
-4382 2952 l
-4386 2958 l
-4389 2965 l
-4393 2972 l
-4396 2978 l
-4399 2985 l
-4403 2992 l
-4406 2998 l
-4409 3005 l
-4412 3011 l
-4415 3018 l
-4418 3025 l
-4421 3031 l
-4425 3038 l
-4427 3044 l
-4430 3051 l
-4433 3057 l
-4436 3064 l
-4439 3070 l
-4442 3077 l
-4444 3083 l
-4447 3090 l
-4450 3096 l
-4452 3103 l
-4455 3109 l
-4458 3115 l
-4460 3122 l
-4463 3128 l
-4465 3135 l
-4467 3141 l
-4470 3147 l
-4472 3154 l
-4474 3160 l
-4477 3166 l
-4479 3172 l
-4481 3179 l
-4483 3185 l
-4485 3191 l
-4487 3197 l
-4489 3203 l
-4491 3210 l
-4493 3216 l
-4495 3222 l
-4497 3228 l
-4499 3234 l
-4501 3240 l
-4503 3246 l
-4505 3252 l
-4506 3258 l
-4508 3264 l
-4510 3270 l
-4512 3276 l
-4513 3282 l
-4515 3288 l
-4516 3294 l
-4518 3300 l
-4519 3306 l
-4521 3312 l
-4522 3318 l
-4524 3323 l
-4525 3329 l
-4527 3335 l
-4528 3341 l
-4529 3347 l
-4530 3352 l
-4532 3358 l
-4533 3364 l
-4534 3369 l
-4535 3375 l
-4536 3381 l
-4538 3386 l
-4539 3392 l
-4540 3397 l
-S
-4540 3397 m
-4541 3403 l
-4542 3409 l
-4543 3414 l
-4544 3420 l
-4545 3425 l
-4546 3431 l
-4546 3436 l
-4547 3442 l
-4548 3447 l
-4549 3452 l
-4550 3458 l
-4551 3463 l
-4551 3469 l
-4552 3474 l
-4553 3479 l
-4553 3484 l
-4554 3490 l
-4555 3495 l
-4555 3500 l
-4556 3505 l
-4556 3511 l
-4557 3516 l
-4558 3521 l
-4558 3526 l
-4559 3531 l
-4559 3536 l
-4559 3542 l
-4560 3547 l
-4560 3552 l
-4561 3557 l
-4561 3562 l
-4561 3567 l
-4562 3572 l
-4562 3577 l
-4562 3582 l
-4562 3587 l
-4563 3592 l
-4563 3596 l
-4563 3601 l
-4563 3606 l
-4563 3611 l
-4564 3616 l
-4564 3621 l
-4564 3625 l
-4564 3630 l
-4564 3635 l
-4564 3640 l
-4564 3644 l
-4564 3649 l
-4564 3654 l
-4564 3658 l
-4564 3663 l
-4564 3668 l
-4564 3672 l
-4564 3677 l
-4564 3682 l
-4564 3686 l
-4563 3691 l
-4563 3695 l
-4560 3757 l
-4553 3815 l
-4544 3871 l
-4533 3923 l
-4520 3973 l
-4505 4020 l
-4488 4064 l
-4470 4106 l
-4451 4146 l
-4430 4184 l
-4408 4220 l
-4385 4254 l
-4361 4285 l
-4337 4316 l
-4311 4344 l
-4285 4371 l
-4258 4396 l
-4230 4420 l
-4202 4443 l
-4173 4464 l
-4144 4484 l
-4114 4503 l
-4083 4520 l
-4053 4536 l
-4021 4552 l
-3989 4566 l
-3957 4579 l
-3925 4591 l
-S
-3638 5218 m
-3636 5218 l
-3634 5218 l
-3632 5218 l
-3601 5218 l
-3570 5217 l
-3539 5216 l
-3507 5215 l
-3476 5213 l
-3443 5211 l
-3411 5208 l
-3379 5205 l
-3346 5202 l
-3313 5198 l
-3280 5194 l
-3246 5189 l
-3213 5184 l
-3179 5179 l
-3145 5173 l
-3111 5167 l
-3077 5160 l
-3043 5153 l
-3008 5146 l
-2974 5138 l
-2939 5130 l
-2905 5121 l
-2870 5112 l
-2835 5103 l
-2800 5093 l
-2766 5083 l
-2731 5073 l
-2696 5062 l
-2661 5051 l
-2626 5040 l
-2591 5028 l
-2556 5016 l
-2522 5003 l
-2487 4990 l
-2452 4977 l
-2418 4963 l
-2383 4950 l
-2349 4935 l
-2314 4921 l
-2280 4906 l
-2246 4891 l
-2212 4876 l
-2179 4860 l
-2145 4844 l
-2112 4828 l
-2079 4811 l
-2046 4794 l
-2013 4777 l
-1980 4760 l
-1948 4742 l
-1916 4724 l
-1884 4706 l
-1853 4687 l
-1821 4669 l
-1790 4650 l
-1760 4631 l
-1729 4611 l
-1699 4592 l
-1669 4572 l
-1640 4552 l
-1611 4532 l
-1582 4512 l
-1554 4491 l
-1526 4471 l
-1498 4450 l
-1471 4429 l
-1444 4408 l
-1418 4386 l
-1392 4365 l
-1366 4343 l
-1341 4322 l
-1316 4300 l
-1292 4278 l
-1268 4256 l
-1245 4234 l
-1222 4211 l
-1200 4189 l
-1178 4167 l
-1156 4144 l
-1136 4122 l
-1115 4099 l
-1095 4077 l
-1076 4054 l
-1057 4031 l
-1039 4009 l
-1021 3986 l
-1004 3963 l
-987 3940 l
-971 3918 l
-956 3895 l
-941 3872 l
-926 3850 l
-912 3827 l
-899 3804 l
-886 3782 l
-874 3759 l
-863 3737 l
-852 3714 l
-842 3692 l
-832 3670 l
-823 3648 l
-814 3626 l
-807 3604 l
-799 3582 l
-793 3560 l
-787 3539 l
-781 3517 l
-777 3496 l
-773 3475 l
-769 3454 l
-766 3433 l
-764 3412 l
-763 3391 l
-762 3371 l
-761 3350 l
-762 3330 l
-763 3310 l
-765 3290 l
-767 3270 l
-770 3250 l
-774 3230 l
-779 3210 l
-785 3189 l
-792 3167 l
-802 3140 l
-802 3138 l
-803 3136 l
-804 3134 l
-805 3131 l
-806 3129 l
-807 3126 l
-808 3124 l
-810 3121 l
-811 3118 l
-812 3115 l
-814 3112 l
-815 3108 l
-817 3105 l
-819 3100 l
-820 3096 l
-823 3091 l
-825 3086 l
-828 3080 l
-831 3073 l
-835 3065 l
-840 3055 l
-845 3044 l
-852 3030 l
-862 3011 l
-875 2987 l
-894 2951 l
-896 2948 l
-898 2945 l
-899 2942 l
-901 2938 l
-903 2935 l
-906 2931 l
-908 2927 l
-910 2923 l
-912 2919 l
-915 2915 l
-918 2910 l
-920 2906 l
-923 2901 l
-926 2896 l
-929 2891 l
-933 2885 l
-936 2880 l
-940 2874 l
-944 2868 l
-948 2861 l
-952 2854 l
-956 2847 l
-961 2840 l
-966 2832 l
-972 2823 l
-978 2815 l
-984 2806 l
-990 2796 l
-998 2785 l
-1005 2774 l
-1013 2763 l
-1022 2750 l
-1032 2737 l
-1042 2723 l
-1054 2708 l
-1066 2692 l
-1080 2674 l
-1095 2655 l
-1112 2635 l
-1131 2613 l
-1152 2589 l
-1175 2563 l
-1202 2535 l
-1232 2504 l
-1267 2470 l
-S
-1267 2470 m
-1307 2432 l
-1353 2391 l
-1408 2346 l
-1412 2343 l
-1417 2339 l
-1421 2336 l
-1425 2332 l
-1430 2329 l
-1434 2326 l
-1439 2322 l
-1444 2318 l
-1448 2315 l
-1453 2311 l
-1458 2308 l
-1463 2304 l
-1468 2300 l
-1473 2297 l
-1478 2293 l
-1483 2289 l
-1488 2285 l
-1494 2282 l
-1499 2278 l
-1504 2274 l
-1510 2270 l
-1515 2266 l
-1521 2262 l
-1527 2258 l
-1533 2254 l
-1538 2250 l
-1544 2246 l
-1550 2242 l
-1556 2238 l
-1563 2234 l
-1569 2230 l
-1575 2226 l
-1582 2222 l
-1588 2218 l
-1595 2214 l
-1602 2209 l
-1608 2205 l
-1615 2201 l
-1622 2197 l
-1629 2192 l
-1636 2188 l
-1644 2184 l
-1651 2179 l
-1659 2175 l
-1666 2171 l
-1674 2166 l
-1682 2162 l
-1690 2157 l
-1698 2153 l
-1706 2148 l
-1714 2144 l
-1722 2139 l
-1731 2135 l
-1740 2130 l
-1748 2126 l
-1757 2121 l
-1766 2117 l
-1775 2112 l
-1785 2108 l
-1794 2103 l
-1804 2098 l
-1813 2094 l
-1823 2089 l
-1833 2085 l
-1843 2080 l
-1853 2075 l
-1864 2071 l
-1874 2066 l
-1885 2062 l
-1896 2057 l
-1907 2052 l
-1918 2048 l
-1929 2043 l
-1941 2039 l
-1953 2034 l
-1965 2030 l
-1977 2025 l
-1989 2021 l
-2001 2016 l
-2014 2012 l
-2026 2007 l
-2039 2003 l
-2052 1999 l
-2066 1994 l
-2079 1990 l
-2093 1986 l
-2107 1982 l
-2121 1978 l
-2135 1974 l
-2150 1970 l
-2164 1966 l
-2179 1962 l
-2194 1958 l
-2209 1954 l
-2225 1950 l
-2241 1947 l
-2257 1943 l
-2273 1940 l
-2289 1937 l
-2306 1933 l
-2322 1930 l
-2339 1927 l
-2357 1924 l
-2374 1921 l
-2392 1919 l
-2409 1916 l
-2427 1914 l
-2446 1911 l
-2464 1909 l
-2483 1907 l
-2502 1905 l
-2521 1904 l
-2540 1902 l
-2560 1901 l
-2580 1900 l
-2600 1899 l
-2620 1898 l
-2640 1897 l
-2661 1897 l
-2682 1896 l
-2702 1896 l
-2724 1897 l
-2745 1897 l
-2766 1898 l
-2788 1898 l
-2810 1900 l
-2832 1901 l
-2854 1903 l
-2876 1904 l
-2899 1906 l
-2921 1909 l
-2944 1912 l
-2967 1914 l
-2990 1918 l
-3013 1921 l
-3036 1925 l
-3059 1929 l
-3083 1933 l
-3106 1938 l
-3129 1943 l
-3153 1948 l
-3176 1953 l
-3200 1959 l
-3224 1965 l
-3247 1972 l
-3271 1979 l
-3294 1986 l
-3318 1993 l
-3342 2000 l
-3365 2008 l
-3389 2017 l
-3412 2025 l
-3435 2034 l
-3459 2043 l
-3482 2052 l
-3505 2062 l
-3528 2072 l
-3551 2082 l
-3573 2093 l
-3596 2104 l
-3618 2115 l
-3640 2126 l
-3663 2138 l
-3684 2149 l
-3706 2161 l
-3728 2174 l
-3749 2186 l
-3770 2199 l
-3791 2212 l
-3811 2225 l
-3832 2238 l
-3852 2252 l
-3872 2265 l
-3892 2279 l
-3911 2293 l
-3930 2307 l
-3949 2322 l
-3968 2336 l
-3986 2351 l
-4004 2365 l
-4022 2380 l
-4039 2395 l
-4057 2410 l
-4073 2425 l
-4090 2440 l
-4107 2455 l
-4123 2470 l
-4138 2486 l
-4154 2501 l
-4169 2516 l
-4184 2532 l
-4199 2547 l
-4213 2563 l
-4227 2578 l
-4241 2594 l
-4254 2609 l
-S
-4254 2609 m
-4268 2625 l
-4281 2640 l
-4293 2655 l
-4306 2671 l
-4318 2686 l
-4330 2701 l
-4341 2717 l
-4353 2732 l
-4364 2747 l
-4375 2762 l
-4385 2777 l
-4396 2792 l
-4406 2807 l
-4416 2822 l
-4425 2836 l
-4435 2851 l
-4444 2865 l
-4453 2880 l
-4462 2894 l
-4470 2909 l
-4478 2923 l
-4486 2937 l
-4494 2951 l
-4502 2965 l
-4510 2978 l
-4517 2992 l
-4524 3006 l
-4531 3019 l
-4538 3032 l
-4544 3046 l
-4551 3059 l
-4557 3072 l
-4563 3085 l
-4569 3098 l
-4575 3110 l
-4581 3123 l
-4586 3135 l
-4591 3148 l
-4597 3160 l
-4602 3172 l
-4606 3184 l
-4611 3196 l
-4616 3208 l
-4620 3219 l
-4625 3231 l
-4629 3242 l
-4633 3253 l
-4637 3265 l
-4641 3276 l
-4645 3287 l
-4649 3298 l
-4652 3308 l
-4656 3319 l
-4659 3329 l
-4663 3340 l
-4666 3350 l
-4669 3360 l
-4672 3371 l
-4675 3381 l
-4678 3390 l
-4681 3400 l
-4683 3410 l
-4686 3420 l
-4689 3429 l
-4691 3438 l
-4693 3448 l
-4696 3457 l
-4698 3466 l
-4700 3475 l
-4702 3484 l
-4704 3493 l
-4706 3501 l
-4708 3510 l
-4710 3519 l
-4712 3527 l
-4714 3535 l
-4716 3544 l
-4717 3552 l
-4719 3560 l
-4720 3568 l
-4722 3576 l
-4723 3584 l
-4725 3591 l
-4726 3599 l
-4728 3607 l
-4729 3614 l
-4730 3622 l
-4731 3629 l
-4732 3636 l
-4734 3644 l
-4735 3651 l
-4736 3658 l
-4737 3665 l
-4738 3672 l
-4739 3679 l
-4740 3685 l
-4741 3692 l
-4741 3699 l
-4742 3705 l
-4743 3712 l
-4744 3718 l
-4745 3725 l
-4745 3731 l
-4746 3737 l
-4747 3743 l
-4747 3749 l
-4748 3755 l
-4748 3761 l
-4749 3767 l
-4750 3773 l
-4750 3779 l
-4751 3785 l
-4756 3860 l
-4758 3925 l
-4758 3983 l
-4757 4034 l
-4755 4079 l
-4752 4120 l
-4749 4156 l
-4745 4189 l
-4742 4219 l
-4738 4246 l
-4734 4271 l
-4731 4293 l
-4727 4314 l
-4724 4334 l
-4721 4351 l
-4717 4368 l
-4714 4383 l
-4711 4398 l
-4708 4411 l
-4705 4424 l
-4703 4435 l
-4700 4446 l
-4697 4457 l
-4695 4467 l
-4692 4476 l
-4690 4485 l
-4688 4493 l
-4686 4501 l
-4684 4509 l
-4682 4516 l
-4680 4523 l
-4678 4529 l
-4676 4535 l
-4674 4541 l
-4673 4547 l
-4671 4552 l
-4670 4558 l
-4668 4563 l
-4667 4567 l
-4665 4572 l
-4664 4576 l
-4662 4581 l
-4647 4627 l
-4636 4658 l
-4628 4680 l
-4622 4697 l
-4617 4710 l
-4613 4721 l
-4609 4729 l
-4606 4737 l
-4603 4744 l
-4601 4749 l
-4599 4755 l
-4597 4759 l
-4595 4763 l
-4593 4767 l
-4592 4771 l
-4590 4774 l
-4589 4777 l
-4587 4780 l
-4586 4783 l
-4585 4786 l
-4584 4788 l
-4582 4791 l
-4569 4818 l
-4557 4839 l
-4546 4858 l
-4534 4876 l
-4522 4893 l
-4510 4909 l
-4497 4924 l
-4483 4939 l
-4470 4954 l
-4455 4968 l
-4440 4981 l
-4425 4995 l
-4408 5008 l
-4392 5020 l
-4375 5032 l
-4357 5044 l
-4339 5056 l
-4320 5067 l
-4301 5077 l
-4281 5088 l
-4261 5098 l
-4240 5107 l
-4218 5116 l
-S
-4218 5116 m
-4197 5125 l
-4174 5134 l
-4152 5142 l
-4128 5149 l
-4105 5156 l
-4080 5163 l
-4056 5170 l
-4031 5176 l
-4005 5181 l
-3979 5187 l
-3953 5192 l
-3926 5196 l
-3899 5200 l
-3872 5204 l
-3844 5207 l
-3816 5210 l
-3787 5212 l
-3758 5214 l
-3729 5216 l
-3699 5217 l
-3669 5218 l
-3639 5218 l
-S
-2956 5656 m
-2955 5655 l
-2954 5655 l
-2953 5654 l
-2939 5646 l
-2924 5639 l
-2909 5631 l
-2893 5623 l
-2876 5616 l
-2860 5608 l
-2842 5600 l
-2824 5592 l
-2806 5584 l
-2787 5577 l
-2768 5568 l
-2748 5560 l
-2728 5552 l
-2708 5544 l
-2687 5536 l
-2666 5527 l
-2645 5519 l
-2623 5510 l
-2601 5501 l
-2579 5493 l
-2557 5484 l
-2534 5475 l
-2512 5466 l
-2489 5456 l
-2466 5447 l
-2443 5438 l
-2419 5428 l
-2396 5419 l
-2372 5409 l
-2348 5399 l
-2324 5389 l
-2301 5380 l
-2277 5369 l
-2253 5359 l
-2228 5349 l
-2204 5339 l
-2180 5329 l
-2156 5318 l
-2132 5308 l
-2108 5297 l
-2084 5286 l
-2060 5276 l
-2036 5265 l
-2012 5254 l
-1988 5243 l
-1964 5233 l
-1940 5222 l
-1917 5211 l
-1893 5200 l
-1870 5189 l
-1847 5178 l
-1824 5167 l
-1801 5156 l
-1778 5146 l
-1755 5135 l
-1733 5124 l
-1710 5113 l
-1688 5103 l
-1667 5092 l
-1645 5082 l
-1623 5072 l
-1602 5061 l
-1581 5051 l
-1561 5041 l
-1540 5032 l
-1520 5022 l
-1500 5012 l
-1481 5003 l
-1461 4994 l
-1442 4985 l
-1424 4977 l
-1406 4969 l
-1388 4961 l
-1370 4953 l
-1353 4946 l
-1336 4939 l
-1319 4932 l
-1303 4926 l
-1288 4920 l
-1273 4915 l
-1258 4910 l
-1244 4906 l
-1230 4902 l
-1216 4899 l
-1204 4897 l
-1191 4895 l
-1180 4894 l
-1169 4893 l
-1158 4894 l
-1148 4895 l
-1139 4897 l
-1131 4900 l
-1123 4904 l
-1116 4908 l
-1110 4914 l
-1105 4921 l
-1100 4930 l
-1097 4939 l
-1094 4950 l
-1093 4962 l
-1093 4975 l
-1094 4990 l
-1097 5007 l
-1101 5025 l
-1107 5044 l
-1114 5066 l
-1123 5089 l
-1134 5113 l
-1148 5140 l
-1163 5168 l
-1181 5198 l
-1202 5230 l
-1225 5263 l
-1251 5298 l
-1280 5334 l
-1312 5371 l
-1348 5410 l
-1387 5449 l
-1430 5488 l
-1476 5528 l
-1525 5568 l
-1578 5607 l
-1633 5645 l
-1692 5682 l
-1753 5717 l
-1816 5750 l
-1881 5780 l
-1948 5808 l
-2015 5834 l
-2082 5856 l
-2149 5875 l
-2215 5892 l
-2280 5905 l
-2343 5915 l
-2404 5923 l
-2463 5928 l
-2519 5931 l
-2572 5932 l
-2623 5931 l
-2670 5929 l
-2714 5925 l
-2755 5920 l
-2794 5914 l
-2829 5907 l
-2861 5900 l
-2890 5892 l
-2917 5883 l
-2941 5875 l
-2962 5866 l
-2981 5857 l
-2998 5847 l
-3013 5838 l
-3025 5829 l
-3036 5820 l
-3044 5811 l
-3051 5802 l
-3056 5793 l
-3060 5784 l
-3062 5775 l
-3063 5767 l
-3062 5758 l
-3060 5750 l
-3057 5742 l
-3052 5734 l
-3047 5726 l
-3040 5718 l
-3033 5710 l
-3024 5702 l
-3015 5694 l
-3005 5686 l
-2994 5679 l
-2982 5671 l
-2969 5663 l
-2956 5656 l
-S
-0 g
-3678 4650 m
-3671 4680 l
-S
-3420 4667 m
-3410 4696 l
-S
-2885 4592 m
-2874 4620 l
-S
-2621 4508 m
-2609 4536 l
-S
-2122 4260 m
-2108 4288 l
-S
-1898 4101 m
-1884 4128 l
-S
-1534 3722 m
-1518 3747 l
-S
-1407 3502 m
-1390 3527 l
-S
-1321 2997 m
-1300 3019 l
-S
-1407 2705 m
-1383 2725 l
-S
-2128 2089 m
-2098 2095 l
-S
-2959 1989 m
-2930 1980 l
-S
-4430 3050 m
-4446 3076 l
-S
-4564 3628 m
-4571 3657 l
-S
-4350 4300 m
-4348 4331 l
-S
-4152 4479 m
-4147 4509 l
-S
-3198 3069 m
-3218 3046 l
-S
-3284 3127 m
-3305 3105 l
-S
-3366 3191 m
-3387 3169 l
-S
-3444 3259 m
-3466 3238 l
-S
-3517 3332 m
-3540 3312 l
-S
-3649 3492 m
-3673 3473 l
-S
-3707 3578 m
-3732 3560 l
-S
-3760 3668 m
-3785 3650 l
-S
-3807 3761 m
-3832 3744 l
-S
-3847 3857 m
-3873 3841 l
-S
-3907 4058 m
-3935 4044 l
-S
-3927 4162 m
-3955 4149 l
-S
-3939 4267 m
-3967 4255 l
-S
-3943 4374 m
-3971 4364 l
-S
-3938 4482 m
-3967 4473 l
-S
-3902 4699 m
-3932 4692 l
-S
-3870 4807 m
-3900 4802 l
-S
-3828 4914 m
-3858 4910 l
-S
-3776 5018 m
-3806 5016 l
-S
-3713 5120 m
-3743 5119 l
-S
-3553 5311 m
-3583 5314 l
-S
-3456 5398 m
-3486 5402 l
-S
-3348 5477 m
-3378 5484 l
-S
-3228 5548 m
-3257 5557 l
-S
-3097 5608 m
-3126 5619 l
-S
-2805 5690 m
-2831 5706 l
-S
-2647 5708 m
-2670 5727 l
-S
-2482 5709 m
-2503 5731 l
-S
-2313 5691 m
-2330 5716 l
-S
-2143 5654 m
-2156 5681 l
-S
-3925 4591 m
-3873 4608 l
-3821 4622 l
-3768 4635 l
-3715 4645 l
-3660 4653 l
-3606 4659 l
-3550 4664 l
-3495 4666 l
-3438 4667 l
-3382 4666 l
-3325 4663 l
-3268 4659 l
-3211 4653 l
-3154 4646 l
-S
-3154 4646 m
-3096 4637 l
-3039 4626 l
-2981 4615 l
-2924 4601 l
-2866 4587 l
-2809 4571 l
-2752 4553 l
-2696 4534 l
-2639 4514 l
-2583 4493 l
-2528 4471 l
-2473 4447 l
-2418 4422 l
-2364 4396 l
-S
-2364 4396 m
-2311 4369 l
-2258 4341 l
-2206 4312 l
-2155 4281 l
-2105 4250 l
-2056 4217 l
-2007 4184 l
-1960 4149 l
-1914 4114 l
-1869 4077 l
-1825 4040 l
-1782 4001 l
-1740 3962 l
-1700 3922 l
-S
-1700 3922 m
-1662 3880 l
-1625 3838 l
-1589 3795 l
-1556 3751 l
-1524 3707 l
-1493 3661 l
-1465 3614 l
-1439 3567 l
-1415 3518 l
-1393 3469 l
-1374 3418 l
-1357 3367 l
-1342 3315 l
-1331 3261 l
-S
-1331 3261 m
-1330 3257 l
-1330 3253 l
-1329 3249 l
-1328 3246 l
-1328 3242 l
-1327 3238 l
-1326 3234 l
-1326 3230 l
-1325 3226 l
-1325 3222 l
-1324 3218 l
-1324 3214 l
-1323 3210 l
-1323 3207 l
-1322 3203 l
-1322 3199 l
-1321 3195 l
-1321 3191 l
-1320 3187 l
-1320 3183 l
-1320 3179 l
-1319 3175 l
-1319 3171 l
-1318 3167 l
-1318 3163 l
-1318 3159 l
-1318 3155 l
-1317 3151 l
-1317 3147 l
-1317 3143 l
-1317 3139 l
-1316 3135 l
-1316 3131 l
-1316 3127 l
-1316 3123 l
-1316 3119 l
-1316 3114 l
-1316 3110 l
-1316 3106 l
-1316 3102 l
-1316 3098 l
-1316 3094 l
-1316 3090 l
-1316 3086 l
-1316 3082 l
-1316 3078 l
-1316 3073 l
-1316 3069 l
-1316 3065 l
-1316 3061 l
-1316 3057 l
-1317 3053 l
-1317 3049 l
-1317 3044 l
-1317 3040 l
-1318 3036 l
-1318 3032 l
-1318 3028 l
-1319 3023 l
-1319 3019 l
-1319 3015 l
-1320 3011 l
-1320 3007 l
-1321 3002 l
-1321 2998 l
-1322 2994 l
-1322 2990 l
-1323 2985 l
-1323 2981 l
-1324 2977 l
-1324 2972 l
-1325 2968 l
-1326 2964 l
-1326 2960 l
-1327 2955 l
-1328 2951 l
-1328 2947 l
-1329 2942 l
-1330 2938 l
-1331 2934 l
-1332 2929 l
-1332 2925 l
-1333 2921 l
-1334 2916 l
-1335 2912 l
-1336 2908 l
-1337 2903 l
-1338 2899 l
-1339 2894 l
-1340 2890 l
-1341 2886 l
-1342 2881 l
-1343 2877 l
-1345 2872 l
-1346 2868 l
-1347 2863 l
-1348 2859 l
-1349 2854 l
-1351 2850 l
-1352 2845 l
-1353 2841 l
-1355 2837 l
-1356 2832 l
-1358 2828 l
-1359 2823 l
-1360 2819 l
-1362 2814 l
-1364 2809 l
-1365 2805 l
-1367 2800 l
-1368 2796 l
-1370 2791 l
-1372 2787 l
-1373 2782 l
-1375 2778 l
-1377 2773 l
-1379 2768 l
-1381 2764 l
-1382 2759 l
-1384 2755 l
-1386 2750 l
-1388 2745 l
-1390 2741 l
-1392 2736 l
-1394 2731 l
-1396 2727 l
-1399 2722 l
-1401 2717 l
-1403 2713 l
-1405 2708 l
-1407 2703 l
-1410 2699 l
-1412 2694 l
-1414 2689 l
-1417 2685 l
-1419 2680 l
-1422 2675 l
-1424 2671 l
-1427 2666 l
-1429 2661 l
-1432 2656 l
-1435 2652 l
-1437 2647 l
-1440 2642 l
-1443 2637 l
-1446 2633 l
-1448 2628 l
-1451 2623 l
-1454 2618 l
-1457 2613 l
-1460 2609 l
-1463 2604 l
-1466 2599 l
-1469 2594 l
-1473 2589 l
-1476 2584 l
-1479 2580 l
-1482 2575 l
-1486 2570 l
-1489 2565 l
-1492 2560 l
-1496 2555 l
-1499 2551 l
-1503 2546 l
-1506 2541 l
-1510 2536 l
-1514 2531 l
-1518 2526 l
-1521 2521 l
-1525 2516 l
-1529 2511 l
-1533 2507 l
-1537 2502 l
-1541 2497 l
-1545 2492 l
-1549 2487 l
-1553 2482 l
-1557 2477 l
-1562 2472 l
-1566 2467 l
-1570 2462 l
-1575 2457 l
-1579 2452 l
-1584 2448 l
-1588 2443 l
-1593 2438 l
-1597 2433 l
-1602 2428 l
-1607 2423 l
-1612 2418 l
-1617 2413 l
-1622 2408 l
-1627 2403 l
-1632 2398 l
-1637 2393 l
-1642 2388 l
-S
-1642 2388 m
-1647 2383 l
-1652 2378 l
-1658 2374 l
-1663 2369 l
-1669 2364 l
-1674 2359 l
-1680 2354 l
-1685 2349 l
-1691 2344 l
-1697 2339 l
-1703 2334 l
-1709 2329 l
-1715 2324 l
-1721 2320 l
-1727 2315 l
-1733 2310 l
-1739 2305 l
-1745 2300 l
-1752 2295 l
-1758 2290 l
-1765 2286 l
-1771 2281 l
-1778 2276 l
-1784 2271 l
-1791 2266 l
-1798 2261 l
-1805 2257 l
-1812 2252 l
-1819 2247 l
-1826 2242 l
-1833 2238 l
-1841 2233 l
-1848 2228 l
-1855 2224 l
-1863 2219 l
-1870 2214 l
-1878 2210 l
-1886 2205 l
-1893 2200 l
-1901 2196 l
-1909 2191 l
-1917 2187 l
-1925 2182 l
-1934 2178 l
-1942 2173 l
-1950 2169 l
-1959 2164 l
-1967 2160 l
-1976 2156 l
-1984 2151 l
-1993 2147 l
-2002 2143 l
-2011 2138 l
-2020 2134 l
-2029 2130 l
-2038 2126 l
-2047 2122 l
-2057 2118 l
-2066 2113 l
-2076 2109 l
-2085 2105 l
-2095 2101 l
-2105 2098 l
-2115 2094 l
-2124 2090 l
-2135 2086 l
-2145 2082 l
-2155 2079 l
-2165 2075 l
-2176 2071 l
-2186 2068 l
-2197 2064 l
-2207 2061 l
-2218 2057 l
-2229 2054 l
-2240 2051 l
-2251 2047 l
-2262 2044 l
-2273 2041 l
-2284 2038 l
-2296 2035 l
-2307 2032 l
-2318 2029 l
-2330 2026 l
-2342 2023 l
-2354 2021 l
-2365 2018 l
-2377 2015 l
-2390 2013 l
-2402 2010 l
-2414 2008 l
-2426 2006 l
-2439 2004 l
-2451 2001 l
-2464 1999 l
-2476 1997 l
-2489 1995 l
-2502 1994 l
-2515 1992 l
-2528 1990 l
-2541 1989 l
-2554 1987 l
-2567 1986 l
-2580 1985 l
-2594 1983 l
-2607 1982 l
-2621 1981 l
-2634 1980 l
-2648 1980 l
-2662 1979 l
-2676 1978 l
-2689 1978 l
-2703 1978 l
-2717 1977 l
-2731 1977 l
-2746 1977 l
-2760 1977 l
-2774 1977 l
-2788 1977 l
-2803 1978 l
-2817 1978 l
-2832 1979 l
-2846 1980 l
-2861 1981 l
-2875 1982 l
-2890 1983 l
-2905 1984 l
-2920 1985 l
-2935 1987 l
-2949 1988 l
-2964 1990 l
-2979 1992 l
-2994 1994 l
-3009 1996 l
-3024 1998 l
-3039 2000 l
-3054 2003 l
-3069 2006 l
-3084 2008 l
-3100 2011 l
-3115 2014 l
-3130 2017 l
-3145 2021 l
-3160 2024 l
-3175 2028 l
-3191 2031 l
-3206 2035 l
-3221 2039 l
-3236 2043 l
-3251 2047 l
-3266 2052 l
-3281 2056 l
-3297 2061 l
-3312 2066 l
-3327 2070 l
-3342 2075 l
-3357 2081 l
-3372 2086 l
-3387 2091 l
-3402 2097 l
-3416 2102 l
-3431 2108 l
-3446 2114 l
-3461 2120 l
-3476 2126 l
-3490 2133 l
-3505 2139 l
-3519 2146 l
-3534 2152 l
-3548 2159 l
-3563 2166 l
-3577 2173 l
-3591 2180 l
-3605 2187 l
-3619 2195 l
-3633 2202 l
-3647 2210 l
-3661 2218 l
-3675 2225 l
-3689 2233 l
-3702 2241 l
-3716 2250 l
-3729 2258 l
-3742 2266 l
-3756 2275 l
-3769 2283 l
-3782 2292 l
-3795 2300 l
-3808 2309 l
-3820 2318 l
-3833 2327 l
-3846 2336 l
-3858 2345 l
-3870 2354 l
-3883 2364 l
-3895 2373 l
-S
-3895 2373 m
-3907 2382 l
-3919 2392 l
-3930 2401 l
-3942 2411 l
-3954 2421 l
-3965 2431 l
-3976 2440 l
-3988 2450 l
-3999 2460 l
-4010 2470 l
-4020 2480 l
-4031 2490 l
-4042 2500 l
-4052 2511 l
-4063 2521 l
-4073 2531 l
-4083 2541 l
-4093 2552 l
-4103 2562 l
-4113 2573 l
-4122 2583 l
-4132 2593 l
-4141 2604 l
-4150 2614 l
-4159 2625 l
-4168 2636 l
-4177 2646 l
-4186 2657 l
-4195 2667 l
-4203 2678 l
-4212 2689 l
-4220 2699 l
-4228 2710 l
-4236 2721 l
-4244 2731 l
-4252 2742 l
-4259 2753 l
-4267 2763 l
-4274 2774 l
-4282 2785 l
-4289 2795 l
-4296 2806 l
-4303 2817 l
-4310 2827 l
-4317 2838 l
-4323 2848 l
-4330 2859 l
-4336 2870 l
-4342 2880 l
-4349 2891 l
-4355 2901 l
-4361 2912 l
-4366 2922 l
-4372 2933 l
-4378 2943 l
-4383 2954 l
-4389 2964 l
-4394 2975 l
-4399 2985 l
-4404 2995 l
-4409 3006 l
-4414 3016 l
-4419 3026 l
-4424 3036 l
-4428 3046 l
-4433 3057 l
-4437 3067 l
-4442 3077 l
-4446 3087 l
-4450 3097 l
-4454 3107 l
-4458 3117 l
-4462 3127 l
-4466 3137 l
-4470 3147 l
-4473 3156 l
-4477 3166 l
-4480 3176 l
-4483 3186 l
-4487 3195 l
-4490 3205 l
-4493 3214 l
-4496 3224 l
-4499 3233 l
-4502 3243 l
-4505 3252 l
-4507 3262 l
-4510 3271 l
-4513 3280 l
-4515 3289 l
-4518 3299 l
-4520 3308 l
-4522 3317 l
-4524 3326 l
-4527 3335 l
-4529 3344 l
-4531 3353 l
-4533 3362 l
-4534 3371 l
-4536 3379 l
-4538 3388 l
-4540 3397 l
-4541 3406 l
-4543 3414 l
-4544 3423 l
-4546 3431 l
-4547 3440 l
-4548 3448 l
-4550 3457 l
-4551 3465 l
-4552 3473 l
-4553 3482 l
-4554 3490 l
-4555 3498 l
-4556 3506 l
-4557 3514 l
-4558 3522 l
-4558 3530 l
-4559 3538 l
-4560 3546 l
-4560 3554 l
-4561 3562 l
-4561 3570 l
-4562 3577 l
-4562 3585 l
-4563 3593 l
-4563 3600 l
-4563 3608 l
-4564 3615 l
-4564 3623 l
-4564 3630 l
-4564 3638 l
-4564 3645 l
-4564 3652 l
-4564 3660 l
-4564 3667 l
-4564 3674 l
-4564 3681 l
-4564 3688 l
-4563 3695 l
-4563 3702 l
-4563 3709 l
-4562 3716 l
-4562 3723 l
-4562 3730 l
-4561 3737 l
-4561 3743 l
-4560 3750 l
-4560 3757 l
-4559 3763 l
-4558 3770 l
-4558 3777 l
-4557 3783 l
-4556 3790 l
-4556 3796 l
-4555 3803 l
-4554 3809 l
-4553 3815 l
-4552 3822 l
-4551 3828 l
-4550 3834 l
-4549 3840 l
-4548 3846 l
-4547 3853 l
-4546 3859 l
-4545 3865 l
-4544 3871 l
-4543 3877 l
-4542 3883 l
-4541 3888 l
-4539 3894 l
-4538 3900 l
-4537 3906 l
-4536 3912 l
-4534 3917 l
-4533 3923 l
-4532 3929 l
-4530 3934 l
-4529 3940 l
-4527 3946 l
-4526 3951 l
-4524 3957 l
-4523 3962 l
-4521 3967 l
-4520 3973 l
-4518 3978 l
-4517 3983 l
-4515 3989 l
-4513 3994 l
-4512 3999 l
-4510 4004 l
-4508 4010 l
-4506 4015 l
-4505 4020 l
-4503 4025 l
-4501 4030 l
-S
-4501 4030 m
-4499 4035 l
-4498 4040 l
-4496 4045 l
-4494 4050 l
-4492 4055 l
-4490 4059 l
-4488 4064 l
-4486 4069 l
-4484 4074 l
-4482 4079 l
-4480 4083 l
-4478 4088 l
-4476 4093 l
-4474 4097 l
-4472 4102 l
-4470 4106 l
-4468 4111 l
-4466 4116 l
-4464 4120 l
-4461 4124 l
-4459 4129 l
-4457 4133 l
-4455 4138 l
-4453 4142 l
-4451 4146 l
-4448 4151 l
-4446 4155 l
-4444 4159 l
-4441 4163 l
-4439 4168 l
-4437 4172 l
-4435 4176 l
-4432 4180 l
-4430 4184 l
-4427 4188 l
-4425 4192 l
-4423 4196 l
-4420 4200 l
-4418 4204 l
-4415 4208 l
-4413 4212 l
-4411 4216 l
-4408 4220 l
-4406 4224 l
-4403 4227 l
-4401 4231 l
-4398 4235 l
-4395 4239 l
-4393 4242 l
-4390 4246 l
-4388 4250 l
-4385 4254 l
-4383 4257 l
-4380 4261 l
-4377 4264 l
-4375 4268 l
-4372 4271 l
-4369 4275 l
-4367 4278 l
-4364 4282 l
-4361 4285 l
-4359 4289 l
-4356 4292 l
-4353 4296 l
-4351 4299 l
-4348 4302 l
-4345 4306 l
-4342 4309 l
-4340 4312 l
-4337 4316 l
-4334 4319 l
-4331 4322 l
-4328 4325 l
-4326 4328 l
-4323 4332 l
-4320 4335 l
-4317 4338 l
-4314 4341 l
-4311 4344 l
-4308 4347 l
-4305 4350 l
-4303 4353 l
-4300 4356 l
-4297 4359 l
-4294 4362 l
-4291 4365 l
-4288 4368 l
-4285 4371 l
-4282 4374 l
-4279 4377 l
-4276 4380 l
-4273 4382 l
-4270 4385 l
-4267 4388 l
-4264 4391 l
-4261 4394 l
-4258 4396 l
-4255 4399 l
-4252 4402 l
-4249 4405 l
-4246 4407 l
-4243 4410 l
-4240 4412 l
-4237 4415 l
-4234 4418 l
-4230 4420 l
-4227 4423 l
-4224 4425 l
-4221 4428 l
-4218 4430 l
-4215 4433 l
-4212 4435 l
-4208 4438 l
-4205 4440 l
-4202 4443 l
-4199 4445 l
-4196 4448 l
-4193 4450 l
-4189 4452 l
-4186 4455 l
-4183 4457 l
-4180 4459 l
-4177 4462 l
-4173 4464 l
-4170 4466 l
-4167 4469 l
-4164 4471 l
-4160 4473 l
-4157 4475 l
-4154 4477 l
-4150 4480 l
-4147 4482 l
-4144 4484 l
-4141 4486 l
-4137 4488 l
-4134 4490 l
-4131 4492 l
-4127 4494 l
-4124 4496 l
-4121 4499 l
-4117 4501 l
-4114 4503 l
-4111 4505 l
-4107 4507 l
-4104 4509 l
-4100 4510 l
-4097 4512 l
-4094 4514 l
-4090 4516 l
-4087 4518 l
-4083 4520 l
-4080 4522 l
-4077 4524 l
-4073 4526 l
-4025 4550 l
-3975 4572 l
-3972 4573 l
-3968 4575 l
-3964 4576 l
-3961 4577 l
-3957 4579 l
-3954 4580 l
-3950 4582 l
-3946 4583 l
-3943 4584 l
-3939 4586 l
-3936 4587 l
-3932 4588 l
-3928 4590 l
-3928 4590 l
-3928 4590 l
-3927 4590 l
-3927 4590 l
-3927 4590 l
-3927 4590 l
-3926 4590 l
-3926 4590 l
-3926 4590 l
-3926 4590 l
-3925 4591 l
-3925 4591 l
-3925 4591 l
-S
-3109 3016 m
-3148 3038 l
-3186 3061 l
-3223 3085 l
-3260 3110 l
-3296 3136 l
-3331 3163 l
-3366 3191 l
-3400 3219 l
-3433 3249 l
-3465 3280 l
-3497 3311 l
-3527 3343 l
-3557 3376 l
-3586 3410 l
-S
-3586 3410 m
-3613 3445 l
-3640 3480 l
-3666 3516 l
-3691 3553 l
-3715 3590 l
-3738 3629 l
-3760 3668 l
-3781 3707 l
-3800 3747 l
-3819 3788 l
-3836 3829 l
-3852 3871 l
-3867 3913 l
-3881 3956 l
-S
-3881 3956 m
-3893 3999 l
-3904 4043 l
-3914 4087 l
-3922 4132 l
-3929 4177 l
-3935 4222 l
-3939 4267 l
-3941 4313 l
-3943 4359 l
-3942 4405 l
-3940 4451 l
-3937 4498 l
-3931 4544 l
-3925 4591 l
-S
-3925 4591 m
-3916 4637 l
-3906 4684 l
-3894 4730 l
-3880 4776 l
-3865 4823 l
-3847 4868 l
-3828 4914 l
-3807 4959 l
-3784 5004 l
-3759 5048 l
-3732 5091 l
-3703 5134 l
-3672 5177 l
-3639 5218 l
-S
-3639 5218 m
-3603 5258 l
-3566 5298 l
-3527 5336 l
-3485 5374 l
-3442 5410 l
-3396 5444 l
-3348 5477 l
-3298 5509 l
-3246 5538 l
-3192 5566 l
-3136 5592 l
-3078 5616 l
-3018 5637 l
-2956 5656 l
-S
-2956 5656 m
-2952 5657 l
-2947 5658 l
-2943 5660 l
-2938 5661 l
-2934 5662 l
-2929 5663 l
-2924 5664 l
-2920 5665 l
-2915 5667 l
-2911 5668 l
-2906 5669 l
-2902 5670 l
-2897 5671 l
-2892 5672 l
-2888 5673 l
-2883 5674 l
-2879 5675 l
-2874 5676 l
-2869 5677 l
-2865 5678 l
-2860 5679 l
-2855 5680 l
-2851 5681 l
-2846 5682 l
-2841 5683 l
-2837 5684 l
-2832 5685 l
-2827 5686 l
-2823 5687 l
-2818 5687 l
-2813 5688 l
-2808 5689 l
-2804 5690 l
-2799 5691 l
-2794 5691 l
-2789 5692 l
-2785 5693 l
-2780 5694 l
-2775 5694 l
-2770 5695 l
-2765 5696 l
-2761 5697 l
-2756 5697 l
-2751 5698 l
-2746 5698 l
-2741 5699 l
-2737 5700 l
-2732 5700 l
-2727 5701 l
-2722 5701 l
-2717 5702 l
-2712 5702 l
-2707 5703 l
-2702 5703 l
-2698 5704 l
-2693 5704 l
-2688 5705 l
-2683 5705 l
-2678 5706 l
-2673 5706 l
-2668 5706 l
-2663 5707 l
-2658 5707 l
-2653 5707 l
-2648 5708 l
-2643 5708 l
-2638 5708 l
-2633 5709 l
-2628 5709 l
-2623 5709 l
-2618 5709 l
-2613 5709 l
-2608 5710 l
-2603 5710 l
-2598 5710 l
-2593 5710 l
-2588 5710 l
-2583 5710 l
-2578 5710 l
-2573 5710 l
-2568 5710 l
-2563 5711 l
-2558 5711 l
-2553 5711 l
-2548 5711 l
-2543 5710 l
-2538 5710 l
-2533 5710 l
-2528 5710 l
-2522 5710 l
-2517 5710 l
-2512 5710 l
-2507 5710 l
-2502 5710 l
-2497 5709 l
-2492 5709 l
-2487 5709 l
-2482 5709 l
-2476 5708 l
-2471 5708 l
-2466 5708 l
-2461 5708 l
-2456 5707 l
-2451 5707 l
-2446 5707 l
-2441 5706 l
-2435 5706 l
-2430 5705 l
-2425 5705 l
-2420 5704 l
-2415 5704 l
-2410 5703 l
-2404 5703 l
-2399 5702 l
-2394 5702 l
-2389 5701 l
-2384 5701 l
-2379 5700 l
-2373 5700 l
-2368 5699 l
-2363 5698 l
-2358 5698 l
-2353 5697 l
-2347 5696 l
-2342 5695 l
-2337 5695 l
-2332 5694 l
-2327 5693 l
-2321 5692 l
-2316 5692 l
-2311 5691 l
-2306 5690 l
-2301 5689 l
-2295 5688 l
-2290 5687 l
-2285 5686 l
-2280 5685 l
-2275 5684 l
-2269 5683 l
-2264 5682 l
-2259 5681 l
-2254 5680 l
-2249 5679 l
-2243 5678 l
-2238 5677 l
-2233 5676 l
-2228 5675 l
-2223 5674 l
-2217 5673 l
-2212 5671 l
-2207 5670 l
-2202 5669 l
-2197 5668 l
-2191 5666 l
-2186 5665 l
-2181 5664 l
-2176 5663 l
-2171 5661 l
-2165 5660 l
-2160 5658 l
-2155 5657 l
-2150 5656 l
-2145 5654 l
-2139 5653 l
-2134 5651 l
-2129 5650 l
-2124 5648 l
-2119 5647 l
-2113 5645 l
-2108 5644 l
-2103 5642 l
-2098 5641 l
-2093 5639 l
-2088 5637 l
-2082 5636 l
-2077 5634 l
-2072 5632 l
-2067 5631 l
-2062 5629 l
-2057 5627 l
-2052 5625 l
-2046 5624 l
-2041 5622 l
-2036 5620 l
-2031 5618 l
-2026 5616 l
-2021 5614 l
-2016 5612 l
-2011 5610 l
-2005 5609 l
-2000 5607 l
-1995 5605 l
-1990 5603 l
-1985 5601 l
-1980 5599 l
-1975 5597 l
-S
-0 0 1 rg
-4756 3875 m
-4759 3878 l
-4759 3882 l
-4759 3887 l
-4759 3891 l
-4759 3896 l
-4759 3900 l
-4759 3905 l
-4759 3909 l
-S
-4759 3909 m
-4759 3913 l
-4759 3918 l
-4759 3922 l
-4759 3927 l
-4759 3931 l
-4759 3936 l
-4759 3940 l
-4759 3945 l
-4759 3949 l
-S
-4759 3949 m
-4759 3954 l
-4759 3958 l
-4759 3963 l
-4759 3967 l
-4759 3972 l
-4759 3976 l
-4759 3981 l
-4759 3985 l
-4759 3989 l
-S
-4759 3989 m
-4759 3994 l
-4759 3998 l
-4759 4003 l
-4759 4007 l
-4759 4012 l
-4759 4016 l
-4759 4021 l
-4759 4025 l
-4759 4030 l
-S
-4756 4041 m
-4759 4039 l
-4759 4034 l
-4759 4030 l
-S
-4716 3545 m
-4718 3547 l
-S
-4718 3547 m
-4718 3551 l
-4718 3556 l
-4718 3560 l
-4718 3565 l
-4721 3567 l
-4723 3569 l
-4723 3574 l
-4723 3578 l
-4723 3583 l
-4723 3587 l
-S
-4723 3587 m
-4723 3592 l
-4725 3594 l
-4727 3596 l
-4727 3601 l
-4727 3605 l
-4727 3610 l
-4727 3614 l
-4730 3616 l
-4732 3619 l
-4732 3623 l
-4732 3627 l
-S
-4732 3627 m
-4732 3632 l
-4732 3636 l
-4732 3641 l
-4732 3645 l
-4734 3648 l
-4736 3650 l
-4736 3654 l
-4736 3659 l
-4736 3663 l
-4736 3668 l
-S
-4736 3668 m
-4736 3672 l
-4736 3677 l
-4738 3679 l
-4741 3681 l
-4741 3686 l
-4741 3690 l
-4741 3694 l
-4741 3699 l
-4741 3703 l
-4741 3708 l
-S
-4741 3708 m
-4743 3710 l
-4745 3712 l
-4745 3717 l
-4745 3721 l
-4745 3726 l
-4745 3730 l
-4745 3735 l
-4745 3739 l
-4745 3744 l
-4745 3748 l
-S
-4745 3748 m
-4747 3750 l
-4750 3753 l
-4750 3757 l
-4750 3762 l
-4750 3766 l
-4750 3770 l
-4750 3775 l
-4750 3779 l
-4750 3784 l
-4750 3788 l
-S
-4750 3788 m
-4750 3793 l
-4750 3797 l
-4752 3800 l
-4754 3802 l
-4754 3806 l
-4754 3811 l
-4754 3815 l
-4754 3820 l
-4754 3824 l
-4754 3829 l
-S
-4754 3829 m
-4754 3833 l
-4754 3838 l
-4754 3842 l
-4754 3846 l
-4754 3851 l
-4754 3855 l
-4754 3860 l
-4754 3864 l
-4754 3869 l
-S
-4754 3869 m
-4754 3873 l
-4756 3875 l
-S
-4754 4070 m
-4754 4065 l
-4754 4061 l
-4754 4056 l
-4754 4052 l
-4754 4048 l
-4754 4043 l
-4756 4041 l
-S
-4754 4070 m
-4754 4074 l
-4754 4079 l
-4754 4083 l
-4754 4088 l
-4754 4092 l
-4754 4097 l
-4754 4101 l
-4754 4106 l
-4754 4110 l
-S
-4754 4110 m
-4754 4115 l
-4752 4117 l
-4750 4119 l
-4750 4124 l
-4750 4128 l
-4750 4132 l
-4750 4137 l
-4750 4141 l
-4750 4146 l
-4750 4150 l
-S
-4750 4150 m
-4750 4155 l
-4750 4159 l
-4750 4164 l
-4750 4168 l
-4747 4170 l
-4745 4173 l
-4745 4177 l
-4745 4182 l
-4745 4186 l
-4745 4191 l
-S
-4745 4191 m
-4745 4195 l
-4745 4199 l
-4745 4204 l
-4745 4208 l
-4743 4211 l
-4741 4213 l
-4741 4217 l
-4741 4222 l
-4741 4226 l
-4741 4231 l
-S
-4741 4231 m
-4741 4235 l
-4741 4240 l
-4738 4242 l
-4736 4244 l
-4736 4249 l
-4736 4253 l
-4736 4258 l
-4736 4262 l
-4736 4267 l
-4736 4271 l
-S
-4736 4271 m
-4734 4273 l
-4732 4275 l
-4732 4280 l
-4732 4284 l
-4732 4289 l
-4732 4293 l
-4732 4298 l
-4730 4300 l
-4727 4302 l
-4727 4307 l
-4727 4311 l
-S
-4727 4311 m
-4727 4316 l
-4727 4320 l
-4727 4325 l
-4725 4327 l
-4723 4329 l
-4723 4334 l
-4723 4338 l
-4723 4342 l
-4723 4347 l
-4721 4349 l
-4718 4351 l
-S
-4716 4372 m
-4718 4369 l
-4718 4365 l
-4718 4360 l
-4718 4356 l
-4718 4351 l
-S
-4676 3384 m
-4678 3386 l
-S
-4678 3386 m
-4678 3391 l
-4678 3395 l
-4680 3397 l
-4683 3400 l
-4683 3404 l
-4683 3408 l
-4683 3413 l
-4685 3415 l
-4687 3417 l
-4687 3422 l
-4687 3426 l
-S
-4687 3426 m
-4687 3431 l
-4689 3433 l
-4692 3435 l
-4692 3440 l
-4692 3444 l
-4692 3449 l
-4694 3451 l
-4696 3453 l
-4696 3458 l
-4696 3462 l
-4696 3467 l
-S
-4696 3467 m
-4698 3469 l
-4701 3471 l
-4701 3476 l
-4701 3480 l
-4701 3484 l
-4703 3487 l
-4705 3489 l
-4705 3493 l
-4705 3498 l
-4705 3502 l
-4707 3505 l
-4709 3507 l
-S
-4709 3507 m
-4709 3511 l
-4709 3516 l
-4709 3520 l
-4709 3525 l
-4712 3527 l
-4714 3529 l
-4714 3534 l
-4714 3538 l
-4714 3543 l
-4716 3545 l
-S
-4714 4392 m
-4714 4387 l
-4714 4383 l
-4714 4378 l
-4714 4374 l
-4716 4372 l
-S
-4714 4392 m
-4712 4394 l
-4709 4396 l
-4709 4401 l
-4709 4405 l
-4709 4410 l
-4709 4414 l
-4707 4416 l
-4705 4418 l
-4705 4423 l
-4705 4427 l
-4705 4432 l
-S
-4705 4432 m
-4703 4434 l
-4701 4436 l
-4701 4441 l
-4701 4445 l
-4701 4450 l
-4698 4452 l
-4696 4454 l
-4696 4459 l
-4696 4463 l
-4696 4468 l
-4694 4470 l
-4692 4472 l
-S
-4692 4472 m
-4692 4477 l
-4692 4481 l
-4692 4486 l
-4689 4488 l
-4687 4490 l
-4687 4494 l
-4687 4499 l
-4687 4503 l
-4685 4506 l
-4683 4508 l
-4683 4512 l
-S
-4676 4537 m
-4678 4535 l
-4678 4530 l
-4678 4526 l
-4678 4521 l
-4680 4519 l
-4683 4517 l
-4683 4512 l
-S
-4636 3259 m
-4638 3261 l
-4638 3265 l
-S
-4638 3265 m
-4638 3270 l
-4640 3272 l
-4642 3274 l
-4642 3279 l
-4642 3283 l
-4645 3286 l
-4647 3288 l
-4647 3292 l
-4647 3297 l
-4649 3299 l
-4651 3301 l
-4651 3306 l
-S
-4651 3306 m
-4651 3310 l
-4654 3312 l
-4656 3315 l
-4656 3319 l
-4656 3324 l
-4658 3326 l
-4660 3328 l
-4660 3333 l
-4660 3337 l
-4663 3339 l
-4665 3341 l
-4665 3346 l
-S
-4665 3346 m
-4665 3350 l
-4667 3353 l
-4669 3355 l
-4669 3359 l
-4669 3364 l
-4669 3368 l
-4671 3371 l
-4674 3373 l
-4674 3377 l
-4674 3382 l
-4676 3384 l
-S
-4669 4553 m
-4671 4550 l
-4674 4548 l
-4674 4544 l
-4674 4539 l
-4676 4537 l
-S
-4669 4553 m
-4669 4557 l
-4669 4561 l
-4669 4566 l
-4667 4568 l
-4665 4570 l
-4665 4575 l
-4665 4579 l
-4663 4582 l
-4660 4584 l
-4660 4588 l
-4660 4593 l
-S
-4660 4593 m
-4658 4595 l
-4656 4597 l
-4656 4602 l
-4656 4606 l
-4654 4608 l
-4651 4611 l
-4651 4615 l
-4651 4620 l
-4649 4622 l
-4647 4624 l
-4647 4629 l
-4647 4633 l
-S
-4636 4662 m
-4638 4660 l
-4638 4655 l
-4638 4651 l
-4640 4649 l
-4642 4646 l
-4642 4642 l
-4642 4637 l
-4645 4635 l
-4647 4633 l
-S
-4595 3156 m
-4598 3158 l
-4598 3163 l
-4598 3167 l
-4600 3169 l
-4602 3172 l
-4602 3176 l
-4604 3178 l
-4607 3181 l
-4607 3185 l
-S
-4607 3185 m
-4607 3190 l
-4609 3192 l
-4611 3194 l
-4611 3198 l
-4613 3201 l
-4616 3203 l
-4616 3207 l
-4616 3212 l
-4618 3214 l
-4620 3216 l
-4620 3221 l
-4622 3223 l
-4625 3225 l
-S
-4625 3225 m
-4625 3230 l
-4625 3234 l
-4627 3236 l
-4629 3239 l
-4629 3243 l
-4629 3248 l
-4631 3250 l
-4633 3252 l
-4633 3257 l
-4636 3259 l
-S
-4629 4673 m
-4631 4671 l
-4633 4669 l
-4633 4664 l
-4636 4662 l
-S
-4629 4673 m
-4629 4678 l
-4629 4682 l
-4627 4684 l
-4625 4687 l
-4625 4691 l
-4625 4696 l
-4622 4698 l
-4620 4700 l
-4620 4704 l
-4618 4707 l
-4616 4709 l
-4616 4713 l
-S
-4616 4713 m
-4616 4718 l
-4613 4720 l
-4611 4722 l
-4611 4727 l
-4609 4729 l
-4607 4731 l
-4607 4736 l
-4607 4740 l
-4604 4742 l
-4602 4745 l
-4602 4749 l
-4600 4751 l
-4598 4754 l
-S
-4595 4765 m
-4598 4763 l
-4598 4758 l
-4598 4754 l
-S
-4555 3067 m
-4557 3069 l
-4557 3073 l
-4560 3076 l
-4562 3078 l
-4562 3082 l
-4562 3087 l
-4564 3089 l
-4566 3091 l
-4566 3096 l
-4569 3098 l
-4571 3100 l
-4571 3105 l
-S
-4571 3105 m
-4573 3107 l
-4575 3109 l
-4575 3114 l
-4578 3116 l
-4580 3118 l
-4580 3122 l
-4582 3125 l
-4584 3127 l
-4584 3131 l
-4584 3136 l
-4587 3138 l
-4589 3140 l
-4589 3145 l
-S
-4589 3145 m
-4591 3147 l
-4593 3149 l
-4593 3154 l
-4595 3156 l
-S
-4580 4794 m
-4582 4792 l
-4584 4789 l
-4584 4785 l
-4587 4783 l
-4589 4780 l
-4589 4776 l
-4591 4774 l
-4593 4772 l
-4593 4767 l
-4595 4765 l
-S
-4580 4794 m
-4580 4798 l
-4580 4803 l
-4578 4805 l
-4575 4807 l
-4575 4812 l
-4573 4814 l
-4571 4816 l
-4571 4821 l
-4569 4823 l
-4566 4825 l
-4566 4830 l
-4564 4832 l
-4562 4834 l
-S
-4555 4854 m
-4557 4852 l
-4557 4847 l
-4557 4843 l
-4560 4841 l
-4562 4839 l
-4562 4834 l
-S
-4515 2991 m
-4517 2993 l
-4520 2995 l
-4522 2997 l
-4522 3002 l
-4524 3004 l
-4526 3006 l
-4526 3011 l
-4528 3013 l
-4531 3015 l
-4531 3020 l
-4533 3022 l
-4535 3024 l
-S
-4535 3024 m
-4535 3029 l
-4537 3031 l
-4540 3033 l
-4540 3038 l
-4542 3040 l
-4544 3042 l
-4544 3047 l
-4546 3049 l
-4549 3051 l
-4549 3055 l
-4551 3058 l
-4553 3060 l
-4553 3064 l
-S
-4555 3067 m
-4553 3064 l
-S
-4544 4874 m
-4546 4872 l
-4549 4870 l
-4549 4865 l
-4551 4863 l
-4553 4861 l
-4553 4856 l
-4555 4854 l
-S
-4544 4874 m
-4544 4879 l
-4542 4881 l
-4540 4883 l
-4540 4888 l
-4537 4890 l
-4535 4892 l
-4535 4897 l
-4533 4899 l
-4531 4901 l
-4531 4906 l
-4528 4908 l
-4526 4910 l
-4526 4915 l
-S
-4515 4930 m
-4517 4928 l
-4517 4923 l
-4520 4921 l
-4522 4919 l
-4524 4917 l
-4526 4915 l
-S
-4475 2915 m
-4477 2917 l
-4477 2921 l
-4479 2924 l
-4482 2926 l
-4482 2930 l
-4484 2933 l
-4486 2935 l
-4486 2939 l
-4488 2941 l
-4490 2944 l
-S
-4490 2944 m
-4493 2946 l
-4495 2948 l
-4495 2953 l
-4497 2955 l
-4499 2957 l
-4499 2962 l
-4502 2964 l
-4504 2966 l
-4504 2971 l
-4506 2973 l
-4508 2975 l
-4508 2979 l
-4511 2982 l
-4513 2984 l
-S
-4513 2984 m
-4513 2988 l
-4515 2991 l
-S
-4504 4955 m
-4504 4950 l
-4506 4948 l
-4508 4946 l
-4508 4941 l
-4511 4939 l
-4513 4937 l
-4513 4932 l
-4515 4930 l
-S
-4504 4955 m
-4502 4957 l
-4499 4959 l
-4499 4964 l
-4497 4966 l
-4495 4968 l
-4493 4970 l
-4490 4973 l
-4490 4977 l
-4488 4979 l
-4486 4982 l
-4486 4986 l
-4484 4988 l
-4482 4990 l
-4482 4995 l
-S
-4475 5002 m
-4477 4999 l
-4479 4997 l
-4482 4995 l
-S
-4435 2852 m
-4437 2854 l
-4439 2857 l
-4441 2859 l
-4441 2863 l
-S
-4441 2863 m
-4444 2866 l
-4446 2868 l
-4448 2870 l
-4450 2872 l
-4450 2877 l
-4452 2879 l
-4455 2881 l
-4455 2886 l
-4457 2888 l
-4459 2890 l
-4461 2892 l
-4464 2895 l
-4464 2899 l
-4466 2901 l
-4468 2903 l
-S
-4468 2903 m
-4468 2908 l
-4470 2910 l
-4473 2912 l
-4475 2915 l
-S
-4455 5035 m
-4457 5033 l
-4459 5031 l
-4459 5026 l
-4461 5024 l
-4464 5022 l
-4466 5020 l
-4468 5017 l
-4468 5013 l
-4470 5011 l
-4473 5008 l
-4473 5004 l
-4475 5002 l
-S
-4435 5069 m
-4437 5066 l
-4439 5064 l
-4441 5062 l
-4441 5058 l
-4444 5055 l
-4446 5053 l
-4446 5049 l
-4448 5046 l
-4450 5044 l
-4452 5042 l
-4455 5040 l
-4455 5035 l
-S
-4394 2790 m
-4397 2792 l
-4397 2796 l
-4399 2798 l
-4401 2801 l
-4403 2803 l
-4406 2805 l
-4406 2810 l
-4408 2812 l
-4410 2814 l
-4412 2816 l
-4414 2819 l
-4414 2823 l
-S
-4414 2823 m
-4417 2825 l
-4419 2828 l
-4421 2830 l
-4423 2832 l
-4423 2836 l
-4426 2839 l
-4428 2841 l
-4430 2843 l
-4432 2845 l
-4432 2850 l
-4435 2852 l
-S
-4432 5075 m
-4432 5071 l
-4435 5069 l
-S
-4432 5075 m
-4430 5078 l
-4428 5080 l
-4426 5082 l
-4423 5084 l
-4423 5089 l
-4421 5091 l
-4419 5093 l
-4417 5096 l
-4414 5098 l
-4414 5102 l
-4412 5104 l
-4410 5107 l
-4408 5109 l
-4406 5111 l
-4406 5116 l
-S
-4394 5131 m
-4397 5129 l
-4397 5125 l
-4399 5122 l
-4401 5120 l
-4403 5118 l
-4406 5116 l
-S
-4354 2736 m
-4356 2738 l
-4359 2740 l
-4361 2743 l
-S
-4361 2743 m
-4363 2745 l
-4365 2747 l
-4365 2752 l
-4368 2754 l
-4370 2756 l
-4372 2758 l
-4374 2760 l
-4377 2763 l
-4379 2765 l
-4379 2769 l
-4381 2772 l
-4383 2774 l
-4385 2776 l
-4388 2778 l
-4388 2783 l
-S
-4388 2783 m
-4390 2785 l
-4392 2787 l
-4394 2790 l
-S
-4374 5156 m
-4377 5154 l
-4379 5151 l
-4381 5149 l
-4383 5147 l
-4385 5145 l
-4388 5142 l
-4388 5138 l
-4390 5136 l
-4392 5133 l
-4394 5131 l
-S
-4354 5185 m
-4356 5183 l
-4359 5180 l
-4361 5178 l
-4363 5176 l
-4365 5174 l
-4365 5169 l
-4368 5167 l
-4370 5165 l
-4372 5163 l
-4374 5160 l
-4374 5156 l
-S
-4314 2682 m
-4316 2685 l
-4318 2687 l
-4321 2689 l
-4323 2691 l
-4325 2693 l
-4325 2698 l
-4327 2700 l
-4330 2702 l
-S
-4330 2702 m
-4332 2705 l
-4334 2707 l
-4336 2709 l
-4339 2711 l
-4339 2716 l
-4341 2718 l
-4343 2720 l
-4345 2723 l
-4347 2725 l
-4350 2727 l
-4352 2729 l
-4352 2734 l
-4354 2736 l
-S
-4347 5196 m
-4350 5194 l
-4352 5192 l
-4352 5187 l
-4354 5185 l
-S
-4347 5196 m
-4345 5198 l
-4343 5201 l
-4341 5203 l
-4339 5205 l
-4339 5209 l
-4336 5212 l
-4334 5214 l
-4332 5216 l
-4330 5218 l
-4327 5221 l
-4325 5223 l
-4325 5227 l
-4323 5230 l
-4321 5232 l
-4318 5234 l
-4316 5236 l
-S
-4314 5239 m
-4316 5236 l
-S
-4274 2633 m
-4276 2635 l
-4278 2638 l
-4280 2640 l
-4283 2642 l
-4285 2644 l
-4287 2647 l
-4289 2649 l
-4289 2653 l
-4292 2655 l
-4294 2658 l
-4296 2660 l
-4298 2662 l
-S
-4298 2662 m
-4301 2664 l
-4303 2667 l
-4305 2669 l
-4307 2671 l
-4309 2673 l
-4312 2676 l
-4312 2680 l
-4314 2682 l
-S
-4314 5239 m
-4312 5241 l
-4309 5243 l
-4307 5245 l
-4307 5250 l
-4305 5252 l
-4303 5254 l
-4301 5256 l
-4298 5259 l
-4296 5261 l
-4294 5263 l
-4292 5265 l
-4289 5268 l
-4289 5272 l
-4287 5274 l
-4285 5277 l
-S
-4274 5288 m
-4276 5285 l
-4278 5283 l
-4280 5281 l
-4283 5279 l
-4285 5277 l
-S
-4233 2584 m
-4236 2586 l
-4238 2588 l
-4240 2591 l
-4240 2595 l
-4242 2597 l
-4245 2600 l
-4247 2602 l
-4249 2604 l
-4251 2606 l
-4254 2609 l
-4256 2611 l
-4258 2613 l
-4260 2615 l
-4263 2617 l
-4265 2620 l
-4267 2622 l
-S
-4267 2622 m
-4267 2626 l
-4269 2629 l
-4271 2631 l
-4274 2633 l
-S
-4249 5317 m
-4251 5314 l
-4254 5312 l
-4256 5310 l
-4258 5308 l
-4260 5306 l
-4263 5303 l
-4265 5301 l
-4267 5299 l
-4267 5294 l
-4269 5292 l
-4271 5290 l
-4274 5288 l
-S
-4233 5337 m
-4236 5335 l
-4236 5330 l
-4238 5328 l
-4240 5326 l
-4242 5323 l
-4245 5321 l
-4247 5319 l
-4249 5317 l
-S
-4193 2544 m
-4196 2546 l
-4198 2548 l
-4200 2550 l
-4202 2553 l
-4204 2555 l
-4207 2557 l
-4209 2559 l
-4211 2562 l
-4213 2564 l
-4216 2566 l
-4218 2568 l
-4220 2571 l
-4222 2573 l
-4225 2575 l
-4227 2577 l
-4229 2579 l
-4231 2582 l
-S
-4233 2584 m
-4231 2582 l
-S
-4213 5357 m
-4216 5355 l
-4218 5352 l
-4220 5350 l
-4222 5348 l
-4225 5346 l
-4227 5344 l
-4229 5341 l
-4231 5339 l
-4233 5337 l
-S
-4193 5377 m
-4196 5375 l
-4198 5373 l
-4200 5370 l
-4202 5368 l
-4204 5366 l
-4207 5364 l
-4209 5361 l
-4211 5359 l
-4213 5357 l
-S
-4153 2499 m
-4155 2501 l
-S
-4155 2501 m
-4158 2504 l
-4160 2506 l
-4162 2508 l
-4164 2510 l
-4166 2512 l
-4169 2515 l
-4171 2517 l
-4173 2519 l
-4175 2521 l
-4178 2524 l
-4180 2526 l
-4182 2528 l
-4184 2530 l
-4187 2533 l
-4189 2535 l
-4191 2537 l
-4191 2542 l
-S
-4193 2544 m
-4191 2542 l
-S
-4173 5397 m
-4175 5395 l
-4178 5393 l
-4180 5390 l
-4182 5388 l
-4184 5386 l
-4187 5384 l
-4189 5382 l
-4191 5379 l
-4193 5377 l
-S
-4153 5422 m
-4155 5420 l
-4158 5417 l
-4160 5415 l
-4162 5413 l
-4164 5411 l
-4166 5408 l
-4169 5406 l
-4171 5404 l
-4173 5402 l
-4173 5397 l
-S
-4113 2463 m
-4117 2463 l
-4120 2466 l
-4122 2468 l
-4124 2470 l
-4126 2472 l
-4128 2474 l
-4131 2477 l
-4133 2479 l
-4135 2481 l
-4137 2483 l
-4140 2486 l
-4142 2488 l
-4144 2490 l
-4146 2492 l
-4149 2495 l
-4151 2497 l
-4153 2499 l
-S
-4137 5437 m
-4140 5435 l
-4142 5433 l
-4144 5431 l
-4146 5428 l
-4149 5426 l
-4151 5424 l
-4153 5422 l
-S
-4113 5457 m
-4115 5455 l
-4117 5453 l
-4120 5451 l
-4122 5449 l
-4124 5446 l
-4126 5444 l
-4128 5442 l
-4131 5440 l
-4135 5440 l
-4137 5437 l
-S
-4073 2423 m
-4075 2425 l
-4077 2428 l
-4079 2430 l
-4082 2432 l
-4084 2434 l
-4086 2436 l
-4088 2439 l
-4090 2441 l
-4093 2443 l
-4095 2445 l
-4097 2448 l
-4099 2450 l
-4102 2452 l
-4104 2454 l
-4106 2457 l
-4108 2459 l
-4111 2461 l
-S
-4113 2463 m
-4111 2461 l
-S
-4093 5478 m
-4095 5475 l
-4097 5473 l
-4099 5471 l
-4102 5469 l
-4104 5466 l
-4106 5464 l
-4108 5462 l
-4111 5460 l
-4113 5457 l
-S
-4073 5498 m
-4075 5495 l
-4077 5493 l
-4079 5491 l
-4082 5489 l
-4084 5487 l
-4086 5484 l
-4088 5482 l
-4090 5480 l
-4093 5478 l
-S
-4032 2387 m
-4035 2390 l
-4037 2392 l
-4039 2394 l
-4041 2396 l
-4044 2399 l
-4046 2401 l
-4048 2403 l
-4050 2405 l
-4053 2407 l
-4055 2410 l
-4057 2412 l
-4059 2414 l
-4064 2414 l
-4066 2416 l
-4068 2419 l
-4070 2421 l
-S
-4073 2423 m
-4070 2421 l
-S
-4048 5518 m
-4050 5516 l
-4053 5513 l
-4055 5511 l
-4057 5509 l
-4059 5507 l
-4061 5504 l
-4064 5502 l
-4068 5502 l
-4070 5500 l
-4073 5498 l
-S
-4032 5529 m
-4037 5529 l
-4039 5527 l
-4041 5525 l
-4044 5522 l
-4046 5520 l
-4048 5518 l
-S
-3992 2356 m
-3994 2358 l
-3997 2361 l
-3999 2363 l
-4001 2365 l
-4006 2365 l
-4008 2367 l
-4010 2369 l
-4012 2372 l
-4015 2374 l
-4017 2376 l
-4019 2378 l
-4021 2381 l
-S
-4021 2381 m
-4023 2383 l
-4026 2385 l
-4028 2387 l
-4032 2387 l
-S
-3999 5558 m
-4001 5556 l
-4006 5556 l
-4008 5554 l
-4010 5551 l
-4012 5549 l
-4015 5547 l
-4017 5545 l
-4019 5542 l
-4021 5540 l
-4023 5538 l
-4026 5536 l
-4028 5533 l
-4030 5531 l
-4032 5529 l
-S
-3992 5565 m
-3994 5563 l
-3997 5560 l
-3999 5558 l
-S
-3952 2325 m
-3954 2327 l
-3956 2329 l
-3961 2329 l
-3963 2331 l
-3965 2334 l
-3968 2336 l
-3970 2338 l
-3972 2340 l
-S
-3972 2340 m
-3974 2343 l
-3979 2343 l
-3981 2345 l
-3983 2347 l
-3985 2349 l
-3988 2352 l
-3990 2354 l
-3992 2356 l
-S
-3952 5596 m
-3954 5594 l
-3956 5592 l
-3961 5592 l
-3963 5589 l
-3965 5587 l
-3968 5585 l
-3970 5583 l
-3972 5580 l
-3974 5578 l
-3977 5576 l
-3979 5574 l
-3983 5574 l
-3985 5571 l
-3988 5569 l
-3990 5567 l
-3992 5565 l
-S
-3912 2293 m
-3914 2296 l
-3916 2298 l
-3918 2300 l
-S
-3918 2300 m
-3921 2302 l
-3925 2302 l
-3927 2305 l
-3930 2307 l
-3932 2309 l
-3934 2311 l
-3936 2314 l
-3939 2316 l
-3943 2316 l
-3945 2318 l
-3947 2320 l
-3950 2323 l
-3952 2325 l
-S
-3950 5598 m
-3952 5596 l
-S
-3912 5627 m
-3914 5625 l
-3916 5623 l
-3918 5621 l
-3921 5618 l
-3925 5618 l
-3927 5616 l
-3930 5614 l
-3932 5612 l
-3934 5609 l
-3936 5607 l
-3939 5605 l
-3943 5605 l
-3945 5603 l
-3947 5601 l
-3950 5598 l
-S
-3872 2267 m
-3876 2267 l
-3878 2269 l
-3880 2271 l
-3883 2273 l
-3885 2276 l
-3889 2276 l
-3892 2278 l
-3894 2280 l
-3896 2282 l
-3898 2285 l
-3901 2287 l
-3903 2289 l
-3907 2289 l
-3909 2291 l
-3912 2293 l
-S
-3896 5638 m
-3898 5636 l
-3901 5634 l
-3903 5632 l
-3907 5632 l
-3909 5630 l
-3912 5627 l
-S
-3872 5654 m
-3876 5654 l
-3878 5652 l
-3880 5650 l
-3883 5647 l
-3885 5645 l
-3887 5643 l
-3889 5641 l
-3894 5641 l
-3896 5638 l
-S
-3831 2240 m
-3836 2240 l
-3838 2242 l
-3840 2244 l
-3842 2247 l
-3845 2249 l
-3849 2249 l
-3851 2251 l
-3854 2253 l
-3856 2256 l
-3858 2258 l
-3863 2258 l
-3865 2260 l
-S
-3865 2260 m
-3867 2262 l
-3869 2264 l
-3872 2267 l
-S
-3838 5679 m
-3840 5676 l
-3842 5674 l
-3845 5672 l
-3849 5672 l
-3851 5670 l
-3854 5668 l
-3856 5665 l
-3858 5663 l
-3863 5663 l
-3865 5661 l
-3867 5659 l
-3869 5656 l
-3872 5654 l
-S
-3831 5681 m
-3836 5681 l
-3838 5679 l
-S
-3791 2213 m
-3796 2213 l
-3798 2215 l
-3800 2218 l
-3802 2220 l
-S
-3802 2220 m
-3804 2222 l
-3809 2222 l
-3811 2224 l
-3813 2226 l
-3816 2229 l
-3818 2231 l
-3822 2231 l
-3825 2233 l
-3827 2235 l
-3829 2238 l
-3831 2240 l
-S
-3831 5681 m
-3829 5683 l
-3827 5685 l
-3825 5688 l
-3822 5690 l
-3818 5690 l
-3816 5692 l
-3813 5694 l
-3811 5697 l
-3809 5699 l
-3804 5699 l
-3802 5701 l
-3800 5703 l
-3796 5703 l
-3793 5706 l
-3791 5708 l
-S
-3751 2186 m
-3753 2188 l
-3755 2191 l
-3760 2191 l
-3762 2193 l
-3764 2195 l
-3766 2197 l
-3769 2200 l
-3773 2200 l
-3775 2202 l
-3778 2204 l
-3782 2204 l
-3784 2206 l
-3787 2209 l
-3789 2211 l
-3791 2213 l
-S
-3775 5719 m
-3778 5717 l
-3780 5714 l
-3782 5712 l
-3787 5712 l
-3789 5710 l
-3791 5708 l
-S
-3751 5735 m
-3753 5732 l
-3755 5730 l
-3758 5728 l
-3760 5726 l
-3764 5726 l
-3766 5723 l
-3769 5721 l
-3773 5721 l
-3775 5719 l
-S
-3711 2164 m
-3713 2166 l
-3715 2168 l
-3720 2168 l
-3722 2171 l
-3724 2173 l
-3729 2173 l
-3731 2175 l
-3733 2177 l
-3737 2177 l
-3740 2180 l
-S
-3740 2180 m
-3742 2182 l
-3744 2184 l
-3746 2186 l
-3751 2186 l
-S
-3711 5757 m
-3713 5755 l
-3715 5752 l
-3720 5752 l
-3722 5750 l
-3724 5748 l
-3729 5748 l
-3731 5746 l
-3733 5744 l
-3735 5741 l
-3737 5739 l
-3742 5739 l
-3744 5737 l
-3746 5735 l
-3751 5735 l
-S
-3670 2142 m
-3673 2144 l
-3675 2146 l
-3679 2146 l
-3682 2148 l
-3684 2150 l
-3688 2150 l
-3691 2153 l
-3693 2155 l
-3697 2155 l
-3699 2157 l
-3702 2159 l
-3706 2159 l
-3708 2162 l
-3711 2164 l
-S
-3704 5759 m
-3706 5757 l
-3711 5757 l
-S
-3670 5779 m
-3673 5777 l
-3675 5775 l
-3679 5775 l
-3682 5773 l
-3684 5770 l
-3688 5770 l
-3691 5768 l
-3693 5766 l
-3697 5766 l
-3699 5764 l
-3702 5761 l
-3704 5759 l
-S
-3630 2119 m
-3632 2121 l
-3635 2124 l
-3639 2124 l
-3641 2126 l
-3644 2128 l
-3648 2128 l
-3650 2130 l
-3653 2133 l
-3657 2133 l
-3659 2135 l
-3661 2137 l
-3664 2139 l
-S
-3670 2142 m
-3666 2142 l
-3664 2139 l
-S
-3630 5797 m
-3635 5797 l
-3637 5795 l
-3639 5793 l
-3644 5793 l
-3646 5790 l
-3648 5788 l
-3653 5788 l
-3655 5786 l
-3657 5784 l
-3661 5784 l
-3664 5781 l
-3666 5779 l
-3670 5779 l
-S
-3590 2101 m
-3594 2101 l
-3597 2104 l
-3599 2106 l
-3603 2106 l
-3606 2108 l
-3608 2110 l
-3612 2110 l
-3615 2112 l
-3617 2115 l
-3621 2115 l
-3623 2117 l
-3626 2119 l
-3630 2119 l
-S
-3628 5799 m
-3630 5797 l
-S
-3590 5819 m
-3592 5817 l
-3594 5815 l
-3599 5815 l
-3601 5813 l
-3603 5811 l
-3608 5811 l
-3612 5811 l
-3615 5808 l
-3617 5806 l
-3621 5806 l
-3623 5804 l
-3626 5802 l
-3628 5799 l
-S
-3550 2083 m
-3554 2083 l
-3556 2086 l
-3559 2088 l
-3563 2088 l
-3565 2090 l
-3568 2092 l
-3572 2092 l
-3577 2092 l
-3579 2095 l
-3581 2097 l
-3585 2097 l
-3588 2099 l
-S
-3590 2101 m
-3588 2099 l
-S
-3550 5837 m
-3554 5837 l
-3556 5835 l
-3559 5833 l
-3563 5833 l
-3565 5831 l
-3568 5828 l
-3572 5828 l
-3574 5826 l
-3577 5824 l
-3581 5824 l
-3583 5822 l
-3585 5819 l
-3590 5819 l
-S
-3510 2066 m
-3514 2066 l
-3516 2068 l
-3518 2070 l
-3523 2070 l
-3527 2070 l
-3530 2072 l
-3532 2075 l
-3536 2075 l
-3539 2077 l
-3541 2079 l
-3545 2079 l
-3548 2081 l
-3550 2083 l
-S
-3548 5840 m
-3550 5837 l
-S
-3510 5855 m
-3514 5855 l
-3516 5853 l
-3518 5851 l
-3523 5851 l
-3525 5849 l
-3527 5846 l
-3532 5846 l
-3536 5846 l
-3539 5844 l
-3541 5842 l
-3545 5842 l
-3548 5840 l
-S
-3469 2048 m
-3474 2048 l
-3476 2050 l
-3478 2052 l
-3483 2052 l
-3485 2054 l
-3487 2057 l
-3492 2057 l
-3496 2057 l
-3498 2059 l
-S
-3498 2059 m
-3501 2061 l
-3505 2061 l
-3507 2063 l
-3510 2066 l
-S
-3469 5873 m
-3472 5871 l
-3474 5869 l
-3478 5869 l
-3483 5869 l
-3485 5866 l
-3487 5864 l
-3492 5864 l
-3494 5862 l
-3496 5860 l
-3501 5860 l
-3505 5860 l
-3507 5857 l
-3510 5855 l
-S
-3429 2030 m
-3431 2032 l
-3434 2034 l
-3438 2034 l
-3440 2037 l
-3442 2039 l
-3447 2039 l
-3451 2039 l
-3454 2041 l
-3456 2043 l
-3460 2043 l
-3463 2045 l
-3465 2048 l
-3469 2048 l
-S
-3454 5880 m
-3456 5878 l
-3460 5878 l
-3463 5875 l
-3465 5873 l
-3469 5873 l
-S
-3429 5887 m
-3434 5887 l
-3438 5887 l
-3440 5884 l
-3442 5882 l
-3447 5882 l
-3451 5882 l
-3454 5880 l
-S
-3389 2016 m
-3393 2016 l
-3396 2019 l
-S
-3396 2019 m
-3398 2021 l
-3402 2021 l
-3405 2023 l
-3407 2025 l
-3411 2025 l
-3416 2025 l
-3418 2028 l
-3420 2030 l
-3425 2030 l
-3429 2030 l
-S
-3389 5904 m
-3391 5902 l
-3393 5900 l
-3398 5900 l
-3402 5900 l
-3405 5898 l
-3407 5895 l
-3411 5895 l
-3416 5895 l
-3418 5893 l
-3420 5891 l
-3425 5891 l
-3427 5889 l
-3429 5887 l
-S
-3349 2003 m
-3353 2003 l
-3355 2005 l
-3358 2007 l
-3362 2007 l
-3367 2007 l
-3369 2010 l
-3371 2012 l
-3375 2012 l
-3380 2012 l
-3382 2014 l
-3384 2016 l
-3389 2016 l
-S
-3349 5918 m
-3353 5918 l
-3355 5916 l
-3358 5913 l
-3362 5913 l
-3367 5913 l
-3369 5911 l
-3371 5909 l
-3375 5909 l
-3378 5907 l
-3380 5904 l
-3384 5904 l
-3389 5904 l
-S
-3308 1990 m
-3313 1990 l
-3315 1992 l
-3317 1994 l
-3322 1994 l
-3326 1994 l
-3329 1996 l
-3331 1999 l
-3335 1999 l
-3340 1999 l
-3342 2001 l
-3344 2003 l
-3349 2003 l
-S
-3342 5920 m
-3344 5918 l
-3349 5918 l
-S
-3308 5931 m
-3311 5929 l
-3313 5927 l
-3317 5927 l
-3322 5927 l
-3326 5927 l
-3329 5925 l
-3331 5922 l
-3335 5922 l
-3340 5922 l
-3342 5920 l
-S
-3268 1976 m
-3270 1978 l
-S
-3270 1978 m
-3273 1981 l
-3277 1981 l
-3282 1981 l
-3284 1983 l
-3286 1985 l
-3291 1985 l
-3295 1985 l
-3299 1985 l
-3302 1987 l
-3304 1990 l
-3308 1990 l
-S
-3268 5940 m
-3273 5940 l
-3277 5940 l
-3282 5940 l
-3284 5938 l
-3286 5936 l
-3291 5936 l
-3295 5936 l
-3297 5933 l
-3299 5931 l
-3304 5931 l
-3308 5931 l
-S
-3228 1967 m
-3232 1967 l
-3237 1967 l
-3239 1969 l
-3241 1972 l
-3246 1972 l
-3250 1972 l
-3255 1972 l
-3257 1974 l
-3259 1976 l
-3264 1976 l
-3268 1976 l
-S
-3228 5954 m
-3232 5954 l
-3235 5951 l
-3237 5949 l
-3241 5949 l
-3246 5949 l
-3250 5949 l
-3253 5947 l
-3255 5945 l
-3259 5945 l
-3264 5945 l
-3266 5942 l
-3268 5940 l
-S
-3188 1958 m
-3192 1958 l
-3197 1958 l
-3201 1958 l
-3203 1961 l
-3206 1963 l
-3210 1963 l
-3215 1963 l
-3219 1963 l
-3221 1965 l
-3224 1967 l
-3228 1967 l
-S
-3203 5960 m
-3206 5958 l
-3210 5958 l
-3215 5958 l
-3219 5958 l
-3221 5956 l
-3224 5954 l
-3228 5954 l
-S
-3188 5962 m
-3192 5962 l
-3197 5962 l
-3201 5962 l
-3203 5960 l
-S
-3148 1945 m
-3150 1947 l
-3152 1949 l
-3156 1949 l
-3161 1949 l
-3165 1949 l
-3168 1952 l
-3170 1954 l
-3174 1954 l
-3179 1954 l
-3183 1954 l
-3186 1956 l
-3188 1958 l
-S
-3188 5962 m
-3186 5965 l
-3183 5967 l
-3179 5967 l
-3174 5967 l
-3170 5967 l
-3168 5969 l
-3165 5971 l
-3161 5971 l
-3156 5971 l
-3152 5971 l
-3148 5971 l
-S
-3107 1936 m
-3110 1938 l
-S
-3110 1938 m
-3112 1940 l
-3116 1940 l
-3121 1940 l
-3125 1940 l
-3127 1943 l
-3130 1945 l
-3134 1945 l
-3139 1945 l
-3143 1945 l
-3148 1945 l
-S
-3107 5980 m
-3112 5980 l
-3116 5980 l
-3121 5980 l
-3125 5980 l
-3127 5978 l
-3130 5976 l
-3134 5976 l
-3139 5976 l
-3143 5976 l
-3145 5974 l
-3148 5971 l
-S
-3067 1932 m
-3072 1932 l
-3076 1932 l
-3081 1932 l
-3085 1932 l
-3087 1934 l
-3089 1936 l
-3094 1936 l
-3098 1936 l
-3103 1936 l
-3107 1936 l
-S
-3067 5989 m
-3072 5989 l
-3076 5989 l
-3081 5989 l
-3083 5987 l
-3085 5985 l
-3089 5985 l
-3094 5985 l
-3098 5985 l
-3103 5985 l
-3105 5983 l
-3107 5980 l
-S
-3027 1923 m
-3031 1923 l
-3036 1923 l
-3038 1925 l
-3040 1927 l
-3045 1927 l
-3049 1927 l
-3054 1927 l
-3058 1927 l
-3060 1929 l
-3063 1932 l
-3067 1932 l
-S
-3027 5998 m
-3031 5998 l
-3034 5996 l
-3036 5994 l
-3040 5994 l
-3045 5994 l
-3049 5994 l
-3054 5994 l
-3056 5992 l
-3058 5989 l
-3063 5989 l
-3067 5989 l
-S
-2987 1918 m
-2991 1918 l
-2996 1918 l
-3000 1918 l
-3005 1918 l
-3007 1920 l
-3009 1923 l
-3013 1923 l
-3018 1923 l
-3022 1923 l
-3027 1923 l
-S
-3002 6000 m
-3005 5998 l
-3009 5998 l
-3013 5998 l
-3018 5998 l
-3022 5998 l
-3027 5998 l
-S
-2987 6003 m
-2991 6003 l
-2996 6003 l
-3000 6003 l
-3002 6000 l
-S
-2946 1914 m
-2951 1914 l
-2955 1914 l
-2960 1914 l
-2964 1914 l
-2969 1914 l
-2973 1914 l
-2975 1916 l
-2978 1918 l
-2982 1918 l
-2987 1918 l
-S
-2987 6003 m
-2982 6003 l
-2978 6003 l
-2973 6003 l
-2971 6005 l
-2969 6007 l
-2964 6007 l
-2960 6007 l
-2955 6007 l
-2951 6007 l
-2946 6007 l
-S
-2906 1909 m
-2911 1909 l
-2915 1909 l
-2920 1909 l
-2924 1909 l
-2929 1909 l
-2933 1909 l
-2938 1909 l
-2942 1909 l
-2944 1911 l
-2946 1914 l
-S
-2906 6012 m
-2911 6012 l
-2915 6012 l
-2920 6012 l
-2924 6012 l
-2929 6012 l
-2933 6012 l
-2935 6009 l
-2938 6007 l
-2942 6007 l
-2946 6007 l
-S
-2866 1905 m
-2870 1905 l
-2875 1905 l
-2879 1905 l
-2884 1905 l
-2888 1905 l
-2893 1905 l
-2897 1905 l
-2902 1905 l
-2904 1907 l
-2906 1909 l
-S
-2866 6016 m
-2870 6016 l
-2875 6016 l
-2879 6016 l
-2884 6016 l
-2888 6016 l
-2893 6016 l
-2895 6014 l
-2897 6012 l
-2902 6012 l
-2906 6012 l
-S
-2826 1900 m
-2830 1900 l
-2835 1900 l
-2839 1900 l
-2844 1900 l
-2848 1900 l
-2853 1900 l
-2855 1902 l
-2857 1905 l
-2862 1905 l
-2866 1905 l
-S
-2826 6021 m
-2830 6021 l
-2835 6021 l
-2839 6021 l
-2841 6018 l
-2844 6016 l
-2848 6016 l
-2853 6016 l
-2857 6016 l
-2862 6016 l
-2866 6016 l
-S
-2826 1900 m
-2821 1900 l
-2817 1900 l
-2812 1900 l
-2808 1900 l
-2803 1900 l
-2799 1900 l
-2794 1900 l
-2790 1900 l
-2786 1900 l
-S
-2786 6021 m
-2790 6021 l
-2794 6021 l
-2799 6021 l
-2803 6021 l
-2808 6021 l
-2812 6021 l
-2817 6021 l
-2821 6021 l
-2826 6021 l
-S
-2745 1896 m
-2750 1896 l
-2754 1896 l
-2759 1896 l
-2763 1896 l
-2768 1896 l
-2772 1896 l
-2777 1896 l
-2779 1898 l
-S
-2786 1900 m
-2781 1900 l
-2779 1898 l
-S
-2745 6025 m
-2750 6025 l
-2754 6025 l
-2757 6023 l
-2759 6021 l
-2763 6021 l
-2768 6021 l
-2772 6021 l
-2777 6021 l
-2781 6021 l
-2786 6021 l
-S
-2705 1896 m
-2710 1896 l
-2714 1896 l
-2719 1896 l
-2723 1896 l
-2727 1896 l
-2732 1896 l
-2736 1896 l
-2741 1896 l
-2745 1896 l
-S
-2705 6025 m
-2710 6025 l
-2714 6025 l
-2719 6025 l
-2723 6025 l
-2727 6025 l
-2732 6025 l
-2736 6025 l
-2741 6025 l
-2745 6025 l
-S
-2665 1896 m
-2669 1896 l
-2674 1896 l
-2678 1896 l
-2683 1896 l
-2687 1896 l
-2692 1896 l
-2696 1896 l
-2701 1896 l
-2705 1896 l
-S
-2665 6025 m
-2669 6025 l
-2674 6025 l
-2678 6025 l
-2683 6025 l
-2687 6025 l
-2692 6025 l
-2696 6025 l
-2701 6025 l
-2705 6025 l
-S
-2625 1896 m
-2629 1896 l
-2634 1896 l
-2638 1896 l
-2643 1896 l
-2647 1896 l
-2651 1896 l
-2656 1896 l
-2660 1896 l
-2665 1896 l
-S
-2625 6021 m
-2629 6021 l
-2631 6023 l
-2634 6025 l
-2638 6025 l
-2643 6025 l
-2647 6025 l
-2651 6025 l
-2656 6025 l
-2660 6025 l
-2665 6025 l
-S
-2614 1898 m
-2616 1896 l
-2620 1896 l
-2625 1896 l
-S
-2584 1900 m
-2589 1900 l
-2593 1900 l
-2598 1900 l
-2602 1900 l
-2607 1900 l
-2611 1900 l
-2614 1898 l
-S
-2584 6021 m
-2589 6021 l
-2593 6021 l
-2598 6021 l
-2602 6021 l
-2607 6021 l
-2611 6021 l
-2616 6021 l
-2620 6021 l
-2625 6021 l
-S
-2584 1900 m
-2580 1900 l
-2576 1900 l
-2571 1900 l
-2567 1900 l
-2562 1900 l
-2558 1900 l
-2553 1900 l
-2549 1900 l
-2544 1900 l
-S
-2544 6016 m
-2546 6018 l
-2549 6021 l
-2553 6021 l
-2558 6021 l
-2562 6021 l
-2567 6021 l
-2571 6021 l
-2576 6021 l
-2580 6021 l
-2584 6021 l
-S
-2544 1900 m
-2540 1900 l
-2538 1902 l
-2535 1905 l
-2531 1905 l
-2526 1905 l
-2522 1905 l
-2517 1905 l
-2513 1905 l
-2508 1905 l
-2504 1905 l
-S
-2504 6016 m
-2508 6016 l
-2513 6016 l
-2517 6016 l
-2522 6016 l
-2526 6016 l
-2531 6016 l
-2535 6016 l
-2540 6016 l
-2544 6016 l
-S
-2464 1909 m
-2468 1909 l
-2473 1909 l
-2477 1909 l
-2482 1909 l
-2484 1907 l
-2486 1905 l
-2491 1905 l
-2495 1905 l
-2500 1905 l
-2504 1905 l
-S
-2464 6012 m
-2468 6012 l
-2473 6012 l
-2477 6012 l
-2482 6012 l
-2486 6012 l
-2491 6012 l
-2493 6014 l
-2495 6016 l
-2500 6016 l
-2504 6016 l
-S
-2424 1914 m
-2428 1914 l
-2433 1914 l
-2437 1914 l
-2441 1914 l
-2444 1911 l
-2446 1909 l
-2450 1909 l
-2455 1909 l
-2459 1909 l
-2464 1909 l
-S
-2424 6007 m
-2428 6007 l
-2433 6007 l
-2437 6007 l
-2441 6007 l
-2446 6007 l
-2450 6007 l
-2453 6009 l
-2455 6012 l
-2459 6012 l
-2464 6012 l
-S
-2383 1918 m
-2388 1918 l
-2392 1918 l
-2397 1918 l
-2401 1918 l
-2406 1918 l
-2410 1918 l
-2412 1916 l
-2415 1914 l
-2419 1914 l
-2424 1914 l
-S
-2383 5998 m
-2386 6000 l
-S
-2386 6000 m
-2388 6003 l
-2392 6003 l
-2397 6003 l
-2401 6003 l
-2406 6003 l
-2410 6003 l
-2415 6003 l
-2417 6005 l
-2419 6007 l
-2424 6007 l
-S
-2343 1927 m
-2348 1927 l
-2352 1927 l
-2354 1925 l
-2357 1923 l
-2361 1923 l
-2365 1923 l
-2370 1923 l
-2374 1923 l
-2379 1923 l
-2381 1920 l
-2383 1918 l
-S
-2343 5994 m
-2348 5994 l
-2352 5994 l
-2357 5994 l
-2359 5996 l
-2361 5998 l
-2365 5998 l
-2370 5998 l
-2374 5998 l
-2379 5998 l
-2383 5998 l
-S
-2303 1936 m
-2305 1934 l
-2307 1932 l
-2312 1932 l
-2316 1932 l
-2321 1932 l
-2325 1932 l
-2327 1929 l
-2330 1927 l
-2334 1927 l
-2339 1927 l
-2343 1927 l
-S
-2303 5985 m
-2305 5987 l
-2307 5989 l
-2312 5989 l
-2316 5989 l
-2321 5989 l
-2325 5989 l
-2330 5989 l
-2332 5992 l
-2334 5994 l
-2339 5994 l
-2343 5994 l
-S
-2283 1938 m
-2285 1936 l
-2290 1936 l
-2294 1936 l
-2298 1936 l
-2303 1936 l
-S
-2263 1940 m
-2267 1940 l
-2272 1940 l
-2276 1940 l
-2281 1940 l
-2283 1938 l
-S
-2263 5976 m
-2265 5978 l
-2267 5980 l
-2272 5980 l
-2276 5980 l
-2281 5980 l
-2283 5983 l
-2285 5985 l
-2290 5985 l
-2294 5985 l
-2298 5985 l
-2303 5985 l
-S
-2263 1940 m
-2260 1943 l
-2258 1945 l
-2254 1945 l
-2249 1945 l
-2245 1945 l
-2240 1945 l
-2238 1947 l
-2236 1949 l
-2231 1949 l
-2227 1949 l
-2222 1949 l
-S
-2222 5967 m
-2225 5969 l
-2227 5971 l
-2231 5971 l
-2236 5971 l
-2240 5971 l
-2243 5974 l
-2245 5976 l
-2249 5976 l
-2254 5976 l
-2258 5976 l
-2263 5976 l
-S
-2182 1963 m
-2184 1961 l
-2187 1958 l
-2191 1958 l
-2196 1958 l
-2200 1958 l
-2202 1956 l
-2205 1954 l
-2209 1954 l
-2214 1954 l
-2218 1954 l
-2220 1952 l
-2222 1949 l
-S
-2182 5958 m
-2184 5960 l
-S
-2184 5960 m
-2187 5962 l
-2191 5962 l
-2196 5962 l
-2200 5962 l
-2202 5965 l
-2205 5967 l
-2209 5967 l
-2214 5967 l
-2218 5967 l
-2222 5967 l
-S
-2142 1972 m
-2147 1972 l
-2149 1969 l
-2151 1967 l
-2155 1967 l
-2160 1967 l
-2164 1967 l
-2167 1965 l
-2169 1963 l
-2173 1963 l
-2178 1963 l
-2182 1963 l
-S
-2142 5949 m
-2147 5949 l
-2151 5949 l
-2153 5951 l
-2155 5954 l
-2160 5954 l
-2164 5954 l
-2169 5954 l
-2171 5956 l
-2173 5958 l
-2178 5958 l
-2182 5958 l
-S
-2117 1978 m
-2120 1976 l
-2124 1976 l
-2129 1976 l
-2133 1976 l
-2135 1974 l
-2138 1972 l
-2142 1972 l
-S
-2102 1985 m
-2104 1983 l
-2106 1981 l
-2111 1981 l
-2115 1981 l
-2117 1978 l
-S
-2102 5936 m
-2104 5938 l
-2106 5940 l
-2111 5940 l
-2115 5940 l
-2120 5940 l
-2122 5942 l
-2124 5945 l
-2129 5945 l
-2133 5945 l
-2135 5947 l
-2138 5949 l
-2142 5949 l
-S
-2062 1994 m
-2066 1994 l
-2071 1994 l
-2073 1992 l
-2075 1990 l
-2079 1990 l
-2084 1990 l
-2086 1987 l
-2088 1985 l
-2093 1985 l
-2097 1985 l
-2102 1985 l
-S
-2062 5922 m
-2064 5925 l
-2066 5927 l
-2071 5927 l
-2075 5927 l
-2077 5929 l
-2079 5931 l
-2084 5931 l
-2088 5931 l
-2091 5933 l
-2093 5936 l
-2097 5936 l
-2102 5936 l
-S
-2021 2007 m
-2026 2007 l
-2030 2007 l
-2033 2005 l
-2035 2003 l
-2039 2003 l
-2044 2003 l
-2046 2001 l
-2048 1999 l
-2053 1999 l
-2057 1999 l
-2059 1996 l
-2062 1994 l
-S
-2021 5909 m
-2024 5911 l
-2026 5913 l
-2030 5913 l
-2035 5913 l
-2037 5916 l
-2039 5918 l
-2044 5918 l
-2048 5918 l
-2050 5920 l
-S
-2062 5922 m
-2057 5922 l
-2053 5922 l
-2050 5920 l
-S
-1992 2019 m
-1995 2016 l
-1999 2016 l
-2003 2016 l
-2006 2014 l
-2008 2012 l
-2012 2012 l
-2017 2012 l
-2019 2010 l
-2021 2007 l
-S
-1981 2025 m
-1983 2023 l
-1986 2021 l
-1990 2021 l
-1992 2019 l
-S
-1981 5895 m
-1983 5898 l
-1986 5900 l
-1990 5900 l
-1995 5900 l
-1997 5902 l
-1999 5904 l
-2003 5904 l
-2008 5904 l
-2010 5907 l
-2012 5909 l
-2017 5909 l
-2021 5909 l
-S
-1941 2039 m
-1945 2039 l
-1948 2037 l
-1950 2034 l
-1954 2034 l
-1957 2032 l
-1959 2030 l
-1963 2030 l
-1968 2030 l
-1970 2028 l
-1972 2025 l
-1977 2025 l
-1981 2025 l
-S
-1941 5882 m
-1945 5882 l
-1948 5884 l
-1950 5887 l
-1954 5887 l
-1959 5887 l
-1961 5889 l
-1963 5891 l
-1968 5891 l
-1970 5893 l
-1972 5895 l
-1977 5895 l
-1981 5895 l
-S
-1901 2057 m
-1903 2054 l
-1905 2052 l
-1910 2052 l
-1912 2050 l
-1914 2048 l
-1919 2048 l
-1923 2048 l
-1925 2045 l
-1928 2043 l
-1932 2043 l
-1934 2041 l
-1936 2039 l
-1941 2039 l
-S
-1901 5864 m
-1903 5866 l
-1905 5869 l
-1910 5869 l
-1914 5869 l
-1916 5871 l
-1919 5873 l
-1923 5873 l
-1925 5875 l
-1928 5878 l
-1932 5878 l
-1936 5878 l
-1939 5880 l
-S
-1941 5882 m
-1939 5880 l
-S
-1890 2059 m
-1892 2057 l
-1896 2057 l
-1901 2057 l
-S
-1860 2075 m
-1863 2072 l
-1865 2070 l
-1869 2070 l
-1872 2068 l
-1874 2066 l
-1878 2066 l
-1881 2063 l
-1883 2061 l
-1887 2061 l
-1890 2059 l
-S
-1860 5846 m
-1863 5849 l
-1865 5851 l
-1869 5851 l
-1872 5853 l
-1874 5855 l
-1878 5855 l
-1881 5857 l
-1883 5860 l
-1887 5860 l
-1892 5860 l
-1894 5862 l
-1896 5864 l
-1901 5864 l
-S
-1820 2092 m
-1823 2090 l
-1825 2088 l
-1829 2088 l
-1831 2086 l
-1834 2083 l
-1838 2083 l
-1840 2081 l
-1843 2079 l
-1847 2079 l
-1849 2077 l
-1852 2075 l
-1856 2075 l
-1860 2075 l
-S
-1820 5828 m
-1823 5831 l
-1825 5833 l
-1829 5833 l
-1831 5835 l
-1834 5837 l
-1838 5837 l
-1840 5840 l
-S
-1840 5840 m
-1843 5842 l
-1847 5842 l
-1852 5842 l
-1854 5844 l
-1856 5846 l
-1860 5846 l
-S
-1800 2099 m
-1802 2097 l
-1807 2097 l
-1811 2097 l
-1814 2095 l
-1816 2092 l
-1820 2092 l
-S
-1780 2110 m
-1782 2108 l
-1785 2106 l
-1789 2106 l
-1791 2104 l
-1793 2101 l
-1798 2101 l
-1800 2099 l
-S
-1780 5811 m
-1785 5811 l
-1787 5813 l
-1789 5815 l
-1793 5815 l
-1796 5817 l
-1798 5819 l
-1802 5819 l
-1805 5822 l
-1807 5824 l
-1811 5824 l
-1814 5826 l
-1816 5828 l
-1820 5828 l
-S
-1740 2128 m
-1744 2128 l
-1747 2126 l
-1749 2124 l
-1753 2124 l
-1755 2121 l
-1758 2119 l
-1762 2119 l
-1764 2117 l
-1767 2115 l
-1771 2115 l
-1773 2112 l
-1776 2110 l
-1780 2110 l
-S
-1740 5788 m
-1742 5790 l
-1744 5793 l
-1749 5793 l
-1751 5795 l
-1753 5797 l
-1758 5797 l
-1760 5799 l
-S
-1760 5799 m
-1762 5802 l
-1767 5802 l
-1769 5804 l
-1771 5806 l
-1776 5806 l
-1778 5808 l
-1780 5811 l
-S
-1724 2139 m
-1726 2137 l
-1731 2137 l
-1733 2135 l
-1735 2133 l
-1738 2130 l
-1740 2128 l
-S
-1700 2150 m
-1704 2150 l
-1706 2148 l
-1709 2146 l
-1713 2146 l
-1715 2144 l
-1717 2142 l
-1722 2142 l
-1724 2139 l
-S
-1700 5770 m
-1704 5770 l
-1706 5773 l
-1709 5775 l
-1713 5775 l
-1715 5777 l
-1717 5779 l
-1722 5779 l
-1724 5781 l
-1726 5784 l
-1731 5784 l
-1733 5786 l
-1735 5788 l
-1740 5788 l
-S
-1659 2173 m
-1664 2173 l
-1666 2171 l
-1668 2168 l
-1673 2168 l
-1675 2166 l
-1677 2164 l
-1682 2164 l
-1684 2162 l
-1686 2159 l
-1688 2157 l
-1691 2155 l
-1695 2155 l
-1697 2153 l
-1700 2150 l
-S
-1659 5744 m
-1662 5746 l
-1664 5748 l
-1666 5750 l
-1668 5752 l
-1673 5752 l
-1675 5755 l
-1677 5757 l
-1682 5757 l
-1684 5759 l
-S
-1684 5759 m
-1686 5761 l
-1691 5761 l
-1693 5764 l
-1695 5766 l
-1697 5768 l
-1700 5770 l
-S
-1653 2180 m
-1655 2177 l
-1657 2175 l
-1659 2173 l
-S
-1619 2200 m
-1621 2197 l
-1624 2195 l
-1628 2195 l
-1630 2193 l
-1633 2191 l
-1635 2188 l
-1637 2186 l
-1642 2186 l
-1644 2184 l
-1646 2182 l
-1650 2182 l
-1653 2180 l
-S
-1619 5721 m
-1621 5723 l
-1624 5726 l
-1628 5726 l
-1630 5728 l
-1633 5730 l
-1637 5730 l
-1639 5732 l
-1642 5735 l
-1644 5737 l
-1646 5739 l
-1650 5739 l
-1653 5741 l
-1655 5744 l
-1659 5744 l
-S
-1586 2220 m
-1588 2218 l
-1590 2215 l
-1592 2213 l
-1597 2213 l
-1599 2211 l
-1601 2209 l
-1606 2209 l
-1608 2206 l
-1610 2204 l
-1612 2202 l
-1615 2200 l
-1619 2200 l
-S
-1579 2222 m
-1583 2222 l
-1586 2220 l
-S
-1579 5694 m
-1581 5697 l
-1583 5699 l
-1586 5701 l
-1588 5703 l
-1592 5703 l
-1595 5706 l
-1597 5708 l
-1599 5710 l
-1601 5712 l
-1606 5712 l
-1608 5714 l
-1610 5717 l
-1615 5717 l
-1617 5719 l
-S
-1619 5721 m
-1617 5719 l
-S
-1579 2222 m
-1577 2224 l
-1574 2226 l
-1572 2229 l
-1570 2231 l
-1566 2231 l
-1563 2233 l
-1561 2235 l
-1559 2238 l
-1557 2240 l
-1552 2240 l
-1550 2242 l
-1548 2244 l
-1545 2247 l
-1543 2249 l
-1539 2249 l
-S
-1539 5672 m
-1543 5672 l
-1545 5674 l
-1548 5676 l
-1550 5679 l
-S
-1550 5679 m
-1552 5681 l
-1557 5681 l
-1559 5683 l
-1561 5685 l
-1563 5688 l
-1566 5690 l
-1570 5690 l
-1572 5692 l
-1574 5694 l
-1579 5694 l
-S
-1523 2260 m
-1525 2258 l
-1530 2258 l
-1532 2256 l
-1534 2253 l
-1536 2251 l
-1539 2249 l
-S
-1499 2280 m
-1501 2278 l
-1503 2276 l
-1505 2273 l
-1507 2271 l
-1510 2269 l
-1512 2267 l
-1516 2267 l
-1519 2264 l
-1521 2262 l
-1523 2260 l
-S
-1499 5641 m
-1501 5643 l
-1503 5645 l
-1505 5647 l
-1507 5650 l
-1512 5650 l
-1514 5652 l
-1516 5654 l
-1519 5656 l
-1521 5659 l
-1525 5659 l
-1528 5661 l
-1530 5663 l
-1532 5665 l
-1534 5668 l
-1536 5670 l
-1539 5672 l
-S
-1469 2300 m
-1472 2298 l
-1474 2296 l
-1476 2293 l
-1478 2291 l
-1481 2289 l
-1485 2289 l
-1487 2287 l
-1490 2285 l
-1492 2282 l
-1494 2280 l
-1499 2280 l
-S
-1458 2307 m
-1461 2305 l
-1463 2302 l
-1467 2302 l
-1469 2300 l
-S
-1458 5614 m
-1463 5614 l
-1465 5616 l
-1467 5618 l
-1469 5621 l
-1472 5623 l
-1474 5625 l
-1476 5627 l
-1481 5627 l
-1483 5630 l
-1485 5632 l
-1487 5634 l
-1490 5636 l
-1492 5638 l
-S
-1499 5641 m
-1494 5641 l
-1492 5638 l
-S
-1418 2338 m
-1420 2336 l
-1423 2334 l
-1425 2331 l
-1427 2329 l
-1431 2329 l
-1434 2327 l
-1436 2325 l
-1438 2323 l
-1440 2320 l
-1443 2318 l
-1445 2316 l
-1449 2316 l
-1452 2314 l
-1454 2311 l
-1456 2309 l
-1458 2307 l
-S
-1418 5583 m
-1420 5585 l
-1423 5587 l
-1427 5587 l
-1429 5589 l
-1431 5592 l
-1434 5594 l
-1436 5596 l
-1438 5598 l
-S
-1438 5598 m
-1440 5601 l
-1445 5601 l
-1447 5603 l
-1449 5605 l
-1452 5607 l
-1454 5609 l
-1456 5612 l
-1458 5614 l
-S
-1416 2340 m
-1418 2338 l
-S
-1378 2369 m
-1380 2367 l
-1382 2365 l
-1387 2365 l
-1389 2363 l
-1391 2361 l
-1393 2358 l
-1396 2356 l
-1398 2354 l
-1400 2352 l
-1402 2349 l
-1405 2347 l
-1409 2347 l
-1411 2345 l
-1414 2343 l
-1416 2340 l
-S
-1378 5551 m
-1382 5551 l
-1385 5554 l
-1387 5556 l
-1389 5558 l
-S
-1389 5558 m
-1391 5560 l
-1393 5563 l
-1396 5565 l
-1398 5567 l
-1400 5569 l
-1405 5569 l
-1407 5571 l
-1409 5574 l
-1411 5576 l
-1414 5578 l
-1416 5580 l
-1418 5583 l
-S
-1367 2381 m
-1369 2378 l
-1371 2376 l
-1373 2374 l
-1376 2372 l
-1378 2369 l
-S
-1338 2405 m
-1340 2403 l
-1342 2401 l
-1344 2399 l
-1347 2396 l
-1349 2394 l
-1351 2392 l
-1353 2390 l
-1355 2387 l
-1360 2387 l
-1362 2385 l
-1364 2383 l
-1367 2381 l
-S
-1338 5516 m
-1340 5518 l
-S
-1340 5518 m
-1342 5520 l
-1344 5522 l
-1347 5525 l
-1351 5525 l
-1353 5527 l
-1355 5529 l
-1358 5531 l
-1360 5533 l
-1362 5536 l
-1364 5538 l
-1367 5540 l
-1369 5542 l
-1371 5545 l
-1373 5547 l
-1376 5549 l
-1378 5551 l
-S
-1318 2421 m
-1320 2419 l
-1324 2419 l
-1326 2416 l
-1329 2414 l
-1331 2412 l
-1333 2410 l
-1335 2407 l
-1338 2405 l
-S
-1297 2441 m
-1300 2439 l
-1302 2436 l
-1304 2434 l
-1306 2432 l
-1309 2430 l
-1311 2428 l
-1313 2425 l
-1315 2423 l
-1318 2421 l
-S
-1297 5480 m
-1300 5482 l
-1302 5484 l
-1304 5487 l
-1306 5489 l
-1309 5491 l
-1311 5493 l
-1315 5493 l
-1318 5495 l
-1320 5498 l
-1322 5500 l
-1324 5502 l
-1326 5504 l
-1329 5507 l
-1331 5509 l
-1333 5511 l
-1335 5513 l
-1338 5516 l
-S
-1277 2461 m
-1280 2459 l
-1282 2457 l
-1284 2454 l
-1286 2452 l
-1288 2450 l
-1291 2448 l
-1293 2445 l
-1295 2443 l
-1297 2441 l
-S
-1257 2481 m
-1259 2479 l
-1262 2477 l
-1264 2474 l
-1266 2472 l
-1268 2470 l
-1271 2468 l
-1273 2466 l
-1275 2463 l
-1277 2461 l
-S
-1257 5440 m
-1259 5442 l
-1262 5444 l
-1264 5446 l
-1266 5449 l
-1268 5451 l
-1271 5453 l
-1273 5455 l
-1275 5457 l
-1277 5460 l
-1280 5462 l
-1282 5464 l
-1284 5466 l
-1286 5469 l
-1288 5471 l
-1291 5473 l
-1293 5475 l
-1295 5478 l
-S
-1297 5480 m
-1295 5478 l
-S
-1233 2501 m
-1235 2499 l
-1237 2497 l
-1239 2495 l
-1242 2492 l
-1244 2490 l
-1246 2488 l
-1248 2486 l
-1250 2483 l
-1253 2481 l
-1257 2481 l
-S
-1217 2517 m
-1219 2515 l
-1221 2512 l
-1224 2510 l
-1226 2508 l
-1228 2506 l
-1230 2504 l
-1233 2501 l
-S
-1217 5399 m
-1219 5402 l
-1221 5404 l
-1224 5406 l
-1226 5408 l
-1228 5411 l
-1230 5413 l
-1233 5415 l
-1235 5417 l
-1237 5420 l
-1239 5422 l
-1242 5424 l
-1244 5426 l
-1246 5428 l
-1248 5431 l
-1250 5433 l
-1253 5435 l
-1255 5437 l
-S
-1257 5440 m
-1255 5437 l
-S
-1197 2542 m
-1199 2539 l
-1201 2537 l
-1204 2535 l
-1206 2533 l
-1208 2530 l
-1210 2528 l
-1212 2526 l
-1215 2524 l
-1215 2519 l
-1217 2517 l
-S
-1177 2562 m
-1179 2559 l
-1181 2557 l
-1183 2555 l
-1186 2553 l
-1188 2550 l
-1190 2548 l
-1192 2546 l
-1195 2544 l
-1197 2542 l
-S
-1177 5359 m
-1179 5361 l
-1181 5364 l
-1183 5366 l
-1186 5368 l
-1188 5370 l
-1190 5373 l
-1192 5375 l
-1195 5377 l
-1197 5379 l
-1199 5382 l
-1201 5384 l
-1204 5386 l
-1206 5388 l
-1208 5390 l
-1210 5393 l
-1212 5395 l
-1215 5397 l
-S
-1217 5399 m
-1215 5397 l
-S
-1157 2582 m
-1159 2579 l
-1161 2577 l
-1163 2575 l
-1166 2573 l
-1168 2571 l
-1170 2568 l
-1172 2566 l
-1175 2564 l
-1177 2562 l
-S
-1137 2606 m
-1139 2604 l
-1141 2602 l
-1143 2600 l
-1145 2597 l
-1148 2595 l
-1150 2593 l
-1152 2591 l
-1152 2586 l
-1154 2584 l
-1157 2582 l
-S
-1137 5314 m
-1139 5317 l
-S
-1139 5317 m
-1141 5319 l
-1143 5321 l
-1145 5323 l
-1148 5326 l
-1150 5328 l
-1152 5330 l
-1154 5332 l
-1157 5335 l
-1159 5337 l
-1161 5339 l
-1161 5344 l
-1163 5346 l
-1166 5348 l
-1168 5350 l
-1170 5352 l
-1172 5355 l
-1175 5357 l
-S
-1177 5359 m
-1175 5357 l
-S
-1125 2622 m
-1125 2617 l
-1128 2615 l
-1130 2613 l
-1132 2611 l
-1134 2609 l
-1137 2606 l
-S
-1096 2655 m
-1099 2653 l
-1099 2649 l
-1101 2647 l
-1103 2644 l
-1105 2642 l
-1107 2640 l
-1110 2638 l
-1112 2635 l
-1114 2633 l
-1116 2631 l
-1119 2629 l
-1121 2626 l
-1123 2624 l
-1125 2622 l
-S
-1096 5265 m
-1099 5268 l
-1101 5270 l
-1103 5272 l
-1103 5277 l
-S
-1103 5277 m
-1105 5279 l
-1107 5281 l
-1110 5283 l
-1112 5285 l
-1114 5288 l
-1116 5290 l
-1119 5292 l
-1121 5294 l
-1123 5297 l
-1125 5299 l
-1128 5301 l
-1130 5303 l
-1130 5308 l
-1132 5310 l
-1134 5312 l
-1137 5314 l
-S
-1090 2662 m
-1092 2660 l
-1094 2658 l
-1096 2655 l
-S
-1090 2662 m
-1087 2664 l
-1085 2667 l
-1083 2669 l
-1081 2671 l
-1081 2676 l
-1078 2678 l
-1076 2680 l
-1074 2682 l
-1072 2685 l
-1069 2687 l
-1067 2689 l
-1065 2691 l
-1063 2693 l
-1063 2698 l
-1061 2700 l
-1058 2702 l
-S
-1056 2705 m
-1058 2702 l
-S
-1056 5216 m
-1058 5218 l
-1061 5221 l
-1063 5223 l
-1065 5225 l
-1067 5227 l
-1067 5232 l
-1069 5234 l
-1072 5236 l
-S
-1072 5236 m
-1074 5239 l
-1076 5241 l
-1078 5243 l
-1081 5245 l
-1083 5247 l
-1085 5250 l
-1085 5254 l
-1087 5256 l
-1090 5259 l
-1092 5261 l
-1094 5263 l
-1096 5265 l
-S
-1056 2705 m
-1054 2707 l
-1052 2709 l
-1049 2711 l
-1049 2716 l
-1047 2718 l
-1045 2720 l
-1043 2723 l
-1040 2725 l
-1038 2727 l
-1036 2729 l
-1036 2734 l
-1034 2736 l
-1031 2738 l
-1029 2740 l
-1027 2743 l
-S
-1016 2758 m
-1018 2756 l
-1020 2754 l
-1023 2752 l
-1023 2747 l
-1025 2745 l
-1027 2743 l
-S
-1016 5163 m
-1018 5165 l
-1020 5167 l
-1023 5169 l
-1025 5171 l
-1027 5174 l
-1027 5178 l
-1029 5180 l
-1031 5183 l
-1034 5185 l
-1036 5187 l
-1038 5189 l
-1040 5192 l
-1040 5196 l
-S
-1040 5196 m
-1043 5198 l
-1045 5201 l
-1047 5203 l
-1049 5205 l
-1052 5207 l
-1054 5209 l
-1054 5214 l
-1056 5216 l
-S
-1000 2783 m
-1000 2778 l
-1002 2776 l
-1005 2774 l
-1007 2772 l
-1009 2769 l
-1011 2767 l
-1014 2765 l
-1014 2760 l
-1016 2758 l
-S
-976 2816 m
-978 2814 l
-980 2812 l
-982 2810 l
-982 2805 l
-985 2803 l
-987 2801 l
-989 2798 l
-991 2796 l
-991 2792 l
-994 2790 l
-996 2787 l
-998 2785 l
-1000 2783 l
-S
-976 5104 m
-978 5107 l
-980 5109 l
-982 5111 l
-982 5116 l
-S
-982 5116 m
-985 5118 l
-987 5120 l
-989 5122 l
-991 5125 l
-994 5127 l
-996 5129 l
-996 5133 l
-998 5136 l
-1000 5138 l
-1002 5140 l
-1005 5142 l
-1005 5147 l
-1007 5149 l
-1009 5151 l
-1011 5154 l
-1014 5156 l
-S
-1014 5156 m
-1014 5160 l
-1016 5163 l
-S
-973 2823 m
-973 2819 l
-976 2816 l
-S
-973 2823 m
-971 2825 l
-969 2828 l
-967 2830 l
-964 2832 l
-964 2836 l
-962 2839 l
-960 2841 l
-958 2843 l
-956 2845 l
-956 2850 l
-953 2852 l
-951 2854 l
-951 2859 l
-949 2861 l
-947 2863 l
-S
-935 2879 m
-938 2877 l
-940 2874 l
-942 2872 l
-942 2868 l
-944 2866 l
-947 2863 l
-S
-935 5037 m
-938 5040 l
-938 5044 l
-940 5046 l
-942 5049 l
-942 5053 l
-944 5055 l
-947 5058 l
-949 5060 l
-951 5062 l
-951 5066 l
-953 5069 l
-956 5071 l
-958 5073 l
-960 5075 l
-S
-960 5075 m
-960 5080 l
-962 5082 l
-964 5084 l
-964 5089 l
-967 5091 l
-969 5093 l
-971 5096 l
-973 5098 l
-973 5102 l
-976 5104 l
-S
-920 2903 m
-922 2901 l
-924 2899 l
-926 2897 l
-929 2895 l
-929 2890 l
-931 2888 l
-933 2886 l
-933 2881 l
-935 2879 l
-S
-920 2903 m
-920 2908 l
-918 2910 l
-915 2912 l
-915 2917 l
-913 2919 l
-911 2921 l
-909 2924 l
-906 2926 l
-906 2930 l
-904 2933 l
-902 2935 l
-902 2939 l
-900 2941 l
-897 2944 l
-S
-895 2950 m
-897 2948 l
-897 2944 l
-S
-895 4970 m
-897 4973 l
-897 4977 l
-900 4979 l
-902 4982 l
-902 4986 l
-904 4988 l
-906 4990 l
-909 4993 l
-911 4995 l
-S
-911 4995 m
-911 4999 l
-913 5002 l
-915 5004 l
-915 5008 l
-918 5011 l
-920 5013 l
-922 5015 l
-924 5017 l
-924 5022 l
-926 5024 l
-929 5026 l
-929 5031 l
-931 5033 l
-933 5035 l
-S
-935 5037 m
-933 5035 l
-S
-875 2984 m
-877 2982 l
-880 2979 l
-880 2975 l
-882 2973 l
-884 2971 l
-884 2966 l
-886 2964 l
-888 2962 l
-888 2957 l
-891 2955 l
-893 2953 l
-895 2950 l
-S
-875 2984 m
-875 2988 l
-873 2991 l
-871 2993 l
-871 2997 l
-868 3000 l
-866 3002 l
-866 3006 l
-864 3009 l
-862 3011 l
-862 3015 l
-859 3017 l
-857 3020 l
-857 3024 l
-S
-855 3026 m
-857 3024 l
-S
-855 4894 m
-857 4897 l
-857 4901 l
-859 4903 l
-862 4906 l
-862 4910 l
-864 4912 l
-866 4915 l
-S
-866 4915 m
-866 4919 l
-868 4921 l
-871 4923 l
-871 4928 l
-873 4930 l
-875 4932 l
-875 4937 l
-877 4939 l
-880 4941 l
-880 4946 l
-882 4948 l
-884 4950 l
-884 4955 l
-S
-884 4955 m
-886 4957 l
-888 4959 l
-891 4961 l
-893 4964 l
-893 4968 l
-895 4970 l
-S
-855 3026 m
-853 3029 l
-851 3031 l
-848 3033 l
-848 3038 l
-846 3040 l
-844 3042 l
-844 3047 l
-844 3051 l
-842 3053 l
-839 3055 l
-839 3060 l
-837 3062 l
-835 3064 l
-S
-835 3064 m
-835 3069 l
-833 3071 l
-830 3073 l
-830 3078 l
-828 3080 l
-826 3082 l
-826 3087 l
-824 3089 l
-821 3091 l
-821 3096 l
-819 3098 l
-817 3100 l
-817 3105 l
-S
-815 3107 m
-817 3105 l
-S
-815 4814 m
-817 4816 l
-817 4821 l
-819 4823 l
-821 4825 l
-821 4830 l
-824 4832 l
-826 4834 l
-S
-826 4834 m
-826 4839 l
-828 4841 l
-830 4843 l
-830 4847 l
-833 4850 l
-835 4852 l
-835 4856 l
-837 4859 l
-839 4861 l
-839 4865 l
-842 4868 l
-844 4870 l
-844 4874 l
-S
-844 4874 m
-846 4877 l
-848 4879 l
-848 4883 l
-851 4885 l
-853 4888 l
-853 4892 l
-855 4894 l
-S
-815 3107 m
-813 3109 l
-813 3114 l
-810 3116 l
-808 3118 l
-808 3122 l
-808 3127 l
-806 3129 l
-804 3131 l
-804 3136 l
-801 3138 l
-799 3140 l
-799 3145 l
-S
-799 3145 m
-797 3147 l
-795 3149 l
-795 3154 l
-795 3158 l
-792 3160 l
-790 3163 l
-790 3167 l
-788 3169 l
-786 3172 l
-786 3176 l
-786 3181 l
-783 3183 l
-781 3185 l
-S
-775 3201 m
-777 3198 l
-777 3194 l
-779 3192 l
-781 3190 l
-781 3185 l
-S
-775 4716 m
-777 4718 l
-777 4722 l
-777 4727 l
-779 4729 l
-781 4731 l
-781 4736 l
-783 4738 l
-786 4740 l
-786 4745 l
-786 4749 l
-788 4751 l
-790 4754 l
-S
-790 4754 m
-790 4758 l
-792 4760 l
-795 4763 l
-795 4767 l
-795 4772 l
-797 4774 l
-799 4776 l
-799 4780 l
-801 4783 l
-804 4785 l
-804 4789 l
-806 4792 l
-808 4794 l
-S
-808 4794 m
-808 4798 l
-810 4801 l
-813 4803 l
-813 4807 l
-813 4812 l
-815 4814 l
-S
-768 3225 m
-768 3221 l
-768 3216 l
-770 3214 l
-772 3212 l
-772 3207 l
-772 3203 l
-775 3201 l
-S
-768 3225 m
-766 3227 l
-763 3230 l
-763 3234 l
-761 3236 l
-759 3239 l
-759 3243 l
-759 3248 l
-757 3250 l
-754 3252 l
-754 3257 l
-754 3261 l
-752 3263 l
-750 3265 l
-S
-750 3265 m
-750 3270 l
-750 3274 l
-748 3277 l
-745 3279 l
-745 3283 l
-743 3286 l
-741 3288 l
-741 3292 l
-741 3297 l
-739 3299 l
-737 3301 l
-737 3306 l
-S
-734 3312 m
-737 3310 l
-737 3306 l
-S
-734 4604 m
-737 4606 l
-737 4611 l
-737 4615 l
-739 4617 l
-741 4620 l
-741 4624 l
-741 4629 l
-743 4631 l
-745 4633 l
-S
-745 4633 m
-745 4637 l
-745 4642 l
-748 4644 l
-750 4646 l
-750 4651 l
-750 4655 l
-752 4658 l
-754 4660 l
-754 4664 l
-754 4669 l
-757 4671 l
-759 4673 l
-S
-759 4673 m
-759 4678 l
-759 4682 l
-761 4684 l
-763 4687 l
-763 4691 l
-766 4693 l
-768 4696 l
-768 4700 l
-768 4704 l
-770 4707 l
-772 4709 l
-772 4713 l
-S
-775 4716 m
-772 4713 l
-S
-723 3346 m
-725 3344 l
-728 3341 l
-728 3337 l
-728 3333 l
-728 3328 l
-730 3326 l
-732 3324 l
-732 3319 l
-732 3315 l
-734 3312 l
-S
-723 3346 m
-723 3350 l
-723 3355 l
-721 3357 l
-719 3359 l
-719 3364 l
-719 3368 l
-716 3371 l
-714 3373 l
-714 3377 l
-714 3382 l
-714 3386 l
-S
-714 3386 m
-712 3388 l
-710 3391 l
-710 3395 l
-710 3400 l
-708 3402 l
-705 3404 l
-705 3408 l
-705 3413 l
-705 3417 l
-703 3420 l
-701 3422 l
-701 3426 l
-S
-694 3451 m
-696 3449 l
-696 3444 l
-696 3440 l
-696 3435 l
-699 3433 l
-701 3431 l
-701 3426 l
-S
-694 4470 m
-696 4472 l
-S
-696 4472 m
-696 4477 l
-696 4481 l
-699 4483 l
-701 4486 l
-701 4490 l
-701 4494 l
-701 4499 l
-703 4501 l
-705 4503 l
-705 4508 l
-705 4512 l
-S
-705 4512 m
-705 4517 l
-708 4519 l
-710 4521 l
-710 4526 l
-710 4530 l
-712 4532 l
-714 4535 l
-714 4539 l
-714 4544 l
-714 4548 l
-716 4550 l
-719 4553 l
-S
-719 4553 m
-719 4557 l
-719 4561 l
-721 4564 l
-723 4566 l
-723 4570 l
-723 4575 l
-725 4577 l
-728 4579 l
-728 4584 l
-728 4588 l
-730 4591 l
-732 4593 l
-S
-732 4593 m
-732 4597 l
-732 4602 l
-734 4604 l
-S
-692 3467 m
-692 3462 l
-692 3458 l
-692 3453 l
-694 3451 l
-S
-692 3467 m
-690 3469 l
-687 3471 l
-687 3476 l
-687 3480 l
-687 3484 l
-685 3487 l
-683 3489 l
-683 3493 l
-683 3498 l
-683 3502 l
-683 3507 l
-S
-683 3507 m
-681 3509 l
-678 3511 l
-678 3516 l
-678 3520 l
-678 3525 l
-676 3527 l
-674 3529 l
-674 3534 l
-674 3538 l
-674 3543 l
-674 3547 l
-S
-674 3547 m
-672 3549 l
-670 3551 l
-670 3556 l
-670 3560 l
-670 3565 l
-670 3569 l
-667 3572 l
-665 3574 l
-665 3578 l
-665 3583 l
-665 3587 l
-S
-665 3587 m
-665 3592 l
-665 3596 l
-663 3598 l
-661 3601 l
-661 3605 l
-661 3610 l
-661 3614 l
-661 3619 l
-658 3621 l
-656 3623 l
-656 3627 l
-S
-654 3652 m
-656 3650 l
-656 3645 l
-656 3641 l
-656 3636 l
-656 3632 l
-656 3627 l
-S
-654 4269 m
-656 4271 l
-S
-656 4271 m
-656 4275 l
-656 4280 l
-656 4284 l
-656 4289 l
-656 4293 l
-658 4296 l
-661 4298 l
-661 4302 l
-661 4307 l
-661 4311 l
-S
-661 4311 m
-661 4316 l
-661 4320 l
-663 4322 l
-665 4325 l
-665 4329 l
-665 4334 l
-665 4338 l
-665 4342 l
-665 4347 l
-667 4349 l
-670 4351 l
-S
-670 4351 m
-670 4356 l
-670 4360 l
-670 4365 l
-670 4369 l
-672 4372 l
-674 4374 l
-674 4378 l
-674 4383 l
-674 4387 l
-676 4389 l
-678 4392 l
-S
-678 4392 m
-678 4396 l
-678 4401 l
-678 4405 l
-678 4410 l
-681 4412 l
-683 4414 l
-683 4418 l
-683 4423 l
-683 4427 l
-685 4430 l
-687 4432 l
-S
-687 4432 m
-687 4436 l
-687 4441 l
-687 4445 l
-687 4450 l
-690 4452 l
-692 4454 l
-692 4459 l
-692 4463 l
-692 4468 l
-694 4470 l
-S
-652 3668 m
-652 3663 l
-652 3659 l
-652 3654 l
-654 3652 l
-S
-652 3668 m
-652 3672 l
-652 3677 l
-652 3681 l
-649 3683 l
-647 3686 l
-647 3690 l
-647 3694 l
-647 3699 l
-647 3703 l
-647 3708 l
-S
-647 3708 m
-647 3712 l
-647 3717 l
-645 3719 l
-643 3721 l
-643 3726 l
-643 3730 l
-643 3735 l
-643 3739 l
-643 3744 l
-643 3748 l
-S
-643 3748 m
-643 3753 l
-643 3757 l
-640 3759 l
-638 3762 l
-638 3766 l
-638 3770 l
-638 3775 l
-638 3779 l
-638 3784 l
-638 3788 l
-S
-638 3788 m
-638 3793 l
-638 3797 l
-638 3802 l
-638 3806 l
-638 3811 l
-636 3813 l
-634 3815 l
-634 3820 l
-634 3824 l
-634 3829 l
-S
-634 3829 m
-634 3833 l
-634 3838 l
-634 3842 l
-634 3846 l
-634 3851 l
-634 3855 l
-634 3860 l
-634 3864 l
-634 3869 l
-S
-634 3869 m
-634 3873 l
-634 3878 l
-634 3882 l
-634 3887 l
-634 3891 l
-634 3896 l
-632 3898 l
-629 3900 l
-629 3905 l
-629 3909 l
-S
-629 3909 m
-629 3913 l
-629 3918 l
-629 3922 l
-629 3927 l
-629 3931 l
-629 3936 l
-629 3940 l
-629 3945 l
-629 3949 l
-S
-629 3949 m
-629 3954 l
-629 3958 l
-629 3963 l
-629 3967 l
-629 3972 l
-629 3976 l
-629 3981 l
-629 3985 l
-629 3989 l
-S
-629 3989 m
-629 3994 l
-629 3998 l
-629 4003 l
-629 4007 l
-629 4012 l
-629 4016 l
-629 4021 l
-632 4023 l
-634 4025 l
-634 4030 l
-S
-634 4030 m
-634 4034 l
-634 4039 l
-634 4043 l
-634 4048 l
-634 4052 l
-634 4056 l
-634 4061 l
-634 4065 l
-634 4070 l
-S
-634 4070 m
-634 4074 l
-634 4079 l
-634 4083 l
-634 4088 l
-634 4092 l
-634 4097 l
-634 4101 l
-634 4106 l
-636 4108 l
-638 4110 l
-S
-638 4110 m
-638 4115 l
-638 4119 l
-638 4124 l
-638 4128 l
-638 4132 l
-638 4137 l
-638 4141 l
-638 4146 l
-638 4150 l
-S
-638 4150 m
-638 4155 l
-638 4159 l
-640 4162 l
-643 4164 l
-643 4168 l
-643 4173 l
-643 4177 l
-643 4182 l
-643 4186 l
-643 4191 l
-S
-643 4191 m
-643 4195 l
-643 4199 l
-645 4202 l
-647 4204 l
-647 4208 l
-647 4213 l
-647 4217 l
-647 4222 l
-647 4226 l
-647 4231 l
-S
-647 4231 m
-647 4235 l
-649 4237 l
-652 4240 l
-652 4244 l
-652 4249 l
-652 4253 l
-652 4258 l
-652 4262 l
-652 4267 l
-654 4269 l
-S
-1 g
-3920 4435 m
-3924 4435 l
-3924 4436 l
-3920 4436 l
-3917 4436 m
-3924 4436 l
-3924 4437 l
-3917 4437 l
-3914 4437 m
-3925 4437 l
-3925 4438 l
-3914 4438 l
-3911 4438 m
-3925 4438 l
-3925 4439 l
-3911 4439 l
-3908 4439 m
-3925 4439 l
-3925 4440 l
-3908 4440 l
-3905 4440 m
-3926 4440 l
-3926 4441 l
-3905 4441 l
-3903 4441 m
-3926 4441 l
-3926 4442 l
-3903 4442 l
-3900 4442 m
-3926 4442 l
-3926 4443 l
-3900 4443 l
-3897 4443 m
-3927 4443 l
-3927 4444 l
-3897 4444 l
-3894 4444 m
-3927 4444 l
-3927 4445 l
-3894 4445 l
-3891 4445 m
-3927 4445 l
-3927 4446 l
-3891 4446 l
-3888 4446 m
-3928 4446 l
-3928 4447 l
-3888 4447 l
-3885 4447 m
-3928 4447 l
-3928 4448 l
-3885 4448 l
-3883 4448 m
-3928 4448 l
-3928 4449 l
-3883 4449 l
-3880 4449 m
-3929 4449 l
-3929 4450 l
-3880 4450 l
-3877 4450 m
-3929 4450 l
-3929 4451 l
-3877 4451 l
-3874 4451 m
-3929 4451 l
-3929 4452 l
-3874 4452 l
-3871 4452 m
-3930 4452 l
-3930 4453 l
-3871 4453 l
-3868 4453 m
-3930 4453 l
-3930 4454 l
-3868 4454 l
-3866 4454 m
-3931 4454 l
-3931 4455 l
-3866 4455 l
-3863 4455 m
-3931 4455 l
-3931 4456 l
-3863 4456 l
-3860 4456 m
-3931 4456 l
-3931 4457 l
-3860 4457 l
-3857 4457 m
-3932 4457 l
-3932 4458 l
-3857 4458 l
-3854 4458 m
-3932 4458 l
-3932 4459 l
-3854 4459 l
-3851 4459 m
-3932 4459 l
-3932 4460 l
-3851 4460 l
-3848 4460 m
-3933 4460 l
-3933 4461 l
-3848 4461 l
-3846 4461 m
-3933 4461 l
-3933 4462 l
-3846 4462 l
-3843 4462 m
-3933 4462 l
-3933 4463 l
-3843 4463 l
-3840 4463 m
-3934 4463 l
-3934 4464 l
-3840 4464 l
-3837 4464 m
-3934 4464 l
-3934 4465 l
-3837 4465 l
-3834 4465 m
-3934 4465 l
-3934 4466 l
-3834 4466 l
-3831 4466 m
-3935 4466 l
-3935 4467 l
-3831 4467 l
-3829 4467 m
-3935 4467 l
-3935 4468 l
-3829 4468 l
-3829 4468 m
-3935 4468 l
-3935 4469 l
-3829 4469 l
-3829 4469 m
-3936 4469 l
-3936 4471 l
-3829 4471 l
-3830 4471 m
-3937 4471 l
-3937 4474 l
-3830 4474 l
-3831 4474 m
-3938 4474 l
-3938 4477 l
-3831 4477 l
-3832 4477 m
-3939 4477 l
-3939 4480 l
-3832 4480 l
-3833 4480 m
-3940 4480 l
-3940 4483 l
-3833 4483 l
-3834 4483 m
-3941 4483 l
-3941 4486 l
-3834 4486 l
-3835 4486 m
-3942 4486 l
-3942 4488 l
-3835 4488 l
-3836 4488 m
-3942 4488 l
-3942 4489 l
-3836 4489 l
-3836 4489 m
-3943 4489 l
-3943 4491 l
-3836 4491 l
-3837 4491 m
-3944 4491 l
-3944 4494 l
-3837 4494 l
-3838 4494 m
-3945 4494 l
-3945 4497 l
-3838 4497 l
-3839 4497 m
-3946 4497 l
-3946 4500 l
-3839 4500 l
-3840 4500 m
-3947 4500 l
-3947 4503 l
-3840 4503 l
-3841 4503 m
-3948 4503 l
-3948 4506 l
-3841 4506 l
-3842 4506 m
-3949 4506 l
-3949 4508 l
-3842 4508 l
-3843 4508 m
-3950 4508 l
-3950 4511 l
-3843 4511 l
-3844 4511 m
-3951 4511 l
-3951 4514 l
-3844 4514 l
-3845 4514 m
-3952 4514 l
-3952 4517 l
-3845 4517 l
-3846 4517 m
-3953 4517 l
-3953 4520 l
-3846 4520 l
-3847 4520 m
-3954 4520 l
-3954 4523 l
-3847 4523 l
-3848 4523 m
-3955 4523 l
-3955 4525 l
-3848 4525 l
-3848 4525 m
-3956 4525 l
-3956 4526 l
-3848 4526 l
-3849 4526 m
-3956 4526 l
-3956 4528 l
-3849 4528 l
-3850 4528 m
-3957 4528 l
-3957 4531 l
-3850 4531 l
-3851 4531 m
-3958 4531 l
-3958 4534 l
-3851 4534 l
-3852 4534 m
-3959 4534 l
-3959 4537 l
-3852 4537 l
-3853 4537 m
-3960 4537 l
-3960 4540 l
-3853 4540 l
-3854 4540 m
-3961 4540 l
-3961 4543 l
-3854 4543 l
-3855 4543 m
-3962 4543 l
-3962 4545 l
-3855 4545 l
-3856 4545 m
-3963 4545 l
-3963 4548 l
-3856 4548 l
-3857 4548 m
-3964 4548 l
-3964 4549 l
-3857 4549 l
-3857 4549 m
-3964 4549 l
-3964 4550 l
-3857 4550 l
-3857 4550 m
-3961 4550 l
-3961 4551 l
-3857 4551 l
-3858 4551 m
-3958 4551 l
-3958 4552 l
-3858 4552 l
-3858 4552 m
-3955 4552 l
-3955 4553 l
-3858 4553 l
-3858 4553 m
-3952 4553 l
-3952 4554 l
-3858 4554 l
-3859 4554 m
-3949 4554 l
-3949 4555 l
-3859 4555 l
-3859 4555 m
-3946 4555 l
-3946 4556 l
-3859 4556 l
-3859 4556 m
-3944 4556 l
-3944 4557 l
-3859 4557 l
-3860 4557 m
-3941 4557 l
-3941 4558 l
-3860 4558 l
-3860 4558 m
-3938 4558 l
-3938 4559 l
-3860 4559 l
-3860 4559 m
-3935 4559 l
-3935 4560 l
-3860 4560 l
-3861 4560 m
-3932 4560 l
-3932 4561 l
-3861 4561 l
-3861 4561 m
-3929 4561 l
-3929 4562 l
-3861 4562 l
-3861 4562 m
-3927 4562 l
-3927 4563 l
-3861 4563 l
-3862 4563 m
-3924 4563 l
-3924 4564 l
-3862 4564 l
-3862 4564 m
-3921 4564 l
-3921 4565 l
-3862 4565 l
-3863 4565 m
-3918 4565 l
-3918 4566 l
-3863 4566 l
-3863 4566 m
-3915 4566 l
-3915 4567 l
-3863 4567 l
-3863 4567 m
-3912 4567 l
-3912 4568 l
-3863 4568 l
-3864 4568 m
-3909 4568 l
-3909 4569 l
-3864 4569 l
-3864 4569 m
-3907 4569 l
-3907 4570 l
-3864 4570 l
-3864 4570 m
-3904 4570 l
-3904 4571 l
-3864 4571 l
-3865 4571 m
-3901 4571 l
-3901 4572 l
-3865 4572 l
-3865 4572 m
-3898 4572 l
-3898 4573 l
-3865 4573 l
-3865 4573 m
-3895 4573 l
-3895 4574 l
-3865 4574 l
-3866 4574 m
-3892 4574 l
-3892 4575 l
-3866 4575 l
-3866 4575 m
-3889 4575 l
-3889 4576 l
-3866 4576 l
-3866 4576 m
-3887 4576 l
-3887 4577 l
-3866 4577 l
-3867 4577 m
-3884 4577 l
-3884 4578 l
-3867 4578 l
-3867 4578 m
-3881 4578 l
-3881 4579 l
-3867 4579 l
-3867 4579 m
-3878 4579 l
-3878 4580 l
-3867 4580 l
-3868 4580 m
-3875 4580 l
-3875 4581 l
-3868 4581 l
-3868 4581 m
-3872 4581 l
-3872 4582 l
-3868 4582 l
-Y
-3963.1 4549 m
-3923 4435 l
-3829 4468 l
-3869 4582 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-3885 4466 m
-3899 4465 l
-3911 4475 l
-3921 4493 l
-3926 4505 l
-3928 4526 l
-3925 4540 l
-3914 4548 l
-3906 4551 l
-3893 4551 l
-3881 4542 l
-3870 4524 l
-3866 4512 l
-3863 4491 l
-3867 4476 l
-3877 4468 l
-3885 4466 l
-S
-1 g
-3085 4470 m
-3095 4470 l
-3095 4471 l
-3085 4471 l
-3085 4471 m
-3102 4471 l
-3102 4472 l
-3085 4472 l
-3085 4472 m
-3109 4472 l
-3109 4473 l
-3085 4473 l
-3085 4473 m
-3116 4473 l
-3116 4474 l
-3085 4474 l
-3085 4474 m
-3123 4474 l
-3123 4475 l
-3085 4475 l
-3085 4475 m
-3130 4475 l
-3130 4476 l
-3085 4476 l
-3085 4476 m
-3137 4476 l
-3137 4477 l
-3085 4477 l
-3084 4477 m
-3144 4477 l
-3144 4478 l
-3084 4478 l
-3084 4478 m
-3150 4478 l
-3150 4479 l
-3084 4479 l
-3084 4479 m
-3157 4479 l
-3157 4480 l
-3084 4480 l
-3084 4480 m
-3164 4480 l
-3164 4481 l
-3084 4481 l
-3084 4481 m
-3171 4481 l
-3171 4482 l
-3084 4482 l
-3084 4482 m
-3178 4482 l
-3178 4483 l
-3084 4483 l
-3084 4483 m
-3185 4483 l
-3185 4484 l
-3084 4484 l
-3083 4484 m
-3192 4484 l
-3192 4485 l
-3083 4485 l
-3083 4485 m
-3199 4485 l
-3199 4486 l
-3083 4486 l
-3083 4486 m
-3206 4486 l
-3206 4487 l
-3083 4487 l
-3083 4487 m
-3213 4487 l
-3213 4488 l
-3083 4488 l
-3083 4488 m
-3220 4488 l
-3220 4489 l
-3083 4489 l
-3083 4489 m
-3227 4489 l
-3227 4490 l
-3083 4490 l
-3083 4490 m
-3234 4490 l
-3234 4491 l
-3083 4491 l
-3082 4491 m
-3241 4491 l
-3241 4492 l
-3082 4492 l
-3082 4492 m
-3248 4492 l
-3248 4493 l
-3082 4493 l
-3082 4493 m
-3255 4493 l
-3255 4494 l
-3082 4494 l
-3082 4494 m
-3262 4494 l
-3262 4495 l
-3082 4495 l
-3082 4495 m
-3268 4495 l
-3268 4496 l
-3082 4496 l
-3082 4496 m
-3269 4496 l
-3269 4497 l
-3082 4497 l
-3082 4497 m
-3268 4497 l
-3268 4498 l
-3082 4498 l
-3081 4498 m
-3268 4498 l
-3268 4504 l
-3081 4504 l
-3081 4504 m
-3267 4504 l
-3267 4505 l
-3081 4505 l
-3080 4505 m
-3267 4505 l
-3267 4511 l
-3080 4511 l
-3080 4511 m
-3266 4511 l
-3266 4512 l
-3080 4512 l
-3079 4512 m
-3266 4512 l
-3266 4518 l
-3079 4518 l
-3079 4518 m
-3265 4518 l
-3265 4519 l
-3079 4519 l
-3078 4519 m
-3265 4519 l
-3265 4525 l
-3078 4525 l
-3078 4525 m
-3264 4525 l
-3264 4526 l
-3078 4526 l
-3077 4526 m
-3264 4526 l
-3264 4532 l
-3077 4532 l
-3077 4532 m
-3263 4532 l
-3263 4533 l
-3077 4533 l
-3076 4533 m
-3263 4533 l
-3263 4539 l
-3076 4539 l
-3076 4539 m
-3262 4539 l
-3262 4540 l
-3076 4540 l
-3075 4540 m
-3262 4540 l
-3262 4546 l
-3075 4546 l
-3075 4546 m
-3261 4546 l
-3261 4547 l
-3075 4547 l
-3074 4547 m
-3261 4547 l
-3261 4553 l
-3074 4553 l
-3074 4553 m
-3260 4553 l
-3260 4554 l
-3074 4554 l
-3073 4554 m
-3260 4554 l
-3260 4560 l
-3073 4560 l
-3073 4560 m
-3259 4560 l
-3259 4561 l
-3073 4561 l
-3072 4561 m
-3259 4561 l
-3259 4567 l
-3072 4567 l
-3072 4567 m
-3258 4567 l
-3258 4568 l
-3072 4568 l
-3071 4568 m
-3258 4568 l
-3258 4574 l
-3071 4574 l
-3071 4574 m
-3257 4574 l
-3257 4575 l
-3071 4575 l
-3070 4575 m
-3257 4575 l
-3257 4581 l
-3070 4581 l
-3070 4581 m
-3256 4581 l
-3256 4582 l
-3070 4582 l
-3069 4582 m
-3256 4582 l
-3256 4588 l
-3069 4588 l
-3069 4588 m
-3255 4588 l
-3255 4590 l
-3069 4590 l
-3069 4590 m
-3255 4590 l
-3255 4591 l
-3069 4591 l
-3076 4591 m
-3255 4591 l
-3255 4592 l
-3076 4592 l
-3083 4592 m
-3255 4592 l
-3255 4593 l
-3083 4593 l
-3090 4593 m
-3255 4593 l
-3255 4594 l
-3090 4594 l
-3097 4594 m
-3255 4594 l
-3255 4595 l
-3097 4595 l
-3104 4595 m
-3254 4595 l
-3254 4596 l
-3104 4596 l
-3111 4596 m
-3254 4596 l
-3254 4597 l
-3111 4597 l
-3118 4597 m
-3254 4597 l
-3254 4598 l
-3118 4598 l
-3125 4598 m
-3254 4598 l
-3254 4599 l
-3125 4599 l
-3132 4599 m
-3254 4599 l
-3254 4600 l
-3132 4600 l
-3139 4600 m
-3254 4600 l
-3254 4601 l
-3139 4601 l
-3146 4601 m
-3254 4601 l
-3254 4602 l
-3146 4602 l
-3153 4602 m
-3253 4602 l
-3253 4603 l
-3153 4603 l
-3160 4603 m
-3253 4603 l
-3253 4604 l
-3160 4604 l
-3167 4604 m
-3253 4604 l
-3253 4605 l
-3167 4605 l
-3174 4605 m
-3253 4605 l
-3253 4606 l
-3174 4606 l
-3181 4606 m
-3253 4606 l
-3253 4607 l
-3181 4607 l
-3188 4607 m
-3253 4607 l
-3253 4608 l
-3188 4608 l
-3195 4608 m
-3253 4608 l
-3253 4609 l
-3195 4609 l
-3202 4609 m
-3252 4609 l
-3252 4610 l
-3202 4610 l
-3209 4610 m
-3252 4610 l
-3252 4611 l
-3209 4611 l
-3216 4611 m
-3252 4611 l
-3252 4612 l
-3216 4612 l
-3223 4612 m
-3252 4612 l
-3252 4613 l
-3223 4613 l
-3230 4613 m
-3252 4613 l
-3252 4614 l
-3230 4614 l
-3237 4614 m
-3252 4614 l
-3252 4615 l
-3237 4615 l
-3244 4615 m
-3252 4615 l
-3252 4616 l
-3244 4616 l
-Y
-3086.1 4469.8 m
-3069 4590 l
-3251 4616 l
-3268 4496 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-3133 4582 m
-3100 4518 l
-3162 4527 l
-S
-3133 4582 m
-3146 4495 l
-S
-3224 4595 m
-3183 4589 l
-3184 4552 l
-3188 4556 l
-3199 4562 l
-3212 4564 l
-3225 4562 l
-3234 4555 l
-3240 4543 l
-3241 4534 l
-3239 4521 l
-3232 4512 l
-3220 4506 l
-3208 4504 l
-3195 4507 l
-3190 4510 l
-3185 4518 l
-S
-1 g
-2354 4208 m
-2358 4208 l
-2358 4209 l
-2354 4209 l
-2354 4209 m
-2360 4209 l
-2360 4210 l
-2354 4210 l
-2353 4210 m
-2362 4210 l
-2362 4211 l
-2353 4211 l
-2353 4211 m
-2364 4211 l
-2364 4212 l
-2353 4212 l
-2352 4212 m
-2366 4212 l
-2366 4213 l
-2352 4213 l
-2352 4213 m
-2368 4213 l
-2368 4214 l
-2352 4214 l
-2351 4214 m
-2370 4214 l
-2370 4215 l
-2351 4215 l
-2351 4215 m
-2372 4215 l
-2372 4216 l
-2351 4216 l
-2350 4216 m
-2374 4216 l
-2374 4217 l
-2350 4217 l
-2350 4217 m
-2376 4217 l
-2376 4218 l
-2350 4218 l
-2349 4218 m
-2378 4218 l
-2378 4219 l
-2349 4219 l
-2349 4219 m
-2380 4219 l
-2380 4220 l
-2349 4220 l
-2348 4220 m
-2382 4220 l
-2382 4221 l
-2348 4221 l
-2348 4221 m
-2384 4221 l
-2384 4222 l
-2348 4222 l
-2347 4222 m
-2386 4222 l
-2386 4223 l
-2347 4223 l
-2347 4223 m
-2388 4223 l
-2388 4224 l
-2347 4224 l
-2346 4224 m
-2390 4224 l
-2390 4225 l
-2346 4225 l
-2346 4225 m
-2392 4225 l
-2392 4226 l
-2346 4226 l
-2345 4226 m
-2394 4226 l
-2394 4227 l
-2345 4227 l
-2345 4227 m
-2396 4227 l
-2396 4228 l
-2345 4228 l
-2344 4228 m
-2398 4228 l
-2398 4229 l
-2344 4229 l
-2344 4229 m
-2400 4229 l
-2400 4230 l
-2344 4230 l
-2343 4230 m
-2402 4230 l
-2402 4231 l
-2343 4231 l
-2343 4231 m
-2404 4231 l
-2404 4232 l
-2343 4232 l
-2342 4232 m
-2406 4232 l
-2406 4233 l
-2342 4233 l
-2342 4233 m
-2408 4233 l
-2408 4234 l
-2342 4234 l
-2341 4234 m
-2410 4234 l
-2410 4235 l
-2341 4235 l
-2341 4235 m
-2412 4235 l
-2412 4236 l
-2341 4236 l
-2340 4236 m
-2414 4236 l
-2414 4237 l
-2340 4237 l
-2340 4237 m
-2416 4237 l
-2416 4238 l
-2340 4238 l
-2339 4238 m
-2418 4238 l
-2418 4239 l
-2339 4239 l
-2339 4239 m
-2420 4239 l
-2420 4240 l
-2339 4240 l
-2338 4240 m
-2422 4240 l
-2422 4241 l
-2338 4241 l
-2338 4241 m
-2424 4241 l
-2424 4242 l
-2338 4242 l
-2337 4242 m
-2426 4242 l
-2426 4243 l
-2337 4243 l
-2337 4243 m
-2428 4243 l
-2428 4244 l
-2337 4244 l
-2336 4244 m
-2430 4244 l
-2430 4245 l
-2336 4245 l
-2336 4245 m
-2432 4245 l
-2432 4246 l
-2336 4246 l
-2335 4246 m
-2434 4246 l
-2434 4247 l
-2335 4247 l
-2335 4247 m
-2436 4247 l
-2436 4248 l
-2335 4248 l
-2334 4248 m
-2438 4248 l
-2438 4249 l
-2334 4249 l
-2334 4249 m
-2440 4249 l
-2440 4250 l
-2334 4250 l
-2333 4250 m
-2442 4250 l
-2442 4251 l
-2333 4251 l
-2333 4251 m
-2444 4251 l
-2444 4252 l
-2333 4252 l
-2332 4252 m
-2446 4252 l
-2446 4253 l
-2332 4253 l
-2332 4253 m
-2448 4253 l
-2448 4254 l
-2332 4254 l
-2331 4254 m
-2450 4254 l
-2450 4255 l
-2331 4255 l
-2331 4255 m
-2452 4255 l
-2452 4256 l
-2331 4256 l
-2330 4256 m
-2454 4256 l
-2454 4257 l
-2330 4257 l
-2330 4257 m
-2456 4257 l
-2456 4258 l
-2330 4258 l
-2329 4258 m
-2458 4258 l
-2458 4259 l
-2329 4259 l
-2329 4259 m
-2460 4259 l
-2460 4260 l
-2329 4260 l
-2328 4260 m
-2462 4260 l
-2462 4261 l
-2328 4261 l
-2328 4261 m
-2464 4261 l
-2464 4262 l
-2328 4262 l
-2327 4262 m
-2466 4262 l
-2466 4263 l
-2327 4263 l
-2327 4263 m
-2468 4263 l
-2468 4264 l
-2327 4264 l
-2326 4264 m
-2470 4264 l
-2470 4265 l
-2326 4265 l
-2326 4265 m
-2472 4265 l
-2472 4266 l
-2326 4266 l
-2325 4266 m
-2474 4266 l
-2474 4267 l
-2325 4267 l
-2325 4267 m
-2476 4267 l
-2476 4268 l
-2325 4268 l
-2324 4268 m
-2478 4268 l
-2478 4269 l
-2324 4269 l
-2324 4269 m
-2480 4269 l
-2480 4270 l
-2324 4270 l
-2323 4270 m
-2482 4270 l
-2482 4271 l
-2323 4271 l
-2323 4271 m
-2484 4271 l
-2484 4272 l
-2323 4272 l
-2322 4272 m
-2486 4272 l
-2486 4273 l
-2322 4273 l
-2322 4273 m
-2488 4273 l
-2488 4274 l
-2322 4274 l
-2321 4274 m
-2490 4274 l
-2490 4275 l
-2321 4275 l
-2321 4275 m
-2492 4275 l
-2492 4276 l
-2321 4276 l
-2320 4276 m
-2494 4276 l
-2494 4277 l
-2320 4277 l
-2320 4277 m
-2496 4277 l
-2496 4278 l
-2320 4278 l
-2319 4278 m
-2498 4278 l
-2498 4279 l
-2319 4279 l
-2319 4279 m
-2500 4279 l
-2500 4280 l
-2319 4280 l
-2318 4280 m
-2502 4280 l
-2502 4281 l
-2318 4281 l
-2318 4281 m
-2504 4281 l
-2504 4282 l
-2318 4282 l
-2317 4282 m
-2506 4282 l
-2506 4283 l
-2317 4283 l
-2317 4283 m
-2508 4283 l
-2508 4284 l
-2317 4284 l
-2316 4284 m
-2510 4284 l
-2510 4285 l
-2316 4285 l
-2316 4285 m
-2512 4285 l
-2512 4286 l
-2316 4286 l
-2315 4286 m
-2514 4286 l
-2514 4287 l
-2315 4287 l
-2315 4287 m
-2516 4287 l
-2516 4288 l
-2315 4288 l
-2314 4288 m
-2518 4288 l
-2518 4289 l
-2314 4289 l
-2314 4289 m
-2520 4289 l
-2520 4290 l
-2314 4290 l
-2313 4290 m
-2520 4290 l
-2520 4292 l
-2313 4292 l
-2312 4292 m
-2519 4292 l
-2519 4294 l
-2312 4294 l
-2311 4294 m
-2518 4294 l
-2518 4296 l
-2311 4296 l
-2310 4296 m
-2517 4296 l
-2517 4298 l
-2310 4298 l
-2309 4298 m
-2516 4298 l
-2516 4300 l
-2309 4300 l
-2308 4300 m
-2515 4300 l
-2515 4302 l
-2308 4302 l
-2307 4302 m
-2514 4302 l
-2514 4304 l
-2307 4304 l
-2306 4304 m
-2513 4304 l
-2513 4306 l
-2306 4306 l
-2305 4306 m
-2512 4306 l
-2512 4308 l
-2305 4308 l
-2304 4308 m
-2511 4308 l
-2511 4310 l
-2304 4310 l
-2303 4310 m
-2510 4310 l
-2510 4312 l
-2303 4312 l
-2302 4312 m
-2509 4312 l
-2509 4314 l
-2302 4314 l
-2301 4314 m
-2508 4314 l
-2508 4316 l
-2301 4316 l
-2301 4316 m
-2508 4316 l
-2508 4317 l
-2301 4317 l
-2303 4317 m
-2507 4317 l
-2507 4318 l
-2303 4318 l
-2305 4318 m
-2506 4318 l
-2506 4319 l
-2305 4319 l
-2307 4319 m
-2506 4319 l
-2506 4320 l
-2307 4320 l
-2309 4320 m
-2505 4320 l
-2505 4321 l
-2309 4321 l
-2311 4321 m
-2505 4321 l
-2505 4322 l
-2311 4322 l
-2313 4322 m
-2504 4322 l
-2504 4323 l
-2313 4323 l
-2315 4323 m
-2504 4323 l
-2504 4324 l
-2315 4324 l
-2317 4324 m
-2503 4324 l
-2503 4325 l
-2317 4325 l
-2319 4325 m
-2503 4325 l
-2503 4326 l
-2319 4326 l
-2321 4326 m
-2502 4326 l
-2502 4327 l
-2321 4327 l
-2323 4327 m
-2502 4327 l
-2502 4328 l
-2323 4328 l
-2325 4328 m
-2501 4328 l
-2501 4329 l
-2325 4329 l
-2327 4329 m
-2501 4329 l
-2501 4330 l
-2327 4330 l
-2329 4330 m
-2500 4330 l
-2500 4331 l
-2329 4331 l
-2331 4331 m
-2500 4331 l
-2500 4332 l
-2331 4332 l
-2333 4332 m
-2499 4332 l
-2499 4333 l
-2333 4333 l
-2335 4333 m
-2499 4333 l
-2499 4334 l
-2335 4334 l
-2337 4334 m
-2498 4334 l
-2498 4335 l
-2337 4335 l
-2339 4335 m
-2498 4335 l
-2498 4336 l
-2339 4336 l
-2341 4336 m
-2497 4336 l
-2497 4337 l
-2341 4337 l
-2343 4337 m
-2497 4337 l
-2497 4338 l
-2343 4338 l
-2345 4338 m
-2496 4338 l
-2496 4339 l
-2345 4339 l
-2347 4339 m
-2496 4339 l
-2496 4340 l
-2347 4340 l
-2349 4340 m
-2495 4340 l
-2495 4341 l
-2349 4341 l
-2351 4341 m
-2495 4341 l
-2495 4342 l
-2351 4342 l
-2353 4342 m
-2494 4342 l
-2494 4343 l
-2353 4343 l
-2355 4343 m
-2494 4343 l
-2494 4344 l
-2355 4344 l
-2357 4344 m
-2493 4344 l
-2493 4345 l
-2357 4345 l
-2359 4345 m
-2493 4345 l
-2493 4346 l
-2359 4346 l
-2361 4346 m
-2492 4346 l
-2492 4347 l
-2361 4347 l
-2363 4347 m
-2492 4347 l
-2492 4348 l
-2363 4348 l
-2365 4348 m
-2491 4348 l
-2491 4349 l
-2365 4349 l
-2367 4349 m
-2491 4349 l
-2491 4350 l
-2367 4350 l
-2369 4350 m
-2490 4350 l
-2490 4351 l
-2369 4351 l
-2371 4351 m
-2490 4351 l
-2490 4352 l
-2371 4352 l
-2373 4352 m
-2489 4352 l
-2489 4353 l
-2373 4353 l
-2375 4353 m
-2489 4353 l
-2489 4354 l
-2375 4354 l
-2377 4354 m
-2488 4354 l
-2488 4355 l
-2377 4355 l
-2379 4355 m
-2488 4355 l
-2488 4356 l
-2379 4356 l
-2381 4356 m
-2487 4356 l
-2487 4357 l
-2381 4357 l
-2383 4357 m
-2487 4357 l
-2487 4358 l
-2383 4358 l
-2385 4358 m
-2486 4358 l
-2486 4359 l
-2385 4359 l
-2387 4359 m
-2486 4359 l
-2486 4360 l
-2387 4360 l
-2389 4360 m
-2485 4360 l
-2485 4361 l
-2389 4361 l
-2391 4361 m
-2485 4361 l
-2485 4362 l
-2391 4362 l
-2393 4362 m
-2484 4362 l
-2484 4363 l
-2393 4363 l
-2395 4363 m
-2484 4363 l
-2484 4364 l
-2395 4364 l
-2397 4364 m
-2483 4364 l
-2483 4365 l
-2397 4365 l
-2399 4365 m
-2483 4365 l
-2483 4366 l
-2399 4366 l
-2401 4366 m
-2482 4366 l
-2482 4367 l
-2401 4367 l
-2403 4367 m
-2482 4367 l
-2482 4368 l
-2403 4368 l
-2405 4368 m
-2481 4368 l
-2481 4369 l
-2405 4369 l
-2407 4369 m
-2481 4369 l
-2481 4370 l
-2407 4370 l
-2409 4370 m
-2480 4370 l
-2480 4371 l
-2409 4371 l
-2411 4371 m
-2480 4371 l
-2480 4372 l
-2411 4372 l
-2413 4372 m
-2479 4372 l
-2479 4373 l
-2413 4373 l
-2415 4373 m
-2479 4373 l
-2479 4374 l
-2415 4374 l
-2417 4374 m
-2478 4374 l
-2478 4375 l
-2417 4375 l
-2419 4375 m
-2478 4375 l
-2478 4376 l
-2419 4376 l
-2421 4376 m
-2477 4376 l
-2477 4377 l
-2421 4377 l
-2423 4377 m
-2477 4377 l
-2477 4378 l
-2423 4378 l
-2425 4378 m
-2476 4378 l
-2476 4379 l
-2425 4379 l
-2427 4379 m
-2476 4379 l
-2476 4380 l
-2427 4380 l
-2429 4380 m
-2475 4380 l
-2475 4381 l
-2429 4381 l
-2431 4381 m
-2475 4381 l
-2475 4382 l
-2431 4382 l
-2433 4382 m
-2474 4382 l
-2474 4383 l
-2433 4383 l
-2435 4383 m
-2474 4383 l
-2474 4384 l
-2435 4384 l
-2437 4384 m
-2473 4384 l
-2473 4385 l
-2437 4385 l
-2439 4385 m
-2473 4385 l
-2473 4386 l
-2439 4386 l
-2441 4386 m
-2472 4386 l
-2472 4387 l
-2441 4387 l
-2443 4387 m
-2472 4387 l
-2472 4388 l
-2443 4388 l
-2445 4388 m
-2471 4388 l
-2471 4389 l
-2445 4389 l
-2447 4389 m
-2471 4389 l
-2471 4390 l
-2447 4390 l
-2449 4390 m
-2470 4390 l
-2470 4391 l
-2449 4391 l
-2451 4391 m
-2470 4391 l
-2470 4392 l
-2451 4392 l
-2453 4392 m
-2469 4392 l
-2469 4393 l
-2453 4393 l
-2455 4393 m
-2469 4393 l
-2469 4394 l
-2455 4394 l
-2457 4394 m
-2468 4394 l
-2468 4395 l
-2457 4395 l
-2459 4395 m
-2468 4395 l
-2468 4396 l
-2459 4396 l
-2461 4396 m
-2467 4396 l
-2467 4397 l
-2461 4397 l
-2463 4397 m
-2467 4397 l
-2467 4398 l
-2463 4398 l
-Y
-2355.3 4208 m
-2301 4316 l
-2466 4398 l
-2520 4290 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-2389 4309 m
-2391 4296 l
-2387 4285 l
-2378 4275 l
-2374 4273 l
-2361 4272 l
-2350 4275 l
-2341 4285 l
-2339 4288 l
-2337 4301 l
-2341 4313 l
-2350 4322 l
-2354 4324 l
-2367 4326 l
-2378 4322 l
-2389 4309 l
-2398 4290 l
-2404 4270 l
-2402 4255 l
-2393 4245 l
-2385 4242 l
-2372 4240 l
-2365 4245 l
-S
-2425 4359 m
-2415 4350 l
-2413 4335 l
-2419 4314 l
-2425 4303 l
-2438 4286 l
-2451 4279 l
-2464 4281 l
-2471 4284 l
-2481 4294 l
-2483 4309 l
-2477 4329 l
-2471 4340 l
-2458 4357 l
-2445 4365 l
-2432 4363 l
-2425 4359 l
-S
-1 g
-1733 3720 m
-1736 3720 l
-1736 3721 l
-1733 3721 l
-1732 3721 m
-1737 3721 l
-1737 3722 l
-1732 3722 l
-1731 3722 m
-1738 3722 l
-1738 3723 l
-1731 3723 l
-1730 3723 m
-1739 3723 l
-1739 3724 l
-1730 3724 l
-1729 3724 m
-1740 3724 l
-1740 3725 l
-1729 3725 l
-1728 3725 m
-1741 3725 l
-1741 3726 l
-1728 3726 l
-1727 3726 m
-1742 3726 l
-1742 3727 l
-1727 3727 l
-1726 3727 m
-1742 3727 l
-1742 3728 l
-1726 3728 l
-1725 3728 m
-1743 3728 l
-1743 3729 l
-1725 3729 l
-1723 3729 m
-1744 3729 l
-1744 3730 l
-1723 3730 l
-1722 3730 m
-1745 3730 l
-1745 3731 l
-1722 3731 l
-1721 3731 m
-1746 3731 l
-1746 3732 l
-1721 3732 l
-1720 3732 m
-1747 3732 l
-1747 3733 l
-1720 3733 l
-1719 3733 m
-1748 3733 l
-1748 3734 l
-1719 3734 l
-1718 3734 m
-1749 3734 l
-1749 3735 l
-1718 3735 l
-1717 3735 m
-1750 3735 l
-1750 3736 l
-1717 3736 l
-1716 3736 m
-1751 3736 l
-1751 3737 l
-1716 3737 l
-1715 3737 m
-1752 3737 l
-1752 3738 l
-1715 3738 l
-1714 3738 m
-1753 3738 l
-1753 3739 l
-1714 3739 l
-1713 3739 m
-1754 3739 l
-1754 3740 l
-1713 3740 l
-1712 3740 m
-1755 3740 l
-1755 3741 l
-1712 3741 l
-1711 3741 m
-1756 3741 l
-1756 3742 l
-1711 3742 l
-1710 3742 m
-1757 3742 l
-1757 3743 l
-1710 3743 l
-1709 3743 m
-1758 3743 l
-1758 3744 l
-1709 3744 l
-1708 3744 m
-1759 3744 l
-1759 3745 l
-1708 3745 l
-1707 3745 m
-1760 3745 l
-1760 3746 l
-1707 3746 l
-1706 3746 m
-1761 3746 l
-1761 3747 l
-1706 3747 l
-1705 3747 m
-1762 3747 l
-1762 3748 l
-1705 3748 l
-1704 3748 m
-1763 3748 l
-1763 3749 l
-1704 3749 l
-1703 3749 m
-1764 3749 l
-1764 3750 l
-1703 3750 l
-1702 3750 m
-1765 3750 l
-1765 3751 l
-1702 3751 l
-1701 3751 m
-1766 3751 l
-1766 3752 l
-1701 3752 l
-1700 3752 m
-1767 3752 l
-1767 3753 l
-1700 3753 l
-1699 3753 m
-1768 3753 l
-1768 3754 l
-1699 3754 l
-1697 3754 m
-1769 3754 l
-1769 3755 l
-1697 3755 l
-1696 3755 m
-1770 3755 l
-1770 3756 l
-1696 3756 l
-1695 3756 m
-1771 3756 l
-1771 3757 l
-1695 3757 l
-1694 3757 m
-1772 3757 l
-1772 3758 l
-1694 3758 l
-1693 3758 m
-1773 3758 l
-1773 3759 l
-1693 3759 l
-1692 3759 m
-1774 3759 l
-1774 3760 l
-1692 3760 l
-1691 3760 m
-1775 3760 l
-1775 3761 l
-1691 3761 l
-1690 3761 m
-1776 3761 l
-1776 3762 l
-1690 3762 l
-1689 3762 m
-1776 3762 l
-1776 3763 l
-1689 3763 l
-1688 3763 m
-1777 3763 l
-1777 3764 l
-1688 3764 l
-1687 3764 m
-1778 3764 l
-1778 3765 l
-1687 3765 l
-1686 3765 m
-1779 3765 l
-1779 3766 l
-1686 3766 l
-1685 3766 m
-1780 3766 l
-1780 3767 l
-1685 3767 l
-1684 3767 m
-1781 3767 l
-1781 3768 l
-1684 3768 l
-1683 3768 m
-1782 3768 l
-1782 3769 l
-1683 3769 l
-1682 3769 m
-1783 3769 l
-1783 3770 l
-1682 3770 l
-1681 3770 m
-1784 3770 l
-1784 3771 l
-1681 3771 l
-1680 3771 m
-1785 3771 l
-1785 3772 l
-1680 3772 l
-1679 3772 m
-1786 3772 l
-1786 3773 l
-1679 3773 l
-1678 3773 m
-1787 3773 l
-1787 3774 l
-1678 3774 l
-1677 3774 m
-1788 3774 l
-1788 3775 l
-1677 3775 l
-1676 3775 m
-1789 3775 l
-1789 3776 l
-1676 3776 l
-1675 3776 m
-1790 3776 l
-1790 3777 l
-1675 3777 l
-1674 3777 m
-1791 3777 l
-1791 3778 l
-1674 3778 l
-1673 3778 m
-1792 3778 l
-1792 3779 l
-1673 3779 l
-1671 3779 m
-1793 3779 l
-1793 3780 l
-1671 3780 l
-1670 3780 m
-1794 3780 l
-1794 3781 l
-1670 3781 l
-1669 3781 m
-1795 3781 l
-1795 3782 l
-1669 3782 l
-1668 3782 m
-1796 3782 l
-1796 3783 l
-1668 3783 l
-1667 3783 m
-1797 3783 l
-1797 3784 l
-1667 3784 l
-1666 3784 m
-1798 3784 l
-1798 3785 l
-1666 3785 l
-1665 3785 m
-1799 3785 l
-1799 3786 l
-1665 3786 l
-1664 3786 m
-1800 3786 l
-1800 3787 l
-1664 3787 l
-1663 3787 m
-1801 3787 l
-1801 3788 l
-1663 3788 l
-1662 3788 m
-1802 3788 l
-1802 3789 l
-1662 3789 l
-1661 3789 m
-1803 3789 l
-1803 3790 l
-1661 3790 l
-1660 3790 m
-1804 3790 l
-1804 3791 l
-1660 3791 l
-1659 3791 m
-1805 3791 l
-1805 3792 l
-1659 3792 l
-1658 3792 m
-1806 3792 l
-1806 3793 l
-1658 3793 l
-1657 3793 m
-1807 3793 l
-1807 3794 l
-1657 3794 l
-1656 3794 m
-1808 3794 l
-1808 3795 l
-1656 3795 l
-1655 3795 m
-1809 3795 l
-1809 3796 l
-1655 3796 l
-1654 3796 m
-1810 3796 l
-1810 3797 l
-1654 3797 l
-1653 3797 m
-1810 3797 l
-1810 3798 l
-1653 3798 l
-1652 3798 m
-1811 3798 l
-1811 3799 l
-1652 3799 l
-1651 3799 m
-1812 3799 l
-1812 3800 l
-1651 3800 l
-1650 3800 m
-1813 3800 l
-1813 3801 l
-1650 3801 l
-1649 3801 m
-1814 3801 l
-1814 3802 l
-1649 3802 l
-1648 3802 m
-1815 3802 l
-1815 3803 l
-1648 3803 l
-1647 3803 m
-1816 3803 l
-1816 3804 l
-1647 3804 l
-1647 3804 m
-1817 3804 l
-1817 3805 l
-1647 3805 l
-1647 3805 m
-1818 3805 l
-1818 3806 l
-1647 3806 l
-1648 3806 m
-1819 3806 l
-1819 3807 l
-1648 3807 l
-1649 3807 m
-1820 3807 l
-1820 3808 l
-1649 3808 l
-1650 3808 m
-1821 3808 l
-1821 3809 l
-1650 3809 l
-1651 3809 m
-1822 3809 l
-1822 3810 l
-1651 3810 l
-1652 3810 m
-1823 3810 l
-1823 3811 l
-1652 3811 l
-1653 3811 m
-1824 3811 l
-1824 3812 l
-1653 3812 l
-1654 3812 m
-1825 3812 l
-1825 3813 l
-1654 3813 l
-1655 3813 m
-1826 3813 l
-1826 3814 l
-1655 3814 l
-1656 3814 m
-1827 3814 l
-1827 3815 l
-1656 3815 l
-1657 3815 m
-1828 3815 l
-1828 3816 l
-1657 3816 l
-1658 3816 m
-1829 3816 l
-1829 3817 l
-1658 3817 l
-1659 3817 m
-1830 3817 l
-1830 3818 l
-1659 3818 l
-1660 3818 m
-1831 3818 l
-1831 3819 l
-1660 3819 l
-1661 3819 m
-1832 3819 l
-1832 3820 l
-1661 3820 l
-1662 3820 m
-1833 3820 l
-1833 3821 l
-1662 3821 l
-1663 3821 m
-1834 3821 l
-1834 3822 l
-1663 3822 l
-1664 3822 m
-1835 3822 l
-1835 3823 l
-1664 3823 l
-1665 3823 m
-1836 3823 l
-1836 3824 l
-1665 3824 l
-1666 3824 m
-1837 3824 l
-1837 3825 l
-1666 3825 l
-1667 3825 m
-1838 3825 l
-1838 3826 l
-1667 3826 l
-1668 3826 m
-1839 3826 l
-1839 3827 l
-1668 3827 l
-1669 3827 m
-1840 3827 l
-1840 3828 l
-1669 3828 l
-1670 3828 m
-1841 3828 l
-1841 3829 l
-1670 3829 l
-1671 3829 m
-1842 3829 l
-1842 3830 l
-1671 3830 l
-1672 3830 m
-1843 3830 l
-1843 3831 l
-1672 3831 l
-1673 3831 m
-1844 3831 l
-1844 3832 l
-1673 3832 l
-1674 3832 m
-1844 3832 l
-1844 3833 l
-1674 3833 l
-1675 3833 m
-1845 3833 l
-1845 3834 l
-1675 3834 l
-1676 3834 m
-1846 3834 l
-1846 3835 l
-1676 3835 l
-1677 3835 m
-1847 3835 l
-1847 3836 l
-1677 3836 l
-1678 3836 m
-1848 3836 l
-1848 3837 l
-1678 3837 l
-1679 3837 m
-1849 3837 l
-1849 3838 l
-1679 3838 l
-1680 3838 m
-1850 3838 l
-1850 3839 l
-1680 3839 l
-1681 3839 m
-1851 3839 l
-1851 3840 l
-1681 3840 l
-1682 3840 m
-1852 3840 l
-1852 3841 l
-1682 3841 l
-1682 3841 m
-1853 3841 l
-1853 3842 l
-1682 3842 l
-1683 3842 m
-1854 3842 l
-1854 3843 l
-1683 3843 l
-1684 3843 m
-1855 3843 l
-1855 3844 l
-1684 3844 l
-1685 3844 m
-1856 3844 l
-1856 3845 l
-1685 3845 l
-1686 3845 m
-1857 3845 l
-1857 3846 l
-1686 3846 l
-1687 3846 m
-1858 3846 l
-1858 3847 l
-1687 3847 l
-1688 3847 m
-1859 3847 l
-1859 3848 l
-1688 3848 l
-1689 3848 m
-1860 3848 l
-1860 3849 l
-1689 3849 l
-1690 3849 m
-1861 3849 l
-1861 3850 l
-1690 3850 l
-1691 3850 m
-1862 3850 l
-1862 3851 l
-1691 3851 l
-1692 3851 m
-1863 3851 l
-1863 3852 l
-1692 3852 l
-1693 3852 m
-1864 3852 l
-1864 3853 l
-1693 3853 l
-1694 3853 m
-1865 3853 l
-1865 3854 l
-1694 3854 l
-1695 3854 m
-1866 3854 l
-1866 3855 l
-1695 3855 l
-1696 3855 m
-1867 3855 l
-1867 3856 l
-1696 3856 l
-1697 3856 m
-1868 3856 l
-1868 3857 l
-1697 3857 l
-1698 3857 m
-1869 3857 l
-1869 3858 l
-1698 3858 l
-1699 3858 m
-1870 3858 l
-1870 3859 l
-1699 3859 l
-1700 3859 m
-1871 3859 l
-1871 3860 l
-1700 3860 l
-1701 3860 m
-1872 3860 l
-1872 3861 l
-1701 3861 l
-1702 3861 m
-1873 3861 l
-1873 3862 l
-1702 3862 l
-1703 3862 m
-1874 3862 l
-1874 3863 l
-1703 3863 l
-1704 3863 m
-1875 3863 l
-1875 3864 l
-1704 3864 l
-1705 3864 m
-1876 3864 l
-1876 3865 l
-1705 3865 l
-1706 3865 m
-1877 3865 l
-1877 3866 l
-1706 3866 l
-1707 3866 m
-1878 3866 l
-1878 3867 l
-1707 3867 l
-1708 3867 m
-1878 3867 l
-1878 3868 l
-1708 3868 l
-1709 3868 m
-1879 3868 l
-1879 3869 l
-1709 3869 l
-1710 3869 m
-1880 3869 l
-1880 3870 l
-1710 3870 l
-1711 3870 m
-1881 3870 l
-1881 3871 l
-1711 3871 l
-1712 3871 m
-1882 3871 l
-1882 3872 l
-1712 3872 l
-1713 3872 m
-1883 3872 l
-1883 3873 l
-1713 3873 l
-1714 3873 m
-1884 3873 l
-1884 3874 l
-1714 3874 l
-1715 3874 m
-1885 3874 l
-1885 3875 l
-1715 3875 l
-1716 3875 m
-1886 3875 l
-1886 3876 l
-1716 3876 l
-1717 3876 m
-1887 3876 l
-1887 3877 l
-1717 3877 l
-1718 3877 m
-1888 3877 l
-1888 3878 l
-1718 3878 l
-1718 3878 m
-1889 3878 l
-1889 3879 l
-1718 3879 l
-1719 3879 m
-1890 3879 l
-1890 3880 l
-1719 3880 l
-1720 3880 m
-1891 3880 l
-1891 3881 l
-1720 3881 l
-1721 3881 m
-1892 3881 l
-1892 3882 l
-1721 3882 l
-1722 3882 m
-1893 3882 l
-1893 3883 l
-1722 3883 l
-1723 3883 m
-1894 3883 l
-1894 3884 l
-1723 3884 l
-1724 3884 m
-1895 3884 l
-1895 3885 l
-1724 3885 l
-1725 3885 m
-1896 3885 l
-1896 3886 l
-1725 3886 l
-1726 3886 m
-1897 3886 l
-1897 3887 l
-1726 3887 l
-1727 3887 m
-1898 3887 l
-1898 3888 l
-1727 3888 l
-1728 3888 m
-1899 3888 l
-1899 3889 l
-1728 3889 l
-1729 3889 m
-1900 3889 l
-1900 3890 l
-1729 3890 l
-1730 3890 m
-1901 3890 l
-1901 3891 l
-1730 3891 l
-1731 3891 m
-1902 3891 l
-1902 3892 l
-1731 3892 l
-1732 3892 m
-1903 3892 l
-1903 3893 l
-1732 3893 l
-1733 3893 m
-1904 3893 l
-1904 3894 l
-1733 3894 l
-1734 3894 m
-1905 3894 l
-1905 3895 l
-1734 3895 l
-1735 3895 m
-1906 3895 l
-1906 3896 l
-1735 3896 l
-1736 3896 m
-1907 3896 l
-1907 3897 l
-1736 3897 l
-1737 3897 m
-1908 3897 l
-1908 3898 l
-1737 3898 l
-1738 3898 m
-1909 3898 l
-1909 3899 l
-1738 3899 l
-1739 3899 m
-1910 3899 l
-1910 3900 l
-1739 3900 l
-1740 3900 m
-1911 3900 l
-1911 3901 l
-1740 3901 l
-1741 3901 m
-1912 3901 l
-1912 3902 l
-1741 3902 l
-1742 3902 m
-1913 3902 l
-1913 3903 l
-1742 3903 l
-1743 3903 m
-1912 3903 l
-1912 3904 l
-1743 3904 l
-1744 3904 m
-1911 3904 l
-1911 3905 l
-1744 3905 l
-1745 3905 m
-1910 3905 l
-1910 3906 l
-1745 3906 l
-1746 3906 m
-1909 3906 l
-1909 3907 l
-1746 3907 l
-1747 3907 m
-1908 3907 l
-1908 3908 l
-1747 3908 l
-1748 3908 m
-1907 3908 l
-1907 3909 l
-1748 3909 l
-1749 3909 m
-1906 3909 l
-1906 3910 l
-1749 3910 l
-1750 3910 m
-1905 3910 l
-1905 3911 l
-1750 3911 l
-1751 3911 m
-1904 3911 l
-1904 3912 l
-1751 3912 l
-1752 3912 m
-1903 3912 l
-1903 3913 l
-1752 3913 l
-1753 3913 m
-1902 3913 l
-1902 3914 l
-1753 3914 l
-1753 3914 m
-1901 3914 l
-1901 3915 l
-1753 3915 l
-1754 3915 m
-1900 3915 l
-1900 3916 l
-1754 3916 l
-1755 3916 m
-1899 3916 l
-1899 3917 l
-1755 3917 l
-1756 3917 m
-1898 3917 l
-1898 3918 l
-1756 3918 l
-1757 3918 m
-1897 3918 l
-1897 3919 l
-1757 3919 l
-1758 3919 m
-1896 3919 l
-1896 3920 l
-1758 3920 l
-1759 3920 m
-1895 3920 l
-1895 3921 l
-1759 3921 l
-1760 3921 m
-1894 3921 l
-1894 3922 l
-1760 3922 l
-1761 3922 m
-1893 3922 l
-1893 3923 l
-1761 3923 l
-1762 3923 m
-1892 3923 l
-1892 3924 l
-1762 3924 l
-1763 3924 m
-1891 3924 l
-1891 3925 l
-1763 3925 l
-1764 3925 m
-1890 3925 l
-1890 3926 l
-1764 3926 l
-1765 3926 m
-1889 3926 l
-1889 3927 l
-1765 3927 l
-1766 3927 m
-1888 3927 l
-1888 3928 l
-1766 3928 l
-1767 3928 m
-1887 3928 l
-1887 3929 l
-1767 3929 l
-1768 3929 m
-1886 3929 l
-1886 3930 l
-1768 3930 l
-1769 3930 m
-1885 3930 l
-1885 3931 l
-1769 3931 l
-1770 3931 m
-1883 3931 l
-1883 3932 l
-1770 3932 l
-1771 3932 m
-1882 3932 l
-1882 3933 l
-1771 3933 l
-1772 3933 m
-1881 3933 l
-1881 3934 l
-1772 3934 l
-1773 3934 m
-1880 3934 l
-1880 3935 l
-1773 3935 l
-1774 3935 m
-1879 3935 l
-1879 3936 l
-1774 3936 l
-1775 3936 m
-1878 3936 l
-1878 3937 l
-1775 3937 l
-1776 3937 m
-1877 3937 l
-1877 3938 l
-1776 3938 l
-1777 3938 m
-1876 3938 l
-1876 3939 l
-1777 3939 l
-1778 3939 m
-1875 3939 l
-1875 3940 l
-1778 3940 l
-1779 3940 m
-1874 3940 l
-1874 3941 l
-1779 3941 l
-1780 3941 m
-1873 3941 l
-1873 3942 l
-1780 3942 l
-1781 3942 m
-1872 3942 l
-1872 3943 l
-1781 3943 l
-1782 3943 m
-1871 3943 l
-1871 3944 l
-1782 3944 l
-1783 3944 m
-1870 3944 l
-1870 3945 l
-1783 3945 l
-1784 3945 m
-1869 3945 l
-1869 3946 l
-1784 3946 l
-1785 3946 m
-1868 3946 l
-1868 3947 l
-1785 3947 l
-1786 3947 m
-1867 3947 l
-1867 3948 l
-1786 3948 l
-1787 3948 m
-1866 3948 l
-1866 3949 l
-1787 3949 l
-1788 3949 m
-1865 3949 l
-1865 3950 l
-1788 3950 l
-1789 3950 m
-1864 3950 l
-1864 3951 l
-1789 3951 l
-1789 3951 m
-1863 3951 l
-1863 3952 l
-1789 3952 l
-1790 3952 m
-1862 3952 l
-1862 3953 l
-1790 3953 l
-1791 3953 m
-1861 3953 l
-1861 3954 l
-1791 3954 l
-1792 3954 m
-1860 3954 l
-1860 3955 l
-1792 3955 l
-1793 3955 m
-1859 3955 l
-1859 3956 l
-1793 3956 l
-1794 3956 m
-1858 3956 l
-1858 3957 l
-1794 3957 l
-1795 3957 m
-1857 3957 l
-1857 3958 l
-1795 3958 l
-1796 3958 m
-1856 3958 l
-1856 3959 l
-1796 3959 l
-1797 3959 m
-1854 3959 l
-1854 3960 l
-1797 3960 l
-1798 3960 m
-1853 3960 l
-1853 3961 l
-1798 3961 l
-1799 3961 m
-1852 3961 l
-1852 3962 l
-1799 3962 l
-1800 3962 m
-1851 3962 l
-1851 3963 l
-1800 3963 l
-1801 3963 m
-1850 3963 l
-1850 3964 l
-1801 3964 l
-1802 3964 m
-1849 3964 l
-1849 3965 l
-1802 3965 l
-1803 3965 m
-1848 3965 l
-1848 3966 l
-1803 3966 l
-1804 3966 m
-1847 3966 l
-1847 3967 l
-1804 3967 l
-1805 3967 m
-1846 3967 l
-1846 3968 l
-1805 3968 l
-1806 3968 m
-1845 3968 l
-1845 3969 l
-1806 3969 l
-1807 3969 m
-1844 3969 l
-1844 3970 l
-1807 3970 l
-1808 3970 m
-1843 3970 l
-1843 3971 l
-1808 3971 l
-1809 3971 m
-1842 3971 l
-1842 3972 l
-1809 3972 l
-1810 3972 m
-1841 3972 l
-1841 3973 l
-1810 3973 l
-1811 3973 m
-1840 3973 l
-1840 3974 l
-1811 3974 l
-1812 3974 m
-1839 3974 l
-1839 3975 l
-1812 3975 l
-1813 3975 m
-1838 3975 l
-1838 3976 l
-1813 3976 l
-1814 3976 m
-1837 3976 l
-1837 3977 l
-1814 3977 l
-1815 3977 m
-1836 3977 l
-1836 3978 l
-1815 3978 l
-1816 3978 m
-1835 3978 l
-1835 3979 l
-1816 3979 l
-1817 3979 m
-1834 3979 l
-1834 3980 l
-1817 3980 l
-1818 3980 m
-1833 3980 l
-1833 3981 l
-1818 3981 l
-1819 3981 m
-1832 3981 l
-1832 3982 l
-1819 3982 l
-1820 3982 m
-1831 3982 l
-1831 3983 l
-1820 3983 l
-1821 3983 m
-1830 3983 l
-1830 3984 l
-1821 3984 l
-1822 3984 m
-1829 3984 l
-1829 3985 l
-1822 3985 l
-1823 3985 m
-1828 3985 l
-1828 3986 l
-1823 3986 l
-1824 3986 m
-1827 3986 l
-1827 3987 l
-1824 3987 l
-Y
-1734.3 3720.1 m
-1647 3804 l
-1825 3987 l
-1912 3903 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-1686 3796 m
-1689 3805 l
-1688 3823 l
-1751 3762 l
-S
-1729 3865 m
-1761 3898 l
-1768 3856 l
-1776 3865 l
-1785 3869 l
-1791 3869 l
-1803 3863 l
-1809 3857 l
-1815 3845 l
-1815 3834 l
-1809 3822 l
-1801 3813 l
-1789 3807 l
-1783 3807 l
-1774 3809 l
-S
-1816 3955 m
-1787 3925 l
-1811 3896 l
-1811 3901 l
-1817 3913 l
-1826 3922 l
-1837 3928 l
-1849 3929 l
-1861 3923 l
-1867 3917 l
-1873 3905 l
-1873 3894 l
-1868 3882 l
-1859 3873 l
-1847 3867 l
-1841 3866 l
-1832 3869 l
-S
-1 g
-1467 3111 m
-1471 3111 l
-1471 3112 l
-1467 3112 l
-1462 3112 m
-1471 3112 l
-1471 3113 l
-1462 3113 l
-1456 3113 m
-1471 3113 l
-1471 3114 l
-1456 3114 l
-1451 3114 m
-1471 3114 l
-1471 3115 l
-1451 3115 l
-1446 3115 m
-1472 3115 l
-1472 3116 l
-1446 3116 l
-1441 3116 m
-1472 3116 l
-1472 3117 l
-1441 3117 l
-1435 3117 m
-1472 3117 l
-1472 3118 l
-1435 3118 l
-1430 3118 m
-1472 3118 l
-1472 3119 l
-1430 3119 l
-1425 3119 m
-1472 3119 l
-1472 3120 l
-1425 3120 l
-1419 3120 m
-1472 3120 l
-1472 3121 l
-1419 3121 l
-1414 3121 m
-1473 3121 l
-1473 3122 l
-1414 3122 l
-1409 3122 m
-1473 3122 l
-1473 3123 l
-1409 3123 l
-1403 3123 m
-1473 3123 l
-1473 3124 l
-1403 3124 l
-1398 3124 m
-1473 3124 l
-1473 3125 l
-1398 3125 l
-1393 3125 m
-1473 3125 l
-1473 3126 l
-1393 3126 l
-1388 3126 m
-1474 3126 l
-1474 3127 l
-1388 3127 l
-1382 3127 m
-1474 3127 l
-1474 3128 l
-1382 3128 l
-1377 3128 m
-1474 3128 l
-1474 3129 l
-1377 3129 l
-1372 3129 m
-1474 3129 l
-1474 3130 l
-1372 3130 l
-1366 3130 m
-1474 3130 l
-1474 3131 l
-1366 3131 l
-1361 3131 m
-1475 3131 l
-1475 3132 l
-1361 3132 l
-1356 3132 m
-1475 3132 l
-1475 3133 l
-1356 3133 l
-1351 3133 m
-1475 3133 l
-1475 3134 l
-1351 3134 l
-1351 3134 m
-1475 3134 l
-1475 3137 l
-1351 3137 l
-1351 3137 m
-1476 3137 l
-1476 3140 l
-1351 3140 l
-1352 3140 m
-1476 3140 l
-1476 3142 l
-1352 3142 l
-1352 3142 m
-1477 3142 l
-1477 3145 l
-1352 3145 l
-1353 3145 m
-1477 3145 l
-1477 3147 l
-1353 3147 l
-1353 3147 m
-1478 3147 l
-1478 3150 l
-1353 3150 l
-1354 3150 m
-1478 3150 l
-1478 3153 l
-1354 3153 l
-1354 3153 m
-1479 3153 l
-1479 3156 l
-1354 3156 l
-1355 3156 m
-1479 3156 l
-1479 3158 l
-1355 3158 l
-1355 3158 m
-1480 3158 l
-1480 3161 l
-1355 3161 l
-1356 3161 m
-1480 3161 l
-1480 3163 l
-1356 3163 l
-1356 3163 m
-1481 3163 l
-1481 3166 l
-1356 3166 l
-1357 3166 m
-1481 3166 l
-1481 3169 l
-1357 3169 l
-1357 3169 m
-1482 3169 l
-1482 3172 l
-1357 3172 l
-1358 3172 m
-1482 3172 l
-1482 3174 l
-1358 3174 l
-1358 3174 m
-1483 3174 l
-1483 3177 l
-1358 3177 l
-1359 3177 m
-1483 3177 l
-1483 3180 l
-1359 3180 l
-1359 3180 m
-1484 3180 l
-1484 3182 l
-1359 3182 l
-1360 3182 m
-1484 3182 l
-1484 3185 l
-1360 3185 l
-1360 3185 m
-1485 3185 l
-1485 3188 l
-1360 3188 l
-1361 3188 m
-1485 3188 l
-1485 3190 l
-1361 3190 l
-1361 3190 m
-1486 3190 l
-1486 3193 l
-1361 3193 l
-1362 3193 m
-1486 3193 l
-1486 3196 l
-1362 3196 l
-1362 3196 m
-1487 3196 l
-1487 3198 l
-1362 3198 l
-1363 3198 m
-1487 3198 l
-1487 3201 l
-1363 3201 l
-1363 3201 m
-1488 3201 l
-1488 3204 l
-1363 3204 l
-1364 3204 m
-1488 3204 l
-1488 3206 l
-1364 3206 l
-1364 3206 m
-1489 3206 l
-1489 3209 l
-1364 3209 l
-1365 3209 m
-1489 3209 l
-1489 3212 l
-1365 3212 l
-1365 3212 m
-1490 3212 l
-1490 3214 l
-1365 3214 l
-1366 3214 m
-1490 3214 l
-1490 3217 l
-1366 3217 l
-1366 3217 m
-1491 3217 l
-1491 3220 l
-1366 3220 l
-1367 3220 m
-1491 3220 l
-1491 3222 l
-1367 3222 l
-1367 3222 m
-1492 3222 l
-1492 3225 l
-1367 3225 l
-1368 3225 m
-1492 3225 l
-1492 3228 l
-1368 3228 l
-1368 3228 m
-1493 3228 l
-1493 3230 l
-1368 3230 l
-1369 3230 m
-1493 3230 l
-1493 3233 l
-1369 3233 l
-1369 3233 m
-1494 3233 l
-1494 3236 l
-1369 3236 l
-1370 3236 m
-1494 3236 l
-1494 3238 l
-1370 3238 l
-1370 3238 m
-1495 3238 l
-1495 3241 l
-1370 3241 l
-1371 3241 m
-1495 3241 l
-1495 3244 l
-1371 3244 l
-1371 3244 m
-1496 3244 l
-1496 3246 l
-1371 3246 l
-1372 3246 m
-1496 3246 l
-1496 3249 l
-1372 3249 l
-1372 3249 m
-1497 3249 l
-1497 3252 l
-1372 3252 l
-1373 3252 m
-1497 3252 l
-1497 3254 l
-1373 3254 l
-1373 3254 m
-1498 3254 l
-1498 3257 l
-1373 3257 l
-1374 3257 m
-1498 3257 l
-1498 3260 l
-1374 3260 l
-1374 3260 m
-1499 3260 l
-1499 3262 l
-1374 3262 l
-1375 3262 m
-1499 3262 l
-1499 3265 l
-1375 3265 l
-1375 3265 m
-1500 3265 l
-1500 3267 l
-1375 3267 l
-1376 3267 m
-1500 3267 l
-1500 3271 l
-1376 3271 l
-1376 3271 m
-1501 3271 l
-1501 3273 l
-1376 3273 l
-1377 3273 m
-1501 3273 l
-1501 3276 l
-1377 3276 l
-1377 3276 m
-1502 3276 l
-1502 3278 l
-1377 3278 l
-1378 3278 m
-1502 3278 l
-1502 3281 l
-1378 3281 l
-1378 3281 m
-1503 3281 l
-1503 3283 l
-1378 3283 l
-1379 3283 m
-1503 3283 l
-1503 3287 l
-1379 3287 l
-1379 3287 m
-1504 3287 l
-1504 3289 l
-1379 3289 l
-1380 3289 m
-1504 3289 l
-1504 3292 l
-1380 3292 l
-1380 3292 m
-1505 3292 l
-1505 3294 l
-1380 3294 l
-1381 3294 m
-1505 3294 l
-1505 3297 l
-1381 3297 l
-1381 3297 m
-1506 3297 l
-1506 3299 l
-1381 3299 l
-1382 3299 m
-1506 3299 l
-1506 3303 l
-1382 3303 l
-1382 3303 m
-1507 3303 l
-1507 3305 l
-1382 3305 l
-1383 3305 m
-1507 3305 l
-1507 3308 l
-1383 3308 l
-1383 3308 m
-1508 3308 l
-1508 3310 l
-1383 3310 l
-1384 3310 m
-1508 3310 l
-1508 3313 l
-1384 3313 l
-1384 3313 m
-1509 3313 l
-1509 3315 l
-1384 3315 l
-1385 3315 m
-1509 3315 l
-1509 3319 l
-1385 3319 l
-1385 3319 m
-1510 3319 l
-1510 3321 l
-1385 3321 l
-1386 3321 m
-1510 3321 l
-1510 3324 l
-1386 3324 l
-1386 3324 m
-1511 3324 l
-1511 3326 l
-1386 3326 l
-1387 3326 m
-1511 3326 l
-1511 3329 l
-1387 3329 l
-1387 3329 m
-1512 3329 l
-1512 3331 l
-1387 3331 l
-1388 3331 m
-1512 3331 l
-1512 3335 l
-1388 3335 l
-1388 3335 m
-1513 3335 l
-1513 3337 l
-1388 3337 l
-1389 3337 m
-1513 3337 l
-1513 3340 l
-1389 3340 l
-1389 3340 m
-1514 3340 l
-1514 3342 l
-1389 3342 l
-1390 3342 m
-1514 3342 l
-1514 3345 l
-1390 3345 l
-1390 3345 m
-1515 3345 l
-1515 3347 l
-1390 3347 l
-1391 3347 m
-1515 3347 l
-1515 3351 l
-1391 3351 l
-1391 3351 m
-1516 3351 l
-1516 3353 l
-1391 3353 l
-1392 3353 m
-1516 3353 l
-1516 3356 l
-1392 3356 l
-1392 3356 m
-1517 3356 l
-1517 3358 l
-1392 3358 l
-1393 3358 m
-1517 3358 l
-1517 3362 l
-1393 3362 l
-1393 3362 m
-1518 3362 l
-1518 3363 l
-1393 3363 l
-1394 3363 m
-1512 3363 l
-1512 3364 l
-1394 3364 l
-1394 3364 m
-1507 3364 l
-1507 3365 l
-1394 3365 l
-1394 3365 m
-1501 3365 l
-1501 3366 l
-1394 3366 l
-1394 3366 m
-1496 3366 l
-1496 3367 l
-1394 3367 l
-1394 3367 m
-1490 3367 l
-1490 3368 l
-1394 3368 l
-1394 3368 m
-1485 3368 l
-1485 3369 l
-1394 3369 l
-1395 3369 m
-1480 3369 l
-1480 3370 l
-1395 3370 l
-1395 3370 m
-1474 3370 l
-1474 3371 l
-1395 3371 l
-1395 3371 m
-1469 3371 l
-1469 3372 l
-1395 3372 l
-1395 3372 m
-1463 3372 l
-1463 3373 l
-1395 3373 l
-1395 3373 m
-1458 3373 l
-1458 3374 l
-1395 3374 l
-1396 3374 m
-1453 3374 l
-1453 3375 l
-1396 3375 l
-1396 3375 m
-1447 3375 l
-1447 3376 l
-1396 3376 l
-1396 3376 m
-1442 3376 l
-1442 3377 l
-1396 3377 l
-1396 3377 m
-1436 3377 l
-1436 3378 l
-1396 3378 l
-1396 3378 m
-1431 3378 l
-1431 3379 l
-1396 3379 l
-1397 3379 m
-1426 3379 l
-1426 3380 l
-1397 3380 l
-1397 3380 m
-1420 3380 l
-1420 3381 l
-1397 3381 l
-1397 3381 m
-1415 3381 l
-1415 3382 l
-1397 3382 l
-1397 3382 m
-1409 3382 l
-1409 3383 l
-1397 3383 l
-1397 3383 m
-1404 3383 l
-1404 3384 l
-1397 3384 l
-Y
-1470.2 3111.5 m
-1351 3134 l
-1398 3384 l
-1517 3362 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-1388 3148 m
-1385 3157 l
-1375 3172 l
-1462 3156 l
-S
-1389 3242 m
-1390 3229 l
-1398 3223 l
-1406 3221 l
-1415 3224 l
-1421 3231 l
-1428 3247 l
-1434 3259 l
-1444 3265 l
-1453 3268 l
-1465 3265 l
-1473 3260 l
-1476 3255 l
-1478 3242 l
-1475 3225 l
-1468 3214 l
-1463 3211 l
-1454 3208 l
-1442 3210 l
-1435 3216 l
-1428 3226 l
-1426 3239 l
-1425 3256 l
-1423 3265 l
-1415 3271 l
-1407 3272 l
-1398 3270 l
-1392 3258 l
-1389 3242 l
-S
-1405 3328 m
-1407 3315 l
-1417 3304 l
-1437 3296 l
-1449 3294 l
-1471 3294 l
-1485 3300 l
-1491 3312 l
-1493 3320 l
-1491 3333 l
-1480 3343 l
-1460 3351 l
-1448 3354 l
-1427 3354 l
-1413 3348 l
-1406 3336 l
-1405 3328 l
-S
-1 g
-1766 2327 m
-1769 2327 l
-1769 2328 l
-1766 2328 l
-1765 2328 m
-1770 2328 l
-1770 2329 l
-1765 2329 l
-1764 2329 m
-1771 2329 l
-1771 2330 l
-1764 2330 l
-1763 2330 m
-1772 2330 l
-1772 2331 l
-1763 2331 l
-1762 2331 m
-1773 2331 l
-1773 2332 l
-1762 2332 l
-1761 2332 m
-1774 2332 l
-1774 2333 l
-1761 2333 l
-1760 2333 m
-1775 2333 l
-1775 2334 l
-1760 2334 l
-1759 2334 m
-1776 2334 l
-1776 2335 l
-1759 2335 l
-1758 2335 m
-1777 2335 l
-1777 2336 l
-1758 2336 l
-1757 2336 m
-1778 2336 l
-1778 2337 l
-1757 2337 l
-1756 2337 m
-1779 2337 l
-1779 2338 l
-1756 2338 l
-1755 2338 m
-1780 2338 l
-1780 2339 l
-1755 2339 l
-1754 2339 m
-1781 2339 l
-1781 2340 l
-1754 2340 l
-1753 2340 m
-1782 2340 l
-1782 2341 l
-1753 2341 l
-1752 2341 m
-1783 2341 l
-1783 2342 l
-1752 2342 l
-1751 2342 m
-1784 2342 l
-1784 2343 l
-1751 2343 l
-1750 2343 m
-1785 2343 l
-1785 2344 l
-1750 2344 l
-1749 2344 m
-1786 2344 l
-1786 2345 l
-1749 2345 l
-1748 2345 m
-1787 2345 l
-1787 2346 l
-1748 2346 l
-1747 2346 m
-1788 2346 l
-1788 2347 l
-1747 2347 l
-1746 2347 m
-1789 2347 l
-1789 2348 l
-1746 2348 l
-1745 2348 m
-1790 2348 l
-1790 2349 l
-1745 2349 l
-1744 2349 m
-1791 2349 l
-1791 2350 l
-1744 2350 l
-1743 2350 m
-1792 2350 l
-1792 2351 l
-1743 2351 l
-1742 2351 m
-1793 2351 l
-1793 2352 l
-1742 2352 l
-1741 2352 m
-1794 2352 l
-1794 2353 l
-1741 2353 l
-1739 2353 m
-1795 2353 l
-1795 2354 l
-1739 2354 l
-1738 2354 m
-1796 2354 l
-1796 2355 l
-1738 2355 l
-1737 2355 m
-1796 2355 l
-1796 2356 l
-1737 2356 l
-1736 2356 m
-1797 2356 l
-1797 2357 l
-1736 2357 l
-1735 2357 m
-1798 2357 l
-1798 2358 l
-1735 2358 l
-1734 2358 m
-1799 2358 l
-1799 2359 l
-1734 2359 l
-1733 2359 m
-1800 2359 l
-1800 2360 l
-1733 2360 l
-1732 2360 m
-1801 2360 l
-1801 2361 l
-1732 2361 l
-1731 2361 m
-1802 2361 l
-1802 2362 l
-1731 2362 l
-1730 2362 m
-1803 2362 l
-1803 2363 l
-1730 2363 l
-1729 2363 m
-1804 2363 l
-1804 2364 l
-1729 2364 l
-1728 2364 m
-1805 2364 l
-1805 2365 l
-1728 2365 l
-1727 2365 m
-1806 2365 l
-1806 2366 l
-1727 2366 l
-1726 2366 m
-1807 2366 l
-1807 2367 l
-1726 2367 l
-1725 2367 m
-1808 2367 l
-1808 2368 l
-1725 2368 l
-1724 2368 m
-1809 2368 l
-1809 2369 l
-1724 2369 l
-1723 2369 m
-1810 2369 l
-1810 2370 l
-1723 2370 l
-1722 2370 m
-1811 2370 l
-1811 2371 l
-1722 2371 l
-1721 2371 m
-1812 2371 l
-1812 2372 l
-1721 2372 l
-1720 2372 m
-1813 2372 l
-1813 2373 l
-1720 2373 l
-1719 2373 m
-1814 2373 l
-1814 2374 l
-1719 2374 l
-1718 2374 m
-1815 2374 l
-1815 2375 l
-1718 2375 l
-1717 2375 m
-1816 2375 l
-1816 2376 l
-1717 2376 l
-1716 2376 m
-1817 2376 l
-1817 2377 l
-1716 2377 l
-1715 2377 m
-1818 2377 l
-1818 2378 l
-1715 2378 l
-1714 2378 m
-1819 2378 l
-1819 2379 l
-1714 2379 l
-1712 2379 m
-1820 2379 l
-1820 2380 l
-1712 2380 l
-1711 2380 m
-1821 2380 l
-1821 2381 l
-1711 2381 l
-1710 2381 m
-1822 2381 l
-1822 2382 l
-1710 2382 l
-1709 2382 m
-1823 2382 l
-1823 2383 l
-1709 2383 l
-1708 2383 m
-1823 2383 l
-1823 2384 l
-1708 2384 l
-1707 2384 m
-1824 2384 l
-1824 2385 l
-1707 2385 l
-1706 2385 m
-1825 2385 l
-1825 2386 l
-1706 2386 l
-1705 2386 m
-1826 2386 l
-1826 2387 l
-1705 2387 l
-1704 2387 m
-1827 2387 l
-1827 2388 l
-1704 2388 l
-1703 2388 m
-1828 2388 l
-1828 2389 l
-1703 2389 l
-1702 2389 m
-1829 2389 l
-1829 2390 l
-1702 2390 l
-1701 2390 m
-1830 2390 l
-1830 2391 l
-1701 2391 l
-1700 2391 m
-1831 2391 l
-1831 2392 l
-1700 2392 l
-1699 2392 m
-1832 2392 l
-1832 2393 l
-1699 2393 l
-1698 2393 m
-1833 2393 l
-1833 2394 l
-1698 2394 l
-1697 2394 m
-1834 2394 l
-1834 2395 l
-1697 2395 l
-1696 2395 m
-1835 2395 l
-1835 2396 l
-1696 2396 l
-1695 2396 m
-1836 2396 l
-1836 2397 l
-1695 2397 l
-1694 2397 m
-1837 2397 l
-1837 2398 l
-1694 2398 l
-1693 2398 m
-1838 2398 l
-1838 2399 l
-1693 2399 l
-1692 2399 m
-1839 2399 l
-1839 2400 l
-1692 2400 l
-1691 2400 m
-1840 2400 l
-1840 2401 l
-1691 2401 l
-1690 2401 m
-1841 2401 l
-1841 2402 l
-1690 2402 l
-1689 2402 m
-1842 2402 l
-1842 2403 l
-1689 2403 l
-1688 2403 m
-1843 2403 l
-1843 2404 l
-1688 2404 l
-1687 2404 m
-1844 2404 l
-1844 2405 l
-1687 2405 l
-1686 2405 m
-1845 2405 l
-1845 2406 l
-1686 2406 l
-1684 2406 m
-1846 2406 l
-1846 2407 l
-1684 2407 l
-1683 2407 m
-1847 2407 l
-1847 2408 l
-1683 2408 l
-1682 2408 m
-1848 2408 l
-1848 2409 l
-1682 2409 l
-1681 2409 m
-1849 2409 l
-1849 2410 l
-1681 2410 l
-1680 2410 m
-1850 2410 l
-1850 2411 l
-1680 2411 l
-1679 2411 m
-1850 2411 l
-1850 2412 l
-1679 2412 l
-1678 2412 m
-1851 2412 l
-1851 2413 l
-1678 2413 l
-1677 2413 m
-1852 2413 l
-1852 2414 l
-1677 2414 l
-1676 2414 m
-1853 2414 l
-1853 2415 l
-1676 2415 l
-1675 2415 m
-1852 2415 l
-1852 2416 l
-1675 2416 l
-1674 2416 m
-1851 2416 l
-1851 2417 l
-1674 2417 l
-1673 2417 m
-1850 2417 l
-1850 2418 l
-1673 2418 l
-1672 2418 m
-1849 2418 l
-1849 2419 l
-1672 2419 l
-1671 2419 m
-1848 2419 l
-1848 2420 l
-1671 2420 l
-1670 2420 m
-1847 2420 l
-1847 2421 l
-1670 2421 l
-1669 2421 m
-1846 2421 l
-1846 2422 l
-1669 2422 l
-1668 2422 m
-1845 2422 l
-1845 2423 l
-1668 2423 l
-1667 2423 m
-1844 2423 l
-1844 2424 l
-1667 2424 l
-1666 2424 m
-1843 2424 l
-1843 2425 l
-1666 2425 l
-1665 2425 m
-1842 2425 l
-1842 2426 l
-1665 2426 l
-1664 2426 m
-1841 2426 l
-1841 2427 l
-1664 2427 l
-1663 2427 m
-1840 2427 l
-1840 2428 l
-1663 2428 l
-1662 2428 m
-1839 2428 l
-1839 2429 l
-1662 2429 l
-1661 2429 m
-1838 2429 l
-1838 2430 l
-1661 2430 l
-1660 2430 m
-1837 2430 l
-1837 2431 l
-1660 2431 l
-1659 2431 m
-1836 2431 l
-1836 2432 l
-1659 2432 l
-1657 2432 m
-1835 2432 l
-1835 2433 l
-1657 2433 l
-1656 2433 m
-1834 2433 l
-1834 2434 l
-1656 2434 l
-1655 2434 m
-1833 2434 l
-1833 2435 l
-1655 2435 l
-1654 2435 m
-1832 2435 l
-1832 2436 l
-1654 2436 l
-1653 2436 m
-1831 2436 l
-1831 2437 l
-1653 2437 l
-1652 2437 m
-1830 2437 l
-1830 2438 l
-1652 2438 l
-1651 2438 m
-1829 2438 l
-1829 2439 l
-1651 2439 l
-1650 2439 m
-1827 2439 l
-1827 2440 l
-1650 2440 l
-1649 2440 m
-1826 2440 l
-1826 2441 l
-1649 2441 l
-1648 2441 m
-1825 2441 l
-1825 2442 l
-1648 2442 l
-1647 2442 m
-1824 2442 l
-1824 2443 l
-1647 2443 l
-1646 2443 m
-1823 2443 l
-1823 2444 l
-1646 2444 l
-1645 2444 m
-1822 2444 l
-1822 2445 l
-1645 2445 l
-1644 2445 m
-1821 2445 l
-1821 2446 l
-1644 2446 l
-1643 2446 m
-1820 2446 l
-1820 2447 l
-1643 2447 l
-1642 2447 m
-1819 2447 l
-1819 2448 l
-1642 2448 l
-1641 2448 m
-1818 2448 l
-1818 2449 l
-1641 2449 l
-1640 2449 m
-1817 2449 l
-1817 2450 l
-1640 2450 l
-1639 2450 m
-1816 2450 l
-1816 2451 l
-1639 2451 l
-1638 2451 m
-1815 2451 l
-1815 2452 l
-1638 2452 l
-1637 2452 m
-1814 2452 l
-1814 2453 l
-1637 2453 l
-1636 2453 m
-1813 2453 l
-1813 2454 l
-1636 2454 l
-1635 2454 m
-1812 2454 l
-1812 2455 l
-1635 2455 l
-1634 2455 m
-1811 2455 l
-1811 2456 l
-1634 2456 l
-1633 2456 m
-1810 2456 l
-1810 2457 l
-1633 2457 l
-1632 2457 m
-1809 2457 l
-1809 2458 l
-1632 2458 l
-1631 2458 m
-1808 2458 l
-1808 2459 l
-1631 2459 l
-1629 2459 m
-1807 2459 l
-1807 2460 l
-1629 2460 l
-1628 2460 m
-1806 2460 l
-1806 2461 l
-1628 2461 l
-1627 2461 m
-1805 2461 l
-1805 2462 l
-1627 2462 l
-1626 2462 m
-1804 2462 l
-1804 2463 l
-1626 2463 l
-1625 2463 m
-1803 2463 l
-1803 2464 l
-1625 2464 l
-1624 2464 m
-1802 2464 l
-1802 2465 l
-1624 2465 l
-1623 2465 m
-1801 2465 l
-1801 2466 l
-1623 2466 l
-1622 2466 m
-1799 2466 l
-1799 2467 l
-1622 2467 l
-1621 2467 m
-1798 2467 l
-1798 2468 l
-1621 2468 l
-1620 2468 m
-1797 2468 l
-1797 2469 l
-1620 2469 l
-1619 2469 m
-1796 2469 l
-1796 2470 l
-1619 2470 l
-1618 2470 m
-1795 2470 l
-1795 2471 l
-1618 2471 l
-1617 2471 m
-1794 2471 l
-1794 2472 l
-1617 2472 l
-1616 2472 m
-1793 2472 l
-1793 2473 l
-1616 2473 l
-1615 2473 m
-1792 2473 l
-1792 2474 l
-1615 2474 l
-1614 2474 m
-1791 2474 l
-1791 2475 l
-1614 2475 l
-1613 2475 m
-1790 2475 l
-1790 2476 l
-1613 2476 l
-1612 2476 m
-1789 2476 l
-1789 2477 l
-1612 2477 l
-1611 2477 m
-1788 2477 l
-1788 2478 l
-1611 2478 l
-1610 2478 m
-1787 2478 l
-1787 2479 l
-1610 2479 l
-1609 2479 m
-1786 2479 l
-1786 2480 l
-1609 2480 l
-1608 2480 m
-1785 2480 l
-1785 2481 l
-1608 2481 l
-1607 2481 m
-1784 2481 l
-1784 2482 l
-1607 2482 l
-1606 2482 m
-1783 2482 l
-1783 2483 l
-1606 2483 l
-1605 2483 m
-1782 2483 l
-1782 2484 l
-1605 2484 l
-1604 2484 m
-1781 2484 l
-1781 2485 l
-1604 2485 l
-1602 2485 m
-1780 2485 l
-1780 2486 l
-1602 2486 l
-1601 2486 m
-1779 2486 l
-1779 2487 l
-1601 2487 l
-1600 2487 m
-1778 2487 l
-1778 2488 l
-1600 2488 l
-1599 2488 m
-1777 2488 l
-1777 2489 l
-1599 2489 l
-1598 2489 m
-1776 2489 l
-1776 2490 l
-1598 2490 l
-1597 2490 m
-1775 2490 l
-1775 2491 l
-1597 2491 l
-1596 2491 m
-1774 2491 l
-1774 2492 l
-1596 2492 l
-1595 2492 m
-1773 2492 l
-1773 2493 l
-1595 2493 l
-1594 2493 m
-1771 2493 l
-1771 2494 l
-1594 2494 l
-1593 2494 m
-1770 2494 l
-1770 2495 l
-1593 2495 l
-1592 2495 m
-1769 2495 l
-1769 2496 l
-1592 2496 l
-1591 2496 m
-1768 2496 l
-1768 2497 l
-1591 2497 l
-1590 2497 m
-1767 2497 l
-1767 2498 l
-1590 2498 l
-1589 2498 m
-1766 2498 l
-1766 2499 l
-1589 2499 l
-1588 2499 m
-1765 2499 l
-1765 2500 l
-1588 2500 l
-1587 2500 m
-1764 2500 l
-1764 2501 l
-1587 2501 l
-1586 2501 m
-1763 2501 l
-1763 2502 l
-1586 2502 l
-1585 2502 m
-1762 2502 l
-1762 2503 l
-1585 2503 l
-1584 2503 m
-1761 2503 l
-1761 2504 l
-1584 2504 l
-1583 2504 m
-1760 2504 l
-1760 2505 l
-1583 2505 l
-1582 2505 m
-1759 2505 l
-1759 2506 l
-1582 2506 l
-1581 2506 m
-1758 2506 l
-1758 2507 l
-1581 2507 l
-1580 2507 m
-1757 2507 l
-1757 2508 l
-1580 2508 l
-1579 2508 m
-1756 2508 l
-1756 2509 l
-1579 2509 l
-1578 2509 m
-1755 2509 l
-1755 2510 l
-1578 2510 l
-1577 2510 m
-1754 2510 l
-1754 2511 l
-1577 2511 l
-1576 2511 m
-1753 2511 l
-1753 2512 l
-1576 2512 l
-1576 2512 m
-1752 2512 l
-1752 2513 l
-1576 2513 l
-1576 2513 m
-1751 2513 l
-1751 2514 l
-1576 2514 l
-1577 2514 m
-1750 2514 l
-1750 2515 l
-1577 2515 l
-1578 2515 m
-1749 2515 l
-1749 2516 l
-1578 2516 l
-1579 2516 m
-1748 2516 l
-1748 2517 l
-1579 2517 l
-1580 2517 m
-1747 2517 l
-1747 2518 l
-1580 2518 l
-1581 2518 m
-1746 2518 l
-1746 2519 l
-1581 2519 l
-1582 2519 m
-1745 2519 l
-1745 2520 l
-1582 2520 l
-1583 2520 m
-1743 2520 l
-1743 2521 l
-1583 2521 l
-1584 2521 m
-1742 2521 l
-1742 2522 l
-1584 2522 l
-1585 2522 m
-1741 2522 l
-1741 2523 l
-1585 2523 l
-1586 2523 m
-1740 2523 l
-1740 2524 l
-1586 2524 l
-1587 2524 m
-1739 2524 l
-1739 2525 l
-1587 2525 l
-1588 2525 m
-1738 2525 l
-1738 2526 l
-1588 2526 l
-1589 2526 m
-1737 2526 l
-1737 2527 l
-1589 2527 l
-1590 2527 m
-1736 2527 l
-1736 2528 l
-1590 2528 l
-1591 2528 m
-1735 2528 l
-1735 2529 l
-1591 2529 l
-1592 2529 m
-1734 2529 l
-1734 2530 l
-1592 2530 l
-1593 2530 m
-1733 2530 l
-1733 2531 l
-1593 2531 l
-1594 2531 m
-1732 2531 l
-1732 2532 l
-1594 2532 l
-1595 2532 m
-1731 2532 l
-1731 2533 l
-1595 2533 l
-1596 2533 m
-1730 2533 l
-1730 2534 l
-1596 2534 l
-1597 2534 m
-1729 2534 l
-1729 2535 l
-1597 2535 l
-1597 2535 m
-1728 2535 l
-1728 2536 l
-1597 2536 l
-1598 2536 m
-1727 2536 l
-1727 2537 l
-1598 2537 l
-1599 2537 m
-1726 2537 l
-1726 2538 l
-1599 2538 l
-1600 2538 m
-1725 2538 l
-1725 2539 l
-1600 2539 l
-1601 2539 m
-1724 2539 l
-1724 2540 l
-1601 2540 l
-1602 2540 m
-1723 2540 l
-1723 2541 l
-1602 2541 l
-1603 2541 m
-1722 2541 l
-1722 2542 l
-1603 2542 l
-1604 2542 m
-1721 2542 l
-1721 2543 l
-1604 2543 l
-1605 2543 m
-1720 2543 l
-1720 2544 l
-1605 2544 l
-1606 2544 m
-1719 2544 l
-1719 2545 l
-1606 2545 l
-1607 2545 m
-1718 2545 l
-1718 2546 l
-1607 2546 l
-1608 2546 m
-1717 2546 l
-1717 2547 l
-1608 2547 l
-1609 2547 m
-1715 2547 l
-1715 2548 l
-1609 2548 l
-1610 2548 m
-1714 2548 l
-1714 2549 l
-1610 2549 l
-1611 2549 m
-1713 2549 l
-1713 2550 l
-1611 2550 l
-1612 2550 m
-1712 2550 l
-1712 2551 l
-1612 2551 l
-1613 2551 m
-1711 2551 l
-1711 2552 l
-1613 2552 l
-1614 2552 m
-1710 2552 l
-1710 2553 l
-1614 2553 l
-1615 2553 m
-1709 2553 l
-1709 2554 l
-1615 2554 l
-1616 2554 m
-1708 2554 l
-1708 2555 l
-1616 2555 l
-1617 2555 m
-1707 2555 l
-1707 2556 l
-1617 2556 l
-1618 2556 m
-1706 2556 l
-1706 2557 l
-1618 2557 l
-1618 2557 m
-1705 2557 l
-1705 2558 l
-1618 2558 l
-1619 2558 m
-1704 2558 l
-1704 2559 l
-1619 2559 l
-1620 2559 m
-1703 2559 l
-1703 2560 l
-1620 2560 l
-1621 2560 m
-1702 2560 l
-1702 2561 l
-1621 2561 l
-1622 2561 m
-1701 2561 l
-1701 2562 l
-1622 2562 l
-1623 2562 m
-1700 2562 l
-1700 2563 l
-1623 2563 l
-1624 2563 m
-1699 2563 l
-1699 2564 l
-1624 2564 l
-1625 2564 m
-1698 2564 l
-1698 2565 l
-1625 2565 l
-1626 2565 m
-1697 2565 l
-1697 2566 l
-1626 2566 l
-1627 2566 m
-1696 2566 l
-1696 2567 l
-1627 2567 l
-1628 2567 m
-1695 2567 l
-1695 2568 l
-1628 2568 l
-1629 2568 m
-1694 2568 l
-1694 2569 l
-1629 2569 l
-1630 2569 m
-1693 2569 l
-1693 2570 l
-1630 2570 l
-1631 2570 m
-1692 2570 l
-1692 2571 l
-1631 2571 l
-1632 2571 m
-1691 2571 l
-1691 2572 l
-1632 2572 l
-1633 2572 m
-1690 2572 l
-1690 2573 l
-1633 2573 l
-1634 2573 m
-1689 2573 l
-1689 2574 l
-1634 2574 l
-1635 2574 m
-1687 2574 l
-1687 2575 l
-1635 2575 l
-1636 2575 m
-1686 2575 l
-1686 2576 l
-1636 2576 l
-1637 2576 m
-1685 2576 l
-1685 2577 l
-1637 2577 l
-1638 2577 m
-1684 2577 l
-1684 2578 l
-1638 2578 l
-1639 2578 m
-1683 2578 l
-1683 2579 l
-1639 2579 l
-1639 2579 m
-1682 2579 l
-1682 2580 l
-1639 2580 l
-1640 2580 m
-1681 2580 l
-1681 2581 l
-1640 2581 l
-1641 2581 m
-1680 2581 l
-1680 2582 l
-1641 2582 l
-1642 2582 m
-1679 2582 l
-1679 2583 l
-1642 2583 l
-1643 2583 m
-1678 2583 l
-1678 2584 l
-1643 2584 l
-1644 2584 m
-1677 2584 l
-1677 2585 l
-1644 2585 l
-1645 2585 m
-1676 2585 l
-1676 2586 l
-1645 2586 l
-1646 2586 m
-1675 2586 l
-1675 2587 l
-1646 2587 l
-1647 2587 m
-1674 2587 l
-1674 2588 l
-1647 2588 l
-1648 2588 m
-1673 2588 l
-1673 2589 l
-1648 2589 l
-1649 2589 m
-1672 2589 l
-1672 2590 l
-1649 2590 l
-1650 2590 m
-1671 2590 l
-1671 2591 l
-1650 2591 l
-1651 2591 m
-1670 2591 l
-1670 2592 l
-1651 2592 l
-1652 2592 m
-1669 2592 l
-1669 2593 l
-1652 2593 l
-1653 2593 m
-1668 2593 l
-1668 2594 l
-1653 2594 l
-1654 2594 m
-1667 2594 l
-1667 2595 l
-1654 2595 l
-1655 2595 m
-1666 2595 l
-1666 2596 l
-1655 2596 l
-1656 2596 m
-1665 2596 l
-1665 2597 l
-1656 2597 l
-1657 2597 m
-1664 2597 l
-1664 2598 l
-1657 2598 l
-1658 2598 m
-1663 2598 l
-1663 2599 l
-1658 2599 l
-1659 2599 m
-1662 2599 l
-1662 2600 l
-1659 2600 l
-Y
-1852.4 2414.5 m
-1768 2327 l
-1576 2512 l
-1660 2600 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-1776 2372 m
-1774 2369 l
-1765 2365 l
-1759 2365 l
-1750 2368 l
-1738 2380 l
-1735 2388 l
-1735 2394 l
-1737 2403 l
-1743 2409 l
-1752 2412 l
-1767 2416 l
-1826 2417 l
-1784 2457 l
-S
-1716 2429 m
-1713 2426 l
-1704 2423 l
-1699 2423 l
-1690 2426 l
-1678 2438 l
-1674 2446 l
-1674 2452 l
-1677 2461 l
-1683 2467 l
-1692 2470 l
-1706 2474 l
-1765 2475 l
-1723 2515 l
-S
-1608 2504 m
-1638 2475 l
-1667 2499 l
-1662 2499 l
-1650 2505 l
-1641 2514 l
-1634 2525 l
-1634 2537 l
-1640 2549 l
-1646 2555 l
-1657 2561 l
-1669 2561 l
-1681 2556 l
-1690 2547 l
-1696 2535 l
-1696 2529 l
-1694 2521 l
-S
-1 g
-3771 2313 m
-3774 2313 l
-3774 2314 l
-3771 2314 l
-3770 2314 m
-3776 2314 l
-3776 2315 l
-3770 2315 l
-3769 2315 m
-3777 2315 l
-3777 2316 l
-3769 2316 l
-3769 2316 m
-3778 2316 l
-3778 2317 l
-3769 2317 l
-3768 2317 m
-3779 2317 l
-3779 2318 l
-3768 2318 l
-3767 2318 m
-3781 2318 l
-3781 2319 l
-3767 2319 l
-3766 2319 m
-3782 2319 l
-3782 2320 l
-3766 2320 l
-3766 2320 m
-3783 2320 l
-3783 2321 l
-3766 2321 l
-3765 2321 m
-3785 2321 l
-3785 2322 l
-3765 2322 l
-3764 2322 m
-3786 2322 l
-3786 2323 l
-3764 2323 l
-3763 2323 m
-3787 2323 l
-3787 2324 l
-3763 2324 l
-3763 2324 m
-3789 2324 l
-3789 2325 l
-3763 2325 l
-3762 2325 m
-3790 2325 l
-3790 2326 l
-3762 2326 l
-3761 2326 m
-3791 2326 l
-3791 2327 l
-3761 2327 l
-3760 2327 m
-3792 2327 l
-3792 2328 l
-3760 2328 l
-3760 2328 m
-3794 2328 l
-3794 2329 l
-3760 2329 l
-3759 2329 m
-3795 2329 l
-3795 2330 l
-3759 2330 l
-3758 2330 m
-3796 2330 l
-3796 2331 l
-3758 2331 l
-3757 2331 m
-3798 2331 l
-3798 2332 l
-3757 2332 l
-3756 2332 m
-3799 2332 l
-3799 2333 l
-3756 2333 l
-3756 2333 m
-3800 2333 l
-3800 2334 l
-3756 2334 l
-3755 2334 m
-3801 2334 l
-3801 2335 l
-3755 2335 l
-3754 2335 m
-3803 2335 l
-3803 2336 l
-3754 2336 l
-3753 2336 m
-3804 2336 l
-3804 2337 l
-3753 2337 l
-3753 2337 m
-3805 2337 l
-3805 2338 l
-3753 2338 l
-3752 2338 m
-3807 2338 l
-3807 2339 l
-3752 2339 l
-3751 2339 m
-3808 2339 l
-3808 2340 l
-3751 2340 l
-3750 2340 m
-3809 2340 l
-3809 2341 l
-3750 2341 l
-3750 2341 m
-3811 2341 l
-3811 2342 l
-3750 2342 l
-3749 2342 m
-3812 2342 l
-3812 2343 l
-3749 2343 l
-3748 2343 m
-3813 2343 l
-3813 2344 l
-3748 2344 l
-3747 2344 m
-3814 2344 l
-3814 2345 l
-3747 2345 l
-3747 2345 m
-3816 2345 l
-3816 2346 l
-3747 2346 l
-3746 2346 m
-3817 2346 l
-3817 2347 l
-3746 2347 l
-3745 2347 m
-3818 2347 l
-3818 2348 l
-3745 2348 l
-3744 2348 m
-3820 2348 l
-3820 2349 l
-3744 2349 l
-3744 2349 m
-3821 2349 l
-3821 2350 l
-3744 2350 l
-3743 2350 m
-3822 2350 l
-3822 2351 l
-3743 2351 l
-3742 2351 m
-3824 2351 l
-3824 2352 l
-3742 2352 l
-3741 2352 m
-3825 2352 l
-3825 2353 l
-3741 2353 l
-3740 2353 m
-3826 2353 l
-3826 2354 l
-3740 2354 l
-3740 2354 m
-3827 2354 l
-3827 2355 l
-3740 2355 l
-3739 2355 m
-3829 2355 l
-3829 2356 l
-3739 2356 l
-3738 2356 m
-3830 2356 l
-3830 2357 l
-3738 2357 l
-3737 2357 m
-3831 2357 l
-3831 2358 l
-3737 2358 l
-3737 2358 m
-3833 2358 l
-3833 2359 l
-3737 2359 l
-3736 2359 m
-3834 2359 l
-3834 2360 l
-3736 2360 l
-3735 2360 m
-3835 2360 l
-3835 2361 l
-3735 2361 l
-3734 2361 m
-3837 2361 l
-3837 2362 l
-3734 2362 l
-3734 2362 m
-3838 2362 l
-3838 2363 l
-3734 2363 l
-3733 2363 m
-3839 2363 l
-3839 2364 l
-3733 2364 l
-3732 2364 m
-3840 2364 l
-3840 2365 l
-3732 2365 l
-3731 2365 m
-3842 2365 l
-3842 2366 l
-3731 2366 l
-3731 2366 m
-3843 2366 l
-3843 2367 l
-3731 2367 l
-3730 2367 m
-3844 2367 l
-3844 2368 l
-3730 2368 l
-3729 2368 m
-3846 2368 l
-3846 2369 l
-3729 2369 l
-3728 2369 m
-3847 2369 l
-3847 2370 l
-3728 2370 l
-3727 2370 m
-3848 2370 l
-3848 2371 l
-3727 2371 l
-3727 2371 m
-3850 2371 l
-3850 2372 l
-3727 2372 l
-3726 2372 m
-3851 2372 l
-3851 2373 l
-3726 2373 l
-3725 2373 m
-3852 2373 l
-3852 2374 l
-3725 2374 l
-3724 2374 m
-3853 2374 l
-3853 2375 l
-3724 2375 l
-3724 2375 m
-3855 2375 l
-3855 2376 l
-3724 2376 l
-3723 2376 m
-3856 2376 l
-3856 2377 l
-3723 2377 l
-3722 2377 m
-3857 2377 l
-3857 2378 l
-3722 2378 l
-3721 2378 m
-3859 2378 l
-3859 2379 l
-3721 2379 l
-3721 2379 m
-3860 2379 l
-3860 2380 l
-3721 2380 l
-3720 2380 m
-3861 2380 l
-3861 2381 l
-3720 2381 l
-3719 2381 m
-3862 2381 l
-3862 2382 l
-3719 2382 l
-3718 2382 m
-3864 2382 l
-3864 2383 l
-3718 2383 l
-3718 2383 m
-3865 2383 l
-3865 2384 l
-3718 2384 l
-3717 2384 m
-3866 2384 l
-3866 2385 l
-3717 2385 l
-3716 2385 m
-3868 2385 l
-3868 2386 l
-3716 2386 l
-3715 2386 m
-3869 2386 l
-3869 2387 l
-3715 2387 l
-3715 2387 m
-3870 2387 l
-3870 2388 l
-3715 2388 l
-3714 2388 m
-3872 2388 l
-3872 2389 l
-3714 2389 l
-3713 2389 m
-3873 2389 l
-3873 2390 l
-3713 2390 l
-3712 2390 m
-3874 2390 l
-3874 2391 l
-3712 2391 l
-3711 2391 m
-3875 2391 l
-3875 2392 l
-3711 2392 l
-3711 2392 m
-3877 2392 l
-3877 2393 l
-3711 2393 l
-3710 2393 m
-3878 2393 l
-3878 2394 l
-3710 2394 l
-3709 2394 m
-3879 2394 l
-3879 2395 l
-3709 2395 l
-3708 2395 m
-3881 2395 l
-3881 2396 l
-3708 2396 l
-3708 2396 m
-3882 2396 l
-3882 2397 l
-3708 2397 l
-3707 2397 m
-3883 2397 l
-3883 2398 l
-3707 2398 l
-3706 2398 m
-3885 2398 l
-3885 2399 l
-3706 2399 l
-3705 2399 m
-3886 2399 l
-3886 2400 l
-3705 2400 l
-3705 2400 m
-3887 2400 l
-3887 2401 l
-3705 2401 l
-3704 2401 m
-3888 2401 l
-3888 2402 l
-3704 2402 l
-3703 2402 m
-3890 2402 l
-3890 2403 l
-3703 2403 l
-3702 2403 m
-3891 2403 l
-3891 2404 l
-3702 2404 l
-3702 2404 m
-3892 2404 l
-3892 2405 l
-3702 2405 l
-3701 2405 m
-3894 2405 l
-3894 2406 l
-3701 2406 l
-3700 2406 m
-3895 2406 l
-3895 2407 l
-3700 2407 l
-3699 2407 m
-3896 2407 l
-3896 2408 l
-3699 2408 l
-3699 2408 m
-3898 2408 l
-3898 2409 l
-3699 2409 l
-3699 2409 m
-3899 2409 l
-3899 2410 l
-3699 2410 l
-3700 2410 m
-3900 2410 l
-3900 2411 l
-3700 2411 l
-3701 2411 m
-3901 2411 l
-3901 2412 l
-3701 2412 l
-3702 2412 m
-3903 2412 l
-3903 2413 l
-3702 2413 l
-3704 2413 m
-3904 2413 l
-3904 2414 l
-3704 2414 l
-3705 2414 m
-3905 2414 l
-3905 2415 l
-3705 2415 l
-3706 2415 m
-3907 2415 l
-3907 2416 l
-3706 2416 l
-3708 2416 m
-3908 2416 l
-3908 2417 l
-3708 2417 l
-3709 2417 m
-3909 2417 l
-3909 2418 l
-3709 2418 l
-3710 2418 m
-3911 2418 l
-3911 2419 l
-3710 2419 l
-3712 2419 m
-3912 2419 l
-3912 2420 l
-3712 2420 l
-3713 2420 m
-3913 2420 l
-3913 2421 l
-3713 2421 l
-3714 2421 m
-3914 2421 l
-3914 2422 l
-3714 2422 l
-3715 2422 m
-3916 2422 l
-3916 2423 l
-3715 2423 l
-3717 2423 m
-3917 2423 l
-3917 2424 l
-3717 2424 l
-3718 2424 m
-3918 2424 l
-3918 2425 l
-3718 2425 l
-3719 2425 m
-3920 2425 l
-3920 2426 l
-3719 2426 l
-3721 2426 m
-3921 2426 l
-3921 2427 l
-3721 2427 l
-3722 2427 m
-3922 2427 l
-3922 2428 l
-3722 2428 l
-3723 2428 m
-3923 2428 l
-3923 2429 l
-3723 2429 l
-3725 2429 m
-3925 2429 l
-3925 2430 l
-3725 2430 l
-3726 2430 m
-3926 2430 l
-3926 2431 l
-3726 2431 l
-3727 2431 m
-3927 2431 l
-3927 2432 l
-3727 2432 l
-3728 2432 m
-3929 2432 l
-3929 2433 l
-3728 2433 l
-3730 2433 m
-3930 2433 l
-3930 2434 l
-3730 2434 l
-3731 2434 m
-3931 2434 l
-3931 2435 l
-3731 2435 l
-3732 2435 m
-3933 2435 l
-3933 2436 l
-3732 2436 l
-3734 2436 m
-3934 2436 l
-3934 2437 l
-3734 2437 l
-3735 2437 m
-3935 2437 l
-3935 2438 l
-3735 2438 l
-3736 2438 m
-3936 2438 l
-3936 2439 l
-3736 2439 l
-3738 2439 m
-3938 2439 l
-3938 2440 l
-3738 2440 l
-3739 2440 m
-3939 2440 l
-3939 2441 l
-3739 2441 l
-3740 2441 m
-3940 2441 l
-3940 2442 l
-3740 2442 l
-3741 2442 m
-3942 2442 l
-3942 2443 l
-3741 2443 l
-3743 2443 m
-3943 2443 l
-3943 2444 l
-3743 2444 l
-3744 2444 m
-3944 2444 l
-3944 2445 l
-3744 2445 l
-3745 2445 m
-3946 2445 l
-3946 2446 l
-3745 2446 l
-3747 2446 m
-3947 2446 l
-3947 2447 l
-3747 2447 l
-3748 2447 m
-3948 2447 l
-3948 2448 l
-3748 2448 l
-3749 2448 m
-3949 2448 l
-3949 2449 l
-3749 2449 l
-3751 2449 m
-3951 2449 l
-3951 2450 l
-3751 2450 l
-3752 2450 m
-3952 2450 l
-3952 2451 l
-3752 2451 l
-3753 2451 m
-3953 2451 l
-3953 2452 l
-3753 2452 l
-3754 2452 m
-3955 2452 l
-3955 2453 l
-3754 2453 l
-3756 2453 m
-3956 2453 l
-3956 2454 l
-3756 2454 l
-3757 2454 m
-3957 2454 l
-3957 2455 l
-3757 2455 l
-3758 2455 m
-3959 2455 l
-3959 2456 l
-3758 2456 l
-3760 2456 m
-3960 2456 l
-3960 2457 l
-3760 2457 l
-3761 2457 m
-3961 2457 l
-3961 2458 l
-3761 2458 l
-3762 2458 m
-3962 2458 l
-3962 2459 l
-3762 2459 l
-3764 2459 m
-3964 2459 l
-3964 2460 l
-3764 2460 l
-3765 2460 m
-3965 2460 l
-3965 2461 l
-3765 2461 l
-3766 2461 m
-3966 2461 l
-3966 2462 l
-3766 2462 l
-3767 2462 m
-3968 2462 l
-3968 2463 l
-3767 2463 l
-3769 2463 m
-3969 2463 l
-3969 2464 l
-3769 2464 l
-3770 2464 m
-3970 2464 l
-3970 2465 l
-3770 2465 l
-3771 2465 m
-3972 2465 l
-3972 2466 l
-3771 2466 l
-3773 2466 m
-3973 2466 l
-3973 2467 l
-3773 2467 l
-3774 2467 m
-3974 2467 l
-3974 2468 l
-3774 2468 l
-3775 2468 m
-3975 2468 l
-3975 2469 l
-3775 2469 l
-3777 2469 m
-3977 2469 l
-3977 2470 l
-3777 2470 l
-3778 2470 m
-3978 2470 l
-3978 2471 l
-3778 2471 l
-3779 2471 m
-3979 2471 l
-3979 2472 l
-3779 2472 l
-3780 2472 m
-3981 2472 l
-3981 2473 l
-3780 2473 l
-3782 2473 m
-3982 2473 l
-3982 2474 l
-3782 2474 l
-3783 2474 m
-3983 2474 l
-3983 2475 l
-3783 2475 l
-3784 2475 m
-3984 2475 l
-3984 2476 l
-3784 2476 l
-3786 2476 m
-3984 2476 l
-3984 2477 l
-3786 2477 l
-3787 2477 m
-3984 2477 l
-3984 2478 l
-3787 2478 l
-3788 2478 m
-3983 2478 l
-3983 2479 l
-3788 2479 l
-3790 2479 m
-3982 2479 l
-3982 2480 l
-3790 2480 l
-3791 2480 m
-3981 2480 l
-3981 2481 l
-3791 2481 l
-3792 2481 m
-3981 2481 l
-3981 2482 l
-3792 2482 l
-3793 2482 m
-3980 2482 l
-3980 2483 l
-3793 2483 l
-3795 2483 m
-3979 2483 l
-3979 2484 l
-3795 2484 l
-3796 2484 m
-3978 2484 l
-3978 2485 l
-3796 2485 l
-3797 2485 m
-3978 2485 l
-3978 2486 l
-3797 2486 l
-3799 2486 m
-3977 2486 l
-3977 2487 l
-3799 2487 l
-3800 2487 m
-3976 2487 l
-3976 2488 l
-3800 2488 l
-3801 2488 m
-3975 2488 l
-3975 2489 l
-3801 2489 l
-3803 2489 m
-3975 2489 l
-3975 2490 l
-3803 2490 l
-3804 2490 m
-3974 2490 l
-3974 2491 l
-3804 2491 l
-3805 2491 m
-3973 2491 l
-3973 2492 l
-3805 2492 l
-3806 2492 m
-3972 2492 l
-3972 2493 l
-3806 2493 l
-3808 2493 m
-3972 2493 l
-3972 2494 l
-3808 2494 l
-3809 2494 m
-3971 2494 l
-3971 2495 l
-3809 2495 l
-3810 2495 m
-3970 2495 l
-3970 2496 l
-3810 2496 l
-3812 2496 m
-3969 2496 l
-3969 2497 l
-3812 2497 l
-3813 2497 m
-3969 2497 l
-3969 2498 l
-3813 2498 l
-3814 2498 m
-3968 2498 l
-3968 2499 l
-3814 2499 l
-3816 2499 m
-3967 2499 l
-3967 2500 l
-3816 2500 l
-3817 2500 m
-3966 2500 l
-3966 2501 l
-3817 2501 l
-3818 2501 m
-3965 2501 l
-3965 2502 l
-3818 2502 l
-3819 2502 m
-3965 2502 l
-3965 2503 l
-3819 2503 l
-3821 2503 m
-3964 2503 l
-3964 2504 l
-3821 2504 l
-3822 2504 m
-3963 2504 l
-3963 2505 l
-3822 2505 l
-3823 2505 m
-3962 2505 l
-3962 2506 l
-3823 2506 l
-3825 2506 m
-3962 2506 l
-3962 2507 l
-3825 2507 l
-3826 2507 m
-3961 2507 l
-3961 2508 l
-3826 2508 l
-3827 2508 m
-3960 2508 l
-3960 2509 l
-3827 2509 l
-3829 2509 m
-3959 2509 l
-3959 2510 l
-3829 2510 l
-3830 2510 m
-3959 2510 l
-3959 2511 l
-3830 2511 l
-3831 2511 m
-3958 2511 l
-3958 2512 l
-3831 2512 l
-3832 2512 m
-3957 2512 l
-3957 2513 l
-3832 2513 l
-3834 2513 m
-3956 2513 l
-3956 2514 l
-3834 2514 l
-3835 2514 m
-3956 2514 l
-3956 2515 l
-3835 2515 l
-3836 2515 m
-3955 2515 l
-3955 2516 l
-3836 2516 l
-3838 2516 m
-3954 2516 l
-3954 2517 l
-3838 2517 l
-3839 2517 m
-3953 2517 l
-3953 2518 l
-3839 2518 l
-3840 2518 m
-3953 2518 l
-3953 2519 l
-3840 2519 l
-3842 2519 m
-3952 2519 l
-3952 2520 l
-3842 2520 l
-3843 2520 m
-3951 2520 l
-3951 2521 l
-3843 2521 l
-3844 2521 m
-3950 2521 l
-3950 2522 l
-3844 2522 l
-3845 2522 m
-3950 2522 l
-3950 2523 l
-3845 2523 l
-3847 2523 m
-3949 2523 l
-3949 2524 l
-3847 2524 l
-3848 2524 m
-3948 2524 l
-3948 2525 l
-3848 2525 l
-3849 2525 m
-3947 2525 l
-3947 2526 l
-3849 2526 l
-3851 2526 m
-3946 2526 l
-3946 2527 l
-3851 2527 l
-3852 2527 m
-3946 2527 l
-3946 2528 l
-3852 2528 l
-3853 2528 m
-3945 2528 l
-3945 2529 l
-3853 2529 l
-3855 2529 m
-3944 2529 l
-3944 2530 l
-3855 2530 l
-3856 2530 m
-3943 2530 l
-3943 2531 l
-3856 2531 l
-3857 2531 m
-3943 2531 l
-3943 2532 l
-3857 2532 l
-3858 2532 m
-3942 2532 l
-3942 2533 l
-3858 2533 l
-3860 2533 m
-3941 2533 l
-3941 2534 l
-3860 2534 l
-3861 2534 m
-3940 2534 l
-3940 2535 l
-3861 2535 l
-3862 2535 m
-3940 2535 l
-3940 2536 l
-3862 2536 l
-3864 2536 m
-3939 2536 l
-3939 2537 l
-3864 2537 l
-3865 2537 m
-3938 2537 l
-3938 2538 l
-3865 2538 l
-3866 2538 m
-3937 2538 l
-3937 2539 l
-3866 2539 l
-3868 2539 m
-3937 2539 l
-3937 2540 l
-3868 2540 l
-3869 2540 m
-3936 2540 l
-3936 2541 l
-3869 2541 l
-3870 2541 m
-3935 2541 l
-3935 2542 l
-3870 2542 l
-3871 2542 m
-3934 2542 l
-3934 2543 l
-3871 2543 l
-3873 2543 m
-3934 2543 l
-3934 2544 l
-3873 2544 l
-3874 2544 m
-3933 2544 l
-3933 2545 l
-3874 2545 l
-3875 2545 m
-3932 2545 l
-3932 2546 l
-3875 2546 l
-3877 2546 m
-3931 2546 l
-3931 2547 l
-3877 2547 l
-3878 2547 m
-3931 2547 l
-3931 2548 l
-3878 2548 l
-3879 2548 m
-3930 2548 l
-3930 2549 l
-3879 2549 l
-3881 2549 m
-3929 2549 l
-3929 2550 l
-3881 2550 l
-3882 2550 m
-3928 2550 l
-3928 2551 l
-3882 2551 l
-3883 2551 m
-3927 2551 l
-3927 2552 l
-3883 2552 l
-3884 2552 m
-3927 2552 l
-3927 2553 l
-3884 2553 l
-3886 2553 m
-3926 2553 l
-3926 2554 l
-3886 2554 l
-3887 2554 m
-3925 2554 l
-3925 2555 l
-3887 2555 l
-3888 2555 m
-3924 2555 l
-3924 2556 l
-3888 2556 l
-3890 2556 m
-3924 2556 l
-3924 2557 l
-3890 2557 l
-3891 2557 m
-3923 2557 l
-3923 2558 l
-3891 2558 l
-3892 2558 m
-3922 2558 l
-3922 2559 l
-3892 2559 l
-3894 2559 m
-3921 2559 l
-3921 2560 l
-3894 2560 l
-3895 2560 m
-3921 2560 l
-3921 2561 l
-3895 2561 l
-3896 2561 m
-3920 2561 l
-3920 2562 l
-3896 2562 l
-3897 2562 m
-3919 2562 l
-3919 2563 l
-3897 2563 l
-3899 2563 m
-3918 2563 l
-3918 2564 l
-3899 2564 l
-3900 2564 m
-3918 2564 l
-3918 2565 l
-3900 2565 l
-3901 2565 m
-3917 2565 l
-3917 2566 l
-3901 2566 l
-3903 2566 m
-3916 2566 l
-3916 2567 l
-3903 2567 l
-3904 2567 m
-3915 2567 l
-3915 2568 l
-3904 2568 l
-3905 2568 m
-3915 2568 l
-3915 2569 l
-3905 2569 l
-3907 2569 m
-3914 2569 l
-3914 2570 l
-3907 2570 l
-3908 2570 m
-3913 2570 l
-3913 2571 l
-3908 2571 l
-3909 2571 m
-3912 2571 l
-3912 2572 l
-3909 2572 l
-Y
-3772.3 2312.9 m
-3699 2409 l
-3911 2572 l
-3984 2476 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-3741 2394 m
-3739 2398 l
-3737 2407 l
-3738 2413 l
-3742 2421 l
-3755 2431 l
-3764 2433 l
-3770 2432 l
-3779 2428 l
-3784 2422 l
-3785 2412 l
-3786 2397 l
-3779 2339 l
-3825 2374 l
-S
-3838 2495 m
-3858 2400 l
-S
-3792 2459 m
-3838 2495 l
-S
-3878 2525 m
-3870 2514 l
-3871 2499 l
-3881 2480 l
-3888 2470 l
-3905 2456 l
-3919 2451 l
-3931 2456 l
-3938 2461 l
-3945 2472 l
-3944 2487 l
-3935 2506 l
-3927 2516 l
-3911 2530 l
-3897 2535 l
-3885 2530 l
-3878 2525 l
-S
-1 g
-4405 3855 m
-4409 3855 l
-4409 3856 l
-4405 3856 l
-4405 3856 m
-4412 3856 l
-4412 3857 l
-4405 3857 l
-4404 3857 m
-4415 3857 l
-4415 3858 l
-4404 3858 l
-4404 3858 m
-4418 3858 l
-4418 3859 l
-4404 3859 l
-4404 3859 m
-4421 3859 l
-4421 3860 l
-4404 3860 l
-4403 3860 m
-4424 3860 l
-4424 3861 l
-4403 3861 l
-4403 3861 m
-4427 3861 l
-4427 3862 l
-4403 3862 l
-4403 3862 m
-4429 3862 l
-4429 3863 l
-4403 3863 l
-4402 3863 m
-4432 3863 l
-4432 3864 l
-4402 3864 l
-4402 3864 m
-4435 3864 l
-4435 3865 l
-4402 3865 l
-4402 3865 m
-4438 3865 l
-4438 3866 l
-4402 3866 l
-4401 3866 m
-4441 3866 l
-4441 3867 l
-4401 3867 l
-4401 3867 m
-4444 3867 l
-4444 3868 l
-4401 3868 l
-4401 3868 m
-4447 3868 l
-4447 3869 l
-4401 3869 l
-4400 3869 m
-4449 3869 l
-4449 3870 l
-4400 3870 l
-4400 3870 m
-4452 3870 l
-4452 3871 l
-4400 3871 l
-4399 3871 m
-4455 3871 l
-4455 3872 l
-4399 3872 l
-4399 3872 m
-4458 3872 l
-4458 3873 l
-4399 3873 l
-4399 3873 m
-4461 3873 l
-4461 3874 l
-4399 3874 l
-4398 3874 m
-4464 3874 l
-4464 3875 l
-4398 3875 l
-4398 3875 m
-4467 3875 l
-4467 3876 l
-4398 3876 l
-4398 3876 m
-4469 3876 l
-4469 3877 l
-4398 3877 l
-4397 3877 m
-4472 3877 l
-4472 3878 l
-4397 3878 l
-4397 3878 m
-4475 3878 l
-4475 3879 l
-4397 3879 l
-4397 3879 m
-4478 3879 l
-4478 3880 l
-4397 3880 l
-4396 3880 m
-4481 3880 l
-4481 3881 l
-4396 3881 l
-4396 3881 m
-4484 3881 l
-4484 3882 l
-4396 3882 l
-4396 3882 m
-4487 3882 l
-4487 3883 l
-4396 3883 l
-4395 3883 m
-4489 3883 l
-4489 3884 l
-4395 3884 l
-4395 3884 m
-4492 3884 l
-4492 3885 l
-4395 3885 l
-4395 3885 m
-4495 3885 l
-4495 3886 l
-4395 3886 l
-4394 3886 m
-4498 3886 l
-4498 3887 l
-4394 3887 l
-4394 3887 m
-4501 3887 l
-4501 3888 l
-4394 3888 l
-4393 3888 m
-4504 3888 l
-4504 3889 l
-4393 3889 l
-4393 3889 m
-4507 3889 l
-4507 3890 l
-4393 3890 l
-4393 3890 m
-4509 3890 l
-4509 3891 l
-4393 3891 l
-4392 3891 m
-4512 3891 l
-4512 3892 l
-4392 3892 l
-4392 3892 m
-4515 3892 l
-4515 3893 l
-4392 3893 l
-4392 3893 m
-4518 3893 l
-4518 3894 l
-4392 3894 l
-4391 3894 m
-4521 3894 l
-4521 3895 l
-4391 3895 l
-4391 3895 m
-4521 3895 l
-4521 3897 l
-4391 3897 l
-4390 3897 m
-4520 3897 l
-4520 3899 l
-4390 3899 l
-4390 3899 m
-4519 3899 l
-4519 3900 l
-4390 3900 l
-4389 3900 m
-4519 3900 l
-4519 3902 l
-4389 3902 l
-4389 3902 m
-4518 3902 l
-4518 3903 l
-4389 3903 l
-4388 3903 m
-4518 3903 l
-4518 3905 l
-4388 3905 l
-4387 3905 m
-4517 3905 l
-4517 3908 l
-4387 3908 l
-4386 3908 m
-4516 3908 l
-4516 3911 l
-4386 3911 l
-4385 3911 m
-4515 3911 l
-4515 3914 l
-4385 3914 l
-4384 3914 m
-4514 3914 l
-4514 3917 l
-4384 3917 l
-4383 3917 m
-4513 3917 l
-4513 3919 l
-4383 3919 l
-4383 3919 m
-4512 3919 l
-4512 3920 l
-4383 3920 l
-4382 3920 m
-4512 3920 l
-4512 3922 l
-4382 3922 l
-4381 3922 m
-4511 3922 l
-4511 3925 l
-4381 3925 l
-4380 3925 m
-4510 3925 l
-4510 3928 l
-4380 3928 l
-4379 3928 m
-4509 3928 l
-4509 3931 l
-4379 3931 l
-4378 3931 m
-4508 3931 l
-4508 3934 l
-4378 3934 l
-4377 3934 m
-4507 3934 l
-4507 3937 l
-4377 3937 l
-4376 3937 m
-4506 3937 l
-4506 3939 l
-4376 3939 l
-4375 3939 m
-4505 3939 l
-4505 3942 l
-4375 3942 l
-4374 3942 m
-4504 3942 l
-4504 3945 l
-4374 3945 l
-4373 3945 m
-4503 3945 l
-4503 3948 l
-4373 3948 l
-4372 3948 m
-4502 3948 l
-4502 3951 l
-4372 3951 l
-4371 3951 m
-4501 3951 l
-4501 3954 l
-4371 3954 l
-4370 3954 m
-4500 3954 l
-4500 3956 l
-4370 3956 l
-4369 3956 m
-4500 3956 l
-4500 3957 l
-4369 3957 l
-4369 3957 m
-4499 3957 l
-4499 3959 l
-4369 3959 l
-4368 3959 m
-4498 3959 l
-4498 3962 l
-4368 3962 l
-4367 3962 m
-4497 3962 l
-4497 3965 l
-4367 3965 l
-4366 3965 m
-4496 3965 l
-4496 3968 l
-4366 3968 l
-4365 3968 m
-4495 3968 l
-4495 3971 l
-4365 3971 l
-4364 3971 m
-4494 3971 l
-4494 3973 l
-4364 3973 l
-4363 3973 m
-4494 3973 l
-4494 3974 l
-4363 3974 l
-4363 3974 m
-4493 3974 l
-4493 3976 l
-4363 3976 l
-4362 3976 m
-4492 3976 l
-4492 3979 l
-4362 3979 l
-4361 3979 m
-4491 3979 l
-4491 3982 l
-4361 3982 l
-4360 3982 m
-4490 3982 l
-4490 3985 l
-4360 3985 l
-4359 3985 m
-4489 3985 l
-4489 3988 l
-4359 3988 l
-4358 3988 m
-4488 3988 l
-4488 3990 l
-4358 3990 l
-4357 3990 m
-4488 3990 l
-4488 3991 l
-4357 3991 l
-4357 3991 m
-4487 3991 l
-4487 3993 l
-4357 3993 l
-4356 3993 m
-4487 3993 l
-4487 3994 l
-4356 3994 l
-4356 3994 m
-4486 3994 l
-4486 3996 l
-4356 3996 l
-4355 3996 m
-4485 3996 l
-4485 3999 l
-4355 3999 l
-4354 3999 m
-4484 3999 l
-4484 4002 l
-4354 4002 l
-4353 4002 m
-4483 4002 l
-4483 4005 l
-4353 4005 l
-4352 4005 m
-4482 4005 l
-4482 4007 l
-4352 4007 l
-4351 4007 m
-4482 4007 l
-4482 4008 l
-4351 4008 l
-4351 4008 m
-4481 4008 l
-4481 4010 l
-4351 4010 l
-4350 4010 m
-4481 4010 l
-4481 4011 l
-4350 4011 l
-4350 4011 m
-4480 4011 l
-4480 4013 l
-4350 4013 l
-4349 4013 m
-4480 4013 l
-4480 4014 l
-4349 4014 l
-4349 4014 m
-4479 4014 l
-4479 4016 l
-4349 4016 l
-4348 4016 m
-4478 4016 l
-4478 4019 l
-4348 4019 l
-4347 4019 m
-4477 4019 l
-4477 4022 l
-4347 4022 l
-4346 4022 m
-4476 4022 l
-4476 4024 l
-4346 4024 l
-4345 4024 m
-4476 4024 l
-4476 4025 l
-4345 4025 l
-4345 4025 m
-4475 4025 l
-4475 4027 l
-4345 4027 l
-4344 4027 m
-4475 4027 l
-4475 4028 l
-4344 4028 l
-4344 4028 m
-4474 4028 l
-4474 4030 l
-4344 4030 l
-4343 4030 m
-4474 4030 l
-4474 4031 l
-4343 4031 l
-4343 4031 m
-4473 4031 l
-4473 4033 l
-4343 4033 l
-4342 4033 m
-4472 4033 l
-4472 4036 l
-4342 4036 l
-4341 4036 m
-4471 4036 l
-4471 4039 l
-4341 4039 l
-4340 4039 m
-4470 4039 l
-4470 4041 l
-4340 4041 l
-4339 4041 m
-4470 4041 l
-4470 4042 l
-4339 4042 l
-4339 4042 m
-4469 4042 l
-4469 4044 l
-4339 4044 l
-4338 4044 m
-4469 4044 l
-4469 4045 l
-4338 4045 l
-4338 4045 m
-4468 4045 l
-4468 4047 l
-4338 4047 l
-4337 4047 m
-4468 4047 l
-4468 4048 l
-4337 4048 l
-4337 4048 m
-4467 4048 l
-4467 4050 l
-4337 4050 l
-4336 4050 m
-4467 4050 l
-4467 4051 l
-4336 4051 l
-4336 4051 m
-4466 4051 l
-4466 4053 l
-4336 4053 l
-4335 4053 m
-4465 4053 l
-4465 4056 l
-4335 4056 l
-4334 4056 m
-4464 4056 l
-4464 4058 l
-4334 4058 l
-4333 4058 m
-4464 4058 l
-4464 4059 l
-4333 4059 l
-4333 4059 m
-4463 4059 l
-4463 4061 l
-4333 4061 l
-4332 4061 m
-4463 4061 l
-4463 4062 l
-4332 4062 l
-4332 4062 m
-4462 4062 l
-4462 4064 l
-4332 4064 l
-4331 4064 m
-4462 4064 l
-4462 4065 l
-4331 4065 l
-4331 4065 m
-4461 4065 l
-4461 4067 l
-4331 4067 l
-4330 4067 m
-4461 4067 l
-4461 4068 l
-4330 4068 l
-4330 4068 m
-4460 4068 l
-4460 4070 l
-4330 4070 l
-4329 4070 m
-4460 4070 l
-4460 4071 l
-4329 4071 l
-4329 4071 m
-4459 4071 l
-4459 4073 l
-4329 4073 l
-4328 4073 m
-4458 4073 l
-4458 4075 l
-4328 4075 l
-4327 4075 m
-4458 4075 l
-4458 4076 l
-4327 4076 l
-4327 4076 m
-4457 4076 l
-4457 4078 l
-4327 4078 l
-4326 4078 m
-4457 4078 l
-4457 4079 l
-4326 4079 l
-4326 4079 m
-4456 4079 l
-4456 4081 l
-4326 4081 l
-4325 4081 m
-4456 4081 l
-4456 4082 l
-4325 4082 l
-4325 4082 m
-4455 4082 l
-4455 4084 l
-4325 4084 l
-4324 4084 m
-4455 4084 l
-4455 4085 l
-4324 4085 l
-4324 4085 m
-4454 4085 l
-4454 4087 l
-4324 4087 l
-4323 4087 m
-4454 4087 l
-4454 4088 l
-4323 4088 l
-4323 4088 m
-4453 4088 l
-4453 4090 l
-4323 4090 l
-4322 4090 m
-4452 4090 l
-4452 4092 l
-4322 4092 l
-4321 4092 m
-4452 4092 l
-4452 4093 l
-4321 4093 l
-4321 4093 m
-4451 4093 l
-4451 4095 l
-4321 4095 l
-4320 4095 m
-4451 4095 l
-4451 4096 l
-4320 4096 l
-4320 4096 m
-4450 4096 l
-4450 4098 l
-4320 4098 l
-4319 4098 m
-4450 4098 l
-4450 4099 l
-4319 4099 l
-4319 4099 m
-4449 4099 l
-4449 4101 l
-4319 4101 l
-4318 4101 m
-4449 4101 l
-4449 4102 l
-4318 4102 l
-4318 4102 m
-4448 4102 l
-4448 4104 l
-4318 4104 l
-4317 4104 m
-4448 4104 l
-4448 4105 l
-4317 4105 l
-4317 4105 m
-4447 4105 l
-4447 4107 l
-4317 4107 l
-4317 4107 m
-4447 4107 l
-4447 4108 l
-4317 4108 l
-4319 4108 m
-4446 4108 l
-4446 4109 l
-4319 4109 l
-4322 4109 m
-4446 4109 l
-4446 4110 l
-4322 4110 l
-4325 4110 m
-4445 4110 l
-4445 4111 l
-4325 4111 l
-4328 4111 m
-4445 4111 l
-4445 4112 l
-4328 4112 l
-4331 4112 m
-4445 4112 l
-4445 4113 l
-4331 4113 l
-4334 4113 m
-4444 4113 l
-4444 4114 l
-4334 4114 l
-4337 4114 m
-4444 4114 l
-4444 4115 l
-4337 4115 l
-4340 4115 m
-4444 4115 l
-4444 4116 l
-4340 4116 l
-4342 4116 m
-4443 4116 l
-4443 4117 l
-4342 4117 l
-4345 4117 m
-4443 4117 l
-4443 4118 l
-4345 4118 l
-4348 4118 m
-4443 4118 l
-4443 4119 l
-4348 4119 l
-4351 4119 m
-4442 4119 l
-4442 4120 l
-4351 4120 l
-4354 4120 m
-4442 4120 l
-4442 4121 l
-4354 4121 l
-4357 4121 m
-4442 4121 l
-4442 4122 l
-4357 4122 l
-4360 4122 m
-4441 4122 l
-4441 4123 l
-4360 4123 l
-4363 4123 m
-4441 4123 l
-4441 4124 l
-4363 4124 l
-4365 4124 m
-4441 4124 l
-4441 4125 l
-4365 4125 l
-4368 4125 m
-4440 4125 l
-4440 4126 l
-4368 4126 l
-4371 4126 m
-4440 4126 l
-4440 4127 l
-4371 4127 l
-4374 4127 m
-4440 4127 l
-4440 4128 l
-4374 4128 l
-4377 4128 m
-4439 4128 l
-4439 4129 l
-4377 4129 l
-4380 4129 m
-4439 4129 l
-4439 4130 l
-4380 4130 l
-4383 4130 m
-4438 4130 l
-4438 4131 l
-4383 4131 l
-4386 4131 m
-4438 4131 l
-4438 4132 l
-4386 4132 l
-4388 4132 m
-4438 4132 l
-4438 4133 l
-4388 4133 l
-4391 4133 m
-4437 4133 l
-4437 4134 l
-4391 4134 l
-4394 4134 m
-4437 4134 l
-4437 4135 l
-4394 4135 l
-4397 4135 m
-4437 4135 l
-4437 4136 l
-4397 4136 l
-4400 4136 m
-4436 4136 l
-4436 4137 l
-4400 4137 l
-4403 4137 m
-4436 4137 l
-4436 4138 l
-4403 4138 l
-4406 4138 m
-4436 4138 l
-4436 4139 l
-4406 4139 l
-4409 4139 m
-4435 4139 l
-4435 4140 l
-4409 4140 l
-4411 4140 m
-4435 4140 l
-4435 4141 l
-4411 4141 l
-4414 4141 m
-4435 4141 l
-4435 4142 l
-4414 4142 l
-4417 4142 m
-4434 4142 l
-4434 4143 l
-4417 4143 l
-4420 4143 m
-4434 4143 l
-4434 4144 l
-4420 4144 l
-4423 4144 m
-4434 4144 l
-4434 4145 l
-4423 4145 l
-4426 4145 m
-4433 4145 l
-4433 4146 l
-4426 4146 l
-4429 4146 m
-4433 4146 l
-4433 4147 l
-4429 4147 l
-Y
-4520.4 3895 m
-4406 3855 l
-4317 4107 l
-4432 4147 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-4412 3888 m
-4397 3931 l
-4437 3919 l
-4433 3930 l
-4434 3940 l
-4436 3945 l
-4447 3953 l
-4455 3956 l
-4468 3956 l
-4478 3951 l
-4487 3941 l
-4491 3929 l
-4491 3916 l
-4488 3910 l
-4482 3904 l
-S
-4399 3976 m
-4392 3983 l
-4376 3990 l
-4459 4019 l
-S
-4343 4085 m
-4357 4045 l
-4393 4054 l
-4388 4057 l
-4380 4067 l
-4376 4079 l
-4376 4092 l
-4381 4103 l
-4391 4111 l
-4399 4113 l
-4412 4114 l
-4423 4109 l
-4431 4098 l
-4435 4086 l
-4435 4073 l
-4433 4068 l
-4426 4061 l
-S
-1 g
-2971 2971 m
-2974 2971 l
-2974 2972 l
-2971 2972 l
-2970 2972 m
-2976 2972 l
-2976 2973 l
-2970 2973 l
-2970 2973 m
-2978 2973 l
-2978 2974 l
-2970 2974 l
-2969 2974 m
-2980 2974 l
-2980 2975 l
-2969 2975 l
-2969 2975 m
-2982 2975 l
-2982 2976 l
-2969 2976 l
-2968 2976 m
-2984 2976 l
-2984 2977 l
-2968 2977 l
-2968 2977 m
-2985 2977 l
-2985 2978 l
-2968 2978 l
-2967 2978 m
-2987 2978 l
-2987 2979 l
-2967 2979 l
-2966 2979 m
-2989 2979 l
-2989 2980 l
-2966 2980 l
-2966 2980 m
-2991 2980 l
-2991 2981 l
-2966 2981 l
-2965 2981 m
-2993 2981 l
-2993 2982 l
-2965 2982 l
-2965 2982 m
-2994 2982 l
-2994 2983 l
-2965 2983 l
-2964 2983 m
-2996 2983 l
-2996 2984 l
-2964 2984 l
-2964 2984 m
-2998 2984 l
-2998 2985 l
-2964 2985 l
-2963 2985 m
-3000 2985 l
-3000 2986 l
-2963 2986 l
-2963 2986 m
-3002 2986 l
-3002 2987 l
-2963 2987 l
-2962 2987 m
-3003 2987 l
-3003 2988 l
-2962 2988 l
-2961 2988 m
-3005 2988 l
-3005 2989 l
-2961 2989 l
-2961 2989 m
-3007 2989 l
-3007 2990 l
-2961 2990 l
-2960 2990 m
-3009 2990 l
-3009 2991 l
-2960 2991 l
-2960 2991 m
-3011 2991 l
-3011 2992 l
-2960 2992 l
-2959 2992 m
-3013 2992 l
-3013 2993 l
-2959 2993 l
-2959 2993 m
-3014 2993 l
-3014 2994 l
-2959 2994 l
-2958 2994 m
-3016 2994 l
-3016 2995 l
-2958 2995 l
-2958 2995 m
-3018 2995 l
-3018 2996 l
-2958 2996 l
-2957 2996 m
-3020 2996 l
-3020 2997 l
-2957 2997 l
-2956 2997 m
-3022 2997 l
-3022 2998 l
-2956 2998 l
-2956 2998 m
-3023 2998 l
-3023 2999 l
-2956 2999 l
-2955 2999 m
-3025 2999 l
-3025 3000 l
-2955 3000 l
-2955 3000 m
-3027 3000 l
-3027 3001 l
-2955 3001 l
-2954 3001 m
-3029 3001 l
-3029 3002 l
-2954 3002 l
-2954 3002 m
-3031 3002 l
-3031 3003 l
-2954 3003 l
-2953 3003 m
-3032 3003 l
-3032 3004 l
-2953 3004 l
-2953 3004 m
-3034 3004 l
-3034 3005 l
-2953 3005 l
-2952 3005 m
-3036 3005 l
-3036 3006 l
-2952 3006 l
-2951 3006 m
-3038 3006 l
-3038 3007 l
-2951 3007 l
-2951 3007 m
-3040 3007 l
-3040 3008 l
-2951 3008 l
-2950 3008 m
-3042 3008 l
-3042 3009 l
-2950 3009 l
-2950 3009 m
-3043 3009 l
-3043 3010 l
-2950 3010 l
-2949 3010 m
-3045 3010 l
-3045 3011 l
-2949 3011 l
-2949 3011 m
-3047 3011 l
-3047 3012 l
-2949 3012 l
-2948 3012 m
-3049 3012 l
-3049 3013 l
-2948 3013 l
-2948 3013 m
-3051 3013 l
-3051 3014 l
-2948 3014 l
-2947 3014 m
-3052 3014 l
-3052 3015 l
-2947 3015 l
-2946 3015 m
-3054 3015 l
-3054 3016 l
-2946 3016 l
-2946 3016 m
-3056 3016 l
-3056 3017 l
-2946 3017 l
-2945 3017 m
-3058 3017 l
-3058 3018 l
-2945 3018 l
-2945 3018 m
-3060 3018 l
-3060 3019 l
-2945 3019 l
-2944 3019 m
-3061 3019 l
-3061 3020 l
-2944 3020 l
-2944 3020 m
-3063 3020 l
-3063 3021 l
-2944 3021 l
-2943 3021 m
-3065 3021 l
-3065 3022 l
-2943 3022 l
-2943 3022 m
-3067 3022 l
-3067 3023 l
-2943 3023 l
-2942 3023 m
-3069 3023 l
-3069 3024 l
-2942 3024 l
-2941 3024 m
-3071 3024 l
-3071 3025 l
-2941 3025 l
-2941 3025 m
-3072 3025 l
-3072 3026 l
-2941 3026 l
-2940 3026 m
-3074 3026 l
-3074 3027 l
-2940 3027 l
-2940 3027 m
-3076 3027 l
-3076 3028 l
-2940 3028 l
-2939 3028 m
-3078 3028 l
-3078 3029 l
-2939 3029 l
-2939 3029 m
-3080 3029 l
-3080 3030 l
-2939 3030 l
-2938 3030 m
-3081 3030 l
-3081 3031 l
-2938 3031 l
-2938 3031 m
-3083 3031 l
-3083 3032 l
-2938 3032 l
-2937 3032 m
-3085 3032 l
-3085 3033 l
-2937 3033 l
-2936 3033 m
-3087 3033 l
-3087 3034 l
-2936 3034 l
-2936 3034 m
-3089 3034 l
-3089 3035 l
-2936 3035 l
-2935 3035 m
-3090 3035 l
-3090 3036 l
-2935 3036 l
-2935 3036 m
-3092 3036 l
-3092 3037 l
-2935 3037 l
-2934 3037 m
-3094 3037 l
-3094 3038 l
-2934 3038 l
-2934 3038 m
-3096 3038 l
-3096 3039 l
-2934 3039 l
-2933 3039 m
-3098 3039 l
-3098 3040 l
-2933 3040 l
-2933 3040 m
-3099 3040 l
-3099 3041 l
-2933 3041 l
-2932 3041 m
-3101 3041 l
-3101 3042 l
-2932 3042 l
-2931 3042 m
-3103 3042 l
-3103 3043 l
-2931 3043 l
-2931 3043 m
-3105 3043 l
-3105 3044 l
-2931 3044 l
-2930 3044 m
-3107 3044 l
-3107 3045 l
-2930 3045 l
-2930 3045 m
-3109 3045 l
-3109 3046 l
-2930 3046 l
-2929 3046 m
-3110 3046 l
-3110 3047 l
-2929 3047 l
-2929 3047 m
-3112 3047 l
-3112 3048 l
-2929 3048 l
-2928 3048 m
-3114 3048 l
-3114 3049 l
-2928 3049 l
-2928 3049 m
-3116 3049 l
-3116 3050 l
-2928 3050 l
-2927 3050 m
-3118 3050 l
-3118 3051 l
-2927 3051 l
-2926 3051 m
-3119 3051 l
-3119 3052 l
-2926 3052 l
-2926 3052 m
-3121 3052 l
-3121 3053 l
-2926 3053 l
-2925 3053 m
-3123 3053 l
-3123 3054 l
-2925 3054 l
-2925 3054 m
-3125 3054 l
-3125 3055 l
-2925 3055 l
-2924 3055 m
-3127 3055 l
-3127 3056 l
-2924 3056 l
-2924 3056 m
-3128 3056 l
-3128 3057 l
-2924 3057 l
-2923 3057 m
-3130 3057 l
-3130 3058 l
-2923 3058 l
-2923 3058 m
-3132 3058 l
-3132 3059 l
-2923 3059 l
-2922 3059 m
-3134 3059 l
-3134 3060 l
-2922 3060 l
-2921 3060 m
-3136 3060 l
-3136 3061 l
-2921 3061 l
-2921 3061 m
-3138 3061 l
-3138 3062 l
-2921 3062 l
-2920 3062 m
-3139 3062 l
-3139 3063 l
-2920 3063 l
-2920 3063 m
-3141 3063 l
-3141 3064 l
-2920 3064 l
-2919 3064 m
-3143 3064 l
-3143 3065 l
-2919 3065 l
-2919 3065 m
-3145 3065 l
-3145 3066 l
-2919 3066 l
-2918 3066 m
-3147 3066 l
-3147 3067 l
-2918 3067 l
-2918 3067 m
-3148 3067 l
-3148 3068 l
-2918 3068 l
-2917 3068 m
-3150 3068 l
-3150 3069 l
-2917 3069 l
-2916 3069 m
-3152 3069 l
-3152 3070 l
-2916 3070 l
-2916 3070 m
-3154 3070 l
-3154 3071 l
-2916 3071 l
-2915 3071 m
-3156 3071 l
-3156 3072 l
-2915 3072 l
-2915 3072 m
-3157 3072 l
-3157 3073 l
-2915 3073 l
-2914 3073 m
-3159 3073 l
-3159 3074 l
-2914 3074 l
-2914 3074 m
-3161 3074 l
-3161 3075 l
-2914 3075 l
-2913 3075 m
-3163 3075 l
-3163 3076 l
-2913 3076 l
-2913 3076 m
-3165 3076 l
-3165 3077 l
-2913 3077 l
-2913 3077 m
-3167 3077 l
-3167 3078 l
-2913 3078 l
-2914 3078 m
-3168 3078 l
-3168 3079 l
-2914 3079 l
-2916 3079 m
-3170 3079 l
-3170 3080 l
-2916 3080 l
-2918 3080 m
-3172 3080 l
-3172 3081 l
-2918 3081 l
-2920 3081 m
-3174 3081 l
-3174 3082 l
-2920 3082 l
-2922 3082 m
-3176 3082 l
-3176 3083 l
-2922 3083 l
-2923 3083 m
-3177 3083 l
-3177 3084 l
-2923 3084 l
-2925 3084 m
-3179 3084 l
-3179 3085 l
-2925 3085 l
-2927 3085 m
-3181 3085 l
-3181 3086 l
-2927 3086 l
-2929 3086 m
-3183 3086 l
-3183 3087 l
-2929 3087 l
-2931 3087 m
-3185 3087 l
-3185 3088 l
-2931 3088 l
-2933 3088 m
-3186 3088 l
-3186 3089 l
-2933 3089 l
-2934 3089 m
-3188 3089 l
-3188 3090 l
-2934 3090 l
-2936 3090 m
-3190 3090 l
-3190 3091 l
-2936 3091 l
-2938 3091 m
-3192 3091 l
-3192 3092 l
-2938 3092 l
-2940 3092 m
-3194 3092 l
-3194 3093 l
-2940 3093 l
-2942 3093 m
-3196 3093 l
-3196 3094 l
-2942 3094 l
-2943 3094 m
-3197 3094 l
-3197 3095 l
-2943 3095 l
-2945 3095 m
-3199 3095 l
-3199 3096 l
-2945 3096 l
-2947 3096 m
-3201 3096 l
-3201 3097 l
-2947 3097 l
-2949 3097 m
-3203 3097 l
-3203 3098 l
-2949 3098 l
-2951 3098 m
-3205 3098 l
-3205 3099 l
-2951 3099 l
-2953 3099 m
-3206 3099 l
-3206 3100 l
-2953 3100 l
-2954 3100 m
-3208 3100 l
-3208 3101 l
-2954 3101 l
-2956 3101 m
-3210 3101 l
-3210 3102 l
-2956 3102 l
-2958 3102 m
-3212 3102 l
-3212 3103 l
-2958 3103 l
-2960 3103 m
-3214 3103 l
-3214 3104 l
-2960 3104 l
-2962 3104 m
-3215 3104 l
-3215 3105 l
-2962 3105 l
-2963 3105 m
-3217 3105 l
-3217 3106 l
-2963 3106 l
-2965 3106 m
-3219 3106 l
-3219 3107 l
-2965 3107 l
-2967 3107 m
-3221 3107 l
-3221 3108 l
-2967 3108 l
-2969 3108 m
-3223 3108 l
-3223 3109 l
-2969 3109 l
-2971 3109 m
-3224 3109 l
-3224 3110 l
-2971 3110 l
-2973 3110 m
-3224 3110 l
-3224 3111 l
-2973 3111 l
-2974 3111 m
-3224 3111 l
-3224 3112 l
-2974 3112 l
-2976 3112 m
-3223 3112 l
-3223 3113 l
-2976 3113 l
-2978 3113 m
-3223 3113 l
-3223 3114 l
-2978 3114 l
-2980 3114 m
-3222 3114 l
-3222 3115 l
-2980 3115 l
-2982 3115 m
-3222 3115 l
-3222 3116 l
-2982 3116 l
-2983 3116 m
-3221 3116 l
-3221 3117 l
-2983 3117 l
-2985 3117 m
-3221 3117 l
-3221 3118 l
-2985 3118 l
-2987 3118 m
-3220 3118 l
-3220 3119 l
-2987 3119 l
-2989 3119 m
-3220 3119 l
-3220 3120 l
-2989 3120 l
-2991 3120 m
-3219 3120 l
-3219 3121 l
-2991 3121 l
-2993 3121 m
-3218 3121 l
-3218 3122 l
-2993 3122 l
-2994 3122 m
-3218 3122 l
-3218 3123 l
-2994 3123 l
-2996 3123 m
-3217 3123 l
-3217 3124 l
-2996 3124 l
-2998 3124 m
-3217 3124 l
-3217 3125 l
-2998 3125 l
-3000 3125 m
-3216 3125 l
-3216 3126 l
-3000 3126 l
-3002 3126 m
-3216 3126 l
-3216 3127 l
-3002 3127 l
-3004 3127 m
-3215 3127 l
-3215 3128 l
-3004 3128 l
-3005 3128 m
-3215 3128 l
-3215 3129 l
-3005 3129 l
-3007 3129 m
-3214 3129 l
-3214 3130 l
-3007 3130 l
-3009 3130 m
-3214 3130 l
-3214 3131 l
-3009 3131 l
-3011 3131 m
-3213 3131 l
-3213 3132 l
-3011 3132 l
-3013 3132 m
-3212 3132 l
-3212 3133 l
-3013 3133 l
-3014 3133 m
-3212 3133 l
-3212 3134 l
-3014 3134 l
-3016 3134 m
-3211 3134 l
-3211 3135 l
-3016 3135 l
-3018 3135 m
-3211 3135 l
-3211 3136 l
-3018 3136 l
-3020 3136 m
-3210 3136 l
-3210 3137 l
-3020 3137 l
-3022 3137 m
-3210 3137 l
-3210 3138 l
-3022 3138 l
-3024 3138 m
-3209 3138 l
-3209 3139 l
-3024 3139 l
-3025 3139 m
-3209 3139 l
-3209 3140 l
-3025 3140 l
-3027 3140 m
-3208 3140 l
-3208 3141 l
-3027 3141 l
-3029 3141 m
-3208 3141 l
-3208 3142 l
-3029 3142 l
-3031 3142 m
-3207 3142 l
-3207 3143 l
-3031 3143 l
-3033 3143 m
-3206 3143 l
-3206 3144 l
-3033 3144 l
-3034 3144 m
-3206 3144 l
-3206 3145 l
-3034 3145 l
-3036 3145 m
-3205 3145 l
-3205 3146 l
-3036 3146 l
-3038 3146 m
-3205 3146 l
-3205 3147 l
-3038 3147 l
-3040 3147 m
-3204 3147 l
-3204 3148 l
-3040 3148 l
-3042 3148 m
-3204 3148 l
-3204 3149 l
-3042 3149 l
-3044 3149 m
-3203 3149 l
-3203 3150 l
-3044 3150 l
-3045 3150 m
-3203 3150 l
-3203 3151 l
-3045 3151 l
-3047 3151 m
-3202 3151 l
-3202 3152 l
-3047 3152 l
-3049 3152 m
-3202 3152 l
-3202 3153 l
-3049 3153 l
-3051 3153 m
-3201 3153 l
-3201 3154 l
-3051 3154 l
-3053 3154 m
-3200 3154 l
-3200 3155 l
-3053 3155 l
-3054 3155 m
-3200 3155 l
-3200 3156 l
-3054 3156 l
-3056 3156 m
-3199 3156 l
-3199 3157 l
-3056 3157 l
-3058 3157 m
-3199 3157 l
-3199 3158 l
-3058 3158 l
-3060 3158 m
-3198 3158 l
-3198 3159 l
-3060 3159 l
-3062 3159 m
-3198 3159 l
-3198 3160 l
-3062 3160 l
-3064 3160 m
-3197 3160 l
-3197 3161 l
-3064 3161 l
-3065 3161 m
-3197 3161 l
-3197 3162 l
-3065 3162 l
-3067 3162 m
-3196 3162 l
-3196 3163 l
-3067 3163 l
-3069 3163 m
-3195 3163 l
-3195 3164 l
-3069 3164 l
-3071 3164 m
-3195 3164 l
-3195 3165 l
-3071 3165 l
-3073 3165 m
-3194 3165 l
-3194 3166 l
-3073 3166 l
-3074 3166 m
-3194 3166 l
-3194 3167 l
-3074 3167 l
-3076 3167 m
-3193 3167 l
-3193 3168 l
-3076 3168 l
-3078 3168 m
-3193 3168 l
-3193 3169 l
-3078 3169 l
-3080 3169 m
-3192 3169 l
-3192 3170 l
-3080 3170 l
-3082 3170 m
-3192 3170 l
-3192 3171 l
-3082 3171 l
-3084 3171 m
-3191 3171 l
-3191 3172 l
-3084 3172 l
-3085 3172 m
-3191 3172 l
-3191 3173 l
-3085 3173 l
-3087 3173 m
-3190 3173 l
-3190 3174 l
-3087 3174 l
-3089 3174 m
-3189 3174 l
-3189 3175 l
-3089 3175 l
-3091 3175 m
-3189 3175 l
-3189 3176 l
-3091 3176 l
-3093 3176 m
-3188 3176 l
-3188 3177 l
-3093 3177 l
-3095 3177 m
-3188 3177 l
-3188 3178 l
-3095 3178 l
-3096 3178 m
-3187 3178 l
-3187 3179 l
-3096 3179 l
-3098 3179 m
-3187 3179 l
-3187 3180 l
-3098 3180 l
-3100 3180 m
-3186 3180 l
-3186 3181 l
-3100 3181 l
-3102 3181 m
-3186 3181 l
-3186 3182 l
-3102 3182 l
-3104 3182 m
-3185 3182 l
-3185 3183 l
-3104 3183 l
-3105 3183 m
-3185 3183 l
-3185 3184 l
-3105 3184 l
-3107 3184 m
-3184 3184 l
-3184 3185 l
-3107 3185 l
-3109 3185 m
-3183 3185 l
-3183 3186 l
-3109 3186 l
-3111 3186 m
-3183 3186 l
-3183 3187 l
-3111 3187 l
-3113 3187 m
-3182 3187 l
-3182 3188 l
-3113 3188 l
-3115 3188 m
-3182 3188 l
-3182 3189 l
-3115 3189 l
-3116 3189 m
-3181 3189 l
-3181 3190 l
-3116 3190 l
-3118 3190 m
-3181 3190 l
-3181 3191 l
-3118 3191 l
-3120 3191 m
-3180 3191 l
-3180 3192 l
-3120 3192 l
-3122 3192 m
-3180 3192 l
-3180 3193 l
-3122 3193 l
-3124 3193 m
-3179 3193 l
-3179 3194 l
-3124 3194 l
-3125 3194 m
-3179 3194 l
-3179 3195 l
-3125 3195 l
-3127 3195 m
-3178 3195 l
-3178 3196 l
-3127 3196 l
-3129 3196 m
-3177 3196 l
-3177 3197 l
-3129 3197 l
-3131 3197 m
-3177 3197 l
-3177 3198 l
-3131 3198 l
-3133 3198 m
-3176 3198 l
-3176 3199 l
-3133 3199 l
-3135 3199 m
-3176 3199 l
-3176 3200 l
-3135 3200 l
-3136 3200 m
-3175 3200 l
-3175 3201 l
-3136 3201 l
-3138 3201 m
-3175 3201 l
-3175 3202 l
-3138 3202 l
-3140 3202 m
-3174 3202 l
-3174 3203 l
-3140 3203 l
-3142 3203 m
-3174 3203 l
-3174 3204 l
-3142 3204 l
-3144 3204 m
-3173 3204 l
-3173 3205 l
-3144 3205 l
-3145 3205 m
-3173 3205 l
-3173 3206 l
-3145 3206 l
-3147 3206 m
-3172 3206 l
-3172 3207 l
-3147 3207 l
-3149 3207 m
-3171 3207 l
-3171 3208 l
-3149 3208 l
-3151 3208 m
-3171 3208 l
-3171 3209 l
-3151 3209 l
-3153 3209 m
-3170 3209 l
-3170 3210 l
-3153 3210 l
-3155 3210 m
-3170 3210 l
-3170 3211 l
-3155 3211 l
-3156 3211 m
-3169 3211 l
-3169 3212 l
-3156 3212 l
-3158 3212 m
-3169 3212 l
-3169 3213 l
-3158 3213 l
-3160 3213 m
-3168 3213 l
-3168 3214 l
-3160 3214 l
-3162 3214 m
-3168 3214 l
-3168 3215 l
-3162 3215 l
-3164 3215 m
-3167 3215 l
-3167 3216 l
-3164 3216 l
-Y
-2972 2970.9 m
-2913 3077 l
-3166 3216 l
-3224 3110 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-2964 3028 m
-3030 3065 l
-S
-3093 3124 m
-3095 3111 l
-3092 3099 l
-3083 3090 l
-3079 3088 l
-3066 3085 l
-3055 3088 l
-3045 3097 l
-3043 3101 l
-3041 3114 l
-3044 3125 l
-3053 3135 l
-3057 3137 l
-3070 3139 l
-3081 3136 l
-3093 3124 l
-3103 3105 l
-3109 3085 l
-3108 3070 l
-3099 3060 l
-3092 3056 l
-3079 3054 l
-3071 3059 l
-S
-3126 3175 m
-3117 3166 l
-3116 3151 l
-3122 3130 l
-3128 3119 l
-3142 3103 l
-3156 3096 l
-3169 3099 l
-3176 3103 l
-3185 3112 l
-3186 3127 l
-3180 3148 l
-3174 3159 l
-3160 3175 l
-3146 3182 l
-3133 3179 l
-3126 3175 l
-S
-1 g
-3473 3317 m
-3476 3317 l
-3476 3318 l
-3473 3318 l
-3472 3318 m
-3476 3318 l
-3476 3319 l
-3472 3319 l
-3471 3319 m
-3477 3319 l
-3477 3320 l
-3471 3320 l
-3470 3320 m
-3478 3320 l
-3478 3321 l
-3470 3321 l
-3469 3321 m
-3479 3321 l
-3479 3322 l
-3469 3322 l
-3467 3322 m
-3480 3322 l
-3480 3323 l
-3467 3323 l
-3466 3323 m
-3480 3323 l
-3480 3324 l
-3466 3324 l
-3465 3324 m
-3481 3324 l
-3481 3325 l
-3465 3325 l
-3464 3325 m
-3482 3325 l
-3482 3326 l
-3464 3326 l
-3463 3326 m
-3483 3326 l
-3483 3327 l
-3463 3327 l
-3461 3327 m
-3484 3327 l
-3484 3328 l
-3461 3328 l
-3460 3328 m
-3485 3328 l
-3485 3329 l
-3460 3329 l
-3459 3329 m
-3485 3329 l
-3485 3330 l
-3459 3330 l
-3458 3330 m
-3486 3330 l
-3486 3331 l
-3458 3331 l
-3457 3331 m
-3487 3331 l
-3487 3332 l
-3457 3332 l
-3455 3332 m
-3488 3332 l
-3488 3333 l
-3455 3333 l
-3454 3333 m
-3489 3333 l
-3489 3334 l
-3454 3334 l
-3453 3334 m
-3490 3334 l
-3490 3335 l
-3453 3335 l
-3452 3335 m
-3490 3335 l
-3490 3336 l
-3452 3336 l
-3451 3336 m
-3491 3336 l
-3491 3337 l
-3451 3337 l
-3449 3337 m
-3492 3337 l
-3492 3338 l
-3449 3338 l
-3448 3338 m
-3493 3338 l
-3493 3339 l
-3448 3339 l
-3447 3339 m
-3494 3339 l
-3494 3340 l
-3447 3340 l
-3446 3340 m
-3494 3340 l
-3494 3341 l
-3446 3341 l
-3445 3341 m
-3495 3341 l
-3495 3342 l
-3445 3342 l
-3443 3342 m
-3496 3342 l
-3496 3343 l
-3443 3343 l
-3442 3343 m
-3497 3343 l
-3497 3344 l
-3442 3344 l
-3441 3344 m
-3498 3344 l
-3498 3345 l
-3441 3345 l
-3440 3345 m
-3499 3345 l
-3499 3346 l
-3440 3346 l
-3438 3346 m
-3499 3346 l
-3499 3347 l
-3438 3347 l
-3437 3347 m
-3500 3347 l
-3500 3348 l
-3437 3348 l
-3436 3348 m
-3501 3348 l
-3501 3349 l
-3436 3349 l
-3435 3349 m
-3502 3349 l
-3502 3350 l
-3435 3350 l
-3434 3350 m
-3503 3350 l
-3503 3351 l
-3434 3351 l
-3432 3351 m
-3504 3351 l
-3504 3352 l
-3432 3352 l
-3431 3352 m
-3504 3352 l
-3504 3353 l
-3431 3353 l
-3430 3353 m
-3505 3353 l
-3505 3354 l
-3430 3354 l
-3429 3354 m
-3506 3354 l
-3506 3355 l
-3429 3355 l
-3428 3355 m
-3507 3355 l
-3507 3356 l
-3428 3356 l
-3426 3356 m
-3508 3356 l
-3508 3357 l
-3426 3357 l
-3425 3357 m
-3508 3357 l
-3508 3358 l
-3425 3358 l
-3424 3358 m
-3509 3358 l
-3509 3359 l
-3424 3359 l
-3423 3359 m
-3510 3359 l
-3510 3360 l
-3423 3360 l
-3422 3360 m
-3511 3360 l
-3511 3361 l
-3422 3361 l
-3420 3361 m
-3512 3361 l
-3512 3362 l
-3420 3362 l
-3419 3362 m
-3513 3362 l
-3513 3363 l
-3419 3363 l
-3418 3363 m
-3513 3363 l
-3513 3364 l
-3418 3364 l
-3417 3364 m
-3514 3364 l
-3514 3365 l
-3417 3365 l
-3416 3365 m
-3515 3365 l
-3515 3366 l
-3416 3366 l
-3414 3366 m
-3516 3366 l
-3516 3367 l
-3414 3367 l
-3413 3367 m
-3517 3367 l
-3517 3368 l
-3413 3368 l
-3412 3368 m
-3518 3368 l
-3518 3369 l
-3412 3369 l
-3411 3369 m
-3518 3369 l
-3518 3370 l
-3411 3370 l
-3409 3370 m
-3519 3370 l
-3519 3371 l
-3409 3371 l
-3408 3371 m
-3520 3371 l
-3520 3372 l
-3408 3372 l
-3407 3372 m
-3521 3372 l
-3521 3373 l
-3407 3373 l
-3406 3373 m
-3522 3373 l
-3522 3374 l
-3406 3374 l
-3405 3374 m
-3522 3374 l
-3522 3375 l
-3405 3375 l
-3403 3375 m
-3523 3375 l
-3523 3376 l
-3403 3376 l
-3402 3376 m
-3524 3376 l
-3524 3377 l
-3402 3377 l
-3401 3377 m
-3525 3377 l
-3525 3378 l
-3401 3378 l
-3400 3378 m
-3526 3378 l
-3526 3379 l
-3400 3379 l
-3399 3379 m
-3527 3379 l
-3527 3380 l
-3399 3380 l
-3397 3380 m
-3527 3380 l
-3527 3381 l
-3397 3381 l
-3396 3381 m
-3528 3381 l
-3528 3382 l
-3396 3382 l
-3395 3382 m
-3529 3382 l
-3529 3383 l
-3395 3383 l
-3394 3383 m
-3530 3383 l
-3530 3384 l
-3394 3384 l
-3393 3384 m
-3531 3384 l
-3531 3385 l
-3393 3385 l
-3391 3385 m
-3532 3385 l
-3532 3386 l
-3391 3386 l
-3390 3386 m
-3532 3386 l
-3532 3387 l
-3390 3387 l
-3389 3387 m
-3533 3387 l
-3533 3388 l
-3389 3388 l
-3388 3388 m
-3534 3388 l
-3534 3389 l
-3388 3389 l
-3387 3389 m
-3535 3389 l
-3535 3390 l
-3387 3390 l
-3385 3390 m
-3536 3390 l
-3536 3391 l
-3385 3391 l
-3384 3391 m
-3537 3391 l
-3537 3392 l
-3384 3392 l
-3383 3392 m
-3537 3392 l
-3537 3393 l
-3383 3393 l
-3382 3393 m
-3538 3393 l
-3538 3394 l
-3382 3394 l
-3381 3394 m
-3539 3394 l
-3539 3395 l
-3381 3395 l
-3381 3395 m
-3540 3395 l
-3540 3396 l
-3381 3396 l
-3381 3396 m
-3541 3396 l
-3541 3397 l
-3381 3397 l
-3382 3397 m
-3541 3397 l
-3541 3398 l
-3382 3398 l
-3383 3398 m
-3542 3398 l
-3542 3399 l
-3383 3399 l
-3384 3399 m
-3543 3399 l
-3543 3400 l
-3384 3400 l
-3385 3400 m
-3544 3400 l
-3544 3401 l
-3385 3401 l
-3385 3401 m
-3545 3401 l
-3545 3402 l
-3385 3402 l
-3386 3402 m
-3546 3402 l
-3546 3403 l
-3386 3403 l
-3387 3403 m
-3546 3403 l
-3546 3404 l
-3387 3404 l
-3388 3404 m
-3547 3404 l
-3547 3405 l
-3388 3405 l
-3389 3405 m
-3548 3405 l
-3548 3406 l
-3389 3406 l
-3390 3406 m
-3549 3406 l
-3549 3407 l
-3390 3407 l
-3390 3407 m
-3550 3407 l
-3550 3408 l
-3390 3408 l
-3391 3408 m
-3551 3408 l
-3551 3409 l
-3391 3409 l
-3392 3409 m
-3551 3409 l
-3551 3410 l
-3392 3410 l
-3393 3410 m
-3552 3410 l
-3552 3411 l
-3393 3411 l
-3394 3411 m
-3553 3411 l
-3553 3412 l
-3394 3412 l
-3395 3412 m
-3554 3412 l
-3554 3413 l
-3395 3413 l
-3395 3413 m
-3555 3413 l
-3555 3414 l
-3395 3414 l
-3396 3414 m
-3555 3414 l
-3555 3415 l
-3396 3415 l
-3397 3415 m
-3556 3415 l
-3556 3416 l
-3397 3416 l
-3398 3416 m
-3557 3416 l
-3557 3417 l
-3398 3417 l
-3399 3417 m
-3558 3417 l
-3558 3418 l
-3399 3418 l
-3400 3418 m
-3559 3418 l
-3559 3419 l
-3400 3419 l
-3400 3419 m
-3560 3419 l
-3560 3420 l
-3400 3420 l
-3401 3420 m
-3560 3420 l
-3560 3421 l
-3401 3421 l
-3402 3421 m
-3561 3421 l
-3561 3422 l
-3402 3422 l
-3403 3422 m
-3562 3422 l
-3562 3423 l
-3403 3423 l
-3404 3423 m
-3563 3423 l
-3563 3424 l
-3404 3424 l
-3405 3424 m
-3564 3424 l
-3564 3425 l
-3405 3425 l
-3405 3425 m
-3565 3425 l
-3565 3426 l
-3405 3426 l
-3406 3426 m
-3565 3426 l
-3565 3427 l
-3406 3427 l
-3407 3427 m
-3566 3427 l
-3566 3428 l
-3407 3428 l
-3408 3428 m
-3567 3428 l
-3567 3429 l
-3408 3429 l
-3409 3429 m
-3568 3429 l
-3568 3430 l
-3409 3430 l
-3410 3430 m
-3569 3430 l
-3569 3432 l
-3410 3432 l
-3411 3432 m
-3570 3432 l
-3570 3433 l
-3411 3433 l
-3412 3433 m
-3571 3433 l
-3571 3434 l
-3412 3434 l
-3413 3434 m
-3572 3434 l
-3572 3435 l
-3413 3435 l
-3414 3435 m
-3573 3435 l
-3573 3436 l
-3414 3436 l
-3414 3436 m
-3574 3436 l
-3574 3437 l
-3414 3437 l
-3415 3437 m
-3574 3437 l
-3574 3438 l
-3415 3438 l
-3416 3438 m
-3575 3438 l
-3575 3439 l
-3416 3439 l
-3417 3439 m
-3576 3439 l
-3576 3440 l
-3417 3440 l
-3418 3440 m
-3577 3440 l
-3577 3441 l
-3418 3441 l
-3419 3441 m
-3578 3441 l
-3578 3442 l
-3419 3442 l
-3419 3442 m
-3579 3442 l
-3579 3443 l
-3419 3443 l
-3420 3443 m
-3579 3443 l
-3579 3444 l
-3420 3444 l
-3421 3444 m
-3580 3444 l
-3580 3445 l
-3421 3445 l
-3422 3445 m
-3581 3445 l
-3581 3446 l
-3422 3446 l
-3423 3446 m
-3582 3446 l
-3582 3447 l
-3423 3447 l
-3424 3447 m
-3583 3447 l
-3583 3449 l
-3424 3449 l
-3425 3449 m
-3584 3449 l
-3584 3450 l
-3425 3450 l
-3426 3450 m
-3585 3450 l
-3585 3451 l
-3426 3451 l
-3427 3451 m
-3586 3451 l
-3586 3452 l
-3427 3452 l
-3428 3452 m
-3587 3452 l
-3587 3453 l
-3428 3453 l
-3429 3453 m
-3588 3453 l
-3588 3455 l
-3429 3455 l
-3430 3455 m
-3589 3455 l
-3589 3456 l
-3430 3456 l
-3431 3456 m
-3590 3456 l
-3590 3457 l
-3431 3457 l
-3432 3457 m
-3591 3457 l
-3591 3458 l
-3432 3458 l
-3433 3458 m
-3592 3458 l
-3592 3459 l
-3433 3459 l
-3434 3459 m
-3593 3459 l
-3593 3461 l
-3434 3461 l
-3435 3461 m
-3594 3461 l
-3594 3462 l
-3435 3462 l
-3436 3462 m
-3595 3462 l
-3595 3463 l
-3436 3463 l
-3437 3463 m
-3596 3463 l
-3596 3464 l
-3437 3464 l
-3438 3464 m
-3597 3464 l
-3597 3465 l
-3438 3465 l
-3439 3465 m
-3598 3465 l
-3598 3467 l
-3439 3467 l
-3440 3467 m
-3599 3467 l
-3599 3468 l
-3440 3468 l
-3441 3468 m
-3600 3468 l
-3600 3469 l
-3441 3469 l
-3442 3469 m
-3601 3469 l
-3601 3470 l
-3442 3470 l
-3443 3470 m
-3602 3470 l
-3602 3472 l
-3443 3472 l
-3444 3472 m
-3603 3472 l
-3603 3473 l
-3444 3473 l
-3445 3473 m
-3604 3473 l
-3604 3474 l
-3445 3474 l
-3446 3474 m
-3605 3474 l
-3605 3475 l
-3446 3475 l
-3447 3475 m
-3606 3475 l
-3606 3476 l
-3447 3476 l
-3448 3476 m
-3607 3476 l
-3607 3478 l
-3448 3478 l
-3449 3478 m
-3608 3478 l
-3608 3479 l
-3449 3479 l
-3450 3479 m
-3609 3479 l
-3609 3480 l
-3450 3480 l
-3451 3480 m
-3610 3480 l
-3610 3481 l
-3451 3481 l
-3452 3481 m
-3611 3481 l
-3611 3482 l
-3452 3482 l
-3453 3482 m
-3612 3482 l
-3612 3484 l
-3453 3484 l
-3454 3484 m
-3613 3484 l
-3613 3485 l
-3454 3485 l
-3455 3485 m
-3614 3485 l
-3614 3486 l
-3455 3486 l
-3456 3486 m
-3615 3486 l
-3615 3487 l
-3456 3487 l
-3457 3487 m
-3616 3487 l
-3616 3488 l
-3457 3488 l
-3458 3488 m
-3616 3488 l
-3616 3489 l
-3458 3489 l
-3458 3489 m
-3617 3489 l
-3617 3490 l
-3458 3490 l
-3459 3490 m
-3618 3490 l
-3618 3491 l
-3459 3491 l
-3460 3491 m
-3619 3491 l
-3619 3492 l
-3460 3492 l
-3461 3492 m
-3620 3492 l
-3620 3493 l
-3461 3493 l
-3462 3493 m
-3621 3493 l
-3621 3494 l
-3462 3494 l
-3463 3494 m
-3621 3494 l
-3621 3495 l
-3463 3495 l
-3463 3495 m
-3622 3495 l
-3622 3496 l
-3463 3496 l
-3464 3496 m
-3623 3496 l
-3623 3497 l
-3464 3497 l
-3465 3497 m
-3624 3497 l
-3624 3498 l
-3465 3498 l
-3466 3498 m
-3625 3498 l
-3625 3499 l
-3466 3499 l
-3467 3499 m
-3626 3499 l
-3626 3500 l
-3467 3500 l
-3468 3500 m
-3626 3500 l
-3626 3501 l
-3468 3501 l
-3468 3501 m
-3627 3501 l
-3627 3502 l
-3468 3502 l
-3469 3502 m
-3628 3502 l
-3628 3503 l
-3469 3503 l
-3470 3503 m
-3629 3503 l
-3629 3504 l
-3470 3504 l
-3471 3504 m
-3630 3504 l
-3630 3505 l
-3471 3505 l
-3472 3505 m
-3630 3505 l
-3630 3506 l
-3472 3506 l
-3473 3506 m
-3631 3506 l
-3631 3507 l
-3473 3507 l
-3473 3507 m
-3632 3507 l
-3632 3508 l
-3473 3508 l
-3474 3508 m
-3633 3508 l
-3633 3509 l
-3474 3509 l
-3475 3509 m
-3634 3509 l
-3634 3510 l
-3475 3510 l
-3476 3510 m
-3635 3510 l
-3635 3511 l
-3476 3511 l
-3477 3511 m
-3635 3511 l
-3635 3512 l
-3477 3512 l
-3477 3512 m
-3636 3512 l
-3636 3513 l
-3477 3513 l
-3478 3513 m
-3637 3513 l
-3637 3514 l
-3478 3514 l
-3479 3514 m
-3638 3514 l
-3638 3515 l
-3479 3515 l
-3480 3515 m
-3639 3515 l
-3639 3516 l
-3480 3516 l
-3481 3516 m
-3640 3516 l
-3640 3517 l
-3481 3517 l
-3482 3517 m
-3640 3517 l
-3640 3518 l
-3482 3518 l
-3482 3518 m
-3641 3518 l
-3641 3519 l
-3482 3519 l
-3483 3519 m
-3642 3519 l
-3642 3520 l
-3483 3520 l
-3484 3520 m
-3643 3520 l
-3643 3521 l
-3484 3521 l
-3485 3521 m
-3644 3521 l
-3644 3522 l
-3485 3522 l
-3486 3522 m
-3644 3522 l
-3644 3523 l
-3486 3523 l
-3487 3523 m
-3645 3523 l
-3645 3524 l
-3487 3524 l
-3487 3524 m
-3646 3524 l
-3646 3525 l
-3487 3525 l
-3488 3525 m
-3647 3525 l
-3647 3526 l
-3488 3526 l
-3489 3526 m
-3648 3526 l
-3648 3527 l
-3489 3527 l
-3490 3527 m
-3649 3527 l
-3649 3528 l
-3490 3528 l
-3491 3528 m
-3649 3528 l
-3649 3529 l
-3491 3529 l
-3492 3529 m
-3650 3529 l
-3650 3530 l
-3492 3530 l
-3492 3530 m
-3651 3530 l
-3651 3531 l
-3492 3531 l
-3493 3531 m
-3652 3531 l
-3652 3532 l
-3493 3532 l
-3494 3532 m
-3653 3532 l
-3653 3533 l
-3494 3533 l
-3495 3533 m
-3654 3533 l
-3654 3534 l
-3495 3534 l
-3496 3534 m
-3654 3534 l
-3654 3535 l
-3496 3535 l
-3497 3535 m
-3655 3535 l
-3655 3536 l
-3497 3536 l
-3497 3536 m
-3656 3536 l
-3656 3537 l
-3497 3537 l
-3498 3537 m
-3657 3537 l
-3657 3538 l
-3498 3538 l
-3499 3538 m
-3658 3538 l
-3658 3539 l
-3499 3539 l
-3500 3539 m
-3658 3539 l
-3658 3540 l
-3500 3540 l
-3501 3540 m
-3659 3540 l
-3659 3541 l
-3501 3541 l
-3502 3541 m
-3657 3541 l
-3657 3542 l
-3502 3542 l
-3502 3542 m
-3656 3542 l
-3656 3543 l
-3502 3543 l
-3503 3543 m
-3655 3543 l
-3655 3544 l
-3503 3544 l
-3504 3544 m
-3654 3544 l
-3654 3545 l
-3504 3545 l
-3505 3545 m
-3652 3545 l
-3652 3546 l
-3505 3546 l
-3506 3546 m
-3651 3546 l
-3651 3547 l
-3506 3547 l
-3506 3547 m
-3650 3547 l
-3650 3548 l
-3506 3548 l
-3507 3548 m
-3649 3548 l
-3649 3549 l
-3507 3549 l
-3508 3549 m
-3648 3549 l
-3648 3550 l
-3508 3550 l
-3509 3550 m
-3646 3550 l
-3646 3551 l
-3509 3551 l
-3510 3551 m
-3645 3551 l
-3645 3552 l
-3510 3552 l
-3511 3552 m
-3644 3552 l
-3644 3553 l
-3511 3553 l
-3511 3553 m
-3643 3553 l
-3643 3554 l
-3511 3554 l
-3512 3554 m
-3642 3554 l
-3642 3555 l
-3512 3555 l
-3513 3555 m
-3640 3555 l
-3640 3556 l
-3513 3556 l
-3514 3556 m
-3639 3556 l
-3639 3557 l
-3514 3557 l
-3515 3557 m
-3638 3557 l
-3638 3558 l
-3515 3558 l
-3516 3558 m
-3637 3558 l
-3637 3559 l
-3516 3559 l
-3516 3559 m
-3636 3559 l
-3636 3560 l
-3516 3560 l
-3517 3560 m
-3634 3560 l
-3634 3561 l
-3517 3561 l
-3518 3561 m
-3633 3561 l
-3633 3562 l
-3518 3562 l
-3519 3562 m
-3632 3562 l
-3632 3563 l
-3519 3563 l
-3520 3563 m
-3631 3563 l
-3631 3564 l
-3520 3564 l
-3521 3564 m
-3630 3564 l
-3630 3565 l
-3521 3565 l
-3521 3565 m
-3628 3565 l
-3628 3566 l
-3521 3566 l
-3522 3566 m
-3627 3566 l
-3627 3567 l
-3522 3567 l
-3523 3567 m
-3626 3567 l
-3626 3568 l
-3523 3568 l
-3524 3568 m
-3625 3568 l
-3625 3569 l
-3524 3569 l
-3525 3569 m
-3623 3569 l
-3623 3570 l
-3525 3570 l
-3526 3570 m
-3622 3570 l
-3622 3571 l
-3526 3571 l
-3526 3571 m
-3621 3571 l
-3621 3572 l
-3526 3572 l
-3527 3572 m
-3620 3572 l
-3620 3573 l
-3527 3573 l
-3528 3573 m
-3619 3573 l
-3619 3574 l
-3528 3574 l
-3529 3574 m
-3617 3574 l
-3617 3575 l
-3529 3575 l
-3530 3575 m
-3616 3575 l
-3616 3576 l
-3530 3576 l
-3531 3576 m
-3615 3576 l
-3615 3577 l
-3531 3577 l
-3531 3577 m
-3614 3577 l
-3614 3578 l
-3531 3578 l
-3532 3578 m
-3613 3578 l
-3613 3579 l
-3532 3579 l
-3533 3579 m
-3611 3579 l
-3611 3580 l
-3533 3580 l
-3534 3580 m
-3610 3580 l
-3610 3581 l
-3534 3581 l
-3535 3581 m
-3609 3581 l
-3609 3582 l
-3535 3582 l
-3535 3582 m
-3608 3582 l
-3608 3583 l
-3535 3583 l
-3536 3583 m
-3607 3583 l
-3607 3584 l
-3536 3584 l
-3537 3584 m
-3605 3584 l
-3605 3585 l
-3537 3585 l
-3538 3585 m
-3604 3585 l
-3604 3586 l
-3538 3586 l
-3539 3586 m
-3603 3586 l
-3603 3587 l
-3539 3587 l
-3540 3587 m
-3602 3587 l
-3602 3588 l
-3540 3588 l
-3540 3588 m
-3601 3588 l
-3601 3589 l
-3540 3589 l
-3541 3589 m
-3599 3589 l
-3599 3590 l
-3541 3590 l
-3542 3590 m
-3598 3590 l
-3598 3591 l
-3542 3591 l
-3543 3591 m
-3597 3591 l
-3597 3592 l
-3543 3592 l
-3544 3592 m
-3596 3592 l
-3596 3593 l
-3544 3593 l
-3545 3593 m
-3594 3593 l
-3594 3594 l
-3545 3594 l
-3545 3594 m
-3593 3594 l
-3593 3595 l
-3545 3595 l
-3546 3595 m
-3592 3595 l
-3592 3596 l
-3546 3596 l
-3547 3596 m
-3591 3596 l
-3591 3597 l
-3547 3597 l
-3548 3597 m
-3590 3597 l
-3590 3598 l
-3548 3598 l
-3549 3598 m
-3588 3598 l
-3588 3599 l
-3549 3599 l
-3550 3599 m
-3587 3599 l
-3587 3600 l
-3550 3600 l
-3550 3600 m
-3586 3600 l
-3586 3601 l
-3550 3601 l
-3551 3601 m
-3585 3601 l
-3585 3602 l
-3551 3602 l
-3552 3602 m
-3584 3602 l
-3584 3603 l
-3552 3603 l
-3553 3603 m
-3582 3603 l
-3582 3604 l
-3553 3604 l
-3554 3604 m
-3581 3604 l
-3581 3605 l
-3554 3605 l
-3555 3605 m
-3580 3605 l
-3580 3606 l
-3555 3606 l
-3555 3606 m
-3579 3606 l
-3579 3607 l
-3555 3607 l
-3556 3607 m
-3578 3607 l
-3578 3608 l
-3556 3608 l
-3557 3608 m
-3576 3608 l
-3576 3609 l
-3557 3609 l
-3558 3609 m
-3575 3609 l
-3575 3610 l
-3558 3610 l
-3559 3610 m
-3574 3610 l
-3574 3611 l
-3559 3611 l
-3560 3611 m
-3573 3611 l
-3573 3612 l
-3560 3612 l
-3560 3612 m
-3572 3612 l
-3572 3613 l
-3560 3613 l
-3561 3613 m
-3570 3613 l
-3570 3614 l
-3561 3614 l
-3562 3614 m
-3569 3614 l
-3569 3615 l
-3562 3615 l
-3563 3615 m
-3568 3615 l
-3568 3616 l
-3563 3616 l
-3564 3616 m
-3567 3616 l
-3567 3617 l
-3564 3617 l
-Y
-3474.6 3317.5 m
-3381 3395 l
-3565 3617 l
-3658 3540 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-3446 3368 m
-3494 3426 l
-S
-3518 3515 m
-3509 3517 l
-3498 3510 l
-3492 3503 l
-3488 3491 l
-3492 3476 l
-3505 3460 l
-3522 3447 l
-3537 3439 l
-3549 3440 l
-3560 3447 l
-3563 3451 l
-3567 3463 l
-3566 3475 l
-3559 3486 l
-3556 3488 l
-3544 3493 l
-3532 3492 l
-3521 3485 l
-3518 3482 l
-3513 3470 l
-3515 3458 l
-3522 3447 l
-S
-3543 3564 m
-3538 3552 l
-3542 3538 l
-3556 3521 l
-3566 3513 l
-3584 3503 l
-3599 3502 l
-3611 3509 l
-3616 3515 l
-3621 3527 l
-3616 3542 l
-3603 3558 l
-3593 3566 l
-3574 3576 l
-3559 3578 l
-3548 3571 l
-3543 3564 l
-S
-1 g
-3809 3828 m
-3815 3828 l
-3815 3829 l
-3809 3829 l
-3806 3829 m
-3816 3829 l
-3816 3830 l
-3806 3830 l
-3803 3830 m
-3816 3830 l
-3816 3831 l
-3803 3831 l
-3799 3831 m
-3816 3831 l
-3816 3832 l
-3799 3832 l
-3796 3832 m
-3816 3832 l
-3816 3833 l
-3796 3833 l
-3793 3833 m
-3817 3833 l
-3817 3834 l
-3793 3834 l
-3789 3834 m
-3817 3834 l
-3817 3835 l
-3789 3835 l
-3786 3835 m
-3817 3835 l
-3817 3836 l
-3786 3836 l
-3782 3836 m
-3818 3836 l
-3818 3837 l
-3782 3837 l
-3779 3837 m
-3818 3837 l
-3818 3838 l
-3779 3838 l
-3776 3838 m
-3818 3838 l
-3818 3839 l
-3776 3839 l
-3772 3839 m
-3819 3839 l
-3819 3840 l
-3772 3840 l
-3769 3840 m
-3819 3840 l
-3819 3841 l
-3769 3841 l
-3765 3841 m
-3819 3841 l
-3819 3842 l
-3765 3842 l
-3762 3842 m
-3819 3842 l
-3819 3843 l
-3762 3843 l
-3759 3843 m
-3820 3843 l
-3820 3844 l
-3759 3844 l
-3755 3844 m
-3820 3844 l
-3820 3845 l
-3755 3845 l
-3752 3845 m
-3820 3845 l
-3820 3846 l
-3752 3846 l
-3748 3846 m
-3821 3846 l
-3821 3847 l
-3748 3847 l
-3745 3847 m
-3821 3847 l
-3821 3848 l
-3745 3848 l
-3742 3848 m
-3821 3848 l
-3821 3849 l
-3742 3849 l
-3738 3849 m
-3822 3849 l
-3822 3850 l
-3738 3850 l
-3735 3850 m
-3822 3850 l
-3822 3851 l
-3735 3851 l
-3731 3851 m
-3822 3851 l
-3822 3852 l
-3731 3852 l
-3728 3852 m
-3822 3852 l
-3822 3853 l
-3728 3853 l
-3725 3853 m
-3823 3853 l
-3823 3854 l
-3725 3854 l
-3721 3854 m
-3823 3854 l
-3823 3855 l
-3721 3855 l
-3718 3855 m
-3823 3855 l
-3823 3856 l
-3718 3856 l
-3714 3856 m
-3824 3856 l
-3824 3857 l
-3714 3857 l
-3711 3857 m
-3824 3857 l
-3824 3858 l
-3711 3858 l
-3708 3858 m
-3824 3858 l
-3824 3859 l
-3708 3859 l
-3704 3859 m
-3825 3859 l
-3825 3860 l
-3704 3860 l
-3701 3860 m
-3825 3860 l
-3825 3861 l
-3701 3861 l
-3698 3861 m
-3825 3861 l
-3825 3862 l
-3698 3862 l
-3698 3862 m
-3825 3862 l
-3825 3863 l
-3698 3863 l
-3698 3863 m
-3826 3863 l
-3826 3866 l
-3698 3866 l
-3699 3866 m
-3827 3866 l
-3827 3869 l
-3699 3869 l
-3700 3869 m
-3828 3869 l
-3828 3873 l
-3700 3873 l
-3701 3873 m
-3829 3873 l
-3829 3876 l
-3701 3876 l
-3702 3876 m
-3830 3876 l
-3830 3879 l
-3702 3879 l
-3703 3879 m
-3831 3879 l
-3831 3883 l
-3703 3883 l
-3704 3883 m
-3832 3883 l
-3832 3886 l
-3704 3886 l
-3705 3886 m
-3833 3886 l
-3833 3889 l
-3705 3889 l
-3706 3889 m
-3834 3889 l
-3834 3893 l
-3706 3893 l
-3707 3893 m
-3835 3893 l
-3835 3896 l
-3707 3896 l
-3708 3896 m
-3836 3896 l
-3836 3899 l
-3708 3899 l
-3709 3899 m
-3837 3899 l
-3837 3903 l
-3709 3903 l
-3710 3903 m
-3838 3903 l
-3838 3906 l
-3710 3906 l
-3711 3906 m
-3839 3906 l
-3839 3909 l
-3711 3909 l
-3712 3909 m
-3840 3909 l
-3840 3913 l
-3712 3913 l
-3713 3913 m
-3841 3913 l
-3841 3916 l
-3713 3916 l
-3714 3916 m
-3842 3916 l
-3842 3919 l
-3714 3919 l
-3715 3919 m
-3842 3919 l
-3842 3920 l
-3715 3920 l
-3715 3920 m
-3843 3920 l
-3843 3923 l
-3715 3923 l
-3716 3923 m
-3844 3923 l
-3844 3926 l
-3716 3926 l
-3717 3926 m
-3845 3926 l
-3845 3929 l
-3717 3929 l
-3718 3929 m
-3845 3929 l
-3845 3930 l
-3718 3930 l
-3718 3930 m
-3846 3930 l
-3846 3933 l
-3718 3933 l
-3719 3933 m
-3847 3933 l
-3847 3936 l
-3719 3936 l
-3720 3936 m
-3848 3936 l
-3848 3939 l
-3720 3939 l
-3721 3939 m
-3848 3939 l
-3848 3940 l
-3721 3940 l
-3721 3940 m
-3849 3940 l
-3849 3943 l
-3721 3943 l
-3722 3943 m
-3850 3943 l
-3850 3946 l
-3722 3946 l
-3723 3946 m
-3851 3946 l
-3851 3949 l
-3723 3949 l
-3724 3949 m
-3851 3949 l
-3851 3950 l
-3724 3950 l
-3724 3950 m
-3852 3950 l
-3852 3953 l
-3724 3953 l
-3725 3953 m
-3853 3953 l
-3853 3956 l
-3725 3956 l
-3726 3956 m
-3854 3956 l
-3854 3959 l
-3726 3959 l
-3727 3959 m
-3854 3959 l
-3854 3960 l
-3727 3960 l
-3727 3960 m
-3855 3960 l
-3855 3963 l
-3727 3963 l
-3728 3963 m
-3856 3963 l
-3856 3966 l
-3728 3966 l
-3729 3966 m
-3857 3966 l
-3857 3969 l
-3729 3969 l
-3730 3969 m
-3857 3969 l
-3857 3970 l
-3730 3970 l
-3730 3970 m
-3858 3970 l
-3858 3973 l
-3730 3973 l
-3731 3973 m
-3859 3973 l
-3859 3976 l
-3731 3976 l
-3732 3976 m
-3860 3976 l
-3860 3979 l
-3732 3979 l
-3733 3979 m
-3860 3979 l
-3860 3980 l
-3733 3980 l
-3733 3980 m
-3861 3980 l
-3861 3983 l
-3733 3983 l
-3734 3983 m
-3862 3983 l
-3862 3986 l
-3734 3986 l
-3735 3986 m
-3863 3986 l
-3863 3989 l
-3735 3989 l
-3736 3989 m
-3863 3989 l
-3863 3990 l
-3736 3990 l
-3736 3990 m
-3864 3990 l
-3864 3993 l
-3736 3993 l
-3737 3993 m
-3865 3993 l
-3865 3996 l
-3737 3996 l
-3738 3996 m
-3866 3996 l
-3866 3999 l
-3738 3999 l
-3739 3999 m
-3866 3999 l
-3866 4000 l
-3739 4000 l
-3739 4000 m
-3867 4000 l
-3867 4003 l
-3739 4003 l
-3740 4003 m
-3868 4003 l
-3868 4006 l
-3740 4006 l
-3741 4006 m
-3869 4006 l
-3869 4009 l
-3741 4009 l
-3742 4009 m
-3869 4009 l
-3869 4010 l
-3742 4010 l
-3742 4010 m
-3870 4010 l
-3870 4013 l
-3742 4013 l
-3743 4013 m
-3871 4013 l
-3871 4016 l
-3743 4016 l
-3744 4016 m
-3871 4016 l
-3871 4017 l
-3744 4017 l
-3744 4017 m
-3872 4017 l
-3872 4019 l
-3744 4019 l
-3745 4019 m
-3872 4019 l
-3872 4020 l
-3745 4020 l
-3745 4020 m
-3873 4020 l
-3873 4023 l
-3745 4023 l
-3746 4023 m
-3874 4023 l
-3874 4026 l
-3746 4026 l
-3747 4026 m
-3874 4026 l
-3874 4027 l
-3747 4027 l
-3747 4027 m
-3875 4027 l
-3875 4029 l
-3747 4029 l
-3748 4029 m
-3875 4029 l
-3875 4030 l
-3748 4030 l
-3748 4030 m
-3876 4030 l
-3876 4033 l
-3748 4033 l
-3749 4033 m
-3877 4033 l
-3877 4036 l
-3749 4036 l
-3750 4036 m
-3877 4036 l
-3877 4037 l
-3750 4037 l
-3750 4037 m
-3878 4037 l
-3878 4039 l
-3750 4039 l
-3751 4039 m
-3878 4039 l
-3878 4040 l
-3751 4040 l
-3751 4040 m
-3879 4040 l
-3879 4043 l
-3751 4043 l
-3752 4043 m
-3880 4043 l
-3880 4046 l
-3752 4046 l
-3753 4046 m
-3880 4046 l
-3880 4047 l
-3753 4047 l
-3753 4047 m
-3881 4047 l
-3881 4049 l
-3753 4049 l
-3754 4049 m
-3881 4049 l
-3881 4050 l
-3754 4050 l
-3754 4050 m
-3882 4050 l
-3882 4053 l
-3754 4053 l
-3755 4053 m
-3883 4053 l
-3883 4056 l
-3755 4056 l
-3756 4056 m
-3883 4056 l
-3883 4057 l
-3756 4057 l
-3756 4057 m
-3884 4057 l
-3884 4059 l
-3756 4059 l
-3757 4059 m
-3884 4059 l
-3884 4060 l
-3757 4060 l
-3757 4060 m
-3885 4060 l
-3885 4063 l
-3757 4063 l
-3758 4063 m
-3886 4063 l
-3886 4066 l
-3758 4066 l
-3759 4066 m
-3886 4066 l
-3886 4067 l
-3759 4067 l
-3759 4067 m
-3887 4067 l
-3887 4069 l
-3759 4069 l
-3760 4069 m
-3887 4069 l
-3887 4070 l
-3760 4070 l
-3760 4070 m
-3888 4070 l
-3888 4073 l
-3760 4073 l
-3761 4073 m
-3889 4073 l
-3889 4076 l
-3761 4076 l
-3762 4076 m
-3889 4076 l
-3889 4077 l
-3762 4077 l
-3762 4077 m
-3890 4077 l
-3890 4079 l
-3762 4079 l
-3763 4079 m
-3890 4079 l
-3890 4080 l
-3763 4080 l
-3763 4080 m
-3891 4080 l
-3891 4083 l
-3763 4083 l
-3764 4083 m
-3892 4083 l
-3892 4086 l
-3764 4086 l
-3765 4086 m
-3892 4086 l
-3892 4087 l
-3765 4087 l
-3765 4087 m
-3893 4087 l
-3893 4089 l
-3765 4089 l
-3766 4089 m
-3893 4089 l
-3893 4090 l
-3766 4090 l
-3766 4090 m
-3894 4090 l
-3894 4093 l
-3766 4093 l
-3767 4093 m
-3895 4093 l
-3895 4096 l
-3767 4096 l
-3768 4096 m
-3895 4096 l
-3895 4097 l
-3768 4097 l
-3768 4097 m
-3896 4097 l
-3896 4099 l
-3768 4099 l
-3769 4099 m
-3896 4099 l
-3896 4100 l
-3769 4100 l
-3769 4100 m
-3897 4100 l
-3897 4103 l
-3769 4103 l
-3770 4103 m
-3897 4103 l
-3897 4104 l
-3770 4104 l
-3770 4104 m
-3897 4104 l
-3897 4105 l
-3770 4105 l
-3770 4105 m
-3894 4105 l
-3894 4106 l
-3770 4106 l
-3771 4106 m
-3891 4106 l
-3891 4107 l
-3771 4107 l
-3771 4107 m
-3888 4107 l
-3888 4108 l
-3771 4108 l
-3771 4108 m
-3884 4108 l
-3884 4109 l
-3771 4109 l
-3772 4109 m
-3881 4109 l
-3881 4110 l
-3772 4110 l
-3772 4110 m
-3878 4110 l
-3878 4111 l
-3772 4111 l
-3772 4111 m
-3874 4111 l
-3874 4112 l
-3772 4112 l
-3772 4112 m
-3871 4112 l
-3871 4113 l
-3772 4113 l
-3773 4113 m
-3868 4113 l
-3868 4114 l
-3773 4114 l
-3773 4114 m
-3864 4114 l
-3864 4115 l
-3773 4115 l
-3773 4115 m
-3861 4115 l
-3861 4116 l
-3773 4116 l
-3774 4116 m
-3858 4116 l
-3858 4117 l
-3774 4117 l
-3774 4117 m
-3854 4117 l
-3854 4118 l
-3774 4118 l
-3774 4118 m
-3851 4118 l
-3851 4119 l
-3774 4119 l
-3775 4119 m
-3848 4119 l
-3848 4120 l
-3775 4120 l
-3775 4120 m
-3844 4120 l
-3844 4121 l
-3775 4121 l
-3775 4121 m
-3841 4121 l
-3841 4122 l
-3775 4122 l
-3775 4122 m
-3838 4122 l
-3838 4123 l
-3775 4123 l
-3776 4123 m
-3835 4123 l
-3835 4124 l
-3776 4124 l
-3776 4124 m
-3831 4124 l
-3831 4125 l
-3776 4125 l
-3776 4125 m
-3828 4125 l
-3828 4126 l
-3776 4126 l
-3777 4126 m
-3825 4126 l
-3825 4127 l
-3777 4127 l
-3777 4127 m
-3821 4127 l
-3821 4128 l
-3777 4128 l
-3777 4128 m
-3818 4128 l
-3818 4129 l
-3777 4129 l
-3778 4129 m
-3815 4129 l
-3815 4130 l
-3778 4130 l
-3778 4130 m
-3811 4130 l
-3811 4131 l
-3778 4131 l
-3778 4131 m
-3808 4131 l
-3808 4132 l
-3778 4132 l
-3778 4132 m
-3805 4132 l
-3805 4133 l
-3778 4133 l
-3779 4133 m
-3801 4133 l
-3801 4134 l
-3779 4134 l
-3779 4134 m
-3798 4134 l
-3798 4135 l
-3779 4135 l
-3779 4135 m
-3795 4135 l
-3795 4136 l
-3779 4136 l
-3780 4136 m
-3791 4136 l
-3791 4137 l
-3780 4137 l
-3780 4137 m
-3788 4137 l
-3788 4138 l
-3780 4138 l
-3780 4138 m
-3785 4138 l
-3785 4139 l
-3780 4139 l
-Y
-3814.4 3827.7 m
-3698 3862 l
-3781 4139 l
-3897 4104 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-3768 3863 m
-3790 3935 l
-S
-3753 3986 m
-3766 4030 l
-3791 3996 l
-3794 4008 l
-3801 4015 l
-3806 4018 l
-3819 4018 l
-3827 4016 l
-3838 4008 l
-3843 3998 l
-3844 3985 l
-3840 3973 l
-3833 3962 l
-3827 3959 l
-3818 3957 l
-S
-3781 4082 m
-3782 4069 l
-3791 4057 l
-3810 4047 l
-3822 4043 l
-3843 4041 l
-3858 4046 l
-3865 4057 l
-3868 4065 l
-3867 4078 l
-3858 4089 l
-3839 4099 l
-3827 4103 l
-3806 4105 l
-3791 4101 l
-3784 4090 l
-3781 4082 l
-S
-1 g
-3582 5053 m
-3585 5053 l
-3585 5054 l
-3582 5054 l
-3581 5054 m
-3586 5054 l
-3586 5055 l
-3581 5055 l
-3580 5055 m
-3587 5055 l
-3587 5056 l
-3580 5056 l
-3579 5056 m
-3588 5056 l
-3588 5057 l
-3579 5057 l
-3578 5057 m
-3590 5057 l
-3590 5058 l
-3578 5058 l
-3578 5058 m
-3591 5058 l
-3591 5059 l
-3578 5059 l
-3577 5059 m
-3592 5059 l
-3592 5060 l
-3577 5060 l
-3576 5060 m
-3593 5060 l
-3593 5061 l
-3576 5061 l
-3575 5061 m
-3594 5061 l
-3594 5062 l
-3575 5062 l
-3574 5062 m
-3596 5062 l
-3596 5063 l
-3574 5063 l
-3573 5063 m
-3597 5063 l
-3597 5064 l
-3573 5064 l
-3573 5064 m
-3598 5064 l
-3598 5065 l
-3573 5065 l
-3572 5065 m
-3599 5065 l
-3599 5066 l
-3572 5066 l
-3571 5066 m
-3600 5066 l
-3600 5067 l
-3571 5067 l
-3570 5067 m
-3602 5067 l
-3602 5068 l
-3570 5068 l
-3569 5068 m
-3603 5068 l
-3603 5069 l
-3569 5069 l
-3568 5069 m
-3604 5069 l
-3604 5070 l
-3568 5070 l
-3568 5070 m
-3605 5070 l
-3605 5071 l
-3568 5071 l
-3567 5071 m
-3607 5071 l
-3607 5072 l
-3567 5072 l
-3566 5072 m
-3608 5072 l
-3608 5073 l
-3566 5073 l
-3565 5073 m
-3609 5073 l
-3609 5074 l
-3565 5074 l
-3564 5074 m
-3610 5074 l
-3610 5075 l
-3564 5075 l
-3563 5075 m
-3611 5075 l
-3611 5076 l
-3563 5076 l
-3563 5076 m
-3613 5076 l
-3613 5077 l
-3563 5077 l
-3562 5077 m
-3614 5077 l
-3614 5078 l
-3562 5078 l
-3561 5078 m
-3615 5078 l
-3615 5079 l
-3561 5079 l
-3560 5079 m
-3616 5079 l
-3616 5080 l
-3560 5080 l
-3559 5080 m
-3617 5080 l
-3617 5081 l
-3559 5081 l
-3558 5081 m
-3619 5081 l
-3619 5082 l
-3558 5082 l
-3558 5082 m
-3620 5082 l
-3620 5083 l
-3558 5083 l
-3557 5083 m
-3621 5083 l
-3621 5084 l
-3557 5084 l
-3556 5084 m
-3622 5084 l
-3622 5085 l
-3556 5085 l
-3555 5085 m
-3624 5085 l
-3624 5086 l
-3555 5086 l
-3554 5086 m
-3625 5086 l
-3625 5087 l
-3554 5087 l
-3553 5087 m
-3626 5087 l
-3626 5088 l
-3553 5088 l
-3553 5088 m
-3627 5088 l
-3627 5089 l
-3553 5089 l
-3552 5089 m
-3628 5089 l
-3628 5090 l
-3552 5090 l
-3551 5090 m
-3630 5090 l
-3630 5091 l
-3551 5091 l
-3550 5091 m
-3631 5091 l
-3631 5092 l
-3550 5092 l
-3549 5092 m
-3632 5092 l
-3632 5093 l
-3549 5093 l
-3548 5093 m
-3633 5093 l
-3633 5094 l
-3548 5094 l
-3548 5094 m
-3634 5094 l
-3634 5095 l
-3548 5095 l
-3547 5095 m
-3636 5095 l
-3636 5096 l
-3547 5096 l
-3546 5096 m
-3637 5096 l
-3637 5097 l
-3546 5097 l
-3545 5097 m
-3638 5097 l
-3638 5098 l
-3545 5098 l
-3544 5098 m
-3639 5098 l
-3639 5099 l
-3544 5099 l
-3544 5099 m
-3641 5099 l
-3641 5100 l
-3544 5100 l
-3543 5100 m
-3642 5100 l
-3642 5101 l
-3543 5101 l
-3542 5101 m
-3643 5101 l
-3643 5102 l
-3542 5102 l
-3541 5102 m
-3644 5102 l
-3644 5103 l
-3541 5103 l
-3540 5103 m
-3645 5103 l
-3645 5104 l
-3540 5104 l
-3539 5104 m
-3647 5104 l
-3647 5105 l
-3539 5105 l
-3539 5105 m
-3648 5105 l
-3648 5106 l
-3539 5106 l
-3538 5106 m
-3649 5106 l
-3649 5107 l
-3538 5107 l
-3537 5107 m
-3650 5107 l
-3650 5108 l
-3537 5108 l
-3536 5108 m
-3651 5108 l
-3651 5109 l
-3536 5109 l
-3535 5109 m
-3653 5109 l
-3653 5110 l
-3535 5110 l
-3534 5110 m
-3654 5110 l
-3654 5111 l
-3534 5111 l
-3534 5111 m
-3655 5111 l
-3655 5112 l
-3534 5112 l
-3533 5112 m
-3656 5112 l
-3656 5113 l
-3533 5113 l
-3532 5113 m
-3658 5113 l
-3658 5114 l
-3532 5114 l
-3531 5114 m
-3659 5114 l
-3659 5115 l
-3531 5115 l
-3530 5115 m
-3660 5115 l
-3660 5116 l
-3530 5116 l
-3529 5116 m
-3661 5116 l
-3661 5117 l
-3529 5117 l
-3529 5117 m
-3662 5117 l
-3662 5118 l
-3529 5118 l
-3528 5118 m
-3664 5118 l
-3664 5119 l
-3528 5119 l
-3527 5119 m
-3665 5119 l
-3665 5120 l
-3527 5120 l
-3526 5120 m
-3666 5120 l
-3666 5121 l
-3526 5121 l
-3525 5121 m
-3667 5121 l
-3667 5122 l
-3525 5122 l
-3524 5122 m
-3668 5122 l
-3668 5123 l
-3524 5123 l
-3524 5123 m
-3670 5123 l
-3670 5124 l
-3524 5124 l
-3523 5124 m
-3671 5124 l
-3671 5125 l
-3523 5125 l
-3522 5125 m
-3672 5125 l
-3672 5126 l
-3522 5126 l
-3521 5126 m
-3673 5126 l
-3673 5127 l
-3521 5127 l
-3520 5127 m
-3675 5127 l
-3675 5128 l
-3520 5128 l
-3519 5128 m
-3676 5128 l
-3676 5129 l
-3519 5129 l
-3519 5129 m
-3677 5129 l
-3677 5130 l
-3519 5130 l
-3518 5130 m
-3677 5130 l
-3677 5131 l
-3518 5131 l
-3517 5131 m
-3676 5131 l
-3676 5132 l
-3517 5132 l
-3516 5132 m
-3676 5132 l
-3676 5133 l
-3516 5133 l
-3515 5133 m
-3675 5133 l
-3675 5134 l
-3515 5134 l
-3514 5134 m
-3674 5134 l
-3674 5135 l
-3514 5135 l
-3514 5135 m
-3673 5135 l
-3673 5136 l
-3514 5136 l
-3513 5136 m
-3672 5136 l
-3672 5137 l
-3513 5137 l
-3512 5137 m
-3671 5137 l
-3671 5138 l
-3512 5138 l
-3511 5138 m
-3671 5138 l
-3671 5139 l
-3511 5139 l
-3510 5139 m
-3670 5139 l
-3670 5140 l
-3510 5140 l
-3509 5140 m
-3669 5140 l
-3669 5141 l
-3509 5141 l
-3509 5141 m
-3668 5141 l
-3668 5142 l
-3509 5142 l
-3508 5142 m
-3667 5142 l
-3667 5143 l
-3508 5143 l
-3507 5143 m
-3666 5143 l
-3666 5144 l
-3507 5144 l
-3506 5144 m
-3666 5144 l
-3666 5145 l
-3506 5145 l
-3505 5145 m
-3665 5145 l
-3665 5146 l
-3505 5146 l
-3505 5146 m
-3664 5146 l
-3664 5147 l
-3505 5147 l
-3504 5147 m
-3663 5147 l
-3663 5148 l
-3504 5148 l
-3503 5148 m
-3662 5148 l
-3662 5149 l
-3503 5149 l
-3502 5149 m
-3661 5149 l
-3661 5150 l
-3502 5150 l
-3501 5150 m
-3661 5150 l
-3661 5151 l
-3501 5151 l
-3500 5151 m
-3660 5151 l
-3660 5152 l
-3500 5152 l
-3500 5152 m
-3659 5152 l
-3659 5153 l
-3500 5153 l
-3499 5153 m
-3658 5153 l
-3658 5154 l
-3499 5154 l
-3498 5154 m
-3657 5154 l
-3657 5155 l
-3498 5155 l
-3497 5155 m
-3656 5155 l
-3656 5156 l
-3497 5156 l
-3496 5156 m
-3656 5156 l
-3656 5157 l
-3496 5157 l
-3495 5157 m
-3655 5157 l
-3655 5158 l
-3495 5158 l
-3495 5158 m
-3654 5158 l
-3654 5159 l
-3495 5159 l
-3494 5159 m
-3653 5159 l
-3653 5160 l
-3494 5160 l
-3493 5160 m
-3652 5160 l
-3652 5161 l
-3493 5161 l
-3492 5161 m
-3651 5161 l
-3651 5162 l
-3492 5162 l
-3491 5162 m
-3651 5162 l
-3651 5163 l
-3491 5163 l
-3490 5163 m
-3650 5163 l
-3650 5164 l
-3490 5164 l
-3490 5164 m
-3649 5164 l
-3649 5165 l
-3490 5165 l
-3489 5165 m
-3648 5165 l
-3648 5166 l
-3489 5166 l
-3488 5166 m
-3647 5166 l
-3647 5167 l
-3488 5167 l
-3487 5167 m
-3647 5167 l
-3647 5168 l
-3487 5168 l
-3486 5168 m
-3646 5168 l
-3646 5169 l
-3486 5169 l
-3485 5169 m
-3645 5169 l
-3645 5170 l
-3485 5170 l
-3485 5170 m
-3644 5170 l
-3644 5171 l
-3485 5171 l
-3484 5171 m
-3643 5171 l
-3643 5172 l
-3484 5172 l
-3483 5172 m
-3642 5172 l
-3642 5173 l
-3483 5173 l
-3482 5173 m
-3642 5173 l
-3642 5174 l
-3482 5174 l
-3481 5174 m
-3641 5174 l
-3641 5175 l
-3481 5175 l
-3480 5175 m
-3640 5175 l
-3640 5176 l
-3480 5176 l
-3480 5176 m
-3639 5176 l
-3639 5177 l
-3480 5177 l
-3479 5177 m
-3638 5177 l
-3638 5178 l
-3479 5178 l
-3478 5178 m
-3637 5178 l
-3637 5179 l
-3478 5179 l
-3477 5179 m
-3637 5179 l
-3637 5180 l
-3477 5180 l
-3476 5180 m
-3636 5180 l
-3636 5181 l
-3476 5181 l
-3475 5181 m
-3635 5181 l
-3635 5182 l
-3475 5182 l
-3475 5182 m
-3634 5182 l
-3634 5183 l
-3475 5183 l
-3474 5183 m
-3633 5183 l
-3633 5184 l
-3474 5184 l
-3473 5184 m
-3632 5184 l
-3632 5185 l
-3473 5185 l
-3472 5185 m
-3632 5185 l
-3632 5186 l
-3472 5186 l
-3471 5186 m
-3631 5186 l
-3631 5187 l
-3471 5187 l
-3470 5187 m
-3630 5187 l
-3630 5188 l
-3470 5188 l
-3470 5188 m
-3629 5188 l
-3629 5189 l
-3470 5189 l
-3469 5189 m
-3628 5189 l
-3628 5190 l
-3469 5190 l
-3468 5190 m
-3627 5190 l
-3627 5191 l
-3468 5191 l
-3467 5191 m
-3627 5191 l
-3627 5192 l
-3467 5192 l
-3466 5192 m
-3626 5192 l
-3626 5193 l
-3466 5193 l
-3466 5193 m
-3625 5193 l
-3625 5194 l
-3466 5194 l
-3466 5194 m
-3624 5194 l
-3624 5195 l
-3466 5195 l
-3467 5195 m
-3623 5195 l
-3623 5196 l
-3467 5196 l
-3468 5196 m
-3622 5196 l
-3622 5197 l
-3468 5197 l
-3469 5197 m
-3622 5197 l
-3622 5198 l
-3469 5198 l
-3470 5198 m
-3621 5198 l
-3621 5199 l
-3470 5199 l
-3471 5199 m
-3620 5199 l
-3620 5200 l
-3471 5200 l
-3473 5200 m
-3619 5200 l
-3619 5201 l
-3473 5201 l
-3474 5201 m
-3618 5201 l
-3618 5202 l
-3474 5202 l
-3475 5202 m
-3618 5202 l
-3618 5203 l
-3475 5203 l
-3476 5203 m
-3617 5203 l
-3617 5204 l
-3476 5204 l
-3477 5204 m
-3616 5204 l
-3616 5205 l
-3477 5205 l
-3479 5205 m
-3615 5205 l
-3615 5206 l
-3479 5206 l
-3480 5206 m
-3614 5206 l
-3614 5207 l
-3480 5207 l
-3481 5207 m
-3613 5207 l
-3613 5208 l
-3481 5208 l
-3482 5208 m
-3613 5208 l
-3613 5209 l
-3482 5209 l
-3483 5209 m
-3612 5209 l
-3612 5210 l
-3483 5210 l
-3485 5210 m
-3611 5210 l
-3611 5211 l
-3485 5211 l
-3486 5211 m
-3610 5211 l
-3610 5212 l
-3486 5212 l
-3487 5212 m
-3609 5212 l
-3609 5213 l
-3487 5213 l
-3488 5213 m
-3608 5213 l
-3608 5214 l
-3488 5214 l
-3489 5214 m
-3608 5214 l
-3608 5215 l
-3489 5215 l
-3491 5215 m
-3607 5215 l
-3607 5216 l
-3491 5216 l
-3492 5216 m
-3606 5216 l
-3606 5217 l
-3492 5217 l
-3493 5217 m
-3605 5217 l
-3605 5218 l
-3493 5218 l
-3494 5218 m
-3604 5218 l
-3604 5219 l
-3494 5219 l
-3495 5219 m
-3603 5219 l
-3603 5220 l
-3495 5220 l
-3496 5220 m
-3603 5220 l
-3603 5221 l
-3496 5221 l
-3498 5221 m
-3602 5221 l
-3602 5222 l
-3498 5222 l
-3499 5222 m
-3601 5222 l
-3601 5223 l
-3499 5223 l
-3500 5223 m
-3600 5223 l
-3600 5224 l
-3500 5224 l
-3501 5224 m
-3599 5224 l
-3599 5225 l
-3501 5225 l
-3502 5225 m
-3598 5225 l
-3598 5226 l
-3502 5226 l
-3504 5226 m
-3598 5226 l
-3598 5227 l
-3504 5227 l
-3505 5227 m
-3597 5227 l
-3597 5228 l
-3505 5228 l
-3506 5228 m
-3596 5228 l
-3596 5229 l
-3506 5229 l
-3507 5229 m
-3595 5229 l
-3595 5230 l
-3507 5230 l
-3508 5230 m
-3594 5230 l
-3594 5231 l
-3508 5231 l
-3510 5231 m
-3593 5231 l
-3593 5232 l
-3510 5232 l
-3511 5232 m
-3593 5232 l
-3593 5233 l
-3511 5233 l
-3512 5233 m
-3592 5233 l
-3592 5234 l
-3512 5234 l
-3513 5234 m
-3591 5234 l
-3591 5235 l
-3513 5235 l
-3514 5235 m
-3590 5235 l
-3590 5236 l
-3514 5236 l
-3516 5236 m
-3589 5236 l
-3589 5237 l
-3516 5237 l
-3517 5237 m
-3589 5237 l
-3589 5238 l
-3517 5238 l
-3518 5238 m
-3588 5238 l
-3588 5239 l
-3518 5239 l
-3519 5239 m
-3587 5239 l
-3587 5240 l
-3519 5240 l
-3520 5240 m
-3586 5240 l
-3586 5241 l
-3520 5241 l
-3522 5241 m
-3585 5241 l
-3585 5242 l
-3522 5242 l
-3523 5242 m
-3584 5242 l
-3584 5243 l
-3523 5243 l
-3524 5243 m
-3584 5243 l
-3584 5244 l
-3524 5244 l
-3525 5244 m
-3583 5244 l
-3583 5245 l
-3525 5245 l
-3526 5245 m
-3582 5245 l
-3582 5246 l
-3526 5246 l
-3527 5246 m
-3581 5246 l
-3581 5247 l
-3527 5247 l
-3529 5247 m
-3580 5247 l
-3580 5248 l
-3529 5248 l
-3530 5248 m
-3579 5248 l
-3579 5249 l
-3530 5249 l
-3531 5249 m
-3579 5249 l
-3579 5250 l
-3531 5250 l
-3532 5250 m
-3578 5250 l
-3578 5251 l
-3532 5251 l
-3533 5251 m
-3577 5251 l
-3577 5252 l
-3533 5252 l
-3535 5252 m
-3576 5252 l
-3576 5253 l
-3535 5253 l
-3536 5253 m
-3575 5253 l
-3575 5254 l
-3536 5254 l
-3537 5254 m
-3574 5254 l
-3574 5255 l
-3537 5255 l
-3538 5255 m
-3574 5255 l
-3574 5256 l
-3538 5256 l
-3539 5256 m
-3573 5256 l
-3573 5257 l
-3539 5257 l
-3541 5257 m
-3572 5257 l
-3572 5258 l
-3541 5258 l
-3542 5258 m
-3571 5258 l
-3571 5259 l
-3542 5259 l
-3543 5259 m
-3570 5259 l
-3570 5260 l
-3543 5260 l
-3544 5260 m
-3569 5260 l
-3569 5261 l
-3544 5261 l
-3545 5261 m
-3569 5261 l
-3569 5262 l
-3545 5262 l
-3547 5262 m
-3568 5262 l
-3568 5263 l
-3547 5263 l
-3548 5263 m
-3567 5263 l
-3567 5264 l
-3548 5264 l
-3549 5264 m
-3566 5264 l
-3566 5265 l
-3549 5265 l
-3550 5265 m
-3565 5265 l
-3565 5266 l
-3550 5266 l
-3551 5266 m
-3564 5266 l
-3564 5267 l
-3551 5267 l
-3553 5267 m
-3564 5267 l
-3564 5268 l
-3553 5268 l
-3554 5268 m
-3563 5268 l
-3563 5269 l
-3554 5269 l
-3555 5269 m
-3562 5269 l
-3562 5270 l
-3555 5270 l
-3556 5270 m
-3561 5270 l
-3561 5271 l
-3556 5271 l
-3557 5271 m
-3560 5271 l
-3560 5272 l
-3557 5272 l
-Y
-3676.6 5130.1 m
-3583 5053 l
-3466 5194 l
-3559 5272 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-3578 5086 m
-3548 5121 l
-3590 5123 l
-3582 5133 l
-3580 5142 l
-3580 5148 l
-3587 5159 l
-3594 5165 l
-3606 5169 l
-3618 5168 l
-3629 5161 l
-3637 5152 l
-3642 5139 l
-3641 5133 l
-3638 5125 l
-S
-3514 5163 m
-3525 5156 l
-3540 5158 l
-3559 5168 l
-3568 5176 l
-3582 5192 l
-3586 5207 l
-3581 5219 l
-3576 5226 l
-3565 5233 l
-3550 5231 l
-3531 5221 l
-3521 5213 l
-3508 5196 l
-3504 5182 l
-3508 5170 l
-3514 5163 l
-S
-1 g
-2996 5490 m
-3001 5490 l
-3001 5491 l
-2996 5491 l
-2992 5491 m
-3001 5491 l
-3001 5492 l
-2992 5492 l
-2989 5492 m
-3001 5492 l
-3001 5493 l
-2989 5493 l
-2985 5493 m
-3002 5493 l
-3002 5494 l
-2985 5494 l
-2982 5494 m
-3002 5494 l
-3002 5495 l
-2982 5495 l
-2978 5495 m
-3002 5495 l
-3002 5496 l
-2978 5496 l
-2975 5496 m
-3002 5496 l
-3002 5497 l
-2975 5497 l
-2971 5497 m
-3003 5497 l
-3003 5498 l
-2971 5498 l
-2968 5498 m
-3003 5498 l
-3003 5499 l
-2968 5499 l
-2964 5499 m
-3003 5499 l
-3003 5500 l
-2964 5500 l
-2961 5500 m
-3004 5500 l
-3004 5501 l
-2961 5501 l
-2957 5501 m
-3004 5501 l
-3004 5502 l
-2957 5502 l
-2954 5502 m
-3004 5502 l
-3004 5503 l
-2954 5503 l
-2950 5503 m
-3004 5503 l
-3004 5504 l
-2950 5504 l
-2947 5504 m
-3005 5504 l
-3005 5505 l
-2947 5505 l
-2943 5505 m
-3005 5505 l
-3005 5506 l
-2943 5506 l
-2939 5506 m
-3005 5506 l
-3005 5507 l
-2939 5507 l
-2936 5507 m
-3006 5507 l
-3006 5508 l
-2936 5508 l
-2932 5508 m
-3006 5508 l
-3006 5509 l
-2932 5509 l
-2929 5509 m
-3006 5509 l
-3006 5510 l
-2929 5510 l
-2925 5510 m
-3006 5510 l
-3006 5511 l
-2925 5511 l
-2922 5511 m
-3007 5511 l
-3007 5512 l
-2922 5512 l
-2918 5512 m
-3007 5512 l
-3007 5513 l
-2918 5513 l
-2915 5513 m
-3007 5513 l
-3007 5514 l
-2915 5514 l
-2911 5514 m
-3008 5514 l
-3008 5515 l
-2911 5515 l
-2908 5515 m
-3008 5515 l
-3008 5516 l
-2908 5516 l
-2904 5516 m
-3008 5516 l
-3008 5517 l
-2904 5517 l
-2901 5517 m
-3008 5517 l
-3008 5518 l
-2901 5518 l
-2897 5518 m
-3009 5518 l
-3009 5519 l
-2897 5519 l
-2894 5519 m
-3009 5519 l
-3009 5520 l
-2894 5520 l
-2890 5520 m
-3009 5520 l
-3009 5521 l
-2890 5521 l
-2887 5521 m
-3010 5521 l
-3010 5522 l
-2887 5522 l
-2883 5522 m
-3010 5522 l
-3010 5523 l
-2883 5523 l
-2879 5523 m
-3010 5523 l
-3010 5524 l
-2879 5524 l
-2876 5524 m
-3010 5524 l
-3010 5525 l
-2876 5525 l
-2872 5525 m
-3011 5525 l
-3011 5526 l
-2872 5526 l
-2869 5526 m
-3011 5526 l
-3011 5527 l
-2869 5527 l
-2865 5527 m
-3011 5527 l
-3011 5528 l
-2865 5528 l
-2862 5528 m
-3012 5528 l
-3012 5529 l
-2862 5529 l
-2858 5529 m
-3012 5529 l
-3012 5530 l
-2858 5530 l
-2855 5530 m
-3012 5530 l
-3012 5531 l
-2855 5531 l
-2851 5531 m
-3012 5531 l
-3012 5532 l
-2851 5532 l
-2848 5532 m
-3013 5532 l
-3013 5533 l
-2848 5533 l
-2844 5533 m
-3013 5533 l
-3013 5534 l
-2844 5534 l
-2841 5534 m
-3013 5534 l
-3013 5535 l
-2841 5535 l
-2837 5535 m
-3014 5535 l
-3014 5536 l
-2837 5536 l
-2834 5536 m
-3014 5536 l
-3014 5537 l
-2834 5537 l
-2830 5537 m
-3014 5537 l
-3014 5538 l
-2830 5538 l
-2827 5538 m
-3014 5538 l
-3014 5539 l
-2827 5539 l
-2827 5539 m
-3015 5539 l
-3015 5540 l
-2827 5540 l
-2827 5540 m
-3015 5540 l
-3015 5542 l
-2827 5542 l
-2827 5542 m
-3016 5542 l
-3016 5543 l
-2827 5543 l
-2828 5543 m
-3016 5543 l
-3016 5546 l
-2828 5546 l
-2828 5546 m
-3017 5546 l
-3017 5547 l
-2828 5547 l
-2829 5547 m
-3017 5547 l
-3017 5549 l
-2829 5549 l
-2829 5549 m
-3018 5549 l
-3018 5550 l
-2829 5550 l
-2830 5550 m
-3018 5550 l
-3018 5553 l
-2830 5553 l
-2830 5553 m
-3019 5553 l
-3019 5554 l
-2830 5554 l
-2831 5554 m
-3019 5554 l
-3019 5556 l
-2831 5556 l
-2831 5556 m
-3020 5556 l
-3020 5557 l
-2831 5557 l
-2832 5557 m
-3020 5557 l
-3020 5560 l
-2832 5560 l
-2832 5560 m
-3021 5560 l
-3021 5561 l
-2832 5561 l
-2833 5561 m
-3021 5561 l
-3021 5563 l
-2833 5563 l
-2833 5563 m
-3022 5563 l
-3022 5564 l
-2833 5564 l
-2834 5564 m
-3022 5564 l
-3022 5567 l
-2834 5567 l
-2834 5567 m
-3023 5567 l
-3023 5568 l
-2834 5568 l
-2835 5568 m
-3023 5568 l
-3023 5570 l
-2835 5570 l
-2835 5570 m
-3024 5570 l
-3024 5571 l
-2835 5571 l
-2836 5571 m
-3024 5571 l
-3024 5574 l
-2836 5574 l
-2836 5574 m
-3025 5574 l
-3025 5575 l
-2836 5575 l
-2837 5575 m
-3025 5575 l
-3025 5577 l
-2837 5577 l
-2837 5577 m
-3026 5577 l
-3026 5578 l
-2837 5578 l
-2838 5578 m
-3026 5578 l
-3026 5581 l
-2838 5581 l
-2838 5581 m
-3027 5581 l
-3027 5582 l
-2838 5582 l
-2839 5582 m
-3027 5582 l
-3027 5584 l
-2839 5584 l
-2839 5584 m
-3028 5584 l
-3028 5585 l
-2839 5585 l
-2840 5585 m
-3028 5585 l
-3028 5588 l
-2840 5588 l
-2840 5588 m
-3029 5588 l
-3029 5589 l
-2840 5589 l
-2841 5589 m
-3029 5589 l
-3029 5591 l
-2841 5591 l
-2841 5591 m
-3030 5591 l
-3030 5592 l
-2841 5592 l
-2842 5592 m
-3030 5592 l
-3030 5595 l
-2842 5595 l
-2842 5595 m
-3031 5595 l
-3031 5596 l
-2842 5596 l
-2843 5596 m
-3031 5596 l
-3031 5598 l
-2843 5598 l
-2843 5598 m
-3032 5598 l
-3032 5599 l
-2843 5599 l
-2844 5599 m
-3032 5599 l
-3032 5602 l
-2844 5602 l
-2844 5602 m
-3033 5602 l
-3033 5603 l
-2844 5603 l
-2845 5603 m
-3033 5603 l
-3033 5605 l
-2845 5605 l
-2845 5605 m
-3034 5605 l
-3034 5606 l
-2845 5606 l
-2846 5606 m
-3034 5606 l
-3034 5607 l
-2846 5607 l
-2846 5607 m
-3030 5607 l
-3030 5608 l
-2846 5608 l
-2846 5608 m
-3027 5608 l
-3027 5609 l
-2846 5609 l
-2846 5609 m
-3023 5609 l
-3023 5610 l
-2846 5610 l
-2847 5610 m
-3020 5610 l
-3020 5611 l
-2847 5611 l
-2847 5611 m
-3016 5611 l
-3016 5612 l
-2847 5612 l
-2847 5612 m
-3013 5612 l
-3013 5613 l
-2847 5613 l
-2848 5613 m
-3009 5613 l
-3009 5614 l
-2848 5614 l
-2848 5614 m
-3006 5614 l
-3006 5615 l
-2848 5615 l
-2848 5615 m
-3002 5615 l
-3002 5616 l
-2848 5616 l
-2848 5616 m
-2999 5616 l
-2999 5617 l
-2848 5617 l
-2849 5617 m
-2995 5617 l
-2995 5618 l
-2849 5618 l
-2849 5618 m
-2991 5618 l
-2991 5619 l
-2849 5619 l
-2849 5619 m
-2988 5619 l
-2988 5620 l
-2849 5620 l
-2850 5620 m
-2984 5620 l
-2984 5621 l
-2850 5621 l
-2850 5621 m
-2981 5621 l
-2981 5622 l
-2850 5622 l
-2850 5622 m
-2977 5622 l
-2977 5623 l
-2850 5623 l
-2850 5623 m
-2974 5623 l
-2974 5624 l
-2850 5624 l
-2851 5624 m
-2970 5624 l
-2970 5625 l
-2851 5625 l
-2851 5625 m
-2967 5625 l
-2967 5626 l
-2851 5626 l
-2851 5626 m
-2963 5626 l
-2963 5627 l
-2851 5627 l
-2852 5627 m
-2960 5627 l
-2960 5628 l
-2852 5628 l
-2852 5628 m
-2956 5628 l
-2956 5629 l
-2852 5629 l
-2852 5629 m
-2953 5629 l
-2953 5630 l
-2852 5630 l
-2852 5630 m
-2949 5630 l
-2949 5631 l
-2852 5631 l
-2853 5631 m
-2945 5631 l
-2945 5632 l
-2853 5632 l
-2853 5632 m
-2942 5632 l
-2942 5633 l
-2853 5633 l
-2853 5633 m
-2938 5633 l
-2938 5634 l
-2853 5634 l
-2854 5634 m
-2935 5634 l
-2935 5635 l
-2854 5635 l
-2854 5635 m
-2931 5635 l
-2931 5636 l
-2854 5636 l
-2854 5636 m
-2928 5636 l
-2928 5637 l
-2854 5637 l
-2854 5637 m
-2924 5637 l
-2924 5638 l
-2854 5638 l
-2855 5638 m
-2921 5638 l
-2921 5639 l
-2855 5639 l
-2855 5639 m
-2917 5639 l
-2917 5640 l
-2855 5640 l
-2855 5640 m
-2914 5640 l
-2914 5641 l
-2855 5641 l
-2856 5641 m
-2910 5641 l
-2910 5642 l
-2856 5642 l
-2856 5642 m
-2907 5642 l
-2907 5643 l
-2856 5643 l
-2856 5643 m
-2903 5643 l
-2903 5644 l
-2856 5644 l
-2856 5644 m
-2899 5644 l
-2899 5645 l
-2856 5645 l
-2857 5645 m
-2896 5645 l
-2896 5646 l
-2857 5646 l
-2857 5646 m
-2892 5646 l
-2892 5647 l
-2857 5647 l
-2857 5647 m
-2889 5647 l
-2889 5648 l
-2857 5648 l
-2858 5648 m
-2885 5648 l
-2885 5649 l
-2858 5649 l
-2858 5649 m
-2882 5649 l
-2882 5650 l
-2858 5650 l
-2858 5650 m
-2878 5650 l
-2878 5651 l
-2858 5651 l
-2858 5651 m
-2875 5651 l
-2875 5652 l
-2858 5652 l
-2859 5652 m
-2871 5652 l
-2871 5653 l
-2859 5653 l
-2859 5653 m
-2868 5653 l
-2868 5654 l
-2859 5654 l
-2859 5654 m
-2864 5654 l
-2864 5655 l
-2859 5655 l
-Y
-3033.1 5606.1 m
-3000 5490 l
-2827 5539 l
-2860 5655 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-2940 5537 m
-2941 5528 l
-2952 5521 l
-2960 5518 l
-2973 5519 l
-2985 5529 l
-2995 5548 l
-3000 5568 l
-3001 5585 l
-2995 5595 l
-2984 5603 l
-2980 5604 l
-2967 5603 l
-2957 5597 l
-2949 5586 l
-2948 5582 l
-2949 5569 l
-2955 5559 l
-2965 5551 l
-2969 5550 l
-2983 5551 l
-2993 5557 l
-3000 5568 l
-S
-2884 5540 m
-2897 5541 l
-2909 5550 l
-2918 5569 l
-2922 5581 l
-2923 5603 l
-2919 5617 l
-2908 5624 l
-2900 5627 l
-2887 5626 l
-2875 5616 l
-2866 5597 l
-2862 5585 l
-2860 5564 l
-2865 5550 l
-2876 5542 l
-2884 5540 l
-S
-1 g
-1950 5410 m
-1955 5410 l
-1955 5411 l
-1950 5411 l
-1949 5411 m
-1957 5411 l
-1957 5412 l
-1949 5412 l
-1949 5412 m
-1960 5412 l
-1960 5413 l
-1949 5413 l
-1948 5413 m
-1962 5413 l
-1962 5414 l
-1948 5414 l
-1948 5414 m
-1965 5414 l
-1965 5415 l
-1948 5415 l
-1948 5415 m
-1967 5415 l
-1967 5416 l
-1948 5416 l
-1947 5416 m
-1970 5416 l
-1970 5417 l
-1947 5417 l
-1947 5417 m
-1972 5417 l
-1972 5418 l
-1947 5418 l
-1946 5418 m
-1975 5418 l
-1975 5419 l
-1946 5419 l
-1946 5419 m
-1977 5419 l
-1977 5420 l
-1946 5420 l
-1946 5420 m
-1980 5420 l
-1980 5421 l
-1946 5421 l
-1945 5421 m
-1982 5421 l
-1982 5422 l
-1945 5422 l
-1945 5422 m
-1985 5422 l
-1985 5423 l
-1945 5423 l
-1944 5423 m
-1987 5423 l
-1987 5424 l
-1944 5424 l
-1944 5424 m
-1990 5424 l
-1990 5425 l
-1944 5425 l
-1944 5425 m
-1992 5425 l
-1992 5426 l
-1944 5426 l
-1943 5426 m
-1995 5426 l
-1995 5427 l
-1943 5427 l
-1943 5427 m
-1997 5427 l
-1997 5428 l
-1943 5428 l
-1942 5428 m
-2000 5428 l
-2000 5429 l
-1942 5429 l
-1942 5429 m
-2002 5429 l
-2002 5430 l
-1942 5430 l
-1942 5430 m
-2004 5430 l
-2004 5431 l
-1942 5431 l
-1941 5431 m
-2007 5431 l
-2007 5432 l
-1941 5432 l
-1941 5432 m
-2009 5432 l
-2009 5433 l
-1941 5433 l
-1940 5433 m
-2012 5433 l
-2012 5434 l
-1940 5434 l
-1940 5434 m
-2014 5434 l
-2014 5435 l
-1940 5435 l
-1940 5435 m
-2017 5435 l
-2017 5436 l
-1940 5436 l
-1939 5436 m
-2019 5436 l
-2019 5437 l
-1939 5437 l
-1939 5437 m
-2022 5437 l
-2022 5438 l
-1939 5438 l
-1939 5438 m
-2024 5438 l
-2024 5439 l
-1939 5439 l
-1938 5439 m
-2027 5439 l
-2027 5440 l
-1938 5440 l
-1938 5440 m
-2029 5440 l
-2029 5441 l
-1938 5441 l
-1937 5441 m
-2032 5441 l
-2032 5442 l
-1937 5442 l
-1937 5442 m
-2034 5442 l
-2034 5443 l
-1937 5443 l
-1937 5443 m
-2037 5443 l
-2037 5444 l
-1937 5444 l
-1936 5444 m
-2039 5444 l
-2039 5445 l
-1936 5445 l
-1936 5445 m
-2042 5445 l
-2042 5446 l
-1936 5446 l
-1935 5446 m
-2044 5446 l
-2044 5447 l
-1935 5447 l
-1935 5447 m
-2047 5447 l
-2047 5448 l
-1935 5448 l
-1935 5448 m
-2049 5448 l
-2049 5449 l
-1935 5449 l
-1934 5449 m
-2052 5449 l
-2052 5450 l
-1934 5450 l
-1934 5450 m
-2054 5450 l
-2054 5451 l
-1934 5451 l
-1933 5451 m
-2057 5451 l
-2057 5452 l
-1933 5452 l
-1933 5452 m
-2059 5452 l
-2059 5453 l
-1933 5453 l
-1933 5453 m
-2062 5453 l
-2062 5454 l
-1933 5454 l
-1932 5454 m
-2064 5454 l
-2064 5455 l
-1932 5455 l
-1932 5455 m
-2067 5455 l
-2067 5456 l
-1932 5456 l
-1931 5456 m
-2069 5456 l
-2069 5457 l
-1931 5457 l
-1931 5457 m
-2072 5457 l
-2072 5458 l
-1931 5458 l
-1931 5458 m
-2074 5458 l
-2074 5459 l
-1931 5459 l
-1930 5459 m
-2077 5459 l
-2077 5460 l
-1930 5460 l
-1930 5460 m
-2079 5460 l
-2079 5461 l
-1930 5461 l
-1929 5461 m
-2082 5461 l
-2082 5462 l
-1929 5462 l
-1929 5462 m
-2084 5462 l
-2084 5463 l
-1929 5463 l
-1929 5463 m
-2087 5463 l
-2087 5464 l
-1929 5464 l
-1928 5464 m
-2089 5464 l
-2089 5465 l
-1928 5465 l
-1928 5465 m
-2092 5465 l
-2092 5466 l
-1928 5466 l
-1927 5466 m
-2094 5466 l
-2094 5467 l
-1927 5467 l
-1927 5467 m
-2097 5467 l
-2097 5468 l
-1927 5468 l
-1927 5468 m
-2099 5468 l
-2099 5469 l
-1927 5469 l
-1926 5469 m
-2102 5469 l
-2102 5470 l
-1926 5470 l
-1926 5470 m
-2104 5470 l
-2104 5471 l
-1926 5471 l
-1925 5471 m
-2107 5471 l
-2107 5472 l
-1925 5472 l
-1925 5472 m
-2109 5472 l
-2109 5473 l
-1925 5473 l
-1925 5473 m
-2112 5473 l
-2112 5474 l
-1925 5474 l
-1924 5474 m
-2114 5474 l
-2114 5475 l
-1924 5475 l
-1924 5475 m
-2117 5475 l
-2117 5476 l
-1924 5476 l
-1923 5476 m
-2119 5476 l
-2119 5477 l
-1923 5477 l
-1923 5477 m
-2122 5477 l
-2122 5478 l
-1923 5478 l
-1923 5478 m
-2121 5478 l
-2121 5479 l
-1923 5479 l
-1922 5479 m
-2121 5479 l
-2121 5481 l
-1922 5481 l
-1921 5481 m
-2120 5481 l
-2120 5483 l
-1921 5483 l
-1921 5483 m
-2119 5483 l
-2119 5484 l
-1921 5484 l
-1920 5484 m
-2119 5484 l
-2119 5486 l
-1920 5486 l
-1919 5486 m
-2118 5486 l
-2118 5488 l
-1919 5488 l
-1919 5488 m
-2117 5488 l
-2117 5489 l
-1919 5489 l
-1918 5489 m
-2117 5489 l
-2117 5491 l
-1918 5491 l
-1917 5491 m
-2116 5491 l
-2116 5493 l
-1917 5493 l
-1917 5493 m
-2115 5493 l
-2115 5494 l
-1917 5494 l
-1916 5494 m
-2115 5494 l
-2115 5496 l
-1916 5496 l
-1915 5496 m
-2114 5496 l
-2114 5498 l
-1915 5498 l
-1915 5498 m
-2113 5498 l
-2113 5499 l
-1915 5499 l
-1914 5499 m
-2113 5499 l
-2113 5501 l
-1914 5501 l
-1913 5501 m
-2112 5501 l
-2112 5503 l
-1913 5503 l
-1913 5503 m
-2111 5503 l
-2111 5504 l
-1913 5504 l
-1912 5504 m
-2111 5504 l
-2111 5506 l
-1912 5506 l
-1911 5506 m
-2110 5506 l
-2110 5508 l
-1911 5508 l
-1911 5508 m
-2109 5508 l
-2109 5509 l
-1911 5509 l
-1910 5509 m
-2109 5509 l
-2109 5511 l
-1910 5511 l
-1909 5511 m
-2108 5511 l
-2108 5513 l
-1909 5513 l
-1909 5513 m
-2107 5513 l
-2107 5514 l
-1909 5514 l
-1908 5514 m
-2107 5514 l
-2107 5516 l
-1908 5516 l
-1907 5516 m
-2106 5516 l
-2106 5518 l
-1907 5518 l
-1907 5518 m
-2105 5518 l
-2105 5519 l
-1907 5519 l
-1906 5519 m
-2105 5519 l
-2105 5521 l
-1906 5521 l
-1906 5521 m
-2104 5521 l
-2104 5522 l
-1906 5522 l
-1906 5522 m
-2104 5522 l
-2104 5523 l
-1906 5523 l
-1908 5523 m
-2103 5523 l
-2103 5524 l
-1908 5524 l
-1911 5524 m
-2103 5524 l
-2103 5525 l
-1911 5525 l
-1913 5525 m
-2103 5525 l
-2103 5526 l
-1913 5526 l
-1916 5526 m
-2102 5526 l
-2102 5527 l
-1916 5527 l
-1918 5527 m
-2102 5527 l
-2102 5528 l
-1918 5528 l
-1921 5528 m
-2101 5528 l
-2101 5529 l
-1921 5529 l
-1923 5529 m
-2101 5529 l
-2101 5530 l
-1923 5530 l
-1926 5530 m
-2101 5530 l
-2101 5531 l
-1926 5531 l
-1928 5531 m
-2100 5531 l
-2100 5532 l
-1928 5532 l
-1931 5532 m
-2100 5532 l
-2100 5533 l
-1931 5533 l
-1933 5533 m
-2099 5533 l
-2099 5534 l
-1933 5534 l
-1936 5534 m
-2099 5534 l
-2099 5535 l
-1936 5535 l
-1938 5535 m
-2099 5535 l
-2099 5536 l
-1938 5536 l
-1941 5536 m
-2098 5536 l
-2098 5537 l
-1941 5537 l
-1943 5537 m
-2098 5537 l
-2098 5538 l
-1943 5538 l
-1946 5538 m
-2097 5538 l
-2097 5539 l
-1946 5539 l
-1948 5539 m
-2097 5539 l
-2097 5540 l
-1948 5540 l
-1951 5540 m
-2097 5540 l
-2097 5541 l
-1951 5541 l
-1953 5541 m
-2096 5541 l
-2096 5542 l
-1953 5542 l
-1956 5542 m
-2096 5542 l
-2096 5543 l
-1956 5543 l
-1958 5543 m
-2095 5543 l
-2095 5544 l
-1958 5544 l
-1961 5544 m
-2095 5544 l
-2095 5545 l
-1961 5545 l
-1963 5545 m
-2095 5545 l
-2095 5546 l
-1963 5546 l
-1966 5546 m
-2094 5546 l
-2094 5547 l
-1966 5547 l
-1968 5547 m
-2094 5547 l
-2094 5548 l
-1968 5548 l
-1971 5548 m
-2093 5548 l
-2093 5549 l
-1971 5549 l
-1973 5549 m
-2093 5549 l
-2093 5550 l
-1973 5550 l
-1976 5550 m
-2093 5550 l
-2093 5551 l
-1976 5551 l
-1978 5551 m
-2092 5551 l
-2092 5552 l
-1978 5552 l
-1981 5552 m
-2092 5552 l
-2092 5553 l
-1981 5553 l
-1983 5553 m
-2091 5553 l
-2091 5554 l
-1983 5554 l
-1986 5554 m
-2091 5554 l
-2091 5555 l
-1986 5555 l
-1988 5555 m
-2091 5555 l
-2091 5556 l
-1988 5556 l
-1991 5556 m
-2090 5556 l
-2090 5557 l
-1991 5557 l
-1993 5557 m
-2090 5557 l
-2090 5558 l
-1993 5558 l
-1996 5558 m
-2089 5558 l
-2089 5559 l
-1996 5559 l
-1998 5559 m
-2089 5559 l
-2089 5560 l
-1998 5560 l
-2001 5560 m
-2089 5560 l
-2089 5561 l
-2001 5561 l
-2003 5561 m
-2088 5561 l
-2088 5562 l
-2003 5562 l
-2006 5562 m
-2088 5562 l
-2088 5563 l
-2006 5563 l
-2008 5563 m
-2087 5563 l
-2087 5564 l
-2008 5564 l
-2011 5564 m
-2087 5564 l
-2087 5565 l
-2011 5565 l
-2013 5565 m
-2087 5565 l
-2087 5566 l
-2013 5566 l
-2016 5566 m
-2086 5566 l
-2086 5567 l
-2016 5567 l
-2018 5567 m
-2086 5567 l
-2086 5568 l
-2018 5568 l
-2021 5568 m
-2085 5568 l
-2085 5569 l
-2021 5569 l
-2023 5569 m
-2085 5569 l
-2085 5570 l
-2023 5570 l
-2026 5570 m
-2085 5570 l
-2085 5571 l
-2026 5571 l
-2028 5571 m
-2084 5571 l
-2084 5572 l
-2028 5572 l
-2031 5572 m
-2084 5572 l
-2084 5573 l
-2031 5573 l
-2033 5573 m
-2083 5573 l
-2083 5574 l
-2033 5574 l
-2036 5574 m
-2083 5574 l
-2083 5575 l
-2036 5575 l
-2038 5575 m
-2083 5575 l
-2083 5576 l
-2038 5576 l
-2041 5576 m
-2082 5576 l
-2082 5577 l
-2041 5577 l
-2043 5577 m
-2082 5577 l
-2082 5578 l
-2043 5578 l
-2046 5578 m
-2081 5578 l
-2081 5579 l
-2046 5579 l
-2048 5579 m
-2081 5579 l
-2081 5580 l
-2048 5580 l
-2051 5580 m
-2081 5580 l
-2081 5581 l
-2051 5581 l
-2053 5581 m
-2080 5581 l
-2080 5582 l
-2053 5582 l
-2056 5582 m
-2080 5582 l
-2080 5583 l
-2056 5583 l
-2058 5583 m
-2079 5583 l
-2079 5584 l
-2058 5584 l
-2061 5584 m
-2079 5584 l
-2079 5585 l
-2061 5585 l
-2063 5585 m
-2079 5585 l
-2079 5586 l
-2063 5586 l
-2066 5586 m
-2078 5586 l
-2078 5587 l
-2066 5587 l
-2068 5587 m
-2078 5587 l
-2078 5588 l
-2068 5588 l
-2071 5588 m
-2077 5588 l
-2077 5589 l
-2071 5589 l
-2073 5589 m
-2077 5589 l
-2077 5590 l
-2073 5590 l
-Y
-1950.7 5409.6 m
-1906 5522 l
-2076 5590 l
-2121 5478 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-1993 5507 m
-1993 5494 l
-1989 5483 l
-1979 5475 l
-1975 5473 l
-1962 5472 l
-1951 5477 l
-1942 5487 l
-1941 5491 l
-1940 5504 l
-1944 5515 l
-1955 5524 l
-1958 5525 l
-1972 5526 l
-1982 5521 l
-1993 5507 l
-2000 5488 l
-2004 5467 l
-2001 5452 l
-1991 5444 l
-1983 5441 l
-1970 5440 l
-1963 5446 l
-S
-2032 5555 m
-2022 5546 l
-2019 5531 l
-2023 5510 l
-2027 5499 l
-2039 5481 l
-2052 5472 l
-2065 5473 l
-2072 5476 l
-2083 5485 l
-2086 5500 l
-2082 5521 l
-2077 5532 l
-2065 5550 l
-2053 5559 l
-2040 5558 l
-2032 5555 l
-S
-1 g
-Y
-467.2 2211.2 m
-282 2211 l
-282 5715 l
-467 5715 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-307 2236 m
-412 2236 l
-S
-307 2236 m
-307 2301 l
-S
-357 2236 m
-357 2276 l
-S
-412 2236 m
-412 2301 l
-S
-357 2387 m
-347 2377 l
-342 2367 l
-342 2352 l
-347 2341 l
-357 2331 l
-372 2326 l
-382 2326 l
-397 2331 l
-407 2341 l
-412 2352 l
-412 2367 l
-407 2377 l
-397 2387 l
-S
-307 2422 m
-412 2422 l
-S
-307 2457 m
-312 2462 l
-307 2467 l
-302 2462 l
-307 2457 l
-S
-342 2462 m
-412 2462 l
-S
-342 2502 m
-447 2502 l
-S
-357 2502 m
-347 2512 l
-342 2522 l
-342 2537 l
-347 2547 l
-357 2557 l
-372 2562 l
-382 2562 l
-397 2557 l
-407 2547 l
-412 2537 l
-412 2522 l
-407 2512 l
-397 2502 l
-S
-307 2602 m
-392 2602 l
-407 2607 l
-412 2617 l
-412 2627 l
-S
-342 2587 m
-342 2622 l
-S
-307 2652 m
-312 2657 l
-307 2662 l
-302 2657 l
-307 2652 l
-S
-342 2657 m
-412 2657 l
-S
-357 2752 m
-347 2742 l
-342 2732 l
-342 2717 l
-347 2707 l
-357 2697 l
-372 2692 l
-382 2692 l
-397 2697 l
-407 2707 l
-412 2717 l
-412 2732 l
-407 2742 l
-397 2752 l
-S
-357 2923 m
-347 2913 l
-342 2903 l
-342 2888 l
-347 2878 l
-357 2868 l
-372 2863 l
-382 2863 l
-397 2868 l
-407 2878 l
-412 2888 l
-412 2903 l
-407 2913 l
-397 2923 l
-S
-342 2978 m
-347 2968 l
-357 2958 l
-372 2953 l
-382 2953 l
-397 2958 l
-407 2968 l
-412 2978 l
-412 2993 l
-407 3003 l
-397 3013 l
-382 3018 l
-372 3018 l
-357 3013 l
-347 3003 l
-342 2993 l
-342 2978 l
-S
-342 3073 m
-347 3063 l
-357 3053 l
-372 3048 l
-382 3048 l
-397 3053 l
-407 3063 l
-412 3073 l
-412 3088 l
-407 3098 l
-397 3108 l
-382 3113 l
-372 3113 l
-357 3108 l
-347 3098 l
-342 3088 l
-342 3073 l
-S
-342 3148 m
-412 3148 l
-S
-372 3148 m
-357 3153 l
-347 3163 l
-342 3174 l
-342 3189 l
-S
-307 3269 m
-412 3269 l
-S
-357 3269 m
-347 3259 l
-342 3249 l
-342 3234 l
-347 3224 l
-357 3214 l
-372 3209 l
-382 3209 l
-397 3214 l
-407 3224 l
-412 3234 l
-412 3249 l
-407 3259 l
-397 3269 l
-S
-307 3304 m
-312 3309 l
-307 3314 l
-302 3309 l
-307 3304 l
-S
-342 3309 m
-412 3309 l
-S
-342 3349 m
-412 3349 l
-S
-362 3349 m
-347 3364 l
-342 3374 l
-342 3389 l
-347 3399 l
-362 3404 l
-412 3404 l
-S
-342 3499 m
-412 3499 l
-S
-357 3499 m
-347 3489 l
-342 3479 l
-342 3464 l
-347 3454 l
-357 3444 l
-372 3439 l
-382 3439 l
-397 3444 l
-407 3454 l
-412 3464 l
-412 3479 l
-407 3489 l
-397 3499 l
-S
-307 3544 m
-392 3544 l
-407 3549 l
-412 3559 l
-412 3569 l
-S
-342 3529 m
-342 3564 l
-S
-372 3595 m
-372 3655 l
-362 3655 l
-352 3650 l
-347 3645 l
-342 3635 l
-342 3620 l
-347 3610 l
-357 3600 l
-372 3595 l
-382 3595 l
-397 3600 l
-407 3610 l
-412 3620 l
-412 3635 l
-407 3645 l
-397 3655 l
-S
-357 3740 m
-347 3735 l
-342 3720 l
-342 3705 l
-347 3690 l
-357 3685 l
-367 3690 l
-372 3700 l
-377 3725 l
-382 3735 l
-392 3740 l
-397 3740 l
-407 3735 l
-412 3720 l
-412 3705 l
-407 3690 l
-397 3685 l
-S
-342 3780 m
-347 3775 l
-352 3780 l
-347 3785 l
-342 3780 l
-S
-407 3785 m
-412 3780 l
-407 3775 l
-402 3780 l
-407 3785 l
-417 3785 l
-427 3780 l
-432 3775 l
-S
-342 3905 m
-412 3905 l
-S
-362 3905 m
-347 3920 l
-342 3930 l
-342 3945 l
-347 3955 l
-362 3960 l
-412 3960 l
-S
-362 3960 m
-347 3975 l
-342 3985 l
-342 4000 l
-347 4011 l
-362 4016 l
-412 4016 l
-S
-372 4051 m
-372 4111 l
-362 4111 l
-352 4106 l
-347 4101 l
-342 4091 l
-342 4076 l
-347 4066 l
-357 4056 l
-372 4051 l
-382 4051 l
-397 4056 l
-407 4066 l
-412 4076 l
-412 4091 l
-407 4101 l
-397 4111 l
-S
-342 4201 m
-412 4201 l
-S
-357 4201 m
-347 4191 l
-342 4181 l
-342 4166 l
-347 4156 l
-357 4146 l
-372 4141 l
-382 4141 l
-397 4146 l
-407 4156 l
-412 4166 l
-412 4181 l
-407 4191 l
-397 4201 l
-S
-342 4241 m
-412 4241 l
-S
-362 4241 m
-347 4256 l
-342 4266 l
-342 4281 l
-347 4291 l
-362 4296 l
-412 4296 l
-S
-372 4411 m
-372 4472 l
-362 4472 l
-352 4467 l
-347 4462 l
-342 4452 l
-342 4437 l
-347 4427 l
-357 4417 l
-372 4411 l
-382 4411 l
-397 4417 l
-407 4427 l
-412 4437 l
-412 4452 l
-407 4462 l
-397 4472 l
-S
-342 4562 m
-447 4562 l
-S
-357 4562 m
-347 4552 l
-342 4542 l
-342 4527 l
-347 4517 l
-357 4507 l
-372 4502 l
-382 4502 l
-397 4507 l
-407 4517 l
-412 4527 l
-412 4542 l
-407 4552 l
-397 4562 l
-S
-342 4602 m
-392 4602 l
-407 4607 l
-412 4617 l
-412 4632 l
-407 4642 l
-392 4657 l
-S
-342 4657 m
-412 4657 l
-S
-307 4692 m
-312 4697 l
-307 4702 l
-302 4697 l
-307 4692 l
-S
-342 4697 m
-412 4697 l
-S
-342 4737 m
-412 4737 l
-S
-362 4737 m
-347 4752 l
-342 4762 l
-342 4777 l
-347 4787 l
-362 4792 l
-412 4792 l
-S
-342 4853 m
-347 4843 l
-357 4833 l
-372 4827 l
-382 4827 l
-397 4833 l
-407 4843 l
-412 4853 l
-412 4868 l
-407 4878 l
-397 4888 l
-382 4893 l
-372 4893 l
-357 4888 l
-347 4878 l
-342 4868 l
-342 4853 l
-S
-342 4923 m
-412 4978 l
-S
-342 4978 m
-412 4923 l
-S
-307 5133 m
-387 5133 l
-402 5128 l
-407 5123 l
-412 5113 l
-412 5103 l
-407 5093 l
-402 5088 l
-387 5083 l
-377 5083 l
-S
-332 5173 m
-327 5173 l
-317 5178 l
-312 5183 l
-307 5193 l
-307 5213 l
-312 5223 l
-317 5228 l
-327 5233 l
-337 5233 l
-347 5228 l
-362 5218 l
-412 5168 l
-412 5238 l
-S
-307 5299 m
-312 5284 l
-327 5274 l
-352 5269 l
-367 5269 l
-392 5274 l
-407 5284 l
-412 5299 l
-412 5309 l
-407 5324 l
-392 5334 l
-367 5339 l
-352 5339 l
-327 5334 l
-312 5324 l
-307 5309 l
-307 5299 l
-S
-307 5399 m
-312 5384 l
-327 5374 l
-352 5369 l
-367 5369 l
-392 5374 l
-407 5384 l
-412 5399 l
-412 5409 l
-407 5424 l
-392 5434 l
-367 5439 l
-352 5439 l
-327 5434 l
-312 5424 l
-307 5409 l
-307 5399 l
-S
-307 5499 m
-312 5484 l
-327 5474 l
-352 5469 l
-367 5469 l
-392 5474 l
-407 5484 l
-412 5499 l
-412 5509 l
-407 5524 l
-392 5534 l
-367 5539 l
-352 5539 l
-327 5534 l
-312 5524 l
-307 5509 l
-307 5499 l
-S
-402 5579 m
-407 5574 l
-412 5579 l
-407 5584 l
-402 5579 l
-S
-307 5649 m
-312 5634 l
-327 5624 l
-352 5619 l
-367 5619 l
-392 5624 l
-407 5634 l
-412 5649 l
-412 5659 l
-407 5675 l
-392 5685 l
-367 5690 l
-352 5690 l
-327 5685 l
-312 5675 l
-307 5659 l
-307 5649 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/frontb_bw.eps b/ast-5.3-1/sun210_figures/frontb_bw.eps
deleted file mode 100644
index f7883ed..0000000
--- a/ast-5.3-1/sun210_figures/frontb_bw.eps
+++ /dev/null
@@ -1,21509 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 30 189 477 603
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:07:11
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3111 3017 l
-3112 3018 l
-3114 3019 l
-3116 3020 l
-3117 3021 l
-3119 3021 l
-3120 3022 l
-3142 3035 l
-3164 3048 l
-3186 3061 l
-3207 3075 l
-3229 3089 l
-3250 3103 l
-3270 3117 l
-3291 3132 l
-3311 3147 l
-3331 3163 l
-3351 3179 l
-3371 3195 l
-3390 3211 l
-3409 3228 l
-3428 3245 l
-3447 3262 l
-3465 3280 l
-3483 3297 l
-3501 3315 l
-3518 3334 l
-3536 3353 l
-3553 3371 l
-3569 3391 l
-3586 3410 l
-3602 3430 l
-3617 3450 l
-3633 3470 l
-3648 3490 l
-3663 3511 l
-3677 3532 l
-3691 3553 l
-3705 3574 l
-3719 3596 l
-3732 3618 l
-3745 3640 l
-3757 3662 l
-3769 3684 l
-3781 3707 l
-3792 3730 l
-3803 3753 l
-3814 3776 l
-3824 3800 l
-3834 3823 l
-3843 3847 l
-3852 3871 l
-3861 3895 l
-3869 3919 l
-3877 3944 l
-3884 3968 l
-3891 3993 l
-3898 4018 l
-3904 4043 l
-3910 4068 l
-3915 4094 l
-3920 4119 l
-3924 4144 l
-3928 4170 l
-3932 4196 l
-3935 4222 l
-3937 4248 l
-3939 4274 l
-3941 4300 l
-3942 4326 l
-3942 4352 l
-3943 4379 l
-3942 4405 l
-3941 4431 l
-3940 4458 l
-3938 4484 l
-3935 4511 l
-3932 4538 l
-3929 4564 l
-3925 4591 l
-3920 4617 l
-3915 4644 l
-3909 4671 l
-3903 4697 l
-3896 4724 l
-3888 4750 l
-3880 4776 l
-3872 4803 l
-3862 4829 l
-3852 4855 l
-3842 4881 l
-3831 4907 l
-3819 4933 l
-3807 4959 l
-3794 4984 l
-3780 5010 l
-3766 5035 l
-3751 5060 l
-3736 5085 l
-3720 5110 l
-3703 5134 l
-3685 5159 l
-3667 5183 l
-3648 5206 l
-3629 5230 l
-3609 5253 l
-3588 5276 l
-3566 5298 l
-3544 5320 l
-3521 5342 l
-3497 5363 l
-3473 5384 l
-3448 5405 l
-3422 5425 l
-3396 5444 l
-3369 5463 l
-3341 5482 l
-3312 5500 l
-3283 5517 l
-3254 5534 l
-3223 5551 l
-3192 5566 l
-3160 5581 l
-3128 5595 l
-3095 5609 l
-3061 5622 l
-3026 5634 l
-2992 5645 l
-2956 5656 l
-2920 5665 l
-2883 5674 l
-2846 5682 l
-2808 5689 l
-2770 5695 l
-2732 5700 l
-2693 5704 l
-2653 5707 l
-2613 5709 l
-2573 5710 l
-2533 5710 l
-2492 5709 l
-2451 5707 l
-2410 5703 l
-2368 5699 l
-2327 5693 l
-2285 5686 l
-2243 5678 l
-2202 5669 l
-2160 5658 l
-2119 5647 l
-2077 5634 l
-2036 5620 l
-1995 5605 l
-1992 5603 l
-1989 5602 l
-1986 5601 l
-1984 5600 l
-1981 5599 l
-1978 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3110 3018 l
-3110 3019 l
-3111 3021 l
-3112 3022 l
-3112 3023 l
-3113 3025 l
-3113 3026 l
-3122 3046 l
-3129 3067 l
-3137 3087 l
-3145 3108 l
-3152 3129 l
-3159 3150 l
-3166 3171 l
-3172 3192 l
-3179 3213 l
-3185 3234 l
-3191 3256 l
-3196 3277 l
-3202 3299 l
-3207 3320 l
-3212 3342 l
-3217 3364 l
-3222 3386 l
-3226 3408 l
-3230 3430 l
-3234 3452 l
-3238 3475 l
-3242 3497 l
-3245 3519 l
-3248 3542 l
-3251 3564 l
-3254 3587 l
-3257 3610 l
-3259 3632 l
-3261 3655 l
-3263 3678 l
-3265 3700 l
-3266 3723 l
-3268 3746 l
-3269 3769 l
-3270 3792 l
-3270 3815 l
-3271 3838 l
-3271 3861 l
-3271 3884 l
-3271 3907 l
-3271 3929 l
-3270 3952 l
-3269 3975 l
-3268 3998 l
-3267 4021 l
-3266 4044 l
-3264 4067 l
-3263 4090 l
-3261 4113 l
-3259 4136 l
-3256 4158 l
-3254 4181 l
-3251 4204 l
-3248 4227 l
-3245 4249 l
-3242 4272 l
-3238 4294 l
-3234 4317 l
-3230 4339 l
-3226 4362 l
-3222 4384 l
-3217 4406 l
-3212 4429 l
-3207 4451 l
-3202 4473 l
-3197 4495 l
-3191 4517 l
-3186 4538 l
-3180 4560 l
-3173 4582 l
-3167 4603 l
-3160 4625 l
-3154 4646 l
-3146 4667 l
-3139 4688 l
-3132 4709 l
-3124 4730 l
-3116 4751 l
-3108 4771 l
-3100 4792 l
-3092 4812 l
-3083 4832 l
-3074 4852 l
-3065 4872 l
-3055 4892 l
-3046 4912 l
-3036 4931 l
-3026 4950 l
-3016 4970 l
-3005 4989 l
-2995 5007 l
-2984 5026 l
-2973 5044 l
-2962 5063 l
-2950 5081 l
-2938 5099 l
-2926 5116 l
-2914 5134 l
-2902 5151 l
-2889 5168 l
-2876 5185 l
-2863 5202 l
-2849 5218 l
-2836 5234 l
-2822 5250 l
-2808 5266 l
-2793 5281 l
-2778 5296 l
-2764 5311 l
-2748 5326 l
-2733 5340 l
-2717 5355 l
-2701 5368 l
-2685 5382 l
-2668 5395 l
-2652 5408 l
-2634 5421 l
-2617 5433 l
-2599 5445 l
-2581 5457 l
-2563 5468 l
-2544 5479 l
-2526 5489 l
-2506 5499 l
-2487 5509 l
-2467 5519 l
-2447 5528 l
-2426 5536 l
-2405 5544 l
-2384 5552 l
-2362 5559 l
-2340 5566 l
-2318 5572 l
-2295 5578 l
-2272 5583 l
-2248 5587 l
-2224 5591 l
-2200 5595 l
-2175 5598 l
-2150 5600 l
-2124 5601 l
-2098 5602 l
-2072 5602 l
-2045 5602 l
-2017 5600 l
-1989 5598 l
-1987 5598 l
-1985 5598 l
-1983 5597 l
-1981 5597 l
-1979 5597 l
-1977 5597 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3109 3017 l
-3108 3019 l
-3107 3020 l
-3106 3021 l
-3106 3022 l
-3105 3023 l
-3104 3024 l
-3094 3041 l
-3083 3057 l
-3073 3074 l
-3062 3090 l
-3052 3107 l
-3041 3124 l
-3031 3141 l
-3020 3158 l
-3010 3175 l
-2999 3192 l
-2989 3210 l
-2978 3227 l
-2968 3245 l
-2957 3263 l
-2947 3280 l
-2936 3298 l
-2926 3316 l
-2915 3334 l
-2905 3352 l
-2894 3371 l
-2884 3389 l
-2873 3407 l
-2863 3426 l
-2852 3444 l
-2841 3463 l
-2831 3482 l
-2820 3500 l
-2810 3519 l
-2799 3538 l
-2789 3557 l
-2779 3576 l
-2768 3595 l
-2758 3614 l
-2747 3633 l
-2737 3653 l
-2726 3672 l
-2716 3691 l
-2706 3710 l
-2695 3730 l
-2685 3749 l
-2675 3769 l
-2664 3788 l
-2654 3808 l
-2644 3827 l
-2634 3847 l
-2624 3866 l
-2614 3886 l
-2603 3906 l
-2593 3925 l
-2583 3945 l
-2573 3965 l
-2563 3984 l
-2553 4004 l
-2544 4024 l
-2534 4043 l
-2524 4063 l
-2514 4083 l
-2504 4103 l
-2495 4122 l
-2485 4142 l
-2475 4162 l
-2466 4181 l
-2456 4201 l
-2447 4221 l
-2438 4240 l
-2428 4260 l
-2419 4279 l
-2410 4299 l
-2400 4319 l
-2391 4338 l
-2382 4357 l
-2373 4377 l
-2364 4396 l
-2355 4416 l
-2347 4435 l
-2338 4454 l
-2329 4473 l
-2321 4493 l
-2312 4512 l
-2304 4531 l
-2295 4550 l
-2287 4569 l
-2278 4588 l
-2270 4607 l
-2262 4625 l
-2254 4644 l
-2246 4663 l
-2238 4681 l
-2230 4700 l
-2223 4718 l
-2215 4737 l
-2208 4755 l
-2200 4773 l
-2193 4792 l
-2185 4810 l
-2178 4828 l
-2171 4846 l
-2164 4863 l
-2157 4881 l
-2150 4899 l
-2144 4916 l
-2137 4934 l
-2130 4951 l
-2124 4969 l
-2118 4986 l
-2111 5003 l
-2105 5020 l
-2099 5037 l
-2093 5053 l
-2088 5070 l
-2082 5087 l
-2076 5103 l
-2071 5119 l
-2066 5136 l
-2061 5152 l
-2055 5168 l
-2051 5184 l
-2046 5200 l
-2041 5215 l
-2036 5231 l
-2032 5246 l
-2028 5261 l
-2024 5277 l
-2020 5292 l
-2016 5307 l
-2012 5321 l
-2009 5336 l
-2005 5351 l
-2002 5365 l
-1999 5379 l
-1996 5393 l
-1993 5408 l
-1991 5421 l
-1988 5435 l
-1986 5449 l
-1984 5462 l
-1982 5476 l
-1980 5489 l
-1979 5502 l
-1978 5515 l
-1977 5528 l
-1976 5541 l
-1975 5553 l
-1975 5566 l
-1975 5578 l
-1975 5590 l
-1975 5591 l
-1975 5592 l
-1975 5593 l
-1975 5594 l
-1975 5595 l
-1975 5596 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3108 3016 l
-3106 3017 l
-3104 3017 l
-3103 3017 l
-3101 3017 l
-3099 3017 l
-3098 3018 l
-3075 3021 l
-3052 3024 l
-3029 3028 l
-3006 3032 l
-2983 3036 l
-2960 3041 l
-2937 3046 l
-2914 3051 l
-2892 3057 l
-2869 3063 l
-2846 3069 l
-2824 3075 l
-2801 3082 l
-2779 3089 l
-2757 3096 l
-2735 3104 l
-2712 3112 l
-2690 3120 l
-2668 3128 l
-2646 3137 l
-2625 3146 l
-2603 3155 l
-2581 3164 l
-2560 3174 l
-2538 3184 l
-2517 3194 l
-2496 3205 l
-2475 3216 l
-2454 3227 l
-2433 3238 l
-2412 3249 l
-2392 3261 l
-2371 3273 l
-2351 3285 l
-2331 3297 l
-2311 3310 l
-2291 3323 l
-2271 3336 l
-2252 3349 l
-2232 3363 l
-2213 3377 l
-2194 3391 l
-2175 3405 l
-2156 3419 l
-2138 3434 l
-2119 3449 l
-2101 3464 l
-2083 3479 l
-2065 3495 l
-2047 3510 l
-2030 3526 l
-2012 3542 l
-1995 3559 l
-1978 3575 l
-1962 3592 l
-1945 3609 l
-1929 3626 l
-1913 3643 l
-1897 3660 l
-1881 3678 l
-1866 3695 l
-1851 3713 l
-1836 3731 l
-1821 3750 l
-1807 3768 l
-1793 3787 l
-1779 3806 l
-1765 3824 l
-1752 3844 l
-1738 3863 l
-1725 3882 l
-1713 3902 l
-1700 3922 l
-1688 3941 l
-1677 3962 l
-1665 3982 l
-1654 4002 l
-1643 4022 l
-1632 4043 l
-1622 4064 l
-1612 4085 l
-1602 4106 l
-1593 4127 l
-1584 4148 l
-1575 4170 l
-1566 4191 l
-1558 4213 l
-1551 4235 l
-1543 4257 l
-1536 4279 l
-1530 4301 l
-1523 4323 l
-1517 4345 l
-1512 4368 l
-1507 4391 l
-1502 4413 l
-1497 4436 l
-1493 4459 l
-1490 4482 l
-1487 4505 l
-1484 4528 l
-1481 4551 l
-1480 4575 l
-1478 4598 l
-1477 4622 l
-1477 4645 l
-1477 4669 l
-1477 4693 l
-1478 4717 l
-1479 4741 l
-1481 4764 l
-1483 4788 l
-1486 4812 l
-1490 4837 l
-1494 4861 l
-1498 4885 l
-1504 4909 l
-1509 4933 l
-1515 4958 l
-1522 4982 l
-1530 5006 l
-1538 5030 l
-1547 5055 l
-1556 5079 l
-1566 5103 l
-1577 5127 l
-1588 5152 l
-1601 5176 l
-1613 5200 l
-1627 5224 l
-1641 5248 l
-1657 5272 l
-1673 5295 l
-1689 5319 l
-1707 5343 l
-1725 5366 l
-1745 5389 l
-1765 5412 l
-1786 5435 l
-1808 5457 l
-1831 5480 l
-1855 5502 l
-1880 5523 l
-1906 5545 l
-1933 5566 l
-1960 5586 l
-1962 5588 l
-1965 5589 l
-1967 5591 l
-1969 5592 l
-1971 5594 l
-1973 5595 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3108 3015 l
-3106 3014 l
-3104 3014 l
-3103 3013 l
-3101 3012 l
-3100 3011 l
-3098 3010 l
-3076 2998 l
-3053 2987 l
-3030 2975 l
-3007 2965 l
-2984 2954 l
-2961 2944 l
-2938 2934 l
-2914 2925 l
-2890 2916 l
-2866 2907 l
-2842 2899 l
-2818 2891 l
-2794 2883 l
-2769 2876 l
-2745 2869 l
-2720 2863 l
-2695 2857 l
-2671 2852 l
-2646 2846 l
-2620 2842 l
-2595 2837 l
-2570 2833 l
-2545 2830 l
-2519 2827 l
-2494 2824 l
-2468 2822 l
-2443 2820 l
-2417 2819 l
-2392 2818 l
-2366 2817 l
-2340 2817 l
-2315 2818 l
-2289 2818 l
-2263 2820 l
-2237 2821 l
-2211 2824 l
-2186 2826 l
-2160 2829 l
-2134 2833 l
-2109 2837 l
-2083 2842 l
-2057 2847 l
-2032 2852 l
-2006 2858 l
-1981 2865 l
-1955 2872 l
-1930 2879 l
-1905 2887 l
-1880 2896 l
-1855 2905 l
-1830 2914 l
-1805 2925 l
-1780 2935 l
-1756 2946 l
-1732 2958 l
-1707 2970 l
-1683 2983 l
-1660 2996 l
-1636 3010 l
-1612 3024 l
-1589 3039 l
-1566 3054 l
-1543 3070 l
-1521 3087 l
-1499 3104 l
-1477 3122 l
-1455 3140 l
-1433 3159 l
-1412 3178 l
-1391 3198 l
-1371 3218 l
-1351 3239 l
-1331 3261 l
-1312 3283 l
-1293 3306 l
-1274 3329 l
-1256 3353 l
-1238 3378 l
-1221 3403 l
-1204 3429 l
-1188 3455 l
-1172 3482 l
-1156 3509 l
-1142 3537 l
-1128 3565 l
-1114 3594 l
-1101 3624 l
-1089 3654 l
-1077 3685 l
-1066 3716 l
-1055 3748 l
-1046 3780 l
-1037 3812 l
-1028 3846 l
-1021 3879 l
-1014 3914 l
-1008 3948 l
-1003 3983 l
-999 4019 l
-996 4055 l
-993 4091 l
-992 4128 l
-991 4165 l
-992 4202 l
-993 4239 l
-996 4277 l
-999 4315 l
-1003 4354 l
-1009 4392 l
-1015 4431 l
-1023 4470 l
-1032 4509 l
-1041 4548 l
-1052 4587 l
-1065 4625 l
-1078 4664 l
-1092 4703 l
-1108 4742 l
-1124 4780 l
-1142 4818 l
-1161 4856 l
-1181 4894 l
-1202 4931 l
-1225 4968 l
-1248 5004 l
-1273 5040 l
-1298 5075 l
-1325 5110 l
-1353 5144 l
-1382 5178 l
-1412 5210 l
-1442 5242 l
-1474 5273 l
-1507 5304 l
-1540 5333 l
-1575 5361 l
-1610 5389 l
-1646 5415 l
-1682 5441 l
-1719 5465 l
-1757 5488 l
-1796 5511 l
-1835 5532 l
-1874 5552 l
-1914 5571 l
-1955 5588 l
-1957 5589 l
-1960 5591 l
-1963 5592 l
-1966 5593 l
-1969 5594 l
-1972 5595 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3109 3015 l
-3108 3013 l
-3107 3012 l
-3107 3010 l
-3106 3009 l
-3106 3008 l
-3105 3006 l
-3096 2986 l
-3088 2966 l
-3079 2947 l
-3069 2927 l
-3060 2908 l
-3050 2889 l
-3040 2870 l
-3030 2851 l
-3019 2832 l
-3008 2814 l
-2997 2796 l
-2986 2778 l
-2975 2760 l
-2963 2742 l
-2951 2725 l
-2939 2707 l
-2926 2690 l
-2913 2674 l
-2900 2657 l
-2887 2641 l
-2873 2624 l
-2859 2609 l
-2845 2593 l
-2831 2578 l
-2816 2562 l
-2801 2548 l
-2786 2533 l
-2770 2519 l
-2754 2505 l
-2738 2491 l
-2721 2478 l
-2704 2464 l
-2687 2452 l
-2669 2439 l
-2651 2427 l
-2633 2415 l
-2615 2404 l
-2596 2393 l
-2576 2382 l
-2557 2372 l
-2537 2362 l
-2516 2353 l
-2495 2344 l
-2474 2335 l
-2452 2327 l
-2430 2319 l
-2408 2312 l
-2385 2306 l
-2361 2300 l
-2337 2294 l
-2313 2289 l
-2288 2285 l
-2263 2281 l
-2237 2278 l
-2211 2275 l
-2184 2274 l
-2157 2273 l
-2129 2272 l
-2101 2273 l
-2072 2274 l
-2042 2277 l
-2012 2280 l
-1981 2284 l
-1950 2289 l
-1918 2295 l
-1886 2302 l
-1853 2311 l
-1819 2320 l
-1785 2331 l
-1750 2343 l
-1714 2357 l
-1679 2372 l
-1642 2388 l
-1605 2407 l
-1567 2426 l
-1529 2448 l
-1491 2472 l
-1452 2497 l
-1413 2525 l
-1373 2555 l
-1334 2587 l
-1294 2621 l
-1254 2658 l
-1214 2697 l
-1175 2738 l
-1136 2783 l
-1097 2830 l
-1060 2879 l
-1023 2932 l
-987 2987 l
-952 3045 l
-919 3105 l
-888 3169 l
-859 3234 l
-831 3302 l
-829 3307 l
-828 3312 l
-826 3317 l
-824 3322 l
-822 3327 l
-820 3332 l
-819 3337 l
-817 3342 l
-815 3347 l
-813 3352 l
-811 3357 l
-810 3362 l
-808 3367 l
-806 3373 l
-805 3378 l
-803 3383 l
-801 3388 l
-800 3393 l
-798 3398 l
-796 3403 l
-795 3408 l
-793 3414 l
-792 3419 l
-790 3424 l
-789 3429 l
-787 3434 l
-786 3440 l
-784 3445 l
-783 3450 l
-781 3455 l
-780 3461 l
-778 3466 l
-777 3471 l
-775 3476 l
-774 3482 l
-773 3487 l
-771 3492 l
-770 3498 l
-768 3503 l
-767 3508 l
-766 3514 l
-764 3519 l
-763 3524 l
-762 3530 l
-761 3535 l
-759 3540 l
-758 3546 l
-757 3551 l
-756 3557 l
-755 3562 l
-753 3567 l
-752 3573 l
-751 3578 l
-750 3584 l
-749 3589 l
-748 3595 l
-747 3600 l
-746 3606 l
-745 3611 l
-744 3616 l
-743 3622 l
-742 3627 l
-741 3633 l
-740 3638 l
-739 3644 l
-738 3649 l
-737 3655 l
-736 3660 l
-735 3666 l
-734 3672 l
-733 3677 l
-733 3683 l
-732 3688 l
-731 3694 l
-730 3699 l
-729 3705 l
-729 3710 l
-728 3716 l
-727 3722 l
-727 3727 l
-726 3733 l
-725 3738 l
-725 3744 l
-724 3750 l
-723 3755 l
-723 3761 l
-722 3766 l
-722 3772 l
-721 3778 l
-720 3783 l
-720 3789 l
-719 3794 l
-719 3800 l
-719 3806 l
-718 3811 l
-S
-718 3811 m
-718 3817 l
-717 3823 l
-717 3828 l
-716 3834 l
-716 3839 l
-716 3845 l
-715 3851 l
-715 3856 l
-715 3862 l
-715 3868 l
-714 3873 l
-714 3879 l
-714 3885 l
-714 3890 l
-713 3896 l
-713 3902 l
-713 3907 l
-713 3913 l
-713 3918 l
-713 3924 l
-713 3930 l
-713 3935 l
-713 3941 l
-713 3947 l
-713 3952 l
-713 3958 l
-713 3964 l
-713 3969 l
-713 3975 l
-713 3981 l
-713 3986 l
-713 3992 l
-713 3997 l
-713 4003 l
-713 4009 l
-713 4014 l
-714 4020 l
-714 4026 l
-714 4031 l
-714 4037 l
-715 4042 l
-715 4048 l
-715 4054 l
-715 4059 l
-716 4065 l
-716 4071 l
-716 4076 l
-717 4082 l
-717 4087 l
-718 4093 l
-718 4099 l
-718 4104 l
-719 4110 l
-719 4115 l
-720 4121 l
-720 4126 l
-721 4132 l
-721 4137 l
-722 4143 l
-723 4149 l
-723 4154 l
-724 4160 l
-724 4165 l
-725 4171 l
-726 4176 l
-726 4182 l
-727 4187 l
-728 4193 l
-728 4198 l
-729 4204 l
-730 4209 l
-731 4215 l
-731 4220 l
-732 4226 l
-733 4231 l
-734 4237 l
-735 4242 l
-736 4248 l
-737 4253 l
-737 4258 l
-738 4264 l
-739 4269 l
-740 4275 l
-741 4280 l
-742 4285 l
-743 4291 l
-744 4296 l
-745 4302 l
-746 4307 l
-747 4312 l
-748 4318 l
-749 4323 l
-750 4328 l
-751 4334 l
-753 4339 l
-754 4344 l
-755 4350 l
-756 4355 l
-757 4360 l
-758 4365 l
-760 4371 l
-761 4376 l
-762 4381 l
-763 4386 l
-765 4392 l
-766 4397 l
-767 4402 l
-768 4407 l
-770 4412 l
-771 4418 l
-772 4423 l
-774 4428 l
-775 4433 l
-777 4438 l
-778 4443 l
-799 4514 l
-822 4583 l
-848 4649 l
-875 4713 l
-905 4774 l
-936 4833 l
-968 4889 l
-1001 4943 l
-1036 4994 l
-1071 5042 l
-1107 5088 l
-1143 5131 l
-1180 5171 l
-1217 5210 l
-1254 5245 l
-1291 5279 l
-1328 5310 l
-1365 5340 l
-1401 5367 l
-1438 5392 l
-1474 5416 l
-1510 5438 l
-1545 5458 l
-1580 5476 l
-1614 5493 l
-1648 5508 l
-1682 5522 l
-1715 5535 l
-1747 5546 l
-1779 5556 l
-1811 5565 l
-1842 5573 l
-1872 5580 l
-1902 5586 l
-1932 5591 l
-1961 5595 l
-1963 5595 l
-1965 5595 l
-1967 5596 l
-1969 5596 l
-1971 5596 l
-1973 5596 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3110 3015 l
-3111 3014 l
-3111 3013 l
-3112 3012 l
-3113 3010 l
-3114 3009 l
-3114 3008 l
-3125 2992 l
-3135 2976 l
-3146 2960 l
-3156 2945 l
-3166 2929 l
-3176 2914 l
-3187 2899 l
-3197 2884 l
-3207 2869 l
-3217 2854 l
-3228 2839 l
-3238 2825 l
-3248 2811 l
-3258 2796 l
-3268 2782 l
-3278 2769 l
-3288 2755 l
-3298 2741 l
-3308 2728 l
-3318 2715 l
-3328 2702 l
-3338 2689 l
-3348 2676 l
-3358 2664 l
-3368 2652 l
-3378 2639 l
-3388 2628 l
-3398 2616 l
-3408 2604 l
-3417 2593 l
-3427 2582 l
-3437 2571 l
-3447 2560 l
-3457 2550 l
-3466 2539 l
-3476 2529 l
-3486 2519 l
-3496 2510 l
-3506 2500 l
-3515 2491 l
-3525 2482 l
-3535 2473 l
-3545 2465 l
-3555 2457 l
-3565 2449 l
-3574 2441 l
-3584 2434 l
-3594 2427 l
-3604 2420 l
-3614 2413 l
-3625 2407 l
-3635 2401 l
-3645 2395 l
-3656 2390 l
-3666 2385 l
-3677 2380 l
-3687 2376 l
-3698 2372 l
-3709 2368 l
-3721 2365 l
-3732 2362 l
-3744 2360 l
-3755 2358 l
-3768 2357 l
-3780 2356 l
-3793 2356 l
-3806 2356 l
-3819 2357 l
-3833 2359 l
-3848 2361 l
-3863 2364 l
-3878 2368 l
-3895 2373 l
-3912 2379 l
-3930 2386 l
-3949 2395 l
-3969 2405 l
-3991 2416 l
-4014 2430 l
-4038 2446 l
-4065 2465 l
-4093 2486 l
-4125 2511 l
-4159 2541 l
-4196 2576 l
-4238 2618 l
-4283 2669 l
-4287 2673 l
-4290 2677 l
-4294 2681 l
-4297 2685 l
-4301 2689 l
-4304 2693 l
-4308 2698 l
-4312 2702 l
-4315 2706 l
-4319 2711 l
-4323 2716 l
-4326 2720 l
-4330 2725 l
-4334 2730 l
-4338 2734 l
-4342 2739 l
-4346 2744 l
-4349 2749 l
-4353 2755 l
-4357 2760 l
-4361 2765 l
-4365 2770 l
-4369 2776 l
-4373 2781 l
-4378 2787 l
-4382 2793 l
-4386 2798 l
-4390 2804 l
-4394 2810 l
-4399 2816 l
-4403 2822 l
-4407 2829 l
-4411 2835 l
-4416 2841 l
-4420 2848 l
-4425 2855 l
-4429 2861 l
-4434 2868 l
-4438 2875 l
-4443 2882 l
-4447 2889 l
-4452 2897 l
-4456 2904 l
-4461 2912 l
-4466 2919 l
-4470 2927 l
-4475 2935 l
-4480 2943 l
-4485 2951 l
-4489 2960 l
-4494 2968 l
-4499 2977 l
-4504 2986 l
-4509 2994 l
-4514 3003 l
-4519 3013 l
-4524 3022 l
-4529 3032 l
-4534 3041 l
-4539 3051 l
-4544 3061 l
-4549 3071 l
-4554 3082 l
-4559 3092 l
-4564 3103 l
-4569 3114 l
-4574 3125 l
-4579 3136 l
-4584 3148 l
-4589 3159 l
-4594 3171 l
-4599 3183 l
-4605 3196 l
-4610 3208 l
-4615 3221 l
-4620 3234 l
-4625 3247 l
-4630 3261 l
-4635 3274 l
-4640 3288 l
-4645 3302 l
-4649 3317 l
-4654 3331 l
-4659 3346 l
-4664 3362 l
-4669 3377 l
-4673 3393 l
-4678 3409 l
-4682 3425 l
-4687 3441 l
-4691 3458 l
-4695 3475 l
-4700 3493 l
-4704 3510 l
-4708 3528 l
-4712 3547 l
-4715 3565 l
-4719 3584 l
-4723 3603 l
-4726 3623 l
-4729 3643 l
-4732 3663 l
-4735 3683 l
-S
-4735 3683 m
-4738 3704 l
-4741 3725 l
-4743 3747 l
-4745 3768 l
-4747 3790 l
-4749 3813 l
-4751 3835 l
-4752 3858 l
-4753 3881 l
-4754 3905 l
-4754 3929 l
-4755 3953 l
-4755 3978 l
-4754 4002 l
-4754 4027 l
-4753 4053 l
-4751 4078 l
-4750 4104 l
-4748 4130 l
-4745 4157 l
-4743 4183 l
-4740 4210 l
-4736 4237 l
-4732 4264 l
-4728 4292 l
-4723 4319 l
-4718 4347 l
-4713 4375 l
-4707 4403 l
-4701 4431 l
-4694 4459 l
-4686 4488 l
-4679 4516 l
-4671 4545 l
-4662 4573 l
-4653 4602 l
-4643 4630 l
-4633 4659 l
-4623 4687 l
-4612 4716 l
-4600 4744 l
-4589 4772 l
-4576 4800 l
-4564 4828 l
-4550 4856 l
-4537 4883 l
-4523 4911 l
-4509 4938 l
-4494 4965 l
-4479 4992 l
-4463 5018 l
-4447 5044 l
-4431 5070 l
-4414 5095 l
-4397 5121 l
-4380 5146 l
-4363 5170 l
-4345 5194 l
-4327 5218 l
-4309 5241 l
-4290 5264 l
-4271 5287 l
-4252 5309 l
-4233 5331 l
-4214 5352 l
-4195 5373 l
-4175 5393 l
-4155 5413 l
-4136 5433 l
-4116 5452 l
-4096 5471 l
-4076 5489 l
-4056 5507 l
-4036 5524 l
-4016 5541 l
-3996 5558 l
-3976 5574 l
-3956 5589 l
-3936 5604 l
-3916 5619 l
-3896 5634 l
-3876 5648 l
-3856 5661 l
-3837 5674 l
-3817 5687 l
-3798 5700 l
-3778 5712 l
-3759 5723 l
-3740 5735 l
-3721 5746 l
-3702 5756 l
-3684 5767 l
-3665 5777 l
-3647 5786 l
-3629 5795 l
-3611 5804 l
-3593 5813 l
-3575 5822 l
-3558 5830 l
-3540 5838 l
-3523 5845 l
-3506 5852 l
-3489 5859 l
-3473 5866 l
-3456 5873 l
-3440 5879 l
-3424 5885 l
-3408 5891 l
-3392 5897 l
-3377 5902 l
-3362 5907 l
-3346 5912 l
-3331 5917 l
-3317 5922 l
-3302 5926 l
-3288 5931 l
-3273 5935 l
-3259 5939 l
-3246 5943 l
-3232 5946 l
-3218 5950 l
-3205 5953 l
-3192 5956 l
-3179 5960 l
-3166 5963 l
-3153 5965 l
-3141 5968 l
-3128 5971 l
-3116 5973 l
-3104 5976 l
-3092 5978 l
-3081 5980 l
-3069 5982 l
-3058 5984 l
-3046 5986 l
-3035 5988 l
-3024 5989 l
-3014 5991 l
-3003 5993 l
-2992 5994 l
-2982 5995 l
-2972 5997 l
-2962 5998 l
-2952 5999 l
-2942 6000 l
-2932 6001 l
-2923 6002 l
-2913 6003 l
-2904 6004 l
-2895 6005 l
-2885 6006 l
-2876 6006 l
-2868 6007 l
-2859 6008 l
-2850 6008 l
-2842 6009 l
-2833 6009 l
-2825 6009 l
-2817 6010 l
-2809 6010 l
-2801 6010 l
-2793 6011 l
-2785 6011 l
-2777 6011 l
-2770 6011 l
-2762 6011 l
-2755 6011 l
-2747 6012 l
-2740 6012 l
-2733 6012 l
-2726 6012 l
-2719 6011 l
-2712 6011 l
-2705 6011 l
-2699 6011 l
-2692 6011 l
-2685 6011 l
-2679 6011 l
-2673 6010 l
-2666 6010 l
-2660 6010 l
-2654 6010 l
-2648 6009 l
-2642 6009 l
-2636 6009 l
-2630 6008 l
-2624 6008 l
-2618 6008 l
-2613 6007 l
-2607 6007 l
-2601 6006 l
-2596 6006 l
-2590 6006 l
-2585 6005 l
-2580 6005 l
-2575 6004 l
-2569 6004 l
-2564 6003 l
-2559 6003 l
-S
-2559 6003 m
-2554 6002 l
-2549 6002 l
-2544 6001 l
-2539 6001 l
-2535 6000 l
-2530 5999 l
-2468 5991 l
-2415 5981 l
-2369 5971 l
-2328 5960 l
-2292 5950 l
-2260 5939 l
-2232 5928 l
-2206 5918 l
-2184 5907 l
-2163 5896 l
-2144 5886 l
-2127 5875 l
-2112 5865 l
-2098 5855 l
-2085 5844 l
-2073 5834 l
-2063 5823 l
-2053 5813 l
-2044 5803 l
-2036 5792 l
-2028 5782 l
-2021 5771 l
-2015 5761 l
-2010 5750 l
-2004 5739 l
-2000 5728 l
-1996 5717 l
-1992 5706 l
-1989 5695 l
-1986 5684 l
-1983 5673 l
-1981 5661 l
-1979 5650 l
-1978 5638 l
-1977 5626 l
-1976 5615 l
-1975 5603 l
-1975 5602 l
-1975 5601 l
-1975 5600 l
-1975 5599 l
-1975 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3111 3016 l
-3113 3016 l
-3114 3016 l
-3116 3015 l
-3117 3015 l
-3119 3015 l
-3121 3015 l
-3144 3012 l
-3167 3010 l
-3190 3009 l
-3213 3007 l
-3236 3006 l
-3260 3005 l
-3283 3005 l
-3306 3005 l
-3329 3005 l
-3352 3006 l
-3375 3007 l
-3398 3008 l
-3421 3010 l
-3444 3012 l
-3467 3014 l
-3490 3017 l
-3513 3021 l
-3536 3024 l
-3559 3028 l
-3582 3033 l
-3604 3038 l
-3627 3043 l
-3650 3049 l
-3672 3055 l
-3695 3061 l
-3717 3068 l
-3739 3076 l
-3761 3084 l
-3784 3092 l
-3806 3101 l
-3827 3110 l
-3849 3120 l
-3871 3130 l
-3892 3141 l
-3913 3152 l
-3935 3163 l
-3956 3176 l
-3977 3188 l
-3997 3201 l
-4018 3215 l
-4038 3229 l
-4058 3244 l
-4078 3260 l
-4098 3276 l
-4117 3292 l
-4136 3309 l
-4155 3327 l
-4174 3345 l
-4193 3364 l
-4211 3384 l
-4228 3404 l
-4246 3425 l
-4263 3446 l
-4280 3469 l
-4296 3491 l
-4312 3515 l
-4328 3539 l
-4343 3564 l
-4358 3590 l
-4372 3616 l
-4386 3643 l
-4399 3671 l
-4412 3700 l
-4424 3729 l
-4435 3759 l
-4446 3790 l
-4456 3822 l
-4466 3855 l
-4475 3888 l
-4482 3922 l
-4490 3957 l
-4496 3993 l
-4501 4030 l
-4506 4067 l
-4509 4106 l
-4511 4145 l
-4513 4185 l
-4513 4225 l
-4512 4267 l
-4509 4309 l
-4506 4352 l
-4501 4395 l
-4494 4439 l
-4486 4484 l
-4477 4530 l
-4466 4575 l
-4454 4622 l
-4439 4669 l
-4423 4716 l
-4406 4763 l
-4386 4811 l
-4365 4858 l
-4342 4906 l
-4317 4954 l
-4290 5001 l
-4261 5048 l
-4230 5095 l
-4197 5141 l
-4162 5187 l
-4126 5232 l
-4087 5276 l
-4047 5319 l
-4005 5361 l
-3962 5402 l
-3917 5441 l
-3870 5479 l
-3822 5515 l
-3773 5550 l
-3722 5583 l
-3670 5614 l
-3618 5644 l
-3565 5671 l
-3511 5697 l
-3456 5720 l
-3401 5742 l
-3346 5761 l
-3291 5779 l
-3235 5794 l
-3180 5808 l
-3125 5819 l
-3070 5829 l
-3016 5836 l
-2962 5842 l
-2909 5846 l
-2856 5848 l
-2804 5849 l
-2753 5848 l
-2703 5845 l
-2654 5841 l
-2606 5835 l
-2559 5828 l
-2513 5820 l
-2468 5811 l
-2425 5800 l
-2382 5789 l
-2341 5776 l
-2300 5762 l
-2261 5748 l
-2223 5733 l
-2187 5717 l
-2151 5700 l
-2116 5682 l
-2083 5664 l
-2051 5646 l
-2020 5626 l
-1989 5607 l
-1987 5605 l
-1985 5604 l
-1983 5602 l
-1981 5601 l
-1979 5599 l
-1977 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3586 3410 m
-3585 3411 l
-3584 3412 l
-3583 3413 l
-3571 3424 l
-3559 3435 l
-3547 3445 l
-3533 3455 l
-3520 3464 l
-3506 3473 l
-3491 3481 l
-3477 3489 l
-3462 3496 l
-3446 3502 l
-3430 3509 l
-3414 3514 l
-3398 3519 l
-3381 3524 l
-3364 3528 l
-3347 3531 l
-3330 3534 l
-3312 3537 l
-3294 3539 l
-3276 3541 l
-3258 3542 l
-3240 3542 l
-3222 3542 l
-3204 3542 l
-3185 3541 l
-3167 3539 l
-3148 3537 l
-3129 3535 l
-3111 3532 l
-3092 3529 l
-3074 3525 l
-3055 3521 l
-3037 3516 l
-3018 3511 l
-3000 3506 l
-2982 3500 l
-2963 3494 l
-2945 3487 l
-2927 3480 l
-2910 3472 l
-2892 3464 l
-2875 3456 l
-2858 3447 l
-2841 3438 l
-2824 3429 l
-2808 3419 l
-2791 3409 l
-2775 3398 l
-2760 3388 l
-2744 3377 l
-2729 3365 l
-2715 3353 l
-2700 3341 l
-2686 3329 l
-2673 3316 l
-2660 3303 l
-2647 3290 l
-2634 3277 l
-2622 3263 l
-2611 3249 l
-2600 3235 l
-2589 3220 l
-2579 3206 l
-2570 3191 l
-2561 3176 l
-2552 3161 l
-2544 3145 l
-2537 3130 l
-2530 3114 l
-2524 3098 l
-2518 3082 l
-2513 3066 l
-2509 3050 l
-2505 3034 l
-2502 3018 l
-2500 3002 l
-2498 2985 l
-2497 2969 l
-2496 2953 l
-2497 2937 l
-2498 2920 l
-2500 2904 l
-2502 2888 l
-2506 2872 l
-2510 2856 l
-2514 2841 l
-2520 2825 l
-2526 2810 l
-2534 2795 l
-2542 2780 l
-2550 2765 l
-2560 2751 l
-2570 2737 l
-2581 2723 l
-2593 2709 l
-2606 2697 l
-2620 2684 l
-2634 2672 l
-2649 2660 l
-2665 2649 l
-2681 2638 l
-2699 2628 l
-2717 2619 l
-2735 2610 l
-2755 2602 l
-2774 2594 l
-2795 2587 l
-2816 2581 l
-2838 2576 l
-2860 2571 l
-2883 2567 l
-2906 2564 l
-2930 2562 l
-2954 2561 l
-2978 2560 l
-3003 2561 l
-3028 2562 l
-3053 2564 l
-3078 2567 l
-3103 2571 l
-3128 2576 l
-3154 2581 l
-3179 2588 l
-3204 2596 l
-3229 2604 l
-3253 2613 l
-3277 2623 l
-3301 2634 l
-3325 2646 l
-3348 2658 l
-3371 2671 l
-3393 2685 l
-3414 2700 l
-3435 2715 l
-3455 2730 l
-3475 2747 l
-3493 2764 l
-3511 2781 l
-3529 2799 l
-3545 2817 l
-3560 2835 l
-3575 2854 l
-3589 2873 l
-3602 2893 l
-3614 2912 l
-3625 2932 l
-3635 2951 l
-3644 2971 l
-3652 2991 l
-3659 3011 l
-3666 3031 l
-3671 3050 l
-3676 3070 l
-3679 3089 l
-3682 3109 l
-3684 3128 l
-3685 3146 l
-3685 3165 l
-3684 3183 l
-3683 3201 l
-3681 3219 l
-3677 3236 l
-3674 3253 l
-3669 3269 l
-3664 3285 l
-3657 3301 l
-3651 3316 l
-3643 3331 l
-3635 3346 l
-3626 3359 l
-3617 3373 l
-3607 3386 l
-3597 3398 l
-3586 3410 l
-S
-3881 3956 m
-3879 3957 l
-3877 3958 l
-3875 3960 l
-3851 3975 l
-3826 3989 l
-3800 4003 l
-3774 4016 l
-3748 4027 l
-3721 4038 l
-3693 4048 l
-3665 4057 l
-3637 4065 l
-3609 4073 l
-3580 4079 l
-3551 4085 l
-3521 4090 l
-3492 4094 l
-3462 4097 l
-3432 4100 l
-3402 4102 l
-3371 4103 l
-3341 4104 l
-3310 4103 l
-3279 4102 l
-3248 4101 l
-3217 4098 l
-3186 4095 l
-3155 4091 l
-3124 4087 l
-3093 4082 l
-3061 4076 l
-3030 4070 l
-2999 4063 l
-2968 4056 l
-2937 4047 l
-2907 4039 l
-2876 4029 l
-2845 4019 l
-2815 4009 l
-2785 3998 l
-2755 3986 l
-2725 3974 l
-2695 3962 l
-2666 3948 l
-2637 3935 l
-2608 3920 l
-2579 3906 l
-2551 3890 l
-2523 3875 l
-2495 3858 l
-2468 3842 l
-2441 3824 l
-2415 3807 l
-2389 3789 l
-2363 3770 l
-2338 3751 l
-2313 3731 l
-2288 3711 l
-2265 3691 l
-2241 3670 l
-2219 3649 l
-2196 3627 l
-2175 3605 l
-2154 3583 l
-2133 3560 l
-2113 3537 l
-2094 3514 l
-2076 3490 l
-2058 3465 l
-2041 3441 l
-2025 3416 l
-2009 3390 l
-1994 3365 l
-1981 3339 l
-1967 3313 l
-1955 3286 l
-1944 3259 l
-1934 3232 l
-1924 3205 l
-1916 3177 l
-1908 3149 l
-1902 3121 l
-1897 3092 l
-1892 3064 l
-1889 3035 l
-1888 3006 l
-1887 2977 l
-1888 2947 l
-1889 2918 l
-1893 2888 l
-1897 2859 l
-1903 2829 l
-1911 2799 l
-1920 2770 l
-1930 2740 l
-1943 2710 l
-1956 2681 l
-1972 2652 l
-1989 2623 l
-2008 2594 l
-2029 2565 l
-2051 2537 l
-2076 2510 l
-2102 2483 l
-2131 2456 l
-2161 2430 l
-2194 2405 l
-2228 2381 l
-2265 2358 l
-2304 2336 l
-2345 2316 l
-2388 2296 l
-2432 2278 l
-2479 2262 l
-2528 2248 l
-2579 2235 l
-2632 2225 l
-2686 2216 l
-2742 2210 l
-2799 2206 l
-2857 2205 l
-2917 2207 l
-2977 2211 l
-3038 2218 l
-3100 2228 l
-3161 2241 l
-3223 2256 l
-3284 2275 l
-3344 2296 l
-3404 2320 l
-3463 2347 l
-3520 2376 l
-3575 2408 l
-3629 2442 l
-3681 2478 l
-3730 2516 l
-3777 2556 l
-3822 2597 l
-3864 2640 l
-3904 2683 l
-3941 2728 l
-3975 2773 l
-4006 2818 l
-4035 2864 l
-4061 2910 l
-4084 2956 l
-4104 3002 l
-4122 3047 l
-4138 3092 l
-4151 3136 l
-4162 3180 l
-4170 3223 l
-4177 3265 l
-4181 3306 l
-4183 3346 l
-4183 3385 l
-4182 3423 l
-4179 3460 l
-4174 3496 l
-4167 3531 l
-4160 3565 l
-4150 3598 l
-4139 3629 l
-4127 3660 l
-4114 3689 l
-4100 3717 l
-4084 3744 l
-4068 3770 l
-4050 3795 l
-4032 3819 l
-4013 3842 l
-3993 3863 l
-3972 3884 l
-3950 3903 l
-3928 3922 l
-3904 3939 l
-3881 3956 l
-S
-3924 4591 m
-3922 4592 l
-3920 4593 l
-3917 4593 l
-3884 4604 l
-3851 4614 l
-3817 4623 l
-3783 4631 l
-3749 4638 l
-3715 4645 l
-3680 4650 l
-3645 4655 l
-3609 4659 l
-3574 4662 l
-3538 4664 l
-3502 4666 l
-3466 4667 l
-3430 4667 l
-3394 4666 l
-3358 4665 l
-3321 4663 l
-3284 4661 l
-3248 4657 l
-3211 4653 l
-3174 4649 l
-3137 4643 l
-3100 4638 l
-3063 4631 l
-3026 4624 l
-2989 4616 l
-2952 4608 l
-2916 4599 l
-2879 4590 l
-2842 4580 l
-2805 4569 l
-2769 4558 l
-2732 4547 l
-2696 4534 l
-2659 4522 l
-2623 4509 l
-2587 4495 l
-2552 4481 l
-2516 4466 l
-2481 4451 l
-2445 4435 l
-2411 4419 l
-2376 4402 l
-2341 4385 l
-2307 4367 l
-2273 4349 l
-2240 4331 l
-2206 4312 l
-2174 4292 l
-2141 4272 l
-2109 4252 l
-2077 4231 l
-2045 4210 l
-2014 4188 l
-1984 4166 l
-1953 4144 l
-1924 4121 l
-1894 4098 l
-1865 4074 l
-1837 4050 l
-1809 4026 l
-1782 4001 l
-1755 3976 l
-1729 3950 l
-1703 3925 l
-1678 3898 l
-1654 3871 l
-1630 3844 l
-1607 3817 l
-1584 3789 l
-1563 3761 l
-1542 3732 l
-1521 3703 l
-1502 3674 l
-1483 3644 l
-1465 3614 l
-1448 3584 l
-1432 3553 l
-1417 3522 l
-1402 3490 l
-1389 3458 l
-1376 3426 l
-1365 3393 l
-1354 3360 l
-1345 3326 l
-1337 3292 l
-1330 3257 l
-1325 3222 l
-1320 3187 l
-1317 3151 l
-1316 3114 l
-1316 3078 l
-1317 3040 l
-1321 3002 l
-1326 2964 l
-1332 2925 l
-1341 2886 l
-1352 2845 l
-1365 2805 l
-1381 2764 l
-1399 2722 l
-1419 2680 l
-1443 2637 l
-1469 2594 l
-1499 2551 l
-1533 2507 l
-1570 2462 l
-1573 2459 l
-1576 2456 l
-1579 2453 l
-1582 2450 l
-1585 2447 l
-1588 2443 l
-1590 2440 l
-1593 2437 l
-1596 2434 l
-1599 2431 l
-1603 2427 l
-1606 2424 l
-1609 2421 l
-1612 2418 l
-1615 2415 l
-1618 2412 l
-1621 2408 l
-1624 2405 l
-1628 2402 l
-1631 2399 l
-1634 2396 l
-1638 2393 l
-1641 2389 l
-1644 2386 l
-1648 2383 l
-1651 2380 l
-1654 2377 l
-1658 2374 l
-1661 2370 l
-1665 2367 l
-1668 2364 l
-1672 2361 l
-1675 2358 l
-1679 2355 l
-1683 2351 l
-1686 2348 l
-1690 2345 l
-1694 2342 l
-1697 2339 l
-1701 2336 l
-1705 2332 l
-1709 2329 l
-1712 2326 l
-1716 2323 l
-1720 2320 l
-1724 2317 l
-1728 2314 l
-1732 2310 l
-1736 2307 l
-1740 2304 l
-1744 2301 l
-1748 2298 l
-1752 2295 l
-1756 2292 l
-1760 2289 l
-1765 2286 l
-1769 2282 l
-1773 2279 l
-1777 2276 l
-1782 2273 l
-1786 2270 l
-1790 2267 l
-1795 2264 l
-1799 2261 l
-1803 2258 l
-1808 2255 l
-1812 2252 l
-1817 2249 l
-1822 2245 l
-1826 2242 l
-1831 2239 l
-1835 2236 l
-1840 2233 l
-1845 2230 l
-1849 2227 l
-1854 2224 l
-1859 2221 l
-1864 2218 l
-1869 2215 l
-1874 2212 l
-1879 2209 l
-1883 2206 l
-1888 2203 l
-1893 2200 l
-1899 2198 l
-1904 2195 l
-1909 2192 l
-1914 2189 l
-1919 2186 l
-S
-1919 2186 m
-1924 2183 l
-1930 2180 l
-1935 2177 l
-1940 2174 l
-1945 2171 l
-1951 2169 l
-1956 2166 l
-1962 2163 l
-1967 2160 l
-1973 2157 l
-1978 2154 l
-1984 2152 l
-1989 2149 l
-1995 2146 l
-2001 2143 l
-2006 2141 l
-2012 2138 l
-2018 2135 l
-2024 2132 l
-2030 2130 l
-2036 2127 l
-2041 2124 l
-2047 2122 l
-2053 2119 l
-2059 2116 l
-2065 2114 l
-2072 2111 l
-2078 2109 l
-2084 2106 l
-2090 2103 l
-2096 2101 l
-2103 2098 l
-2109 2096 l
-2115 2093 l
-2122 2091 l
-2128 2088 l
-2135 2086 l
-2141 2084 l
-2148 2081 l
-2154 2079 l
-2161 2076 l
-2167 2074 l
-2174 2072 l
-2181 2069 l
-2187 2067 l
-2194 2065 l
-2201 2063 l
-2208 2060 l
-2215 2058 l
-2222 2056 l
-2229 2054 l
-2236 2052 l
-2243 2050 l
-2250 2048 l
-2257 2045 l
-2264 2043 l
-2271 2041 l
-2279 2039 l
-2286 2037 l
-2293 2035 l
-2300 2034 l
-2308 2032 l
-2315 2030 l
-2323 2028 l
-2330 2026 l
-2338 2024 l
-2345 2022 l
-2353 2021 l
-2360 2019 l
-2368 2017 l
-2376 2016 l
-2383 2014 l
-2391 2012 l
-2399 2011 l
-2407 2009 l
-2415 2008 l
-2423 2006 l
-2431 2005 l
-2439 2004 l
-2447 2002 l
-2455 2001 l
-2463 1999 l
-2471 1998 l
-2479 1997 l
-2487 1996 l
-2495 1995 l
-2504 1993 l
-2512 1992 l
-2520 1991 l
-2529 1990 l
-2537 1989 l
-2545 1988 l
-2554 1987 l
-2562 1986 l
-2571 1986 l
-2579 1985 l
-2588 1984 l
-2597 1983 l
-2605 1983 l
-2614 1982 l
-2623 1981 l
-2631 1981 l
-2640 1980 l
-2649 1980 l
-2658 1979 l
-2667 1979 l
-2676 1978 l
-2684 1978 l
-2693 1978 l
-2702 1978 l
-2711 1977 l
-2720 1977 l
-2729 1977 l
-2739 1977 l
-2748 1977 l
-2757 1977 l
-2766 1977 l
-2775 1977 l
-2784 1977 l
-2794 1978 l
-2803 1978 l
-2812 1978 l
-2821 1979 l
-2831 1979 l
-2840 1979 l
-2849 1980 l
-2859 1980 l
-2868 1981 l
-2878 1982 l
-2887 1982 l
-2896 1983 l
-2906 1984 l
-2915 1985 l
-2925 1986 l
-2935 1987 l
-2944 1988 l
-2954 1989 l
-2963 1990 l
-2973 1991 l
-2982 1992 l
-2992 1993 l
-3002 1995 l
-3011 1996 l
-3021 1998 l
-3031 1999 l
-3040 2001 l
-3050 2002 l
-3060 2004 l
-3069 2006 l
-3079 2007 l
-3089 2009 l
-3098 2011 l
-3108 2013 l
-3118 2015 l
-3128 2017 l
-3137 2019 l
-3147 2021 l
-3157 2023 l
-3167 2026 l
-3176 2028 l
-3186 2030 l
-3196 2033 l
-3206 2035 l
-3215 2038 l
-3225 2040 l
-3235 2043 l
-3245 2045 l
-3254 2048 l
-3264 2051 l
-3274 2054 l
-3284 2057 l
-3293 2060 l
-3303 2063 l
-3313 2066 l
-3322 2069 l
-3332 2072 l
-3342 2075 l
-3351 2079 l
-3361 2082 l
-3371 2085 l
-3380 2089 l
-3390 2092 l
-3399 2096 l
-3409 2100 l
-3419 2103 l
-3428 2107 l
-3438 2111 l
-3447 2115 l
-3457 2118 l
-3466 2122 l
-3476 2126 l
-3485 2130 l
-3494 2135 l
-3504 2139 l
-3513 2143 l
-3522 2147 l
-3532 2151 l
-3541 2156 l
-3550 2160 l
-S
-3550 2160 m
-3559 2165 l
-3569 2169 l
-3578 2174 l
-3587 2178 l
-3596 2183 l
-3605 2187 l
-3614 2192 l
-3623 2197 l
-3632 2202 l
-3641 2207 l
-3650 2212 l
-3659 2217 l
-3668 2222 l
-3677 2227 l
-3686 2232 l
-3694 2237 l
-3703 2242 l
-3712 2247 l
-3720 2252 l
-3729 2258 l
-3738 2263 l
-3746 2268 l
-3755 2274 l
-3763 2279 l
-3772 2285 l
-3780 2290 l
-3788 2296 l
-3797 2302 l
-3805 2307 l
-3813 2313 l
-3821 2319 l
-3829 2324 l
-3838 2330 l
-3846 2336 l
-3854 2342 l
-3862 2348 l
-3869 2354 l
-3877 2360 l
-3885 2366 l
-3893 2372 l
-3901 2378 l
-3908 2384 l
-3916 2390 l
-3924 2396 l
-3931 2402 l
-3939 2408 l
-3946 2415 l
-3954 2421 l
-3961 2427 l
-3968 2433 l
-3976 2440 l
-3983 2446 l
-3990 2452 l
-3997 2459 l
-4004 2465 l
-4011 2472 l
-4018 2478 l
-4025 2485 l
-4032 2491 l
-4039 2498 l
-4045 2504 l
-4052 2511 l
-4059 2517 l
-4065 2524 l
-4072 2530 l
-4079 2537 l
-4085 2544 l
-4091 2550 l
-4098 2557 l
-4104 2564 l
-4110 2570 l
-4117 2577 l
-4123 2584 l
-4129 2590 l
-4135 2597 l
-4141 2604 l
-4147 2611 l
-4153 2617 l
-4159 2624 l
-4165 2631 l
-4170 2638 l
-4176 2645 l
-4182 2651 l
-4187 2658 l
-4193 2665 l
-4198 2672 l
-4204 2679 l
-4209 2686 l
-4215 2692 l
-4220 2699 l
-4225 2706 l
-4230 2713 l
-4235 2720 l
-4241 2727 l
-4246 2734 l
-4251 2740 l
-4256 2747 l
-4260 2754 l
-4265 2761 l
-4270 2768 l
-4275 2775 l
-4280 2782 l
-4284 2788 l
-4289 2795 l
-4293 2802 l
-4298 2809 l
-4302 2816 l
-4307 2823 l
-4311 2829 l
-4316 2836 l
-4320 2843 l
-4324 2850 l
-4328 2857 l
-4332 2864 l
-4337 2870 l
-4341 2877 l
-4345 2884 l
-4349 2891 l
-4352 2898 l
-4356 2904 l
-4360 2911 l
-4364 2918 l
-4368 2925 l
-4371 2931 l
-4375 2938 l
-4379 2945 l
-4382 2952 l
-4386 2958 l
-4389 2965 l
-4393 2972 l
-4396 2978 l
-4399 2985 l
-4403 2992 l
-4406 2998 l
-4409 3005 l
-4412 3011 l
-4415 3018 l
-4418 3025 l
-4421 3031 l
-4425 3038 l
-4427 3044 l
-4430 3051 l
-4433 3057 l
-4436 3064 l
-4439 3070 l
-4442 3077 l
-4444 3083 l
-4447 3090 l
-4450 3096 l
-4452 3103 l
-4455 3109 l
-4458 3115 l
-4460 3122 l
-4463 3128 l
-4465 3135 l
-4467 3141 l
-4470 3147 l
-4472 3154 l
-4474 3160 l
-4477 3166 l
-4479 3172 l
-4481 3179 l
-4483 3185 l
-4485 3191 l
-4487 3197 l
-4489 3203 l
-4491 3210 l
-4493 3216 l
-4495 3222 l
-4497 3228 l
-4499 3234 l
-4501 3240 l
-4503 3246 l
-4505 3252 l
-4506 3258 l
-4508 3264 l
-4510 3270 l
-4512 3276 l
-4513 3282 l
-4515 3288 l
-4516 3294 l
-4518 3300 l
-4519 3306 l
-4521 3312 l
-4522 3318 l
-4524 3323 l
-4525 3329 l
-4527 3335 l
-4528 3341 l
-4529 3347 l
-4530 3352 l
-4532 3358 l
-4533 3364 l
-4534 3369 l
-4535 3375 l
-4536 3381 l
-4538 3386 l
-4539 3392 l
-4540 3397 l
-S
-4540 3397 m
-4541 3403 l
-4542 3409 l
-4543 3414 l
-4544 3420 l
-4545 3425 l
-4546 3431 l
-4546 3436 l
-4547 3442 l
-4548 3447 l
-4549 3452 l
-4550 3458 l
-4551 3463 l
-4551 3469 l
-4552 3474 l
-4553 3479 l
-4553 3484 l
-4554 3490 l
-4555 3495 l
-4555 3500 l
-4556 3505 l
-4556 3511 l
-4557 3516 l
-4558 3521 l
-4558 3526 l
-4559 3531 l
-4559 3536 l
-4559 3542 l
-4560 3547 l
-4560 3552 l
-4561 3557 l
-4561 3562 l
-4561 3567 l
-4562 3572 l
-4562 3577 l
-4562 3582 l
-4562 3587 l
-4563 3592 l
-4563 3596 l
-4563 3601 l
-4563 3606 l
-4563 3611 l
-4564 3616 l
-4564 3621 l
-4564 3625 l
-4564 3630 l
-4564 3635 l
-4564 3640 l
-4564 3644 l
-4564 3649 l
-4564 3654 l
-4564 3658 l
-4564 3663 l
-4564 3668 l
-4564 3672 l
-4564 3677 l
-4564 3682 l
-4564 3686 l
-4563 3691 l
-4563 3695 l
-4560 3757 l
-4553 3815 l
-4544 3871 l
-4533 3923 l
-4520 3973 l
-4505 4020 l
-4488 4064 l
-4470 4106 l
-4451 4146 l
-4430 4184 l
-4408 4220 l
-4385 4254 l
-4361 4285 l
-4337 4316 l
-4311 4344 l
-4285 4371 l
-4258 4396 l
-4230 4420 l
-4202 4443 l
-4173 4464 l
-4144 4484 l
-4114 4503 l
-4083 4520 l
-4053 4536 l
-4021 4552 l
-3989 4566 l
-3957 4579 l
-3925 4591 l
-S
-3638 5218 m
-3636 5218 l
-3634 5218 l
-3632 5218 l
-3601 5218 l
-3570 5217 l
-3539 5216 l
-3507 5215 l
-3476 5213 l
-3443 5211 l
-3411 5208 l
-3379 5205 l
-3346 5202 l
-3313 5198 l
-3280 5194 l
-3246 5189 l
-3213 5184 l
-3179 5179 l
-3145 5173 l
-3111 5167 l
-3077 5160 l
-3043 5153 l
-3008 5146 l
-2974 5138 l
-2939 5130 l
-2905 5121 l
-2870 5112 l
-2835 5103 l
-2800 5093 l
-2766 5083 l
-2731 5073 l
-2696 5062 l
-2661 5051 l
-2626 5040 l
-2591 5028 l
-2556 5016 l
-2522 5003 l
-2487 4990 l
-2452 4977 l
-2418 4963 l
-2383 4950 l
-2349 4935 l
-2314 4921 l
-2280 4906 l
-2246 4891 l
-2212 4876 l
-2179 4860 l
-2145 4844 l
-2112 4828 l
-2079 4811 l
-2046 4794 l
-2013 4777 l
-1980 4760 l
-1948 4742 l
-1916 4724 l
-1884 4706 l
-1853 4687 l
-1821 4669 l
-1790 4650 l
-1760 4631 l
-1729 4611 l
-1699 4592 l
-1669 4572 l
-1640 4552 l
-1611 4532 l
-1582 4512 l
-1554 4491 l
-1526 4471 l
-1498 4450 l
-1471 4429 l
-1444 4408 l
-1418 4386 l
-1392 4365 l
-1366 4343 l
-1341 4322 l
-1316 4300 l
-1292 4278 l
-1268 4256 l
-1245 4234 l
-1222 4211 l
-1200 4189 l
-1178 4167 l
-1156 4144 l
-1136 4122 l
-1115 4099 l
-1095 4077 l
-1076 4054 l
-1057 4031 l
-1039 4009 l
-1021 3986 l
-1004 3963 l
-987 3940 l
-971 3918 l
-956 3895 l
-941 3872 l
-926 3850 l
-912 3827 l
-899 3804 l
-886 3782 l
-874 3759 l
-863 3737 l
-852 3714 l
-842 3692 l
-832 3670 l
-823 3648 l
-814 3626 l
-807 3604 l
-799 3582 l
-793 3560 l
-787 3539 l
-781 3517 l
-777 3496 l
-773 3475 l
-769 3454 l
-766 3433 l
-764 3412 l
-763 3391 l
-762 3371 l
-761 3350 l
-762 3330 l
-763 3310 l
-765 3290 l
-767 3270 l
-770 3250 l
-774 3230 l
-779 3210 l
-785 3189 l
-792 3167 l
-802 3140 l
-802 3138 l
-803 3136 l
-804 3134 l
-805 3131 l
-806 3129 l
-807 3126 l
-808 3124 l
-810 3121 l
-811 3118 l
-812 3115 l
-814 3112 l
-815 3108 l
-817 3105 l
-819 3100 l
-820 3096 l
-823 3091 l
-825 3086 l
-828 3080 l
-831 3073 l
-835 3065 l
-840 3055 l
-845 3044 l
-852 3030 l
-862 3011 l
-875 2987 l
-894 2951 l
-896 2948 l
-898 2945 l
-899 2942 l
-901 2938 l
-903 2935 l
-906 2931 l
-908 2927 l
-910 2923 l
-912 2919 l
-915 2915 l
-918 2910 l
-920 2906 l
-923 2901 l
-926 2896 l
-929 2891 l
-933 2885 l
-936 2880 l
-940 2874 l
-944 2868 l
-948 2861 l
-952 2854 l
-956 2847 l
-961 2840 l
-966 2832 l
-972 2823 l
-978 2815 l
-984 2806 l
-990 2796 l
-998 2785 l
-1005 2774 l
-1013 2763 l
-1022 2750 l
-1032 2737 l
-1042 2723 l
-1054 2708 l
-1066 2692 l
-1080 2674 l
-1095 2655 l
-1112 2635 l
-1131 2613 l
-1152 2589 l
-1175 2563 l
-1202 2535 l
-1232 2504 l
-1267 2470 l
-S
-1267 2470 m
-1307 2432 l
-1353 2391 l
-1408 2346 l
-1412 2343 l
-1417 2339 l
-1421 2336 l
-1425 2332 l
-1430 2329 l
-1434 2326 l
-1439 2322 l
-1444 2318 l
-1448 2315 l
-1453 2311 l
-1458 2308 l
-1463 2304 l
-1468 2300 l
-1473 2297 l
-1478 2293 l
-1483 2289 l
-1488 2285 l
-1494 2282 l
-1499 2278 l
-1504 2274 l
-1510 2270 l
-1515 2266 l
-1521 2262 l
-1527 2258 l
-1533 2254 l
-1538 2250 l
-1544 2246 l
-1550 2242 l
-1556 2238 l
-1563 2234 l
-1569 2230 l
-1575 2226 l
-1582 2222 l
-1588 2218 l
-1595 2214 l
-1602 2209 l
-1608 2205 l
-1615 2201 l
-1622 2197 l
-1629 2192 l
-1636 2188 l
-1644 2184 l
-1651 2179 l
-1659 2175 l
-1666 2171 l
-1674 2166 l
-1682 2162 l
-1690 2157 l
-1698 2153 l
-1706 2148 l
-1714 2144 l
-1722 2139 l
-1731 2135 l
-1740 2130 l
-1748 2126 l
-1757 2121 l
-1766 2117 l
-1775 2112 l
-1785 2108 l
-1794 2103 l
-1804 2098 l
-1813 2094 l
-1823 2089 l
-1833 2085 l
-1843 2080 l
-1853 2075 l
-1864 2071 l
-1874 2066 l
-1885 2062 l
-1896 2057 l
-1907 2052 l
-1918 2048 l
-1929 2043 l
-1941 2039 l
-1953 2034 l
-1965 2030 l
-1977 2025 l
-1989 2021 l
-2001 2016 l
-2014 2012 l
-2026 2007 l
-2039 2003 l
-2052 1999 l
-2066 1994 l
-2079 1990 l
-2093 1986 l
-2107 1982 l
-2121 1978 l
-2135 1974 l
-2150 1970 l
-2164 1966 l
-2179 1962 l
-2194 1958 l
-2209 1954 l
-2225 1950 l
-2241 1947 l
-2257 1943 l
-2273 1940 l
-2289 1937 l
-2306 1933 l
-2322 1930 l
-2339 1927 l
-2357 1924 l
-2374 1921 l
-2392 1919 l
-2409 1916 l
-2427 1914 l
-2446 1911 l
-2464 1909 l
-2483 1907 l
-2502 1905 l
-2521 1904 l
-2540 1902 l
-2560 1901 l
-2580 1900 l
-2600 1899 l
-2620 1898 l
-2640 1897 l
-2661 1897 l
-2682 1896 l
-2702 1896 l
-2724 1897 l
-2745 1897 l
-2766 1898 l
-2788 1898 l
-2810 1900 l
-2832 1901 l
-2854 1903 l
-2876 1904 l
-2899 1906 l
-2921 1909 l
-2944 1912 l
-2967 1914 l
-2990 1918 l
-3013 1921 l
-3036 1925 l
-3059 1929 l
-3083 1933 l
-3106 1938 l
-3129 1943 l
-3153 1948 l
-3176 1953 l
-3200 1959 l
-3224 1965 l
-3247 1972 l
-3271 1979 l
-3294 1986 l
-3318 1993 l
-3342 2000 l
-3365 2008 l
-3389 2017 l
-3412 2025 l
-3435 2034 l
-3459 2043 l
-3482 2052 l
-3505 2062 l
-3528 2072 l
-3551 2082 l
-3573 2093 l
-3596 2104 l
-3618 2115 l
-3640 2126 l
-3663 2138 l
-3684 2149 l
-3706 2161 l
-3728 2174 l
-3749 2186 l
-3770 2199 l
-3791 2212 l
-3811 2225 l
-3832 2238 l
-3852 2252 l
-3872 2265 l
-3892 2279 l
-3911 2293 l
-3930 2307 l
-3949 2322 l
-3968 2336 l
-3986 2351 l
-4004 2365 l
-4022 2380 l
-4039 2395 l
-4057 2410 l
-4073 2425 l
-4090 2440 l
-4107 2455 l
-4123 2470 l
-4138 2486 l
-4154 2501 l
-4169 2516 l
-4184 2532 l
-4199 2547 l
-4213 2563 l
-4227 2578 l
-4241 2594 l
-4254 2609 l
-S
-4254 2609 m
-4268 2625 l
-4281 2640 l
-4293 2655 l
-4306 2671 l
-4318 2686 l
-4330 2701 l
-4341 2717 l
-4353 2732 l
-4364 2747 l
-4375 2762 l
-4385 2777 l
-4396 2792 l
-4406 2807 l
-4416 2822 l
-4425 2836 l
-4435 2851 l
-4444 2865 l
-4453 2880 l
-4462 2894 l
-4470 2909 l
-4478 2923 l
-4486 2937 l
-4494 2951 l
-4502 2965 l
-4510 2978 l
-4517 2992 l
-4524 3006 l
-4531 3019 l
-4538 3032 l
-4544 3046 l
-4551 3059 l
-4557 3072 l
-4563 3085 l
-4569 3098 l
-4575 3110 l
-4581 3123 l
-4586 3135 l
-4591 3148 l
-4597 3160 l
-4602 3172 l
-4606 3184 l
-4611 3196 l
-4616 3208 l
-4620 3219 l
-4625 3231 l
-4629 3242 l
-4633 3253 l
-4637 3265 l
-4641 3276 l
-4645 3287 l
-4649 3298 l
-4652 3308 l
-4656 3319 l
-4659 3329 l
-4663 3340 l
-4666 3350 l
-4669 3360 l
-4672 3371 l
-4675 3381 l
-4678 3390 l
-4681 3400 l
-4683 3410 l
-4686 3420 l
-4689 3429 l
-4691 3438 l
-4693 3448 l
-4696 3457 l
-4698 3466 l
-4700 3475 l
-4702 3484 l
-4704 3493 l
-4706 3501 l
-4708 3510 l
-4710 3519 l
-4712 3527 l
-4714 3535 l
-4716 3544 l
-4717 3552 l
-4719 3560 l
-4720 3568 l
-4722 3576 l
-4723 3584 l
-4725 3591 l
-4726 3599 l
-4728 3607 l
-4729 3614 l
-4730 3622 l
-4731 3629 l
-4732 3636 l
-4734 3644 l
-4735 3651 l
-4736 3658 l
-4737 3665 l
-4738 3672 l
-4739 3679 l
-4740 3685 l
-4741 3692 l
-4741 3699 l
-4742 3705 l
-4743 3712 l
-4744 3718 l
-4745 3725 l
-4745 3731 l
-4746 3737 l
-4747 3743 l
-4747 3749 l
-4748 3755 l
-4748 3761 l
-4749 3767 l
-4750 3773 l
-4750 3779 l
-4751 3785 l
-4756 3860 l
-4758 3925 l
-4758 3983 l
-4757 4034 l
-4755 4079 l
-4752 4120 l
-4749 4156 l
-4745 4189 l
-4742 4219 l
-4738 4246 l
-4734 4271 l
-4731 4293 l
-4727 4314 l
-4724 4334 l
-4721 4351 l
-4717 4368 l
-4714 4383 l
-4711 4398 l
-4708 4411 l
-4705 4424 l
-4703 4435 l
-4700 4446 l
-4697 4457 l
-4695 4467 l
-4692 4476 l
-4690 4485 l
-4688 4493 l
-4686 4501 l
-4684 4509 l
-4682 4516 l
-4680 4523 l
-4678 4529 l
-4676 4535 l
-4674 4541 l
-4673 4547 l
-4671 4552 l
-4670 4558 l
-4668 4563 l
-4667 4567 l
-4665 4572 l
-4664 4576 l
-4662 4581 l
-4647 4627 l
-4636 4658 l
-4628 4680 l
-4622 4697 l
-4617 4710 l
-4613 4721 l
-4609 4729 l
-4606 4737 l
-4603 4744 l
-4601 4749 l
-4599 4755 l
-4597 4759 l
-4595 4763 l
-4593 4767 l
-4592 4771 l
-4590 4774 l
-4589 4777 l
-4587 4780 l
-4586 4783 l
-4585 4786 l
-4584 4788 l
-4582 4791 l
-4569 4818 l
-4557 4839 l
-4546 4858 l
-4534 4876 l
-4522 4893 l
-4510 4909 l
-4497 4924 l
-4483 4939 l
-4470 4954 l
-4455 4968 l
-4440 4981 l
-4425 4995 l
-4408 5008 l
-4392 5020 l
-4375 5032 l
-4357 5044 l
-4339 5056 l
-4320 5067 l
-4301 5077 l
-4281 5088 l
-4261 5098 l
-4240 5107 l
-4218 5116 l
-S
-4218 5116 m
-4197 5125 l
-4174 5134 l
-4152 5142 l
-4128 5149 l
-4105 5156 l
-4080 5163 l
-4056 5170 l
-4031 5176 l
-4005 5181 l
-3979 5187 l
-3953 5192 l
-3926 5196 l
-3899 5200 l
-3872 5204 l
-3844 5207 l
-3816 5210 l
-3787 5212 l
-3758 5214 l
-3729 5216 l
-3699 5217 l
-3669 5218 l
-3639 5218 l
-S
-2956 5656 m
-2955 5655 l
-2954 5655 l
-2953 5654 l
-2939 5646 l
-2924 5639 l
-2909 5631 l
-2893 5623 l
-2876 5616 l
-2860 5608 l
-2842 5600 l
-2824 5592 l
-2806 5584 l
-2787 5577 l
-2768 5568 l
-2748 5560 l
-2728 5552 l
-2708 5544 l
-2687 5536 l
-2666 5527 l
-2645 5519 l
-2623 5510 l
-2601 5501 l
-2579 5493 l
-2557 5484 l
-2534 5475 l
-2512 5466 l
-2489 5456 l
-2466 5447 l
-2443 5438 l
-2419 5428 l
-2396 5419 l
-2372 5409 l
-2348 5399 l
-2324 5389 l
-2301 5380 l
-2277 5369 l
-2253 5359 l
-2228 5349 l
-2204 5339 l
-2180 5329 l
-2156 5318 l
-2132 5308 l
-2108 5297 l
-2084 5286 l
-2060 5276 l
-2036 5265 l
-2012 5254 l
-1988 5243 l
-1964 5233 l
-1940 5222 l
-1917 5211 l
-1893 5200 l
-1870 5189 l
-1847 5178 l
-1824 5167 l
-1801 5156 l
-1778 5146 l
-1755 5135 l
-1733 5124 l
-1710 5113 l
-1688 5103 l
-1667 5092 l
-1645 5082 l
-1623 5072 l
-1602 5061 l
-1581 5051 l
-1561 5041 l
-1540 5032 l
-1520 5022 l
-1500 5012 l
-1481 5003 l
-1461 4994 l
-1442 4985 l
-1424 4977 l
-1406 4969 l
-1388 4961 l
-1370 4953 l
-1353 4946 l
-1336 4939 l
-1319 4932 l
-1303 4926 l
-1288 4920 l
-1273 4915 l
-1258 4910 l
-1244 4906 l
-1230 4902 l
-1216 4899 l
-1204 4897 l
-1191 4895 l
-1180 4894 l
-1169 4893 l
-1158 4894 l
-1148 4895 l
-1139 4897 l
-1131 4900 l
-1123 4904 l
-1116 4908 l
-1110 4914 l
-1105 4921 l
-1100 4930 l
-1097 4939 l
-1094 4950 l
-1093 4962 l
-1093 4975 l
-1094 4990 l
-1097 5007 l
-1101 5025 l
-1107 5044 l
-1114 5066 l
-1123 5089 l
-1134 5113 l
-1148 5140 l
-1163 5168 l
-1181 5198 l
-1202 5230 l
-1225 5263 l
-1251 5298 l
-1280 5334 l
-1312 5371 l
-1348 5410 l
-1387 5449 l
-1430 5488 l
-1476 5528 l
-1525 5568 l
-1578 5607 l
-1633 5645 l
-1692 5682 l
-1753 5717 l
-1816 5750 l
-1881 5780 l
-1948 5808 l
-2015 5834 l
-2082 5856 l
-2149 5875 l
-2215 5892 l
-2280 5905 l
-2343 5915 l
-2404 5923 l
-2463 5928 l
-2519 5931 l
-2572 5932 l
-2623 5931 l
-2670 5929 l
-2714 5925 l
-2755 5920 l
-2794 5914 l
-2829 5907 l
-2861 5900 l
-2890 5892 l
-2917 5883 l
-2941 5875 l
-2962 5866 l
-2981 5857 l
-2998 5847 l
-3013 5838 l
-3025 5829 l
-3036 5820 l
-3044 5811 l
-3051 5802 l
-3056 5793 l
-3060 5784 l
-3062 5775 l
-3063 5767 l
-3062 5758 l
-3060 5750 l
-3057 5742 l
-3052 5734 l
-3047 5726 l
-3040 5718 l
-3033 5710 l
-3024 5702 l
-3015 5694 l
-3005 5686 l
-2994 5679 l
-2982 5671 l
-2969 5663 l
-2956 5656 l
-S
-3678 4650 m
-3671 4680 l
-S
-3420 4667 m
-3410 4696 l
-S
-2885 4592 m
-2874 4620 l
-S
-2621 4508 m
-2609 4536 l
-S
-2122 4260 m
-2108 4288 l
-S
-1898 4101 m
-1884 4128 l
-S
-1534 3722 m
-1518 3747 l
-S
-1407 3502 m
-1390 3527 l
-S
-1321 2997 m
-1300 3019 l
-S
-1407 2705 m
-1383 2725 l
-S
-2128 2089 m
-2098 2095 l
-S
-2959 1989 m
-2930 1980 l
-S
-4430 3050 m
-4446 3076 l
-S
-4564 3628 m
-4571 3657 l
-S
-4350 4300 m
-4348 4331 l
-S
-4152 4479 m
-4147 4509 l
-S
-3198 3069 m
-3218 3046 l
-S
-3284 3127 m
-3305 3105 l
-S
-3366 3191 m
-3387 3169 l
-S
-3444 3259 m
-3466 3238 l
-S
-3517 3332 m
-3540 3312 l
-S
-3649 3492 m
-3673 3473 l
-S
-3707 3578 m
-3732 3560 l
-S
-3760 3668 m
-3785 3650 l
-S
-3807 3761 m
-3832 3744 l
-S
-3847 3857 m
-3873 3841 l
-S
-3907 4058 m
-3935 4044 l
-S
-3927 4162 m
-3955 4149 l
-S
-3939 4267 m
-3967 4255 l
-S
-3943 4374 m
-3971 4364 l
-S
-3938 4482 m
-3967 4473 l
-S
-3902 4699 m
-3932 4692 l
-S
-3870 4807 m
-3900 4802 l
-S
-3828 4914 m
-3858 4910 l
-S
-3776 5018 m
-3806 5016 l
-S
-3713 5120 m
-3743 5119 l
-S
-3553 5311 m
-3583 5314 l
-S
-3456 5398 m
-3486 5402 l
-S
-3348 5477 m
-3378 5484 l
-S
-3228 5548 m
-3257 5557 l
-S
-3097 5608 m
-3126 5619 l
-S
-2805 5690 m
-2831 5706 l
-S
-2647 5708 m
-2670 5727 l
-S
-2482 5709 m
-2503 5731 l
-S
-2313 5691 m
-2330 5716 l
-S
-2143 5654 m
-2156 5681 l
-S
-3925 4591 m
-3873 4608 l
-3821 4622 l
-3768 4635 l
-3715 4645 l
-3660 4653 l
-3606 4659 l
-3550 4664 l
-3495 4666 l
-3438 4667 l
-3382 4666 l
-3325 4663 l
-3268 4659 l
-3211 4653 l
-3154 4646 l
-S
-3154 4646 m
-3096 4637 l
-3039 4626 l
-2981 4615 l
-2924 4601 l
-2866 4587 l
-2809 4571 l
-2752 4553 l
-2696 4534 l
-2639 4514 l
-2583 4493 l
-2528 4471 l
-2473 4447 l
-2418 4422 l
-2364 4396 l
-S
-2364 4396 m
-2311 4369 l
-2258 4341 l
-2206 4312 l
-2155 4281 l
-2105 4250 l
-2056 4217 l
-2007 4184 l
-1960 4149 l
-1914 4114 l
-1869 4077 l
-1825 4040 l
-1782 4001 l
-1740 3962 l
-1700 3922 l
-S
-1700 3922 m
-1662 3880 l
-1625 3838 l
-1589 3795 l
-1556 3751 l
-1524 3707 l
-1493 3661 l
-1465 3614 l
-1439 3567 l
-1415 3518 l
-1393 3469 l
-1374 3418 l
-1357 3367 l
-1342 3315 l
-1331 3261 l
-S
-1331 3261 m
-1330 3257 l
-1330 3253 l
-1329 3249 l
-1328 3246 l
-1328 3242 l
-1327 3238 l
-1326 3234 l
-1326 3230 l
-1325 3226 l
-1325 3222 l
-1324 3218 l
-1324 3214 l
-1323 3210 l
-1323 3207 l
-1322 3203 l
-1322 3199 l
-1321 3195 l
-1321 3191 l
-1320 3187 l
-1320 3183 l
-1320 3179 l
-1319 3175 l
-1319 3171 l
-1318 3167 l
-1318 3163 l
-1318 3159 l
-1318 3155 l
-1317 3151 l
-1317 3147 l
-1317 3143 l
-1317 3139 l
-1316 3135 l
-1316 3131 l
-1316 3127 l
-1316 3123 l
-1316 3119 l
-1316 3114 l
-1316 3110 l
-1316 3106 l
-1316 3102 l
-1316 3098 l
-1316 3094 l
-1316 3090 l
-1316 3086 l
-1316 3082 l
-1316 3078 l
-1316 3073 l
-1316 3069 l
-1316 3065 l
-1316 3061 l
-1316 3057 l
-1317 3053 l
-1317 3049 l
-1317 3044 l
-1317 3040 l
-1318 3036 l
-1318 3032 l
-1318 3028 l
-1319 3023 l
-1319 3019 l
-1319 3015 l
-1320 3011 l
-1320 3007 l
-1321 3002 l
-1321 2998 l
-1322 2994 l
-1322 2990 l
-1323 2985 l
-1323 2981 l
-1324 2977 l
-1324 2972 l
-1325 2968 l
-1326 2964 l
-1326 2960 l
-1327 2955 l
-1328 2951 l
-1328 2947 l
-1329 2942 l
-1330 2938 l
-1331 2934 l
-1332 2929 l
-1332 2925 l
-1333 2921 l
-1334 2916 l
-1335 2912 l
-1336 2908 l
-1337 2903 l
-1338 2899 l
-1339 2894 l
-1340 2890 l
-1341 2886 l
-1342 2881 l
-1343 2877 l
-1345 2872 l
-1346 2868 l
-1347 2863 l
-1348 2859 l
-1349 2854 l
-1351 2850 l
-1352 2845 l
-1353 2841 l
-1355 2837 l
-1356 2832 l
-1358 2828 l
-1359 2823 l
-1360 2819 l
-1362 2814 l
-1364 2809 l
-1365 2805 l
-1367 2800 l
-1368 2796 l
-1370 2791 l
-1372 2787 l
-1373 2782 l
-1375 2778 l
-1377 2773 l
-1379 2768 l
-1381 2764 l
-1382 2759 l
-1384 2755 l
-1386 2750 l
-1388 2745 l
-1390 2741 l
-1392 2736 l
-1394 2731 l
-1396 2727 l
-1399 2722 l
-1401 2717 l
-1403 2713 l
-1405 2708 l
-1407 2703 l
-1410 2699 l
-1412 2694 l
-1414 2689 l
-1417 2685 l
-1419 2680 l
-1422 2675 l
-1424 2671 l
-1427 2666 l
-1429 2661 l
-1432 2656 l
-1435 2652 l
-1437 2647 l
-1440 2642 l
-1443 2637 l
-1446 2633 l
-1448 2628 l
-1451 2623 l
-1454 2618 l
-1457 2613 l
-1460 2609 l
-1463 2604 l
-1466 2599 l
-1469 2594 l
-1473 2589 l
-1476 2584 l
-1479 2580 l
-1482 2575 l
-1486 2570 l
-1489 2565 l
-1492 2560 l
-1496 2555 l
-1499 2551 l
-1503 2546 l
-1506 2541 l
-1510 2536 l
-1514 2531 l
-1518 2526 l
-1521 2521 l
-1525 2516 l
-1529 2511 l
-1533 2507 l
-1537 2502 l
-1541 2497 l
-1545 2492 l
-1549 2487 l
-1553 2482 l
-1557 2477 l
-1562 2472 l
-1566 2467 l
-1570 2462 l
-1575 2457 l
-1579 2452 l
-1584 2448 l
-1588 2443 l
-1593 2438 l
-1597 2433 l
-1602 2428 l
-1607 2423 l
-1612 2418 l
-1617 2413 l
-1622 2408 l
-1627 2403 l
-1632 2398 l
-1637 2393 l
-1642 2388 l
-S
-1642 2388 m
-1647 2383 l
-1652 2378 l
-1658 2374 l
-1663 2369 l
-1669 2364 l
-1674 2359 l
-1680 2354 l
-1685 2349 l
-1691 2344 l
-1697 2339 l
-1703 2334 l
-1709 2329 l
-1715 2324 l
-1721 2320 l
-1727 2315 l
-1733 2310 l
-1739 2305 l
-1745 2300 l
-1752 2295 l
-1758 2290 l
-1765 2286 l
-1771 2281 l
-1778 2276 l
-1784 2271 l
-1791 2266 l
-1798 2261 l
-1805 2257 l
-1812 2252 l
-1819 2247 l
-1826 2242 l
-1833 2238 l
-1841 2233 l
-1848 2228 l
-1855 2224 l
-1863 2219 l
-1870 2214 l
-1878 2210 l
-1886 2205 l
-1893 2200 l
-1901 2196 l
-1909 2191 l
-1917 2187 l
-1925 2182 l
-1934 2178 l
-1942 2173 l
-1950 2169 l
-1959 2164 l
-1967 2160 l
-1976 2156 l
-1984 2151 l
-1993 2147 l
-2002 2143 l
-2011 2138 l
-2020 2134 l
-2029 2130 l
-2038 2126 l
-2047 2122 l
-2057 2118 l
-2066 2113 l
-2076 2109 l
-2085 2105 l
-2095 2101 l
-2105 2098 l
-2115 2094 l
-2124 2090 l
-2135 2086 l
-2145 2082 l
-2155 2079 l
-2165 2075 l
-2176 2071 l
-2186 2068 l
-2197 2064 l
-2207 2061 l
-2218 2057 l
-2229 2054 l
-2240 2051 l
-2251 2047 l
-2262 2044 l
-2273 2041 l
-2284 2038 l
-2296 2035 l
-2307 2032 l
-2318 2029 l
-2330 2026 l
-2342 2023 l
-2354 2021 l
-2365 2018 l
-2377 2015 l
-2390 2013 l
-2402 2010 l
-2414 2008 l
-2426 2006 l
-2439 2004 l
-2451 2001 l
-2464 1999 l
-2476 1997 l
-2489 1995 l
-2502 1994 l
-2515 1992 l
-2528 1990 l
-2541 1989 l
-2554 1987 l
-2567 1986 l
-2580 1985 l
-2594 1983 l
-2607 1982 l
-2621 1981 l
-2634 1980 l
-2648 1980 l
-2662 1979 l
-2676 1978 l
-2689 1978 l
-2703 1978 l
-2717 1977 l
-2731 1977 l
-2746 1977 l
-2760 1977 l
-2774 1977 l
-2788 1977 l
-2803 1978 l
-2817 1978 l
-2832 1979 l
-2846 1980 l
-2861 1981 l
-2875 1982 l
-2890 1983 l
-2905 1984 l
-2920 1985 l
-2935 1987 l
-2949 1988 l
-2964 1990 l
-2979 1992 l
-2994 1994 l
-3009 1996 l
-3024 1998 l
-3039 2000 l
-3054 2003 l
-3069 2006 l
-3084 2008 l
-3100 2011 l
-3115 2014 l
-3130 2017 l
-3145 2021 l
-3160 2024 l
-3175 2028 l
-3191 2031 l
-3206 2035 l
-3221 2039 l
-3236 2043 l
-3251 2047 l
-3266 2052 l
-3281 2056 l
-3297 2061 l
-3312 2066 l
-3327 2070 l
-3342 2075 l
-3357 2081 l
-3372 2086 l
-3387 2091 l
-3402 2097 l
-3416 2102 l
-3431 2108 l
-3446 2114 l
-3461 2120 l
-3476 2126 l
-3490 2133 l
-3505 2139 l
-3519 2146 l
-3534 2152 l
-3548 2159 l
-3563 2166 l
-3577 2173 l
-3591 2180 l
-3605 2187 l
-3619 2195 l
-3633 2202 l
-3647 2210 l
-3661 2218 l
-3675 2225 l
-3689 2233 l
-3702 2241 l
-3716 2250 l
-3729 2258 l
-3742 2266 l
-3756 2275 l
-3769 2283 l
-3782 2292 l
-3795 2300 l
-3808 2309 l
-3820 2318 l
-3833 2327 l
-3846 2336 l
-3858 2345 l
-3870 2354 l
-3883 2364 l
-3895 2373 l
-S
-3895 2373 m
-3907 2382 l
-3919 2392 l
-3930 2401 l
-3942 2411 l
-3954 2421 l
-3965 2431 l
-3976 2440 l
-3988 2450 l
-3999 2460 l
-4010 2470 l
-4020 2480 l
-4031 2490 l
-4042 2500 l
-4052 2511 l
-4063 2521 l
-4073 2531 l
-4083 2541 l
-4093 2552 l
-4103 2562 l
-4113 2573 l
-4122 2583 l
-4132 2593 l
-4141 2604 l
-4150 2614 l
-4159 2625 l
-4168 2636 l
-4177 2646 l
-4186 2657 l
-4195 2667 l
-4203 2678 l
-4212 2689 l
-4220 2699 l
-4228 2710 l
-4236 2721 l
-4244 2731 l
-4252 2742 l
-4259 2753 l
-4267 2763 l
-4274 2774 l
-4282 2785 l
-4289 2795 l
-4296 2806 l
-4303 2817 l
-4310 2827 l
-4317 2838 l
-4323 2848 l
-4330 2859 l
-4336 2870 l
-4342 2880 l
-4349 2891 l
-4355 2901 l
-4361 2912 l
-4366 2922 l
-4372 2933 l
-4378 2943 l
-4383 2954 l
-4389 2964 l
-4394 2975 l
-4399 2985 l
-4404 2995 l
-4409 3006 l
-4414 3016 l
-4419 3026 l
-4424 3036 l
-4428 3046 l
-4433 3057 l
-4437 3067 l
-4442 3077 l
-4446 3087 l
-4450 3097 l
-4454 3107 l
-4458 3117 l
-4462 3127 l
-4466 3137 l
-4470 3147 l
-4473 3156 l
-4477 3166 l
-4480 3176 l
-4483 3186 l
-4487 3195 l
-4490 3205 l
-4493 3214 l
-4496 3224 l
-4499 3233 l
-4502 3243 l
-4505 3252 l
-4507 3262 l
-4510 3271 l
-4513 3280 l
-4515 3289 l
-4518 3299 l
-4520 3308 l
-4522 3317 l
-4524 3326 l
-4527 3335 l
-4529 3344 l
-4531 3353 l
-4533 3362 l
-4534 3371 l
-4536 3379 l
-4538 3388 l
-4540 3397 l
-4541 3406 l
-4543 3414 l
-4544 3423 l
-4546 3431 l
-4547 3440 l
-4548 3448 l
-4550 3457 l
-4551 3465 l
-4552 3473 l
-4553 3482 l
-4554 3490 l
-4555 3498 l
-4556 3506 l
-4557 3514 l
-4558 3522 l
-4558 3530 l
-4559 3538 l
-4560 3546 l
-4560 3554 l
-4561 3562 l
-4561 3570 l
-4562 3577 l
-4562 3585 l
-4563 3593 l
-4563 3600 l
-4563 3608 l
-4564 3615 l
-4564 3623 l
-4564 3630 l
-4564 3638 l
-4564 3645 l
-4564 3652 l
-4564 3660 l
-4564 3667 l
-4564 3674 l
-4564 3681 l
-4564 3688 l
-4563 3695 l
-4563 3702 l
-4563 3709 l
-4562 3716 l
-4562 3723 l
-4562 3730 l
-4561 3737 l
-4561 3743 l
-4560 3750 l
-4560 3757 l
-4559 3763 l
-4558 3770 l
-4558 3777 l
-4557 3783 l
-4556 3790 l
-4556 3796 l
-4555 3803 l
-4554 3809 l
-4553 3815 l
-4552 3822 l
-4551 3828 l
-4550 3834 l
-4549 3840 l
-4548 3846 l
-4547 3853 l
-4546 3859 l
-4545 3865 l
-4544 3871 l
-4543 3877 l
-4542 3883 l
-4541 3888 l
-4539 3894 l
-4538 3900 l
-4537 3906 l
-4536 3912 l
-4534 3917 l
-4533 3923 l
-4532 3929 l
-4530 3934 l
-4529 3940 l
-4527 3946 l
-4526 3951 l
-4524 3957 l
-4523 3962 l
-4521 3967 l
-4520 3973 l
-4518 3978 l
-4517 3983 l
-4515 3989 l
-4513 3994 l
-4512 3999 l
-4510 4004 l
-4508 4010 l
-4506 4015 l
-4505 4020 l
-4503 4025 l
-4501 4030 l
-S
-4501 4030 m
-4499 4035 l
-4498 4040 l
-4496 4045 l
-4494 4050 l
-4492 4055 l
-4490 4059 l
-4488 4064 l
-4486 4069 l
-4484 4074 l
-4482 4079 l
-4480 4083 l
-4478 4088 l
-4476 4093 l
-4474 4097 l
-4472 4102 l
-4470 4106 l
-4468 4111 l
-4466 4116 l
-4464 4120 l
-4461 4124 l
-4459 4129 l
-4457 4133 l
-4455 4138 l
-4453 4142 l
-4451 4146 l
-4448 4151 l
-4446 4155 l
-4444 4159 l
-4441 4163 l
-4439 4168 l
-4437 4172 l
-4435 4176 l
-4432 4180 l
-4430 4184 l
-4427 4188 l
-4425 4192 l
-4423 4196 l
-4420 4200 l
-4418 4204 l
-4415 4208 l
-4413 4212 l
-4411 4216 l
-4408 4220 l
-4406 4224 l
-4403 4227 l
-4401 4231 l
-4398 4235 l
-4395 4239 l
-4393 4242 l
-4390 4246 l
-4388 4250 l
-4385 4254 l
-4383 4257 l
-4380 4261 l
-4377 4264 l
-4375 4268 l
-4372 4271 l
-4369 4275 l
-4367 4278 l
-4364 4282 l
-4361 4285 l
-4359 4289 l
-4356 4292 l
-4353 4296 l
-4351 4299 l
-4348 4302 l
-4345 4306 l
-4342 4309 l
-4340 4312 l
-4337 4316 l
-4334 4319 l
-4331 4322 l
-4328 4325 l
-4326 4328 l
-4323 4332 l
-4320 4335 l
-4317 4338 l
-4314 4341 l
-4311 4344 l
-4308 4347 l
-4305 4350 l
-4303 4353 l
-4300 4356 l
-4297 4359 l
-4294 4362 l
-4291 4365 l
-4288 4368 l
-4285 4371 l
-4282 4374 l
-4279 4377 l
-4276 4380 l
-4273 4382 l
-4270 4385 l
-4267 4388 l
-4264 4391 l
-4261 4394 l
-4258 4396 l
-4255 4399 l
-4252 4402 l
-4249 4405 l
-4246 4407 l
-4243 4410 l
-4240 4412 l
-4237 4415 l
-4234 4418 l
-4230 4420 l
-4227 4423 l
-4224 4425 l
-4221 4428 l
-4218 4430 l
-4215 4433 l
-4212 4435 l
-4208 4438 l
-4205 4440 l
-4202 4443 l
-4199 4445 l
-4196 4448 l
-4193 4450 l
-4189 4452 l
-4186 4455 l
-4183 4457 l
-4180 4459 l
-4177 4462 l
-4173 4464 l
-4170 4466 l
-4167 4469 l
-4164 4471 l
-4160 4473 l
-4157 4475 l
-4154 4477 l
-4150 4480 l
-4147 4482 l
-4144 4484 l
-4141 4486 l
-4137 4488 l
-4134 4490 l
-4131 4492 l
-4127 4494 l
-4124 4496 l
-4121 4499 l
-4117 4501 l
-4114 4503 l
-4111 4505 l
-4107 4507 l
-4104 4509 l
-4100 4510 l
-4097 4512 l
-4094 4514 l
-4090 4516 l
-4087 4518 l
-4083 4520 l
-4080 4522 l
-4077 4524 l
-4073 4526 l
-4025 4550 l
-3975 4572 l
-3972 4573 l
-3968 4575 l
-3964 4576 l
-3961 4577 l
-3957 4579 l
-3954 4580 l
-3950 4582 l
-3946 4583 l
-3943 4584 l
-3939 4586 l
-3936 4587 l
-3932 4588 l
-3928 4590 l
-3928 4590 l
-3928 4590 l
-3927 4590 l
-3927 4590 l
-3927 4590 l
-3927 4590 l
-3926 4590 l
-3926 4590 l
-3926 4590 l
-3926 4590 l
-3925 4591 l
-3925 4591 l
-3925 4591 l
-S
-3109 3016 m
-3148 3038 l
-3186 3061 l
-3223 3085 l
-3260 3110 l
-3296 3136 l
-3331 3163 l
-3366 3191 l
-3400 3219 l
-3433 3249 l
-3465 3280 l
-3497 3311 l
-3527 3343 l
-3557 3376 l
-3586 3410 l
-S
-3586 3410 m
-3613 3445 l
-3640 3480 l
-3666 3516 l
-3691 3553 l
-3715 3590 l
-3738 3629 l
-3760 3668 l
-3781 3707 l
-3800 3747 l
-3819 3788 l
-3836 3829 l
-3852 3871 l
-3867 3913 l
-3881 3956 l
-S
-3881 3956 m
-3893 3999 l
-3904 4043 l
-3914 4087 l
-3922 4132 l
-3929 4177 l
-3935 4222 l
-3939 4267 l
-3941 4313 l
-3943 4359 l
-3942 4405 l
-3940 4451 l
-3937 4498 l
-3931 4544 l
-3925 4591 l
-S
-3925 4591 m
-3916 4637 l
-3906 4684 l
-3894 4730 l
-3880 4776 l
-3865 4823 l
-3847 4868 l
-3828 4914 l
-3807 4959 l
-3784 5004 l
-3759 5048 l
-3732 5091 l
-3703 5134 l
-3672 5177 l
-3639 5218 l
-S
-3639 5218 m
-3603 5258 l
-3566 5298 l
-3527 5336 l
-3485 5374 l
-3442 5410 l
-3396 5444 l
-3348 5477 l
-3298 5509 l
-3246 5538 l
-3192 5566 l
-3136 5592 l
-3078 5616 l
-3018 5637 l
-2956 5656 l
-S
-2956 5656 m
-2952 5657 l
-2947 5658 l
-2943 5660 l
-2938 5661 l
-2934 5662 l
-2929 5663 l
-2924 5664 l
-2920 5665 l
-2915 5667 l
-2911 5668 l
-2906 5669 l
-2902 5670 l
-2897 5671 l
-2892 5672 l
-2888 5673 l
-2883 5674 l
-2879 5675 l
-2874 5676 l
-2869 5677 l
-2865 5678 l
-2860 5679 l
-2855 5680 l
-2851 5681 l
-2846 5682 l
-2841 5683 l
-2837 5684 l
-2832 5685 l
-2827 5686 l
-2823 5687 l
-2818 5687 l
-2813 5688 l
-2808 5689 l
-2804 5690 l
-2799 5691 l
-2794 5691 l
-2789 5692 l
-2785 5693 l
-2780 5694 l
-2775 5694 l
-2770 5695 l
-2765 5696 l
-2761 5697 l
-2756 5697 l
-2751 5698 l
-2746 5698 l
-2741 5699 l
-2737 5700 l
-2732 5700 l
-2727 5701 l
-2722 5701 l
-2717 5702 l
-2712 5702 l
-2707 5703 l
-2702 5703 l
-2698 5704 l
-2693 5704 l
-2688 5705 l
-2683 5705 l
-2678 5706 l
-2673 5706 l
-2668 5706 l
-2663 5707 l
-2658 5707 l
-2653 5707 l
-2648 5708 l
-2643 5708 l
-2638 5708 l
-2633 5709 l
-2628 5709 l
-2623 5709 l
-2618 5709 l
-2613 5709 l
-2608 5710 l
-2603 5710 l
-2598 5710 l
-2593 5710 l
-2588 5710 l
-2583 5710 l
-2578 5710 l
-2573 5710 l
-2568 5710 l
-2563 5711 l
-2558 5711 l
-2553 5711 l
-2548 5711 l
-2543 5710 l
-2538 5710 l
-2533 5710 l
-2528 5710 l
-2522 5710 l
-2517 5710 l
-2512 5710 l
-2507 5710 l
-2502 5710 l
-2497 5709 l
-2492 5709 l
-2487 5709 l
-2482 5709 l
-2476 5708 l
-2471 5708 l
-2466 5708 l
-2461 5708 l
-2456 5707 l
-2451 5707 l
-2446 5707 l
-2441 5706 l
-2435 5706 l
-2430 5705 l
-2425 5705 l
-2420 5704 l
-2415 5704 l
-2410 5703 l
-2404 5703 l
-2399 5702 l
-2394 5702 l
-2389 5701 l
-2384 5701 l
-2379 5700 l
-2373 5700 l
-2368 5699 l
-2363 5698 l
-2358 5698 l
-2353 5697 l
-2347 5696 l
-2342 5695 l
-2337 5695 l
-2332 5694 l
-2327 5693 l
-2321 5692 l
-2316 5692 l
-2311 5691 l
-2306 5690 l
-2301 5689 l
-2295 5688 l
-2290 5687 l
-2285 5686 l
-2280 5685 l
-2275 5684 l
-2269 5683 l
-2264 5682 l
-2259 5681 l
-2254 5680 l
-2249 5679 l
-2243 5678 l
-2238 5677 l
-2233 5676 l
-2228 5675 l
-2223 5674 l
-2217 5673 l
-2212 5671 l
-2207 5670 l
-2202 5669 l
-2197 5668 l
-2191 5666 l
-2186 5665 l
-2181 5664 l
-2176 5663 l
-2171 5661 l
-2165 5660 l
-2160 5658 l
-2155 5657 l
-2150 5656 l
-2145 5654 l
-2139 5653 l
-2134 5651 l
-2129 5650 l
-2124 5648 l
-2119 5647 l
-2113 5645 l
-2108 5644 l
-2103 5642 l
-2098 5641 l
-2093 5639 l
-2088 5637 l
-2082 5636 l
-2077 5634 l
-2072 5632 l
-2067 5631 l
-2062 5629 l
-2057 5627 l
-2052 5625 l
-2046 5624 l
-2041 5622 l
-2036 5620 l
-2031 5618 l
-2026 5616 l
-2021 5614 l
-2016 5612 l
-2011 5610 l
-2005 5609 l
-2000 5607 l
-1995 5605 l
-1990 5603 l
-1985 5601 l
-1980 5599 l
-1975 5597 l
-S
-4756 3875 m
-4759 3878 l
-4759 3882 l
-4759 3887 l
-4759 3891 l
-4759 3896 l
-4759 3900 l
-4759 3905 l
-4759 3909 l
-S
-4759 3909 m
-4759 3913 l
-4759 3918 l
-4759 3922 l
-4759 3927 l
-4759 3931 l
-4759 3936 l
-4759 3940 l
-4759 3945 l
-4759 3949 l
-S
-4759 3949 m
-4759 3954 l
-4759 3958 l
-4759 3963 l
-4759 3967 l
-4759 3972 l
-4759 3976 l
-4759 3981 l
-4759 3985 l
-4759 3989 l
-S
-4759 3989 m
-4759 3994 l
-4759 3998 l
-4759 4003 l
-4759 4007 l
-4759 4012 l
-4759 4016 l
-4759 4021 l
-4759 4025 l
-4759 4030 l
-S
-4756 4041 m
-4759 4039 l
-4759 4034 l
-4759 4030 l
-S
-4716 3545 m
-4718 3547 l
-S
-4718 3547 m
-4718 3551 l
-4718 3556 l
-4718 3560 l
-4718 3565 l
-4721 3567 l
-4723 3569 l
-4723 3574 l
-4723 3578 l
-4723 3583 l
-4723 3587 l
-S
-4723 3587 m
-4723 3592 l
-4725 3594 l
-4727 3596 l
-4727 3601 l
-4727 3605 l
-4727 3610 l
-4727 3614 l
-4730 3616 l
-4732 3619 l
-4732 3623 l
-4732 3627 l
-S
-4732 3627 m
-4732 3632 l
-4732 3636 l
-4732 3641 l
-4732 3645 l
-4734 3648 l
-4736 3650 l
-4736 3654 l
-4736 3659 l
-4736 3663 l
-4736 3668 l
-S
-4736 3668 m
-4736 3672 l
-4736 3677 l
-4738 3679 l
-4741 3681 l
-4741 3686 l
-4741 3690 l
-4741 3694 l
-4741 3699 l
-4741 3703 l
-4741 3708 l
-S
-4741 3708 m
-4743 3710 l
-4745 3712 l
-4745 3717 l
-4745 3721 l
-4745 3726 l
-4745 3730 l
-4745 3735 l
-4745 3739 l
-4745 3744 l
-4745 3748 l
-S
-4745 3748 m
-4747 3750 l
-4750 3753 l
-4750 3757 l
-4750 3762 l
-4750 3766 l
-4750 3770 l
-4750 3775 l
-4750 3779 l
-4750 3784 l
-4750 3788 l
-S
-4750 3788 m
-4750 3793 l
-4750 3797 l
-4752 3800 l
-4754 3802 l
-4754 3806 l
-4754 3811 l
-4754 3815 l
-4754 3820 l
-4754 3824 l
-4754 3829 l
-S
-4754 3829 m
-4754 3833 l
-4754 3838 l
-4754 3842 l
-4754 3846 l
-4754 3851 l
-4754 3855 l
-4754 3860 l
-4754 3864 l
-4754 3869 l
-S
-4754 3869 m
-4754 3873 l
-4756 3875 l
-S
-4754 4070 m
-4754 4065 l
-4754 4061 l
-4754 4056 l
-4754 4052 l
-4754 4048 l
-4754 4043 l
-4756 4041 l
-S
-4754 4070 m
-4754 4074 l
-4754 4079 l
-4754 4083 l
-4754 4088 l
-4754 4092 l
-4754 4097 l
-4754 4101 l
-4754 4106 l
-4754 4110 l
-S
-4754 4110 m
-4754 4115 l
-4752 4117 l
-4750 4119 l
-4750 4124 l
-4750 4128 l
-4750 4132 l
-4750 4137 l
-4750 4141 l
-4750 4146 l
-4750 4150 l
-S
-4750 4150 m
-4750 4155 l
-4750 4159 l
-4750 4164 l
-4750 4168 l
-4747 4170 l
-4745 4173 l
-4745 4177 l
-4745 4182 l
-4745 4186 l
-4745 4191 l
-S
-4745 4191 m
-4745 4195 l
-4745 4199 l
-4745 4204 l
-4745 4208 l
-4743 4211 l
-4741 4213 l
-4741 4217 l
-4741 4222 l
-4741 4226 l
-4741 4231 l
-S
-4741 4231 m
-4741 4235 l
-4741 4240 l
-4738 4242 l
-4736 4244 l
-4736 4249 l
-4736 4253 l
-4736 4258 l
-4736 4262 l
-4736 4267 l
-4736 4271 l
-S
-4736 4271 m
-4734 4273 l
-4732 4275 l
-4732 4280 l
-4732 4284 l
-4732 4289 l
-4732 4293 l
-4732 4298 l
-4730 4300 l
-4727 4302 l
-4727 4307 l
-4727 4311 l
-S
-4727 4311 m
-4727 4316 l
-4727 4320 l
-4727 4325 l
-4725 4327 l
-4723 4329 l
-4723 4334 l
-4723 4338 l
-4723 4342 l
-4723 4347 l
-4721 4349 l
-4718 4351 l
-S
-4716 4372 m
-4718 4369 l
-4718 4365 l
-4718 4360 l
-4718 4356 l
-4718 4351 l
-S
-4676 3384 m
-4678 3386 l
-S
-4678 3386 m
-4678 3391 l
-4678 3395 l
-4680 3397 l
-4683 3400 l
-4683 3404 l
-4683 3408 l
-4683 3413 l
-4685 3415 l
-4687 3417 l
-4687 3422 l
-4687 3426 l
-S
-4687 3426 m
-4687 3431 l
-4689 3433 l
-4692 3435 l
-4692 3440 l
-4692 3444 l
-4692 3449 l
-4694 3451 l
-4696 3453 l
-4696 3458 l
-4696 3462 l
-4696 3467 l
-S
-4696 3467 m
-4698 3469 l
-4701 3471 l
-4701 3476 l
-4701 3480 l
-4701 3484 l
-4703 3487 l
-4705 3489 l
-4705 3493 l
-4705 3498 l
-4705 3502 l
-4707 3505 l
-4709 3507 l
-S
-4709 3507 m
-4709 3511 l
-4709 3516 l
-4709 3520 l
-4709 3525 l
-4712 3527 l
-4714 3529 l
-4714 3534 l
-4714 3538 l
-4714 3543 l
-4716 3545 l
-S
-4714 4392 m
-4714 4387 l
-4714 4383 l
-4714 4378 l
-4714 4374 l
-4716 4372 l
-S
-4714 4392 m
-4712 4394 l
-4709 4396 l
-4709 4401 l
-4709 4405 l
-4709 4410 l
-4709 4414 l
-4707 4416 l
-4705 4418 l
-4705 4423 l
-4705 4427 l
-4705 4432 l
-S
-4705 4432 m
-4703 4434 l
-4701 4436 l
-4701 4441 l
-4701 4445 l
-4701 4450 l
-4698 4452 l
-4696 4454 l
-4696 4459 l
-4696 4463 l
-4696 4468 l
-4694 4470 l
-4692 4472 l
-S
-4692 4472 m
-4692 4477 l
-4692 4481 l
-4692 4486 l
-4689 4488 l
-4687 4490 l
-4687 4494 l
-4687 4499 l
-4687 4503 l
-4685 4506 l
-4683 4508 l
-4683 4512 l
-S
-4676 4537 m
-4678 4535 l
-4678 4530 l
-4678 4526 l
-4678 4521 l
-4680 4519 l
-4683 4517 l
-4683 4512 l
-S
-4636 3259 m
-4638 3261 l
-4638 3265 l
-S
-4638 3265 m
-4638 3270 l
-4640 3272 l
-4642 3274 l
-4642 3279 l
-4642 3283 l
-4645 3286 l
-4647 3288 l
-4647 3292 l
-4647 3297 l
-4649 3299 l
-4651 3301 l
-4651 3306 l
-S
-4651 3306 m
-4651 3310 l
-4654 3312 l
-4656 3315 l
-4656 3319 l
-4656 3324 l
-4658 3326 l
-4660 3328 l
-4660 3333 l
-4660 3337 l
-4663 3339 l
-4665 3341 l
-4665 3346 l
-S
-4665 3346 m
-4665 3350 l
-4667 3353 l
-4669 3355 l
-4669 3359 l
-4669 3364 l
-4669 3368 l
-4671 3371 l
-4674 3373 l
-4674 3377 l
-4674 3382 l
-4676 3384 l
-S
-4669 4553 m
-4671 4550 l
-4674 4548 l
-4674 4544 l
-4674 4539 l
-4676 4537 l
-S
-4669 4553 m
-4669 4557 l
-4669 4561 l
-4669 4566 l
-4667 4568 l
-4665 4570 l
-4665 4575 l
-4665 4579 l
-4663 4582 l
-4660 4584 l
-4660 4588 l
-4660 4593 l
-S
-4660 4593 m
-4658 4595 l
-4656 4597 l
-4656 4602 l
-4656 4606 l
-4654 4608 l
-4651 4611 l
-4651 4615 l
-4651 4620 l
-4649 4622 l
-4647 4624 l
-4647 4629 l
-4647 4633 l
-S
-4636 4662 m
-4638 4660 l
-4638 4655 l
-4638 4651 l
-4640 4649 l
-4642 4646 l
-4642 4642 l
-4642 4637 l
-4645 4635 l
-4647 4633 l
-S
-4595 3156 m
-4598 3158 l
-4598 3163 l
-4598 3167 l
-4600 3169 l
-4602 3172 l
-4602 3176 l
-4604 3178 l
-4607 3181 l
-4607 3185 l
-S
-4607 3185 m
-4607 3190 l
-4609 3192 l
-4611 3194 l
-4611 3198 l
-4613 3201 l
-4616 3203 l
-4616 3207 l
-4616 3212 l
-4618 3214 l
-4620 3216 l
-4620 3221 l
-4622 3223 l
-4625 3225 l
-S
-4625 3225 m
-4625 3230 l
-4625 3234 l
-4627 3236 l
-4629 3239 l
-4629 3243 l
-4629 3248 l
-4631 3250 l
-4633 3252 l
-4633 3257 l
-4636 3259 l
-S
-4629 4673 m
-4631 4671 l
-4633 4669 l
-4633 4664 l
-4636 4662 l
-S
-4629 4673 m
-4629 4678 l
-4629 4682 l
-4627 4684 l
-4625 4687 l
-4625 4691 l
-4625 4696 l
-4622 4698 l
-4620 4700 l
-4620 4704 l
-4618 4707 l
-4616 4709 l
-4616 4713 l
-S
-4616 4713 m
-4616 4718 l
-4613 4720 l
-4611 4722 l
-4611 4727 l
-4609 4729 l
-4607 4731 l
-4607 4736 l
-4607 4740 l
-4604 4742 l
-4602 4745 l
-4602 4749 l
-4600 4751 l
-4598 4754 l
-S
-4595 4765 m
-4598 4763 l
-4598 4758 l
-4598 4754 l
-S
-4555 3067 m
-4557 3069 l
-4557 3073 l
-4560 3076 l
-4562 3078 l
-4562 3082 l
-4562 3087 l
-4564 3089 l
-4566 3091 l
-4566 3096 l
-4569 3098 l
-4571 3100 l
-4571 3105 l
-S
-4571 3105 m
-4573 3107 l
-4575 3109 l
-4575 3114 l
-4578 3116 l
-4580 3118 l
-4580 3122 l
-4582 3125 l
-4584 3127 l
-4584 3131 l
-4584 3136 l
-4587 3138 l
-4589 3140 l
-4589 3145 l
-S
-4589 3145 m
-4591 3147 l
-4593 3149 l
-4593 3154 l
-4595 3156 l
-S
-4580 4794 m
-4582 4792 l
-4584 4789 l
-4584 4785 l
-4587 4783 l
-4589 4780 l
-4589 4776 l
-4591 4774 l
-4593 4772 l
-4593 4767 l
-4595 4765 l
-S
-4580 4794 m
-4580 4798 l
-4580 4803 l
-4578 4805 l
-4575 4807 l
-4575 4812 l
-4573 4814 l
-4571 4816 l
-4571 4821 l
-4569 4823 l
-4566 4825 l
-4566 4830 l
-4564 4832 l
-4562 4834 l
-S
-4555 4854 m
-4557 4852 l
-4557 4847 l
-4557 4843 l
-4560 4841 l
-4562 4839 l
-4562 4834 l
-S
-4515 2991 m
-4517 2993 l
-4520 2995 l
-4522 2997 l
-4522 3002 l
-4524 3004 l
-4526 3006 l
-4526 3011 l
-4528 3013 l
-4531 3015 l
-4531 3020 l
-4533 3022 l
-4535 3024 l
-S
-4535 3024 m
-4535 3029 l
-4537 3031 l
-4540 3033 l
-4540 3038 l
-4542 3040 l
-4544 3042 l
-4544 3047 l
-4546 3049 l
-4549 3051 l
-4549 3055 l
-4551 3058 l
-4553 3060 l
-4553 3064 l
-S
-4555 3067 m
-4553 3064 l
-S
-4544 4874 m
-4546 4872 l
-4549 4870 l
-4549 4865 l
-4551 4863 l
-4553 4861 l
-4553 4856 l
-4555 4854 l
-S
-4544 4874 m
-4544 4879 l
-4542 4881 l
-4540 4883 l
-4540 4888 l
-4537 4890 l
-4535 4892 l
-4535 4897 l
-4533 4899 l
-4531 4901 l
-4531 4906 l
-4528 4908 l
-4526 4910 l
-4526 4915 l
-S
-4515 4930 m
-4517 4928 l
-4517 4923 l
-4520 4921 l
-4522 4919 l
-4524 4917 l
-4526 4915 l
-S
-4475 2915 m
-4477 2917 l
-4477 2921 l
-4479 2924 l
-4482 2926 l
-4482 2930 l
-4484 2933 l
-4486 2935 l
-4486 2939 l
-4488 2941 l
-4490 2944 l
-S
-4490 2944 m
-4493 2946 l
-4495 2948 l
-4495 2953 l
-4497 2955 l
-4499 2957 l
-4499 2962 l
-4502 2964 l
-4504 2966 l
-4504 2971 l
-4506 2973 l
-4508 2975 l
-4508 2979 l
-4511 2982 l
-4513 2984 l
-S
-4513 2984 m
-4513 2988 l
-4515 2991 l
-S
-4504 4955 m
-4504 4950 l
-4506 4948 l
-4508 4946 l
-4508 4941 l
-4511 4939 l
-4513 4937 l
-4513 4932 l
-4515 4930 l
-S
-4504 4955 m
-4502 4957 l
-4499 4959 l
-4499 4964 l
-4497 4966 l
-4495 4968 l
-4493 4970 l
-4490 4973 l
-4490 4977 l
-4488 4979 l
-4486 4982 l
-4486 4986 l
-4484 4988 l
-4482 4990 l
-4482 4995 l
-S
-4475 5002 m
-4477 4999 l
-4479 4997 l
-4482 4995 l
-S
-4435 2852 m
-4437 2854 l
-4439 2857 l
-4441 2859 l
-4441 2863 l
-S
-4441 2863 m
-4444 2866 l
-4446 2868 l
-4448 2870 l
-4450 2872 l
-4450 2877 l
-4452 2879 l
-4455 2881 l
-4455 2886 l
-4457 2888 l
-4459 2890 l
-4461 2892 l
-4464 2895 l
-4464 2899 l
-4466 2901 l
-4468 2903 l
-S
-4468 2903 m
-4468 2908 l
-4470 2910 l
-4473 2912 l
-4475 2915 l
-S
-4455 5035 m
-4457 5033 l
-4459 5031 l
-4459 5026 l
-4461 5024 l
-4464 5022 l
-4466 5020 l
-4468 5017 l
-4468 5013 l
-4470 5011 l
-4473 5008 l
-4473 5004 l
-4475 5002 l
-S
-4435 5069 m
-4437 5066 l
-4439 5064 l
-4441 5062 l
-4441 5058 l
-4444 5055 l
-4446 5053 l
-4446 5049 l
-4448 5046 l
-4450 5044 l
-4452 5042 l
-4455 5040 l
-4455 5035 l
-S
-4394 2790 m
-4397 2792 l
-4397 2796 l
-4399 2798 l
-4401 2801 l
-4403 2803 l
-4406 2805 l
-4406 2810 l
-4408 2812 l
-4410 2814 l
-4412 2816 l
-4414 2819 l
-4414 2823 l
-S
-4414 2823 m
-4417 2825 l
-4419 2828 l
-4421 2830 l
-4423 2832 l
-4423 2836 l
-4426 2839 l
-4428 2841 l
-4430 2843 l
-4432 2845 l
-4432 2850 l
-4435 2852 l
-S
-4432 5075 m
-4432 5071 l
-4435 5069 l
-S
-4432 5075 m
-4430 5078 l
-4428 5080 l
-4426 5082 l
-4423 5084 l
-4423 5089 l
-4421 5091 l
-4419 5093 l
-4417 5096 l
-4414 5098 l
-4414 5102 l
-4412 5104 l
-4410 5107 l
-4408 5109 l
-4406 5111 l
-4406 5116 l
-S
-4394 5131 m
-4397 5129 l
-4397 5125 l
-4399 5122 l
-4401 5120 l
-4403 5118 l
-4406 5116 l
-S
-4354 2736 m
-4356 2738 l
-4359 2740 l
-4361 2743 l
-S
-4361 2743 m
-4363 2745 l
-4365 2747 l
-4365 2752 l
-4368 2754 l
-4370 2756 l
-4372 2758 l
-4374 2760 l
-4377 2763 l
-4379 2765 l
-4379 2769 l
-4381 2772 l
-4383 2774 l
-4385 2776 l
-4388 2778 l
-4388 2783 l
-S
-4388 2783 m
-4390 2785 l
-4392 2787 l
-4394 2790 l
-S
-4374 5156 m
-4377 5154 l
-4379 5151 l
-4381 5149 l
-4383 5147 l
-4385 5145 l
-4388 5142 l
-4388 5138 l
-4390 5136 l
-4392 5133 l
-4394 5131 l
-S
-4354 5185 m
-4356 5183 l
-4359 5180 l
-4361 5178 l
-4363 5176 l
-4365 5174 l
-4365 5169 l
-4368 5167 l
-4370 5165 l
-4372 5163 l
-4374 5160 l
-4374 5156 l
-S
-4314 2682 m
-4316 2685 l
-4318 2687 l
-4321 2689 l
-4323 2691 l
-4325 2693 l
-4325 2698 l
-4327 2700 l
-4330 2702 l
-S
-4330 2702 m
-4332 2705 l
-4334 2707 l
-4336 2709 l
-4339 2711 l
-4339 2716 l
-4341 2718 l
-4343 2720 l
-4345 2723 l
-4347 2725 l
-4350 2727 l
-4352 2729 l
-4352 2734 l
-4354 2736 l
-S
-4347 5196 m
-4350 5194 l
-4352 5192 l
-4352 5187 l
-4354 5185 l
-S
-4347 5196 m
-4345 5198 l
-4343 5201 l
-4341 5203 l
-4339 5205 l
-4339 5209 l
-4336 5212 l
-4334 5214 l
-4332 5216 l
-4330 5218 l
-4327 5221 l
-4325 5223 l
-4325 5227 l
-4323 5230 l
-4321 5232 l
-4318 5234 l
-4316 5236 l
-S
-4314 5239 m
-4316 5236 l
-S
-4274 2633 m
-4276 2635 l
-4278 2638 l
-4280 2640 l
-4283 2642 l
-4285 2644 l
-4287 2647 l
-4289 2649 l
-4289 2653 l
-4292 2655 l
-4294 2658 l
-4296 2660 l
-4298 2662 l
-S
-4298 2662 m
-4301 2664 l
-4303 2667 l
-4305 2669 l
-4307 2671 l
-4309 2673 l
-4312 2676 l
-4312 2680 l
-4314 2682 l
-S
-4314 5239 m
-4312 5241 l
-4309 5243 l
-4307 5245 l
-4307 5250 l
-4305 5252 l
-4303 5254 l
-4301 5256 l
-4298 5259 l
-4296 5261 l
-4294 5263 l
-4292 5265 l
-4289 5268 l
-4289 5272 l
-4287 5274 l
-4285 5277 l
-S
-4274 5288 m
-4276 5285 l
-4278 5283 l
-4280 5281 l
-4283 5279 l
-4285 5277 l
-S
-4233 2584 m
-4236 2586 l
-4238 2588 l
-4240 2591 l
-4240 2595 l
-4242 2597 l
-4245 2600 l
-4247 2602 l
-4249 2604 l
-4251 2606 l
-4254 2609 l
-4256 2611 l
-4258 2613 l
-4260 2615 l
-4263 2617 l
-4265 2620 l
-4267 2622 l
-S
-4267 2622 m
-4267 2626 l
-4269 2629 l
-4271 2631 l
-4274 2633 l
-S
-4249 5317 m
-4251 5314 l
-4254 5312 l
-4256 5310 l
-4258 5308 l
-4260 5306 l
-4263 5303 l
-4265 5301 l
-4267 5299 l
-4267 5294 l
-4269 5292 l
-4271 5290 l
-4274 5288 l
-S
-4233 5337 m
-4236 5335 l
-4236 5330 l
-4238 5328 l
-4240 5326 l
-4242 5323 l
-4245 5321 l
-4247 5319 l
-4249 5317 l
-S
-4193 2544 m
-4196 2546 l
-4198 2548 l
-4200 2550 l
-4202 2553 l
-4204 2555 l
-4207 2557 l
-4209 2559 l
-4211 2562 l
-4213 2564 l
-4216 2566 l
-4218 2568 l
-4220 2571 l
-4222 2573 l
-4225 2575 l
-4227 2577 l
-4229 2579 l
-4231 2582 l
-S
-4233 2584 m
-4231 2582 l
-S
-4213 5357 m
-4216 5355 l
-4218 5352 l
-4220 5350 l
-4222 5348 l
-4225 5346 l
-4227 5344 l
-4229 5341 l
-4231 5339 l
-4233 5337 l
-S
-4193 5377 m
-4196 5375 l
-4198 5373 l
-4200 5370 l
-4202 5368 l
-4204 5366 l
-4207 5364 l
-4209 5361 l
-4211 5359 l
-4213 5357 l
-S
-4153 2499 m
-4155 2501 l
-S
-4155 2501 m
-4158 2504 l
-4160 2506 l
-4162 2508 l
-4164 2510 l
-4166 2512 l
-4169 2515 l
-4171 2517 l
-4173 2519 l
-4175 2521 l
-4178 2524 l
-4180 2526 l
-4182 2528 l
-4184 2530 l
-4187 2533 l
-4189 2535 l
-4191 2537 l
-4191 2542 l
-S
-4193 2544 m
-4191 2542 l
-S
-4173 5397 m
-4175 5395 l
-4178 5393 l
-4180 5390 l
-4182 5388 l
-4184 5386 l
-4187 5384 l
-4189 5382 l
-4191 5379 l
-4193 5377 l
-S
-4153 5422 m
-4155 5420 l
-4158 5417 l
-4160 5415 l
-4162 5413 l
-4164 5411 l
-4166 5408 l
-4169 5406 l
-4171 5404 l
-4173 5402 l
-4173 5397 l
-S
-4113 2463 m
-4117 2463 l
-4120 2466 l
-4122 2468 l
-4124 2470 l
-4126 2472 l
-4128 2474 l
-4131 2477 l
-4133 2479 l
-4135 2481 l
-4137 2483 l
-4140 2486 l
-4142 2488 l
-4144 2490 l
-4146 2492 l
-4149 2495 l
-4151 2497 l
-4153 2499 l
-S
-4137 5437 m
-4140 5435 l
-4142 5433 l
-4144 5431 l
-4146 5428 l
-4149 5426 l
-4151 5424 l
-4153 5422 l
-S
-4113 5457 m
-4115 5455 l
-4117 5453 l
-4120 5451 l
-4122 5449 l
-4124 5446 l
-4126 5444 l
-4128 5442 l
-4131 5440 l
-4135 5440 l
-4137 5437 l
-S
-4073 2423 m
-4075 2425 l
-4077 2428 l
-4079 2430 l
-4082 2432 l
-4084 2434 l
-4086 2436 l
-4088 2439 l
-4090 2441 l
-4093 2443 l
-4095 2445 l
-4097 2448 l
-4099 2450 l
-4102 2452 l
-4104 2454 l
-4106 2457 l
-4108 2459 l
-4111 2461 l
-S
-4113 2463 m
-4111 2461 l
-S
-4093 5478 m
-4095 5475 l
-4097 5473 l
-4099 5471 l
-4102 5469 l
-4104 5466 l
-4106 5464 l
-4108 5462 l
-4111 5460 l
-4113 5457 l
-S
-4073 5498 m
-4075 5495 l
-4077 5493 l
-4079 5491 l
-4082 5489 l
-4084 5487 l
-4086 5484 l
-4088 5482 l
-4090 5480 l
-4093 5478 l
-S
-4032 2387 m
-4035 2390 l
-4037 2392 l
-4039 2394 l
-4041 2396 l
-4044 2399 l
-4046 2401 l
-4048 2403 l
-4050 2405 l
-4053 2407 l
-4055 2410 l
-4057 2412 l
-4059 2414 l
-4064 2414 l
-4066 2416 l
-4068 2419 l
-4070 2421 l
-S
-4073 2423 m
-4070 2421 l
-S
-4048 5518 m
-4050 5516 l
-4053 5513 l
-4055 5511 l
-4057 5509 l
-4059 5507 l
-4061 5504 l
-4064 5502 l
-4068 5502 l
-4070 5500 l
-4073 5498 l
-S
-4032 5529 m
-4037 5529 l
-4039 5527 l
-4041 5525 l
-4044 5522 l
-4046 5520 l
-4048 5518 l
-S
-3992 2356 m
-3994 2358 l
-3997 2361 l
-3999 2363 l
-4001 2365 l
-4006 2365 l
-4008 2367 l
-4010 2369 l
-4012 2372 l
-4015 2374 l
-4017 2376 l
-4019 2378 l
-4021 2381 l
-S
-4021 2381 m
-4023 2383 l
-4026 2385 l
-4028 2387 l
-4032 2387 l
-S
-3999 5558 m
-4001 5556 l
-4006 5556 l
-4008 5554 l
-4010 5551 l
-4012 5549 l
-4015 5547 l
-4017 5545 l
-4019 5542 l
-4021 5540 l
-4023 5538 l
-4026 5536 l
-4028 5533 l
-4030 5531 l
-4032 5529 l
-S
-3992 5565 m
-3994 5563 l
-3997 5560 l
-3999 5558 l
-S
-3952 2325 m
-3954 2327 l
-3956 2329 l
-3961 2329 l
-3963 2331 l
-3965 2334 l
-3968 2336 l
-3970 2338 l
-3972 2340 l
-S
-3972 2340 m
-3974 2343 l
-3979 2343 l
-3981 2345 l
-3983 2347 l
-3985 2349 l
-3988 2352 l
-3990 2354 l
-3992 2356 l
-S
-3952 5596 m
-3954 5594 l
-3956 5592 l
-3961 5592 l
-3963 5589 l
-3965 5587 l
-3968 5585 l
-3970 5583 l
-3972 5580 l
-3974 5578 l
-3977 5576 l
-3979 5574 l
-3983 5574 l
-3985 5571 l
-3988 5569 l
-3990 5567 l
-3992 5565 l
-S
-3912 2293 m
-3914 2296 l
-3916 2298 l
-3918 2300 l
-S
-3918 2300 m
-3921 2302 l
-3925 2302 l
-3927 2305 l
-3930 2307 l
-3932 2309 l
-3934 2311 l
-3936 2314 l
-3939 2316 l
-3943 2316 l
-3945 2318 l
-3947 2320 l
-3950 2323 l
-3952 2325 l
-S
-3950 5598 m
-3952 5596 l
-S
-3912 5627 m
-3914 5625 l
-3916 5623 l
-3918 5621 l
-3921 5618 l
-3925 5618 l
-3927 5616 l
-3930 5614 l
-3932 5612 l
-3934 5609 l
-3936 5607 l
-3939 5605 l
-3943 5605 l
-3945 5603 l
-3947 5601 l
-3950 5598 l
-S
-3872 2267 m
-3876 2267 l
-3878 2269 l
-3880 2271 l
-3883 2273 l
-3885 2276 l
-3889 2276 l
-3892 2278 l
-3894 2280 l
-3896 2282 l
-3898 2285 l
-3901 2287 l
-3903 2289 l
-3907 2289 l
-3909 2291 l
-3912 2293 l
-S
-3896 5638 m
-3898 5636 l
-3901 5634 l
-3903 5632 l
-3907 5632 l
-3909 5630 l
-3912 5627 l
-S
-3872 5654 m
-3876 5654 l
-3878 5652 l
-3880 5650 l
-3883 5647 l
-3885 5645 l
-3887 5643 l
-3889 5641 l
-3894 5641 l
-3896 5638 l
-S
-3831 2240 m
-3836 2240 l
-3838 2242 l
-3840 2244 l
-3842 2247 l
-3845 2249 l
-3849 2249 l
-3851 2251 l
-3854 2253 l
-3856 2256 l
-3858 2258 l
-3863 2258 l
-3865 2260 l
-S
-3865 2260 m
-3867 2262 l
-3869 2264 l
-3872 2267 l
-S
-3838 5679 m
-3840 5676 l
-3842 5674 l
-3845 5672 l
-3849 5672 l
-3851 5670 l
-3854 5668 l
-3856 5665 l
-3858 5663 l
-3863 5663 l
-3865 5661 l
-3867 5659 l
-3869 5656 l
-3872 5654 l
-S
-3831 5681 m
-3836 5681 l
-3838 5679 l
-S
-3791 2213 m
-3796 2213 l
-3798 2215 l
-3800 2218 l
-3802 2220 l
-S
-3802 2220 m
-3804 2222 l
-3809 2222 l
-3811 2224 l
-3813 2226 l
-3816 2229 l
-3818 2231 l
-3822 2231 l
-3825 2233 l
-3827 2235 l
-3829 2238 l
-3831 2240 l
-S
-3831 5681 m
-3829 5683 l
-3827 5685 l
-3825 5688 l
-3822 5690 l
-3818 5690 l
-3816 5692 l
-3813 5694 l
-3811 5697 l
-3809 5699 l
-3804 5699 l
-3802 5701 l
-3800 5703 l
-3796 5703 l
-3793 5706 l
-3791 5708 l
-S
-3751 2186 m
-3753 2188 l
-3755 2191 l
-3760 2191 l
-3762 2193 l
-3764 2195 l
-3766 2197 l
-3769 2200 l
-3773 2200 l
-3775 2202 l
-3778 2204 l
-3782 2204 l
-3784 2206 l
-3787 2209 l
-3789 2211 l
-3791 2213 l
-S
-3775 5719 m
-3778 5717 l
-3780 5714 l
-3782 5712 l
-3787 5712 l
-3789 5710 l
-3791 5708 l
-S
-3751 5735 m
-3753 5732 l
-3755 5730 l
-3758 5728 l
-3760 5726 l
-3764 5726 l
-3766 5723 l
-3769 5721 l
-3773 5721 l
-3775 5719 l
-S
-3711 2164 m
-3713 2166 l
-3715 2168 l
-3720 2168 l
-3722 2171 l
-3724 2173 l
-3729 2173 l
-3731 2175 l
-3733 2177 l
-3737 2177 l
-3740 2180 l
-S
-3740 2180 m
-3742 2182 l
-3744 2184 l
-3746 2186 l
-3751 2186 l
-S
-3711 5757 m
-3713 5755 l
-3715 5752 l
-3720 5752 l
-3722 5750 l
-3724 5748 l
-3729 5748 l
-3731 5746 l
-3733 5744 l
-3735 5741 l
-3737 5739 l
-3742 5739 l
-3744 5737 l
-3746 5735 l
-3751 5735 l
-S
-3670 2142 m
-3673 2144 l
-3675 2146 l
-3679 2146 l
-3682 2148 l
-3684 2150 l
-3688 2150 l
-3691 2153 l
-3693 2155 l
-3697 2155 l
-3699 2157 l
-3702 2159 l
-3706 2159 l
-3708 2162 l
-3711 2164 l
-S
-3704 5759 m
-3706 5757 l
-3711 5757 l
-S
-3670 5779 m
-3673 5777 l
-3675 5775 l
-3679 5775 l
-3682 5773 l
-3684 5770 l
-3688 5770 l
-3691 5768 l
-3693 5766 l
-3697 5766 l
-3699 5764 l
-3702 5761 l
-3704 5759 l
-S
-3630 2119 m
-3632 2121 l
-3635 2124 l
-3639 2124 l
-3641 2126 l
-3644 2128 l
-3648 2128 l
-3650 2130 l
-3653 2133 l
-3657 2133 l
-3659 2135 l
-3661 2137 l
-3664 2139 l
-S
-3670 2142 m
-3666 2142 l
-3664 2139 l
-S
-3630 5797 m
-3635 5797 l
-3637 5795 l
-3639 5793 l
-3644 5793 l
-3646 5790 l
-3648 5788 l
-3653 5788 l
-3655 5786 l
-3657 5784 l
-3661 5784 l
-3664 5781 l
-3666 5779 l
-3670 5779 l
-S
-3590 2101 m
-3594 2101 l
-3597 2104 l
-3599 2106 l
-3603 2106 l
-3606 2108 l
-3608 2110 l
-3612 2110 l
-3615 2112 l
-3617 2115 l
-3621 2115 l
-3623 2117 l
-3626 2119 l
-3630 2119 l
-S
-3628 5799 m
-3630 5797 l
-S
-3590 5819 m
-3592 5817 l
-3594 5815 l
-3599 5815 l
-3601 5813 l
-3603 5811 l
-3608 5811 l
-3612 5811 l
-3615 5808 l
-3617 5806 l
-3621 5806 l
-3623 5804 l
-3626 5802 l
-3628 5799 l
-S
-3550 2083 m
-3554 2083 l
-3556 2086 l
-3559 2088 l
-3563 2088 l
-3565 2090 l
-3568 2092 l
-3572 2092 l
-3577 2092 l
-3579 2095 l
-3581 2097 l
-3585 2097 l
-3588 2099 l
-S
-3590 2101 m
-3588 2099 l
-S
-3550 5837 m
-3554 5837 l
-3556 5835 l
-3559 5833 l
-3563 5833 l
-3565 5831 l
-3568 5828 l
-3572 5828 l
-3574 5826 l
-3577 5824 l
-3581 5824 l
-3583 5822 l
-3585 5819 l
-3590 5819 l
-S
-3510 2066 m
-3514 2066 l
-3516 2068 l
-3518 2070 l
-3523 2070 l
-3527 2070 l
-3530 2072 l
-3532 2075 l
-3536 2075 l
-3539 2077 l
-3541 2079 l
-3545 2079 l
-3548 2081 l
-3550 2083 l
-S
-3548 5840 m
-3550 5837 l
-S
-3510 5855 m
-3514 5855 l
-3516 5853 l
-3518 5851 l
-3523 5851 l
-3525 5849 l
-3527 5846 l
-3532 5846 l
-3536 5846 l
-3539 5844 l
-3541 5842 l
-3545 5842 l
-3548 5840 l
-S
-3469 2048 m
-3474 2048 l
-3476 2050 l
-3478 2052 l
-3483 2052 l
-3485 2054 l
-3487 2057 l
-3492 2057 l
-3496 2057 l
-3498 2059 l
-S
-3498 2059 m
-3501 2061 l
-3505 2061 l
-3507 2063 l
-3510 2066 l
-S
-3469 5873 m
-3472 5871 l
-3474 5869 l
-3478 5869 l
-3483 5869 l
-3485 5866 l
-3487 5864 l
-3492 5864 l
-3494 5862 l
-3496 5860 l
-3501 5860 l
-3505 5860 l
-3507 5857 l
-3510 5855 l
-S
-3429 2030 m
-3431 2032 l
-3434 2034 l
-3438 2034 l
-3440 2037 l
-3442 2039 l
-3447 2039 l
-3451 2039 l
-3454 2041 l
-3456 2043 l
-3460 2043 l
-3463 2045 l
-3465 2048 l
-3469 2048 l
-S
-3454 5880 m
-3456 5878 l
-3460 5878 l
-3463 5875 l
-3465 5873 l
-3469 5873 l
-S
-3429 5887 m
-3434 5887 l
-3438 5887 l
-3440 5884 l
-3442 5882 l
-3447 5882 l
-3451 5882 l
-3454 5880 l
-S
-3389 2016 m
-3393 2016 l
-3396 2019 l
-S
-3396 2019 m
-3398 2021 l
-3402 2021 l
-3405 2023 l
-3407 2025 l
-3411 2025 l
-3416 2025 l
-3418 2028 l
-3420 2030 l
-3425 2030 l
-3429 2030 l
-S
-3389 5904 m
-3391 5902 l
-3393 5900 l
-3398 5900 l
-3402 5900 l
-3405 5898 l
-3407 5895 l
-3411 5895 l
-3416 5895 l
-3418 5893 l
-3420 5891 l
-3425 5891 l
-3427 5889 l
-3429 5887 l
-S
-3349 2003 m
-3353 2003 l
-3355 2005 l
-3358 2007 l
-3362 2007 l
-3367 2007 l
-3369 2010 l
-3371 2012 l
-3375 2012 l
-3380 2012 l
-3382 2014 l
-3384 2016 l
-3389 2016 l
-S
-3349 5918 m
-3353 5918 l
-3355 5916 l
-3358 5913 l
-3362 5913 l
-3367 5913 l
-3369 5911 l
-3371 5909 l
-3375 5909 l
-3378 5907 l
-3380 5904 l
-3384 5904 l
-3389 5904 l
-S
-3308 1990 m
-3313 1990 l
-3315 1992 l
-3317 1994 l
-3322 1994 l
-3326 1994 l
-3329 1996 l
-3331 1999 l
-3335 1999 l
-3340 1999 l
-3342 2001 l
-3344 2003 l
-3349 2003 l
-S
-3342 5920 m
-3344 5918 l
-3349 5918 l
-S
-3308 5931 m
-3311 5929 l
-3313 5927 l
-3317 5927 l
-3322 5927 l
-3326 5927 l
-3329 5925 l
-3331 5922 l
-3335 5922 l
-3340 5922 l
-3342 5920 l
-S
-3268 1976 m
-3270 1978 l
-S
-3270 1978 m
-3273 1981 l
-3277 1981 l
-3282 1981 l
-3284 1983 l
-3286 1985 l
-3291 1985 l
-3295 1985 l
-3299 1985 l
-3302 1987 l
-3304 1990 l
-3308 1990 l
-S
-3268 5940 m
-3273 5940 l
-3277 5940 l
-3282 5940 l
-3284 5938 l
-3286 5936 l
-3291 5936 l
-3295 5936 l
-3297 5933 l
-3299 5931 l
-3304 5931 l
-3308 5931 l
-S
-3228 1967 m
-3232 1967 l
-3237 1967 l
-3239 1969 l
-3241 1972 l
-3246 1972 l
-3250 1972 l
-3255 1972 l
-3257 1974 l
-3259 1976 l
-3264 1976 l
-3268 1976 l
-S
-3228 5954 m
-3232 5954 l
-3235 5951 l
-3237 5949 l
-3241 5949 l
-3246 5949 l
-3250 5949 l
-3253 5947 l
-3255 5945 l
-3259 5945 l
-3264 5945 l
-3266 5942 l
-3268 5940 l
-S
-3188 1958 m
-3192 1958 l
-3197 1958 l
-3201 1958 l
-3203 1961 l
-3206 1963 l
-3210 1963 l
-3215 1963 l
-3219 1963 l
-3221 1965 l
-3224 1967 l
-3228 1967 l
-S
-3203 5960 m
-3206 5958 l
-3210 5958 l
-3215 5958 l
-3219 5958 l
-3221 5956 l
-3224 5954 l
-3228 5954 l
-S
-3188 5962 m
-3192 5962 l
-3197 5962 l
-3201 5962 l
-3203 5960 l
-S
-3148 1945 m
-3150 1947 l
-3152 1949 l
-3156 1949 l
-3161 1949 l
-3165 1949 l
-3168 1952 l
-3170 1954 l
-3174 1954 l
-3179 1954 l
-3183 1954 l
-3186 1956 l
-3188 1958 l
-S
-3188 5962 m
-3186 5965 l
-3183 5967 l
-3179 5967 l
-3174 5967 l
-3170 5967 l
-3168 5969 l
-3165 5971 l
-3161 5971 l
-3156 5971 l
-3152 5971 l
-3148 5971 l
-S
-3107 1936 m
-3110 1938 l
-S
-3110 1938 m
-3112 1940 l
-3116 1940 l
-3121 1940 l
-3125 1940 l
-3127 1943 l
-3130 1945 l
-3134 1945 l
-3139 1945 l
-3143 1945 l
-3148 1945 l
-S
-3107 5980 m
-3112 5980 l
-3116 5980 l
-3121 5980 l
-3125 5980 l
-3127 5978 l
-3130 5976 l
-3134 5976 l
-3139 5976 l
-3143 5976 l
-3145 5974 l
-3148 5971 l
-S
-3067 1932 m
-3072 1932 l
-3076 1932 l
-3081 1932 l
-3085 1932 l
-3087 1934 l
-3089 1936 l
-3094 1936 l
-3098 1936 l
-3103 1936 l
-3107 1936 l
-S
-3067 5989 m
-3072 5989 l
-3076 5989 l
-3081 5989 l
-3083 5987 l
-3085 5985 l
-3089 5985 l
-3094 5985 l
-3098 5985 l
-3103 5985 l
-3105 5983 l
-3107 5980 l
-S
-3027 1923 m
-3031 1923 l
-3036 1923 l
-3038 1925 l
-3040 1927 l
-3045 1927 l
-3049 1927 l
-3054 1927 l
-3058 1927 l
-3060 1929 l
-3063 1932 l
-3067 1932 l
-S
-3027 5998 m
-3031 5998 l
-3034 5996 l
-3036 5994 l
-3040 5994 l
-3045 5994 l
-3049 5994 l
-3054 5994 l
-3056 5992 l
-3058 5989 l
-3063 5989 l
-3067 5989 l
-S
-2987 1918 m
-2991 1918 l
-2996 1918 l
-3000 1918 l
-3005 1918 l
-3007 1920 l
-3009 1923 l
-3013 1923 l
-3018 1923 l
-3022 1923 l
-3027 1923 l
-S
-3002 6000 m
-3005 5998 l
-3009 5998 l
-3013 5998 l
-3018 5998 l
-3022 5998 l
-3027 5998 l
-S
-2987 6003 m
-2991 6003 l
-2996 6003 l
-3000 6003 l
-3002 6000 l
-S
-2946 1914 m
-2951 1914 l
-2955 1914 l
-2960 1914 l
-2964 1914 l
-2969 1914 l
-2973 1914 l
-2975 1916 l
-2978 1918 l
-2982 1918 l
-2987 1918 l
-S
-2987 6003 m
-2982 6003 l
-2978 6003 l
-2973 6003 l
-2971 6005 l
-2969 6007 l
-2964 6007 l
-2960 6007 l
-2955 6007 l
-2951 6007 l
-2946 6007 l
-S
-2906 1909 m
-2911 1909 l
-2915 1909 l
-2920 1909 l
-2924 1909 l
-2929 1909 l
-2933 1909 l
-2938 1909 l
-2942 1909 l
-2944 1911 l
-2946 1914 l
-S
-2906 6012 m
-2911 6012 l
-2915 6012 l
-2920 6012 l
-2924 6012 l
-2929 6012 l
-2933 6012 l
-2935 6009 l
-2938 6007 l
-2942 6007 l
-2946 6007 l
-S
-2866 1905 m
-2870 1905 l
-2875 1905 l
-2879 1905 l
-2884 1905 l
-2888 1905 l
-2893 1905 l
-2897 1905 l
-2902 1905 l
-2904 1907 l
-2906 1909 l
-S
-2866 6016 m
-2870 6016 l
-2875 6016 l
-2879 6016 l
-2884 6016 l
-2888 6016 l
-2893 6016 l
-2895 6014 l
-2897 6012 l
-2902 6012 l
-2906 6012 l
-S
-2826 1900 m
-2830 1900 l
-2835 1900 l
-2839 1900 l
-2844 1900 l
-2848 1900 l
-2853 1900 l
-2855 1902 l
-2857 1905 l
-2862 1905 l
-2866 1905 l
-S
-2826 6021 m
-2830 6021 l
-2835 6021 l
-2839 6021 l
-2841 6018 l
-2844 6016 l
-2848 6016 l
-2853 6016 l
-2857 6016 l
-2862 6016 l
-2866 6016 l
-S
-2826 1900 m
-2821 1900 l
-2817 1900 l
-2812 1900 l
-2808 1900 l
-2803 1900 l
-2799 1900 l
-2794 1900 l
-2790 1900 l
-2786 1900 l
-S
-2786 6021 m
-2790 6021 l
-2794 6021 l
-2799 6021 l
-2803 6021 l
-2808 6021 l
-2812 6021 l
-2817 6021 l
-2821 6021 l
-2826 6021 l
-S
-2745 1896 m
-2750 1896 l
-2754 1896 l
-2759 1896 l
-2763 1896 l
-2768 1896 l
-2772 1896 l
-2777 1896 l
-2779 1898 l
-S
-2786 1900 m
-2781 1900 l
-2779 1898 l
-S
-2745 6025 m
-2750 6025 l
-2754 6025 l
-2757 6023 l
-2759 6021 l
-2763 6021 l
-2768 6021 l
-2772 6021 l
-2777 6021 l
-2781 6021 l
-2786 6021 l
-S
-2705 1896 m
-2710 1896 l
-2714 1896 l
-2719 1896 l
-2723 1896 l
-2727 1896 l
-2732 1896 l
-2736 1896 l
-2741 1896 l
-2745 1896 l
-S
-2705 6025 m
-2710 6025 l
-2714 6025 l
-2719 6025 l
-2723 6025 l
-2727 6025 l
-2732 6025 l
-2736 6025 l
-2741 6025 l
-2745 6025 l
-S
-2665 1896 m
-2669 1896 l
-2674 1896 l
-2678 1896 l
-2683 1896 l
-2687 1896 l
-2692 1896 l
-2696 1896 l
-2701 1896 l
-2705 1896 l
-S
-2665 6025 m
-2669 6025 l
-2674 6025 l
-2678 6025 l
-2683 6025 l
-2687 6025 l
-2692 6025 l
-2696 6025 l
-2701 6025 l
-2705 6025 l
-S
-2625 1896 m
-2629 1896 l
-2634 1896 l
-2638 1896 l
-2643 1896 l
-2647 1896 l
-2651 1896 l
-2656 1896 l
-2660 1896 l
-2665 1896 l
-S
-2625 6021 m
-2629 6021 l
-2631 6023 l
-2634 6025 l
-2638 6025 l
-2643 6025 l
-2647 6025 l
-2651 6025 l
-2656 6025 l
-2660 6025 l
-2665 6025 l
-S
-2614 1898 m
-2616 1896 l
-2620 1896 l
-2625 1896 l
-S
-2584 1900 m
-2589 1900 l
-2593 1900 l
-2598 1900 l
-2602 1900 l
-2607 1900 l
-2611 1900 l
-2614 1898 l
-S
-2584 6021 m
-2589 6021 l
-2593 6021 l
-2598 6021 l
-2602 6021 l
-2607 6021 l
-2611 6021 l
-2616 6021 l
-2620 6021 l
-2625 6021 l
-S
-2584 1900 m
-2580 1900 l
-2576 1900 l
-2571 1900 l
-2567 1900 l
-2562 1900 l
-2558 1900 l
-2553 1900 l
-2549 1900 l
-2544 1900 l
-S
-2544 6016 m
-2546 6018 l
-2549 6021 l
-2553 6021 l
-2558 6021 l
-2562 6021 l
-2567 6021 l
-2571 6021 l
-2576 6021 l
-2580 6021 l
-2584 6021 l
-S
-2544 1900 m
-2540 1900 l
-2538 1902 l
-2535 1905 l
-2531 1905 l
-2526 1905 l
-2522 1905 l
-2517 1905 l
-2513 1905 l
-2508 1905 l
-2504 1905 l
-S
-2504 6016 m
-2508 6016 l
-2513 6016 l
-2517 6016 l
-2522 6016 l
-2526 6016 l
-2531 6016 l
-2535 6016 l
-2540 6016 l
-2544 6016 l
-S
-2464 1909 m
-2468 1909 l
-2473 1909 l
-2477 1909 l
-2482 1909 l
-2484 1907 l
-2486 1905 l
-2491 1905 l
-2495 1905 l
-2500 1905 l
-2504 1905 l
-S
-2464 6012 m
-2468 6012 l
-2473 6012 l
-2477 6012 l
-2482 6012 l
-2486 6012 l
-2491 6012 l
-2493 6014 l
-2495 6016 l
-2500 6016 l
-2504 6016 l
-S
-2424 1914 m
-2428 1914 l
-2433 1914 l
-2437 1914 l
-2441 1914 l
-2444 1911 l
-2446 1909 l
-2450 1909 l
-2455 1909 l
-2459 1909 l
-2464 1909 l
-S
-2424 6007 m
-2428 6007 l
-2433 6007 l
-2437 6007 l
-2441 6007 l
-2446 6007 l
-2450 6007 l
-2453 6009 l
-2455 6012 l
-2459 6012 l
-2464 6012 l
-S
-2383 1918 m
-2388 1918 l
-2392 1918 l
-2397 1918 l
-2401 1918 l
-2406 1918 l
-2410 1918 l
-2412 1916 l
-2415 1914 l
-2419 1914 l
-2424 1914 l
-S
-2383 5998 m
-2386 6000 l
-S
-2386 6000 m
-2388 6003 l
-2392 6003 l
-2397 6003 l
-2401 6003 l
-2406 6003 l
-2410 6003 l
-2415 6003 l
-2417 6005 l
-2419 6007 l
-2424 6007 l
-S
-2343 1927 m
-2348 1927 l
-2352 1927 l
-2354 1925 l
-2357 1923 l
-2361 1923 l
-2365 1923 l
-2370 1923 l
-2374 1923 l
-2379 1923 l
-2381 1920 l
-2383 1918 l
-S
-2343 5994 m
-2348 5994 l
-2352 5994 l
-2357 5994 l
-2359 5996 l
-2361 5998 l
-2365 5998 l
-2370 5998 l
-2374 5998 l
-2379 5998 l
-2383 5998 l
-S
-2303 1936 m
-2305 1934 l
-2307 1932 l
-2312 1932 l
-2316 1932 l
-2321 1932 l
-2325 1932 l
-2327 1929 l
-2330 1927 l
-2334 1927 l
-2339 1927 l
-2343 1927 l
-S
-2303 5985 m
-2305 5987 l
-2307 5989 l
-2312 5989 l
-2316 5989 l
-2321 5989 l
-2325 5989 l
-2330 5989 l
-2332 5992 l
-2334 5994 l
-2339 5994 l
-2343 5994 l
-S
-2283 1938 m
-2285 1936 l
-2290 1936 l
-2294 1936 l
-2298 1936 l
-2303 1936 l
-S
-2263 1940 m
-2267 1940 l
-2272 1940 l
-2276 1940 l
-2281 1940 l
-2283 1938 l
-S
-2263 5976 m
-2265 5978 l
-2267 5980 l
-2272 5980 l
-2276 5980 l
-2281 5980 l
-2283 5983 l
-2285 5985 l
-2290 5985 l
-2294 5985 l
-2298 5985 l
-2303 5985 l
-S
-2263 1940 m
-2260 1943 l
-2258 1945 l
-2254 1945 l
-2249 1945 l
-2245 1945 l
-2240 1945 l
-2238 1947 l
-2236 1949 l
-2231 1949 l
-2227 1949 l
-2222 1949 l
-S
-2222 5967 m
-2225 5969 l
-2227 5971 l
-2231 5971 l
-2236 5971 l
-2240 5971 l
-2243 5974 l
-2245 5976 l
-2249 5976 l
-2254 5976 l
-2258 5976 l
-2263 5976 l
-S
-2182 1963 m
-2184 1961 l
-2187 1958 l
-2191 1958 l
-2196 1958 l
-2200 1958 l
-2202 1956 l
-2205 1954 l
-2209 1954 l
-2214 1954 l
-2218 1954 l
-2220 1952 l
-2222 1949 l
-S
-2182 5958 m
-2184 5960 l
-S
-2184 5960 m
-2187 5962 l
-2191 5962 l
-2196 5962 l
-2200 5962 l
-2202 5965 l
-2205 5967 l
-2209 5967 l
-2214 5967 l
-2218 5967 l
-2222 5967 l
-S
-2142 1972 m
-2147 1972 l
-2149 1969 l
-2151 1967 l
-2155 1967 l
-2160 1967 l
-2164 1967 l
-2167 1965 l
-2169 1963 l
-2173 1963 l
-2178 1963 l
-2182 1963 l
-S
-2142 5949 m
-2147 5949 l
-2151 5949 l
-2153 5951 l
-2155 5954 l
-2160 5954 l
-2164 5954 l
-2169 5954 l
-2171 5956 l
-2173 5958 l
-2178 5958 l
-2182 5958 l
-S
-2117 1978 m
-2120 1976 l
-2124 1976 l
-2129 1976 l
-2133 1976 l
-2135 1974 l
-2138 1972 l
-2142 1972 l
-S
-2102 1985 m
-2104 1983 l
-2106 1981 l
-2111 1981 l
-2115 1981 l
-2117 1978 l
-S
-2102 5936 m
-2104 5938 l
-2106 5940 l
-2111 5940 l
-2115 5940 l
-2120 5940 l
-2122 5942 l
-2124 5945 l
-2129 5945 l
-2133 5945 l
-2135 5947 l
-2138 5949 l
-2142 5949 l
-S
-2062 1994 m
-2066 1994 l
-2071 1994 l
-2073 1992 l
-2075 1990 l
-2079 1990 l
-2084 1990 l
-2086 1987 l
-2088 1985 l
-2093 1985 l
-2097 1985 l
-2102 1985 l
-S
-2062 5922 m
-2064 5925 l
-2066 5927 l
-2071 5927 l
-2075 5927 l
-2077 5929 l
-2079 5931 l
-2084 5931 l
-2088 5931 l
-2091 5933 l
-2093 5936 l
-2097 5936 l
-2102 5936 l
-S
-2021 2007 m
-2026 2007 l
-2030 2007 l
-2033 2005 l
-2035 2003 l
-2039 2003 l
-2044 2003 l
-2046 2001 l
-2048 1999 l
-2053 1999 l
-2057 1999 l
-2059 1996 l
-2062 1994 l
-S
-2021 5909 m
-2024 5911 l
-2026 5913 l
-2030 5913 l
-2035 5913 l
-2037 5916 l
-2039 5918 l
-2044 5918 l
-2048 5918 l
-2050 5920 l
-S
-2062 5922 m
-2057 5922 l
-2053 5922 l
-2050 5920 l
-S
-1992 2019 m
-1995 2016 l
-1999 2016 l
-2003 2016 l
-2006 2014 l
-2008 2012 l
-2012 2012 l
-2017 2012 l
-2019 2010 l
-2021 2007 l
-S
-1981 2025 m
-1983 2023 l
-1986 2021 l
-1990 2021 l
-1992 2019 l
-S
-1981 5895 m
-1983 5898 l
-1986 5900 l
-1990 5900 l
-1995 5900 l
-1997 5902 l
-1999 5904 l
-2003 5904 l
-2008 5904 l
-2010 5907 l
-2012 5909 l
-2017 5909 l
-2021 5909 l
-S
-1941 2039 m
-1945 2039 l
-1948 2037 l
-1950 2034 l
-1954 2034 l
-1957 2032 l
-1959 2030 l
-1963 2030 l
-1968 2030 l
-1970 2028 l
-1972 2025 l
-1977 2025 l
-1981 2025 l
-S
-1941 5882 m
-1945 5882 l
-1948 5884 l
-1950 5887 l
-1954 5887 l
-1959 5887 l
-1961 5889 l
-1963 5891 l
-1968 5891 l
-1970 5893 l
-1972 5895 l
-1977 5895 l
-1981 5895 l
-S
-1901 2057 m
-1903 2054 l
-1905 2052 l
-1910 2052 l
-1912 2050 l
-1914 2048 l
-1919 2048 l
-1923 2048 l
-1925 2045 l
-1928 2043 l
-1932 2043 l
-1934 2041 l
-1936 2039 l
-1941 2039 l
-S
-1901 5864 m
-1903 5866 l
-1905 5869 l
-1910 5869 l
-1914 5869 l
-1916 5871 l
-1919 5873 l
-1923 5873 l
-1925 5875 l
-1928 5878 l
-1932 5878 l
-1936 5878 l
-1939 5880 l
-S
-1941 5882 m
-1939 5880 l
-S
-1890 2059 m
-1892 2057 l
-1896 2057 l
-1901 2057 l
-S
-1860 2075 m
-1863 2072 l
-1865 2070 l
-1869 2070 l
-1872 2068 l
-1874 2066 l
-1878 2066 l
-1881 2063 l
-1883 2061 l
-1887 2061 l
-1890 2059 l
-S
-1860 5846 m
-1863 5849 l
-1865 5851 l
-1869 5851 l
-1872 5853 l
-1874 5855 l
-1878 5855 l
-1881 5857 l
-1883 5860 l
-1887 5860 l
-1892 5860 l
-1894 5862 l
-1896 5864 l
-1901 5864 l
-S
-1820 2092 m
-1823 2090 l
-1825 2088 l
-1829 2088 l
-1831 2086 l
-1834 2083 l
-1838 2083 l
-1840 2081 l
-1843 2079 l
-1847 2079 l
-1849 2077 l
-1852 2075 l
-1856 2075 l
-1860 2075 l
-S
-1820 5828 m
-1823 5831 l
-1825 5833 l
-1829 5833 l
-1831 5835 l
-1834 5837 l
-1838 5837 l
-1840 5840 l
-S
-1840 5840 m
-1843 5842 l
-1847 5842 l
-1852 5842 l
-1854 5844 l
-1856 5846 l
-1860 5846 l
-S
-1800 2099 m
-1802 2097 l
-1807 2097 l
-1811 2097 l
-1814 2095 l
-1816 2092 l
-1820 2092 l
-S
-1780 2110 m
-1782 2108 l
-1785 2106 l
-1789 2106 l
-1791 2104 l
-1793 2101 l
-1798 2101 l
-1800 2099 l
-S
-1780 5811 m
-1785 5811 l
-1787 5813 l
-1789 5815 l
-1793 5815 l
-1796 5817 l
-1798 5819 l
-1802 5819 l
-1805 5822 l
-1807 5824 l
-1811 5824 l
-1814 5826 l
-1816 5828 l
-1820 5828 l
-S
-1740 2128 m
-1744 2128 l
-1747 2126 l
-1749 2124 l
-1753 2124 l
-1755 2121 l
-1758 2119 l
-1762 2119 l
-1764 2117 l
-1767 2115 l
-1771 2115 l
-1773 2112 l
-1776 2110 l
-1780 2110 l
-S
-1740 5788 m
-1742 5790 l
-1744 5793 l
-1749 5793 l
-1751 5795 l
-1753 5797 l
-1758 5797 l
-1760 5799 l
-S
-1760 5799 m
-1762 5802 l
-1767 5802 l
-1769 5804 l
-1771 5806 l
-1776 5806 l
-1778 5808 l
-1780 5811 l
-S
-1724 2139 m
-1726 2137 l
-1731 2137 l
-1733 2135 l
-1735 2133 l
-1738 2130 l
-1740 2128 l
-S
-1700 2150 m
-1704 2150 l
-1706 2148 l
-1709 2146 l
-1713 2146 l
-1715 2144 l
-1717 2142 l
-1722 2142 l
-1724 2139 l
-S
-1700 5770 m
-1704 5770 l
-1706 5773 l
-1709 5775 l
-1713 5775 l
-1715 5777 l
-1717 5779 l
-1722 5779 l
-1724 5781 l
-1726 5784 l
-1731 5784 l
-1733 5786 l
-1735 5788 l
-1740 5788 l
-S
-1659 2173 m
-1664 2173 l
-1666 2171 l
-1668 2168 l
-1673 2168 l
-1675 2166 l
-1677 2164 l
-1682 2164 l
-1684 2162 l
-1686 2159 l
-1688 2157 l
-1691 2155 l
-1695 2155 l
-1697 2153 l
-1700 2150 l
-S
-1659 5744 m
-1662 5746 l
-1664 5748 l
-1666 5750 l
-1668 5752 l
-1673 5752 l
-1675 5755 l
-1677 5757 l
-1682 5757 l
-1684 5759 l
-S
-1684 5759 m
-1686 5761 l
-1691 5761 l
-1693 5764 l
-1695 5766 l
-1697 5768 l
-1700 5770 l
-S
-1653 2180 m
-1655 2177 l
-1657 2175 l
-1659 2173 l
-S
-1619 2200 m
-1621 2197 l
-1624 2195 l
-1628 2195 l
-1630 2193 l
-1633 2191 l
-1635 2188 l
-1637 2186 l
-1642 2186 l
-1644 2184 l
-1646 2182 l
-1650 2182 l
-1653 2180 l
-S
-1619 5721 m
-1621 5723 l
-1624 5726 l
-1628 5726 l
-1630 5728 l
-1633 5730 l
-1637 5730 l
-1639 5732 l
-1642 5735 l
-1644 5737 l
-1646 5739 l
-1650 5739 l
-1653 5741 l
-1655 5744 l
-1659 5744 l
-S
-1586 2220 m
-1588 2218 l
-1590 2215 l
-1592 2213 l
-1597 2213 l
-1599 2211 l
-1601 2209 l
-1606 2209 l
-1608 2206 l
-1610 2204 l
-1612 2202 l
-1615 2200 l
-1619 2200 l
-S
-1579 2222 m
-1583 2222 l
-1586 2220 l
-S
-1579 5694 m
-1581 5697 l
-1583 5699 l
-1586 5701 l
-1588 5703 l
-1592 5703 l
-1595 5706 l
-1597 5708 l
-1599 5710 l
-1601 5712 l
-1606 5712 l
-1608 5714 l
-1610 5717 l
-1615 5717 l
-1617 5719 l
-S
-1619 5721 m
-1617 5719 l
-S
-1579 2222 m
-1577 2224 l
-1574 2226 l
-1572 2229 l
-1570 2231 l
-1566 2231 l
-1563 2233 l
-1561 2235 l
-1559 2238 l
-1557 2240 l
-1552 2240 l
-1550 2242 l
-1548 2244 l
-1545 2247 l
-1543 2249 l
-1539 2249 l
-S
-1539 5672 m
-1543 5672 l
-1545 5674 l
-1548 5676 l
-1550 5679 l
-S
-1550 5679 m
-1552 5681 l
-1557 5681 l
-1559 5683 l
-1561 5685 l
-1563 5688 l
-1566 5690 l
-1570 5690 l
-1572 5692 l
-1574 5694 l
-1579 5694 l
-S
-1523 2260 m
-1525 2258 l
-1530 2258 l
-1532 2256 l
-1534 2253 l
-1536 2251 l
-1539 2249 l
-S
-1499 2280 m
-1501 2278 l
-1503 2276 l
-1505 2273 l
-1507 2271 l
-1510 2269 l
-1512 2267 l
-1516 2267 l
-1519 2264 l
-1521 2262 l
-1523 2260 l
-S
-1499 5641 m
-1501 5643 l
-1503 5645 l
-1505 5647 l
-1507 5650 l
-1512 5650 l
-1514 5652 l
-1516 5654 l
-1519 5656 l
-1521 5659 l
-1525 5659 l
-1528 5661 l
-1530 5663 l
-1532 5665 l
-1534 5668 l
-1536 5670 l
-1539 5672 l
-S
-1469 2300 m
-1472 2298 l
-1474 2296 l
-1476 2293 l
-1478 2291 l
-1481 2289 l
-1485 2289 l
-1487 2287 l
-1490 2285 l
-1492 2282 l
-1494 2280 l
-1499 2280 l
-S
-1458 2307 m
-1461 2305 l
-1463 2302 l
-1467 2302 l
-1469 2300 l
-S
-1458 5614 m
-1463 5614 l
-1465 5616 l
-1467 5618 l
-1469 5621 l
-1472 5623 l
-1474 5625 l
-1476 5627 l
-1481 5627 l
-1483 5630 l
-1485 5632 l
-1487 5634 l
-1490 5636 l
-1492 5638 l
-S
-1499 5641 m
-1494 5641 l
-1492 5638 l
-S
-1418 2338 m
-1420 2336 l
-1423 2334 l
-1425 2331 l
-1427 2329 l
-1431 2329 l
-1434 2327 l
-1436 2325 l
-1438 2323 l
-1440 2320 l
-1443 2318 l
-1445 2316 l
-1449 2316 l
-1452 2314 l
-1454 2311 l
-1456 2309 l
-1458 2307 l
-S
-1418 5583 m
-1420 5585 l
-1423 5587 l
-1427 5587 l
-1429 5589 l
-1431 5592 l
-1434 5594 l
-1436 5596 l
-1438 5598 l
-S
-1438 5598 m
-1440 5601 l
-1445 5601 l
-1447 5603 l
-1449 5605 l
-1452 5607 l
-1454 5609 l
-1456 5612 l
-1458 5614 l
-S
-1416 2340 m
-1418 2338 l
-S
-1378 2369 m
-1380 2367 l
-1382 2365 l
-1387 2365 l
-1389 2363 l
-1391 2361 l
-1393 2358 l
-1396 2356 l
-1398 2354 l
-1400 2352 l
-1402 2349 l
-1405 2347 l
-1409 2347 l
-1411 2345 l
-1414 2343 l
-1416 2340 l
-S
-1378 5551 m
-1382 5551 l
-1385 5554 l
-1387 5556 l
-1389 5558 l
-S
-1389 5558 m
-1391 5560 l
-1393 5563 l
-1396 5565 l
-1398 5567 l
-1400 5569 l
-1405 5569 l
-1407 5571 l
-1409 5574 l
-1411 5576 l
-1414 5578 l
-1416 5580 l
-1418 5583 l
-S
-1367 2381 m
-1369 2378 l
-1371 2376 l
-1373 2374 l
-1376 2372 l
-1378 2369 l
-S
-1338 2405 m
-1340 2403 l
-1342 2401 l
-1344 2399 l
-1347 2396 l
-1349 2394 l
-1351 2392 l
-1353 2390 l
-1355 2387 l
-1360 2387 l
-1362 2385 l
-1364 2383 l
-1367 2381 l
-S
-1338 5516 m
-1340 5518 l
-S
-1340 5518 m
-1342 5520 l
-1344 5522 l
-1347 5525 l
-1351 5525 l
-1353 5527 l
-1355 5529 l
-1358 5531 l
-1360 5533 l
-1362 5536 l
-1364 5538 l
-1367 5540 l
-1369 5542 l
-1371 5545 l
-1373 5547 l
-1376 5549 l
-1378 5551 l
-S
-1318 2421 m
-1320 2419 l
-1324 2419 l
-1326 2416 l
-1329 2414 l
-1331 2412 l
-1333 2410 l
-1335 2407 l
-1338 2405 l
-S
-1297 2441 m
-1300 2439 l
-1302 2436 l
-1304 2434 l
-1306 2432 l
-1309 2430 l
-1311 2428 l
-1313 2425 l
-1315 2423 l
-1318 2421 l
-S
-1297 5480 m
-1300 5482 l
-1302 5484 l
-1304 5487 l
-1306 5489 l
-1309 5491 l
-1311 5493 l
-1315 5493 l
-1318 5495 l
-1320 5498 l
-1322 5500 l
-1324 5502 l
-1326 5504 l
-1329 5507 l
-1331 5509 l
-1333 5511 l
-1335 5513 l
-1338 5516 l
-S
-1277 2461 m
-1280 2459 l
-1282 2457 l
-1284 2454 l
-1286 2452 l
-1288 2450 l
-1291 2448 l
-1293 2445 l
-1295 2443 l
-1297 2441 l
-S
-1257 2481 m
-1259 2479 l
-1262 2477 l
-1264 2474 l
-1266 2472 l
-1268 2470 l
-1271 2468 l
-1273 2466 l
-1275 2463 l
-1277 2461 l
-S
-1257 5440 m
-1259 5442 l
-1262 5444 l
-1264 5446 l
-1266 5449 l
-1268 5451 l
-1271 5453 l
-1273 5455 l
-1275 5457 l
-1277 5460 l
-1280 5462 l
-1282 5464 l
-1284 5466 l
-1286 5469 l
-1288 5471 l
-1291 5473 l
-1293 5475 l
-1295 5478 l
-S
-1297 5480 m
-1295 5478 l
-S
-1233 2501 m
-1235 2499 l
-1237 2497 l
-1239 2495 l
-1242 2492 l
-1244 2490 l
-1246 2488 l
-1248 2486 l
-1250 2483 l
-1253 2481 l
-1257 2481 l
-S
-1217 2517 m
-1219 2515 l
-1221 2512 l
-1224 2510 l
-1226 2508 l
-1228 2506 l
-1230 2504 l
-1233 2501 l
-S
-1217 5399 m
-1219 5402 l
-1221 5404 l
-1224 5406 l
-1226 5408 l
-1228 5411 l
-1230 5413 l
-1233 5415 l
-1235 5417 l
-1237 5420 l
-1239 5422 l
-1242 5424 l
-1244 5426 l
-1246 5428 l
-1248 5431 l
-1250 5433 l
-1253 5435 l
-1255 5437 l
-S
-1257 5440 m
-1255 5437 l
-S
-1197 2542 m
-1199 2539 l
-1201 2537 l
-1204 2535 l
-1206 2533 l
-1208 2530 l
-1210 2528 l
-1212 2526 l
-1215 2524 l
-1215 2519 l
-1217 2517 l
-S
-1177 2562 m
-1179 2559 l
-1181 2557 l
-1183 2555 l
-1186 2553 l
-1188 2550 l
-1190 2548 l
-1192 2546 l
-1195 2544 l
-1197 2542 l
-S
-1177 5359 m
-1179 5361 l
-1181 5364 l
-1183 5366 l
-1186 5368 l
-1188 5370 l
-1190 5373 l
-1192 5375 l
-1195 5377 l
-1197 5379 l
-1199 5382 l
-1201 5384 l
-1204 5386 l
-1206 5388 l
-1208 5390 l
-1210 5393 l
-1212 5395 l
-1215 5397 l
-S
-1217 5399 m
-1215 5397 l
-S
-1157 2582 m
-1159 2579 l
-1161 2577 l
-1163 2575 l
-1166 2573 l
-1168 2571 l
-1170 2568 l
-1172 2566 l
-1175 2564 l
-1177 2562 l
-S
-1137 2606 m
-1139 2604 l
-1141 2602 l
-1143 2600 l
-1145 2597 l
-1148 2595 l
-1150 2593 l
-1152 2591 l
-1152 2586 l
-1154 2584 l
-1157 2582 l
-S
-1137 5314 m
-1139 5317 l
-S
-1139 5317 m
-1141 5319 l
-1143 5321 l
-1145 5323 l
-1148 5326 l
-1150 5328 l
-1152 5330 l
-1154 5332 l
-1157 5335 l
-1159 5337 l
-1161 5339 l
-1161 5344 l
-1163 5346 l
-1166 5348 l
-1168 5350 l
-1170 5352 l
-1172 5355 l
-1175 5357 l
-S
-1177 5359 m
-1175 5357 l
-S
-1125 2622 m
-1125 2617 l
-1128 2615 l
-1130 2613 l
-1132 2611 l
-1134 2609 l
-1137 2606 l
-S
-1096 2655 m
-1099 2653 l
-1099 2649 l
-1101 2647 l
-1103 2644 l
-1105 2642 l
-1107 2640 l
-1110 2638 l
-1112 2635 l
-1114 2633 l
-1116 2631 l
-1119 2629 l
-1121 2626 l
-1123 2624 l
-1125 2622 l
-S
-1096 5265 m
-1099 5268 l
-1101 5270 l
-1103 5272 l
-1103 5277 l
-S
-1103 5277 m
-1105 5279 l
-1107 5281 l
-1110 5283 l
-1112 5285 l
-1114 5288 l
-1116 5290 l
-1119 5292 l
-1121 5294 l
-1123 5297 l
-1125 5299 l
-1128 5301 l
-1130 5303 l
-1130 5308 l
-1132 5310 l
-1134 5312 l
-1137 5314 l
-S
-1090 2662 m
-1092 2660 l
-1094 2658 l
-1096 2655 l
-S
-1090 2662 m
-1087 2664 l
-1085 2667 l
-1083 2669 l
-1081 2671 l
-1081 2676 l
-1078 2678 l
-1076 2680 l
-1074 2682 l
-1072 2685 l
-1069 2687 l
-1067 2689 l
-1065 2691 l
-1063 2693 l
-1063 2698 l
-1061 2700 l
-1058 2702 l
-S
-1056 2705 m
-1058 2702 l
-S
-1056 5216 m
-1058 5218 l
-1061 5221 l
-1063 5223 l
-1065 5225 l
-1067 5227 l
-1067 5232 l
-1069 5234 l
-1072 5236 l
-S
-1072 5236 m
-1074 5239 l
-1076 5241 l
-1078 5243 l
-1081 5245 l
-1083 5247 l
-1085 5250 l
-1085 5254 l
-1087 5256 l
-1090 5259 l
-1092 5261 l
-1094 5263 l
-1096 5265 l
-S
-1056 2705 m
-1054 2707 l
-1052 2709 l
-1049 2711 l
-1049 2716 l
-1047 2718 l
-1045 2720 l
-1043 2723 l
-1040 2725 l
-1038 2727 l
-1036 2729 l
-1036 2734 l
-1034 2736 l
-1031 2738 l
-1029 2740 l
-1027 2743 l
-S
-1016 2758 m
-1018 2756 l
-1020 2754 l
-1023 2752 l
-1023 2747 l
-1025 2745 l
-1027 2743 l
-S
-1016 5163 m
-1018 5165 l
-1020 5167 l
-1023 5169 l
-1025 5171 l
-1027 5174 l
-1027 5178 l
-1029 5180 l
-1031 5183 l
-1034 5185 l
-1036 5187 l
-1038 5189 l
-1040 5192 l
-1040 5196 l
-S
-1040 5196 m
-1043 5198 l
-1045 5201 l
-1047 5203 l
-1049 5205 l
-1052 5207 l
-1054 5209 l
-1054 5214 l
-1056 5216 l
-S
-1000 2783 m
-1000 2778 l
-1002 2776 l
-1005 2774 l
-1007 2772 l
-1009 2769 l
-1011 2767 l
-1014 2765 l
-1014 2760 l
-1016 2758 l
-S
-976 2816 m
-978 2814 l
-980 2812 l
-982 2810 l
-982 2805 l
-985 2803 l
-987 2801 l
-989 2798 l
-991 2796 l
-991 2792 l
-994 2790 l
-996 2787 l
-998 2785 l
-1000 2783 l
-S
-976 5104 m
-978 5107 l
-980 5109 l
-982 5111 l
-982 5116 l
-S
-982 5116 m
-985 5118 l
-987 5120 l
-989 5122 l
-991 5125 l
-994 5127 l
-996 5129 l
-996 5133 l
-998 5136 l
-1000 5138 l
-1002 5140 l
-1005 5142 l
-1005 5147 l
-1007 5149 l
-1009 5151 l
-1011 5154 l
-1014 5156 l
-S
-1014 5156 m
-1014 5160 l
-1016 5163 l
-S
-973 2823 m
-973 2819 l
-976 2816 l
-S
-973 2823 m
-971 2825 l
-969 2828 l
-967 2830 l
-964 2832 l
-964 2836 l
-962 2839 l
-960 2841 l
-958 2843 l
-956 2845 l
-956 2850 l
-953 2852 l
-951 2854 l
-951 2859 l
-949 2861 l
-947 2863 l
-S
-935 2879 m
-938 2877 l
-940 2874 l
-942 2872 l
-942 2868 l
-944 2866 l
-947 2863 l
-S
-935 5037 m
-938 5040 l
-938 5044 l
-940 5046 l
-942 5049 l
-942 5053 l
-944 5055 l
-947 5058 l
-949 5060 l
-951 5062 l
-951 5066 l
-953 5069 l
-956 5071 l
-958 5073 l
-960 5075 l
-S
-960 5075 m
-960 5080 l
-962 5082 l
-964 5084 l
-964 5089 l
-967 5091 l
-969 5093 l
-971 5096 l
-973 5098 l
-973 5102 l
-976 5104 l
-S
-920 2903 m
-922 2901 l
-924 2899 l
-926 2897 l
-929 2895 l
-929 2890 l
-931 2888 l
-933 2886 l
-933 2881 l
-935 2879 l
-S
-920 2903 m
-920 2908 l
-918 2910 l
-915 2912 l
-915 2917 l
-913 2919 l
-911 2921 l
-909 2924 l
-906 2926 l
-906 2930 l
-904 2933 l
-902 2935 l
-902 2939 l
-900 2941 l
-897 2944 l
-S
-895 2950 m
-897 2948 l
-897 2944 l
-S
-895 4970 m
-897 4973 l
-897 4977 l
-900 4979 l
-902 4982 l
-902 4986 l
-904 4988 l
-906 4990 l
-909 4993 l
-911 4995 l
-S
-911 4995 m
-911 4999 l
-913 5002 l
-915 5004 l
-915 5008 l
-918 5011 l
-920 5013 l
-922 5015 l
-924 5017 l
-924 5022 l
-926 5024 l
-929 5026 l
-929 5031 l
-931 5033 l
-933 5035 l
-S
-935 5037 m
-933 5035 l
-S
-875 2984 m
-877 2982 l
-880 2979 l
-880 2975 l
-882 2973 l
-884 2971 l
-884 2966 l
-886 2964 l
-888 2962 l
-888 2957 l
-891 2955 l
-893 2953 l
-895 2950 l
-S
-875 2984 m
-875 2988 l
-873 2991 l
-871 2993 l
-871 2997 l
-868 3000 l
-866 3002 l
-866 3006 l
-864 3009 l
-862 3011 l
-862 3015 l
-859 3017 l
-857 3020 l
-857 3024 l
-S
-855 3026 m
-857 3024 l
-S
-855 4894 m
-857 4897 l
-857 4901 l
-859 4903 l
-862 4906 l
-862 4910 l
-864 4912 l
-866 4915 l
-S
-866 4915 m
-866 4919 l
-868 4921 l
-871 4923 l
-871 4928 l
-873 4930 l
-875 4932 l
-875 4937 l
-877 4939 l
-880 4941 l
-880 4946 l
-882 4948 l
-884 4950 l
-884 4955 l
-S
-884 4955 m
-886 4957 l
-888 4959 l
-891 4961 l
-893 4964 l
-893 4968 l
-895 4970 l
-S
-855 3026 m
-853 3029 l
-851 3031 l
-848 3033 l
-848 3038 l
-846 3040 l
-844 3042 l
-844 3047 l
-844 3051 l
-842 3053 l
-839 3055 l
-839 3060 l
-837 3062 l
-835 3064 l
-S
-835 3064 m
-835 3069 l
-833 3071 l
-830 3073 l
-830 3078 l
-828 3080 l
-826 3082 l
-826 3087 l
-824 3089 l
-821 3091 l
-821 3096 l
-819 3098 l
-817 3100 l
-817 3105 l
-S
-815 3107 m
-817 3105 l
-S
-815 4814 m
-817 4816 l
-817 4821 l
-819 4823 l
-821 4825 l
-821 4830 l
-824 4832 l
-826 4834 l
-S
-826 4834 m
-826 4839 l
-828 4841 l
-830 4843 l
-830 4847 l
-833 4850 l
-835 4852 l
-835 4856 l
-837 4859 l
-839 4861 l
-839 4865 l
-842 4868 l
-844 4870 l
-844 4874 l
-S
-844 4874 m
-846 4877 l
-848 4879 l
-848 4883 l
-851 4885 l
-853 4888 l
-853 4892 l
-855 4894 l
-S
-815 3107 m
-813 3109 l
-813 3114 l
-810 3116 l
-808 3118 l
-808 3122 l
-808 3127 l
-806 3129 l
-804 3131 l
-804 3136 l
-801 3138 l
-799 3140 l
-799 3145 l
-S
-799 3145 m
-797 3147 l
-795 3149 l
-795 3154 l
-795 3158 l
-792 3160 l
-790 3163 l
-790 3167 l
-788 3169 l
-786 3172 l
-786 3176 l
-786 3181 l
-783 3183 l
-781 3185 l
-S
-775 3201 m
-777 3198 l
-777 3194 l
-779 3192 l
-781 3190 l
-781 3185 l
-S
-775 4716 m
-777 4718 l
-777 4722 l
-777 4727 l
-779 4729 l
-781 4731 l
-781 4736 l
-783 4738 l
-786 4740 l
-786 4745 l
-786 4749 l
-788 4751 l
-790 4754 l
-S
-790 4754 m
-790 4758 l
-792 4760 l
-795 4763 l
-795 4767 l
-795 4772 l
-797 4774 l
-799 4776 l
-799 4780 l
-801 4783 l
-804 4785 l
-804 4789 l
-806 4792 l
-808 4794 l
-S
-808 4794 m
-808 4798 l
-810 4801 l
-813 4803 l
-813 4807 l
-813 4812 l
-815 4814 l
-S
-768 3225 m
-768 3221 l
-768 3216 l
-770 3214 l
-772 3212 l
-772 3207 l
-772 3203 l
-775 3201 l
-S
-768 3225 m
-766 3227 l
-763 3230 l
-763 3234 l
-761 3236 l
-759 3239 l
-759 3243 l
-759 3248 l
-757 3250 l
-754 3252 l
-754 3257 l
-754 3261 l
-752 3263 l
-750 3265 l
-S
-750 3265 m
-750 3270 l
-750 3274 l
-748 3277 l
-745 3279 l
-745 3283 l
-743 3286 l
-741 3288 l
-741 3292 l
-741 3297 l
-739 3299 l
-737 3301 l
-737 3306 l
-S
-734 3312 m
-737 3310 l
-737 3306 l
-S
-734 4604 m
-737 4606 l
-737 4611 l
-737 4615 l
-739 4617 l
-741 4620 l
-741 4624 l
-741 4629 l
-743 4631 l
-745 4633 l
-S
-745 4633 m
-745 4637 l
-745 4642 l
-748 4644 l
-750 4646 l
-750 4651 l
-750 4655 l
-752 4658 l
-754 4660 l
-754 4664 l
-754 4669 l
-757 4671 l
-759 4673 l
-S
-759 4673 m
-759 4678 l
-759 4682 l
-761 4684 l
-763 4687 l
-763 4691 l
-766 4693 l
-768 4696 l
-768 4700 l
-768 4704 l
-770 4707 l
-772 4709 l
-772 4713 l
-S
-775 4716 m
-772 4713 l
-S
-723 3346 m
-725 3344 l
-728 3341 l
-728 3337 l
-728 3333 l
-728 3328 l
-730 3326 l
-732 3324 l
-732 3319 l
-732 3315 l
-734 3312 l
-S
-723 3346 m
-723 3350 l
-723 3355 l
-721 3357 l
-719 3359 l
-719 3364 l
-719 3368 l
-716 3371 l
-714 3373 l
-714 3377 l
-714 3382 l
-714 3386 l
-S
-714 3386 m
-712 3388 l
-710 3391 l
-710 3395 l
-710 3400 l
-708 3402 l
-705 3404 l
-705 3408 l
-705 3413 l
-705 3417 l
-703 3420 l
-701 3422 l
-701 3426 l
-S
-694 3451 m
-696 3449 l
-696 3444 l
-696 3440 l
-696 3435 l
-699 3433 l
-701 3431 l
-701 3426 l
-S
-694 4470 m
-696 4472 l
-S
-696 4472 m
-696 4477 l
-696 4481 l
-699 4483 l
-701 4486 l
-701 4490 l
-701 4494 l
-701 4499 l
-703 4501 l
-705 4503 l
-705 4508 l
-705 4512 l
-S
-705 4512 m
-705 4517 l
-708 4519 l
-710 4521 l
-710 4526 l
-710 4530 l
-712 4532 l
-714 4535 l
-714 4539 l
-714 4544 l
-714 4548 l
-716 4550 l
-719 4553 l
-S
-719 4553 m
-719 4557 l
-719 4561 l
-721 4564 l
-723 4566 l
-723 4570 l
-723 4575 l
-725 4577 l
-728 4579 l
-728 4584 l
-728 4588 l
-730 4591 l
-732 4593 l
-S
-732 4593 m
-732 4597 l
-732 4602 l
-734 4604 l
-S
-692 3467 m
-692 3462 l
-692 3458 l
-692 3453 l
-694 3451 l
-S
-692 3467 m
-690 3469 l
-687 3471 l
-687 3476 l
-687 3480 l
-687 3484 l
-685 3487 l
-683 3489 l
-683 3493 l
-683 3498 l
-683 3502 l
-683 3507 l
-S
-683 3507 m
-681 3509 l
-678 3511 l
-678 3516 l
-678 3520 l
-678 3525 l
-676 3527 l
-674 3529 l
-674 3534 l
-674 3538 l
-674 3543 l
-674 3547 l
-S
-674 3547 m
-672 3549 l
-670 3551 l
-670 3556 l
-670 3560 l
-670 3565 l
-670 3569 l
-667 3572 l
-665 3574 l
-665 3578 l
-665 3583 l
-665 3587 l
-S
-665 3587 m
-665 3592 l
-665 3596 l
-663 3598 l
-661 3601 l
-661 3605 l
-661 3610 l
-661 3614 l
-661 3619 l
-658 3621 l
-656 3623 l
-656 3627 l
-S
-654 3652 m
-656 3650 l
-656 3645 l
-656 3641 l
-656 3636 l
-656 3632 l
-656 3627 l
-S
-654 4269 m
-656 4271 l
-S
-656 4271 m
-656 4275 l
-656 4280 l
-656 4284 l
-656 4289 l
-656 4293 l
-658 4296 l
-661 4298 l
-661 4302 l
-661 4307 l
-661 4311 l
-S
-661 4311 m
-661 4316 l
-661 4320 l
-663 4322 l
-665 4325 l
-665 4329 l
-665 4334 l
-665 4338 l
-665 4342 l
-665 4347 l
-667 4349 l
-670 4351 l
-S
-670 4351 m
-670 4356 l
-670 4360 l
-670 4365 l
-670 4369 l
-672 4372 l
-674 4374 l
-674 4378 l
-674 4383 l
-674 4387 l
-676 4389 l
-678 4392 l
-S
-678 4392 m
-678 4396 l
-678 4401 l
-678 4405 l
-678 4410 l
-681 4412 l
-683 4414 l
-683 4418 l
-683 4423 l
-683 4427 l
-685 4430 l
-687 4432 l
-S
-687 4432 m
-687 4436 l
-687 4441 l
-687 4445 l
-687 4450 l
-690 4452 l
-692 4454 l
-692 4459 l
-692 4463 l
-692 4468 l
-694 4470 l
-S
-652 3668 m
-652 3663 l
-652 3659 l
-652 3654 l
-654 3652 l
-S
-652 3668 m
-652 3672 l
-652 3677 l
-652 3681 l
-649 3683 l
-647 3686 l
-647 3690 l
-647 3694 l
-647 3699 l
-647 3703 l
-647 3708 l
-S
-647 3708 m
-647 3712 l
-647 3717 l
-645 3719 l
-643 3721 l
-643 3726 l
-643 3730 l
-643 3735 l
-643 3739 l
-643 3744 l
-643 3748 l
-S
-643 3748 m
-643 3753 l
-643 3757 l
-640 3759 l
-638 3762 l
-638 3766 l
-638 3770 l
-638 3775 l
-638 3779 l
-638 3784 l
-638 3788 l
-S
-638 3788 m
-638 3793 l
-638 3797 l
-638 3802 l
-638 3806 l
-638 3811 l
-636 3813 l
-634 3815 l
-634 3820 l
-634 3824 l
-634 3829 l
-S
-634 3829 m
-634 3833 l
-634 3838 l
-634 3842 l
-634 3846 l
-634 3851 l
-634 3855 l
-634 3860 l
-634 3864 l
-634 3869 l
-S
-634 3869 m
-634 3873 l
-634 3878 l
-634 3882 l
-634 3887 l
-634 3891 l
-634 3896 l
-632 3898 l
-629 3900 l
-629 3905 l
-629 3909 l
-S
-629 3909 m
-629 3913 l
-629 3918 l
-629 3922 l
-629 3927 l
-629 3931 l
-629 3936 l
-629 3940 l
-629 3945 l
-629 3949 l
-S
-629 3949 m
-629 3954 l
-629 3958 l
-629 3963 l
-629 3967 l
-629 3972 l
-629 3976 l
-629 3981 l
-629 3985 l
-629 3989 l
-S
-629 3989 m
-629 3994 l
-629 3998 l
-629 4003 l
-629 4007 l
-629 4012 l
-629 4016 l
-629 4021 l
-632 4023 l
-634 4025 l
-634 4030 l
-S
-634 4030 m
-634 4034 l
-634 4039 l
-634 4043 l
-634 4048 l
-634 4052 l
-634 4056 l
-634 4061 l
-634 4065 l
-634 4070 l
-S
-634 4070 m
-634 4074 l
-634 4079 l
-634 4083 l
-634 4088 l
-634 4092 l
-634 4097 l
-634 4101 l
-634 4106 l
-636 4108 l
-638 4110 l
-S
-638 4110 m
-638 4115 l
-638 4119 l
-638 4124 l
-638 4128 l
-638 4132 l
-638 4137 l
-638 4141 l
-638 4146 l
-638 4150 l
-S
-638 4150 m
-638 4155 l
-638 4159 l
-640 4162 l
-643 4164 l
-643 4168 l
-643 4173 l
-643 4177 l
-643 4182 l
-643 4186 l
-643 4191 l
-S
-643 4191 m
-643 4195 l
-643 4199 l
-645 4202 l
-647 4204 l
-647 4208 l
-647 4213 l
-647 4217 l
-647 4222 l
-647 4226 l
-647 4231 l
-S
-647 4231 m
-647 4235 l
-649 4237 l
-652 4240 l
-652 4244 l
-652 4249 l
-652 4253 l
-652 4258 l
-652 4262 l
-652 4267 l
-654 4269 l
-S
-1 g
-3920 4435 m
-3924 4435 l
-3924 4436 l
-3920 4436 l
-3917 4436 m
-3924 4436 l
-3924 4437 l
-3917 4437 l
-3914 4437 m
-3925 4437 l
-3925 4438 l
-3914 4438 l
-3911 4438 m
-3925 4438 l
-3925 4439 l
-3911 4439 l
-3908 4439 m
-3925 4439 l
-3925 4440 l
-3908 4440 l
-3905 4440 m
-3926 4440 l
-3926 4441 l
-3905 4441 l
-3903 4441 m
-3926 4441 l
-3926 4442 l
-3903 4442 l
-3900 4442 m
-3926 4442 l
-3926 4443 l
-3900 4443 l
-3897 4443 m
-3927 4443 l
-3927 4444 l
-3897 4444 l
-3894 4444 m
-3927 4444 l
-3927 4445 l
-3894 4445 l
-3891 4445 m
-3927 4445 l
-3927 4446 l
-3891 4446 l
-3888 4446 m
-3928 4446 l
-3928 4447 l
-3888 4447 l
-3885 4447 m
-3928 4447 l
-3928 4448 l
-3885 4448 l
-3883 4448 m
-3928 4448 l
-3928 4449 l
-3883 4449 l
-3880 4449 m
-3929 4449 l
-3929 4450 l
-3880 4450 l
-3877 4450 m
-3929 4450 l
-3929 4451 l
-3877 4451 l
-3874 4451 m
-3929 4451 l
-3929 4452 l
-3874 4452 l
-3871 4452 m
-3930 4452 l
-3930 4453 l
-3871 4453 l
-3868 4453 m
-3930 4453 l
-3930 4454 l
-3868 4454 l
-3866 4454 m
-3931 4454 l
-3931 4455 l
-3866 4455 l
-3863 4455 m
-3931 4455 l
-3931 4456 l
-3863 4456 l
-3860 4456 m
-3931 4456 l
-3931 4457 l
-3860 4457 l
-3857 4457 m
-3932 4457 l
-3932 4458 l
-3857 4458 l
-3854 4458 m
-3932 4458 l
-3932 4459 l
-3854 4459 l
-3851 4459 m
-3932 4459 l
-3932 4460 l
-3851 4460 l
-3848 4460 m
-3933 4460 l
-3933 4461 l
-3848 4461 l
-3846 4461 m
-3933 4461 l
-3933 4462 l
-3846 4462 l
-3843 4462 m
-3933 4462 l
-3933 4463 l
-3843 4463 l
-3840 4463 m
-3934 4463 l
-3934 4464 l
-3840 4464 l
-3837 4464 m
-3934 4464 l
-3934 4465 l
-3837 4465 l
-3834 4465 m
-3934 4465 l
-3934 4466 l
-3834 4466 l
-3831 4466 m
-3935 4466 l
-3935 4467 l
-3831 4467 l
-3829 4467 m
-3935 4467 l
-3935 4468 l
-3829 4468 l
-3829 4468 m
-3935 4468 l
-3935 4469 l
-3829 4469 l
-3829 4469 m
-3936 4469 l
-3936 4471 l
-3829 4471 l
-3830 4471 m
-3937 4471 l
-3937 4474 l
-3830 4474 l
-3831 4474 m
-3938 4474 l
-3938 4477 l
-3831 4477 l
-3832 4477 m
-3939 4477 l
-3939 4480 l
-3832 4480 l
-3833 4480 m
-3940 4480 l
-3940 4483 l
-3833 4483 l
-3834 4483 m
-3941 4483 l
-3941 4486 l
-3834 4486 l
-3835 4486 m
-3942 4486 l
-3942 4488 l
-3835 4488 l
-3836 4488 m
-3942 4488 l
-3942 4489 l
-3836 4489 l
-3836 4489 m
-3943 4489 l
-3943 4491 l
-3836 4491 l
-3837 4491 m
-3944 4491 l
-3944 4494 l
-3837 4494 l
-3838 4494 m
-3945 4494 l
-3945 4497 l
-3838 4497 l
-3839 4497 m
-3946 4497 l
-3946 4500 l
-3839 4500 l
-3840 4500 m
-3947 4500 l
-3947 4503 l
-3840 4503 l
-3841 4503 m
-3948 4503 l
-3948 4506 l
-3841 4506 l
-3842 4506 m
-3949 4506 l
-3949 4508 l
-3842 4508 l
-3843 4508 m
-3950 4508 l
-3950 4511 l
-3843 4511 l
-3844 4511 m
-3951 4511 l
-3951 4514 l
-3844 4514 l
-3845 4514 m
-3952 4514 l
-3952 4517 l
-3845 4517 l
-3846 4517 m
-3953 4517 l
-3953 4520 l
-3846 4520 l
-3847 4520 m
-3954 4520 l
-3954 4523 l
-3847 4523 l
-3848 4523 m
-3955 4523 l
-3955 4525 l
-3848 4525 l
-3848 4525 m
-3956 4525 l
-3956 4526 l
-3848 4526 l
-3849 4526 m
-3956 4526 l
-3956 4528 l
-3849 4528 l
-3850 4528 m
-3957 4528 l
-3957 4531 l
-3850 4531 l
-3851 4531 m
-3958 4531 l
-3958 4534 l
-3851 4534 l
-3852 4534 m
-3959 4534 l
-3959 4537 l
-3852 4537 l
-3853 4537 m
-3960 4537 l
-3960 4540 l
-3853 4540 l
-3854 4540 m
-3961 4540 l
-3961 4543 l
-3854 4543 l
-3855 4543 m
-3962 4543 l
-3962 4545 l
-3855 4545 l
-3856 4545 m
-3963 4545 l
-3963 4548 l
-3856 4548 l
-3857 4548 m
-3964 4548 l
-3964 4549 l
-3857 4549 l
-3857 4549 m
-3964 4549 l
-3964 4550 l
-3857 4550 l
-3857 4550 m
-3961 4550 l
-3961 4551 l
-3857 4551 l
-3858 4551 m
-3958 4551 l
-3958 4552 l
-3858 4552 l
-3858 4552 m
-3955 4552 l
-3955 4553 l
-3858 4553 l
-3858 4553 m
-3952 4553 l
-3952 4554 l
-3858 4554 l
-3859 4554 m
-3949 4554 l
-3949 4555 l
-3859 4555 l
-3859 4555 m
-3946 4555 l
-3946 4556 l
-3859 4556 l
-3859 4556 m
-3944 4556 l
-3944 4557 l
-3859 4557 l
-3860 4557 m
-3941 4557 l
-3941 4558 l
-3860 4558 l
-3860 4558 m
-3938 4558 l
-3938 4559 l
-3860 4559 l
-3860 4559 m
-3935 4559 l
-3935 4560 l
-3860 4560 l
-3861 4560 m
-3932 4560 l
-3932 4561 l
-3861 4561 l
-3861 4561 m
-3929 4561 l
-3929 4562 l
-3861 4562 l
-3861 4562 m
-3927 4562 l
-3927 4563 l
-3861 4563 l
-3862 4563 m
-3924 4563 l
-3924 4564 l
-3862 4564 l
-3862 4564 m
-3921 4564 l
-3921 4565 l
-3862 4565 l
-3863 4565 m
-3918 4565 l
-3918 4566 l
-3863 4566 l
-3863 4566 m
-3915 4566 l
-3915 4567 l
-3863 4567 l
-3863 4567 m
-3912 4567 l
-3912 4568 l
-3863 4568 l
-3864 4568 m
-3909 4568 l
-3909 4569 l
-3864 4569 l
-3864 4569 m
-3907 4569 l
-3907 4570 l
-3864 4570 l
-3864 4570 m
-3904 4570 l
-3904 4571 l
-3864 4571 l
-3865 4571 m
-3901 4571 l
-3901 4572 l
-3865 4572 l
-3865 4572 m
-3898 4572 l
-3898 4573 l
-3865 4573 l
-3865 4573 m
-3895 4573 l
-3895 4574 l
-3865 4574 l
-3866 4574 m
-3892 4574 l
-3892 4575 l
-3866 4575 l
-3866 4575 m
-3889 4575 l
-3889 4576 l
-3866 4576 l
-3866 4576 m
-3887 4576 l
-3887 4577 l
-3866 4577 l
-3867 4577 m
-3884 4577 l
-3884 4578 l
-3867 4578 l
-3867 4578 m
-3881 4578 l
-3881 4579 l
-3867 4579 l
-3867 4579 m
-3878 4579 l
-3878 4580 l
-3867 4580 l
-3868 4580 m
-3875 4580 l
-3875 4581 l
-3868 4581 l
-3868 4581 m
-3872 4581 l
-3872 4582 l
-3868 4582 l
-Y
-3963.1 4549 m
-3923 4435 l
-3829 4468 l
-3869 4582 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3885 4466 m
-3899 4465 l
-3911 4475 l
-3921 4493 l
-3926 4505 l
-3928 4526 l
-3925 4540 l
-3914 4548 l
-3906 4551 l
-3893 4551 l
-3881 4542 l
-3870 4524 l
-3866 4512 l
-3863 4491 l
-3867 4476 l
-3877 4468 l
-3885 4466 l
-S
-1 g
-3085 4470 m
-3095 4470 l
-3095 4471 l
-3085 4471 l
-3085 4471 m
-3102 4471 l
-3102 4472 l
-3085 4472 l
-3085 4472 m
-3109 4472 l
-3109 4473 l
-3085 4473 l
-3085 4473 m
-3116 4473 l
-3116 4474 l
-3085 4474 l
-3085 4474 m
-3123 4474 l
-3123 4475 l
-3085 4475 l
-3085 4475 m
-3130 4475 l
-3130 4476 l
-3085 4476 l
-3085 4476 m
-3137 4476 l
-3137 4477 l
-3085 4477 l
-3084 4477 m
-3144 4477 l
-3144 4478 l
-3084 4478 l
-3084 4478 m
-3150 4478 l
-3150 4479 l
-3084 4479 l
-3084 4479 m
-3157 4479 l
-3157 4480 l
-3084 4480 l
-3084 4480 m
-3164 4480 l
-3164 4481 l
-3084 4481 l
-3084 4481 m
-3171 4481 l
-3171 4482 l
-3084 4482 l
-3084 4482 m
-3178 4482 l
-3178 4483 l
-3084 4483 l
-3084 4483 m
-3185 4483 l
-3185 4484 l
-3084 4484 l
-3083 4484 m
-3192 4484 l
-3192 4485 l
-3083 4485 l
-3083 4485 m
-3199 4485 l
-3199 4486 l
-3083 4486 l
-3083 4486 m
-3206 4486 l
-3206 4487 l
-3083 4487 l
-3083 4487 m
-3213 4487 l
-3213 4488 l
-3083 4488 l
-3083 4488 m
-3220 4488 l
-3220 4489 l
-3083 4489 l
-3083 4489 m
-3227 4489 l
-3227 4490 l
-3083 4490 l
-3083 4490 m
-3234 4490 l
-3234 4491 l
-3083 4491 l
-3082 4491 m
-3241 4491 l
-3241 4492 l
-3082 4492 l
-3082 4492 m
-3248 4492 l
-3248 4493 l
-3082 4493 l
-3082 4493 m
-3255 4493 l
-3255 4494 l
-3082 4494 l
-3082 4494 m
-3262 4494 l
-3262 4495 l
-3082 4495 l
-3082 4495 m
-3268 4495 l
-3268 4496 l
-3082 4496 l
-3082 4496 m
-3269 4496 l
-3269 4497 l
-3082 4497 l
-3082 4497 m
-3268 4497 l
-3268 4498 l
-3082 4498 l
-3081 4498 m
-3268 4498 l
-3268 4504 l
-3081 4504 l
-3081 4504 m
-3267 4504 l
-3267 4505 l
-3081 4505 l
-3080 4505 m
-3267 4505 l
-3267 4511 l
-3080 4511 l
-3080 4511 m
-3266 4511 l
-3266 4512 l
-3080 4512 l
-3079 4512 m
-3266 4512 l
-3266 4518 l
-3079 4518 l
-3079 4518 m
-3265 4518 l
-3265 4519 l
-3079 4519 l
-3078 4519 m
-3265 4519 l
-3265 4525 l
-3078 4525 l
-3078 4525 m
-3264 4525 l
-3264 4526 l
-3078 4526 l
-3077 4526 m
-3264 4526 l
-3264 4532 l
-3077 4532 l
-3077 4532 m
-3263 4532 l
-3263 4533 l
-3077 4533 l
-3076 4533 m
-3263 4533 l
-3263 4539 l
-3076 4539 l
-3076 4539 m
-3262 4539 l
-3262 4540 l
-3076 4540 l
-3075 4540 m
-3262 4540 l
-3262 4546 l
-3075 4546 l
-3075 4546 m
-3261 4546 l
-3261 4547 l
-3075 4547 l
-3074 4547 m
-3261 4547 l
-3261 4553 l
-3074 4553 l
-3074 4553 m
-3260 4553 l
-3260 4554 l
-3074 4554 l
-3073 4554 m
-3260 4554 l
-3260 4560 l
-3073 4560 l
-3073 4560 m
-3259 4560 l
-3259 4561 l
-3073 4561 l
-3072 4561 m
-3259 4561 l
-3259 4567 l
-3072 4567 l
-3072 4567 m
-3258 4567 l
-3258 4568 l
-3072 4568 l
-3071 4568 m
-3258 4568 l
-3258 4574 l
-3071 4574 l
-3071 4574 m
-3257 4574 l
-3257 4575 l
-3071 4575 l
-3070 4575 m
-3257 4575 l
-3257 4581 l
-3070 4581 l
-3070 4581 m
-3256 4581 l
-3256 4582 l
-3070 4582 l
-3069 4582 m
-3256 4582 l
-3256 4588 l
-3069 4588 l
-3069 4588 m
-3255 4588 l
-3255 4590 l
-3069 4590 l
-3069 4590 m
-3255 4590 l
-3255 4591 l
-3069 4591 l
-3076 4591 m
-3255 4591 l
-3255 4592 l
-3076 4592 l
-3083 4592 m
-3255 4592 l
-3255 4593 l
-3083 4593 l
-3090 4593 m
-3255 4593 l
-3255 4594 l
-3090 4594 l
-3097 4594 m
-3255 4594 l
-3255 4595 l
-3097 4595 l
-3104 4595 m
-3254 4595 l
-3254 4596 l
-3104 4596 l
-3111 4596 m
-3254 4596 l
-3254 4597 l
-3111 4597 l
-3118 4597 m
-3254 4597 l
-3254 4598 l
-3118 4598 l
-3125 4598 m
-3254 4598 l
-3254 4599 l
-3125 4599 l
-3132 4599 m
-3254 4599 l
-3254 4600 l
-3132 4600 l
-3139 4600 m
-3254 4600 l
-3254 4601 l
-3139 4601 l
-3146 4601 m
-3254 4601 l
-3254 4602 l
-3146 4602 l
-3153 4602 m
-3253 4602 l
-3253 4603 l
-3153 4603 l
-3160 4603 m
-3253 4603 l
-3253 4604 l
-3160 4604 l
-3167 4604 m
-3253 4604 l
-3253 4605 l
-3167 4605 l
-3174 4605 m
-3253 4605 l
-3253 4606 l
-3174 4606 l
-3181 4606 m
-3253 4606 l
-3253 4607 l
-3181 4607 l
-3188 4607 m
-3253 4607 l
-3253 4608 l
-3188 4608 l
-3195 4608 m
-3253 4608 l
-3253 4609 l
-3195 4609 l
-3202 4609 m
-3252 4609 l
-3252 4610 l
-3202 4610 l
-3209 4610 m
-3252 4610 l
-3252 4611 l
-3209 4611 l
-3216 4611 m
-3252 4611 l
-3252 4612 l
-3216 4612 l
-3223 4612 m
-3252 4612 l
-3252 4613 l
-3223 4613 l
-3230 4613 m
-3252 4613 l
-3252 4614 l
-3230 4614 l
-3237 4614 m
-3252 4614 l
-3252 4615 l
-3237 4615 l
-3244 4615 m
-3252 4615 l
-3252 4616 l
-3244 4616 l
-Y
-3086.1 4469.8 m
-3069 4590 l
-3251 4616 l
-3268 4496 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3133 4582 m
-3100 4518 l
-3162 4527 l
-S
-3133 4582 m
-3146 4495 l
-S
-3224 4595 m
-3183 4589 l
-3184 4552 l
-3188 4556 l
-3199 4562 l
-3212 4564 l
-3225 4562 l
-3234 4555 l
-3240 4543 l
-3241 4534 l
-3239 4521 l
-3232 4512 l
-3220 4506 l
-3208 4504 l
-3195 4507 l
-3190 4510 l
-3185 4518 l
-S
-1 g
-2354 4208 m
-2358 4208 l
-2358 4209 l
-2354 4209 l
-2354 4209 m
-2360 4209 l
-2360 4210 l
-2354 4210 l
-2353 4210 m
-2362 4210 l
-2362 4211 l
-2353 4211 l
-2353 4211 m
-2364 4211 l
-2364 4212 l
-2353 4212 l
-2352 4212 m
-2366 4212 l
-2366 4213 l
-2352 4213 l
-2352 4213 m
-2368 4213 l
-2368 4214 l
-2352 4214 l
-2351 4214 m
-2370 4214 l
-2370 4215 l
-2351 4215 l
-2351 4215 m
-2372 4215 l
-2372 4216 l
-2351 4216 l
-2350 4216 m
-2374 4216 l
-2374 4217 l
-2350 4217 l
-2350 4217 m
-2376 4217 l
-2376 4218 l
-2350 4218 l
-2349 4218 m
-2378 4218 l
-2378 4219 l
-2349 4219 l
-2349 4219 m
-2380 4219 l
-2380 4220 l
-2349 4220 l
-2348 4220 m
-2382 4220 l
-2382 4221 l
-2348 4221 l
-2348 4221 m
-2384 4221 l
-2384 4222 l
-2348 4222 l
-2347 4222 m
-2386 4222 l
-2386 4223 l
-2347 4223 l
-2347 4223 m
-2388 4223 l
-2388 4224 l
-2347 4224 l
-2346 4224 m
-2390 4224 l
-2390 4225 l
-2346 4225 l
-2346 4225 m
-2392 4225 l
-2392 4226 l
-2346 4226 l
-2345 4226 m
-2394 4226 l
-2394 4227 l
-2345 4227 l
-2345 4227 m
-2396 4227 l
-2396 4228 l
-2345 4228 l
-2344 4228 m
-2398 4228 l
-2398 4229 l
-2344 4229 l
-2344 4229 m
-2400 4229 l
-2400 4230 l
-2344 4230 l
-2343 4230 m
-2402 4230 l
-2402 4231 l
-2343 4231 l
-2343 4231 m
-2404 4231 l
-2404 4232 l
-2343 4232 l
-2342 4232 m
-2406 4232 l
-2406 4233 l
-2342 4233 l
-2342 4233 m
-2408 4233 l
-2408 4234 l
-2342 4234 l
-2341 4234 m
-2410 4234 l
-2410 4235 l
-2341 4235 l
-2341 4235 m
-2412 4235 l
-2412 4236 l
-2341 4236 l
-2340 4236 m
-2414 4236 l
-2414 4237 l
-2340 4237 l
-2340 4237 m
-2416 4237 l
-2416 4238 l
-2340 4238 l
-2339 4238 m
-2418 4238 l
-2418 4239 l
-2339 4239 l
-2339 4239 m
-2420 4239 l
-2420 4240 l
-2339 4240 l
-2338 4240 m
-2422 4240 l
-2422 4241 l
-2338 4241 l
-2338 4241 m
-2424 4241 l
-2424 4242 l
-2338 4242 l
-2337 4242 m
-2426 4242 l
-2426 4243 l
-2337 4243 l
-2337 4243 m
-2428 4243 l
-2428 4244 l
-2337 4244 l
-2336 4244 m
-2430 4244 l
-2430 4245 l
-2336 4245 l
-2336 4245 m
-2432 4245 l
-2432 4246 l
-2336 4246 l
-2335 4246 m
-2434 4246 l
-2434 4247 l
-2335 4247 l
-2335 4247 m
-2436 4247 l
-2436 4248 l
-2335 4248 l
-2334 4248 m
-2438 4248 l
-2438 4249 l
-2334 4249 l
-2334 4249 m
-2440 4249 l
-2440 4250 l
-2334 4250 l
-2333 4250 m
-2442 4250 l
-2442 4251 l
-2333 4251 l
-2333 4251 m
-2444 4251 l
-2444 4252 l
-2333 4252 l
-2332 4252 m
-2446 4252 l
-2446 4253 l
-2332 4253 l
-2332 4253 m
-2448 4253 l
-2448 4254 l
-2332 4254 l
-2331 4254 m
-2450 4254 l
-2450 4255 l
-2331 4255 l
-2331 4255 m
-2452 4255 l
-2452 4256 l
-2331 4256 l
-2330 4256 m
-2454 4256 l
-2454 4257 l
-2330 4257 l
-2330 4257 m
-2456 4257 l
-2456 4258 l
-2330 4258 l
-2329 4258 m
-2458 4258 l
-2458 4259 l
-2329 4259 l
-2329 4259 m
-2460 4259 l
-2460 4260 l
-2329 4260 l
-2328 4260 m
-2462 4260 l
-2462 4261 l
-2328 4261 l
-2328 4261 m
-2464 4261 l
-2464 4262 l
-2328 4262 l
-2327 4262 m
-2466 4262 l
-2466 4263 l
-2327 4263 l
-2327 4263 m
-2468 4263 l
-2468 4264 l
-2327 4264 l
-2326 4264 m
-2470 4264 l
-2470 4265 l
-2326 4265 l
-2326 4265 m
-2472 4265 l
-2472 4266 l
-2326 4266 l
-2325 4266 m
-2474 4266 l
-2474 4267 l
-2325 4267 l
-2325 4267 m
-2476 4267 l
-2476 4268 l
-2325 4268 l
-2324 4268 m
-2478 4268 l
-2478 4269 l
-2324 4269 l
-2324 4269 m
-2480 4269 l
-2480 4270 l
-2324 4270 l
-2323 4270 m
-2482 4270 l
-2482 4271 l
-2323 4271 l
-2323 4271 m
-2484 4271 l
-2484 4272 l
-2323 4272 l
-2322 4272 m
-2486 4272 l
-2486 4273 l
-2322 4273 l
-2322 4273 m
-2488 4273 l
-2488 4274 l
-2322 4274 l
-2321 4274 m
-2490 4274 l
-2490 4275 l
-2321 4275 l
-2321 4275 m
-2492 4275 l
-2492 4276 l
-2321 4276 l
-2320 4276 m
-2494 4276 l
-2494 4277 l
-2320 4277 l
-2320 4277 m
-2496 4277 l
-2496 4278 l
-2320 4278 l
-2319 4278 m
-2498 4278 l
-2498 4279 l
-2319 4279 l
-2319 4279 m
-2500 4279 l
-2500 4280 l
-2319 4280 l
-2318 4280 m
-2502 4280 l
-2502 4281 l
-2318 4281 l
-2318 4281 m
-2504 4281 l
-2504 4282 l
-2318 4282 l
-2317 4282 m
-2506 4282 l
-2506 4283 l
-2317 4283 l
-2317 4283 m
-2508 4283 l
-2508 4284 l
-2317 4284 l
-2316 4284 m
-2510 4284 l
-2510 4285 l
-2316 4285 l
-2316 4285 m
-2512 4285 l
-2512 4286 l
-2316 4286 l
-2315 4286 m
-2514 4286 l
-2514 4287 l
-2315 4287 l
-2315 4287 m
-2516 4287 l
-2516 4288 l
-2315 4288 l
-2314 4288 m
-2518 4288 l
-2518 4289 l
-2314 4289 l
-2314 4289 m
-2520 4289 l
-2520 4290 l
-2314 4290 l
-2313 4290 m
-2520 4290 l
-2520 4292 l
-2313 4292 l
-2312 4292 m
-2519 4292 l
-2519 4294 l
-2312 4294 l
-2311 4294 m
-2518 4294 l
-2518 4296 l
-2311 4296 l
-2310 4296 m
-2517 4296 l
-2517 4298 l
-2310 4298 l
-2309 4298 m
-2516 4298 l
-2516 4300 l
-2309 4300 l
-2308 4300 m
-2515 4300 l
-2515 4302 l
-2308 4302 l
-2307 4302 m
-2514 4302 l
-2514 4304 l
-2307 4304 l
-2306 4304 m
-2513 4304 l
-2513 4306 l
-2306 4306 l
-2305 4306 m
-2512 4306 l
-2512 4308 l
-2305 4308 l
-2304 4308 m
-2511 4308 l
-2511 4310 l
-2304 4310 l
-2303 4310 m
-2510 4310 l
-2510 4312 l
-2303 4312 l
-2302 4312 m
-2509 4312 l
-2509 4314 l
-2302 4314 l
-2301 4314 m
-2508 4314 l
-2508 4316 l
-2301 4316 l
-2301 4316 m
-2508 4316 l
-2508 4317 l
-2301 4317 l
-2303 4317 m
-2507 4317 l
-2507 4318 l
-2303 4318 l
-2305 4318 m
-2506 4318 l
-2506 4319 l
-2305 4319 l
-2307 4319 m
-2506 4319 l
-2506 4320 l
-2307 4320 l
-2309 4320 m
-2505 4320 l
-2505 4321 l
-2309 4321 l
-2311 4321 m
-2505 4321 l
-2505 4322 l
-2311 4322 l
-2313 4322 m
-2504 4322 l
-2504 4323 l
-2313 4323 l
-2315 4323 m
-2504 4323 l
-2504 4324 l
-2315 4324 l
-2317 4324 m
-2503 4324 l
-2503 4325 l
-2317 4325 l
-2319 4325 m
-2503 4325 l
-2503 4326 l
-2319 4326 l
-2321 4326 m
-2502 4326 l
-2502 4327 l
-2321 4327 l
-2323 4327 m
-2502 4327 l
-2502 4328 l
-2323 4328 l
-2325 4328 m
-2501 4328 l
-2501 4329 l
-2325 4329 l
-2327 4329 m
-2501 4329 l
-2501 4330 l
-2327 4330 l
-2329 4330 m
-2500 4330 l
-2500 4331 l
-2329 4331 l
-2331 4331 m
-2500 4331 l
-2500 4332 l
-2331 4332 l
-2333 4332 m
-2499 4332 l
-2499 4333 l
-2333 4333 l
-2335 4333 m
-2499 4333 l
-2499 4334 l
-2335 4334 l
-2337 4334 m
-2498 4334 l
-2498 4335 l
-2337 4335 l
-2339 4335 m
-2498 4335 l
-2498 4336 l
-2339 4336 l
-2341 4336 m
-2497 4336 l
-2497 4337 l
-2341 4337 l
-2343 4337 m
-2497 4337 l
-2497 4338 l
-2343 4338 l
-2345 4338 m
-2496 4338 l
-2496 4339 l
-2345 4339 l
-2347 4339 m
-2496 4339 l
-2496 4340 l
-2347 4340 l
-2349 4340 m
-2495 4340 l
-2495 4341 l
-2349 4341 l
-2351 4341 m
-2495 4341 l
-2495 4342 l
-2351 4342 l
-2353 4342 m
-2494 4342 l
-2494 4343 l
-2353 4343 l
-2355 4343 m
-2494 4343 l
-2494 4344 l
-2355 4344 l
-2357 4344 m
-2493 4344 l
-2493 4345 l
-2357 4345 l
-2359 4345 m
-2493 4345 l
-2493 4346 l
-2359 4346 l
-2361 4346 m
-2492 4346 l
-2492 4347 l
-2361 4347 l
-2363 4347 m
-2492 4347 l
-2492 4348 l
-2363 4348 l
-2365 4348 m
-2491 4348 l
-2491 4349 l
-2365 4349 l
-2367 4349 m
-2491 4349 l
-2491 4350 l
-2367 4350 l
-2369 4350 m
-2490 4350 l
-2490 4351 l
-2369 4351 l
-2371 4351 m
-2490 4351 l
-2490 4352 l
-2371 4352 l
-2373 4352 m
-2489 4352 l
-2489 4353 l
-2373 4353 l
-2375 4353 m
-2489 4353 l
-2489 4354 l
-2375 4354 l
-2377 4354 m
-2488 4354 l
-2488 4355 l
-2377 4355 l
-2379 4355 m
-2488 4355 l
-2488 4356 l
-2379 4356 l
-2381 4356 m
-2487 4356 l
-2487 4357 l
-2381 4357 l
-2383 4357 m
-2487 4357 l
-2487 4358 l
-2383 4358 l
-2385 4358 m
-2486 4358 l
-2486 4359 l
-2385 4359 l
-2387 4359 m
-2486 4359 l
-2486 4360 l
-2387 4360 l
-2389 4360 m
-2485 4360 l
-2485 4361 l
-2389 4361 l
-2391 4361 m
-2485 4361 l
-2485 4362 l
-2391 4362 l
-2393 4362 m
-2484 4362 l
-2484 4363 l
-2393 4363 l
-2395 4363 m
-2484 4363 l
-2484 4364 l
-2395 4364 l
-2397 4364 m
-2483 4364 l
-2483 4365 l
-2397 4365 l
-2399 4365 m
-2483 4365 l
-2483 4366 l
-2399 4366 l
-2401 4366 m
-2482 4366 l
-2482 4367 l
-2401 4367 l
-2403 4367 m
-2482 4367 l
-2482 4368 l
-2403 4368 l
-2405 4368 m
-2481 4368 l
-2481 4369 l
-2405 4369 l
-2407 4369 m
-2481 4369 l
-2481 4370 l
-2407 4370 l
-2409 4370 m
-2480 4370 l
-2480 4371 l
-2409 4371 l
-2411 4371 m
-2480 4371 l
-2480 4372 l
-2411 4372 l
-2413 4372 m
-2479 4372 l
-2479 4373 l
-2413 4373 l
-2415 4373 m
-2479 4373 l
-2479 4374 l
-2415 4374 l
-2417 4374 m
-2478 4374 l
-2478 4375 l
-2417 4375 l
-2419 4375 m
-2478 4375 l
-2478 4376 l
-2419 4376 l
-2421 4376 m
-2477 4376 l
-2477 4377 l
-2421 4377 l
-2423 4377 m
-2477 4377 l
-2477 4378 l
-2423 4378 l
-2425 4378 m
-2476 4378 l
-2476 4379 l
-2425 4379 l
-2427 4379 m
-2476 4379 l
-2476 4380 l
-2427 4380 l
-2429 4380 m
-2475 4380 l
-2475 4381 l
-2429 4381 l
-2431 4381 m
-2475 4381 l
-2475 4382 l
-2431 4382 l
-2433 4382 m
-2474 4382 l
-2474 4383 l
-2433 4383 l
-2435 4383 m
-2474 4383 l
-2474 4384 l
-2435 4384 l
-2437 4384 m
-2473 4384 l
-2473 4385 l
-2437 4385 l
-2439 4385 m
-2473 4385 l
-2473 4386 l
-2439 4386 l
-2441 4386 m
-2472 4386 l
-2472 4387 l
-2441 4387 l
-2443 4387 m
-2472 4387 l
-2472 4388 l
-2443 4388 l
-2445 4388 m
-2471 4388 l
-2471 4389 l
-2445 4389 l
-2447 4389 m
-2471 4389 l
-2471 4390 l
-2447 4390 l
-2449 4390 m
-2470 4390 l
-2470 4391 l
-2449 4391 l
-2451 4391 m
-2470 4391 l
-2470 4392 l
-2451 4392 l
-2453 4392 m
-2469 4392 l
-2469 4393 l
-2453 4393 l
-2455 4393 m
-2469 4393 l
-2469 4394 l
-2455 4394 l
-2457 4394 m
-2468 4394 l
-2468 4395 l
-2457 4395 l
-2459 4395 m
-2468 4395 l
-2468 4396 l
-2459 4396 l
-2461 4396 m
-2467 4396 l
-2467 4397 l
-2461 4397 l
-2463 4397 m
-2467 4397 l
-2467 4398 l
-2463 4398 l
-Y
-2355.3 4208 m
-2301 4316 l
-2466 4398 l
-2520 4290 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2389 4309 m
-2391 4296 l
-2387 4285 l
-2378 4275 l
-2374 4273 l
-2361 4272 l
-2350 4275 l
-2341 4285 l
-2339 4288 l
-2337 4301 l
-2341 4313 l
-2350 4322 l
-2354 4324 l
-2367 4326 l
-2378 4322 l
-2389 4309 l
-2398 4290 l
-2404 4270 l
-2402 4255 l
-2393 4245 l
-2385 4242 l
-2372 4240 l
-2365 4245 l
-S
-2425 4359 m
-2415 4350 l
-2413 4335 l
-2419 4314 l
-2425 4303 l
-2438 4286 l
-2451 4279 l
-2464 4281 l
-2471 4284 l
-2481 4294 l
-2483 4309 l
-2477 4329 l
-2471 4340 l
-2458 4357 l
-2445 4365 l
-2432 4363 l
-2425 4359 l
-S
-1 g
-1733 3720 m
-1736 3720 l
-1736 3721 l
-1733 3721 l
-1732 3721 m
-1737 3721 l
-1737 3722 l
-1732 3722 l
-1731 3722 m
-1738 3722 l
-1738 3723 l
-1731 3723 l
-1730 3723 m
-1739 3723 l
-1739 3724 l
-1730 3724 l
-1729 3724 m
-1740 3724 l
-1740 3725 l
-1729 3725 l
-1728 3725 m
-1741 3725 l
-1741 3726 l
-1728 3726 l
-1727 3726 m
-1742 3726 l
-1742 3727 l
-1727 3727 l
-1726 3727 m
-1742 3727 l
-1742 3728 l
-1726 3728 l
-1725 3728 m
-1743 3728 l
-1743 3729 l
-1725 3729 l
-1723 3729 m
-1744 3729 l
-1744 3730 l
-1723 3730 l
-1722 3730 m
-1745 3730 l
-1745 3731 l
-1722 3731 l
-1721 3731 m
-1746 3731 l
-1746 3732 l
-1721 3732 l
-1720 3732 m
-1747 3732 l
-1747 3733 l
-1720 3733 l
-1719 3733 m
-1748 3733 l
-1748 3734 l
-1719 3734 l
-1718 3734 m
-1749 3734 l
-1749 3735 l
-1718 3735 l
-1717 3735 m
-1750 3735 l
-1750 3736 l
-1717 3736 l
-1716 3736 m
-1751 3736 l
-1751 3737 l
-1716 3737 l
-1715 3737 m
-1752 3737 l
-1752 3738 l
-1715 3738 l
-1714 3738 m
-1753 3738 l
-1753 3739 l
-1714 3739 l
-1713 3739 m
-1754 3739 l
-1754 3740 l
-1713 3740 l
-1712 3740 m
-1755 3740 l
-1755 3741 l
-1712 3741 l
-1711 3741 m
-1756 3741 l
-1756 3742 l
-1711 3742 l
-1710 3742 m
-1757 3742 l
-1757 3743 l
-1710 3743 l
-1709 3743 m
-1758 3743 l
-1758 3744 l
-1709 3744 l
-1708 3744 m
-1759 3744 l
-1759 3745 l
-1708 3745 l
-1707 3745 m
-1760 3745 l
-1760 3746 l
-1707 3746 l
-1706 3746 m
-1761 3746 l
-1761 3747 l
-1706 3747 l
-1705 3747 m
-1762 3747 l
-1762 3748 l
-1705 3748 l
-1704 3748 m
-1763 3748 l
-1763 3749 l
-1704 3749 l
-1703 3749 m
-1764 3749 l
-1764 3750 l
-1703 3750 l
-1702 3750 m
-1765 3750 l
-1765 3751 l
-1702 3751 l
-1701 3751 m
-1766 3751 l
-1766 3752 l
-1701 3752 l
-1700 3752 m
-1767 3752 l
-1767 3753 l
-1700 3753 l
-1699 3753 m
-1768 3753 l
-1768 3754 l
-1699 3754 l
-1697 3754 m
-1769 3754 l
-1769 3755 l
-1697 3755 l
-1696 3755 m
-1770 3755 l
-1770 3756 l
-1696 3756 l
-1695 3756 m
-1771 3756 l
-1771 3757 l
-1695 3757 l
-1694 3757 m
-1772 3757 l
-1772 3758 l
-1694 3758 l
-1693 3758 m
-1773 3758 l
-1773 3759 l
-1693 3759 l
-1692 3759 m
-1774 3759 l
-1774 3760 l
-1692 3760 l
-1691 3760 m
-1775 3760 l
-1775 3761 l
-1691 3761 l
-1690 3761 m
-1776 3761 l
-1776 3762 l
-1690 3762 l
-1689 3762 m
-1776 3762 l
-1776 3763 l
-1689 3763 l
-1688 3763 m
-1777 3763 l
-1777 3764 l
-1688 3764 l
-1687 3764 m
-1778 3764 l
-1778 3765 l
-1687 3765 l
-1686 3765 m
-1779 3765 l
-1779 3766 l
-1686 3766 l
-1685 3766 m
-1780 3766 l
-1780 3767 l
-1685 3767 l
-1684 3767 m
-1781 3767 l
-1781 3768 l
-1684 3768 l
-1683 3768 m
-1782 3768 l
-1782 3769 l
-1683 3769 l
-1682 3769 m
-1783 3769 l
-1783 3770 l
-1682 3770 l
-1681 3770 m
-1784 3770 l
-1784 3771 l
-1681 3771 l
-1680 3771 m
-1785 3771 l
-1785 3772 l
-1680 3772 l
-1679 3772 m
-1786 3772 l
-1786 3773 l
-1679 3773 l
-1678 3773 m
-1787 3773 l
-1787 3774 l
-1678 3774 l
-1677 3774 m
-1788 3774 l
-1788 3775 l
-1677 3775 l
-1676 3775 m
-1789 3775 l
-1789 3776 l
-1676 3776 l
-1675 3776 m
-1790 3776 l
-1790 3777 l
-1675 3777 l
-1674 3777 m
-1791 3777 l
-1791 3778 l
-1674 3778 l
-1673 3778 m
-1792 3778 l
-1792 3779 l
-1673 3779 l
-1671 3779 m
-1793 3779 l
-1793 3780 l
-1671 3780 l
-1670 3780 m
-1794 3780 l
-1794 3781 l
-1670 3781 l
-1669 3781 m
-1795 3781 l
-1795 3782 l
-1669 3782 l
-1668 3782 m
-1796 3782 l
-1796 3783 l
-1668 3783 l
-1667 3783 m
-1797 3783 l
-1797 3784 l
-1667 3784 l
-1666 3784 m
-1798 3784 l
-1798 3785 l
-1666 3785 l
-1665 3785 m
-1799 3785 l
-1799 3786 l
-1665 3786 l
-1664 3786 m
-1800 3786 l
-1800 3787 l
-1664 3787 l
-1663 3787 m
-1801 3787 l
-1801 3788 l
-1663 3788 l
-1662 3788 m
-1802 3788 l
-1802 3789 l
-1662 3789 l
-1661 3789 m
-1803 3789 l
-1803 3790 l
-1661 3790 l
-1660 3790 m
-1804 3790 l
-1804 3791 l
-1660 3791 l
-1659 3791 m
-1805 3791 l
-1805 3792 l
-1659 3792 l
-1658 3792 m
-1806 3792 l
-1806 3793 l
-1658 3793 l
-1657 3793 m
-1807 3793 l
-1807 3794 l
-1657 3794 l
-1656 3794 m
-1808 3794 l
-1808 3795 l
-1656 3795 l
-1655 3795 m
-1809 3795 l
-1809 3796 l
-1655 3796 l
-1654 3796 m
-1810 3796 l
-1810 3797 l
-1654 3797 l
-1653 3797 m
-1810 3797 l
-1810 3798 l
-1653 3798 l
-1652 3798 m
-1811 3798 l
-1811 3799 l
-1652 3799 l
-1651 3799 m
-1812 3799 l
-1812 3800 l
-1651 3800 l
-1650 3800 m
-1813 3800 l
-1813 3801 l
-1650 3801 l
-1649 3801 m
-1814 3801 l
-1814 3802 l
-1649 3802 l
-1648 3802 m
-1815 3802 l
-1815 3803 l
-1648 3803 l
-1647 3803 m
-1816 3803 l
-1816 3804 l
-1647 3804 l
-1647 3804 m
-1817 3804 l
-1817 3805 l
-1647 3805 l
-1647 3805 m
-1818 3805 l
-1818 3806 l
-1647 3806 l
-1648 3806 m
-1819 3806 l
-1819 3807 l
-1648 3807 l
-1649 3807 m
-1820 3807 l
-1820 3808 l
-1649 3808 l
-1650 3808 m
-1821 3808 l
-1821 3809 l
-1650 3809 l
-1651 3809 m
-1822 3809 l
-1822 3810 l
-1651 3810 l
-1652 3810 m
-1823 3810 l
-1823 3811 l
-1652 3811 l
-1653 3811 m
-1824 3811 l
-1824 3812 l
-1653 3812 l
-1654 3812 m
-1825 3812 l
-1825 3813 l
-1654 3813 l
-1655 3813 m
-1826 3813 l
-1826 3814 l
-1655 3814 l
-1656 3814 m
-1827 3814 l
-1827 3815 l
-1656 3815 l
-1657 3815 m
-1828 3815 l
-1828 3816 l
-1657 3816 l
-1658 3816 m
-1829 3816 l
-1829 3817 l
-1658 3817 l
-1659 3817 m
-1830 3817 l
-1830 3818 l
-1659 3818 l
-1660 3818 m
-1831 3818 l
-1831 3819 l
-1660 3819 l
-1661 3819 m
-1832 3819 l
-1832 3820 l
-1661 3820 l
-1662 3820 m
-1833 3820 l
-1833 3821 l
-1662 3821 l
-1663 3821 m
-1834 3821 l
-1834 3822 l
-1663 3822 l
-1664 3822 m
-1835 3822 l
-1835 3823 l
-1664 3823 l
-1665 3823 m
-1836 3823 l
-1836 3824 l
-1665 3824 l
-1666 3824 m
-1837 3824 l
-1837 3825 l
-1666 3825 l
-1667 3825 m
-1838 3825 l
-1838 3826 l
-1667 3826 l
-1668 3826 m
-1839 3826 l
-1839 3827 l
-1668 3827 l
-1669 3827 m
-1840 3827 l
-1840 3828 l
-1669 3828 l
-1670 3828 m
-1841 3828 l
-1841 3829 l
-1670 3829 l
-1671 3829 m
-1842 3829 l
-1842 3830 l
-1671 3830 l
-1672 3830 m
-1843 3830 l
-1843 3831 l
-1672 3831 l
-1673 3831 m
-1844 3831 l
-1844 3832 l
-1673 3832 l
-1674 3832 m
-1844 3832 l
-1844 3833 l
-1674 3833 l
-1675 3833 m
-1845 3833 l
-1845 3834 l
-1675 3834 l
-1676 3834 m
-1846 3834 l
-1846 3835 l
-1676 3835 l
-1677 3835 m
-1847 3835 l
-1847 3836 l
-1677 3836 l
-1678 3836 m
-1848 3836 l
-1848 3837 l
-1678 3837 l
-1679 3837 m
-1849 3837 l
-1849 3838 l
-1679 3838 l
-1680 3838 m
-1850 3838 l
-1850 3839 l
-1680 3839 l
-1681 3839 m
-1851 3839 l
-1851 3840 l
-1681 3840 l
-1682 3840 m
-1852 3840 l
-1852 3841 l
-1682 3841 l
-1682 3841 m
-1853 3841 l
-1853 3842 l
-1682 3842 l
-1683 3842 m
-1854 3842 l
-1854 3843 l
-1683 3843 l
-1684 3843 m
-1855 3843 l
-1855 3844 l
-1684 3844 l
-1685 3844 m
-1856 3844 l
-1856 3845 l
-1685 3845 l
-1686 3845 m
-1857 3845 l
-1857 3846 l
-1686 3846 l
-1687 3846 m
-1858 3846 l
-1858 3847 l
-1687 3847 l
-1688 3847 m
-1859 3847 l
-1859 3848 l
-1688 3848 l
-1689 3848 m
-1860 3848 l
-1860 3849 l
-1689 3849 l
-1690 3849 m
-1861 3849 l
-1861 3850 l
-1690 3850 l
-1691 3850 m
-1862 3850 l
-1862 3851 l
-1691 3851 l
-1692 3851 m
-1863 3851 l
-1863 3852 l
-1692 3852 l
-1693 3852 m
-1864 3852 l
-1864 3853 l
-1693 3853 l
-1694 3853 m
-1865 3853 l
-1865 3854 l
-1694 3854 l
-1695 3854 m
-1866 3854 l
-1866 3855 l
-1695 3855 l
-1696 3855 m
-1867 3855 l
-1867 3856 l
-1696 3856 l
-1697 3856 m
-1868 3856 l
-1868 3857 l
-1697 3857 l
-1698 3857 m
-1869 3857 l
-1869 3858 l
-1698 3858 l
-1699 3858 m
-1870 3858 l
-1870 3859 l
-1699 3859 l
-1700 3859 m
-1871 3859 l
-1871 3860 l
-1700 3860 l
-1701 3860 m
-1872 3860 l
-1872 3861 l
-1701 3861 l
-1702 3861 m
-1873 3861 l
-1873 3862 l
-1702 3862 l
-1703 3862 m
-1874 3862 l
-1874 3863 l
-1703 3863 l
-1704 3863 m
-1875 3863 l
-1875 3864 l
-1704 3864 l
-1705 3864 m
-1876 3864 l
-1876 3865 l
-1705 3865 l
-1706 3865 m
-1877 3865 l
-1877 3866 l
-1706 3866 l
-1707 3866 m
-1878 3866 l
-1878 3867 l
-1707 3867 l
-1708 3867 m
-1878 3867 l
-1878 3868 l
-1708 3868 l
-1709 3868 m
-1879 3868 l
-1879 3869 l
-1709 3869 l
-1710 3869 m
-1880 3869 l
-1880 3870 l
-1710 3870 l
-1711 3870 m
-1881 3870 l
-1881 3871 l
-1711 3871 l
-1712 3871 m
-1882 3871 l
-1882 3872 l
-1712 3872 l
-1713 3872 m
-1883 3872 l
-1883 3873 l
-1713 3873 l
-1714 3873 m
-1884 3873 l
-1884 3874 l
-1714 3874 l
-1715 3874 m
-1885 3874 l
-1885 3875 l
-1715 3875 l
-1716 3875 m
-1886 3875 l
-1886 3876 l
-1716 3876 l
-1717 3876 m
-1887 3876 l
-1887 3877 l
-1717 3877 l
-1718 3877 m
-1888 3877 l
-1888 3878 l
-1718 3878 l
-1718 3878 m
-1889 3878 l
-1889 3879 l
-1718 3879 l
-1719 3879 m
-1890 3879 l
-1890 3880 l
-1719 3880 l
-1720 3880 m
-1891 3880 l
-1891 3881 l
-1720 3881 l
-1721 3881 m
-1892 3881 l
-1892 3882 l
-1721 3882 l
-1722 3882 m
-1893 3882 l
-1893 3883 l
-1722 3883 l
-1723 3883 m
-1894 3883 l
-1894 3884 l
-1723 3884 l
-1724 3884 m
-1895 3884 l
-1895 3885 l
-1724 3885 l
-1725 3885 m
-1896 3885 l
-1896 3886 l
-1725 3886 l
-1726 3886 m
-1897 3886 l
-1897 3887 l
-1726 3887 l
-1727 3887 m
-1898 3887 l
-1898 3888 l
-1727 3888 l
-1728 3888 m
-1899 3888 l
-1899 3889 l
-1728 3889 l
-1729 3889 m
-1900 3889 l
-1900 3890 l
-1729 3890 l
-1730 3890 m
-1901 3890 l
-1901 3891 l
-1730 3891 l
-1731 3891 m
-1902 3891 l
-1902 3892 l
-1731 3892 l
-1732 3892 m
-1903 3892 l
-1903 3893 l
-1732 3893 l
-1733 3893 m
-1904 3893 l
-1904 3894 l
-1733 3894 l
-1734 3894 m
-1905 3894 l
-1905 3895 l
-1734 3895 l
-1735 3895 m
-1906 3895 l
-1906 3896 l
-1735 3896 l
-1736 3896 m
-1907 3896 l
-1907 3897 l
-1736 3897 l
-1737 3897 m
-1908 3897 l
-1908 3898 l
-1737 3898 l
-1738 3898 m
-1909 3898 l
-1909 3899 l
-1738 3899 l
-1739 3899 m
-1910 3899 l
-1910 3900 l
-1739 3900 l
-1740 3900 m
-1911 3900 l
-1911 3901 l
-1740 3901 l
-1741 3901 m
-1912 3901 l
-1912 3902 l
-1741 3902 l
-1742 3902 m
-1913 3902 l
-1913 3903 l
-1742 3903 l
-1743 3903 m
-1912 3903 l
-1912 3904 l
-1743 3904 l
-1744 3904 m
-1911 3904 l
-1911 3905 l
-1744 3905 l
-1745 3905 m
-1910 3905 l
-1910 3906 l
-1745 3906 l
-1746 3906 m
-1909 3906 l
-1909 3907 l
-1746 3907 l
-1747 3907 m
-1908 3907 l
-1908 3908 l
-1747 3908 l
-1748 3908 m
-1907 3908 l
-1907 3909 l
-1748 3909 l
-1749 3909 m
-1906 3909 l
-1906 3910 l
-1749 3910 l
-1750 3910 m
-1905 3910 l
-1905 3911 l
-1750 3911 l
-1751 3911 m
-1904 3911 l
-1904 3912 l
-1751 3912 l
-1752 3912 m
-1903 3912 l
-1903 3913 l
-1752 3913 l
-1753 3913 m
-1902 3913 l
-1902 3914 l
-1753 3914 l
-1753 3914 m
-1901 3914 l
-1901 3915 l
-1753 3915 l
-1754 3915 m
-1900 3915 l
-1900 3916 l
-1754 3916 l
-1755 3916 m
-1899 3916 l
-1899 3917 l
-1755 3917 l
-1756 3917 m
-1898 3917 l
-1898 3918 l
-1756 3918 l
-1757 3918 m
-1897 3918 l
-1897 3919 l
-1757 3919 l
-1758 3919 m
-1896 3919 l
-1896 3920 l
-1758 3920 l
-1759 3920 m
-1895 3920 l
-1895 3921 l
-1759 3921 l
-1760 3921 m
-1894 3921 l
-1894 3922 l
-1760 3922 l
-1761 3922 m
-1893 3922 l
-1893 3923 l
-1761 3923 l
-1762 3923 m
-1892 3923 l
-1892 3924 l
-1762 3924 l
-1763 3924 m
-1891 3924 l
-1891 3925 l
-1763 3925 l
-1764 3925 m
-1890 3925 l
-1890 3926 l
-1764 3926 l
-1765 3926 m
-1889 3926 l
-1889 3927 l
-1765 3927 l
-1766 3927 m
-1888 3927 l
-1888 3928 l
-1766 3928 l
-1767 3928 m
-1887 3928 l
-1887 3929 l
-1767 3929 l
-1768 3929 m
-1886 3929 l
-1886 3930 l
-1768 3930 l
-1769 3930 m
-1885 3930 l
-1885 3931 l
-1769 3931 l
-1770 3931 m
-1883 3931 l
-1883 3932 l
-1770 3932 l
-1771 3932 m
-1882 3932 l
-1882 3933 l
-1771 3933 l
-1772 3933 m
-1881 3933 l
-1881 3934 l
-1772 3934 l
-1773 3934 m
-1880 3934 l
-1880 3935 l
-1773 3935 l
-1774 3935 m
-1879 3935 l
-1879 3936 l
-1774 3936 l
-1775 3936 m
-1878 3936 l
-1878 3937 l
-1775 3937 l
-1776 3937 m
-1877 3937 l
-1877 3938 l
-1776 3938 l
-1777 3938 m
-1876 3938 l
-1876 3939 l
-1777 3939 l
-1778 3939 m
-1875 3939 l
-1875 3940 l
-1778 3940 l
-1779 3940 m
-1874 3940 l
-1874 3941 l
-1779 3941 l
-1780 3941 m
-1873 3941 l
-1873 3942 l
-1780 3942 l
-1781 3942 m
-1872 3942 l
-1872 3943 l
-1781 3943 l
-1782 3943 m
-1871 3943 l
-1871 3944 l
-1782 3944 l
-1783 3944 m
-1870 3944 l
-1870 3945 l
-1783 3945 l
-1784 3945 m
-1869 3945 l
-1869 3946 l
-1784 3946 l
-1785 3946 m
-1868 3946 l
-1868 3947 l
-1785 3947 l
-1786 3947 m
-1867 3947 l
-1867 3948 l
-1786 3948 l
-1787 3948 m
-1866 3948 l
-1866 3949 l
-1787 3949 l
-1788 3949 m
-1865 3949 l
-1865 3950 l
-1788 3950 l
-1789 3950 m
-1864 3950 l
-1864 3951 l
-1789 3951 l
-1789 3951 m
-1863 3951 l
-1863 3952 l
-1789 3952 l
-1790 3952 m
-1862 3952 l
-1862 3953 l
-1790 3953 l
-1791 3953 m
-1861 3953 l
-1861 3954 l
-1791 3954 l
-1792 3954 m
-1860 3954 l
-1860 3955 l
-1792 3955 l
-1793 3955 m
-1859 3955 l
-1859 3956 l
-1793 3956 l
-1794 3956 m
-1858 3956 l
-1858 3957 l
-1794 3957 l
-1795 3957 m
-1857 3957 l
-1857 3958 l
-1795 3958 l
-1796 3958 m
-1856 3958 l
-1856 3959 l
-1796 3959 l
-1797 3959 m
-1854 3959 l
-1854 3960 l
-1797 3960 l
-1798 3960 m
-1853 3960 l
-1853 3961 l
-1798 3961 l
-1799 3961 m
-1852 3961 l
-1852 3962 l
-1799 3962 l
-1800 3962 m
-1851 3962 l
-1851 3963 l
-1800 3963 l
-1801 3963 m
-1850 3963 l
-1850 3964 l
-1801 3964 l
-1802 3964 m
-1849 3964 l
-1849 3965 l
-1802 3965 l
-1803 3965 m
-1848 3965 l
-1848 3966 l
-1803 3966 l
-1804 3966 m
-1847 3966 l
-1847 3967 l
-1804 3967 l
-1805 3967 m
-1846 3967 l
-1846 3968 l
-1805 3968 l
-1806 3968 m
-1845 3968 l
-1845 3969 l
-1806 3969 l
-1807 3969 m
-1844 3969 l
-1844 3970 l
-1807 3970 l
-1808 3970 m
-1843 3970 l
-1843 3971 l
-1808 3971 l
-1809 3971 m
-1842 3971 l
-1842 3972 l
-1809 3972 l
-1810 3972 m
-1841 3972 l
-1841 3973 l
-1810 3973 l
-1811 3973 m
-1840 3973 l
-1840 3974 l
-1811 3974 l
-1812 3974 m
-1839 3974 l
-1839 3975 l
-1812 3975 l
-1813 3975 m
-1838 3975 l
-1838 3976 l
-1813 3976 l
-1814 3976 m
-1837 3976 l
-1837 3977 l
-1814 3977 l
-1815 3977 m
-1836 3977 l
-1836 3978 l
-1815 3978 l
-1816 3978 m
-1835 3978 l
-1835 3979 l
-1816 3979 l
-1817 3979 m
-1834 3979 l
-1834 3980 l
-1817 3980 l
-1818 3980 m
-1833 3980 l
-1833 3981 l
-1818 3981 l
-1819 3981 m
-1832 3981 l
-1832 3982 l
-1819 3982 l
-1820 3982 m
-1831 3982 l
-1831 3983 l
-1820 3983 l
-1821 3983 m
-1830 3983 l
-1830 3984 l
-1821 3984 l
-1822 3984 m
-1829 3984 l
-1829 3985 l
-1822 3985 l
-1823 3985 m
-1828 3985 l
-1828 3986 l
-1823 3986 l
-1824 3986 m
-1827 3986 l
-1827 3987 l
-1824 3987 l
-Y
-1734.3 3720.1 m
-1647 3804 l
-1825 3987 l
-1912 3903 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1686 3796 m
-1689 3805 l
-1688 3823 l
-1751 3762 l
-S
-1729 3865 m
-1761 3898 l
-1768 3856 l
-1776 3865 l
-1785 3869 l
-1791 3869 l
-1803 3863 l
-1809 3857 l
-1815 3845 l
-1815 3834 l
-1809 3822 l
-1801 3813 l
-1789 3807 l
-1783 3807 l
-1774 3809 l
-S
-1816 3955 m
-1787 3925 l
-1811 3896 l
-1811 3901 l
-1817 3913 l
-1826 3922 l
-1837 3928 l
-1849 3929 l
-1861 3923 l
-1867 3917 l
-1873 3905 l
-1873 3894 l
-1868 3882 l
-1859 3873 l
-1847 3867 l
-1841 3866 l
-1832 3869 l
-S
-1 g
-1467 3111 m
-1471 3111 l
-1471 3112 l
-1467 3112 l
-1462 3112 m
-1471 3112 l
-1471 3113 l
-1462 3113 l
-1456 3113 m
-1471 3113 l
-1471 3114 l
-1456 3114 l
-1451 3114 m
-1471 3114 l
-1471 3115 l
-1451 3115 l
-1446 3115 m
-1472 3115 l
-1472 3116 l
-1446 3116 l
-1441 3116 m
-1472 3116 l
-1472 3117 l
-1441 3117 l
-1435 3117 m
-1472 3117 l
-1472 3118 l
-1435 3118 l
-1430 3118 m
-1472 3118 l
-1472 3119 l
-1430 3119 l
-1425 3119 m
-1472 3119 l
-1472 3120 l
-1425 3120 l
-1419 3120 m
-1472 3120 l
-1472 3121 l
-1419 3121 l
-1414 3121 m
-1473 3121 l
-1473 3122 l
-1414 3122 l
-1409 3122 m
-1473 3122 l
-1473 3123 l
-1409 3123 l
-1403 3123 m
-1473 3123 l
-1473 3124 l
-1403 3124 l
-1398 3124 m
-1473 3124 l
-1473 3125 l
-1398 3125 l
-1393 3125 m
-1473 3125 l
-1473 3126 l
-1393 3126 l
-1388 3126 m
-1474 3126 l
-1474 3127 l
-1388 3127 l
-1382 3127 m
-1474 3127 l
-1474 3128 l
-1382 3128 l
-1377 3128 m
-1474 3128 l
-1474 3129 l
-1377 3129 l
-1372 3129 m
-1474 3129 l
-1474 3130 l
-1372 3130 l
-1366 3130 m
-1474 3130 l
-1474 3131 l
-1366 3131 l
-1361 3131 m
-1475 3131 l
-1475 3132 l
-1361 3132 l
-1356 3132 m
-1475 3132 l
-1475 3133 l
-1356 3133 l
-1351 3133 m
-1475 3133 l
-1475 3134 l
-1351 3134 l
-1351 3134 m
-1475 3134 l
-1475 3137 l
-1351 3137 l
-1351 3137 m
-1476 3137 l
-1476 3140 l
-1351 3140 l
-1352 3140 m
-1476 3140 l
-1476 3142 l
-1352 3142 l
-1352 3142 m
-1477 3142 l
-1477 3145 l
-1352 3145 l
-1353 3145 m
-1477 3145 l
-1477 3147 l
-1353 3147 l
-1353 3147 m
-1478 3147 l
-1478 3150 l
-1353 3150 l
-1354 3150 m
-1478 3150 l
-1478 3153 l
-1354 3153 l
-1354 3153 m
-1479 3153 l
-1479 3156 l
-1354 3156 l
-1355 3156 m
-1479 3156 l
-1479 3158 l
-1355 3158 l
-1355 3158 m
-1480 3158 l
-1480 3161 l
-1355 3161 l
-1356 3161 m
-1480 3161 l
-1480 3163 l
-1356 3163 l
-1356 3163 m
-1481 3163 l
-1481 3166 l
-1356 3166 l
-1357 3166 m
-1481 3166 l
-1481 3169 l
-1357 3169 l
-1357 3169 m
-1482 3169 l
-1482 3172 l
-1357 3172 l
-1358 3172 m
-1482 3172 l
-1482 3174 l
-1358 3174 l
-1358 3174 m
-1483 3174 l
-1483 3177 l
-1358 3177 l
-1359 3177 m
-1483 3177 l
-1483 3180 l
-1359 3180 l
-1359 3180 m
-1484 3180 l
-1484 3182 l
-1359 3182 l
-1360 3182 m
-1484 3182 l
-1484 3185 l
-1360 3185 l
-1360 3185 m
-1485 3185 l
-1485 3188 l
-1360 3188 l
-1361 3188 m
-1485 3188 l
-1485 3190 l
-1361 3190 l
-1361 3190 m
-1486 3190 l
-1486 3193 l
-1361 3193 l
-1362 3193 m
-1486 3193 l
-1486 3196 l
-1362 3196 l
-1362 3196 m
-1487 3196 l
-1487 3198 l
-1362 3198 l
-1363 3198 m
-1487 3198 l
-1487 3201 l
-1363 3201 l
-1363 3201 m
-1488 3201 l
-1488 3204 l
-1363 3204 l
-1364 3204 m
-1488 3204 l
-1488 3206 l
-1364 3206 l
-1364 3206 m
-1489 3206 l
-1489 3209 l
-1364 3209 l
-1365 3209 m
-1489 3209 l
-1489 3212 l
-1365 3212 l
-1365 3212 m
-1490 3212 l
-1490 3214 l
-1365 3214 l
-1366 3214 m
-1490 3214 l
-1490 3217 l
-1366 3217 l
-1366 3217 m
-1491 3217 l
-1491 3220 l
-1366 3220 l
-1367 3220 m
-1491 3220 l
-1491 3222 l
-1367 3222 l
-1367 3222 m
-1492 3222 l
-1492 3225 l
-1367 3225 l
-1368 3225 m
-1492 3225 l
-1492 3228 l
-1368 3228 l
-1368 3228 m
-1493 3228 l
-1493 3230 l
-1368 3230 l
-1369 3230 m
-1493 3230 l
-1493 3233 l
-1369 3233 l
-1369 3233 m
-1494 3233 l
-1494 3236 l
-1369 3236 l
-1370 3236 m
-1494 3236 l
-1494 3238 l
-1370 3238 l
-1370 3238 m
-1495 3238 l
-1495 3241 l
-1370 3241 l
-1371 3241 m
-1495 3241 l
-1495 3244 l
-1371 3244 l
-1371 3244 m
-1496 3244 l
-1496 3246 l
-1371 3246 l
-1372 3246 m
-1496 3246 l
-1496 3249 l
-1372 3249 l
-1372 3249 m
-1497 3249 l
-1497 3252 l
-1372 3252 l
-1373 3252 m
-1497 3252 l
-1497 3254 l
-1373 3254 l
-1373 3254 m
-1498 3254 l
-1498 3257 l
-1373 3257 l
-1374 3257 m
-1498 3257 l
-1498 3260 l
-1374 3260 l
-1374 3260 m
-1499 3260 l
-1499 3262 l
-1374 3262 l
-1375 3262 m
-1499 3262 l
-1499 3265 l
-1375 3265 l
-1375 3265 m
-1500 3265 l
-1500 3267 l
-1375 3267 l
-1376 3267 m
-1500 3267 l
-1500 3271 l
-1376 3271 l
-1376 3271 m
-1501 3271 l
-1501 3273 l
-1376 3273 l
-1377 3273 m
-1501 3273 l
-1501 3276 l
-1377 3276 l
-1377 3276 m
-1502 3276 l
-1502 3278 l
-1377 3278 l
-1378 3278 m
-1502 3278 l
-1502 3281 l
-1378 3281 l
-1378 3281 m
-1503 3281 l
-1503 3283 l
-1378 3283 l
-1379 3283 m
-1503 3283 l
-1503 3287 l
-1379 3287 l
-1379 3287 m
-1504 3287 l
-1504 3289 l
-1379 3289 l
-1380 3289 m
-1504 3289 l
-1504 3292 l
-1380 3292 l
-1380 3292 m
-1505 3292 l
-1505 3294 l
-1380 3294 l
-1381 3294 m
-1505 3294 l
-1505 3297 l
-1381 3297 l
-1381 3297 m
-1506 3297 l
-1506 3299 l
-1381 3299 l
-1382 3299 m
-1506 3299 l
-1506 3303 l
-1382 3303 l
-1382 3303 m
-1507 3303 l
-1507 3305 l
-1382 3305 l
-1383 3305 m
-1507 3305 l
-1507 3308 l
-1383 3308 l
-1383 3308 m
-1508 3308 l
-1508 3310 l
-1383 3310 l
-1384 3310 m
-1508 3310 l
-1508 3313 l
-1384 3313 l
-1384 3313 m
-1509 3313 l
-1509 3315 l
-1384 3315 l
-1385 3315 m
-1509 3315 l
-1509 3319 l
-1385 3319 l
-1385 3319 m
-1510 3319 l
-1510 3321 l
-1385 3321 l
-1386 3321 m
-1510 3321 l
-1510 3324 l
-1386 3324 l
-1386 3324 m
-1511 3324 l
-1511 3326 l
-1386 3326 l
-1387 3326 m
-1511 3326 l
-1511 3329 l
-1387 3329 l
-1387 3329 m
-1512 3329 l
-1512 3331 l
-1387 3331 l
-1388 3331 m
-1512 3331 l
-1512 3335 l
-1388 3335 l
-1388 3335 m
-1513 3335 l
-1513 3337 l
-1388 3337 l
-1389 3337 m
-1513 3337 l
-1513 3340 l
-1389 3340 l
-1389 3340 m
-1514 3340 l
-1514 3342 l
-1389 3342 l
-1390 3342 m
-1514 3342 l
-1514 3345 l
-1390 3345 l
-1390 3345 m
-1515 3345 l
-1515 3347 l
-1390 3347 l
-1391 3347 m
-1515 3347 l
-1515 3351 l
-1391 3351 l
-1391 3351 m
-1516 3351 l
-1516 3353 l
-1391 3353 l
-1392 3353 m
-1516 3353 l
-1516 3356 l
-1392 3356 l
-1392 3356 m
-1517 3356 l
-1517 3358 l
-1392 3358 l
-1393 3358 m
-1517 3358 l
-1517 3362 l
-1393 3362 l
-1393 3362 m
-1518 3362 l
-1518 3363 l
-1393 3363 l
-1394 3363 m
-1512 3363 l
-1512 3364 l
-1394 3364 l
-1394 3364 m
-1507 3364 l
-1507 3365 l
-1394 3365 l
-1394 3365 m
-1501 3365 l
-1501 3366 l
-1394 3366 l
-1394 3366 m
-1496 3366 l
-1496 3367 l
-1394 3367 l
-1394 3367 m
-1490 3367 l
-1490 3368 l
-1394 3368 l
-1394 3368 m
-1485 3368 l
-1485 3369 l
-1394 3369 l
-1395 3369 m
-1480 3369 l
-1480 3370 l
-1395 3370 l
-1395 3370 m
-1474 3370 l
-1474 3371 l
-1395 3371 l
-1395 3371 m
-1469 3371 l
-1469 3372 l
-1395 3372 l
-1395 3372 m
-1463 3372 l
-1463 3373 l
-1395 3373 l
-1395 3373 m
-1458 3373 l
-1458 3374 l
-1395 3374 l
-1396 3374 m
-1453 3374 l
-1453 3375 l
-1396 3375 l
-1396 3375 m
-1447 3375 l
-1447 3376 l
-1396 3376 l
-1396 3376 m
-1442 3376 l
-1442 3377 l
-1396 3377 l
-1396 3377 m
-1436 3377 l
-1436 3378 l
-1396 3378 l
-1396 3378 m
-1431 3378 l
-1431 3379 l
-1396 3379 l
-1397 3379 m
-1426 3379 l
-1426 3380 l
-1397 3380 l
-1397 3380 m
-1420 3380 l
-1420 3381 l
-1397 3381 l
-1397 3381 m
-1415 3381 l
-1415 3382 l
-1397 3382 l
-1397 3382 m
-1409 3382 l
-1409 3383 l
-1397 3383 l
-1397 3383 m
-1404 3383 l
-1404 3384 l
-1397 3384 l
-Y
-1470.2 3111.5 m
-1351 3134 l
-1398 3384 l
-1517 3362 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1388 3148 m
-1385 3157 l
-1375 3172 l
-1462 3156 l
-S
-1389 3242 m
-1390 3229 l
-1398 3223 l
-1406 3221 l
-1415 3224 l
-1421 3231 l
-1428 3247 l
-1434 3259 l
-1444 3265 l
-1453 3268 l
-1465 3265 l
-1473 3260 l
-1476 3255 l
-1478 3242 l
-1475 3225 l
-1468 3214 l
-1463 3211 l
-1454 3208 l
-1442 3210 l
-1435 3216 l
-1428 3226 l
-1426 3239 l
-1425 3256 l
-1423 3265 l
-1415 3271 l
-1407 3272 l
-1398 3270 l
-1392 3258 l
-1389 3242 l
-S
-1405 3328 m
-1407 3315 l
-1417 3304 l
-1437 3296 l
-1449 3294 l
-1471 3294 l
-1485 3300 l
-1491 3312 l
-1493 3320 l
-1491 3333 l
-1480 3343 l
-1460 3351 l
-1448 3354 l
-1427 3354 l
-1413 3348 l
-1406 3336 l
-1405 3328 l
-S
-1 g
-1766 2327 m
-1769 2327 l
-1769 2328 l
-1766 2328 l
-1765 2328 m
-1770 2328 l
-1770 2329 l
-1765 2329 l
-1764 2329 m
-1771 2329 l
-1771 2330 l
-1764 2330 l
-1763 2330 m
-1772 2330 l
-1772 2331 l
-1763 2331 l
-1762 2331 m
-1773 2331 l
-1773 2332 l
-1762 2332 l
-1761 2332 m
-1774 2332 l
-1774 2333 l
-1761 2333 l
-1760 2333 m
-1775 2333 l
-1775 2334 l
-1760 2334 l
-1759 2334 m
-1776 2334 l
-1776 2335 l
-1759 2335 l
-1758 2335 m
-1777 2335 l
-1777 2336 l
-1758 2336 l
-1757 2336 m
-1778 2336 l
-1778 2337 l
-1757 2337 l
-1756 2337 m
-1779 2337 l
-1779 2338 l
-1756 2338 l
-1755 2338 m
-1780 2338 l
-1780 2339 l
-1755 2339 l
-1754 2339 m
-1781 2339 l
-1781 2340 l
-1754 2340 l
-1753 2340 m
-1782 2340 l
-1782 2341 l
-1753 2341 l
-1752 2341 m
-1783 2341 l
-1783 2342 l
-1752 2342 l
-1751 2342 m
-1784 2342 l
-1784 2343 l
-1751 2343 l
-1750 2343 m
-1785 2343 l
-1785 2344 l
-1750 2344 l
-1749 2344 m
-1786 2344 l
-1786 2345 l
-1749 2345 l
-1748 2345 m
-1787 2345 l
-1787 2346 l
-1748 2346 l
-1747 2346 m
-1788 2346 l
-1788 2347 l
-1747 2347 l
-1746 2347 m
-1789 2347 l
-1789 2348 l
-1746 2348 l
-1745 2348 m
-1790 2348 l
-1790 2349 l
-1745 2349 l
-1744 2349 m
-1791 2349 l
-1791 2350 l
-1744 2350 l
-1743 2350 m
-1792 2350 l
-1792 2351 l
-1743 2351 l
-1742 2351 m
-1793 2351 l
-1793 2352 l
-1742 2352 l
-1741 2352 m
-1794 2352 l
-1794 2353 l
-1741 2353 l
-1739 2353 m
-1795 2353 l
-1795 2354 l
-1739 2354 l
-1738 2354 m
-1796 2354 l
-1796 2355 l
-1738 2355 l
-1737 2355 m
-1796 2355 l
-1796 2356 l
-1737 2356 l
-1736 2356 m
-1797 2356 l
-1797 2357 l
-1736 2357 l
-1735 2357 m
-1798 2357 l
-1798 2358 l
-1735 2358 l
-1734 2358 m
-1799 2358 l
-1799 2359 l
-1734 2359 l
-1733 2359 m
-1800 2359 l
-1800 2360 l
-1733 2360 l
-1732 2360 m
-1801 2360 l
-1801 2361 l
-1732 2361 l
-1731 2361 m
-1802 2361 l
-1802 2362 l
-1731 2362 l
-1730 2362 m
-1803 2362 l
-1803 2363 l
-1730 2363 l
-1729 2363 m
-1804 2363 l
-1804 2364 l
-1729 2364 l
-1728 2364 m
-1805 2364 l
-1805 2365 l
-1728 2365 l
-1727 2365 m
-1806 2365 l
-1806 2366 l
-1727 2366 l
-1726 2366 m
-1807 2366 l
-1807 2367 l
-1726 2367 l
-1725 2367 m
-1808 2367 l
-1808 2368 l
-1725 2368 l
-1724 2368 m
-1809 2368 l
-1809 2369 l
-1724 2369 l
-1723 2369 m
-1810 2369 l
-1810 2370 l
-1723 2370 l
-1722 2370 m
-1811 2370 l
-1811 2371 l
-1722 2371 l
-1721 2371 m
-1812 2371 l
-1812 2372 l
-1721 2372 l
-1720 2372 m
-1813 2372 l
-1813 2373 l
-1720 2373 l
-1719 2373 m
-1814 2373 l
-1814 2374 l
-1719 2374 l
-1718 2374 m
-1815 2374 l
-1815 2375 l
-1718 2375 l
-1717 2375 m
-1816 2375 l
-1816 2376 l
-1717 2376 l
-1716 2376 m
-1817 2376 l
-1817 2377 l
-1716 2377 l
-1715 2377 m
-1818 2377 l
-1818 2378 l
-1715 2378 l
-1714 2378 m
-1819 2378 l
-1819 2379 l
-1714 2379 l
-1712 2379 m
-1820 2379 l
-1820 2380 l
-1712 2380 l
-1711 2380 m
-1821 2380 l
-1821 2381 l
-1711 2381 l
-1710 2381 m
-1822 2381 l
-1822 2382 l
-1710 2382 l
-1709 2382 m
-1823 2382 l
-1823 2383 l
-1709 2383 l
-1708 2383 m
-1823 2383 l
-1823 2384 l
-1708 2384 l
-1707 2384 m
-1824 2384 l
-1824 2385 l
-1707 2385 l
-1706 2385 m
-1825 2385 l
-1825 2386 l
-1706 2386 l
-1705 2386 m
-1826 2386 l
-1826 2387 l
-1705 2387 l
-1704 2387 m
-1827 2387 l
-1827 2388 l
-1704 2388 l
-1703 2388 m
-1828 2388 l
-1828 2389 l
-1703 2389 l
-1702 2389 m
-1829 2389 l
-1829 2390 l
-1702 2390 l
-1701 2390 m
-1830 2390 l
-1830 2391 l
-1701 2391 l
-1700 2391 m
-1831 2391 l
-1831 2392 l
-1700 2392 l
-1699 2392 m
-1832 2392 l
-1832 2393 l
-1699 2393 l
-1698 2393 m
-1833 2393 l
-1833 2394 l
-1698 2394 l
-1697 2394 m
-1834 2394 l
-1834 2395 l
-1697 2395 l
-1696 2395 m
-1835 2395 l
-1835 2396 l
-1696 2396 l
-1695 2396 m
-1836 2396 l
-1836 2397 l
-1695 2397 l
-1694 2397 m
-1837 2397 l
-1837 2398 l
-1694 2398 l
-1693 2398 m
-1838 2398 l
-1838 2399 l
-1693 2399 l
-1692 2399 m
-1839 2399 l
-1839 2400 l
-1692 2400 l
-1691 2400 m
-1840 2400 l
-1840 2401 l
-1691 2401 l
-1690 2401 m
-1841 2401 l
-1841 2402 l
-1690 2402 l
-1689 2402 m
-1842 2402 l
-1842 2403 l
-1689 2403 l
-1688 2403 m
-1843 2403 l
-1843 2404 l
-1688 2404 l
-1687 2404 m
-1844 2404 l
-1844 2405 l
-1687 2405 l
-1686 2405 m
-1845 2405 l
-1845 2406 l
-1686 2406 l
-1684 2406 m
-1846 2406 l
-1846 2407 l
-1684 2407 l
-1683 2407 m
-1847 2407 l
-1847 2408 l
-1683 2408 l
-1682 2408 m
-1848 2408 l
-1848 2409 l
-1682 2409 l
-1681 2409 m
-1849 2409 l
-1849 2410 l
-1681 2410 l
-1680 2410 m
-1850 2410 l
-1850 2411 l
-1680 2411 l
-1679 2411 m
-1850 2411 l
-1850 2412 l
-1679 2412 l
-1678 2412 m
-1851 2412 l
-1851 2413 l
-1678 2413 l
-1677 2413 m
-1852 2413 l
-1852 2414 l
-1677 2414 l
-1676 2414 m
-1853 2414 l
-1853 2415 l
-1676 2415 l
-1675 2415 m
-1852 2415 l
-1852 2416 l
-1675 2416 l
-1674 2416 m
-1851 2416 l
-1851 2417 l
-1674 2417 l
-1673 2417 m
-1850 2417 l
-1850 2418 l
-1673 2418 l
-1672 2418 m
-1849 2418 l
-1849 2419 l
-1672 2419 l
-1671 2419 m
-1848 2419 l
-1848 2420 l
-1671 2420 l
-1670 2420 m
-1847 2420 l
-1847 2421 l
-1670 2421 l
-1669 2421 m
-1846 2421 l
-1846 2422 l
-1669 2422 l
-1668 2422 m
-1845 2422 l
-1845 2423 l
-1668 2423 l
-1667 2423 m
-1844 2423 l
-1844 2424 l
-1667 2424 l
-1666 2424 m
-1843 2424 l
-1843 2425 l
-1666 2425 l
-1665 2425 m
-1842 2425 l
-1842 2426 l
-1665 2426 l
-1664 2426 m
-1841 2426 l
-1841 2427 l
-1664 2427 l
-1663 2427 m
-1840 2427 l
-1840 2428 l
-1663 2428 l
-1662 2428 m
-1839 2428 l
-1839 2429 l
-1662 2429 l
-1661 2429 m
-1838 2429 l
-1838 2430 l
-1661 2430 l
-1660 2430 m
-1837 2430 l
-1837 2431 l
-1660 2431 l
-1659 2431 m
-1836 2431 l
-1836 2432 l
-1659 2432 l
-1657 2432 m
-1835 2432 l
-1835 2433 l
-1657 2433 l
-1656 2433 m
-1834 2433 l
-1834 2434 l
-1656 2434 l
-1655 2434 m
-1833 2434 l
-1833 2435 l
-1655 2435 l
-1654 2435 m
-1832 2435 l
-1832 2436 l
-1654 2436 l
-1653 2436 m
-1831 2436 l
-1831 2437 l
-1653 2437 l
-1652 2437 m
-1830 2437 l
-1830 2438 l
-1652 2438 l
-1651 2438 m
-1829 2438 l
-1829 2439 l
-1651 2439 l
-1650 2439 m
-1827 2439 l
-1827 2440 l
-1650 2440 l
-1649 2440 m
-1826 2440 l
-1826 2441 l
-1649 2441 l
-1648 2441 m
-1825 2441 l
-1825 2442 l
-1648 2442 l
-1647 2442 m
-1824 2442 l
-1824 2443 l
-1647 2443 l
-1646 2443 m
-1823 2443 l
-1823 2444 l
-1646 2444 l
-1645 2444 m
-1822 2444 l
-1822 2445 l
-1645 2445 l
-1644 2445 m
-1821 2445 l
-1821 2446 l
-1644 2446 l
-1643 2446 m
-1820 2446 l
-1820 2447 l
-1643 2447 l
-1642 2447 m
-1819 2447 l
-1819 2448 l
-1642 2448 l
-1641 2448 m
-1818 2448 l
-1818 2449 l
-1641 2449 l
-1640 2449 m
-1817 2449 l
-1817 2450 l
-1640 2450 l
-1639 2450 m
-1816 2450 l
-1816 2451 l
-1639 2451 l
-1638 2451 m
-1815 2451 l
-1815 2452 l
-1638 2452 l
-1637 2452 m
-1814 2452 l
-1814 2453 l
-1637 2453 l
-1636 2453 m
-1813 2453 l
-1813 2454 l
-1636 2454 l
-1635 2454 m
-1812 2454 l
-1812 2455 l
-1635 2455 l
-1634 2455 m
-1811 2455 l
-1811 2456 l
-1634 2456 l
-1633 2456 m
-1810 2456 l
-1810 2457 l
-1633 2457 l
-1632 2457 m
-1809 2457 l
-1809 2458 l
-1632 2458 l
-1631 2458 m
-1808 2458 l
-1808 2459 l
-1631 2459 l
-1629 2459 m
-1807 2459 l
-1807 2460 l
-1629 2460 l
-1628 2460 m
-1806 2460 l
-1806 2461 l
-1628 2461 l
-1627 2461 m
-1805 2461 l
-1805 2462 l
-1627 2462 l
-1626 2462 m
-1804 2462 l
-1804 2463 l
-1626 2463 l
-1625 2463 m
-1803 2463 l
-1803 2464 l
-1625 2464 l
-1624 2464 m
-1802 2464 l
-1802 2465 l
-1624 2465 l
-1623 2465 m
-1801 2465 l
-1801 2466 l
-1623 2466 l
-1622 2466 m
-1799 2466 l
-1799 2467 l
-1622 2467 l
-1621 2467 m
-1798 2467 l
-1798 2468 l
-1621 2468 l
-1620 2468 m
-1797 2468 l
-1797 2469 l
-1620 2469 l
-1619 2469 m
-1796 2469 l
-1796 2470 l
-1619 2470 l
-1618 2470 m
-1795 2470 l
-1795 2471 l
-1618 2471 l
-1617 2471 m
-1794 2471 l
-1794 2472 l
-1617 2472 l
-1616 2472 m
-1793 2472 l
-1793 2473 l
-1616 2473 l
-1615 2473 m
-1792 2473 l
-1792 2474 l
-1615 2474 l
-1614 2474 m
-1791 2474 l
-1791 2475 l
-1614 2475 l
-1613 2475 m
-1790 2475 l
-1790 2476 l
-1613 2476 l
-1612 2476 m
-1789 2476 l
-1789 2477 l
-1612 2477 l
-1611 2477 m
-1788 2477 l
-1788 2478 l
-1611 2478 l
-1610 2478 m
-1787 2478 l
-1787 2479 l
-1610 2479 l
-1609 2479 m
-1786 2479 l
-1786 2480 l
-1609 2480 l
-1608 2480 m
-1785 2480 l
-1785 2481 l
-1608 2481 l
-1607 2481 m
-1784 2481 l
-1784 2482 l
-1607 2482 l
-1606 2482 m
-1783 2482 l
-1783 2483 l
-1606 2483 l
-1605 2483 m
-1782 2483 l
-1782 2484 l
-1605 2484 l
-1604 2484 m
-1781 2484 l
-1781 2485 l
-1604 2485 l
-1602 2485 m
-1780 2485 l
-1780 2486 l
-1602 2486 l
-1601 2486 m
-1779 2486 l
-1779 2487 l
-1601 2487 l
-1600 2487 m
-1778 2487 l
-1778 2488 l
-1600 2488 l
-1599 2488 m
-1777 2488 l
-1777 2489 l
-1599 2489 l
-1598 2489 m
-1776 2489 l
-1776 2490 l
-1598 2490 l
-1597 2490 m
-1775 2490 l
-1775 2491 l
-1597 2491 l
-1596 2491 m
-1774 2491 l
-1774 2492 l
-1596 2492 l
-1595 2492 m
-1773 2492 l
-1773 2493 l
-1595 2493 l
-1594 2493 m
-1771 2493 l
-1771 2494 l
-1594 2494 l
-1593 2494 m
-1770 2494 l
-1770 2495 l
-1593 2495 l
-1592 2495 m
-1769 2495 l
-1769 2496 l
-1592 2496 l
-1591 2496 m
-1768 2496 l
-1768 2497 l
-1591 2497 l
-1590 2497 m
-1767 2497 l
-1767 2498 l
-1590 2498 l
-1589 2498 m
-1766 2498 l
-1766 2499 l
-1589 2499 l
-1588 2499 m
-1765 2499 l
-1765 2500 l
-1588 2500 l
-1587 2500 m
-1764 2500 l
-1764 2501 l
-1587 2501 l
-1586 2501 m
-1763 2501 l
-1763 2502 l
-1586 2502 l
-1585 2502 m
-1762 2502 l
-1762 2503 l
-1585 2503 l
-1584 2503 m
-1761 2503 l
-1761 2504 l
-1584 2504 l
-1583 2504 m
-1760 2504 l
-1760 2505 l
-1583 2505 l
-1582 2505 m
-1759 2505 l
-1759 2506 l
-1582 2506 l
-1581 2506 m
-1758 2506 l
-1758 2507 l
-1581 2507 l
-1580 2507 m
-1757 2507 l
-1757 2508 l
-1580 2508 l
-1579 2508 m
-1756 2508 l
-1756 2509 l
-1579 2509 l
-1578 2509 m
-1755 2509 l
-1755 2510 l
-1578 2510 l
-1577 2510 m
-1754 2510 l
-1754 2511 l
-1577 2511 l
-1576 2511 m
-1753 2511 l
-1753 2512 l
-1576 2512 l
-1576 2512 m
-1752 2512 l
-1752 2513 l
-1576 2513 l
-1576 2513 m
-1751 2513 l
-1751 2514 l
-1576 2514 l
-1577 2514 m
-1750 2514 l
-1750 2515 l
-1577 2515 l
-1578 2515 m
-1749 2515 l
-1749 2516 l
-1578 2516 l
-1579 2516 m
-1748 2516 l
-1748 2517 l
-1579 2517 l
-1580 2517 m
-1747 2517 l
-1747 2518 l
-1580 2518 l
-1581 2518 m
-1746 2518 l
-1746 2519 l
-1581 2519 l
-1582 2519 m
-1745 2519 l
-1745 2520 l
-1582 2520 l
-1583 2520 m
-1743 2520 l
-1743 2521 l
-1583 2521 l
-1584 2521 m
-1742 2521 l
-1742 2522 l
-1584 2522 l
-1585 2522 m
-1741 2522 l
-1741 2523 l
-1585 2523 l
-1586 2523 m
-1740 2523 l
-1740 2524 l
-1586 2524 l
-1587 2524 m
-1739 2524 l
-1739 2525 l
-1587 2525 l
-1588 2525 m
-1738 2525 l
-1738 2526 l
-1588 2526 l
-1589 2526 m
-1737 2526 l
-1737 2527 l
-1589 2527 l
-1590 2527 m
-1736 2527 l
-1736 2528 l
-1590 2528 l
-1591 2528 m
-1735 2528 l
-1735 2529 l
-1591 2529 l
-1592 2529 m
-1734 2529 l
-1734 2530 l
-1592 2530 l
-1593 2530 m
-1733 2530 l
-1733 2531 l
-1593 2531 l
-1594 2531 m
-1732 2531 l
-1732 2532 l
-1594 2532 l
-1595 2532 m
-1731 2532 l
-1731 2533 l
-1595 2533 l
-1596 2533 m
-1730 2533 l
-1730 2534 l
-1596 2534 l
-1597 2534 m
-1729 2534 l
-1729 2535 l
-1597 2535 l
-1597 2535 m
-1728 2535 l
-1728 2536 l
-1597 2536 l
-1598 2536 m
-1727 2536 l
-1727 2537 l
-1598 2537 l
-1599 2537 m
-1726 2537 l
-1726 2538 l
-1599 2538 l
-1600 2538 m
-1725 2538 l
-1725 2539 l
-1600 2539 l
-1601 2539 m
-1724 2539 l
-1724 2540 l
-1601 2540 l
-1602 2540 m
-1723 2540 l
-1723 2541 l
-1602 2541 l
-1603 2541 m
-1722 2541 l
-1722 2542 l
-1603 2542 l
-1604 2542 m
-1721 2542 l
-1721 2543 l
-1604 2543 l
-1605 2543 m
-1720 2543 l
-1720 2544 l
-1605 2544 l
-1606 2544 m
-1719 2544 l
-1719 2545 l
-1606 2545 l
-1607 2545 m
-1718 2545 l
-1718 2546 l
-1607 2546 l
-1608 2546 m
-1717 2546 l
-1717 2547 l
-1608 2547 l
-1609 2547 m
-1715 2547 l
-1715 2548 l
-1609 2548 l
-1610 2548 m
-1714 2548 l
-1714 2549 l
-1610 2549 l
-1611 2549 m
-1713 2549 l
-1713 2550 l
-1611 2550 l
-1612 2550 m
-1712 2550 l
-1712 2551 l
-1612 2551 l
-1613 2551 m
-1711 2551 l
-1711 2552 l
-1613 2552 l
-1614 2552 m
-1710 2552 l
-1710 2553 l
-1614 2553 l
-1615 2553 m
-1709 2553 l
-1709 2554 l
-1615 2554 l
-1616 2554 m
-1708 2554 l
-1708 2555 l
-1616 2555 l
-1617 2555 m
-1707 2555 l
-1707 2556 l
-1617 2556 l
-1618 2556 m
-1706 2556 l
-1706 2557 l
-1618 2557 l
-1618 2557 m
-1705 2557 l
-1705 2558 l
-1618 2558 l
-1619 2558 m
-1704 2558 l
-1704 2559 l
-1619 2559 l
-1620 2559 m
-1703 2559 l
-1703 2560 l
-1620 2560 l
-1621 2560 m
-1702 2560 l
-1702 2561 l
-1621 2561 l
-1622 2561 m
-1701 2561 l
-1701 2562 l
-1622 2562 l
-1623 2562 m
-1700 2562 l
-1700 2563 l
-1623 2563 l
-1624 2563 m
-1699 2563 l
-1699 2564 l
-1624 2564 l
-1625 2564 m
-1698 2564 l
-1698 2565 l
-1625 2565 l
-1626 2565 m
-1697 2565 l
-1697 2566 l
-1626 2566 l
-1627 2566 m
-1696 2566 l
-1696 2567 l
-1627 2567 l
-1628 2567 m
-1695 2567 l
-1695 2568 l
-1628 2568 l
-1629 2568 m
-1694 2568 l
-1694 2569 l
-1629 2569 l
-1630 2569 m
-1693 2569 l
-1693 2570 l
-1630 2570 l
-1631 2570 m
-1692 2570 l
-1692 2571 l
-1631 2571 l
-1632 2571 m
-1691 2571 l
-1691 2572 l
-1632 2572 l
-1633 2572 m
-1690 2572 l
-1690 2573 l
-1633 2573 l
-1634 2573 m
-1689 2573 l
-1689 2574 l
-1634 2574 l
-1635 2574 m
-1687 2574 l
-1687 2575 l
-1635 2575 l
-1636 2575 m
-1686 2575 l
-1686 2576 l
-1636 2576 l
-1637 2576 m
-1685 2576 l
-1685 2577 l
-1637 2577 l
-1638 2577 m
-1684 2577 l
-1684 2578 l
-1638 2578 l
-1639 2578 m
-1683 2578 l
-1683 2579 l
-1639 2579 l
-1639 2579 m
-1682 2579 l
-1682 2580 l
-1639 2580 l
-1640 2580 m
-1681 2580 l
-1681 2581 l
-1640 2581 l
-1641 2581 m
-1680 2581 l
-1680 2582 l
-1641 2582 l
-1642 2582 m
-1679 2582 l
-1679 2583 l
-1642 2583 l
-1643 2583 m
-1678 2583 l
-1678 2584 l
-1643 2584 l
-1644 2584 m
-1677 2584 l
-1677 2585 l
-1644 2585 l
-1645 2585 m
-1676 2585 l
-1676 2586 l
-1645 2586 l
-1646 2586 m
-1675 2586 l
-1675 2587 l
-1646 2587 l
-1647 2587 m
-1674 2587 l
-1674 2588 l
-1647 2588 l
-1648 2588 m
-1673 2588 l
-1673 2589 l
-1648 2589 l
-1649 2589 m
-1672 2589 l
-1672 2590 l
-1649 2590 l
-1650 2590 m
-1671 2590 l
-1671 2591 l
-1650 2591 l
-1651 2591 m
-1670 2591 l
-1670 2592 l
-1651 2592 l
-1652 2592 m
-1669 2592 l
-1669 2593 l
-1652 2593 l
-1653 2593 m
-1668 2593 l
-1668 2594 l
-1653 2594 l
-1654 2594 m
-1667 2594 l
-1667 2595 l
-1654 2595 l
-1655 2595 m
-1666 2595 l
-1666 2596 l
-1655 2596 l
-1656 2596 m
-1665 2596 l
-1665 2597 l
-1656 2597 l
-1657 2597 m
-1664 2597 l
-1664 2598 l
-1657 2598 l
-1658 2598 m
-1663 2598 l
-1663 2599 l
-1658 2599 l
-1659 2599 m
-1662 2599 l
-1662 2600 l
-1659 2600 l
-Y
-1852.4 2414.5 m
-1768 2327 l
-1576 2512 l
-1660 2600 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1776 2372 m
-1774 2369 l
-1765 2365 l
-1759 2365 l
-1750 2368 l
-1738 2380 l
-1735 2388 l
-1735 2394 l
-1737 2403 l
-1743 2409 l
-1752 2412 l
-1767 2416 l
-1826 2417 l
-1784 2457 l
-S
-1716 2429 m
-1713 2426 l
-1704 2423 l
-1699 2423 l
-1690 2426 l
-1678 2438 l
-1674 2446 l
-1674 2452 l
-1677 2461 l
-1683 2467 l
-1692 2470 l
-1706 2474 l
-1765 2475 l
-1723 2515 l
-S
-1608 2504 m
-1638 2475 l
-1667 2499 l
-1662 2499 l
-1650 2505 l
-1641 2514 l
-1634 2525 l
-1634 2537 l
-1640 2549 l
-1646 2555 l
-1657 2561 l
-1669 2561 l
-1681 2556 l
-1690 2547 l
-1696 2535 l
-1696 2529 l
-1694 2521 l
-S
-1 g
-3771 2313 m
-3774 2313 l
-3774 2314 l
-3771 2314 l
-3770 2314 m
-3776 2314 l
-3776 2315 l
-3770 2315 l
-3769 2315 m
-3777 2315 l
-3777 2316 l
-3769 2316 l
-3769 2316 m
-3778 2316 l
-3778 2317 l
-3769 2317 l
-3768 2317 m
-3779 2317 l
-3779 2318 l
-3768 2318 l
-3767 2318 m
-3781 2318 l
-3781 2319 l
-3767 2319 l
-3766 2319 m
-3782 2319 l
-3782 2320 l
-3766 2320 l
-3766 2320 m
-3783 2320 l
-3783 2321 l
-3766 2321 l
-3765 2321 m
-3785 2321 l
-3785 2322 l
-3765 2322 l
-3764 2322 m
-3786 2322 l
-3786 2323 l
-3764 2323 l
-3763 2323 m
-3787 2323 l
-3787 2324 l
-3763 2324 l
-3763 2324 m
-3789 2324 l
-3789 2325 l
-3763 2325 l
-3762 2325 m
-3790 2325 l
-3790 2326 l
-3762 2326 l
-3761 2326 m
-3791 2326 l
-3791 2327 l
-3761 2327 l
-3760 2327 m
-3792 2327 l
-3792 2328 l
-3760 2328 l
-3760 2328 m
-3794 2328 l
-3794 2329 l
-3760 2329 l
-3759 2329 m
-3795 2329 l
-3795 2330 l
-3759 2330 l
-3758 2330 m
-3796 2330 l
-3796 2331 l
-3758 2331 l
-3757 2331 m
-3798 2331 l
-3798 2332 l
-3757 2332 l
-3756 2332 m
-3799 2332 l
-3799 2333 l
-3756 2333 l
-3756 2333 m
-3800 2333 l
-3800 2334 l
-3756 2334 l
-3755 2334 m
-3801 2334 l
-3801 2335 l
-3755 2335 l
-3754 2335 m
-3803 2335 l
-3803 2336 l
-3754 2336 l
-3753 2336 m
-3804 2336 l
-3804 2337 l
-3753 2337 l
-3753 2337 m
-3805 2337 l
-3805 2338 l
-3753 2338 l
-3752 2338 m
-3807 2338 l
-3807 2339 l
-3752 2339 l
-3751 2339 m
-3808 2339 l
-3808 2340 l
-3751 2340 l
-3750 2340 m
-3809 2340 l
-3809 2341 l
-3750 2341 l
-3750 2341 m
-3811 2341 l
-3811 2342 l
-3750 2342 l
-3749 2342 m
-3812 2342 l
-3812 2343 l
-3749 2343 l
-3748 2343 m
-3813 2343 l
-3813 2344 l
-3748 2344 l
-3747 2344 m
-3814 2344 l
-3814 2345 l
-3747 2345 l
-3747 2345 m
-3816 2345 l
-3816 2346 l
-3747 2346 l
-3746 2346 m
-3817 2346 l
-3817 2347 l
-3746 2347 l
-3745 2347 m
-3818 2347 l
-3818 2348 l
-3745 2348 l
-3744 2348 m
-3820 2348 l
-3820 2349 l
-3744 2349 l
-3744 2349 m
-3821 2349 l
-3821 2350 l
-3744 2350 l
-3743 2350 m
-3822 2350 l
-3822 2351 l
-3743 2351 l
-3742 2351 m
-3824 2351 l
-3824 2352 l
-3742 2352 l
-3741 2352 m
-3825 2352 l
-3825 2353 l
-3741 2353 l
-3740 2353 m
-3826 2353 l
-3826 2354 l
-3740 2354 l
-3740 2354 m
-3827 2354 l
-3827 2355 l
-3740 2355 l
-3739 2355 m
-3829 2355 l
-3829 2356 l
-3739 2356 l
-3738 2356 m
-3830 2356 l
-3830 2357 l
-3738 2357 l
-3737 2357 m
-3831 2357 l
-3831 2358 l
-3737 2358 l
-3737 2358 m
-3833 2358 l
-3833 2359 l
-3737 2359 l
-3736 2359 m
-3834 2359 l
-3834 2360 l
-3736 2360 l
-3735 2360 m
-3835 2360 l
-3835 2361 l
-3735 2361 l
-3734 2361 m
-3837 2361 l
-3837 2362 l
-3734 2362 l
-3734 2362 m
-3838 2362 l
-3838 2363 l
-3734 2363 l
-3733 2363 m
-3839 2363 l
-3839 2364 l
-3733 2364 l
-3732 2364 m
-3840 2364 l
-3840 2365 l
-3732 2365 l
-3731 2365 m
-3842 2365 l
-3842 2366 l
-3731 2366 l
-3731 2366 m
-3843 2366 l
-3843 2367 l
-3731 2367 l
-3730 2367 m
-3844 2367 l
-3844 2368 l
-3730 2368 l
-3729 2368 m
-3846 2368 l
-3846 2369 l
-3729 2369 l
-3728 2369 m
-3847 2369 l
-3847 2370 l
-3728 2370 l
-3727 2370 m
-3848 2370 l
-3848 2371 l
-3727 2371 l
-3727 2371 m
-3850 2371 l
-3850 2372 l
-3727 2372 l
-3726 2372 m
-3851 2372 l
-3851 2373 l
-3726 2373 l
-3725 2373 m
-3852 2373 l
-3852 2374 l
-3725 2374 l
-3724 2374 m
-3853 2374 l
-3853 2375 l
-3724 2375 l
-3724 2375 m
-3855 2375 l
-3855 2376 l
-3724 2376 l
-3723 2376 m
-3856 2376 l
-3856 2377 l
-3723 2377 l
-3722 2377 m
-3857 2377 l
-3857 2378 l
-3722 2378 l
-3721 2378 m
-3859 2378 l
-3859 2379 l
-3721 2379 l
-3721 2379 m
-3860 2379 l
-3860 2380 l
-3721 2380 l
-3720 2380 m
-3861 2380 l
-3861 2381 l
-3720 2381 l
-3719 2381 m
-3862 2381 l
-3862 2382 l
-3719 2382 l
-3718 2382 m
-3864 2382 l
-3864 2383 l
-3718 2383 l
-3718 2383 m
-3865 2383 l
-3865 2384 l
-3718 2384 l
-3717 2384 m
-3866 2384 l
-3866 2385 l
-3717 2385 l
-3716 2385 m
-3868 2385 l
-3868 2386 l
-3716 2386 l
-3715 2386 m
-3869 2386 l
-3869 2387 l
-3715 2387 l
-3715 2387 m
-3870 2387 l
-3870 2388 l
-3715 2388 l
-3714 2388 m
-3872 2388 l
-3872 2389 l
-3714 2389 l
-3713 2389 m
-3873 2389 l
-3873 2390 l
-3713 2390 l
-3712 2390 m
-3874 2390 l
-3874 2391 l
-3712 2391 l
-3711 2391 m
-3875 2391 l
-3875 2392 l
-3711 2392 l
-3711 2392 m
-3877 2392 l
-3877 2393 l
-3711 2393 l
-3710 2393 m
-3878 2393 l
-3878 2394 l
-3710 2394 l
-3709 2394 m
-3879 2394 l
-3879 2395 l
-3709 2395 l
-3708 2395 m
-3881 2395 l
-3881 2396 l
-3708 2396 l
-3708 2396 m
-3882 2396 l
-3882 2397 l
-3708 2397 l
-3707 2397 m
-3883 2397 l
-3883 2398 l
-3707 2398 l
-3706 2398 m
-3885 2398 l
-3885 2399 l
-3706 2399 l
-3705 2399 m
-3886 2399 l
-3886 2400 l
-3705 2400 l
-3705 2400 m
-3887 2400 l
-3887 2401 l
-3705 2401 l
-3704 2401 m
-3888 2401 l
-3888 2402 l
-3704 2402 l
-3703 2402 m
-3890 2402 l
-3890 2403 l
-3703 2403 l
-3702 2403 m
-3891 2403 l
-3891 2404 l
-3702 2404 l
-3702 2404 m
-3892 2404 l
-3892 2405 l
-3702 2405 l
-3701 2405 m
-3894 2405 l
-3894 2406 l
-3701 2406 l
-3700 2406 m
-3895 2406 l
-3895 2407 l
-3700 2407 l
-3699 2407 m
-3896 2407 l
-3896 2408 l
-3699 2408 l
-3699 2408 m
-3898 2408 l
-3898 2409 l
-3699 2409 l
-3699 2409 m
-3899 2409 l
-3899 2410 l
-3699 2410 l
-3700 2410 m
-3900 2410 l
-3900 2411 l
-3700 2411 l
-3701 2411 m
-3901 2411 l
-3901 2412 l
-3701 2412 l
-3702 2412 m
-3903 2412 l
-3903 2413 l
-3702 2413 l
-3704 2413 m
-3904 2413 l
-3904 2414 l
-3704 2414 l
-3705 2414 m
-3905 2414 l
-3905 2415 l
-3705 2415 l
-3706 2415 m
-3907 2415 l
-3907 2416 l
-3706 2416 l
-3708 2416 m
-3908 2416 l
-3908 2417 l
-3708 2417 l
-3709 2417 m
-3909 2417 l
-3909 2418 l
-3709 2418 l
-3710 2418 m
-3911 2418 l
-3911 2419 l
-3710 2419 l
-3712 2419 m
-3912 2419 l
-3912 2420 l
-3712 2420 l
-3713 2420 m
-3913 2420 l
-3913 2421 l
-3713 2421 l
-3714 2421 m
-3914 2421 l
-3914 2422 l
-3714 2422 l
-3715 2422 m
-3916 2422 l
-3916 2423 l
-3715 2423 l
-3717 2423 m
-3917 2423 l
-3917 2424 l
-3717 2424 l
-3718 2424 m
-3918 2424 l
-3918 2425 l
-3718 2425 l
-3719 2425 m
-3920 2425 l
-3920 2426 l
-3719 2426 l
-3721 2426 m
-3921 2426 l
-3921 2427 l
-3721 2427 l
-3722 2427 m
-3922 2427 l
-3922 2428 l
-3722 2428 l
-3723 2428 m
-3923 2428 l
-3923 2429 l
-3723 2429 l
-3725 2429 m
-3925 2429 l
-3925 2430 l
-3725 2430 l
-3726 2430 m
-3926 2430 l
-3926 2431 l
-3726 2431 l
-3727 2431 m
-3927 2431 l
-3927 2432 l
-3727 2432 l
-3728 2432 m
-3929 2432 l
-3929 2433 l
-3728 2433 l
-3730 2433 m
-3930 2433 l
-3930 2434 l
-3730 2434 l
-3731 2434 m
-3931 2434 l
-3931 2435 l
-3731 2435 l
-3732 2435 m
-3933 2435 l
-3933 2436 l
-3732 2436 l
-3734 2436 m
-3934 2436 l
-3934 2437 l
-3734 2437 l
-3735 2437 m
-3935 2437 l
-3935 2438 l
-3735 2438 l
-3736 2438 m
-3936 2438 l
-3936 2439 l
-3736 2439 l
-3738 2439 m
-3938 2439 l
-3938 2440 l
-3738 2440 l
-3739 2440 m
-3939 2440 l
-3939 2441 l
-3739 2441 l
-3740 2441 m
-3940 2441 l
-3940 2442 l
-3740 2442 l
-3741 2442 m
-3942 2442 l
-3942 2443 l
-3741 2443 l
-3743 2443 m
-3943 2443 l
-3943 2444 l
-3743 2444 l
-3744 2444 m
-3944 2444 l
-3944 2445 l
-3744 2445 l
-3745 2445 m
-3946 2445 l
-3946 2446 l
-3745 2446 l
-3747 2446 m
-3947 2446 l
-3947 2447 l
-3747 2447 l
-3748 2447 m
-3948 2447 l
-3948 2448 l
-3748 2448 l
-3749 2448 m
-3949 2448 l
-3949 2449 l
-3749 2449 l
-3751 2449 m
-3951 2449 l
-3951 2450 l
-3751 2450 l
-3752 2450 m
-3952 2450 l
-3952 2451 l
-3752 2451 l
-3753 2451 m
-3953 2451 l
-3953 2452 l
-3753 2452 l
-3754 2452 m
-3955 2452 l
-3955 2453 l
-3754 2453 l
-3756 2453 m
-3956 2453 l
-3956 2454 l
-3756 2454 l
-3757 2454 m
-3957 2454 l
-3957 2455 l
-3757 2455 l
-3758 2455 m
-3959 2455 l
-3959 2456 l
-3758 2456 l
-3760 2456 m
-3960 2456 l
-3960 2457 l
-3760 2457 l
-3761 2457 m
-3961 2457 l
-3961 2458 l
-3761 2458 l
-3762 2458 m
-3962 2458 l
-3962 2459 l
-3762 2459 l
-3764 2459 m
-3964 2459 l
-3964 2460 l
-3764 2460 l
-3765 2460 m
-3965 2460 l
-3965 2461 l
-3765 2461 l
-3766 2461 m
-3966 2461 l
-3966 2462 l
-3766 2462 l
-3767 2462 m
-3968 2462 l
-3968 2463 l
-3767 2463 l
-3769 2463 m
-3969 2463 l
-3969 2464 l
-3769 2464 l
-3770 2464 m
-3970 2464 l
-3970 2465 l
-3770 2465 l
-3771 2465 m
-3972 2465 l
-3972 2466 l
-3771 2466 l
-3773 2466 m
-3973 2466 l
-3973 2467 l
-3773 2467 l
-3774 2467 m
-3974 2467 l
-3974 2468 l
-3774 2468 l
-3775 2468 m
-3975 2468 l
-3975 2469 l
-3775 2469 l
-3777 2469 m
-3977 2469 l
-3977 2470 l
-3777 2470 l
-3778 2470 m
-3978 2470 l
-3978 2471 l
-3778 2471 l
-3779 2471 m
-3979 2471 l
-3979 2472 l
-3779 2472 l
-3780 2472 m
-3981 2472 l
-3981 2473 l
-3780 2473 l
-3782 2473 m
-3982 2473 l
-3982 2474 l
-3782 2474 l
-3783 2474 m
-3983 2474 l
-3983 2475 l
-3783 2475 l
-3784 2475 m
-3984 2475 l
-3984 2476 l
-3784 2476 l
-3786 2476 m
-3984 2476 l
-3984 2477 l
-3786 2477 l
-3787 2477 m
-3984 2477 l
-3984 2478 l
-3787 2478 l
-3788 2478 m
-3983 2478 l
-3983 2479 l
-3788 2479 l
-3790 2479 m
-3982 2479 l
-3982 2480 l
-3790 2480 l
-3791 2480 m
-3981 2480 l
-3981 2481 l
-3791 2481 l
-3792 2481 m
-3981 2481 l
-3981 2482 l
-3792 2482 l
-3793 2482 m
-3980 2482 l
-3980 2483 l
-3793 2483 l
-3795 2483 m
-3979 2483 l
-3979 2484 l
-3795 2484 l
-3796 2484 m
-3978 2484 l
-3978 2485 l
-3796 2485 l
-3797 2485 m
-3978 2485 l
-3978 2486 l
-3797 2486 l
-3799 2486 m
-3977 2486 l
-3977 2487 l
-3799 2487 l
-3800 2487 m
-3976 2487 l
-3976 2488 l
-3800 2488 l
-3801 2488 m
-3975 2488 l
-3975 2489 l
-3801 2489 l
-3803 2489 m
-3975 2489 l
-3975 2490 l
-3803 2490 l
-3804 2490 m
-3974 2490 l
-3974 2491 l
-3804 2491 l
-3805 2491 m
-3973 2491 l
-3973 2492 l
-3805 2492 l
-3806 2492 m
-3972 2492 l
-3972 2493 l
-3806 2493 l
-3808 2493 m
-3972 2493 l
-3972 2494 l
-3808 2494 l
-3809 2494 m
-3971 2494 l
-3971 2495 l
-3809 2495 l
-3810 2495 m
-3970 2495 l
-3970 2496 l
-3810 2496 l
-3812 2496 m
-3969 2496 l
-3969 2497 l
-3812 2497 l
-3813 2497 m
-3969 2497 l
-3969 2498 l
-3813 2498 l
-3814 2498 m
-3968 2498 l
-3968 2499 l
-3814 2499 l
-3816 2499 m
-3967 2499 l
-3967 2500 l
-3816 2500 l
-3817 2500 m
-3966 2500 l
-3966 2501 l
-3817 2501 l
-3818 2501 m
-3965 2501 l
-3965 2502 l
-3818 2502 l
-3819 2502 m
-3965 2502 l
-3965 2503 l
-3819 2503 l
-3821 2503 m
-3964 2503 l
-3964 2504 l
-3821 2504 l
-3822 2504 m
-3963 2504 l
-3963 2505 l
-3822 2505 l
-3823 2505 m
-3962 2505 l
-3962 2506 l
-3823 2506 l
-3825 2506 m
-3962 2506 l
-3962 2507 l
-3825 2507 l
-3826 2507 m
-3961 2507 l
-3961 2508 l
-3826 2508 l
-3827 2508 m
-3960 2508 l
-3960 2509 l
-3827 2509 l
-3829 2509 m
-3959 2509 l
-3959 2510 l
-3829 2510 l
-3830 2510 m
-3959 2510 l
-3959 2511 l
-3830 2511 l
-3831 2511 m
-3958 2511 l
-3958 2512 l
-3831 2512 l
-3832 2512 m
-3957 2512 l
-3957 2513 l
-3832 2513 l
-3834 2513 m
-3956 2513 l
-3956 2514 l
-3834 2514 l
-3835 2514 m
-3956 2514 l
-3956 2515 l
-3835 2515 l
-3836 2515 m
-3955 2515 l
-3955 2516 l
-3836 2516 l
-3838 2516 m
-3954 2516 l
-3954 2517 l
-3838 2517 l
-3839 2517 m
-3953 2517 l
-3953 2518 l
-3839 2518 l
-3840 2518 m
-3953 2518 l
-3953 2519 l
-3840 2519 l
-3842 2519 m
-3952 2519 l
-3952 2520 l
-3842 2520 l
-3843 2520 m
-3951 2520 l
-3951 2521 l
-3843 2521 l
-3844 2521 m
-3950 2521 l
-3950 2522 l
-3844 2522 l
-3845 2522 m
-3950 2522 l
-3950 2523 l
-3845 2523 l
-3847 2523 m
-3949 2523 l
-3949 2524 l
-3847 2524 l
-3848 2524 m
-3948 2524 l
-3948 2525 l
-3848 2525 l
-3849 2525 m
-3947 2525 l
-3947 2526 l
-3849 2526 l
-3851 2526 m
-3946 2526 l
-3946 2527 l
-3851 2527 l
-3852 2527 m
-3946 2527 l
-3946 2528 l
-3852 2528 l
-3853 2528 m
-3945 2528 l
-3945 2529 l
-3853 2529 l
-3855 2529 m
-3944 2529 l
-3944 2530 l
-3855 2530 l
-3856 2530 m
-3943 2530 l
-3943 2531 l
-3856 2531 l
-3857 2531 m
-3943 2531 l
-3943 2532 l
-3857 2532 l
-3858 2532 m
-3942 2532 l
-3942 2533 l
-3858 2533 l
-3860 2533 m
-3941 2533 l
-3941 2534 l
-3860 2534 l
-3861 2534 m
-3940 2534 l
-3940 2535 l
-3861 2535 l
-3862 2535 m
-3940 2535 l
-3940 2536 l
-3862 2536 l
-3864 2536 m
-3939 2536 l
-3939 2537 l
-3864 2537 l
-3865 2537 m
-3938 2537 l
-3938 2538 l
-3865 2538 l
-3866 2538 m
-3937 2538 l
-3937 2539 l
-3866 2539 l
-3868 2539 m
-3937 2539 l
-3937 2540 l
-3868 2540 l
-3869 2540 m
-3936 2540 l
-3936 2541 l
-3869 2541 l
-3870 2541 m
-3935 2541 l
-3935 2542 l
-3870 2542 l
-3871 2542 m
-3934 2542 l
-3934 2543 l
-3871 2543 l
-3873 2543 m
-3934 2543 l
-3934 2544 l
-3873 2544 l
-3874 2544 m
-3933 2544 l
-3933 2545 l
-3874 2545 l
-3875 2545 m
-3932 2545 l
-3932 2546 l
-3875 2546 l
-3877 2546 m
-3931 2546 l
-3931 2547 l
-3877 2547 l
-3878 2547 m
-3931 2547 l
-3931 2548 l
-3878 2548 l
-3879 2548 m
-3930 2548 l
-3930 2549 l
-3879 2549 l
-3881 2549 m
-3929 2549 l
-3929 2550 l
-3881 2550 l
-3882 2550 m
-3928 2550 l
-3928 2551 l
-3882 2551 l
-3883 2551 m
-3927 2551 l
-3927 2552 l
-3883 2552 l
-3884 2552 m
-3927 2552 l
-3927 2553 l
-3884 2553 l
-3886 2553 m
-3926 2553 l
-3926 2554 l
-3886 2554 l
-3887 2554 m
-3925 2554 l
-3925 2555 l
-3887 2555 l
-3888 2555 m
-3924 2555 l
-3924 2556 l
-3888 2556 l
-3890 2556 m
-3924 2556 l
-3924 2557 l
-3890 2557 l
-3891 2557 m
-3923 2557 l
-3923 2558 l
-3891 2558 l
-3892 2558 m
-3922 2558 l
-3922 2559 l
-3892 2559 l
-3894 2559 m
-3921 2559 l
-3921 2560 l
-3894 2560 l
-3895 2560 m
-3921 2560 l
-3921 2561 l
-3895 2561 l
-3896 2561 m
-3920 2561 l
-3920 2562 l
-3896 2562 l
-3897 2562 m
-3919 2562 l
-3919 2563 l
-3897 2563 l
-3899 2563 m
-3918 2563 l
-3918 2564 l
-3899 2564 l
-3900 2564 m
-3918 2564 l
-3918 2565 l
-3900 2565 l
-3901 2565 m
-3917 2565 l
-3917 2566 l
-3901 2566 l
-3903 2566 m
-3916 2566 l
-3916 2567 l
-3903 2567 l
-3904 2567 m
-3915 2567 l
-3915 2568 l
-3904 2568 l
-3905 2568 m
-3915 2568 l
-3915 2569 l
-3905 2569 l
-3907 2569 m
-3914 2569 l
-3914 2570 l
-3907 2570 l
-3908 2570 m
-3913 2570 l
-3913 2571 l
-3908 2571 l
-3909 2571 m
-3912 2571 l
-3912 2572 l
-3909 2572 l
-Y
-3772.3 2312.9 m
-3699 2409 l
-3911 2572 l
-3984 2476 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3741 2394 m
-3739 2398 l
-3737 2407 l
-3738 2413 l
-3742 2421 l
-3755 2431 l
-3764 2433 l
-3770 2432 l
-3779 2428 l
-3784 2422 l
-3785 2412 l
-3786 2397 l
-3779 2339 l
-3825 2374 l
-S
-3838 2495 m
-3858 2400 l
-S
-3792 2459 m
-3838 2495 l
-S
-3878 2525 m
-3870 2514 l
-3871 2499 l
-3881 2480 l
-3888 2470 l
-3905 2456 l
-3919 2451 l
-3931 2456 l
-3938 2461 l
-3945 2472 l
-3944 2487 l
-3935 2506 l
-3927 2516 l
-3911 2530 l
-3897 2535 l
-3885 2530 l
-3878 2525 l
-S
-1 g
-4405 3855 m
-4409 3855 l
-4409 3856 l
-4405 3856 l
-4405 3856 m
-4412 3856 l
-4412 3857 l
-4405 3857 l
-4404 3857 m
-4415 3857 l
-4415 3858 l
-4404 3858 l
-4404 3858 m
-4418 3858 l
-4418 3859 l
-4404 3859 l
-4404 3859 m
-4421 3859 l
-4421 3860 l
-4404 3860 l
-4403 3860 m
-4424 3860 l
-4424 3861 l
-4403 3861 l
-4403 3861 m
-4427 3861 l
-4427 3862 l
-4403 3862 l
-4403 3862 m
-4429 3862 l
-4429 3863 l
-4403 3863 l
-4402 3863 m
-4432 3863 l
-4432 3864 l
-4402 3864 l
-4402 3864 m
-4435 3864 l
-4435 3865 l
-4402 3865 l
-4402 3865 m
-4438 3865 l
-4438 3866 l
-4402 3866 l
-4401 3866 m
-4441 3866 l
-4441 3867 l
-4401 3867 l
-4401 3867 m
-4444 3867 l
-4444 3868 l
-4401 3868 l
-4401 3868 m
-4447 3868 l
-4447 3869 l
-4401 3869 l
-4400 3869 m
-4449 3869 l
-4449 3870 l
-4400 3870 l
-4400 3870 m
-4452 3870 l
-4452 3871 l
-4400 3871 l
-4399 3871 m
-4455 3871 l
-4455 3872 l
-4399 3872 l
-4399 3872 m
-4458 3872 l
-4458 3873 l
-4399 3873 l
-4399 3873 m
-4461 3873 l
-4461 3874 l
-4399 3874 l
-4398 3874 m
-4464 3874 l
-4464 3875 l
-4398 3875 l
-4398 3875 m
-4467 3875 l
-4467 3876 l
-4398 3876 l
-4398 3876 m
-4469 3876 l
-4469 3877 l
-4398 3877 l
-4397 3877 m
-4472 3877 l
-4472 3878 l
-4397 3878 l
-4397 3878 m
-4475 3878 l
-4475 3879 l
-4397 3879 l
-4397 3879 m
-4478 3879 l
-4478 3880 l
-4397 3880 l
-4396 3880 m
-4481 3880 l
-4481 3881 l
-4396 3881 l
-4396 3881 m
-4484 3881 l
-4484 3882 l
-4396 3882 l
-4396 3882 m
-4487 3882 l
-4487 3883 l
-4396 3883 l
-4395 3883 m
-4489 3883 l
-4489 3884 l
-4395 3884 l
-4395 3884 m
-4492 3884 l
-4492 3885 l
-4395 3885 l
-4395 3885 m
-4495 3885 l
-4495 3886 l
-4395 3886 l
-4394 3886 m
-4498 3886 l
-4498 3887 l
-4394 3887 l
-4394 3887 m
-4501 3887 l
-4501 3888 l
-4394 3888 l
-4393 3888 m
-4504 3888 l
-4504 3889 l
-4393 3889 l
-4393 3889 m
-4507 3889 l
-4507 3890 l
-4393 3890 l
-4393 3890 m
-4509 3890 l
-4509 3891 l
-4393 3891 l
-4392 3891 m
-4512 3891 l
-4512 3892 l
-4392 3892 l
-4392 3892 m
-4515 3892 l
-4515 3893 l
-4392 3893 l
-4392 3893 m
-4518 3893 l
-4518 3894 l
-4392 3894 l
-4391 3894 m
-4521 3894 l
-4521 3895 l
-4391 3895 l
-4391 3895 m
-4521 3895 l
-4521 3897 l
-4391 3897 l
-4390 3897 m
-4520 3897 l
-4520 3899 l
-4390 3899 l
-4390 3899 m
-4519 3899 l
-4519 3900 l
-4390 3900 l
-4389 3900 m
-4519 3900 l
-4519 3902 l
-4389 3902 l
-4389 3902 m
-4518 3902 l
-4518 3903 l
-4389 3903 l
-4388 3903 m
-4518 3903 l
-4518 3905 l
-4388 3905 l
-4387 3905 m
-4517 3905 l
-4517 3908 l
-4387 3908 l
-4386 3908 m
-4516 3908 l
-4516 3911 l
-4386 3911 l
-4385 3911 m
-4515 3911 l
-4515 3914 l
-4385 3914 l
-4384 3914 m
-4514 3914 l
-4514 3917 l
-4384 3917 l
-4383 3917 m
-4513 3917 l
-4513 3919 l
-4383 3919 l
-4383 3919 m
-4512 3919 l
-4512 3920 l
-4383 3920 l
-4382 3920 m
-4512 3920 l
-4512 3922 l
-4382 3922 l
-4381 3922 m
-4511 3922 l
-4511 3925 l
-4381 3925 l
-4380 3925 m
-4510 3925 l
-4510 3928 l
-4380 3928 l
-4379 3928 m
-4509 3928 l
-4509 3931 l
-4379 3931 l
-4378 3931 m
-4508 3931 l
-4508 3934 l
-4378 3934 l
-4377 3934 m
-4507 3934 l
-4507 3937 l
-4377 3937 l
-4376 3937 m
-4506 3937 l
-4506 3939 l
-4376 3939 l
-4375 3939 m
-4505 3939 l
-4505 3942 l
-4375 3942 l
-4374 3942 m
-4504 3942 l
-4504 3945 l
-4374 3945 l
-4373 3945 m
-4503 3945 l
-4503 3948 l
-4373 3948 l
-4372 3948 m
-4502 3948 l
-4502 3951 l
-4372 3951 l
-4371 3951 m
-4501 3951 l
-4501 3954 l
-4371 3954 l
-4370 3954 m
-4500 3954 l
-4500 3956 l
-4370 3956 l
-4369 3956 m
-4500 3956 l
-4500 3957 l
-4369 3957 l
-4369 3957 m
-4499 3957 l
-4499 3959 l
-4369 3959 l
-4368 3959 m
-4498 3959 l
-4498 3962 l
-4368 3962 l
-4367 3962 m
-4497 3962 l
-4497 3965 l
-4367 3965 l
-4366 3965 m
-4496 3965 l
-4496 3968 l
-4366 3968 l
-4365 3968 m
-4495 3968 l
-4495 3971 l
-4365 3971 l
-4364 3971 m
-4494 3971 l
-4494 3973 l
-4364 3973 l
-4363 3973 m
-4494 3973 l
-4494 3974 l
-4363 3974 l
-4363 3974 m
-4493 3974 l
-4493 3976 l
-4363 3976 l
-4362 3976 m
-4492 3976 l
-4492 3979 l
-4362 3979 l
-4361 3979 m
-4491 3979 l
-4491 3982 l
-4361 3982 l
-4360 3982 m
-4490 3982 l
-4490 3985 l
-4360 3985 l
-4359 3985 m
-4489 3985 l
-4489 3988 l
-4359 3988 l
-4358 3988 m
-4488 3988 l
-4488 3990 l
-4358 3990 l
-4357 3990 m
-4488 3990 l
-4488 3991 l
-4357 3991 l
-4357 3991 m
-4487 3991 l
-4487 3993 l
-4357 3993 l
-4356 3993 m
-4487 3993 l
-4487 3994 l
-4356 3994 l
-4356 3994 m
-4486 3994 l
-4486 3996 l
-4356 3996 l
-4355 3996 m
-4485 3996 l
-4485 3999 l
-4355 3999 l
-4354 3999 m
-4484 3999 l
-4484 4002 l
-4354 4002 l
-4353 4002 m
-4483 4002 l
-4483 4005 l
-4353 4005 l
-4352 4005 m
-4482 4005 l
-4482 4007 l
-4352 4007 l
-4351 4007 m
-4482 4007 l
-4482 4008 l
-4351 4008 l
-4351 4008 m
-4481 4008 l
-4481 4010 l
-4351 4010 l
-4350 4010 m
-4481 4010 l
-4481 4011 l
-4350 4011 l
-4350 4011 m
-4480 4011 l
-4480 4013 l
-4350 4013 l
-4349 4013 m
-4480 4013 l
-4480 4014 l
-4349 4014 l
-4349 4014 m
-4479 4014 l
-4479 4016 l
-4349 4016 l
-4348 4016 m
-4478 4016 l
-4478 4019 l
-4348 4019 l
-4347 4019 m
-4477 4019 l
-4477 4022 l
-4347 4022 l
-4346 4022 m
-4476 4022 l
-4476 4024 l
-4346 4024 l
-4345 4024 m
-4476 4024 l
-4476 4025 l
-4345 4025 l
-4345 4025 m
-4475 4025 l
-4475 4027 l
-4345 4027 l
-4344 4027 m
-4475 4027 l
-4475 4028 l
-4344 4028 l
-4344 4028 m
-4474 4028 l
-4474 4030 l
-4344 4030 l
-4343 4030 m
-4474 4030 l
-4474 4031 l
-4343 4031 l
-4343 4031 m
-4473 4031 l
-4473 4033 l
-4343 4033 l
-4342 4033 m
-4472 4033 l
-4472 4036 l
-4342 4036 l
-4341 4036 m
-4471 4036 l
-4471 4039 l
-4341 4039 l
-4340 4039 m
-4470 4039 l
-4470 4041 l
-4340 4041 l
-4339 4041 m
-4470 4041 l
-4470 4042 l
-4339 4042 l
-4339 4042 m
-4469 4042 l
-4469 4044 l
-4339 4044 l
-4338 4044 m
-4469 4044 l
-4469 4045 l
-4338 4045 l
-4338 4045 m
-4468 4045 l
-4468 4047 l
-4338 4047 l
-4337 4047 m
-4468 4047 l
-4468 4048 l
-4337 4048 l
-4337 4048 m
-4467 4048 l
-4467 4050 l
-4337 4050 l
-4336 4050 m
-4467 4050 l
-4467 4051 l
-4336 4051 l
-4336 4051 m
-4466 4051 l
-4466 4053 l
-4336 4053 l
-4335 4053 m
-4465 4053 l
-4465 4056 l
-4335 4056 l
-4334 4056 m
-4464 4056 l
-4464 4058 l
-4334 4058 l
-4333 4058 m
-4464 4058 l
-4464 4059 l
-4333 4059 l
-4333 4059 m
-4463 4059 l
-4463 4061 l
-4333 4061 l
-4332 4061 m
-4463 4061 l
-4463 4062 l
-4332 4062 l
-4332 4062 m
-4462 4062 l
-4462 4064 l
-4332 4064 l
-4331 4064 m
-4462 4064 l
-4462 4065 l
-4331 4065 l
-4331 4065 m
-4461 4065 l
-4461 4067 l
-4331 4067 l
-4330 4067 m
-4461 4067 l
-4461 4068 l
-4330 4068 l
-4330 4068 m
-4460 4068 l
-4460 4070 l
-4330 4070 l
-4329 4070 m
-4460 4070 l
-4460 4071 l
-4329 4071 l
-4329 4071 m
-4459 4071 l
-4459 4073 l
-4329 4073 l
-4328 4073 m
-4458 4073 l
-4458 4075 l
-4328 4075 l
-4327 4075 m
-4458 4075 l
-4458 4076 l
-4327 4076 l
-4327 4076 m
-4457 4076 l
-4457 4078 l
-4327 4078 l
-4326 4078 m
-4457 4078 l
-4457 4079 l
-4326 4079 l
-4326 4079 m
-4456 4079 l
-4456 4081 l
-4326 4081 l
-4325 4081 m
-4456 4081 l
-4456 4082 l
-4325 4082 l
-4325 4082 m
-4455 4082 l
-4455 4084 l
-4325 4084 l
-4324 4084 m
-4455 4084 l
-4455 4085 l
-4324 4085 l
-4324 4085 m
-4454 4085 l
-4454 4087 l
-4324 4087 l
-4323 4087 m
-4454 4087 l
-4454 4088 l
-4323 4088 l
-4323 4088 m
-4453 4088 l
-4453 4090 l
-4323 4090 l
-4322 4090 m
-4452 4090 l
-4452 4092 l
-4322 4092 l
-4321 4092 m
-4452 4092 l
-4452 4093 l
-4321 4093 l
-4321 4093 m
-4451 4093 l
-4451 4095 l
-4321 4095 l
-4320 4095 m
-4451 4095 l
-4451 4096 l
-4320 4096 l
-4320 4096 m
-4450 4096 l
-4450 4098 l
-4320 4098 l
-4319 4098 m
-4450 4098 l
-4450 4099 l
-4319 4099 l
-4319 4099 m
-4449 4099 l
-4449 4101 l
-4319 4101 l
-4318 4101 m
-4449 4101 l
-4449 4102 l
-4318 4102 l
-4318 4102 m
-4448 4102 l
-4448 4104 l
-4318 4104 l
-4317 4104 m
-4448 4104 l
-4448 4105 l
-4317 4105 l
-4317 4105 m
-4447 4105 l
-4447 4107 l
-4317 4107 l
-4317 4107 m
-4447 4107 l
-4447 4108 l
-4317 4108 l
-4319 4108 m
-4446 4108 l
-4446 4109 l
-4319 4109 l
-4322 4109 m
-4446 4109 l
-4446 4110 l
-4322 4110 l
-4325 4110 m
-4445 4110 l
-4445 4111 l
-4325 4111 l
-4328 4111 m
-4445 4111 l
-4445 4112 l
-4328 4112 l
-4331 4112 m
-4445 4112 l
-4445 4113 l
-4331 4113 l
-4334 4113 m
-4444 4113 l
-4444 4114 l
-4334 4114 l
-4337 4114 m
-4444 4114 l
-4444 4115 l
-4337 4115 l
-4340 4115 m
-4444 4115 l
-4444 4116 l
-4340 4116 l
-4342 4116 m
-4443 4116 l
-4443 4117 l
-4342 4117 l
-4345 4117 m
-4443 4117 l
-4443 4118 l
-4345 4118 l
-4348 4118 m
-4443 4118 l
-4443 4119 l
-4348 4119 l
-4351 4119 m
-4442 4119 l
-4442 4120 l
-4351 4120 l
-4354 4120 m
-4442 4120 l
-4442 4121 l
-4354 4121 l
-4357 4121 m
-4442 4121 l
-4442 4122 l
-4357 4122 l
-4360 4122 m
-4441 4122 l
-4441 4123 l
-4360 4123 l
-4363 4123 m
-4441 4123 l
-4441 4124 l
-4363 4124 l
-4365 4124 m
-4441 4124 l
-4441 4125 l
-4365 4125 l
-4368 4125 m
-4440 4125 l
-4440 4126 l
-4368 4126 l
-4371 4126 m
-4440 4126 l
-4440 4127 l
-4371 4127 l
-4374 4127 m
-4440 4127 l
-4440 4128 l
-4374 4128 l
-4377 4128 m
-4439 4128 l
-4439 4129 l
-4377 4129 l
-4380 4129 m
-4439 4129 l
-4439 4130 l
-4380 4130 l
-4383 4130 m
-4438 4130 l
-4438 4131 l
-4383 4131 l
-4386 4131 m
-4438 4131 l
-4438 4132 l
-4386 4132 l
-4388 4132 m
-4438 4132 l
-4438 4133 l
-4388 4133 l
-4391 4133 m
-4437 4133 l
-4437 4134 l
-4391 4134 l
-4394 4134 m
-4437 4134 l
-4437 4135 l
-4394 4135 l
-4397 4135 m
-4437 4135 l
-4437 4136 l
-4397 4136 l
-4400 4136 m
-4436 4136 l
-4436 4137 l
-4400 4137 l
-4403 4137 m
-4436 4137 l
-4436 4138 l
-4403 4138 l
-4406 4138 m
-4436 4138 l
-4436 4139 l
-4406 4139 l
-4409 4139 m
-4435 4139 l
-4435 4140 l
-4409 4140 l
-4411 4140 m
-4435 4140 l
-4435 4141 l
-4411 4141 l
-4414 4141 m
-4435 4141 l
-4435 4142 l
-4414 4142 l
-4417 4142 m
-4434 4142 l
-4434 4143 l
-4417 4143 l
-4420 4143 m
-4434 4143 l
-4434 4144 l
-4420 4144 l
-4423 4144 m
-4434 4144 l
-4434 4145 l
-4423 4145 l
-4426 4145 m
-4433 4145 l
-4433 4146 l
-4426 4146 l
-4429 4146 m
-4433 4146 l
-4433 4147 l
-4429 4147 l
-Y
-4520.4 3895 m
-4406 3855 l
-4317 4107 l
-4432 4147 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4412 3888 m
-4397 3931 l
-4437 3919 l
-4433 3930 l
-4434 3940 l
-4436 3945 l
-4447 3953 l
-4455 3956 l
-4468 3956 l
-4478 3951 l
-4487 3941 l
-4491 3929 l
-4491 3916 l
-4488 3910 l
-4482 3904 l
-S
-4399 3976 m
-4392 3983 l
-4376 3990 l
-4459 4019 l
-S
-4343 4085 m
-4357 4045 l
-4393 4054 l
-4388 4057 l
-4380 4067 l
-4376 4079 l
-4376 4092 l
-4381 4103 l
-4391 4111 l
-4399 4113 l
-4412 4114 l
-4423 4109 l
-4431 4098 l
-4435 4086 l
-4435 4073 l
-4433 4068 l
-4426 4061 l
-S
-1 g
-2971 2971 m
-2974 2971 l
-2974 2972 l
-2971 2972 l
-2970 2972 m
-2976 2972 l
-2976 2973 l
-2970 2973 l
-2970 2973 m
-2978 2973 l
-2978 2974 l
-2970 2974 l
-2969 2974 m
-2980 2974 l
-2980 2975 l
-2969 2975 l
-2969 2975 m
-2982 2975 l
-2982 2976 l
-2969 2976 l
-2968 2976 m
-2984 2976 l
-2984 2977 l
-2968 2977 l
-2968 2977 m
-2985 2977 l
-2985 2978 l
-2968 2978 l
-2967 2978 m
-2987 2978 l
-2987 2979 l
-2967 2979 l
-2966 2979 m
-2989 2979 l
-2989 2980 l
-2966 2980 l
-2966 2980 m
-2991 2980 l
-2991 2981 l
-2966 2981 l
-2965 2981 m
-2993 2981 l
-2993 2982 l
-2965 2982 l
-2965 2982 m
-2994 2982 l
-2994 2983 l
-2965 2983 l
-2964 2983 m
-2996 2983 l
-2996 2984 l
-2964 2984 l
-2964 2984 m
-2998 2984 l
-2998 2985 l
-2964 2985 l
-2963 2985 m
-3000 2985 l
-3000 2986 l
-2963 2986 l
-2963 2986 m
-3002 2986 l
-3002 2987 l
-2963 2987 l
-2962 2987 m
-3003 2987 l
-3003 2988 l
-2962 2988 l
-2961 2988 m
-3005 2988 l
-3005 2989 l
-2961 2989 l
-2961 2989 m
-3007 2989 l
-3007 2990 l
-2961 2990 l
-2960 2990 m
-3009 2990 l
-3009 2991 l
-2960 2991 l
-2960 2991 m
-3011 2991 l
-3011 2992 l
-2960 2992 l
-2959 2992 m
-3013 2992 l
-3013 2993 l
-2959 2993 l
-2959 2993 m
-3014 2993 l
-3014 2994 l
-2959 2994 l
-2958 2994 m
-3016 2994 l
-3016 2995 l
-2958 2995 l
-2958 2995 m
-3018 2995 l
-3018 2996 l
-2958 2996 l
-2957 2996 m
-3020 2996 l
-3020 2997 l
-2957 2997 l
-2956 2997 m
-3022 2997 l
-3022 2998 l
-2956 2998 l
-2956 2998 m
-3023 2998 l
-3023 2999 l
-2956 2999 l
-2955 2999 m
-3025 2999 l
-3025 3000 l
-2955 3000 l
-2955 3000 m
-3027 3000 l
-3027 3001 l
-2955 3001 l
-2954 3001 m
-3029 3001 l
-3029 3002 l
-2954 3002 l
-2954 3002 m
-3031 3002 l
-3031 3003 l
-2954 3003 l
-2953 3003 m
-3032 3003 l
-3032 3004 l
-2953 3004 l
-2953 3004 m
-3034 3004 l
-3034 3005 l
-2953 3005 l
-2952 3005 m
-3036 3005 l
-3036 3006 l
-2952 3006 l
-2951 3006 m
-3038 3006 l
-3038 3007 l
-2951 3007 l
-2951 3007 m
-3040 3007 l
-3040 3008 l
-2951 3008 l
-2950 3008 m
-3042 3008 l
-3042 3009 l
-2950 3009 l
-2950 3009 m
-3043 3009 l
-3043 3010 l
-2950 3010 l
-2949 3010 m
-3045 3010 l
-3045 3011 l
-2949 3011 l
-2949 3011 m
-3047 3011 l
-3047 3012 l
-2949 3012 l
-2948 3012 m
-3049 3012 l
-3049 3013 l
-2948 3013 l
-2948 3013 m
-3051 3013 l
-3051 3014 l
-2948 3014 l
-2947 3014 m
-3052 3014 l
-3052 3015 l
-2947 3015 l
-2946 3015 m
-3054 3015 l
-3054 3016 l
-2946 3016 l
-2946 3016 m
-3056 3016 l
-3056 3017 l
-2946 3017 l
-2945 3017 m
-3058 3017 l
-3058 3018 l
-2945 3018 l
-2945 3018 m
-3060 3018 l
-3060 3019 l
-2945 3019 l
-2944 3019 m
-3061 3019 l
-3061 3020 l
-2944 3020 l
-2944 3020 m
-3063 3020 l
-3063 3021 l
-2944 3021 l
-2943 3021 m
-3065 3021 l
-3065 3022 l
-2943 3022 l
-2943 3022 m
-3067 3022 l
-3067 3023 l
-2943 3023 l
-2942 3023 m
-3069 3023 l
-3069 3024 l
-2942 3024 l
-2941 3024 m
-3071 3024 l
-3071 3025 l
-2941 3025 l
-2941 3025 m
-3072 3025 l
-3072 3026 l
-2941 3026 l
-2940 3026 m
-3074 3026 l
-3074 3027 l
-2940 3027 l
-2940 3027 m
-3076 3027 l
-3076 3028 l
-2940 3028 l
-2939 3028 m
-3078 3028 l
-3078 3029 l
-2939 3029 l
-2939 3029 m
-3080 3029 l
-3080 3030 l
-2939 3030 l
-2938 3030 m
-3081 3030 l
-3081 3031 l
-2938 3031 l
-2938 3031 m
-3083 3031 l
-3083 3032 l
-2938 3032 l
-2937 3032 m
-3085 3032 l
-3085 3033 l
-2937 3033 l
-2936 3033 m
-3087 3033 l
-3087 3034 l
-2936 3034 l
-2936 3034 m
-3089 3034 l
-3089 3035 l
-2936 3035 l
-2935 3035 m
-3090 3035 l
-3090 3036 l
-2935 3036 l
-2935 3036 m
-3092 3036 l
-3092 3037 l
-2935 3037 l
-2934 3037 m
-3094 3037 l
-3094 3038 l
-2934 3038 l
-2934 3038 m
-3096 3038 l
-3096 3039 l
-2934 3039 l
-2933 3039 m
-3098 3039 l
-3098 3040 l
-2933 3040 l
-2933 3040 m
-3099 3040 l
-3099 3041 l
-2933 3041 l
-2932 3041 m
-3101 3041 l
-3101 3042 l
-2932 3042 l
-2931 3042 m
-3103 3042 l
-3103 3043 l
-2931 3043 l
-2931 3043 m
-3105 3043 l
-3105 3044 l
-2931 3044 l
-2930 3044 m
-3107 3044 l
-3107 3045 l
-2930 3045 l
-2930 3045 m
-3109 3045 l
-3109 3046 l
-2930 3046 l
-2929 3046 m
-3110 3046 l
-3110 3047 l
-2929 3047 l
-2929 3047 m
-3112 3047 l
-3112 3048 l
-2929 3048 l
-2928 3048 m
-3114 3048 l
-3114 3049 l
-2928 3049 l
-2928 3049 m
-3116 3049 l
-3116 3050 l
-2928 3050 l
-2927 3050 m
-3118 3050 l
-3118 3051 l
-2927 3051 l
-2926 3051 m
-3119 3051 l
-3119 3052 l
-2926 3052 l
-2926 3052 m
-3121 3052 l
-3121 3053 l
-2926 3053 l
-2925 3053 m
-3123 3053 l
-3123 3054 l
-2925 3054 l
-2925 3054 m
-3125 3054 l
-3125 3055 l
-2925 3055 l
-2924 3055 m
-3127 3055 l
-3127 3056 l
-2924 3056 l
-2924 3056 m
-3128 3056 l
-3128 3057 l
-2924 3057 l
-2923 3057 m
-3130 3057 l
-3130 3058 l
-2923 3058 l
-2923 3058 m
-3132 3058 l
-3132 3059 l
-2923 3059 l
-2922 3059 m
-3134 3059 l
-3134 3060 l
-2922 3060 l
-2921 3060 m
-3136 3060 l
-3136 3061 l
-2921 3061 l
-2921 3061 m
-3138 3061 l
-3138 3062 l
-2921 3062 l
-2920 3062 m
-3139 3062 l
-3139 3063 l
-2920 3063 l
-2920 3063 m
-3141 3063 l
-3141 3064 l
-2920 3064 l
-2919 3064 m
-3143 3064 l
-3143 3065 l
-2919 3065 l
-2919 3065 m
-3145 3065 l
-3145 3066 l
-2919 3066 l
-2918 3066 m
-3147 3066 l
-3147 3067 l
-2918 3067 l
-2918 3067 m
-3148 3067 l
-3148 3068 l
-2918 3068 l
-2917 3068 m
-3150 3068 l
-3150 3069 l
-2917 3069 l
-2916 3069 m
-3152 3069 l
-3152 3070 l
-2916 3070 l
-2916 3070 m
-3154 3070 l
-3154 3071 l
-2916 3071 l
-2915 3071 m
-3156 3071 l
-3156 3072 l
-2915 3072 l
-2915 3072 m
-3157 3072 l
-3157 3073 l
-2915 3073 l
-2914 3073 m
-3159 3073 l
-3159 3074 l
-2914 3074 l
-2914 3074 m
-3161 3074 l
-3161 3075 l
-2914 3075 l
-2913 3075 m
-3163 3075 l
-3163 3076 l
-2913 3076 l
-2913 3076 m
-3165 3076 l
-3165 3077 l
-2913 3077 l
-2913 3077 m
-3167 3077 l
-3167 3078 l
-2913 3078 l
-2914 3078 m
-3168 3078 l
-3168 3079 l
-2914 3079 l
-2916 3079 m
-3170 3079 l
-3170 3080 l
-2916 3080 l
-2918 3080 m
-3172 3080 l
-3172 3081 l
-2918 3081 l
-2920 3081 m
-3174 3081 l
-3174 3082 l
-2920 3082 l
-2922 3082 m
-3176 3082 l
-3176 3083 l
-2922 3083 l
-2923 3083 m
-3177 3083 l
-3177 3084 l
-2923 3084 l
-2925 3084 m
-3179 3084 l
-3179 3085 l
-2925 3085 l
-2927 3085 m
-3181 3085 l
-3181 3086 l
-2927 3086 l
-2929 3086 m
-3183 3086 l
-3183 3087 l
-2929 3087 l
-2931 3087 m
-3185 3087 l
-3185 3088 l
-2931 3088 l
-2933 3088 m
-3186 3088 l
-3186 3089 l
-2933 3089 l
-2934 3089 m
-3188 3089 l
-3188 3090 l
-2934 3090 l
-2936 3090 m
-3190 3090 l
-3190 3091 l
-2936 3091 l
-2938 3091 m
-3192 3091 l
-3192 3092 l
-2938 3092 l
-2940 3092 m
-3194 3092 l
-3194 3093 l
-2940 3093 l
-2942 3093 m
-3196 3093 l
-3196 3094 l
-2942 3094 l
-2943 3094 m
-3197 3094 l
-3197 3095 l
-2943 3095 l
-2945 3095 m
-3199 3095 l
-3199 3096 l
-2945 3096 l
-2947 3096 m
-3201 3096 l
-3201 3097 l
-2947 3097 l
-2949 3097 m
-3203 3097 l
-3203 3098 l
-2949 3098 l
-2951 3098 m
-3205 3098 l
-3205 3099 l
-2951 3099 l
-2953 3099 m
-3206 3099 l
-3206 3100 l
-2953 3100 l
-2954 3100 m
-3208 3100 l
-3208 3101 l
-2954 3101 l
-2956 3101 m
-3210 3101 l
-3210 3102 l
-2956 3102 l
-2958 3102 m
-3212 3102 l
-3212 3103 l
-2958 3103 l
-2960 3103 m
-3214 3103 l
-3214 3104 l
-2960 3104 l
-2962 3104 m
-3215 3104 l
-3215 3105 l
-2962 3105 l
-2963 3105 m
-3217 3105 l
-3217 3106 l
-2963 3106 l
-2965 3106 m
-3219 3106 l
-3219 3107 l
-2965 3107 l
-2967 3107 m
-3221 3107 l
-3221 3108 l
-2967 3108 l
-2969 3108 m
-3223 3108 l
-3223 3109 l
-2969 3109 l
-2971 3109 m
-3224 3109 l
-3224 3110 l
-2971 3110 l
-2973 3110 m
-3224 3110 l
-3224 3111 l
-2973 3111 l
-2974 3111 m
-3224 3111 l
-3224 3112 l
-2974 3112 l
-2976 3112 m
-3223 3112 l
-3223 3113 l
-2976 3113 l
-2978 3113 m
-3223 3113 l
-3223 3114 l
-2978 3114 l
-2980 3114 m
-3222 3114 l
-3222 3115 l
-2980 3115 l
-2982 3115 m
-3222 3115 l
-3222 3116 l
-2982 3116 l
-2983 3116 m
-3221 3116 l
-3221 3117 l
-2983 3117 l
-2985 3117 m
-3221 3117 l
-3221 3118 l
-2985 3118 l
-2987 3118 m
-3220 3118 l
-3220 3119 l
-2987 3119 l
-2989 3119 m
-3220 3119 l
-3220 3120 l
-2989 3120 l
-2991 3120 m
-3219 3120 l
-3219 3121 l
-2991 3121 l
-2993 3121 m
-3218 3121 l
-3218 3122 l
-2993 3122 l
-2994 3122 m
-3218 3122 l
-3218 3123 l
-2994 3123 l
-2996 3123 m
-3217 3123 l
-3217 3124 l
-2996 3124 l
-2998 3124 m
-3217 3124 l
-3217 3125 l
-2998 3125 l
-3000 3125 m
-3216 3125 l
-3216 3126 l
-3000 3126 l
-3002 3126 m
-3216 3126 l
-3216 3127 l
-3002 3127 l
-3004 3127 m
-3215 3127 l
-3215 3128 l
-3004 3128 l
-3005 3128 m
-3215 3128 l
-3215 3129 l
-3005 3129 l
-3007 3129 m
-3214 3129 l
-3214 3130 l
-3007 3130 l
-3009 3130 m
-3214 3130 l
-3214 3131 l
-3009 3131 l
-3011 3131 m
-3213 3131 l
-3213 3132 l
-3011 3132 l
-3013 3132 m
-3212 3132 l
-3212 3133 l
-3013 3133 l
-3014 3133 m
-3212 3133 l
-3212 3134 l
-3014 3134 l
-3016 3134 m
-3211 3134 l
-3211 3135 l
-3016 3135 l
-3018 3135 m
-3211 3135 l
-3211 3136 l
-3018 3136 l
-3020 3136 m
-3210 3136 l
-3210 3137 l
-3020 3137 l
-3022 3137 m
-3210 3137 l
-3210 3138 l
-3022 3138 l
-3024 3138 m
-3209 3138 l
-3209 3139 l
-3024 3139 l
-3025 3139 m
-3209 3139 l
-3209 3140 l
-3025 3140 l
-3027 3140 m
-3208 3140 l
-3208 3141 l
-3027 3141 l
-3029 3141 m
-3208 3141 l
-3208 3142 l
-3029 3142 l
-3031 3142 m
-3207 3142 l
-3207 3143 l
-3031 3143 l
-3033 3143 m
-3206 3143 l
-3206 3144 l
-3033 3144 l
-3034 3144 m
-3206 3144 l
-3206 3145 l
-3034 3145 l
-3036 3145 m
-3205 3145 l
-3205 3146 l
-3036 3146 l
-3038 3146 m
-3205 3146 l
-3205 3147 l
-3038 3147 l
-3040 3147 m
-3204 3147 l
-3204 3148 l
-3040 3148 l
-3042 3148 m
-3204 3148 l
-3204 3149 l
-3042 3149 l
-3044 3149 m
-3203 3149 l
-3203 3150 l
-3044 3150 l
-3045 3150 m
-3203 3150 l
-3203 3151 l
-3045 3151 l
-3047 3151 m
-3202 3151 l
-3202 3152 l
-3047 3152 l
-3049 3152 m
-3202 3152 l
-3202 3153 l
-3049 3153 l
-3051 3153 m
-3201 3153 l
-3201 3154 l
-3051 3154 l
-3053 3154 m
-3200 3154 l
-3200 3155 l
-3053 3155 l
-3054 3155 m
-3200 3155 l
-3200 3156 l
-3054 3156 l
-3056 3156 m
-3199 3156 l
-3199 3157 l
-3056 3157 l
-3058 3157 m
-3199 3157 l
-3199 3158 l
-3058 3158 l
-3060 3158 m
-3198 3158 l
-3198 3159 l
-3060 3159 l
-3062 3159 m
-3198 3159 l
-3198 3160 l
-3062 3160 l
-3064 3160 m
-3197 3160 l
-3197 3161 l
-3064 3161 l
-3065 3161 m
-3197 3161 l
-3197 3162 l
-3065 3162 l
-3067 3162 m
-3196 3162 l
-3196 3163 l
-3067 3163 l
-3069 3163 m
-3195 3163 l
-3195 3164 l
-3069 3164 l
-3071 3164 m
-3195 3164 l
-3195 3165 l
-3071 3165 l
-3073 3165 m
-3194 3165 l
-3194 3166 l
-3073 3166 l
-3074 3166 m
-3194 3166 l
-3194 3167 l
-3074 3167 l
-3076 3167 m
-3193 3167 l
-3193 3168 l
-3076 3168 l
-3078 3168 m
-3193 3168 l
-3193 3169 l
-3078 3169 l
-3080 3169 m
-3192 3169 l
-3192 3170 l
-3080 3170 l
-3082 3170 m
-3192 3170 l
-3192 3171 l
-3082 3171 l
-3084 3171 m
-3191 3171 l
-3191 3172 l
-3084 3172 l
-3085 3172 m
-3191 3172 l
-3191 3173 l
-3085 3173 l
-3087 3173 m
-3190 3173 l
-3190 3174 l
-3087 3174 l
-3089 3174 m
-3189 3174 l
-3189 3175 l
-3089 3175 l
-3091 3175 m
-3189 3175 l
-3189 3176 l
-3091 3176 l
-3093 3176 m
-3188 3176 l
-3188 3177 l
-3093 3177 l
-3095 3177 m
-3188 3177 l
-3188 3178 l
-3095 3178 l
-3096 3178 m
-3187 3178 l
-3187 3179 l
-3096 3179 l
-3098 3179 m
-3187 3179 l
-3187 3180 l
-3098 3180 l
-3100 3180 m
-3186 3180 l
-3186 3181 l
-3100 3181 l
-3102 3181 m
-3186 3181 l
-3186 3182 l
-3102 3182 l
-3104 3182 m
-3185 3182 l
-3185 3183 l
-3104 3183 l
-3105 3183 m
-3185 3183 l
-3185 3184 l
-3105 3184 l
-3107 3184 m
-3184 3184 l
-3184 3185 l
-3107 3185 l
-3109 3185 m
-3183 3185 l
-3183 3186 l
-3109 3186 l
-3111 3186 m
-3183 3186 l
-3183 3187 l
-3111 3187 l
-3113 3187 m
-3182 3187 l
-3182 3188 l
-3113 3188 l
-3115 3188 m
-3182 3188 l
-3182 3189 l
-3115 3189 l
-3116 3189 m
-3181 3189 l
-3181 3190 l
-3116 3190 l
-3118 3190 m
-3181 3190 l
-3181 3191 l
-3118 3191 l
-3120 3191 m
-3180 3191 l
-3180 3192 l
-3120 3192 l
-3122 3192 m
-3180 3192 l
-3180 3193 l
-3122 3193 l
-3124 3193 m
-3179 3193 l
-3179 3194 l
-3124 3194 l
-3125 3194 m
-3179 3194 l
-3179 3195 l
-3125 3195 l
-3127 3195 m
-3178 3195 l
-3178 3196 l
-3127 3196 l
-3129 3196 m
-3177 3196 l
-3177 3197 l
-3129 3197 l
-3131 3197 m
-3177 3197 l
-3177 3198 l
-3131 3198 l
-3133 3198 m
-3176 3198 l
-3176 3199 l
-3133 3199 l
-3135 3199 m
-3176 3199 l
-3176 3200 l
-3135 3200 l
-3136 3200 m
-3175 3200 l
-3175 3201 l
-3136 3201 l
-3138 3201 m
-3175 3201 l
-3175 3202 l
-3138 3202 l
-3140 3202 m
-3174 3202 l
-3174 3203 l
-3140 3203 l
-3142 3203 m
-3174 3203 l
-3174 3204 l
-3142 3204 l
-3144 3204 m
-3173 3204 l
-3173 3205 l
-3144 3205 l
-3145 3205 m
-3173 3205 l
-3173 3206 l
-3145 3206 l
-3147 3206 m
-3172 3206 l
-3172 3207 l
-3147 3207 l
-3149 3207 m
-3171 3207 l
-3171 3208 l
-3149 3208 l
-3151 3208 m
-3171 3208 l
-3171 3209 l
-3151 3209 l
-3153 3209 m
-3170 3209 l
-3170 3210 l
-3153 3210 l
-3155 3210 m
-3170 3210 l
-3170 3211 l
-3155 3211 l
-3156 3211 m
-3169 3211 l
-3169 3212 l
-3156 3212 l
-3158 3212 m
-3169 3212 l
-3169 3213 l
-3158 3213 l
-3160 3213 m
-3168 3213 l
-3168 3214 l
-3160 3214 l
-3162 3214 m
-3168 3214 l
-3168 3215 l
-3162 3215 l
-3164 3215 m
-3167 3215 l
-3167 3216 l
-3164 3216 l
-Y
-2972 2970.9 m
-2913 3077 l
-3166 3216 l
-3224 3110 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2964 3028 m
-3030 3065 l
-S
-3093 3124 m
-3095 3111 l
-3092 3099 l
-3083 3090 l
-3079 3088 l
-3066 3085 l
-3055 3088 l
-3045 3097 l
-3043 3101 l
-3041 3114 l
-3044 3125 l
-3053 3135 l
-3057 3137 l
-3070 3139 l
-3081 3136 l
-3093 3124 l
-3103 3105 l
-3109 3085 l
-3108 3070 l
-3099 3060 l
-3092 3056 l
-3079 3054 l
-3071 3059 l
-S
-3126 3175 m
-3117 3166 l
-3116 3151 l
-3122 3130 l
-3128 3119 l
-3142 3103 l
-3156 3096 l
-3169 3099 l
-3176 3103 l
-3185 3112 l
-3186 3127 l
-3180 3148 l
-3174 3159 l
-3160 3175 l
-3146 3182 l
-3133 3179 l
-3126 3175 l
-S
-1 g
-3473 3317 m
-3476 3317 l
-3476 3318 l
-3473 3318 l
-3472 3318 m
-3476 3318 l
-3476 3319 l
-3472 3319 l
-3471 3319 m
-3477 3319 l
-3477 3320 l
-3471 3320 l
-3470 3320 m
-3478 3320 l
-3478 3321 l
-3470 3321 l
-3469 3321 m
-3479 3321 l
-3479 3322 l
-3469 3322 l
-3467 3322 m
-3480 3322 l
-3480 3323 l
-3467 3323 l
-3466 3323 m
-3480 3323 l
-3480 3324 l
-3466 3324 l
-3465 3324 m
-3481 3324 l
-3481 3325 l
-3465 3325 l
-3464 3325 m
-3482 3325 l
-3482 3326 l
-3464 3326 l
-3463 3326 m
-3483 3326 l
-3483 3327 l
-3463 3327 l
-3461 3327 m
-3484 3327 l
-3484 3328 l
-3461 3328 l
-3460 3328 m
-3485 3328 l
-3485 3329 l
-3460 3329 l
-3459 3329 m
-3485 3329 l
-3485 3330 l
-3459 3330 l
-3458 3330 m
-3486 3330 l
-3486 3331 l
-3458 3331 l
-3457 3331 m
-3487 3331 l
-3487 3332 l
-3457 3332 l
-3455 3332 m
-3488 3332 l
-3488 3333 l
-3455 3333 l
-3454 3333 m
-3489 3333 l
-3489 3334 l
-3454 3334 l
-3453 3334 m
-3490 3334 l
-3490 3335 l
-3453 3335 l
-3452 3335 m
-3490 3335 l
-3490 3336 l
-3452 3336 l
-3451 3336 m
-3491 3336 l
-3491 3337 l
-3451 3337 l
-3449 3337 m
-3492 3337 l
-3492 3338 l
-3449 3338 l
-3448 3338 m
-3493 3338 l
-3493 3339 l
-3448 3339 l
-3447 3339 m
-3494 3339 l
-3494 3340 l
-3447 3340 l
-3446 3340 m
-3494 3340 l
-3494 3341 l
-3446 3341 l
-3445 3341 m
-3495 3341 l
-3495 3342 l
-3445 3342 l
-3443 3342 m
-3496 3342 l
-3496 3343 l
-3443 3343 l
-3442 3343 m
-3497 3343 l
-3497 3344 l
-3442 3344 l
-3441 3344 m
-3498 3344 l
-3498 3345 l
-3441 3345 l
-3440 3345 m
-3499 3345 l
-3499 3346 l
-3440 3346 l
-3438 3346 m
-3499 3346 l
-3499 3347 l
-3438 3347 l
-3437 3347 m
-3500 3347 l
-3500 3348 l
-3437 3348 l
-3436 3348 m
-3501 3348 l
-3501 3349 l
-3436 3349 l
-3435 3349 m
-3502 3349 l
-3502 3350 l
-3435 3350 l
-3434 3350 m
-3503 3350 l
-3503 3351 l
-3434 3351 l
-3432 3351 m
-3504 3351 l
-3504 3352 l
-3432 3352 l
-3431 3352 m
-3504 3352 l
-3504 3353 l
-3431 3353 l
-3430 3353 m
-3505 3353 l
-3505 3354 l
-3430 3354 l
-3429 3354 m
-3506 3354 l
-3506 3355 l
-3429 3355 l
-3428 3355 m
-3507 3355 l
-3507 3356 l
-3428 3356 l
-3426 3356 m
-3508 3356 l
-3508 3357 l
-3426 3357 l
-3425 3357 m
-3508 3357 l
-3508 3358 l
-3425 3358 l
-3424 3358 m
-3509 3358 l
-3509 3359 l
-3424 3359 l
-3423 3359 m
-3510 3359 l
-3510 3360 l
-3423 3360 l
-3422 3360 m
-3511 3360 l
-3511 3361 l
-3422 3361 l
-3420 3361 m
-3512 3361 l
-3512 3362 l
-3420 3362 l
-3419 3362 m
-3513 3362 l
-3513 3363 l
-3419 3363 l
-3418 3363 m
-3513 3363 l
-3513 3364 l
-3418 3364 l
-3417 3364 m
-3514 3364 l
-3514 3365 l
-3417 3365 l
-3416 3365 m
-3515 3365 l
-3515 3366 l
-3416 3366 l
-3414 3366 m
-3516 3366 l
-3516 3367 l
-3414 3367 l
-3413 3367 m
-3517 3367 l
-3517 3368 l
-3413 3368 l
-3412 3368 m
-3518 3368 l
-3518 3369 l
-3412 3369 l
-3411 3369 m
-3518 3369 l
-3518 3370 l
-3411 3370 l
-3409 3370 m
-3519 3370 l
-3519 3371 l
-3409 3371 l
-3408 3371 m
-3520 3371 l
-3520 3372 l
-3408 3372 l
-3407 3372 m
-3521 3372 l
-3521 3373 l
-3407 3373 l
-3406 3373 m
-3522 3373 l
-3522 3374 l
-3406 3374 l
-3405 3374 m
-3522 3374 l
-3522 3375 l
-3405 3375 l
-3403 3375 m
-3523 3375 l
-3523 3376 l
-3403 3376 l
-3402 3376 m
-3524 3376 l
-3524 3377 l
-3402 3377 l
-3401 3377 m
-3525 3377 l
-3525 3378 l
-3401 3378 l
-3400 3378 m
-3526 3378 l
-3526 3379 l
-3400 3379 l
-3399 3379 m
-3527 3379 l
-3527 3380 l
-3399 3380 l
-3397 3380 m
-3527 3380 l
-3527 3381 l
-3397 3381 l
-3396 3381 m
-3528 3381 l
-3528 3382 l
-3396 3382 l
-3395 3382 m
-3529 3382 l
-3529 3383 l
-3395 3383 l
-3394 3383 m
-3530 3383 l
-3530 3384 l
-3394 3384 l
-3393 3384 m
-3531 3384 l
-3531 3385 l
-3393 3385 l
-3391 3385 m
-3532 3385 l
-3532 3386 l
-3391 3386 l
-3390 3386 m
-3532 3386 l
-3532 3387 l
-3390 3387 l
-3389 3387 m
-3533 3387 l
-3533 3388 l
-3389 3388 l
-3388 3388 m
-3534 3388 l
-3534 3389 l
-3388 3389 l
-3387 3389 m
-3535 3389 l
-3535 3390 l
-3387 3390 l
-3385 3390 m
-3536 3390 l
-3536 3391 l
-3385 3391 l
-3384 3391 m
-3537 3391 l
-3537 3392 l
-3384 3392 l
-3383 3392 m
-3537 3392 l
-3537 3393 l
-3383 3393 l
-3382 3393 m
-3538 3393 l
-3538 3394 l
-3382 3394 l
-3381 3394 m
-3539 3394 l
-3539 3395 l
-3381 3395 l
-3381 3395 m
-3540 3395 l
-3540 3396 l
-3381 3396 l
-3381 3396 m
-3541 3396 l
-3541 3397 l
-3381 3397 l
-3382 3397 m
-3541 3397 l
-3541 3398 l
-3382 3398 l
-3383 3398 m
-3542 3398 l
-3542 3399 l
-3383 3399 l
-3384 3399 m
-3543 3399 l
-3543 3400 l
-3384 3400 l
-3385 3400 m
-3544 3400 l
-3544 3401 l
-3385 3401 l
-3385 3401 m
-3545 3401 l
-3545 3402 l
-3385 3402 l
-3386 3402 m
-3546 3402 l
-3546 3403 l
-3386 3403 l
-3387 3403 m
-3546 3403 l
-3546 3404 l
-3387 3404 l
-3388 3404 m
-3547 3404 l
-3547 3405 l
-3388 3405 l
-3389 3405 m
-3548 3405 l
-3548 3406 l
-3389 3406 l
-3390 3406 m
-3549 3406 l
-3549 3407 l
-3390 3407 l
-3390 3407 m
-3550 3407 l
-3550 3408 l
-3390 3408 l
-3391 3408 m
-3551 3408 l
-3551 3409 l
-3391 3409 l
-3392 3409 m
-3551 3409 l
-3551 3410 l
-3392 3410 l
-3393 3410 m
-3552 3410 l
-3552 3411 l
-3393 3411 l
-3394 3411 m
-3553 3411 l
-3553 3412 l
-3394 3412 l
-3395 3412 m
-3554 3412 l
-3554 3413 l
-3395 3413 l
-3395 3413 m
-3555 3413 l
-3555 3414 l
-3395 3414 l
-3396 3414 m
-3555 3414 l
-3555 3415 l
-3396 3415 l
-3397 3415 m
-3556 3415 l
-3556 3416 l
-3397 3416 l
-3398 3416 m
-3557 3416 l
-3557 3417 l
-3398 3417 l
-3399 3417 m
-3558 3417 l
-3558 3418 l
-3399 3418 l
-3400 3418 m
-3559 3418 l
-3559 3419 l
-3400 3419 l
-3400 3419 m
-3560 3419 l
-3560 3420 l
-3400 3420 l
-3401 3420 m
-3560 3420 l
-3560 3421 l
-3401 3421 l
-3402 3421 m
-3561 3421 l
-3561 3422 l
-3402 3422 l
-3403 3422 m
-3562 3422 l
-3562 3423 l
-3403 3423 l
-3404 3423 m
-3563 3423 l
-3563 3424 l
-3404 3424 l
-3405 3424 m
-3564 3424 l
-3564 3425 l
-3405 3425 l
-3405 3425 m
-3565 3425 l
-3565 3426 l
-3405 3426 l
-3406 3426 m
-3565 3426 l
-3565 3427 l
-3406 3427 l
-3407 3427 m
-3566 3427 l
-3566 3428 l
-3407 3428 l
-3408 3428 m
-3567 3428 l
-3567 3429 l
-3408 3429 l
-3409 3429 m
-3568 3429 l
-3568 3430 l
-3409 3430 l
-3410 3430 m
-3569 3430 l
-3569 3432 l
-3410 3432 l
-3411 3432 m
-3570 3432 l
-3570 3433 l
-3411 3433 l
-3412 3433 m
-3571 3433 l
-3571 3434 l
-3412 3434 l
-3413 3434 m
-3572 3434 l
-3572 3435 l
-3413 3435 l
-3414 3435 m
-3573 3435 l
-3573 3436 l
-3414 3436 l
-3414 3436 m
-3574 3436 l
-3574 3437 l
-3414 3437 l
-3415 3437 m
-3574 3437 l
-3574 3438 l
-3415 3438 l
-3416 3438 m
-3575 3438 l
-3575 3439 l
-3416 3439 l
-3417 3439 m
-3576 3439 l
-3576 3440 l
-3417 3440 l
-3418 3440 m
-3577 3440 l
-3577 3441 l
-3418 3441 l
-3419 3441 m
-3578 3441 l
-3578 3442 l
-3419 3442 l
-3419 3442 m
-3579 3442 l
-3579 3443 l
-3419 3443 l
-3420 3443 m
-3579 3443 l
-3579 3444 l
-3420 3444 l
-3421 3444 m
-3580 3444 l
-3580 3445 l
-3421 3445 l
-3422 3445 m
-3581 3445 l
-3581 3446 l
-3422 3446 l
-3423 3446 m
-3582 3446 l
-3582 3447 l
-3423 3447 l
-3424 3447 m
-3583 3447 l
-3583 3449 l
-3424 3449 l
-3425 3449 m
-3584 3449 l
-3584 3450 l
-3425 3450 l
-3426 3450 m
-3585 3450 l
-3585 3451 l
-3426 3451 l
-3427 3451 m
-3586 3451 l
-3586 3452 l
-3427 3452 l
-3428 3452 m
-3587 3452 l
-3587 3453 l
-3428 3453 l
-3429 3453 m
-3588 3453 l
-3588 3455 l
-3429 3455 l
-3430 3455 m
-3589 3455 l
-3589 3456 l
-3430 3456 l
-3431 3456 m
-3590 3456 l
-3590 3457 l
-3431 3457 l
-3432 3457 m
-3591 3457 l
-3591 3458 l
-3432 3458 l
-3433 3458 m
-3592 3458 l
-3592 3459 l
-3433 3459 l
-3434 3459 m
-3593 3459 l
-3593 3461 l
-3434 3461 l
-3435 3461 m
-3594 3461 l
-3594 3462 l
-3435 3462 l
-3436 3462 m
-3595 3462 l
-3595 3463 l
-3436 3463 l
-3437 3463 m
-3596 3463 l
-3596 3464 l
-3437 3464 l
-3438 3464 m
-3597 3464 l
-3597 3465 l
-3438 3465 l
-3439 3465 m
-3598 3465 l
-3598 3467 l
-3439 3467 l
-3440 3467 m
-3599 3467 l
-3599 3468 l
-3440 3468 l
-3441 3468 m
-3600 3468 l
-3600 3469 l
-3441 3469 l
-3442 3469 m
-3601 3469 l
-3601 3470 l
-3442 3470 l
-3443 3470 m
-3602 3470 l
-3602 3472 l
-3443 3472 l
-3444 3472 m
-3603 3472 l
-3603 3473 l
-3444 3473 l
-3445 3473 m
-3604 3473 l
-3604 3474 l
-3445 3474 l
-3446 3474 m
-3605 3474 l
-3605 3475 l
-3446 3475 l
-3447 3475 m
-3606 3475 l
-3606 3476 l
-3447 3476 l
-3448 3476 m
-3607 3476 l
-3607 3478 l
-3448 3478 l
-3449 3478 m
-3608 3478 l
-3608 3479 l
-3449 3479 l
-3450 3479 m
-3609 3479 l
-3609 3480 l
-3450 3480 l
-3451 3480 m
-3610 3480 l
-3610 3481 l
-3451 3481 l
-3452 3481 m
-3611 3481 l
-3611 3482 l
-3452 3482 l
-3453 3482 m
-3612 3482 l
-3612 3484 l
-3453 3484 l
-3454 3484 m
-3613 3484 l
-3613 3485 l
-3454 3485 l
-3455 3485 m
-3614 3485 l
-3614 3486 l
-3455 3486 l
-3456 3486 m
-3615 3486 l
-3615 3487 l
-3456 3487 l
-3457 3487 m
-3616 3487 l
-3616 3488 l
-3457 3488 l
-3458 3488 m
-3616 3488 l
-3616 3489 l
-3458 3489 l
-3458 3489 m
-3617 3489 l
-3617 3490 l
-3458 3490 l
-3459 3490 m
-3618 3490 l
-3618 3491 l
-3459 3491 l
-3460 3491 m
-3619 3491 l
-3619 3492 l
-3460 3492 l
-3461 3492 m
-3620 3492 l
-3620 3493 l
-3461 3493 l
-3462 3493 m
-3621 3493 l
-3621 3494 l
-3462 3494 l
-3463 3494 m
-3621 3494 l
-3621 3495 l
-3463 3495 l
-3463 3495 m
-3622 3495 l
-3622 3496 l
-3463 3496 l
-3464 3496 m
-3623 3496 l
-3623 3497 l
-3464 3497 l
-3465 3497 m
-3624 3497 l
-3624 3498 l
-3465 3498 l
-3466 3498 m
-3625 3498 l
-3625 3499 l
-3466 3499 l
-3467 3499 m
-3626 3499 l
-3626 3500 l
-3467 3500 l
-3468 3500 m
-3626 3500 l
-3626 3501 l
-3468 3501 l
-3468 3501 m
-3627 3501 l
-3627 3502 l
-3468 3502 l
-3469 3502 m
-3628 3502 l
-3628 3503 l
-3469 3503 l
-3470 3503 m
-3629 3503 l
-3629 3504 l
-3470 3504 l
-3471 3504 m
-3630 3504 l
-3630 3505 l
-3471 3505 l
-3472 3505 m
-3630 3505 l
-3630 3506 l
-3472 3506 l
-3473 3506 m
-3631 3506 l
-3631 3507 l
-3473 3507 l
-3473 3507 m
-3632 3507 l
-3632 3508 l
-3473 3508 l
-3474 3508 m
-3633 3508 l
-3633 3509 l
-3474 3509 l
-3475 3509 m
-3634 3509 l
-3634 3510 l
-3475 3510 l
-3476 3510 m
-3635 3510 l
-3635 3511 l
-3476 3511 l
-3477 3511 m
-3635 3511 l
-3635 3512 l
-3477 3512 l
-3477 3512 m
-3636 3512 l
-3636 3513 l
-3477 3513 l
-3478 3513 m
-3637 3513 l
-3637 3514 l
-3478 3514 l
-3479 3514 m
-3638 3514 l
-3638 3515 l
-3479 3515 l
-3480 3515 m
-3639 3515 l
-3639 3516 l
-3480 3516 l
-3481 3516 m
-3640 3516 l
-3640 3517 l
-3481 3517 l
-3482 3517 m
-3640 3517 l
-3640 3518 l
-3482 3518 l
-3482 3518 m
-3641 3518 l
-3641 3519 l
-3482 3519 l
-3483 3519 m
-3642 3519 l
-3642 3520 l
-3483 3520 l
-3484 3520 m
-3643 3520 l
-3643 3521 l
-3484 3521 l
-3485 3521 m
-3644 3521 l
-3644 3522 l
-3485 3522 l
-3486 3522 m
-3644 3522 l
-3644 3523 l
-3486 3523 l
-3487 3523 m
-3645 3523 l
-3645 3524 l
-3487 3524 l
-3487 3524 m
-3646 3524 l
-3646 3525 l
-3487 3525 l
-3488 3525 m
-3647 3525 l
-3647 3526 l
-3488 3526 l
-3489 3526 m
-3648 3526 l
-3648 3527 l
-3489 3527 l
-3490 3527 m
-3649 3527 l
-3649 3528 l
-3490 3528 l
-3491 3528 m
-3649 3528 l
-3649 3529 l
-3491 3529 l
-3492 3529 m
-3650 3529 l
-3650 3530 l
-3492 3530 l
-3492 3530 m
-3651 3530 l
-3651 3531 l
-3492 3531 l
-3493 3531 m
-3652 3531 l
-3652 3532 l
-3493 3532 l
-3494 3532 m
-3653 3532 l
-3653 3533 l
-3494 3533 l
-3495 3533 m
-3654 3533 l
-3654 3534 l
-3495 3534 l
-3496 3534 m
-3654 3534 l
-3654 3535 l
-3496 3535 l
-3497 3535 m
-3655 3535 l
-3655 3536 l
-3497 3536 l
-3497 3536 m
-3656 3536 l
-3656 3537 l
-3497 3537 l
-3498 3537 m
-3657 3537 l
-3657 3538 l
-3498 3538 l
-3499 3538 m
-3658 3538 l
-3658 3539 l
-3499 3539 l
-3500 3539 m
-3658 3539 l
-3658 3540 l
-3500 3540 l
-3501 3540 m
-3659 3540 l
-3659 3541 l
-3501 3541 l
-3502 3541 m
-3657 3541 l
-3657 3542 l
-3502 3542 l
-3502 3542 m
-3656 3542 l
-3656 3543 l
-3502 3543 l
-3503 3543 m
-3655 3543 l
-3655 3544 l
-3503 3544 l
-3504 3544 m
-3654 3544 l
-3654 3545 l
-3504 3545 l
-3505 3545 m
-3652 3545 l
-3652 3546 l
-3505 3546 l
-3506 3546 m
-3651 3546 l
-3651 3547 l
-3506 3547 l
-3506 3547 m
-3650 3547 l
-3650 3548 l
-3506 3548 l
-3507 3548 m
-3649 3548 l
-3649 3549 l
-3507 3549 l
-3508 3549 m
-3648 3549 l
-3648 3550 l
-3508 3550 l
-3509 3550 m
-3646 3550 l
-3646 3551 l
-3509 3551 l
-3510 3551 m
-3645 3551 l
-3645 3552 l
-3510 3552 l
-3511 3552 m
-3644 3552 l
-3644 3553 l
-3511 3553 l
-3511 3553 m
-3643 3553 l
-3643 3554 l
-3511 3554 l
-3512 3554 m
-3642 3554 l
-3642 3555 l
-3512 3555 l
-3513 3555 m
-3640 3555 l
-3640 3556 l
-3513 3556 l
-3514 3556 m
-3639 3556 l
-3639 3557 l
-3514 3557 l
-3515 3557 m
-3638 3557 l
-3638 3558 l
-3515 3558 l
-3516 3558 m
-3637 3558 l
-3637 3559 l
-3516 3559 l
-3516 3559 m
-3636 3559 l
-3636 3560 l
-3516 3560 l
-3517 3560 m
-3634 3560 l
-3634 3561 l
-3517 3561 l
-3518 3561 m
-3633 3561 l
-3633 3562 l
-3518 3562 l
-3519 3562 m
-3632 3562 l
-3632 3563 l
-3519 3563 l
-3520 3563 m
-3631 3563 l
-3631 3564 l
-3520 3564 l
-3521 3564 m
-3630 3564 l
-3630 3565 l
-3521 3565 l
-3521 3565 m
-3628 3565 l
-3628 3566 l
-3521 3566 l
-3522 3566 m
-3627 3566 l
-3627 3567 l
-3522 3567 l
-3523 3567 m
-3626 3567 l
-3626 3568 l
-3523 3568 l
-3524 3568 m
-3625 3568 l
-3625 3569 l
-3524 3569 l
-3525 3569 m
-3623 3569 l
-3623 3570 l
-3525 3570 l
-3526 3570 m
-3622 3570 l
-3622 3571 l
-3526 3571 l
-3526 3571 m
-3621 3571 l
-3621 3572 l
-3526 3572 l
-3527 3572 m
-3620 3572 l
-3620 3573 l
-3527 3573 l
-3528 3573 m
-3619 3573 l
-3619 3574 l
-3528 3574 l
-3529 3574 m
-3617 3574 l
-3617 3575 l
-3529 3575 l
-3530 3575 m
-3616 3575 l
-3616 3576 l
-3530 3576 l
-3531 3576 m
-3615 3576 l
-3615 3577 l
-3531 3577 l
-3531 3577 m
-3614 3577 l
-3614 3578 l
-3531 3578 l
-3532 3578 m
-3613 3578 l
-3613 3579 l
-3532 3579 l
-3533 3579 m
-3611 3579 l
-3611 3580 l
-3533 3580 l
-3534 3580 m
-3610 3580 l
-3610 3581 l
-3534 3581 l
-3535 3581 m
-3609 3581 l
-3609 3582 l
-3535 3582 l
-3535 3582 m
-3608 3582 l
-3608 3583 l
-3535 3583 l
-3536 3583 m
-3607 3583 l
-3607 3584 l
-3536 3584 l
-3537 3584 m
-3605 3584 l
-3605 3585 l
-3537 3585 l
-3538 3585 m
-3604 3585 l
-3604 3586 l
-3538 3586 l
-3539 3586 m
-3603 3586 l
-3603 3587 l
-3539 3587 l
-3540 3587 m
-3602 3587 l
-3602 3588 l
-3540 3588 l
-3540 3588 m
-3601 3588 l
-3601 3589 l
-3540 3589 l
-3541 3589 m
-3599 3589 l
-3599 3590 l
-3541 3590 l
-3542 3590 m
-3598 3590 l
-3598 3591 l
-3542 3591 l
-3543 3591 m
-3597 3591 l
-3597 3592 l
-3543 3592 l
-3544 3592 m
-3596 3592 l
-3596 3593 l
-3544 3593 l
-3545 3593 m
-3594 3593 l
-3594 3594 l
-3545 3594 l
-3545 3594 m
-3593 3594 l
-3593 3595 l
-3545 3595 l
-3546 3595 m
-3592 3595 l
-3592 3596 l
-3546 3596 l
-3547 3596 m
-3591 3596 l
-3591 3597 l
-3547 3597 l
-3548 3597 m
-3590 3597 l
-3590 3598 l
-3548 3598 l
-3549 3598 m
-3588 3598 l
-3588 3599 l
-3549 3599 l
-3550 3599 m
-3587 3599 l
-3587 3600 l
-3550 3600 l
-3550 3600 m
-3586 3600 l
-3586 3601 l
-3550 3601 l
-3551 3601 m
-3585 3601 l
-3585 3602 l
-3551 3602 l
-3552 3602 m
-3584 3602 l
-3584 3603 l
-3552 3603 l
-3553 3603 m
-3582 3603 l
-3582 3604 l
-3553 3604 l
-3554 3604 m
-3581 3604 l
-3581 3605 l
-3554 3605 l
-3555 3605 m
-3580 3605 l
-3580 3606 l
-3555 3606 l
-3555 3606 m
-3579 3606 l
-3579 3607 l
-3555 3607 l
-3556 3607 m
-3578 3607 l
-3578 3608 l
-3556 3608 l
-3557 3608 m
-3576 3608 l
-3576 3609 l
-3557 3609 l
-3558 3609 m
-3575 3609 l
-3575 3610 l
-3558 3610 l
-3559 3610 m
-3574 3610 l
-3574 3611 l
-3559 3611 l
-3560 3611 m
-3573 3611 l
-3573 3612 l
-3560 3612 l
-3560 3612 m
-3572 3612 l
-3572 3613 l
-3560 3613 l
-3561 3613 m
-3570 3613 l
-3570 3614 l
-3561 3614 l
-3562 3614 m
-3569 3614 l
-3569 3615 l
-3562 3615 l
-3563 3615 m
-3568 3615 l
-3568 3616 l
-3563 3616 l
-3564 3616 m
-3567 3616 l
-3567 3617 l
-3564 3617 l
-Y
-3474.6 3317.5 m
-3381 3395 l
-3565 3617 l
-3658 3540 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3446 3368 m
-3494 3426 l
-S
-3518 3515 m
-3509 3517 l
-3498 3510 l
-3492 3503 l
-3488 3491 l
-3492 3476 l
-3505 3460 l
-3522 3447 l
-3537 3439 l
-3549 3440 l
-3560 3447 l
-3563 3451 l
-3567 3463 l
-3566 3475 l
-3559 3486 l
-3556 3488 l
-3544 3493 l
-3532 3492 l
-3521 3485 l
-3518 3482 l
-3513 3470 l
-3515 3458 l
-3522 3447 l
-S
-3543 3564 m
-3538 3552 l
-3542 3538 l
-3556 3521 l
-3566 3513 l
-3584 3503 l
-3599 3502 l
-3611 3509 l
-3616 3515 l
-3621 3527 l
-3616 3542 l
-3603 3558 l
-3593 3566 l
-3574 3576 l
-3559 3578 l
-3548 3571 l
-3543 3564 l
-S
-1 g
-3809 3828 m
-3815 3828 l
-3815 3829 l
-3809 3829 l
-3806 3829 m
-3816 3829 l
-3816 3830 l
-3806 3830 l
-3803 3830 m
-3816 3830 l
-3816 3831 l
-3803 3831 l
-3799 3831 m
-3816 3831 l
-3816 3832 l
-3799 3832 l
-3796 3832 m
-3816 3832 l
-3816 3833 l
-3796 3833 l
-3793 3833 m
-3817 3833 l
-3817 3834 l
-3793 3834 l
-3789 3834 m
-3817 3834 l
-3817 3835 l
-3789 3835 l
-3786 3835 m
-3817 3835 l
-3817 3836 l
-3786 3836 l
-3782 3836 m
-3818 3836 l
-3818 3837 l
-3782 3837 l
-3779 3837 m
-3818 3837 l
-3818 3838 l
-3779 3838 l
-3776 3838 m
-3818 3838 l
-3818 3839 l
-3776 3839 l
-3772 3839 m
-3819 3839 l
-3819 3840 l
-3772 3840 l
-3769 3840 m
-3819 3840 l
-3819 3841 l
-3769 3841 l
-3765 3841 m
-3819 3841 l
-3819 3842 l
-3765 3842 l
-3762 3842 m
-3819 3842 l
-3819 3843 l
-3762 3843 l
-3759 3843 m
-3820 3843 l
-3820 3844 l
-3759 3844 l
-3755 3844 m
-3820 3844 l
-3820 3845 l
-3755 3845 l
-3752 3845 m
-3820 3845 l
-3820 3846 l
-3752 3846 l
-3748 3846 m
-3821 3846 l
-3821 3847 l
-3748 3847 l
-3745 3847 m
-3821 3847 l
-3821 3848 l
-3745 3848 l
-3742 3848 m
-3821 3848 l
-3821 3849 l
-3742 3849 l
-3738 3849 m
-3822 3849 l
-3822 3850 l
-3738 3850 l
-3735 3850 m
-3822 3850 l
-3822 3851 l
-3735 3851 l
-3731 3851 m
-3822 3851 l
-3822 3852 l
-3731 3852 l
-3728 3852 m
-3822 3852 l
-3822 3853 l
-3728 3853 l
-3725 3853 m
-3823 3853 l
-3823 3854 l
-3725 3854 l
-3721 3854 m
-3823 3854 l
-3823 3855 l
-3721 3855 l
-3718 3855 m
-3823 3855 l
-3823 3856 l
-3718 3856 l
-3714 3856 m
-3824 3856 l
-3824 3857 l
-3714 3857 l
-3711 3857 m
-3824 3857 l
-3824 3858 l
-3711 3858 l
-3708 3858 m
-3824 3858 l
-3824 3859 l
-3708 3859 l
-3704 3859 m
-3825 3859 l
-3825 3860 l
-3704 3860 l
-3701 3860 m
-3825 3860 l
-3825 3861 l
-3701 3861 l
-3698 3861 m
-3825 3861 l
-3825 3862 l
-3698 3862 l
-3698 3862 m
-3825 3862 l
-3825 3863 l
-3698 3863 l
-3698 3863 m
-3826 3863 l
-3826 3866 l
-3698 3866 l
-3699 3866 m
-3827 3866 l
-3827 3869 l
-3699 3869 l
-3700 3869 m
-3828 3869 l
-3828 3873 l
-3700 3873 l
-3701 3873 m
-3829 3873 l
-3829 3876 l
-3701 3876 l
-3702 3876 m
-3830 3876 l
-3830 3879 l
-3702 3879 l
-3703 3879 m
-3831 3879 l
-3831 3883 l
-3703 3883 l
-3704 3883 m
-3832 3883 l
-3832 3886 l
-3704 3886 l
-3705 3886 m
-3833 3886 l
-3833 3889 l
-3705 3889 l
-3706 3889 m
-3834 3889 l
-3834 3893 l
-3706 3893 l
-3707 3893 m
-3835 3893 l
-3835 3896 l
-3707 3896 l
-3708 3896 m
-3836 3896 l
-3836 3899 l
-3708 3899 l
-3709 3899 m
-3837 3899 l
-3837 3903 l
-3709 3903 l
-3710 3903 m
-3838 3903 l
-3838 3906 l
-3710 3906 l
-3711 3906 m
-3839 3906 l
-3839 3909 l
-3711 3909 l
-3712 3909 m
-3840 3909 l
-3840 3913 l
-3712 3913 l
-3713 3913 m
-3841 3913 l
-3841 3916 l
-3713 3916 l
-3714 3916 m
-3842 3916 l
-3842 3919 l
-3714 3919 l
-3715 3919 m
-3842 3919 l
-3842 3920 l
-3715 3920 l
-3715 3920 m
-3843 3920 l
-3843 3923 l
-3715 3923 l
-3716 3923 m
-3844 3923 l
-3844 3926 l
-3716 3926 l
-3717 3926 m
-3845 3926 l
-3845 3929 l
-3717 3929 l
-3718 3929 m
-3845 3929 l
-3845 3930 l
-3718 3930 l
-3718 3930 m
-3846 3930 l
-3846 3933 l
-3718 3933 l
-3719 3933 m
-3847 3933 l
-3847 3936 l
-3719 3936 l
-3720 3936 m
-3848 3936 l
-3848 3939 l
-3720 3939 l
-3721 3939 m
-3848 3939 l
-3848 3940 l
-3721 3940 l
-3721 3940 m
-3849 3940 l
-3849 3943 l
-3721 3943 l
-3722 3943 m
-3850 3943 l
-3850 3946 l
-3722 3946 l
-3723 3946 m
-3851 3946 l
-3851 3949 l
-3723 3949 l
-3724 3949 m
-3851 3949 l
-3851 3950 l
-3724 3950 l
-3724 3950 m
-3852 3950 l
-3852 3953 l
-3724 3953 l
-3725 3953 m
-3853 3953 l
-3853 3956 l
-3725 3956 l
-3726 3956 m
-3854 3956 l
-3854 3959 l
-3726 3959 l
-3727 3959 m
-3854 3959 l
-3854 3960 l
-3727 3960 l
-3727 3960 m
-3855 3960 l
-3855 3963 l
-3727 3963 l
-3728 3963 m
-3856 3963 l
-3856 3966 l
-3728 3966 l
-3729 3966 m
-3857 3966 l
-3857 3969 l
-3729 3969 l
-3730 3969 m
-3857 3969 l
-3857 3970 l
-3730 3970 l
-3730 3970 m
-3858 3970 l
-3858 3973 l
-3730 3973 l
-3731 3973 m
-3859 3973 l
-3859 3976 l
-3731 3976 l
-3732 3976 m
-3860 3976 l
-3860 3979 l
-3732 3979 l
-3733 3979 m
-3860 3979 l
-3860 3980 l
-3733 3980 l
-3733 3980 m
-3861 3980 l
-3861 3983 l
-3733 3983 l
-3734 3983 m
-3862 3983 l
-3862 3986 l
-3734 3986 l
-3735 3986 m
-3863 3986 l
-3863 3989 l
-3735 3989 l
-3736 3989 m
-3863 3989 l
-3863 3990 l
-3736 3990 l
-3736 3990 m
-3864 3990 l
-3864 3993 l
-3736 3993 l
-3737 3993 m
-3865 3993 l
-3865 3996 l
-3737 3996 l
-3738 3996 m
-3866 3996 l
-3866 3999 l
-3738 3999 l
-3739 3999 m
-3866 3999 l
-3866 4000 l
-3739 4000 l
-3739 4000 m
-3867 4000 l
-3867 4003 l
-3739 4003 l
-3740 4003 m
-3868 4003 l
-3868 4006 l
-3740 4006 l
-3741 4006 m
-3869 4006 l
-3869 4009 l
-3741 4009 l
-3742 4009 m
-3869 4009 l
-3869 4010 l
-3742 4010 l
-3742 4010 m
-3870 4010 l
-3870 4013 l
-3742 4013 l
-3743 4013 m
-3871 4013 l
-3871 4016 l
-3743 4016 l
-3744 4016 m
-3871 4016 l
-3871 4017 l
-3744 4017 l
-3744 4017 m
-3872 4017 l
-3872 4019 l
-3744 4019 l
-3745 4019 m
-3872 4019 l
-3872 4020 l
-3745 4020 l
-3745 4020 m
-3873 4020 l
-3873 4023 l
-3745 4023 l
-3746 4023 m
-3874 4023 l
-3874 4026 l
-3746 4026 l
-3747 4026 m
-3874 4026 l
-3874 4027 l
-3747 4027 l
-3747 4027 m
-3875 4027 l
-3875 4029 l
-3747 4029 l
-3748 4029 m
-3875 4029 l
-3875 4030 l
-3748 4030 l
-3748 4030 m
-3876 4030 l
-3876 4033 l
-3748 4033 l
-3749 4033 m
-3877 4033 l
-3877 4036 l
-3749 4036 l
-3750 4036 m
-3877 4036 l
-3877 4037 l
-3750 4037 l
-3750 4037 m
-3878 4037 l
-3878 4039 l
-3750 4039 l
-3751 4039 m
-3878 4039 l
-3878 4040 l
-3751 4040 l
-3751 4040 m
-3879 4040 l
-3879 4043 l
-3751 4043 l
-3752 4043 m
-3880 4043 l
-3880 4046 l
-3752 4046 l
-3753 4046 m
-3880 4046 l
-3880 4047 l
-3753 4047 l
-3753 4047 m
-3881 4047 l
-3881 4049 l
-3753 4049 l
-3754 4049 m
-3881 4049 l
-3881 4050 l
-3754 4050 l
-3754 4050 m
-3882 4050 l
-3882 4053 l
-3754 4053 l
-3755 4053 m
-3883 4053 l
-3883 4056 l
-3755 4056 l
-3756 4056 m
-3883 4056 l
-3883 4057 l
-3756 4057 l
-3756 4057 m
-3884 4057 l
-3884 4059 l
-3756 4059 l
-3757 4059 m
-3884 4059 l
-3884 4060 l
-3757 4060 l
-3757 4060 m
-3885 4060 l
-3885 4063 l
-3757 4063 l
-3758 4063 m
-3886 4063 l
-3886 4066 l
-3758 4066 l
-3759 4066 m
-3886 4066 l
-3886 4067 l
-3759 4067 l
-3759 4067 m
-3887 4067 l
-3887 4069 l
-3759 4069 l
-3760 4069 m
-3887 4069 l
-3887 4070 l
-3760 4070 l
-3760 4070 m
-3888 4070 l
-3888 4073 l
-3760 4073 l
-3761 4073 m
-3889 4073 l
-3889 4076 l
-3761 4076 l
-3762 4076 m
-3889 4076 l
-3889 4077 l
-3762 4077 l
-3762 4077 m
-3890 4077 l
-3890 4079 l
-3762 4079 l
-3763 4079 m
-3890 4079 l
-3890 4080 l
-3763 4080 l
-3763 4080 m
-3891 4080 l
-3891 4083 l
-3763 4083 l
-3764 4083 m
-3892 4083 l
-3892 4086 l
-3764 4086 l
-3765 4086 m
-3892 4086 l
-3892 4087 l
-3765 4087 l
-3765 4087 m
-3893 4087 l
-3893 4089 l
-3765 4089 l
-3766 4089 m
-3893 4089 l
-3893 4090 l
-3766 4090 l
-3766 4090 m
-3894 4090 l
-3894 4093 l
-3766 4093 l
-3767 4093 m
-3895 4093 l
-3895 4096 l
-3767 4096 l
-3768 4096 m
-3895 4096 l
-3895 4097 l
-3768 4097 l
-3768 4097 m
-3896 4097 l
-3896 4099 l
-3768 4099 l
-3769 4099 m
-3896 4099 l
-3896 4100 l
-3769 4100 l
-3769 4100 m
-3897 4100 l
-3897 4103 l
-3769 4103 l
-3770 4103 m
-3897 4103 l
-3897 4104 l
-3770 4104 l
-3770 4104 m
-3897 4104 l
-3897 4105 l
-3770 4105 l
-3770 4105 m
-3894 4105 l
-3894 4106 l
-3770 4106 l
-3771 4106 m
-3891 4106 l
-3891 4107 l
-3771 4107 l
-3771 4107 m
-3888 4107 l
-3888 4108 l
-3771 4108 l
-3771 4108 m
-3884 4108 l
-3884 4109 l
-3771 4109 l
-3772 4109 m
-3881 4109 l
-3881 4110 l
-3772 4110 l
-3772 4110 m
-3878 4110 l
-3878 4111 l
-3772 4111 l
-3772 4111 m
-3874 4111 l
-3874 4112 l
-3772 4112 l
-3772 4112 m
-3871 4112 l
-3871 4113 l
-3772 4113 l
-3773 4113 m
-3868 4113 l
-3868 4114 l
-3773 4114 l
-3773 4114 m
-3864 4114 l
-3864 4115 l
-3773 4115 l
-3773 4115 m
-3861 4115 l
-3861 4116 l
-3773 4116 l
-3774 4116 m
-3858 4116 l
-3858 4117 l
-3774 4117 l
-3774 4117 m
-3854 4117 l
-3854 4118 l
-3774 4118 l
-3774 4118 m
-3851 4118 l
-3851 4119 l
-3774 4119 l
-3775 4119 m
-3848 4119 l
-3848 4120 l
-3775 4120 l
-3775 4120 m
-3844 4120 l
-3844 4121 l
-3775 4121 l
-3775 4121 m
-3841 4121 l
-3841 4122 l
-3775 4122 l
-3775 4122 m
-3838 4122 l
-3838 4123 l
-3775 4123 l
-3776 4123 m
-3835 4123 l
-3835 4124 l
-3776 4124 l
-3776 4124 m
-3831 4124 l
-3831 4125 l
-3776 4125 l
-3776 4125 m
-3828 4125 l
-3828 4126 l
-3776 4126 l
-3777 4126 m
-3825 4126 l
-3825 4127 l
-3777 4127 l
-3777 4127 m
-3821 4127 l
-3821 4128 l
-3777 4128 l
-3777 4128 m
-3818 4128 l
-3818 4129 l
-3777 4129 l
-3778 4129 m
-3815 4129 l
-3815 4130 l
-3778 4130 l
-3778 4130 m
-3811 4130 l
-3811 4131 l
-3778 4131 l
-3778 4131 m
-3808 4131 l
-3808 4132 l
-3778 4132 l
-3778 4132 m
-3805 4132 l
-3805 4133 l
-3778 4133 l
-3779 4133 m
-3801 4133 l
-3801 4134 l
-3779 4134 l
-3779 4134 m
-3798 4134 l
-3798 4135 l
-3779 4135 l
-3779 4135 m
-3795 4135 l
-3795 4136 l
-3779 4136 l
-3780 4136 m
-3791 4136 l
-3791 4137 l
-3780 4137 l
-3780 4137 m
-3788 4137 l
-3788 4138 l
-3780 4138 l
-3780 4138 m
-3785 4138 l
-3785 4139 l
-3780 4139 l
-Y
-3814.4 3827.7 m
-3698 3862 l
-3781 4139 l
-3897 4104 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3768 3863 m
-3790 3935 l
-S
-3753 3986 m
-3766 4030 l
-3791 3996 l
-3794 4008 l
-3801 4015 l
-3806 4018 l
-3819 4018 l
-3827 4016 l
-3838 4008 l
-3843 3998 l
-3844 3985 l
-3840 3973 l
-3833 3962 l
-3827 3959 l
-3818 3957 l
-S
-3781 4082 m
-3782 4069 l
-3791 4057 l
-3810 4047 l
-3822 4043 l
-3843 4041 l
-3858 4046 l
-3865 4057 l
-3868 4065 l
-3867 4078 l
-3858 4089 l
-3839 4099 l
-3827 4103 l
-3806 4105 l
-3791 4101 l
-3784 4090 l
-3781 4082 l
-S
-1 g
-3582 5053 m
-3585 5053 l
-3585 5054 l
-3582 5054 l
-3581 5054 m
-3586 5054 l
-3586 5055 l
-3581 5055 l
-3580 5055 m
-3587 5055 l
-3587 5056 l
-3580 5056 l
-3579 5056 m
-3588 5056 l
-3588 5057 l
-3579 5057 l
-3578 5057 m
-3590 5057 l
-3590 5058 l
-3578 5058 l
-3578 5058 m
-3591 5058 l
-3591 5059 l
-3578 5059 l
-3577 5059 m
-3592 5059 l
-3592 5060 l
-3577 5060 l
-3576 5060 m
-3593 5060 l
-3593 5061 l
-3576 5061 l
-3575 5061 m
-3594 5061 l
-3594 5062 l
-3575 5062 l
-3574 5062 m
-3596 5062 l
-3596 5063 l
-3574 5063 l
-3573 5063 m
-3597 5063 l
-3597 5064 l
-3573 5064 l
-3573 5064 m
-3598 5064 l
-3598 5065 l
-3573 5065 l
-3572 5065 m
-3599 5065 l
-3599 5066 l
-3572 5066 l
-3571 5066 m
-3600 5066 l
-3600 5067 l
-3571 5067 l
-3570 5067 m
-3602 5067 l
-3602 5068 l
-3570 5068 l
-3569 5068 m
-3603 5068 l
-3603 5069 l
-3569 5069 l
-3568 5069 m
-3604 5069 l
-3604 5070 l
-3568 5070 l
-3568 5070 m
-3605 5070 l
-3605 5071 l
-3568 5071 l
-3567 5071 m
-3607 5071 l
-3607 5072 l
-3567 5072 l
-3566 5072 m
-3608 5072 l
-3608 5073 l
-3566 5073 l
-3565 5073 m
-3609 5073 l
-3609 5074 l
-3565 5074 l
-3564 5074 m
-3610 5074 l
-3610 5075 l
-3564 5075 l
-3563 5075 m
-3611 5075 l
-3611 5076 l
-3563 5076 l
-3563 5076 m
-3613 5076 l
-3613 5077 l
-3563 5077 l
-3562 5077 m
-3614 5077 l
-3614 5078 l
-3562 5078 l
-3561 5078 m
-3615 5078 l
-3615 5079 l
-3561 5079 l
-3560 5079 m
-3616 5079 l
-3616 5080 l
-3560 5080 l
-3559 5080 m
-3617 5080 l
-3617 5081 l
-3559 5081 l
-3558 5081 m
-3619 5081 l
-3619 5082 l
-3558 5082 l
-3558 5082 m
-3620 5082 l
-3620 5083 l
-3558 5083 l
-3557 5083 m
-3621 5083 l
-3621 5084 l
-3557 5084 l
-3556 5084 m
-3622 5084 l
-3622 5085 l
-3556 5085 l
-3555 5085 m
-3624 5085 l
-3624 5086 l
-3555 5086 l
-3554 5086 m
-3625 5086 l
-3625 5087 l
-3554 5087 l
-3553 5087 m
-3626 5087 l
-3626 5088 l
-3553 5088 l
-3553 5088 m
-3627 5088 l
-3627 5089 l
-3553 5089 l
-3552 5089 m
-3628 5089 l
-3628 5090 l
-3552 5090 l
-3551 5090 m
-3630 5090 l
-3630 5091 l
-3551 5091 l
-3550 5091 m
-3631 5091 l
-3631 5092 l
-3550 5092 l
-3549 5092 m
-3632 5092 l
-3632 5093 l
-3549 5093 l
-3548 5093 m
-3633 5093 l
-3633 5094 l
-3548 5094 l
-3548 5094 m
-3634 5094 l
-3634 5095 l
-3548 5095 l
-3547 5095 m
-3636 5095 l
-3636 5096 l
-3547 5096 l
-3546 5096 m
-3637 5096 l
-3637 5097 l
-3546 5097 l
-3545 5097 m
-3638 5097 l
-3638 5098 l
-3545 5098 l
-3544 5098 m
-3639 5098 l
-3639 5099 l
-3544 5099 l
-3544 5099 m
-3641 5099 l
-3641 5100 l
-3544 5100 l
-3543 5100 m
-3642 5100 l
-3642 5101 l
-3543 5101 l
-3542 5101 m
-3643 5101 l
-3643 5102 l
-3542 5102 l
-3541 5102 m
-3644 5102 l
-3644 5103 l
-3541 5103 l
-3540 5103 m
-3645 5103 l
-3645 5104 l
-3540 5104 l
-3539 5104 m
-3647 5104 l
-3647 5105 l
-3539 5105 l
-3539 5105 m
-3648 5105 l
-3648 5106 l
-3539 5106 l
-3538 5106 m
-3649 5106 l
-3649 5107 l
-3538 5107 l
-3537 5107 m
-3650 5107 l
-3650 5108 l
-3537 5108 l
-3536 5108 m
-3651 5108 l
-3651 5109 l
-3536 5109 l
-3535 5109 m
-3653 5109 l
-3653 5110 l
-3535 5110 l
-3534 5110 m
-3654 5110 l
-3654 5111 l
-3534 5111 l
-3534 5111 m
-3655 5111 l
-3655 5112 l
-3534 5112 l
-3533 5112 m
-3656 5112 l
-3656 5113 l
-3533 5113 l
-3532 5113 m
-3658 5113 l
-3658 5114 l
-3532 5114 l
-3531 5114 m
-3659 5114 l
-3659 5115 l
-3531 5115 l
-3530 5115 m
-3660 5115 l
-3660 5116 l
-3530 5116 l
-3529 5116 m
-3661 5116 l
-3661 5117 l
-3529 5117 l
-3529 5117 m
-3662 5117 l
-3662 5118 l
-3529 5118 l
-3528 5118 m
-3664 5118 l
-3664 5119 l
-3528 5119 l
-3527 5119 m
-3665 5119 l
-3665 5120 l
-3527 5120 l
-3526 5120 m
-3666 5120 l
-3666 5121 l
-3526 5121 l
-3525 5121 m
-3667 5121 l
-3667 5122 l
-3525 5122 l
-3524 5122 m
-3668 5122 l
-3668 5123 l
-3524 5123 l
-3524 5123 m
-3670 5123 l
-3670 5124 l
-3524 5124 l
-3523 5124 m
-3671 5124 l
-3671 5125 l
-3523 5125 l
-3522 5125 m
-3672 5125 l
-3672 5126 l
-3522 5126 l
-3521 5126 m
-3673 5126 l
-3673 5127 l
-3521 5127 l
-3520 5127 m
-3675 5127 l
-3675 5128 l
-3520 5128 l
-3519 5128 m
-3676 5128 l
-3676 5129 l
-3519 5129 l
-3519 5129 m
-3677 5129 l
-3677 5130 l
-3519 5130 l
-3518 5130 m
-3677 5130 l
-3677 5131 l
-3518 5131 l
-3517 5131 m
-3676 5131 l
-3676 5132 l
-3517 5132 l
-3516 5132 m
-3676 5132 l
-3676 5133 l
-3516 5133 l
-3515 5133 m
-3675 5133 l
-3675 5134 l
-3515 5134 l
-3514 5134 m
-3674 5134 l
-3674 5135 l
-3514 5135 l
-3514 5135 m
-3673 5135 l
-3673 5136 l
-3514 5136 l
-3513 5136 m
-3672 5136 l
-3672 5137 l
-3513 5137 l
-3512 5137 m
-3671 5137 l
-3671 5138 l
-3512 5138 l
-3511 5138 m
-3671 5138 l
-3671 5139 l
-3511 5139 l
-3510 5139 m
-3670 5139 l
-3670 5140 l
-3510 5140 l
-3509 5140 m
-3669 5140 l
-3669 5141 l
-3509 5141 l
-3509 5141 m
-3668 5141 l
-3668 5142 l
-3509 5142 l
-3508 5142 m
-3667 5142 l
-3667 5143 l
-3508 5143 l
-3507 5143 m
-3666 5143 l
-3666 5144 l
-3507 5144 l
-3506 5144 m
-3666 5144 l
-3666 5145 l
-3506 5145 l
-3505 5145 m
-3665 5145 l
-3665 5146 l
-3505 5146 l
-3505 5146 m
-3664 5146 l
-3664 5147 l
-3505 5147 l
-3504 5147 m
-3663 5147 l
-3663 5148 l
-3504 5148 l
-3503 5148 m
-3662 5148 l
-3662 5149 l
-3503 5149 l
-3502 5149 m
-3661 5149 l
-3661 5150 l
-3502 5150 l
-3501 5150 m
-3661 5150 l
-3661 5151 l
-3501 5151 l
-3500 5151 m
-3660 5151 l
-3660 5152 l
-3500 5152 l
-3500 5152 m
-3659 5152 l
-3659 5153 l
-3500 5153 l
-3499 5153 m
-3658 5153 l
-3658 5154 l
-3499 5154 l
-3498 5154 m
-3657 5154 l
-3657 5155 l
-3498 5155 l
-3497 5155 m
-3656 5155 l
-3656 5156 l
-3497 5156 l
-3496 5156 m
-3656 5156 l
-3656 5157 l
-3496 5157 l
-3495 5157 m
-3655 5157 l
-3655 5158 l
-3495 5158 l
-3495 5158 m
-3654 5158 l
-3654 5159 l
-3495 5159 l
-3494 5159 m
-3653 5159 l
-3653 5160 l
-3494 5160 l
-3493 5160 m
-3652 5160 l
-3652 5161 l
-3493 5161 l
-3492 5161 m
-3651 5161 l
-3651 5162 l
-3492 5162 l
-3491 5162 m
-3651 5162 l
-3651 5163 l
-3491 5163 l
-3490 5163 m
-3650 5163 l
-3650 5164 l
-3490 5164 l
-3490 5164 m
-3649 5164 l
-3649 5165 l
-3490 5165 l
-3489 5165 m
-3648 5165 l
-3648 5166 l
-3489 5166 l
-3488 5166 m
-3647 5166 l
-3647 5167 l
-3488 5167 l
-3487 5167 m
-3647 5167 l
-3647 5168 l
-3487 5168 l
-3486 5168 m
-3646 5168 l
-3646 5169 l
-3486 5169 l
-3485 5169 m
-3645 5169 l
-3645 5170 l
-3485 5170 l
-3485 5170 m
-3644 5170 l
-3644 5171 l
-3485 5171 l
-3484 5171 m
-3643 5171 l
-3643 5172 l
-3484 5172 l
-3483 5172 m
-3642 5172 l
-3642 5173 l
-3483 5173 l
-3482 5173 m
-3642 5173 l
-3642 5174 l
-3482 5174 l
-3481 5174 m
-3641 5174 l
-3641 5175 l
-3481 5175 l
-3480 5175 m
-3640 5175 l
-3640 5176 l
-3480 5176 l
-3480 5176 m
-3639 5176 l
-3639 5177 l
-3480 5177 l
-3479 5177 m
-3638 5177 l
-3638 5178 l
-3479 5178 l
-3478 5178 m
-3637 5178 l
-3637 5179 l
-3478 5179 l
-3477 5179 m
-3637 5179 l
-3637 5180 l
-3477 5180 l
-3476 5180 m
-3636 5180 l
-3636 5181 l
-3476 5181 l
-3475 5181 m
-3635 5181 l
-3635 5182 l
-3475 5182 l
-3475 5182 m
-3634 5182 l
-3634 5183 l
-3475 5183 l
-3474 5183 m
-3633 5183 l
-3633 5184 l
-3474 5184 l
-3473 5184 m
-3632 5184 l
-3632 5185 l
-3473 5185 l
-3472 5185 m
-3632 5185 l
-3632 5186 l
-3472 5186 l
-3471 5186 m
-3631 5186 l
-3631 5187 l
-3471 5187 l
-3470 5187 m
-3630 5187 l
-3630 5188 l
-3470 5188 l
-3470 5188 m
-3629 5188 l
-3629 5189 l
-3470 5189 l
-3469 5189 m
-3628 5189 l
-3628 5190 l
-3469 5190 l
-3468 5190 m
-3627 5190 l
-3627 5191 l
-3468 5191 l
-3467 5191 m
-3627 5191 l
-3627 5192 l
-3467 5192 l
-3466 5192 m
-3626 5192 l
-3626 5193 l
-3466 5193 l
-3466 5193 m
-3625 5193 l
-3625 5194 l
-3466 5194 l
-3466 5194 m
-3624 5194 l
-3624 5195 l
-3466 5195 l
-3467 5195 m
-3623 5195 l
-3623 5196 l
-3467 5196 l
-3468 5196 m
-3622 5196 l
-3622 5197 l
-3468 5197 l
-3469 5197 m
-3622 5197 l
-3622 5198 l
-3469 5198 l
-3470 5198 m
-3621 5198 l
-3621 5199 l
-3470 5199 l
-3471 5199 m
-3620 5199 l
-3620 5200 l
-3471 5200 l
-3473 5200 m
-3619 5200 l
-3619 5201 l
-3473 5201 l
-3474 5201 m
-3618 5201 l
-3618 5202 l
-3474 5202 l
-3475 5202 m
-3618 5202 l
-3618 5203 l
-3475 5203 l
-3476 5203 m
-3617 5203 l
-3617 5204 l
-3476 5204 l
-3477 5204 m
-3616 5204 l
-3616 5205 l
-3477 5205 l
-3479 5205 m
-3615 5205 l
-3615 5206 l
-3479 5206 l
-3480 5206 m
-3614 5206 l
-3614 5207 l
-3480 5207 l
-3481 5207 m
-3613 5207 l
-3613 5208 l
-3481 5208 l
-3482 5208 m
-3613 5208 l
-3613 5209 l
-3482 5209 l
-3483 5209 m
-3612 5209 l
-3612 5210 l
-3483 5210 l
-3485 5210 m
-3611 5210 l
-3611 5211 l
-3485 5211 l
-3486 5211 m
-3610 5211 l
-3610 5212 l
-3486 5212 l
-3487 5212 m
-3609 5212 l
-3609 5213 l
-3487 5213 l
-3488 5213 m
-3608 5213 l
-3608 5214 l
-3488 5214 l
-3489 5214 m
-3608 5214 l
-3608 5215 l
-3489 5215 l
-3491 5215 m
-3607 5215 l
-3607 5216 l
-3491 5216 l
-3492 5216 m
-3606 5216 l
-3606 5217 l
-3492 5217 l
-3493 5217 m
-3605 5217 l
-3605 5218 l
-3493 5218 l
-3494 5218 m
-3604 5218 l
-3604 5219 l
-3494 5219 l
-3495 5219 m
-3603 5219 l
-3603 5220 l
-3495 5220 l
-3496 5220 m
-3603 5220 l
-3603 5221 l
-3496 5221 l
-3498 5221 m
-3602 5221 l
-3602 5222 l
-3498 5222 l
-3499 5222 m
-3601 5222 l
-3601 5223 l
-3499 5223 l
-3500 5223 m
-3600 5223 l
-3600 5224 l
-3500 5224 l
-3501 5224 m
-3599 5224 l
-3599 5225 l
-3501 5225 l
-3502 5225 m
-3598 5225 l
-3598 5226 l
-3502 5226 l
-3504 5226 m
-3598 5226 l
-3598 5227 l
-3504 5227 l
-3505 5227 m
-3597 5227 l
-3597 5228 l
-3505 5228 l
-3506 5228 m
-3596 5228 l
-3596 5229 l
-3506 5229 l
-3507 5229 m
-3595 5229 l
-3595 5230 l
-3507 5230 l
-3508 5230 m
-3594 5230 l
-3594 5231 l
-3508 5231 l
-3510 5231 m
-3593 5231 l
-3593 5232 l
-3510 5232 l
-3511 5232 m
-3593 5232 l
-3593 5233 l
-3511 5233 l
-3512 5233 m
-3592 5233 l
-3592 5234 l
-3512 5234 l
-3513 5234 m
-3591 5234 l
-3591 5235 l
-3513 5235 l
-3514 5235 m
-3590 5235 l
-3590 5236 l
-3514 5236 l
-3516 5236 m
-3589 5236 l
-3589 5237 l
-3516 5237 l
-3517 5237 m
-3589 5237 l
-3589 5238 l
-3517 5238 l
-3518 5238 m
-3588 5238 l
-3588 5239 l
-3518 5239 l
-3519 5239 m
-3587 5239 l
-3587 5240 l
-3519 5240 l
-3520 5240 m
-3586 5240 l
-3586 5241 l
-3520 5241 l
-3522 5241 m
-3585 5241 l
-3585 5242 l
-3522 5242 l
-3523 5242 m
-3584 5242 l
-3584 5243 l
-3523 5243 l
-3524 5243 m
-3584 5243 l
-3584 5244 l
-3524 5244 l
-3525 5244 m
-3583 5244 l
-3583 5245 l
-3525 5245 l
-3526 5245 m
-3582 5245 l
-3582 5246 l
-3526 5246 l
-3527 5246 m
-3581 5246 l
-3581 5247 l
-3527 5247 l
-3529 5247 m
-3580 5247 l
-3580 5248 l
-3529 5248 l
-3530 5248 m
-3579 5248 l
-3579 5249 l
-3530 5249 l
-3531 5249 m
-3579 5249 l
-3579 5250 l
-3531 5250 l
-3532 5250 m
-3578 5250 l
-3578 5251 l
-3532 5251 l
-3533 5251 m
-3577 5251 l
-3577 5252 l
-3533 5252 l
-3535 5252 m
-3576 5252 l
-3576 5253 l
-3535 5253 l
-3536 5253 m
-3575 5253 l
-3575 5254 l
-3536 5254 l
-3537 5254 m
-3574 5254 l
-3574 5255 l
-3537 5255 l
-3538 5255 m
-3574 5255 l
-3574 5256 l
-3538 5256 l
-3539 5256 m
-3573 5256 l
-3573 5257 l
-3539 5257 l
-3541 5257 m
-3572 5257 l
-3572 5258 l
-3541 5258 l
-3542 5258 m
-3571 5258 l
-3571 5259 l
-3542 5259 l
-3543 5259 m
-3570 5259 l
-3570 5260 l
-3543 5260 l
-3544 5260 m
-3569 5260 l
-3569 5261 l
-3544 5261 l
-3545 5261 m
-3569 5261 l
-3569 5262 l
-3545 5262 l
-3547 5262 m
-3568 5262 l
-3568 5263 l
-3547 5263 l
-3548 5263 m
-3567 5263 l
-3567 5264 l
-3548 5264 l
-3549 5264 m
-3566 5264 l
-3566 5265 l
-3549 5265 l
-3550 5265 m
-3565 5265 l
-3565 5266 l
-3550 5266 l
-3551 5266 m
-3564 5266 l
-3564 5267 l
-3551 5267 l
-3553 5267 m
-3564 5267 l
-3564 5268 l
-3553 5268 l
-3554 5268 m
-3563 5268 l
-3563 5269 l
-3554 5269 l
-3555 5269 m
-3562 5269 l
-3562 5270 l
-3555 5270 l
-3556 5270 m
-3561 5270 l
-3561 5271 l
-3556 5271 l
-3557 5271 m
-3560 5271 l
-3560 5272 l
-3557 5272 l
-Y
-3676.6 5130.1 m
-3583 5053 l
-3466 5194 l
-3559 5272 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3578 5086 m
-3548 5121 l
-3590 5123 l
-3582 5133 l
-3580 5142 l
-3580 5148 l
-3587 5159 l
-3594 5165 l
-3606 5169 l
-3618 5168 l
-3629 5161 l
-3637 5152 l
-3642 5139 l
-3641 5133 l
-3638 5125 l
-S
-3514 5163 m
-3525 5156 l
-3540 5158 l
-3559 5168 l
-3568 5176 l
-3582 5192 l
-3586 5207 l
-3581 5219 l
-3576 5226 l
-3565 5233 l
-3550 5231 l
-3531 5221 l
-3521 5213 l
-3508 5196 l
-3504 5182 l
-3508 5170 l
-3514 5163 l
-S
-1 g
-2996 5490 m
-3001 5490 l
-3001 5491 l
-2996 5491 l
-2992 5491 m
-3001 5491 l
-3001 5492 l
-2992 5492 l
-2989 5492 m
-3001 5492 l
-3001 5493 l
-2989 5493 l
-2985 5493 m
-3002 5493 l
-3002 5494 l
-2985 5494 l
-2982 5494 m
-3002 5494 l
-3002 5495 l
-2982 5495 l
-2978 5495 m
-3002 5495 l
-3002 5496 l
-2978 5496 l
-2975 5496 m
-3002 5496 l
-3002 5497 l
-2975 5497 l
-2971 5497 m
-3003 5497 l
-3003 5498 l
-2971 5498 l
-2968 5498 m
-3003 5498 l
-3003 5499 l
-2968 5499 l
-2964 5499 m
-3003 5499 l
-3003 5500 l
-2964 5500 l
-2961 5500 m
-3004 5500 l
-3004 5501 l
-2961 5501 l
-2957 5501 m
-3004 5501 l
-3004 5502 l
-2957 5502 l
-2954 5502 m
-3004 5502 l
-3004 5503 l
-2954 5503 l
-2950 5503 m
-3004 5503 l
-3004 5504 l
-2950 5504 l
-2947 5504 m
-3005 5504 l
-3005 5505 l
-2947 5505 l
-2943 5505 m
-3005 5505 l
-3005 5506 l
-2943 5506 l
-2939 5506 m
-3005 5506 l
-3005 5507 l
-2939 5507 l
-2936 5507 m
-3006 5507 l
-3006 5508 l
-2936 5508 l
-2932 5508 m
-3006 5508 l
-3006 5509 l
-2932 5509 l
-2929 5509 m
-3006 5509 l
-3006 5510 l
-2929 5510 l
-2925 5510 m
-3006 5510 l
-3006 5511 l
-2925 5511 l
-2922 5511 m
-3007 5511 l
-3007 5512 l
-2922 5512 l
-2918 5512 m
-3007 5512 l
-3007 5513 l
-2918 5513 l
-2915 5513 m
-3007 5513 l
-3007 5514 l
-2915 5514 l
-2911 5514 m
-3008 5514 l
-3008 5515 l
-2911 5515 l
-2908 5515 m
-3008 5515 l
-3008 5516 l
-2908 5516 l
-2904 5516 m
-3008 5516 l
-3008 5517 l
-2904 5517 l
-2901 5517 m
-3008 5517 l
-3008 5518 l
-2901 5518 l
-2897 5518 m
-3009 5518 l
-3009 5519 l
-2897 5519 l
-2894 5519 m
-3009 5519 l
-3009 5520 l
-2894 5520 l
-2890 5520 m
-3009 5520 l
-3009 5521 l
-2890 5521 l
-2887 5521 m
-3010 5521 l
-3010 5522 l
-2887 5522 l
-2883 5522 m
-3010 5522 l
-3010 5523 l
-2883 5523 l
-2879 5523 m
-3010 5523 l
-3010 5524 l
-2879 5524 l
-2876 5524 m
-3010 5524 l
-3010 5525 l
-2876 5525 l
-2872 5525 m
-3011 5525 l
-3011 5526 l
-2872 5526 l
-2869 5526 m
-3011 5526 l
-3011 5527 l
-2869 5527 l
-2865 5527 m
-3011 5527 l
-3011 5528 l
-2865 5528 l
-2862 5528 m
-3012 5528 l
-3012 5529 l
-2862 5529 l
-2858 5529 m
-3012 5529 l
-3012 5530 l
-2858 5530 l
-2855 5530 m
-3012 5530 l
-3012 5531 l
-2855 5531 l
-2851 5531 m
-3012 5531 l
-3012 5532 l
-2851 5532 l
-2848 5532 m
-3013 5532 l
-3013 5533 l
-2848 5533 l
-2844 5533 m
-3013 5533 l
-3013 5534 l
-2844 5534 l
-2841 5534 m
-3013 5534 l
-3013 5535 l
-2841 5535 l
-2837 5535 m
-3014 5535 l
-3014 5536 l
-2837 5536 l
-2834 5536 m
-3014 5536 l
-3014 5537 l
-2834 5537 l
-2830 5537 m
-3014 5537 l
-3014 5538 l
-2830 5538 l
-2827 5538 m
-3014 5538 l
-3014 5539 l
-2827 5539 l
-2827 5539 m
-3015 5539 l
-3015 5540 l
-2827 5540 l
-2827 5540 m
-3015 5540 l
-3015 5542 l
-2827 5542 l
-2827 5542 m
-3016 5542 l
-3016 5543 l
-2827 5543 l
-2828 5543 m
-3016 5543 l
-3016 5546 l
-2828 5546 l
-2828 5546 m
-3017 5546 l
-3017 5547 l
-2828 5547 l
-2829 5547 m
-3017 5547 l
-3017 5549 l
-2829 5549 l
-2829 5549 m
-3018 5549 l
-3018 5550 l
-2829 5550 l
-2830 5550 m
-3018 5550 l
-3018 5553 l
-2830 5553 l
-2830 5553 m
-3019 5553 l
-3019 5554 l
-2830 5554 l
-2831 5554 m
-3019 5554 l
-3019 5556 l
-2831 5556 l
-2831 5556 m
-3020 5556 l
-3020 5557 l
-2831 5557 l
-2832 5557 m
-3020 5557 l
-3020 5560 l
-2832 5560 l
-2832 5560 m
-3021 5560 l
-3021 5561 l
-2832 5561 l
-2833 5561 m
-3021 5561 l
-3021 5563 l
-2833 5563 l
-2833 5563 m
-3022 5563 l
-3022 5564 l
-2833 5564 l
-2834 5564 m
-3022 5564 l
-3022 5567 l
-2834 5567 l
-2834 5567 m
-3023 5567 l
-3023 5568 l
-2834 5568 l
-2835 5568 m
-3023 5568 l
-3023 5570 l
-2835 5570 l
-2835 5570 m
-3024 5570 l
-3024 5571 l
-2835 5571 l
-2836 5571 m
-3024 5571 l
-3024 5574 l
-2836 5574 l
-2836 5574 m
-3025 5574 l
-3025 5575 l
-2836 5575 l
-2837 5575 m
-3025 5575 l
-3025 5577 l
-2837 5577 l
-2837 5577 m
-3026 5577 l
-3026 5578 l
-2837 5578 l
-2838 5578 m
-3026 5578 l
-3026 5581 l
-2838 5581 l
-2838 5581 m
-3027 5581 l
-3027 5582 l
-2838 5582 l
-2839 5582 m
-3027 5582 l
-3027 5584 l
-2839 5584 l
-2839 5584 m
-3028 5584 l
-3028 5585 l
-2839 5585 l
-2840 5585 m
-3028 5585 l
-3028 5588 l
-2840 5588 l
-2840 5588 m
-3029 5588 l
-3029 5589 l
-2840 5589 l
-2841 5589 m
-3029 5589 l
-3029 5591 l
-2841 5591 l
-2841 5591 m
-3030 5591 l
-3030 5592 l
-2841 5592 l
-2842 5592 m
-3030 5592 l
-3030 5595 l
-2842 5595 l
-2842 5595 m
-3031 5595 l
-3031 5596 l
-2842 5596 l
-2843 5596 m
-3031 5596 l
-3031 5598 l
-2843 5598 l
-2843 5598 m
-3032 5598 l
-3032 5599 l
-2843 5599 l
-2844 5599 m
-3032 5599 l
-3032 5602 l
-2844 5602 l
-2844 5602 m
-3033 5602 l
-3033 5603 l
-2844 5603 l
-2845 5603 m
-3033 5603 l
-3033 5605 l
-2845 5605 l
-2845 5605 m
-3034 5605 l
-3034 5606 l
-2845 5606 l
-2846 5606 m
-3034 5606 l
-3034 5607 l
-2846 5607 l
-2846 5607 m
-3030 5607 l
-3030 5608 l
-2846 5608 l
-2846 5608 m
-3027 5608 l
-3027 5609 l
-2846 5609 l
-2846 5609 m
-3023 5609 l
-3023 5610 l
-2846 5610 l
-2847 5610 m
-3020 5610 l
-3020 5611 l
-2847 5611 l
-2847 5611 m
-3016 5611 l
-3016 5612 l
-2847 5612 l
-2847 5612 m
-3013 5612 l
-3013 5613 l
-2847 5613 l
-2848 5613 m
-3009 5613 l
-3009 5614 l
-2848 5614 l
-2848 5614 m
-3006 5614 l
-3006 5615 l
-2848 5615 l
-2848 5615 m
-3002 5615 l
-3002 5616 l
-2848 5616 l
-2848 5616 m
-2999 5616 l
-2999 5617 l
-2848 5617 l
-2849 5617 m
-2995 5617 l
-2995 5618 l
-2849 5618 l
-2849 5618 m
-2991 5618 l
-2991 5619 l
-2849 5619 l
-2849 5619 m
-2988 5619 l
-2988 5620 l
-2849 5620 l
-2850 5620 m
-2984 5620 l
-2984 5621 l
-2850 5621 l
-2850 5621 m
-2981 5621 l
-2981 5622 l
-2850 5622 l
-2850 5622 m
-2977 5622 l
-2977 5623 l
-2850 5623 l
-2850 5623 m
-2974 5623 l
-2974 5624 l
-2850 5624 l
-2851 5624 m
-2970 5624 l
-2970 5625 l
-2851 5625 l
-2851 5625 m
-2967 5625 l
-2967 5626 l
-2851 5626 l
-2851 5626 m
-2963 5626 l
-2963 5627 l
-2851 5627 l
-2852 5627 m
-2960 5627 l
-2960 5628 l
-2852 5628 l
-2852 5628 m
-2956 5628 l
-2956 5629 l
-2852 5629 l
-2852 5629 m
-2953 5629 l
-2953 5630 l
-2852 5630 l
-2852 5630 m
-2949 5630 l
-2949 5631 l
-2852 5631 l
-2853 5631 m
-2945 5631 l
-2945 5632 l
-2853 5632 l
-2853 5632 m
-2942 5632 l
-2942 5633 l
-2853 5633 l
-2853 5633 m
-2938 5633 l
-2938 5634 l
-2853 5634 l
-2854 5634 m
-2935 5634 l
-2935 5635 l
-2854 5635 l
-2854 5635 m
-2931 5635 l
-2931 5636 l
-2854 5636 l
-2854 5636 m
-2928 5636 l
-2928 5637 l
-2854 5637 l
-2854 5637 m
-2924 5637 l
-2924 5638 l
-2854 5638 l
-2855 5638 m
-2921 5638 l
-2921 5639 l
-2855 5639 l
-2855 5639 m
-2917 5639 l
-2917 5640 l
-2855 5640 l
-2855 5640 m
-2914 5640 l
-2914 5641 l
-2855 5641 l
-2856 5641 m
-2910 5641 l
-2910 5642 l
-2856 5642 l
-2856 5642 m
-2907 5642 l
-2907 5643 l
-2856 5643 l
-2856 5643 m
-2903 5643 l
-2903 5644 l
-2856 5644 l
-2856 5644 m
-2899 5644 l
-2899 5645 l
-2856 5645 l
-2857 5645 m
-2896 5645 l
-2896 5646 l
-2857 5646 l
-2857 5646 m
-2892 5646 l
-2892 5647 l
-2857 5647 l
-2857 5647 m
-2889 5647 l
-2889 5648 l
-2857 5648 l
-2858 5648 m
-2885 5648 l
-2885 5649 l
-2858 5649 l
-2858 5649 m
-2882 5649 l
-2882 5650 l
-2858 5650 l
-2858 5650 m
-2878 5650 l
-2878 5651 l
-2858 5651 l
-2858 5651 m
-2875 5651 l
-2875 5652 l
-2858 5652 l
-2859 5652 m
-2871 5652 l
-2871 5653 l
-2859 5653 l
-2859 5653 m
-2868 5653 l
-2868 5654 l
-2859 5654 l
-2859 5654 m
-2864 5654 l
-2864 5655 l
-2859 5655 l
-Y
-3033.1 5606.1 m
-3000 5490 l
-2827 5539 l
-2860 5655 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2940 5537 m
-2941 5528 l
-2952 5521 l
-2960 5518 l
-2973 5519 l
-2985 5529 l
-2995 5548 l
-3000 5568 l
-3001 5585 l
-2995 5595 l
-2984 5603 l
-2980 5604 l
-2967 5603 l
-2957 5597 l
-2949 5586 l
-2948 5582 l
-2949 5569 l
-2955 5559 l
-2965 5551 l
-2969 5550 l
-2983 5551 l
-2993 5557 l
-3000 5568 l
-S
-2884 5540 m
-2897 5541 l
-2909 5550 l
-2918 5569 l
-2922 5581 l
-2923 5603 l
-2919 5617 l
-2908 5624 l
-2900 5627 l
-2887 5626 l
-2875 5616 l
-2866 5597 l
-2862 5585 l
-2860 5564 l
-2865 5550 l
-2876 5542 l
-2884 5540 l
-S
-1 g
-1950 5410 m
-1955 5410 l
-1955 5411 l
-1950 5411 l
-1949 5411 m
-1957 5411 l
-1957 5412 l
-1949 5412 l
-1949 5412 m
-1960 5412 l
-1960 5413 l
-1949 5413 l
-1948 5413 m
-1962 5413 l
-1962 5414 l
-1948 5414 l
-1948 5414 m
-1965 5414 l
-1965 5415 l
-1948 5415 l
-1948 5415 m
-1967 5415 l
-1967 5416 l
-1948 5416 l
-1947 5416 m
-1970 5416 l
-1970 5417 l
-1947 5417 l
-1947 5417 m
-1972 5417 l
-1972 5418 l
-1947 5418 l
-1946 5418 m
-1975 5418 l
-1975 5419 l
-1946 5419 l
-1946 5419 m
-1977 5419 l
-1977 5420 l
-1946 5420 l
-1946 5420 m
-1980 5420 l
-1980 5421 l
-1946 5421 l
-1945 5421 m
-1982 5421 l
-1982 5422 l
-1945 5422 l
-1945 5422 m
-1985 5422 l
-1985 5423 l
-1945 5423 l
-1944 5423 m
-1987 5423 l
-1987 5424 l
-1944 5424 l
-1944 5424 m
-1990 5424 l
-1990 5425 l
-1944 5425 l
-1944 5425 m
-1992 5425 l
-1992 5426 l
-1944 5426 l
-1943 5426 m
-1995 5426 l
-1995 5427 l
-1943 5427 l
-1943 5427 m
-1997 5427 l
-1997 5428 l
-1943 5428 l
-1942 5428 m
-2000 5428 l
-2000 5429 l
-1942 5429 l
-1942 5429 m
-2002 5429 l
-2002 5430 l
-1942 5430 l
-1942 5430 m
-2004 5430 l
-2004 5431 l
-1942 5431 l
-1941 5431 m
-2007 5431 l
-2007 5432 l
-1941 5432 l
-1941 5432 m
-2009 5432 l
-2009 5433 l
-1941 5433 l
-1940 5433 m
-2012 5433 l
-2012 5434 l
-1940 5434 l
-1940 5434 m
-2014 5434 l
-2014 5435 l
-1940 5435 l
-1940 5435 m
-2017 5435 l
-2017 5436 l
-1940 5436 l
-1939 5436 m
-2019 5436 l
-2019 5437 l
-1939 5437 l
-1939 5437 m
-2022 5437 l
-2022 5438 l
-1939 5438 l
-1939 5438 m
-2024 5438 l
-2024 5439 l
-1939 5439 l
-1938 5439 m
-2027 5439 l
-2027 5440 l
-1938 5440 l
-1938 5440 m
-2029 5440 l
-2029 5441 l
-1938 5441 l
-1937 5441 m
-2032 5441 l
-2032 5442 l
-1937 5442 l
-1937 5442 m
-2034 5442 l
-2034 5443 l
-1937 5443 l
-1937 5443 m
-2037 5443 l
-2037 5444 l
-1937 5444 l
-1936 5444 m
-2039 5444 l
-2039 5445 l
-1936 5445 l
-1936 5445 m
-2042 5445 l
-2042 5446 l
-1936 5446 l
-1935 5446 m
-2044 5446 l
-2044 5447 l
-1935 5447 l
-1935 5447 m
-2047 5447 l
-2047 5448 l
-1935 5448 l
-1935 5448 m
-2049 5448 l
-2049 5449 l
-1935 5449 l
-1934 5449 m
-2052 5449 l
-2052 5450 l
-1934 5450 l
-1934 5450 m
-2054 5450 l
-2054 5451 l
-1934 5451 l
-1933 5451 m
-2057 5451 l
-2057 5452 l
-1933 5452 l
-1933 5452 m
-2059 5452 l
-2059 5453 l
-1933 5453 l
-1933 5453 m
-2062 5453 l
-2062 5454 l
-1933 5454 l
-1932 5454 m
-2064 5454 l
-2064 5455 l
-1932 5455 l
-1932 5455 m
-2067 5455 l
-2067 5456 l
-1932 5456 l
-1931 5456 m
-2069 5456 l
-2069 5457 l
-1931 5457 l
-1931 5457 m
-2072 5457 l
-2072 5458 l
-1931 5458 l
-1931 5458 m
-2074 5458 l
-2074 5459 l
-1931 5459 l
-1930 5459 m
-2077 5459 l
-2077 5460 l
-1930 5460 l
-1930 5460 m
-2079 5460 l
-2079 5461 l
-1930 5461 l
-1929 5461 m
-2082 5461 l
-2082 5462 l
-1929 5462 l
-1929 5462 m
-2084 5462 l
-2084 5463 l
-1929 5463 l
-1929 5463 m
-2087 5463 l
-2087 5464 l
-1929 5464 l
-1928 5464 m
-2089 5464 l
-2089 5465 l
-1928 5465 l
-1928 5465 m
-2092 5465 l
-2092 5466 l
-1928 5466 l
-1927 5466 m
-2094 5466 l
-2094 5467 l
-1927 5467 l
-1927 5467 m
-2097 5467 l
-2097 5468 l
-1927 5468 l
-1927 5468 m
-2099 5468 l
-2099 5469 l
-1927 5469 l
-1926 5469 m
-2102 5469 l
-2102 5470 l
-1926 5470 l
-1926 5470 m
-2104 5470 l
-2104 5471 l
-1926 5471 l
-1925 5471 m
-2107 5471 l
-2107 5472 l
-1925 5472 l
-1925 5472 m
-2109 5472 l
-2109 5473 l
-1925 5473 l
-1925 5473 m
-2112 5473 l
-2112 5474 l
-1925 5474 l
-1924 5474 m
-2114 5474 l
-2114 5475 l
-1924 5475 l
-1924 5475 m
-2117 5475 l
-2117 5476 l
-1924 5476 l
-1923 5476 m
-2119 5476 l
-2119 5477 l
-1923 5477 l
-1923 5477 m
-2122 5477 l
-2122 5478 l
-1923 5478 l
-1923 5478 m
-2121 5478 l
-2121 5479 l
-1923 5479 l
-1922 5479 m
-2121 5479 l
-2121 5481 l
-1922 5481 l
-1921 5481 m
-2120 5481 l
-2120 5483 l
-1921 5483 l
-1921 5483 m
-2119 5483 l
-2119 5484 l
-1921 5484 l
-1920 5484 m
-2119 5484 l
-2119 5486 l
-1920 5486 l
-1919 5486 m
-2118 5486 l
-2118 5488 l
-1919 5488 l
-1919 5488 m
-2117 5488 l
-2117 5489 l
-1919 5489 l
-1918 5489 m
-2117 5489 l
-2117 5491 l
-1918 5491 l
-1917 5491 m
-2116 5491 l
-2116 5493 l
-1917 5493 l
-1917 5493 m
-2115 5493 l
-2115 5494 l
-1917 5494 l
-1916 5494 m
-2115 5494 l
-2115 5496 l
-1916 5496 l
-1915 5496 m
-2114 5496 l
-2114 5498 l
-1915 5498 l
-1915 5498 m
-2113 5498 l
-2113 5499 l
-1915 5499 l
-1914 5499 m
-2113 5499 l
-2113 5501 l
-1914 5501 l
-1913 5501 m
-2112 5501 l
-2112 5503 l
-1913 5503 l
-1913 5503 m
-2111 5503 l
-2111 5504 l
-1913 5504 l
-1912 5504 m
-2111 5504 l
-2111 5506 l
-1912 5506 l
-1911 5506 m
-2110 5506 l
-2110 5508 l
-1911 5508 l
-1911 5508 m
-2109 5508 l
-2109 5509 l
-1911 5509 l
-1910 5509 m
-2109 5509 l
-2109 5511 l
-1910 5511 l
-1909 5511 m
-2108 5511 l
-2108 5513 l
-1909 5513 l
-1909 5513 m
-2107 5513 l
-2107 5514 l
-1909 5514 l
-1908 5514 m
-2107 5514 l
-2107 5516 l
-1908 5516 l
-1907 5516 m
-2106 5516 l
-2106 5518 l
-1907 5518 l
-1907 5518 m
-2105 5518 l
-2105 5519 l
-1907 5519 l
-1906 5519 m
-2105 5519 l
-2105 5521 l
-1906 5521 l
-1906 5521 m
-2104 5521 l
-2104 5522 l
-1906 5522 l
-1906 5522 m
-2104 5522 l
-2104 5523 l
-1906 5523 l
-1908 5523 m
-2103 5523 l
-2103 5524 l
-1908 5524 l
-1911 5524 m
-2103 5524 l
-2103 5525 l
-1911 5525 l
-1913 5525 m
-2103 5525 l
-2103 5526 l
-1913 5526 l
-1916 5526 m
-2102 5526 l
-2102 5527 l
-1916 5527 l
-1918 5527 m
-2102 5527 l
-2102 5528 l
-1918 5528 l
-1921 5528 m
-2101 5528 l
-2101 5529 l
-1921 5529 l
-1923 5529 m
-2101 5529 l
-2101 5530 l
-1923 5530 l
-1926 5530 m
-2101 5530 l
-2101 5531 l
-1926 5531 l
-1928 5531 m
-2100 5531 l
-2100 5532 l
-1928 5532 l
-1931 5532 m
-2100 5532 l
-2100 5533 l
-1931 5533 l
-1933 5533 m
-2099 5533 l
-2099 5534 l
-1933 5534 l
-1936 5534 m
-2099 5534 l
-2099 5535 l
-1936 5535 l
-1938 5535 m
-2099 5535 l
-2099 5536 l
-1938 5536 l
-1941 5536 m
-2098 5536 l
-2098 5537 l
-1941 5537 l
-1943 5537 m
-2098 5537 l
-2098 5538 l
-1943 5538 l
-1946 5538 m
-2097 5538 l
-2097 5539 l
-1946 5539 l
-1948 5539 m
-2097 5539 l
-2097 5540 l
-1948 5540 l
-1951 5540 m
-2097 5540 l
-2097 5541 l
-1951 5541 l
-1953 5541 m
-2096 5541 l
-2096 5542 l
-1953 5542 l
-1956 5542 m
-2096 5542 l
-2096 5543 l
-1956 5543 l
-1958 5543 m
-2095 5543 l
-2095 5544 l
-1958 5544 l
-1961 5544 m
-2095 5544 l
-2095 5545 l
-1961 5545 l
-1963 5545 m
-2095 5545 l
-2095 5546 l
-1963 5546 l
-1966 5546 m
-2094 5546 l
-2094 5547 l
-1966 5547 l
-1968 5547 m
-2094 5547 l
-2094 5548 l
-1968 5548 l
-1971 5548 m
-2093 5548 l
-2093 5549 l
-1971 5549 l
-1973 5549 m
-2093 5549 l
-2093 5550 l
-1973 5550 l
-1976 5550 m
-2093 5550 l
-2093 5551 l
-1976 5551 l
-1978 5551 m
-2092 5551 l
-2092 5552 l
-1978 5552 l
-1981 5552 m
-2092 5552 l
-2092 5553 l
-1981 5553 l
-1983 5553 m
-2091 5553 l
-2091 5554 l
-1983 5554 l
-1986 5554 m
-2091 5554 l
-2091 5555 l
-1986 5555 l
-1988 5555 m
-2091 5555 l
-2091 5556 l
-1988 5556 l
-1991 5556 m
-2090 5556 l
-2090 5557 l
-1991 5557 l
-1993 5557 m
-2090 5557 l
-2090 5558 l
-1993 5558 l
-1996 5558 m
-2089 5558 l
-2089 5559 l
-1996 5559 l
-1998 5559 m
-2089 5559 l
-2089 5560 l
-1998 5560 l
-2001 5560 m
-2089 5560 l
-2089 5561 l
-2001 5561 l
-2003 5561 m
-2088 5561 l
-2088 5562 l
-2003 5562 l
-2006 5562 m
-2088 5562 l
-2088 5563 l
-2006 5563 l
-2008 5563 m
-2087 5563 l
-2087 5564 l
-2008 5564 l
-2011 5564 m
-2087 5564 l
-2087 5565 l
-2011 5565 l
-2013 5565 m
-2087 5565 l
-2087 5566 l
-2013 5566 l
-2016 5566 m
-2086 5566 l
-2086 5567 l
-2016 5567 l
-2018 5567 m
-2086 5567 l
-2086 5568 l
-2018 5568 l
-2021 5568 m
-2085 5568 l
-2085 5569 l
-2021 5569 l
-2023 5569 m
-2085 5569 l
-2085 5570 l
-2023 5570 l
-2026 5570 m
-2085 5570 l
-2085 5571 l
-2026 5571 l
-2028 5571 m
-2084 5571 l
-2084 5572 l
-2028 5572 l
-2031 5572 m
-2084 5572 l
-2084 5573 l
-2031 5573 l
-2033 5573 m
-2083 5573 l
-2083 5574 l
-2033 5574 l
-2036 5574 m
-2083 5574 l
-2083 5575 l
-2036 5575 l
-2038 5575 m
-2083 5575 l
-2083 5576 l
-2038 5576 l
-2041 5576 m
-2082 5576 l
-2082 5577 l
-2041 5577 l
-2043 5577 m
-2082 5577 l
-2082 5578 l
-2043 5578 l
-2046 5578 m
-2081 5578 l
-2081 5579 l
-2046 5579 l
-2048 5579 m
-2081 5579 l
-2081 5580 l
-2048 5580 l
-2051 5580 m
-2081 5580 l
-2081 5581 l
-2051 5581 l
-2053 5581 m
-2080 5581 l
-2080 5582 l
-2053 5582 l
-2056 5582 m
-2080 5582 l
-2080 5583 l
-2056 5583 l
-2058 5583 m
-2079 5583 l
-2079 5584 l
-2058 5584 l
-2061 5584 m
-2079 5584 l
-2079 5585 l
-2061 5585 l
-2063 5585 m
-2079 5585 l
-2079 5586 l
-2063 5586 l
-2066 5586 m
-2078 5586 l
-2078 5587 l
-2066 5587 l
-2068 5587 m
-2078 5587 l
-2078 5588 l
-2068 5588 l
-2071 5588 m
-2077 5588 l
-2077 5589 l
-2071 5589 l
-2073 5589 m
-2077 5589 l
-2077 5590 l
-2073 5590 l
-Y
-1950.7 5409.6 m
-1906 5522 l
-2076 5590 l
-2121 5478 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1993 5507 m
-1993 5494 l
-1989 5483 l
-1979 5475 l
-1975 5473 l
-1962 5472 l
-1951 5477 l
-1942 5487 l
-1941 5491 l
-1940 5504 l
-1944 5515 l
-1955 5524 l
-1958 5525 l
-1972 5526 l
-1982 5521 l
-1993 5507 l
-2000 5488 l
-2004 5467 l
-2001 5452 l
-1991 5444 l
-1983 5441 l
-1970 5440 l
-1963 5446 l
-S
-2032 5555 m
-2022 5546 l
-2019 5531 l
-2023 5510 l
-2027 5499 l
-2039 5481 l
-2052 5472 l
-2065 5473 l
-2072 5476 l
-2083 5485 l
-2086 5500 l
-2082 5521 l
-2077 5532 l
-2065 5550 l
-2053 5559 l
-2040 5558 l
-2032 5555 l
-S
-1 g
-Y
-467.2 2211.2 m
-282 2211 l
-282 5715 l
-467 5715 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-307 2236 m
-412 2236 l
-S
-307 2236 m
-307 2301 l
-S
-357 2236 m
-357 2276 l
-S
-412 2236 m
-412 2301 l
-S
-357 2387 m
-347 2377 l
-342 2367 l
-342 2352 l
-347 2341 l
-357 2331 l
-372 2326 l
-382 2326 l
-397 2331 l
-407 2341 l
-412 2352 l
-412 2367 l
-407 2377 l
-397 2387 l
-S
-307 2422 m
-412 2422 l
-S
-307 2457 m
-312 2462 l
-307 2467 l
-302 2462 l
-307 2457 l
-S
-342 2462 m
-412 2462 l
-S
-342 2502 m
-447 2502 l
-S
-357 2502 m
-347 2512 l
-342 2522 l
-342 2537 l
-347 2547 l
-357 2557 l
-372 2562 l
-382 2562 l
-397 2557 l
-407 2547 l
-412 2537 l
-412 2522 l
-407 2512 l
-397 2502 l
-S
-307 2602 m
-392 2602 l
-407 2607 l
-412 2617 l
-412 2627 l
-S
-342 2587 m
-342 2622 l
-S
-307 2652 m
-312 2657 l
-307 2662 l
-302 2657 l
-307 2652 l
-S
-342 2657 m
-412 2657 l
-S
-357 2752 m
-347 2742 l
-342 2732 l
-342 2717 l
-347 2707 l
-357 2697 l
-372 2692 l
-382 2692 l
-397 2697 l
-407 2707 l
-412 2717 l
-412 2732 l
-407 2742 l
-397 2752 l
-S
-357 2923 m
-347 2913 l
-342 2903 l
-342 2888 l
-347 2878 l
-357 2868 l
-372 2863 l
-382 2863 l
-397 2868 l
-407 2878 l
-412 2888 l
-412 2903 l
-407 2913 l
-397 2923 l
-S
-342 2978 m
-347 2968 l
-357 2958 l
-372 2953 l
-382 2953 l
-397 2958 l
-407 2968 l
-412 2978 l
-412 2993 l
-407 3003 l
-397 3013 l
-382 3018 l
-372 3018 l
-357 3013 l
-347 3003 l
-342 2993 l
-342 2978 l
-S
-342 3073 m
-347 3063 l
-357 3053 l
-372 3048 l
-382 3048 l
-397 3053 l
-407 3063 l
-412 3073 l
-412 3088 l
-407 3098 l
-397 3108 l
-382 3113 l
-372 3113 l
-357 3108 l
-347 3098 l
-342 3088 l
-342 3073 l
-S
-342 3148 m
-412 3148 l
-S
-372 3148 m
-357 3153 l
-347 3163 l
-342 3174 l
-342 3189 l
-S
-307 3269 m
-412 3269 l
-S
-357 3269 m
-347 3259 l
-342 3249 l
-342 3234 l
-347 3224 l
-357 3214 l
-372 3209 l
-382 3209 l
-397 3214 l
-407 3224 l
-412 3234 l
-412 3249 l
-407 3259 l
-397 3269 l
-S
-307 3304 m
-312 3309 l
-307 3314 l
-302 3309 l
-307 3304 l
-S
-342 3309 m
-412 3309 l
-S
-342 3349 m
-412 3349 l
-S
-362 3349 m
-347 3364 l
-342 3374 l
-342 3389 l
-347 3399 l
-362 3404 l
-412 3404 l
-S
-342 3499 m
-412 3499 l
-S
-357 3499 m
-347 3489 l
-342 3479 l
-342 3464 l
-347 3454 l
-357 3444 l
-372 3439 l
-382 3439 l
-397 3444 l
-407 3454 l
-412 3464 l
-412 3479 l
-407 3489 l
-397 3499 l
-S
-307 3544 m
-392 3544 l
-407 3549 l
-412 3559 l
-412 3569 l
-S
-342 3529 m
-342 3564 l
-S
-372 3595 m
-372 3655 l
-362 3655 l
-352 3650 l
-347 3645 l
-342 3635 l
-342 3620 l
-347 3610 l
-357 3600 l
-372 3595 l
-382 3595 l
-397 3600 l
-407 3610 l
-412 3620 l
-412 3635 l
-407 3645 l
-397 3655 l
-S
-357 3740 m
-347 3735 l
-342 3720 l
-342 3705 l
-347 3690 l
-357 3685 l
-367 3690 l
-372 3700 l
-377 3725 l
-382 3735 l
-392 3740 l
-397 3740 l
-407 3735 l
-412 3720 l
-412 3705 l
-407 3690 l
-397 3685 l
-S
-342 3780 m
-347 3775 l
-352 3780 l
-347 3785 l
-342 3780 l
-S
-407 3785 m
-412 3780 l
-407 3775 l
-402 3780 l
-407 3785 l
-417 3785 l
-427 3780 l
-432 3775 l
-S
-342 3905 m
-412 3905 l
-S
-362 3905 m
-347 3920 l
-342 3930 l
-342 3945 l
-347 3955 l
-362 3960 l
-412 3960 l
-S
-362 3960 m
-347 3975 l
-342 3985 l
-342 4000 l
-347 4011 l
-362 4016 l
-412 4016 l
-S
-372 4051 m
-372 4111 l
-362 4111 l
-352 4106 l
-347 4101 l
-342 4091 l
-342 4076 l
-347 4066 l
-357 4056 l
-372 4051 l
-382 4051 l
-397 4056 l
-407 4066 l
-412 4076 l
-412 4091 l
-407 4101 l
-397 4111 l
-S
-342 4201 m
-412 4201 l
-S
-357 4201 m
-347 4191 l
-342 4181 l
-342 4166 l
-347 4156 l
-357 4146 l
-372 4141 l
-382 4141 l
-397 4146 l
-407 4156 l
-412 4166 l
-412 4181 l
-407 4191 l
-397 4201 l
-S
-342 4241 m
-412 4241 l
-S
-362 4241 m
-347 4256 l
-342 4266 l
-342 4281 l
-347 4291 l
-362 4296 l
-412 4296 l
-S
-372 4411 m
-372 4472 l
-362 4472 l
-352 4467 l
-347 4462 l
-342 4452 l
-342 4437 l
-347 4427 l
-357 4417 l
-372 4411 l
-382 4411 l
-397 4417 l
-407 4427 l
-412 4437 l
-412 4452 l
-407 4462 l
-397 4472 l
-S
-342 4562 m
-447 4562 l
-S
-357 4562 m
-347 4552 l
-342 4542 l
-342 4527 l
-347 4517 l
-357 4507 l
-372 4502 l
-382 4502 l
-397 4507 l
-407 4517 l
-412 4527 l
-412 4542 l
-407 4552 l
-397 4562 l
-S
-342 4602 m
-392 4602 l
-407 4607 l
-412 4617 l
-412 4632 l
-407 4642 l
-392 4657 l
-S
-342 4657 m
-412 4657 l
-S
-307 4692 m
-312 4697 l
-307 4702 l
-302 4697 l
-307 4692 l
-S
-342 4697 m
-412 4697 l
-S
-342 4737 m
-412 4737 l
-S
-362 4737 m
-347 4752 l
-342 4762 l
-342 4777 l
-347 4787 l
-362 4792 l
-412 4792 l
-S
-342 4853 m
-347 4843 l
-357 4833 l
-372 4827 l
-382 4827 l
-397 4833 l
-407 4843 l
-412 4853 l
-412 4868 l
-407 4878 l
-397 4888 l
-382 4893 l
-372 4893 l
-357 4888 l
-347 4878 l
-342 4868 l
-342 4853 l
-S
-342 4923 m
-412 4978 l
-S
-342 4978 m
-412 4923 l
-S
-307 5133 m
-387 5133 l
-402 5128 l
-407 5123 l
-412 5113 l
-412 5103 l
-407 5093 l
-402 5088 l
-387 5083 l
-377 5083 l
-S
-332 5173 m
-327 5173 l
-317 5178 l
-312 5183 l
-307 5193 l
-307 5213 l
-312 5223 l
-317 5228 l
-327 5233 l
-337 5233 l
-347 5228 l
-362 5218 l
-412 5168 l
-412 5238 l
-S
-307 5299 m
-312 5284 l
-327 5274 l
-352 5269 l
-367 5269 l
-392 5274 l
-407 5284 l
-412 5299 l
-412 5309 l
-407 5324 l
-392 5334 l
-367 5339 l
-352 5339 l
-327 5334 l
-312 5324 l
-307 5309 l
-307 5299 l
-S
-307 5399 m
-312 5384 l
-327 5374 l
-352 5369 l
-367 5369 l
-392 5374 l
-407 5384 l
-412 5399 l
-412 5409 l
-407 5424 l
-392 5434 l
-367 5439 l
-352 5439 l
-327 5434 l
-312 5424 l
-307 5409 l
-307 5399 l
-S
-307 5499 m
-312 5484 l
-327 5474 l
-352 5469 l
-367 5469 l
-392 5474 l
-407 5484 l
-412 5499 l
-412 5509 l
-407 5524 l
-392 5534 l
-367 5539 l
-352 5539 l
-327 5534 l
-312 5524 l
-307 5509 l
-307 5499 l
-S
-402 5579 m
-407 5574 l
-412 5579 l
-407 5584 l
-402 5579 l
-S
-307 5649 m
-312 5634 l
-327 5624 l
-352 5619 l
-367 5619 l
-392 5624 l
-407 5634 l
-412 5649 l
-412 5659 l
-407 5675 l
-392 5685 l
-367 5690 l
-352 5690 l
-327 5685 l
-312 5675 l
-307 5659 l
-307 5649 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/frontc.eps b/ast-5.3-1/sun210_figures/frontc.eps
deleted file mode 100644
index 668c667..0000000
--- a/ast-5.3-1/sun210_figures/frontc.eps
+++ /dev/null
@@ -1,14114 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 22 206 490 605
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:48:28
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-1 0 0 rg
-533.21 1777.32 4343.81 4343.81 re
-Y
-4877 3093 m
-4662 3178 l
-4355 3300 l
-4048 3421 l
-3740 3543 l
-3433 3665 l
-3126 3786 l
-2819 3908 l
-2512 4029 l
-2205 4151 l
-2203 4152 l
-2202 4152 l
-2200 4153 l
-2199 4154 l
-2197 4154 l
-2195 4155 l
-2194 4155 l
-2192 4156 l
-2191 4157 l
-2189 4157 l
-2188 4158 l
-2186 4159 l
-2184 4159 l
-2183 4160 l
-2181 4160 l
-2180 4161 l
-2178 4162 l
-2177 4162 l
-2175 4163 l
-2173 4164 l
-2172 4164 l
-2170 4165 l
-2169 4165 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-4059 1777 m
-4039 1803 l
-3834 2062 l
-3628 2321 l
-3423 2580 l
-3218 2839 l
-3013 3098 l
-2808 3357 l
-2602 3616 l
-2397 3875 l
-2192 4134 l
-2191 4135 l
-2190 4137 l
-2189 4138 l
-2188 4139 l
-2187 4141 l
-2186 4142 l
-2185 4143 l
-2184 4145 l
-2183 4146 l
-2182 4147 l
-2181 4149 l
-2180 4150 l
-2178 4151 l
-2177 4152 l
-2176 4154 l
-2175 4155 l
-2174 4156 l
-2173 4158 l
-2172 4159 l
-2171 4160 l
-2170 4162 l
-2169 4163 l
-2168 4164 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-2519 1777 m
-2510 1837 l
-2462 2164 l
-2414 2491 l
-2365 2818 l
-2317 3145 l
-2269 3472 l
-2221 3799 l
-2172 4125 l
-2172 4127 l
-2172 4129 l
-2172 4130 l
-2171 4132 l
-2171 4134 l
-2171 4135 l
-2171 4137 l
-2171 4139 l
-2170 4140 l
-2170 4142 l
-2170 4144 l
-2170 4146 l
-2169 4147 l
-2169 4149 l
-2169 4151 l
-2169 4152 l
-2168 4154 l
-2168 4156 l
-2168 4157 l
-2168 4159 l
-2167 4161 l
-2167 4162 l
-2167 4164 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1221 1777 m
-1300 1977 l
-1422 2284 l
-1543 2591 l
-1665 2899 l
-1786 3206 l
-1908 3513 l
-2030 3821 l
-2151 4128 l
-2152 4130 l
-2152 4131 l
-2153 4133 l
-2154 4134 l
-2154 4136 l
-2155 4137 l
-2156 4139 l
-2156 4140 l
-2157 4142 l
-2157 4144 l
-2158 4145 l
-2159 4147 l
-2159 4148 l
-2160 4150 l
-2161 4151 l
-2161 4153 l
-2162 4155 l
-2162 4156 l
-2163 4158 l
-2164 4159 l
-2164 4161 l
-2165 4162 l
-2166 4164 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 2871 m
-581 2909 l
-840 3114 l
-1099 3319 l
-1357 3525 l
-1616 3730 l
-1875 3935 l
-2134 4141 l
-2135 4142 l
-2137 4143 l
-2138 4144 l
-2139 4145 l
-2141 4146 l
-2142 4147 l
-2143 4148 l
-2145 4149 l
-2146 4150 l
-2147 4151 l
-2149 4152 l
-2150 4153 l
-2151 4154 l
-2153 4155 l
-2154 4156 l
-2155 4157 l
-2157 4158 l
-2158 4160 l
-2159 4161 l
-2160 4162 l
-2162 4163 l
-2163 4164 l
-2164 4165 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 3925 m
-818 3967 l
-1145 4015 l
-1472 4064 l
-1799 4112 l
-2126 4160 l
-2127 4161 l
-2129 4161 l
-2131 4161 l
-2132 4161 l
-2134 4162 l
-2136 4162 l
-2137 4162 l
-2139 4162 l
-2141 4163 l
-2142 4163 l
-2144 4163 l
-2146 4163 l
-2147 4164 l
-2149 4164 l
-2151 4164 l
-2152 4164 l
-2154 4165 l
-2156 4165 l
-2157 4165 l
-2159 4165 l
-2161 4165 l
-2162 4166 l
-2164 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 4813 m
-592 4790 l
-900 4668 l
-1207 4547 l
-1514 4425 l
-1821 4303 l
-2128 4182 l
-2130 4181 l
-2131 4180 l
-2133 4180 l
-2134 4179 l
-2136 4178 l
-2137 4178 l
-2139 4177 l
-2141 4177 l
-2142 4176 l
-2144 4175 l
-2145 4175 l
-2147 4174 l
-2148 4173 l
-2150 4173 l
-2152 4172 l
-2153 4172 l
-2155 4171 l
-2156 4170 l
-2158 4170 l
-2159 4169 l
-2161 4169 l
-2163 4168 l
-2164 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-618 6121 m
-705 6012 l
-910 5753 l
-1115 5494 l
-1320 5235 l
-1525 4976 l
-1730 4717 l
-1936 4458 l
-2141 4199 l
-2142 4197 l
-2143 4196 l
-2144 4195 l
-2145 4193 l
-2146 4192 l
-2147 4191 l
-2148 4189 l
-2149 4188 l
-2150 4187 l
-2151 4186 l
-2152 4184 l
-2153 4183 l
-2154 4182 l
-2155 4180 l
-2156 4179 l
-2158 4178 l
-2159 4176 l
-2160 4175 l
-2161 4174 l
-2162 4172 l
-2163 4171 l
-2164 4170 l
-2165 4168 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-S
-1878 6121 m
-1919 5842 l
-1967 5515 l
-2016 5188 l
-2064 4861 l
-2112 4534 l
-2160 4207 l
-2161 4206 l
-2161 4204 l
-2161 4202 l
-2161 4201 l
-2162 4199 l
-2162 4197 l
-2162 4196 l
-2162 4194 l
-2163 4192 l
-2163 4191 l
-2163 4189 l
-2163 4187 l
-2164 4186 l
-2164 4184 l
-2164 4182 l
-2164 4181 l
-2165 4179 l
-2165 4177 l
-2165 4176 l
-2165 4174 l
-2166 4172 l
-2166 4171 l
-2166 4169 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-S
-2940 6121 m
-2911 6049 l
-2790 5741 l
-2668 5434 l
-2546 5127 l
-2425 4819 l
-2303 4512 l
-2182 4205 l
-2181 4203 l
-2180 4202 l
-2180 4200 l
-2179 4198 l
-2179 4197 l
-2178 4195 l
-2177 4194 l
-2177 4192 l
-2176 4191 l
-2175 4189 l
-2175 4188 l
-2174 4186 l
-2174 4184 l
-2173 4183 l
-2172 4181 l
-2172 4180 l
-2171 4178 l
-2170 4177 l
-2170 4175 l
-2169 4173 l
-2169 4172 l
-2168 4170 l
-2167 4169 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2166 4166 l
-2166 4166 l
-S
-4631 6121 m
-4529 6040 l
-4270 5835 l
-4011 5629 l
-3752 5424 l
-3493 5219 l
-3234 5013 l
-2975 4808 l
-2717 4603 l
-2458 4397 l
-2199 4192 l
-2197 4191 l
-2196 4190 l
-2195 4189 l
-2194 4188 l
-2192 4187 l
-2191 4186 l
-2190 4185 l
-2188 4184 l
-2187 4183 l
-2186 4182 l
-2184 4180 l
-2183 4179 l
-2182 4178 l
-2180 4177 l
-2179 4176 l
-2178 4175 l
-2176 4174 l
-2175 4173 l
-2174 4172 l
-2172 4171 l
-2171 4170 l
-2170 4169 l
-2168 4168 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4166 l
-2166 4166 l
-S
-4877 4567 m
-4822 4559 l
-4495 4511 l
-4168 4462 l
-3841 4414 l
-3514 4366 l
-3188 4317 l
-2861 4269 l
-2534 4221 l
-2207 4172 l
-2206 4172 l
-2204 4172 l
-2202 4172 l
-2201 4171 l
-2199 4171 l
-2197 4171 l
-2196 4171 l
-2194 4170 l
-2192 4170 l
-2191 4170 l
-2189 4170 l
-2187 4169 l
-2186 4169 l
-2184 4169 l
-2182 4169 l
-2181 4168 l
-2179 4168 l
-2177 4168 l
-2176 4168 l
-2174 4167 l
-2172 4167 l
-2171 4167 l
-2169 4167 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-4877 2504 m
-4876 2503 l
-4872 2496 l
-4868 2489 l
-4864 2482 l
-4860 2476 l
-4855 2469 l
-4851 2462 l
-4847 2456 l
-4843 2449 l
-4838 2442 l
-4834 2436 l
-4830 2429 l
-4826 2423 l
-4821 2416 l
-4817 2409 l
-4812 2403 l
-4808 2396 l
-4804 2390 l
-4799 2383 l
-4795 2377 l
-4790 2370 l
-4786 2364 l
-4781 2357 l
-4777 2351 l
-4772 2344 l
-4768 2338 l
-4763 2331 l
-4759 2325 l
-4754 2318 l
-4750 2312 l
-4745 2306 l
-4740 2299 l
-4736 2293 l
-4731 2286 l
-4726 2280 l
-4722 2274 l
-4717 2267 l
-4712 2261 l
-4708 2255 l
-4703 2248 l
-4698 2242 l
-4693 2236 l
-4689 2230 l
-4684 2223 l
-4679 2217 l
-4674 2211 l
-4669 2205 l
-4664 2198 l
-4659 2192 l
-4655 2186 l
-4650 2180 l
-4645 2174 l
-4640 2168 l
-4635 2161 l
-4630 2155 l
-4625 2149 l
-4620 2143 l
-4615 2137 l
-4610 2131 l
-4605 2125 l
-4600 2119 l
-4595 2113 l
-4589 2107 l
-4584 2101 l
-4579 2095 l
-4574 2089 l
-4569 2083 l
-4564 2077 l
-4559 2071 l
-4553 2065 l
-4548 2059 l
-4543 2053 l
-4538 2047 l
-4532 2041 l
-4527 2036 l
-4522 2030 l
-4517 2024 l
-4511 2018 l
-4506 2012 l
-4501 2006 l
-4495 2001 l
-4490 1995 l
-4484 1989 l
-4479 1983 l
-4474 1978 l
-4468 1972 l
-4463 1966 l
-4457 1960 l
-4452 1955 l
-4446 1949 l
-4441 1943 l
-4435 1938 l
-4430 1932 l
-4424 1927 l
-4419 1921 l
-4413 1915 l
-4407 1910 l
-4402 1904 l
-4396 1899 l
-4391 1893 l
-4385 1888 l
-4379 1882 l
-4374 1877 l
-4368 1871 l
-4362 1866 l
-4357 1860 l
-4351 1855 l
-4345 1849 l
-4339 1844 l
-4334 1839 l
-4328 1833 l
-4322 1828 l
-4316 1823 l
-4310 1817 l
-4305 1812 l
-4299 1807 l
-4293 1801 l
-4287 1796 l
-4281 1791 l
-4275 1786 l
-4269 1780 l
-4266 1777 l
-S
-4675 6121 m
-4678 6117 l
-4683 6111 l
-4688 6104 l
-4693 6098 l
-4698 6092 l
-4702 6086 l
-4707 6079 l
-4712 6073 l
-4717 6067 l
-4721 6060 l
-4726 6054 l
-4731 6048 l
-4735 6041 l
-4740 6035 l
-4745 6028 l
-4749 6022 l
-4754 6016 l
-4758 6009 l
-4763 6003 l
-4767 5996 l
-4772 5990 l
-4776 5983 l
-4781 5977 l
-4785 5970 l
-4790 5964 l
-4794 5957 l
-4799 5951 l
-4803 5944 l
-4808 5938 l
-4812 5931 l
-4816 5925 l
-4821 5918 l
-4825 5911 l
-4829 5905 l
-4834 5898 l
-4838 5892 l
-4842 5885 l
-4846 5878 l
-4851 5872 l
-4855 5865 l
-4859 5858 l
-4863 5852 l
-4867 5845 l
-4872 5838 l
-4876 5831 l
-4877 5829 l
-S
-4854 3102 m
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3101 l
-4853 3101 l
-4853 3101 l
-4853 3100 l
-4853 3100 l
-4853 3099 l
-4853 3099 l
-4852 3098 l
-4852 3098 l
-4852 3097 l
-4852 3097 l
-4852 3096 l
-4851 3096 l
-4849 3089 l
-4846 3082 l
-4843 3076 l
-4841 3069 l
-4838 3063 l
-4835 3056 l
-4832 3049 l
-4830 3043 l
-4827 3036 l
-4824 3029 l
-4821 3023 l
-4818 3016 l
-4816 3010 l
-4813 3003 l
-4810 2997 l
-4807 2990 l
-4804 2983 l
-4801 2977 l
-4798 2970 l
-4795 2964 l
-4792 2957 l
-4789 2951 l
-4786 2944 l
-4783 2938 l
-4780 2931 l
-4777 2925 l
-4774 2918 l
-4771 2912 l
-4768 2905 l
-4764 2899 l
-4761 2893 l
-4758 2886 l
-4755 2880 l
-4752 2873 l
-4748 2867 l
-4745 2860 l
-4742 2854 l
-4739 2848 l
-4735 2841 l
-4732 2835 l
-4729 2829 l
-4726 2822 l
-4722 2816 l
-4719 2809 l
-4715 2803 l
-4712 2797 l
-4709 2791 l
-4705 2784 l
-4702 2778 l
-4698 2772 l
-4695 2765 l
-4691 2759 l
-4688 2753 l
-4684 2747 l
-4681 2740 l
-4677 2734 l
-4674 2728 l
-4670 2722 l
-4667 2715 l
-4663 2709 l
-4659 2703 l
-4656 2697 l
-4652 2691 l
-4648 2684 l
-4645 2678 l
-4641 2672 l
-4637 2666 l
-4634 2660 l
-4630 2654 l
-4626 2648 l
-4622 2642 l
-4619 2635 l
-4615 2629 l
-4611 2623 l
-4607 2617 l
-4603 2611 l
-4599 2605 l
-4596 2599 l
-4592 2593 l
-4588 2587 l
-4584 2581 l
-4580 2575 l
-4576 2569 l
-4572 2563 l
-4568 2557 l
-4564 2551 l
-4560 2545 l
-4556 2539 l
-4552 2533 l
-4548 2527 l
-4544 2522 l
-4540 2516 l
-4536 2510 l
-4531 2504 l
-4527 2498 l
-4523 2492 l
-4519 2486 l
-4515 2481 l
-4511 2475 l
-4506 2469 l
-4502 2463 l
-4498 2457 l
-4494 2452 l
-4489 2446 l
-4485 2440 l
-4481 2434 l
-4477 2428 l
-4472 2423 l
-4468 2417 l
-4464 2411 l
-4459 2406 l
-4455 2400 l
-4451 2394 l
-4446 2389 l
-4442 2383 l
-4437 2377 l
-4433 2372 l
-4428 2366 l
-4424 2360 l
-4419 2355 l
-4415 2349 l
-4410 2344 l
-4406 2338 l
-4401 2333 l
-4397 2327 l
-4392 2321 l
-4388 2316 l
-4383 2310 l
-4378 2305 l
-4374 2299 l
-4369 2294 l
-4365 2289 l
-4360 2283 l
-4355 2278 l
-4351 2272 l
-4346 2267 l
-4341 2261 l
-4336 2256 l
-4332 2251 l
-4327 2245 l
-4322 2240 l
-4317 2235 l
-4313 2229 l
-4308 2224 l
-4303 2219 l
-4298 2213 l
-4293 2208 l
-4288 2203 l
-4283 2197 l
-4279 2192 l
-4274 2187 l
-4269 2182 l
-4264 2177 l
-4259 2171 l
-4254 2166 l
-4249 2161 l
-4244 2156 l
-4239 2151 l
-4234 2146 l
-4229 2140 l
-4224 2135 l
-4219 2130 l
-4214 2125 l
-4209 2120 l
-4204 2115 l
-4199 2110 l
-4194 2105 l
-4188 2100 l
-4183 2095 l
-4178 2090 l
-4173 2085 l
-4168 2080 l
-4163 2075 l
-4157 2070 l
-4152 2065 l
-S
-4152 2065 m
-4147 2060 l
-4142 2055 l
-4137 2050 l
-4131 2045 l
-4126 2041 l
-4121 2036 l
-4115 2031 l
-4110 2026 l
-4105 2021 l
-4100 2016 l
-4094 2012 l
-4089 2007 l
-4083 2002 l
-4078 1997 l
-4073 1993 l
-4067 1988 l
-4062 1983 l
-4056 1978 l
-4051 1974 l
-4046 1969 l
-4040 1964 l
-4035 1960 l
-4029 1955 l
-4024 1951 l
-4018 1946 l
-4013 1941 l
-4007 1937 l
-4002 1932 l
-3996 1928 l
-3991 1923 l
-3985 1919 l
-3979 1914 l
-3974 1910 l
-3968 1905 l
-3963 1901 l
-3957 1896 l
-3951 1892 l
-3946 1887 l
-3940 1883 l
-3934 1879 l
-3929 1874 l
-3923 1870 l
-3917 1865 l
-3912 1861 l
-3906 1857 l
-3900 1852 l
-3894 1848 l
-3889 1844 l
-3883 1840 l
-3877 1835 l
-3871 1831 l
-3866 1827 l
-3860 1823 l
-3854 1818 l
-3848 1814 l
-3842 1810 l
-3836 1806 l
-3831 1802 l
-3825 1798 l
-3819 1794 l
-3813 1790 l
-3807 1785 l
-3801 1781 l
-3795 1777 l
-S
-4297 6121 m
-4298 6120 l
-4302 6115 l
-4307 6110 l
-4312 6105 l
-4317 6099 l
-4322 6094 l
-4326 6088 l
-4331 6083 l
-4336 6078 l
-4341 6072 l
-4345 6067 l
-4350 6062 l
-4355 6056 l
-4359 6051 l
-4364 6045 l
-4369 6040 l
-4373 6034 l
-4378 6029 l
-4383 6023 l
-4387 6018 l
-4392 6012 l
-4396 6007 l
-4401 6001 l
-4405 5996 l
-4410 5990 l
-4414 5985 l
-4419 5979 l
-4423 5973 l
-4428 5968 l
-4432 5962 l
-4437 5956 l
-4441 5951 l
-4446 5945 l
-4450 5940 l
-4454 5934 l
-4459 5928 l
-4463 5922 l
-4468 5917 l
-4472 5911 l
-4476 5905 l
-4480 5900 l
-4485 5894 l
-4489 5888 l
-4493 5882 l
-4498 5877 l
-4502 5871 l
-4506 5865 l
-4510 5859 l
-4514 5853 l
-4519 5847 l
-4523 5842 l
-4527 5836 l
-4531 5830 l
-4535 5824 l
-4539 5818 l
-4543 5812 l
-4547 5806 l
-4551 5800 l
-4555 5795 l
-4560 5789 l
-4564 5783 l
-4568 5777 l
-4572 5771 l
-4575 5765 l
-4579 5759 l
-4583 5753 l
-4587 5747 l
-4591 5741 l
-4595 5735 l
-4599 5729 l
-4603 5723 l
-4607 5717 l
-4611 5711 l
-4614 5704 l
-4618 5698 l
-4622 5692 l
-4626 5686 l
-4629 5680 l
-4633 5674 l
-4637 5668 l
-4641 5662 l
-4644 5656 l
-4648 5649 l
-4652 5643 l
-4655 5637 l
-4659 5631 l
-4663 5625 l
-4666 5619 l
-4670 5612 l
-4673 5606 l
-4677 5600 l
-4681 5594 l
-4684 5587 l
-4688 5581 l
-4691 5575 l
-4695 5569 l
-4698 5562 l
-4701 5556 l
-4705 5550 l
-4708 5543 l
-4712 5537 l
-4715 5531 l
-4718 5524 l
-4722 5518 l
-4725 5512 l
-4729 5505 l
-4732 5499 l
-4735 5493 l
-4738 5486 l
-4742 5480 l
-4745 5474 l
-4748 5467 l
-4751 5461 l
-4755 5454 l
-4758 5448 l
-4761 5441 l
-4764 5435 l
-4767 5429 l
-4770 5422 l
-4773 5416 l
-4777 5409 l
-4780 5403 l
-4783 5396 l
-4786 5390 l
-4789 5383 l
-4792 5377 l
-4795 5370 l
-4798 5364 l
-4801 5357 l
-4804 5351 l
-4807 5344 l
-4809 5337 l
-4812 5331 l
-4815 5324 l
-4818 5318 l
-4821 5311 l
-4824 5305 l
-4827 5298 l
-4829 5291 l
-4832 5285 l
-4835 5278 l
-4838 5271 l
-4840 5265 l
-4843 5258 l
-4846 5252 l
-4848 5245 l
-4851 5238 l
-4854 5232 l
-4856 5225 l
-4859 5218 l
-4862 5212 l
-4864 5205 l
-4867 5198 l
-4869 5191 l
-4872 5185 l
-4874 5178 l
-4877 5171 l
-4877 5171 l
-S
-4877 3162 m
-4877 3162 l
-4874 3155 l
-4872 3149 l
-4869 3142 l
-4867 3135 l
-4864 3129 l
-4862 3122 l
-4859 3115 l
-4856 3109 l
-4854 3102 l
-S
-4585 3208 m
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3207 l
-4584 3207 l
-4584 3206 l
-4584 3206 l
-4584 3205 l
-4584 3205 l
-4584 3205 l
-4583 3204 l
-4583 3204 l
-4583 3203 l
-4583 3203 l
-4581 3197 l
-4578 3191 l
-4576 3185 l
-4573 3179 l
-4571 3173 l
-4568 3167 l
-4566 3161 l
-4563 3155 l
-4561 3149 l
-4558 3143 l
-4556 3137 l
-4553 3131 l
-4551 3125 l
-4548 3119 l
-4545 3114 l
-4543 3108 l
-4540 3102 l
-4538 3096 l
-4535 3090 l
-4532 3084 l
-4529 3078 l
-4527 3072 l
-4524 3067 l
-4521 3061 l
-4519 3055 l
-4516 3049 l
-4513 3043 l
-4510 3037 l
-4507 3032 l
-4505 3026 l
-4502 3020 l
-4499 3014 l
-4496 3008 l
-4493 3003 l
-4490 2997 l
-4487 2991 l
-4484 2985 l
-4482 2980 l
-4479 2974 l
-4476 2968 l
-4473 2962 l
-4470 2957 l
-4467 2951 l
-4464 2945 l
-4461 2939 l
-4458 2934 l
-4454 2928 l
-4451 2922 l
-4448 2917 l
-4445 2911 l
-4442 2905 l
-4439 2900 l
-4436 2894 l
-4433 2889 l
-4429 2883 l
-4426 2877 l
-4423 2872 l
-4420 2866 l
-4417 2860 l
-4413 2855 l
-4410 2849 l
-4407 2844 l
-4404 2838 l
-4400 2833 l
-4397 2827 l
-4394 2822 l
-4390 2816 l
-4387 2811 l
-4384 2805 l
-4380 2800 l
-4377 2794 l
-4373 2789 l
-4370 2783 l
-4366 2778 l
-4363 2772 l
-4360 2767 l
-4356 2761 l
-4353 2756 l
-4349 2750 l
-4346 2745 l
-4342 2740 l
-4339 2734 l
-4335 2729 l
-4331 2723 l
-4328 2718 l
-4324 2713 l
-4321 2707 l
-4317 2702 l
-4313 2697 l
-4310 2691 l
-4306 2686 l
-4302 2681 l
-4299 2675 l
-4295 2670 l
-4291 2665 l
-4287 2660 l
-4284 2654 l
-4280 2649 l
-4276 2644 l
-4272 2639 l
-4269 2633 l
-4265 2628 l
-4261 2623 l
-4257 2618 l
-4253 2613 l
-4249 2607 l
-4246 2602 l
-4242 2597 l
-4238 2592 l
-4234 2587 l
-4230 2582 l
-4226 2577 l
-4222 2571 l
-4218 2566 l
-4214 2561 l
-4210 2556 l
-4206 2551 l
-4202 2546 l
-4198 2541 l
-4194 2536 l
-4190 2531 l
-4186 2526 l
-4182 2521 l
-4178 2516 l
-4174 2511 l
-4170 2506 l
-4166 2501 l
-4161 2496 l
-4157 2491 l
-4153 2486 l
-4149 2481 l
-4145 2476 l
-4141 2471 l
-4136 2467 l
-4132 2462 l
-4128 2457 l
-4124 2452 l
-4119 2447 l
-4115 2442 l
-4111 2437 l
-4107 2433 l
-4102 2428 l
-4098 2423 l
-4094 2418 l
-4089 2413 l
-4085 2409 l
-4081 2404 l
-4076 2399 l
-4072 2394 l
-4067 2390 l
-4063 2385 l
-4059 2380 l
-4054 2376 l
-4050 2371 l
-4045 2366 l
-4041 2362 l
-4036 2357 l
-4032 2352 l
-4027 2348 l
-4023 2343 l
-4018 2338 l
-4014 2334 l
-4009 2329 l
-4005 2325 l
-4000 2320 l
-3995 2316 l
-3991 2311 l
-3986 2307 l
-3982 2302 l
-3977 2298 l
-3972 2293 l
-3968 2289 l
-3963 2284 l
-3958 2280 l
-3954 2275 l
-S
-3954 2275 m
-3949 2271 l
-3944 2266 l
-3940 2262 l
-3935 2258 l
-3930 2253 l
-3925 2249 l
-3921 2244 l
-3916 2240 l
-3911 2236 l
-3906 2231 l
-3901 2227 l
-3897 2223 l
-3892 2218 l
-3887 2214 l
-3882 2210 l
-3877 2206 l
-3872 2201 l
-3867 2197 l
-3863 2193 l
-3858 2189 l
-3853 2185 l
-3848 2180 l
-3843 2176 l
-3838 2172 l
-3833 2168 l
-3828 2164 l
-3823 2160 l
-3818 2156 l
-3813 2152 l
-3808 2147 l
-3803 2143 l
-3798 2139 l
-3793 2135 l
-3788 2131 l
-3783 2127 l
-3778 2123 l
-3773 2119 l
-3768 2115 l
-3763 2111 l
-3758 2107 l
-3752 2103 l
-3747 2099 l
-3742 2096 l
-3737 2092 l
-3732 2088 l
-3727 2084 l
-3722 2080 l
-3716 2076 l
-3711 2072 l
-3706 2068 l
-3701 2065 l
-3696 2061 l
-3690 2057 l
-3685 2053 l
-3680 2049 l
-3675 2046 l
-3669 2042 l
-3664 2038 l
-3659 2035 l
-3654 2031 l
-3648 2027 l
-3643 2024 l
-3638 2020 l
-3632 2016 l
-3627 2013 l
-3622 2009 l
-3616 2005 l
-3611 2002 l
-3606 1998 l
-3600 1995 l
-3595 1991 l
-3589 1988 l
-3584 1984 l
-3579 1980 l
-3573 1977 l
-3568 1974 l
-3562 1970 l
-3557 1967 l
-3551 1963 l
-3546 1960 l
-3540 1956 l
-3535 1953 l
-3529 1949 l
-3524 1946 l
-3518 1943 l
-3513 1939 l
-3507 1936 l
-3502 1933 l
-3496 1929 l
-3491 1926 l
-3485 1923 l
-3480 1920 l
-3474 1916 l
-3468 1913 l
-3463 1910 l
-3457 1907 l
-3452 1903 l
-3446 1900 l
-3440 1897 l
-3435 1894 l
-3429 1891 l
-3424 1888 l
-3418 1885 l
-3412 1881 l
-3407 1878 l
-3401 1875 l
-3395 1872 l
-3390 1869 l
-3384 1866 l
-3378 1863 l
-3372 1860 l
-3367 1857 l
-3361 1854 l
-3355 1851 l
-3349 1848 l
-3344 1845 l
-3338 1842 l
-3332 1840 l
-3326 1837 l
-3321 1834 l
-3315 1831 l
-3309 1828 l
-3303 1825 l
-3297 1822 l
-3292 1820 l
-3286 1817 l
-3280 1814 l
-3274 1811 l
-3268 1809 l
-3262 1806 l
-3257 1803 l
-3251 1800 l
-3245 1798 l
-3239 1795 l
-3233 1792 l
-3227 1790 l
-3221 1787 l
-3215 1785 l
-3210 1782 l
-3204 1779 l
-3199 1777 l
-S
-1133 1777 m
-1133 1778 l
-1127 1780 l
-1121 1783 l
-1115 1785 l
-1109 1788 l
-1104 1791 l
-1098 1793 l
-1092 1796 l
-1086 1798 l
-1080 1801 l
-1074 1804 l
-1068 1807 l
-1062 1809 l
-1057 1812 l
-1051 1815 l
-1045 1818 l
-1039 1820 l
-1033 1823 l
-1028 1826 l
-1022 1829 l
-1016 1832 l
-1010 1835 l
-1004 1837 l
-999 1840 l
-993 1843 l
-987 1846 l
-981 1849 l
-976 1852 l
-970 1855 l
-964 1858 l
-958 1861 l
-953 1864 l
-947 1867 l
-941 1870 l
-936 1873 l
-930 1876 l
-924 1879 l
-919 1882 l
-913 1885 l
-907 1889 l
-902 1892 l
-896 1895 l
-890 1898 l
-885 1901 l
-879 1904 l
-874 1908 l
-868 1911 l
-862 1914 l
-857 1917 l
-851 1920 l
-846 1924 l
-840 1927 l
-835 1930 l
-829 1934 l
-823 1937 l
-818 1940 l
-812 1944 l
-807 1947 l
-801 1950 l
-796 1954 l
-790 1957 l
-785 1961 l
-780 1964 l
-774 1968 l
-769 1971 l
-763 1974 l
-758 1978 l
-752 1981 l
-747 1985 l
-742 1988 l
-736 1992 l
-731 1996 l
-725 1999 l
-720 2003 l
-715 2006 l
-709 2010 l
-704 2014 l
-699 2017 l
-693 2021 l
-688 2025 l
-683 2028 l
-677 2032 l
-672 2036 l
-667 2039 l
-662 2043 l
-656 2047 l
-651 2051 l
-646 2054 l
-641 2058 l
-635 2062 l
-630 2066 l
-625 2069 l
-620 2073 l
-615 2077 l
-609 2081 l
-604 2085 l
-599 2089 l
-594 2093 l
-589 2097 l
-584 2100 l
-579 2104 l
-573 2108 l
-568 2112 l
-563 2116 l
-558 2120 l
-553 2124 l
-548 2128 l
-543 2132 l
-538 2136 l
-533 2140 l
-S
-3884 6121 m
-3886 6119 l
-3891 6115 l
-3896 6111 l
-3901 6106 l
-3906 6102 l
-3910 6098 l
-3915 6093 l
-3920 6089 l
-3925 6085 l
-3930 6080 l
-3934 6076 l
-3939 6072 l
-3944 6067 l
-3948 6063 l
-3953 6058 l
-3958 6054 l
-3962 6050 l
-3967 6045 l
-3972 6041 l
-3976 6036 l
-3981 6032 l
-3986 6027 l
-3990 6023 l
-3995 6018 l
-3999 6013 l
-4004 6009 l
-4009 6004 l
-4013 6000 l
-4018 5995 l
-4022 5991 l
-4027 5986 l
-4031 5981 l
-4036 5977 l
-4040 5972 l
-4045 5967 l
-4049 5963 l
-4054 5958 l
-4058 5953 l
-4062 5949 l
-4067 5944 l
-4071 5939 l
-4076 5935 l
-4080 5930 l
-4084 5925 l
-4089 5920 l
-4093 5915 l
-4097 5911 l
-4102 5906 l
-4106 5901 l
-4110 5896 l
-4115 5891 l
-4119 5887 l
-4123 5882 l
-4127 5877 l
-4132 5872 l
-4136 5867 l
-4140 5862 l
-4144 5857 l
-4148 5852 l
-4153 5847 l
-4157 5843 l
-4161 5838 l
-4165 5833 l
-4169 5828 l
-4173 5823 l
-4177 5818 l
-4182 5813 l
-4186 5808 l
-4190 5803 l
-4194 5798 l
-4198 5793 l
-4202 5788 l
-4206 5783 l
-4210 5777 l
-4214 5772 l
-4218 5767 l
-4222 5762 l
-4226 5757 l
-4230 5752 l
-4234 5747 l
-4237 5742 l
-4241 5737 l
-4245 5731 l
-4249 5726 l
-4253 5721 l
-4257 5716 l
-4261 5711 l
-4264 5706 l
-4268 5700 l
-4272 5695 l
-4276 5690 l
-4280 5685 l
-4283 5679 l
-4287 5674 l
-4291 5669 l
-4295 5664 l
-4298 5658 l
-4302 5653 l
-4306 5648 l
-4309 5642 l
-4313 5637 l
-4317 5632 l
-4320 5626 l
-4324 5621 l
-4327 5616 l
-4331 5610 l
-4335 5605 l
-4338 5600 l
-4342 5594 l
-4345 5589 l
-4349 5583 l
-4352 5578 l
-4356 5572 l
-4359 5567 l
-4363 5562 l
-4366 5556 l
-4370 5551 l
-4373 5545 l
-4376 5540 l
-4380 5534 l
-4383 5529 l
-4387 5523 l
-4390 5518 l
-4393 5512 l
-4397 5507 l
-4400 5501 l
-4403 5496 l
-4406 5490 l
-4410 5484 l
-4413 5479 l
-4416 5473 l
-4419 5468 l
-4423 5462 l
-4426 5457 l
-4429 5451 l
-4432 5445 l
-4435 5440 l
-4439 5434 l
-4442 5428 l
-4445 5423 l
-4448 5417 l
-4451 5411 l
-4454 5406 l
-4457 5400 l
-4460 5394 l
-4463 5389 l
-4466 5383 l
-4469 5377 l
-4472 5372 l
-4475 5366 l
-4478 5360 l
-4481 5354 l
-4484 5349 l
-4487 5343 l
-4490 5337 l
-4493 5331 l
-4496 5326 l
-4499 5320 l
-4501 5314 l
-4504 5308 l
-4507 5302 l
-4510 5297 l
-4513 5291 l
-4516 5285 l
-4518 5279 l
-4521 5273 l
-4524 5267 l
-4526 5261 l
-4529 5256 l
-4532 5250 l
-4535 5244 l
-4537 5238 l
-4540 5232 l
-4543 5226 l
-4545 5220 l
-4548 5214 l
-4550 5208 l
-4553 5203 l
-4555 5197 l
-4558 5191 l
-4561 5185 l
-4563 5179 l
-4566 5173 l
-4568 5167 l
-4571 5161 l
-4573 5155 l
-4575 5149 l
-4578 5143 l
-4580 5137 l
-4583 5131 l
-4585 5125 l
-4587 5119 l
-4590 5113 l
-4592 5107 l
-4594 5101 l
-4597 5095 l
-4599 5089 l
-4601 5083 l
-4604 5077 l
-S
-4604 5077 m
-4606 5071 l
-4608 5065 l
-4610 5059 l
-4612 5053 l
-4615 5047 l
-4617 5040 l
-4619 5034 l
-4621 5028 l
-4623 5022 l
-4625 5016 l
-4627 5010 l
-4630 5004 l
-4632 4998 l
-4634 4992 l
-4636 4986 l
-4638 4979 l
-4640 4973 l
-4642 4967 l
-4644 4961 l
-4646 4955 l
-4648 4949 l
-4650 4942 l
-4651 4936 l
-4653 4930 l
-4655 4924 l
-4657 4918 l
-4659 4912 l
-4661 4905 l
-4663 4899 l
-4664 4893 l
-4666 4887 l
-4668 4881 l
-4670 4874 l
-4672 4868 l
-4673 4862 l
-4675 4856 l
-4677 4850 l
-4678 4843 l
-4680 4837 l
-4682 4831 l
-4683 4825 l
-4685 4818 l
-4687 4812 l
-4688 4806 l
-4690 4800 l
-4691 4793 l
-4693 4787 l
-4694 4781 l
-4696 4774 l
-4697 4768 l
-4699 4762 l
-4700 4756 l
-4702 4749 l
-4703 4743 l
-4705 4737 l
-4706 4730 l
-4707 4724 l
-4709 4718 l
-4710 4711 l
-4712 4705 l
-4713 4699 l
-4714 4693 l
-4715 4686 l
-4717 4680 l
-4718 4674 l
-4719 4667 l
-4720 4661 l
-4722 4655 l
-4723 4648 l
-4724 4642 l
-4725 4636 l
-4726 4629 l
-4728 4623 l
-4729 4616 l
-4730 4610 l
-4731 4604 l
-4732 4597 l
-4733 4591 l
-4734 4585 l
-4735 4578 l
-4736 4572 l
-4737 4565 l
-4738 4559 l
-4739 4553 l
-4740 4546 l
-4741 4540 l
-4742 4534 l
-4743 4527 l
-4744 4521 l
-4744 4514 l
-4745 4508 l
-4746 4502 l
-4747 4495 l
-4748 4489 l
-4749 4482 l
-4749 4476 l
-4750 4470 l
-4751 4463 l
-4752 4457 l
-4752 4450 l
-4753 4444 l
-4754 4437 l
-4754 4431 l
-4755 4425 l
-4756 4418 l
-4756 4412 l
-4757 4405 l
-4757 4399 l
-4758 4392 l
-4759 4386 l
-4759 4380 l
-4760 4373 l
-4760 4367 l
-4761 4360 l
-4761 4354 l
-4762 4347 l
-4762 4341 l
-4762 4334 l
-4763 4328 l
-4763 4322 l
-4764 4315 l
-4764 4309 l
-4764 4302 l
-4765 4296 l
-4765 4289 l
-4765 4283 l
-4765 4276 l
-4766 4270 l
-4766 4264 l
-4766 4257 l
-4766 4251 l
-4767 4244 l
-4767 4238 l
-4767 4231 l
-4767 4225 l
-4767 4218 l
-4767 4212 l
-4768 4205 l
-4768 4199 l
-4768 4193 l
-4768 4186 l
-4768 4180 l
-4768 4173 l
-4768 4167 l
-4768 4160 l
-4768 4154 l
-4768 4147 l
-4768 4141 l
-4768 4134 l
-4768 4128 l
-4767 4122 l
-4767 4115 l
-4767 4109 l
-4767 4102 l
-4767 4096 l
-4767 4089 l
-4766 4083 l
-4766 4076 l
-4766 4070 l
-4766 4063 l
-4766 4057 l
-4765 4051 l
-4765 4044 l
-4765 4038 l
-4764 4031 l
-4764 4025 l
-4764 4018 l
-4763 4012 l
-4763 4005 l
-4762 3999 l
-4762 3993 l
-4762 3986 l
-4761 3980 l
-4761 3973 l
-4760 3967 l
-4760 3960 l
-4759 3954 l
-4759 3947 l
-4758 3941 l
-4757 3935 l
-4757 3928 l
-4756 3922 l
-4756 3915 l
-4755 3909 l
-4754 3902 l
-4754 3896 l
-4753 3890 l
-4752 3883 l
-4752 3877 l
-4751 3870 l
-4750 3864 l
-4749 3858 l
-4749 3851 l
-4748 3845 l
-4747 3838 l
-4746 3832 l
-4745 3826 l
-4745 3819 l
-4744 3813 l
-S
-4744 3813 m
-4743 3806 l
-4742 3800 l
-4741 3794 l
-4740 3787 l
-4739 3781 l
-4738 3774 l
-4737 3768 l
-4736 3762 l
-4735 3755 l
-4734 3749 l
-4733 3742 l
-4732 3736 l
-4731 3730 l
-4730 3723 l
-4729 3717 l
-4728 3711 l
-4726 3704 l
-4725 3698 l
-4724 3692 l
-4723 3685 l
-4722 3679 l
-4721 3673 l
-4719 3666 l
-4718 3660 l
-4717 3654 l
-4715 3647 l
-4714 3641 l
-4713 3635 l
-4712 3628 l
-4710 3622 l
-4709 3616 l
-4707 3609 l
-4706 3603 l
-4705 3597 l
-4703 3590 l
-4702 3584 l
-4700 3578 l
-4699 3572 l
-4697 3565 l
-4696 3559 l
-4694 3553 l
-4693 3546 l
-4691 3540 l
-4690 3534 l
-4688 3528 l
-4687 3521 l
-4685 3515 l
-4683 3509 l
-4682 3503 l
-4680 3496 l
-4678 3490 l
-4677 3484 l
-4675 3478 l
-4673 3471 l
-4672 3465 l
-4670 3459 l
-4668 3453 l
-4666 3447 l
-4665 3440 l
-4663 3434 l
-4661 3428 l
-4659 3422 l
-4657 3416 l
-4655 3409 l
-4653 3403 l
-4652 3397 l
-4650 3391 l
-4648 3385 l
-4646 3379 l
-4644 3372 l
-4642 3366 l
-4640 3360 l
-4638 3354 l
-4636 3348 l
-4634 3342 l
-4632 3336 l
-4630 3330 l
-4628 3323 l
-4625 3317 l
-4623 3311 l
-4621 3305 l
-4619 3299 l
-4617 3293 l
-4615 3287 l
-4613 3281 l
-4610 3275 l
-4608 3269 l
-4606 3263 l
-4604 3257 l
-4601 3251 l
-4599 3244 l
-4597 3238 l
-4594 3232 l
-4592 3226 l
-4590 3220 l
-4587 3214 l
-4585 3208 l
-S
-4316 3315 m
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3314 l
-4316 3314 l
-4316 3314 l
-4316 3314 l
-4316 3313 l
-4316 3313 l
-4315 3313 l
-4315 3312 l
-4315 3312 l
-4315 3311 l
-4315 3311 l
-4315 3311 l
-4315 3310 l
-4314 3310 l
-4312 3305 l
-4310 3299 l
-4308 3294 l
-4306 3289 l
-4304 3283 l
-4301 3278 l
-4299 3273 l
-4297 3267 l
-4295 3262 l
-4293 3257 l
-4290 3252 l
-4288 3246 l
-4255 3173 l
-4219 3101 l
-4181 3031 l
-4140 2961 l
-4097 2893 l
-4052 2827 l
-4004 2762 l
-3954 2699 l
-3902 2638 l
-3848 2579 l
-3792 2521 l
-3734 2466 l
-3674 2412 l
-3612 2361 l
-3549 2312 l
-3484 2265 l
-3417 2220 l
-3349 2178 l
-3279 2138 l
-3208 2101 l
-3135 2066 l
-3062 2033 l
-2987 2003 l
-2912 1976 l
-2835 1952 l
-2758 1930 l
-2680 1911 l
-2602 1894 l
-2522 1880 l
-2443 1869 l
-2363 1861 l
-2283 1856 l
-2203 1853 l
-2122 1853 l
-2042 1856 l
-1962 1862 l
-1882 1870 l
-1803 1881 l
-1724 1895 l
-1645 1912 l
-1567 1932 l
-1490 1954 l
-1414 1979 l
-1338 2006 l
-1264 2036 l
-1190 2069 l
-1118 2104 l
-1047 2142 l
-978 2182 l
-909 2224 l
-843 2269 l
-778 2316 l
-714 2366 l
-653 2417 l
-593 2471 l
-535 2526 l
-533 2528 l
-S
-533 5804 m
-572 5842 l
-631 5896 l
-692 5948 l
-755 5998 l
-819 6046 l
-885 6092 l
-930 6121 l
-S
-3403 6121 m
-3459 6085 l
-3525 6039 l
-3589 5990 l
-3652 5940 l
-3712 5887 l
-3771 5832 l
-3828 5776 l
-3883 5717 l
-3936 5656 l
-3986 5594 l
-4035 5530 l
-4081 5464 l
-4125 5397 l
-4166 5328 l
-4205 5258 l
-4242 5186 l
-4276 5114 l
-4308 5040 l
-4337 4965 l
-4363 4889 l
-4387 4812 l
-4408 4735 l
-4426 4657 l
-4442 4578 l
-4455 4498 l
-4465 4419 l
-4472 4339 l
-4477 4258 l
-4479 4178 l
-4478 4098 l
-4474 4018 l
-4467 3937 l
-4458 3858 l
-4446 3778 l
-4431 3699 l
-4414 3621 l
-4393 3543 l
-4370 3466 l
-4345 3390 l
-4316 3315 l
-S
-4048 3421 m
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4047 3421 l
-4047 3420 l
-4047 3420 l
-4047 3420 l
-4047 3419 l
-4047 3419 l
-4047 3419 l
-4046 3418 l
-4046 3418 l
-4046 3418 l
-4046 3417 l
-4046 3417 l
-4044 3412 l
-4042 3408 l
-4040 3403 l
-4038 3398 l
-4036 3394 l
-4035 3389 l
-4033 3384 l
-4031 3380 l
-4029 3375 l
-4027 3371 l
-4025 3366 l
-4023 3361 l
-3994 3297 l
-3962 3234 l
-3929 3172 l
-3893 3112 l
-3856 3052 l
-3816 2994 l
-3774 2938 l
-3731 2883 l
-3685 2829 l
-3638 2777 l
-3589 2727 l
-3538 2678 l
-3486 2632 l
-3432 2587 l
-3376 2544 l
-3319 2503 l
-3261 2464 l
-3201 2427 l
-3140 2392 l
-3078 2359 l
-3014 2328 l
-2950 2300 l
-2885 2274 l
-2819 2250 l
-2752 2229 l
-2684 2209 l
-2616 2193 l
-2547 2178 l
-2478 2166 l
-2408 2156 l
-2338 2149 l
-2268 2144 l
-2198 2142 l
-2128 2142 l
-2058 2145 l
-1988 2150 l
-1918 2157 l
-1848 2167 l
-1779 2179 l
-1710 2194 l
-1642 2211 l
-1575 2230 l
-1508 2252 l
-1442 2276 l
-1377 2302 l
-1312 2331 l
-1249 2362 l
-1187 2395 l
-1126 2430 l
-1067 2467 l
-1008 2506 l
-951 2547 l
-896 2591 l
-842 2636 l
-790 2683 l
-739 2731 l
-690 2782 l
-643 2834 l
-598 2888 l
-554 2943 l
-533 2972 l
-S
-533 5361 m
-539 5369 l
-582 5425 l
-626 5479 l
-673 5532 l
-721 5583 l
-771 5632 l
-823 5680 l
-876 5726 l
-931 5769 l
-987 5811 l
-1045 5851 l
-1104 5889 l
-1165 5925 l
-1226 5959 l
-1289 5991 l
-1353 6020 l
-1418 6047 l
-1484 6072 l
-1550 6095 l
-1617 6115 l
-1641 6121 l
-S
-2692 6121 m
-2727 6112 l
-2794 6091 l
-2861 6068 l
-2926 6043 l
-2991 6015 l
-3055 5985 l
-3117 5953 l
-3179 5919 l
-3239 5883 l
-3298 5845 l
-3355 5805 l
-3412 5762 l
-3466 5718 l
-3519 5672 l
-3571 5624 l
-3620 5574 l
-3668 5523 l
-3714 5470 l
-3759 5416 l
-3801 5359 l
-3842 5302 l
-3880 5243 l
-3916 5183 l
-3951 5121 l
-3983 5059 l
-4012 4995 l
-4040 4931 l
-4065 4865 l
-4089 4799 l
-4109 4732 l
-4128 4664 l
-4144 4595 l
-4158 4526 l
-4169 4457 l
-4178 4387 l
-4184 4317 l
-4188 4247 l
-4190 4177 l
-4189 4106 l
-4186 4036 l
-4180 3966 l
-4172 3896 l
-4161 3827 l
-4148 3758 l
-4133 3689 l
-4115 3621 l
-4095 3554 l
-4072 3487 l
-4048 3421 l
-S
-3779 3527 m
-3779 3527 l
-3779 3527 l
-3778 3527 l
-3778 3526 l
-3778 3526 l
-3778 3526 l
-3778 3525 l
-3778 3525 l
-3778 3525 l
-3778 3525 l
-3778 3524 l
-3777 3524 l
-3776 3520 l
-3774 3516 l
-3773 3512 l
-3771 3508 l
-3769 3504 l
-3768 3500 l
-3766 3496 l
-3764 3492 l
-3763 3488 l
-3761 3484 l
-3759 3480 l
-3758 3476 l
-3733 3421 l
-3706 3367 l
-3677 3314 l
-3647 3262 l
-3614 3212 l
-3580 3162 l
-3545 3113 l
-3507 3066 l
-3468 3020 l
-3428 2976 l
-3386 2933 l
-3342 2891 l
-3297 2851 l
-3251 2812 l
-3203 2775 l
-3154 2740 l
-3104 2707 l
-3053 2675 l
-3001 2645 l
-2947 2617 l
-2893 2591 l
-2838 2567 l
-2782 2544 l
-2726 2524 l
-2668 2505 l
-2610 2489 l
-2552 2474 l
-2493 2462 l
-2433 2452 l
-2374 2444 l
-2314 2437 l
-2254 2433 l
-2194 2431 l
-2133 2431 l
-2073 2434 l
-2013 2438 l
-1953 2444 l
-1894 2453 l
-1834 2463 l
-1775 2476 l
-1717 2490 l
-1659 2507 l
-1602 2526 l
-1545 2546 l
-1489 2569 l
-1434 2593 l
-1380 2620 l
-1327 2648 l
-1275 2678 l
-1224 2710 l
-1174 2743 l
-1125 2779 l
-1077 2816 l
-1031 2854 l
-986 2895 l
-943 2936 l
-901 2980 l
-861 3024 l
-822 3070 l
-785 3118 l
-749 3166 l
-715 3216 l
-683 3267 l
-653 3319 l
-624 3372 l
-598 3426 l
-573 3481 l
-550 3537 l
-533 3583 l
-S
-533 4749 m
-542 4775 l
-564 4831 l
-588 4886 l
-614 4940 l
-642 4994 l
-672 5046 l
-703 5098 l
-736 5148 l
-771 5197 l
-808 5245 l
-846 5292 l
-886 5337 l
-928 5380 l
-970 5423 l
-1015 5464 l
-1060 5503 l
-1107 5540 l
-1156 5576 l
-1205 5611 l
-1256 5643 l
-1308 5674 l
-1361 5703 l
-1415 5730 l
-1469 5755 l
-1525 5778 l
-1581 5800 l
-1638 5819 l
-1696 5836 l
-1754 5852 l
-1813 5865 l
-1872 5876 l
-1931 5886 l
-1991 5893 l
-2051 5898 l
-2111 5901 l
-2172 5902 l
-2232 5900 l
-2292 5897 l
-2352 5892 l
-2412 5884 l
-2471 5875 l
-2530 5863 l
-2589 5849 l
-2647 5834 l
-2705 5816 l
-2762 5796 l
-2818 5775 l
-2873 5751 l
-2928 5726 l
-2981 5698 l
-3034 5669 l
-3086 5638 l
-3136 5605 l
-3186 5571 l
-3234 5534 l
-3280 5496 l
-3326 5457 l
-3370 5416 l
-3413 5373 l
-3454 5329 l
-3493 5284 l
-3531 5237 l
-3568 5189 l
-3602 5140 l
-3635 5089 l
-3666 5038 l
-3696 4985 l
-3723 4931 l
-3749 4877 l
-3772 4821 l
-3794 4765 l
-3814 4708 l
-3832 4651 l
-3848 4593 l
-3861 4534 l
-3873 4475 l
-3883 4415 l
-3890 4356 l
-3896 4296 l
-3899 4235 l
-3901 4175 l
-3900 4115 l
-3897 4055 l
-3892 3995 l
-3885 3935 l
-3876 3875 l
-3865 3816 l
-3852 3757 l
-3837 3699 l
-3819 3641 l
-3800 3584 l
-3779 3528 l
-S
-3510 3634 m
-3510 3634 l
-3510 3633 l
-3510 3633 l
-3510 3633 l
-3510 3633 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3631 l
-3509 3631 l
-3508 3628 l
-3506 3624 l
-3505 3621 l
-3504 3618 l
-3502 3614 l
-3501 3611 l
-3499 3608 l
-3498 3605 l
-3497 3601 l
-3495 3598 l
-3494 3595 l
-3492 3591 l
-3472 3546 l
-3449 3501 l
-3425 3456 l
-3400 3413 l
-3373 3371 l
-3345 3329 l
-3315 3289 l
-3284 3249 l
-3251 3211 l
-3218 3174 l
-3183 3138 l
-3146 3103 l
-3109 3070 l
-3070 3038 l
-3030 3007 l
-2990 2978 l
-2948 2950 l
-2905 2924 l
-2862 2899 l
-2817 2875 l
-2772 2853 l
-2726 2833 l
-2680 2815 l
-2632 2798 l
-2585 2782 l
-2536 2768 l
-2488 2756 l
-2438 2746 l
-2389 2738 l
-2339 2731 l
-2289 2726 l
-2239 2722 l
-2189 2720 l
-2139 2721 l
-2089 2722 l
-2039 2726 l
-1989 2731 l
-1939 2738 l
-1890 2747 l
-1841 2757 l
-1792 2770 l
-1744 2784 l
-1696 2799 l
-1649 2816 l
-1602 2835 l
-1556 2855 l
-1511 2877 l
-1467 2901 l
-1423 2926 l
-1381 2953 l
-1339 2981 l
-1299 3010 l
-1259 3041 l
-1220 3073 l
-1183 3107 l
-1147 3141 l
-1112 3177 l
-1078 3215 l
-1046 3253 l
-1015 3292 l
-985 3333 l
-957 3375 l
-930 3417 l
-905 3460 l
-881 3505 l
-859 3550 l
-839 3595 l
-820 3642 l
-802 3689 l
-786 3737 l
-772 3785 l
-760 3834 l
-749 3883 l
-740 3932 l
-733 3982 l
-727 4032 l
-724 4082 l
-722 4132 l
-721 4182 l
-723 4232 l
-726 4282 l
-731 4332 l
-737 4382 l
-746 4432 l
-756 4481 l
-768 4530 l
-781 4578 l
-796 4626 l
-813 4673 l
-831 4720 l
-851 4766 l
-873 4811 l
-896 4856 l
-921 4900 l
-947 4943 l
-975 4984 l
-1004 5025 l
-1034 5065 l
-1066 5104 l
-1100 5142 l
-1134 5178 l
-1170 5213 l
-1207 5247 l
-1245 5280 l
-1284 5311 l
-1324 5341 l
-1366 5370 l
-1408 5397 l
-1451 5423 l
-1495 5447 l
-1540 5469 l
-1585 5490 l
-1632 5510 l
-1679 5528 l
-1726 5544 l
-1774 5558 l
-1823 5571 l
-1872 5582 l
-1921 5591 l
-1971 5599 l
-2020 5605 l
-2070 5609 l
-2121 5612 l
-2171 5612 l
-2221 5611 l
-2271 5609 l
-2321 5604 l
-2371 5598 l
-2420 5590 l
-2470 5580 l
-2519 5569 l
-2567 5556 l
-2615 5541 l
-2662 5525 l
-2709 5507 l
-2755 5487 l
-2801 5466 l
-2846 5443 l
-2889 5419 l
-2932 5393 l
-2975 5365 l
-3016 5336 l
-3056 5306 l
-3095 5275 l
-3133 5242 l
-3169 5208 l
-3205 5172 l
-3239 5135 l
-3272 5098 l
-3304 5059 l
-3334 5019 l
-3363 4977 l
-3390 4935 l
-3416 4892 l
-3441 4849 l
-3464 4804 l
-3485 4758 l
-3505 4712 l
-3523 4665 l
-3539 4618 l
-3554 4570 l
-3567 4522 l
-3579 4473 l
-3589 4423 l
-3597 4374 l
-3603 4324 l
-3608 4274 l
-3611 4224 l
-3612 4174 l
-3611 4124 l
-3609 4073 l
-3605 4023 l
-3599 3973 l
-3591 3924 l
-3582 3874 l
-S
-3582 3874 m
-3571 3825 l
-3558 3777 l
-3544 3729 l
-3528 3681 l
-3510 3634 l
-S
-3241 3740 m
-3241 3740 l
-3241 3740 l
-3241 3740 l
-3241 3740 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3738 l
-3241 3738 l
-3240 3738 l
-3239 3735 l
-3238 3733 l
-3237 3730 l
-3236 3727 l
-3235 3725 l
-3234 3722 l
-3233 3720 l
-3232 3717 l
-3231 3714 l
-3229 3712 l
-3228 3709 l
-3227 3706 l
-3211 3670 l
-3193 3634 l
-3174 3598 l
-3153 3564 l
-3132 3530 l
-3109 3497 l
-3085 3464 l
-3060 3433 l
-3034 3402 l
-3007 3373 l
-2979 3344 l
-2950 3316 l
-2920 3289 l
-2889 3264 l
-2858 3239 l
-2825 3216 l
-2792 3193 l
-2757 3172 l
-2723 3152 l
-2687 3134 l
-2651 3116 l
-2614 3100 l
-2577 3085 l
-2539 3071 l
-2501 3059 l
-2462 3048 l
-2423 3038 l
-2384 3030 l
-2344 3023 l
-2305 3018 l
-2265 3014 l
-2225 3011 l
-2185 3010 l
-2144 3010 l
-2104 3011 l
-2064 3014 l
-2024 3018 l
-1985 3024 l
-1945 3031 l
-1906 3039 l
-1867 3049 l
-1828 3060 l
-1790 3072 l
-1752 3086 l
-1715 3101 l
-1678 3118 l
-1642 3135 l
-1607 3154 l
-1572 3174 l
-1538 3195 l
-1505 3218 l
-1472 3241 l
-1440 3266 l
-1410 3292 l
-1380 3319 l
-1351 3346 l
-1323 3375 l
-1296 3405 l
-1270 3436 l
-1245 3467 l
-1221 3500 l
-1199 3533 l
-1178 3567 l
-1157 3602 l
-1138 3637 l
-1121 3673 l
-1104 3710 l
-1089 3747 l
-1075 3785 l
-1062 3823 l
-1051 3861 l
-1041 3900 l
-1033 3939 l
-1026 3979 l
-1020 4019 l
-1015 4059 l
-1012 4099 l
-1011 4139 l
-1010 4179 l
-1011 4219 l
-1014 4259 l
-1018 4299 l
-1023 4339 l
-1030 4379 l
-1038 4418 l
-1047 4457 l
-1058 4496 l
-1070 4534 l
-1084 4572 l
-1098 4609 l
-1114 4646 l
-1132 4682 l
-1150 4718 l
-1170 4753 l
-1191 4787 l
-1213 4821 l
-1236 4854 l
-1261 4885 l
-1286 4916 l
-1313 4947 l
-1340 4976 l
-1369 5004 l
-1399 5031 l
-1429 5057 l
-1460 5082 l
-1493 5106 l
-1526 5129 l
-1560 5151 l
-1594 5171 l
-1629 5191 l
-1665 5209 l
-1702 5226 l
-1739 5241 l
-1776 5255 l
-1814 5268 l
-1853 5280 l
-1892 5290 l
-1931 5299 l
-1970 5306 l
-2010 5313 l
-2050 5317 l
-2090 5321 l
-2130 5323 l
-2170 5323 l
-2210 5322 l
-2250 5320 l
-2290 5317 l
-2330 5312 l
-2370 5305 l
-2409 5297 l
-2448 5288 l
-2487 5278 l
-2525 5266 l
-2563 5253 l
-2601 5239 l
-2638 5223 l
-2674 5206 l
-2710 5188 l
-2745 5168 l
-2779 5147 l
-2813 5126 l
-2846 5102 l
-2878 5078 l
-2909 5053 l
-2939 5027 l
-2969 4999 l
-2997 4971 l
-3025 4942 l
-3051 4911 l
-3076 4880 l
-3101 4848 l
-3124 4815 l
-3146 4782 l
-3166 4747 l
-3186 4712 l
-3204 4676 l
-3221 4640 l
-3237 4603 l
-3252 4566 l
-3265 4528 l
-3277 4489 l
-3287 4451 l
-3296 4411 l
-3304 4372 l
-3311 4332 l
-3316 4293 l
-3319 4253 l
-3322 4212 l
-3323 4172 l
-3322 4132 l
-3320 4092 l
-3317 4052 l
-3312 4012 l
-3306 3972 l
-3299 3933 l
-S
-3299 3933 m
-3290 3894 l
-3280 3855 l
-3268 3816 l
-3256 3778 l
-3241 3741 l
-S
-2973 3847 m
-2973 3847 l
-2972 3847 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3845 l
-2972 3845 l
-2972 3845 l
-2971 3843 l
-2970 3841 l
-2970 3839 l
-2969 3837 l
-2968 3835 l
-2967 3833 l
-2966 3831 l
-2965 3829 l
-2965 3827 l
-2964 3825 l
-2963 3823 l
-2962 3821 l
-2950 3794 l
-2936 3767 l
-2922 3740 l
-2907 3714 l
-2890 3689 l
-2873 3664 l
-2856 3640 l
-2837 3616 l
-2817 3593 l
-2797 3571 l
-2776 3549 l
-2754 3529 l
-2732 3509 l
-2709 3489 l
-2685 3471 l
-2660 3453 l
-2635 3437 l
-2610 3421 l
-2584 3406 l
-2557 3392 l
-2530 3379 l
-2502 3366 l
-2474 3355 l
-2446 3345 l
-2417 3336 l
-2388 3328 l
-2359 3320 l
-2330 3314 l
-2300 3309 l
-2270 3305 l
-2240 3302 l
-2210 3300 l
-2180 3299 l
-2150 3299 l
-2120 3300 l
-2090 3302 l
-2060 3305 l
-2030 3310 l
-2000 3315 l
-1971 3321 l
-1942 3328 l
-1913 3337 l
-1884 3346 l
-1856 3356 l
-1828 3368 l
-1800 3380 l
-1773 3393 l
-1747 3407 l
-1721 3422 l
-1695 3438 l
-1670 3455 l
-1646 3473 l
-1622 3491 l
-1599 3510 l
-1576 3530 l
-1555 3551 l
-1534 3573 l
-1514 3595 l
-1494 3618 l
-1476 3642 l
-1458 3666 l
-1441 3691 l
-1425 3717 l
-1410 3743 l
-1395 3769 l
-1382 3796 l
-1370 3824 l
-1358 3852 l
-1348 3880 l
-1338 3909 l
-1330 3938 l
-1323 3967 l
-1316 3996 l
-1311 4026 l
-1306 4056 l
-1303 4086 l
-1301 4116 l
-1300 4146 l
-1299 4176 l
-1300 4206 l
-1302 4236 l
-1305 4266 l
-1309 4296 l
-1314 4326 l
-1320 4355 l
-1327 4384 l
-1335 4413 l
-1344 4442 l
-1354 4471 l
-1365 4499 l
-1377 4526 l
-1390 4553 l
-1404 4580 l
-1419 4606 l
-1435 4632 l
-1451 4657 l
-1469 4682 l
-1487 4706 l
-1506 4729 l
-1526 4752 l
-1547 4773 l
-1568 4795 l
-1591 4815 l
-1613 4835 l
-1637 4853 l
-1661 4871 l
-1686 4889 l
-1711 4905 l
-1737 4920 l
-1764 4935 l
-1790 4948 l
-1818 4961 l
-1846 4972 l
-1874 4983 l
-1902 4993 l
-1931 5001 l
-1960 5009 l
-1990 5016 l
-2019 5021 l
-2049 5026 l
-2079 5030 l
-2109 5032 l
-2139 5034 l
-2169 5034 l
-2199 5033 l
-2229 5032 l
-2259 5029 l
-2289 5025 l
-2319 5021 l
-2348 5015 l
-2378 5008 l
-2407 5000 l
-2436 4991 l
-2464 4981 l
-2492 4971 l
-2520 4959 l
-2547 4946 l
-2574 4932 l
-2600 4918 l
-2626 4902 l
-2651 4886 l
-2676 4868 l
-2700 4850 l
-2723 4831 l
-2746 4812 l
-2768 4791 l
-2790 4770 l
-2810 4748 l
-2830 4725 l
-2849 4702 l
-2867 4678 l
-2884 4653 l
-2901 4628 l
-2916 4602 l
-2931 4576 l
-2945 4549 l
-2958 4522 l
-2969 4494 l
-2980 4466 l
-2990 4437 l
-2999 4409 l
-3007 4380 l
-3014 4350 l
-3020 4321 l
-3025 4291 l
-3028 4261 l
-3031 4231 l
-3033 4201 l
-3034 4171 l
-3033 4141 l
-3032 4111 l
-3029 4081 l
-3026 4051 l
-3021 4021 l
-3016 3991 l
-S
-3016 3991 m
-3009 3962 l
-3001 3933 l
-2993 3904 l
-2983 3875 l
-2973 3847 l
-S
-2704 3953 m
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3952 l
-2703 3952 l
-2703 3952 l
-2703 3951 l
-2702 3950 l
-2702 3948 l
-2701 3947 l
-2701 3946 l
-2700 3944 l
-2700 3943 l
-2699 3942 l
-2699 3940 l
-2698 3939 l
-2697 3938 l
-2697 3936 l
-2689 3918 l
-2680 3900 l
-2670 3882 l
-2660 3865 l
-2649 3848 l
-2638 3832 l
-2626 3815 l
-2613 3800 l
-2600 3784 l
-2587 3769 l
-2573 3755 l
-2558 3741 l
-2543 3728 l
-2528 3715 l
-2512 3703 l
-2496 3691 l
-2479 3680 l
-2462 3669 l
-2445 3659 l
-2427 3650 l
-2409 3641 l
-2390 3633 l
-2372 3626 l
-2353 3619 l
-2334 3613 l
-2314 3607 l
-2295 3602 l
-2275 3598 l
-2255 3595 l
-2236 3592 l
-2216 3590 l
-2196 3589 l
-2176 3588 l
-2155 3588 l
-2135 3589 l
-2115 3590 l
-2095 3592 l
-2076 3595 l
-2056 3599 l
-2036 3603 l
-2017 3608 l
-1997 3613 l
-1978 3619 l
-1959 3626 l
-1941 3634 l
-1922 3642 l
-1904 3651 l
-1887 3660 l
-1869 3670 l
-1852 3681 l
-1836 3692 l
-1819 3704 l
-1803 3716 l
-1788 3729 l
-1773 3742 l
-1759 3756 l
-1745 3771 l
-1731 3786 l
-1718 3801 l
-1706 3817 l
-1694 3833 l
-1683 3850 l
-1672 3867 l
-1662 3884 l
-1652 3902 l
-1644 3920 l
-1635 3938 l
-1628 3957 l
-1621 3975 l
-1614 3995 l
-1609 4014 l
-1604 4033 l
-1600 4053 l
-1596 4073 l
-1593 4093 l
-1591 4112 l
-1589 4133 l
-1589 4153 l
-1588 4173 l
-1589 4193 l
-1590 4213 l
-1592 4233 l
-1595 4253 l
-1598 4273 l
-1602 4292 l
-1607 4312 l
-1612 4331 l
-1618 4350 l
-1625 4369 l
-1632 4388 l
-1640 4406 l
-1649 4424 l
-1658 4442 l
-1668 4460 l
-1679 4477 l
-1690 4494 l
-1701 4510 l
-1714 4526 l
-1726 4541 l
-1740 4556 l
-1753 4571 l
-1768 4585 l
-1783 4599 l
-1798 4612 l
-1813 4624 l
-1830 4636 l
-1846 4648 l
-1863 4659 l
-1880 4669 l
-1898 4679 l
-1916 4688 l
-1934 4696 l
-1953 4704 l
-1971 4711 l
-1990 4717 l
-2010 4723 l
-2029 4728 l
-2049 4733 l
-2068 4736 l
-2088 4739 l
-2108 4742 l
-2128 4743 l
-2148 4744 l
-2168 4745 l
-2188 4744 l
-2208 4743 l
-2228 4741 l
-2248 4739 l
-2268 4736 l
-2288 4732 l
-2307 4727 l
-2327 4722 l
-2346 4716 l
-2365 4710 l
-2384 4702 l
-2402 4695 l
-2420 4686 l
-2438 4677 l
-2456 4667 l
-2473 4657 l
-2490 4646 l
-2506 4634 l
-2522 4622 l
-2538 4610 l
-2553 4597 l
-2568 4583 l
-2582 4569 l
-2596 4554 l
-2609 4539 l
-2621 4523 l
-2634 4507 l
-2645 4491 l
-2656 4474 l
-2666 4457 l
-2676 4439 l
-2685 4421 l
-2694 4403 l
-2702 4385 l
-2709 4366 l
-2716 4347 l
-2722 4328 l
-2727 4308 l
-2731 4289 l
-2735 4269 l
-2739 4249 l
-2741 4229 l
-2743 4209 l
-2744 4189 l
-2745 4169 l
-2744 4149 l
-2743 4129 l
-2742 4109 l
-2739 4089 l
-2736 4069 l
-2733 4050 l
-S
-2733 4050 m
-2728 4030 l
-2723 4011 l
-2717 3991 l
-2711 3972 l
-2704 3953 l
-S
-2435 4060 m
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2434 4058 l
-2434 4057 l
-2434 4057 l
-2434 4056 l
-2433 4055 l
-2433 4055 l
-2433 4054 l
-2432 4053 l
-2432 4053 l
-2432 4052 l
-2432 4051 l
-2427 4042 l
-2423 4033 l
-2418 4024 l
-2413 4016 l
-2408 4007 l
-2402 3999 l
-2396 3991 l
-2390 3983 l
-2383 3975 l
-2377 3968 l
-2370 3961 l
-2362 3954 l
-2355 3947 l
-2347 3941 l
-2339 3935 l
-2331 3929 l
-2323 3923 l
-2314 3918 l
-2305 3913 l
-2297 3908 l
-2288 3904 l
-2278 3900 l
-2269 3896 l
-2260 3893 l
-2250 3890 l
-2240 3887 l
-2231 3884 l
-2221 3882 l
-2211 3881 l
-2201 3879 l
-2191 3878 l
-2181 3878 l
-2171 3877 l
-2161 3877 l
-2151 3878 l
-2141 3878 l
-2131 3879 l
-2121 3881 l
-2111 3882 l
-2101 3885 l
-2092 3887 l
-2082 3890 l
-2072 3893 l
-2063 3896 l
-2054 3900 l
-2044 3904 l
-2035 3909 l
-2027 3913 l
-2018 3918 l
-2009 3924 l
-2001 3929 l
-1993 3935 l
-1985 3941 l
-1977 3948 l
-1970 3954 l
-1963 3961 l
-1956 3969 l
-1949 3976 l
-1942 3984 l
-1936 3992 l
-1930 4000 l
-1925 4008 l
-1919 4016 l
-1914 4025 l
-1909 4034 l
-1905 4043 l
-1901 4052 l
-1897 4061 l
-1894 4071 l
-1890 4080 l
-1888 4090 l
-1885 4100 l
-1883 4110 l
-1881 4120 l
-1880 4129 l
-1879 4139 l
-1878 4149 l
-1877 4159 l
-1877 4170 l
-1878 4180 l
-1878 4190 l
-1879 4200 l
-1881 4210 l
-1882 4219 l
-1884 4229 l
-1887 4239 l
-1889 4249 l
-1892 4258 l
-1896 4268 l
-1899 4277 l
-1903 4286 l
-1908 4295 l
-1912 4304 l
-1917 4313 l
-1923 4322 l
-1928 4330 l
-1934 4338 l
-1940 4346 l
-1946 4354 l
-1953 4361 l
-1960 4369 l
-1967 4376 l
-1974 4383 l
-1982 4389 l
-1990 4395 l
-1998 4401 l
-2006 4407 l
-2015 4412 l
-2023 4418 l
-2032 4422 l
-2041 4427 l
-2050 4431 l
-2059 4435 l
-2069 4439 l
-2078 4442 l
-2088 4445 l
-2098 4447 l
-2107 4449 l
-2117 4451 l
-2127 4453 l
-2137 4454 l
-2147 4455 l
-2157 4455 l
-2167 4456 l
-2177 4455 l
-2187 4455 l
-2197 4454 l
-2207 4453 l
-2217 4451 l
-2227 4449 l
-2237 4447 l
-2247 4444 l
-2256 4441 l
-2266 4438 l
-2275 4434 l
-2284 4430 l
-2293 4426 l
-2302 4422 l
-2311 4417 l
-2320 4412 l
-2328 4406 l
-2336 4400 l
-2344 4394 l
-2352 4388 l
-2360 4381 l
-2367 4375 l
-2374 4368 l
-2381 4360 l
-2388 4353 l
-2394 4345 l
-2400 4337 l
-2406 4329 l
-2411 4320 l
-2416 4312 l
-2421 4303 l
-2426 4294 l
-2430 4285 l
-2434 4276 l
-2438 4266 l
-2441 4257 l
-2444 4247 l
-2447 4237 l
-2449 4228 l
-2451 4218 l
-2452 4208 l
-2454 4198 l
-2455 4188 l
-2455 4178 l
-2455 4168 l
-2455 4158 l
-2455 4148 l
-2454 4138 l
-2453 4128 l
-2451 4118 l
-2450 4108 l
-S
-2450 4108 m
-2447 4098 l
-2445 4088 l
-2442 4079 l
-2439 4069 l
-2435 4060 l
-S
-2166 4166 m
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1 1 0 rg
-3682 3323 m
-3655 3337 l
-S
-3559 3132 m
-3534 3150 l
-S
-3412 2959 m
-3390 2980 l
-S
-3057 2677 m
-3041 2704 l
-S
-2855 2574 m
-2843 2602 l
-S
-2642 2498 m
-2633 2527 l
-S
-2194 2431 m
-2193 2462 l
-S
-1967 2443 m
-1971 2473 l
-S
-1744 2483 m
-1751 2513 l
-S
-1323 2650 m
-1338 2677 l
-S
-1132 2773 m
-1151 2798 l
-S
-960 2920 m
-981 2942 l
-S
-678 3275 m
-704 3291 l
-S
-575 3477 m
-603 3489 l
-S
-651 5010 m
-678 4995 l
-S
-774 5201 m
-799 5183 l
-S
-921 5374 m
-943 5353 l
-S
-1276 5655 m
-1291 5629 l
-S
-1478 5759 m
-1490 5731 l
-S
-1691 5835 m
-1700 5806 l
-S
-2139 5901 m
-2140 5871 l
-S
-2366 5890 m
-2362 5860 l
-S
-2589 5849 m
-2582 5820 l
-S
-3010 5683 m
-2995 5656 l
-S
-3200 5560 m
-3182 5535 l
-S
-3373 5413 m
-3352 5391 l
-S
-3655 5058 m
-3628 5042 l
-S
-3758 4856 m
-3730 4844 l
-S
-3834 4642 m
-3805 4634 l
-S
-3900 4194 m
-3870 4193 l
-S
-3889 3967 m
-3859 3971 l
-S
-3848 3744 m
-3819 3751 l
-S
-4787 3129 m
-4799 3156 l
-S
-4719 3155 m
-4732 3183 l
-S
-4652 3182 m
-4665 3209 l
-S
-4518 3235 m
-4531 3263 l
-S
-4451 3262 m
-4463 3289 l
-S
-4384 3288 m
-4396 3316 l
-S
-4249 3341 m
-4262 3369 l
-S
-4182 3368 m
-4195 3396 l
-S
-4115 3395 m
-4127 3422 l
-S
-3980 3448 m
-3993 3476 l
-S
-3913 3474 m
-3926 3502 l
-S
-3846 3501 m
-3859 3529 l
-S
-3712 3554 m
-3724 3582 l
-S
-3645 3581 m
-3657 3609 l
-S
-3577 3608 m
-3590 3635 l
-S
-3443 3661 m
-3456 3688 l
-S
-3376 3687 m
-3388 3715 l
-S
-3309 3714 m
-3321 3742 l
-S
-3174 3767 m
-3187 3795 l
-S
-3107 3794 m
-3120 3821 l
-S
-3040 3820 m
-3052 3848 l
-S
-2905 3874 m
-2918 3901 l
-S
-2838 3900 m
-2851 3928 l
-S
-2771 3927 m
-2784 3955 l
-S
-2637 3980 m
-2649 4008 l
-S
-2570 4007 m
-2582 4034 l
-S
-2502 4033 m
-2515 4061 l
-S
-2368 4087 m
-2381 4114 l
-S
-2301 4113 m
-2313 4141 l
-S
-2234 4140 m
-2246 4167 l
-S
-3779 3528 m
-3754 3468 l
-3727 3409 l
-3697 3351 l
-3666 3294 l
-3632 3239 l
-3596 3185 l
-3559 3132 l
-3519 3080 l
-3478 3031 l
-3434 2982 l
-3389 2936 l
-3342 2891 l
-3294 2848 l
-3244 2807 l
-S
-3244 2807 m
-3192 2767 l
-3139 2730 l
-3085 2694 l
-3029 2661 l
-2972 2630 l
-2914 2601 l
-2855 2574 l
-2795 2549 l
-2734 2527 l
-2673 2507 l
-2610 2489 l
-2547 2473 l
-2484 2460 l
-2420 2450 l
-S
-2420 2450 m
-2355 2441 l
-2291 2436 l
-2226 2432 l
-2161 2431 l
-2096 2432 l
-2032 2436 l
-1967 2443 l
-1903 2451 l
-1839 2462 l
-1775 2476 l
-1713 2492 l
-1650 2510 l
-1589 2530 l
-1528 2553 l
-S
-1528 2553 m
-1468 2578 l
-1409 2605 l
-1351 2635 l
-1295 2666 l
-1239 2700 l
-1185 2735 l
-1132 2773 l
-1081 2813 l
-1031 2854 l
-983 2898 l
-936 2943 l
-892 2990 l
-849 3038 l
-807 3088 l
-S
-807 3088 m
-768 3140 l
-731 3193 l
-695 3247 l
-662 3303 l
-631 3360 l
-602 3418 l
-575 3477 l
-550 3537 l
-533 3583 l
-S
-533 4749 m
-554 4805 l
-S
-554 4805 m
-579 4865 l
-606 4924 l
-636 4982 l
-667 5038 l
-701 5094 l
-736 5148 l
-774 5201 l
-814 5252 l
-855 5302 l
-899 5350 l
-944 5397 l
-991 5442 l
-1039 5485 l
-1089 5526 l
-S
-1089 5526 m
-1141 5566 l
-1194 5603 l
-1248 5638 l
-1304 5672 l
-1361 5703 l
-1419 5732 l
-1478 5759 l
-1538 5784 l
-1599 5806 l
-1660 5826 l
-1723 5844 l
-1786 5859 l
-1849 5872 l
-1913 5883 l
-S
-1913 5883 m
-1977 5891 l
-2042 5897 l
-2107 5901 l
-2172 5902 l
-2237 5900 l
-2301 5896 l
-2366 5890 l
-2430 5881 l
-2494 5870 l
-2557 5857 l
-2620 5841 l
-2683 5823 l
-2744 5803 l
-2805 5780 l
-S
-2805 5780 m
-2865 5755 l
-2924 5728 l
-2981 5698 l
-3038 5667 l
-3094 5633 l
-3148 5597 l
-3200 5560 l
-3252 5520 l
-3302 5478 l
-3350 5435 l
-3396 5390 l
-3441 5343 l
-3484 5294 l
-3526 5244 l
-S
-3526 5244 m
-3565 5193 l
-3602 5140 l
-3638 5085 l
-3671 5030 l
-3702 4973 l
-3731 4915 l
-3758 4856 l
-3783 4796 l
-3805 4735 l
-3825 4673 l
-3843 4611 l
-3858 4548 l
-3871 4484 l
-3882 4420 l
-S
-3882 4420 m
-3890 4356 l
-3896 4291 l
-3900 4226 l
-3901 4161 l
-3899 4096 l
-3895 4032 l
-3889 3967 l
-3881 3903 l
-3869 3839 l
-3856 3775 l
-3840 3712 l
-3822 3650 l
-3802 3588 l
-3800 3584 l
-3799 3580 l
-3797 3575 l
-3795 3571 l
-3794 3567 l
-3792 3562 l
-3791 3558 l
-3789 3554 l
-3787 3549 l
-3786 3545 l
-3784 3541 l
-3782 3536 l
-3781 3532 l
-3780 3532 l
-3780 3531 l
-3780 3531 l
-3780 3531 l
-3780 3530 l
-3780 3530 l
-3780 3530 l
-3780 3530 l
-3779 3529 l
-3779 3529 l
-3779 3529 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-S
-4877 3093 m
-4873 3094 l
-4854 3102 l
-S
-4854 3102 m
-4835 3110 l
-4815 3117 l
-4796 3125 l
-4777 3132 l
-4758 3140 l
-4739 3148 l
-4719 3155 l
-4700 3163 l
-4681 3170 l
-4662 3178 l
-4643 3186 l
-4624 3193 l
-4604 3201 l
-4585 3208 l
-S
-4585 3208 m
-4566 3216 l
-4547 3224 l
-4528 3231 l
-4508 3239 l
-4489 3246 l
-4470 3254 l
-4451 3262 l
-4432 3269 l
-4412 3277 l
-4393 3284 l
-4374 3292 l
-4355 3300 l
-4336 3307 l
-4316 3315 l
-S
-4316 3315 m
-4297 3322 l
-4278 3330 l
-4259 3338 l
-4240 3345 l
-4220 3353 l
-4201 3360 l
-4182 3368 l
-4163 3376 l
-4144 3383 l
-4124 3391 l
-4105 3398 l
-4086 3406 l
-4067 3414 l
-4048 3421 l
-S
-4048 3421 m
-4028 3429 l
-4009 3436 l
-3990 3444 l
-3971 3452 l
-3952 3459 l
-3932 3467 l
-3913 3474 l
-3894 3482 l
-3875 3490 l
-3856 3497 l
-3836 3505 l
-3817 3512 l
-3798 3520 l
-3779 3528 l
-S
-3779 3528 m
-3760 3535 l
-3740 3543 l
-3721 3551 l
-3702 3558 l
-3683 3566 l
-3664 3573 l
-3645 3581 l
-3625 3589 l
-3606 3596 l
-3587 3604 l
-3568 3611 l
-3549 3619 l
-3529 3627 l
-3510 3634 l
-S
-3510 3634 m
-3491 3642 l
-3472 3649 l
-3453 3657 l
-3433 3665 l
-3414 3672 l
-3395 3680 l
-3376 3687 l
-3357 3695 l
-3337 3703 l
-3318 3710 l
-3299 3718 l
-3280 3725 l
-3261 3733 l
-3241 3741 l
-S
-3241 3741 m
-3222 3748 l
-3203 3756 l
-3184 3763 l
-3165 3771 l
-3145 3779 l
-3126 3786 l
-3107 3794 l
-3088 3801 l
-3069 3809 l
-3049 3817 l
-3030 3824 l
-3011 3832 l
-2992 3839 l
-2973 3847 l
-S
-2973 3847 m
-2953 3855 l
-2934 3862 l
-2915 3870 l
-2896 3877 l
-2877 3885 l
-2857 3893 l
-2838 3900 l
-2819 3908 l
-2800 3915 l
-2781 3923 l
-2762 3931 l
-2742 3938 l
-2723 3946 l
-2704 3953 l
-S
-2704 3953 m
-2685 3961 l
-2666 3969 l
-2646 3976 l
-2627 3984 l
-2608 3991 l
-2589 3999 l
-2570 4007 l
-2550 4014 l
-2531 4022 l
-2512 4029 l
-2493 4037 l
-2474 4045 l
-2454 4052 l
-2435 4060 l
-S
-2435 4060 m
-2416 4068 l
-2397 4075 l
-2378 4083 l
-2358 4090 l
-2339 4098 l
-2320 4106 l
-2301 4113 l
-2282 4121 l
-2262 4128 l
-2243 4136 l
-2224 4144 l
-2205 4151 l
-2186 4159 l
-2166 4166 l
-S
-2166 4166 m
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1 g
-3911 3420 m
-3914 3420 l
-3914 3421 l
-3911 3421 l
-3908 3421 m
-3914 3421 l
-3914 3422 l
-3908 3422 l
-3906 3422 m
-3915 3422 l
-3915 3423 l
-3906 3423 l
-3903 3423 m
-3915 3423 l
-3915 3424 l
-3903 3424 l
-3901 3424 m
-3916 3424 l
-3916 3425 l
-3901 3425 l
-3898 3425 m
-3916 3425 l
-3916 3426 l
-3898 3426 l
-3896 3426 m
-3916 3426 l
-3916 3427 l
-3896 3427 l
-3893 3427 m
-3917 3427 l
-3917 3428 l
-3893 3428 l
-3891 3428 m
-3917 3428 l
-3917 3429 l
-3891 3429 l
-3888 3429 m
-3918 3429 l
-3918 3430 l
-3888 3430 l
-3886 3430 m
-3918 3430 l
-3918 3431 l
-3886 3431 l
-3883 3431 m
-3918 3431 l
-3918 3432 l
-3883 3432 l
-3881 3432 m
-3919 3432 l
-3919 3433 l
-3881 3433 l
-3878 3433 m
-3919 3433 l
-3919 3434 l
-3878 3434 l
-3876 3434 m
-3920 3434 l
-3920 3435 l
-3876 3435 l
-3873 3435 m
-3920 3435 l
-3920 3436 l
-3873 3436 l
-3871 3436 m
-3920 3436 l
-3920 3437 l
-3871 3437 l
-3868 3437 m
-3921 3437 l
-3921 3438 l
-3868 3438 l
-3866 3438 m
-3921 3438 l
-3921 3439 l
-3866 3439 l
-3863 3439 m
-3922 3439 l
-3922 3440 l
-3863 3440 l
-3861 3440 m
-3922 3440 l
-3922 3441 l
-3861 3441 l
-3858 3441 m
-3922 3441 l
-3922 3442 l
-3858 3442 l
-3856 3442 m
-3923 3442 l
-3923 3443 l
-3856 3443 l
-3853 3443 m
-3923 3443 l
-3923 3444 l
-3853 3444 l
-3851 3444 m
-3924 3444 l
-3924 3445 l
-3851 3445 l
-3848 3445 m
-3924 3445 l
-3924 3446 l
-3848 3446 l
-3846 3446 m
-3924 3446 l
-3924 3447 l
-3846 3447 l
-3843 3447 m
-3925 3447 l
-3925 3448 l
-3843 3448 l
-3841 3448 m
-3925 3448 l
-3925 3449 l
-3841 3449 l
-3838 3449 m
-3926 3449 l
-3926 3450 l
-3838 3450 l
-3836 3450 m
-3926 3450 l
-3926 3451 l
-3836 3451 l
-3833 3451 m
-3926 3451 l
-3926 3452 l
-3833 3452 l
-3831 3452 m
-3927 3452 l
-3927 3453 l
-3831 3453 l
-3828 3453 m
-3927 3453 l
-3927 3454 l
-3828 3454 l
-3826 3454 m
-3927 3454 l
-3927 3455 l
-3826 3455 l
-3823 3455 m
-3928 3455 l
-3928 3456 l
-3823 3456 l
-3821 3456 m
-3928 3456 l
-3928 3457 l
-3821 3457 l
-3818 3457 m
-3929 3457 l
-3929 3458 l
-3818 3458 l
-3816 3458 m
-3929 3458 l
-3929 3459 l
-3816 3459 l
-3813 3459 m
-3929 3459 l
-3929 3460 l
-3813 3460 l
-3811 3460 m
-3930 3460 l
-3930 3461 l
-3811 3461 l
-3808 3461 m
-3930 3461 l
-3930 3462 l
-3808 3462 l
-3806 3462 m
-3931 3462 l
-3931 3463 l
-3806 3463 l
-3803 3463 m
-3931 3463 l
-3931 3464 l
-3803 3464 l
-3801 3464 m
-3931 3464 l
-3931 3465 l
-3801 3465 l
-3801 3465 m
-3932 3465 l
-3932 3467 l
-3801 3467 l
-3801 3467 m
-3933 3467 l
-3933 3468 l
-3801 3468 l
-3802 3468 m
-3933 3468 l
-3933 3470 l
-3802 3470 l
-3802 3470 m
-3934 3470 l
-3934 3471 l
-3802 3471 l
-3803 3471 m
-3934 3471 l
-3934 3472 l
-3803 3472 l
-3803 3472 m
-3935 3472 l
-3935 3473 l
-3803 3473 l
-3804 3473 m
-3935 3473 l
-3935 3475 l
-3804 3475 l
-3804 3475 m
-3936 3475 l
-3936 3476 l
-3804 3476 l
-3805 3476 m
-3936 3476 l
-3936 3477 l
-3805 3477 l
-3805 3477 m
-3937 3477 l
-3937 3478 l
-3805 3478 l
-3806 3478 m
-3937 3478 l
-3937 3480 l
-3806 3480 l
-3806 3480 m
-3938 3480 l
-3938 3481 l
-3806 3481 l
-3807 3481 m
-3938 3481 l
-3938 3482 l
-3807 3482 l
-3807 3482 m
-3939 3482 l
-3939 3483 l
-3807 3483 l
-3808 3483 m
-3939 3483 l
-3939 3485 l
-3808 3485 l
-3808 3485 m
-3940 3485 l
-3940 3486 l
-3808 3486 l
-3809 3486 m
-3940 3486 l
-3940 3487 l
-3809 3487 l
-3809 3487 m
-3941 3487 l
-3941 3488 l
-3809 3488 l
-3810 3488 m
-3941 3488 l
-3941 3490 l
-3810 3490 l
-3810 3490 m
-3942 3490 l
-3942 3491 l
-3810 3491 l
-3811 3491 m
-3942 3491 l
-3942 3492 l
-3811 3492 l
-3811 3492 m
-3943 3492 l
-3943 3493 l
-3811 3493 l
-3812 3493 m
-3943 3493 l
-3943 3495 l
-3812 3495 l
-3812 3495 m
-3944 3495 l
-3944 3496 l
-3812 3496 l
-3813 3496 m
-3944 3496 l
-3944 3497 l
-3813 3497 l
-3813 3497 m
-3945 3497 l
-3945 3498 l
-3813 3498 l
-3814 3498 m
-3945 3498 l
-3945 3500 l
-3814 3500 l
-3814 3500 m
-3946 3500 l
-3946 3501 l
-3814 3501 l
-3815 3501 m
-3946 3501 l
-3946 3502 l
-3815 3502 l
-3815 3502 m
-3947 3502 l
-3947 3503 l
-3815 3503 l
-3816 3503 m
-3947 3503 l
-3947 3505 l
-3816 3505 l
-3816 3505 m
-3948 3505 l
-3948 3506 l
-3816 3506 l
-3817 3506 m
-3948 3506 l
-3948 3507 l
-3817 3507 l
-3817 3507 m
-3949 3507 l
-3949 3508 l
-3817 3508 l
-3818 3508 m
-3949 3508 l
-3949 3510 l
-3818 3510 l
-3818 3510 m
-3950 3510 l
-3950 3511 l
-3818 3511 l
-3819 3511 m
-3950 3511 l
-3950 3512 l
-3819 3512 l
-3819 3512 m
-3950 3512 l
-3950 3513 l
-3819 3513 l
-3820 3513 m
-3950 3513 l
-3950 3514 l
-3820 3514 l
-3820 3514 m
-3948 3514 l
-3948 3515 l
-3820 3515 l
-3820 3515 m
-3946 3515 l
-3946 3516 l
-3820 3516 l
-3821 3516 m
-3943 3516 l
-3943 3517 l
-3821 3517 l
-3821 3517 m
-3941 3517 l
-3941 3518 l
-3821 3518 l
-3822 3518 m
-3938 3518 l
-3938 3519 l
-3822 3519 l
-3822 3519 m
-3936 3519 l
-3936 3520 l
-3822 3520 l
-3822 3520 m
-3933 3520 l
-3933 3521 l
-3822 3521 l
-3823 3521 m
-3931 3521 l
-3931 3522 l
-3823 3522 l
-3823 3522 m
-3928 3522 l
-3928 3523 l
-3823 3523 l
-3824 3523 m
-3926 3523 l
-3926 3524 l
-3824 3524 l
-3824 3524 m
-3923 3524 l
-3923 3525 l
-3824 3525 l
-3824 3525 m
-3921 3525 l
-3921 3526 l
-3824 3526 l
-3825 3526 m
-3918 3526 l
-3918 3527 l
-3825 3527 l
-3825 3527 m
-3916 3527 l
-3916 3528 l
-3825 3528 l
-3826 3528 m
-3913 3528 l
-3913 3529 l
-3826 3529 l
-3826 3529 m
-3911 3529 l
-3911 3530 l
-3826 3530 l
-3826 3530 m
-3908 3530 l
-3908 3531 l
-3826 3531 l
-3827 3531 m
-3906 3531 l
-3906 3532 l
-3827 3532 l
-3827 3532 m
-3903 3532 l
-3903 3533 l
-3827 3533 l
-3828 3533 m
-3901 3533 l
-3901 3534 l
-3828 3534 l
-3828 3534 m
-3898 3534 l
-3898 3535 l
-3828 3535 l
-3828 3535 m
-3896 3535 l
-3896 3536 l
-3828 3536 l
-3829 3536 m
-3893 3536 l
-3893 3537 l
-3829 3537 l
-3829 3537 m
-3891 3537 l
-3891 3538 l
-3829 3538 l
-3830 3538 m
-3888 3538 l
-3888 3539 l
-3830 3539 l
-3830 3539 m
-3886 3539 l
-3886 3540 l
-3830 3540 l
-3830 3540 m
-3883 3540 l
-3883 3541 l
-3830 3541 l
-3831 3541 m
-3881 3541 l
-3881 3542 l
-3831 3542 l
-3831 3542 m
-3878 3542 l
-3878 3543 l
-3831 3543 l
-3832 3543 m
-3876 3543 l
-3876 3544 l
-3832 3544 l
-3832 3544 m
-3873 3544 l
-3873 3545 l
-3832 3545 l
-3832 3545 m
-3871 3545 l
-3871 3546 l
-3832 3546 l
-3833 3546 m
-3868 3546 l
-3868 3547 l
-3833 3547 l
-3833 3547 m
-3866 3547 l
-3866 3548 l
-3833 3548 l
-3834 3548 m
-3863 3548 l
-3863 3549 l
-3834 3549 l
-3834 3549 m
-3861 3549 l
-3861 3550 l
-3834 3550 l
-3834 3550 m
-3858 3550 l
-3858 3551 l
-3834 3551 l
-3835 3551 m
-3856 3551 l
-3856 3552 l
-3835 3552 l
-3835 3552 m
-3853 3552 l
-3853 3553 l
-3835 3553 l
-3836 3553 m
-3851 3553 l
-3851 3554 l
-3836 3554 l
-3836 3554 m
-3848 3554 l
-3848 3555 l
-3836 3555 l
-3836 3555 m
-3846 3555 l
-3846 3556 l
-3836 3556 l
-3837 3556 m
-3843 3556 l
-3843 3557 l
-3837 3557 l
-3837 3557 m
-3841 3557 l
-3841 3558 l
-3837 3558 l
-Y
-3913.2 3420.2 m
-3801 3465 l
-3838 3558 l
-3950 3513 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3833 3502 m
-3832 3488 l
-3841 3476 l
-3859 3464 l
-3870 3460 l
-3891 3456 l
-3906 3459 l
-3915 3469 l
-3918 3477 l
-3919 3490 l
-3910 3502 l
-3892 3514 l
-3880 3519 l
-3860 3523 l
-3845 3519 l
-3836 3509 l
-3833 3502 l
-S
-1 g
-3305 2646 m
-3308 2646 l
-3308 2647 l
-3305 2647 l
-3304 2647 m
-3309 2647 l
-3309 2648 l
-3304 2648 l
-3304 2648 m
-3310 2648 l
-3310 2649 l
-3304 2649 l
-3303 2649 m
-3311 2649 l
-3311 2650 l
-3303 2650 l
-3302 2650 m
-3313 2650 l
-3313 2651 l
-3302 2651 l
-3301 2651 m
-3314 2651 l
-3314 2652 l
-3301 2652 l
-3300 2652 m
-3315 2652 l
-3315 2653 l
-3300 2653 l
-3300 2653 m
-3317 2653 l
-3317 2654 l
-3300 2654 l
-3299 2654 m
-3318 2654 l
-3318 2655 l
-3299 2655 l
-3298 2655 m
-3319 2655 l
-3319 2656 l
-3298 2656 l
-3297 2656 m
-3320 2656 l
-3320 2657 l
-3297 2657 l
-3296 2657 m
-3322 2657 l
-3322 2658 l
-3296 2658 l
-3296 2658 m
-3323 2658 l
-3323 2659 l
-3296 2659 l
-3295 2659 m
-3324 2659 l
-3324 2660 l
-3295 2660 l
-3294 2660 m
-3325 2660 l
-3325 2661 l
-3294 2661 l
-3293 2661 m
-3327 2661 l
-3327 2662 l
-3293 2662 l
-3292 2662 m
-3328 2662 l
-3328 2663 l
-3292 2663 l
-3292 2663 m
-3329 2663 l
-3329 2664 l
-3292 2664 l
-3291 2664 m
-3331 2664 l
-3331 2665 l
-3291 2665 l
-3290 2665 m
-3332 2665 l
-3332 2666 l
-3290 2666 l
-3289 2666 m
-3333 2666 l
-3333 2667 l
-3289 2667 l
-3288 2667 m
-3334 2667 l
-3334 2668 l
-3288 2668 l
-3288 2668 m
-3336 2668 l
-3336 2669 l
-3288 2669 l
-3287 2669 m
-3337 2669 l
-3337 2670 l
-3287 2670 l
-3286 2670 m
-3338 2670 l
-3338 2671 l
-3286 2671 l
-3285 2671 m
-3340 2671 l
-3340 2672 l
-3285 2672 l
-3284 2672 m
-3341 2672 l
-3341 2673 l
-3284 2673 l
-3284 2673 m
-3342 2673 l
-3342 2674 l
-3284 2674 l
-3283 2674 m
-3343 2674 l
-3343 2675 l
-3283 2675 l
-3282 2675 m
-3345 2675 l
-3345 2676 l
-3282 2676 l
-3281 2676 m
-3346 2676 l
-3346 2677 l
-3281 2677 l
-3281 2677 m
-3347 2677 l
-3347 2678 l
-3281 2678 l
-3280 2678 m
-3348 2678 l
-3348 2679 l
-3280 2679 l
-3279 2679 m
-3350 2679 l
-3350 2680 l
-3279 2680 l
-3278 2680 m
-3351 2680 l
-3351 2681 l
-3278 2681 l
-3277 2681 m
-3352 2681 l
-3352 2682 l
-3277 2682 l
-3277 2682 m
-3354 2682 l
-3354 2683 l
-3277 2683 l
-3276 2683 m
-3355 2683 l
-3355 2684 l
-3276 2684 l
-3275 2684 m
-3356 2684 l
-3356 2685 l
-3275 2685 l
-3274 2685 m
-3357 2685 l
-3357 2686 l
-3274 2686 l
-3273 2686 m
-3359 2686 l
-3359 2687 l
-3273 2687 l
-3273 2687 m
-3360 2687 l
-3360 2688 l
-3273 2688 l
-3272 2688 m
-3361 2688 l
-3361 2689 l
-3272 2689 l
-3271 2689 m
-3363 2689 l
-3363 2690 l
-3271 2690 l
-3270 2690 m
-3364 2690 l
-3364 2691 l
-3270 2691 l
-3269 2691 m
-3365 2691 l
-3365 2692 l
-3269 2692 l
-3269 2692 m
-3366 2692 l
-3366 2693 l
-3269 2693 l
-3268 2693 m
-3368 2693 l
-3368 2694 l
-3268 2694 l
-3267 2694 m
-3369 2694 l
-3369 2695 l
-3267 2695 l
-3266 2695 m
-3370 2695 l
-3370 2696 l
-3266 2696 l
-3265 2696 m
-3371 2696 l
-3371 2697 l
-3265 2697 l
-3265 2697 m
-3373 2697 l
-3373 2698 l
-3265 2698 l
-3264 2698 m
-3374 2698 l
-3374 2699 l
-3264 2699 l
-3263 2699 m
-3375 2699 l
-3375 2700 l
-3263 2700 l
-3262 2700 m
-3377 2700 l
-3377 2701 l
-3262 2701 l
-3261 2701 m
-3378 2701 l
-3378 2702 l
-3261 2702 l
-3261 2702 m
-3379 2702 l
-3379 2703 l
-3261 2703 l
-3260 2703 m
-3380 2703 l
-3380 2704 l
-3260 2704 l
-3259 2704 m
-3382 2704 l
-3382 2705 l
-3259 2705 l
-3258 2705 m
-3383 2705 l
-3383 2706 l
-3258 2706 l
-3257 2706 m
-3384 2706 l
-3384 2707 l
-3257 2707 l
-3257 2707 m
-3385 2707 l
-3385 2708 l
-3257 2708 l
-3256 2708 m
-3385 2708 l
-3385 2709 l
-3256 2709 l
-3255 2709 m
-3385 2709 l
-3385 2710 l
-3255 2710 l
-3254 2710 m
-3384 2710 l
-3384 2711 l
-3254 2711 l
-3254 2711 m
-3383 2711 l
-3383 2712 l
-3254 2712 l
-3253 2712 m
-3382 2712 l
-3382 2713 l
-3253 2713 l
-3252 2713 m
-3382 2713 l
-3382 2714 l
-3252 2714 l
-3251 2714 m
-3381 2714 l
-3381 2715 l
-3251 2715 l
-3250 2715 m
-3380 2715 l
-3380 2716 l
-3250 2716 l
-3250 2716 m
-3379 2716 l
-3379 2717 l
-3250 2717 l
-3249 2717 m
-3378 2717 l
-3378 2718 l
-3249 2718 l
-3248 2718 m
-3378 2718 l
-3378 2719 l
-3248 2719 l
-3247 2719 m
-3377 2719 l
-3377 2720 l
-3247 2720 l
-3246 2720 m
-3376 2720 l
-3376 2721 l
-3246 2721 l
-3246 2721 m
-3375 2721 l
-3375 2722 l
-3246 2722 l
-3245 2722 m
-3374 2722 l
-3374 2723 l
-3245 2723 l
-3244 2723 m
-3374 2723 l
-3374 2724 l
-3244 2724 l
-3243 2724 m
-3373 2724 l
-3373 2725 l
-3243 2725 l
-3242 2725 m
-3372 2725 l
-3372 2726 l
-3242 2726 l
-3242 2726 m
-3371 2726 l
-3371 2727 l
-3242 2727 l
-3241 2727 m
-3370 2727 l
-3370 2728 l
-3241 2728 l
-3240 2728 m
-3370 2728 l
-3370 2729 l
-3240 2729 l
-3239 2729 m
-3369 2729 l
-3369 2730 l
-3239 2730 l
-3238 2730 m
-3368 2730 l
-3368 2731 l
-3238 2731 l
-3238 2731 m
-3367 2731 l
-3367 2732 l
-3238 2732 l
-3237 2732 m
-3367 2732 l
-3367 2733 l
-3237 2733 l
-3236 2733 m
-3366 2733 l
-3366 2734 l
-3236 2734 l
-3235 2734 m
-3365 2734 l
-3365 2735 l
-3235 2735 l
-3234 2735 m
-3364 2735 l
-3364 2736 l
-3234 2736 l
-3234 2736 m
-3363 2736 l
-3363 2737 l
-3234 2737 l
-3233 2737 m
-3363 2737 l
-3363 2738 l
-3233 2738 l
-3232 2738 m
-3362 2738 l
-3362 2739 l
-3232 2739 l
-3231 2739 m
-3361 2739 l
-3361 2740 l
-3231 2740 l
-3231 2740 m
-3360 2740 l
-3360 2741 l
-3231 2741 l
-3231 2741 m
-3359 2741 l
-3359 2742 l
-3231 2742 l
-3232 2742 m
-3359 2742 l
-3359 2743 l
-3232 2743 l
-3233 2743 m
-3358 2743 l
-3358 2744 l
-3233 2744 l
-3234 2744 m
-3357 2744 l
-3357 2745 l
-3234 2745 l
-3236 2745 m
-3356 2745 l
-3356 2746 l
-3236 2746 l
-3237 2746 m
-3355 2746 l
-3355 2747 l
-3237 2747 l
-3238 2747 m
-3355 2747 l
-3355 2748 l
-3238 2748 l
-3239 2748 m
-3354 2748 l
-3354 2749 l
-3239 2749 l
-3241 2749 m
-3353 2749 l
-3353 2750 l
-3241 2750 l
-3242 2750 m
-3352 2750 l
-3352 2751 l
-3242 2751 l
-3243 2751 m
-3352 2751 l
-3352 2752 l
-3243 2752 l
-3245 2752 m
-3351 2752 l
-3351 2753 l
-3245 2753 l
-3246 2753 m
-3350 2753 l
-3350 2754 l
-3246 2754 l
-3247 2754 m
-3349 2754 l
-3349 2755 l
-3247 2755 l
-3248 2755 m
-3348 2755 l
-3348 2756 l
-3248 2756 l
-3250 2756 m
-3348 2756 l
-3348 2757 l
-3250 2757 l
-3251 2757 m
-3347 2757 l
-3347 2758 l
-3251 2758 l
-3252 2758 m
-3346 2758 l
-3346 2759 l
-3252 2759 l
-3253 2759 m
-3345 2759 l
-3345 2760 l
-3253 2760 l
-3255 2760 m
-3344 2760 l
-3344 2761 l
-3255 2761 l
-3256 2761 m
-3344 2761 l
-3344 2762 l
-3256 2762 l
-3257 2762 m
-3343 2762 l
-3343 2763 l
-3257 2763 l
-3259 2763 m
-3342 2763 l
-3342 2764 l
-3259 2764 l
-3260 2764 m
-3341 2764 l
-3341 2765 l
-3260 2765 l
-3261 2765 m
-3340 2765 l
-3340 2766 l
-3261 2766 l
-3262 2766 m
-3340 2766 l
-3340 2767 l
-3262 2767 l
-3264 2767 m
-3339 2767 l
-3339 2768 l
-3264 2768 l
-3265 2768 m
-3338 2768 l
-3338 2769 l
-3265 2769 l
-3266 2769 m
-3337 2769 l
-3337 2770 l
-3266 2770 l
-3267 2770 m
-3337 2770 l
-3337 2771 l
-3267 2771 l
-3269 2771 m
-3336 2771 l
-3336 2772 l
-3269 2772 l
-3270 2772 m
-3335 2772 l
-3335 2773 l
-3270 2773 l
-3271 2773 m
-3334 2773 l
-3334 2774 l
-3271 2774 l
-3273 2774 m
-3333 2774 l
-3333 2775 l
-3273 2775 l
-3274 2775 m
-3333 2775 l
-3333 2776 l
-3274 2776 l
-3275 2776 m
-3332 2776 l
-3332 2777 l
-3275 2777 l
-3276 2777 m
-3331 2777 l
-3331 2778 l
-3276 2778 l
-3278 2778 m
-3330 2778 l
-3330 2779 l
-3278 2779 l
-3279 2779 m
-3329 2779 l
-3329 2780 l
-3279 2780 l
-3280 2780 m
-3329 2780 l
-3329 2781 l
-3280 2781 l
-3281 2781 m
-3328 2781 l
-3328 2782 l
-3281 2782 l
-3283 2782 m
-3327 2782 l
-3327 2783 l
-3283 2783 l
-3284 2783 m
-3326 2783 l
-3326 2784 l
-3284 2784 l
-3285 2784 m
-3325 2784 l
-3325 2785 l
-3285 2785 l
-3287 2785 m
-3325 2785 l
-3325 2786 l
-3287 2786 l
-3288 2786 m
-3324 2786 l
-3324 2787 l
-3288 2787 l
-3289 2787 m
-3323 2787 l
-3323 2788 l
-3289 2788 l
-3290 2788 m
-3322 2788 l
-3322 2789 l
-3290 2789 l
-3292 2789 m
-3322 2789 l
-3322 2790 l
-3292 2790 l
-3293 2790 m
-3321 2790 l
-3321 2791 l
-3293 2791 l
-3294 2791 m
-3320 2791 l
-3320 2792 l
-3294 2792 l
-3295 2792 m
-3319 2792 l
-3319 2793 l
-3295 2793 l
-3297 2793 m
-3318 2793 l
-3318 2794 l
-3297 2794 l
-3298 2794 m
-3318 2794 l
-3318 2795 l
-3298 2795 l
-3299 2795 m
-3317 2795 l
-3317 2796 l
-3299 2796 l
-3301 2796 m
-3316 2796 l
-3316 2797 l
-3301 2797 l
-3302 2797 m
-3315 2797 l
-3315 2798 l
-3302 2798 l
-3303 2798 m
-3314 2798 l
-3314 2799 l
-3303 2799 l
-3304 2799 m
-3314 2799 l
-3314 2800 l
-3304 2800 l
-3306 2800 m
-3313 2800 l
-3313 2801 l
-3306 2801 l
-3307 2801 m
-3312 2801 l
-3312 2802 l
-3307 2802 l
-3308 2802 m
-3311 2802 l
-3311 2803 l
-3308 2803 l
-Y
-3306.2 2646.3 m
-3231 2741 l
-3310 2803 l
-3385 2708 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3274 2727 m
-3272 2731 l
-3270 2740 l
-3270 2746 l
-3274 2754 l
-3287 2764 l
-3297 2766 l
-3302 2766 l
-3311 2762 l
-3316 2755 l
-3318 2746 l
-3319 2731 l
-3312 2672 l
-3358 2709 l
-S
-1 g
-2393 2280 m
-2403 2280 l
-2403 2281 l
-2393 2281 l
-2393 2281 m
-2410 2281 l
-2410 2282 l
-2393 2282 l
-2393 2282 m
-2417 2282 l
-2417 2283 l
-2393 2283 l
-2393 2283 m
-2423 2283 l
-2423 2284 l
-2393 2284 l
-2393 2284 m
-2430 2284 l
-2430 2285 l
-2393 2285 l
-2392 2285 m
-2437 2285 l
-2437 2286 l
-2392 2286 l
-2392 2286 m
-2444 2286 l
-2444 2287 l
-2392 2287 l
-2392 2287 m
-2450 2287 l
-2450 2288 l
-2392 2288 l
-2392 2288 m
-2457 2288 l
-2457 2289 l
-2392 2289 l
-2392 2289 m
-2464 2289 l
-2464 2290 l
-2392 2290 l
-2392 2290 m
-2471 2290 l
-2471 2291 l
-2392 2291 l
-2391 2291 m
-2477 2291 l
-2477 2292 l
-2391 2292 l
-2391 2292 m
-2484 2292 l
-2484 2293 l
-2391 2293 l
-2391 2293 m
-2491 2293 l
-2491 2294 l
-2391 2294 l
-2391 2294 m
-2497 2294 l
-2497 2295 l
-2391 2295 l
-2391 2295 m
-2498 2295 l
-2498 2296 l
-2391 2296 l
-2391 2296 m
-2497 2296 l
-2497 2298 l
-2391 2298 l
-2390 2298 m
-2497 2298 l
-2497 2303 l
-2390 2303 l
-2390 2303 m
-2496 2303 l
-2496 2305 l
-2390 2305 l
-2389 2305 m
-2496 2305 l
-2496 2310 l
-2389 2310 l
-2389 2310 m
-2495 2310 l
-2495 2312 l
-2389 2312 l
-2388 2312 m
-2495 2312 l
-2495 2317 l
-2388 2317 l
-2388 2317 m
-2494 2317 l
-2494 2318 l
-2388 2318 l
-2387 2318 m
-2494 2318 l
-2494 2324 l
-2387 2324 l
-2387 2324 m
-2493 2324 l
-2493 2325 l
-2387 2325 l
-2386 2325 m
-2493 2325 l
-2493 2331 l
-2386 2331 l
-2386 2331 m
-2492 2331 l
-2492 2332 l
-2386 2332 l
-2385 2332 m
-2492 2332 l
-2492 2338 l
-2385 2338 l
-2385 2338 m
-2491 2338 l
-2491 2339 l
-2385 2339 l
-2384 2339 m
-2491 2339 l
-2491 2345 l
-2384 2345 l
-2383 2345 m
-2490 2345 l
-2490 2352 l
-2383 2352 l
-2382 2352 m
-2489 2352 l
-2489 2359 l
-2382 2359 l
-2381 2359 m
-2488 2359 l
-2488 2366 l
-2381 2366 l
-2380 2366 m
-2487 2366 l
-2487 2372 l
-2380 2372 l
-2379 2372 m
-2487 2372 l
-2487 2373 l
-2379 2373 l
-2379 2373 m
-2486 2373 l
-2486 2379 l
-2379 2379 l
-2378 2379 m
-2486 2379 l
-2486 2380 l
-2378 2380 l
-2378 2380 m
-2485 2380 l
-2485 2386 l
-2378 2386 l
-2377 2386 m
-2485 2386 l
-2485 2387 l
-2377 2387 l
-2377 2387 m
-2484 2387 l
-2484 2393 l
-2377 2393 l
-2376 2393 m
-2484 2393 l
-2484 2394 l
-2376 2394 l
-2376 2394 m
-2483 2394 l
-2483 2400 l
-2376 2400 l
-2376 2400 m
-2483 2400 l
-2483 2401 l
-2376 2401 l
-2382 2401 m
-2482 2401 l
-2482 2402 l
-2382 2402 l
-2389 2402 m
-2482 2402 l
-2482 2403 l
-2389 2403 l
-2396 2403 m
-2482 2403 l
-2482 2404 l
-2396 2404 l
-2403 2404 m
-2482 2404 l
-2482 2405 l
-2403 2405 l
-2410 2405 m
-2482 2405 l
-2482 2406 l
-2410 2406 l
-2417 2406 m
-2482 2406 l
-2482 2407 l
-2417 2407 l
-2424 2407 m
-2482 2407 l
-2482 2408 l
-2424 2408 l
-2431 2408 m
-2481 2408 l
-2481 2409 l
-2431 2409 l
-2438 2409 m
-2481 2409 l
-2481 2410 l
-2438 2410 l
-2445 2410 m
-2481 2410 l
-2481 2411 l
-2445 2411 l
-2452 2411 m
-2481 2411 l
-2481 2412 l
-2452 2412 l
-2459 2412 m
-2481 2412 l
-2481 2413 l
-2459 2413 l
-2466 2413 m
-2481 2413 l
-2481 2414 l
-2466 2414 l
-2473 2414 m
-2481 2414 l
-2481 2415 l
-2473 2415 l
-Y
-2393.8 2279.7 m
-2376 2400 l
-2480 2415 l
-2497 2295 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-2441 2392 m
-2408 2328 l
-2470 2337 l
-S
-2441 2392 m
-2453 2305 l
-S
-1 g
-1513 2399 m
-1517 2399 l
-1517 2400 l
-1513 2400 l
-1510 2400 m
-1517 2400 l
-1517 2401 l
-1510 2401 l
-1508 2401 m
-1518 2401 l
-1518 2402 l
-1508 2402 l
-1505 2402 m
-1518 2402 l
-1518 2403 l
-1505 2403 l
-1503 2403 m
-1518 2403 l
-1518 2404 l
-1503 2404 l
-1500 2404 m
-1519 2404 l
-1519 2405 l
-1500 2405 l
-1498 2405 m
-1519 2405 l
-1519 2406 l
-1498 2406 l
-1495 2406 m
-1520 2406 l
-1520 2407 l
-1495 2407 l
-1493 2407 m
-1520 2407 l
-1520 2408 l
-1493 2408 l
-1490 2408 m
-1520 2408 l
-1520 2409 l
-1490 2409 l
-1488 2409 m
-1521 2409 l
-1521 2410 l
-1488 2410 l
-1485 2410 m
-1521 2410 l
-1521 2411 l
-1485 2411 l
-1482 2411 m
-1522 2411 l
-1522 2412 l
-1482 2412 l
-1480 2412 m
-1522 2412 l
-1522 2413 l
-1480 2413 l
-1477 2413 m
-1522 2413 l
-1522 2414 l
-1477 2414 l
-1475 2414 m
-1523 2414 l
-1523 2415 l
-1475 2415 l
-1472 2415 m
-1523 2415 l
-1523 2416 l
-1472 2416 l
-1470 2416 m
-1524 2416 l
-1524 2417 l
-1470 2417 l
-1467 2417 m
-1524 2417 l
-1524 2418 l
-1467 2418 l
-1465 2418 m
-1524 2418 l
-1524 2419 l
-1465 2419 l
-1462 2419 m
-1525 2419 l
-1525 2420 l
-1462 2420 l
-1460 2420 m
-1525 2420 l
-1525 2421 l
-1460 2421 l
-1457 2421 m
-1526 2421 l
-1526 2422 l
-1457 2422 l
-1454 2422 m
-1526 2422 l
-1526 2423 l
-1454 2423 l
-1452 2423 m
-1526 2423 l
-1526 2424 l
-1452 2424 l
-1449 2424 m
-1527 2424 l
-1527 2425 l
-1449 2425 l
-1447 2425 m
-1527 2425 l
-1527 2426 l
-1447 2426 l
-1444 2426 m
-1528 2426 l
-1528 2427 l
-1444 2427 l
-1442 2427 m
-1528 2427 l
-1528 2428 l
-1442 2428 l
-1439 2428 m
-1528 2428 l
-1528 2429 l
-1439 2429 l
-1437 2429 m
-1529 2429 l
-1529 2430 l
-1437 2430 l
-1434 2430 m
-1529 2430 l
-1529 2431 l
-1434 2431 l
-1432 2431 m
-1530 2431 l
-1530 2432 l
-1432 2432 l
-1429 2432 m
-1530 2432 l
-1530 2433 l
-1429 2433 l
-1427 2433 m
-1530 2433 l
-1530 2434 l
-1427 2434 l
-1427 2434 m
-1531 2434 l
-1531 2436 l
-1427 2436 l
-1427 2436 m
-1532 2436 l
-1532 2437 l
-1427 2437 l
-1428 2437 m
-1532 2437 l
-1532 2439 l
-1428 2439 l
-1428 2439 m
-1533 2439 l
-1533 2440 l
-1428 2440 l
-1429 2440 m
-1533 2440 l
-1533 2441 l
-1429 2441 l
-1429 2441 m
-1534 2441 l
-1534 2442 l
-1429 2442 l
-1430 2442 m
-1534 2442 l
-1534 2444 l
-1430 2444 l
-1430 2444 m
-1535 2444 l
-1535 2445 l
-1430 2445 l
-1431 2445 m
-1535 2445 l
-1535 2446 l
-1431 2446 l
-1431 2446 m
-1536 2446 l
-1536 2447 l
-1431 2447 l
-1432 2447 m
-1536 2447 l
-1536 2449 l
-1432 2449 l
-1432 2449 m
-1537 2449 l
-1537 2450 l
-1432 2450 l
-1433 2450 m
-1537 2450 l
-1537 2451 l
-1433 2451 l
-1433 2451 m
-1538 2451 l
-1538 2452 l
-1433 2452 l
-1434 2452 m
-1538 2452 l
-1538 2454 l
-1434 2454 l
-1434 2454 m
-1539 2454 l
-1539 2455 l
-1434 2455 l
-1435 2455 m
-1539 2455 l
-1539 2456 l
-1435 2456 l
-1435 2456 m
-1540 2456 l
-1540 2457 l
-1435 2457 l
-1436 2457 m
-1540 2457 l
-1540 2459 l
-1436 2459 l
-1436 2459 m
-1541 2459 l
-1541 2460 l
-1436 2460 l
-1437 2460 m
-1541 2460 l
-1541 2461 l
-1437 2461 l
-1437 2461 m
-1542 2461 l
-1542 2462 l
-1437 2462 l
-1438 2462 m
-1542 2462 l
-1542 2464 l
-1438 2464 l
-1438 2464 m
-1543 2464 l
-1543 2465 l
-1438 2465 l
-1439 2465 m
-1543 2465 l
-1543 2466 l
-1439 2466 l
-1439 2466 m
-1544 2466 l
-1544 2467 l
-1439 2467 l
-1440 2467 m
-1544 2467 l
-1544 2469 l
-1440 2469 l
-1440 2469 m
-1545 2469 l
-1545 2470 l
-1440 2470 l
-1441 2470 m
-1545 2470 l
-1545 2471 l
-1441 2471 l
-1441 2471 m
-1546 2471 l
-1546 2472 l
-1441 2472 l
-1442 2472 m
-1546 2472 l
-1546 2474 l
-1442 2474 l
-1442 2474 m
-1547 2474 l
-1547 2475 l
-1442 2475 l
-1443 2475 m
-1547 2475 l
-1547 2476 l
-1443 2476 l
-1443 2476 m
-1548 2476 l
-1548 2477 l
-1443 2477 l
-1444 2477 m
-1548 2477 l
-1548 2479 l
-1444 2479 l
-1444 2479 m
-1549 2479 l
-1549 2480 l
-1444 2480 l
-1445 2480 m
-1549 2480 l
-1549 2481 l
-1445 2481 l
-1445 2481 m
-1550 2481 l
-1550 2482 l
-1445 2482 l
-1446 2482 m
-1550 2482 l
-1550 2484 l
-1446 2484 l
-1446 2484 m
-1551 2484 l
-1551 2485 l
-1446 2485 l
-1447 2485 m
-1551 2485 l
-1551 2486 l
-1447 2486 l
-1447 2486 m
-1552 2486 l
-1552 2487 l
-1447 2487 l
-1448 2487 m
-1552 2487 l
-1552 2489 l
-1448 2489 l
-1448 2489 m
-1553 2489 l
-1553 2490 l
-1448 2490 l
-1449 2490 m
-1553 2490 l
-1553 2491 l
-1449 2491 l
-1449 2491 m
-1554 2491 l
-1554 2492 l
-1449 2492 l
-1450 2492 m
-1554 2492 l
-1554 2494 l
-1450 2494 l
-1450 2494 m
-1555 2494 l
-1555 2495 l
-1450 2495 l
-1451 2495 m
-1555 2495 l
-1555 2496 l
-1451 2496 l
-1451 2496 m
-1556 2496 l
-1556 2497 l
-1451 2497 l
-1452 2497 m
-1556 2497 l
-1556 2499 l
-1452 2499 l
-1452 2499 m
-1557 2499 l
-1557 2500 l
-1452 2500 l
-1453 2500 m
-1557 2500 l
-1557 2501 l
-1453 2501 l
-1453 2501 m
-1558 2501 l
-1558 2502 l
-1453 2502 l
-1454 2502 m
-1558 2502 l
-1558 2504 l
-1454 2504 l
-1454 2504 m
-1559 2504 l
-1559 2505 l
-1454 2505 l
-1455 2505 m
-1559 2505 l
-1559 2506 l
-1455 2506 l
-1455 2506 m
-1560 2506 l
-1560 2507 l
-1455 2507 l
-1456 2507 m
-1560 2507 l
-1560 2509 l
-1456 2509 l
-1456 2509 m
-1561 2509 l
-1561 2510 l
-1456 2510 l
-1457 2510 m
-1561 2510 l
-1561 2511 l
-1457 2511 l
-1457 2511 m
-1561 2511 l
-1561 2512 l
-1457 2512 l
-1458 2512 m
-1559 2512 l
-1559 2513 l
-1458 2513 l
-1458 2513 m
-1556 2513 l
-1556 2514 l
-1458 2514 l
-1458 2514 m
-1554 2514 l
-1554 2515 l
-1458 2515 l
-1459 2515 m
-1551 2515 l
-1551 2516 l
-1459 2516 l
-1459 2516 m
-1549 2516 l
-1549 2517 l
-1459 2517 l
-1460 2517 m
-1546 2517 l
-1546 2518 l
-1460 2518 l
-1460 2518 m
-1544 2518 l
-1544 2519 l
-1460 2519 l
-1460 2519 m
-1541 2519 l
-1541 2520 l
-1460 2520 l
-1461 2520 m
-1539 2520 l
-1539 2521 l
-1461 2521 l
-1461 2521 m
-1537 2521 l
-1537 2522 l
-1461 2522 l
-1462 2522 m
-1534 2522 l
-1534 2523 l
-1462 2523 l
-1462 2523 m
-1532 2523 l
-1532 2524 l
-1462 2524 l
-1462 2524 m
-1529 2524 l
-1529 2525 l
-1462 2525 l
-1463 2525 m
-1527 2525 l
-1527 2526 l
-1463 2526 l
-1463 2526 m
-1524 2526 l
-1524 2527 l
-1463 2527 l
-1464 2527 m
-1522 2527 l
-1522 2528 l
-1464 2528 l
-1464 2528 m
-1519 2528 l
-1519 2529 l
-1464 2529 l
-1464 2529 m
-1517 2529 l
-1517 2530 l
-1464 2530 l
-1465 2530 m
-1514 2530 l
-1514 2531 l
-1465 2531 l
-1465 2531 m
-1512 2531 l
-1512 2532 l
-1465 2532 l
-1466 2532 m
-1509 2532 l
-1509 2533 l
-1466 2533 l
-1466 2533 m
-1507 2533 l
-1507 2534 l
-1466 2534 l
-1466 2534 m
-1505 2534 l
-1505 2535 l
-1466 2535 l
-1467 2535 m
-1502 2535 l
-1502 2536 l
-1467 2536 l
-1467 2536 m
-1500 2536 l
-1500 2537 l
-1467 2537 l
-1468 2537 m
-1497 2537 l
-1497 2538 l
-1468 2538 l
-1468 2538 m
-1495 2538 l
-1495 2539 l
-1468 2539 l
-1468 2539 m
-1492 2539 l
-1492 2540 l
-1468 2540 l
-1469 2540 m
-1490 2540 l
-1490 2541 l
-1469 2541 l
-1469 2541 m
-1487 2541 l
-1487 2542 l
-1469 2542 l
-1470 2542 m
-1485 2542 l
-1485 2543 l
-1470 2543 l
-1470 2543 m
-1482 2543 l
-1482 2544 l
-1470 2544 l
-1470 2544 m
-1480 2544 l
-1480 2545 l
-1470 2545 l
-1471 2545 m
-1477 2545 l
-1477 2546 l
-1471 2546 l
-1471 2546 m
-1475 2546 l
-1475 2547 l
-1471 2547 l
-Y
-1560.7 2511 m
-1516 2399 l
-1427 2434 l
-1472 2547 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-1461 2452 m
-1462 2443 l
-1472 2434 l
-1479 2431 l
-1493 2430 l
-1505 2439 l
-1517 2457 l
-1524 2476 l
-1527 2493 l
-1522 2504 l
-1512 2513 l
-1508 2514 l
-1495 2515 l
-1484 2510 l
-1475 2500 l
-1474 2496 l
-1473 2483 l
-1478 2472 l
-1488 2464 l
-1492 2462 l
-1505 2461 l
-1516 2466 l
-1524 2476 l
-S
-1 g
-721 2958 m
-724 2958 l
-724 2959 l
-721 2959 l
-720 2959 m
-725 2959 l
-725 2960 l
-720 2960 l
-719 2960 m
-726 2960 l
-726 2961 l
-719 2961 l
-718 2961 m
-728 2961 l
-728 2962 l
-718 2962 l
-718 2962 m
-729 2962 l
-729 2963 l
-718 2963 l
-717 2963 m
-730 2963 l
-730 2964 l
-717 2964 l
-716 2964 m
-731 2964 l
-731 2965 l
-716 2965 l
-715 2965 m
-733 2965 l
-733 2966 l
-715 2966 l
-714 2966 m
-734 2966 l
-734 2967 l
-714 2967 l
-714 2967 m
-735 2967 l
-735 2968 l
-714 2968 l
-713 2968 m
-737 2968 l
-737 2969 l
-713 2969 l
-712 2969 m
-738 2969 l
-738 2970 l
-712 2970 l
-711 2970 m
-739 2970 l
-739 2971 l
-711 2971 l
-710 2971 m
-740 2971 l
-740 2972 l
-710 2972 l
-710 2972 m
-742 2972 l
-742 2973 l
-710 2973 l
-709 2973 m
-743 2973 l
-743 2974 l
-709 2974 l
-708 2974 m
-744 2974 l
-744 2975 l
-708 2975 l
-707 2975 m
-746 2975 l
-746 2976 l
-707 2976 l
-706 2976 m
-747 2976 l
-747 2977 l
-706 2977 l
-706 2977 m
-748 2977 l
-748 2978 l
-706 2978 l
-705 2978 m
-749 2978 l
-749 2979 l
-705 2979 l
-704 2979 m
-751 2979 l
-751 2980 l
-704 2980 l
-703 2980 m
-752 2980 l
-752 2981 l
-703 2981 l
-702 2981 m
-753 2981 l
-753 2982 l
-702 2982 l
-702 2982 m
-754 2982 l
-754 2983 l
-702 2983 l
-701 2983 m
-756 2983 l
-756 2984 l
-701 2984 l
-700 2984 m
-757 2984 l
-757 2985 l
-700 2985 l
-699 2985 m
-758 2985 l
-758 2986 l
-699 2986 l
-698 2986 m
-760 2986 l
-760 2987 l
-698 2987 l
-698 2987 m
-761 2987 l
-761 2988 l
-698 2988 l
-697 2988 m
-762 2988 l
-762 2989 l
-697 2989 l
-696 2989 m
-763 2989 l
-763 2990 l
-696 2990 l
-695 2990 m
-765 2990 l
-765 2991 l
-695 2991 l
-694 2991 m
-766 2991 l
-766 2992 l
-694 2992 l
-694 2992 m
-767 2992 l
-767 2993 l
-694 2993 l
-693 2993 m
-769 2993 l
-769 2994 l
-693 2994 l
-692 2994 m
-770 2994 l
-770 2995 l
-692 2995 l
-691 2995 m
-771 2995 l
-771 2996 l
-691 2996 l
-691 2996 m
-772 2996 l
-772 2997 l
-691 2997 l
-690 2997 m
-774 2997 l
-774 2998 l
-690 2998 l
-689 2998 m
-775 2998 l
-775 2999 l
-689 2999 l
-688 2999 m
-776 2999 l
-776 3000 l
-688 3000 l
-687 3000 m
-778 3000 l
-778 3001 l
-687 3001 l
-687 3001 m
-779 3001 l
-779 3002 l
-687 3002 l
-686 3002 m
-780 3002 l
-780 3003 l
-686 3003 l
-685 3003 m
-781 3003 l
-781 3004 l
-685 3004 l
-684 3004 m
-783 3004 l
-783 3005 l
-684 3005 l
-683 3005 m
-784 3005 l
-784 3006 l
-683 3006 l
-683 3006 m
-785 3006 l
-785 3007 l
-683 3007 l
-682 3007 m
-786 3007 l
-786 3008 l
-682 3008 l
-681 3008 m
-788 3008 l
-788 3009 l
-681 3009 l
-680 3009 m
-789 3009 l
-789 3010 l
-680 3010 l
-679 3010 m
-790 3010 l
-790 3011 l
-679 3011 l
-679 3011 m
-792 3011 l
-792 3012 l
-679 3012 l
-678 3012 m
-793 3012 l
-793 3013 l
-678 3013 l
-677 3013 m
-794 3013 l
-794 3014 l
-677 3014 l
-676 3014 m
-795 3014 l
-795 3015 l
-676 3015 l
-675 3015 m
-797 3015 l
-797 3016 l
-675 3016 l
-675 3016 m
-798 3016 l
-798 3017 l
-675 3017 l
-674 3017 m
-799 3017 l
-799 3018 l
-674 3018 l
-673 3018 m
-801 3018 l
-801 3019 l
-673 3019 l
-672 3019 m
-802 3019 l
-802 3020 l
-672 3020 l
-671 3020 m
-803 3020 l
-803 3021 l
-671 3021 l
-671 3021 m
-804 3021 l
-804 3022 l
-671 3022 l
-670 3022 m
-806 3022 l
-806 3023 l
-670 3023 l
-669 3023 m
-807 3023 l
-807 3024 l
-669 3024 l
-668 3024 m
-808 3024 l
-808 3025 l
-668 3025 l
-667 3025 m
-809 3025 l
-809 3026 l
-667 3026 l
-667 3026 m
-811 3026 l
-811 3027 l
-667 3027 l
-666 3027 m
-812 3027 l
-812 3028 l
-666 3028 l
-665 3028 m
-813 3028 l
-813 3029 l
-665 3029 l
-664 3029 m
-815 3029 l
-815 3030 l
-664 3030 l
-663 3030 m
-816 3030 l
-816 3031 l
-663 3031 l
-663 3031 m
-817 3031 l
-817 3032 l
-663 3032 l
-662 3032 m
-818 3032 l
-818 3033 l
-662 3033 l
-661 3033 m
-817 3033 l
-817 3034 l
-661 3034 l
-660 3034 m
-817 3034 l
-817 3035 l
-660 3035 l
-660 3035 m
-816 3035 l
-816 3036 l
-660 3036 l
-660 3036 m
-815 3036 l
-815 3037 l
-660 3037 l
-661 3037 m
-814 3037 l
-814 3038 l
-661 3038 l
-662 3038 m
-813 3038 l
-813 3039 l
-662 3039 l
-663 3039 m
-813 3039 l
-813 3040 l
-663 3040 l
-665 3040 m
-812 3040 l
-812 3041 l
-665 3041 l
-666 3041 m
-811 3041 l
-811 3042 l
-666 3042 l
-667 3042 m
-810 3042 l
-810 3043 l
-667 3043 l
-668 3043 m
-809 3043 l
-809 3044 l
-668 3044 l
-670 3044 m
-809 3044 l
-809 3045 l
-670 3045 l
-671 3045 m
-808 3045 l
-808 3046 l
-671 3046 l
-672 3046 m
-807 3046 l
-807 3047 l
-672 3047 l
-673 3047 m
-806 3047 l
-806 3048 l
-673 3048 l
-675 3048 m
-805 3048 l
-805 3049 l
-675 3049 l
-676 3049 m
-805 3049 l
-805 3050 l
-676 3050 l
-677 3050 m
-804 3050 l
-804 3051 l
-677 3051 l
-679 3051 m
-803 3051 l
-803 3052 l
-679 3052 l
-680 3052 m
-802 3052 l
-802 3053 l
-680 3053 l
-681 3053 m
-802 3053 l
-802 3054 l
-681 3054 l
-682 3054 m
-801 3054 l
-801 3055 l
-682 3055 l
-684 3055 m
-800 3055 l
-800 3056 l
-684 3056 l
-685 3056 m
-799 3056 l
-799 3057 l
-685 3057 l
-686 3057 m
-798 3057 l
-798 3058 l
-686 3058 l
-687 3058 m
-798 3058 l
-798 3059 l
-687 3059 l
-689 3059 m
-797 3059 l
-797 3060 l
-689 3060 l
-690 3060 m
-796 3060 l
-796 3061 l
-690 3061 l
-691 3061 m
-795 3061 l
-795 3062 l
-691 3062 l
-692 3062 m
-794 3062 l
-794 3063 l
-692 3063 l
-694 3063 m
-794 3063 l
-794 3064 l
-694 3064 l
-695 3064 m
-793 3064 l
-793 3065 l
-695 3065 l
-696 3065 m
-792 3065 l
-792 3066 l
-696 3066 l
-698 3066 m
-791 3066 l
-791 3067 l
-698 3067 l
-699 3067 m
-790 3067 l
-790 3068 l
-699 3068 l
-700 3068 m
-790 3068 l
-790 3069 l
-700 3069 l
-701 3069 m
-789 3069 l
-789 3070 l
-701 3070 l
-703 3070 m
-788 3070 l
-788 3071 l
-703 3071 l
-704 3071 m
-787 3071 l
-787 3072 l
-704 3072 l
-705 3072 m
-786 3072 l
-786 3073 l
-705 3073 l
-706 3073 m
-786 3073 l
-786 3074 l
-706 3074 l
-708 3074 m
-785 3074 l
-785 3075 l
-708 3075 l
-709 3075 m
-784 3075 l
-784 3076 l
-709 3076 l
-710 3076 m
-783 3076 l
-783 3077 l
-710 3077 l
-711 3077 m
-782 3077 l
-782 3078 l
-711 3078 l
-713 3078 m
-782 3078 l
-782 3079 l
-713 3079 l
-714 3079 m
-781 3079 l
-781 3080 l
-714 3080 l
-715 3080 m
-780 3080 l
-780 3081 l
-715 3081 l
-717 3081 m
-779 3081 l
-779 3082 l
-717 3082 l
-718 3082 m
-779 3082 l
-779 3083 l
-718 3083 l
-719 3083 m
-778 3083 l
-778 3084 l
-719 3084 l
-720 3084 m
-777 3084 l
-777 3085 l
-720 3085 l
-722 3085 m
-776 3085 l
-776 3086 l
-722 3086 l
-723 3086 m
-775 3086 l
-775 3087 l
-723 3087 l
-724 3087 m
-775 3087 l
-775 3088 l
-724 3088 l
-725 3088 m
-774 3088 l
-774 3089 l
-725 3089 l
-727 3089 m
-773 3089 l
-773 3090 l
-727 3090 l
-728 3090 m
-772 3090 l
-772 3091 l
-728 3091 l
-729 3091 m
-771 3091 l
-771 3092 l
-729 3092 l
-730 3092 m
-771 3092 l
-771 3093 l
-730 3093 l
-732 3093 m
-770 3093 l
-770 3094 l
-732 3094 l
-733 3094 m
-769 3094 l
-769 3095 l
-733 3095 l
-734 3095 m
-768 3095 l
-768 3096 l
-734 3096 l
-736 3096 m
-767 3096 l
-767 3097 l
-736 3097 l
-737 3097 m
-767 3097 l
-767 3098 l
-737 3098 l
-738 3098 m
-766 3098 l
-766 3099 l
-738 3099 l
-739 3099 m
-765 3099 l
-765 3100 l
-739 3100 l
-741 3100 m
-764 3100 l
-764 3101 l
-741 3101 l
-742 3101 m
-763 3101 l
-763 3102 l
-742 3102 l
-743 3102 m
-763 3102 l
-763 3103 l
-743 3103 l
-744 3103 m
-762 3103 l
-762 3104 l
-744 3104 l
-746 3104 m
-761 3104 l
-761 3105 l
-746 3105 l
-747 3105 m
-760 3105 l
-760 3106 l
-747 3106 l
-748 3106 m
-759 3106 l
-759 3107 l
-748 3107 l
-749 3107 m
-759 3107 l
-759 3108 l
-749 3108 l
-751 3108 m
-758 3108 l
-758 3109 l
-751 3109 l
-752 3109 m
-757 3109 l
-757 3110 l
-752 3110 l
-753 3110 m
-756 3110 l
-756 3111 l
-753 3111 l
-Y
-817.3 3032.5 m
-722 2958 l
-660 3036 l
-755 3111 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-709 3001 m
-720 2993 l
-730 2995 l
-736 3000 l
-740 3009 l
-738 3018 l
-731 3034 l
-727 3046 l
-728 3058 l
-732 3066 l
-742 3074 l
-751 3076 l
-757 3075 l
-768 3068 l
-778 3055 l
-783 3043 l
-782 3037 l
-778 3028 l
-768 3020 l
-759 3019 l
-747 3020 l
-736 3027 l
-723 3038 l
-714 3042 l
-705 3040 l
-699 3035 l
-695 3026 l
-699 3014 l
-709 3001 l
-S
-1 g
-1009 5498 m
-1013 5498 l
-1013 5499 l
-1009 5499 l
-1008 5499 m
-1014 5499 l
-1014 5500 l
-1008 5500 l
-1007 5500 m
-1015 5500 l
-1015 5501 l
-1007 5501 l
-1006 5501 m
-1017 5501 l
-1017 5502 l
-1006 5502 l
-1006 5502 m
-1018 5502 l
-1018 5503 l
-1006 5503 l
-1005 5503 m
-1019 5503 l
-1019 5504 l
-1005 5504 l
-1004 5504 m
-1020 5504 l
-1020 5505 l
-1004 5505 l
-1003 5505 m
-1022 5505 l
-1022 5506 l
-1003 5506 l
-1002 5506 m
-1023 5506 l
-1023 5507 l
-1002 5507 l
-1002 5507 m
-1024 5507 l
-1024 5508 l
-1002 5508 l
-1001 5508 m
-1025 5508 l
-1025 5509 l
-1001 5509 l
-1000 5509 m
-1027 5509 l
-1027 5510 l
-1000 5510 l
-999 5510 m
-1028 5510 l
-1028 5511 l
-999 5511 l
-998 5511 m
-1029 5511 l
-1029 5512 l
-998 5512 l
-998 5512 m
-1030 5512 l
-1030 5513 l
-998 5513 l
-997 5513 m
-1032 5513 l
-1032 5514 l
-997 5514 l
-996 5514 m
-1033 5514 l
-1033 5515 l
-996 5515 l
-995 5515 m
-1034 5515 l
-1034 5516 l
-995 5516 l
-994 5516 m
-1035 5516 l
-1035 5517 l
-994 5517 l
-994 5517 m
-1037 5517 l
-1037 5518 l
-994 5518 l
-993 5518 m
-1038 5518 l
-1038 5519 l
-993 5519 l
-992 5519 m
-1039 5519 l
-1039 5520 l
-992 5520 l
-991 5520 m
-1040 5520 l
-1040 5521 l
-991 5521 l
-990 5521 m
-1042 5521 l
-1042 5522 l
-990 5522 l
-990 5522 m
-1043 5522 l
-1043 5523 l
-990 5523 l
-989 5523 m
-1044 5523 l
-1044 5524 l
-989 5524 l
-988 5524 m
-1045 5524 l
-1045 5525 l
-988 5525 l
-987 5525 m
-1047 5525 l
-1047 5526 l
-987 5526 l
-986 5526 m
-1048 5526 l
-1048 5527 l
-986 5527 l
-986 5527 m
-1049 5527 l
-1049 5528 l
-986 5528 l
-985 5528 m
-1050 5528 l
-1050 5529 l
-985 5529 l
-984 5529 m
-1052 5529 l
-1052 5530 l
-984 5530 l
-983 5530 m
-1053 5530 l
-1053 5531 l
-983 5531 l
-982 5531 m
-1054 5531 l
-1054 5532 l
-982 5532 l
-982 5532 m
-1055 5532 l
-1055 5533 l
-982 5533 l
-981 5533 m
-1057 5533 l
-1057 5534 l
-981 5534 l
-980 5534 m
-1058 5534 l
-1058 5535 l
-980 5535 l
-979 5535 m
-1059 5535 l
-1059 5536 l
-979 5536 l
-978 5536 m
-1061 5536 l
-1061 5537 l
-978 5537 l
-978 5537 m
-1062 5537 l
-1062 5538 l
-978 5538 l
-977 5538 m
-1063 5538 l
-1063 5539 l
-977 5539 l
-976 5539 m
-1064 5539 l
-1064 5540 l
-976 5540 l
-975 5540 m
-1066 5540 l
-1066 5541 l
-975 5541 l
-974 5541 m
-1067 5541 l
-1067 5542 l
-974 5542 l
-974 5542 m
-1068 5542 l
-1068 5543 l
-974 5543 l
-973 5543 m
-1069 5543 l
-1069 5544 l
-973 5544 l
-972 5544 m
-1071 5544 l
-1071 5545 l
-972 5545 l
-971 5545 m
-1072 5545 l
-1072 5546 l
-971 5546 l
-970 5546 m
-1073 5546 l
-1073 5547 l
-970 5547 l
-970 5547 m
-1074 5547 l
-1074 5548 l
-970 5548 l
-969 5548 m
-1076 5548 l
-1076 5549 l
-969 5549 l
-968 5549 m
-1077 5549 l
-1077 5550 l
-968 5550 l
-967 5550 m
-1078 5550 l
-1078 5551 l
-967 5551 l
-966 5551 m
-1079 5551 l
-1079 5552 l
-966 5552 l
-966 5552 m
-1081 5552 l
-1081 5553 l
-966 5553 l
-965 5553 m
-1082 5553 l
-1082 5554 l
-965 5554 l
-964 5554 m
-1083 5554 l
-1083 5555 l
-964 5555 l
-963 5555 m
-1084 5555 l
-1084 5556 l
-963 5556 l
-962 5556 m
-1086 5556 l
-1086 5557 l
-962 5557 l
-962 5557 m
-1087 5557 l
-1087 5558 l
-962 5558 l
-961 5558 m
-1088 5558 l
-1088 5559 l
-961 5559 l
-960 5559 m
-1089 5559 l
-1089 5560 l
-960 5560 l
-959 5560 m
-1091 5560 l
-1091 5561 l
-959 5561 l
-958 5561 m
-1092 5561 l
-1092 5562 l
-958 5562 l
-958 5562 m
-1093 5562 l
-1093 5563 l
-958 5563 l
-957 5563 m
-1094 5563 l
-1094 5564 l
-957 5564 l
-956 5564 m
-1096 5564 l
-1096 5565 l
-956 5565 l
-955 5565 m
-1097 5565 l
-1097 5566 l
-955 5566 l
-954 5566 m
-1098 5566 l
-1098 5567 l
-954 5567 l
-954 5567 m
-1099 5567 l
-1099 5568 l
-954 5568 l
-953 5568 m
-1101 5568 l
-1101 5569 l
-953 5569 l
-952 5569 m
-1102 5569 l
-1102 5570 l
-952 5570 l
-951 5570 m
-1103 5570 l
-1103 5571 l
-951 5571 l
-950 5571 m
-1105 5571 l
-1105 5572 l
-950 5572 l
-950 5572 m
-1106 5572 l
-1106 5573 l
-950 5573 l
-949 5573 m
-1107 5573 l
-1107 5574 l
-949 5574 l
-948 5574 m
-1108 5574 l
-1108 5575 l
-948 5575 l
-947 5575 m
-1110 5575 l
-1110 5576 l
-947 5576 l
-946 5576 m
-1111 5576 l
-1111 5577 l
-946 5577 l
-946 5577 m
-1112 5577 l
-1112 5578 l
-946 5578 l
-945 5578 m
-1113 5578 l
-1113 5579 l
-945 5579 l
-944 5579 m
-1115 5579 l
-1115 5580 l
-944 5580 l
-943 5580 m
-1116 5580 l
-1116 5581 l
-943 5581 l
-942 5581 m
-1117 5581 l
-1117 5582 l
-942 5582 l
-942 5582 m
-1118 5582 l
-1118 5583 l
-942 5583 l
-941 5583 m
-1120 5583 l
-1120 5584 l
-941 5584 l
-940 5584 m
-1121 5584 l
-1121 5585 l
-940 5585 l
-939 5585 m
-1122 5585 l
-1122 5586 l
-939 5586 l
-938 5586 m
-1123 5586 l
-1123 5587 l
-938 5587 l
-938 5587 m
-1125 5587 l
-1125 5588 l
-938 5588 l
-937 5588 m
-1126 5588 l
-1126 5589 l
-937 5589 l
-936 5589 m
-1127 5589 l
-1127 5590 l
-936 5590 l
-935 5590 m
-1128 5590 l
-1128 5591 l
-935 5591 l
-935 5591 m
-1130 5591 l
-1130 5592 l
-935 5592 l
-935 5592 m
-1131 5592 l
-1131 5593 l
-935 5593 l
-936 5593 m
-1132 5593 l
-1132 5594 l
-936 5594 l
-937 5594 m
-1133 5594 l
-1133 5595 l
-937 5595 l
-938 5595 m
-1135 5595 l
-1135 5596 l
-938 5596 l
-939 5596 m
-1136 5596 l
-1136 5597 l
-939 5597 l
-941 5597 m
-1137 5597 l
-1137 5598 l
-941 5598 l
-942 5598 m
-1138 5598 l
-1138 5599 l
-942 5599 l
-943 5599 m
-1140 5599 l
-1140 5600 l
-943 5600 l
-944 5600 m
-1141 5600 l
-1141 5601 l
-944 5601 l
-946 5601 m
-1142 5601 l
-1142 5602 l
-946 5602 l
-947 5602 m
-1143 5602 l
-1143 5603 l
-947 5603 l
-948 5603 m
-1145 5603 l
-1145 5604 l
-948 5604 l
-949 5604 m
-1146 5604 l
-1146 5605 l
-949 5605 l
-951 5605 m
-1147 5605 l
-1147 5606 l
-951 5606 l
-952 5606 m
-1148 5606 l
-1148 5607 l
-952 5607 l
-953 5607 m
-1148 5607 l
-1148 5608 l
-953 5608 l
-954 5608 m
-1148 5608 l
-1148 5609 l
-954 5609 l
-956 5609 m
-1147 5609 l
-1147 5610 l
-956 5610 l
-957 5610 m
-1146 5610 l
-1146 5611 l
-957 5611 l
-958 5611 m
-1145 5611 l
-1145 5612 l
-958 5612 l
-959 5612 m
-1144 5612 l
-1144 5613 l
-959 5613 l
-961 5613 m
-1144 5613 l
-1144 5614 l
-961 5614 l
-962 5614 m
-1143 5614 l
-1143 5615 l
-962 5615 l
-963 5615 m
-1142 5615 l
-1142 5616 l
-963 5616 l
-964 5616 m
-1141 5616 l
-1141 5617 l
-964 5617 l
-966 5617 m
-1140 5617 l
-1140 5618 l
-966 5618 l
-967 5618 m
-1140 5618 l
-1140 5619 l
-967 5619 l
-968 5619 m
-1139 5619 l
-1139 5620 l
-968 5620 l
-969 5620 m
-1138 5620 l
-1138 5621 l
-969 5621 l
-971 5621 m
-1137 5621 l
-1137 5622 l
-971 5622 l
-972 5622 m
-1136 5622 l
-1136 5623 l
-972 5623 l
-973 5623 m
-1136 5623 l
-1136 5624 l
-973 5624 l
-974 5624 m
-1135 5624 l
-1135 5625 l
-974 5625 l
-976 5625 m
-1134 5625 l
-1134 5626 l
-976 5626 l
-977 5626 m
-1133 5626 l
-1133 5627 l
-977 5627 l
-978 5627 m
-1132 5627 l
-1132 5628 l
-978 5628 l
-979 5628 m
-1132 5628 l
-1132 5629 l
-979 5629 l
-981 5629 m
-1131 5629 l
-1131 5630 l
-981 5630 l
-982 5630 m
-1130 5630 l
-1130 5631 l
-982 5631 l
-983 5631 m
-1129 5631 l
-1129 5632 l
-983 5632 l
-984 5632 m
-1128 5632 l
-1128 5633 l
-984 5633 l
-986 5633 m
-1128 5633 l
-1128 5634 l
-986 5634 l
-987 5634 m
-1127 5634 l
-1127 5635 l
-987 5635 l
-988 5635 m
-1126 5635 l
-1126 5636 l
-988 5636 l
-989 5636 m
-1125 5636 l
-1125 5637 l
-989 5637 l
-991 5637 m
-1124 5637 l
-1124 5638 l
-991 5638 l
-992 5638 m
-1124 5638 l
-1124 5639 l
-992 5639 l
-993 5639 m
-1123 5639 l
-1123 5640 l
-993 5640 l
-994 5640 m
-1122 5640 l
-1122 5641 l
-994 5641 l
-996 5641 m
-1121 5641 l
-1121 5642 l
-996 5642 l
-997 5642 m
-1120 5642 l
-1120 5643 l
-997 5643 l
-998 5643 m
-1120 5643 l
-1120 5644 l
-998 5644 l
-999 5644 m
-1119 5644 l
-1119 5645 l
-999 5645 l
-1001 5645 m
-1118 5645 l
-1118 5646 l
-1001 5646 l
-1002 5646 m
-1117 5646 l
-1117 5647 l
-1002 5647 l
-1003 5647 m
-1116 5647 l
-1116 5648 l
-1003 5648 l
-1004 5648 m
-1116 5648 l
-1116 5649 l
-1004 5649 l
-1005 5649 m
-1115 5649 l
-1115 5650 l
-1005 5650 l
-1007 5650 m
-1114 5650 l
-1114 5651 l
-1007 5651 l
-1008 5651 m
-1113 5651 l
-1113 5652 l
-1008 5652 l
-1009 5652 m
-1112 5652 l
-1112 5653 l
-1009 5653 l
-1010 5653 m
-1112 5653 l
-1112 5654 l
-1010 5654 l
-1012 5654 m
-1111 5654 l
-1111 5655 l
-1012 5655 l
-1013 5655 m
-1110 5655 l
-1110 5656 l
-1013 5656 l
-1014 5656 m
-1109 5656 l
-1109 5657 l
-1014 5657 l
-1015 5657 m
-1108 5657 l
-1108 5658 l
-1015 5658 l
-1017 5658 m
-1108 5658 l
-1108 5659 l
-1017 5659 l
-1018 5659 m
-1107 5659 l
-1107 5660 l
-1018 5660 l
-1019 5660 m
-1106 5660 l
-1106 5661 l
-1019 5661 l
-1020 5661 m
-1105 5661 l
-1105 5662 l
-1020 5662 l
-1022 5662 m
-1104 5662 l
-1104 5663 l
-1022 5663 l
-1023 5663 m
-1104 5663 l
-1104 5664 l
-1023 5664 l
-1024 5664 m
-1103 5664 l
-1103 5665 l
-1024 5665 l
-1025 5665 m
-1102 5665 l
-1102 5666 l
-1025 5666 l
-1027 5666 m
-1101 5666 l
-1101 5667 l
-1027 5667 l
-1028 5667 m
-1100 5667 l
-1100 5668 l
-1028 5668 l
-1029 5668 m
-1100 5668 l
-1100 5669 l
-1029 5669 l
-1030 5669 m
-1099 5669 l
-1099 5670 l
-1030 5670 l
-1032 5670 m
-1098 5670 l
-1098 5671 l
-1032 5671 l
-1033 5671 m
-1097 5671 l
-1097 5672 l
-1033 5672 l
-1034 5672 m
-1096 5672 l
-1096 5673 l
-1034 5673 l
-1035 5673 m
-1096 5673 l
-1096 5674 l
-1035 5674 l
-1037 5674 m
-1095 5674 l
-1095 5675 l
-1037 5675 l
-1038 5675 m
-1094 5675 l
-1094 5676 l
-1038 5676 l
-1039 5676 m
-1093 5676 l
-1093 5677 l
-1039 5677 l
-1040 5677 m
-1092 5677 l
-1092 5678 l
-1040 5678 l
-1042 5678 m
-1092 5678 l
-1092 5679 l
-1042 5679 l
-1043 5679 m
-1091 5679 l
-1091 5680 l
-1043 5680 l
-1044 5680 m
-1090 5680 l
-1090 5681 l
-1044 5681 l
-1045 5681 m
-1089 5681 l
-1089 5682 l
-1045 5682 l
-1047 5682 m
-1088 5682 l
-1088 5683 l
-1047 5683 l
-1048 5683 m
-1088 5683 l
-1088 5684 l
-1048 5684 l
-1049 5684 m
-1087 5684 l
-1087 5685 l
-1049 5685 l
-1050 5685 m
-1086 5685 l
-1086 5686 l
-1050 5686 l
-1052 5686 m
-1085 5686 l
-1085 5687 l
-1052 5687 l
-1053 5687 m
-1084 5687 l
-1084 5688 l
-1053 5688 l
-1054 5688 m
-1084 5688 l
-1084 5689 l
-1054 5689 l
-1055 5689 m
-1083 5689 l
-1083 5690 l
-1055 5690 l
-1057 5690 m
-1082 5690 l
-1082 5691 l
-1057 5691 l
-1058 5691 m
-1081 5691 l
-1081 5692 l
-1058 5692 l
-1059 5692 m
-1080 5692 l
-1080 5693 l
-1059 5693 l
-1060 5693 m
-1080 5693 l
-1080 5694 l
-1060 5694 l
-1062 5694 m
-1079 5694 l
-1079 5695 l
-1062 5695 l
-1063 5695 m
-1078 5695 l
-1078 5696 l
-1063 5696 l
-1064 5696 m
-1077 5696 l
-1077 5697 l
-1064 5697 l
-1065 5697 m
-1076 5697 l
-1076 5698 l
-1065 5698 l
-1067 5698 m
-1076 5698 l
-1076 5699 l
-1067 5699 l
-1068 5699 m
-1075 5699 l
-1075 5700 l
-1068 5700 l
-1069 5700 m
-1074 5700 l
-1074 5701 l
-1069 5701 l
-1070 5701 m
-1073 5701 l
-1073 5702 l
-1070 5702 l
-Y
-1010.5 5497.6 m
-935 5592 l
-1072 5702 l
-1148 5607 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-972 5579 m
-976 5588 l
-978 5605 l
-1033 5537 l
-S
-1050 5663 m
-1054 5591 l
-1103 5630 l
-S
-1050 5663 m
-1105 5594 l
-S
-1 g
-1830 5898 m
-1841 5898 l
-1841 5899 l
-1830 5899 l
-1830 5899 m
-1847 5899 l
-1847 5900 l
-1830 5900 l
-1830 5900 m
-1854 5900 l
-1854 5901 l
-1830 5901 l
-1830 5901 m
-1861 5901 l
-1861 5902 l
-1830 5902 l
-1829 5902 m
-1867 5902 l
-1867 5903 l
-1829 5903 l
-1829 5903 m
-1874 5903 l
-1874 5904 l
-1829 5904 l
-1829 5904 m
-1881 5904 l
-1881 5905 l
-1829 5905 l
-1829 5905 m
-1887 5905 l
-1887 5906 l
-1829 5906 l
-1829 5906 m
-1894 5906 l
-1894 5907 l
-1829 5907 l
-1829 5907 m
-1901 5907 l
-1901 5908 l
-1829 5908 l
-1829 5908 m
-1907 5908 l
-1907 5909 l
-1829 5909 l
-1828 5909 m
-1914 5909 l
-1914 5910 l
-1828 5910 l
-1828 5910 m
-1921 5910 l
-1921 5911 l
-1828 5911 l
-1828 5911 m
-1927 5911 l
-1927 5912 l
-1828 5912 l
-1828 5912 m
-1934 5912 l
-1934 5913 l
-1828 5913 l
-1828 5913 m
-1941 5913 l
-1941 5914 l
-1828 5914 l
-1828 5914 m
-1947 5914 l
-1947 5915 l
-1828 5915 l
-1827 5915 m
-1954 5915 l
-1954 5916 l
-1827 5916 l
-1827 5916 m
-1961 5916 l
-1961 5917 l
-1827 5917 l
-1827 5917 m
-1967 5917 l
-1967 5918 l
-1827 5918 l
-1827 5918 m
-1974 5918 l
-1974 5919 l
-1827 5919 l
-1827 5919 m
-1981 5919 l
-1981 5920 l
-1827 5920 l
-1827 5920 m
-1987 5920 l
-1987 5921 l
-1827 5921 l
-1827 5921 m
-1994 5921 l
-1994 5922 l
-1827 5922 l
-1826 5922 m
-2000 5922 l
-2000 5923 l
-1826 5923 l
-1826 5923 m
-2000 5923 l
-2000 5929 l
-1826 5929 l
-1825 5929 m
-2000 5929 l
-2000 5930 l
-1825 5930 l
-1825 5930 m
-1999 5930 l
-1999 5936 l
-1825 5936 l
-1824 5936 m
-1999 5936 l
-1999 5937 l
-1824 5937 l
-1824 5937 m
-1998 5937 l
-1998 5942 l
-1824 5942 l
-1823 5942 m
-1998 5942 l
-1998 5943 l
-1823 5943 l
-1823 5943 m
-1997 5943 l
-1997 5949 l
-1823 5949 l
-1822 5949 m
-1997 5949 l
-1997 5950 l
-1822 5950 l
-1822 5950 m
-1996 5950 l
-1996 5956 l
-1822 5956 l
-1821 5956 m
-1996 5956 l
-1996 5957 l
-1821 5957 l
-1821 5957 m
-1995 5957 l
-1995 5963 l
-1821 5963 l
-1820 5963 m
-1994 5963 l
-1994 5969 l
-1820 5969 l
-1819 5969 m
-1994 5969 l
-1994 5970 l
-1819 5970 l
-1819 5970 m
-1993 5970 l
-1993 5976 l
-1819 5976 l
-1818 5976 m
-1993 5976 l
-1993 5977 l
-1818 5977 l
-1818 5977 m
-1992 5977 l
-1992 5983 l
-1818 5983 l
-1817 5983 m
-1991 5983 l
-1991 5990 l
-1817 5990 l
-1816 5990 m
-1990 5990 l
-1990 5996 l
-1816 5996 l
-1815 5996 m
-1990 5996 l
-1990 5997 l
-1815 5997 l
-1815 5997 m
-1989 5997 l
-1989 6003 l
-1815 6003 l
-1814 6003 m
-1989 6003 l
-1989 6004 l
-1814 6004 l
-1814 6004 m
-1988 6004 l
-1988 6010 l
-1814 6010 l
-1813 6010 m
-1987 6010 l
-1987 6017 l
-1813 6017 l
-1813 6017 m
-1986 6017 l
-1986 6018 l
-1813 6018 l
-1819 6018 m
-1986 6018 l
-1986 6019 l
-1819 6019 l
-1826 6019 m
-1986 6019 l
-1986 6020 l
-1826 6020 l
-1832 6020 m
-1986 6020 l
-1986 6021 l
-1832 6021 l
-1839 6021 m
-1986 6021 l
-1986 6022 l
-1839 6022 l
-1845 6022 m
-1986 6022 l
-1986 6023 l
-1845 6023 l
-1852 6023 m
-1986 6023 l
-1986 6024 l
-1852 6024 l
-1858 6024 m
-1985 6024 l
-1985 6025 l
-1858 6025 l
-1865 6025 m
-1985 6025 l
-1985 6026 l
-1865 6026 l
-1871 6026 m
-1985 6026 l
-1985 6027 l
-1871 6027 l
-1878 6027 m
-1985 6027 l
-1985 6028 l
-1878 6028 l
-1884 6028 m
-1985 6028 l
-1985 6029 l
-1884 6029 l
-1891 6029 m
-1985 6029 l
-1985 6030 l
-1891 6030 l
-1897 6030 m
-1984 6030 l
-1984 6031 l
-1897 6031 l
-1904 6031 m
-1984 6031 l
-1984 6032 l
-1904 6032 l
-1910 6032 m
-1984 6032 l
-1984 6033 l
-1910 6033 l
-1917 6033 m
-1984 6033 l
-1984 6034 l
-1917 6034 l
-1923 6034 m
-1984 6034 l
-1984 6035 l
-1923 6035 l
-1930 6035 m
-1984 6035 l
-1984 6036 l
-1930 6036 l
-1936 6036 m
-1984 6036 l
-1984 6037 l
-1936 6037 l
-1943 6037 m
-1983 6037 l
-1983 6038 l
-1943 6038 l
-1949 6038 m
-1983 6038 l
-1983 6039 l
-1949 6039 l
-1956 6039 m
-1983 6039 l
-1983 6040 l
-1956 6040 l
-1962 6040 m
-1983 6040 l
-1983 6041 l
-1962 6041 l
-1969 6041 m
-1983 6041 l
-1983 6042 l
-1969 6042 l
-1975 6042 m
-1983 6042 l
-1983 6043 l
-1975 6043 l
-Y
-1830.7 5897.6 m
-1813 6017 l
-1982 6043 l
-2000 5923 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-1838 5987 m
-1846 5993 l
-1856 6007 l
-1869 5920 l
-S
-1962 6010 m
-1956 6018 l
-1943 6020 l
-1935 6019 l
-1923 6013 l
-1917 5999 l
-1916 5978 l
-1919 5957 l
-1925 5941 l
-1935 5934 l
-1948 5932 l
-1952 5933 l
-1964 5939 l
-1971 5948 l
-1973 5961 l
-1973 5965 l
-1967 5977 l
-1957 5984 l
-1944 5986 l
-1940 5986 l
-1928 5980 l
-1921 5970 l
-1919 5957 l
-S
-1 g
-2892 5791 m
-2896 5791 l
-2896 5792 l
-2892 5792 l
-2889 5792 m
-2896 5792 l
-2896 5793 l
-2889 5793 l
-2887 5793 m
-2897 5793 l
-2897 5794 l
-2887 5794 l
-2884 5794 m
-2897 5794 l
-2897 5795 l
-2884 5795 l
-2882 5795 m
-2897 5795 l
-2897 5796 l
-2882 5796 l
-2879 5796 m
-2898 5796 l
-2898 5797 l
-2879 5797 l
-2877 5797 m
-2898 5797 l
-2898 5798 l
-2877 5798 l
-2874 5798 m
-2899 5798 l
-2899 5799 l
-2874 5799 l
-2872 5799 m
-2899 5799 l
-2899 5800 l
-2872 5800 l
-2869 5800 m
-2899 5800 l
-2899 5801 l
-2869 5801 l
-2867 5801 m
-2900 5801 l
-2900 5802 l
-2867 5802 l
-2864 5802 m
-2900 5802 l
-2900 5803 l
-2864 5803 l
-2861 5803 m
-2901 5803 l
-2901 5804 l
-2861 5804 l
-2859 5804 m
-2901 5804 l
-2901 5805 l
-2859 5805 l
-2856 5805 m
-2901 5805 l
-2901 5806 l
-2856 5806 l
-2854 5806 m
-2902 5806 l
-2902 5807 l
-2854 5807 l
-2851 5807 m
-2902 5807 l
-2902 5808 l
-2851 5808 l
-2849 5808 m
-2903 5808 l
-2903 5809 l
-2849 5809 l
-2846 5809 m
-2903 5809 l
-2903 5810 l
-2846 5810 l
-2844 5810 m
-2903 5810 l
-2903 5811 l
-2844 5811 l
-2841 5811 m
-2904 5811 l
-2904 5812 l
-2841 5812 l
-2839 5812 m
-2904 5812 l
-2904 5813 l
-2839 5813 l
-2836 5813 m
-2904 5813 l
-2904 5814 l
-2836 5814 l
-2834 5814 m
-2905 5814 l
-2905 5815 l
-2834 5815 l
-2831 5815 m
-2905 5815 l
-2905 5816 l
-2831 5816 l
-2828 5816 m
-2906 5816 l
-2906 5817 l
-2828 5817 l
-2826 5817 m
-2906 5817 l
-2906 5818 l
-2826 5818 l
-2823 5818 m
-2906 5818 l
-2906 5819 l
-2823 5819 l
-2821 5819 m
-2907 5819 l
-2907 5820 l
-2821 5820 l
-2818 5820 m
-2907 5820 l
-2907 5821 l
-2818 5821 l
-2816 5821 m
-2908 5821 l
-2908 5822 l
-2816 5822 l
-2813 5822 m
-2908 5822 l
-2908 5823 l
-2813 5823 l
-2811 5823 m
-2908 5823 l
-2908 5824 l
-2811 5824 l
-2808 5824 m
-2909 5824 l
-2909 5825 l
-2808 5825 l
-2806 5825 m
-2909 5825 l
-2909 5826 l
-2806 5826 l
-2803 5826 m
-2910 5826 l
-2910 5827 l
-2803 5827 l
-2801 5827 m
-2910 5827 l
-2910 5828 l
-2801 5828 l
-2798 5828 m
-2910 5828 l
-2910 5829 l
-2798 5829 l
-2795 5829 m
-2911 5829 l
-2911 5830 l
-2795 5830 l
-2793 5830 m
-2911 5830 l
-2911 5831 l
-2793 5831 l
-2790 5831 m
-2911 5831 l
-2911 5832 l
-2790 5832 l
-2788 5832 m
-2912 5832 l
-2912 5833 l
-2788 5833 l
-2785 5833 m
-2912 5833 l
-2912 5834 l
-2785 5834 l
-2783 5834 m
-2913 5834 l
-2913 5835 l
-2783 5835 l
-2780 5835 m
-2913 5835 l
-2913 5836 l
-2780 5836 l
-2778 5836 m
-2913 5836 l
-2913 5837 l
-2778 5837 l
-2775 5837 m
-2914 5837 l
-2914 5838 l
-2775 5838 l
-2773 5838 m
-2914 5838 l
-2914 5839 l
-2773 5839 l
-2770 5839 m
-2915 5839 l
-2915 5840 l
-2770 5840 l
-2768 5840 m
-2915 5840 l
-2915 5841 l
-2768 5841 l
-2765 5841 m
-2915 5841 l
-2915 5842 l
-2765 5842 l
-2762 5842 m
-2916 5842 l
-2916 5843 l
-2762 5843 l
-2760 5843 m
-2916 5843 l
-2916 5844 l
-2760 5844 l
-2757 5844 m
-2917 5844 l
-2917 5845 l
-2757 5845 l
-2755 5845 m
-2917 5845 l
-2917 5846 l
-2755 5846 l
-2752 5846 m
-2917 5846 l
-2917 5847 l
-2752 5847 l
-2750 5847 m
-2918 5847 l
-2918 5848 l
-2750 5848 l
-2747 5848 m
-2918 5848 l
-2918 5849 l
-2747 5849 l
-2745 5849 m
-2918 5849 l
-2918 5850 l
-2745 5850 l
-2742 5850 m
-2919 5850 l
-2919 5851 l
-2742 5851 l
-2740 5851 m
-2919 5851 l
-2919 5852 l
-2740 5852 l
-2737 5852 m
-2920 5852 l
-2920 5853 l
-2737 5853 l
-2735 5853 m
-2920 5853 l
-2920 5854 l
-2735 5854 l
-2735 5854 m
-2920 5854 l
-2920 5855 l
-2735 5855 l
-2735 5855 m
-2921 5855 l
-2921 5857 l
-2735 5857 l
-2736 5857 m
-2922 5857 l
-2922 5860 l
-2736 5860 l
-2737 5860 m
-2923 5860 l
-2923 5862 l
-2737 5862 l
-2738 5862 m
-2924 5862 l
-2924 5865 l
-2738 5865 l
-2739 5865 m
-2925 5865 l
-2925 5867 l
-2739 5867 l
-2740 5867 m
-2926 5867 l
-2926 5870 l
-2740 5870 l
-2741 5870 m
-2927 5870 l
-2927 5872 l
-2741 5872 l
-2742 5872 m
-2927 5872 l
-2927 5873 l
-2742 5873 l
-2742 5873 m
-2928 5873 l
-2928 5875 l
-2742 5875 l
-2743 5875 m
-2929 5875 l
-2929 5877 l
-2743 5877 l
-2744 5877 m
-2929 5877 l
-2929 5878 l
-2744 5878 l
-2744 5878 m
-2930 5878 l
-2930 5880 l
-2744 5880 l
-2745 5880 m
-2931 5880 l
-2931 5882 l
-2745 5882 l
-2746 5882 m
-2931 5882 l
-2931 5883 l
-2746 5883 l
-2746 5883 m
-2932 5883 l
-2932 5885 l
-2746 5885 l
-2747 5885 m
-2933 5885 l
-2933 5887 l
-2747 5887 l
-2748 5887 m
-2933 5887 l
-2933 5888 l
-2748 5888 l
-2748 5888 m
-2934 5888 l
-2934 5890 l
-2748 5890 l
-2749 5890 m
-2934 5890 l
-2934 5891 l
-2749 5891 l
-2749 5891 m
-2935 5891 l
-2935 5892 l
-2749 5892 l
-2750 5892 m
-2935 5892 l
-2935 5893 l
-2750 5893 l
-2750 5893 m
-2936 5893 l
-2936 5895 l
-2750 5895 l
-2751 5895 m
-2936 5895 l
-2936 5896 l
-2751 5896 l
-2751 5896 m
-2937 5896 l
-2937 5897 l
-2751 5897 l
-2752 5897 m
-2937 5897 l
-2937 5898 l
-2752 5898 l
-2752 5898 m
-2938 5898 l
-2938 5900 l
-2752 5900 l
-2753 5900 m
-2938 5900 l
-2938 5901 l
-2753 5901 l
-2753 5901 m
-2939 5901 l
-2939 5902 l
-2753 5902 l
-2754 5902 m
-2939 5902 l
-2939 5903 l
-2754 5903 l
-2754 5903 m
-2939 5903 l
-2939 5904 l
-2754 5904 l
-2754 5904 m
-2939 5904 l
-2939 5905 l
-2754 5905 l
-2755 5905 m
-2937 5905 l
-2937 5906 l
-2755 5906 l
-2755 5906 m
-2934 5906 l
-2934 5907 l
-2755 5907 l
-2756 5907 m
-2932 5907 l
-2932 5908 l
-2756 5908 l
-2756 5908 m
-2929 5908 l
-2929 5909 l
-2756 5909 l
-2756 5909 m
-2927 5909 l
-2927 5910 l
-2756 5910 l
-2757 5910 m
-2924 5910 l
-2924 5911 l
-2757 5911 l
-2757 5911 m
-2922 5911 l
-2922 5912 l
-2757 5912 l
-2758 5912 m
-2919 5912 l
-2919 5913 l
-2758 5913 l
-2758 5913 m
-2917 5913 l
-2917 5914 l
-2758 5914 l
-2758 5914 m
-2914 5914 l
-2914 5915 l
-2758 5915 l
-2759 5915 m
-2912 5915 l
-2912 5916 l
-2759 5916 l
-2759 5916 m
-2909 5916 l
-2909 5917 l
-2759 5917 l
-2760 5917 m
-2906 5917 l
-2906 5918 l
-2760 5918 l
-2760 5918 m
-2904 5918 l
-2904 5919 l
-2760 5919 l
-2760 5919 m
-2901 5919 l
-2901 5920 l
-2760 5920 l
-2761 5920 m
-2899 5920 l
-2899 5921 l
-2761 5921 l
-2761 5921 m
-2896 5921 l
-2896 5922 l
-2761 5922 l
-2762 5922 m
-2894 5922 l
-2894 5923 l
-2762 5923 l
-2762 5923 m
-2891 5923 l
-2891 5924 l
-2762 5924 l
-2762 5924 m
-2889 5924 l
-2889 5925 l
-2762 5925 l
-2763 5925 m
-2886 5925 l
-2886 5926 l
-2763 5926 l
-2763 5926 m
-2884 5926 l
-2884 5927 l
-2763 5927 l
-2764 5927 m
-2881 5927 l
-2881 5928 l
-2764 5928 l
-2764 5928 m
-2879 5928 l
-2879 5929 l
-2764 5929 l
-2764 5929 m
-2876 5929 l
-2876 5930 l
-2764 5930 l
-2765 5930 m
-2874 5930 l
-2874 5931 l
-2765 5931 l
-2765 5931 m
-2871 5931 l
-2871 5932 l
-2765 5932 l
-2766 5932 m
-2869 5932 l
-2869 5933 l
-2766 5933 l
-2766 5933 m
-2866 5933 l
-2866 5934 l
-2766 5934 l
-2766 5934 m
-2864 5934 l
-2864 5935 l
-2766 5935 l
-2767 5935 m
-2861 5935 l
-2861 5936 l
-2767 5936 l
-2767 5936 m
-2859 5936 l
-2859 5937 l
-2767 5937 l
-2768 5937 m
-2856 5937 l
-2856 5938 l
-2768 5938 l
-2768 5938 m
-2854 5938 l
-2854 5939 l
-2768 5939 l
-2768 5939 m
-2851 5939 l
-2851 5940 l
-2768 5940 l
-2769 5940 m
-2849 5940 l
-2849 5941 l
-2769 5941 l
-2769 5941 m
-2846 5941 l
-2846 5942 l
-2769 5942 l
-2770 5942 m
-2843 5942 l
-2843 5943 l
-2770 5943 l
-2770 5943 m
-2841 5943 l
-2841 5944 l
-2770 5944 l
-2770 5944 m
-2838 5944 l
-2838 5945 l
-2770 5945 l
-2771 5945 m
-2836 5945 l
-2836 5946 l
-2771 5946 l
-2771 5946 m
-2833 5946 l
-2833 5947 l
-2771 5947 l
-2772 5947 m
-2831 5947 l
-2831 5948 l
-2772 5948 l
-2772 5948 m
-2828 5948 l
-2828 5949 l
-2772 5949 l
-2772 5949 m
-2826 5949 l
-2826 5950 l
-2772 5950 l
-2773 5950 m
-2823 5950 l
-2823 5951 l
-2773 5951 l
-2773 5951 m
-2821 5951 l
-2821 5952 l
-2773 5952 l
-2774 5952 m
-2818 5952 l
-2818 5953 l
-2774 5953 l
-2774 5953 m
-2816 5953 l
-2816 5954 l
-2774 5954 l
-2774 5954 m
-2813 5954 l
-2813 5955 l
-2774 5955 l
-2775 5955 m
-2811 5955 l
-2811 5956 l
-2775 5956 l
-2775 5956 m
-2808 5956 l
-2808 5957 l
-2775 5957 l
-2776 5957 m
-2806 5957 l
-2806 5958 l
-2776 5958 l
-2776 5958 m
-2803 5958 l
-2803 5959 l
-2776 5959 l
-2776 5959 m
-2801 5959 l
-2801 5960 l
-2776 5960 l
-2777 5960 m
-2798 5960 l
-2798 5961 l
-2777 5961 l
-2777 5961 m
-2796 5961 l
-2796 5962 l
-2777 5962 l
-2778 5962 m
-2793 5962 l
-2793 5963 l
-2778 5963 l
-2778 5963 m
-2791 5963 l
-2791 5964 l
-2778 5964 l
-2778 5964 m
-2788 5964 l
-2788 5965 l
-2778 5965 l
-2779 5965 m
-2786 5965 l
-2786 5966 l
-2779 5966 l
-2779 5966 m
-2783 5966 l
-2783 5967 l
-2779 5967 l
-Y
-2939 5903.9 m
-2895 5791 l
-2735 5854 l
-2780 5967 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-2887 5830 m
-2878 5829 l
-2862 5822 l
-2894 5904 l
-S
-2796 5848 m
-2809 5847 l
-2816 5854 l
-2819 5861 l
-2818 5871 l
-2812 5878 l
-2798 5888 l
-2788 5896 l
-2783 5907 l
-2782 5916 l
-2787 5928 l
-2794 5934 l
-2799 5936 l
-2812 5936 l
-2828 5930 l
-2838 5921 l
-2840 5916 l
-2841 5906 l
-2837 5895 l
-2830 5889 l
-2819 5884 l
-2806 5885 l
-2789 5887 l
-2779 5886 l
-2772 5880 l
-2769 5872 l
-2770 5863 l
-2780 5854 l
-2796 5848 l
-S
-1 g
-3616 5200 m
-3619 5200 l
-3619 5201 l
-3616 5201 l
-3615 5201 m
-3620 5201 l
-3620 5202 l
-3615 5202 l
-3614 5202 m
-3621 5202 l
-3621 5203 l
-3614 5203 l
-3613 5203 m
-3623 5203 l
-3623 5204 l
-3613 5204 l
-3612 5204 m
-3624 5204 l
-3624 5205 l
-3612 5205 l
-3612 5205 m
-3625 5205 l
-3625 5206 l
-3612 5206 l
-3611 5206 m
-3626 5206 l
-3626 5207 l
-3611 5207 l
-3610 5207 m
-3628 5207 l
-3628 5208 l
-3610 5208 l
-3609 5208 m
-3629 5208 l
-3629 5209 l
-3609 5209 l
-3608 5209 m
-3630 5209 l
-3630 5210 l
-3608 5210 l
-3608 5210 m
-3631 5210 l
-3631 5211 l
-3608 5211 l
-3607 5211 m
-3633 5211 l
-3633 5212 l
-3607 5212 l
-3606 5212 m
-3634 5212 l
-3634 5213 l
-3606 5213 l
-3605 5213 m
-3635 5213 l
-3635 5214 l
-3605 5214 l
-3604 5214 m
-3636 5214 l
-3636 5215 l
-3604 5215 l
-3604 5215 m
-3638 5215 l
-3638 5216 l
-3604 5216 l
-3603 5216 m
-3639 5216 l
-3639 5217 l
-3603 5217 l
-3602 5217 m
-3640 5217 l
-3640 5218 l
-3602 5218 l
-3601 5218 m
-3641 5218 l
-3641 5219 l
-3601 5219 l
-3600 5219 m
-3643 5219 l
-3643 5220 l
-3600 5220 l
-3600 5220 m
-3644 5220 l
-3644 5221 l
-3600 5221 l
-3599 5221 m
-3645 5221 l
-3645 5222 l
-3599 5222 l
-3598 5222 m
-3647 5222 l
-3647 5223 l
-3598 5223 l
-3597 5223 m
-3648 5223 l
-3648 5224 l
-3597 5224 l
-3596 5224 m
-3649 5224 l
-3649 5225 l
-3596 5225 l
-3596 5225 m
-3650 5225 l
-3650 5226 l
-3596 5226 l
-3595 5226 m
-3652 5226 l
-3652 5227 l
-3595 5227 l
-3594 5227 m
-3653 5227 l
-3653 5228 l
-3594 5228 l
-3593 5228 m
-3654 5228 l
-3654 5229 l
-3593 5229 l
-3592 5229 m
-3655 5229 l
-3655 5230 l
-3592 5230 l
-3592 5230 m
-3657 5230 l
-3657 5231 l
-3592 5231 l
-3591 5231 m
-3658 5231 l
-3658 5232 l
-3591 5232 l
-3590 5232 m
-3659 5232 l
-3659 5233 l
-3590 5233 l
-3589 5233 m
-3660 5233 l
-3660 5234 l
-3589 5234 l
-3588 5234 m
-3662 5234 l
-3662 5235 l
-3588 5235 l
-3588 5235 m
-3663 5235 l
-3663 5236 l
-3588 5236 l
-3587 5236 m
-3664 5236 l
-3664 5237 l
-3587 5237 l
-3586 5237 m
-3665 5237 l
-3665 5238 l
-3586 5238 l
-3585 5238 m
-3667 5238 l
-3667 5239 l
-3585 5239 l
-3584 5239 m
-3668 5239 l
-3668 5240 l
-3584 5240 l
-3584 5240 m
-3669 5240 l
-3669 5241 l
-3584 5241 l
-3583 5241 m
-3670 5241 l
-3670 5242 l
-3583 5242 l
-3582 5242 m
-3672 5242 l
-3672 5243 l
-3582 5243 l
-3581 5243 m
-3673 5243 l
-3673 5244 l
-3581 5244 l
-3580 5244 m
-3674 5244 l
-3674 5245 l
-3580 5245 l
-3580 5245 m
-3676 5245 l
-3676 5246 l
-3580 5246 l
-3579 5246 m
-3677 5246 l
-3677 5247 l
-3579 5247 l
-3578 5247 m
-3678 5247 l
-3678 5248 l
-3578 5248 l
-3577 5248 m
-3679 5248 l
-3679 5249 l
-3577 5249 l
-3576 5249 m
-3681 5249 l
-3681 5250 l
-3576 5250 l
-3575 5250 m
-3682 5250 l
-3682 5251 l
-3575 5251 l
-3575 5251 m
-3683 5251 l
-3683 5252 l
-3575 5252 l
-3574 5252 m
-3684 5252 l
-3684 5253 l
-3574 5253 l
-3573 5253 m
-3686 5253 l
-3686 5254 l
-3573 5254 l
-3572 5254 m
-3687 5254 l
-3687 5255 l
-3572 5255 l
-3571 5255 m
-3688 5255 l
-3688 5256 l
-3571 5256 l
-3571 5256 m
-3689 5256 l
-3689 5257 l
-3571 5257 l
-3570 5257 m
-3691 5257 l
-3691 5258 l
-3570 5258 l
-3569 5258 m
-3692 5258 l
-3692 5259 l
-3569 5259 l
-3568 5259 m
-3693 5259 l
-3693 5260 l
-3568 5260 l
-3567 5260 m
-3694 5260 l
-3694 5261 l
-3567 5261 l
-3567 5261 m
-3696 5261 l
-3696 5262 l
-3567 5262 l
-3566 5262 m
-3697 5262 l
-3697 5263 l
-3566 5263 l
-3565 5263 m
-3698 5263 l
-3698 5264 l
-3565 5264 l
-3564 5264 m
-3699 5264 l
-3699 5265 l
-3564 5265 l
-3563 5265 m
-3701 5265 l
-3701 5266 l
-3563 5266 l
-3563 5266 m
-3702 5266 l
-3702 5267 l
-3563 5267 l
-3562 5267 m
-3703 5267 l
-3703 5268 l
-3562 5268 l
-3561 5268 m
-3705 5268 l
-3705 5269 l
-3561 5269 l
-3560 5269 m
-3706 5269 l
-3706 5270 l
-3560 5270 l
-3559 5270 m
-3707 5270 l
-3707 5271 l
-3559 5271 l
-3559 5271 m
-3708 5271 l
-3708 5272 l
-3559 5272 l
-3558 5272 m
-3710 5272 l
-3710 5273 l
-3558 5273 l
-3557 5273 m
-3711 5273 l
-3711 5274 l
-3557 5274 l
-3556 5274 m
-3712 5274 l
-3712 5275 l
-3556 5275 l
-3555 5275 m
-3712 5275 l
-3712 5276 l
-3555 5276 l
-3555 5276 m
-3711 5276 l
-3711 5277 l
-3555 5277 l
-3554 5277 m
-3711 5277 l
-3711 5278 l
-3554 5278 l
-3553 5278 m
-3710 5278 l
-3710 5279 l
-3553 5279 l
-3552 5279 m
-3709 5279 l
-3709 5280 l
-3552 5280 l
-3551 5280 m
-3708 5280 l
-3708 5281 l
-3551 5281 l
-3551 5281 m
-3707 5281 l
-3707 5282 l
-3551 5282 l
-3550 5282 m
-3707 5282 l
-3707 5283 l
-3550 5283 l
-3549 5283 m
-3706 5283 l
-3706 5284 l
-3549 5284 l
-3548 5284 m
-3705 5284 l
-3705 5285 l
-3548 5285 l
-3547 5285 m
-3704 5285 l
-3704 5286 l
-3547 5286 l
-3547 5286 m
-3703 5286 l
-3703 5287 l
-3547 5287 l
-3546 5287 m
-3703 5287 l
-3703 5288 l
-3546 5288 l
-3545 5288 m
-3702 5288 l
-3702 5289 l
-3545 5289 l
-3544 5289 m
-3701 5289 l
-3701 5290 l
-3544 5290 l
-3543 5290 m
-3700 5290 l
-3700 5291 l
-3543 5291 l
-3543 5291 m
-3699 5291 l
-3699 5292 l
-3543 5292 l
-3542 5292 m
-3699 5292 l
-3699 5293 l
-3542 5293 l
-3541 5293 m
-3698 5293 l
-3698 5294 l
-3541 5294 l
-3540 5294 m
-3697 5294 l
-3697 5295 l
-3540 5295 l
-3539 5295 m
-3696 5295 l
-3696 5296 l
-3539 5296 l
-3538 5296 m
-3695 5296 l
-3695 5298 l
-3538 5298 l
-3537 5298 m
-3694 5298 l
-3694 5299 l
-3537 5299 l
-3536 5299 m
-3693 5299 l
-3693 5300 l
-3536 5300 l
-3535 5300 m
-3692 5300 l
-3692 5301 l
-3535 5301 l
-3534 5301 m
-3691 5301 l
-3691 5303 l
-3534 5303 l
-3533 5303 m
-3690 5303 l
-3690 5304 l
-3533 5304 l
-3532 5304 m
-3689 5304 l
-3689 5305 l
-3532 5305 l
-3531 5305 m
-3688 5305 l
-3688 5306 l
-3531 5306 l
-3530 5306 m
-3687 5306 l
-3687 5308 l
-3530 5308 l
-3529 5308 m
-3686 5308 l
-3686 5309 l
-3529 5309 l
-3528 5309 m
-3685 5309 l
-3685 5310 l
-3528 5310 l
-3527 5310 m
-3684 5310 l
-3684 5311 l
-3527 5311 l
-3526 5311 m
-3683 5311 l
-3683 5313 l
-3526 5313 l
-3525 5313 m
-3682 5313 l
-3682 5314 l
-3525 5314 l
-3524 5314 m
-3681 5314 l
-3681 5315 l
-3524 5315 l
-3523 5315 m
-3680 5315 l
-3680 5316 l
-3523 5316 l
-3522 5316 m
-3679 5316 l
-3679 5318 l
-3522 5318 l
-3521 5318 m
-3678 5318 l
-3678 5319 l
-3521 5319 l
-3520 5319 m
-3677 5319 l
-3677 5320 l
-3520 5320 l
-3519 5320 m
-3676 5320 l
-3676 5321 l
-3519 5321 l
-3518 5321 m
-3675 5321 l
-3675 5323 l
-3518 5323 l
-3517 5323 m
-3674 5323 l
-3674 5324 l
-3517 5324 l
-3516 5324 m
-3673 5324 l
-3673 5325 l
-3516 5325 l
-3515 5325 m
-3672 5325 l
-3672 5326 l
-3515 5326 l
-3514 5326 m
-3672 5326 l
-3672 5327 l
-3514 5327 l
-3514 5327 m
-3671 5327 l
-3671 5328 l
-3514 5328 l
-3513 5328 m
-3670 5328 l
-3670 5329 l
-3513 5329 l
-3512 5329 m
-3669 5329 l
-3669 5330 l
-3512 5330 l
-3511 5330 m
-3668 5330 l
-3668 5331 l
-3511 5331 l
-3510 5331 m
-3668 5331 l
-3668 5332 l
-3510 5332 l
-3510 5332 m
-3667 5332 l
-3667 5333 l
-3510 5333 l
-3509 5333 m
-3666 5333 l
-3666 5334 l
-3509 5334 l
-3508 5334 m
-3665 5334 l
-3665 5335 l
-3508 5335 l
-3507 5335 m
-3664 5335 l
-3664 5336 l
-3507 5336 l
-3506 5336 m
-3664 5336 l
-3664 5337 l
-3506 5337 l
-3506 5337 m
-3663 5337 l
-3663 5338 l
-3506 5338 l
-3505 5338 m
-3662 5338 l
-3662 5339 l
-3505 5339 l
-3504 5339 m
-3661 5339 l
-3661 5340 l
-3504 5340 l
-3503 5340 m
-3660 5340 l
-3660 5341 l
-3503 5341 l
-3502 5341 m
-3660 5341 l
-3660 5342 l
-3502 5342 l
-3502 5342 m
-3659 5342 l
-3659 5343 l
-3502 5343 l
-3502 5343 m
-3658 5343 l
-3658 5344 l
-3502 5344 l
-3503 5344 m
-3657 5344 l
-3657 5345 l
-3503 5345 l
-3504 5345 m
-3656 5345 l
-3656 5346 l
-3504 5346 l
-3505 5346 m
-3656 5346 l
-3656 5347 l
-3505 5347 l
-3507 5347 m
-3655 5347 l
-3655 5348 l
-3507 5348 l
-3508 5348 m
-3654 5348 l
-3654 5349 l
-3508 5349 l
-3509 5349 m
-3653 5349 l
-3653 5350 l
-3509 5350 l
-3510 5350 m
-3652 5350 l
-3652 5351 l
-3510 5351 l
-3512 5351 m
-3652 5351 l
-3652 5352 l
-3512 5352 l
-3513 5352 m
-3651 5352 l
-3651 5353 l
-3513 5353 l
-3514 5353 m
-3650 5353 l
-3650 5354 l
-3514 5354 l
-3515 5354 m
-3649 5354 l
-3649 5355 l
-3515 5355 l
-3517 5355 m
-3648 5355 l
-3648 5356 l
-3517 5356 l
-3518 5356 m
-3648 5356 l
-3648 5357 l
-3518 5357 l
-3519 5357 m
-3647 5357 l
-3647 5358 l
-3519 5358 l
-3520 5358 m
-3646 5358 l
-3646 5359 l
-3520 5359 l
-3522 5359 m
-3645 5359 l
-3645 5360 l
-3522 5360 l
-3523 5360 m
-3644 5360 l
-3644 5361 l
-3523 5361 l
-3524 5361 m
-3644 5361 l
-3644 5362 l
-3524 5362 l
-3525 5362 m
-3643 5362 l
-3643 5363 l
-3525 5363 l
-3527 5363 m
-3642 5363 l
-3642 5364 l
-3527 5364 l
-3528 5364 m
-3641 5364 l
-3641 5365 l
-3528 5365 l
-3529 5365 m
-3640 5365 l
-3640 5366 l
-3529 5366 l
-3530 5366 m
-3640 5366 l
-3640 5367 l
-3530 5367 l
-3532 5367 m
-3639 5367 l
-3639 5368 l
-3532 5368 l
-3533 5368 m
-3638 5368 l
-3638 5369 l
-3533 5369 l
-3534 5369 m
-3637 5369 l
-3637 5370 l
-3534 5370 l
-3535 5370 m
-3636 5370 l
-3636 5371 l
-3535 5371 l
-3537 5371 m
-3636 5371 l
-3636 5372 l
-3537 5372 l
-3538 5372 m
-3635 5372 l
-3635 5373 l
-3538 5373 l
-3539 5373 m
-3634 5373 l
-3634 5374 l
-3539 5374 l
-3540 5374 m
-3633 5374 l
-3633 5375 l
-3540 5375 l
-3542 5375 m
-3633 5375 l
-3633 5376 l
-3542 5376 l
-3543 5376 m
-3632 5376 l
-3632 5377 l
-3543 5377 l
-3544 5377 m
-3631 5377 l
-3631 5378 l
-3544 5378 l
-3545 5378 m
-3630 5378 l
-3630 5379 l
-3545 5379 l
-3547 5379 m
-3629 5379 l
-3629 5380 l
-3547 5380 l
-3548 5380 m
-3629 5380 l
-3629 5381 l
-3548 5381 l
-3549 5381 m
-3628 5381 l
-3628 5382 l
-3549 5382 l
-3550 5382 m
-3627 5382 l
-3627 5383 l
-3550 5383 l
-3551 5383 m
-3626 5383 l
-3626 5384 l
-3551 5384 l
-3553 5384 m
-3625 5384 l
-3625 5385 l
-3553 5385 l
-3554 5385 m
-3625 5385 l
-3625 5386 l
-3554 5386 l
-3555 5386 m
-3624 5386 l
-3624 5387 l
-3555 5387 l
-3556 5387 m
-3623 5387 l
-3623 5388 l
-3556 5388 l
-3558 5388 m
-3622 5388 l
-3622 5389 l
-3558 5389 l
-3559 5389 m
-3621 5389 l
-3621 5390 l
-3559 5390 l
-3560 5390 m
-3621 5390 l
-3621 5391 l
-3560 5391 l
-3561 5391 m
-3620 5391 l
-3620 5392 l
-3561 5392 l
-3563 5392 m
-3619 5392 l
-3619 5393 l
-3563 5393 l
-3564 5393 m
-3618 5393 l
-3618 5394 l
-3564 5394 l
-3565 5394 m
-3617 5394 l
-3617 5395 l
-3565 5395 l
-3566 5395 m
-3617 5395 l
-3617 5396 l
-3566 5396 l
-3568 5396 m
-3616 5396 l
-3616 5397 l
-3568 5397 l
-3569 5397 m
-3615 5397 l
-3615 5398 l
-3569 5398 l
-3570 5398 m
-3614 5398 l
-3614 5399 l
-3570 5399 l
-3571 5399 m
-3613 5399 l
-3613 5400 l
-3571 5400 l
-3573 5400 m
-3613 5400 l
-3613 5401 l
-3573 5401 l
-3574 5401 m
-3612 5401 l
-3612 5402 l
-3574 5402 l
-3575 5402 m
-3611 5402 l
-3611 5403 l
-3575 5403 l
-3576 5403 m
-3610 5403 l
-3610 5404 l
-3576 5404 l
-3578 5404 m
-3609 5404 l
-3609 5405 l
-3578 5405 l
-3579 5405 m
-3609 5405 l
-3609 5406 l
-3579 5406 l
-3580 5406 m
-3608 5406 l
-3608 5407 l
-3580 5407 l
-3581 5407 m
-3607 5407 l
-3607 5408 l
-3581 5408 l
-3583 5408 m
-3606 5408 l
-3606 5409 l
-3583 5409 l
-3584 5409 m
-3605 5409 l
-3605 5410 l
-3584 5410 l
-3585 5410 m
-3605 5410 l
-3605 5411 l
-3585 5411 l
-3586 5411 m
-3604 5411 l
-3604 5412 l
-3586 5412 l
-3588 5412 m
-3603 5412 l
-3603 5413 l
-3588 5413 l
-3589 5413 m
-3602 5413 l
-3602 5414 l
-3589 5414 l
-3590 5414 m
-3601 5414 l
-3601 5415 l
-3590 5415 l
-3591 5415 m
-3601 5415 l
-3601 5416 l
-3591 5416 l
-3593 5416 m
-3600 5416 l
-3600 5417 l
-3593 5417 l
-3594 5417 m
-3599 5417 l
-3599 5418 l
-3594 5418 l
-3595 5418 m
-3598 5418 l
-3598 5419 l
-3595 5419 l
-Y
-3711.6 5275 m
-3617 5200 l
-3502 5343 l
-3597 5419 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3631 5243 m
-3627 5240 l
-3618 5238 l
-3612 5239 l
-3604 5243 l
-3593 5256 l
-3592 5265 l
-3592 5271 l
-3596 5279 l
-3603 5284 l
-3612 5286 l
-3627 5288 l
-3685 5281 l
-3649 5327 l
-S
-3549 5311 m
-3560 5304 l
-3575 5305 l
-3594 5315 l
-3604 5323 l
-3618 5339 l
-3622 5353 l
-3618 5366 l
-3613 5372 l
-3602 5380 l
-3587 5378 l
-3568 5369 l
-3558 5361 l
-3544 5344 l
-3539 5330 l
-3544 5318 l
-3549 5311 l
-S
-1 g
-3938 4336 m
-3946 4336 l
-3946 4337 l
-3938 4337 l
-3938 4337 m
-3953 4337 l
-3953 4338 l
-3938 4338 l
-3938 4338 m
-3960 4338 l
-3960 4339 l
-3938 4339 l
-3938 4339 m
-3967 4339 l
-3967 4340 l
-3938 4340 l
-3938 4340 m
-3973 4340 l
-3973 4341 l
-3938 4341 l
-3938 4341 m
-3980 4341 l
-3980 4342 l
-3938 4342 l
-3937 4342 m
-3987 4342 l
-3987 4343 l
-3937 4343 l
-3937 4343 m
-3994 4343 l
-3994 4344 l
-3937 4344 l
-3937 4344 m
-4001 4344 l
-4001 4345 l
-3937 4345 l
-3937 4345 m
-4007 4345 l
-4007 4346 l
-3937 4346 l
-3937 4346 m
-4014 4346 l
-4014 4347 l
-3937 4347 l
-3937 4347 m
-4021 4347 l
-4021 4348 l
-3937 4348 l
-3936 4348 m
-4028 4348 l
-4028 4349 l
-3936 4349 l
-3936 4349 m
-4035 4349 l
-4035 4350 l
-3936 4350 l
-3936 4350 m
-4041 4350 l
-4041 4351 l
-3936 4351 l
-3936 4351 m
-4048 4351 l
-4048 4352 l
-3936 4352 l
-3936 4352 m
-4055 4352 l
-4055 4353 l
-3936 4353 l
-3936 4353 m
-4059 4353 l
-4059 4354 l
-3936 4354 l
-3936 4354 m
-4059 4354 l
-4059 4355 l
-3936 4355 l
-3935 4355 m
-4059 4355 l
-4059 4357 l
-3935 4357 l
-3935 4357 m
-4058 4357 l
-4058 4361 l
-3935 4361 l
-3934 4361 m
-4058 4361 l
-4058 4364 l
-3934 4364 l
-3934 4364 m
-4057 4364 l
-4057 4368 l
-3934 4368 l
-3933 4368 m
-4057 4368 l
-4057 4371 l
-3933 4371 l
-3933 4371 m
-4056 4371 l
-4056 4374 l
-3933 4374 l
-3932 4374 m
-4056 4374 l
-4056 4377 l
-3932 4377 l
-3932 4377 m
-4055 4377 l
-4055 4381 l
-3932 4381 l
-3931 4381 m
-4055 4381 l
-4055 4384 l
-3931 4384 l
-3931 4384 m
-4054 4384 l
-4054 4387 l
-3931 4387 l
-3930 4387 m
-4054 4387 l
-4054 4390 l
-3930 4390 l
-3930 4390 m
-4053 4390 l
-4053 4394 l
-3930 4394 l
-3929 4394 m
-4053 4394 l
-4053 4397 l
-3929 4397 l
-3929 4397 m
-4052 4397 l
-4052 4400 l
-3929 4400 l
-3928 4400 m
-4052 4400 l
-4052 4404 l
-3928 4404 l
-3928 4404 m
-4051 4404 l
-4051 4407 l
-3928 4407 l
-3927 4407 m
-4051 4407 l
-4051 4410 l
-3927 4410 l
-3927 4410 m
-4050 4410 l
-4050 4413 l
-3927 4413 l
-3926 4413 m
-4050 4413 l
-4050 4417 l
-3926 4417 l
-3926 4417 m
-4049 4417 l
-4049 4420 l
-3926 4420 l
-3925 4420 m
-4049 4420 l
-4049 4423 l
-3925 4423 l
-3925 4423 m
-4048 4423 l
-4048 4426 l
-3925 4426 l
-3924 4426 m
-4048 4426 l
-4048 4430 l
-3924 4430 l
-3924 4430 m
-4047 4430 l
-4047 4432 l
-3924 4432 l
-3923 4432 m
-4047 4432 l
-4047 4437 l
-3923 4437 l
-3923 4437 m
-4046 4437 l
-4046 4439 l
-3923 4439 l
-3922 4439 m
-4046 4439 l
-4046 4443 l
-3922 4443 l
-3922 4443 m
-4045 4443 l
-4045 4445 l
-3922 4445 l
-3921 4445 m
-4045 4445 l
-4045 4450 l
-3921 4450 l
-3921 4450 m
-4044 4450 l
-4044 4452 l
-3921 4452 l
-3920 4452 m
-4044 4452 l
-4044 4456 l
-3920 4456 l
-3920 4456 m
-4043 4456 l
-4043 4458 l
-3920 4458 l
-3919 4458 m
-4043 4458 l
-4043 4463 l
-3919 4463 l
-3919 4463 m
-4042 4463 l
-4042 4465 l
-3919 4465 l
-3918 4465 m
-4042 4465 l
-4042 4470 l
-3918 4470 l
-3918 4470 m
-4041 4470 l
-4041 4471 l
-3918 4471 l
-3917 4471 m
-4041 4471 l
-4041 4476 l
-3917 4476 l
-3917 4476 m
-4040 4476 l
-4040 4478 l
-3917 4478 l
-3916 4478 m
-4040 4478 l
-4040 4483 l
-3916 4483 l
-3916 4483 m
-4039 4483 l
-4039 4484 l
-3916 4484 l
-3915 4484 m
-4039 4484 l
-4039 4489 l
-3915 4489 l
-3915 4489 m
-4038 4489 l
-4038 4491 l
-3915 4491 l
-3914 4491 m
-4038 4491 l
-4038 4496 l
-3914 4496 l
-3914 4496 m
-4037 4496 l
-4037 4497 l
-3914 4497 l
-3913 4497 m
-4037 4497 l
-4037 4503 l
-3913 4503 l
-3913 4503 m
-4036 4503 l
-4036 4504 l
-3913 4504 l
-3912 4504 m
-4036 4504 l
-4036 4509 l
-3912 4509 l
-3912 4509 m
-4035 4509 l
-4035 4510 l
-3912 4510 l
-3911 4510 m
-4035 4510 l
-4035 4516 l
-3911 4516 l
-3911 4516 m
-4034 4516 l
-4034 4517 l
-3911 4517 l
-3911 4517 m
-4034 4517 l
-4034 4518 l
-3911 4518 l
-3917 4518 m
-4034 4518 l
-4034 4519 l
-3917 4519 l
-3924 4519 m
-4034 4519 l
-4034 4520 l
-3924 4520 l
-3931 4520 m
-4034 4520 l
-4034 4521 l
-3931 4521 l
-3937 4521 m
-4034 4521 l
-4034 4522 l
-3937 4522 l
-3944 4522 m
-4033 4522 l
-4033 4523 l
-3944 4523 l
-3951 4523 m
-4033 4523 l
-4033 4524 l
-3951 4524 l
-3957 4524 m
-4033 4524 l
-4033 4525 l
-3957 4525 l
-3964 4525 m
-4033 4525 l
-4033 4526 l
-3964 4526 l
-3971 4526 m
-4033 4526 l
-4033 4527 l
-3971 4527 l
-3977 4527 m
-4033 4527 l
-4033 4528 l
-3977 4528 l
-3984 4528 m
-4033 4528 l
-4033 4529 l
-3984 4529 l
-3991 4529 m
-4032 4529 l
-4032 4530 l
-3991 4530 l
-3997 4530 m
-4032 4530 l
-4032 4531 l
-3997 4531 l
-4004 4531 m
-4032 4531 l
-4032 4532 l
-4004 4532 l
-4011 4532 m
-4032 4532 l
-4032 4533 l
-4011 4533 l
-4017 4533 m
-4032 4533 l
-4032 4534 l
-4017 4534 l
-4024 4534 m
-4032 4534 l
-4032 4535 l
-4024 4535 l
-Y
-4058.5 4353.6 m
-3939 4336 l
-3911 4517 l
-4031 4535 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3972 4366 m
-3968 4365 l
-3959 4368 l
-3954 4372 l
-3949 4379 l
-3947 4396 l
-3949 4405 l
-3953 4410 l
-3961 4415 l
-3969 4416 l
-3978 4413 l
-3991 4407 l
-4039 4372 l
-4030 4430 l
-S
-3960 4449 m
-3956 4448 l
-3947 4451 l
-3942 4454 l
-3937 4462 l
-3934 4478 l
-3937 4487 l
-3941 4492 l
-3948 4497 l
-3956 4499 l
-3965 4496 l
-3979 4489 l
-4026 4454 l
-4018 4512 l
-S
-1 g
-2292 3957 m
-2296 3957 l
-2296 3958 l
-2292 3958 l
-2289 3958 m
-2296 3958 l
-2296 3959 l
-2289 3959 l
-2287 3959 m
-2297 3959 l
-2297 3960 l
-2287 3960 l
-2284 3960 m
-2297 3960 l
-2297 3961 l
-2284 3961 l
-2282 3961 m
-2297 3961 l
-2297 3962 l
-2282 3962 l
-2279 3962 m
-2298 3962 l
-2298 3963 l
-2279 3963 l
-2277 3963 m
-2298 3963 l
-2298 3964 l
-2277 3964 l
-2274 3964 m
-2299 3964 l
-2299 3965 l
-2274 3965 l
-2272 3965 m
-2299 3965 l
-2299 3966 l
-2272 3966 l
-2269 3966 m
-2299 3966 l
-2299 3967 l
-2269 3967 l
-2267 3967 m
-2300 3967 l
-2300 3968 l
-2267 3968 l
-2264 3968 m
-2300 3968 l
-2300 3969 l
-2264 3969 l
-2262 3969 m
-2301 3969 l
-2301 3970 l
-2262 3970 l
-2259 3970 m
-2301 3970 l
-2301 3971 l
-2259 3971 l
-2256 3971 m
-2301 3971 l
-2301 3972 l
-2256 3972 l
-2254 3972 m
-2302 3972 l
-2302 3973 l
-2254 3973 l
-2251 3973 m
-2302 3973 l
-2302 3974 l
-2251 3974 l
-2249 3974 m
-2303 3974 l
-2303 3975 l
-2249 3975 l
-2246 3975 m
-2303 3975 l
-2303 3976 l
-2246 3976 l
-2244 3976 m
-2303 3976 l
-2303 3977 l
-2244 3977 l
-2241 3977 m
-2304 3977 l
-2304 3978 l
-2241 3978 l
-2239 3978 m
-2304 3978 l
-2304 3979 l
-2239 3979 l
-2236 3979 m
-2305 3979 l
-2305 3980 l
-2236 3980 l
-2234 3980 m
-2305 3980 l
-2305 3981 l
-2234 3981 l
-2231 3981 m
-2305 3981 l
-2305 3982 l
-2231 3982 l
-2229 3982 m
-2306 3982 l
-2306 3983 l
-2229 3983 l
-2226 3983 m
-2306 3983 l
-2306 3984 l
-2226 3984 l
-2224 3984 m
-2307 3984 l
-2307 3985 l
-2224 3985 l
-2221 3985 m
-2307 3985 l
-2307 3986 l
-2221 3986 l
-2218 3986 m
-2307 3986 l
-2307 3987 l
-2218 3987 l
-2216 3987 m
-2308 3987 l
-2308 3988 l
-2216 3988 l
-2213 3988 m
-2308 3988 l
-2308 3989 l
-2213 3989 l
-2211 3989 m
-2308 3989 l
-2308 3990 l
-2211 3990 l
-2208 3990 m
-2309 3990 l
-2309 3991 l
-2208 3991 l
-2206 3991 m
-2309 3991 l
-2309 3992 l
-2206 3992 l
-2203 3992 m
-2310 3992 l
-2310 3993 l
-2203 3993 l
-2201 3993 m
-2310 3993 l
-2310 3994 l
-2201 3994 l
-2198 3994 m
-2310 3994 l
-2310 3995 l
-2198 3995 l
-2196 3995 m
-2311 3995 l
-2311 3996 l
-2196 3996 l
-2193 3996 m
-2311 3996 l
-2311 3997 l
-2193 3997 l
-2191 3997 m
-2312 3997 l
-2312 3998 l
-2191 3998 l
-2188 3998 m
-2312 3998 l
-2312 3999 l
-2188 3999 l
-2186 3999 m
-2312 3999 l
-2312 4000 l
-2186 4000 l
-2183 4000 m
-2313 4000 l
-2313 4001 l
-2183 4001 l
-2180 4001 m
-2313 4001 l
-2313 4002 l
-2180 4002 l
-2178 4002 m
-2314 4002 l
-2314 4003 l
-2178 4003 l
-2175 4003 m
-2314 4003 l
-2314 4004 l
-2175 4004 l
-2173 4004 m
-2314 4004 l
-2314 4005 l
-2173 4005 l
-2170 4005 m
-2315 4005 l
-2315 4006 l
-2170 4006 l
-2168 4006 m
-2315 4006 l
-2315 4007 l
-2168 4007 l
-2165 4007 m
-2316 4007 l
-2316 4008 l
-2165 4008 l
-2163 4008 m
-2316 4008 l
-2316 4009 l
-2163 4009 l
-2160 4009 m
-2316 4009 l
-2316 4010 l
-2160 4010 l
-2158 4010 m
-2317 4010 l
-2317 4011 l
-2158 4011 l
-2155 4011 m
-2317 4011 l
-2317 4012 l
-2155 4012 l
-2153 4012 m
-2318 4012 l
-2318 4013 l
-2153 4013 l
-2150 4013 m
-2318 4013 l
-2318 4014 l
-2150 4014 l
-2147 4014 m
-2318 4014 l
-2318 4015 l
-2147 4015 l
-2145 4015 m
-2319 4015 l
-2319 4016 l
-2145 4016 l
-2142 4016 m
-2319 4016 l
-2319 4017 l
-2142 4017 l
-2140 4017 m
-2320 4017 l
-2320 4018 l
-2140 4018 l
-2137 4018 m
-2320 4018 l
-2320 4019 l
-2137 4019 l
-2135 4019 m
-2320 4019 l
-2320 4020 l
-2135 4020 l
-2132 4020 m
-2321 4020 l
-2321 4021 l
-2132 4021 l
-2130 4021 m
-2321 4021 l
-2321 4022 l
-2130 4022 l
-2127 4022 m
-2321 4022 l
-2321 4023 l
-2127 4023 l
-2125 4023 m
-2322 4023 l
-2322 4024 l
-2125 4024 l
-2122 4024 m
-2322 4024 l
-2322 4025 l
-2122 4025 l
-2120 4025 m
-2323 4025 l
-2323 4026 l
-2120 4026 l
-2117 4026 m
-2323 4026 l
-2323 4027 l
-2117 4027 l
-2115 4027 m
-2323 4027 l
-2323 4028 l
-2115 4028 l
-2112 4028 m
-2324 4028 l
-2324 4029 l
-2112 4029 l
-2109 4029 m
-2324 4029 l
-2324 4030 l
-2109 4030 l
-2107 4030 m
-2325 4030 l
-2325 4031 l
-2107 4031 l
-2104 4031 m
-2325 4031 l
-2325 4032 l
-2104 4032 l
-2102 4032 m
-2325 4032 l
-2325 4033 l
-2102 4033 l
-2099 4033 m
-2326 4033 l
-2326 4034 l
-2099 4034 l
-2097 4034 m
-2326 4034 l
-2326 4035 l
-2097 4035 l
-2094 4035 m
-2327 4035 l
-2327 4036 l
-2094 4036 l
-2092 4036 m
-2327 4036 l
-2327 4037 l
-2092 4037 l
-2089 4037 m
-2327 4037 l
-2327 4038 l
-2089 4038 l
-2087 4038 m
-2328 4038 l
-2328 4039 l
-2087 4039 l
-2084 4039 m
-2328 4039 l
-2328 4040 l
-2084 4040 l
-2082 4040 m
-2329 4040 l
-2329 4041 l
-2082 4041 l
-2079 4041 m
-2329 4041 l
-2329 4042 l
-2079 4042 l
-2077 4042 m
-2329 4042 l
-2329 4043 l
-2077 4043 l
-2074 4043 m
-2330 4043 l
-2330 4044 l
-2074 4044 l
-2071 4044 m
-2330 4044 l
-2330 4045 l
-2071 4045 l
-2069 4045 m
-2331 4045 l
-2331 4046 l
-2069 4046 l
-2066 4046 m
-2331 4046 l
-2331 4047 l
-2066 4047 l
-2064 4047 m
-2331 4047 l
-2331 4048 l
-2064 4048 l
-2061 4048 m
-2332 4048 l
-2332 4049 l
-2061 4049 l
-2059 4049 m
-2332 4049 l
-2332 4050 l
-2059 4050 l
-2056 4050 m
-2333 4050 l
-2333 4051 l
-2056 4051 l
-2054 4051 m
-2333 4051 l
-2333 4052 l
-2054 4052 l
-2051 4052 m
-2333 4052 l
-2333 4053 l
-2051 4053 l
-2049 4053 m
-2334 4053 l
-2334 4054 l
-2049 4054 l
-2046 4054 m
-2334 4054 l
-2334 4055 l
-2046 4055 l
-2044 4055 m
-2334 4055 l
-2334 4056 l
-2044 4056 l
-2041 4056 m
-2335 4056 l
-2335 4057 l
-2041 4057 l
-2038 4057 m
-2335 4057 l
-2335 4058 l
-2038 4058 l
-2036 4058 m
-2336 4058 l
-2336 4059 l
-2036 4059 l
-2033 4059 m
-2336 4059 l
-2336 4060 l
-2033 4060 l
-2031 4060 m
-2336 4060 l
-2336 4061 l
-2031 4061 l
-2028 4061 m
-2337 4061 l
-2337 4062 l
-2028 4062 l
-2026 4062 m
-2337 4062 l
-2337 4063 l
-2026 4063 l
-2023 4063 m
-2338 4063 l
-2338 4064 l
-2023 4064 l
-2021 4064 m
-2338 4064 l
-2338 4065 l
-2021 4065 l
-2018 4065 m
-2338 4065 l
-2338 4066 l
-2018 4066 l
-2016 4066 m
-2339 4066 l
-2339 4067 l
-2016 4067 l
-2013 4067 m
-2339 4067 l
-2339 4068 l
-2013 4068 l
-2011 4068 m
-2340 4068 l
-2340 4069 l
-2011 4069 l
-2008 4069 m
-2340 4069 l
-2340 4070 l
-2008 4070 l
-2006 4070 m
-2338 4070 l
-2338 4071 l
-2006 4071 l
-2003 4071 m
-2335 4071 l
-2335 4072 l
-2003 4072 l
-2000 4072 m
-2333 4072 l
-2333 4073 l
-2000 4073 l
-1998 4073 m
-2330 4073 l
-2330 4074 l
-1998 4074 l
-1995 4074 m
-2328 4074 l
-2328 4075 l
-1995 4075 l
-1993 4075 m
-2325 4075 l
-2325 4076 l
-1993 4076 l
-1990 4076 m
-2323 4076 l
-2323 4077 l
-1990 4077 l
-1988 4077 m
-2320 4077 l
-2320 4078 l
-1988 4078 l
-1985 4078 m
-2318 4078 l
-2318 4079 l
-1985 4079 l
-1983 4079 m
-2315 4079 l
-2315 4080 l
-1983 4080 l
-1980 4080 m
-2312 4080 l
-2312 4081 l
-1980 4081 l
-1978 4081 m
-2310 4081 l
-2310 4082 l
-1978 4082 l
-1975 4082 m
-2307 4082 l
-2307 4083 l
-1975 4083 l
-1973 4083 m
-2305 4083 l
-2305 4084 l
-1973 4084 l
-1970 4084 m
-2302 4084 l
-2302 4085 l
-1970 4085 l
-1968 4085 m
-2300 4085 l
-2300 4086 l
-1968 4086 l
-1965 4086 m
-2297 4086 l
-2297 4087 l
-1965 4087 l
-1962 4087 m
-2295 4087 l
-2295 4088 l
-1962 4088 l
-1960 4088 m
-2292 4088 l
-2292 4089 l
-1960 4089 l
-1957 4089 m
-2290 4089 l
-2290 4090 l
-1957 4090 l
-1955 4090 m
-2287 4090 l
-2287 4091 l
-1955 4091 l
-1952 4091 m
-2285 4091 l
-2285 4092 l
-1952 4092 l
-1950 4092 m
-2282 4092 l
-2282 4093 l
-1950 4093 l
-1947 4093 m
-2280 4093 l
-2280 4094 l
-1947 4094 l
-1945 4094 m
-2277 4094 l
-2277 4095 l
-1945 4095 l
-1942 4095 m
-2275 4095 l
-2275 4096 l
-1942 4096 l
-1940 4096 m
-2272 4096 l
-2272 4097 l
-1940 4097 l
-1937 4097 m
-2270 4097 l
-2270 4098 l
-1937 4098 l
-1935 4098 m
-2267 4098 l
-2267 4099 l
-1935 4099 l
-1932 4099 m
-2265 4099 l
-2265 4100 l
-1932 4100 l
-1930 4100 m
-2262 4100 l
-2262 4101 l
-1930 4101 l
-1930 4101 m
-2259 4101 l
-2259 4102 l
-1930 4102 l
-1930 4102 m
-2257 4102 l
-2257 4103 l
-1930 4103 l
-1930 4103 m
-2254 4103 l
-2254 4104 l
-1930 4104 l
-1931 4104 m
-2252 4104 l
-2252 4105 l
-1931 4105 l
-1931 4105 m
-2249 4105 l
-2249 4106 l
-1931 4106 l
-1931 4106 m
-2247 4106 l
-2247 4107 l
-1931 4107 l
-1932 4107 m
-2244 4107 l
-2244 4108 l
-1932 4108 l
-1932 4108 m
-2242 4108 l
-2242 4109 l
-1932 4109 l
-1933 4109 m
-2239 4109 l
-2239 4110 l
-1933 4110 l
-1933 4110 m
-2237 4110 l
-2237 4111 l
-1933 4111 l
-1933 4111 m
-2234 4111 l
-2234 4112 l
-1933 4112 l
-1934 4112 m
-2232 4112 l
-2232 4113 l
-1934 4113 l
-1934 4113 m
-2229 4113 l
-2229 4114 l
-1934 4114 l
-1935 4114 m
-2227 4114 l
-2227 4115 l
-1935 4115 l
-1935 4115 m
-2224 4115 l
-2224 4116 l
-1935 4116 l
-1935 4116 m
-2222 4116 l
-2222 4117 l
-1935 4117 l
-1936 4117 m
-2219 4117 l
-2219 4118 l
-1936 4118 l
-1936 4118 m
-2217 4118 l
-2217 4119 l
-1936 4119 l
-1937 4119 m
-2214 4119 l
-2214 4120 l
-1937 4120 l
-1937 4120 m
-2212 4120 l
-2212 4121 l
-1937 4121 l
-1937 4121 m
-2209 4121 l
-2209 4122 l
-1937 4122 l
-1938 4122 m
-2207 4122 l
-2207 4123 l
-1938 4123 l
-1938 4123 m
-2204 4123 l
-2204 4124 l
-1938 4124 l
-1938 4124 m
-2201 4124 l
-2201 4125 l
-1938 4125 l
-1939 4125 m
-2199 4125 l
-2199 4126 l
-1939 4126 l
-1939 4126 m
-2196 4126 l
-2196 4127 l
-1939 4127 l
-1940 4127 m
-2194 4127 l
-2194 4128 l
-1940 4128 l
-1940 4128 m
-2191 4128 l
-2191 4129 l
-1940 4129 l
-1940 4129 m
-2189 4129 l
-2189 4130 l
-1940 4130 l
-1941 4130 m
-2186 4130 l
-2186 4131 l
-1941 4131 l
-1941 4131 m
-2184 4131 l
-2184 4132 l
-1941 4132 l
-1942 4132 m
-2181 4132 l
-2181 4133 l
-1942 4133 l
-1942 4133 m
-2179 4133 l
-2179 4134 l
-1942 4134 l
-1942 4134 m
-2176 4134 l
-2176 4135 l
-1942 4135 l
-1943 4135 m
-2174 4135 l
-2174 4136 l
-1943 4136 l
-1943 4136 m
-2171 4136 l
-2171 4137 l
-1943 4137 l
-1944 4137 m
-2169 4137 l
-2169 4138 l
-1944 4138 l
-1944 4138 m
-2166 4138 l
-2166 4139 l
-1944 4139 l
-1944 4139 m
-2164 4139 l
-2164 4140 l
-1944 4140 l
-1945 4140 m
-2161 4140 l
-2161 4141 l
-1945 4141 l
-1945 4141 m
-2159 4141 l
-2159 4142 l
-1945 4142 l
-1945 4142 m
-2156 4142 l
-2156 4143 l
-1945 4143 l
-1946 4143 m
-2154 4143 l
-2154 4144 l
-1946 4144 l
-1946 4144 m
-2151 4144 l
-2151 4145 l
-1946 4145 l
-1947 4145 m
-2149 4145 l
-2149 4146 l
-1947 4146 l
-1947 4146 m
-2146 4146 l
-2146 4147 l
-1947 4147 l
-1947 4147 m
-2143 4147 l
-2143 4148 l
-1947 4148 l
-1948 4148 m
-2141 4148 l
-2141 4149 l
-1948 4149 l
-1948 4149 m
-2138 4149 l
-2138 4150 l
-1948 4150 l
-1949 4150 m
-2136 4150 l
-2136 4151 l
-1949 4151 l
-1949 4151 m
-2133 4151 l
-2133 4152 l
-1949 4152 l
-1949 4152 m
-2131 4152 l
-2131 4153 l
-1949 4153 l
-1950 4153 m
-2128 4153 l
-2128 4154 l
-1950 4154 l
-1950 4154 m
-2126 4154 l
-2126 4155 l
-1950 4155 l
-1951 4155 m
-2123 4155 l
-2123 4156 l
-1951 4156 l
-1951 4156 m
-2121 4156 l
-2121 4157 l
-1951 4157 l
-1951 4157 m
-2118 4157 l
-2118 4158 l
-1951 4158 l
-1952 4158 m
-2116 4158 l
-2116 4159 l
-1952 4159 l
-1952 4159 m
-2113 4159 l
-2113 4160 l
-1952 4160 l
-1952 4160 m
-2111 4160 l
-2111 4161 l
-1952 4161 l
-1953 4161 m
-2108 4161 l
-2108 4162 l
-1953 4162 l
-1953 4162 m
-2106 4162 l
-2106 4163 l
-1953 4163 l
-1954 4163 m
-2103 4163 l
-2103 4164 l
-1954 4164 l
-1954 4164 m
-2101 4164 l
-2101 4165 l
-1954 4165 l
-1954 4165 m
-2098 4165 l
-2098 4166 l
-1954 4166 l
-1955 4166 m
-2096 4166 l
-2096 4167 l
-1955 4167 l
-1955 4167 m
-2093 4167 l
-2093 4168 l
-1955 4168 l
-1956 4168 m
-2091 4168 l
-2091 4169 l
-1956 4169 l
-1956 4169 m
-2088 4169 l
-2088 4170 l
-1956 4170 l
-1956 4170 m
-2085 4170 l
-2085 4171 l
-1956 4171 l
-1957 4171 m
-2083 4171 l
-2083 4172 l
-1957 4172 l
-1957 4172 m
-2080 4172 l
-2080 4173 l
-1957 4173 l
-1958 4173 m
-2078 4173 l
-2078 4174 l
-1958 4174 l
-1958 4174 m
-2075 4174 l
-2075 4175 l
-1958 4175 l
-1958 4175 m
-2073 4175 l
-2073 4176 l
-1958 4176 l
-1959 4176 m
-2070 4176 l
-2070 4177 l
-1959 4177 l
-1959 4177 m
-2068 4177 l
-2068 4178 l
-1959 4178 l
-1959 4178 m
-2065 4178 l
-2065 4179 l
-1959 4179 l
-1960 4179 m
-2063 4179 l
-2063 4180 l
-1960 4180 l
-1960 4180 m
-2060 4180 l
-2060 4181 l
-1960 4181 l
-1961 4181 m
-2058 4181 l
-2058 4182 l
-1961 4182 l
-1961 4182 m
-2055 4182 l
-2055 4183 l
-1961 4183 l
-1961 4183 m
-2053 4183 l
-2053 4184 l
-1961 4184 l
-1962 4184 m
-2050 4184 l
-2050 4185 l
-1962 4185 l
-1962 4185 m
-2048 4185 l
-2048 4186 l
-1962 4186 l
-1963 4186 m
-2045 4186 l
-2045 4187 l
-1963 4187 l
-1963 4187 m
-2043 4187 l
-2043 4188 l
-1963 4188 l
-1963 4188 m
-2040 4188 l
-2040 4189 l
-1963 4189 l
-1964 4189 m
-2038 4189 l
-2038 4190 l
-1964 4190 l
-1964 4190 m
-2035 4190 l
-2035 4191 l
-1964 4191 l
-1965 4191 m
-2033 4191 l
-2033 4192 l
-1965 4192 l
-1965 4192 m
-2030 4192 l
-2030 4193 l
-1965 4193 l
-1965 4193 m
-2027 4193 l
-2027 4194 l
-1965 4194 l
-1966 4194 m
-2025 4194 l
-2025 4195 l
-1966 4195 l
-1966 4195 m
-2022 4195 l
-2022 4196 l
-1966 4196 l
-1966 4196 m
-2020 4196 l
-2020 4197 l
-1966 4197 l
-1967 4197 m
-2017 4197 l
-2017 4198 l
-1967 4198 l
-1967 4198 m
-2015 4198 l
-2015 4199 l
-1967 4199 l
-1968 4199 m
-2012 4199 l
-2012 4200 l
-1968 4200 l
-1968 4200 m
-2010 4200 l
-2010 4201 l
-1968 4201 l
-1968 4201 m
-2007 4201 l
-2007 4202 l
-1968 4202 l
-1969 4202 m
-2005 4202 l
-2005 4203 l
-1969 4203 l
-1969 4203 m
-2002 4203 l
-2002 4204 l
-1969 4204 l
-1970 4204 m
-2000 4204 l
-2000 4205 l
-1970 4205 l
-1970 4205 m
-1997 4205 l
-1997 4206 l
-1970 4206 l
-1970 4206 m
-1995 4206 l
-1995 4207 l
-1970 4207 l
-1971 4207 m
-1992 4207 l
-1992 4208 l
-1971 4208 l
-1971 4208 m
-1990 4208 l
-1990 4209 l
-1971 4209 l
-1972 4209 m
-1987 4209 l
-1987 4210 l
-1972 4210 l
-1972 4210 m
-1985 4210 l
-1985 4211 l
-1972 4211 l
-1972 4211 m
-1982 4211 l
-1982 4212 l
-1972 4212 l
-1973 4212 m
-1980 4212 l
-1980 4213 l
-1973 4213 l
-1973 4213 m
-1977 4213 l
-1977 4214 l
-1973 4214 l
-Y
-2339.2 4069.2 m
-2295 3957 l
-1930 4101 l
-1974 4214 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-2242 4027 m
-2250 4037 l
-2261 4042 l
-2274 4041 l
-2278 4040 l
-2288 4031 l
-2293 4020 l
-2292 4007 l
-2291 4003 l
-2282 3993 l
-2271 3988 l
-2258 3989 l
-2254 3991 l
-2244 3999 l
-2239 4010 l
-2242 4027 l
-2249 4046 l
-2261 4064 l
-2273 4073 l
-2286 4072 l
-2294 4069 l
-2304 4061 l
-2305 4051 l
-S
-2180 4020 m
-2194 4019 l
-2206 4028 l
-2217 4046 l
-2222 4057 l
-2226 4078 l
-2223 4093 l
-2213 4101 l
-2205 4104 l
-2192 4105 l
-2179 4097 l
-2168 4079 l
-2163 4067 l
-2159 4046 l
-2162 4031 l
-2173 4023 l
-2180 4020 l
-S
-2129 4072 m
-2134 4074 l
-2132 4079 l
-2127 4077 l
-2129 4072 l
-S
-2147 4118 m
-2153 4121 l
-2150 4126 l
-2145 4124 l
-2147 4118 l
-S
-2064 4066 m
-2077 4065 l
-2089 4074 l
-2101 4092 l
-2106 4103 l
-2109 4124 l
-2106 4139 l
-2096 4148 l
-2088 4151 l
-2075 4151 l
-2063 4143 l
-2051 4125 l
-2047 4113 l
-2043 4092 l
-2046 4078 l
-2056 4069 l
-2064 4066 l
-S
-1986 4097 m
-1999 4096 l
-2012 4105 l
-2023 4122 l
-2028 4134 l
-2032 4155 l
-2029 4170 l
-2018 4178 l
-2011 4181 l
-1998 4182 l
-1985 4173 l
-1974 4156 l
-1969 4144 l
-1965 4123 l
-1968 4108 l
-1978 4100 l
-1986 4097 l
-S
-1 g
-2732 3782 m
-2736 3782 l
-2736 3783 l
-2732 3783 l
-2729 3783 m
-2736 3783 l
-2736 3784 l
-2729 3784 l
-2727 3784 m
-2737 3784 l
-2737 3785 l
-2727 3785 l
-2724 3785 m
-2737 3785 l
-2737 3786 l
-2724 3786 l
-2722 3786 m
-2737 3786 l
-2737 3787 l
-2722 3787 l
-2719 3787 m
-2738 3787 l
-2738 3788 l
-2719 3788 l
-2717 3788 m
-2738 3788 l
-2738 3789 l
-2717 3789 l
-2714 3789 m
-2739 3789 l
-2739 3790 l
-2714 3790 l
-2712 3790 m
-2739 3790 l
-2739 3791 l
-2712 3791 l
-2709 3791 m
-2739 3791 l
-2739 3792 l
-2709 3792 l
-2707 3792 m
-2740 3792 l
-2740 3793 l
-2707 3793 l
-2704 3793 m
-2740 3793 l
-2740 3794 l
-2704 3794 l
-2702 3794 m
-2741 3794 l
-2741 3795 l
-2702 3795 l
-2699 3795 m
-2741 3795 l
-2741 3796 l
-2699 3796 l
-2697 3796 m
-2741 3796 l
-2741 3797 l
-2697 3797 l
-2694 3797 m
-2742 3797 l
-2742 3798 l
-2694 3798 l
-2692 3798 m
-2742 3798 l
-2742 3799 l
-2692 3799 l
-2689 3799 m
-2743 3799 l
-2743 3800 l
-2689 3800 l
-2687 3800 m
-2743 3800 l
-2743 3801 l
-2687 3801 l
-2684 3801 m
-2743 3801 l
-2743 3802 l
-2684 3802 l
-2682 3802 m
-2744 3802 l
-2744 3803 l
-2682 3803 l
-2679 3803 m
-2744 3803 l
-2744 3804 l
-2679 3804 l
-2677 3804 m
-2745 3804 l
-2745 3805 l
-2677 3805 l
-2674 3805 m
-2745 3805 l
-2745 3806 l
-2674 3806 l
-2672 3806 m
-2745 3806 l
-2745 3807 l
-2672 3807 l
-2669 3807 m
-2746 3807 l
-2746 3808 l
-2669 3808 l
-2667 3808 m
-2746 3808 l
-2746 3809 l
-2667 3809 l
-2664 3809 m
-2747 3809 l
-2747 3810 l
-2664 3810 l
-2662 3810 m
-2747 3810 l
-2747 3811 l
-2662 3811 l
-2659 3811 m
-2747 3811 l
-2747 3812 l
-2659 3812 l
-2657 3812 m
-2748 3812 l
-2748 3813 l
-2657 3813 l
-2654 3813 m
-2748 3813 l
-2748 3814 l
-2654 3814 l
-2652 3814 m
-2749 3814 l
-2749 3815 l
-2652 3815 l
-2649 3815 m
-2749 3815 l
-2749 3816 l
-2649 3816 l
-2646 3816 m
-2749 3816 l
-2749 3817 l
-2646 3817 l
-2644 3817 m
-2750 3817 l
-2750 3818 l
-2644 3818 l
-2641 3818 m
-2750 3818 l
-2750 3819 l
-2641 3819 l
-2639 3819 m
-2750 3819 l
-2750 3820 l
-2639 3820 l
-2636 3820 m
-2751 3820 l
-2751 3821 l
-2636 3821 l
-2634 3821 m
-2751 3821 l
-2751 3822 l
-2634 3822 l
-2631 3822 m
-2752 3822 l
-2752 3823 l
-2631 3823 l
-2629 3823 m
-2752 3823 l
-2752 3824 l
-2629 3824 l
-2626 3824 m
-2752 3824 l
-2752 3825 l
-2626 3825 l
-2624 3825 m
-2753 3825 l
-2753 3826 l
-2624 3826 l
-2621 3826 m
-2753 3826 l
-2753 3827 l
-2621 3827 l
-2619 3827 m
-2754 3827 l
-2754 3828 l
-2619 3828 l
-2616 3828 m
-2754 3828 l
-2754 3829 l
-2616 3829 l
-2614 3829 m
-2754 3829 l
-2754 3830 l
-2614 3830 l
-2611 3830 m
-2755 3830 l
-2755 3831 l
-2611 3831 l
-2609 3831 m
-2755 3831 l
-2755 3832 l
-2609 3832 l
-2606 3832 m
-2756 3832 l
-2756 3833 l
-2606 3833 l
-2604 3833 m
-2756 3833 l
-2756 3834 l
-2604 3834 l
-2601 3834 m
-2756 3834 l
-2756 3835 l
-2601 3835 l
-2599 3835 m
-2757 3835 l
-2757 3836 l
-2599 3836 l
-2596 3836 m
-2757 3836 l
-2757 3837 l
-2596 3837 l
-2594 3837 m
-2758 3837 l
-2758 3838 l
-2594 3838 l
-2591 3838 m
-2758 3838 l
-2758 3839 l
-2591 3839 l
-2589 3839 m
-2758 3839 l
-2758 3840 l
-2589 3840 l
-2586 3840 m
-2759 3840 l
-2759 3841 l
-2586 3841 l
-2584 3841 m
-2759 3841 l
-2759 3842 l
-2584 3842 l
-2581 3842 m
-2760 3842 l
-2760 3843 l
-2581 3843 l
-2579 3843 m
-2760 3843 l
-2760 3844 l
-2579 3844 l
-2576 3844 m
-2760 3844 l
-2760 3845 l
-2576 3845 l
-2574 3845 m
-2761 3845 l
-2761 3846 l
-2574 3846 l
-2571 3846 m
-2761 3846 l
-2761 3847 l
-2571 3847 l
-2569 3847 m
-2762 3847 l
-2762 3848 l
-2569 3848 l
-2566 3848 m
-2762 3848 l
-2762 3849 l
-2566 3849 l
-2564 3849 m
-2762 3849 l
-2762 3850 l
-2564 3850 l
-2564 3850 m
-2763 3850 l
-2763 3852 l
-2564 3852 l
-2564 3852 m
-2764 3852 l
-2764 3853 l
-2564 3853 l
-2565 3853 m
-2764 3853 l
-2764 3855 l
-2565 3855 l
-2566 3855 m
-2765 3855 l
-2765 3858 l
-2566 3858 l
-2567 3858 m
-2766 3858 l
-2766 3860 l
-2567 3860 l
-2568 3860 m
-2767 3860 l
-2767 3863 l
-2568 3863 l
-2569 3863 m
-2768 3863 l
-2768 3865 l
-2569 3865 l
-2570 3865 m
-2769 3865 l
-2769 3868 l
-2570 3868 l
-2571 3868 m
-2770 3868 l
-2770 3870 l
-2571 3870 l
-2572 3870 m
-2771 3870 l
-2771 3873 l
-2572 3873 l
-2573 3873 m
-2772 3873 l
-2772 3875 l
-2573 3875 l
-2574 3875 m
-2773 3875 l
-2773 3878 l
-2574 3878 l
-2575 3878 m
-2774 3878 l
-2774 3880 l
-2575 3880 l
-2576 3880 m
-2775 3880 l
-2775 3883 l
-2576 3883 l
-2577 3883 m
-2776 3883 l
-2776 3885 l
-2577 3885 l
-2578 3885 m
-2777 3885 l
-2777 3888 l
-2578 3888 l
-2579 3888 m
-2778 3888 l
-2778 3890 l
-2579 3890 l
-2580 3890 m
-2779 3890 l
-2779 3893 l
-2580 3893 l
-2581 3893 m
-2780 3893 l
-2780 3894 l
-2581 3894 l
-2581 3894 m
-2780 3894 l
-2780 3895 l
-2581 3895 l
-2582 3895 m
-2779 3895 l
-2779 3896 l
-2582 3896 l
-2582 3896 m
-2777 3896 l
-2777 3897 l
-2582 3897 l
-2582 3897 m
-2774 3897 l
-2774 3898 l
-2582 3898 l
-2583 3898 m
-2772 3898 l
-2772 3899 l
-2583 3899 l
-2583 3899 m
-2769 3899 l
-2769 3900 l
-2583 3900 l
-2584 3900 m
-2767 3900 l
-2767 3901 l
-2584 3901 l
-2584 3901 m
-2764 3901 l
-2764 3902 l
-2584 3902 l
-2584 3902 m
-2762 3902 l
-2762 3903 l
-2584 3903 l
-2585 3903 m
-2759 3903 l
-2759 3904 l
-2585 3904 l
-2585 3904 m
-2757 3904 l
-2757 3905 l
-2585 3905 l
-2586 3905 m
-2754 3905 l
-2754 3906 l
-2586 3906 l
-2586 3906 m
-2752 3906 l
-2752 3907 l
-2586 3907 l
-2586 3907 m
-2749 3907 l
-2749 3908 l
-2586 3908 l
-2587 3908 m
-2747 3908 l
-2747 3909 l
-2587 3909 l
-2587 3909 m
-2744 3909 l
-2744 3910 l
-2587 3910 l
-2588 3910 m
-2741 3910 l
-2741 3911 l
-2588 3911 l
-2588 3911 m
-2739 3911 l
-2739 3912 l
-2588 3912 l
-2588 3912 m
-2736 3912 l
-2736 3913 l
-2588 3913 l
-2589 3913 m
-2734 3913 l
-2734 3914 l
-2589 3914 l
-2589 3914 m
-2731 3914 l
-2731 3915 l
-2589 3915 l
-2590 3915 m
-2729 3915 l
-2729 3916 l
-2590 3916 l
-2590 3916 m
-2726 3916 l
-2726 3917 l
-2590 3917 l
-2590 3917 m
-2724 3917 l
-2724 3918 l
-2590 3918 l
-2591 3918 m
-2721 3918 l
-2721 3919 l
-2591 3919 l
-2591 3919 m
-2719 3919 l
-2719 3920 l
-2591 3920 l
-2592 3920 m
-2716 3920 l
-2716 3921 l
-2592 3921 l
-2592 3921 m
-2714 3921 l
-2714 3922 l
-2592 3922 l
-2592 3922 m
-2711 3922 l
-2711 3923 l
-2592 3923 l
-2593 3923 m
-2708 3923 l
-2708 3924 l
-2593 3924 l
-2593 3924 m
-2706 3924 l
-2706 3925 l
-2593 3925 l
-2594 3925 m
-2703 3925 l
-2703 3926 l
-2594 3926 l
-2594 3926 m
-2701 3926 l
-2701 3927 l
-2594 3927 l
-2594 3927 m
-2698 3927 l
-2698 3928 l
-2594 3928 l
-2595 3928 m
-2696 3928 l
-2696 3929 l
-2595 3929 l
-2595 3929 m
-2693 3929 l
-2693 3930 l
-2595 3930 l
-2596 3930 m
-2691 3930 l
-2691 3931 l
-2596 3931 l
-2596 3931 m
-2688 3931 l
-2688 3932 l
-2596 3932 l
-2596 3932 m
-2686 3932 l
-2686 3933 l
-2596 3933 l
-2597 3933 m
-2683 3933 l
-2683 3934 l
-2597 3934 l
-2597 3934 m
-2681 3934 l
-2681 3935 l
-2597 3935 l
-2598 3935 m
-2678 3935 l
-2678 3936 l
-2598 3936 l
-2598 3936 m
-2675 3936 l
-2675 3937 l
-2598 3937 l
-2598 3937 m
-2673 3937 l
-2673 3938 l
-2598 3938 l
-2599 3938 m
-2670 3938 l
-2670 3939 l
-2599 3939 l
-2599 3939 m
-2668 3939 l
-2668 3940 l
-2599 3940 l
-2600 3940 m
-2665 3940 l
-2665 3941 l
-2600 3941 l
-2600 3941 m
-2663 3941 l
-2663 3942 l
-2600 3942 l
-2600 3942 m
-2660 3942 l
-2660 3943 l
-2600 3943 l
-2601 3943 m
-2658 3943 l
-2658 3944 l
-2601 3944 l
-2601 3944 m
-2655 3944 l
-2655 3945 l
-2601 3945 l
-2602 3945 m
-2653 3945 l
-2653 3946 l
-2602 3946 l
-2602 3946 m
-2650 3946 l
-2650 3947 l
-2602 3947 l
-2602 3947 m
-2648 3947 l
-2648 3948 l
-2602 3948 l
-2603 3948 m
-2645 3948 l
-2645 3949 l
-2603 3949 l
-2603 3949 m
-2642 3949 l
-2642 3950 l
-2603 3950 l
-2604 3950 m
-2640 3950 l
-2640 3951 l
-2604 3951 l
-2604 3951 m
-2637 3951 l
-2637 3952 l
-2604 3952 l
-2604 3952 m
-2635 3952 l
-2635 3953 l
-2604 3953 l
-2605 3953 m
-2632 3953 l
-2632 3954 l
-2605 3954 l
-2605 3954 m
-2630 3954 l
-2630 3955 l
-2605 3955 l
-2606 3955 m
-2627 3955 l
-2627 3956 l
-2606 3956 l
-2606 3956 m
-2625 3956 l
-2625 3957 l
-2606 3957 l
-2606 3957 m
-2622 3957 l
-2622 3958 l
-2606 3958 l
-2607 3958 m
-2620 3958 l
-2620 3959 l
-2607 3959 l
-2607 3959 m
-2617 3959 l
-2617 3960 l
-2607 3960 l
-2608 3960 m
-2615 3960 l
-2615 3961 l
-2608 3961 l
-2608 3961 m
-2612 3961 l
-2612 3962 l
-2608 3962 l
-Y
-2779.5 3894.8 m
-2735 3782 l
-2564 3850 l
-2609 3962 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-2675 3824 m
-2714 3808 l
-2732 3842 l
-2726 3840 l
-2713 3840 l
-2701 3845 l
-2691 3853 l
-2687 3864 l
-2687 3877 l
-2690 3885 l
-2699 3895 l
-2710 3900 l
-2723 3899 l
-2735 3895 l
-2745 3886 l
-2747 3881 l
-2748 3871 l
-S
-2625 3844 m
-2638 3843 l
-2645 3849 l
-2648 3857 l
-2647 3866 l
-2641 3873 l
-2627 3883 l
-2617 3892 l
-2612 3903 l
-2611 3912 l
-2616 3924 l
-2623 3930 l
-2628 3932 l
-2641 3932 l
-2657 3925 l
-2667 3917 l
-2669 3911 l
-2670 3902 l
-2666 3891 l
-2659 3884 l
-2648 3880 l
-2635 3880 l
-2617 3883 l
-2608 3882 l
-2601 3876 l
-2598 3868 l
-2599 3858 l
-2609 3850 l
-2625 3844 l
-S
-1 g
-3269 3569 m
-3273 3569 l
-3273 3570 l
-3269 3570 l
-3267 3570 m
-3273 3570 l
-3273 3571 l
-3267 3571 l
-3264 3571 m
-3274 3571 l
-3274 3572 l
-3264 3572 l
-3262 3572 m
-3274 3572 l
-3274 3573 l
-3262 3573 l
-3259 3573 m
-3274 3573 l
-3274 3574 l
-3259 3574 l
-3257 3574 m
-3275 3574 l
-3275 3575 l
-3257 3575 l
-3254 3575 m
-3275 3575 l
-3275 3576 l
-3254 3576 l
-3252 3576 m
-3276 3576 l
-3276 3577 l
-3252 3577 l
-3249 3577 m
-3276 3577 l
-3276 3578 l
-3249 3578 l
-3247 3578 m
-3276 3578 l
-3276 3579 l
-3247 3579 l
-3244 3579 m
-3277 3579 l
-3277 3580 l
-3244 3580 l
-3242 3580 m
-3277 3580 l
-3277 3581 l
-3242 3581 l
-3239 3581 m
-3278 3581 l
-3278 3582 l
-3239 3582 l
-3237 3582 m
-3278 3582 l
-3278 3583 l
-3237 3583 l
-3234 3583 m
-3278 3583 l
-3278 3584 l
-3234 3584 l
-3232 3584 m
-3279 3584 l
-3279 3585 l
-3232 3585 l
-3229 3585 m
-3279 3585 l
-3279 3586 l
-3229 3586 l
-3227 3586 m
-3280 3586 l
-3280 3587 l
-3227 3587 l
-3224 3587 m
-3280 3587 l
-3280 3588 l
-3224 3588 l
-3222 3588 m
-3280 3588 l
-3280 3589 l
-3222 3589 l
-3219 3589 m
-3281 3589 l
-3281 3590 l
-3219 3590 l
-3217 3590 m
-3281 3590 l
-3281 3591 l
-3217 3591 l
-3214 3591 m
-3282 3591 l
-3282 3592 l
-3214 3592 l
-3212 3592 m
-3282 3592 l
-3282 3593 l
-3212 3593 l
-3209 3593 m
-3282 3593 l
-3282 3594 l
-3209 3594 l
-3207 3594 m
-3283 3594 l
-3283 3595 l
-3207 3595 l
-3204 3595 m
-3283 3595 l
-3283 3596 l
-3204 3596 l
-3202 3596 m
-3284 3596 l
-3284 3597 l
-3202 3597 l
-3199 3597 m
-3284 3597 l
-3284 3598 l
-3199 3598 l
-3197 3598 m
-3284 3598 l
-3284 3599 l
-3197 3599 l
-3194 3599 m
-3285 3599 l
-3285 3600 l
-3194 3600 l
-3192 3600 m
-3285 3600 l
-3285 3601 l
-3192 3601 l
-3189 3601 m
-3286 3601 l
-3286 3602 l
-3189 3602 l
-3187 3602 m
-3286 3602 l
-3286 3603 l
-3187 3603 l
-3184 3603 m
-3286 3603 l
-3286 3604 l
-3184 3604 l
-3182 3604 m
-3287 3604 l
-3287 3605 l
-3182 3605 l
-3179 3605 m
-3287 3605 l
-3287 3606 l
-3179 3606 l
-3177 3606 m
-3288 3606 l
-3288 3607 l
-3177 3607 l
-3174 3607 m
-3288 3607 l
-3288 3608 l
-3174 3608 l
-3172 3608 m
-3288 3608 l
-3288 3609 l
-3172 3609 l
-3169 3609 m
-3289 3609 l
-3289 3610 l
-3169 3610 l
-3167 3610 m
-3289 3610 l
-3289 3611 l
-3167 3611 l
-3164 3611 m
-3290 3611 l
-3290 3612 l
-3164 3612 l
-3162 3612 m
-3290 3612 l
-3290 3613 l
-3162 3613 l
-3159 3613 m
-3290 3613 l
-3290 3614 l
-3159 3614 l
-3157 3614 m
-3291 3614 l
-3291 3615 l
-3157 3615 l
-3154 3615 m
-3291 3615 l
-3291 3616 l
-3154 3616 l
-3152 3616 m
-3292 3616 l
-3292 3617 l
-3152 3617 l
-3149 3617 m
-3292 3617 l
-3292 3618 l
-3149 3618 l
-3147 3618 m
-3292 3618 l
-3292 3619 l
-3147 3619 l
-3144 3619 m
-3293 3619 l
-3293 3620 l
-3144 3620 l
-3142 3620 m
-3293 3620 l
-3293 3621 l
-3142 3621 l
-3139 3621 m
-3294 3621 l
-3294 3622 l
-3139 3622 l
-3137 3622 m
-3294 3622 l
-3294 3623 l
-3137 3623 l
-3134 3623 m
-3294 3623 l
-3294 3624 l
-3134 3624 l
-3132 3624 m
-3295 3624 l
-3295 3625 l
-3132 3625 l
-3129 3625 m
-3295 3625 l
-3295 3626 l
-3129 3626 l
-3127 3626 m
-3296 3626 l
-3296 3627 l
-3127 3627 l
-3124 3627 m
-3296 3627 l
-3296 3628 l
-3124 3628 l
-3122 3628 m
-3296 3628 l
-3296 3629 l
-3122 3629 l
-3119 3629 m
-3297 3629 l
-3297 3630 l
-3119 3630 l
-3117 3630 m
-3297 3630 l
-3297 3631 l
-3117 3631 l
-3114 3631 m
-3298 3631 l
-3298 3632 l
-3114 3632 l
-3112 3632 m
-3298 3632 l
-3298 3633 l
-3112 3633 l
-3109 3633 m
-3298 3633 l
-3298 3634 l
-3109 3634 l
-3107 3634 m
-3299 3634 l
-3299 3635 l
-3107 3635 l
-3104 3635 m
-3299 3635 l
-3299 3636 l
-3104 3636 l
-3102 3636 m
-3300 3636 l
-3300 3637 l
-3102 3637 l
-3102 3637 m
-3300 3637 l
-3300 3639 l
-3102 3639 l
-3102 3639 m
-3301 3639 l
-3301 3640 l
-3102 3640 l
-3103 3640 m
-3301 3640 l
-3301 3641 l
-3103 3641 l
-3103 3641 m
-3302 3641 l
-3302 3643 l
-3103 3643 l
-3104 3643 m
-3302 3643 l
-3302 3644 l
-3104 3644 l
-3104 3644 m
-3303 3644 l
-3303 3645 l
-3104 3645 l
-3105 3645 m
-3303 3645 l
-3303 3646 l
-3105 3646 l
-3105 3646 m
-3304 3646 l
-3304 3648 l
-3105 3648 l
-3106 3648 m
-3304 3648 l
-3304 3649 l
-3106 3649 l
-3106 3649 m
-3305 3649 l
-3305 3650 l
-3106 3650 l
-3107 3650 m
-3305 3650 l
-3305 3651 l
-3107 3651 l
-3107 3651 m
-3306 3651 l
-3306 3653 l
-3107 3653 l
-3108 3653 m
-3306 3653 l
-3306 3654 l
-3108 3654 l
-3108 3654 m
-3307 3654 l
-3307 3655 l
-3108 3655 l
-3109 3655 m
-3307 3655 l
-3307 3656 l
-3109 3656 l
-3109 3656 m
-3308 3656 l
-3308 3658 l
-3109 3658 l
-3110 3658 m
-3308 3658 l
-3308 3659 l
-3110 3659 l
-3110 3659 m
-3309 3659 l
-3309 3661 l
-3110 3661 l
-3111 3661 m
-3310 3661 l
-3310 3663 l
-3111 3663 l
-3112 3663 m
-3310 3663 l
-3310 3664 l
-3112 3664 l
-3112 3664 m
-3311 3664 l
-3311 3666 l
-3112 3666 l
-3113 3666 m
-3312 3666 l
-3312 3668 l
-3113 3668 l
-3114 3668 m
-3312 3668 l
-3312 3669 l
-3114 3669 l
-3114 3669 m
-3313 3669 l
-3313 3671 l
-3114 3671 l
-3115 3671 m
-3314 3671 l
-3314 3673 l
-3115 3673 l
-3116 3673 m
-3314 3673 l
-3314 3674 l
-3116 3674 l
-3116 3674 m
-3315 3674 l
-3315 3676 l
-3116 3676 l
-3117 3676 m
-3316 3676 l
-3316 3679 l
-3117 3679 l
-3118 3679 m
-3317 3679 l
-3317 3681 l
-3118 3681 l
-3119 3681 m
-3317 3681 l
-3317 3682 l
-3119 3682 l
-3119 3682 m
-3317 3682 l
-3317 3683 l
-3119 3683 l
-3119 3683 m
-3315 3683 l
-3315 3684 l
-3119 3684 l
-3120 3684 m
-3312 3684 l
-3312 3685 l
-3120 3685 l
-3120 3685 m
-3310 3685 l
-3310 3686 l
-3120 3686 l
-3121 3686 m
-3307 3686 l
-3307 3687 l
-3121 3687 l
-3121 3687 m
-3305 3687 l
-3305 3688 l
-3121 3688 l
-3121 3688 m
-3302 3688 l
-3302 3689 l
-3121 3689 l
-3122 3689 m
-3300 3689 l
-3300 3690 l
-3122 3690 l
-3122 3690 m
-3297 3690 l
-3297 3691 l
-3122 3691 l
-3123 3691 m
-3295 3691 l
-3295 3692 l
-3123 3692 l
-3123 3692 m
-3292 3692 l
-3292 3693 l
-3123 3693 l
-3123 3693 m
-3290 3693 l
-3290 3694 l
-3123 3694 l
-3124 3694 m
-3287 3694 l
-3287 3695 l
-3124 3695 l
-3124 3695 m
-3285 3695 l
-3285 3696 l
-3124 3696 l
-3124 3696 m
-3282 3696 l
-3282 3697 l
-3124 3697 l
-3125 3697 m
-3280 3697 l
-3280 3698 l
-3125 3698 l
-3125 3698 m
-3277 3698 l
-3277 3699 l
-3125 3699 l
-3126 3699 m
-3275 3699 l
-3275 3700 l
-3126 3700 l
-3126 3700 m
-3272 3700 l
-3272 3701 l
-3126 3701 l
-3126 3701 m
-3270 3701 l
-3270 3702 l
-3126 3702 l
-3127 3702 m
-3267 3702 l
-3267 3703 l
-3127 3703 l
-3127 3703 m
-3265 3703 l
-3265 3704 l
-3127 3704 l
-3128 3704 m
-3262 3704 l
-3262 3705 l
-3128 3705 l
-3128 3705 m
-3259 3705 l
-3259 3706 l
-3128 3706 l
-3128 3706 m
-3257 3706 l
-3257 3707 l
-3128 3707 l
-3129 3707 m
-3254 3707 l
-3254 3708 l
-3129 3708 l
-3129 3708 m
-3252 3708 l
-3252 3709 l
-3129 3709 l
-3130 3709 m
-3249 3709 l
-3249 3710 l
-3130 3710 l
-3130 3710 m
-3247 3710 l
-3247 3711 l
-3130 3711 l
-3130 3711 m
-3244 3711 l
-3244 3712 l
-3130 3712 l
-3131 3712 m
-3242 3712 l
-3242 3713 l
-3131 3713 l
-3131 3713 m
-3239 3713 l
-3239 3714 l
-3131 3714 l
-3131 3714 m
-3237 3714 l
-3237 3715 l
-3131 3715 l
-3132 3715 m
-3234 3715 l
-3234 3716 l
-3132 3716 l
-3132 3716 m
-3232 3716 l
-3232 3717 l
-3132 3717 l
-3133 3717 m
-3229 3717 l
-3229 3718 l
-3133 3718 l
-3133 3718 m
-3227 3718 l
-3227 3719 l
-3133 3719 l
-3133 3719 m
-3224 3719 l
-3224 3720 l
-3133 3720 l
-3134 3720 m
-3222 3720 l
-3222 3721 l
-3134 3721 l
-3134 3721 m
-3219 3721 l
-3219 3722 l
-3134 3722 l
-3135 3722 m
-3217 3722 l
-3217 3723 l
-3135 3723 l
-3135 3723 m
-3214 3723 l
-3214 3724 l
-3135 3724 l
-3135 3724 m
-3212 3724 l
-3212 3725 l
-3135 3725 l
-3136 3725 m
-3209 3725 l
-3209 3726 l
-3136 3726 l
-3136 3726 m
-3207 3726 l
-3207 3727 l
-3136 3727 l
-3137 3727 m
-3204 3727 l
-3204 3728 l
-3137 3728 l
-3137 3728 m
-3202 3728 l
-3202 3729 l
-3137 3729 l
-3137 3729 m
-3199 3729 l
-3199 3730 l
-3137 3730 l
-3138 3730 m
-3197 3730 l
-3197 3731 l
-3138 3731 l
-3138 3731 m
-3194 3731 l
-3194 3732 l
-3138 3732 l
-3138 3732 m
-3192 3732 l
-3192 3733 l
-3138 3733 l
-3139 3733 m
-3189 3733 l
-3189 3734 l
-3139 3734 l
-3139 3734 m
-3187 3734 l
-3187 3735 l
-3139 3735 l
-3140 3735 m
-3184 3735 l
-3184 3736 l
-3140 3736 l
-3140 3736 m
-3182 3736 l
-3182 3737 l
-3140 3737 l
-3140 3737 m
-3179 3737 l
-3179 3738 l
-3140 3738 l
-3141 3738 m
-3177 3738 l
-3177 3739 l
-3141 3739 l
-3141 3739 m
-3174 3739 l
-3174 3740 l
-3141 3740 l
-3142 3740 m
-3172 3740 l
-3172 3741 l
-3142 3741 l
-3142 3741 m
-3169 3741 l
-3169 3742 l
-3142 3742 l
-3142 3742 m
-3167 3742 l
-3167 3743 l
-3142 3743 l
-3143 3743 m
-3164 3743 l
-3164 3744 l
-3143 3744 l
-3143 3744 m
-3162 3744 l
-3162 3745 l
-3143 3745 l
-3144 3745 m
-3159 3745 l
-3159 3746 l
-3144 3746 l
-3144 3746 m
-3157 3746 l
-3157 3747 l
-3144 3747 l
-3144 3747 m
-3154 3747 l
-3154 3748 l
-3144 3748 l
-3145 3748 m
-3152 3748 l
-3152 3749 l
-3145 3749 l
-3145 3749 m
-3149 3749 l
-3149 3750 l
-3145 3750 l
-Y
-3317 3681.9 m
-3272 3569 l
-3102 3637 l
-3146 3750 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3213 3611 m
-3251 3596 l
-3269 3629 l
-3264 3627 l
-3250 3627 l
-3239 3632 l
-3229 3640 l
-3224 3651 l
-3225 3665 l
-3228 3672 l
-3236 3682 l
-3247 3687 l
-3260 3686 l
-3272 3682 l
-3282 3673 l
-3284 3668 l
-3285 3659 l
-S
-3136 3655 m
-3136 3646 l
-3147 3637 l
-3154 3634 l
-3167 3633 l
-3180 3642 l
-3191 3660 l
-3199 3679 l
-3201 3696 l
-3197 3707 l
-3187 3716 l
-3183 3717 l
-3170 3718 l
-3159 3713 l
-3150 3703 l
-3149 3699 l
-3148 3686 l
-3153 3675 l
-3163 3667 l
-3167 3665 l
-3180 3664 l
-3191 3669 l
-3199 3679 l
-S
-1 g
-4344 3144 m
-4348 3144 l
-4348 3145 l
-4344 3145 l
-4341 3145 m
-4348 3145 l
-4348 3146 l
-4341 3146 l
-4339 3146 m
-4349 3146 l
-4349 3147 l
-4339 3147 l
-4336 3147 m
-4349 3147 l
-4349 3148 l
-4336 3148 l
-4334 3148 m
-4350 3148 l
-4350 3149 l
-4334 3149 l
-4331 3149 m
-4350 3149 l
-4350 3150 l
-4331 3150 l
-4329 3150 m
-4350 3150 l
-4350 3151 l
-4329 3151 l
-4326 3151 m
-4351 3151 l
-4351 3152 l
-4326 3152 l
-4324 3152 m
-4351 3152 l
-4351 3153 l
-4324 3153 l
-4321 3153 m
-4352 3153 l
-4352 3154 l
-4321 3154 l
-4319 3154 m
-4352 3154 l
-4352 3155 l
-4319 3155 l
-4316 3155 m
-4352 3155 l
-4352 3156 l
-4316 3156 l
-4314 3156 m
-4353 3156 l
-4353 3157 l
-4314 3157 l
-4311 3157 m
-4353 3157 l
-4353 3158 l
-4311 3158 l
-4308 3158 m
-4354 3158 l
-4354 3159 l
-4308 3159 l
-4306 3159 m
-4354 3159 l
-4354 3160 l
-4306 3160 l
-4303 3160 m
-4354 3160 l
-4354 3161 l
-4303 3161 l
-4301 3161 m
-4355 3161 l
-4355 3162 l
-4301 3162 l
-4298 3162 m
-4355 3162 l
-4355 3163 l
-4298 3163 l
-4296 3163 m
-4356 3163 l
-4356 3164 l
-4296 3164 l
-4293 3164 m
-4356 3164 l
-4356 3165 l
-4293 3165 l
-4291 3165 m
-4356 3165 l
-4356 3166 l
-4291 3166 l
-4288 3166 m
-4357 3166 l
-4357 3167 l
-4288 3167 l
-4286 3167 m
-4357 3167 l
-4357 3168 l
-4286 3168 l
-4283 3168 m
-4358 3168 l
-4358 3169 l
-4283 3169 l
-4281 3169 m
-4358 3169 l
-4358 3170 l
-4281 3170 l
-4278 3170 m
-4358 3170 l
-4358 3171 l
-4278 3171 l
-4275 3171 m
-4359 3171 l
-4359 3172 l
-4275 3172 l
-4273 3172 m
-4359 3172 l
-4359 3173 l
-4273 3173 l
-4270 3173 m
-4360 3173 l
-4360 3174 l
-4270 3174 l
-4268 3174 m
-4360 3174 l
-4360 3175 l
-4268 3175 l
-4265 3175 m
-4360 3175 l
-4360 3176 l
-4265 3176 l
-4263 3176 m
-4361 3176 l
-4361 3177 l
-4263 3177 l
-4260 3177 m
-4361 3177 l
-4361 3178 l
-4260 3178 l
-4258 3178 m
-4362 3178 l
-4362 3179 l
-4258 3179 l
-4255 3179 m
-4362 3179 l
-4362 3180 l
-4255 3180 l
-4253 3180 m
-4362 3180 l
-4362 3181 l
-4253 3181 l
-4250 3181 m
-4363 3181 l
-4363 3182 l
-4250 3182 l
-4248 3182 m
-4363 3182 l
-4363 3183 l
-4248 3183 l
-4245 3183 m
-4364 3183 l
-4364 3184 l
-4245 3184 l
-4242 3184 m
-4364 3184 l
-4364 3185 l
-4242 3185 l
-4240 3185 m
-4364 3185 l
-4364 3186 l
-4240 3186 l
-4237 3186 m
-4365 3186 l
-4365 3187 l
-4237 3187 l
-4235 3187 m
-4365 3187 l
-4365 3188 l
-4235 3188 l
-4232 3188 m
-4366 3188 l
-4366 3189 l
-4232 3189 l
-4230 3189 m
-4366 3189 l
-4366 3190 l
-4230 3190 l
-4227 3190 m
-4366 3190 l
-4366 3191 l
-4227 3191 l
-4225 3191 m
-4367 3191 l
-4367 3192 l
-4225 3192 l
-4222 3192 m
-4367 3192 l
-4367 3193 l
-4222 3193 l
-4220 3193 m
-4368 3193 l
-4368 3194 l
-4220 3194 l
-4217 3194 m
-4368 3194 l
-4368 3195 l
-4217 3195 l
-4215 3195 m
-4368 3195 l
-4368 3196 l
-4215 3196 l
-4212 3196 m
-4369 3196 l
-4369 3197 l
-4212 3197 l
-4209 3197 m
-4369 3197 l
-4369 3198 l
-4209 3198 l
-4207 3198 m
-4370 3198 l
-4370 3199 l
-4207 3199 l
-4204 3199 m
-4370 3199 l
-4370 3200 l
-4204 3200 l
-4202 3200 m
-4370 3200 l
-4370 3201 l
-4202 3201 l
-4199 3201 m
-4371 3201 l
-4371 3202 l
-4199 3202 l
-4197 3202 m
-4371 3202 l
-4371 3203 l
-4197 3203 l
-4194 3203 m
-4372 3203 l
-4372 3204 l
-4194 3204 l
-4192 3204 m
-4372 3204 l
-4372 3205 l
-4192 3205 l
-4189 3205 m
-4372 3205 l
-4372 3206 l
-4189 3206 l
-4187 3206 m
-4373 3206 l
-4373 3207 l
-4187 3207 l
-4184 3207 m
-4373 3207 l
-4373 3208 l
-4184 3208 l
-4182 3208 m
-4374 3208 l
-4374 3209 l
-4182 3209 l
-4179 3209 m
-4374 3209 l
-4374 3210 l
-4179 3210 l
-4177 3210 m
-4374 3210 l
-4374 3211 l
-4177 3211 l
-4177 3211 m
-4375 3211 l
-4375 3213 l
-4177 3213 l
-4177 3213 m
-4376 3213 l
-4376 3214 l
-4177 3214 l
-4178 3214 m
-4376 3214 l
-4376 3216 l
-4178 3216 l
-4178 3216 m
-4377 3216 l
-4377 3217 l
-4178 3217 l
-4179 3217 m
-4377 3217 l
-4377 3218 l
-4179 3218 l
-4179 3218 m
-4378 3218 l
-4378 3219 l
-4179 3219 l
-4180 3219 m
-4378 3219 l
-4378 3221 l
-4180 3221 l
-4180 3221 m
-4379 3221 l
-4379 3222 l
-4180 3222 l
-4181 3222 m
-4379 3222 l
-4379 3223 l
-4181 3223 l
-4181 3223 m
-4380 3223 l
-4380 3224 l
-4181 3224 l
-4182 3224 m
-4380 3224 l
-4380 3226 l
-4182 3226 l
-4182 3226 m
-4381 3226 l
-4381 3227 l
-4182 3227 l
-4183 3227 m
-4381 3227 l
-4381 3228 l
-4183 3228 l
-4183 3228 m
-4382 3228 l
-4382 3229 l
-4183 3229 l
-4184 3229 m
-4382 3229 l
-4382 3231 l
-4184 3231 l
-4184 3231 m
-4383 3231 l
-4383 3232 l
-4184 3232 l
-4185 3232 m
-4383 3232 l
-4383 3233 l
-4185 3233 l
-4185 3233 m
-4384 3233 l
-4384 3235 l
-4185 3235 l
-4186 3235 m
-4384 3235 l
-4384 3236 l
-4186 3236 l
-4186 3236 m
-4385 3236 l
-4385 3237 l
-4186 3237 l
-4187 3237 m
-4385 3237 l
-4385 3238 l
-4187 3238 l
-4187 3238 m
-4386 3238 l
-4386 3240 l
-4187 3240 l
-4188 3240 m
-4386 3240 l
-4386 3241 l
-4188 3241 l
-4188 3241 m
-4387 3241 l
-4387 3242 l
-4188 3242 l
-4189 3242 m
-4387 3242 l
-4387 3243 l
-4189 3243 l
-4189 3243 m
-4388 3243 l
-4388 3245 l
-4189 3245 l
-4190 3245 m
-4388 3245 l
-4388 3246 l
-4190 3246 l
-4190 3246 m
-4389 3246 l
-4389 3247 l
-4190 3247 l
-4191 3247 m
-4389 3247 l
-4389 3248 l
-4191 3248 l
-4191 3248 m
-4390 3248 l
-4390 3250 l
-4191 3250 l
-4192 3250 m
-4390 3250 l
-4390 3251 l
-4192 3251 l
-4192 3251 m
-4391 3251 l
-4391 3253 l
-4192 3253 l
-4193 3253 m
-4392 3253 l
-4392 3255 l
-4193 3255 l
-4194 3255 m
-4392 3255 l
-4392 3256 l
-4194 3256 l
-4194 3256 m
-4392 3256 l
-4392 3257 l
-4194 3257 l
-4194 3257 m
-4390 3257 l
-4390 3258 l
-4194 3258 l
-4195 3258 m
-4388 3258 l
-4388 3259 l
-4195 3259 l
-4195 3259 m
-4385 3259 l
-4385 3260 l
-4195 3260 l
-4196 3260 m
-4383 3260 l
-4383 3261 l
-4196 3261 l
-4196 3261 m
-4380 3261 l
-4380 3262 l
-4196 3262 l
-4196 3262 m
-4378 3262 l
-4378 3263 l
-4196 3263 l
-4197 3263 m
-4375 3263 l
-4375 3264 l
-4197 3264 l
-4197 3264 m
-4373 3264 l
-4373 3265 l
-4197 3265 l
-4198 3265 m
-4370 3265 l
-4370 3266 l
-4198 3266 l
-4198 3266 m
-4368 3266 l
-4368 3267 l
-4198 3267 l
-4198 3267 m
-4365 3267 l
-4365 3268 l
-4198 3268 l
-4199 3268 m
-4363 3268 l
-4363 3269 l
-4199 3269 l
-4199 3269 m
-4360 3269 l
-4360 3270 l
-4199 3270 l
-4199 3270 m
-4357 3270 l
-4357 3271 l
-4199 3271 l
-4200 3271 m
-4355 3271 l
-4355 3272 l
-4200 3272 l
-4200 3272 m
-4352 3272 l
-4352 3273 l
-4200 3273 l
-4201 3273 m
-4350 3273 l
-4350 3274 l
-4201 3274 l
-4201 3274 m
-4347 3274 l
-4347 3275 l
-4201 3275 l
-4201 3275 m
-4345 3275 l
-4345 3276 l
-4201 3276 l
-4202 3276 m
-4342 3276 l
-4342 3277 l
-4202 3277 l
-4202 3277 m
-4340 3277 l
-4340 3278 l
-4202 3278 l
-4203 3278 m
-4337 3278 l
-4337 3279 l
-4203 3279 l
-4203 3279 m
-4335 3279 l
-4335 3280 l
-4203 3280 l
-4203 3280 m
-4332 3280 l
-4332 3281 l
-4203 3281 l
-4204 3281 m
-4330 3281 l
-4330 3282 l
-4204 3282 l
-4204 3282 m
-4327 3282 l
-4327 3283 l
-4204 3283 l
-4205 3283 m
-4325 3283 l
-4325 3284 l
-4205 3284 l
-4205 3284 m
-4322 3284 l
-4322 3285 l
-4205 3285 l
-4205 3285 m
-4320 3285 l
-4320 3286 l
-4205 3286 l
-4206 3286 m
-4317 3286 l
-4317 3287 l
-4206 3287 l
-4206 3287 m
-4315 3287 l
-4315 3288 l
-4206 3288 l
-4206 3288 m
-4312 3288 l
-4312 3289 l
-4206 3289 l
-4207 3289 m
-4310 3289 l
-4310 3290 l
-4207 3290 l
-4207 3290 m
-4307 3290 l
-4307 3291 l
-4207 3291 l
-4208 3291 m
-4305 3291 l
-4305 3292 l
-4208 3292 l
-4208 3292 m
-4302 3292 l
-4302 3293 l
-4208 3293 l
-4208 3293 m
-4300 3293 l
-4300 3294 l
-4208 3294 l
-4209 3294 m
-4297 3294 l
-4297 3295 l
-4209 3295 l
-4209 3295 m
-4295 3295 l
-4295 3296 l
-4209 3296 l
-4210 3296 m
-4292 3296 l
-4292 3297 l
-4210 3297 l
-4210 3297 m
-4289 3297 l
-4289 3298 l
-4210 3298 l
-4210 3298 m
-4287 3298 l
-4287 3299 l
-4210 3299 l
-4211 3299 m
-4284 3299 l
-4284 3300 l
-4211 3300 l
-4211 3300 m
-4282 3300 l
-4282 3301 l
-4211 3301 l
-4212 3301 m
-4279 3301 l
-4279 3302 l
-4212 3302 l
-4212 3302 m
-4277 3302 l
-4277 3303 l
-4212 3303 l
-4212 3303 m
-4274 3303 l
-4274 3304 l
-4212 3304 l
-4213 3304 m
-4272 3304 l
-4272 3305 l
-4213 3305 l
-4213 3305 m
-4269 3305 l
-4269 3306 l
-4213 3306 l
-4213 3306 m
-4267 3306 l
-4267 3307 l
-4213 3307 l
-4214 3307 m
-4264 3307 l
-4264 3308 l
-4214 3308 l
-4214 3308 m
-4262 3308 l
-4262 3309 l
-4214 3309 l
-4215 3309 m
-4259 3309 l
-4259 3310 l
-4215 3310 l
-4215 3310 m
-4257 3310 l
-4257 3311 l
-4215 3311 l
-4215 3311 m
-4254 3311 l
-4254 3312 l
-4215 3312 l
-4216 3312 m
-4252 3312 l
-4252 3313 l
-4216 3313 l
-4216 3313 m
-4249 3313 l
-4249 3314 l
-4216 3314 l
-4217 3314 m
-4247 3314 l
-4247 3315 l
-4217 3315 l
-4217 3315 m
-4244 3315 l
-4244 3316 l
-4217 3316 l
-4217 3316 m
-4242 3316 l
-4242 3317 l
-4217 3317 l
-4218 3317 m
-4239 3317 l
-4239 3318 l
-4218 3318 l
-4218 3318 m
-4237 3318 l
-4237 3319 l
-4218 3319 l
-4219 3319 m
-4234 3319 l
-4234 3320 l
-4219 3320 l
-4219 3320 m
-4232 3320 l
-4232 3321 l
-4219 3321 l
-4219 3321 m
-4229 3321 l
-4229 3322 l
-4219 3322 l
-4220 3322 m
-4227 3322 l
-4227 3323 l
-4220 3323 l
-4220 3323 m
-4224 3323 l
-4224 3324 l
-4220 3324 l
-Y
-4392 3256.1 m
-4347 3144 l
-4177 3211 l
-4221 3324 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4288 3185 m
-4326 3170 l
-4344 3203 l
-4339 3201 l
-4325 3202 l
-4314 3206 l
-4304 3215 l
-4299 3226 l
-4300 3239 l
-4303 3247 l
-4311 3257 l
-4322 3261 l
-4335 3261 l
-4347 3256 l
-4357 3247 l
-4359 3242 l
-4360 3233 l
-S
-4260 3218 m
-4259 3215 l
-4252 3208 l
-4246 3206 l
-4237 3205 l
-4221 3211 l
-4215 3218 l
-4213 3224 l
-4212 3233 l
-4215 3241 l
-4222 3247 l
-4235 3256 l
-4289 3279 l
-4234 3301 l
-S
-1 g
-4877 2933 m
-4878 2933 l
-4878 2934 l
-4877 2934 l
-4874 2934 m
-4878 2934 l
-4878 2935 l
-4874 2935 l
-4872 2935 m
-4878 2935 l
-4878 2936 l
-4872 2936 l
-4869 2936 m
-4878 2936 l
-4878 2937 l
-4869 2937 l
-4867 2937 m
-4878 2937 l
-4878 2938 l
-4867 2938 l
-4864 2938 m
-4878 2938 l
-4878 2939 l
-4864 2939 l
-4862 2939 m
-4878 2939 l
-4878 2940 l
-4862 2940 l
-4859 2940 m
-4878 2940 l
-4878 2941 l
-4859 2941 l
-4856 2941 m
-4878 2941 l
-4878 2942 l
-4856 2942 l
-4854 2942 m
-4878 2942 l
-4878 2943 l
-4854 2943 l
-4851 2943 m
-4878 2943 l
-4878 2944 l
-4851 2944 l
-4849 2944 m
-4878 2944 l
-4878 2945 l
-4849 2945 l
-4846 2945 m
-4878 2945 l
-4878 2946 l
-4846 2946 l
-4844 2946 m
-4878 2946 l
-4878 2947 l
-4844 2947 l
-4841 2947 m
-4878 2947 l
-4878 2948 l
-4841 2948 l
-4839 2948 m
-4878 2948 l
-4878 2949 l
-4839 2949 l
-4836 2949 m
-4878 2949 l
-4878 2950 l
-4836 2950 l
-4833 2950 m
-4878 2950 l
-4878 2951 l
-4833 2951 l
-4831 2951 m
-4878 2951 l
-4878 2952 l
-4831 2952 l
-4828 2952 m
-4878 2952 l
-4878 2953 l
-4828 2953 l
-4826 2953 m
-4878 2953 l
-4878 2954 l
-4826 2954 l
-4823 2954 m
-4878 2954 l
-4878 2955 l
-4823 2955 l
-4821 2955 m
-4878 2955 l
-4878 2956 l
-4821 2956 l
-4818 2956 m
-4878 2956 l
-4878 2957 l
-4818 2957 l
-4816 2957 m
-4878 2957 l
-4878 2958 l
-4816 2958 l
-4813 2958 m
-4878 2958 l
-4878 2959 l
-4813 2959 l
-4810 2959 m
-4878 2959 l
-4878 2960 l
-4810 2960 l
-4808 2960 m
-4878 2960 l
-4878 2961 l
-4808 2961 l
-4805 2961 m
-4878 2961 l
-4878 2962 l
-4805 2962 l
-4803 2962 m
-4878 2962 l
-4878 2963 l
-4803 2963 l
-4800 2963 m
-4878 2963 l
-4878 2964 l
-4800 2964 l
-4798 2964 m
-4878 2964 l
-4878 2965 l
-4798 2965 l
-4795 2965 m
-4878 2965 l
-4878 2966 l
-4795 2966 l
-4793 2966 m
-4878 2966 l
-4878 2967 l
-4793 2967 l
-4790 2967 m
-4878 2967 l
-4878 2968 l
-4790 2968 l
-4788 2968 m
-4878 2968 l
-4878 2969 l
-4788 2969 l
-4785 2969 m
-4878 2969 l
-4878 2970 l
-4785 2970 l
-4782 2970 m
-4878 2970 l
-4878 2971 l
-4782 2971 l
-4780 2971 m
-4878 2971 l
-4878 2972 l
-4780 2972 l
-4777 2972 m
-4878 2972 l
-4878 2973 l
-4777 2973 l
-4775 2973 m
-4878 2973 l
-4878 2974 l
-4775 2974 l
-4772 2974 m
-4878 2974 l
-4878 2975 l
-4772 2975 l
-4770 2975 m
-4878 2975 l
-4878 2976 l
-4770 2976 l
-4767 2976 m
-4878 2976 l
-4878 2977 l
-4767 2977 l
-4765 2977 m
-4878 2977 l
-4878 2978 l
-4765 2978 l
-4762 2978 m
-4878 2978 l
-4878 2979 l
-4762 2979 l
-4759 2979 m
-4878 2979 l
-4878 2980 l
-4759 2980 l
-4757 2980 m
-4878 2980 l
-4878 2981 l
-4757 2981 l
-4754 2981 m
-4878 2981 l
-4878 2982 l
-4754 2982 l
-4752 2982 m
-4878 2982 l
-4878 2983 l
-4752 2983 l
-4749 2983 m
-4878 2983 l
-4878 2984 l
-4749 2984 l
-4747 2984 m
-4878 2984 l
-4878 2985 l
-4747 2985 l
-4744 2985 m
-4878 2985 l
-4878 2986 l
-4744 2986 l
-4742 2986 m
-4878 2986 l
-4878 2987 l
-4742 2987 l
-4739 2987 m
-4878 2987 l
-4878 2988 l
-4739 2988 l
-4736 2988 m
-4878 2988 l
-4878 2989 l
-4736 2989 l
-4734 2989 m
-4878 2989 l
-4878 2990 l
-4734 2990 l
-4731 2990 m
-4878 2990 l
-4878 2991 l
-4731 2991 l
-4729 2991 m
-4878 2991 l
-4878 2992 l
-4729 2992 l
-4726 2992 m
-4878 2992 l
-4878 2993 l
-4726 2993 l
-4724 2993 m
-4878 2993 l
-4878 2994 l
-4724 2994 l
-4721 2994 m
-4878 2994 l
-4878 2995 l
-4721 2995 l
-4719 2995 m
-4878 2995 l
-4878 2996 l
-4719 2996 l
-4716 2996 m
-4878 2996 l
-4878 2997 l
-4716 2997 l
-4714 2997 m
-4878 2997 l
-4878 2998 l
-4714 2998 l
-4714 2998 m
-4878 2998 l
-4878 2999 l
-4714 2999 l
-4714 2999 m
-4878 2999 l
-4878 3001 l
-4714 3001 l
-4715 3001 m
-4878 3001 l
-4878 3004 l
-4715 3004 l
-4716 3004 m
-4878 3004 l
-4878 3006 l
-4716 3006 l
-4717 3006 m
-4878 3006 l
-4878 3009 l
-4717 3009 l
-4718 3009 m
-4878 3009 l
-4878 3011 l
-4718 3011 l
-4719 3011 m
-4878 3011 l
-4878 3014 l
-4719 3014 l
-4720 3014 m
-4878 3014 l
-4878 3016 l
-4720 3016 l
-4721 3016 m
-4878 3016 l
-4878 3019 l
-4721 3019 l
-4722 3019 m
-4878 3019 l
-4878 3021 l
-4722 3021 l
-4723 3021 m
-4878 3021 l
-4878 3024 l
-4723 3024 l
-4724 3024 m
-4878 3024 l
-4878 3026 l
-4724 3026 l
-4725 3026 m
-4878 3026 l
-4878 3029 l
-4725 3029 l
-4726 3029 m
-4878 3029 l
-4878 3031 l
-4726 3031 l
-4727 3031 m
-4878 3031 l
-4878 3034 l
-4727 3034 l
-4728 3034 m
-4878 3034 l
-4878 3036 l
-4728 3036 l
-4729 3036 m
-4878 3036 l
-4878 3039 l
-4729 3039 l
-4730 3039 m
-4878 3039 l
-4878 3041 l
-4730 3041 l
-4731 3041 m
-4878 3041 l
-4878 3043 l
-4731 3043 l
-4731 3043 m
-4878 3043 l
-4878 3044 l
-4731 3044 l
-4732 3044 m
-4878 3044 l
-4878 3045 l
-4732 3045 l
-4732 3045 m
-4878 3045 l
-4878 3046 l
-4732 3046 l
-4733 3046 m
-4878 3046 l
-4878 3047 l
-4733 3047 l
-4733 3047 m
-4878 3047 l
-4878 3048 l
-4733 3048 l
-4733 3048 m
-4878 3048 l
-4878 3049 l
-4733 3049 l
-4734 3049 m
-4878 3049 l
-4878 3050 l
-4734 3050 l
-4734 3050 m
-4878 3050 l
-4878 3051 l
-4734 3051 l
-4735 3051 m
-4878 3051 l
-4878 3052 l
-4735 3052 l
-4735 3052 m
-4878 3052 l
-4878 3053 l
-4735 3053 l
-4735 3053 m
-4878 3053 l
-4878 3054 l
-4735 3054 l
-4736 3054 m
-4878 3054 l
-4878 3055 l
-4736 3055 l
-4736 3055 m
-4878 3055 l
-4878 3056 l
-4736 3056 l
-4737 3056 m
-4878 3056 l
-4878 3057 l
-4737 3057 l
-4737 3057 m
-4878 3057 l
-4878 3058 l
-4737 3058 l
-4737 3058 m
-4878 3058 l
-4878 3059 l
-4737 3059 l
-4738 3059 m
-4878 3059 l
-4878 3060 l
-4738 3060 l
-4738 3060 m
-4878 3060 l
-4878 3061 l
-4738 3061 l
-4739 3061 m
-4878 3061 l
-4878 3062 l
-4739 3062 l
-4739 3062 m
-4878 3062 l
-4878 3063 l
-4739 3063 l
-4739 3063 m
-4878 3063 l
-4878 3064 l
-4739 3064 l
-4740 3064 m
-4878 3064 l
-4878 3065 l
-4740 3065 l
-4740 3065 m
-4875 3065 l
-4875 3066 l
-4740 3066 l
-4741 3066 m
-4873 3066 l
-4873 3067 l
-4741 3067 l
-4741 3067 m
-4870 3067 l
-4870 3068 l
-4741 3068 l
-4741 3068 m
-4868 3068 l
-4868 3069 l
-4741 3069 l
-4742 3069 m
-4865 3069 l
-4865 3070 l
-4742 3070 l
-4742 3070 m
-4863 3070 l
-4863 3071 l
-4742 3071 l
-4743 3071 m
-4860 3071 l
-4860 3072 l
-4743 3072 l
-4743 3072 m
-4858 3072 l
-4858 3073 l
-4743 3073 l
-4743 3073 m
-4855 3073 l
-4855 3074 l
-4743 3074 l
-4744 3074 m
-4853 3074 l
-4853 3075 l
-4744 3075 l
-4744 3075 m
-4850 3075 l
-4850 3076 l
-4744 3076 l
-4745 3076 m
-4848 3076 l
-4848 3077 l
-4745 3077 l
-4745 3077 m
-4845 3077 l
-4845 3078 l
-4745 3078 l
-4745 3078 m
-4842 3078 l
-4842 3079 l
-4745 3079 l
-4746 3079 m
-4840 3079 l
-4840 3080 l
-4746 3080 l
-4746 3080 m
-4837 3080 l
-4837 3081 l
-4746 3081 l
-4747 3081 m
-4835 3081 l
-4835 3082 l
-4747 3082 l
-4747 3082 m
-4832 3082 l
-4832 3083 l
-4747 3083 l
-4747 3083 m
-4830 3083 l
-4830 3084 l
-4747 3084 l
-4748 3084 m
-4827 3084 l
-4827 3085 l
-4748 3085 l
-4748 3085 m
-4825 3085 l
-4825 3086 l
-4748 3086 l
-4749 3086 m
-4822 3086 l
-4822 3087 l
-4749 3087 l
-4749 3087 m
-4820 3087 l
-4820 3088 l
-4749 3088 l
-4749 3088 m
-4817 3088 l
-4817 3089 l
-4749 3089 l
-4750 3089 m
-4815 3089 l
-4815 3090 l
-4750 3090 l
-4750 3090 m
-4812 3090 l
-4812 3091 l
-4750 3091 l
-4751 3091 m
-4810 3091 l
-4810 3092 l
-4751 3092 l
-4751 3092 m
-4807 3092 l
-4807 3093 l
-4751 3093 l
-4751 3093 m
-4805 3093 l
-4805 3094 l
-4751 3094 l
-4752 3094 m
-4802 3094 l
-4802 3095 l
-4752 3095 l
-4752 3095 m
-4800 3095 l
-4800 3096 l
-4752 3096 l
-4753 3096 m
-4797 3096 l
-4797 3097 l
-4753 3097 l
-4753 3097 m
-4795 3097 l
-4795 3098 l
-4753 3098 l
-4753 3098 m
-4792 3098 l
-4792 3099 l
-4753 3099 l
-4754 3099 m
-4790 3099 l
-4790 3100 l
-4754 3100 l
-4754 3100 m
-4787 3100 l
-4787 3101 l
-4754 3101 l
-4755 3101 m
-4785 3101 l
-4785 3102 l
-4755 3102 l
-4755 3102 m
-4782 3102 l
-4782 3103 l
-4755 3103 l
-4755 3103 m
-4780 3103 l
-4780 3104 l
-4755 3104 l
-4756 3104 m
-4777 3104 l
-4777 3105 l
-4756 3105 l
-4756 3105 m
-4775 3105 l
-4775 3106 l
-4756 3106 l
-4757 3106 m
-4772 3106 l
-4772 3107 l
-4757 3107 l
-4757 3107 m
-4770 3107 l
-4770 3108 l
-4757 3108 l
-4757 3108 m
-4767 3108 l
-4767 3109 l
-4757 3109 l
-4758 3109 m
-4765 3109 l
-4765 3110 l
-4758 3110 l
-4758 3110 m
-4762 3110 l
-4762 3111 l
-4758 3111 l
-Y
-4929.5 3043.2 m
-4885 2931 l
-4714 2998 l
-4759 3111 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4825 2972 m
-4864 2957 l
-4882 2990 l
-4876 2988 l
-4863 2989 l
-4851 2993 l
-4841 3002 l
-4836 3013 l
-4837 3026 l
-4840 3034 l
-4849 3044 l
-4860 3048 l
-4873 3048 l
-4884 3043 l
-4895 3035 l
-4897 3029 l
-4898 3020 l
-S
-4771 2994 m
-4784 2993 l
-4796 3002 l
-4808 3020 l
-4812 3031 l
-4816 3052 l
-4813 3067 l
-4803 3075 l
-4795 3078 l
-4782 3079 l
-4770 3071 l
-4758 3053 l
-4753 3041 l
-4750 3020 l
-4753 3005 l
-4763 2997 l
-4771 2994 l
-S
-1 g
-Y
-362 3391.6 m
-207 3392 l
-207 4507 l
-362 4507 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-228 3413 m
-316 3413 l
-S
-228 3413 m
-228 3467 l
-S
-270 3413 m
-270 3446 l
-S
-228 3488 m
-316 3488 l
-S
-228 3546 m
-287 3488 l
-S
-266 3509 m
-316 3546 l
-S
-228 3621 m
-228 3580 l
-266 3575 l
-262 3580 l
-258 3592 l
-258 3605 l
-262 3617 l
-270 3626 l
-283 3630 l
-291 3630 l
-303 3626 l
-312 3617 l
-316 3605 l
-316 3592 l
-312 3580 l
-308 3575 l
-299 3571 l
-S
-258 3726 m
-345 3726 l
-S
-270 3726 m
-262 3734 l
-258 3742 l
-258 3755 l
-262 3763 l
-270 3772 l
-283 3776 l
-291 3776 l
-303 3772 l
-312 3763 l
-316 3755 l
-316 3742 l
-312 3734 l
-303 3726 l
-S
-258 3822 m
-262 3813 l
-270 3805 l
-283 3801 l
-291 3801 l
-303 3805 l
-312 3813 l
-316 3822 l
-316 3834 l
-312 3843 l
-303 3851 l
-291 3855 l
-283 3855 l
-270 3851 l
-262 3843 l
-258 3834 l
-258 3822 l
-S
-228 3884 m
-316 3884 l
-S
-258 3964 m
-316 3964 l
-S
-270 3964 m
-262 3955 l
-258 3947 l
-258 3935 l
-262 3926 l
-270 3918 l
-283 3914 l
-291 3914 l
-303 3918 l
-312 3926 l
-316 3935 l
-316 3947 l
-312 3955 l
-303 3964 l
-S
-258 3997 m
-316 3997 l
-S
-283 3997 m
-270 4001 l
-262 4010 l
-258 4018 l
-258 4031 l
-S
-258 4118 m
-316 4118 l
-S
-283 4118 m
-270 4123 l
-262 4131 l
-258 4139 l
-258 4152 l
-S
-283 4169 m
-283 4219 l
-274 4219 l
-266 4214 l
-262 4210 l
-258 4202 l
-258 4189 l
-262 4181 l
-270 4173 l
-283 4169 l
-291 4169 l
-303 4173 l
-312 4181 l
-316 4189 l
-316 4202 l
-312 4210 l
-303 4219 l
-S
-258 4294 m
-324 4294 l
-337 4290 l
-341 4285 l
-345 4277 l
-345 4265 l
-341 4256 l
-S
-270 4294 m
-262 4285 l
-258 4277 l
-258 4265 l
-262 4256 l
-270 4248 l
-283 4244 l
-291 4244 l
-303 4248 l
-312 4256 l
-316 4265 l
-316 4277 l
-312 4285 l
-303 4294 l
-S
-228 4323 m
-232 4327 l
-228 4331 l
-224 4327 l
-228 4323 l
-S
-258 4327 m
-316 4327 l
-S
-258 4377 m
-262 4369 l
-270 4361 l
-283 4356 l
-291 4356 l
-303 4361 l
-312 4369 l
-316 4377 l
-316 4390 l
-312 4398 l
-303 4407 l
-291 4411 l
-283 4411 l
-270 4407 l
-262 4398 l
-258 4390 l
-258 4377 l
-S
-258 4440 m
-316 4440 l
-S
-274 4440 m
-262 4453 l
-258 4461 l
-258 4473 l
-262 4482 l
-274 4486 l
-316 4486 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/frontc_bw.eps b/ast-5.3-1/sun210_figures/frontc_bw.eps
deleted file mode 100644
index cf6e8d0..0000000
--- a/ast-5.3-1/sun210_figures/frontc_bw.eps
+++ /dev/null
@@ -1,14113 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 22 206 490 605
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:48:46
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-4877 3093 m
-4662 3178 l
-4355 3300 l
-4048 3421 l
-3740 3543 l
-3433 3665 l
-3126 3786 l
-2819 3908 l
-2512 4029 l
-2205 4151 l
-2203 4152 l
-2202 4152 l
-2200 4153 l
-2199 4154 l
-2197 4154 l
-2195 4155 l
-2194 4155 l
-2192 4156 l
-2191 4157 l
-2189 4157 l
-2188 4158 l
-2186 4159 l
-2184 4159 l
-2183 4160 l
-2181 4160 l
-2180 4161 l
-2178 4162 l
-2177 4162 l
-2175 4163 l
-2173 4164 l
-2172 4164 l
-2170 4165 l
-2169 4165 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-4059 1777 m
-4039 1803 l
-3834 2062 l
-3628 2321 l
-3423 2580 l
-3218 2839 l
-3013 3098 l
-2808 3357 l
-2602 3616 l
-2397 3875 l
-2192 4134 l
-2191 4135 l
-2190 4137 l
-2189 4138 l
-2188 4139 l
-2187 4141 l
-2186 4142 l
-2185 4143 l
-2184 4145 l
-2183 4146 l
-2182 4147 l
-2181 4149 l
-2180 4150 l
-2178 4151 l
-2177 4152 l
-2176 4154 l
-2175 4155 l
-2174 4156 l
-2173 4158 l
-2172 4159 l
-2171 4160 l
-2170 4162 l
-2169 4163 l
-2168 4164 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-2519 1777 m
-2510 1837 l
-2462 2164 l
-2414 2491 l
-2365 2818 l
-2317 3145 l
-2269 3472 l
-2221 3799 l
-2172 4125 l
-2172 4127 l
-2172 4129 l
-2172 4130 l
-2171 4132 l
-2171 4134 l
-2171 4135 l
-2171 4137 l
-2171 4139 l
-2170 4140 l
-2170 4142 l
-2170 4144 l
-2170 4146 l
-2169 4147 l
-2169 4149 l
-2169 4151 l
-2169 4152 l
-2168 4154 l
-2168 4156 l
-2168 4157 l
-2168 4159 l
-2167 4161 l
-2167 4162 l
-2167 4164 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1221 1777 m
-1300 1977 l
-1422 2284 l
-1543 2591 l
-1665 2899 l
-1786 3206 l
-1908 3513 l
-2030 3821 l
-2151 4128 l
-2152 4130 l
-2152 4131 l
-2153 4133 l
-2154 4134 l
-2154 4136 l
-2155 4137 l
-2156 4139 l
-2156 4140 l
-2157 4142 l
-2157 4144 l
-2158 4145 l
-2159 4147 l
-2159 4148 l
-2160 4150 l
-2161 4151 l
-2161 4153 l
-2162 4155 l
-2162 4156 l
-2163 4158 l
-2164 4159 l
-2164 4161 l
-2165 4162 l
-2166 4164 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 2871 m
-581 2909 l
-840 3114 l
-1099 3319 l
-1357 3525 l
-1616 3730 l
-1875 3935 l
-2134 4141 l
-2135 4142 l
-2137 4143 l
-2138 4144 l
-2139 4145 l
-2141 4146 l
-2142 4147 l
-2143 4148 l
-2145 4149 l
-2146 4150 l
-2147 4151 l
-2149 4152 l
-2150 4153 l
-2151 4154 l
-2153 4155 l
-2154 4156 l
-2155 4157 l
-2157 4158 l
-2158 4160 l
-2159 4161 l
-2160 4162 l
-2162 4163 l
-2163 4164 l
-2164 4165 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 3925 m
-818 3967 l
-1145 4015 l
-1472 4064 l
-1799 4112 l
-2126 4160 l
-2127 4161 l
-2129 4161 l
-2131 4161 l
-2132 4161 l
-2134 4162 l
-2136 4162 l
-2137 4162 l
-2139 4162 l
-2141 4163 l
-2142 4163 l
-2144 4163 l
-2146 4163 l
-2147 4164 l
-2149 4164 l
-2151 4164 l
-2152 4164 l
-2154 4165 l
-2156 4165 l
-2157 4165 l
-2159 4165 l
-2161 4165 l
-2162 4166 l
-2164 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 4813 m
-592 4790 l
-900 4668 l
-1207 4547 l
-1514 4425 l
-1821 4303 l
-2128 4182 l
-2130 4181 l
-2131 4180 l
-2133 4180 l
-2134 4179 l
-2136 4178 l
-2137 4178 l
-2139 4177 l
-2141 4177 l
-2142 4176 l
-2144 4175 l
-2145 4175 l
-2147 4174 l
-2148 4173 l
-2150 4173 l
-2152 4172 l
-2153 4172 l
-2155 4171 l
-2156 4170 l
-2158 4170 l
-2159 4169 l
-2161 4169 l
-2163 4168 l
-2164 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-618 6121 m
-705 6012 l
-910 5753 l
-1115 5494 l
-1320 5235 l
-1525 4976 l
-1730 4717 l
-1936 4458 l
-2141 4199 l
-2142 4197 l
-2143 4196 l
-2144 4195 l
-2145 4193 l
-2146 4192 l
-2147 4191 l
-2148 4189 l
-2149 4188 l
-2150 4187 l
-2151 4186 l
-2152 4184 l
-2153 4183 l
-2154 4182 l
-2155 4180 l
-2156 4179 l
-2158 4178 l
-2159 4176 l
-2160 4175 l
-2161 4174 l
-2162 4172 l
-2163 4171 l
-2164 4170 l
-2165 4168 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-S
-1878 6121 m
-1919 5842 l
-1967 5515 l
-2016 5188 l
-2064 4861 l
-2112 4534 l
-2160 4207 l
-2161 4206 l
-2161 4204 l
-2161 4202 l
-2161 4201 l
-2162 4199 l
-2162 4197 l
-2162 4196 l
-2162 4194 l
-2163 4192 l
-2163 4191 l
-2163 4189 l
-2163 4187 l
-2164 4186 l
-2164 4184 l
-2164 4182 l
-2164 4181 l
-2165 4179 l
-2165 4177 l
-2165 4176 l
-2165 4174 l
-2166 4172 l
-2166 4171 l
-2166 4169 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-S
-2940 6121 m
-2911 6049 l
-2790 5741 l
-2668 5434 l
-2546 5127 l
-2425 4819 l
-2303 4512 l
-2182 4205 l
-2181 4203 l
-2180 4202 l
-2180 4200 l
-2179 4198 l
-2179 4197 l
-2178 4195 l
-2177 4194 l
-2177 4192 l
-2176 4191 l
-2175 4189 l
-2175 4188 l
-2174 4186 l
-2174 4184 l
-2173 4183 l
-2172 4181 l
-2172 4180 l
-2171 4178 l
-2170 4177 l
-2170 4175 l
-2169 4173 l
-2169 4172 l
-2168 4170 l
-2167 4169 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2166 4166 l
-2166 4166 l
-S
-4631 6121 m
-4529 6040 l
-4270 5835 l
-4011 5629 l
-3752 5424 l
-3493 5219 l
-3234 5013 l
-2975 4808 l
-2717 4603 l
-2458 4397 l
-2199 4192 l
-2197 4191 l
-2196 4190 l
-2195 4189 l
-2194 4188 l
-2192 4187 l
-2191 4186 l
-2190 4185 l
-2188 4184 l
-2187 4183 l
-2186 4182 l
-2184 4180 l
-2183 4179 l
-2182 4178 l
-2180 4177 l
-2179 4176 l
-2178 4175 l
-2176 4174 l
-2175 4173 l
-2174 4172 l
-2172 4171 l
-2171 4170 l
-2170 4169 l
-2168 4168 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4166 l
-2166 4166 l
-S
-4877 4567 m
-4822 4559 l
-4495 4511 l
-4168 4462 l
-3841 4414 l
-3514 4366 l
-3188 4317 l
-2861 4269 l
-2534 4221 l
-2207 4172 l
-2206 4172 l
-2204 4172 l
-2202 4172 l
-2201 4171 l
-2199 4171 l
-2197 4171 l
-2196 4171 l
-2194 4170 l
-2192 4170 l
-2191 4170 l
-2189 4170 l
-2187 4169 l
-2186 4169 l
-2184 4169 l
-2182 4169 l
-2181 4168 l
-2179 4168 l
-2177 4168 l
-2176 4168 l
-2174 4167 l
-2172 4167 l
-2171 4167 l
-2169 4167 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-4877 2504 m
-4876 2503 l
-4872 2496 l
-4868 2489 l
-4864 2482 l
-4860 2476 l
-4855 2469 l
-4851 2462 l
-4847 2456 l
-4843 2449 l
-4838 2442 l
-4834 2436 l
-4830 2429 l
-4826 2423 l
-4821 2416 l
-4817 2409 l
-4812 2403 l
-4808 2396 l
-4804 2390 l
-4799 2383 l
-4795 2377 l
-4790 2370 l
-4786 2364 l
-4781 2357 l
-4777 2351 l
-4772 2344 l
-4768 2338 l
-4763 2331 l
-4759 2325 l
-4754 2318 l
-4750 2312 l
-4745 2306 l
-4740 2299 l
-4736 2293 l
-4731 2286 l
-4726 2280 l
-4722 2274 l
-4717 2267 l
-4712 2261 l
-4708 2255 l
-4703 2248 l
-4698 2242 l
-4693 2236 l
-4689 2230 l
-4684 2223 l
-4679 2217 l
-4674 2211 l
-4669 2205 l
-4664 2198 l
-4659 2192 l
-4655 2186 l
-4650 2180 l
-4645 2174 l
-4640 2168 l
-4635 2161 l
-4630 2155 l
-4625 2149 l
-4620 2143 l
-4615 2137 l
-4610 2131 l
-4605 2125 l
-4600 2119 l
-4595 2113 l
-4589 2107 l
-4584 2101 l
-4579 2095 l
-4574 2089 l
-4569 2083 l
-4564 2077 l
-4559 2071 l
-4553 2065 l
-4548 2059 l
-4543 2053 l
-4538 2047 l
-4532 2041 l
-4527 2036 l
-4522 2030 l
-4517 2024 l
-4511 2018 l
-4506 2012 l
-4501 2006 l
-4495 2001 l
-4490 1995 l
-4484 1989 l
-4479 1983 l
-4474 1978 l
-4468 1972 l
-4463 1966 l
-4457 1960 l
-4452 1955 l
-4446 1949 l
-4441 1943 l
-4435 1938 l
-4430 1932 l
-4424 1927 l
-4419 1921 l
-4413 1915 l
-4407 1910 l
-4402 1904 l
-4396 1899 l
-4391 1893 l
-4385 1888 l
-4379 1882 l
-4374 1877 l
-4368 1871 l
-4362 1866 l
-4357 1860 l
-4351 1855 l
-4345 1849 l
-4339 1844 l
-4334 1839 l
-4328 1833 l
-4322 1828 l
-4316 1823 l
-4310 1817 l
-4305 1812 l
-4299 1807 l
-4293 1801 l
-4287 1796 l
-4281 1791 l
-4275 1786 l
-4269 1780 l
-4266 1777 l
-S
-4675 6121 m
-4678 6117 l
-4683 6111 l
-4688 6104 l
-4693 6098 l
-4698 6092 l
-4702 6086 l
-4707 6079 l
-4712 6073 l
-4717 6067 l
-4721 6060 l
-4726 6054 l
-4731 6048 l
-4735 6041 l
-4740 6035 l
-4745 6028 l
-4749 6022 l
-4754 6016 l
-4758 6009 l
-4763 6003 l
-4767 5996 l
-4772 5990 l
-4776 5983 l
-4781 5977 l
-4785 5970 l
-4790 5964 l
-4794 5957 l
-4799 5951 l
-4803 5944 l
-4808 5938 l
-4812 5931 l
-4816 5925 l
-4821 5918 l
-4825 5911 l
-4829 5905 l
-4834 5898 l
-4838 5892 l
-4842 5885 l
-4846 5878 l
-4851 5872 l
-4855 5865 l
-4859 5858 l
-4863 5852 l
-4867 5845 l
-4872 5838 l
-4876 5831 l
-4877 5829 l
-S
-4854 3102 m
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3101 l
-4853 3101 l
-4853 3101 l
-4853 3100 l
-4853 3100 l
-4853 3099 l
-4853 3099 l
-4852 3098 l
-4852 3098 l
-4852 3097 l
-4852 3097 l
-4852 3096 l
-4851 3096 l
-4849 3089 l
-4846 3082 l
-4843 3076 l
-4841 3069 l
-4838 3063 l
-4835 3056 l
-4832 3049 l
-4830 3043 l
-4827 3036 l
-4824 3029 l
-4821 3023 l
-4818 3016 l
-4816 3010 l
-4813 3003 l
-4810 2997 l
-4807 2990 l
-4804 2983 l
-4801 2977 l
-4798 2970 l
-4795 2964 l
-4792 2957 l
-4789 2951 l
-4786 2944 l
-4783 2938 l
-4780 2931 l
-4777 2925 l
-4774 2918 l
-4771 2912 l
-4768 2905 l
-4764 2899 l
-4761 2893 l
-4758 2886 l
-4755 2880 l
-4752 2873 l
-4748 2867 l
-4745 2860 l
-4742 2854 l
-4739 2848 l
-4735 2841 l
-4732 2835 l
-4729 2829 l
-4726 2822 l
-4722 2816 l
-4719 2809 l
-4715 2803 l
-4712 2797 l
-4709 2791 l
-4705 2784 l
-4702 2778 l
-4698 2772 l
-4695 2765 l
-4691 2759 l
-4688 2753 l
-4684 2747 l
-4681 2740 l
-4677 2734 l
-4674 2728 l
-4670 2722 l
-4667 2715 l
-4663 2709 l
-4659 2703 l
-4656 2697 l
-4652 2691 l
-4648 2684 l
-4645 2678 l
-4641 2672 l
-4637 2666 l
-4634 2660 l
-4630 2654 l
-4626 2648 l
-4622 2642 l
-4619 2635 l
-4615 2629 l
-4611 2623 l
-4607 2617 l
-4603 2611 l
-4599 2605 l
-4596 2599 l
-4592 2593 l
-4588 2587 l
-4584 2581 l
-4580 2575 l
-4576 2569 l
-4572 2563 l
-4568 2557 l
-4564 2551 l
-4560 2545 l
-4556 2539 l
-4552 2533 l
-4548 2527 l
-4544 2522 l
-4540 2516 l
-4536 2510 l
-4531 2504 l
-4527 2498 l
-4523 2492 l
-4519 2486 l
-4515 2481 l
-4511 2475 l
-4506 2469 l
-4502 2463 l
-4498 2457 l
-4494 2452 l
-4489 2446 l
-4485 2440 l
-4481 2434 l
-4477 2428 l
-4472 2423 l
-4468 2417 l
-4464 2411 l
-4459 2406 l
-4455 2400 l
-4451 2394 l
-4446 2389 l
-4442 2383 l
-4437 2377 l
-4433 2372 l
-4428 2366 l
-4424 2360 l
-4419 2355 l
-4415 2349 l
-4410 2344 l
-4406 2338 l
-4401 2333 l
-4397 2327 l
-4392 2321 l
-4388 2316 l
-4383 2310 l
-4378 2305 l
-4374 2299 l
-4369 2294 l
-4365 2289 l
-4360 2283 l
-4355 2278 l
-4351 2272 l
-4346 2267 l
-4341 2261 l
-4336 2256 l
-4332 2251 l
-4327 2245 l
-4322 2240 l
-4317 2235 l
-4313 2229 l
-4308 2224 l
-4303 2219 l
-4298 2213 l
-4293 2208 l
-4288 2203 l
-4283 2197 l
-4279 2192 l
-4274 2187 l
-4269 2182 l
-4264 2177 l
-4259 2171 l
-4254 2166 l
-4249 2161 l
-4244 2156 l
-4239 2151 l
-4234 2146 l
-4229 2140 l
-4224 2135 l
-4219 2130 l
-4214 2125 l
-4209 2120 l
-4204 2115 l
-4199 2110 l
-4194 2105 l
-4188 2100 l
-4183 2095 l
-4178 2090 l
-4173 2085 l
-4168 2080 l
-4163 2075 l
-4157 2070 l
-4152 2065 l
-S
-4152 2065 m
-4147 2060 l
-4142 2055 l
-4137 2050 l
-4131 2045 l
-4126 2041 l
-4121 2036 l
-4115 2031 l
-4110 2026 l
-4105 2021 l
-4100 2016 l
-4094 2012 l
-4089 2007 l
-4083 2002 l
-4078 1997 l
-4073 1993 l
-4067 1988 l
-4062 1983 l
-4056 1978 l
-4051 1974 l
-4046 1969 l
-4040 1964 l
-4035 1960 l
-4029 1955 l
-4024 1951 l
-4018 1946 l
-4013 1941 l
-4007 1937 l
-4002 1932 l
-3996 1928 l
-3991 1923 l
-3985 1919 l
-3979 1914 l
-3974 1910 l
-3968 1905 l
-3963 1901 l
-3957 1896 l
-3951 1892 l
-3946 1887 l
-3940 1883 l
-3934 1879 l
-3929 1874 l
-3923 1870 l
-3917 1865 l
-3912 1861 l
-3906 1857 l
-3900 1852 l
-3894 1848 l
-3889 1844 l
-3883 1840 l
-3877 1835 l
-3871 1831 l
-3866 1827 l
-3860 1823 l
-3854 1818 l
-3848 1814 l
-3842 1810 l
-3836 1806 l
-3831 1802 l
-3825 1798 l
-3819 1794 l
-3813 1790 l
-3807 1785 l
-3801 1781 l
-3795 1777 l
-S
-4297 6121 m
-4298 6120 l
-4302 6115 l
-4307 6110 l
-4312 6105 l
-4317 6099 l
-4322 6094 l
-4326 6088 l
-4331 6083 l
-4336 6078 l
-4341 6072 l
-4345 6067 l
-4350 6062 l
-4355 6056 l
-4359 6051 l
-4364 6045 l
-4369 6040 l
-4373 6034 l
-4378 6029 l
-4383 6023 l
-4387 6018 l
-4392 6012 l
-4396 6007 l
-4401 6001 l
-4405 5996 l
-4410 5990 l
-4414 5985 l
-4419 5979 l
-4423 5973 l
-4428 5968 l
-4432 5962 l
-4437 5956 l
-4441 5951 l
-4446 5945 l
-4450 5940 l
-4454 5934 l
-4459 5928 l
-4463 5922 l
-4468 5917 l
-4472 5911 l
-4476 5905 l
-4480 5900 l
-4485 5894 l
-4489 5888 l
-4493 5882 l
-4498 5877 l
-4502 5871 l
-4506 5865 l
-4510 5859 l
-4514 5853 l
-4519 5847 l
-4523 5842 l
-4527 5836 l
-4531 5830 l
-4535 5824 l
-4539 5818 l
-4543 5812 l
-4547 5806 l
-4551 5800 l
-4555 5795 l
-4560 5789 l
-4564 5783 l
-4568 5777 l
-4572 5771 l
-4575 5765 l
-4579 5759 l
-4583 5753 l
-4587 5747 l
-4591 5741 l
-4595 5735 l
-4599 5729 l
-4603 5723 l
-4607 5717 l
-4611 5711 l
-4614 5704 l
-4618 5698 l
-4622 5692 l
-4626 5686 l
-4629 5680 l
-4633 5674 l
-4637 5668 l
-4641 5662 l
-4644 5656 l
-4648 5649 l
-4652 5643 l
-4655 5637 l
-4659 5631 l
-4663 5625 l
-4666 5619 l
-4670 5612 l
-4673 5606 l
-4677 5600 l
-4681 5594 l
-4684 5587 l
-4688 5581 l
-4691 5575 l
-4695 5569 l
-4698 5562 l
-4701 5556 l
-4705 5550 l
-4708 5543 l
-4712 5537 l
-4715 5531 l
-4718 5524 l
-4722 5518 l
-4725 5512 l
-4729 5505 l
-4732 5499 l
-4735 5493 l
-4738 5486 l
-4742 5480 l
-4745 5474 l
-4748 5467 l
-4751 5461 l
-4755 5454 l
-4758 5448 l
-4761 5441 l
-4764 5435 l
-4767 5429 l
-4770 5422 l
-4773 5416 l
-4777 5409 l
-4780 5403 l
-4783 5396 l
-4786 5390 l
-4789 5383 l
-4792 5377 l
-4795 5370 l
-4798 5364 l
-4801 5357 l
-4804 5351 l
-4807 5344 l
-4809 5337 l
-4812 5331 l
-4815 5324 l
-4818 5318 l
-4821 5311 l
-4824 5305 l
-4827 5298 l
-4829 5291 l
-4832 5285 l
-4835 5278 l
-4838 5271 l
-4840 5265 l
-4843 5258 l
-4846 5252 l
-4848 5245 l
-4851 5238 l
-4854 5232 l
-4856 5225 l
-4859 5218 l
-4862 5212 l
-4864 5205 l
-4867 5198 l
-4869 5191 l
-4872 5185 l
-4874 5178 l
-4877 5171 l
-4877 5171 l
-S
-4877 3162 m
-4877 3162 l
-4874 3155 l
-4872 3149 l
-4869 3142 l
-4867 3135 l
-4864 3129 l
-4862 3122 l
-4859 3115 l
-4856 3109 l
-4854 3102 l
-S
-4585 3208 m
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3207 l
-4584 3207 l
-4584 3206 l
-4584 3206 l
-4584 3205 l
-4584 3205 l
-4584 3205 l
-4583 3204 l
-4583 3204 l
-4583 3203 l
-4583 3203 l
-4581 3197 l
-4578 3191 l
-4576 3185 l
-4573 3179 l
-4571 3173 l
-4568 3167 l
-4566 3161 l
-4563 3155 l
-4561 3149 l
-4558 3143 l
-4556 3137 l
-4553 3131 l
-4551 3125 l
-4548 3119 l
-4545 3114 l
-4543 3108 l
-4540 3102 l
-4538 3096 l
-4535 3090 l
-4532 3084 l
-4529 3078 l
-4527 3072 l
-4524 3067 l
-4521 3061 l
-4519 3055 l
-4516 3049 l
-4513 3043 l
-4510 3037 l
-4507 3032 l
-4505 3026 l
-4502 3020 l
-4499 3014 l
-4496 3008 l
-4493 3003 l
-4490 2997 l
-4487 2991 l
-4484 2985 l
-4482 2980 l
-4479 2974 l
-4476 2968 l
-4473 2962 l
-4470 2957 l
-4467 2951 l
-4464 2945 l
-4461 2939 l
-4458 2934 l
-4454 2928 l
-4451 2922 l
-4448 2917 l
-4445 2911 l
-4442 2905 l
-4439 2900 l
-4436 2894 l
-4433 2889 l
-4429 2883 l
-4426 2877 l
-4423 2872 l
-4420 2866 l
-4417 2860 l
-4413 2855 l
-4410 2849 l
-4407 2844 l
-4404 2838 l
-4400 2833 l
-4397 2827 l
-4394 2822 l
-4390 2816 l
-4387 2811 l
-4384 2805 l
-4380 2800 l
-4377 2794 l
-4373 2789 l
-4370 2783 l
-4366 2778 l
-4363 2772 l
-4360 2767 l
-4356 2761 l
-4353 2756 l
-4349 2750 l
-4346 2745 l
-4342 2740 l
-4339 2734 l
-4335 2729 l
-4331 2723 l
-4328 2718 l
-4324 2713 l
-4321 2707 l
-4317 2702 l
-4313 2697 l
-4310 2691 l
-4306 2686 l
-4302 2681 l
-4299 2675 l
-4295 2670 l
-4291 2665 l
-4287 2660 l
-4284 2654 l
-4280 2649 l
-4276 2644 l
-4272 2639 l
-4269 2633 l
-4265 2628 l
-4261 2623 l
-4257 2618 l
-4253 2613 l
-4249 2607 l
-4246 2602 l
-4242 2597 l
-4238 2592 l
-4234 2587 l
-4230 2582 l
-4226 2577 l
-4222 2571 l
-4218 2566 l
-4214 2561 l
-4210 2556 l
-4206 2551 l
-4202 2546 l
-4198 2541 l
-4194 2536 l
-4190 2531 l
-4186 2526 l
-4182 2521 l
-4178 2516 l
-4174 2511 l
-4170 2506 l
-4166 2501 l
-4161 2496 l
-4157 2491 l
-4153 2486 l
-4149 2481 l
-4145 2476 l
-4141 2471 l
-4136 2467 l
-4132 2462 l
-4128 2457 l
-4124 2452 l
-4119 2447 l
-4115 2442 l
-4111 2437 l
-4107 2433 l
-4102 2428 l
-4098 2423 l
-4094 2418 l
-4089 2413 l
-4085 2409 l
-4081 2404 l
-4076 2399 l
-4072 2394 l
-4067 2390 l
-4063 2385 l
-4059 2380 l
-4054 2376 l
-4050 2371 l
-4045 2366 l
-4041 2362 l
-4036 2357 l
-4032 2352 l
-4027 2348 l
-4023 2343 l
-4018 2338 l
-4014 2334 l
-4009 2329 l
-4005 2325 l
-4000 2320 l
-3995 2316 l
-3991 2311 l
-3986 2307 l
-3982 2302 l
-3977 2298 l
-3972 2293 l
-3968 2289 l
-3963 2284 l
-3958 2280 l
-3954 2275 l
-S
-3954 2275 m
-3949 2271 l
-3944 2266 l
-3940 2262 l
-3935 2258 l
-3930 2253 l
-3925 2249 l
-3921 2244 l
-3916 2240 l
-3911 2236 l
-3906 2231 l
-3901 2227 l
-3897 2223 l
-3892 2218 l
-3887 2214 l
-3882 2210 l
-3877 2206 l
-3872 2201 l
-3867 2197 l
-3863 2193 l
-3858 2189 l
-3853 2185 l
-3848 2180 l
-3843 2176 l
-3838 2172 l
-3833 2168 l
-3828 2164 l
-3823 2160 l
-3818 2156 l
-3813 2152 l
-3808 2147 l
-3803 2143 l
-3798 2139 l
-3793 2135 l
-3788 2131 l
-3783 2127 l
-3778 2123 l
-3773 2119 l
-3768 2115 l
-3763 2111 l
-3758 2107 l
-3752 2103 l
-3747 2099 l
-3742 2096 l
-3737 2092 l
-3732 2088 l
-3727 2084 l
-3722 2080 l
-3716 2076 l
-3711 2072 l
-3706 2068 l
-3701 2065 l
-3696 2061 l
-3690 2057 l
-3685 2053 l
-3680 2049 l
-3675 2046 l
-3669 2042 l
-3664 2038 l
-3659 2035 l
-3654 2031 l
-3648 2027 l
-3643 2024 l
-3638 2020 l
-3632 2016 l
-3627 2013 l
-3622 2009 l
-3616 2005 l
-3611 2002 l
-3606 1998 l
-3600 1995 l
-3595 1991 l
-3589 1988 l
-3584 1984 l
-3579 1980 l
-3573 1977 l
-3568 1974 l
-3562 1970 l
-3557 1967 l
-3551 1963 l
-3546 1960 l
-3540 1956 l
-3535 1953 l
-3529 1949 l
-3524 1946 l
-3518 1943 l
-3513 1939 l
-3507 1936 l
-3502 1933 l
-3496 1929 l
-3491 1926 l
-3485 1923 l
-3480 1920 l
-3474 1916 l
-3468 1913 l
-3463 1910 l
-3457 1907 l
-3452 1903 l
-3446 1900 l
-3440 1897 l
-3435 1894 l
-3429 1891 l
-3424 1888 l
-3418 1885 l
-3412 1881 l
-3407 1878 l
-3401 1875 l
-3395 1872 l
-3390 1869 l
-3384 1866 l
-3378 1863 l
-3372 1860 l
-3367 1857 l
-3361 1854 l
-3355 1851 l
-3349 1848 l
-3344 1845 l
-3338 1842 l
-3332 1840 l
-3326 1837 l
-3321 1834 l
-3315 1831 l
-3309 1828 l
-3303 1825 l
-3297 1822 l
-3292 1820 l
-3286 1817 l
-3280 1814 l
-3274 1811 l
-3268 1809 l
-3262 1806 l
-3257 1803 l
-3251 1800 l
-3245 1798 l
-3239 1795 l
-3233 1792 l
-3227 1790 l
-3221 1787 l
-3215 1785 l
-3210 1782 l
-3204 1779 l
-3199 1777 l
-S
-1133 1777 m
-1133 1778 l
-1127 1780 l
-1121 1783 l
-1115 1785 l
-1109 1788 l
-1104 1791 l
-1098 1793 l
-1092 1796 l
-1086 1798 l
-1080 1801 l
-1074 1804 l
-1068 1807 l
-1062 1809 l
-1057 1812 l
-1051 1815 l
-1045 1818 l
-1039 1820 l
-1033 1823 l
-1028 1826 l
-1022 1829 l
-1016 1832 l
-1010 1835 l
-1004 1837 l
-999 1840 l
-993 1843 l
-987 1846 l
-981 1849 l
-976 1852 l
-970 1855 l
-964 1858 l
-958 1861 l
-953 1864 l
-947 1867 l
-941 1870 l
-936 1873 l
-930 1876 l
-924 1879 l
-919 1882 l
-913 1885 l
-907 1889 l
-902 1892 l
-896 1895 l
-890 1898 l
-885 1901 l
-879 1904 l
-874 1908 l
-868 1911 l
-862 1914 l
-857 1917 l
-851 1920 l
-846 1924 l
-840 1927 l
-835 1930 l
-829 1934 l
-823 1937 l
-818 1940 l
-812 1944 l
-807 1947 l
-801 1950 l
-796 1954 l
-790 1957 l
-785 1961 l
-780 1964 l
-774 1968 l
-769 1971 l
-763 1974 l
-758 1978 l
-752 1981 l
-747 1985 l
-742 1988 l
-736 1992 l
-731 1996 l
-725 1999 l
-720 2003 l
-715 2006 l
-709 2010 l
-704 2014 l
-699 2017 l
-693 2021 l
-688 2025 l
-683 2028 l
-677 2032 l
-672 2036 l
-667 2039 l
-662 2043 l
-656 2047 l
-651 2051 l
-646 2054 l
-641 2058 l
-635 2062 l
-630 2066 l
-625 2069 l
-620 2073 l
-615 2077 l
-609 2081 l
-604 2085 l
-599 2089 l
-594 2093 l
-589 2097 l
-584 2100 l
-579 2104 l
-573 2108 l
-568 2112 l
-563 2116 l
-558 2120 l
-553 2124 l
-548 2128 l
-543 2132 l
-538 2136 l
-533 2140 l
-S
-3884 6121 m
-3886 6119 l
-3891 6115 l
-3896 6111 l
-3901 6106 l
-3906 6102 l
-3910 6098 l
-3915 6093 l
-3920 6089 l
-3925 6085 l
-3930 6080 l
-3934 6076 l
-3939 6072 l
-3944 6067 l
-3948 6063 l
-3953 6058 l
-3958 6054 l
-3962 6050 l
-3967 6045 l
-3972 6041 l
-3976 6036 l
-3981 6032 l
-3986 6027 l
-3990 6023 l
-3995 6018 l
-3999 6013 l
-4004 6009 l
-4009 6004 l
-4013 6000 l
-4018 5995 l
-4022 5991 l
-4027 5986 l
-4031 5981 l
-4036 5977 l
-4040 5972 l
-4045 5967 l
-4049 5963 l
-4054 5958 l
-4058 5953 l
-4062 5949 l
-4067 5944 l
-4071 5939 l
-4076 5935 l
-4080 5930 l
-4084 5925 l
-4089 5920 l
-4093 5915 l
-4097 5911 l
-4102 5906 l
-4106 5901 l
-4110 5896 l
-4115 5891 l
-4119 5887 l
-4123 5882 l
-4127 5877 l
-4132 5872 l
-4136 5867 l
-4140 5862 l
-4144 5857 l
-4148 5852 l
-4153 5847 l
-4157 5843 l
-4161 5838 l
-4165 5833 l
-4169 5828 l
-4173 5823 l
-4177 5818 l
-4182 5813 l
-4186 5808 l
-4190 5803 l
-4194 5798 l
-4198 5793 l
-4202 5788 l
-4206 5783 l
-4210 5777 l
-4214 5772 l
-4218 5767 l
-4222 5762 l
-4226 5757 l
-4230 5752 l
-4234 5747 l
-4237 5742 l
-4241 5737 l
-4245 5731 l
-4249 5726 l
-4253 5721 l
-4257 5716 l
-4261 5711 l
-4264 5706 l
-4268 5700 l
-4272 5695 l
-4276 5690 l
-4280 5685 l
-4283 5679 l
-4287 5674 l
-4291 5669 l
-4295 5664 l
-4298 5658 l
-4302 5653 l
-4306 5648 l
-4309 5642 l
-4313 5637 l
-4317 5632 l
-4320 5626 l
-4324 5621 l
-4327 5616 l
-4331 5610 l
-4335 5605 l
-4338 5600 l
-4342 5594 l
-4345 5589 l
-4349 5583 l
-4352 5578 l
-4356 5572 l
-4359 5567 l
-4363 5562 l
-4366 5556 l
-4370 5551 l
-4373 5545 l
-4376 5540 l
-4380 5534 l
-4383 5529 l
-4387 5523 l
-4390 5518 l
-4393 5512 l
-4397 5507 l
-4400 5501 l
-4403 5496 l
-4406 5490 l
-4410 5484 l
-4413 5479 l
-4416 5473 l
-4419 5468 l
-4423 5462 l
-4426 5457 l
-4429 5451 l
-4432 5445 l
-4435 5440 l
-4439 5434 l
-4442 5428 l
-4445 5423 l
-4448 5417 l
-4451 5411 l
-4454 5406 l
-4457 5400 l
-4460 5394 l
-4463 5389 l
-4466 5383 l
-4469 5377 l
-4472 5372 l
-4475 5366 l
-4478 5360 l
-4481 5354 l
-4484 5349 l
-4487 5343 l
-4490 5337 l
-4493 5331 l
-4496 5326 l
-4499 5320 l
-4501 5314 l
-4504 5308 l
-4507 5302 l
-4510 5297 l
-4513 5291 l
-4516 5285 l
-4518 5279 l
-4521 5273 l
-4524 5267 l
-4526 5261 l
-4529 5256 l
-4532 5250 l
-4535 5244 l
-4537 5238 l
-4540 5232 l
-4543 5226 l
-4545 5220 l
-4548 5214 l
-4550 5208 l
-4553 5203 l
-4555 5197 l
-4558 5191 l
-4561 5185 l
-4563 5179 l
-4566 5173 l
-4568 5167 l
-4571 5161 l
-4573 5155 l
-4575 5149 l
-4578 5143 l
-4580 5137 l
-4583 5131 l
-4585 5125 l
-4587 5119 l
-4590 5113 l
-4592 5107 l
-4594 5101 l
-4597 5095 l
-4599 5089 l
-4601 5083 l
-4604 5077 l
-S
-4604 5077 m
-4606 5071 l
-4608 5065 l
-4610 5059 l
-4612 5053 l
-4615 5047 l
-4617 5040 l
-4619 5034 l
-4621 5028 l
-4623 5022 l
-4625 5016 l
-4627 5010 l
-4630 5004 l
-4632 4998 l
-4634 4992 l
-4636 4986 l
-4638 4979 l
-4640 4973 l
-4642 4967 l
-4644 4961 l
-4646 4955 l
-4648 4949 l
-4650 4942 l
-4651 4936 l
-4653 4930 l
-4655 4924 l
-4657 4918 l
-4659 4912 l
-4661 4905 l
-4663 4899 l
-4664 4893 l
-4666 4887 l
-4668 4881 l
-4670 4874 l
-4672 4868 l
-4673 4862 l
-4675 4856 l
-4677 4850 l
-4678 4843 l
-4680 4837 l
-4682 4831 l
-4683 4825 l
-4685 4818 l
-4687 4812 l
-4688 4806 l
-4690 4800 l
-4691 4793 l
-4693 4787 l
-4694 4781 l
-4696 4774 l
-4697 4768 l
-4699 4762 l
-4700 4756 l
-4702 4749 l
-4703 4743 l
-4705 4737 l
-4706 4730 l
-4707 4724 l
-4709 4718 l
-4710 4711 l
-4712 4705 l
-4713 4699 l
-4714 4693 l
-4715 4686 l
-4717 4680 l
-4718 4674 l
-4719 4667 l
-4720 4661 l
-4722 4655 l
-4723 4648 l
-4724 4642 l
-4725 4636 l
-4726 4629 l
-4728 4623 l
-4729 4616 l
-4730 4610 l
-4731 4604 l
-4732 4597 l
-4733 4591 l
-4734 4585 l
-4735 4578 l
-4736 4572 l
-4737 4565 l
-4738 4559 l
-4739 4553 l
-4740 4546 l
-4741 4540 l
-4742 4534 l
-4743 4527 l
-4744 4521 l
-4744 4514 l
-4745 4508 l
-4746 4502 l
-4747 4495 l
-4748 4489 l
-4749 4482 l
-4749 4476 l
-4750 4470 l
-4751 4463 l
-4752 4457 l
-4752 4450 l
-4753 4444 l
-4754 4437 l
-4754 4431 l
-4755 4425 l
-4756 4418 l
-4756 4412 l
-4757 4405 l
-4757 4399 l
-4758 4392 l
-4759 4386 l
-4759 4380 l
-4760 4373 l
-4760 4367 l
-4761 4360 l
-4761 4354 l
-4762 4347 l
-4762 4341 l
-4762 4334 l
-4763 4328 l
-4763 4322 l
-4764 4315 l
-4764 4309 l
-4764 4302 l
-4765 4296 l
-4765 4289 l
-4765 4283 l
-4765 4276 l
-4766 4270 l
-4766 4264 l
-4766 4257 l
-4766 4251 l
-4767 4244 l
-4767 4238 l
-4767 4231 l
-4767 4225 l
-4767 4218 l
-4767 4212 l
-4768 4205 l
-4768 4199 l
-4768 4193 l
-4768 4186 l
-4768 4180 l
-4768 4173 l
-4768 4167 l
-4768 4160 l
-4768 4154 l
-4768 4147 l
-4768 4141 l
-4768 4134 l
-4768 4128 l
-4767 4122 l
-4767 4115 l
-4767 4109 l
-4767 4102 l
-4767 4096 l
-4767 4089 l
-4766 4083 l
-4766 4076 l
-4766 4070 l
-4766 4063 l
-4766 4057 l
-4765 4051 l
-4765 4044 l
-4765 4038 l
-4764 4031 l
-4764 4025 l
-4764 4018 l
-4763 4012 l
-4763 4005 l
-4762 3999 l
-4762 3993 l
-4762 3986 l
-4761 3980 l
-4761 3973 l
-4760 3967 l
-4760 3960 l
-4759 3954 l
-4759 3947 l
-4758 3941 l
-4757 3935 l
-4757 3928 l
-4756 3922 l
-4756 3915 l
-4755 3909 l
-4754 3902 l
-4754 3896 l
-4753 3890 l
-4752 3883 l
-4752 3877 l
-4751 3870 l
-4750 3864 l
-4749 3858 l
-4749 3851 l
-4748 3845 l
-4747 3838 l
-4746 3832 l
-4745 3826 l
-4745 3819 l
-4744 3813 l
-S
-4744 3813 m
-4743 3806 l
-4742 3800 l
-4741 3794 l
-4740 3787 l
-4739 3781 l
-4738 3774 l
-4737 3768 l
-4736 3762 l
-4735 3755 l
-4734 3749 l
-4733 3742 l
-4732 3736 l
-4731 3730 l
-4730 3723 l
-4729 3717 l
-4728 3711 l
-4726 3704 l
-4725 3698 l
-4724 3692 l
-4723 3685 l
-4722 3679 l
-4721 3673 l
-4719 3666 l
-4718 3660 l
-4717 3654 l
-4715 3647 l
-4714 3641 l
-4713 3635 l
-4712 3628 l
-4710 3622 l
-4709 3616 l
-4707 3609 l
-4706 3603 l
-4705 3597 l
-4703 3590 l
-4702 3584 l
-4700 3578 l
-4699 3572 l
-4697 3565 l
-4696 3559 l
-4694 3553 l
-4693 3546 l
-4691 3540 l
-4690 3534 l
-4688 3528 l
-4687 3521 l
-4685 3515 l
-4683 3509 l
-4682 3503 l
-4680 3496 l
-4678 3490 l
-4677 3484 l
-4675 3478 l
-4673 3471 l
-4672 3465 l
-4670 3459 l
-4668 3453 l
-4666 3447 l
-4665 3440 l
-4663 3434 l
-4661 3428 l
-4659 3422 l
-4657 3416 l
-4655 3409 l
-4653 3403 l
-4652 3397 l
-4650 3391 l
-4648 3385 l
-4646 3379 l
-4644 3372 l
-4642 3366 l
-4640 3360 l
-4638 3354 l
-4636 3348 l
-4634 3342 l
-4632 3336 l
-4630 3330 l
-4628 3323 l
-4625 3317 l
-4623 3311 l
-4621 3305 l
-4619 3299 l
-4617 3293 l
-4615 3287 l
-4613 3281 l
-4610 3275 l
-4608 3269 l
-4606 3263 l
-4604 3257 l
-4601 3251 l
-4599 3244 l
-4597 3238 l
-4594 3232 l
-4592 3226 l
-4590 3220 l
-4587 3214 l
-4585 3208 l
-S
-4316 3315 m
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3314 l
-4316 3314 l
-4316 3314 l
-4316 3314 l
-4316 3313 l
-4316 3313 l
-4315 3313 l
-4315 3312 l
-4315 3312 l
-4315 3311 l
-4315 3311 l
-4315 3311 l
-4315 3310 l
-4314 3310 l
-4312 3305 l
-4310 3299 l
-4308 3294 l
-4306 3289 l
-4304 3283 l
-4301 3278 l
-4299 3273 l
-4297 3267 l
-4295 3262 l
-4293 3257 l
-4290 3252 l
-4288 3246 l
-4255 3173 l
-4219 3101 l
-4181 3031 l
-4140 2961 l
-4097 2893 l
-4052 2827 l
-4004 2762 l
-3954 2699 l
-3902 2638 l
-3848 2579 l
-3792 2521 l
-3734 2466 l
-3674 2412 l
-3612 2361 l
-3549 2312 l
-3484 2265 l
-3417 2220 l
-3349 2178 l
-3279 2138 l
-3208 2101 l
-3135 2066 l
-3062 2033 l
-2987 2003 l
-2912 1976 l
-2835 1952 l
-2758 1930 l
-2680 1911 l
-2602 1894 l
-2522 1880 l
-2443 1869 l
-2363 1861 l
-2283 1856 l
-2203 1853 l
-2122 1853 l
-2042 1856 l
-1962 1862 l
-1882 1870 l
-1803 1881 l
-1724 1895 l
-1645 1912 l
-1567 1932 l
-1490 1954 l
-1414 1979 l
-1338 2006 l
-1264 2036 l
-1190 2069 l
-1118 2104 l
-1047 2142 l
-978 2182 l
-909 2224 l
-843 2269 l
-778 2316 l
-714 2366 l
-653 2417 l
-593 2471 l
-535 2526 l
-533 2528 l
-S
-533 5804 m
-572 5842 l
-631 5896 l
-692 5948 l
-755 5998 l
-819 6046 l
-885 6092 l
-930 6121 l
-S
-3403 6121 m
-3459 6085 l
-3525 6039 l
-3589 5990 l
-3652 5940 l
-3712 5887 l
-3771 5832 l
-3828 5776 l
-3883 5717 l
-3936 5656 l
-3986 5594 l
-4035 5530 l
-4081 5464 l
-4125 5397 l
-4166 5328 l
-4205 5258 l
-4242 5186 l
-4276 5114 l
-4308 5040 l
-4337 4965 l
-4363 4889 l
-4387 4812 l
-4408 4735 l
-4426 4657 l
-4442 4578 l
-4455 4498 l
-4465 4419 l
-4472 4339 l
-4477 4258 l
-4479 4178 l
-4478 4098 l
-4474 4018 l
-4467 3937 l
-4458 3858 l
-4446 3778 l
-4431 3699 l
-4414 3621 l
-4393 3543 l
-4370 3466 l
-4345 3390 l
-4316 3315 l
-S
-4048 3421 m
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4047 3421 l
-4047 3420 l
-4047 3420 l
-4047 3420 l
-4047 3419 l
-4047 3419 l
-4047 3419 l
-4046 3418 l
-4046 3418 l
-4046 3418 l
-4046 3417 l
-4046 3417 l
-4044 3412 l
-4042 3408 l
-4040 3403 l
-4038 3398 l
-4036 3394 l
-4035 3389 l
-4033 3384 l
-4031 3380 l
-4029 3375 l
-4027 3371 l
-4025 3366 l
-4023 3361 l
-3994 3297 l
-3962 3234 l
-3929 3172 l
-3893 3112 l
-3856 3052 l
-3816 2994 l
-3774 2938 l
-3731 2883 l
-3685 2829 l
-3638 2777 l
-3589 2727 l
-3538 2678 l
-3486 2632 l
-3432 2587 l
-3376 2544 l
-3319 2503 l
-3261 2464 l
-3201 2427 l
-3140 2392 l
-3078 2359 l
-3014 2328 l
-2950 2300 l
-2885 2274 l
-2819 2250 l
-2752 2229 l
-2684 2209 l
-2616 2193 l
-2547 2178 l
-2478 2166 l
-2408 2156 l
-2338 2149 l
-2268 2144 l
-2198 2142 l
-2128 2142 l
-2058 2145 l
-1988 2150 l
-1918 2157 l
-1848 2167 l
-1779 2179 l
-1710 2194 l
-1642 2211 l
-1575 2230 l
-1508 2252 l
-1442 2276 l
-1377 2302 l
-1312 2331 l
-1249 2362 l
-1187 2395 l
-1126 2430 l
-1067 2467 l
-1008 2506 l
-951 2547 l
-896 2591 l
-842 2636 l
-790 2683 l
-739 2731 l
-690 2782 l
-643 2834 l
-598 2888 l
-554 2943 l
-533 2972 l
-S
-533 5361 m
-539 5369 l
-582 5425 l
-626 5479 l
-673 5532 l
-721 5583 l
-771 5632 l
-823 5680 l
-876 5726 l
-931 5769 l
-987 5811 l
-1045 5851 l
-1104 5889 l
-1165 5925 l
-1226 5959 l
-1289 5991 l
-1353 6020 l
-1418 6047 l
-1484 6072 l
-1550 6095 l
-1617 6115 l
-1641 6121 l
-S
-2692 6121 m
-2727 6112 l
-2794 6091 l
-2861 6068 l
-2926 6043 l
-2991 6015 l
-3055 5985 l
-3117 5953 l
-3179 5919 l
-3239 5883 l
-3298 5845 l
-3355 5805 l
-3412 5762 l
-3466 5718 l
-3519 5672 l
-3571 5624 l
-3620 5574 l
-3668 5523 l
-3714 5470 l
-3759 5416 l
-3801 5359 l
-3842 5302 l
-3880 5243 l
-3916 5183 l
-3951 5121 l
-3983 5059 l
-4012 4995 l
-4040 4931 l
-4065 4865 l
-4089 4799 l
-4109 4732 l
-4128 4664 l
-4144 4595 l
-4158 4526 l
-4169 4457 l
-4178 4387 l
-4184 4317 l
-4188 4247 l
-4190 4177 l
-4189 4106 l
-4186 4036 l
-4180 3966 l
-4172 3896 l
-4161 3827 l
-4148 3758 l
-4133 3689 l
-4115 3621 l
-4095 3554 l
-4072 3487 l
-4048 3421 l
-S
-3779 3527 m
-3779 3527 l
-3779 3527 l
-3778 3527 l
-3778 3526 l
-3778 3526 l
-3778 3526 l
-3778 3525 l
-3778 3525 l
-3778 3525 l
-3778 3525 l
-3778 3524 l
-3777 3524 l
-3776 3520 l
-3774 3516 l
-3773 3512 l
-3771 3508 l
-3769 3504 l
-3768 3500 l
-3766 3496 l
-3764 3492 l
-3763 3488 l
-3761 3484 l
-3759 3480 l
-3758 3476 l
-3733 3421 l
-3706 3367 l
-3677 3314 l
-3647 3262 l
-3614 3212 l
-3580 3162 l
-3545 3113 l
-3507 3066 l
-3468 3020 l
-3428 2976 l
-3386 2933 l
-3342 2891 l
-3297 2851 l
-3251 2812 l
-3203 2775 l
-3154 2740 l
-3104 2707 l
-3053 2675 l
-3001 2645 l
-2947 2617 l
-2893 2591 l
-2838 2567 l
-2782 2544 l
-2726 2524 l
-2668 2505 l
-2610 2489 l
-2552 2474 l
-2493 2462 l
-2433 2452 l
-2374 2444 l
-2314 2437 l
-2254 2433 l
-2194 2431 l
-2133 2431 l
-2073 2434 l
-2013 2438 l
-1953 2444 l
-1894 2453 l
-1834 2463 l
-1775 2476 l
-1717 2490 l
-1659 2507 l
-1602 2526 l
-1545 2546 l
-1489 2569 l
-1434 2593 l
-1380 2620 l
-1327 2648 l
-1275 2678 l
-1224 2710 l
-1174 2743 l
-1125 2779 l
-1077 2816 l
-1031 2854 l
-986 2895 l
-943 2936 l
-901 2980 l
-861 3024 l
-822 3070 l
-785 3118 l
-749 3166 l
-715 3216 l
-683 3267 l
-653 3319 l
-624 3372 l
-598 3426 l
-573 3481 l
-550 3537 l
-533 3583 l
-S
-533 4749 m
-542 4775 l
-564 4831 l
-588 4886 l
-614 4940 l
-642 4994 l
-672 5046 l
-703 5098 l
-736 5148 l
-771 5197 l
-808 5245 l
-846 5292 l
-886 5337 l
-928 5380 l
-970 5423 l
-1015 5464 l
-1060 5503 l
-1107 5540 l
-1156 5576 l
-1205 5611 l
-1256 5643 l
-1308 5674 l
-1361 5703 l
-1415 5730 l
-1469 5755 l
-1525 5778 l
-1581 5800 l
-1638 5819 l
-1696 5836 l
-1754 5852 l
-1813 5865 l
-1872 5876 l
-1931 5886 l
-1991 5893 l
-2051 5898 l
-2111 5901 l
-2172 5902 l
-2232 5900 l
-2292 5897 l
-2352 5892 l
-2412 5884 l
-2471 5875 l
-2530 5863 l
-2589 5849 l
-2647 5834 l
-2705 5816 l
-2762 5796 l
-2818 5775 l
-2873 5751 l
-2928 5726 l
-2981 5698 l
-3034 5669 l
-3086 5638 l
-3136 5605 l
-3186 5571 l
-3234 5534 l
-3280 5496 l
-3326 5457 l
-3370 5416 l
-3413 5373 l
-3454 5329 l
-3493 5284 l
-3531 5237 l
-3568 5189 l
-3602 5140 l
-3635 5089 l
-3666 5038 l
-3696 4985 l
-3723 4931 l
-3749 4877 l
-3772 4821 l
-3794 4765 l
-3814 4708 l
-3832 4651 l
-3848 4593 l
-3861 4534 l
-3873 4475 l
-3883 4415 l
-3890 4356 l
-3896 4296 l
-3899 4235 l
-3901 4175 l
-3900 4115 l
-3897 4055 l
-3892 3995 l
-3885 3935 l
-3876 3875 l
-3865 3816 l
-3852 3757 l
-3837 3699 l
-3819 3641 l
-3800 3584 l
-3779 3528 l
-S
-3510 3634 m
-3510 3634 l
-3510 3633 l
-3510 3633 l
-3510 3633 l
-3510 3633 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3631 l
-3509 3631 l
-3508 3628 l
-3506 3624 l
-3505 3621 l
-3504 3618 l
-3502 3614 l
-3501 3611 l
-3499 3608 l
-3498 3605 l
-3497 3601 l
-3495 3598 l
-3494 3595 l
-3492 3591 l
-3472 3546 l
-3449 3501 l
-3425 3456 l
-3400 3413 l
-3373 3371 l
-3345 3329 l
-3315 3289 l
-3284 3249 l
-3251 3211 l
-3218 3174 l
-3183 3138 l
-3146 3103 l
-3109 3070 l
-3070 3038 l
-3030 3007 l
-2990 2978 l
-2948 2950 l
-2905 2924 l
-2862 2899 l
-2817 2875 l
-2772 2853 l
-2726 2833 l
-2680 2815 l
-2632 2798 l
-2585 2782 l
-2536 2768 l
-2488 2756 l
-2438 2746 l
-2389 2738 l
-2339 2731 l
-2289 2726 l
-2239 2722 l
-2189 2720 l
-2139 2721 l
-2089 2722 l
-2039 2726 l
-1989 2731 l
-1939 2738 l
-1890 2747 l
-1841 2757 l
-1792 2770 l
-1744 2784 l
-1696 2799 l
-1649 2816 l
-1602 2835 l
-1556 2855 l
-1511 2877 l
-1467 2901 l
-1423 2926 l
-1381 2953 l
-1339 2981 l
-1299 3010 l
-1259 3041 l
-1220 3073 l
-1183 3107 l
-1147 3141 l
-1112 3177 l
-1078 3215 l
-1046 3253 l
-1015 3292 l
-985 3333 l
-957 3375 l
-930 3417 l
-905 3460 l
-881 3505 l
-859 3550 l
-839 3595 l
-820 3642 l
-802 3689 l
-786 3737 l
-772 3785 l
-760 3834 l
-749 3883 l
-740 3932 l
-733 3982 l
-727 4032 l
-724 4082 l
-722 4132 l
-721 4182 l
-723 4232 l
-726 4282 l
-731 4332 l
-737 4382 l
-746 4432 l
-756 4481 l
-768 4530 l
-781 4578 l
-796 4626 l
-813 4673 l
-831 4720 l
-851 4766 l
-873 4811 l
-896 4856 l
-921 4900 l
-947 4943 l
-975 4984 l
-1004 5025 l
-1034 5065 l
-1066 5104 l
-1100 5142 l
-1134 5178 l
-1170 5213 l
-1207 5247 l
-1245 5280 l
-1284 5311 l
-1324 5341 l
-1366 5370 l
-1408 5397 l
-1451 5423 l
-1495 5447 l
-1540 5469 l
-1585 5490 l
-1632 5510 l
-1679 5528 l
-1726 5544 l
-1774 5558 l
-1823 5571 l
-1872 5582 l
-1921 5591 l
-1971 5599 l
-2020 5605 l
-2070 5609 l
-2121 5612 l
-2171 5612 l
-2221 5611 l
-2271 5609 l
-2321 5604 l
-2371 5598 l
-2420 5590 l
-2470 5580 l
-2519 5569 l
-2567 5556 l
-2615 5541 l
-2662 5525 l
-2709 5507 l
-2755 5487 l
-2801 5466 l
-2846 5443 l
-2889 5419 l
-2932 5393 l
-2975 5365 l
-3016 5336 l
-3056 5306 l
-3095 5275 l
-3133 5242 l
-3169 5208 l
-3205 5172 l
-3239 5135 l
-3272 5098 l
-3304 5059 l
-3334 5019 l
-3363 4977 l
-3390 4935 l
-3416 4892 l
-3441 4849 l
-3464 4804 l
-3485 4758 l
-3505 4712 l
-3523 4665 l
-3539 4618 l
-3554 4570 l
-3567 4522 l
-3579 4473 l
-3589 4423 l
-3597 4374 l
-3603 4324 l
-3608 4274 l
-3611 4224 l
-3612 4174 l
-3611 4124 l
-3609 4073 l
-3605 4023 l
-3599 3973 l
-3591 3924 l
-3582 3874 l
-S
-3582 3874 m
-3571 3825 l
-3558 3777 l
-3544 3729 l
-3528 3681 l
-3510 3634 l
-S
-3241 3740 m
-3241 3740 l
-3241 3740 l
-3241 3740 l
-3241 3740 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3738 l
-3241 3738 l
-3240 3738 l
-3239 3735 l
-3238 3733 l
-3237 3730 l
-3236 3727 l
-3235 3725 l
-3234 3722 l
-3233 3720 l
-3232 3717 l
-3231 3714 l
-3229 3712 l
-3228 3709 l
-3227 3706 l
-3211 3670 l
-3193 3634 l
-3174 3598 l
-3153 3564 l
-3132 3530 l
-3109 3497 l
-3085 3464 l
-3060 3433 l
-3034 3402 l
-3007 3373 l
-2979 3344 l
-2950 3316 l
-2920 3289 l
-2889 3264 l
-2858 3239 l
-2825 3216 l
-2792 3193 l
-2757 3172 l
-2723 3152 l
-2687 3134 l
-2651 3116 l
-2614 3100 l
-2577 3085 l
-2539 3071 l
-2501 3059 l
-2462 3048 l
-2423 3038 l
-2384 3030 l
-2344 3023 l
-2305 3018 l
-2265 3014 l
-2225 3011 l
-2185 3010 l
-2144 3010 l
-2104 3011 l
-2064 3014 l
-2024 3018 l
-1985 3024 l
-1945 3031 l
-1906 3039 l
-1867 3049 l
-1828 3060 l
-1790 3072 l
-1752 3086 l
-1715 3101 l
-1678 3118 l
-1642 3135 l
-1607 3154 l
-1572 3174 l
-1538 3195 l
-1505 3218 l
-1472 3241 l
-1440 3266 l
-1410 3292 l
-1380 3319 l
-1351 3346 l
-1323 3375 l
-1296 3405 l
-1270 3436 l
-1245 3467 l
-1221 3500 l
-1199 3533 l
-1178 3567 l
-1157 3602 l
-1138 3637 l
-1121 3673 l
-1104 3710 l
-1089 3747 l
-1075 3785 l
-1062 3823 l
-1051 3861 l
-1041 3900 l
-1033 3939 l
-1026 3979 l
-1020 4019 l
-1015 4059 l
-1012 4099 l
-1011 4139 l
-1010 4179 l
-1011 4219 l
-1014 4259 l
-1018 4299 l
-1023 4339 l
-1030 4379 l
-1038 4418 l
-1047 4457 l
-1058 4496 l
-1070 4534 l
-1084 4572 l
-1098 4609 l
-1114 4646 l
-1132 4682 l
-1150 4718 l
-1170 4753 l
-1191 4787 l
-1213 4821 l
-1236 4854 l
-1261 4885 l
-1286 4916 l
-1313 4947 l
-1340 4976 l
-1369 5004 l
-1399 5031 l
-1429 5057 l
-1460 5082 l
-1493 5106 l
-1526 5129 l
-1560 5151 l
-1594 5171 l
-1629 5191 l
-1665 5209 l
-1702 5226 l
-1739 5241 l
-1776 5255 l
-1814 5268 l
-1853 5280 l
-1892 5290 l
-1931 5299 l
-1970 5306 l
-2010 5313 l
-2050 5317 l
-2090 5321 l
-2130 5323 l
-2170 5323 l
-2210 5322 l
-2250 5320 l
-2290 5317 l
-2330 5312 l
-2370 5305 l
-2409 5297 l
-2448 5288 l
-2487 5278 l
-2525 5266 l
-2563 5253 l
-2601 5239 l
-2638 5223 l
-2674 5206 l
-2710 5188 l
-2745 5168 l
-2779 5147 l
-2813 5126 l
-2846 5102 l
-2878 5078 l
-2909 5053 l
-2939 5027 l
-2969 4999 l
-2997 4971 l
-3025 4942 l
-3051 4911 l
-3076 4880 l
-3101 4848 l
-3124 4815 l
-3146 4782 l
-3166 4747 l
-3186 4712 l
-3204 4676 l
-3221 4640 l
-3237 4603 l
-3252 4566 l
-3265 4528 l
-3277 4489 l
-3287 4451 l
-3296 4411 l
-3304 4372 l
-3311 4332 l
-3316 4293 l
-3319 4253 l
-3322 4212 l
-3323 4172 l
-3322 4132 l
-3320 4092 l
-3317 4052 l
-3312 4012 l
-3306 3972 l
-3299 3933 l
-S
-3299 3933 m
-3290 3894 l
-3280 3855 l
-3268 3816 l
-3256 3778 l
-3241 3741 l
-S
-2973 3847 m
-2973 3847 l
-2972 3847 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3845 l
-2972 3845 l
-2972 3845 l
-2971 3843 l
-2970 3841 l
-2970 3839 l
-2969 3837 l
-2968 3835 l
-2967 3833 l
-2966 3831 l
-2965 3829 l
-2965 3827 l
-2964 3825 l
-2963 3823 l
-2962 3821 l
-2950 3794 l
-2936 3767 l
-2922 3740 l
-2907 3714 l
-2890 3689 l
-2873 3664 l
-2856 3640 l
-2837 3616 l
-2817 3593 l
-2797 3571 l
-2776 3549 l
-2754 3529 l
-2732 3509 l
-2709 3489 l
-2685 3471 l
-2660 3453 l
-2635 3437 l
-2610 3421 l
-2584 3406 l
-2557 3392 l
-2530 3379 l
-2502 3366 l
-2474 3355 l
-2446 3345 l
-2417 3336 l
-2388 3328 l
-2359 3320 l
-2330 3314 l
-2300 3309 l
-2270 3305 l
-2240 3302 l
-2210 3300 l
-2180 3299 l
-2150 3299 l
-2120 3300 l
-2090 3302 l
-2060 3305 l
-2030 3310 l
-2000 3315 l
-1971 3321 l
-1942 3328 l
-1913 3337 l
-1884 3346 l
-1856 3356 l
-1828 3368 l
-1800 3380 l
-1773 3393 l
-1747 3407 l
-1721 3422 l
-1695 3438 l
-1670 3455 l
-1646 3473 l
-1622 3491 l
-1599 3510 l
-1576 3530 l
-1555 3551 l
-1534 3573 l
-1514 3595 l
-1494 3618 l
-1476 3642 l
-1458 3666 l
-1441 3691 l
-1425 3717 l
-1410 3743 l
-1395 3769 l
-1382 3796 l
-1370 3824 l
-1358 3852 l
-1348 3880 l
-1338 3909 l
-1330 3938 l
-1323 3967 l
-1316 3996 l
-1311 4026 l
-1306 4056 l
-1303 4086 l
-1301 4116 l
-1300 4146 l
-1299 4176 l
-1300 4206 l
-1302 4236 l
-1305 4266 l
-1309 4296 l
-1314 4326 l
-1320 4355 l
-1327 4384 l
-1335 4413 l
-1344 4442 l
-1354 4471 l
-1365 4499 l
-1377 4526 l
-1390 4553 l
-1404 4580 l
-1419 4606 l
-1435 4632 l
-1451 4657 l
-1469 4682 l
-1487 4706 l
-1506 4729 l
-1526 4752 l
-1547 4773 l
-1568 4795 l
-1591 4815 l
-1613 4835 l
-1637 4853 l
-1661 4871 l
-1686 4889 l
-1711 4905 l
-1737 4920 l
-1764 4935 l
-1790 4948 l
-1818 4961 l
-1846 4972 l
-1874 4983 l
-1902 4993 l
-1931 5001 l
-1960 5009 l
-1990 5016 l
-2019 5021 l
-2049 5026 l
-2079 5030 l
-2109 5032 l
-2139 5034 l
-2169 5034 l
-2199 5033 l
-2229 5032 l
-2259 5029 l
-2289 5025 l
-2319 5021 l
-2348 5015 l
-2378 5008 l
-2407 5000 l
-2436 4991 l
-2464 4981 l
-2492 4971 l
-2520 4959 l
-2547 4946 l
-2574 4932 l
-2600 4918 l
-2626 4902 l
-2651 4886 l
-2676 4868 l
-2700 4850 l
-2723 4831 l
-2746 4812 l
-2768 4791 l
-2790 4770 l
-2810 4748 l
-2830 4725 l
-2849 4702 l
-2867 4678 l
-2884 4653 l
-2901 4628 l
-2916 4602 l
-2931 4576 l
-2945 4549 l
-2958 4522 l
-2969 4494 l
-2980 4466 l
-2990 4437 l
-2999 4409 l
-3007 4380 l
-3014 4350 l
-3020 4321 l
-3025 4291 l
-3028 4261 l
-3031 4231 l
-3033 4201 l
-3034 4171 l
-3033 4141 l
-3032 4111 l
-3029 4081 l
-3026 4051 l
-3021 4021 l
-3016 3991 l
-S
-3016 3991 m
-3009 3962 l
-3001 3933 l
-2993 3904 l
-2983 3875 l
-2973 3847 l
-S
-2704 3953 m
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3952 l
-2703 3952 l
-2703 3952 l
-2703 3951 l
-2702 3950 l
-2702 3948 l
-2701 3947 l
-2701 3946 l
-2700 3944 l
-2700 3943 l
-2699 3942 l
-2699 3940 l
-2698 3939 l
-2697 3938 l
-2697 3936 l
-2689 3918 l
-2680 3900 l
-2670 3882 l
-2660 3865 l
-2649 3848 l
-2638 3832 l
-2626 3815 l
-2613 3800 l
-2600 3784 l
-2587 3769 l
-2573 3755 l
-2558 3741 l
-2543 3728 l
-2528 3715 l
-2512 3703 l
-2496 3691 l
-2479 3680 l
-2462 3669 l
-2445 3659 l
-2427 3650 l
-2409 3641 l
-2390 3633 l
-2372 3626 l
-2353 3619 l
-2334 3613 l
-2314 3607 l
-2295 3602 l
-2275 3598 l
-2255 3595 l
-2236 3592 l
-2216 3590 l
-2196 3589 l
-2176 3588 l
-2155 3588 l
-2135 3589 l
-2115 3590 l
-2095 3592 l
-2076 3595 l
-2056 3599 l
-2036 3603 l
-2017 3608 l
-1997 3613 l
-1978 3619 l
-1959 3626 l
-1941 3634 l
-1922 3642 l
-1904 3651 l
-1887 3660 l
-1869 3670 l
-1852 3681 l
-1836 3692 l
-1819 3704 l
-1803 3716 l
-1788 3729 l
-1773 3742 l
-1759 3756 l
-1745 3771 l
-1731 3786 l
-1718 3801 l
-1706 3817 l
-1694 3833 l
-1683 3850 l
-1672 3867 l
-1662 3884 l
-1652 3902 l
-1644 3920 l
-1635 3938 l
-1628 3957 l
-1621 3975 l
-1614 3995 l
-1609 4014 l
-1604 4033 l
-1600 4053 l
-1596 4073 l
-1593 4093 l
-1591 4112 l
-1589 4133 l
-1589 4153 l
-1588 4173 l
-1589 4193 l
-1590 4213 l
-1592 4233 l
-1595 4253 l
-1598 4273 l
-1602 4292 l
-1607 4312 l
-1612 4331 l
-1618 4350 l
-1625 4369 l
-1632 4388 l
-1640 4406 l
-1649 4424 l
-1658 4442 l
-1668 4460 l
-1679 4477 l
-1690 4494 l
-1701 4510 l
-1714 4526 l
-1726 4541 l
-1740 4556 l
-1753 4571 l
-1768 4585 l
-1783 4599 l
-1798 4612 l
-1813 4624 l
-1830 4636 l
-1846 4648 l
-1863 4659 l
-1880 4669 l
-1898 4679 l
-1916 4688 l
-1934 4696 l
-1953 4704 l
-1971 4711 l
-1990 4717 l
-2010 4723 l
-2029 4728 l
-2049 4733 l
-2068 4736 l
-2088 4739 l
-2108 4742 l
-2128 4743 l
-2148 4744 l
-2168 4745 l
-2188 4744 l
-2208 4743 l
-2228 4741 l
-2248 4739 l
-2268 4736 l
-2288 4732 l
-2307 4727 l
-2327 4722 l
-2346 4716 l
-2365 4710 l
-2384 4702 l
-2402 4695 l
-2420 4686 l
-2438 4677 l
-2456 4667 l
-2473 4657 l
-2490 4646 l
-2506 4634 l
-2522 4622 l
-2538 4610 l
-2553 4597 l
-2568 4583 l
-2582 4569 l
-2596 4554 l
-2609 4539 l
-2621 4523 l
-2634 4507 l
-2645 4491 l
-2656 4474 l
-2666 4457 l
-2676 4439 l
-2685 4421 l
-2694 4403 l
-2702 4385 l
-2709 4366 l
-2716 4347 l
-2722 4328 l
-2727 4308 l
-2731 4289 l
-2735 4269 l
-2739 4249 l
-2741 4229 l
-2743 4209 l
-2744 4189 l
-2745 4169 l
-2744 4149 l
-2743 4129 l
-2742 4109 l
-2739 4089 l
-2736 4069 l
-2733 4050 l
-S
-2733 4050 m
-2728 4030 l
-2723 4011 l
-2717 3991 l
-2711 3972 l
-2704 3953 l
-S
-2435 4060 m
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2434 4058 l
-2434 4057 l
-2434 4057 l
-2434 4056 l
-2433 4055 l
-2433 4055 l
-2433 4054 l
-2432 4053 l
-2432 4053 l
-2432 4052 l
-2432 4051 l
-2427 4042 l
-2423 4033 l
-2418 4024 l
-2413 4016 l
-2408 4007 l
-2402 3999 l
-2396 3991 l
-2390 3983 l
-2383 3975 l
-2377 3968 l
-2370 3961 l
-2362 3954 l
-2355 3947 l
-2347 3941 l
-2339 3935 l
-2331 3929 l
-2323 3923 l
-2314 3918 l
-2305 3913 l
-2297 3908 l
-2288 3904 l
-2278 3900 l
-2269 3896 l
-2260 3893 l
-2250 3890 l
-2240 3887 l
-2231 3884 l
-2221 3882 l
-2211 3881 l
-2201 3879 l
-2191 3878 l
-2181 3878 l
-2171 3877 l
-2161 3877 l
-2151 3878 l
-2141 3878 l
-2131 3879 l
-2121 3881 l
-2111 3882 l
-2101 3885 l
-2092 3887 l
-2082 3890 l
-2072 3893 l
-2063 3896 l
-2054 3900 l
-2044 3904 l
-2035 3909 l
-2027 3913 l
-2018 3918 l
-2009 3924 l
-2001 3929 l
-1993 3935 l
-1985 3941 l
-1977 3948 l
-1970 3954 l
-1963 3961 l
-1956 3969 l
-1949 3976 l
-1942 3984 l
-1936 3992 l
-1930 4000 l
-1925 4008 l
-1919 4016 l
-1914 4025 l
-1909 4034 l
-1905 4043 l
-1901 4052 l
-1897 4061 l
-1894 4071 l
-1890 4080 l
-1888 4090 l
-1885 4100 l
-1883 4110 l
-1881 4120 l
-1880 4129 l
-1879 4139 l
-1878 4149 l
-1877 4159 l
-1877 4170 l
-1878 4180 l
-1878 4190 l
-1879 4200 l
-1881 4210 l
-1882 4219 l
-1884 4229 l
-1887 4239 l
-1889 4249 l
-1892 4258 l
-1896 4268 l
-1899 4277 l
-1903 4286 l
-1908 4295 l
-1912 4304 l
-1917 4313 l
-1923 4322 l
-1928 4330 l
-1934 4338 l
-1940 4346 l
-1946 4354 l
-1953 4361 l
-1960 4369 l
-1967 4376 l
-1974 4383 l
-1982 4389 l
-1990 4395 l
-1998 4401 l
-2006 4407 l
-2015 4412 l
-2023 4418 l
-2032 4422 l
-2041 4427 l
-2050 4431 l
-2059 4435 l
-2069 4439 l
-2078 4442 l
-2088 4445 l
-2098 4447 l
-2107 4449 l
-2117 4451 l
-2127 4453 l
-2137 4454 l
-2147 4455 l
-2157 4455 l
-2167 4456 l
-2177 4455 l
-2187 4455 l
-2197 4454 l
-2207 4453 l
-2217 4451 l
-2227 4449 l
-2237 4447 l
-2247 4444 l
-2256 4441 l
-2266 4438 l
-2275 4434 l
-2284 4430 l
-2293 4426 l
-2302 4422 l
-2311 4417 l
-2320 4412 l
-2328 4406 l
-2336 4400 l
-2344 4394 l
-2352 4388 l
-2360 4381 l
-2367 4375 l
-2374 4368 l
-2381 4360 l
-2388 4353 l
-2394 4345 l
-2400 4337 l
-2406 4329 l
-2411 4320 l
-2416 4312 l
-2421 4303 l
-2426 4294 l
-2430 4285 l
-2434 4276 l
-2438 4266 l
-2441 4257 l
-2444 4247 l
-2447 4237 l
-2449 4228 l
-2451 4218 l
-2452 4208 l
-2454 4198 l
-2455 4188 l
-2455 4178 l
-2455 4168 l
-2455 4158 l
-2455 4148 l
-2454 4138 l
-2453 4128 l
-2451 4118 l
-2450 4108 l
-S
-2450 4108 m
-2447 4098 l
-2445 4088 l
-2442 4079 l
-2439 4069 l
-2435 4060 l
-S
-2166 4166 m
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-3682 3323 m
-3655 3337 l
-S
-3559 3132 m
-3534 3150 l
-S
-3412 2959 m
-3390 2980 l
-S
-3057 2677 m
-3041 2704 l
-S
-2855 2574 m
-2843 2602 l
-S
-2642 2498 m
-2633 2527 l
-S
-2194 2431 m
-2193 2462 l
-S
-1967 2443 m
-1971 2473 l
-S
-1744 2483 m
-1751 2513 l
-S
-1323 2650 m
-1338 2677 l
-S
-1132 2773 m
-1151 2798 l
-S
-960 2920 m
-981 2942 l
-S
-678 3275 m
-704 3291 l
-S
-575 3477 m
-603 3489 l
-S
-651 5010 m
-678 4995 l
-S
-774 5201 m
-799 5183 l
-S
-921 5374 m
-943 5353 l
-S
-1276 5655 m
-1291 5629 l
-S
-1478 5759 m
-1490 5731 l
-S
-1691 5835 m
-1700 5806 l
-S
-2139 5901 m
-2140 5871 l
-S
-2366 5890 m
-2362 5860 l
-S
-2589 5849 m
-2582 5820 l
-S
-3010 5683 m
-2995 5656 l
-S
-3200 5560 m
-3182 5535 l
-S
-3373 5413 m
-3352 5391 l
-S
-3655 5058 m
-3628 5042 l
-S
-3758 4856 m
-3730 4844 l
-S
-3834 4642 m
-3805 4634 l
-S
-3900 4194 m
-3870 4193 l
-S
-3889 3967 m
-3859 3971 l
-S
-3848 3744 m
-3819 3751 l
-S
-4787 3129 m
-4799 3156 l
-S
-4719 3155 m
-4732 3183 l
-S
-4652 3182 m
-4665 3209 l
-S
-4518 3235 m
-4531 3263 l
-S
-4451 3262 m
-4463 3289 l
-S
-4384 3288 m
-4396 3316 l
-S
-4249 3341 m
-4262 3369 l
-S
-4182 3368 m
-4195 3396 l
-S
-4115 3395 m
-4127 3422 l
-S
-3980 3448 m
-3993 3476 l
-S
-3913 3474 m
-3926 3502 l
-S
-3846 3501 m
-3859 3529 l
-S
-3712 3554 m
-3724 3582 l
-S
-3645 3581 m
-3657 3609 l
-S
-3577 3608 m
-3590 3635 l
-S
-3443 3661 m
-3456 3688 l
-S
-3376 3687 m
-3388 3715 l
-S
-3309 3714 m
-3321 3742 l
-S
-3174 3767 m
-3187 3795 l
-S
-3107 3794 m
-3120 3821 l
-S
-3040 3820 m
-3052 3848 l
-S
-2905 3874 m
-2918 3901 l
-S
-2838 3900 m
-2851 3928 l
-S
-2771 3927 m
-2784 3955 l
-S
-2637 3980 m
-2649 4008 l
-S
-2570 4007 m
-2582 4034 l
-S
-2502 4033 m
-2515 4061 l
-S
-2368 4087 m
-2381 4114 l
-S
-2301 4113 m
-2313 4141 l
-S
-2234 4140 m
-2246 4167 l
-S
-3779 3528 m
-3754 3468 l
-3727 3409 l
-3697 3351 l
-3666 3294 l
-3632 3239 l
-3596 3185 l
-3559 3132 l
-3519 3080 l
-3478 3031 l
-3434 2982 l
-3389 2936 l
-3342 2891 l
-3294 2848 l
-3244 2807 l
-S
-3244 2807 m
-3192 2767 l
-3139 2730 l
-3085 2694 l
-3029 2661 l
-2972 2630 l
-2914 2601 l
-2855 2574 l
-2795 2549 l
-2734 2527 l
-2673 2507 l
-2610 2489 l
-2547 2473 l
-2484 2460 l
-2420 2450 l
-S
-2420 2450 m
-2355 2441 l
-2291 2436 l
-2226 2432 l
-2161 2431 l
-2096 2432 l
-2032 2436 l
-1967 2443 l
-1903 2451 l
-1839 2462 l
-1775 2476 l
-1713 2492 l
-1650 2510 l
-1589 2530 l
-1528 2553 l
-S
-1528 2553 m
-1468 2578 l
-1409 2605 l
-1351 2635 l
-1295 2666 l
-1239 2700 l
-1185 2735 l
-1132 2773 l
-1081 2813 l
-1031 2854 l
-983 2898 l
-936 2943 l
-892 2990 l
-849 3038 l
-807 3088 l
-S
-807 3088 m
-768 3140 l
-731 3193 l
-695 3247 l
-662 3303 l
-631 3360 l
-602 3418 l
-575 3477 l
-550 3537 l
-533 3583 l
-S
-533 4749 m
-554 4805 l
-S
-554 4805 m
-579 4865 l
-606 4924 l
-636 4982 l
-667 5038 l
-701 5094 l
-736 5148 l
-774 5201 l
-814 5252 l
-855 5302 l
-899 5350 l
-944 5397 l
-991 5442 l
-1039 5485 l
-1089 5526 l
-S
-1089 5526 m
-1141 5566 l
-1194 5603 l
-1248 5638 l
-1304 5672 l
-1361 5703 l
-1419 5732 l
-1478 5759 l
-1538 5784 l
-1599 5806 l
-1660 5826 l
-1723 5844 l
-1786 5859 l
-1849 5872 l
-1913 5883 l
-S
-1913 5883 m
-1977 5891 l
-2042 5897 l
-2107 5901 l
-2172 5902 l
-2237 5900 l
-2301 5896 l
-2366 5890 l
-2430 5881 l
-2494 5870 l
-2557 5857 l
-2620 5841 l
-2683 5823 l
-2744 5803 l
-2805 5780 l
-S
-2805 5780 m
-2865 5755 l
-2924 5728 l
-2981 5698 l
-3038 5667 l
-3094 5633 l
-3148 5597 l
-3200 5560 l
-3252 5520 l
-3302 5478 l
-3350 5435 l
-3396 5390 l
-3441 5343 l
-3484 5294 l
-3526 5244 l
-S
-3526 5244 m
-3565 5193 l
-3602 5140 l
-3638 5085 l
-3671 5030 l
-3702 4973 l
-3731 4915 l
-3758 4856 l
-3783 4796 l
-3805 4735 l
-3825 4673 l
-3843 4611 l
-3858 4548 l
-3871 4484 l
-3882 4420 l
-S
-3882 4420 m
-3890 4356 l
-3896 4291 l
-3900 4226 l
-3901 4161 l
-3899 4096 l
-3895 4032 l
-3889 3967 l
-3881 3903 l
-3869 3839 l
-3856 3775 l
-3840 3712 l
-3822 3650 l
-3802 3588 l
-3800 3584 l
-3799 3580 l
-3797 3575 l
-3795 3571 l
-3794 3567 l
-3792 3562 l
-3791 3558 l
-3789 3554 l
-3787 3549 l
-3786 3545 l
-3784 3541 l
-3782 3536 l
-3781 3532 l
-3780 3532 l
-3780 3531 l
-3780 3531 l
-3780 3531 l
-3780 3530 l
-3780 3530 l
-3780 3530 l
-3780 3530 l
-3779 3529 l
-3779 3529 l
-3779 3529 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-S
-4877 3093 m
-4873 3094 l
-4854 3102 l
-S
-4854 3102 m
-4835 3110 l
-4815 3117 l
-4796 3125 l
-4777 3132 l
-4758 3140 l
-4739 3148 l
-4719 3155 l
-4700 3163 l
-4681 3170 l
-4662 3178 l
-4643 3186 l
-4624 3193 l
-4604 3201 l
-4585 3208 l
-S
-4585 3208 m
-4566 3216 l
-4547 3224 l
-4528 3231 l
-4508 3239 l
-4489 3246 l
-4470 3254 l
-4451 3262 l
-4432 3269 l
-4412 3277 l
-4393 3284 l
-4374 3292 l
-4355 3300 l
-4336 3307 l
-4316 3315 l
-S
-4316 3315 m
-4297 3322 l
-4278 3330 l
-4259 3338 l
-4240 3345 l
-4220 3353 l
-4201 3360 l
-4182 3368 l
-4163 3376 l
-4144 3383 l
-4124 3391 l
-4105 3398 l
-4086 3406 l
-4067 3414 l
-4048 3421 l
-S
-4048 3421 m
-4028 3429 l
-4009 3436 l
-3990 3444 l
-3971 3452 l
-3952 3459 l
-3932 3467 l
-3913 3474 l
-3894 3482 l
-3875 3490 l
-3856 3497 l
-3836 3505 l
-3817 3512 l
-3798 3520 l
-3779 3528 l
-S
-3779 3528 m
-3760 3535 l
-3740 3543 l
-3721 3551 l
-3702 3558 l
-3683 3566 l
-3664 3573 l
-3645 3581 l
-3625 3589 l
-3606 3596 l
-3587 3604 l
-3568 3611 l
-3549 3619 l
-3529 3627 l
-3510 3634 l
-S
-3510 3634 m
-3491 3642 l
-3472 3649 l
-3453 3657 l
-3433 3665 l
-3414 3672 l
-3395 3680 l
-3376 3687 l
-3357 3695 l
-3337 3703 l
-3318 3710 l
-3299 3718 l
-3280 3725 l
-3261 3733 l
-3241 3741 l
-S
-3241 3741 m
-3222 3748 l
-3203 3756 l
-3184 3763 l
-3165 3771 l
-3145 3779 l
-3126 3786 l
-3107 3794 l
-3088 3801 l
-3069 3809 l
-3049 3817 l
-3030 3824 l
-3011 3832 l
-2992 3839 l
-2973 3847 l
-S
-2973 3847 m
-2953 3855 l
-2934 3862 l
-2915 3870 l
-2896 3877 l
-2877 3885 l
-2857 3893 l
-2838 3900 l
-2819 3908 l
-2800 3915 l
-2781 3923 l
-2762 3931 l
-2742 3938 l
-2723 3946 l
-2704 3953 l
-S
-2704 3953 m
-2685 3961 l
-2666 3969 l
-2646 3976 l
-2627 3984 l
-2608 3991 l
-2589 3999 l
-2570 4007 l
-2550 4014 l
-2531 4022 l
-2512 4029 l
-2493 4037 l
-2474 4045 l
-2454 4052 l
-2435 4060 l
-S
-2435 4060 m
-2416 4068 l
-2397 4075 l
-2378 4083 l
-2358 4090 l
-2339 4098 l
-2320 4106 l
-2301 4113 l
-2282 4121 l
-2262 4128 l
-2243 4136 l
-2224 4144 l
-2205 4151 l
-2186 4159 l
-2166 4166 l
-S
-2166 4166 m
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1 g
-3911 3420 m
-3914 3420 l
-3914 3421 l
-3911 3421 l
-3908 3421 m
-3914 3421 l
-3914 3422 l
-3908 3422 l
-3906 3422 m
-3915 3422 l
-3915 3423 l
-3906 3423 l
-3903 3423 m
-3915 3423 l
-3915 3424 l
-3903 3424 l
-3901 3424 m
-3916 3424 l
-3916 3425 l
-3901 3425 l
-3898 3425 m
-3916 3425 l
-3916 3426 l
-3898 3426 l
-3896 3426 m
-3916 3426 l
-3916 3427 l
-3896 3427 l
-3893 3427 m
-3917 3427 l
-3917 3428 l
-3893 3428 l
-3891 3428 m
-3917 3428 l
-3917 3429 l
-3891 3429 l
-3888 3429 m
-3918 3429 l
-3918 3430 l
-3888 3430 l
-3886 3430 m
-3918 3430 l
-3918 3431 l
-3886 3431 l
-3883 3431 m
-3918 3431 l
-3918 3432 l
-3883 3432 l
-3881 3432 m
-3919 3432 l
-3919 3433 l
-3881 3433 l
-3878 3433 m
-3919 3433 l
-3919 3434 l
-3878 3434 l
-3876 3434 m
-3920 3434 l
-3920 3435 l
-3876 3435 l
-3873 3435 m
-3920 3435 l
-3920 3436 l
-3873 3436 l
-3871 3436 m
-3920 3436 l
-3920 3437 l
-3871 3437 l
-3868 3437 m
-3921 3437 l
-3921 3438 l
-3868 3438 l
-3866 3438 m
-3921 3438 l
-3921 3439 l
-3866 3439 l
-3863 3439 m
-3922 3439 l
-3922 3440 l
-3863 3440 l
-3861 3440 m
-3922 3440 l
-3922 3441 l
-3861 3441 l
-3858 3441 m
-3922 3441 l
-3922 3442 l
-3858 3442 l
-3856 3442 m
-3923 3442 l
-3923 3443 l
-3856 3443 l
-3853 3443 m
-3923 3443 l
-3923 3444 l
-3853 3444 l
-3851 3444 m
-3924 3444 l
-3924 3445 l
-3851 3445 l
-3848 3445 m
-3924 3445 l
-3924 3446 l
-3848 3446 l
-3846 3446 m
-3924 3446 l
-3924 3447 l
-3846 3447 l
-3843 3447 m
-3925 3447 l
-3925 3448 l
-3843 3448 l
-3841 3448 m
-3925 3448 l
-3925 3449 l
-3841 3449 l
-3838 3449 m
-3926 3449 l
-3926 3450 l
-3838 3450 l
-3836 3450 m
-3926 3450 l
-3926 3451 l
-3836 3451 l
-3833 3451 m
-3926 3451 l
-3926 3452 l
-3833 3452 l
-3831 3452 m
-3927 3452 l
-3927 3453 l
-3831 3453 l
-3828 3453 m
-3927 3453 l
-3927 3454 l
-3828 3454 l
-3826 3454 m
-3927 3454 l
-3927 3455 l
-3826 3455 l
-3823 3455 m
-3928 3455 l
-3928 3456 l
-3823 3456 l
-3821 3456 m
-3928 3456 l
-3928 3457 l
-3821 3457 l
-3818 3457 m
-3929 3457 l
-3929 3458 l
-3818 3458 l
-3816 3458 m
-3929 3458 l
-3929 3459 l
-3816 3459 l
-3813 3459 m
-3929 3459 l
-3929 3460 l
-3813 3460 l
-3811 3460 m
-3930 3460 l
-3930 3461 l
-3811 3461 l
-3808 3461 m
-3930 3461 l
-3930 3462 l
-3808 3462 l
-3806 3462 m
-3931 3462 l
-3931 3463 l
-3806 3463 l
-3803 3463 m
-3931 3463 l
-3931 3464 l
-3803 3464 l
-3801 3464 m
-3931 3464 l
-3931 3465 l
-3801 3465 l
-3801 3465 m
-3932 3465 l
-3932 3467 l
-3801 3467 l
-3801 3467 m
-3933 3467 l
-3933 3468 l
-3801 3468 l
-3802 3468 m
-3933 3468 l
-3933 3470 l
-3802 3470 l
-3802 3470 m
-3934 3470 l
-3934 3471 l
-3802 3471 l
-3803 3471 m
-3934 3471 l
-3934 3472 l
-3803 3472 l
-3803 3472 m
-3935 3472 l
-3935 3473 l
-3803 3473 l
-3804 3473 m
-3935 3473 l
-3935 3475 l
-3804 3475 l
-3804 3475 m
-3936 3475 l
-3936 3476 l
-3804 3476 l
-3805 3476 m
-3936 3476 l
-3936 3477 l
-3805 3477 l
-3805 3477 m
-3937 3477 l
-3937 3478 l
-3805 3478 l
-3806 3478 m
-3937 3478 l
-3937 3480 l
-3806 3480 l
-3806 3480 m
-3938 3480 l
-3938 3481 l
-3806 3481 l
-3807 3481 m
-3938 3481 l
-3938 3482 l
-3807 3482 l
-3807 3482 m
-3939 3482 l
-3939 3483 l
-3807 3483 l
-3808 3483 m
-3939 3483 l
-3939 3485 l
-3808 3485 l
-3808 3485 m
-3940 3485 l
-3940 3486 l
-3808 3486 l
-3809 3486 m
-3940 3486 l
-3940 3487 l
-3809 3487 l
-3809 3487 m
-3941 3487 l
-3941 3488 l
-3809 3488 l
-3810 3488 m
-3941 3488 l
-3941 3490 l
-3810 3490 l
-3810 3490 m
-3942 3490 l
-3942 3491 l
-3810 3491 l
-3811 3491 m
-3942 3491 l
-3942 3492 l
-3811 3492 l
-3811 3492 m
-3943 3492 l
-3943 3493 l
-3811 3493 l
-3812 3493 m
-3943 3493 l
-3943 3495 l
-3812 3495 l
-3812 3495 m
-3944 3495 l
-3944 3496 l
-3812 3496 l
-3813 3496 m
-3944 3496 l
-3944 3497 l
-3813 3497 l
-3813 3497 m
-3945 3497 l
-3945 3498 l
-3813 3498 l
-3814 3498 m
-3945 3498 l
-3945 3500 l
-3814 3500 l
-3814 3500 m
-3946 3500 l
-3946 3501 l
-3814 3501 l
-3815 3501 m
-3946 3501 l
-3946 3502 l
-3815 3502 l
-3815 3502 m
-3947 3502 l
-3947 3503 l
-3815 3503 l
-3816 3503 m
-3947 3503 l
-3947 3505 l
-3816 3505 l
-3816 3505 m
-3948 3505 l
-3948 3506 l
-3816 3506 l
-3817 3506 m
-3948 3506 l
-3948 3507 l
-3817 3507 l
-3817 3507 m
-3949 3507 l
-3949 3508 l
-3817 3508 l
-3818 3508 m
-3949 3508 l
-3949 3510 l
-3818 3510 l
-3818 3510 m
-3950 3510 l
-3950 3511 l
-3818 3511 l
-3819 3511 m
-3950 3511 l
-3950 3512 l
-3819 3512 l
-3819 3512 m
-3950 3512 l
-3950 3513 l
-3819 3513 l
-3820 3513 m
-3950 3513 l
-3950 3514 l
-3820 3514 l
-3820 3514 m
-3948 3514 l
-3948 3515 l
-3820 3515 l
-3820 3515 m
-3946 3515 l
-3946 3516 l
-3820 3516 l
-3821 3516 m
-3943 3516 l
-3943 3517 l
-3821 3517 l
-3821 3517 m
-3941 3517 l
-3941 3518 l
-3821 3518 l
-3822 3518 m
-3938 3518 l
-3938 3519 l
-3822 3519 l
-3822 3519 m
-3936 3519 l
-3936 3520 l
-3822 3520 l
-3822 3520 m
-3933 3520 l
-3933 3521 l
-3822 3521 l
-3823 3521 m
-3931 3521 l
-3931 3522 l
-3823 3522 l
-3823 3522 m
-3928 3522 l
-3928 3523 l
-3823 3523 l
-3824 3523 m
-3926 3523 l
-3926 3524 l
-3824 3524 l
-3824 3524 m
-3923 3524 l
-3923 3525 l
-3824 3525 l
-3824 3525 m
-3921 3525 l
-3921 3526 l
-3824 3526 l
-3825 3526 m
-3918 3526 l
-3918 3527 l
-3825 3527 l
-3825 3527 m
-3916 3527 l
-3916 3528 l
-3825 3528 l
-3826 3528 m
-3913 3528 l
-3913 3529 l
-3826 3529 l
-3826 3529 m
-3911 3529 l
-3911 3530 l
-3826 3530 l
-3826 3530 m
-3908 3530 l
-3908 3531 l
-3826 3531 l
-3827 3531 m
-3906 3531 l
-3906 3532 l
-3827 3532 l
-3827 3532 m
-3903 3532 l
-3903 3533 l
-3827 3533 l
-3828 3533 m
-3901 3533 l
-3901 3534 l
-3828 3534 l
-3828 3534 m
-3898 3534 l
-3898 3535 l
-3828 3535 l
-3828 3535 m
-3896 3535 l
-3896 3536 l
-3828 3536 l
-3829 3536 m
-3893 3536 l
-3893 3537 l
-3829 3537 l
-3829 3537 m
-3891 3537 l
-3891 3538 l
-3829 3538 l
-3830 3538 m
-3888 3538 l
-3888 3539 l
-3830 3539 l
-3830 3539 m
-3886 3539 l
-3886 3540 l
-3830 3540 l
-3830 3540 m
-3883 3540 l
-3883 3541 l
-3830 3541 l
-3831 3541 m
-3881 3541 l
-3881 3542 l
-3831 3542 l
-3831 3542 m
-3878 3542 l
-3878 3543 l
-3831 3543 l
-3832 3543 m
-3876 3543 l
-3876 3544 l
-3832 3544 l
-3832 3544 m
-3873 3544 l
-3873 3545 l
-3832 3545 l
-3832 3545 m
-3871 3545 l
-3871 3546 l
-3832 3546 l
-3833 3546 m
-3868 3546 l
-3868 3547 l
-3833 3547 l
-3833 3547 m
-3866 3547 l
-3866 3548 l
-3833 3548 l
-3834 3548 m
-3863 3548 l
-3863 3549 l
-3834 3549 l
-3834 3549 m
-3861 3549 l
-3861 3550 l
-3834 3550 l
-3834 3550 m
-3858 3550 l
-3858 3551 l
-3834 3551 l
-3835 3551 m
-3856 3551 l
-3856 3552 l
-3835 3552 l
-3835 3552 m
-3853 3552 l
-3853 3553 l
-3835 3553 l
-3836 3553 m
-3851 3553 l
-3851 3554 l
-3836 3554 l
-3836 3554 m
-3848 3554 l
-3848 3555 l
-3836 3555 l
-3836 3555 m
-3846 3555 l
-3846 3556 l
-3836 3556 l
-3837 3556 m
-3843 3556 l
-3843 3557 l
-3837 3557 l
-3837 3557 m
-3841 3557 l
-3841 3558 l
-3837 3558 l
-Y
-3913.2 3420.2 m
-3801 3465 l
-3838 3558 l
-3950 3513 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3833 3502 m
-3832 3488 l
-3841 3476 l
-3859 3464 l
-3870 3460 l
-3891 3456 l
-3906 3459 l
-3915 3469 l
-3918 3477 l
-3919 3490 l
-3910 3502 l
-3892 3514 l
-3880 3519 l
-3860 3523 l
-3845 3519 l
-3836 3509 l
-3833 3502 l
-S
-1 g
-3305 2646 m
-3308 2646 l
-3308 2647 l
-3305 2647 l
-3304 2647 m
-3309 2647 l
-3309 2648 l
-3304 2648 l
-3304 2648 m
-3310 2648 l
-3310 2649 l
-3304 2649 l
-3303 2649 m
-3311 2649 l
-3311 2650 l
-3303 2650 l
-3302 2650 m
-3313 2650 l
-3313 2651 l
-3302 2651 l
-3301 2651 m
-3314 2651 l
-3314 2652 l
-3301 2652 l
-3300 2652 m
-3315 2652 l
-3315 2653 l
-3300 2653 l
-3300 2653 m
-3317 2653 l
-3317 2654 l
-3300 2654 l
-3299 2654 m
-3318 2654 l
-3318 2655 l
-3299 2655 l
-3298 2655 m
-3319 2655 l
-3319 2656 l
-3298 2656 l
-3297 2656 m
-3320 2656 l
-3320 2657 l
-3297 2657 l
-3296 2657 m
-3322 2657 l
-3322 2658 l
-3296 2658 l
-3296 2658 m
-3323 2658 l
-3323 2659 l
-3296 2659 l
-3295 2659 m
-3324 2659 l
-3324 2660 l
-3295 2660 l
-3294 2660 m
-3325 2660 l
-3325 2661 l
-3294 2661 l
-3293 2661 m
-3327 2661 l
-3327 2662 l
-3293 2662 l
-3292 2662 m
-3328 2662 l
-3328 2663 l
-3292 2663 l
-3292 2663 m
-3329 2663 l
-3329 2664 l
-3292 2664 l
-3291 2664 m
-3331 2664 l
-3331 2665 l
-3291 2665 l
-3290 2665 m
-3332 2665 l
-3332 2666 l
-3290 2666 l
-3289 2666 m
-3333 2666 l
-3333 2667 l
-3289 2667 l
-3288 2667 m
-3334 2667 l
-3334 2668 l
-3288 2668 l
-3288 2668 m
-3336 2668 l
-3336 2669 l
-3288 2669 l
-3287 2669 m
-3337 2669 l
-3337 2670 l
-3287 2670 l
-3286 2670 m
-3338 2670 l
-3338 2671 l
-3286 2671 l
-3285 2671 m
-3340 2671 l
-3340 2672 l
-3285 2672 l
-3284 2672 m
-3341 2672 l
-3341 2673 l
-3284 2673 l
-3284 2673 m
-3342 2673 l
-3342 2674 l
-3284 2674 l
-3283 2674 m
-3343 2674 l
-3343 2675 l
-3283 2675 l
-3282 2675 m
-3345 2675 l
-3345 2676 l
-3282 2676 l
-3281 2676 m
-3346 2676 l
-3346 2677 l
-3281 2677 l
-3281 2677 m
-3347 2677 l
-3347 2678 l
-3281 2678 l
-3280 2678 m
-3348 2678 l
-3348 2679 l
-3280 2679 l
-3279 2679 m
-3350 2679 l
-3350 2680 l
-3279 2680 l
-3278 2680 m
-3351 2680 l
-3351 2681 l
-3278 2681 l
-3277 2681 m
-3352 2681 l
-3352 2682 l
-3277 2682 l
-3277 2682 m
-3354 2682 l
-3354 2683 l
-3277 2683 l
-3276 2683 m
-3355 2683 l
-3355 2684 l
-3276 2684 l
-3275 2684 m
-3356 2684 l
-3356 2685 l
-3275 2685 l
-3274 2685 m
-3357 2685 l
-3357 2686 l
-3274 2686 l
-3273 2686 m
-3359 2686 l
-3359 2687 l
-3273 2687 l
-3273 2687 m
-3360 2687 l
-3360 2688 l
-3273 2688 l
-3272 2688 m
-3361 2688 l
-3361 2689 l
-3272 2689 l
-3271 2689 m
-3363 2689 l
-3363 2690 l
-3271 2690 l
-3270 2690 m
-3364 2690 l
-3364 2691 l
-3270 2691 l
-3269 2691 m
-3365 2691 l
-3365 2692 l
-3269 2692 l
-3269 2692 m
-3366 2692 l
-3366 2693 l
-3269 2693 l
-3268 2693 m
-3368 2693 l
-3368 2694 l
-3268 2694 l
-3267 2694 m
-3369 2694 l
-3369 2695 l
-3267 2695 l
-3266 2695 m
-3370 2695 l
-3370 2696 l
-3266 2696 l
-3265 2696 m
-3371 2696 l
-3371 2697 l
-3265 2697 l
-3265 2697 m
-3373 2697 l
-3373 2698 l
-3265 2698 l
-3264 2698 m
-3374 2698 l
-3374 2699 l
-3264 2699 l
-3263 2699 m
-3375 2699 l
-3375 2700 l
-3263 2700 l
-3262 2700 m
-3377 2700 l
-3377 2701 l
-3262 2701 l
-3261 2701 m
-3378 2701 l
-3378 2702 l
-3261 2702 l
-3261 2702 m
-3379 2702 l
-3379 2703 l
-3261 2703 l
-3260 2703 m
-3380 2703 l
-3380 2704 l
-3260 2704 l
-3259 2704 m
-3382 2704 l
-3382 2705 l
-3259 2705 l
-3258 2705 m
-3383 2705 l
-3383 2706 l
-3258 2706 l
-3257 2706 m
-3384 2706 l
-3384 2707 l
-3257 2707 l
-3257 2707 m
-3385 2707 l
-3385 2708 l
-3257 2708 l
-3256 2708 m
-3385 2708 l
-3385 2709 l
-3256 2709 l
-3255 2709 m
-3385 2709 l
-3385 2710 l
-3255 2710 l
-3254 2710 m
-3384 2710 l
-3384 2711 l
-3254 2711 l
-3254 2711 m
-3383 2711 l
-3383 2712 l
-3254 2712 l
-3253 2712 m
-3382 2712 l
-3382 2713 l
-3253 2713 l
-3252 2713 m
-3382 2713 l
-3382 2714 l
-3252 2714 l
-3251 2714 m
-3381 2714 l
-3381 2715 l
-3251 2715 l
-3250 2715 m
-3380 2715 l
-3380 2716 l
-3250 2716 l
-3250 2716 m
-3379 2716 l
-3379 2717 l
-3250 2717 l
-3249 2717 m
-3378 2717 l
-3378 2718 l
-3249 2718 l
-3248 2718 m
-3378 2718 l
-3378 2719 l
-3248 2719 l
-3247 2719 m
-3377 2719 l
-3377 2720 l
-3247 2720 l
-3246 2720 m
-3376 2720 l
-3376 2721 l
-3246 2721 l
-3246 2721 m
-3375 2721 l
-3375 2722 l
-3246 2722 l
-3245 2722 m
-3374 2722 l
-3374 2723 l
-3245 2723 l
-3244 2723 m
-3374 2723 l
-3374 2724 l
-3244 2724 l
-3243 2724 m
-3373 2724 l
-3373 2725 l
-3243 2725 l
-3242 2725 m
-3372 2725 l
-3372 2726 l
-3242 2726 l
-3242 2726 m
-3371 2726 l
-3371 2727 l
-3242 2727 l
-3241 2727 m
-3370 2727 l
-3370 2728 l
-3241 2728 l
-3240 2728 m
-3370 2728 l
-3370 2729 l
-3240 2729 l
-3239 2729 m
-3369 2729 l
-3369 2730 l
-3239 2730 l
-3238 2730 m
-3368 2730 l
-3368 2731 l
-3238 2731 l
-3238 2731 m
-3367 2731 l
-3367 2732 l
-3238 2732 l
-3237 2732 m
-3367 2732 l
-3367 2733 l
-3237 2733 l
-3236 2733 m
-3366 2733 l
-3366 2734 l
-3236 2734 l
-3235 2734 m
-3365 2734 l
-3365 2735 l
-3235 2735 l
-3234 2735 m
-3364 2735 l
-3364 2736 l
-3234 2736 l
-3234 2736 m
-3363 2736 l
-3363 2737 l
-3234 2737 l
-3233 2737 m
-3363 2737 l
-3363 2738 l
-3233 2738 l
-3232 2738 m
-3362 2738 l
-3362 2739 l
-3232 2739 l
-3231 2739 m
-3361 2739 l
-3361 2740 l
-3231 2740 l
-3231 2740 m
-3360 2740 l
-3360 2741 l
-3231 2741 l
-3231 2741 m
-3359 2741 l
-3359 2742 l
-3231 2742 l
-3232 2742 m
-3359 2742 l
-3359 2743 l
-3232 2743 l
-3233 2743 m
-3358 2743 l
-3358 2744 l
-3233 2744 l
-3234 2744 m
-3357 2744 l
-3357 2745 l
-3234 2745 l
-3236 2745 m
-3356 2745 l
-3356 2746 l
-3236 2746 l
-3237 2746 m
-3355 2746 l
-3355 2747 l
-3237 2747 l
-3238 2747 m
-3355 2747 l
-3355 2748 l
-3238 2748 l
-3239 2748 m
-3354 2748 l
-3354 2749 l
-3239 2749 l
-3241 2749 m
-3353 2749 l
-3353 2750 l
-3241 2750 l
-3242 2750 m
-3352 2750 l
-3352 2751 l
-3242 2751 l
-3243 2751 m
-3352 2751 l
-3352 2752 l
-3243 2752 l
-3245 2752 m
-3351 2752 l
-3351 2753 l
-3245 2753 l
-3246 2753 m
-3350 2753 l
-3350 2754 l
-3246 2754 l
-3247 2754 m
-3349 2754 l
-3349 2755 l
-3247 2755 l
-3248 2755 m
-3348 2755 l
-3348 2756 l
-3248 2756 l
-3250 2756 m
-3348 2756 l
-3348 2757 l
-3250 2757 l
-3251 2757 m
-3347 2757 l
-3347 2758 l
-3251 2758 l
-3252 2758 m
-3346 2758 l
-3346 2759 l
-3252 2759 l
-3253 2759 m
-3345 2759 l
-3345 2760 l
-3253 2760 l
-3255 2760 m
-3344 2760 l
-3344 2761 l
-3255 2761 l
-3256 2761 m
-3344 2761 l
-3344 2762 l
-3256 2762 l
-3257 2762 m
-3343 2762 l
-3343 2763 l
-3257 2763 l
-3259 2763 m
-3342 2763 l
-3342 2764 l
-3259 2764 l
-3260 2764 m
-3341 2764 l
-3341 2765 l
-3260 2765 l
-3261 2765 m
-3340 2765 l
-3340 2766 l
-3261 2766 l
-3262 2766 m
-3340 2766 l
-3340 2767 l
-3262 2767 l
-3264 2767 m
-3339 2767 l
-3339 2768 l
-3264 2768 l
-3265 2768 m
-3338 2768 l
-3338 2769 l
-3265 2769 l
-3266 2769 m
-3337 2769 l
-3337 2770 l
-3266 2770 l
-3267 2770 m
-3337 2770 l
-3337 2771 l
-3267 2771 l
-3269 2771 m
-3336 2771 l
-3336 2772 l
-3269 2772 l
-3270 2772 m
-3335 2772 l
-3335 2773 l
-3270 2773 l
-3271 2773 m
-3334 2773 l
-3334 2774 l
-3271 2774 l
-3273 2774 m
-3333 2774 l
-3333 2775 l
-3273 2775 l
-3274 2775 m
-3333 2775 l
-3333 2776 l
-3274 2776 l
-3275 2776 m
-3332 2776 l
-3332 2777 l
-3275 2777 l
-3276 2777 m
-3331 2777 l
-3331 2778 l
-3276 2778 l
-3278 2778 m
-3330 2778 l
-3330 2779 l
-3278 2779 l
-3279 2779 m
-3329 2779 l
-3329 2780 l
-3279 2780 l
-3280 2780 m
-3329 2780 l
-3329 2781 l
-3280 2781 l
-3281 2781 m
-3328 2781 l
-3328 2782 l
-3281 2782 l
-3283 2782 m
-3327 2782 l
-3327 2783 l
-3283 2783 l
-3284 2783 m
-3326 2783 l
-3326 2784 l
-3284 2784 l
-3285 2784 m
-3325 2784 l
-3325 2785 l
-3285 2785 l
-3287 2785 m
-3325 2785 l
-3325 2786 l
-3287 2786 l
-3288 2786 m
-3324 2786 l
-3324 2787 l
-3288 2787 l
-3289 2787 m
-3323 2787 l
-3323 2788 l
-3289 2788 l
-3290 2788 m
-3322 2788 l
-3322 2789 l
-3290 2789 l
-3292 2789 m
-3322 2789 l
-3322 2790 l
-3292 2790 l
-3293 2790 m
-3321 2790 l
-3321 2791 l
-3293 2791 l
-3294 2791 m
-3320 2791 l
-3320 2792 l
-3294 2792 l
-3295 2792 m
-3319 2792 l
-3319 2793 l
-3295 2793 l
-3297 2793 m
-3318 2793 l
-3318 2794 l
-3297 2794 l
-3298 2794 m
-3318 2794 l
-3318 2795 l
-3298 2795 l
-3299 2795 m
-3317 2795 l
-3317 2796 l
-3299 2796 l
-3301 2796 m
-3316 2796 l
-3316 2797 l
-3301 2797 l
-3302 2797 m
-3315 2797 l
-3315 2798 l
-3302 2798 l
-3303 2798 m
-3314 2798 l
-3314 2799 l
-3303 2799 l
-3304 2799 m
-3314 2799 l
-3314 2800 l
-3304 2800 l
-3306 2800 m
-3313 2800 l
-3313 2801 l
-3306 2801 l
-3307 2801 m
-3312 2801 l
-3312 2802 l
-3307 2802 l
-3308 2802 m
-3311 2802 l
-3311 2803 l
-3308 2803 l
-Y
-3306.2 2646.3 m
-3231 2741 l
-3310 2803 l
-3385 2708 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3274 2727 m
-3272 2731 l
-3270 2740 l
-3270 2746 l
-3274 2754 l
-3287 2764 l
-3297 2766 l
-3302 2766 l
-3311 2762 l
-3316 2755 l
-3318 2746 l
-3319 2731 l
-3312 2672 l
-3358 2709 l
-S
-1 g
-2393 2280 m
-2403 2280 l
-2403 2281 l
-2393 2281 l
-2393 2281 m
-2410 2281 l
-2410 2282 l
-2393 2282 l
-2393 2282 m
-2417 2282 l
-2417 2283 l
-2393 2283 l
-2393 2283 m
-2423 2283 l
-2423 2284 l
-2393 2284 l
-2393 2284 m
-2430 2284 l
-2430 2285 l
-2393 2285 l
-2392 2285 m
-2437 2285 l
-2437 2286 l
-2392 2286 l
-2392 2286 m
-2444 2286 l
-2444 2287 l
-2392 2287 l
-2392 2287 m
-2450 2287 l
-2450 2288 l
-2392 2288 l
-2392 2288 m
-2457 2288 l
-2457 2289 l
-2392 2289 l
-2392 2289 m
-2464 2289 l
-2464 2290 l
-2392 2290 l
-2392 2290 m
-2471 2290 l
-2471 2291 l
-2392 2291 l
-2391 2291 m
-2477 2291 l
-2477 2292 l
-2391 2292 l
-2391 2292 m
-2484 2292 l
-2484 2293 l
-2391 2293 l
-2391 2293 m
-2491 2293 l
-2491 2294 l
-2391 2294 l
-2391 2294 m
-2497 2294 l
-2497 2295 l
-2391 2295 l
-2391 2295 m
-2498 2295 l
-2498 2296 l
-2391 2296 l
-2391 2296 m
-2497 2296 l
-2497 2298 l
-2391 2298 l
-2390 2298 m
-2497 2298 l
-2497 2303 l
-2390 2303 l
-2390 2303 m
-2496 2303 l
-2496 2305 l
-2390 2305 l
-2389 2305 m
-2496 2305 l
-2496 2310 l
-2389 2310 l
-2389 2310 m
-2495 2310 l
-2495 2312 l
-2389 2312 l
-2388 2312 m
-2495 2312 l
-2495 2317 l
-2388 2317 l
-2388 2317 m
-2494 2317 l
-2494 2318 l
-2388 2318 l
-2387 2318 m
-2494 2318 l
-2494 2324 l
-2387 2324 l
-2387 2324 m
-2493 2324 l
-2493 2325 l
-2387 2325 l
-2386 2325 m
-2493 2325 l
-2493 2331 l
-2386 2331 l
-2386 2331 m
-2492 2331 l
-2492 2332 l
-2386 2332 l
-2385 2332 m
-2492 2332 l
-2492 2338 l
-2385 2338 l
-2385 2338 m
-2491 2338 l
-2491 2339 l
-2385 2339 l
-2384 2339 m
-2491 2339 l
-2491 2345 l
-2384 2345 l
-2383 2345 m
-2490 2345 l
-2490 2352 l
-2383 2352 l
-2382 2352 m
-2489 2352 l
-2489 2359 l
-2382 2359 l
-2381 2359 m
-2488 2359 l
-2488 2366 l
-2381 2366 l
-2380 2366 m
-2487 2366 l
-2487 2372 l
-2380 2372 l
-2379 2372 m
-2487 2372 l
-2487 2373 l
-2379 2373 l
-2379 2373 m
-2486 2373 l
-2486 2379 l
-2379 2379 l
-2378 2379 m
-2486 2379 l
-2486 2380 l
-2378 2380 l
-2378 2380 m
-2485 2380 l
-2485 2386 l
-2378 2386 l
-2377 2386 m
-2485 2386 l
-2485 2387 l
-2377 2387 l
-2377 2387 m
-2484 2387 l
-2484 2393 l
-2377 2393 l
-2376 2393 m
-2484 2393 l
-2484 2394 l
-2376 2394 l
-2376 2394 m
-2483 2394 l
-2483 2400 l
-2376 2400 l
-2376 2400 m
-2483 2400 l
-2483 2401 l
-2376 2401 l
-2382 2401 m
-2482 2401 l
-2482 2402 l
-2382 2402 l
-2389 2402 m
-2482 2402 l
-2482 2403 l
-2389 2403 l
-2396 2403 m
-2482 2403 l
-2482 2404 l
-2396 2404 l
-2403 2404 m
-2482 2404 l
-2482 2405 l
-2403 2405 l
-2410 2405 m
-2482 2405 l
-2482 2406 l
-2410 2406 l
-2417 2406 m
-2482 2406 l
-2482 2407 l
-2417 2407 l
-2424 2407 m
-2482 2407 l
-2482 2408 l
-2424 2408 l
-2431 2408 m
-2481 2408 l
-2481 2409 l
-2431 2409 l
-2438 2409 m
-2481 2409 l
-2481 2410 l
-2438 2410 l
-2445 2410 m
-2481 2410 l
-2481 2411 l
-2445 2411 l
-2452 2411 m
-2481 2411 l
-2481 2412 l
-2452 2412 l
-2459 2412 m
-2481 2412 l
-2481 2413 l
-2459 2413 l
-2466 2413 m
-2481 2413 l
-2481 2414 l
-2466 2414 l
-2473 2414 m
-2481 2414 l
-2481 2415 l
-2473 2415 l
-Y
-2393.8 2279.7 m
-2376 2400 l
-2480 2415 l
-2497 2295 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2441 2392 m
-2408 2328 l
-2470 2337 l
-S
-2441 2392 m
-2453 2305 l
-S
-1 g
-1513 2399 m
-1517 2399 l
-1517 2400 l
-1513 2400 l
-1510 2400 m
-1517 2400 l
-1517 2401 l
-1510 2401 l
-1508 2401 m
-1518 2401 l
-1518 2402 l
-1508 2402 l
-1505 2402 m
-1518 2402 l
-1518 2403 l
-1505 2403 l
-1503 2403 m
-1518 2403 l
-1518 2404 l
-1503 2404 l
-1500 2404 m
-1519 2404 l
-1519 2405 l
-1500 2405 l
-1498 2405 m
-1519 2405 l
-1519 2406 l
-1498 2406 l
-1495 2406 m
-1520 2406 l
-1520 2407 l
-1495 2407 l
-1493 2407 m
-1520 2407 l
-1520 2408 l
-1493 2408 l
-1490 2408 m
-1520 2408 l
-1520 2409 l
-1490 2409 l
-1488 2409 m
-1521 2409 l
-1521 2410 l
-1488 2410 l
-1485 2410 m
-1521 2410 l
-1521 2411 l
-1485 2411 l
-1482 2411 m
-1522 2411 l
-1522 2412 l
-1482 2412 l
-1480 2412 m
-1522 2412 l
-1522 2413 l
-1480 2413 l
-1477 2413 m
-1522 2413 l
-1522 2414 l
-1477 2414 l
-1475 2414 m
-1523 2414 l
-1523 2415 l
-1475 2415 l
-1472 2415 m
-1523 2415 l
-1523 2416 l
-1472 2416 l
-1470 2416 m
-1524 2416 l
-1524 2417 l
-1470 2417 l
-1467 2417 m
-1524 2417 l
-1524 2418 l
-1467 2418 l
-1465 2418 m
-1524 2418 l
-1524 2419 l
-1465 2419 l
-1462 2419 m
-1525 2419 l
-1525 2420 l
-1462 2420 l
-1460 2420 m
-1525 2420 l
-1525 2421 l
-1460 2421 l
-1457 2421 m
-1526 2421 l
-1526 2422 l
-1457 2422 l
-1454 2422 m
-1526 2422 l
-1526 2423 l
-1454 2423 l
-1452 2423 m
-1526 2423 l
-1526 2424 l
-1452 2424 l
-1449 2424 m
-1527 2424 l
-1527 2425 l
-1449 2425 l
-1447 2425 m
-1527 2425 l
-1527 2426 l
-1447 2426 l
-1444 2426 m
-1528 2426 l
-1528 2427 l
-1444 2427 l
-1442 2427 m
-1528 2427 l
-1528 2428 l
-1442 2428 l
-1439 2428 m
-1528 2428 l
-1528 2429 l
-1439 2429 l
-1437 2429 m
-1529 2429 l
-1529 2430 l
-1437 2430 l
-1434 2430 m
-1529 2430 l
-1529 2431 l
-1434 2431 l
-1432 2431 m
-1530 2431 l
-1530 2432 l
-1432 2432 l
-1429 2432 m
-1530 2432 l
-1530 2433 l
-1429 2433 l
-1427 2433 m
-1530 2433 l
-1530 2434 l
-1427 2434 l
-1427 2434 m
-1531 2434 l
-1531 2436 l
-1427 2436 l
-1427 2436 m
-1532 2436 l
-1532 2437 l
-1427 2437 l
-1428 2437 m
-1532 2437 l
-1532 2439 l
-1428 2439 l
-1428 2439 m
-1533 2439 l
-1533 2440 l
-1428 2440 l
-1429 2440 m
-1533 2440 l
-1533 2441 l
-1429 2441 l
-1429 2441 m
-1534 2441 l
-1534 2442 l
-1429 2442 l
-1430 2442 m
-1534 2442 l
-1534 2444 l
-1430 2444 l
-1430 2444 m
-1535 2444 l
-1535 2445 l
-1430 2445 l
-1431 2445 m
-1535 2445 l
-1535 2446 l
-1431 2446 l
-1431 2446 m
-1536 2446 l
-1536 2447 l
-1431 2447 l
-1432 2447 m
-1536 2447 l
-1536 2449 l
-1432 2449 l
-1432 2449 m
-1537 2449 l
-1537 2450 l
-1432 2450 l
-1433 2450 m
-1537 2450 l
-1537 2451 l
-1433 2451 l
-1433 2451 m
-1538 2451 l
-1538 2452 l
-1433 2452 l
-1434 2452 m
-1538 2452 l
-1538 2454 l
-1434 2454 l
-1434 2454 m
-1539 2454 l
-1539 2455 l
-1434 2455 l
-1435 2455 m
-1539 2455 l
-1539 2456 l
-1435 2456 l
-1435 2456 m
-1540 2456 l
-1540 2457 l
-1435 2457 l
-1436 2457 m
-1540 2457 l
-1540 2459 l
-1436 2459 l
-1436 2459 m
-1541 2459 l
-1541 2460 l
-1436 2460 l
-1437 2460 m
-1541 2460 l
-1541 2461 l
-1437 2461 l
-1437 2461 m
-1542 2461 l
-1542 2462 l
-1437 2462 l
-1438 2462 m
-1542 2462 l
-1542 2464 l
-1438 2464 l
-1438 2464 m
-1543 2464 l
-1543 2465 l
-1438 2465 l
-1439 2465 m
-1543 2465 l
-1543 2466 l
-1439 2466 l
-1439 2466 m
-1544 2466 l
-1544 2467 l
-1439 2467 l
-1440 2467 m
-1544 2467 l
-1544 2469 l
-1440 2469 l
-1440 2469 m
-1545 2469 l
-1545 2470 l
-1440 2470 l
-1441 2470 m
-1545 2470 l
-1545 2471 l
-1441 2471 l
-1441 2471 m
-1546 2471 l
-1546 2472 l
-1441 2472 l
-1442 2472 m
-1546 2472 l
-1546 2474 l
-1442 2474 l
-1442 2474 m
-1547 2474 l
-1547 2475 l
-1442 2475 l
-1443 2475 m
-1547 2475 l
-1547 2476 l
-1443 2476 l
-1443 2476 m
-1548 2476 l
-1548 2477 l
-1443 2477 l
-1444 2477 m
-1548 2477 l
-1548 2479 l
-1444 2479 l
-1444 2479 m
-1549 2479 l
-1549 2480 l
-1444 2480 l
-1445 2480 m
-1549 2480 l
-1549 2481 l
-1445 2481 l
-1445 2481 m
-1550 2481 l
-1550 2482 l
-1445 2482 l
-1446 2482 m
-1550 2482 l
-1550 2484 l
-1446 2484 l
-1446 2484 m
-1551 2484 l
-1551 2485 l
-1446 2485 l
-1447 2485 m
-1551 2485 l
-1551 2486 l
-1447 2486 l
-1447 2486 m
-1552 2486 l
-1552 2487 l
-1447 2487 l
-1448 2487 m
-1552 2487 l
-1552 2489 l
-1448 2489 l
-1448 2489 m
-1553 2489 l
-1553 2490 l
-1448 2490 l
-1449 2490 m
-1553 2490 l
-1553 2491 l
-1449 2491 l
-1449 2491 m
-1554 2491 l
-1554 2492 l
-1449 2492 l
-1450 2492 m
-1554 2492 l
-1554 2494 l
-1450 2494 l
-1450 2494 m
-1555 2494 l
-1555 2495 l
-1450 2495 l
-1451 2495 m
-1555 2495 l
-1555 2496 l
-1451 2496 l
-1451 2496 m
-1556 2496 l
-1556 2497 l
-1451 2497 l
-1452 2497 m
-1556 2497 l
-1556 2499 l
-1452 2499 l
-1452 2499 m
-1557 2499 l
-1557 2500 l
-1452 2500 l
-1453 2500 m
-1557 2500 l
-1557 2501 l
-1453 2501 l
-1453 2501 m
-1558 2501 l
-1558 2502 l
-1453 2502 l
-1454 2502 m
-1558 2502 l
-1558 2504 l
-1454 2504 l
-1454 2504 m
-1559 2504 l
-1559 2505 l
-1454 2505 l
-1455 2505 m
-1559 2505 l
-1559 2506 l
-1455 2506 l
-1455 2506 m
-1560 2506 l
-1560 2507 l
-1455 2507 l
-1456 2507 m
-1560 2507 l
-1560 2509 l
-1456 2509 l
-1456 2509 m
-1561 2509 l
-1561 2510 l
-1456 2510 l
-1457 2510 m
-1561 2510 l
-1561 2511 l
-1457 2511 l
-1457 2511 m
-1561 2511 l
-1561 2512 l
-1457 2512 l
-1458 2512 m
-1559 2512 l
-1559 2513 l
-1458 2513 l
-1458 2513 m
-1556 2513 l
-1556 2514 l
-1458 2514 l
-1458 2514 m
-1554 2514 l
-1554 2515 l
-1458 2515 l
-1459 2515 m
-1551 2515 l
-1551 2516 l
-1459 2516 l
-1459 2516 m
-1549 2516 l
-1549 2517 l
-1459 2517 l
-1460 2517 m
-1546 2517 l
-1546 2518 l
-1460 2518 l
-1460 2518 m
-1544 2518 l
-1544 2519 l
-1460 2519 l
-1460 2519 m
-1541 2519 l
-1541 2520 l
-1460 2520 l
-1461 2520 m
-1539 2520 l
-1539 2521 l
-1461 2521 l
-1461 2521 m
-1537 2521 l
-1537 2522 l
-1461 2522 l
-1462 2522 m
-1534 2522 l
-1534 2523 l
-1462 2523 l
-1462 2523 m
-1532 2523 l
-1532 2524 l
-1462 2524 l
-1462 2524 m
-1529 2524 l
-1529 2525 l
-1462 2525 l
-1463 2525 m
-1527 2525 l
-1527 2526 l
-1463 2526 l
-1463 2526 m
-1524 2526 l
-1524 2527 l
-1463 2527 l
-1464 2527 m
-1522 2527 l
-1522 2528 l
-1464 2528 l
-1464 2528 m
-1519 2528 l
-1519 2529 l
-1464 2529 l
-1464 2529 m
-1517 2529 l
-1517 2530 l
-1464 2530 l
-1465 2530 m
-1514 2530 l
-1514 2531 l
-1465 2531 l
-1465 2531 m
-1512 2531 l
-1512 2532 l
-1465 2532 l
-1466 2532 m
-1509 2532 l
-1509 2533 l
-1466 2533 l
-1466 2533 m
-1507 2533 l
-1507 2534 l
-1466 2534 l
-1466 2534 m
-1505 2534 l
-1505 2535 l
-1466 2535 l
-1467 2535 m
-1502 2535 l
-1502 2536 l
-1467 2536 l
-1467 2536 m
-1500 2536 l
-1500 2537 l
-1467 2537 l
-1468 2537 m
-1497 2537 l
-1497 2538 l
-1468 2538 l
-1468 2538 m
-1495 2538 l
-1495 2539 l
-1468 2539 l
-1468 2539 m
-1492 2539 l
-1492 2540 l
-1468 2540 l
-1469 2540 m
-1490 2540 l
-1490 2541 l
-1469 2541 l
-1469 2541 m
-1487 2541 l
-1487 2542 l
-1469 2542 l
-1470 2542 m
-1485 2542 l
-1485 2543 l
-1470 2543 l
-1470 2543 m
-1482 2543 l
-1482 2544 l
-1470 2544 l
-1470 2544 m
-1480 2544 l
-1480 2545 l
-1470 2545 l
-1471 2545 m
-1477 2545 l
-1477 2546 l
-1471 2546 l
-1471 2546 m
-1475 2546 l
-1475 2547 l
-1471 2547 l
-Y
-1560.7 2511 m
-1516 2399 l
-1427 2434 l
-1472 2547 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1461 2452 m
-1462 2443 l
-1472 2434 l
-1479 2431 l
-1493 2430 l
-1505 2439 l
-1517 2457 l
-1524 2476 l
-1527 2493 l
-1522 2504 l
-1512 2513 l
-1508 2514 l
-1495 2515 l
-1484 2510 l
-1475 2500 l
-1474 2496 l
-1473 2483 l
-1478 2472 l
-1488 2464 l
-1492 2462 l
-1505 2461 l
-1516 2466 l
-1524 2476 l
-S
-1 g
-721 2958 m
-724 2958 l
-724 2959 l
-721 2959 l
-720 2959 m
-725 2959 l
-725 2960 l
-720 2960 l
-719 2960 m
-726 2960 l
-726 2961 l
-719 2961 l
-718 2961 m
-728 2961 l
-728 2962 l
-718 2962 l
-718 2962 m
-729 2962 l
-729 2963 l
-718 2963 l
-717 2963 m
-730 2963 l
-730 2964 l
-717 2964 l
-716 2964 m
-731 2964 l
-731 2965 l
-716 2965 l
-715 2965 m
-733 2965 l
-733 2966 l
-715 2966 l
-714 2966 m
-734 2966 l
-734 2967 l
-714 2967 l
-714 2967 m
-735 2967 l
-735 2968 l
-714 2968 l
-713 2968 m
-737 2968 l
-737 2969 l
-713 2969 l
-712 2969 m
-738 2969 l
-738 2970 l
-712 2970 l
-711 2970 m
-739 2970 l
-739 2971 l
-711 2971 l
-710 2971 m
-740 2971 l
-740 2972 l
-710 2972 l
-710 2972 m
-742 2972 l
-742 2973 l
-710 2973 l
-709 2973 m
-743 2973 l
-743 2974 l
-709 2974 l
-708 2974 m
-744 2974 l
-744 2975 l
-708 2975 l
-707 2975 m
-746 2975 l
-746 2976 l
-707 2976 l
-706 2976 m
-747 2976 l
-747 2977 l
-706 2977 l
-706 2977 m
-748 2977 l
-748 2978 l
-706 2978 l
-705 2978 m
-749 2978 l
-749 2979 l
-705 2979 l
-704 2979 m
-751 2979 l
-751 2980 l
-704 2980 l
-703 2980 m
-752 2980 l
-752 2981 l
-703 2981 l
-702 2981 m
-753 2981 l
-753 2982 l
-702 2982 l
-702 2982 m
-754 2982 l
-754 2983 l
-702 2983 l
-701 2983 m
-756 2983 l
-756 2984 l
-701 2984 l
-700 2984 m
-757 2984 l
-757 2985 l
-700 2985 l
-699 2985 m
-758 2985 l
-758 2986 l
-699 2986 l
-698 2986 m
-760 2986 l
-760 2987 l
-698 2987 l
-698 2987 m
-761 2987 l
-761 2988 l
-698 2988 l
-697 2988 m
-762 2988 l
-762 2989 l
-697 2989 l
-696 2989 m
-763 2989 l
-763 2990 l
-696 2990 l
-695 2990 m
-765 2990 l
-765 2991 l
-695 2991 l
-694 2991 m
-766 2991 l
-766 2992 l
-694 2992 l
-694 2992 m
-767 2992 l
-767 2993 l
-694 2993 l
-693 2993 m
-769 2993 l
-769 2994 l
-693 2994 l
-692 2994 m
-770 2994 l
-770 2995 l
-692 2995 l
-691 2995 m
-771 2995 l
-771 2996 l
-691 2996 l
-691 2996 m
-772 2996 l
-772 2997 l
-691 2997 l
-690 2997 m
-774 2997 l
-774 2998 l
-690 2998 l
-689 2998 m
-775 2998 l
-775 2999 l
-689 2999 l
-688 2999 m
-776 2999 l
-776 3000 l
-688 3000 l
-687 3000 m
-778 3000 l
-778 3001 l
-687 3001 l
-687 3001 m
-779 3001 l
-779 3002 l
-687 3002 l
-686 3002 m
-780 3002 l
-780 3003 l
-686 3003 l
-685 3003 m
-781 3003 l
-781 3004 l
-685 3004 l
-684 3004 m
-783 3004 l
-783 3005 l
-684 3005 l
-683 3005 m
-784 3005 l
-784 3006 l
-683 3006 l
-683 3006 m
-785 3006 l
-785 3007 l
-683 3007 l
-682 3007 m
-786 3007 l
-786 3008 l
-682 3008 l
-681 3008 m
-788 3008 l
-788 3009 l
-681 3009 l
-680 3009 m
-789 3009 l
-789 3010 l
-680 3010 l
-679 3010 m
-790 3010 l
-790 3011 l
-679 3011 l
-679 3011 m
-792 3011 l
-792 3012 l
-679 3012 l
-678 3012 m
-793 3012 l
-793 3013 l
-678 3013 l
-677 3013 m
-794 3013 l
-794 3014 l
-677 3014 l
-676 3014 m
-795 3014 l
-795 3015 l
-676 3015 l
-675 3015 m
-797 3015 l
-797 3016 l
-675 3016 l
-675 3016 m
-798 3016 l
-798 3017 l
-675 3017 l
-674 3017 m
-799 3017 l
-799 3018 l
-674 3018 l
-673 3018 m
-801 3018 l
-801 3019 l
-673 3019 l
-672 3019 m
-802 3019 l
-802 3020 l
-672 3020 l
-671 3020 m
-803 3020 l
-803 3021 l
-671 3021 l
-671 3021 m
-804 3021 l
-804 3022 l
-671 3022 l
-670 3022 m
-806 3022 l
-806 3023 l
-670 3023 l
-669 3023 m
-807 3023 l
-807 3024 l
-669 3024 l
-668 3024 m
-808 3024 l
-808 3025 l
-668 3025 l
-667 3025 m
-809 3025 l
-809 3026 l
-667 3026 l
-667 3026 m
-811 3026 l
-811 3027 l
-667 3027 l
-666 3027 m
-812 3027 l
-812 3028 l
-666 3028 l
-665 3028 m
-813 3028 l
-813 3029 l
-665 3029 l
-664 3029 m
-815 3029 l
-815 3030 l
-664 3030 l
-663 3030 m
-816 3030 l
-816 3031 l
-663 3031 l
-663 3031 m
-817 3031 l
-817 3032 l
-663 3032 l
-662 3032 m
-818 3032 l
-818 3033 l
-662 3033 l
-661 3033 m
-817 3033 l
-817 3034 l
-661 3034 l
-660 3034 m
-817 3034 l
-817 3035 l
-660 3035 l
-660 3035 m
-816 3035 l
-816 3036 l
-660 3036 l
-660 3036 m
-815 3036 l
-815 3037 l
-660 3037 l
-661 3037 m
-814 3037 l
-814 3038 l
-661 3038 l
-662 3038 m
-813 3038 l
-813 3039 l
-662 3039 l
-663 3039 m
-813 3039 l
-813 3040 l
-663 3040 l
-665 3040 m
-812 3040 l
-812 3041 l
-665 3041 l
-666 3041 m
-811 3041 l
-811 3042 l
-666 3042 l
-667 3042 m
-810 3042 l
-810 3043 l
-667 3043 l
-668 3043 m
-809 3043 l
-809 3044 l
-668 3044 l
-670 3044 m
-809 3044 l
-809 3045 l
-670 3045 l
-671 3045 m
-808 3045 l
-808 3046 l
-671 3046 l
-672 3046 m
-807 3046 l
-807 3047 l
-672 3047 l
-673 3047 m
-806 3047 l
-806 3048 l
-673 3048 l
-675 3048 m
-805 3048 l
-805 3049 l
-675 3049 l
-676 3049 m
-805 3049 l
-805 3050 l
-676 3050 l
-677 3050 m
-804 3050 l
-804 3051 l
-677 3051 l
-679 3051 m
-803 3051 l
-803 3052 l
-679 3052 l
-680 3052 m
-802 3052 l
-802 3053 l
-680 3053 l
-681 3053 m
-802 3053 l
-802 3054 l
-681 3054 l
-682 3054 m
-801 3054 l
-801 3055 l
-682 3055 l
-684 3055 m
-800 3055 l
-800 3056 l
-684 3056 l
-685 3056 m
-799 3056 l
-799 3057 l
-685 3057 l
-686 3057 m
-798 3057 l
-798 3058 l
-686 3058 l
-687 3058 m
-798 3058 l
-798 3059 l
-687 3059 l
-689 3059 m
-797 3059 l
-797 3060 l
-689 3060 l
-690 3060 m
-796 3060 l
-796 3061 l
-690 3061 l
-691 3061 m
-795 3061 l
-795 3062 l
-691 3062 l
-692 3062 m
-794 3062 l
-794 3063 l
-692 3063 l
-694 3063 m
-794 3063 l
-794 3064 l
-694 3064 l
-695 3064 m
-793 3064 l
-793 3065 l
-695 3065 l
-696 3065 m
-792 3065 l
-792 3066 l
-696 3066 l
-698 3066 m
-791 3066 l
-791 3067 l
-698 3067 l
-699 3067 m
-790 3067 l
-790 3068 l
-699 3068 l
-700 3068 m
-790 3068 l
-790 3069 l
-700 3069 l
-701 3069 m
-789 3069 l
-789 3070 l
-701 3070 l
-703 3070 m
-788 3070 l
-788 3071 l
-703 3071 l
-704 3071 m
-787 3071 l
-787 3072 l
-704 3072 l
-705 3072 m
-786 3072 l
-786 3073 l
-705 3073 l
-706 3073 m
-786 3073 l
-786 3074 l
-706 3074 l
-708 3074 m
-785 3074 l
-785 3075 l
-708 3075 l
-709 3075 m
-784 3075 l
-784 3076 l
-709 3076 l
-710 3076 m
-783 3076 l
-783 3077 l
-710 3077 l
-711 3077 m
-782 3077 l
-782 3078 l
-711 3078 l
-713 3078 m
-782 3078 l
-782 3079 l
-713 3079 l
-714 3079 m
-781 3079 l
-781 3080 l
-714 3080 l
-715 3080 m
-780 3080 l
-780 3081 l
-715 3081 l
-717 3081 m
-779 3081 l
-779 3082 l
-717 3082 l
-718 3082 m
-779 3082 l
-779 3083 l
-718 3083 l
-719 3083 m
-778 3083 l
-778 3084 l
-719 3084 l
-720 3084 m
-777 3084 l
-777 3085 l
-720 3085 l
-722 3085 m
-776 3085 l
-776 3086 l
-722 3086 l
-723 3086 m
-775 3086 l
-775 3087 l
-723 3087 l
-724 3087 m
-775 3087 l
-775 3088 l
-724 3088 l
-725 3088 m
-774 3088 l
-774 3089 l
-725 3089 l
-727 3089 m
-773 3089 l
-773 3090 l
-727 3090 l
-728 3090 m
-772 3090 l
-772 3091 l
-728 3091 l
-729 3091 m
-771 3091 l
-771 3092 l
-729 3092 l
-730 3092 m
-771 3092 l
-771 3093 l
-730 3093 l
-732 3093 m
-770 3093 l
-770 3094 l
-732 3094 l
-733 3094 m
-769 3094 l
-769 3095 l
-733 3095 l
-734 3095 m
-768 3095 l
-768 3096 l
-734 3096 l
-736 3096 m
-767 3096 l
-767 3097 l
-736 3097 l
-737 3097 m
-767 3097 l
-767 3098 l
-737 3098 l
-738 3098 m
-766 3098 l
-766 3099 l
-738 3099 l
-739 3099 m
-765 3099 l
-765 3100 l
-739 3100 l
-741 3100 m
-764 3100 l
-764 3101 l
-741 3101 l
-742 3101 m
-763 3101 l
-763 3102 l
-742 3102 l
-743 3102 m
-763 3102 l
-763 3103 l
-743 3103 l
-744 3103 m
-762 3103 l
-762 3104 l
-744 3104 l
-746 3104 m
-761 3104 l
-761 3105 l
-746 3105 l
-747 3105 m
-760 3105 l
-760 3106 l
-747 3106 l
-748 3106 m
-759 3106 l
-759 3107 l
-748 3107 l
-749 3107 m
-759 3107 l
-759 3108 l
-749 3108 l
-751 3108 m
-758 3108 l
-758 3109 l
-751 3109 l
-752 3109 m
-757 3109 l
-757 3110 l
-752 3110 l
-753 3110 m
-756 3110 l
-756 3111 l
-753 3111 l
-Y
-817.3 3032.5 m
-722 2958 l
-660 3036 l
-755 3111 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-709 3001 m
-720 2993 l
-730 2995 l
-736 3000 l
-740 3009 l
-738 3018 l
-731 3034 l
-727 3046 l
-728 3058 l
-732 3066 l
-742 3074 l
-751 3076 l
-757 3075 l
-768 3068 l
-778 3055 l
-783 3043 l
-782 3037 l
-778 3028 l
-768 3020 l
-759 3019 l
-747 3020 l
-736 3027 l
-723 3038 l
-714 3042 l
-705 3040 l
-699 3035 l
-695 3026 l
-699 3014 l
-709 3001 l
-S
-1 g
-1009 5498 m
-1013 5498 l
-1013 5499 l
-1009 5499 l
-1008 5499 m
-1014 5499 l
-1014 5500 l
-1008 5500 l
-1007 5500 m
-1015 5500 l
-1015 5501 l
-1007 5501 l
-1006 5501 m
-1017 5501 l
-1017 5502 l
-1006 5502 l
-1006 5502 m
-1018 5502 l
-1018 5503 l
-1006 5503 l
-1005 5503 m
-1019 5503 l
-1019 5504 l
-1005 5504 l
-1004 5504 m
-1020 5504 l
-1020 5505 l
-1004 5505 l
-1003 5505 m
-1022 5505 l
-1022 5506 l
-1003 5506 l
-1002 5506 m
-1023 5506 l
-1023 5507 l
-1002 5507 l
-1002 5507 m
-1024 5507 l
-1024 5508 l
-1002 5508 l
-1001 5508 m
-1025 5508 l
-1025 5509 l
-1001 5509 l
-1000 5509 m
-1027 5509 l
-1027 5510 l
-1000 5510 l
-999 5510 m
-1028 5510 l
-1028 5511 l
-999 5511 l
-998 5511 m
-1029 5511 l
-1029 5512 l
-998 5512 l
-998 5512 m
-1030 5512 l
-1030 5513 l
-998 5513 l
-997 5513 m
-1032 5513 l
-1032 5514 l
-997 5514 l
-996 5514 m
-1033 5514 l
-1033 5515 l
-996 5515 l
-995 5515 m
-1034 5515 l
-1034 5516 l
-995 5516 l
-994 5516 m
-1035 5516 l
-1035 5517 l
-994 5517 l
-994 5517 m
-1037 5517 l
-1037 5518 l
-994 5518 l
-993 5518 m
-1038 5518 l
-1038 5519 l
-993 5519 l
-992 5519 m
-1039 5519 l
-1039 5520 l
-992 5520 l
-991 5520 m
-1040 5520 l
-1040 5521 l
-991 5521 l
-990 5521 m
-1042 5521 l
-1042 5522 l
-990 5522 l
-990 5522 m
-1043 5522 l
-1043 5523 l
-990 5523 l
-989 5523 m
-1044 5523 l
-1044 5524 l
-989 5524 l
-988 5524 m
-1045 5524 l
-1045 5525 l
-988 5525 l
-987 5525 m
-1047 5525 l
-1047 5526 l
-987 5526 l
-986 5526 m
-1048 5526 l
-1048 5527 l
-986 5527 l
-986 5527 m
-1049 5527 l
-1049 5528 l
-986 5528 l
-985 5528 m
-1050 5528 l
-1050 5529 l
-985 5529 l
-984 5529 m
-1052 5529 l
-1052 5530 l
-984 5530 l
-983 5530 m
-1053 5530 l
-1053 5531 l
-983 5531 l
-982 5531 m
-1054 5531 l
-1054 5532 l
-982 5532 l
-982 5532 m
-1055 5532 l
-1055 5533 l
-982 5533 l
-981 5533 m
-1057 5533 l
-1057 5534 l
-981 5534 l
-980 5534 m
-1058 5534 l
-1058 5535 l
-980 5535 l
-979 5535 m
-1059 5535 l
-1059 5536 l
-979 5536 l
-978 5536 m
-1061 5536 l
-1061 5537 l
-978 5537 l
-978 5537 m
-1062 5537 l
-1062 5538 l
-978 5538 l
-977 5538 m
-1063 5538 l
-1063 5539 l
-977 5539 l
-976 5539 m
-1064 5539 l
-1064 5540 l
-976 5540 l
-975 5540 m
-1066 5540 l
-1066 5541 l
-975 5541 l
-974 5541 m
-1067 5541 l
-1067 5542 l
-974 5542 l
-974 5542 m
-1068 5542 l
-1068 5543 l
-974 5543 l
-973 5543 m
-1069 5543 l
-1069 5544 l
-973 5544 l
-972 5544 m
-1071 5544 l
-1071 5545 l
-972 5545 l
-971 5545 m
-1072 5545 l
-1072 5546 l
-971 5546 l
-970 5546 m
-1073 5546 l
-1073 5547 l
-970 5547 l
-970 5547 m
-1074 5547 l
-1074 5548 l
-970 5548 l
-969 5548 m
-1076 5548 l
-1076 5549 l
-969 5549 l
-968 5549 m
-1077 5549 l
-1077 5550 l
-968 5550 l
-967 5550 m
-1078 5550 l
-1078 5551 l
-967 5551 l
-966 5551 m
-1079 5551 l
-1079 5552 l
-966 5552 l
-966 5552 m
-1081 5552 l
-1081 5553 l
-966 5553 l
-965 5553 m
-1082 5553 l
-1082 5554 l
-965 5554 l
-964 5554 m
-1083 5554 l
-1083 5555 l
-964 5555 l
-963 5555 m
-1084 5555 l
-1084 5556 l
-963 5556 l
-962 5556 m
-1086 5556 l
-1086 5557 l
-962 5557 l
-962 5557 m
-1087 5557 l
-1087 5558 l
-962 5558 l
-961 5558 m
-1088 5558 l
-1088 5559 l
-961 5559 l
-960 5559 m
-1089 5559 l
-1089 5560 l
-960 5560 l
-959 5560 m
-1091 5560 l
-1091 5561 l
-959 5561 l
-958 5561 m
-1092 5561 l
-1092 5562 l
-958 5562 l
-958 5562 m
-1093 5562 l
-1093 5563 l
-958 5563 l
-957 5563 m
-1094 5563 l
-1094 5564 l
-957 5564 l
-956 5564 m
-1096 5564 l
-1096 5565 l
-956 5565 l
-955 5565 m
-1097 5565 l
-1097 5566 l
-955 5566 l
-954 5566 m
-1098 5566 l
-1098 5567 l
-954 5567 l
-954 5567 m
-1099 5567 l
-1099 5568 l
-954 5568 l
-953 5568 m
-1101 5568 l
-1101 5569 l
-953 5569 l
-952 5569 m
-1102 5569 l
-1102 5570 l
-952 5570 l
-951 5570 m
-1103 5570 l
-1103 5571 l
-951 5571 l
-950 5571 m
-1105 5571 l
-1105 5572 l
-950 5572 l
-950 5572 m
-1106 5572 l
-1106 5573 l
-950 5573 l
-949 5573 m
-1107 5573 l
-1107 5574 l
-949 5574 l
-948 5574 m
-1108 5574 l
-1108 5575 l
-948 5575 l
-947 5575 m
-1110 5575 l
-1110 5576 l
-947 5576 l
-946 5576 m
-1111 5576 l
-1111 5577 l
-946 5577 l
-946 5577 m
-1112 5577 l
-1112 5578 l
-946 5578 l
-945 5578 m
-1113 5578 l
-1113 5579 l
-945 5579 l
-944 5579 m
-1115 5579 l
-1115 5580 l
-944 5580 l
-943 5580 m
-1116 5580 l
-1116 5581 l
-943 5581 l
-942 5581 m
-1117 5581 l
-1117 5582 l
-942 5582 l
-942 5582 m
-1118 5582 l
-1118 5583 l
-942 5583 l
-941 5583 m
-1120 5583 l
-1120 5584 l
-941 5584 l
-940 5584 m
-1121 5584 l
-1121 5585 l
-940 5585 l
-939 5585 m
-1122 5585 l
-1122 5586 l
-939 5586 l
-938 5586 m
-1123 5586 l
-1123 5587 l
-938 5587 l
-938 5587 m
-1125 5587 l
-1125 5588 l
-938 5588 l
-937 5588 m
-1126 5588 l
-1126 5589 l
-937 5589 l
-936 5589 m
-1127 5589 l
-1127 5590 l
-936 5590 l
-935 5590 m
-1128 5590 l
-1128 5591 l
-935 5591 l
-935 5591 m
-1130 5591 l
-1130 5592 l
-935 5592 l
-935 5592 m
-1131 5592 l
-1131 5593 l
-935 5593 l
-936 5593 m
-1132 5593 l
-1132 5594 l
-936 5594 l
-937 5594 m
-1133 5594 l
-1133 5595 l
-937 5595 l
-938 5595 m
-1135 5595 l
-1135 5596 l
-938 5596 l
-939 5596 m
-1136 5596 l
-1136 5597 l
-939 5597 l
-941 5597 m
-1137 5597 l
-1137 5598 l
-941 5598 l
-942 5598 m
-1138 5598 l
-1138 5599 l
-942 5599 l
-943 5599 m
-1140 5599 l
-1140 5600 l
-943 5600 l
-944 5600 m
-1141 5600 l
-1141 5601 l
-944 5601 l
-946 5601 m
-1142 5601 l
-1142 5602 l
-946 5602 l
-947 5602 m
-1143 5602 l
-1143 5603 l
-947 5603 l
-948 5603 m
-1145 5603 l
-1145 5604 l
-948 5604 l
-949 5604 m
-1146 5604 l
-1146 5605 l
-949 5605 l
-951 5605 m
-1147 5605 l
-1147 5606 l
-951 5606 l
-952 5606 m
-1148 5606 l
-1148 5607 l
-952 5607 l
-953 5607 m
-1148 5607 l
-1148 5608 l
-953 5608 l
-954 5608 m
-1148 5608 l
-1148 5609 l
-954 5609 l
-956 5609 m
-1147 5609 l
-1147 5610 l
-956 5610 l
-957 5610 m
-1146 5610 l
-1146 5611 l
-957 5611 l
-958 5611 m
-1145 5611 l
-1145 5612 l
-958 5612 l
-959 5612 m
-1144 5612 l
-1144 5613 l
-959 5613 l
-961 5613 m
-1144 5613 l
-1144 5614 l
-961 5614 l
-962 5614 m
-1143 5614 l
-1143 5615 l
-962 5615 l
-963 5615 m
-1142 5615 l
-1142 5616 l
-963 5616 l
-964 5616 m
-1141 5616 l
-1141 5617 l
-964 5617 l
-966 5617 m
-1140 5617 l
-1140 5618 l
-966 5618 l
-967 5618 m
-1140 5618 l
-1140 5619 l
-967 5619 l
-968 5619 m
-1139 5619 l
-1139 5620 l
-968 5620 l
-969 5620 m
-1138 5620 l
-1138 5621 l
-969 5621 l
-971 5621 m
-1137 5621 l
-1137 5622 l
-971 5622 l
-972 5622 m
-1136 5622 l
-1136 5623 l
-972 5623 l
-973 5623 m
-1136 5623 l
-1136 5624 l
-973 5624 l
-974 5624 m
-1135 5624 l
-1135 5625 l
-974 5625 l
-976 5625 m
-1134 5625 l
-1134 5626 l
-976 5626 l
-977 5626 m
-1133 5626 l
-1133 5627 l
-977 5627 l
-978 5627 m
-1132 5627 l
-1132 5628 l
-978 5628 l
-979 5628 m
-1132 5628 l
-1132 5629 l
-979 5629 l
-981 5629 m
-1131 5629 l
-1131 5630 l
-981 5630 l
-982 5630 m
-1130 5630 l
-1130 5631 l
-982 5631 l
-983 5631 m
-1129 5631 l
-1129 5632 l
-983 5632 l
-984 5632 m
-1128 5632 l
-1128 5633 l
-984 5633 l
-986 5633 m
-1128 5633 l
-1128 5634 l
-986 5634 l
-987 5634 m
-1127 5634 l
-1127 5635 l
-987 5635 l
-988 5635 m
-1126 5635 l
-1126 5636 l
-988 5636 l
-989 5636 m
-1125 5636 l
-1125 5637 l
-989 5637 l
-991 5637 m
-1124 5637 l
-1124 5638 l
-991 5638 l
-992 5638 m
-1124 5638 l
-1124 5639 l
-992 5639 l
-993 5639 m
-1123 5639 l
-1123 5640 l
-993 5640 l
-994 5640 m
-1122 5640 l
-1122 5641 l
-994 5641 l
-996 5641 m
-1121 5641 l
-1121 5642 l
-996 5642 l
-997 5642 m
-1120 5642 l
-1120 5643 l
-997 5643 l
-998 5643 m
-1120 5643 l
-1120 5644 l
-998 5644 l
-999 5644 m
-1119 5644 l
-1119 5645 l
-999 5645 l
-1001 5645 m
-1118 5645 l
-1118 5646 l
-1001 5646 l
-1002 5646 m
-1117 5646 l
-1117 5647 l
-1002 5647 l
-1003 5647 m
-1116 5647 l
-1116 5648 l
-1003 5648 l
-1004 5648 m
-1116 5648 l
-1116 5649 l
-1004 5649 l
-1005 5649 m
-1115 5649 l
-1115 5650 l
-1005 5650 l
-1007 5650 m
-1114 5650 l
-1114 5651 l
-1007 5651 l
-1008 5651 m
-1113 5651 l
-1113 5652 l
-1008 5652 l
-1009 5652 m
-1112 5652 l
-1112 5653 l
-1009 5653 l
-1010 5653 m
-1112 5653 l
-1112 5654 l
-1010 5654 l
-1012 5654 m
-1111 5654 l
-1111 5655 l
-1012 5655 l
-1013 5655 m
-1110 5655 l
-1110 5656 l
-1013 5656 l
-1014 5656 m
-1109 5656 l
-1109 5657 l
-1014 5657 l
-1015 5657 m
-1108 5657 l
-1108 5658 l
-1015 5658 l
-1017 5658 m
-1108 5658 l
-1108 5659 l
-1017 5659 l
-1018 5659 m
-1107 5659 l
-1107 5660 l
-1018 5660 l
-1019 5660 m
-1106 5660 l
-1106 5661 l
-1019 5661 l
-1020 5661 m
-1105 5661 l
-1105 5662 l
-1020 5662 l
-1022 5662 m
-1104 5662 l
-1104 5663 l
-1022 5663 l
-1023 5663 m
-1104 5663 l
-1104 5664 l
-1023 5664 l
-1024 5664 m
-1103 5664 l
-1103 5665 l
-1024 5665 l
-1025 5665 m
-1102 5665 l
-1102 5666 l
-1025 5666 l
-1027 5666 m
-1101 5666 l
-1101 5667 l
-1027 5667 l
-1028 5667 m
-1100 5667 l
-1100 5668 l
-1028 5668 l
-1029 5668 m
-1100 5668 l
-1100 5669 l
-1029 5669 l
-1030 5669 m
-1099 5669 l
-1099 5670 l
-1030 5670 l
-1032 5670 m
-1098 5670 l
-1098 5671 l
-1032 5671 l
-1033 5671 m
-1097 5671 l
-1097 5672 l
-1033 5672 l
-1034 5672 m
-1096 5672 l
-1096 5673 l
-1034 5673 l
-1035 5673 m
-1096 5673 l
-1096 5674 l
-1035 5674 l
-1037 5674 m
-1095 5674 l
-1095 5675 l
-1037 5675 l
-1038 5675 m
-1094 5675 l
-1094 5676 l
-1038 5676 l
-1039 5676 m
-1093 5676 l
-1093 5677 l
-1039 5677 l
-1040 5677 m
-1092 5677 l
-1092 5678 l
-1040 5678 l
-1042 5678 m
-1092 5678 l
-1092 5679 l
-1042 5679 l
-1043 5679 m
-1091 5679 l
-1091 5680 l
-1043 5680 l
-1044 5680 m
-1090 5680 l
-1090 5681 l
-1044 5681 l
-1045 5681 m
-1089 5681 l
-1089 5682 l
-1045 5682 l
-1047 5682 m
-1088 5682 l
-1088 5683 l
-1047 5683 l
-1048 5683 m
-1088 5683 l
-1088 5684 l
-1048 5684 l
-1049 5684 m
-1087 5684 l
-1087 5685 l
-1049 5685 l
-1050 5685 m
-1086 5685 l
-1086 5686 l
-1050 5686 l
-1052 5686 m
-1085 5686 l
-1085 5687 l
-1052 5687 l
-1053 5687 m
-1084 5687 l
-1084 5688 l
-1053 5688 l
-1054 5688 m
-1084 5688 l
-1084 5689 l
-1054 5689 l
-1055 5689 m
-1083 5689 l
-1083 5690 l
-1055 5690 l
-1057 5690 m
-1082 5690 l
-1082 5691 l
-1057 5691 l
-1058 5691 m
-1081 5691 l
-1081 5692 l
-1058 5692 l
-1059 5692 m
-1080 5692 l
-1080 5693 l
-1059 5693 l
-1060 5693 m
-1080 5693 l
-1080 5694 l
-1060 5694 l
-1062 5694 m
-1079 5694 l
-1079 5695 l
-1062 5695 l
-1063 5695 m
-1078 5695 l
-1078 5696 l
-1063 5696 l
-1064 5696 m
-1077 5696 l
-1077 5697 l
-1064 5697 l
-1065 5697 m
-1076 5697 l
-1076 5698 l
-1065 5698 l
-1067 5698 m
-1076 5698 l
-1076 5699 l
-1067 5699 l
-1068 5699 m
-1075 5699 l
-1075 5700 l
-1068 5700 l
-1069 5700 m
-1074 5700 l
-1074 5701 l
-1069 5701 l
-1070 5701 m
-1073 5701 l
-1073 5702 l
-1070 5702 l
-Y
-1010.5 5497.6 m
-935 5592 l
-1072 5702 l
-1148 5607 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-972 5579 m
-976 5588 l
-978 5605 l
-1033 5537 l
-S
-1050 5663 m
-1054 5591 l
-1103 5630 l
-S
-1050 5663 m
-1105 5594 l
-S
-1 g
-1830 5898 m
-1841 5898 l
-1841 5899 l
-1830 5899 l
-1830 5899 m
-1847 5899 l
-1847 5900 l
-1830 5900 l
-1830 5900 m
-1854 5900 l
-1854 5901 l
-1830 5901 l
-1830 5901 m
-1861 5901 l
-1861 5902 l
-1830 5902 l
-1829 5902 m
-1867 5902 l
-1867 5903 l
-1829 5903 l
-1829 5903 m
-1874 5903 l
-1874 5904 l
-1829 5904 l
-1829 5904 m
-1881 5904 l
-1881 5905 l
-1829 5905 l
-1829 5905 m
-1887 5905 l
-1887 5906 l
-1829 5906 l
-1829 5906 m
-1894 5906 l
-1894 5907 l
-1829 5907 l
-1829 5907 m
-1901 5907 l
-1901 5908 l
-1829 5908 l
-1829 5908 m
-1907 5908 l
-1907 5909 l
-1829 5909 l
-1828 5909 m
-1914 5909 l
-1914 5910 l
-1828 5910 l
-1828 5910 m
-1921 5910 l
-1921 5911 l
-1828 5911 l
-1828 5911 m
-1927 5911 l
-1927 5912 l
-1828 5912 l
-1828 5912 m
-1934 5912 l
-1934 5913 l
-1828 5913 l
-1828 5913 m
-1941 5913 l
-1941 5914 l
-1828 5914 l
-1828 5914 m
-1947 5914 l
-1947 5915 l
-1828 5915 l
-1827 5915 m
-1954 5915 l
-1954 5916 l
-1827 5916 l
-1827 5916 m
-1961 5916 l
-1961 5917 l
-1827 5917 l
-1827 5917 m
-1967 5917 l
-1967 5918 l
-1827 5918 l
-1827 5918 m
-1974 5918 l
-1974 5919 l
-1827 5919 l
-1827 5919 m
-1981 5919 l
-1981 5920 l
-1827 5920 l
-1827 5920 m
-1987 5920 l
-1987 5921 l
-1827 5921 l
-1827 5921 m
-1994 5921 l
-1994 5922 l
-1827 5922 l
-1826 5922 m
-2000 5922 l
-2000 5923 l
-1826 5923 l
-1826 5923 m
-2000 5923 l
-2000 5929 l
-1826 5929 l
-1825 5929 m
-2000 5929 l
-2000 5930 l
-1825 5930 l
-1825 5930 m
-1999 5930 l
-1999 5936 l
-1825 5936 l
-1824 5936 m
-1999 5936 l
-1999 5937 l
-1824 5937 l
-1824 5937 m
-1998 5937 l
-1998 5942 l
-1824 5942 l
-1823 5942 m
-1998 5942 l
-1998 5943 l
-1823 5943 l
-1823 5943 m
-1997 5943 l
-1997 5949 l
-1823 5949 l
-1822 5949 m
-1997 5949 l
-1997 5950 l
-1822 5950 l
-1822 5950 m
-1996 5950 l
-1996 5956 l
-1822 5956 l
-1821 5956 m
-1996 5956 l
-1996 5957 l
-1821 5957 l
-1821 5957 m
-1995 5957 l
-1995 5963 l
-1821 5963 l
-1820 5963 m
-1994 5963 l
-1994 5969 l
-1820 5969 l
-1819 5969 m
-1994 5969 l
-1994 5970 l
-1819 5970 l
-1819 5970 m
-1993 5970 l
-1993 5976 l
-1819 5976 l
-1818 5976 m
-1993 5976 l
-1993 5977 l
-1818 5977 l
-1818 5977 m
-1992 5977 l
-1992 5983 l
-1818 5983 l
-1817 5983 m
-1991 5983 l
-1991 5990 l
-1817 5990 l
-1816 5990 m
-1990 5990 l
-1990 5996 l
-1816 5996 l
-1815 5996 m
-1990 5996 l
-1990 5997 l
-1815 5997 l
-1815 5997 m
-1989 5997 l
-1989 6003 l
-1815 6003 l
-1814 6003 m
-1989 6003 l
-1989 6004 l
-1814 6004 l
-1814 6004 m
-1988 6004 l
-1988 6010 l
-1814 6010 l
-1813 6010 m
-1987 6010 l
-1987 6017 l
-1813 6017 l
-1813 6017 m
-1986 6017 l
-1986 6018 l
-1813 6018 l
-1819 6018 m
-1986 6018 l
-1986 6019 l
-1819 6019 l
-1826 6019 m
-1986 6019 l
-1986 6020 l
-1826 6020 l
-1832 6020 m
-1986 6020 l
-1986 6021 l
-1832 6021 l
-1839 6021 m
-1986 6021 l
-1986 6022 l
-1839 6022 l
-1845 6022 m
-1986 6022 l
-1986 6023 l
-1845 6023 l
-1852 6023 m
-1986 6023 l
-1986 6024 l
-1852 6024 l
-1858 6024 m
-1985 6024 l
-1985 6025 l
-1858 6025 l
-1865 6025 m
-1985 6025 l
-1985 6026 l
-1865 6026 l
-1871 6026 m
-1985 6026 l
-1985 6027 l
-1871 6027 l
-1878 6027 m
-1985 6027 l
-1985 6028 l
-1878 6028 l
-1884 6028 m
-1985 6028 l
-1985 6029 l
-1884 6029 l
-1891 6029 m
-1985 6029 l
-1985 6030 l
-1891 6030 l
-1897 6030 m
-1984 6030 l
-1984 6031 l
-1897 6031 l
-1904 6031 m
-1984 6031 l
-1984 6032 l
-1904 6032 l
-1910 6032 m
-1984 6032 l
-1984 6033 l
-1910 6033 l
-1917 6033 m
-1984 6033 l
-1984 6034 l
-1917 6034 l
-1923 6034 m
-1984 6034 l
-1984 6035 l
-1923 6035 l
-1930 6035 m
-1984 6035 l
-1984 6036 l
-1930 6036 l
-1936 6036 m
-1984 6036 l
-1984 6037 l
-1936 6037 l
-1943 6037 m
-1983 6037 l
-1983 6038 l
-1943 6038 l
-1949 6038 m
-1983 6038 l
-1983 6039 l
-1949 6039 l
-1956 6039 m
-1983 6039 l
-1983 6040 l
-1956 6040 l
-1962 6040 m
-1983 6040 l
-1983 6041 l
-1962 6041 l
-1969 6041 m
-1983 6041 l
-1983 6042 l
-1969 6042 l
-1975 6042 m
-1983 6042 l
-1983 6043 l
-1975 6043 l
-Y
-1830.7 5897.6 m
-1813 6017 l
-1982 6043 l
-2000 5923 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1838 5987 m
-1846 5993 l
-1856 6007 l
-1869 5920 l
-S
-1962 6010 m
-1956 6018 l
-1943 6020 l
-1935 6019 l
-1923 6013 l
-1917 5999 l
-1916 5978 l
-1919 5957 l
-1925 5941 l
-1935 5934 l
-1948 5932 l
-1952 5933 l
-1964 5939 l
-1971 5948 l
-1973 5961 l
-1973 5965 l
-1967 5977 l
-1957 5984 l
-1944 5986 l
-1940 5986 l
-1928 5980 l
-1921 5970 l
-1919 5957 l
-S
-1 g
-2892 5791 m
-2896 5791 l
-2896 5792 l
-2892 5792 l
-2889 5792 m
-2896 5792 l
-2896 5793 l
-2889 5793 l
-2887 5793 m
-2897 5793 l
-2897 5794 l
-2887 5794 l
-2884 5794 m
-2897 5794 l
-2897 5795 l
-2884 5795 l
-2882 5795 m
-2897 5795 l
-2897 5796 l
-2882 5796 l
-2879 5796 m
-2898 5796 l
-2898 5797 l
-2879 5797 l
-2877 5797 m
-2898 5797 l
-2898 5798 l
-2877 5798 l
-2874 5798 m
-2899 5798 l
-2899 5799 l
-2874 5799 l
-2872 5799 m
-2899 5799 l
-2899 5800 l
-2872 5800 l
-2869 5800 m
-2899 5800 l
-2899 5801 l
-2869 5801 l
-2867 5801 m
-2900 5801 l
-2900 5802 l
-2867 5802 l
-2864 5802 m
-2900 5802 l
-2900 5803 l
-2864 5803 l
-2861 5803 m
-2901 5803 l
-2901 5804 l
-2861 5804 l
-2859 5804 m
-2901 5804 l
-2901 5805 l
-2859 5805 l
-2856 5805 m
-2901 5805 l
-2901 5806 l
-2856 5806 l
-2854 5806 m
-2902 5806 l
-2902 5807 l
-2854 5807 l
-2851 5807 m
-2902 5807 l
-2902 5808 l
-2851 5808 l
-2849 5808 m
-2903 5808 l
-2903 5809 l
-2849 5809 l
-2846 5809 m
-2903 5809 l
-2903 5810 l
-2846 5810 l
-2844 5810 m
-2903 5810 l
-2903 5811 l
-2844 5811 l
-2841 5811 m
-2904 5811 l
-2904 5812 l
-2841 5812 l
-2839 5812 m
-2904 5812 l
-2904 5813 l
-2839 5813 l
-2836 5813 m
-2904 5813 l
-2904 5814 l
-2836 5814 l
-2834 5814 m
-2905 5814 l
-2905 5815 l
-2834 5815 l
-2831 5815 m
-2905 5815 l
-2905 5816 l
-2831 5816 l
-2828 5816 m
-2906 5816 l
-2906 5817 l
-2828 5817 l
-2826 5817 m
-2906 5817 l
-2906 5818 l
-2826 5818 l
-2823 5818 m
-2906 5818 l
-2906 5819 l
-2823 5819 l
-2821 5819 m
-2907 5819 l
-2907 5820 l
-2821 5820 l
-2818 5820 m
-2907 5820 l
-2907 5821 l
-2818 5821 l
-2816 5821 m
-2908 5821 l
-2908 5822 l
-2816 5822 l
-2813 5822 m
-2908 5822 l
-2908 5823 l
-2813 5823 l
-2811 5823 m
-2908 5823 l
-2908 5824 l
-2811 5824 l
-2808 5824 m
-2909 5824 l
-2909 5825 l
-2808 5825 l
-2806 5825 m
-2909 5825 l
-2909 5826 l
-2806 5826 l
-2803 5826 m
-2910 5826 l
-2910 5827 l
-2803 5827 l
-2801 5827 m
-2910 5827 l
-2910 5828 l
-2801 5828 l
-2798 5828 m
-2910 5828 l
-2910 5829 l
-2798 5829 l
-2795 5829 m
-2911 5829 l
-2911 5830 l
-2795 5830 l
-2793 5830 m
-2911 5830 l
-2911 5831 l
-2793 5831 l
-2790 5831 m
-2911 5831 l
-2911 5832 l
-2790 5832 l
-2788 5832 m
-2912 5832 l
-2912 5833 l
-2788 5833 l
-2785 5833 m
-2912 5833 l
-2912 5834 l
-2785 5834 l
-2783 5834 m
-2913 5834 l
-2913 5835 l
-2783 5835 l
-2780 5835 m
-2913 5835 l
-2913 5836 l
-2780 5836 l
-2778 5836 m
-2913 5836 l
-2913 5837 l
-2778 5837 l
-2775 5837 m
-2914 5837 l
-2914 5838 l
-2775 5838 l
-2773 5838 m
-2914 5838 l
-2914 5839 l
-2773 5839 l
-2770 5839 m
-2915 5839 l
-2915 5840 l
-2770 5840 l
-2768 5840 m
-2915 5840 l
-2915 5841 l
-2768 5841 l
-2765 5841 m
-2915 5841 l
-2915 5842 l
-2765 5842 l
-2762 5842 m
-2916 5842 l
-2916 5843 l
-2762 5843 l
-2760 5843 m
-2916 5843 l
-2916 5844 l
-2760 5844 l
-2757 5844 m
-2917 5844 l
-2917 5845 l
-2757 5845 l
-2755 5845 m
-2917 5845 l
-2917 5846 l
-2755 5846 l
-2752 5846 m
-2917 5846 l
-2917 5847 l
-2752 5847 l
-2750 5847 m
-2918 5847 l
-2918 5848 l
-2750 5848 l
-2747 5848 m
-2918 5848 l
-2918 5849 l
-2747 5849 l
-2745 5849 m
-2918 5849 l
-2918 5850 l
-2745 5850 l
-2742 5850 m
-2919 5850 l
-2919 5851 l
-2742 5851 l
-2740 5851 m
-2919 5851 l
-2919 5852 l
-2740 5852 l
-2737 5852 m
-2920 5852 l
-2920 5853 l
-2737 5853 l
-2735 5853 m
-2920 5853 l
-2920 5854 l
-2735 5854 l
-2735 5854 m
-2920 5854 l
-2920 5855 l
-2735 5855 l
-2735 5855 m
-2921 5855 l
-2921 5857 l
-2735 5857 l
-2736 5857 m
-2922 5857 l
-2922 5860 l
-2736 5860 l
-2737 5860 m
-2923 5860 l
-2923 5862 l
-2737 5862 l
-2738 5862 m
-2924 5862 l
-2924 5865 l
-2738 5865 l
-2739 5865 m
-2925 5865 l
-2925 5867 l
-2739 5867 l
-2740 5867 m
-2926 5867 l
-2926 5870 l
-2740 5870 l
-2741 5870 m
-2927 5870 l
-2927 5872 l
-2741 5872 l
-2742 5872 m
-2927 5872 l
-2927 5873 l
-2742 5873 l
-2742 5873 m
-2928 5873 l
-2928 5875 l
-2742 5875 l
-2743 5875 m
-2929 5875 l
-2929 5877 l
-2743 5877 l
-2744 5877 m
-2929 5877 l
-2929 5878 l
-2744 5878 l
-2744 5878 m
-2930 5878 l
-2930 5880 l
-2744 5880 l
-2745 5880 m
-2931 5880 l
-2931 5882 l
-2745 5882 l
-2746 5882 m
-2931 5882 l
-2931 5883 l
-2746 5883 l
-2746 5883 m
-2932 5883 l
-2932 5885 l
-2746 5885 l
-2747 5885 m
-2933 5885 l
-2933 5887 l
-2747 5887 l
-2748 5887 m
-2933 5887 l
-2933 5888 l
-2748 5888 l
-2748 5888 m
-2934 5888 l
-2934 5890 l
-2748 5890 l
-2749 5890 m
-2934 5890 l
-2934 5891 l
-2749 5891 l
-2749 5891 m
-2935 5891 l
-2935 5892 l
-2749 5892 l
-2750 5892 m
-2935 5892 l
-2935 5893 l
-2750 5893 l
-2750 5893 m
-2936 5893 l
-2936 5895 l
-2750 5895 l
-2751 5895 m
-2936 5895 l
-2936 5896 l
-2751 5896 l
-2751 5896 m
-2937 5896 l
-2937 5897 l
-2751 5897 l
-2752 5897 m
-2937 5897 l
-2937 5898 l
-2752 5898 l
-2752 5898 m
-2938 5898 l
-2938 5900 l
-2752 5900 l
-2753 5900 m
-2938 5900 l
-2938 5901 l
-2753 5901 l
-2753 5901 m
-2939 5901 l
-2939 5902 l
-2753 5902 l
-2754 5902 m
-2939 5902 l
-2939 5903 l
-2754 5903 l
-2754 5903 m
-2939 5903 l
-2939 5904 l
-2754 5904 l
-2754 5904 m
-2939 5904 l
-2939 5905 l
-2754 5905 l
-2755 5905 m
-2937 5905 l
-2937 5906 l
-2755 5906 l
-2755 5906 m
-2934 5906 l
-2934 5907 l
-2755 5907 l
-2756 5907 m
-2932 5907 l
-2932 5908 l
-2756 5908 l
-2756 5908 m
-2929 5908 l
-2929 5909 l
-2756 5909 l
-2756 5909 m
-2927 5909 l
-2927 5910 l
-2756 5910 l
-2757 5910 m
-2924 5910 l
-2924 5911 l
-2757 5911 l
-2757 5911 m
-2922 5911 l
-2922 5912 l
-2757 5912 l
-2758 5912 m
-2919 5912 l
-2919 5913 l
-2758 5913 l
-2758 5913 m
-2917 5913 l
-2917 5914 l
-2758 5914 l
-2758 5914 m
-2914 5914 l
-2914 5915 l
-2758 5915 l
-2759 5915 m
-2912 5915 l
-2912 5916 l
-2759 5916 l
-2759 5916 m
-2909 5916 l
-2909 5917 l
-2759 5917 l
-2760 5917 m
-2906 5917 l
-2906 5918 l
-2760 5918 l
-2760 5918 m
-2904 5918 l
-2904 5919 l
-2760 5919 l
-2760 5919 m
-2901 5919 l
-2901 5920 l
-2760 5920 l
-2761 5920 m
-2899 5920 l
-2899 5921 l
-2761 5921 l
-2761 5921 m
-2896 5921 l
-2896 5922 l
-2761 5922 l
-2762 5922 m
-2894 5922 l
-2894 5923 l
-2762 5923 l
-2762 5923 m
-2891 5923 l
-2891 5924 l
-2762 5924 l
-2762 5924 m
-2889 5924 l
-2889 5925 l
-2762 5925 l
-2763 5925 m
-2886 5925 l
-2886 5926 l
-2763 5926 l
-2763 5926 m
-2884 5926 l
-2884 5927 l
-2763 5927 l
-2764 5927 m
-2881 5927 l
-2881 5928 l
-2764 5928 l
-2764 5928 m
-2879 5928 l
-2879 5929 l
-2764 5929 l
-2764 5929 m
-2876 5929 l
-2876 5930 l
-2764 5930 l
-2765 5930 m
-2874 5930 l
-2874 5931 l
-2765 5931 l
-2765 5931 m
-2871 5931 l
-2871 5932 l
-2765 5932 l
-2766 5932 m
-2869 5932 l
-2869 5933 l
-2766 5933 l
-2766 5933 m
-2866 5933 l
-2866 5934 l
-2766 5934 l
-2766 5934 m
-2864 5934 l
-2864 5935 l
-2766 5935 l
-2767 5935 m
-2861 5935 l
-2861 5936 l
-2767 5936 l
-2767 5936 m
-2859 5936 l
-2859 5937 l
-2767 5937 l
-2768 5937 m
-2856 5937 l
-2856 5938 l
-2768 5938 l
-2768 5938 m
-2854 5938 l
-2854 5939 l
-2768 5939 l
-2768 5939 m
-2851 5939 l
-2851 5940 l
-2768 5940 l
-2769 5940 m
-2849 5940 l
-2849 5941 l
-2769 5941 l
-2769 5941 m
-2846 5941 l
-2846 5942 l
-2769 5942 l
-2770 5942 m
-2843 5942 l
-2843 5943 l
-2770 5943 l
-2770 5943 m
-2841 5943 l
-2841 5944 l
-2770 5944 l
-2770 5944 m
-2838 5944 l
-2838 5945 l
-2770 5945 l
-2771 5945 m
-2836 5945 l
-2836 5946 l
-2771 5946 l
-2771 5946 m
-2833 5946 l
-2833 5947 l
-2771 5947 l
-2772 5947 m
-2831 5947 l
-2831 5948 l
-2772 5948 l
-2772 5948 m
-2828 5948 l
-2828 5949 l
-2772 5949 l
-2772 5949 m
-2826 5949 l
-2826 5950 l
-2772 5950 l
-2773 5950 m
-2823 5950 l
-2823 5951 l
-2773 5951 l
-2773 5951 m
-2821 5951 l
-2821 5952 l
-2773 5952 l
-2774 5952 m
-2818 5952 l
-2818 5953 l
-2774 5953 l
-2774 5953 m
-2816 5953 l
-2816 5954 l
-2774 5954 l
-2774 5954 m
-2813 5954 l
-2813 5955 l
-2774 5955 l
-2775 5955 m
-2811 5955 l
-2811 5956 l
-2775 5956 l
-2775 5956 m
-2808 5956 l
-2808 5957 l
-2775 5957 l
-2776 5957 m
-2806 5957 l
-2806 5958 l
-2776 5958 l
-2776 5958 m
-2803 5958 l
-2803 5959 l
-2776 5959 l
-2776 5959 m
-2801 5959 l
-2801 5960 l
-2776 5960 l
-2777 5960 m
-2798 5960 l
-2798 5961 l
-2777 5961 l
-2777 5961 m
-2796 5961 l
-2796 5962 l
-2777 5962 l
-2778 5962 m
-2793 5962 l
-2793 5963 l
-2778 5963 l
-2778 5963 m
-2791 5963 l
-2791 5964 l
-2778 5964 l
-2778 5964 m
-2788 5964 l
-2788 5965 l
-2778 5965 l
-2779 5965 m
-2786 5965 l
-2786 5966 l
-2779 5966 l
-2779 5966 m
-2783 5966 l
-2783 5967 l
-2779 5967 l
-Y
-2939 5903.9 m
-2895 5791 l
-2735 5854 l
-2780 5967 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2887 5830 m
-2878 5829 l
-2862 5822 l
-2894 5904 l
-S
-2796 5848 m
-2809 5847 l
-2816 5854 l
-2819 5861 l
-2818 5871 l
-2812 5878 l
-2798 5888 l
-2788 5896 l
-2783 5907 l
-2782 5916 l
-2787 5928 l
-2794 5934 l
-2799 5936 l
-2812 5936 l
-2828 5930 l
-2838 5921 l
-2840 5916 l
-2841 5906 l
-2837 5895 l
-2830 5889 l
-2819 5884 l
-2806 5885 l
-2789 5887 l
-2779 5886 l
-2772 5880 l
-2769 5872 l
-2770 5863 l
-2780 5854 l
-2796 5848 l
-S
-1 g
-3616 5200 m
-3619 5200 l
-3619 5201 l
-3616 5201 l
-3615 5201 m
-3620 5201 l
-3620 5202 l
-3615 5202 l
-3614 5202 m
-3621 5202 l
-3621 5203 l
-3614 5203 l
-3613 5203 m
-3623 5203 l
-3623 5204 l
-3613 5204 l
-3612 5204 m
-3624 5204 l
-3624 5205 l
-3612 5205 l
-3612 5205 m
-3625 5205 l
-3625 5206 l
-3612 5206 l
-3611 5206 m
-3626 5206 l
-3626 5207 l
-3611 5207 l
-3610 5207 m
-3628 5207 l
-3628 5208 l
-3610 5208 l
-3609 5208 m
-3629 5208 l
-3629 5209 l
-3609 5209 l
-3608 5209 m
-3630 5209 l
-3630 5210 l
-3608 5210 l
-3608 5210 m
-3631 5210 l
-3631 5211 l
-3608 5211 l
-3607 5211 m
-3633 5211 l
-3633 5212 l
-3607 5212 l
-3606 5212 m
-3634 5212 l
-3634 5213 l
-3606 5213 l
-3605 5213 m
-3635 5213 l
-3635 5214 l
-3605 5214 l
-3604 5214 m
-3636 5214 l
-3636 5215 l
-3604 5215 l
-3604 5215 m
-3638 5215 l
-3638 5216 l
-3604 5216 l
-3603 5216 m
-3639 5216 l
-3639 5217 l
-3603 5217 l
-3602 5217 m
-3640 5217 l
-3640 5218 l
-3602 5218 l
-3601 5218 m
-3641 5218 l
-3641 5219 l
-3601 5219 l
-3600 5219 m
-3643 5219 l
-3643 5220 l
-3600 5220 l
-3600 5220 m
-3644 5220 l
-3644 5221 l
-3600 5221 l
-3599 5221 m
-3645 5221 l
-3645 5222 l
-3599 5222 l
-3598 5222 m
-3647 5222 l
-3647 5223 l
-3598 5223 l
-3597 5223 m
-3648 5223 l
-3648 5224 l
-3597 5224 l
-3596 5224 m
-3649 5224 l
-3649 5225 l
-3596 5225 l
-3596 5225 m
-3650 5225 l
-3650 5226 l
-3596 5226 l
-3595 5226 m
-3652 5226 l
-3652 5227 l
-3595 5227 l
-3594 5227 m
-3653 5227 l
-3653 5228 l
-3594 5228 l
-3593 5228 m
-3654 5228 l
-3654 5229 l
-3593 5229 l
-3592 5229 m
-3655 5229 l
-3655 5230 l
-3592 5230 l
-3592 5230 m
-3657 5230 l
-3657 5231 l
-3592 5231 l
-3591 5231 m
-3658 5231 l
-3658 5232 l
-3591 5232 l
-3590 5232 m
-3659 5232 l
-3659 5233 l
-3590 5233 l
-3589 5233 m
-3660 5233 l
-3660 5234 l
-3589 5234 l
-3588 5234 m
-3662 5234 l
-3662 5235 l
-3588 5235 l
-3588 5235 m
-3663 5235 l
-3663 5236 l
-3588 5236 l
-3587 5236 m
-3664 5236 l
-3664 5237 l
-3587 5237 l
-3586 5237 m
-3665 5237 l
-3665 5238 l
-3586 5238 l
-3585 5238 m
-3667 5238 l
-3667 5239 l
-3585 5239 l
-3584 5239 m
-3668 5239 l
-3668 5240 l
-3584 5240 l
-3584 5240 m
-3669 5240 l
-3669 5241 l
-3584 5241 l
-3583 5241 m
-3670 5241 l
-3670 5242 l
-3583 5242 l
-3582 5242 m
-3672 5242 l
-3672 5243 l
-3582 5243 l
-3581 5243 m
-3673 5243 l
-3673 5244 l
-3581 5244 l
-3580 5244 m
-3674 5244 l
-3674 5245 l
-3580 5245 l
-3580 5245 m
-3676 5245 l
-3676 5246 l
-3580 5246 l
-3579 5246 m
-3677 5246 l
-3677 5247 l
-3579 5247 l
-3578 5247 m
-3678 5247 l
-3678 5248 l
-3578 5248 l
-3577 5248 m
-3679 5248 l
-3679 5249 l
-3577 5249 l
-3576 5249 m
-3681 5249 l
-3681 5250 l
-3576 5250 l
-3575 5250 m
-3682 5250 l
-3682 5251 l
-3575 5251 l
-3575 5251 m
-3683 5251 l
-3683 5252 l
-3575 5252 l
-3574 5252 m
-3684 5252 l
-3684 5253 l
-3574 5253 l
-3573 5253 m
-3686 5253 l
-3686 5254 l
-3573 5254 l
-3572 5254 m
-3687 5254 l
-3687 5255 l
-3572 5255 l
-3571 5255 m
-3688 5255 l
-3688 5256 l
-3571 5256 l
-3571 5256 m
-3689 5256 l
-3689 5257 l
-3571 5257 l
-3570 5257 m
-3691 5257 l
-3691 5258 l
-3570 5258 l
-3569 5258 m
-3692 5258 l
-3692 5259 l
-3569 5259 l
-3568 5259 m
-3693 5259 l
-3693 5260 l
-3568 5260 l
-3567 5260 m
-3694 5260 l
-3694 5261 l
-3567 5261 l
-3567 5261 m
-3696 5261 l
-3696 5262 l
-3567 5262 l
-3566 5262 m
-3697 5262 l
-3697 5263 l
-3566 5263 l
-3565 5263 m
-3698 5263 l
-3698 5264 l
-3565 5264 l
-3564 5264 m
-3699 5264 l
-3699 5265 l
-3564 5265 l
-3563 5265 m
-3701 5265 l
-3701 5266 l
-3563 5266 l
-3563 5266 m
-3702 5266 l
-3702 5267 l
-3563 5267 l
-3562 5267 m
-3703 5267 l
-3703 5268 l
-3562 5268 l
-3561 5268 m
-3705 5268 l
-3705 5269 l
-3561 5269 l
-3560 5269 m
-3706 5269 l
-3706 5270 l
-3560 5270 l
-3559 5270 m
-3707 5270 l
-3707 5271 l
-3559 5271 l
-3559 5271 m
-3708 5271 l
-3708 5272 l
-3559 5272 l
-3558 5272 m
-3710 5272 l
-3710 5273 l
-3558 5273 l
-3557 5273 m
-3711 5273 l
-3711 5274 l
-3557 5274 l
-3556 5274 m
-3712 5274 l
-3712 5275 l
-3556 5275 l
-3555 5275 m
-3712 5275 l
-3712 5276 l
-3555 5276 l
-3555 5276 m
-3711 5276 l
-3711 5277 l
-3555 5277 l
-3554 5277 m
-3711 5277 l
-3711 5278 l
-3554 5278 l
-3553 5278 m
-3710 5278 l
-3710 5279 l
-3553 5279 l
-3552 5279 m
-3709 5279 l
-3709 5280 l
-3552 5280 l
-3551 5280 m
-3708 5280 l
-3708 5281 l
-3551 5281 l
-3551 5281 m
-3707 5281 l
-3707 5282 l
-3551 5282 l
-3550 5282 m
-3707 5282 l
-3707 5283 l
-3550 5283 l
-3549 5283 m
-3706 5283 l
-3706 5284 l
-3549 5284 l
-3548 5284 m
-3705 5284 l
-3705 5285 l
-3548 5285 l
-3547 5285 m
-3704 5285 l
-3704 5286 l
-3547 5286 l
-3547 5286 m
-3703 5286 l
-3703 5287 l
-3547 5287 l
-3546 5287 m
-3703 5287 l
-3703 5288 l
-3546 5288 l
-3545 5288 m
-3702 5288 l
-3702 5289 l
-3545 5289 l
-3544 5289 m
-3701 5289 l
-3701 5290 l
-3544 5290 l
-3543 5290 m
-3700 5290 l
-3700 5291 l
-3543 5291 l
-3543 5291 m
-3699 5291 l
-3699 5292 l
-3543 5292 l
-3542 5292 m
-3699 5292 l
-3699 5293 l
-3542 5293 l
-3541 5293 m
-3698 5293 l
-3698 5294 l
-3541 5294 l
-3540 5294 m
-3697 5294 l
-3697 5295 l
-3540 5295 l
-3539 5295 m
-3696 5295 l
-3696 5296 l
-3539 5296 l
-3538 5296 m
-3695 5296 l
-3695 5298 l
-3538 5298 l
-3537 5298 m
-3694 5298 l
-3694 5299 l
-3537 5299 l
-3536 5299 m
-3693 5299 l
-3693 5300 l
-3536 5300 l
-3535 5300 m
-3692 5300 l
-3692 5301 l
-3535 5301 l
-3534 5301 m
-3691 5301 l
-3691 5303 l
-3534 5303 l
-3533 5303 m
-3690 5303 l
-3690 5304 l
-3533 5304 l
-3532 5304 m
-3689 5304 l
-3689 5305 l
-3532 5305 l
-3531 5305 m
-3688 5305 l
-3688 5306 l
-3531 5306 l
-3530 5306 m
-3687 5306 l
-3687 5308 l
-3530 5308 l
-3529 5308 m
-3686 5308 l
-3686 5309 l
-3529 5309 l
-3528 5309 m
-3685 5309 l
-3685 5310 l
-3528 5310 l
-3527 5310 m
-3684 5310 l
-3684 5311 l
-3527 5311 l
-3526 5311 m
-3683 5311 l
-3683 5313 l
-3526 5313 l
-3525 5313 m
-3682 5313 l
-3682 5314 l
-3525 5314 l
-3524 5314 m
-3681 5314 l
-3681 5315 l
-3524 5315 l
-3523 5315 m
-3680 5315 l
-3680 5316 l
-3523 5316 l
-3522 5316 m
-3679 5316 l
-3679 5318 l
-3522 5318 l
-3521 5318 m
-3678 5318 l
-3678 5319 l
-3521 5319 l
-3520 5319 m
-3677 5319 l
-3677 5320 l
-3520 5320 l
-3519 5320 m
-3676 5320 l
-3676 5321 l
-3519 5321 l
-3518 5321 m
-3675 5321 l
-3675 5323 l
-3518 5323 l
-3517 5323 m
-3674 5323 l
-3674 5324 l
-3517 5324 l
-3516 5324 m
-3673 5324 l
-3673 5325 l
-3516 5325 l
-3515 5325 m
-3672 5325 l
-3672 5326 l
-3515 5326 l
-3514 5326 m
-3672 5326 l
-3672 5327 l
-3514 5327 l
-3514 5327 m
-3671 5327 l
-3671 5328 l
-3514 5328 l
-3513 5328 m
-3670 5328 l
-3670 5329 l
-3513 5329 l
-3512 5329 m
-3669 5329 l
-3669 5330 l
-3512 5330 l
-3511 5330 m
-3668 5330 l
-3668 5331 l
-3511 5331 l
-3510 5331 m
-3668 5331 l
-3668 5332 l
-3510 5332 l
-3510 5332 m
-3667 5332 l
-3667 5333 l
-3510 5333 l
-3509 5333 m
-3666 5333 l
-3666 5334 l
-3509 5334 l
-3508 5334 m
-3665 5334 l
-3665 5335 l
-3508 5335 l
-3507 5335 m
-3664 5335 l
-3664 5336 l
-3507 5336 l
-3506 5336 m
-3664 5336 l
-3664 5337 l
-3506 5337 l
-3506 5337 m
-3663 5337 l
-3663 5338 l
-3506 5338 l
-3505 5338 m
-3662 5338 l
-3662 5339 l
-3505 5339 l
-3504 5339 m
-3661 5339 l
-3661 5340 l
-3504 5340 l
-3503 5340 m
-3660 5340 l
-3660 5341 l
-3503 5341 l
-3502 5341 m
-3660 5341 l
-3660 5342 l
-3502 5342 l
-3502 5342 m
-3659 5342 l
-3659 5343 l
-3502 5343 l
-3502 5343 m
-3658 5343 l
-3658 5344 l
-3502 5344 l
-3503 5344 m
-3657 5344 l
-3657 5345 l
-3503 5345 l
-3504 5345 m
-3656 5345 l
-3656 5346 l
-3504 5346 l
-3505 5346 m
-3656 5346 l
-3656 5347 l
-3505 5347 l
-3507 5347 m
-3655 5347 l
-3655 5348 l
-3507 5348 l
-3508 5348 m
-3654 5348 l
-3654 5349 l
-3508 5349 l
-3509 5349 m
-3653 5349 l
-3653 5350 l
-3509 5350 l
-3510 5350 m
-3652 5350 l
-3652 5351 l
-3510 5351 l
-3512 5351 m
-3652 5351 l
-3652 5352 l
-3512 5352 l
-3513 5352 m
-3651 5352 l
-3651 5353 l
-3513 5353 l
-3514 5353 m
-3650 5353 l
-3650 5354 l
-3514 5354 l
-3515 5354 m
-3649 5354 l
-3649 5355 l
-3515 5355 l
-3517 5355 m
-3648 5355 l
-3648 5356 l
-3517 5356 l
-3518 5356 m
-3648 5356 l
-3648 5357 l
-3518 5357 l
-3519 5357 m
-3647 5357 l
-3647 5358 l
-3519 5358 l
-3520 5358 m
-3646 5358 l
-3646 5359 l
-3520 5359 l
-3522 5359 m
-3645 5359 l
-3645 5360 l
-3522 5360 l
-3523 5360 m
-3644 5360 l
-3644 5361 l
-3523 5361 l
-3524 5361 m
-3644 5361 l
-3644 5362 l
-3524 5362 l
-3525 5362 m
-3643 5362 l
-3643 5363 l
-3525 5363 l
-3527 5363 m
-3642 5363 l
-3642 5364 l
-3527 5364 l
-3528 5364 m
-3641 5364 l
-3641 5365 l
-3528 5365 l
-3529 5365 m
-3640 5365 l
-3640 5366 l
-3529 5366 l
-3530 5366 m
-3640 5366 l
-3640 5367 l
-3530 5367 l
-3532 5367 m
-3639 5367 l
-3639 5368 l
-3532 5368 l
-3533 5368 m
-3638 5368 l
-3638 5369 l
-3533 5369 l
-3534 5369 m
-3637 5369 l
-3637 5370 l
-3534 5370 l
-3535 5370 m
-3636 5370 l
-3636 5371 l
-3535 5371 l
-3537 5371 m
-3636 5371 l
-3636 5372 l
-3537 5372 l
-3538 5372 m
-3635 5372 l
-3635 5373 l
-3538 5373 l
-3539 5373 m
-3634 5373 l
-3634 5374 l
-3539 5374 l
-3540 5374 m
-3633 5374 l
-3633 5375 l
-3540 5375 l
-3542 5375 m
-3633 5375 l
-3633 5376 l
-3542 5376 l
-3543 5376 m
-3632 5376 l
-3632 5377 l
-3543 5377 l
-3544 5377 m
-3631 5377 l
-3631 5378 l
-3544 5378 l
-3545 5378 m
-3630 5378 l
-3630 5379 l
-3545 5379 l
-3547 5379 m
-3629 5379 l
-3629 5380 l
-3547 5380 l
-3548 5380 m
-3629 5380 l
-3629 5381 l
-3548 5381 l
-3549 5381 m
-3628 5381 l
-3628 5382 l
-3549 5382 l
-3550 5382 m
-3627 5382 l
-3627 5383 l
-3550 5383 l
-3551 5383 m
-3626 5383 l
-3626 5384 l
-3551 5384 l
-3553 5384 m
-3625 5384 l
-3625 5385 l
-3553 5385 l
-3554 5385 m
-3625 5385 l
-3625 5386 l
-3554 5386 l
-3555 5386 m
-3624 5386 l
-3624 5387 l
-3555 5387 l
-3556 5387 m
-3623 5387 l
-3623 5388 l
-3556 5388 l
-3558 5388 m
-3622 5388 l
-3622 5389 l
-3558 5389 l
-3559 5389 m
-3621 5389 l
-3621 5390 l
-3559 5390 l
-3560 5390 m
-3621 5390 l
-3621 5391 l
-3560 5391 l
-3561 5391 m
-3620 5391 l
-3620 5392 l
-3561 5392 l
-3563 5392 m
-3619 5392 l
-3619 5393 l
-3563 5393 l
-3564 5393 m
-3618 5393 l
-3618 5394 l
-3564 5394 l
-3565 5394 m
-3617 5394 l
-3617 5395 l
-3565 5395 l
-3566 5395 m
-3617 5395 l
-3617 5396 l
-3566 5396 l
-3568 5396 m
-3616 5396 l
-3616 5397 l
-3568 5397 l
-3569 5397 m
-3615 5397 l
-3615 5398 l
-3569 5398 l
-3570 5398 m
-3614 5398 l
-3614 5399 l
-3570 5399 l
-3571 5399 m
-3613 5399 l
-3613 5400 l
-3571 5400 l
-3573 5400 m
-3613 5400 l
-3613 5401 l
-3573 5401 l
-3574 5401 m
-3612 5401 l
-3612 5402 l
-3574 5402 l
-3575 5402 m
-3611 5402 l
-3611 5403 l
-3575 5403 l
-3576 5403 m
-3610 5403 l
-3610 5404 l
-3576 5404 l
-3578 5404 m
-3609 5404 l
-3609 5405 l
-3578 5405 l
-3579 5405 m
-3609 5405 l
-3609 5406 l
-3579 5406 l
-3580 5406 m
-3608 5406 l
-3608 5407 l
-3580 5407 l
-3581 5407 m
-3607 5407 l
-3607 5408 l
-3581 5408 l
-3583 5408 m
-3606 5408 l
-3606 5409 l
-3583 5409 l
-3584 5409 m
-3605 5409 l
-3605 5410 l
-3584 5410 l
-3585 5410 m
-3605 5410 l
-3605 5411 l
-3585 5411 l
-3586 5411 m
-3604 5411 l
-3604 5412 l
-3586 5412 l
-3588 5412 m
-3603 5412 l
-3603 5413 l
-3588 5413 l
-3589 5413 m
-3602 5413 l
-3602 5414 l
-3589 5414 l
-3590 5414 m
-3601 5414 l
-3601 5415 l
-3590 5415 l
-3591 5415 m
-3601 5415 l
-3601 5416 l
-3591 5416 l
-3593 5416 m
-3600 5416 l
-3600 5417 l
-3593 5417 l
-3594 5417 m
-3599 5417 l
-3599 5418 l
-3594 5418 l
-3595 5418 m
-3598 5418 l
-3598 5419 l
-3595 5419 l
-Y
-3711.6 5275 m
-3617 5200 l
-3502 5343 l
-3597 5419 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3631 5243 m
-3627 5240 l
-3618 5238 l
-3612 5239 l
-3604 5243 l
-3593 5256 l
-3592 5265 l
-3592 5271 l
-3596 5279 l
-3603 5284 l
-3612 5286 l
-3627 5288 l
-3685 5281 l
-3649 5327 l
-S
-3549 5311 m
-3560 5304 l
-3575 5305 l
-3594 5315 l
-3604 5323 l
-3618 5339 l
-3622 5353 l
-3618 5366 l
-3613 5372 l
-3602 5380 l
-3587 5378 l
-3568 5369 l
-3558 5361 l
-3544 5344 l
-3539 5330 l
-3544 5318 l
-3549 5311 l
-S
-1 g
-3938 4336 m
-3946 4336 l
-3946 4337 l
-3938 4337 l
-3938 4337 m
-3953 4337 l
-3953 4338 l
-3938 4338 l
-3938 4338 m
-3960 4338 l
-3960 4339 l
-3938 4339 l
-3938 4339 m
-3967 4339 l
-3967 4340 l
-3938 4340 l
-3938 4340 m
-3973 4340 l
-3973 4341 l
-3938 4341 l
-3938 4341 m
-3980 4341 l
-3980 4342 l
-3938 4342 l
-3937 4342 m
-3987 4342 l
-3987 4343 l
-3937 4343 l
-3937 4343 m
-3994 4343 l
-3994 4344 l
-3937 4344 l
-3937 4344 m
-4001 4344 l
-4001 4345 l
-3937 4345 l
-3937 4345 m
-4007 4345 l
-4007 4346 l
-3937 4346 l
-3937 4346 m
-4014 4346 l
-4014 4347 l
-3937 4347 l
-3937 4347 m
-4021 4347 l
-4021 4348 l
-3937 4348 l
-3936 4348 m
-4028 4348 l
-4028 4349 l
-3936 4349 l
-3936 4349 m
-4035 4349 l
-4035 4350 l
-3936 4350 l
-3936 4350 m
-4041 4350 l
-4041 4351 l
-3936 4351 l
-3936 4351 m
-4048 4351 l
-4048 4352 l
-3936 4352 l
-3936 4352 m
-4055 4352 l
-4055 4353 l
-3936 4353 l
-3936 4353 m
-4059 4353 l
-4059 4354 l
-3936 4354 l
-3936 4354 m
-4059 4354 l
-4059 4355 l
-3936 4355 l
-3935 4355 m
-4059 4355 l
-4059 4357 l
-3935 4357 l
-3935 4357 m
-4058 4357 l
-4058 4361 l
-3935 4361 l
-3934 4361 m
-4058 4361 l
-4058 4364 l
-3934 4364 l
-3934 4364 m
-4057 4364 l
-4057 4368 l
-3934 4368 l
-3933 4368 m
-4057 4368 l
-4057 4371 l
-3933 4371 l
-3933 4371 m
-4056 4371 l
-4056 4374 l
-3933 4374 l
-3932 4374 m
-4056 4374 l
-4056 4377 l
-3932 4377 l
-3932 4377 m
-4055 4377 l
-4055 4381 l
-3932 4381 l
-3931 4381 m
-4055 4381 l
-4055 4384 l
-3931 4384 l
-3931 4384 m
-4054 4384 l
-4054 4387 l
-3931 4387 l
-3930 4387 m
-4054 4387 l
-4054 4390 l
-3930 4390 l
-3930 4390 m
-4053 4390 l
-4053 4394 l
-3930 4394 l
-3929 4394 m
-4053 4394 l
-4053 4397 l
-3929 4397 l
-3929 4397 m
-4052 4397 l
-4052 4400 l
-3929 4400 l
-3928 4400 m
-4052 4400 l
-4052 4404 l
-3928 4404 l
-3928 4404 m
-4051 4404 l
-4051 4407 l
-3928 4407 l
-3927 4407 m
-4051 4407 l
-4051 4410 l
-3927 4410 l
-3927 4410 m
-4050 4410 l
-4050 4413 l
-3927 4413 l
-3926 4413 m
-4050 4413 l
-4050 4417 l
-3926 4417 l
-3926 4417 m
-4049 4417 l
-4049 4420 l
-3926 4420 l
-3925 4420 m
-4049 4420 l
-4049 4423 l
-3925 4423 l
-3925 4423 m
-4048 4423 l
-4048 4426 l
-3925 4426 l
-3924 4426 m
-4048 4426 l
-4048 4430 l
-3924 4430 l
-3924 4430 m
-4047 4430 l
-4047 4432 l
-3924 4432 l
-3923 4432 m
-4047 4432 l
-4047 4437 l
-3923 4437 l
-3923 4437 m
-4046 4437 l
-4046 4439 l
-3923 4439 l
-3922 4439 m
-4046 4439 l
-4046 4443 l
-3922 4443 l
-3922 4443 m
-4045 4443 l
-4045 4445 l
-3922 4445 l
-3921 4445 m
-4045 4445 l
-4045 4450 l
-3921 4450 l
-3921 4450 m
-4044 4450 l
-4044 4452 l
-3921 4452 l
-3920 4452 m
-4044 4452 l
-4044 4456 l
-3920 4456 l
-3920 4456 m
-4043 4456 l
-4043 4458 l
-3920 4458 l
-3919 4458 m
-4043 4458 l
-4043 4463 l
-3919 4463 l
-3919 4463 m
-4042 4463 l
-4042 4465 l
-3919 4465 l
-3918 4465 m
-4042 4465 l
-4042 4470 l
-3918 4470 l
-3918 4470 m
-4041 4470 l
-4041 4471 l
-3918 4471 l
-3917 4471 m
-4041 4471 l
-4041 4476 l
-3917 4476 l
-3917 4476 m
-4040 4476 l
-4040 4478 l
-3917 4478 l
-3916 4478 m
-4040 4478 l
-4040 4483 l
-3916 4483 l
-3916 4483 m
-4039 4483 l
-4039 4484 l
-3916 4484 l
-3915 4484 m
-4039 4484 l
-4039 4489 l
-3915 4489 l
-3915 4489 m
-4038 4489 l
-4038 4491 l
-3915 4491 l
-3914 4491 m
-4038 4491 l
-4038 4496 l
-3914 4496 l
-3914 4496 m
-4037 4496 l
-4037 4497 l
-3914 4497 l
-3913 4497 m
-4037 4497 l
-4037 4503 l
-3913 4503 l
-3913 4503 m
-4036 4503 l
-4036 4504 l
-3913 4504 l
-3912 4504 m
-4036 4504 l
-4036 4509 l
-3912 4509 l
-3912 4509 m
-4035 4509 l
-4035 4510 l
-3912 4510 l
-3911 4510 m
-4035 4510 l
-4035 4516 l
-3911 4516 l
-3911 4516 m
-4034 4516 l
-4034 4517 l
-3911 4517 l
-3911 4517 m
-4034 4517 l
-4034 4518 l
-3911 4518 l
-3917 4518 m
-4034 4518 l
-4034 4519 l
-3917 4519 l
-3924 4519 m
-4034 4519 l
-4034 4520 l
-3924 4520 l
-3931 4520 m
-4034 4520 l
-4034 4521 l
-3931 4521 l
-3937 4521 m
-4034 4521 l
-4034 4522 l
-3937 4522 l
-3944 4522 m
-4033 4522 l
-4033 4523 l
-3944 4523 l
-3951 4523 m
-4033 4523 l
-4033 4524 l
-3951 4524 l
-3957 4524 m
-4033 4524 l
-4033 4525 l
-3957 4525 l
-3964 4525 m
-4033 4525 l
-4033 4526 l
-3964 4526 l
-3971 4526 m
-4033 4526 l
-4033 4527 l
-3971 4527 l
-3977 4527 m
-4033 4527 l
-4033 4528 l
-3977 4528 l
-3984 4528 m
-4033 4528 l
-4033 4529 l
-3984 4529 l
-3991 4529 m
-4032 4529 l
-4032 4530 l
-3991 4530 l
-3997 4530 m
-4032 4530 l
-4032 4531 l
-3997 4531 l
-4004 4531 m
-4032 4531 l
-4032 4532 l
-4004 4532 l
-4011 4532 m
-4032 4532 l
-4032 4533 l
-4011 4533 l
-4017 4533 m
-4032 4533 l
-4032 4534 l
-4017 4534 l
-4024 4534 m
-4032 4534 l
-4032 4535 l
-4024 4535 l
-Y
-4058.5 4353.6 m
-3939 4336 l
-3911 4517 l
-4031 4535 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3972 4366 m
-3968 4365 l
-3959 4368 l
-3954 4372 l
-3949 4379 l
-3947 4396 l
-3949 4405 l
-3953 4410 l
-3961 4415 l
-3969 4416 l
-3978 4413 l
-3991 4407 l
-4039 4372 l
-4030 4430 l
-S
-3960 4449 m
-3956 4448 l
-3947 4451 l
-3942 4454 l
-3937 4462 l
-3934 4478 l
-3937 4487 l
-3941 4492 l
-3948 4497 l
-3956 4499 l
-3965 4496 l
-3979 4489 l
-4026 4454 l
-4018 4512 l
-S
-1 g
-2292 3957 m
-2296 3957 l
-2296 3958 l
-2292 3958 l
-2289 3958 m
-2296 3958 l
-2296 3959 l
-2289 3959 l
-2287 3959 m
-2297 3959 l
-2297 3960 l
-2287 3960 l
-2284 3960 m
-2297 3960 l
-2297 3961 l
-2284 3961 l
-2282 3961 m
-2297 3961 l
-2297 3962 l
-2282 3962 l
-2279 3962 m
-2298 3962 l
-2298 3963 l
-2279 3963 l
-2277 3963 m
-2298 3963 l
-2298 3964 l
-2277 3964 l
-2274 3964 m
-2299 3964 l
-2299 3965 l
-2274 3965 l
-2272 3965 m
-2299 3965 l
-2299 3966 l
-2272 3966 l
-2269 3966 m
-2299 3966 l
-2299 3967 l
-2269 3967 l
-2267 3967 m
-2300 3967 l
-2300 3968 l
-2267 3968 l
-2264 3968 m
-2300 3968 l
-2300 3969 l
-2264 3969 l
-2262 3969 m
-2301 3969 l
-2301 3970 l
-2262 3970 l
-2259 3970 m
-2301 3970 l
-2301 3971 l
-2259 3971 l
-2256 3971 m
-2301 3971 l
-2301 3972 l
-2256 3972 l
-2254 3972 m
-2302 3972 l
-2302 3973 l
-2254 3973 l
-2251 3973 m
-2302 3973 l
-2302 3974 l
-2251 3974 l
-2249 3974 m
-2303 3974 l
-2303 3975 l
-2249 3975 l
-2246 3975 m
-2303 3975 l
-2303 3976 l
-2246 3976 l
-2244 3976 m
-2303 3976 l
-2303 3977 l
-2244 3977 l
-2241 3977 m
-2304 3977 l
-2304 3978 l
-2241 3978 l
-2239 3978 m
-2304 3978 l
-2304 3979 l
-2239 3979 l
-2236 3979 m
-2305 3979 l
-2305 3980 l
-2236 3980 l
-2234 3980 m
-2305 3980 l
-2305 3981 l
-2234 3981 l
-2231 3981 m
-2305 3981 l
-2305 3982 l
-2231 3982 l
-2229 3982 m
-2306 3982 l
-2306 3983 l
-2229 3983 l
-2226 3983 m
-2306 3983 l
-2306 3984 l
-2226 3984 l
-2224 3984 m
-2307 3984 l
-2307 3985 l
-2224 3985 l
-2221 3985 m
-2307 3985 l
-2307 3986 l
-2221 3986 l
-2218 3986 m
-2307 3986 l
-2307 3987 l
-2218 3987 l
-2216 3987 m
-2308 3987 l
-2308 3988 l
-2216 3988 l
-2213 3988 m
-2308 3988 l
-2308 3989 l
-2213 3989 l
-2211 3989 m
-2308 3989 l
-2308 3990 l
-2211 3990 l
-2208 3990 m
-2309 3990 l
-2309 3991 l
-2208 3991 l
-2206 3991 m
-2309 3991 l
-2309 3992 l
-2206 3992 l
-2203 3992 m
-2310 3992 l
-2310 3993 l
-2203 3993 l
-2201 3993 m
-2310 3993 l
-2310 3994 l
-2201 3994 l
-2198 3994 m
-2310 3994 l
-2310 3995 l
-2198 3995 l
-2196 3995 m
-2311 3995 l
-2311 3996 l
-2196 3996 l
-2193 3996 m
-2311 3996 l
-2311 3997 l
-2193 3997 l
-2191 3997 m
-2312 3997 l
-2312 3998 l
-2191 3998 l
-2188 3998 m
-2312 3998 l
-2312 3999 l
-2188 3999 l
-2186 3999 m
-2312 3999 l
-2312 4000 l
-2186 4000 l
-2183 4000 m
-2313 4000 l
-2313 4001 l
-2183 4001 l
-2180 4001 m
-2313 4001 l
-2313 4002 l
-2180 4002 l
-2178 4002 m
-2314 4002 l
-2314 4003 l
-2178 4003 l
-2175 4003 m
-2314 4003 l
-2314 4004 l
-2175 4004 l
-2173 4004 m
-2314 4004 l
-2314 4005 l
-2173 4005 l
-2170 4005 m
-2315 4005 l
-2315 4006 l
-2170 4006 l
-2168 4006 m
-2315 4006 l
-2315 4007 l
-2168 4007 l
-2165 4007 m
-2316 4007 l
-2316 4008 l
-2165 4008 l
-2163 4008 m
-2316 4008 l
-2316 4009 l
-2163 4009 l
-2160 4009 m
-2316 4009 l
-2316 4010 l
-2160 4010 l
-2158 4010 m
-2317 4010 l
-2317 4011 l
-2158 4011 l
-2155 4011 m
-2317 4011 l
-2317 4012 l
-2155 4012 l
-2153 4012 m
-2318 4012 l
-2318 4013 l
-2153 4013 l
-2150 4013 m
-2318 4013 l
-2318 4014 l
-2150 4014 l
-2147 4014 m
-2318 4014 l
-2318 4015 l
-2147 4015 l
-2145 4015 m
-2319 4015 l
-2319 4016 l
-2145 4016 l
-2142 4016 m
-2319 4016 l
-2319 4017 l
-2142 4017 l
-2140 4017 m
-2320 4017 l
-2320 4018 l
-2140 4018 l
-2137 4018 m
-2320 4018 l
-2320 4019 l
-2137 4019 l
-2135 4019 m
-2320 4019 l
-2320 4020 l
-2135 4020 l
-2132 4020 m
-2321 4020 l
-2321 4021 l
-2132 4021 l
-2130 4021 m
-2321 4021 l
-2321 4022 l
-2130 4022 l
-2127 4022 m
-2321 4022 l
-2321 4023 l
-2127 4023 l
-2125 4023 m
-2322 4023 l
-2322 4024 l
-2125 4024 l
-2122 4024 m
-2322 4024 l
-2322 4025 l
-2122 4025 l
-2120 4025 m
-2323 4025 l
-2323 4026 l
-2120 4026 l
-2117 4026 m
-2323 4026 l
-2323 4027 l
-2117 4027 l
-2115 4027 m
-2323 4027 l
-2323 4028 l
-2115 4028 l
-2112 4028 m
-2324 4028 l
-2324 4029 l
-2112 4029 l
-2109 4029 m
-2324 4029 l
-2324 4030 l
-2109 4030 l
-2107 4030 m
-2325 4030 l
-2325 4031 l
-2107 4031 l
-2104 4031 m
-2325 4031 l
-2325 4032 l
-2104 4032 l
-2102 4032 m
-2325 4032 l
-2325 4033 l
-2102 4033 l
-2099 4033 m
-2326 4033 l
-2326 4034 l
-2099 4034 l
-2097 4034 m
-2326 4034 l
-2326 4035 l
-2097 4035 l
-2094 4035 m
-2327 4035 l
-2327 4036 l
-2094 4036 l
-2092 4036 m
-2327 4036 l
-2327 4037 l
-2092 4037 l
-2089 4037 m
-2327 4037 l
-2327 4038 l
-2089 4038 l
-2087 4038 m
-2328 4038 l
-2328 4039 l
-2087 4039 l
-2084 4039 m
-2328 4039 l
-2328 4040 l
-2084 4040 l
-2082 4040 m
-2329 4040 l
-2329 4041 l
-2082 4041 l
-2079 4041 m
-2329 4041 l
-2329 4042 l
-2079 4042 l
-2077 4042 m
-2329 4042 l
-2329 4043 l
-2077 4043 l
-2074 4043 m
-2330 4043 l
-2330 4044 l
-2074 4044 l
-2071 4044 m
-2330 4044 l
-2330 4045 l
-2071 4045 l
-2069 4045 m
-2331 4045 l
-2331 4046 l
-2069 4046 l
-2066 4046 m
-2331 4046 l
-2331 4047 l
-2066 4047 l
-2064 4047 m
-2331 4047 l
-2331 4048 l
-2064 4048 l
-2061 4048 m
-2332 4048 l
-2332 4049 l
-2061 4049 l
-2059 4049 m
-2332 4049 l
-2332 4050 l
-2059 4050 l
-2056 4050 m
-2333 4050 l
-2333 4051 l
-2056 4051 l
-2054 4051 m
-2333 4051 l
-2333 4052 l
-2054 4052 l
-2051 4052 m
-2333 4052 l
-2333 4053 l
-2051 4053 l
-2049 4053 m
-2334 4053 l
-2334 4054 l
-2049 4054 l
-2046 4054 m
-2334 4054 l
-2334 4055 l
-2046 4055 l
-2044 4055 m
-2334 4055 l
-2334 4056 l
-2044 4056 l
-2041 4056 m
-2335 4056 l
-2335 4057 l
-2041 4057 l
-2038 4057 m
-2335 4057 l
-2335 4058 l
-2038 4058 l
-2036 4058 m
-2336 4058 l
-2336 4059 l
-2036 4059 l
-2033 4059 m
-2336 4059 l
-2336 4060 l
-2033 4060 l
-2031 4060 m
-2336 4060 l
-2336 4061 l
-2031 4061 l
-2028 4061 m
-2337 4061 l
-2337 4062 l
-2028 4062 l
-2026 4062 m
-2337 4062 l
-2337 4063 l
-2026 4063 l
-2023 4063 m
-2338 4063 l
-2338 4064 l
-2023 4064 l
-2021 4064 m
-2338 4064 l
-2338 4065 l
-2021 4065 l
-2018 4065 m
-2338 4065 l
-2338 4066 l
-2018 4066 l
-2016 4066 m
-2339 4066 l
-2339 4067 l
-2016 4067 l
-2013 4067 m
-2339 4067 l
-2339 4068 l
-2013 4068 l
-2011 4068 m
-2340 4068 l
-2340 4069 l
-2011 4069 l
-2008 4069 m
-2340 4069 l
-2340 4070 l
-2008 4070 l
-2006 4070 m
-2338 4070 l
-2338 4071 l
-2006 4071 l
-2003 4071 m
-2335 4071 l
-2335 4072 l
-2003 4072 l
-2000 4072 m
-2333 4072 l
-2333 4073 l
-2000 4073 l
-1998 4073 m
-2330 4073 l
-2330 4074 l
-1998 4074 l
-1995 4074 m
-2328 4074 l
-2328 4075 l
-1995 4075 l
-1993 4075 m
-2325 4075 l
-2325 4076 l
-1993 4076 l
-1990 4076 m
-2323 4076 l
-2323 4077 l
-1990 4077 l
-1988 4077 m
-2320 4077 l
-2320 4078 l
-1988 4078 l
-1985 4078 m
-2318 4078 l
-2318 4079 l
-1985 4079 l
-1983 4079 m
-2315 4079 l
-2315 4080 l
-1983 4080 l
-1980 4080 m
-2312 4080 l
-2312 4081 l
-1980 4081 l
-1978 4081 m
-2310 4081 l
-2310 4082 l
-1978 4082 l
-1975 4082 m
-2307 4082 l
-2307 4083 l
-1975 4083 l
-1973 4083 m
-2305 4083 l
-2305 4084 l
-1973 4084 l
-1970 4084 m
-2302 4084 l
-2302 4085 l
-1970 4085 l
-1968 4085 m
-2300 4085 l
-2300 4086 l
-1968 4086 l
-1965 4086 m
-2297 4086 l
-2297 4087 l
-1965 4087 l
-1962 4087 m
-2295 4087 l
-2295 4088 l
-1962 4088 l
-1960 4088 m
-2292 4088 l
-2292 4089 l
-1960 4089 l
-1957 4089 m
-2290 4089 l
-2290 4090 l
-1957 4090 l
-1955 4090 m
-2287 4090 l
-2287 4091 l
-1955 4091 l
-1952 4091 m
-2285 4091 l
-2285 4092 l
-1952 4092 l
-1950 4092 m
-2282 4092 l
-2282 4093 l
-1950 4093 l
-1947 4093 m
-2280 4093 l
-2280 4094 l
-1947 4094 l
-1945 4094 m
-2277 4094 l
-2277 4095 l
-1945 4095 l
-1942 4095 m
-2275 4095 l
-2275 4096 l
-1942 4096 l
-1940 4096 m
-2272 4096 l
-2272 4097 l
-1940 4097 l
-1937 4097 m
-2270 4097 l
-2270 4098 l
-1937 4098 l
-1935 4098 m
-2267 4098 l
-2267 4099 l
-1935 4099 l
-1932 4099 m
-2265 4099 l
-2265 4100 l
-1932 4100 l
-1930 4100 m
-2262 4100 l
-2262 4101 l
-1930 4101 l
-1930 4101 m
-2259 4101 l
-2259 4102 l
-1930 4102 l
-1930 4102 m
-2257 4102 l
-2257 4103 l
-1930 4103 l
-1930 4103 m
-2254 4103 l
-2254 4104 l
-1930 4104 l
-1931 4104 m
-2252 4104 l
-2252 4105 l
-1931 4105 l
-1931 4105 m
-2249 4105 l
-2249 4106 l
-1931 4106 l
-1931 4106 m
-2247 4106 l
-2247 4107 l
-1931 4107 l
-1932 4107 m
-2244 4107 l
-2244 4108 l
-1932 4108 l
-1932 4108 m
-2242 4108 l
-2242 4109 l
-1932 4109 l
-1933 4109 m
-2239 4109 l
-2239 4110 l
-1933 4110 l
-1933 4110 m
-2237 4110 l
-2237 4111 l
-1933 4111 l
-1933 4111 m
-2234 4111 l
-2234 4112 l
-1933 4112 l
-1934 4112 m
-2232 4112 l
-2232 4113 l
-1934 4113 l
-1934 4113 m
-2229 4113 l
-2229 4114 l
-1934 4114 l
-1935 4114 m
-2227 4114 l
-2227 4115 l
-1935 4115 l
-1935 4115 m
-2224 4115 l
-2224 4116 l
-1935 4116 l
-1935 4116 m
-2222 4116 l
-2222 4117 l
-1935 4117 l
-1936 4117 m
-2219 4117 l
-2219 4118 l
-1936 4118 l
-1936 4118 m
-2217 4118 l
-2217 4119 l
-1936 4119 l
-1937 4119 m
-2214 4119 l
-2214 4120 l
-1937 4120 l
-1937 4120 m
-2212 4120 l
-2212 4121 l
-1937 4121 l
-1937 4121 m
-2209 4121 l
-2209 4122 l
-1937 4122 l
-1938 4122 m
-2207 4122 l
-2207 4123 l
-1938 4123 l
-1938 4123 m
-2204 4123 l
-2204 4124 l
-1938 4124 l
-1938 4124 m
-2201 4124 l
-2201 4125 l
-1938 4125 l
-1939 4125 m
-2199 4125 l
-2199 4126 l
-1939 4126 l
-1939 4126 m
-2196 4126 l
-2196 4127 l
-1939 4127 l
-1940 4127 m
-2194 4127 l
-2194 4128 l
-1940 4128 l
-1940 4128 m
-2191 4128 l
-2191 4129 l
-1940 4129 l
-1940 4129 m
-2189 4129 l
-2189 4130 l
-1940 4130 l
-1941 4130 m
-2186 4130 l
-2186 4131 l
-1941 4131 l
-1941 4131 m
-2184 4131 l
-2184 4132 l
-1941 4132 l
-1942 4132 m
-2181 4132 l
-2181 4133 l
-1942 4133 l
-1942 4133 m
-2179 4133 l
-2179 4134 l
-1942 4134 l
-1942 4134 m
-2176 4134 l
-2176 4135 l
-1942 4135 l
-1943 4135 m
-2174 4135 l
-2174 4136 l
-1943 4136 l
-1943 4136 m
-2171 4136 l
-2171 4137 l
-1943 4137 l
-1944 4137 m
-2169 4137 l
-2169 4138 l
-1944 4138 l
-1944 4138 m
-2166 4138 l
-2166 4139 l
-1944 4139 l
-1944 4139 m
-2164 4139 l
-2164 4140 l
-1944 4140 l
-1945 4140 m
-2161 4140 l
-2161 4141 l
-1945 4141 l
-1945 4141 m
-2159 4141 l
-2159 4142 l
-1945 4142 l
-1945 4142 m
-2156 4142 l
-2156 4143 l
-1945 4143 l
-1946 4143 m
-2154 4143 l
-2154 4144 l
-1946 4144 l
-1946 4144 m
-2151 4144 l
-2151 4145 l
-1946 4145 l
-1947 4145 m
-2149 4145 l
-2149 4146 l
-1947 4146 l
-1947 4146 m
-2146 4146 l
-2146 4147 l
-1947 4147 l
-1947 4147 m
-2143 4147 l
-2143 4148 l
-1947 4148 l
-1948 4148 m
-2141 4148 l
-2141 4149 l
-1948 4149 l
-1948 4149 m
-2138 4149 l
-2138 4150 l
-1948 4150 l
-1949 4150 m
-2136 4150 l
-2136 4151 l
-1949 4151 l
-1949 4151 m
-2133 4151 l
-2133 4152 l
-1949 4152 l
-1949 4152 m
-2131 4152 l
-2131 4153 l
-1949 4153 l
-1950 4153 m
-2128 4153 l
-2128 4154 l
-1950 4154 l
-1950 4154 m
-2126 4154 l
-2126 4155 l
-1950 4155 l
-1951 4155 m
-2123 4155 l
-2123 4156 l
-1951 4156 l
-1951 4156 m
-2121 4156 l
-2121 4157 l
-1951 4157 l
-1951 4157 m
-2118 4157 l
-2118 4158 l
-1951 4158 l
-1952 4158 m
-2116 4158 l
-2116 4159 l
-1952 4159 l
-1952 4159 m
-2113 4159 l
-2113 4160 l
-1952 4160 l
-1952 4160 m
-2111 4160 l
-2111 4161 l
-1952 4161 l
-1953 4161 m
-2108 4161 l
-2108 4162 l
-1953 4162 l
-1953 4162 m
-2106 4162 l
-2106 4163 l
-1953 4163 l
-1954 4163 m
-2103 4163 l
-2103 4164 l
-1954 4164 l
-1954 4164 m
-2101 4164 l
-2101 4165 l
-1954 4165 l
-1954 4165 m
-2098 4165 l
-2098 4166 l
-1954 4166 l
-1955 4166 m
-2096 4166 l
-2096 4167 l
-1955 4167 l
-1955 4167 m
-2093 4167 l
-2093 4168 l
-1955 4168 l
-1956 4168 m
-2091 4168 l
-2091 4169 l
-1956 4169 l
-1956 4169 m
-2088 4169 l
-2088 4170 l
-1956 4170 l
-1956 4170 m
-2085 4170 l
-2085 4171 l
-1956 4171 l
-1957 4171 m
-2083 4171 l
-2083 4172 l
-1957 4172 l
-1957 4172 m
-2080 4172 l
-2080 4173 l
-1957 4173 l
-1958 4173 m
-2078 4173 l
-2078 4174 l
-1958 4174 l
-1958 4174 m
-2075 4174 l
-2075 4175 l
-1958 4175 l
-1958 4175 m
-2073 4175 l
-2073 4176 l
-1958 4176 l
-1959 4176 m
-2070 4176 l
-2070 4177 l
-1959 4177 l
-1959 4177 m
-2068 4177 l
-2068 4178 l
-1959 4178 l
-1959 4178 m
-2065 4178 l
-2065 4179 l
-1959 4179 l
-1960 4179 m
-2063 4179 l
-2063 4180 l
-1960 4180 l
-1960 4180 m
-2060 4180 l
-2060 4181 l
-1960 4181 l
-1961 4181 m
-2058 4181 l
-2058 4182 l
-1961 4182 l
-1961 4182 m
-2055 4182 l
-2055 4183 l
-1961 4183 l
-1961 4183 m
-2053 4183 l
-2053 4184 l
-1961 4184 l
-1962 4184 m
-2050 4184 l
-2050 4185 l
-1962 4185 l
-1962 4185 m
-2048 4185 l
-2048 4186 l
-1962 4186 l
-1963 4186 m
-2045 4186 l
-2045 4187 l
-1963 4187 l
-1963 4187 m
-2043 4187 l
-2043 4188 l
-1963 4188 l
-1963 4188 m
-2040 4188 l
-2040 4189 l
-1963 4189 l
-1964 4189 m
-2038 4189 l
-2038 4190 l
-1964 4190 l
-1964 4190 m
-2035 4190 l
-2035 4191 l
-1964 4191 l
-1965 4191 m
-2033 4191 l
-2033 4192 l
-1965 4192 l
-1965 4192 m
-2030 4192 l
-2030 4193 l
-1965 4193 l
-1965 4193 m
-2027 4193 l
-2027 4194 l
-1965 4194 l
-1966 4194 m
-2025 4194 l
-2025 4195 l
-1966 4195 l
-1966 4195 m
-2022 4195 l
-2022 4196 l
-1966 4196 l
-1966 4196 m
-2020 4196 l
-2020 4197 l
-1966 4197 l
-1967 4197 m
-2017 4197 l
-2017 4198 l
-1967 4198 l
-1967 4198 m
-2015 4198 l
-2015 4199 l
-1967 4199 l
-1968 4199 m
-2012 4199 l
-2012 4200 l
-1968 4200 l
-1968 4200 m
-2010 4200 l
-2010 4201 l
-1968 4201 l
-1968 4201 m
-2007 4201 l
-2007 4202 l
-1968 4202 l
-1969 4202 m
-2005 4202 l
-2005 4203 l
-1969 4203 l
-1969 4203 m
-2002 4203 l
-2002 4204 l
-1969 4204 l
-1970 4204 m
-2000 4204 l
-2000 4205 l
-1970 4205 l
-1970 4205 m
-1997 4205 l
-1997 4206 l
-1970 4206 l
-1970 4206 m
-1995 4206 l
-1995 4207 l
-1970 4207 l
-1971 4207 m
-1992 4207 l
-1992 4208 l
-1971 4208 l
-1971 4208 m
-1990 4208 l
-1990 4209 l
-1971 4209 l
-1972 4209 m
-1987 4209 l
-1987 4210 l
-1972 4210 l
-1972 4210 m
-1985 4210 l
-1985 4211 l
-1972 4211 l
-1972 4211 m
-1982 4211 l
-1982 4212 l
-1972 4212 l
-1973 4212 m
-1980 4212 l
-1980 4213 l
-1973 4213 l
-1973 4213 m
-1977 4213 l
-1977 4214 l
-1973 4214 l
-Y
-2339.2 4069.2 m
-2295 3957 l
-1930 4101 l
-1974 4214 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2242 4027 m
-2250 4037 l
-2261 4042 l
-2274 4041 l
-2278 4040 l
-2288 4031 l
-2293 4020 l
-2292 4007 l
-2291 4003 l
-2282 3993 l
-2271 3988 l
-2258 3989 l
-2254 3991 l
-2244 3999 l
-2239 4010 l
-2242 4027 l
-2249 4046 l
-2261 4064 l
-2273 4073 l
-2286 4072 l
-2294 4069 l
-2304 4061 l
-2305 4051 l
-S
-2180 4020 m
-2194 4019 l
-2206 4028 l
-2217 4046 l
-2222 4057 l
-2226 4078 l
-2223 4093 l
-2213 4101 l
-2205 4104 l
-2192 4105 l
-2179 4097 l
-2168 4079 l
-2163 4067 l
-2159 4046 l
-2162 4031 l
-2173 4023 l
-2180 4020 l
-S
-2129 4072 m
-2134 4074 l
-2132 4079 l
-2127 4077 l
-2129 4072 l
-S
-2147 4118 m
-2153 4121 l
-2150 4126 l
-2145 4124 l
-2147 4118 l
-S
-2064 4066 m
-2077 4065 l
-2089 4074 l
-2101 4092 l
-2106 4103 l
-2109 4124 l
-2106 4139 l
-2096 4148 l
-2088 4151 l
-2075 4151 l
-2063 4143 l
-2051 4125 l
-2047 4113 l
-2043 4092 l
-2046 4078 l
-2056 4069 l
-2064 4066 l
-S
-1986 4097 m
-1999 4096 l
-2012 4105 l
-2023 4122 l
-2028 4134 l
-2032 4155 l
-2029 4170 l
-2018 4178 l
-2011 4181 l
-1998 4182 l
-1985 4173 l
-1974 4156 l
-1969 4144 l
-1965 4123 l
-1968 4108 l
-1978 4100 l
-1986 4097 l
-S
-1 g
-2732 3782 m
-2736 3782 l
-2736 3783 l
-2732 3783 l
-2729 3783 m
-2736 3783 l
-2736 3784 l
-2729 3784 l
-2727 3784 m
-2737 3784 l
-2737 3785 l
-2727 3785 l
-2724 3785 m
-2737 3785 l
-2737 3786 l
-2724 3786 l
-2722 3786 m
-2737 3786 l
-2737 3787 l
-2722 3787 l
-2719 3787 m
-2738 3787 l
-2738 3788 l
-2719 3788 l
-2717 3788 m
-2738 3788 l
-2738 3789 l
-2717 3789 l
-2714 3789 m
-2739 3789 l
-2739 3790 l
-2714 3790 l
-2712 3790 m
-2739 3790 l
-2739 3791 l
-2712 3791 l
-2709 3791 m
-2739 3791 l
-2739 3792 l
-2709 3792 l
-2707 3792 m
-2740 3792 l
-2740 3793 l
-2707 3793 l
-2704 3793 m
-2740 3793 l
-2740 3794 l
-2704 3794 l
-2702 3794 m
-2741 3794 l
-2741 3795 l
-2702 3795 l
-2699 3795 m
-2741 3795 l
-2741 3796 l
-2699 3796 l
-2697 3796 m
-2741 3796 l
-2741 3797 l
-2697 3797 l
-2694 3797 m
-2742 3797 l
-2742 3798 l
-2694 3798 l
-2692 3798 m
-2742 3798 l
-2742 3799 l
-2692 3799 l
-2689 3799 m
-2743 3799 l
-2743 3800 l
-2689 3800 l
-2687 3800 m
-2743 3800 l
-2743 3801 l
-2687 3801 l
-2684 3801 m
-2743 3801 l
-2743 3802 l
-2684 3802 l
-2682 3802 m
-2744 3802 l
-2744 3803 l
-2682 3803 l
-2679 3803 m
-2744 3803 l
-2744 3804 l
-2679 3804 l
-2677 3804 m
-2745 3804 l
-2745 3805 l
-2677 3805 l
-2674 3805 m
-2745 3805 l
-2745 3806 l
-2674 3806 l
-2672 3806 m
-2745 3806 l
-2745 3807 l
-2672 3807 l
-2669 3807 m
-2746 3807 l
-2746 3808 l
-2669 3808 l
-2667 3808 m
-2746 3808 l
-2746 3809 l
-2667 3809 l
-2664 3809 m
-2747 3809 l
-2747 3810 l
-2664 3810 l
-2662 3810 m
-2747 3810 l
-2747 3811 l
-2662 3811 l
-2659 3811 m
-2747 3811 l
-2747 3812 l
-2659 3812 l
-2657 3812 m
-2748 3812 l
-2748 3813 l
-2657 3813 l
-2654 3813 m
-2748 3813 l
-2748 3814 l
-2654 3814 l
-2652 3814 m
-2749 3814 l
-2749 3815 l
-2652 3815 l
-2649 3815 m
-2749 3815 l
-2749 3816 l
-2649 3816 l
-2646 3816 m
-2749 3816 l
-2749 3817 l
-2646 3817 l
-2644 3817 m
-2750 3817 l
-2750 3818 l
-2644 3818 l
-2641 3818 m
-2750 3818 l
-2750 3819 l
-2641 3819 l
-2639 3819 m
-2750 3819 l
-2750 3820 l
-2639 3820 l
-2636 3820 m
-2751 3820 l
-2751 3821 l
-2636 3821 l
-2634 3821 m
-2751 3821 l
-2751 3822 l
-2634 3822 l
-2631 3822 m
-2752 3822 l
-2752 3823 l
-2631 3823 l
-2629 3823 m
-2752 3823 l
-2752 3824 l
-2629 3824 l
-2626 3824 m
-2752 3824 l
-2752 3825 l
-2626 3825 l
-2624 3825 m
-2753 3825 l
-2753 3826 l
-2624 3826 l
-2621 3826 m
-2753 3826 l
-2753 3827 l
-2621 3827 l
-2619 3827 m
-2754 3827 l
-2754 3828 l
-2619 3828 l
-2616 3828 m
-2754 3828 l
-2754 3829 l
-2616 3829 l
-2614 3829 m
-2754 3829 l
-2754 3830 l
-2614 3830 l
-2611 3830 m
-2755 3830 l
-2755 3831 l
-2611 3831 l
-2609 3831 m
-2755 3831 l
-2755 3832 l
-2609 3832 l
-2606 3832 m
-2756 3832 l
-2756 3833 l
-2606 3833 l
-2604 3833 m
-2756 3833 l
-2756 3834 l
-2604 3834 l
-2601 3834 m
-2756 3834 l
-2756 3835 l
-2601 3835 l
-2599 3835 m
-2757 3835 l
-2757 3836 l
-2599 3836 l
-2596 3836 m
-2757 3836 l
-2757 3837 l
-2596 3837 l
-2594 3837 m
-2758 3837 l
-2758 3838 l
-2594 3838 l
-2591 3838 m
-2758 3838 l
-2758 3839 l
-2591 3839 l
-2589 3839 m
-2758 3839 l
-2758 3840 l
-2589 3840 l
-2586 3840 m
-2759 3840 l
-2759 3841 l
-2586 3841 l
-2584 3841 m
-2759 3841 l
-2759 3842 l
-2584 3842 l
-2581 3842 m
-2760 3842 l
-2760 3843 l
-2581 3843 l
-2579 3843 m
-2760 3843 l
-2760 3844 l
-2579 3844 l
-2576 3844 m
-2760 3844 l
-2760 3845 l
-2576 3845 l
-2574 3845 m
-2761 3845 l
-2761 3846 l
-2574 3846 l
-2571 3846 m
-2761 3846 l
-2761 3847 l
-2571 3847 l
-2569 3847 m
-2762 3847 l
-2762 3848 l
-2569 3848 l
-2566 3848 m
-2762 3848 l
-2762 3849 l
-2566 3849 l
-2564 3849 m
-2762 3849 l
-2762 3850 l
-2564 3850 l
-2564 3850 m
-2763 3850 l
-2763 3852 l
-2564 3852 l
-2564 3852 m
-2764 3852 l
-2764 3853 l
-2564 3853 l
-2565 3853 m
-2764 3853 l
-2764 3855 l
-2565 3855 l
-2566 3855 m
-2765 3855 l
-2765 3858 l
-2566 3858 l
-2567 3858 m
-2766 3858 l
-2766 3860 l
-2567 3860 l
-2568 3860 m
-2767 3860 l
-2767 3863 l
-2568 3863 l
-2569 3863 m
-2768 3863 l
-2768 3865 l
-2569 3865 l
-2570 3865 m
-2769 3865 l
-2769 3868 l
-2570 3868 l
-2571 3868 m
-2770 3868 l
-2770 3870 l
-2571 3870 l
-2572 3870 m
-2771 3870 l
-2771 3873 l
-2572 3873 l
-2573 3873 m
-2772 3873 l
-2772 3875 l
-2573 3875 l
-2574 3875 m
-2773 3875 l
-2773 3878 l
-2574 3878 l
-2575 3878 m
-2774 3878 l
-2774 3880 l
-2575 3880 l
-2576 3880 m
-2775 3880 l
-2775 3883 l
-2576 3883 l
-2577 3883 m
-2776 3883 l
-2776 3885 l
-2577 3885 l
-2578 3885 m
-2777 3885 l
-2777 3888 l
-2578 3888 l
-2579 3888 m
-2778 3888 l
-2778 3890 l
-2579 3890 l
-2580 3890 m
-2779 3890 l
-2779 3893 l
-2580 3893 l
-2581 3893 m
-2780 3893 l
-2780 3894 l
-2581 3894 l
-2581 3894 m
-2780 3894 l
-2780 3895 l
-2581 3895 l
-2582 3895 m
-2779 3895 l
-2779 3896 l
-2582 3896 l
-2582 3896 m
-2777 3896 l
-2777 3897 l
-2582 3897 l
-2582 3897 m
-2774 3897 l
-2774 3898 l
-2582 3898 l
-2583 3898 m
-2772 3898 l
-2772 3899 l
-2583 3899 l
-2583 3899 m
-2769 3899 l
-2769 3900 l
-2583 3900 l
-2584 3900 m
-2767 3900 l
-2767 3901 l
-2584 3901 l
-2584 3901 m
-2764 3901 l
-2764 3902 l
-2584 3902 l
-2584 3902 m
-2762 3902 l
-2762 3903 l
-2584 3903 l
-2585 3903 m
-2759 3903 l
-2759 3904 l
-2585 3904 l
-2585 3904 m
-2757 3904 l
-2757 3905 l
-2585 3905 l
-2586 3905 m
-2754 3905 l
-2754 3906 l
-2586 3906 l
-2586 3906 m
-2752 3906 l
-2752 3907 l
-2586 3907 l
-2586 3907 m
-2749 3907 l
-2749 3908 l
-2586 3908 l
-2587 3908 m
-2747 3908 l
-2747 3909 l
-2587 3909 l
-2587 3909 m
-2744 3909 l
-2744 3910 l
-2587 3910 l
-2588 3910 m
-2741 3910 l
-2741 3911 l
-2588 3911 l
-2588 3911 m
-2739 3911 l
-2739 3912 l
-2588 3912 l
-2588 3912 m
-2736 3912 l
-2736 3913 l
-2588 3913 l
-2589 3913 m
-2734 3913 l
-2734 3914 l
-2589 3914 l
-2589 3914 m
-2731 3914 l
-2731 3915 l
-2589 3915 l
-2590 3915 m
-2729 3915 l
-2729 3916 l
-2590 3916 l
-2590 3916 m
-2726 3916 l
-2726 3917 l
-2590 3917 l
-2590 3917 m
-2724 3917 l
-2724 3918 l
-2590 3918 l
-2591 3918 m
-2721 3918 l
-2721 3919 l
-2591 3919 l
-2591 3919 m
-2719 3919 l
-2719 3920 l
-2591 3920 l
-2592 3920 m
-2716 3920 l
-2716 3921 l
-2592 3921 l
-2592 3921 m
-2714 3921 l
-2714 3922 l
-2592 3922 l
-2592 3922 m
-2711 3922 l
-2711 3923 l
-2592 3923 l
-2593 3923 m
-2708 3923 l
-2708 3924 l
-2593 3924 l
-2593 3924 m
-2706 3924 l
-2706 3925 l
-2593 3925 l
-2594 3925 m
-2703 3925 l
-2703 3926 l
-2594 3926 l
-2594 3926 m
-2701 3926 l
-2701 3927 l
-2594 3927 l
-2594 3927 m
-2698 3927 l
-2698 3928 l
-2594 3928 l
-2595 3928 m
-2696 3928 l
-2696 3929 l
-2595 3929 l
-2595 3929 m
-2693 3929 l
-2693 3930 l
-2595 3930 l
-2596 3930 m
-2691 3930 l
-2691 3931 l
-2596 3931 l
-2596 3931 m
-2688 3931 l
-2688 3932 l
-2596 3932 l
-2596 3932 m
-2686 3932 l
-2686 3933 l
-2596 3933 l
-2597 3933 m
-2683 3933 l
-2683 3934 l
-2597 3934 l
-2597 3934 m
-2681 3934 l
-2681 3935 l
-2597 3935 l
-2598 3935 m
-2678 3935 l
-2678 3936 l
-2598 3936 l
-2598 3936 m
-2675 3936 l
-2675 3937 l
-2598 3937 l
-2598 3937 m
-2673 3937 l
-2673 3938 l
-2598 3938 l
-2599 3938 m
-2670 3938 l
-2670 3939 l
-2599 3939 l
-2599 3939 m
-2668 3939 l
-2668 3940 l
-2599 3940 l
-2600 3940 m
-2665 3940 l
-2665 3941 l
-2600 3941 l
-2600 3941 m
-2663 3941 l
-2663 3942 l
-2600 3942 l
-2600 3942 m
-2660 3942 l
-2660 3943 l
-2600 3943 l
-2601 3943 m
-2658 3943 l
-2658 3944 l
-2601 3944 l
-2601 3944 m
-2655 3944 l
-2655 3945 l
-2601 3945 l
-2602 3945 m
-2653 3945 l
-2653 3946 l
-2602 3946 l
-2602 3946 m
-2650 3946 l
-2650 3947 l
-2602 3947 l
-2602 3947 m
-2648 3947 l
-2648 3948 l
-2602 3948 l
-2603 3948 m
-2645 3948 l
-2645 3949 l
-2603 3949 l
-2603 3949 m
-2642 3949 l
-2642 3950 l
-2603 3950 l
-2604 3950 m
-2640 3950 l
-2640 3951 l
-2604 3951 l
-2604 3951 m
-2637 3951 l
-2637 3952 l
-2604 3952 l
-2604 3952 m
-2635 3952 l
-2635 3953 l
-2604 3953 l
-2605 3953 m
-2632 3953 l
-2632 3954 l
-2605 3954 l
-2605 3954 m
-2630 3954 l
-2630 3955 l
-2605 3955 l
-2606 3955 m
-2627 3955 l
-2627 3956 l
-2606 3956 l
-2606 3956 m
-2625 3956 l
-2625 3957 l
-2606 3957 l
-2606 3957 m
-2622 3957 l
-2622 3958 l
-2606 3958 l
-2607 3958 m
-2620 3958 l
-2620 3959 l
-2607 3959 l
-2607 3959 m
-2617 3959 l
-2617 3960 l
-2607 3960 l
-2608 3960 m
-2615 3960 l
-2615 3961 l
-2608 3961 l
-2608 3961 m
-2612 3961 l
-2612 3962 l
-2608 3962 l
-Y
-2779.5 3894.8 m
-2735 3782 l
-2564 3850 l
-2609 3962 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2675 3824 m
-2714 3808 l
-2732 3842 l
-2726 3840 l
-2713 3840 l
-2701 3845 l
-2691 3853 l
-2687 3864 l
-2687 3877 l
-2690 3885 l
-2699 3895 l
-2710 3900 l
-2723 3899 l
-2735 3895 l
-2745 3886 l
-2747 3881 l
-2748 3871 l
-S
-2625 3844 m
-2638 3843 l
-2645 3849 l
-2648 3857 l
-2647 3866 l
-2641 3873 l
-2627 3883 l
-2617 3892 l
-2612 3903 l
-2611 3912 l
-2616 3924 l
-2623 3930 l
-2628 3932 l
-2641 3932 l
-2657 3925 l
-2667 3917 l
-2669 3911 l
-2670 3902 l
-2666 3891 l
-2659 3884 l
-2648 3880 l
-2635 3880 l
-2617 3883 l
-2608 3882 l
-2601 3876 l
-2598 3868 l
-2599 3858 l
-2609 3850 l
-2625 3844 l
-S
-1 g
-3269 3569 m
-3273 3569 l
-3273 3570 l
-3269 3570 l
-3267 3570 m
-3273 3570 l
-3273 3571 l
-3267 3571 l
-3264 3571 m
-3274 3571 l
-3274 3572 l
-3264 3572 l
-3262 3572 m
-3274 3572 l
-3274 3573 l
-3262 3573 l
-3259 3573 m
-3274 3573 l
-3274 3574 l
-3259 3574 l
-3257 3574 m
-3275 3574 l
-3275 3575 l
-3257 3575 l
-3254 3575 m
-3275 3575 l
-3275 3576 l
-3254 3576 l
-3252 3576 m
-3276 3576 l
-3276 3577 l
-3252 3577 l
-3249 3577 m
-3276 3577 l
-3276 3578 l
-3249 3578 l
-3247 3578 m
-3276 3578 l
-3276 3579 l
-3247 3579 l
-3244 3579 m
-3277 3579 l
-3277 3580 l
-3244 3580 l
-3242 3580 m
-3277 3580 l
-3277 3581 l
-3242 3581 l
-3239 3581 m
-3278 3581 l
-3278 3582 l
-3239 3582 l
-3237 3582 m
-3278 3582 l
-3278 3583 l
-3237 3583 l
-3234 3583 m
-3278 3583 l
-3278 3584 l
-3234 3584 l
-3232 3584 m
-3279 3584 l
-3279 3585 l
-3232 3585 l
-3229 3585 m
-3279 3585 l
-3279 3586 l
-3229 3586 l
-3227 3586 m
-3280 3586 l
-3280 3587 l
-3227 3587 l
-3224 3587 m
-3280 3587 l
-3280 3588 l
-3224 3588 l
-3222 3588 m
-3280 3588 l
-3280 3589 l
-3222 3589 l
-3219 3589 m
-3281 3589 l
-3281 3590 l
-3219 3590 l
-3217 3590 m
-3281 3590 l
-3281 3591 l
-3217 3591 l
-3214 3591 m
-3282 3591 l
-3282 3592 l
-3214 3592 l
-3212 3592 m
-3282 3592 l
-3282 3593 l
-3212 3593 l
-3209 3593 m
-3282 3593 l
-3282 3594 l
-3209 3594 l
-3207 3594 m
-3283 3594 l
-3283 3595 l
-3207 3595 l
-3204 3595 m
-3283 3595 l
-3283 3596 l
-3204 3596 l
-3202 3596 m
-3284 3596 l
-3284 3597 l
-3202 3597 l
-3199 3597 m
-3284 3597 l
-3284 3598 l
-3199 3598 l
-3197 3598 m
-3284 3598 l
-3284 3599 l
-3197 3599 l
-3194 3599 m
-3285 3599 l
-3285 3600 l
-3194 3600 l
-3192 3600 m
-3285 3600 l
-3285 3601 l
-3192 3601 l
-3189 3601 m
-3286 3601 l
-3286 3602 l
-3189 3602 l
-3187 3602 m
-3286 3602 l
-3286 3603 l
-3187 3603 l
-3184 3603 m
-3286 3603 l
-3286 3604 l
-3184 3604 l
-3182 3604 m
-3287 3604 l
-3287 3605 l
-3182 3605 l
-3179 3605 m
-3287 3605 l
-3287 3606 l
-3179 3606 l
-3177 3606 m
-3288 3606 l
-3288 3607 l
-3177 3607 l
-3174 3607 m
-3288 3607 l
-3288 3608 l
-3174 3608 l
-3172 3608 m
-3288 3608 l
-3288 3609 l
-3172 3609 l
-3169 3609 m
-3289 3609 l
-3289 3610 l
-3169 3610 l
-3167 3610 m
-3289 3610 l
-3289 3611 l
-3167 3611 l
-3164 3611 m
-3290 3611 l
-3290 3612 l
-3164 3612 l
-3162 3612 m
-3290 3612 l
-3290 3613 l
-3162 3613 l
-3159 3613 m
-3290 3613 l
-3290 3614 l
-3159 3614 l
-3157 3614 m
-3291 3614 l
-3291 3615 l
-3157 3615 l
-3154 3615 m
-3291 3615 l
-3291 3616 l
-3154 3616 l
-3152 3616 m
-3292 3616 l
-3292 3617 l
-3152 3617 l
-3149 3617 m
-3292 3617 l
-3292 3618 l
-3149 3618 l
-3147 3618 m
-3292 3618 l
-3292 3619 l
-3147 3619 l
-3144 3619 m
-3293 3619 l
-3293 3620 l
-3144 3620 l
-3142 3620 m
-3293 3620 l
-3293 3621 l
-3142 3621 l
-3139 3621 m
-3294 3621 l
-3294 3622 l
-3139 3622 l
-3137 3622 m
-3294 3622 l
-3294 3623 l
-3137 3623 l
-3134 3623 m
-3294 3623 l
-3294 3624 l
-3134 3624 l
-3132 3624 m
-3295 3624 l
-3295 3625 l
-3132 3625 l
-3129 3625 m
-3295 3625 l
-3295 3626 l
-3129 3626 l
-3127 3626 m
-3296 3626 l
-3296 3627 l
-3127 3627 l
-3124 3627 m
-3296 3627 l
-3296 3628 l
-3124 3628 l
-3122 3628 m
-3296 3628 l
-3296 3629 l
-3122 3629 l
-3119 3629 m
-3297 3629 l
-3297 3630 l
-3119 3630 l
-3117 3630 m
-3297 3630 l
-3297 3631 l
-3117 3631 l
-3114 3631 m
-3298 3631 l
-3298 3632 l
-3114 3632 l
-3112 3632 m
-3298 3632 l
-3298 3633 l
-3112 3633 l
-3109 3633 m
-3298 3633 l
-3298 3634 l
-3109 3634 l
-3107 3634 m
-3299 3634 l
-3299 3635 l
-3107 3635 l
-3104 3635 m
-3299 3635 l
-3299 3636 l
-3104 3636 l
-3102 3636 m
-3300 3636 l
-3300 3637 l
-3102 3637 l
-3102 3637 m
-3300 3637 l
-3300 3639 l
-3102 3639 l
-3102 3639 m
-3301 3639 l
-3301 3640 l
-3102 3640 l
-3103 3640 m
-3301 3640 l
-3301 3641 l
-3103 3641 l
-3103 3641 m
-3302 3641 l
-3302 3643 l
-3103 3643 l
-3104 3643 m
-3302 3643 l
-3302 3644 l
-3104 3644 l
-3104 3644 m
-3303 3644 l
-3303 3645 l
-3104 3645 l
-3105 3645 m
-3303 3645 l
-3303 3646 l
-3105 3646 l
-3105 3646 m
-3304 3646 l
-3304 3648 l
-3105 3648 l
-3106 3648 m
-3304 3648 l
-3304 3649 l
-3106 3649 l
-3106 3649 m
-3305 3649 l
-3305 3650 l
-3106 3650 l
-3107 3650 m
-3305 3650 l
-3305 3651 l
-3107 3651 l
-3107 3651 m
-3306 3651 l
-3306 3653 l
-3107 3653 l
-3108 3653 m
-3306 3653 l
-3306 3654 l
-3108 3654 l
-3108 3654 m
-3307 3654 l
-3307 3655 l
-3108 3655 l
-3109 3655 m
-3307 3655 l
-3307 3656 l
-3109 3656 l
-3109 3656 m
-3308 3656 l
-3308 3658 l
-3109 3658 l
-3110 3658 m
-3308 3658 l
-3308 3659 l
-3110 3659 l
-3110 3659 m
-3309 3659 l
-3309 3661 l
-3110 3661 l
-3111 3661 m
-3310 3661 l
-3310 3663 l
-3111 3663 l
-3112 3663 m
-3310 3663 l
-3310 3664 l
-3112 3664 l
-3112 3664 m
-3311 3664 l
-3311 3666 l
-3112 3666 l
-3113 3666 m
-3312 3666 l
-3312 3668 l
-3113 3668 l
-3114 3668 m
-3312 3668 l
-3312 3669 l
-3114 3669 l
-3114 3669 m
-3313 3669 l
-3313 3671 l
-3114 3671 l
-3115 3671 m
-3314 3671 l
-3314 3673 l
-3115 3673 l
-3116 3673 m
-3314 3673 l
-3314 3674 l
-3116 3674 l
-3116 3674 m
-3315 3674 l
-3315 3676 l
-3116 3676 l
-3117 3676 m
-3316 3676 l
-3316 3679 l
-3117 3679 l
-3118 3679 m
-3317 3679 l
-3317 3681 l
-3118 3681 l
-3119 3681 m
-3317 3681 l
-3317 3682 l
-3119 3682 l
-3119 3682 m
-3317 3682 l
-3317 3683 l
-3119 3683 l
-3119 3683 m
-3315 3683 l
-3315 3684 l
-3119 3684 l
-3120 3684 m
-3312 3684 l
-3312 3685 l
-3120 3685 l
-3120 3685 m
-3310 3685 l
-3310 3686 l
-3120 3686 l
-3121 3686 m
-3307 3686 l
-3307 3687 l
-3121 3687 l
-3121 3687 m
-3305 3687 l
-3305 3688 l
-3121 3688 l
-3121 3688 m
-3302 3688 l
-3302 3689 l
-3121 3689 l
-3122 3689 m
-3300 3689 l
-3300 3690 l
-3122 3690 l
-3122 3690 m
-3297 3690 l
-3297 3691 l
-3122 3691 l
-3123 3691 m
-3295 3691 l
-3295 3692 l
-3123 3692 l
-3123 3692 m
-3292 3692 l
-3292 3693 l
-3123 3693 l
-3123 3693 m
-3290 3693 l
-3290 3694 l
-3123 3694 l
-3124 3694 m
-3287 3694 l
-3287 3695 l
-3124 3695 l
-3124 3695 m
-3285 3695 l
-3285 3696 l
-3124 3696 l
-3124 3696 m
-3282 3696 l
-3282 3697 l
-3124 3697 l
-3125 3697 m
-3280 3697 l
-3280 3698 l
-3125 3698 l
-3125 3698 m
-3277 3698 l
-3277 3699 l
-3125 3699 l
-3126 3699 m
-3275 3699 l
-3275 3700 l
-3126 3700 l
-3126 3700 m
-3272 3700 l
-3272 3701 l
-3126 3701 l
-3126 3701 m
-3270 3701 l
-3270 3702 l
-3126 3702 l
-3127 3702 m
-3267 3702 l
-3267 3703 l
-3127 3703 l
-3127 3703 m
-3265 3703 l
-3265 3704 l
-3127 3704 l
-3128 3704 m
-3262 3704 l
-3262 3705 l
-3128 3705 l
-3128 3705 m
-3259 3705 l
-3259 3706 l
-3128 3706 l
-3128 3706 m
-3257 3706 l
-3257 3707 l
-3128 3707 l
-3129 3707 m
-3254 3707 l
-3254 3708 l
-3129 3708 l
-3129 3708 m
-3252 3708 l
-3252 3709 l
-3129 3709 l
-3130 3709 m
-3249 3709 l
-3249 3710 l
-3130 3710 l
-3130 3710 m
-3247 3710 l
-3247 3711 l
-3130 3711 l
-3130 3711 m
-3244 3711 l
-3244 3712 l
-3130 3712 l
-3131 3712 m
-3242 3712 l
-3242 3713 l
-3131 3713 l
-3131 3713 m
-3239 3713 l
-3239 3714 l
-3131 3714 l
-3131 3714 m
-3237 3714 l
-3237 3715 l
-3131 3715 l
-3132 3715 m
-3234 3715 l
-3234 3716 l
-3132 3716 l
-3132 3716 m
-3232 3716 l
-3232 3717 l
-3132 3717 l
-3133 3717 m
-3229 3717 l
-3229 3718 l
-3133 3718 l
-3133 3718 m
-3227 3718 l
-3227 3719 l
-3133 3719 l
-3133 3719 m
-3224 3719 l
-3224 3720 l
-3133 3720 l
-3134 3720 m
-3222 3720 l
-3222 3721 l
-3134 3721 l
-3134 3721 m
-3219 3721 l
-3219 3722 l
-3134 3722 l
-3135 3722 m
-3217 3722 l
-3217 3723 l
-3135 3723 l
-3135 3723 m
-3214 3723 l
-3214 3724 l
-3135 3724 l
-3135 3724 m
-3212 3724 l
-3212 3725 l
-3135 3725 l
-3136 3725 m
-3209 3725 l
-3209 3726 l
-3136 3726 l
-3136 3726 m
-3207 3726 l
-3207 3727 l
-3136 3727 l
-3137 3727 m
-3204 3727 l
-3204 3728 l
-3137 3728 l
-3137 3728 m
-3202 3728 l
-3202 3729 l
-3137 3729 l
-3137 3729 m
-3199 3729 l
-3199 3730 l
-3137 3730 l
-3138 3730 m
-3197 3730 l
-3197 3731 l
-3138 3731 l
-3138 3731 m
-3194 3731 l
-3194 3732 l
-3138 3732 l
-3138 3732 m
-3192 3732 l
-3192 3733 l
-3138 3733 l
-3139 3733 m
-3189 3733 l
-3189 3734 l
-3139 3734 l
-3139 3734 m
-3187 3734 l
-3187 3735 l
-3139 3735 l
-3140 3735 m
-3184 3735 l
-3184 3736 l
-3140 3736 l
-3140 3736 m
-3182 3736 l
-3182 3737 l
-3140 3737 l
-3140 3737 m
-3179 3737 l
-3179 3738 l
-3140 3738 l
-3141 3738 m
-3177 3738 l
-3177 3739 l
-3141 3739 l
-3141 3739 m
-3174 3739 l
-3174 3740 l
-3141 3740 l
-3142 3740 m
-3172 3740 l
-3172 3741 l
-3142 3741 l
-3142 3741 m
-3169 3741 l
-3169 3742 l
-3142 3742 l
-3142 3742 m
-3167 3742 l
-3167 3743 l
-3142 3743 l
-3143 3743 m
-3164 3743 l
-3164 3744 l
-3143 3744 l
-3143 3744 m
-3162 3744 l
-3162 3745 l
-3143 3745 l
-3144 3745 m
-3159 3745 l
-3159 3746 l
-3144 3746 l
-3144 3746 m
-3157 3746 l
-3157 3747 l
-3144 3747 l
-3144 3747 m
-3154 3747 l
-3154 3748 l
-3144 3748 l
-3145 3748 m
-3152 3748 l
-3152 3749 l
-3145 3749 l
-3145 3749 m
-3149 3749 l
-3149 3750 l
-3145 3750 l
-Y
-3317 3681.9 m
-3272 3569 l
-3102 3637 l
-3146 3750 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3213 3611 m
-3251 3596 l
-3269 3629 l
-3264 3627 l
-3250 3627 l
-3239 3632 l
-3229 3640 l
-3224 3651 l
-3225 3665 l
-3228 3672 l
-3236 3682 l
-3247 3687 l
-3260 3686 l
-3272 3682 l
-3282 3673 l
-3284 3668 l
-3285 3659 l
-S
-3136 3655 m
-3136 3646 l
-3147 3637 l
-3154 3634 l
-3167 3633 l
-3180 3642 l
-3191 3660 l
-3199 3679 l
-3201 3696 l
-3197 3707 l
-3187 3716 l
-3183 3717 l
-3170 3718 l
-3159 3713 l
-3150 3703 l
-3149 3699 l
-3148 3686 l
-3153 3675 l
-3163 3667 l
-3167 3665 l
-3180 3664 l
-3191 3669 l
-3199 3679 l
-S
-1 g
-4344 3144 m
-4348 3144 l
-4348 3145 l
-4344 3145 l
-4341 3145 m
-4348 3145 l
-4348 3146 l
-4341 3146 l
-4339 3146 m
-4349 3146 l
-4349 3147 l
-4339 3147 l
-4336 3147 m
-4349 3147 l
-4349 3148 l
-4336 3148 l
-4334 3148 m
-4350 3148 l
-4350 3149 l
-4334 3149 l
-4331 3149 m
-4350 3149 l
-4350 3150 l
-4331 3150 l
-4329 3150 m
-4350 3150 l
-4350 3151 l
-4329 3151 l
-4326 3151 m
-4351 3151 l
-4351 3152 l
-4326 3152 l
-4324 3152 m
-4351 3152 l
-4351 3153 l
-4324 3153 l
-4321 3153 m
-4352 3153 l
-4352 3154 l
-4321 3154 l
-4319 3154 m
-4352 3154 l
-4352 3155 l
-4319 3155 l
-4316 3155 m
-4352 3155 l
-4352 3156 l
-4316 3156 l
-4314 3156 m
-4353 3156 l
-4353 3157 l
-4314 3157 l
-4311 3157 m
-4353 3157 l
-4353 3158 l
-4311 3158 l
-4308 3158 m
-4354 3158 l
-4354 3159 l
-4308 3159 l
-4306 3159 m
-4354 3159 l
-4354 3160 l
-4306 3160 l
-4303 3160 m
-4354 3160 l
-4354 3161 l
-4303 3161 l
-4301 3161 m
-4355 3161 l
-4355 3162 l
-4301 3162 l
-4298 3162 m
-4355 3162 l
-4355 3163 l
-4298 3163 l
-4296 3163 m
-4356 3163 l
-4356 3164 l
-4296 3164 l
-4293 3164 m
-4356 3164 l
-4356 3165 l
-4293 3165 l
-4291 3165 m
-4356 3165 l
-4356 3166 l
-4291 3166 l
-4288 3166 m
-4357 3166 l
-4357 3167 l
-4288 3167 l
-4286 3167 m
-4357 3167 l
-4357 3168 l
-4286 3168 l
-4283 3168 m
-4358 3168 l
-4358 3169 l
-4283 3169 l
-4281 3169 m
-4358 3169 l
-4358 3170 l
-4281 3170 l
-4278 3170 m
-4358 3170 l
-4358 3171 l
-4278 3171 l
-4275 3171 m
-4359 3171 l
-4359 3172 l
-4275 3172 l
-4273 3172 m
-4359 3172 l
-4359 3173 l
-4273 3173 l
-4270 3173 m
-4360 3173 l
-4360 3174 l
-4270 3174 l
-4268 3174 m
-4360 3174 l
-4360 3175 l
-4268 3175 l
-4265 3175 m
-4360 3175 l
-4360 3176 l
-4265 3176 l
-4263 3176 m
-4361 3176 l
-4361 3177 l
-4263 3177 l
-4260 3177 m
-4361 3177 l
-4361 3178 l
-4260 3178 l
-4258 3178 m
-4362 3178 l
-4362 3179 l
-4258 3179 l
-4255 3179 m
-4362 3179 l
-4362 3180 l
-4255 3180 l
-4253 3180 m
-4362 3180 l
-4362 3181 l
-4253 3181 l
-4250 3181 m
-4363 3181 l
-4363 3182 l
-4250 3182 l
-4248 3182 m
-4363 3182 l
-4363 3183 l
-4248 3183 l
-4245 3183 m
-4364 3183 l
-4364 3184 l
-4245 3184 l
-4242 3184 m
-4364 3184 l
-4364 3185 l
-4242 3185 l
-4240 3185 m
-4364 3185 l
-4364 3186 l
-4240 3186 l
-4237 3186 m
-4365 3186 l
-4365 3187 l
-4237 3187 l
-4235 3187 m
-4365 3187 l
-4365 3188 l
-4235 3188 l
-4232 3188 m
-4366 3188 l
-4366 3189 l
-4232 3189 l
-4230 3189 m
-4366 3189 l
-4366 3190 l
-4230 3190 l
-4227 3190 m
-4366 3190 l
-4366 3191 l
-4227 3191 l
-4225 3191 m
-4367 3191 l
-4367 3192 l
-4225 3192 l
-4222 3192 m
-4367 3192 l
-4367 3193 l
-4222 3193 l
-4220 3193 m
-4368 3193 l
-4368 3194 l
-4220 3194 l
-4217 3194 m
-4368 3194 l
-4368 3195 l
-4217 3195 l
-4215 3195 m
-4368 3195 l
-4368 3196 l
-4215 3196 l
-4212 3196 m
-4369 3196 l
-4369 3197 l
-4212 3197 l
-4209 3197 m
-4369 3197 l
-4369 3198 l
-4209 3198 l
-4207 3198 m
-4370 3198 l
-4370 3199 l
-4207 3199 l
-4204 3199 m
-4370 3199 l
-4370 3200 l
-4204 3200 l
-4202 3200 m
-4370 3200 l
-4370 3201 l
-4202 3201 l
-4199 3201 m
-4371 3201 l
-4371 3202 l
-4199 3202 l
-4197 3202 m
-4371 3202 l
-4371 3203 l
-4197 3203 l
-4194 3203 m
-4372 3203 l
-4372 3204 l
-4194 3204 l
-4192 3204 m
-4372 3204 l
-4372 3205 l
-4192 3205 l
-4189 3205 m
-4372 3205 l
-4372 3206 l
-4189 3206 l
-4187 3206 m
-4373 3206 l
-4373 3207 l
-4187 3207 l
-4184 3207 m
-4373 3207 l
-4373 3208 l
-4184 3208 l
-4182 3208 m
-4374 3208 l
-4374 3209 l
-4182 3209 l
-4179 3209 m
-4374 3209 l
-4374 3210 l
-4179 3210 l
-4177 3210 m
-4374 3210 l
-4374 3211 l
-4177 3211 l
-4177 3211 m
-4375 3211 l
-4375 3213 l
-4177 3213 l
-4177 3213 m
-4376 3213 l
-4376 3214 l
-4177 3214 l
-4178 3214 m
-4376 3214 l
-4376 3216 l
-4178 3216 l
-4178 3216 m
-4377 3216 l
-4377 3217 l
-4178 3217 l
-4179 3217 m
-4377 3217 l
-4377 3218 l
-4179 3218 l
-4179 3218 m
-4378 3218 l
-4378 3219 l
-4179 3219 l
-4180 3219 m
-4378 3219 l
-4378 3221 l
-4180 3221 l
-4180 3221 m
-4379 3221 l
-4379 3222 l
-4180 3222 l
-4181 3222 m
-4379 3222 l
-4379 3223 l
-4181 3223 l
-4181 3223 m
-4380 3223 l
-4380 3224 l
-4181 3224 l
-4182 3224 m
-4380 3224 l
-4380 3226 l
-4182 3226 l
-4182 3226 m
-4381 3226 l
-4381 3227 l
-4182 3227 l
-4183 3227 m
-4381 3227 l
-4381 3228 l
-4183 3228 l
-4183 3228 m
-4382 3228 l
-4382 3229 l
-4183 3229 l
-4184 3229 m
-4382 3229 l
-4382 3231 l
-4184 3231 l
-4184 3231 m
-4383 3231 l
-4383 3232 l
-4184 3232 l
-4185 3232 m
-4383 3232 l
-4383 3233 l
-4185 3233 l
-4185 3233 m
-4384 3233 l
-4384 3235 l
-4185 3235 l
-4186 3235 m
-4384 3235 l
-4384 3236 l
-4186 3236 l
-4186 3236 m
-4385 3236 l
-4385 3237 l
-4186 3237 l
-4187 3237 m
-4385 3237 l
-4385 3238 l
-4187 3238 l
-4187 3238 m
-4386 3238 l
-4386 3240 l
-4187 3240 l
-4188 3240 m
-4386 3240 l
-4386 3241 l
-4188 3241 l
-4188 3241 m
-4387 3241 l
-4387 3242 l
-4188 3242 l
-4189 3242 m
-4387 3242 l
-4387 3243 l
-4189 3243 l
-4189 3243 m
-4388 3243 l
-4388 3245 l
-4189 3245 l
-4190 3245 m
-4388 3245 l
-4388 3246 l
-4190 3246 l
-4190 3246 m
-4389 3246 l
-4389 3247 l
-4190 3247 l
-4191 3247 m
-4389 3247 l
-4389 3248 l
-4191 3248 l
-4191 3248 m
-4390 3248 l
-4390 3250 l
-4191 3250 l
-4192 3250 m
-4390 3250 l
-4390 3251 l
-4192 3251 l
-4192 3251 m
-4391 3251 l
-4391 3253 l
-4192 3253 l
-4193 3253 m
-4392 3253 l
-4392 3255 l
-4193 3255 l
-4194 3255 m
-4392 3255 l
-4392 3256 l
-4194 3256 l
-4194 3256 m
-4392 3256 l
-4392 3257 l
-4194 3257 l
-4194 3257 m
-4390 3257 l
-4390 3258 l
-4194 3258 l
-4195 3258 m
-4388 3258 l
-4388 3259 l
-4195 3259 l
-4195 3259 m
-4385 3259 l
-4385 3260 l
-4195 3260 l
-4196 3260 m
-4383 3260 l
-4383 3261 l
-4196 3261 l
-4196 3261 m
-4380 3261 l
-4380 3262 l
-4196 3262 l
-4196 3262 m
-4378 3262 l
-4378 3263 l
-4196 3263 l
-4197 3263 m
-4375 3263 l
-4375 3264 l
-4197 3264 l
-4197 3264 m
-4373 3264 l
-4373 3265 l
-4197 3265 l
-4198 3265 m
-4370 3265 l
-4370 3266 l
-4198 3266 l
-4198 3266 m
-4368 3266 l
-4368 3267 l
-4198 3267 l
-4198 3267 m
-4365 3267 l
-4365 3268 l
-4198 3268 l
-4199 3268 m
-4363 3268 l
-4363 3269 l
-4199 3269 l
-4199 3269 m
-4360 3269 l
-4360 3270 l
-4199 3270 l
-4199 3270 m
-4357 3270 l
-4357 3271 l
-4199 3271 l
-4200 3271 m
-4355 3271 l
-4355 3272 l
-4200 3272 l
-4200 3272 m
-4352 3272 l
-4352 3273 l
-4200 3273 l
-4201 3273 m
-4350 3273 l
-4350 3274 l
-4201 3274 l
-4201 3274 m
-4347 3274 l
-4347 3275 l
-4201 3275 l
-4201 3275 m
-4345 3275 l
-4345 3276 l
-4201 3276 l
-4202 3276 m
-4342 3276 l
-4342 3277 l
-4202 3277 l
-4202 3277 m
-4340 3277 l
-4340 3278 l
-4202 3278 l
-4203 3278 m
-4337 3278 l
-4337 3279 l
-4203 3279 l
-4203 3279 m
-4335 3279 l
-4335 3280 l
-4203 3280 l
-4203 3280 m
-4332 3280 l
-4332 3281 l
-4203 3281 l
-4204 3281 m
-4330 3281 l
-4330 3282 l
-4204 3282 l
-4204 3282 m
-4327 3282 l
-4327 3283 l
-4204 3283 l
-4205 3283 m
-4325 3283 l
-4325 3284 l
-4205 3284 l
-4205 3284 m
-4322 3284 l
-4322 3285 l
-4205 3285 l
-4205 3285 m
-4320 3285 l
-4320 3286 l
-4205 3286 l
-4206 3286 m
-4317 3286 l
-4317 3287 l
-4206 3287 l
-4206 3287 m
-4315 3287 l
-4315 3288 l
-4206 3288 l
-4206 3288 m
-4312 3288 l
-4312 3289 l
-4206 3289 l
-4207 3289 m
-4310 3289 l
-4310 3290 l
-4207 3290 l
-4207 3290 m
-4307 3290 l
-4307 3291 l
-4207 3291 l
-4208 3291 m
-4305 3291 l
-4305 3292 l
-4208 3292 l
-4208 3292 m
-4302 3292 l
-4302 3293 l
-4208 3293 l
-4208 3293 m
-4300 3293 l
-4300 3294 l
-4208 3294 l
-4209 3294 m
-4297 3294 l
-4297 3295 l
-4209 3295 l
-4209 3295 m
-4295 3295 l
-4295 3296 l
-4209 3296 l
-4210 3296 m
-4292 3296 l
-4292 3297 l
-4210 3297 l
-4210 3297 m
-4289 3297 l
-4289 3298 l
-4210 3298 l
-4210 3298 m
-4287 3298 l
-4287 3299 l
-4210 3299 l
-4211 3299 m
-4284 3299 l
-4284 3300 l
-4211 3300 l
-4211 3300 m
-4282 3300 l
-4282 3301 l
-4211 3301 l
-4212 3301 m
-4279 3301 l
-4279 3302 l
-4212 3302 l
-4212 3302 m
-4277 3302 l
-4277 3303 l
-4212 3303 l
-4212 3303 m
-4274 3303 l
-4274 3304 l
-4212 3304 l
-4213 3304 m
-4272 3304 l
-4272 3305 l
-4213 3305 l
-4213 3305 m
-4269 3305 l
-4269 3306 l
-4213 3306 l
-4213 3306 m
-4267 3306 l
-4267 3307 l
-4213 3307 l
-4214 3307 m
-4264 3307 l
-4264 3308 l
-4214 3308 l
-4214 3308 m
-4262 3308 l
-4262 3309 l
-4214 3309 l
-4215 3309 m
-4259 3309 l
-4259 3310 l
-4215 3310 l
-4215 3310 m
-4257 3310 l
-4257 3311 l
-4215 3311 l
-4215 3311 m
-4254 3311 l
-4254 3312 l
-4215 3312 l
-4216 3312 m
-4252 3312 l
-4252 3313 l
-4216 3313 l
-4216 3313 m
-4249 3313 l
-4249 3314 l
-4216 3314 l
-4217 3314 m
-4247 3314 l
-4247 3315 l
-4217 3315 l
-4217 3315 m
-4244 3315 l
-4244 3316 l
-4217 3316 l
-4217 3316 m
-4242 3316 l
-4242 3317 l
-4217 3317 l
-4218 3317 m
-4239 3317 l
-4239 3318 l
-4218 3318 l
-4218 3318 m
-4237 3318 l
-4237 3319 l
-4218 3319 l
-4219 3319 m
-4234 3319 l
-4234 3320 l
-4219 3320 l
-4219 3320 m
-4232 3320 l
-4232 3321 l
-4219 3321 l
-4219 3321 m
-4229 3321 l
-4229 3322 l
-4219 3322 l
-4220 3322 m
-4227 3322 l
-4227 3323 l
-4220 3323 l
-4220 3323 m
-4224 3323 l
-4224 3324 l
-4220 3324 l
-Y
-4392 3256.1 m
-4347 3144 l
-4177 3211 l
-4221 3324 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4288 3185 m
-4326 3170 l
-4344 3203 l
-4339 3201 l
-4325 3202 l
-4314 3206 l
-4304 3215 l
-4299 3226 l
-4300 3239 l
-4303 3247 l
-4311 3257 l
-4322 3261 l
-4335 3261 l
-4347 3256 l
-4357 3247 l
-4359 3242 l
-4360 3233 l
-S
-4260 3218 m
-4259 3215 l
-4252 3208 l
-4246 3206 l
-4237 3205 l
-4221 3211 l
-4215 3218 l
-4213 3224 l
-4212 3233 l
-4215 3241 l
-4222 3247 l
-4235 3256 l
-4289 3279 l
-4234 3301 l
-S
-1 g
-4877 2933 m
-4878 2933 l
-4878 2934 l
-4877 2934 l
-4874 2934 m
-4878 2934 l
-4878 2935 l
-4874 2935 l
-4872 2935 m
-4878 2935 l
-4878 2936 l
-4872 2936 l
-4869 2936 m
-4878 2936 l
-4878 2937 l
-4869 2937 l
-4867 2937 m
-4878 2937 l
-4878 2938 l
-4867 2938 l
-4864 2938 m
-4878 2938 l
-4878 2939 l
-4864 2939 l
-4862 2939 m
-4878 2939 l
-4878 2940 l
-4862 2940 l
-4859 2940 m
-4878 2940 l
-4878 2941 l
-4859 2941 l
-4856 2941 m
-4878 2941 l
-4878 2942 l
-4856 2942 l
-4854 2942 m
-4878 2942 l
-4878 2943 l
-4854 2943 l
-4851 2943 m
-4878 2943 l
-4878 2944 l
-4851 2944 l
-4849 2944 m
-4878 2944 l
-4878 2945 l
-4849 2945 l
-4846 2945 m
-4878 2945 l
-4878 2946 l
-4846 2946 l
-4844 2946 m
-4878 2946 l
-4878 2947 l
-4844 2947 l
-4841 2947 m
-4878 2947 l
-4878 2948 l
-4841 2948 l
-4839 2948 m
-4878 2948 l
-4878 2949 l
-4839 2949 l
-4836 2949 m
-4878 2949 l
-4878 2950 l
-4836 2950 l
-4833 2950 m
-4878 2950 l
-4878 2951 l
-4833 2951 l
-4831 2951 m
-4878 2951 l
-4878 2952 l
-4831 2952 l
-4828 2952 m
-4878 2952 l
-4878 2953 l
-4828 2953 l
-4826 2953 m
-4878 2953 l
-4878 2954 l
-4826 2954 l
-4823 2954 m
-4878 2954 l
-4878 2955 l
-4823 2955 l
-4821 2955 m
-4878 2955 l
-4878 2956 l
-4821 2956 l
-4818 2956 m
-4878 2956 l
-4878 2957 l
-4818 2957 l
-4816 2957 m
-4878 2957 l
-4878 2958 l
-4816 2958 l
-4813 2958 m
-4878 2958 l
-4878 2959 l
-4813 2959 l
-4810 2959 m
-4878 2959 l
-4878 2960 l
-4810 2960 l
-4808 2960 m
-4878 2960 l
-4878 2961 l
-4808 2961 l
-4805 2961 m
-4878 2961 l
-4878 2962 l
-4805 2962 l
-4803 2962 m
-4878 2962 l
-4878 2963 l
-4803 2963 l
-4800 2963 m
-4878 2963 l
-4878 2964 l
-4800 2964 l
-4798 2964 m
-4878 2964 l
-4878 2965 l
-4798 2965 l
-4795 2965 m
-4878 2965 l
-4878 2966 l
-4795 2966 l
-4793 2966 m
-4878 2966 l
-4878 2967 l
-4793 2967 l
-4790 2967 m
-4878 2967 l
-4878 2968 l
-4790 2968 l
-4788 2968 m
-4878 2968 l
-4878 2969 l
-4788 2969 l
-4785 2969 m
-4878 2969 l
-4878 2970 l
-4785 2970 l
-4782 2970 m
-4878 2970 l
-4878 2971 l
-4782 2971 l
-4780 2971 m
-4878 2971 l
-4878 2972 l
-4780 2972 l
-4777 2972 m
-4878 2972 l
-4878 2973 l
-4777 2973 l
-4775 2973 m
-4878 2973 l
-4878 2974 l
-4775 2974 l
-4772 2974 m
-4878 2974 l
-4878 2975 l
-4772 2975 l
-4770 2975 m
-4878 2975 l
-4878 2976 l
-4770 2976 l
-4767 2976 m
-4878 2976 l
-4878 2977 l
-4767 2977 l
-4765 2977 m
-4878 2977 l
-4878 2978 l
-4765 2978 l
-4762 2978 m
-4878 2978 l
-4878 2979 l
-4762 2979 l
-4759 2979 m
-4878 2979 l
-4878 2980 l
-4759 2980 l
-4757 2980 m
-4878 2980 l
-4878 2981 l
-4757 2981 l
-4754 2981 m
-4878 2981 l
-4878 2982 l
-4754 2982 l
-4752 2982 m
-4878 2982 l
-4878 2983 l
-4752 2983 l
-4749 2983 m
-4878 2983 l
-4878 2984 l
-4749 2984 l
-4747 2984 m
-4878 2984 l
-4878 2985 l
-4747 2985 l
-4744 2985 m
-4878 2985 l
-4878 2986 l
-4744 2986 l
-4742 2986 m
-4878 2986 l
-4878 2987 l
-4742 2987 l
-4739 2987 m
-4878 2987 l
-4878 2988 l
-4739 2988 l
-4736 2988 m
-4878 2988 l
-4878 2989 l
-4736 2989 l
-4734 2989 m
-4878 2989 l
-4878 2990 l
-4734 2990 l
-4731 2990 m
-4878 2990 l
-4878 2991 l
-4731 2991 l
-4729 2991 m
-4878 2991 l
-4878 2992 l
-4729 2992 l
-4726 2992 m
-4878 2992 l
-4878 2993 l
-4726 2993 l
-4724 2993 m
-4878 2993 l
-4878 2994 l
-4724 2994 l
-4721 2994 m
-4878 2994 l
-4878 2995 l
-4721 2995 l
-4719 2995 m
-4878 2995 l
-4878 2996 l
-4719 2996 l
-4716 2996 m
-4878 2996 l
-4878 2997 l
-4716 2997 l
-4714 2997 m
-4878 2997 l
-4878 2998 l
-4714 2998 l
-4714 2998 m
-4878 2998 l
-4878 2999 l
-4714 2999 l
-4714 2999 m
-4878 2999 l
-4878 3001 l
-4714 3001 l
-4715 3001 m
-4878 3001 l
-4878 3004 l
-4715 3004 l
-4716 3004 m
-4878 3004 l
-4878 3006 l
-4716 3006 l
-4717 3006 m
-4878 3006 l
-4878 3009 l
-4717 3009 l
-4718 3009 m
-4878 3009 l
-4878 3011 l
-4718 3011 l
-4719 3011 m
-4878 3011 l
-4878 3014 l
-4719 3014 l
-4720 3014 m
-4878 3014 l
-4878 3016 l
-4720 3016 l
-4721 3016 m
-4878 3016 l
-4878 3019 l
-4721 3019 l
-4722 3019 m
-4878 3019 l
-4878 3021 l
-4722 3021 l
-4723 3021 m
-4878 3021 l
-4878 3024 l
-4723 3024 l
-4724 3024 m
-4878 3024 l
-4878 3026 l
-4724 3026 l
-4725 3026 m
-4878 3026 l
-4878 3029 l
-4725 3029 l
-4726 3029 m
-4878 3029 l
-4878 3031 l
-4726 3031 l
-4727 3031 m
-4878 3031 l
-4878 3034 l
-4727 3034 l
-4728 3034 m
-4878 3034 l
-4878 3036 l
-4728 3036 l
-4729 3036 m
-4878 3036 l
-4878 3039 l
-4729 3039 l
-4730 3039 m
-4878 3039 l
-4878 3041 l
-4730 3041 l
-4731 3041 m
-4878 3041 l
-4878 3043 l
-4731 3043 l
-4731 3043 m
-4878 3043 l
-4878 3044 l
-4731 3044 l
-4732 3044 m
-4878 3044 l
-4878 3045 l
-4732 3045 l
-4732 3045 m
-4878 3045 l
-4878 3046 l
-4732 3046 l
-4733 3046 m
-4878 3046 l
-4878 3047 l
-4733 3047 l
-4733 3047 m
-4878 3047 l
-4878 3048 l
-4733 3048 l
-4733 3048 m
-4878 3048 l
-4878 3049 l
-4733 3049 l
-4734 3049 m
-4878 3049 l
-4878 3050 l
-4734 3050 l
-4734 3050 m
-4878 3050 l
-4878 3051 l
-4734 3051 l
-4735 3051 m
-4878 3051 l
-4878 3052 l
-4735 3052 l
-4735 3052 m
-4878 3052 l
-4878 3053 l
-4735 3053 l
-4735 3053 m
-4878 3053 l
-4878 3054 l
-4735 3054 l
-4736 3054 m
-4878 3054 l
-4878 3055 l
-4736 3055 l
-4736 3055 m
-4878 3055 l
-4878 3056 l
-4736 3056 l
-4737 3056 m
-4878 3056 l
-4878 3057 l
-4737 3057 l
-4737 3057 m
-4878 3057 l
-4878 3058 l
-4737 3058 l
-4737 3058 m
-4878 3058 l
-4878 3059 l
-4737 3059 l
-4738 3059 m
-4878 3059 l
-4878 3060 l
-4738 3060 l
-4738 3060 m
-4878 3060 l
-4878 3061 l
-4738 3061 l
-4739 3061 m
-4878 3061 l
-4878 3062 l
-4739 3062 l
-4739 3062 m
-4878 3062 l
-4878 3063 l
-4739 3063 l
-4739 3063 m
-4878 3063 l
-4878 3064 l
-4739 3064 l
-4740 3064 m
-4878 3064 l
-4878 3065 l
-4740 3065 l
-4740 3065 m
-4875 3065 l
-4875 3066 l
-4740 3066 l
-4741 3066 m
-4873 3066 l
-4873 3067 l
-4741 3067 l
-4741 3067 m
-4870 3067 l
-4870 3068 l
-4741 3068 l
-4741 3068 m
-4868 3068 l
-4868 3069 l
-4741 3069 l
-4742 3069 m
-4865 3069 l
-4865 3070 l
-4742 3070 l
-4742 3070 m
-4863 3070 l
-4863 3071 l
-4742 3071 l
-4743 3071 m
-4860 3071 l
-4860 3072 l
-4743 3072 l
-4743 3072 m
-4858 3072 l
-4858 3073 l
-4743 3073 l
-4743 3073 m
-4855 3073 l
-4855 3074 l
-4743 3074 l
-4744 3074 m
-4853 3074 l
-4853 3075 l
-4744 3075 l
-4744 3075 m
-4850 3075 l
-4850 3076 l
-4744 3076 l
-4745 3076 m
-4848 3076 l
-4848 3077 l
-4745 3077 l
-4745 3077 m
-4845 3077 l
-4845 3078 l
-4745 3078 l
-4745 3078 m
-4842 3078 l
-4842 3079 l
-4745 3079 l
-4746 3079 m
-4840 3079 l
-4840 3080 l
-4746 3080 l
-4746 3080 m
-4837 3080 l
-4837 3081 l
-4746 3081 l
-4747 3081 m
-4835 3081 l
-4835 3082 l
-4747 3082 l
-4747 3082 m
-4832 3082 l
-4832 3083 l
-4747 3083 l
-4747 3083 m
-4830 3083 l
-4830 3084 l
-4747 3084 l
-4748 3084 m
-4827 3084 l
-4827 3085 l
-4748 3085 l
-4748 3085 m
-4825 3085 l
-4825 3086 l
-4748 3086 l
-4749 3086 m
-4822 3086 l
-4822 3087 l
-4749 3087 l
-4749 3087 m
-4820 3087 l
-4820 3088 l
-4749 3088 l
-4749 3088 m
-4817 3088 l
-4817 3089 l
-4749 3089 l
-4750 3089 m
-4815 3089 l
-4815 3090 l
-4750 3090 l
-4750 3090 m
-4812 3090 l
-4812 3091 l
-4750 3091 l
-4751 3091 m
-4810 3091 l
-4810 3092 l
-4751 3092 l
-4751 3092 m
-4807 3092 l
-4807 3093 l
-4751 3093 l
-4751 3093 m
-4805 3093 l
-4805 3094 l
-4751 3094 l
-4752 3094 m
-4802 3094 l
-4802 3095 l
-4752 3095 l
-4752 3095 m
-4800 3095 l
-4800 3096 l
-4752 3096 l
-4753 3096 m
-4797 3096 l
-4797 3097 l
-4753 3097 l
-4753 3097 m
-4795 3097 l
-4795 3098 l
-4753 3098 l
-4753 3098 m
-4792 3098 l
-4792 3099 l
-4753 3099 l
-4754 3099 m
-4790 3099 l
-4790 3100 l
-4754 3100 l
-4754 3100 m
-4787 3100 l
-4787 3101 l
-4754 3101 l
-4755 3101 m
-4785 3101 l
-4785 3102 l
-4755 3102 l
-4755 3102 m
-4782 3102 l
-4782 3103 l
-4755 3103 l
-4755 3103 m
-4780 3103 l
-4780 3104 l
-4755 3104 l
-4756 3104 m
-4777 3104 l
-4777 3105 l
-4756 3105 l
-4756 3105 m
-4775 3105 l
-4775 3106 l
-4756 3106 l
-4757 3106 m
-4772 3106 l
-4772 3107 l
-4757 3107 l
-4757 3107 m
-4770 3107 l
-4770 3108 l
-4757 3108 l
-4757 3108 m
-4767 3108 l
-4767 3109 l
-4757 3109 l
-4758 3109 m
-4765 3109 l
-4765 3110 l
-4758 3110 l
-4758 3110 m
-4762 3110 l
-4762 3111 l
-4758 3111 l
-Y
-4929.5 3043.2 m
-4885 2931 l
-4714 2998 l
-4759 3111 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4825 2972 m
-4864 2957 l
-4882 2990 l
-4876 2988 l
-4863 2989 l
-4851 2993 l
-4841 3002 l
-4836 3013 l
-4837 3026 l
-4840 3034 l
-4849 3044 l
-4860 3048 l
-4873 3048 l
-4884 3043 l
-4895 3035 l
-4897 3029 l
-4898 3020 l
-S
-4771 2994 m
-4784 2993 l
-4796 3002 l
-4808 3020 l
-4812 3031 l
-4816 3052 l
-4813 3067 l
-4803 3075 l
-4795 3078 l
-4782 3079 l
-4770 3071 l
-4758 3053 l
-4753 3041 l
-4750 3020 l
-4753 3005 l
-4763 2997 l
-4771 2994 l
-S
-1 g
-Y
-362 3391.6 m
-207 3392 l
-207 4507 l
-362 4507 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-228 3413 m
-316 3413 l
-S
-228 3413 m
-228 3467 l
-S
-270 3413 m
-270 3446 l
-S
-228 3488 m
-316 3488 l
-S
-228 3546 m
-287 3488 l
-S
-266 3509 m
-316 3546 l
-S
-228 3621 m
-228 3580 l
-266 3575 l
-262 3580 l
-258 3592 l
-258 3605 l
-262 3617 l
-270 3626 l
-283 3630 l
-291 3630 l
-303 3626 l
-312 3617 l
-316 3605 l
-316 3592 l
-312 3580 l
-308 3575 l
-299 3571 l
-S
-258 3726 m
-345 3726 l
-S
-270 3726 m
-262 3734 l
-258 3742 l
-258 3755 l
-262 3763 l
-270 3772 l
-283 3776 l
-291 3776 l
-303 3772 l
-312 3763 l
-316 3755 l
-316 3742 l
-312 3734 l
-303 3726 l
-S
-258 3822 m
-262 3813 l
-270 3805 l
-283 3801 l
-291 3801 l
-303 3805 l
-312 3813 l
-316 3822 l
-316 3834 l
-312 3843 l
-303 3851 l
-291 3855 l
-283 3855 l
-270 3851 l
-262 3843 l
-258 3834 l
-258 3822 l
-S
-228 3884 m
-316 3884 l
-S
-258 3964 m
-316 3964 l
-S
-270 3964 m
-262 3955 l
-258 3947 l
-258 3935 l
-262 3926 l
-270 3918 l
-283 3914 l
-291 3914 l
-303 3918 l
-312 3926 l
-316 3935 l
-316 3947 l
-312 3955 l
-303 3964 l
-S
-258 3997 m
-316 3997 l
-S
-283 3997 m
-270 4001 l
-262 4010 l
-258 4018 l
-258 4031 l
-S
-258 4118 m
-316 4118 l
-S
-283 4118 m
-270 4123 l
-262 4131 l
-258 4139 l
-258 4152 l
-S
-283 4169 m
-283 4219 l
-274 4219 l
-266 4214 l
-262 4210 l
-258 4202 l
-258 4189 l
-262 4181 l
-270 4173 l
-283 4169 l
-291 4169 l
-303 4173 l
-312 4181 l
-316 4189 l
-316 4202 l
-312 4210 l
-303 4219 l
-S
-258 4294 m
-324 4294 l
-337 4290 l
-341 4285 l
-345 4277 l
-345 4265 l
-341 4256 l
-S
-270 4294 m
-262 4285 l
-258 4277 l
-258 4265 l
-262 4256 l
-270 4248 l
-283 4244 l
-291 4244 l
-303 4248 l
-312 4256 l
-316 4265 l
-316 4277 l
-312 4285 l
-303 4294 l
-S
-228 4323 m
-232 4327 l
-228 4331 l
-224 4327 l
-228 4323 l
-S
-258 4327 m
-316 4327 l
-S
-258 4377 m
-262 4369 l
-270 4361 l
-283 4356 l
-291 4356 l
-303 4361 l
-312 4369 l
-316 4377 l
-316 4390 l
-312 4398 l
-303 4407 l
-291 4411 l
-283 4411 l
-270 4407 l
-262 4398 l
-258 4390 l
-258 4377 l
-S
-258 4440 m
-316 4440 l
-S
-274 4440 m
-262 4453 l
-258 4461 l
-258 4473 l
-262 4482 l
-274 4486 l
-316 4486 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/fsalign.eps b/ast-5.3-1/sun210_figures/fsalign.eps
deleted file mode 100644
index 197f293..0000000
--- a/ast-5.3-1/sun210_figures/fsalign.eps
+++ /dev/null
@@ -1,5444 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 36 91 566 744
-%..................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/23 16:33:47
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5654.15 3802.55 m
-5654.15 4022.15 5475.35 4200.95 5255.75 4200.95 c
-2070.95 4200.95 l
-1851.35 4200.95 1672.55 4022.15 1672.55 3802.55 c
-1672.55 1598.15 l
-1672.55 1378.55 1851.35 1199.75 2070.95 1199.75 c
-5255.75 1199.75 l
-5475.35 1199.75 5654.15 1378.55 5654.15 1598.15 c
-f*
-1 g
-5589.35 3857.75 m
-5589.35 4077.35 5411.75 4254.95 5192.15 4254.95 c
-2015.75 4254.95 l
-1796.15 4254.95 1618.55 4077.35 1618.55 3857.75 c
-1618.55 1661.75 l
-1618.55 1442.15 1796.15 1264.55 2015.75 1264.55 c
-5192.15 1264.55 l
-5411.75 1264.55 5589.35 1442.15 5589.35 1661.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5589.35 3857.75 m
-5589.35 4077.35 5411.75 4254.95 5192.15 4254.95 c
-2015.75 4254.95 l
-1796.15 4254.95 1618.55 4077.35 1618.55 3857.75 c
-1618.55 1661.75 l
-1618.55 1442.15 1796.15 1264.55 2015.75 1264.55 c
-5192.15 1264.55 l
-5411.75 1264.55 5589.35 1442.15 5589.35 1661.75 c
-h
-S
-0.564706 g
-4634.15 7005.35 m
-4634.15 7212.95 4466.15 7380.95 4258.55 7380.95 c
-1157.75 7380.95 l
-950.15 7380.95 782.15 7212.95 782.15 7005.35 c
-782.15 4755.35 l
-782.15 4547.75 950.15 4379.75 1157.75 4379.75 c
-4258.55 4379.75 l
-4466.15 4379.75 4634.15 4547.75 4634.15 4755.35 c
-f*
-1 g
-4569.35 7061.75 m
-4569.35 7268.15 4402.55 7434.95 4196.15 7434.95 c
-1101.35 7434.95 l
-894.95 7434.95 728.15 7268.15 728.15 7061.75 c
-728.15 4817.75 l
-728.15 4611.35 894.95 4444.55 1101.35 4444.55 c
-4196.15 4444.55 l
-4402.55 4444.55 4569.35 4611.35 4569.35 4817.75 c
-f*
-0 g
-4569.35 7061.75 m
-4569.35 7268.15 4402.55 7434.95 4196.15 7434.95 c
-1101.35 7434.95 l
-894.95 7434.95 728.15 7268.15 728.15 7061.75 c
-728.15 4817.75 l
-728.15 4611.35 894.95 4444.55 1101.35 4444.55 c
-4196.15 4444.55 l
-4402.55 4444.55 4569.35 4611.35 4569.35 4817.75 c
-h
-S
-0.564706 g
-1962.95 7095.35 m
-1962.95 7205.75 1871.75 7296.95 1760.15 7296.95 c
-1263.35 7296.95 l
-1151.75 7296.95 1060.55 7205.75 1060.55 7095.35 c
-1060.55 6957.35 l
-1060.55 6846.95 1151.75 6755.75 1263.35 6755.75 c
-1760.15 6755.75 l
-1871.75 6755.75 1962.95 6846.95 1962.95 6957.35 c
-f*
-1 g
-1898.15 7152.95 m
-1898.15 7262.15 1809.35 7350.95 1697.75 7350.95 c
-1206.95 7350.95 l
-1096.55 7350.95 1006.55 7262.15 1006.55 7152.95 c
-1006.55 7018.55 l
-1006.55 6909.35 1095.35 6820.55 1206.95 6820.55 c
-1697.75 6820.55 l
-1809.35 6820.55 1898.15 6909.35 1898.15 7018.55 c
-f*
-0 g
-1898.15 7152.95 m
-1898.15 7262.15 1809.35 7350.95 1697.75 7350.95 c
-1206.95 7350.95 l
-1096.55 7350.95 1006.55 7262.15 1006.55 7152.95 c
-1006.55 7018.55 l
-1006.55 6909.35 1095.35 6820.55 1206.95 6820.55 c
-1697.75 6820.55 l
-1809.35 6820.55 1898.15 6909.35 1898.15 7018.55 c
-h
-S
-0.201248 i
-1239.33 7192 m
-1125.22 7192 l
-1125.22 7187 l
-1139.11 7186.2 1143 7183.18 1143 7172.72 c
-1143 7075.32 l
-1143 7064.85 1140.17 7062.64 1125.22 7061.03 c
-1125.22 7056 l
-1197.67 7056 l
-1197.67 7061 l
-1179.15 7061.81 1176 7064.23 1176 7075.32 c
-1176 7122.21 l
-1196.22 7121.81 1203.55 7114.36 1206.32 7091.02 c
-1211.35 7091.02 l
-1211.35 7159.04 l
-1206.32 7159.04 l
-1202.76 7136.1 1195.82 7129.05 1176 7129.05 c
-1176 7175.74 l
-1176 7183.19 1178.52 7185 1188.41 7185 c
-1207.13 7185 1218.8 7181.64 1225.04 7174.74 c
-1229.47 7169.71 1231.68 7164.27 1234.5 7151.59 c
-1239.33 7151.59 l
-h
-1244.96 7056 m
-f*
-1289.19 7149 m
-1250.84 7149 l
-1250.84 7143.95 l
-1259.49 7142.74 1262 7140.12 1262 7132.07 c
-1262 7072.9 l
-1262 7064.65 1259.93 7062.44 1250.84 7060.83 c
-1250.84 7056 l
-1304.37 7056 l
-1304.37 7060.83 l
-1292.09 7061.63 1290 7064.25 1290 7076.73 c
-1290 7114.76 l
-1290 7125.23 1295.49 7133.88 1301.95 7133.88 c
-1303.56 7133.88 1305.37 7132.47 1307.59 7129.25 c
-1311.41 7123.82 1314.43 7122.01 1319.66 7122.01 c
-1327.11 7122.01 1332.34 7127.64 1332.34 7135.29 c
-1332.34 7144.55 1325.5 7151.41 1316.04 7151.41 c
-1306.1 7151.41 1298.54 7146.12 1289.19 7132.27 c
-h
-1334.35 7056 m
-f*
-1429.19 7068.88 m
-1427.18 7066.87 l
-1426.57 7066.26 1425.97 7066.06 1424.96 7066.06 c
-1422.15 7066.06 1421 7067.67 1421 7071.09 c
-1421 7123.62 l
-1421 7140.73 1405.6 7151.42 1380.89 7151.42 c
-1358.15 7151.42 1342.85 7141.06 1342.85 7125.83 c
-1342.85 7117.38 1347.69 7112.55 1355.94 7112.55 c
-1363.99 7112.55 1369.62 7117.38 1369.62 7124.22 c
-1369.62 7127.04 1368.61 7129.66 1366 7132.88 c
-1364.19 7134.89 1363.58 7136.1 1363.58 7137.3 c
-1363.58 7141.53 1369.02 7144.42 1376.26 7144.42 c
-1388.14 7144.42 1393.86 7139.08 1393.86 7127.04 c
-1393.86 7112.35 l
-1369.91 7105.1 1360.29 7101.48 1352.51 7096.45 c
-1343.46 7090.41 1339 7083.37 1339 7074.52 c
-1339 7062.24 1348.27 7053.18 1361.17 7053.18 c
-1372.84 7053.18 1382.1 7057.21 1393.17 7067.27 c
-1395.38 7057.01 1399.81 7053.18 1409.67 7053.18 c
-1418.32 7053.18 1424.56 7056.4 1432.21 7064.65 c
-h
-1393 7076.13 m
-1387.55 7069.89 1383.52 7067.47 1378.68 7067.47 c
-1372.64 7067.47 1368 7072.91 1368 7080.96 c
-1368 7092.63 1376.61 7100.88 1393 7105.31 c
-h
-1434.62 7056 m
-f*
-1476.4 7149 m
-1437.7 7149 l
-1437.7 7143.95 l
-1446.55 7142.74 1449 7140.32 1449 7132.07 c
-1449 7072.9 l
-1449 7064.65 1446.74 7062.44 1437.7 7060.83 c
-1437.7 7056 l
-1486 7056 l
-1486 7060.83 l
-1478.95 7061.84 1477 7064.65 1477 7072.3 c
-1477 7126.03 l
-1477 7127.04 1479.87 7130.66 1482.18 7132.88 c
-1486.4 7136.1 1490.02 7138.42 1493.65 7138.42 c
-1501.5 7138.42 1505 7133.59 1505 7121 c
-1505 7072.3 l
-1505 7064.05 1502.68 7061.43 1494.85 7060.83 c
-1494.85 7056 l
-1541.95 7056 l
-1541.95 7060.83 l
-1534.9 7061.64 1533 7064.65 1533 7072.3 c
-1533 7126.03 l
-1533 7127.04 1535.73 7130.46 1537.92 7132.68 c
-1542.35 7136.1 1545.97 7138.42 1549.59 7138.42 c
-1557.24 7138.42 1560 7133.38 1560 7121 c
-1560 7072.3 l
-1560 7063.85 1557.85 7061.43 1550.4 7060.83 c
-1550.4 7056 l
-1598.3 7056 l
-1598.3 7061 l
-1590.45 7061.4 1588 7063.78 1588 7072.3 c
-1588 7122.81 l
-1588 7140.12 1577.43 7151.42 1561.07 7151.42 c
-1549.59 7151.42 1541.95 7146.73 1531.48 7133.68 c
-1525.44 7146.36 1518.4 7151.42 1505.72 7151.42 c
-1492.95 7151.42 1483.98 7145.91 1476.4 7133.68 c
-h
-1601.64 7056 m
-f*
-1679.9 7081.16 m
-1671.65 7071.29 1665.61 7067.18 1656.96 7067.18 c
-1649.31 7067.18 1643.27 7070.77 1639.25 7077.94 c
-1635.43 7084.54 1633.82 7091.56 1633.01 7106 c
-1683.73 7106 l
-1682.52 7122.36 1679.5 7131.43 1673.26 7139.12 c
-1666.82 7146.96 1657.36 7151.42 1646.09 7151.42 c
-1620.94 7151.42 1604.03 7131.4 1604.03 7101.88 c
-1604.03 7072.5 1620.53 7053.18 1645.49 7053.18 c
-1661.79 7053.18 1671.65 7059.42 1684.73 7078.34 c
-h
-1632 7113 m
-1632.61 7136.96 1636.23 7144.42 1646.09 7144.42 c
-1651.93 7144.42 1655.55 7141.38 1657.16 7135.49 c
-1658.17 7131.67 1658.57 7126.03 1658.97 7115.77 c
-1658.97 7113 l
-h
-1688.35 7056 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -1732 -7056]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4422.95 6294.95 m
-4422.95 6406.55 4331.75 6497.75 4220.15 6497.75 c
-3723.35 6497.75 l
-3611.75 6497.75 3520.55 6406.55 3520.55 6294.95 c
-3520.55 6158.15 l
-3520.55 6046.55 3611.75 5955.35 3723.35 5955.35 c
-4220.15 5955.35 l
-4331.75 5955.35 4422.95 6046.55 4422.95 6158.15 c
-f*
-1 g
-4353.35 6351.35 m
-4353.35 6459.35 4264.55 6546.95 4155.35 6546.95 c
-3669.35 6546.95 l
-3560.15 6546.95 3471.35 6459.35 3471.35 6351.35 c
-3471.35 6220.55 l
-3471.35 6112.55 3560.15 6024.95 3669.35 6024.95 c
-4155.35 6024.95 l
-4264.55 6024.95 4353.35 6112.55 4353.35 6220.55 c
-f*
-16 w
-0 g
-4353.35 6351.35 m
-4353.35 6459.35 4264.55 6546.95 4155.35 6546.95 c
-3669.35 6546.95 l
-3560.15 6546.95 3471.35 6459.35 3471.35 6351.35 c
-3471.35 6220.55 l
-3471.35 6112.55 3560.15 6024.95 3669.35 6024.95 c
-4155.35 6024.95 l
-4264.55 6024.95 4353.35 6112.55 4353.35 6220.55 c
-h
-S
-0.201248 i
-3699.33 6393 m
-3585.22 6393 l
-3585.22 6388 l
-3599.11 6387.2 3603 6384.18 3603 6373.72 c
-3603 6276.32 l
-3603 6265.85 3600.17 6263.64 3585.22 6262.03 c
-3585.22 6257 l
-3657.67 6257 l
-3657.67 6262 l
-3639.15 6262.81 3636 6265.23 3636 6276.32 c
-3636 6323.21 l
-3656.22 6322.81 3663.55 6315.36 3666.32 6292.02 c
-3671.35 6292.02 l
-3671.35 6360.04 l
-3666.32 6360.04 l
-3662.76 6337.1 3655.82 6330.05 3636 6330.05 c
-3636 6376.74 l
-3636 6384.19 3638.52 6386 3648.41 6386 c
-3667.13 6386 3678.8 6382.64 3685.04 6375.74 c
-3689.47 6370.71 3691.68 6365.27 3694.5 6352.59 c
-3699.33 6352.59 l
-h
-3704.96 6257 m
-f*
-3749.19 6350 m
-3710.84 6350 l
-3710.84 6344.95 l
-3719.49 6343.74 3722 6341.12 3722 6333.07 c
-3722 6273.9 l
-3722 6265.65 3719.93 6263.44 3710.84 6261.83 c
-3710.84 6257 l
-3764.37 6257 l
-3764.37 6261.83 l
-3752.09 6262.63 3750 6265.25 3750 6277.73 c
-3750 6315.76 l
-3750 6326.23 3755.49 6334.88 3761.95 6334.88 c
-3763.56 6334.88 3765.37 6333.47 3767.59 6330.25 c
-3771.41 6324.82 3774.43 6323.01 3779.66 6323.01 c
-3787.11 6323.01 3792.34 6328.64 3792.34 6336.29 c
-3792.34 6345.55 3785.5 6352.41 3776.04 6352.41 c
-3766.1 6352.41 3758.54 6347.12 3749.19 6333.27 c
-h
-3794.35 6257 m
-f*
-3889.19 6269.88 m
-3887.18 6267.87 l
-3886.57 6267.26 3885.97 6267.06 3884.96 6267.06 c
-3882.15 6267.06 3881 6268.67 3881 6272.09 c
-3881 6324.62 l
-3881 6341.73 3865.6 6352.42 3840.89 6352.42 c
-3818.15 6352.42 3802.85 6342.06 3802.85 6326.83 c
-3802.85 6318.38 3807.69 6313.55 3815.94 6313.55 c
-3823.99 6313.55 3829.62 6318.38 3829.62 6325.22 c
-3829.62 6328.04 3828.61 6330.66 3826 6333.88 c
-3824.19 6335.89 3823.58 6337.1 3823.58 6338.3 c
-3823.58 6342.53 3829.02 6345.42 3836.26 6345.42 c
-3848.14 6345.42 3853.86 6340.08 3853.86 6328.04 c
-3853.86 6313.35 l
-3829.91 6306.1 3820.29 6302.48 3812.51 6297.45 c
-3803.46 6291.41 3799 6284.37 3799 6275.52 c
-3799 6263.24 3808.27 6254.18 3821.17 6254.18 c
-3832.84 6254.18 3842.1 6258.21 3853.17 6268.27 c
-3855.38 6258.01 3859.81 6254.18 3869.67 6254.18 c
-3878.32 6254.18 3884.56 6257.4 3892.21 6265.65 c
-h
-3853 6277.13 m
-3847.55 6270.89 3843.52 6268.47 3838.68 6268.47 c
-3832.64 6268.47 3828 6273.91 3828 6281.96 c
-3828 6293.63 3836.61 6301.88 3853 6306.31 c
-h
-3894.62 6257 m
-f*
-3936.4 6350 m
-3897.7 6350 l
-3897.7 6344.95 l
-3906.55 6343.74 3909 6341.32 3909 6333.07 c
-3909 6273.9 l
-3909 6265.65 3906.74 6263.44 3897.7 6261.83 c
-3897.7 6257 l
-3946 6257 l
-3946 6261.83 l
-3938.95 6262.84 3937 6265.65 3937 6273.3 c
-3937 6327.03 l
-3937 6328.04 3939.87 6331.66 3942.18 6333.88 c
-3946.4 6337.1 3950.02 6339.42 3953.65 6339.42 c
-3961.5 6339.42 3965 6334.59 3965 6322 c
-3965 6273.3 l
-3965 6265.05 3962.68 6262.43 3954.85 6261.83 c
-3954.85 6257 l
-4001.95 6257 l
-4001.95 6261.83 l
-3994.9 6262.64 3993 6265.65 3993 6273.3 c
-3993 6327.03 l
-3993 6328.04 3995.73 6331.46 3997.92 6333.68 c
-4002.35 6337.1 4005.97 6339.42 4009.59 6339.42 c
-4017.24 6339.42 4020 6334.38 4020 6322 c
-4020 6273.3 l
-4020 6264.85 4017.85 6262.43 4010.4 6261.83 c
-4010.4 6257 l
-4058.3 6257 l
-4058.3 6262 l
-4050.45 6262.4 4048 6264.78 4048 6273.3 c
-4048 6323.81 l
-4048 6341.12 4037.43 6352.42 4021.07 6352.42 c
-4009.59 6352.42 4001.95 6347.73 3991.48 6334.68 c
-3985.44 6347.36 3978.4 6352.42 3965.72 6352.42 c
-3952.95 6352.42 3943.98 6346.91 3936.4 6334.68 c
-h
-4061.64 6257 m
-f*
-4139.9 6282.16 m
-4131.65 6272.29 4125.61 6268.18 4116.96 6268.18 c
-4109.31 6268.18 4103.27 6271.77 4099.25 6278.94 c
-4095.43 6285.54 4093.82 6292.56 4093.01 6307 c
-4143.73 6307 l
-4142.52 6323.36 4139.5 6332.43 4133.26 6340.12 c
-4126.82 6347.96 4117.36 6352.42 4106.09 6352.42 c
-4080.94 6352.42 4064.03 6332.4 4064.03 6302.88 c
-4064.03 6273.5 4080.53 6254.18 4105.49 6254.18 c
-4121.79 6254.18 4131.65 6260.42 4144.73 6279.34 c
-h
-4092 6314 m
-4092.61 6337.96 4096.23 6345.42 4106.09 6345.42 c
-4111.93 6345.42 4115.55 6342.38 4117.16 6336.49 c
-4118.17 6332.67 4118.57 6327.03 4118.97 6316.77 c
-4118.97 6314 l
-h
-4148.35 6257 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4184 -6255]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3494.15 5588.15 m
-3494.15 5698.55 3402.95 5789.75 3291.35 5789.75 c
-2795.75 5789.75 l
-2684.15 5789.75 2592.95 5698.55 2592.95 5588.15 c
-2592.95 5450.15 l
-2592.95 5339.75 2684.15 5248.55 2795.75 5248.55 c
-3291.35 5248.55 l
-3402.95 5248.55 3494.15 5339.75 3494.15 5450.15 c
-f*
-1 g
-3414.95 5642.15 m
-3414.95 5745.35 3328.55 5829.35 3221.75 5829.35 c
-2746.55 5829.35 l
-2639.75 5829.35 2553.35 5745.35 2553.35 5642.15 c
-2553.35 5514.95 l
-2553.35 5411.75 2639.75 5327.75 2746.55 5327.75 c
-3221.75 5327.75 l
-3328.55 5327.75 3414.95 5411.75 3414.95 5514.95 c
-f*
-32 w
-0 g
-3414.95 5642.15 m
-3414.95 5745.35 3328.55 5829.35 3221.75 5829.35 c
-2746.55 5829.35 l
-2639.75 5829.35 2553.35 5745.35 2553.35 5642.15 c
-2553.35 5514.95 l
-2553.35 5411.75 2639.75 5327.75 2746.55 5327.75 c
-3221.75 5327.75 l
-3328.55 5327.75 3414.95 5411.75 3414.95 5514.95 c
-h
-S
-0.201248 i
-2782.33 5685 m
-2668.22 5685 l
-2668.22 5680 l
-2682.11 5679.2 2686 5676.18 2686 5665.72 c
-2686 5568.32 l
-2686 5557.85 2683.17 5555.64 2668.22 5554.03 c
-2668.22 5549 l
-2740.67 5549 l
-2740.67 5554 l
-2722.15 5554.81 2719 5557.23 2719 5568.32 c
-2719 5615.21 l
-2739.22 5614.81 2746.55 5607.36 2749.32 5584.02 c
-2754.35 5584.02 l
-2754.35 5652.04 l
-2749.32 5652.04 l
-2745.76 5629.1 2738.82 5622.05 2719 5622.05 c
-2719 5668.74 l
-2719 5676.19 2721.52 5678 2731.41 5678 c
-2750.13 5678 2761.8 5674.64 2768.04 5667.74 c
-2772.47 5662.71 2774.68 5657.27 2777.5 5644.59 c
-2782.33 5644.59 l
-h
-2787.96 5549 m
-f*
-2831.19 5642 m
-2792.84 5642 l
-2792.84 5636.95 l
-2801.49 5635.74 2804 5633.12 2804 5625.07 c
-2804 5565.9 l
-2804 5557.65 2801.93 5555.44 2792.84 5553.83 c
-2792.84 5549 l
-2846.37 5549 l
-2846.37 5553.83 l
-2834.09 5554.63 2832 5557.25 2832 5569.73 c
-2832 5607.76 l
-2832 5618.23 2837.49 5626.88 2843.95 5626.88 c
-2845.56 5626.88 2847.37 5625.47 2849.59 5622.25 c
-2853.41 5616.82 2856.43 5615.01 2861.66 5615.01 c
-2869.11 5615.01 2874.34 5620.64 2874.34 5628.29 c
-2874.34 5637.55 2867.5 5644.41 2858.04 5644.41 c
-2848.1 5644.41 2840.54 5639.12 2831.19 5625.27 c
-h
-2876.35 5549 m
-f*
-2971.19 5561.88 m
-2969.18 5559.87 l
-2968.57 5559.26 2967.97 5559.06 2966.96 5559.06 c
-2964.15 5559.06 2963 5560.67 2963 5564.09 c
-2963 5616.62 l
-2963 5633.73 2947.6 5644.42 2922.89 5644.42 c
-2900.15 5644.42 2884.85 5634.06 2884.85 5618.83 c
-2884.85 5610.38 2889.69 5605.55 2897.94 5605.55 c
-2905.99 5605.55 2911.62 5610.38 2911.62 5617.22 c
-2911.62 5620.04 2910.61 5622.66 2908 5625.88 c
-2906.19 5627.89 2905.58 5629.1 2905.58 5630.3 c
-2905.58 5634.53 2911.02 5637.42 2918.26 5637.42 c
-2930.14 5637.42 2935.86 5632.08 2935.86 5620.04 c
-2935.86 5605.35 l
-2911.91 5598.1 2902.29 5594.48 2894.51 5589.45 c
-2885.46 5583.41 2881 5576.37 2881 5567.52 c
-2881 5555.24 2890.27 5546.18 2903.17 5546.18 c
-2914.84 5546.18 2924.1 5550.21 2935.17 5560.27 c
-2937.38 5550.01 2941.81 5546.18 2951.67 5546.18 c
-2960.32 5546.18 2966.56 5549.4 2974.21 5557.65 c
-h
-2935 5569.13 m
-2929.55 5562.89 2925.52 5560.47 2920.68 5560.47 c
-2914.64 5560.47 2910 5565.91 2910 5573.96 c
-2910 5585.63 2918.61 5593.88 2935 5598.31 c
-h
-2976.62 5549 m
-f*
-3018.4 5642 m
-2979.7 5642 l
-2979.7 5636.95 l
-2988.55 5635.74 2991 5633.32 2991 5625.07 c
-2991 5565.9 l
-2991 5557.65 2988.74 5555.44 2979.7 5553.83 c
-2979.7 5549 l
-3028 5549 l
-3028 5553.83 l
-3020.95 5554.84 3019 5557.65 3019 5565.3 c
-3019 5619.03 l
-3019 5620.04 3021.87 5623.66 3024.18 5625.88 c
-3028.4 5629.1 3032.02 5631.42 3035.65 5631.42 c
-3043.5 5631.42 3047 5626.59 3047 5614 c
-3047 5565.3 l
-3047 5557.05 3044.68 5554.43 3036.85 5553.83 c
-3036.85 5549 l
-3083.95 5549 l
-3083.95 5553.83 l
-3076.9 5554.64 3075 5557.65 3075 5565.3 c
-3075 5619.03 l
-3075 5620.04 3077.73 5623.46 3079.92 5625.68 c
-3084.35 5629.1 3087.97 5631.42 3091.59 5631.42 c
-3099.24 5631.42 3102 5626.38 3102 5614 c
-3102 5565.3 l
-3102 5556.85 3099.85 5554.43 3092.4 5553.83 c
-3092.4 5549 l
-3140.3 5549 l
-3140.3 5554 l
-3132.45 5554.4 3130 5556.78 3130 5565.3 c
-3130 5615.81 l
-3130 5633.12 3119.43 5644.42 3103.07 5644.42 c
-3091.59 5644.42 3083.95 5639.73 3073.48 5626.68 c
-3067.44 5639.36 3060.4 5644.42 3047.72 5644.42 c
-3034.95 5644.42 3025.98 5638.91 3018.4 5626.68 c
-h
-3143.64 5549 m
-f*
-3223.9 5574.16 m
-3215.65 5564.29 3209.61 5560.18 3200.96 5560.18 c
-3193.31 5560.18 3187.27 5563.77 3183.25 5570.94 c
-3179.43 5577.54 3177.82 5584.56 3177.01 5599 c
-3227.73 5599 l
-3226.52 5615.36 3223.5 5624.43 3217.26 5632.12 c
-3210.82 5639.96 3201.36 5644.42 3190.09 5644.42 c
-3164.94 5644.42 3148.03 5624.4 3148.03 5594.88 c
-3148.03 5565.5 3164.53 5546.18 3189.49 5546.18 c
-3205.79 5546.18 3215.65 5552.42 3228.73 5571.34 c
-h
-3176 5606 m
-3176.61 5629.96 3180.23 5637.42 3190.09 5637.42 c
-3195.93 5637.42 3199.55 5634.38 3201.16 5628.49 c
-3202.17 5624.67 3202.57 5619.03 3202.97 5608.77 c
-3202.97 5606 l
-h
-3232.35 5549 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3266 -5549]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-16 w
-1456.55 6790.55 m
-1456.55 6798.95 1456.55 6798.95 1456.55 6790.55 c
-1456.55 6654.95 1490.15 6524.15 1552.55 6426.95 c
-S
-1481.75 6436.55 m
-1541.75 6453.35 l
-1574.15 6506.15 l
-1641.35 6324.95 l
-f*
-1949.75 5826.95 m
-2034.95 5715.35 2206.55 5634.95 2412.95 5608.55 c
-S
-2366.15 5556.95 m
-2392.55 5613.35 l
-2374.55 5672.15 l
-2554.55 5601.35 l
-f*
-8 w
-2531.75 7204.55 m
-2429.75 7304.15 2284.55 7361.75 2130.95 7361.75 c
-2026.55 7361.75 1924.55 7335.35 1836.95 7284.95 c
-S
-2466.95 7198.55 m
-2514.95 7214.15 l
-2538.95 7259.75 l
-2602.55 7113.35 l
-f*
-2886.95 6628.55 m
-2975.75 6454.55 3140.15 6329.75 3335.75 6290.15 c
-S
-3291.35 6250.55 m
-3316.55 6296.15 l
-3304.55 6346.55 l
-3448.55 6275.75 l
-f*
-0.564706 g
-3338.15 6804.95 m
-3203.75 6840.95 l
-3299.75 6897.35 l
-3146.15 6905.75 l
-3188.15 6976.55 l
-3040.55 6956.15 l
-3023.75 7026.95 l
-2903.75 6982.55 l
-2828.15 7046.15 l
-2752.55 6982.55 l
-2632.55 7026.95 l
-2614.55 6956.15 l
-2465.75 6976.55 l
-2510.15 6905.75 l
-2356.55 6897.35 l
-2452.55 6840.95 l
-2316.95 6804.95 l
-2452.55 6770.15 l
-2356.55 6713.75 l
-2510.15 6704.15 l
-2465.75 6634.55 l
-2614.55 6654.95 l
-2632.55 6582.95 l
-2752.55 6628.55 l
-2828.15 6564.95 l
-2903.75 6628.55 l
-3023.75 6582.95 l
-3040.55 6654.95 l
-3188.15 6634.55 l
-3146.15 6704.15 l
-3299.75 6713.75 l
-3203.75 6770.15 l
-f*
-1 g
-3278.15 6864.95 m
-3143.75 6900.95 l
-3239.75 6957.35 l
-3086.15 6965.75 l
-3128.15 7036.55 l
-2980.55 7016.15 l
-2963.75 7086.95 l
-2843.75 7042.55 l
-2768.15 7106.15 l
-2692.55 7042.55 l
-2572.55 7086.95 l
-2554.55 7016.15 l
-2405.75 7036.55 l
-2450.15 6965.75 l
-2296.55 6957.35 l
-2392.55 6900.95 l
-2256.95 6864.95 l
-2392.55 6830.15 l
-2296.55 6773.75 l
-2450.15 6764.15 l
-2405.75 6694.55 l
-2554.55 6714.95 l
-2572.55 6642.95 l
-2692.55 6688.55 l
-2768.15 6624.95 l
-2843.75 6688.55 l
-2963.75 6642.95 l
-2980.55 6714.95 l
-3128.15 6694.55 l
-3086.15 6764.15 l
-3239.75 6773.75 l
-3143.75 6830.15 l
-f*
-0 g
-3278.15 6864.95 m
-3143.75 6900.95 l
-3239.75 6957.35 l
-3086.15 6965.75 l
-3128.15 7036.55 l
-2980.55 7016.15 l
-2963.75 7086.95 l
-2843.75 7042.55 l
-2768.15 7106.15 l
-2692.55 7042.55 l
-2572.55 7086.95 l
-2554.55 7016.15 l
-2405.75 7036.55 l
-2450.15 6965.75 l
-2296.55 6957.35 l
-2392.55 6900.95 l
-2256.95 6864.95 l
-2392.55 6830.15 l
-2296.55 6773.75 l
-2450.15 6764.15 l
-2405.75 6694.55 l
-2554.55 6714.95 l
-2572.55 6642.95 l
-2692.55 6688.55 l
-2768.15 6624.95 l
-2843.75 6688.55 l
-2963.75 6642.95 l
-2980.55 6714.95 l
-3128.15 6694.55 l
-3086.15 6764.15 l
-3239.75 6773.75 l
-3143.75 6830.15 l
-3278.15 6864.95 l
-3239.75 6864.95 l
-3117.35 6833.75 l
-3206.15 6780.95 l
-3068.15 6773.75 l
-3108.95 6707.75 l
-2973.35 6725.75 l
-2956.55 6657.35 l
-2841.35 6699.35 l
-2768.15 6636.95 l
-2694.95 6699.35 l
-2579.75 6657.35 l
-2561.75 6725.75 l
-2426.15 6707.75 l
-2466.95 6773.75 l
-2330.15 6780.95 l
-2418.95 6833.75 l
-2296.55 6864.95 l
-2417.75 6897.35 l
-2330.15 6950.15 l
-2466.95 6957.35 l
-2426.15 7023.35 l
-2561.75 7004.15 l
-2579.75 7073.75 l
-2694.95 7030.55 l
-2768.15 7092.95 l
-2841.35 7030.55 l
-2956.55 7073.75 l
-2973.35 7004.15 l
-3108.95 7023.35 l
-3068.15 6957.35 l
-3206.15 6950.15 l
-3117.35 6897.35 l
-3239.75 6864.95 l
-3278.15 6864.95 l
-f*
-0.2 i
-2590.08 6916.76 m
-2570.08 6842.52 l
-2567.52 6833.88 2564.48 6831.64 2554.08 6831 c
-2554.08 6827 l
-2604 6827 l
-2604 6831 l
-2594.72 6831.48 2592.48 6832.76 2592.48 6837.88 c
-2592.48 6839.64 2592.8 6841.4 2593.76 6845.08 c
-2593.92 6845.88 l
-2594.08 6846.68 l
-2613.76 6918.52 l
-2616.16 6926.84 2618.56 6929.08 2626.72 6930.04 c
-2626.72 6934 l
-2592.8 6934 l
-2543.2 6857.24 l
-2534.56 6934 l
-2499.2 6934 l
-2499.2 6930 l
-2509.28 6929.52 2510.72 6928.89 2510.72 6924.44 c
-2510.72 6922.2 2510.08 6919.32 2508.96 6915.16 c
-2491.52 6855.48 l
-2485.12 6834.68 2484 6832.92 2475.36 6831 c
-2475.36 6827 l
-2508.48 6827 l
-2508.48 6831 l
-2498.24 6832.28 2495.68 6834.2 2495.68 6840.76 c
-2495.68 6843.48 2496.48 6847.48 2498.72 6855.48 c
-2514.88 6914.52 l
-2525.6 6825.08 l
-2530.08 6825.08 l
-h
-2622.24 6827 m
-f*
-2691.44 6847.32 m
-2684.88 6838.52 2682.48 6835.76 2679.92 6835.76 c
-2678.64 6835.76 2678 6836.86 2678 6838.52 c
-2678 6842.52 2679.44 6849.08 2683.44 6862.2 c
-2694.8 6899.96 l
-2677.04 6898.84 l
-2674.16 6889.4 l
-2672.72 6897.56 2669.2 6901.08 2662.32 6901.08 c
-2642.64 6901.08 2619 6870.27 2619 6845.24 c
-2619 6833.08 2625.74 6824.92 2635.92 6824.92 c
-2645.68 6824.92 2653.04 6830.68 2662.16 6846.04 c
-2660.24 6839.48 2660 6837.56 2660 6835.32 c
-2660 6829.4 2664.76 6824.76 2670.64 6824.76 c
-2678.16 6824.76 2685.52 6831 2694.8 6844.92 c
-h
-2664.56 6894.2 m
-2668.08 6893.88 2670.56 6891 2670.56 6886.68 c
-2670.56 6877.08 2665.24 6859.32 2658.96 6848.28 c
-2654.64 6840.44 2649.84 6835.92 2645.52 6835.92 c
-2641.36 6835.92 2638 6839.75 2638 6844.92 c
-2638 6853.24 2643.42 6869.24 2650.16 6881.08 c
-2654.96 6889.56 2660.24 6894.52 2664.56 6894.2 c
-h
-2702 6827 m
-f*
-2736.56 6900.92 m
-2720.24 6898.36 2714 6897.4 2705.68 6896.44 c
-2705.68 6892 l
-2712.88 6891.69 2714.32 6891.07 2714.32 6888.12 c
-2714.32 6886.52 2713.04 6880.76 2710.8 6872.44 c
-2694.8 6810.36 l
-2691.76 6799.8 2690.48 6798.84 2682.8 6799 c
-2682.8 6794 l
-2722.64 6794 l
-2722.64 6799 l
-2714.64 6799.14 2712.24 6800.16 2712.24 6803.64 c
-2712.24 6805.88 2713.36 6810.68 2716.4 6821.88 c
-2717.52 6825.72 2717.52 6826.04 2718.16 6828.44 c
-2723.76 6825.56 2725.68 6824.92 2729.04 6824.92 c
-2750.8 6824.92 2773.36 6853.88 2773.36 6881.56 c
-2773.36 6893.4 2766.64 6901.08 2756.08 6901.08 c
-2746.96 6901.08 2739.92 6895.92 2730.48 6882.52 c
-h
-2747.12 6889.56 m
-2751.28 6889.24 2753.68 6885.56 2753.36 6880.44 c
-2752.72 6869.88 2747.6 6854.04 2741.84 6843.64 c
-2736.88 6835 2731.76 6829.92 2726.32 6829.92 c
-2722.8 6829.92 2720.08 6832.75 2720.08 6836.28 c
-2720.08 6839 2721.84 6845.56 2726.16 6860.12 c
-2729.68 6871.8 2731.12 6875.8 2733.52 6879.48 c
-2737.52 6885.72 2742.96 6889.88 2747.12 6889.56 c
-h
-2782 6827 m
-f*
-2817.56 6900.92 m
-2801.24 6898.36 2795 6897.4 2786.68 6896.44 c
-2786.68 6892 l
-2793.88 6891.69 2795.32 6891.07 2795.32 6888.12 c
-2795.32 6886.52 2794.04 6880.76 2791.8 6872.44 c
-2775.8 6810.36 l
-2772.76 6799.8 2771.48 6798.84 2763.8 6799 c
-2763.8 6794 l
-2803.64 6794 l
-2803.64 6799 l
-2795.64 6799.14 2793.24 6800.16 2793.24 6803.64 c
-2793.24 6805.88 2794.36 6810.68 2797.4 6821.88 c
-2798.52 6825.72 2798.52 6826.04 2799.16 6828.44 c
-2804.76 6825.56 2806.68 6824.92 2810.04 6824.92 c
-2831.8 6824.92 2854.36 6853.88 2854.36 6881.56 c
-2854.36 6893.4 2847.64 6901.08 2837.08 6901.08 c
-2827.96 6901.08 2820.92 6895.92 2811.48 6882.52 c
-h
-2828.12 6889.56 m
-2832.28 6889.24 2834.68 6885.56 2834.36 6880.44 c
-2833.72 6869.88 2828.6 6854.04 2822.84 6843.64 c
-2817.88 6835 2812.76 6829.92 2807.32 6829.92 c
-2803.8 6829.92 2801.08 6832.75 2801.08 6836.28 c
-2801.08 6839 2802.84 6845.56 2807.16 6860.12 c
-2810.68 6871.8 2812.12 6875.8 2814.52 6879.48 c
-2818.52 6885.72 2823.96 6889.88 2828.12 6889.56 c
-h
-2863 6827 m
-f*
-2896.56 6849.56 m
-2894.32 6846.36 l
-2890.16 6840.12 2886.48 6836.56 2884.08 6836.56 c
-2882.8 6836.56 2882 6837.77 2882 6839.16 c
-2882 6840.6 2882.62 6844.76 2883.12 6847.48 c
-2897.68 6900.92 l
-2889.22 6899 2878.26 6897.4 2866.04 6896.44 c
-2866.04 6892 l
-2867.44 6892 l
-2872.24 6892 2875.48 6890.44 2875.48 6887.48 c
-2875.48 6886.2 2874.71 6883.8 2873.68 6881.08 c
-2864.4 6846.68 l
-2863.12 6842.04 2863 6837.88 2863 6835.64 c
-2863 6829.56 2867.2 6825.56 2873.36 6825.56 c
-2882.96 6825.56 2888.88 6830.36 2900.08 6847.32 c
-h
-2892.88 6936.4 m
-2887.44 6936.4 2883 6931.46 2883 6926.04 c
-2883 6919.8 2887.26 6915.4 2893.04 6915.4 c
-2899.12 6915.4 2904 6919.86 2904 6925.56 c
-2904 6931.48 2899 6936.4 2892.88 6936.4 c
-h
-2906.48 6827 m
-f*
-2981.36 6848.6 m
-2974.96 6838.68 2972.88 6836.56 2970.16 6836.56 c
-2968.88 6836.56 2968 6837.63 2968 6839.16 c
-2968 6840.76 2968.94 6844.12 2971.92 6853.08 c
-2977.68 6870.52 l
-2980.24 6878.04 2982 6885.08 2982 6888.92 c
-2982 6896.76 2977.78 6901.08 2970.16 6901.08 c
-2964.24 6901.08 2958.48 6898.62 2954.16 6894.36 c
-2948.24 6888.76 2945.2 6884.92 2934.48 6869.08 c
-2944.72 6900.76 l
-2934.48 6898.52 2921.68 6896.92 2912.72 6896.6 c
-2912.72 6891.8 l
-2919.44 6891.65 2921.36 6890.92 2921.36 6888.12 c
-2921.36 6886.2 2919.12 6877.72 2914 6859.64 c
-2910.32 6846.68 2909.2 6842.52 2905.04 6827 c
-2924.4 6827 l
-2931.92 6854.68 2937.68 6868.6 2947.6 6881.56 c
-2950.8 6885.88 2955.76 6889.08 2958.64 6889.08 c
-2960.72 6889.08 2963 6887.63 2963 6886.04 c
-2963 6885.56 2962.54 6884.28 2961.84 6882.68 c
-2953.04 6856.12 l
-2950.48 6848.44 2949 6839.32 2949 6835.16 c
-2949 6829.08 2952.84 6825.56 2959.44 6825.56 c
-2969.04 6825.56 2975.6 6831 2984.88 6846.52 c
-h
-2994.96 6827 m
-f*
-3072.48 6896 m
-3054.72 6896 l
-3049.28 6899.58 3044.48 6901.08 3037.12 6901.08 c
-3017.44 6901.08 3001 6888.05 3001 6871.8 c
-3001 6863.64 3005.35 6857.88 3014.4 6854.2 c
-3001.28 6846.84 2999 6844.6 2999 6838.68 c
-2999 6833.56 3001.89 6830.52 3008.96 6828.12 c
-2999.04 6825.72 2995.84 6824.44 2992 6821.4 c
-2989.44 6819.16 2988 6815.32 2988 6811.48 c
-2988 6801.08 2999.56 6795 3017.76 6795 c
-3040.32 6795 3056 6804.72 3056 6818.52 c
-3056 6828.28 3049.6 6833.56 3032.16 6838.52 c
-3023.68 6840.92 l
-3018.56 6842.36 3015 6844.6 3015 6847 c
-3015 6849.56 3017.68 6852.28 3020 6852.28 c
-3020.8 6852.28 3021.92 6852.24 3023.2 6852.12 c
-3024.96 6851.64 3026.24 6851 3028.16 6851 c
-3035.2 6851 3042.4 6853.09 3048.48 6856.92 c
-3057.76 6862.2 3063 6870.36 3063 6879.96 c
-3063 6882.64 3062.59 6884.32 3061.76 6887 c
-3072.48 6887 l
-h
-3014.4 6826.04 m
-3016.32 6825.88 3028.48 6821.72 3032 6820.12 c
-3036.48 6817.88 3039 6815.16 3039 6811 c
-3039 6803.96 3031.8 6800 3019.36 6800 c
-3008.96 6800 3002 6805.1 3002 6812.44 c
-3002 6815.48 3003.32 6818.2 3006.24 6821.24 c
-3008.32 6823.32 3013.12 6826.2 3014.4 6826.04 c
-h
-3036.8 6896.08 m
-3040.96 6896.08 3044 6892.19 3044 6886.52 c
-3044 6881.08 3042.08 6873.4 3039.36 6867.48 c
-3036 6860.12 3031.84 6856 3026.88 6856 c
-3022.56 6856 3020 6859.52 3020 6865.88 c
-3020 6872.28 3022.79 6882.04 3026.24 6888.12 c
-3029.28 6893.4 3032.64 6896.08 3036.8 6896.08 c
-h
-3076 6827 m
-f*
-1 i
-0.564706 g
-2408.15 6009.35 m
-2273.75 6046.55 l
-2369.75 6101.75 l
-2216.15 6111.35 l
-2258.15 6180.95 l
-2110.55 6160.55 l
-2093.75 6232.55 l
-1973.75 6186.95 l
-1898.15 6250.55 l
-1822.55 6186.95 l
-1702.55 6232.55 l
-1684.55 6160.55 l
-1535.75 6180.95 l
-1580.15 6111.35 l
-1426.55 6101.75 l
-1522.55 6046.55 l
-1386.95 6009.35 l
-1522.55 5974.55 l
-1426.55 5918.15 l
-1580.15 5909.75 l
-1535.75 5840.15 l
-1684.55 5859.35 l
-1702.55 5788.55 l
-1822.55 5832.95 l
-1898.15 5769.35 l
-1973.75 5832.95 l
-2093.75 5788.55 l
-2110.55 5859.35 l
-2258.15 5840.15 l
-2216.15 5909.75 l
-2369.75 5918.15 l
-2273.75 5974.55 l
-f*
-1 g
-2348.15 6069.35 m
-2213.75 6106.55 l
-2309.75 6161.75 l
-2156.15 6171.35 l
-2198.15 6240.95 l
-2050.55 6220.55 l
-2033.75 6292.55 l
-1913.75 6246.95 l
-1838.15 6310.55 l
-1762.55 6246.95 l
-1642.55 6292.55 l
-1624.55 6220.55 l
-1475.75 6240.95 l
-1520.15 6171.35 l
-1366.55 6161.75 l
-1462.55 6106.55 l
-1326.95 6069.35 l
-1462.55 6034.55 l
-1366.55 5978.15 l
-1520.15 5969.75 l
-1475.75 5900.15 l
-1624.55 5919.35 l
-1642.55 5848.55 l
-1762.55 5892.95 l
-1838.15 5829.35 l
-1913.75 5892.95 l
-2033.75 5848.55 l
-2050.55 5919.35 l
-2198.15 5900.15 l
-2156.15 5969.75 l
-2309.75 5978.15 l
-2213.75 6034.55 l
-f*
-0 g
-2348.15 6069.35 m
-2213.75 6106.55 l
-2309.75 6161.75 l
-2156.15 6171.35 l
-2198.15 6240.95 l
-2050.55 6220.55 l
-2033.75 6292.55 l
-1913.75 6246.95 l
-1838.15 6310.55 l
-1762.55 6246.95 l
-1642.55 6292.55 l
-1624.55 6220.55 l
-1475.75 6240.95 l
-1520.15 6171.35 l
-1366.55 6161.75 l
-1462.55 6106.55 l
-1326.95 6069.35 l
-1462.55 6034.55 l
-1366.55 5978.15 l
-1520.15 5969.75 l
-1475.75 5900.15 l
-1624.55 5919.35 l
-1642.55 5848.55 l
-1762.55 5892.95 l
-1838.15 5829.35 l
-1913.75 5892.95 l
-2033.75 5848.55 l
-2050.55 5919.35 l
-2198.15 5900.15 l
-2156.15 5969.75 l
-2309.75 5978.15 l
-2213.75 6034.55 l
-2348.15 6069.35 l
-2271.35 6069.35 l
-2162.15 6041.75 l
-2242.55 5994.95 l
-2122.55 5987.75 l
-2159.75 5924.15 l
-2036.15 5942.15 l
-2019.35 5874.95 l
-1910.15 5915.75 l
-1838.15 5855.75 l
-1766.15 5915.75 l
-1655.75 5874.95 l
-1640.15 5942.15 l
-1516.55 5924.15 l
-1554.95 5987.75 l
-1433.75 5994.95 l
-1514.15 6041.75 l
-1404.95 6069.35 l
-1514.15 6098.15 l
-1433.75 6146.15 l
-1554.95 6153.35 l
-1516.55 6215.75 l
-1640.15 6198.95 l
-1655.75 6266.15 l
-1766.15 6224.15 l
-1838.15 6284.15 l
-1910.15 6224.15 l
-2019.35 6266.15 l
-2036.15 6198.95 l
-2159.75 6215.75 l
-2122.55 6153.35 l
-2242.55 6146.15 l
-2162.15 6098.15 l
-2271.35 6069.35 l
-2348.15 6069.35 l
-f*
-0.2 i
-1660.08 6120.76 m
-1640.08 6046.52 l
-1637.52 6037.88 1634.48 6035.64 1624.08 6035 c
-1624.08 6031 l
-1674 6031 l
-1674 6035 l
-1664.72 6035.48 1662.48 6036.76 1662.48 6041.88 c
-1662.48 6043.64 1662.8 6045.4 1663.76 6049.08 c
-1663.92 6049.88 l
-1664.08 6050.68 l
-1683.76 6122.52 l
-1686.16 6130.84 1688.56 6133.08 1696.72 6134.04 c
-1696.72 6138 l
-1662.8 6138 l
-1613.2 6061.24 l
-1604.56 6138 l
-1569.2 6138 l
-1569.2 6134 l
-1579.28 6133.52 1580.72 6132.89 1580.72 6128.44 c
-1580.72 6126.2 1580.08 6123.32 1578.96 6119.16 c
-1561.52 6059.48 l
-1555.12 6038.68 1554 6036.92 1545.36 6035 c
-1545.36 6031 l
-1578.48 6031 l
-1578.48 6035 l
-1568.24 6036.28 1565.68 6038.2 1565.68 6044.76 c
-1565.68 6047.48 1566.48 6051.48 1568.72 6059.48 c
-1584.88 6118.52 l
-1595.6 6029.08 l
-1600.08 6029.08 l
-h
-1692.24 6031 m
-f*
-1761.44 6051.32 m
-1754.88 6042.52 1752.48 6039.76 1749.92 6039.76 c
-1748.64 6039.76 1748 6040.86 1748 6042.52 c
-1748 6046.52 1749.44 6053.08 1753.44 6066.2 c
-1764.8 6103.96 l
-1747.04 6102.84 l
-1744.16 6093.4 l
-1742.72 6101.56 1739.2 6105.08 1732.32 6105.08 c
-1712.64 6105.08 1689 6074.27 1689 6049.24 c
-1689 6037.08 1695.74 6028.92 1705.92 6028.92 c
-1715.68 6028.92 1723.04 6034.68 1732.16 6050.04 c
-1730.24 6043.48 1730 6041.56 1730 6039.32 c
-1730 6033.4 1734.76 6028.76 1740.64 6028.76 c
-1748.16 6028.76 1755.52 6035 1764.8 6048.92 c
-h
-1734.56 6098.2 m
-1738.08 6097.88 1740.56 6095 1740.56 6090.68 c
-1740.56 6081.08 1735.24 6063.32 1728.96 6052.28 c
-1724.64 6044.44 1719.84 6039.92 1715.52 6039.92 c
-1711.36 6039.92 1708 6043.75 1708 6048.92 c
-1708 6057.24 1713.42 6073.24 1720.16 6085.08 c
-1724.96 6093.56 1730.24 6098.52 1734.56 6098.2 c
-h
-1772 6031 m
-f*
-1806.56 6104.92 m
-1790.24 6102.36 1784 6101.4 1775.68 6100.44 c
-1775.68 6096 l
-1782.88 6095.69 1784.32 6095.07 1784.32 6092.12 c
-1784.32 6090.52 1783.04 6084.76 1780.8 6076.44 c
-1764.8 6014.36 l
-1761.76 6003.8 1760.48 6002.84 1752.8 6003 c
-1752.8 5998 l
-1792.64 5998 l
-1792.64 6003 l
-1784.64 6003.14 1782.24 6004.16 1782.24 6007.64 c
-1782.24 6009.88 1783.36 6014.68 1786.4 6025.88 c
-1787.52 6029.72 1787.52 6030.04 1788.16 6032.44 c
-1793.76 6029.56 1795.68 6028.92 1799.04 6028.92 c
-1820.8 6028.92 1843.36 6057.88 1843.36 6085.56 c
-1843.36 6097.4 1836.64 6105.08 1826.08 6105.08 c
-1816.96 6105.08 1809.92 6099.92 1800.48 6086.52 c
-h
-1817.12 6093.56 m
-1821.28 6093.24 1823.68 6089.56 1823.36 6084.44 c
-1822.72 6073.88 1817.6 6058.04 1811.84 6047.64 c
-1806.88 6039 1801.76 6033.92 1796.32 6033.92 c
-1792.8 6033.92 1790.08 6036.75 1790.08 6040.28 c
-1790.08 6043 1791.84 6049.56 1796.16 6064.12 c
-1799.68 6075.8 1801.12 6079.8 1803.52 6083.48 c
-1807.52 6089.72 1812.96 6093.88 1817.12 6093.56 c
-h
-1852 6031 m
-f*
-1887.56 6104.92 m
-1871.24 6102.36 1865 6101.4 1856.68 6100.44 c
-1856.68 6096 l
-1863.88 6095.69 1865.32 6095.07 1865.32 6092.12 c
-1865.32 6090.52 1864.04 6084.76 1861.8 6076.44 c
-1845.8 6014.36 l
-1842.76 6003.8 1841.48 6002.84 1833.8 6003 c
-1833.8 5998 l
-1873.64 5998 l
-1873.64 6003 l
-1865.64 6003.14 1863.24 6004.16 1863.24 6007.64 c
-1863.24 6009.88 1864.36 6014.68 1867.4 6025.88 c
-1868.52 6029.72 1868.52 6030.04 1869.16 6032.44 c
-1874.76 6029.56 1876.68 6028.92 1880.04 6028.92 c
-1901.8 6028.92 1924.36 6057.88 1924.36 6085.56 c
-1924.36 6097.4 1917.64 6105.08 1907.08 6105.08 c
-1897.96 6105.08 1890.92 6099.92 1881.48 6086.52 c
-h
-1898.12 6093.56 m
-1902.28 6093.24 1904.68 6089.56 1904.36 6084.44 c
-1903.72 6073.88 1898.6 6058.04 1892.84 6047.64 c
-1887.88 6039 1882.76 6033.92 1877.32 6033.92 c
-1873.8 6033.92 1871.08 6036.75 1871.08 6040.28 c
-1871.08 6043 1872.84 6049.56 1877.16 6064.12 c
-1880.68 6075.8 1882.12 6079.8 1884.52 6083.48 c
-1888.52 6089.72 1893.96 6093.88 1898.12 6093.56 c
-h
-1933 6031 m
-f*
-1966.56 6053.56 m
-1964.32 6050.36 l
-1960.16 6044.12 1956.48 6040.56 1954.08 6040.56 c
-1952.8 6040.56 1952 6041.77 1952 6043.16 c
-1952 6044.6 1952.62 6048.76 1953.12 6051.48 c
-1967.68 6104.92 l
-1959.22 6103 1948.26 6101.4 1936.04 6100.44 c
-1936.04 6096 l
-1937.44 6096 l
-1942.24 6096 1945.48 6094.44 1945.48 6091.48 c
-1945.48 6090.2 1944.71 6087.8 1943.68 6085.08 c
-1934.4 6050.68 l
-1933.12 6046.04 1933 6041.88 1933 6039.64 c
-1933 6033.56 1937.2 6029.56 1943.36 6029.56 c
-1952.96 6029.56 1958.88 6034.36 1970.08 6051.32 c
-h
-1962.88 6140.4 m
-1957.44 6140.4 1953 6135.46 1953 6130.04 c
-1953 6123.8 1957.26 6119.4 1963.04 6119.4 c
-1969.12 6119.4 1974 6123.86 1974 6129.56 c
-1974 6135.48 1969 6140.4 1962.88 6140.4 c
-h
-1976.48 6031 m
-f*
-2051.36 6052.6 m
-2044.96 6042.68 2042.88 6040.56 2040.16 6040.56 c
-2038.88 6040.56 2038 6041.63 2038 6043.16 c
-2038 6044.76 2038.94 6048.12 2041.92 6057.08 c
-2047.68 6074.52 l
-2050.24 6082.04 2052 6089.08 2052 6092.92 c
-2052 6100.76 2047.78 6105.08 2040.16 6105.08 c
-2034.24 6105.08 2028.48 6102.62 2024.16 6098.36 c
-2018.24 6092.76 2015.2 6088.92 2004.48 6073.08 c
-2014.72 6104.76 l
-2004.48 6102.52 1991.68 6100.92 1982.72 6100.6 c
-1982.72 6095.8 l
-1989.44 6095.65 1991.36 6094.92 1991.36 6092.12 c
-1991.36 6090.2 1989.12 6081.72 1984 6063.64 c
-1980.32 6050.68 1979.2 6046.52 1975.04 6031 c
-1994.4 6031 l
-2001.92 6058.68 2007.68 6072.6 2017.6 6085.56 c
-2020.8 6089.88 2025.76 6093.08 2028.64 6093.08 c
-2030.72 6093.08 2033 6091.63 2033 6090.04 c
-2033 6089.56 2032.54 6088.28 2031.84 6086.68 c
-2023.04 6060.12 l
-2020.48 6052.44 2019 6043.32 2019 6039.16 c
-2019 6033.08 2022.84 6029.56 2029.44 6029.56 c
-2039.04 6029.56 2045.6 6035 2054.88 6050.52 c
-h
-2064.96 6031 m
-f*
-2142.48 6100 m
-2124.72 6100 l
-2119.28 6103.58 2114.48 6105.08 2107.12 6105.08 c
-2087.44 6105.08 2071 6092.05 2071 6075.8 c
-2071 6067.64 2075.35 6061.88 2084.4 6058.2 c
-2071.28 6050.84 2069 6048.6 2069 6042.68 c
-2069 6037.56 2071.89 6034.52 2078.96 6032.12 c
-2069.04 6029.72 2065.84 6028.44 2062 6025.4 c
-2059.44 6023.16 2058 6019.32 2058 6015.48 c
-2058 6005.08 2069.56 5999 2087.76 5999 c
-2110.32 5999 2126 6008.72 2126 6022.52 c
-2126 6032.28 2119.6 6037.56 2102.16 6042.52 c
-2093.68 6044.92 l
-2088.56 6046.36 2085 6048.6 2085 6051 c
-2085 6053.56 2087.68 6056.28 2090 6056.28 c
-2090.8 6056.28 2091.92 6056.24 2093.2 6056.12 c
-2094.96 6055.64 2096.24 6055 2098.16 6055 c
-2105.2 6055 2112.4 6057.09 2118.48 6060.92 c
-2127.76 6066.2 2133 6074.36 2133 6083.96 c
-2133 6086.64 2132.59 6088.32 2131.76 6091 c
-2142.48 6091 l
-h
-2084.4 6030.04 m
-2086.32 6029.88 2098.48 6025.72 2102 6024.12 c
-2106.48 6021.88 2109 6019.16 2109 6015 c
-2109 6007.96 2101.8 6004 2089.36 6004 c
-2078.96 6004 2072 6009.1 2072 6016.44 c
-2072 6019.48 2073.32 6022.2 2076.24 6025.24 c
-2078.32 6027.32 2083.12 6030.2 2084.4 6030.04 c
-h
-2106.8 6100.08 m
-2110.96 6100.08 2114 6096.19 2114 6090.52 c
-2114 6085.08 2112.08 6077.4 2109.36 6071.48 c
-2106 6064.12 2101.84 6060 2096.88 6060 c
-2092.56 6060 2090 6063.52 2090 6069.88 c
-2090 6076.28 2092.79 6086.04 2096.24 6092.12 c
-2099.28 6097.4 2102.64 6100.08 2106.8 6100.08 c
-h
-2146 6031 m
-f*
-1 i
-1 g
-3922.55 6609.35 m
-4088.15 6760.55 l
-4006.55 6760.55 l
-4006.55 6914.15 l
-3839.75 6914.15 l
-3839.75 6760.55 l
-3758.15 6760.55 l
-f*
-0 g
-3922.55 6609.35 m
-4088.15 6760.55 l
-4006.55 6760.55 l
-4006.55 6914.15 l
-3839.75 6914.15 l
-3839.75 6760.55 l
-3758.15 6760.55 l
-3922.55 6609.35 l
-3922.55 6623.75 l
-3783.35 6750.95 l
-3849.35 6750.95 l
-3849.35 6904.55 l
-3995.75 6904.55 l
-3995.75 6750.95 l
-4061.75 6750.95 l
-3922.55 6623.75 l
-3922.55 6609.35 l
-f*
-0.2 i
-3475.88 7147 m
-3475.88 7142 l
-3488.3 7141.29 3492 7138.45 3492 7129.4 c
-3492 7042.28 l
-3492 7033.1 3489.25 7030.94 3475.88 7029.5 c
-3475.88 7025 l
-3533.84 7025 l
-3564.26 7025 3584 7038.5 3584 7058.84 c
-3584 7067.12 3580.73 7074.32 3574.7 7079.9 c
-3568.4 7085.48 3562.28 7088 3549.68 7090.7 c
-3570.56 7096.82 3578 7104.2 3578 7117.88 c
-3578 7136.42 3561.55 7147 3531.5 7147 c
-h
-3521 7086.74 m
-3525.92 7086.74 l
-3544.46 7086.74 3553 7077.2 3553 7057.22 c
-3553 7039.76 3545.77 7031 3531.5 7031 c
-3523.58 7031 3521 7033.99 3521 7041.74 c
-h
-3521 7132.46 m
-3521 7138.94 3523.39 7142 3530.24 7142 c
-3542.84 7142 3549 7134.03 3549 7116.62 c
-3549 7097.72 3543.08 7092.68 3521 7092.14 c
-h
-3593.06 7025 m
-f*
-3678.14 7036.52 m
-3676.34 7034.72 l
-3675.8 7034.18 3675.26 7034 3674.36 7034 c
-3671.84 7034 3671 7035.44 3671 7038.5 c
-3671 7085.48 l
-3671 7100.78 3657.16 7110.16 3634.94 7110.16 c
-3614.6 7110.16 3600.92 7100.97 3600.92 7087.46 c
-3600.92 7079.9 3605.24 7075.58 3612.62 7075.58 c
-3619.82 7075.58 3624.86 7079.9 3624.86 7086.02 c
-3624.86 7088.54 3623.96 7090.88 3621.62 7093.76 c
-3620 7095.56 3619.46 7096.64 3619.46 7097.72 c
-3619.46 7101.5 3624.32 7104.16 3630.8 7104.16 c
-3641.42 7104.16 3646 7099.37 3646 7088.54 c
-3646 7075.4 l
-3624.89 7068.92 3616.41 7065.68 3609.56 7061.18 c
-3601.46 7055.78 3598 7049.48 3598 7041.56 c
-3598 7030.58 3606.07 7022.48 3617.3 7022.48 c
-3627.74 7022.48 3636.02 7026.08 3645.92 7035.08 c
-3647.9 7025.9 3651.86 7022.48 3660.68 7022.48 c
-3668.42 7022.48 3674 7025.36 3680.84 7032.74 c
-h
-3646 7043 m
-3641.04 7037.42 3637.37 7035.26 3632.96 7035.26 c
-3627.56 7035.26 3624 7040.12 3624 7047.32 c
-3624 7057.76 3631.57 7065.14 3646 7069.1 c
-h
-3683 7025 m
-f*
-3744.22 7083.68 m
-3744.22 7109.8 l
-3740.24 7109.8 l
-3739.16 7107.08 3738.08 7106.2 3735.74 7106.2 c
-3734.66 7106.2 3733.04 7106.55 3730.16 7107.44 c
-3724.4 7109.42 3720.26 7110.16 3716.12 7110.16 c
-3699.74 7110.16 3688 7098.99 3688 7083.86 c
-3688 7071.98 3695.34 7063.7 3713.42 7055.96 c
-3725.84 7050.56 3731 7046.06 3731 7040.3 c
-3731 7033.28 3725.48 7028.48 3717.2 7028.48 c
-3704.6 7028.48 3696.32 7036.62 3692.54 7052.36 c
-3687.5 7052.36 l
-3687.5 7022.66 l
-3692 7022.66 l
-3693.98 7026.44 3695.06 7027.7 3696.68 7027.7 c
-3697.58 7027.7 3699.02 7027.34 3700.82 7026.62 c
-3706.04 7024.46 3715.22 7022.48 3720.26 7022.48 c
-3736.64 7022.48 3748 7033.64 3748 7049.84 c
-3748 7062.62 3741.15 7070.54 3723.14 7077.92 c
-3710.9 7083.14 3706 7087.64 3706 7093.76 c
-3706 7099.7 3710.98 7104.16 3717.74 7104.16 c
-3722.6 7104.16 3727.28 7102.19 3731.24 7098.44 c
-3735.02 7094.84 3737 7091.42 3739.7 7083.68 c
-h
-3753.02 7025 m
-f*
-3824.36 7047.5 m
-3816.98 7038.68 3811.58 7035.48 3803.84 7035.48 c
-3797 7035.48 3791.6 7038.53 3788 7044.62 c
-3784.58 7050.36 3783.14 7056.45 3782.42 7069 c
-3827.78 7069 l
-3826.7 7083.99 3824 7092.3 3818.42 7099.34 c
-3812.66 7106.36 3804.2 7110.16 3794.12 7110.16 c
-3771.62 7110.16 3756.5 7092.33 3756.5 7066.04 c
-3756.5 7039.76 3771.26 7022.48 3793.58 7022.48 c
-3808.16 7022.48 3816.98 7028.06 3828.68 7044.98 c
-h
-3781.52 7076 m
-3782.06 7097.42 3785.3 7104.16 3794.12 7104.16 c
-3799.34 7104.16 3802.58 7101.42 3804.02 7096.1 c
-3804.92 7092.68 3805.28 7087.64 3805.64 7078.46 c
-3805.64 7076 l
-h
-3831.92 7025 m
-f*
-3878 7025 m
-f*
-3981.94 7147 m
-3879.88 7147 l
-3879.88 7142 l
-3892.3 7141.29 3896 7138.63 3896 7129.4 c
-3896 7042.28 l
-3896 7032.92 3893.44 7030.94 3879.88 7029.5 c
-3879.88 7025 l
-3944.68 7025 l
-3944.68 7030 l
-3928.12 7030.69 3925 7032.77 3925 7042.28 c
-3925 7084.22 l
-3943.28 7083.86 3949.91 7077.2 3952.42 7056.32 c
-3956.92 7056.32 l
-3956.92 7117.16 l
-3952.42 7117.16 l
-3949.19 7096.64 3942.92 7090.34 3925 7090.34 c
-3925 7132.1 l
-3925 7138.76 3927.32 7141 3936.4 7141 c
-3953.14 7141 3963.58 7137.8 3969.16 7131.2 c
-3973.12 7126.7 3975.1 7121.84 3977.62 7110.5 c
-3981.94 7110.5 l
-h
-3986.98 7025 m
-f*
-4026.28 7108 m
-3992.22 7108 l
-3992.22 7103.66 l
-3999.96 7102.58 4002 7100.24 4002 7093.04 c
-4002 7040.12 l
-4002 7032.74 4000.19 7030.76 3992.22 7029.32 c
-3992.22 7025 l
-4040.1 7025 l
-4040.1 7029.32 l
-4029.12 7030.04 4027 7032.38 4027 7043.54 c
-4027 7077.56 l
-4027 7086.92 4032.02 7094.66 4037.94 7094.66 c
-4039.38 7094.66 4041 7093.4 4042.98 7090.52 c
-4046.4 7085.66 4049.1 7084.04 4053.78 7084.04 c
-4060.44 7084.04 4065.12 7089.08 4065.12 7095.92 c
-4065.12 7104.2 4059 7110.16 4050.54 7110.16 c
-4041.55 7110.16 4034.73 7105.47 4026.28 7093.22 c
-h
-4066.92 7025 m
-f*
-4153.14 7036.52 m
-4151.34 7034.72 l
-4150.8 7034.18 4150.26 7034 4149.36 7034 c
-4146.84 7034 4146 7035.44 4146 7038.5 c
-4146 7085.48 l
-4146 7100.78 4132.16 7110.16 4109.94 7110.16 c
-4089.6 7110.16 4075.92 7100.97 4075.92 7087.46 c
-4075.92 7079.9 4080.24 7075.58 4087.62 7075.58 c
-4094.82 7075.58 4099.86 7079.9 4099.86 7086.02 c
-4099.86 7088.54 4098.96 7090.88 4096.62 7093.76 c
-4095 7095.56 4094.46 7096.64 4094.46 7097.72 c
-4094.46 7101.5 4099.32 7104.16 4105.8 7104.16 c
-4116.42 7104.16 4121 7099.37 4121 7088.54 c
-4121 7075.4 l
-4099.89 7068.92 4091.41 7065.68 4084.56 7061.18 c
-4076.46 7055.78 4073 7049.48 4073 7041.56 c
-4073 7030.58 4081.07 7022.48 4092.3 7022.48 c
-4102.74 7022.48 4111.02 7026.08 4120.92 7035.08 c
-4122.9 7025.9 4126.86 7022.48 4135.68 7022.48 c
-4143.42 7022.48 4149 7025.36 4155.84 7032.74 c
-h
-4121 7043 m
-4116.04 7037.42 4112.37 7035.26 4107.96 7035.26 c
-4102.56 7035.26 4099 7040.12 4099 7047.32 c
-4099 7057.76 4106.57 7065.14 4121 7069.1 c
-h
-4158 7025 m
-f*
-4195.46 7108 m
-4160.73 7108 l
-4160.73 7103.66 l
-4168.65 7102.58 4171 7100.42 4171 7093.04 c
-4171 7040.12 l
-4171 7032.74 4168.95 7030.76 4160.73 7029.32 c
-4160.73 7025 l
-4203.93 7025 l
-4203.93 7029.32 l
-4197.63 7030.22 4196 7032.74 4196 7039.58 c
-4196 7087.64 l
-4196 7088.54 4198.51 7091.78 4200.51 7093.76 c
-4204.29 7096.64 4207.53 7098.16 4210.77 7098.16 c
-4217.79 7098.16 4221 7094 4221 7083.14 c
-4221 7039.58 l
-4221 7032.2 4218.9 7029.86 4211.85 7029.32 c
-4211.85 7025 l
-4253.97 7025 l
-4253.97 7029.32 l
-4247.67 7030.04 4246 7032.74 4246 7039.58 c
-4246 7087.64 l
-4246 7088.54 4248.43 7091.6 4250.37 7093.58 c
-4254.33 7096.64 4257.57 7098.16 4260.81 7098.16 c
-4267.65 7098.16 4270 7093.82 4270 7083.14 c
-4270 7039.58 l
-4270 7032.02 4268.1 7029.86 4261.53 7029.32 c
-4261.53 7025 l
-4304.37 7025 l
-4304.37 7029 l
-4297.35 7029.37 4295 7031.6 4295 7039.58 c
-4295 7084.76 l
-4295 7100.24 4285.6 7110.16 4271.07 7110.16 c
-4260.81 7110.16 4253.97 7106.01 4244.61 7094.48 c
-4239.21 7105.82 4232.91 7110.16 4221.57 7110.16 c
-4210.2 7110.16 4202.21 7105.29 4195.46 7094.48 c
-h
-4307.94 7025 m
-f*
-4380.36 7047.5 m
-4372.98 7038.68 4367.58 7035.48 4359.84 7035.48 c
-4353 7035.48 4347.6 7038.53 4344 7044.62 c
-4340.58 7050.36 4339.14 7056.45 4338.42 7069 c
-4383.78 7069 l
-4382.7 7083.99 4380 7092.3 4374.42 7099.34 c
-4368.66 7106.36 4360.2 7110.16 4350.12 7110.16 c
-4327.62 7110.16 4312.5 7092.33 4312.5 7066.04 c
-4312.5 7039.76 4327.26 7022.48 4349.58 7022.48 c
-4364.16 7022.48 4372.98 7028.06 4384.68 7044.98 c
-h
-4337.52 7076 m
-4338.06 7097.42 4341.3 7104.16 4350.12 7104.16 c
-4355.34 7104.16 4358.58 7101.42 4360.02 7096.1 c
-4360.92 7092.68 4361.28 7087.64 4361.64 7078.46 c
-4361.64 7076 l
-h
-4387.92 7025 m
-f*
-1 i
-3472.55 6989.75 914.4 15.5999 re
-f
-0.2 i
-2524.26 4716.36 m
-2513.64 4705.2 2507.88 4700.88 2499.06 4697.46 c
-2493.84 4695.3 2487.9 4694.58 2482.86 4694.58 c
-2470.98 4694.58 2459.64 4700.74 2454.42 4709.88 c
-2449.2 4719.42 2447 4732.2 2447 4750.38 c
-2447 4787.64 2458.23 4807.7 2479.8 4807.7 c
-2488.26 4807.7 2496 4804.38 2503.74 4797.36 c
-2511.48 4790.52 2515.62 4784.4 2521.92 4770.72 c
-2526.42 4770.72 l
-2526.42 4813.16 l
-2521.56 4813.16 l
-2518.86 4806.43 2517.06 4804.56 2513.64 4804.56 c
-2511.84 4804.56 2509.5 4805.28 2505.36 4807.08 c
-2494.92 4811.4 2486.1 4813.7 2477.46 4813.7 c
-2441.64 4813.7 2415 4785.84 2415 4748.76 c
-2415 4711.68 2441.21 4685.58 2478.54 4685.58 c
-2499.24 4685.58 2511.48 4691.88 2529.66 4711.86 c
-h
-2535.96 4689 m
-f*
-2599.18 4686.66 m
-2606.78 4689.36 2611.02 4690.08 2622.5 4691.34 c
-2633.66 4692.6 l
-2633.66 4697 l
-2625.74 4697.35 2624 4699.63 2624 4707.18 c
-2624 4772 l
-2587.4 4772 l
-2587.4 4767.66 l
-2596.4 4766.94 2599 4764.78 2599 4757.04 c
-2599 4706.1 l
-2592.88 4700.16 2589.18 4698.48 2583.8 4698.48 c
-2576.42 4698.48 2574 4702 2574 4710.96 c
-2574 4772 l
-2539.88 4772 l
-2539.88 4767.66 l
-2547.26 4766.22 2549 4764.6 2549 4757.04 c
-2549 4711.68 l
-2549 4695.84 2557.89 4686.48 2572.64 4686.48 c
-2582.16 4686.48 2588.56 4689.36 2599.18 4698.36 c
-h
-2637.08 4689 m
-f*
-2675.28 4772 m
-2641.22 4772 l
-2641.22 4767.66 l
-2648.96 4766.58 2651 4764.24 2651 4757.04 c
-2651 4704.12 l
-2651 4696.74 2649.19 4694.76 2641.22 4693.32 c
-2641.22 4689 l
-2689.1 4689 l
-2689.1 4693.32 l
-2678.12 4694.04 2676 4696.38 2676 4707.54 c
-2676 4741.56 l
-2676 4750.92 2681.02 4758.66 2686.94 4758.66 c
-2688.38 4758.66 2690 4757.4 2691.98 4754.52 c
-2695.4 4749.66 2698.1 4748.04 2702.78 4748.04 c
-2709.44 4748.04 2714.12 4753.08 2714.12 4759.92 c
-2714.12 4768.2 2708 4774.16 2699.54 4774.16 c
-2690.55 4774.16 2683.73 4769.47 2675.28 4757.22 c
-h
-2715.92 4689 m
-f*
-2756.28 4772 m
-2722.22 4772 l
-2722.22 4767.66 l
-2729.96 4766.58 2732 4764.24 2732 4757.04 c
-2732 4704.12 l
-2732 4696.74 2730.19 4694.76 2722.22 4693.32 c
-2722.22 4689 l
-2770.1 4689 l
-2770.1 4693.32 l
-2759.12 4694.04 2757 4696.38 2757 4707.54 c
-2757 4741.56 l
-2757 4750.92 2762.02 4758.66 2767.94 4758.66 c
-2769.38 4758.66 2771 4757.4 2772.98 4754.52 c
-2776.4 4749.66 2779.1 4748.04 2783.78 4748.04 c
-2790.44 4748.04 2795.12 4753.08 2795.12 4759.92 c
-2795.12 4768.2 2789 4774.16 2780.54 4774.16 c
-2771.55 4774.16 2764.73 4769.47 2756.28 4757.22 c
-h
-2796.92 4689 m
-f*
-2868.36 4711.5 m
-2860.98 4702.68 2855.58 4699.48 2847.84 4699.48 c
-2841 4699.48 2835.6 4702.53 2832 4708.62 c
-2828.58 4714.36 2827.14 4720.45 2826.42 4733 c
-2871.78 4733 l
-2870.7 4747.99 2868 4756.3 2862.42 4763.34 c
-2856.66 4770.36 2848.2 4774.16 2838.12 4774.16 c
-2815.62 4774.16 2800.5 4756.33 2800.5 4730.04 c
-2800.5 4703.76 2815.26 4686.48 2837.58 4686.48 c
-2852.16 4686.48 2860.98 4692.06 2872.68 4708.98 c
-h
-2825.52 4740 m
-2826.06 4761.42 2829.3 4768.16 2838.12 4768.16 c
-2843.34 4768.16 2846.58 4765.42 2848.02 4760.1 c
-2848.92 4756.68 2849.28 4751.64 2849.64 4742.46 c
-2849.64 4740 l
-h
-2875.92 4689 m
-f*
-2913.82 4772 m
-2879.78 4772 l
-2879.78 4767.66 l
-2887.7 4766.4 2889 4764.6 2889 4757.04 c
-2889 4704.12 l
-2889 4696.56 2887.61 4694.94 2879.78 4693.32 c
-2879.78 4689 l
-2923.16 4689 l
-2923.16 4693.32 l
-2916.5 4694.22 2914 4696.92 2914 4703.58 c
-2914 4751.64 l
-2914 4752.36 2915.4 4754.16 2917.4 4755.96 c
-2921.36 4759.92 2925.68 4762.16 2930 4762.16 c
-2936.12 4762.16 2939 4757.27 2939 4747.14 c
-2939 4703.58 l
-2939 4696.92 2936.71 4694.04 2930.72 4693.32 c
-2930.72 4689 l
-2973.02 4689 l
-2973.02 4693.32 l
-2966 4693.86 2964 4696.02 2964 4703.58 c
-2964 4748.76 l
-2964 4764.24 2954.54 4774.16 2939.9 4774.16 c
-2928.96 4774.16 2920.57 4769.11 2913.82 4758.48 c
-h
-2976.08 4689 m
-f*
-3030.9 4772 m
-3014 4772 l
-3014 4802.4 l
-3009.48 4802.4 l
-2998.5 4786.92 2991.3 4778.82 2979.6 4768.92 c
-2979.6 4764 l
-2989 4764 l
-2989 4705.74 l
-2989 4694.04 2996.73 4686.84 3009.12 4686.84 c
-3021.18 4686.84 3028.38 4692.24 3035.76 4707 c
-3031.26 4708.98 l
-3027.66 4702.14 3024.78 4699.84 3021 4699.84 c
-3015.96 4699.84 3014 4702.83 3014 4709.88 c
-3014 4764 l
-3030.9 4764 l
-h
-3035.94 4689 m
-f*
-3081 4689 m
-f*
-3185.94 4811 m
-3083.88 4811 l
-3083.88 4806 l
-3096.3 4805.29 3100 4802.63 3100 4793.4 c
-3100 4706.28 l
-3100 4696.92 3097.44 4694.94 3083.88 4693.5 c
-3083.88 4689 l
-3148.68 4689 l
-3148.68 4694 l
-3132.12 4694.69 3129 4696.77 3129 4706.28 c
-3129 4748.22 l
-3147.28 4747.86 3153.91 4741.2 3156.42 4720.32 c
-3160.92 4720.32 l
-3160.92 4781.16 l
-3156.42 4781.16 l
-3153.19 4760.64 3146.92 4754.34 3129 4754.34 c
-3129 4796.1 l
-3129 4802.76 3131.32 4805 3140.4 4805 c
-3157.14 4805 3167.58 4801.8 3173.16 4795.2 c
-3177.12 4790.7 3179.1 4785.84 3181.62 4774.5 c
-3185.94 4774.5 l
-h
-3190.98 4689 m
-f*
-3230.28 4772 m
-3196.22 4772 l
-3196.22 4767.66 l
-3203.96 4766.58 3206 4764.24 3206 4757.04 c
-3206 4704.12 l
-3206 4696.74 3204.19 4694.76 3196.22 4693.32 c
-3196.22 4689 l
-3244.1 4689 l
-3244.1 4693.32 l
-3233.12 4694.04 3231 4696.38 3231 4707.54 c
-3231 4741.56 l
-3231 4750.92 3236.02 4758.66 3241.94 4758.66 c
-3243.38 4758.66 3245 4757.4 3246.98 4754.52 c
-3250.4 4749.66 3253.1 4748.04 3257.78 4748.04 c
-3264.44 4748.04 3269.12 4753.08 3269.12 4759.92 c
-3269.12 4768.2 3263 4774.16 3254.54 4774.16 c
-3245.55 4774.16 3238.73 4769.47 3230.28 4757.22 c
-h
-3270.92 4689 m
-f*
-3356.14 4700.52 m
-3354.34 4698.72 l
-3353.8 4698.18 3353.26 4698 3352.36 4698 c
-3349.84 4698 3349 4699.44 3349 4702.5 c
-3349 4749.48 l
-3349 4764.78 3335.16 4774.16 3312.94 4774.16 c
-3292.6 4774.16 3278.92 4764.97 3278.92 4751.46 c
-3278.92 4743.9 3283.24 4739.58 3290.62 4739.58 c
-3297.82 4739.58 3302.86 4743.9 3302.86 4750.02 c
-3302.86 4752.54 3301.96 4754.88 3299.62 4757.76 c
-3298 4759.56 3297.46 4760.64 3297.46 4761.72 c
-3297.46 4765.5 3302.32 4768.16 3308.8 4768.16 c
-3319.42 4768.16 3324 4763.37 3324 4752.54 c
-3324 4739.4 l
-3302.89 4732.92 3294.41 4729.68 3287.56 4725.18 c
-3279.46 4719.78 3276 4713.48 3276 4705.56 c
-3276 4694.58 3284.07 4686.48 3295.3 4686.48 c
-3305.74 4686.48 3314.02 4690.08 3323.92 4699.08 c
-3325.9 4689.9 3329.86 4686.48 3338.68 4686.48 c
-3346.42 4686.48 3352 4689.36 3358.84 4696.74 c
-h
-3324 4707 m
-3319.04 4701.42 3315.37 4699.26 3310.96 4699.26 c
-3305.56 4699.26 3302 4704.12 3302 4711.32 c
-3302 4721.76 3309.57 4729.14 3324 4733.1 c
-h
-3361 4689 m
-f*
-3398.46 4772 m
-3363.73 4772 l
-3363.73 4767.66 l
-3371.65 4766.58 3374 4764.42 3374 4757.04 c
-3374 4704.12 l
-3374 4696.74 3371.95 4694.76 3363.73 4693.32 c
-3363.73 4689 l
-3406.93 4689 l
-3406.93 4693.32 l
-3400.63 4694.22 3399 4696.74 3399 4703.58 c
-3399 4751.64 l
-3399 4752.54 3401.51 4755.78 3403.51 4757.76 c
-3407.29 4760.64 3410.53 4762.16 3413.77 4762.16 c
-3420.79 4762.16 3424 4758 3424 4747.14 c
-3424 4703.58 l
-3424 4696.2 3421.9 4693.86 3414.85 4693.32 c
-3414.85 4689 l
-3456.97 4689 l
-3456.97 4693.32 l
-3450.67 4694.04 3449 4696.74 3449 4703.58 c
-3449 4751.64 l
-3449 4752.54 3451.43 4755.6 3453.37 4757.58 c
-3457.33 4760.64 3460.57 4762.16 3463.81 4762.16 c
-3470.65 4762.16 3473 4757.82 3473 4747.14 c
-3473 4703.58 l
-3473 4696.02 3471.1 4693.86 3464.53 4693.32 c
-3464.53 4689 l
-3507.37 4689 l
-3507.37 4693 l
-3500.35 4693.37 3498 4695.6 3498 4703.58 c
-3498 4748.76 l
-3498 4764.24 3488.6 4774.16 3474.07 4774.16 c
-3463.81 4774.16 3456.97 4770.01 3447.61 4758.48 c
-3442.21 4769.82 3435.91 4774.16 3424.57 4774.16 c
-3413.2 4774.16 3405.21 4769.29 3398.46 4758.48 c
-h
-3510.94 4689 m
-f*
-3583.36 4711.5 m
-3575.98 4702.68 3570.58 4699.48 3562.84 4699.48 c
-3556 4699.48 3550.6 4702.53 3547 4708.62 c
-3543.58 4714.36 3542.14 4720.45 3541.42 4733 c
-3586.78 4733 l
-3585.7 4747.99 3583 4756.3 3577.42 4763.34 c
-3571.66 4770.36 3563.2 4774.16 3553.12 4774.16 c
-3530.62 4774.16 3515.5 4756.33 3515.5 4730.04 c
-3515.5 4703.76 3530.26 4686.48 3552.58 4686.48 c
-3567.16 4686.48 3575.98 4692.06 3587.68 4708.98 c
-h
-3540.52 4740 m
-3541.06 4761.42 3544.3 4768.16 3553.12 4768.16 c
-3558.34 4768.16 3561.58 4765.42 3563.02 4760.1 c
-3563.92 4756.68 3564.28 4751.64 3564.64 4742.46 c
-3564.64 4740 l
-h
-3590.92 4689 m
-f*
-1 i
-2405.75 4654.55 1184.4 15.5999 re
-f
-1 g
-3014.15 4881.35 m
-3178.55 5032.55 l
-3095.75 5032.55 l
-3095.75 5186.15 l
-2930.15 5186.15 l
-2930.15 5032.55 l
-2847.35 5032.55 l
-f*
-0 g
-3014.15 4881.35 m
-3178.55 5032.55 l
-3095.75 5032.55 l
-3095.75 5186.15 l
-2930.15 5186.15 l
-2930.15 5032.55 l
-2847.35 5032.55 l
-3014.15 4881.35 l
-3014.15 4894.55 l
-2873.75 5021.75 l
-2939.75 5021.75 l
-2939.75 5176.55 l
-3086.15 5176.55 l
-3086.15 5021.75 l
-3152.15 5021.75 l
-3014.15 4894.55 l
-3014.15 4881.35 l
-f*
-0.564706 g
-2922.95 3375.35 m
-2922.95 3485.75 2831.75 3576.95 2720.15 3576.95 c
-2223.35 3576.95 l
-2111.75 3576.95 2020.55 3485.75 2020.55 3375.35 c
-2020.55 3237.35 l
-2020.55 3126.95 2111.75 3035.75 2223.35 3035.75 c
-2720.15 3035.75 l
-2831.75 3035.75 2922.95 3126.95 2922.95 3237.35 c
-f*
-1 g
-2858.15 3432.95 m
-2858.15 3542.15 2769.35 3630.95 2657.75 3630.95 c
-2166.95 3630.95 l
-2056.55 3630.95 1966.55 3542.15 1966.55 3432.95 c
-1966.55 3298.55 l
-1966.55 3189.35 2055.35 3100.55 2166.95 3100.55 c
-2657.75 3100.55 l
-2769.35 3100.55 2858.15 3189.35 2858.15 3298.55 c
-f*
-0 g
-2858.15 3432.95 m
-2858.15 3542.15 2769.35 3630.95 2657.75 3630.95 c
-2166.95 3630.95 l
-2056.55 3630.95 1966.55 3542.15 1966.55 3432.95 c
-1966.55 3298.55 l
-1966.55 3189.35 2055.35 3100.55 2166.95 3100.55 c
-2657.75 3100.55 l
-2769.35 3100.55 2858.15 3189.35 2858.15 3298.55 c
-h
-S
-0.201248 i
-2199.33 3472 m
-2085.22 3472 l
-2085.22 3467 l
-2099.11 3466.2 2103 3463.18 2103 3452.72 c
-2103 3355.32 l
-2103 3344.85 2100.17 3342.64 2085.22 3341.03 c
-2085.22 3336 l
-2157.67 3336 l
-2157.67 3341 l
-2139.15 3341.81 2136 3344.23 2136 3355.32 c
-2136 3402.21 l
-2156.22 3401.81 2163.55 3394.36 2166.32 3371.02 c
-2171.35 3371.02 l
-2171.35 3439.04 l
-2166.32 3439.04 l
-2162.76 3416.1 2155.82 3409.05 2136 3409.05 c
-2136 3455.74 l
-2136 3463.19 2138.52 3465 2148.41 3465 c
-2167.13 3465 2178.8 3461.64 2185.04 3454.74 c
-2189.47 3449.71 2191.68 3444.27 2194.5 3431.59 c
-2199.33 3431.59 l
-h
-2204.96 3336 m
-f*
-2249.19 3429 m
-2210.84 3429 l
-2210.84 3423.95 l
-2219.49 3422.74 2222 3420.12 2222 3412.07 c
-2222 3352.9 l
-2222 3344.65 2219.93 3342.44 2210.84 3340.83 c
-2210.84 3336 l
-2264.37 3336 l
-2264.37 3340.83 l
-2252.09 3341.63 2250 3344.25 2250 3356.73 c
-2250 3394.76 l
-2250 3405.23 2255.49 3413.88 2261.95 3413.88 c
-2263.56 3413.88 2265.37 3412.47 2267.59 3409.25 c
-2271.41 3403.82 2274.43 3402.01 2279.66 3402.01 c
-2287.11 3402.01 2292.34 3407.64 2292.34 3415.29 c
-2292.34 3424.55 2285.5 3431.41 2276.04 3431.41 c
-2266.1 3431.41 2258.54 3426.12 2249.19 3412.27 c
-h
-2294.35 3336 m
-f*
-2389.19 3348.88 m
-2387.18 3346.87 l
-2386.57 3346.26 2385.97 3346.06 2384.96 3346.06 c
-2382.15 3346.06 2381 3347.67 2381 3351.09 c
-2381 3403.62 l
-2381 3420.73 2365.6 3431.42 2340.89 3431.42 c
-2318.15 3431.42 2302.85 3421.06 2302.85 3405.83 c
-2302.85 3397.38 2307.69 3392.55 2315.94 3392.55 c
-2323.99 3392.55 2329.62 3397.38 2329.62 3404.22 c
-2329.62 3407.04 2328.61 3409.66 2326 3412.88 c
-2324.19 3414.89 2323.58 3416.1 2323.58 3417.3 c
-2323.58 3421.53 2329.02 3424.42 2336.26 3424.42 c
-2348.14 3424.42 2353.86 3419.08 2353.86 3407.04 c
-2353.86 3392.35 l
-2329.91 3385.1 2320.29 3381.48 2312.51 3376.45 c
-2303.46 3370.41 2299 3363.37 2299 3354.52 c
-2299 3342.24 2308.27 3333.18 2321.17 3333.18 c
-2332.84 3333.18 2342.1 3337.21 2353.17 3347.27 c
-2355.38 3337.01 2359.81 3333.18 2369.67 3333.18 c
-2378.32 3333.18 2384.56 3336.4 2392.21 3344.65 c
-h
-2353 3356.13 m
-2347.55 3349.89 2343.52 3347.47 2338.68 3347.47 c
-2332.64 3347.47 2328 3352.91 2328 3360.96 c
-2328 3372.63 2336.61 3380.88 2353 3385.31 c
-h
-2394.62 3336 m
-f*
-2436.4 3429 m
-2397.7 3429 l
-2397.7 3423.95 l
-2406.55 3422.74 2409 3420.32 2409 3412.07 c
-2409 3352.9 l
-2409 3344.65 2406.74 3342.44 2397.7 3340.83 c
-2397.7 3336 l
-2446 3336 l
-2446 3340.83 l
-2438.95 3341.84 2437 3344.65 2437 3352.3 c
-2437 3406.03 l
-2437 3407.04 2439.87 3410.66 2442.18 3412.88 c
-2446.4 3416.1 2450.02 3418.42 2453.65 3418.42 c
-2461.5 3418.42 2465 3413.59 2465 3401 c
-2465 3352.3 l
-2465 3344.05 2462.68 3341.43 2454.85 3340.83 c
-2454.85 3336 l
-2501.95 3336 l
-2501.95 3340.83 l
-2494.9 3341.64 2493 3344.65 2493 3352.3 c
-2493 3406.03 l
-2493 3407.04 2495.73 3410.46 2497.92 3412.68 c
-2502.35 3416.1 2505.97 3418.42 2509.59 3418.42 c
-2517.24 3418.42 2520 3413.38 2520 3401 c
-2520 3352.3 l
-2520 3343.85 2517.85 3341.43 2510.4 3340.83 c
-2510.4 3336 l
-2558.3 3336 l
-2558.3 3341 l
-2550.45 3341.4 2548 3343.78 2548 3352.3 c
-2548 3402.81 l
-2548 3420.12 2537.43 3431.42 2521.07 3431.42 c
-2509.59 3431.42 2501.95 3426.73 2491.48 3413.68 c
-2485.44 3426.36 2478.4 3431.42 2465.72 3431.42 c
-2452.95 3431.42 2443.98 3425.91 2436.4 3413.68 c
-h
-2561.64 3336 m
-f*
-2639.9 3361.16 m
-2631.65 3351.29 2625.61 3347.18 2616.96 3347.18 c
-2609.31 3347.18 2603.27 3350.77 2599.25 3357.94 c
-2595.43 3364.54 2593.82 3371.56 2593.01 3386 c
-2643.73 3386 l
-2642.52 3402.36 2639.5 3411.43 2633.26 3419.12 c
-2626.82 3426.96 2617.36 3431.42 2606.09 3431.42 c
-2580.94 3431.42 2564.03 3411.4 2564.03 3381.88 c
-2564.03 3352.5 2580.53 3333.18 2605.49 3333.18 c
-2621.79 3333.18 2631.65 3339.42 2644.73 3358.34 c
-h
-2592 3393 m
-2592.61 3416.96 2596.23 3424.42 2606.09 3424.42 c
-2611.93 3424.42 2615.55 3421.38 2617.16 3415.49 c
-2618.17 3411.67 2618.57 3406.03 2618.97 3395.77 c
-2618.97 3393 l
-h
-2648.35 3336 m
-f*
-q[1 0 0 1 0 0]concat
-66 97 true[1 0 0 1 -2684 -3336]@85 imagemask
-z"98D:z
-!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z
-"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$
-s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!
-s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!
-s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7++O=k"98D:!"XS[!!E9$
-^]4n\!!!-$s1eU>huE`Zs8Tk7"7Q9j"98D:!!D]j!!E9$^]4E1!!!-$s1eU7qu?^!s8Tk7!;lfs"98D:!!%HJ!!E9$
-^]4@!!!!-$s1eU75C`_9s8Tk7!$?^k"98D:!!!PF!!E9$^]4?FhuElZs1eU7#Oh]qs8Tk7!!D]j"98D:
-!!!,r!!E9$^]4?8qu?j!s1eU7!;lg!s8Tk7!!%HJ"98D:!!!"K!!E9$^]4?75C`k9s1eU7!$?^ns8Tk7
-!!"+V"98D:!!!!0huj#Z^]4?7#N,^as1eU7!!D]ms8Tk7!!!,r"98D:!!!!"qud!!^]4?7!;ls!s1eU7!!%HMs8Tk7
-!!!"K"98D:z56Lrc^]4?7!$?jns1eU7!!!PIs8Tk7!!!!0j8].pz#NPja^]4?7!!Dims1eU7
-!!!&ss8Tk7!!!!"qu?]3z!<<*!^]4?7!!%NKs1eU7!!!!`s8Tk7z5QCc!z!$D7@^]4?7
-!!!Q0s1eU7!!!!(s8Tk7z#QOh>z!!E9$^]4?7!!!'"s1eU7zs8Tk7z!<<)7z!!%NK^]4?7
-!!!!`s1eU7z+90+Vz!$D6Vz!!!Q0^]4?7!!!!(s1eU7z"96.:z!!E8:!!~>
-Q
-1 i
-0.564706 g
-5322.95 3054.95 m
-5322.95 3166.55 5231.75 3257.75 5120.15 3257.75 c
-4623.35 3257.75 l
-4511.75 3257.75 4420.55 3166.55 4420.55 3054.95 c
-4420.55 2918.15 l
-4420.55 2806.55 4511.75 2715.35 4623.35 2715.35 c
-5120.15 2715.35 l
-5231.75 2715.35 5322.95 2806.55 5322.95 2918.15 c
-f*
-1 g
-5253.35 3111.35 m
-5253.35 3219.35 5164.55 3306.95 5055.35 3306.95 c
-4569.35 3306.95 l
-4460.15 3306.95 4371.35 3219.35 4371.35 3111.35 c
-4371.35 2980.55 l
-4371.35 2872.55 4460.15 2784.95 4569.35 2784.95 c
-5055.35 2784.95 l
-5164.55 2784.95 5253.35 2872.55 5253.35 2980.55 c
-f*
-16 w
-0 g
-5253.35 3111.35 m
-5253.35 3219.35 5164.55 3306.95 5055.35 3306.95 c
-4569.35 3306.95 l
-4460.15 3306.95 4371.35 3219.35 4371.35 3111.35 c
-4371.35 2980.55 l
-4371.35 2872.55 4460.15 2784.95 4569.35 2784.95 c
-5055.35 2784.95 l
-5164.55 2784.95 5253.35 2872.55 5253.35 2980.55 c
-h
-S
-0.201248 i
-4599.33 3153 m
-4485.22 3153 l
-4485.22 3148 l
-4499.11 3147.2 4503 3144.18 4503 3133.72 c
-4503 3036.32 l
-4503 3025.85 4500.17 3023.64 4485.22 3022.03 c
-4485.22 3017 l
-4557.67 3017 l
-4557.67 3022 l
-4539.15 3022.81 4536 3025.23 4536 3036.32 c
-4536 3083.21 l
-4556.22 3082.81 4563.55 3075.36 4566.32 3052.02 c
-4571.35 3052.02 l
-4571.35 3120.04 l
-4566.32 3120.04 l
-4562.76 3097.1 4555.82 3090.05 4536 3090.05 c
-4536 3136.74 l
-4536 3144.19 4538.52 3146 4548.41 3146 c
-4567.13 3146 4578.8 3142.64 4585.04 3135.74 c
-4589.47 3130.71 4591.68 3125.27 4594.5 3112.59 c
-4599.33 3112.59 l
-h
-4604.96 3017 m
-f*
-4649.19 3110 m
-4610.84 3110 l
-4610.84 3104.95 l
-4619.49 3103.74 4622 3101.12 4622 3093.07 c
-4622 3033.9 l
-4622 3025.65 4619.93 3023.44 4610.84 3021.83 c
-4610.84 3017 l
-4664.37 3017 l
-4664.37 3021.83 l
-4652.09 3022.63 4650 3025.25 4650 3037.73 c
-4650 3075.76 l
-4650 3086.23 4655.49 3094.88 4661.95 3094.88 c
-4663.56 3094.88 4665.37 3093.47 4667.59 3090.25 c
-4671.41 3084.82 4674.43 3083.01 4679.66 3083.01 c
-4687.11 3083.01 4692.34 3088.64 4692.34 3096.29 c
-4692.34 3105.55 4685.5 3112.41 4676.04 3112.41 c
-4666.1 3112.41 4658.54 3107.12 4649.19 3093.27 c
-h
-4694.35 3017 m
-f*
-4789.19 3029.88 m
-4787.18 3027.87 l
-4786.57 3027.26 4785.97 3027.06 4784.96 3027.06 c
-4782.15 3027.06 4781 3028.67 4781 3032.09 c
-4781 3084.62 l
-4781 3101.73 4765.6 3112.42 4740.89 3112.42 c
-4718.15 3112.42 4702.85 3102.06 4702.85 3086.83 c
-4702.85 3078.38 4707.69 3073.55 4715.94 3073.55 c
-4723.99 3073.55 4729.62 3078.38 4729.62 3085.22 c
-4729.62 3088.04 4728.61 3090.66 4726 3093.88 c
-4724.19 3095.89 4723.58 3097.1 4723.58 3098.3 c
-4723.58 3102.53 4729.02 3105.42 4736.26 3105.42 c
-4748.14 3105.42 4753.86 3100.08 4753.86 3088.04 c
-4753.86 3073.35 l
-4729.91 3066.1 4720.29 3062.48 4712.51 3057.45 c
-4703.46 3051.41 4699 3044.37 4699 3035.52 c
-4699 3023.24 4708.27 3014.18 4721.17 3014.18 c
-4732.84 3014.18 4742.1 3018.21 4753.17 3028.27 c
-4755.38 3018.01 4759.81 3014.18 4769.67 3014.18 c
-4778.32 3014.18 4784.56 3017.4 4792.21 3025.65 c
-h
-4753 3037.13 m
-4747.55 3030.89 4743.52 3028.47 4738.68 3028.47 c
-4732.64 3028.47 4728 3033.91 4728 3041.96 c
-4728 3053.63 4736.61 3061.88 4753 3066.31 c
-h
-4794.62 3017 m
-f*
-4836.4 3110 m
-4797.7 3110 l
-4797.7 3104.95 l
-4806.55 3103.74 4809 3101.32 4809 3093.07 c
-4809 3033.9 l
-4809 3025.65 4806.74 3023.44 4797.7 3021.83 c
-4797.7 3017 l
-4846 3017 l
-4846 3021.83 l
-4838.95 3022.84 4837 3025.65 4837 3033.3 c
-4837 3087.03 l
-4837 3088.04 4839.87 3091.66 4842.18 3093.88 c
-4846.4 3097.1 4850.02 3099.42 4853.65 3099.42 c
-4861.5 3099.42 4865 3094.59 4865 3082 c
-4865 3033.3 l
-4865 3025.05 4862.68 3022.43 4854.85 3021.83 c
-4854.85 3017 l
-4901.95 3017 l
-4901.95 3021.83 l
-4894.9 3022.64 4893 3025.65 4893 3033.3 c
-4893 3087.03 l
-4893 3088.04 4895.73 3091.46 4897.92 3093.68 c
-4902.35 3097.1 4905.97 3099.42 4909.59 3099.42 c
-4917.24 3099.42 4920 3094.38 4920 3082 c
-4920 3033.3 l
-4920 3024.85 4917.85 3022.43 4910.4 3021.83 c
-4910.4 3017 l
-4958.3 3017 l
-4958.3 3022 l
-4950.45 3022.4 4948 3024.78 4948 3033.3 c
-4948 3083.81 l
-4948 3101.12 4937.43 3112.42 4921.07 3112.42 c
-4909.59 3112.42 4901.95 3107.73 4891.48 3094.68 c
-4885.44 3107.36 4878.4 3112.42 4865.72 3112.42 c
-4852.95 3112.42 4843.98 3106.91 4836.4 3094.68 c
-h
-4961.64 3017 m
-f*
-5039.9 3042.16 m
-5031.65 3032.29 5025.61 3028.18 5016.96 3028.18 c
-5009.31 3028.18 5003.27 3031.77 4999.25 3038.94 c
-4995.43 3045.54 4993.82 3052.56 4993.01 3067 c
-5043.73 3067 l
-5042.52 3083.36 5039.5 3092.43 5033.26 3100.12 c
-5026.82 3107.96 5017.36 3112.42 5006.09 3112.42 c
-4980.94 3112.42 4964.03 3092.4 4964.03 3062.88 c
-4964.03 3033.5 4980.53 3014.18 5005.49 3014.18 c
-5021.79 3014.18 5031.65 3020.42 5044.73 3039.34 c
-h
-4992 3074 m
-4992.61 3097.96 4996.23 3105.42 5006.09 3105.42 c
-5011.93 3105.42 5015.55 3102.38 5017.16 3096.49 c
-5018.17 3092.67 5018.57 3087.03 5018.97 3076.77 c
-5018.97 3074 l
-h
-5048.35 3017 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -5092 -3017]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-2904.95 2348.15 m
-2904.95 2458.55 2813.75 2549.75 2702.15 2549.75 c
-2206.55 2549.75 l
-2094.95 2549.75 2003.75 2458.55 2003.75 2348.15 c
-2003.75 2210.15 l
-2003.75 2099.75 2094.95 2008.55 2206.55 2008.55 c
-2702.15 2008.55 l
-2813.75 2008.55 2904.95 2099.75 2904.95 2210.15 c
-f*
-1 g
-2825.75 2402.15 m
-2825.75 2505.35 2739.35 2589.35 2632.55 2589.35 c
-2157.35 2589.35 l
-2050.55 2589.35 1964.15 2505.35 1964.15 2402.15 c
-1964.15 2274.95 l
-1964.15 2171.75 2050.55 2087.75 2157.35 2087.75 c
-2632.55 2087.75 l
-2739.35 2087.75 2825.75 2171.75 2825.75 2274.95 c
-f*
-32 w
-0 g
-2825.75 2402.15 m
-2825.75 2505.35 2739.35 2589.35 2632.55 2589.35 c
-2157.35 2589.35 l
-2050.55 2589.35 1964.15 2505.35 1964.15 2402.15 c
-1964.15 2274.95 l
-1964.15 2171.75 2050.55 2087.75 2157.35 2087.75 c
-2632.55 2087.75 l
-2739.35 2087.75 2825.75 2171.75 2825.75 2274.95 c
-h
-S
-0.201248 i
-2182.33 2445 m
-2068.22 2445 l
-2068.22 2440 l
-2082.11 2439.2 2086 2436.18 2086 2425.72 c
-2086 2328.32 l
-2086 2317.85 2083.17 2315.64 2068.22 2314.03 c
-2068.22 2309 l
-2140.67 2309 l
-2140.67 2314 l
-2122.15 2314.81 2119 2317.23 2119 2328.32 c
-2119 2375.21 l
-2139.22 2374.81 2146.55 2367.36 2149.32 2344.02 c
-2154.35 2344.02 l
-2154.35 2412.04 l
-2149.32 2412.04 l
-2145.76 2389.1 2138.82 2382.05 2119 2382.05 c
-2119 2428.74 l
-2119 2436.19 2121.52 2438 2131.41 2438 c
-2150.13 2438 2161.8 2434.64 2168.04 2427.74 c
-2172.47 2422.71 2174.68 2417.27 2177.5 2404.59 c
-2182.33 2404.59 l
-h
-2187.96 2309 m
-f*
-2231.19 2402 m
-2192.84 2402 l
-2192.84 2396.95 l
-2201.49 2395.74 2204 2393.12 2204 2385.07 c
-2204 2325.9 l
-2204 2317.65 2201.93 2315.44 2192.84 2313.83 c
-2192.84 2309 l
-2246.37 2309 l
-2246.37 2313.83 l
-2234.09 2314.63 2232 2317.25 2232 2329.73 c
-2232 2367.76 l
-2232 2378.23 2237.49 2386.88 2243.95 2386.88 c
-2245.56 2386.88 2247.37 2385.47 2249.59 2382.25 c
-2253.41 2376.82 2256.43 2375.01 2261.66 2375.01 c
-2269.11 2375.01 2274.34 2380.64 2274.34 2388.29 c
-2274.34 2397.55 2267.5 2404.41 2258.04 2404.41 c
-2248.1 2404.41 2240.54 2399.12 2231.19 2385.27 c
-h
-2276.35 2309 m
-f*
-2371.19 2321.88 m
-2369.18 2319.87 l
-2368.57 2319.26 2367.97 2319.06 2366.96 2319.06 c
-2364.15 2319.06 2363 2320.67 2363 2324.09 c
-2363 2376.62 l
-2363 2393.73 2347.6 2404.42 2322.89 2404.42 c
-2300.15 2404.42 2284.85 2394.06 2284.85 2378.83 c
-2284.85 2370.38 2289.69 2365.55 2297.94 2365.55 c
-2305.99 2365.55 2311.62 2370.38 2311.62 2377.22 c
-2311.62 2380.04 2310.61 2382.66 2308 2385.88 c
-2306.19 2387.89 2305.58 2389.1 2305.58 2390.3 c
-2305.58 2394.53 2311.02 2397.42 2318.26 2397.42 c
-2330.14 2397.42 2335.86 2392.08 2335.86 2380.04 c
-2335.86 2365.35 l
-2311.91 2358.1 2302.29 2354.48 2294.51 2349.45 c
-2285.46 2343.41 2281 2336.37 2281 2327.52 c
-2281 2315.24 2290.27 2306.18 2303.17 2306.18 c
-2314.84 2306.18 2324.1 2310.21 2335.17 2320.27 c
-2337.38 2310.01 2341.81 2306.18 2351.67 2306.18 c
-2360.32 2306.18 2366.56 2309.4 2374.21 2317.65 c
-h
-2335 2329.13 m
-2329.55 2322.89 2325.52 2320.47 2320.68 2320.47 c
-2314.64 2320.47 2310 2325.91 2310 2333.96 c
-2310 2345.63 2318.61 2353.88 2335 2358.31 c
-h
-2376.62 2309 m
-f*
-2418.4 2402 m
-2379.7 2402 l
-2379.7 2396.95 l
-2388.55 2395.74 2391 2393.32 2391 2385.07 c
-2391 2325.9 l
-2391 2317.65 2388.74 2315.44 2379.7 2313.83 c
-2379.7 2309 l
-2428 2309 l
-2428 2313.83 l
-2420.95 2314.84 2419 2317.65 2419 2325.3 c
-2419 2379.03 l
-2419 2380.04 2421.87 2383.66 2424.18 2385.88 c
-2428.4 2389.1 2432.02 2391.42 2435.65 2391.42 c
-2443.5 2391.42 2447 2386.59 2447 2374 c
-2447 2325.3 l
-2447 2317.05 2444.68 2314.43 2436.85 2313.83 c
-2436.85 2309 l
-2483.95 2309 l
-2483.95 2313.83 l
-2476.9 2314.64 2475 2317.65 2475 2325.3 c
-2475 2379.03 l
-2475 2380.04 2477.73 2383.46 2479.92 2385.68 c
-2484.35 2389.1 2487.97 2391.42 2491.59 2391.42 c
-2499.24 2391.42 2502 2386.38 2502 2374 c
-2502 2325.3 l
-2502 2316.85 2499.85 2314.43 2492.4 2313.83 c
-2492.4 2309 l
-2540.3 2309 l
-2540.3 2314 l
-2532.45 2314.4 2530 2316.78 2530 2325.3 c
-2530 2375.81 l
-2530 2393.12 2519.43 2404.42 2503.07 2404.42 c
-2491.59 2404.42 2483.95 2399.73 2473.48 2386.68 c
-2467.44 2399.36 2460.4 2404.42 2447.72 2404.42 c
-2434.95 2404.42 2425.98 2398.91 2418.4 2386.68 c
-h
-2543.64 2309 m
-f*
-2623.9 2334.16 m
-2615.65 2324.29 2609.61 2320.18 2600.96 2320.18 c
-2593.31 2320.18 2587.27 2323.77 2583.25 2330.94 c
-2579.43 2337.54 2577.82 2344.56 2577.01 2359 c
-2627.73 2359 l
-2626.52 2375.36 2623.5 2384.43 2617.26 2392.12 c
-2610.82 2399.96 2601.36 2404.42 2590.09 2404.42 c
-2564.94 2404.42 2548.03 2384.4 2548.03 2354.88 c
-2548.03 2325.5 2564.53 2306.18 2589.49 2306.18 c
-2605.79 2306.18 2615.65 2312.42 2628.73 2331.34 c
-h
-2576 2366 m
-2576.61 2389.96 2580.23 2397.42 2590.09 2397.42 c
-2595.93 2397.42 2599.55 2394.38 2601.16 2388.49 c
-2602.17 2384.67 2602.57 2379.03 2602.97 2368.77 c
-2602.97 2366 l
-h
-2632.35 2309 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -2666 -2307]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-16 w
-3375.35 2243.75 m
-3324.95 2510.15 3179.75 2691.35 3016.55 2691.35 c
-2968.55 2691.35 2920.55 2675.75 2876.15 2645.75 c
-S
-2870.15 2711.75 m
-2894.15 2654.15 l
-2949.35 2628.95 l
-2776.55 2542.55 l
-f*
-0.564706 g
-4298.15 2844.95 m
-4163.75 2880.95 l
-4259.75 2937.35 l
-4106.15 2945.75 l
-4148.15 3016.55 l
-4000.55 2996.15 l
-3983.75 3066.95 l
-3863.75 3022.55 l
-3788.15 3086.15 l
-3712.55 3022.55 l
-3592.55 3066.95 l
-3574.55 2996.15 l
-3425.75 3016.55 l
-3470.15 2945.75 l
-3316.55 2937.35 l
-3412.55 2880.95 l
-3276.95 2844.95 l
-3412.55 2810.15 l
-3316.55 2753.75 l
-3470.15 2744.15 l
-3425.75 2674.55 l
-3574.55 2694.95 l
-3592.55 2622.95 l
-3712.55 2668.55 l
-3788.15 2604.95 l
-3863.75 2668.55 l
-3983.75 2622.95 l
-4000.55 2694.95 l
-4148.15 2674.55 l
-4106.15 2744.15 l
-4259.75 2753.75 l
-4163.75 2810.15 l
-f*
-1 g
-4238.15 2904.95 m
-4103.75 2940.95 l
-4199.75 2997.35 l
-4046.15 3005.75 l
-4088.15 3076.55 l
-3940.55 3056.15 l
-3923.75 3126.95 l
-3803.75 3082.55 l
-3728.15 3146.15 l
-3652.55 3082.55 l
-3532.55 3126.95 l
-3514.55 3056.15 l
-3365.75 3076.55 l
-3410.15 3005.75 l
-3256.55 2997.35 l
-3352.55 2940.95 l
-3216.95 2904.95 l
-3352.55 2870.15 l
-3256.55 2813.75 l
-3410.15 2804.15 l
-3365.75 2734.55 l
-3514.55 2754.95 l
-3532.55 2682.95 l
-3652.55 2728.55 l
-3728.15 2664.95 l
-3803.75 2728.55 l
-3923.75 2682.95 l
-3940.55 2754.95 l
-4088.15 2734.55 l
-4046.15 2804.15 l
-4199.75 2813.75 l
-4103.75 2870.15 l
-f*
-0 g
-4238.15 2904.95 m
-4103.75 2940.95 l
-4199.75 2997.35 l
-4046.15 3005.75 l
-4088.15 3076.55 l
-3940.55 3056.15 l
-3923.75 3126.95 l
-3803.75 3082.55 l
-3728.15 3146.15 l
-3652.55 3082.55 l
-3532.55 3126.95 l
-3514.55 3056.15 l
-3365.75 3076.55 l
-3410.15 3005.75 l
-3256.55 2997.35 l
-3352.55 2940.95 l
-3216.95 2904.95 l
-3352.55 2870.15 l
-3256.55 2813.75 l
-3410.15 2804.15 l
-3365.75 2734.55 l
-3514.55 2754.95 l
-3532.55 2682.95 l
-3652.55 2728.55 l
-3728.15 2664.95 l
-3803.75 2728.55 l
-3923.75 2682.95 l
-3940.55 2754.95 l
-4088.15 2734.55 l
-4046.15 2804.15 l
-4199.75 2813.75 l
-4103.75 2870.15 l
-4238.15 2904.95 l
-4161.35 2904.95 l
-4052.15 2877.35 l
-4132.55 2829.35 l
-4012.55 2822.15 l
-4049.75 2759.75 l
-3926.15 2777.75 l
-3909.35 2709.35 l
-3800.15 2751.35 l
-3728.15 2691.35 l
-3656.15 2751.35 l
-3545.75 2709.35 l
-3530.15 2777.75 l
-3406.55 2759.75 l
-3444.95 2822.15 l
-3323.75 2829.35 l
-3404.15 2877.35 l
-3294.95 2904.95 l
-3404.15 2933.75 l
-3323.75 2980.55 l
-3444.95 2988.95 l
-3406.55 3051.35 l
-3530.15 3033.35 l
-3545.75 3100.55 l
-3656.15 3059.75 l
-3728.15 3119.75 l
-3800.15 3059.75 l
-3909.35 3100.55 l
-3926.15 3033.35 l
-4049.75 3051.35 l
-4012.55 2988.95 l
-4132.55 2980.55 l
-4052.15 2933.75 l
-4161.35 2904.95 l
-4238.15 2904.95 l
-f*
-0.2 i
-3550.08 2956.76 m
-3530.08 2882.52 l
-3527.52 2873.88 3524.48 2871.64 3514.08 2871 c
-3514.08 2867 l
-3564 2867 l
-3564 2871 l
-3554.72 2871.48 3552.48 2872.76 3552.48 2877.88 c
-3552.48 2879.64 3552.8 2881.4 3553.76 2885.08 c
-3553.92 2885.88 l
-3554.08 2886.68 l
-3573.76 2958.52 l
-3576.16 2966.84 3578.56 2969.08 3586.72 2970.04 c
-3586.72 2974 l
-3552.8 2974 l
-3503.2 2897.24 l
-3494.56 2974 l
-3459.2 2974 l
-3459.2 2970 l
-3469.28 2969.52 3470.72 2968.89 3470.72 2964.44 c
-3470.72 2962.2 3470.08 2959.32 3468.96 2955.16 c
-3451.52 2895.48 l
-3445.12 2874.68 3444 2872.92 3435.36 2871 c
-3435.36 2867 l
-3468.48 2867 l
-3468.48 2871 l
-3458.24 2872.28 3455.68 2874.2 3455.68 2880.76 c
-3455.68 2883.48 3456.48 2887.48 3458.72 2895.48 c
-3474.88 2954.52 l
-3485.6 2865.08 l
-3490.08 2865.08 l
-h
-3582.24 2867 m
-f*
-3651.44 2887.32 m
-3644.88 2878.52 3642.48 2875.76 3639.92 2875.76 c
-3638.64 2875.76 3638 2876.86 3638 2878.52 c
-3638 2882.52 3639.44 2889.08 3643.44 2902.2 c
-3654.8 2939.96 l
-3637.04 2938.84 l
-3634.16 2929.4 l
-3632.72 2937.56 3629.2 2941.08 3622.32 2941.08 c
-3602.64 2941.08 3579 2910.27 3579 2885.24 c
-3579 2873.08 3585.74 2864.92 3595.92 2864.92 c
-3605.68 2864.92 3613.04 2870.68 3622.16 2886.04 c
-3620.24 2879.48 3620 2877.56 3620 2875.32 c
-3620 2869.4 3624.76 2864.76 3630.64 2864.76 c
-3638.16 2864.76 3645.52 2871 3654.8 2884.92 c
-h
-3624.56 2934.2 m
-3628.08 2933.88 3630.56 2931 3630.56 2926.68 c
-3630.56 2917.08 3625.24 2899.32 3618.96 2888.28 c
-3614.64 2880.44 3609.84 2875.92 3605.52 2875.92 c
-3601.36 2875.92 3598 2879.75 3598 2884.92 c
-3598 2893.24 3603.42 2909.24 3610.16 2921.08 c
-3614.96 2929.56 3620.24 2934.52 3624.56 2934.2 c
-h
-3662 2867 m
-f*
-3696.56 2940.92 m
-3680.24 2938.36 3674 2937.4 3665.68 2936.44 c
-3665.68 2932 l
-3672.88 2931.69 3674.32 2931.07 3674.32 2928.12 c
-3674.32 2926.52 3673.04 2920.76 3670.8 2912.44 c
-3654.8 2850.36 l
-3651.76 2839.8 3650.48 2838.84 3642.8 2839 c
-3642.8 2834 l
-3682.64 2834 l
-3682.64 2839 l
-3674.64 2839.14 3672.24 2840.16 3672.24 2843.64 c
-3672.24 2845.88 3673.36 2850.68 3676.4 2861.88 c
-3677.52 2865.72 3677.52 2866.04 3678.16 2868.44 c
-3683.76 2865.56 3685.68 2864.92 3689.04 2864.92 c
-3710.8 2864.92 3733.36 2893.88 3733.36 2921.56 c
-3733.36 2933.4 3726.64 2941.08 3716.08 2941.08 c
-3706.96 2941.08 3699.92 2935.92 3690.48 2922.52 c
-h
-3707.12 2929.56 m
-3711.28 2929.24 3713.68 2925.56 3713.36 2920.44 c
-3712.72 2909.88 3707.6 2894.04 3701.84 2883.64 c
-3696.88 2875 3691.76 2869.92 3686.32 2869.92 c
-3682.8 2869.92 3680.08 2872.75 3680.08 2876.28 c
-3680.08 2879 3681.84 2885.56 3686.16 2900.12 c
-3689.68 2911.8 3691.12 2915.8 3693.52 2919.48 c
-3697.52 2925.72 3702.96 2929.88 3707.12 2929.56 c
-h
-3742 2867 m
-f*
-3777.56 2940.92 m
-3761.24 2938.36 3755 2937.4 3746.68 2936.44 c
-3746.68 2932 l
-3753.88 2931.69 3755.32 2931.07 3755.32 2928.12 c
-3755.32 2926.52 3754.04 2920.76 3751.8 2912.44 c
-3735.8 2850.36 l
-3732.76 2839.8 3731.48 2838.84 3723.8 2839 c
-3723.8 2834 l
-3763.64 2834 l
-3763.64 2839 l
-3755.64 2839.14 3753.24 2840.16 3753.24 2843.64 c
-3753.24 2845.88 3754.36 2850.68 3757.4 2861.88 c
-3758.52 2865.72 3758.52 2866.04 3759.16 2868.44 c
-3764.76 2865.56 3766.68 2864.92 3770.04 2864.92 c
-3791.8 2864.92 3814.36 2893.88 3814.36 2921.56 c
-3814.36 2933.4 3807.64 2941.08 3797.08 2941.08 c
-3787.96 2941.08 3780.92 2935.92 3771.48 2922.52 c
-h
-3788.12 2929.56 m
-3792.28 2929.24 3794.68 2925.56 3794.36 2920.44 c
-3793.72 2909.88 3788.6 2894.04 3782.84 2883.64 c
-3777.88 2875 3772.76 2869.92 3767.32 2869.92 c
-3763.8 2869.92 3761.08 2872.75 3761.08 2876.28 c
-3761.08 2879 3762.84 2885.56 3767.16 2900.12 c
-3770.68 2911.8 3772.12 2915.8 3774.52 2919.48 c
-3778.52 2925.72 3783.96 2929.88 3788.12 2929.56 c
-h
-3823 2867 m
-f*
-3856.56 2889.56 m
-3854.32 2886.36 l
-3850.16 2880.12 3846.48 2876.56 3844.08 2876.56 c
-3842.8 2876.56 3842 2877.77 3842 2879.16 c
-3842 2880.6 3842.62 2884.76 3843.12 2887.48 c
-3857.68 2940.92 l
-3849.22 2939 3838.26 2937.4 3826.04 2936.44 c
-3826.04 2932 l
-3827.44 2932 l
-3832.24 2932 3835.48 2930.44 3835.48 2927.48 c
-3835.48 2926.2 3834.71 2923.8 3833.68 2921.08 c
-3824.4 2886.68 l
-3823.12 2882.04 3823 2877.88 3823 2875.64 c
-3823 2869.56 3827.2 2865.56 3833.36 2865.56 c
-3842.96 2865.56 3848.88 2870.36 3860.08 2887.32 c
-h
-3852.88 2976.4 m
-3847.44 2976.4 3843 2971.46 3843 2966.04 c
-3843 2959.8 3847.26 2955.4 3853.04 2955.4 c
-3859.12 2955.4 3864 2959.86 3864 2965.56 c
-3864 2971.48 3859 2976.4 3852.88 2976.4 c
-h
-3866.48 2867 m
-f*
-3941.36 2888.6 m
-3934.96 2878.68 3932.88 2876.56 3930.16 2876.56 c
-3928.88 2876.56 3928 2877.63 3928 2879.16 c
-3928 2880.76 3928.94 2884.12 3931.92 2893.08 c
-3937.68 2910.52 l
-3940.24 2918.04 3942 2925.08 3942 2928.92 c
-3942 2936.76 3937.78 2941.08 3930.16 2941.08 c
-3924.24 2941.08 3918.48 2938.62 3914.16 2934.36 c
-3908.24 2928.76 3905.2 2924.92 3894.48 2909.08 c
-3904.72 2940.76 l
-3894.48 2938.52 3881.68 2936.92 3872.72 2936.6 c
-3872.72 2931.8 l
-3879.44 2931.65 3881.36 2930.92 3881.36 2928.12 c
-3881.36 2926.2 3879.12 2917.72 3874 2899.64 c
-3870.32 2886.68 3869.2 2882.52 3865.04 2867 c
-3884.4 2867 l
-3891.92 2894.68 3897.68 2908.6 3907.6 2921.56 c
-3910.8 2925.88 3915.76 2929.08 3918.64 2929.08 c
-3920.72 2929.08 3923 2927.63 3923 2926.04 c
-3923 2925.56 3922.54 2924.28 3921.84 2922.68 c
-3913.04 2896.12 l
-3910.48 2888.44 3909 2879.32 3909 2875.16 c
-3909 2869.08 3912.84 2865.56 3919.44 2865.56 c
-3929.04 2865.56 3935.6 2871 3944.88 2886.52 c
-h
-3954.96 2867 m
-f*
-4032.48 2936 m
-4014.72 2936 l
-4009.28 2939.58 4004.48 2941.08 3997.12 2941.08 c
-3977.44 2941.08 3961 2928.05 3961 2911.8 c
-3961 2903.64 3965.35 2897.88 3974.4 2894.2 c
-3961.28 2886.84 3959 2884.6 3959 2878.68 c
-3959 2873.56 3961.89 2870.52 3968.96 2868.12 c
-3959.04 2865.72 3955.84 2864.44 3952 2861.4 c
-3949.44 2859.16 3948 2855.32 3948 2851.48 c
-3948 2841.08 3959.56 2835 3977.76 2835 c
-4000.32 2835 4016 2844.72 4016 2858.52 c
-4016 2868.28 4009.6 2873.56 3992.16 2878.52 c
-3983.68 2880.92 l
-3978.56 2882.36 3975 2884.6 3975 2887 c
-3975 2889.56 3977.68 2892.28 3980 2892.28 c
-3980.8 2892.28 3981.92 2892.24 3983.2 2892.12 c
-3984.96 2891.64 3986.24 2891 3988.16 2891 c
-3995.2 2891 4002.4 2893.09 4008.48 2896.92 c
-4017.76 2902.2 4023 2910.36 4023 2919.96 c
-4023 2922.64 4022.59 2924.32 4021.76 2927 c
-4032.48 2927 l
-h
-3974.4 2866.04 m
-3976.32 2865.88 3988.48 2861.72 3992 2860.12 c
-3996.48 2857.88 3999 2855.16 3999 2851 c
-3999 2843.96 3991.8 2840 3979.36 2840 c
-3968.96 2840 3962 2845.1 3962 2852.44 c
-3962 2855.48 3963.32 2858.2 3966.24 2861.24 c
-3968.32 2863.32 3973.12 2866.2 3974.4 2866.04 c
-h
-3996.8 2936.08 m
-4000.96 2936.08 4004 2932.19 4004 2926.52 c
-4004 2921.08 4002.08 2913.4 3999.36 2907.48 c
-3996 2900.12 3991.84 2896 3986.88 2896 c
-3982.56 2896 3980 2899.52 3980 2905.88 c
-3980 2912.28 3982.79 2922.04 3986.24 2928.12 c
-3989.28 2933.4 3992.64 2936.08 3996.8 2936.08 c
-h
-4036 2867 m
-f*
-1 i
-0.564706 g
-4088.15 3789.35 m
-3953.75 3826.55 l
-4049.75 3881.75 l
-3896.15 3891.35 l
-3938.15 3960.95 l
-3790.55 3940.55 l
-3773.75 4012.55 l
-3653.75 3966.95 l
-3578.15 4030.55 l
-3502.55 3966.95 l
-3382.55 4012.55 l
-3364.55 3940.55 l
-3215.75 3960.95 l
-3260.15 3891.35 l
-3106.55 3881.75 l
-3202.55 3826.55 l
-3066.95 3789.35 l
-3202.55 3754.55 l
-3106.55 3698.15 l
-3260.15 3689.75 l
-3215.75 3620.15 l
-3364.55 3639.35 l
-3382.55 3568.55 l
-3502.55 3612.95 l
-3578.15 3549.35 l
-3653.75 3612.95 l
-3773.75 3568.55 l
-3790.55 3639.35 l
-3938.15 3620.15 l
-3896.15 3689.75 l
-4049.75 3698.15 l
-3953.75 3754.55 l
-f*
-1 g
-4028.15 3849.35 m
-3893.75 3886.55 l
-3989.75 3941.75 l
-3836.15 3951.35 l
-3878.15 4020.95 l
-3730.55 4000.55 l
-3713.75 4072.55 l
-3593.75 4026.95 l
-3518.15 4090.55 l
-3442.55 4026.95 l
-3322.55 4072.55 l
-3304.55 4000.55 l
-3155.75 4020.95 l
-3200.15 3951.35 l
-3046.55 3941.75 l
-3142.55 3886.55 l
-3006.95 3849.35 l
-3142.55 3814.55 l
-3046.55 3758.15 l
-3200.15 3749.75 l
-3155.75 3680.15 l
-3304.55 3699.35 l
-3322.55 3628.55 l
-3442.55 3672.95 l
-3518.15 3609.35 l
-3593.75 3672.95 l
-3713.75 3628.55 l
-3730.55 3699.35 l
-3878.15 3680.15 l
-3836.15 3749.75 l
-3989.75 3758.15 l
-3893.75 3814.55 l
-f*
-0 g
-4028.15 3849.35 m
-3893.75 3886.55 l
-3989.75 3941.75 l
-3836.15 3951.35 l
-3878.15 4020.95 l
-3730.55 4000.55 l
-3713.75 4072.55 l
-3593.75 4026.95 l
-3518.15 4090.55 l
-3442.55 4026.95 l
-3322.55 4072.55 l
-3304.55 4000.55 l
-3155.75 4020.95 l
-3200.15 3951.35 l
-3046.55 3941.75 l
-3142.55 3886.55 l
-3006.95 3849.35 l
-3142.55 3814.55 l
-3046.55 3758.15 l
-3200.15 3749.75 l
-3155.75 3680.15 l
-3304.55 3699.35 l
-3322.55 3628.55 l
-3442.55 3672.95 l
-3518.15 3609.35 l
-3593.75 3672.95 l
-3713.75 3628.55 l
-3730.55 3699.35 l
-3878.15 3680.15 l
-3836.15 3749.75 l
-3989.75 3758.15 l
-3893.75 3814.55 l
-4028.15 3849.35 l
-3951.35 3849.35 l
-3842.15 3821.75 l
-3922.55 3774.95 l
-3802.55 3767.75 l
-3839.75 3704.15 l
-3716.15 3722.15 l
-3699.35 3654.95 l
-3590.15 3695.75 l
-3518.15 3635.75 l
-3446.15 3695.75 l
-3335.75 3654.95 l
-3320.15 3722.15 l
-3196.55 3704.15 l
-3234.95 3767.75 l
-3113.75 3774.95 l
-3194.15 3821.75 l
-3084.95 3849.35 l
-3194.15 3878.15 l
-3113.75 3926.15 l
-3234.95 3933.35 l
-3196.55 3995.75 l
-3320.15 3978.95 l
-3335.75 4046.15 l
-3446.15 4004.15 l
-3518.15 4064.15 l
-3590.15 4004.15 l
-3699.35 4046.15 l
-3716.15 3978.95 l
-3839.75 3995.75 l
-3802.55 3933.35 l
-3922.55 3926.15 l
-3842.15 3878.15 l
-3951.35 3849.35 l
-4028.15 3849.35 l
-f*
-0.2 i
-3340.08 3900.76 m
-3320.08 3826.52 l
-3317.52 3817.88 3314.48 3815.64 3304.08 3815 c
-3304.08 3811 l
-3354 3811 l
-3354 3815 l
-3344.72 3815.48 3342.48 3816.76 3342.48 3821.88 c
-3342.48 3823.64 3342.8 3825.4 3343.76 3829.08 c
-3343.92 3829.88 l
-3344.08 3830.68 l
-3363.76 3902.52 l
-3366.16 3910.84 3368.56 3913.08 3376.72 3914.04 c
-3376.72 3918 l
-3342.8 3918 l
-3293.2 3841.24 l
-3284.56 3918 l
-3249.2 3918 l
-3249.2 3914 l
-3259.28 3913.52 3260.72 3912.89 3260.72 3908.44 c
-3260.72 3906.2 3260.08 3903.32 3258.96 3899.16 c
-3241.52 3839.48 l
-3235.12 3818.68 3234 3816.92 3225.36 3815 c
-3225.36 3811 l
-3258.48 3811 l
-3258.48 3815 l
-3248.24 3816.28 3245.68 3818.2 3245.68 3824.76 c
-3245.68 3827.48 3246.48 3831.48 3248.72 3839.48 c
-3264.88 3898.52 l
-3275.6 3809.08 l
-3280.08 3809.08 l
-h
-3372.24 3811 m
-f*
-3441.44 3831.32 m
-3434.88 3822.52 3432.48 3819.76 3429.92 3819.76 c
-3428.64 3819.76 3428 3820.86 3428 3822.52 c
-3428 3826.52 3429.44 3833.08 3433.44 3846.2 c
-3444.8 3883.96 l
-3427.04 3882.84 l
-3424.16 3873.4 l
-3422.72 3881.56 3419.2 3885.08 3412.32 3885.08 c
-3392.64 3885.08 3369 3854.27 3369 3829.24 c
-3369 3817.08 3375.74 3808.92 3385.92 3808.92 c
-3395.68 3808.92 3403.04 3814.68 3412.16 3830.04 c
-3410.24 3823.48 3410 3821.56 3410 3819.32 c
-3410 3813.4 3414.76 3808.76 3420.64 3808.76 c
-3428.16 3808.76 3435.52 3815 3444.8 3828.92 c
-h
-3414.56 3878.2 m
-3418.08 3877.88 3420.56 3875 3420.56 3870.68 c
-3420.56 3861.08 3415.24 3843.32 3408.96 3832.28 c
-3404.64 3824.44 3399.84 3819.92 3395.52 3819.92 c
-3391.36 3819.92 3388 3823.75 3388 3828.92 c
-3388 3837.24 3393.42 3853.24 3400.16 3865.08 c
-3404.96 3873.56 3410.24 3878.52 3414.56 3878.2 c
-h
-3452 3811 m
-f*
-3486.56 3884.92 m
-3470.24 3882.36 3464 3881.4 3455.68 3880.44 c
-3455.68 3876 l
-3462.88 3875.69 3464.32 3875.07 3464.32 3872.12 c
-3464.32 3870.52 3463.04 3864.76 3460.8 3856.44 c
-3444.8 3794.36 l
-3441.76 3783.8 3440.48 3782.84 3432.8 3783 c
-3432.8 3778 l
-3472.64 3778 l
-3472.64 3783 l
-3464.64 3783.14 3462.24 3784.16 3462.24 3787.64 c
-3462.24 3789.88 3463.36 3794.68 3466.4 3805.88 c
-3467.52 3809.72 3467.52 3810.04 3468.16 3812.44 c
-3473.76 3809.56 3475.68 3808.92 3479.04 3808.92 c
-3500.8 3808.92 3523.36 3837.88 3523.36 3865.56 c
-3523.36 3877.4 3516.64 3885.08 3506.08 3885.08 c
-3496.96 3885.08 3489.92 3879.92 3480.48 3866.52 c
-h
-3497.12 3873.56 m
-3501.28 3873.24 3503.68 3869.56 3503.36 3864.44 c
-3502.72 3853.88 3497.6 3838.04 3491.84 3827.64 c
-3486.88 3819 3481.76 3813.92 3476.32 3813.92 c
-3472.8 3813.92 3470.08 3816.75 3470.08 3820.28 c
-3470.08 3823 3471.84 3829.56 3476.16 3844.12 c
-3479.68 3855.8 3481.12 3859.8 3483.52 3863.48 c
-3487.52 3869.72 3492.96 3873.88 3497.12 3873.56 c
-h
-3532 3811 m
-f*
-3567.56 3884.92 m
-3551.24 3882.36 3545 3881.4 3536.68 3880.44 c
-3536.68 3876 l
-3543.88 3875.69 3545.32 3875.07 3545.32 3872.12 c
-3545.32 3870.52 3544.04 3864.76 3541.8 3856.44 c
-3525.8 3794.36 l
-3522.76 3783.8 3521.48 3782.84 3513.8 3783 c
-3513.8 3778 l
-3553.64 3778 l
-3553.64 3783 l
-3545.64 3783.14 3543.24 3784.16 3543.24 3787.64 c
-3543.24 3789.88 3544.36 3794.68 3547.4 3805.88 c
-3548.52 3809.72 3548.52 3810.04 3549.16 3812.44 c
-3554.76 3809.56 3556.68 3808.92 3560.04 3808.92 c
-3581.8 3808.92 3604.36 3837.88 3604.36 3865.56 c
-3604.36 3877.4 3597.64 3885.08 3587.08 3885.08 c
-3577.96 3885.08 3570.92 3879.92 3561.48 3866.52 c
-h
-3578.12 3873.56 m
-3582.28 3873.24 3584.68 3869.56 3584.36 3864.44 c
-3583.72 3853.88 3578.6 3838.04 3572.84 3827.64 c
-3567.88 3819 3562.76 3813.92 3557.32 3813.92 c
-3553.8 3813.92 3551.08 3816.75 3551.08 3820.28 c
-3551.08 3823 3552.84 3829.56 3557.16 3844.12 c
-3560.68 3855.8 3562.12 3859.8 3564.52 3863.48 c
-3568.52 3869.72 3573.96 3873.88 3578.12 3873.56 c
-h
-3613 3811 m
-f*
-3646.56 3833.56 m
-3644.32 3830.36 l
-3640.16 3824.12 3636.48 3820.56 3634.08 3820.56 c
-3632.8 3820.56 3632 3821.77 3632 3823.16 c
-3632 3824.6 3632.62 3828.76 3633.12 3831.48 c
-3647.68 3884.92 l
-3639.22 3883 3628.26 3881.4 3616.04 3880.44 c
-3616.04 3876 l
-3617.44 3876 l
-3622.24 3876 3625.48 3874.44 3625.48 3871.48 c
-3625.48 3870.2 3624.71 3867.8 3623.68 3865.08 c
-3614.4 3830.68 l
-3613.12 3826.04 3613 3821.88 3613 3819.64 c
-3613 3813.56 3617.2 3809.56 3623.36 3809.56 c
-3632.96 3809.56 3638.88 3814.36 3650.08 3831.32 c
-h
-3642.88 3920.4 m
-3637.44 3920.4 3633 3915.46 3633 3910.04 c
-3633 3903.8 3637.26 3899.4 3643.04 3899.4 c
-3649.12 3899.4 3654 3903.86 3654 3909.56 c
-3654 3915.48 3649 3920.4 3642.88 3920.4 c
-h
-3656.48 3811 m
-f*
-3731.36 3832.6 m
-3724.96 3822.68 3722.88 3820.56 3720.16 3820.56 c
-3718.88 3820.56 3718 3821.63 3718 3823.16 c
-3718 3824.76 3718.94 3828.12 3721.92 3837.08 c
-3727.68 3854.52 l
-3730.24 3862.04 3732 3869.08 3732 3872.92 c
-3732 3880.76 3727.78 3885.08 3720.16 3885.08 c
-3714.24 3885.08 3708.48 3882.62 3704.16 3878.36 c
-3698.24 3872.76 3695.2 3868.92 3684.48 3853.08 c
-3694.72 3884.76 l
-3684.48 3882.52 3671.68 3880.92 3662.72 3880.6 c
-3662.72 3875.8 l
-3669.44 3875.65 3671.36 3874.92 3671.36 3872.12 c
-3671.36 3870.2 3669.12 3861.72 3664 3843.64 c
-3660.32 3830.68 3659.2 3826.52 3655.04 3811 c
-3674.4 3811 l
-3681.92 3838.68 3687.68 3852.6 3697.6 3865.56 c
-3700.8 3869.88 3705.76 3873.08 3708.64 3873.08 c
-3710.72 3873.08 3713 3871.63 3713 3870.04 c
-3713 3869.56 3712.54 3868.28 3711.84 3866.68 c
-3703.04 3840.12 l
-3700.48 3832.44 3699 3823.32 3699 3819.16 c
-3699 3813.08 3702.84 3809.56 3709.44 3809.56 c
-3719.04 3809.56 3725.6 3815 3734.88 3830.52 c
-h
-3744.96 3811 m
-f*
-3822.48 3880 m
-3804.72 3880 l
-3799.28 3883.58 3794.48 3885.08 3787.12 3885.08 c
-3767.44 3885.08 3751 3872.05 3751 3855.8 c
-3751 3847.64 3755.35 3841.88 3764.4 3838.2 c
-3751.28 3830.84 3749 3828.6 3749 3822.68 c
-3749 3817.56 3751.89 3814.52 3758.96 3812.12 c
-3749.04 3809.72 3745.84 3808.44 3742 3805.4 c
-3739.44 3803.16 3738 3799.32 3738 3795.48 c
-3738 3785.08 3749.56 3779 3767.76 3779 c
-3790.32 3779 3806 3788.72 3806 3802.52 c
-3806 3812.28 3799.6 3817.56 3782.16 3822.52 c
-3773.68 3824.92 l
-3768.56 3826.36 3765 3828.6 3765 3831 c
-3765 3833.56 3767.68 3836.28 3770 3836.28 c
-3770.8 3836.28 3771.92 3836.24 3773.2 3836.12 c
-3774.96 3835.64 3776.24 3835 3778.16 3835 c
-3785.2 3835 3792.4 3837.09 3798.48 3840.92 c
-3807.76 3846.2 3813 3854.36 3813 3863.96 c
-3813 3866.64 3812.59 3868.32 3811.76 3871 c
-3822.48 3871 l
-h
-3764.4 3810.04 m
-3766.32 3809.88 3778.48 3805.72 3782 3804.12 c
-3786.48 3801.88 3789 3799.16 3789 3795 c
-3789 3787.96 3781.8 3784 3769.36 3784 c
-3758.96 3784 3752 3789.1 3752 3796.44 c
-3752 3799.48 3753.32 3802.2 3756.24 3805.24 c
-3758.32 3807.32 3763.12 3810.2 3764.4 3810.04 c
-h
-3786.8 3880.08 m
-3790.96 3880.08 3794 3876.19 3794 3870.52 c
-3794 3865.08 3792.08 3857.4 3789.36 3851.48 c
-3786 3844.12 3781.84 3840 3776.88 3840 c
-3772.56 3840 3770 3843.52 3770 3849.88 c
-3770 3856.28 3772.79 3866.04 3776.24 3872.12 c
-3779.28 3877.4 3782.64 3880.08 3786.8 3880.08 c
-h
-3826 3811 m
-f*
-1 i
-1 g
-4822.55 3368.15 m
-4988.15 3521.75 l
-4906.55 3521.75 l
-4906.55 3672.95 l
-4739.75 3672.95 l
-4739.75 3521.75 l
-4658.15 3521.75 l
-f*
-0 g
-4822.55 3368.15 m
-4988.15 3521.75 l
-4906.55 3521.75 l
-4906.55 3672.95 l
-4739.75 3672.95 l
-4739.75 3521.75 l
-4658.15 3521.75 l
-4822.55 3368.15 l
-4822.55 3382.55 l
-4683.35 3512.15 l
-4749.35 3512.15 l
-4749.35 3663.35 l
-4895.75 3663.35 l
-4895.75 3512.15 l
-4964.15 3512.15 l
-4822.55 3382.55 l
-4822.55 3368.15 l
-f*
-0.2 i
-4375.88 3907 m
-4375.88 3902 l
-4388.3 3901.29 4392 3898.45 4392 3889.4 c
-4392 3802.28 l
-4392 3793.1 4389.25 3790.94 4375.88 3789.5 c
-4375.88 3785 l
-4433.84 3785 l
-4464.26 3785 4484 3798.5 4484 3818.84 c
-4484 3827.12 4480.73 3834.32 4474.7 3839.9 c
-4468.4 3845.48 4462.28 3848 4449.68 3850.7 c
-4470.56 3856.82 4478 3864.2 4478 3877.88 c
-4478 3896.42 4461.55 3907 4431.5 3907 c
-h
-4421 3846.74 m
-4425.92 3846.74 l
-4444.46 3846.74 4453 3837.2 4453 3817.22 c
-4453 3799.76 4445.77 3791 4431.5 3791 c
-4423.58 3791 4421 3793.99 4421 3801.74 c
-h
-4421 3892.46 m
-4421 3898.94 4423.39 3902 4430.24 3902 c
-4442.84 3902 4449 3894.03 4449 3876.62 c
-4449 3857.72 4443.08 3852.68 4421 3852.14 c
-h
-4493.06 3785 m
-f*
-4578.14 3796.52 m
-4576.34 3794.72 l
-4575.8 3794.18 4575.26 3794 4574.36 3794 c
-4571.84 3794 4571 3795.44 4571 3798.5 c
-4571 3845.48 l
-4571 3860.78 4557.16 3870.16 4534.94 3870.16 c
-4514.6 3870.16 4500.92 3860.97 4500.92 3847.46 c
-4500.92 3839.9 4505.24 3835.58 4512.62 3835.58 c
-4519.82 3835.58 4524.86 3839.9 4524.86 3846.02 c
-4524.86 3848.54 4523.96 3850.88 4521.62 3853.76 c
-4520 3855.56 4519.46 3856.64 4519.46 3857.72 c
-4519.46 3861.5 4524.32 3864.16 4530.8 3864.16 c
-4541.42 3864.16 4546 3859.37 4546 3848.54 c
-4546 3835.4 l
-4524.89 3828.92 4516.41 3825.68 4509.56 3821.18 c
-4501.46 3815.78 4498 3809.48 4498 3801.56 c
-4498 3790.58 4506.07 3782.48 4517.3 3782.48 c
-4527.74 3782.48 4536.02 3786.08 4545.92 3795.08 c
-4547.9 3785.9 4551.86 3782.48 4560.68 3782.48 c
-4568.42 3782.48 4574 3785.36 4580.84 3792.74 c
-h
-4546 3803 m
-4541.04 3797.42 4537.37 3795.26 4532.96 3795.26 c
-4527.56 3795.26 4524 3800.12 4524 3807.32 c
-4524 3817.76 4531.57 3825.14 4546 3829.1 c
-h
-4583 3785 m
-f*
-4644.22 3843.68 m
-4644.22 3869.8 l
-4640.24 3869.8 l
-4639.16 3867.08 4638.08 3866.2 4635.74 3866.2 c
-4634.66 3866.2 4633.04 3866.55 4630.16 3867.44 c
-4624.4 3869.42 4620.26 3870.16 4616.12 3870.16 c
-4599.74 3870.16 4588 3858.99 4588 3843.86 c
-4588 3831.98 4595.34 3823.7 4613.42 3815.96 c
-4625.84 3810.56 4631 3806.06 4631 3800.3 c
-4631 3793.28 4625.48 3788.48 4617.2 3788.48 c
-4604.6 3788.48 4596.32 3796.62 4592.54 3812.36 c
-4587.5 3812.36 l
-4587.5 3782.66 l
-4592 3782.66 l
-4593.98 3786.44 4595.06 3787.7 4596.68 3787.7 c
-4597.58 3787.7 4599.02 3787.34 4600.82 3786.62 c
-4606.04 3784.46 4615.22 3782.48 4620.26 3782.48 c
-4636.64 3782.48 4648 3793.64 4648 3809.84 c
-4648 3822.62 4641.15 3830.54 4623.14 3837.92 c
-4610.9 3843.14 4606 3847.64 4606 3853.76 c
-4606 3859.7 4610.98 3864.16 4617.74 3864.16 c
-4622.6 3864.16 4627.28 3862.19 4631.24 3858.44 c
-4635.02 3854.84 4637 3851.42 4639.7 3843.68 c
-h
-4653.02 3785 m
-f*
-4724.36 3807.5 m
-4716.98 3798.68 4711.58 3795.48 4703.84 3795.48 c
-4697 3795.48 4691.6 3798.53 4688 3804.62 c
-4684.58 3810.36 4683.14 3816.45 4682.42 3829 c
-4727.78 3829 l
-4726.7 3843.99 4724 3852.3 4718.42 3859.34 c
-4712.66 3866.36 4704.2 3870.16 4694.12 3870.16 c
-4671.62 3870.16 4656.5 3852.33 4656.5 3826.04 c
-4656.5 3799.76 4671.26 3782.48 4693.58 3782.48 c
-4708.16 3782.48 4716.98 3788.06 4728.68 3804.98 c
-h
-4681.52 3836 m
-4682.06 3857.42 4685.3 3864.16 4694.12 3864.16 c
-4699.34 3864.16 4702.58 3861.42 4704.02 3856.1 c
-4704.92 3852.68 4705.28 3847.64 4705.64 3838.46 c
-4705.64 3836 l
-h
-4731.92 3785 m
-f*
-4778 3785 m
-f*
-4881.94 3907 m
-4779.88 3907 l
-4779.88 3902 l
-4792.3 3901.29 4796 3898.63 4796 3889.4 c
-4796 3802.28 l
-4796 3792.92 4793.44 3790.94 4779.88 3789.5 c
-4779.88 3785 l
-4844.68 3785 l
-4844.68 3790 l
-4828.12 3790.69 4825 3792.77 4825 3802.28 c
-4825 3844.22 l
-4843.28 3843.86 4849.91 3837.2 4852.42 3816.32 c
-4856.92 3816.32 l
-4856.92 3877.16 l
-4852.42 3877.16 l
-4849.19 3856.64 4842.92 3850.34 4825 3850.34 c
-4825 3892.1 l
-4825 3898.76 4827.32 3901 4836.4 3901 c
-4853.14 3901 4863.58 3897.8 4869.16 3891.2 c
-4873.12 3886.7 4875.1 3881.84 4877.62 3870.5 c
-4881.94 3870.5 l
-h
-4886.98 3785 m
-f*
-4926.28 3868 m
-4892.22 3868 l
-4892.22 3863.66 l
-4899.96 3862.58 4902 3860.24 4902 3853.04 c
-4902 3800.12 l
-4902 3792.74 4900.19 3790.76 4892.22 3789.32 c
-4892.22 3785 l
-4940.1 3785 l
-4940.1 3789.32 l
-4929.12 3790.04 4927 3792.38 4927 3803.54 c
-4927 3837.56 l
-4927 3846.92 4932.02 3854.66 4937.94 3854.66 c
-4939.38 3854.66 4941 3853.4 4942.98 3850.52 c
-4946.4 3845.66 4949.1 3844.04 4953.78 3844.04 c
-4960.44 3844.04 4965.12 3849.08 4965.12 3855.92 c
-4965.12 3864.2 4959 3870.16 4950.54 3870.16 c
-4941.55 3870.16 4934.73 3865.47 4926.28 3853.22 c
-h
-4966.92 3785 m
-f*
-5053.14 3796.52 m
-5051.34 3794.72 l
-5050.8 3794.18 5050.26 3794 5049.36 3794 c
-5046.84 3794 5046 3795.44 5046 3798.5 c
-5046 3845.48 l
-5046 3860.78 5032.16 3870.16 5009.94 3870.16 c
-4989.6 3870.16 4975.92 3860.97 4975.92 3847.46 c
-4975.92 3839.9 4980.24 3835.58 4987.62 3835.58 c
-4994.82 3835.58 4999.86 3839.9 4999.86 3846.02 c
-4999.86 3848.54 4998.96 3850.88 4996.62 3853.76 c
-4995 3855.56 4994.46 3856.64 4994.46 3857.72 c
-4994.46 3861.5 4999.32 3864.16 5005.8 3864.16 c
-5016.42 3864.16 5021 3859.37 5021 3848.54 c
-5021 3835.4 l
-4999.89 3828.92 4991.41 3825.68 4984.56 3821.18 c
-4976.46 3815.78 4973 3809.48 4973 3801.56 c
-4973 3790.58 4981.07 3782.48 4992.3 3782.48 c
-5002.74 3782.48 5011.02 3786.08 5020.92 3795.08 c
-5022.9 3785.9 5026.86 3782.48 5035.68 3782.48 c
-5043.42 3782.48 5049 3785.36 5055.84 3792.74 c
-h
-5021 3803 m
-5016.04 3797.42 5012.37 3795.26 5007.96 3795.26 c
-5002.56 3795.26 4999 3800.12 4999 3807.32 c
-4999 3817.76 5006.57 3825.14 5021 3829.1 c
-h
-5058 3785 m
-f*
-5095.46 3868 m
-5060.73 3868 l
-5060.73 3863.66 l
-5068.65 3862.58 5071 3860.42 5071 3853.04 c
-5071 3800.12 l
-5071 3792.74 5068.95 3790.76 5060.73 3789.32 c
-5060.73 3785 l
-5103.93 3785 l
-5103.93 3789.32 l
-5097.63 3790.22 5096 3792.74 5096 3799.58 c
-5096 3847.64 l
-5096 3848.54 5098.51 3851.78 5100.51 3853.76 c
-5104.29 3856.64 5107.53 3858.16 5110.77 3858.16 c
-5117.79 3858.16 5121 3854 5121 3843.14 c
-5121 3799.58 l
-5121 3792.2 5118.9 3789.86 5111.85 3789.32 c
-5111.85 3785 l
-5153.97 3785 l
-5153.97 3789.32 l
-5147.67 3790.04 5146 3792.74 5146 3799.58 c
-5146 3847.64 l
-5146 3848.54 5148.43 3851.6 5150.37 3853.58 c
-5154.33 3856.64 5157.57 3858.16 5160.81 3858.16 c
-5167.65 3858.16 5170 3853.82 5170 3843.14 c
-5170 3799.58 l
-5170 3792.02 5168.1 3789.86 5161.53 3789.32 c
-5161.53 3785 l
-5204.37 3785 l
-5204.37 3789 l
-5197.35 3789.37 5195 3791.6 5195 3799.58 c
-5195 3844.76 l
-5195 3860.24 5185.6 3870.16 5171.07 3870.16 c
-5160.81 3870.16 5153.97 3866.01 5144.61 3854.48 c
-5139.21 3865.82 5132.91 3870.16 5121.57 3870.16 c
-5110.2 3870.16 5102.21 3865.29 5095.46 3854.48 c
-h
-5207.94 3785 m
-f*
-5280.36 3807.5 m
-5272.98 3798.68 5267.58 3795.48 5259.84 3795.48 c
-5253 3795.48 5247.6 3798.53 5244 3804.62 c
-5240.58 3810.36 5239.14 3816.45 5238.42 3829 c
-5283.78 3829 l
-5282.7 3843.99 5280 3852.3 5274.42 3859.34 c
-5268.66 3866.36 5260.2 3870.16 5250.12 3870.16 c
-5227.62 3870.16 5212.5 3852.33 5212.5 3826.04 c
-5212.5 3799.76 5227.26 3782.48 5249.58 3782.48 c
-5264.16 3782.48 5272.98 3788.06 5284.68 3804.98 c
-h
-5237.52 3836 m
-5238.06 3857.42 5241.3 3864.16 5250.12 3864.16 c
-5255.34 3864.16 5258.58 3861.42 5260.02 3856.1 c
-5260.92 3852.68 5261.28 3847.64 5261.64 3838.46 c
-5261.64 3836 l
-h
-5287.92 3785 m
-f*
-1 i
-4372.55 3749.75 914.4 15.5999 re
-f
-0.2 i
-1924.26 1536.36 m
-1913.64 1525.2 1907.88 1520.88 1899.06 1517.46 c
-1893.84 1515.3 1887.9 1514.58 1882.86 1514.58 c
-1870.98 1514.58 1859.64 1520.74 1854.42 1529.88 c
-1849.2 1539.42 1847 1552.2 1847 1570.38 c
-1847 1607.64 1858.23 1627.7 1879.8 1627.7 c
-1888.26 1627.7 1896 1624.38 1903.74 1617.36 c
-1911.48 1610.52 1915.62 1604.4 1921.92 1590.72 c
-1926.42 1590.72 l
-1926.42 1633.16 l
-1921.56 1633.16 l
-1918.86 1626.43 1917.06 1624.56 1913.64 1624.56 c
-1911.84 1624.56 1909.5 1625.28 1905.36 1627.08 c
-1894.92 1631.4 1886.1 1633.7 1877.46 1633.7 c
-1841.64 1633.7 1815 1605.84 1815 1568.76 c
-1815 1531.68 1841.21 1505.58 1878.54 1505.58 c
-1899.24 1505.58 1911.48 1511.88 1929.66 1531.86 c
-h
-1935.96 1509 m
-f*
-1999.18 1506.66 m
-2006.78 1509.36 2011.02 1510.08 2022.5 1511.34 c
-2033.66 1512.6 l
-2033.66 1517 l
-2025.74 1517.35 2024 1519.63 2024 1527.18 c
-2024 1592 l
-1987.4 1592 l
-1987.4 1587.66 l
-1996.4 1586.94 1999 1584.78 1999 1577.04 c
-1999 1526.1 l
-1992.88 1520.16 1989.18 1518.48 1983.8 1518.48 c
-1976.42 1518.48 1974 1522 1974 1530.96 c
-1974 1592 l
-1939.88 1592 l
-1939.88 1587.66 l
-1947.26 1586.22 1949 1584.6 1949 1577.04 c
-1949 1531.68 l
-1949 1515.84 1957.89 1506.48 1972.64 1506.48 c
-1982.16 1506.48 1988.56 1509.36 1999.18 1518.36 c
-h
-2037.08 1509 m
-f*
-2075.28 1592 m
-2041.22 1592 l
-2041.22 1587.66 l
-2048.96 1586.58 2051 1584.24 2051 1577.04 c
-2051 1524.12 l
-2051 1516.74 2049.19 1514.76 2041.22 1513.32 c
-2041.22 1509 l
-2089.1 1509 l
-2089.1 1513.32 l
-2078.12 1514.04 2076 1516.38 2076 1527.54 c
-2076 1561.56 l
-2076 1570.92 2081.02 1578.66 2086.94 1578.66 c
-2088.38 1578.66 2090 1577.4 2091.98 1574.52 c
-2095.4 1569.66 2098.1 1568.04 2102.78 1568.04 c
-2109.44 1568.04 2114.12 1573.08 2114.12 1579.92 c
-2114.12 1588.2 2108 1594.16 2099.54 1594.16 c
-2090.55 1594.16 2083.73 1589.47 2075.28 1577.22 c
-h
-2115.92 1509 m
-f*
-2156.28 1592 m
-2122.22 1592 l
-2122.22 1587.66 l
-2129.96 1586.58 2132 1584.24 2132 1577.04 c
-2132 1524.12 l
-2132 1516.74 2130.19 1514.76 2122.22 1513.32 c
-2122.22 1509 l
-2170.1 1509 l
-2170.1 1513.32 l
-2159.12 1514.04 2157 1516.38 2157 1527.54 c
-2157 1561.56 l
-2157 1570.92 2162.02 1578.66 2167.94 1578.66 c
-2169.38 1578.66 2171 1577.4 2172.98 1574.52 c
-2176.4 1569.66 2179.1 1568.04 2183.78 1568.04 c
-2190.44 1568.04 2195.12 1573.08 2195.12 1579.92 c
-2195.12 1588.2 2189 1594.16 2180.54 1594.16 c
-2171.55 1594.16 2164.73 1589.47 2156.28 1577.22 c
-h
-2196.92 1509 m
-f*
-2268.36 1531.5 m
-2260.98 1522.68 2255.58 1519.48 2247.84 1519.48 c
-2241 1519.48 2235.6 1522.53 2232 1528.62 c
-2228.58 1534.36 2227.14 1540.45 2226.42 1553 c
-2271.78 1553 l
-2270.7 1567.99 2268 1576.3 2262.42 1583.34 c
-2256.66 1590.36 2248.2 1594.16 2238.12 1594.16 c
-2215.62 1594.16 2200.5 1576.33 2200.5 1550.04 c
-2200.5 1523.76 2215.26 1506.48 2237.58 1506.48 c
-2252.16 1506.48 2260.98 1512.06 2272.68 1528.98 c
-h
-2225.52 1560 m
-2226.06 1581.42 2229.3 1588.16 2238.12 1588.16 c
-2243.34 1588.16 2246.58 1585.42 2248.02 1580.1 c
-2248.92 1576.68 2249.28 1571.64 2249.64 1562.46 c
-2249.64 1560 l
-h
-2275.92 1509 m
-f*
-2313.82 1592 m
-2279.78 1592 l
-2279.78 1587.66 l
-2287.7 1586.4 2289 1584.6 2289 1577.04 c
-2289 1524.12 l
-2289 1516.56 2287.61 1514.94 2279.78 1513.32 c
-2279.78 1509 l
-2323.16 1509 l
-2323.16 1513.32 l
-2316.5 1514.22 2314 1516.92 2314 1523.58 c
-2314 1571.64 l
-2314 1572.36 2315.4 1574.16 2317.4 1575.96 c
-2321.36 1579.92 2325.68 1582.16 2330 1582.16 c
-2336.12 1582.16 2339 1577.27 2339 1567.14 c
-2339 1523.58 l
-2339 1516.92 2336.71 1514.04 2330.72 1513.32 c
-2330.72 1509 l
-2373.02 1509 l
-2373.02 1513.32 l
-2366 1513.86 2364 1516.02 2364 1523.58 c
-2364 1568.76 l
-2364 1584.24 2354.54 1594.16 2339.9 1594.16 c
-2328.96 1594.16 2320.57 1589.11 2313.82 1578.48 c
-h
-2376.08 1509 m
-f*
-2430.9 1592 m
-2414 1592 l
-2414 1622.4 l
-2409.48 1622.4 l
-2398.5 1606.92 2391.3 1598.82 2379.6 1588.92 c
-2379.6 1584 l
-2389 1584 l
-2389 1525.74 l
-2389 1514.04 2396.73 1506.84 2409.12 1506.84 c
-2421.18 1506.84 2428.38 1512.24 2435.76 1527 c
-2431.26 1528.98 l
-2427.66 1522.14 2424.78 1519.84 2421 1519.84 c
-2415.96 1519.84 2414 1522.83 2414 1529.88 c
-2414 1584 l
-2430.9 1584 l
-h
-2435.94 1509 m
-f*
-2481 1509 m
-f*
-2585.94 1631 m
-2483.88 1631 l
-2483.88 1626 l
-2496.3 1625.29 2500 1622.63 2500 1613.4 c
-2500 1526.28 l
-2500 1516.92 2497.44 1514.94 2483.88 1513.5 c
-2483.88 1509 l
-2548.68 1509 l
-2548.68 1514 l
-2532.12 1514.69 2529 1516.77 2529 1526.28 c
-2529 1568.22 l
-2547.28 1567.86 2553.91 1561.2 2556.42 1540.32 c
-2560.92 1540.32 l
-2560.92 1601.16 l
-2556.42 1601.16 l
-2553.19 1580.64 2546.92 1574.34 2529 1574.34 c
-2529 1616.1 l
-2529 1622.76 2531.32 1625 2540.4 1625 c
-2557.14 1625 2567.58 1621.8 2573.16 1615.2 c
-2577.12 1610.7 2579.1 1605.84 2581.62 1594.5 c
-2585.94 1594.5 l
-h
-2590.98 1509 m
-f*
-2630.28 1592 m
-2596.22 1592 l
-2596.22 1587.66 l
-2603.96 1586.58 2606 1584.24 2606 1577.04 c
-2606 1524.12 l
-2606 1516.74 2604.19 1514.76 2596.22 1513.32 c
-2596.22 1509 l
-2644.1 1509 l
-2644.1 1513.32 l
-2633.12 1514.04 2631 1516.38 2631 1527.54 c
-2631 1561.56 l
-2631 1570.92 2636.02 1578.66 2641.94 1578.66 c
-2643.38 1578.66 2645 1577.4 2646.98 1574.52 c
-2650.4 1569.66 2653.1 1568.04 2657.78 1568.04 c
-2664.44 1568.04 2669.12 1573.08 2669.12 1579.92 c
-2669.12 1588.2 2663 1594.16 2654.54 1594.16 c
-2645.55 1594.16 2638.73 1589.47 2630.28 1577.22 c
-h
-2670.92 1509 m
-f*
-2756.14 1520.52 m
-2754.34 1518.72 l
-2753.8 1518.18 2753.26 1518 2752.36 1518 c
-2749.84 1518 2749 1519.44 2749 1522.5 c
-2749 1569.48 l
-2749 1584.78 2735.16 1594.16 2712.94 1594.16 c
-2692.6 1594.16 2678.92 1584.97 2678.92 1571.46 c
-2678.92 1563.9 2683.24 1559.58 2690.62 1559.58 c
-2697.82 1559.58 2702.86 1563.9 2702.86 1570.02 c
-2702.86 1572.54 2701.96 1574.88 2699.62 1577.76 c
-2698 1579.56 2697.46 1580.64 2697.46 1581.72 c
-2697.46 1585.5 2702.32 1588.16 2708.8 1588.16 c
-2719.42 1588.16 2724 1583.37 2724 1572.54 c
-2724 1559.4 l
-2702.89 1552.92 2694.41 1549.68 2687.56 1545.18 c
-2679.46 1539.78 2676 1533.48 2676 1525.56 c
-2676 1514.58 2684.07 1506.48 2695.3 1506.48 c
-2705.74 1506.48 2714.02 1510.08 2723.92 1519.08 c
-2725.9 1509.9 2729.86 1506.48 2738.68 1506.48 c
-2746.42 1506.48 2752 1509.36 2758.84 1516.74 c
-h
-2724 1527 m
-2719.04 1521.42 2715.37 1519.26 2710.96 1519.26 c
-2705.56 1519.26 2702 1524.12 2702 1531.32 c
-2702 1541.76 2709.57 1549.14 2724 1553.1 c
-h
-2761 1509 m
-f*
-2798.46 1592 m
-2763.73 1592 l
-2763.73 1587.66 l
-2771.65 1586.58 2774 1584.42 2774 1577.04 c
-2774 1524.12 l
-2774 1516.74 2771.95 1514.76 2763.73 1513.32 c
-2763.73 1509 l
-2806.93 1509 l
-2806.93 1513.32 l
-2800.63 1514.22 2799 1516.74 2799 1523.58 c
-2799 1571.64 l
-2799 1572.54 2801.51 1575.78 2803.51 1577.76 c
-2807.29 1580.64 2810.53 1582.16 2813.77 1582.16 c
-2820.79 1582.16 2824 1578 2824 1567.14 c
-2824 1523.58 l
-2824 1516.2 2821.9 1513.86 2814.85 1513.32 c
-2814.85 1509 l
-2856.97 1509 l
-2856.97 1513.32 l
-2850.67 1514.04 2849 1516.74 2849 1523.58 c
-2849 1571.64 l
-2849 1572.54 2851.43 1575.6 2853.37 1577.58 c
-2857.33 1580.64 2860.57 1582.16 2863.81 1582.16 c
-2870.65 1582.16 2873 1577.82 2873 1567.14 c
-2873 1523.58 l
-2873 1516.02 2871.1 1513.86 2864.53 1513.32 c
-2864.53 1509 l
-2907.37 1509 l
-2907.37 1513 l
-2900.35 1513.37 2898 1515.6 2898 1523.58 c
-2898 1568.76 l
-2898 1584.24 2888.6 1594.16 2874.07 1594.16 c
-2863.81 1594.16 2856.97 1590.01 2847.61 1578.48 c
-2842.21 1589.82 2835.91 1594.16 2824.57 1594.16 c
-2813.2 1594.16 2805.21 1589.29 2798.46 1578.48 c
-h
-2910.94 1509 m
-f*
-2983.36 1531.5 m
-2975.98 1522.68 2970.58 1519.48 2962.84 1519.48 c
-2956 1519.48 2950.6 1522.53 2947 1528.62 c
-2943.58 1534.36 2942.14 1540.45 2941.42 1553 c
-2986.78 1553 l
-2985.7 1567.99 2983 1576.3 2977.42 1583.34 c
-2971.66 1590.36 2963.2 1594.16 2953.12 1594.16 c
-2930.62 1594.16 2915.5 1576.33 2915.5 1550.04 c
-2915.5 1523.76 2930.26 1506.48 2952.58 1506.48 c
-2967.16 1506.48 2975.98 1512.06 2987.68 1528.98 c
-h
-2940.52 1560 m
-2941.06 1581.42 2944.3 1588.16 2953.12 1588.16 c
-2958.34 1588.16 2961.58 1585.42 2963.02 1580.1 c
-2963.92 1576.68 2964.28 1571.64 2964.64 1562.46 c
-2964.64 1560 l
-h
-2990.92 1509 m
-f*
-1 i
-1805.75 1474.55 1184.4 15.5999 re
-f
-1 g
-2414.15 1700.15 m
-2577.35 1853.75 l
-2495.75 1853.75 l
-2495.75 2004.95 l
-2330.15 2004.95 l
-2330.15 1853.75 l
-2247.35 1853.75 l
-f*
-0 g
-2414.15 1700.15 m
-2577.35 1853.75 l
-2495.75 1853.75 l
-2495.75 2004.95 l
-2330.15 2004.95 l
-2330.15 1853.75 l
-2247.35 1853.75 l
-2414.15 1700.15 l
-2414.15 1713.35 l
-2272.55 1842.95 l
-2339.75 1842.95 l
-2339.75 1994.15 l
-2486.15 1994.15 l
-2486.15 1842.95 l
-2552.15 1842.95 l
-2414.15 1713.35 l
-2414.15 1700.15 l
-f*
-0.201248 i
-4490.33 1642 m
-4376.22 1642 l
-4376.22 1637 l
-4390.11 1636.2 4394 1633.18 4394 1622.72 c
-4394 1525.32 l
-4394 1514.85 4391.17 1512.64 4376.22 1511.03 c
-4376.22 1506 l
-4448.67 1506 l
-4448.67 1511 l
-4430.15 1511.81 4427 1514.23 4427 1525.32 c
-4427 1572.21 l
-4447.22 1571.81 4454.55 1564.36 4457.32 1541.02 c
-4462.35 1541.02 l
-4462.35 1609.04 l
-4457.32 1609.04 l
-4453.76 1586.1 4446.82 1579.05 4427 1579.05 c
-4427 1625.74 l
-4427 1633.19 4429.52 1635 4439.41 1635 c
-4458.13 1635 4469.8 1631.64 4476.04 1624.74 c
-4480.47 1619.71 4482.68 1614.27 4485.5 1601.59 c
-4490.33 1601.59 l
-h
-4495.96 1506 m
-f*
-4539.19 1599 m
-4500.84 1599 l
-4500.84 1593.95 l
-4509.49 1592.74 4512 1590.12 4512 1582.07 c
-4512 1522.9 l
-4512 1514.65 4509.93 1512.44 4500.84 1510.83 c
-4500.84 1506 l
-4554.37 1506 l
-4554.37 1510.83 l
-4542.09 1511.63 4540 1514.25 4540 1526.73 c
-4540 1564.76 l
-4540 1575.23 4545.49 1583.88 4551.95 1583.88 c
-4553.56 1583.88 4555.37 1582.47 4557.59 1579.25 c
-4561.41 1573.82 4564.43 1572.01 4569.66 1572.01 c
-4577.11 1572.01 4582.34 1577.64 4582.34 1585.29 c
-4582.34 1594.55 4575.5 1601.41 4566.04 1601.41 c
-4556.1 1601.41 4548.54 1596.12 4539.19 1582.27 c
-h
-4584.35 1506 m
-f*
-4679.19 1518.88 m
-4677.18 1516.87 l
-4676.57 1516.26 4675.97 1516.06 4674.96 1516.06 c
-4672.15 1516.06 4671 1517.67 4671 1521.09 c
-4671 1573.62 l
-4671 1590.73 4655.6 1601.42 4630.89 1601.42 c
-4608.15 1601.42 4592.85 1591.06 4592.85 1575.83 c
-4592.85 1567.38 4597.69 1562.55 4605.94 1562.55 c
-4613.99 1562.55 4619.62 1567.38 4619.62 1574.22 c
-4619.62 1577.04 4618.61 1579.66 4616 1582.88 c
-4614.19 1584.89 4613.58 1586.1 4613.58 1587.3 c
-4613.58 1591.53 4619.02 1594.42 4626.26 1594.42 c
-4638.14 1594.42 4643.86 1589.08 4643.86 1577.04 c
-4643.86 1562.35 l
-4619.91 1555.1 4610.29 1551.48 4602.51 1546.45 c
-4593.46 1540.41 4589 1533.37 4589 1524.52 c
-4589 1512.24 4598.27 1503.18 4611.17 1503.18 c
-4622.84 1503.18 4632.1 1507.21 4643.17 1517.27 c
-4645.38 1507.01 4649.81 1503.18 4659.67 1503.18 c
-4668.32 1503.18 4674.56 1506.4 4682.21 1514.65 c
-h
-4643 1526.13 m
-4637.55 1519.89 4633.52 1517.47 4628.68 1517.47 c
-4622.64 1517.47 4618 1522.91 4618 1530.96 c
-4618 1542.63 4626.61 1550.88 4643 1555.31 c
-h
-4684.62 1506 m
-f*
-4725.4 1599 m
-4686.7 1599 l
-4686.7 1593.95 l
-4695.55 1592.74 4698 1590.32 4698 1582.07 c
-4698 1522.9 l
-4698 1514.65 4695.74 1512.44 4686.7 1510.83 c
-4686.7 1506 l
-4735 1506 l
-4735 1510.83 l
-4727.95 1511.84 4726 1514.65 4726 1522.3 c
-4726 1576.03 l
-4726 1577.04 4728.87 1580.66 4731.18 1582.88 c
-4735.4 1586.1 4739.02 1588.42 4742.65 1588.42 c
-4750.5 1588.42 4754 1583.59 4754 1571 c
-4754 1522.3 l
-4754 1514.05 4751.68 1511.43 4743.85 1510.83 c
-4743.85 1506 l
-4790.95 1506 l
-4790.95 1510.83 l
-4783.9 1511.64 4782 1514.65 4782 1522.3 c
-4782 1576.03 l
-4782 1577.04 4784.73 1580.46 4786.92 1582.68 c
-4791.35 1586.1 4794.97 1588.42 4798.59 1588.42 c
-4806.24 1588.42 4809 1583.38 4809 1571 c
-4809 1522.3 l
-4809 1513.85 4806.85 1511.43 4799.4 1510.83 c
-4799.4 1506 l
-4847.3 1506 l
-4847.3 1511 l
-4839.45 1511.4 4837 1513.78 4837 1522.3 c
-4837 1572.81 l
-4837 1590.12 4826.43 1601.42 4810.07 1601.42 c
-4798.59 1601.42 4790.95 1596.73 4780.48 1583.68 c
-4774.44 1596.36 4767.4 1601.42 4754.72 1601.42 c
-4741.95 1601.42 4732.98 1595.91 4725.4 1583.68 c
-h
-4850.64 1506 m
-f*
-4930.9 1531.16 m
-4922.65 1521.29 4916.61 1517.18 4907.96 1517.18 c
-4900.31 1517.18 4894.27 1520.77 4890.25 1527.94 c
-4886.43 1534.54 4884.82 1541.56 4884.01 1556 c
-4934.73 1556 l
-4933.52 1572.36 4930.5 1581.43 4924.26 1589.12 c
-4917.82 1596.96 4908.36 1601.42 4897.09 1601.42 c
-4871.94 1601.42 4855.03 1581.4 4855.03 1551.88 c
-4855.03 1522.5 4871.53 1503.18 4896.49 1503.18 c
-4912.79 1503.18 4922.65 1509.42 4935.73 1528.34 c
-h
-4883 1563 m
-4883.61 1586.96 4887.23 1594.42 4897.09 1594.42 c
-4902.93 1594.42 4906.55 1591.38 4908.16 1585.49 c
-4909.17 1581.67 4909.57 1576.03 4909.97 1565.77 c
-4909.97 1563 l
-h
-4939.35 1506 m
-f*
-5036.16 1601.59 m
-5036.16 1645.22 l
-5030.37 1645.22 l
-5028.96 1639.82 5027.55 1638.42 5023.93 1638.42 c
-5022.12 1638.42 5019.7 1639.03 5015.47 1640.43 c
-5006.22 1643.86 4999.78 1645.02 4991.93 1645.02 c
-4964.56 1645.02 4948 1629.54 4948 1604.01 c
-4948 1598.98 4948.75 1594.75 4950.07 1590.73 c
-4954.29 1580.06 4965.16 1570.6 4982.27 1562.35 c
-4995.75 1555.91 l
-5013.46 1547.46 5018 1542.22 5018 1531.56 c
-5018 1517.67 5008.25 1509.18 4992.94 1509.18 c
-4981.26 1509.18 4971.6 1513.89 4963.96 1523.31 c
-4958.12 1530.75 4955.3 1537.6 4951.88 1551.88 c
-4946.04 1551.88 l
-4946.04 1502.18 l
-4951.88 1502.18 l
-4953.09 1507.41 4954.7 1509.02 4957.92 1509.02 c
-4959.53 1509.02 4961.74 1508.42 4966.17 1507.01 c
-4976.03 1503.59 4983.48 1502.18 4992.33 1502.18 c
-5022.12 1502.18 5042 1519.28 5042 1544.64 c
-5042 1559.73 5033.04 1574.83 5020.1 1581.27 c
-4990.52 1595.96 l
-4974.22 1604.01 4970 1608.84 4970 1618.7 c
-4970 1631.18 4978.37 1638.02 4991.93 1638.02 c
-5000.99 1638.02 5009.44 1634.47 5016.68 1627.55 c
-5023.53 1620.51 5026.75 1614.67 5030.77 1601.59 c
-h
-5050.89 1506 m
-f*
-5129.9 1531.16 m
-5121.65 1521.29 5115.61 1517.18 5106.96 1517.18 c
-5099.31 1517.18 5093.27 1520.77 5089.25 1527.94 c
-5085.43 1534.54 5083.82 1541.56 5083.01 1556 c
-5133.73 1556 l
-5132.52 1572.36 5129.5 1581.43 5123.26 1589.12 c
-5116.82 1596.96 5107.36 1601.42 5096.09 1601.42 c
-5070.94 1601.42 5054.03 1581.4 5054.03 1551.88 c
-5054.03 1522.5 5070.53 1503.18 5095.49 1503.18 c
-5111.79 1503.18 5121.65 1509.42 5134.73 1528.34 c
-h
-5082 1563 m
-5082.61 1586.96 5086.23 1594.42 5096.09 1594.42 c
-5101.93 1594.42 5105.55 1591.38 5107.16 1585.49 c
-5108.17 1581.67 5108.57 1576.03 5108.97 1565.77 c
-5108.97 1563 l
-h
-5138.35 1506 m
-f*
-5199.38 1599 m
-5180 1599 l
-5180 1632.79 l
-5175.43 1632.79 l
-5163.16 1615.48 5155.11 1606.42 5142.02 1595.35 c
-5142.02 1590 l
-5152 1590 l
-5152 1524.72 l
-5152 1511.64 5160.84 1503.59 5175.03 1503.59 c
-5188.51 1503.59 5196.56 1509.62 5204.81 1526.12 c
-5199.78 1528.34 l
-5195.76 1520.69 5192.54 1517.59 5188.31 1517.59 c
-5182.68 1517.59 5180 1521.09 5180 1529.34 c
-5180 1590 l
-5199.38 1590 l
-h
-5205.02 1506 m
-f*
-5255.31 1506 m
-f*
-5258.22 1642 m
-5258.22 1637 l
-5272.11 1636.2 5276 1632.98 5276 1622.72 c
-5276 1525.32 l
-5276 1515.06 5272.97 1512.64 5258.22 1511.03 c
-5258.22 1506 l
-5323.02 1506 l
-5357.03 1506 5380 1521.09 5380 1543.83 c
-5380 1553.09 5376.03 1561.14 5368.71 1567.38 c
-5361.66 1573.62 5354.82 1576.44 5340.73 1579.46 c
-5364.08 1586.3 5373 1594.55 5373 1609.84 c
-5373 1630.57 5354.39 1642 5320.41 1642 c
-h
-5308 1575.03 m
-5314.17 1575.03 l
-5334.9 1575.03 5345 1564.36 5345 1542.02 c
-5345 1522.5 5336.73 1513 5320.41 1513 c
-5311.55 1513 5308 1516.26 5308 1524.72 c
-h
-5308 1626.15 m
-5308 1633.39 5310.85 1636 5319 1636 c
-5333.08 1636 5340 1627.35 5340 1608.44 c
-5340 1587.3 5333.23 1581.67 5308 1581.07 c
-h
-5389.23 1506 m
-f*
-1041.33 4883 m
-927.22 4883 l
-927.22 4878 l
-941.106 4877.2 945 4874.18 945 4863.72 c
-945 4766.32 l
-945 4755.85 942.171 4753.64 927.22 4752.03 c
-927.22 4747 l
-999.67 4747 l
-999.67 4752 l
-981.155 4752.81 978 4755.23 978 4766.32 c
-978 4813.21 l
-998.215 4812.81 1005.55 4805.36 1008.32 4782.02 c
-1013.35 4782.02 l
-1013.35 4850.04 l
-1008.32 4850.04 l
-1004.76 4827.1 997.819 4820.05 978 4820.05 c
-978 4866.74 l
-978 4874.19 980.521 4876 990.412 4876 c
-1009.13 4876 1020.8 4872.64 1027.04 4865.74 c
-1031.47 4860.71 1033.68 4855.27 1036.5 4842.59 c
-1041.33 4842.59 l
-h
-1046.96 4747 m
-f*
-1090.19 4840 m
-1051.84 4840 l
-1051.84 4834.95 l
-1060.49 4833.74 1063 4831.12 1063 4823.07 c
-1063 4763.9 l
-1063 4755.65 1060.93 4753.44 1051.84 4751.83 c
-1051.84 4747 l
-1105.37 4747 l
-1105.37 4751.83 l
-1093.09 4752.63 1091 4755.25 1091 4767.73 c
-1091 4805.76 l
-1091 4816.23 1096.49 4824.88 1102.95 4824.88 c
-1104.56 4824.88 1106.37 4823.47 1108.59 4820.25 c
-1112.41 4814.82 1115.43 4813.01 1120.66 4813.01 c
-1128.11 4813.01 1133.34 4818.64 1133.34 4826.29 c
-1133.34 4835.55 1126.5 4842.41 1117.04 4842.41 c
-1107.1 4842.41 1099.54 4837.12 1090.19 4823.27 c
-h
-1135.35 4747 m
-f*
-1230.19 4759.88 m
-1228.18 4757.87 l
-1227.57 4757.26 1226.97 4757.06 1225.96 4757.06 c
-1223.15 4757.06 1222 4758.67 1222 4762.09 c
-1222 4814.62 l
-1222 4831.73 1206.6 4842.42 1181.89 4842.42 c
-1159.15 4842.42 1143.85 4832.06 1143.85 4816.83 c
-1143.85 4808.38 1148.69 4803.55 1156.94 4803.55 c
-1164.99 4803.55 1170.62 4808.38 1170.62 4815.22 c
-1170.62 4818.04 1169.61 4820.66 1167 4823.88 c
-1165.19 4825.89 1164.58 4827.1 1164.58 4828.3 c
-1164.58 4832.53 1170.02 4835.42 1177.26 4835.42 c
-1189.14 4835.42 1194.86 4830.08 1194.86 4818.04 c
-1194.86 4803.35 l
-1170.91 4796.1 1161.29 4792.48 1153.51 4787.45 c
-1144.46 4781.41 1140 4774.37 1140 4765.52 c
-1140 4753.24 1149.27 4744.18 1162.17 4744.18 c
-1173.84 4744.18 1183.1 4748.21 1194.17 4758.27 c
-1196.38 4748.01 1200.81 4744.18 1210.67 4744.18 c
-1219.32 4744.18 1225.56 4747.4 1233.21 4755.65 c
-h
-1194 4767.13 m
-1188.55 4760.89 1184.52 4758.47 1179.68 4758.47 c
-1173.64 4758.47 1169 4763.91 1169 4771.96 c
-1169 4783.63 1177.61 4791.88 1194 4796.31 c
-h
-1235.62 4747 m
-f*
-1277.4 4840 m
-1238.7 4840 l
-1238.7 4834.95 l
-1247.55 4833.74 1250 4831.32 1250 4823.07 c
-1250 4763.9 l
-1250 4755.65 1247.74 4753.44 1238.7 4751.83 c
-1238.7 4747 l
-1287 4747 l
-1287 4751.83 l
-1279.95 4752.84 1278 4755.65 1278 4763.3 c
-1278 4817.03 l
-1278 4818.04 1280.87 4821.66 1283.18 4823.88 c
-1287.4 4827.1 1291.02 4829.42 1294.65 4829.42 c
-1302.5 4829.42 1306 4824.59 1306 4812 c
-1306 4763.3 l
-1306 4755.05 1303.68 4752.43 1295.85 4751.83 c
-1295.85 4747 l
-1342.95 4747 l
-1342.95 4751.83 l
-1335.9 4752.64 1334 4755.65 1334 4763.3 c
-1334 4817.03 l
-1334 4818.04 1336.73 4821.46 1338.92 4823.68 c
-1343.35 4827.1 1346.97 4829.42 1350.59 4829.42 c
-1358.24 4829.42 1361 4824.38 1361 4812 c
-1361 4763.3 l
-1361 4754.85 1358.85 4752.43 1351.4 4751.83 c
-1351.4 4747 l
-1399.3 4747 l
-1399.3 4752 l
-1391.45 4752.4 1389 4754.78 1389 4763.3 c
-1389 4813.81 l
-1389 4831.12 1378.43 4842.42 1362.07 4842.42 c
-1350.59 4842.42 1342.95 4837.73 1332.48 4824.68 c
-1326.44 4837.36 1319.4 4842.42 1306.72 4842.42 c
-1293.95 4842.42 1284.98 4836.91 1277.4 4824.68 c
-h
-1402.64 4747 m
-f*
-1481.9 4772.16 m
-1473.65 4762.29 1467.61 4758.18 1458.96 4758.18 c
-1451.31 4758.18 1445.27 4761.77 1441.25 4768.94 c
-1437.43 4775.54 1435.82 4782.56 1435.01 4797 c
-1485.73 4797 l
-1484.52 4813.36 1481.5 4822.43 1475.26 4830.12 c
-1468.82 4837.96 1459.36 4842.42 1448.09 4842.42 c
-1422.94 4842.42 1406.03 4822.4 1406.03 4792.88 c
-1406.03 4763.5 1422.53 4744.18 1447.49 4744.18 c
-1463.79 4744.18 1473.65 4750.42 1486.73 4769.34 c
-h
-1434 4804 m
-1434.61 4827.96 1438.23 4835.42 1448.09 4835.42 c
-1453.93 4835.42 1457.55 4832.38 1459.16 4826.49 c
-1460.17 4822.67 1460.57 4817.03 1460.97 4806.77 c
-1460.97 4804 l
-h
-1490.35 4747 m
-f*
-1587.16 4842.59 m
-1587.16 4886.22 l
-1581.37 4886.22 l
-1579.96 4880.82 1578.55 4879.42 1574.93 4879.42 c
-1573.12 4879.42 1570.7 4880.03 1566.47 4881.43 c
-1557.22 4884.86 1550.78 4886.02 1542.93 4886.02 c
-1515.56 4886.02 1499 4870.54 1499 4845.01 c
-1499 4839.98 1499.75 4835.75 1501.07 4831.73 c
-1505.29 4821.06 1516.16 4811.6 1533.27 4803.35 c
-1546.75 4796.91 l
-1564.46 4788.46 1569 4783.22 1569 4772.56 c
-1569 4758.67 1559.25 4750.18 1543.94 4750.18 c
-1532.26 4750.18 1522.6 4754.89 1514.96 4764.31 c
-1509.12 4771.75 1506.3 4778.6 1502.88 4792.88 c
-1497.04 4792.88 l
-1497.04 4743.18 l
-1502.88 4743.18 l
-1504.09 4748.41 1505.7 4750.02 1508.92 4750.02 c
-1510.53 4750.02 1512.74 4749.42 1517.17 4748.01 c
-1527.03 4744.59 1534.48 4743.18 1543.33 4743.18 c
-1573.12 4743.18 1593 4760.28 1593 4785.64 c
-1593 4800.73 1584.04 4815.83 1571.1 4822.27 c
-1541.52 4836.96 l
-1525.22 4845.01 1521 4849.84 1521 4859.7 c
-1521 4872.18 1529.37 4879.02 1542.93 4879.02 c
-1551.99 4879.02 1560.44 4875.47 1567.68 4868.55 c
-1574.53 4861.51 1577.75 4855.67 1581.77 4842.59 c
-h
-1601.89 4747 m
-f*
-1681.9 4772.16 m
-1673.65 4762.29 1667.61 4758.18 1658.96 4758.18 c
-1651.31 4758.18 1645.27 4761.77 1641.25 4768.94 c
-1637.43 4775.54 1635.82 4782.56 1635.01 4797 c
-1685.73 4797 l
-1684.52 4813.36 1681.5 4822.43 1675.26 4830.12 c
-1668.82 4837.96 1659.36 4842.42 1648.09 4842.42 c
-1622.94 4842.42 1606.03 4822.4 1606.03 4792.88 c
-1606.03 4763.5 1622.53 4744.18 1647.49 4744.18 c
-1663.79 4744.18 1673.65 4750.42 1686.73 4769.34 c
-h
-1634 4804 m
-1634.61 4827.96 1638.23 4835.42 1648.09 4835.42 c
-1653.93 4835.42 1657.55 4832.38 1659.16 4826.49 c
-1660.17 4822.67 1660.57 4817.03 1660.97 4806.77 c
-1660.97 4804 l
-h
-1690.35 4747 m
-f*
-1750.38 4840 m
-1731 4840 l
-1731 4873.79 l
-1726.43 4873.79 l
-1714.16 4856.48 1706.11 4847.42 1693.02 4836.35 c
-1693.02 4831 l
-1703 4831 l
-1703 4765.72 l
-1703 4752.64 1711.84 4744.59 1726.03 4744.59 c
-1739.51 4744.59 1747.56 4750.62 1755.81 4767.12 c
-1750.78 4769.34 l
-1746.76 4761.69 1743.54 4758.59 1739.31 4758.59 c
-1733.68 4758.59 1731 4762.09 1731 4770.34 c
-1731 4831 l
-1750.38 4831 l
-h
-1756.02 4747 m
-f*
-1807.31 4747 m
-f*
-1944.66 4752.03 m
-1935.81 4752.03 1933.59 4754.85 1922.72 4780 c
-1877.85 4885.82 l
-1872.21 4885.82 l
-1827.53 4775.58 l
-1819.89 4756.66 1817.47 4753.84 1807.81 4752.03 c
-1807.81 4747 l
-1848.66 4747 l
-1848.66 4752.03 l
-1836.79 4752.84 1832.16 4755.05 1832.16 4760.28 c
-1832.16 4762.9 1833.57 4767.53 1838 4778.6 c
-1841.02 4787 l
-1886.3 4787 l
-1893.14 4770.9 1895.56 4763.76 1895.56 4759.28 c
-1895.56 4754.85 1892.94 4753.04 1885.9 4752.63 c
-1879.46 4752.03 l
-1879.46 4747 l
-1944.66 4747 l
-h
-1844.04 4795 m
-1862.95 4843.4 l
-1883.28 4795 l
-h
-1951.3 4747 m
-f*
-1 i
-32 w
-942.95 6694.55 m
-618.95 6336.95 432.95 5816.15 432.95 5268.95 c
-432.95 4305.35 1001.75 3495.35 1751.75 3390.95 c
-S
-954.95 6592.55 m
-921.35 6668.15 l
-844.55 6699.35 l
-1072.55 6822.95 l
-f*
-1682.15 3323.75 m
-1720.55 3398.15 l
-1697.75 3478.55 l
-1936.55 3378.95 l
-f*
-0.564706 g
-4962.95 2235.35 m
-4962.95 2345.75 4871.75 2436.95 4760.15 2436.95 c
-4263.35 2436.95 l
-4151.75 2436.95 4060.55 2345.75 4060.55 2235.35 c
-4060.55 2097.35 l
-4060.55 1986.95 4151.75 1895.75 4263.35 1895.75 c
-4760.15 1895.75 l
-4871.75 1895.75 4962.95 1986.95 4962.95 2097.35 c
-f*
-1 g
-4898.15 2292.95 m
-4898.15 2402.15 4809.35 2490.95 4697.75 2490.95 c
-4206.95 2490.95 l
-4096.55 2490.95 4006.55 2402.15 4006.55 2292.95 c
-4006.55 2158.55 l
-4006.55 2049.35 4095.35 1960.55 4206.95 1960.55 c
-4697.75 1960.55 l
-4809.35 1960.55 4898.15 2049.35 4898.15 2158.55 c
-f*
-8 w
-0 g
-4898.15 2292.95 m
-4898.15 2402.15 4809.35 2490.95 4697.75 2490.95 c
-4206.95 2490.95 l
-4096.55 2490.95 4006.55 2402.15 4006.55 2292.95 c
-4006.55 2158.55 l
-4006.55 2049.35 4095.35 1960.55 4206.95 1960.55 c
-4697.75 1960.55 l
-4809.35 1960.55 4898.15 2049.35 4898.15 2158.55 c
-h
-S
-0.201248 i
-4239.33 2332 m
-4125.22 2332 l
-4125.22 2327 l
-4139.11 2326.2 4143 2323.18 4143 2312.72 c
-4143 2215.32 l
-4143 2204.85 4140.17 2202.64 4125.22 2201.03 c
-4125.22 2196 l
-4197.67 2196 l
-4197.67 2201 l
-4179.15 2201.81 4176 2204.23 4176 2215.32 c
-4176 2262.21 l
-4196.22 2261.81 4203.55 2254.36 4206.32 2231.02 c
-4211.35 2231.02 l
-4211.35 2299.04 l
-4206.32 2299.04 l
-4202.76 2276.1 4195.82 2269.05 4176 2269.05 c
-4176 2315.74 l
-4176 2323.19 4178.52 2325 4188.41 2325 c
-4207.13 2325 4218.8 2321.64 4225.04 2314.74 c
-4229.47 2309.71 4231.68 2304.27 4234.5 2291.59 c
-4239.33 2291.59 l
-h
-4244.96 2196 m
-f*
-4289.19 2289 m
-4250.84 2289 l
-4250.84 2283.95 l
-4259.49 2282.74 4262 2280.12 4262 2272.07 c
-4262 2212.9 l
-4262 2204.65 4259.93 2202.44 4250.84 2200.83 c
-4250.84 2196 l
-4304.37 2196 l
-4304.37 2200.83 l
-4292.09 2201.63 4290 2204.25 4290 2216.73 c
-4290 2254.76 l
-4290 2265.23 4295.49 2273.88 4301.95 2273.88 c
-4303.56 2273.88 4305.37 2272.47 4307.59 2269.25 c
-4311.41 2263.82 4314.43 2262.01 4319.66 2262.01 c
-4327.11 2262.01 4332.34 2267.64 4332.34 2275.29 c
-4332.34 2284.55 4325.5 2291.41 4316.04 2291.41 c
-4306.1 2291.41 4298.54 2286.12 4289.19 2272.27 c
-h
-4334.35 2196 m
-f*
-4429.19 2208.88 m
-4427.18 2206.87 l
-4426.57 2206.26 4425.97 2206.06 4424.96 2206.06 c
-4422.15 2206.06 4421 2207.67 4421 2211.09 c
-4421 2263.62 l
-4421 2280.73 4405.6 2291.42 4380.89 2291.42 c
-4358.15 2291.42 4342.85 2281.06 4342.85 2265.83 c
-4342.85 2257.38 4347.69 2252.55 4355.94 2252.55 c
-4363.99 2252.55 4369.62 2257.38 4369.62 2264.22 c
-4369.62 2267.04 4368.61 2269.66 4366 2272.88 c
-4364.19 2274.89 4363.58 2276.1 4363.58 2277.3 c
-4363.58 2281.53 4369.02 2284.42 4376.26 2284.42 c
-4388.14 2284.42 4393.86 2279.08 4393.86 2267.04 c
-4393.86 2252.35 l
-4369.91 2245.1 4360.29 2241.48 4352.51 2236.45 c
-4343.46 2230.41 4339 2223.37 4339 2214.52 c
-4339 2202.24 4348.27 2193.18 4361.17 2193.18 c
-4372.84 2193.18 4382.1 2197.21 4393.17 2207.27 c
-4395.38 2197.01 4399.81 2193.18 4409.67 2193.18 c
-4418.32 2193.18 4424.56 2196.4 4432.21 2204.65 c
-h
-4393 2216.13 m
-4387.55 2209.89 4383.52 2207.47 4378.68 2207.47 c
-4372.64 2207.47 4368 2212.91 4368 2220.96 c
-4368 2232.63 4376.61 2240.88 4393 2245.31 c
-h
-4434.62 2196 m
-f*
-4476.4 2289 m
-4437.7 2289 l
-4437.7 2283.95 l
-4446.55 2282.74 4449 2280.32 4449 2272.07 c
-4449 2212.9 l
-4449 2204.65 4446.74 2202.44 4437.7 2200.83 c
-4437.7 2196 l
-4486 2196 l
-4486 2200.83 l
-4478.95 2201.84 4477 2204.65 4477 2212.3 c
-4477 2266.03 l
-4477 2267.04 4479.87 2270.66 4482.18 2272.88 c
-4486.4 2276.1 4490.02 2278.42 4493.65 2278.42 c
-4501.5 2278.42 4505 2273.59 4505 2261 c
-4505 2212.3 l
-4505 2204.05 4502.68 2201.43 4494.85 2200.83 c
-4494.85 2196 l
-4541.95 2196 l
-4541.95 2200.83 l
-4534.9 2201.64 4533 2204.65 4533 2212.3 c
-4533 2266.03 l
-4533 2267.04 4535.73 2270.46 4537.92 2272.68 c
-4542.35 2276.1 4545.97 2278.42 4549.59 2278.42 c
-4557.24 2278.42 4560 2273.38 4560 2261 c
-4560 2212.3 l
-4560 2203.85 4557.85 2201.43 4550.4 2200.83 c
-4550.4 2196 l
-4598.3 2196 l
-4598.3 2201 l
-4590.45 2201.4 4588 2203.78 4588 2212.3 c
-4588 2262.81 l
-4588 2280.12 4577.43 2291.42 4561.07 2291.42 c
-4549.59 2291.42 4541.95 2286.73 4531.48 2273.68 c
-4525.44 2286.36 4518.4 2291.42 4505.72 2291.42 c
-4492.95 2291.42 4483.98 2285.91 4476.4 2273.68 c
-h
-4601.64 2196 m
-f*
-4679.9 2221.16 m
-4671.65 2211.29 4665.61 2207.18 4656.96 2207.18 c
-4649.31 2207.18 4643.27 2210.77 4639.25 2217.94 c
-4635.43 2224.54 4633.82 2231.56 4633.01 2246 c
-4683.73 2246 l
-4682.52 2262.36 4679.5 2271.43 4673.26 2279.12 c
-4666.82 2286.96 4657.36 2291.42 4646.09 2291.42 c
-4620.94 2291.42 4604.03 2271.4 4604.03 2241.88 c
-4604.03 2212.5 4620.53 2193.18 4645.49 2193.18 c
-4661.79 2193.18 4671.65 2199.42 4684.73 2218.34 c
-h
-4632 2253 m
-4632.61 2276.96 4636.23 2284.42 4646.09 2284.42 c
-4651.93 2284.42 4655.55 2281.38 4657.16 2275.49 c
-4658.17 2271.67 4658.57 2266.03 4658.97 2255.77 c
-4658.97 2253 l
-h
-4688.35 2196 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -4724 -2196]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-0.564706 g
-3968.15 1929.35 m
-3833.75 1966.55 l
-3929.75 2021.75 l
-3776.15 2031.35 l
-3818.15 2100.95 l
-3670.55 2080.55 l
-3653.75 2152.55 l
-3533.75 2106.95 l
-3458.15 2170.55 l
-3382.55 2106.95 l
-3262.55 2152.55 l
-3244.55 2080.55 l
-3095.75 2100.95 l
-3140.15 2031.35 l
-2986.55 2021.75 l
-3082.55 1966.55 l
-2946.95 1929.35 l
-3082.55 1894.55 l
-2986.55 1838.15 l
-3140.15 1829.75 l
-3095.75 1760.15 l
-3244.55 1779.35 l
-3262.55 1708.55 l
-3382.55 1752.95 l
-3458.15 1689.35 l
-3533.75 1752.95 l
-3653.75 1708.55 l
-3670.55 1779.35 l
-3818.15 1760.15 l
-3776.15 1829.75 l
-3929.75 1838.15 l
-3833.75 1894.55 l
-f*
-1 g
-3908.15 1989.35 m
-3773.75 2026.55 l
-3869.75 2081.75 l
-3716.15 2091.35 l
-3758.15 2160.95 l
-3610.55 2140.55 l
-3593.75 2212.55 l
-3473.75 2166.95 l
-3398.15 2230.55 l
-3322.55 2166.95 l
-3202.55 2212.55 l
-3184.55 2140.55 l
-3035.75 2160.95 l
-3080.15 2091.35 l
-2926.55 2081.75 l
-3022.55 2026.55 l
-2886.95 1989.35 l
-3022.55 1954.55 l
-2926.55 1898.15 l
-3080.15 1889.75 l
-3035.75 1820.15 l
-3184.55 1839.35 l
-3202.55 1768.55 l
-3322.55 1812.95 l
-3398.15 1749.35 l
-3473.75 1812.95 l
-3593.75 1768.55 l
-3610.55 1839.35 l
-3758.15 1820.15 l
-3716.15 1889.75 l
-3869.75 1898.15 l
-3773.75 1954.55 l
-f*
-0 g
-3908.15 1989.35 m
-3773.75 2026.55 l
-3869.75 2081.75 l
-3716.15 2091.35 l
-3758.15 2160.95 l
-3610.55 2140.55 l
-3593.75 2212.55 l
-3473.75 2166.95 l
-3398.15 2230.55 l
-3322.55 2166.95 l
-3202.55 2212.55 l
-3184.55 2140.55 l
-3035.75 2160.95 l
-3080.15 2091.35 l
-2926.55 2081.75 l
-3022.55 2026.55 l
-2886.95 1989.35 l
-3022.55 1954.55 l
-2926.55 1898.15 l
-3080.15 1889.75 l
-3035.75 1820.15 l
-3184.55 1839.35 l
-3202.55 1768.55 l
-3322.55 1812.95 l
-3398.15 1749.35 l
-3473.75 1812.95 l
-3593.75 1768.55 l
-3610.55 1839.35 l
-3758.15 1820.15 l
-3716.15 1889.75 l
-3869.75 1898.15 l
-3773.75 1954.55 l
-3908.15 1989.35 l
-3831.35 1989.35 l
-3722.15 1961.75 l
-3802.55 1914.95 l
-3682.55 1907.75 l
-3719.75 1844.15 l
-3596.15 1862.15 l
-3579.35 1794.95 l
-3470.15 1835.75 l
-3398.15 1775.75 l
-3326.15 1835.75 l
-3215.75 1794.95 l
-3200.15 1862.15 l
-3076.55 1844.15 l
-3114.95 1907.75 l
-2993.75 1914.95 l
-3074.15 1961.75 l
-2964.95 1989.35 l
-3074.15 2018.15 l
-2993.75 2066.15 l
-3114.95 2073.35 l
-3076.55 2135.75 l
-3200.15 2118.95 l
-3215.75 2186.15 l
-3326.15 2144.15 l
-3398.15 2204.15 l
-3470.15 2144.15 l
-3579.35 2186.15 l
-3596.15 2118.95 l
-3719.75 2135.75 l
-3682.55 2073.35 l
-3802.55 2066.15 l
-3722.15 2018.15 l
-3831.35 1989.35 l
-3908.15 1989.35 l
-f*
-0.2 i
-3220.08 2040.76 m
-3200.08 1966.52 l
-3197.52 1957.88 3194.48 1955.64 3184.08 1955 c
-3184.08 1951 l
-3234 1951 l
-3234 1955 l
-3224.72 1955.48 3222.48 1956.76 3222.48 1961.88 c
-3222.48 1963.64 3222.8 1965.4 3223.76 1969.08 c
-3223.92 1969.88 l
-3224.08 1970.68 l
-3243.76 2042.52 l
-3246.16 2050.84 3248.56 2053.08 3256.72 2054.04 c
-3256.72 2058 l
-3222.8 2058 l
-3173.2 1981.24 l
-3164.56 2058 l
-3129.2 2058 l
-3129.2 2054 l
-3139.28 2053.52 3140.72 2052.89 3140.72 2048.44 c
-3140.72 2046.2 3140.08 2043.32 3138.96 2039.16 c
-3121.52 1979.48 l
-3115.12 1958.68 3114 1956.92 3105.36 1955 c
-3105.36 1951 l
-3138.48 1951 l
-3138.48 1955 l
-3128.24 1956.28 3125.68 1958.2 3125.68 1964.76 c
-3125.68 1967.48 3126.48 1971.48 3128.72 1979.48 c
-3144.88 2038.52 l
-3155.6 1949.08 l
-3160.08 1949.08 l
-h
-3252.24 1951 m
-f*
-3321.44 1971.32 m
-3314.88 1962.52 3312.48 1959.76 3309.92 1959.76 c
-3308.64 1959.76 3308 1960.86 3308 1962.52 c
-3308 1966.52 3309.44 1973.08 3313.44 1986.2 c
-3324.8 2023.96 l
-3307.04 2022.84 l
-3304.16 2013.4 l
-3302.72 2021.56 3299.2 2025.08 3292.32 2025.08 c
-3272.64 2025.08 3249 1994.27 3249 1969.24 c
-3249 1957.08 3255.74 1948.92 3265.92 1948.92 c
-3275.68 1948.92 3283.04 1954.68 3292.16 1970.04 c
-3290.24 1963.48 3290 1961.56 3290 1959.32 c
-3290 1953.4 3294.76 1948.76 3300.64 1948.76 c
-3308.16 1948.76 3315.52 1955 3324.8 1968.92 c
-h
-3294.56 2018.2 m
-3298.08 2017.88 3300.56 2015 3300.56 2010.68 c
-3300.56 2001.08 3295.24 1983.32 3288.96 1972.28 c
-3284.64 1964.44 3279.84 1959.92 3275.52 1959.92 c
-3271.36 1959.92 3268 1963.75 3268 1968.92 c
-3268 1977.24 3273.42 1993.24 3280.16 2005.08 c
-3284.96 2013.56 3290.24 2018.52 3294.56 2018.2 c
-h
-3332 1951 m
-f*
-3366.56 2024.92 m
-3350.24 2022.36 3344 2021.4 3335.68 2020.44 c
-3335.68 2016 l
-3342.88 2015.69 3344.32 2015.07 3344.32 2012.12 c
-3344.32 2010.52 3343.04 2004.76 3340.8 1996.44 c
-3324.8 1934.36 l
-3321.76 1923.8 3320.48 1922.84 3312.8 1923 c
-3312.8 1918 l
-3352.64 1918 l
-3352.64 1923 l
-3344.64 1923.14 3342.24 1924.16 3342.24 1927.64 c
-3342.24 1929.88 3343.36 1934.68 3346.4 1945.88 c
-3347.52 1949.72 3347.52 1950.04 3348.16 1952.44 c
-3353.76 1949.56 3355.68 1948.92 3359.04 1948.92 c
-3380.8 1948.92 3403.36 1977.88 3403.36 2005.56 c
-3403.36 2017.4 3396.64 2025.08 3386.08 2025.08 c
-3376.96 2025.08 3369.92 2019.92 3360.48 2006.52 c
-h
-3377.12 2013.56 m
-3381.28 2013.24 3383.68 2009.56 3383.36 2004.44 c
-3382.72 1993.88 3377.6 1978.04 3371.84 1967.64 c
-3366.88 1959 3361.76 1953.92 3356.32 1953.92 c
-3352.8 1953.92 3350.08 1956.75 3350.08 1960.28 c
-3350.08 1963 3351.84 1969.56 3356.16 1984.12 c
-3359.68 1995.8 3361.12 1999.8 3363.52 2003.48 c
-3367.52 2009.72 3372.96 2013.88 3377.12 2013.56 c
-h
-3412 1951 m
-f*
-3447.56 2024.92 m
-3431.24 2022.36 3425 2021.4 3416.68 2020.44 c
-3416.68 2016 l
-3423.88 2015.69 3425.32 2015.07 3425.32 2012.12 c
-3425.32 2010.52 3424.04 2004.76 3421.8 1996.44 c
-3405.8 1934.36 l
-3402.76 1923.8 3401.48 1922.84 3393.8 1923 c
-3393.8 1918 l
-3433.64 1918 l
-3433.64 1923 l
-3425.64 1923.14 3423.24 1924.16 3423.24 1927.64 c
-3423.24 1929.88 3424.36 1934.68 3427.4 1945.88 c
-3428.52 1949.72 3428.52 1950.04 3429.16 1952.44 c
-3434.76 1949.56 3436.68 1948.92 3440.04 1948.92 c
-3461.8 1948.92 3484.36 1977.88 3484.36 2005.56 c
-3484.36 2017.4 3477.64 2025.08 3467.08 2025.08 c
-3457.96 2025.08 3450.92 2019.92 3441.48 2006.52 c
-h
-3458.12 2013.56 m
-3462.28 2013.24 3464.68 2009.56 3464.36 2004.44 c
-3463.72 1993.88 3458.6 1978.04 3452.84 1967.64 c
-3447.88 1959 3442.76 1953.92 3437.32 1953.92 c
-3433.8 1953.92 3431.08 1956.75 3431.08 1960.28 c
-3431.08 1963 3432.84 1969.56 3437.16 1984.12 c
-3440.68 1995.8 3442.12 1999.8 3444.52 2003.48 c
-3448.52 2009.72 3453.96 2013.88 3458.12 2013.56 c
-h
-3493 1951 m
-f*
-3526.56 1973.56 m
-3524.32 1970.36 l
-3520.16 1964.12 3516.48 1960.56 3514.08 1960.56 c
-3512.8 1960.56 3512 1961.77 3512 1963.16 c
-3512 1964.6 3512.62 1968.76 3513.12 1971.48 c
-3527.68 2024.92 l
-3519.22 2023 3508.26 2021.4 3496.04 2020.44 c
-3496.04 2016 l
-3497.44 2016 l
-3502.24 2016 3505.48 2014.44 3505.48 2011.48 c
-3505.48 2010.2 3504.71 2007.8 3503.68 2005.08 c
-3494.4 1970.68 l
-3493.12 1966.04 3493 1961.88 3493 1959.64 c
-3493 1953.56 3497.2 1949.56 3503.36 1949.56 c
-3512.96 1949.56 3518.88 1954.36 3530.08 1971.32 c
-h
-3522.88 2060.4 m
-3517.44 2060.4 3513 2055.46 3513 2050.04 c
-3513 2043.8 3517.26 2039.4 3523.04 2039.4 c
-3529.12 2039.4 3534 2043.86 3534 2049.56 c
-3534 2055.48 3529 2060.4 3522.88 2060.4 c
-h
-3536.48 1951 m
-f*
-3611.36 1972.6 m
-3604.96 1962.68 3602.88 1960.56 3600.16 1960.56 c
-3598.88 1960.56 3598 1961.63 3598 1963.16 c
-3598 1964.76 3598.94 1968.12 3601.92 1977.08 c
-3607.68 1994.52 l
-3610.24 2002.04 3612 2009.08 3612 2012.92 c
-3612 2020.76 3607.78 2025.08 3600.16 2025.08 c
-3594.24 2025.08 3588.48 2022.62 3584.16 2018.36 c
-3578.24 2012.76 3575.2 2008.92 3564.48 1993.08 c
-3574.72 2024.76 l
-3564.48 2022.52 3551.68 2020.92 3542.72 2020.6 c
-3542.72 2015.8 l
-3549.44 2015.65 3551.36 2014.92 3551.36 2012.12 c
-3551.36 2010.2 3549.12 2001.72 3544 1983.64 c
-3540.32 1970.68 3539.2 1966.52 3535.04 1951 c
-3554.4 1951 l
-3561.92 1978.68 3567.68 1992.6 3577.6 2005.56 c
-3580.8 2009.88 3585.76 2013.08 3588.64 2013.08 c
-3590.72 2013.08 3593 2011.63 3593 2010.04 c
-3593 2009.56 3592.54 2008.28 3591.84 2006.68 c
-3583.04 1980.12 l
-3580.48 1972.44 3579 1963.32 3579 1959.16 c
-3579 1953.08 3582.84 1949.56 3589.44 1949.56 c
-3599.04 1949.56 3605.6 1955 3614.88 1970.52 c
-h
-3624.96 1951 m
-f*
-3702.48 2020 m
-3684.72 2020 l
-3679.28 2023.58 3674.48 2025.08 3667.12 2025.08 c
-3647.44 2025.08 3631 2012.05 3631 1995.8 c
-3631 1987.64 3635.35 1981.88 3644.4 1978.2 c
-3631.28 1970.84 3629 1968.6 3629 1962.68 c
-3629 1957.56 3631.89 1954.52 3638.96 1952.12 c
-3629.04 1949.72 3625.84 1948.44 3622 1945.4 c
-3619.44 1943.16 3618 1939.32 3618 1935.48 c
-3618 1925.08 3629.56 1919 3647.76 1919 c
-3670.32 1919 3686 1928.72 3686 1942.52 c
-3686 1952.28 3679.6 1957.56 3662.16 1962.52 c
-3653.68 1964.92 l
-3648.56 1966.36 3645 1968.6 3645 1971 c
-3645 1973.56 3647.68 1976.28 3650 1976.28 c
-3650.8 1976.28 3651.92 1976.24 3653.2 1976.12 c
-3654.96 1975.64 3656.24 1975 3658.16 1975 c
-3665.2 1975 3672.4 1977.09 3678.48 1980.92 c
-3687.76 1986.2 3693 1994.36 3693 2003.96 c
-3693 2006.64 3692.59 2008.32 3691.76 2011 c
-3702.48 2011 l
-h
-3644.4 1950.04 m
-3646.32 1949.88 3658.48 1945.72 3662 1944.12 c
-3666.48 1941.88 3669 1939.16 3669 1935 c
-3669 1927.96 3661.8 1924 3649.36 1924 c
-3638.96 1924 3632 1929.1 3632 1936.44 c
-3632 1939.48 3633.32 1942.2 3636.24 1945.24 c
-3638.32 1947.32 3643.12 1950.2 3644.4 1950.04 c
-h
-3666.8 2020.08 m
-3670.96 2020.08 3674 2016.19 3674 2010.52 c
-3674 2005.08 3672.08 1997.4 3669.36 1991.48 c
-3666 1984.12 3661.84 1980 3656.88 1980 c
-3652.56 1980 3650 1983.52 3650 1989.88 c
-3650 1996.28 3652.79 2006.04 3656.24 2012.12 c
-3659.28 2017.4 3662.64 2020.08 3666.8 2020.08 c
-h
-3706 1951 m
-f*
-1 i
-16 w
-3681.35 1641.35 m
-3749.75 1571.75 3842.15 1533.35 3938.15 1533.35 c
-4139.75 1533.35 4304.15 1702.55 4304.15 1911.35 c
-4304.15 1926.95 4304.15 1942.55 4301.75 1956.95 c
-S
-3759.35 1642.55 m
-3700.55 1625.75 l
-3668.15 1572.95 l
-3603.35 1756.55 l
-f*
-4449.35 3286.55 m
-4382.15 3365.75 4295.75 3410.15 4204.55 3410.15 c
-4095.35 3410.15 3990.95 3345.35 3922.55 3233.75 c
-S
-3892.55 3297.35 m
-3935.75 3251.75 l
-3996.95 3248.15 l
-3867.35 3104.15 l
-f*
-3825.35 2710.55 m
-3833.75 2628.95 3864.95 2553.35 3911.75 2494.55 c
-S
-3844.55 2488.55 m
-3899.75 2516.15 l
-3921.35 2574.95 l
-4019.75 2406.95 l
-f*
-2993.75 3830.15 m
-2837.75 3830.15 2690.15 3794.15 2579.75 3729.35 c
-S
-2595.35 3800.15 m
-2609.75 3740.15 l
-2661.35 3706.55 l
-2476.55 3647.75 l
-f*
-4568.15 3344.15 m
-4443.35 3527.75 4288.55 3671.75 4116.95 3762.95 c
-S
-4185.35 3790.55 m
-4139.75 3748.55 l
-4134.95 3687.35 l
-3993.35 3819.35 l
-f*
-0.279998 i
-550 3530.52 m
-550 3388 l
-550 3372.32 546.055 3368.96 524.919 3367 c
-524.919 3360 l
-617.878 3360 l
-617.878 3367 l
-596.039 3369.8 593 3372.88 593 3392.76 c
-593 3516.52 l
-593 3536.68 597.24 3540.88 617.878 3542.28 c
-617.878 3549 l
-547.319 3549 l
-491.319 3417.12 l
-435.319 3549 l
-364.48 3549 l
-364.48 3542.28 l
-384.92 3540.6 389 3536.96 389 3522.4 c
-389 3389.4 l
-389 3372.6 385.417 3369.24 363.92 3367 c
-363.92 3360 l
-429.439 3360 l
-429.439 3367 l
-406.479 3368.68 400.999 3374 400.999 3394.72 c
-400.999 3526.32 l
-471.719 3360 l
-479.279 3360 l
-h
-624.318 3360 m
-f*
-682 3489 m
-628.48 3489 l
-628.48 3482.36 l
-640.8 3479.84 643 3477.32 643 3465.84 c
-643 3383.52 l
-643 3372.04 641.082 3369.8 628.48 3366.72 c
-628.48 3360 l
-695.4 3360 l
-695.4 3366.72 l
-685.6 3368.12 682 3372.04 682 3382.68 c
-h
-662.92 3553.2 m
-650.32 3553.2 641 3543.8 641 3531.64 c
-641 3519.32 650.154 3510.2 662.36 3510.2 c
-674.68 3510.2 684 3519.39 684 3531.64 c
-684 3543.68 674.569 3553.2 662.92 3553.2 c
-h
-701.839 3360 m
-f*
-797.12 3451.28 m
-797.12 3491.8 l
-791.04 3491.8 l
-789.36 3487.66 787.68 3486.2 784.04 3486.2 c
-782.36 3486.2 779.84 3486.78 775.36 3488.24 c
-766.4 3491.32 759.96 3492.36 753.52 3492.36 c
-728.04 3492.36 710 3475.03 710 3451.56 c
-710 3433.08 721.353 3420.2 749.32 3408.16 c
-768.64 3399.76 776 3392.76 776 3383.8 c
-776 3372.88 767.68 3365.08 755.2 3365.08 c
-735.6 3365.08 722.72 3377.86 716.841 3402.56 c
-709.001 3402.56 l
-709.001 3356.36 l
-716.001 3356.36 l
-719.081 3362.24 720.761 3364.2 723.281 3364.2 c
-724.681 3364.2 726.921 3363.64 729.721 3362.52 c
-737.841 3359.16 752.121 3356.08 759.96 3356.08 c
-785.44 3356.08 803.001 3373.44 803.001 3398.64 c
-803.001 3418.52 792.383 3430.84 764.44 3442.32 c
-745.401 3450.44 738.001 3457.44 738.001 3466.96 c
-738.001 3476.2 745.654 3483.36 756.041 3483.36 c
-763.601 3483.36 770.881 3480.22 777.041 3474.24 c
-782.92 3468.64 786 3463.32 790.2 3451.28 c
-h
-810.919 3360 m
-f*
-906.12 3451.28 m
-906.12 3491.8 l
-900.04 3491.8 l
-898.36 3487.66 896.68 3486.2 893.04 3486.2 c
-891.36 3486.2 888.84 3486.78 884.36 3488.24 c
-875.4 3491.32 868.96 3492.36 862.52 3492.36 c
-837.04 3492.36 819 3475.03 819 3451.56 c
-819 3433.08 830.353 3420.2 858.32 3408.16 c
-877.64 3399.76 885 3392.76 885 3383.8 c
-885 3372.88 876.68 3365.08 864.2 3365.08 c
-844.6 3365.08 831.72 3377.86 825.841 3402.56 c
-818.001 3402.56 l
-818.001 3356.36 l
-825.001 3356.36 l
-828.081 3362.24 829.761 3364.2 832.281 3364.2 c
-833.681 3364.2 835.921 3363.64 838.721 3362.52 c
-846.841 3359.16 861.121 3356.08 868.96 3356.08 c
-894.44 3356.08 912.001 3373.44 912.001 3398.64 c
-912.001 3418.52 901.383 3430.84 873.44 3442.32 c
-854.401 3450.44 847.001 3457.44 847.001 3466.96 c
-847.001 3476.2 854.654 3483.36 865.041 3483.36 c
-872.601 3483.36 879.881 3480.22 886.041 3474.24 c
-891.92 3468.64 895 3463.32 899.2 3451.28 c
-h
-919.919 3360 m
-f*
-978 3489 m
-924.48 3489 l
-924.48 3482.36 l
-936.8 3479.84 939 3477.32 939 3465.84 c
-939 3383.52 l
-939 3372.04 937.082 3369.8 924.48 3366.72 c
-924.48 3360 l
-991.4 3360 l
-991.4 3366.72 l
-981.6 3368.12 978 3372.04 978 3382.68 c
-h
-958.92 3553.2 m
-946.32 3553.2 937 3543.8 937 3531.64 c
-937 3519.32 946.154 3510.2 958.36 3510.2 c
-970.68 3510.2 980 3519.39 980 3531.64 c
-980 3543.68 970.569 3553.2 958.92 3553.2 c
-h
-997.839 3360 m
-f*
-1056.72 3489 m
-1002.88 3489 l
-1002.88 3482.36 l
-1015.2 3480.4 1018 3477.6 1018 3465.84 c
-1018 3383.52 l
-1018 3371.76 1015.72 3369.24 1002.88 3366.72 c
-1002.88 3360 l
-1070.36 3360 l
-1070.36 3366.72 l
-1060 3368.12 1057 3372.32 1057 3382.68 c
-1057 3457.44 l
-1057 3458.56 1058.81 3461.36 1061.4 3464.16 c
-1067.56 3470.32 1074.28 3474.36 1081 3474.36 c
-1090.52 3474.36 1095 3466.58 1095 3450.44 c
-1095 3382.68 l
-1095 3372.32 1091.44 3367.84 1082.12 3366.72 c
-1082.12 3360 l
-1147.92 3360 l
-1147.92 3366.72 l
-1137 3367.56 1134 3370.92 1134 3382.68 c
-1134 3452.96 l
-1134 3477.04 1119.24 3492.36 1096.4 3492.36 c
-1079.75 3492.36 1066.99 3484.55 1056.72 3468.08 c
-h
-1152.68 3360 m
-f*
-1287.96 3471 m
-1287.96 3486 l
-1251.56 3486 l
-1239.24 3490.68 1231.4 3492.36 1220.2 3492.36 c
-1186.88 3492.36 1164 3473.91 1164 3447.36 c
-1164 3437.84 1167.15 3428.6 1173.44 3420.76 c
-1179.6 3414.04 1184.92 3410.4 1198.08 3404.8 c
-1175.96 3397.52 1165.4 3386.6 1165.4 3372.04 c
-1165.4 3360.56 1170.3 3355.52 1187.72 3349.08 c
-1170.08 3346.56 1161 3339.56 1161 3328.08 c
-1161 3311.84 1181.94 3302 1217.12 3302 c
-1263.88 3302 1288 3316.67 1288 3344.6 c
-1288 3366.16 1270.73 3379 1242.32 3379 c
-1224.12 3379 l
-1201.72 3379 1196.12 3380.97 1196.12 3388.84 c
-1196.12 3397.24 1204.24 3403.12 1215.16 3403.12 c
-1240.64 3403.12 1241.48 3403.12 1250.72 3407.04 c
-1267.8 3414.04 1277 3426.36 1277 3444 c
-1277 3455.02 1273.48 3463.28 1265.28 3471 c
-h
-1243.72 3345 m
-1258.84 3345 1266 3340.66 1266 3331.44 c
-1266 3318.56 1250.64 3311 1223 3311 c
-1198.36 3311 1186 3317.53 1186 3330.04 c
-1186 3335.75 1187.86 3338.74 1195.28 3345 c
-h
-1219.92 3483.36 m
-1233.36 3483.36 1239 3473.11 1239 3447.36 c
-1239 3421.04 1233.87 3410.96 1220.2 3410.96 c
-1206.76 3410.96 1202 3421.04 1202 3447.08 c
-1202 3473.4 1206.96 3483.36 1219.92 3483.36 c
-h
-1293 3360 m
-f*
-717.639 3087.56 m
-709.519 3087.56 l
-699.999 3065.72 694.679 3057.04 684.879 3048.08 c
-673.399 3037.72 657.719 3033 635.879 3033 c
-618.8 3033 614 3036.57 614 3048.36 c
-614 3180.52 l
-614 3201.52 617.886 3205.16 642.039 3206.28 c
-642.039 3213 l
-544.32 3213 l
-544.32 3206 l
-563.36 3204.9 568 3200.48 568 3186.4 c
-568 3050.88 l
-568 3036.6 564.42 3033.52 544.32 3031 c
-544.32 3024 l
-706.159 3024 l
-h
-725.759 3024 m
-f*
-783 3153 m
-729.48 3153 l
-729.48 3146.36 l
-741.8 3143.84 744 3141.32 744 3129.84 c
-744 3047.52 l
-744 3036.04 742.082 3033.8 729.48 3030.72 c
-729.48 3024 l
-796.4 3024 l
-796.4 3030.72 l
-786.6 3032.12 783 3036.04 783 3046.68 c
-h
-763.92 3217.2 m
-751.32 3217.2 742 3207.8 742 3195.64 c
-742 3183.32 751.154 3174.2 763.36 3174.2 c
-775.68 3174.2 785 3183.39 785 3195.64 c
-785 3207.68 775.569 3217.2 763.92 3217.2 c
-h
-802.839 3024 m
-f*
-863.72 3153 m
-809.88 3153 l
-809.88 3146.36 l
-822.2 3144.4 825 3141.6 825 3129.84 c
-825 3047.52 l
-825 3035.76 822.717 3033.24 809.88 3030.72 c
-809.88 3024 l
-877.359 3024 l
-877.359 3030.72 l
-867 3032.12 864 3036.32 864 3046.68 c
-864 3121.44 l
-864 3122.56 865.811 3125.36 868.4 3128.16 c
-874.56 3134.32 881.28 3138.36 888 3138.36 c
-897.52 3138.36 902 3130.58 902 3114.44 c
-902 3046.68 l
-902 3036.32 898.437 3031.84 889.12 3030.72 c
-889.12 3024 l
-954.919 3024 l
-954.919 3030.72 l
-943.999 3031.56 941 3034.92 941 3046.68 c
-941 3116.96 l
-941 3141.04 926.238 3156.36 903.399 3156.36 c
-886.75 3156.36 873.987 3148.55 863.72 3132.08 c
-h
-959.679 3024 m
-f*
-1102.64 3153.08 m
-1042.72 3153.08 l
-1042.72 3146.64 l
-1049.44 3145.52 l
-1056.44 3144.68 1059.24 3142.72 1059.24 3139.08 c
-1059.24 3136.56 1056.44 3131.52 1053.36 3128.44 c
-1018 3092.6 l
-1018 3213 l
-965.16 3213 l
-965.16 3206.56 l
-974.68 3205.72 979 3200.96 979 3190.32 c
-979 3047.52 l
-979 3036.6 974.675 3031.56 965.16 3030.72 c
-965.16 3024 l
-1032.08 3024 l
-1032.08 3030.72 l
-1018.92 3032.68 1018 3034.36 1018 3047.52 c
-1018 3079.44 l
-1023.96 3086.16 l
-1050.56 3048.64 l
-1055.6 3041.64 1057.28 3038.28 1057.28 3036.04 c
-1057.28 3032.68 1053.36 3031 1045.52 3030.72 c
-1045.52 3024 l
-1111.04 3024 l
-1111.04 3031 l
-1107.96 3031 1106.56 3031.78 1104.04 3034.92 c
-1049.72 3109.96 l
-1077.72 3139.36 1085 3144.4 1102.64 3146.64 c
-h
-1114.68 3024 m
-f*
-0.24 i
-4919.04 4974 m
-4919.04 5025.84 l
-4911.96 5025.84 l
-4910.28 5019.55 4908.6 5017.92 4904.28 5017.92 c
-4902.12 5017.92 4899.24 5018.64 4894.2 5020.32 c
-4883.16 5024.4 4875.48 5025.6 4866.12 5025.6 c
-4833.48 5025.6 4814 5007.21 4814 4976.88 c
-4814 4970.88 4814.8 4965.84 4816.2 4961.04 c
-4821.24 4948.32 4834.2 4937.04 4854.6 4927.2 c
-4870.68 4919.52 l
-4891.8 4909.44 4897 4903.2 4897 4890.48 c
-4897 4873.92 4885.46 4863.44 4867.32 4863.44 c
-4853.4 4863.44 4841.88 4869.17 4832.76 4880.64 c
-4825.8 4889.52 4822.44 4897.68 4818.36 4914.72 c
-4811.4 4914.72 l
-4811.4 4855.44 l
-4818.36 4855.44 l
-4819.8 4861.68 4821.72 4863.6 4825.56 4863.6 c
-4827.48 4863.6 4830.12 4862.88 4835.4 4861.2 c
-4847.16 4857.12 4856.04 4855.44 4866.6 4855.44 c
-4902.12 4855.44 4926 4875.84 4926 4906.08 c
-4926 4924.08 4915.25 4942.08 4899.72 4949.76 c
-4864.44 4967.28 l
-4845 4976.88 4840 4982.64 4840 4994.4 c
-4840 5009.28 4849.97 5017.6 4866.12 5017.6 c
-4876.92 5017.6 4887 5013.31 4895.64 5004.96 c
-4903.8 4996.56 4907.64 4989.6 4912.44 4974 c
-h
-4936.44 4860 m
-f*
-4998.96 4973.88 m
-4967.28 4973.88 4944 4949.01 4944 4914.72 c
-4944 4881.36 4967.04 4856.64 4998 4856.64 c
-5029.44 4856.64 5052 4881.36 5052 4914.96 c
-5052 4948.32 5029.06 4973.88 4998.96 4973.88 c
-h
-4998.24 4965.88 m
-5012.4 4965.88 5017 4953.21 5017 4912.32 c
-5017 4876.56 5012.19 4864.64 4998.24 4864.64 c
-4984.32 4864.64 4979 4876.73 4979 4911.12 c
-4979 4937.28 4980.27 4948.08 4984.08 4956.24 c
-4986.72 4962.72 4991.76 4965.88 4998.24 4965.88 c
-h
-5058 4860 m
-f*
-5140.24 4856.88 m
-5150.59 4860.48 5156.36 4861.44 5172 4863.12 c
-5186.88 4864.8 l
-5186.88 4871 l
-5176.32 4871.46 5174 4874.42 5174 4884.24 c
-5174 4971 l
-5125.2 4971 l
-5125.2 4964.88 l
-5137.2 4963.92 5140 4961.04 5140 4950.72 c
-5140 4882.8 l
-5132.11 4874.88 5127.33 4872.64 5120.4 4872.64 c
-5110.56 4872.64 5107 4877.33 5107 4889.28 c
-5107 4971 l
-5061.84 4971 l
-5061.84 4964.88 l
-5071.68 4962.96 5073 4960.8 5073 4950.72 c
-5073 4890.24 l
-5073 4869.12 5085.23 4856.64 5105.52 4856.64 c
-5117.97 4856.64 5126.35 4860.48 5140.24 4872.48 c
-h
-5191.44 4860 m
-f*
-5244.04 4971 m
-5197.96 4971 l
-5197.96 4964.88 l
-5208.28 4963.44 5211 4960.32 5211 4950.72 c
-5211 4880.16 l
-5211 4870.32 5208.59 4867.68 5197.96 4865.76 c
-5197.96 4860 l
-5261.8 4860 l
-5261.8 4865.76 l
-5247.16 4866.72 5245 4869.84 5245 4884.72 c
-5245 4930.08 l
-5245 4942.56 5251.39 4952.88 5258.92 4952.88 c
-5260.84 4952.88 5263 4951.2 5265.64 4947.36 c
-5270.2 4940.88 5273.8 4938.72 5280.04 4938.72 c
-5288.92 4938.72 5295.16 4945.44 5295.16 4954.56 c
-5295.16 4965.6 5287 4973.88 5275.72 4973.88 c
-5263.99 4973.88 5255.07 4967.54 5244.04 4950.96 c
-h
-5297.56 4860 m
-f*
-5396.88 4886.16 m
-5388 4876.08 5381.76 4872.64 5371.92 4872.64 c
-5351.04 4872.64 5338 4893.55 5338 4926.24 c
-5338 4950.96 5345.62 4965.88 5358 4965.88 c
-5361.84 4965.88 5365.44 4964.04 5366.88 4961.52 c
-5368.08 4959.36 5368.08 4959.36 5368.08 4949.28 c
-5368.32 4937.28 5372.4 4932 5381.52 4932 c
-5391.6 4932 5397.84 4937.76 5397.84 4947.12 c
-5397.84 4962 5381.76 4973.88 5360.88 4973.88 c
-5328 4973.88 5304 4948.53 5304 4913.52 c
-5304 4880.16 5325.36 4856.64 5355.36 4856.64 c
-5373.84 4856.64 5387.28 4864.08 5401.2 4881.84 c
-h
-5404.56 4860 m
-f*
-5499.48 4890 m
-5489.64 4878.24 5482.44 4873.64 5472.12 4873.64 c
-5463 4873.64 5455.8 4877.81 5451 4886.16 c
-5446.44 4893.89 5444.52 4902.1 5443.56 4919 c
-5504.04 4919 l
-5502.6 4938.82 5499 4949.81 5491.56 4959.12 c
-5483.88 4968.48 5472.6 4973.88 5459.16 4973.88 c
-5429.16 4973.88 5409 4949.97 5409 4914.72 c
-5409 4879.68 5428.68 4856.64 5458.44 4856.64 c
-5477.88 4856.64 5489.64 4864.08 5505.24 4886.64 c
-h
-5442.36 4928 m
-5443.08 4956.56 5447.4 4965.88 5459.16 4965.88 c
-5466.12 4965.88 5470.44 4962.11 5472.36 4954.8 c
-5473.56 4950.24 5474.04 4943.52 5474.52 4931.28 c
-5474.52 4928 l
-h
-5509.56 4860 m
-f*
-1 i
-4803.35 4811.75 705.6 21.5999 re
-f
-32 w
-3701.75 4956.95 1041.6 457.2 re
-Y
-3701.75 5392.55 m
-4733.75 4979.75 l
-S
-0 0 6120 7920 re
-Y
-3791.75 5439.35 m
-3735.35 5379.35 l
-3735.35 5296.55 l
-3533.75 5459.75 l
-f*
-0.24 i
-449 981.84 m
-449 971.28 443.084 966.48 429.36 966 c
-429.36 960 l
-505.2 960 l
-530.88 960 554.88 969.12 570 984.96 c
-583.92 999.12 592 1019.76 592 1042.8 c
-592 1092.24 558.49 1122 502.56 1122 c
-429.36 1122 l
-429.36 1116.24 l
-444.72 1114.8 449 1111.2 449 1100.16 c
-h
-488 1105.68 m
-488 1111.2 492.854 1114 502.32 1114 c
-519.36 1114 531.36 1106.35 539.76 1090.08 c
-546.48 1077.36 550 1059.84 550 1039.2 c
-550 1016.88 545.379 996.48 537.84 985.68 c
-529.68 974.16 517.92 968 502.08 968 c
-491.28 968 488 971.21 488 982.32 c
-h
-599.28 960 m
-f*
-696.48 990 m
-686.64 978.24 679.44 973.64 669.12 973.64 c
-660 973.64 652.8 977.813 648 986.16 c
-643.44 993.887 641.52 1002.1 640.56 1019 c
-701.04 1019 l
-699.6 1038.82 696 1049.81 688.56 1059.12 c
-680.88 1068.48 669.6 1073.88 656.16 1073.88 c
-626.16 1073.88 606 1049.97 606 1014.72 c
-606 979.68 625.68 956.64 655.44 956.64 c
-674.88 956.64 686.64 964.08 702.24 986.64 c
-h
-639.36 1028 m
-640.08 1056.56 644.4 1065.88 656.16 1065.88 c
-663.12 1065.88 667.44 1062.11 669.36 1054.8 c
-670.56 1050.24 671.04 1043.52 671.52 1031.28 c
-671.52 1028 l
-h
-706.56 960 m
-f*
-788.96 1038.24 m
-788.96 1073.4 l
-783.32 1073.4 l
-781.88 1069.53 780.44 1068.6 777.32 1068.6 c
-775.88 1068.6 773.72 1068.98 769.88 1069.92 c
-762.2 1072.56 756.68 1073.88 751.16 1073.88 c
-729.32 1073.88 713 1058.85 713 1038.48 c
-713 1022.64 722.979 1011.6 747.56 1001.28 c
-764.12 994.08 771 988.08 771 980.4 c
-771 971.04 763.64 964.64 752.6 964.64 c
-735.8 964.64 724.76 975.494 719.72 996.48 c
-713 996.48 l
-713 956.88 l
-719 956.88 l
-721.64 961.92 723.08 963.6 725.24 963.6 c
-726.44 963.6 728.36 963.12 730.76 962.16 c
-737.719 959.28 749.959 956.64 756.679 956.64 c
-778.52 956.64 794 971.52 794 993.12 c
-794 1010.16 784.78 1020.72 760.52 1030.56 c
-744.199 1037.52 737 1043.52 737 1051.68 c
-737 1059.6 743.923 1065.88 753.32 1065.88 c
-759.8 1065.88 766.04 1063.14 771.32 1057.92 c
-776.36 1053.12 779 1048.56 782.6 1038.24 c
-h
-800.36 960 m
-f*
-873.2 1071 m
-851 1071 l
-851 1111.2 l
-844.64 1111.2 l
-830 1090.56 820.4 1079.76 804.8 1066.56 c
-804.8 1060 l
-817 1060 l
-817 982.32 l
-817 966.72 827.427 957.12 844.16 957.12 c
-860.24 957.12 869.84 964.32 879.68 984 c
-873.68 986.64 l
-868.88 977.52 865.04 974.119 860 974.119 c
-853.28 974.119 851 978.211 851 987.84 c
-851 1060 l
-873.2 1060 l
-h
-879.92 960 m
-f*
-929 1071 m
-882.84 1071 l
-882.84 1064.88 l
-893.4 1062.72 895 1060.56 895 1050.72 c
-895 980.16 l
-895 970.32 893.394 968.4 882.84 965.76 c
-882.84 960 l
-940.2 960 l
-940.2 965.76 l
-931.8 966.96 929 970.32 929 979.44 c
-h
-912.36 1125.6 m
-901.56 1125.6 894 1117.54 894 1107.12 c
-894 1096.56 901.663 1088.6 911.88 1088.6 c
-922.44 1088.6 931 1096.54 931 1107.12 c
-931 1117.44 922.661 1125.6 912.36 1125.6 c
-h
-945.72 960 m
-f*
-997.76 1071 m
-952.04 1071 l
-952.04 1064.88 l
-962.6 1063.2 964 1060.8 964 1050.72 c
-964 980.16 l
-964 970.08 962.195 967.92 952.04 965.76 c
-952.04 960 l
-1009.88 960 l
-1009.88 965.76 l
-1001 966.96 998 970.56 998 979.44 c
-998 1043.52 l
-998 1044.48 999.729 1046.88 1002.2 1049.28 c
-1007.48 1054.56 1013.24 1057.88 1019 1057.88 c
-1027.16 1057.88 1031 1051.26 1031 1037.52 c
-1031 979.44 l
-1031 970.56 1027.95 966.72 1019.96 965.76 c
-1019.96 960 l
-1076.36 960 l
-1076.36 965.76 l
-1067 966.48 1065 969.36 1065 979.44 c
-1065 1039.68 l
-1065 1060.32 1052.12 1073.88 1032.2 1073.88 c
-1017.75 1073.88 1006.67 1067.04 997.76 1052.64 c
-h
-1080.44 960 m
-f*
-1193.52 975.36 m
-1191.12 972.96 l
-1190.4 972.24 1189.68 972 1188.48 972 c
-1185.12 972 1184 973.92 1184 978 c
-1184 1040.64 l
-1184 1061.04 1165.54 1073.88 1135.92 1073.88 c
-1108.8 1073.88 1090.56 1061.49 1090.56 1043.28 c
-1090.56 1033.2 1096.32 1027.44 1106.16 1027.44 c
-1115.76 1027.44 1122.48 1033.2 1122.48 1041.36 c
-1122.48 1044.72 1121.28 1047.84 1118.16 1051.68 c
-1116 1054.08 1115.28 1055.52 1115.28 1056.96 c
-1115.28 1062 1121.76 1065.88 1130.4 1065.88 c
-1144.56 1065.88 1151 1059.39 1151 1044.72 c
-1151 1027.2 l
-1122.67 1018.56 1111.28 1014.24 1102.08 1008.24 c
-1091.28 1001.04 1086 992.64 1086 982.08 c
-1086 967.44 1097.04 956.64 1112.4 956.64 c
-1126.32 956.64 1137.36 961.44 1150.56 973.44 c
-1153.2 961.2 1158.48 956.64 1170.24 956.64 c
-1180.56 956.64 1188 960.48 1197.12 970.321 c
-h
-1150 984 m
-1143.64 976.561 1138.93 973.681 1133.28 973.681 c
-1126.08 973.681 1121 980.161 1121 989.761 c
-1121 1003.68 1130.98 1013.52 1150 1018.8 c
-h
-1200 960 m
-f*
-1273.2 1071 m
-1251 1071 l
-1251 1111.2 l
-1244.64 1111.2 l
-1230 1090.56 1220.4 1079.76 1204.8 1066.56 c
-1204.8 1060 l
-1217 1060 l
-1217 982.32 l
-1217 966.72 1227.43 957.12 1244.16 957.12 c
-1260.24 957.12 1269.84 964.32 1279.68 984 c
-1273.68 986.64 l
-1268.88 977.52 1265.04 974.119 1260 974.119 c
-1253.28 974.119 1251 978.211 1251 987.84 c
-1251 1060 l
-1273.2 1060 l
-h
-1279.92 960 m
-f*
-1330 1071 m
-1283.84 1071 l
-1283.84 1064.88 l
-1294.4 1062.72 1296 1060.56 1296 1050.72 c
-1296 980.16 l
-1296 970.32 1294.39 968.4 1283.84 965.76 c
-1283.84 960 l
-1341.2 960 l
-1341.2 965.76 l
-1332.8 966.96 1330 970.32 1330 979.44 c
-h
-1313.36 1125.6 m
-1302.56 1125.6 1295 1117.54 1295 1107.12 c
-1295 1096.56 1302.66 1088.6 1312.88 1088.6 c
-1323.44 1088.6 1332 1096.54 1332 1107.12 c
-1332 1117.44 1323.66 1125.6 1313.36 1125.6 c
-h
-1346.72 960 m
-f*
-1406.96 1073.88 m
-1375.28 1073.88 1352 1049.01 1352 1014.72 c
-1352 981.36 1375.04 956.64 1406 956.64 c
-1437.44 956.64 1460 981.36 1460 1014.96 c
-1460 1048.32 1437.06 1073.88 1406.96 1073.88 c
-h
-1406.24 1065.88 m
-1420.4 1065.88 1425 1053.21 1425 1012.32 c
-1425 976.56 1420.19 964.64 1406.24 964.64 c
-1392.32 964.64 1387 976.734 1387 1011.12 c
-1387 1037.28 1388.27 1048.08 1392.08 1056.24 c
-1394.72 1062.72 1399.76 1065.88 1406.24 1065.88 c
-h
-1466 960 m
-f*
-1516.76 1071 m
-1471.04 1071 l
-1471.04 1064.88 l
-1481.6 1063.2 1483 1060.8 1483 1050.72 c
-1483 980.16 l
-1483 970.08 1481.19 967.92 1471.04 965.76 c
-1471.04 960 l
-1528.88 960 l
-1528.88 965.76 l
-1520 966.96 1517 970.56 1517 979.44 c
-1517 1043.52 l
-1517 1044.48 1518.73 1046.88 1521.2 1049.28 c
-1526.48 1054.56 1532.24 1057.88 1538 1057.88 c
-1546.16 1057.88 1550 1051.26 1550 1037.52 c
-1550 979.44 l
-1550 970.56 1546.95 966.72 1538.96 965.76 c
-1538.96 960 l
-1595.36 960 l
-1595.36 965.76 l
-1586 966.48 1584 969.36 1584 979.44 c
-1584 1039.68 l
-1584 1060.32 1571.12 1073.88 1551.2 1073.88 c
-1536.75 1073.88 1525.67 1067.04 1516.76 1052.64 c
-h
-1599.44 960 m
-f*
-1 i
-425.75 911.751 1172.4 21.5999 re
-f
-1133.75 1190.15 669.6 772.8 re
-Y
-1133.75 1199.75 m
-1793.75 1962.95 l
-S
-0 0 6120 7920 re
-Y
-1809.35 1862.15 m
-1772.15 1936.55 l
-1691.75 1962.95 l
-1913.75 2099.75 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/fsconvert.eps b/ast-5.3-1/sun210_figures/fsconvert.eps
deleted file mode 100644
index cd0d973..0000000
--- a/ast-5.3-1/sun210_figures/fsconvert.eps
+++ /dev/null
@@ -1,1748 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 95 389 528 576
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/23 14:34:13
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5273.75 5475.35 m
-5273.75 5600.15 5172.95 5700.95 5048.15 5700.95 c
-1238.15 5700.95 l
-1113.35 5700.95 1012.55 5600.15 1012.55 5475.35 c
-1012.55 4125.35 l
-1012.55 4000.55 1113.35 3899.75 1238.15 3899.75 c
-5048.15 3899.75 l
-5172.95 3899.75 5273.75 4000.55 5273.75 4125.35 c
-f*
-1 g
-5208.95 5531.75 m
-5208.95 5655.35 5109.35 5754.95 4984.55 5754.95 c
-1182.95 5754.95 l
-1058.15 5754.95 958.55 5655.35 958.55 5531.75 c
-958.55 4187.75 l
-958.55 4064.15 1058.15 3964.55 1182.95 3964.55 c
-4984.55 3964.55 l
-5109.35 3964.55 5208.95 4064.15 5208.95 4187.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5208.95 5531.75 m
-5208.95 5655.35 5109.35 5754.95 4984.55 5754.95 c
-1182.95 5754.95 l
-1058.15 5754.95 958.55 5655.35 958.55 5531.75 c
-958.55 4187.75 l
-958.55 4064.15 1058.15 3964.55 1182.95 3964.55 c
-4984.55 3964.55 l
-5109.35 3964.55 5208.95 4064.15 5208.95 4187.75 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1395.35 5256.95 l
-1283.75 5256.95 1192.55 5165.75 1192.55 5055.35 c
-1192.55 4917.35 l
-1192.55 4806.95 1283.75 4715.75 1395.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1342.55 5306.15 l
-1232.15 5306.15 1143.35 5218.55 1143.35 5111.75 c
-1143.35 4979.75 l
-1143.35 4872.95 1232.15 4785.35 1342.55 4785.35 c
-1994.15 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-f*
-16 w
-0 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1342.55 5306.15 l
-1232.15 5306.15 1143.35 5218.55 1143.35 5111.75 c
-1143.35 4979.75 l
-1143.35 4872.95 1232.15 4785.35 1342.55 4785.35 c
-1994.15 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-h
-S
-0.201248 i
-1339.16 5171.59 m
-1339.16 5215.22 l
-1333.37 5215.22 l
-1331.96 5209.82 1330.55 5208.42 1326.93 5208.42 c
-1325.12 5208.42 1322.7 5209.03 1318.47 5210.43 c
-1309.22 5213.86 1302.78 5215.02 1294.93 5215.02 c
-1267.56 5215.02 1251 5199.54 1251 5174.01 c
-1251 5168.98 1251.75 5164.75 1253.07 5160.73 c
-1257.29 5150.06 1268.16 5140.6 1285.27 5132.35 c
-1298.75 5125.91 l
-1316.46 5117.46 1321 5112.22 1321 5101.56 c
-1321 5087.67 1311.25 5079.18 1295.94 5079.18 c
-1284.26 5079.18 1274.6 5083.89 1266.96 5093.31 c
-1261.12 5100.75 1258.3 5107.6 1254.88 5121.88 c
-1249.04 5121.88 l
-1249.04 5072.18 l
-1254.88 5072.18 l
-1256.09 5077.41 1257.7 5079.02 1260.92 5079.02 c
-1262.53 5079.02 1264.74 5078.42 1269.17 5077.01 c
-1279.03 5073.59 1286.48 5072.18 1295.33 5072.18 c
-1325.12 5072.18 1345 5089.28 1345 5114.64 c
-1345 5129.73 1336.04 5144.83 1323.1 5151.27 c
-1293.52 5165.96 l
-1277.22 5174.01 1273 5178.84 1273 5188.7 c
-1273 5201.18 1281.37 5208.02 1294.93 5208.02 c
-1303.99 5208.02 1312.44 5204.47 1319.68 5197.55 c
-1326.53 5190.51 1329.75 5184.67 1333.77 5171.59 c
-h
-1353.89 5076 m
-f*
-1456.24 5168.78 m
-1413.17 5168.78 l
-1413.17 5164.15 l
-1418 5163.34 l
-1423.03 5162.74 1425.05 5161.33 1425.05 5158.71 c
-1425.05 5156.9 1423.03 5153.28 1420.82 5151.07 c
-1395 5125.31 l
-1395 5212 l
-1357.43 5212 l
-1357.43 5207.21 l
-1364.27 5206.61 1367 5203.19 1367 5195.54 c
-1367 5092.91 l
-1367 5085.06 1364.01 5081.43 1357.43 5080.83 c
-1357.43 5076 l
-1405.53 5076 l
-1405.53 5080.83 l
-1396.07 5082.24 1395 5083.45 1395 5092.91 c
-1395 5115.85 l
-1399.69 5120.68 l
-1418.81 5093.71 l
-1422.43 5088.68 1423.64 5086.26 1423.64 5084.65 c
-1423.64 5082.24 1420.82 5081.03 1415.19 5080.83 c
-1415.19 5076 l
-1462.28 5076 l
-1462.28 5081 l
-1460.06 5081 1459.06 5081.57 1457.25 5083.85 c
-1418.2 5137.78 l
-1438.33 5158.91 1443.56 5162.54 1456.24 5164.15 c
-h
-1464.89 5076 m
-f*
-1561.6 5169 m
-1531.21 5169 l
-1531.21 5163.95 l
-1539.86 5163.54 1542.28 5162.13 1542.28 5157.3 c
-1542.28 5154.89 1541.88 5153.48 1540.07 5148.25 c
-1526.38 5109.61 l
-1511.89 5146.84 l
-1507.87 5157.1 1507.87 5157.1 1507.87 5158.71 c
-1507.87 5161.73 1510.28 5163.34 1515.31 5163.74 c
-1518.53 5163.95 l
-1518.53 5169 l
-1468 5169 l
-1468 5163.95 l
-1472.57 5163.34 1473.82 5162.74 1475.06 5161.13 c
-1476.87 5158.71 1484.32 5142.81 1488.34 5132.75 c
-1512.49 5073.38 l
-1508.87 5062.72 l
-1505.45 5052.66 1500.42 5046 1495.59 5046 c
-1493.78 5046 1492 5047.71 1492 5049.64 c
-1492 5049.84 1492 5050.24 1492.37 5050.84 c
-1492.57 5051.85 1492.77 5052.86 1492.77 5053.66 c
-1492.77 5059.5 1487.94 5063.52 1481.1 5063.52 c
-1473.45 5063.52 1468 5058.29 1468 5050.64 c
-1468 5041.18 1476.14 5035 1487.74 5035 c
-1494.58 5035 1500.42 5037.13 1504.65 5041.39 c
-1508.87 5046.01 1512.9 5054.06 1519.94 5072.98 c
-1549.93 5152.88 l
-1553.35 5161.33 1555.36 5163.14 1561.6 5163.95 c
-h
-1565.62 5076 m
-f*
-1682.33 5212 m
-1568.22 5212 l
-1568.22 5207 l
-1582.11 5206.2 1586 5203.18 1586 5192.72 c
-1586 5095.32 l
-1586 5084.85 1583.17 5082.64 1568.22 5081.03 c
-1568.22 5076 l
-1640.67 5076 l
-1640.67 5081 l
-1622.15 5081.81 1619 5084.23 1619 5095.32 c
-1619 5142.21 l
-1639.22 5141.81 1646.55 5134.36 1649.32 5111.02 c
-1654.35 5111.02 l
-1654.35 5179.04 l
-1649.32 5179.04 l
-1645.76 5156.1 1638.82 5149.05 1619 5149.05 c
-1619 5195.74 l
-1619 5203.19 1621.52 5205 1631.41 5205 c
-1650.13 5205 1661.8 5201.64 1668.04 5194.74 c
-1672.47 5189.71 1674.68 5184.27 1677.5 5171.59 c
-1682.33 5171.59 l
-h
-1687.96 5076 m
-f*
-1731.19 5169 m
-1692.84 5169 l
-1692.84 5163.95 l
-1701.49 5162.74 1704 5160.12 1704 5152.07 c
-1704 5092.9 l
-1704 5084.65 1701.93 5082.44 1692.84 5080.83 c
-1692.84 5076 l
-1746.37 5076 l
-1746.37 5080.83 l
-1734.09 5081.63 1732 5084.25 1732 5096.73 c
-1732 5134.76 l
-1732 5145.23 1737.49 5153.88 1743.95 5153.88 c
-1745.56 5153.88 1747.37 5152.47 1749.59 5149.25 c
-1753.41 5143.82 1756.43 5142.01 1761.66 5142.01 c
-1769.11 5142.01 1774.34 5147.64 1774.34 5155.29 c
-1774.34 5164.55 1767.5 5171.41 1758.04 5171.41 c
-1748.1 5171.41 1740.54 5166.12 1731.19 5152.27 c
-h
-1776.35 5076 m
-f*
-1871.19 5088.88 m
-1869.18 5086.87 l
-1868.57 5086.26 1867.97 5086.06 1866.96 5086.06 c
-1864.15 5086.06 1863 5087.67 1863 5091.09 c
-1863 5143.62 l
-1863 5160.73 1847.6 5171.42 1822.89 5171.42 c
-1800.15 5171.42 1784.85 5161.06 1784.85 5145.83 c
-1784.85 5137.38 1789.69 5132.55 1797.94 5132.55 c
-1805.99 5132.55 1811.62 5137.38 1811.62 5144.22 c
-1811.62 5147.04 1810.61 5149.66 1808 5152.88 c
-1806.19 5154.89 1805.58 5156.1 1805.58 5157.3 c
-1805.58 5161.53 1811.02 5164.42 1818.26 5164.42 c
-1830.14 5164.42 1835.86 5159.08 1835.86 5147.04 c
-1835.86 5132.35 l
-1811.91 5125.1 1802.29 5121.48 1794.51 5116.45 c
-1785.46 5110.41 1781 5103.37 1781 5094.52 c
-1781 5082.24 1790.27 5073.18 1803.17 5073.18 c
-1814.84 5073.18 1824.1 5077.21 1835.17 5087.27 c
-1837.38 5077.01 1841.81 5073.18 1851.67 5073.18 c
-1860.32 5073.18 1866.56 5076.4 1874.21 5084.65 c
-h
-1835 5096.13 m
-1829.55 5089.89 1825.52 5087.47 1820.68 5087.47 c
-1814.64 5087.47 1810 5092.91 1810 5100.96 c
-1810 5112.63 1818.61 5120.88 1835 5125.31 c
-h
-1876.62 5076 m
-f*
-1919.4 5169 m
-1880.7 5169 l
-1880.7 5163.95 l
-1889.55 5162.74 1892 5160.32 1892 5152.07 c
-1892 5092.9 l
-1892 5084.65 1889.74 5082.44 1880.7 5080.83 c
-1880.7 5076 l
-1929 5076 l
-1929 5080.83 l
-1921.95 5081.84 1920 5084.65 1920 5092.3 c
-1920 5146.03 l
-1920 5147.04 1922.87 5150.66 1925.18 5152.88 c
-1929.4 5156.1 1933.02 5158.42 1936.65 5158.42 c
-1944.5 5158.42 1948 5153.59 1948 5141 c
-1948 5092.3 l
-1948 5084.05 1945.68 5081.43 1937.85 5080.83 c
-1937.85 5076 l
-1984.95 5076 l
-1984.95 5080.83 l
-1977.9 5081.64 1976 5084.65 1976 5092.3 c
-1976 5146.03 l
-1976 5147.04 1978.73 5150.46 1980.92 5152.68 c
-1985.35 5156.1 1988.97 5158.42 1992.59 5158.42 c
-2000.24 5158.42 2003 5153.38 2003 5141 c
-2003 5092.3 l
-2003 5083.85 2000.85 5081.43 1993.4 5080.83 c
-1993.4 5076 l
-2041.3 5076 l
-2041.3 5081 l
-2033.45 5081.4 2031 5083.78 2031 5092.3 c
-2031 5142.81 l
-2031 5160.12 2020.43 5171.42 2004.07 5171.42 c
-1992.59 5171.42 1984.95 5166.73 1974.48 5153.68 c
-1968.44 5166.36 1961.4 5171.42 1948.72 5171.42 c
-1935.95 5171.42 1926.98 5165.91 1919.4 5153.68 c
-h
-2044.64 5076 m
-f*
-2122.9 5101.16 m
-2114.65 5091.29 2108.61 5087.18 2099.96 5087.18 c
-2092.31 5087.18 2086.27 5090.77 2082.25 5097.94 c
-2078.43 5104.54 2076.82 5111.56 2076.01 5126 c
-2126.73 5126 l
-2125.52 5142.36 2122.5 5151.43 2116.26 5159.12 c
-2109.82 5166.96 2100.36 5171.42 2089.09 5171.42 c
-2063.94 5171.42 2047.03 5151.4 2047.03 5121.88 c
-2047.03 5092.5 2063.53 5073.18 2088.49 5073.18 c
-2104.79 5073.18 2114.65 5079.42 2127.73 5098.34 c
-h
-2075 5133 m
-2075.61 5156.96 2079.23 5164.42 2089.09 5164.42 c
-2094.93 5164.42 2098.55 5161.38 2100.16 5155.49 c
-2101.17 5151.67 2101.57 5146.03 2101.97 5135.77 c
-2101.97 5133 l
-h
-2131.35 5076 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -1659 -4890]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-5033.75 5048.15 m
-5033.75 5158.55 4942.55 5249.75 4830.95 5249.75 c
-4126.55 5249.75 l
-4014.95 5249.75 3923.75 5158.55 3923.75 5048.15 c
-3923.75 4910.15 l
-3923.75 4799.75 4014.95 4708.55 4126.55 4708.55 c
-4830.95 4708.55 l
-4942.55 4708.55 5033.75 4799.75 5033.75 4910.15 c
-f*
-1 g
-4964.15 5104.55 m
-4964.15 5211.35 4875.35 5298.95 4766.15 5298.95 c
-4073.75 5298.95 l
-3963.35 5298.95 3874.55 5211.35 3874.55 5104.55 c
-3874.55 4972.55 l
-3874.55 4865.75 3963.35 4778.15 4073.75 4778.15 c
-4764.95 4778.15 l
-4875.35 4778.15 4964.15 4865.75 4964.15 4972.55 c
-f*
-0 g
-4964.15 5104.55 m
-4964.15 5211.35 4875.35 5298.95 4766.15 5298.95 c
-4073.75 5298.95 l
-3963.35 5298.95 3874.55 5211.35 3874.55 5104.55 c
-3874.55 4972.55 l
-3874.55 4865.75 3963.35 4778.15 4073.75 4778.15 c
-4764.95 4778.15 l
-4875.35 4778.15 4964.15 4865.75 4964.15 4972.55 c
-h
-S
-0.201248 i
-4082.16 5164.59 m
-4082.16 5208.22 l
-4076.37 5208.22 l
-4074.96 5202.82 4073.55 5201.42 4069.93 5201.42 c
-4068.12 5201.42 4065.7 5202.03 4061.47 5203.43 c
-4052.22 5206.86 4045.78 5208.02 4037.93 5208.02 c
-4010.56 5208.02 3994 5192.54 3994 5167.01 c
-3994 5161.98 3994.75 5157.75 3996.07 5153.73 c
-4000.29 5143.06 4011.16 5133.6 4028.27 5125.35 c
-4041.75 5118.91 l
-4059.46 5110.46 4064 5105.22 4064 5094.56 c
-4064 5080.67 4054.25 5072.18 4038.94 5072.18 c
-4027.26 5072.18 4017.6 5076.89 4009.96 5086.31 c
-4004.12 5093.75 4001.3 5100.6 3997.88 5114.88 c
-3992.04 5114.88 l
-3992.04 5065.18 l
-3997.88 5065.18 l
-3999.09 5070.41 4000.7 5072.02 4003.92 5072.02 c
-4005.53 5072.02 4007.74 5071.42 4012.17 5070.01 c
-4022.03 5066.59 4029.48 5065.18 4038.33 5065.18 c
-4068.12 5065.18 4088 5082.28 4088 5107.64 c
-4088 5122.73 4079.04 5137.83 4066.1 5144.27 c
-4036.52 5158.96 l
-4020.22 5167.01 4016 5171.84 4016 5181.7 c
-4016 5194.18 4024.37 5201.02 4037.93 5201.02 c
-4046.99 5201.02 4055.44 5197.47 4062.68 5190.55 c
-4069.53 5183.51 4072.75 5177.67 4076.77 5164.59 c
-h
-4096.89 5069 m
-f*
-4200.24 5161.78 m
-4157.17 5161.78 l
-4157.17 5157.15 l
-4162 5156.34 l
-4167.03 5155.74 4169.05 5154.33 4169.05 5151.71 c
-4169.05 5149.9 4167.03 5146.28 4164.82 5144.07 c
-4139 5118.31 l
-4139 5205 l
-4101.43 5205 l
-4101.43 5200.21 l
-4108.27 5199.61 4111 5196.19 4111 5188.54 c
-4111 5085.91 l
-4111 5078.06 4108.01 5074.43 4101.43 5073.83 c
-4101.43 5069 l
-4149.53 5069 l
-4149.53 5073.83 l
-4140.07 5075.24 4139 5076.45 4139 5085.91 c
-4139 5108.85 l
-4143.69 5113.68 l
-4162.81 5086.71 l
-4166.43 5081.68 4167.64 5079.26 4167.64 5077.65 c
-4167.64 5075.24 4164.82 5074.03 4159.19 5073.83 c
-4159.19 5069 l
-4206.28 5069 l
-4206.28 5074 l
-4204.06 5074 4203.06 5074.57 4201.25 5076.85 c
-4162.2 5130.78 l
-4182.33 5151.91 4187.56 5155.54 4200.24 5157.15 c
-h
-4208.89 5069 m
-f*
-4303.6 5162 m
-4273.21 5162 l
-4273.21 5156.95 l
-4281.86 5156.54 4284.28 5155.13 4284.28 5150.3 c
-4284.28 5147.89 4283.88 5146.48 4282.07 5141.25 c
-4268.38 5102.61 l
-4253.89 5139.84 l
-4249.87 5150.1 4249.87 5150.1 4249.87 5151.71 c
-4249.87 5154.73 4252.28 5156.34 4257.31 5156.74 c
-4260.53 5156.95 l
-4260.53 5162 l
-4210 5162 l
-4210 5156.95 l
-4214.57 5156.34 4215.82 5155.74 4217.06 5154.13 c
-4218.87 5151.71 4226.32 5135.81 4230.34 5125.75 c
-4254.49 5066.38 l
-4250.87 5055.72 l
-4247.45 5045.66 4242.42 5039 4237.59 5039 c
-4235.78 5039 4234 5040.71 4234 5042.64 c
-4234 5042.84 4234 5043.24 4234.37 5043.84 c
-4234.57 5044.85 4234.77 5045.86 4234.77 5046.66 c
-4234.77 5052.5 4229.94 5056.52 4223.1 5056.52 c
-4215.45 5056.52 4210 5051.29 4210 5043.64 c
-4210 5034.18 4218.14 5028 4229.74 5028 c
-4236.58 5028 4242.42 5030.13 4246.65 5034.39 c
-4250.87 5039.01 4254.9 5047.06 4261.94 5065.98 c
-4291.93 5145.88 l
-4295.35 5154.33 4297.36 5156.14 4303.6 5156.95 c
-h
-4307.62 5069 m
-f*
-4425.33 5205 m
-4311.22 5205 l
-4311.22 5200 l
-4325.11 5199.2 4329 5196.18 4329 5185.72 c
-4329 5088.32 l
-4329 5077.85 4326.17 5075.64 4311.22 5074.03 c
-4311.22 5069 l
-4383.67 5069 l
-4383.67 5074 l
-4365.15 5074.81 4362 5077.23 4362 5088.32 c
-4362 5135.21 l
-4382.22 5134.81 4389.55 5127.36 4392.32 5104.02 c
-4397.35 5104.02 l
-4397.35 5172.04 l
-4392.32 5172.04 l
-4388.76 5149.1 4381.82 5142.05 4362 5142.05 c
-4362 5188.74 l
-4362 5196.19 4364.52 5198 4374.41 5198 c
-4393.13 5198 4404.8 5194.64 4411.04 5187.74 c
-4415.47 5182.71 4417.68 5177.27 4420.5 5164.59 c
-4425.33 5164.59 l
-h
-4430.96 5069 m
-f*
-4474.19 5162 m
-4435.84 5162 l
-4435.84 5156.95 l
-4444.49 5155.74 4447 5153.12 4447 5145.07 c
-4447 5085.9 l
-4447 5077.65 4444.93 5075.44 4435.84 5073.83 c
-4435.84 5069 l
-4489.37 5069 l
-4489.37 5073.83 l
-4477.09 5074.63 4475 5077.25 4475 5089.73 c
-4475 5127.76 l
-4475 5138.23 4480.49 5146.88 4486.95 5146.88 c
-4488.56 5146.88 4490.37 5145.47 4492.59 5142.25 c
-4496.41 5136.82 4499.43 5135.01 4504.66 5135.01 c
-4512.11 5135.01 4517.34 5140.64 4517.34 5148.29 c
-4517.34 5157.55 4510.5 5164.41 4501.04 5164.41 c
-4491.1 5164.41 4483.54 5159.12 4474.19 5145.27 c
-h
-4519.35 5069 m
-f*
-4614.19 5081.88 m
-4612.18 5079.87 l
-4611.57 5079.26 4610.97 5079.06 4609.96 5079.06 c
-4607.15 5079.06 4606 5080.67 4606 5084.09 c
-4606 5136.62 l
-4606 5153.73 4590.6 5164.42 4565.89 5164.42 c
-4543.15 5164.42 4527.85 5154.06 4527.85 5138.83 c
-4527.85 5130.38 4532.69 5125.55 4540.94 5125.55 c
-4548.99 5125.55 4554.62 5130.38 4554.62 5137.22 c
-4554.62 5140.04 4553.61 5142.66 4551 5145.88 c
-4549.19 5147.89 4548.58 5149.1 4548.58 5150.3 c
-4548.58 5154.53 4554.02 5157.42 4561.26 5157.42 c
-4573.14 5157.42 4578.86 5152.08 4578.86 5140.04 c
-4578.86 5125.35 l
-4554.91 5118.1 4545.29 5114.48 4537.51 5109.45 c
-4528.46 5103.41 4524 5096.37 4524 5087.52 c
-4524 5075.24 4533.27 5066.18 4546.17 5066.18 c
-4557.84 5066.18 4567.1 5070.21 4578.17 5080.27 c
-4580.38 5070.01 4584.81 5066.18 4594.67 5066.18 c
-4603.32 5066.18 4609.56 5069.4 4617.21 5077.65 c
-h
-4578 5089.13 m
-4572.55 5082.89 4568.52 5080.47 4563.68 5080.47 c
-4557.64 5080.47 4553 5085.91 4553 5093.96 c
-4553 5105.63 4561.61 5113.88 4578 5118.31 c
-h
-4619.62 5069 m
-f*
-4661.4 5162 m
-4622.7 5162 l
-4622.7 5156.95 l
-4631.55 5155.74 4634 5153.32 4634 5145.07 c
-4634 5085.9 l
-4634 5077.65 4631.74 5075.44 4622.7 5073.83 c
-4622.7 5069 l
-4671 5069 l
-4671 5073.83 l
-4663.95 5074.84 4662 5077.65 4662 5085.3 c
-4662 5139.03 l
-4662 5140.04 4664.87 5143.66 4667.18 5145.88 c
-4671.4 5149.1 4675.02 5151.42 4678.65 5151.42 c
-4686.5 5151.42 4690 5146.59 4690 5134 c
-4690 5085.3 l
-4690 5077.05 4687.68 5074.43 4679.85 5073.83 c
-4679.85 5069 l
-4726.95 5069 l
-4726.95 5073.83 l
-4719.9 5074.64 4718 5077.65 4718 5085.3 c
-4718 5139.03 l
-4718 5140.04 4720.73 5143.46 4722.92 5145.68 c
-4727.35 5149.1 4730.97 5151.42 4734.59 5151.42 c
-4742.24 5151.42 4745 5146.38 4745 5134 c
-4745 5085.3 l
-4745 5076.85 4742.85 5074.43 4735.4 5073.83 c
-4735.4 5069 l
-4783.3 5069 l
-4783.3 5074 l
-4775.45 5074.4 4773 5076.78 4773 5085.3 c
-4773 5135.81 l
-4773 5153.12 4762.43 5164.42 4746.07 5164.42 c
-4734.59 5164.42 4726.95 5159.73 4716.48 5146.68 c
-4710.44 5159.36 4703.4 5164.42 4690.72 5164.42 c
-4677.95 5164.42 4668.98 5158.91 4661.4 5146.68 c
-h
-4786.64 5069 m
-f*
-4865.9 5094.16 m
-4857.65 5084.29 4851.61 5080.18 4842.96 5080.18 c
-4835.31 5080.18 4829.27 5083.77 4825.25 5090.94 c
-4821.43 5097.54 4819.82 5104.56 4819.01 5119 c
-4869.73 5119 l
-4868.52 5135.36 4865.5 5144.43 4859.26 5152.12 c
-4852.82 5159.96 4843.36 5164.42 4832.09 5164.42 c
-4806.94 5164.42 4790.03 5144.4 4790.03 5114.88 c
-4790.03 5085.5 4806.53 5066.18 4831.49 5066.18 c
-4847.79 5066.18 4857.65 5072.42 4870.73 5091.34 c
-h
-4818 5126 m
-4818.61 5149.96 4822.23 5157.42 4832.09 5157.42 c
-4837.93 5157.42 4841.55 5154.38 4843.16 5148.49 c
-4844.17 5144.67 4844.57 5139.03 4844.97 5128.77 c
-4844.97 5126 l
-h
-4874.35 5069 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -4394 -4883]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-8 w
-2175.35 4842.95 m
-2222.15 4748.15 2351.75 4684.55 2496.95 4684.55 c
-2577.35 4684.55 2655.35 4703.75 2717.75 4740.95 c
-S
-2709.35 4683.35 m
-2694.95 4733.75 l
-2650.55 4758.95 l
-2799.35 4816.55 l
-f*
-0.564706 g
-3668.15 4929.35 m
-3533.75 4966.55 l
-3629.75 5021.75 l
-3476.15 5031.35 l
-3518.15 5100.95 l
-3370.55 5080.55 l
-3353.75 5152.55 l
-3233.75 5106.95 l
-3158.15 5170.55 l
-3082.55 5106.95 l
-2962.55 5152.55 l
-2944.55 5080.55 l
-2795.75 5100.95 l
-2840.15 5031.35 l
-2686.55 5021.75 l
-2782.55 4966.55 l
-2646.95 4929.35 l
-2782.55 4894.55 l
-2686.55 4838.15 l
-2840.15 4829.75 l
-2795.75 4760.15 l
-2944.55 4779.35 l
-2962.55 4708.55 l
-3082.55 4752.95 l
-3158.15 4689.35 l
-3233.75 4752.95 l
-3353.75 4708.55 l
-3370.55 4779.35 l
-3518.15 4760.15 l
-3476.15 4829.75 l
-3629.75 4838.15 l
-3533.75 4894.55 l
-f*
-1 g
-3608.15 4989.35 m
-3473.75 5026.55 l
-3569.75 5081.75 l
-3416.15 5091.35 l
-3458.15 5160.95 l
-3310.55 5140.55 l
-3293.75 5212.55 l
-3173.75 5166.95 l
-3098.15 5230.55 l
-3022.55 5166.95 l
-2902.55 5212.55 l
-2884.55 5140.55 l
-2735.75 5160.95 l
-2780.15 5091.35 l
-2626.55 5081.75 l
-2722.55 5026.55 l
-2586.95 4989.35 l
-2722.55 4954.55 l
-2626.55 4898.15 l
-2780.15 4889.75 l
-2735.75 4820.15 l
-2884.55 4839.35 l
-2902.55 4768.55 l
-3022.55 4812.95 l
-3098.15 4749.35 l
-3173.75 4812.95 l
-3293.75 4768.55 l
-3310.55 4839.35 l
-3458.15 4820.15 l
-3416.15 4889.75 l
-3569.75 4898.15 l
-3473.75 4954.55 l
-f*
-0 g
-3608.15 4989.35 m
-3473.75 5026.55 l
-3569.75 5081.75 l
-3416.15 5091.35 l
-3458.15 5160.95 l
-3310.55 5140.55 l
-3293.75 5212.55 l
-3173.75 5166.95 l
-3098.15 5230.55 l
-3022.55 5166.95 l
-2902.55 5212.55 l
-2884.55 5140.55 l
-2735.75 5160.95 l
-2780.15 5091.35 l
-2626.55 5081.75 l
-2722.55 5026.55 l
-2586.95 4989.35 l
-2722.55 4954.55 l
-2626.55 4898.15 l
-2780.15 4889.75 l
-2735.75 4820.15 l
-2884.55 4839.35 l
-2902.55 4768.55 l
-3022.55 4812.95 l
-3098.15 4749.35 l
-3173.75 4812.95 l
-3293.75 4768.55 l
-3310.55 4839.35 l
-3458.15 4820.15 l
-3416.15 4889.75 l
-3569.75 4898.15 l
-3473.75 4954.55 l
-3608.15 4989.35 l
-3569.75 4989.35 l
-3447.35 4958.15 l
-3536.15 4906.55 l
-3398.15 4898.15 l
-3438.95 4832.15 l
-3303.35 4851.35 l
-3286.55 4781.75 l
-3171.35 4824.95 l
-3098.15 4762.55 l
-3024.95 4824.95 l
-2909.75 4781.75 l
-2891.75 4851.35 l
-2756.15 4832.15 l
-2796.95 4898.15 l
-2660.15 4906.55 l
-2748.95 4958.15 l
-2626.55 4989.35 l
-2747.75 5021.75 l
-2660.15 5074.55 l
-2796.95 5081.75 l
-2756.15 5148.95 l
-2891.75 5129.75 l
-2909.75 5198.15 l
-3024.95 5156.15 l
-3098.15 5218.55 l
-3171.35 5156.15 l
-3286.55 5198.15 l
-3303.35 5129.75 l
-3438.95 5148.95 l
-3398.15 5081.75 l
-3536.15 5074.55 l
-3447.35 5021.75 l
-3569.75 4989.35 l
-3608.15 4989.35 l
-f*
-0.2 i
-2920.08 5040.76 m
-2900.08 4966.52 l
-2897.52 4957.88 2894.48 4955.64 2884.08 4955 c
-2884.08 4951 l
-2934 4951 l
-2934 4955 l
-2924.72 4955.48 2922.48 4956.76 2922.48 4961.88 c
-2922.48 4963.64 2922.8 4965.4 2923.76 4969.08 c
-2923.92 4969.88 l
-2924.08 4970.68 l
-2943.76 5042.52 l
-2946.16 5050.84 2948.56 5053.08 2956.72 5054.04 c
-2956.72 5058 l
-2922.8 5058 l
-2873.2 4981.24 l
-2864.56 5058 l
-2829.2 5058 l
-2829.2 5054 l
-2839.28 5053.52 2840.72 5052.89 2840.72 5048.44 c
-2840.72 5046.2 2840.08 5043.32 2838.96 5039.16 c
-2821.52 4979.48 l
-2815.12 4958.68 2814 4956.92 2805.36 4955 c
-2805.36 4951 l
-2838.48 4951 l
-2838.48 4955 l
-2828.24 4956.28 2825.68 4958.2 2825.68 4964.76 c
-2825.68 4967.48 2826.48 4971.48 2828.72 4979.48 c
-2844.88 5038.52 l
-2855.6 4949.08 l
-2860.08 4949.08 l
-h
-2952.24 4951 m
-f*
-3021.44 4971.32 m
-3014.88 4962.52 3012.48 4959.76 3009.92 4959.76 c
-3008.64 4959.76 3008 4960.86 3008 4962.52 c
-3008 4966.52 3009.44 4973.08 3013.44 4986.2 c
-3024.8 5023.96 l
-3007.04 5022.84 l
-3004.16 5013.4 l
-3002.72 5021.56 2999.2 5025.08 2992.32 5025.08 c
-2972.64 5025.08 2949 4994.27 2949 4969.24 c
-2949 4957.08 2955.74 4948.92 2965.92 4948.92 c
-2975.68 4948.92 2983.04 4954.68 2992.16 4970.04 c
-2990.24 4963.48 2990 4961.56 2990 4959.32 c
-2990 4953.4 2994.76 4948.76 3000.64 4948.76 c
-3008.16 4948.76 3015.52 4955 3024.8 4968.92 c
-h
-2994.56 5018.2 m
-2998.08 5017.88 3000.56 5015 3000.56 5010.68 c
-3000.56 5001.08 2995.24 4983.32 2988.96 4972.28 c
-2984.64 4964.44 2979.84 4959.92 2975.52 4959.92 c
-2971.36 4959.92 2968 4963.75 2968 4968.92 c
-2968 4977.24 2973.42 4993.24 2980.16 5005.08 c
-2984.96 5013.56 2990.24 5018.52 2994.56 5018.2 c
-h
-3032 4951 m
-f*
-3066.56 5024.92 m
-3050.24 5022.36 3044 5021.4 3035.68 5020.44 c
-3035.68 5016 l
-3042.88 5015.69 3044.32 5015.07 3044.32 5012.12 c
-3044.32 5010.52 3043.04 5004.76 3040.8 4996.44 c
-3024.8 4934.36 l
-3021.76 4923.8 3020.48 4922.84 3012.8 4923 c
-3012.8 4918 l
-3052.64 4918 l
-3052.64 4923 l
-3044.64 4923.14 3042.24 4924.16 3042.24 4927.64 c
-3042.24 4929.88 3043.36 4934.68 3046.4 4945.88 c
-3047.52 4949.72 3047.52 4950.04 3048.16 4952.44 c
-3053.76 4949.56 3055.68 4948.92 3059.04 4948.92 c
-3080.8 4948.92 3103.36 4977.88 3103.36 5005.56 c
-3103.36 5017.4 3096.64 5025.08 3086.08 5025.08 c
-3076.96 5025.08 3069.92 5019.92 3060.48 5006.52 c
-h
-3077.12 5013.56 m
-3081.28 5013.24 3083.68 5009.56 3083.36 5004.44 c
-3082.72 4993.88 3077.6 4978.04 3071.84 4967.64 c
-3066.88 4959 3061.76 4953.92 3056.32 4953.92 c
-3052.8 4953.92 3050.08 4956.75 3050.08 4960.28 c
-3050.08 4963 3051.84 4969.56 3056.16 4984.12 c
-3059.68 4995.8 3061.12 4999.8 3063.52 5003.48 c
-3067.52 5009.72 3072.96 5013.88 3077.12 5013.56 c
-h
-3112 4951 m
-f*
-3147.56 5024.92 m
-3131.24 5022.36 3125 5021.4 3116.68 5020.44 c
-3116.68 5016 l
-3123.88 5015.69 3125.32 5015.07 3125.32 5012.12 c
-3125.32 5010.52 3124.04 5004.76 3121.8 4996.44 c
-3105.8 4934.36 l
-3102.76 4923.8 3101.48 4922.84 3093.8 4923 c
-3093.8 4918 l
-3133.64 4918 l
-3133.64 4923 l
-3125.64 4923.14 3123.24 4924.16 3123.24 4927.64 c
-3123.24 4929.88 3124.36 4934.68 3127.4 4945.88 c
-3128.52 4949.72 3128.52 4950.04 3129.16 4952.44 c
-3134.76 4949.56 3136.68 4948.92 3140.04 4948.92 c
-3161.8 4948.92 3184.36 4977.88 3184.36 5005.56 c
-3184.36 5017.4 3177.64 5025.08 3167.08 5025.08 c
-3157.96 5025.08 3150.92 5019.92 3141.48 5006.52 c
-h
-3158.12 5013.56 m
-3162.28 5013.24 3164.68 5009.56 3164.36 5004.44 c
-3163.72 4993.88 3158.6 4978.04 3152.84 4967.64 c
-3147.88 4959 3142.76 4953.92 3137.32 4953.92 c
-3133.8 4953.92 3131.08 4956.75 3131.08 4960.28 c
-3131.08 4963 3132.84 4969.56 3137.16 4984.12 c
-3140.68 4995.8 3142.12 4999.8 3144.52 5003.48 c
-3148.52 5009.72 3153.96 5013.88 3158.12 5013.56 c
-h
-3193 4951 m
-f*
-3226.56 4973.56 m
-3224.32 4970.36 l
-3220.16 4964.12 3216.48 4960.56 3214.08 4960.56 c
-3212.8 4960.56 3212 4961.77 3212 4963.16 c
-3212 4964.6 3212.62 4968.76 3213.12 4971.48 c
-3227.68 5024.92 l
-3219.22 5023 3208.26 5021.4 3196.04 5020.44 c
-3196.04 5016 l
-3197.44 5016 l
-3202.24 5016 3205.48 5014.44 3205.48 5011.48 c
-3205.48 5010.2 3204.71 5007.8 3203.68 5005.08 c
-3194.4 4970.68 l
-3193.12 4966.04 3193 4961.88 3193 4959.64 c
-3193 4953.56 3197.2 4949.56 3203.36 4949.56 c
-3212.96 4949.56 3218.88 4954.36 3230.08 4971.32 c
-h
-3222.88 5060.4 m
-3217.44 5060.4 3213 5055.46 3213 5050.04 c
-3213 5043.8 3217.26 5039.4 3223.04 5039.4 c
-3229.12 5039.4 3234 5043.86 3234 5049.56 c
-3234 5055.48 3229 5060.4 3222.88 5060.4 c
-h
-3236.48 4951 m
-f*
-3311.36 4972.6 m
-3304.96 4962.68 3302.88 4960.56 3300.16 4960.56 c
-3298.88 4960.56 3298 4961.63 3298 4963.16 c
-3298 4964.76 3298.94 4968.12 3301.92 4977.08 c
-3307.68 4994.52 l
-3310.24 5002.04 3312 5009.08 3312 5012.92 c
-3312 5020.76 3307.78 5025.08 3300.16 5025.08 c
-3294.24 5025.08 3288.48 5022.62 3284.16 5018.36 c
-3278.24 5012.76 3275.2 5008.92 3264.48 4993.08 c
-3274.72 5024.76 l
-3264.48 5022.52 3251.68 5020.92 3242.72 5020.6 c
-3242.72 5015.8 l
-3249.44 5015.65 3251.36 5014.92 3251.36 5012.12 c
-3251.36 5010.2 3249.12 5001.72 3244 4983.64 c
-3240.32 4970.68 3239.2 4966.52 3235.04 4951 c
-3254.4 4951 l
-3261.92 4978.68 3267.68 4992.6 3277.6 5005.56 c
-3280.8 5009.88 3285.76 5013.08 3288.64 5013.08 c
-3290.72 5013.08 3293 5011.63 3293 5010.04 c
-3293 5009.56 3292.54 5008.28 3291.84 5006.68 c
-3283.04 4980.12 l
-3280.48 4972.44 3279 4963.32 3279 4959.16 c
-3279 4953.08 3282.84 4949.56 3289.44 4949.56 c
-3299.04 4949.56 3305.6 4955 3314.88 4970.52 c
-h
-3324.96 4951 m
-f*
-3402.48 5020 m
-3384.72 5020 l
-3379.28 5023.58 3374.48 5025.08 3367.12 5025.08 c
-3347.44 5025.08 3331 5012.05 3331 4995.8 c
-3331 4987.64 3335.35 4981.88 3344.4 4978.2 c
-3331.28 4970.84 3329 4968.6 3329 4962.68 c
-3329 4957.56 3331.89 4954.52 3338.96 4952.12 c
-3329.04 4949.72 3325.84 4948.44 3322 4945.4 c
-3319.44 4943.16 3318 4939.32 3318 4935.48 c
-3318 4925.08 3329.56 4919 3347.76 4919 c
-3370.32 4919 3386 4928.72 3386 4942.52 c
-3386 4952.28 3379.6 4957.56 3362.16 4962.52 c
-3353.68 4964.92 l
-3348.56 4966.36 3345 4968.6 3345 4971 c
-3345 4973.56 3347.68 4976.28 3350 4976.28 c
-3350.8 4976.28 3351.92 4976.24 3353.2 4976.12 c
-3354.96 4975.64 3356.24 4975 3358.16 4975 c
-3365.2 4975 3372.4 4977.09 3378.48 4980.92 c
-3387.76 4986.2 3393 4994.36 3393 5003.96 c
-3393 5006.64 3392.59 5008.32 3391.76 5011 c
-3402.48 5011 l
-h
-3344.4 4950.04 m
-3346.32 4949.88 3358.48 4945.72 3362 4944.12 c
-3366.48 4941.88 3369 4939.16 3369 4935 c
-3369 4927.96 3361.8 4924 3349.36 4924 c
-3338.96 4924 3332 4929.1 3332 4936.44 c
-3332 4939.48 3333.32 4942.2 3336.24 4945.24 c
-3338.32 4947.32 3343.12 4950.2 3344.4 4950.04 c
-h
-3366.8 5020.08 m
-3370.96 5020.08 3374 5016.19 3374 5010.52 c
-3374 5005.08 3372.08 4997.4 3369.36 4991.48 c
-3366 4984.12 3361.84 4980 3356.88 4980 c
-3352.56 4980 3350 4983.52 3350 4989.88 c
-3350 4996.28 3352.79 5006.04 3356.24 5012.12 c
-3359.28 5017.4 3362.64 5020.08 3366.8 5020.08 c
-h
-3406 4951 m
-f*
-1 i
-1 g
-1515.35 4526.15 m
-1596.95 4526.15 l
-1596.95 4374.95 l
-1763.75 4374.95 l
-1763.75 4526.15 l
-1845.35 4526.15 l
-1680.95 4679.75 l
-f*
-0 g
-1515.35 4526.15 m
-1596.95 4526.15 l
-1596.95 4374.95 l
-1763.75 4374.95 l
-1763.75 4526.15 l
-1845.35 4526.15 l
-1680.95 4679.75 l
-1515.35 4526.15 l
-1539.35 4535.75 l
-1680.95 4666.55 l
-1820.15 4535.75 l
-1754.15 4535.75 l
-1754.15 4384.55 l
-1607.75 4384.55 l
-1607.75 4535.75 l
-1539.35 4535.75 l
-1515.35 4526.15 l
-f*
-0.2 i
-1255.88 4259 m
-1255.88 4254 l
-1268.3 4253.29 1272 4250.45 1272 4241.4 c
-1272 4154.28 l
-1272 4145.1 1269.25 4142.94 1255.88 4141.5 c
-1255.88 4137 l
-1313.84 4137 l
-1344.26 4137 1364 4150.5 1364 4170.84 c
-1364 4179.12 1360.73 4186.32 1354.7 4191.9 c
-1348.4 4197.48 1342.28 4200 1329.68 4202.7 c
-1350.56 4208.82 1358 4216.2 1358 4229.88 c
-1358 4248.42 1341.55 4259 1311.5 4259 c
-h
-1301 4198.74 m
-1305.92 4198.74 l
-1324.46 4198.74 1333 4189.2 1333 4169.22 c
-1333 4151.76 1325.77 4143 1311.5 4143 c
-1303.58 4143 1301 4145.99 1301 4153.74 c
-h
-1301 4244.46 m
-1301 4250.94 1303.39 4254 1310.24 4254 c
-1322.84 4254 1329 4246.03 1329 4228.62 c
-1329 4209.72 1323.08 4204.68 1301 4204.14 c
-h
-1373.06 4137 m
-f*
-1458.14 4148.52 m
-1456.34 4146.72 l
-1455.8 4146.18 1455.26 4146 1454.36 4146 c
-1451.84 4146 1451 4147.44 1451 4150.5 c
-1451 4197.48 l
-1451 4212.78 1437.16 4222.16 1414.94 4222.16 c
-1394.6 4222.16 1380.92 4212.97 1380.92 4199.46 c
-1380.92 4191.9 1385.24 4187.58 1392.62 4187.58 c
-1399.82 4187.58 1404.86 4191.9 1404.86 4198.02 c
-1404.86 4200.54 1403.96 4202.88 1401.62 4205.76 c
-1400 4207.56 1399.46 4208.64 1399.46 4209.72 c
-1399.46 4213.5 1404.32 4216.16 1410.8 4216.16 c
-1421.42 4216.16 1426 4211.37 1426 4200.54 c
-1426 4187.4 l
-1404.89 4180.92 1396.41 4177.68 1389.56 4173.18 c
-1381.46 4167.78 1378 4161.48 1378 4153.56 c
-1378 4142.58 1386.07 4134.48 1397.3 4134.48 c
-1407.74 4134.48 1416.02 4138.08 1425.92 4147.08 c
-1427.9 4137.9 1431.86 4134.48 1440.68 4134.48 c
-1448.42 4134.48 1454 4137.36 1460.84 4144.74 c
-h
-1426 4155 m
-1421.04 4149.42 1417.37 4147.26 1412.96 4147.26 c
-1407.56 4147.26 1404 4152.12 1404 4159.32 c
-1404 4169.76 1411.57 4177.14 1426 4181.1 c
-h
-1463 4137 m
-f*
-1524.22 4195.68 m
-1524.22 4221.8 l
-1520.24 4221.8 l
-1519.16 4219.08 1518.08 4218.2 1515.74 4218.2 c
-1514.66 4218.2 1513.04 4218.55 1510.16 4219.44 c
-1504.4 4221.42 1500.26 4222.16 1496.12 4222.16 c
-1479.74 4222.16 1468 4210.99 1468 4195.86 c
-1468 4183.98 1475.34 4175.7 1493.42 4167.96 c
-1505.84 4162.56 1511 4158.06 1511 4152.3 c
-1511 4145.28 1505.48 4140.48 1497.2 4140.48 c
-1484.6 4140.48 1476.32 4148.62 1472.54 4164.36 c
-1467.5 4164.36 l
-1467.5 4134.66 l
-1472 4134.66 l
-1473.98 4138.44 1475.06 4139.7 1476.68 4139.7 c
-1477.58 4139.7 1479.02 4139.34 1480.82 4138.62 c
-1486.04 4136.46 1495.22 4134.48 1500.26 4134.48 c
-1516.64 4134.48 1528 4145.64 1528 4161.84 c
-1528 4174.62 1521.15 4182.54 1503.14 4189.92 c
-1490.9 4195.14 1486 4199.64 1486 4205.76 c
-1486 4211.7 1490.98 4216.16 1497.74 4216.16 c
-1502.6 4216.16 1507.28 4214.19 1511.24 4210.44 c
-1515.02 4206.84 1517 4203.42 1519.7 4195.68 c
-h
-1533.02 4137 m
-f*
-1604.36 4159.5 m
-1596.98 4150.68 1591.58 4147.48 1583.84 4147.48 c
-1577 4147.48 1571.6 4150.53 1568 4156.62 c
-1564.58 4162.36 1563.14 4168.45 1562.42 4181 c
-1607.78 4181 l
-1606.7 4195.99 1604 4204.3 1598.42 4211.34 c
-1592.66 4218.36 1584.2 4222.16 1574.12 4222.16 c
-1551.62 4222.16 1536.5 4204.33 1536.5 4178.04 c
-1536.5 4151.76 1551.26 4134.48 1573.58 4134.48 c
-1588.16 4134.48 1596.98 4140.06 1608.68 4156.98 c
-h
-1561.52 4188 m
-1562.06 4209.42 1565.3 4216.16 1574.12 4216.16 c
-1579.34 4216.16 1582.58 4213.42 1584.02 4208.1 c
-1584.92 4204.68 1585.28 4199.64 1585.64 4190.46 c
-1585.64 4188 l
-h
-1611.92 4137 m
-f*
-1658 4137 m
-f*
-1761.94 4259 m
-1659.88 4259 l
-1659.88 4254 l
-1672.3 4253.29 1676 4250.63 1676 4241.4 c
-1676 4154.28 l
-1676 4144.92 1673.44 4142.94 1659.88 4141.5 c
-1659.88 4137 l
-1724.68 4137 l
-1724.68 4142 l
-1708.12 4142.69 1705 4144.77 1705 4154.28 c
-1705 4196.22 l
-1723.28 4195.86 1729.91 4189.2 1732.42 4168.32 c
-1736.92 4168.32 l
-1736.92 4229.16 l
-1732.42 4229.16 l
-1729.19 4208.64 1722.92 4202.34 1705 4202.34 c
-1705 4244.1 l
-1705 4250.76 1707.32 4253 1716.4 4253 c
-1733.14 4253 1743.58 4249.8 1749.16 4243.2 c
-1753.12 4238.7 1755.1 4233.84 1757.62 4222.5 c
-1761.94 4222.5 l
-h
-1766.98 4137 m
-f*
-1806.28 4220 m
-1772.22 4220 l
-1772.22 4215.66 l
-1779.96 4214.58 1782 4212.24 1782 4205.04 c
-1782 4152.12 l
-1782 4144.74 1780.19 4142.76 1772.22 4141.32 c
-1772.22 4137 l
-1820.1 4137 l
-1820.1 4141.32 l
-1809.12 4142.04 1807 4144.38 1807 4155.54 c
-1807 4189.56 l
-1807 4198.92 1812.02 4206.66 1817.94 4206.66 c
-1819.38 4206.66 1821 4205.4 1822.98 4202.52 c
-1826.4 4197.66 1829.1 4196.04 1833.78 4196.04 c
-1840.44 4196.04 1845.12 4201.08 1845.12 4207.92 c
-1845.12 4216.2 1839 4222.16 1830.54 4222.16 c
-1821.55 4222.16 1814.73 4217.47 1806.28 4205.22 c
-h
-1846.92 4137 m
-f*
-1933.14 4148.52 m
-1931.34 4146.72 l
-1930.8 4146.18 1930.26 4146 1929.36 4146 c
-1926.84 4146 1926 4147.44 1926 4150.5 c
-1926 4197.48 l
-1926 4212.78 1912.16 4222.16 1889.94 4222.16 c
-1869.6 4222.16 1855.92 4212.97 1855.92 4199.46 c
-1855.92 4191.9 1860.24 4187.58 1867.62 4187.58 c
-1874.82 4187.58 1879.86 4191.9 1879.86 4198.02 c
-1879.86 4200.54 1878.96 4202.88 1876.62 4205.76 c
-1875 4207.56 1874.46 4208.64 1874.46 4209.72 c
-1874.46 4213.5 1879.32 4216.16 1885.8 4216.16 c
-1896.42 4216.16 1901 4211.37 1901 4200.54 c
-1901 4187.4 l
-1879.89 4180.92 1871.41 4177.68 1864.56 4173.18 c
-1856.46 4167.78 1853 4161.48 1853 4153.56 c
-1853 4142.58 1861.07 4134.48 1872.3 4134.48 c
-1882.74 4134.48 1891.02 4138.08 1900.92 4147.08 c
-1902.9 4137.9 1906.86 4134.48 1915.68 4134.48 c
-1923.42 4134.48 1929 4137.36 1935.84 4144.74 c
-h
-1901 4155 m
-1896.04 4149.42 1892.37 4147.26 1887.96 4147.26 c
-1882.56 4147.26 1879 4152.12 1879 4159.32 c
-1879 4169.76 1886.57 4177.14 1901 4181.1 c
-h
-1938 4137 m
-f*
-1975.46 4220 m
-1940.73 4220 l
-1940.73 4215.66 l
-1948.65 4214.58 1951 4212.42 1951 4205.04 c
-1951 4152.12 l
-1951 4144.74 1948.95 4142.76 1940.73 4141.32 c
-1940.73 4137 l
-1983.93 4137 l
-1983.93 4141.32 l
-1977.63 4142.22 1976 4144.74 1976 4151.58 c
-1976 4199.64 l
-1976 4200.54 1978.51 4203.78 1980.51 4205.76 c
-1984.29 4208.64 1987.53 4210.16 1990.77 4210.16 c
-1997.79 4210.16 2001 4206 2001 4195.14 c
-2001 4151.58 l
-2001 4144.2 1998.9 4141.86 1991.85 4141.32 c
-1991.85 4137 l
-2033.97 4137 l
-2033.97 4141.32 l
-2027.67 4142.04 2026 4144.74 2026 4151.58 c
-2026 4199.64 l
-2026 4200.54 2028.43 4203.6 2030.37 4205.58 c
-2034.33 4208.64 2037.57 4210.16 2040.81 4210.16 c
-2047.65 4210.16 2050 4205.82 2050 4195.14 c
-2050 4151.58 l
-2050 4144.02 2048.1 4141.86 2041.53 4141.32 c
-2041.53 4137 l
-2084.37 4137 l
-2084.37 4141 l
-2077.35 4141.37 2075 4143.6 2075 4151.58 c
-2075 4196.76 l
-2075 4212.24 2065.6 4222.16 2051.07 4222.16 c
-2040.81 4222.16 2033.97 4218.01 2024.61 4206.48 c
-2019.21 4217.82 2012.91 4222.16 2001.57 4222.16 c
-1990.2 4222.16 1982.21 4217.29 1975.46 4206.48 c
-h
-2087.94 4137 m
-f*
-2160.36 4159.5 m
-2152.98 4150.68 2147.58 4147.48 2139.84 4147.48 c
-2133 4147.48 2127.6 4150.53 2124 4156.62 c
-2120.58 4162.36 2119.14 4168.45 2118.42 4181 c
-2163.78 4181 l
-2162.7 4195.99 2160 4204.3 2154.42 4211.34 c
-2148.66 4218.36 2140.2 4222.16 2130.12 4222.16 c
-2107.62 4222.16 2092.5 4204.33 2092.5 4178.04 c
-2092.5 4151.76 2107.26 4134.48 2129.58 4134.48 c
-2144.16 4134.48 2152.98 4140.06 2164.68 4156.98 c
-h
-2117.52 4188 m
-2118.06 4209.42 2121.3 4216.16 2130.12 4216.16 c
-2135.34 4216.16 2138.58 4213.42 2140.02 4208.1 c
-2140.92 4204.68 2141.28 4199.64 2141.64 4190.46 c
-2141.64 4188 l
-h
-2167.92 4137 m
-f*
-1 i
-1252.55 4102.55 914.4 15.5999 re
-f
-0.2 i
-3964.26 4176.36 m
-3953.64 4165.2 3947.88 4160.88 3939.06 4157.46 c
-3933.84 4155.3 3927.9 4154.58 3922.86 4154.58 c
-3910.98 4154.58 3899.64 4160.74 3894.42 4169.88 c
-3889.2 4179.42 3887 4192.2 3887 4210.38 c
-3887 4247.64 3898.23 4267.7 3919.8 4267.7 c
-3928.26 4267.7 3936 4264.38 3943.74 4257.36 c
-3951.48 4250.52 3955.62 4244.4 3961.92 4230.72 c
-3966.42 4230.72 l
-3966.42 4273.16 l
-3961.56 4273.16 l
-3958.86 4266.43 3957.06 4264.56 3953.64 4264.56 c
-3951.84 4264.56 3949.5 4265.28 3945.36 4267.08 c
-3934.92 4271.4 3926.1 4273.7 3917.46 4273.7 c
-3881.64 4273.7 3855 4245.84 3855 4208.76 c
-3855 4171.68 3881.21 4145.58 3918.54 4145.58 c
-3939.24 4145.58 3951.48 4151.88 3969.66 4171.86 c
-h
-3975.96 4149 m
-f*
-4039.18 4146.66 m
-4046.78 4149.36 4051.02 4150.08 4062.5 4151.34 c
-4073.66 4152.6 l
-4073.66 4157 l
-4065.74 4157.35 4064 4159.63 4064 4167.18 c
-4064 4232 l
-4027.4 4232 l
-4027.4 4227.66 l
-4036.4 4226.94 4039 4224.78 4039 4217.04 c
-4039 4166.1 l
-4032.88 4160.16 4029.18 4158.48 4023.8 4158.48 c
-4016.42 4158.48 4014 4162 4014 4170.96 c
-4014 4232 l
-3979.88 4232 l
-3979.88 4227.66 l
-3987.26 4226.22 3989 4224.6 3989 4217.04 c
-3989 4171.68 l
-3989 4155.84 3997.89 4146.48 4012.64 4146.48 c
-4022.16 4146.48 4028.56 4149.36 4039.18 4158.36 c
-h
-4077.08 4149 m
-f*
-4115.28 4232 m
-4081.22 4232 l
-4081.22 4227.66 l
-4088.96 4226.58 4091 4224.24 4091 4217.04 c
-4091 4164.12 l
-4091 4156.74 4089.19 4154.76 4081.22 4153.32 c
-4081.22 4149 l
-4129.1 4149 l
-4129.1 4153.32 l
-4118.12 4154.04 4116 4156.38 4116 4167.54 c
-4116 4201.56 l
-4116 4210.92 4121.02 4218.66 4126.94 4218.66 c
-4128.38 4218.66 4130 4217.4 4131.98 4214.52 c
-4135.4 4209.66 4138.1 4208.04 4142.78 4208.04 c
-4149.44 4208.04 4154.12 4213.08 4154.12 4219.92 c
-4154.12 4228.2 4148 4234.16 4139.54 4234.16 c
-4130.55 4234.16 4123.73 4229.47 4115.28 4217.22 c
-h
-4155.92 4149 m
-f*
-4196.28 4232 m
-4162.22 4232 l
-4162.22 4227.66 l
-4169.96 4226.58 4172 4224.24 4172 4217.04 c
-4172 4164.12 l
-4172 4156.74 4170.19 4154.76 4162.22 4153.32 c
-4162.22 4149 l
-4210.1 4149 l
-4210.1 4153.32 l
-4199.12 4154.04 4197 4156.38 4197 4167.54 c
-4197 4201.56 l
-4197 4210.92 4202.02 4218.66 4207.94 4218.66 c
-4209.38 4218.66 4211 4217.4 4212.98 4214.52 c
-4216.4 4209.66 4219.1 4208.04 4223.78 4208.04 c
-4230.44 4208.04 4235.12 4213.08 4235.12 4219.92 c
-4235.12 4228.2 4229 4234.16 4220.54 4234.16 c
-4211.55 4234.16 4204.73 4229.47 4196.28 4217.22 c
-h
-4236.92 4149 m
-f*
-4308.36 4171.5 m
-4300.98 4162.68 4295.58 4159.48 4287.84 4159.48 c
-4281 4159.48 4275.6 4162.53 4272 4168.62 c
-4268.58 4174.36 4267.14 4180.45 4266.42 4193 c
-4311.78 4193 l
-4310.7 4207.99 4308 4216.3 4302.42 4223.34 c
-4296.66 4230.36 4288.2 4234.16 4278.12 4234.16 c
-4255.62 4234.16 4240.5 4216.33 4240.5 4190.04 c
-4240.5 4163.76 4255.26 4146.48 4277.58 4146.48 c
-4292.16 4146.48 4300.98 4152.06 4312.68 4168.98 c
-h
-4265.52 4200 m
-4266.06 4221.42 4269.3 4228.16 4278.12 4228.16 c
-4283.34 4228.16 4286.58 4225.42 4288.02 4220.1 c
-4288.92 4216.68 4289.28 4211.64 4289.64 4202.46 c
-4289.64 4200 l
-h
-4315.92 4149 m
-f*
-4353.82 4232 m
-4319.78 4232 l
-4319.78 4227.66 l
-4327.7 4226.4 4329 4224.6 4329 4217.04 c
-4329 4164.12 l
-4329 4156.56 4327.61 4154.94 4319.78 4153.32 c
-4319.78 4149 l
-4363.16 4149 l
-4363.16 4153.32 l
-4356.5 4154.22 4354 4156.92 4354 4163.58 c
-4354 4211.64 l
-4354 4212.36 4355.4 4214.16 4357.4 4215.96 c
-4361.36 4219.92 4365.68 4222.16 4370 4222.16 c
-4376.12 4222.16 4379 4217.27 4379 4207.14 c
-4379 4163.58 l
-4379 4156.92 4376.71 4154.04 4370.72 4153.32 c
-4370.72 4149 l
-4413.02 4149 l
-4413.02 4153.32 l
-4406 4153.86 4404 4156.02 4404 4163.58 c
-4404 4208.76 l
-4404 4224.24 4394.54 4234.16 4379.9 4234.16 c
-4368.96 4234.16 4360.57 4229.11 4353.82 4218.48 c
-h
-4416.08 4149 m
-f*
-4470.9 4232 m
-4454 4232 l
-4454 4262.4 l
-4449.48 4262.4 l
-4438.5 4246.92 4431.3 4238.82 4419.6 4228.92 c
-4419.6 4224 l
-4429 4224 l
-4429 4165.74 l
-4429 4154.04 4436.73 4146.84 4449.12 4146.84 c
-4461.18 4146.84 4468.38 4152.24 4475.76 4167 c
-4471.26 4168.98 l
-4467.66 4162.14 4464.78 4159.84 4461 4159.84 c
-4455.96 4159.84 4454 4162.83 4454 4169.88 c
-4454 4224 l
-4470.9 4224 l
-h
-4475.94 4149 m
-f*
-4521 4149 m
-f*
-4625.94 4271 m
-4523.88 4271 l
-4523.88 4266 l
-4536.3 4265.29 4540 4262.63 4540 4253.4 c
-4540 4166.28 l
-4540 4156.92 4537.44 4154.94 4523.88 4153.5 c
-4523.88 4149 l
-4588.68 4149 l
-4588.68 4154 l
-4572.12 4154.69 4569 4156.77 4569 4166.28 c
-4569 4208.22 l
-4587.28 4207.86 4593.91 4201.2 4596.42 4180.32 c
-4600.92 4180.32 l
-4600.92 4241.16 l
-4596.42 4241.16 l
-4593.19 4220.64 4586.92 4214.34 4569 4214.34 c
-4569 4256.1 l
-4569 4262.76 4571.32 4265 4580.4 4265 c
-4597.14 4265 4607.58 4261.8 4613.16 4255.2 c
-4617.12 4250.7 4619.1 4245.84 4621.62 4234.5 c
-4625.94 4234.5 l
-h
-4630.98 4149 m
-f*
-4670.28 4232 m
-4636.22 4232 l
-4636.22 4227.66 l
-4643.96 4226.58 4646 4224.24 4646 4217.04 c
-4646 4164.12 l
-4646 4156.74 4644.19 4154.76 4636.22 4153.32 c
-4636.22 4149 l
-4684.1 4149 l
-4684.1 4153.32 l
-4673.12 4154.04 4671 4156.38 4671 4167.54 c
-4671 4201.56 l
-4671 4210.92 4676.02 4218.66 4681.94 4218.66 c
-4683.38 4218.66 4685 4217.4 4686.98 4214.52 c
-4690.4 4209.66 4693.1 4208.04 4697.78 4208.04 c
-4704.44 4208.04 4709.12 4213.08 4709.12 4219.92 c
-4709.12 4228.2 4703 4234.16 4694.54 4234.16 c
-4685.55 4234.16 4678.73 4229.47 4670.28 4217.22 c
-h
-4710.92 4149 m
-f*
-4796.14 4160.52 m
-4794.34 4158.72 l
-4793.8 4158.18 4793.26 4158 4792.36 4158 c
-4789.84 4158 4789 4159.44 4789 4162.5 c
-4789 4209.48 l
-4789 4224.78 4775.16 4234.16 4752.94 4234.16 c
-4732.6 4234.16 4718.92 4224.97 4718.92 4211.46 c
-4718.92 4203.9 4723.24 4199.58 4730.62 4199.58 c
-4737.82 4199.58 4742.86 4203.9 4742.86 4210.02 c
-4742.86 4212.54 4741.96 4214.88 4739.62 4217.76 c
-4738 4219.56 4737.46 4220.64 4737.46 4221.72 c
-4737.46 4225.5 4742.32 4228.16 4748.8 4228.16 c
-4759.42 4228.16 4764 4223.37 4764 4212.54 c
-4764 4199.4 l
-4742.89 4192.92 4734.41 4189.68 4727.56 4185.18 c
-4719.46 4179.78 4716 4173.48 4716 4165.56 c
-4716 4154.58 4724.07 4146.48 4735.3 4146.48 c
-4745.74 4146.48 4754.02 4150.08 4763.92 4159.08 c
-4765.9 4149.9 4769.86 4146.48 4778.68 4146.48 c
-4786.42 4146.48 4792 4149.36 4798.84 4156.74 c
-h
-4764 4167 m
-4759.04 4161.42 4755.37 4159.26 4750.96 4159.26 c
-4745.56 4159.26 4742 4164.12 4742 4171.32 c
-4742 4181.76 4749.57 4189.14 4764 4193.1 c
-h
-4801 4149 m
-f*
-4838.46 4232 m
-4803.73 4232 l
-4803.73 4227.66 l
-4811.65 4226.58 4814 4224.42 4814 4217.04 c
-4814 4164.12 l
-4814 4156.74 4811.95 4154.76 4803.73 4153.32 c
-4803.73 4149 l
-4846.93 4149 l
-4846.93 4153.32 l
-4840.63 4154.22 4839 4156.74 4839 4163.58 c
-4839 4211.64 l
-4839 4212.54 4841.51 4215.78 4843.51 4217.76 c
-4847.29 4220.64 4850.53 4222.16 4853.77 4222.16 c
-4860.79 4222.16 4864 4218 4864 4207.14 c
-4864 4163.58 l
-4864 4156.2 4861.9 4153.86 4854.85 4153.32 c
-4854.85 4149 l
-4896.97 4149 l
-4896.97 4153.32 l
-4890.67 4154.04 4889 4156.74 4889 4163.58 c
-4889 4211.64 l
-4889 4212.54 4891.43 4215.6 4893.37 4217.58 c
-4897.33 4220.64 4900.57 4222.16 4903.81 4222.16 c
-4910.65 4222.16 4913 4217.82 4913 4207.14 c
-4913 4163.58 l
-4913 4156.02 4911.1 4153.86 4904.53 4153.32 c
-4904.53 4149 l
-4947.37 4149 l
-4947.37 4153 l
-4940.35 4153.37 4938 4155.6 4938 4163.58 c
-4938 4208.76 l
-4938 4224.24 4928.6 4234.16 4914.07 4234.16 c
-4903.81 4234.16 4896.97 4230.01 4887.61 4218.48 c
-4882.21 4229.82 4875.91 4234.16 4864.57 4234.16 c
-4853.2 4234.16 4845.21 4229.29 4838.46 4218.48 c
-h
-4950.94 4149 m
-f*
-5023.36 4171.5 m
-5015.98 4162.68 5010.58 4159.48 5002.84 4159.48 c
-4996 4159.48 4990.6 4162.53 4987 4168.62 c
-4983.58 4174.36 4982.14 4180.45 4981.42 4193 c
-5026.78 4193 l
-5025.7 4207.99 5023 4216.3 5017.42 4223.34 c
-5011.66 4230.36 5003.2 4234.16 4993.12 4234.16 c
-4970.62 4234.16 4955.5 4216.33 4955.5 4190.04 c
-4955.5 4163.76 4970.26 4146.48 4992.58 4146.48 c
-5007.16 4146.48 5015.98 4152.06 5027.68 4168.98 c
-h
-4980.52 4200 m
-4981.06 4221.42 4984.3 4228.16 4993.12 4228.16 c
-4998.34 4228.16 5001.58 4225.42 5003.02 4220.1 c
-5003.92 4216.68 5004.28 4211.64 5004.64 4202.46 c
-5004.64 4200 l
-h
-5030.92 4149 m
-f*
-1 i
-3845.75 4114.55 1184.4 15.5999 re
-f
-1 g
-4451.75 4341.35 m
-4618.55 4492.55 l
-4535.75 4492.55 l
-4535.75 4646.15 l
-4370.15 4646.15 l
-4370.15 4492.55 l
-4288.55 4492.55 l
-f*
-0 g
-4451.75 4341.35 m
-4618.55 4492.55 l
-4535.75 4492.55 l
-4535.75 4646.15 l
-4370.15 4646.15 l
-4370.15 4492.55 l
-4288.55 4492.55 l
-4451.75 4341.35 l
-4451.75 4354.55 l
-4313.75 4481.75 l
-4379.75 4481.75 l
-4379.75 4636.55 l
-4526.15 4636.55 l
-4526.15 4481.75 l
-4592.15 4481.75 l
-4451.75 4354.55 l
-4451.75 4341.35 l
-f*
-0.201248 i
-1299.33 5632 m
-1185.22 5632 l
-1185.22 5627 l
-1199.11 5626.2 1203 5623.18 1203 5612.72 c
-1203 5515.32 l
-1203 5504.85 1200.17 5502.64 1185.22 5501.03 c
-1185.22 5496 l
-1257.67 5496 l
-1257.67 5501 l
-1239.15 5501.81 1236 5504.23 1236 5515.32 c
-1236 5562.21 l
-1256.22 5561.81 1263.55 5554.36 1266.32 5531.02 c
-1271.35 5531.02 l
-1271.35 5599.04 l
-1266.32 5599.04 l
-1262.76 5576.1 1255.82 5569.05 1236 5569.05 c
-1236 5615.74 l
-1236 5623.19 1238.52 5625 1248.41 5625 c
-1267.13 5625 1278.8 5621.64 1285.04 5614.74 c
-1289.47 5609.71 1291.68 5604.27 1294.5 5591.59 c
-1299.33 5591.59 l
-h
-1304.96 5496 m
-f*
-1349.19 5589 m
-1310.84 5589 l
-1310.84 5583.95 l
-1319.49 5582.74 1322 5580.12 1322 5572.07 c
-1322 5512.9 l
-1322 5504.65 1319.93 5502.44 1310.84 5500.83 c
-1310.84 5496 l
-1364.37 5496 l
-1364.37 5500.83 l
-1352.09 5501.63 1350 5504.25 1350 5516.73 c
-1350 5554.76 l
-1350 5565.23 1355.49 5573.88 1361.95 5573.88 c
-1363.56 5573.88 1365.37 5572.47 1367.59 5569.25 c
-1371.41 5563.82 1374.43 5562.01 1379.66 5562.01 c
-1387.11 5562.01 1392.34 5567.64 1392.34 5575.29 c
-1392.34 5584.55 1385.5 5591.41 1376.04 5591.41 c
-1366.1 5591.41 1358.54 5586.12 1349.19 5572.27 c
-h
-1394.35 5496 m
-f*
-1489.19 5508.88 m
-1487.18 5506.87 l
-1486.57 5506.26 1485.97 5506.06 1484.96 5506.06 c
-1482.15 5506.06 1481 5507.67 1481 5511.09 c
-1481 5563.62 l
-1481 5580.73 1465.6 5591.42 1440.89 5591.42 c
-1418.15 5591.42 1402.85 5581.06 1402.85 5565.83 c
-1402.85 5557.38 1407.69 5552.55 1415.94 5552.55 c
-1423.99 5552.55 1429.62 5557.38 1429.62 5564.22 c
-1429.62 5567.04 1428.61 5569.66 1426 5572.88 c
-1424.19 5574.89 1423.58 5576.1 1423.58 5577.3 c
-1423.58 5581.53 1429.02 5584.42 1436.26 5584.42 c
-1448.14 5584.42 1453.86 5579.08 1453.86 5567.04 c
-1453.86 5552.35 l
-1429.91 5545.1 1420.29 5541.48 1412.51 5536.45 c
-1403.46 5530.41 1399 5523.37 1399 5514.52 c
-1399 5502.24 1408.27 5493.18 1421.17 5493.18 c
-1432.84 5493.18 1442.1 5497.21 1453.17 5507.27 c
-1455.38 5497.01 1459.81 5493.18 1469.67 5493.18 c
-1478.32 5493.18 1484.56 5496.4 1492.21 5504.65 c
-h
-1453 5516.13 m
-1447.55 5509.89 1443.52 5507.47 1438.68 5507.47 c
-1432.64 5507.47 1428 5512.91 1428 5520.96 c
-1428 5532.63 1436.61 5540.88 1453 5545.31 c
-h
-1494.62 5496 m
-f*
-1536.4 5589 m
-1497.7 5589 l
-1497.7 5583.95 l
-1506.55 5582.74 1509 5580.32 1509 5572.07 c
-1509 5512.9 l
-1509 5504.65 1506.74 5502.44 1497.7 5500.83 c
-1497.7 5496 l
-1546 5496 l
-1546 5500.83 l
-1538.95 5501.84 1537 5504.65 1537 5512.3 c
-1537 5566.03 l
-1537 5567.04 1539.87 5570.66 1542.18 5572.88 c
-1546.4 5576.1 1550.02 5578.42 1553.65 5578.42 c
-1561.5 5578.42 1565 5573.59 1565 5561 c
-1565 5512.3 l
-1565 5504.05 1562.68 5501.43 1554.85 5500.83 c
-1554.85 5496 l
-1601.95 5496 l
-1601.95 5500.83 l
-1594.9 5501.64 1593 5504.65 1593 5512.3 c
-1593 5566.03 l
-1593 5567.04 1595.73 5570.46 1597.92 5572.68 c
-1602.35 5576.1 1605.97 5578.42 1609.59 5578.42 c
-1617.24 5578.42 1620 5573.38 1620 5561 c
-1620 5512.3 l
-1620 5503.85 1617.85 5501.43 1610.4 5500.83 c
-1610.4 5496 l
-1658.3 5496 l
-1658.3 5501 l
-1650.45 5501.4 1648 5503.78 1648 5512.3 c
-1648 5562.81 l
-1648 5580.12 1637.43 5591.42 1621.07 5591.42 c
-1609.59 5591.42 1601.95 5586.73 1591.48 5573.68 c
-1585.44 5586.36 1578.4 5591.42 1565.72 5591.42 c
-1552.95 5591.42 1543.98 5585.91 1536.4 5573.68 c
-h
-1661.64 5496 m
-f*
-1739.9 5521.16 m
-1731.65 5511.29 1725.61 5507.18 1716.96 5507.18 c
-1709.31 5507.18 1703.27 5510.77 1699.25 5517.94 c
-1695.43 5524.54 1693.82 5531.56 1693.01 5546 c
-1743.73 5546 l
-1742.52 5562.36 1739.5 5571.43 1733.26 5579.12 c
-1726.82 5586.96 1717.36 5591.42 1706.09 5591.42 c
-1680.94 5591.42 1664.03 5571.4 1664.03 5541.88 c
-1664.03 5512.5 1680.53 5493.18 1705.49 5493.18 c
-1721.79 5493.18 1731.65 5499.42 1744.73 5518.34 c
-h
-1692 5553 m
-1692.61 5576.96 1696.23 5584.42 1706.09 5584.42 c
-1711.93 5584.42 1715.55 5581.38 1717.16 5575.49 c
-1718.17 5571.67 1718.57 5566.03 1718.97 5555.77 c
-1718.97 5553 l
-h
-1748.35 5496 m
-f*
-1845.16 5591.59 m
-1845.16 5635.22 l
-1839.37 5635.22 l
-1837.96 5629.82 1836.55 5628.42 1832.93 5628.42 c
-1831.12 5628.42 1828.7 5629.03 1824.47 5630.43 c
-1815.22 5633.86 1808.78 5635.02 1800.93 5635.02 c
-1773.56 5635.02 1757 5619.54 1757 5594.01 c
-1757 5588.98 1757.75 5584.75 1759.07 5580.73 c
-1763.29 5570.06 1774.16 5560.6 1791.27 5552.35 c
-1804.75 5545.91 l
-1822.46 5537.46 1827 5532.22 1827 5521.56 c
-1827 5507.67 1817.25 5499.18 1801.94 5499.18 c
-1790.26 5499.18 1780.6 5503.89 1772.96 5513.31 c
-1767.12 5520.75 1764.3 5527.6 1760.88 5541.88 c
-1755.04 5541.88 l
-1755.04 5492.18 l
-1760.88 5492.18 l
-1762.09 5497.41 1763.7 5499.02 1766.92 5499.02 c
-1768.53 5499.02 1770.74 5498.42 1775.17 5497.01 c
-1785.03 5493.59 1792.48 5492.18 1801.33 5492.18 c
-1831.12 5492.18 1851 5509.28 1851 5534.64 c
-1851 5549.73 1842.04 5564.83 1829.1 5571.27 c
-1799.52 5585.96 l
-1783.22 5594.01 1779 5598.84 1779 5608.7 c
-1779 5621.18 1787.37 5628.02 1800.93 5628.02 c
-1809.99 5628.02 1818.44 5624.47 1825.68 5617.55 c
-1832.53 5610.51 1835.75 5604.67 1839.77 5591.59 c
-h
-1859.89 5496 m
-f*
-1940.9 5521.16 m
-1932.65 5511.29 1926.61 5507.18 1917.96 5507.18 c
-1910.31 5507.18 1904.27 5510.77 1900.25 5517.94 c
-1896.43 5524.54 1894.82 5531.56 1894.01 5546 c
-1944.73 5546 l
-1943.52 5562.36 1940.5 5571.43 1934.26 5579.12 c
-1927.82 5586.96 1918.36 5591.42 1907.09 5591.42 c
-1881.94 5591.42 1865.03 5571.4 1865.03 5541.88 c
-1865.03 5512.5 1881.53 5493.18 1906.49 5493.18 c
-1922.79 5493.18 1932.65 5499.42 1945.73 5518.34 c
-h
-1893 5553 m
-1893.61 5576.96 1897.23 5584.42 1907.09 5584.42 c
-1912.93 5584.42 1916.55 5581.38 1918.16 5575.49 c
-1919.17 5571.67 1919.57 5566.03 1919.97 5555.77 c
-1919.97 5553 l
-h
-1949.35 5496 m
-f*
-2010.38 5589 m
-1991 5589 l
-1991 5622.79 l
-1986.43 5622.79 l
-1974.16 5605.48 1966.11 5596.42 1953.02 5585.35 c
-1953.02 5580 l
-1963 5580 l
-1963 5514.72 l
-1963 5501.64 1971.84 5493.59 1986.03 5493.59 c
-1999.51 5493.59 2007.56 5499.62 2015.81 5516.12 c
-2010.78 5518.34 l
-2006.76 5510.69 2003.54 5507.59 1999.31 5507.59 c
-1993.68 5507.59 1991 5511.09 1991 5519.34 c
-1991 5580 l
-2010.38 5580 l
-h
-2016.02 5496 m
-f*
-1 i
-3845.75 5319.35 m
-3800.15 5330.15 3752.15 5336.15 3702.95 5336.15 c
-3534.95 5336.15 3387.35 5266.55 3341.75 5164.55 c
-S
-3790.55 5280.95 m
-3825.35 5319.35 l
-3821.75 5370.95 l
-3951.35 5276.15 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/fsexample.eps b/ast-5.3-1/sun210_figures/fsexample.eps
deleted file mode 100644
index d9d5632..0000000
--- a/ast-5.3-1/sun210_figures/fsexample.eps
+++ /dev/null
@@ -1,1786 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 114 303 503 613
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/11 14:23:38
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5024.15 5691.35 m
-5024.15 5900.15 4854.95 6070.55 4644.95 6070.55 c
-1581.35 6070.55 l
-1372.55 6070.55 1202.15 5900.15 1202.15 5691.35 c
-1202.15 3418.55 l
-1202.15 3208.55 1372.55 3039.35 1581.35 3039.35 c
-4644.95 3039.35 l
-4854.95 3039.35 5024.15 3208.55 5024.15 3418.55 c
-f*
-1 g
-4959.35 5747.75 m
-4959.35 5955.35 4790.15 6124.55 4582.55 6124.55 c
-1526.15 6124.55 l
-1317.35 6124.55 1148.15 5955.35 1148.15 5747.75 c
-1148.15 3480.95 l
-1148.15 3273.35 1317.35 3104.15 1526.15 3104.15 c
-4581.35 3104.15 l
-4790.15 3104.15 4959.35 3273.35 4959.35 3480.95 c
-f*
-8 w
-1 J
-1 j
-0 g
-4959.35 5747.75 m
-4959.35 5955.35 4790.15 6124.55 4582.55 6124.55 c
-1526.15 6124.55 l
-1317.35 6124.55 1148.15 5955.35 1148.15 5747.75 c
-1148.15 3480.95 l
-1148.15 3273.35 1317.35 3104.15 1526.15 3104.15 c
-4581.35 3104.15 l
-4790.15 3104.15 4959.35 3273.35 4959.35 3480.95 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1563.35 5256.95 l
-1451.75 5256.95 1360.55 5165.75 1360.55 5055.35 c
-1360.55 4917.35 l
-1360.55 4806.95 1451.75 4715.75 1563.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1509.35 5306.15 l
-1400.15 5306.15 1311.35 5218.55 1311.35 5111.75 c
-1311.35 4979.75 l
-1311.35 4872.95 1400.15 4785.35 1509.35 4785.35 c
-1995.35 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-f*
-16 w
-0 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1509.35 5306.15 l
-1400.15 5306.15 1311.35 5218.55 1311.35 5111.75 c
-1311.35 4979.75 l
-1311.35 4872.95 1400.15 4785.35 1509.35 4785.35 c
-1995.35 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-h
-S
-0.201248 i
-1539.33 5152 m
-1425.22 5152 l
-1425.22 5147 l
-1439.11 5146.2 1443 5143.18 1443 5132.72 c
-1443 5035.32 l
-1443 5024.85 1440.17 5022.64 1425.22 5021.03 c
-1425.22 5016 l
-1497.67 5016 l
-1497.67 5021 l
-1479.15 5021.81 1476 5024.23 1476 5035.32 c
-1476 5082.21 l
-1496.22 5081.81 1503.55 5074.36 1506.32 5051.02 c
-1511.35 5051.02 l
-1511.35 5119.04 l
-1506.32 5119.04 l
-1502.76 5096.1 1495.82 5089.05 1476 5089.05 c
-1476 5135.74 l
-1476 5143.19 1478.52 5145 1488.41 5145 c
-1507.13 5145 1518.8 5141.64 1525.04 5134.74 c
-1529.47 5129.71 1531.68 5124.27 1534.5 5111.59 c
-1539.33 5111.59 l
-h
-1544.96 5016 m
-f*
-1589.19 5109 m
-1550.84 5109 l
-1550.84 5103.95 l
-1559.49 5102.74 1562 5100.12 1562 5092.07 c
-1562 5032.9 l
-1562 5024.65 1559.93 5022.44 1550.84 5020.83 c
-1550.84 5016 l
-1604.37 5016 l
-1604.37 5020.83 l
-1592.09 5021.63 1590 5024.25 1590 5036.73 c
-1590 5074.76 l
-1590 5085.23 1595.49 5093.88 1601.95 5093.88 c
-1603.56 5093.88 1605.37 5092.47 1607.59 5089.25 c
-1611.41 5083.82 1614.43 5082.01 1619.66 5082.01 c
-1627.11 5082.01 1632.34 5087.64 1632.34 5095.29 c
-1632.34 5104.55 1625.5 5111.41 1616.04 5111.41 c
-1606.1 5111.41 1598.54 5106.12 1589.19 5092.27 c
-h
-1634.35 5016 m
-f*
-1729.19 5028.88 m
-1727.18 5026.87 l
-1726.57 5026.26 1725.97 5026.06 1724.96 5026.06 c
-1722.15 5026.06 1721 5027.67 1721 5031.09 c
-1721 5083.62 l
-1721 5100.73 1705.6 5111.42 1680.89 5111.42 c
-1658.15 5111.42 1642.85 5101.06 1642.85 5085.83 c
-1642.85 5077.38 1647.69 5072.55 1655.94 5072.55 c
-1663.99 5072.55 1669.62 5077.38 1669.62 5084.22 c
-1669.62 5087.04 1668.61 5089.66 1666 5092.88 c
-1664.19 5094.89 1663.58 5096.1 1663.58 5097.3 c
-1663.58 5101.53 1669.02 5104.42 1676.26 5104.42 c
-1688.14 5104.42 1693.86 5099.08 1693.86 5087.04 c
-1693.86 5072.35 l
-1669.91 5065.1 1660.29 5061.48 1652.51 5056.45 c
-1643.46 5050.41 1639 5043.37 1639 5034.52 c
-1639 5022.24 1648.27 5013.18 1661.17 5013.18 c
-1672.84 5013.18 1682.1 5017.21 1693.17 5027.27 c
-1695.38 5017.01 1699.81 5013.18 1709.67 5013.18 c
-1718.32 5013.18 1724.56 5016.4 1732.21 5024.65 c
-h
-1693 5036.13 m
-1687.55 5029.89 1683.52 5027.47 1678.68 5027.47 c
-1672.64 5027.47 1668 5032.91 1668 5040.96 c
-1668 5052.63 1676.61 5060.88 1693 5065.31 c
-h
-1734.62 5016 m
-f*
-1776.4 5109 m
-1737.7 5109 l
-1737.7 5103.95 l
-1746.55 5102.74 1749 5100.32 1749 5092.07 c
-1749 5032.9 l
-1749 5024.65 1746.74 5022.44 1737.7 5020.83 c
-1737.7 5016 l
-1786 5016 l
-1786 5020.83 l
-1778.95 5021.84 1777 5024.65 1777 5032.3 c
-1777 5086.03 l
-1777 5087.04 1779.87 5090.66 1782.18 5092.88 c
-1786.4 5096.1 1790.02 5098.42 1793.65 5098.42 c
-1801.5 5098.42 1805 5093.59 1805 5081 c
-1805 5032.3 l
-1805 5024.05 1802.68 5021.43 1794.85 5020.83 c
-1794.85 5016 l
-1841.95 5016 l
-1841.95 5020.83 l
-1834.9 5021.64 1833 5024.65 1833 5032.3 c
-1833 5086.03 l
-1833 5087.04 1835.73 5090.46 1837.92 5092.68 c
-1842.35 5096.1 1845.97 5098.42 1849.59 5098.42 c
-1857.24 5098.42 1860 5093.38 1860 5081 c
-1860 5032.3 l
-1860 5023.85 1857.85 5021.43 1850.4 5020.83 c
-1850.4 5016 l
-1898.3 5016 l
-1898.3 5021 l
-1890.45 5021.4 1888 5023.78 1888 5032.3 c
-1888 5082.81 l
-1888 5100.12 1877.43 5111.42 1861.07 5111.42 c
-1849.59 5111.42 1841.95 5106.73 1831.48 5093.68 c
-1825.44 5106.36 1818.4 5111.42 1805.72 5111.42 c
-1792.95 5111.42 1783.98 5105.91 1776.4 5093.68 c
-h
-1901.64 5016 m
-f*
-1979.9 5041.16 m
-1971.65 5031.29 1965.61 5027.18 1956.96 5027.18 c
-1949.31 5027.18 1943.27 5030.77 1939.25 5037.94 c
-1935.43 5044.54 1933.82 5051.56 1933.01 5066 c
-1983.73 5066 l
-1982.52 5082.36 1979.5 5091.43 1973.26 5099.12 c
-1966.82 5106.96 1957.36 5111.42 1946.09 5111.42 c
-1920.94 5111.42 1904.03 5091.4 1904.03 5061.88 c
-1904.03 5032.5 1920.53 5013.18 1945.49 5013.18 c
-1961.79 5013.18 1971.65 5019.42 1984.73 5038.34 c
-h
-1932 5073 m
-1932.61 5096.96 1936.23 5104.42 1946.09 5104.42 c
-1951.93 5104.42 1955.55 5101.38 1957.16 5095.49 c
-1958.17 5091.67 1958.57 5086.03 1958.97 5075.77 c
-1958.97 5073 l
-h
-1988.35 5016 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -5016]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4722.95 4254.95 m
-4722.95 4366.55 4631.75 4457.75 4520.15 4457.75 c
-4023.35 4457.75 l
-3911.75 4457.75 3820.55 4366.55 3820.55 4254.95 c
-3820.55 4118.15 l
-3820.55 4006.55 3911.75 3915.35 4023.35 3915.35 c
-4520.15 3915.35 l
-4631.75 3915.35 4722.95 4006.55 4722.95 4118.15 c
-f*
-1 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-f*
-0 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-h
-S
-0.201248 i
-3999.33 4353 m
-3885.22 4353 l
-3885.22 4348 l
-3899.11 4347.2 3903 4344.18 3903 4333.72 c
-3903 4236.32 l
-3903 4225.85 3900.17 4223.64 3885.22 4222.03 c
-3885.22 4217 l
-3957.67 4217 l
-3957.67 4222 l
-3939.15 4222.81 3936 4225.23 3936 4236.32 c
-3936 4283.21 l
-3956.22 4282.81 3963.55 4275.36 3966.32 4252.02 c
-3971.35 4252.02 l
-3971.35 4320.04 l
-3966.32 4320.04 l
-3962.76 4297.1 3955.82 4290.05 3936 4290.05 c
-3936 4336.74 l
-3936 4344.19 3938.52 4346 3948.41 4346 c
-3967.13 4346 3978.8 4342.64 3985.04 4335.74 c
-3989.47 4330.71 3991.68 4325.27 3994.5 4312.59 c
-3999.33 4312.59 l
-h
-4004.96 4217 m
-f*
-4049.19 4310 m
-4010.84 4310 l
-4010.84 4304.95 l
-4019.49 4303.74 4022 4301.12 4022 4293.07 c
-4022 4233.9 l
-4022 4225.65 4019.93 4223.44 4010.84 4221.83 c
-4010.84 4217 l
-4064.37 4217 l
-4064.37 4221.83 l
-4052.09 4222.63 4050 4225.25 4050 4237.73 c
-4050 4275.76 l
-4050 4286.23 4055.49 4294.88 4061.95 4294.88 c
-4063.56 4294.88 4065.37 4293.47 4067.59 4290.25 c
-4071.41 4284.82 4074.43 4283.01 4079.66 4283.01 c
-4087.11 4283.01 4092.34 4288.64 4092.34 4296.29 c
-4092.34 4305.55 4085.5 4312.41 4076.04 4312.41 c
-4066.1 4312.41 4058.54 4307.12 4049.19 4293.27 c
-h
-4094.35 4217 m
-f*
-4189.19 4229.88 m
-4187.18 4227.87 l
-4186.57 4227.26 4185.97 4227.06 4184.96 4227.06 c
-4182.15 4227.06 4181 4228.67 4181 4232.09 c
-4181 4284.62 l
-4181 4301.73 4165.6 4312.42 4140.89 4312.42 c
-4118.15 4312.42 4102.85 4302.06 4102.85 4286.83 c
-4102.85 4278.38 4107.69 4273.55 4115.94 4273.55 c
-4123.99 4273.55 4129.62 4278.38 4129.62 4285.22 c
-4129.62 4288.04 4128.61 4290.66 4126 4293.88 c
-4124.19 4295.89 4123.58 4297.1 4123.58 4298.3 c
-4123.58 4302.53 4129.02 4305.42 4136.26 4305.42 c
-4148.14 4305.42 4153.86 4300.08 4153.86 4288.04 c
-4153.86 4273.35 l
-4129.91 4266.1 4120.29 4262.48 4112.51 4257.45 c
-4103.46 4251.41 4099 4244.37 4099 4235.52 c
-4099 4223.24 4108.27 4214.18 4121.17 4214.18 c
-4132.84 4214.18 4142.1 4218.21 4153.17 4228.27 c
-4155.38 4218.01 4159.81 4214.18 4169.67 4214.18 c
-4178.32 4214.18 4184.56 4217.4 4192.21 4225.65 c
-h
-4153 4237.13 m
-4147.55 4230.89 4143.52 4228.47 4138.68 4228.47 c
-4132.64 4228.47 4128 4233.91 4128 4241.96 c
-4128 4253.63 4136.61 4261.88 4153 4266.31 c
-h
-4194.62 4217 m
-f*
-4236.4 4310 m
-4197.7 4310 l
-4197.7 4304.95 l
-4206.55 4303.74 4209 4301.32 4209 4293.07 c
-4209 4233.9 l
-4209 4225.65 4206.74 4223.44 4197.7 4221.83 c
-4197.7 4217 l
-4246 4217 l
-4246 4221.83 l
-4238.95 4222.84 4237 4225.65 4237 4233.3 c
-4237 4287.03 l
-4237 4288.04 4239.87 4291.66 4242.18 4293.88 c
-4246.4 4297.1 4250.02 4299.42 4253.65 4299.42 c
-4261.5 4299.42 4265 4294.59 4265 4282 c
-4265 4233.3 l
-4265 4225.05 4262.68 4222.43 4254.85 4221.83 c
-4254.85 4217 l
-4301.95 4217 l
-4301.95 4221.83 l
-4294.9 4222.64 4293 4225.65 4293 4233.3 c
-4293 4287.03 l
-4293 4288.04 4295.73 4291.46 4297.92 4293.68 c
-4302.35 4297.1 4305.97 4299.42 4309.59 4299.42 c
-4317.24 4299.42 4320 4294.38 4320 4282 c
-4320 4233.3 l
-4320 4224.85 4317.85 4222.43 4310.4 4221.83 c
-4310.4 4217 l
-4358.3 4217 l
-4358.3 4222 l
-4350.45 4222.4 4348 4224.78 4348 4233.3 c
-4348 4283.81 l
-4348 4301.12 4337.43 4312.42 4321.07 4312.42 c
-4309.59 4312.42 4301.95 4307.73 4291.48 4294.68 c
-4285.44 4307.36 4278.4 4312.42 4265.72 4312.42 c
-4252.95 4312.42 4243.98 4306.91 4236.4 4294.68 c
-h
-4361.64 4217 m
-f*
-4439.9 4242.16 m
-4431.65 4232.29 4425.61 4228.18 4416.96 4228.18 c
-4409.31 4228.18 4403.27 4231.77 4399.25 4238.94 c
-4395.43 4245.54 4393.82 4252.56 4393.01 4267 c
-4443.73 4267 l
-4442.52 4283.36 4439.5 4292.43 4433.26 4300.12 c
-4426.82 4307.96 4417.36 4312.42 4406.09 4312.42 c
-4380.94 4312.42 4364.03 4292.4 4364.03 4262.88 c
-4364.03 4233.5 4380.53 4214.18 4405.49 4214.18 c
-4421.79 4214.18 4431.65 4220.42 4444.73 4239.34 c
-h
-4392 4274 m
-4392.61 4297.96 4396.23 4305.42 4406.09 4305.42 c
-4411.93 4305.42 4415.55 4302.38 4417.16 4296.49 c
-4418.17 4292.67 4418.57 4287.03 4418.97 4276.77 c
-4418.97 4274 l
-h
-4448.35 4217 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4484 -4215]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3804.95 3548.15 m
-3804.95 3658.55 3713.75 3749.75 3602.15 3749.75 c
-3106.55 3749.75 l
-2994.95 3749.75 2903.75 3658.55 2903.75 3548.15 c
-2903.75 3410.15 l
-2903.75 3299.75 2994.95 3208.55 3106.55 3208.55 c
-3602.15 3208.55 l
-3713.75 3208.55 3804.95 3299.75 3804.95 3410.15 c
-f*
-1 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-f*
-8 w
-0 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-h
-S
-0.201248 i
-3082.33 3645 m
-2968.22 3645 l
-2968.22 3640 l
-2982.11 3639.2 2986 3636.18 2986 3625.72 c
-2986 3528.32 l
-2986 3517.85 2983.17 3515.64 2968.22 3514.03 c
-2968.22 3509 l
-3040.67 3509 l
-3040.67 3514 l
-3022.15 3514.81 3019 3517.23 3019 3528.32 c
-3019 3575.21 l
-3039.22 3574.81 3046.55 3567.36 3049.32 3544.02 c
-3054.35 3544.02 l
-3054.35 3612.04 l
-3049.32 3612.04 l
-3045.76 3589.1 3038.82 3582.05 3019 3582.05 c
-3019 3628.74 l
-3019 3636.19 3021.52 3638 3031.41 3638 c
-3050.13 3638 3061.8 3634.64 3068.04 3627.74 c
-3072.47 3622.71 3074.68 3617.27 3077.5 3604.59 c
-3082.33 3604.59 l
-h
-3087.96 3509 m
-f*
-3131.19 3602 m
-3092.84 3602 l
-3092.84 3596.95 l
-3101.49 3595.74 3104 3593.12 3104 3585.07 c
-3104 3525.9 l
-3104 3517.65 3101.93 3515.44 3092.84 3513.83 c
-3092.84 3509 l
-3146.37 3509 l
-3146.37 3513.83 l
-3134.09 3514.63 3132 3517.25 3132 3529.73 c
-3132 3567.76 l
-3132 3578.23 3137.49 3586.88 3143.95 3586.88 c
-3145.56 3586.88 3147.37 3585.47 3149.59 3582.25 c
-3153.41 3576.82 3156.43 3575.01 3161.66 3575.01 c
-3169.11 3575.01 3174.34 3580.64 3174.34 3588.29 c
-3174.34 3597.55 3167.5 3604.41 3158.04 3604.41 c
-3148.1 3604.41 3140.54 3599.12 3131.19 3585.27 c
-h
-3176.35 3509 m
-f*
-3271.19 3521.88 m
-3269.18 3519.87 l
-3268.57 3519.26 3267.97 3519.06 3266.96 3519.06 c
-3264.15 3519.06 3263 3520.67 3263 3524.09 c
-3263 3576.62 l
-3263 3593.73 3247.6 3604.42 3222.89 3604.42 c
-3200.15 3604.42 3184.85 3594.06 3184.85 3578.83 c
-3184.85 3570.38 3189.69 3565.55 3197.94 3565.55 c
-3205.99 3565.55 3211.62 3570.38 3211.62 3577.22 c
-3211.62 3580.04 3210.61 3582.66 3208 3585.88 c
-3206.19 3587.89 3205.58 3589.1 3205.58 3590.3 c
-3205.58 3594.53 3211.02 3597.42 3218.26 3597.42 c
-3230.14 3597.42 3235.86 3592.08 3235.86 3580.04 c
-3235.86 3565.35 l
-3211.91 3558.1 3202.29 3554.48 3194.51 3549.45 c
-3185.46 3543.41 3181 3536.37 3181 3527.52 c
-3181 3515.24 3190.27 3506.18 3203.17 3506.18 c
-3214.84 3506.18 3224.1 3510.21 3235.17 3520.27 c
-3237.38 3510.01 3241.81 3506.18 3251.67 3506.18 c
-3260.32 3506.18 3266.56 3509.4 3274.21 3517.65 c
-h
-3235 3529.13 m
-3229.55 3522.89 3225.52 3520.47 3220.68 3520.47 c
-3214.64 3520.47 3210 3525.91 3210 3533.96 c
-3210 3545.63 3218.61 3553.88 3235 3558.31 c
-h
-3276.62 3509 m
-f*
-3318.4 3602 m
-3279.7 3602 l
-3279.7 3596.95 l
-3288.55 3595.74 3291 3593.32 3291 3585.07 c
-3291 3525.9 l
-3291 3517.65 3288.74 3515.44 3279.7 3513.83 c
-3279.7 3509 l
-3328 3509 l
-3328 3513.83 l
-3320.95 3514.84 3319 3517.65 3319 3525.3 c
-3319 3579.03 l
-3319 3580.04 3321.87 3583.66 3324.18 3585.88 c
-3328.4 3589.1 3332.02 3591.42 3335.65 3591.42 c
-3343.5 3591.42 3347 3586.59 3347 3574 c
-3347 3525.3 l
-3347 3517.05 3344.68 3514.43 3336.85 3513.83 c
-3336.85 3509 l
-3383.95 3509 l
-3383.95 3513.83 l
-3376.9 3514.64 3375 3517.65 3375 3525.3 c
-3375 3579.03 l
-3375 3580.04 3377.73 3583.46 3379.92 3585.68 c
-3384.35 3589.1 3387.97 3591.42 3391.59 3591.42 c
-3399.24 3591.42 3402 3586.38 3402 3574 c
-3402 3525.3 l
-3402 3516.85 3399.85 3514.43 3392.4 3513.83 c
-3392.4 3509 l
-3440.3 3509 l
-3440.3 3514 l
-3432.45 3514.4 3430 3516.78 3430 3525.3 c
-3430 3575.81 l
-3430 3593.12 3419.43 3604.42 3403.07 3604.42 c
-3391.59 3604.42 3383.95 3599.73 3373.48 3586.68 c
-3367.44 3599.36 3360.4 3604.42 3347.72 3604.42 c
-3334.95 3604.42 3325.98 3598.91 3318.4 3586.68 c
-h
-3443.64 3509 m
-f*
-3523.9 3534.16 m
-3515.65 3524.29 3509.61 3520.18 3500.96 3520.18 c
-3493.31 3520.18 3487.27 3523.77 3483.25 3530.94 c
-3479.43 3537.54 3477.82 3544.56 3477.01 3559 c
-3527.73 3559 l
-3526.52 3575.36 3523.5 3584.43 3517.26 3592.12 c
-3510.82 3599.96 3501.36 3604.42 3490.09 3604.42 c
-3464.94 3604.42 3448.03 3584.4 3448.03 3554.88 c
-3448.03 3525.5 3464.53 3506.18 3489.49 3506.18 c
-3505.79 3506.18 3515.65 3512.42 3528.73 3531.34 c
-h
-3476 3566 m
-3476.61 3589.96 3480.23 3597.42 3490.09 3597.42 c
-3495.93 3597.42 3499.55 3594.38 3501.16 3588.49 c
-3502.17 3584.67 3502.57 3579.03 3502.97 3568.77 c
-3502.97 3566 l
-h
-3532.35 3509 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -3509]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-1751.75 4758.95 m
-1754.15 4599.35 1794.95 4446.95 1865.75 4338.95 c
-S
-1809.35 4346.15 m
-1858.55 4359.35 l
-1884.95 4403.75 l
-1940.15 4253.75 l
-f*
-32 w
-2733.35 5222.15 m
-2644.55 5277.35 2538.95 5307.35 2430.95 5307.35 c
-2345.75 5307.35 2260.55 5288.15 2184.95 5253.35 c
-S
-2630.15 5194.55 m
-2703.35 5234.15 l
-2729.75 5314.55 l
-2870.15 5096.15 l
-f*
-0.564706 g
-2708.15 3969.35 m
-2573.75 4006.55 l
-2669.75 4061.75 l
-2516.15 4071.35 l
-2558.15 4140.95 l
-2410.55 4120.55 l
-2393.75 4192.55 l
-2273.75 4146.95 l
-2198.15 4210.55 l
-2122.55 4146.95 l
-2002.55 4192.55 l
-1984.55 4120.55 l
-1835.75 4140.95 l
-1880.15 4071.35 l
-1726.55 4061.75 l
-1822.55 4006.55 l
-1686.95 3969.35 l
-1822.55 3934.55 l
-1726.55 3878.15 l
-1880.15 3869.75 l
-1835.75 3800.15 l
-1984.55 3819.35 l
-2002.55 3748.55 l
-2122.55 3792.95 l
-2198.15 3729.35 l
-2273.75 3792.95 l
-2393.75 3748.55 l
-2410.55 3819.35 l
-2558.15 3800.15 l
-2516.15 3869.75 l
-2669.75 3878.15 l
-2573.75 3934.55 l
-f*
-1 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-f*
-0 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-2648.15 4029.35 l
-2609.75 4029.35 l
-2487.35 3998.15 l
-2576.15 3946.55 l
-2438.15 3938.15 l
-2478.95 3872.15 l
-2343.35 3891.35 l
-2326.55 3821.75 l
-2211.35 3864.95 l
-2138.15 3802.55 l
-2064.95 3864.95 l
-1949.75 3821.75 l
-1931.75 3891.35 l
-1796.15 3872.15 l
-1836.95 3938.15 l
-1700.15 3946.55 l
-1788.95 3998.15 l
-1666.55 4029.35 l
-1787.75 4061.75 l
-1700.15 4114.55 l
-1836.95 4121.75 l
-1796.15 4188.95 l
-1931.75 4169.75 l
-1949.75 4238.15 l
-2064.95 4196.15 l
-2138.15 4258.55 l
-2211.35 4196.15 l
-2326.55 4238.15 l
-2343.35 4169.75 l
-2478.95 4188.95 l
-2438.15 4121.75 l
-2576.15 4114.55 l
-2487.35 4061.75 l
-2609.75 4029.35 l
-2648.15 4029.35 l
-f*
-q[1 0 0 1 0 0]concat
-105 70 true[1 0 0 1 -1998 -3991]@85 imagemask
-!$D7 at rVup's8W+L
-!!!"Ks8W+L!$D7 at s53kW!<<*!s53lAs8W,o!!!'"s8W,g!.Y%Ks82is!WW3"s6p#<s8W,u!!!'"s8W,o
-!.Y%Ks8Duu!WW3"s7cSDs8W-!!!!'"s8W,s!.Y%Ks8N'!!WW3"s82kHs8W-!!!!'"s8W,s!.Y%Ks8N'!
-!<<*!s82j]s8W-!!!!"Ks8W,s!$D7 at s8N'!!.Y%Ks82j=s8W-!!!!!`s8W,o!"],0s8Duu!"],0s6p!js8W,s!!!!$
-s8W,7!!*'!s6p!g!!#7`s1eU7J,fP!z+92B1!!*'!rr<$!!!!9(s7cQps8W&uz"98E!!!E9$
-qu?]s!!!'"s8N'(s8Vioz!.Y%KJ.M\[n,NFg!!!!`s8V"!s8V!Wz!$D7 at n3?sQ^]4?7!!!!(
-s8VkDs8RTLz!!E9$rr<#uz!!!!"s8W-!s8Duuz!!%NKs8W,szz5QCc`s7cQoz!!!Q0
-s8W,gzz#QOi(s53kWz!!!-$s8W,7zz!<<*!s*t(Lz!!!"Ks8W*!z
-z!'gM`rVuouz!!!!0s8Vuszz!!iQ(qu?]sz!!!!0s8W&uzz!$D7@
-rr<$!z!!!!`s8W,7zz!.Y%Ks53kWz!!!$!s8W,ozz!WW3"s82isz!!!-$s8W,u
-zz#QOi(s8RTLz!!!Q0s8W-!^]4?7z+92B at s8VQgz!!#7`s6'F^p](9oz
-J,fPds8W&uz!!*'!s+14Mrr<$!!!!!"s8W*!J,fP!z!!E9$rW#1_s53kW!!!!(s8Vus&-)\!
-z!"],0p](R!s82is!!!"Ks8VQg!WW3"J,fQL!WW3"p](Ers8VQg!!!-$s8Vus"98E$p](9o"98E$rW!3's8Vus!!!-$s8W*!&-)\0rVuou#QOi(rr<T0s8W*!!!!9(s8W+L&-)\0rr<$!
-#QOi(s*tX[s8W*!!!!-$s8W+L#QOi(rr<$!"98E$s1em>s8W+L!!!'"s8W+L#QOi(s*t(L!WW3"s*t4O
-s8W*!!!!$!s8W+L!WW3"rr<$!!.Y%Krr<'!s8W&u!!!!`s8W&u!.Y%Kqu?]s!"],0p](:9s8VQg~>
-Q
-0.2 i
-2136 3991 m
-f*
-2159.52 4088.28 m
-2163.68 4088.92 2166.56 4089.08 2169.6 4089.08 c
-2174.56 4089.08 2176.96 4087.32 2176.96 4083.8 c
-2176.96 4082.84 2176.64 4081.4 2176.32 4079.96 c
-2155.84 4006.52 l
-2153.12 3997.72 2148.32 3995 2136.8 3995 c
-2136.8 3991 l
-2192 3991 l
-2192 3995 l
-2179.36 3995.15 2176.48 3996.38 2176.48 4002.04 c
-2176.48 4003.64 2176.64 4004.12 2178.4 4010.68 c
-2203.04 4100.28 l
-2188.48 4096.76 2178.24 4094.68 2159.84 4091.96 c
-h
-2216 3991 m
-f*
-2268.32 4100.24 m
-2259.52 4100.24 2250.72 4096.09 2243.52 4088.76 c
-2228.64 4073.4 2219 4047.64 2219 4023.96 c
-2219 4002.68 2229.13 3988.76 2244.32 3988.76 c
-2250.88 3988.76 2257.12 3990.84 2263.04 3995.16 c
-2279.52 4007 2292 4036.28 2292 4061.72 c
-2292 4085.08 2282.69 4100.24 2268.32 4100.24 c
-h
-2268 4095.24 m
-2272.96 4095.24 2276 4091.07 2276 4084.12 c
-2276 4080.92 2275.13 4075.48 2273.92 4069.24 c
-2271.2 4056.28 2263.52 4026.68 2260.16 4016.44 c
-2254.56 3999.8 2249.92 3993.76 2243.2 3993.76 c
-2238.4 3993.76 2235 3997.78 2235 4003.96 c
-2235 4013.88 2243.42 4049.4 2251.04 4070.84 c
-2257.12 4088.76 2261.92 4095.24 2268 4095.24 c
-h
-2296 3991 m
-f*
-1 i
-1 g
-4058.15 4720.55 m
-4139.75 4720.55 l
-4139.75 4569.35 l
-4306.55 4569.35 l
-4306.55 4720.55 l
-4388.15 4720.55 l
-4222.55 4874.15 l
-f*
-0 g
-4058.15 4720.55 m
-4139.75 4720.55 l
-4139.75 4569.35 l
-4306.55 4569.35 l
-4306.55 4720.55 l
-4388.15 4720.55 l
-4222.55 4874.15 l
-4058.15 4720.55 l
-4083.35 4731.35 l
-4222.55 4860.95 l
-4364.15 4731.35 l
-4295.75 4731.35 l
-4295.75 4580.15 l
-4149.35 4580.15 l
-4149.35 4731.35 l
-4083.35 4731.35 l
-4058.15 4720.55 l
-f*
-0.2 i
-3755.26 5012.36 m
-3744.64 5001.2 3738.88 4996.88 3730.06 4993.46 c
-3724.84 4991.3 3718.9 4990.58 3713.86 4990.58 c
-3701.98 4990.58 3690.64 4996.74 3685.42 5005.88 c
-3680.2 5015.42 3678 5028.2 3678 5046.38 c
-3678 5083.64 3689.23 5103.7 3710.8 5103.7 c
-3719.26 5103.7 3727 5100.38 3734.74 5093.36 c
-3742.48 5086.52 3746.62 5080.4 3752.92 5066.72 c
-3757.42 5066.72 l
-3757.42 5109.16 l
-3752.56 5109.16 l
-3749.86 5102.43 3748.06 5100.56 3744.64 5100.56 c
-3742.84 5100.56 3740.5 5101.28 3736.36 5103.08 c
-3725.92 5107.4 3717.1 5109.7 3708.46 5109.7 c
-3672.64 5109.7 3646 5081.84 3646 5044.76 c
-3646 5007.68 3672.21 4981.58 3709.54 4981.58 c
-3730.24 4981.58 3742.48 4987.88 3760.66 5007.86 c
-h
-3766.96 4985 m
-f*
-3830.18 4982.66 m
-3837.78 4985.36 3842.02 4986.08 3853.5 4987.34 c
-3864.66 4988.6 l
-3864.66 4993 l
-3856.74 4993.35 3855 4995.63 3855 5003.18 c
-3855 5068 l
-3818.4 5068 l
-3818.4 5063.66 l
-3827.4 5062.94 3830 5060.78 3830 5053.04 c
-3830 5002.1 l
-3823.88 4996.16 3820.18 4994.48 3814.8 4994.48 c
-3807.42 4994.48 3805 4998 3805 5006.96 c
-3805 5068 l
-3770.88 5068 l
-3770.88 5063.66 l
-3778.26 5062.22 3780 5060.6 3780 5053.04 c
-3780 5007.68 l
-3780 4991.84 3788.89 4982.48 3803.64 4982.48 c
-3813.16 4982.48 3819.56 4985.36 3830.18 4994.36 c
-h
-3868.08 4985 m
-f*
-3906.28 5068 m
-3872.22 5068 l
-3872.22 5063.66 l
-3879.96 5062.58 3882 5060.24 3882 5053.04 c
-3882 5000.12 l
-3882 4992.74 3880.19 4990.76 3872.22 4989.32 c
-3872.22 4985 l
-3920.1 4985 l
-3920.1 4989.32 l
-3909.12 4990.04 3907 4992.38 3907 5003.54 c
-3907 5037.56 l
-3907 5046.92 3912.02 5054.66 3917.94 5054.66 c
-3919.38 5054.66 3921 5053.4 3922.98 5050.52 c
-3926.4 5045.66 3929.1 5044.04 3933.78 5044.04 c
-3940.44 5044.04 3945.12 5049.08 3945.12 5055.92 c
-3945.12 5064.2 3939 5070.16 3930.54 5070.16 c
-3921.55 5070.16 3914.73 5065.47 3906.28 5053.22 c
-h
-3946.92 4985 m
-f*
-3987.28 5068 m
-3953.22 5068 l
-3953.22 5063.66 l
-3960.96 5062.58 3963 5060.24 3963 5053.04 c
-3963 5000.12 l
-3963 4992.74 3961.19 4990.76 3953.22 4989.32 c
-3953.22 4985 l
-4001.1 4985 l
-4001.1 4989.32 l
-3990.12 4990.04 3988 4992.38 3988 5003.54 c
-3988 5037.56 l
-3988 5046.92 3993.02 5054.66 3998.94 5054.66 c
-4000.38 5054.66 4002 5053.4 4003.98 5050.52 c
-4007.4 5045.66 4010.1 5044.04 4014.78 5044.04 c
-4021.44 5044.04 4026.12 5049.08 4026.12 5055.92 c
-4026.12 5064.2 4020 5070.16 4011.54 5070.16 c
-4002.55 5070.16 3995.73 5065.47 3987.28 5053.22 c
-h
-4027.92 4985 m
-f*
-4099.36 5007.5 m
-4091.98 4998.68 4086.58 4995.48 4078.84 4995.48 c
-4072 4995.48 4066.6 4998.53 4063 5004.62 c
-4059.58 5010.36 4058.14 5016.45 4057.42 5029 c
-4102.78 5029 l
-4101.7 5043.99 4099 5052.3 4093.42 5059.34 c
-4087.66 5066.36 4079.2 5070.16 4069.12 5070.16 c
-4046.62 5070.16 4031.5 5052.33 4031.5 5026.04 c
-4031.5 4999.76 4046.26 4982.48 4068.58 4982.48 c
-4083.16 4982.48 4091.98 4988.06 4103.68 5004.98 c
-h
-4056.52 5036 m
-4057.06 5057.42 4060.3 5064.16 4069.12 5064.16 c
-4074.34 5064.16 4077.58 5061.42 4079.02 5056.1 c
-4079.92 5052.68 4080.28 5047.64 4080.64 5038.46 c
-4080.64 5036 l
-h
-4106.92 4985 m
-f*
-4144.82 5068 m
-4110.78 5068 l
-4110.78 5063.66 l
-4118.7 5062.4 4120 5060.6 4120 5053.04 c
-4120 5000.12 l
-4120 4992.56 4118.61 4990.94 4110.78 4989.32 c
-4110.78 4985 l
-4154.16 4985 l
-4154.16 4989.32 l
-4147.5 4990.22 4145 4992.92 4145 4999.58 c
-4145 5047.64 l
-4145 5048.36 4146.4 5050.16 4148.4 5051.96 c
-4152.36 5055.92 4156.68 5058.16 4161 5058.16 c
-4167.12 5058.16 4170 5053.27 4170 5043.14 c
-4170 4999.58 l
-4170 4992.92 4167.71 4990.04 4161.72 4989.32 c
-4161.72 4985 l
-4204.02 4985 l
-4204.02 4989.32 l
-4197 4989.86 4195 4992.02 4195 4999.58 c
-4195 5044.76 l
-4195 5060.24 4185.54 5070.16 4170.9 5070.16 c
-4159.96 5070.16 4151.57 5065.11 4144.82 5054.48 c
-h
-4207.08 4985 m
-f*
-4261.9 5068 m
-4245 5068 l
-4245 5098.4 l
-4240.48 5098.4 l
-4229.5 5082.92 4222.3 5074.82 4210.6 5064.92 c
-4210.6 5060 l
-4220 5060 l
-4220 5001.74 l
-4220 4990.04 4227.73 4982.84 4240.12 4982.84 c
-4252.18 4982.84 4259.38 4988.24 4266.76 5003 c
-4262.26 5004.98 l
-4258.66 4998.14 4255.78 4995.84 4252 4995.84 c
-4246.96 4995.84 4245 4998.83 4245 5005.88 c
-4245 5060 l
-4261.9 5060 l
-h
-4266.94 4985 m
-f*
-4312 4985 m
-f*
-4417.94 5107 m
-4315.88 5107 l
-4315.88 5102 l
-4328.3 5101.29 4332 5098.63 4332 5089.4 c
-4332 5002.28 l
-4332 4992.92 4329.44 4990.94 4315.88 4989.5 c
-4315.88 4985 l
-4380.68 4985 l
-4380.68 4990 l
-4364.12 4990.69 4361 4992.77 4361 5002.28 c
-4361 5044.22 l
-4379.28 5043.86 4385.91 5037.2 4388.42 5016.32 c
-4392.92 5016.32 l
-4392.92 5077.16 l
-4388.42 5077.16 l
-4385.19 5056.64 4378.92 5050.34 4361 5050.34 c
-4361 5092.1 l
-4361 5098.76 4363.32 5101 4372.4 5101 c
-4389.14 5101 4399.58 5097.8 4405.16 5091.2 c
-4409.12 5086.7 4411.1 5081.84 4413.62 5070.5 c
-4417.94 5070.5 l
-h
-4422.98 4985 m
-f*
-4461.28 5068 m
-4427.22 5068 l
-4427.22 5063.66 l
-4434.96 5062.58 4437 5060.24 4437 5053.04 c
-4437 5000.12 l
-4437 4992.74 4435.19 4990.76 4427.22 4989.32 c
-4427.22 4985 l
-4475.1 4985 l
-4475.1 4989.32 l
-4464.12 4990.04 4462 4992.38 4462 5003.54 c
-4462 5037.56 l
-4462 5046.92 4467.02 5054.66 4472.94 5054.66 c
-4474.38 5054.66 4476 5053.4 4477.98 5050.52 c
-4481.4 5045.66 4484.1 5044.04 4488.78 5044.04 c
-4495.44 5044.04 4500.12 5049.08 4500.12 5055.92 c
-4500.12 5064.2 4494 5070.16 4485.54 5070.16 c
-4476.55 5070.16 4469.73 5065.47 4461.28 5053.22 c
-h
-4501.92 4985 m
-f*
-4587.14 4996.52 m
-4585.34 4994.72 l
-4584.8 4994.18 4584.26 4994 4583.36 4994 c
-4580.84 4994 4580 4995.44 4580 4998.5 c
-4580 5045.48 l
-4580 5060.78 4566.16 5070.16 4543.94 5070.16 c
-4523.6 5070.16 4509.92 5060.97 4509.92 5047.46 c
-4509.92 5039.9 4514.24 5035.58 4521.62 5035.58 c
-4528.82 5035.58 4533.86 5039.9 4533.86 5046.02 c
-4533.86 5048.54 4532.96 5050.88 4530.62 5053.76 c
-4529 5055.56 4528.46 5056.64 4528.46 5057.72 c
-4528.46 5061.5 4533.32 5064.16 4539.8 5064.16 c
-4550.42 5064.16 4555 5059.37 4555 5048.54 c
-4555 5035.4 l
-4533.89 5028.92 4525.41 5025.68 4518.56 5021.18 c
-4510.46 5015.78 4507 5009.48 4507 5001.56 c
-4507 4990.58 4515.07 4982.48 4526.3 4982.48 c
-4536.74 4982.48 4545.02 4986.08 4554.92 4995.08 c
-4556.9 4985.9 4560.86 4982.48 4569.68 4982.48 c
-4577.42 4982.48 4583 4985.36 4589.84 4992.74 c
-h
-4555 5003 m
-4550.04 4997.42 4546.37 4995.26 4541.96 4995.26 c
-4536.56 4995.26 4533 5000.12 4533 5007.32 c
-4533 5017.76 4540.57 5025.14 4555 5029.1 c
-h
-4592 4985 m
-f*
-4629.46 5068 m
-4594.73 5068 l
-4594.73 5063.66 l
-4602.65 5062.58 4605 5060.42 4605 5053.04 c
-4605 5000.12 l
-4605 4992.74 4602.95 4990.76 4594.73 4989.32 c
-4594.73 4985 l
-4637.93 4985 l
-4637.93 4989.32 l
-4631.63 4990.22 4630 4992.74 4630 4999.58 c
-4630 5047.64 l
-4630 5048.54 4632.51 5051.78 4634.51 5053.76 c
-4638.29 5056.64 4641.53 5058.16 4644.77 5058.16 c
-4651.79 5058.16 4655 5054 4655 5043.14 c
-4655 4999.58 l
-4655 4992.2 4652.9 4989.86 4645.85 4989.32 c
-4645.85 4985 l
-4687.97 4985 l
-4687.97 4989.32 l
-4681.67 4990.04 4680 4992.74 4680 4999.58 c
-4680 5047.64 l
-4680 5048.54 4682.43 5051.6 4684.37 5053.58 c
-4688.33 5056.64 4691.57 5058.16 4694.81 5058.16 c
-4701.65 5058.16 4704 5053.82 4704 5043.14 c
-4704 4999.58 l
-4704 4992.02 4702.1 4989.86 4695.53 4989.32 c
-4695.53 4985 l
-4738.37 4985 l
-4738.37 4989 l
-4731.35 4989.37 4729 4991.6 4729 4999.58 c
-4729 5044.76 l
-4729 5060.24 4719.6 5070.16 4705.07 5070.16 c
-4694.81 5070.16 4687.97 5066.01 4678.61 5054.48 c
-4673.21 5065.82 4666.91 5070.16 4655.57 5070.16 c
-4644.2 5070.16 4636.21 5065.29 4629.46 5054.48 c
-h
-4741.94 4985 m
-f*
-4814.36 5007.5 m
-4806.98 4998.68 4801.58 4995.48 4793.84 4995.48 c
-4787 4995.48 4781.6 4998.53 4778 5004.62 c
-4774.58 5010.36 4773.14 5016.45 4772.42 5029 c
-4817.78 5029 l
-4816.7 5043.99 4814 5052.3 4808.42 5059.34 c
-4802.66 5066.36 4794.2 5070.16 4784.12 5070.16 c
-4761.62 5070.16 4746.5 5052.33 4746.5 5026.04 c
-4746.5 4999.76 4761.26 4982.48 4783.58 4982.48 c
-4798.16 4982.48 4806.98 4988.06 4818.68 5004.98 c
-h
-4771.52 5036 m
-4772.06 5057.42 4775.3 5064.16 4784.12 5064.16 c
-4789.34 5064.16 4792.58 5061.42 4794.02 5056.1 c
-4794.92 5052.68 4795.28 5047.64 4795.64 5038.46 c
-4795.64 5036 l
-h
-4821.92 4985 m
-f*
-1 i
-3636.95 4949.75 1184.4 15.5999 re
-f
-0.2 i
-1323.88 5932 m
-1323.88 5927 l
-1336.3 5926.29 1340 5923.45 1340 5914.4 c
-1340 5827.28 l
-1340 5818.1 1337.25 5815.94 1323.88 5814.5 c
-1323.88 5810 l
-1381.84 5810 l
-1412.26 5810 1432 5823.5 1432 5843.84 c
-1432 5852.12 1428.73 5859.32 1422.7 5864.9 c
-1416.4 5870.48 1410.28 5873 1397.68 5875.7 c
-1418.56 5881.82 1426 5889.2 1426 5902.88 c
-1426 5921.42 1409.55 5932 1379.5 5932 c
-h
-1369 5871.74 m
-1373.92 5871.74 l
-1392.46 5871.74 1401 5862.2 1401 5842.22 c
-1401 5824.76 1393.77 5816 1379.5 5816 c
-1371.58 5816 1369 5818.99 1369 5826.74 c
-h
-1369 5917.46 m
-1369 5923.94 1371.39 5927 1378.24 5927 c
-1390.84 5927 1397 5919.03 1397 5901.62 c
-1397 5882.72 1391.08 5877.68 1369 5877.14 c
-h
-1441.06 5810 m
-f*
-1526.14 5821.52 m
-1524.34 5819.72 l
-1523.8 5819.18 1523.26 5819 1522.36 5819 c
-1519.84 5819 1519 5820.44 1519 5823.5 c
-1519 5870.48 l
-1519 5885.78 1505.16 5895.16 1482.94 5895.16 c
-1462.6 5895.16 1448.92 5885.97 1448.92 5872.46 c
-1448.92 5864.9 1453.24 5860.58 1460.62 5860.58 c
-1467.82 5860.58 1472.86 5864.9 1472.86 5871.02 c
-1472.86 5873.54 1471.96 5875.88 1469.62 5878.76 c
-1468 5880.56 1467.46 5881.64 1467.46 5882.72 c
-1467.46 5886.5 1472.32 5889.16 1478.8 5889.16 c
-1489.42 5889.16 1494 5884.37 1494 5873.54 c
-1494 5860.4 l
-1472.89 5853.92 1464.41 5850.68 1457.56 5846.18 c
-1449.46 5840.78 1446 5834.48 1446 5826.56 c
-1446 5815.58 1454.07 5807.48 1465.3 5807.48 c
-1475.74 5807.48 1484.02 5811.08 1493.92 5820.08 c
-1495.9 5810.9 1499.86 5807.48 1508.68 5807.48 c
-1516.42 5807.48 1522 5810.36 1528.84 5817.74 c
-h
-1494 5828 m
-1489.04 5822.42 1485.37 5820.26 1480.96 5820.26 c
-1475.56 5820.26 1472 5825.12 1472 5832.32 c
-1472 5842.76 1479.57 5850.14 1494 5854.1 c
-h
-1531 5810 m
-f*
-1592.22 5868.68 m
-1592.22 5894.8 l
-1588.24 5894.8 l
-1587.16 5892.08 1586.08 5891.2 1583.74 5891.2 c
-1582.66 5891.2 1581.04 5891.55 1578.16 5892.44 c
-1572.4 5894.42 1568.26 5895.16 1564.12 5895.16 c
-1547.74 5895.16 1536 5883.99 1536 5868.86 c
-1536 5856.98 1543.34 5848.7 1561.42 5840.96 c
-1573.84 5835.56 1579 5831.06 1579 5825.3 c
-1579 5818.28 1573.48 5813.48 1565.2 5813.48 c
-1552.6 5813.48 1544.32 5821.62 1540.54 5837.36 c
-1535.5 5837.36 l
-1535.5 5807.66 l
-1540 5807.66 l
-1541.98 5811.44 1543.06 5812.7 1544.68 5812.7 c
-1545.58 5812.7 1547.02 5812.34 1548.82 5811.62 c
-1554.04 5809.46 1563.22 5807.48 1568.26 5807.48 c
-1584.64 5807.48 1596 5818.64 1596 5834.84 c
-1596 5847.62 1589.15 5855.54 1571.14 5862.92 c
-1558.9 5868.14 1554 5872.64 1554 5878.76 c
-1554 5884.7 1558.98 5889.16 1565.74 5889.16 c
-1570.6 5889.16 1575.28 5887.19 1579.24 5883.44 c
-1583.02 5879.84 1585 5876.42 1587.7 5868.68 c
-h
-1601.02 5810 m
-f*
-1673.36 5832.5 m
-1665.98 5823.68 1660.58 5820.48 1652.84 5820.48 c
-1646 5820.48 1640.6 5823.53 1637 5829.62 c
-1633.58 5835.36 1632.14 5841.45 1631.42 5854 c
-1676.78 5854 l
-1675.7 5868.99 1673 5877.3 1667.42 5884.34 c
-1661.66 5891.36 1653.2 5895.16 1643.12 5895.16 c
-1620.62 5895.16 1605.5 5877.33 1605.5 5851.04 c
-1605.5 5824.76 1620.26 5807.48 1642.58 5807.48 c
-1657.16 5807.48 1665.98 5813.06 1677.68 5829.98 c
-h
-1630.52 5861 m
-1631.06 5882.42 1634.3 5889.16 1643.12 5889.16 c
-1648.34 5889.16 1651.58 5886.42 1653.02 5881.1 c
-1653.92 5877.68 1654.28 5872.64 1654.64 5863.46 c
-1654.64 5861 l
-h
-1680.92 5810 m
-f*
-1726 5810 m
-f*
-1831.94 5932 m
-1729.88 5932 l
-1729.88 5927 l
-1742.3 5926.29 1746 5923.63 1746 5914.4 c
-1746 5827.28 l
-1746 5817.92 1743.44 5815.94 1729.88 5814.5 c
-1729.88 5810 l
-1794.68 5810 l
-1794.68 5815 l
-1778.12 5815.69 1775 5817.77 1775 5827.28 c
-1775 5869.22 l
-1793.28 5868.86 1799.91 5862.2 1802.42 5841.32 c
-1806.92 5841.32 l
-1806.92 5902.16 l
-1802.42 5902.16 l
-1799.19 5881.64 1792.92 5875.34 1775 5875.34 c
-1775 5917.1 l
-1775 5923.76 1777.32 5926 1786.4 5926 c
-1803.14 5926 1813.58 5922.8 1819.16 5916.2 c
-1823.12 5911.7 1825.1 5906.84 1827.62 5895.5 c
-1831.94 5895.5 l
-h
-1836.98 5810 m
-f*
-1875.28 5893 m
-1841.22 5893 l
-1841.22 5888.66 l
-1848.96 5887.58 1851 5885.24 1851 5878.04 c
-1851 5825.12 l
-1851 5817.74 1849.19 5815.76 1841.22 5814.32 c
-1841.22 5810 l
-1889.1 5810 l
-1889.1 5814.32 l
-1878.12 5815.04 1876 5817.38 1876 5828.54 c
-1876 5862.56 l
-1876 5871.92 1881.02 5879.66 1886.94 5879.66 c
-1888.38 5879.66 1890 5878.4 1891.98 5875.52 c
-1895.4 5870.66 1898.1 5869.04 1902.78 5869.04 c
-1909.44 5869.04 1914.12 5874.08 1914.12 5880.92 c
-1914.12 5889.2 1908 5895.16 1899.54 5895.16 c
-1890.55 5895.16 1883.73 5890.47 1875.28 5878.22 c
-h
-1915.92 5810 m
-f*
-2001.14 5821.52 m
-1999.34 5819.72 l
-1998.8 5819.18 1998.26 5819 1997.36 5819 c
-1994.84 5819 1994 5820.44 1994 5823.5 c
-1994 5870.48 l
-1994 5885.78 1980.16 5895.16 1957.94 5895.16 c
-1937.6 5895.16 1923.92 5885.97 1923.92 5872.46 c
-1923.92 5864.9 1928.24 5860.58 1935.62 5860.58 c
-1942.82 5860.58 1947.86 5864.9 1947.86 5871.02 c
-1947.86 5873.54 1946.96 5875.88 1944.62 5878.76 c
-1943 5880.56 1942.46 5881.64 1942.46 5882.72 c
-1942.46 5886.5 1947.32 5889.16 1953.8 5889.16 c
-1964.42 5889.16 1969 5884.37 1969 5873.54 c
-1969 5860.4 l
-1947.89 5853.92 1939.41 5850.68 1932.56 5846.18 c
-1924.46 5840.78 1921 5834.48 1921 5826.56 c
-1921 5815.58 1929.07 5807.48 1940.3 5807.48 c
-1950.74 5807.48 1959.02 5811.08 1968.92 5820.08 c
-1970.9 5810.9 1974.86 5807.48 1983.68 5807.48 c
-1991.42 5807.48 1997 5810.36 2003.84 5817.74 c
-h
-1969 5828 m
-1964.04 5822.42 1960.37 5820.26 1955.96 5820.26 c
-1950.56 5820.26 1947 5825.12 1947 5832.32 c
-1947 5842.76 1954.57 5850.14 1969 5854.1 c
-h
-2006 5810 m
-f*
-2043.46 5893 m
-2008.73 5893 l
-2008.73 5888.66 l
-2016.65 5887.58 2019 5885.42 2019 5878.04 c
-2019 5825.12 l
-2019 5817.74 2016.95 5815.76 2008.73 5814.32 c
-2008.73 5810 l
-2051.93 5810 l
-2051.93 5814.32 l
-2045.63 5815.22 2044 5817.74 2044 5824.58 c
-2044 5872.64 l
-2044 5873.54 2046.51 5876.78 2048.51 5878.76 c
-2052.29 5881.64 2055.53 5883.16 2058.77 5883.16 c
-2065.79 5883.16 2069 5879 2069 5868.14 c
-2069 5824.58 l
-2069 5817.2 2066.9 5814.86 2059.85 5814.32 c
-2059.85 5810 l
-2101.97 5810 l
-2101.97 5814.32 l
-2095.67 5815.04 2094 5817.74 2094 5824.58 c
-2094 5872.64 l
-2094 5873.54 2096.43 5876.6 2098.37 5878.58 c
-2102.33 5881.64 2105.57 5883.16 2108.81 5883.16 c
-2115.65 5883.16 2118 5878.82 2118 5868.14 c
-2118 5824.58 l
-2118 5817.02 2116.1 5814.86 2109.53 5814.32 c
-2109.53 5810 l
-2152.37 5810 l
-2152.37 5814 l
-2145.35 5814.37 2143 5816.6 2143 5824.58 c
-2143 5869.76 l
-2143 5885.24 2133.6 5895.16 2119.07 5895.16 c
-2108.81 5895.16 2101.97 5891.01 2092.61 5879.48 c
-2087.21 5890.82 2080.91 5895.16 2069.57 5895.16 c
-2058.2 5895.16 2050.21 5890.29 2043.46 5879.48 c
-h
-2155.94 5810 m
-f*
-2228.36 5832.5 m
-2220.98 5823.68 2215.58 5820.48 2207.84 5820.48 c
-2201 5820.48 2195.6 5823.53 2192 5829.62 c
-2188.58 5835.36 2187.14 5841.45 2186.42 5854 c
-2231.78 5854 l
-2230.7 5868.99 2228 5877.3 2222.42 5884.34 c
-2216.66 5891.36 2208.2 5895.16 2198.12 5895.16 c
-2175.62 5895.16 2160.5 5877.33 2160.5 5851.04 c
-2160.5 5824.76 2175.26 5807.48 2197.58 5807.48 c
-2212.16 5807.48 2220.98 5813.06 2232.68 5829.98 c
-h
-2185.52 5861 m
-2186.06 5882.42 2189.3 5889.16 2198.12 5889.16 c
-2203.34 5889.16 2206.58 5886.42 2208.02 5881.1 c
-2208.92 5877.68 2209.28 5872.64 2209.64 5863.46 c
-2209.64 5861 l
-h
-2235.92 5810 m
-f*
-1 i
-1320.95 5775.35 914.4 15.5999 re
-f
-1 g
-1773.35 5370.95 m
-1937.75 5522.15 l
-1856.15 5522.15 l
-1856.15 5675.75 l
-1689.35 5675.75 l
-1689.35 5522.15 l
-1607.75 5522.15 l
-f*
-0 g
-1773.35 5370.95 m
-1937.75 5522.15 l
-1856.15 5522.15 l
-1856.15 5675.75 l
-1689.35 5675.75 l
-1689.35 5522.15 l
-1607.75 5522.15 l
-1773.35 5370.95 l
-1773.35 5384.15 l
-1634.15 5512.55 l
-1700.15 5512.55 l
-1700.15 5666.15 l
-1846.55 5666.15 l
-1846.55 5512.55 l
-1912.55 5512.55 l
-1773.35 5384.15 l
-1773.35 5370.95 l
-f*
-0.201248 i
-3939.33 5883 m
-3825.22 5883 l
-3825.22 5878 l
-3839.11 5877.2 3843 5874.18 3843 5863.72 c
-3843 5766.32 l
-3843 5755.85 3840.17 5753.64 3825.22 5752.03 c
-3825.22 5747 l
-3897.67 5747 l
-3897.67 5752 l
-3879.15 5752.81 3876 5755.23 3876 5766.32 c
-3876 5813.21 l
-3896.22 5812.81 3903.55 5805.36 3906.32 5782.02 c
-3911.35 5782.02 l
-3911.35 5850.04 l
-3906.32 5850.04 l
-3902.76 5827.1 3895.82 5820.05 3876 5820.05 c
-3876 5866.74 l
-3876 5874.19 3878.52 5876 3888.41 5876 c
-3907.13 5876 3918.8 5872.64 3925.04 5865.74 c
-3929.47 5860.71 3931.68 5855.27 3934.5 5842.59 c
-3939.33 5842.59 l
-h
-3944.96 5747 m
-f*
-3989.19 5840 m
-3950.84 5840 l
-3950.84 5834.95 l
-3959.49 5833.74 3962 5831.12 3962 5823.07 c
-3962 5763.9 l
-3962 5755.65 3959.93 5753.44 3950.84 5751.83 c
-3950.84 5747 l
-4004.37 5747 l
-4004.37 5751.83 l
-3992.09 5752.63 3990 5755.25 3990 5767.73 c
-3990 5805.76 l
-3990 5816.23 3995.49 5824.88 4001.95 5824.88 c
-4003.56 5824.88 4005.37 5823.47 4007.59 5820.25 c
-4011.41 5814.82 4014.43 5813.01 4019.66 5813.01 c
-4027.11 5813.01 4032.34 5818.64 4032.34 5826.29 c
-4032.34 5835.55 4025.5 5842.41 4016.04 5842.41 c
-4006.1 5842.41 3998.54 5837.12 3989.19 5823.27 c
-h
-4034.35 5747 m
-f*
-4129.19 5759.88 m
-4127.18 5757.87 l
-4126.57 5757.26 4125.97 5757.06 4124.96 5757.06 c
-4122.15 5757.06 4121 5758.67 4121 5762.09 c
-4121 5814.62 l
-4121 5831.73 4105.6 5842.42 4080.89 5842.42 c
-4058.15 5842.42 4042.85 5832.06 4042.85 5816.83 c
-4042.85 5808.38 4047.69 5803.55 4055.94 5803.55 c
-4063.99 5803.55 4069.62 5808.38 4069.62 5815.22 c
-4069.62 5818.04 4068.61 5820.66 4066 5823.88 c
-4064.19 5825.89 4063.58 5827.1 4063.58 5828.3 c
-4063.58 5832.53 4069.02 5835.42 4076.26 5835.42 c
-4088.14 5835.42 4093.86 5830.08 4093.86 5818.04 c
-4093.86 5803.35 l
-4069.91 5796.1 4060.29 5792.48 4052.51 5787.45 c
-4043.46 5781.41 4039 5774.37 4039 5765.52 c
-4039 5753.24 4048.27 5744.18 4061.17 5744.18 c
-4072.84 5744.18 4082.1 5748.21 4093.17 5758.27 c
-4095.38 5748.01 4099.81 5744.18 4109.67 5744.18 c
-4118.32 5744.18 4124.56 5747.4 4132.21 5755.65 c
-h
-4093 5767.13 m
-4087.55 5760.89 4083.52 5758.47 4078.68 5758.47 c
-4072.64 5758.47 4068 5763.91 4068 5771.96 c
-4068 5783.63 4076.61 5791.88 4093 5796.31 c
-h
-4134.62 5747 m
-f*
-4176.4 5840 m
-4137.7 5840 l
-4137.7 5834.95 l
-4146.55 5833.74 4149 5831.32 4149 5823.07 c
-4149 5763.9 l
-4149 5755.65 4146.74 5753.44 4137.7 5751.83 c
-4137.7 5747 l
-4186 5747 l
-4186 5751.83 l
-4178.95 5752.84 4177 5755.65 4177 5763.3 c
-4177 5817.03 l
-4177 5818.04 4179.87 5821.66 4182.18 5823.88 c
-4186.4 5827.1 4190.02 5829.42 4193.65 5829.42 c
-4201.5 5829.42 4205 5824.59 4205 5812 c
-4205 5763.3 l
-4205 5755.05 4202.68 5752.43 4194.85 5751.83 c
-4194.85 5747 l
-4241.95 5747 l
-4241.95 5751.83 l
-4234.9 5752.64 4233 5755.65 4233 5763.3 c
-4233 5817.03 l
-4233 5818.04 4235.73 5821.46 4237.92 5823.68 c
-4242.35 5827.1 4245.97 5829.42 4249.59 5829.42 c
-4257.24 5829.42 4260 5824.38 4260 5812 c
-4260 5763.3 l
-4260 5754.85 4257.85 5752.43 4250.4 5751.83 c
-4250.4 5747 l
-4298.3 5747 l
-4298.3 5752 l
-4290.45 5752.4 4288 5754.78 4288 5763.3 c
-4288 5813.81 l
-4288 5831.12 4277.43 5842.42 4261.07 5842.42 c
-4249.59 5842.42 4241.95 5837.73 4231.48 5824.68 c
-4225.44 5837.36 4218.4 5842.42 4205.72 5842.42 c
-4192.95 5842.42 4183.98 5836.91 4176.4 5824.68 c
-h
-4301.64 5747 m
-f*
-4379.9 5772.16 m
-4371.65 5762.29 4365.61 5758.18 4356.96 5758.18 c
-4349.31 5758.18 4343.27 5761.77 4339.25 5768.94 c
-4335.43 5775.54 4333.82 5782.56 4333.01 5797 c
-4383.73 5797 l
-4382.52 5813.36 4379.5 5822.43 4373.26 5830.12 c
-4366.82 5837.96 4357.36 5842.42 4346.09 5842.42 c
-4320.94 5842.42 4304.03 5822.4 4304.03 5792.88 c
-4304.03 5763.5 4320.53 5744.18 4345.49 5744.18 c
-4361.79 5744.18 4371.65 5750.42 4384.73 5769.34 c
-h
-4332 5804 m
-4332.61 5827.96 4336.23 5835.42 4346.09 5835.42 c
-4351.93 5835.42 4355.55 5832.38 4357.16 5826.49 c
-4358.17 5822.67 4358.57 5817.03 4358.97 5806.77 c
-4358.97 5804 l
-h
-4388.35 5747 m
-f*
-4485.16 5842.59 m
-4485.16 5886.22 l
-4479.37 5886.22 l
-4477.96 5880.82 4476.55 5879.42 4472.93 5879.42 c
-4471.12 5879.42 4468.7 5880.03 4464.47 5881.43 c
-4455.22 5884.86 4448.78 5886.02 4440.93 5886.02 c
-4413.56 5886.02 4397 5870.54 4397 5845.01 c
-4397 5839.98 4397.75 5835.75 4399.07 5831.73 c
-4403.29 5821.06 4414.16 5811.6 4431.27 5803.35 c
-4444.75 5796.91 l
-4462.46 5788.46 4467 5783.22 4467 5772.56 c
-4467 5758.67 4457.25 5750.18 4441.94 5750.18 c
-4430.26 5750.18 4420.6 5754.89 4412.96 5764.31 c
-4407.12 5771.75 4404.3 5778.6 4400.88 5792.88 c
-4395.04 5792.88 l
-4395.04 5743.18 l
-4400.88 5743.18 l
-4402.09 5748.41 4403.7 5750.02 4406.92 5750.02 c
-4408.53 5750.02 4410.74 5749.42 4415.17 5748.01 c
-4425.03 5744.59 4432.48 5743.18 4441.33 5743.18 c
-4471.12 5743.18 4491 5760.28 4491 5785.64 c
-4491 5800.73 4482.04 5815.83 4469.1 5822.27 c
-4439.52 5836.96 l
-4423.22 5845.01 4419 5849.84 4419 5859.7 c
-4419 5872.18 4427.37 5879.02 4440.93 5879.02 c
-4449.99 5879.02 4458.44 5875.47 4465.68 5868.55 c
-4472.53 5861.51 4475.75 5855.67 4479.77 5842.59 c
-h
-4499.89 5747 m
-f*
-4580.9 5772.16 m
-4572.65 5762.29 4566.61 5758.18 4557.96 5758.18 c
-4550.31 5758.18 4544.27 5761.77 4540.25 5768.94 c
-4536.43 5775.54 4534.82 5782.56 4534.01 5797 c
-4584.73 5797 l
-4583.52 5813.36 4580.5 5822.43 4574.26 5830.12 c
-4567.82 5837.96 4558.36 5842.42 4547.09 5842.42 c
-4521.94 5842.42 4505.03 5822.4 4505.03 5792.88 c
-4505.03 5763.5 4521.53 5744.18 4546.49 5744.18 c
-4562.79 5744.18 4572.65 5750.42 4585.73 5769.34 c
-h
-4533 5804 m
-4533.61 5827.96 4537.23 5835.42 4547.09 5835.42 c
-4552.93 5835.42 4556.55 5832.38 4558.16 5826.49 c
-4559.17 5822.67 4559.57 5817.03 4559.97 5806.77 c
-4559.97 5804 l
-h
-4589.35 5747 m
-f*
-4650.38 5840 m
-4631 5840 l
-4631 5873.79 l
-4626.43 5873.79 l
-4614.16 5856.48 4606.11 5847.42 4593.02 5836.35 c
-4593.02 5831 l
-4603 5831 l
-4603 5765.72 l
-4603 5752.64 4611.84 5744.59 4626.03 5744.59 c
-4639.51 5744.59 4647.56 5750.62 4655.81 5767.12 c
-4650.78 5769.34 l
-4646.76 5761.69 4643.54 5758.59 4639.31 5758.59 c
-4633.68 5758.59 4631 5762.09 4631 5770.34 c
-4631 5831 l
-4650.38 5831 l
-h
-4656.02 5747 m
-f*
-1 i
-8 w
-2213.75 3834.95 m
-2280.95 3696.95 2475.35 3592.55 2718.95 3562.55 c
-S
-2678.15 3520.55 m
-2700.95 3567.35 l
-2687.75 3616.55 l
-2835.35 3556.55 l
-f*
-0.564706 g
-3686.15 4768.55 m
-3542.15 4810.55 l
-3645.35 4877.75 l
-3480.95 4887.35 l
-3527.75 4968.95 l
-3369.35 4946.15 l
-3351.35 5030.15 l
-3221.75 4977.35 l
-3143.75 5050.55 l
-3062.15 4977.35 l
-2933.75 5030.15 l
-2914.55 4946.15 l
-2757.35 4968.95 l
-2804.15 4887.35 l
-2639.75 4877.75 l
-2741.75 4810.55 l
-2598.95 4768.55 l
-2741.75 4728.95 l
-2639.75 4661.75 l
-2804.15 4652.15 l
-2757.35 4570.55 l
-2914.55 4594.55 l
-2933.75 4509.35 l
-3062.15 4562.15 l
-3143.75 4488.95 l
-3221.75 4562.15 l
-3351.35 4509.35 l
-3369.35 4594.55 l
-3527.75 4570.55 l
-3480.95 4652.15 l
-3645.35 4661.75 l
-3542.15 4728.95 l
-f*
-1 g
-3626.15 4828.55 m
-3482.15 4870.55 l
-3585.35 4937.75 l
-3420.95 4947.35 l
-3467.75 5028.95 l
-3309.35 5006.15 l
-3291.35 5090.15 l
-3161.75 5037.35 l
-3083.75 5110.55 l
-3002.15 5037.35 l
-2873.75 5090.15 l
-2854.55 5006.15 l
-2697.35 5028.95 l
-2744.15 4947.35 l
-2579.75 4937.75 l
-2681.75 4870.55 l
-2538.95 4828.55 l
-2681.75 4788.95 l
-2579.75 4721.75 l
-2744.15 4712.15 l
-2697.35 4630.55 l
-2854.55 4654.55 l
-2873.75 4569.35 l
-3002.15 4622.15 l
-3083.75 4548.95 l
-3161.75 4622.15 l
-3291.35 4569.35 l
-3309.35 4654.55 l
-3467.75 4630.55 l
-3420.95 4712.15 l
-3585.35 4721.75 l
-3482.15 4788.95 l
-f*
-0 g
-3626.15 4828.55 m
-3482.15 4870.55 l
-3585.35 4937.75 l
-3420.95 4947.35 l
-3467.75 5028.95 l
-3309.35 5006.15 l
-3291.35 5090.15 l
-3161.75 5037.35 l
-3083.75 5110.55 l
-3002.15 5037.35 l
-2873.75 5090.15 l
-2854.55 5006.15 l
-2697.35 5028.95 l
-2744.15 4947.35 l
-2579.75 4937.75 l
-2681.75 4870.55 l
-2538.95 4828.55 l
-2681.75 4788.95 l
-2579.75 4721.75 l
-2744.15 4712.15 l
-2697.35 4630.55 l
-2854.55 4654.55 l
-2873.75 4569.35 l
-3002.15 4622.15 l
-3083.75 4548.95 l
-3161.75 4622.15 l
-3291.35 4569.35 l
-3309.35 4654.55 l
-3467.75 4630.55 l
-3420.95 4712.15 l
-3585.35 4721.75 l
-3482.15 4788.95 l
-3626.15 4828.55 l
-3480.95 4829.75 l
-3386.15 4803.35 l
-3460.55 4754.15 l
-3354.95 4748.15 l
-3392.15 4682.15 l
-3278.15 4700.15 l
-3262.55 4624.55 l
-3153.35 4668.95 l
-3083.75 4601.75 l
-3010.55 4668.95 l
-2902.55 4624.55 l
-2885.75 4700.15 l
-2771.75 4682.15 l
-2810.15 4748.15 l
-2703.35 4754.15 l
-2778.95 4803.35 l
-2684.15 4829.75 l
-2777.75 4857.35 l
-2703.35 4904.15 l
-2810.15 4911.35 l
-2771.75 4977.35 l
-2885.75 4960.55 l
-2902.55 5034.95 l
-3010.55 4990.55 l
-3083.75 5057.75 l
-3153.35 4990.55 l
-3262.55 5034.95 l
-3278.15 4960.55 l
-3392.15 4977.35 l
-3354.95 4911.35 l
-3460.55 4904.15 l
-3387.35 4857.35 l
-3480.95 4829.75 l
-3626.15 4828.55 l
-f*
-q[1 0 0 1 0 0]concat
-105 70 true[1 0 0 1 -2961 -4787]@85 imagemask
-!$D7 at rVup's8W+L
-!!!"Ks8W+L!$D7 at s53kW!<<*!s53lAs8W,o!!!'"s8W,g!.Y%Ks82is!WW3"s6p#<s8W,u!!!'"s8W,o
-!.Y%Ks8Duu!WW3"s7cSDs8W-!!!!'"s8W,s!.Y%Ks8N'!!WW3"s82kHs8W-!!!!'"s8W,s!.Y%Ks8N'!
-!<<*!s82j]s8W-!!!!"Ks8W,s!$D7 at s8N'!!.Y%Ks82j=s8W-!!!!!`s8W,o!"],0s8Duu!"],0s6p!js8W,s!!!!$
-s8W,7!!*'!s6p!g!!#7`s1eU7J,fP!z+92B1!!*'!rr<$!!!!9(s7cQps8W&uz"98E!!!E9$
-qu?]s!!!'"s8N'(s8Vioz!.Y%KJ.M\[n,NFg!!!!`s8V"!s8V!Wz!$D7 at n3?sQ^]4?7!!!!(
-s8VkDs8RTLz!!E9$rr<#uz!!!!"s8W-!s8Duuz!!%NKs8W,szz5QCc`s7cQoz!!!Q0
-s8W,gzz#QOi(s53kWz!!!-$s8W,7zz!<<*!s*t(Lz!!!"Ks8W*!z
-z!'gM`rVuouz!!!!0s8Vuszz!!iQ(qu?]sz!!!!0s8W&uzz!$D7@
-rr<$!z!!!!`s8W,7zz!.Y%Ks53kWz!!!$!s8W,ozz!WW3"s82isz!!!-$s8W,u
-zz#QOi(s8RTLz!!!Q0s8W-!^]4?7z+92B at s8VQgz!!#7`s6'F^p](9oz
-J,fPds8W&uz!!*'!s+14Mrr<$!!!!!"s8W*!J,fP!z!!E9$rW#1_s53kW!!!!(s8Vus&-)\!
-z!"],0p](R!s82is!!!"Ks8VQg!WW3"J,fQL!WW3"p](Ers8VQg!!!-$s8Vus"98E$p](9o"98E$rW!3's8Vus!!!-$s8W*!&-)\0rVuou#QOi(rr<T0s8W*!!!!9(s8W+L&-)\0rr<$!
-#QOi(s*tX[s8W*!!!!-$s8W+L#QOi(rr<$!"98E$s1em>s8W+L!!!'"s8W+L#QOi(s*t(L!WW3"s*t4O
-s8W*!!!!$!s8W+L!WW3"rr<$!!.Y%Krr<'!s8W&u!!!!`s8W&u!.Y%Kqu?]s!"],0p](:9s8VQg~>
-Q
-0.2 i
-3099 4787 m
-f*
-3129.52 4877 m
-3170.16 4877 l
-3175.92 4894 l
-3130.64 4894 l
-3109.68 4846.52 l
-3120.08 4846.04 3125.04 4845.08 3130.96 4842.04 c
-3141.2 4836.92 3147 4827.64 3147 4817.24 c
-3147 4803.48 3136.98 4790.92 3125.68 4790.92 c
-3122.16 4790.92 3120.4 4792.44 3117.04 4798.2 c
-3113.2 4804.6 3110.48 4806.68 3105.68 4806.68 c
-3100.08 4806.68 3096.24 4803 3096.24 4797.56 c
-3096.24 4789.88 3104.56 4784.92 3117.2 4784.92 c
-3143.6 4784.92 3164 4803.32 3164 4827.16 c
-3164 4839.32 3158.69 4849.56 3149.04 4855.96 c
-3143.44 4859.8 3139.12 4861.24 3124.08 4864.44 c
-h
-3178 4787 m
-f*
-1 i
-32 w
-3191.75 4581.35 m
-3269.75 4442.15 3400.55 4336.55 3557.75 4284.95 c
-S
-3483.35 4228.55 m
-3531.35 4298.15 l
-3516.95 4380.95 l
-3742.55 4252.55 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/fsmerge.eps b/ast-5.3-1/sun210_figures/fsmerge.eps
deleted file mode 100644
index 6aa1bfd..0000000
--- a/ast-5.3-1/sun210_figures/fsmerge.eps
+++ /dev/null
@@ -1,5238 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 57 88 535 732
-%..................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/10 16:06:29
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5339.75 6665.75 m
-5339.75 6989.75 5075.75 7253.75 4751.75 7253.75 c
-1220.15 7253.75 l
-896.15 7253.75 632.15 6989.75 632.15 6665.75 c
-632.15 1478.15 l
-632.15 1154.15 896.15 890.151 1220.15 890.151 c
-4751.75 890.151 l
-5075.75 890.151 5339.75 1154.15 5339.75 1478.15 c
-f*
-1 g
-5274.95 6720.95 m
-5274.95 7044.95 5012.15 7307.75 4688.15 7307.75 c
-1164.95 7307.75 l
-840.95 7307.75 578.15 7044.95 578.15 6720.95 c
-578.15 1541.75 l
-578.15 1217.75 840.95 954.95 1164.95 954.95 c
-4688.15 954.95 l
-5012.15 954.95 5274.95 1217.75 5274.95 1541.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5274.95 6720.95 m
-5274.95 7044.95 5012.15 7307.75 4688.15 7307.75 c
-1164.95 7307.75 l
-840.95 7307.75 578.15 7044.95 578.15 6720.95 c
-578.15 1541.75 l
-578.15 1217.75 840.95 954.95 1164.95 954.95 c
-4688.15 954.95 l
-5012.15 954.95 5274.95 1217.75 5274.95 1541.75 c
-h
-S
-1 g
-5054.15 3765.35 m
-5054.15 3972.95 4886.15 4140.95 4678.55 4140.95 c
-1577.75 4140.95 l
-1370.15 4140.95 1202.15 3972.95 1202.15 3765.35 c
-1202.15 1515.35 l
-1202.15 1307.75 1370.15 1139.75 1577.75 1139.75 c
-4678.55 1139.75 l
-4886.15 1139.75 5054.15 1307.75 5054.15 1515.35 c
-f*
-0 g
-1580.15 4130.15 m
-1578.95 4139.75 l
-1514.15 4133.75 l
-1515.35 4122.95 l
-f*
-1515.35 4122.95 m
-1514.15 4133.75 l
-1514.15 4133.75 l
-1516.55 4122.95 l
-f*
-1516.55 4122.95 m
-1514.15 4133.75 l
-1498.55 4130.15 l
-1500.95 4119.35 l
-f*
-1445.75 4104.95 m
-1442.15 4113.35 l
-1390.55 4089.35 l
-1395.35 4080.95 l
-f*
-1395.35 4080.95 m
-1390.55 4089.35 l
-1390.55 4089.35 l
-1397.75 4080.95 l
-f*
-1397.75 4080.95 m
-1390.55 4089.35 l
-1371.35 4076.15 l
-1377.35 4068.95 l
-f*
-1331.75 4031.75 m
-1324.55 4040.15 l
-1290.95 4006.55 l
-1296.95 3998.15 l
-f*
-1296.95 3998.15 m
-1290.95 4006.55 l
-1290.95 4006.55 l
-1299.35 3999.35 l
-f*
-1299.35 3999.35 m
-1290.95 4006.55 l
-1274.15 3980.15 l
-1281.35 3974.15 l
-f*
-1252.55 3924.95 m
-1244.15 3929.75 l
-1226.15 3893.75 l
-1234.55 3890.15 l
-f*
-1234.55 3890.15 m
-1226.15 3893.75 l
-1226.15 3893.75 l
-1235.75 3891.35 l
-f*
-1235.75 3891.35 m
-1226.15 3893.75 l
-1216.55 3854.15 l
-1226.15 3851.75 l
-f*
-1216.55 3794.15 m
-1205.75 3796.55 l
-1203.35 3764.15 l
-1214.15 3762.95 l
-f*
-1214.15 3762.95 m
-1203.35 3764.15 l
-1203.35 3764.15 l
-1214.15 3764.15 l
-f*
-1203.35 3716.15 10.7996 47.9998 re
-f*
-1203.35 3575.75 10.7996 80.3999 re
-f*
-1203.35 3436.55 10.7996 79.2 re
-f*
-1203.35 3296.15 10.7996 80.3999 re
-f*
-1203.35 3155.75 10.7996 80.3999 re
-f*
-1203.35 3016.55 10.7996 79.2 re
-f*
-1203.35 2876.15 10.7996 80.3999 re
-f*
-1203.35 2735.75 10.7996 80.3999 re
-f*
-1203.35 2596.55 10.7996 79.2 re
-f*
-1203.35 2456.15 10.7996 80.3999 re
-f*
-1203.35 2315.75 10.7996 80.3999 re
-f*
-1203.35 2176.55 10.7996 79.2 re
-f*
-1203.35 2036.15 10.7996 80.3999 re
-f*
-1203.35 1895.75 10.7996 80.3999 re
-f*
-1203.35 1756.55 10.7996 79.2 re
-f*
-1203.35 1616.15 10.7996 80.3999 re
-f*
-1203.35 1512.95 10.7996 43.2 re
-f*
-1214.15 1512.95 m
-1203.35 1512.95 l
-1203.35 1512.95 l
-1214.15 1514.15 l
-f*
-1214.15 1514.15 m
-1203.35 1512.95 l
-1206.95 1475.75 l
-1217.75 1476.95 l
-f*
-1227.35 1419.35 m
-1217.75 1416.95 l
-1226.15 1384.55 l
-1235.75 1386.95 l
-f*
-1235.75 1386.95 m
-1226.15 1384.55 l
-1226.15 1384.55 l
-1234.55 1388.15 l
-f*
-1234.55 1388.15 m
-1226.15 1384.55 l
-1246.55 1342.55 l
-1254.95 1347.35 l
-f*
-1284.95 1298.15 m
-1277.75 1292.15 l
-1290.95 1271.75 l
-1299.35 1277.75 l
-f*
-1299.35 1277.75 m
-1290.95 1271.75 l
-1290.95 1271.75 l
-1298.15 1280.15 l
-f*
-1298.15 1280.15 m
-1290.95 1271.75 l
-1329.35 1233.35 l
-1337.75 1240.55 l
-f*
-1383.35 1205.75 m
-1377.35 1198.55 l
-1390.55 1188.95 l
-1397.75 1196.15 l
-f*
-1397.75 1196.15 m
-1390.55 1188.95 l
-1390.55 1188.95 l
-1395.35 1197.35 l
-f*
-1395.35 1197.35 m
-1390.55 1188.95 l
-1446.95 1162.55 l
-1451.75 1170.95 l
-f*
-1508.15 1156.55 m
-1505.75 1146.95 l
-1514.15 1144.55 l
-1516.55 1154.15 l
-f*
-1516.55 1154.15 m
-1514.15 1144.55 l
-1514.15 1144.55 l
-1515.35 1154.15 l
-f*
-1515.35 1154.15 m
-1514.15 1144.55 l
-1578.95 1138.55 l
-1580.15 1148.15 l
-f*
-1580.15 1148.15 m
-1578.95 1138.55 l
-1578.95 1138.55 l
-1578.95 1148.15 l
-f*
-1578.95 1138.55 6 9.6001 re
-f*
-1644.95 1138.55 80.3999 9.6001 re
-f*
-1785.35 1138.55 79.2 9.6001 re
-f*
-1924.55 1138.55 80.3999 9.6001 re
-f*
-2064.95 1138.55 80.3999 9.6001 re
-f*
-2205.35 1138.55 79.2 9.6001 re
-f*
-2344.55 1138.55 80.3999 9.6001 re
-f*
-2484.95 1138.55 80.3999 9.6001 re
-f*
-2625.35 1138.55 79.2002 9.6001 re
-f*
-2764.55 1138.55 80.3999 9.6001 re
-f*
-2904.95 1138.55 80.3999 9.6001 re
-f*
-3045.35 1138.55 79.2002 9.6001 re
-f*
-3184.55 1138.55 80.3999 9.6001 re
-f*
-3324.95 1138.55 80.3999 9.6001 re
-f*
-3465.35 1138.55 79.2 9.6001 re
-f*
-3604.55 1138.55 80.3999 9.6001 re
-f*
-3744.95 1138.55 80.3999 9.6001 re
-f*
-3885.35 1138.55 79.2 9.6001 re
-f*
-4024.55 1138.55 80.3999 9.6001 re
-f*
-4164.95 1138.55 80.3999 9.6001 re
-f*
-4305.35 1138.55 79.2 9.6001 re
-f*
-4444.55 1138.55 80.3999 9.6001 re
-f*
-4584.95 1138.55 80.3999 9.6001 re
-f*
-4724.15 1151.75 m
-4725.35 1142.15 l
-4744.55 1144.55 l
-4743.35 1154.15 l
-f*
-4743.35 1154.15 m
-4744.55 1144.55 l
-4744.55 1144.55 l
-4742.15 1154.15 l
-f*
-4742.15 1154.15 m
-4744.55 1144.55 l
-4803.35 1160.15 l
-4800.95 1169.75 l
-f*
-4853.75 1192.55 m
-4857.35 1182.95 l
-4866.95 1188.95 l
-4863.35 1197.35 l
-f*
-4863.35 1197.35 m
-4866.95 1188.95 l
-4866.95 1188.95 l
-4860.95 1197.35 l
-f*
-4860.95 1197.35 m
-4866.95 1188.95 l
-4920.95 1226.15 l
-4916.15 1234.55 l
-f*
-4916.15 1234.55 m
-4920.95 1226.15 l
-4920.95 1226.15 l
-4913.75 1233.35 l
-f*
-4913.75 1233.35 m
-4920.95 1226.15 l
-4922.15 1227.35 l
-4916.15 1234.55 l
-f*
-4958.15 1277.75 m
-4965.35 1269.35 l
-4967.75 1271.75 l
-4960.55 1280.15 l
-f*
-4960.55 1280.15 m
-4967.75 1271.75 l
-4967.75 1271.75 l
-4958.15 1278.95 l
-f*
-4958.15 1278.95 m
-4967.75 1271.75 l
-5004.95 1325.75 l
-4997.75 1331.75 l
-f*
-4997.75 1331.75 m
-5004.95 1325.75 l
-5004.95 1325.75 l
-4996.55 1329.35 l
-f*
-4996.55 1329.35 m
-5004.95 1325.75 l
-5008.55 1334.15 l
-5000.15 1340.15 l
-f*
-5024.15 1391.75 m
-5033.75 1389.35 l
-5048.15 1448.15 l
-5038.55 1450.55 l
-f*
-5038.55 1450.55 m
-5048.15 1448.15 l
-5048.15 1448.15 l
-5038.55 1449.35 l
-f*
-5038.55 1449.35 m
-5048.15 1448.15 l
-5049.35 1467.35 l
-5039.75 1468.55 l
-f*
-5044.55 1527.35 10.7996 80.3999 re
-f*
-5044.55 1667.75 10.7996 79.2 re
-f*
-5044.55 1806.95 10.7996 80.3999 re
-f*
-5044.55 1947.35 10.7996 80.3999 re
-f*
-5044.55 2087.75 10.7996 79.2 re
-f*
-5044.55 2226.95 10.7996 80.3999 re
-f*
-5044.55 2367.35 10.7996 80.3999 re
-f*
-5044.55 2507.75 10.7996 79.2 re
-f*
-5044.55 2646.95 10.7996 80.3999 re
-f*
-5044.55 2787.35 10.7996 80.3999 re
-f*
-5044.55 2927.75 10.7996 79.2 re
-f*
-5044.55 3066.95 10.7996 80.3999 re
-f*
-5044.55 3207.35 10.7996 80.3999 re
-f*
-5044.55 3347.75 10.7996 79.2 re
-f*
-5044.55 3486.95 10.7996 80.3999 re
-f*
-5044.55 3627.35 10.7996 80.3999 re
-f*
-5044.55 3766.55 m
-5055.35 3767.75 l
-5048.15 3830.15 l
-5038.55 3828.95 l
-f*
-5038.55 3828.95 m
-5048.15 3830.15 l
-5048.15 3830.15 l
-5038.55 3827.75 l
-f*
-5038.55 3827.75 m
-5048.15 3830.15 l
-5044.55 3846.95 l
-5034.95 3844.55 l
-f*
-5018.15 3899.75 m
-5027.75 3903.35 l
-5004.95 3952.55 l
-4996.55 3948.95 l
-f*
-4996.55 3948.95 m
-5004.95 3952.55 l
-5004.95 3952.55 l
-4996.55 3946.55 l
-f*
-4996.55 3946.55 m
-5004.95 3952.55 l
-4989.35 3972.95 l
-4980.95 3968.15 l
-f*
-4946.15 4013.75 m
-4953.35 4019.75 l
-4920.95 4052.15 l
-4913.75 4046.15 l
-f*
-4913.75 4046.15 m
-4920.95 4052.15 l
-4920.95 4052.15 l
-4914.95 4043.75 l
-f*
-4914.95 4043.75 m
-4920.95 4052.15 l
-4893.35 4071.35 l
-4887.35 4062.95 l
-f*
-4838.15 4091.75 m
-4841.75 4101.35 l
-4808.15 4116.95 l
-4804.55 4108.55 l
-f*
-4804.55 4108.55 m
-4808.15 4116.95 l
-4808.15 4116.95 l
-4805.75 4107.35 l
-f*
-4805.75 4107.35 m
-4808.15 4116.95 l
-4767.35 4127.75 l
-4764.95 4118.15 l
-f*
-4707.35 4127.75 m
-4708.55 4137.35 l
-4679.75 4139.75 l
-4678.55 4130.15 l
-f*
-4678.55 4130.15 m
-4679.75 4139.75 l
-4679.75 4139.75 l
-4679.75 4130.15 l
-f*
-4628.15 4130.15 51.5999 9.59961 re
-f*
-4488.95 4130.15 79.2 9.59961 re
-f*
-4348.55 4130.15 80.3999 9.59961 re
-f*
-4208.15 4130.15 80.3999 9.59961 re
-f*
-4068.95 4130.15 79.2 9.59961 re
-f*
-3928.55 4130.15 80.3999 9.59961 re
-f*
-3788.15 4130.15 80.3999 9.59961 re
-f*
-3648.95 4130.15 79.2 9.59961 re
-f*
-3508.55 4130.15 80.3999 9.59961 re
-f*
-3368.15 4130.15 80.3999 9.59961 re
-f*
-3228.95 4130.15 79.2 9.59961 re
-f*
-3088.55 4130.15 80.3999 9.59961 re
-f*
-2948.15 4130.15 80.3999 9.59961 re
-f*
-2808.95 4130.15 79.2 9.59961 re
-f*
-2668.55 4130.15 80.3999 9.59961 re
-f*
-2528.15 4130.15 80.3999 9.59961 re
-f*
-2388.95 4130.15 79.2 9.59961 re
-f*
-2248.55 4130.15 80.3999 9.59961 re
-f*
-2108.15 4130.15 80.3999 9.59961 re
-f*
-1968.95 4130.15 79.2 9.59961 re
-f*
-1828.55 4130.15 80.3999 9.59961 re
-f*
-1688.15 4130.15 80.3999 9.59961 re
-f*
-1578.95 4130.15 49.2002 9.59961 re
-f*
-0.564706 g
-2262.95 6855.35 m
-2262.95 6965.75 2171.75 7056.95 2060.15 7056.95 c
-1563.35 7056.95 l
-1451.75 7056.95 1360.55 6965.75 1360.55 6855.35 c
-1360.55 6717.35 l
-1360.55 6606.95 1451.75 6515.75 1563.35 6515.75 c
-2060.15 6515.75 l
-2171.75 6515.75 2262.95 6606.95 2262.95 6717.35 c
-f*
-1 g
-2198.15 6912.95 m
-2198.15 7022.15 2109.35 7110.95 1997.75 7110.95 c
-1506.95 7110.95 l
-1396.55 7110.95 1306.55 7022.15 1306.55 6912.95 c
-1306.55 6778.55 l
-1306.55 6669.35 1395.35 6580.55 1506.95 6580.55 c
-1997.75 6580.55 l
-2109.35 6580.55 2198.15 6669.35 2198.15 6778.55 c
-f*
-0 g
-2198.15 6912.95 m
-2198.15 7022.15 2109.35 7110.95 1997.75 7110.95 c
-1506.95 7110.95 l
-1396.55 7110.95 1306.55 7022.15 1306.55 6912.95 c
-1306.55 6778.55 l
-1306.55 6669.35 1395.35 6580.55 1506.95 6580.55 c
-1997.75 6580.55 l
-2109.35 6580.55 2198.15 6669.35 2198.15 6778.55 c
-h
-S
-0.201248 i
-1539.33 6952 m
-1425.22 6952 l
-1425.22 6947 l
-1439.11 6946.2 1443 6943.18 1443 6932.72 c
-1443 6835.32 l
-1443 6824.85 1440.17 6822.64 1425.22 6821.03 c
-1425.22 6816 l
-1497.67 6816 l
-1497.67 6821 l
-1479.15 6821.81 1476 6824.23 1476 6835.32 c
-1476 6882.21 l
-1496.22 6881.81 1503.55 6874.36 1506.32 6851.02 c
-1511.35 6851.02 l
-1511.35 6919.04 l
-1506.32 6919.04 l
-1502.76 6896.1 1495.82 6889.05 1476 6889.05 c
-1476 6935.74 l
-1476 6943.19 1478.52 6945 1488.41 6945 c
-1507.13 6945 1518.8 6941.64 1525.04 6934.74 c
-1529.47 6929.71 1531.68 6924.27 1534.5 6911.59 c
-1539.33 6911.59 l
-h
-1544.96 6816 m
-f*
-1589.19 6909 m
-1550.84 6909 l
-1550.84 6903.95 l
-1559.49 6902.74 1562 6900.12 1562 6892.07 c
-1562 6832.9 l
-1562 6824.65 1559.93 6822.44 1550.84 6820.83 c
-1550.84 6816 l
-1604.37 6816 l
-1604.37 6820.83 l
-1592.09 6821.63 1590 6824.25 1590 6836.73 c
-1590 6874.76 l
-1590 6885.23 1595.49 6893.88 1601.95 6893.88 c
-1603.56 6893.88 1605.37 6892.47 1607.59 6889.25 c
-1611.41 6883.82 1614.43 6882.01 1619.66 6882.01 c
-1627.11 6882.01 1632.34 6887.64 1632.34 6895.29 c
-1632.34 6904.55 1625.5 6911.41 1616.04 6911.41 c
-1606.1 6911.41 1598.54 6906.12 1589.19 6892.27 c
-h
-1634.35 6816 m
-f*
-1729.19 6828.88 m
-1727.18 6826.87 l
-1726.57 6826.26 1725.97 6826.06 1724.96 6826.06 c
-1722.15 6826.06 1721 6827.67 1721 6831.09 c
-1721 6883.62 l
-1721 6900.73 1705.6 6911.42 1680.89 6911.42 c
-1658.15 6911.42 1642.85 6901.06 1642.85 6885.83 c
-1642.85 6877.38 1647.69 6872.55 1655.94 6872.55 c
-1663.99 6872.55 1669.62 6877.38 1669.62 6884.22 c
-1669.62 6887.04 1668.61 6889.66 1666 6892.88 c
-1664.19 6894.89 1663.58 6896.1 1663.58 6897.3 c
-1663.58 6901.53 1669.02 6904.42 1676.26 6904.42 c
-1688.14 6904.42 1693.86 6899.08 1693.86 6887.04 c
-1693.86 6872.35 l
-1669.91 6865.1 1660.29 6861.48 1652.51 6856.45 c
-1643.46 6850.41 1639 6843.37 1639 6834.52 c
-1639 6822.24 1648.27 6813.18 1661.17 6813.18 c
-1672.84 6813.18 1682.1 6817.21 1693.17 6827.27 c
-1695.38 6817.01 1699.81 6813.18 1709.67 6813.18 c
-1718.32 6813.18 1724.56 6816.4 1732.21 6824.65 c
-h
-1693 6836.13 m
-1687.55 6829.89 1683.52 6827.47 1678.68 6827.47 c
-1672.64 6827.47 1668 6832.91 1668 6840.96 c
-1668 6852.63 1676.61 6860.88 1693 6865.31 c
-h
-1734.62 6816 m
-f*
-1776.4 6909 m
-1737.7 6909 l
-1737.7 6903.95 l
-1746.55 6902.74 1749 6900.32 1749 6892.07 c
-1749 6832.9 l
-1749 6824.65 1746.74 6822.44 1737.7 6820.83 c
-1737.7 6816 l
-1786 6816 l
-1786 6820.83 l
-1778.95 6821.84 1777 6824.65 1777 6832.3 c
-1777 6886.03 l
-1777 6887.04 1779.87 6890.66 1782.18 6892.88 c
-1786.4 6896.1 1790.02 6898.42 1793.65 6898.42 c
-1801.5 6898.42 1805 6893.59 1805 6881 c
-1805 6832.3 l
-1805 6824.05 1802.68 6821.43 1794.85 6820.83 c
-1794.85 6816 l
-1841.95 6816 l
-1841.95 6820.83 l
-1834.9 6821.64 1833 6824.65 1833 6832.3 c
-1833 6886.03 l
-1833 6887.04 1835.73 6890.46 1837.92 6892.68 c
-1842.35 6896.1 1845.97 6898.42 1849.59 6898.42 c
-1857.24 6898.42 1860 6893.38 1860 6881 c
-1860 6832.3 l
-1860 6823.85 1857.85 6821.43 1850.4 6820.83 c
-1850.4 6816 l
-1898.3 6816 l
-1898.3 6821 l
-1890.45 6821.4 1888 6823.78 1888 6832.3 c
-1888 6882.81 l
-1888 6900.12 1877.43 6911.42 1861.07 6911.42 c
-1849.59 6911.42 1841.95 6906.73 1831.48 6893.68 c
-1825.44 6906.36 1818.4 6911.42 1805.72 6911.42 c
-1792.95 6911.42 1783.98 6905.91 1776.4 6893.68 c
-h
-1901.64 6816 m
-f*
-1979.9 6841.16 m
-1971.65 6831.29 1965.61 6827.18 1956.96 6827.18 c
-1949.31 6827.18 1943.27 6830.77 1939.25 6837.94 c
-1935.43 6844.54 1933.82 6851.56 1933.01 6866 c
-1983.73 6866 l
-1982.52 6882.36 1979.5 6891.43 1973.26 6899.12 c
-1966.82 6906.96 1957.36 6911.42 1946.09 6911.42 c
-1920.94 6911.42 1904.03 6891.4 1904.03 6861.88 c
-1904.03 6832.5 1920.53 6813.18 1945.49 6813.18 c
-1961.79 6813.18 1971.65 6819.42 1984.73 6838.34 c
-h
-1932 6873 m
-1932.61 6896.96 1936.23 6904.42 1946.09 6904.42 c
-1951.93 6904.42 1955.55 6901.38 1957.16 6895.49 c
-1958.17 6891.67 1958.57 6886.03 1958.97 6875.77 c
-1958.97 6873 l
-h
-1988.35 6816 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -6816]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4722.95 6054.95 m
-4722.95 6166.55 4631.75 6257.75 4520.15 6257.75 c
-4023.35 6257.75 l
-3911.75 6257.75 3820.55 6166.55 3820.55 6054.95 c
-3820.55 5918.15 l
-3820.55 5806.55 3911.75 5715.35 4023.35 5715.35 c
-4520.15 5715.35 l
-4631.75 5715.35 4722.95 5806.55 4722.95 5918.15 c
-f*
-1 g
-4653.35 6111.35 m
-4653.35 6219.35 4564.55 6306.95 4455.35 6306.95 c
-3969.35 6306.95 l
-3860.15 6306.95 3771.35 6219.35 3771.35 6111.35 c
-3771.35 5980.55 l
-3771.35 5872.55 3860.15 5784.95 3969.35 5784.95 c
-4455.35 5784.95 l
-4564.55 5784.95 4653.35 5872.55 4653.35 5980.55 c
-f*
-16 w
-0 g
-4653.35 6111.35 m
-4653.35 6219.35 4564.55 6306.95 4455.35 6306.95 c
-3969.35 6306.95 l
-3860.15 6306.95 3771.35 6219.35 3771.35 6111.35 c
-3771.35 5980.55 l
-3771.35 5872.55 3860.15 5784.95 3969.35 5784.95 c
-4455.35 5784.95 l
-4564.55 5784.95 4653.35 5872.55 4653.35 5980.55 c
-h
-S
-0.201248 i
-3999.33 6153 m
-3885.22 6153 l
-3885.22 6148 l
-3899.11 6147.2 3903 6144.18 3903 6133.72 c
-3903 6036.32 l
-3903 6025.85 3900.17 6023.64 3885.22 6022.03 c
-3885.22 6017 l
-3957.67 6017 l
-3957.67 6022 l
-3939.15 6022.81 3936 6025.23 3936 6036.32 c
-3936 6083.21 l
-3956.22 6082.81 3963.55 6075.36 3966.32 6052.02 c
-3971.35 6052.02 l
-3971.35 6120.04 l
-3966.32 6120.04 l
-3962.76 6097.1 3955.82 6090.05 3936 6090.05 c
-3936 6136.74 l
-3936 6144.19 3938.52 6146 3948.41 6146 c
-3967.13 6146 3978.8 6142.64 3985.04 6135.74 c
-3989.47 6130.71 3991.68 6125.27 3994.5 6112.59 c
-3999.33 6112.59 l
-h
-4004.96 6017 m
-f*
-4049.19 6110 m
-4010.84 6110 l
-4010.84 6104.95 l
-4019.49 6103.74 4022 6101.12 4022 6093.07 c
-4022 6033.9 l
-4022 6025.65 4019.93 6023.44 4010.84 6021.83 c
-4010.84 6017 l
-4064.37 6017 l
-4064.37 6021.83 l
-4052.09 6022.63 4050 6025.25 4050 6037.73 c
-4050 6075.76 l
-4050 6086.23 4055.49 6094.88 4061.95 6094.88 c
-4063.56 6094.88 4065.37 6093.47 4067.59 6090.25 c
-4071.41 6084.82 4074.43 6083.01 4079.66 6083.01 c
-4087.11 6083.01 4092.34 6088.64 4092.34 6096.29 c
-4092.34 6105.55 4085.5 6112.41 4076.04 6112.41 c
-4066.1 6112.41 4058.54 6107.12 4049.19 6093.27 c
-h
-4094.35 6017 m
-f*
-4189.19 6029.88 m
-4187.18 6027.87 l
-4186.57 6027.26 4185.97 6027.06 4184.96 6027.06 c
-4182.15 6027.06 4181 6028.67 4181 6032.09 c
-4181 6084.62 l
-4181 6101.73 4165.6 6112.42 4140.89 6112.42 c
-4118.15 6112.42 4102.85 6102.06 4102.85 6086.83 c
-4102.85 6078.38 4107.69 6073.55 4115.94 6073.55 c
-4123.99 6073.55 4129.62 6078.38 4129.62 6085.22 c
-4129.62 6088.04 4128.61 6090.66 4126 6093.88 c
-4124.19 6095.89 4123.58 6097.1 4123.58 6098.3 c
-4123.58 6102.53 4129.02 6105.42 4136.26 6105.42 c
-4148.14 6105.42 4153.86 6100.08 4153.86 6088.04 c
-4153.86 6073.35 l
-4129.91 6066.1 4120.29 6062.48 4112.51 6057.45 c
-4103.46 6051.41 4099 6044.37 4099 6035.52 c
-4099 6023.24 4108.27 6014.18 4121.17 6014.18 c
-4132.84 6014.18 4142.1 6018.21 4153.17 6028.27 c
-4155.38 6018.01 4159.81 6014.18 4169.67 6014.18 c
-4178.32 6014.18 4184.56 6017.4 4192.21 6025.65 c
-h
-4153 6037.13 m
-4147.55 6030.89 4143.52 6028.47 4138.68 6028.47 c
-4132.64 6028.47 4128 6033.91 4128 6041.96 c
-4128 6053.63 4136.61 6061.88 4153 6066.31 c
-h
-4194.62 6017 m
-f*
-4236.4 6110 m
-4197.7 6110 l
-4197.7 6104.95 l
-4206.55 6103.74 4209 6101.32 4209 6093.07 c
-4209 6033.9 l
-4209 6025.65 4206.74 6023.44 4197.7 6021.83 c
-4197.7 6017 l
-4246 6017 l
-4246 6021.83 l
-4238.95 6022.84 4237 6025.65 4237 6033.3 c
-4237 6087.03 l
-4237 6088.04 4239.87 6091.66 4242.18 6093.88 c
-4246.4 6097.1 4250.02 6099.42 4253.65 6099.42 c
-4261.5 6099.42 4265 6094.59 4265 6082 c
-4265 6033.3 l
-4265 6025.05 4262.68 6022.43 4254.85 6021.83 c
-4254.85 6017 l
-4301.95 6017 l
-4301.95 6021.83 l
-4294.9 6022.64 4293 6025.65 4293 6033.3 c
-4293 6087.03 l
-4293 6088.04 4295.73 6091.46 4297.92 6093.68 c
-4302.35 6097.1 4305.97 6099.42 4309.59 6099.42 c
-4317.24 6099.42 4320 6094.38 4320 6082 c
-4320 6033.3 l
-4320 6024.85 4317.85 6022.43 4310.4 6021.83 c
-4310.4 6017 l
-4358.3 6017 l
-4358.3 6022 l
-4350.45 6022.4 4348 6024.78 4348 6033.3 c
-4348 6083.81 l
-4348 6101.12 4337.43 6112.42 4321.07 6112.42 c
-4309.59 6112.42 4301.95 6107.73 4291.48 6094.68 c
-4285.44 6107.36 4278.4 6112.42 4265.72 6112.42 c
-4252.95 6112.42 4243.98 6106.91 4236.4 6094.68 c
-h
-4361.64 6017 m
-f*
-4439.9 6042.16 m
-4431.65 6032.29 4425.61 6028.18 4416.96 6028.18 c
-4409.31 6028.18 4403.27 6031.77 4399.25 6038.94 c
-4395.43 6045.54 4393.82 6052.56 4393.01 6067 c
-4443.73 6067 l
-4442.52 6083.36 4439.5 6092.43 4433.26 6100.12 c
-4426.82 6107.96 4417.36 6112.42 4406.09 6112.42 c
-4380.94 6112.42 4364.03 6092.4 4364.03 6062.88 c
-4364.03 6033.5 4380.53 6014.18 4405.49 6014.18 c
-4421.79 6014.18 4431.65 6020.42 4444.73 6039.34 c
-h
-4392 6074 m
-4392.61 6097.96 4396.23 6105.42 4406.09 6105.42 c
-4411.93 6105.42 4415.55 6102.38 4417.16 6096.49 c
-4418.17 6092.67 4418.57 6087.03 4418.97 6076.77 c
-4418.97 6074 l
-h
-4448.35 6017 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4484 -6015]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3794.15 5348.15 m
-3794.15 5458.55 3702.95 5549.75 3591.35 5549.75 c
-3095.75 5549.75 l
-2984.15 5549.75 2892.95 5458.55 2892.95 5348.15 c
-2892.95 5210.15 l
-2892.95 5099.75 2984.15 5008.55 3095.75 5008.55 c
-3591.35 5008.55 l
-3702.95 5008.55 3794.15 5099.75 3794.15 5210.15 c
-f*
-1 g
-3729.35 5405.75 m
-3729.35 5514.95 3640.55 5603.75 3530.15 5603.75 c
-3039.35 5603.75 l
-2927.75 5603.75 2838.95 5514.95 2838.95 5405.75 c
-2838.95 5271.35 l
-2838.95 5162.15 2927.75 5073.35 3039.35 5073.35 c
-3528.95 5073.35 l
-3640.55 5073.35 3729.35 5162.15 3729.35 5271.35 c
-f*
-8 w
-0 g
-3729.35 5405.75 m
-3729.35 5514.95 3640.55 5603.75 3530.15 5603.75 c
-3039.35 5603.75 l
-2927.75 5603.75 2838.95 5514.95 2838.95 5405.75 c
-2838.95 5271.35 l
-2838.95 5162.15 2927.75 5073.35 3039.35 5073.35 c
-3528.95 5073.35 l
-3640.55 5073.35 3729.35 5162.15 3729.35 5271.35 c
-h
-S
-0.201248 i
-3082.33 5445 m
-2968.22 5445 l
-2968.22 5440 l
-2982.11 5439.2 2986 5436.18 2986 5425.72 c
-2986 5328.32 l
-2986 5317.85 2983.17 5315.64 2968.22 5314.03 c
-2968.22 5309 l
-3040.67 5309 l
-3040.67 5314 l
-3022.15 5314.81 3019 5317.23 3019 5328.32 c
-3019 5375.21 l
-3039.22 5374.81 3046.55 5367.36 3049.32 5344.02 c
-3054.35 5344.02 l
-3054.35 5412.04 l
-3049.32 5412.04 l
-3045.76 5389.1 3038.82 5382.05 3019 5382.05 c
-3019 5428.74 l
-3019 5436.19 3021.52 5438 3031.41 5438 c
-3050.13 5438 3061.8 5434.64 3068.04 5427.74 c
-3072.47 5422.71 3074.68 5417.27 3077.5 5404.59 c
-3082.33 5404.59 l
-h
-3087.96 5309 m
-f*
-3131.19 5402 m
-3092.84 5402 l
-3092.84 5396.95 l
-3101.49 5395.74 3104 5393.12 3104 5385.07 c
-3104 5325.9 l
-3104 5317.65 3101.93 5315.44 3092.84 5313.83 c
-3092.84 5309 l
-3146.37 5309 l
-3146.37 5313.83 l
-3134.09 5314.63 3132 5317.25 3132 5329.73 c
-3132 5367.76 l
-3132 5378.23 3137.49 5386.88 3143.95 5386.88 c
-3145.56 5386.88 3147.37 5385.47 3149.59 5382.25 c
-3153.41 5376.82 3156.43 5375.01 3161.66 5375.01 c
-3169.11 5375.01 3174.34 5380.64 3174.34 5388.29 c
-3174.34 5397.55 3167.5 5404.41 3158.04 5404.41 c
-3148.1 5404.41 3140.54 5399.12 3131.19 5385.27 c
-h
-3176.35 5309 m
-f*
-3271.19 5321.88 m
-3269.18 5319.87 l
-3268.57 5319.26 3267.97 5319.06 3266.96 5319.06 c
-3264.15 5319.06 3263 5320.67 3263 5324.09 c
-3263 5376.62 l
-3263 5393.73 3247.6 5404.42 3222.89 5404.42 c
-3200.15 5404.42 3184.85 5394.06 3184.85 5378.83 c
-3184.85 5370.38 3189.69 5365.55 3197.94 5365.55 c
-3205.99 5365.55 3211.62 5370.38 3211.62 5377.22 c
-3211.62 5380.04 3210.61 5382.66 3208 5385.88 c
-3206.19 5387.89 3205.58 5389.1 3205.58 5390.3 c
-3205.58 5394.53 3211.02 5397.42 3218.26 5397.42 c
-3230.14 5397.42 3235.86 5392.08 3235.86 5380.04 c
-3235.86 5365.35 l
-3211.91 5358.1 3202.29 5354.48 3194.51 5349.45 c
-3185.46 5343.41 3181 5336.37 3181 5327.52 c
-3181 5315.24 3190.27 5306.18 3203.17 5306.18 c
-3214.84 5306.18 3224.1 5310.21 3235.17 5320.27 c
-3237.38 5310.01 3241.81 5306.18 3251.67 5306.18 c
-3260.32 5306.18 3266.56 5309.4 3274.21 5317.65 c
-h
-3235 5329.13 m
-3229.55 5322.89 3225.52 5320.47 3220.68 5320.47 c
-3214.64 5320.47 3210 5325.91 3210 5333.96 c
-3210 5345.63 3218.61 5353.88 3235 5358.31 c
-h
-3276.62 5309 m
-f*
-3318.4 5402 m
-3279.7 5402 l
-3279.7 5396.95 l
-3288.55 5395.74 3291 5393.32 3291 5385.07 c
-3291 5325.9 l
-3291 5317.65 3288.74 5315.44 3279.7 5313.83 c
-3279.7 5309 l
-3328 5309 l
-3328 5313.83 l
-3320.95 5314.84 3319 5317.65 3319 5325.3 c
-3319 5379.03 l
-3319 5380.04 3321.87 5383.66 3324.18 5385.88 c
-3328.4 5389.1 3332.02 5391.42 3335.65 5391.42 c
-3343.5 5391.42 3347 5386.59 3347 5374 c
-3347 5325.3 l
-3347 5317.05 3344.68 5314.43 3336.85 5313.83 c
-3336.85 5309 l
-3383.95 5309 l
-3383.95 5313.83 l
-3376.9 5314.64 3375 5317.65 3375 5325.3 c
-3375 5379.03 l
-3375 5380.04 3377.73 5383.46 3379.92 5385.68 c
-3384.35 5389.1 3387.97 5391.42 3391.59 5391.42 c
-3399.24 5391.42 3402 5386.38 3402 5374 c
-3402 5325.3 l
-3402 5316.85 3399.85 5314.43 3392.4 5313.83 c
-3392.4 5309 l
-3440.3 5309 l
-3440.3 5314 l
-3432.45 5314.4 3430 5316.78 3430 5325.3 c
-3430 5375.81 l
-3430 5393.12 3419.43 5404.42 3403.07 5404.42 c
-3391.59 5404.42 3383.95 5399.73 3373.48 5386.68 c
-3367.44 5399.36 3360.4 5404.42 3347.72 5404.42 c
-3334.95 5404.42 3325.98 5398.91 3318.4 5386.68 c
-h
-3443.64 5309 m
-f*
-3523.9 5334.16 m
-3515.65 5324.29 3509.61 5320.18 3500.96 5320.18 c
-3493.31 5320.18 3487.27 5323.77 3483.25 5330.94 c
-3479.43 5337.54 3477.82 5344.56 3477.01 5359 c
-3527.73 5359 l
-3526.52 5375.36 3523.5 5384.43 3517.26 5392.12 c
-3510.82 5399.96 3501.36 5404.42 3490.09 5404.42 c
-3464.94 5404.42 3448.03 5384.4 3448.03 5354.88 c
-3448.03 5325.5 3464.53 5306.18 3489.49 5306.18 c
-3505.79 5306.18 3515.65 5312.42 3528.73 5331.34 c
-h
-3476 5366 m
-3476.61 5389.96 3480.23 5397.42 3490.09 5397.42 c
-3495.93 5397.42 3499.55 5394.38 3501.16 5388.49 c
-3502.17 5384.67 3502.57 5379.03 3502.97 5368.77 c
-3502.97 5366 l
-h
-3532.35 5309 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -5309]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-1751.75 6550.55 m
-1751.75 6558.95 1751.75 6558.95 1751.75 6550.55 c
-1751.75 6402.95 1791.35 6261.35 1863.35 6160.55 c
-S
-1804.55 6166.55 m
-1853.75 6182.15 l
-1878.95 6227.75 l
-1940.15 6080.15 l
-f*
-2244.95 5584.55 m
-2334.95 5466.95 2519.75 5382.95 2740.55 5361.35 c
-S
-2699.75 5318.15 m
-2721.35 5364.95 l
-2705.75 5412.95 l
-2854.55 5356.55 l
-f*
-2831.75 6964.55 m
-2729.75 7064.15 2584.55 7121.75 2430.95 7121.75 c
-2326.55 7121.75 2224.55 7095.35 2136.95 7044.95 c
-S
-2766.95 6958.55 m
-2814.95 6974.15 l
-2838.95 7019.75 l
-2902.55 6873.35 l
-f*
-3186.95 6388.55 m
-3275.75 6214.55 3440.15 6089.75 3635.75 6050.15 c
-S
-3591.35 6010.55 m
-3616.55 6056.15 l
-3604.55 6106.55 l
-3748.55 6035.75 l
-f*
-0.564706 g
-3638.15 6564.95 m
-3503.75 6600.95 l
-3599.75 6657.35 l
-3446.15 6665.75 l
-3488.15 6736.55 l
-3340.55 6716.15 l
-3323.75 6786.95 l
-3203.75 6742.55 l
-3128.15 6806.15 l
-3052.55 6742.55 l
-2932.55 6786.95 l
-2914.55 6716.15 l
-2765.75 6736.55 l
-2810.15 6665.75 l
-2656.55 6657.35 l
-2752.55 6600.95 l
-2616.95 6564.95 l
-2752.55 6530.15 l
-2656.55 6473.75 l
-2810.15 6464.15 l
-2765.75 6394.55 l
-2914.55 6414.95 l
-2932.55 6342.95 l
-3052.55 6388.55 l
-3128.15 6324.95 l
-3203.75 6388.55 l
-3323.75 6342.95 l
-3340.55 6414.95 l
-3488.15 6394.55 l
-3446.15 6464.15 l
-3599.75 6473.75 l
-3503.75 6530.15 l
-f*
-1 g
-3578.15 6624.95 m
-3443.75 6660.95 l
-3539.75 6717.35 l
-3386.15 6725.75 l
-3428.15 6796.55 l
-3280.55 6776.15 l
-3263.75 6846.95 l
-3143.75 6802.55 l
-3068.15 6866.15 l
-2992.55 6802.55 l
-2872.55 6846.95 l
-2854.55 6776.15 l
-2705.75 6796.55 l
-2750.15 6725.75 l
-2596.55 6717.35 l
-2692.55 6660.95 l
-2556.95 6624.95 l
-2692.55 6590.15 l
-2596.55 6533.75 l
-2750.15 6524.15 l
-2705.75 6454.55 l
-2854.55 6474.95 l
-2872.55 6402.95 l
-2992.55 6448.55 l
-3068.15 6384.95 l
-3143.75 6448.55 l
-3263.75 6402.95 l
-3280.55 6474.95 l
-3428.15 6454.55 l
-3386.15 6524.15 l
-3539.75 6533.75 l
-3443.75 6590.15 l
-f*
-0 g
-3578.15 6624.95 m
-3443.75 6660.95 l
-3539.75 6717.35 l
-3386.15 6725.75 l
-3428.15 6796.55 l
-3280.55 6776.15 l
-3263.75 6846.95 l
-3143.75 6802.55 l
-3068.15 6866.15 l
-2992.55 6802.55 l
-2872.55 6846.95 l
-2854.55 6776.15 l
-2705.75 6796.55 l
-2750.15 6725.75 l
-2596.55 6717.35 l
-2692.55 6660.95 l
-2556.95 6624.95 l
-2692.55 6590.15 l
-2596.55 6533.75 l
-2750.15 6524.15 l
-2705.75 6454.55 l
-2854.55 6474.95 l
-2872.55 6402.95 l
-2992.55 6448.55 l
-3068.15 6384.95 l
-3143.75 6448.55 l
-3263.75 6402.95 l
-3280.55 6474.95 l
-3428.15 6454.55 l
-3386.15 6524.15 l
-3539.75 6533.75 l
-3443.75 6590.15 l
-3578.15 6624.95 l
-3539.75 6624.95 l
-3417.35 6593.75 l
-3506.15 6540.95 l
-3368.15 6533.75 l
-3408.95 6467.75 l
-3273.35 6485.75 l
-3256.55 6417.35 l
-3141.35 6459.35 l
-3068.15 6396.95 l
-2994.95 6459.35 l
-2879.75 6417.35 l
-2861.75 6485.75 l
-2726.15 6467.75 l
-2766.95 6533.75 l
-2630.15 6540.95 l
-2718.95 6593.75 l
-2596.55 6624.95 l
-2717.75 6657.35 l
-2630.15 6710.15 l
-2766.95 6717.35 l
-2726.15 6783.35 l
-2861.75 6764.15 l
-2879.75 6833.75 l
-2994.95 6790.55 l
-3068.15 6852.95 l
-3141.35 6790.55 l
-3256.55 6833.75 l
-3273.35 6764.15 l
-3408.95 6783.35 l
-3368.15 6717.35 l
-3506.15 6710.15 l
-3417.35 6657.35 l
-3539.75 6624.95 l
-3578.15 6624.95 l
-f*
-0.2 i
-2890.08 6676.76 m
-2870.08 6602.52 l
-2867.52 6593.88 2864.48 6591.64 2854.08 6591 c
-2854.08 6587 l
-2904 6587 l
-2904 6591 l
-2894.72 6591.48 2892.48 6592.76 2892.48 6597.88 c
-2892.48 6599.64 2892.8 6601.4 2893.76 6605.08 c
-2893.92 6605.88 l
-2894.08 6606.68 l
-2913.76 6678.52 l
-2916.16 6686.84 2918.56 6689.08 2926.72 6690.04 c
-2926.72 6694 l
-2892.8 6694 l
-2843.2 6617.24 l
-2834.56 6694 l
-2799.2 6694 l
-2799.2 6690 l
-2809.28 6689.52 2810.72 6688.89 2810.72 6684.44 c
-2810.72 6682.2 2810.08 6679.32 2808.96 6675.16 c
-2791.52 6615.48 l
-2785.12 6594.68 2784 6592.92 2775.36 6591 c
-2775.36 6587 l
-2808.48 6587 l
-2808.48 6591 l
-2798.24 6592.28 2795.68 6594.2 2795.68 6600.76 c
-2795.68 6603.48 2796.48 6607.48 2798.72 6615.48 c
-2814.88 6674.52 l
-2825.6 6585.08 l
-2830.08 6585.08 l
-h
-2922.24 6587 m
-f*
-2991.44 6607.32 m
-2984.88 6598.52 2982.48 6595.76 2979.92 6595.76 c
-2978.64 6595.76 2978 6596.86 2978 6598.52 c
-2978 6602.52 2979.44 6609.08 2983.44 6622.2 c
-2994.8 6659.96 l
-2977.04 6658.84 l
-2974.16 6649.4 l
-2972.72 6657.56 2969.2 6661.08 2962.32 6661.08 c
-2942.64 6661.08 2919 6630.27 2919 6605.24 c
-2919 6593.08 2925.74 6584.92 2935.92 6584.92 c
-2945.68 6584.92 2953.04 6590.68 2962.16 6606.04 c
-2960.24 6599.48 2960 6597.56 2960 6595.32 c
-2960 6589.4 2964.76 6584.76 2970.64 6584.76 c
-2978.16 6584.76 2985.52 6591 2994.8 6604.92 c
-h
-2964.56 6654.2 m
-2968.08 6653.88 2970.56 6651 2970.56 6646.68 c
-2970.56 6637.08 2965.24 6619.32 2958.96 6608.28 c
-2954.64 6600.44 2949.84 6595.92 2945.52 6595.92 c
-2941.36 6595.92 2938 6599.75 2938 6604.92 c
-2938 6613.24 2943.42 6629.24 2950.16 6641.08 c
-2954.96 6649.56 2960.24 6654.52 2964.56 6654.2 c
-h
-3002 6587 m
-f*
-3036.56 6660.92 m
-3020.24 6658.36 3014 6657.4 3005.68 6656.44 c
-3005.68 6652 l
-3012.88 6651.69 3014.32 6651.07 3014.32 6648.12 c
-3014.32 6646.52 3013.04 6640.76 3010.8 6632.44 c
-2994.8 6570.36 l
-2991.76 6559.8 2990.48 6558.84 2982.8 6559 c
-2982.8 6554 l
-3022.64 6554 l
-3022.64 6559 l
-3014.64 6559.14 3012.24 6560.16 3012.24 6563.64 c
-3012.24 6565.88 3013.36 6570.68 3016.4 6581.88 c
-3017.52 6585.72 3017.52 6586.04 3018.16 6588.44 c
-3023.76 6585.56 3025.68 6584.92 3029.04 6584.92 c
-3050.8 6584.92 3073.36 6613.88 3073.36 6641.56 c
-3073.36 6653.4 3066.64 6661.08 3056.08 6661.08 c
-3046.96 6661.08 3039.92 6655.92 3030.48 6642.52 c
-h
-3047.12 6649.56 m
-3051.28 6649.24 3053.68 6645.56 3053.36 6640.44 c
-3052.72 6629.88 3047.6 6614.04 3041.84 6603.64 c
-3036.88 6595 3031.76 6589.92 3026.32 6589.92 c
-3022.8 6589.92 3020.08 6592.75 3020.08 6596.28 c
-3020.08 6599 3021.84 6605.56 3026.16 6620.12 c
-3029.68 6631.8 3031.12 6635.8 3033.52 6639.48 c
-3037.52 6645.72 3042.96 6649.88 3047.12 6649.56 c
-h
-3082 6587 m
-f*
-3117.56 6660.92 m
-3101.24 6658.36 3095 6657.4 3086.68 6656.44 c
-3086.68 6652 l
-3093.88 6651.69 3095.32 6651.07 3095.32 6648.12 c
-3095.32 6646.52 3094.04 6640.76 3091.8 6632.44 c
-3075.8 6570.36 l
-3072.76 6559.8 3071.48 6558.84 3063.8 6559 c
-3063.8 6554 l
-3103.64 6554 l
-3103.64 6559 l
-3095.64 6559.14 3093.24 6560.16 3093.24 6563.64 c
-3093.24 6565.88 3094.36 6570.68 3097.4 6581.88 c
-3098.52 6585.72 3098.52 6586.04 3099.16 6588.44 c
-3104.76 6585.56 3106.68 6584.92 3110.04 6584.92 c
-3131.8 6584.92 3154.36 6613.88 3154.36 6641.56 c
-3154.36 6653.4 3147.64 6661.08 3137.08 6661.08 c
-3127.96 6661.08 3120.92 6655.92 3111.48 6642.52 c
-h
-3128.12 6649.56 m
-3132.28 6649.24 3134.68 6645.56 3134.36 6640.44 c
-3133.72 6629.88 3128.6 6614.04 3122.84 6603.64 c
-3117.88 6595 3112.76 6589.92 3107.32 6589.92 c
-3103.8 6589.92 3101.08 6592.75 3101.08 6596.28 c
-3101.08 6599 3102.84 6605.56 3107.16 6620.12 c
-3110.68 6631.8 3112.12 6635.8 3114.52 6639.48 c
-3118.52 6645.72 3123.96 6649.88 3128.12 6649.56 c
-h
-3163 6587 m
-f*
-3196.56 6609.56 m
-3194.32 6606.36 l
-3190.16 6600.12 3186.48 6596.56 3184.08 6596.56 c
-3182.8 6596.56 3182 6597.77 3182 6599.16 c
-3182 6600.6 3182.62 6604.76 3183.12 6607.48 c
-3197.68 6660.92 l
-3189.22 6659 3178.26 6657.4 3166.04 6656.44 c
-3166.04 6652 l
-3167.44 6652 l
-3172.24 6652 3175.48 6650.44 3175.48 6647.48 c
-3175.48 6646.2 3174.71 6643.8 3173.68 6641.08 c
-3164.4 6606.68 l
-3163.12 6602.04 3163 6597.88 3163 6595.64 c
-3163 6589.56 3167.2 6585.56 3173.36 6585.56 c
-3182.96 6585.56 3188.88 6590.36 3200.08 6607.32 c
-h
-3192.88 6696.4 m
-3187.44 6696.4 3183 6691.46 3183 6686.04 c
-3183 6679.8 3187.26 6675.4 3193.04 6675.4 c
-3199.12 6675.4 3204 6679.86 3204 6685.56 c
-3204 6691.48 3199 6696.4 3192.88 6696.4 c
-h
-3206.48 6587 m
-f*
-3281.36 6608.6 m
-3274.96 6598.68 3272.88 6596.56 3270.16 6596.56 c
-3268.88 6596.56 3268 6597.63 3268 6599.16 c
-3268 6600.76 3268.94 6604.12 3271.92 6613.08 c
-3277.68 6630.52 l
-3280.24 6638.04 3282 6645.08 3282 6648.92 c
-3282 6656.76 3277.78 6661.08 3270.16 6661.08 c
-3264.24 6661.08 3258.48 6658.62 3254.16 6654.36 c
-3248.24 6648.76 3245.2 6644.92 3234.48 6629.08 c
-3244.72 6660.76 l
-3234.48 6658.52 3221.68 6656.92 3212.72 6656.6 c
-3212.72 6651.8 l
-3219.44 6651.65 3221.36 6650.92 3221.36 6648.12 c
-3221.36 6646.2 3219.12 6637.72 3214 6619.64 c
-3210.32 6606.68 3209.2 6602.52 3205.04 6587 c
-3224.4 6587 l
-3231.92 6614.68 3237.68 6628.6 3247.6 6641.56 c
-3250.8 6645.88 3255.76 6649.08 3258.64 6649.08 c
-3260.72 6649.08 3263 6647.63 3263 6646.04 c
-3263 6645.56 3262.54 6644.28 3261.84 6642.68 c
-3253.04 6616.12 l
-3250.48 6608.44 3249 6599.32 3249 6595.16 c
-3249 6589.08 3252.84 6585.56 3259.44 6585.56 c
-3269.04 6585.56 3275.6 6591 3284.88 6606.52 c
-h
-3294.96 6587 m
-f*
-3372.48 6656 m
-3354.72 6656 l
-3349.28 6659.58 3344.48 6661.08 3337.12 6661.08 c
-3317.44 6661.08 3301 6648.05 3301 6631.8 c
-3301 6623.64 3305.35 6617.88 3314.4 6614.2 c
-3301.28 6606.84 3299 6604.6 3299 6598.68 c
-3299 6593.56 3301.89 6590.52 3308.96 6588.12 c
-3299.04 6585.72 3295.84 6584.44 3292 6581.4 c
-3289.44 6579.16 3288 6575.32 3288 6571.48 c
-3288 6561.08 3299.56 6555 3317.76 6555 c
-3340.32 6555 3356 6564.72 3356 6578.52 c
-3356 6588.28 3349.6 6593.56 3332.16 6598.52 c
-3323.68 6600.92 l
-3318.56 6602.36 3315 6604.6 3315 6607 c
-3315 6609.56 3317.68 6612.28 3320 6612.28 c
-3320.8 6612.28 3321.92 6612.24 3323.2 6612.12 c
-3324.96 6611.64 3326.24 6611 3328.16 6611 c
-3335.2 6611 3342.4 6613.09 3348.48 6616.92 c
-3357.76 6622.2 3363 6630.36 3363 6639.96 c
-3363 6642.64 3362.59 6644.32 3361.76 6647 c
-3372.48 6647 l
-h
-3314.4 6586.04 m
-3316.32 6585.88 3328.48 6581.72 3332 6580.12 c
-3336.48 6577.88 3339 6575.16 3339 6571 c
-3339 6563.96 3331.8 6560 3319.36 6560 c
-3308.96 6560 3302 6565.1 3302 6572.44 c
-3302 6575.48 3303.32 6578.2 3306.24 6581.24 c
-3308.32 6583.32 3313.12 6586.2 3314.4 6586.04 c
-h
-3336.8 6656.08 m
-3340.96 6656.08 3344 6652.19 3344 6646.52 c
-3344 6641.08 3342.08 6633.4 3339.36 6627.48 c
-3336 6620.12 3331.84 6616 3326.88 6616 c
-3322.56 6616 3320 6619.52 3320 6625.88 c
-3320 6632.28 3322.79 6642.04 3326.24 6648.12 c
-3329.28 6653.4 3332.64 6656.08 3336.8 6656.08 c
-h
-3376 6587 m
-f*
-1 i
-0.564706 g
-2708.15 5769.35 m
-2573.75 5806.55 l
-2669.75 5861.75 l
-2516.15 5871.35 l
-2558.15 5940.95 l
-2410.55 5920.55 l
-2393.75 5992.55 l
-2273.75 5946.95 l
-2198.15 6010.55 l
-2122.55 5946.95 l
-2002.55 5992.55 l
-1984.55 5920.55 l
-1835.75 5940.95 l
-1880.15 5871.35 l
-1726.55 5861.75 l
-1822.55 5806.55 l
-1686.95 5769.35 l
-1822.55 5734.55 l
-1726.55 5678.15 l
-1880.15 5669.75 l
-1835.75 5600.15 l
-1984.55 5619.35 l
-2002.55 5548.55 l
-2122.55 5592.95 l
-2198.15 5529.35 l
-2273.75 5592.95 l
-2393.75 5548.55 l
-2410.55 5619.35 l
-2558.15 5600.15 l
-2516.15 5669.75 l
-2669.75 5678.15 l
-2573.75 5734.55 l
-f*
-1 g
-2648.15 5829.35 m
-2513.75 5866.55 l
-2609.75 5921.75 l
-2456.15 5931.35 l
-2498.15 6000.95 l
-2350.55 5980.55 l
-2333.75 6052.55 l
-2213.75 6006.95 l
-2138.15 6070.55 l
-2062.55 6006.95 l
-1942.55 6052.55 l
-1924.55 5980.55 l
-1775.75 6000.95 l
-1820.15 5931.35 l
-1666.55 5921.75 l
-1762.55 5866.55 l
-1626.95 5829.35 l
-1762.55 5794.55 l
-1666.55 5738.15 l
-1820.15 5729.75 l
-1775.75 5660.15 l
-1924.55 5679.35 l
-1942.55 5608.55 l
-2062.55 5652.95 l
-2138.15 5589.35 l
-2213.75 5652.95 l
-2333.75 5608.55 l
-2350.55 5679.35 l
-2498.15 5660.15 l
-2456.15 5729.75 l
-2609.75 5738.15 l
-2513.75 5794.55 l
-f*
-0 g
-2648.15 5829.35 m
-2513.75 5866.55 l
-2609.75 5921.75 l
-2456.15 5931.35 l
-2498.15 6000.95 l
-2350.55 5980.55 l
-2333.75 6052.55 l
-2213.75 6006.95 l
-2138.15 6070.55 l
-2062.55 6006.95 l
-1942.55 6052.55 l
-1924.55 5980.55 l
-1775.75 6000.95 l
-1820.15 5931.35 l
-1666.55 5921.75 l
-1762.55 5866.55 l
-1626.95 5829.35 l
-1762.55 5794.55 l
-1666.55 5738.15 l
-1820.15 5729.75 l
-1775.75 5660.15 l
-1924.55 5679.35 l
-1942.55 5608.55 l
-2062.55 5652.95 l
-2138.15 5589.35 l
-2213.75 5652.95 l
-2333.75 5608.55 l
-2350.55 5679.35 l
-2498.15 5660.15 l
-2456.15 5729.75 l
-2609.75 5738.15 l
-2513.75 5794.55 l
-2648.15 5829.35 l
-2609.75 5829.35 l
-2487.35 5798.15 l
-2576.15 5746.55 l
-2438.15 5738.15 l
-2478.95 5672.15 l
-2343.35 5691.35 l
-2326.55 5621.75 l
-2211.35 5664.95 l
-2138.15 5602.55 l
-2064.95 5664.95 l
-1949.75 5621.75 l
-1931.75 5691.35 l
-1796.15 5672.15 l
-1836.95 5738.15 l
-1700.15 5746.55 l
-1788.95 5798.15 l
-1666.55 5829.35 l
-1787.75 5861.75 l
-1700.15 5914.55 l
-1836.95 5921.75 l
-1796.15 5988.95 l
-1931.75 5969.75 l
-1949.75 6038.15 l
-2064.95 5996.15 l
-2138.15 6058.55 l
-2211.35 5996.15 l
-2326.55 6038.15 l
-2343.35 5969.75 l
-2478.95 5988.95 l
-2438.15 5921.75 l
-2576.15 5914.55 l
-2487.35 5861.75 l
-2609.75 5829.35 l
-2648.15 5829.35 l
-f*
-0.2 i
-1960.08 5880.76 m
-1940.08 5806.52 l
-1937.52 5797.88 1934.48 5795.64 1924.08 5795 c
-1924.08 5791 l
-1974 5791 l
-1974 5795 l
-1964.72 5795.48 1962.48 5796.76 1962.48 5801.88 c
-1962.48 5803.64 1962.8 5805.4 1963.76 5809.08 c
-1963.92 5809.88 l
-1964.08 5810.68 l
-1983.76 5882.52 l
-1986.16 5890.84 1988.56 5893.08 1996.72 5894.04 c
-1996.72 5898 l
-1962.8 5898 l
-1913.2 5821.24 l
-1904.56 5898 l
-1869.2 5898 l
-1869.2 5894 l
-1879.28 5893.52 1880.72 5892.89 1880.72 5888.44 c
-1880.72 5886.2 1880.08 5883.32 1878.96 5879.16 c
-1861.52 5819.48 l
-1855.12 5798.68 1854 5796.92 1845.36 5795 c
-1845.36 5791 l
-1878.48 5791 l
-1878.48 5795 l
-1868.24 5796.28 1865.68 5798.2 1865.68 5804.76 c
-1865.68 5807.48 1866.48 5811.48 1868.72 5819.48 c
-1884.88 5878.52 l
-1895.6 5789.08 l
-1900.08 5789.08 l
-h
-1992.24 5791 m
-f*
-2061.44 5811.32 m
-2054.88 5802.52 2052.48 5799.76 2049.92 5799.76 c
-2048.64 5799.76 2048 5800.86 2048 5802.52 c
-2048 5806.52 2049.44 5813.08 2053.44 5826.2 c
-2064.8 5863.96 l
-2047.04 5862.84 l
-2044.16 5853.4 l
-2042.72 5861.56 2039.2 5865.08 2032.32 5865.08 c
-2012.64 5865.08 1989 5834.27 1989 5809.24 c
-1989 5797.08 1995.74 5788.92 2005.92 5788.92 c
-2015.68 5788.92 2023.04 5794.68 2032.16 5810.04 c
-2030.24 5803.48 2030 5801.56 2030 5799.32 c
-2030 5793.4 2034.76 5788.76 2040.64 5788.76 c
-2048.16 5788.76 2055.52 5795 2064.8 5808.92 c
-h
-2034.56 5858.2 m
-2038.08 5857.88 2040.56 5855 2040.56 5850.68 c
-2040.56 5841.08 2035.24 5823.32 2028.96 5812.28 c
-2024.64 5804.44 2019.84 5799.92 2015.52 5799.92 c
-2011.36 5799.92 2008 5803.75 2008 5808.92 c
-2008 5817.24 2013.42 5833.24 2020.16 5845.08 c
-2024.96 5853.56 2030.24 5858.52 2034.56 5858.2 c
-h
-2072 5791 m
-f*
-2106.56 5864.92 m
-2090.24 5862.36 2084 5861.4 2075.68 5860.44 c
-2075.68 5856 l
-2082.88 5855.69 2084.32 5855.07 2084.32 5852.12 c
-2084.32 5850.52 2083.04 5844.76 2080.8 5836.44 c
-2064.8 5774.36 l
-2061.76 5763.8 2060.48 5762.84 2052.8 5763 c
-2052.8 5758 l
-2092.64 5758 l
-2092.64 5763 l
-2084.64 5763.14 2082.24 5764.16 2082.24 5767.64 c
-2082.24 5769.88 2083.36 5774.68 2086.4 5785.88 c
-2087.52 5789.72 2087.52 5790.04 2088.16 5792.44 c
-2093.76 5789.56 2095.68 5788.92 2099.04 5788.92 c
-2120.8 5788.92 2143.36 5817.88 2143.36 5845.56 c
-2143.36 5857.4 2136.64 5865.08 2126.08 5865.08 c
-2116.96 5865.08 2109.92 5859.92 2100.48 5846.52 c
-h
-2117.12 5853.56 m
-2121.28 5853.24 2123.68 5849.56 2123.36 5844.44 c
-2122.72 5833.88 2117.6 5818.04 2111.84 5807.64 c
-2106.88 5799 2101.76 5793.92 2096.32 5793.92 c
-2092.8 5793.92 2090.08 5796.75 2090.08 5800.28 c
-2090.08 5803 2091.84 5809.56 2096.16 5824.12 c
-2099.68 5835.8 2101.12 5839.8 2103.52 5843.48 c
-2107.52 5849.72 2112.96 5853.88 2117.12 5853.56 c
-h
-2152 5791 m
-f*
-2187.56 5864.92 m
-2171.24 5862.36 2165 5861.4 2156.68 5860.44 c
-2156.68 5856 l
-2163.88 5855.69 2165.32 5855.07 2165.32 5852.12 c
-2165.32 5850.52 2164.04 5844.76 2161.8 5836.44 c
-2145.8 5774.36 l
-2142.76 5763.8 2141.48 5762.84 2133.8 5763 c
-2133.8 5758 l
-2173.64 5758 l
-2173.64 5763 l
-2165.64 5763.14 2163.24 5764.16 2163.24 5767.64 c
-2163.24 5769.88 2164.36 5774.68 2167.4 5785.88 c
-2168.52 5789.72 2168.52 5790.04 2169.16 5792.44 c
-2174.76 5789.56 2176.68 5788.92 2180.04 5788.92 c
-2201.8 5788.92 2224.36 5817.88 2224.36 5845.56 c
-2224.36 5857.4 2217.64 5865.08 2207.08 5865.08 c
-2197.96 5865.08 2190.92 5859.92 2181.48 5846.52 c
-h
-2198.12 5853.56 m
-2202.28 5853.24 2204.68 5849.56 2204.36 5844.44 c
-2203.72 5833.88 2198.6 5818.04 2192.84 5807.64 c
-2187.88 5799 2182.76 5793.92 2177.32 5793.92 c
-2173.8 5793.92 2171.08 5796.75 2171.08 5800.28 c
-2171.08 5803 2172.84 5809.56 2177.16 5824.12 c
-2180.68 5835.8 2182.12 5839.8 2184.52 5843.48 c
-2188.52 5849.72 2193.96 5853.88 2198.12 5853.56 c
-h
-2233 5791 m
-f*
-2266.56 5813.56 m
-2264.32 5810.36 l
-2260.16 5804.12 2256.48 5800.56 2254.08 5800.56 c
-2252.8 5800.56 2252 5801.77 2252 5803.16 c
-2252 5804.6 2252.62 5808.76 2253.12 5811.48 c
-2267.68 5864.92 l
-2259.22 5863 2248.26 5861.4 2236.04 5860.44 c
-2236.04 5856 l
-2237.44 5856 l
-2242.24 5856 2245.48 5854.44 2245.48 5851.48 c
-2245.48 5850.2 2244.71 5847.8 2243.68 5845.08 c
-2234.4 5810.68 l
-2233.12 5806.04 2233 5801.88 2233 5799.64 c
-2233 5793.56 2237.2 5789.56 2243.36 5789.56 c
-2252.96 5789.56 2258.88 5794.36 2270.08 5811.32 c
-h
-2262.88 5900.4 m
-2257.44 5900.4 2253 5895.46 2253 5890.04 c
-2253 5883.8 2257.26 5879.4 2263.04 5879.4 c
-2269.12 5879.4 2274 5883.86 2274 5889.56 c
-2274 5895.48 2269 5900.4 2262.88 5900.4 c
-h
-2276.48 5791 m
-f*
-2351.36 5812.6 m
-2344.96 5802.68 2342.88 5800.56 2340.16 5800.56 c
-2338.88 5800.56 2338 5801.63 2338 5803.16 c
-2338 5804.76 2338.94 5808.12 2341.92 5817.08 c
-2347.68 5834.52 l
-2350.24 5842.04 2352 5849.08 2352 5852.92 c
-2352 5860.76 2347.78 5865.08 2340.16 5865.08 c
-2334.24 5865.08 2328.48 5862.62 2324.16 5858.36 c
-2318.24 5852.76 2315.2 5848.92 2304.48 5833.08 c
-2314.72 5864.76 l
-2304.48 5862.52 2291.68 5860.92 2282.72 5860.6 c
-2282.72 5855.8 l
-2289.44 5855.65 2291.36 5854.92 2291.36 5852.12 c
-2291.36 5850.2 2289.12 5841.72 2284 5823.64 c
-2280.32 5810.68 2279.2 5806.52 2275.04 5791 c
-2294.4 5791 l
-2301.92 5818.68 2307.68 5832.6 2317.6 5845.56 c
-2320.8 5849.88 2325.76 5853.08 2328.64 5853.08 c
-2330.72 5853.08 2333 5851.63 2333 5850.04 c
-2333 5849.56 2332.54 5848.28 2331.84 5846.68 c
-2323.04 5820.12 l
-2320.48 5812.44 2319 5803.32 2319 5799.16 c
-2319 5793.08 2322.84 5789.56 2329.44 5789.56 c
-2339.04 5789.56 2345.6 5795 2354.88 5810.52 c
-h
-2364.96 5791 m
-f*
-2442.48 5860 m
-2424.72 5860 l
-2419.28 5863.58 2414.48 5865.08 2407.12 5865.08 c
-2387.44 5865.08 2371 5852.05 2371 5835.8 c
-2371 5827.64 2375.35 5821.88 2384.4 5818.2 c
-2371.28 5810.84 2369 5808.6 2369 5802.68 c
-2369 5797.56 2371.89 5794.52 2378.96 5792.12 c
-2369.04 5789.72 2365.84 5788.44 2362 5785.4 c
-2359.44 5783.16 2358 5779.32 2358 5775.48 c
-2358 5765.08 2369.56 5759 2387.76 5759 c
-2410.32 5759 2426 5768.72 2426 5782.52 c
-2426 5792.28 2419.6 5797.56 2402.16 5802.52 c
-2393.68 5804.92 l
-2388.56 5806.36 2385 5808.6 2385 5811 c
-2385 5813.56 2387.68 5816.28 2390 5816.28 c
-2390.8 5816.28 2391.92 5816.24 2393.2 5816.12 c
-2394.96 5815.64 2396.24 5815 2398.16 5815 c
-2405.2 5815 2412.4 5817.09 2418.48 5820.92 c
-2427.76 5826.2 2433 5834.36 2433 5843.96 c
-2433 5846.64 2432.59 5848.32 2431.76 5851 c
-2442.48 5851 l
-h
-2384.4 5790.04 m
-2386.32 5789.88 2398.48 5785.72 2402 5784.12 c
-2406.48 5781.88 2409 5779.16 2409 5775 c
-2409 5767.96 2401.8 5764 2389.36 5764 c
-2378.96 5764 2372 5769.1 2372 5776.44 c
-2372 5779.48 2373.32 5782.2 2376.24 5785.24 c
-2378.32 5787.32 2383.12 5790.2 2384.4 5790.04 c
-h
-2406.8 5860.08 m
-2410.96 5860.08 2414 5856.19 2414 5850.52 c
-2414 5845.08 2412.08 5837.4 2409.36 5831.48 c
-2406 5824.12 2401.84 5820 2396.88 5820 c
-2392.56 5820 2390 5823.52 2390 5829.88 c
-2390 5836.28 2392.79 5846.04 2396.24 5852.12 c
-2399.28 5857.4 2402.64 5860.08 2406.8 5860.08 c
-h
-2446 5791 m
-f*
-1 i
-1 g
-4222.55 6369.35 m
-4388.15 6520.55 l
-4306.55 6520.55 l
-4306.55 6674.15 l
-4139.75 6674.15 l
-4139.75 6520.55 l
-4058.15 6520.55 l
-f*
-0 g
-4222.55 6369.35 m
-4388.15 6520.55 l
-4306.55 6520.55 l
-4306.55 6674.15 l
-4139.75 6674.15 l
-4139.75 6520.55 l
-4058.15 6520.55 l
-4222.55 6369.35 l
-4222.55 6383.75 l
-4083.35 6510.95 l
-4149.35 6510.95 l
-4149.35 6664.55 l
-4295.75 6664.55 l
-4295.75 6510.95 l
-4361.75 6510.95 l
-4222.55 6383.75 l
-4222.55 6369.35 l
-f*
-0.2 i
-3775.88 6907 m
-3775.88 6902 l
-3788.3 6901.29 3792 6898.45 3792 6889.4 c
-3792 6802.28 l
-3792 6793.1 3789.25 6790.94 3775.88 6789.5 c
-3775.88 6785 l
-3833.84 6785 l
-3864.26 6785 3884 6798.5 3884 6818.84 c
-3884 6827.12 3880.73 6834.32 3874.7 6839.9 c
-3868.4 6845.48 3862.28 6848 3849.68 6850.7 c
-3870.56 6856.82 3878 6864.2 3878 6877.88 c
-3878 6896.42 3861.55 6907 3831.5 6907 c
-h
-3821 6846.74 m
-3825.92 6846.74 l
-3844.46 6846.74 3853 6837.2 3853 6817.22 c
-3853 6799.76 3845.77 6791 3831.5 6791 c
-3823.58 6791 3821 6793.99 3821 6801.74 c
-h
-3821 6892.46 m
-3821 6898.94 3823.39 6902 3830.24 6902 c
-3842.84 6902 3849 6894.03 3849 6876.62 c
-3849 6857.72 3843.08 6852.68 3821 6852.14 c
-h
-3893.06 6785 m
-f*
-3978.14 6796.52 m
-3976.34 6794.72 l
-3975.8 6794.18 3975.26 6794 3974.36 6794 c
-3971.84 6794 3971 6795.44 3971 6798.5 c
-3971 6845.48 l
-3971 6860.78 3957.16 6870.16 3934.94 6870.16 c
-3914.6 6870.16 3900.92 6860.97 3900.92 6847.46 c
-3900.92 6839.9 3905.24 6835.58 3912.62 6835.58 c
-3919.82 6835.58 3924.86 6839.9 3924.86 6846.02 c
-3924.86 6848.54 3923.96 6850.88 3921.62 6853.76 c
-3920 6855.56 3919.46 6856.64 3919.46 6857.72 c
-3919.46 6861.5 3924.32 6864.16 3930.8 6864.16 c
-3941.42 6864.16 3946 6859.37 3946 6848.54 c
-3946 6835.4 l
-3924.89 6828.92 3916.41 6825.68 3909.56 6821.18 c
-3901.46 6815.78 3898 6809.48 3898 6801.56 c
-3898 6790.58 3906.07 6782.48 3917.3 6782.48 c
-3927.74 6782.48 3936.02 6786.08 3945.92 6795.08 c
-3947.9 6785.9 3951.86 6782.48 3960.68 6782.48 c
-3968.42 6782.48 3974 6785.36 3980.84 6792.74 c
-h
-3946 6803 m
-3941.04 6797.42 3937.37 6795.26 3932.96 6795.26 c
-3927.56 6795.26 3924 6800.12 3924 6807.32 c
-3924 6817.76 3931.57 6825.14 3946 6829.1 c
-h
-3983 6785 m
-f*
-4044.22 6843.68 m
-4044.22 6869.8 l
-4040.24 6869.8 l
-4039.16 6867.08 4038.08 6866.2 4035.74 6866.2 c
-4034.66 6866.2 4033.04 6866.55 4030.16 6867.44 c
-4024.4 6869.42 4020.26 6870.16 4016.12 6870.16 c
-3999.74 6870.16 3988 6858.99 3988 6843.86 c
-3988 6831.98 3995.34 6823.7 4013.42 6815.96 c
-4025.84 6810.56 4031 6806.06 4031 6800.3 c
-4031 6793.28 4025.48 6788.48 4017.2 6788.48 c
-4004.6 6788.48 3996.32 6796.62 3992.54 6812.36 c
-3987.5 6812.36 l
-3987.5 6782.66 l
-3992 6782.66 l
-3993.98 6786.44 3995.06 6787.7 3996.68 6787.7 c
-3997.58 6787.7 3999.02 6787.34 4000.82 6786.62 c
-4006.04 6784.46 4015.22 6782.48 4020.26 6782.48 c
-4036.64 6782.48 4048 6793.64 4048 6809.84 c
-4048 6822.62 4041.15 6830.54 4023.14 6837.92 c
-4010.9 6843.14 4006 6847.64 4006 6853.76 c
-4006 6859.7 4010.98 6864.16 4017.74 6864.16 c
-4022.6 6864.16 4027.28 6862.19 4031.24 6858.44 c
-4035.02 6854.84 4037 6851.42 4039.7 6843.68 c
-h
-4053.02 6785 m
-f*
-4124.36 6807.5 m
-4116.98 6798.68 4111.58 6795.48 4103.84 6795.48 c
-4097 6795.48 4091.6 6798.53 4088 6804.62 c
-4084.58 6810.36 4083.14 6816.45 4082.42 6829 c
-4127.78 6829 l
-4126.7 6843.99 4124 6852.3 4118.42 6859.34 c
-4112.66 6866.36 4104.2 6870.16 4094.12 6870.16 c
-4071.62 6870.16 4056.5 6852.33 4056.5 6826.04 c
-4056.5 6799.76 4071.26 6782.48 4093.58 6782.48 c
-4108.16 6782.48 4116.98 6788.06 4128.68 6804.98 c
-h
-4081.52 6836 m
-4082.06 6857.42 4085.3 6864.16 4094.12 6864.16 c
-4099.34 6864.16 4102.58 6861.42 4104.02 6856.1 c
-4104.92 6852.68 4105.28 6847.64 4105.64 6838.46 c
-4105.64 6836 l
-h
-4131.92 6785 m
-f*
-4178 6785 m
-f*
-4281.94 6907 m
-4179.88 6907 l
-4179.88 6902 l
-4192.3 6901.29 4196 6898.63 4196 6889.4 c
-4196 6802.28 l
-4196 6792.92 4193.44 6790.94 4179.88 6789.5 c
-4179.88 6785 l
-4244.68 6785 l
-4244.68 6790 l
-4228.12 6790.69 4225 6792.77 4225 6802.28 c
-4225 6844.22 l
-4243.28 6843.86 4249.91 6837.2 4252.42 6816.32 c
-4256.92 6816.32 l
-4256.92 6877.16 l
-4252.42 6877.16 l
-4249.19 6856.64 4242.92 6850.34 4225 6850.34 c
-4225 6892.1 l
-4225 6898.76 4227.32 6901 4236.4 6901 c
-4253.14 6901 4263.58 6897.8 4269.16 6891.2 c
-4273.12 6886.7 4275.1 6881.84 4277.62 6870.5 c
-4281.94 6870.5 l
-h
-4286.98 6785 m
-f*
-4326.28 6868 m
-4292.22 6868 l
-4292.22 6863.66 l
-4299.96 6862.58 4302 6860.24 4302 6853.04 c
-4302 6800.12 l
-4302 6792.74 4300.19 6790.76 4292.22 6789.32 c
-4292.22 6785 l
-4340.1 6785 l
-4340.1 6789.32 l
-4329.12 6790.04 4327 6792.38 4327 6803.54 c
-4327 6837.56 l
-4327 6846.92 4332.02 6854.66 4337.94 6854.66 c
-4339.38 6854.66 4341 6853.4 4342.98 6850.52 c
-4346.4 6845.66 4349.1 6844.04 4353.78 6844.04 c
-4360.44 6844.04 4365.12 6849.08 4365.12 6855.92 c
-4365.12 6864.2 4359 6870.16 4350.54 6870.16 c
-4341.55 6870.16 4334.73 6865.47 4326.28 6853.22 c
-h
-4366.92 6785 m
-f*
-4453.14 6796.52 m
-4451.34 6794.72 l
-4450.8 6794.18 4450.26 6794 4449.36 6794 c
-4446.84 6794 4446 6795.44 4446 6798.5 c
-4446 6845.48 l
-4446 6860.78 4432.16 6870.16 4409.94 6870.16 c
-4389.6 6870.16 4375.92 6860.97 4375.92 6847.46 c
-4375.92 6839.9 4380.24 6835.58 4387.62 6835.58 c
-4394.82 6835.58 4399.86 6839.9 4399.86 6846.02 c
-4399.86 6848.54 4398.96 6850.88 4396.62 6853.76 c
-4395 6855.56 4394.46 6856.64 4394.46 6857.72 c
-4394.46 6861.5 4399.32 6864.16 4405.8 6864.16 c
-4416.42 6864.16 4421 6859.37 4421 6848.54 c
-4421 6835.4 l
-4399.89 6828.92 4391.41 6825.68 4384.56 6821.18 c
-4376.46 6815.78 4373 6809.48 4373 6801.56 c
-4373 6790.58 4381.07 6782.48 4392.3 6782.48 c
-4402.74 6782.48 4411.02 6786.08 4420.92 6795.08 c
-4422.9 6785.9 4426.86 6782.48 4435.68 6782.48 c
-4443.42 6782.48 4449 6785.36 4455.84 6792.74 c
-h
-4421 6803 m
-4416.04 6797.42 4412.37 6795.26 4407.96 6795.26 c
-4402.56 6795.26 4399 6800.12 4399 6807.32 c
-4399 6817.76 4406.57 6825.14 4421 6829.1 c
-h
-4458 6785 m
-f*
-4495.46 6868 m
-4460.73 6868 l
-4460.73 6863.66 l
-4468.65 6862.58 4471 6860.42 4471 6853.04 c
-4471 6800.12 l
-4471 6792.74 4468.95 6790.76 4460.73 6789.32 c
-4460.73 6785 l
-4503.93 6785 l
-4503.93 6789.32 l
-4497.63 6790.22 4496 6792.74 4496 6799.58 c
-4496 6847.64 l
-4496 6848.54 4498.51 6851.78 4500.51 6853.76 c
-4504.29 6856.64 4507.53 6858.16 4510.77 6858.16 c
-4517.79 6858.16 4521 6854 4521 6843.14 c
-4521 6799.58 l
-4521 6792.2 4518.9 6789.86 4511.85 6789.32 c
-4511.85 6785 l
-4553.97 6785 l
-4553.97 6789.32 l
-4547.67 6790.04 4546 6792.74 4546 6799.58 c
-4546 6847.64 l
-4546 6848.54 4548.43 6851.6 4550.37 6853.58 c
-4554.33 6856.64 4557.57 6858.16 4560.81 6858.16 c
-4567.65 6858.16 4570 6853.82 4570 6843.14 c
-4570 6799.58 l
-4570 6792.02 4568.1 6789.86 4561.53 6789.32 c
-4561.53 6785 l
-4604.37 6785 l
-4604.37 6789 l
-4597.35 6789.37 4595 6791.6 4595 6799.58 c
-4595 6844.76 l
-4595 6860.24 4585.6 6870.16 4571.07 6870.16 c
-4560.81 6870.16 4553.97 6866.01 4544.61 6854.48 c
-4539.21 6865.82 4532.91 6870.16 4521.57 6870.16 c
-4510.2 6870.16 4502.21 6865.29 4495.46 6854.48 c
-h
-4607.94 6785 m
-f*
-4680.36 6807.5 m
-4672.98 6798.68 4667.58 6795.48 4659.84 6795.48 c
-4653 6795.48 4647.6 6798.53 4644 6804.62 c
-4640.58 6810.36 4639.14 6816.45 4638.42 6829 c
-4683.78 6829 l
-4682.7 6843.99 4680 6852.3 4674.42 6859.34 c
-4668.66 6866.36 4660.2 6870.16 4650.12 6870.16 c
-4627.62 6870.16 4612.5 6852.33 4612.5 6826.04 c
-4612.5 6799.76 4627.26 6782.48 4649.58 6782.48 c
-4664.16 6782.48 4672.98 6788.06 4684.68 6804.98 c
-h
-4637.52 6836 m
-4638.06 6857.42 4641.3 6864.16 4650.12 6864.16 c
-4655.34 6864.16 4658.58 6861.42 4660.02 6856.1 c
-4660.92 6852.68 4661.28 6847.64 4661.64 6838.46 c
-4661.64 6836 l
-h
-4687.92 6785 m
-f*
-1 i
-3772.55 6749.75 914.4 15.5999 re
-f
-0.2 i
-2678.88 4570.52 m
-2643.78 4570.52 2619 4545.21 2619 4509.12 c
-2619 4472.04 2642.99 4446.48 2677.98 4446.48 c
-2712.54 4446.48 2737 4472.04 2737 4508.58 c
-2737 4524.96 2731.9 4539.9 2722.98 4550.34 c
-2712.18 4563.12 2695.8 4570.52 2678.88 4570.52 c
-h
-2677.44 4563.52 m
-2685.9 4563.52 2693.46 4561.05 2699.94 4556.1 c
-2710.2 4547.46 2716 4530.18 2716 4509.66 c
-2716 4488.06 2711.25 4472.4 2701.56 4462.5 c
-2695.44 4456.38 2687.16 4453.48 2678.16 4453.48 c
-2669.88 4453.48 2662.14 4456.01 2655.84 4461.06 c
-2645.76 4469.34 2640 4487.34 2640 4508.76 c
-2640 4525.86 2644.54 4542.96 2651.34 4551.6 c
-2658 4559.52 2667.72 4563.52 2677.44 4563.52 c
-h
-2742.96 4449 m
-f*
-2746.42 4561.14 m
-2747.5 4561.14 l
-2749.48 4561.32 2751.64 4561.5 2753.08 4561.5 c
-2758.84 4561.5 2761 4558.98 2761 4550.52 c
-2761 4464.66 l
-2761 4454.94 2758.41 4452.6 2746.78 4451.7 c
-2746.78 4449 l
-2789.26 4449 l
-2789.26 4452 l
-2777.74 4452.7 2776 4454.46 2776 4464.12 c
-2776 4571.58 l
-2775.04 4571.94 l
-2765.68 4568.88 2758.84 4567.08 2746.42 4564.02 c
-h
-2793.04 4449 m
-f*
-2854.92 4447.2 m
-2881.38 4456.56 l
-2881.38 4460 l
-2878.32 4459.26 2878.14 4459.82 2877.24 4459.82 c
-2870.76 4459.82 2869 4461.69 2869 4469.52 c
-2869 4571.58 l
-2868.42 4571.94 l
-2859.78 4568.88 2853.48 4567.08 2841.96 4564.02 c
-2841.96 4561.14 l
-2843.4 4561.32 2844.48 4561.32 2845.92 4561.32 c
-2852.58 4561.32 2854 4559.52 2854 4552.14 c
-2854 4524.06 l
-2847.23 4529.82 2842.42 4531.8 2835.3 4531.8 c
-2814.6 4531.8 2798 4511.46 2798 4485.9 c
-2798 4462.86 2811.26 4447.2 2831.16 4447.2 c
-2841.15 4447.2 2847.93 4450.8 2854 4459.26 c
-2854 4447.74 l
-h
-2854 4467.36 m
-2854 4466.1 2853 4464.12 2851.5 4462.32 c
-2848.26 4458.54 2843.76 4456.2 2838.18 4456.2 c
-2823.06 4456.2 2813 4470.74 2813 4493.1 c
-2813 4513.44 2821.95 4526.8 2835.84 4526.8 c
-2845.56 4526.8 2854 4518.32 2854 4508.76 c
-h
-2883 4449 m
-f*
-2928 4449 m
-f*
-3040.6 4530 m
-3038.98 4570.52 l
-3035.2 4570.52 l
-3034.12 4566.84 3031.24 4564.58 3027.82 4564.58 c
-3026.02 4564.58 3023.5 4565.17 3020.62 4566.36 c
-3011.8 4569.24 3002.98 4570.52 2994.16 4570.52 c
-2980.3 4570.52 2966.08 4565.36 2955.1 4556.46 c
-2941.42 4545.12 2934 4528.02 2934 4507.5 c
-2934 4470.96 2957.96 4446.48 2993.8 4446.48 c
-3014.14 4446.48 3031.96 4454.76 3042.94 4469.34 c
-3039.7 4472.58 l
-3026.38 4459.8 3014.5 4454.48 2999.56 4454.48 c
-2988.76 4454.48 2979.04 4457.69 2971.48 4463.94 c
-2960.86 4472.76 2955 4488.96 2955 4509.84 c
-2955 4542.42 2971.71 4563.52 2997.76 4563.52 c
-3008.2 4563.52 3017.38 4559.73 3024.58 4552.5 c
-3030.34 4546.74 3033.04 4541.7 3036.46 4530 c
-h
-3049.06 4449 m
-f*
-3135.22 4458 m
-3134.32 4458 l
-3126.04 4458 3124 4459.98 3124 4468.26 c
-3124 4530 l
-3095.62 4530 l
-3095.62 4527 l
-3106.78 4526.46 3109 4524.65 3109 4515.6 c
-3109 4473.3 l
-3109 4468.44 3108.08 4465.74 3105.88 4464.12 c
-3100.84 4459.8 3095.26 4457.2 3089.68 4457.2 c
-3082.66 4457.2 3077 4463.52 3077 4471.32 c
-3077 4530 l
-3050.62 4530 l
-3050.62 4527.48 l
-3059.26 4526.94 3062 4524.24 3062 4515.96 c
-3062 4470.6 l
-3062 4456.38 3070.55 4447.2 3083.56 4447.2 c
-3090.22 4447.2 3097.24 4450.08 3102.1 4454.94 c
-3109.9 4462.68 l
-3109.9 4447.74 l
-3110.56 4447.38 l
-3119.56 4450.98 3126.04 4452.96 3135.22 4455.48 c
-h
-3139 4449 m
-f*
-3140.26 4519.2 m
-3142.78 4519.74 3144.4 4519.92 3146.56 4519.92 c
-3151.06 4519.92 3153 4517.04 3153 4509.12 c
-3153 4464.12 l
-3153 4455.12 3151.71 4453.86 3139.9 4451.7 c
-3139.9 4449 l
-3183.1 4449 l
-3183.1 4452 l
-3170.86 4452.53 3168 4455.17 3168 4465.2 c
-3168 4505.7 l
-3168 4511.46 3175.44 4520.46 3180.4 4520.46 c
-3181.48 4520.46 3183.1 4519.56 3185.08 4517.76 c
-3187.96 4515.06 3189.94 4514.16 3192.28 4514.16 c
-3196.6 4514.16 3199.3 4517.22 3199.3 4522.26 c
-3199.3 4528.2 3195.52 4531.8 3189.4 4531.8 c
-3181.91 4531.8 3176.92 4527.84 3168 4514.88 c
-3168 4531.44 l
-3166.9 4531.8 l
-3157.36 4528.02 3150.88 4525.5 3140.26 4522.08 c
-h
-3198.94 4449 m
-f*
-3200.26 4519.2 m
-3202.78 4519.74 3204.4 4519.92 3206.56 4519.92 c
-3211.06 4519.92 3213 4517.04 3213 4509.12 c
-3213 4464.12 l
-3213 4455.12 3211.71 4453.86 3199.9 4451.7 c
-3199.9 4449 l
-3243.1 4449 l
-3243.1 4452 l
-3230.86 4452.53 3228 4455.17 3228 4465.2 c
-3228 4505.7 l
-3228 4511.46 3235.44 4520.46 3240.4 4520.46 c
-3241.48 4520.46 3243.1 4519.56 3245.08 4517.76 c
-3247.96 4515.06 3249.94 4514.16 3252.28 4514.16 c
-3256.6 4514.16 3259.3 4517.22 3259.3 4522.26 c
-3259.3 4528.2 3255.52 4531.8 3249.4 4531.8 c
-3241.91 4531.8 3236.92 4527.84 3228 4514.88 c
-3228 4531.44 l
-3226.9 4531.8 l
-3217.36 4528.02 3210.88 4525.5 3200.26 4522.08 c
-h
-3258.94 4449 m
-f*
-3332.44 4478.52 m
-3323.8 4464.84 3316.06 4459.2 3304.54 4459.2 c
-3294.64 4459.2 3287.08 4464.02 3281.86 4474.02 c
-3278.26 4481.08 3276.82 4487.42 3276.46 4499 c
-3331.9 4499 l
-3330.46 4510.63 3328.66 4515.82 3324.16 4521.54 c
-3318.76 4528.02 3310.48 4531.8 3301.12 4531.8 c
-3278.8 4531.8 3263.5 4513.8 3263.5 4487.52 c
-3263.5 4462.68 3276.46 4447.2 3297.16 4447.2 c
-3314.44 4447.2 3327.76 4457.82 3335.32 4477.26 c
-h
-3276.82 4504 m
-3278.8 4518.66 3284.92 4524.8 3295.9 4524.8 c
-3306.88 4524.8 3311.2 4519.74 3313.54 4504 c
-h
-3338.92 4449 m
-f*
-3340.88 4520.64 m
-3342.14 4521.18 3343.76 4521.36 3345.74 4521.36 c
-3350.78 4521.36 3352 4518.66 3352 4509.84 c
-3352 4465.2 l
-3352 4454.94 3350.09 4452.42 3341.24 4451.7 c
-3341.24 4449 l
-3379.4 4449 l
-3379.4 4451.7 l
-3370.22 4452.42 3367 4454.58 3367 4461.06 c
-3367 4511.64 l
-3375.7 4519.74 3379.95 4521.8 3386.06 4521.8 c
-3394.88 4521.8 3399 4516.25 3399 4504.44 c
-3399 4466.82 l
-3399 4455.48 3396.7 4452.42 3387.86 4451.7 c
-3387.86 4449 l
-3425.3 4449 l
-3425.3 4451.7 l
-3416.48 4452.6 3414 4454.76 3414 4463.58 c
-3414 4504.8 l
-3414 4521.72 3406.2 4531.8 3393.08 4531.8 c
-3384.64 4531.8 3378.94 4528.74 3366.46 4517.22 c
-3366.46 4531.44 l
-3365.72 4531.8 l
-3356.9 4528.56 3350.78 4526.58 3340.88 4523.7 c
-h
-3428 4449 m
-f*
-3474 4530 m
-3456 4530 l
-3456 4550.88 l
-3456 4552.68 3455.56 4553.22 3454.46 4553.22 c
-3453.38 4551.42 3452.12 4549.8 3450.86 4548.18 c
-3444.2 4538.28 3438.08 4531.62 3433.4 4528.92 c
-3431.42 4527.66 3430 4526.58 3430 4525.5 c
-3430 4525.29 3430.26 4525.14 3431.06 4525 c
-3441 4525 l
-3441 4470.06 l
-3441 4454.94 3446.26 4447.2 3456.44 4447.2 c
-3465.44 4447.2 3472.28 4451.52 3478.22 4460.88 c
-3475.88 4462.86 l
-3471.92 4458.18 3469.04 4456.2 3465.08 4456.2 c
-3458.42 4456.2 3456 4460.98 3456 4472.76 c
-3456 4525 l
-3474 4525 l
-h
-3478.04 4449 m
-f*
-3524 4449 m
-f*
-3609.22 4490.58 m
-3609.22 4532.34 l
-3605.08 4532.34 l
-3602.92 4517.94 3599.68 4515 3585.28 4515 c
-3560 4515 l
-3560 4555.2 l
-3560 4560.24 3560.77 4561 3564.94 4561 c
-3589.42 4561 l
-3609.76 4561 3613.72 4558.35 3616.78 4542.42 c
-3621.28 4542.42 l
-3620.74 4568 l
-3525.16 4568 l
-3525.16 4564.74 l
-3538.48 4563.66 3541 4561.32 3541 4548.54 c
-3541 4470.6 l
-3541 4455.66 3539 4453.32 3525.16 4452.42 c
-3525.16 4449 l
-3575.56 4449 l
-3575.56 4452 l
-3561.7 4452.74 3560 4455.32 3560 4468.62 c
-3560 4508 l
-3585.28 4508 l
-3599.86 4508 3602.92 4505.28 3605.08 4490.58 c
-h
-3623.08 4449 m
-f*
-3625.26 4519.2 m
-3627.78 4519.74 3629.4 4519.92 3631.56 4519.92 c
-3636.06 4519.92 3638 4517.04 3638 4509.12 c
-3638 4464.12 l
-3638 4455.12 3636.71 4453.86 3624.9 4451.7 c
-3624.9 4449 l
-3668.1 4449 l
-3668.1 4452 l
-3655.86 4452.53 3653 4455.17 3653 4465.2 c
-3653 4505.7 l
-3653 4511.46 3660.44 4520.46 3665.4 4520.46 c
-3666.48 4520.46 3668.1 4519.56 3670.08 4517.76 c
-3672.96 4515.06 3674.94 4514.16 3677.28 4514.16 c
-3681.6 4514.16 3684.3 4517.22 3684.3 4522.26 c
-3684.3 4528.2 3680.52 4531.8 3674.4 4531.8 c
-3666.91 4531.8 3661.92 4527.84 3653 4514.88 c
-3653 4531.44 l
-3651.9 4531.8 l
-3642.36 4528.02 3635.88 4525.5 3625.26 4522.08 c
-h
-3683.94 4449 m
-f*
-3763.56 4460.88 m
-3760.5 4458.36 3758.34 4457.2 3755.64 4457.2 c
-3751.5 4457.2 3750 4459.78 3750 4467.9 c
-3750 4503 l
-3750 4512.18 3749.16 4517.22 3746.82 4521.36 c
-3743.04 4528.2 3735.3 4531.8 3724.32 4531.8 c
-3715.14 4531.8 3706.5 4529.28 3701.46 4525.14 c
-3696.96 4521.36 3694 4516.14 3694 4511.64 c
-3694 4507.5 3697.46 4503.9 3701.82 4503.9 c
-3706.14 4503.9 3709.92 4507.5 3709.92 4511.46 c
-3709.92 4512.18 3709.74 4513.08 3709.56 4514.34 c
-3709.2 4515.96 3709 4517.4 3709 4518.66 c
-3709 4523.52 3714.77 4527.8 3721.98 4527.8 c
-3730.8 4527.8 3735 4522.47 3735 4512.54 c
-3735 4501.56 l
-3707.76 4490.4 3704.75 4488.96 3697.14 4482.12 c
-3693.18 4478.52 3690.66 4472.4 3690.66 4466.46 c
-3690.66 4455.12 3698.4 4447.2 3709.56 4447.2 c
-3717.48 4447.2 3724.86 4450.98 3735.84 4460.34 c
-3736.74 4450.8 3739.98 4447.2 3747.36 4447.2 c
-3753.48 4447.2 3757.26 4449.36 3763.56 4456.2 c
-h
-3735 4471.14 m
-3735 4465.56 3734.23 4463.94 3730.98 4461.6 c
-3726.66 4459.08 3721.62 4457.2 3717.84 4457.2 c
-3711.54 4457.2 3706.48 4463.51 3706.48 4471.5 c
-3706.48 4472.22 l
-3706.48 4482.84 3713.7 4489.32 3735 4497.24 c
-h
-3763.92 4449 m
-f*
-3766.14 4520.64 m
-3768.48 4521.18 3769.92 4521.36 3771.9 4521.36 c
-3776.58 4521.36 3778 4518.48 3778 4509.84 c
-3778 4464.3 l
-3778 4454.58 3775.52 4451.88 3765.6 4451.7 c
-3765.6 4449 l
-3805.56 4449 l
-3805.56 4452 l
-3796.02 4452.35 3793 4454.27 3793 4461.06 c
-3793 4511.82 l
-3793 4512.18 3794.23 4513.44 3795.66 4514.88 c
-3799.98 4519.2 3808.08 4522.8 3814.74 4522.8 c
-3822.48 4522.8 3827 4516.2 3827 4503.54 c
-3827 4464.48 l
-3827 4454.4 3824.93 4452.42 3814.2 4451.7 c
-3814.2 4449 l
-3854.52 4449 l
-3854.52 4452 l
-3844.26 4452.18 3842 4455.17 3842 4466.1 c
-3842 4511.46 l
-3847.28 4519.2 3852.91 4522.8 3861.18 4522.8 c
-3871.44 4522.8 3875 4517.85 3875 4502.64 c
-3875 4464.66 l
-3875 4454.4 3873.52 4452.96 3862.8 4451.7 c
-3862.8 4449 l
-3902.22 4449 l
-3902.22 4451.7 l
-3897.54 4452.06 l
-3892.14 4452.42 3890 4455.66 3890 4462.68 c
-3890 4499.76 l
-3890 4521 3882.91 4531.8 3868.92 4531.8 c
-3858.48 4531.8 3849.3 4527.12 3839.58 4516.68 c
-3836.34 4526.94 3830.22 4531.8 3820.5 4531.8 c
-3812.31 4531.8 3807.57 4529.46 3792.28 4517.94 c
-3792.28 4531.44 l
-3791.34 4531.8 l
-3782.16 4528.38 3776.04 4526.4 3766.14 4523.7 c
-h
-3903.04 4449 m
-f*
-3976.44 4478.52 m
-3967.8 4464.84 3960.06 4459.2 3948.54 4459.2 c
-3938.64 4459.2 3931.08 4464.02 3925.86 4474.02 c
-3922.26 4481.08 3920.82 4487.42 3920.46 4499 c
-3975.9 4499 l
-3974.46 4510.63 3972.66 4515.82 3968.16 4521.54 c
-3962.76 4528.02 3954.48 4531.8 3945.12 4531.8 c
-3922.8 4531.8 3907.5 4513.8 3907.5 4487.52 c
-3907.5 4462.68 3920.46 4447.2 3941.16 4447.2 c
-3958.44 4447.2 3971.76 4457.82 3979.32 4477.26 c
-h
-3920.82 4504 m
-3922.8 4518.66 3928.92 4524.8 3939.9 4524.8 c
-3950.88 4524.8 3955.2 4519.74 3957.54 4504 c
-h
-3982.92 4449 m
-f*
-1 i
-1 g
-3311.75 4641.35 m
-3478.55 4792.55 l
-3395.75 4792.55 l
-3395.75 4946.15 l
-3230.15 4946.15 l
-3230.15 4792.55 l
-3148.55 4792.55 l
-f*
-0 g
-3311.75 4641.35 m
-3478.55 4792.55 l
-3395.75 4792.55 l
-3395.75 4946.15 l
-3230.15 4946.15 l
-3230.15 4792.55 l
-3148.55 4792.55 l
-3311.75 4641.35 l
-3311.75 4654.55 l
-3173.75 4781.75 l
-3239.75 4781.75 l
-3239.75 4936.55 l
-3386.15 4936.55 l
-3386.15 4781.75 l
-3452.15 4781.75 l
-3311.75 4654.55 l
-3311.75 4641.35 l
-f*
-0.564706 g
-2322.95 3735.35 m
-2322.95 3845.75 2231.75 3936.95 2120.15 3936.95 c
-1623.35 3936.95 l
-1511.75 3936.95 1420.55 3845.75 1420.55 3735.35 c
-1420.55 3597.35 l
-1420.55 3486.95 1511.75 3395.75 1623.35 3395.75 c
-2120.15 3395.75 l
-2231.75 3395.75 2322.95 3486.95 2322.95 3597.35 c
-f*
-1 g
-2258.15 3792.95 m
-2258.15 3902.15 2169.35 3990.95 2057.75 3990.95 c
-1566.95 3990.95 l
-1456.55 3990.95 1366.55 3902.15 1366.55 3792.95 c
-1366.55 3658.55 l
-1366.55 3549.35 1455.35 3460.55 1566.95 3460.55 c
-2057.75 3460.55 l
-2169.35 3460.55 2258.15 3549.35 2258.15 3658.55 c
-f*
-0 g
-2258.15 3792.95 m
-2258.15 3902.15 2169.35 3990.95 2057.75 3990.95 c
-1566.95 3990.95 l
-1456.55 3990.95 1366.55 3902.15 1366.55 3792.95 c
-1366.55 3658.55 l
-1366.55 3549.35 1455.35 3460.55 1566.95 3460.55 c
-2057.75 3460.55 l
-2169.35 3460.55 2258.15 3549.35 2258.15 3658.55 c
-h
-S
-0.201248 i
-1599.33 3832 m
-1485.22 3832 l
-1485.22 3827 l
-1499.11 3826.2 1503 3823.18 1503 3812.72 c
-1503 3715.32 l
-1503 3704.85 1500.17 3702.64 1485.22 3701.03 c
-1485.22 3696 l
-1557.67 3696 l
-1557.67 3701 l
-1539.15 3701.81 1536 3704.23 1536 3715.32 c
-1536 3762.21 l
-1556.22 3761.81 1563.55 3754.36 1566.32 3731.02 c
-1571.35 3731.02 l
-1571.35 3799.04 l
-1566.32 3799.04 l
-1562.76 3776.1 1555.82 3769.05 1536 3769.05 c
-1536 3815.74 l
-1536 3823.19 1538.52 3825 1548.41 3825 c
-1567.13 3825 1578.8 3821.64 1585.04 3814.74 c
-1589.47 3809.71 1591.68 3804.27 1594.5 3791.59 c
-1599.33 3791.59 l
-h
-1604.96 3696 m
-f*
-1649.19 3789 m
-1610.84 3789 l
-1610.84 3783.95 l
-1619.49 3782.74 1622 3780.12 1622 3772.07 c
-1622 3712.9 l
-1622 3704.65 1619.93 3702.44 1610.84 3700.83 c
-1610.84 3696 l
-1664.37 3696 l
-1664.37 3700.83 l
-1652.09 3701.63 1650 3704.25 1650 3716.73 c
-1650 3754.76 l
-1650 3765.23 1655.49 3773.88 1661.95 3773.88 c
-1663.56 3773.88 1665.37 3772.47 1667.59 3769.25 c
-1671.41 3763.82 1674.43 3762.01 1679.66 3762.01 c
-1687.11 3762.01 1692.34 3767.64 1692.34 3775.29 c
-1692.34 3784.55 1685.5 3791.41 1676.04 3791.41 c
-1666.1 3791.41 1658.54 3786.12 1649.19 3772.27 c
-h
-1694.35 3696 m
-f*
-1789.19 3708.88 m
-1787.18 3706.87 l
-1786.57 3706.26 1785.97 3706.06 1784.96 3706.06 c
-1782.15 3706.06 1781 3707.67 1781 3711.09 c
-1781 3763.62 l
-1781 3780.73 1765.6 3791.42 1740.89 3791.42 c
-1718.15 3791.42 1702.85 3781.06 1702.85 3765.83 c
-1702.85 3757.38 1707.69 3752.55 1715.94 3752.55 c
-1723.99 3752.55 1729.62 3757.38 1729.62 3764.22 c
-1729.62 3767.04 1728.61 3769.66 1726 3772.88 c
-1724.19 3774.89 1723.58 3776.1 1723.58 3777.3 c
-1723.58 3781.53 1729.02 3784.42 1736.26 3784.42 c
-1748.14 3784.42 1753.86 3779.08 1753.86 3767.04 c
-1753.86 3752.35 l
-1729.91 3745.1 1720.29 3741.48 1712.51 3736.45 c
-1703.46 3730.41 1699 3723.37 1699 3714.52 c
-1699 3702.24 1708.27 3693.18 1721.17 3693.18 c
-1732.84 3693.18 1742.1 3697.21 1753.17 3707.27 c
-1755.38 3697.01 1759.81 3693.18 1769.67 3693.18 c
-1778.32 3693.18 1784.56 3696.4 1792.21 3704.65 c
-h
-1753 3716.13 m
-1747.55 3709.89 1743.52 3707.47 1738.68 3707.47 c
-1732.64 3707.47 1728 3712.91 1728 3720.96 c
-1728 3732.63 1736.61 3740.88 1753 3745.31 c
-h
-1794.62 3696 m
-f*
-1836.4 3789 m
-1797.7 3789 l
-1797.7 3783.95 l
-1806.55 3782.74 1809 3780.32 1809 3772.07 c
-1809 3712.9 l
-1809 3704.65 1806.74 3702.44 1797.7 3700.83 c
-1797.7 3696 l
-1846 3696 l
-1846 3700.83 l
-1838.95 3701.84 1837 3704.65 1837 3712.3 c
-1837 3766.03 l
-1837 3767.04 1839.87 3770.66 1842.18 3772.88 c
-1846.4 3776.1 1850.02 3778.42 1853.65 3778.42 c
-1861.5 3778.42 1865 3773.59 1865 3761 c
-1865 3712.3 l
-1865 3704.05 1862.68 3701.43 1854.85 3700.83 c
-1854.85 3696 l
-1901.95 3696 l
-1901.95 3700.83 l
-1894.9 3701.64 1893 3704.65 1893 3712.3 c
-1893 3766.03 l
-1893 3767.04 1895.73 3770.46 1897.92 3772.68 c
-1902.35 3776.1 1905.97 3778.42 1909.59 3778.42 c
-1917.24 3778.42 1920 3773.38 1920 3761 c
-1920 3712.3 l
-1920 3703.85 1917.85 3701.43 1910.4 3700.83 c
-1910.4 3696 l
-1958.3 3696 l
-1958.3 3701 l
-1950.45 3701.4 1948 3703.78 1948 3712.3 c
-1948 3762.81 l
-1948 3780.12 1937.43 3791.42 1921.07 3791.42 c
-1909.59 3791.42 1901.95 3786.73 1891.48 3773.68 c
-1885.44 3786.36 1878.4 3791.42 1865.72 3791.42 c
-1852.95 3791.42 1843.98 3785.91 1836.4 3773.68 c
-h
-1961.64 3696 m
-f*
-2039.9 3721.16 m
-2031.65 3711.29 2025.61 3707.18 2016.96 3707.18 c
-2009.31 3707.18 2003.27 3710.77 1999.25 3717.94 c
-1995.43 3724.54 1993.82 3731.56 1993.01 3746 c
-2043.73 3746 l
-2042.52 3762.36 2039.5 3771.43 2033.26 3779.12 c
-2026.82 3786.96 2017.36 3791.42 2006.09 3791.42 c
-1980.94 3791.42 1964.03 3771.4 1964.03 3741.88 c
-1964.03 3712.5 1980.53 3693.18 2005.49 3693.18 c
-2021.79 3693.18 2031.65 3699.42 2044.73 3718.34 c
-h
-1992 3753 m
-1992.61 3776.96 1996.23 3784.42 2006.09 3784.42 c
-2011.93 3784.42 2015.55 3781.38 2017.16 3775.49 c
-2018.17 3771.67 2018.57 3766.03 2018.97 3755.77 c
-2018.97 3753 l
-h
-2048.35 3696 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2092 -3696]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4782.95 2934.95 m
-4782.95 3046.55 4691.75 3137.75 4580.15 3137.75 c
-4083.35 3137.75 l
-3971.75 3137.75 3880.55 3046.55 3880.55 2934.95 c
-3880.55 2798.15 l
-3880.55 2686.55 3971.75 2595.35 4083.35 2595.35 c
-4580.15 2595.35 l
-4691.75 2595.35 4782.95 2686.55 4782.95 2798.15 c
-f*
-1 g
-4718.15 2992.55 m
-4718.15 3102.95 4629.35 3191.75 4517.75 3191.75 c
-4026.95 3191.75 l
-3916.55 3191.75 3826.55 3102.95 3826.55 2992.55 c
-3826.55 2859.35 l
-3826.55 2748.95 3915.35 2660.15 4026.95 2660.15 c
-4517.75 2660.15 l
-4629.35 2660.15 4718.15 2748.95 4718.15 2859.35 c
-f*
-0 g
-4718.15 2992.55 m
-4718.15 3102.95 4629.35 3191.75 4517.75 3191.75 c
-4026.95 3191.75 l
-3916.55 3191.75 3826.55 3102.95 3826.55 2992.55 c
-3826.55 2859.35 l
-3826.55 2748.95 3915.35 2660.15 4026.95 2660.15 c
-4517.75 2660.15 l
-4629.35 2660.15 4718.15 2748.95 4718.15 2859.35 c
-h
-S
-0.201248 i
-4059.33 3033 m
-3945.22 3033 l
-3945.22 3028 l
-3959.11 3027.2 3963 3024.18 3963 3013.72 c
-3963 2916.32 l
-3963 2905.85 3960.17 2903.64 3945.22 2902.03 c
-3945.22 2897 l
-4017.67 2897 l
-4017.67 2902 l
-3999.15 2902.81 3996 2905.23 3996 2916.32 c
-3996 2963.21 l
-4016.22 2962.81 4023.55 2955.36 4026.32 2932.02 c
-4031.35 2932.02 l
-4031.35 3000.04 l
-4026.32 3000.04 l
-4022.76 2977.1 4015.82 2970.05 3996 2970.05 c
-3996 3016.74 l
-3996 3024.19 3998.52 3026 4008.41 3026 c
-4027.13 3026 4038.8 3022.64 4045.04 3015.74 c
-4049.47 3010.71 4051.68 3005.27 4054.5 2992.59 c
-4059.33 2992.59 l
-h
-4064.96 2897 m
-f*
-4109.19 2990 m
-4070.84 2990 l
-4070.84 2984.95 l
-4079.49 2983.74 4082 2981.12 4082 2973.07 c
-4082 2913.9 l
-4082 2905.65 4079.93 2903.44 4070.84 2901.83 c
-4070.84 2897 l
-4124.37 2897 l
-4124.37 2901.83 l
-4112.09 2902.63 4110 2905.25 4110 2917.73 c
-4110 2955.76 l
-4110 2966.23 4115.49 2974.88 4121.95 2974.88 c
-4123.56 2974.88 4125.37 2973.47 4127.59 2970.25 c
-4131.41 2964.82 4134.43 2963.01 4139.66 2963.01 c
-4147.11 2963.01 4152.34 2968.64 4152.34 2976.29 c
-4152.34 2985.55 4145.5 2992.41 4136.04 2992.41 c
-4126.1 2992.41 4118.54 2987.12 4109.19 2973.27 c
-h
-4154.35 2897 m
-f*
-4249.19 2909.88 m
-4247.18 2907.87 l
-4246.57 2907.26 4245.97 2907.06 4244.96 2907.06 c
-4242.15 2907.06 4241 2908.67 4241 2912.09 c
-4241 2964.62 l
-4241 2981.73 4225.6 2992.42 4200.89 2992.42 c
-4178.15 2992.42 4162.85 2982.06 4162.85 2966.83 c
-4162.85 2958.38 4167.69 2953.55 4175.94 2953.55 c
-4183.99 2953.55 4189.62 2958.38 4189.62 2965.22 c
-4189.62 2968.04 4188.61 2970.66 4186 2973.88 c
-4184.19 2975.89 4183.58 2977.1 4183.58 2978.3 c
-4183.58 2982.53 4189.02 2985.42 4196.26 2985.42 c
-4208.14 2985.42 4213.86 2980.08 4213.86 2968.04 c
-4213.86 2953.35 l
-4189.91 2946.1 4180.29 2942.48 4172.51 2937.45 c
-4163.46 2931.41 4159 2924.37 4159 2915.52 c
-4159 2903.24 4168.27 2894.18 4181.17 2894.18 c
-4192.84 2894.18 4202.1 2898.21 4213.17 2908.27 c
-4215.38 2898.01 4219.81 2894.18 4229.67 2894.18 c
-4238.32 2894.18 4244.56 2897.4 4252.21 2905.65 c
-h
-4213 2917.13 m
-4207.55 2910.89 4203.52 2908.47 4198.68 2908.47 c
-4192.64 2908.47 4188 2913.91 4188 2921.96 c
-4188 2933.63 4196.61 2941.88 4213 2946.31 c
-h
-4254.62 2897 m
-f*
-4296.4 2990 m
-4257.7 2990 l
-4257.7 2984.95 l
-4266.55 2983.74 4269 2981.32 4269 2973.07 c
-4269 2913.9 l
-4269 2905.65 4266.74 2903.44 4257.7 2901.83 c
-4257.7 2897 l
-4306 2897 l
-4306 2901.83 l
-4298.95 2902.84 4297 2905.65 4297 2913.3 c
-4297 2967.03 l
-4297 2968.04 4299.87 2971.66 4302.18 2973.88 c
-4306.4 2977.1 4310.02 2979.42 4313.65 2979.42 c
-4321.5 2979.42 4325 2974.59 4325 2962 c
-4325 2913.3 l
-4325 2905.05 4322.68 2902.43 4314.85 2901.83 c
-4314.85 2897 l
-4361.95 2897 l
-4361.95 2901.83 l
-4354.9 2902.64 4353 2905.65 4353 2913.3 c
-4353 2967.03 l
-4353 2968.04 4355.73 2971.46 4357.92 2973.68 c
-4362.35 2977.1 4365.97 2979.42 4369.59 2979.42 c
-4377.24 2979.42 4380 2974.38 4380 2962 c
-4380 2913.3 l
-4380 2904.85 4377.85 2902.43 4370.4 2901.83 c
-4370.4 2897 l
-4418.3 2897 l
-4418.3 2902 l
-4410.45 2902.4 4408 2904.78 4408 2913.3 c
-4408 2963.81 l
-4408 2981.12 4397.43 2992.42 4381.07 2992.42 c
-4369.59 2992.42 4361.95 2987.73 4351.48 2974.68 c
-4345.44 2987.36 4338.4 2992.42 4325.72 2992.42 c
-4312.95 2992.42 4303.98 2986.91 4296.4 2974.68 c
-h
-4421.64 2897 m
-f*
-4499.9 2922.16 m
-4491.65 2912.29 4485.61 2908.18 4476.96 2908.18 c
-4469.31 2908.18 4463.27 2911.77 4459.25 2918.94 c
-4455.43 2925.54 4453.82 2932.56 4453.01 2947 c
-4503.73 2947 l
-4502.52 2963.36 4499.5 2972.43 4493.26 2980.12 c
-4486.82 2987.96 4477.36 2992.42 4466.09 2992.42 c
-4440.94 2992.42 4424.03 2972.4 4424.03 2942.88 c
-4424.03 2913.5 4440.53 2894.18 4465.49 2894.18 c
-4481.79 2894.18 4491.65 2900.42 4504.73 2919.34 c
-h
-4452 2954 m
-4452.61 2977.96 4456.23 2985.42 4466.09 2985.42 c
-4471.93 2985.42 4475.55 2982.38 4477.16 2976.49 c
-4478.17 2972.67 4478.57 2967.03 4478.97 2956.77 c
-4478.97 2954 l
-h
-4508.35 2897 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4544 -2895]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3864.95 2228.15 m
-3864.95 2338.55 3773.75 2429.75 3662.15 2429.75 c
-3166.55 2429.75 l
-3054.95 2429.75 2963.75 2338.55 2963.75 2228.15 c
-2963.75 2090.15 l
-2963.75 1979.75 3054.95 1888.55 3166.55 1888.55 c
-3662.15 1888.55 l
-3773.75 1888.55 3864.95 1979.75 3864.95 2090.15 c
-f*
-1 g
-3795.35 2284.55 m
-3795.35 2391.35 3706.55 2478.95 3597.35 2478.95 c
-3112.55 2478.95 l
-3003.35 2478.95 2914.55 2391.35 2914.55 2284.55 c
-2914.55 2152.55 l
-2914.55 2045.75 3003.35 1958.15 3112.55 1958.15 c
-3597.35 1958.15 l
-3706.55 1958.15 3795.35 2045.75 3795.35 2152.55 c
-f*
-16 w
-0 g
-3795.35 2284.55 m
-3795.35 2391.35 3706.55 2478.95 3597.35 2478.95 c
-3112.55 2478.95 l
-3003.35 2478.95 2914.55 2391.35 2914.55 2284.55 c
-2914.55 2152.55 l
-2914.55 2045.75 3003.35 1958.15 3112.55 1958.15 c
-3597.35 1958.15 l
-3706.55 1958.15 3795.35 2045.75 3795.35 2152.55 c
-h
-S
-0.201248 i
-3142.33 2325 m
-3028.22 2325 l
-3028.22 2320 l
-3042.11 2319.2 3046 2316.18 3046 2305.72 c
-3046 2208.32 l
-3046 2197.85 3043.17 2195.64 3028.22 2194.03 c
-3028.22 2189 l
-3100.67 2189 l
-3100.67 2194 l
-3082.15 2194.81 3079 2197.23 3079 2208.32 c
-3079 2255.21 l
-3099.22 2254.81 3106.55 2247.36 3109.32 2224.02 c
-3114.35 2224.02 l
-3114.35 2292.04 l
-3109.32 2292.04 l
-3105.76 2269.1 3098.82 2262.05 3079 2262.05 c
-3079 2308.74 l
-3079 2316.19 3081.52 2318 3091.41 2318 c
-3110.13 2318 3121.8 2314.64 3128.04 2307.74 c
-3132.47 2302.71 3134.68 2297.27 3137.5 2284.59 c
-3142.33 2284.59 l
-h
-3147.96 2189 m
-f*
-3191.19 2282 m
-3152.84 2282 l
-3152.84 2276.95 l
-3161.49 2275.74 3164 2273.12 3164 2265.07 c
-3164 2205.9 l
-3164 2197.65 3161.93 2195.44 3152.84 2193.83 c
-3152.84 2189 l
-3206.37 2189 l
-3206.37 2193.83 l
-3194.09 2194.63 3192 2197.25 3192 2209.73 c
-3192 2247.76 l
-3192 2258.23 3197.49 2266.88 3203.95 2266.88 c
-3205.56 2266.88 3207.37 2265.47 3209.59 2262.25 c
-3213.41 2256.82 3216.43 2255.01 3221.66 2255.01 c
-3229.11 2255.01 3234.34 2260.64 3234.34 2268.29 c
-3234.34 2277.55 3227.5 2284.41 3218.04 2284.41 c
-3208.1 2284.41 3200.54 2279.12 3191.19 2265.27 c
-h
-3236.35 2189 m
-f*
-3331.19 2201.88 m
-3329.18 2199.87 l
-3328.57 2199.26 3327.97 2199.06 3326.96 2199.06 c
-3324.15 2199.06 3323 2200.67 3323 2204.09 c
-3323 2256.62 l
-3323 2273.73 3307.6 2284.42 3282.89 2284.42 c
-3260.15 2284.42 3244.85 2274.06 3244.85 2258.83 c
-3244.85 2250.38 3249.69 2245.55 3257.94 2245.55 c
-3265.99 2245.55 3271.62 2250.38 3271.62 2257.22 c
-3271.62 2260.04 3270.61 2262.66 3268 2265.88 c
-3266.19 2267.89 3265.58 2269.1 3265.58 2270.3 c
-3265.58 2274.53 3271.02 2277.42 3278.26 2277.42 c
-3290.14 2277.42 3295.86 2272.08 3295.86 2260.04 c
-3295.86 2245.35 l
-3271.91 2238.1 3262.29 2234.48 3254.51 2229.45 c
-3245.46 2223.41 3241 2216.37 3241 2207.52 c
-3241 2195.24 3250.27 2186.18 3263.17 2186.18 c
-3274.84 2186.18 3284.1 2190.21 3295.17 2200.27 c
-3297.38 2190.01 3301.81 2186.18 3311.67 2186.18 c
-3320.32 2186.18 3326.56 2189.4 3334.21 2197.65 c
-h
-3295 2209.13 m
-3289.55 2202.89 3285.52 2200.47 3280.68 2200.47 c
-3274.64 2200.47 3270 2205.91 3270 2213.96 c
-3270 2225.63 3278.61 2233.88 3295 2238.31 c
-h
-3336.62 2189 m
-f*
-3378.4 2282 m
-3339.7 2282 l
-3339.7 2276.95 l
-3348.55 2275.74 3351 2273.32 3351 2265.07 c
-3351 2205.9 l
-3351 2197.65 3348.74 2195.44 3339.7 2193.83 c
-3339.7 2189 l
-3388 2189 l
-3388 2193.83 l
-3380.95 2194.84 3379 2197.65 3379 2205.3 c
-3379 2259.03 l
-3379 2260.04 3381.87 2263.66 3384.18 2265.88 c
-3388.4 2269.1 3392.02 2271.42 3395.65 2271.42 c
-3403.5 2271.42 3407 2266.59 3407 2254 c
-3407 2205.3 l
-3407 2197.05 3404.68 2194.43 3396.85 2193.83 c
-3396.85 2189 l
-3443.95 2189 l
-3443.95 2193.83 l
-3436.9 2194.64 3435 2197.65 3435 2205.3 c
-3435 2259.03 l
-3435 2260.04 3437.73 2263.46 3439.92 2265.68 c
-3444.35 2269.1 3447.97 2271.42 3451.59 2271.42 c
-3459.24 2271.42 3462 2266.38 3462 2254 c
-3462 2205.3 l
-3462 2196.85 3459.85 2194.43 3452.4 2193.83 c
-3452.4 2189 l
-3500.3 2189 l
-3500.3 2194 l
-3492.45 2194.4 3490 2196.78 3490 2205.3 c
-3490 2255.81 l
-3490 2273.12 3479.43 2284.42 3463.07 2284.42 c
-3451.59 2284.42 3443.95 2279.73 3433.48 2266.68 c
-3427.44 2279.36 3420.4 2284.42 3407.72 2284.42 c
-3394.95 2284.42 3385.98 2278.91 3378.4 2266.68 c
-h
-3503.64 2189 m
-f*
-3583.9 2214.16 m
-3575.65 2204.29 3569.61 2200.18 3560.96 2200.18 c
-3553.31 2200.18 3547.27 2203.77 3543.25 2210.94 c
-3539.43 2217.54 3537.82 2224.56 3537.01 2239 c
-3587.73 2239 l
-3586.52 2255.36 3583.5 2264.43 3577.26 2272.12 c
-3570.82 2279.96 3561.36 2284.42 3550.09 2284.42 c
-3524.94 2284.42 3508.03 2264.4 3508.03 2234.88 c
-3508.03 2205.5 3524.53 2186.18 3549.49 2186.18 c
-3565.79 2186.18 3575.65 2192.42 3588.73 2211.34 c
-h
-3536 2246 m
-3536.61 2269.96 3540.23 2277.42 3550.09 2277.42 c
-3555.93 2277.42 3559.55 2274.38 3561.16 2268.49 c
-3562.17 2264.67 3562.57 2259.03 3562.97 2248.77 c
-3562.97 2246 l
-h
-3592.35 2189 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3626 -2189]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-8 w
-1811.75 3430.55 m
-1811.75 3438.95 1811.75 3438.95 1811.75 3430.55 c
-1811.75 3282.95 1851.35 3141.35 1923.35 3040.55 c
-S
-1864.55 3046.55 m
-1913.75 3062.15 l
-1938.95 3107.75 l
-2000.15 2960.15 l
-f*
-2304.95 2464.55 m
-2394.95 2346.95 2579.75 2262.95 2800.55 2241.35 c
-S
-2759.75 2198.15 m
-2781.35 2244.95 l
-2765.75 2292.95 l
-2914.55 2236.55 l
-f*
-2891.75 3844.55 m
-2789.75 3944.15 2644.55 4001.75 2490.95 4001.75 c
-2386.55 4001.75 2284.55 3975.35 2196.95 3924.95 c
-S
-2826.95 3838.55 m
-2874.95 3854.15 l
-2898.95 3899.75 l
-2962.55 3753.35 l
-f*
-3246.95 3268.55 m
-3335.75 3094.55 3500.15 2969.75 3695.75 2930.15 c
-S
-3651.35 2890.55 m
-3676.55 2936.15 l
-3664.55 2986.55 l
-3808.55 2915.75 l
-f*
-0.564706 g
-3698.15 3444.95 m
-3563.75 3480.95 l
-3659.75 3537.35 l
-3506.15 3545.75 l
-3548.15 3616.55 l
-3400.55 3596.15 l
-3383.75 3666.95 l
-3263.75 3622.55 l
-3188.15 3686.15 l
-3112.55 3622.55 l
-2992.55 3666.95 l
-2974.55 3596.15 l
-2825.75 3616.55 l
-2870.15 3545.75 l
-2716.55 3537.35 l
-2812.55 3480.95 l
-2676.95 3444.95 l
-2812.55 3410.15 l
-2716.55 3353.75 l
-2870.15 3344.15 l
-2825.75 3274.55 l
-2974.55 3294.95 l
-2992.55 3222.95 l
-3112.55 3268.55 l
-3188.15 3204.95 l
-3263.75 3268.55 l
-3383.75 3222.95 l
-3400.55 3294.95 l
-3548.15 3274.55 l
-3506.15 3344.15 l
-3659.75 3353.75 l
-3563.75 3410.15 l
-f*
-1 g
-3638.15 3504.95 m
-3503.75 3540.95 l
-3599.75 3597.35 l
-3446.15 3605.75 l
-3488.15 3676.55 l
-3340.55 3656.15 l
-3323.75 3726.95 l
-3203.75 3682.55 l
-3128.15 3746.15 l
-3052.55 3682.55 l
-2932.55 3726.95 l
-2914.55 3656.15 l
-2765.75 3676.55 l
-2810.15 3605.75 l
-2656.55 3597.35 l
-2752.55 3540.95 l
-2616.95 3504.95 l
-2752.55 3470.15 l
-2656.55 3413.75 l
-2810.15 3404.15 l
-2765.75 3334.55 l
-2914.55 3354.95 l
-2932.55 3282.95 l
-3052.55 3328.55 l
-3128.15 3264.95 l
-3203.75 3328.55 l
-3323.75 3282.95 l
-3340.55 3354.95 l
-3488.15 3334.55 l
-3446.15 3404.15 l
-3599.75 3413.75 l
-3503.75 3470.15 l
-f*
-0 g
-3638.15 3504.95 m
-3503.75 3540.95 l
-3599.75 3597.35 l
-3446.15 3605.75 l
-3488.15 3676.55 l
-3340.55 3656.15 l
-3323.75 3726.95 l
-3203.75 3682.55 l
-3128.15 3746.15 l
-3052.55 3682.55 l
-2932.55 3726.95 l
-2914.55 3656.15 l
-2765.75 3676.55 l
-2810.15 3605.75 l
-2656.55 3597.35 l
-2752.55 3540.95 l
-2616.95 3504.95 l
-2752.55 3470.15 l
-2656.55 3413.75 l
-2810.15 3404.15 l
-2765.75 3334.55 l
-2914.55 3354.95 l
-2932.55 3282.95 l
-3052.55 3328.55 l
-3128.15 3264.95 l
-3203.75 3328.55 l
-3323.75 3282.95 l
-3340.55 3354.95 l
-3488.15 3334.55 l
-3446.15 3404.15 l
-3599.75 3413.75 l
-3503.75 3470.15 l
-3638.15 3504.95 l
-3599.75 3504.95 l
-3477.35 3473.75 l
-3566.15 3420.95 l
-3428.15 3413.75 l
-3468.95 3347.75 l
-3333.35 3365.75 l
-3316.55 3297.35 l
-3201.35 3339.35 l
-3128.15 3276.95 l
-3054.95 3339.35 l
-2939.75 3297.35 l
-2921.75 3365.75 l
-2786.15 3347.75 l
-2826.95 3413.75 l
-2690.15 3420.95 l
-2778.95 3473.75 l
-2656.55 3504.95 l
-2777.75 3537.35 l
-2690.15 3590.15 l
-2826.95 3597.35 l
-2786.15 3663.35 l
-2921.75 3644.15 l
-2939.75 3713.75 l
-3054.95 3670.55 l
-3128.15 3732.95 l
-3201.35 3670.55 l
-3316.55 3713.75 l
-3333.35 3644.15 l
-3468.95 3663.35 l
-3428.15 3597.35 l
-3566.15 3590.15 l
-3477.35 3537.35 l
-3599.75 3504.95 l
-3638.15 3504.95 l
-f*
-0.2 i
-2950.08 3556.76 m
-2930.08 3482.52 l
-2927.52 3473.88 2924.48 3471.64 2914.08 3471 c
-2914.08 3467 l
-2964 3467 l
-2964 3471 l
-2954.72 3471.48 2952.48 3472.76 2952.48 3477.88 c
-2952.48 3479.64 2952.8 3481.4 2953.76 3485.08 c
-2953.92 3485.88 l
-2954.08 3486.68 l
-2973.76 3558.52 l
-2976.16 3566.84 2978.56 3569.08 2986.72 3570.04 c
-2986.72 3574 l
-2952.8 3574 l
-2903.2 3497.24 l
-2894.56 3574 l
-2859.2 3574 l
-2859.2 3570 l
-2869.28 3569.52 2870.72 3568.89 2870.72 3564.44 c
-2870.72 3562.2 2870.08 3559.32 2868.96 3555.16 c
-2851.52 3495.48 l
-2845.12 3474.68 2844 3472.92 2835.36 3471 c
-2835.36 3467 l
-2868.48 3467 l
-2868.48 3471 l
-2858.24 3472.28 2855.68 3474.2 2855.68 3480.76 c
-2855.68 3483.48 2856.48 3487.48 2858.72 3495.48 c
-2874.88 3554.52 l
-2885.6 3465.08 l
-2890.08 3465.08 l
-h
-2982.24 3467 m
-f*
-3051.44 3487.32 m
-3044.88 3478.52 3042.48 3475.76 3039.92 3475.76 c
-3038.64 3475.76 3038 3476.86 3038 3478.52 c
-3038 3482.52 3039.44 3489.08 3043.44 3502.2 c
-3054.8 3539.96 l
-3037.04 3538.84 l
-3034.16 3529.4 l
-3032.72 3537.56 3029.2 3541.08 3022.32 3541.08 c
-3002.64 3541.08 2979 3510.27 2979 3485.24 c
-2979 3473.08 2985.74 3464.92 2995.92 3464.92 c
-3005.68 3464.92 3013.04 3470.68 3022.16 3486.04 c
-3020.24 3479.48 3020 3477.56 3020 3475.32 c
-3020 3469.4 3024.76 3464.76 3030.64 3464.76 c
-3038.16 3464.76 3045.52 3471 3054.8 3484.92 c
-h
-3024.56 3534.2 m
-3028.08 3533.88 3030.56 3531 3030.56 3526.68 c
-3030.56 3517.08 3025.24 3499.32 3018.96 3488.28 c
-3014.64 3480.44 3009.84 3475.92 3005.52 3475.92 c
-3001.36 3475.92 2998 3479.75 2998 3484.92 c
-2998 3493.24 3003.42 3509.24 3010.16 3521.08 c
-3014.96 3529.56 3020.24 3534.52 3024.56 3534.2 c
-h
-3062 3467 m
-f*
-3096.56 3540.92 m
-3080.24 3538.36 3074 3537.4 3065.68 3536.44 c
-3065.68 3532 l
-3072.88 3531.69 3074.32 3531.07 3074.32 3528.12 c
-3074.32 3526.52 3073.04 3520.76 3070.8 3512.44 c
-3054.8 3450.36 l
-3051.76 3439.8 3050.48 3438.84 3042.8 3439 c
-3042.8 3434 l
-3082.64 3434 l
-3082.64 3439 l
-3074.64 3439.14 3072.24 3440.16 3072.24 3443.64 c
-3072.24 3445.88 3073.36 3450.68 3076.4 3461.88 c
-3077.52 3465.72 3077.52 3466.04 3078.16 3468.44 c
-3083.76 3465.56 3085.68 3464.92 3089.04 3464.92 c
-3110.8 3464.92 3133.36 3493.88 3133.36 3521.56 c
-3133.36 3533.4 3126.64 3541.08 3116.08 3541.08 c
-3106.96 3541.08 3099.92 3535.92 3090.48 3522.52 c
-h
-3107.12 3529.56 m
-3111.28 3529.24 3113.68 3525.56 3113.36 3520.44 c
-3112.72 3509.88 3107.6 3494.04 3101.84 3483.64 c
-3096.88 3475 3091.76 3469.92 3086.32 3469.92 c
-3082.8 3469.92 3080.08 3472.75 3080.08 3476.28 c
-3080.08 3479 3081.84 3485.56 3086.16 3500.12 c
-3089.68 3511.8 3091.12 3515.8 3093.52 3519.48 c
-3097.52 3525.72 3102.96 3529.88 3107.12 3529.56 c
-h
-3142 3467 m
-f*
-3177.56 3540.92 m
-3161.24 3538.36 3155 3537.4 3146.68 3536.44 c
-3146.68 3532 l
-3153.88 3531.69 3155.32 3531.07 3155.32 3528.12 c
-3155.32 3526.52 3154.04 3520.76 3151.8 3512.44 c
-3135.8 3450.36 l
-3132.76 3439.8 3131.48 3438.84 3123.8 3439 c
-3123.8 3434 l
-3163.64 3434 l
-3163.64 3439 l
-3155.64 3439.14 3153.24 3440.16 3153.24 3443.64 c
-3153.24 3445.88 3154.36 3450.68 3157.4 3461.88 c
-3158.52 3465.72 3158.52 3466.04 3159.16 3468.44 c
-3164.76 3465.56 3166.68 3464.92 3170.04 3464.92 c
-3191.8 3464.92 3214.36 3493.88 3214.36 3521.56 c
-3214.36 3533.4 3207.64 3541.08 3197.08 3541.08 c
-3187.96 3541.08 3180.92 3535.92 3171.48 3522.52 c
-h
-3188.12 3529.56 m
-3192.28 3529.24 3194.68 3525.56 3194.36 3520.44 c
-3193.72 3509.88 3188.6 3494.04 3182.84 3483.64 c
-3177.88 3475 3172.76 3469.92 3167.32 3469.92 c
-3163.8 3469.92 3161.08 3472.75 3161.08 3476.28 c
-3161.08 3479 3162.84 3485.56 3167.16 3500.12 c
-3170.68 3511.8 3172.12 3515.8 3174.52 3519.48 c
-3178.52 3525.72 3183.96 3529.88 3188.12 3529.56 c
-h
-3223 3467 m
-f*
-3256.56 3489.56 m
-3254.32 3486.36 l
-3250.16 3480.12 3246.48 3476.56 3244.08 3476.56 c
-3242.8 3476.56 3242 3477.77 3242 3479.16 c
-3242 3480.6 3242.62 3484.76 3243.12 3487.48 c
-3257.68 3540.92 l
-3249.22 3539 3238.26 3537.4 3226.04 3536.44 c
-3226.04 3532 l
-3227.44 3532 l
-3232.24 3532 3235.48 3530.44 3235.48 3527.48 c
-3235.48 3526.2 3234.71 3523.8 3233.68 3521.08 c
-3224.4 3486.68 l
-3223.12 3482.04 3223 3477.88 3223 3475.64 c
-3223 3469.56 3227.2 3465.56 3233.36 3465.56 c
-3242.96 3465.56 3248.88 3470.36 3260.08 3487.32 c
-h
-3252.88 3576.4 m
-3247.44 3576.4 3243 3571.46 3243 3566.04 c
-3243 3559.8 3247.26 3555.4 3253.04 3555.4 c
-3259.12 3555.4 3264 3559.86 3264 3565.56 c
-3264 3571.48 3259 3576.4 3252.88 3576.4 c
-h
-3266.48 3467 m
-f*
-3341.36 3488.6 m
-3334.96 3478.68 3332.88 3476.56 3330.16 3476.56 c
-3328.88 3476.56 3328 3477.63 3328 3479.16 c
-3328 3480.76 3328.94 3484.12 3331.92 3493.08 c
-3337.68 3510.52 l
-3340.24 3518.04 3342 3525.08 3342 3528.92 c
-3342 3536.76 3337.78 3541.08 3330.16 3541.08 c
-3324.24 3541.08 3318.48 3538.62 3314.16 3534.36 c
-3308.24 3528.76 3305.2 3524.92 3294.48 3509.08 c
-3304.72 3540.76 l
-3294.48 3538.52 3281.68 3536.92 3272.72 3536.6 c
-3272.72 3531.8 l
-3279.44 3531.65 3281.36 3530.92 3281.36 3528.12 c
-3281.36 3526.2 3279.12 3517.72 3274 3499.64 c
-3270.32 3486.68 3269.2 3482.52 3265.04 3467 c
-3284.4 3467 l
-3291.92 3494.68 3297.68 3508.6 3307.6 3521.56 c
-3310.8 3525.88 3315.76 3529.08 3318.64 3529.08 c
-3320.72 3529.08 3323 3527.63 3323 3526.04 c
-3323 3525.56 3322.54 3524.28 3321.84 3522.68 c
-3313.04 3496.12 l
-3310.48 3488.44 3309 3479.32 3309 3475.16 c
-3309 3469.08 3312.84 3465.56 3319.44 3465.56 c
-3329.04 3465.56 3335.6 3471 3344.88 3486.52 c
-h
-3354.96 3467 m
-f*
-3432.48 3536 m
-3414.72 3536 l
-3409.28 3539.58 3404.48 3541.08 3397.12 3541.08 c
-3377.44 3541.08 3361 3528.05 3361 3511.8 c
-3361 3503.64 3365.35 3497.88 3374.4 3494.2 c
-3361.28 3486.84 3359 3484.6 3359 3478.68 c
-3359 3473.56 3361.89 3470.52 3368.96 3468.12 c
-3359.04 3465.72 3355.84 3464.44 3352 3461.4 c
-3349.44 3459.16 3348 3455.32 3348 3451.48 c
-3348 3441.08 3359.56 3435 3377.76 3435 c
-3400.32 3435 3416 3444.72 3416 3458.52 c
-3416 3468.28 3409.6 3473.56 3392.16 3478.52 c
-3383.68 3480.92 l
-3378.56 3482.36 3375 3484.6 3375 3487 c
-3375 3489.56 3377.68 3492.28 3380 3492.28 c
-3380.8 3492.28 3381.92 3492.24 3383.2 3492.12 c
-3384.96 3491.64 3386.24 3491 3388.16 3491 c
-3395.2 3491 3402.4 3493.09 3408.48 3496.92 c
-3417.76 3502.2 3423 3510.36 3423 3519.96 c
-3423 3522.64 3422.59 3524.32 3421.76 3527 c
-3432.48 3527 l
-h
-3374.4 3466.04 m
-3376.32 3465.88 3388.48 3461.72 3392 3460.12 c
-3396.48 3457.88 3399 3455.16 3399 3451 c
-3399 3443.96 3391.8 3440 3379.36 3440 c
-3368.96 3440 3362 3445.1 3362 3452.44 c
-3362 3455.48 3363.32 3458.2 3366.24 3461.24 c
-3368.32 3463.32 3373.12 3466.2 3374.4 3466.04 c
-h
-3396.8 3536.08 m
-3400.96 3536.08 3404 3532.19 3404 3526.52 c
-3404 3521.08 3402.08 3513.4 3399.36 3507.48 c
-3396 3500.12 3391.84 3496 3386.88 3496 c
-3382.56 3496 3380 3499.52 3380 3505.88 c
-3380 3512.28 3382.79 3522.04 3386.24 3528.12 c
-3389.28 3533.4 3392.64 3536.08 3396.8 3536.08 c
-h
-3436 3467 m
-f*
-1 i
-0.564706 g
-2768.15 2649.35 m
-2633.75 2686.55 l
-2729.75 2741.75 l
-2576.15 2751.35 l
-2618.15 2820.95 l
-2470.55 2800.55 l
-2453.75 2872.55 l
-2333.75 2826.95 l
-2258.15 2890.55 l
-2182.55 2826.95 l
-2062.55 2872.55 l
-2044.55 2800.55 l
-1895.75 2820.95 l
-1940.15 2751.35 l
-1786.55 2741.75 l
-1882.55 2686.55 l
-1746.95 2649.35 l
-1882.55 2614.55 l
-1786.55 2558.15 l
-1940.15 2549.75 l
-1895.75 2480.15 l
-2044.55 2499.35 l
-2062.55 2428.55 l
-2182.55 2472.95 l
-2258.15 2409.35 l
-2333.75 2472.95 l
-2453.75 2428.55 l
-2470.55 2499.35 l
-2618.15 2480.15 l
-2576.15 2549.75 l
-2729.75 2558.15 l
-2633.75 2614.55 l
-f*
-1 g
-2708.15 2709.35 m
-2573.75 2746.55 l
-2669.75 2801.75 l
-2516.15 2811.35 l
-2558.15 2880.95 l
-2410.55 2860.55 l
-2393.75 2932.55 l
-2273.75 2886.95 l
-2198.15 2950.55 l
-2122.55 2886.95 l
-2002.55 2932.55 l
-1984.55 2860.55 l
-1835.75 2880.95 l
-1880.15 2811.35 l
-1726.55 2801.75 l
-1822.55 2746.55 l
-1686.95 2709.35 l
-1822.55 2674.55 l
-1726.55 2618.15 l
-1880.15 2609.75 l
-1835.75 2540.15 l
-1984.55 2559.35 l
-2002.55 2488.55 l
-2122.55 2532.95 l
-2198.15 2469.35 l
-2273.75 2532.95 l
-2393.75 2488.55 l
-2410.55 2559.35 l
-2558.15 2540.15 l
-2516.15 2609.75 l
-2669.75 2618.15 l
-2573.75 2674.55 l
-f*
-0 g
-2708.15 2709.35 m
-2573.75 2746.55 l
-2669.75 2801.75 l
-2516.15 2811.35 l
-2558.15 2880.95 l
-2410.55 2860.55 l
-2393.75 2932.55 l
-2273.75 2886.95 l
-2198.15 2950.55 l
-2122.55 2886.95 l
-2002.55 2932.55 l
-1984.55 2860.55 l
-1835.75 2880.95 l
-1880.15 2811.35 l
-1726.55 2801.75 l
-1822.55 2746.55 l
-1686.95 2709.35 l
-1822.55 2674.55 l
-1726.55 2618.15 l
-1880.15 2609.75 l
-1835.75 2540.15 l
-1984.55 2559.35 l
-2002.55 2488.55 l
-2122.55 2532.95 l
-2198.15 2469.35 l
-2273.75 2532.95 l
-2393.75 2488.55 l
-2410.55 2559.35 l
-2558.15 2540.15 l
-2516.15 2609.75 l
-2669.75 2618.15 l
-2573.75 2674.55 l
-2708.15 2709.35 l
-2669.75 2709.35 l
-2547.35 2678.15 l
-2636.15 2626.55 l
-2498.15 2618.15 l
-2538.95 2552.15 l
-2403.35 2571.35 l
-2386.55 2501.75 l
-2271.35 2544.95 l
-2198.15 2482.55 l
-2124.95 2544.95 l
-2009.75 2501.75 l
-1991.75 2571.35 l
-1856.15 2552.15 l
-1896.95 2618.15 l
-1760.15 2626.55 l
-1848.95 2678.15 l
-1726.55 2709.35 l
-1847.75 2741.75 l
-1760.15 2794.55 l
-1896.95 2801.75 l
-1856.15 2868.95 l
-1991.75 2849.75 l
-2009.75 2918.15 l
-2124.95 2876.15 l
-2198.15 2938.55 l
-2271.35 2876.15 l
-2386.55 2918.15 l
-2403.35 2849.75 l
-2538.95 2868.95 l
-2498.15 2801.75 l
-2636.15 2794.55 l
-2547.35 2741.75 l
-2669.75 2709.35 l
-2708.15 2709.35 l
-f*
-0.2 i
-2020.08 2760.76 m
-2000.08 2686.52 l
-1997.52 2677.88 1994.48 2675.64 1984.08 2675 c
-1984.08 2671 l
-2034 2671 l
-2034 2675 l
-2024.72 2675.48 2022.48 2676.76 2022.48 2681.88 c
-2022.48 2683.64 2022.8 2685.4 2023.76 2689.08 c
-2023.92 2689.88 l
-2024.08 2690.68 l
-2043.76 2762.52 l
-2046.16 2770.84 2048.56 2773.08 2056.72 2774.04 c
-2056.72 2778 l
-2022.8 2778 l
-1973.2 2701.24 l
-1964.56 2778 l
-1929.2 2778 l
-1929.2 2774 l
-1939.28 2773.52 1940.72 2772.89 1940.72 2768.44 c
-1940.72 2766.2 1940.08 2763.32 1938.96 2759.16 c
-1921.52 2699.48 l
-1915.12 2678.68 1914 2676.92 1905.36 2675 c
-1905.36 2671 l
-1938.48 2671 l
-1938.48 2675 l
-1928.24 2676.28 1925.68 2678.2 1925.68 2684.76 c
-1925.68 2687.48 1926.48 2691.48 1928.72 2699.48 c
-1944.88 2758.52 l
-1955.6 2669.08 l
-1960.08 2669.08 l
-h
-2052.24 2671 m
-f*
-2121.44 2691.32 m
-2114.88 2682.52 2112.48 2679.76 2109.92 2679.76 c
-2108.64 2679.76 2108 2680.86 2108 2682.52 c
-2108 2686.52 2109.44 2693.08 2113.44 2706.2 c
-2124.8 2743.96 l
-2107.04 2742.84 l
-2104.16 2733.4 l
-2102.72 2741.56 2099.2 2745.08 2092.32 2745.08 c
-2072.64 2745.08 2049 2714.27 2049 2689.24 c
-2049 2677.08 2055.74 2668.92 2065.92 2668.92 c
-2075.68 2668.92 2083.04 2674.68 2092.16 2690.04 c
-2090.24 2683.48 2090 2681.56 2090 2679.32 c
-2090 2673.4 2094.76 2668.76 2100.64 2668.76 c
-2108.16 2668.76 2115.52 2675 2124.8 2688.92 c
-h
-2094.56 2738.2 m
-2098.08 2737.88 2100.56 2735 2100.56 2730.68 c
-2100.56 2721.08 2095.24 2703.32 2088.96 2692.28 c
-2084.64 2684.44 2079.84 2679.92 2075.52 2679.92 c
-2071.36 2679.92 2068 2683.75 2068 2688.92 c
-2068 2697.24 2073.42 2713.24 2080.16 2725.08 c
-2084.96 2733.56 2090.24 2738.52 2094.56 2738.2 c
-h
-2132 2671 m
-f*
-2166.56 2744.92 m
-2150.24 2742.36 2144 2741.4 2135.68 2740.44 c
-2135.68 2736 l
-2142.88 2735.69 2144.32 2735.07 2144.32 2732.12 c
-2144.32 2730.52 2143.04 2724.76 2140.8 2716.44 c
-2124.8 2654.36 l
-2121.76 2643.8 2120.48 2642.84 2112.8 2643 c
-2112.8 2638 l
-2152.64 2638 l
-2152.64 2643 l
-2144.64 2643.14 2142.24 2644.16 2142.24 2647.64 c
-2142.24 2649.88 2143.36 2654.68 2146.4 2665.88 c
-2147.52 2669.72 2147.52 2670.04 2148.16 2672.44 c
-2153.76 2669.56 2155.68 2668.92 2159.04 2668.92 c
-2180.8 2668.92 2203.36 2697.88 2203.36 2725.56 c
-2203.36 2737.4 2196.64 2745.08 2186.08 2745.08 c
-2176.96 2745.08 2169.92 2739.92 2160.48 2726.52 c
-h
-2177.12 2733.56 m
-2181.28 2733.24 2183.68 2729.56 2183.36 2724.44 c
-2182.72 2713.88 2177.6 2698.04 2171.84 2687.64 c
-2166.88 2679 2161.76 2673.92 2156.32 2673.92 c
-2152.8 2673.92 2150.08 2676.75 2150.08 2680.28 c
-2150.08 2683 2151.84 2689.56 2156.16 2704.12 c
-2159.68 2715.8 2161.12 2719.8 2163.52 2723.48 c
-2167.52 2729.72 2172.96 2733.88 2177.12 2733.56 c
-h
-2212 2671 m
-f*
-2247.56 2744.92 m
-2231.24 2742.36 2225 2741.4 2216.68 2740.44 c
-2216.68 2736 l
-2223.88 2735.69 2225.32 2735.07 2225.32 2732.12 c
-2225.32 2730.52 2224.04 2724.76 2221.8 2716.44 c
-2205.8 2654.36 l
-2202.76 2643.8 2201.48 2642.84 2193.8 2643 c
-2193.8 2638 l
-2233.64 2638 l
-2233.64 2643 l
-2225.64 2643.14 2223.24 2644.16 2223.24 2647.64 c
-2223.24 2649.88 2224.36 2654.68 2227.4 2665.88 c
-2228.52 2669.72 2228.52 2670.04 2229.16 2672.44 c
-2234.76 2669.56 2236.68 2668.92 2240.04 2668.92 c
-2261.8 2668.92 2284.36 2697.88 2284.36 2725.56 c
-2284.36 2737.4 2277.64 2745.08 2267.08 2745.08 c
-2257.96 2745.08 2250.92 2739.92 2241.48 2726.52 c
-h
-2258.12 2733.56 m
-2262.28 2733.24 2264.68 2729.56 2264.36 2724.44 c
-2263.72 2713.88 2258.6 2698.04 2252.84 2687.64 c
-2247.88 2679 2242.76 2673.92 2237.32 2673.92 c
-2233.8 2673.92 2231.08 2676.75 2231.08 2680.28 c
-2231.08 2683 2232.84 2689.56 2237.16 2704.12 c
-2240.68 2715.8 2242.12 2719.8 2244.52 2723.48 c
-2248.52 2729.72 2253.96 2733.88 2258.12 2733.56 c
-h
-2293 2671 m
-f*
-2326.56 2693.56 m
-2324.32 2690.36 l
-2320.16 2684.12 2316.48 2680.56 2314.08 2680.56 c
-2312.8 2680.56 2312 2681.77 2312 2683.16 c
-2312 2684.6 2312.62 2688.76 2313.12 2691.48 c
-2327.68 2744.92 l
-2319.22 2743 2308.26 2741.4 2296.04 2740.44 c
-2296.04 2736 l
-2297.44 2736 l
-2302.24 2736 2305.48 2734.44 2305.48 2731.48 c
-2305.48 2730.2 2304.71 2727.8 2303.68 2725.08 c
-2294.4 2690.68 l
-2293.12 2686.04 2293 2681.88 2293 2679.64 c
-2293 2673.56 2297.2 2669.56 2303.36 2669.56 c
-2312.96 2669.56 2318.88 2674.36 2330.08 2691.32 c
-h
-2322.88 2780.4 m
-2317.44 2780.4 2313 2775.46 2313 2770.04 c
-2313 2763.8 2317.26 2759.4 2323.04 2759.4 c
-2329.12 2759.4 2334 2763.86 2334 2769.56 c
-2334 2775.48 2329 2780.4 2322.88 2780.4 c
-h
-2336.48 2671 m
-f*
-2411.36 2692.6 m
-2404.96 2682.68 2402.88 2680.56 2400.16 2680.56 c
-2398.88 2680.56 2398 2681.63 2398 2683.16 c
-2398 2684.76 2398.94 2688.12 2401.92 2697.08 c
-2407.68 2714.52 l
-2410.24 2722.04 2412 2729.08 2412 2732.92 c
-2412 2740.76 2407.78 2745.08 2400.16 2745.08 c
-2394.24 2745.08 2388.48 2742.62 2384.16 2738.36 c
-2378.24 2732.76 2375.2 2728.92 2364.48 2713.08 c
-2374.72 2744.76 l
-2364.48 2742.52 2351.68 2740.92 2342.72 2740.6 c
-2342.72 2735.8 l
-2349.44 2735.65 2351.36 2734.92 2351.36 2732.12 c
-2351.36 2730.2 2349.12 2721.72 2344 2703.64 c
-2340.32 2690.68 2339.2 2686.52 2335.04 2671 c
-2354.4 2671 l
-2361.92 2698.68 2367.68 2712.6 2377.6 2725.56 c
-2380.8 2729.88 2385.76 2733.08 2388.64 2733.08 c
-2390.72 2733.08 2393 2731.63 2393 2730.04 c
-2393 2729.56 2392.54 2728.28 2391.84 2726.68 c
-2383.04 2700.12 l
-2380.48 2692.44 2379 2683.32 2379 2679.16 c
-2379 2673.08 2382.84 2669.56 2389.44 2669.56 c
-2399.04 2669.56 2405.6 2675 2414.88 2690.52 c
-h
-2424.96 2671 m
-f*
-2502.48 2740 m
-2484.72 2740 l
-2479.28 2743.58 2474.48 2745.08 2467.12 2745.08 c
-2447.44 2745.08 2431 2732.05 2431 2715.8 c
-2431 2707.64 2435.35 2701.88 2444.4 2698.2 c
-2431.28 2690.84 2429 2688.6 2429 2682.68 c
-2429 2677.56 2431.89 2674.52 2438.96 2672.12 c
-2429.04 2669.72 2425.84 2668.44 2422 2665.4 c
-2419.44 2663.16 2418 2659.32 2418 2655.48 c
-2418 2645.08 2429.56 2639 2447.76 2639 c
-2470.32 2639 2486 2648.72 2486 2662.52 c
-2486 2672.28 2479.6 2677.56 2462.16 2682.52 c
-2453.68 2684.92 l
-2448.56 2686.36 2445 2688.6 2445 2691 c
-2445 2693.56 2447.68 2696.28 2450 2696.28 c
-2450.8 2696.28 2451.92 2696.24 2453.2 2696.12 c
-2454.96 2695.64 2456.24 2695 2458.16 2695 c
-2465.2 2695 2472.4 2697.09 2478.48 2700.92 c
-2487.76 2706.2 2493 2714.36 2493 2723.96 c
-2493 2726.64 2492.59 2728.32 2491.76 2731 c
-2502.48 2731 l
-h
-2444.4 2670.04 m
-2446.32 2669.88 2458.48 2665.72 2462 2664.12 c
-2466.48 2661.88 2469 2659.16 2469 2655 c
-2469 2647.96 2461.8 2644 2449.36 2644 c
-2438.96 2644 2432 2649.1 2432 2656.44 c
-2432 2659.48 2433.32 2662.2 2436.24 2665.24 c
-2438.32 2667.32 2443.12 2670.2 2444.4 2670.04 c
-h
-2466.8 2740.08 m
-2470.96 2740.08 2474 2736.19 2474 2730.52 c
-2474 2725.08 2472.08 2717.4 2469.36 2711.48 c
-2466 2704.12 2461.84 2700 2456.88 2700 c
-2452.56 2700 2450 2703.52 2450 2709.88 c
-2450 2716.28 2452.79 2726.04 2456.24 2732.12 c
-2459.28 2737.4 2462.64 2740.08 2466.8 2740.08 c
-h
-2506 2671 m
-f*
-1 i
-1 g
-4282.55 3248.15 m
-4448.15 3401.75 l
-4366.55 3401.75 l
-4366.55 3552.95 l
-4199.75 3552.95 l
-4199.75 3401.75 l
-4118.15 3401.75 l
-f*
-0 g
-4282.55 3248.15 m
-4448.15 3401.75 l
-4366.55 3401.75 l
-4366.55 3552.95 l
-4199.75 3552.95 l
-4199.75 3401.75 l
-4118.15 3401.75 l
-4282.55 3248.15 l
-4282.55 3262.55 l
-4143.35 3392.15 l
-4209.35 3392.15 l
-4209.35 3543.35 l
-4355.75 3543.35 l
-4355.75 3392.15 l
-4424.15 3392.15 l
-4282.55 3262.55 l
-4282.55 3248.15 l
-f*
-0.2 i
-3770.88 3786.52 m
-3735.78 3786.52 3711 3761.21 3711 3725.12 c
-3711 3688.04 3734.99 3662.48 3769.98 3662.48 c
-3804.54 3662.48 3829 3688.04 3829 3724.58 c
-3829 3740.96 3823.9 3755.9 3814.98 3766.34 c
-3804.18 3779.12 3787.8 3786.52 3770.88 3786.52 c
-h
-3769.44 3779.52 m
-3777.9 3779.52 3785.46 3777.05 3791.94 3772.1 c
-3802.2 3763.46 3808 3746.18 3808 3725.66 c
-3808 3704.06 3803.25 3688.4 3793.56 3678.5 c
-3787.44 3672.38 3779.16 3669.48 3770.16 3669.48 c
-3761.88 3669.48 3754.14 3672.01 3747.84 3677.06 c
-3737.76 3685.34 3732 3703.34 3732 3724.76 c
-3732 3741.86 3736.54 3758.96 3743.34 3767.6 c
-3750 3775.52 3759.72 3779.52 3769.44 3779.52 c
-h
-3834.96 3665 m
-f*
-3838.42 3777.14 m
-3839.5 3777.14 l
-3841.48 3777.32 3843.64 3777.5 3845.08 3777.5 c
-3850.84 3777.5 3853 3774.98 3853 3766.52 c
-3853 3680.66 l
-3853 3670.94 3850.41 3668.6 3838.78 3667.7 c
-3838.78 3665 l
-3881.26 3665 l
-3881.26 3668 l
-3869.74 3668.7 3868 3670.46 3868 3680.12 c
-3868 3787.58 l
-3867.04 3787.94 l
-3857.68 3784.88 3850.84 3783.08 3838.42 3780.02 c
-h
-3885.04 3665 m
-f*
-3946.92 3663.2 m
-3973.38 3672.56 l
-3973.38 3676 l
-3970.32 3675.26 3970.14 3675.82 3969.24 3675.82 c
-3962.76 3675.82 3961 3677.69 3961 3685.52 c
-3961 3787.58 l
-3960.42 3787.94 l
-3951.78 3784.88 3945.48 3783.08 3933.96 3780.02 c
-3933.96 3777.14 l
-3935.4 3777.32 3936.48 3777.32 3937.92 3777.32 c
-3944.58 3777.32 3946 3775.52 3946 3768.14 c
-3946 3740.06 l
-3939.23 3745.82 3934.42 3747.8 3927.3 3747.8 c
-3906.6 3747.8 3890 3727.46 3890 3701.9 c
-3890 3678.86 3903.26 3663.2 3923.16 3663.2 c
-3933.15 3663.2 3939.93 3666.8 3946 3675.26 c
-3946 3663.74 l
-h
-3946 3683.36 m
-3946 3682.1 3945 3680.12 3943.5 3678.32 c
-3940.26 3674.54 3935.76 3672.2 3930.18 3672.2 c
-3915.06 3672.2 3905 3686.74 3905 3709.1 c
-3905 3729.44 3913.95 3742.8 3927.84 3742.8 c
-3937.56 3742.8 3946 3734.32 3946 3724.76 c
-h
-3975 3665 m
-f*
-4020 3665 m
-f*
-4023.06 3784 m
-4023.06 3781 l
-4038.18 3780.09 4040 3778.07 4040 3764.54 c
-4040 3684.62 l
-4040 3671.3 4037.71 3668.96 4023.06 3668.42 c
-4023.06 3665 l
-4083.18 3665 l
-4110 3665 4127 3677.42 4127 3697.4 c
-4127 3705.32 4123.85 3712.52 4117.92 3717.74 c
-4112.52 3722.6 4107.66 3724.94 4095.96 3727.64 c
-4105.32 3729.98 4109.1 3731.78 4113.42 3735.56 c
-4117.92 3739.52 4121 3746.18 4121 3753.56 c
-4121 3773.72 4104.85 3784 4073.46 3784 c
-h
-4059 3723.68 m
-4075.94 3723.68 4083.78 3722.78 4090.56 3720.26 c
-4101 3716.12 4106 3708.74 4106 3697.22 c
-4106 3687.5 4102.23 3680.48 4095.06 3676.34 c
-4089.3 3672.92 4082.1 3672 4069.5 3672 c
-4061.22 3672 4059 3673.55 4059 3679.04 c
-h
-4059 3730.88 m
-4059 3772.1 l
-4059 3775.88 4060.16 3777 4062.66 3777 c
-4070.58 3777 l
-4091.28 3777 4102 3768.71 4102 3752.84 c
-4102 3738.8 4092.55 3730.88 4075.8 3730.88 c
-h
-4140.06 3665 m
-f*
-4219.56 3676.88 m
-4216.5 3674.36 4214.34 3673.2 4211.64 3673.2 c
-4207.5 3673.2 4206 3675.78 4206 3683.9 c
-4206 3719 l
-4206 3728.18 4205.16 3733.22 4202.82 3737.36 c
-4199.04 3744.2 4191.3 3747.8 4180.32 3747.8 c
-4171.14 3747.8 4162.5 3745.28 4157.46 3741.14 c
-4152.96 3737.36 4150 3732.14 4150 3727.64 c
-4150 3723.5 4153.46 3719.9 4157.82 3719.9 c
-4162.14 3719.9 4165.92 3723.5 4165.92 3727.46 c
-4165.92 3728.18 4165.74 3729.08 4165.56 3730.34 c
-4165.2 3731.96 4165 3733.4 4165 3734.66 c
-4165 3739.52 4170.77 3743.8 4177.98 3743.8 c
-4186.8 3743.8 4191 3738.47 4191 3728.54 c
-4191 3717.56 l
-4163.76 3706.4 4160.75 3704.96 4153.14 3698.12 c
-4149.18 3694.52 4146.66 3688.4 4146.66 3682.46 c
-4146.66 3671.12 4154.4 3663.2 4165.56 3663.2 c
-4173.48 3663.2 4180.86 3666.98 4191.84 3676.34 c
-4192.74 3666.8 4195.98 3663.2 4203.36 3663.2 c
-4209.48 3663.2 4213.26 3665.36 4219.56 3672.2 c
-h
-4191 3687.14 m
-4191 3681.56 4190.23 3679.94 4186.98 3677.6 c
-4182.66 3675.08 4177.62 3673.2 4173.84 3673.2 c
-4167.54 3673.2 4162.48 3679.51 4162.48 3687.5 c
-4162.48 3688.22 l
-4162.48 3698.84 4169.7 3705.32 4191 3713.24 c
-h
-4219.92 3665 m
-f*
-4277.06 3721.52 m
-4276.34 3746 l
-4274 3746 l
-4273.64 3745.64 l
-4272.02 3744.38 4271.84 3744.2 4271.12 3744.2 c
-4270.04 3744.2 4268.24 3744.56 4266.26 3745.46 c
-4262.48 3746.9 4258.34 3747.62 4254.02 3747.62 c
-4239.26 3747.62 4229 3738.62 4229 3725.48 c
-4229 3715.4 4234.81 3708.38 4250.24 3699.56 c
-4260.68 3693.62 l
-4266.98 3690.02 4270 3685.7 4270 3680.12 c
-4270 3672.2 4264.26 3667.2 4255.1 3667.2 c
-4242.68 3667.2 4236.38 3674.03 4232.24 3692.36 c
-4229.18 3692.36 l
-4229.18 3664.28 l
-4231.7 3664.28 l
-4232.96 3666.08 4233.68 3666.44 4235.84 3666.44 c
-4237.82 3666.44 4239.8 3666.08 4244.12 3665 c
-4249.16 3663.92 4253.66 3663.2 4257.44 3663.2 c
-4271.12 3663.2 4283 3673.64 4283 3686.24 c
-4283 3695.24 4278.76 3701.18 4267.52 3707.66 c
-4248.08 3719.18 l
-4243.04 3722.06 4240 3726.56 4240 3731.42 c
-4240 3738.8 4245.72 3743.62 4254.2 3743.62 c
-4264.46 3743.62 4269.86 3737.69 4274 3721.52 c
-h
-4290.02 3665 m
-f*
-4363.44 3694.52 m
-4354.8 3680.84 4347.06 3675.2 4335.54 3675.2 c
-4325.64 3675.2 4318.08 3680.02 4312.86 3690.02 c
-4309.26 3697.08 4307.82 3703.42 4307.46 3715 c
-4362.9 3715 l
-4361.46 3726.63 4359.66 3731.82 4355.16 3737.54 c
-4349.76 3744.02 4341.48 3747.8 4332.12 3747.8 c
-4309.8 3747.8 4294.5 3729.8 4294.5 3703.52 c
-4294.5 3678.68 4307.46 3663.2 4328.16 3663.2 c
-4345.44 3663.2 4358.76 3673.82 4366.32 3693.26 c
-h
-4307.82 3720 m
-4309.8 3734.66 4315.92 3740.8 4326.9 3740.8 c
-4337.88 3740.8 4342.2 3735.74 4344.54 3720 c
-h
-4369.92 3665 m
-f*
-4415 3665 m
-f*
-4501.22 3706.58 m
-4501.22 3748.34 l
-4497.08 3748.34 l
-4494.92 3733.94 4491.68 3731 4477.28 3731 c
-4452 3731 l
-4452 3771.2 l
-4452 3776.24 4452.77 3777 4456.94 3777 c
-4481.42 3777 l
-4501.76 3777 4505.72 3774.35 4508.78 3758.42 c
-4513.28 3758.42 l
-4512.74 3784 l
-4417.16 3784 l
-4417.16 3780.74 l
-4430.48 3779.66 4433 3777.32 4433 3764.54 c
-4433 3686.6 l
-4433 3671.66 4431 3669.32 4417.16 3668.42 c
-4417.16 3665 l
-4467.56 3665 l
-4467.56 3668 l
-4453.7 3668.74 4452 3671.32 4452 3684.62 c
-4452 3724 l
-4477.28 3724 l
-4491.86 3724 4494.92 3721.28 4497.08 3706.58 c
-h
-4515.08 3665 m
-f*
-4516.26 3735.2 m
-4518.78 3735.74 4520.4 3735.92 4522.56 3735.92 c
-4527.06 3735.92 4529 3733.04 4529 3725.12 c
-4529 3680.12 l
-4529 3671.12 4527.71 3669.86 4515.9 3667.7 c
-4515.9 3665 l
-4559.1 3665 l
-4559.1 3668 l
-4546.86 3668.53 4544 3671.17 4544 3681.2 c
-4544 3721.7 l
-4544 3727.46 4551.44 3736.46 4556.4 3736.46 c
-4557.48 3736.46 4559.1 3735.56 4561.08 3733.76 c
-4563.96 3731.06 4565.94 3730.16 4568.28 3730.16 c
-4572.6 3730.16 4575.3 3733.22 4575.3 3738.26 c
-4575.3 3744.2 4571.52 3747.8 4565.4 3747.8 c
-4557.91 3747.8 4552.92 3743.84 4544 3730.88 c
-4544 3747.44 l
-4542.9 3747.8 l
-4533.36 3744.02 4526.88 3741.5 4516.26 3738.08 c
-h
-4574.94 3665 m
-f*
-4654.56 3676.88 m
-4651.5 3674.36 4649.34 3673.2 4646.64 3673.2 c
-4642.5 3673.2 4641 3675.78 4641 3683.9 c
-4641 3719 l
-4641 3728.18 4640.16 3733.22 4637.82 3737.36 c
-4634.04 3744.2 4626.3 3747.8 4615.32 3747.8 c
-4606.14 3747.8 4597.5 3745.28 4592.46 3741.14 c
-4587.96 3737.36 4585 3732.14 4585 3727.64 c
-4585 3723.5 4588.46 3719.9 4592.82 3719.9 c
-4597.14 3719.9 4600.92 3723.5 4600.92 3727.46 c
-4600.92 3728.18 4600.74 3729.08 4600.56 3730.34 c
-4600.2 3731.96 4600 3733.4 4600 3734.66 c
-4600 3739.52 4605.77 3743.8 4612.98 3743.8 c
-4621.8 3743.8 4626 3738.47 4626 3728.54 c
-4626 3717.56 l
-4598.76 3706.4 4595.75 3704.96 4588.14 3698.12 c
-4584.18 3694.52 4581.66 3688.4 4581.66 3682.46 c
-4581.66 3671.12 4589.4 3663.2 4600.56 3663.2 c
-4608.48 3663.2 4615.86 3666.98 4626.84 3676.34 c
-4627.74 3666.8 4630.98 3663.2 4638.36 3663.2 c
-4644.48 3663.2 4648.26 3665.36 4654.56 3672.2 c
-h
-4626 3687.14 m
-4626 3681.56 4625.23 3679.94 4621.98 3677.6 c
-4617.66 3675.08 4612.62 3673.2 4608.84 3673.2 c
-4602.54 3673.2 4597.48 3679.51 4597.48 3687.5 c
-4597.48 3688.22 l
-4597.48 3698.84 4604.7 3705.32 4626 3713.24 c
-h
-4654.92 3665 m
-f*
-4658.14 3736.64 m
-4660.48 3737.18 4661.92 3737.36 4663.9 3737.36 c
-4668.58 3737.36 4670 3734.48 4670 3725.84 c
-4670 3680.3 l
-4670 3670.58 4667.52 3667.88 4657.6 3667.7 c
-4657.6 3665 l
-4697.56 3665 l
-4697.56 3668 l
-4688.02 3668.35 4685 3670.27 4685 3677.06 c
-4685 3727.82 l
-4685 3728.18 4686.23 3729.44 4687.66 3730.88 c
-4691.98 3735.2 4700.08 3738.8 4706.74 3738.8 c
-4714.48 3738.8 4719 3732.2 4719 3719.54 c
-4719 3680.48 l
-4719 3670.4 4716.93 3668.42 4706.2 3667.7 c
-4706.2 3665 l
-4746.52 3665 l
-4746.52 3668 l
-4736.26 3668.18 4734 3671.17 4734 3682.1 c
-4734 3727.46 l
-4739.28 3735.2 4744.91 3738.8 4753.18 3738.8 c
-4763.44 3738.8 4767 3733.85 4767 3718.64 c
-4767 3680.66 l
-4767 3670.4 4765.52 3668.96 4754.8 3667.7 c
-4754.8 3665 l
-4794.22 3665 l
-4794.22 3667.7 l
-4789.54 3668.06 l
-4784.14 3668.42 4782 3671.66 4782 3678.68 c
-4782 3715.76 l
-4782 3737 4774.91 3747.8 4760.92 3747.8 c
-4750.48 3747.8 4741.3 3743.12 4731.58 3732.68 c
-4728.34 3742.94 4722.22 3747.8 4712.5 3747.8 c
-4704.31 3747.8 4699.57 3745.46 4684.28 3733.94 c
-4684.28 3747.44 l
-4683.34 3747.8 l
-4674.16 3744.38 4668.04 3742.4 4658.14 3739.7 c
-h
-4795.04 3665 m
-f*
-4868.44 3694.52 m
-4859.8 3680.84 4852.06 3675.2 4840.54 3675.2 c
-4830.64 3675.2 4823.08 3680.02 4817.86 3690.02 c
-4814.26 3697.08 4812.82 3703.42 4812.46 3715 c
-4867.9 3715 l
-4866.46 3726.63 4864.66 3731.82 4860.16 3737.54 c
-4854.76 3744.02 4846.48 3747.8 4837.12 3747.8 c
-4814.8 3747.8 4799.5 3729.8 4799.5 3703.52 c
-4799.5 3678.68 4812.46 3663.2 4833.16 3663.2 c
-4850.44 3663.2 4863.76 3673.82 4871.32 3693.26 c
-h
-4812.82 3720 m
-4814.8 3734.66 4820.92 3740.8 4831.9 3740.8 c
-4842.88 3740.8 4847.2 3735.74 4849.54 3720 c
-h
-4874.92 3665 m
-f*
-2884.26 1356.36 m
-2873.64 1345.2 2867.88 1340.88 2859.06 1337.46 c
-2853.84 1335.3 2847.9 1334.58 2842.86 1334.58 c
-2830.98 1334.58 2819.64 1340.74 2814.42 1349.88 c
-2809.2 1359.42 2807 1372.2 2807 1390.38 c
-2807 1427.64 2818.23 1447.7 2839.8 1447.7 c
-2848.26 1447.7 2856 1444.38 2863.74 1437.36 c
-2871.48 1430.52 2875.62 1424.4 2881.92 1410.72 c
-2886.42 1410.72 l
-2886.42 1453.16 l
-2881.56 1453.16 l
-2878.86 1446.43 2877.06 1444.56 2873.64 1444.56 c
-2871.84 1444.56 2869.5 1445.28 2865.36 1447.08 c
-2854.92 1451.4 2846.1 1453.7 2837.46 1453.7 c
-2801.64 1453.7 2775 1425.84 2775 1388.76 c
-2775 1351.68 2801.21 1325.58 2838.54 1325.58 c
-2859.24 1325.58 2871.48 1331.88 2889.66 1351.86 c
-h
-2895.96 1329 m
-f*
-2959.18 1326.66 m
-2966.78 1329.36 2971.02 1330.08 2982.5 1331.34 c
-2993.66 1332.6 l
-2993.66 1337 l
-2985.74 1337.35 2984 1339.63 2984 1347.18 c
-2984 1412 l
-2947.4 1412 l
-2947.4 1407.66 l
-2956.4 1406.94 2959 1404.78 2959 1397.04 c
-2959 1346.1 l
-2952.88 1340.16 2949.18 1338.48 2943.8 1338.48 c
-2936.42 1338.48 2934 1342 2934 1350.96 c
-2934 1412 l
-2899.88 1412 l
-2899.88 1407.66 l
-2907.26 1406.22 2909 1404.6 2909 1397.04 c
-2909 1351.68 l
-2909 1335.84 2917.89 1326.48 2932.64 1326.48 c
-2942.16 1326.48 2948.56 1329.36 2959.18 1338.36 c
-h
-2997.08 1329 m
-f*
-3035.28 1412 m
-3001.22 1412 l
-3001.22 1407.66 l
-3008.96 1406.58 3011 1404.24 3011 1397.04 c
-3011 1344.12 l
-3011 1336.74 3009.19 1334.76 3001.22 1333.32 c
-3001.22 1329 l
-3049.1 1329 l
-3049.1 1333.32 l
-3038.12 1334.04 3036 1336.38 3036 1347.54 c
-3036 1381.56 l
-3036 1390.92 3041.02 1398.66 3046.94 1398.66 c
-3048.38 1398.66 3050 1397.4 3051.98 1394.52 c
-3055.4 1389.66 3058.1 1388.04 3062.78 1388.04 c
-3069.44 1388.04 3074.12 1393.08 3074.12 1399.92 c
-3074.12 1408.2 3068 1414.16 3059.54 1414.16 c
-3050.55 1414.16 3043.73 1409.47 3035.28 1397.22 c
-h
-3075.92 1329 m
-f*
-3116.28 1412 m
-3082.22 1412 l
-3082.22 1407.66 l
-3089.96 1406.58 3092 1404.24 3092 1397.04 c
-3092 1344.12 l
-3092 1336.74 3090.19 1334.76 3082.22 1333.32 c
-3082.22 1329 l
-3130.1 1329 l
-3130.1 1333.32 l
-3119.12 1334.04 3117 1336.38 3117 1347.54 c
-3117 1381.56 l
-3117 1390.92 3122.02 1398.66 3127.94 1398.66 c
-3129.38 1398.66 3131 1397.4 3132.98 1394.52 c
-3136.4 1389.66 3139.1 1388.04 3143.78 1388.04 c
-3150.44 1388.04 3155.12 1393.08 3155.12 1399.92 c
-3155.12 1408.2 3149 1414.16 3140.54 1414.16 c
-3131.55 1414.16 3124.73 1409.47 3116.28 1397.22 c
-h
-3156.92 1329 m
-f*
-3228.36 1351.5 m
-3220.98 1342.68 3215.58 1339.48 3207.84 1339.48 c
-3201 1339.48 3195.6 1342.53 3192 1348.62 c
-3188.58 1354.36 3187.14 1360.45 3186.42 1373 c
-3231.78 1373 l
-3230.7 1387.99 3228 1396.3 3222.42 1403.34 c
-3216.66 1410.36 3208.2 1414.16 3198.12 1414.16 c
-3175.62 1414.16 3160.5 1396.33 3160.5 1370.04 c
-3160.5 1343.76 3175.26 1326.48 3197.58 1326.48 c
-3212.16 1326.48 3220.98 1332.06 3232.68 1348.98 c
-h
-3185.52 1380 m
-3186.06 1401.42 3189.3 1408.16 3198.12 1408.16 c
-3203.34 1408.16 3206.58 1405.42 3208.02 1400.1 c
-3208.92 1396.68 3209.28 1391.64 3209.64 1382.46 c
-3209.64 1380 l
-h
-3235.92 1329 m
-f*
-3273.82 1412 m
-3239.78 1412 l
-3239.78 1407.66 l
-3247.7 1406.4 3249 1404.6 3249 1397.04 c
-3249 1344.12 l
-3249 1336.56 3247.61 1334.94 3239.78 1333.32 c
-3239.78 1329 l
-3283.16 1329 l
-3283.16 1333.32 l
-3276.5 1334.22 3274 1336.92 3274 1343.58 c
-3274 1391.64 l
-3274 1392.36 3275.4 1394.16 3277.4 1395.96 c
-3281.36 1399.92 3285.68 1402.16 3290 1402.16 c
-3296.12 1402.16 3299 1397.27 3299 1387.14 c
-3299 1343.58 l
-3299 1336.92 3296.71 1334.04 3290.72 1333.32 c
-3290.72 1329 l
-3333.02 1329 l
-3333.02 1333.32 l
-3326 1333.86 3324 1336.02 3324 1343.58 c
-3324 1388.76 l
-3324 1404.24 3314.54 1414.16 3299.9 1414.16 c
-3288.96 1414.16 3280.57 1409.11 3273.82 1398.48 c
-h
-3336.08 1329 m
-f*
-3390.9 1412 m
-3374 1412 l
-3374 1442.4 l
-3369.48 1442.4 l
-3358.5 1426.92 3351.3 1418.82 3339.6 1408.92 c
-3339.6 1404 l
-3349 1404 l
-3349 1345.74 l
-3349 1334.04 3356.73 1326.84 3369.12 1326.84 c
-3381.18 1326.84 3388.38 1332.24 3395.76 1347 c
-3391.26 1348.98 l
-3387.66 1342.14 3384.78 1339.84 3381 1339.84 c
-3375.96 1339.84 3374 1342.83 3374 1349.88 c
-3374 1404 l
-3390.9 1404 l
-h
-3395.94 1329 m
-f*
-3441 1329 m
-f*
-3545.94 1451 m
-3443.88 1451 l
-3443.88 1446 l
-3456.3 1445.29 3460 1442.63 3460 1433.4 c
-3460 1346.28 l
-3460 1336.92 3457.44 1334.94 3443.88 1333.5 c
-3443.88 1329 l
-3508.68 1329 l
-3508.68 1334 l
-3492.12 1334.69 3489 1336.77 3489 1346.28 c
-3489 1388.22 l
-3507.28 1387.86 3513.91 1381.2 3516.42 1360.32 c
-3520.92 1360.32 l
-3520.92 1421.16 l
-3516.42 1421.16 l
-3513.19 1400.64 3506.92 1394.34 3489 1394.34 c
-3489 1436.1 l
-3489 1442.76 3491.32 1445 3500.4 1445 c
-3517.14 1445 3527.58 1441.8 3533.16 1435.2 c
-3537.12 1430.7 3539.1 1425.84 3541.62 1414.5 c
-3545.94 1414.5 l
-h
-3550.98 1329 m
-f*
-3590.28 1412 m
-3556.22 1412 l
-3556.22 1407.66 l
-3563.96 1406.58 3566 1404.24 3566 1397.04 c
-3566 1344.12 l
-3566 1336.74 3564.19 1334.76 3556.22 1333.32 c
-3556.22 1329 l
-3604.1 1329 l
-3604.1 1333.32 l
-3593.12 1334.04 3591 1336.38 3591 1347.54 c
-3591 1381.56 l
-3591 1390.92 3596.02 1398.66 3601.94 1398.66 c
-3603.38 1398.66 3605 1397.4 3606.98 1394.52 c
-3610.4 1389.66 3613.1 1388.04 3617.78 1388.04 c
-3624.44 1388.04 3629.12 1393.08 3629.12 1399.92 c
-3629.12 1408.2 3623 1414.16 3614.54 1414.16 c
-3605.55 1414.16 3598.73 1409.47 3590.28 1397.22 c
-h
-3630.92 1329 m
-f*
-3716.14 1340.52 m
-3714.34 1338.72 l
-3713.8 1338.18 3713.26 1338 3712.36 1338 c
-3709.84 1338 3709 1339.44 3709 1342.5 c
-3709 1389.48 l
-3709 1404.78 3695.16 1414.16 3672.94 1414.16 c
-3652.6 1414.16 3638.92 1404.97 3638.92 1391.46 c
-3638.92 1383.9 3643.24 1379.58 3650.62 1379.58 c
-3657.82 1379.58 3662.86 1383.9 3662.86 1390.02 c
-3662.86 1392.54 3661.96 1394.88 3659.62 1397.76 c
-3658 1399.56 3657.46 1400.64 3657.46 1401.72 c
-3657.46 1405.5 3662.32 1408.16 3668.8 1408.16 c
-3679.42 1408.16 3684 1403.37 3684 1392.54 c
-3684 1379.4 l
-3662.89 1372.92 3654.41 1369.68 3647.56 1365.18 c
-3639.46 1359.78 3636 1353.48 3636 1345.56 c
-3636 1334.58 3644.07 1326.48 3655.3 1326.48 c
-3665.74 1326.48 3674.02 1330.08 3683.92 1339.08 c
-3685.9 1329.9 3689.86 1326.48 3698.68 1326.48 c
-3706.42 1326.48 3712 1329.36 3718.84 1336.74 c
-h
-3684 1347 m
-3679.04 1341.42 3675.37 1339.26 3670.96 1339.26 c
-3665.56 1339.26 3662 1344.12 3662 1351.32 c
-3662 1361.76 3669.57 1369.14 3684 1373.1 c
-h
-3721 1329 m
-f*
-3758.46 1412 m
-3723.73 1412 l
-3723.73 1407.66 l
-3731.65 1406.58 3734 1404.42 3734 1397.04 c
-3734 1344.12 l
-3734 1336.74 3731.95 1334.76 3723.73 1333.32 c
-3723.73 1329 l
-3766.93 1329 l
-3766.93 1333.32 l
-3760.63 1334.22 3759 1336.74 3759 1343.58 c
-3759 1391.64 l
-3759 1392.54 3761.51 1395.78 3763.51 1397.76 c
-3767.29 1400.64 3770.53 1402.16 3773.77 1402.16 c
-3780.79 1402.16 3784 1398 3784 1387.14 c
-3784 1343.58 l
-3784 1336.2 3781.9 1333.86 3774.85 1333.32 c
-3774.85 1329 l
-3816.97 1329 l
-3816.97 1333.32 l
-3810.67 1334.04 3809 1336.74 3809 1343.58 c
-3809 1391.64 l
-3809 1392.54 3811.43 1395.6 3813.37 1397.58 c
-3817.33 1400.64 3820.57 1402.16 3823.81 1402.16 c
-3830.65 1402.16 3833 1397.82 3833 1387.14 c
-3833 1343.58 l
-3833 1336.02 3831.1 1333.86 3824.53 1333.32 c
-3824.53 1329 l
-3867.37 1329 l
-3867.37 1333 l
-3860.35 1333.37 3858 1335.6 3858 1343.58 c
-3858 1388.76 l
-3858 1404.24 3848.6 1414.16 3834.07 1414.16 c
-3823.81 1414.16 3816.97 1410.01 3807.61 1398.48 c
-3802.21 1409.82 3795.91 1414.16 3784.57 1414.16 c
-3773.2 1414.16 3765.21 1409.29 3758.46 1398.48 c
-h
-3870.94 1329 m
-f*
-3943.36 1351.5 m
-3935.98 1342.68 3930.58 1339.48 3922.84 1339.48 c
-3916 1339.48 3910.6 1342.53 3907 1348.62 c
-3903.58 1354.36 3902.14 1360.45 3901.42 1373 c
-3946.78 1373 l
-3945.7 1387.99 3943 1396.3 3937.42 1403.34 c
-3931.66 1410.36 3923.2 1414.16 3913.12 1414.16 c
-3890.62 1414.16 3875.5 1396.33 3875.5 1370.04 c
-3875.5 1343.76 3890.26 1326.48 3912.58 1326.48 c
-3927.16 1326.48 3935.98 1332.06 3947.68 1348.98 c
-h
-3900.52 1380 m
-3901.06 1401.42 3904.3 1408.16 3913.12 1408.16 c
-3918.34 1408.16 3921.58 1405.42 3923.02 1400.1 c
-3923.92 1396.68 3924.28 1391.64 3924.64 1382.46 c
-3924.64 1380 l
-h
-3950.92 1329 m
-f*
-1 i
-2765.75 1294.55 1184.4 15.5999 re
-f
-1 g
-3371.75 1520.15 m
-3538.55 1673.75 l
-3455.75 1673.75 l
-3455.75 1824.95 l
-3290.15 1824.95 l
-3290.15 1673.75 l
-3208.55 1673.75 l
-f*
-0 g
-3371.75 1520.15 m
-3538.55 1673.75 l
-3455.75 1673.75 l
-3455.75 1824.95 l
-3290.15 1824.95 l
-3290.15 1673.75 l
-3208.55 1673.75 l
-3371.75 1520.15 l
-3371.75 1533.35 l
-3233.75 1662.95 l
-3299.75 1662.95 l
-3299.75 1814.15 l
-3446.15 1814.15 l
-3446.15 1662.95 l
-3513.35 1662.95 l
-3371.75 1533.35 l
-3371.75 1520.15 l
-f*
-0.201248 i
-1610.33 1522 m
-1496.22 1522 l
-1496.22 1517 l
-1510.11 1516.2 1514 1513.18 1514 1502.72 c
-1514 1405.32 l
-1514 1394.85 1511.17 1392.64 1496.22 1391.03 c
-1496.22 1386 l
-1568.67 1386 l
-1568.67 1391 l
-1550.15 1391.81 1547 1394.23 1547 1405.32 c
-1547 1452.21 l
-1567.22 1451.81 1574.55 1444.36 1577.32 1421.02 c
-1582.35 1421.02 l
-1582.35 1489.04 l
-1577.32 1489.04 l
-1573.76 1466.1 1566.82 1459.05 1547 1459.05 c
-1547 1505.74 l
-1547 1513.19 1549.52 1515 1559.41 1515 c
-1578.13 1515 1589.8 1511.64 1596.04 1504.74 c
-1600.47 1499.71 1602.68 1494.27 1605.5 1481.59 c
-1610.33 1481.59 l
-h
-1615.96 1386 m
-f*
-1659.19 1479 m
-1620.84 1479 l
-1620.84 1473.95 l
-1629.49 1472.74 1632 1470.12 1632 1462.07 c
-1632 1402.9 l
-1632 1394.65 1629.93 1392.44 1620.84 1390.83 c
-1620.84 1386 l
-1674.37 1386 l
-1674.37 1390.83 l
-1662.09 1391.63 1660 1394.25 1660 1406.73 c
-1660 1444.76 l
-1660 1455.23 1665.49 1463.88 1671.95 1463.88 c
-1673.56 1463.88 1675.37 1462.47 1677.59 1459.25 c
-1681.41 1453.82 1684.43 1452.01 1689.66 1452.01 c
-1697.11 1452.01 1702.34 1457.64 1702.34 1465.29 c
-1702.34 1474.55 1695.5 1481.41 1686.04 1481.41 c
-1676.1 1481.41 1668.54 1476.12 1659.19 1462.27 c
-h
-1704.35 1386 m
-f*
-1799.19 1398.88 m
-1797.18 1396.87 l
-1796.57 1396.26 1795.97 1396.06 1794.96 1396.06 c
-1792.15 1396.06 1791 1397.67 1791 1401.09 c
-1791 1453.62 l
-1791 1470.73 1775.6 1481.42 1750.89 1481.42 c
-1728.15 1481.42 1712.85 1471.06 1712.85 1455.83 c
-1712.85 1447.38 1717.69 1442.55 1725.94 1442.55 c
-1733.99 1442.55 1739.62 1447.38 1739.62 1454.22 c
-1739.62 1457.04 1738.61 1459.66 1736 1462.88 c
-1734.19 1464.89 1733.58 1466.1 1733.58 1467.3 c
-1733.58 1471.53 1739.02 1474.42 1746.26 1474.42 c
-1758.14 1474.42 1763.86 1469.08 1763.86 1457.04 c
-1763.86 1442.35 l
-1739.91 1435.1 1730.29 1431.48 1722.51 1426.45 c
-1713.46 1420.41 1709 1413.37 1709 1404.52 c
-1709 1392.24 1718.27 1383.18 1731.17 1383.18 c
-1742.84 1383.18 1752.1 1387.21 1763.17 1397.27 c
-1765.38 1387.01 1769.81 1383.18 1779.67 1383.18 c
-1788.32 1383.18 1794.56 1386.4 1802.21 1394.65 c
-h
-1763 1406.13 m
-1757.55 1399.89 1753.52 1397.47 1748.68 1397.47 c
-1742.64 1397.47 1738 1402.91 1738 1410.96 c
-1738 1422.63 1746.61 1430.88 1763 1435.31 c
-h
-1804.62 1386 m
-f*
-1845.4 1479 m
-1806.7 1479 l
-1806.7 1473.95 l
-1815.55 1472.74 1818 1470.32 1818 1462.07 c
-1818 1402.9 l
-1818 1394.65 1815.74 1392.44 1806.7 1390.83 c
-1806.7 1386 l
-1855 1386 l
-1855 1390.83 l
-1847.95 1391.84 1846 1394.65 1846 1402.3 c
-1846 1456.03 l
-1846 1457.04 1848.87 1460.66 1851.18 1462.88 c
-1855.4 1466.1 1859.02 1468.42 1862.65 1468.42 c
-1870.5 1468.42 1874 1463.59 1874 1451 c
-1874 1402.3 l
-1874 1394.05 1871.68 1391.43 1863.85 1390.83 c
-1863.85 1386 l
-1910.95 1386 l
-1910.95 1390.83 l
-1903.9 1391.64 1902 1394.65 1902 1402.3 c
-1902 1456.03 l
-1902 1457.04 1904.73 1460.46 1906.92 1462.68 c
-1911.35 1466.1 1914.97 1468.42 1918.59 1468.42 c
-1926.24 1468.42 1929 1463.38 1929 1451 c
-1929 1402.3 l
-1929 1393.85 1926.85 1391.43 1919.4 1390.83 c
-1919.4 1386 l
-1967.3 1386 l
-1967.3 1391 l
-1959.45 1391.4 1957 1393.78 1957 1402.3 c
-1957 1452.81 l
-1957 1470.12 1946.43 1481.42 1930.07 1481.42 c
-1918.59 1481.42 1910.95 1476.73 1900.48 1463.68 c
-1894.44 1476.36 1887.4 1481.42 1874.72 1481.42 c
-1861.95 1481.42 1852.98 1475.91 1845.4 1463.68 c
-h
-1970.64 1386 m
-f*
-2050.9 1411.16 m
-2042.65 1401.29 2036.61 1397.18 2027.96 1397.18 c
-2020.31 1397.18 2014.27 1400.77 2010.25 1407.94 c
-2006.43 1414.54 2004.82 1421.56 2004.01 1436 c
-2054.73 1436 l
-2053.52 1452.36 2050.5 1461.43 2044.26 1469.12 c
-2037.82 1476.96 2028.36 1481.42 2017.09 1481.42 c
-1991.94 1481.42 1975.03 1461.4 1975.03 1431.88 c
-1975.03 1402.5 1991.53 1383.18 2016.49 1383.18 c
-2032.79 1383.18 2042.65 1389.42 2055.73 1408.34 c
-h
-2003 1443 m
-2003.61 1466.96 2007.23 1474.42 2017.09 1474.42 c
-2022.93 1474.42 2026.55 1471.38 2028.16 1465.49 c
-2029.17 1461.67 2029.57 1456.03 2029.97 1445.77 c
-2029.97 1443 l
-h
-2059.35 1386 m
-f*
-2156.16 1481.59 m
-2156.16 1525.22 l
-2150.37 1525.22 l
-2148.96 1519.82 2147.55 1518.42 2143.93 1518.42 c
-2142.12 1518.42 2139.7 1519.03 2135.47 1520.43 c
-2126.22 1523.86 2119.78 1525.02 2111.93 1525.02 c
-2084.56 1525.02 2068 1509.54 2068 1484.01 c
-2068 1478.98 2068.75 1474.75 2070.07 1470.73 c
-2074.29 1460.06 2085.16 1450.6 2102.27 1442.35 c
-2115.75 1435.91 l
-2133.46 1427.46 2138 1422.22 2138 1411.56 c
-2138 1397.67 2128.25 1389.18 2112.94 1389.18 c
-2101.26 1389.18 2091.6 1393.89 2083.96 1403.31 c
-2078.12 1410.75 2075.3 1417.6 2071.88 1431.88 c
-2066.04 1431.88 l
-2066.04 1382.18 l
-2071.88 1382.18 l
-2073.09 1387.41 2074.7 1389.02 2077.92 1389.02 c
-2079.53 1389.02 2081.74 1388.42 2086.17 1387.01 c
-2096.03 1383.59 2103.48 1382.18 2112.33 1382.18 c
-2142.12 1382.18 2162 1399.28 2162 1424.64 c
-2162 1439.73 2153.04 1454.83 2140.1 1461.27 c
-2110.52 1475.96 l
-2094.22 1484.01 2090 1488.84 2090 1498.7 c
-2090 1511.18 2098.37 1518.02 2111.93 1518.02 c
-2120.99 1518.02 2129.44 1514.47 2136.68 1507.55 c
-2143.53 1500.51 2146.75 1494.67 2150.77 1481.59 c
-h
-2170.89 1386 m
-f*
-2249.9 1411.16 m
-2241.65 1401.29 2235.61 1397.18 2226.96 1397.18 c
-2219.31 1397.18 2213.27 1400.77 2209.25 1407.94 c
-2205.43 1414.54 2203.82 1421.56 2203.01 1436 c
-2253.73 1436 l
-2252.52 1452.36 2249.5 1461.43 2243.26 1469.12 c
-2236.82 1476.96 2227.36 1481.42 2216.09 1481.42 c
-2190.94 1481.42 2174.03 1461.4 2174.03 1431.88 c
-2174.03 1402.5 2190.53 1383.18 2215.49 1383.18 c
-2231.79 1383.18 2241.65 1389.42 2254.73 1408.34 c
-h
-2202 1443 m
-2202.61 1466.96 2206.23 1474.42 2216.09 1474.42 c
-2221.93 1474.42 2225.55 1471.38 2227.16 1465.49 c
-2228.17 1461.67 2228.57 1456.03 2228.97 1445.77 c
-2228.97 1443 l
-h
-2258.35 1386 m
-f*
-2319.38 1479 m
-2300 1479 l
-2300 1512.79 l
-2295.43 1512.79 l
-2283.16 1495.48 2275.11 1486.42 2262.02 1475.35 c
-2262.02 1470 l
-2272 1470 l
-2272 1404.72 l
-2272 1391.64 2280.84 1383.59 2295.03 1383.59 c
-2308.51 1383.59 2316.56 1389.62 2324.81 1406.12 c
-2319.78 1408.34 l
-2315.76 1400.69 2312.54 1397.59 2308.31 1397.59 c
-2302.68 1397.59 2300 1401.09 2300 1409.34 c
-2300 1470 l
-2319.38 1470 l
-h
-2325.02 1386 m
-f*
-2375.31 1386 m
-f*
-2378.22 1522 m
-2378.22 1517 l
-2392.11 1516.2 2396 1512.98 2396 1502.72 c
-2396 1405.32 l
-2396 1395.06 2392.97 1392.64 2378.22 1391.03 c
-2378.22 1386 l
-2443.02 1386 l
-2477.03 1386 2500 1401.09 2500 1423.83 c
-2500 1433.09 2496.03 1441.14 2488.71 1447.38 c
-2481.66 1453.62 2474.82 1456.44 2460.73 1459.46 c
-2484.08 1466.3 2493 1474.55 2493 1489.84 c
-2493 1510.57 2474.39 1522 2440.41 1522 c
-h
-2428 1455.03 m
-2434.17 1455.03 l
-2454.9 1455.03 2465 1444.36 2465 1422.02 c
-2465 1402.5 2456.73 1393 2440.41 1393 c
-2431.55 1393 2428 1396.26 2428 1404.72 c
-h
-2428 1506.15 m
-2428 1513.39 2430.85 1516 2439 1516 c
-2453.08 1516 2460 1507.35 2460 1488.44 c
-2460 1467.3 2453.23 1461.67 2428 1461.07 c
-h
-2509.23 1386 m
-f*
-1 i
-0.564706 g
-2228.15 4743.35 m
-2030.15 4823.75 l
-2170.55 4948.55 l
-1944.95 4966.55 l
-2007.35 5121.35 l
-1790.15 5075.75 l
-1763.75 5236.55 l
-1586.15 5135.75 l
-1475.75 5276.15 l
-1364.15 5135.75 l
-1186.55 5236.55 l
-1160.15 5075.75 l
-940.55 5121.35 l
-1005.35 4966.55 l
-778.55 4948.55 l
-920.15 4823.75 l
-720.95 4743.35 l
-920.15 4666.55 l
-778.55 4540.55 l
-1005.35 4523.75 l
-940.55 4368.95 l
-1160.15 4413.35 l
-1186.55 4253.75 l
-1364.15 4353.35 l
-1475.75 4212.95 l
-1586.15 4353.35 l
-1763.75 4253.75 l
-1790.15 4413.35 l
-2007.35 4368.95 l
-1944.95 4523.75 l
-2170.55 4540.55 l
-2030.15 4666.55 l
-f*
-1 g
-2168.15 4803.35 m
-1970.15 4883.75 l
-2110.55 5008.55 l
-1884.95 5026.55 l
-1947.35 5181.35 l
-1730.15 5135.75 l
-1703.75 5296.55 l
-1526.15 5195.75 l
-1415.75 5336.15 l
-1304.15 5195.75 l
-1126.55 5296.55 l
-1100.15 5135.75 l
-880.55 5181.35 l
-945.35 5026.55 l
-718.55 5008.55 l
-860.15 4883.75 l
-660.95 4803.35 l
-860.15 4726.55 l
-718.55 4600.55 l
-945.35 4583.75 l
-880.55 4428.95 l
-1100.15 4473.35 l
-1126.55 4313.75 l
-1304.15 4413.35 l
-1415.75 4272.95 l
-1526.15 4413.35 l
-1703.75 4313.75 l
-1730.15 4473.35 l
-1947.35 4428.95 l
-1884.95 4583.75 l
-2110.55 4600.55 l
-1970.15 4726.55 l
-f*
-0 g
-2168.15 4803.35 m
-1970.15 4883.75 l
-2110.55 5008.55 l
-1884.95 5026.55 l
-1947.35 5181.35 l
-1730.15 5135.75 l
-1703.75 5296.55 l
-1526.15 5195.75 l
-1415.75 5336.15 l
-1304.15 5195.75 l
-1126.55 5296.55 l
-1100.15 5135.75 l
-880.55 5181.35 l
-945.35 5026.55 l
-718.55 5008.55 l
-860.15 4883.75 l
-660.95 4803.35 l
-860.15 4726.55 l
-718.55 4600.55 l
-945.35 4583.75 l
-880.55 4428.95 l
-1100.15 4473.35 l
-1126.55 4313.75 l
-1304.15 4413.35 l
-1415.75 4272.95 l
-1526.15 4413.35 l
-1703.75 4313.75 l
-1730.15 4473.35 l
-1947.35 4428.95 l
-1884.95 4583.75 l
-2110.55 4600.55 l
-1970.15 4726.55 l
-2168.15 4803.35 l
-2060.15 4804.55 l
-1894.55 4739.75 l
-2014.55 4632.95 l
-1827.35 4618.55 l
-1882.55 4481.75 l
-1697.75 4521.35 l
-1673.75 4376.15 l
-1516.55 4464.95 l
-1415.75 4337.75 l
-1313.75 4464.95 l
-1156.55 4376.15 l
-1132.55 4521.35 l
-946.55 4481.75 l
-1001.75 4618.55 l
-814.55 4632.95 l
-934.55 4739.75 l
-770.15 4804.55 l
-934.55 4870.55 l
-814.55 4976.15 l
-1001.75 4990.55 l
-946.55 5127.35 l
-1132.55 5088.95 l
-1156.55 5232.95 l
-1313.75 5144.15 l
-1415.75 5272.55 l
-1516.55 5144.15 l
-1673.75 5232.95 l
-1697.75 5088.95 l
-1882.55 5127.35 l
-1827.35 4990.55 l
-2014.55 4976.15 l
-1894.55 4870.55 l
-2060.15 4804.55 l
-2168.15 4803.35 l
-f*
-0.201248 i
-1328.58 5044 m
-1289.34 5044 l
-1289.34 5038.6 l
-1300.41 5037.6 1302.22 5036.39 1306.04 5027.54 c
-1281.89 4944.82 l
-1274.04 4918.46 1272.64 4916.24 1261.57 4914.03 c
-1261.57 4909 l
-1303.43 4909 l
-1303.43 4914.03 l
-1291.55 4915.04 1287.33 4918.06 1287.33 4925.91 c
-1287.33 4929.73 1288.53 4936.37 1290.95 4944.82 c
-1310.87 5016.47 l
-1362.59 4905.98 l
-1368.23 4905.98 l
-1397.01 5007.81 l
-1404.86 5034.38 1405.86 5035.99 1417.53 5038.6 c
-1417.53 5044 l
-1375.47 5044 l
-1375.47 5038.6 l
-1387.35 5037.6 1391.57 5034.38 1391.57 5026.73 c
-1391.57 5022.91 1390.16 5016.06 1387.95 5007.81 c
-1371.85 4950.05 l
-h
-1412.3 4909 m
-f*
-1475.8 4937.58 m
-1466.54 4923.69 1460.7 4919.38 1452.05 4919.38 c
-1443.6 4919.38 1439 4924.98 1439 4935.77 c
-1439 4938.99 1439.46 4941.6 1440.38 4945.63 c
-1461.31 4949.65 1471.17 4954.08 1481.23 4963.34 c
-1488.27 4969.78 1492 4977.22 1492 4984.47 c
-1492 4994.73 1483.19 5001.62 1470.97 5001.62 c
-1441.79 5001.62 1413 4968.99 1413 4935.97 c
-1413 4918.86 1425.88 4906.38 1443.4 4906.38 c
-1458.89 4906.38 1469.56 4914.23 1481.63 4934.16 c
-h
-1441.79 4952.07 m
-1449.03 4980.04 1458.29 4994.62 1467.95 4994.62 c
-1471.77 4994.62 1473 4992.64 1473 4988.49 c
-1473 4979.64 1469.78 4970.98 1463.72 4964.34 c
-1458.29 4958.51 1453.26 4955.69 1441.79 4952.07 c
-h
-1501.35 4909 m
-f*
-1504.22 4990.91 m
-1509.25 4990.91 1510.86 4990.71 1512.47 4989.3 c
-1516.7 4986.08 1519.52 4967.16 1520.12 4939.19 c
-1520.52 4923.49 l
-1520.52 4922.48 l
-1520.52 4922.28 1520.52 4919.26 1520.32 4915.44 c
-1520.12 4906.38 l
-1525.55 4906.38 l
-1537.02 4923.69 l
-1545.28 4937.58 1552.92 4951.06 1559.77 4963.74 c
-1564.39 4906.38 l
-1569.83 4906.38 l
-1607.06 4945.83 1624 4972.59 1624 4989.5 c
-1624 4996.14 1618.63 5001.62 1612.29 5001.62 c
-1606.25 5001.62 1601.02 4996.15 1601.02 4989.9 c
-1601.02 4986.88 1602.23 4984.27 1605.25 4980.04 c
-1608.06 4976.22 1609 4973.6 1609 4971.59 c
-1609 4965.55 1602.83 4955.89 1585.32 4935.16 c
-1578.88 5001.62 l
-1573.45 5001.62 l
-1556.55 4972.63 1553.33 4966.83 1542.06 4946.63 c
-1541.45 4971.59 1540.04 4984.67 1535.41 5001.98 c
-1527.16 5000.17 1520.92 4999.16 1504.22 4996.34 c
-h
-1635.23 4909 m
-f*
-1215.46 4781.9 m
-1190.3 4688.52 l
-1187.08 4677.65 1183.26 4674.84 1170.18 4674.03 c
-1170.18 4669 l
-1232.97 4669 l
-1232.97 4674 l
-1221.3 4674.61 1218.48 4676.22 1218.48 4682.69 c
-1218.48 4684.9 1218.88 4687.11 1220.09 4691.74 c
-1220.29 4692.75 l
-1220.49 4693.75 l
-1245.24 4784.11 l
-1248.26 4794.58 1251.28 4797.4 1261.55 4798.6 c
-1261.55 4804 l
-1218.88 4804 l
-1156.49 4707.04 l
-1145.63 4804 l
-1101.15 4804 l
-1101.15 4799 l
-1113.83 4798.36 1115.64 4797.51 1115.64 4791.56 c
-1115.64 4788.74 1114.84 4785.12 1113.43 4779.89 c
-1091.49 4704.82 l
-1083.44 4678.66 1082.03 4676.45 1071.16 4674.03 c
-1071.16 4669 l
-1112.82 4669 l
-1112.82 4674.03 l
-1099.94 4675.64 1096.72 4678.06 1096.72 4686.31 c
-1096.72 4689.73 1097.73 4694.76 1100.55 4704.82 c
-1120.87 4779.08 l
-1134.36 4666.59 l
-1139.99 4666.59 l
-h
-1255.91 4669 m
-f*
-1342.34 4694.56 m
-1334.09 4683.49 1331.07 4680.18 1327.85 4680.18 c
-1326.24 4680.18 1326 4681.51 1326 4683.49 c
-1326 4688.52 1327.66 4696.77 1332.28 4713.27 c
-1346.57 4760.77 l
-1324.23 4759.36 l
-1320.61 4747.49 l
-1318.8 4757.75 1314.37 4761.62 1305.71 4761.62 c
-1280.96 4761.62 1251 4723.18 1251 4691.94 c
-1251 4676.65 1259.56 4666.38 1272.51 4666.38 c
-1284.78 4666.38 1294.04 4673.63 1305.51 4692.95 c
-1303.1 4684.7 1303 4682.28 1303 4679.47 c
-1303 4672.02 1308.9 4666.18 1316.18 4666.18 c
-1325.64 4666.18 1334.89 4674.03 1346.57 4691.54 c
-h
-1308.53 4753.52 m
-1312.96 4753.12 1316.28 4749.5 1316.28 4744.07 c
-1316.28 4731.99 1309.5 4709.65 1301.49 4695.77 c
-1296.05 4685.91 1290.02 4680.38 1284.58 4680.38 c
-1279.35 4680.38 1276 4685.14 1276 4691.54 c
-1276 4702 1282.43 4722.13 1290.42 4737.02 c
-1296.46 4747.69 1303.1 4753.93 1308.53 4753.52 c
-h
-1355.62 4669 m
-f*
-1398.47 4761.98 m
-1377.94 4758.76 1370.09 4757.55 1359.63 4756.34 c
-1359.63 4751 l
-1368.68 4750.59 1370.5 4749.77 1370.5 4745.88 c
-1370.5 4743.86 1368.89 4736.62 1366.07 4726.15 c
-1345.94 4648.07 l
-1342.12 4634.79 1340.51 4632.8 1330.85 4633 c
-1330.85 4627 l
-1380.96 4627 l
-1380.96 4633 l
-1370.9 4633.21 1367.88 4634.65 1367.88 4639.62 c
-1367.88 4642.44 1369.29 4648.47 1373.11 4662.56 c
-1374.52 4667.39 1374.52 4667.79 1375.33 4670.81 c
-1382.37 4667.19 1384.78 4666.38 1389.01 4666.38 c
-1416.38 4666.38 1444.76 4702.81 1444.76 4737.63 c
-1444.76 4752.52 1436.3 4761.62 1423.02 4761.62 c
-1411.55 4761.62 1402.7 4755.28 1390.82 4738.83 c
-h
-1411.75 4747.69 m
-1416.98 4747.29 1420 4742.66 1419.6 4736.22 c
-1418.8 4722.93 1412.36 4703.01 1405.11 4689.93 c
-1398.87 4679.06 1392.43 4673.38 1385.59 4673.38 c
-1381.16 4673.38 1377.74 4676.62 1377.74 4680.67 c
-1377.74 4684.09 1379.95 4692.34 1385.39 4710.66 c
-1389.82 4725.35 1391.63 4730.38 1394.65 4735.01 c
-1399.68 4742.86 1406.52 4748.09 1411.75 4747.69 c
-h
-1455.62 4669 m
-f*
-1498.47 4761.98 m
-1477.94 4758.76 1470.09 4757.55 1459.63 4756.34 c
-1459.63 4751 l
-1468.68 4750.59 1470.5 4749.77 1470.5 4745.88 c
-1470.5 4743.86 1468.89 4736.62 1466.07 4726.15 c
-1445.94 4648.07 l
-1442.12 4634.79 1440.51 4632.8 1430.85 4633 c
-1430.85 4627 l
-1480.96 4627 l
-1480.96 4633 l
-1470.9 4633.21 1467.88 4634.65 1467.88 4639.62 c
-1467.88 4642.44 1469.29 4648.47 1473.11 4662.56 c
-1474.52 4667.39 1474.52 4667.79 1475.33 4670.81 c
-1482.37 4667.19 1484.78 4666.38 1489.01 4666.38 c
-1516.38 4666.38 1544.76 4702.81 1544.76 4737.63 c
-1544.76 4752.52 1536.3 4761.62 1523.02 4761.62 c
-1511.55 4761.62 1502.7 4755.28 1490.82 4738.83 c
-h
-1511.75 4747.69 m
-1516.98 4747.29 1520 4742.66 1519.6 4736.22 c
-1518.8 4722.93 1512.36 4703.01 1505.11 4689.93 c
-1498.87 4679.06 1492.43 4673.38 1485.59 4673.38 c
-1481.16 4673.38 1477.74 4676.62 1477.74 4680.67 c
-1477.74 4684.09 1479.95 4692.34 1485.39 4710.66 c
-1489.82 4725.35 1491.63 4730.38 1494.65 4735.01 c
-1499.68 4742.86 1506.52 4748.09 1511.75 4747.69 c
-h
-1555.62 4669 m
-f*
-1598.47 4697.38 m
-1595.65 4693.35 l
-1590.42 4685.5 1585.79 4681.19 1582.77 4681.19 c
-1581.16 4681.19 1580 4682.64 1580 4684.29 c
-1580 4686.11 1580.87 4691.34 1581.56 4694.76 c
-1599.88 4761.98 l
-1589.17 4759.56 1575.29 4757.55 1559.82 4756.34 c
-1559.82 4751 l
-1561.84 4751 l
-1567.88 4751 1571.7 4748.96 1571.7 4745.07 c
-1571.7 4743.46 1570.84 4740.44 1569.69 4737.02 c
-1558.02 4693.75 l
-1556.41 4687.92 1556 4682.69 1556 4679.87 c
-1556 4672.22 1561.39 4667.19 1569.29 4667.19 c
-1581.36 4667.19 1588.81 4673.23 1602.9 4694.56 c
-h
-1593.84 4807.02 m
-1587 4807.02 1581 4800.61 1581 4793.57 c
-1581 4785.72 1586.53 4780.02 1594.04 4780.02 c
-1601.69 4780.02 1608 4785.71 1608 4792.97 c
-1608 4800.42 1601.64 4807.02 1593.84 4807.02 c
-h
-1610.95 4669 m
-f*
-1705.79 4696.17 m
-1697.74 4683.69 1695.12 4681.19 1691.7 4681.19 c
-1690.09 4681.19 1689 4682.47 1689 4684.29 c
-1689 4686.31 1690.18 4690.53 1693.91 4701.8 c
-1701.16 4723.74 l
-1704.38 4733.2 1706 4742.05 1706 4746.88 c
-1706 4756.74 1700.91 4761.62 1691.7 4761.62 c
-1684.25 4761.62 1677.01 4758.73 1671.58 4753.73 c
-1664.13 4746.68 1660.31 4741.85 1646.82 4721.93 c
-1659.7 4761.78 l
-1646.82 4758.96 1630.72 4756.38 1619.45 4755.98 c
-1619.45 4751.04 l
-1627.9 4750.83 1630.32 4749.8 1630.32 4745.88 c
-1630.32 4743.46 1627.5 4732.8 1621.06 4710.05 c
-1616.43 4693.75 1615.02 4688.52 1609.79 4669 c
-1634.14 4669 l
-1643.6 4703.82 1650.85 4721.32 1663.32 4737.63 c
-1667.35 4743.06 1673.59 4747.62 1677.21 4747.62 c
-1679.83 4747.62 1682 4745.54 1682 4743.26 c
-1682 4742.66 1681.69 4741.05 1681.24 4739.03 c
-1670.17 4705.63 l
-1666.95 4695.97 1665 4684.5 1665 4679.26 c
-1665 4671.62 1669.86 4667.19 1678.22 4667.19 c
-1690.29 4667.19 1698.54 4674.03 1710.22 4693.55 c
-h
-1722.89 4669 m
-f*
-1818.2 4755 m
-1795.86 4755 l
-1789.02 4760.07 1782.98 4761.62 1773.72 4761.62 c
-1748.97 4761.62 1729 4745.48 1729 4725.35 c
-1729 4715.09 1734.25 4707.84 1745.14 4703.21 c
-1728.64 4693.96 1726 4691.14 1726 4683.69 c
-1726 4677.25 1729.57 4673.43 1738.3 4670.41 c
-1725.82 4667.39 1721.8 4665.78 1716.97 4661.96 c
-1713.75 4659.14 1711 4654.31 1711 4649.48 c
-1711 4636.4 1725.9 4628 1749.37 4628 c
-1777.75 4628 1798 4640.54 1798 4658.33 c
-1798 4670.61 1789.81 4677.25 1767.48 4683.49 c
-1756.82 4686.51 l
-1750.38 4688.32 1747 4691.14 1747 4694.16 c
-1747 4697.38 1749.78 4700.61 1752.19 4700.61 c
-1753.19 4700.61 1754.6 4700.61 1756.21 4700.6 c
-1758.43 4699.99 1760.04 4699 1762.45 4699 c
-1771.31 4699 1780.36 4701.69 1788.01 4706.63 c
-1799.68 4713.27 1806 4723.54 1806 4735.61 c
-1806 4738.81 1805.57 4740.8 1804.71 4744 c
-1818.2 4744 l
-h
-1745.14 4667.79 m
-1747.56 4667.59 1762.85 4662.36 1767.28 4660.35 c
-1772.92 4657.53 1776 4654.11 1776 4648.88 c
-1776 4640.02 1766.97 4635 1751.38 4635 c
-1738.3 4635 1729 4641.44 1729 4650.69 c
-1729 4654.51 1730.83 4657.93 1734.88 4661.76 c
-1737.5 4664.37 1743.53 4667.99 1745.14 4667.79 c
-h
-1773.32 4754.62 m
-1778.55 4754.62 1782 4750.24 1782 4743.86 c
-1782 4737.02 1779.74 4727.36 1776.54 4719.92 c
-1772.31 4710.66 1767.08 4706 1760.84 4706 c
-1755.41 4706 1752 4710.24 1752 4717.9 c
-1752 4725.95 1755.6 4738.23 1760.04 4745.88 c
-1763.86 4752.52 1768.09 4754.62 1773.32 4754.62 c
-h
-1822.62 4669 m
-f*
-1 i
-32 w
-1580.15 6552.95 m
-1512.95 6454.55 1457.75 6062.15 1438.55 5537.75 c
-S
-1361.75 5567.75 m
-1438.55 5532.95 l
-1517.75 5561.75 l
-1432.55 5316.95 l
-f*
-1110.95 4252.55 m
-1026.95 4064.15 982.55 3862.55 982.55 3657.35 c
-982.55 2787.35 1758.95 2079.35 2723.75 2069.75 c
-S
-2663.75 1992.95 m
-2693.75 2070.95 l
-2661.35 2148.95 l
-2909.75 2075.75 l
-f*
-0.201248 i
-4161.33 5063 m
-4047.22 5063 l
-4047.22 5058 l
-4061.11 5057.2 4065 5054.18 4065 5043.72 c
-4065 4946.32 l
-4065 4935.85 4062.17 4933.64 4047.22 4932.03 c
-4047.22 4927 l
-4119.67 4927 l
-4119.67 4932 l
-4101.15 4932.81 4098 4935.23 4098 4946.32 c
-4098 4993.21 l
-4118.22 4992.81 4125.55 4985.36 4128.32 4962.02 c
-4133.35 4962.02 l
-4133.35 5030.04 l
-4128.32 5030.04 l
-4124.76 5007.1 4117.82 5000.05 4098 5000.05 c
-4098 5046.74 l
-4098 5054.19 4100.52 5056 4110.41 5056 c
-4129.13 5056 4140.8 5052.64 4147.04 5045.74 c
-4151.47 5040.71 4153.68 5035.27 4156.5 5022.59 c
-4161.33 5022.59 l
-h
-4166.96 4927 m
-f*
-4210.19 5020 m
-4171.84 5020 l
-4171.84 5014.95 l
-4180.49 5013.74 4183 5011.12 4183 5003.07 c
-4183 4943.9 l
-4183 4935.65 4180.93 4933.44 4171.84 4931.83 c
-4171.84 4927 l
-4225.37 4927 l
-4225.37 4931.83 l
-4213.09 4932.63 4211 4935.25 4211 4947.73 c
-4211 4985.76 l
-4211 4996.23 4216.49 5004.88 4222.95 5004.88 c
-4224.56 5004.88 4226.37 5003.47 4228.59 5000.25 c
-4232.41 4994.82 4235.43 4993.01 4240.66 4993.01 c
-4248.11 4993.01 4253.34 4998.64 4253.34 5006.29 c
-4253.34 5015.55 4246.5 5022.41 4237.04 5022.41 c
-4227.1 5022.41 4219.54 5017.12 4210.19 5003.27 c
-h
-4255.35 4927 m
-f*
-4350.19 4939.88 m
-4348.18 4937.87 l
-4347.57 4937.26 4346.97 4937.06 4345.96 4937.06 c
-4343.15 4937.06 4342 4938.67 4342 4942.09 c
-4342 4994.62 l
-4342 5011.73 4326.6 5022.42 4301.89 5022.42 c
-4279.15 5022.42 4263.85 5012.06 4263.85 4996.83 c
-4263.85 4988.38 4268.69 4983.55 4276.94 4983.55 c
-4284.99 4983.55 4290.62 4988.38 4290.62 4995.22 c
-4290.62 4998.04 4289.61 5000.66 4287 5003.88 c
-4285.19 5005.89 4284.58 5007.1 4284.58 5008.3 c
-4284.58 5012.53 4290.02 5015.42 4297.26 5015.42 c
-4309.14 5015.42 4314.86 5010.08 4314.86 4998.04 c
-4314.86 4983.35 l
-4290.91 4976.1 4281.29 4972.48 4273.51 4967.45 c
-4264.46 4961.41 4260 4954.37 4260 4945.52 c
-4260 4933.24 4269.27 4924.18 4282.17 4924.18 c
-4293.84 4924.18 4303.1 4928.21 4314.17 4938.27 c
-4316.38 4928.01 4320.81 4924.18 4330.67 4924.18 c
-4339.32 4924.18 4345.56 4927.4 4353.21 4935.65 c
-h
-4314 4947.13 m
-4308.55 4940.89 4304.52 4938.47 4299.68 4938.47 c
-4293.64 4938.47 4289 4943.91 4289 4951.96 c
-4289 4963.63 4297.61 4971.88 4314 4976.31 c
-h
-4355.62 4927 m
-f*
-4397.4 5020 m
-4358.7 5020 l
-4358.7 5014.95 l
-4367.55 5013.74 4370 5011.32 4370 5003.07 c
-4370 4943.9 l
-4370 4935.65 4367.74 4933.44 4358.7 4931.83 c
-4358.7 4927 l
-4407 4927 l
-4407 4931.83 l
-4399.95 4932.84 4398 4935.65 4398 4943.3 c
-4398 4997.03 l
-4398 4998.04 4400.87 5001.66 4403.18 5003.88 c
-4407.4 5007.1 4411.02 5009.42 4414.65 5009.42 c
-4422.5 5009.42 4426 5004.59 4426 4992 c
-4426 4943.3 l
-4426 4935.05 4423.68 4932.43 4415.85 4931.83 c
-4415.85 4927 l
-4462.95 4927 l
-4462.95 4931.83 l
-4455.9 4932.64 4454 4935.65 4454 4943.3 c
-4454 4997.03 l
-4454 4998.04 4456.73 5001.46 4458.92 5003.68 c
-4463.35 5007.1 4466.97 5009.42 4470.59 5009.42 c
-4478.24 5009.42 4481 5004.38 4481 4992 c
-4481 4943.3 l
-4481 4934.85 4478.85 4932.43 4471.4 4931.83 c
-4471.4 4927 l
-4519.3 4927 l
-4519.3 4932 l
-4511.45 4932.4 4509 4934.78 4509 4943.3 c
-4509 4993.81 l
-4509 5011.12 4498.43 5022.42 4482.07 5022.42 c
-4470.59 5022.42 4462.95 5017.73 4452.48 5004.68 c
-4446.44 5017.36 4439.4 5022.42 4426.72 5022.42 c
-4413.95 5022.42 4404.98 5016.91 4397.4 5004.68 c
-h
-4522.64 4927 m
-f*
-4601.9 4952.16 m
-4593.65 4942.29 4587.61 4938.18 4578.96 4938.18 c
-4571.31 4938.18 4565.27 4941.77 4561.25 4948.94 c
-4557.43 4955.54 4555.82 4962.56 4555.01 4977 c
-4605.73 4977 l
-4604.52 4993.36 4601.5 5002.43 4595.26 5010.12 c
-4588.82 5017.96 4579.36 5022.42 4568.09 5022.42 c
-4542.94 5022.42 4526.03 5002.4 4526.03 4972.88 c
-4526.03 4943.5 4542.53 4924.18 4567.49 4924.18 c
-4583.79 4924.18 4593.65 4930.42 4606.73 4949.34 c
-h
-4554 4984 m
-4554.61 5007.96 4558.23 5015.42 4568.09 5015.42 c
-4573.93 5015.42 4577.55 5012.38 4579.16 5006.49 c
-4580.17 5002.67 4580.57 4997.03 4580.97 4986.77 c
-4580.97 4984 l
-h
-4610.35 4927 m
-f*
-4707.16 5022.59 m
-4707.16 5066.22 l
-4701.37 5066.22 l
-4699.96 5060.82 4698.55 5059.42 4694.93 5059.42 c
-4693.12 5059.42 4690.7 5060.03 4686.47 5061.43 c
-4677.22 5064.86 4670.78 5066.02 4662.93 5066.02 c
-4635.56 5066.02 4619 5050.54 4619 5025.01 c
-4619 5019.98 4619.75 5015.75 4621.07 5011.73 c
-4625.29 5001.06 4636.16 4991.6 4653.27 4983.35 c
-4666.75 4976.91 l
-4684.46 4968.46 4689 4963.22 4689 4952.56 c
-4689 4938.67 4679.25 4930.18 4663.94 4930.18 c
-4652.26 4930.18 4642.6 4934.89 4634.96 4944.31 c
-4629.12 4951.75 4626.3 4958.6 4622.88 4972.88 c
-4617.04 4972.88 l
-4617.04 4923.18 l
-4622.88 4923.18 l
-4624.09 4928.41 4625.7 4930.02 4628.92 4930.02 c
-4630.53 4930.02 4632.74 4929.42 4637.17 4928.01 c
-4647.03 4924.59 4654.48 4923.18 4663.33 4923.18 c
-4693.12 4923.18 4713 4940.28 4713 4965.64 c
-4713 4980.73 4704.04 4995.83 4691.1 5002.27 c
-4661.52 5016.96 l
-4645.22 5025.01 4641 5029.84 4641 5039.7 c
-4641 5052.18 4649.37 5059.02 4662.93 5059.02 c
-4671.99 5059.02 4680.44 5055.47 4687.68 5048.55 c
-4694.53 5041.51 4697.75 5035.67 4701.77 5022.59 c
-h
-4721.89 4927 m
-f*
-4801.9 4952.16 m
-4793.65 4942.29 4787.61 4938.18 4778.96 4938.18 c
-4771.31 4938.18 4765.27 4941.77 4761.25 4948.94 c
-4757.43 4955.54 4755.82 4962.56 4755.01 4977 c
-4805.73 4977 l
-4804.52 4993.36 4801.5 5002.43 4795.26 5010.12 c
-4788.82 5017.96 4779.36 5022.42 4768.09 5022.42 c
-4742.94 5022.42 4726.03 5002.4 4726.03 4972.88 c
-4726.03 4943.5 4742.53 4924.18 4767.49 4924.18 c
-4783.79 4924.18 4793.65 4930.42 4806.73 4949.34 c
-h
-4754 4984 m
-4754.61 5007.96 4758.23 5015.42 4768.09 5015.42 c
-4773.93 5015.42 4777.55 5012.38 4779.16 5006.49 c
-4780.17 5002.67 4780.57 4997.03 4780.97 4986.77 c
-4780.97 4984 l
-h
-4810.35 4927 m
-f*
-4870.38 5020 m
-4851 5020 l
-4851 5053.79 l
-4846.43 5053.79 l
-4834.16 5036.48 4826.11 5027.42 4813.02 5016.35 c
-4813.02 5011 l
-4823 5011 l
-4823 4945.72 l
-4823 4932.64 4831.84 4924.59 4846.03 4924.59 c
-4859.51 4924.59 4867.56 4930.62 4875.81 4947.12 c
-4870.78 4949.34 l
-4866.76 4941.69 4863.54 4938.59 4859.31 4938.59 c
-4853.68 4938.59 4851 4942.09 4851 4950.34 c
-4851 5011 l
-4870.38 5011 l
-h
-4876.02 4927 m
-f*
-4927.31 4927 m
-f*
-5064.66 4932.03 m
-5055.81 4932.03 5053.59 4934.85 5042.72 4960 c
-4997.85 5065.82 l
-4992.21 5065.82 l
-4947.53 4955.58 l
-4939.89 4936.66 4937.47 4933.84 4927.81 4932.03 c
-4927.81 4927 l
-4968.66 4927 l
-4968.66 4932.03 l
-4956.79 4932.84 4952.16 4935.05 4952.16 4940.28 c
-4952.16 4942.9 4953.57 4947.53 4958 4958.6 c
-4961.02 4967 l
-5006.3 4967 l
-5013.14 4950.9 5015.56 4943.76 5015.56 4939.28 c
-5015.56 4934.85 5012.94 4933.04 5005.9 4932.63 c
-4999.46 4932.03 l
-4999.46 4927 l
-5064.66 4927 l
-h
-4964.04 4975 m
-4982.95 5023.4 l
-5003.28 4975 l
-h
-5071.3 4927 m
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/fsremap.eps b/ast-5.3-1/sun210_figures/fsremap.eps
deleted file mode 100644
index a3d572a..0000000
--- a/ast-5.3-1/sun210_figures/fsremap.eps
+++ /dev/null
@@ -1,2532 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 107 245 551 547
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/10 17:51:58
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5506.55 5042.15 m
-5506.55 5244.95 5340.95 5410.55 5138.15 5410.55 c
-1500.95 5410.55 l
-1298.15 5410.55 1132.55 5244.95 1132.55 5042.15 c
-1132.55 2828.15 l
-1132.55 2625.35 1298.15 2459.75 1500.95 2459.75 c
-5138.15 2459.75 l
-5340.95 2459.75 5506.55 2625.35 5506.55 2828.15 c
-f*
-1 g
-5441.75 5097.35 m
-5441.75 5300.15 5277.35 5464.55 5074.55 5464.55 c
-1445.75 5464.55 l
-1242.95 5464.55 1078.55 5300.15 1078.55 5097.35 c
-1078.55 2891.75 l
-1078.55 2688.95 1242.95 2524.55 1445.75 2524.55 c
-5074.55 2524.55 l
-5277.35 2524.55 5441.75 2688.95 5441.75 2891.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5441.75 5097.35 m
-5441.75 5300.15 5277.35 5464.55 5074.55 5464.55 c
-1445.75 5464.55 l
-1242.95 5464.55 1078.55 5300.15 1078.55 5097.35 c
-1078.55 2891.75 l
-1078.55 2688.95 1242.95 2524.55 1445.75 2524.55 c
-5074.55 2524.55 l
-5277.35 2524.55 5441.75 2688.95 5441.75 2891.75 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1563.35 5256.95 l
-1451.75 5256.95 1360.55 5165.75 1360.55 5055.35 c
-1360.55 4917.35 l
-1360.55 4806.95 1451.75 4715.75 1563.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-f*
-0 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-h
-S
-0.201248 i
-1539.33 5152 m
-1425.22 5152 l
-1425.22 5147 l
-1439.11 5146.2 1443 5143.18 1443 5132.72 c
-1443 5035.32 l
-1443 5024.85 1440.17 5022.64 1425.22 5021.03 c
-1425.22 5016 l
-1497.67 5016 l
-1497.67 5021 l
-1479.15 5021.81 1476 5024.23 1476 5035.32 c
-1476 5082.21 l
-1496.22 5081.81 1503.55 5074.36 1506.32 5051.02 c
-1511.35 5051.02 l
-1511.35 5119.04 l
-1506.32 5119.04 l
-1502.76 5096.1 1495.82 5089.05 1476 5089.05 c
-1476 5135.74 l
-1476 5143.19 1478.52 5145 1488.41 5145 c
-1507.13 5145 1518.8 5141.64 1525.04 5134.74 c
-1529.47 5129.71 1531.68 5124.27 1534.5 5111.59 c
-1539.33 5111.59 l
-h
-1544.96 5016 m
-f*
-1589.19 5109 m
-1550.84 5109 l
-1550.84 5103.95 l
-1559.49 5102.74 1562 5100.12 1562 5092.07 c
-1562 5032.9 l
-1562 5024.65 1559.93 5022.44 1550.84 5020.83 c
-1550.84 5016 l
-1604.37 5016 l
-1604.37 5020.83 l
-1592.09 5021.63 1590 5024.25 1590 5036.73 c
-1590 5074.76 l
-1590 5085.23 1595.49 5093.88 1601.95 5093.88 c
-1603.56 5093.88 1605.37 5092.47 1607.59 5089.25 c
-1611.41 5083.82 1614.43 5082.01 1619.66 5082.01 c
-1627.11 5082.01 1632.34 5087.64 1632.34 5095.29 c
-1632.34 5104.55 1625.5 5111.41 1616.04 5111.41 c
-1606.1 5111.41 1598.54 5106.12 1589.19 5092.27 c
-h
-1634.35 5016 m
-f*
-1729.19 5028.88 m
-1727.18 5026.87 l
-1726.57 5026.26 1725.97 5026.06 1724.96 5026.06 c
-1722.15 5026.06 1721 5027.67 1721 5031.09 c
-1721 5083.62 l
-1721 5100.73 1705.6 5111.42 1680.89 5111.42 c
-1658.15 5111.42 1642.85 5101.06 1642.85 5085.83 c
-1642.85 5077.38 1647.69 5072.55 1655.94 5072.55 c
-1663.99 5072.55 1669.62 5077.38 1669.62 5084.22 c
-1669.62 5087.04 1668.61 5089.66 1666 5092.88 c
-1664.19 5094.89 1663.58 5096.1 1663.58 5097.3 c
-1663.58 5101.53 1669.02 5104.42 1676.26 5104.42 c
-1688.14 5104.42 1693.86 5099.08 1693.86 5087.04 c
-1693.86 5072.35 l
-1669.91 5065.1 1660.29 5061.48 1652.51 5056.45 c
-1643.46 5050.41 1639 5043.37 1639 5034.52 c
-1639 5022.24 1648.27 5013.18 1661.17 5013.18 c
-1672.84 5013.18 1682.1 5017.21 1693.17 5027.27 c
-1695.38 5017.01 1699.81 5013.18 1709.67 5013.18 c
-1718.32 5013.18 1724.56 5016.4 1732.21 5024.65 c
-h
-1693 5036.13 m
-1687.55 5029.89 1683.52 5027.47 1678.68 5027.47 c
-1672.64 5027.47 1668 5032.91 1668 5040.96 c
-1668 5052.63 1676.61 5060.88 1693 5065.31 c
-h
-1734.62 5016 m
-f*
-1776.4 5109 m
-1737.7 5109 l
-1737.7 5103.95 l
-1746.55 5102.74 1749 5100.32 1749 5092.07 c
-1749 5032.9 l
-1749 5024.65 1746.74 5022.44 1737.7 5020.83 c
-1737.7 5016 l
-1786 5016 l
-1786 5020.83 l
-1778.95 5021.84 1777 5024.65 1777 5032.3 c
-1777 5086.03 l
-1777 5087.04 1779.87 5090.66 1782.18 5092.88 c
-1786.4 5096.1 1790.02 5098.42 1793.65 5098.42 c
-1801.5 5098.42 1805 5093.59 1805 5081 c
-1805 5032.3 l
-1805 5024.05 1802.68 5021.43 1794.85 5020.83 c
-1794.85 5016 l
-1841.95 5016 l
-1841.95 5020.83 l
-1834.9 5021.64 1833 5024.65 1833 5032.3 c
-1833 5086.03 l
-1833 5087.04 1835.73 5090.46 1837.92 5092.68 c
-1842.35 5096.1 1845.97 5098.42 1849.59 5098.42 c
-1857.24 5098.42 1860 5093.38 1860 5081 c
-1860 5032.3 l
-1860 5023.85 1857.85 5021.43 1850.4 5020.83 c
-1850.4 5016 l
-1898.3 5016 l
-1898.3 5021 l
-1890.45 5021.4 1888 5023.78 1888 5032.3 c
-1888 5082.81 l
-1888 5100.12 1877.43 5111.42 1861.07 5111.42 c
-1849.59 5111.42 1841.95 5106.73 1831.48 5093.68 c
-1825.44 5106.36 1818.4 5111.42 1805.72 5111.42 c
-1792.95 5111.42 1783.98 5105.91 1776.4 5093.68 c
-h
-1901.64 5016 m
-f*
-1979.9 5041.16 m
-1971.65 5031.29 1965.61 5027.18 1956.96 5027.18 c
-1949.31 5027.18 1943.27 5030.77 1939.25 5037.94 c
-1935.43 5044.54 1933.82 5051.56 1933.01 5066 c
-1983.73 5066 l
-1982.52 5082.36 1979.5 5091.43 1973.26 5099.12 c
-1966.82 5106.96 1957.36 5111.42 1946.09 5111.42 c
-1920.94 5111.42 1904.03 5091.4 1904.03 5061.88 c
-1904.03 5032.5 1920.53 5013.18 1945.49 5013.18 c
-1961.79 5013.18 1971.65 5019.42 1984.73 5038.34 c
-h
-1932 5073 m
-1932.61 5096.96 1936.23 5104.42 1946.09 5104.42 c
-1951.93 5104.42 1955.55 5101.38 1957.16 5095.49 c
-1958.17 5091.67 1958.57 5086.03 1958.97 5075.77 c
-1958.97 5073 l
-h
-1988.35 5016 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -5016]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-5052.95 3933.35 m
-5052.95 4043.75 4961.75 4134.95 4850.15 4134.95 c
-4353.35 4134.95 l
-4241.75 4134.95 4150.55 4043.75 4150.55 3933.35 c
-4150.55 3795.35 l
-4150.55 3684.95 4241.75 3593.75 4353.35 3593.75 c
-4850.15 3593.75 l
-4961.75 3593.75 5052.95 3684.95 5052.95 3795.35 c
-f*
-1 g
-4983.35 3989.75 m
-4983.35 4096.55 4894.55 4184.15 4785.35 4184.15 c
-4299.35 4184.15 l
-4190.15 4184.15 4101.35 4096.55 4101.35 3989.75 c
-4101.35 3857.75 l
-4101.35 3750.95 4190.15 3663.35 4299.35 3663.35 c
-4785.35 3663.35 l
-4894.55 3663.35 4983.35 3750.95 4983.35 3857.75 c
-f*
-16 w
-0 g
-4983.35 3989.75 m
-4983.35 4096.55 4894.55 4184.15 4785.35 4184.15 c
-4299.35 4184.15 l
-4190.15 4184.15 4101.35 4096.55 4101.35 3989.75 c
-4101.35 3857.75 l
-4101.35 3750.95 4190.15 3663.35 4299.35 3663.35 c
-4785.35 3663.35 l
-4894.55 3663.35 4983.35 3750.95 4983.35 3857.75 c
-h
-S
-0.201248 i
-4329.33 4030 m
-4215.22 4030 l
-4215.22 4025 l
-4229.11 4024.2 4233 4021.18 4233 4010.72 c
-4233 3913.32 l
-4233 3902.85 4230.17 3900.64 4215.22 3899.03 c
-4215.22 3894 l
-4287.67 3894 l
-4287.67 3899 l
-4269.15 3899.81 4266 3902.23 4266 3913.32 c
-4266 3960.21 l
-4286.22 3959.81 4293.55 3952.36 4296.32 3929.02 c
-4301.35 3929.02 l
-4301.35 3997.04 l
-4296.32 3997.04 l
-4292.76 3974.1 4285.82 3967.05 4266 3967.05 c
-4266 4013.74 l
-4266 4021.19 4268.52 4023 4278.41 4023 c
-4297.13 4023 4308.8 4019.64 4315.04 4012.74 c
-4319.47 4007.71 4321.68 4002.27 4324.5 3989.59 c
-4329.33 3989.59 l
-h
-4334.96 3894 m
-f*
-4379.19 3987 m
-4340.84 3987 l
-4340.84 3981.95 l
-4349.49 3980.74 4352 3978.12 4352 3970.07 c
-4352 3910.9 l
-4352 3902.65 4349.93 3900.44 4340.84 3898.83 c
-4340.84 3894 l
-4394.37 3894 l
-4394.37 3898.83 l
-4382.09 3899.63 4380 3902.25 4380 3914.73 c
-4380 3952.76 l
-4380 3963.23 4385.49 3971.88 4391.95 3971.88 c
-4393.56 3971.88 4395.37 3970.47 4397.59 3967.25 c
-4401.41 3961.82 4404.43 3960.01 4409.66 3960.01 c
-4417.11 3960.01 4422.34 3965.64 4422.34 3973.29 c
-4422.34 3982.55 4415.5 3989.41 4406.04 3989.41 c
-4396.1 3989.41 4388.54 3984.12 4379.19 3970.27 c
-h
-4424.35 3894 m
-f*
-4519.19 3906.88 m
-4517.18 3904.87 l
-4516.57 3904.26 4515.97 3904.06 4514.96 3904.06 c
-4512.15 3904.06 4511 3905.67 4511 3909.09 c
-4511 3961.62 l
-4511 3978.73 4495.6 3989.42 4470.89 3989.42 c
-4448.15 3989.42 4432.85 3979.06 4432.85 3963.83 c
-4432.85 3955.38 4437.69 3950.55 4445.94 3950.55 c
-4453.99 3950.55 4459.62 3955.38 4459.62 3962.22 c
-4459.62 3965.04 4458.61 3967.66 4456 3970.88 c
-4454.19 3972.89 4453.58 3974.1 4453.58 3975.3 c
-4453.58 3979.53 4459.02 3982.42 4466.26 3982.42 c
-4478.14 3982.42 4483.86 3977.08 4483.86 3965.04 c
-4483.86 3950.35 l
-4459.91 3943.1 4450.29 3939.48 4442.51 3934.45 c
-4433.46 3928.41 4429 3921.37 4429 3912.52 c
-4429 3900.24 4438.27 3891.18 4451.17 3891.18 c
-4462.84 3891.18 4472.1 3895.21 4483.17 3905.27 c
-4485.38 3895.01 4489.81 3891.18 4499.67 3891.18 c
-4508.32 3891.18 4514.56 3894.4 4522.21 3902.65 c
-h
-4483 3914.13 m
-4477.55 3907.89 4473.52 3905.47 4468.68 3905.47 c
-4462.64 3905.47 4458 3910.91 4458 3918.96 c
-4458 3930.63 4466.61 3938.88 4483 3943.31 c
-h
-4524.62 3894 m
-f*
-4566.4 3987 m
-4527.7 3987 l
-4527.7 3981.95 l
-4536.55 3980.74 4539 3978.32 4539 3970.07 c
-4539 3910.9 l
-4539 3902.65 4536.74 3900.44 4527.7 3898.83 c
-4527.7 3894 l
-4576 3894 l
-4576 3898.83 l
-4568.95 3899.84 4567 3902.65 4567 3910.3 c
-4567 3964.03 l
-4567 3965.04 4569.87 3968.66 4572.18 3970.88 c
-4576.4 3974.1 4580.02 3976.42 4583.65 3976.42 c
-4591.5 3976.42 4595 3971.59 4595 3959 c
-4595 3910.3 l
-4595 3902.05 4592.68 3899.43 4584.85 3898.83 c
-4584.85 3894 l
-4631.95 3894 l
-4631.95 3898.83 l
-4624.9 3899.64 4623 3902.65 4623 3910.3 c
-4623 3964.03 l
-4623 3965.04 4625.73 3968.46 4627.92 3970.68 c
-4632.35 3974.1 4635.97 3976.42 4639.59 3976.42 c
-4647.24 3976.42 4650 3971.38 4650 3959 c
-4650 3910.3 l
-4650 3901.85 4647.85 3899.43 4640.4 3898.83 c
-4640.4 3894 l
-4688.3 3894 l
-4688.3 3899 l
-4680.45 3899.4 4678 3901.78 4678 3910.3 c
-4678 3960.81 l
-4678 3978.12 4667.43 3989.42 4651.07 3989.42 c
-4639.59 3989.42 4631.95 3984.73 4621.48 3971.68 c
-4615.44 3984.36 4608.4 3989.42 4595.72 3989.42 c
-4582.95 3989.42 4573.98 3983.91 4566.4 3971.68 c
-h
-4691.64 3894 m
-f*
-4769.9 3919.16 m
-4761.65 3909.29 4755.61 3905.18 4746.96 3905.18 c
-4739.31 3905.18 4733.27 3908.77 4729.25 3915.94 c
-4725.43 3922.54 4723.82 3929.56 4723.01 3944 c
-4773.73 3944 l
-4772.52 3960.36 4769.5 3969.43 4763.26 3977.12 c
-4756.82 3984.96 4747.36 3989.42 4736.09 3989.42 c
-4710.94 3989.42 4694.03 3969.4 4694.03 3939.88 c
-4694.03 3910.5 4710.53 3891.18 4735.49 3891.18 c
-4751.79 3891.18 4761.65 3897.42 4774.73 3916.34 c
-h
-4722 3951 m
-4722.61 3974.96 4726.23 3982.42 4736.09 3982.42 c
-4741.93 3982.42 4745.55 3979.38 4747.16 3973.49 c
-4748.17 3969.67 4748.57 3964.03 4748.97 3953.77 c
-4748.97 3951 l
-h
-4778.35 3894 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4814 -3892]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3804.95 3548.15 m
-3804.95 3658.55 3713.75 3749.75 3602.15 3749.75 c
-3106.55 3749.75 l
-2994.95 3749.75 2903.75 3658.55 2903.75 3548.15 c
-2903.75 3410.15 l
-2903.75 3299.75 2994.95 3208.55 3106.55 3208.55 c
-3602.15 3208.55 l
-3713.75 3208.55 3804.95 3299.75 3804.95 3410.15 c
-f*
-1 g
-3735.35 3604.55 m
-3735.35 3711.35 3646.55 3798.95 3537.35 3798.95 c
-3052.55 3798.95 l
-2943.35 3798.95 2854.55 3711.35 2854.55 3604.55 c
-2854.55 3472.55 l
-2854.55 3365.75 2943.35 3278.15 3052.55 3278.15 c
-3537.35 3278.15 l
-3646.55 3278.15 3735.35 3365.75 3735.35 3472.55 c
-f*
-0 g
-3735.35 3604.55 m
-3735.35 3711.35 3646.55 3798.95 3537.35 3798.95 c
-3052.55 3798.95 l
-2943.35 3798.95 2854.55 3711.35 2854.55 3604.55 c
-2854.55 3472.55 l
-2854.55 3365.75 2943.35 3278.15 3052.55 3278.15 c
-3537.35 3278.15 l
-3646.55 3278.15 3735.35 3365.75 3735.35 3472.55 c
-h
-S
-0.201248 i
-3082.33 3645 m
-2968.22 3645 l
-2968.22 3640 l
-2982.11 3639.2 2986 3636.18 2986 3625.72 c
-2986 3528.32 l
-2986 3517.85 2983.17 3515.64 2968.22 3514.03 c
-2968.22 3509 l
-3040.67 3509 l
-3040.67 3514 l
-3022.15 3514.81 3019 3517.23 3019 3528.32 c
-3019 3575.21 l
-3039.22 3574.81 3046.55 3567.36 3049.32 3544.02 c
-3054.35 3544.02 l
-3054.35 3612.04 l
-3049.32 3612.04 l
-3045.76 3589.1 3038.82 3582.05 3019 3582.05 c
-3019 3628.74 l
-3019 3636.19 3021.52 3638 3031.41 3638 c
-3050.13 3638 3061.8 3634.64 3068.04 3627.74 c
-3072.47 3622.71 3074.68 3617.27 3077.5 3604.59 c
-3082.33 3604.59 l
-h
-3087.96 3509 m
-f*
-3131.19 3602 m
-3092.84 3602 l
-3092.84 3596.95 l
-3101.49 3595.74 3104 3593.12 3104 3585.07 c
-3104 3525.9 l
-3104 3517.65 3101.93 3515.44 3092.84 3513.83 c
-3092.84 3509 l
-3146.37 3509 l
-3146.37 3513.83 l
-3134.09 3514.63 3132 3517.25 3132 3529.73 c
-3132 3567.76 l
-3132 3578.23 3137.49 3586.88 3143.95 3586.88 c
-3145.56 3586.88 3147.37 3585.47 3149.59 3582.25 c
-3153.41 3576.82 3156.43 3575.01 3161.66 3575.01 c
-3169.11 3575.01 3174.34 3580.64 3174.34 3588.29 c
-3174.34 3597.55 3167.5 3604.41 3158.04 3604.41 c
-3148.1 3604.41 3140.54 3599.12 3131.19 3585.27 c
-h
-3176.35 3509 m
-f*
-3271.19 3521.88 m
-3269.18 3519.87 l
-3268.57 3519.26 3267.97 3519.06 3266.96 3519.06 c
-3264.15 3519.06 3263 3520.67 3263 3524.09 c
-3263 3576.62 l
-3263 3593.73 3247.6 3604.42 3222.89 3604.42 c
-3200.15 3604.42 3184.85 3594.06 3184.85 3578.83 c
-3184.85 3570.38 3189.69 3565.55 3197.94 3565.55 c
-3205.99 3565.55 3211.62 3570.38 3211.62 3577.22 c
-3211.62 3580.04 3210.61 3582.66 3208 3585.88 c
-3206.19 3587.89 3205.58 3589.1 3205.58 3590.3 c
-3205.58 3594.53 3211.02 3597.42 3218.26 3597.42 c
-3230.14 3597.42 3235.86 3592.08 3235.86 3580.04 c
-3235.86 3565.35 l
-3211.91 3558.1 3202.29 3554.48 3194.51 3549.45 c
-3185.46 3543.41 3181 3536.37 3181 3527.52 c
-3181 3515.24 3190.27 3506.18 3203.17 3506.18 c
-3214.84 3506.18 3224.1 3510.21 3235.17 3520.27 c
-3237.38 3510.01 3241.81 3506.18 3251.67 3506.18 c
-3260.32 3506.18 3266.56 3509.4 3274.21 3517.65 c
-h
-3235 3529.13 m
-3229.55 3522.89 3225.52 3520.47 3220.68 3520.47 c
-3214.64 3520.47 3210 3525.91 3210 3533.96 c
-3210 3545.63 3218.61 3553.88 3235 3558.31 c
-h
-3276.62 3509 m
-f*
-3318.4 3602 m
-3279.7 3602 l
-3279.7 3596.95 l
-3288.55 3595.74 3291 3593.32 3291 3585.07 c
-3291 3525.9 l
-3291 3517.65 3288.74 3515.44 3279.7 3513.83 c
-3279.7 3509 l
-3328 3509 l
-3328 3513.83 l
-3320.95 3514.84 3319 3517.65 3319 3525.3 c
-3319 3579.03 l
-3319 3580.04 3321.87 3583.66 3324.18 3585.88 c
-3328.4 3589.1 3332.02 3591.42 3335.65 3591.42 c
-3343.5 3591.42 3347 3586.59 3347 3574 c
-3347 3525.3 l
-3347 3517.05 3344.68 3514.43 3336.85 3513.83 c
-3336.85 3509 l
-3383.95 3509 l
-3383.95 3513.83 l
-3376.9 3514.64 3375 3517.65 3375 3525.3 c
-3375 3579.03 l
-3375 3580.04 3377.73 3583.46 3379.92 3585.68 c
-3384.35 3589.1 3387.97 3591.42 3391.59 3591.42 c
-3399.24 3591.42 3402 3586.38 3402 3574 c
-3402 3525.3 l
-3402 3516.85 3399.85 3514.43 3392.4 3513.83 c
-3392.4 3509 l
-3440.3 3509 l
-3440.3 3514 l
-3432.45 3514.4 3430 3516.78 3430 3525.3 c
-3430 3575.81 l
-3430 3593.12 3419.43 3604.42 3403.07 3604.42 c
-3391.59 3604.42 3383.95 3599.73 3373.48 3586.68 c
-3367.44 3599.36 3360.4 3604.42 3347.72 3604.42 c
-3334.95 3604.42 3325.98 3598.91 3318.4 3586.68 c
-h
-3443.64 3509 m
-f*
-3523.9 3534.16 m
-3515.65 3524.29 3509.61 3520.18 3500.96 3520.18 c
-3493.31 3520.18 3487.27 3523.77 3483.25 3530.94 c
-3479.43 3537.54 3477.82 3544.56 3477.01 3559 c
-3527.73 3559 l
-3526.52 3575.36 3523.5 3584.43 3517.26 3592.12 c
-3510.82 3599.96 3501.36 3604.42 3490.09 3604.42 c
-3464.94 3604.42 3448.03 3584.4 3448.03 3554.88 c
-3448.03 3525.5 3464.53 3506.18 3489.49 3506.18 c
-3505.79 3506.18 3515.65 3512.42 3528.73 3531.34 c
-h
-3476 3566 m
-3476.61 3589.96 3480.23 3597.42 3490.09 3597.42 c
-3495.93 3597.42 3499.55 3594.38 3501.16 3588.49 c
-3502.17 3584.67 3502.57 3579.03 3502.97 3568.77 c
-3502.97 3566 l
-h
-3532.35 3509 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -3509]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-8 w
-1751.75 4750.55 m
-1751.75 4758.95 1751.75 4758.95 1751.75 4750.55 c
-1751.75 4602.95 1791.35 4461.35 1863.35 4360.55 c
-S
-1804.55 4366.55 m
-1853.75 4382.15 l
-1878.95 4427.75 l
-1940.15 4280.15 l
-f*
-2244.95 3784.55 m
-2334.95 3666.95 2519.75 3582.95 2740.55 3561.35 c
-S
-2699.75 3518.15 m
-2721.35 3564.95 l
-2705.75 3612.95 l
-2854.55 3556.55 l
-f*
-2831.75 5164.55 m
-2729.75 5264.15 2584.55 5321.75 2430.95 5321.75 c
-2326.55 5321.75 2224.55 5295.35 2136.95 5244.95 c
-S
-2766.95 5158.55 m
-2814.95 5174.15 l
-2838.95 5219.75 l
-2902.55 5073.35 l
-f*
-32 w
-3062.15 4598.15 m
-3158.15 4380.95 3362.15 4242.95 3585.35 4242.95 c
-3738.95 4242.95 3887.75 4310.15 3995.75 4427.75 c
-S
-4016.15 4337.75 m
-3971.75 4407.35 l
-3891.35 4428.95 l
-4100.15 4582.55 l
-f*
-0.564706 g
-3616.55 4779.35 m
-3480.95 4816.55 l
-3576.95 4871.75 l
-3423.35 4881.35 l
-3466.55 4950.95 l
-3318.95 4930.55 l
-3300.95 5002.55 l
-3180.95 4956.95 l
-3106.55 5020.55 l
-3029.75 4956.95 l
-2909.75 5002.55 l
-2891.75 4930.55 l
-2744.15 4950.95 l
-2787.35 4881.35 l
-2633.75 4871.75 l
-2729.75 4816.55 l
-2595.35 4779.35 l
-2729.75 4744.55 l
-2633.75 4688.15 l
-2787.35 4679.75 l
-2744.15 4610.15 l
-2891.75 4629.35 l
-2909.75 4558.55 l
-3029.75 4602.95 l
-3106.55 4539.35 l
-3180.95 4602.95 l
-3300.95 4558.55 l
-3318.95 4629.35 l
-3466.55 4610.15 l
-3423.35 4679.75 l
-3576.95 4688.15 l
-3480.95 4744.55 l
-f*
-1 g
-3556.55 4839.35 m
-3420.95 4876.55 l
-3516.95 4931.75 l
-3363.35 4941.35 l
-3406.55 5010.95 l
-3258.95 4990.55 l
-3240.95 5062.55 l
-3120.95 5016.95 l
-3046.55 5080.55 l
-2969.75 5016.95 l
-2849.75 5062.55 l
-2831.75 4990.55 l
-2684.15 5010.95 l
-2727.35 4941.35 l
-2573.75 4931.75 l
-2669.75 4876.55 l
-2535.35 4839.35 l
-2669.75 4804.55 l
-2573.75 4748.15 l
-2727.35 4739.75 l
-2684.15 4670.15 l
-2831.75 4689.35 l
-2849.75 4618.55 l
-2969.75 4662.95 l
-3046.55 4599.35 l
-3120.95 4662.95 l
-3240.95 4618.55 l
-3258.95 4689.35 l
-3406.55 4670.15 l
-3363.35 4739.75 l
-3516.95 4748.15 l
-3420.95 4804.55 l
-f*
-0 g
-3556.55 4839.35 m
-3420.95 4876.55 l
-3516.95 4931.75 l
-3363.35 4941.35 l
-3406.55 5010.95 l
-3258.95 4990.55 l
-3240.95 5062.55 l
-3120.95 5016.95 l
-3046.55 5080.55 l
-2969.75 5016.95 l
-2849.75 5062.55 l
-2831.75 4990.55 l
-2684.15 5010.95 l
-2727.35 4941.35 l
-2573.75 4931.75 l
-2669.75 4876.55 l
-2535.35 4839.35 l
-2669.75 4804.55 l
-2573.75 4748.15 l
-2727.35 4739.75 l
-2684.15 4670.15 l
-2831.75 4689.35 l
-2849.75 4618.55 l
-2969.75 4662.95 l
-3046.55 4599.35 l
-3120.95 4662.95 l
-3240.95 4618.55 l
-3258.95 4689.35 l
-3406.55 4670.15 l
-3363.35 4739.75 l
-3516.95 4748.15 l
-3420.95 4804.55 l
-3556.55 4839.35 l
-3516.95 4839.35 l
-3394.55 4808.15 l
-3483.35 4756.55 l
-3346.55 4748.15 l
-3386.15 4682.15 l
-3250.55 4701.35 l
-3233.75 4631.75 l
-3118.55 4674.95 l
-3046.55 4612.55 l
-2972.15 4674.95 l
-2856.95 4631.75 l
-2840.15 4701.35 l
-2703.35 4682.15 l
-2745.35 4748.15 l
-2607.35 4756.55 l
-2696.15 4808.15 l
-2573.75 4839.35 l
-2694.95 4871.75 l
-2607.35 4924.55 l
-2745.35 4931.75 l
-2703.35 4998.95 l
-2840.15 4979.75 l
-2856.95 5048.15 l
-2972.15 5006.15 l
-3046.55 5068.55 l
-3118.55 5006.15 l
-3233.75 5048.15 l
-3250.55 4979.75 l
-3386.15 4998.95 l
-3346.55 4931.75 l
-3483.35 4924.55 l
-3394.55 4871.75 l
-3516.95 4839.35 l
-3556.55 4839.35 l
-f*
-0.2 i
-2867.08 4890.76 m
-2847.08 4816.52 l
-2844.52 4807.88 2841.48 4805.64 2831.08 4805 c
-2831.08 4801 l
-2881 4801 l
-2881 4805 l
-2871.72 4805.48 2869.48 4806.76 2869.48 4811.88 c
-2869.48 4813.64 2869.8 4815.4 2870.76 4819.08 c
-2870.92 4819.88 l
-2871.08 4820.68 l
-2890.76 4892.52 l
-2893.16 4900.84 2895.56 4903.08 2903.72 4904.04 c
-2903.72 4908 l
-2869.8 4908 l
-2820.2 4831.24 l
-2811.56 4908 l
-2776.2 4908 l
-2776.2 4904 l
-2786.28 4903.52 2787.72 4902.89 2787.72 4898.44 c
-2787.72 4896.2 2787.08 4893.32 2785.96 4889.16 c
-2768.52 4829.48 l
-2762.12 4808.68 2761 4806.92 2752.36 4805 c
-2752.36 4801 l
-2785.48 4801 l
-2785.48 4805 l
-2775.24 4806.28 2772.68 4808.2 2772.68 4814.76 c
-2772.68 4817.48 2773.48 4821.48 2775.72 4829.48 c
-2791.88 4888.52 l
-2802.6 4799.08 l
-2807.08 4799.08 l
-h
-2899.24 4801 m
-f*
-2969.44 4821.32 m
-2962.88 4812.52 2960.48 4809.76 2957.92 4809.76 c
-2956.64 4809.76 2956 4810.86 2956 4812.52 c
-2956 4816.52 2957.44 4823.08 2961.44 4836.2 c
-2972.8 4873.96 l
-2955.04 4872.84 l
-2952.16 4863.4 l
-2950.72 4871.56 2947.2 4875.08 2940.32 4875.08 c
-2920.64 4875.08 2897 4844.27 2897 4819.24 c
-2897 4807.08 2903.74 4798.92 2913.92 4798.92 c
-2923.68 4798.92 2931.04 4804.68 2940.16 4820.04 c
-2938.24 4813.48 2938 4811.56 2938 4809.32 c
-2938 4803.4 2942.76 4798.76 2948.64 4798.76 c
-2956.16 4798.76 2963.52 4805 2972.8 4818.92 c
-h
-2942.56 4868.2 m
-2946.08 4867.88 2948.56 4865 2948.56 4860.68 c
-2948.56 4851.08 2943.24 4833.32 2936.96 4822.28 c
-2932.64 4814.44 2927.84 4809.92 2923.52 4809.92 c
-2919.36 4809.92 2916 4813.75 2916 4818.92 c
-2916 4827.24 2921.42 4843.24 2928.16 4855.08 c
-2932.96 4863.56 2938.24 4868.52 2942.56 4868.2 c
-h
-2980 4801 m
-f*
-3013.56 4874.92 m
-2997.24 4872.36 2991 4871.4 2982.68 4870.44 c
-2982.68 4866 l
-2989.88 4865.69 2991.32 4865.07 2991.32 4862.12 c
-2991.32 4860.52 2990.04 4854.76 2987.8 4846.44 c
-2971.8 4784.36 l
-2968.76 4773.8 2967.48 4772.84 2959.8 4773 c
-2959.8 4768 l
-2999.64 4768 l
-2999.64 4773 l
-2991.64 4773.14 2989.24 4774.16 2989.24 4777.64 c
-2989.24 4779.88 2990.36 4784.68 2993.4 4795.88 c
-2994.52 4799.72 2994.52 4800.04 2995.16 4802.44 c
-3000.76 4799.56 3002.68 4798.92 3006.04 4798.92 c
-3027.8 4798.92 3050.36 4827.88 3050.36 4855.56 c
-3050.36 4867.4 3043.64 4875.08 3033.08 4875.08 c
-3023.96 4875.08 3016.92 4869.92 3007.48 4856.52 c
-h
-3024.12 4863.56 m
-3028.28 4863.24 3030.68 4859.56 3030.36 4854.44 c
-3029.72 4843.88 3024.6 4828.04 3018.84 4817.64 c
-3013.88 4809 3008.76 4803.92 3003.32 4803.92 c
-2999.8 4803.92 2997.08 4806.75 2997.08 4810.28 c
-2997.08 4813 2998.84 4819.56 3003.16 4834.12 c
-3006.68 4845.8 3008.12 4849.8 3010.52 4853.48 c
-3014.52 4859.72 3019.96 4863.88 3024.12 4863.56 c
-h
-3059 4801 m
-f*
-3094.56 4874.92 m
-3078.24 4872.36 3072 4871.4 3063.68 4870.44 c
-3063.68 4866 l
-3070.88 4865.69 3072.32 4865.07 3072.32 4862.12 c
-3072.32 4860.52 3071.04 4854.76 3068.8 4846.44 c
-3052.8 4784.36 l
-3049.76 4773.8 3048.48 4772.84 3040.8 4773 c
-3040.8 4768 l
-3080.64 4768 l
-3080.64 4773 l
-3072.64 4773.14 3070.24 4774.16 3070.24 4777.64 c
-3070.24 4779.88 3071.36 4784.68 3074.4 4795.88 c
-3075.52 4799.72 3075.52 4800.04 3076.16 4802.44 c
-3081.76 4799.56 3083.68 4798.92 3087.04 4798.92 c
-3108.8 4798.92 3131.36 4827.88 3131.36 4855.56 c
-3131.36 4867.4 3124.64 4875.08 3114.08 4875.08 c
-3104.96 4875.08 3097.92 4869.92 3088.48 4856.52 c
-h
-3105.12 4863.56 m
-3109.28 4863.24 3111.68 4859.56 3111.36 4854.44 c
-3110.72 4843.88 3105.6 4828.04 3099.84 4817.64 c
-3094.88 4809 3089.76 4803.92 3084.32 4803.92 c
-3080.8 4803.92 3078.08 4806.75 3078.08 4810.28 c
-3078.08 4813 3079.84 4819.56 3084.16 4834.12 c
-3087.68 4845.8 3089.12 4849.8 3091.52 4853.48 c
-3095.52 4859.72 3100.96 4863.88 3105.12 4863.56 c
-h
-3140 4801 m
-f*
-3174.56 4823.56 m
-3172.32 4820.36 l
-3168.16 4814.12 3164.48 4810.56 3162.08 4810.56 c
-3160.8 4810.56 3160 4811.77 3160 4813.16 c
-3160 4814.6 3160.62 4818.76 3161.12 4821.48 c
-3175.68 4874.92 l
-3167.22 4873 3156.26 4871.4 3144.04 4870.44 c
-3144.04 4866 l
-3145.44 4866 l
-3150.24 4866 3153.48 4864.44 3153.48 4861.48 c
-3153.48 4860.2 3152.71 4857.8 3151.68 4855.08 c
-3142.4 4820.68 l
-3141.12 4816.04 3141 4811.88 3141 4809.64 c
-3141 4803.56 3145.2 4799.56 3151.36 4799.56 c
-3160.96 4799.56 3166.88 4804.36 3178.08 4821.32 c
-h
-3170.88 4910.4 m
-3165.44 4910.4 3161 4905.46 3161 4900.04 c
-3161 4893.8 3165.26 4889.4 3171.04 4889.4 c
-3177.12 4889.4 3182 4893.86 3182 4899.56 c
-3182 4905.48 3177 4910.4 3170.88 4910.4 c
-h
-3184.48 4801 m
-f*
-3258.36 4822.6 m
-3251.96 4812.68 3249.88 4810.56 3247.16 4810.56 c
-3245.88 4810.56 3245 4811.63 3245 4813.16 c
-3245 4814.76 3245.94 4818.12 3248.92 4827.08 c
-3254.68 4844.52 l
-3257.24 4852.04 3259 4859.08 3259 4862.92 c
-3259 4870.76 3254.78 4875.08 3247.16 4875.08 c
-3241.24 4875.08 3235.48 4872.62 3231.16 4868.36 c
-3225.24 4862.76 3222.2 4858.92 3211.48 4843.08 c
-3221.72 4874.76 l
-3211.48 4872.52 3198.68 4870.92 3189.72 4870.6 c
-3189.72 4865.8 l
-3196.44 4865.65 3198.36 4864.92 3198.36 4862.12 c
-3198.36 4860.2 3196.12 4851.72 3191 4833.64 c
-3187.32 4820.68 3186.2 4816.52 3182.04 4801 c
-3201.4 4801 l
-3208.92 4828.68 3214.68 4842.6 3224.6 4855.56 c
-3227.8 4859.88 3232.76 4863.08 3235.64 4863.08 c
-3237.72 4863.08 3240 4861.63 3240 4860.04 c
-3240 4859.56 3239.54 4858.28 3238.84 4856.68 c
-3230.04 4830.12 l
-3227.48 4822.44 3226 4813.32 3226 4809.16 c
-3226 4803.08 3229.84 4799.56 3236.44 4799.56 c
-3246.04 4799.56 3252.6 4805 3261.88 4820.52 c
-h
-3271.96 4801 m
-f*
-3349.48 4870 m
-3331.72 4870 l
-3326.28 4873.58 3321.48 4875.08 3314.12 4875.08 c
-3294.44 4875.08 3278 4862.05 3278 4845.8 c
-3278 4837.64 3282.35 4831.88 3291.4 4828.2 c
-3278.28 4820.84 3276 4818.6 3276 4812.68 c
-3276 4807.56 3278.89 4804.52 3285.96 4802.12 c
-3276.04 4799.72 3272.84 4798.44 3269 4795.4 c
-3266.44 4793.16 3265 4789.32 3265 4785.48 c
-3265 4775.08 3276.56 4769 3294.76 4769 c
-3317.32 4769 3333 4778.72 3333 4792.52 c
-3333 4802.28 3326.6 4807.56 3309.16 4812.52 c
-3300.68 4814.92 l
-3295.56 4816.36 3292 4818.6 3292 4821 c
-3292 4823.56 3294.68 4826.28 3297 4826.28 c
-3297.8 4826.28 3298.92 4826.24 3300.2 4826.12 c
-3301.96 4825.64 3303.24 4825 3305.16 4825 c
-3312.2 4825 3319.4 4827.09 3325.48 4830.92 c
-3334.76 4836.2 3340 4844.36 3340 4853.96 c
-3340 4856.64 3339.59 4858.32 3338.76 4861 c
-3349.48 4861 l
-h
-3291.4 4800.04 m
-3293.32 4799.88 3305.48 4795.72 3309 4794.12 c
-3313.48 4791.88 3316 4789.16 3316 4785 c
-3316 4777.96 3308.8 4774 3296.36 4774 c
-3285.96 4774 3279 4779.1 3279 4786.44 c
-3279 4789.48 3280.32 4792.2 3283.24 4795.24 c
-3285.32 4797.32 3290.12 4800.2 3291.4 4800.04 c
-h
-3313.8 4870.08 m
-3317.96 4870.08 3321 4866.19 3321 4860.52 c
-3321 4855.08 3319.08 4847.4 3316.36 4841.48 c
-3313 4834.12 3308.84 4830 3303.88 4830 c
-3299.56 4830 3297 4833.52 3297 4839.88 c
-3297 4846.28 3299.79 4856.04 3303.24 4862.12 c
-3306.28 4867.4 3309.64 4870.08 3313.8 4870.08 c
-h
-3353 4801 m
-f*
-1 i
-0.564706 g
-2708.15 3969.35 m
-2573.75 4006.55 l
-2669.75 4061.75 l
-2516.15 4071.35 l
-2558.15 4140.95 l
-2410.55 4120.55 l
-2393.75 4192.55 l
-2273.75 4146.95 l
-2198.15 4210.55 l
-2122.55 4146.95 l
-2002.55 4192.55 l
-1984.55 4120.55 l
-1835.75 4140.95 l
-1880.15 4071.35 l
-1726.55 4061.75 l
-1822.55 4006.55 l
-1686.95 3969.35 l
-1822.55 3934.55 l
-1726.55 3878.15 l
-1880.15 3869.75 l
-1835.75 3800.15 l
-1984.55 3819.35 l
-2002.55 3748.55 l
-2122.55 3792.95 l
-2198.15 3729.35 l
-2273.75 3792.95 l
-2393.75 3748.55 l
-2410.55 3819.35 l
-2558.15 3800.15 l
-2516.15 3869.75 l
-2669.75 3878.15 l
-2573.75 3934.55 l
-f*
-1 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-f*
-0 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-2648.15 4029.35 l
-2609.75 4029.35 l
-2487.35 3998.15 l
-2576.15 3946.55 l
-2438.15 3938.15 l
-2478.95 3872.15 l
-2343.35 3891.35 l
-2326.55 3821.75 l
-2211.35 3864.95 l
-2138.15 3802.55 l
-2064.95 3864.95 l
-1949.75 3821.75 l
-1931.75 3891.35 l
-1796.15 3872.15 l
-1836.95 3938.15 l
-1700.15 3946.55 l
-1788.95 3998.15 l
-1666.55 4029.35 l
-1787.75 4061.75 l
-1700.15 4114.55 l
-1836.95 4121.75 l
-1796.15 4188.95 l
-1931.75 4169.75 l
-1949.75 4238.15 l
-2064.95 4196.15 l
-2138.15 4258.55 l
-2211.35 4196.15 l
-2326.55 4238.15 l
-2343.35 4169.75 l
-2478.95 4188.95 l
-2438.15 4121.75 l
-2576.15 4114.55 l
-2487.35 4061.75 l
-2609.75 4029.35 l
-2648.15 4029.35 l
-f*
-0.2 i
-1960.08 4080.76 m
-1940.08 4006.52 l
-1937.52 3997.88 1934.48 3995.64 1924.08 3995 c
-1924.08 3991 l
-1974 3991 l
-1974 3995 l
-1964.72 3995.48 1962.48 3996.76 1962.48 4001.88 c
-1962.48 4003.64 1962.8 4005.4 1963.76 4009.08 c
-1963.92 4009.88 l
-1964.08 4010.68 l
-1983.76 4082.52 l
-1986.16 4090.84 1988.56 4093.08 1996.72 4094.04 c
-1996.72 4098 l
-1962.8 4098 l
-1913.2 4021.24 l
-1904.56 4098 l
-1869.2 4098 l
-1869.2 4094 l
-1879.28 4093.52 1880.72 4092.89 1880.72 4088.44 c
-1880.72 4086.2 1880.08 4083.32 1878.96 4079.16 c
-1861.52 4019.48 l
-1855.12 3998.68 1854 3996.92 1845.36 3995 c
-1845.36 3991 l
-1878.48 3991 l
-1878.48 3995 l
-1868.24 3996.28 1865.68 3998.2 1865.68 4004.76 c
-1865.68 4007.48 1866.48 4011.48 1868.72 4019.48 c
-1884.88 4078.52 l
-1895.6 3989.08 l
-1900.08 3989.08 l
-h
-1992.24 3991 m
-f*
-2061.44 4011.32 m
-2054.88 4002.52 2052.48 3999.76 2049.92 3999.76 c
-2048.64 3999.76 2048 4000.86 2048 4002.52 c
-2048 4006.52 2049.44 4013.08 2053.44 4026.2 c
-2064.8 4063.96 l
-2047.04 4062.84 l
-2044.16 4053.4 l
-2042.72 4061.56 2039.2 4065.08 2032.32 4065.08 c
-2012.64 4065.08 1989 4034.27 1989 4009.24 c
-1989 3997.08 1995.74 3988.92 2005.92 3988.92 c
-2015.68 3988.92 2023.04 3994.68 2032.16 4010.04 c
-2030.24 4003.48 2030 4001.56 2030 3999.32 c
-2030 3993.4 2034.76 3988.76 2040.64 3988.76 c
-2048.16 3988.76 2055.52 3995 2064.8 4008.92 c
-h
-2034.56 4058.2 m
-2038.08 4057.88 2040.56 4055 2040.56 4050.68 c
-2040.56 4041.08 2035.24 4023.32 2028.96 4012.28 c
-2024.64 4004.44 2019.84 3999.92 2015.52 3999.92 c
-2011.36 3999.92 2008 4003.75 2008 4008.92 c
-2008 4017.24 2013.42 4033.24 2020.16 4045.08 c
-2024.96 4053.56 2030.24 4058.52 2034.56 4058.2 c
-h
-2072 3991 m
-f*
-2106.56 4064.92 m
-2090.24 4062.36 2084 4061.4 2075.68 4060.44 c
-2075.68 4056 l
-2082.88 4055.69 2084.32 4055.07 2084.32 4052.12 c
-2084.32 4050.52 2083.04 4044.76 2080.8 4036.44 c
-2064.8 3974.36 l
-2061.76 3963.8 2060.48 3962.84 2052.8 3963 c
-2052.8 3958 l
-2092.64 3958 l
-2092.64 3963 l
-2084.64 3963.14 2082.24 3964.16 2082.24 3967.64 c
-2082.24 3969.88 2083.36 3974.68 2086.4 3985.88 c
-2087.52 3989.72 2087.52 3990.04 2088.16 3992.44 c
-2093.76 3989.56 2095.68 3988.92 2099.04 3988.92 c
-2120.8 3988.92 2143.36 4017.88 2143.36 4045.56 c
-2143.36 4057.4 2136.64 4065.08 2126.08 4065.08 c
-2116.96 4065.08 2109.92 4059.92 2100.48 4046.52 c
-h
-2117.12 4053.56 m
-2121.28 4053.24 2123.68 4049.56 2123.36 4044.44 c
-2122.72 4033.88 2117.6 4018.04 2111.84 4007.64 c
-2106.88 3999 2101.76 3993.92 2096.32 3993.92 c
-2092.8 3993.92 2090.08 3996.75 2090.08 4000.28 c
-2090.08 4003 2091.84 4009.56 2096.16 4024.12 c
-2099.68 4035.8 2101.12 4039.8 2103.52 4043.48 c
-2107.52 4049.72 2112.96 4053.88 2117.12 4053.56 c
-h
-2152 3991 m
-f*
-2187.56 4064.92 m
-2171.24 4062.36 2165 4061.4 2156.68 4060.44 c
-2156.68 4056 l
-2163.88 4055.69 2165.32 4055.07 2165.32 4052.12 c
-2165.32 4050.52 2164.04 4044.76 2161.8 4036.44 c
-2145.8 3974.36 l
-2142.76 3963.8 2141.48 3962.84 2133.8 3963 c
-2133.8 3958 l
-2173.64 3958 l
-2173.64 3963 l
-2165.64 3963.14 2163.24 3964.16 2163.24 3967.64 c
-2163.24 3969.88 2164.36 3974.68 2167.4 3985.88 c
-2168.52 3989.72 2168.52 3990.04 2169.16 3992.44 c
-2174.76 3989.56 2176.68 3988.92 2180.04 3988.92 c
-2201.8 3988.92 2224.36 4017.88 2224.36 4045.56 c
-2224.36 4057.4 2217.64 4065.08 2207.08 4065.08 c
-2197.96 4065.08 2190.92 4059.92 2181.48 4046.52 c
-h
-2198.12 4053.56 m
-2202.28 4053.24 2204.68 4049.56 2204.36 4044.44 c
-2203.72 4033.88 2198.6 4018.04 2192.84 4007.64 c
-2187.88 3999 2182.76 3993.92 2177.32 3993.92 c
-2173.8 3993.92 2171.08 3996.75 2171.08 4000.28 c
-2171.08 4003 2172.84 4009.56 2177.16 4024.12 c
-2180.68 4035.8 2182.12 4039.8 2184.52 4043.48 c
-2188.52 4049.72 2193.96 4053.88 2198.12 4053.56 c
-h
-2233 3991 m
-f*
-2266.56 4013.56 m
-2264.32 4010.36 l
-2260.16 4004.12 2256.48 4000.56 2254.08 4000.56 c
-2252.8 4000.56 2252 4001.77 2252 4003.16 c
-2252 4004.6 2252.62 4008.76 2253.12 4011.48 c
-2267.68 4064.92 l
-2259.22 4063 2248.26 4061.4 2236.04 4060.44 c
-2236.04 4056 l
-2237.44 4056 l
-2242.24 4056 2245.48 4054.44 2245.48 4051.48 c
-2245.48 4050.2 2244.71 4047.8 2243.68 4045.08 c
-2234.4 4010.68 l
-2233.12 4006.04 2233 4001.88 2233 3999.64 c
-2233 3993.56 2237.2 3989.56 2243.36 3989.56 c
-2252.96 3989.56 2258.88 3994.36 2270.08 4011.32 c
-h
-2262.88 4100.4 m
-2257.44 4100.4 2253 4095.46 2253 4090.04 c
-2253 4083.8 2257.26 4079.4 2263.04 4079.4 c
-2269.12 4079.4 2274 4083.86 2274 4089.56 c
-2274 4095.48 2269 4100.4 2262.88 4100.4 c
-h
-2276.48 3991 m
-f*
-2351.36 4012.6 m
-2344.96 4002.68 2342.88 4000.56 2340.16 4000.56 c
-2338.88 4000.56 2338 4001.63 2338 4003.16 c
-2338 4004.76 2338.94 4008.12 2341.92 4017.08 c
-2347.68 4034.52 l
-2350.24 4042.04 2352 4049.08 2352 4052.92 c
-2352 4060.76 2347.78 4065.08 2340.16 4065.08 c
-2334.24 4065.08 2328.48 4062.62 2324.16 4058.36 c
-2318.24 4052.76 2315.2 4048.92 2304.48 4033.08 c
-2314.72 4064.76 l
-2304.48 4062.52 2291.68 4060.92 2282.72 4060.6 c
-2282.72 4055.8 l
-2289.44 4055.65 2291.36 4054.92 2291.36 4052.12 c
-2291.36 4050.2 2289.12 4041.72 2284 4023.64 c
-2280.32 4010.68 2279.2 4006.52 2275.04 3991 c
-2294.4 3991 l
-2301.92 4018.68 2307.68 4032.6 2317.6 4045.56 c
-2320.8 4049.88 2325.76 4053.08 2328.64 4053.08 c
-2330.72 4053.08 2333 4051.63 2333 4050.04 c
-2333 4049.56 2332.54 4048.28 2331.84 4046.68 c
-2323.04 4020.12 l
-2320.48 4012.44 2319 4003.32 2319 3999.16 c
-2319 3993.08 2322.84 3989.56 2329.44 3989.56 c
-2339.04 3989.56 2345.6 3995 2354.88 4010.52 c
-h
-2364.96 3991 m
-f*
-2442.48 4060 m
-2424.72 4060 l
-2419.28 4063.58 2414.48 4065.08 2407.12 4065.08 c
-2387.44 4065.08 2371 4052.05 2371 4035.8 c
-2371 4027.64 2375.35 4021.88 2384.4 4018.2 c
-2371.28 4010.84 2369 4008.6 2369 4002.68 c
-2369 3997.56 2371.89 3994.52 2378.96 3992.12 c
-2369.04 3989.72 2365.84 3988.44 2362 3985.4 c
-2359.44 3983.16 2358 3979.32 2358 3975.48 c
-2358 3965.08 2369.56 3959 2387.76 3959 c
-2410.32 3959 2426 3968.72 2426 3982.52 c
-2426 3992.28 2419.6 3997.56 2402.16 4002.52 c
-2393.68 4004.92 l
-2388.56 4006.36 2385 4008.6 2385 4011 c
-2385 4013.56 2387.68 4016.28 2390 4016.28 c
-2390.8 4016.28 2391.92 4016.24 2393.2 4016.12 c
-2394.96 4015.64 2396.24 4015 2398.16 4015 c
-2405.2 4015 2412.4 4017.09 2418.48 4020.92 c
-2427.76 4026.2 2433 4034.36 2433 4043.96 c
-2433 4046.64 2432.59 4048.32 2431.76 4051 c
-2442.48 4051 l
-h
-2384.4 3990.04 m
-2386.32 3989.88 2398.48 3985.72 2402 3984.12 c
-2406.48 3981.88 2409 3979.16 2409 3975 c
-2409 3967.96 2401.8 3964 2389.36 3964 c
-2378.96 3964 2372 3969.1 2372 3976.44 c
-2372 3979.48 2373.32 3982.2 2376.24 3985.24 c
-2378.32 3987.32 2383.12 3990.2 2384.4 3990.04 c
-h
-2406.8 4060.08 m
-2410.96 4060.08 2414 4056.19 2414 4050.52 c
-2414 4045.08 2412.08 4037.4 2409.36 4031.48 c
-2406 4024.12 2401.84 4020 2396.88 4020 c
-2392.56 4020 2390 4023.52 2390 4029.88 c
-2390 4036.28 2392.79 4046.04 2396.24 4052.12 c
-2399.28 4057.4 2402.64 4060.08 2406.8 4060.08 c
-h
-2446 3991 m
-f*
-1 i
-1 g
-4396.55 3387.35 m
-4476.95 3387.35 l
-4476.95 3233.75 l
-4643.75 3233.75 l
-4643.75 3387.35 l
-4726.55 3387.35 l
-4559.75 3538.55 l
-f*
-0 g
-4396.55 3387.35 m
-4476.95 3387.35 l
-4476.95 3233.75 l
-4643.75 3233.75 l
-4643.75 3387.35 l
-4726.55 3387.35 l
-4559.75 3538.55 l
-4396.55 3387.35 l
-4420.55 3396.95 l
-4559.75 3524.15 l
-4700.15 3396.95 l
-4634.15 3396.95 l
-4634.15 3243.35 l
-4487.75 3243.35 l
-4487.75 3396.95 l
-4420.55 3396.95 l
-4396.55 3387.35 l
-f*
-0.2 i
-4135.88 3119 m
-4135.88 3114 l
-4148.3 3113.29 4152 3110.45 4152 3101.4 c
-4152 3014.28 l
-4152 3005.1 4149.25 3002.94 4135.88 3001.5 c
-4135.88 2997 l
-4193.84 2997 l
-4224.26 2997 4244 3010.5 4244 3030.84 c
-4244 3039.12 4240.73 3046.32 4234.7 3051.9 c
-4228.4 3057.48 4222.28 3060 4209.68 3062.7 c
-4230.56 3068.82 4238 3076.2 4238 3089.88 c
-4238 3108.42 4221.55 3119 4191.5 3119 c
-h
-4181 3058.74 m
-4185.92 3058.74 l
-4204.46 3058.74 4213 3049.2 4213 3029.22 c
-4213 3011.76 4205.77 3003 4191.5 3003 c
-4183.58 3003 4181 3005.99 4181 3013.74 c
-h
-4181 3104.46 m
-4181 3110.94 4183.39 3114 4190.24 3114 c
-4202.84 3114 4209 3106.03 4209 3088.62 c
-4209 3069.72 4203.08 3064.68 4181 3064.14 c
-h
-4253.06 2997 m
-f*
-4338.14 3008.52 m
-4336.34 3006.72 l
-4335.8 3006.18 4335.26 3006 4334.36 3006 c
-4331.84 3006 4331 3007.44 4331 3010.5 c
-4331 3057.48 l
-4331 3072.78 4317.16 3082.16 4294.94 3082.16 c
-4274.6 3082.16 4260.92 3072.97 4260.92 3059.46 c
-4260.92 3051.9 4265.24 3047.58 4272.62 3047.58 c
-4279.82 3047.58 4284.86 3051.9 4284.86 3058.02 c
-4284.86 3060.54 4283.96 3062.88 4281.62 3065.76 c
-4280 3067.56 4279.46 3068.64 4279.46 3069.72 c
-4279.46 3073.5 4284.32 3076.16 4290.8 3076.16 c
-4301.42 3076.16 4306 3071.37 4306 3060.54 c
-4306 3047.4 l
-4284.89 3040.92 4276.41 3037.68 4269.56 3033.18 c
-4261.46 3027.78 4258 3021.48 4258 3013.56 c
-4258 3002.58 4266.07 2994.48 4277.3 2994.48 c
-4287.74 2994.48 4296.02 2998.08 4305.92 3007.08 c
-4307.9 2997.9 4311.86 2994.48 4320.68 2994.48 c
-4328.42 2994.48 4334 2997.36 4340.84 3004.74 c
-h
-4306 3015 m
-4301.04 3009.42 4297.37 3007.26 4292.96 3007.26 c
-4287.56 3007.26 4284 3012.12 4284 3019.32 c
-4284 3029.76 4291.57 3037.14 4306 3041.1 c
-h
-4343 2997 m
-f*
-4404.22 3055.68 m
-4404.22 3081.8 l
-4400.24 3081.8 l
-4399.16 3079.08 4398.08 3078.2 4395.74 3078.2 c
-4394.66 3078.2 4393.04 3078.55 4390.16 3079.44 c
-4384.4 3081.42 4380.26 3082.16 4376.12 3082.16 c
-4359.74 3082.16 4348 3070.99 4348 3055.86 c
-4348 3043.98 4355.34 3035.7 4373.42 3027.96 c
-4385.84 3022.56 4391 3018.06 4391 3012.3 c
-4391 3005.28 4385.48 3000.48 4377.2 3000.48 c
-4364.6 3000.48 4356.32 3008.62 4352.54 3024.36 c
-4347.5 3024.36 l
-4347.5 2994.66 l
-4352 2994.66 l
-4353.98 2998.44 4355.06 2999.7 4356.68 2999.7 c
-4357.58 2999.7 4359.02 2999.34 4360.82 2998.62 c
-4366.04 2996.46 4375.22 2994.48 4380.26 2994.48 c
-4396.64 2994.48 4408 3005.64 4408 3021.84 c
-4408 3034.62 4401.15 3042.54 4383.14 3049.92 c
-4370.9 3055.14 4366 3059.64 4366 3065.76 c
-4366 3071.7 4370.98 3076.16 4377.74 3076.16 c
-4382.6 3076.16 4387.28 3074.19 4391.24 3070.44 c
-4395.02 3066.84 4397 3063.42 4399.7 3055.68 c
-h
-4413.02 2997 m
-f*
-4484.36 3019.5 m
-4476.98 3010.68 4471.58 3007.48 4463.84 3007.48 c
-4457 3007.48 4451.6 3010.53 4448 3016.62 c
-4444.58 3022.36 4443.14 3028.45 4442.42 3041 c
-4487.78 3041 l
-4486.7 3055.99 4484 3064.3 4478.42 3071.34 c
-4472.66 3078.36 4464.2 3082.16 4454.12 3082.16 c
-4431.62 3082.16 4416.5 3064.33 4416.5 3038.04 c
-4416.5 3011.76 4431.26 2994.48 4453.58 2994.48 c
-4468.16 2994.48 4476.98 3000.06 4488.68 3016.98 c
-h
-4441.52 3048 m
-4442.06 3069.42 4445.3 3076.16 4454.12 3076.16 c
-4459.34 3076.16 4462.58 3073.42 4464.02 3068.1 c
-4464.92 3064.68 4465.28 3059.64 4465.64 3050.46 c
-4465.64 3048 l
-h
-4491.92 2997 m
-f*
-4538 2997 m
-f*
-4641.94 3119 m
-4539.88 3119 l
-4539.88 3114 l
-4552.3 3113.29 4556 3110.63 4556 3101.4 c
-4556 3014.28 l
-4556 3004.92 4553.44 3002.94 4539.88 3001.5 c
-4539.88 2997 l
-4604.68 2997 l
-4604.68 3002 l
-4588.12 3002.69 4585 3004.77 4585 3014.28 c
-4585 3056.22 l
-4603.28 3055.86 4609.91 3049.2 4612.42 3028.32 c
-4616.92 3028.32 l
-4616.92 3089.16 l
-4612.42 3089.16 l
-4609.19 3068.64 4602.92 3062.34 4585 3062.34 c
-4585 3104.1 l
-4585 3110.76 4587.32 3113 4596.4 3113 c
-4613.14 3113 4623.58 3109.8 4629.16 3103.2 c
-4633.12 3098.7 4635.1 3093.84 4637.62 3082.5 c
-4641.94 3082.5 l
-h
-4646.98 2997 m
-f*
-4686.28 3080 m
-4652.22 3080 l
-4652.22 3075.66 l
-4659.96 3074.58 4662 3072.24 4662 3065.04 c
-4662 3012.12 l
-4662 3004.74 4660.19 3002.76 4652.22 3001.32 c
-4652.22 2997 l
-4700.1 2997 l
-4700.1 3001.32 l
-4689.12 3002.04 4687 3004.38 4687 3015.54 c
-4687 3049.56 l
-4687 3058.92 4692.02 3066.66 4697.94 3066.66 c
-4699.38 3066.66 4701 3065.4 4702.98 3062.52 c
-4706.4 3057.66 4709.1 3056.04 4713.78 3056.04 c
-4720.44 3056.04 4725.12 3061.08 4725.12 3067.92 c
-4725.12 3076.2 4719 3082.16 4710.54 3082.16 c
-4701.55 3082.16 4694.73 3077.47 4686.28 3065.22 c
-h
-4726.92 2997 m
-f*
-4813.14 3008.52 m
-4811.34 3006.72 l
-4810.8 3006.18 4810.26 3006 4809.36 3006 c
-4806.84 3006 4806 3007.44 4806 3010.5 c
-4806 3057.48 l
-4806 3072.78 4792.16 3082.16 4769.94 3082.16 c
-4749.6 3082.16 4735.92 3072.97 4735.92 3059.46 c
-4735.92 3051.9 4740.24 3047.58 4747.62 3047.58 c
-4754.82 3047.58 4759.86 3051.9 4759.86 3058.02 c
-4759.86 3060.54 4758.96 3062.88 4756.62 3065.76 c
-4755 3067.56 4754.46 3068.64 4754.46 3069.72 c
-4754.46 3073.5 4759.32 3076.16 4765.8 3076.16 c
-4776.42 3076.16 4781 3071.37 4781 3060.54 c
-4781 3047.4 l
-4759.89 3040.92 4751.41 3037.68 4744.56 3033.18 c
-4736.46 3027.78 4733 3021.48 4733 3013.56 c
-4733 3002.58 4741.07 2994.48 4752.3 2994.48 c
-4762.74 2994.48 4771.02 2998.08 4780.92 3007.08 c
-4782.9 2997.9 4786.86 2994.48 4795.68 2994.48 c
-4803.42 2994.48 4809 2997.36 4815.84 3004.74 c
-h
-4781 3015 m
-4776.04 3009.42 4772.37 3007.26 4767.96 3007.26 c
-4762.56 3007.26 4759 3012.12 4759 3019.32 c
-4759 3029.76 4766.57 3037.14 4781 3041.1 c
-h
-4818 2997 m
-f*
-4855.46 3080 m
-4820.73 3080 l
-4820.73 3075.66 l
-4828.65 3074.58 4831 3072.42 4831 3065.04 c
-4831 3012.12 l
-4831 3004.74 4828.95 3002.76 4820.73 3001.32 c
-4820.73 2997 l
-4863.93 2997 l
-4863.93 3001.32 l
-4857.63 3002.22 4856 3004.74 4856 3011.58 c
-4856 3059.64 l
-4856 3060.54 4858.51 3063.78 4860.51 3065.76 c
-4864.29 3068.64 4867.53 3070.16 4870.77 3070.16 c
-4877.79 3070.16 4881 3066 4881 3055.14 c
-4881 3011.58 l
-4881 3004.2 4878.9 3001.86 4871.85 3001.32 c
-4871.85 2997 l
-4913.97 2997 l
-4913.97 3001.32 l
-4907.67 3002.04 4906 3004.74 4906 3011.58 c
-4906 3059.64 l
-4906 3060.54 4908.43 3063.6 4910.37 3065.58 c
-4914.33 3068.64 4917.57 3070.16 4920.81 3070.16 c
-4927.65 3070.16 4930 3065.82 4930 3055.14 c
-4930 3011.58 l
-4930 3004.02 4928.1 3001.86 4921.53 3001.32 c
-4921.53 2997 l
-4964.37 2997 l
-4964.37 3001 l
-4957.35 3001.37 4955 3003.6 4955 3011.58 c
-4955 3056.76 l
-4955 3072.24 4945.6 3082.16 4931.07 3082.16 c
-4920.81 3082.16 4913.97 3078.01 4904.61 3066.48 c
-4899.21 3077.82 4892.91 3082.16 4881.57 3082.16 c
-4870.2 3082.16 4862.21 3077.29 4855.46 3066.48 c
-h
-4967.94 2997 m
-f*
-5040.36 3019.5 m
-5032.98 3010.68 5027.58 3007.48 5019.84 3007.48 c
-5013 3007.48 5007.6 3010.53 5004 3016.62 c
-5000.58 3022.36 4999.14 3028.45 4998.42 3041 c
-5043.78 3041 l
-5042.7 3055.99 5040 3064.3 5034.42 3071.34 c
-5028.66 3078.36 5020.2 3082.16 5010.12 3082.16 c
-4987.62 3082.16 4972.5 3064.33 4972.5 3038.04 c
-4972.5 3011.76 4987.26 2994.48 5009.58 2994.48 c
-5024.16 2994.48 5032.98 3000.06 5044.68 3016.98 c
-h
-4997.52 3048 m
-4998.06 3069.42 5001.3 3076.16 5010.12 3076.16 c
-5015.34 3076.16 5018.58 3073.42 5020.02 3068.1 c
-5020.92 3064.68 5021.28 3059.64 5021.64 3050.46 c
-5021.64 3048 l
-h
-5047.92 2997 m
-f*
-1 i
-4132.55 2962.55 914.4 15.5999 re
-f
-0.2 i
-2824.26 2676.36 m
-2813.64 2665.2 2807.88 2660.88 2799.06 2657.46 c
-2793.84 2655.3 2787.9 2654.58 2782.86 2654.58 c
-2770.98 2654.58 2759.64 2660.74 2754.42 2669.88 c
-2749.2 2679.42 2747 2692.2 2747 2710.38 c
-2747 2747.64 2758.23 2767.7 2779.8 2767.7 c
-2788.26 2767.7 2796 2764.38 2803.74 2757.36 c
-2811.48 2750.52 2815.62 2744.4 2821.92 2730.72 c
-2826.42 2730.72 l
-2826.42 2773.16 l
-2821.56 2773.16 l
-2818.86 2766.43 2817.06 2764.56 2813.64 2764.56 c
-2811.84 2764.56 2809.5 2765.28 2805.36 2767.08 c
-2794.92 2771.4 2786.1 2773.7 2777.46 2773.7 c
-2741.64 2773.7 2715 2745.84 2715 2708.76 c
-2715 2671.68 2741.21 2645.58 2778.54 2645.58 c
-2799.24 2645.58 2811.48 2651.88 2829.66 2671.86 c
-h
-2835.96 2649 m
-f*
-2899.18 2646.66 m
-2906.78 2649.36 2911.02 2650.08 2922.5 2651.34 c
-2933.66 2652.6 l
-2933.66 2657 l
-2925.74 2657.35 2924 2659.63 2924 2667.18 c
-2924 2732 l
-2887.4 2732 l
-2887.4 2727.66 l
-2896.4 2726.94 2899 2724.78 2899 2717.04 c
-2899 2666.1 l
-2892.88 2660.16 2889.18 2658.48 2883.8 2658.48 c
-2876.42 2658.48 2874 2662 2874 2670.96 c
-2874 2732 l
-2839.88 2732 l
-2839.88 2727.66 l
-2847.26 2726.22 2849 2724.6 2849 2717.04 c
-2849 2671.68 l
-2849 2655.84 2857.89 2646.48 2872.64 2646.48 c
-2882.16 2646.48 2888.56 2649.36 2899.18 2658.36 c
-h
-2937.08 2649 m
-f*
-2975.28 2732 m
-2941.22 2732 l
-2941.22 2727.66 l
-2948.96 2726.58 2951 2724.24 2951 2717.04 c
-2951 2664.12 l
-2951 2656.74 2949.19 2654.76 2941.22 2653.32 c
-2941.22 2649 l
-2989.1 2649 l
-2989.1 2653.32 l
-2978.12 2654.04 2976 2656.38 2976 2667.54 c
-2976 2701.56 l
-2976 2710.92 2981.02 2718.66 2986.94 2718.66 c
-2988.38 2718.66 2990 2717.4 2991.98 2714.52 c
-2995.4 2709.66 2998.1 2708.04 3002.78 2708.04 c
-3009.44 2708.04 3014.12 2713.08 3014.12 2719.92 c
-3014.12 2728.2 3008 2734.16 2999.54 2734.16 c
-2990.55 2734.16 2983.73 2729.47 2975.28 2717.22 c
-h
-3015.92 2649 m
-f*
-3056.28 2732 m
-3022.22 2732 l
-3022.22 2727.66 l
-3029.96 2726.58 3032 2724.24 3032 2717.04 c
-3032 2664.12 l
-3032 2656.74 3030.19 2654.76 3022.22 2653.32 c
-3022.22 2649 l
-3070.1 2649 l
-3070.1 2653.32 l
-3059.12 2654.04 3057 2656.38 3057 2667.54 c
-3057 2701.56 l
-3057 2710.92 3062.02 2718.66 3067.94 2718.66 c
-3069.38 2718.66 3071 2717.4 3072.98 2714.52 c
-3076.4 2709.66 3079.1 2708.04 3083.78 2708.04 c
-3090.44 2708.04 3095.12 2713.08 3095.12 2719.92 c
-3095.12 2728.2 3089 2734.16 3080.54 2734.16 c
-3071.55 2734.16 3064.73 2729.47 3056.28 2717.22 c
-h
-3096.92 2649 m
-f*
-3168.36 2671.5 m
-3160.98 2662.68 3155.58 2659.48 3147.84 2659.48 c
-3141 2659.48 3135.6 2662.53 3132 2668.62 c
-3128.58 2674.36 3127.14 2680.45 3126.42 2693 c
-3171.78 2693 l
-3170.7 2707.99 3168 2716.3 3162.42 2723.34 c
-3156.66 2730.36 3148.2 2734.16 3138.12 2734.16 c
-3115.62 2734.16 3100.5 2716.33 3100.5 2690.04 c
-3100.5 2663.76 3115.26 2646.48 3137.58 2646.48 c
-3152.16 2646.48 3160.98 2652.06 3172.68 2668.98 c
-h
-3125.52 2700 m
-3126.06 2721.42 3129.3 2728.16 3138.12 2728.16 c
-3143.34 2728.16 3146.58 2725.42 3148.02 2720.1 c
-3148.92 2716.68 3149.28 2711.64 3149.64 2702.46 c
-3149.64 2700 l
-h
-3175.92 2649 m
-f*
-3213.82 2732 m
-3179.78 2732 l
-3179.78 2727.66 l
-3187.7 2726.4 3189 2724.6 3189 2717.04 c
-3189 2664.12 l
-3189 2656.56 3187.61 2654.94 3179.78 2653.32 c
-3179.78 2649 l
-3223.16 2649 l
-3223.16 2653.32 l
-3216.5 2654.22 3214 2656.92 3214 2663.58 c
-3214 2711.64 l
-3214 2712.36 3215.4 2714.16 3217.4 2715.96 c
-3221.36 2719.92 3225.68 2722.16 3230 2722.16 c
-3236.12 2722.16 3239 2717.27 3239 2707.14 c
-3239 2663.58 l
-3239 2656.92 3236.71 2654.04 3230.72 2653.32 c
-3230.72 2649 l
-3273.02 2649 l
-3273.02 2653.32 l
-3266 2653.86 3264 2656.02 3264 2663.58 c
-3264 2708.76 l
-3264 2724.24 3254.54 2734.16 3239.9 2734.16 c
-3228.96 2734.16 3220.57 2729.11 3213.82 2718.48 c
-h
-3276.08 2649 m
-f*
-3330.9 2732 m
-3314 2732 l
-3314 2762.4 l
-3309.48 2762.4 l
-3298.5 2746.92 3291.3 2738.82 3279.6 2728.92 c
-3279.6 2724 l
-3289 2724 l
-3289 2665.74 l
-3289 2654.04 3296.73 2646.84 3309.12 2646.84 c
-3321.18 2646.84 3328.38 2652.24 3335.76 2667 c
-3331.26 2668.98 l
-3327.66 2662.14 3324.78 2659.84 3321 2659.84 c
-3315.96 2659.84 3314 2662.83 3314 2669.88 c
-3314 2724 l
-3330.9 2724 l
-h
-3335.94 2649 m
-f*
-3381 2649 m
-f*
-3485.94 2771 m
-3383.88 2771 l
-3383.88 2766 l
-3396.3 2765.29 3400 2762.63 3400 2753.4 c
-3400 2666.28 l
-3400 2656.92 3397.44 2654.94 3383.88 2653.5 c
-3383.88 2649 l
-3448.68 2649 l
-3448.68 2654 l
-3432.12 2654.69 3429 2656.77 3429 2666.28 c
-3429 2708.22 l
-3447.28 2707.86 3453.91 2701.2 3456.42 2680.32 c
-3460.92 2680.32 l
-3460.92 2741.16 l
-3456.42 2741.16 l
-3453.19 2720.64 3446.92 2714.34 3429 2714.34 c
-3429 2756.1 l
-3429 2762.76 3431.32 2765 3440.4 2765 c
-3457.14 2765 3467.58 2761.8 3473.16 2755.2 c
-3477.12 2750.7 3479.1 2745.84 3481.62 2734.5 c
-3485.94 2734.5 l
-h
-3490.98 2649 m
-f*
-3530.28 2732 m
-3496.22 2732 l
-3496.22 2727.66 l
-3503.96 2726.58 3506 2724.24 3506 2717.04 c
-3506 2664.12 l
-3506 2656.74 3504.19 2654.76 3496.22 2653.32 c
-3496.22 2649 l
-3544.1 2649 l
-3544.1 2653.32 l
-3533.12 2654.04 3531 2656.38 3531 2667.54 c
-3531 2701.56 l
-3531 2710.92 3536.02 2718.66 3541.94 2718.66 c
-3543.38 2718.66 3545 2717.4 3546.98 2714.52 c
-3550.4 2709.66 3553.1 2708.04 3557.78 2708.04 c
-3564.44 2708.04 3569.12 2713.08 3569.12 2719.92 c
-3569.12 2728.2 3563 2734.16 3554.54 2734.16 c
-3545.55 2734.16 3538.73 2729.47 3530.28 2717.22 c
-h
-3570.92 2649 m
-f*
-3656.14 2660.52 m
-3654.34 2658.72 l
-3653.8 2658.18 3653.26 2658 3652.36 2658 c
-3649.84 2658 3649 2659.44 3649 2662.5 c
-3649 2709.48 l
-3649 2724.78 3635.16 2734.16 3612.94 2734.16 c
-3592.6 2734.16 3578.92 2724.97 3578.92 2711.46 c
-3578.92 2703.9 3583.24 2699.58 3590.62 2699.58 c
-3597.82 2699.58 3602.86 2703.9 3602.86 2710.02 c
-3602.86 2712.54 3601.96 2714.88 3599.62 2717.76 c
-3598 2719.56 3597.46 2720.64 3597.46 2721.72 c
-3597.46 2725.5 3602.32 2728.16 3608.8 2728.16 c
-3619.42 2728.16 3624 2723.37 3624 2712.54 c
-3624 2699.4 l
-3602.89 2692.92 3594.41 2689.68 3587.56 2685.18 c
-3579.46 2679.78 3576 2673.48 3576 2665.56 c
-3576 2654.58 3584.07 2646.48 3595.3 2646.48 c
-3605.74 2646.48 3614.02 2650.08 3623.92 2659.08 c
-3625.9 2649.9 3629.86 2646.48 3638.68 2646.48 c
-3646.42 2646.48 3652 2649.36 3658.84 2656.74 c
-h
-3624 2667 m
-3619.04 2661.42 3615.37 2659.26 3610.96 2659.26 c
-3605.56 2659.26 3602 2664.12 3602 2671.32 c
-3602 2681.76 3609.57 2689.14 3624 2693.1 c
-h
-3661 2649 m
-f*
-3698.46 2732 m
-3663.73 2732 l
-3663.73 2727.66 l
-3671.65 2726.58 3674 2724.42 3674 2717.04 c
-3674 2664.12 l
-3674 2656.74 3671.95 2654.76 3663.73 2653.32 c
-3663.73 2649 l
-3706.93 2649 l
-3706.93 2653.32 l
-3700.63 2654.22 3699 2656.74 3699 2663.58 c
-3699 2711.64 l
-3699 2712.54 3701.51 2715.78 3703.51 2717.76 c
-3707.29 2720.64 3710.53 2722.16 3713.77 2722.16 c
-3720.79 2722.16 3724 2718 3724 2707.14 c
-3724 2663.58 l
-3724 2656.2 3721.9 2653.86 3714.85 2653.32 c
-3714.85 2649 l
-3756.97 2649 l
-3756.97 2653.32 l
-3750.67 2654.04 3749 2656.74 3749 2663.58 c
-3749 2711.64 l
-3749 2712.54 3751.43 2715.6 3753.37 2717.58 c
-3757.33 2720.64 3760.57 2722.16 3763.81 2722.16 c
-3770.65 2722.16 3773 2717.82 3773 2707.14 c
-3773 2663.58 l
-3773 2656.02 3771.1 2653.86 3764.53 2653.32 c
-3764.53 2649 l
-3807.37 2649 l
-3807.37 2653 l
-3800.35 2653.37 3798 2655.6 3798 2663.58 c
-3798 2708.76 l
-3798 2724.24 3788.6 2734.16 3774.07 2734.16 c
-3763.81 2734.16 3756.97 2730.01 3747.61 2718.48 c
-3742.21 2729.82 3735.91 2734.16 3724.57 2734.16 c
-3713.2 2734.16 3705.21 2729.29 3698.46 2718.48 c
-h
-3810.94 2649 m
-f*
-3883.36 2671.5 m
-3875.98 2662.68 3870.58 2659.48 3862.84 2659.48 c
-3856 2659.48 3850.6 2662.53 3847 2668.62 c
-3843.58 2674.36 3842.14 2680.45 3841.42 2693 c
-3886.78 2693 l
-3885.7 2707.99 3883 2716.3 3877.42 2723.34 c
-3871.66 2730.36 3863.2 2734.16 3853.12 2734.16 c
-3830.62 2734.16 3815.5 2716.33 3815.5 2690.04 c
-3815.5 2663.76 3830.26 2646.48 3852.58 2646.48 c
-3867.16 2646.48 3875.98 2652.06 3887.68 2668.98 c
-h
-3840.52 2700 m
-3841.06 2721.42 3844.3 2728.16 3853.12 2728.16 c
-3858.34 2728.16 3861.58 2725.42 3863.02 2720.1 c
-3863.92 2716.68 3864.28 2711.64 3864.64 2702.46 c
-3864.64 2700 l
-h
-3890.92 2649 m
-f*
-1 i
-2705.75 2614.55 1184.4 15.5999 re
-f
-1 g
-3311.75 2840.15 m
-3478.55 2993.75 l
-3395.75 2993.75 l
-3395.75 3144.95 l
-3230.15 3144.95 l
-3230.15 2993.75 l
-3148.55 2993.75 l
-f*
-0 g
-3311.75 2840.15 m
-3478.55 2993.75 l
-3395.75 2993.75 l
-3395.75 3144.95 l
-3230.15 3144.95 l
-3230.15 2993.75 l
-3148.55 2993.75 l
-3311.75 2840.15 l
-3311.75 2853.35 l
-3173.75 2982.95 l
-3239.75 2982.95 l
-3239.75 3134.15 l
-3386.15 3134.15 l
-3386.15 2982.95 l
-3453.35 2982.95 l
-3311.75 2853.35 l
-3311.75 2840.15 l
-f*
-0.201248 i
-1359.33 3052 m
-1245.22 3052 l
-1245.22 3047 l
-1259.11 3046.2 1263 3043.18 1263 3032.72 c
-1263 2935.32 l
-1263 2924.85 1260.17 2922.64 1245.22 2921.03 c
-1245.22 2916 l
-1317.67 2916 l
-1317.67 2921 l
-1299.15 2921.81 1296 2924.23 1296 2935.32 c
-1296 2982.21 l
-1316.22 2981.81 1323.55 2974.36 1326.32 2951.02 c
-1331.35 2951.02 l
-1331.35 3019.04 l
-1326.32 3019.04 l
-1322.76 2996.1 1315.82 2989.05 1296 2989.05 c
-1296 3035.74 l
-1296 3043.19 1298.52 3045 1308.41 3045 c
-1327.13 3045 1338.8 3041.64 1345.04 3034.74 c
-1349.47 3029.71 1351.68 3024.27 1354.5 3011.59 c
-1359.33 3011.59 l
-h
-1364.96 2916 m
-f*
-1409.19 3009 m
-1370.84 3009 l
-1370.84 3003.95 l
-1379.49 3002.74 1382 3000.12 1382 2992.07 c
-1382 2932.9 l
-1382 2924.65 1379.93 2922.44 1370.84 2920.83 c
-1370.84 2916 l
-1424.37 2916 l
-1424.37 2920.83 l
-1412.09 2921.63 1410 2924.25 1410 2936.73 c
-1410 2974.76 l
-1410 2985.23 1415.49 2993.88 1421.95 2993.88 c
-1423.56 2993.88 1425.37 2992.47 1427.59 2989.25 c
-1431.41 2983.82 1434.43 2982.01 1439.66 2982.01 c
-1447.11 2982.01 1452.34 2987.64 1452.34 2995.29 c
-1452.34 3004.55 1445.5 3011.41 1436.04 3011.41 c
-1426.1 3011.41 1418.54 3006.12 1409.19 2992.27 c
-h
-1454.35 2916 m
-f*
-1549.19 2928.88 m
-1547.18 2926.87 l
-1546.57 2926.26 1545.97 2926.06 1544.96 2926.06 c
-1542.15 2926.06 1541 2927.67 1541 2931.09 c
-1541 2983.62 l
-1541 3000.73 1525.6 3011.42 1500.89 3011.42 c
-1478.15 3011.42 1462.85 3001.06 1462.85 2985.83 c
-1462.85 2977.38 1467.69 2972.55 1475.94 2972.55 c
-1483.99 2972.55 1489.62 2977.38 1489.62 2984.22 c
-1489.62 2987.04 1488.61 2989.66 1486 2992.88 c
-1484.19 2994.89 1483.58 2996.1 1483.58 2997.3 c
-1483.58 3001.53 1489.02 3004.42 1496.26 3004.42 c
-1508.14 3004.42 1513.86 2999.08 1513.86 2987.04 c
-1513.86 2972.35 l
-1489.91 2965.1 1480.29 2961.48 1472.51 2956.45 c
-1463.46 2950.41 1459 2943.37 1459 2934.52 c
-1459 2922.24 1468.27 2913.18 1481.17 2913.18 c
-1492.84 2913.18 1502.1 2917.21 1513.17 2927.27 c
-1515.38 2917.01 1519.81 2913.18 1529.67 2913.18 c
-1538.32 2913.18 1544.56 2916.4 1552.21 2924.65 c
-h
-1513 2936.13 m
-1507.55 2929.89 1503.52 2927.47 1498.68 2927.47 c
-1492.64 2927.47 1488 2932.91 1488 2940.96 c
-1488 2952.63 1496.61 2960.88 1513 2965.31 c
-h
-1554.62 2916 m
-f*
-1596.4 3009 m
-1557.7 3009 l
-1557.7 3003.95 l
-1566.55 3002.74 1569 3000.32 1569 2992.07 c
-1569 2932.9 l
-1569 2924.65 1566.74 2922.44 1557.7 2920.83 c
-1557.7 2916 l
-1606 2916 l
-1606 2920.83 l
-1598.95 2921.84 1597 2924.65 1597 2932.3 c
-1597 2986.03 l
-1597 2987.04 1599.87 2990.66 1602.18 2992.88 c
-1606.4 2996.1 1610.02 2998.42 1613.65 2998.42 c
-1621.5 2998.42 1625 2993.59 1625 2981 c
-1625 2932.3 l
-1625 2924.05 1622.68 2921.43 1614.85 2920.83 c
-1614.85 2916 l
-1661.95 2916 l
-1661.95 2920.83 l
-1654.9 2921.64 1653 2924.65 1653 2932.3 c
-1653 2986.03 l
-1653 2987.04 1655.73 2990.46 1657.92 2992.68 c
-1662.35 2996.1 1665.97 2998.42 1669.59 2998.42 c
-1677.24 2998.42 1680 2993.38 1680 2981 c
-1680 2932.3 l
-1680 2923.85 1677.85 2921.43 1670.4 2920.83 c
-1670.4 2916 l
-1718.3 2916 l
-1718.3 2921 l
-1710.45 2921.4 1708 2923.78 1708 2932.3 c
-1708 2982.81 l
-1708 3000.12 1697.43 3011.42 1681.07 3011.42 c
-1669.59 3011.42 1661.95 3006.73 1651.48 2993.68 c
-1645.44 3006.36 1638.4 3011.42 1625.72 3011.42 c
-1612.95 3011.42 1603.98 3005.91 1596.4 2993.68 c
-h
-1721.64 2916 m
-f*
-1799.9 2941.16 m
-1791.65 2931.29 1785.61 2927.18 1776.96 2927.18 c
-1769.31 2927.18 1763.27 2930.77 1759.25 2937.94 c
-1755.43 2944.54 1753.82 2951.56 1753.01 2966 c
-1803.73 2966 l
-1802.52 2982.36 1799.5 2991.43 1793.26 2999.12 c
-1786.82 3006.96 1777.36 3011.42 1766.09 3011.42 c
-1740.94 3011.42 1724.03 2991.4 1724.03 2961.88 c
-1724.03 2932.5 1740.53 2913.18 1765.49 2913.18 c
-1781.79 2913.18 1791.65 2919.42 1804.73 2938.34 c
-h
-1752 2973 m
-1752.61 2996.96 1756.23 3004.42 1766.09 3004.42 c
-1771.93 3004.42 1775.55 3001.38 1777.16 2995.49 c
-1778.17 2991.67 1778.57 2986.03 1778.97 2975.77 c
-1778.97 2973 l
-h
-1808.35 2916 m
-f*
-1905.16 3011.59 m
-1905.16 3055.22 l
-1899.37 3055.22 l
-1897.96 3049.82 1896.55 3048.42 1892.93 3048.42 c
-1891.12 3048.42 1888.7 3049.03 1884.47 3050.43 c
-1875.22 3053.86 1868.78 3055.02 1860.93 3055.02 c
-1833.56 3055.02 1817 3039.54 1817 3014.01 c
-1817 3008.98 1817.75 3004.75 1819.07 3000.73 c
-1823.29 2990.06 1834.16 2980.6 1851.27 2972.35 c
-1864.75 2965.91 l
-1882.46 2957.46 1887 2952.22 1887 2941.56 c
-1887 2927.67 1877.25 2919.18 1861.94 2919.18 c
-1850.26 2919.18 1840.6 2923.89 1832.96 2933.31 c
-1827.12 2940.75 1824.3 2947.6 1820.88 2961.88 c
-1815.04 2961.88 l
-1815.04 2912.18 l
-1820.88 2912.18 l
-1822.09 2917.41 1823.7 2919.02 1826.92 2919.02 c
-1828.53 2919.02 1830.74 2918.42 1835.17 2917.01 c
-1845.03 2913.59 1852.48 2912.18 1861.33 2912.18 c
-1891.12 2912.18 1911 2929.28 1911 2954.64 c
-1911 2969.73 1902.04 2984.83 1889.1 2991.27 c
-1859.52 3005.96 l
-1843.22 3014.01 1839 3018.84 1839 3028.7 c
-1839 3041.18 1847.37 3048.02 1860.93 3048.02 c
-1869.99 3048.02 1878.44 3044.47 1885.68 3037.55 c
-1892.53 3030.51 1895.75 3024.67 1899.77 3011.59 c
-h
-1919.89 2916 m
-f*
-2000.9 2941.16 m
-1992.65 2931.29 1986.61 2927.18 1977.96 2927.18 c
-1970.31 2927.18 1964.27 2930.77 1960.25 2937.94 c
-1956.43 2944.54 1954.82 2951.56 1954.01 2966 c
-2004.73 2966 l
-2003.52 2982.36 2000.5 2991.43 1994.26 2999.12 c
-1987.82 3006.96 1978.36 3011.42 1967.09 3011.42 c
-1941.94 3011.42 1925.03 2991.4 1925.03 2961.88 c
-1925.03 2932.5 1941.53 2913.18 1966.49 2913.18 c
-1982.79 2913.18 1992.65 2919.42 2005.73 2938.34 c
-h
-1953 2973 m
-1953.61 2996.96 1957.23 3004.42 1967.09 3004.42 c
-1972.93 3004.42 1976.55 3001.38 1978.16 2995.49 c
-1979.17 2991.67 1979.57 2986.03 1979.97 2975.77 c
-1979.97 2973 l
-h
-2009.35 2916 m
-f*
-2070.38 3009 m
-2051 3009 l
-2051 3042.79 l
-2046.43 3042.79 l
-2034.16 3025.48 2026.11 3016.42 2013.02 3005.35 c
-2013.02 3000 l
-2023 3000 l
-2023 2934.72 l
-2023 2921.64 2031.84 2913.59 2046.03 2913.59 c
-2059.51 2913.59 2067.56 2919.62 2075.81 2936.12 c
-2070.78 2938.34 l
-2066.76 2930.69 2063.54 2927.59 2059.31 2927.59 c
-2053.68 2927.59 2051 2931.09 2051 2939.34 c
-2051 3000 l
-2070.38 3000 l
-h
-2076.02 2916 m
-f*
-1 i
-0.564706 g
-5033.75 4836.95 m
-4866.95 4894.55 l
-4985.75 4983.35 l
-4796.15 4996.55 l
-4848.95 5105.75 l
-4666.55 5074.55 l
-4644.95 5187.35 l
-4496.15 5116.55 l
-4404.95 5216.15 l
-4311.35 5116.55 l
-4162.55 5187.35 l
-4140.95 5074.55 l
-3957.35 5105.75 l
-4011.35 4996.55 l
-3820.55 4983.35 l
-3939.35 4894.55 l
-3773.75 4836.95 l
-3939.35 4781.75 l
-3820.55 4692.95 l
-4011.35 4680.95 l
-3957.35 4570.55 l
-4140.95 4602.95 l
-4162.55 4490.15 l
-4311.35 4560.95 l
-4404.95 4461.35 l
-4496.15 4560.95 l
-4644.95 4490.15 l
-4666.55 4602.95 l
-4848.95 4570.55 l
-4796.15 4680.95 l
-4985.75 4692.95 l
-4866.95 4781.75 l
-f*
-1 g
-4973.75 4896.95 m
-4806.95 4954.55 l
-4925.75 5043.35 l
-4736.15 5056.55 l
-4788.95 5165.75 l
-4606.55 5134.55 l
-4584.95 5247.35 l
-4436.15 5176.55 l
-4344.95 5276.15 l
-4251.35 5176.55 l
-4102.55 5247.35 l
-4080.95 5134.55 l
-3897.35 5165.75 l
-3951.35 5056.55 l
-3760.55 5043.35 l
-3879.35 4954.55 l
-3713.75 4896.95 l
-3879.35 4841.75 l
-3760.55 4752.95 l
-3951.35 4740.95 l
-3897.35 4630.55 l
-4080.95 4662.95 l
-4102.55 4550.15 l
-4251.35 4620.95 l
-4344.95 4521.35 l
-4436.15 4620.95 l
-4584.95 4550.15 l
-4606.55 4662.95 l
-4788.95 4630.55 l
-4736.15 4740.95 l
-4925.75 4752.95 l
-4806.95 4841.75 l
-f*
-0 g
-4973.75 4896.95 m
-4806.95 4954.55 l
-4925.75 5043.35 l
-4736.15 5056.55 l
-4788.95 5165.75 l
-4606.55 5134.55 l
-4584.95 5247.35 l
-4436.15 5176.55 l
-4344.95 5276.15 l
-4251.35 5176.55 l
-4102.55 5247.35 l
-4080.95 5134.55 l
-3897.35 5165.75 l
-3951.35 5056.55 l
-3760.55 5043.35 l
-3879.35 4954.55 l
-3713.75 4896.95 l
-3879.35 4841.75 l
-3760.55 4752.95 l
-3951.35 4740.95 l
-3897.35 4630.55 l
-4080.95 4662.95 l
-4102.55 4550.15 l
-4251.35 4620.95 l
-4344.95 4521.35 l
-4436.15 4620.95 l
-4584.95 4550.15 l
-4606.55 4662.95 l
-4788.95 4630.55 l
-4736.15 4740.95 l
-4925.75 4752.95 l
-4806.95 4841.75 l
-4973.75 4896.95 l
-4850.15 4898.15 l
-4721.75 4856.15 l
-4816.55 4786.55 l
-4674.95 4776.95 l
-4718.15 4683.35 l
-4575.35 4709.75 l
-4554.95 4608.95 l
-4426.55 4670.15 l
-4344.95 4580.15 l
-4259.75 4670.15 l
-4132.55 4608.95 l
-4113.35 4709.75 l
-3966.95 4683.35 l
-4013.75 4776.95 l
-3870.95 4786.55 l
-3964.55 4856.15 l
-3837.35 4898.15 l
-3963.35 4942.55 l
-3870.95 5010.95 l
-4013.75 5019.35 l
-3966.95 5112.95 l
-4113.35 5088.95 l
-4132.55 5188.55 l
-4259.75 5127.35 l
-4344.95 5217.35 l
-4426.55 5127.35 l
-4554.95 5188.55 l
-4575.35 5088.95 l
-4719.35 5112.95 l
-4674.95 5019.35 l
-4816.55 5010.95 l
-4724.15 4942.55 l
-4850.15 4898.15 l
-4973.75 4896.95 l
-f*
-0.2 i
-4251.96 5065 m
-4220.76 5065 l
-4220.76 5061.04 l
-4229.56 5060.24 4231 5059.28 4234.04 5052.24 c
-4214.84 4986.48 l
-4208.6 4965.52 4207.48 4963.76 4198.68 4962 c
-4198.68 4958 l
-4231.96 4958 l
-4231.96 4962 l
-4222.52 4962.8 4219.16 4965.2 4219.16 4971.44 c
-4219.16 4974.48 4220.12 4979.76 4222.04 4986.48 c
-4237.88 5043.44 l
-4279 4955.6 l
-4283.48 4955.6 l
-4306.36 5036.56 l
-4312.6 5057.68 4313.4 5058.96 4322.68 5061.04 c
-4322.68 5065 l
-4289.24 5065 l
-4289.24 5061.04 l
-4298.68 5060.24 4302.04 5057.68 4302.04 5051.6 c
-4302.04 5048.56 4300.92 5043.12 4299.16 5036.56 c
-4286.36 4990.64 l
-h
-4318.52 4958 m
-f*
-4369.72 4980.72 m
-4362.36 4969.68 4357.72 4965.92 4350.84 4965.92 c
-4344.12 4965.92 4341 4970.48 4341 4979.28 c
-4341 4981.84 4341.19 4983.92 4341.56 4987.12 c
-4358.2 4990.32 4366.04 4993.84 4374.04 5001.2 c
-4379.64 5006.32 4383 5012.24 4383 5018 c
-4383 5026.16 4375.83 5032.08 4365.88 5032.08 c
-4342.68 5032.08 4320 5005.92 4320 4979.44 c
-4320 4965.84 4330.15 4955.92 4343.96 4955.92 c
-4356.28 4955.92 4364.76 4962.16 4374.36 4978 c
-h
-4342.68 4992.24 m
-4348.44 5014.48 4355.8 5027.08 4363.48 5027.08 c
-4366.52 5027.08 4368 5025.18 4368 5021.2 c
-4368 5014.16 4365.27 5007.28 4360.12 5002 c
-4355.8 4997.36 4351.8 4995.12 4342.68 4992.24 c
-h
-4390.04 4958 m
-f*
-4391.56 5023.12 m
-4395.56 5023.12 4396.84 5022.96 4398.12 5021.84 c
-4401.48 5019.28 4403.72 5004.24 4404.2 4982 c
-4404.52 4969.52 l
-4404.52 4968.72 l
-4404.52 4968.56 4404.52 4966.16 4404.36 4963.12 c
-4404.2 4955.92 l
-4408.52 4955.92 l
-4417.64 4969.68 l
-4424.2 4980.72 4430.28 4991.44 4435.72 5001.52 c
-4439.4 4955.92 l
-4443.72 4955.92 l
-4473.32 4987.28 4487 5008.56 4487 5022 c
-4487 5027.28 4482.63 5032.08 4477.48 5032.08 c
-4472.68 5032.08 4468.52 5027.52 4468.52 5022.32 c
-4468.52 5019.92 4469.48 5017.84 4471.88 5014.48 c
-4474.12 5011.44 4475 5009.36 4475 5007.76 c
-4475 5002.96 4470.06 4995.28 4456.04 4978.8 c
-4450.92 5032.08 l
-4446.6 5032.08 l
-4433.16 5008.8 4430.6 5004.14 4421.64 4987.92 c
-4421.16 5007.76 4420.04 5018.16 4416.36 5031.92 c
-4409.8 5030.48 4404.84 5029.68 4391.56 5027.44 c
-h
-4495.72 4958 m
-f*
-4162.08 4855.76 m
-4142.08 4781.52 l
-4139.52 4772.88 4136.48 4770.64 4126.08 4770 c
-4126.08 4766 l
-4176 4766 l
-4176 4770 l
-4166.72 4770.48 4164.48 4771.76 4164.48 4776.88 c
-4164.48 4778.64 4164.8 4780.4 4165.76 4784.08 c
-4165.92 4784.88 l
-4166.08 4785.68 l
-4185.76 4857.52 l
-4188.16 4865.84 4190.56 4868.08 4198.72 4869.04 c
-4198.72 4873 l
-4164.8 4873 l
-4115.2 4796.24 l
-4106.56 4873 l
-4071.2 4873 l
-4071.2 4869 l
-4081.28 4868.52 4082.72 4867.89 4082.72 4863.44 c
-4082.72 4861.2 4082.08 4858.32 4080.96 4854.16 c
-4063.52 4794.48 l
-4057.12 4773.68 4056 4771.92 4047.36 4770 c
-4047.36 4766 l
-4080.48 4766 l
-4080.48 4770 l
-4070.24 4771.28 4067.68 4773.2 4067.68 4779.76 c
-4067.68 4782.48 4068.48 4786.48 4070.72 4794.48 c
-4086.88 4853.52 l
-4097.6 4764.08 l
-4102.08 4764.08 l
-h
-4194.24 4766 m
-f*
-4264.44 4786.32 m
-4257.88 4777.52 4255.48 4774.76 4252.92 4774.76 c
-4251.64 4774.76 4251 4775.86 4251 4777.52 c
-4251 4781.52 4252.44 4788.08 4256.44 4801.2 c
-4267.8 4838.96 l
-4250.04 4837.84 l
-4247.16 4828.4 l
-4245.72 4836.56 4242.2 4840.08 4235.32 4840.08 c
-4215.64 4840.08 4192 4809.27 4192 4784.24 c
-4192 4772.08 4198.74 4763.92 4208.92 4763.92 c
-4218.68 4763.92 4226.04 4769.68 4235.16 4785.04 c
-4233.24 4778.48 4233 4776.56 4233 4774.32 c
-4233 4768.4 4237.76 4763.76 4243.64 4763.76 c
-4251.16 4763.76 4258.52 4770 4267.8 4783.92 c
-h
-4237.56 4833.2 m
-4241.08 4832.88 4243.56 4830 4243.56 4825.68 c
-4243.56 4816.08 4238.24 4798.32 4231.96 4787.28 c
-4227.64 4779.44 4222.84 4774.92 4218.52 4774.92 c
-4214.36 4774.92 4211 4778.75 4211 4783.92 c
-4211 4792.24 4216.42 4808.24 4223.16 4820.08 c
-4227.96 4828.56 4233.24 4833.52 4237.56 4833.2 c
-h
-4275 4766 m
-f*
-4309.56 4839.92 m
-4293.24 4837.36 4287 4836.4 4278.68 4835.44 c
-4278.68 4831 l
-4285.88 4830.69 4287.32 4830.07 4287.32 4827.12 c
-4287.32 4825.52 4286.04 4819.76 4283.8 4811.44 c
-4267.8 4749.36 l
-4264.76 4738.8 4263.48 4737.84 4255.8 4738 c
-4255.8 4733 l
-4295.64 4733 l
-4295.64 4738 l
-4287.64 4738.14 4285.24 4739.16 4285.24 4742.64 c
-4285.24 4744.88 4286.36 4749.68 4289.4 4760.88 c
-4290.52 4764.72 4290.52 4765.04 4291.16 4767.44 c
-4296.76 4764.56 4298.68 4763.92 4302.04 4763.92 c
-4323.8 4763.92 4346.36 4792.88 4346.36 4820.56 c
-4346.36 4832.4 4339.64 4840.08 4329.08 4840.08 c
-4319.96 4840.08 4312.92 4834.92 4303.48 4821.52 c
-h
-4320.12 4828.56 m
-4324.28 4828.24 4326.68 4824.56 4326.36 4819.44 c
-4325.72 4808.88 4320.6 4793.04 4314.84 4782.64 c
-4309.88 4774 4304.76 4768.92 4299.32 4768.92 c
-4295.8 4768.92 4293.08 4771.75 4293.08 4775.28 c
-4293.08 4778 4294.84 4784.56 4299.16 4799.12 c
-4302.68 4810.8 4304.12 4814.8 4306.52 4818.48 c
-4310.52 4824.72 4315.96 4828.88 4320.12 4828.56 c
-h
-4355 4766 m
-f*
-4389.56 4839.92 m
-4373.24 4837.36 4367 4836.4 4358.68 4835.44 c
-4358.68 4831 l
-4365.88 4830.69 4367.32 4830.07 4367.32 4827.12 c
-4367.32 4825.52 4366.04 4819.76 4363.8 4811.44 c
-4347.8 4749.36 l
-4344.76 4738.8 4343.48 4737.84 4335.8 4738 c
-4335.8 4733 l
-4375.64 4733 l
-4375.64 4738 l
-4367.64 4738.14 4365.24 4739.16 4365.24 4742.64 c
-4365.24 4744.88 4366.36 4749.68 4369.4 4760.88 c
-4370.52 4764.72 4370.52 4765.04 4371.16 4767.44 c
-4376.76 4764.56 4378.68 4763.92 4382.04 4763.92 c
-4403.8 4763.92 4426.36 4792.88 4426.36 4820.56 c
-4426.36 4832.4 4419.64 4840.08 4409.08 4840.08 c
-4399.96 4840.08 4392.92 4834.92 4383.48 4821.52 c
-h
-4400.12 4828.56 m
-4404.28 4828.24 4406.68 4824.56 4406.36 4819.44 c
-4405.72 4808.88 4400.6 4793.04 4394.84 4782.64 c
-4389.88 4774 4384.76 4768.92 4379.32 4768.92 c
-4375.8 4768.92 4373.08 4771.75 4373.08 4775.28 c
-4373.08 4778 4374.84 4784.56 4379.16 4799.12 c
-4382.68 4810.8 4384.12 4814.8 4386.52 4818.48 c
-4390.52 4824.72 4395.96 4828.88 4400.12 4828.56 c
-h
-4435 4766 m
-f*
-4469.56 4788.56 m
-4467.32 4785.36 l
-4463.16 4779.12 4459.48 4775.56 4457.08 4775.56 c
-4455.8 4775.56 4455 4776.77 4455 4778.16 c
-4455 4779.6 4455.62 4783.76 4456.12 4786.48 c
-4470.68 4839.92 l
-4462.22 4838 4451.26 4836.4 4439.04 4835.44 c
-4439.04 4831 l
-4440.44 4831 l
-4445.24 4831 4448.48 4829.44 4448.48 4826.48 c
-4448.48 4825.2 4447.71 4822.8 4446.68 4820.08 c
-4437.4 4785.68 l
-4436.12 4781.04 4436 4776.88 4436 4774.64 c
-4436 4768.56 4440.2 4764.56 4446.36 4764.56 c
-4455.96 4764.56 4461.88 4769.36 4473.08 4786.32 c
-h
-4465.88 4875.4 m
-4460.44 4875.4 4456 4870.46 4456 4865.04 c
-4456 4858.8 4460.26 4854.4 4466.04 4854.4 c
-4472.12 4854.4 4477 4858.86 4477 4864.56 c
-4477 4870.48 4472 4875.4 4465.88 4875.4 c
-h
-4479.48 4766 m
-f*
-4553.36 4787.6 m
-4546.96 4777.68 4544.88 4775.56 4542.16 4775.56 c
-4540.88 4775.56 4540 4776.63 4540 4778.16 c
-4540 4779.76 4540.94 4783.12 4543.92 4792.08 c
-4549.68 4809.52 l
-4552.24 4817.04 4554 4824.08 4554 4827.92 c
-4554 4835.76 4549.78 4840.08 4542.16 4840.08 c
-4536.24 4840.08 4530.48 4837.62 4526.16 4833.36 c
-4520.24 4827.76 4517.2 4823.92 4506.48 4808.08 c
-4516.72 4839.76 l
-4506.48 4837.52 4493.68 4835.92 4484.72 4835.6 c
-4484.72 4830.8 l
-4491.44 4830.65 4493.36 4829.92 4493.36 4827.12 c
-4493.36 4825.2 4491.12 4816.72 4486 4798.64 c
-4482.32 4785.68 4481.2 4781.52 4477.04 4766 c
-4496.4 4766 l
-4503.92 4793.68 4509.68 4807.6 4519.6 4820.56 c
-4522.8 4824.88 4527.76 4828.08 4530.64 4828.08 c
-4532.72 4828.08 4535 4826.63 4535 4825.04 c
-4535 4824.56 4534.54 4823.28 4533.84 4821.68 c
-4525.04 4795.12 l
-4522.48 4787.44 4521 4778.32 4521 4774.16 c
-4521 4768.08 4524.84 4764.56 4531.44 4764.56 c
-4541.04 4764.56 4547.6 4770 4556.88 4785.52 c
-h
-4566.96 4766 m
-f*
-4644.48 4835 m
-4626.72 4835 l
-4621.28 4838.58 4616.48 4840.08 4609.12 4840.08 c
-4589.44 4840.08 4573 4827.05 4573 4810.8 c
-4573 4802.64 4577.35 4796.88 4586.4 4793.2 c
-4573.28 4785.84 4571 4783.6 4571 4777.68 c
-4571 4772.56 4573.89 4769.52 4580.96 4767.12 c
-4571.04 4764.72 4567.84 4763.44 4564 4760.4 c
-4561.44 4758.16 4560 4754.32 4560 4750.48 c
-4560 4740.08 4571.56 4734 4589.76 4734 c
-4612.32 4734 4628 4743.72 4628 4757.52 c
-4628 4767.28 4621.6 4772.56 4604.16 4777.52 c
-4595.68 4779.92 l
-4590.56 4781.36 4587 4783.6 4587 4786 c
-4587 4788.56 4589.68 4791.28 4592 4791.28 c
-4592.8 4791.28 4593.92 4791.24 4595.2 4791.12 c
-4596.96 4790.64 4598.24 4790 4600.16 4790 c
-4607.2 4790 4614.4 4792.09 4620.48 4795.92 c
-4629.76 4801.2 4635 4809.36 4635 4818.96 c
-4635 4821.64 4634.59 4823.32 4633.76 4826 c
-4644.48 4826 l
-h
-4586.4 4765.04 m
-4588.32 4764.88 4600.48 4760.72 4604 4759.12 c
-4608.48 4756.88 4611 4754.16 4611 4750 c
-4611 4742.96 4603.8 4739 4591.36 4739 c
-4580.96 4739 4574 4744.1 4574 4751.44 c
-4574 4754.48 4575.32 4757.2 4578.24 4760.24 c
-4580.32 4762.32 4585.12 4765.2 4586.4 4765.04 c
-h
-4608.8 4835.08 m
-4612.96 4835.08 4616 4831.19 4616 4825.52 c
-4616 4820.08 4614.08 4812.4 4611.36 4806.48 c
-4608 4799.12 4603.84 4795 4598.88 4795 c
-4594.56 4795 4592 4798.52 4592 4804.88 c
-4592 4811.28 4594.79 4821.04 4598.24 4827.12 c
-4601.28 4832.4 4604.64 4835.08 4608.8 4835.08 c
-h
-4648 4766 m
-f*
-1 i
-5048.15 4276.55 m
-5061.35 4314.95 5067.35 4354.55 5067.35 4395.35 c
-5067.35 4517.75 5010.95 4632.95 4913.75 4706.15 c
-S
-5002.55 4371.35 m
-5055.35 4306.55 l
-5138.15 4295.75 l
-4949.75 4116.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/gridplot.eps b/ast-5.3-1/sun210_figures/gridplot.eps
deleted file mode 100644
index 8d10486..0000000
--- a/ast-5.3-1/sun210_figures/gridplot.eps
+++ /dev/null
@@ -1,16726 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 97 220 409 571
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:41:43
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-1 0 1 rg
-533.21 1777.32 4343.81 4343.81 re
-Y
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2984 3317 l
-2985 3318 l
-2986 3319 l
-2987 3319 l
-2988 3320 l
-2990 3320 l
-2991 3321 l
-3005 3329 l
-3020 3338 l
-3034 3347 l
-3049 3356 l
-3063 3365 l
-3077 3375 l
-3091 3385 l
-3105 3395 l
-3118 3405 l
-3132 3415 l
-3145 3426 l
-3158 3436 l
-3171 3447 l
-3184 3459 l
-3197 3470 l
-3209 3482 l
-3222 3493 l
-3234 3505 l
-3246 3517 l
-3257 3530 l
-3269 3542 l
-3280 3555 l
-3291 3568 l
-3302 3581 l
-3313 3594 l
-3324 3607 l
-3334 3621 l
-3344 3634 l
-3354 3648 l
-3364 3662 l
-3373 3676 l
-3382 3691 l
-3391 3705 l
-3400 3720 l
-3409 3735 l
-3417 3750 l
-3425 3765 l
-3433 3780 l
-3441 3795 l
-3448 3810 l
-3455 3826 l
-3462 3842 l
-3469 3858 l
-3475 3873 l
-3481 3890 l
-3487 3906 l
-3492 3922 l
-3497 3938 l
-3502 3955 l
-3507 3971 l
-3512 3988 l
-3516 4005 l
-3519 4022 l
-3523 4039 l
-3526 4056 l
-3529 4073 l
-3532 4090 l
-3534 4107 l
-3536 4125 l
-3538 4142 l
-3539 4159 l
-3540 4177 l
-3541 4194 l
-3541 4212 l
-3541 4230 l
-3541 4247 l
-3541 4265 l
-3540 4283 l
-3538 4301 l
-3537 4318 l
-3535 4336 l
-3532 4354 l
-3529 4372 l
-3526 4390 l
-3523 4407 l
-3519 4425 l
-3515 4443 l
-3510 4461 l
-3505 4479 l
-3500 4496 l
-3494 4514 l
-3488 4531 l
-3481 4549 l
-3474 4567 l
-3467 4584 l
-3459 4601 l
-3451 4618 l
-3442 4636 l
-3433 4653 l
-3423 4670 l
-3413 4686 l
-3403 4703 l
-3392 4720 l
-3381 4736 l
-3369 4752 l
-3357 4768 l
-3344 4784 l
-3331 4800 l
-3318 4815 l
-3304 4831 l
-3289 4846 l
-3274 4860 l
-3259 4875 l
-3243 4889 l
-3227 4903 l
-3210 4917 l
-3193 4931 l
-3175 4944 l
-3157 4956 l
-3138 4969 l
-3119 4981 l
-3100 4993 l
-3080 5004 l
-3059 5015 l
-3038 5025 l
-3017 5035 l
-2995 5045 l
-2973 5054 l
-2951 5063 l
-2928 5071 l
-2904 5078 l
-2880 5085 l
-2856 5092 l
-2832 5098 l
-2807 5103 l
-2782 5108 l
-2756 5112 l
-2730 5115 l
-2704 5118 l
-2678 5120 l
-2651 5121 l
-2624 5122 l
-2597 5122 l
-2569 5121 l
-2542 5120 l
-2514 5117 l
-2487 5114 l
-2459 5110 l
-2431 5106 l
-2403 5100 l
-2375 5094 l
-2347 5087 l
-2319 5079 l
-2292 5071 l
-2264 5061 l
-2237 5051 l
-2235 5050 l
-2233 5050 l
-2231 5049 l
-2229 5048 l
-2227 5047 l
-2225 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2983 3318 l
-2983 3319 l
-2983 3320 l
-2984 3321 l
-2984 3322 l
-2984 3323 l
-2984 3324 l
-2985 3337 l
-2986 3351 l
-2987 3364 l
-2988 3378 l
-2989 3392 l
-2990 3406 l
-2991 3420 l
-2991 3434 l
-2992 3448 l
-2992 3462 l
-2992 3476 l
-2992 3490 l
-2992 3504 l
-2992 3518 l
-2992 3533 l
-2992 3547 l
-2992 3561 l
-2991 3576 l
-2991 3590 l
-2990 3605 l
-2989 3619 l
-2988 3634 l
-2988 3648 l
-2986 3663 l
-2985 3678 l
-2984 3692 l
-2983 3707 l
-2982 3722 l
-2980 3736 l
-2978 3751 l
-2977 3766 l
-2975 3780 l
-2973 3795 l
-2971 3810 l
-2969 3825 l
-2967 3839 l
-2965 3854 l
-2963 3869 l
-2961 3884 l
-2958 3899 l
-2956 3913 l
-2953 3928 l
-2950 3943 l
-2948 3958 l
-2945 3972 l
-2942 3987 l
-2939 4002 l
-2936 4016 l
-2933 4031 l
-2929 4046 l
-2926 4060 l
-2923 4075 l
-2919 4089 l
-2916 4104 l
-2912 4119 l
-2908 4133 l
-2904 4147 l
-2900 4162 l
-2897 4176 l
-2893 4191 l
-2888 4205 l
-2884 4219 l
-2880 4233 l
-2876 4247 l
-2871 4262 l
-2867 4276 l
-2862 4290 l
-2858 4304 l
-2853 4317 l
-2848 4331 l
-2843 4345 l
-2838 4359 l
-2833 4372 l
-2828 4386 l
-2823 4400 l
-2818 4413 l
-2812 4426 l
-2807 4440 l
-2802 4453 l
-2796 4466 l
-2790 4479 l
-2785 4492 l
-2779 4505 l
-2773 4518 l
-2767 4531 l
-2761 4543 l
-2755 4556 l
-2749 4568 l
-2743 4581 l
-2737 4593 l
-2730 4605 l
-2724 4617 l
-2717 4629 l
-2711 4641 l
-2704 4653 l
-2697 4664 l
-2691 4676 l
-2684 4687 l
-2677 4699 l
-2670 4710 l
-2662 4721 l
-2655 4732 l
-2648 4743 l
-2641 4753 l
-2633 4764 l
-2626 4774 l
-2618 4785 l
-2610 4795 l
-2602 4805 l
-2594 4815 l
-2586 4825 l
-2578 4834 l
-2570 4844 l
-2562 4853 l
-2554 4862 l
-2545 4871 l
-2537 4880 l
-2528 4888 l
-2519 4897 l
-2510 4905 l
-2501 4913 l
-2492 4921 l
-2483 4929 l
-2474 4937 l
-2464 4944 l
-2455 4951 l
-2445 4958 l
-2435 4965 l
-2425 4972 l
-2415 4978 l
-2405 4984 l
-2394 4990 l
-2384 4996 l
-2373 5001 l
-2362 5006 l
-2351 5011 l
-2340 5016 l
-2328 5020 l
-2317 5025 l
-2305 5028 l
-2293 5032 l
-2281 5035 l
-2268 5038 l
-2256 5041 l
-2243 5043 l
-2230 5045 l
-2229 5045 l
-2228 5045 l
-2227 5045 l
-2226 5045 l
-2225 5045 l
-2224 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2982 3317 l
-2981 3318 l
-2980 3318 l
-2979 3318 l
-2978 3319 l
-2977 3319 l
-2976 3320 l
-2963 3325 l
-2950 3331 l
-2936 3336 l
-2923 3342 l
-2910 3348 l
-2896 3355 l
-2883 3361 l
-2870 3368 l
-2857 3374 l
-2844 3381 l
-2831 3388 l
-2818 3396 l
-2805 3403 l
-2792 3410 l
-2779 3418 l
-2766 3426 l
-2754 3434 l
-2741 3442 l
-2728 3450 l
-2716 3458 l
-2703 3467 l
-2691 3475 l
-2678 3484 l
-2666 3493 l
-2654 3502 l
-2642 3511 l
-2630 3520 l
-2618 3529 l
-2606 3539 l
-2594 3548 l
-2582 3558 l
-2570 3567 l
-2559 3577 l
-2547 3587 l
-2535 3597 l
-2524 3608 l
-2513 3618 l
-2501 3628 l
-2490 3639 l
-2479 3649 l
-2468 3660 l
-2457 3671 l
-2446 3682 l
-2436 3693 l
-2425 3704 l
-2415 3715 l
-2404 3726 l
-2394 3737 l
-2384 3749 l
-2373 3760 l
-2363 3772 l
-2353 3783 l
-2344 3795 l
-2334 3807 l
-2324 3819 l
-2315 3831 l
-2305 3843 l
-2296 3855 l
-2287 3867 l
-2278 3879 l
-2269 3892 l
-2260 3904 l
-2252 3916 l
-2243 3929 l
-2235 3942 l
-2226 3954 l
-2218 3967 l
-2210 3980 l
-2202 3992 l
-2194 4005 l
-2187 4018 l
-2179 4031 l
-2172 4044 l
-2165 4057 l
-2158 4070 l
-2151 4083 l
-2144 4096 l
-2137 4110 l
-2131 4123 l
-2125 4136 l
-2118 4150 l
-2112 4163 l
-2107 4176 l
-2101 4190 l
-2095 4203 l
-2090 4217 l
-2085 4231 l
-2080 4244 l
-2075 4258 l
-2070 4271 l
-2066 4285 l
-2062 4299 l
-2058 4312 l
-2054 4326 l
-2050 4340 l
-2046 4354 l
-2043 4368 l
-2040 4381 l
-2037 4395 l
-2034 4409 l
-2032 4423 l
-2029 4437 l
-2027 4451 l
-2025 4465 l
-2024 4479 l
-2022 4493 l
-2021 4507 l
-2020 4521 l
-2019 4535 l
-2019 4548 l
-2019 4562 l
-2019 4576 l
-2019 4590 l
-2019 4604 l
-2020 4618 l
-2021 4632 l
-2022 4646 l
-2024 4660 l
-2026 4674 l
-2028 4688 l
-2031 4702 l
-2033 4716 l
-2036 4730 l
-2040 4744 l
-2044 4758 l
-2048 4771 l
-2052 4785 l
-2057 4799 l
-2062 4813 l
-2068 4827 l
-2073 4840 l
-2080 4854 l
-2086 4868 l
-2094 4881 l
-2101 4895 l
-2109 4908 l
-2117 4922 l
-2126 4935 l
-2136 4949 l
-2146 4962 l
-2156 4975 l
-2167 4988 l
-2178 5001 l
-2190 5014 l
-2203 5027 l
-2216 5039 l
-2217 5040 l
-2218 5041 l
-2219 5042 l
-2220 5043 l
-2221 5044 l
-2222 5045 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2982 3316 l
-2981 3316 l
-2980 3315 l
-2979 3315 l
-2978 3314 l
-2977 3313 l
-2976 3313 l
-2961 3305 l
-2946 3297 l
-2930 3290 l
-2915 3282 l
-2899 3275 l
-2884 3268 l
-2868 3262 l
-2852 3256 l
-2836 3250 l
-2820 3244 l
-2804 3238 l
-2788 3233 l
-2772 3228 l
-2755 3223 l
-2739 3219 l
-2722 3214 l
-2706 3210 l
-2689 3207 l
-2672 3203 l
-2656 3200 l
-2639 3197 l
-2622 3194 l
-2605 3192 l
-2588 3190 l
-2571 3188 l
-2554 3187 l
-2537 3185 l
-2520 3185 l
-2502 3184 l
-2485 3184 l
-2468 3184 l
-2451 3184 l
-2433 3184 l
-2416 3185 l
-2399 3186 l
-2382 3188 l
-2364 3190 l
-2347 3192 l
-2330 3194 l
-2313 3197 l
-2295 3200 l
-2278 3203 l
-2261 3207 l
-2244 3211 l
-2227 3215 l
-2210 3220 l
-2193 3225 l
-2176 3231 l
-2159 3236 l
-2143 3242 l
-2126 3249 l
-2109 3255 l
-2093 3263 l
-2076 3270 l
-2060 3278 l
-2044 3286 l
-2028 3294 l
-2012 3303 l
-1996 3313 l
-1980 3322 l
-1965 3332 l
-1949 3342 l
-1934 3353 l
-1919 3364 l
-1904 3376 l
-1889 3388 l
-1875 3400 l
-1860 3412 l
-1846 3425 l
-1832 3439 l
-1818 3452 l
-1805 3466 l
-1792 3481 l
-1779 3496 l
-1766 3511 l
-1753 3527 l
-1741 3543 l
-1729 3559 l
-1718 3576 l
-1707 3593 l
-1696 3611 l
-1685 3629 l
-1675 3647 l
-1665 3666 l
-1655 3685 l
-1646 3704 l
-1638 3724 l
-1629 3744 l
-1621 3765 l
-1614 3786 l
-1607 3807 l
-1600 3828 l
-1594 3850 l
-1589 3873 l
-1584 3895 l
-1579 3918 l
-1576 3941 l
-1572 3965 l
-1569 3989 l
-1567 4013 l
-1566 4037 l
-1565 4061 l
-1564 4086 l
-1564 4111 l
-1565 4136 l
-1567 4162 l
-1569 4187 l
-1572 4213 l
-1576 4239 l
-1580 4265 l
-1585 4291 l
-1591 4317 l
-1598 4343 l
-1605 4369 l
-1613 4395 l
-1622 4421 l
-1632 4447 l
-1642 4473 l
-1653 4499 l
-1665 4524 l
-1678 4550 l
-1691 4575 l
-1705 4600 l
-1720 4625 l
-1736 4649 l
-1753 4673 l
-1770 4697 l
-1788 4720 l
-1806 4743 l
-1826 4765 l
-1846 4787 l
-1866 4808 l
-1888 4829 l
-1909 4849 l
-1932 4869 l
-1955 4888 l
-1978 4907 l
-2002 4924 l
-2027 4941 l
-2052 4958 l
-2077 4973 l
-2103 4988 l
-2129 5002 l
-2156 5016 l
-2182 5028 l
-2209 5040 l
-2211 5041 l
-2213 5042 l
-2215 5043 l
-2217 5043 l
-2219 5044 l
-2221 5045 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2983 3316 l
-2983 3315 l
-2983 3314 l
-2983 3313 l
-2983 3312 l
-2983 3311 l
-2982 3310 l
-2981 3297 l
-2979 3283 l
-2977 3270 l
-2976 3257 l
-2974 3244 l
-2971 3231 l
-2969 3218 l
-2967 3205 l
-2964 3192 l
-2962 3179 l
-2959 3167 l
-2956 3154 l
-2953 3142 l
-2950 3130 l
-2947 3117 l
-2943 3105 l
-2940 3093 l
-2936 3081 l
-2932 3069 l
-2928 3057 l
-2924 3046 l
-2920 3034 l
-2915 3023 l
-2911 3012 l
-2906 3000 l
-2901 2989 l
-2896 2978 l
-2890 2967 l
-2885 2957 l
-2879 2946 l
-2873 2936 l
-2867 2925 l
-2861 2915 l
-2855 2905 l
-2848 2895 l
-2841 2885 l
-2834 2876 l
-2827 2866 l
-2819 2857 l
-2811 2848 l
-2803 2839 l
-2795 2830 l
-2786 2821 l
-2778 2813 l
-2768 2804 l
-2759 2796 l
-2749 2788 l
-2739 2781 l
-2729 2773 l
-2718 2766 l
-2707 2759 l
-2695 2752 l
-2684 2745 l
-2671 2739 l
-2659 2733 l
-2645 2727 l
-2632 2722 l
-2618 2717 l
-2603 2712 l
-2588 2707 l
-2572 2703 l
-2556 2700 l
-2539 2696 l
-2521 2694 l
-2503 2691 l
-2483 2689 l
-2464 2688 l
-2443 2687 l
-2421 2687 l
-2399 2688 l
-2375 2690 l
-2351 2692 l
-2326 2695 l
-2299 2700 l
-2271 2705 l
-2242 2712 l
-2212 2720 l
-2180 2729 l
-2148 2741 l
-2113 2754 l
-2077 2769 l
-2040 2787 l
-2002 2807 l
-1962 2829 l
-1920 2855 l
-1878 2884 l
-1834 2917 l
-1831 2919 l
-1828 2922 l
-1825 2924 l
-1822 2927 l
-1819 2930 l
-1816 2932 l
-1812 2935 l
-1809 2937 l
-1806 2940 l
-1803 2943 l
-1800 2945 l
-1797 2948 l
-1793 2951 l
-1790 2954 l
-1787 2956 l
-1784 2959 l
-1781 2962 l
-1777 2965 l
-1774 2968 l
-1771 2971 l
-1768 2974 l
-1765 2976 l
-1761 2979 l
-1758 2982 l
-1755 2985 l
-1752 2988 l
-1749 2991 l
-1745 2994 l
-1742 2998 l
-1739 3001 l
-1736 3004 l
-1732 3007 l
-1729 3010 l
-1726 3013 l
-1723 3017 l
-1720 3020 l
-1716 3023 l
-1713 3026 l
-1710 3030 l
-1707 3033 l
-1703 3036 l
-1700 3040 l
-1697 3043 l
-1694 3047 l
-1691 3050 l
-1687 3054 l
-1684 3057 l
-1681 3061 l
-1678 3064 l
-1675 3068 l
-1671 3071 l
-1668 3075 l
-1665 3079 l
-1662 3082 l
-1659 3086 l
-1655 3090 l
-1652 3094 l
-1649 3097 l
-1646 3101 l
-1643 3105 l
-1640 3109 l
-1636 3113 l
-1633 3117 l
-1630 3121 l
-1627 3125 l
-1624 3129 l
-1621 3133 l
-1618 3137 l
-1614 3141 l
-1611 3145 l
-1608 3149 l
-1605 3153 l
-1602 3157 l
-1599 3161 l
-1596 3165 l
-1593 3170 l
-1590 3174 l
-1587 3178 l
-1584 3183 l
-1581 3187 l
-1578 3191 l
-1575 3196 l
-1572 3200 l
-1569 3204 l
-1566 3209 l
-1563 3213 l
-1560 3218 l
-1557 3222 l
-1554 3227 l
-1551 3231 l
-1548 3236 l
-1545 3241 l
-1542 3245 l
-1539 3250 l
-1536 3255 l
-1534 3259 l
-1531 3264 l
-1528 3269 l
-1525 3274 l
-1522 3279 l
-1519 3283 l
-1517 3288 l
-1514 3293 l
-S
-1514 3293 m
-1511 3298 l
-1508 3303 l
-1506 3308 l
-1503 3313 l
-1500 3318 l
-1498 3323 l
-1495 3328 l
-1492 3333 l
-1490 3338 l
-1487 3343 l
-1485 3348 l
-1482 3353 l
-1479 3359 l
-1477 3364 l
-1474 3369 l
-1472 3374 l
-1469 3379 l
-1467 3385 l
-1465 3390 l
-1462 3395 l
-1460 3401 l
-1457 3406 l
-1455 3411 l
-1453 3417 l
-1450 3422 l
-1448 3428 l
-1446 3433 l
-1443 3438 l
-1441 3444 l
-1439 3449 l
-1437 3455 l
-1435 3461 l
-1432 3466 l
-1430 3472 l
-1428 3477 l
-1426 3483 l
-1424 3488 l
-1422 3494 l
-1420 3500 l
-1418 3505 l
-1416 3511 l
-1414 3517 l
-1412 3522 l
-1410 3528 l
-1408 3534 l
-1407 3540 l
-1405 3545 l
-1403 3551 l
-1401 3557 l
-1399 3563 l
-1398 3569 l
-1396 3574 l
-1394 3580 l
-1393 3586 l
-1391 3592 l
-1390 3598 l
-1388 3604 l
-1386 3609 l
-1385 3615 l
-1383 3621 l
-1382 3627 l
-1381 3633 l
-1379 3639 l
-1378 3645 l
-1376 3651 l
-1375 3657 l
-1374 3663 l
-1373 3669 l
-1371 3675 l
-1370 3681 l
-1369 3687 l
-1368 3693 l
-1367 3699 l
-1365 3705 l
-1364 3711 l
-1363 3717 l
-1362 3723 l
-1361 3729 l
-1360 3735 l
-1359 3741 l
-1359 3747 l
-1358 3753 l
-1357 3759 l
-1356 3765 l
-1355 3771 l
-1354 3777 l
-1354 3783 l
-1353 3789 l
-1352 3795 l
-1352 3801 l
-1351 3807 l
-1350 3813 l
-1350 3819 l
-1349 3825 l
-1349 3831 l
-1348 3837 l
-1348 3843 l
-1347 3849 l
-1347 3855 l
-1347 3861 l
-1346 3867 l
-1346 3873 l
-1346 3879 l
-1345 3885 l
-1345 3891 l
-1345 3897 l
-1345 3902 l
-1345 3908 l
-1344 3914 l
-1344 3920 l
-1344 3926 l
-1344 3932 l
-1344 3938 l
-1344 3944 l
-1344 3950 l
-1344 3956 l
-1344 3961 l
-1344 3967 l
-1345 3973 l
-1345 3979 l
-1345 3985 l
-1345 3991 l
-1345 3996 l
-1346 4002 l
-1346 4008 l
-1346 4014 l
-1346 4019 l
-1347 4025 l
-1347 4031 l
-1348 4037 l
-1348 4042 l
-1348 4048 l
-1349 4054 l
-1349 4059 l
-1350 4065 l
-1350 4071 l
-1351 4076 l
-1352 4082 l
-1352 4087 l
-1353 4093 l
-1354 4098 l
-1354 4104 l
-1355 4109 l
-1356 4115 l
-1356 4120 l
-1357 4126 l
-1358 4131 l
-1359 4137 l
-1360 4142 l
-1360 4148 l
-1361 4153 l
-1362 4158 l
-1363 4164 l
-1364 4169 l
-1365 4174 l
-1366 4180 l
-1367 4185 l
-1368 4190 l
-1369 4195 l
-1370 4201 l
-1371 4206 l
-1372 4211 l
-1373 4216 l
-1374 4221 l
-1375 4226 l
-1377 4231 l
-1378 4236 l
-1379 4242 l
-1380 4247 l
-1381 4252 l
-1383 4257 l
-1384 4262 l
-1385 4267 l
-1386 4271 l
-1388 4276 l
-1389 4281 l
-1390 4286 l
-1392 4291 l
-1393 4296 l
-1394 4301 l
-1396 4305 l
-1397 4310 l
-1399 4315 l
-1400 4320 l
-1401 4324 l
-1403 4329 l
-1404 4334 l
-1406 4338 l
-1407 4343 l
-1409 4348 l
-1410 4352 l
-1412 4357 l
-1413 4361 l
-1415 4366 l
-1416 4370 l
-1418 4375 l
-1420 4379 l
-1421 4384 l
-1423 4388 l
-S
-1423 4388 m
-1424 4392 l
-1426 4397 l
-1428 4401 l
-1429 4406 l
-1431 4410 l
-1433 4414 l
-1434 4418 l
-1436 4423 l
-1438 4427 l
-1439 4431 l
-1441 4435 l
-1443 4439 l
-1445 4443 l
-1446 4448 l
-1448 4452 l
-1450 4456 l
-1452 4460 l
-1453 4464 l
-1455 4468 l
-1457 4472 l
-1483 4525 l
-1509 4575 l
-1537 4620 l
-1564 4662 l
-1592 4701 l
-1620 4736 l
-1647 4769 l
-1674 4798 l
-1701 4825 l
-1727 4850 l
-1753 4872 l
-1778 4893 l
-1802 4911 l
-1826 4928 l
-1849 4944 l
-1871 4958 l
-1893 4970 l
-1914 4981 l
-1935 4991 l
-1955 5001 l
-1975 5009 l
-1994 5016 l
-2012 5022 l
-2030 5028 l
-2048 5032 l
-2065 5037 l
-2082 5040 l
-2098 5043 l
-2114 5045 l
-2130 5047 l
-2145 5048 l
-2160 5048 l
-2174 5049 l
-2189 5048 l
-2203 5048 l
-2216 5046 l
-2217 5046 l
-2218 5046 l
-2219 5046 l
-2220 5046 l
-2221 5046 l
-2222 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2984 3316 l
-2985 3316 l
-2986 3316 l
-2987 3315 l
-2988 3315 l
-2989 3315 l
-2990 3314 l
-3003 3309 l
-3017 3304 l
-3030 3299 l
-3044 3295 l
-3058 3291 l
-3071 3286 l
-3085 3282 l
-3099 3279 l
-3113 3275 l
-3126 3272 l
-3140 3268 l
-3154 3265 l
-3168 3263 l
-3182 3260 l
-3195 3258 l
-3209 3255 l
-3223 3254 l
-3237 3252 l
-3251 3250 l
-3265 3249 l
-3279 3248 l
-3293 3247 l
-3307 3247 l
-3321 3247 l
-3335 3247 l
-3349 3247 l
-3363 3247 l
-3377 3248 l
-3391 3249 l
-3405 3251 l
-3419 3252 l
-3433 3254 l
-3447 3257 l
-3461 3259 l
-3475 3262 l
-3489 3265 l
-3502 3269 l
-3516 3273 l
-3530 3277 l
-3544 3281 l
-3558 3286 l
-3572 3292 l
-3586 3297 l
-3600 3304 l
-3614 3310 l
-3627 3317 l
-3641 3324 l
-3655 3332 l
-3668 3341 l
-3682 3349 l
-3695 3359 l
-3709 3368 l
-3722 3379 l
-3736 3389 l
-3749 3401 l
-3762 3413 l
-3775 3425 l
-3788 3438 l
-3801 3452 l
-3814 3467 l
-3826 3482 l
-3839 3498 l
-3851 3514 l
-3863 3532 l
-3875 3550 l
-3886 3569 l
-3897 3588 l
-3908 3609 l
-3919 3631 l
-3929 3653 l
-3939 3677 l
-3949 3701 l
-3958 3727 l
-3966 3753 l
-3974 3781 l
-3981 3809 l
-3988 3839 l
-3993 3870 l
-3998 3903 l
-4002 3936 l
-4005 3971 l
-4007 4006 l
-4007 4043 l
-4007 4082 l
-4005 4121 l
-4001 4161 l
-3996 4203 l
-3989 4245 l
-3980 4289 l
-3969 4333 l
-3957 4378 l
-3942 4423 l
-3925 4469 l
-3905 4515 l
-3884 4561 l
-3860 4607 l
-3834 4653 l
-3805 4698 l
-3774 4742 l
-3741 4785 l
-3706 4827 l
-3669 4868 l
-3631 4907 l
-3590 4944 l
-3549 4979 l
-3506 5012 l
-3462 5043 l
-3417 5072 l
-3372 5098 l
-3327 5122 l
-3281 5144 l
-3236 5163 l
-3190 5181 l
-3146 5196 l
-3101 5209 l
-3058 5220 l
-3015 5229 l
-2973 5236 l
-2932 5242 l
-2892 5246 l
-2854 5248 l
-2816 5249 l
-2779 5249 l
-2744 5247 l
-2710 5245 l
-2677 5241 l
-2645 5237 l
-2615 5232 l
-2585 5226 l
-2557 5219 l
-2529 5211 l
-2503 5203 l
-2478 5195 l
-2454 5186 l
-2430 5176 l
-2408 5167 l
-2387 5156 l
-2366 5146 l
-2346 5135 l
-2327 5124 l
-2309 5112 l
-2292 5101 l
-2276 5089 l
-2260 5077 l
-2245 5064 l
-2230 5052 l
-2229 5051 l
-2228 5050 l
-2227 5049 l
-2226 5048 l
-2225 5047 l
-2224 5047 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-3302 3581 m
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3301 3582 l
-3301 3582 l
-3300 3583 l
-3299 3584 l
-3299 3584 l
-3298 3585 l
-3298 3585 l
-3297 3586 l
-3297 3586 l
-3296 3587 l
-3295 3588 l
-3295 3588 l
-3294 3589 l
-3286 3596 l
-3277 3603 l
-3268 3610 l
-3259 3617 l
-3249 3623 l
-3239 3628 l
-3229 3634 l
-3218 3639 l
-3207 3643 l
-3196 3648 l
-3185 3651 l
-3174 3655 l
-3162 3658 l
-3150 3661 l
-3138 3663 l
-3126 3665 l
-3114 3666 l
-3101 3668 l
-3089 3669 l
-3076 3669 l
-3064 3669 l
-3051 3669 l
-3038 3669 l
-3025 3668 l
-3012 3666 l
-2999 3665 l
-2986 3663 l
-2974 3661 l
-2961 3658 l
-2948 3655 l
-2935 3652 l
-2922 3649 l
-2909 3645 l
-2897 3641 l
-2884 3636 l
-2872 3632 l
-2859 3627 l
-2847 3621 l
-2835 3616 l
-2823 3610 l
-2811 3604 l
-2799 3597 l
-2787 3591 l
-2776 3584 l
-2765 3577 l
-2754 3569 l
-2743 3562 l
-2733 3554 l
-2722 3546 l
-2712 3537 l
-2703 3529 l
-2693 3520 l
-2684 3511 l
-2675 3502 l
-2666 3493 l
-2658 3483 l
-2650 3473 l
-2642 3464 l
-2635 3454 l
-2628 3443 l
-2621 3433 l
-2615 3423 l
-2609 3412 l
-2604 3401 l
-2599 3391 l
-2594 3380 l
-2590 3369 l
-2586 3358 l
-2583 3347 l
-2580 3335 l
-2577 3324 l
-2575 3313 l
-2574 3302 l
-2573 3290 l
-2573 3279 l
-2573 3268 l
-2573 3256 l
-2574 3245 l
-2576 3234 l
-2578 3223 l
-2581 3212 l
-2584 3201 l
-2588 3190 l
-2592 3179 l
-2597 3169 l
-2603 3158 l
-2609 3148 l
-2616 3138 l
-2623 3128 l
-2631 3119 l
-2639 3110 l
-2648 3101 l
-2658 3092 l
-2668 3084 l
-2678 3076 l
-2689 3068 l
-2701 3061 l
-2713 3054 l
-2726 3048 l
-2739 3042 l
-2753 3036 l
-2767 3031 l
-2782 3027 l
-2796 3023 l
-2812 3020 l
-2828 3017 l
-2844 3014 l
-2860 3013 l
-2877 3012 l
-2894 3011 l
-2911 3012 l
-2928 3012 l
-2945 3014 l
-2963 3016 l
-2980 3019 l
-2998 3022 l
-3015 3026 l
-3033 3031 l
-3050 3036 l
-3067 3042 l
-3084 3049 l
-3101 3056 l
-3118 3064 l
-3134 3072 l
-3150 3081 l
-3165 3090 l
-3181 3100 l
-3195 3110 l
-3210 3121 l
-3223 3132 l
-3236 3144 l
-3249 3156 l
-3261 3168 l
-3273 3181 l
-3284 3193 l
-3294 3206 l
-3303 3220 l
-3312 3233 l
-3321 3247 l
-3328 3260 l
-3335 3274 l
-3342 3288 l
-3347 3302 l
-3352 3315 l
-3357 3329 l
-3360 3343 l
-3363 3356 l
-3366 3370 l
-3367 3383 l
-3369 3396 l
-3369 3409 l
-3369 3422 l
-3368 3435 l
-3367 3447 l
-3365 3459 l
-3362 3471 l
-3359 3482 l
-3356 3494 l
-3352 3505 l
-3347 3515 l
-3342 3526 l
-3337 3536 l
-3331 3545 l
-3324 3555 l
-3317 3564 l
-3310 3572 l
-3302 3581 l
-S
-3500 3947 m
-3500 3947 l
-3500 3947 l
-3500 3947 l
-3500 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3498 3948 l
-3496 3949 l
-3495 3950 l
-3494 3951 l
-3493 3951 l
-3492 3952 l
-3490 3953 l
-3489 3954 l
-3488 3954 l
-3487 3955 l
-3486 3956 l
-3484 3957 l
-3483 3957 l
-3466 3968 l
-3448 3977 l
-3430 3986 l
-3412 3994 l
-3393 4002 l
-3374 4008 l
-3354 4015 l
-3335 4020 l
-3315 4025 l
-3295 4030 l
-3275 4034 l
-3254 4037 l
-3234 4040 l
-3213 4042 l
-3192 4044 l
-3171 4045 l
-3149 4045 l
-3128 4045 l
-3107 4045 l
-3085 4044 l
-3064 4042 l
-3042 4041 l
-3021 4038 l
-2999 4035 l
-2977 4032 l
-2956 4028 l
-2934 4024 l
-2913 4019 l
-2891 4014 l
-2870 4008 l
-2848 4002 l
-2827 3996 l
-2806 3989 l
-2785 3981 l
-2764 3974 l
-2743 3966 l
-2722 3957 l
-2701 3948 l
-2681 3939 l
-2661 3929 l
-2641 3919 l
-2621 3909 l
-2601 3898 l
-2582 3887 l
-2563 3876 l
-2544 3864 l
-2526 3852 l
-2507 3839 l
-2489 3826 l
-2472 3813 l
-2454 3800 l
-2437 3786 l
-2421 3772 l
-2405 3758 l
-2389 3743 l
-2373 3728 l
-2358 3713 l
-2343 3697 l
-2329 3681 l
-2315 3665 l
-2302 3649 l
-2289 3632 l
-2277 3615 l
-2265 3598 l
-2254 3581 l
-2243 3563 l
-2233 3545 l
-2224 3527 l
-2215 3509 l
-2207 3490 l
-2199 3472 l
-2192 3453 l
-2186 3433 l
-2181 3414 l
-2176 3395 l
-2172 3375 l
-2169 3355 l
-2166 3335 l
-2165 3315 l
-2164 3295 l
-2164 3274 l
-2166 3254 l
-2168 3233 l
-2171 3213 l
-2175 3192 l
-2180 3172 l
-2186 3151 l
-2194 3130 l
-2202 3110 l
-2212 3089 l
-2223 3069 l
-2235 3049 l
-2249 3029 l
-2264 3009 l
-2280 2990 l
-2297 2971 l
-2316 2952 l
-2336 2934 l
-2358 2916 l
-2382 2899 l
-2406 2883 l
-2433 2867 l
-2461 2853 l
-2490 2839 l
-2521 2826 l
-2553 2814 l
-2586 2804 l
-2622 2795 l
-2658 2787 l
-2695 2781 l
-2734 2777 l
-2774 2774 l
-2814 2773 l
-2856 2775 l
-2898 2778 l
-2940 2783 l
-2983 2790 l
-3026 2799 l
-3068 2810 l
-3111 2824 l
-3153 2839 l
-3194 2856 l
-3234 2876 l
-3273 2897 l
-3312 2920 l
-3348 2944 l
-3383 2970 l
-3417 2997 l
-3449 3025 l
-3479 3054 l
-3507 3084 l
-3533 3115 l
-3557 3146 l
-3580 3178 l
-3600 3209 l
-3618 3241 l
-3634 3273 l
-3649 3305 l
-3662 3336 l
-3672 3368 l
-3681 3398 l
-3689 3429 l
-3695 3458 l
-3699 3487 l
-3701 3516 l
-3703 3544 l
-3703 3571 l
-3701 3597 l
-3699 3623 l
-3695 3647 l
-3690 3671 l
-3684 3694 l
-3677 3717 l
-3669 3738 l
-3661 3759 l
-3651 3779 l
-3640 3798 l
-3629 3816 l
-3617 3834 l
-3605 3851 l
-3591 3867 l
-3577 3882 l
-3563 3896 l
-3548 3910 l
-3532 3923 l
-3516 3935 l
-3500 3947 l
-S
-3529 4372 m
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3526 4373 l
-3525 4374 l
-3523 4374 l
-3521 4375 l
-3520 4375 l
-3518 4376 l
-3516 4376 l
-3515 4377 l
-3513 4377 l
-3511 4378 l
-3510 4378 l
-3508 4379 l
-3507 4380 l
-3483 4387 l
-3460 4393 l
-3436 4399 l
-3413 4404 l
-3389 4408 l
-3364 4412 l
-3340 4415 l
-3316 4418 l
-3291 4420 l
-3266 4421 l
-3241 4422 l
-3216 4423 l
-3191 4423 l
-3166 4422 l
-3140 4421 l
-3115 4420 l
-3090 4418 l
-3064 4415 l
-3038 4412 l
-3013 4409 l
-2987 4405 l
-2961 4401 l
-2936 4396 l
-2910 4391 l
-2884 4385 l
-2859 4379 l
-2833 4372 l
-2808 4366 l
-2782 4358 l
-2757 4351 l
-2731 4343 l
-2706 4334 l
-2681 4325 l
-2656 4316 l
-2631 4306 l
-2606 4297 l
-2581 4286 l
-2557 4276 l
-2532 4265 l
-2508 4253 l
-2484 4242 l
-2460 4229 l
-2436 4217 l
-2413 4204 l
-2390 4191 l
-2367 4178 l
-2344 4164 l
-2322 4150 l
-2299 4136 l
-2277 4121 l
-2256 4107 l
-2234 4091 l
-2213 4076 l
-2192 4060 l
-2172 4044 l
-2152 4028 l
-2132 4011 l
-2113 3994 l
-2094 3977 l
-2075 3959 l
-2057 3942 l
-2039 3923 l
-2022 3905 l
-2005 3887 l
-1989 3868 l
-1973 3849 l
-1957 3829 l
-1942 3809 l
-1928 3790 l
-1914 3769 l
-1901 3749 l
-1888 3728 l
-1876 3707 l
-1864 3686 l
-1853 3664 l
-1843 3642 l
-1833 3620 l
-1824 3598 l
-1816 3575 l
-1809 3552 l
-1802 3529 l
-1797 3505 l
-1792 3481 l
-1788 3457 l
-1785 3432 l
-1783 3407 l
-1782 3382 l
-1782 3356 l
-1783 3330 l
-1785 3304 l
-1789 3277 l
-1794 3250 l
-1800 3222 l
-1808 3194 l
-1818 3166 l
-1829 3137 l
-1842 3108 l
-1858 3079 l
-1875 3049 l
-1895 3019 l
-1917 2989 l
-1941 2958 l
-1969 2927 l
-2000 2896 l
-2034 2865 l
-2072 2835 l
-2114 2805 l
-2117 2803 l
-2120 2801 l
-2123 2798 l
-2127 2796 l
-2130 2794 l
-2133 2792 l
-2136 2790 l
-2140 2788 l
-2143 2786 l
-2146 2784 l
-2150 2782 l
-2153 2780 l
-2156 2778 l
-2160 2775 l
-2163 2773 l
-2167 2771 l
-2170 2769 l
-2174 2767 l
-2177 2765 l
-2181 2763 l
-2185 2761 l
-2188 2759 l
-2192 2757 l
-2195 2755 l
-2199 2753 l
-2203 2751 l
-2207 2749 l
-2210 2747 l
-2214 2745 l
-2218 2743 l
-2222 2741 l
-2226 2739 l
-2229 2737 l
-2233 2735 l
-2237 2734 l
-2241 2732 l
-2245 2730 l
-2249 2728 l
-2253 2726 l
-2257 2724 l
-2261 2722 l
-2265 2720 l
-2270 2718 l
-2274 2717 l
-2278 2715 l
-2282 2713 l
-2286 2711 l
-2291 2709 l
-2295 2708 l
-2299 2706 l
-2304 2704 l
-2308 2702 l
-2312 2700 l
-2317 2699 l
-2321 2697 l
-2326 2695 l
-2330 2694 l
-2335 2692 l
-2339 2690 l
-2344 2689 l
-2348 2687 l
-2353 2685 l
-2358 2684 l
-2362 2682 l
-2367 2681 l
-2372 2679 l
-S
-2372 2679 m
-2376 2677 l
-2381 2676 l
-2386 2674 l
-2391 2673 l
-2396 2671 l
-2400 2670 l
-2405 2668 l
-2410 2667 l
-2415 2666 l
-2420 2664 l
-2425 2663 l
-2430 2661 l
-2435 2660 l
-2440 2659 l
-2446 2657 l
-2451 2656 l
-2456 2655 l
-2461 2653 l
-2466 2652 l
-2472 2651 l
-2477 2650 l
-2482 2649 l
-2487 2647 l
-2493 2646 l
-2498 2645 l
-2504 2644 l
-2509 2643 l
-2514 2642 l
-2520 2641 l
-2525 2640 l
-2531 2639 l
-2537 2638 l
-2542 2637 l
-2548 2636 l
-2553 2635 l
-2559 2634 l
-2565 2633 l
-2570 2633 l
-2576 2632 l
-2582 2631 l
-2588 2630 l
-2593 2630 l
-2599 2629 l
-2605 2628 l
-2611 2627 l
-2617 2627 l
-2623 2626 l
-2629 2626 l
-2635 2625 l
-2641 2625 l
-2647 2624 l
-2653 2624 l
-2659 2623 l
-2665 2623 l
-2671 2623 l
-2677 2622 l
-2683 2622 l
-2689 2622 l
-2696 2621 l
-2702 2621 l
-2708 2621 l
-2714 2621 l
-2721 2621 l
-2727 2621 l
-2733 2621 l
-2739 2621 l
-2746 2621 l
-2752 2621 l
-2759 2621 l
-2765 2621 l
-2771 2621 l
-2778 2621 l
-2784 2621 l
-2791 2622 l
-2797 2622 l
-2804 2622 l
-2810 2623 l
-2817 2623 l
-2823 2623 l
-2830 2624 l
-2836 2624 l
-2843 2625 l
-2850 2625 l
-2856 2626 l
-2863 2627 l
-2869 2627 l
-2876 2628 l
-2883 2629 l
-2889 2630 l
-2896 2631 l
-2903 2631 l
-2909 2632 l
-2916 2633 l
-2923 2634 l
-2929 2635 l
-2936 2636 l
-2943 2637 l
-2950 2639 l
-2956 2640 l
-2963 2641 l
-2970 2642 l
-2977 2644 l
-2983 2645 l
-2990 2646 l
-2997 2648 l
-3004 2649 l
-3010 2651 l
-3017 2652 l
-3024 2654 l
-3031 2655 l
-3038 2657 l
-3044 2659 l
-3051 2660 l
-3058 2662 l
-3065 2664 l
-3071 2666 l
-3078 2668 l
-3085 2670 l
-3092 2672 l
-3098 2674 l
-3105 2676 l
-3112 2678 l
-3119 2680 l
-3125 2682 l
-3132 2684 l
-3139 2687 l
-3146 2689 l
-3152 2691 l
-3159 2694 l
-3166 2696 l
-3172 2698 l
-3179 2701 l
-3186 2703 l
-3192 2706 l
-3199 2709 l
-3205 2711 l
-3212 2714 l
-3219 2717 l
-3225 2719 l
-3232 2722 l
-3238 2725 l
-3245 2728 l
-3251 2731 l
-3258 2734 l
-3264 2737 l
-3271 2740 l
-3277 2743 l
-3284 2746 l
-3290 2749 l
-3296 2752 l
-3303 2755 l
-3309 2758 l
-3315 2762 l
-3322 2765 l
-3328 2768 l
-3334 2772 l
-3340 2775 l
-3347 2778 l
-3353 2782 l
-3359 2785 l
-3365 2789 l
-3371 2792 l
-3377 2796 l
-3383 2800 l
-3389 2803 l
-3395 2807 l
-3401 2811 l
-3407 2814 l
-3413 2818 l
-3419 2822 l
-3425 2826 l
-3431 2829 l
-3437 2833 l
-3442 2837 l
-3448 2841 l
-3454 2845 l
-3460 2849 l
-3465 2853 l
-3471 2857 l
-3476 2861 l
-3482 2865 l
-3488 2869 l
-3493 2873 l
-3499 2878 l
-3504 2882 l
-3509 2886 l
-3515 2890 l
-3520 2894 l
-3525 2899 l
-3531 2903 l
-3536 2907 l
-3541 2911 l
-3546 2916 l
-3551 2920 l
-3556 2925 l
-3562 2929 l
-3567 2933 l
-3572 2938 l
-3577 2942 l
-S
-3577 2942 m
-3581 2947 l
-3586 2951 l
-3591 2956 l
-3596 2960 l
-3601 2965 l
-3606 2969 l
-3610 2974 l
-3615 2978 l
-3620 2983 l
-3624 2987 l
-3629 2992 l
-3633 2996 l
-3638 3001 l
-3642 3006 l
-3647 3010 l
-3651 3015 l
-3655 3020 l
-3660 3024 l
-3664 3029 l
-3668 3034 l
-3672 3038 l
-3676 3043 l
-3681 3048 l
-3685 3052 l
-3689 3057 l
-3693 3062 l
-3697 3067 l
-3701 3071 l
-3705 3076 l
-3708 3081 l
-3712 3086 l
-3716 3090 l
-3720 3095 l
-3724 3100 l
-3727 3105 l
-3731 3109 l
-3734 3114 l
-3738 3119 l
-3742 3124 l
-3745 3128 l
-3749 3133 l
-3752 3138 l
-3755 3143 l
-3759 3147 l
-3762 3152 l
-3765 3157 l
-3769 3162 l
-3772 3166 l
-3775 3171 l
-3778 3176 l
-3781 3181 l
-3784 3185 l
-3787 3190 l
-3791 3195 l
-3793 3200 l
-3796 3204 l
-3799 3209 l
-3802 3214 l
-3805 3219 l
-3808 3223 l
-3811 3228 l
-3813 3233 l
-3816 3238 l
-3819 3242 l
-3821 3247 l
-3824 3252 l
-3827 3256 l
-3829 3261 l
-3832 3266 l
-3834 3270 l
-3837 3275 l
-3839 3280 l
-3842 3284 l
-3844 3289 l
-3846 3294 l
-3849 3298 l
-3851 3303 l
-3853 3307 l
-3855 3312 l
-3858 3317 l
-3860 3321 l
-3862 3326 l
-3864 3330 l
-3866 3335 l
-3868 3339 l
-3870 3344 l
-3872 3348 l
-3874 3353 l
-3876 3358 l
-3878 3362 l
-3880 3366 l
-3882 3371 l
-3883 3375 l
-3885 3380 l
-3887 3384 l
-3889 3389 l
-3890 3393 l
-3892 3398 l
-3894 3402 l
-3895 3406 l
-3897 3411 l
-3899 3415 l
-3900 3419 l
-3902 3424 l
-3903 3428 l
-3905 3432 l
-3906 3437 l
-3907 3441 l
-3909 3445 l
-3910 3450 l
-3912 3454 l
-3913 3458 l
-3914 3462 l
-3916 3467 l
-3917 3471 l
-3918 3475 l
-3919 3479 l
-3920 3483 l
-3922 3488 l
-3923 3492 l
-3924 3496 l
-3925 3500 l
-3926 3504 l
-3927 3508 l
-3928 3512 l
-3929 3516 l
-3930 3520 l
-3931 3524 l
-3932 3528 l
-3933 3532 l
-3934 3536 l
-3935 3540 l
-3936 3544 l
-3937 3548 l
-3938 3552 l
-3938 3556 l
-3939 3560 l
-3940 3564 l
-3941 3568 l
-3941 3572 l
-3942 3576 l
-3950 3629 l
-3956 3679 l
-3958 3727 l
-3957 3772 l
-3955 3815 l
-3950 3855 l
-3944 3893 l
-3936 3930 l
-3926 3964 l
-3916 3996 l
-3904 4027 l
-3891 4055 l
-3877 4083 l
-3863 4108 l
-3847 4133 l
-3831 4156 l
-3814 4177 l
-3797 4197 l
-3779 4217 l
-3760 4235 l
-3741 4252 l
-3722 4268 l
-3702 4283 l
-3681 4297 l
-3661 4310 l
-3640 4322 l
-3618 4334 l
-3596 4344 l
-3574 4354 l
-3552 4363 l
-3529 4372 l
-S
-3338 4792 m
-3338 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3336 4792 l
-3336 4792 l
-3336 4792 l
-3335 4792 l
-3333 4792 l
-3332 4792 l
-3330 4792 l
-3329 4792 l
-3327 4792 l
-3326 4792 l
-3324 4792 l
-3323 4792 l
-3321 4792 l
-3320 4792 l
-3318 4792 l
-3316 4792 l
-3295 4792 l
-3273 4791 l
-3251 4790 l
-3229 4789 l
-3207 4787 l
-3185 4786 l
-3162 4783 l
-3139 4781 l
-3116 4778 l
-3093 4775 l
-3070 4772 l
-3047 4769 l
-3023 4765 l
-3000 4761 l
-2976 4756 l
-2952 4751 l
-2928 4746 l
-2904 4741 l
-2880 4736 l
-2856 4730 l
-2832 4724 l
-2808 4717 l
-2784 4711 l
-2760 4704 l
-2736 4697 l
-2711 4689 l
-2687 4682 l
-2663 4674 l
-2639 4665 l
-2614 4657 l
-2590 4648 l
-2566 4639 l
-2542 4630 l
-2518 4621 l
-2494 4611 l
-2470 4601 l
-2446 4591 l
-2423 4581 l
-2399 4570 l
-2376 4560 l
-2352 4549 l
-2329 4537 l
-2306 4526 l
-2283 4514 l
-2260 4503 l
-2237 4491 l
-2215 4478 l
-2192 4466 l
-2170 4453 l
-2148 4441 l
-2126 4428 l
-2105 4415 l
-2083 4401 l
-2062 4388 l
-2041 4375 l
-2021 4361 l
-2000 4347 l
-1980 4333 l
-1960 4319 l
-1940 4305 l
-1921 4290 l
-1902 4276 l
-1883 4261 l
-1864 4246 l
-1846 4232 l
-1828 4217 l
-1810 4202 l
-1793 4187 l
-1776 4171 l
-1759 4156 l
-1743 4141 l
-1727 4125 l
-1711 4110 l
-1696 4094 l
-1681 4079 l
-1666 4063 l
-1652 4048 l
-1638 4032 l
-1624 4016 l
-1611 4000 l
-1598 3985 l
-1586 3969 l
-1574 3953 l
-1562 3937 l
-1551 3921 l
-1540 3906 l
-1530 3890 l
-1520 3874 l
-1510 3858 l
-1501 3843 l
-1492 3827 l
-1484 3811 l
-1476 3796 l
-1469 3780 l
-1462 3765 l
-1455 3749 l
-1449 3734 l
-1443 3719 l
-1438 3703 l
-1433 3688 l
-1429 3673 l
-1425 3658 l
-1421 3643 l
-1418 3629 l
-1416 3614 l
-1414 3599 l
-1412 3585 l
-1411 3571 l
-1410 3556 l
-1410 3542 l
-1410 3528 l
-1411 3514 l
-1412 3500 l
-1414 3486 l
-1416 3473 l
-1419 3459 l
-1422 3444 l
-1427 3430 l
-1432 3414 l
-1439 3395 l
-1440 3393 l
-1441 3391 l
-1441 3389 l
-1442 3388 l
-1443 3386 l
-1444 3383 l
-1445 3381 l
-1446 3379 l
-1447 3376 l
-1448 3373 l
-1450 3370 l
-1451 3367 l
-1453 3363 l
-1455 3359 l
-1457 3354 l
-1460 3348 l
-1463 3341 l
-1468 3333 l
-1473 3322 l
-1480 3308 l
-1491 3289 l
-1507 3259 l
-1509 3256 l
-1510 3254 l
-1512 3251 l
-1514 3248 l
-1515 3245 l
-1517 3241 l
-1519 3238 l
-1522 3234 l
-1524 3231 l
-1526 3227 l
-1529 3223 l
-1531 3219 l
-1534 3214 l
-1537 3210 l
-1540 3205 l
-1543 3200 l
-1547 3194 l
-1551 3188 l
-1555 3182 l
-1559 3176 l
-1564 3169 l
-1568 3162 l
-1574 3154 l
-1580 3146 l
-1586 3138 l
-1593 3128 l
-1600 3118 l
-1608 3108 l
-1617 3096 l
-1627 3084 l
-1638 3070 l
-S
-1638 3070 m
-1650 3056 l
-1664 3040 l
-1679 3023 l
-1696 3004 l
-1716 2983 l
-1739 2960 l
-1765 2935 l
-1796 2908 l
-1832 2877 l
-1875 2844 l
-1926 2807 l
-1930 2804 l
-1934 2801 l
-1939 2798 l
-1943 2796 l
-1947 2793 l
-1952 2790 l
-1956 2787 l
-1960 2784 l
-1965 2781 l
-1970 2778 l
-1974 2775 l
-1979 2773 l
-1984 2770 l
-1989 2767 l
-1994 2764 l
-1999 2761 l
-2004 2758 l
-2009 2755 l
-2014 2752 l
-2020 2748 l
-2025 2745 l
-2030 2742 l
-2036 2739 l
-2042 2736 l
-2047 2733 l
-2053 2730 l
-2059 2727 l
-2065 2724 l
-2071 2720 l
-2077 2717 l
-2084 2714 l
-2090 2711 l
-2096 2708 l
-2103 2705 l
-2110 2701 l
-2116 2698 l
-2123 2695 l
-2130 2692 l
-2137 2689 l
-2144 2685 l
-2152 2682 l
-2159 2679 l
-2166 2676 l
-2174 2673 l
-2182 2669 l
-2190 2666 l
-2198 2663 l
-2206 2660 l
-2214 2657 l
-2222 2654 l
-2231 2651 l
-2239 2647 l
-2248 2644 l
-2257 2641 l
-2266 2638 l
-2275 2635 l
-2284 2632 l
-2293 2629 l
-2303 2626 l
-2312 2623 l
-2322 2621 l
-2332 2618 l
-2342 2615 l
-2353 2612 l
-2363 2610 l
-2373 2607 l
-2384 2604 l
-2395 2602 l
-2406 2599 l
-2417 2597 l
-2428 2595 l
-2440 2592 l
-2451 2590 l
-2463 2588 l
-2475 2586 l
-2487 2584 l
-2499 2582 l
-2512 2580 l
-2524 2578 l
-2537 2577 l
-2550 2575 l
-2563 2574 l
-2576 2573 l
-2589 2571 l
-2602 2570 l
-2616 2569 l
-2630 2569 l
-2644 2568 l
-2658 2567 l
-2672 2567 l
-2686 2567 l
-2701 2567 l
-2715 2567 l
-2730 2567 l
-2745 2567 l
-2760 2568 l
-2775 2568 l
-2790 2569 l
-2806 2570 l
-2821 2571 l
-2837 2573 l
-2852 2574 l
-2868 2576 l
-2884 2578 l
-2900 2580 l
-2916 2583 l
-2932 2585 l
-2948 2588 l
-2964 2591 l
-2980 2594 l
-2997 2598 l
-3013 2601 l
-3029 2605 l
-3046 2609 l
-3062 2613 l
-3078 2618 l
-3095 2623 l
-3111 2628 l
-3128 2633 l
-3144 2638 l
-3160 2644 l
-3177 2649 l
-3193 2655 l
-3209 2662 l
-3225 2668 l
-3241 2675 l
-3257 2682 l
-3273 2689 l
-3289 2696 l
-3305 2703 l
-3320 2711 l
-3336 2719 l
-3351 2727 l
-3366 2735 l
-3381 2743 l
-3396 2752 l
-3411 2760 l
-3426 2769 l
-3440 2778 l
-3455 2787 l
-3469 2797 l
-3483 2806 l
-3497 2815 l
-3510 2825 l
-3524 2835 l
-3537 2845 l
-3550 2855 l
-3563 2865 l
-3575 2875 l
-3588 2885 l
-3600 2895 l
-3612 2906 l
-3624 2916 l
-3636 2927 l
-3647 2937 l
-3658 2948 l
-3670 2958 l
-3680 2969 l
-3691 2980 l
-3701 2990 l
-3712 3001 l
-3722 3012 l
-3731 3023 l
-3741 3033 l
-3750 3044 l
-3760 3055 l
-3769 3066 l
-3777 3076 l
-3786 3087 l
-3794 3098 l
-3803 3108 l
-3811 3119 l
-3818 3129 l
-3826 3140 l
-3834 3150 l
-3841 3161 l
-3848 3171 l
-3855 3181 l
-3862 3192 l
-3868 3202 l
-3875 3212 l
-3881 3222 l
-3887 3232 l
-3893 3242 l
-3899 3252 l
-3905 3262 l
-3910 3271 l
-3916 3281 l
-S
-3916 3281 m
-3921 3291 l
-3926 3300 l
-3931 3309 l
-3936 3319 l
-3940 3328 l
-3945 3337 l
-3949 3346 l
-3954 3355 l
-3958 3364 l
-3962 3373 l
-3966 3382 l
-3970 3391 l
-3974 3399 l
-3977 3408 l
-3981 3416 l
-3984 3425 l
-3988 3433 l
-3991 3441 l
-3994 3449 l
-3997 3457 l
-4000 3465 l
-4003 3473 l
-4006 3481 l
-4009 3489 l
-4012 3496 l
-4014 3504 l
-4017 3512 l
-4019 3519 l
-4022 3526 l
-4024 3533 l
-4026 3541 l
-4028 3548 l
-4030 3555 l
-4032 3562 l
-4034 3569 l
-4036 3575 l
-4038 3582 l
-4040 3589 l
-4042 3595 l
-4043 3602 l
-4045 3608 l
-4047 3615 l
-4048 3621 l
-4050 3627 l
-4051 3633 l
-4053 3639 l
-4054 3645 l
-4055 3651 l
-4057 3657 l
-4058 3663 l
-4059 3669 l
-4060 3675 l
-4061 3680 l
-4062 3686 l
-4064 3691 l
-4065 3697 l
-4066 3702 l
-4066 3707 l
-4067 3713 l
-4068 3718 l
-4069 3723 l
-4070 3728 l
-4071 3733 l
-4072 3738 l
-4072 3743 l
-4073 3748 l
-4074 3753 l
-4074 3758 l
-4075 3762 l
-4076 3767 l
-4076 3772 l
-4077 3776 l
-4078 3781 l
-4078 3785 l
-4079 3790 l
-4079 3794 l
-4080 3799 l
-4080 3803 l
-4085 3859 l
-4087 3907 l
-4088 3949 l
-4087 3987 l
-4086 4019 l
-4084 4049 l
-4082 4075 l
-4080 4098 l
-4077 4119 l
-4075 4138 l
-4072 4156 l
-4070 4172 l
-4067 4186 l
-4065 4199 l
-4063 4212 l
-4060 4223 l
-4058 4234 l
-4056 4244 l
-4054 4253 l
-4052 4262 l
-4050 4270 l
-4048 4277 l
-4047 4284 l
-4028 4352 l
-4016 4390 l
-4008 4413 l
-4002 4429 l
-3997 4441 l
-3994 4451 l
-3991 4458 l
-3988 4465 l
-3986 4470 l
-3984 4474 l
-3982 4478 l
-3981 4482 l
-3980 4485 l
-3978 4488 l
-3977 4491 l
-3976 4493 l
-3975 4495 l
-3974 4498 l
-3973 4500 l
-3972 4501 l
-3971 4503 l
-3971 4505 l
-3970 4507 l
-3969 4508 l
-3968 4510 l
-3968 4511 l
-3967 4513 l
-3966 4514 l
-3966 4515 l
-3965 4517 l
-3964 4518 l
-3964 4519 l
-3963 4521 l
-3962 4522 l
-3962 4523 l
-3961 4524 l
-3960 4525 l
-3960 4526 l
-3959 4528 l
-3959 4529 l
-3958 4530 l
-3958 4531 l
-3950 4545 l
-3942 4557 l
-3933 4569 l
-3925 4580 l
-3916 4591 l
-3907 4602 l
-3897 4612 l
-3887 4622 l
-3877 4632 l
-3866 4641 l
-3855 4650 l
-3844 4659 l
-3832 4667 l
-3820 4675 l
-3807 4683 l
-3794 4691 l
-3780 4698 l
-3767 4706 l
-3752 4712 l
-3738 4719 l
-3723 4725 l
-3708 4731 l
-3692 4737 l
-3676 4743 l
-3660 4748 l
-3643 4753 l
-3627 4757 l
-3609 4762 l
-3592 4766 l
-3574 4770 l
-3556 4773 l
-3537 4776 l
-3518 4779 l
-3499 4782 l
-3480 4784 l
-3461 4786 l
-3441 4788 l
-3421 4789 l
-3400 4790 l
-3380 4791 l
-3359 4792 l
-3338 4792 l
-S
-2880 5085 m
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2879 5085 l
-2878 5084 l
-2878 5084 l
-2877 5083 l
-2876 5083 l
-2876 5083 l
-2875 5082 l
-2874 5082 l
-2874 5082 l
-2873 5081 l
-2872 5081 l
-2871 5080 l
-2871 5080 l
-2861 5075 l
-2850 5069 l
-2839 5064 l
-2828 5059 l
-2816 5053 l
-2804 5048 l
-2791 5043 l
-2778 5037 l
-2765 5031 l
-2752 5026 l
-2738 5020 l
-2724 5015 l
-2710 5009 l
-2696 5003 l
-2681 4997 l
-2666 4991 l
-2651 4985 l
-2636 4979 l
-2620 4973 l
-2605 4967 l
-2589 4960 l
-2573 4954 l
-2557 4948 l
-2541 4941 l
-2525 4935 l
-2509 4928 l
-2492 4921 l
-2476 4915 l
-2459 4908 l
-2442 4901 l
-2426 4894 l
-2409 4887 l
-2392 4880 l
-2376 4873 l
-2359 4865 l
-2342 4858 l
-2325 4851 l
-2309 4843 l
-2292 4836 l
-2275 4829 l
-2259 4821 l
-2242 4814 l
-2225 4806 l
-2209 4799 l
-2192 4791 l
-2176 4784 l
-2160 4776 l
-2144 4768 l
-2127 4761 l
-2111 4753 l
-2096 4746 l
-2080 4738 l
-2064 4731 l
-2049 4723 l
-2033 4716 l
-2018 4709 l
-2003 4701 l
-1988 4694 l
-1973 4687 l
-1959 4680 l
-1945 4673 l
-1930 4666 l
-1916 4660 l
-1903 4653 l
-1889 4647 l
-1876 4641 l
-1863 4635 l
-1850 4629 l
-1837 4623 l
-1825 4618 l
-1813 4612 l
-1801 4607 l
-1789 4603 l
-1778 4598 l
-1767 4594 l
-1756 4590 l
-1746 4587 l
-1736 4584 l
-1726 4581 l
-1717 4579 l
-1708 4577 l
-1699 4576 l
-1691 4575 l
-1683 4575 l
-1676 4575 l
-1669 4575 l
-1663 4577 l
-1657 4579 l
-1652 4582 l
-1647 4585 l
-1643 4589 l
-1639 4594 l
-1636 4600 l
-1634 4607 l
-1633 4615 l
-1632 4624 l
-1633 4633 l
-1634 4644 l
-1636 4656 l
-1640 4669 l
-1644 4683 l
-1650 4699 l
-1657 4716 l
-1666 4734 l
-1676 4753 l
-1688 4773 l
-1702 4795 l
-1718 4818 l
-1735 4842 l
-1755 4867 l
-1778 4893 l
-1802 4919 l
-1829 4947 l
-1859 4974 l
-1891 5002 l
-1925 5029 l
-1962 5056 l
-2001 5083 l
-2043 5108 l
-2085 5132 l
-2130 5155 l
-2175 5175 l
-2222 5194 l
-2268 5211 l
-2315 5226 l
-2361 5238 l
-2407 5248 l
-2451 5256 l
-2494 5263 l
-2536 5267 l
-2575 5270 l
-2613 5271 l
-2649 5270 l
-2682 5269 l
-2713 5266 l
-2742 5263 l
-2769 5259 l
-2793 5254 l
-2816 5249 l
-2836 5243 l
-2855 5238 l
-2871 5232 l
-2886 5225 l
-2899 5219 l
-2911 5213 l
-2920 5206 l
-2929 5200 l
-2936 5194 l
-2941 5187 l
-2946 5181 l
-2949 5175 l
-2951 5169 l
-2952 5163 l
-2952 5157 l
-2951 5151 l
-2949 5145 l
-2946 5140 l
-2943 5134 l
-2938 5128 l
-2933 5123 l
-2928 5117 l
-2921 5112 l
-2914 5107 l
-2907 5101 l
-2898 5096 l
-2890 5091 l
-2880 5085 l
-S
-0 g
-3421 4402 m
-3413 4431 l
-S
-3307 4418 m
-3299 4448 l
-S
-3191 4423 m
-3182 4452 l
-S
-3073 4416 m
-3063 4445 l
-S
-2953 4399 m
-2942 4428 l
-S
-2714 4337 m
-2703 4365 l
-S
-2598 4293 m
-2586 4321 l
-S
-2484 4242 m
-2471 4269 l
-S
-2374 4183 m
-2361 4210 l
-S
-2270 4117 m
-2256 4144 l
-S
-2081 3965 m
-2067 3992 l
-S
-1999 3880 m
-1984 3906 l
-S
-1928 3790 m
-1912 3815 l
-S
-1868 3693 m
-1851 3718 l
-S
-1822 3590 m
-1804 3615 l
-S
-1781 3365 m
-1761 3387 l
-S
-1796 3241 m
-1774 3262 l
-S
-1842 3108 m
-1819 3128 l
-S
-1933 2968 m
-1908 2985 l
-S
-2086 2825 m
-2058 2838 l
-S
-2673 2622 m
-2643 2620 l
-S
-3103 2675 m
-3081 2654 l
-S
-3509 2886 m
-3537 2898 l
-S
-3785 3187 m
-3805 3210 l
-S
-3920 3482 m
-3933 3510 l
-S
-3939 3918 m
-3942 3948 l
-S
-3887 4065 m
-3887 4095 l
-S
-3814 4177 m
-3812 4207 l
-S
-3728 4263 m
-3725 4293 l
-S
-3633 4326 m
-3627 4356 l
-S
-3043 3352 m
-3063 3330 l
-S
-3100 3391 m
-3121 3369 l
-S
-3155 3434 m
-3177 3413 l
-S
-3207 3480 m
-3230 3459 l
-S
-3256 3529 m
-3279 3509 l
-S
-3345 3636 m
-3369 3617 l
-S
-3384 3693 m
-3409 3676 l
-S
-3419 3753 m
-3445 3737 l
-S
-3450 3816 m
-3476 3800 l
-S
-3477 3880 m
-3504 3865 l
-S
-3518 4015 m
-3545 4002 l
-S
-3531 4084 m
-3559 4072 l
-S
-3539 4155 m
-3567 4144 l
-S
-3541 4227 m
-3570 4217 l
-S
-3538 4299 m
-3567 4290 l
-S
-3514 4445 m
-3544 4438 l
-S
-3493 4517 m
-3523 4512 l
-S
-3465 4588 m
-3495 4585 l
-S
-3430 4658 m
-3460 4656 l
-S
-3387 4726 m
-3418 4726 l
-S
-3281 4854 m
-3311 4857 l
-S
-3216 4913 m
-3246 4917 l
-S
-3143 4966 m
-3173 4973 l
-S
-3063 5013 m
-3092 5022 l
-S
-2975 5053 m
-3003 5064 l
-S
-2779 5108 m
-2805 5124 l
-S
-2673 5120 m
-2697 5139 l
-S
-2563 5121 m
-2584 5142 l
-S
-2450 5109 m
-2468 5133 l
-S
-2336 5084 m
-2350 5111 l
-S
-3529 4372 m
-3483 4387 l
-3436 4399 l
-3389 4408 l
-3340 4415 l
-3291 4420 l
-3241 4422 l
-3191 4423 l
-3140 4421 l
-3090 4418 l
-3038 4412 l
-2987 4405 l
-2936 4396 l
-2884 4385 l
-2833 4372 l
-S
-2833 4372 m
-2782 4358 l
-2731 4343 l
-2681 4325 l
-2631 4306 l
-2581 4286 l
-2532 4265 l
-2484 4242 l
-2436 4217 l
-2390 4191 l
-2344 4164 l
-2299 4136 l
-2256 4107 l
-2213 4076 l
-2172 4044 l
-S
-2172 4044 m
-2132 4011 l
-2094 3977 l
-2057 3942 l
-2022 3905 l
-1989 3868 l
-1957 3829 l
-1928 3790 l
-1901 3749 l
-1876 3707 l
-1853 3664 l
-1833 3620 l
-1832 3617 l
-1831 3614 l
-1829 3610 l
-1828 3607 l
-1827 3604 l
-1826 3601 l
-1824 3598 l
-1823 3594 l
-1822 3591 l
-1821 3588 l
-1820 3585 l
-1819 3581 l
-1817 3578 l
-1816 3575 l
-1815 3572 l
-1814 3568 l
-1813 3565 l
-1812 3562 l
-1811 3558 l
-1810 3555 l
-1809 3552 l
-1808 3549 l
-1807 3545 l
-1806 3542 l
-1805 3539 l
-1804 3535 l
-1803 3532 l
-1802 3529 l
-1801 3525 l
-1801 3522 l
-1800 3518 l
-1799 3515 l
-1798 3512 l
-1797 3508 l
-1797 3505 l
-1796 3501 l
-1795 3498 l
-1794 3495 l
-1794 3491 l
-1793 3488 l
-1792 3484 l
-1792 3481 l
-S
-1792 3481 m
-1791 3477 l
-1790 3474 l
-1790 3471 l
-1789 3467 l
-1789 3464 l
-1788 3460 l
-1788 3457 l
-1787 3453 l
-1787 3450 l
-1786 3446 l
-1786 3443 l
-1785 3439 l
-1785 3436 l
-1785 3432 l
-1784 3428 l
-1784 3425 l
-1784 3421 l
-1783 3418 l
-1783 3414 l
-1783 3411 l
-1783 3407 l
-1782 3403 l
-1782 3400 l
-1782 3396 l
-1782 3393 l
-1782 3389 l
-1782 3385 l
-1782 3382 l
-1781 3378 l
-1781 3374 l
-1781 3371 l
-1781 3367 l
-1781 3364 l
-1781 3360 l
-1782 3356 l
-1782 3352 l
-1782 3349 l
-1782 3345 l
-1782 3341 l
-1782 3338 l
-1782 3334 l
-1783 3330 l
-1783 3326 l
-1783 3323 l
-1784 3319 l
-1784 3315 l
-1784 3311 l
-1785 3308 l
-1785 3304 l
-1786 3300 l
-1786 3296 l
-1787 3292 l
-1787 3289 l
-1788 3285 l
-1788 3281 l
-1789 3277 l
-1789 3273 l
-1790 3269 l
-1791 3265 l
-1791 3262 l
-1792 3258 l
-1793 3254 l
-1794 3250 l
-1795 3246 l
-1795 3242 l
-1796 3238 l
-1797 3234 l
-1798 3230 l
-1799 3226 l
-1800 3222 l
-1801 3218 l
-1802 3214 l
-1803 3210 l
-1805 3206 l
-1806 3202 l
-1807 3198 l
-1808 3194 l
-1809 3190 l
-1811 3186 l
-1812 3182 l
-1814 3178 l
-1815 3174 l
-1816 3170 l
-1818 3166 l
-1819 3162 l
-1821 3158 l
-1822 3154 l
-1824 3150 l
-1826 3146 l
-1827 3142 l
-1829 3137 l
-1831 3133 l
-1833 3129 l
-1835 3125 l
-1836 3121 l
-1838 3117 l
-1840 3113 l
-1842 3108 l
-1844 3104 l
-1846 3100 l
-1849 3096 l
-1851 3092 l
-1853 3087 l
-1855 3083 l
-1858 3079 l
-1860 3075 l
-1862 3070 l
-1865 3066 l
-1867 3062 l
-1870 3058 l
-1872 3053 l
-1875 3049 l
-1878 3045 l
-1880 3041 l
-1883 3036 l
-1886 3032 l
-1889 3028 l
-1892 3023 l
-1895 3019 l
-1898 3015 l
-1901 3010 l
-1904 3006 l
-1907 3002 l
-1910 2997 l
-1913 2993 l
-1917 2989 l
-1920 2984 l
-1923 2980 l
-1927 2975 l
-1930 2971 l
-1934 2967 l
-1938 2962 l
-1941 2958 l
-1945 2953 l
-1949 2949 l
-1953 2945 l
-1957 2940 l
-1961 2936 l
-1965 2931 l
-1969 2927 l
-1973 2923 l
-1978 2918 l
-1982 2914 l
-1986 2909 l
-1991 2905 l
-1995 2901 l
-2000 2896 l
-2005 2892 l
-2009 2887 l
-2014 2883 l
-2019 2879 l
-2024 2874 l
-2029 2870 l
-2034 2865 l
-2039 2861 l
-2045 2857 l
-2050 2852 l
-2055 2848 l
-2061 2844 l
-2066 2839 l
-2072 2835 l
-2078 2831 l
-2084 2826 l
-2090 2822 l
-2096 2818 l
-2102 2813 l
-2108 2809 l
-2114 2805 l
-2120 2801 l
-2127 2796 l
-2133 2792 l
-2140 2788 l
-2146 2784 l
-2153 2780 l
-2160 2775 l
-2167 2771 l
-2174 2767 l
-2181 2763 l
-2188 2759 l
-2195 2755 l
-2203 2751 l
-2210 2747 l
-2218 2743 l
-2226 2739 l
-2233 2735 l
-2241 2732 l
-2249 2728 l
-2257 2724 l
-2265 2720 l
-2274 2717 l
-2282 2713 l
-2291 2709 l
-2299 2706 l
-2308 2702 l
-2317 2699 l
-2326 2695 l
-S
-2326 2695 m
-2335 2692 l
-2344 2689 l
-2353 2685 l
-2362 2682 l
-2372 2679 l
-2381 2676 l
-2391 2673 l
-2400 2670 l
-2410 2667 l
-2420 2664 l
-2430 2661 l
-2440 2659 l
-2451 2656 l
-2461 2653 l
-2472 2651 l
-2482 2649 l
-2493 2646 l
-2504 2644 l
-2514 2642 l
-2525 2640 l
-2537 2638 l
-2548 2636 l
-2559 2634 l
-2570 2633 l
-2582 2631 l
-2593 2630 l
-2605 2628 l
-2617 2627 l
-2629 2626 l
-2641 2625 l
-2653 2624 l
-2665 2623 l
-2677 2622 l
-2689 2622 l
-2702 2621 l
-2714 2621 l
-2727 2621 l
-2739 2621 l
-2752 2621 l
-2765 2621 l
-2778 2621 l
-2791 2622 l
-2804 2622 l
-2817 2623 l
-2830 2624 l
-2843 2625 l
-2856 2626 l
-2869 2627 l
-2883 2629 l
-2896 2631 l
-2909 2632 l
-2923 2634 l
-2936 2636 l
-2950 2639 l
-2963 2641 l
-2977 2644 l
-2990 2646 l
-3004 2649 l
-3017 2652 l
-3031 2655 l
-3044 2659 l
-3058 2662 l
-3071 2666 l
-3085 2670 l
-3098 2674 l
-3112 2678 l
-3125 2682 l
-3139 2687 l
-3152 2691 l
-3166 2696 l
-3179 2701 l
-3192 2706 l
-3205 2711 l
-3219 2717 l
-3232 2722 l
-3245 2728 l
-3258 2734 l
-3271 2740 l
-3284 2746 l
-3296 2752 l
-3309 2758 l
-3322 2765 l
-3334 2772 l
-3347 2778 l
-3359 2785 l
-3371 2792 l
-3383 2800 l
-3395 2807 l
-3407 2814 l
-3419 2822 l
-3431 2829 l
-3442 2837 l
-3454 2845 l
-3465 2853 l
-3476 2861 l
-3488 2869 l
-3499 2878 l
-3509 2886 l
-3520 2894 l
-3531 2903 l
-3541 2911 l
-3551 2920 l
-3562 2929 l
-3572 2938 l
-3581 2947 l
-3591 2956 l
-3601 2965 l
-3610 2974 l
-3620 2983 l
-3629 2992 l
-3638 3001 l
-3647 3010 l
-3655 3020 l
-3664 3029 l
-3672 3038 l
-3681 3048 l
-3689 3057 l
-3697 3067 l
-3705 3076 l
-3712 3086 l
-3720 3095 l
-3727 3105 l
-3734 3114 l
-3742 3124 l
-3749 3133 l
-3755 3143 l
-3762 3152 l
-3769 3162 l
-3775 3171 l
-3781 3181 l
-3787 3190 l
-3793 3200 l
-3799 3209 l
-3805 3219 l
-3811 3228 l
-3816 3238 l
-3821 3247 l
-3827 3256 l
-3832 3266 l
-3837 3275 l
-3842 3284 l
-3846 3294 l
-3851 3303 l
-3855 3312 l
-3860 3321 l
-3864 3330 l
-3868 3339 l
-3872 3348 l
-3876 3358 l
-3880 3366 l
-3883 3375 l
-3887 3384 l
-3890 3393 l
-3894 3402 l
-3897 3411 l
-3900 3419 l
-3903 3428 l
-3906 3437 l
-3909 3445 l
-3912 3454 l
-3914 3462 l
-3917 3471 l
-3919 3479 l
-3922 3488 l
-3924 3496 l
-3926 3504 l
-3928 3512 l
-3930 3520 l
-3932 3528 l
-3934 3536 l
-3936 3544 l
-3938 3552 l
-3939 3560 l
-3941 3568 l
-3942 3576 l
-3944 3583 l
-3945 3591 l
-3946 3599 l
-3947 3606 l
-3948 3614 l
-3949 3621 l
-3950 3629 l
-3951 3636 l
-3952 3643 l
-3953 3650 l
-3954 3658 l
-3954 3665 l
-3955 3672 l
-3956 3679 l
-3956 3686 l
-3956 3693 l
-3957 3700 l
-3957 3706 l
-3957 3713 l
-3958 3720 l
-3958 3727 l
-S
-3958 3727 m
-3958 3733 l
-3958 3740 l
-3958 3746 l
-3958 3753 l
-3958 3759 l
-3958 3765 l
-3957 3772 l
-3957 3778 l
-3957 3784 l
-3956 3790 l
-3956 3797 l
-3956 3803 l
-3955 3809 l
-3955 3815 l
-3954 3821 l
-3954 3826 l
-3953 3832 l
-3952 3838 l
-3952 3844 l
-3951 3849 l
-3950 3855 l
-3949 3861 l
-3948 3866 l
-3948 3872 l
-3947 3877 l
-3946 3883 l
-3945 3888 l
-3944 3893 l
-3943 3899 l
-3942 3904 l
-3940 3909 l
-3939 3914 l
-3938 3919 l
-3937 3924 l
-3936 3930 l
-3934 3935 l
-3933 3940 l
-3932 3944 l
-3931 3949 l
-3929 3954 l
-3928 3959 l
-3926 3964 l
-3925 3968 l
-3923 3973 l
-3922 3978 l
-3920 3982 l
-3919 3987 l
-3917 3992 l
-3916 3996 l
-3914 4001 l
-3912 4005 l
-3911 4009 l
-3909 4014 l
-3907 4018 l
-3906 4022 l
-3904 4027 l
-3902 4031 l
-3900 4035 l
-3899 4039 l
-3897 4043 l
-3895 4047 l
-3893 4051 l
-3891 4055 l
-3889 4059 l
-3887 4063 l
-3885 4067 l
-3883 4071 l
-3881 4075 l
-3879 4079 l
-3877 4083 l
-3875 4086 l
-3873 4090 l
-3871 4094 l
-3869 4097 l
-3867 4101 l
-3865 4105 l
-3863 4108 l
-3860 4112 l
-3858 4115 l
-3856 4119 l
-3854 4122 l
-3852 4126 l
-3849 4129 l
-3847 4133 l
-3845 4136 l
-3843 4139 l
-3840 4143 l
-3838 4146 l
-3836 4149 l
-3833 4152 l
-3831 4156 l
-3829 4159 l
-3826 4162 l
-3824 4165 l
-3821 4168 l
-3819 4171 l
-3817 4174 l
-3814 4177 l
-3812 4180 l
-3809 4183 l
-3807 4186 l
-3804 4189 l
-3802 4192 l
-3799 4195 l
-3797 4197 l
-3794 4200 l
-3792 4203 l
-3789 4206 l
-3787 4209 l
-3784 4211 l
-3781 4214 l
-3779 4217 l
-3776 4219 l
-3774 4222 l
-3771 4225 l
-3768 4227 l
-3766 4230 l
-3763 4232 l
-3760 4235 l
-3758 4237 l
-3755 4240 l
-3752 4242 l
-3749 4245 l
-3747 4247 l
-3744 4249 l
-3741 4252 l
-3738 4254 l
-3736 4256 l
-3733 4259 l
-3730 4261 l
-3727 4263 l
-3725 4266 l
-3722 4268 l
-3719 4270 l
-3716 4272 l
-3713 4274 l
-3710 4276 l
-3708 4279 l
-3705 4281 l
-3702 4283 l
-3699 4285 l
-3696 4287 l
-3693 4289 l
-3690 4291 l
-3687 4293 l
-3684 4295 l
-3681 4297 l
-3679 4299 l
-3676 4301 l
-3673 4303 l
-3670 4304 l
-3667 4306 l
-3664 4308 l
-3661 4310 l
-3658 4312 l
-3655 4314 l
-3652 4315 l
-3649 4317 l
-3646 4319 l
-3643 4321 l
-3640 4322 l
-3637 4324 l
-3634 4326 l
-3631 4327 l
-3627 4329 l
-3624 4331 l
-3621 4332 l
-3618 4334 l
-3615 4335 l
-3612 4337 l
-3609 4338 l
-3606 4340 l
-3603 4341 l
-3600 4343 l
-3596 4344 l
-3593 4346 l
-3590 4347 l
-3587 4349 l
-3584 4350 l
-3581 4352 l
-3578 4353 l
-3574 4354 l
-3571 4356 l
-3568 4357 l
-3565 4358 l
-3562 4360 l
-3558 4361 l
-3555 4362 l
-3552 4363 l
-3549 4365 l
-3546 4366 l
-3542 4367 l
-3539 4368 l
-3536 4370 l
-3533 4371 l
-3532 4371 l
-3532 4371 l
-3532 4371 l
-3532 4371 l
-S
-3532 4371 m
-3532 4371 l
-3531 4371 l
-3531 4371 l
-3531 4371 l
-3531 4371 l
-3530 4372 l
-3530 4372 l
-3530 4372 l
-3530 4372 l
-S
-2983 3317 m
-3009 3332 l
-3034 3347 l
-3060 3363 l
-3084 3380 l
-3108 3397 l
-3132 3415 l
-3155 3434 l
-3178 3453 l
-3200 3473 l
-3222 3493 l
-3243 3514 l
-3263 3536 l
-3283 3558 l
-3302 3581 l
-S
-3302 3581 m
-3321 3604 l
-3339 3628 l
-3356 3652 l
-3373 3676 l
-3389 3702 l
-3405 3727 l
-3419 3753 l
-3433 3780 l
-3446 3807 l
-3459 3834 l
-3470 3862 l
-3481 3890 l
-3491 3918 l
-3500 3947 l
-S
-3500 3947 m
-3508 3976 l
-3516 4005 l
-3522 4034 l
-3528 4064 l
-3532 4094 l
-3536 4125 l
-3539 4155 l
-3541 4186 l
-3541 4216 l
-3541 4247 l
-3540 4278 l
-3537 4310 l
-3534 4341 l
-3529 4372 l
-S
-3529 4372 m
-3524 4403 l
-3517 4434 l
-3509 4465 l
-3500 4496 l
-3489 4527 l
-3478 4558 l
-3465 4588 l
-3451 4618 l
-3435 4648 l
-3418 4678 l
-3400 4707 l
-3381 4736 l
-3360 4764 l
-3338 4792 l
-S
-3338 4792 m
-3314 4819 l
-3289 4846 l
-3263 4871 l
-3235 4896 l
-3206 4921 l
-3175 4944 l
-3143 4966 l
-3110 4987 l
-3075 5007 l
-3038 5025 l
-3001 5043 l
-2962 5058 l
-2922 5073 l
-2880 5085 l
-S
-2880 5085 m
-2838 5096 l
-2794 5105 l
-2750 5113 l
-2704 5118 l
-2658 5121 l
-2610 5122 l
-2563 5121 l
-2514 5117 l
-2466 5111 l
-2417 5103 l
-2368 5093 l
-2319 5079 l
-2271 5064 l
-2223 5046 l
-S
-0 0 1 rg
-4073 3746 m
-4075 3748 l
-S
-4075 3748 m
-4075 3753 l
-4075 3757 l
-4075 3762 l
-4075 3766 l
-4075 3770 l
-4075 3775 l
-4077 3777 l
-4079 3779 l
-4079 3784 l
-4079 3788 l
-S
-4079 3788 m
-4079 3793 l
-4079 3797 l
-4079 3802 l
-4079 3806 l
-4079 3811 l
-4079 3815 l
-4082 3817 l
-4084 3820 l
-4084 3824 l
-4084 3829 l
-S
-4084 3829 m
-4084 3833 l
-4084 3838 l
-4084 3842 l
-4084 3846 l
-4084 3851 l
-4084 3855 l
-4084 3860 l
-4084 3864 l
-4084 3869 l
-S
-4084 3869 m
-4084 3873 l
-4084 3878 l
-4086 3880 l
-4088 3882 l
-4088 3887 l
-4088 3891 l
-4088 3896 l
-4088 3900 l
-4088 3905 l
-4088 3909 l
-S
-4088 3909 m
-4088 3913 l
-4088 3918 l
-4088 3922 l
-4088 3927 l
-4088 3931 l
-4088 3936 l
-4088 3940 l
-4088 3945 l
-4088 3949 l
-S
-4088 3949 m
-4088 3954 l
-4088 3958 l
-4088 3963 l
-4088 3967 l
-4088 3972 l
-4088 3976 l
-4088 3981 l
-4088 3985 l
-4088 3989 l
-S
-4088 3989 m
-4088 3994 l
-4088 3998 l
-4088 4003 l
-4088 4007 l
-4088 4012 l
-4088 4016 l
-4086 4018 l
-4084 4021 l
-4084 4025 l
-4084 4030 l
-S
-4084 4030 m
-4084 4034 l
-4084 4039 l
-4084 4043 l
-4084 4048 l
-4084 4052 l
-4084 4056 l
-4084 4061 l
-4084 4065 l
-4084 4070 l
-S
-4084 4070 m
-4084 4074 l
-4084 4079 l
-4082 4081 l
-4079 4083 l
-4079 4088 l
-4079 4092 l
-4079 4097 l
-4079 4101 l
-4079 4106 l
-4079 4110 l
-S
-4079 4110 m
-4079 4115 l
-4079 4119 l
-4077 4121 l
-4075 4124 l
-4075 4128 l
-4075 4132 l
-4075 4137 l
-4075 4141 l
-4075 4146 l
-4075 4150 l
-S
-4073 4153 m
-4075 4150 l
-S
-4032 3563 m
-4035 3565 l
-4035 3569 l
-4035 3574 l
-4037 3576 l
-4039 3578 l
-4039 3583 l
-4039 3587 l
-S
-4039 3587 m
-4039 3592 l
-4041 3594 l
-4044 3596 l
-4044 3601 l
-4044 3605 l
-4044 3610 l
-4046 3612 l
-4048 3614 l
-4048 3619 l
-4048 3623 l
-4048 3627 l
-S
-4048 3627 m
-4050 3630 l
-4053 3632 l
-4053 3636 l
-4053 3641 l
-4053 3645 l
-4055 3648 l
-4057 3650 l
-4057 3654 l
-4057 3659 l
-4057 3663 l
-4057 3668 l
-S
-4057 3668 m
-4059 3670 l
-4061 3672 l
-4061 3677 l
-4061 3681 l
-4061 3686 l
-4061 3690 l
-4064 3692 l
-4066 3694 l
-4066 3699 l
-4066 3703 l
-4066 3708 l
-S
-4066 3708 m
-4066 3712 l
-4066 3717 l
-4068 3719 l
-4070 3721 l
-4070 3726 l
-4070 3730 l
-4070 3735 l
-4070 3739 l
-4070 3744 l
-4073 3746 l
-S
-4073 4153 m
-4070 4155 l
-4070 4159 l
-4070 4164 l
-4070 4168 l
-4070 4173 l
-4070 4177 l
-4068 4179 l
-4066 4182 l
-4066 4186 l
-4066 4191 l
-S
-4066 4191 m
-4066 4195 l
-4066 4199 l
-4066 4204 l
-4064 4206 l
-4061 4208 l
-4061 4213 l
-4061 4217 l
-4061 4222 l
-4061 4226 l
-4059 4229 l
-4057 4231 l
-S
-4057 4231 m
-4057 4235 l
-4057 4240 l
-4057 4244 l
-4057 4249 l
-4055 4251 l
-4053 4253 l
-4053 4258 l
-4053 4262 l
-4053 4267 l
-4050 4269 l
-4048 4271 l
-S
-4048 4271 m
-4048 4275 l
-4048 4280 l
-4048 4284 l
-4046 4287 l
-4044 4289 l
-4044 4293 l
-4044 4298 l
-4044 4302 l
-4041 4305 l
-4039 4307 l
-4039 4311 l
-S
-4032 4336 m
-4035 4334 l
-4035 4329 l
-4035 4325 l
-4037 4322 l
-4039 4320 l
-4039 4316 l
-4039 4311 l
-S
-3992 3442 m
-3994 3444 l
-3994 3449 l
-3994 3453 l
-3997 3455 l
-3999 3458 l
-3999 3462 l
-3999 3467 l
-S
-3999 3467 m
-4001 3469 l
-4003 3471 l
-4003 3476 l
-4006 3478 l
-4008 3480 l
-4008 3484 l
-4008 3489 l
-4010 3491 l
-4012 3493 l
-4012 3498 l
-4012 3502 l
-4015 3505 l
-4017 3507 l
-S
-4017 3507 m
-4017 3511 l
-4017 3516 l
-4019 3518 l
-4021 3520 l
-4021 3525 l
-4021 3529 l
-4023 3531 l
-4026 3534 l
-4026 3538 l
-4026 3543 l
-4028 3545 l
-4030 3547 l
-S
-4030 3547 m
-4030 3551 l
-4030 3556 l
-4030 3560 l
-4032 3563 l
-S
-4030 4351 m
-4030 4347 l
-4030 4342 l
-4030 4338 l
-4032 4336 l
-S
-4030 4351 m
-4028 4354 l
-4026 4356 l
-4026 4360 l
-4026 4365 l
-4023 4367 l
-4021 4369 l
-4021 4374 l
-4021 4378 l
-4019 4380 l
-4017 4383 l
-4017 4387 l
-4017 4392 l
-S
-4017 4392 m
-4015 4394 l
-4012 4396 l
-4012 4401 l
-4012 4405 l
-4010 4407 l
-4008 4410 l
-4008 4414 l
-4008 4418 l
-4006 4421 l
-4003 4423 l
-4003 4427 l
-4001 4430 l
-3999 4432 l
-S
-3992 4456 m
-3994 4454 l
-3994 4450 l
-3994 4445 l
-3997 4443 l
-3999 4441 l
-3999 4436 l
-3999 4432 l
-S
-3952 3353 m
-3954 3355 l
-3954 3359 l
-3956 3362 l
-3959 3364 l
-3959 3368 l
-3961 3371 l
-3963 3373 l
-3963 3377 l
-3965 3379 l
-3968 3382 l
-3968 3386 l
-S
-3968 3386 m
-3970 3388 l
-3972 3391 l
-3972 3395 l
-3972 3400 l
-3974 3402 l
-3977 3404 l
-3977 3408 l
-3979 3411 l
-3981 3413 l
-3981 3417 l
-3983 3420 l
-3985 3422 l
-3985 3426 l
-S
-3985 3426 m
-3985 3431 l
-3988 3433 l
-3990 3435 l
-3990 3440 l
-3992 3442 l
-S
-3985 4472 m
-3985 4468 l
-3988 4465 l
-3990 4463 l
-3990 4459 l
-3992 4456 l
-S
-3985 4472 m
-3985 4477 l
-3983 4479 l
-3981 4481 l
-3981 4486 l
-3979 4488 l
-3977 4490 l
-3977 4494 l
-3974 4497 l
-3972 4499 l
-3972 4503 l
-3972 4508 l
-3970 4510 l
-3968 4512 l
-S
-3952 4546 m
-3954 4544 l
-3954 4539 l
-3956 4537 l
-3959 4535 l
-3959 4530 l
-3961 4528 l
-3963 4526 l
-3963 4521 l
-3965 4519 l
-3968 4517 l
-3968 4512 l
-S
-3912 3272 m
-3914 3274 l
-3914 3279 l
-3916 3281 l
-3918 3283 l
-3918 3288 l
-3921 3290 l
-3923 3292 l
-3923 3297 l
-3925 3299 l
-3927 3301 l
-3927 3306 l
-S
-3927 3306 m
-3930 3308 l
-3932 3310 l
-3932 3315 l
-3934 3317 l
-3936 3319 l
-3936 3324 l
-3939 3326 l
-3941 3328 l
-3941 3333 l
-3943 3335 l
-3945 3337 l
-3945 3341 l
-3947 3344 l
-3950 3346 l
-S
-3950 3346 m
-3950 3350 l
-3952 3353 l
-S
-3950 4553 m
-3950 4548 l
-3952 4546 l
-S
-3950 4553 m
-3947 4555 l
-3945 4557 l
-3945 4561 l
-3943 4564 l
-3941 4566 l
-3941 4570 l
-3939 4573 l
-3936 4575 l
-3936 4579 l
-3934 4582 l
-3932 4584 l
-3932 4588 l
-3930 4591 l
-3927 4593 l
-S
-3912 4626 m
-3914 4624 l
-3914 4620 l
-3916 4617 l
-3918 4615 l
-3918 4611 l
-3921 4608 l
-3923 4606 l
-3923 4602 l
-3925 4599 l
-3927 4597 l
-3927 4593 l
-S
-3872 3205 m
-3874 3207 l
-3874 3212 l
-3876 3214 l
-3878 3216 l
-3878 3221 l
-3880 3223 l
-3883 3225 l
-S
-3883 3225 m
-3885 3227 l
-3887 3230 l
-3887 3234 l
-3889 3236 l
-3892 3239 l
-3894 3241 l
-3896 3243 l
-3896 3248 l
-3898 3250 l
-3901 3252 l
-3901 3257 l
-3903 3259 l
-3905 3261 l
-3905 3265 l
-S
-3905 3265 m
-3907 3268 l
-3909 3270 l
-3912 3272 l
-S
-3905 4633 m
-3907 4631 l
-3909 4629 l
-3912 4626 l
-S
-3905 4633 m
-3905 4637 l
-3903 4640 l
-3901 4642 l
-3901 4646 l
-3898 4649 l
-3896 4651 l
-3896 4655 l
-3894 4658 l
-3892 4660 l
-3889 4662 l
-3887 4664 l
-3887 4669 l
-3885 4671 l
-3883 4673 l
-S
-3872 4693 m
-3874 4691 l
-3874 4687 l
-3876 4684 l
-3878 4682 l
-3878 4678 l
-3880 4675 l
-3883 4673 l
-S
-3831 3147 m
-3834 3149 l
-3836 3152 l
-3838 3154 l
-3838 3158 l
-3840 3160 l
-3842 3163 l
-3845 3165 l
-3847 3167 l
-3847 3172 l
-3849 3174 l
-3851 3176 l
-3854 3178 l
-3856 3181 l
-3856 3185 l
-S
-3856 3185 m
-3858 3187 l
-3860 3190 l
-3863 3192 l
-3865 3194 l
-3865 3198 l
-3867 3201 l
-3869 3203 l
-3872 3205 l
-S
-3856 4713 m
-3858 4711 l
-3860 4709 l
-3863 4707 l
-3865 4704 l
-3865 4700 l
-3867 4698 l
-3869 4696 l
-3872 4693 l
-S
-3831 4751 m
-3834 4749 l
-3836 4747 l
-3838 4745 l
-3838 4740 l
-3840 4738 l
-3842 4736 l
-3845 4734 l
-3847 4731 l
-3847 4727 l
-3849 4725 l
-3851 4722 l
-3854 4720 l
-3856 4718 l
-3856 4713 l
-S
-3791 3093 m
-3793 3096 l
-3796 3098 l
-3798 3100 l
-3798 3105 l
-S
-3798 3105 m
-3800 3107 l
-3802 3109 l
-3804 3111 l
-3807 3114 l
-3809 3116 l
-3811 3118 l
-3811 3122 l
-3813 3125 l
-3816 3127 l
-3818 3129 l
-3820 3131 l
-3822 3134 l
-3825 3136 l
-3825 3140 l
-3827 3143 l
-3829 3145 l
-S
-3831 3147 m
-3829 3145 l
-S
-3829 4754 m
-3831 4751 l
-S
-3829 4754 m
-3827 4756 l
-3825 4758 l
-3825 4763 l
-3822 4765 l
-3820 4767 l
-3818 4769 l
-3816 4772 l
-3813 4774 l
-3811 4776 l
-3811 4780 l
-3809 4783 l
-3807 4785 l
-3804 4787 l
-3802 4789 l
-3800 4792 l
-3798 4794 l
-S
-3791 4805 m
-3793 4803 l
-3796 4801 l
-3798 4798 l
-3798 4794 l
-S
-3751 3044 m
-3753 3047 l
-3755 3049 l
-3758 3051 l
-3760 3053 l
-3762 3055 l
-3762 3060 l
-3764 3062 l
-3766 3064 l
-S
-3766 3064 m
-3769 3067 l
-3771 3069 l
-3773 3071 l
-3775 3073 l
-3778 3076 l
-3780 3078 l
-3782 3080 l
-3784 3082 l
-3784 3087 l
-3787 3089 l
-3789 3091 l
-3791 3093 l
-S
-3766 4834 m
-3769 4832 l
-3771 4830 l
-3773 4827 l
-3775 4825 l
-3778 4823 l
-3780 4821 l
-3782 4818 l
-3784 4816 l
-3784 4812 l
-3787 4810 l
-3789 4807 l
-3791 4805 l
-S
-3751 4854 m
-3753 4852 l
-3755 4850 l
-3758 4847 l
-3760 4845 l
-3762 4843 l
-3762 4839 l
-3764 4836 l
-3766 4834 l
-S
-3711 3000 m
-3713 3002 l
-3715 3004 l
-3717 3006 l
-3720 3009 l
-3722 3011 l
-3724 3013 l
-3726 3015 l
-3729 3017 l
-3731 3020 l
-3731 3024 l
-S
-3731 3024 m
-3733 3026 l
-3735 3029 l
-3737 3031 l
-3740 3033 l
-3742 3035 l
-3744 3038 l
-3746 3040 l
-3749 3042 l
-3751 3044 l
-S
-3731 4874 m
-3733 4872 l
-3735 4870 l
-3737 4868 l
-3740 4865 l
-3742 4863 l
-3744 4861 l
-3746 4859 l
-3749 4856 l
-3751 4854 l
-S
-3711 4899 m
-3713 4897 l
-3715 4894 l
-3717 4892 l
-3720 4890 l
-3722 4888 l
-3724 4885 l
-3726 4883 l
-3729 4881 l
-3731 4879 l
-3731 4874 l
-S
-3670 2959 m
-3673 2962 l
-3675 2964 l
-3677 2966 l
-3679 2968 l
-3682 2971 l
-3684 2973 l
-3686 2975 l
-3688 2977 l
-3691 2979 l
-3693 2982 l
-3695 2984 l
-S
-3695 2984 m
-3697 2986 l
-3699 2988 l
-3702 2991 l
-3704 2993 l
-3706 2995 l
-3708 2997 l
-3711 3000 l
-S
-3695 4915 m
-3697 4912 l
-3699 4910 l
-3702 4908 l
-3704 4906 l
-3706 4903 l
-3708 4901 l
-3711 4899 l
-S
-3670 4939 m
-3673 4937 l
-3675 4935 l
-3677 4932 l
-3679 4930 l
-3682 4928 l
-3684 4926 l
-3686 4923 l
-3688 4921 l
-3691 4919 l
-3693 4917 l
-3695 4915 l
-S
-3630 2924 m
-3635 2924 l
-3637 2926 l
-3639 2928 l
-3641 2930 l
-3644 2933 l
-3646 2935 l
-3648 2937 l
-3650 2939 l
-3653 2941 l
-3655 2944 l
-S
-3655 2944 m
-3657 2946 l
-3659 2948 l
-3661 2950 l
-3664 2953 l
-3666 2955 l
-3668 2957 l
-3670 2959 l
-S
-3655 4955 m
-3657 4953 l
-3659 4950 l
-3661 4948 l
-3664 4946 l
-3666 4944 l
-3668 4941 l
-3670 4939 l
-S
-3630 4975 m
-3635 4975 l
-3637 4973 l
-3639 4970 l
-3641 4968 l
-3644 4966 l
-3646 4964 l
-3648 4961 l
-3650 4959 l
-3653 4957 l
-3655 4955 l
-S
-3590 2888 m
-3592 2890 l
-3594 2892 l
-3599 2892 l
-3601 2895 l
-3603 2897 l
-3606 2899 l
-3608 2901 l
-3610 2903 l
-S
-3610 2903 m
-3612 2906 l
-3615 2908 l
-3617 2910 l
-3619 2912 l
-3621 2915 l
-3623 2917 l
-3626 2919 l
-3628 2921 l
-3630 2924 l
-S
-3610 4995 m
-3612 4993 l
-3615 4990 l
-3617 4988 l
-3619 4986 l
-3621 4984 l
-3623 4982 l
-3626 4979 l
-3628 4977 l
-3630 4975 l
-S
-3590 5011 m
-3592 5008 l
-3594 5006 l
-3599 5006 l
-3601 5004 l
-3603 5002 l
-3606 4999 l
-3608 4997 l
-3610 4995 l
-S
-3550 2857 m
-3554 2857 l
-3556 2859 l
-3559 2861 l
-3561 2863 l
-S
-3561 2863 m
-3563 2866 l
-3565 2868 l
-3568 2870 l
-3572 2870 l
-3574 2872 l
-3577 2874 l
-3579 2877 l
-3581 2879 l
-3583 2881 l
-3585 2883 l
-3588 2886 l
-3590 2888 l
-S
-3561 5035 m
-3563 5033 l
-3565 5031 l
-3568 5028 l
-3572 5028 l
-3574 5026 l
-3577 5024 l
-3579 5022 l
-3581 5020 l
-3583 5017 l
-3585 5015 l
-3588 5013 l
-3590 5011 l
-S
-3550 5042 m
-3554 5042 l
-3556 5040 l
-3559 5037 l
-3561 5035 l
-S
-3510 2825 m
-3512 2828 l
-3514 2830 l
-3518 2830 l
-3521 2832 l
-3523 2834 l
-3525 2836 l
-3527 2839 l
-3530 2841 l
-3532 2843 l
-3536 2843 l
-3539 2845 l
-3541 2848 l
-3543 2850 l
-3545 2852 l
-3548 2854 l
-3550 2857 l
-S
-3510 5073 m
-3512 5071 l
-3514 5069 l
-3518 5069 l
-3521 5066 l
-3523 5064 l
-3525 5062 l
-3527 5060 l
-3530 5058 l
-3532 5055 l
-3536 5055 l
-3539 5053 l
-3541 5051 l
-3543 5049 l
-3545 5046 l
-3548 5044 l
-3550 5042 l
-S
-3469 2798 m
-3474 2798 l
-3476 2801 l
-3478 2803 l
-3480 2805 l
-3483 2807 l
-3487 2807 l
-3489 2810 l
-3492 2812 l
-3494 2814 l
-3496 2816 l
-3501 2816 l
-3503 2819 l
-3505 2821 l
-3507 2823 l
-S
-3510 2825 m
-3507 2823 l
-S
-3507 5075 m
-3510 5073 l
-S
-3469 5100 m
-3474 5100 l
-3476 5098 l
-3478 5096 l
-3480 5093 l
-3483 5091 l
-3487 5091 l
-3489 5089 l
-3492 5087 l
-3494 5084 l
-3496 5082 l
-3501 5082 l
-3503 5080 l
-3505 5078 l
-3507 5075 l
-S
-3429 2772 m
-3431 2774 l
-3434 2776 l
-3438 2776 l
-3440 2778 l
-3442 2781 l
-3447 2781 l
-3449 2783 l
-S
-3449 2783 m
-3451 2785 l
-3454 2787 l
-3456 2790 l
-3460 2790 l
-3463 2792 l
-3465 2794 l
-3467 2796 l
-3469 2798 l
-S
-3449 5116 m
-3451 5113 l
-3454 5111 l
-3456 5109 l
-3460 5109 l
-3463 5107 l
-3465 5104 l
-3467 5102 l
-3469 5100 l
-S
-3429 5127 m
-3431 5125 l
-3434 5122 l
-3438 5122 l
-3440 5120 l
-3442 5118 l
-3447 5118 l
-3449 5116 l
-S
-3389 2749 m
-3393 2749 l
-3396 2752 l
-3398 2754 l
-3402 2754 l
-3405 2756 l
-3407 2758 l
-3411 2758 l
-3413 2760 l
-3416 2763 l
-3418 2765 l
-3420 2767 l
-3425 2767 l
-3427 2769 l
-3429 2772 l
-S
-3389 5149 m
-3393 5149 l
-3396 5147 l
-3398 5145 l
-3402 5145 l
-3405 5142 l
-3407 5140 l
-3411 5140 l
-3413 5138 l
-3416 5136 l
-3418 5133 l
-3420 5131 l
-3425 5131 l
-3427 5129 l
-3429 5127 l
-S
-3349 2727 m
-3353 2727 l
-3355 2729 l
-3358 2731 l
-3362 2731 l
-3364 2734 l
-3367 2736 l
-3371 2736 l
-3373 2738 l
-3375 2740 l
-3380 2740 l
-3382 2743 l
-S
-3382 2743 m
-3384 2745 l
-3387 2747 l
-3389 2749 l
-S
-3382 5156 m
-3384 5154 l
-3387 5151 l
-3389 5149 l
-S
-3349 5171 m
-3353 5171 l
-3355 5169 l
-3358 5167 l
-3362 5167 l
-3364 5165 l
-3367 5163 l
-3371 5163 l
-3373 5160 l
-3375 5158 l
-3380 5158 l
-3382 5156 l
-S
-3308 2705 m
-3311 2707 l
-3313 2709 l
-3317 2709 l
-3320 2711 l
-3322 2714 l
-3326 2714 l
-3329 2716 l
-3331 2718 l
-3335 2718 l
-3337 2720 l
-3340 2723 l
-3344 2723 l
-3346 2725 l
-3349 2727 l
-S
-3308 5194 m
-3311 5192 l
-3313 5189 l
-3317 5189 l
-3320 5187 l
-3322 5185 l
-3326 5185 l
-3329 5183 l
-3331 5180 l
-3335 5180 l
-3337 5178 l
-3340 5176 l
-3344 5176 l
-3346 5174 l
-3349 5171 l
-S
-3268 2687 m
-3273 2687 l
-3275 2689 l
-3277 2691 l
-3282 2691 l
-3284 2693 l
-3286 2696 l
-3291 2696 l
-3293 2698 l
-3295 2700 l
-3299 2700 l
-3302 2702 l
-S
-3308 2705 m
-3304 2705 l
-3302 2702 l
-S
-3302 5196 m
-3304 5194 l
-3308 5194 l
-S
-3268 5212 m
-3273 5212 l
-3275 5209 l
-3277 5207 l
-3282 5207 l
-3284 5205 l
-3286 5203 l
-3291 5203 l
-3293 5201 l
-3295 5198 l
-3299 5198 l
-3302 5196 l
-S
-3228 2669 m
-3232 2669 l
-3235 2671 l
-3237 2673 l
-3241 2673 l
-3244 2676 l
-3246 2678 l
-3250 2678 l
-3253 2680 l
-3255 2682 l
-3259 2682 l
-3264 2682 l
-3266 2685 l
-3268 2687 l
-S
-3228 5230 m
-3232 5230 l
-3235 5227 l
-3237 5225 l
-3241 5225 l
-3244 5223 l
-3246 5221 l
-3250 5221 l
-3253 5218 l
-3255 5216 l
-3259 5216 l
-3264 5216 l
-3266 5214 l
-3268 5212 l
-S
-3188 2655 m
-3192 2655 l
-3197 2655 l
-3199 2658 l
-3201 2660 l
-3206 2660 l
-3210 2660 l
-3212 2662 l
-S
-3212 2662 m
-3215 2664 l
-3219 2664 l
-3221 2667 l
-3224 2669 l
-3228 2669 l
-S
-3212 5236 m
-3215 5234 l
-3219 5234 l
-3221 5232 l
-3224 5230 l
-3228 5230 l
-S
-3188 5243 m
-3192 5243 l
-3197 5243 l
-3199 5241 l
-3201 5239 l
-3206 5239 l
-3210 5239 l
-3212 5236 l
-S
-3148 2638 m
-3150 2640 l
-3152 2642 l
-3156 2642 l
-3161 2642 l
-3163 2644 l
-3165 2647 l
-3170 2647 l
-3174 2647 l
-3177 2649 l
-3179 2651 l
-3183 2651 l
-3186 2653 l
-3188 2655 l
-S
-3148 5261 m
-3150 5259 l
-3152 5256 l
-3156 5256 l
-3161 5256 l
-3163 5254 l
-3165 5252 l
-3170 5252 l
-3174 5252 l
-3177 5250 l
-3179 5247 l
-3183 5247 l
-3186 5245 l
-3188 5243 l
-S
-3107 2624 m
-3110 2626 l
-3112 2629 l
-3116 2629 l
-3121 2629 l
-3123 2631 l
-3125 2633 l
-3130 2633 l
-3134 2633 l
-3136 2635 l
-3139 2638 l
-3143 2638 l
-3148 2638 l
-S
-3107 5274 m
-3110 5272 l
-3112 5270 l
-3116 5270 l
-3121 5270 l
-3123 5268 l
-3125 5265 l
-3130 5265 l
-3134 5265 l
-3136 5263 l
-3139 5261 l
-3143 5261 l
-3148 5261 l
-S
-3067 2615 m
-3072 2615 l
-3076 2615 l
-3078 2617 l
-3081 2620 l
-3085 2620 l
-3089 2620 l
-3092 2622 l
-S
-3107 2624 m
-3103 2624 l
-3098 2624 l
-3094 2624 l
-3092 2622 l
-S
-3092 5277 m
-3094 5274 l
-3098 5274 l
-3103 5274 l
-3107 5274 l
-S
-3067 5283 m
-3072 5283 l
-3076 5283 l
-3078 5281 l
-3081 5279 l
-3085 5279 l
-3089 5279 l
-3092 5277 l
-S
-3027 2606 m
-3031 2606 l
-3036 2606 l
-3040 2606 l
-3043 2609 l
-3045 2611 l
-3049 2611 l
-3054 2611 l
-3058 2611 l
-3060 2613 l
-3063 2615 l
-3067 2615 l
-S
-3027 5292 m
-3031 5292 l
-3036 5292 l
-3040 5292 l
-3043 5290 l
-3045 5288 l
-3049 5288 l
-3054 5288 l
-3058 5288 l
-3060 5285 l
-3063 5283 l
-3067 5283 l
-S
-2987 2597 m
-2991 2597 l
-2996 2597 l
-3000 2597 l
-3005 2597 l
-3007 2600 l
-3009 2602 l
-3013 2602 l
-3018 2602 l
-3022 2602 l
-3025 2604 l
-3027 2606 l
-S
-2987 5301 m
-2991 5301 l
-2996 5301 l
-3000 5301 l
-3005 5301 l
-3007 5299 l
-3009 5297 l
-3013 5297 l
-3018 5297 l
-3022 5297 l
-3025 5294 l
-3027 5292 l
-S
-2946 2588 m
-2951 2588 l
-2955 2588 l
-2960 2588 l
-2962 2591 l
-2964 2593 l
-2969 2593 l
-2973 2593 l
-2978 2593 l
-2982 2593 l
-2984 2595 l
-2987 2597 l
-S
-2946 5310 m
-2951 5310 l
-2955 5310 l
-2960 5310 l
-2962 5308 l
-2964 5306 l
-2969 5306 l
-2973 5306 l
-2978 5306 l
-2982 5306 l
-2984 5303 l
-2987 5301 l
-S
-2906 2579 m
-2908 2582 l
-S
-2908 2582 m
-2911 2584 l
-2915 2584 l
-2920 2584 l
-2924 2584 l
-2929 2584 l
-2933 2584 l
-2935 2586 l
-2938 2588 l
-2942 2588 l
-2946 2588 l
-S
-2908 5317 m
-2911 5314 l
-2915 5314 l
-2920 5314 l
-2924 5314 l
-2929 5314 l
-2933 5314 l
-2935 5312 l
-2938 5310 l
-2942 5310 l
-2946 5310 l
-S
-2906 5319 m
-2908 5317 l
-S
-2866 2575 m
-2870 2575 l
-2875 2575 l
-2877 2577 l
-2879 2579 l
-2884 2579 l
-2888 2579 l
-2893 2579 l
-2897 2579 l
-2902 2579 l
-2906 2579 l
-S
-2906 5319 m
-2902 5319 l
-2897 5319 l
-2893 5319 l
-2888 5319 l
-2884 5319 l
-2879 5319 l
-2877 5321 l
-2875 5323 l
-2870 5323 l
-2866 5323 l
-S
-2826 2571 m
-2830 2571 l
-2835 2571 l
-2837 2573 l
-2839 2575 l
-2844 2575 l
-2848 2575 l
-2853 2575 l
-2857 2575 l
-2862 2575 l
-2866 2575 l
-S
-2826 5328 m
-2830 5328 l
-2835 5328 l
-2837 5326 l
-2839 5323 l
-2844 5323 l
-2848 5323 l
-2853 5323 l
-2857 5323 l
-2862 5323 l
-2866 5323 l
-S
-2786 2571 m
-2790 2571 l
-2794 2571 l
-2799 2571 l
-2803 2571 l
-2808 2571 l
-2812 2571 l
-2817 2571 l
-2821 2571 l
-2826 2571 l
-S
-2786 5328 m
-2790 5328 l
-2794 5328 l
-2799 5328 l
-2803 5328 l
-2808 5328 l
-2812 5328 l
-2817 5328 l
-2821 5328 l
-2826 5328 l
-S
-2745 2566 m
-2750 2566 l
-2754 2566 l
-2759 2566 l
-2763 2566 l
-2768 2566 l
-2772 2566 l
-2774 2568 l
-2777 2571 l
-2781 2571 l
-2786 2571 l
-S
-2745 5332 m
-2750 5332 l
-2754 5332 l
-2759 5332 l
-2763 5332 l
-2768 5332 l
-2772 5332 l
-2774 5330 l
-2777 5328 l
-2781 5328 l
-2786 5328 l
-S
-2705 2566 m
-2710 2566 l
-2714 2566 l
-2719 2566 l
-2723 2566 l
-2727 2566 l
-2732 2566 l
-2736 2566 l
-2741 2566 l
-2745 2566 l
-S
-2705 5332 m
-2710 5332 l
-2714 5332 l
-2719 5332 l
-2723 5332 l
-2727 5332 l
-2732 5332 l
-2736 5332 l
-2741 5332 l
-2745 5332 l
-S
-2665 2566 m
-2669 2566 l
-2674 2566 l
-2678 2566 l
-2683 2566 l
-2687 2566 l
-2692 2566 l
-2696 2566 l
-2701 2566 l
-2705 2566 l
-S
-2665 5332 m
-2669 5332 l
-2674 5332 l
-2678 5332 l
-2683 5332 l
-2687 5332 l
-2692 5332 l
-2696 5332 l
-2701 5332 l
-2705 5332 l
-S
-2625 2571 m
-2629 2571 l
-2634 2571 l
-2636 2568 l
-2638 2566 l
-2643 2566 l
-2647 2566 l
-2651 2566 l
-2656 2566 l
-2660 2566 l
-2665 2566 l
-S
-2625 5328 m
-2629 5328 l
-2634 5328 l
-2636 5330 l
-2638 5332 l
-2643 5332 l
-2647 5332 l
-2651 5332 l
-2656 5332 l
-2660 5332 l
-2665 5332 l
-S
-2584 2571 m
-2589 2571 l
-2593 2571 l
-2598 2571 l
-2602 2571 l
-2607 2571 l
-2611 2571 l
-2616 2571 l
-2620 2571 l
-2625 2571 l
-S
-2584 5328 m
-2589 5328 l
-2593 5328 l
-2598 5328 l
-2602 5328 l
-2607 5328 l
-2611 5328 l
-2616 5328 l
-2620 5328 l
-2625 5328 l
-S
-2544 2575 m
-2549 2575 l
-2553 2575 l
-2558 2575 l
-2562 2575 l
-2567 2575 l
-2571 2575 l
-2573 2573 l
-2576 2571 l
-2580 2571 l
-2584 2571 l
-S
-2544 5323 m
-2549 5323 l
-2553 5323 l
-2558 5323 l
-2562 5323 l
-2567 5323 l
-2571 5323 l
-2573 5326 l
-2576 5328 l
-2580 5328 l
-2584 5328 l
-S
-2504 2579 m
-2508 2579 l
-2513 2579 l
-2517 2579 l
-2522 2579 l
-2526 2579 l
-2531 2579 l
-2533 2577 l
-2535 2575 l
-2540 2575 l
-2544 2575 l
-S
-2504 5319 m
-2508 5319 l
-2513 5319 l
-2517 5319 l
-2522 5319 l
-2526 5319 l
-2531 5319 l
-2533 5321 l
-2535 5323 l
-2540 5323 l
-2544 5323 l
-S
-2502 2582 m
-2504 2579 l
-S
-2464 2588 m
-2468 2588 l
-2473 2588 l
-2475 2586 l
-2477 2584 l
-2482 2584 l
-2486 2584 l
-2491 2584 l
-2495 2584 l
-2500 2584 l
-2502 2582 l
-S
-2464 5310 m
-2468 5310 l
-2473 5310 l
-2475 5312 l
-2477 5314 l
-2482 5314 l
-2486 5314 l
-2491 5314 l
-2495 5314 l
-2500 5314 l
-2502 5317 l
-S
-2504 5319 m
-2502 5317 l
-S
-2424 2597 m
-2426 2595 l
-2428 2593 l
-2433 2593 l
-2437 2593 l
-2441 2593 l
-2446 2593 l
-2448 2591 l
-2450 2588 l
-2455 2588 l
-2459 2588 l
-2464 2588 l
-S
-2424 5301 m
-2426 5303 l
-2428 5306 l
-2433 5306 l
-2437 5306 l
-2441 5306 l
-2446 5306 l
-2448 5308 l
-2450 5310 l
-2455 5310 l
-2459 5310 l
-2464 5310 l
-S
-2383 2606 m
-2386 2604 l
-2388 2602 l
-2392 2602 l
-2397 2602 l
-2401 2602 l
-2403 2600 l
-2406 2597 l
-2410 2597 l
-2415 2597 l
-2419 2597 l
-2424 2597 l
-S
-2383 5292 m
-2386 5294 l
-2388 5297 l
-2392 5297 l
-2397 5297 l
-2401 5297 l
-2403 5299 l
-2406 5301 l
-2410 5301 l
-2415 5301 l
-2419 5301 l
-2424 5301 l
-S
-2343 2615 m
-2348 2615 l
-2350 2613 l
-2352 2611 l
-2357 2611 l
-2361 2611 l
-2365 2611 l
-2368 2609 l
-2370 2606 l
-2374 2606 l
-2379 2606 l
-2383 2606 l
-S
-2343 5283 m
-2348 5283 l
-2350 5285 l
-2352 5288 l
-2357 5288 l
-2361 5288 l
-2365 5288 l
-2368 5290 l
-2370 5292 l
-2374 5292 l
-2379 5292 l
-2383 5292 l
-S
-2319 2622 m
-2321 2620 l
-2325 2620 l
-2330 2620 l
-2332 2617 l
-2334 2615 l
-2339 2615 l
-2343 2615 l
-S
-2303 2624 m
-2307 2624 l
-2312 2624 l
-2316 2624 l
-2319 2622 l
-S
-2303 5274 m
-2307 5274 l
-2312 5274 l
-2316 5274 l
-2319 5277 l
-S
-2319 5277 m
-2321 5279 l
-2325 5279 l
-2330 5279 l
-2332 5281 l
-2334 5283 l
-2339 5283 l
-2343 5283 l
-S
-2303 2624 m
-2301 2626 l
-2298 2629 l
-2294 2629 l
-2290 2629 l
-2287 2631 l
-2285 2633 l
-2281 2633 l
-2276 2633 l
-2274 2635 l
-2272 2638 l
-2267 2638 l
-2263 2638 l
-S
-2263 5261 m
-2267 5261 l
-2272 5261 l
-2274 5263 l
-2276 5265 l
-2281 5265 l
-2285 5265 l
-2287 5268 l
-2290 5270 l
-2294 5270 l
-2298 5270 l
-2301 5272 l
-2303 5274 l
-S
-2222 2655 m
-2225 2653 l
-2227 2651 l
-2231 2651 l
-2234 2649 l
-2236 2647 l
-2240 2647 l
-2245 2647 l
-2247 2644 l
-2249 2642 l
-2254 2642 l
-2258 2642 l
-2260 2640 l
-2263 2638 l
-S
-2222 5243 m
-2225 5245 l
-2227 5247 l
-2231 5247 l
-2234 5250 l
-2236 5252 l
-2240 5252 l
-2245 5252 l
-2247 5254 l
-2249 5256 l
-2254 5256 l
-2258 5256 l
-2260 5259 l
-2263 5261 l
-S
-2198 2662 m
-2200 2660 l
-2205 2660 l
-2209 2660 l
-2211 2658 l
-2214 2655 l
-2218 2655 l
-2222 2655 l
-S
-2182 2669 m
-2187 2669 l
-2189 2667 l
-2191 2664 l
-2196 2664 l
-2198 2662 l
-S
-2182 5230 m
-2187 5230 l
-2189 5232 l
-2191 5234 l
-2196 5234 l
-2198 5236 l
-S
-2198 5236 m
-2200 5239 l
-2205 5239 l
-2209 5239 l
-2211 5241 l
-2214 5243 l
-2218 5243 l
-2222 5243 l
-S
-2142 2687 m
-2144 2685 l
-2147 2682 l
-2151 2682 l
-2155 2682 l
-2158 2680 l
-2160 2678 l
-2164 2678 l
-2167 2676 l
-2169 2673 l
-2173 2673 l
-2176 2671 l
-2178 2669 l
-2182 2669 l
-S
-2142 5212 m
-2144 5214 l
-2147 5216 l
-2151 5216 l
-2155 5216 l
-2158 5218 l
-2160 5221 l
-2164 5221 l
-2167 5223 l
-2169 5225 l
-2173 5225 l
-2176 5227 l
-2178 5230 l
-2182 5230 l
-S
-2109 2702 m
-2111 2700 l
-2115 2700 l
-2117 2698 l
-2120 2696 l
-2124 2696 l
-2126 2693 l
-2129 2691 l
-2133 2691 l
-2135 2689 l
-2138 2687 l
-2142 2687 l
-S
-2102 2705 m
-2106 2705 l
-2109 2702 l
-S
-2102 5194 m
-2106 5194 l
-2109 5196 l
-S
-2109 5196 m
-2111 5198 l
-2115 5198 l
-2117 5201 l
-2120 5203 l
-2124 5203 l
-2126 5205 l
-2129 5207 l
-2133 5207 l
-2135 5209 l
-2138 5212 l
-2142 5212 l
-S
-2102 2705 m
-2100 2707 l
-2097 2709 l
-2093 2709 l
-2091 2711 l
-2088 2714 l
-2084 2714 l
-2082 2716 l
-2079 2718 l
-2075 2718 l
-2073 2720 l
-2071 2723 l
-2066 2723 l
-2064 2725 l
-2062 2727 l
-S
-2062 5171 m
-2064 5174 l
-2066 5176 l
-2071 5176 l
-2073 5178 l
-2075 5180 l
-2079 5180 l
-2082 5183 l
-2084 5185 l
-2088 5185 l
-2091 5187 l
-2093 5189 l
-2097 5189 l
-2100 5192 l
-2102 5194 l
-S
-2028 2743 m
-2030 2740 l
-2035 2740 l
-2037 2738 l
-2039 2736 l
-2044 2736 l
-2046 2734 l
-2048 2731 l
-2053 2731 l
-2055 2729 l
-2057 2727 l
-2062 2727 l
-S
-2021 2749 m
-2024 2747 l
-2026 2745 l
-2028 2743 l
-S
-2021 5149 m
-2024 5151 l
-2026 5154 l
-2028 5156 l
-S
-2028 5156 m
-2030 5158 l
-2035 5158 l
-2037 5160 l
-2039 5163 l
-2044 5163 l
-2046 5165 l
-2048 5167 l
-2053 5167 l
-2055 5169 l
-2057 5171 l
-2062 5171 l
-S
-1981 2772 m
-1983 2769 l
-1986 2767 l
-1990 2767 l
-1992 2765 l
-1995 2763 l
-1997 2760 l
-1999 2758 l
-2003 2758 l
-2006 2756 l
-2008 2754 l
-2012 2754 l
-2015 2752 l
-2017 2749 l
-2021 2749 l
-S
-1981 5127 m
-1983 5129 l
-1986 5131 l
-1990 5131 l
-1992 5133 l
-1995 5136 l
-1997 5138 l
-1999 5140 l
-2003 5140 l
-2006 5142 l
-2008 5145 l
-2012 5145 l
-2015 5147 l
-2017 5149 l
-2021 5149 l
-S
-1961 2783 m
-1963 2781 l
-1968 2781 l
-1970 2778 l
-1972 2776 l
-1977 2776 l
-1979 2774 l
-1981 2772 l
-S
-1941 2798 m
-1943 2796 l
-1945 2794 l
-1948 2792 l
-1950 2790 l
-1954 2790 l
-1957 2787 l
-1959 2785 l
-1961 2783 l
-S
-1941 5100 m
-1943 5102 l
-1945 5104 l
-1948 5107 l
-1950 5109 l
-1954 5109 l
-1957 5111 l
-1959 5113 l
-1961 5116 l
-S
-1961 5116 m
-1963 5118 l
-1968 5118 l
-1970 5120 l
-1972 5122 l
-1977 5122 l
-1979 5125 l
-1981 5127 l
-S
-1903 2823 m
-1905 2821 l
-1907 2819 l
-1910 2816 l
-1914 2816 l
-1916 2814 l
-1919 2812 l
-1921 2810 l
-1923 2807 l
-1928 2807 l
-1930 2805 l
-1932 2803 l
-1934 2801 l
-1936 2798 l
-1941 2798 l
-S
-1901 2825 m
-1903 2823 l
-S
-1901 5073 m
-1903 5075 l
-S
-1903 5075 m
-1905 5078 l
-1907 5080 l
-1910 5082 l
-1914 5082 l
-1916 5084 l
-1919 5087 l
-1921 5089 l
-1923 5091 l
-1928 5091 l
-1930 5093 l
-1932 5096 l
-1934 5098 l
-1936 5100 l
-1941 5100 l
-S
-1901 2825 m
-1898 2828 l
-1896 2830 l
-1892 2830 l
-1890 2832 l
-1887 2834 l
-1885 2836 l
-1883 2839 l
-1881 2841 l
-1878 2843 l
-1874 2843 l
-1872 2845 l
-1869 2848 l
-1867 2850 l
-1865 2852 l
-1863 2854 l
-1860 2857 l
-S
-1860 5042 m
-1863 5044 l
-1865 5046 l
-1867 5049 l
-1869 5051 l
-1872 5053 l
-1874 5055 l
-1878 5055 l
-1881 5058 l
-1883 5060 l
-1885 5062 l
-1887 5064 l
-1890 5066 l
-1892 5069 l
-1896 5069 l
-1898 5071 l
-1901 5073 l
-S
-1849 2863 m
-1852 2861 l
-1854 2859 l
-1856 2857 l
-1860 2857 l
-S
-1820 2888 m
-1823 2886 l
-1825 2883 l
-1827 2881 l
-1829 2879 l
-1831 2877 l
-1834 2874 l
-1836 2872 l
-1838 2870 l
-1843 2870 l
-1845 2868 l
-1847 2866 l
-1849 2863 l
-S
-1820 5011 m
-1823 5013 l
-1825 5015 l
-1827 5017 l
-1829 5020 l
-1831 5022 l
-1834 5024 l
-1836 5026 l
-1838 5028 l
-1843 5028 l
-1845 5031 l
-1847 5033 l
-1849 5035 l
-S
-1849 5035 m
-1852 5037 l
-1854 5040 l
-1856 5042 l
-1860 5042 l
-S
-1800 2903 m
-1802 2901 l
-1805 2899 l
-1807 2897 l
-1809 2895 l
-1811 2892 l
-1816 2892 l
-1818 2890 l
-1820 2888 l
-S
-1780 2924 m
-1782 2921 l
-1785 2919 l
-1787 2917 l
-1789 2915 l
-1791 2912 l
-1793 2910 l
-1796 2908 l
-1798 2906 l
-1800 2903 l
-S
-1780 4975 m
-1782 4977 l
-1785 4979 l
-1787 4982 l
-1789 4984 l
-1791 4986 l
-1793 4988 l
-1796 4990 l
-1798 4993 l
-1800 4995 l
-S
-1800 4995 m
-1802 4997 l
-1805 4999 l
-1807 5002 l
-1809 5004 l
-1811 5006 l
-1816 5006 l
-1818 5008 l
-1820 5011 l
-S
-1755 2944 m
-1758 2941 l
-1760 2939 l
-1762 2937 l
-1764 2935 l
-1767 2933 l
-1769 2930 l
-1771 2928 l
-1773 2926 l
-1776 2924 l
-1780 2924 l
-S
-1740 2959 m
-1742 2957 l
-1744 2955 l
-1747 2953 l
-1749 2950 l
-1751 2948 l
-1753 2946 l
-1755 2944 l
-S
-1740 4939 m
-1742 4941 l
-1744 4944 l
-1747 4946 l
-1749 4948 l
-1751 4950 l
-1753 4953 l
-1755 4955 l
-S
-1755 4955 m
-1758 4957 l
-1760 4959 l
-1762 4961 l
-1764 4964 l
-1767 4966 l
-1769 4968 l
-1771 4970 l
-1773 4973 l
-1776 4975 l
-1780 4975 l
-S
-1715 2984 m
-1717 2982 l
-1720 2979 l
-1722 2977 l
-1724 2975 l
-1726 2973 l
-1729 2971 l
-1731 2968 l
-1733 2966 l
-1735 2964 l
-1738 2962 l
-1740 2959 l
-S
-1700 3000 m
-1702 2997 l
-1704 2995 l
-1706 2993 l
-1709 2991 l
-1711 2988 l
-1713 2986 l
-1715 2984 l
-S
-1700 4899 m
-1702 4901 l
-1704 4903 l
-1706 4906 l
-1709 4908 l
-1711 4910 l
-1713 4912 l
-1715 4915 l
-S
-1715 4915 m
-1717 4917 l
-1720 4919 l
-1722 4921 l
-1724 4923 l
-1726 4926 l
-1729 4928 l
-1731 4930 l
-1733 4932 l
-1735 4935 l
-1738 4937 l
-1740 4939 l
-S
-1679 3024 m
-1679 3020 l
-1682 3017 l
-1684 3015 l
-1686 3013 l
-1688 3011 l
-1691 3009 l
-1693 3006 l
-1695 3004 l
-1697 3002 l
-1700 3000 l
-S
-1659 3044 m
-1662 3042 l
-1664 3040 l
-1666 3038 l
-1668 3035 l
-1671 3033 l
-1673 3031 l
-1675 3029 l
-1677 3026 l
-1679 3024 l
-S
-1659 4854 m
-1662 4856 l
-1664 4859 l
-1666 4861 l
-1668 4863 l
-1671 4865 l
-1673 4868 l
-1675 4870 l
-1677 4872 l
-1679 4874 l
-S
-1679 4874 m
-1679 4879 l
-1682 4881 l
-1684 4883 l
-1686 4885 l
-1688 4888 l
-1691 4890 l
-1693 4892 l
-1695 4894 l
-1697 4897 l
-1700 4899 l
-S
-1644 3064 m
-1646 3062 l
-1648 3060 l
-1648 3055 l
-1650 3053 l
-1653 3051 l
-1655 3049 l
-1657 3047 l
-1659 3044 l
-S
-1619 3093 m
-1621 3091 l
-1624 3089 l
-1626 3087 l
-1626 3082 l
-1628 3080 l
-1630 3078 l
-1633 3076 l
-1635 3073 l
-1637 3071 l
-1639 3069 l
-1642 3067 l
-1644 3064 l
-S
-1619 4805 m
-1621 4807 l
-1624 4810 l
-1626 4812 l
-1626 4816 l
-1628 4818 l
-1630 4821 l
-1633 4823 l
-1635 4825 l
-1637 4827 l
-1639 4830 l
-1642 4832 l
-1644 4834 l
-S
-1644 4834 m
-1646 4836 l
-1648 4839 l
-1648 4843 l
-1650 4845 l
-1653 4847 l
-1655 4850 l
-1657 4852 l
-1659 4854 l
-S
-1612 3105 m
-1612 3100 l
-1615 3098 l
-1617 3096 l
-1619 3093 l
-S
-1612 3105 m
-1610 3107 l
-1608 3109 l
-1606 3111 l
-1604 3114 l
-1601 3116 l
-1599 3118 l
-1599 3122 l
-1597 3125 l
-1595 3127 l
-1592 3129 l
-1590 3131 l
-1588 3134 l
-1586 3136 l
-1586 3140 l
-1583 3143 l
-1581 3145 l
-S
-1579 3147 m
-1581 3145 l
-S
-1579 4751 m
-1581 4754 l
-S
-1581 4754 m
-1583 4756 l
-1586 4758 l
-1586 4763 l
-1588 4765 l
-1590 4767 l
-1592 4769 l
-1595 4772 l
-1597 4774 l
-1599 4776 l
-1599 4780 l
-1601 4783 l
-1604 4785 l
-1606 4787 l
-1608 4789 l
-1610 4792 l
-1612 4794 l
-S
-1612 4794 m
-1612 4798 l
-1615 4801 l
-1617 4803 l
-1619 4805 l
-S
-1579 3147 m
-1577 3149 l
-1574 3152 l
-1572 3154 l
-1572 3158 l
-1570 3160 l
-1568 3163 l
-1566 3165 l
-1563 3167 l
-1563 3172 l
-1561 3174 l
-1559 3176 l
-1557 3178 l
-1554 3181 l
-1554 3185 l
-S
-1539 3205 m
-1541 3203 l
-1543 3201 l
-1545 3198 l
-1545 3194 l
-1548 3192 l
-1550 3190 l
-1552 3187 l
-1554 3185 l
-S
-1539 4693 m
-1541 4696 l
-1543 4698 l
-1545 4700 l
-1545 4704 l
-1548 4707 l
-1550 4709 l
-1552 4711 l
-1554 4713 l
-S
-1554 4713 m
-1554 4718 l
-1557 4720 l
-1559 4722 l
-1561 4725 l
-1563 4727 l
-1563 4731 l
-1566 4734 l
-1568 4736 l
-1570 4738 l
-1572 4740 l
-1572 4745 l
-1574 4747 l
-1577 4749 l
-1579 4751 l
-S
-1528 3225 m
-1530 3223 l
-1532 3221 l
-1532 3216 l
-1534 3214 l
-1536 3212 l
-1536 3207 l
-1539 3205 l
-S
-1528 3225 m
-1525 3227 l
-1523 3230 l
-1523 3234 l
-1521 3236 l
-1519 3239 l
-1516 3241 l
-1514 3243 l
-1514 3248 l
-1512 3250 l
-1510 3252 l
-1510 3257 l
-1507 3259 l
-1505 3261 l
-1505 3265 l
-S
-1499 3272 m
-1501 3270 l
-1503 3268 l
-1505 3265 l
-S
-1499 4626 m
-1501 4629 l
-1503 4631 l
-1505 4633 l
-S
-1505 4633 m
-1505 4637 l
-1507 4640 l
-1510 4642 l
-1510 4646 l
-1512 4649 l
-1514 4651 l
-1514 4655 l
-1516 4658 l
-1519 4660 l
-1521 4662 l
-1523 4664 l
-1523 4669 l
-1525 4671 l
-1528 4673 l
-S
-1528 4673 m
-1530 4675 l
-1532 4678 l
-1532 4682 l
-1534 4684 l
-1536 4687 l
-1536 4691 l
-1539 4693 l
-S
-1483 3306 m
-1483 3301 l
-1485 3299 l
-1487 3297 l
-1487 3292 l
-1490 3290 l
-1492 3288 l
-1492 3283 l
-1494 3281 l
-1496 3279 l
-1496 3274 l
-1499 3272 l
-S
-1483 3306 m
-1481 3308 l
-1478 3310 l
-1478 3315 l
-1476 3317 l
-1474 3319 l
-1474 3324 l
-1472 3326 l
-1469 3328 l
-1469 3333 l
-1467 3335 l
-1465 3337 l
-1465 3341 l
-1463 3344 l
-1461 3346 l
-S
-1458 3353 m
-1461 3350 l
-1461 3346 l
-S
-1458 4546 m
-1461 4548 l
-1461 4553 l
-S
-1461 4553 m
-1463 4555 l
-1465 4557 l
-1465 4561 l
-1467 4564 l
-1469 4566 l
-1469 4570 l
-1472 4573 l
-1474 4575 l
-1474 4579 l
-1476 4582 l
-1478 4584 l
-1478 4588 l
-1481 4591 l
-1483 4593 l
-S
-1483 4593 m
-1483 4597 l
-1485 4599 l
-1487 4602 l
-1487 4606 l
-1490 4608 l
-1492 4611 l
-1492 4615 l
-1494 4617 l
-1496 4620 l
-1496 4624 l
-1499 4626 l
-S
-1443 3386 m
-1443 3382 l
-1445 3379 l
-1447 3377 l
-1447 3373 l
-1449 3371 l
-1452 3368 l
-1452 3364 l
-1454 3362 l
-1456 3359 l
-1456 3355 l
-1458 3353 l
-S
-1443 3386 m
-1440 3388 l
-1438 3391 l
-1438 3395 l
-1438 3400 l
-1436 3402 l
-1434 3404 l
-1434 3408 l
-1431 3411 l
-1429 3413 l
-1429 3417 l
-1427 3420 l
-1425 3422 l
-1425 3426 l
-S
-1418 3442 m
-1420 3440 l
-1420 3435 l
-1423 3433 l
-1425 3431 l
-1425 3426 l
-S
-1418 4456 m
-1420 4459 l
-1420 4463 l
-1423 4465 l
-1425 4468 l
-1425 4472 l
-S
-1425 4472 m
-1425 4477 l
-1427 4479 l
-1429 4481 l
-1429 4486 l
-1431 4488 l
-1434 4490 l
-1434 4494 l
-1436 4497 l
-1438 4499 l
-1438 4503 l
-1438 4508 l
-1440 4510 l
-1443 4512 l
-S
-1443 4512 m
-1443 4517 l
-1445 4519 l
-1447 4521 l
-1447 4526 l
-1449 4528 l
-1452 4530 l
-1452 4535 l
-1454 4537 l
-1456 4539 l
-1456 4544 l
-1458 4546 l
-S
-1411 3467 m
-1411 3462 l
-1411 3458 l
-1414 3455 l
-1416 3453 l
-1416 3449 l
-1416 3444 l
-1418 3442 l
-S
-1411 3467 m
-1409 3469 l
-1407 3471 l
-1407 3476 l
-1405 3478 l
-1402 3480 l
-1402 3484 l
-1402 3489 l
-1400 3491 l
-1398 3493 l
-1398 3498 l
-1398 3502 l
-1396 3505 l
-1393 3507 l
-S
-1393 3507 m
-1393 3511 l
-1393 3516 l
-1391 3518 l
-1389 3520 l
-1389 3525 l
-1389 3529 l
-1387 3531 l
-1385 3534 l
-1385 3538 l
-1385 3543 l
-1382 3545 l
-1380 3547 l
-S
-1378 3563 m
-1380 3560 l
-1380 3556 l
-1380 3551 l
-1380 3547 l
-S
-1378 4336 m
-1380 4338 l
-1380 4342 l
-1380 4347 l
-1380 4351 l
-S
-1380 4351 m
-1382 4354 l
-1385 4356 l
-1385 4360 l
-1385 4365 l
-1387 4367 l
-1389 4369 l
-1389 4374 l
-1389 4378 l
-1391 4380 l
-1393 4383 l
-1393 4387 l
-1393 4392 l
-S
-1393 4392 m
-1396 4394 l
-1398 4396 l
-1398 4401 l
-1398 4405 l
-1400 4407 l
-1402 4410 l
-1402 4414 l
-1402 4418 l
-1405 4421 l
-1407 4423 l
-1407 4427 l
-1409 4430 l
-1411 4432 l
-S
-1411 4432 m
-1411 4436 l
-1411 4441 l
-1414 4443 l
-1416 4445 l
-1416 4450 l
-1416 4454 l
-1418 4456 l
-S
-1371 3587 m
-1371 3583 l
-1371 3578 l
-1373 3576 l
-1376 3574 l
-1376 3569 l
-1376 3565 l
-1378 3563 l
-S
-1371 3587 m
-1371 3592 l
-1369 3594 l
-1367 3596 l
-1367 3601 l
-1367 3605 l
-1367 3610 l
-1364 3612 l
-1362 3614 l
-1362 3619 l
-1362 3623 l
-1362 3627 l
-S
-1362 3627 m
-1360 3630 l
-1358 3632 l
-1358 3636 l
-1358 3641 l
-1358 3645 l
-1355 3648 l
-1353 3650 l
-1353 3654 l
-1353 3659 l
-1353 3663 l
-1353 3668 l
-S
-1353 3668 m
-1351 3670 l
-1349 3672 l
-1349 3677 l
-1349 3681 l
-1349 3686 l
-1349 3690 l
-1347 3692 l
-1344 3694 l
-1344 3699 l
-1344 3703 l
-1344 3708 l
-S
-1338 3746 m
-1340 3744 l
-1340 3739 l
-1340 3735 l
-1340 3730 l
-1340 3726 l
-1340 3721 l
-1342 3719 l
-1344 3717 l
-1344 3712 l
-1344 3708 l
-S
-1338 4153 m
-1340 4155 l
-1340 4159 l
-1340 4164 l
-1340 4168 l
-1340 4173 l
-1340 4177 l
-1342 4179 l
-1344 4182 l
-1344 4186 l
-1344 4191 l
-S
-1344 4191 m
-1344 4195 l
-1344 4199 l
-1344 4204 l
-1347 4206 l
-1349 4208 l
-1349 4213 l
-1349 4217 l
-1349 4222 l
-1349 4226 l
-1351 4229 l
-1353 4231 l
-S
-1353 4231 m
-1353 4235 l
-1353 4240 l
-1353 4244 l
-1353 4249 l
-1355 4251 l
-1358 4253 l
-1358 4258 l
-1358 4262 l
-1358 4267 l
-1360 4269 l
-1362 4271 l
-S
-1362 4271 m
-1362 4275 l
-1362 4280 l
-1362 4284 l
-1364 4287 l
-1367 4289 l
-1367 4293 l
-1367 4298 l
-1367 4302 l
-1369 4305 l
-1371 4307 l
-1371 4311 l
-S
-1371 4311 m
-1371 4316 l
-1371 4320 l
-1373 4322 l
-1376 4325 l
-1376 4329 l
-1376 4334 l
-1378 4336 l
-S
-1335 3748 m
-1338 3746 l
-S
-1335 3748 m
-1335 3753 l
-1335 3757 l
-1335 3762 l
-1335 3766 l
-1335 3770 l
-1335 3775 l
-1333 3777 l
-1331 3779 l
-1331 3784 l
-1331 3788 l
-S
-1331 3788 m
-1331 3793 l
-1331 3797 l
-1331 3802 l
-1331 3806 l
-1331 3811 l
-1331 3815 l
-1329 3817 l
-1326 3820 l
-1326 3824 l
-1326 3829 l
-S
-1326 3829 m
-1326 3833 l
-1326 3838 l
-1326 3842 l
-1326 3846 l
-1326 3851 l
-1326 3855 l
-1326 3860 l
-1326 3864 l
-1326 3869 l
-S
-1326 3869 m
-1326 3873 l
-1326 3878 l
-1324 3880 l
-1322 3882 l
-1322 3887 l
-1322 3891 l
-1322 3896 l
-1322 3900 l
-1322 3905 l
-1322 3909 l
-S
-1322 3909 m
-1322 3913 l
-1322 3918 l
-1322 3922 l
-1322 3927 l
-1322 3931 l
-1322 3936 l
-1322 3940 l
-1322 3945 l
-1322 3949 l
-S
-1322 3949 m
-1322 3954 l
-1322 3958 l
-1322 3963 l
-1322 3967 l
-1322 3972 l
-1322 3976 l
-1322 3981 l
-1322 3985 l
-1322 3989 l
-S
-1322 3989 m
-1322 3994 l
-1322 3998 l
-1322 4003 l
-1322 4007 l
-1322 4012 l
-1322 4016 l
-1324 4018 l
-1326 4021 l
-1326 4025 l
-1326 4030 l
-S
-1326 4030 m
-1326 4034 l
-1326 4039 l
-1326 4043 l
-1326 4048 l
-1326 4052 l
-1326 4056 l
-1326 4061 l
-1326 4065 l
-1326 4070 l
-S
-1326 4070 m
-1326 4074 l
-1326 4079 l
-1329 4081 l
-1331 4083 l
-1331 4088 l
-1331 4092 l
-1331 4097 l
-1331 4101 l
-1331 4106 l
-1331 4110 l
-S
-1331 4110 m
-1331 4115 l
-1331 4119 l
-1333 4121 l
-1335 4124 l
-1335 4128 l
-1335 4132 l
-1335 4137 l
-1335 4141 l
-1335 4146 l
-1335 4150 l
-S
-1338 4153 m
-1335 4150 l
-S
-1 g
-3879 3594 m
-3928 3594 l
-3928 3595 l
-3879 3595 l
-3842 3595 m
-3928 3595 l
-3928 3596 l
-3842 3596 l
-3806 3596 m
-3928 3596 l
-3928 3597 l
-3806 3597 l
-3806 3597 m
-3928 3597 l
-3928 3614 l
-3806 3614 l
-3806 3614 m
-3929 3614 l
-3929 3636 l
-3806 3636 l
-3807 3636 m
-3929 3636 l
-3929 3655 l
-3807 3655 l
-3807 3655 m
-3930 3655 l
-3930 3674 l
-3807 3674 l
-3808 3674 m
-3930 3674 l
-3930 3696 l
-3808 3696 l
-3808 3696 m
-3931 3696 l
-3931 3712 l
-3808 3712 l
-3809 3712 m
-3931 3712 l
-3931 3737 l
-3809 3737 l
-3809 3737 m
-3932 3737 l
-3932 3750 l
-3809 3750 l
-3810 3750 m
-3932 3750 l
-3932 3778 l
-3810 3778 l
-3810 3778 m
-3933 3778 l
-3933 3788 l
-3810 3788 l
-3811 3788 m
-3933 3788 l
-3933 3819 l
-3811 3819 l
-3811 3819 m
-3934 3819 l
-3934 3826 l
-3811 3826 l
-3812 3826 m
-3934 3826 l
-3934 3861 l
-3812 3861 l
-3812 3861 m
-3934 3861 l
-3934 3862 l
-3812 3862 l
-3812 3862 m
-3894 3862 l
-3894 3863 l
-3812 3863 l
-3812 3863 m
-3854 3863 l
-3854 3864 l
-3812 3864 l
-Y
-3927.5 3593.7 m
-3806 3597 l
-3813 3864 l
-3934 3861 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-3824 3626 m
-3825 3672 l
-3858 3646 l
-3858 3658 l
-3863 3666 l
-3867 3670 l
-3879 3674 l
-3888 3674 l
-3900 3670 l
-3908 3661 l
-3912 3648 l
-3912 3636 l
-3907 3623 l
-3903 3619 l
-3895 3615 l
-S
-3826 3726 m
-3830 3713 l
-3843 3705 l
-3863 3700 l
-3876 3699 l
-3897 3703 l
-3910 3711 l
-3914 3724 l
-3914 3732 l
-3911 3745 l
-3898 3753 l
-3877 3758 l
-3865 3758 l
-3844 3755 l
-3831 3747 l
-3827 3734 l
-3826 3726 l
-S
-3829 3809 m
-3832 3797 l
-3845 3788 l
-3866 3783 l
-3878 3783 l
-3899 3787 l
-3912 3795 l
-3916 3807 l
-3917 3815 l
-3913 3828 l
-3900 3837 l
-3880 3841 l
-3867 3842 l
-3846 3838 l
-3833 3830 l
-3829 3818 l
-3829 3809 l
-S
-1 g
-2463 2687 m
-2467 2687 l
-2467 2688 l
-2463 2688 l
-2460 2688 m
-2467 2688 l
-2467 2689 l
-2460 2689 l
-2458 2689 m
-2468 2689 l
-2468 2690 l
-2458 2690 l
-2455 2690 m
-2468 2690 l
-2468 2691 l
-2455 2691 l
-2453 2691 m
-2468 2691 l
-2468 2692 l
-2453 2692 l
-2450 2692 m
-2469 2692 l
-2469 2693 l
-2450 2693 l
-2448 2693 m
-2469 2693 l
-2469 2694 l
-2448 2694 l
-2445 2694 m
-2470 2694 l
-2470 2695 l
-2445 2695 l
-2442 2695 m
-2470 2695 l
-2470 2696 l
-2442 2696 l
-2440 2696 m
-2470 2696 l
-2470 2697 l
-2440 2697 l
-2437 2697 m
-2471 2697 l
-2471 2698 l
-2437 2698 l
-2435 2698 m
-2471 2698 l
-2471 2699 l
-2435 2699 l
-2432 2699 m
-2472 2699 l
-2472 2700 l
-2432 2700 l
-2430 2700 m
-2472 2700 l
-2472 2701 l
-2430 2701 l
-2427 2701 m
-2472 2701 l
-2472 2702 l
-2427 2702 l
-2424 2702 m
-2473 2702 l
-2473 2703 l
-2424 2703 l
-2422 2703 m
-2473 2703 l
-2473 2704 l
-2422 2704 l
-2419 2704 m
-2473 2704 l
-2473 2705 l
-2419 2705 l
-2417 2705 m
-2474 2705 l
-2474 2706 l
-2417 2706 l
-2414 2706 m
-2474 2706 l
-2474 2707 l
-2414 2707 l
-2412 2707 m
-2475 2707 l
-2475 2708 l
-2412 2708 l
-2409 2708 m
-2475 2708 l
-2475 2709 l
-2409 2709 l
-2406 2709 m
-2475 2709 l
-2475 2710 l
-2406 2710 l
-2404 2710 m
-2476 2710 l
-2476 2711 l
-2404 2711 l
-2401 2711 m
-2476 2711 l
-2476 2712 l
-2401 2712 l
-2399 2712 m
-2477 2712 l
-2477 2713 l
-2399 2713 l
-2396 2713 m
-2477 2713 l
-2477 2714 l
-2396 2714 l
-2394 2714 m
-2477 2714 l
-2477 2715 l
-2394 2715 l
-2391 2715 m
-2478 2715 l
-2478 2716 l
-2391 2716 l
-2388 2716 m
-2478 2716 l
-2478 2717 l
-2388 2717 l
-2386 2717 m
-2479 2717 l
-2479 2718 l
-2386 2718 l
-2383 2718 m
-2479 2718 l
-2479 2719 l
-2383 2719 l
-2381 2719 m
-2479 2719 l
-2479 2720 l
-2381 2720 l
-2378 2720 m
-2480 2720 l
-2480 2721 l
-2378 2721 l
-2376 2721 m
-2480 2721 l
-2480 2722 l
-2376 2722 l
-2373 2722 m
-2480 2722 l
-2480 2723 l
-2373 2723 l
-2371 2723 m
-2481 2723 l
-2481 2724 l
-2371 2724 l
-2368 2724 m
-2481 2724 l
-2481 2725 l
-2368 2725 l
-2365 2725 m
-2482 2725 l
-2482 2726 l
-2365 2726 l
-2363 2726 m
-2482 2726 l
-2482 2727 l
-2363 2727 l
-2360 2727 m
-2482 2727 l
-2482 2728 l
-2360 2728 l
-2358 2728 m
-2483 2728 l
-2483 2729 l
-2358 2729 l
-2355 2729 m
-2483 2729 l
-2483 2730 l
-2355 2730 l
-2353 2730 m
-2484 2730 l
-2484 2731 l
-2353 2731 l
-2350 2731 m
-2484 2731 l
-2484 2732 l
-2350 2732 l
-2347 2732 m
-2484 2732 l
-2484 2733 l
-2347 2733 l
-2345 2733 m
-2485 2733 l
-2485 2734 l
-2345 2734 l
-2342 2734 m
-2485 2734 l
-2485 2735 l
-2342 2735 l
-2340 2735 m
-2486 2735 l
-2486 2736 l
-2340 2736 l
-2337 2736 m
-2486 2736 l
-2486 2737 l
-2337 2737 l
-2335 2737 m
-2486 2737 l
-2486 2738 l
-2335 2738 l
-2332 2738 m
-2487 2738 l
-2487 2739 l
-2332 2739 l
-2329 2739 m
-2487 2739 l
-2487 2740 l
-2329 2740 l
-2327 2740 m
-2487 2740 l
-2487 2741 l
-2327 2741 l
-2324 2741 m
-2488 2741 l
-2488 2742 l
-2324 2742 l
-2322 2742 m
-2488 2742 l
-2488 2743 l
-2322 2743 l
-2319 2743 m
-2489 2743 l
-2489 2744 l
-2319 2744 l
-2317 2744 m
-2489 2744 l
-2489 2745 l
-2317 2745 l
-2314 2745 m
-2489 2745 l
-2489 2746 l
-2314 2746 l
-2311 2746 m
-2490 2746 l
-2490 2747 l
-2311 2747 l
-2309 2747 m
-2490 2747 l
-2490 2748 l
-2309 2748 l
-2306 2748 m
-2491 2748 l
-2491 2749 l
-2306 2749 l
-2304 2749 m
-2491 2749 l
-2491 2750 l
-2304 2750 l
-2301 2750 m
-2491 2750 l
-2491 2751 l
-2301 2751 l
-2299 2751 m
-2492 2751 l
-2492 2752 l
-2299 2752 l
-2296 2752 m
-2492 2752 l
-2492 2753 l
-2296 2753 l
-2294 2753 m
-2493 2753 l
-2493 2754 l
-2294 2754 l
-2291 2754 m
-2493 2754 l
-2493 2755 l
-2291 2755 l
-2288 2755 m
-2493 2755 l
-2493 2756 l
-2288 2756 l
-2286 2756 m
-2494 2756 l
-2494 2757 l
-2286 2757 l
-2283 2757 m
-2494 2757 l
-2494 2758 l
-2283 2758 l
-2281 2758 m
-2494 2758 l
-2494 2759 l
-2281 2759 l
-2278 2759 m
-2495 2759 l
-2495 2760 l
-2278 2760 l
-2276 2760 m
-2495 2760 l
-2495 2761 l
-2276 2761 l
-2273 2761 m
-2496 2761 l
-2496 2762 l
-2273 2762 l
-2270 2762 m
-2496 2762 l
-2496 2763 l
-2270 2763 l
-2268 2763 m
-2496 2763 l
-2496 2764 l
-2268 2764 l
-2265 2764 m
-2497 2764 l
-2497 2765 l
-2265 2765 l
-2263 2765 m
-2497 2765 l
-2497 2766 l
-2263 2766 l
-2260 2766 m
-2498 2766 l
-2498 2767 l
-2260 2767 l
-2258 2767 m
-2498 2767 l
-2498 2768 l
-2258 2768 l
-2255 2768 m
-2498 2768 l
-2498 2769 l
-2255 2769 l
-2252 2769 m
-2499 2769 l
-2499 2770 l
-2252 2770 l
-2250 2770 m
-2499 2770 l
-2499 2771 l
-2250 2771 l
-2247 2771 m
-2500 2771 l
-2500 2772 l
-2247 2772 l
-2245 2772 m
-2500 2772 l
-2500 2773 l
-2245 2773 l
-2242 2773 m
-2500 2773 l
-2500 2774 l
-2242 2774 l
-2240 2774 m
-2501 2774 l
-2501 2775 l
-2240 2775 l
-2237 2775 m
-2501 2775 l
-2501 2776 l
-2237 2776 l
-2234 2776 m
-2501 2776 l
-2501 2777 l
-2234 2777 l
-2232 2777 m
-2502 2777 l
-2502 2778 l
-2232 2778 l
-2229 2778 m
-2502 2778 l
-2502 2779 l
-2229 2779 l
-2227 2779 m
-2503 2779 l
-2503 2780 l
-2227 2780 l
-2224 2780 m
-2503 2780 l
-2503 2781 l
-2224 2781 l
-2222 2781 m
-2503 2781 l
-2503 2782 l
-2222 2782 l
-2219 2782 m
-2504 2782 l
-2504 2783 l
-2219 2783 l
-2217 2783 m
-2504 2783 l
-2504 2784 l
-2217 2784 l
-2217 2784 m
-2505 2784 l
-2505 2787 l
-2217 2787 l
-2218 2787 m
-2506 2787 l
-2506 2789 l
-2218 2789 l
-2218 2789 m
-2507 2789 l
-2507 2790 l
-2218 2790 l
-2219 2790 m
-2507 2790 l
-2507 2792 l
-2219 2792 l
-2220 2792 m
-2508 2792 l
-2508 2795 l
-2220 2795 l
-2221 2795 m
-2509 2795 l
-2509 2797 l
-2221 2797 l
-2222 2797 m
-2510 2797 l
-2510 2800 l
-2222 2800 l
-2223 2800 m
-2510 2800 l
-2510 2801 l
-2223 2801 l
-2223 2801 m
-2508 2801 l
-2508 2802 l
-2223 2802 l
-2224 2802 m
-2505 2802 l
-2505 2803 l
-2224 2803 l
-2224 2803 m
-2503 2803 l
-2503 2804 l
-2224 2804 l
-2224 2804 m
-2500 2804 l
-2500 2805 l
-2224 2805 l
-2225 2805 m
-2498 2805 l
-2498 2806 l
-2225 2806 l
-2225 2806 m
-2495 2806 l
-2495 2807 l
-2225 2807 l
-2225 2807 m
-2492 2807 l
-2492 2808 l
-2225 2808 l
-2226 2808 m
-2490 2808 l
-2490 2809 l
-2226 2809 l
-2226 2809 m
-2487 2809 l
-2487 2810 l
-2226 2810 l
-2227 2810 m
-2485 2810 l
-2485 2811 l
-2227 2811 l
-2227 2811 m
-2482 2811 l
-2482 2812 l
-2227 2812 l
-2227 2812 m
-2480 2812 l
-2480 2813 l
-2227 2813 l
-2228 2813 m
-2477 2813 l
-2477 2814 l
-2228 2814 l
-2228 2814 m
-2474 2814 l
-2474 2815 l
-2228 2815 l
-2229 2815 m
-2472 2815 l
-2472 2816 l
-2229 2816 l
-2229 2816 m
-2469 2816 l
-2469 2817 l
-2229 2817 l
-2229 2817 m
-2467 2817 l
-2467 2818 l
-2229 2818 l
-2230 2818 m
-2464 2818 l
-2464 2819 l
-2230 2819 l
-2230 2819 m
-2462 2819 l
-2462 2820 l
-2230 2820 l
-2231 2820 m
-2459 2820 l
-2459 2821 l
-2231 2821 l
-2231 2821 m
-2457 2821 l
-2457 2822 l
-2231 2822 l
-2231 2822 m
-2454 2822 l
-2454 2823 l
-2231 2823 l
-2232 2823 m
-2451 2823 l
-2451 2824 l
-2232 2824 l
-2232 2824 m
-2449 2824 l
-2449 2825 l
-2232 2825 l
-2232 2825 m
-2446 2825 l
-2446 2826 l
-2232 2826 l
-2233 2826 m
-2444 2826 l
-2444 2827 l
-2233 2827 l
-2233 2827 m
-2441 2827 l
-2441 2828 l
-2233 2828 l
-2234 2828 m
-2439 2828 l
-2439 2829 l
-2234 2829 l
-2234 2829 m
-2436 2829 l
-2436 2830 l
-2234 2830 l
-2234 2830 m
-2433 2830 l
-2433 2831 l
-2234 2831 l
-2235 2831 m
-2431 2831 l
-2431 2832 l
-2235 2832 l
-2235 2832 m
-2428 2832 l
-2428 2833 l
-2235 2833 l
-2236 2833 m
-2426 2833 l
-2426 2834 l
-2236 2834 l
-2236 2834 m
-2423 2834 l
-2423 2835 l
-2236 2835 l
-2236 2835 m
-2421 2835 l
-2421 2836 l
-2236 2836 l
-2237 2836 m
-2418 2836 l
-2418 2837 l
-2237 2837 l
-2237 2837 m
-2415 2837 l
-2415 2838 l
-2237 2838 l
-2238 2838 m
-2413 2838 l
-2413 2839 l
-2238 2839 l
-2238 2839 m
-2410 2839 l
-2410 2840 l
-2238 2840 l
-2238 2840 m
-2408 2840 l
-2408 2841 l
-2238 2841 l
-2239 2841 m
-2405 2841 l
-2405 2842 l
-2239 2842 l
-2239 2842 m
-2403 2842 l
-2403 2843 l
-2239 2843 l
-2239 2843 m
-2400 2843 l
-2400 2844 l
-2239 2844 l
-2240 2844 m
-2397 2844 l
-2397 2845 l
-2240 2845 l
-2240 2845 m
-2395 2845 l
-2395 2846 l
-2240 2846 l
-2241 2846 m
-2392 2846 l
-2392 2847 l
-2241 2847 l
-2241 2847 m
-2390 2847 l
-2390 2848 l
-2241 2848 l
-2241 2848 m
-2387 2848 l
-2387 2849 l
-2241 2849 l
-2242 2849 m
-2385 2849 l
-2385 2850 l
-2242 2850 l
-2242 2850 m
-2382 2850 l
-2382 2851 l
-2242 2851 l
-2243 2851 m
-2380 2851 l
-2380 2852 l
-2243 2852 l
-2243 2852 m
-2377 2852 l
-2377 2853 l
-2243 2853 l
-2243 2853 m
-2374 2853 l
-2374 2854 l
-2243 2854 l
-2244 2854 m
-2372 2854 l
-2372 2855 l
-2244 2855 l
-2244 2855 m
-2369 2855 l
-2369 2856 l
-2244 2856 l
-2245 2856 m
-2367 2856 l
-2367 2857 l
-2245 2857 l
-2245 2857 m
-2364 2857 l
-2364 2858 l
-2245 2858 l
-2245 2858 m
-2362 2858 l
-2362 2859 l
-2245 2859 l
-2246 2859 m
-2359 2859 l
-2359 2860 l
-2246 2860 l
-2246 2860 m
-2356 2860 l
-2356 2861 l
-2246 2861 l
-2246 2861 m
-2354 2861 l
-2354 2862 l
-2246 2862 l
-2247 2862 m
-2351 2862 l
-2351 2863 l
-2247 2863 l
-2247 2863 m
-2349 2863 l
-2349 2864 l
-2247 2864 l
-2248 2864 m
-2346 2864 l
-2346 2865 l
-2248 2865 l
-2248 2865 m
-2344 2865 l
-2344 2866 l
-2248 2866 l
-2248 2866 m
-2341 2866 l
-2341 2867 l
-2248 2867 l
-2249 2867 m
-2338 2867 l
-2338 2868 l
-2249 2868 l
-2249 2868 m
-2336 2868 l
-2336 2869 l
-2249 2869 l
-2250 2869 m
-2333 2869 l
-2333 2870 l
-2250 2870 l
-2250 2870 m
-2331 2870 l
-2331 2871 l
-2250 2871 l
-2250 2871 m
-2328 2871 l
-2328 2872 l
-2250 2872 l
-2251 2872 m
-2326 2872 l
-2326 2873 l
-2251 2873 l
-2251 2873 m
-2323 2873 l
-2323 2874 l
-2251 2874 l
-2252 2874 m
-2321 2874 l
-2321 2875 l
-2252 2875 l
-2252 2875 m
-2318 2875 l
-2318 2876 l
-2252 2876 l
-2252 2876 m
-2315 2876 l
-2315 2877 l
-2252 2877 l
-2253 2877 m
-2313 2877 l
-2313 2878 l
-2253 2878 l
-2253 2878 m
-2310 2878 l
-2310 2879 l
-2253 2879 l
-2253 2879 m
-2308 2879 l
-2308 2880 l
-2253 2880 l
-2254 2880 m
-2305 2880 l
-2305 2881 l
-2254 2881 l
-2254 2881 m
-2303 2881 l
-2303 2882 l
-2254 2882 l
-2255 2882 m
-2300 2882 l
-2300 2883 l
-2255 2883 l
-2255 2883 m
-2297 2883 l
-2297 2884 l
-2255 2884 l
-2255 2884 m
-2295 2884 l
-2295 2885 l
-2255 2885 l
-2256 2885 m
-2292 2885 l
-2292 2886 l
-2256 2886 l
-2256 2886 m
-2290 2886 l
-2290 2887 l
-2256 2887 l
-2257 2887 m
-2287 2887 l
-2287 2888 l
-2257 2888 l
-2257 2888 m
-2285 2888 l
-2285 2889 l
-2257 2889 l
-2257 2889 m
-2282 2889 l
-2282 2890 l
-2257 2890 l
-2258 2890 m
-2279 2890 l
-2279 2891 l
-2258 2891 l
-2258 2891 m
-2277 2891 l
-2277 2892 l
-2258 2892 l
-2259 2892 m
-2274 2892 l
-2274 2893 l
-2259 2893 l
-2259 2893 m
-2272 2893 l
-2272 2894 l
-2259 2894 l
-2259 2894 m
-2269 2894 l
-2269 2895 l
-2259 2895 l
-2260 2895 m
-2267 2895 l
-2267 2896 l
-2260 2896 l
-2260 2896 m
-2264 2896 l
-2264 2897 l
-2260 2897 l
-Y
-2509.9 2800 m
-2466 2687 l
-2217 2784 l
-2261 2897 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-2456 2731 m
-2455 2727 l
-2448 2721 l
-2442 2719 l
-2433 2718 l
-2418 2724 l
-2411 2731 l
-2409 2736 l
-2408 2746 l
-2411 2753 l
-2418 2760 l
-2430 2768 l
-2484 2792 l
-2430 2813 l
-S
-2336 2756 m
-2396 2795 l
-2338 2818 l
-S
-2336 2756 m
-2368 2838 l
-S
-2274 2780 m
-2287 2780 l
-2299 2788 l
-2311 2806 l
-2315 2818 l
-2319 2839 l
-2316 2853 l
-2305 2862 l
-2298 2865 l
-2284 2866 l
-2272 2857 l
-2261 2839 l
-2256 2827 l
-2252 2806 l
-2256 2792 l
-2266 2783 l
-2274 2780 l
-S
-1 g
-1926 3331 m
-1931 3331 l
-1931 3332 l
-1926 3332 l
-1921 3332 m
-1932 3332 l
-1932 3333 l
-1921 3333 l
-1916 3333 m
-1932 3333 l
-1932 3334 l
-1916 3334 l
-1910 3334 m
-1932 3334 l
-1932 3335 l
-1910 3335 l
-1905 3335 m
-1932 3335 l
-1932 3336 l
-1905 3336 l
-1900 3336 m
-1932 3336 l
-1932 3337 l
-1900 3337 l
-1895 3337 m
-1932 3337 l
-1932 3338 l
-1895 3338 l
-1890 3338 m
-1933 3338 l
-1933 3339 l
-1890 3339 l
-1884 3339 m
-1933 3339 l
-1933 3340 l
-1884 3340 l
-1879 3340 m
-1933 3340 l
-1933 3341 l
-1879 3341 l
-1874 3341 m
-1933 3341 l
-1933 3342 l
-1874 3342 l
-1869 3342 m
-1933 3342 l
-1933 3343 l
-1869 3343 l
-1864 3343 m
-1934 3343 l
-1934 3344 l
-1864 3344 l
-1858 3344 m
-1934 3344 l
-1934 3345 l
-1858 3345 l
-1853 3345 m
-1934 3345 l
-1934 3346 l
-1853 3346 l
-1848 3346 m
-1934 3346 l
-1934 3347 l
-1848 3347 l
-1843 3347 m
-1934 3347 l
-1934 3348 l
-1843 3348 l
-1838 3348 m
-1935 3348 l
-1935 3349 l
-1838 3349 l
-1832 3349 m
-1935 3349 l
-1935 3350 l
-1832 3350 l
-1827 3350 m
-1935 3350 l
-1935 3351 l
-1827 3351 l
-1822 3351 m
-1935 3351 l
-1935 3352 l
-1822 3352 l
-1817 3352 m
-1935 3352 l
-1935 3353 l
-1817 3353 l
-1812 3353 m
-1936 3353 l
-1936 3354 l
-1812 3354 l
-1812 3354 m
-1936 3354 l
-1936 3359 l
-1812 3359 l
-1812 3359 m
-1937 3359 l
-1937 3360 l
-1812 3360 l
-1813 3360 m
-1937 3360 l
-1937 3364 l
-1813 3364 l
-1813 3364 m
-1938 3364 l
-1938 3365 l
-1813 3365 l
-1814 3365 m
-1938 3365 l
-1938 3369 l
-1814 3369 l
-1814 3369 m
-1939 3369 l
-1939 3370 l
-1814 3370 l
-1815 3370 m
-1939 3370 l
-1939 3375 l
-1815 3375 l
-1815 3375 m
-1940 3375 l
-1940 3376 l
-1815 3376 l
-1816 3376 m
-1940 3376 l
-1940 3380 l
-1816 3380 l
-1816 3380 m
-1941 3380 l
-1941 3381 l
-1816 3381 l
-1817 3381 m
-1941 3381 l
-1941 3385 l
-1817 3385 l
-1817 3385 m
-1942 3385 l
-1942 3386 l
-1817 3386 l
-1818 3386 m
-1942 3386 l
-1942 3390 l
-1818 3390 l
-1818 3390 m
-1943 3390 l
-1943 3392 l
-1818 3392 l
-1819 3392 m
-1943 3392 l
-1943 3396 l
-1819 3396 l
-1819 3396 m
-1944 3396 l
-1944 3397 l
-1819 3397 l
-1820 3397 m
-1944 3397 l
-1944 3401 l
-1820 3401 l
-1820 3401 m
-1945 3401 l
-1945 3402 l
-1820 3402 l
-1821 3402 m
-1945 3402 l
-1945 3406 l
-1821 3406 l
-1821 3406 m
-1946 3406 l
-1946 3408 l
-1821 3408 l
-1822 3408 m
-1946 3408 l
-1946 3412 l
-1822 3412 l
-1822 3412 m
-1947 3412 l
-1947 3413 l
-1822 3413 l
-1823 3413 m
-1947 3413 l
-1947 3417 l
-1823 3417 l
-1823 3417 m
-1948 3417 l
-1948 3418 l
-1823 3418 l
-1824 3418 m
-1948 3418 l
-1948 3422 l
-1824 3422 l
-1824 3422 m
-1949 3422 l
-1949 3424 l
-1824 3424 l
-1825 3424 m
-1949 3424 l
-1949 3427 l
-1825 3427 l
-1825 3427 m
-1950 3427 l
-1950 3429 l
-1825 3429 l
-1826 3429 m
-1950 3429 l
-1950 3433 l
-1826 3433 l
-1826 3433 m
-1951 3433 l
-1951 3434 l
-1826 3434 l
-1827 3434 m
-1951 3434 l
-1951 3438 l
-1827 3438 l
-1827 3438 m
-1952 3438 l
-1952 3440 l
-1827 3440 l
-1828 3440 m
-1952 3440 l
-1952 3443 l
-1828 3443 l
-1828 3443 m
-1953 3443 l
-1953 3445 l
-1828 3445 l
-1829 3445 m
-1953 3445 l
-1953 3448 l
-1829 3448 l
-1829 3448 m
-1954 3448 l
-1954 3450 l
-1829 3450 l
-1830 3450 m
-1954 3450 l
-1954 3454 l
-1830 3454 l
-1830 3454 m
-1955 3454 l
-1955 3456 l
-1830 3456 l
-1831 3456 m
-1955 3456 l
-1955 3459 l
-1831 3459 l
-1831 3459 m
-1956 3459 l
-1956 3461 l
-1831 3461 l
-1832 3461 m
-1956 3461 l
-1956 3464 l
-1832 3464 l
-1832 3464 m
-1957 3464 l
-1957 3466 l
-1832 3466 l
-1833 3466 m
-1957 3466 l
-1957 3470 l
-1833 3470 l
-1833 3470 m
-1958 3470 l
-1958 3472 l
-1833 3472 l
-1834 3472 m
-1958 3472 l
-1958 3475 l
-1834 3475 l
-1834 3475 m
-1959 3475 l
-1959 3477 l
-1834 3477 l
-1835 3477 m
-1959 3477 l
-1959 3480 l
-1835 3480 l
-1835 3480 m
-1960 3480 l
-1960 3482 l
-1835 3482 l
-1836 3482 m
-1960 3482 l
-1960 3485 l
-1836 3485 l
-1836 3485 m
-1961 3485 l
-1961 3487 l
-1836 3487 l
-1837 3487 m
-1961 3487 l
-1961 3491 l
-1837 3491 l
-1837 3491 m
-1962 3491 l
-1962 3493 l
-1837 3493 l
-1838 3493 m
-1962 3493 l
-1962 3496 l
-1838 3496 l
-1838 3496 m
-1963 3496 l
-1963 3498 l
-1838 3498 l
-1839 3498 m
-1963 3498 l
-1963 3501 l
-1839 3501 l
-1839 3501 m
-1964 3501 l
-1964 3503 l
-1839 3503 l
-1840 3503 m
-1964 3503 l
-1964 3507 l
-1840 3507 l
-1840 3507 m
-1965 3507 l
-1965 3509 l
-1840 3509 l
-1841 3509 m
-1965 3509 l
-1965 3512 l
-1841 3512 l
-1841 3512 m
-1966 3512 l
-1966 3514 l
-1841 3514 l
-1842 3514 m
-1966 3514 l
-1966 3517 l
-1842 3517 l
-1842 3517 m
-1967 3517 l
-1967 3519 l
-1842 3519 l
-1843 3519 m
-1967 3519 l
-1967 3522 l
-1843 3522 l
-1843 3522 m
-1968 3522 l
-1968 3525 l
-1843 3525 l
-1844 3525 m
-1968 3525 l
-1968 3528 l
-1844 3528 l
-1844 3528 m
-1969 3528 l
-1969 3530 l
-1844 3530 l
-1845 3530 m
-1969 3530 l
-1969 3533 l
-1845 3533 l
-1845 3533 m
-1970 3533 l
-1970 3535 l
-1845 3535 l
-1846 3535 m
-1970 3535 l
-1970 3538 l
-1846 3538 l
-1846 3538 m
-1971 3538 l
-1971 3541 l
-1846 3541 l
-1847 3541 m
-1971 3541 l
-1971 3544 l
-1847 3544 l
-1847 3544 m
-1972 3544 l
-1972 3546 l
-1847 3546 l
-1848 3546 m
-1972 3546 l
-1972 3549 l
-1848 3549 l
-1848 3549 m
-1973 3549 l
-1973 3551 l
-1848 3551 l
-1849 3551 m
-1973 3551 l
-1973 3554 l
-1849 3554 l
-1849 3554 m
-1974 3554 l
-1974 3557 l
-1849 3557 l
-1850 3557 m
-1974 3557 l
-1974 3559 l
-1850 3559 l
-1850 3559 m
-1975 3559 l
-1975 3562 l
-1850 3562 l
-1851 3562 m
-1975 3562 l
-1975 3565 l
-1851 3565 l
-1851 3565 m
-1976 3565 l
-1976 3567 l
-1851 3567 l
-1852 3567 m
-1976 3567 l
-1976 3570 l
-1852 3570 l
-1852 3570 m
-1977 3570 l
-1977 3573 l
-1852 3573 l
-1853 3573 m
-1977 3573 l
-1977 3575 l
-1853 3575 l
-1853 3575 m
-1978 3575 l
-1978 3578 l
-1853 3578 l
-1854 3578 m
-1978 3578 l
-1978 3581 l
-1854 3581 l
-1854 3581 m
-1978 3581 l
-1978 3582 l
-1854 3582 l
-1854 3582 m
-1973 3582 l
-1973 3583 l
-1854 3583 l
-1855 3583 m
-1968 3583 l
-1968 3584 l
-1855 3584 l
-1855 3584 m
-1963 3584 l
-1963 3585 l
-1855 3585 l
-1855 3585 m
-1958 3585 l
-1958 3586 l
-1855 3586 l
-1855 3586 m
-1953 3586 l
-1953 3587 l
-1855 3587 l
-1855 3587 m
-1947 3587 l
-1947 3588 l
-1855 3588 l
-1855 3588 m
-1942 3588 l
-1942 3589 l
-1855 3589 l
-1856 3589 m
-1937 3589 l
-1937 3590 l
-1856 3590 l
-1856 3590 m
-1932 3590 l
-1932 3591 l
-1856 3591 l
-1856 3591 m
-1927 3591 l
-1927 3592 l
-1856 3592 l
-1856 3592 m
-1922 3592 l
-1922 3593 l
-1856 3593 l
-1856 3593 m
-1916 3593 l
-1916 3594 l
-1856 3594 l
-1857 3594 m
-1911 3594 l
-1911 3595 l
-1857 3595 l
-1857 3595 m
-1906 3595 l
-1906 3596 l
-1857 3596 l
-1857 3596 m
-1901 3596 l
-1901 3597 l
-1857 3597 l
-1857 3597 m
-1896 3597 l
-1896 3598 l
-1857 3598 l
-1857 3598 m
-1891 3598 l
-1891 3599 l
-1857 3599 l
-1858 3599 m
-1885 3599 l
-1885 3600 l
-1858 3600 l
-1858 3600 m
-1880 3600 l
-1880 3601 l
-1858 3601 l
-1858 3601 m
-1875 3601 l
-1875 3602 l
-1858 3602 l
-1858 3602 m
-1870 3602 l
-1870 3603 l
-1858 3603 l
-1858 3603 m
-1865 3603 l
-1865 3604 l
-1858 3604 l
-Y
-1930.7 3331.2 m
-1812 3354 l
-1859 3604 l
-1978 3581 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-1848 3368 m
-1846 3377 l
-1836 3392 l
-1922 3375 l
-S
-1849 3461 m
-1851 3448 l
-1858 3443 l
-1867 3441 l
-1876 3444 l
-1881 3451 l
-1888 3467 l
-1895 3478 l
-1905 3485 l
-1914 3487 l
-1926 3485 l
-1933 3479 l
-1937 3475 l
-1938 3461 l
-1935 3445 l
-1929 3434 l
-1924 3430 l
-1915 3428 l
-1903 3430 l
-1895 3436 l
-1889 3445 l
-1887 3459 l
-1886 3476 l
-1883 3485 l
-1876 3490 l
-1868 3492 l
-1859 3489 l
-1852 3478 l
-1849 3461 l
-S
-1866 3548 m
-1867 3535 l
-1878 3524 l
-1898 3516 l
-1910 3514 l
-1931 3514 l
-1945 3520 l
-1952 3531 l
-1953 3539 l
-1952 3553 l
-1941 3563 l
-1921 3571 l
-1909 3573 l
-1887 3573 l
-1874 3567 l
-1867 3556 l
-1866 3548 l
-S
-1 g
-2178 3840 m
-2182 3840 l
-2182 3841 l
-2178 3841 l
-2178 3841 m
-2183 3841 l
-2183 3842 l
-2178 3842 l
-2177 3842 m
-2184 3842 l
-2184 3843 l
-2177 3843 l
-2176 3843 m
-2186 3843 l
-2186 3844 l
-2176 3844 l
-2175 3844 m
-2187 3844 l
-2187 3845 l
-2175 3845 l
-2174 3845 m
-2188 3845 l
-2188 3846 l
-2174 3846 l
-2174 3846 m
-2189 3846 l
-2189 3847 l
-2174 3847 l
-2173 3847 m
-2191 3847 l
-2191 3848 l
-2173 3848 l
-2172 3848 m
-2192 3848 l
-2192 3849 l
-2172 3849 l
-2171 3849 m
-2193 3849 l
-2193 3850 l
-2171 3850 l
-2170 3850 m
-2194 3850 l
-2194 3851 l
-2170 3851 l
-2170 3851 m
-2196 3851 l
-2196 3852 l
-2170 3852 l
-2169 3852 m
-2197 3852 l
-2197 3853 l
-2169 3853 l
-2168 3853 m
-2198 3853 l
-2198 3854 l
-2168 3854 l
-2167 3854 m
-2199 3854 l
-2199 3855 l
-2167 3855 l
-2166 3855 m
-2201 3855 l
-2201 3856 l
-2166 3856 l
-2166 3856 m
-2202 3856 l
-2202 3857 l
-2166 3857 l
-2165 3857 m
-2203 3857 l
-2203 3858 l
-2165 3858 l
-2164 3858 m
-2204 3858 l
-2204 3859 l
-2164 3859 l
-2163 3859 m
-2206 3859 l
-2206 3860 l
-2163 3860 l
-2162 3860 m
-2207 3860 l
-2207 3861 l
-2162 3861 l
-2162 3861 m
-2208 3861 l
-2208 3862 l
-2162 3862 l
-2161 3862 m
-2209 3862 l
-2209 3863 l
-2161 3863 l
-2160 3863 m
-2211 3863 l
-2211 3864 l
-2160 3864 l
-2159 3864 m
-2212 3864 l
-2212 3865 l
-2159 3865 l
-2158 3865 m
-2213 3865 l
-2213 3866 l
-2158 3866 l
-2158 3866 m
-2214 3866 l
-2214 3867 l
-2158 3867 l
-2157 3867 m
-2216 3867 l
-2216 3868 l
-2157 3868 l
-2156 3868 m
-2217 3868 l
-2217 3869 l
-2156 3869 l
-2155 3869 m
-2218 3869 l
-2218 3870 l
-2155 3870 l
-2154 3870 m
-2219 3870 l
-2219 3871 l
-2154 3871 l
-2154 3871 m
-2221 3871 l
-2221 3872 l
-2154 3872 l
-2153 3872 m
-2222 3872 l
-2222 3873 l
-2153 3873 l
-2152 3873 m
-2223 3873 l
-2223 3874 l
-2152 3874 l
-2151 3874 m
-2224 3874 l
-2224 3875 l
-2151 3875 l
-2150 3875 m
-2226 3875 l
-2226 3876 l
-2150 3876 l
-2150 3876 m
-2227 3876 l
-2227 3877 l
-2150 3877 l
-2149 3877 m
-2228 3877 l
-2228 3878 l
-2149 3878 l
-2148 3878 m
-2229 3878 l
-2229 3879 l
-2148 3879 l
-2147 3879 m
-2231 3879 l
-2231 3880 l
-2147 3880 l
-2146 3880 m
-2232 3880 l
-2232 3881 l
-2146 3881 l
-2146 3881 m
-2233 3881 l
-2233 3882 l
-2146 3882 l
-2145 3882 m
-2234 3882 l
-2234 3883 l
-2145 3883 l
-2144 3883 m
-2236 3883 l
-2236 3884 l
-2144 3884 l
-2143 3884 m
-2237 3884 l
-2237 3885 l
-2143 3885 l
-2143 3885 m
-2238 3885 l
-2238 3886 l
-2143 3886 l
-2142 3886 m
-2239 3886 l
-2239 3887 l
-2142 3887 l
-2141 3887 m
-2241 3887 l
-2241 3888 l
-2141 3888 l
-2140 3888 m
-2242 3888 l
-2242 3889 l
-2140 3889 l
-2139 3889 m
-2243 3889 l
-2243 3890 l
-2139 3890 l
-2139 3890 m
-2244 3890 l
-2244 3891 l
-2139 3891 l
-2138 3891 m
-2246 3891 l
-2246 3892 l
-2138 3892 l
-2137 3892 m
-2247 3892 l
-2247 3893 l
-2137 3893 l
-2136 3893 m
-2248 3893 l
-2248 3894 l
-2136 3894 l
-2135 3894 m
-2249 3894 l
-2249 3895 l
-2135 3895 l
-2135 3895 m
-2251 3895 l
-2251 3896 l
-2135 3896 l
-2134 3896 m
-2252 3896 l
-2252 3897 l
-2134 3897 l
-2133 3897 m
-2253 3897 l
-2253 3898 l
-2133 3898 l
-2132 3898 m
-2254 3898 l
-2254 3899 l
-2132 3899 l
-2131 3899 m
-2256 3899 l
-2256 3900 l
-2131 3900 l
-2131 3900 m
-2257 3900 l
-2257 3901 l
-2131 3901 l
-2130 3901 m
-2258 3901 l
-2258 3902 l
-2130 3902 l
-2129 3902 m
-2259 3902 l
-2259 3903 l
-2129 3903 l
-2128 3903 m
-2261 3903 l
-2261 3904 l
-2128 3904 l
-2127 3904 m
-2262 3904 l
-2262 3905 l
-2127 3905 l
-2127 3905 m
-2263 3905 l
-2263 3906 l
-2127 3906 l
-2126 3906 m
-2264 3906 l
-2264 3907 l
-2126 3907 l
-2125 3907 m
-2266 3907 l
-2266 3908 l
-2125 3908 l
-2124 3908 m
-2267 3908 l
-2267 3909 l
-2124 3909 l
-2123 3909 m
-2268 3909 l
-2268 3910 l
-2123 3910 l
-2123 3910 m
-2269 3910 l
-2269 3911 l
-2123 3911 l
-2122 3911 m
-2271 3911 l
-2271 3912 l
-2122 3912 l
-2121 3912 m
-2272 3912 l
-2272 3913 l
-2121 3913 l
-2120 3913 m
-2273 3913 l
-2273 3914 l
-2120 3914 l
-2119 3914 m
-2274 3914 l
-2274 3915 l
-2119 3915 l
-2119 3915 m
-2276 3915 l
-2276 3916 l
-2119 3916 l
-2118 3916 m
-2277 3916 l
-2277 3917 l
-2118 3917 l
-2117 3917 m
-2278 3917 l
-2278 3918 l
-2117 3918 l
-2116 3918 m
-2279 3918 l
-2279 3919 l
-2116 3919 l
-2115 3919 m
-2281 3919 l
-2281 3920 l
-2115 3920 l
-2115 3920 m
-2282 3920 l
-2282 3921 l
-2115 3921 l
-2114 3921 m
-2283 3921 l
-2283 3922 l
-2114 3922 l
-2113 3922 m
-2284 3922 l
-2284 3923 l
-2113 3923 l
-2112 3923 m
-2286 3923 l
-2286 3924 l
-2112 3924 l
-2111 3924 m
-2287 3924 l
-2287 3925 l
-2111 3925 l
-2111 3925 m
-2288 3925 l
-2288 3926 l
-2111 3926 l
-2110 3926 m
-2289 3926 l
-2289 3927 l
-2110 3927 l
-2109 3927 m
-2291 3927 l
-2291 3928 l
-2109 3928 l
-2108 3928 m
-2292 3928 l
-2292 3929 l
-2108 3929 l
-2107 3929 m
-2293 3929 l
-2293 3930 l
-2107 3930 l
-2107 3930 m
-2294 3930 l
-2294 3931 l
-2107 3931 l
-2106 3931 m
-2296 3931 l
-2296 3932 l
-2106 3932 l
-2105 3932 m
-2297 3932 l
-2297 3933 l
-2105 3933 l
-2104 3933 m
-2298 3933 l
-2298 3934 l
-2104 3934 l
-2104 3934 m
-2299 3934 l
-2299 3935 l
-2104 3935 l
-2104 3935 m
-2301 3935 l
-2301 3936 l
-2104 3936 l
-2105 3936 m
-2302 3936 l
-2302 3937 l
-2105 3937 l
-2106 3937 m
-2303 3937 l
-2303 3938 l
-2106 3938 l
-2107 3938 m
-2304 3938 l
-2304 3939 l
-2107 3939 l
-2109 3939 m
-2306 3939 l
-2306 3940 l
-2109 3940 l
-2110 3940 m
-2307 3940 l
-2307 3941 l
-2110 3941 l
-2111 3941 m
-2308 3941 l
-2308 3942 l
-2111 3942 l
-2112 3942 m
-2309 3942 l
-2309 3943 l
-2112 3943 l
-2114 3943 m
-2311 3943 l
-2311 3944 l
-2114 3944 l
-2115 3944 m
-2312 3944 l
-2312 3945 l
-2115 3945 l
-2116 3945 m
-2313 3945 l
-2313 3946 l
-2116 3946 l
-2117 3946 m
-2314 3946 l
-2314 3947 l
-2117 3947 l
-2119 3947 m
-2316 3947 l
-2316 3948 l
-2119 3948 l
-2120 3948 m
-2317 3948 l
-2317 3949 l
-2120 3949 l
-2121 3949 m
-2318 3949 l
-2318 3950 l
-2121 3950 l
-2122 3950 m
-2319 3950 l
-2319 3951 l
-2122 3951 l
-2124 3951 m
-2321 3951 l
-2321 3952 l
-2124 3952 l
-2125 3952 m
-2322 3952 l
-2322 3953 l
-2125 3953 l
-2126 3953 m
-2323 3953 l
-2323 3954 l
-2126 3954 l
-2127 3954 m
-2324 3954 l
-2324 3955 l
-2127 3955 l
-2129 3955 m
-2326 3955 l
-2326 3956 l
-2129 3956 l
-2130 3956 m
-2327 3956 l
-2327 3957 l
-2130 3957 l
-2131 3957 m
-2328 3957 l
-2328 3958 l
-2131 3958 l
-2132 3958 m
-2329 3958 l
-2329 3959 l
-2132 3959 l
-2134 3959 m
-2331 3959 l
-2331 3960 l
-2134 3960 l
-2135 3960 m
-2332 3960 l
-2332 3961 l
-2135 3961 l
-2136 3961 m
-2333 3961 l
-2333 3962 l
-2136 3962 l
-2138 3962 m
-2334 3962 l
-2334 3963 l
-2138 3963 l
-2139 3963 m
-2336 3963 l
-2336 3964 l
-2139 3964 l
-2140 3964 m
-2337 3964 l
-2337 3965 l
-2140 3965 l
-2141 3965 m
-2338 3965 l
-2338 3966 l
-2141 3966 l
-2143 3966 m
-2339 3966 l
-2339 3967 l
-2143 3967 l
-2144 3967 m
-2341 3967 l
-2341 3968 l
-2144 3968 l
-2145 3968 m
-2342 3968 l
-2342 3969 l
-2145 3969 l
-2146 3969 m
-2343 3969 l
-2343 3970 l
-2146 3970 l
-2148 3970 m
-2344 3970 l
-2344 3971 l
-2148 3971 l
-2149 3971 m
-2346 3971 l
-2346 3972 l
-2149 3972 l
-2150 3972 m
-2347 3972 l
-2347 3973 l
-2150 3973 l
-2151 3973 m
-2348 3973 l
-2348 3974 l
-2151 3974 l
-2153 3974 m
-2349 3974 l
-2349 3975 l
-2153 3975 l
-2154 3975 m
-2351 3975 l
-2351 3976 l
-2154 3976 l
-2155 3976 m
-2352 3976 l
-2352 3977 l
-2155 3977 l
-2156 3977 m
-2353 3977 l
-2353 3978 l
-2156 3978 l
-2158 3978 m
-2354 3978 l
-2354 3979 l
-2158 3979 l
-2159 3979 m
-2356 3979 l
-2356 3980 l
-2159 3980 l
-2160 3980 m
-2357 3980 l
-2357 3981 l
-2160 3981 l
-2161 3981 m
-2358 3981 l
-2358 3982 l
-2161 3982 l
-2163 3982 m
-2359 3982 l
-2359 3983 l
-2163 3983 l
-2164 3983 m
-2361 3983 l
-2361 3984 l
-2164 3984 l
-2165 3984 m
-2362 3984 l
-2362 3985 l
-2165 3985 l
-2166 3985 m
-2363 3985 l
-2363 3986 l
-2166 3986 l
-2168 3986 m
-2364 3986 l
-2364 3987 l
-2168 3987 l
-2169 3987 m
-2366 3987 l
-2366 3988 l
-2169 3988 l
-2170 3988 m
-2367 3988 l
-2367 3989 l
-2170 3989 l
-2172 3989 m
-2368 3989 l
-2368 3990 l
-2172 3990 l
-2173 3990 m
-2369 3990 l
-2369 3991 l
-2173 3991 l
-2174 3991 m
-2371 3991 l
-2371 3992 l
-2174 3992 l
-2175 3992 m
-2372 3992 l
-2372 3993 l
-2175 3993 l
-2177 3993 m
-2373 3993 l
-2373 3994 l
-2177 3994 l
-2178 3994 m
-2374 3994 l
-2374 3995 l
-2178 3995 l
-2179 3995 m
-2376 3995 l
-2376 3996 l
-2179 3996 l
-2180 3996 m
-2377 3996 l
-2377 3997 l
-2180 3997 l
-2182 3997 m
-2378 3997 l
-2378 3998 l
-2182 3998 l
-2183 3998 m
-2379 3998 l
-2379 3999 l
-2183 3999 l
-2184 3999 m
-2379 3999 l
-2379 4000 l
-2184 4000 l
-2185 4000 m
-2379 4000 l
-2379 4001 l
-2185 4001 l
-2187 4001 m
-2378 4001 l
-2378 4002 l
-2187 4002 l
-2188 4002 m
-2377 4002 l
-2377 4003 l
-2188 4003 l
-2189 4003 m
-2376 4003 l
-2376 4004 l
-2189 4004 l
-2190 4004 m
-2375 4004 l
-2375 4005 l
-2190 4005 l
-2192 4005 m
-2375 4005 l
-2375 4006 l
-2192 4006 l
-2193 4006 m
-2374 4006 l
-2374 4007 l
-2193 4007 l
-2194 4007 m
-2373 4007 l
-2373 4008 l
-2194 4008 l
-2195 4008 m
-2372 4008 l
-2372 4009 l
-2195 4009 l
-2197 4009 m
-2371 4009 l
-2371 4010 l
-2197 4010 l
-2198 4010 m
-2371 4010 l
-2371 4011 l
-2198 4011 l
-2199 4011 m
-2370 4011 l
-2370 4012 l
-2199 4012 l
-2200 4012 m
-2369 4012 l
-2369 4013 l
-2200 4013 l
-2202 4013 m
-2368 4013 l
-2368 4014 l
-2202 4014 l
-2203 4014 m
-2367 4014 l
-2367 4015 l
-2203 4015 l
-2204 4015 m
-2367 4015 l
-2367 4016 l
-2204 4016 l
-2206 4016 m
-2366 4016 l
-2366 4017 l
-2206 4017 l
-2207 4017 m
-2365 4017 l
-2365 4018 l
-2207 4018 l
-2208 4018 m
-2364 4018 l
-2364 4019 l
-2208 4019 l
-2209 4019 m
-2363 4019 l
-2363 4020 l
-2209 4020 l
-2211 4020 m
-2363 4020 l
-2363 4021 l
-2211 4021 l
-2212 4021 m
-2362 4021 l
-2362 4022 l
-2212 4022 l
-2213 4022 m
-2361 4022 l
-2361 4023 l
-2213 4023 l
-2214 4023 m
-2360 4023 l
-2360 4024 l
-2214 4024 l
-2216 4024 m
-2359 4024 l
-2359 4025 l
-2216 4025 l
-2217 4025 m
-2358 4025 l
-2358 4026 l
-2217 4026 l
-2218 4026 m
-2358 4026 l
-2358 4027 l
-2218 4027 l
-2219 4027 m
-2357 4027 l
-2357 4028 l
-2219 4028 l
-2221 4028 m
-2356 4028 l
-2356 4029 l
-2221 4029 l
-2222 4029 m
-2355 4029 l
-2355 4030 l
-2222 4030 l
-2223 4030 m
-2354 4030 l
-2354 4031 l
-2223 4031 l
-2224 4031 m
-2354 4031 l
-2354 4032 l
-2224 4032 l
-2226 4032 m
-2353 4032 l
-2353 4033 l
-2226 4033 l
-2227 4033 m
-2352 4033 l
-2352 4034 l
-2227 4034 l
-2228 4034 m
-2351 4034 l
-2351 4035 l
-2228 4035 l
-2229 4035 m
-2350 4035 l
-2350 4036 l
-2229 4036 l
-2231 4036 m
-2350 4036 l
-2350 4037 l
-2231 4037 l
-2232 4037 m
-2349 4037 l
-2349 4038 l
-2232 4038 l
-2233 4038 m
-2348 4038 l
-2348 4039 l
-2233 4039 l
-2234 4039 m
-2347 4039 l
-2347 4040 l
-2234 4040 l
-2236 4040 m
-2346 4040 l
-2346 4041 l
-2236 4041 l
-2237 4041 m
-2346 4041 l
-2346 4042 l
-2237 4042 l
-2238 4042 m
-2345 4042 l
-2345 4043 l
-2238 4043 l
-2240 4043 m
-2344 4043 l
-2344 4044 l
-2240 4044 l
-2241 4044 m
-2343 4044 l
-2343 4045 l
-2241 4045 l
-2242 4045 m
-2342 4045 l
-2342 4046 l
-2242 4046 l
-2243 4046 m
-2341 4046 l
-2341 4047 l
-2243 4047 l
-2245 4047 m
-2341 4047 l
-2341 4048 l
-2245 4048 l
-2246 4048 m
-2340 4048 l
-2340 4049 l
-2246 4049 l
-2247 4049 m
-2339 4049 l
-2339 4050 l
-2247 4050 l
-2248 4050 m
-2338 4050 l
-2338 4051 l
-2248 4051 l
-2250 4051 m
-2337 4051 l
-2337 4052 l
-2250 4052 l
-2251 4052 m
-2337 4052 l
-2337 4053 l
-2251 4053 l
-2252 4053 m
-2336 4053 l
-2336 4054 l
-2252 4054 l
-2253 4054 m
-2335 4054 l
-2335 4055 l
-2253 4055 l
-2255 4055 m
-2334 4055 l
-2334 4056 l
-2255 4056 l
-2256 4056 m
-2333 4056 l
-2333 4057 l
-2256 4057 l
-2257 4057 m
-2333 4057 l
-2333 4058 l
-2257 4058 l
-2258 4058 m
-2332 4058 l
-2332 4059 l
-2258 4059 l
-2260 4059 m
-2331 4059 l
-2331 4060 l
-2260 4060 l
-2261 4060 m
-2330 4060 l
-2330 4061 l
-2261 4061 l
-2262 4061 m
-2329 4061 l
-2329 4062 l
-2262 4062 l
-2263 4062 m
-2329 4062 l
-2329 4063 l
-2263 4063 l
-2265 4063 m
-2328 4063 l
-2328 4064 l
-2265 4064 l
-2266 4064 m
-2327 4064 l
-2327 4065 l
-2266 4065 l
-2267 4065 m
-2326 4065 l
-2326 4066 l
-2267 4066 l
-2268 4066 m
-2325 4066 l
-2325 4067 l
-2268 4067 l
-2270 4067 m
-2325 4067 l
-2325 4068 l
-2270 4068 l
-2271 4068 m
-2324 4068 l
-2324 4069 l
-2271 4069 l
-2272 4069 m
-2323 4069 l
-2323 4070 l
-2272 4070 l
-2274 4070 m
-2322 4070 l
-2322 4071 l
-2274 4071 l
-2275 4071 m
-2321 4071 l
-2321 4072 l
-2275 4072 l
-2276 4072 m
-2320 4072 l
-2320 4073 l
-2276 4073 l
-2277 4073 m
-2320 4073 l
-2320 4074 l
-2277 4074 l
-2279 4074 m
-2319 4074 l
-2319 4075 l
-2279 4075 l
-2280 4075 m
-2318 4075 l
-2318 4076 l
-2280 4076 l
-2281 4076 m
-2317 4076 l
-2317 4077 l
-2281 4077 l
-2282 4077 m
-2316 4077 l
-2316 4078 l
-2282 4078 l
-2284 4078 m
-2316 4078 l
-2316 4079 l
-2284 4079 l
-2285 4079 m
-2315 4079 l
-2315 4080 l
-2285 4080 l
-2286 4080 m
-2314 4080 l
-2314 4081 l
-2286 4081 l
-2287 4081 m
-2313 4081 l
-2313 4082 l
-2287 4082 l
-2289 4082 m
-2312 4082 l
-2312 4083 l
-2289 4083 l
-2290 4083 m
-2312 4083 l
-2312 4084 l
-2290 4084 l
-2291 4084 m
-2311 4084 l
-2311 4085 l
-2291 4085 l
-2292 4085 m
-2310 4085 l
-2310 4086 l
-2292 4086 l
-2294 4086 m
-2309 4086 l
-2309 4087 l
-2294 4087 l
-2295 4087 m
-2308 4087 l
-2308 4088 l
-2295 4088 l
-2296 4088 m
-2308 4088 l
-2308 4089 l
-2296 4089 l
-2297 4089 m
-2307 4089 l
-2307 4090 l
-2297 4090 l
-2299 4090 m
-2306 4090 l
-2306 4091 l
-2299 4091 l
-2300 4091 m
-2305 4091 l
-2305 4092 l
-2300 4092 l
-2301 4092 m
-2304 4092 l
-2304 4093 l
-2301 4093 l
-Y
-2179.8 3839.8 m
-2104 3935 l
-2303 4093 l
-2379 3999 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-2141 3921 m
-2145 3930 l
-2147 3947 l
-2202 3879 l
-S
-2203 3965 m
-2200 3968 l
-2198 3977 l
-2199 3983 l
-2203 3992 l
-2216 4002 l
-2225 4004 l
-2231 4003 l
-2239 4000 l
-2245 3993 l
-2247 3984 l
-2248 3969 l
-2241 3910 l
-2287 3947 l
-S
-2271 4046 m
-2264 4035 l
-2266 4020 l
-2275 4001 l
-2283 3992 l
-2299 3978 l
-2314 3973 l
-2326 3978 l
-2333 3983 l
-2340 3994 l
-2339 4009 l
-2329 4028 l
-2321 4038 l
-2305 4052 l
-2290 4056 l
-2278 4052 l
-2271 4046 l
-S
-1 g
-2789 4191 m
-2795 4191 l
-2795 4192 l
-2789 4192 l
-2789 4192 m
-2799 4192 l
-2799 4193 l
-2789 4193 l
-2789 4193 m
-2802 4193 l
-2802 4194 l
-2789 4194 l
-2789 4194 m
-2806 4194 l
-2806 4195 l
-2789 4195 l
-2788 4195 m
-2810 4195 l
-2810 4196 l
-2788 4196 l
-2788 4196 m
-2814 4196 l
-2814 4197 l
-2788 4197 l
-2788 4197 m
-2817 4197 l
-2817 4198 l
-2788 4198 l
-2788 4198 m
-2821 4198 l
-2821 4199 l
-2788 4199 l
-2787 4199 m
-2825 4199 l
-2825 4200 l
-2787 4200 l
-2787 4200 m
-2829 4200 l
-2829 4201 l
-2787 4201 l
-2787 4201 m
-2833 4201 l
-2833 4202 l
-2787 4202 l
-2786 4202 m
-2836 4202 l
-2836 4203 l
-2786 4203 l
-2786 4203 m
-2840 4203 l
-2840 4204 l
-2786 4204 l
-2786 4204 m
-2844 4204 l
-2844 4205 l
-2786 4205 l
-2786 4205 m
-2848 4205 l
-2848 4206 l
-2786 4206 l
-2785 4206 m
-2851 4206 l
-2851 4207 l
-2785 4207 l
-2785 4207 m
-2855 4207 l
-2855 4208 l
-2785 4208 l
-2785 4208 m
-2859 4208 l
-2859 4209 l
-2785 4209 l
-2785 4209 m
-2863 4209 l
-2863 4210 l
-2785 4210 l
-2784 4210 m
-2866 4210 l
-2866 4211 l
-2784 4211 l
-2784 4211 m
-2870 4211 l
-2870 4212 l
-2784 4212 l
-2784 4212 m
-2874 4212 l
-2874 4213 l
-2784 4213 l
-2784 4213 m
-2878 4213 l
-2878 4214 l
-2784 4214 l
-2783 4214 m
-2882 4214 l
-2882 4215 l
-2783 4215 l
-2783 4215 m
-2885 4215 l
-2885 4216 l
-2783 4216 l
-2783 4216 m
-2889 4216 l
-2889 4217 l
-2783 4217 l
-2782 4217 m
-2893 4217 l
-2893 4218 l
-2782 4218 l
-2782 4218 m
-2897 4218 l
-2897 4219 l
-2782 4219 l
-2782 4219 m
-2900 4219 l
-2900 4220 l
-2782 4220 l
-2782 4220 m
-2904 4220 l
-2904 4221 l
-2782 4221 l
-2781 4221 m
-2908 4221 l
-2908 4222 l
-2781 4222 l
-2781 4222 m
-2912 4222 l
-2912 4223 l
-2781 4223 l
-2781 4223 m
-2915 4223 l
-2915 4224 l
-2781 4224 l
-2781 4224 m
-2919 4224 l
-2919 4225 l
-2781 4225 l
-2780 4225 m
-2923 4225 l
-2923 4226 l
-2780 4226 l
-2780 4226 m
-2927 4226 l
-2927 4227 l
-2780 4227 l
-2780 4227 m
-2931 4227 l
-2931 4228 l
-2780 4228 l
-2780 4228 m
-2934 4228 l
-2934 4229 l
-2780 4229 l
-2779 4229 m
-2938 4229 l
-2938 4230 l
-2779 4230 l
-2779 4230 m
-2942 4230 l
-2942 4231 l
-2779 4231 l
-2779 4231 m
-2946 4231 l
-2946 4232 l
-2779 4232 l
-2778 4232 m
-2949 4232 l
-2949 4233 l
-2778 4233 l
-2778 4233 m
-2953 4233 l
-2953 4234 l
-2778 4234 l
-2778 4234 m
-2957 4234 l
-2957 4235 l
-2778 4235 l
-2778 4235 m
-2961 4235 l
-2961 4236 l
-2778 4236 l
-2777 4236 m
-2964 4236 l
-2964 4237 l
-2777 4237 l
-2777 4237 m
-2964 4237 l
-2964 4240 l
-2777 4240 l
-2776 4240 m
-2964 4240 l
-2964 4241 l
-2776 4241 l
-2776 4241 m
-2963 4241 l
-2963 4244 l
-2776 4244 l
-2775 4244 m
-2963 4244 l
-2963 4245 l
-2775 4245 l
-2775 4245 m
-2962 4245 l
-2962 4247 l
-2775 4247 l
-2774 4247 m
-2962 4247 l
-2962 4249 l
-2774 4249 l
-2774 4249 m
-2961 4249 l
-2961 4251 l
-2774 4251 l
-2773 4251 m
-2961 4251 l
-2961 4253 l
-2773 4253 l
-2773 4253 m
-2960 4253 l
-2960 4255 l
-2773 4255 l
-2772 4255 m
-2960 4255 l
-2960 4256 l
-2772 4256 l
-2772 4256 m
-2959 4256 l
-2959 4259 l
-2772 4259 l
-2771 4259 m
-2959 4259 l
-2959 4260 l
-2771 4260 l
-2771 4260 m
-2958 4260 l
-2958 4262 l
-2771 4262 l
-2770 4262 m
-2958 4262 l
-2958 4264 l
-2770 4264 l
-2770 4264 m
-2957 4264 l
-2957 4266 l
-2770 4266 l
-2769 4266 m
-2957 4266 l
-2957 4268 l
-2769 4268 l
-2769 4268 m
-2956 4268 l
-2956 4270 l
-2769 4270 l
-2768 4270 m
-2956 4270 l
-2956 4271 l
-2768 4271 l
-2768 4271 m
-2955 4271 l
-2955 4274 l
-2768 4274 l
-2767 4274 m
-2955 4274 l
-2955 4275 l
-2767 4275 l
-2767 4275 m
-2954 4275 l
-2954 4277 l
-2767 4277 l
-2766 4277 m
-2954 4277 l
-2954 4279 l
-2766 4279 l
-2766 4279 m
-2953 4279 l
-2953 4281 l
-2766 4281 l
-2765 4281 m
-2953 4281 l
-2953 4283 l
-2765 4283 l
-2765 4283 m
-2952 4283 l
-2952 4285 l
-2765 4285 l
-2764 4285 m
-2952 4285 l
-2952 4287 l
-2764 4287 l
-2764 4287 m
-2951 4287 l
-2951 4289 l
-2764 4289 l
-2763 4289 m
-2951 4289 l
-2951 4290 l
-2763 4290 l
-2763 4290 m
-2950 4290 l
-2950 4292 l
-2763 4292 l
-2762 4292 m
-2950 4292 l
-2950 4294 l
-2762 4294 l
-2762 4294 m
-2949 4294 l
-2949 4296 l
-2762 4296 l
-2761 4296 m
-2949 4296 l
-2949 4298 l
-2761 4298 l
-2761 4298 m
-2948 4298 l
-2948 4300 l
-2761 4300 l
-2760 4300 m
-2948 4300 l
-2948 4302 l
-2760 4302 l
-2760 4302 m
-2947 4302 l
-2947 4304 l
-2760 4304 l
-2759 4304 m
-2947 4304 l
-2947 4305 l
-2759 4305 l
-2759 4305 m
-2946 4305 l
-2946 4307 l
-2759 4307 l
-2759 4307 m
-2946 4307 l
-2946 4308 l
-2759 4308 l
-2759 4308 m
-2946 4308 l
-2946 4309 l
-2759 4309 l
-2762 4309 m
-2945 4309 l
-2945 4310 l
-2762 4310 l
-2766 4310 m
-2945 4310 l
-2945 4311 l
-2766 4311 l
-2770 4311 m
-2945 4311 l
-2945 4312 l
-2770 4312 l
-2774 4312 m
-2945 4312 l
-2945 4313 l
-2774 4313 l
-2777 4313 m
-2944 4313 l
-2944 4314 l
-2777 4314 l
-2781 4314 m
-2944 4314 l
-2944 4315 l
-2781 4315 l
-2785 4315 m
-2944 4315 l
-2944 4316 l
-2785 4316 l
-2789 4316 m
-2944 4316 l
-2944 4317 l
-2789 4317 l
-2793 4317 m
-2943 4317 l
-2943 4318 l
-2793 4318 l
-2796 4318 m
-2943 4318 l
-2943 4319 l
-2796 4319 l
-2800 4319 m
-2943 4319 l
-2943 4320 l
-2800 4320 l
-2804 4320 m
-2943 4320 l
-2943 4321 l
-2804 4321 l
-2808 4321 m
-2942 4321 l
-2942 4322 l
-2808 4322 l
-2811 4322 m
-2942 4322 l
-2942 4323 l
-2811 4323 l
-2815 4323 m
-2942 4323 l
-2942 4324 l
-2815 4324 l
-2819 4324 m
-2941 4324 l
-2941 4325 l
-2819 4325 l
-2823 4325 m
-2941 4325 l
-2941 4326 l
-2823 4326 l
-2827 4326 m
-2941 4326 l
-2941 4327 l
-2827 4327 l
-2830 4327 m
-2941 4327 l
-2941 4328 l
-2830 4328 l
-2834 4328 m
-2940 4328 l
-2940 4329 l
-2834 4329 l
-2838 4329 m
-2940 4329 l
-2940 4330 l
-2838 4330 l
-2842 4330 m
-2940 4330 l
-2940 4331 l
-2842 4331 l
-2846 4331 m
-2940 4331 l
-2940 4332 l
-2846 4332 l
-2849 4332 m
-2939 4332 l
-2939 4333 l
-2849 4333 l
-2853 4333 m
-2939 4333 l
-2939 4334 l
-2853 4334 l
-2857 4334 m
-2939 4334 l
-2939 4335 l
-2857 4335 l
-2861 4335 m
-2939 4335 l
-2939 4336 l
-2861 4336 l
-2864 4336 m
-2938 4336 l
-2938 4337 l
-2864 4337 l
-2868 4337 m
-2938 4337 l
-2938 4338 l
-2868 4338 l
-2872 4338 m
-2938 4338 l
-2938 4339 l
-2872 4339 l
-2876 4339 m
-2937 4339 l
-2937 4340 l
-2876 4340 l
-2880 4340 m
-2937 4340 l
-2937 4341 l
-2880 4341 l
-2883 4341 m
-2937 4341 l
-2937 4342 l
-2883 4342 l
-2887 4342 m
-2937 4342 l
-2937 4343 l
-2887 4343 l
-2891 4343 m
-2936 4343 l
-2936 4344 l
-2891 4344 l
-2895 4344 m
-2936 4344 l
-2936 4345 l
-2895 4345 l
-2898 4345 m
-2936 4345 l
-2936 4346 l
-2898 4346 l
-2902 4346 m
-2936 4346 l
-2936 4347 l
-2902 4347 l
-2906 4347 m
-2935 4347 l
-2935 4348 l
-2906 4348 l
-2910 4348 m
-2935 4348 l
-2935 4349 l
-2910 4349 l
-2914 4349 m
-2935 4349 l
-2935 4350 l
-2914 4350 l
-2917 4350 m
-2935 4350 l
-2935 4351 l
-2917 4351 l
-2921 4351 m
-2934 4351 l
-2934 4352 l
-2921 4352 l
-2925 4352 m
-2934 4352 l
-2934 4353 l
-2925 4353 l
-2929 4353 m
-2934 4353 l
-2934 4354 l
-2929 4354 l
-Y
-2790.2 4190.9 m
-2759 4308 l
-2933 4354 l
-2964 4237 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-2836 4298 m
-2829 4305 l
-2816 4306 l
-2808 4304 l
-2797 4296 l
-2792 4282 l
-2793 4261 l
-2799 4241 l
-2807 4226 l
-2817 4220 l
-2830 4219 l
-2834 4220 l
-2845 4227 l
-2851 4237 l
-2852 4250 l
-2851 4254 l
-2844 4266 l
-2834 4272 l
-2821 4272 l
-2817 4271 l
-2806 4264 l
-2800 4254 l
-2799 4241 l
-S
-2885 4324 m
-2874 4317 l
-2869 4302 l
-2870 4281 l
-2873 4269 l
-2883 4250 l
-2894 4240 l
-2907 4239 l
-2915 4241 l
-2926 4248 l
-2931 4263 l
-2930 4284 l
-2927 4296 l
-2917 4315 l
-2906 4325 l
-2893 4326 l
-2885 4324 l
-S
-1 g
-3525 4216 m
-3529 4216 l
-3529 4217 l
-3525 4217 l
-3522 4217 m
-3529 4217 l
-3529 4218 l
-3522 4218 l
-3519 4218 m
-3530 4218 l
-3530 4219 l
-3519 4219 l
-3516 4219 m
-3530 4219 l
-3530 4220 l
-3516 4220 l
-3513 4220 m
-3530 4220 l
-3530 4221 l
-3513 4221 l
-3510 4221 m
-3531 4221 l
-3531 4222 l
-3510 4222 l
-3507 4222 m
-3531 4222 l
-3531 4223 l
-3507 4223 l
-3504 4223 m
-3531 4223 l
-3531 4224 l
-3504 4224 l
-3502 4224 m
-3532 4224 l
-3532 4225 l
-3502 4225 l
-3499 4225 m
-3532 4225 l
-3532 4226 l
-3499 4226 l
-3496 4226 m
-3532 4226 l
-3532 4227 l
-3496 4227 l
-3493 4227 m
-3533 4227 l
-3533 4228 l
-3493 4228 l
-3490 4228 m
-3533 4228 l
-3533 4229 l
-3490 4229 l
-3487 4229 m
-3533 4229 l
-3533 4230 l
-3487 4230 l
-3484 4230 m
-3534 4230 l
-3534 4231 l
-3484 4231 l
-3481 4231 m
-3534 4231 l
-3534 4232 l
-3481 4232 l
-3479 4232 m
-3534 4232 l
-3534 4233 l
-3479 4233 l
-3476 4233 m
-3535 4233 l
-3535 4234 l
-3476 4234 l
-3473 4234 m
-3535 4234 l
-3535 4235 l
-3473 4235 l
-3470 4235 m
-3536 4235 l
-3536 4236 l
-3470 4236 l
-3467 4236 m
-3536 4236 l
-3536 4237 l
-3467 4237 l
-3464 4237 m
-3536 4237 l
-3536 4238 l
-3464 4238 l
-3461 4238 m
-3537 4238 l
-3537 4239 l
-3461 4239 l
-3458 4239 m
-3537 4239 l
-3537 4240 l
-3458 4240 l
-3456 4240 m
-3537 4240 l
-3537 4241 l
-3456 4241 l
-3453 4241 m
-3538 4241 l
-3538 4242 l
-3453 4242 l
-3450 4242 m
-3538 4242 l
-3538 4243 l
-3450 4243 l
-3447 4243 m
-3538 4243 l
-3538 4244 l
-3447 4244 l
-3444 4244 m
-3539 4244 l
-3539 4245 l
-3444 4245 l
-3441 4245 m
-3539 4245 l
-3539 4246 l
-3441 4246 l
-3438 4246 m
-3539 4246 l
-3539 4247 l
-3438 4247 l
-3435 4247 m
-3540 4247 l
-3540 4248 l
-3435 4248 l
-3433 4248 m
-3540 4248 l
-3540 4249 l
-3433 4249 l
-3433 4249 m
-3540 4249 l
-3540 4250 l
-3433 4250 l
-3433 4250 m
-3541 4250 l
-3541 4252 l
-3433 4252 l
-3434 4252 m
-3541 4252 l
-3541 4253 l
-3434 4253 l
-3434 4253 m
-3542 4253 l
-3542 4255 l
-3434 4255 l
-3435 4255 m
-3543 4255 l
-3543 4258 l
-3435 4258 l
-3436 4258 m
-3544 4258 l
-3544 4261 l
-3436 4261 l
-3437 4261 m
-3545 4261 l
-3545 4264 l
-3437 4264 l
-3438 4264 m
-3546 4264 l
-3546 4267 l
-3438 4267 l
-3439 4267 m
-3547 4267 l
-3547 4269 l
-3439 4269 l
-3440 4269 m
-3547 4269 l
-3547 4270 l
-3440 4270 l
-3440 4270 m
-3548 4270 l
-3548 4272 l
-3440 4272 l
-3441 4272 m
-3548 4272 l
-3548 4273 l
-3441 4273 l
-3441 4273 m
-3549 4273 l
-3549 4275 l
-3441 4275 l
-3442 4275 m
-3550 4275 l
-3550 4278 l
-3442 4278 l
-3443 4278 m
-3551 4278 l
-3551 4281 l
-3443 4281 l
-3444 4281 m
-3552 4281 l
-3552 4284 l
-3444 4284 l
-3445 4284 m
-3553 4284 l
-3553 4287 l
-3445 4287 l
-3446 4287 m
-3554 4287 l
-3554 4289 l
-3446 4289 l
-3447 4289 m
-3554 4289 l
-3554 4290 l
-3447 4290 l
-3447 4290 m
-3555 4290 l
-3555 4292 l
-3447 4292 l
-3448 4292 m
-3555 4292 l
-3555 4293 l
-3448 4293 l
-3448 4293 m
-3556 4293 l
-3556 4295 l
-3448 4295 l
-3449 4295 m
-3557 4295 l
-3557 4298 l
-3449 4298 l
-3450 4298 m
-3558 4298 l
-3558 4301 l
-3450 4301 l
-3451 4301 m
-3559 4301 l
-3559 4304 l
-3451 4304 l
-3452 4304 m
-3560 4304 l
-3560 4306 l
-3452 4306 l
-3453 4306 m
-3560 4306 l
-3560 4307 l
-3453 4307 l
-3453 4307 m
-3561 4307 l
-3561 4309 l
-3453 4309 l
-3454 4309 m
-3561 4309 l
-3561 4310 l
-3454 4310 l
-3454 4310 m
-3562 4310 l
-3562 4312 l
-3454 4312 l
-3455 4312 m
-3563 4312 l
-3563 4315 l
-3455 4315 l
-3456 4315 m
-3564 4315 l
-3564 4318 l
-3456 4318 l
-3457 4318 m
-3565 4318 l
-3565 4321 l
-3457 4321 l
-3458 4321 m
-3566 4321 l
-3566 4324 l
-3458 4324 l
-3459 4324 m
-3567 4324 l
-3567 4326 l
-3459 4326 l
-3460 4326 m
-3567 4326 l
-3567 4327 l
-3460 4327 l
-3460 4327 m
-3568 4327 l
-3568 4329 l
-3460 4329 l
-3461 4329 m
-3568 4329 l
-3568 4330 l
-3461 4330 l
-3461 4330 m
-3569 4330 l
-3569 4331 l
-3461 4331 l
-3461 4331 m
-3566 4331 l
-3566 4332 l
-3461 4332 l
-3462 4332 m
-3563 4332 l
-3563 4333 l
-3462 4333 l
-3462 4333 m
-3560 4333 l
-3560 4334 l
-3462 4334 l
-3462 4334 m
-3557 4334 l
-3557 4335 l
-3462 4335 l
-3463 4335 m
-3554 4335 l
-3554 4336 l
-3463 4336 l
-3463 4336 m
-3551 4336 l
-3551 4337 l
-3463 4337 l
-3463 4337 m
-3549 4337 l
-3549 4338 l
-3463 4338 l
-3464 4338 m
-3546 4338 l
-3546 4339 l
-3464 4339 l
-3464 4339 m
-3543 4339 l
-3543 4340 l
-3464 4340 l
-3464 4340 m
-3540 4340 l
-3540 4341 l
-3464 4341 l
-3465 4341 m
-3537 4341 l
-3537 4342 l
-3465 4342 l
-3465 4342 m
-3534 4342 l
-3534 4343 l
-3465 4343 l
-3465 4343 m
-3531 4343 l
-3531 4344 l
-3465 4344 l
-3466 4344 m
-3528 4344 l
-3528 4345 l
-3466 4345 l
-3466 4345 m
-3525 4345 l
-3525 4346 l
-3466 4346 l
-3467 4346 m
-3523 4346 l
-3523 4347 l
-3467 4347 l
-3467 4347 m
-3520 4347 l
-3520 4348 l
-3467 4348 l
-3467 4348 m
-3517 4348 l
-3517 4349 l
-3467 4349 l
-3468 4349 m
-3514 4349 l
-3514 4350 l
-3468 4350 l
-3468 4350 m
-3511 4350 l
-3511 4351 l
-3468 4351 l
-3468 4351 m
-3508 4351 l
-3508 4352 l
-3468 4352 l
-3469 4352 m
-3505 4352 l
-3505 4353 l
-3469 4353 l
-3469 4353 m
-3502 4353 l
-3502 4354 l
-3469 4354 l
-3469 4354 m
-3499 4354 l
-3499 4355 l
-3469 4355 l
-3470 4355 m
-3497 4355 l
-3497 4356 l
-3470 4356 l
-3470 4356 m
-3494 4356 l
-3494 4357 l
-3470 4357 l
-3470 4357 m
-3491 4357 l
-3491 4358 l
-3470 4358 l
-3471 4358 m
-3488 4358 l
-3488 4359 l
-3471 4359 l
-3471 4359 m
-3485 4359 l
-3485 4360 l
-3471 4360 l
-3471 4360 m
-3482 4360 l
-3482 4361 l
-3471 4361 l
-3472 4361 m
-3479 4361 l
-3479 4362 l
-3472 4362 l
-3472 4362 m
-3476 4362 l
-3476 4363 l
-3472 4363 l
-Y
-3568 4330.1 m
-3528 4216 l
-3433 4249 l
-3473 4363 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-3490 4247 m
-3503 4246 l
-3515 4256 l
-3526 4274 l
-3530 4286 l
-3533 4307 l
-3530 4321 l
-3519 4329 l
-3511 4332 l
-3498 4332 l
-3486 4323 l
-3475 4305 l
-3471 4293 l
-3468 4272 l
-3472 4257 l
-3482 4249 l
-3490 4247 l
-S
-1 g
-2845 3271 m
-2847 3271 l
-2847 3272 l
-2845 3272 l
-2845 3272 m
-2849 3272 l
-2849 3273 l
-2845 3273 l
-2844 3273 m
-2851 3273 l
-2851 3274 l
-2844 3274 l
-2843 3274 m
-2853 3274 l
-2853 3275 l
-2843 3275 l
-2843 3275 m
-2855 3275 l
-2855 3276 l
-2843 3276 l
-2842 3276 m
-2856 3276 l
-2856 3277 l
-2842 3277 l
-2842 3277 m
-2858 3277 l
-2858 3278 l
-2842 3278 l
-2841 3278 m
-2860 3278 l
-2860 3279 l
-2841 3279 l
-2841 3279 m
-2862 3279 l
-2862 3280 l
-2841 3280 l
-2840 3280 m
-2864 3280 l
-2864 3281 l
-2840 3281 l
-2840 3281 m
-2865 3281 l
-2865 3282 l
-2840 3282 l
-2839 3282 m
-2867 3282 l
-2867 3283 l
-2839 3283 l
-2838 3283 m
-2869 3283 l
-2869 3284 l
-2838 3284 l
-2838 3284 m
-2871 3284 l
-2871 3285 l
-2838 3285 l
-2837 3285 m
-2873 3285 l
-2873 3286 l
-2837 3286 l
-2837 3286 m
-2874 3286 l
-2874 3287 l
-2837 3287 l
-2836 3287 m
-2876 3287 l
-2876 3288 l
-2836 3288 l
-2836 3288 m
-2878 3288 l
-2878 3289 l
-2836 3289 l
-2835 3289 m
-2880 3289 l
-2880 3290 l
-2835 3290 l
-2835 3290 m
-2882 3290 l
-2882 3291 l
-2835 3291 l
-2834 3291 m
-2883 3291 l
-2883 3292 l
-2834 3292 l
-2834 3292 m
-2885 3292 l
-2885 3293 l
-2834 3293 l
-2833 3293 m
-2887 3293 l
-2887 3294 l
-2833 3294 l
-2832 3294 m
-2889 3294 l
-2889 3295 l
-2832 3295 l
-2832 3295 m
-2891 3295 l
-2891 3296 l
-2832 3296 l
-2831 3296 m
-2892 3296 l
-2892 3297 l
-2831 3297 l
-2831 3297 m
-2894 3297 l
-2894 3298 l
-2831 3298 l
-2830 3298 m
-2896 3298 l
-2896 3299 l
-2830 3299 l
-2830 3299 m
-2898 3299 l
-2898 3300 l
-2830 3300 l
-2829 3300 m
-2900 3300 l
-2900 3301 l
-2829 3301 l
-2829 3301 m
-2902 3301 l
-2902 3302 l
-2829 3302 l
-2828 3302 m
-2903 3302 l
-2903 3303 l
-2828 3303 l
-2827 3303 m
-2905 3303 l
-2905 3304 l
-2827 3304 l
-2827 3304 m
-2907 3304 l
-2907 3305 l
-2827 3305 l
-2826 3305 m
-2909 3305 l
-2909 3306 l
-2826 3306 l
-2826 3306 m
-2911 3306 l
-2911 3307 l
-2826 3307 l
-2825 3307 m
-2912 3307 l
-2912 3308 l
-2825 3308 l
-2825 3308 m
-2914 3308 l
-2914 3309 l
-2825 3309 l
-2824 3309 m
-2916 3309 l
-2916 3310 l
-2824 3310 l
-2824 3310 m
-2918 3310 l
-2918 3311 l
-2824 3311 l
-2823 3311 m
-2920 3311 l
-2920 3312 l
-2823 3312 l
-2822 3312 m
-2921 3312 l
-2921 3313 l
-2822 3313 l
-2822 3313 m
-2923 3313 l
-2923 3314 l
-2822 3314 l
-2821 3314 m
-2925 3314 l
-2925 3315 l
-2821 3315 l
-2821 3315 m
-2927 3315 l
-2927 3316 l
-2821 3316 l
-2820 3316 m
-2929 3316 l
-2929 3317 l
-2820 3317 l
-2820 3317 m
-2930 3317 l
-2930 3318 l
-2820 3318 l
-2819 3318 m
-2932 3318 l
-2932 3319 l
-2819 3319 l
-2819 3319 m
-2934 3319 l
-2934 3320 l
-2819 3320 l
-2818 3320 m
-2936 3320 l
-2936 3321 l
-2818 3321 l
-2817 3321 m
-2938 3321 l
-2938 3322 l
-2817 3322 l
-2817 3322 m
-2939 3322 l
-2939 3323 l
-2817 3323 l
-2816 3323 m
-2941 3323 l
-2941 3324 l
-2816 3324 l
-2816 3324 m
-2943 3324 l
-2943 3325 l
-2816 3325 l
-2815 3325 m
-2945 3325 l
-2945 3326 l
-2815 3326 l
-2815 3326 m
-2947 3326 l
-2947 3327 l
-2815 3327 l
-2814 3327 m
-2949 3327 l
-2949 3328 l
-2814 3328 l
-2814 3328 m
-2950 3328 l
-2950 3329 l
-2814 3329 l
-2813 3329 m
-2952 3329 l
-2952 3330 l
-2813 3330 l
-2812 3330 m
-2954 3330 l
-2954 3331 l
-2812 3331 l
-2812 3331 m
-2956 3331 l
-2956 3332 l
-2812 3332 l
-2811 3332 m
-2958 3332 l
-2958 3333 l
-2811 3333 l
-2811 3333 m
-2959 3333 l
-2959 3334 l
-2811 3334 l
-2810 3334 m
-2961 3334 l
-2961 3335 l
-2810 3335 l
-2810 3335 m
-2963 3335 l
-2963 3336 l
-2810 3336 l
-2809 3336 m
-2965 3336 l
-2965 3337 l
-2809 3337 l
-2809 3337 m
-2967 3337 l
-2967 3338 l
-2809 3338 l
-2808 3338 m
-2968 3338 l
-2968 3339 l
-2808 3339 l
-2808 3339 m
-2970 3339 l
-2970 3340 l
-2808 3340 l
-2807 3340 m
-2972 3340 l
-2972 3341 l
-2807 3341 l
-2806 3341 m
-2974 3341 l
-2974 3342 l
-2806 3342 l
-2806 3342 m
-2976 3342 l
-2976 3343 l
-2806 3343 l
-2805 3343 m
-2977 3343 l
-2977 3344 l
-2805 3344 l
-2805 3344 m
-2979 3344 l
-2979 3345 l
-2805 3345 l
-2804 3345 m
-2981 3345 l
-2981 3346 l
-2804 3346 l
-2804 3346 m
-2983 3346 l
-2983 3347 l
-2804 3347 l
-2803 3347 m
-2985 3347 l
-2985 3348 l
-2803 3348 l
-2803 3348 m
-2986 3348 l
-2986 3349 l
-2803 3349 l
-2802 3349 m
-2988 3349 l
-2988 3350 l
-2802 3350 l
-2801 3350 m
-2990 3350 l
-2990 3351 l
-2801 3351 l
-2801 3351 m
-2992 3351 l
-2992 3352 l
-2801 3352 l
-2800 3352 m
-2994 3352 l
-2994 3353 l
-2800 3353 l
-2800 3353 m
-2995 3353 l
-2995 3354 l
-2800 3354 l
-2799 3354 m
-2997 3354 l
-2997 3355 l
-2799 3355 l
-2799 3355 m
-2999 3355 l
-2999 3356 l
-2799 3356 l
-2798 3356 m
-3001 3356 l
-3001 3357 l
-2798 3357 l
-2798 3357 m
-3003 3357 l
-3003 3358 l
-2798 3358 l
-2797 3358 m
-3005 3358 l
-3005 3359 l
-2797 3359 l
-2796 3359 m
-3006 3359 l
-3006 3360 l
-2796 3360 l
-2796 3360 m
-3008 3360 l
-3008 3361 l
-2796 3361 l
-2795 3361 m
-3010 3361 l
-3010 3362 l
-2795 3362 l
-2795 3362 m
-3012 3362 l
-3012 3363 l
-2795 3363 l
-2794 3363 m
-3014 3363 l
-3014 3364 l
-2794 3364 l
-2794 3364 m
-3015 3364 l
-3015 3365 l
-2794 3365 l
-2793 3365 m
-3017 3365 l
-3017 3366 l
-2793 3366 l
-2793 3366 m
-3019 3366 l
-3019 3367 l
-2793 3367 l
-2792 3367 m
-3021 3367 l
-3021 3368 l
-2792 3368 l
-2791 3368 m
-3023 3368 l
-3023 3369 l
-2791 3369 l
-2791 3369 m
-3024 3369 l
-3024 3370 l
-2791 3370 l
-2790 3370 m
-3026 3370 l
-3026 3371 l
-2790 3371 l
-2790 3371 m
-3028 3371 l
-3028 3372 l
-2790 3372 l
-2789 3372 m
-3030 3372 l
-3030 3373 l
-2789 3373 l
-2789 3373 m
-3032 3373 l
-3032 3374 l
-2789 3374 l
-2788 3374 m
-3033 3374 l
-3033 3375 l
-2788 3375 l
-2788 3375 m
-3035 3375 l
-3035 3376 l
-2788 3376 l
-2787 3376 m
-3037 3376 l
-3037 3377 l
-2787 3377 l
-2787 3377 m
-3039 3377 l
-3039 3378 l
-2787 3378 l
-2787 3378 m
-3041 3378 l
-3041 3379 l
-2787 3379 l
-2788 3379 m
-3042 3379 l
-3042 3380 l
-2788 3380 l
-2790 3380 m
-3044 3380 l
-3044 3381 l
-2790 3381 l
-2792 3381 m
-3046 3381 l
-3046 3382 l
-2792 3382 l
-2794 3382 m
-3048 3382 l
-3048 3383 l
-2794 3383 l
-2796 3383 m
-3050 3383 l
-3050 3384 l
-2796 3384 l
-2797 3384 m
-3052 3384 l
-3052 3385 l
-2797 3385 l
-2799 3385 m
-3053 3385 l
-3053 3386 l
-2799 3386 l
-2801 3386 m
-3055 3386 l
-3055 3387 l
-2801 3387 l
-2803 3387 m
-3057 3387 l
-3057 3388 l
-2803 3388 l
-2805 3388 m
-3059 3388 l
-3059 3389 l
-2805 3389 l
-2806 3389 m
-3061 3389 l
-3061 3390 l
-2806 3390 l
-2808 3390 m
-3062 3390 l
-3062 3391 l
-2808 3391 l
-2810 3391 m
-3064 3391 l
-3064 3392 l
-2810 3392 l
-2812 3392 m
-3066 3392 l
-3066 3393 l
-2812 3393 l
-2814 3393 m
-3068 3393 l
-3068 3394 l
-2814 3394 l
-2816 3394 m
-3070 3394 l
-3070 3395 l
-2816 3395 l
-2817 3395 m
-3071 3395 l
-3071 3396 l
-2817 3396 l
-2819 3396 m
-3073 3396 l
-3073 3397 l
-2819 3397 l
-2821 3397 m
-3075 3397 l
-3075 3398 l
-2821 3398 l
-2823 3398 m
-3077 3398 l
-3077 3399 l
-2823 3399 l
-2825 3399 m
-3079 3399 l
-3079 3400 l
-2825 3400 l
-2826 3400 m
-3080 3400 l
-3080 3401 l
-2826 3401 l
-2828 3401 m
-3082 3401 l
-3082 3402 l
-2828 3402 l
-2830 3402 m
-3084 3402 l
-3084 3403 l
-2830 3403 l
-2832 3403 m
-3086 3403 l
-3086 3404 l
-2832 3404 l
-2834 3404 m
-3088 3404 l
-3088 3405 l
-2834 3405 l
-2835 3405 m
-3089 3405 l
-3089 3406 l
-2835 3406 l
-2837 3406 m
-3091 3406 l
-3091 3407 l
-2837 3407 l
-2839 3407 m
-3093 3407 l
-3093 3408 l
-2839 3408 l
-2841 3408 m
-3095 3408 l
-3095 3409 l
-2841 3409 l
-2843 3409 m
-3097 3409 l
-3097 3410 l
-2843 3410 l
-2845 3410 m
-3098 3410 l
-3098 3411 l
-2845 3411 l
-2846 3411 m
-3099 3411 l
-3099 3412 l
-2846 3412 l
-2848 3412 m
-3098 3412 l
-3098 3413 l
-2848 3413 l
-2850 3413 m
-3097 3413 l
-3097 3414 l
-2850 3414 l
-2852 3414 m
-3097 3414 l
-3097 3415 l
-2852 3415 l
-2854 3415 m
-3096 3415 l
-3096 3416 l
-2854 3416 l
-2855 3416 m
-3096 3416 l
-3096 3417 l
-2855 3417 l
-2857 3417 m
-3095 3417 l
-3095 3418 l
-2857 3418 l
-2859 3418 m
-3095 3418 l
-3095 3419 l
-2859 3419 l
-2861 3419 m
-3094 3419 l
-3094 3420 l
-2861 3420 l
-2863 3420 m
-3093 3420 l
-3093 3421 l
-2863 3421 l
-2864 3421 m
-3093 3421 l
-3093 3422 l
-2864 3422 l
-2866 3422 m
-3092 3422 l
-3092 3423 l
-2866 3423 l
-2868 3423 m
-3092 3423 l
-3092 3424 l
-2868 3424 l
-2870 3424 m
-3091 3424 l
-3091 3425 l
-2870 3425 l
-2872 3425 m
-3091 3425 l
-3091 3426 l
-2872 3426 l
-2874 3426 m
-3090 3426 l
-3090 3427 l
-2874 3427 l
-2875 3427 m
-3090 3427 l
-3090 3428 l
-2875 3428 l
-2877 3428 m
-3089 3428 l
-3089 3429 l
-2877 3429 l
-2879 3429 m
-3088 3429 l
-3088 3430 l
-2879 3430 l
-2881 3430 m
-3088 3430 l
-3088 3431 l
-2881 3431 l
-2883 3431 m
-3087 3431 l
-3087 3432 l
-2883 3432 l
-2884 3432 m
-3087 3432 l
-3087 3433 l
-2884 3433 l
-2886 3433 m
-3086 3433 l
-3086 3434 l
-2886 3434 l
-2888 3434 m
-3086 3434 l
-3086 3435 l
-2888 3435 l
-2890 3435 m
-3085 3435 l
-3085 3436 l
-2890 3436 l
-2892 3436 m
-3085 3436 l
-3085 3437 l
-2892 3437 l
-2893 3437 m
-3084 3437 l
-3084 3438 l
-2893 3438 l
-2895 3438 m
-3083 3438 l
-3083 3439 l
-2895 3439 l
-2897 3439 m
-3083 3439 l
-3083 3440 l
-2897 3440 l
-2899 3440 m
-3082 3440 l
-3082 3441 l
-2899 3441 l
-2901 3441 m
-3082 3441 l
-3082 3442 l
-2901 3442 l
-2903 3442 m
-3081 3442 l
-3081 3443 l
-2903 3443 l
-2904 3443 m
-3081 3443 l
-3081 3444 l
-2904 3444 l
-2906 3444 m
-3080 3444 l
-3080 3445 l
-2906 3445 l
-2908 3445 m
-3080 3445 l
-3080 3446 l
-2908 3446 l
-2910 3446 m
-3079 3446 l
-3079 3447 l
-2910 3447 l
-2912 3447 m
-3078 3447 l
-3078 3448 l
-2912 3448 l
-2913 3448 m
-3078 3448 l
-3078 3449 l
-2913 3449 l
-2915 3449 m
-3077 3449 l
-3077 3450 l
-2915 3450 l
-2917 3450 m
-3077 3450 l
-3077 3451 l
-2917 3451 l
-2919 3451 m
-3076 3451 l
-3076 3452 l
-2919 3452 l
-2921 3452 m
-3076 3452 l
-3076 3453 l
-2921 3453 l
-2922 3453 m
-3075 3453 l
-3075 3454 l
-2922 3454 l
-2924 3454 m
-3075 3454 l
-3075 3455 l
-2924 3455 l
-2926 3455 m
-3074 3455 l
-3074 3456 l
-2926 3456 l
-2928 3456 m
-3073 3456 l
-3073 3457 l
-2928 3457 l
-2930 3457 m
-3073 3457 l
-3073 3458 l
-2930 3458 l
-2932 3458 m
-3072 3458 l
-3072 3459 l
-2932 3459 l
-2933 3459 m
-3072 3459 l
-3072 3460 l
-2933 3460 l
-2935 3460 m
-3071 3460 l
-3071 3461 l
-2935 3461 l
-2937 3461 m
-3071 3461 l
-3071 3462 l
-2937 3462 l
-2939 3462 m
-3070 3462 l
-3070 3463 l
-2939 3463 l
-2941 3463 m
-3070 3463 l
-3070 3464 l
-2941 3464 l
-2942 3464 m
-3069 3464 l
-3069 3465 l
-2942 3465 l
-2944 3465 m
-3068 3465 l
-3068 3466 l
-2944 3466 l
-2946 3466 m
-3068 3466 l
-3068 3467 l
-2946 3467 l
-2948 3467 m
-3067 3467 l
-3067 3468 l
-2948 3468 l
-2950 3468 m
-3067 3468 l
-3067 3469 l
-2950 3469 l
-2951 3469 m
-3066 3469 l
-3066 3470 l
-2951 3470 l
-2953 3470 m
-3066 3470 l
-3066 3471 l
-2953 3471 l
-2955 3471 m
-3065 3471 l
-3065 3472 l
-2955 3472 l
-2957 3472 m
-3065 3472 l
-3065 3473 l
-2957 3473 l
-2959 3473 m
-3064 3473 l
-3064 3474 l
-2959 3474 l
-2961 3474 m
-3063 3474 l
-3063 3475 l
-2961 3475 l
-2962 3475 m
-3063 3475 l
-3063 3476 l
-2962 3476 l
-2964 3476 m
-3062 3476 l
-3062 3477 l
-2964 3477 l
-2966 3477 m
-3062 3477 l
-3062 3478 l
-2966 3478 l
-2968 3478 m
-3061 3478 l
-3061 3479 l
-2968 3479 l
-2970 3479 m
-3061 3479 l
-3061 3480 l
-2970 3480 l
-2971 3480 m
-3060 3480 l
-3060 3481 l
-2971 3481 l
-2973 3481 m
-3060 3481 l
-3060 3482 l
-2973 3482 l
-2975 3482 m
-3059 3482 l
-3059 3483 l
-2975 3483 l
-2977 3483 m
-3058 3483 l
-3058 3484 l
-2977 3484 l
-2979 3484 m
-3058 3484 l
-3058 3485 l
-2979 3485 l
-2980 3485 m
-3057 3485 l
-3057 3486 l
-2980 3486 l
-2982 3486 m
-3057 3486 l
-3057 3487 l
-2982 3487 l
-2984 3487 m
-3056 3487 l
-3056 3488 l
-2984 3488 l
-2986 3488 m
-3056 3488 l
-3056 3489 l
-2986 3489 l
-2988 3489 m
-3055 3489 l
-3055 3490 l
-2988 3490 l
-2990 3490 m
-3055 3490 l
-3055 3491 l
-2990 3491 l
-2991 3491 m
-3054 3491 l
-3054 3492 l
-2991 3492 l
-2993 3492 m
-3053 3492 l
-3053 3493 l
-2993 3493 l
-2995 3493 m
-3053 3493 l
-3053 3494 l
-2995 3494 l
-2997 3494 m
-3052 3494 l
-3052 3495 l
-2997 3495 l
-2999 3495 m
-3052 3495 l
-3052 3496 l
-2999 3496 l
-3000 3496 m
-3051 3496 l
-3051 3497 l
-3000 3497 l
-3002 3497 m
-3051 3497 l
-3051 3498 l
-3002 3498 l
-3004 3498 m
-3050 3498 l
-3050 3499 l
-3004 3499 l
-3006 3499 m
-3050 3499 l
-3050 3500 l
-3006 3500 l
-3008 3500 m
-3049 3500 l
-3049 3501 l
-3008 3501 l
-3009 3501 m
-3048 3501 l
-3048 3502 l
-3009 3502 l
-3011 3502 m
-3048 3502 l
-3048 3503 l
-3011 3503 l
-3013 3503 m
-3047 3503 l
-3047 3504 l
-3013 3504 l
-3015 3504 m
-3047 3504 l
-3047 3505 l
-3015 3505 l
-3017 3505 m
-3046 3505 l
-3046 3506 l
-3017 3506 l
-3019 3506 m
-3046 3506 l
-3046 3507 l
-3019 3507 l
-3020 3507 m
-3045 3507 l
-3045 3508 l
-3020 3508 l
-3022 3508 m
-3045 3508 l
-3045 3509 l
-3022 3509 l
-3024 3509 m
-3044 3509 l
-3044 3510 l
-3024 3510 l
-3026 3510 m
-3043 3510 l
-3043 3511 l
-3026 3511 l
-3028 3511 m
-3043 3511 l
-3043 3512 l
-3028 3512 l
-3029 3512 m
-3042 3512 l
-3042 3513 l
-3029 3513 l
-3031 3513 m
-3042 3513 l
-3042 3514 l
-3031 3514 l
-3033 3514 m
-3041 3514 l
-3041 3515 l
-3033 3515 l
-3035 3515 m
-3041 3515 l
-3041 3516 l
-3035 3516 l
-3037 3516 m
-3040 3516 l
-3040 3517 l
-3037 3517 l
-Y
-2845.9 3271.5 m
-2787 3378 l
-3039 3517 l
-3098 3411 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-2838 3329 m
-2904 3366 l
-S
-2967 3424 m
-2969 3411 l
-2966 3400 l
-2957 3390 l
-2953 3388 l
-2940 3386 l
-2929 3389 l
-2919 3398 l
-2917 3402 l
-2915 3415 l
-2918 3426 l
-2927 3436 l
-2931 3438 l
-2944 3440 l
-2955 3437 l
-2967 3424 l
-2977 3406 l
-2983 3386 l
-2982 3371 l
-2973 3361 l
-2966 3357 l
-2953 3354 l
-2945 3360 l
-S
-3000 3476 m
-2991 3466 l
-2990 3451 l
-2996 3431 l
-3002 3420 l
-3016 3404 l
-3029 3397 l
-3042 3399 l
-3050 3403 l
-3059 3413 l
-3060 3428 l
-3054 3448 l
-3047 3459 l
-3034 3476 l
-3020 3483 l
-3007 3480 l
-3000 3476 l
-S
-1 g
-3190 3488 m
-3192 3488 l
-3192 3489 l
-3190 3489 l
-3189 3489 m
-3193 3489 l
-3193 3490 l
-3189 3490 l
-3187 3490 m
-3194 3490 l
-3194 3491 l
-3187 3491 l
-3186 3491 m
-3195 3491 l
-3195 3492 l
-3186 3492 l
-3185 3492 m
-3196 3492 l
-3196 3493 l
-3185 3493 l
-3184 3493 m
-3197 3493 l
-3197 3494 l
-3184 3494 l
-3183 3494 m
-3197 3494 l
-3197 3495 l
-3183 3495 l
-3181 3495 m
-3198 3495 l
-3198 3496 l
-3181 3496 l
-3180 3496 m
-3199 3496 l
-3199 3497 l
-3180 3497 l
-3179 3497 m
-3200 3497 l
-3200 3498 l
-3179 3498 l
-3178 3498 m
-3201 3498 l
-3201 3499 l
-3178 3499 l
-3176 3499 m
-3202 3499 l
-3202 3500 l
-3176 3500 l
-3175 3500 m
-3202 3500 l
-3202 3501 l
-3175 3501 l
-3174 3501 m
-3203 3501 l
-3203 3502 l
-3174 3502 l
-3173 3502 m
-3204 3502 l
-3204 3503 l
-3173 3503 l
-3172 3503 m
-3205 3503 l
-3205 3504 l
-3172 3504 l
-3170 3504 m
-3206 3504 l
-3206 3505 l
-3170 3505 l
-3169 3505 m
-3207 3505 l
-3207 3506 l
-3169 3506 l
-3168 3506 m
-3207 3506 l
-3207 3507 l
-3168 3507 l
-3167 3507 m
-3208 3507 l
-3208 3508 l
-3167 3508 l
-3166 3508 m
-3209 3508 l
-3209 3509 l
-3166 3509 l
-3164 3509 m
-3210 3509 l
-3210 3510 l
-3164 3510 l
-3163 3510 m
-3211 3510 l
-3211 3511 l
-3163 3511 l
-3162 3511 m
-3212 3511 l
-3212 3512 l
-3162 3512 l
-3161 3512 m
-3212 3512 l
-3212 3513 l
-3161 3513 l
-3159 3513 m
-3213 3513 l
-3213 3514 l
-3159 3514 l
-3158 3514 m
-3214 3514 l
-3214 3515 l
-3158 3515 l
-3157 3515 m
-3215 3515 l
-3215 3516 l
-3157 3516 l
-3156 3516 m
-3216 3516 l
-3216 3517 l
-3156 3517 l
-3155 3517 m
-3216 3517 l
-3216 3518 l
-3155 3518 l
-3153 3518 m
-3217 3518 l
-3217 3519 l
-3153 3519 l
-3152 3519 m
-3218 3519 l
-3218 3520 l
-3152 3520 l
-3151 3520 m
-3219 3520 l
-3219 3521 l
-3151 3521 l
-3150 3521 m
-3220 3521 l
-3220 3522 l
-3150 3522 l
-3149 3522 m
-3221 3522 l
-3221 3523 l
-3149 3523 l
-3147 3523 m
-3221 3523 l
-3221 3524 l
-3147 3524 l
-3146 3524 m
-3222 3524 l
-3222 3525 l
-3146 3525 l
-3145 3525 m
-3223 3525 l
-3223 3526 l
-3145 3526 l
-3144 3526 m
-3224 3526 l
-3224 3527 l
-3144 3527 l
-3142 3527 m
-3225 3527 l
-3225 3528 l
-3142 3528 l
-3141 3528 m
-3226 3528 l
-3226 3529 l
-3141 3529 l
-3140 3529 m
-3226 3529 l
-3226 3530 l
-3140 3530 l
-3139 3530 m
-3227 3530 l
-3227 3531 l
-3139 3531 l
-3138 3531 m
-3228 3531 l
-3228 3532 l
-3138 3532 l
-3136 3532 m
-3229 3532 l
-3229 3533 l
-3136 3533 l
-3135 3533 m
-3230 3533 l
-3230 3534 l
-3135 3534 l
-3134 3534 m
-3231 3534 l
-3231 3535 l
-3134 3535 l
-3133 3535 m
-3231 3535 l
-3231 3536 l
-3133 3536 l
-3132 3536 m
-3232 3536 l
-3232 3537 l
-3132 3537 l
-3130 3537 m
-3233 3537 l
-3233 3538 l
-3130 3538 l
-3129 3538 m
-3234 3538 l
-3234 3539 l
-3129 3539 l
-3128 3539 m
-3235 3539 l
-3235 3540 l
-3128 3540 l
-3127 3540 m
-3236 3540 l
-3236 3541 l
-3127 3541 l
-3125 3541 m
-3236 3541 l
-3236 3542 l
-3125 3542 l
-3124 3542 m
-3237 3542 l
-3237 3543 l
-3124 3543 l
-3123 3543 m
-3238 3543 l
-3238 3544 l
-3123 3544 l
-3122 3544 m
-3239 3544 l
-3239 3545 l
-3122 3545 l
-3121 3545 m
-3240 3545 l
-3240 3546 l
-3121 3546 l
-3119 3546 m
-3240 3546 l
-3240 3547 l
-3119 3547 l
-3118 3547 m
-3241 3547 l
-3241 3548 l
-3118 3548 l
-3117 3548 m
-3242 3548 l
-3242 3549 l
-3117 3549 l
-3116 3549 m
-3243 3549 l
-3243 3550 l
-3116 3550 l
-3115 3550 m
-3244 3550 l
-3244 3551 l
-3115 3551 l
-3113 3551 m
-3245 3551 l
-3245 3552 l
-3113 3552 l
-3112 3552 m
-3245 3552 l
-3245 3553 l
-3112 3553 l
-3111 3553 m
-3246 3553 l
-3246 3554 l
-3111 3554 l
-3110 3554 m
-3247 3554 l
-3247 3555 l
-3110 3555 l
-3108 3555 m
-3248 3555 l
-3248 3556 l
-3108 3556 l
-3107 3556 m
-3249 3556 l
-3249 3557 l
-3107 3557 l
-3106 3557 m
-3250 3557 l
-3250 3558 l
-3106 3558 l
-3105 3558 m
-3250 3558 l
-3250 3559 l
-3105 3559 l
-3104 3559 m
-3251 3559 l
-3251 3560 l
-3104 3560 l
-3102 3560 m
-3252 3560 l
-3252 3561 l
-3102 3561 l
-3101 3561 m
-3253 3561 l
-3253 3562 l
-3101 3562 l
-3100 3562 m
-3254 3562 l
-3254 3563 l
-3100 3563 l
-3099 3563 m
-3255 3563 l
-3255 3564 l
-3099 3564 l
-3098 3564 m
-3255 3564 l
-3255 3565 l
-3098 3565 l
-3098 3565 m
-3256 3565 l
-3256 3566 l
-3098 3566 l
-3098 3566 m
-3257 3566 l
-3257 3567 l
-3098 3567 l
-3099 3567 m
-3258 3567 l
-3258 3568 l
-3099 3568 l
-3100 3568 m
-3259 3568 l
-3259 3569 l
-3100 3569 l
-3101 3569 m
-3260 3569 l
-3260 3570 l
-3101 3570 l
-3102 3570 m
-3260 3570 l
-3260 3571 l
-3102 3571 l
-3102 3571 m
-3261 3571 l
-3261 3572 l
-3102 3572 l
-3103 3572 m
-3262 3572 l
-3262 3573 l
-3103 3573 l
-3104 3573 m
-3263 3573 l
-3263 3574 l
-3104 3574 l
-3105 3574 m
-3264 3574 l
-3264 3575 l
-3105 3575 l
-3106 3575 m
-3265 3575 l
-3265 3576 l
-3106 3576 l
-3107 3576 m
-3265 3576 l
-3265 3577 l
-3107 3577 l
-3107 3577 m
-3266 3577 l
-3266 3578 l
-3107 3578 l
-3108 3578 m
-3267 3578 l
-3267 3579 l
-3108 3579 l
-3109 3579 m
-3268 3579 l
-3268 3580 l
-3109 3580 l
-3110 3580 m
-3269 3580 l
-3269 3581 l
-3110 3581 l
-3111 3581 m
-3269 3581 l
-3269 3582 l
-3111 3582 l
-3111 3582 m
-3270 3582 l
-3270 3583 l
-3111 3583 l
-3112 3583 m
-3271 3583 l
-3271 3584 l
-3112 3584 l
-3113 3584 m
-3272 3584 l
-3272 3585 l
-3113 3585 l
-3114 3585 m
-3273 3585 l
-3273 3586 l
-3114 3586 l
-3115 3586 m
-3274 3586 l
-3274 3587 l
-3115 3587 l
-3116 3587 m
-3274 3587 l
-3274 3588 l
-3116 3588 l
-3116 3588 m
-3275 3588 l
-3275 3589 l
-3116 3589 l
-3117 3589 m
-3276 3589 l
-3276 3590 l
-3117 3590 l
-3118 3590 m
-3277 3590 l
-3277 3591 l
-3118 3591 l
-3119 3591 m
-3278 3591 l
-3278 3592 l
-3119 3592 l
-3120 3592 m
-3279 3592 l
-3279 3594 l
-3120 3594 l
-3121 3594 m
-3280 3594 l
-3280 3595 l
-3121 3595 l
-3122 3595 m
-3281 3595 l
-3281 3596 l
-3122 3596 l
-3123 3596 m
-3282 3596 l
-3282 3597 l
-3123 3597 l
-3124 3597 m
-3283 3597 l
-3283 3598 l
-3124 3598 l
-3125 3598 m
-3284 3598 l
-3284 3600 l
-3125 3600 l
-3126 3600 m
-3285 3600 l
-3285 3601 l
-3126 3601 l
-3127 3601 m
-3286 3601 l
-3286 3602 l
-3127 3602 l
-3128 3602 m
-3287 3602 l
-3287 3603 l
-3128 3603 l
-3129 3603 m
-3288 3603 l
-3288 3604 l
-3129 3604 l
-3130 3604 m
-3289 3604 l
-3289 3606 l
-3130 3606 l
-3131 3606 m
-3290 3606 l
-3290 3607 l
-3131 3607 l
-3132 3607 m
-3291 3607 l
-3291 3608 l
-3132 3608 l
-3133 3608 m
-3292 3608 l
-3292 3609 l
-3133 3609 l
-3134 3609 m
-3293 3609 l
-3293 3610 l
-3134 3610 l
-3134 3610 m
-3294 3610 l
-3294 3611 l
-3134 3611 l
-3135 3611 m
-3294 3611 l
-3294 3612 l
-3135 3612 l
-3136 3612 m
-3295 3612 l
-3295 3613 l
-3136 3613 l
-3137 3613 m
-3296 3613 l
-3296 3614 l
-3137 3614 l
-3138 3614 m
-3297 3614 l
-3297 3615 l
-3138 3615 l
-3139 3615 m
-3298 3615 l
-3298 3617 l
-3139 3617 l
-3140 3617 m
-3299 3617 l
-3299 3618 l
-3140 3618 l
-3141 3618 m
-3300 3618 l
-3300 3619 l
-3141 3619 l
-3142 3619 m
-3301 3619 l
-3301 3620 l
-3142 3620 l
-3143 3620 m
-3302 3620 l
-3302 3621 l
-3143 3621 l
-3143 3621 m
-3303 3621 l
-3303 3622 l
-3143 3622 l
-3144 3622 m
-3303 3622 l
-3303 3623 l
-3144 3623 l
-3145 3623 m
-3304 3623 l
-3304 3624 l
-3145 3624 l
-3146 3624 m
-3305 3624 l
-3305 3625 l
-3146 3625 l
-3147 3625 m
-3306 3625 l
-3306 3626 l
-3147 3626 l
-3148 3626 m
-3307 3626 l
-3307 3627 l
-3148 3627 l
-3148 3627 m
-3308 3627 l
-3308 3628 l
-3148 3628 l
-3149 3628 m
-3308 3628 l
-3308 3629 l
-3149 3629 l
-3150 3629 m
-3309 3629 l
-3309 3630 l
-3150 3630 l
-3151 3630 m
-3310 3630 l
-3310 3631 l
-3151 3631 l
-3152 3631 m
-3311 3631 l
-3311 3632 l
-3152 3632 l
-3152 3632 m
-3312 3632 l
-3312 3633 l
-3152 3633 l
-3153 3633 m
-3313 3633 l
-3313 3634 l
-3153 3634 l
-3154 3634 m
-3313 3634 l
-3313 3635 l
-3154 3635 l
-3155 3635 m
-3314 3635 l
-3314 3636 l
-3155 3636 l
-3156 3636 m
-3315 3636 l
-3315 3637 l
-3156 3637 l
-3157 3637 m
-3316 3637 l
-3316 3638 l
-3157 3638 l
-3157 3638 m
-3317 3638 l
-3317 3639 l
-3157 3639 l
-3158 3639 m
-3318 3639 l
-3318 3640 l
-3158 3640 l
-3159 3640 m
-3318 3640 l
-3318 3641 l
-3159 3641 l
-3160 3641 m
-3319 3641 l
-3319 3642 l
-3160 3642 l
-3161 3642 m
-3320 3642 l
-3320 3643 l
-3161 3643 l
-3162 3643 m
-3321 3643 l
-3321 3644 l
-3162 3644 l
-3162 3644 m
-3322 3644 l
-3322 3645 l
-3162 3645 l
-3163 3645 m
-3322 3645 l
-3322 3646 l
-3163 3646 l
-3164 3646 m
-3323 3646 l
-3323 3647 l
-3164 3647 l
-3165 3647 m
-3324 3647 l
-3324 3648 l
-3165 3648 l
-3166 3648 m
-3325 3648 l
-3325 3649 l
-3166 3649 l
-3166 3649 m
-3326 3649 l
-3326 3650 l
-3166 3650 l
-3167 3650 m
-3327 3650 l
-3327 3651 l
-3167 3651 l
-3168 3651 m
-3327 3651 l
-3327 3652 l
-3168 3652 l
-3169 3652 m
-3328 3652 l
-3328 3653 l
-3169 3653 l
-3170 3653 m
-3329 3653 l
-3329 3654 l
-3170 3654 l
-3171 3654 m
-3330 3654 l
-3330 3655 l
-3171 3655 l
-3171 3655 m
-3331 3655 l
-3331 3656 l
-3171 3656 l
-3172 3656 m
-3332 3656 l
-3332 3657 l
-3172 3657 l
-3173 3657 m
-3332 3657 l
-3332 3658 l
-3173 3658 l
-3174 3658 m
-3333 3658 l
-3333 3659 l
-3174 3659 l
-3175 3659 m
-3334 3659 l
-3334 3660 l
-3175 3660 l
-3175 3660 m
-3335 3660 l
-3335 3661 l
-3175 3661 l
-3176 3661 m
-3336 3661 l
-3336 3662 l
-3176 3662 l
-3177 3662 m
-3337 3662 l
-3337 3663 l
-3177 3663 l
-3178 3663 m
-3337 3663 l
-3337 3664 l
-3178 3664 l
-3179 3664 m
-3338 3664 l
-3338 3665 l
-3179 3665 l
-3180 3665 m
-3339 3665 l
-3339 3666 l
-3180 3666 l
-3180 3666 m
-3340 3666 l
-3340 3667 l
-3180 3667 l
-3181 3667 m
-3341 3667 l
-3341 3668 l
-3181 3668 l
-3182 3668 m
-3342 3668 l
-3342 3669 l
-3182 3669 l
-3183 3669 m
-3342 3669 l
-3342 3670 l
-3183 3670 l
-3184 3670 m
-3343 3670 l
-3343 3671 l
-3184 3671 l
-3184 3671 m
-3344 3671 l
-3344 3672 l
-3184 3672 l
-3185 3672 m
-3345 3672 l
-3345 3673 l
-3185 3673 l
-3186 3673 m
-3346 3673 l
-3346 3674 l
-3186 3674 l
-3187 3674 m
-3347 3674 l
-3347 3675 l
-3187 3675 l
-3188 3675 m
-3347 3675 l
-3347 3676 l
-3188 3676 l
-3189 3676 m
-3348 3676 l
-3348 3677 l
-3189 3677 l
-3189 3677 m
-3349 3677 l
-3349 3678 l
-3189 3678 l
-3190 3678 m
-3350 3678 l
-3350 3679 l
-3190 3679 l
-3191 3679 m
-3351 3679 l
-3351 3680 l
-3191 3680 l
-3192 3680 m
-3351 3680 l
-3351 3681 l
-3192 3681 l
-3193 3681 m
-3352 3681 l
-3352 3682 l
-3193 3682 l
-3194 3682 m
-3353 3682 l
-3353 3683 l
-3194 3683 l
-3194 3683 m
-3354 3683 l
-3354 3684 l
-3194 3684 l
-3195 3684 m
-3355 3684 l
-3355 3685 l
-3195 3685 l
-3196 3685 m
-3356 3685 l
-3356 3686 l
-3196 3686 l
-3197 3686 m
-3356 3686 l
-3356 3687 l
-3197 3687 l
-3198 3687 m
-3357 3687 l
-3357 3688 l
-3198 3688 l
-3198 3688 m
-3358 3688 l
-3358 3689 l
-3198 3689 l
-3199 3689 m
-3359 3689 l
-3359 3690 l
-3199 3690 l
-3200 3690 m
-3360 3690 l
-3360 3691 l
-3200 3691 l
-3201 3691 m
-3361 3691 l
-3361 3692 l
-3201 3692 l
-3202 3692 m
-3361 3692 l
-3361 3693 l
-3202 3693 l
-3203 3693 m
-3362 3693 l
-3362 3694 l
-3203 3694 l
-3203 3694 m
-3363 3694 l
-3363 3695 l
-3203 3695 l
-3204 3695 m
-3364 3695 l
-3364 3696 l
-3204 3696 l
-3205 3696 m
-3365 3696 l
-3365 3697 l
-3205 3697 l
-3206 3697 m
-3366 3697 l
-3366 3698 l
-3206 3698 l
-3207 3698 m
-3366 3698 l
-3366 3699 l
-3207 3699 l
-3207 3699 m
-3367 3699 l
-3367 3700 l
-3207 3700 l
-3208 3700 m
-3368 3700 l
-3368 3701 l
-3208 3701 l
-3209 3701 m
-3369 3701 l
-3369 3702 l
-3209 3702 l
-3210 3702 m
-3370 3702 l
-3370 3703 l
-3210 3703 l
-3211 3703 m
-3371 3703 l
-3371 3704 l
-3211 3704 l
-3212 3704 m
-3371 3704 l
-3371 3705 l
-3212 3705 l
-3212 3705 m
-3372 3705 l
-3372 3706 l
-3212 3706 l
-3213 3706 m
-3373 3706 l
-3373 3707 l
-3213 3707 l
-3214 3707 m
-3374 3707 l
-3374 3708 l
-3214 3708 l
-3215 3708 m
-3375 3708 l
-3375 3709 l
-3215 3709 l
-3216 3709 m
-3375 3709 l
-3375 3710 l
-3216 3710 l
-3216 3710 m
-3375 3710 l
-3375 3711 l
-3216 3711 l
-3217 3711 m
-3374 3711 l
-3374 3712 l
-3217 3712 l
-3218 3712 m
-3373 3712 l
-3373 3713 l
-3218 3713 l
-3219 3713 m
-3372 3713 l
-3372 3714 l
-3219 3714 l
-3220 3714 m
-3371 3714 l
-3371 3715 l
-3220 3715 l
-3221 3715 m
-3369 3715 l
-3369 3716 l
-3221 3716 l
-3221 3716 m
-3368 3716 l
-3368 3717 l
-3221 3717 l
-3222 3717 m
-3367 3717 l
-3367 3718 l
-3222 3718 l
-3223 3718 m
-3366 3718 l
-3366 3719 l
-3223 3719 l
-3224 3719 m
-3365 3719 l
-3365 3720 l
-3224 3720 l
-3225 3720 m
-3363 3720 l
-3363 3721 l
-3225 3721 l
-3226 3721 m
-3362 3721 l
-3362 3722 l
-3226 3722 l
-3226 3722 m
-3361 3722 l
-3361 3723 l
-3226 3723 l
-3227 3723 m
-3360 3723 l
-3360 3724 l
-3227 3724 l
-3228 3724 m
-3359 3724 l
-3359 3725 l
-3228 3725 l
-3229 3725 m
-3357 3725 l
-3357 3726 l
-3229 3726 l
-3230 3726 m
-3356 3726 l
-3356 3727 l
-3230 3727 l
-3230 3727 m
-3355 3727 l
-3355 3728 l
-3230 3728 l
-3231 3728 m
-3354 3728 l
-3354 3729 l
-3231 3729 l
-3232 3729 m
-3353 3729 l
-3353 3730 l
-3232 3730 l
-3233 3730 m
-3351 3730 l
-3351 3731 l
-3233 3731 l
-3234 3731 m
-3350 3731 l
-3350 3732 l
-3234 3732 l
-3235 3732 m
-3349 3732 l
-3349 3733 l
-3235 3733 l
-3235 3733 m
-3348 3733 l
-3348 3734 l
-3235 3734 l
-3236 3734 m
-3347 3734 l
-3347 3735 l
-3236 3735 l
-3237 3735 m
-3345 3735 l
-3345 3736 l
-3237 3736 l
-3238 3736 m
-3344 3736 l
-3344 3737 l
-3238 3737 l
-3239 3737 m
-3343 3737 l
-3343 3738 l
-3239 3738 l
-3239 3738 m
-3342 3738 l
-3342 3739 l
-3239 3739 l
-3240 3739 m
-3341 3739 l
-3341 3740 l
-3240 3740 l
-3241 3740 m
-3339 3740 l
-3339 3741 l
-3241 3741 l
-3242 3741 m
-3338 3741 l
-3338 3742 l
-3242 3742 l
-3243 3742 m
-3337 3742 l
-3337 3743 l
-3243 3743 l
-3244 3743 m
-3336 3743 l
-3336 3744 l
-3244 3744 l
-3244 3744 m
-3335 3744 l
-3335 3745 l
-3244 3745 l
-3245 3745 m
-3333 3745 l
-3333 3746 l
-3245 3746 l
-3246 3746 m
-3332 3746 l
-3332 3747 l
-3246 3747 l
-3247 3747 m
-3331 3747 l
-3331 3748 l
-3247 3748 l
-3248 3748 m
-3330 3748 l
-3330 3749 l
-3248 3749 l
-3248 3749 m
-3328 3749 l
-3328 3750 l
-3248 3750 l
-3249 3750 m
-3327 3750 l
-3327 3751 l
-3249 3751 l
-3250 3751 m
-3326 3751 l
-3326 3752 l
-3250 3752 l
-3251 3752 m
-3325 3752 l
-3325 3753 l
-3251 3753 l
-3252 3753 m
-3324 3753 l
-3324 3754 l
-3252 3754 l
-3253 3754 m
-3322 3754 l
-3322 3755 l
-3253 3755 l
-3253 3755 m
-3321 3755 l
-3321 3756 l
-3253 3756 l
-3254 3756 m
-3320 3756 l
-3320 3757 l
-3254 3757 l
-3255 3757 m
-3319 3757 l
-3319 3758 l
-3255 3758 l
-3256 3758 m
-3318 3758 l
-3318 3759 l
-3256 3759 l
-3257 3759 m
-3316 3759 l
-3316 3760 l
-3257 3760 l
-3258 3760 m
-3315 3760 l
-3315 3761 l
-3258 3761 l
-3258 3761 m
-3314 3761 l
-3314 3762 l
-3258 3762 l
-3259 3762 m
-3313 3762 l
-3313 3763 l
-3259 3763 l
-3260 3763 m
-3312 3763 l
-3312 3764 l
-3260 3764 l
-3261 3764 m
-3310 3764 l
-3310 3765 l
-3261 3765 l
-3262 3765 m
-3309 3765 l
-3309 3766 l
-3262 3766 l
-3262 3766 m
-3308 3766 l
-3308 3767 l
-3262 3767 l
-3263 3767 m
-3307 3767 l
-3307 3768 l
-3263 3768 l
-3264 3768 m
-3306 3768 l
-3306 3769 l
-3264 3769 l
-3265 3769 m
-3304 3769 l
-3304 3770 l
-3265 3770 l
-3266 3770 m
-3303 3770 l
-3303 3771 l
-3266 3771 l
-3267 3771 m
-3302 3771 l
-3302 3772 l
-3267 3772 l
-3267 3772 m
-3301 3772 l
-3301 3773 l
-3267 3773 l
-3268 3773 m
-3300 3773 l
-3300 3774 l
-3268 3774 l
-3269 3774 m
-3298 3774 l
-3298 3775 l
-3269 3775 l
-3270 3775 m
-3297 3775 l
-3297 3776 l
-3270 3776 l
-3271 3776 m
-3296 3776 l
-3296 3777 l
-3271 3777 l
-3271 3777 m
-3295 3777 l
-3295 3778 l
-3271 3778 l
-3272 3778 m
-3294 3778 l
-3294 3779 l
-3272 3779 l
-3273 3779 m
-3292 3779 l
-3292 3780 l
-3273 3780 l
-3274 3780 m
-3291 3780 l
-3291 3781 l
-3274 3781 l
-3275 3781 m
-3290 3781 l
-3290 3782 l
-3275 3782 l
-3276 3782 m
-3289 3782 l
-3289 3783 l
-3276 3783 l
-3276 3783 m
-3288 3783 l
-3288 3784 l
-3276 3784 l
-3277 3784 m
-3286 3784 l
-3286 3785 l
-3277 3785 l
-3278 3785 m
-3285 3785 l
-3285 3786 l
-3278 3786 l
-3279 3786 m
-3284 3786 l
-3284 3787 l
-3279 3787 l
-3280 3787 m
-3283 3787 l
-3283 3788 l
-3280 3788 l
-Y
-3191.3 3488.2 m
-3098 3565 l
-3281 3788 l
-3375 3710 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-3163 3539 m
-3211 3597 l
-S
-3235 3685 m
-3226 3687 l
-3214 3680 l
-3209 3674 l
-3204 3662 l
-3209 3647 l
-3222 3631 l
-3238 3617 l
-3254 3610 l
-3266 3611 l
-3277 3618 l
-3279 3621 l
-3284 3634 l
-3283 3645 l
-3276 3657 l
-3273 3659 l
-3260 3664 l
-3249 3663 l
-3238 3656 l
-3235 3653 l
-3230 3640 l
-3231 3629 l
-3238 3617 l
-S
-3260 3735 m
-3255 3723 l
-3259 3708 l
-3273 3692 l
-3282 3684 l
-3301 3674 l
-3316 3672 l
-3327 3679 l
-3333 3686 l
-3337 3698 l
-3333 3712 l
-3320 3729 l
-3310 3737 l
-3291 3747 l
-3276 3749 l
-3265 3742 l
-3260 3735 l
-S
-1 g
-3431 3818 m
-3434 3818 l
-3434 3819 l
-3431 3819 l
-3427 3819 m
-3435 3819 l
-3435 3820 l
-3427 3820 l
-3424 3820 m
-3435 3820 l
-3435 3821 l
-3424 3821 l
-3421 3821 m
-3435 3821 l
-3435 3822 l
-3421 3822 l
-3417 3822 m
-3436 3822 l
-3436 3823 l
-3417 3823 l
-3414 3823 m
-3436 3823 l
-3436 3824 l
-3414 3824 l
-3411 3824 m
-3436 3824 l
-3436 3825 l
-3411 3825 l
-3407 3825 m
-3437 3825 l
-3437 3826 l
-3407 3826 l
-3404 3826 m
-3437 3826 l
-3437 3827 l
-3404 3827 l
-3401 3827 m
-3437 3827 l
-3437 3828 l
-3401 3828 l
-3397 3828 m
-3437 3828 l
-3437 3829 l
-3397 3829 l
-3394 3829 m
-3438 3829 l
-3438 3830 l
-3394 3830 l
-3391 3830 m
-3438 3830 l
-3438 3831 l
-3391 3831 l
-3387 3831 m
-3438 3831 l
-3438 3832 l
-3387 3832 l
-3384 3832 m
-3439 3832 l
-3439 3833 l
-3384 3833 l
-3381 3833 m
-3439 3833 l
-3439 3834 l
-3381 3834 l
-3377 3834 m
-3439 3834 l
-3439 3835 l
-3377 3835 l
-3374 3835 m
-3440 3835 l
-3440 3836 l
-3374 3836 l
-3371 3836 m
-3440 3836 l
-3440 3837 l
-3371 3837 l
-3367 3837 m
-3440 3837 l
-3440 3838 l
-3367 3838 l
-3364 3838 m
-3440 3838 l
-3440 3839 l
-3364 3839 l
-3361 3839 m
-3441 3839 l
-3441 3840 l
-3361 3840 l
-3357 3840 m
-3441 3840 l
-3441 3841 l
-3357 3841 l
-3354 3841 m
-3441 3841 l
-3441 3842 l
-3354 3842 l
-3351 3842 m
-3442 3842 l
-3442 3843 l
-3351 3843 l
-3347 3843 m
-3442 3843 l
-3442 3844 l
-3347 3844 l
-3344 3844 m
-3442 3844 l
-3442 3845 l
-3344 3845 l
-3341 3845 m
-3442 3845 l
-3442 3846 l
-3341 3846 l
-3337 3846 m
-3443 3846 l
-3443 3847 l
-3337 3847 l
-3334 3847 m
-3443 3847 l
-3443 3848 l
-3334 3848 l
-3331 3848 m
-3443 3848 l
-3443 3849 l
-3331 3849 l
-3327 3849 m
-3444 3849 l
-3444 3850 l
-3327 3850 l
-3324 3850 m
-3444 3850 l
-3444 3851 l
-3324 3851 l
-3321 3851 m
-3444 3851 l
-3444 3852 l
-3321 3852 l
-3318 3852 m
-3445 3852 l
-3445 3853 l
-3318 3853 l
-3318 3853 m
-3445 3853 l
-3445 3856 l
-3318 3856 l
-3318 3856 m
-3446 3856 l
-3446 3857 l
-3318 3857 l
-3319 3857 m
-3446 3857 l
-3446 3859 l
-3319 3859 l
-3319 3859 m
-3447 3859 l
-3447 3860 l
-3319 3860 l
-3320 3860 m
-3447 3860 l
-3447 3862 l
-3320 3862 l
-3320 3862 m
-3448 3862 l
-3448 3864 l
-3320 3864 l
-3321 3864 m
-3448 3864 l
-3448 3866 l
-3321 3866 l
-3321 3866 m
-3449 3866 l
-3449 3867 l
-3321 3867 l
-3322 3867 m
-3449 3867 l
-3449 3869 l
-3322 3869 l
-3322 3869 m
-3450 3869 l
-3450 3870 l
-3322 3870 l
-3323 3870 m
-3450 3870 l
-3450 3872 l
-3323 3872 l
-3323 3872 m
-3451 3872 l
-3451 3874 l
-3323 3874 l
-3324 3874 m
-3451 3874 l
-3451 3876 l
-3324 3876 l
-3324 3876 m
-3452 3876 l
-3452 3877 l
-3324 3877 l
-3325 3877 m
-3452 3877 l
-3452 3879 l
-3325 3879 l
-3325 3879 m
-3453 3879 l
-3453 3880 l
-3325 3880 l
-3326 3880 m
-3453 3880 l
-3453 3882 l
-3326 3882 l
-3326 3882 m
-3454 3882 l
-3454 3884 l
-3326 3884 l
-3327 3884 m
-3454 3884 l
-3454 3886 l
-3327 3886 l
-3327 3886 m
-3455 3886 l
-3455 3887 l
-3327 3887 l
-3328 3887 m
-3455 3887 l
-3455 3889 l
-3328 3889 l
-3328 3889 m
-3456 3889 l
-3456 3891 l
-3328 3891 l
-3329 3891 m
-3456 3891 l
-3456 3892 l
-3329 3892 l
-3329 3892 m
-3457 3892 l
-3457 3894 l
-3329 3894 l
-3330 3894 m
-3457 3894 l
-3457 3896 l
-3330 3896 l
-3330 3896 m
-3458 3896 l
-3458 3897 l
-3330 3897 l
-3331 3897 m
-3458 3897 l
-3458 3899 l
-3331 3899 l
-3331 3899 m
-3459 3899 l
-3459 3901 l
-3331 3901 l
-3332 3901 m
-3459 3901 l
-3459 3902 l
-3332 3902 l
-3332 3902 m
-3460 3902 l
-3460 3904 l
-3332 3904 l
-3333 3904 m
-3460 3904 l
-3460 3906 l
-3333 3906 l
-3333 3906 m
-3461 3906 l
-3461 3907 l
-3333 3907 l
-3334 3907 m
-3461 3907 l
-3461 3909 l
-3334 3909 l
-3334 3909 m
-3462 3909 l
-3462 3911 l
-3334 3911 l
-3335 3911 m
-3462 3911 l
-3462 3913 l
-3335 3913 l
-3335 3913 m
-3463 3913 l
-3463 3914 l
-3335 3914 l
-3336 3914 m
-3463 3914 l
-3463 3916 l
-3336 3916 l
-3336 3916 m
-3464 3916 l
-3464 3917 l
-3336 3917 l
-3337 3917 m
-3464 3917 l
-3464 3919 l
-3337 3919 l
-3337 3919 m
-3465 3919 l
-3465 3921 l
-3337 3921 l
-3338 3921 m
-3465 3921 l
-3465 3923 l
-3338 3923 l
-3338 3923 m
-3466 3923 l
-3466 3924 l
-3338 3924 l
-3339 3924 m
-3466 3924 l
-3466 3926 l
-3339 3926 l
-3339 3926 m
-3467 3926 l
-3467 3928 l
-3339 3928 l
-3340 3928 m
-3467 3928 l
-3467 3929 l
-3340 3929 l
-3340 3929 m
-3468 3929 l
-3468 3931 l
-3340 3931 l
-3341 3931 m
-3468 3931 l
-3468 3933 l
-3341 3933 l
-3341 3933 m
-3469 3933 l
-3469 3934 l
-3341 3934 l
-3342 3934 m
-3469 3934 l
-3469 3936 l
-3342 3936 l
-3342 3936 m
-3470 3936 l
-3470 3938 l
-3342 3938 l
-3343 3938 m
-3470 3938 l
-3470 3939 l
-3343 3939 l
-3343 3939 m
-3471 3939 l
-3471 3941 l
-3343 3941 l
-3344 3941 m
-3471 3941 l
-3471 3943 l
-3344 3943 l
-3344 3943 m
-3472 3943 l
-3472 3944 l
-3344 3944 l
-3345 3944 m
-3472 3944 l
-3472 3946 l
-3345 3946 l
-3345 3946 m
-3473 3946 l
-3473 3948 l
-3345 3948 l
-3346 3948 m
-3473 3948 l
-3473 3949 l
-3346 3949 l
-3346 3949 m
-3474 3949 l
-3474 3951 l
-3346 3951 l
-3347 3951 m
-3474 3951 l
-3474 3953 l
-3347 3953 l
-3347 3953 m
-3475 3953 l
-3475 3954 l
-3347 3954 l
-3348 3954 m
-3475 3954 l
-3475 3956 l
-3348 3956 l
-3348 3956 m
-3476 3956 l
-3476 3958 l
-3348 3958 l
-3349 3958 m
-3476 3958 l
-3476 3959 l
-3349 3959 l
-3349 3959 m
-3477 3959 l
-3477 3961 l
-3349 3961 l
-3350 3961 m
-3477 3961 l
-3477 3963 l
-3350 3963 l
-3350 3963 m
-3478 3963 l
-3478 3965 l
-3350 3965 l
-3351 3965 m
-3478 3965 l
-3478 3966 l
-3351 3966 l
-3351 3966 m
-3479 3966 l
-3479 3968 l
-3351 3968 l
-3352 3968 m
-3479 3968 l
-3479 3970 l
-3352 3970 l
-3352 3970 m
-3480 3970 l
-3480 3971 l
-3352 3971 l
-3353 3971 m
-3480 3971 l
-3480 3973 l
-3353 3973 l
-3353 3973 m
-3481 3973 l
-3481 3975 l
-3353 3975 l
-3354 3975 m
-3481 3975 l
-3481 3976 l
-3354 3976 l
-3354 3976 m
-3482 3976 l
-3482 3978 l
-3354 3978 l
-3355 3978 m
-3482 3978 l
-3482 3980 l
-3355 3980 l
-3355 3980 m
-3483 3980 l
-3483 3981 l
-3355 3981 l
-3356 3981 m
-3483 3981 l
-3483 3983 l
-3356 3983 l
-3356 3983 m
-3484 3983 l
-3484 3985 l
-3356 3985 l
-3357 3985 m
-3484 3985 l
-3484 3986 l
-3357 3986 l
-3357 3986 m
-3485 3986 l
-3485 3988 l
-3357 3988 l
-3358 3988 m
-3485 3988 l
-3485 3990 l
-3358 3990 l
-3358 3990 m
-3486 3990 l
-3486 3991 l
-3358 3991 l
-3359 3991 m
-3486 3991 l
-3486 3993 l
-3359 3993 l
-3359 3993 m
-3487 3993 l
-3487 3995 l
-3359 3995 l
-3360 3995 m
-3487 3995 l
-3487 3996 l
-3360 3996 l
-3360 3996 m
-3488 3996 l
-3488 3998 l
-3360 3998 l
-3361 3998 m
-3488 3998 l
-3488 4000 l
-3361 4000 l
-3361 4000 m
-3489 4000 l
-3489 4002 l
-3361 4002 l
-3362 4002 m
-3489 4002 l
-3489 4003 l
-3362 4003 l
-3362 4003 m
-3490 4003 l
-3490 4005 l
-3362 4005 l
-3363 4005 m
-3490 4005 l
-3490 4006 l
-3363 4006 l
-3363 4006 m
-3491 4006 l
-3491 4008 l
-3363 4008 l
-3364 4008 m
-3491 4008 l
-3491 4010 l
-3364 4010 l
-3364 4010 m
-3492 4010 l
-3492 4012 l
-3364 4012 l
-3365 4012 m
-3492 4012 l
-3492 4013 l
-3365 4013 l
-3365 4013 m
-3493 4013 l
-3493 4015 l
-3365 4015 l
-3366 4015 m
-3493 4015 l
-3493 4016 l
-3366 4016 l
-3366 4016 m
-3494 4016 l
-3494 4018 l
-3366 4018 l
-3367 4018 m
-3494 4018 l
-3494 4020 l
-3367 4020 l
-3367 4020 m
-3495 4020 l
-3495 4022 l
-3367 4022 l
-3368 4022 m
-3495 4022 l
-3495 4023 l
-3368 4023 l
-3368 4023 m
-3496 4023 l
-3496 4025 l
-3368 4025 l
-3369 4025 m
-3496 4025 l
-3496 4026 l
-3369 4026 l
-3369 4026 m
-3497 4026 l
-3497 4029 l
-3369 4029 l
-3370 4029 m
-3497 4029 l
-3497 4030 l
-3370 4030 l
-3370 4030 m
-3498 4030 l
-3498 4032 l
-3370 4032 l
-3371 4032 m
-3498 4032 l
-3498 4033 l
-3371 4033 l
-3371 4033 m
-3499 4033 l
-3499 4035 l
-3371 4035 l
-3372 4035 m
-3499 4035 l
-3499 4037 l
-3372 4037 l
-3372 4037 m
-3500 4037 l
-3500 4039 l
-3372 4039 l
-3373 4039 m
-3500 4039 l
-3500 4040 l
-3373 4040 l
-3373 4040 m
-3501 4040 l
-3501 4042 l
-3373 4042 l
-3374 4042 m
-3501 4042 l
-3501 4043 l
-3374 4043 l
-3374 4043 m
-3502 4043 l
-3502 4045 l
-3374 4045 l
-3375 4045 m
-3502 4045 l
-3502 4047 l
-3375 4047 l
-3375 4047 m
-3503 4047 l
-3503 4049 l
-3375 4049 l
-3376 4049 m
-3503 4049 l
-3503 4050 l
-3376 4050 l
-3376 4050 m
-3504 4050 l
-3504 4052 l
-3376 4052 l
-3377 4052 m
-3504 4052 l
-3504 4053 l
-3377 4053 l
-3377 4053 m
-3505 4053 l
-3505 4055 l
-3377 4055 l
-3378 4055 m
-3505 4055 l
-3505 4057 l
-3378 4057 l
-3378 4057 m
-3506 4057 l
-3506 4059 l
-3378 4059 l
-3379 4059 m
-3506 4059 l
-3506 4060 l
-3379 4060 l
-3379 4060 m
-3507 4060 l
-3507 4062 l
-3379 4062 l
-3380 4062 m
-3507 4062 l
-3507 4063 l
-3380 4063 l
-3380 4063 m
-3508 4063 l
-3508 4066 l
-3380 4066 l
-3381 4066 m
-3508 4066 l
-3508 4067 l
-3381 4067 l
-3381 4067 m
-3509 4067 l
-3509 4069 l
-3381 4069 l
-3382 4069 m
-3509 4069 l
-3509 4070 l
-3382 4070 l
-3382 4070 m
-3510 4070 l
-3510 4072 l
-3382 4072 l
-3383 4072 m
-3510 4072 l
-3510 4073 l
-3383 4073 l
-3383 4073 m
-3511 4073 l
-3511 4076 l
-3383 4076 l
-3384 4076 m
-3511 4076 l
-3511 4077 l
-3384 4077 l
-3384 4077 m
-3512 4077 l
-3512 4079 l
-3384 4079 l
-3385 4079 m
-3512 4079 l
-3512 4080 l
-3385 4080 l
-3385 4080 m
-3513 4080 l
-3513 4082 l
-3385 4082 l
-3386 4082 m
-3513 4082 l
-3513 4083 l
-3386 4083 l
-3386 4083 m
-3514 4083 l
-3514 4086 l
-3386 4086 l
-3387 4086 m
-3514 4086 l
-3514 4087 l
-3387 4087 l
-3387 4087 m
-3515 4087 l
-3515 4089 l
-3387 4089 l
-3388 4089 m
-3515 4089 l
-3515 4090 l
-3388 4090 l
-3388 4090 m
-3516 4090 l
-3516 4092 l
-3388 4092 l
-3389 4092 m
-3516 4092 l
-3516 4093 l
-3389 4093 l
-3389 4093 m
-3517 4093 l
-3517 4094 l
-3389 4094 l
-3389 4094 m
-3516 4094 l
-3516 4095 l
-3389 4095 l
-3389 4095 m
-3513 4095 l
-3513 4096 l
-3389 4096 l
-3390 4096 m
-3510 4096 l
-3510 4097 l
-3390 4097 l
-3390 4097 m
-3507 4097 l
-3507 4098 l
-3390 4098 l
-3390 4098 m
-3503 4098 l
-3503 4099 l
-3390 4099 l
-3391 4099 m
-3500 4099 l
-3500 4100 l
-3391 4100 l
-3391 4100 m
-3497 4100 l
-3497 4101 l
-3391 4101 l
-3391 4101 m
-3493 4101 l
-3493 4102 l
-3391 4102 l
-3391 4102 m
-3490 4102 l
-3490 4103 l
-3391 4103 l
-3392 4103 m
-3487 4103 l
-3487 4104 l
-3392 4104 l
-3392 4104 m
-3483 4104 l
-3483 4105 l
-3392 4105 l
-3392 4105 m
-3480 4105 l
-3480 4106 l
-3392 4106 l
-3393 4106 m
-3477 4106 l
-3477 4107 l
-3393 4107 l
-3393 4107 m
-3473 4107 l
-3473 4108 l
-3393 4108 l
-3393 4108 m
-3470 4108 l
-3470 4109 l
-3393 4109 l
-3394 4109 m
-3467 4109 l
-3467 4110 l
-3394 4110 l
-3394 4110 m
-3463 4110 l
-3463 4111 l
-3394 4111 l
-3394 4111 m
-3460 4111 l
-3460 4112 l
-3394 4112 l
-3394 4112 m
-3457 4112 l
-3457 4113 l
-3394 4113 l
-3395 4113 m
-3454 4113 l
-3454 4114 l
-3395 4114 l
-3395 4114 m
-3450 4114 l
-3450 4115 l
-3395 4115 l
-3395 4115 m
-3447 4115 l
-3447 4116 l
-3395 4116 l
-3396 4116 m
-3444 4116 l
-3444 4117 l
-3396 4117 l
-3396 4117 m
-3440 4117 l
-3440 4118 l
-3396 4118 l
-3396 4118 m
-3437 4118 l
-3437 4119 l
-3396 4119 l
-3397 4119 m
-3434 4119 l
-3434 4120 l
-3397 4120 l
-3397 4120 m
-3430 4120 l
-3430 4121 l
-3397 4121 l
-3397 4121 m
-3427 4121 l
-3427 4122 l
-3397 4122 l
-3397 4122 m
-3424 4122 l
-3424 4123 l
-3397 4123 l
-3398 4123 m
-3420 4123 l
-3420 4124 l
-3398 4124 l
-3398 4124 m
-3417 4124 l
-3417 4125 l
-3398 4125 l
-3398 4125 m
-3414 4125 l
-3414 4126 l
-3398 4126 l
-3399 4126 m
-3410 4126 l
-3410 4127 l
-3399 4127 l
-3399 4127 m
-3407 4127 l
-3407 4128 l
-3399 4128 l
-3399 4128 m
-3404 4128 l
-3404 4129 l
-3399 4129 l
-Y
-3433.7 3818.2 m
-3318 3853 l
-3400 4129 l
-3516 4094 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-3388 3854 m
-3409 3926 l
-S
-3372 3976 m
-3385 4020 l
-3410 3987 l
-3414 3999 l
-3420 4005 l
-3425 4008 l
-3438 4009 l
-3446 4006 l
-3457 3999 l
-3463 3988 l
-3463 3975 l
-3460 3963 l
-3452 3952 l
-3447 3949 l
-3438 3948 l
-S
-3401 4072 m
-3401 4059 l
-3411 4047 l
-3430 4037 l
-3442 4034 l
-3463 4032 l
-3477 4036 l
-3485 4047 l
-3487 4055 l
-3487 4068 l
-3477 4080 l
-3458 4090 l
-3446 4093 l
-3425 4095 l
-3411 4091 l
-3403 4080 l
-3401 4072 l
-S
-1 g
-3282 4627 m
-3285 4627 l
-3285 4628 l
-3282 4628 l
-3281 4628 m
-3286 4628 l
-3286 4629 l
-3281 4629 l
-3280 4629 m
-3287 4629 l
-3287 4630 l
-3280 4630 l
-3279 4630 m
-3288 4630 l
-3288 4631 l
-3279 4631 l
-3278 4631 m
-3290 4631 l
-3290 4632 l
-3278 4632 l
-3277 4632 m
-3291 4632 l
-3291 4633 l
-3277 4633 l
-3277 4633 m
-3292 4633 l
-3292 4634 l
-3277 4634 l
-3276 4634 m
-3293 4634 l
-3293 4635 l
-3276 4635 l
-3275 4635 m
-3294 4635 l
-3294 4636 l
-3275 4636 l
-3274 4636 m
-3296 4636 l
-3296 4637 l
-3274 4637 l
-3273 4637 m
-3297 4637 l
-3297 4638 l
-3273 4638 l
-3272 4638 m
-3298 4638 l
-3298 4639 l
-3272 4639 l
-3272 4639 m
-3299 4639 l
-3299 4640 l
-3272 4640 l
-3271 4640 m
-3300 4640 l
-3300 4641 l
-3271 4641 l
-3270 4641 m
-3302 4641 l
-3302 4642 l
-3270 4642 l
-3269 4642 m
-3303 4642 l
-3303 4643 l
-3269 4643 l
-3268 4643 m
-3304 4643 l
-3304 4644 l
-3268 4644 l
-3267 4644 m
-3305 4644 l
-3305 4645 l
-3267 4645 l
-3267 4645 m
-3306 4645 l
-3306 4646 l
-3267 4646 l
-3266 4646 m
-3308 4646 l
-3308 4647 l
-3266 4647 l
-3265 4647 m
-3309 4647 l
-3309 4648 l
-3265 4648 l
-3264 4648 m
-3310 4648 l
-3310 4649 l
-3264 4649 l
-3263 4649 m
-3311 4649 l
-3311 4650 l
-3263 4650 l
-3262 4650 m
-3312 4650 l
-3312 4651 l
-3262 4651 l
-3262 4651 m
-3314 4651 l
-3314 4652 l
-3262 4652 l
-3261 4652 m
-3315 4652 l
-3315 4653 l
-3261 4653 l
-3260 4653 m
-3316 4653 l
-3316 4654 l
-3260 4654 l
-3259 4654 m
-3317 4654 l
-3317 4655 l
-3259 4655 l
-3258 4655 m
-3318 4655 l
-3318 4656 l
-3258 4656 l
-3257 4656 m
-3320 4656 l
-3320 4657 l
-3257 4657 l
-3257 4657 m
-3321 4657 l
-3321 4658 l
-3257 4658 l
-3256 4658 m
-3322 4658 l
-3322 4659 l
-3256 4659 l
-3255 4659 m
-3323 4659 l
-3323 4660 l
-3255 4660 l
-3254 4660 m
-3324 4660 l
-3324 4661 l
-3254 4661 l
-3253 4661 m
-3326 4661 l
-3326 4662 l
-3253 4662 l
-3252 4662 m
-3327 4662 l
-3327 4663 l
-3252 4663 l
-3252 4663 m
-3328 4663 l
-3328 4664 l
-3252 4664 l
-3251 4664 m
-3329 4664 l
-3329 4665 l
-3251 4665 l
-3250 4665 m
-3330 4665 l
-3330 4666 l
-3250 4666 l
-3249 4666 m
-3332 4666 l
-3332 4667 l
-3249 4667 l
-3248 4667 m
-3333 4667 l
-3333 4668 l
-3248 4668 l
-3247 4668 m
-3334 4668 l
-3334 4669 l
-3247 4669 l
-3247 4669 m
-3335 4669 l
-3335 4670 l
-3247 4670 l
-3246 4670 m
-3336 4670 l
-3336 4671 l
-3246 4671 l
-3245 4671 m
-3338 4671 l
-3338 4672 l
-3245 4672 l
-3244 4672 m
-3339 4672 l
-3339 4673 l
-3244 4673 l
-3243 4673 m
-3340 4673 l
-3340 4674 l
-3243 4674 l
-3242 4674 m
-3341 4674 l
-3341 4675 l
-3242 4675 l
-3241 4675 m
-3342 4675 l
-3342 4676 l
-3241 4676 l
-3241 4676 m
-3344 4676 l
-3344 4677 l
-3241 4677 l
-3240 4677 m
-3345 4677 l
-3345 4678 l
-3240 4678 l
-3239 4678 m
-3346 4678 l
-3346 4679 l
-3239 4679 l
-3238 4679 m
-3347 4679 l
-3347 4680 l
-3238 4680 l
-3237 4680 m
-3348 4680 l
-3348 4681 l
-3237 4681 l
-3236 4681 m
-3350 4681 l
-3350 4682 l
-3236 4682 l
-3236 4682 m
-3351 4682 l
-3351 4683 l
-3236 4683 l
-3235 4683 m
-3352 4683 l
-3352 4684 l
-3235 4684 l
-3234 4684 m
-3353 4684 l
-3353 4685 l
-3234 4685 l
-3233 4685 m
-3354 4685 l
-3354 4686 l
-3233 4686 l
-3232 4686 m
-3356 4686 l
-3356 4687 l
-3232 4687 l
-3231 4687 m
-3357 4687 l
-3357 4688 l
-3231 4688 l
-3231 4688 m
-3358 4688 l
-3358 4689 l
-3231 4689 l
-3230 4689 m
-3359 4689 l
-3359 4690 l
-3230 4690 l
-3229 4690 m
-3360 4690 l
-3360 4691 l
-3229 4691 l
-3228 4691 m
-3362 4691 l
-3362 4692 l
-3228 4692 l
-3227 4692 m
-3363 4692 l
-3363 4693 l
-3227 4693 l
-3226 4693 m
-3364 4693 l
-3364 4694 l
-3226 4694 l
-3226 4694 m
-3365 4694 l
-3365 4695 l
-3226 4695 l
-3225 4695 m
-3366 4695 l
-3366 4696 l
-3225 4696 l
-3224 4696 m
-3368 4696 l
-3368 4697 l
-3224 4697 l
-3223 4697 m
-3369 4697 l
-3369 4698 l
-3223 4698 l
-3222 4698 m
-3370 4698 l
-3370 4699 l
-3222 4699 l
-3221 4699 m
-3371 4699 l
-3371 4700 l
-3221 4700 l
-3221 4700 m
-3372 4700 l
-3372 4701 l
-3221 4701 l
-3220 4701 m
-3374 4701 l
-3374 4702 l
-3220 4702 l
-3219 4702 m
-3375 4702 l
-3375 4703 l
-3219 4703 l
-3218 4703 m
-3376 4703 l
-3376 4704 l
-3218 4704 l
-3217 4704 m
-3376 4704 l
-3376 4705 l
-3217 4705 l
-3216 4705 m
-3376 4705 l
-3376 4706 l
-3216 4706 l
-3216 4706 m
-3375 4706 l
-3375 4707 l
-3216 4707 l
-3215 4707 m
-3374 4707 l
-3374 4708 l
-3215 4708 l
-3214 4708 m
-3373 4708 l
-3373 4709 l
-3214 4709 l
-3213 4709 m
-3372 4709 l
-3372 4710 l
-3213 4710 l
-3212 4710 m
-3372 4710 l
-3372 4711 l
-3212 4711 l
-3211 4711 m
-3371 4711 l
-3371 4712 l
-3211 4712 l
-3211 4712 m
-3370 4712 l
-3370 4713 l
-3211 4713 l
-3210 4713 m
-3369 4713 l
-3369 4714 l
-3210 4714 l
-3209 4714 m
-3368 4714 l
-3368 4715 l
-3209 4715 l
-3208 4715 m
-3367 4715 l
-3367 4716 l
-3208 4716 l
-3207 4716 m
-3367 4716 l
-3367 4717 l
-3207 4717 l
-3206 4717 m
-3366 4717 l
-3366 4718 l
-3206 4718 l
-3206 4718 m
-3365 4718 l
-3365 4719 l
-3206 4719 l
-3205 4719 m
-3364 4719 l
-3364 4720 l
-3205 4720 l
-3204 4720 m
-3363 4720 l
-3363 4721 l
-3204 4721 l
-3203 4721 m
-3362 4721 l
-3362 4722 l
-3203 4722 l
-3202 4722 m
-3362 4722 l
-3362 4723 l
-3202 4723 l
-3201 4723 m
-3361 4723 l
-3361 4724 l
-3201 4724 l
-3200 4724 m
-3360 4724 l
-3360 4725 l
-3200 4725 l
-3200 4725 m
-3359 4725 l
-3359 4726 l
-3200 4726 l
-3199 4726 m
-3358 4726 l
-3358 4727 l
-3199 4727 l
-3198 4727 m
-3358 4727 l
-3358 4728 l
-3198 4728 l
-3197 4728 m
-3357 4728 l
-3357 4729 l
-3197 4729 l
-3196 4729 m
-3356 4729 l
-3356 4730 l
-3196 4730 l
-3195 4730 m
-3355 4730 l
-3355 4731 l
-3195 4731 l
-3195 4731 m
-3354 4731 l
-3354 4732 l
-3195 4732 l
-3194 4732 m
-3353 4732 l
-3353 4733 l
-3194 4733 l
-3193 4733 m
-3353 4733 l
-3353 4734 l
-3193 4734 l
-3192 4734 m
-3352 4734 l
-3352 4735 l
-3192 4735 l
-3191 4735 m
-3351 4735 l
-3351 4736 l
-3191 4736 l
-3190 4736 m
-3350 4736 l
-3350 4737 l
-3190 4737 l
-3190 4737 m
-3349 4737 l
-3349 4738 l
-3190 4738 l
-3189 4738 m
-3348 4738 l
-3348 4739 l
-3189 4739 l
-3188 4739 m
-3348 4739 l
-3348 4740 l
-3188 4740 l
-3187 4740 m
-3347 4740 l
-3347 4741 l
-3187 4741 l
-3186 4741 m
-3346 4741 l
-3346 4742 l
-3186 4742 l
-3185 4742 m
-3345 4742 l
-3345 4743 l
-3185 4743 l
-3185 4743 m
-3344 4743 l
-3344 4744 l
-3185 4744 l
-3184 4744 m
-3344 4744 l
-3344 4745 l
-3184 4745 l
-3183 4745 m
-3343 4745 l
-3343 4746 l
-3183 4746 l
-3182 4746 m
-3342 4746 l
-3342 4747 l
-3182 4747 l
-3181 4747 m
-3341 4747 l
-3341 4748 l
-3181 4748 l
-3180 4748 m
-3340 4748 l
-3340 4749 l
-3180 4749 l
-3180 4749 m
-3339 4749 l
-3339 4750 l
-3180 4750 l
-3179 4750 m
-3339 4750 l
-3339 4751 l
-3179 4751 l
-3178 4751 m
-3338 4751 l
-3338 4752 l
-3178 4752 l
-3177 4752 m
-3337 4752 l
-3337 4753 l
-3177 4753 l
-3176 4753 m
-3336 4753 l
-3336 4754 l
-3176 4754 l
-3175 4754 m
-3335 4754 l
-3335 4755 l
-3175 4755 l
-3175 4755 m
-3334 4755 l
-3334 4756 l
-3175 4756 l
-3174 4756 m
-3334 4756 l
-3334 4757 l
-3174 4757 l
-3173 4757 m
-3333 4757 l
-3333 4758 l
-3173 4758 l
-3172 4758 m
-3332 4758 l
-3332 4759 l
-3172 4759 l
-3171 4759 m
-3331 4759 l
-3331 4760 l
-3171 4760 l
-3170 4760 m
-3330 4760 l
-3330 4762 l
-3170 4762 l
-3169 4762 m
-3329 4762 l
-3329 4763 l
-3169 4763 l
-3168 4763 m
-3328 4763 l
-3328 4764 l
-3168 4764 l
-3167 4764 m
-3327 4764 l
-3327 4765 l
-3167 4765 l
-3166 4765 m
-3326 4765 l
-3326 4766 l
-3166 4766 l
-3165 4766 m
-3325 4766 l
-3325 4767 l
-3165 4767 l
-3165 4767 m
-3325 4767 l
-3325 4768 l
-3165 4768 l
-3165 4768 m
-3324 4768 l
-3324 4769 l
-3165 4769 l
-3166 4769 m
-3323 4769 l
-3323 4770 l
-3166 4770 l
-3167 4770 m
-3322 4770 l
-3322 4771 l
-3167 4771 l
-3168 4771 m
-3321 4771 l
-3321 4772 l
-3168 4772 l
-3169 4772 m
-3320 4772 l
-3320 4773 l
-3169 4773 l
-3171 4773 m
-3320 4773 l
-3320 4774 l
-3171 4774 l
-3172 4774 m
-3319 4774 l
-3319 4775 l
-3172 4775 l
-3173 4775 m
-3318 4775 l
-3318 4776 l
-3173 4776 l
-3174 4776 m
-3317 4776 l
-3317 4777 l
-3174 4777 l
-3175 4777 m
-3316 4777 l
-3316 4778 l
-3175 4778 l
-3177 4778 m
-3316 4778 l
-3316 4779 l
-3177 4779 l
-3178 4779 m
-3315 4779 l
-3315 4780 l
-3178 4780 l
-3179 4780 m
-3314 4780 l
-3314 4781 l
-3179 4781 l
-3180 4781 m
-3313 4781 l
-3313 4782 l
-3180 4782 l
-3181 4782 m
-3312 4782 l
-3312 4783 l
-3181 4783 l
-3183 4783 m
-3311 4783 l
-3311 4784 l
-3183 4784 l
-3184 4784 m
-3311 4784 l
-3311 4785 l
-3184 4785 l
-3185 4785 m
-3310 4785 l
-3310 4786 l
-3185 4786 l
-3186 4786 m
-3309 4786 l
-3309 4787 l
-3186 4787 l
-3187 4787 m
-3308 4787 l
-3308 4788 l
-3187 4788 l
-3189 4788 m
-3307 4788 l
-3307 4789 l
-3189 4789 l
-3190 4789 m
-3306 4789 l
-3306 4790 l
-3190 4790 l
-3191 4790 m
-3306 4790 l
-3306 4791 l
-3191 4791 l
-3192 4791 m
-3305 4791 l
-3305 4792 l
-3192 4792 l
-3193 4792 m
-3304 4792 l
-3304 4793 l
-3193 4793 l
-3195 4793 m
-3303 4793 l
-3303 4794 l
-3195 4794 l
-3196 4794 m
-3302 4794 l
-3302 4795 l
-3196 4795 l
-3197 4795 m
-3302 4795 l
-3302 4796 l
-3197 4796 l
-3198 4796 m
-3301 4796 l
-3301 4797 l
-3198 4797 l
-3199 4797 m
-3300 4797 l
-3300 4798 l
-3199 4798 l
-3201 4798 m
-3299 4798 l
-3299 4799 l
-3201 4799 l
-3202 4799 m
-3298 4799 l
-3298 4800 l
-3202 4800 l
-3203 4800 m
-3297 4800 l
-3297 4801 l
-3203 4801 l
-3204 4801 m
-3297 4801 l
-3297 4802 l
-3204 4802 l
-3205 4802 m
-3296 4802 l
-3296 4803 l
-3205 4803 l
-3207 4803 m
-3295 4803 l
-3295 4804 l
-3207 4804 l
-3208 4804 m
-3294 4804 l
-3294 4805 l
-3208 4805 l
-3209 4805 m
-3293 4805 l
-3293 4806 l
-3209 4806 l
-3210 4806 m
-3292 4806 l
-3292 4807 l
-3210 4807 l
-3212 4807 m
-3292 4807 l
-3292 4808 l
-3212 4808 l
-3213 4808 m
-3291 4808 l
-3291 4809 l
-3213 4809 l
-3214 4809 m
-3290 4809 l
-3290 4810 l
-3214 4810 l
-3215 4810 m
-3289 4810 l
-3289 4811 l
-3215 4811 l
-3216 4811 m
-3288 4811 l
-3288 4812 l
-3216 4812 l
-3218 4812 m
-3288 4812 l
-3288 4813 l
-3218 4813 l
-3219 4813 m
-3287 4813 l
-3287 4814 l
-3219 4814 l
-3220 4814 m
-3286 4814 l
-3286 4815 l
-3220 4815 l
-3221 4815 m
-3285 4815 l
-3285 4816 l
-3221 4816 l
-3222 4816 m
-3284 4816 l
-3284 4817 l
-3222 4817 l
-3224 4817 m
-3283 4817 l
-3283 4818 l
-3224 4818 l
-3225 4818 m
-3283 4818 l
-3283 4819 l
-3225 4819 l
-3226 4819 m
-3282 4819 l
-3282 4820 l
-3226 4820 l
-3227 4820 m
-3281 4820 l
-3281 4821 l
-3227 4821 l
-3228 4821 m
-3280 4821 l
-3280 4822 l
-3228 4822 l
-3230 4822 m
-3279 4822 l
-3279 4823 l
-3230 4823 l
-3231 4823 m
-3278 4823 l
-3278 4824 l
-3231 4824 l
-3232 4824 m
-3278 4824 l
-3278 4825 l
-3232 4825 l
-3233 4825 m
-3277 4825 l
-3277 4826 l
-3233 4826 l
-3234 4826 m
-3276 4826 l
-3276 4827 l
-3234 4827 l
-3236 4827 m
-3275 4827 l
-3275 4828 l
-3236 4828 l
-3237 4828 m
-3274 4828 l
-3274 4829 l
-3237 4829 l
-3238 4829 m
-3274 4829 l
-3274 4830 l
-3238 4830 l
-3239 4830 m
-3273 4830 l
-3273 4831 l
-3239 4831 l
-3240 4831 m
-3272 4831 l
-3272 4832 l
-3240 4832 l
-3242 4832 m
-3271 4832 l
-3271 4833 l
-3242 4833 l
-3243 4833 m
-3270 4833 l
-3270 4834 l
-3243 4834 l
-3244 4834 m
-3269 4834 l
-3269 4835 l
-3244 4835 l
-3245 4835 m
-3269 4835 l
-3269 4836 l
-3245 4836 l
-3246 4836 m
-3268 4836 l
-3268 4837 l
-3246 4837 l
-3248 4837 m
-3267 4837 l
-3267 4838 l
-3248 4838 l
-3249 4838 m
-3266 4838 l
-3266 4839 l
-3249 4839 l
-3250 4839 m
-3265 4839 l
-3265 4840 l
-3250 4840 l
-3251 4840 m
-3264 4840 l
-3264 4841 l
-3251 4841 l
-3252 4841 m
-3264 4841 l
-3264 4842 l
-3252 4842 l
-3254 4842 m
-3263 4842 l
-3263 4843 l
-3254 4843 l
-3255 4843 m
-3262 4843 l
-3262 4844 l
-3255 4844 l
-3256 4844 m
-3261 4844 l
-3261 4845 l
-3256 4845 l
-3257 4845 m
-3260 4845 l
-3260 4846 l
-3257 4846 l
-Y
-3375.8 4704.2 m
-3283 4627 l
-3165 4768 l
-3259 4846 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-3277 4660 m
-3247 4695 l
-3289 4698 l
-3281 4707 l
-3279 4716 l
-3280 4722 l
-3287 4733 l
-3293 4739 l
-3305 4743 l
-3317 4742 l
-3328 4735 l
-3336 4726 l
-3341 4713 l
-3341 4708 l
-3337 4699 l
-S
-3213 4737 m
-3224 4730 l
-3239 4732 l
-3258 4742 l
-3267 4750 l
-3281 4767 l
-3285 4781 l
-3280 4793 l
-3275 4800 l
-3264 4807 l
-3249 4805 l
-3230 4795 l
-3220 4787 l
-3207 4770 l
-3203 4756 l
-3207 4744 l
-3213 4737 l
-S
-1 g
-2920 4919 m
-2925 4919 l
-2925 4920 l
-2920 4920 l
-2916 4920 m
-2925 4920 l
-2925 4921 l
-2916 4921 l
-2913 4921 m
-2925 4921 l
-2925 4922 l
-2913 4922 l
-2909 4922 m
-2926 4922 l
-2926 4923 l
-2909 4923 l
-2906 4923 m
-2926 4923 l
-2926 4924 l
-2906 4924 l
-2902 4924 m
-2926 4924 l
-2926 4925 l
-2902 4925 l
-2899 4925 m
-2927 4925 l
-2927 4926 l
-2899 4926 l
-2895 4926 m
-2927 4926 l
-2927 4927 l
-2895 4927 l
-2892 4927 m
-2927 4927 l
-2927 4928 l
-2892 4928 l
-2888 4928 m
-2927 4928 l
-2927 4929 l
-2888 4929 l
-2885 4929 m
-2928 4929 l
-2928 4930 l
-2885 4930 l
-2881 4930 m
-2928 4930 l
-2928 4931 l
-2881 4931 l
-2878 4931 m
-2928 4931 l
-2928 4932 l
-2878 4932 l
-2874 4932 m
-2929 4932 l
-2929 4933 l
-2874 4933 l
-2871 4933 m
-2929 4933 l
-2929 4934 l
-2871 4934 l
-2867 4934 m
-2929 4934 l
-2929 4935 l
-2867 4935 l
-2864 4935 m
-2929 4935 l
-2929 4936 l
-2864 4936 l
-2860 4936 m
-2930 4936 l
-2930 4937 l
-2860 4937 l
-2857 4937 m
-2930 4937 l
-2930 4938 l
-2857 4938 l
-2853 4938 m
-2930 4938 l
-2930 4939 l
-2853 4939 l
-2850 4939 m
-2931 4939 l
-2931 4940 l
-2850 4940 l
-2846 4940 m
-2931 4940 l
-2931 4941 l
-2846 4941 l
-2843 4941 m
-2931 4941 l
-2931 4942 l
-2843 4942 l
-2839 4942 m
-2931 4942 l
-2931 4943 l
-2839 4943 l
-2836 4943 m
-2932 4943 l
-2932 4944 l
-2836 4944 l
-2832 4944 m
-2932 4944 l
-2932 4945 l
-2832 4945 l
-2829 4945 m
-2932 4945 l
-2932 4946 l
-2829 4946 l
-2825 4946 m
-2933 4946 l
-2933 4947 l
-2825 4947 l
-2822 4947 m
-2933 4947 l
-2933 4948 l
-2822 4948 l
-2818 4948 m
-2933 4948 l
-2933 4949 l
-2818 4949 l
-2815 4949 m
-2933 4949 l
-2933 4950 l
-2815 4950 l
-2811 4950 m
-2934 4950 l
-2934 4951 l
-2811 4951 l
-2808 4951 m
-2934 4951 l
-2934 4952 l
-2808 4952 l
-2804 4952 m
-2934 4952 l
-2934 4953 l
-2804 4953 l
-2801 4953 m
-2935 4953 l
-2935 4954 l
-2801 4954 l
-2797 4954 m
-2935 4954 l
-2935 4955 l
-2797 4955 l
-2794 4955 m
-2935 4955 l
-2935 4956 l
-2794 4956 l
-2790 4956 m
-2935 4956 l
-2935 4957 l
-2790 4957 l
-2787 4957 m
-2936 4957 l
-2936 4958 l
-2787 4958 l
-2783 4958 m
-2936 4958 l
-2936 4959 l
-2783 4959 l
-2780 4959 m
-2936 4959 l
-2936 4960 l
-2780 4960 l
-2776 4960 m
-2937 4960 l
-2937 4961 l
-2776 4961 l
-2773 4961 m
-2937 4961 l
-2937 4962 l
-2773 4962 l
-2769 4962 m
-2937 4962 l
-2937 4963 l
-2769 4963 l
-2766 4963 m
-2937 4963 l
-2937 4964 l
-2766 4964 l
-2762 4964 m
-2938 4964 l
-2938 4965 l
-2762 4965 l
-2759 4965 m
-2938 4965 l
-2938 4966 l
-2759 4966 l
-2755 4966 m
-2938 4966 l
-2938 4967 l
-2755 4967 l
-2752 4967 m
-2939 4967 l
-2939 4968 l
-2752 4968 l
-2752 4968 m
-2939 4968 l
-2939 4971 l
-2752 4971 l
-2752 4971 m
-2940 4971 l
-2940 4972 l
-2752 4972 l
-2753 4972 m
-2940 4972 l
-2940 4974 l
-2753 4974 l
-2753 4974 m
-2941 4974 l
-2941 4976 l
-2753 4976 l
-2754 4976 m
-2941 4976 l
-2941 4978 l
-2754 4978 l
-2754 4978 m
-2942 4978 l
-2942 4979 l
-2754 4979 l
-2755 4979 m
-2942 4979 l
-2942 4981 l
-2755 4981 l
-2755 4981 m
-2943 4981 l
-2943 4983 l
-2755 4983 l
-2756 4983 m
-2943 4983 l
-2943 4985 l
-2756 4985 l
-2756 4985 m
-2944 4985 l
-2944 4986 l
-2756 4986 l
-2757 4986 m
-2944 4986 l
-2944 4988 l
-2757 4988 l
-2757 4988 m
-2945 4988 l
-2945 4990 l
-2757 4990 l
-2758 4990 m
-2945 4990 l
-2945 4992 l
-2758 4992 l
-2758 4992 m
-2946 4992 l
-2946 4993 l
-2758 4993 l
-2759 4993 m
-2946 4993 l
-2946 4995 l
-2759 4995 l
-2759 4995 m
-2947 4995 l
-2947 4997 l
-2759 4997 l
-2760 4997 m
-2947 4997 l
-2947 4999 l
-2760 4999 l
-2760 4999 m
-2948 4999 l
-2948 5000 l
-2760 5000 l
-2761 5000 m
-2948 5000 l
-2948 5002 l
-2761 5002 l
-2761 5002 m
-2949 5002 l
-2949 5004 l
-2761 5004 l
-2762 5004 m
-2949 5004 l
-2949 5006 l
-2762 5006 l
-2762 5006 m
-2950 5006 l
-2950 5007 l
-2762 5007 l
-2763 5007 m
-2950 5007 l
-2950 5009 l
-2763 5009 l
-2763 5009 m
-2951 5009 l
-2951 5011 l
-2763 5011 l
-2764 5011 m
-2951 5011 l
-2951 5013 l
-2764 5013 l
-2764 5013 m
-2952 5013 l
-2952 5015 l
-2764 5015 l
-2765 5015 m
-2952 5015 l
-2952 5016 l
-2765 5016 l
-2765 5016 m
-2953 5016 l
-2953 5018 l
-2765 5018 l
-2766 5018 m
-2953 5018 l
-2953 5020 l
-2766 5020 l
-2766 5020 m
-2954 5020 l
-2954 5022 l
-2766 5022 l
-2767 5022 m
-2954 5022 l
-2954 5023 l
-2767 5023 l
-2767 5023 m
-2955 5023 l
-2955 5025 l
-2767 5025 l
-2768 5025 m
-2955 5025 l
-2955 5026 l
-2768 5026 l
-2768 5026 m
-2956 5026 l
-2956 5029 l
-2768 5029 l
-2769 5029 m
-2956 5029 l
-2956 5030 l
-2769 5030 l
-2769 5030 m
-2957 5030 l
-2957 5032 l
-2769 5032 l
-2770 5032 m
-2957 5032 l
-2957 5033 l
-2770 5033 l
-2770 5033 m
-2958 5033 l
-2958 5035 l
-2770 5035 l
-2770 5035 m
-2958 5035 l
-2958 5036 l
-2770 5036 l
-2771 5036 m
-2957 5036 l
-2957 5037 l
-2771 5037 l
-2771 5037 m
-2953 5037 l
-2953 5038 l
-2771 5038 l
-2771 5038 m
-2950 5038 l
-2950 5039 l
-2771 5039 l
-2772 5039 m
-2946 5039 l
-2946 5040 l
-2772 5040 l
-2772 5040 m
-2943 5040 l
-2943 5041 l
-2772 5041 l
-2772 5041 m
-2939 5041 l
-2939 5042 l
-2772 5042 l
-2772 5042 m
-2936 5042 l
-2936 5043 l
-2772 5043 l
-2773 5043 m
-2932 5043 l
-2932 5044 l
-2773 5044 l
-2773 5044 m
-2929 5044 l
-2929 5045 l
-2773 5045 l
-2773 5045 m
-2925 5045 l
-2925 5046 l
-2773 5046 l
-2774 5046 m
-2922 5046 l
-2922 5047 l
-2774 5047 l
-2774 5047 m
-2918 5047 l
-2918 5048 l
-2774 5048 l
-2774 5048 m
-2915 5048 l
-2915 5049 l
-2774 5049 l
-2774 5049 m
-2911 5049 l
-2911 5050 l
-2774 5050 l
-2775 5050 m
-2908 5050 l
-2908 5051 l
-2775 5051 l
-2775 5051 m
-2904 5051 l
-2904 5052 l
-2775 5052 l
-2775 5052 m
-2901 5052 l
-2901 5053 l
-2775 5053 l
-2775 5053 m
-2897 5053 l
-2897 5054 l
-2775 5054 l
-2776 5054 m
-2894 5054 l
-2894 5055 l
-2776 5055 l
-2776 5055 m
-2890 5055 l
-2890 5056 l
-2776 5056 l
-2776 5056 m
-2887 5056 l
-2887 5057 l
-2776 5057 l
-2777 5057 m
-2883 5057 l
-2883 5058 l
-2777 5058 l
-2777 5058 m
-2880 5058 l
-2880 5059 l
-2777 5059 l
-2777 5059 m
-2876 5059 l
-2876 5060 l
-2777 5060 l
-2777 5060 m
-2873 5060 l
-2873 5061 l
-2777 5061 l
-2778 5061 m
-2869 5061 l
-2869 5062 l
-2778 5062 l
-2778 5062 m
-2866 5062 l
-2866 5063 l
-2778 5063 l
-2778 5063 m
-2862 5063 l
-2862 5064 l
-2778 5064 l
-2779 5064 m
-2859 5064 l
-2859 5065 l
-2779 5065 l
-2779 5065 m
-2855 5065 l
-2855 5066 l
-2779 5066 l
-2779 5066 m
-2852 5066 l
-2852 5067 l
-2779 5067 l
-2779 5067 m
-2848 5067 l
-2848 5068 l
-2779 5068 l
-2780 5068 m
-2845 5068 l
-2845 5069 l
-2780 5069 l
-2780 5069 m
-2841 5069 l
-2841 5070 l
-2780 5070 l
-2780 5070 m
-2838 5070 l
-2838 5071 l
-2780 5071 l
-2781 5071 m
-2834 5071 l
-2834 5072 l
-2781 5072 l
-2781 5072 m
-2831 5072 l
-2831 5073 l
-2781 5073 l
-2781 5073 m
-2827 5073 l
-2827 5074 l
-2781 5074 l
-2781 5074 m
-2824 5074 l
-2824 5075 l
-2781 5075 l
-2782 5075 m
-2820 5075 l
-2820 5076 l
-2782 5076 l
-2782 5076 m
-2817 5076 l
-2817 5077 l
-2782 5077 l
-2782 5077 m
-2813 5077 l
-2813 5078 l
-2782 5078 l
-2783 5078 m
-2810 5078 l
-2810 5079 l
-2783 5079 l
-2783 5079 m
-2806 5079 l
-2806 5080 l
-2783 5080 l
-2783 5080 m
-2803 5080 l
-2803 5081 l
-2783 5081 l
-2783 5081 m
-2799 5081 l
-2799 5082 l
-2783 5082 l
-2784 5082 m
-2796 5082 l
-2796 5083 l
-2784 5083 l
-2784 5083 m
-2792 5083 l
-2792 5084 l
-2784 5084 l
-2784 5084 m
-2789 5084 l
-2789 5085 l
-2784 5085 l
-Y
-2957.5 5035.7 m
-2924 4919 l
-2752 4968 l
-2785 5085 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-2864 4967 m
-2866 4958 l
-2877 4950 l
-2885 4948 l
-2898 4948 l
-2909 4958 l
-2919 4977 l
-2925 4997 l
-2925 5014 l
-2920 5025 l
-2909 5032 l
-2905 5033 l
-2892 5033 l
-2881 5027 l
-2874 5016 l
-2873 5012 l
-2873 4999 l
-2879 4989 l
-2890 4981 l
-2894 4980 l
-2907 4981 l
-2917 4986 l
-2925 4997 l
-S
-2808 4970 m
-2822 4970 l
-2833 4980 l
-2843 4999 l
-2846 5011 l
-2848 5032 l
-2843 5046 l
-2832 5054 l
-2824 5056 l
-2811 5056 l
-2800 5046 l
-2790 5027 l
-2787 5015 l
-2785 4994 l
-2789 4979 l
-2800 4972 l
-2808 4970 l
-S
-1 g
-2198 4859 m
-2203 4859 l
-2203 4860 l
-2198 4860 l
-2198 4860 m
-2205 4860 l
-2205 4861 l
-2198 4861 l
-2197 4861 m
-2208 4861 l
-2208 4862 l
-2197 4862 l
-2197 4862 m
-2210 4862 l
-2210 4863 l
-2197 4863 l
-2196 4863 m
-2213 4863 l
-2213 4864 l
-2196 4864 l
-2196 4864 m
-2215 4864 l
-2215 4865 l
-2196 4865 l
-2196 4865 m
-2218 4865 l
-2218 4866 l
-2196 4866 l
-2195 4866 m
-2220 4866 l
-2220 4867 l
-2195 4867 l
-2195 4867 m
-2223 4867 l
-2223 4868 l
-2195 4868 l
-2194 4868 m
-2225 4868 l
-2225 4869 l
-2194 4869 l
-2194 4869 m
-2228 4869 l
-2228 4870 l
-2194 4870 l
-2194 4870 m
-2230 4870 l
-2230 4871 l
-2194 4871 l
-2193 4871 m
-2233 4871 l
-2233 4872 l
-2193 4872 l
-2193 4872 m
-2235 4872 l
-2235 4873 l
-2193 4873 l
-2192 4873 m
-2238 4873 l
-2238 4874 l
-2192 4874 l
-2192 4874 m
-2240 4874 l
-2240 4875 l
-2192 4875 l
-2192 4875 m
-2243 4875 l
-2243 4876 l
-2192 4876 l
-2191 4876 m
-2245 4876 l
-2245 4877 l
-2191 4877 l
-2191 4877 m
-2248 4877 l
-2248 4878 l
-2191 4878 l
-2190 4878 m
-2250 4878 l
-2250 4879 l
-2190 4879 l
-2190 4879 m
-2253 4879 l
-2253 4880 l
-2190 4880 l
-2190 4880 m
-2255 4880 l
-2255 4881 l
-2190 4881 l
-2189 4881 m
-2258 4881 l
-2258 4882 l
-2189 4882 l
-2189 4882 m
-2260 4882 l
-2260 4883 l
-2189 4883 l
-2188 4883 m
-2263 4883 l
-2263 4884 l
-2188 4884 l
-2188 4884 m
-2265 4884 l
-2265 4885 l
-2188 4885 l
-2188 4885 m
-2268 4885 l
-2268 4886 l
-2188 4886 l
-2187 4886 m
-2270 4886 l
-2270 4887 l
-2187 4887 l
-2187 4887 m
-2273 4887 l
-2273 4888 l
-2187 4888 l
-2186 4888 m
-2275 4888 l
-2275 4889 l
-2186 4889 l
-2186 4889 m
-2278 4889 l
-2278 4890 l
-2186 4890 l
-2186 4890 m
-2280 4890 l
-2280 4891 l
-2186 4891 l
-2185 4891 m
-2283 4891 l
-2283 4892 l
-2185 4892 l
-2185 4892 m
-2285 4892 l
-2285 4893 l
-2185 4893 l
-2184 4893 m
-2288 4893 l
-2288 4894 l
-2184 4894 l
-2184 4894 m
-2290 4894 l
-2290 4895 l
-2184 4895 l
-2184 4895 m
-2293 4895 l
-2293 4896 l
-2184 4896 l
-2183 4896 m
-2295 4896 l
-2295 4897 l
-2183 4897 l
-2183 4897 m
-2298 4897 l
-2298 4898 l
-2183 4898 l
-2182 4898 m
-2300 4898 l
-2300 4899 l
-2182 4899 l
-2182 4899 m
-2303 4899 l
-2303 4900 l
-2182 4900 l
-2182 4900 m
-2305 4900 l
-2305 4901 l
-2182 4901 l
-2181 4901 m
-2308 4901 l
-2308 4902 l
-2181 4902 l
-2181 4902 m
-2310 4902 l
-2310 4903 l
-2181 4903 l
-2180 4903 m
-2313 4903 l
-2313 4904 l
-2180 4904 l
-2180 4904 m
-2315 4904 l
-2315 4905 l
-2180 4905 l
-2180 4905 m
-2318 4905 l
-2318 4906 l
-2180 4906 l
-2179 4906 m
-2320 4906 l
-2320 4907 l
-2179 4907 l
-2179 4907 m
-2323 4907 l
-2323 4908 l
-2179 4908 l
-2178 4908 m
-2325 4908 l
-2325 4909 l
-2178 4909 l
-2178 4909 m
-2328 4909 l
-2328 4910 l
-2178 4910 l
-2178 4910 m
-2330 4910 l
-2330 4911 l
-2178 4911 l
-2177 4911 m
-2333 4911 l
-2333 4912 l
-2177 4912 l
-2177 4912 m
-2335 4912 l
-2335 4913 l
-2177 4913 l
-2176 4913 m
-2338 4913 l
-2338 4914 l
-2176 4914 l
-2176 4914 m
-2340 4914 l
-2340 4915 l
-2176 4915 l
-2176 4915 m
-2343 4915 l
-2343 4916 l
-2176 4916 l
-2175 4916 m
-2345 4916 l
-2345 4917 l
-2175 4917 l
-2175 4917 m
-2348 4917 l
-2348 4918 l
-2175 4918 l
-2174 4918 m
-2350 4918 l
-2350 4919 l
-2174 4919 l
-2174 4919 m
-2353 4919 l
-2353 4920 l
-2174 4920 l
-2174 4920 m
-2355 4920 l
-2355 4921 l
-2174 4921 l
-2173 4921 m
-2358 4921 l
-2358 4922 l
-2173 4922 l
-2173 4922 m
-2360 4922 l
-2360 4923 l
-2173 4923 l
-2172 4923 m
-2363 4923 l
-2363 4924 l
-2172 4924 l
-2172 4924 m
-2365 4924 l
-2365 4925 l
-2172 4925 l
-2172 4925 m
-2368 4925 l
-2368 4926 l
-2172 4926 l
-2171 4926 m
-2370 4926 l
-2370 4927 l
-2171 4927 l
-2171 4927 m
-2370 4927 l
-2370 4928 l
-2171 4928 l
-2170 4928 m
-2370 4928 l
-2370 4930 l
-2170 4930 l
-2170 4930 m
-2369 4930 l
-2369 4931 l
-2170 4931 l
-2169 4931 m
-2369 4931 l
-2369 4932 l
-2169 4932 l
-2169 4932 m
-2368 4932 l
-2368 4933 l
-2169 4933 l
-2168 4933 m
-2368 4933 l
-2368 4935 l
-2168 4935 l
-2168 4935 m
-2367 4935 l
-2367 4936 l
-2168 4936 l
-2167 4936 m
-2367 4936 l
-2367 4937 l
-2167 4937 l
-2167 4937 m
-2366 4937 l
-2366 4938 l
-2167 4938 l
-2166 4938 m
-2366 4938 l
-2366 4940 l
-2166 4940 l
-2166 4940 m
-2365 4940 l
-2365 4941 l
-2166 4941 l
-2165 4941 m
-2365 4941 l
-2365 4942 l
-2165 4942 l
-2165 4942 m
-2364 4942 l
-2364 4943 l
-2165 4943 l
-2164 4943 m
-2364 4943 l
-2364 4945 l
-2164 4945 l
-2164 4945 m
-2363 4945 l
-2363 4946 l
-2164 4946 l
-2163 4946 m
-2363 4946 l
-2363 4947 l
-2163 4947 l
-2163 4947 m
-2362 4947 l
-2362 4948 l
-2163 4948 l
-2162 4948 m
-2362 4948 l
-2362 4950 l
-2162 4950 l
-2162 4950 m
-2361 4950 l
-2361 4951 l
-2162 4951 l
-2161 4951 m
-2361 4951 l
-2361 4952 l
-2161 4952 l
-2161 4952 m
-2360 4952 l
-2360 4953 l
-2161 4953 l
-2160 4953 m
-2360 4953 l
-2360 4955 l
-2160 4955 l
-2160 4955 m
-2359 4955 l
-2359 4956 l
-2160 4956 l
-2159 4956 m
-2359 4956 l
-2359 4957 l
-2159 4957 l
-2159 4957 m
-2358 4957 l
-2358 4958 l
-2159 4958 l
-2158 4958 m
-2358 4958 l
-2358 4959 l
-2158 4959 l
-2158 4959 m
-2357 4959 l
-2357 4961 l
-2158 4961 l
-2157 4961 m
-2357 4961 l
-2357 4962 l
-2157 4962 l
-2157 4962 m
-2356 4962 l
-2356 4963 l
-2157 4963 l
-2156 4963 m
-2356 4963 l
-2356 4964 l
-2156 4964 l
-2156 4964 m
-2355 4964 l
-2355 4966 l
-2156 4966 l
-2155 4966 m
-2355 4966 l
-2355 4967 l
-2155 4967 l
-2155 4967 m
-2354 4967 l
-2354 4968 l
-2155 4968 l
-2154 4968 m
-2354 4968 l
-2354 4969 l
-2154 4969 l
-2154 4969 m
-2353 4969 l
-2353 4971 l
-2154 4971 l
-2154 4971 m
-2353 4971 l
-2353 4972 l
-2154 4972 l
-2156 4972 m
-2352 4972 l
-2352 4973 l
-2156 4973 l
-2158 4973 m
-2352 4973 l
-2352 4974 l
-2158 4974 l
-2161 4974 m
-2351 4974 l
-2351 4975 l
-2161 4975 l
-2163 4975 m
-2351 4975 l
-2351 4976 l
-2163 4976 l
-2166 4976 m
-2351 4976 l
-2351 4977 l
-2166 4977 l
-2168 4977 m
-2350 4977 l
-2350 4978 l
-2168 4978 l
-2171 4978 m
-2350 4978 l
-2350 4979 l
-2171 4979 l
-2173 4979 m
-2349 4979 l
-2349 4980 l
-2173 4980 l
-2176 4980 m
-2349 4980 l
-2349 4981 l
-2176 4981 l
-2178 4981 m
-2349 4981 l
-2349 4982 l
-2178 4982 l
-2181 4982 m
-2348 4982 l
-2348 4983 l
-2181 4983 l
-2183 4983 m
-2348 4983 l
-2348 4984 l
-2183 4984 l
-2186 4984 m
-2347 4984 l
-2347 4985 l
-2186 4985 l
-2188 4985 m
-2347 4985 l
-2347 4986 l
-2188 4986 l
-2190 4986 m
-2346 4986 l
-2346 4987 l
-2190 4987 l
-2193 4987 m
-2346 4987 l
-2346 4988 l
-2193 4988 l
-2195 4988 m
-2346 4988 l
-2346 4989 l
-2195 4989 l
-2198 4989 m
-2345 4989 l
-2345 4990 l
-2198 4990 l
-2200 4990 m
-2345 4990 l
-2345 4991 l
-2200 4991 l
-2203 4991 m
-2344 4991 l
-2344 4992 l
-2203 4992 l
-2205 4992 m
-2344 4992 l
-2344 4993 l
-2205 4993 l
-2208 4993 m
-2344 4993 l
-2344 4994 l
-2208 4994 l
-2210 4994 m
-2343 4994 l
-2343 4995 l
-2210 4995 l
-2213 4995 m
-2343 4995 l
-2343 4996 l
-2213 4996 l
-2215 4996 m
-2342 4996 l
-2342 4997 l
-2215 4997 l
-2218 4997 m
-2342 4997 l
-2342 4998 l
-2218 4998 l
-2220 4998 m
-2342 4998 l
-2342 4999 l
-2220 4999 l
-2222 4999 m
-2341 4999 l
-2341 5000 l
-2222 5000 l
-2225 5000 m
-2341 5000 l
-2341 5001 l
-2225 5001 l
-2227 5001 m
-2340 5001 l
-2340 5002 l
-2227 5002 l
-2230 5002 m
-2340 5002 l
-2340 5003 l
-2230 5003 l
-2232 5003 m
-2340 5003 l
-2340 5004 l
-2232 5004 l
-2235 5004 m
-2339 5004 l
-2339 5005 l
-2235 5005 l
-2237 5005 m
-2339 5005 l
-2339 5006 l
-2237 5006 l
-2240 5006 m
-2338 5006 l
-2338 5007 l
-2240 5007 l
-2242 5007 m
-2338 5007 l
-2338 5008 l
-2242 5008 l
-2245 5008 m
-2338 5008 l
-2338 5009 l
-2245 5009 l
-2247 5009 m
-2337 5009 l
-2337 5010 l
-2247 5010 l
-2250 5010 m
-2337 5010 l
-2337 5011 l
-2250 5011 l
-2252 5011 m
-2336 5011 l
-2336 5012 l
-2252 5012 l
-2255 5012 m
-2336 5012 l
-2336 5013 l
-2255 5013 l
-2257 5013 m
-2335 5013 l
-2335 5014 l
-2257 5014 l
-2259 5014 m
-2335 5014 l
-2335 5015 l
-2259 5015 l
-2262 5015 m
-2335 5015 l
-2335 5016 l
-2262 5016 l
-2264 5016 m
-2334 5016 l
-2334 5017 l
-2264 5017 l
-2267 5017 m
-2334 5017 l
-2334 5018 l
-2267 5018 l
-2269 5018 m
-2333 5018 l
-2333 5019 l
-2269 5019 l
-2272 5019 m
-2333 5019 l
-2333 5020 l
-2272 5020 l
-2274 5020 m
-2333 5020 l
-2333 5021 l
-2274 5021 l
-2277 5021 m
-2332 5021 l
-2332 5022 l
-2277 5022 l
-2279 5022 m
-2332 5022 l
-2332 5023 l
-2279 5023 l
-2282 5023 m
-2331 5023 l
-2331 5024 l
-2282 5024 l
-2284 5024 m
-2331 5024 l
-2331 5025 l
-2284 5025 l
-2287 5025 m
-2331 5025 l
-2331 5026 l
-2287 5026 l
-2289 5026 m
-2330 5026 l
-2330 5027 l
-2289 5027 l
-2291 5027 m
-2330 5027 l
-2330 5028 l
-2291 5028 l
-2294 5028 m
-2329 5028 l
-2329 5029 l
-2294 5029 l
-2296 5029 m
-2329 5029 l
-2329 5030 l
-2296 5030 l
-2299 5030 m
-2329 5030 l
-2329 5031 l
-2299 5031 l
-2301 5031 m
-2328 5031 l
-2328 5032 l
-2301 5032 l
-2304 5032 m
-2328 5032 l
-2328 5033 l
-2304 5033 l
-2306 5033 m
-2327 5033 l
-2327 5034 l
-2306 5034 l
-2309 5034 m
-2327 5034 l
-2327 5035 l
-2309 5035 l
-2311 5035 m
-2327 5035 l
-2327 5036 l
-2311 5036 l
-2314 5036 m
-2326 5036 l
-2326 5037 l
-2314 5037 l
-2316 5037 m
-2326 5037 l
-2326 5038 l
-2316 5038 l
-2319 5038 m
-2325 5038 l
-2325 5039 l
-2319 5039 l
-2321 5039 m
-2325 5039 l
-2325 5040 l
-2321 5040 l
-Y
-2199 4858.8 m
-2154 4971 l
-2324 5040 l
-2370 4927 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-2241 4957 m
-2242 4943 l
-2237 4932 l
-2227 4924 l
-2223 4922 l
-2210 4922 l
-2199 4926 l
-2190 4936 l
-2189 4940 l
-2188 4953 l
-2193 4964 l
-2203 4973 l
-2207 4974 l
-2220 4975 l
-2231 4970 l
-2241 4957 l
-2249 4937 l
-2252 4916 l
-2249 4901 l
-2239 4893 l
-2232 4890 l
-2218 4889 l
-2211 4895 l
-S
-2280 5004 m
-2270 4995 l
-2267 4981 l
-2271 4960 l
-2276 4948 l
-2287 4930 l
-2300 4922 l
-2313 4922 l
-2321 4926 l
-2331 4934 l
-2334 4949 l
-2330 4970 l
-2325 4981 l
-2314 4999 l
-2301 5008 l
-2288 5007 l
-2280 5004 l
-S
-1 g
-974 2200 m
-1160 2200 l
-1160 5703 l
-974 5703 l
-Y
-1159.9 2200 m
-974 2200 l
-974 5703 l
-1160 5703 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1000 2225 m
-1105 2225 l
-S
-1000 2225 m
-1000 2290 l
-S
-1050 2225 m
-1050 2265 l
-S
-1105 2225 m
-1105 2290 l
-S
-1050 2375 m
-1040 2365 l
-1035 2355 l
-1035 2340 l
-1040 2330 l
-1050 2320 l
-1065 2315 l
-1075 2315 l
-1090 2320 l
-1100 2330 l
-1105 2340 l
-1105 2355 l
-1100 2365 l
-1090 2375 l
-S
-1000 2411 m
-1105 2411 l
-S
-1000 2446 m
-1005 2451 l
-1000 2456 l
-995 2451 l
-1000 2446 l
-S
-1035 2451 m
-1105 2451 l
-S
-1035 2491 m
-1140 2491 l
-S
-1050 2491 m
-1040 2501 l
-1035 2511 l
-1035 2526 l
-1040 2536 l
-1050 2546 l
-1065 2551 l
-1075 2551 l
-1090 2546 l
-1100 2536 l
-1105 2526 l
-1105 2511 l
-1100 2501 l
-1090 2491 l
-S
-1000 2591 m
-1085 2591 l
-1100 2596 l
-1105 2606 l
-1105 2616 l
-S
-1035 2576 m
-1035 2611 l
-S
-1000 2641 m
-1005 2646 l
-1000 2651 l
-995 2646 l
-1000 2641 l
-S
-1035 2646 m
-1105 2646 l
-S
-1050 2741 m
-1040 2731 l
-1035 2721 l
-1035 2706 l
-1040 2696 l
-1050 2686 l
-1065 2681 l
-1075 2681 l
-1090 2686 l
-1100 2696 l
-1105 2706 l
-1105 2721 l
-1100 2731 l
-1090 2741 l
-S
-1050 2912 m
-1040 2902 l
-1035 2892 l
-1035 2877 l
-1040 2867 l
-1050 2857 l
-1065 2852 l
-1075 2852 l
-1090 2857 l
-1100 2867 l
-1105 2877 l
-1105 2892 l
-1100 2902 l
-1090 2912 l
-S
-1035 2967 m
-1040 2957 l
-1050 2947 l
-1065 2942 l
-1075 2942 l
-1090 2947 l
-1100 2957 l
-1105 2967 l
-1105 2982 l
-1100 2992 l
-1090 3002 l
-1075 3007 l
-1065 3007 l
-1050 3002 l
-1040 2992 l
-1035 2982 l
-1035 2967 l
-S
-1035 3062 m
-1040 3052 l
-1050 3042 l
-1065 3037 l
-1075 3037 l
-1090 3042 l
-1100 3052 l
-1105 3062 l
-1105 3077 l
-1100 3087 l
-1090 3097 l
-1075 3102 l
-1065 3102 l
-1050 3097 l
-1040 3087 l
-1035 3077 l
-1035 3062 l
-S
-1035 3137 m
-1105 3137 l
-S
-1065 3137 m
-1050 3142 l
-1040 3152 l
-1035 3162 l
-1035 3177 l
-S
-1000 3258 m
-1105 3258 l
-S
-1050 3258 m
-1040 3248 l
-1035 3238 l
-1035 3222 l
-1040 3212 l
-1050 3202 l
-1065 3197 l
-1075 3197 l
-1090 3202 l
-1100 3212 l
-1105 3222 l
-1105 3238 l
-1100 3248 l
-1090 3258 l
-S
-1000 3293 m
-1005 3298 l
-1000 3303 l
-995 3298 l
-1000 3293 l
-S
-1035 3298 m
-1105 3298 l
-S
-1035 3338 m
-1105 3338 l
-S
-1055 3338 m
-1040 3353 l
-1035 3363 l
-1035 3378 l
-1040 3388 l
-1055 3393 l
-1105 3393 l
-S
-1035 3488 m
-1105 3488 l
-S
-1050 3488 m
-1040 3478 l
-1035 3468 l
-1035 3453 l
-1040 3443 l
-1050 3433 l
-1065 3428 l
-1075 3428 l
-1090 3433 l
-1100 3443 l
-1105 3453 l
-1105 3468 l
-1100 3478 l
-1090 3488 l
-S
-1000 3533 m
-1085 3533 l
-1100 3538 l
-1105 3548 l
-1105 3558 l
-S
-1035 3518 m
-1035 3553 l
-S
-1065 3583 m
-1065 3643 l
-1055 3643 l
-1045 3638 l
-1040 3633 l
-1035 3623 l
-1035 3608 l
-1040 3598 l
-1050 3588 l
-1065 3583 l
-1075 3583 l
-1090 3588 l
-1100 3598 l
-1105 3608 l
-1105 3623 l
-1100 3633 l
-1090 3643 l
-S
-1050 3729 m
-1040 3724 l
-1035 3709 l
-1035 3694 l
-1040 3679 l
-1050 3674 l
-1060 3679 l
-1065 3689 l
-1070 3714 l
-1075 3724 l
-1085 3729 l
-1090 3729 l
-1100 3724 l
-1105 3709 l
-1105 3694 l
-1100 3679 l
-1090 3674 l
-S
-1035 3769 m
-1040 3764 l
-1045 3769 l
-1040 3774 l
-1035 3769 l
-S
-1100 3774 m
-1105 3769 l
-1100 3764 l
-1095 3769 l
-1100 3774 l
-1110 3774 l
-1120 3769 l
-1125 3764 l
-S
-1035 3894 m
-1105 3894 l
-S
-1055 3894 m
-1040 3909 l
-1035 3919 l
-1035 3934 l
-1040 3944 l
-1055 3949 l
-1105 3949 l
-S
-1055 3949 m
-1040 3964 l
-1035 3974 l
-1035 3989 l
-1040 3999 l
-1055 4004 l
-1105 4004 l
-S
-1065 4039 m
-1065 4100 l
-1055 4100 l
-1045 4095 l
-1040 4090 l
-1035 4080 l
-1035 4065 l
-1040 4054 l
-1050 4044 l
-1065 4039 l
-1075 4039 l
-1090 4044 l
-1100 4054 l
-1105 4065 l
-1105 4080 l
-1100 4090 l
-1090 4100 l
-S
-1035 4190 m
-1105 4190 l
-S
-1050 4190 m
-1040 4180 l
-1035 4170 l
-1035 4155 l
-1040 4145 l
-1050 4135 l
-1065 4130 l
-1075 4130 l
-1090 4135 l
-1100 4145 l
-1105 4155 l
-1105 4170 l
-1100 4180 l
-1090 4190 l
-S
-1035 4230 m
-1105 4230 l
-S
-1055 4230 m
-1040 4245 l
-1035 4255 l
-1035 4270 l
-1040 4280 l
-1055 4285 l
-1105 4285 l
-S
-1065 4400 m
-1065 4460 l
-1055 4460 l
-1045 4455 l
-1040 4450 l
-1035 4440 l
-1035 4425 l
-1040 4415 l
-1050 4405 l
-1065 4400 l
-1075 4400 l
-1090 4405 l
-1100 4415 l
-1105 4425 l
-1105 4440 l
-1100 4450 l
-1090 4460 l
-S
-1035 4551 m
-1140 4551 l
-S
-1050 4551 m
-1040 4541 l
-1035 4531 l
-1035 4516 l
-1040 4506 l
-1050 4496 l
-1065 4491 l
-1075 4491 l
-1090 4496 l
-1100 4506 l
-1105 4516 l
-1105 4531 l
-1100 4541 l
-1090 4551 l
-S
-1035 4591 m
-1085 4591 l
-1100 4596 l
-1105 4606 l
-1105 4621 l
-1100 4631 l
-1085 4646 l
-S
-1035 4646 m
-1105 4646 l
-S
-1000 4681 m
-1005 4686 l
-1000 4691 l
-995 4686 l
-1000 4681 l
-S
-1035 4686 m
-1105 4686 l
-S
-1035 4726 m
-1105 4726 l
-S
-1055 4726 m
-1040 4741 l
-1035 4751 l
-1035 4766 l
-1040 4776 l
-1055 4781 l
-1105 4781 l
-S
-1035 4841 m
-1040 4831 l
-1050 4821 l
-1065 4816 l
-1075 4816 l
-1090 4821 l
-1100 4831 l
-1105 4841 l
-1105 4856 l
-1100 4866 l
-1090 4876 l
-1075 4881 l
-1065 4881 l
-1050 4876 l
-1040 4866 l
-1035 4856 l
-1035 4841 l
-S
-1035 4912 m
-1105 4967 l
-S
-1035 4967 m
-1105 4912 l
-S
-1000 5122 m
-1080 5122 l
-1095 5117 l
-1100 5112 l
-1105 5102 l
-1105 5092 l
-1100 5082 l
-1095 5077 l
-1080 5072 l
-1070 5072 l
-S
-1025 5162 m
-1020 5162 l
-1010 5167 l
-1005 5172 l
-1000 5182 l
-1000 5202 l
-1005 5212 l
-1010 5217 l
-1020 5222 l
-1030 5222 l
-1040 5217 l
-1055 5207 l
-1105 5157 l
-1105 5227 l
-S
-1000 5287 m
-1005 5272 l
-1020 5262 l
-1045 5257 l
-1060 5257 l
-1085 5262 l
-1100 5272 l
-1105 5287 l
-1105 5297 l
-1100 5313 l
-1085 5323 l
-1060 5328 l
-1045 5328 l
-1020 5323 l
-1005 5313 l
-1000 5297 l
-1000 5287 l
-S
-1000 5388 m
-1005 5373 l
-1020 5363 l
-1045 5358 l
-1060 5358 l
-1085 5363 l
-1100 5373 l
-1105 5388 l
-1105 5398 l
-1100 5413 l
-1085 5423 l
-1060 5428 l
-1045 5428 l
-1020 5423 l
-1005 5413 l
-1000 5398 l
-1000 5388 l
-S
-1000 5488 m
-1005 5473 l
-1020 5463 l
-1045 5458 l
-1060 5458 l
-1085 5463 l
-1100 5473 l
-1105 5488 l
-1105 5498 l
-1100 5513 l
-1085 5523 l
-1060 5528 l
-1045 5528 l
-1020 5523 l
-1005 5513 l
-1000 5498 l
-1000 5488 l
-S
-1095 5568 m
-1100 5563 l
-1105 5568 l
-1100 5573 l
-1095 5568 l
-S
-1000 5638 m
-1005 5623 l
-1020 5613 l
-1045 5608 l
-1060 5608 l
-1085 5613 l
-1100 5623 l
-1105 5638 l
-1105 5648 l
-1100 5663 l
-1085 5673 l
-1060 5678 l
-1045 5678 l
-1020 5673 l
-1005 5663 l
-1000 5648 l
-1000 5638 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/gridplot_bw.eps b/ast-5.3-1/sun210_figures/gridplot_bw.eps
deleted file mode 100644
index f2a2dea..0000000
--- a/ast-5.3-1/sun210_figures/gridplot_bw.eps
+++ /dev/null
@@ -1,16724 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 97 220 409 571
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:41:51
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2984 3317 l
-2985 3318 l
-2986 3319 l
-2987 3319 l
-2988 3320 l
-2990 3320 l
-2991 3321 l
-3005 3329 l
-3020 3338 l
-3034 3347 l
-3049 3356 l
-3063 3365 l
-3077 3375 l
-3091 3385 l
-3105 3395 l
-3118 3405 l
-3132 3415 l
-3145 3426 l
-3158 3436 l
-3171 3447 l
-3184 3459 l
-3197 3470 l
-3209 3482 l
-3222 3493 l
-3234 3505 l
-3246 3517 l
-3257 3530 l
-3269 3542 l
-3280 3555 l
-3291 3568 l
-3302 3581 l
-3313 3594 l
-3324 3607 l
-3334 3621 l
-3344 3634 l
-3354 3648 l
-3364 3662 l
-3373 3676 l
-3382 3691 l
-3391 3705 l
-3400 3720 l
-3409 3735 l
-3417 3750 l
-3425 3765 l
-3433 3780 l
-3441 3795 l
-3448 3810 l
-3455 3826 l
-3462 3842 l
-3469 3858 l
-3475 3873 l
-3481 3890 l
-3487 3906 l
-3492 3922 l
-3497 3938 l
-3502 3955 l
-3507 3971 l
-3512 3988 l
-3516 4005 l
-3519 4022 l
-3523 4039 l
-3526 4056 l
-3529 4073 l
-3532 4090 l
-3534 4107 l
-3536 4125 l
-3538 4142 l
-3539 4159 l
-3540 4177 l
-3541 4194 l
-3541 4212 l
-3541 4230 l
-3541 4247 l
-3541 4265 l
-3540 4283 l
-3538 4301 l
-3537 4318 l
-3535 4336 l
-3532 4354 l
-3529 4372 l
-3526 4390 l
-3523 4407 l
-3519 4425 l
-3515 4443 l
-3510 4461 l
-3505 4479 l
-3500 4496 l
-3494 4514 l
-3488 4531 l
-3481 4549 l
-3474 4567 l
-3467 4584 l
-3459 4601 l
-3451 4618 l
-3442 4636 l
-3433 4653 l
-3423 4670 l
-3413 4686 l
-3403 4703 l
-3392 4720 l
-3381 4736 l
-3369 4752 l
-3357 4768 l
-3344 4784 l
-3331 4800 l
-3318 4815 l
-3304 4831 l
-3289 4846 l
-3274 4860 l
-3259 4875 l
-3243 4889 l
-3227 4903 l
-3210 4917 l
-3193 4931 l
-3175 4944 l
-3157 4956 l
-3138 4969 l
-3119 4981 l
-3100 4993 l
-3080 5004 l
-3059 5015 l
-3038 5025 l
-3017 5035 l
-2995 5045 l
-2973 5054 l
-2951 5063 l
-2928 5071 l
-2904 5078 l
-2880 5085 l
-2856 5092 l
-2832 5098 l
-2807 5103 l
-2782 5108 l
-2756 5112 l
-2730 5115 l
-2704 5118 l
-2678 5120 l
-2651 5121 l
-2624 5122 l
-2597 5122 l
-2569 5121 l
-2542 5120 l
-2514 5117 l
-2487 5114 l
-2459 5110 l
-2431 5106 l
-2403 5100 l
-2375 5094 l
-2347 5087 l
-2319 5079 l
-2292 5071 l
-2264 5061 l
-2237 5051 l
-2235 5050 l
-2233 5050 l
-2231 5049 l
-2229 5048 l
-2227 5047 l
-2225 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2983 3318 l
-2983 3319 l
-2983 3320 l
-2984 3321 l
-2984 3322 l
-2984 3323 l
-2984 3324 l
-2985 3337 l
-2986 3351 l
-2987 3364 l
-2988 3378 l
-2989 3392 l
-2990 3406 l
-2991 3420 l
-2991 3434 l
-2992 3448 l
-2992 3462 l
-2992 3476 l
-2992 3490 l
-2992 3504 l
-2992 3518 l
-2992 3533 l
-2992 3547 l
-2992 3561 l
-2991 3576 l
-2991 3590 l
-2990 3605 l
-2989 3619 l
-2988 3634 l
-2988 3648 l
-2986 3663 l
-2985 3678 l
-2984 3692 l
-2983 3707 l
-2982 3722 l
-2980 3736 l
-2978 3751 l
-2977 3766 l
-2975 3780 l
-2973 3795 l
-2971 3810 l
-2969 3825 l
-2967 3839 l
-2965 3854 l
-2963 3869 l
-2961 3884 l
-2958 3899 l
-2956 3913 l
-2953 3928 l
-2950 3943 l
-2948 3958 l
-2945 3972 l
-2942 3987 l
-2939 4002 l
-2936 4016 l
-2933 4031 l
-2929 4046 l
-2926 4060 l
-2923 4075 l
-2919 4089 l
-2916 4104 l
-2912 4119 l
-2908 4133 l
-2904 4147 l
-2900 4162 l
-2897 4176 l
-2893 4191 l
-2888 4205 l
-2884 4219 l
-2880 4233 l
-2876 4247 l
-2871 4262 l
-2867 4276 l
-2862 4290 l
-2858 4304 l
-2853 4317 l
-2848 4331 l
-2843 4345 l
-2838 4359 l
-2833 4372 l
-2828 4386 l
-2823 4400 l
-2818 4413 l
-2812 4426 l
-2807 4440 l
-2802 4453 l
-2796 4466 l
-2790 4479 l
-2785 4492 l
-2779 4505 l
-2773 4518 l
-2767 4531 l
-2761 4543 l
-2755 4556 l
-2749 4568 l
-2743 4581 l
-2737 4593 l
-2730 4605 l
-2724 4617 l
-2717 4629 l
-2711 4641 l
-2704 4653 l
-2697 4664 l
-2691 4676 l
-2684 4687 l
-2677 4699 l
-2670 4710 l
-2662 4721 l
-2655 4732 l
-2648 4743 l
-2641 4753 l
-2633 4764 l
-2626 4774 l
-2618 4785 l
-2610 4795 l
-2602 4805 l
-2594 4815 l
-2586 4825 l
-2578 4834 l
-2570 4844 l
-2562 4853 l
-2554 4862 l
-2545 4871 l
-2537 4880 l
-2528 4888 l
-2519 4897 l
-2510 4905 l
-2501 4913 l
-2492 4921 l
-2483 4929 l
-2474 4937 l
-2464 4944 l
-2455 4951 l
-2445 4958 l
-2435 4965 l
-2425 4972 l
-2415 4978 l
-2405 4984 l
-2394 4990 l
-2384 4996 l
-2373 5001 l
-2362 5006 l
-2351 5011 l
-2340 5016 l
-2328 5020 l
-2317 5025 l
-2305 5028 l
-2293 5032 l
-2281 5035 l
-2268 5038 l
-2256 5041 l
-2243 5043 l
-2230 5045 l
-2229 5045 l
-2228 5045 l
-2227 5045 l
-2226 5045 l
-2225 5045 l
-2224 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2982 3317 l
-2981 3318 l
-2980 3318 l
-2979 3318 l
-2978 3319 l
-2977 3319 l
-2976 3320 l
-2963 3325 l
-2950 3331 l
-2936 3336 l
-2923 3342 l
-2910 3348 l
-2896 3355 l
-2883 3361 l
-2870 3368 l
-2857 3374 l
-2844 3381 l
-2831 3388 l
-2818 3396 l
-2805 3403 l
-2792 3410 l
-2779 3418 l
-2766 3426 l
-2754 3434 l
-2741 3442 l
-2728 3450 l
-2716 3458 l
-2703 3467 l
-2691 3475 l
-2678 3484 l
-2666 3493 l
-2654 3502 l
-2642 3511 l
-2630 3520 l
-2618 3529 l
-2606 3539 l
-2594 3548 l
-2582 3558 l
-2570 3567 l
-2559 3577 l
-2547 3587 l
-2535 3597 l
-2524 3608 l
-2513 3618 l
-2501 3628 l
-2490 3639 l
-2479 3649 l
-2468 3660 l
-2457 3671 l
-2446 3682 l
-2436 3693 l
-2425 3704 l
-2415 3715 l
-2404 3726 l
-2394 3737 l
-2384 3749 l
-2373 3760 l
-2363 3772 l
-2353 3783 l
-2344 3795 l
-2334 3807 l
-2324 3819 l
-2315 3831 l
-2305 3843 l
-2296 3855 l
-2287 3867 l
-2278 3879 l
-2269 3892 l
-2260 3904 l
-2252 3916 l
-2243 3929 l
-2235 3942 l
-2226 3954 l
-2218 3967 l
-2210 3980 l
-2202 3992 l
-2194 4005 l
-2187 4018 l
-2179 4031 l
-2172 4044 l
-2165 4057 l
-2158 4070 l
-2151 4083 l
-2144 4096 l
-2137 4110 l
-2131 4123 l
-2125 4136 l
-2118 4150 l
-2112 4163 l
-2107 4176 l
-2101 4190 l
-2095 4203 l
-2090 4217 l
-2085 4231 l
-2080 4244 l
-2075 4258 l
-2070 4271 l
-2066 4285 l
-2062 4299 l
-2058 4312 l
-2054 4326 l
-2050 4340 l
-2046 4354 l
-2043 4368 l
-2040 4381 l
-2037 4395 l
-2034 4409 l
-2032 4423 l
-2029 4437 l
-2027 4451 l
-2025 4465 l
-2024 4479 l
-2022 4493 l
-2021 4507 l
-2020 4521 l
-2019 4535 l
-2019 4548 l
-2019 4562 l
-2019 4576 l
-2019 4590 l
-2019 4604 l
-2020 4618 l
-2021 4632 l
-2022 4646 l
-2024 4660 l
-2026 4674 l
-2028 4688 l
-2031 4702 l
-2033 4716 l
-2036 4730 l
-2040 4744 l
-2044 4758 l
-2048 4771 l
-2052 4785 l
-2057 4799 l
-2062 4813 l
-2068 4827 l
-2073 4840 l
-2080 4854 l
-2086 4868 l
-2094 4881 l
-2101 4895 l
-2109 4908 l
-2117 4922 l
-2126 4935 l
-2136 4949 l
-2146 4962 l
-2156 4975 l
-2167 4988 l
-2178 5001 l
-2190 5014 l
-2203 5027 l
-2216 5039 l
-2217 5040 l
-2218 5041 l
-2219 5042 l
-2220 5043 l
-2221 5044 l
-2222 5045 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2982 3316 l
-2981 3316 l
-2980 3315 l
-2979 3315 l
-2978 3314 l
-2977 3313 l
-2976 3313 l
-2961 3305 l
-2946 3297 l
-2930 3290 l
-2915 3282 l
-2899 3275 l
-2884 3268 l
-2868 3262 l
-2852 3256 l
-2836 3250 l
-2820 3244 l
-2804 3238 l
-2788 3233 l
-2772 3228 l
-2755 3223 l
-2739 3219 l
-2722 3214 l
-2706 3210 l
-2689 3207 l
-2672 3203 l
-2656 3200 l
-2639 3197 l
-2622 3194 l
-2605 3192 l
-2588 3190 l
-2571 3188 l
-2554 3187 l
-2537 3185 l
-2520 3185 l
-2502 3184 l
-2485 3184 l
-2468 3184 l
-2451 3184 l
-2433 3184 l
-2416 3185 l
-2399 3186 l
-2382 3188 l
-2364 3190 l
-2347 3192 l
-2330 3194 l
-2313 3197 l
-2295 3200 l
-2278 3203 l
-2261 3207 l
-2244 3211 l
-2227 3215 l
-2210 3220 l
-2193 3225 l
-2176 3231 l
-2159 3236 l
-2143 3242 l
-2126 3249 l
-2109 3255 l
-2093 3263 l
-2076 3270 l
-2060 3278 l
-2044 3286 l
-2028 3294 l
-2012 3303 l
-1996 3313 l
-1980 3322 l
-1965 3332 l
-1949 3342 l
-1934 3353 l
-1919 3364 l
-1904 3376 l
-1889 3388 l
-1875 3400 l
-1860 3412 l
-1846 3425 l
-1832 3439 l
-1818 3452 l
-1805 3466 l
-1792 3481 l
-1779 3496 l
-1766 3511 l
-1753 3527 l
-1741 3543 l
-1729 3559 l
-1718 3576 l
-1707 3593 l
-1696 3611 l
-1685 3629 l
-1675 3647 l
-1665 3666 l
-1655 3685 l
-1646 3704 l
-1638 3724 l
-1629 3744 l
-1621 3765 l
-1614 3786 l
-1607 3807 l
-1600 3828 l
-1594 3850 l
-1589 3873 l
-1584 3895 l
-1579 3918 l
-1576 3941 l
-1572 3965 l
-1569 3989 l
-1567 4013 l
-1566 4037 l
-1565 4061 l
-1564 4086 l
-1564 4111 l
-1565 4136 l
-1567 4162 l
-1569 4187 l
-1572 4213 l
-1576 4239 l
-1580 4265 l
-1585 4291 l
-1591 4317 l
-1598 4343 l
-1605 4369 l
-1613 4395 l
-1622 4421 l
-1632 4447 l
-1642 4473 l
-1653 4499 l
-1665 4524 l
-1678 4550 l
-1691 4575 l
-1705 4600 l
-1720 4625 l
-1736 4649 l
-1753 4673 l
-1770 4697 l
-1788 4720 l
-1806 4743 l
-1826 4765 l
-1846 4787 l
-1866 4808 l
-1888 4829 l
-1909 4849 l
-1932 4869 l
-1955 4888 l
-1978 4907 l
-2002 4924 l
-2027 4941 l
-2052 4958 l
-2077 4973 l
-2103 4988 l
-2129 5002 l
-2156 5016 l
-2182 5028 l
-2209 5040 l
-2211 5041 l
-2213 5042 l
-2215 5043 l
-2217 5043 l
-2219 5044 l
-2221 5045 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2983 3316 l
-2983 3315 l
-2983 3314 l
-2983 3313 l
-2983 3312 l
-2983 3311 l
-2982 3310 l
-2981 3297 l
-2979 3283 l
-2977 3270 l
-2976 3257 l
-2974 3244 l
-2971 3231 l
-2969 3218 l
-2967 3205 l
-2964 3192 l
-2962 3179 l
-2959 3167 l
-2956 3154 l
-2953 3142 l
-2950 3130 l
-2947 3117 l
-2943 3105 l
-2940 3093 l
-2936 3081 l
-2932 3069 l
-2928 3057 l
-2924 3046 l
-2920 3034 l
-2915 3023 l
-2911 3012 l
-2906 3000 l
-2901 2989 l
-2896 2978 l
-2890 2967 l
-2885 2957 l
-2879 2946 l
-2873 2936 l
-2867 2925 l
-2861 2915 l
-2855 2905 l
-2848 2895 l
-2841 2885 l
-2834 2876 l
-2827 2866 l
-2819 2857 l
-2811 2848 l
-2803 2839 l
-2795 2830 l
-2786 2821 l
-2778 2813 l
-2768 2804 l
-2759 2796 l
-2749 2788 l
-2739 2781 l
-2729 2773 l
-2718 2766 l
-2707 2759 l
-2695 2752 l
-2684 2745 l
-2671 2739 l
-2659 2733 l
-2645 2727 l
-2632 2722 l
-2618 2717 l
-2603 2712 l
-2588 2707 l
-2572 2703 l
-2556 2700 l
-2539 2696 l
-2521 2694 l
-2503 2691 l
-2483 2689 l
-2464 2688 l
-2443 2687 l
-2421 2687 l
-2399 2688 l
-2375 2690 l
-2351 2692 l
-2326 2695 l
-2299 2700 l
-2271 2705 l
-2242 2712 l
-2212 2720 l
-2180 2729 l
-2148 2741 l
-2113 2754 l
-2077 2769 l
-2040 2787 l
-2002 2807 l
-1962 2829 l
-1920 2855 l
-1878 2884 l
-1834 2917 l
-1831 2919 l
-1828 2922 l
-1825 2924 l
-1822 2927 l
-1819 2930 l
-1816 2932 l
-1812 2935 l
-1809 2937 l
-1806 2940 l
-1803 2943 l
-1800 2945 l
-1797 2948 l
-1793 2951 l
-1790 2954 l
-1787 2956 l
-1784 2959 l
-1781 2962 l
-1777 2965 l
-1774 2968 l
-1771 2971 l
-1768 2974 l
-1765 2976 l
-1761 2979 l
-1758 2982 l
-1755 2985 l
-1752 2988 l
-1749 2991 l
-1745 2994 l
-1742 2998 l
-1739 3001 l
-1736 3004 l
-1732 3007 l
-1729 3010 l
-1726 3013 l
-1723 3017 l
-1720 3020 l
-1716 3023 l
-1713 3026 l
-1710 3030 l
-1707 3033 l
-1703 3036 l
-1700 3040 l
-1697 3043 l
-1694 3047 l
-1691 3050 l
-1687 3054 l
-1684 3057 l
-1681 3061 l
-1678 3064 l
-1675 3068 l
-1671 3071 l
-1668 3075 l
-1665 3079 l
-1662 3082 l
-1659 3086 l
-1655 3090 l
-1652 3094 l
-1649 3097 l
-1646 3101 l
-1643 3105 l
-1640 3109 l
-1636 3113 l
-1633 3117 l
-1630 3121 l
-1627 3125 l
-1624 3129 l
-1621 3133 l
-1618 3137 l
-1614 3141 l
-1611 3145 l
-1608 3149 l
-1605 3153 l
-1602 3157 l
-1599 3161 l
-1596 3165 l
-1593 3170 l
-1590 3174 l
-1587 3178 l
-1584 3183 l
-1581 3187 l
-1578 3191 l
-1575 3196 l
-1572 3200 l
-1569 3204 l
-1566 3209 l
-1563 3213 l
-1560 3218 l
-1557 3222 l
-1554 3227 l
-1551 3231 l
-1548 3236 l
-1545 3241 l
-1542 3245 l
-1539 3250 l
-1536 3255 l
-1534 3259 l
-1531 3264 l
-1528 3269 l
-1525 3274 l
-1522 3279 l
-1519 3283 l
-1517 3288 l
-1514 3293 l
-S
-1514 3293 m
-1511 3298 l
-1508 3303 l
-1506 3308 l
-1503 3313 l
-1500 3318 l
-1498 3323 l
-1495 3328 l
-1492 3333 l
-1490 3338 l
-1487 3343 l
-1485 3348 l
-1482 3353 l
-1479 3359 l
-1477 3364 l
-1474 3369 l
-1472 3374 l
-1469 3379 l
-1467 3385 l
-1465 3390 l
-1462 3395 l
-1460 3401 l
-1457 3406 l
-1455 3411 l
-1453 3417 l
-1450 3422 l
-1448 3428 l
-1446 3433 l
-1443 3438 l
-1441 3444 l
-1439 3449 l
-1437 3455 l
-1435 3461 l
-1432 3466 l
-1430 3472 l
-1428 3477 l
-1426 3483 l
-1424 3488 l
-1422 3494 l
-1420 3500 l
-1418 3505 l
-1416 3511 l
-1414 3517 l
-1412 3522 l
-1410 3528 l
-1408 3534 l
-1407 3540 l
-1405 3545 l
-1403 3551 l
-1401 3557 l
-1399 3563 l
-1398 3569 l
-1396 3574 l
-1394 3580 l
-1393 3586 l
-1391 3592 l
-1390 3598 l
-1388 3604 l
-1386 3609 l
-1385 3615 l
-1383 3621 l
-1382 3627 l
-1381 3633 l
-1379 3639 l
-1378 3645 l
-1376 3651 l
-1375 3657 l
-1374 3663 l
-1373 3669 l
-1371 3675 l
-1370 3681 l
-1369 3687 l
-1368 3693 l
-1367 3699 l
-1365 3705 l
-1364 3711 l
-1363 3717 l
-1362 3723 l
-1361 3729 l
-1360 3735 l
-1359 3741 l
-1359 3747 l
-1358 3753 l
-1357 3759 l
-1356 3765 l
-1355 3771 l
-1354 3777 l
-1354 3783 l
-1353 3789 l
-1352 3795 l
-1352 3801 l
-1351 3807 l
-1350 3813 l
-1350 3819 l
-1349 3825 l
-1349 3831 l
-1348 3837 l
-1348 3843 l
-1347 3849 l
-1347 3855 l
-1347 3861 l
-1346 3867 l
-1346 3873 l
-1346 3879 l
-1345 3885 l
-1345 3891 l
-1345 3897 l
-1345 3902 l
-1345 3908 l
-1344 3914 l
-1344 3920 l
-1344 3926 l
-1344 3932 l
-1344 3938 l
-1344 3944 l
-1344 3950 l
-1344 3956 l
-1344 3961 l
-1344 3967 l
-1345 3973 l
-1345 3979 l
-1345 3985 l
-1345 3991 l
-1345 3996 l
-1346 4002 l
-1346 4008 l
-1346 4014 l
-1346 4019 l
-1347 4025 l
-1347 4031 l
-1348 4037 l
-1348 4042 l
-1348 4048 l
-1349 4054 l
-1349 4059 l
-1350 4065 l
-1350 4071 l
-1351 4076 l
-1352 4082 l
-1352 4087 l
-1353 4093 l
-1354 4098 l
-1354 4104 l
-1355 4109 l
-1356 4115 l
-1356 4120 l
-1357 4126 l
-1358 4131 l
-1359 4137 l
-1360 4142 l
-1360 4148 l
-1361 4153 l
-1362 4158 l
-1363 4164 l
-1364 4169 l
-1365 4174 l
-1366 4180 l
-1367 4185 l
-1368 4190 l
-1369 4195 l
-1370 4201 l
-1371 4206 l
-1372 4211 l
-1373 4216 l
-1374 4221 l
-1375 4226 l
-1377 4231 l
-1378 4236 l
-1379 4242 l
-1380 4247 l
-1381 4252 l
-1383 4257 l
-1384 4262 l
-1385 4267 l
-1386 4271 l
-1388 4276 l
-1389 4281 l
-1390 4286 l
-1392 4291 l
-1393 4296 l
-1394 4301 l
-1396 4305 l
-1397 4310 l
-1399 4315 l
-1400 4320 l
-1401 4324 l
-1403 4329 l
-1404 4334 l
-1406 4338 l
-1407 4343 l
-1409 4348 l
-1410 4352 l
-1412 4357 l
-1413 4361 l
-1415 4366 l
-1416 4370 l
-1418 4375 l
-1420 4379 l
-1421 4384 l
-1423 4388 l
-S
-1423 4388 m
-1424 4392 l
-1426 4397 l
-1428 4401 l
-1429 4406 l
-1431 4410 l
-1433 4414 l
-1434 4418 l
-1436 4423 l
-1438 4427 l
-1439 4431 l
-1441 4435 l
-1443 4439 l
-1445 4443 l
-1446 4448 l
-1448 4452 l
-1450 4456 l
-1452 4460 l
-1453 4464 l
-1455 4468 l
-1457 4472 l
-1483 4525 l
-1509 4575 l
-1537 4620 l
-1564 4662 l
-1592 4701 l
-1620 4736 l
-1647 4769 l
-1674 4798 l
-1701 4825 l
-1727 4850 l
-1753 4872 l
-1778 4893 l
-1802 4911 l
-1826 4928 l
-1849 4944 l
-1871 4958 l
-1893 4970 l
-1914 4981 l
-1935 4991 l
-1955 5001 l
-1975 5009 l
-1994 5016 l
-2012 5022 l
-2030 5028 l
-2048 5032 l
-2065 5037 l
-2082 5040 l
-2098 5043 l
-2114 5045 l
-2130 5047 l
-2145 5048 l
-2160 5048 l
-2174 5049 l
-2189 5048 l
-2203 5048 l
-2216 5046 l
-2217 5046 l
-2218 5046 l
-2219 5046 l
-2220 5046 l
-2221 5046 l
-2222 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2984 3316 l
-2985 3316 l
-2986 3316 l
-2987 3315 l
-2988 3315 l
-2989 3315 l
-2990 3314 l
-3003 3309 l
-3017 3304 l
-3030 3299 l
-3044 3295 l
-3058 3291 l
-3071 3286 l
-3085 3282 l
-3099 3279 l
-3113 3275 l
-3126 3272 l
-3140 3268 l
-3154 3265 l
-3168 3263 l
-3182 3260 l
-3195 3258 l
-3209 3255 l
-3223 3254 l
-3237 3252 l
-3251 3250 l
-3265 3249 l
-3279 3248 l
-3293 3247 l
-3307 3247 l
-3321 3247 l
-3335 3247 l
-3349 3247 l
-3363 3247 l
-3377 3248 l
-3391 3249 l
-3405 3251 l
-3419 3252 l
-3433 3254 l
-3447 3257 l
-3461 3259 l
-3475 3262 l
-3489 3265 l
-3502 3269 l
-3516 3273 l
-3530 3277 l
-3544 3281 l
-3558 3286 l
-3572 3292 l
-3586 3297 l
-3600 3304 l
-3614 3310 l
-3627 3317 l
-3641 3324 l
-3655 3332 l
-3668 3341 l
-3682 3349 l
-3695 3359 l
-3709 3368 l
-3722 3379 l
-3736 3389 l
-3749 3401 l
-3762 3413 l
-3775 3425 l
-3788 3438 l
-3801 3452 l
-3814 3467 l
-3826 3482 l
-3839 3498 l
-3851 3514 l
-3863 3532 l
-3875 3550 l
-3886 3569 l
-3897 3588 l
-3908 3609 l
-3919 3631 l
-3929 3653 l
-3939 3677 l
-3949 3701 l
-3958 3727 l
-3966 3753 l
-3974 3781 l
-3981 3809 l
-3988 3839 l
-3993 3870 l
-3998 3903 l
-4002 3936 l
-4005 3971 l
-4007 4006 l
-4007 4043 l
-4007 4082 l
-4005 4121 l
-4001 4161 l
-3996 4203 l
-3989 4245 l
-3980 4289 l
-3969 4333 l
-3957 4378 l
-3942 4423 l
-3925 4469 l
-3905 4515 l
-3884 4561 l
-3860 4607 l
-3834 4653 l
-3805 4698 l
-3774 4742 l
-3741 4785 l
-3706 4827 l
-3669 4868 l
-3631 4907 l
-3590 4944 l
-3549 4979 l
-3506 5012 l
-3462 5043 l
-3417 5072 l
-3372 5098 l
-3327 5122 l
-3281 5144 l
-3236 5163 l
-3190 5181 l
-3146 5196 l
-3101 5209 l
-3058 5220 l
-3015 5229 l
-2973 5236 l
-2932 5242 l
-2892 5246 l
-2854 5248 l
-2816 5249 l
-2779 5249 l
-2744 5247 l
-2710 5245 l
-2677 5241 l
-2645 5237 l
-2615 5232 l
-2585 5226 l
-2557 5219 l
-2529 5211 l
-2503 5203 l
-2478 5195 l
-2454 5186 l
-2430 5176 l
-2408 5167 l
-2387 5156 l
-2366 5146 l
-2346 5135 l
-2327 5124 l
-2309 5112 l
-2292 5101 l
-2276 5089 l
-2260 5077 l
-2245 5064 l
-2230 5052 l
-2229 5051 l
-2228 5050 l
-2227 5049 l
-2226 5048 l
-2225 5047 l
-2224 5047 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-3302 3581 m
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3301 3582 l
-3301 3582 l
-3300 3583 l
-3299 3584 l
-3299 3584 l
-3298 3585 l
-3298 3585 l
-3297 3586 l
-3297 3586 l
-3296 3587 l
-3295 3588 l
-3295 3588 l
-3294 3589 l
-3286 3596 l
-3277 3603 l
-3268 3610 l
-3259 3617 l
-3249 3623 l
-3239 3628 l
-3229 3634 l
-3218 3639 l
-3207 3643 l
-3196 3648 l
-3185 3651 l
-3174 3655 l
-3162 3658 l
-3150 3661 l
-3138 3663 l
-3126 3665 l
-3114 3666 l
-3101 3668 l
-3089 3669 l
-3076 3669 l
-3064 3669 l
-3051 3669 l
-3038 3669 l
-3025 3668 l
-3012 3666 l
-2999 3665 l
-2986 3663 l
-2974 3661 l
-2961 3658 l
-2948 3655 l
-2935 3652 l
-2922 3649 l
-2909 3645 l
-2897 3641 l
-2884 3636 l
-2872 3632 l
-2859 3627 l
-2847 3621 l
-2835 3616 l
-2823 3610 l
-2811 3604 l
-2799 3597 l
-2787 3591 l
-2776 3584 l
-2765 3577 l
-2754 3569 l
-2743 3562 l
-2733 3554 l
-2722 3546 l
-2712 3537 l
-2703 3529 l
-2693 3520 l
-2684 3511 l
-2675 3502 l
-2666 3493 l
-2658 3483 l
-2650 3473 l
-2642 3464 l
-2635 3454 l
-2628 3443 l
-2621 3433 l
-2615 3423 l
-2609 3412 l
-2604 3401 l
-2599 3391 l
-2594 3380 l
-2590 3369 l
-2586 3358 l
-2583 3347 l
-2580 3335 l
-2577 3324 l
-2575 3313 l
-2574 3302 l
-2573 3290 l
-2573 3279 l
-2573 3268 l
-2573 3256 l
-2574 3245 l
-2576 3234 l
-2578 3223 l
-2581 3212 l
-2584 3201 l
-2588 3190 l
-2592 3179 l
-2597 3169 l
-2603 3158 l
-2609 3148 l
-2616 3138 l
-2623 3128 l
-2631 3119 l
-2639 3110 l
-2648 3101 l
-2658 3092 l
-2668 3084 l
-2678 3076 l
-2689 3068 l
-2701 3061 l
-2713 3054 l
-2726 3048 l
-2739 3042 l
-2753 3036 l
-2767 3031 l
-2782 3027 l
-2796 3023 l
-2812 3020 l
-2828 3017 l
-2844 3014 l
-2860 3013 l
-2877 3012 l
-2894 3011 l
-2911 3012 l
-2928 3012 l
-2945 3014 l
-2963 3016 l
-2980 3019 l
-2998 3022 l
-3015 3026 l
-3033 3031 l
-3050 3036 l
-3067 3042 l
-3084 3049 l
-3101 3056 l
-3118 3064 l
-3134 3072 l
-3150 3081 l
-3165 3090 l
-3181 3100 l
-3195 3110 l
-3210 3121 l
-3223 3132 l
-3236 3144 l
-3249 3156 l
-3261 3168 l
-3273 3181 l
-3284 3193 l
-3294 3206 l
-3303 3220 l
-3312 3233 l
-3321 3247 l
-3328 3260 l
-3335 3274 l
-3342 3288 l
-3347 3302 l
-3352 3315 l
-3357 3329 l
-3360 3343 l
-3363 3356 l
-3366 3370 l
-3367 3383 l
-3369 3396 l
-3369 3409 l
-3369 3422 l
-3368 3435 l
-3367 3447 l
-3365 3459 l
-3362 3471 l
-3359 3482 l
-3356 3494 l
-3352 3505 l
-3347 3515 l
-3342 3526 l
-3337 3536 l
-3331 3545 l
-3324 3555 l
-3317 3564 l
-3310 3572 l
-3302 3581 l
-S
-3500 3947 m
-3500 3947 l
-3500 3947 l
-3500 3947 l
-3500 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3498 3948 l
-3496 3949 l
-3495 3950 l
-3494 3951 l
-3493 3951 l
-3492 3952 l
-3490 3953 l
-3489 3954 l
-3488 3954 l
-3487 3955 l
-3486 3956 l
-3484 3957 l
-3483 3957 l
-3466 3968 l
-3448 3977 l
-3430 3986 l
-3412 3994 l
-3393 4002 l
-3374 4008 l
-3354 4015 l
-3335 4020 l
-3315 4025 l
-3295 4030 l
-3275 4034 l
-3254 4037 l
-3234 4040 l
-3213 4042 l
-3192 4044 l
-3171 4045 l
-3149 4045 l
-3128 4045 l
-3107 4045 l
-3085 4044 l
-3064 4042 l
-3042 4041 l
-3021 4038 l
-2999 4035 l
-2977 4032 l
-2956 4028 l
-2934 4024 l
-2913 4019 l
-2891 4014 l
-2870 4008 l
-2848 4002 l
-2827 3996 l
-2806 3989 l
-2785 3981 l
-2764 3974 l
-2743 3966 l
-2722 3957 l
-2701 3948 l
-2681 3939 l
-2661 3929 l
-2641 3919 l
-2621 3909 l
-2601 3898 l
-2582 3887 l
-2563 3876 l
-2544 3864 l
-2526 3852 l
-2507 3839 l
-2489 3826 l
-2472 3813 l
-2454 3800 l
-2437 3786 l
-2421 3772 l
-2405 3758 l
-2389 3743 l
-2373 3728 l
-2358 3713 l
-2343 3697 l
-2329 3681 l
-2315 3665 l
-2302 3649 l
-2289 3632 l
-2277 3615 l
-2265 3598 l
-2254 3581 l
-2243 3563 l
-2233 3545 l
-2224 3527 l
-2215 3509 l
-2207 3490 l
-2199 3472 l
-2192 3453 l
-2186 3433 l
-2181 3414 l
-2176 3395 l
-2172 3375 l
-2169 3355 l
-2166 3335 l
-2165 3315 l
-2164 3295 l
-2164 3274 l
-2166 3254 l
-2168 3233 l
-2171 3213 l
-2175 3192 l
-2180 3172 l
-2186 3151 l
-2194 3130 l
-2202 3110 l
-2212 3089 l
-2223 3069 l
-2235 3049 l
-2249 3029 l
-2264 3009 l
-2280 2990 l
-2297 2971 l
-2316 2952 l
-2336 2934 l
-2358 2916 l
-2382 2899 l
-2406 2883 l
-2433 2867 l
-2461 2853 l
-2490 2839 l
-2521 2826 l
-2553 2814 l
-2586 2804 l
-2622 2795 l
-2658 2787 l
-2695 2781 l
-2734 2777 l
-2774 2774 l
-2814 2773 l
-2856 2775 l
-2898 2778 l
-2940 2783 l
-2983 2790 l
-3026 2799 l
-3068 2810 l
-3111 2824 l
-3153 2839 l
-3194 2856 l
-3234 2876 l
-3273 2897 l
-3312 2920 l
-3348 2944 l
-3383 2970 l
-3417 2997 l
-3449 3025 l
-3479 3054 l
-3507 3084 l
-3533 3115 l
-3557 3146 l
-3580 3178 l
-3600 3209 l
-3618 3241 l
-3634 3273 l
-3649 3305 l
-3662 3336 l
-3672 3368 l
-3681 3398 l
-3689 3429 l
-3695 3458 l
-3699 3487 l
-3701 3516 l
-3703 3544 l
-3703 3571 l
-3701 3597 l
-3699 3623 l
-3695 3647 l
-3690 3671 l
-3684 3694 l
-3677 3717 l
-3669 3738 l
-3661 3759 l
-3651 3779 l
-3640 3798 l
-3629 3816 l
-3617 3834 l
-3605 3851 l
-3591 3867 l
-3577 3882 l
-3563 3896 l
-3548 3910 l
-3532 3923 l
-3516 3935 l
-3500 3947 l
-S
-3529 4372 m
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3526 4373 l
-3525 4374 l
-3523 4374 l
-3521 4375 l
-3520 4375 l
-3518 4376 l
-3516 4376 l
-3515 4377 l
-3513 4377 l
-3511 4378 l
-3510 4378 l
-3508 4379 l
-3507 4380 l
-3483 4387 l
-3460 4393 l
-3436 4399 l
-3413 4404 l
-3389 4408 l
-3364 4412 l
-3340 4415 l
-3316 4418 l
-3291 4420 l
-3266 4421 l
-3241 4422 l
-3216 4423 l
-3191 4423 l
-3166 4422 l
-3140 4421 l
-3115 4420 l
-3090 4418 l
-3064 4415 l
-3038 4412 l
-3013 4409 l
-2987 4405 l
-2961 4401 l
-2936 4396 l
-2910 4391 l
-2884 4385 l
-2859 4379 l
-2833 4372 l
-2808 4366 l
-2782 4358 l
-2757 4351 l
-2731 4343 l
-2706 4334 l
-2681 4325 l
-2656 4316 l
-2631 4306 l
-2606 4297 l
-2581 4286 l
-2557 4276 l
-2532 4265 l
-2508 4253 l
-2484 4242 l
-2460 4229 l
-2436 4217 l
-2413 4204 l
-2390 4191 l
-2367 4178 l
-2344 4164 l
-2322 4150 l
-2299 4136 l
-2277 4121 l
-2256 4107 l
-2234 4091 l
-2213 4076 l
-2192 4060 l
-2172 4044 l
-2152 4028 l
-2132 4011 l
-2113 3994 l
-2094 3977 l
-2075 3959 l
-2057 3942 l
-2039 3923 l
-2022 3905 l
-2005 3887 l
-1989 3868 l
-1973 3849 l
-1957 3829 l
-1942 3809 l
-1928 3790 l
-1914 3769 l
-1901 3749 l
-1888 3728 l
-1876 3707 l
-1864 3686 l
-1853 3664 l
-1843 3642 l
-1833 3620 l
-1824 3598 l
-1816 3575 l
-1809 3552 l
-1802 3529 l
-1797 3505 l
-1792 3481 l
-1788 3457 l
-1785 3432 l
-1783 3407 l
-1782 3382 l
-1782 3356 l
-1783 3330 l
-1785 3304 l
-1789 3277 l
-1794 3250 l
-1800 3222 l
-1808 3194 l
-1818 3166 l
-1829 3137 l
-1842 3108 l
-1858 3079 l
-1875 3049 l
-1895 3019 l
-1917 2989 l
-1941 2958 l
-1969 2927 l
-2000 2896 l
-2034 2865 l
-2072 2835 l
-2114 2805 l
-2117 2803 l
-2120 2801 l
-2123 2798 l
-2127 2796 l
-2130 2794 l
-2133 2792 l
-2136 2790 l
-2140 2788 l
-2143 2786 l
-2146 2784 l
-2150 2782 l
-2153 2780 l
-2156 2778 l
-2160 2775 l
-2163 2773 l
-2167 2771 l
-2170 2769 l
-2174 2767 l
-2177 2765 l
-2181 2763 l
-2185 2761 l
-2188 2759 l
-2192 2757 l
-2195 2755 l
-2199 2753 l
-2203 2751 l
-2207 2749 l
-2210 2747 l
-2214 2745 l
-2218 2743 l
-2222 2741 l
-2226 2739 l
-2229 2737 l
-2233 2735 l
-2237 2734 l
-2241 2732 l
-2245 2730 l
-2249 2728 l
-2253 2726 l
-2257 2724 l
-2261 2722 l
-2265 2720 l
-2270 2718 l
-2274 2717 l
-2278 2715 l
-2282 2713 l
-2286 2711 l
-2291 2709 l
-2295 2708 l
-2299 2706 l
-2304 2704 l
-2308 2702 l
-2312 2700 l
-2317 2699 l
-2321 2697 l
-2326 2695 l
-2330 2694 l
-2335 2692 l
-2339 2690 l
-2344 2689 l
-2348 2687 l
-2353 2685 l
-2358 2684 l
-2362 2682 l
-2367 2681 l
-2372 2679 l
-S
-2372 2679 m
-2376 2677 l
-2381 2676 l
-2386 2674 l
-2391 2673 l
-2396 2671 l
-2400 2670 l
-2405 2668 l
-2410 2667 l
-2415 2666 l
-2420 2664 l
-2425 2663 l
-2430 2661 l
-2435 2660 l
-2440 2659 l
-2446 2657 l
-2451 2656 l
-2456 2655 l
-2461 2653 l
-2466 2652 l
-2472 2651 l
-2477 2650 l
-2482 2649 l
-2487 2647 l
-2493 2646 l
-2498 2645 l
-2504 2644 l
-2509 2643 l
-2514 2642 l
-2520 2641 l
-2525 2640 l
-2531 2639 l
-2537 2638 l
-2542 2637 l
-2548 2636 l
-2553 2635 l
-2559 2634 l
-2565 2633 l
-2570 2633 l
-2576 2632 l
-2582 2631 l
-2588 2630 l
-2593 2630 l
-2599 2629 l
-2605 2628 l
-2611 2627 l
-2617 2627 l
-2623 2626 l
-2629 2626 l
-2635 2625 l
-2641 2625 l
-2647 2624 l
-2653 2624 l
-2659 2623 l
-2665 2623 l
-2671 2623 l
-2677 2622 l
-2683 2622 l
-2689 2622 l
-2696 2621 l
-2702 2621 l
-2708 2621 l
-2714 2621 l
-2721 2621 l
-2727 2621 l
-2733 2621 l
-2739 2621 l
-2746 2621 l
-2752 2621 l
-2759 2621 l
-2765 2621 l
-2771 2621 l
-2778 2621 l
-2784 2621 l
-2791 2622 l
-2797 2622 l
-2804 2622 l
-2810 2623 l
-2817 2623 l
-2823 2623 l
-2830 2624 l
-2836 2624 l
-2843 2625 l
-2850 2625 l
-2856 2626 l
-2863 2627 l
-2869 2627 l
-2876 2628 l
-2883 2629 l
-2889 2630 l
-2896 2631 l
-2903 2631 l
-2909 2632 l
-2916 2633 l
-2923 2634 l
-2929 2635 l
-2936 2636 l
-2943 2637 l
-2950 2639 l
-2956 2640 l
-2963 2641 l
-2970 2642 l
-2977 2644 l
-2983 2645 l
-2990 2646 l
-2997 2648 l
-3004 2649 l
-3010 2651 l
-3017 2652 l
-3024 2654 l
-3031 2655 l
-3038 2657 l
-3044 2659 l
-3051 2660 l
-3058 2662 l
-3065 2664 l
-3071 2666 l
-3078 2668 l
-3085 2670 l
-3092 2672 l
-3098 2674 l
-3105 2676 l
-3112 2678 l
-3119 2680 l
-3125 2682 l
-3132 2684 l
-3139 2687 l
-3146 2689 l
-3152 2691 l
-3159 2694 l
-3166 2696 l
-3172 2698 l
-3179 2701 l
-3186 2703 l
-3192 2706 l
-3199 2709 l
-3205 2711 l
-3212 2714 l
-3219 2717 l
-3225 2719 l
-3232 2722 l
-3238 2725 l
-3245 2728 l
-3251 2731 l
-3258 2734 l
-3264 2737 l
-3271 2740 l
-3277 2743 l
-3284 2746 l
-3290 2749 l
-3296 2752 l
-3303 2755 l
-3309 2758 l
-3315 2762 l
-3322 2765 l
-3328 2768 l
-3334 2772 l
-3340 2775 l
-3347 2778 l
-3353 2782 l
-3359 2785 l
-3365 2789 l
-3371 2792 l
-3377 2796 l
-3383 2800 l
-3389 2803 l
-3395 2807 l
-3401 2811 l
-3407 2814 l
-3413 2818 l
-3419 2822 l
-3425 2826 l
-3431 2829 l
-3437 2833 l
-3442 2837 l
-3448 2841 l
-3454 2845 l
-3460 2849 l
-3465 2853 l
-3471 2857 l
-3476 2861 l
-3482 2865 l
-3488 2869 l
-3493 2873 l
-3499 2878 l
-3504 2882 l
-3509 2886 l
-3515 2890 l
-3520 2894 l
-3525 2899 l
-3531 2903 l
-3536 2907 l
-3541 2911 l
-3546 2916 l
-3551 2920 l
-3556 2925 l
-3562 2929 l
-3567 2933 l
-3572 2938 l
-3577 2942 l
-S
-3577 2942 m
-3581 2947 l
-3586 2951 l
-3591 2956 l
-3596 2960 l
-3601 2965 l
-3606 2969 l
-3610 2974 l
-3615 2978 l
-3620 2983 l
-3624 2987 l
-3629 2992 l
-3633 2996 l
-3638 3001 l
-3642 3006 l
-3647 3010 l
-3651 3015 l
-3655 3020 l
-3660 3024 l
-3664 3029 l
-3668 3034 l
-3672 3038 l
-3676 3043 l
-3681 3048 l
-3685 3052 l
-3689 3057 l
-3693 3062 l
-3697 3067 l
-3701 3071 l
-3705 3076 l
-3708 3081 l
-3712 3086 l
-3716 3090 l
-3720 3095 l
-3724 3100 l
-3727 3105 l
-3731 3109 l
-3734 3114 l
-3738 3119 l
-3742 3124 l
-3745 3128 l
-3749 3133 l
-3752 3138 l
-3755 3143 l
-3759 3147 l
-3762 3152 l
-3765 3157 l
-3769 3162 l
-3772 3166 l
-3775 3171 l
-3778 3176 l
-3781 3181 l
-3784 3185 l
-3787 3190 l
-3791 3195 l
-3793 3200 l
-3796 3204 l
-3799 3209 l
-3802 3214 l
-3805 3219 l
-3808 3223 l
-3811 3228 l
-3813 3233 l
-3816 3238 l
-3819 3242 l
-3821 3247 l
-3824 3252 l
-3827 3256 l
-3829 3261 l
-3832 3266 l
-3834 3270 l
-3837 3275 l
-3839 3280 l
-3842 3284 l
-3844 3289 l
-3846 3294 l
-3849 3298 l
-3851 3303 l
-3853 3307 l
-3855 3312 l
-3858 3317 l
-3860 3321 l
-3862 3326 l
-3864 3330 l
-3866 3335 l
-3868 3339 l
-3870 3344 l
-3872 3348 l
-3874 3353 l
-3876 3358 l
-3878 3362 l
-3880 3366 l
-3882 3371 l
-3883 3375 l
-3885 3380 l
-3887 3384 l
-3889 3389 l
-3890 3393 l
-3892 3398 l
-3894 3402 l
-3895 3406 l
-3897 3411 l
-3899 3415 l
-3900 3419 l
-3902 3424 l
-3903 3428 l
-3905 3432 l
-3906 3437 l
-3907 3441 l
-3909 3445 l
-3910 3450 l
-3912 3454 l
-3913 3458 l
-3914 3462 l
-3916 3467 l
-3917 3471 l
-3918 3475 l
-3919 3479 l
-3920 3483 l
-3922 3488 l
-3923 3492 l
-3924 3496 l
-3925 3500 l
-3926 3504 l
-3927 3508 l
-3928 3512 l
-3929 3516 l
-3930 3520 l
-3931 3524 l
-3932 3528 l
-3933 3532 l
-3934 3536 l
-3935 3540 l
-3936 3544 l
-3937 3548 l
-3938 3552 l
-3938 3556 l
-3939 3560 l
-3940 3564 l
-3941 3568 l
-3941 3572 l
-3942 3576 l
-3950 3629 l
-3956 3679 l
-3958 3727 l
-3957 3772 l
-3955 3815 l
-3950 3855 l
-3944 3893 l
-3936 3930 l
-3926 3964 l
-3916 3996 l
-3904 4027 l
-3891 4055 l
-3877 4083 l
-3863 4108 l
-3847 4133 l
-3831 4156 l
-3814 4177 l
-3797 4197 l
-3779 4217 l
-3760 4235 l
-3741 4252 l
-3722 4268 l
-3702 4283 l
-3681 4297 l
-3661 4310 l
-3640 4322 l
-3618 4334 l
-3596 4344 l
-3574 4354 l
-3552 4363 l
-3529 4372 l
-S
-3338 4792 m
-3338 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3336 4792 l
-3336 4792 l
-3336 4792 l
-3335 4792 l
-3333 4792 l
-3332 4792 l
-3330 4792 l
-3329 4792 l
-3327 4792 l
-3326 4792 l
-3324 4792 l
-3323 4792 l
-3321 4792 l
-3320 4792 l
-3318 4792 l
-3316 4792 l
-3295 4792 l
-3273 4791 l
-3251 4790 l
-3229 4789 l
-3207 4787 l
-3185 4786 l
-3162 4783 l
-3139 4781 l
-3116 4778 l
-3093 4775 l
-3070 4772 l
-3047 4769 l
-3023 4765 l
-3000 4761 l
-2976 4756 l
-2952 4751 l
-2928 4746 l
-2904 4741 l
-2880 4736 l
-2856 4730 l
-2832 4724 l
-2808 4717 l
-2784 4711 l
-2760 4704 l
-2736 4697 l
-2711 4689 l
-2687 4682 l
-2663 4674 l
-2639 4665 l
-2614 4657 l
-2590 4648 l
-2566 4639 l
-2542 4630 l
-2518 4621 l
-2494 4611 l
-2470 4601 l
-2446 4591 l
-2423 4581 l
-2399 4570 l
-2376 4560 l
-2352 4549 l
-2329 4537 l
-2306 4526 l
-2283 4514 l
-2260 4503 l
-2237 4491 l
-2215 4478 l
-2192 4466 l
-2170 4453 l
-2148 4441 l
-2126 4428 l
-2105 4415 l
-2083 4401 l
-2062 4388 l
-2041 4375 l
-2021 4361 l
-2000 4347 l
-1980 4333 l
-1960 4319 l
-1940 4305 l
-1921 4290 l
-1902 4276 l
-1883 4261 l
-1864 4246 l
-1846 4232 l
-1828 4217 l
-1810 4202 l
-1793 4187 l
-1776 4171 l
-1759 4156 l
-1743 4141 l
-1727 4125 l
-1711 4110 l
-1696 4094 l
-1681 4079 l
-1666 4063 l
-1652 4048 l
-1638 4032 l
-1624 4016 l
-1611 4000 l
-1598 3985 l
-1586 3969 l
-1574 3953 l
-1562 3937 l
-1551 3921 l
-1540 3906 l
-1530 3890 l
-1520 3874 l
-1510 3858 l
-1501 3843 l
-1492 3827 l
-1484 3811 l
-1476 3796 l
-1469 3780 l
-1462 3765 l
-1455 3749 l
-1449 3734 l
-1443 3719 l
-1438 3703 l
-1433 3688 l
-1429 3673 l
-1425 3658 l
-1421 3643 l
-1418 3629 l
-1416 3614 l
-1414 3599 l
-1412 3585 l
-1411 3571 l
-1410 3556 l
-1410 3542 l
-1410 3528 l
-1411 3514 l
-1412 3500 l
-1414 3486 l
-1416 3473 l
-1419 3459 l
-1422 3444 l
-1427 3430 l
-1432 3414 l
-1439 3395 l
-1440 3393 l
-1441 3391 l
-1441 3389 l
-1442 3388 l
-1443 3386 l
-1444 3383 l
-1445 3381 l
-1446 3379 l
-1447 3376 l
-1448 3373 l
-1450 3370 l
-1451 3367 l
-1453 3363 l
-1455 3359 l
-1457 3354 l
-1460 3348 l
-1463 3341 l
-1468 3333 l
-1473 3322 l
-1480 3308 l
-1491 3289 l
-1507 3259 l
-1509 3256 l
-1510 3254 l
-1512 3251 l
-1514 3248 l
-1515 3245 l
-1517 3241 l
-1519 3238 l
-1522 3234 l
-1524 3231 l
-1526 3227 l
-1529 3223 l
-1531 3219 l
-1534 3214 l
-1537 3210 l
-1540 3205 l
-1543 3200 l
-1547 3194 l
-1551 3188 l
-1555 3182 l
-1559 3176 l
-1564 3169 l
-1568 3162 l
-1574 3154 l
-1580 3146 l
-1586 3138 l
-1593 3128 l
-1600 3118 l
-1608 3108 l
-1617 3096 l
-1627 3084 l
-1638 3070 l
-S
-1638 3070 m
-1650 3056 l
-1664 3040 l
-1679 3023 l
-1696 3004 l
-1716 2983 l
-1739 2960 l
-1765 2935 l
-1796 2908 l
-1832 2877 l
-1875 2844 l
-1926 2807 l
-1930 2804 l
-1934 2801 l
-1939 2798 l
-1943 2796 l
-1947 2793 l
-1952 2790 l
-1956 2787 l
-1960 2784 l
-1965 2781 l
-1970 2778 l
-1974 2775 l
-1979 2773 l
-1984 2770 l
-1989 2767 l
-1994 2764 l
-1999 2761 l
-2004 2758 l
-2009 2755 l
-2014 2752 l
-2020 2748 l
-2025 2745 l
-2030 2742 l
-2036 2739 l
-2042 2736 l
-2047 2733 l
-2053 2730 l
-2059 2727 l
-2065 2724 l
-2071 2720 l
-2077 2717 l
-2084 2714 l
-2090 2711 l
-2096 2708 l
-2103 2705 l
-2110 2701 l
-2116 2698 l
-2123 2695 l
-2130 2692 l
-2137 2689 l
-2144 2685 l
-2152 2682 l
-2159 2679 l
-2166 2676 l
-2174 2673 l
-2182 2669 l
-2190 2666 l
-2198 2663 l
-2206 2660 l
-2214 2657 l
-2222 2654 l
-2231 2651 l
-2239 2647 l
-2248 2644 l
-2257 2641 l
-2266 2638 l
-2275 2635 l
-2284 2632 l
-2293 2629 l
-2303 2626 l
-2312 2623 l
-2322 2621 l
-2332 2618 l
-2342 2615 l
-2353 2612 l
-2363 2610 l
-2373 2607 l
-2384 2604 l
-2395 2602 l
-2406 2599 l
-2417 2597 l
-2428 2595 l
-2440 2592 l
-2451 2590 l
-2463 2588 l
-2475 2586 l
-2487 2584 l
-2499 2582 l
-2512 2580 l
-2524 2578 l
-2537 2577 l
-2550 2575 l
-2563 2574 l
-2576 2573 l
-2589 2571 l
-2602 2570 l
-2616 2569 l
-2630 2569 l
-2644 2568 l
-2658 2567 l
-2672 2567 l
-2686 2567 l
-2701 2567 l
-2715 2567 l
-2730 2567 l
-2745 2567 l
-2760 2568 l
-2775 2568 l
-2790 2569 l
-2806 2570 l
-2821 2571 l
-2837 2573 l
-2852 2574 l
-2868 2576 l
-2884 2578 l
-2900 2580 l
-2916 2583 l
-2932 2585 l
-2948 2588 l
-2964 2591 l
-2980 2594 l
-2997 2598 l
-3013 2601 l
-3029 2605 l
-3046 2609 l
-3062 2613 l
-3078 2618 l
-3095 2623 l
-3111 2628 l
-3128 2633 l
-3144 2638 l
-3160 2644 l
-3177 2649 l
-3193 2655 l
-3209 2662 l
-3225 2668 l
-3241 2675 l
-3257 2682 l
-3273 2689 l
-3289 2696 l
-3305 2703 l
-3320 2711 l
-3336 2719 l
-3351 2727 l
-3366 2735 l
-3381 2743 l
-3396 2752 l
-3411 2760 l
-3426 2769 l
-3440 2778 l
-3455 2787 l
-3469 2797 l
-3483 2806 l
-3497 2815 l
-3510 2825 l
-3524 2835 l
-3537 2845 l
-3550 2855 l
-3563 2865 l
-3575 2875 l
-3588 2885 l
-3600 2895 l
-3612 2906 l
-3624 2916 l
-3636 2927 l
-3647 2937 l
-3658 2948 l
-3670 2958 l
-3680 2969 l
-3691 2980 l
-3701 2990 l
-3712 3001 l
-3722 3012 l
-3731 3023 l
-3741 3033 l
-3750 3044 l
-3760 3055 l
-3769 3066 l
-3777 3076 l
-3786 3087 l
-3794 3098 l
-3803 3108 l
-3811 3119 l
-3818 3129 l
-3826 3140 l
-3834 3150 l
-3841 3161 l
-3848 3171 l
-3855 3181 l
-3862 3192 l
-3868 3202 l
-3875 3212 l
-3881 3222 l
-3887 3232 l
-3893 3242 l
-3899 3252 l
-3905 3262 l
-3910 3271 l
-3916 3281 l
-S
-3916 3281 m
-3921 3291 l
-3926 3300 l
-3931 3309 l
-3936 3319 l
-3940 3328 l
-3945 3337 l
-3949 3346 l
-3954 3355 l
-3958 3364 l
-3962 3373 l
-3966 3382 l
-3970 3391 l
-3974 3399 l
-3977 3408 l
-3981 3416 l
-3984 3425 l
-3988 3433 l
-3991 3441 l
-3994 3449 l
-3997 3457 l
-4000 3465 l
-4003 3473 l
-4006 3481 l
-4009 3489 l
-4012 3496 l
-4014 3504 l
-4017 3512 l
-4019 3519 l
-4022 3526 l
-4024 3533 l
-4026 3541 l
-4028 3548 l
-4030 3555 l
-4032 3562 l
-4034 3569 l
-4036 3575 l
-4038 3582 l
-4040 3589 l
-4042 3595 l
-4043 3602 l
-4045 3608 l
-4047 3615 l
-4048 3621 l
-4050 3627 l
-4051 3633 l
-4053 3639 l
-4054 3645 l
-4055 3651 l
-4057 3657 l
-4058 3663 l
-4059 3669 l
-4060 3675 l
-4061 3680 l
-4062 3686 l
-4064 3691 l
-4065 3697 l
-4066 3702 l
-4066 3707 l
-4067 3713 l
-4068 3718 l
-4069 3723 l
-4070 3728 l
-4071 3733 l
-4072 3738 l
-4072 3743 l
-4073 3748 l
-4074 3753 l
-4074 3758 l
-4075 3762 l
-4076 3767 l
-4076 3772 l
-4077 3776 l
-4078 3781 l
-4078 3785 l
-4079 3790 l
-4079 3794 l
-4080 3799 l
-4080 3803 l
-4085 3859 l
-4087 3907 l
-4088 3949 l
-4087 3987 l
-4086 4019 l
-4084 4049 l
-4082 4075 l
-4080 4098 l
-4077 4119 l
-4075 4138 l
-4072 4156 l
-4070 4172 l
-4067 4186 l
-4065 4199 l
-4063 4212 l
-4060 4223 l
-4058 4234 l
-4056 4244 l
-4054 4253 l
-4052 4262 l
-4050 4270 l
-4048 4277 l
-4047 4284 l
-4028 4352 l
-4016 4390 l
-4008 4413 l
-4002 4429 l
-3997 4441 l
-3994 4451 l
-3991 4458 l
-3988 4465 l
-3986 4470 l
-3984 4474 l
-3982 4478 l
-3981 4482 l
-3980 4485 l
-3978 4488 l
-3977 4491 l
-3976 4493 l
-3975 4495 l
-3974 4498 l
-3973 4500 l
-3972 4501 l
-3971 4503 l
-3971 4505 l
-3970 4507 l
-3969 4508 l
-3968 4510 l
-3968 4511 l
-3967 4513 l
-3966 4514 l
-3966 4515 l
-3965 4517 l
-3964 4518 l
-3964 4519 l
-3963 4521 l
-3962 4522 l
-3962 4523 l
-3961 4524 l
-3960 4525 l
-3960 4526 l
-3959 4528 l
-3959 4529 l
-3958 4530 l
-3958 4531 l
-3950 4545 l
-3942 4557 l
-3933 4569 l
-3925 4580 l
-3916 4591 l
-3907 4602 l
-3897 4612 l
-3887 4622 l
-3877 4632 l
-3866 4641 l
-3855 4650 l
-3844 4659 l
-3832 4667 l
-3820 4675 l
-3807 4683 l
-3794 4691 l
-3780 4698 l
-3767 4706 l
-3752 4712 l
-3738 4719 l
-3723 4725 l
-3708 4731 l
-3692 4737 l
-3676 4743 l
-3660 4748 l
-3643 4753 l
-3627 4757 l
-3609 4762 l
-3592 4766 l
-3574 4770 l
-3556 4773 l
-3537 4776 l
-3518 4779 l
-3499 4782 l
-3480 4784 l
-3461 4786 l
-3441 4788 l
-3421 4789 l
-3400 4790 l
-3380 4791 l
-3359 4792 l
-3338 4792 l
-S
-2880 5085 m
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2879 5085 l
-2878 5084 l
-2878 5084 l
-2877 5083 l
-2876 5083 l
-2876 5083 l
-2875 5082 l
-2874 5082 l
-2874 5082 l
-2873 5081 l
-2872 5081 l
-2871 5080 l
-2871 5080 l
-2861 5075 l
-2850 5069 l
-2839 5064 l
-2828 5059 l
-2816 5053 l
-2804 5048 l
-2791 5043 l
-2778 5037 l
-2765 5031 l
-2752 5026 l
-2738 5020 l
-2724 5015 l
-2710 5009 l
-2696 5003 l
-2681 4997 l
-2666 4991 l
-2651 4985 l
-2636 4979 l
-2620 4973 l
-2605 4967 l
-2589 4960 l
-2573 4954 l
-2557 4948 l
-2541 4941 l
-2525 4935 l
-2509 4928 l
-2492 4921 l
-2476 4915 l
-2459 4908 l
-2442 4901 l
-2426 4894 l
-2409 4887 l
-2392 4880 l
-2376 4873 l
-2359 4865 l
-2342 4858 l
-2325 4851 l
-2309 4843 l
-2292 4836 l
-2275 4829 l
-2259 4821 l
-2242 4814 l
-2225 4806 l
-2209 4799 l
-2192 4791 l
-2176 4784 l
-2160 4776 l
-2144 4768 l
-2127 4761 l
-2111 4753 l
-2096 4746 l
-2080 4738 l
-2064 4731 l
-2049 4723 l
-2033 4716 l
-2018 4709 l
-2003 4701 l
-1988 4694 l
-1973 4687 l
-1959 4680 l
-1945 4673 l
-1930 4666 l
-1916 4660 l
-1903 4653 l
-1889 4647 l
-1876 4641 l
-1863 4635 l
-1850 4629 l
-1837 4623 l
-1825 4618 l
-1813 4612 l
-1801 4607 l
-1789 4603 l
-1778 4598 l
-1767 4594 l
-1756 4590 l
-1746 4587 l
-1736 4584 l
-1726 4581 l
-1717 4579 l
-1708 4577 l
-1699 4576 l
-1691 4575 l
-1683 4575 l
-1676 4575 l
-1669 4575 l
-1663 4577 l
-1657 4579 l
-1652 4582 l
-1647 4585 l
-1643 4589 l
-1639 4594 l
-1636 4600 l
-1634 4607 l
-1633 4615 l
-1632 4624 l
-1633 4633 l
-1634 4644 l
-1636 4656 l
-1640 4669 l
-1644 4683 l
-1650 4699 l
-1657 4716 l
-1666 4734 l
-1676 4753 l
-1688 4773 l
-1702 4795 l
-1718 4818 l
-1735 4842 l
-1755 4867 l
-1778 4893 l
-1802 4919 l
-1829 4947 l
-1859 4974 l
-1891 5002 l
-1925 5029 l
-1962 5056 l
-2001 5083 l
-2043 5108 l
-2085 5132 l
-2130 5155 l
-2175 5175 l
-2222 5194 l
-2268 5211 l
-2315 5226 l
-2361 5238 l
-2407 5248 l
-2451 5256 l
-2494 5263 l
-2536 5267 l
-2575 5270 l
-2613 5271 l
-2649 5270 l
-2682 5269 l
-2713 5266 l
-2742 5263 l
-2769 5259 l
-2793 5254 l
-2816 5249 l
-2836 5243 l
-2855 5238 l
-2871 5232 l
-2886 5225 l
-2899 5219 l
-2911 5213 l
-2920 5206 l
-2929 5200 l
-2936 5194 l
-2941 5187 l
-2946 5181 l
-2949 5175 l
-2951 5169 l
-2952 5163 l
-2952 5157 l
-2951 5151 l
-2949 5145 l
-2946 5140 l
-2943 5134 l
-2938 5128 l
-2933 5123 l
-2928 5117 l
-2921 5112 l
-2914 5107 l
-2907 5101 l
-2898 5096 l
-2890 5091 l
-2880 5085 l
-S
-3421 4402 m
-3413 4431 l
-S
-3307 4418 m
-3299 4448 l
-S
-3191 4423 m
-3182 4452 l
-S
-3073 4416 m
-3063 4445 l
-S
-2953 4399 m
-2942 4428 l
-S
-2714 4337 m
-2703 4365 l
-S
-2598 4293 m
-2586 4321 l
-S
-2484 4242 m
-2471 4269 l
-S
-2374 4183 m
-2361 4210 l
-S
-2270 4117 m
-2256 4144 l
-S
-2081 3965 m
-2067 3992 l
-S
-1999 3880 m
-1984 3906 l
-S
-1928 3790 m
-1912 3815 l
-S
-1868 3693 m
-1851 3718 l
-S
-1822 3590 m
-1804 3615 l
-S
-1781 3365 m
-1761 3387 l
-S
-1796 3241 m
-1774 3262 l
-S
-1842 3108 m
-1819 3128 l
-S
-1933 2968 m
-1908 2985 l
-S
-2086 2825 m
-2058 2838 l
-S
-2673 2622 m
-2643 2620 l
-S
-3103 2675 m
-3081 2654 l
-S
-3509 2886 m
-3537 2898 l
-S
-3785 3187 m
-3805 3210 l
-S
-3920 3482 m
-3933 3510 l
-S
-3939 3918 m
-3942 3948 l
-S
-3887 4065 m
-3887 4095 l
-S
-3814 4177 m
-3812 4207 l
-S
-3728 4263 m
-3725 4293 l
-S
-3633 4326 m
-3627 4356 l
-S
-3043 3352 m
-3063 3330 l
-S
-3100 3391 m
-3121 3369 l
-S
-3155 3434 m
-3177 3413 l
-S
-3207 3480 m
-3230 3459 l
-S
-3256 3529 m
-3279 3509 l
-S
-3345 3636 m
-3369 3617 l
-S
-3384 3693 m
-3409 3676 l
-S
-3419 3753 m
-3445 3737 l
-S
-3450 3816 m
-3476 3800 l
-S
-3477 3880 m
-3504 3865 l
-S
-3518 4015 m
-3545 4002 l
-S
-3531 4084 m
-3559 4072 l
-S
-3539 4155 m
-3567 4144 l
-S
-3541 4227 m
-3570 4217 l
-S
-3538 4299 m
-3567 4290 l
-S
-3514 4445 m
-3544 4438 l
-S
-3493 4517 m
-3523 4512 l
-S
-3465 4588 m
-3495 4585 l
-S
-3430 4658 m
-3460 4656 l
-S
-3387 4726 m
-3418 4726 l
-S
-3281 4854 m
-3311 4857 l
-S
-3216 4913 m
-3246 4917 l
-S
-3143 4966 m
-3173 4973 l
-S
-3063 5013 m
-3092 5022 l
-S
-2975 5053 m
-3003 5064 l
-S
-2779 5108 m
-2805 5124 l
-S
-2673 5120 m
-2697 5139 l
-S
-2563 5121 m
-2584 5142 l
-S
-2450 5109 m
-2468 5133 l
-S
-2336 5084 m
-2350 5111 l
-S
-3529 4372 m
-3483 4387 l
-3436 4399 l
-3389 4408 l
-3340 4415 l
-3291 4420 l
-3241 4422 l
-3191 4423 l
-3140 4421 l
-3090 4418 l
-3038 4412 l
-2987 4405 l
-2936 4396 l
-2884 4385 l
-2833 4372 l
-S
-2833 4372 m
-2782 4358 l
-2731 4343 l
-2681 4325 l
-2631 4306 l
-2581 4286 l
-2532 4265 l
-2484 4242 l
-2436 4217 l
-2390 4191 l
-2344 4164 l
-2299 4136 l
-2256 4107 l
-2213 4076 l
-2172 4044 l
-S
-2172 4044 m
-2132 4011 l
-2094 3977 l
-2057 3942 l
-2022 3905 l
-1989 3868 l
-1957 3829 l
-1928 3790 l
-1901 3749 l
-1876 3707 l
-1853 3664 l
-1833 3620 l
-1832 3617 l
-1831 3614 l
-1829 3610 l
-1828 3607 l
-1827 3604 l
-1826 3601 l
-1824 3598 l
-1823 3594 l
-1822 3591 l
-1821 3588 l
-1820 3585 l
-1819 3581 l
-1817 3578 l
-1816 3575 l
-1815 3572 l
-1814 3568 l
-1813 3565 l
-1812 3562 l
-1811 3558 l
-1810 3555 l
-1809 3552 l
-1808 3549 l
-1807 3545 l
-1806 3542 l
-1805 3539 l
-1804 3535 l
-1803 3532 l
-1802 3529 l
-1801 3525 l
-1801 3522 l
-1800 3518 l
-1799 3515 l
-1798 3512 l
-1797 3508 l
-1797 3505 l
-1796 3501 l
-1795 3498 l
-1794 3495 l
-1794 3491 l
-1793 3488 l
-1792 3484 l
-1792 3481 l
-S
-1792 3481 m
-1791 3477 l
-1790 3474 l
-1790 3471 l
-1789 3467 l
-1789 3464 l
-1788 3460 l
-1788 3457 l
-1787 3453 l
-1787 3450 l
-1786 3446 l
-1786 3443 l
-1785 3439 l
-1785 3436 l
-1785 3432 l
-1784 3428 l
-1784 3425 l
-1784 3421 l
-1783 3418 l
-1783 3414 l
-1783 3411 l
-1783 3407 l
-1782 3403 l
-1782 3400 l
-1782 3396 l
-1782 3393 l
-1782 3389 l
-1782 3385 l
-1782 3382 l
-1781 3378 l
-1781 3374 l
-1781 3371 l
-1781 3367 l
-1781 3364 l
-1781 3360 l
-1782 3356 l
-1782 3352 l
-1782 3349 l
-1782 3345 l
-1782 3341 l
-1782 3338 l
-1782 3334 l
-1783 3330 l
-1783 3326 l
-1783 3323 l
-1784 3319 l
-1784 3315 l
-1784 3311 l
-1785 3308 l
-1785 3304 l
-1786 3300 l
-1786 3296 l
-1787 3292 l
-1787 3289 l
-1788 3285 l
-1788 3281 l
-1789 3277 l
-1789 3273 l
-1790 3269 l
-1791 3265 l
-1791 3262 l
-1792 3258 l
-1793 3254 l
-1794 3250 l
-1795 3246 l
-1795 3242 l
-1796 3238 l
-1797 3234 l
-1798 3230 l
-1799 3226 l
-1800 3222 l
-1801 3218 l
-1802 3214 l
-1803 3210 l
-1805 3206 l
-1806 3202 l
-1807 3198 l
-1808 3194 l
-1809 3190 l
-1811 3186 l
-1812 3182 l
-1814 3178 l
-1815 3174 l
-1816 3170 l
-1818 3166 l
-1819 3162 l
-1821 3158 l
-1822 3154 l
-1824 3150 l
-1826 3146 l
-1827 3142 l
-1829 3137 l
-1831 3133 l
-1833 3129 l
-1835 3125 l
-1836 3121 l
-1838 3117 l
-1840 3113 l
-1842 3108 l
-1844 3104 l
-1846 3100 l
-1849 3096 l
-1851 3092 l
-1853 3087 l
-1855 3083 l
-1858 3079 l
-1860 3075 l
-1862 3070 l
-1865 3066 l
-1867 3062 l
-1870 3058 l
-1872 3053 l
-1875 3049 l
-1878 3045 l
-1880 3041 l
-1883 3036 l
-1886 3032 l
-1889 3028 l
-1892 3023 l
-1895 3019 l
-1898 3015 l
-1901 3010 l
-1904 3006 l
-1907 3002 l
-1910 2997 l
-1913 2993 l
-1917 2989 l
-1920 2984 l
-1923 2980 l
-1927 2975 l
-1930 2971 l
-1934 2967 l
-1938 2962 l
-1941 2958 l
-1945 2953 l
-1949 2949 l
-1953 2945 l
-1957 2940 l
-1961 2936 l
-1965 2931 l
-1969 2927 l
-1973 2923 l
-1978 2918 l
-1982 2914 l
-1986 2909 l
-1991 2905 l
-1995 2901 l
-2000 2896 l
-2005 2892 l
-2009 2887 l
-2014 2883 l
-2019 2879 l
-2024 2874 l
-2029 2870 l
-2034 2865 l
-2039 2861 l
-2045 2857 l
-2050 2852 l
-2055 2848 l
-2061 2844 l
-2066 2839 l
-2072 2835 l
-2078 2831 l
-2084 2826 l
-2090 2822 l
-2096 2818 l
-2102 2813 l
-2108 2809 l
-2114 2805 l
-2120 2801 l
-2127 2796 l
-2133 2792 l
-2140 2788 l
-2146 2784 l
-2153 2780 l
-2160 2775 l
-2167 2771 l
-2174 2767 l
-2181 2763 l
-2188 2759 l
-2195 2755 l
-2203 2751 l
-2210 2747 l
-2218 2743 l
-2226 2739 l
-2233 2735 l
-2241 2732 l
-2249 2728 l
-2257 2724 l
-2265 2720 l
-2274 2717 l
-2282 2713 l
-2291 2709 l
-2299 2706 l
-2308 2702 l
-2317 2699 l
-2326 2695 l
-S
-2326 2695 m
-2335 2692 l
-2344 2689 l
-2353 2685 l
-2362 2682 l
-2372 2679 l
-2381 2676 l
-2391 2673 l
-2400 2670 l
-2410 2667 l
-2420 2664 l
-2430 2661 l
-2440 2659 l
-2451 2656 l
-2461 2653 l
-2472 2651 l
-2482 2649 l
-2493 2646 l
-2504 2644 l
-2514 2642 l
-2525 2640 l
-2537 2638 l
-2548 2636 l
-2559 2634 l
-2570 2633 l
-2582 2631 l
-2593 2630 l
-2605 2628 l
-2617 2627 l
-2629 2626 l
-2641 2625 l
-2653 2624 l
-2665 2623 l
-2677 2622 l
-2689 2622 l
-2702 2621 l
-2714 2621 l
-2727 2621 l
-2739 2621 l
-2752 2621 l
-2765 2621 l
-2778 2621 l
-2791 2622 l
-2804 2622 l
-2817 2623 l
-2830 2624 l
-2843 2625 l
-2856 2626 l
-2869 2627 l
-2883 2629 l
-2896 2631 l
-2909 2632 l
-2923 2634 l
-2936 2636 l
-2950 2639 l
-2963 2641 l
-2977 2644 l
-2990 2646 l
-3004 2649 l
-3017 2652 l
-3031 2655 l
-3044 2659 l
-3058 2662 l
-3071 2666 l
-3085 2670 l
-3098 2674 l
-3112 2678 l
-3125 2682 l
-3139 2687 l
-3152 2691 l
-3166 2696 l
-3179 2701 l
-3192 2706 l
-3205 2711 l
-3219 2717 l
-3232 2722 l
-3245 2728 l
-3258 2734 l
-3271 2740 l
-3284 2746 l
-3296 2752 l
-3309 2758 l
-3322 2765 l
-3334 2772 l
-3347 2778 l
-3359 2785 l
-3371 2792 l
-3383 2800 l
-3395 2807 l
-3407 2814 l
-3419 2822 l
-3431 2829 l
-3442 2837 l
-3454 2845 l
-3465 2853 l
-3476 2861 l
-3488 2869 l
-3499 2878 l
-3509 2886 l
-3520 2894 l
-3531 2903 l
-3541 2911 l
-3551 2920 l
-3562 2929 l
-3572 2938 l
-3581 2947 l
-3591 2956 l
-3601 2965 l
-3610 2974 l
-3620 2983 l
-3629 2992 l
-3638 3001 l
-3647 3010 l
-3655 3020 l
-3664 3029 l
-3672 3038 l
-3681 3048 l
-3689 3057 l
-3697 3067 l
-3705 3076 l
-3712 3086 l
-3720 3095 l
-3727 3105 l
-3734 3114 l
-3742 3124 l
-3749 3133 l
-3755 3143 l
-3762 3152 l
-3769 3162 l
-3775 3171 l
-3781 3181 l
-3787 3190 l
-3793 3200 l
-3799 3209 l
-3805 3219 l
-3811 3228 l
-3816 3238 l
-3821 3247 l
-3827 3256 l
-3832 3266 l
-3837 3275 l
-3842 3284 l
-3846 3294 l
-3851 3303 l
-3855 3312 l
-3860 3321 l
-3864 3330 l
-3868 3339 l
-3872 3348 l
-3876 3358 l
-3880 3366 l
-3883 3375 l
-3887 3384 l
-3890 3393 l
-3894 3402 l
-3897 3411 l
-3900 3419 l
-3903 3428 l
-3906 3437 l
-3909 3445 l
-3912 3454 l
-3914 3462 l
-3917 3471 l
-3919 3479 l
-3922 3488 l
-3924 3496 l
-3926 3504 l
-3928 3512 l
-3930 3520 l
-3932 3528 l
-3934 3536 l
-3936 3544 l
-3938 3552 l
-3939 3560 l
-3941 3568 l
-3942 3576 l
-3944 3583 l
-3945 3591 l
-3946 3599 l
-3947 3606 l
-3948 3614 l
-3949 3621 l
-3950 3629 l
-3951 3636 l
-3952 3643 l
-3953 3650 l
-3954 3658 l
-3954 3665 l
-3955 3672 l
-3956 3679 l
-3956 3686 l
-3956 3693 l
-3957 3700 l
-3957 3706 l
-3957 3713 l
-3958 3720 l
-3958 3727 l
-S
-3958 3727 m
-3958 3733 l
-3958 3740 l
-3958 3746 l
-3958 3753 l
-3958 3759 l
-3958 3765 l
-3957 3772 l
-3957 3778 l
-3957 3784 l
-3956 3790 l
-3956 3797 l
-3956 3803 l
-3955 3809 l
-3955 3815 l
-3954 3821 l
-3954 3826 l
-3953 3832 l
-3952 3838 l
-3952 3844 l
-3951 3849 l
-3950 3855 l
-3949 3861 l
-3948 3866 l
-3948 3872 l
-3947 3877 l
-3946 3883 l
-3945 3888 l
-3944 3893 l
-3943 3899 l
-3942 3904 l
-3940 3909 l
-3939 3914 l
-3938 3919 l
-3937 3924 l
-3936 3930 l
-3934 3935 l
-3933 3940 l
-3932 3944 l
-3931 3949 l
-3929 3954 l
-3928 3959 l
-3926 3964 l
-3925 3968 l
-3923 3973 l
-3922 3978 l
-3920 3982 l
-3919 3987 l
-3917 3992 l
-3916 3996 l
-3914 4001 l
-3912 4005 l
-3911 4009 l
-3909 4014 l
-3907 4018 l
-3906 4022 l
-3904 4027 l
-3902 4031 l
-3900 4035 l
-3899 4039 l
-3897 4043 l
-3895 4047 l
-3893 4051 l
-3891 4055 l
-3889 4059 l
-3887 4063 l
-3885 4067 l
-3883 4071 l
-3881 4075 l
-3879 4079 l
-3877 4083 l
-3875 4086 l
-3873 4090 l
-3871 4094 l
-3869 4097 l
-3867 4101 l
-3865 4105 l
-3863 4108 l
-3860 4112 l
-3858 4115 l
-3856 4119 l
-3854 4122 l
-3852 4126 l
-3849 4129 l
-3847 4133 l
-3845 4136 l
-3843 4139 l
-3840 4143 l
-3838 4146 l
-3836 4149 l
-3833 4152 l
-3831 4156 l
-3829 4159 l
-3826 4162 l
-3824 4165 l
-3821 4168 l
-3819 4171 l
-3817 4174 l
-3814 4177 l
-3812 4180 l
-3809 4183 l
-3807 4186 l
-3804 4189 l
-3802 4192 l
-3799 4195 l
-3797 4197 l
-3794 4200 l
-3792 4203 l
-3789 4206 l
-3787 4209 l
-3784 4211 l
-3781 4214 l
-3779 4217 l
-3776 4219 l
-3774 4222 l
-3771 4225 l
-3768 4227 l
-3766 4230 l
-3763 4232 l
-3760 4235 l
-3758 4237 l
-3755 4240 l
-3752 4242 l
-3749 4245 l
-3747 4247 l
-3744 4249 l
-3741 4252 l
-3738 4254 l
-3736 4256 l
-3733 4259 l
-3730 4261 l
-3727 4263 l
-3725 4266 l
-3722 4268 l
-3719 4270 l
-3716 4272 l
-3713 4274 l
-3710 4276 l
-3708 4279 l
-3705 4281 l
-3702 4283 l
-3699 4285 l
-3696 4287 l
-3693 4289 l
-3690 4291 l
-3687 4293 l
-3684 4295 l
-3681 4297 l
-3679 4299 l
-3676 4301 l
-3673 4303 l
-3670 4304 l
-3667 4306 l
-3664 4308 l
-3661 4310 l
-3658 4312 l
-3655 4314 l
-3652 4315 l
-3649 4317 l
-3646 4319 l
-3643 4321 l
-3640 4322 l
-3637 4324 l
-3634 4326 l
-3631 4327 l
-3627 4329 l
-3624 4331 l
-3621 4332 l
-3618 4334 l
-3615 4335 l
-3612 4337 l
-3609 4338 l
-3606 4340 l
-3603 4341 l
-3600 4343 l
-3596 4344 l
-3593 4346 l
-3590 4347 l
-3587 4349 l
-3584 4350 l
-3581 4352 l
-3578 4353 l
-3574 4354 l
-3571 4356 l
-3568 4357 l
-3565 4358 l
-3562 4360 l
-3558 4361 l
-3555 4362 l
-3552 4363 l
-3549 4365 l
-3546 4366 l
-3542 4367 l
-3539 4368 l
-3536 4370 l
-3533 4371 l
-3532 4371 l
-3532 4371 l
-3532 4371 l
-3532 4371 l
-S
-3532 4371 m
-3532 4371 l
-3531 4371 l
-3531 4371 l
-3531 4371 l
-3531 4371 l
-3530 4372 l
-3530 4372 l
-3530 4372 l
-3530 4372 l
-S
-2983 3317 m
-3009 3332 l
-3034 3347 l
-3060 3363 l
-3084 3380 l
-3108 3397 l
-3132 3415 l
-3155 3434 l
-3178 3453 l
-3200 3473 l
-3222 3493 l
-3243 3514 l
-3263 3536 l
-3283 3558 l
-3302 3581 l
-S
-3302 3581 m
-3321 3604 l
-3339 3628 l
-3356 3652 l
-3373 3676 l
-3389 3702 l
-3405 3727 l
-3419 3753 l
-3433 3780 l
-3446 3807 l
-3459 3834 l
-3470 3862 l
-3481 3890 l
-3491 3918 l
-3500 3947 l
-S
-3500 3947 m
-3508 3976 l
-3516 4005 l
-3522 4034 l
-3528 4064 l
-3532 4094 l
-3536 4125 l
-3539 4155 l
-3541 4186 l
-3541 4216 l
-3541 4247 l
-3540 4278 l
-3537 4310 l
-3534 4341 l
-3529 4372 l
-S
-3529 4372 m
-3524 4403 l
-3517 4434 l
-3509 4465 l
-3500 4496 l
-3489 4527 l
-3478 4558 l
-3465 4588 l
-3451 4618 l
-3435 4648 l
-3418 4678 l
-3400 4707 l
-3381 4736 l
-3360 4764 l
-3338 4792 l
-S
-3338 4792 m
-3314 4819 l
-3289 4846 l
-3263 4871 l
-3235 4896 l
-3206 4921 l
-3175 4944 l
-3143 4966 l
-3110 4987 l
-3075 5007 l
-3038 5025 l
-3001 5043 l
-2962 5058 l
-2922 5073 l
-2880 5085 l
-S
-2880 5085 m
-2838 5096 l
-2794 5105 l
-2750 5113 l
-2704 5118 l
-2658 5121 l
-2610 5122 l
-2563 5121 l
-2514 5117 l
-2466 5111 l
-2417 5103 l
-2368 5093 l
-2319 5079 l
-2271 5064 l
-2223 5046 l
-S
-4073 3746 m
-4075 3748 l
-S
-4075 3748 m
-4075 3753 l
-4075 3757 l
-4075 3762 l
-4075 3766 l
-4075 3770 l
-4075 3775 l
-4077 3777 l
-4079 3779 l
-4079 3784 l
-4079 3788 l
-S
-4079 3788 m
-4079 3793 l
-4079 3797 l
-4079 3802 l
-4079 3806 l
-4079 3811 l
-4079 3815 l
-4082 3817 l
-4084 3820 l
-4084 3824 l
-4084 3829 l
-S
-4084 3829 m
-4084 3833 l
-4084 3838 l
-4084 3842 l
-4084 3846 l
-4084 3851 l
-4084 3855 l
-4084 3860 l
-4084 3864 l
-4084 3869 l
-S
-4084 3869 m
-4084 3873 l
-4084 3878 l
-4086 3880 l
-4088 3882 l
-4088 3887 l
-4088 3891 l
-4088 3896 l
-4088 3900 l
-4088 3905 l
-4088 3909 l
-S
-4088 3909 m
-4088 3913 l
-4088 3918 l
-4088 3922 l
-4088 3927 l
-4088 3931 l
-4088 3936 l
-4088 3940 l
-4088 3945 l
-4088 3949 l
-S
-4088 3949 m
-4088 3954 l
-4088 3958 l
-4088 3963 l
-4088 3967 l
-4088 3972 l
-4088 3976 l
-4088 3981 l
-4088 3985 l
-4088 3989 l
-S
-4088 3989 m
-4088 3994 l
-4088 3998 l
-4088 4003 l
-4088 4007 l
-4088 4012 l
-4088 4016 l
-4086 4018 l
-4084 4021 l
-4084 4025 l
-4084 4030 l
-S
-4084 4030 m
-4084 4034 l
-4084 4039 l
-4084 4043 l
-4084 4048 l
-4084 4052 l
-4084 4056 l
-4084 4061 l
-4084 4065 l
-4084 4070 l
-S
-4084 4070 m
-4084 4074 l
-4084 4079 l
-4082 4081 l
-4079 4083 l
-4079 4088 l
-4079 4092 l
-4079 4097 l
-4079 4101 l
-4079 4106 l
-4079 4110 l
-S
-4079 4110 m
-4079 4115 l
-4079 4119 l
-4077 4121 l
-4075 4124 l
-4075 4128 l
-4075 4132 l
-4075 4137 l
-4075 4141 l
-4075 4146 l
-4075 4150 l
-S
-4073 4153 m
-4075 4150 l
-S
-4032 3563 m
-4035 3565 l
-4035 3569 l
-4035 3574 l
-4037 3576 l
-4039 3578 l
-4039 3583 l
-4039 3587 l
-S
-4039 3587 m
-4039 3592 l
-4041 3594 l
-4044 3596 l
-4044 3601 l
-4044 3605 l
-4044 3610 l
-4046 3612 l
-4048 3614 l
-4048 3619 l
-4048 3623 l
-4048 3627 l
-S
-4048 3627 m
-4050 3630 l
-4053 3632 l
-4053 3636 l
-4053 3641 l
-4053 3645 l
-4055 3648 l
-4057 3650 l
-4057 3654 l
-4057 3659 l
-4057 3663 l
-4057 3668 l
-S
-4057 3668 m
-4059 3670 l
-4061 3672 l
-4061 3677 l
-4061 3681 l
-4061 3686 l
-4061 3690 l
-4064 3692 l
-4066 3694 l
-4066 3699 l
-4066 3703 l
-4066 3708 l
-S
-4066 3708 m
-4066 3712 l
-4066 3717 l
-4068 3719 l
-4070 3721 l
-4070 3726 l
-4070 3730 l
-4070 3735 l
-4070 3739 l
-4070 3744 l
-4073 3746 l
-S
-4073 4153 m
-4070 4155 l
-4070 4159 l
-4070 4164 l
-4070 4168 l
-4070 4173 l
-4070 4177 l
-4068 4179 l
-4066 4182 l
-4066 4186 l
-4066 4191 l
-S
-4066 4191 m
-4066 4195 l
-4066 4199 l
-4066 4204 l
-4064 4206 l
-4061 4208 l
-4061 4213 l
-4061 4217 l
-4061 4222 l
-4061 4226 l
-4059 4229 l
-4057 4231 l
-S
-4057 4231 m
-4057 4235 l
-4057 4240 l
-4057 4244 l
-4057 4249 l
-4055 4251 l
-4053 4253 l
-4053 4258 l
-4053 4262 l
-4053 4267 l
-4050 4269 l
-4048 4271 l
-S
-4048 4271 m
-4048 4275 l
-4048 4280 l
-4048 4284 l
-4046 4287 l
-4044 4289 l
-4044 4293 l
-4044 4298 l
-4044 4302 l
-4041 4305 l
-4039 4307 l
-4039 4311 l
-S
-4032 4336 m
-4035 4334 l
-4035 4329 l
-4035 4325 l
-4037 4322 l
-4039 4320 l
-4039 4316 l
-4039 4311 l
-S
-3992 3442 m
-3994 3444 l
-3994 3449 l
-3994 3453 l
-3997 3455 l
-3999 3458 l
-3999 3462 l
-3999 3467 l
-S
-3999 3467 m
-4001 3469 l
-4003 3471 l
-4003 3476 l
-4006 3478 l
-4008 3480 l
-4008 3484 l
-4008 3489 l
-4010 3491 l
-4012 3493 l
-4012 3498 l
-4012 3502 l
-4015 3505 l
-4017 3507 l
-S
-4017 3507 m
-4017 3511 l
-4017 3516 l
-4019 3518 l
-4021 3520 l
-4021 3525 l
-4021 3529 l
-4023 3531 l
-4026 3534 l
-4026 3538 l
-4026 3543 l
-4028 3545 l
-4030 3547 l
-S
-4030 3547 m
-4030 3551 l
-4030 3556 l
-4030 3560 l
-4032 3563 l
-S
-4030 4351 m
-4030 4347 l
-4030 4342 l
-4030 4338 l
-4032 4336 l
-S
-4030 4351 m
-4028 4354 l
-4026 4356 l
-4026 4360 l
-4026 4365 l
-4023 4367 l
-4021 4369 l
-4021 4374 l
-4021 4378 l
-4019 4380 l
-4017 4383 l
-4017 4387 l
-4017 4392 l
-S
-4017 4392 m
-4015 4394 l
-4012 4396 l
-4012 4401 l
-4012 4405 l
-4010 4407 l
-4008 4410 l
-4008 4414 l
-4008 4418 l
-4006 4421 l
-4003 4423 l
-4003 4427 l
-4001 4430 l
-3999 4432 l
-S
-3992 4456 m
-3994 4454 l
-3994 4450 l
-3994 4445 l
-3997 4443 l
-3999 4441 l
-3999 4436 l
-3999 4432 l
-S
-3952 3353 m
-3954 3355 l
-3954 3359 l
-3956 3362 l
-3959 3364 l
-3959 3368 l
-3961 3371 l
-3963 3373 l
-3963 3377 l
-3965 3379 l
-3968 3382 l
-3968 3386 l
-S
-3968 3386 m
-3970 3388 l
-3972 3391 l
-3972 3395 l
-3972 3400 l
-3974 3402 l
-3977 3404 l
-3977 3408 l
-3979 3411 l
-3981 3413 l
-3981 3417 l
-3983 3420 l
-3985 3422 l
-3985 3426 l
-S
-3985 3426 m
-3985 3431 l
-3988 3433 l
-3990 3435 l
-3990 3440 l
-3992 3442 l
-S
-3985 4472 m
-3985 4468 l
-3988 4465 l
-3990 4463 l
-3990 4459 l
-3992 4456 l
-S
-3985 4472 m
-3985 4477 l
-3983 4479 l
-3981 4481 l
-3981 4486 l
-3979 4488 l
-3977 4490 l
-3977 4494 l
-3974 4497 l
-3972 4499 l
-3972 4503 l
-3972 4508 l
-3970 4510 l
-3968 4512 l
-S
-3952 4546 m
-3954 4544 l
-3954 4539 l
-3956 4537 l
-3959 4535 l
-3959 4530 l
-3961 4528 l
-3963 4526 l
-3963 4521 l
-3965 4519 l
-3968 4517 l
-3968 4512 l
-S
-3912 3272 m
-3914 3274 l
-3914 3279 l
-3916 3281 l
-3918 3283 l
-3918 3288 l
-3921 3290 l
-3923 3292 l
-3923 3297 l
-3925 3299 l
-3927 3301 l
-3927 3306 l
-S
-3927 3306 m
-3930 3308 l
-3932 3310 l
-3932 3315 l
-3934 3317 l
-3936 3319 l
-3936 3324 l
-3939 3326 l
-3941 3328 l
-3941 3333 l
-3943 3335 l
-3945 3337 l
-3945 3341 l
-3947 3344 l
-3950 3346 l
-S
-3950 3346 m
-3950 3350 l
-3952 3353 l
-S
-3950 4553 m
-3950 4548 l
-3952 4546 l
-S
-3950 4553 m
-3947 4555 l
-3945 4557 l
-3945 4561 l
-3943 4564 l
-3941 4566 l
-3941 4570 l
-3939 4573 l
-3936 4575 l
-3936 4579 l
-3934 4582 l
-3932 4584 l
-3932 4588 l
-3930 4591 l
-3927 4593 l
-S
-3912 4626 m
-3914 4624 l
-3914 4620 l
-3916 4617 l
-3918 4615 l
-3918 4611 l
-3921 4608 l
-3923 4606 l
-3923 4602 l
-3925 4599 l
-3927 4597 l
-3927 4593 l
-S
-3872 3205 m
-3874 3207 l
-3874 3212 l
-3876 3214 l
-3878 3216 l
-3878 3221 l
-3880 3223 l
-3883 3225 l
-S
-3883 3225 m
-3885 3227 l
-3887 3230 l
-3887 3234 l
-3889 3236 l
-3892 3239 l
-3894 3241 l
-3896 3243 l
-3896 3248 l
-3898 3250 l
-3901 3252 l
-3901 3257 l
-3903 3259 l
-3905 3261 l
-3905 3265 l
-S
-3905 3265 m
-3907 3268 l
-3909 3270 l
-3912 3272 l
-S
-3905 4633 m
-3907 4631 l
-3909 4629 l
-3912 4626 l
-S
-3905 4633 m
-3905 4637 l
-3903 4640 l
-3901 4642 l
-3901 4646 l
-3898 4649 l
-3896 4651 l
-3896 4655 l
-3894 4658 l
-3892 4660 l
-3889 4662 l
-3887 4664 l
-3887 4669 l
-3885 4671 l
-3883 4673 l
-S
-3872 4693 m
-3874 4691 l
-3874 4687 l
-3876 4684 l
-3878 4682 l
-3878 4678 l
-3880 4675 l
-3883 4673 l
-S
-3831 3147 m
-3834 3149 l
-3836 3152 l
-3838 3154 l
-3838 3158 l
-3840 3160 l
-3842 3163 l
-3845 3165 l
-3847 3167 l
-3847 3172 l
-3849 3174 l
-3851 3176 l
-3854 3178 l
-3856 3181 l
-3856 3185 l
-S
-3856 3185 m
-3858 3187 l
-3860 3190 l
-3863 3192 l
-3865 3194 l
-3865 3198 l
-3867 3201 l
-3869 3203 l
-3872 3205 l
-S
-3856 4713 m
-3858 4711 l
-3860 4709 l
-3863 4707 l
-3865 4704 l
-3865 4700 l
-3867 4698 l
-3869 4696 l
-3872 4693 l
-S
-3831 4751 m
-3834 4749 l
-3836 4747 l
-3838 4745 l
-3838 4740 l
-3840 4738 l
-3842 4736 l
-3845 4734 l
-3847 4731 l
-3847 4727 l
-3849 4725 l
-3851 4722 l
-3854 4720 l
-3856 4718 l
-3856 4713 l
-S
-3791 3093 m
-3793 3096 l
-3796 3098 l
-3798 3100 l
-3798 3105 l
-S
-3798 3105 m
-3800 3107 l
-3802 3109 l
-3804 3111 l
-3807 3114 l
-3809 3116 l
-3811 3118 l
-3811 3122 l
-3813 3125 l
-3816 3127 l
-3818 3129 l
-3820 3131 l
-3822 3134 l
-3825 3136 l
-3825 3140 l
-3827 3143 l
-3829 3145 l
-S
-3831 3147 m
-3829 3145 l
-S
-3829 4754 m
-3831 4751 l
-S
-3829 4754 m
-3827 4756 l
-3825 4758 l
-3825 4763 l
-3822 4765 l
-3820 4767 l
-3818 4769 l
-3816 4772 l
-3813 4774 l
-3811 4776 l
-3811 4780 l
-3809 4783 l
-3807 4785 l
-3804 4787 l
-3802 4789 l
-3800 4792 l
-3798 4794 l
-S
-3791 4805 m
-3793 4803 l
-3796 4801 l
-3798 4798 l
-3798 4794 l
-S
-3751 3044 m
-3753 3047 l
-3755 3049 l
-3758 3051 l
-3760 3053 l
-3762 3055 l
-3762 3060 l
-3764 3062 l
-3766 3064 l
-S
-3766 3064 m
-3769 3067 l
-3771 3069 l
-3773 3071 l
-3775 3073 l
-3778 3076 l
-3780 3078 l
-3782 3080 l
-3784 3082 l
-3784 3087 l
-3787 3089 l
-3789 3091 l
-3791 3093 l
-S
-3766 4834 m
-3769 4832 l
-3771 4830 l
-3773 4827 l
-3775 4825 l
-3778 4823 l
-3780 4821 l
-3782 4818 l
-3784 4816 l
-3784 4812 l
-3787 4810 l
-3789 4807 l
-3791 4805 l
-S
-3751 4854 m
-3753 4852 l
-3755 4850 l
-3758 4847 l
-3760 4845 l
-3762 4843 l
-3762 4839 l
-3764 4836 l
-3766 4834 l
-S
-3711 3000 m
-3713 3002 l
-3715 3004 l
-3717 3006 l
-3720 3009 l
-3722 3011 l
-3724 3013 l
-3726 3015 l
-3729 3017 l
-3731 3020 l
-3731 3024 l
-S
-3731 3024 m
-3733 3026 l
-3735 3029 l
-3737 3031 l
-3740 3033 l
-3742 3035 l
-3744 3038 l
-3746 3040 l
-3749 3042 l
-3751 3044 l
-S
-3731 4874 m
-3733 4872 l
-3735 4870 l
-3737 4868 l
-3740 4865 l
-3742 4863 l
-3744 4861 l
-3746 4859 l
-3749 4856 l
-3751 4854 l
-S
-3711 4899 m
-3713 4897 l
-3715 4894 l
-3717 4892 l
-3720 4890 l
-3722 4888 l
-3724 4885 l
-3726 4883 l
-3729 4881 l
-3731 4879 l
-3731 4874 l
-S
-3670 2959 m
-3673 2962 l
-3675 2964 l
-3677 2966 l
-3679 2968 l
-3682 2971 l
-3684 2973 l
-3686 2975 l
-3688 2977 l
-3691 2979 l
-3693 2982 l
-3695 2984 l
-S
-3695 2984 m
-3697 2986 l
-3699 2988 l
-3702 2991 l
-3704 2993 l
-3706 2995 l
-3708 2997 l
-3711 3000 l
-S
-3695 4915 m
-3697 4912 l
-3699 4910 l
-3702 4908 l
-3704 4906 l
-3706 4903 l
-3708 4901 l
-3711 4899 l
-S
-3670 4939 m
-3673 4937 l
-3675 4935 l
-3677 4932 l
-3679 4930 l
-3682 4928 l
-3684 4926 l
-3686 4923 l
-3688 4921 l
-3691 4919 l
-3693 4917 l
-3695 4915 l
-S
-3630 2924 m
-3635 2924 l
-3637 2926 l
-3639 2928 l
-3641 2930 l
-3644 2933 l
-3646 2935 l
-3648 2937 l
-3650 2939 l
-3653 2941 l
-3655 2944 l
-S
-3655 2944 m
-3657 2946 l
-3659 2948 l
-3661 2950 l
-3664 2953 l
-3666 2955 l
-3668 2957 l
-3670 2959 l
-S
-3655 4955 m
-3657 4953 l
-3659 4950 l
-3661 4948 l
-3664 4946 l
-3666 4944 l
-3668 4941 l
-3670 4939 l
-S
-3630 4975 m
-3635 4975 l
-3637 4973 l
-3639 4970 l
-3641 4968 l
-3644 4966 l
-3646 4964 l
-3648 4961 l
-3650 4959 l
-3653 4957 l
-3655 4955 l
-S
-3590 2888 m
-3592 2890 l
-3594 2892 l
-3599 2892 l
-3601 2895 l
-3603 2897 l
-3606 2899 l
-3608 2901 l
-3610 2903 l
-S
-3610 2903 m
-3612 2906 l
-3615 2908 l
-3617 2910 l
-3619 2912 l
-3621 2915 l
-3623 2917 l
-3626 2919 l
-3628 2921 l
-3630 2924 l
-S
-3610 4995 m
-3612 4993 l
-3615 4990 l
-3617 4988 l
-3619 4986 l
-3621 4984 l
-3623 4982 l
-3626 4979 l
-3628 4977 l
-3630 4975 l
-S
-3590 5011 m
-3592 5008 l
-3594 5006 l
-3599 5006 l
-3601 5004 l
-3603 5002 l
-3606 4999 l
-3608 4997 l
-3610 4995 l
-S
-3550 2857 m
-3554 2857 l
-3556 2859 l
-3559 2861 l
-3561 2863 l
-S
-3561 2863 m
-3563 2866 l
-3565 2868 l
-3568 2870 l
-3572 2870 l
-3574 2872 l
-3577 2874 l
-3579 2877 l
-3581 2879 l
-3583 2881 l
-3585 2883 l
-3588 2886 l
-3590 2888 l
-S
-3561 5035 m
-3563 5033 l
-3565 5031 l
-3568 5028 l
-3572 5028 l
-3574 5026 l
-3577 5024 l
-3579 5022 l
-3581 5020 l
-3583 5017 l
-3585 5015 l
-3588 5013 l
-3590 5011 l
-S
-3550 5042 m
-3554 5042 l
-3556 5040 l
-3559 5037 l
-3561 5035 l
-S
-3510 2825 m
-3512 2828 l
-3514 2830 l
-3518 2830 l
-3521 2832 l
-3523 2834 l
-3525 2836 l
-3527 2839 l
-3530 2841 l
-3532 2843 l
-3536 2843 l
-3539 2845 l
-3541 2848 l
-3543 2850 l
-3545 2852 l
-3548 2854 l
-3550 2857 l
-S
-3510 5073 m
-3512 5071 l
-3514 5069 l
-3518 5069 l
-3521 5066 l
-3523 5064 l
-3525 5062 l
-3527 5060 l
-3530 5058 l
-3532 5055 l
-3536 5055 l
-3539 5053 l
-3541 5051 l
-3543 5049 l
-3545 5046 l
-3548 5044 l
-3550 5042 l
-S
-3469 2798 m
-3474 2798 l
-3476 2801 l
-3478 2803 l
-3480 2805 l
-3483 2807 l
-3487 2807 l
-3489 2810 l
-3492 2812 l
-3494 2814 l
-3496 2816 l
-3501 2816 l
-3503 2819 l
-3505 2821 l
-3507 2823 l
-S
-3510 2825 m
-3507 2823 l
-S
-3507 5075 m
-3510 5073 l
-S
-3469 5100 m
-3474 5100 l
-3476 5098 l
-3478 5096 l
-3480 5093 l
-3483 5091 l
-3487 5091 l
-3489 5089 l
-3492 5087 l
-3494 5084 l
-3496 5082 l
-3501 5082 l
-3503 5080 l
-3505 5078 l
-3507 5075 l
-S
-3429 2772 m
-3431 2774 l
-3434 2776 l
-3438 2776 l
-3440 2778 l
-3442 2781 l
-3447 2781 l
-3449 2783 l
-S
-3449 2783 m
-3451 2785 l
-3454 2787 l
-3456 2790 l
-3460 2790 l
-3463 2792 l
-3465 2794 l
-3467 2796 l
-3469 2798 l
-S
-3449 5116 m
-3451 5113 l
-3454 5111 l
-3456 5109 l
-3460 5109 l
-3463 5107 l
-3465 5104 l
-3467 5102 l
-3469 5100 l
-S
-3429 5127 m
-3431 5125 l
-3434 5122 l
-3438 5122 l
-3440 5120 l
-3442 5118 l
-3447 5118 l
-3449 5116 l
-S
-3389 2749 m
-3393 2749 l
-3396 2752 l
-3398 2754 l
-3402 2754 l
-3405 2756 l
-3407 2758 l
-3411 2758 l
-3413 2760 l
-3416 2763 l
-3418 2765 l
-3420 2767 l
-3425 2767 l
-3427 2769 l
-3429 2772 l
-S
-3389 5149 m
-3393 5149 l
-3396 5147 l
-3398 5145 l
-3402 5145 l
-3405 5142 l
-3407 5140 l
-3411 5140 l
-3413 5138 l
-3416 5136 l
-3418 5133 l
-3420 5131 l
-3425 5131 l
-3427 5129 l
-3429 5127 l
-S
-3349 2727 m
-3353 2727 l
-3355 2729 l
-3358 2731 l
-3362 2731 l
-3364 2734 l
-3367 2736 l
-3371 2736 l
-3373 2738 l
-3375 2740 l
-3380 2740 l
-3382 2743 l
-S
-3382 2743 m
-3384 2745 l
-3387 2747 l
-3389 2749 l
-S
-3382 5156 m
-3384 5154 l
-3387 5151 l
-3389 5149 l
-S
-3349 5171 m
-3353 5171 l
-3355 5169 l
-3358 5167 l
-3362 5167 l
-3364 5165 l
-3367 5163 l
-3371 5163 l
-3373 5160 l
-3375 5158 l
-3380 5158 l
-3382 5156 l
-S
-3308 2705 m
-3311 2707 l
-3313 2709 l
-3317 2709 l
-3320 2711 l
-3322 2714 l
-3326 2714 l
-3329 2716 l
-3331 2718 l
-3335 2718 l
-3337 2720 l
-3340 2723 l
-3344 2723 l
-3346 2725 l
-3349 2727 l
-S
-3308 5194 m
-3311 5192 l
-3313 5189 l
-3317 5189 l
-3320 5187 l
-3322 5185 l
-3326 5185 l
-3329 5183 l
-3331 5180 l
-3335 5180 l
-3337 5178 l
-3340 5176 l
-3344 5176 l
-3346 5174 l
-3349 5171 l
-S
-3268 2687 m
-3273 2687 l
-3275 2689 l
-3277 2691 l
-3282 2691 l
-3284 2693 l
-3286 2696 l
-3291 2696 l
-3293 2698 l
-3295 2700 l
-3299 2700 l
-3302 2702 l
-S
-3308 2705 m
-3304 2705 l
-3302 2702 l
-S
-3302 5196 m
-3304 5194 l
-3308 5194 l
-S
-3268 5212 m
-3273 5212 l
-3275 5209 l
-3277 5207 l
-3282 5207 l
-3284 5205 l
-3286 5203 l
-3291 5203 l
-3293 5201 l
-3295 5198 l
-3299 5198 l
-3302 5196 l
-S
-3228 2669 m
-3232 2669 l
-3235 2671 l
-3237 2673 l
-3241 2673 l
-3244 2676 l
-3246 2678 l
-3250 2678 l
-3253 2680 l
-3255 2682 l
-3259 2682 l
-3264 2682 l
-3266 2685 l
-3268 2687 l
-S
-3228 5230 m
-3232 5230 l
-3235 5227 l
-3237 5225 l
-3241 5225 l
-3244 5223 l
-3246 5221 l
-3250 5221 l
-3253 5218 l
-3255 5216 l
-3259 5216 l
-3264 5216 l
-3266 5214 l
-3268 5212 l
-S
-3188 2655 m
-3192 2655 l
-3197 2655 l
-3199 2658 l
-3201 2660 l
-3206 2660 l
-3210 2660 l
-3212 2662 l
-S
-3212 2662 m
-3215 2664 l
-3219 2664 l
-3221 2667 l
-3224 2669 l
-3228 2669 l
-S
-3212 5236 m
-3215 5234 l
-3219 5234 l
-3221 5232 l
-3224 5230 l
-3228 5230 l
-S
-3188 5243 m
-3192 5243 l
-3197 5243 l
-3199 5241 l
-3201 5239 l
-3206 5239 l
-3210 5239 l
-3212 5236 l
-S
-3148 2638 m
-3150 2640 l
-3152 2642 l
-3156 2642 l
-3161 2642 l
-3163 2644 l
-3165 2647 l
-3170 2647 l
-3174 2647 l
-3177 2649 l
-3179 2651 l
-3183 2651 l
-3186 2653 l
-3188 2655 l
-S
-3148 5261 m
-3150 5259 l
-3152 5256 l
-3156 5256 l
-3161 5256 l
-3163 5254 l
-3165 5252 l
-3170 5252 l
-3174 5252 l
-3177 5250 l
-3179 5247 l
-3183 5247 l
-3186 5245 l
-3188 5243 l
-S
-3107 2624 m
-3110 2626 l
-3112 2629 l
-3116 2629 l
-3121 2629 l
-3123 2631 l
-3125 2633 l
-3130 2633 l
-3134 2633 l
-3136 2635 l
-3139 2638 l
-3143 2638 l
-3148 2638 l
-S
-3107 5274 m
-3110 5272 l
-3112 5270 l
-3116 5270 l
-3121 5270 l
-3123 5268 l
-3125 5265 l
-3130 5265 l
-3134 5265 l
-3136 5263 l
-3139 5261 l
-3143 5261 l
-3148 5261 l
-S
-3067 2615 m
-3072 2615 l
-3076 2615 l
-3078 2617 l
-3081 2620 l
-3085 2620 l
-3089 2620 l
-3092 2622 l
-S
-3107 2624 m
-3103 2624 l
-3098 2624 l
-3094 2624 l
-3092 2622 l
-S
-3092 5277 m
-3094 5274 l
-3098 5274 l
-3103 5274 l
-3107 5274 l
-S
-3067 5283 m
-3072 5283 l
-3076 5283 l
-3078 5281 l
-3081 5279 l
-3085 5279 l
-3089 5279 l
-3092 5277 l
-S
-3027 2606 m
-3031 2606 l
-3036 2606 l
-3040 2606 l
-3043 2609 l
-3045 2611 l
-3049 2611 l
-3054 2611 l
-3058 2611 l
-3060 2613 l
-3063 2615 l
-3067 2615 l
-S
-3027 5292 m
-3031 5292 l
-3036 5292 l
-3040 5292 l
-3043 5290 l
-3045 5288 l
-3049 5288 l
-3054 5288 l
-3058 5288 l
-3060 5285 l
-3063 5283 l
-3067 5283 l
-S
-2987 2597 m
-2991 2597 l
-2996 2597 l
-3000 2597 l
-3005 2597 l
-3007 2600 l
-3009 2602 l
-3013 2602 l
-3018 2602 l
-3022 2602 l
-3025 2604 l
-3027 2606 l
-S
-2987 5301 m
-2991 5301 l
-2996 5301 l
-3000 5301 l
-3005 5301 l
-3007 5299 l
-3009 5297 l
-3013 5297 l
-3018 5297 l
-3022 5297 l
-3025 5294 l
-3027 5292 l
-S
-2946 2588 m
-2951 2588 l
-2955 2588 l
-2960 2588 l
-2962 2591 l
-2964 2593 l
-2969 2593 l
-2973 2593 l
-2978 2593 l
-2982 2593 l
-2984 2595 l
-2987 2597 l
-S
-2946 5310 m
-2951 5310 l
-2955 5310 l
-2960 5310 l
-2962 5308 l
-2964 5306 l
-2969 5306 l
-2973 5306 l
-2978 5306 l
-2982 5306 l
-2984 5303 l
-2987 5301 l
-S
-2906 2579 m
-2908 2582 l
-S
-2908 2582 m
-2911 2584 l
-2915 2584 l
-2920 2584 l
-2924 2584 l
-2929 2584 l
-2933 2584 l
-2935 2586 l
-2938 2588 l
-2942 2588 l
-2946 2588 l
-S
-2908 5317 m
-2911 5314 l
-2915 5314 l
-2920 5314 l
-2924 5314 l
-2929 5314 l
-2933 5314 l
-2935 5312 l
-2938 5310 l
-2942 5310 l
-2946 5310 l
-S
-2906 5319 m
-2908 5317 l
-S
-2866 2575 m
-2870 2575 l
-2875 2575 l
-2877 2577 l
-2879 2579 l
-2884 2579 l
-2888 2579 l
-2893 2579 l
-2897 2579 l
-2902 2579 l
-2906 2579 l
-S
-2906 5319 m
-2902 5319 l
-2897 5319 l
-2893 5319 l
-2888 5319 l
-2884 5319 l
-2879 5319 l
-2877 5321 l
-2875 5323 l
-2870 5323 l
-2866 5323 l
-S
-2826 2571 m
-2830 2571 l
-2835 2571 l
-2837 2573 l
-2839 2575 l
-2844 2575 l
-2848 2575 l
-2853 2575 l
-2857 2575 l
-2862 2575 l
-2866 2575 l
-S
-2826 5328 m
-2830 5328 l
-2835 5328 l
-2837 5326 l
-2839 5323 l
-2844 5323 l
-2848 5323 l
-2853 5323 l
-2857 5323 l
-2862 5323 l
-2866 5323 l
-S
-2786 2571 m
-2790 2571 l
-2794 2571 l
-2799 2571 l
-2803 2571 l
-2808 2571 l
-2812 2571 l
-2817 2571 l
-2821 2571 l
-2826 2571 l
-S
-2786 5328 m
-2790 5328 l
-2794 5328 l
-2799 5328 l
-2803 5328 l
-2808 5328 l
-2812 5328 l
-2817 5328 l
-2821 5328 l
-2826 5328 l
-S
-2745 2566 m
-2750 2566 l
-2754 2566 l
-2759 2566 l
-2763 2566 l
-2768 2566 l
-2772 2566 l
-2774 2568 l
-2777 2571 l
-2781 2571 l
-2786 2571 l
-S
-2745 5332 m
-2750 5332 l
-2754 5332 l
-2759 5332 l
-2763 5332 l
-2768 5332 l
-2772 5332 l
-2774 5330 l
-2777 5328 l
-2781 5328 l
-2786 5328 l
-S
-2705 2566 m
-2710 2566 l
-2714 2566 l
-2719 2566 l
-2723 2566 l
-2727 2566 l
-2732 2566 l
-2736 2566 l
-2741 2566 l
-2745 2566 l
-S
-2705 5332 m
-2710 5332 l
-2714 5332 l
-2719 5332 l
-2723 5332 l
-2727 5332 l
-2732 5332 l
-2736 5332 l
-2741 5332 l
-2745 5332 l
-S
-2665 2566 m
-2669 2566 l
-2674 2566 l
-2678 2566 l
-2683 2566 l
-2687 2566 l
-2692 2566 l
-2696 2566 l
-2701 2566 l
-2705 2566 l
-S
-2665 5332 m
-2669 5332 l
-2674 5332 l
-2678 5332 l
-2683 5332 l
-2687 5332 l
-2692 5332 l
-2696 5332 l
-2701 5332 l
-2705 5332 l
-S
-2625 2571 m
-2629 2571 l
-2634 2571 l
-2636 2568 l
-2638 2566 l
-2643 2566 l
-2647 2566 l
-2651 2566 l
-2656 2566 l
-2660 2566 l
-2665 2566 l
-S
-2625 5328 m
-2629 5328 l
-2634 5328 l
-2636 5330 l
-2638 5332 l
-2643 5332 l
-2647 5332 l
-2651 5332 l
-2656 5332 l
-2660 5332 l
-2665 5332 l
-S
-2584 2571 m
-2589 2571 l
-2593 2571 l
-2598 2571 l
-2602 2571 l
-2607 2571 l
-2611 2571 l
-2616 2571 l
-2620 2571 l
-2625 2571 l
-S
-2584 5328 m
-2589 5328 l
-2593 5328 l
-2598 5328 l
-2602 5328 l
-2607 5328 l
-2611 5328 l
-2616 5328 l
-2620 5328 l
-2625 5328 l
-S
-2544 2575 m
-2549 2575 l
-2553 2575 l
-2558 2575 l
-2562 2575 l
-2567 2575 l
-2571 2575 l
-2573 2573 l
-2576 2571 l
-2580 2571 l
-2584 2571 l
-S
-2544 5323 m
-2549 5323 l
-2553 5323 l
-2558 5323 l
-2562 5323 l
-2567 5323 l
-2571 5323 l
-2573 5326 l
-2576 5328 l
-2580 5328 l
-2584 5328 l
-S
-2504 2579 m
-2508 2579 l
-2513 2579 l
-2517 2579 l
-2522 2579 l
-2526 2579 l
-2531 2579 l
-2533 2577 l
-2535 2575 l
-2540 2575 l
-2544 2575 l
-S
-2504 5319 m
-2508 5319 l
-2513 5319 l
-2517 5319 l
-2522 5319 l
-2526 5319 l
-2531 5319 l
-2533 5321 l
-2535 5323 l
-2540 5323 l
-2544 5323 l
-S
-2502 2582 m
-2504 2579 l
-S
-2464 2588 m
-2468 2588 l
-2473 2588 l
-2475 2586 l
-2477 2584 l
-2482 2584 l
-2486 2584 l
-2491 2584 l
-2495 2584 l
-2500 2584 l
-2502 2582 l
-S
-2464 5310 m
-2468 5310 l
-2473 5310 l
-2475 5312 l
-2477 5314 l
-2482 5314 l
-2486 5314 l
-2491 5314 l
-2495 5314 l
-2500 5314 l
-2502 5317 l
-S
-2504 5319 m
-2502 5317 l
-S
-2424 2597 m
-2426 2595 l
-2428 2593 l
-2433 2593 l
-2437 2593 l
-2441 2593 l
-2446 2593 l
-2448 2591 l
-2450 2588 l
-2455 2588 l
-2459 2588 l
-2464 2588 l
-S
-2424 5301 m
-2426 5303 l
-2428 5306 l
-2433 5306 l
-2437 5306 l
-2441 5306 l
-2446 5306 l
-2448 5308 l
-2450 5310 l
-2455 5310 l
-2459 5310 l
-2464 5310 l
-S
-2383 2606 m
-2386 2604 l
-2388 2602 l
-2392 2602 l
-2397 2602 l
-2401 2602 l
-2403 2600 l
-2406 2597 l
-2410 2597 l
-2415 2597 l
-2419 2597 l
-2424 2597 l
-S
-2383 5292 m
-2386 5294 l
-2388 5297 l
-2392 5297 l
-2397 5297 l
-2401 5297 l
-2403 5299 l
-2406 5301 l
-2410 5301 l
-2415 5301 l
-2419 5301 l
-2424 5301 l
-S
-2343 2615 m
-2348 2615 l
-2350 2613 l
-2352 2611 l
-2357 2611 l
-2361 2611 l
-2365 2611 l
-2368 2609 l
-2370 2606 l
-2374 2606 l
-2379 2606 l
-2383 2606 l
-S
-2343 5283 m
-2348 5283 l
-2350 5285 l
-2352 5288 l
-2357 5288 l
-2361 5288 l
-2365 5288 l
-2368 5290 l
-2370 5292 l
-2374 5292 l
-2379 5292 l
-2383 5292 l
-S
-2319 2622 m
-2321 2620 l
-2325 2620 l
-2330 2620 l
-2332 2617 l
-2334 2615 l
-2339 2615 l
-2343 2615 l
-S
-2303 2624 m
-2307 2624 l
-2312 2624 l
-2316 2624 l
-2319 2622 l
-S
-2303 5274 m
-2307 5274 l
-2312 5274 l
-2316 5274 l
-2319 5277 l
-S
-2319 5277 m
-2321 5279 l
-2325 5279 l
-2330 5279 l
-2332 5281 l
-2334 5283 l
-2339 5283 l
-2343 5283 l
-S
-2303 2624 m
-2301 2626 l
-2298 2629 l
-2294 2629 l
-2290 2629 l
-2287 2631 l
-2285 2633 l
-2281 2633 l
-2276 2633 l
-2274 2635 l
-2272 2638 l
-2267 2638 l
-2263 2638 l
-S
-2263 5261 m
-2267 5261 l
-2272 5261 l
-2274 5263 l
-2276 5265 l
-2281 5265 l
-2285 5265 l
-2287 5268 l
-2290 5270 l
-2294 5270 l
-2298 5270 l
-2301 5272 l
-2303 5274 l
-S
-2222 2655 m
-2225 2653 l
-2227 2651 l
-2231 2651 l
-2234 2649 l
-2236 2647 l
-2240 2647 l
-2245 2647 l
-2247 2644 l
-2249 2642 l
-2254 2642 l
-2258 2642 l
-2260 2640 l
-2263 2638 l
-S
-2222 5243 m
-2225 5245 l
-2227 5247 l
-2231 5247 l
-2234 5250 l
-2236 5252 l
-2240 5252 l
-2245 5252 l
-2247 5254 l
-2249 5256 l
-2254 5256 l
-2258 5256 l
-2260 5259 l
-2263 5261 l
-S
-2198 2662 m
-2200 2660 l
-2205 2660 l
-2209 2660 l
-2211 2658 l
-2214 2655 l
-2218 2655 l
-2222 2655 l
-S
-2182 2669 m
-2187 2669 l
-2189 2667 l
-2191 2664 l
-2196 2664 l
-2198 2662 l
-S
-2182 5230 m
-2187 5230 l
-2189 5232 l
-2191 5234 l
-2196 5234 l
-2198 5236 l
-S
-2198 5236 m
-2200 5239 l
-2205 5239 l
-2209 5239 l
-2211 5241 l
-2214 5243 l
-2218 5243 l
-2222 5243 l
-S
-2142 2687 m
-2144 2685 l
-2147 2682 l
-2151 2682 l
-2155 2682 l
-2158 2680 l
-2160 2678 l
-2164 2678 l
-2167 2676 l
-2169 2673 l
-2173 2673 l
-2176 2671 l
-2178 2669 l
-2182 2669 l
-S
-2142 5212 m
-2144 5214 l
-2147 5216 l
-2151 5216 l
-2155 5216 l
-2158 5218 l
-2160 5221 l
-2164 5221 l
-2167 5223 l
-2169 5225 l
-2173 5225 l
-2176 5227 l
-2178 5230 l
-2182 5230 l
-S
-2109 2702 m
-2111 2700 l
-2115 2700 l
-2117 2698 l
-2120 2696 l
-2124 2696 l
-2126 2693 l
-2129 2691 l
-2133 2691 l
-2135 2689 l
-2138 2687 l
-2142 2687 l
-S
-2102 2705 m
-2106 2705 l
-2109 2702 l
-S
-2102 5194 m
-2106 5194 l
-2109 5196 l
-S
-2109 5196 m
-2111 5198 l
-2115 5198 l
-2117 5201 l
-2120 5203 l
-2124 5203 l
-2126 5205 l
-2129 5207 l
-2133 5207 l
-2135 5209 l
-2138 5212 l
-2142 5212 l
-S
-2102 2705 m
-2100 2707 l
-2097 2709 l
-2093 2709 l
-2091 2711 l
-2088 2714 l
-2084 2714 l
-2082 2716 l
-2079 2718 l
-2075 2718 l
-2073 2720 l
-2071 2723 l
-2066 2723 l
-2064 2725 l
-2062 2727 l
-S
-2062 5171 m
-2064 5174 l
-2066 5176 l
-2071 5176 l
-2073 5178 l
-2075 5180 l
-2079 5180 l
-2082 5183 l
-2084 5185 l
-2088 5185 l
-2091 5187 l
-2093 5189 l
-2097 5189 l
-2100 5192 l
-2102 5194 l
-S
-2028 2743 m
-2030 2740 l
-2035 2740 l
-2037 2738 l
-2039 2736 l
-2044 2736 l
-2046 2734 l
-2048 2731 l
-2053 2731 l
-2055 2729 l
-2057 2727 l
-2062 2727 l
-S
-2021 2749 m
-2024 2747 l
-2026 2745 l
-2028 2743 l
-S
-2021 5149 m
-2024 5151 l
-2026 5154 l
-2028 5156 l
-S
-2028 5156 m
-2030 5158 l
-2035 5158 l
-2037 5160 l
-2039 5163 l
-2044 5163 l
-2046 5165 l
-2048 5167 l
-2053 5167 l
-2055 5169 l
-2057 5171 l
-2062 5171 l
-S
-1981 2772 m
-1983 2769 l
-1986 2767 l
-1990 2767 l
-1992 2765 l
-1995 2763 l
-1997 2760 l
-1999 2758 l
-2003 2758 l
-2006 2756 l
-2008 2754 l
-2012 2754 l
-2015 2752 l
-2017 2749 l
-2021 2749 l
-S
-1981 5127 m
-1983 5129 l
-1986 5131 l
-1990 5131 l
-1992 5133 l
-1995 5136 l
-1997 5138 l
-1999 5140 l
-2003 5140 l
-2006 5142 l
-2008 5145 l
-2012 5145 l
-2015 5147 l
-2017 5149 l
-2021 5149 l
-S
-1961 2783 m
-1963 2781 l
-1968 2781 l
-1970 2778 l
-1972 2776 l
-1977 2776 l
-1979 2774 l
-1981 2772 l
-S
-1941 2798 m
-1943 2796 l
-1945 2794 l
-1948 2792 l
-1950 2790 l
-1954 2790 l
-1957 2787 l
-1959 2785 l
-1961 2783 l
-S
-1941 5100 m
-1943 5102 l
-1945 5104 l
-1948 5107 l
-1950 5109 l
-1954 5109 l
-1957 5111 l
-1959 5113 l
-1961 5116 l
-S
-1961 5116 m
-1963 5118 l
-1968 5118 l
-1970 5120 l
-1972 5122 l
-1977 5122 l
-1979 5125 l
-1981 5127 l
-S
-1903 2823 m
-1905 2821 l
-1907 2819 l
-1910 2816 l
-1914 2816 l
-1916 2814 l
-1919 2812 l
-1921 2810 l
-1923 2807 l
-1928 2807 l
-1930 2805 l
-1932 2803 l
-1934 2801 l
-1936 2798 l
-1941 2798 l
-S
-1901 2825 m
-1903 2823 l
-S
-1901 5073 m
-1903 5075 l
-S
-1903 5075 m
-1905 5078 l
-1907 5080 l
-1910 5082 l
-1914 5082 l
-1916 5084 l
-1919 5087 l
-1921 5089 l
-1923 5091 l
-1928 5091 l
-1930 5093 l
-1932 5096 l
-1934 5098 l
-1936 5100 l
-1941 5100 l
-S
-1901 2825 m
-1898 2828 l
-1896 2830 l
-1892 2830 l
-1890 2832 l
-1887 2834 l
-1885 2836 l
-1883 2839 l
-1881 2841 l
-1878 2843 l
-1874 2843 l
-1872 2845 l
-1869 2848 l
-1867 2850 l
-1865 2852 l
-1863 2854 l
-1860 2857 l
-S
-1860 5042 m
-1863 5044 l
-1865 5046 l
-1867 5049 l
-1869 5051 l
-1872 5053 l
-1874 5055 l
-1878 5055 l
-1881 5058 l
-1883 5060 l
-1885 5062 l
-1887 5064 l
-1890 5066 l
-1892 5069 l
-1896 5069 l
-1898 5071 l
-1901 5073 l
-S
-1849 2863 m
-1852 2861 l
-1854 2859 l
-1856 2857 l
-1860 2857 l
-S
-1820 2888 m
-1823 2886 l
-1825 2883 l
-1827 2881 l
-1829 2879 l
-1831 2877 l
-1834 2874 l
-1836 2872 l
-1838 2870 l
-1843 2870 l
-1845 2868 l
-1847 2866 l
-1849 2863 l
-S
-1820 5011 m
-1823 5013 l
-1825 5015 l
-1827 5017 l
-1829 5020 l
-1831 5022 l
-1834 5024 l
-1836 5026 l
-1838 5028 l
-1843 5028 l
-1845 5031 l
-1847 5033 l
-1849 5035 l
-S
-1849 5035 m
-1852 5037 l
-1854 5040 l
-1856 5042 l
-1860 5042 l
-S
-1800 2903 m
-1802 2901 l
-1805 2899 l
-1807 2897 l
-1809 2895 l
-1811 2892 l
-1816 2892 l
-1818 2890 l
-1820 2888 l
-S
-1780 2924 m
-1782 2921 l
-1785 2919 l
-1787 2917 l
-1789 2915 l
-1791 2912 l
-1793 2910 l
-1796 2908 l
-1798 2906 l
-1800 2903 l
-S
-1780 4975 m
-1782 4977 l
-1785 4979 l
-1787 4982 l
-1789 4984 l
-1791 4986 l
-1793 4988 l
-1796 4990 l
-1798 4993 l
-1800 4995 l
-S
-1800 4995 m
-1802 4997 l
-1805 4999 l
-1807 5002 l
-1809 5004 l
-1811 5006 l
-1816 5006 l
-1818 5008 l
-1820 5011 l
-S
-1755 2944 m
-1758 2941 l
-1760 2939 l
-1762 2937 l
-1764 2935 l
-1767 2933 l
-1769 2930 l
-1771 2928 l
-1773 2926 l
-1776 2924 l
-1780 2924 l
-S
-1740 2959 m
-1742 2957 l
-1744 2955 l
-1747 2953 l
-1749 2950 l
-1751 2948 l
-1753 2946 l
-1755 2944 l
-S
-1740 4939 m
-1742 4941 l
-1744 4944 l
-1747 4946 l
-1749 4948 l
-1751 4950 l
-1753 4953 l
-1755 4955 l
-S
-1755 4955 m
-1758 4957 l
-1760 4959 l
-1762 4961 l
-1764 4964 l
-1767 4966 l
-1769 4968 l
-1771 4970 l
-1773 4973 l
-1776 4975 l
-1780 4975 l
-S
-1715 2984 m
-1717 2982 l
-1720 2979 l
-1722 2977 l
-1724 2975 l
-1726 2973 l
-1729 2971 l
-1731 2968 l
-1733 2966 l
-1735 2964 l
-1738 2962 l
-1740 2959 l
-S
-1700 3000 m
-1702 2997 l
-1704 2995 l
-1706 2993 l
-1709 2991 l
-1711 2988 l
-1713 2986 l
-1715 2984 l
-S
-1700 4899 m
-1702 4901 l
-1704 4903 l
-1706 4906 l
-1709 4908 l
-1711 4910 l
-1713 4912 l
-1715 4915 l
-S
-1715 4915 m
-1717 4917 l
-1720 4919 l
-1722 4921 l
-1724 4923 l
-1726 4926 l
-1729 4928 l
-1731 4930 l
-1733 4932 l
-1735 4935 l
-1738 4937 l
-1740 4939 l
-S
-1679 3024 m
-1679 3020 l
-1682 3017 l
-1684 3015 l
-1686 3013 l
-1688 3011 l
-1691 3009 l
-1693 3006 l
-1695 3004 l
-1697 3002 l
-1700 3000 l
-S
-1659 3044 m
-1662 3042 l
-1664 3040 l
-1666 3038 l
-1668 3035 l
-1671 3033 l
-1673 3031 l
-1675 3029 l
-1677 3026 l
-1679 3024 l
-S
-1659 4854 m
-1662 4856 l
-1664 4859 l
-1666 4861 l
-1668 4863 l
-1671 4865 l
-1673 4868 l
-1675 4870 l
-1677 4872 l
-1679 4874 l
-S
-1679 4874 m
-1679 4879 l
-1682 4881 l
-1684 4883 l
-1686 4885 l
-1688 4888 l
-1691 4890 l
-1693 4892 l
-1695 4894 l
-1697 4897 l
-1700 4899 l
-S
-1644 3064 m
-1646 3062 l
-1648 3060 l
-1648 3055 l
-1650 3053 l
-1653 3051 l
-1655 3049 l
-1657 3047 l
-1659 3044 l
-S
-1619 3093 m
-1621 3091 l
-1624 3089 l
-1626 3087 l
-1626 3082 l
-1628 3080 l
-1630 3078 l
-1633 3076 l
-1635 3073 l
-1637 3071 l
-1639 3069 l
-1642 3067 l
-1644 3064 l
-S
-1619 4805 m
-1621 4807 l
-1624 4810 l
-1626 4812 l
-1626 4816 l
-1628 4818 l
-1630 4821 l
-1633 4823 l
-1635 4825 l
-1637 4827 l
-1639 4830 l
-1642 4832 l
-1644 4834 l
-S
-1644 4834 m
-1646 4836 l
-1648 4839 l
-1648 4843 l
-1650 4845 l
-1653 4847 l
-1655 4850 l
-1657 4852 l
-1659 4854 l
-S
-1612 3105 m
-1612 3100 l
-1615 3098 l
-1617 3096 l
-1619 3093 l
-S
-1612 3105 m
-1610 3107 l
-1608 3109 l
-1606 3111 l
-1604 3114 l
-1601 3116 l
-1599 3118 l
-1599 3122 l
-1597 3125 l
-1595 3127 l
-1592 3129 l
-1590 3131 l
-1588 3134 l
-1586 3136 l
-1586 3140 l
-1583 3143 l
-1581 3145 l
-S
-1579 3147 m
-1581 3145 l
-S
-1579 4751 m
-1581 4754 l
-S
-1581 4754 m
-1583 4756 l
-1586 4758 l
-1586 4763 l
-1588 4765 l
-1590 4767 l
-1592 4769 l
-1595 4772 l
-1597 4774 l
-1599 4776 l
-1599 4780 l
-1601 4783 l
-1604 4785 l
-1606 4787 l
-1608 4789 l
-1610 4792 l
-1612 4794 l
-S
-1612 4794 m
-1612 4798 l
-1615 4801 l
-1617 4803 l
-1619 4805 l
-S
-1579 3147 m
-1577 3149 l
-1574 3152 l
-1572 3154 l
-1572 3158 l
-1570 3160 l
-1568 3163 l
-1566 3165 l
-1563 3167 l
-1563 3172 l
-1561 3174 l
-1559 3176 l
-1557 3178 l
-1554 3181 l
-1554 3185 l
-S
-1539 3205 m
-1541 3203 l
-1543 3201 l
-1545 3198 l
-1545 3194 l
-1548 3192 l
-1550 3190 l
-1552 3187 l
-1554 3185 l
-S
-1539 4693 m
-1541 4696 l
-1543 4698 l
-1545 4700 l
-1545 4704 l
-1548 4707 l
-1550 4709 l
-1552 4711 l
-1554 4713 l
-S
-1554 4713 m
-1554 4718 l
-1557 4720 l
-1559 4722 l
-1561 4725 l
-1563 4727 l
-1563 4731 l
-1566 4734 l
-1568 4736 l
-1570 4738 l
-1572 4740 l
-1572 4745 l
-1574 4747 l
-1577 4749 l
-1579 4751 l
-S
-1528 3225 m
-1530 3223 l
-1532 3221 l
-1532 3216 l
-1534 3214 l
-1536 3212 l
-1536 3207 l
-1539 3205 l
-S
-1528 3225 m
-1525 3227 l
-1523 3230 l
-1523 3234 l
-1521 3236 l
-1519 3239 l
-1516 3241 l
-1514 3243 l
-1514 3248 l
-1512 3250 l
-1510 3252 l
-1510 3257 l
-1507 3259 l
-1505 3261 l
-1505 3265 l
-S
-1499 3272 m
-1501 3270 l
-1503 3268 l
-1505 3265 l
-S
-1499 4626 m
-1501 4629 l
-1503 4631 l
-1505 4633 l
-S
-1505 4633 m
-1505 4637 l
-1507 4640 l
-1510 4642 l
-1510 4646 l
-1512 4649 l
-1514 4651 l
-1514 4655 l
-1516 4658 l
-1519 4660 l
-1521 4662 l
-1523 4664 l
-1523 4669 l
-1525 4671 l
-1528 4673 l
-S
-1528 4673 m
-1530 4675 l
-1532 4678 l
-1532 4682 l
-1534 4684 l
-1536 4687 l
-1536 4691 l
-1539 4693 l
-S
-1483 3306 m
-1483 3301 l
-1485 3299 l
-1487 3297 l
-1487 3292 l
-1490 3290 l
-1492 3288 l
-1492 3283 l
-1494 3281 l
-1496 3279 l
-1496 3274 l
-1499 3272 l
-S
-1483 3306 m
-1481 3308 l
-1478 3310 l
-1478 3315 l
-1476 3317 l
-1474 3319 l
-1474 3324 l
-1472 3326 l
-1469 3328 l
-1469 3333 l
-1467 3335 l
-1465 3337 l
-1465 3341 l
-1463 3344 l
-1461 3346 l
-S
-1458 3353 m
-1461 3350 l
-1461 3346 l
-S
-1458 4546 m
-1461 4548 l
-1461 4553 l
-S
-1461 4553 m
-1463 4555 l
-1465 4557 l
-1465 4561 l
-1467 4564 l
-1469 4566 l
-1469 4570 l
-1472 4573 l
-1474 4575 l
-1474 4579 l
-1476 4582 l
-1478 4584 l
-1478 4588 l
-1481 4591 l
-1483 4593 l
-S
-1483 4593 m
-1483 4597 l
-1485 4599 l
-1487 4602 l
-1487 4606 l
-1490 4608 l
-1492 4611 l
-1492 4615 l
-1494 4617 l
-1496 4620 l
-1496 4624 l
-1499 4626 l
-S
-1443 3386 m
-1443 3382 l
-1445 3379 l
-1447 3377 l
-1447 3373 l
-1449 3371 l
-1452 3368 l
-1452 3364 l
-1454 3362 l
-1456 3359 l
-1456 3355 l
-1458 3353 l
-S
-1443 3386 m
-1440 3388 l
-1438 3391 l
-1438 3395 l
-1438 3400 l
-1436 3402 l
-1434 3404 l
-1434 3408 l
-1431 3411 l
-1429 3413 l
-1429 3417 l
-1427 3420 l
-1425 3422 l
-1425 3426 l
-S
-1418 3442 m
-1420 3440 l
-1420 3435 l
-1423 3433 l
-1425 3431 l
-1425 3426 l
-S
-1418 4456 m
-1420 4459 l
-1420 4463 l
-1423 4465 l
-1425 4468 l
-1425 4472 l
-S
-1425 4472 m
-1425 4477 l
-1427 4479 l
-1429 4481 l
-1429 4486 l
-1431 4488 l
-1434 4490 l
-1434 4494 l
-1436 4497 l
-1438 4499 l
-1438 4503 l
-1438 4508 l
-1440 4510 l
-1443 4512 l
-S
-1443 4512 m
-1443 4517 l
-1445 4519 l
-1447 4521 l
-1447 4526 l
-1449 4528 l
-1452 4530 l
-1452 4535 l
-1454 4537 l
-1456 4539 l
-1456 4544 l
-1458 4546 l
-S
-1411 3467 m
-1411 3462 l
-1411 3458 l
-1414 3455 l
-1416 3453 l
-1416 3449 l
-1416 3444 l
-1418 3442 l
-S
-1411 3467 m
-1409 3469 l
-1407 3471 l
-1407 3476 l
-1405 3478 l
-1402 3480 l
-1402 3484 l
-1402 3489 l
-1400 3491 l
-1398 3493 l
-1398 3498 l
-1398 3502 l
-1396 3505 l
-1393 3507 l
-S
-1393 3507 m
-1393 3511 l
-1393 3516 l
-1391 3518 l
-1389 3520 l
-1389 3525 l
-1389 3529 l
-1387 3531 l
-1385 3534 l
-1385 3538 l
-1385 3543 l
-1382 3545 l
-1380 3547 l
-S
-1378 3563 m
-1380 3560 l
-1380 3556 l
-1380 3551 l
-1380 3547 l
-S
-1378 4336 m
-1380 4338 l
-1380 4342 l
-1380 4347 l
-1380 4351 l
-S
-1380 4351 m
-1382 4354 l
-1385 4356 l
-1385 4360 l
-1385 4365 l
-1387 4367 l
-1389 4369 l
-1389 4374 l
-1389 4378 l
-1391 4380 l
-1393 4383 l
-1393 4387 l
-1393 4392 l
-S
-1393 4392 m
-1396 4394 l
-1398 4396 l
-1398 4401 l
-1398 4405 l
-1400 4407 l
-1402 4410 l
-1402 4414 l
-1402 4418 l
-1405 4421 l
-1407 4423 l
-1407 4427 l
-1409 4430 l
-1411 4432 l
-S
-1411 4432 m
-1411 4436 l
-1411 4441 l
-1414 4443 l
-1416 4445 l
-1416 4450 l
-1416 4454 l
-1418 4456 l
-S
-1371 3587 m
-1371 3583 l
-1371 3578 l
-1373 3576 l
-1376 3574 l
-1376 3569 l
-1376 3565 l
-1378 3563 l
-S
-1371 3587 m
-1371 3592 l
-1369 3594 l
-1367 3596 l
-1367 3601 l
-1367 3605 l
-1367 3610 l
-1364 3612 l
-1362 3614 l
-1362 3619 l
-1362 3623 l
-1362 3627 l
-S
-1362 3627 m
-1360 3630 l
-1358 3632 l
-1358 3636 l
-1358 3641 l
-1358 3645 l
-1355 3648 l
-1353 3650 l
-1353 3654 l
-1353 3659 l
-1353 3663 l
-1353 3668 l
-S
-1353 3668 m
-1351 3670 l
-1349 3672 l
-1349 3677 l
-1349 3681 l
-1349 3686 l
-1349 3690 l
-1347 3692 l
-1344 3694 l
-1344 3699 l
-1344 3703 l
-1344 3708 l
-S
-1338 3746 m
-1340 3744 l
-1340 3739 l
-1340 3735 l
-1340 3730 l
-1340 3726 l
-1340 3721 l
-1342 3719 l
-1344 3717 l
-1344 3712 l
-1344 3708 l
-S
-1338 4153 m
-1340 4155 l
-1340 4159 l
-1340 4164 l
-1340 4168 l
-1340 4173 l
-1340 4177 l
-1342 4179 l
-1344 4182 l
-1344 4186 l
-1344 4191 l
-S
-1344 4191 m
-1344 4195 l
-1344 4199 l
-1344 4204 l
-1347 4206 l
-1349 4208 l
-1349 4213 l
-1349 4217 l
-1349 4222 l
-1349 4226 l
-1351 4229 l
-1353 4231 l
-S
-1353 4231 m
-1353 4235 l
-1353 4240 l
-1353 4244 l
-1353 4249 l
-1355 4251 l
-1358 4253 l
-1358 4258 l
-1358 4262 l
-1358 4267 l
-1360 4269 l
-1362 4271 l
-S
-1362 4271 m
-1362 4275 l
-1362 4280 l
-1362 4284 l
-1364 4287 l
-1367 4289 l
-1367 4293 l
-1367 4298 l
-1367 4302 l
-1369 4305 l
-1371 4307 l
-1371 4311 l
-S
-1371 4311 m
-1371 4316 l
-1371 4320 l
-1373 4322 l
-1376 4325 l
-1376 4329 l
-1376 4334 l
-1378 4336 l
-S
-1335 3748 m
-1338 3746 l
-S
-1335 3748 m
-1335 3753 l
-1335 3757 l
-1335 3762 l
-1335 3766 l
-1335 3770 l
-1335 3775 l
-1333 3777 l
-1331 3779 l
-1331 3784 l
-1331 3788 l
-S
-1331 3788 m
-1331 3793 l
-1331 3797 l
-1331 3802 l
-1331 3806 l
-1331 3811 l
-1331 3815 l
-1329 3817 l
-1326 3820 l
-1326 3824 l
-1326 3829 l
-S
-1326 3829 m
-1326 3833 l
-1326 3838 l
-1326 3842 l
-1326 3846 l
-1326 3851 l
-1326 3855 l
-1326 3860 l
-1326 3864 l
-1326 3869 l
-S
-1326 3869 m
-1326 3873 l
-1326 3878 l
-1324 3880 l
-1322 3882 l
-1322 3887 l
-1322 3891 l
-1322 3896 l
-1322 3900 l
-1322 3905 l
-1322 3909 l
-S
-1322 3909 m
-1322 3913 l
-1322 3918 l
-1322 3922 l
-1322 3927 l
-1322 3931 l
-1322 3936 l
-1322 3940 l
-1322 3945 l
-1322 3949 l
-S
-1322 3949 m
-1322 3954 l
-1322 3958 l
-1322 3963 l
-1322 3967 l
-1322 3972 l
-1322 3976 l
-1322 3981 l
-1322 3985 l
-1322 3989 l
-S
-1322 3989 m
-1322 3994 l
-1322 3998 l
-1322 4003 l
-1322 4007 l
-1322 4012 l
-1322 4016 l
-1324 4018 l
-1326 4021 l
-1326 4025 l
-1326 4030 l
-S
-1326 4030 m
-1326 4034 l
-1326 4039 l
-1326 4043 l
-1326 4048 l
-1326 4052 l
-1326 4056 l
-1326 4061 l
-1326 4065 l
-1326 4070 l
-S
-1326 4070 m
-1326 4074 l
-1326 4079 l
-1329 4081 l
-1331 4083 l
-1331 4088 l
-1331 4092 l
-1331 4097 l
-1331 4101 l
-1331 4106 l
-1331 4110 l
-S
-1331 4110 m
-1331 4115 l
-1331 4119 l
-1333 4121 l
-1335 4124 l
-1335 4128 l
-1335 4132 l
-1335 4137 l
-1335 4141 l
-1335 4146 l
-1335 4150 l
-S
-1338 4153 m
-1335 4150 l
-S
-1 g
-3879 3594 m
-3928 3594 l
-3928 3595 l
-3879 3595 l
-3842 3595 m
-3928 3595 l
-3928 3596 l
-3842 3596 l
-3806 3596 m
-3928 3596 l
-3928 3597 l
-3806 3597 l
-3806 3597 m
-3928 3597 l
-3928 3614 l
-3806 3614 l
-3806 3614 m
-3929 3614 l
-3929 3636 l
-3806 3636 l
-3807 3636 m
-3929 3636 l
-3929 3655 l
-3807 3655 l
-3807 3655 m
-3930 3655 l
-3930 3674 l
-3807 3674 l
-3808 3674 m
-3930 3674 l
-3930 3696 l
-3808 3696 l
-3808 3696 m
-3931 3696 l
-3931 3712 l
-3808 3712 l
-3809 3712 m
-3931 3712 l
-3931 3737 l
-3809 3737 l
-3809 3737 m
-3932 3737 l
-3932 3750 l
-3809 3750 l
-3810 3750 m
-3932 3750 l
-3932 3778 l
-3810 3778 l
-3810 3778 m
-3933 3778 l
-3933 3788 l
-3810 3788 l
-3811 3788 m
-3933 3788 l
-3933 3819 l
-3811 3819 l
-3811 3819 m
-3934 3819 l
-3934 3826 l
-3811 3826 l
-3812 3826 m
-3934 3826 l
-3934 3861 l
-3812 3861 l
-3812 3861 m
-3934 3861 l
-3934 3862 l
-3812 3862 l
-3812 3862 m
-3894 3862 l
-3894 3863 l
-3812 3863 l
-3812 3863 m
-3854 3863 l
-3854 3864 l
-3812 3864 l
-Y
-3927.5 3593.7 m
-3806 3597 l
-3813 3864 l
-3934 3861 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3824 3626 m
-3825 3672 l
-3858 3646 l
-3858 3658 l
-3863 3666 l
-3867 3670 l
-3879 3674 l
-3888 3674 l
-3900 3670 l
-3908 3661 l
-3912 3648 l
-3912 3636 l
-3907 3623 l
-3903 3619 l
-3895 3615 l
-S
-3826 3726 m
-3830 3713 l
-3843 3705 l
-3863 3700 l
-3876 3699 l
-3897 3703 l
-3910 3711 l
-3914 3724 l
-3914 3732 l
-3911 3745 l
-3898 3753 l
-3877 3758 l
-3865 3758 l
-3844 3755 l
-3831 3747 l
-3827 3734 l
-3826 3726 l
-S
-3829 3809 m
-3832 3797 l
-3845 3788 l
-3866 3783 l
-3878 3783 l
-3899 3787 l
-3912 3795 l
-3916 3807 l
-3917 3815 l
-3913 3828 l
-3900 3837 l
-3880 3841 l
-3867 3842 l
-3846 3838 l
-3833 3830 l
-3829 3818 l
-3829 3809 l
-S
-1 g
-2463 2687 m
-2467 2687 l
-2467 2688 l
-2463 2688 l
-2460 2688 m
-2467 2688 l
-2467 2689 l
-2460 2689 l
-2458 2689 m
-2468 2689 l
-2468 2690 l
-2458 2690 l
-2455 2690 m
-2468 2690 l
-2468 2691 l
-2455 2691 l
-2453 2691 m
-2468 2691 l
-2468 2692 l
-2453 2692 l
-2450 2692 m
-2469 2692 l
-2469 2693 l
-2450 2693 l
-2448 2693 m
-2469 2693 l
-2469 2694 l
-2448 2694 l
-2445 2694 m
-2470 2694 l
-2470 2695 l
-2445 2695 l
-2442 2695 m
-2470 2695 l
-2470 2696 l
-2442 2696 l
-2440 2696 m
-2470 2696 l
-2470 2697 l
-2440 2697 l
-2437 2697 m
-2471 2697 l
-2471 2698 l
-2437 2698 l
-2435 2698 m
-2471 2698 l
-2471 2699 l
-2435 2699 l
-2432 2699 m
-2472 2699 l
-2472 2700 l
-2432 2700 l
-2430 2700 m
-2472 2700 l
-2472 2701 l
-2430 2701 l
-2427 2701 m
-2472 2701 l
-2472 2702 l
-2427 2702 l
-2424 2702 m
-2473 2702 l
-2473 2703 l
-2424 2703 l
-2422 2703 m
-2473 2703 l
-2473 2704 l
-2422 2704 l
-2419 2704 m
-2473 2704 l
-2473 2705 l
-2419 2705 l
-2417 2705 m
-2474 2705 l
-2474 2706 l
-2417 2706 l
-2414 2706 m
-2474 2706 l
-2474 2707 l
-2414 2707 l
-2412 2707 m
-2475 2707 l
-2475 2708 l
-2412 2708 l
-2409 2708 m
-2475 2708 l
-2475 2709 l
-2409 2709 l
-2406 2709 m
-2475 2709 l
-2475 2710 l
-2406 2710 l
-2404 2710 m
-2476 2710 l
-2476 2711 l
-2404 2711 l
-2401 2711 m
-2476 2711 l
-2476 2712 l
-2401 2712 l
-2399 2712 m
-2477 2712 l
-2477 2713 l
-2399 2713 l
-2396 2713 m
-2477 2713 l
-2477 2714 l
-2396 2714 l
-2394 2714 m
-2477 2714 l
-2477 2715 l
-2394 2715 l
-2391 2715 m
-2478 2715 l
-2478 2716 l
-2391 2716 l
-2388 2716 m
-2478 2716 l
-2478 2717 l
-2388 2717 l
-2386 2717 m
-2479 2717 l
-2479 2718 l
-2386 2718 l
-2383 2718 m
-2479 2718 l
-2479 2719 l
-2383 2719 l
-2381 2719 m
-2479 2719 l
-2479 2720 l
-2381 2720 l
-2378 2720 m
-2480 2720 l
-2480 2721 l
-2378 2721 l
-2376 2721 m
-2480 2721 l
-2480 2722 l
-2376 2722 l
-2373 2722 m
-2480 2722 l
-2480 2723 l
-2373 2723 l
-2371 2723 m
-2481 2723 l
-2481 2724 l
-2371 2724 l
-2368 2724 m
-2481 2724 l
-2481 2725 l
-2368 2725 l
-2365 2725 m
-2482 2725 l
-2482 2726 l
-2365 2726 l
-2363 2726 m
-2482 2726 l
-2482 2727 l
-2363 2727 l
-2360 2727 m
-2482 2727 l
-2482 2728 l
-2360 2728 l
-2358 2728 m
-2483 2728 l
-2483 2729 l
-2358 2729 l
-2355 2729 m
-2483 2729 l
-2483 2730 l
-2355 2730 l
-2353 2730 m
-2484 2730 l
-2484 2731 l
-2353 2731 l
-2350 2731 m
-2484 2731 l
-2484 2732 l
-2350 2732 l
-2347 2732 m
-2484 2732 l
-2484 2733 l
-2347 2733 l
-2345 2733 m
-2485 2733 l
-2485 2734 l
-2345 2734 l
-2342 2734 m
-2485 2734 l
-2485 2735 l
-2342 2735 l
-2340 2735 m
-2486 2735 l
-2486 2736 l
-2340 2736 l
-2337 2736 m
-2486 2736 l
-2486 2737 l
-2337 2737 l
-2335 2737 m
-2486 2737 l
-2486 2738 l
-2335 2738 l
-2332 2738 m
-2487 2738 l
-2487 2739 l
-2332 2739 l
-2329 2739 m
-2487 2739 l
-2487 2740 l
-2329 2740 l
-2327 2740 m
-2487 2740 l
-2487 2741 l
-2327 2741 l
-2324 2741 m
-2488 2741 l
-2488 2742 l
-2324 2742 l
-2322 2742 m
-2488 2742 l
-2488 2743 l
-2322 2743 l
-2319 2743 m
-2489 2743 l
-2489 2744 l
-2319 2744 l
-2317 2744 m
-2489 2744 l
-2489 2745 l
-2317 2745 l
-2314 2745 m
-2489 2745 l
-2489 2746 l
-2314 2746 l
-2311 2746 m
-2490 2746 l
-2490 2747 l
-2311 2747 l
-2309 2747 m
-2490 2747 l
-2490 2748 l
-2309 2748 l
-2306 2748 m
-2491 2748 l
-2491 2749 l
-2306 2749 l
-2304 2749 m
-2491 2749 l
-2491 2750 l
-2304 2750 l
-2301 2750 m
-2491 2750 l
-2491 2751 l
-2301 2751 l
-2299 2751 m
-2492 2751 l
-2492 2752 l
-2299 2752 l
-2296 2752 m
-2492 2752 l
-2492 2753 l
-2296 2753 l
-2294 2753 m
-2493 2753 l
-2493 2754 l
-2294 2754 l
-2291 2754 m
-2493 2754 l
-2493 2755 l
-2291 2755 l
-2288 2755 m
-2493 2755 l
-2493 2756 l
-2288 2756 l
-2286 2756 m
-2494 2756 l
-2494 2757 l
-2286 2757 l
-2283 2757 m
-2494 2757 l
-2494 2758 l
-2283 2758 l
-2281 2758 m
-2494 2758 l
-2494 2759 l
-2281 2759 l
-2278 2759 m
-2495 2759 l
-2495 2760 l
-2278 2760 l
-2276 2760 m
-2495 2760 l
-2495 2761 l
-2276 2761 l
-2273 2761 m
-2496 2761 l
-2496 2762 l
-2273 2762 l
-2270 2762 m
-2496 2762 l
-2496 2763 l
-2270 2763 l
-2268 2763 m
-2496 2763 l
-2496 2764 l
-2268 2764 l
-2265 2764 m
-2497 2764 l
-2497 2765 l
-2265 2765 l
-2263 2765 m
-2497 2765 l
-2497 2766 l
-2263 2766 l
-2260 2766 m
-2498 2766 l
-2498 2767 l
-2260 2767 l
-2258 2767 m
-2498 2767 l
-2498 2768 l
-2258 2768 l
-2255 2768 m
-2498 2768 l
-2498 2769 l
-2255 2769 l
-2252 2769 m
-2499 2769 l
-2499 2770 l
-2252 2770 l
-2250 2770 m
-2499 2770 l
-2499 2771 l
-2250 2771 l
-2247 2771 m
-2500 2771 l
-2500 2772 l
-2247 2772 l
-2245 2772 m
-2500 2772 l
-2500 2773 l
-2245 2773 l
-2242 2773 m
-2500 2773 l
-2500 2774 l
-2242 2774 l
-2240 2774 m
-2501 2774 l
-2501 2775 l
-2240 2775 l
-2237 2775 m
-2501 2775 l
-2501 2776 l
-2237 2776 l
-2234 2776 m
-2501 2776 l
-2501 2777 l
-2234 2777 l
-2232 2777 m
-2502 2777 l
-2502 2778 l
-2232 2778 l
-2229 2778 m
-2502 2778 l
-2502 2779 l
-2229 2779 l
-2227 2779 m
-2503 2779 l
-2503 2780 l
-2227 2780 l
-2224 2780 m
-2503 2780 l
-2503 2781 l
-2224 2781 l
-2222 2781 m
-2503 2781 l
-2503 2782 l
-2222 2782 l
-2219 2782 m
-2504 2782 l
-2504 2783 l
-2219 2783 l
-2217 2783 m
-2504 2783 l
-2504 2784 l
-2217 2784 l
-2217 2784 m
-2505 2784 l
-2505 2787 l
-2217 2787 l
-2218 2787 m
-2506 2787 l
-2506 2789 l
-2218 2789 l
-2218 2789 m
-2507 2789 l
-2507 2790 l
-2218 2790 l
-2219 2790 m
-2507 2790 l
-2507 2792 l
-2219 2792 l
-2220 2792 m
-2508 2792 l
-2508 2795 l
-2220 2795 l
-2221 2795 m
-2509 2795 l
-2509 2797 l
-2221 2797 l
-2222 2797 m
-2510 2797 l
-2510 2800 l
-2222 2800 l
-2223 2800 m
-2510 2800 l
-2510 2801 l
-2223 2801 l
-2223 2801 m
-2508 2801 l
-2508 2802 l
-2223 2802 l
-2224 2802 m
-2505 2802 l
-2505 2803 l
-2224 2803 l
-2224 2803 m
-2503 2803 l
-2503 2804 l
-2224 2804 l
-2224 2804 m
-2500 2804 l
-2500 2805 l
-2224 2805 l
-2225 2805 m
-2498 2805 l
-2498 2806 l
-2225 2806 l
-2225 2806 m
-2495 2806 l
-2495 2807 l
-2225 2807 l
-2225 2807 m
-2492 2807 l
-2492 2808 l
-2225 2808 l
-2226 2808 m
-2490 2808 l
-2490 2809 l
-2226 2809 l
-2226 2809 m
-2487 2809 l
-2487 2810 l
-2226 2810 l
-2227 2810 m
-2485 2810 l
-2485 2811 l
-2227 2811 l
-2227 2811 m
-2482 2811 l
-2482 2812 l
-2227 2812 l
-2227 2812 m
-2480 2812 l
-2480 2813 l
-2227 2813 l
-2228 2813 m
-2477 2813 l
-2477 2814 l
-2228 2814 l
-2228 2814 m
-2474 2814 l
-2474 2815 l
-2228 2815 l
-2229 2815 m
-2472 2815 l
-2472 2816 l
-2229 2816 l
-2229 2816 m
-2469 2816 l
-2469 2817 l
-2229 2817 l
-2229 2817 m
-2467 2817 l
-2467 2818 l
-2229 2818 l
-2230 2818 m
-2464 2818 l
-2464 2819 l
-2230 2819 l
-2230 2819 m
-2462 2819 l
-2462 2820 l
-2230 2820 l
-2231 2820 m
-2459 2820 l
-2459 2821 l
-2231 2821 l
-2231 2821 m
-2457 2821 l
-2457 2822 l
-2231 2822 l
-2231 2822 m
-2454 2822 l
-2454 2823 l
-2231 2823 l
-2232 2823 m
-2451 2823 l
-2451 2824 l
-2232 2824 l
-2232 2824 m
-2449 2824 l
-2449 2825 l
-2232 2825 l
-2232 2825 m
-2446 2825 l
-2446 2826 l
-2232 2826 l
-2233 2826 m
-2444 2826 l
-2444 2827 l
-2233 2827 l
-2233 2827 m
-2441 2827 l
-2441 2828 l
-2233 2828 l
-2234 2828 m
-2439 2828 l
-2439 2829 l
-2234 2829 l
-2234 2829 m
-2436 2829 l
-2436 2830 l
-2234 2830 l
-2234 2830 m
-2433 2830 l
-2433 2831 l
-2234 2831 l
-2235 2831 m
-2431 2831 l
-2431 2832 l
-2235 2832 l
-2235 2832 m
-2428 2832 l
-2428 2833 l
-2235 2833 l
-2236 2833 m
-2426 2833 l
-2426 2834 l
-2236 2834 l
-2236 2834 m
-2423 2834 l
-2423 2835 l
-2236 2835 l
-2236 2835 m
-2421 2835 l
-2421 2836 l
-2236 2836 l
-2237 2836 m
-2418 2836 l
-2418 2837 l
-2237 2837 l
-2237 2837 m
-2415 2837 l
-2415 2838 l
-2237 2838 l
-2238 2838 m
-2413 2838 l
-2413 2839 l
-2238 2839 l
-2238 2839 m
-2410 2839 l
-2410 2840 l
-2238 2840 l
-2238 2840 m
-2408 2840 l
-2408 2841 l
-2238 2841 l
-2239 2841 m
-2405 2841 l
-2405 2842 l
-2239 2842 l
-2239 2842 m
-2403 2842 l
-2403 2843 l
-2239 2843 l
-2239 2843 m
-2400 2843 l
-2400 2844 l
-2239 2844 l
-2240 2844 m
-2397 2844 l
-2397 2845 l
-2240 2845 l
-2240 2845 m
-2395 2845 l
-2395 2846 l
-2240 2846 l
-2241 2846 m
-2392 2846 l
-2392 2847 l
-2241 2847 l
-2241 2847 m
-2390 2847 l
-2390 2848 l
-2241 2848 l
-2241 2848 m
-2387 2848 l
-2387 2849 l
-2241 2849 l
-2242 2849 m
-2385 2849 l
-2385 2850 l
-2242 2850 l
-2242 2850 m
-2382 2850 l
-2382 2851 l
-2242 2851 l
-2243 2851 m
-2380 2851 l
-2380 2852 l
-2243 2852 l
-2243 2852 m
-2377 2852 l
-2377 2853 l
-2243 2853 l
-2243 2853 m
-2374 2853 l
-2374 2854 l
-2243 2854 l
-2244 2854 m
-2372 2854 l
-2372 2855 l
-2244 2855 l
-2244 2855 m
-2369 2855 l
-2369 2856 l
-2244 2856 l
-2245 2856 m
-2367 2856 l
-2367 2857 l
-2245 2857 l
-2245 2857 m
-2364 2857 l
-2364 2858 l
-2245 2858 l
-2245 2858 m
-2362 2858 l
-2362 2859 l
-2245 2859 l
-2246 2859 m
-2359 2859 l
-2359 2860 l
-2246 2860 l
-2246 2860 m
-2356 2860 l
-2356 2861 l
-2246 2861 l
-2246 2861 m
-2354 2861 l
-2354 2862 l
-2246 2862 l
-2247 2862 m
-2351 2862 l
-2351 2863 l
-2247 2863 l
-2247 2863 m
-2349 2863 l
-2349 2864 l
-2247 2864 l
-2248 2864 m
-2346 2864 l
-2346 2865 l
-2248 2865 l
-2248 2865 m
-2344 2865 l
-2344 2866 l
-2248 2866 l
-2248 2866 m
-2341 2866 l
-2341 2867 l
-2248 2867 l
-2249 2867 m
-2338 2867 l
-2338 2868 l
-2249 2868 l
-2249 2868 m
-2336 2868 l
-2336 2869 l
-2249 2869 l
-2250 2869 m
-2333 2869 l
-2333 2870 l
-2250 2870 l
-2250 2870 m
-2331 2870 l
-2331 2871 l
-2250 2871 l
-2250 2871 m
-2328 2871 l
-2328 2872 l
-2250 2872 l
-2251 2872 m
-2326 2872 l
-2326 2873 l
-2251 2873 l
-2251 2873 m
-2323 2873 l
-2323 2874 l
-2251 2874 l
-2252 2874 m
-2321 2874 l
-2321 2875 l
-2252 2875 l
-2252 2875 m
-2318 2875 l
-2318 2876 l
-2252 2876 l
-2252 2876 m
-2315 2876 l
-2315 2877 l
-2252 2877 l
-2253 2877 m
-2313 2877 l
-2313 2878 l
-2253 2878 l
-2253 2878 m
-2310 2878 l
-2310 2879 l
-2253 2879 l
-2253 2879 m
-2308 2879 l
-2308 2880 l
-2253 2880 l
-2254 2880 m
-2305 2880 l
-2305 2881 l
-2254 2881 l
-2254 2881 m
-2303 2881 l
-2303 2882 l
-2254 2882 l
-2255 2882 m
-2300 2882 l
-2300 2883 l
-2255 2883 l
-2255 2883 m
-2297 2883 l
-2297 2884 l
-2255 2884 l
-2255 2884 m
-2295 2884 l
-2295 2885 l
-2255 2885 l
-2256 2885 m
-2292 2885 l
-2292 2886 l
-2256 2886 l
-2256 2886 m
-2290 2886 l
-2290 2887 l
-2256 2887 l
-2257 2887 m
-2287 2887 l
-2287 2888 l
-2257 2888 l
-2257 2888 m
-2285 2888 l
-2285 2889 l
-2257 2889 l
-2257 2889 m
-2282 2889 l
-2282 2890 l
-2257 2890 l
-2258 2890 m
-2279 2890 l
-2279 2891 l
-2258 2891 l
-2258 2891 m
-2277 2891 l
-2277 2892 l
-2258 2892 l
-2259 2892 m
-2274 2892 l
-2274 2893 l
-2259 2893 l
-2259 2893 m
-2272 2893 l
-2272 2894 l
-2259 2894 l
-2259 2894 m
-2269 2894 l
-2269 2895 l
-2259 2895 l
-2260 2895 m
-2267 2895 l
-2267 2896 l
-2260 2896 l
-2260 2896 m
-2264 2896 l
-2264 2897 l
-2260 2897 l
-Y
-2509.9 2800 m
-2466 2687 l
-2217 2784 l
-2261 2897 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2456 2731 m
-2455 2727 l
-2448 2721 l
-2442 2719 l
-2433 2718 l
-2418 2724 l
-2411 2731 l
-2409 2736 l
-2408 2746 l
-2411 2753 l
-2418 2760 l
-2430 2768 l
-2484 2792 l
-2430 2813 l
-S
-2336 2756 m
-2396 2795 l
-2338 2818 l
-S
-2336 2756 m
-2368 2838 l
-S
-2274 2780 m
-2287 2780 l
-2299 2788 l
-2311 2806 l
-2315 2818 l
-2319 2839 l
-2316 2853 l
-2305 2862 l
-2298 2865 l
-2284 2866 l
-2272 2857 l
-2261 2839 l
-2256 2827 l
-2252 2806 l
-2256 2792 l
-2266 2783 l
-2274 2780 l
-S
-1 g
-1926 3331 m
-1931 3331 l
-1931 3332 l
-1926 3332 l
-1921 3332 m
-1932 3332 l
-1932 3333 l
-1921 3333 l
-1916 3333 m
-1932 3333 l
-1932 3334 l
-1916 3334 l
-1910 3334 m
-1932 3334 l
-1932 3335 l
-1910 3335 l
-1905 3335 m
-1932 3335 l
-1932 3336 l
-1905 3336 l
-1900 3336 m
-1932 3336 l
-1932 3337 l
-1900 3337 l
-1895 3337 m
-1932 3337 l
-1932 3338 l
-1895 3338 l
-1890 3338 m
-1933 3338 l
-1933 3339 l
-1890 3339 l
-1884 3339 m
-1933 3339 l
-1933 3340 l
-1884 3340 l
-1879 3340 m
-1933 3340 l
-1933 3341 l
-1879 3341 l
-1874 3341 m
-1933 3341 l
-1933 3342 l
-1874 3342 l
-1869 3342 m
-1933 3342 l
-1933 3343 l
-1869 3343 l
-1864 3343 m
-1934 3343 l
-1934 3344 l
-1864 3344 l
-1858 3344 m
-1934 3344 l
-1934 3345 l
-1858 3345 l
-1853 3345 m
-1934 3345 l
-1934 3346 l
-1853 3346 l
-1848 3346 m
-1934 3346 l
-1934 3347 l
-1848 3347 l
-1843 3347 m
-1934 3347 l
-1934 3348 l
-1843 3348 l
-1838 3348 m
-1935 3348 l
-1935 3349 l
-1838 3349 l
-1832 3349 m
-1935 3349 l
-1935 3350 l
-1832 3350 l
-1827 3350 m
-1935 3350 l
-1935 3351 l
-1827 3351 l
-1822 3351 m
-1935 3351 l
-1935 3352 l
-1822 3352 l
-1817 3352 m
-1935 3352 l
-1935 3353 l
-1817 3353 l
-1812 3353 m
-1936 3353 l
-1936 3354 l
-1812 3354 l
-1812 3354 m
-1936 3354 l
-1936 3359 l
-1812 3359 l
-1812 3359 m
-1937 3359 l
-1937 3360 l
-1812 3360 l
-1813 3360 m
-1937 3360 l
-1937 3364 l
-1813 3364 l
-1813 3364 m
-1938 3364 l
-1938 3365 l
-1813 3365 l
-1814 3365 m
-1938 3365 l
-1938 3369 l
-1814 3369 l
-1814 3369 m
-1939 3369 l
-1939 3370 l
-1814 3370 l
-1815 3370 m
-1939 3370 l
-1939 3375 l
-1815 3375 l
-1815 3375 m
-1940 3375 l
-1940 3376 l
-1815 3376 l
-1816 3376 m
-1940 3376 l
-1940 3380 l
-1816 3380 l
-1816 3380 m
-1941 3380 l
-1941 3381 l
-1816 3381 l
-1817 3381 m
-1941 3381 l
-1941 3385 l
-1817 3385 l
-1817 3385 m
-1942 3385 l
-1942 3386 l
-1817 3386 l
-1818 3386 m
-1942 3386 l
-1942 3390 l
-1818 3390 l
-1818 3390 m
-1943 3390 l
-1943 3392 l
-1818 3392 l
-1819 3392 m
-1943 3392 l
-1943 3396 l
-1819 3396 l
-1819 3396 m
-1944 3396 l
-1944 3397 l
-1819 3397 l
-1820 3397 m
-1944 3397 l
-1944 3401 l
-1820 3401 l
-1820 3401 m
-1945 3401 l
-1945 3402 l
-1820 3402 l
-1821 3402 m
-1945 3402 l
-1945 3406 l
-1821 3406 l
-1821 3406 m
-1946 3406 l
-1946 3408 l
-1821 3408 l
-1822 3408 m
-1946 3408 l
-1946 3412 l
-1822 3412 l
-1822 3412 m
-1947 3412 l
-1947 3413 l
-1822 3413 l
-1823 3413 m
-1947 3413 l
-1947 3417 l
-1823 3417 l
-1823 3417 m
-1948 3417 l
-1948 3418 l
-1823 3418 l
-1824 3418 m
-1948 3418 l
-1948 3422 l
-1824 3422 l
-1824 3422 m
-1949 3422 l
-1949 3424 l
-1824 3424 l
-1825 3424 m
-1949 3424 l
-1949 3427 l
-1825 3427 l
-1825 3427 m
-1950 3427 l
-1950 3429 l
-1825 3429 l
-1826 3429 m
-1950 3429 l
-1950 3433 l
-1826 3433 l
-1826 3433 m
-1951 3433 l
-1951 3434 l
-1826 3434 l
-1827 3434 m
-1951 3434 l
-1951 3438 l
-1827 3438 l
-1827 3438 m
-1952 3438 l
-1952 3440 l
-1827 3440 l
-1828 3440 m
-1952 3440 l
-1952 3443 l
-1828 3443 l
-1828 3443 m
-1953 3443 l
-1953 3445 l
-1828 3445 l
-1829 3445 m
-1953 3445 l
-1953 3448 l
-1829 3448 l
-1829 3448 m
-1954 3448 l
-1954 3450 l
-1829 3450 l
-1830 3450 m
-1954 3450 l
-1954 3454 l
-1830 3454 l
-1830 3454 m
-1955 3454 l
-1955 3456 l
-1830 3456 l
-1831 3456 m
-1955 3456 l
-1955 3459 l
-1831 3459 l
-1831 3459 m
-1956 3459 l
-1956 3461 l
-1831 3461 l
-1832 3461 m
-1956 3461 l
-1956 3464 l
-1832 3464 l
-1832 3464 m
-1957 3464 l
-1957 3466 l
-1832 3466 l
-1833 3466 m
-1957 3466 l
-1957 3470 l
-1833 3470 l
-1833 3470 m
-1958 3470 l
-1958 3472 l
-1833 3472 l
-1834 3472 m
-1958 3472 l
-1958 3475 l
-1834 3475 l
-1834 3475 m
-1959 3475 l
-1959 3477 l
-1834 3477 l
-1835 3477 m
-1959 3477 l
-1959 3480 l
-1835 3480 l
-1835 3480 m
-1960 3480 l
-1960 3482 l
-1835 3482 l
-1836 3482 m
-1960 3482 l
-1960 3485 l
-1836 3485 l
-1836 3485 m
-1961 3485 l
-1961 3487 l
-1836 3487 l
-1837 3487 m
-1961 3487 l
-1961 3491 l
-1837 3491 l
-1837 3491 m
-1962 3491 l
-1962 3493 l
-1837 3493 l
-1838 3493 m
-1962 3493 l
-1962 3496 l
-1838 3496 l
-1838 3496 m
-1963 3496 l
-1963 3498 l
-1838 3498 l
-1839 3498 m
-1963 3498 l
-1963 3501 l
-1839 3501 l
-1839 3501 m
-1964 3501 l
-1964 3503 l
-1839 3503 l
-1840 3503 m
-1964 3503 l
-1964 3507 l
-1840 3507 l
-1840 3507 m
-1965 3507 l
-1965 3509 l
-1840 3509 l
-1841 3509 m
-1965 3509 l
-1965 3512 l
-1841 3512 l
-1841 3512 m
-1966 3512 l
-1966 3514 l
-1841 3514 l
-1842 3514 m
-1966 3514 l
-1966 3517 l
-1842 3517 l
-1842 3517 m
-1967 3517 l
-1967 3519 l
-1842 3519 l
-1843 3519 m
-1967 3519 l
-1967 3522 l
-1843 3522 l
-1843 3522 m
-1968 3522 l
-1968 3525 l
-1843 3525 l
-1844 3525 m
-1968 3525 l
-1968 3528 l
-1844 3528 l
-1844 3528 m
-1969 3528 l
-1969 3530 l
-1844 3530 l
-1845 3530 m
-1969 3530 l
-1969 3533 l
-1845 3533 l
-1845 3533 m
-1970 3533 l
-1970 3535 l
-1845 3535 l
-1846 3535 m
-1970 3535 l
-1970 3538 l
-1846 3538 l
-1846 3538 m
-1971 3538 l
-1971 3541 l
-1846 3541 l
-1847 3541 m
-1971 3541 l
-1971 3544 l
-1847 3544 l
-1847 3544 m
-1972 3544 l
-1972 3546 l
-1847 3546 l
-1848 3546 m
-1972 3546 l
-1972 3549 l
-1848 3549 l
-1848 3549 m
-1973 3549 l
-1973 3551 l
-1848 3551 l
-1849 3551 m
-1973 3551 l
-1973 3554 l
-1849 3554 l
-1849 3554 m
-1974 3554 l
-1974 3557 l
-1849 3557 l
-1850 3557 m
-1974 3557 l
-1974 3559 l
-1850 3559 l
-1850 3559 m
-1975 3559 l
-1975 3562 l
-1850 3562 l
-1851 3562 m
-1975 3562 l
-1975 3565 l
-1851 3565 l
-1851 3565 m
-1976 3565 l
-1976 3567 l
-1851 3567 l
-1852 3567 m
-1976 3567 l
-1976 3570 l
-1852 3570 l
-1852 3570 m
-1977 3570 l
-1977 3573 l
-1852 3573 l
-1853 3573 m
-1977 3573 l
-1977 3575 l
-1853 3575 l
-1853 3575 m
-1978 3575 l
-1978 3578 l
-1853 3578 l
-1854 3578 m
-1978 3578 l
-1978 3581 l
-1854 3581 l
-1854 3581 m
-1978 3581 l
-1978 3582 l
-1854 3582 l
-1854 3582 m
-1973 3582 l
-1973 3583 l
-1854 3583 l
-1855 3583 m
-1968 3583 l
-1968 3584 l
-1855 3584 l
-1855 3584 m
-1963 3584 l
-1963 3585 l
-1855 3585 l
-1855 3585 m
-1958 3585 l
-1958 3586 l
-1855 3586 l
-1855 3586 m
-1953 3586 l
-1953 3587 l
-1855 3587 l
-1855 3587 m
-1947 3587 l
-1947 3588 l
-1855 3588 l
-1855 3588 m
-1942 3588 l
-1942 3589 l
-1855 3589 l
-1856 3589 m
-1937 3589 l
-1937 3590 l
-1856 3590 l
-1856 3590 m
-1932 3590 l
-1932 3591 l
-1856 3591 l
-1856 3591 m
-1927 3591 l
-1927 3592 l
-1856 3592 l
-1856 3592 m
-1922 3592 l
-1922 3593 l
-1856 3593 l
-1856 3593 m
-1916 3593 l
-1916 3594 l
-1856 3594 l
-1857 3594 m
-1911 3594 l
-1911 3595 l
-1857 3595 l
-1857 3595 m
-1906 3595 l
-1906 3596 l
-1857 3596 l
-1857 3596 m
-1901 3596 l
-1901 3597 l
-1857 3597 l
-1857 3597 m
-1896 3597 l
-1896 3598 l
-1857 3598 l
-1857 3598 m
-1891 3598 l
-1891 3599 l
-1857 3599 l
-1858 3599 m
-1885 3599 l
-1885 3600 l
-1858 3600 l
-1858 3600 m
-1880 3600 l
-1880 3601 l
-1858 3601 l
-1858 3601 m
-1875 3601 l
-1875 3602 l
-1858 3602 l
-1858 3602 m
-1870 3602 l
-1870 3603 l
-1858 3603 l
-1858 3603 m
-1865 3603 l
-1865 3604 l
-1858 3604 l
-Y
-1930.7 3331.2 m
-1812 3354 l
-1859 3604 l
-1978 3581 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1848 3368 m
-1846 3377 l
-1836 3392 l
-1922 3375 l
-S
-1849 3461 m
-1851 3448 l
-1858 3443 l
-1867 3441 l
-1876 3444 l
-1881 3451 l
-1888 3467 l
-1895 3478 l
-1905 3485 l
-1914 3487 l
-1926 3485 l
-1933 3479 l
-1937 3475 l
-1938 3461 l
-1935 3445 l
-1929 3434 l
-1924 3430 l
-1915 3428 l
-1903 3430 l
-1895 3436 l
-1889 3445 l
-1887 3459 l
-1886 3476 l
-1883 3485 l
-1876 3490 l
-1868 3492 l
-1859 3489 l
-1852 3478 l
-1849 3461 l
-S
-1866 3548 m
-1867 3535 l
-1878 3524 l
-1898 3516 l
-1910 3514 l
-1931 3514 l
-1945 3520 l
-1952 3531 l
-1953 3539 l
-1952 3553 l
-1941 3563 l
-1921 3571 l
-1909 3573 l
-1887 3573 l
-1874 3567 l
-1867 3556 l
-1866 3548 l
-S
-1 g
-2178 3840 m
-2182 3840 l
-2182 3841 l
-2178 3841 l
-2178 3841 m
-2183 3841 l
-2183 3842 l
-2178 3842 l
-2177 3842 m
-2184 3842 l
-2184 3843 l
-2177 3843 l
-2176 3843 m
-2186 3843 l
-2186 3844 l
-2176 3844 l
-2175 3844 m
-2187 3844 l
-2187 3845 l
-2175 3845 l
-2174 3845 m
-2188 3845 l
-2188 3846 l
-2174 3846 l
-2174 3846 m
-2189 3846 l
-2189 3847 l
-2174 3847 l
-2173 3847 m
-2191 3847 l
-2191 3848 l
-2173 3848 l
-2172 3848 m
-2192 3848 l
-2192 3849 l
-2172 3849 l
-2171 3849 m
-2193 3849 l
-2193 3850 l
-2171 3850 l
-2170 3850 m
-2194 3850 l
-2194 3851 l
-2170 3851 l
-2170 3851 m
-2196 3851 l
-2196 3852 l
-2170 3852 l
-2169 3852 m
-2197 3852 l
-2197 3853 l
-2169 3853 l
-2168 3853 m
-2198 3853 l
-2198 3854 l
-2168 3854 l
-2167 3854 m
-2199 3854 l
-2199 3855 l
-2167 3855 l
-2166 3855 m
-2201 3855 l
-2201 3856 l
-2166 3856 l
-2166 3856 m
-2202 3856 l
-2202 3857 l
-2166 3857 l
-2165 3857 m
-2203 3857 l
-2203 3858 l
-2165 3858 l
-2164 3858 m
-2204 3858 l
-2204 3859 l
-2164 3859 l
-2163 3859 m
-2206 3859 l
-2206 3860 l
-2163 3860 l
-2162 3860 m
-2207 3860 l
-2207 3861 l
-2162 3861 l
-2162 3861 m
-2208 3861 l
-2208 3862 l
-2162 3862 l
-2161 3862 m
-2209 3862 l
-2209 3863 l
-2161 3863 l
-2160 3863 m
-2211 3863 l
-2211 3864 l
-2160 3864 l
-2159 3864 m
-2212 3864 l
-2212 3865 l
-2159 3865 l
-2158 3865 m
-2213 3865 l
-2213 3866 l
-2158 3866 l
-2158 3866 m
-2214 3866 l
-2214 3867 l
-2158 3867 l
-2157 3867 m
-2216 3867 l
-2216 3868 l
-2157 3868 l
-2156 3868 m
-2217 3868 l
-2217 3869 l
-2156 3869 l
-2155 3869 m
-2218 3869 l
-2218 3870 l
-2155 3870 l
-2154 3870 m
-2219 3870 l
-2219 3871 l
-2154 3871 l
-2154 3871 m
-2221 3871 l
-2221 3872 l
-2154 3872 l
-2153 3872 m
-2222 3872 l
-2222 3873 l
-2153 3873 l
-2152 3873 m
-2223 3873 l
-2223 3874 l
-2152 3874 l
-2151 3874 m
-2224 3874 l
-2224 3875 l
-2151 3875 l
-2150 3875 m
-2226 3875 l
-2226 3876 l
-2150 3876 l
-2150 3876 m
-2227 3876 l
-2227 3877 l
-2150 3877 l
-2149 3877 m
-2228 3877 l
-2228 3878 l
-2149 3878 l
-2148 3878 m
-2229 3878 l
-2229 3879 l
-2148 3879 l
-2147 3879 m
-2231 3879 l
-2231 3880 l
-2147 3880 l
-2146 3880 m
-2232 3880 l
-2232 3881 l
-2146 3881 l
-2146 3881 m
-2233 3881 l
-2233 3882 l
-2146 3882 l
-2145 3882 m
-2234 3882 l
-2234 3883 l
-2145 3883 l
-2144 3883 m
-2236 3883 l
-2236 3884 l
-2144 3884 l
-2143 3884 m
-2237 3884 l
-2237 3885 l
-2143 3885 l
-2143 3885 m
-2238 3885 l
-2238 3886 l
-2143 3886 l
-2142 3886 m
-2239 3886 l
-2239 3887 l
-2142 3887 l
-2141 3887 m
-2241 3887 l
-2241 3888 l
-2141 3888 l
-2140 3888 m
-2242 3888 l
-2242 3889 l
-2140 3889 l
-2139 3889 m
-2243 3889 l
-2243 3890 l
-2139 3890 l
-2139 3890 m
-2244 3890 l
-2244 3891 l
-2139 3891 l
-2138 3891 m
-2246 3891 l
-2246 3892 l
-2138 3892 l
-2137 3892 m
-2247 3892 l
-2247 3893 l
-2137 3893 l
-2136 3893 m
-2248 3893 l
-2248 3894 l
-2136 3894 l
-2135 3894 m
-2249 3894 l
-2249 3895 l
-2135 3895 l
-2135 3895 m
-2251 3895 l
-2251 3896 l
-2135 3896 l
-2134 3896 m
-2252 3896 l
-2252 3897 l
-2134 3897 l
-2133 3897 m
-2253 3897 l
-2253 3898 l
-2133 3898 l
-2132 3898 m
-2254 3898 l
-2254 3899 l
-2132 3899 l
-2131 3899 m
-2256 3899 l
-2256 3900 l
-2131 3900 l
-2131 3900 m
-2257 3900 l
-2257 3901 l
-2131 3901 l
-2130 3901 m
-2258 3901 l
-2258 3902 l
-2130 3902 l
-2129 3902 m
-2259 3902 l
-2259 3903 l
-2129 3903 l
-2128 3903 m
-2261 3903 l
-2261 3904 l
-2128 3904 l
-2127 3904 m
-2262 3904 l
-2262 3905 l
-2127 3905 l
-2127 3905 m
-2263 3905 l
-2263 3906 l
-2127 3906 l
-2126 3906 m
-2264 3906 l
-2264 3907 l
-2126 3907 l
-2125 3907 m
-2266 3907 l
-2266 3908 l
-2125 3908 l
-2124 3908 m
-2267 3908 l
-2267 3909 l
-2124 3909 l
-2123 3909 m
-2268 3909 l
-2268 3910 l
-2123 3910 l
-2123 3910 m
-2269 3910 l
-2269 3911 l
-2123 3911 l
-2122 3911 m
-2271 3911 l
-2271 3912 l
-2122 3912 l
-2121 3912 m
-2272 3912 l
-2272 3913 l
-2121 3913 l
-2120 3913 m
-2273 3913 l
-2273 3914 l
-2120 3914 l
-2119 3914 m
-2274 3914 l
-2274 3915 l
-2119 3915 l
-2119 3915 m
-2276 3915 l
-2276 3916 l
-2119 3916 l
-2118 3916 m
-2277 3916 l
-2277 3917 l
-2118 3917 l
-2117 3917 m
-2278 3917 l
-2278 3918 l
-2117 3918 l
-2116 3918 m
-2279 3918 l
-2279 3919 l
-2116 3919 l
-2115 3919 m
-2281 3919 l
-2281 3920 l
-2115 3920 l
-2115 3920 m
-2282 3920 l
-2282 3921 l
-2115 3921 l
-2114 3921 m
-2283 3921 l
-2283 3922 l
-2114 3922 l
-2113 3922 m
-2284 3922 l
-2284 3923 l
-2113 3923 l
-2112 3923 m
-2286 3923 l
-2286 3924 l
-2112 3924 l
-2111 3924 m
-2287 3924 l
-2287 3925 l
-2111 3925 l
-2111 3925 m
-2288 3925 l
-2288 3926 l
-2111 3926 l
-2110 3926 m
-2289 3926 l
-2289 3927 l
-2110 3927 l
-2109 3927 m
-2291 3927 l
-2291 3928 l
-2109 3928 l
-2108 3928 m
-2292 3928 l
-2292 3929 l
-2108 3929 l
-2107 3929 m
-2293 3929 l
-2293 3930 l
-2107 3930 l
-2107 3930 m
-2294 3930 l
-2294 3931 l
-2107 3931 l
-2106 3931 m
-2296 3931 l
-2296 3932 l
-2106 3932 l
-2105 3932 m
-2297 3932 l
-2297 3933 l
-2105 3933 l
-2104 3933 m
-2298 3933 l
-2298 3934 l
-2104 3934 l
-2104 3934 m
-2299 3934 l
-2299 3935 l
-2104 3935 l
-2104 3935 m
-2301 3935 l
-2301 3936 l
-2104 3936 l
-2105 3936 m
-2302 3936 l
-2302 3937 l
-2105 3937 l
-2106 3937 m
-2303 3937 l
-2303 3938 l
-2106 3938 l
-2107 3938 m
-2304 3938 l
-2304 3939 l
-2107 3939 l
-2109 3939 m
-2306 3939 l
-2306 3940 l
-2109 3940 l
-2110 3940 m
-2307 3940 l
-2307 3941 l
-2110 3941 l
-2111 3941 m
-2308 3941 l
-2308 3942 l
-2111 3942 l
-2112 3942 m
-2309 3942 l
-2309 3943 l
-2112 3943 l
-2114 3943 m
-2311 3943 l
-2311 3944 l
-2114 3944 l
-2115 3944 m
-2312 3944 l
-2312 3945 l
-2115 3945 l
-2116 3945 m
-2313 3945 l
-2313 3946 l
-2116 3946 l
-2117 3946 m
-2314 3946 l
-2314 3947 l
-2117 3947 l
-2119 3947 m
-2316 3947 l
-2316 3948 l
-2119 3948 l
-2120 3948 m
-2317 3948 l
-2317 3949 l
-2120 3949 l
-2121 3949 m
-2318 3949 l
-2318 3950 l
-2121 3950 l
-2122 3950 m
-2319 3950 l
-2319 3951 l
-2122 3951 l
-2124 3951 m
-2321 3951 l
-2321 3952 l
-2124 3952 l
-2125 3952 m
-2322 3952 l
-2322 3953 l
-2125 3953 l
-2126 3953 m
-2323 3953 l
-2323 3954 l
-2126 3954 l
-2127 3954 m
-2324 3954 l
-2324 3955 l
-2127 3955 l
-2129 3955 m
-2326 3955 l
-2326 3956 l
-2129 3956 l
-2130 3956 m
-2327 3956 l
-2327 3957 l
-2130 3957 l
-2131 3957 m
-2328 3957 l
-2328 3958 l
-2131 3958 l
-2132 3958 m
-2329 3958 l
-2329 3959 l
-2132 3959 l
-2134 3959 m
-2331 3959 l
-2331 3960 l
-2134 3960 l
-2135 3960 m
-2332 3960 l
-2332 3961 l
-2135 3961 l
-2136 3961 m
-2333 3961 l
-2333 3962 l
-2136 3962 l
-2138 3962 m
-2334 3962 l
-2334 3963 l
-2138 3963 l
-2139 3963 m
-2336 3963 l
-2336 3964 l
-2139 3964 l
-2140 3964 m
-2337 3964 l
-2337 3965 l
-2140 3965 l
-2141 3965 m
-2338 3965 l
-2338 3966 l
-2141 3966 l
-2143 3966 m
-2339 3966 l
-2339 3967 l
-2143 3967 l
-2144 3967 m
-2341 3967 l
-2341 3968 l
-2144 3968 l
-2145 3968 m
-2342 3968 l
-2342 3969 l
-2145 3969 l
-2146 3969 m
-2343 3969 l
-2343 3970 l
-2146 3970 l
-2148 3970 m
-2344 3970 l
-2344 3971 l
-2148 3971 l
-2149 3971 m
-2346 3971 l
-2346 3972 l
-2149 3972 l
-2150 3972 m
-2347 3972 l
-2347 3973 l
-2150 3973 l
-2151 3973 m
-2348 3973 l
-2348 3974 l
-2151 3974 l
-2153 3974 m
-2349 3974 l
-2349 3975 l
-2153 3975 l
-2154 3975 m
-2351 3975 l
-2351 3976 l
-2154 3976 l
-2155 3976 m
-2352 3976 l
-2352 3977 l
-2155 3977 l
-2156 3977 m
-2353 3977 l
-2353 3978 l
-2156 3978 l
-2158 3978 m
-2354 3978 l
-2354 3979 l
-2158 3979 l
-2159 3979 m
-2356 3979 l
-2356 3980 l
-2159 3980 l
-2160 3980 m
-2357 3980 l
-2357 3981 l
-2160 3981 l
-2161 3981 m
-2358 3981 l
-2358 3982 l
-2161 3982 l
-2163 3982 m
-2359 3982 l
-2359 3983 l
-2163 3983 l
-2164 3983 m
-2361 3983 l
-2361 3984 l
-2164 3984 l
-2165 3984 m
-2362 3984 l
-2362 3985 l
-2165 3985 l
-2166 3985 m
-2363 3985 l
-2363 3986 l
-2166 3986 l
-2168 3986 m
-2364 3986 l
-2364 3987 l
-2168 3987 l
-2169 3987 m
-2366 3987 l
-2366 3988 l
-2169 3988 l
-2170 3988 m
-2367 3988 l
-2367 3989 l
-2170 3989 l
-2172 3989 m
-2368 3989 l
-2368 3990 l
-2172 3990 l
-2173 3990 m
-2369 3990 l
-2369 3991 l
-2173 3991 l
-2174 3991 m
-2371 3991 l
-2371 3992 l
-2174 3992 l
-2175 3992 m
-2372 3992 l
-2372 3993 l
-2175 3993 l
-2177 3993 m
-2373 3993 l
-2373 3994 l
-2177 3994 l
-2178 3994 m
-2374 3994 l
-2374 3995 l
-2178 3995 l
-2179 3995 m
-2376 3995 l
-2376 3996 l
-2179 3996 l
-2180 3996 m
-2377 3996 l
-2377 3997 l
-2180 3997 l
-2182 3997 m
-2378 3997 l
-2378 3998 l
-2182 3998 l
-2183 3998 m
-2379 3998 l
-2379 3999 l
-2183 3999 l
-2184 3999 m
-2379 3999 l
-2379 4000 l
-2184 4000 l
-2185 4000 m
-2379 4000 l
-2379 4001 l
-2185 4001 l
-2187 4001 m
-2378 4001 l
-2378 4002 l
-2187 4002 l
-2188 4002 m
-2377 4002 l
-2377 4003 l
-2188 4003 l
-2189 4003 m
-2376 4003 l
-2376 4004 l
-2189 4004 l
-2190 4004 m
-2375 4004 l
-2375 4005 l
-2190 4005 l
-2192 4005 m
-2375 4005 l
-2375 4006 l
-2192 4006 l
-2193 4006 m
-2374 4006 l
-2374 4007 l
-2193 4007 l
-2194 4007 m
-2373 4007 l
-2373 4008 l
-2194 4008 l
-2195 4008 m
-2372 4008 l
-2372 4009 l
-2195 4009 l
-2197 4009 m
-2371 4009 l
-2371 4010 l
-2197 4010 l
-2198 4010 m
-2371 4010 l
-2371 4011 l
-2198 4011 l
-2199 4011 m
-2370 4011 l
-2370 4012 l
-2199 4012 l
-2200 4012 m
-2369 4012 l
-2369 4013 l
-2200 4013 l
-2202 4013 m
-2368 4013 l
-2368 4014 l
-2202 4014 l
-2203 4014 m
-2367 4014 l
-2367 4015 l
-2203 4015 l
-2204 4015 m
-2367 4015 l
-2367 4016 l
-2204 4016 l
-2206 4016 m
-2366 4016 l
-2366 4017 l
-2206 4017 l
-2207 4017 m
-2365 4017 l
-2365 4018 l
-2207 4018 l
-2208 4018 m
-2364 4018 l
-2364 4019 l
-2208 4019 l
-2209 4019 m
-2363 4019 l
-2363 4020 l
-2209 4020 l
-2211 4020 m
-2363 4020 l
-2363 4021 l
-2211 4021 l
-2212 4021 m
-2362 4021 l
-2362 4022 l
-2212 4022 l
-2213 4022 m
-2361 4022 l
-2361 4023 l
-2213 4023 l
-2214 4023 m
-2360 4023 l
-2360 4024 l
-2214 4024 l
-2216 4024 m
-2359 4024 l
-2359 4025 l
-2216 4025 l
-2217 4025 m
-2358 4025 l
-2358 4026 l
-2217 4026 l
-2218 4026 m
-2358 4026 l
-2358 4027 l
-2218 4027 l
-2219 4027 m
-2357 4027 l
-2357 4028 l
-2219 4028 l
-2221 4028 m
-2356 4028 l
-2356 4029 l
-2221 4029 l
-2222 4029 m
-2355 4029 l
-2355 4030 l
-2222 4030 l
-2223 4030 m
-2354 4030 l
-2354 4031 l
-2223 4031 l
-2224 4031 m
-2354 4031 l
-2354 4032 l
-2224 4032 l
-2226 4032 m
-2353 4032 l
-2353 4033 l
-2226 4033 l
-2227 4033 m
-2352 4033 l
-2352 4034 l
-2227 4034 l
-2228 4034 m
-2351 4034 l
-2351 4035 l
-2228 4035 l
-2229 4035 m
-2350 4035 l
-2350 4036 l
-2229 4036 l
-2231 4036 m
-2350 4036 l
-2350 4037 l
-2231 4037 l
-2232 4037 m
-2349 4037 l
-2349 4038 l
-2232 4038 l
-2233 4038 m
-2348 4038 l
-2348 4039 l
-2233 4039 l
-2234 4039 m
-2347 4039 l
-2347 4040 l
-2234 4040 l
-2236 4040 m
-2346 4040 l
-2346 4041 l
-2236 4041 l
-2237 4041 m
-2346 4041 l
-2346 4042 l
-2237 4042 l
-2238 4042 m
-2345 4042 l
-2345 4043 l
-2238 4043 l
-2240 4043 m
-2344 4043 l
-2344 4044 l
-2240 4044 l
-2241 4044 m
-2343 4044 l
-2343 4045 l
-2241 4045 l
-2242 4045 m
-2342 4045 l
-2342 4046 l
-2242 4046 l
-2243 4046 m
-2341 4046 l
-2341 4047 l
-2243 4047 l
-2245 4047 m
-2341 4047 l
-2341 4048 l
-2245 4048 l
-2246 4048 m
-2340 4048 l
-2340 4049 l
-2246 4049 l
-2247 4049 m
-2339 4049 l
-2339 4050 l
-2247 4050 l
-2248 4050 m
-2338 4050 l
-2338 4051 l
-2248 4051 l
-2250 4051 m
-2337 4051 l
-2337 4052 l
-2250 4052 l
-2251 4052 m
-2337 4052 l
-2337 4053 l
-2251 4053 l
-2252 4053 m
-2336 4053 l
-2336 4054 l
-2252 4054 l
-2253 4054 m
-2335 4054 l
-2335 4055 l
-2253 4055 l
-2255 4055 m
-2334 4055 l
-2334 4056 l
-2255 4056 l
-2256 4056 m
-2333 4056 l
-2333 4057 l
-2256 4057 l
-2257 4057 m
-2333 4057 l
-2333 4058 l
-2257 4058 l
-2258 4058 m
-2332 4058 l
-2332 4059 l
-2258 4059 l
-2260 4059 m
-2331 4059 l
-2331 4060 l
-2260 4060 l
-2261 4060 m
-2330 4060 l
-2330 4061 l
-2261 4061 l
-2262 4061 m
-2329 4061 l
-2329 4062 l
-2262 4062 l
-2263 4062 m
-2329 4062 l
-2329 4063 l
-2263 4063 l
-2265 4063 m
-2328 4063 l
-2328 4064 l
-2265 4064 l
-2266 4064 m
-2327 4064 l
-2327 4065 l
-2266 4065 l
-2267 4065 m
-2326 4065 l
-2326 4066 l
-2267 4066 l
-2268 4066 m
-2325 4066 l
-2325 4067 l
-2268 4067 l
-2270 4067 m
-2325 4067 l
-2325 4068 l
-2270 4068 l
-2271 4068 m
-2324 4068 l
-2324 4069 l
-2271 4069 l
-2272 4069 m
-2323 4069 l
-2323 4070 l
-2272 4070 l
-2274 4070 m
-2322 4070 l
-2322 4071 l
-2274 4071 l
-2275 4071 m
-2321 4071 l
-2321 4072 l
-2275 4072 l
-2276 4072 m
-2320 4072 l
-2320 4073 l
-2276 4073 l
-2277 4073 m
-2320 4073 l
-2320 4074 l
-2277 4074 l
-2279 4074 m
-2319 4074 l
-2319 4075 l
-2279 4075 l
-2280 4075 m
-2318 4075 l
-2318 4076 l
-2280 4076 l
-2281 4076 m
-2317 4076 l
-2317 4077 l
-2281 4077 l
-2282 4077 m
-2316 4077 l
-2316 4078 l
-2282 4078 l
-2284 4078 m
-2316 4078 l
-2316 4079 l
-2284 4079 l
-2285 4079 m
-2315 4079 l
-2315 4080 l
-2285 4080 l
-2286 4080 m
-2314 4080 l
-2314 4081 l
-2286 4081 l
-2287 4081 m
-2313 4081 l
-2313 4082 l
-2287 4082 l
-2289 4082 m
-2312 4082 l
-2312 4083 l
-2289 4083 l
-2290 4083 m
-2312 4083 l
-2312 4084 l
-2290 4084 l
-2291 4084 m
-2311 4084 l
-2311 4085 l
-2291 4085 l
-2292 4085 m
-2310 4085 l
-2310 4086 l
-2292 4086 l
-2294 4086 m
-2309 4086 l
-2309 4087 l
-2294 4087 l
-2295 4087 m
-2308 4087 l
-2308 4088 l
-2295 4088 l
-2296 4088 m
-2308 4088 l
-2308 4089 l
-2296 4089 l
-2297 4089 m
-2307 4089 l
-2307 4090 l
-2297 4090 l
-2299 4090 m
-2306 4090 l
-2306 4091 l
-2299 4091 l
-2300 4091 m
-2305 4091 l
-2305 4092 l
-2300 4092 l
-2301 4092 m
-2304 4092 l
-2304 4093 l
-2301 4093 l
-Y
-2179.8 3839.8 m
-2104 3935 l
-2303 4093 l
-2379 3999 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2141 3921 m
-2145 3930 l
-2147 3947 l
-2202 3879 l
-S
-2203 3965 m
-2200 3968 l
-2198 3977 l
-2199 3983 l
-2203 3992 l
-2216 4002 l
-2225 4004 l
-2231 4003 l
-2239 4000 l
-2245 3993 l
-2247 3984 l
-2248 3969 l
-2241 3910 l
-2287 3947 l
-S
-2271 4046 m
-2264 4035 l
-2266 4020 l
-2275 4001 l
-2283 3992 l
-2299 3978 l
-2314 3973 l
-2326 3978 l
-2333 3983 l
-2340 3994 l
-2339 4009 l
-2329 4028 l
-2321 4038 l
-2305 4052 l
-2290 4056 l
-2278 4052 l
-2271 4046 l
-S
-1 g
-2789 4191 m
-2795 4191 l
-2795 4192 l
-2789 4192 l
-2789 4192 m
-2799 4192 l
-2799 4193 l
-2789 4193 l
-2789 4193 m
-2802 4193 l
-2802 4194 l
-2789 4194 l
-2789 4194 m
-2806 4194 l
-2806 4195 l
-2789 4195 l
-2788 4195 m
-2810 4195 l
-2810 4196 l
-2788 4196 l
-2788 4196 m
-2814 4196 l
-2814 4197 l
-2788 4197 l
-2788 4197 m
-2817 4197 l
-2817 4198 l
-2788 4198 l
-2788 4198 m
-2821 4198 l
-2821 4199 l
-2788 4199 l
-2787 4199 m
-2825 4199 l
-2825 4200 l
-2787 4200 l
-2787 4200 m
-2829 4200 l
-2829 4201 l
-2787 4201 l
-2787 4201 m
-2833 4201 l
-2833 4202 l
-2787 4202 l
-2786 4202 m
-2836 4202 l
-2836 4203 l
-2786 4203 l
-2786 4203 m
-2840 4203 l
-2840 4204 l
-2786 4204 l
-2786 4204 m
-2844 4204 l
-2844 4205 l
-2786 4205 l
-2786 4205 m
-2848 4205 l
-2848 4206 l
-2786 4206 l
-2785 4206 m
-2851 4206 l
-2851 4207 l
-2785 4207 l
-2785 4207 m
-2855 4207 l
-2855 4208 l
-2785 4208 l
-2785 4208 m
-2859 4208 l
-2859 4209 l
-2785 4209 l
-2785 4209 m
-2863 4209 l
-2863 4210 l
-2785 4210 l
-2784 4210 m
-2866 4210 l
-2866 4211 l
-2784 4211 l
-2784 4211 m
-2870 4211 l
-2870 4212 l
-2784 4212 l
-2784 4212 m
-2874 4212 l
-2874 4213 l
-2784 4213 l
-2784 4213 m
-2878 4213 l
-2878 4214 l
-2784 4214 l
-2783 4214 m
-2882 4214 l
-2882 4215 l
-2783 4215 l
-2783 4215 m
-2885 4215 l
-2885 4216 l
-2783 4216 l
-2783 4216 m
-2889 4216 l
-2889 4217 l
-2783 4217 l
-2782 4217 m
-2893 4217 l
-2893 4218 l
-2782 4218 l
-2782 4218 m
-2897 4218 l
-2897 4219 l
-2782 4219 l
-2782 4219 m
-2900 4219 l
-2900 4220 l
-2782 4220 l
-2782 4220 m
-2904 4220 l
-2904 4221 l
-2782 4221 l
-2781 4221 m
-2908 4221 l
-2908 4222 l
-2781 4222 l
-2781 4222 m
-2912 4222 l
-2912 4223 l
-2781 4223 l
-2781 4223 m
-2915 4223 l
-2915 4224 l
-2781 4224 l
-2781 4224 m
-2919 4224 l
-2919 4225 l
-2781 4225 l
-2780 4225 m
-2923 4225 l
-2923 4226 l
-2780 4226 l
-2780 4226 m
-2927 4226 l
-2927 4227 l
-2780 4227 l
-2780 4227 m
-2931 4227 l
-2931 4228 l
-2780 4228 l
-2780 4228 m
-2934 4228 l
-2934 4229 l
-2780 4229 l
-2779 4229 m
-2938 4229 l
-2938 4230 l
-2779 4230 l
-2779 4230 m
-2942 4230 l
-2942 4231 l
-2779 4231 l
-2779 4231 m
-2946 4231 l
-2946 4232 l
-2779 4232 l
-2778 4232 m
-2949 4232 l
-2949 4233 l
-2778 4233 l
-2778 4233 m
-2953 4233 l
-2953 4234 l
-2778 4234 l
-2778 4234 m
-2957 4234 l
-2957 4235 l
-2778 4235 l
-2778 4235 m
-2961 4235 l
-2961 4236 l
-2778 4236 l
-2777 4236 m
-2964 4236 l
-2964 4237 l
-2777 4237 l
-2777 4237 m
-2964 4237 l
-2964 4240 l
-2777 4240 l
-2776 4240 m
-2964 4240 l
-2964 4241 l
-2776 4241 l
-2776 4241 m
-2963 4241 l
-2963 4244 l
-2776 4244 l
-2775 4244 m
-2963 4244 l
-2963 4245 l
-2775 4245 l
-2775 4245 m
-2962 4245 l
-2962 4247 l
-2775 4247 l
-2774 4247 m
-2962 4247 l
-2962 4249 l
-2774 4249 l
-2774 4249 m
-2961 4249 l
-2961 4251 l
-2774 4251 l
-2773 4251 m
-2961 4251 l
-2961 4253 l
-2773 4253 l
-2773 4253 m
-2960 4253 l
-2960 4255 l
-2773 4255 l
-2772 4255 m
-2960 4255 l
-2960 4256 l
-2772 4256 l
-2772 4256 m
-2959 4256 l
-2959 4259 l
-2772 4259 l
-2771 4259 m
-2959 4259 l
-2959 4260 l
-2771 4260 l
-2771 4260 m
-2958 4260 l
-2958 4262 l
-2771 4262 l
-2770 4262 m
-2958 4262 l
-2958 4264 l
-2770 4264 l
-2770 4264 m
-2957 4264 l
-2957 4266 l
-2770 4266 l
-2769 4266 m
-2957 4266 l
-2957 4268 l
-2769 4268 l
-2769 4268 m
-2956 4268 l
-2956 4270 l
-2769 4270 l
-2768 4270 m
-2956 4270 l
-2956 4271 l
-2768 4271 l
-2768 4271 m
-2955 4271 l
-2955 4274 l
-2768 4274 l
-2767 4274 m
-2955 4274 l
-2955 4275 l
-2767 4275 l
-2767 4275 m
-2954 4275 l
-2954 4277 l
-2767 4277 l
-2766 4277 m
-2954 4277 l
-2954 4279 l
-2766 4279 l
-2766 4279 m
-2953 4279 l
-2953 4281 l
-2766 4281 l
-2765 4281 m
-2953 4281 l
-2953 4283 l
-2765 4283 l
-2765 4283 m
-2952 4283 l
-2952 4285 l
-2765 4285 l
-2764 4285 m
-2952 4285 l
-2952 4287 l
-2764 4287 l
-2764 4287 m
-2951 4287 l
-2951 4289 l
-2764 4289 l
-2763 4289 m
-2951 4289 l
-2951 4290 l
-2763 4290 l
-2763 4290 m
-2950 4290 l
-2950 4292 l
-2763 4292 l
-2762 4292 m
-2950 4292 l
-2950 4294 l
-2762 4294 l
-2762 4294 m
-2949 4294 l
-2949 4296 l
-2762 4296 l
-2761 4296 m
-2949 4296 l
-2949 4298 l
-2761 4298 l
-2761 4298 m
-2948 4298 l
-2948 4300 l
-2761 4300 l
-2760 4300 m
-2948 4300 l
-2948 4302 l
-2760 4302 l
-2760 4302 m
-2947 4302 l
-2947 4304 l
-2760 4304 l
-2759 4304 m
-2947 4304 l
-2947 4305 l
-2759 4305 l
-2759 4305 m
-2946 4305 l
-2946 4307 l
-2759 4307 l
-2759 4307 m
-2946 4307 l
-2946 4308 l
-2759 4308 l
-2759 4308 m
-2946 4308 l
-2946 4309 l
-2759 4309 l
-2762 4309 m
-2945 4309 l
-2945 4310 l
-2762 4310 l
-2766 4310 m
-2945 4310 l
-2945 4311 l
-2766 4311 l
-2770 4311 m
-2945 4311 l
-2945 4312 l
-2770 4312 l
-2774 4312 m
-2945 4312 l
-2945 4313 l
-2774 4313 l
-2777 4313 m
-2944 4313 l
-2944 4314 l
-2777 4314 l
-2781 4314 m
-2944 4314 l
-2944 4315 l
-2781 4315 l
-2785 4315 m
-2944 4315 l
-2944 4316 l
-2785 4316 l
-2789 4316 m
-2944 4316 l
-2944 4317 l
-2789 4317 l
-2793 4317 m
-2943 4317 l
-2943 4318 l
-2793 4318 l
-2796 4318 m
-2943 4318 l
-2943 4319 l
-2796 4319 l
-2800 4319 m
-2943 4319 l
-2943 4320 l
-2800 4320 l
-2804 4320 m
-2943 4320 l
-2943 4321 l
-2804 4321 l
-2808 4321 m
-2942 4321 l
-2942 4322 l
-2808 4322 l
-2811 4322 m
-2942 4322 l
-2942 4323 l
-2811 4323 l
-2815 4323 m
-2942 4323 l
-2942 4324 l
-2815 4324 l
-2819 4324 m
-2941 4324 l
-2941 4325 l
-2819 4325 l
-2823 4325 m
-2941 4325 l
-2941 4326 l
-2823 4326 l
-2827 4326 m
-2941 4326 l
-2941 4327 l
-2827 4327 l
-2830 4327 m
-2941 4327 l
-2941 4328 l
-2830 4328 l
-2834 4328 m
-2940 4328 l
-2940 4329 l
-2834 4329 l
-2838 4329 m
-2940 4329 l
-2940 4330 l
-2838 4330 l
-2842 4330 m
-2940 4330 l
-2940 4331 l
-2842 4331 l
-2846 4331 m
-2940 4331 l
-2940 4332 l
-2846 4332 l
-2849 4332 m
-2939 4332 l
-2939 4333 l
-2849 4333 l
-2853 4333 m
-2939 4333 l
-2939 4334 l
-2853 4334 l
-2857 4334 m
-2939 4334 l
-2939 4335 l
-2857 4335 l
-2861 4335 m
-2939 4335 l
-2939 4336 l
-2861 4336 l
-2864 4336 m
-2938 4336 l
-2938 4337 l
-2864 4337 l
-2868 4337 m
-2938 4337 l
-2938 4338 l
-2868 4338 l
-2872 4338 m
-2938 4338 l
-2938 4339 l
-2872 4339 l
-2876 4339 m
-2937 4339 l
-2937 4340 l
-2876 4340 l
-2880 4340 m
-2937 4340 l
-2937 4341 l
-2880 4341 l
-2883 4341 m
-2937 4341 l
-2937 4342 l
-2883 4342 l
-2887 4342 m
-2937 4342 l
-2937 4343 l
-2887 4343 l
-2891 4343 m
-2936 4343 l
-2936 4344 l
-2891 4344 l
-2895 4344 m
-2936 4344 l
-2936 4345 l
-2895 4345 l
-2898 4345 m
-2936 4345 l
-2936 4346 l
-2898 4346 l
-2902 4346 m
-2936 4346 l
-2936 4347 l
-2902 4347 l
-2906 4347 m
-2935 4347 l
-2935 4348 l
-2906 4348 l
-2910 4348 m
-2935 4348 l
-2935 4349 l
-2910 4349 l
-2914 4349 m
-2935 4349 l
-2935 4350 l
-2914 4350 l
-2917 4350 m
-2935 4350 l
-2935 4351 l
-2917 4351 l
-2921 4351 m
-2934 4351 l
-2934 4352 l
-2921 4352 l
-2925 4352 m
-2934 4352 l
-2934 4353 l
-2925 4353 l
-2929 4353 m
-2934 4353 l
-2934 4354 l
-2929 4354 l
-Y
-2790.2 4190.9 m
-2759 4308 l
-2933 4354 l
-2964 4237 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2836 4298 m
-2829 4305 l
-2816 4306 l
-2808 4304 l
-2797 4296 l
-2792 4282 l
-2793 4261 l
-2799 4241 l
-2807 4226 l
-2817 4220 l
-2830 4219 l
-2834 4220 l
-2845 4227 l
-2851 4237 l
-2852 4250 l
-2851 4254 l
-2844 4266 l
-2834 4272 l
-2821 4272 l
-2817 4271 l
-2806 4264 l
-2800 4254 l
-2799 4241 l
-S
-2885 4324 m
-2874 4317 l
-2869 4302 l
-2870 4281 l
-2873 4269 l
-2883 4250 l
-2894 4240 l
-2907 4239 l
-2915 4241 l
-2926 4248 l
-2931 4263 l
-2930 4284 l
-2927 4296 l
-2917 4315 l
-2906 4325 l
-2893 4326 l
-2885 4324 l
-S
-1 g
-3525 4216 m
-3529 4216 l
-3529 4217 l
-3525 4217 l
-3522 4217 m
-3529 4217 l
-3529 4218 l
-3522 4218 l
-3519 4218 m
-3530 4218 l
-3530 4219 l
-3519 4219 l
-3516 4219 m
-3530 4219 l
-3530 4220 l
-3516 4220 l
-3513 4220 m
-3530 4220 l
-3530 4221 l
-3513 4221 l
-3510 4221 m
-3531 4221 l
-3531 4222 l
-3510 4222 l
-3507 4222 m
-3531 4222 l
-3531 4223 l
-3507 4223 l
-3504 4223 m
-3531 4223 l
-3531 4224 l
-3504 4224 l
-3502 4224 m
-3532 4224 l
-3532 4225 l
-3502 4225 l
-3499 4225 m
-3532 4225 l
-3532 4226 l
-3499 4226 l
-3496 4226 m
-3532 4226 l
-3532 4227 l
-3496 4227 l
-3493 4227 m
-3533 4227 l
-3533 4228 l
-3493 4228 l
-3490 4228 m
-3533 4228 l
-3533 4229 l
-3490 4229 l
-3487 4229 m
-3533 4229 l
-3533 4230 l
-3487 4230 l
-3484 4230 m
-3534 4230 l
-3534 4231 l
-3484 4231 l
-3481 4231 m
-3534 4231 l
-3534 4232 l
-3481 4232 l
-3479 4232 m
-3534 4232 l
-3534 4233 l
-3479 4233 l
-3476 4233 m
-3535 4233 l
-3535 4234 l
-3476 4234 l
-3473 4234 m
-3535 4234 l
-3535 4235 l
-3473 4235 l
-3470 4235 m
-3536 4235 l
-3536 4236 l
-3470 4236 l
-3467 4236 m
-3536 4236 l
-3536 4237 l
-3467 4237 l
-3464 4237 m
-3536 4237 l
-3536 4238 l
-3464 4238 l
-3461 4238 m
-3537 4238 l
-3537 4239 l
-3461 4239 l
-3458 4239 m
-3537 4239 l
-3537 4240 l
-3458 4240 l
-3456 4240 m
-3537 4240 l
-3537 4241 l
-3456 4241 l
-3453 4241 m
-3538 4241 l
-3538 4242 l
-3453 4242 l
-3450 4242 m
-3538 4242 l
-3538 4243 l
-3450 4243 l
-3447 4243 m
-3538 4243 l
-3538 4244 l
-3447 4244 l
-3444 4244 m
-3539 4244 l
-3539 4245 l
-3444 4245 l
-3441 4245 m
-3539 4245 l
-3539 4246 l
-3441 4246 l
-3438 4246 m
-3539 4246 l
-3539 4247 l
-3438 4247 l
-3435 4247 m
-3540 4247 l
-3540 4248 l
-3435 4248 l
-3433 4248 m
-3540 4248 l
-3540 4249 l
-3433 4249 l
-3433 4249 m
-3540 4249 l
-3540 4250 l
-3433 4250 l
-3433 4250 m
-3541 4250 l
-3541 4252 l
-3433 4252 l
-3434 4252 m
-3541 4252 l
-3541 4253 l
-3434 4253 l
-3434 4253 m
-3542 4253 l
-3542 4255 l
-3434 4255 l
-3435 4255 m
-3543 4255 l
-3543 4258 l
-3435 4258 l
-3436 4258 m
-3544 4258 l
-3544 4261 l
-3436 4261 l
-3437 4261 m
-3545 4261 l
-3545 4264 l
-3437 4264 l
-3438 4264 m
-3546 4264 l
-3546 4267 l
-3438 4267 l
-3439 4267 m
-3547 4267 l
-3547 4269 l
-3439 4269 l
-3440 4269 m
-3547 4269 l
-3547 4270 l
-3440 4270 l
-3440 4270 m
-3548 4270 l
-3548 4272 l
-3440 4272 l
-3441 4272 m
-3548 4272 l
-3548 4273 l
-3441 4273 l
-3441 4273 m
-3549 4273 l
-3549 4275 l
-3441 4275 l
-3442 4275 m
-3550 4275 l
-3550 4278 l
-3442 4278 l
-3443 4278 m
-3551 4278 l
-3551 4281 l
-3443 4281 l
-3444 4281 m
-3552 4281 l
-3552 4284 l
-3444 4284 l
-3445 4284 m
-3553 4284 l
-3553 4287 l
-3445 4287 l
-3446 4287 m
-3554 4287 l
-3554 4289 l
-3446 4289 l
-3447 4289 m
-3554 4289 l
-3554 4290 l
-3447 4290 l
-3447 4290 m
-3555 4290 l
-3555 4292 l
-3447 4292 l
-3448 4292 m
-3555 4292 l
-3555 4293 l
-3448 4293 l
-3448 4293 m
-3556 4293 l
-3556 4295 l
-3448 4295 l
-3449 4295 m
-3557 4295 l
-3557 4298 l
-3449 4298 l
-3450 4298 m
-3558 4298 l
-3558 4301 l
-3450 4301 l
-3451 4301 m
-3559 4301 l
-3559 4304 l
-3451 4304 l
-3452 4304 m
-3560 4304 l
-3560 4306 l
-3452 4306 l
-3453 4306 m
-3560 4306 l
-3560 4307 l
-3453 4307 l
-3453 4307 m
-3561 4307 l
-3561 4309 l
-3453 4309 l
-3454 4309 m
-3561 4309 l
-3561 4310 l
-3454 4310 l
-3454 4310 m
-3562 4310 l
-3562 4312 l
-3454 4312 l
-3455 4312 m
-3563 4312 l
-3563 4315 l
-3455 4315 l
-3456 4315 m
-3564 4315 l
-3564 4318 l
-3456 4318 l
-3457 4318 m
-3565 4318 l
-3565 4321 l
-3457 4321 l
-3458 4321 m
-3566 4321 l
-3566 4324 l
-3458 4324 l
-3459 4324 m
-3567 4324 l
-3567 4326 l
-3459 4326 l
-3460 4326 m
-3567 4326 l
-3567 4327 l
-3460 4327 l
-3460 4327 m
-3568 4327 l
-3568 4329 l
-3460 4329 l
-3461 4329 m
-3568 4329 l
-3568 4330 l
-3461 4330 l
-3461 4330 m
-3569 4330 l
-3569 4331 l
-3461 4331 l
-3461 4331 m
-3566 4331 l
-3566 4332 l
-3461 4332 l
-3462 4332 m
-3563 4332 l
-3563 4333 l
-3462 4333 l
-3462 4333 m
-3560 4333 l
-3560 4334 l
-3462 4334 l
-3462 4334 m
-3557 4334 l
-3557 4335 l
-3462 4335 l
-3463 4335 m
-3554 4335 l
-3554 4336 l
-3463 4336 l
-3463 4336 m
-3551 4336 l
-3551 4337 l
-3463 4337 l
-3463 4337 m
-3549 4337 l
-3549 4338 l
-3463 4338 l
-3464 4338 m
-3546 4338 l
-3546 4339 l
-3464 4339 l
-3464 4339 m
-3543 4339 l
-3543 4340 l
-3464 4340 l
-3464 4340 m
-3540 4340 l
-3540 4341 l
-3464 4341 l
-3465 4341 m
-3537 4341 l
-3537 4342 l
-3465 4342 l
-3465 4342 m
-3534 4342 l
-3534 4343 l
-3465 4343 l
-3465 4343 m
-3531 4343 l
-3531 4344 l
-3465 4344 l
-3466 4344 m
-3528 4344 l
-3528 4345 l
-3466 4345 l
-3466 4345 m
-3525 4345 l
-3525 4346 l
-3466 4346 l
-3467 4346 m
-3523 4346 l
-3523 4347 l
-3467 4347 l
-3467 4347 m
-3520 4347 l
-3520 4348 l
-3467 4348 l
-3467 4348 m
-3517 4348 l
-3517 4349 l
-3467 4349 l
-3468 4349 m
-3514 4349 l
-3514 4350 l
-3468 4350 l
-3468 4350 m
-3511 4350 l
-3511 4351 l
-3468 4351 l
-3468 4351 m
-3508 4351 l
-3508 4352 l
-3468 4352 l
-3469 4352 m
-3505 4352 l
-3505 4353 l
-3469 4353 l
-3469 4353 m
-3502 4353 l
-3502 4354 l
-3469 4354 l
-3469 4354 m
-3499 4354 l
-3499 4355 l
-3469 4355 l
-3470 4355 m
-3497 4355 l
-3497 4356 l
-3470 4356 l
-3470 4356 m
-3494 4356 l
-3494 4357 l
-3470 4357 l
-3470 4357 m
-3491 4357 l
-3491 4358 l
-3470 4358 l
-3471 4358 m
-3488 4358 l
-3488 4359 l
-3471 4359 l
-3471 4359 m
-3485 4359 l
-3485 4360 l
-3471 4360 l
-3471 4360 m
-3482 4360 l
-3482 4361 l
-3471 4361 l
-3472 4361 m
-3479 4361 l
-3479 4362 l
-3472 4362 l
-3472 4362 m
-3476 4362 l
-3476 4363 l
-3472 4363 l
-Y
-3568 4330.1 m
-3528 4216 l
-3433 4249 l
-3473 4363 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3490 4247 m
-3503 4246 l
-3515 4256 l
-3526 4274 l
-3530 4286 l
-3533 4307 l
-3530 4321 l
-3519 4329 l
-3511 4332 l
-3498 4332 l
-3486 4323 l
-3475 4305 l
-3471 4293 l
-3468 4272 l
-3472 4257 l
-3482 4249 l
-3490 4247 l
-S
-1 g
-2845 3271 m
-2847 3271 l
-2847 3272 l
-2845 3272 l
-2845 3272 m
-2849 3272 l
-2849 3273 l
-2845 3273 l
-2844 3273 m
-2851 3273 l
-2851 3274 l
-2844 3274 l
-2843 3274 m
-2853 3274 l
-2853 3275 l
-2843 3275 l
-2843 3275 m
-2855 3275 l
-2855 3276 l
-2843 3276 l
-2842 3276 m
-2856 3276 l
-2856 3277 l
-2842 3277 l
-2842 3277 m
-2858 3277 l
-2858 3278 l
-2842 3278 l
-2841 3278 m
-2860 3278 l
-2860 3279 l
-2841 3279 l
-2841 3279 m
-2862 3279 l
-2862 3280 l
-2841 3280 l
-2840 3280 m
-2864 3280 l
-2864 3281 l
-2840 3281 l
-2840 3281 m
-2865 3281 l
-2865 3282 l
-2840 3282 l
-2839 3282 m
-2867 3282 l
-2867 3283 l
-2839 3283 l
-2838 3283 m
-2869 3283 l
-2869 3284 l
-2838 3284 l
-2838 3284 m
-2871 3284 l
-2871 3285 l
-2838 3285 l
-2837 3285 m
-2873 3285 l
-2873 3286 l
-2837 3286 l
-2837 3286 m
-2874 3286 l
-2874 3287 l
-2837 3287 l
-2836 3287 m
-2876 3287 l
-2876 3288 l
-2836 3288 l
-2836 3288 m
-2878 3288 l
-2878 3289 l
-2836 3289 l
-2835 3289 m
-2880 3289 l
-2880 3290 l
-2835 3290 l
-2835 3290 m
-2882 3290 l
-2882 3291 l
-2835 3291 l
-2834 3291 m
-2883 3291 l
-2883 3292 l
-2834 3292 l
-2834 3292 m
-2885 3292 l
-2885 3293 l
-2834 3293 l
-2833 3293 m
-2887 3293 l
-2887 3294 l
-2833 3294 l
-2832 3294 m
-2889 3294 l
-2889 3295 l
-2832 3295 l
-2832 3295 m
-2891 3295 l
-2891 3296 l
-2832 3296 l
-2831 3296 m
-2892 3296 l
-2892 3297 l
-2831 3297 l
-2831 3297 m
-2894 3297 l
-2894 3298 l
-2831 3298 l
-2830 3298 m
-2896 3298 l
-2896 3299 l
-2830 3299 l
-2830 3299 m
-2898 3299 l
-2898 3300 l
-2830 3300 l
-2829 3300 m
-2900 3300 l
-2900 3301 l
-2829 3301 l
-2829 3301 m
-2902 3301 l
-2902 3302 l
-2829 3302 l
-2828 3302 m
-2903 3302 l
-2903 3303 l
-2828 3303 l
-2827 3303 m
-2905 3303 l
-2905 3304 l
-2827 3304 l
-2827 3304 m
-2907 3304 l
-2907 3305 l
-2827 3305 l
-2826 3305 m
-2909 3305 l
-2909 3306 l
-2826 3306 l
-2826 3306 m
-2911 3306 l
-2911 3307 l
-2826 3307 l
-2825 3307 m
-2912 3307 l
-2912 3308 l
-2825 3308 l
-2825 3308 m
-2914 3308 l
-2914 3309 l
-2825 3309 l
-2824 3309 m
-2916 3309 l
-2916 3310 l
-2824 3310 l
-2824 3310 m
-2918 3310 l
-2918 3311 l
-2824 3311 l
-2823 3311 m
-2920 3311 l
-2920 3312 l
-2823 3312 l
-2822 3312 m
-2921 3312 l
-2921 3313 l
-2822 3313 l
-2822 3313 m
-2923 3313 l
-2923 3314 l
-2822 3314 l
-2821 3314 m
-2925 3314 l
-2925 3315 l
-2821 3315 l
-2821 3315 m
-2927 3315 l
-2927 3316 l
-2821 3316 l
-2820 3316 m
-2929 3316 l
-2929 3317 l
-2820 3317 l
-2820 3317 m
-2930 3317 l
-2930 3318 l
-2820 3318 l
-2819 3318 m
-2932 3318 l
-2932 3319 l
-2819 3319 l
-2819 3319 m
-2934 3319 l
-2934 3320 l
-2819 3320 l
-2818 3320 m
-2936 3320 l
-2936 3321 l
-2818 3321 l
-2817 3321 m
-2938 3321 l
-2938 3322 l
-2817 3322 l
-2817 3322 m
-2939 3322 l
-2939 3323 l
-2817 3323 l
-2816 3323 m
-2941 3323 l
-2941 3324 l
-2816 3324 l
-2816 3324 m
-2943 3324 l
-2943 3325 l
-2816 3325 l
-2815 3325 m
-2945 3325 l
-2945 3326 l
-2815 3326 l
-2815 3326 m
-2947 3326 l
-2947 3327 l
-2815 3327 l
-2814 3327 m
-2949 3327 l
-2949 3328 l
-2814 3328 l
-2814 3328 m
-2950 3328 l
-2950 3329 l
-2814 3329 l
-2813 3329 m
-2952 3329 l
-2952 3330 l
-2813 3330 l
-2812 3330 m
-2954 3330 l
-2954 3331 l
-2812 3331 l
-2812 3331 m
-2956 3331 l
-2956 3332 l
-2812 3332 l
-2811 3332 m
-2958 3332 l
-2958 3333 l
-2811 3333 l
-2811 3333 m
-2959 3333 l
-2959 3334 l
-2811 3334 l
-2810 3334 m
-2961 3334 l
-2961 3335 l
-2810 3335 l
-2810 3335 m
-2963 3335 l
-2963 3336 l
-2810 3336 l
-2809 3336 m
-2965 3336 l
-2965 3337 l
-2809 3337 l
-2809 3337 m
-2967 3337 l
-2967 3338 l
-2809 3338 l
-2808 3338 m
-2968 3338 l
-2968 3339 l
-2808 3339 l
-2808 3339 m
-2970 3339 l
-2970 3340 l
-2808 3340 l
-2807 3340 m
-2972 3340 l
-2972 3341 l
-2807 3341 l
-2806 3341 m
-2974 3341 l
-2974 3342 l
-2806 3342 l
-2806 3342 m
-2976 3342 l
-2976 3343 l
-2806 3343 l
-2805 3343 m
-2977 3343 l
-2977 3344 l
-2805 3344 l
-2805 3344 m
-2979 3344 l
-2979 3345 l
-2805 3345 l
-2804 3345 m
-2981 3345 l
-2981 3346 l
-2804 3346 l
-2804 3346 m
-2983 3346 l
-2983 3347 l
-2804 3347 l
-2803 3347 m
-2985 3347 l
-2985 3348 l
-2803 3348 l
-2803 3348 m
-2986 3348 l
-2986 3349 l
-2803 3349 l
-2802 3349 m
-2988 3349 l
-2988 3350 l
-2802 3350 l
-2801 3350 m
-2990 3350 l
-2990 3351 l
-2801 3351 l
-2801 3351 m
-2992 3351 l
-2992 3352 l
-2801 3352 l
-2800 3352 m
-2994 3352 l
-2994 3353 l
-2800 3353 l
-2800 3353 m
-2995 3353 l
-2995 3354 l
-2800 3354 l
-2799 3354 m
-2997 3354 l
-2997 3355 l
-2799 3355 l
-2799 3355 m
-2999 3355 l
-2999 3356 l
-2799 3356 l
-2798 3356 m
-3001 3356 l
-3001 3357 l
-2798 3357 l
-2798 3357 m
-3003 3357 l
-3003 3358 l
-2798 3358 l
-2797 3358 m
-3005 3358 l
-3005 3359 l
-2797 3359 l
-2796 3359 m
-3006 3359 l
-3006 3360 l
-2796 3360 l
-2796 3360 m
-3008 3360 l
-3008 3361 l
-2796 3361 l
-2795 3361 m
-3010 3361 l
-3010 3362 l
-2795 3362 l
-2795 3362 m
-3012 3362 l
-3012 3363 l
-2795 3363 l
-2794 3363 m
-3014 3363 l
-3014 3364 l
-2794 3364 l
-2794 3364 m
-3015 3364 l
-3015 3365 l
-2794 3365 l
-2793 3365 m
-3017 3365 l
-3017 3366 l
-2793 3366 l
-2793 3366 m
-3019 3366 l
-3019 3367 l
-2793 3367 l
-2792 3367 m
-3021 3367 l
-3021 3368 l
-2792 3368 l
-2791 3368 m
-3023 3368 l
-3023 3369 l
-2791 3369 l
-2791 3369 m
-3024 3369 l
-3024 3370 l
-2791 3370 l
-2790 3370 m
-3026 3370 l
-3026 3371 l
-2790 3371 l
-2790 3371 m
-3028 3371 l
-3028 3372 l
-2790 3372 l
-2789 3372 m
-3030 3372 l
-3030 3373 l
-2789 3373 l
-2789 3373 m
-3032 3373 l
-3032 3374 l
-2789 3374 l
-2788 3374 m
-3033 3374 l
-3033 3375 l
-2788 3375 l
-2788 3375 m
-3035 3375 l
-3035 3376 l
-2788 3376 l
-2787 3376 m
-3037 3376 l
-3037 3377 l
-2787 3377 l
-2787 3377 m
-3039 3377 l
-3039 3378 l
-2787 3378 l
-2787 3378 m
-3041 3378 l
-3041 3379 l
-2787 3379 l
-2788 3379 m
-3042 3379 l
-3042 3380 l
-2788 3380 l
-2790 3380 m
-3044 3380 l
-3044 3381 l
-2790 3381 l
-2792 3381 m
-3046 3381 l
-3046 3382 l
-2792 3382 l
-2794 3382 m
-3048 3382 l
-3048 3383 l
-2794 3383 l
-2796 3383 m
-3050 3383 l
-3050 3384 l
-2796 3384 l
-2797 3384 m
-3052 3384 l
-3052 3385 l
-2797 3385 l
-2799 3385 m
-3053 3385 l
-3053 3386 l
-2799 3386 l
-2801 3386 m
-3055 3386 l
-3055 3387 l
-2801 3387 l
-2803 3387 m
-3057 3387 l
-3057 3388 l
-2803 3388 l
-2805 3388 m
-3059 3388 l
-3059 3389 l
-2805 3389 l
-2806 3389 m
-3061 3389 l
-3061 3390 l
-2806 3390 l
-2808 3390 m
-3062 3390 l
-3062 3391 l
-2808 3391 l
-2810 3391 m
-3064 3391 l
-3064 3392 l
-2810 3392 l
-2812 3392 m
-3066 3392 l
-3066 3393 l
-2812 3393 l
-2814 3393 m
-3068 3393 l
-3068 3394 l
-2814 3394 l
-2816 3394 m
-3070 3394 l
-3070 3395 l
-2816 3395 l
-2817 3395 m
-3071 3395 l
-3071 3396 l
-2817 3396 l
-2819 3396 m
-3073 3396 l
-3073 3397 l
-2819 3397 l
-2821 3397 m
-3075 3397 l
-3075 3398 l
-2821 3398 l
-2823 3398 m
-3077 3398 l
-3077 3399 l
-2823 3399 l
-2825 3399 m
-3079 3399 l
-3079 3400 l
-2825 3400 l
-2826 3400 m
-3080 3400 l
-3080 3401 l
-2826 3401 l
-2828 3401 m
-3082 3401 l
-3082 3402 l
-2828 3402 l
-2830 3402 m
-3084 3402 l
-3084 3403 l
-2830 3403 l
-2832 3403 m
-3086 3403 l
-3086 3404 l
-2832 3404 l
-2834 3404 m
-3088 3404 l
-3088 3405 l
-2834 3405 l
-2835 3405 m
-3089 3405 l
-3089 3406 l
-2835 3406 l
-2837 3406 m
-3091 3406 l
-3091 3407 l
-2837 3407 l
-2839 3407 m
-3093 3407 l
-3093 3408 l
-2839 3408 l
-2841 3408 m
-3095 3408 l
-3095 3409 l
-2841 3409 l
-2843 3409 m
-3097 3409 l
-3097 3410 l
-2843 3410 l
-2845 3410 m
-3098 3410 l
-3098 3411 l
-2845 3411 l
-2846 3411 m
-3099 3411 l
-3099 3412 l
-2846 3412 l
-2848 3412 m
-3098 3412 l
-3098 3413 l
-2848 3413 l
-2850 3413 m
-3097 3413 l
-3097 3414 l
-2850 3414 l
-2852 3414 m
-3097 3414 l
-3097 3415 l
-2852 3415 l
-2854 3415 m
-3096 3415 l
-3096 3416 l
-2854 3416 l
-2855 3416 m
-3096 3416 l
-3096 3417 l
-2855 3417 l
-2857 3417 m
-3095 3417 l
-3095 3418 l
-2857 3418 l
-2859 3418 m
-3095 3418 l
-3095 3419 l
-2859 3419 l
-2861 3419 m
-3094 3419 l
-3094 3420 l
-2861 3420 l
-2863 3420 m
-3093 3420 l
-3093 3421 l
-2863 3421 l
-2864 3421 m
-3093 3421 l
-3093 3422 l
-2864 3422 l
-2866 3422 m
-3092 3422 l
-3092 3423 l
-2866 3423 l
-2868 3423 m
-3092 3423 l
-3092 3424 l
-2868 3424 l
-2870 3424 m
-3091 3424 l
-3091 3425 l
-2870 3425 l
-2872 3425 m
-3091 3425 l
-3091 3426 l
-2872 3426 l
-2874 3426 m
-3090 3426 l
-3090 3427 l
-2874 3427 l
-2875 3427 m
-3090 3427 l
-3090 3428 l
-2875 3428 l
-2877 3428 m
-3089 3428 l
-3089 3429 l
-2877 3429 l
-2879 3429 m
-3088 3429 l
-3088 3430 l
-2879 3430 l
-2881 3430 m
-3088 3430 l
-3088 3431 l
-2881 3431 l
-2883 3431 m
-3087 3431 l
-3087 3432 l
-2883 3432 l
-2884 3432 m
-3087 3432 l
-3087 3433 l
-2884 3433 l
-2886 3433 m
-3086 3433 l
-3086 3434 l
-2886 3434 l
-2888 3434 m
-3086 3434 l
-3086 3435 l
-2888 3435 l
-2890 3435 m
-3085 3435 l
-3085 3436 l
-2890 3436 l
-2892 3436 m
-3085 3436 l
-3085 3437 l
-2892 3437 l
-2893 3437 m
-3084 3437 l
-3084 3438 l
-2893 3438 l
-2895 3438 m
-3083 3438 l
-3083 3439 l
-2895 3439 l
-2897 3439 m
-3083 3439 l
-3083 3440 l
-2897 3440 l
-2899 3440 m
-3082 3440 l
-3082 3441 l
-2899 3441 l
-2901 3441 m
-3082 3441 l
-3082 3442 l
-2901 3442 l
-2903 3442 m
-3081 3442 l
-3081 3443 l
-2903 3443 l
-2904 3443 m
-3081 3443 l
-3081 3444 l
-2904 3444 l
-2906 3444 m
-3080 3444 l
-3080 3445 l
-2906 3445 l
-2908 3445 m
-3080 3445 l
-3080 3446 l
-2908 3446 l
-2910 3446 m
-3079 3446 l
-3079 3447 l
-2910 3447 l
-2912 3447 m
-3078 3447 l
-3078 3448 l
-2912 3448 l
-2913 3448 m
-3078 3448 l
-3078 3449 l
-2913 3449 l
-2915 3449 m
-3077 3449 l
-3077 3450 l
-2915 3450 l
-2917 3450 m
-3077 3450 l
-3077 3451 l
-2917 3451 l
-2919 3451 m
-3076 3451 l
-3076 3452 l
-2919 3452 l
-2921 3452 m
-3076 3452 l
-3076 3453 l
-2921 3453 l
-2922 3453 m
-3075 3453 l
-3075 3454 l
-2922 3454 l
-2924 3454 m
-3075 3454 l
-3075 3455 l
-2924 3455 l
-2926 3455 m
-3074 3455 l
-3074 3456 l
-2926 3456 l
-2928 3456 m
-3073 3456 l
-3073 3457 l
-2928 3457 l
-2930 3457 m
-3073 3457 l
-3073 3458 l
-2930 3458 l
-2932 3458 m
-3072 3458 l
-3072 3459 l
-2932 3459 l
-2933 3459 m
-3072 3459 l
-3072 3460 l
-2933 3460 l
-2935 3460 m
-3071 3460 l
-3071 3461 l
-2935 3461 l
-2937 3461 m
-3071 3461 l
-3071 3462 l
-2937 3462 l
-2939 3462 m
-3070 3462 l
-3070 3463 l
-2939 3463 l
-2941 3463 m
-3070 3463 l
-3070 3464 l
-2941 3464 l
-2942 3464 m
-3069 3464 l
-3069 3465 l
-2942 3465 l
-2944 3465 m
-3068 3465 l
-3068 3466 l
-2944 3466 l
-2946 3466 m
-3068 3466 l
-3068 3467 l
-2946 3467 l
-2948 3467 m
-3067 3467 l
-3067 3468 l
-2948 3468 l
-2950 3468 m
-3067 3468 l
-3067 3469 l
-2950 3469 l
-2951 3469 m
-3066 3469 l
-3066 3470 l
-2951 3470 l
-2953 3470 m
-3066 3470 l
-3066 3471 l
-2953 3471 l
-2955 3471 m
-3065 3471 l
-3065 3472 l
-2955 3472 l
-2957 3472 m
-3065 3472 l
-3065 3473 l
-2957 3473 l
-2959 3473 m
-3064 3473 l
-3064 3474 l
-2959 3474 l
-2961 3474 m
-3063 3474 l
-3063 3475 l
-2961 3475 l
-2962 3475 m
-3063 3475 l
-3063 3476 l
-2962 3476 l
-2964 3476 m
-3062 3476 l
-3062 3477 l
-2964 3477 l
-2966 3477 m
-3062 3477 l
-3062 3478 l
-2966 3478 l
-2968 3478 m
-3061 3478 l
-3061 3479 l
-2968 3479 l
-2970 3479 m
-3061 3479 l
-3061 3480 l
-2970 3480 l
-2971 3480 m
-3060 3480 l
-3060 3481 l
-2971 3481 l
-2973 3481 m
-3060 3481 l
-3060 3482 l
-2973 3482 l
-2975 3482 m
-3059 3482 l
-3059 3483 l
-2975 3483 l
-2977 3483 m
-3058 3483 l
-3058 3484 l
-2977 3484 l
-2979 3484 m
-3058 3484 l
-3058 3485 l
-2979 3485 l
-2980 3485 m
-3057 3485 l
-3057 3486 l
-2980 3486 l
-2982 3486 m
-3057 3486 l
-3057 3487 l
-2982 3487 l
-2984 3487 m
-3056 3487 l
-3056 3488 l
-2984 3488 l
-2986 3488 m
-3056 3488 l
-3056 3489 l
-2986 3489 l
-2988 3489 m
-3055 3489 l
-3055 3490 l
-2988 3490 l
-2990 3490 m
-3055 3490 l
-3055 3491 l
-2990 3491 l
-2991 3491 m
-3054 3491 l
-3054 3492 l
-2991 3492 l
-2993 3492 m
-3053 3492 l
-3053 3493 l
-2993 3493 l
-2995 3493 m
-3053 3493 l
-3053 3494 l
-2995 3494 l
-2997 3494 m
-3052 3494 l
-3052 3495 l
-2997 3495 l
-2999 3495 m
-3052 3495 l
-3052 3496 l
-2999 3496 l
-3000 3496 m
-3051 3496 l
-3051 3497 l
-3000 3497 l
-3002 3497 m
-3051 3497 l
-3051 3498 l
-3002 3498 l
-3004 3498 m
-3050 3498 l
-3050 3499 l
-3004 3499 l
-3006 3499 m
-3050 3499 l
-3050 3500 l
-3006 3500 l
-3008 3500 m
-3049 3500 l
-3049 3501 l
-3008 3501 l
-3009 3501 m
-3048 3501 l
-3048 3502 l
-3009 3502 l
-3011 3502 m
-3048 3502 l
-3048 3503 l
-3011 3503 l
-3013 3503 m
-3047 3503 l
-3047 3504 l
-3013 3504 l
-3015 3504 m
-3047 3504 l
-3047 3505 l
-3015 3505 l
-3017 3505 m
-3046 3505 l
-3046 3506 l
-3017 3506 l
-3019 3506 m
-3046 3506 l
-3046 3507 l
-3019 3507 l
-3020 3507 m
-3045 3507 l
-3045 3508 l
-3020 3508 l
-3022 3508 m
-3045 3508 l
-3045 3509 l
-3022 3509 l
-3024 3509 m
-3044 3509 l
-3044 3510 l
-3024 3510 l
-3026 3510 m
-3043 3510 l
-3043 3511 l
-3026 3511 l
-3028 3511 m
-3043 3511 l
-3043 3512 l
-3028 3512 l
-3029 3512 m
-3042 3512 l
-3042 3513 l
-3029 3513 l
-3031 3513 m
-3042 3513 l
-3042 3514 l
-3031 3514 l
-3033 3514 m
-3041 3514 l
-3041 3515 l
-3033 3515 l
-3035 3515 m
-3041 3515 l
-3041 3516 l
-3035 3516 l
-3037 3516 m
-3040 3516 l
-3040 3517 l
-3037 3517 l
-Y
-2845.9 3271.5 m
-2787 3378 l
-3039 3517 l
-3098 3411 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2838 3329 m
-2904 3366 l
-S
-2967 3424 m
-2969 3411 l
-2966 3400 l
-2957 3390 l
-2953 3388 l
-2940 3386 l
-2929 3389 l
-2919 3398 l
-2917 3402 l
-2915 3415 l
-2918 3426 l
-2927 3436 l
-2931 3438 l
-2944 3440 l
-2955 3437 l
-2967 3424 l
-2977 3406 l
-2983 3386 l
-2982 3371 l
-2973 3361 l
-2966 3357 l
-2953 3354 l
-2945 3360 l
-S
-3000 3476 m
-2991 3466 l
-2990 3451 l
-2996 3431 l
-3002 3420 l
-3016 3404 l
-3029 3397 l
-3042 3399 l
-3050 3403 l
-3059 3413 l
-3060 3428 l
-3054 3448 l
-3047 3459 l
-3034 3476 l
-3020 3483 l
-3007 3480 l
-3000 3476 l
-S
-1 g
-3190 3488 m
-3192 3488 l
-3192 3489 l
-3190 3489 l
-3189 3489 m
-3193 3489 l
-3193 3490 l
-3189 3490 l
-3187 3490 m
-3194 3490 l
-3194 3491 l
-3187 3491 l
-3186 3491 m
-3195 3491 l
-3195 3492 l
-3186 3492 l
-3185 3492 m
-3196 3492 l
-3196 3493 l
-3185 3493 l
-3184 3493 m
-3197 3493 l
-3197 3494 l
-3184 3494 l
-3183 3494 m
-3197 3494 l
-3197 3495 l
-3183 3495 l
-3181 3495 m
-3198 3495 l
-3198 3496 l
-3181 3496 l
-3180 3496 m
-3199 3496 l
-3199 3497 l
-3180 3497 l
-3179 3497 m
-3200 3497 l
-3200 3498 l
-3179 3498 l
-3178 3498 m
-3201 3498 l
-3201 3499 l
-3178 3499 l
-3176 3499 m
-3202 3499 l
-3202 3500 l
-3176 3500 l
-3175 3500 m
-3202 3500 l
-3202 3501 l
-3175 3501 l
-3174 3501 m
-3203 3501 l
-3203 3502 l
-3174 3502 l
-3173 3502 m
-3204 3502 l
-3204 3503 l
-3173 3503 l
-3172 3503 m
-3205 3503 l
-3205 3504 l
-3172 3504 l
-3170 3504 m
-3206 3504 l
-3206 3505 l
-3170 3505 l
-3169 3505 m
-3207 3505 l
-3207 3506 l
-3169 3506 l
-3168 3506 m
-3207 3506 l
-3207 3507 l
-3168 3507 l
-3167 3507 m
-3208 3507 l
-3208 3508 l
-3167 3508 l
-3166 3508 m
-3209 3508 l
-3209 3509 l
-3166 3509 l
-3164 3509 m
-3210 3509 l
-3210 3510 l
-3164 3510 l
-3163 3510 m
-3211 3510 l
-3211 3511 l
-3163 3511 l
-3162 3511 m
-3212 3511 l
-3212 3512 l
-3162 3512 l
-3161 3512 m
-3212 3512 l
-3212 3513 l
-3161 3513 l
-3159 3513 m
-3213 3513 l
-3213 3514 l
-3159 3514 l
-3158 3514 m
-3214 3514 l
-3214 3515 l
-3158 3515 l
-3157 3515 m
-3215 3515 l
-3215 3516 l
-3157 3516 l
-3156 3516 m
-3216 3516 l
-3216 3517 l
-3156 3517 l
-3155 3517 m
-3216 3517 l
-3216 3518 l
-3155 3518 l
-3153 3518 m
-3217 3518 l
-3217 3519 l
-3153 3519 l
-3152 3519 m
-3218 3519 l
-3218 3520 l
-3152 3520 l
-3151 3520 m
-3219 3520 l
-3219 3521 l
-3151 3521 l
-3150 3521 m
-3220 3521 l
-3220 3522 l
-3150 3522 l
-3149 3522 m
-3221 3522 l
-3221 3523 l
-3149 3523 l
-3147 3523 m
-3221 3523 l
-3221 3524 l
-3147 3524 l
-3146 3524 m
-3222 3524 l
-3222 3525 l
-3146 3525 l
-3145 3525 m
-3223 3525 l
-3223 3526 l
-3145 3526 l
-3144 3526 m
-3224 3526 l
-3224 3527 l
-3144 3527 l
-3142 3527 m
-3225 3527 l
-3225 3528 l
-3142 3528 l
-3141 3528 m
-3226 3528 l
-3226 3529 l
-3141 3529 l
-3140 3529 m
-3226 3529 l
-3226 3530 l
-3140 3530 l
-3139 3530 m
-3227 3530 l
-3227 3531 l
-3139 3531 l
-3138 3531 m
-3228 3531 l
-3228 3532 l
-3138 3532 l
-3136 3532 m
-3229 3532 l
-3229 3533 l
-3136 3533 l
-3135 3533 m
-3230 3533 l
-3230 3534 l
-3135 3534 l
-3134 3534 m
-3231 3534 l
-3231 3535 l
-3134 3535 l
-3133 3535 m
-3231 3535 l
-3231 3536 l
-3133 3536 l
-3132 3536 m
-3232 3536 l
-3232 3537 l
-3132 3537 l
-3130 3537 m
-3233 3537 l
-3233 3538 l
-3130 3538 l
-3129 3538 m
-3234 3538 l
-3234 3539 l
-3129 3539 l
-3128 3539 m
-3235 3539 l
-3235 3540 l
-3128 3540 l
-3127 3540 m
-3236 3540 l
-3236 3541 l
-3127 3541 l
-3125 3541 m
-3236 3541 l
-3236 3542 l
-3125 3542 l
-3124 3542 m
-3237 3542 l
-3237 3543 l
-3124 3543 l
-3123 3543 m
-3238 3543 l
-3238 3544 l
-3123 3544 l
-3122 3544 m
-3239 3544 l
-3239 3545 l
-3122 3545 l
-3121 3545 m
-3240 3545 l
-3240 3546 l
-3121 3546 l
-3119 3546 m
-3240 3546 l
-3240 3547 l
-3119 3547 l
-3118 3547 m
-3241 3547 l
-3241 3548 l
-3118 3548 l
-3117 3548 m
-3242 3548 l
-3242 3549 l
-3117 3549 l
-3116 3549 m
-3243 3549 l
-3243 3550 l
-3116 3550 l
-3115 3550 m
-3244 3550 l
-3244 3551 l
-3115 3551 l
-3113 3551 m
-3245 3551 l
-3245 3552 l
-3113 3552 l
-3112 3552 m
-3245 3552 l
-3245 3553 l
-3112 3553 l
-3111 3553 m
-3246 3553 l
-3246 3554 l
-3111 3554 l
-3110 3554 m
-3247 3554 l
-3247 3555 l
-3110 3555 l
-3108 3555 m
-3248 3555 l
-3248 3556 l
-3108 3556 l
-3107 3556 m
-3249 3556 l
-3249 3557 l
-3107 3557 l
-3106 3557 m
-3250 3557 l
-3250 3558 l
-3106 3558 l
-3105 3558 m
-3250 3558 l
-3250 3559 l
-3105 3559 l
-3104 3559 m
-3251 3559 l
-3251 3560 l
-3104 3560 l
-3102 3560 m
-3252 3560 l
-3252 3561 l
-3102 3561 l
-3101 3561 m
-3253 3561 l
-3253 3562 l
-3101 3562 l
-3100 3562 m
-3254 3562 l
-3254 3563 l
-3100 3563 l
-3099 3563 m
-3255 3563 l
-3255 3564 l
-3099 3564 l
-3098 3564 m
-3255 3564 l
-3255 3565 l
-3098 3565 l
-3098 3565 m
-3256 3565 l
-3256 3566 l
-3098 3566 l
-3098 3566 m
-3257 3566 l
-3257 3567 l
-3098 3567 l
-3099 3567 m
-3258 3567 l
-3258 3568 l
-3099 3568 l
-3100 3568 m
-3259 3568 l
-3259 3569 l
-3100 3569 l
-3101 3569 m
-3260 3569 l
-3260 3570 l
-3101 3570 l
-3102 3570 m
-3260 3570 l
-3260 3571 l
-3102 3571 l
-3102 3571 m
-3261 3571 l
-3261 3572 l
-3102 3572 l
-3103 3572 m
-3262 3572 l
-3262 3573 l
-3103 3573 l
-3104 3573 m
-3263 3573 l
-3263 3574 l
-3104 3574 l
-3105 3574 m
-3264 3574 l
-3264 3575 l
-3105 3575 l
-3106 3575 m
-3265 3575 l
-3265 3576 l
-3106 3576 l
-3107 3576 m
-3265 3576 l
-3265 3577 l
-3107 3577 l
-3107 3577 m
-3266 3577 l
-3266 3578 l
-3107 3578 l
-3108 3578 m
-3267 3578 l
-3267 3579 l
-3108 3579 l
-3109 3579 m
-3268 3579 l
-3268 3580 l
-3109 3580 l
-3110 3580 m
-3269 3580 l
-3269 3581 l
-3110 3581 l
-3111 3581 m
-3269 3581 l
-3269 3582 l
-3111 3582 l
-3111 3582 m
-3270 3582 l
-3270 3583 l
-3111 3583 l
-3112 3583 m
-3271 3583 l
-3271 3584 l
-3112 3584 l
-3113 3584 m
-3272 3584 l
-3272 3585 l
-3113 3585 l
-3114 3585 m
-3273 3585 l
-3273 3586 l
-3114 3586 l
-3115 3586 m
-3274 3586 l
-3274 3587 l
-3115 3587 l
-3116 3587 m
-3274 3587 l
-3274 3588 l
-3116 3588 l
-3116 3588 m
-3275 3588 l
-3275 3589 l
-3116 3589 l
-3117 3589 m
-3276 3589 l
-3276 3590 l
-3117 3590 l
-3118 3590 m
-3277 3590 l
-3277 3591 l
-3118 3591 l
-3119 3591 m
-3278 3591 l
-3278 3592 l
-3119 3592 l
-3120 3592 m
-3279 3592 l
-3279 3594 l
-3120 3594 l
-3121 3594 m
-3280 3594 l
-3280 3595 l
-3121 3595 l
-3122 3595 m
-3281 3595 l
-3281 3596 l
-3122 3596 l
-3123 3596 m
-3282 3596 l
-3282 3597 l
-3123 3597 l
-3124 3597 m
-3283 3597 l
-3283 3598 l
-3124 3598 l
-3125 3598 m
-3284 3598 l
-3284 3600 l
-3125 3600 l
-3126 3600 m
-3285 3600 l
-3285 3601 l
-3126 3601 l
-3127 3601 m
-3286 3601 l
-3286 3602 l
-3127 3602 l
-3128 3602 m
-3287 3602 l
-3287 3603 l
-3128 3603 l
-3129 3603 m
-3288 3603 l
-3288 3604 l
-3129 3604 l
-3130 3604 m
-3289 3604 l
-3289 3606 l
-3130 3606 l
-3131 3606 m
-3290 3606 l
-3290 3607 l
-3131 3607 l
-3132 3607 m
-3291 3607 l
-3291 3608 l
-3132 3608 l
-3133 3608 m
-3292 3608 l
-3292 3609 l
-3133 3609 l
-3134 3609 m
-3293 3609 l
-3293 3610 l
-3134 3610 l
-3134 3610 m
-3294 3610 l
-3294 3611 l
-3134 3611 l
-3135 3611 m
-3294 3611 l
-3294 3612 l
-3135 3612 l
-3136 3612 m
-3295 3612 l
-3295 3613 l
-3136 3613 l
-3137 3613 m
-3296 3613 l
-3296 3614 l
-3137 3614 l
-3138 3614 m
-3297 3614 l
-3297 3615 l
-3138 3615 l
-3139 3615 m
-3298 3615 l
-3298 3617 l
-3139 3617 l
-3140 3617 m
-3299 3617 l
-3299 3618 l
-3140 3618 l
-3141 3618 m
-3300 3618 l
-3300 3619 l
-3141 3619 l
-3142 3619 m
-3301 3619 l
-3301 3620 l
-3142 3620 l
-3143 3620 m
-3302 3620 l
-3302 3621 l
-3143 3621 l
-3143 3621 m
-3303 3621 l
-3303 3622 l
-3143 3622 l
-3144 3622 m
-3303 3622 l
-3303 3623 l
-3144 3623 l
-3145 3623 m
-3304 3623 l
-3304 3624 l
-3145 3624 l
-3146 3624 m
-3305 3624 l
-3305 3625 l
-3146 3625 l
-3147 3625 m
-3306 3625 l
-3306 3626 l
-3147 3626 l
-3148 3626 m
-3307 3626 l
-3307 3627 l
-3148 3627 l
-3148 3627 m
-3308 3627 l
-3308 3628 l
-3148 3628 l
-3149 3628 m
-3308 3628 l
-3308 3629 l
-3149 3629 l
-3150 3629 m
-3309 3629 l
-3309 3630 l
-3150 3630 l
-3151 3630 m
-3310 3630 l
-3310 3631 l
-3151 3631 l
-3152 3631 m
-3311 3631 l
-3311 3632 l
-3152 3632 l
-3152 3632 m
-3312 3632 l
-3312 3633 l
-3152 3633 l
-3153 3633 m
-3313 3633 l
-3313 3634 l
-3153 3634 l
-3154 3634 m
-3313 3634 l
-3313 3635 l
-3154 3635 l
-3155 3635 m
-3314 3635 l
-3314 3636 l
-3155 3636 l
-3156 3636 m
-3315 3636 l
-3315 3637 l
-3156 3637 l
-3157 3637 m
-3316 3637 l
-3316 3638 l
-3157 3638 l
-3157 3638 m
-3317 3638 l
-3317 3639 l
-3157 3639 l
-3158 3639 m
-3318 3639 l
-3318 3640 l
-3158 3640 l
-3159 3640 m
-3318 3640 l
-3318 3641 l
-3159 3641 l
-3160 3641 m
-3319 3641 l
-3319 3642 l
-3160 3642 l
-3161 3642 m
-3320 3642 l
-3320 3643 l
-3161 3643 l
-3162 3643 m
-3321 3643 l
-3321 3644 l
-3162 3644 l
-3162 3644 m
-3322 3644 l
-3322 3645 l
-3162 3645 l
-3163 3645 m
-3322 3645 l
-3322 3646 l
-3163 3646 l
-3164 3646 m
-3323 3646 l
-3323 3647 l
-3164 3647 l
-3165 3647 m
-3324 3647 l
-3324 3648 l
-3165 3648 l
-3166 3648 m
-3325 3648 l
-3325 3649 l
-3166 3649 l
-3166 3649 m
-3326 3649 l
-3326 3650 l
-3166 3650 l
-3167 3650 m
-3327 3650 l
-3327 3651 l
-3167 3651 l
-3168 3651 m
-3327 3651 l
-3327 3652 l
-3168 3652 l
-3169 3652 m
-3328 3652 l
-3328 3653 l
-3169 3653 l
-3170 3653 m
-3329 3653 l
-3329 3654 l
-3170 3654 l
-3171 3654 m
-3330 3654 l
-3330 3655 l
-3171 3655 l
-3171 3655 m
-3331 3655 l
-3331 3656 l
-3171 3656 l
-3172 3656 m
-3332 3656 l
-3332 3657 l
-3172 3657 l
-3173 3657 m
-3332 3657 l
-3332 3658 l
-3173 3658 l
-3174 3658 m
-3333 3658 l
-3333 3659 l
-3174 3659 l
-3175 3659 m
-3334 3659 l
-3334 3660 l
-3175 3660 l
-3175 3660 m
-3335 3660 l
-3335 3661 l
-3175 3661 l
-3176 3661 m
-3336 3661 l
-3336 3662 l
-3176 3662 l
-3177 3662 m
-3337 3662 l
-3337 3663 l
-3177 3663 l
-3178 3663 m
-3337 3663 l
-3337 3664 l
-3178 3664 l
-3179 3664 m
-3338 3664 l
-3338 3665 l
-3179 3665 l
-3180 3665 m
-3339 3665 l
-3339 3666 l
-3180 3666 l
-3180 3666 m
-3340 3666 l
-3340 3667 l
-3180 3667 l
-3181 3667 m
-3341 3667 l
-3341 3668 l
-3181 3668 l
-3182 3668 m
-3342 3668 l
-3342 3669 l
-3182 3669 l
-3183 3669 m
-3342 3669 l
-3342 3670 l
-3183 3670 l
-3184 3670 m
-3343 3670 l
-3343 3671 l
-3184 3671 l
-3184 3671 m
-3344 3671 l
-3344 3672 l
-3184 3672 l
-3185 3672 m
-3345 3672 l
-3345 3673 l
-3185 3673 l
-3186 3673 m
-3346 3673 l
-3346 3674 l
-3186 3674 l
-3187 3674 m
-3347 3674 l
-3347 3675 l
-3187 3675 l
-3188 3675 m
-3347 3675 l
-3347 3676 l
-3188 3676 l
-3189 3676 m
-3348 3676 l
-3348 3677 l
-3189 3677 l
-3189 3677 m
-3349 3677 l
-3349 3678 l
-3189 3678 l
-3190 3678 m
-3350 3678 l
-3350 3679 l
-3190 3679 l
-3191 3679 m
-3351 3679 l
-3351 3680 l
-3191 3680 l
-3192 3680 m
-3351 3680 l
-3351 3681 l
-3192 3681 l
-3193 3681 m
-3352 3681 l
-3352 3682 l
-3193 3682 l
-3194 3682 m
-3353 3682 l
-3353 3683 l
-3194 3683 l
-3194 3683 m
-3354 3683 l
-3354 3684 l
-3194 3684 l
-3195 3684 m
-3355 3684 l
-3355 3685 l
-3195 3685 l
-3196 3685 m
-3356 3685 l
-3356 3686 l
-3196 3686 l
-3197 3686 m
-3356 3686 l
-3356 3687 l
-3197 3687 l
-3198 3687 m
-3357 3687 l
-3357 3688 l
-3198 3688 l
-3198 3688 m
-3358 3688 l
-3358 3689 l
-3198 3689 l
-3199 3689 m
-3359 3689 l
-3359 3690 l
-3199 3690 l
-3200 3690 m
-3360 3690 l
-3360 3691 l
-3200 3691 l
-3201 3691 m
-3361 3691 l
-3361 3692 l
-3201 3692 l
-3202 3692 m
-3361 3692 l
-3361 3693 l
-3202 3693 l
-3203 3693 m
-3362 3693 l
-3362 3694 l
-3203 3694 l
-3203 3694 m
-3363 3694 l
-3363 3695 l
-3203 3695 l
-3204 3695 m
-3364 3695 l
-3364 3696 l
-3204 3696 l
-3205 3696 m
-3365 3696 l
-3365 3697 l
-3205 3697 l
-3206 3697 m
-3366 3697 l
-3366 3698 l
-3206 3698 l
-3207 3698 m
-3366 3698 l
-3366 3699 l
-3207 3699 l
-3207 3699 m
-3367 3699 l
-3367 3700 l
-3207 3700 l
-3208 3700 m
-3368 3700 l
-3368 3701 l
-3208 3701 l
-3209 3701 m
-3369 3701 l
-3369 3702 l
-3209 3702 l
-3210 3702 m
-3370 3702 l
-3370 3703 l
-3210 3703 l
-3211 3703 m
-3371 3703 l
-3371 3704 l
-3211 3704 l
-3212 3704 m
-3371 3704 l
-3371 3705 l
-3212 3705 l
-3212 3705 m
-3372 3705 l
-3372 3706 l
-3212 3706 l
-3213 3706 m
-3373 3706 l
-3373 3707 l
-3213 3707 l
-3214 3707 m
-3374 3707 l
-3374 3708 l
-3214 3708 l
-3215 3708 m
-3375 3708 l
-3375 3709 l
-3215 3709 l
-3216 3709 m
-3375 3709 l
-3375 3710 l
-3216 3710 l
-3216 3710 m
-3375 3710 l
-3375 3711 l
-3216 3711 l
-3217 3711 m
-3374 3711 l
-3374 3712 l
-3217 3712 l
-3218 3712 m
-3373 3712 l
-3373 3713 l
-3218 3713 l
-3219 3713 m
-3372 3713 l
-3372 3714 l
-3219 3714 l
-3220 3714 m
-3371 3714 l
-3371 3715 l
-3220 3715 l
-3221 3715 m
-3369 3715 l
-3369 3716 l
-3221 3716 l
-3221 3716 m
-3368 3716 l
-3368 3717 l
-3221 3717 l
-3222 3717 m
-3367 3717 l
-3367 3718 l
-3222 3718 l
-3223 3718 m
-3366 3718 l
-3366 3719 l
-3223 3719 l
-3224 3719 m
-3365 3719 l
-3365 3720 l
-3224 3720 l
-3225 3720 m
-3363 3720 l
-3363 3721 l
-3225 3721 l
-3226 3721 m
-3362 3721 l
-3362 3722 l
-3226 3722 l
-3226 3722 m
-3361 3722 l
-3361 3723 l
-3226 3723 l
-3227 3723 m
-3360 3723 l
-3360 3724 l
-3227 3724 l
-3228 3724 m
-3359 3724 l
-3359 3725 l
-3228 3725 l
-3229 3725 m
-3357 3725 l
-3357 3726 l
-3229 3726 l
-3230 3726 m
-3356 3726 l
-3356 3727 l
-3230 3727 l
-3230 3727 m
-3355 3727 l
-3355 3728 l
-3230 3728 l
-3231 3728 m
-3354 3728 l
-3354 3729 l
-3231 3729 l
-3232 3729 m
-3353 3729 l
-3353 3730 l
-3232 3730 l
-3233 3730 m
-3351 3730 l
-3351 3731 l
-3233 3731 l
-3234 3731 m
-3350 3731 l
-3350 3732 l
-3234 3732 l
-3235 3732 m
-3349 3732 l
-3349 3733 l
-3235 3733 l
-3235 3733 m
-3348 3733 l
-3348 3734 l
-3235 3734 l
-3236 3734 m
-3347 3734 l
-3347 3735 l
-3236 3735 l
-3237 3735 m
-3345 3735 l
-3345 3736 l
-3237 3736 l
-3238 3736 m
-3344 3736 l
-3344 3737 l
-3238 3737 l
-3239 3737 m
-3343 3737 l
-3343 3738 l
-3239 3738 l
-3239 3738 m
-3342 3738 l
-3342 3739 l
-3239 3739 l
-3240 3739 m
-3341 3739 l
-3341 3740 l
-3240 3740 l
-3241 3740 m
-3339 3740 l
-3339 3741 l
-3241 3741 l
-3242 3741 m
-3338 3741 l
-3338 3742 l
-3242 3742 l
-3243 3742 m
-3337 3742 l
-3337 3743 l
-3243 3743 l
-3244 3743 m
-3336 3743 l
-3336 3744 l
-3244 3744 l
-3244 3744 m
-3335 3744 l
-3335 3745 l
-3244 3745 l
-3245 3745 m
-3333 3745 l
-3333 3746 l
-3245 3746 l
-3246 3746 m
-3332 3746 l
-3332 3747 l
-3246 3747 l
-3247 3747 m
-3331 3747 l
-3331 3748 l
-3247 3748 l
-3248 3748 m
-3330 3748 l
-3330 3749 l
-3248 3749 l
-3248 3749 m
-3328 3749 l
-3328 3750 l
-3248 3750 l
-3249 3750 m
-3327 3750 l
-3327 3751 l
-3249 3751 l
-3250 3751 m
-3326 3751 l
-3326 3752 l
-3250 3752 l
-3251 3752 m
-3325 3752 l
-3325 3753 l
-3251 3753 l
-3252 3753 m
-3324 3753 l
-3324 3754 l
-3252 3754 l
-3253 3754 m
-3322 3754 l
-3322 3755 l
-3253 3755 l
-3253 3755 m
-3321 3755 l
-3321 3756 l
-3253 3756 l
-3254 3756 m
-3320 3756 l
-3320 3757 l
-3254 3757 l
-3255 3757 m
-3319 3757 l
-3319 3758 l
-3255 3758 l
-3256 3758 m
-3318 3758 l
-3318 3759 l
-3256 3759 l
-3257 3759 m
-3316 3759 l
-3316 3760 l
-3257 3760 l
-3258 3760 m
-3315 3760 l
-3315 3761 l
-3258 3761 l
-3258 3761 m
-3314 3761 l
-3314 3762 l
-3258 3762 l
-3259 3762 m
-3313 3762 l
-3313 3763 l
-3259 3763 l
-3260 3763 m
-3312 3763 l
-3312 3764 l
-3260 3764 l
-3261 3764 m
-3310 3764 l
-3310 3765 l
-3261 3765 l
-3262 3765 m
-3309 3765 l
-3309 3766 l
-3262 3766 l
-3262 3766 m
-3308 3766 l
-3308 3767 l
-3262 3767 l
-3263 3767 m
-3307 3767 l
-3307 3768 l
-3263 3768 l
-3264 3768 m
-3306 3768 l
-3306 3769 l
-3264 3769 l
-3265 3769 m
-3304 3769 l
-3304 3770 l
-3265 3770 l
-3266 3770 m
-3303 3770 l
-3303 3771 l
-3266 3771 l
-3267 3771 m
-3302 3771 l
-3302 3772 l
-3267 3772 l
-3267 3772 m
-3301 3772 l
-3301 3773 l
-3267 3773 l
-3268 3773 m
-3300 3773 l
-3300 3774 l
-3268 3774 l
-3269 3774 m
-3298 3774 l
-3298 3775 l
-3269 3775 l
-3270 3775 m
-3297 3775 l
-3297 3776 l
-3270 3776 l
-3271 3776 m
-3296 3776 l
-3296 3777 l
-3271 3777 l
-3271 3777 m
-3295 3777 l
-3295 3778 l
-3271 3778 l
-3272 3778 m
-3294 3778 l
-3294 3779 l
-3272 3779 l
-3273 3779 m
-3292 3779 l
-3292 3780 l
-3273 3780 l
-3274 3780 m
-3291 3780 l
-3291 3781 l
-3274 3781 l
-3275 3781 m
-3290 3781 l
-3290 3782 l
-3275 3782 l
-3276 3782 m
-3289 3782 l
-3289 3783 l
-3276 3783 l
-3276 3783 m
-3288 3783 l
-3288 3784 l
-3276 3784 l
-3277 3784 m
-3286 3784 l
-3286 3785 l
-3277 3785 l
-3278 3785 m
-3285 3785 l
-3285 3786 l
-3278 3786 l
-3279 3786 m
-3284 3786 l
-3284 3787 l
-3279 3787 l
-3280 3787 m
-3283 3787 l
-3283 3788 l
-3280 3788 l
-Y
-3191.3 3488.2 m
-3098 3565 l
-3281 3788 l
-3375 3710 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3163 3539 m
-3211 3597 l
-S
-3235 3685 m
-3226 3687 l
-3214 3680 l
-3209 3674 l
-3204 3662 l
-3209 3647 l
-3222 3631 l
-3238 3617 l
-3254 3610 l
-3266 3611 l
-3277 3618 l
-3279 3621 l
-3284 3634 l
-3283 3645 l
-3276 3657 l
-3273 3659 l
-3260 3664 l
-3249 3663 l
-3238 3656 l
-3235 3653 l
-3230 3640 l
-3231 3629 l
-3238 3617 l
-S
-3260 3735 m
-3255 3723 l
-3259 3708 l
-3273 3692 l
-3282 3684 l
-3301 3674 l
-3316 3672 l
-3327 3679 l
-3333 3686 l
-3337 3698 l
-3333 3712 l
-3320 3729 l
-3310 3737 l
-3291 3747 l
-3276 3749 l
-3265 3742 l
-3260 3735 l
-S
-1 g
-3431 3818 m
-3434 3818 l
-3434 3819 l
-3431 3819 l
-3427 3819 m
-3435 3819 l
-3435 3820 l
-3427 3820 l
-3424 3820 m
-3435 3820 l
-3435 3821 l
-3424 3821 l
-3421 3821 m
-3435 3821 l
-3435 3822 l
-3421 3822 l
-3417 3822 m
-3436 3822 l
-3436 3823 l
-3417 3823 l
-3414 3823 m
-3436 3823 l
-3436 3824 l
-3414 3824 l
-3411 3824 m
-3436 3824 l
-3436 3825 l
-3411 3825 l
-3407 3825 m
-3437 3825 l
-3437 3826 l
-3407 3826 l
-3404 3826 m
-3437 3826 l
-3437 3827 l
-3404 3827 l
-3401 3827 m
-3437 3827 l
-3437 3828 l
-3401 3828 l
-3397 3828 m
-3437 3828 l
-3437 3829 l
-3397 3829 l
-3394 3829 m
-3438 3829 l
-3438 3830 l
-3394 3830 l
-3391 3830 m
-3438 3830 l
-3438 3831 l
-3391 3831 l
-3387 3831 m
-3438 3831 l
-3438 3832 l
-3387 3832 l
-3384 3832 m
-3439 3832 l
-3439 3833 l
-3384 3833 l
-3381 3833 m
-3439 3833 l
-3439 3834 l
-3381 3834 l
-3377 3834 m
-3439 3834 l
-3439 3835 l
-3377 3835 l
-3374 3835 m
-3440 3835 l
-3440 3836 l
-3374 3836 l
-3371 3836 m
-3440 3836 l
-3440 3837 l
-3371 3837 l
-3367 3837 m
-3440 3837 l
-3440 3838 l
-3367 3838 l
-3364 3838 m
-3440 3838 l
-3440 3839 l
-3364 3839 l
-3361 3839 m
-3441 3839 l
-3441 3840 l
-3361 3840 l
-3357 3840 m
-3441 3840 l
-3441 3841 l
-3357 3841 l
-3354 3841 m
-3441 3841 l
-3441 3842 l
-3354 3842 l
-3351 3842 m
-3442 3842 l
-3442 3843 l
-3351 3843 l
-3347 3843 m
-3442 3843 l
-3442 3844 l
-3347 3844 l
-3344 3844 m
-3442 3844 l
-3442 3845 l
-3344 3845 l
-3341 3845 m
-3442 3845 l
-3442 3846 l
-3341 3846 l
-3337 3846 m
-3443 3846 l
-3443 3847 l
-3337 3847 l
-3334 3847 m
-3443 3847 l
-3443 3848 l
-3334 3848 l
-3331 3848 m
-3443 3848 l
-3443 3849 l
-3331 3849 l
-3327 3849 m
-3444 3849 l
-3444 3850 l
-3327 3850 l
-3324 3850 m
-3444 3850 l
-3444 3851 l
-3324 3851 l
-3321 3851 m
-3444 3851 l
-3444 3852 l
-3321 3852 l
-3318 3852 m
-3445 3852 l
-3445 3853 l
-3318 3853 l
-3318 3853 m
-3445 3853 l
-3445 3856 l
-3318 3856 l
-3318 3856 m
-3446 3856 l
-3446 3857 l
-3318 3857 l
-3319 3857 m
-3446 3857 l
-3446 3859 l
-3319 3859 l
-3319 3859 m
-3447 3859 l
-3447 3860 l
-3319 3860 l
-3320 3860 m
-3447 3860 l
-3447 3862 l
-3320 3862 l
-3320 3862 m
-3448 3862 l
-3448 3864 l
-3320 3864 l
-3321 3864 m
-3448 3864 l
-3448 3866 l
-3321 3866 l
-3321 3866 m
-3449 3866 l
-3449 3867 l
-3321 3867 l
-3322 3867 m
-3449 3867 l
-3449 3869 l
-3322 3869 l
-3322 3869 m
-3450 3869 l
-3450 3870 l
-3322 3870 l
-3323 3870 m
-3450 3870 l
-3450 3872 l
-3323 3872 l
-3323 3872 m
-3451 3872 l
-3451 3874 l
-3323 3874 l
-3324 3874 m
-3451 3874 l
-3451 3876 l
-3324 3876 l
-3324 3876 m
-3452 3876 l
-3452 3877 l
-3324 3877 l
-3325 3877 m
-3452 3877 l
-3452 3879 l
-3325 3879 l
-3325 3879 m
-3453 3879 l
-3453 3880 l
-3325 3880 l
-3326 3880 m
-3453 3880 l
-3453 3882 l
-3326 3882 l
-3326 3882 m
-3454 3882 l
-3454 3884 l
-3326 3884 l
-3327 3884 m
-3454 3884 l
-3454 3886 l
-3327 3886 l
-3327 3886 m
-3455 3886 l
-3455 3887 l
-3327 3887 l
-3328 3887 m
-3455 3887 l
-3455 3889 l
-3328 3889 l
-3328 3889 m
-3456 3889 l
-3456 3891 l
-3328 3891 l
-3329 3891 m
-3456 3891 l
-3456 3892 l
-3329 3892 l
-3329 3892 m
-3457 3892 l
-3457 3894 l
-3329 3894 l
-3330 3894 m
-3457 3894 l
-3457 3896 l
-3330 3896 l
-3330 3896 m
-3458 3896 l
-3458 3897 l
-3330 3897 l
-3331 3897 m
-3458 3897 l
-3458 3899 l
-3331 3899 l
-3331 3899 m
-3459 3899 l
-3459 3901 l
-3331 3901 l
-3332 3901 m
-3459 3901 l
-3459 3902 l
-3332 3902 l
-3332 3902 m
-3460 3902 l
-3460 3904 l
-3332 3904 l
-3333 3904 m
-3460 3904 l
-3460 3906 l
-3333 3906 l
-3333 3906 m
-3461 3906 l
-3461 3907 l
-3333 3907 l
-3334 3907 m
-3461 3907 l
-3461 3909 l
-3334 3909 l
-3334 3909 m
-3462 3909 l
-3462 3911 l
-3334 3911 l
-3335 3911 m
-3462 3911 l
-3462 3913 l
-3335 3913 l
-3335 3913 m
-3463 3913 l
-3463 3914 l
-3335 3914 l
-3336 3914 m
-3463 3914 l
-3463 3916 l
-3336 3916 l
-3336 3916 m
-3464 3916 l
-3464 3917 l
-3336 3917 l
-3337 3917 m
-3464 3917 l
-3464 3919 l
-3337 3919 l
-3337 3919 m
-3465 3919 l
-3465 3921 l
-3337 3921 l
-3338 3921 m
-3465 3921 l
-3465 3923 l
-3338 3923 l
-3338 3923 m
-3466 3923 l
-3466 3924 l
-3338 3924 l
-3339 3924 m
-3466 3924 l
-3466 3926 l
-3339 3926 l
-3339 3926 m
-3467 3926 l
-3467 3928 l
-3339 3928 l
-3340 3928 m
-3467 3928 l
-3467 3929 l
-3340 3929 l
-3340 3929 m
-3468 3929 l
-3468 3931 l
-3340 3931 l
-3341 3931 m
-3468 3931 l
-3468 3933 l
-3341 3933 l
-3341 3933 m
-3469 3933 l
-3469 3934 l
-3341 3934 l
-3342 3934 m
-3469 3934 l
-3469 3936 l
-3342 3936 l
-3342 3936 m
-3470 3936 l
-3470 3938 l
-3342 3938 l
-3343 3938 m
-3470 3938 l
-3470 3939 l
-3343 3939 l
-3343 3939 m
-3471 3939 l
-3471 3941 l
-3343 3941 l
-3344 3941 m
-3471 3941 l
-3471 3943 l
-3344 3943 l
-3344 3943 m
-3472 3943 l
-3472 3944 l
-3344 3944 l
-3345 3944 m
-3472 3944 l
-3472 3946 l
-3345 3946 l
-3345 3946 m
-3473 3946 l
-3473 3948 l
-3345 3948 l
-3346 3948 m
-3473 3948 l
-3473 3949 l
-3346 3949 l
-3346 3949 m
-3474 3949 l
-3474 3951 l
-3346 3951 l
-3347 3951 m
-3474 3951 l
-3474 3953 l
-3347 3953 l
-3347 3953 m
-3475 3953 l
-3475 3954 l
-3347 3954 l
-3348 3954 m
-3475 3954 l
-3475 3956 l
-3348 3956 l
-3348 3956 m
-3476 3956 l
-3476 3958 l
-3348 3958 l
-3349 3958 m
-3476 3958 l
-3476 3959 l
-3349 3959 l
-3349 3959 m
-3477 3959 l
-3477 3961 l
-3349 3961 l
-3350 3961 m
-3477 3961 l
-3477 3963 l
-3350 3963 l
-3350 3963 m
-3478 3963 l
-3478 3965 l
-3350 3965 l
-3351 3965 m
-3478 3965 l
-3478 3966 l
-3351 3966 l
-3351 3966 m
-3479 3966 l
-3479 3968 l
-3351 3968 l
-3352 3968 m
-3479 3968 l
-3479 3970 l
-3352 3970 l
-3352 3970 m
-3480 3970 l
-3480 3971 l
-3352 3971 l
-3353 3971 m
-3480 3971 l
-3480 3973 l
-3353 3973 l
-3353 3973 m
-3481 3973 l
-3481 3975 l
-3353 3975 l
-3354 3975 m
-3481 3975 l
-3481 3976 l
-3354 3976 l
-3354 3976 m
-3482 3976 l
-3482 3978 l
-3354 3978 l
-3355 3978 m
-3482 3978 l
-3482 3980 l
-3355 3980 l
-3355 3980 m
-3483 3980 l
-3483 3981 l
-3355 3981 l
-3356 3981 m
-3483 3981 l
-3483 3983 l
-3356 3983 l
-3356 3983 m
-3484 3983 l
-3484 3985 l
-3356 3985 l
-3357 3985 m
-3484 3985 l
-3484 3986 l
-3357 3986 l
-3357 3986 m
-3485 3986 l
-3485 3988 l
-3357 3988 l
-3358 3988 m
-3485 3988 l
-3485 3990 l
-3358 3990 l
-3358 3990 m
-3486 3990 l
-3486 3991 l
-3358 3991 l
-3359 3991 m
-3486 3991 l
-3486 3993 l
-3359 3993 l
-3359 3993 m
-3487 3993 l
-3487 3995 l
-3359 3995 l
-3360 3995 m
-3487 3995 l
-3487 3996 l
-3360 3996 l
-3360 3996 m
-3488 3996 l
-3488 3998 l
-3360 3998 l
-3361 3998 m
-3488 3998 l
-3488 4000 l
-3361 4000 l
-3361 4000 m
-3489 4000 l
-3489 4002 l
-3361 4002 l
-3362 4002 m
-3489 4002 l
-3489 4003 l
-3362 4003 l
-3362 4003 m
-3490 4003 l
-3490 4005 l
-3362 4005 l
-3363 4005 m
-3490 4005 l
-3490 4006 l
-3363 4006 l
-3363 4006 m
-3491 4006 l
-3491 4008 l
-3363 4008 l
-3364 4008 m
-3491 4008 l
-3491 4010 l
-3364 4010 l
-3364 4010 m
-3492 4010 l
-3492 4012 l
-3364 4012 l
-3365 4012 m
-3492 4012 l
-3492 4013 l
-3365 4013 l
-3365 4013 m
-3493 4013 l
-3493 4015 l
-3365 4015 l
-3366 4015 m
-3493 4015 l
-3493 4016 l
-3366 4016 l
-3366 4016 m
-3494 4016 l
-3494 4018 l
-3366 4018 l
-3367 4018 m
-3494 4018 l
-3494 4020 l
-3367 4020 l
-3367 4020 m
-3495 4020 l
-3495 4022 l
-3367 4022 l
-3368 4022 m
-3495 4022 l
-3495 4023 l
-3368 4023 l
-3368 4023 m
-3496 4023 l
-3496 4025 l
-3368 4025 l
-3369 4025 m
-3496 4025 l
-3496 4026 l
-3369 4026 l
-3369 4026 m
-3497 4026 l
-3497 4029 l
-3369 4029 l
-3370 4029 m
-3497 4029 l
-3497 4030 l
-3370 4030 l
-3370 4030 m
-3498 4030 l
-3498 4032 l
-3370 4032 l
-3371 4032 m
-3498 4032 l
-3498 4033 l
-3371 4033 l
-3371 4033 m
-3499 4033 l
-3499 4035 l
-3371 4035 l
-3372 4035 m
-3499 4035 l
-3499 4037 l
-3372 4037 l
-3372 4037 m
-3500 4037 l
-3500 4039 l
-3372 4039 l
-3373 4039 m
-3500 4039 l
-3500 4040 l
-3373 4040 l
-3373 4040 m
-3501 4040 l
-3501 4042 l
-3373 4042 l
-3374 4042 m
-3501 4042 l
-3501 4043 l
-3374 4043 l
-3374 4043 m
-3502 4043 l
-3502 4045 l
-3374 4045 l
-3375 4045 m
-3502 4045 l
-3502 4047 l
-3375 4047 l
-3375 4047 m
-3503 4047 l
-3503 4049 l
-3375 4049 l
-3376 4049 m
-3503 4049 l
-3503 4050 l
-3376 4050 l
-3376 4050 m
-3504 4050 l
-3504 4052 l
-3376 4052 l
-3377 4052 m
-3504 4052 l
-3504 4053 l
-3377 4053 l
-3377 4053 m
-3505 4053 l
-3505 4055 l
-3377 4055 l
-3378 4055 m
-3505 4055 l
-3505 4057 l
-3378 4057 l
-3378 4057 m
-3506 4057 l
-3506 4059 l
-3378 4059 l
-3379 4059 m
-3506 4059 l
-3506 4060 l
-3379 4060 l
-3379 4060 m
-3507 4060 l
-3507 4062 l
-3379 4062 l
-3380 4062 m
-3507 4062 l
-3507 4063 l
-3380 4063 l
-3380 4063 m
-3508 4063 l
-3508 4066 l
-3380 4066 l
-3381 4066 m
-3508 4066 l
-3508 4067 l
-3381 4067 l
-3381 4067 m
-3509 4067 l
-3509 4069 l
-3381 4069 l
-3382 4069 m
-3509 4069 l
-3509 4070 l
-3382 4070 l
-3382 4070 m
-3510 4070 l
-3510 4072 l
-3382 4072 l
-3383 4072 m
-3510 4072 l
-3510 4073 l
-3383 4073 l
-3383 4073 m
-3511 4073 l
-3511 4076 l
-3383 4076 l
-3384 4076 m
-3511 4076 l
-3511 4077 l
-3384 4077 l
-3384 4077 m
-3512 4077 l
-3512 4079 l
-3384 4079 l
-3385 4079 m
-3512 4079 l
-3512 4080 l
-3385 4080 l
-3385 4080 m
-3513 4080 l
-3513 4082 l
-3385 4082 l
-3386 4082 m
-3513 4082 l
-3513 4083 l
-3386 4083 l
-3386 4083 m
-3514 4083 l
-3514 4086 l
-3386 4086 l
-3387 4086 m
-3514 4086 l
-3514 4087 l
-3387 4087 l
-3387 4087 m
-3515 4087 l
-3515 4089 l
-3387 4089 l
-3388 4089 m
-3515 4089 l
-3515 4090 l
-3388 4090 l
-3388 4090 m
-3516 4090 l
-3516 4092 l
-3388 4092 l
-3389 4092 m
-3516 4092 l
-3516 4093 l
-3389 4093 l
-3389 4093 m
-3517 4093 l
-3517 4094 l
-3389 4094 l
-3389 4094 m
-3516 4094 l
-3516 4095 l
-3389 4095 l
-3389 4095 m
-3513 4095 l
-3513 4096 l
-3389 4096 l
-3390 4096 m
-3510 4096 l
-3510 4097 l
-3390 4097 l
-3390 4097 m
-3507 4097 l
-3507 4098 l
-3390 4098 l
-3390 4098 m
-3503 4098 l
-3503 4099 l
-3390 4099 l
-3391 4099 m
-3500 4099 l
-3500 4100 l
-3391 4100 l
-3391 4100 m
-3497 4100 l
-3497 4101 l
-3391 4101 l
-3391 4101 m
-3493 4101 l
-3493 4102 l
-3391 4102 l
-3391 4102 m
-3490 4102 l
-3490 4103 l
-3391 4103 l
-3392 4103 m
-3487 4103 l
-3487 4104 l
-3392 4104 l
-3392 4104 m
-3483 4104 l
-3483 4105 l
-3392 4105 l
-3392 4105 m
-3480 4105 l
-3480 4106 l
-3392 4106 l
-3393 4106 m
-3477 4106 l
-3477 4107 l
-3393 4107 l
-3393 4107 m
-3473 4107 l
-3473 4108 l
-3393 4108 l
-3393 4108 m
-3470 4108 l
-3470 4109 l
-3393 4109 l
-3394 4109 m
-3467 4109 l
-3467 4110 l
-3394 4110 l
-3394 4110 m
-3463 4110 l
-3463 4111 l
-3394 4111 l
-3394 4111 m
-3460 4111 l
-3460 4112 l
-3394 4112 l
-3394 4112 m
-3457 4112 l
-3457 4113 l
-3394 4113 l
-3395 4113 m
-3454 4113 l
-3454 4114 l
-3395 4114 l
-3395 4114 m
-3450 4114 l
-3450 4115 l
-3395 4115 l
-3395 4115 m
-3447 4115 l
-3447 4116 l
-3395 4116 l
-3396 4116 m
-3444 4116 l
-3444 4117 l
-3396 4117 l
-3396 4117 m
-3440 4117 l
-3440 4118 l
-3396 4118 l
-3396 4118 m
-3437 4118 l
-3437 4119 l
-3396 4119 l
-3397 4119 m
-3434 4119 l
-3434 4120 l
-3397 4120 l
-3397 4120 m
-3430 4120 l
-3430 4121 l
-3397 4121 l
-3397 4121 m
-3427 4121 l
-3427 4122 l
-3397 4122 l
-3397 4122 m
-3424 4122 l
-3424 4123 l
-3397 4123 l
-3398 4123 m
-3420 4123 l
-3420 4124 l
-3398 4124 l
-3398 4124 m
-3417 4124 l
-3417 4125 l
-3398 4125 l
-3398 4125 m
-3414 4125 l
-3414 4126 l
-3398 4126 l
-3399 4126 m
-3410 4126 l
-3410 4127 l
-3399 4127 l
-3399 4127 m
-3407 4127 l
-3407 4128 l
-3399 4128 l
-3399 4128 m
-3404 4128 l
-3404 4129 l
-3399 4129 l
-Y
-3433.7 3818.2 m
-3318 3853 l
-3400 4129 l
-3516 4094 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3388 3854 m
-3409 3926 l
-S
-3372 3976 m
-3385 4020 l
-3410 3987 l
-3414 3999 l
-3420 4005 l
-3425 4008 l
-3438 4009 l
-3446 4006 l
-3457 3999 l
-3463 3988 l
-3463 3975 l
-3460 3963 l
-3452 3952 l
-3447 3949 l
-3438 3948 l
-S
-3401 4072 m
-3401 4059 l
-3411 4047 l
-3430 4037 l
-3442 4034 l
-3463 4032 l
-3477 4036 l
-3485 4047 l
-3487 4055 l
-3487 4068 l
-3477 4080 l
-3458 4090 l
-3446 4093 l
-3425 4095 l
-3411 4091 l
-3403 4080 l
-3401 4072 l
-S
-1 g
-3282 4627 m
-3285 4627 l
-3285 4628 l
-3282 4628 l
-3281 4628 m
-3286 4628 l
-3286 4629 l
-3281 4629 l
-3280 4629 m
-3287 4629 l
-3287 4630 l
-3280 4630 l
-3279 4630 m
-3288 4630 l
-3288 4631 l
-3279 4631 l
-3278 4631 m
-3290 4631 l
-3290 4632 l
-3278 4632 l
-3277 4632 m
-3291 4632 l
-3291 4633 l
-3277 4633 l
-3277 4633 m
-3292 4633 l
-3292 4634 l
-3277 4634 l
-3276 4634 m
-3293 4634 l
-3293 4635 l
-3276 4635 l
-3275 4635 m
-3294 4635 l
-3294 4636 l
-3275 4636 l
-3274 4636 m
-3296 4636 l
-3296 4637 l
-3274 4637 l
-3273 4637 m
-3297 4637 l
-3297 4638 l
-3273 4638 l
-3272 4638 m
-3298 4638 l
-3298 4639 l
-3272 4639 l
-3272 4639 m
-3299 4639 l
-3299 4640 l
-3272 4640 l
-3271 4640 m
-3300 4640 l
-3300 4641 l
-3271 4641 l
-3270 4641 m
-3302 4641 l
-3302 4642 l
-3270 4642 l
-3269 4642 m
-3303 4642 l
-3303 4643 l
-3269 4643 l
-3268 4643 m
-3304 4643 l
-3304 4644 l
-3268 4644 l
-3267 4644 m
-3305 4644 l
-3305 4645 l
-3267 4645 l
-3267 4645 m
-3306 4645 l
-3306 4646 l
-3267 4646 l
-3266 4646 m
-3308 4646 l
-3308 4647 l
-3266 4647 l
-3265 4647 m
-3309 4647 l
-3309 4648 l
-3265 4648 l
-3264 4648 m
-3310 4648 l
-3310 4649 l
-3264 4649 l
-3263 4649 m
-3311 4649 l
-3311 4650 l
-3263 4650 l
-3262 4650 m
-3312 4650 l
-3312 4651 l
-3262 4651 l
-3262 4651 m
-3314 4651 l
-3314 4652 l
-3262 4652 l
-3261 4652 m
-3315 4652 l
-3315 4653 l
-3261 4653 l
-3260 4653 m
-3316 4653 l
-3316 4654 l
-3260 4654 l
-3259 4654 m
-3317 4654 l
-3317 4655 l
-3259 4655 l
-3258 4655 m
-3318 4655 l
-3318 4656 l
-3258 4656 l
-3257 4656 m
-3320 4656 l
-3320 4657 l
-3257 4657 l
-3257 4657 m
-3321 4657 l
-3321 4658 l
-3257 4658 l
-3256 4658 m
-3322 4658 l
-3322 4659 l
-3256 4659 l
-3255 4659 m
-3323 4659 l
-3323 4660 l
-3255 4660 l
-3254 4660 m
-3324 4660 l
-3324 4661 l
-3254 4661 l
-3253 4661 m
-3326 4661 l
-3326 4662 l
-3253 4662 l
-3252 4662 m
-3327 4662 l
-3327 4663 l
-3252 4663 l
-3252 4663 m
-3328 4663 l
-3328 4664 l
-3252 4664 l
-3251 4664 m
-3329 4664 l
-3329 4665 l
-3251 4665 l
-3250 4665 m
-3330 4665 l
-3330 4666 l
-3250 4666 l
-3249 4666 m
-3332 4666 l
-3332 4667 l
-3249 4667 l
-3248 4667 m
-3333 4667 l
-3333 4668 l
-3248 4668 l
-3247 4668 m
-3334 4668 l
-3334 4669 l
-3247 4669 l
-3247 4669 m
-3335 4669 l
-3335 4670 l
-3247 4670 l
-3246 4670 m
-3336 4670 l
-3336 4671 l
-3246 4671 l
-3245 4671 m
-3338 4671 l
-3338 4672 l
-3245 4672 l
-3244 4672 m
-3339 4672 l
-3339 4673 l
-3244 4673 l
-3243 4673 m
-3340 4673 l
-3340 4674 l
-3243 4674 l
-3242 4674 m
-3341 4674 l
-3341 4675 l
-3242 4675 l
-3241 4675 m
-3342 4675 l
-3342 4676 l
-3241 4676 l
-3241 4676 m
-3344 4676 l
-3344 4677 l
-3241 4677 l
-3240 4677 m
-3345 4677 l
-3345 4678 l
-3240 4678 l
-3239 4678 m
-3346 4678 l
-3346 4679 l
-3239 4679 l
-3238 4679 m
-3347 4679 l
-3347 4680 l
-3238 4680 l
-3237 4680 m
-3348 4680 l
-3348 4681 l
-3237 4681 l
-3236 4681 m
-3350 4681 l
-3350 4682 l
-3236 4682 l
-3236 4682 m
-3351 4682 l
-3351 4683 l
-3236 4683 l
-3235 4683 m
-3352 4683 l
-3352 4684 l
-3235 4684 l
-3234 4684 m
-3353 4684 l
-3353 4685 l
-3234 4685 l
-3233 4685 m
-3354 4685 l
-3354 4686 l
-3233 4686 l
-3232 4686 m
-3356 4686 l
-3356 4687 l
-3232 4687 l
-3231 4687 m
-3357 4687 l
-3357 4688 l
-3231 4688 l
-3231 4688 m
-3358 4688 l
-3358 4689 l
-3231 4689 l
-3230 4689 m
-3359 4689 l
-3359 4690 l
-3230 4690 l
-3229 4690 m
-3360 4690 l
-3360 4691 l
-3229 4691 l
-3228 4691 m
-3362 4691 l
-3362 4692 l
-3228 4692 l
-3227 4692 m
-3363 4692 l
-3363 4693 l
-3227 4693 l
-3226 4693 m
-3364 4693 l
-3364 4694 l
-3226 4694 l
-3226 4694 m
-3365 4694 l
-3365 4695 l
-3226 4695 l
-3225 4695 m
-3366 4695 l
-3366 4696 l
-3225 4696 l
-3224 4696 m
-3368 4696 l
-3368 4697 l
-3224 4697 l
-3223 4697 m
-3369 4697 l
-3369 4698 l
-3223 4698 l
-3222 4698 m
-3370 4698 l
-3370 4699 l
-3222 4699 l
-3221 4699 m
-3371 4699 l
-3371 4700 l
-3221 4700 l
-3221 4700 m
-3372 4700 l
-3372 4701 l
-3221 4701 l
-3220 4701 m
-3374 4701 l
-3374 4702 l
-3220 4702 l
-3219 4702 m
-3375 4702 l
-3375 4703 l
-3219 4703 l
-3218 4703 m
-3376 4703 l
-3376 4704 l
-3218 4704 l
-3217 4704 m
-3376 4704 l
-3376 4705 l
-3217 4705 l
-3216 4705 m
-3376 4705 l
-3376 4706 l
-3216 4706 l
-3216 4706 m
-3375 4706 l
-3375 4707 l
-3216 4707 l
-3215 4707 m
-3374 4707 l
-3374 4708 l
-3215 4708 l
-3214 4708 m
-3373 4708 l
-3373 4709 l
-3214 4709 l
-3213 4709 m
-3372 4709 l
-3372 4710 l
-3213 4710 l
-3212 4710 m
-3372 4710 l
-3372 4711 l
-3212 4711 l
-3211 4711 m
-3371 4711 l
-3371 4712 l
-3211 4712 l
-3211 4712 m
-3370 4712 l
-3370 4713 l
-3211 4713 l
-3210 4713 m
-3369 4713 l
-3369 4714 l
-3210 4714 l
-3209 4714 m
-3368 4714 l
-3368 4715 l
-3209 4715 l
-3208 4715 m
-3367 4715 l
-3367 4716 l
-3208 4716 l
-3207 4716 m
-3367 4716 l
-3367 4717 l
-3207 4717 l
-3206 4717 m
-3366 4717 l
-3366 4718 l
-3206 4718 l
-3206 4718 m
-3365 4718 l
-3365 4719 l
-3206 4719 l
-3205 4719 m
-3364 4719 l
-3364 4720 l
-3205 4720 l
-3204 4720 m
-3363 4720 l
-3363 4721 l
-3204 4721 l
-3203 4721 m
-3362 4721 l
-3362 4722 l
-3203 4722 l
-3202 4722 m
-3362 4722 l
-3362 4723 l
-3202 4723 l
-3201 4723 m
-3361 4723 l
-3361 4724 l
-3201 4724 l
-3200 4724 m
-3360 4724 l
-3360 4725 l
-3200 4725 l
-3200 4725 m
-3359 4725 l
-3359 4726 l
-3200 4726 l
-3199 4726 m
-3358 4726 l
-3358 4727 l
-3199 4727 l
-3198 4727 m
-3358 4727 l
-3358 4728 l
-3198 4728 l
-3197 4728 m
-3357 4728 l
-3357 4729 l
-3197 4729 l
-3196 4729 m
-3356 4729 l
-3356 4730 l
-3196 4730 l
-3195 4730 m
-3355 4730 l
-3355 4731 l
-3195 4731 l
-3195 4731 m
-3354 4731 l
-3354 4732 l
-3195 4732 l
-3194 4732 m
-3353 4732 l
-3353 4733 l
-3194 4733 l
-3193 4733 m
-3353 4733 l
-3353 4734 l
-3193 4734 l
-3192 4734 m
-3352 4734 l
-3352 4735 l
-3192 4735 l
-3191 4735 m
-3351 4735 l
-3351 4736 l
-3191 4736 l
-3190 4736 m
-3350 4736 l
-3350 4737 l
-3190 4737 l
-3190 4737 m
-3349 4737 l
-3349 4738 l
-3190 4738 l
-3189 4738 m
-3348 4738 l
-3348 4739 l
-3189 4739 l
-3188 4739 m
-3348 4739 l
-3348 4740 l
-3188 4740 l
-3187 4740 m
-3347 4740 l
-3347 4741 l
-3187 4741 l
-3186 4741 m
-3346 4741 l
-3346 4742 l
-3186 4742 l
-3185 4742 m
-3345 4742 l
-3345 4743 l
-3185 4743 l
-3185 4743 m
-3344 4743 l
-3344 4744 l
-3185 4744 l
-3184 4744 m
-3344 4744 l
-3344 4745 l
-3184 4745 l
-3183 4745 m
-3343 4745 l
-3343 4746 l
-3183 4746 l
-3182 4746 m
-3342 4746 l
-3342 4747 l
-3182 4747 l
-3181 4747 m
-3341 4747 l
-3341 4748 l
-3181 4748 l
-3180 4748 m
-3340 4748 l
-3340 4749 l
-3180 4749 l
-3180 4749 m
-3339 4749 l
-3339 4750 l
-3180 4750 l
-3179 4750 m
-3339 4750 l
-3339 4751 l
-3179 4751 l
-3178 4751 m
-3338 4751 l
-3338 4752 l
-3178 4752 l
-3177 4752 m
-3337 4752 l
-3337 4753 l
-3177 4753 l
-3176 4753 m
-3336 4753 l
-3336 4754 l
-3176 4754 l
-3175 4754 m
-3335 4754 l
-3335 4755 l
-3175 4755 l
-3175 4755 m
-3334 4755 l
-3334 4756 l
-3175 4756 l
-3174 4756 m
-3334 4756 l
-3334 4757 l
-3174 4757 l
-3173 4757 m
-3333 4757 l
-3333 4758 l
-3173 4758 l
-3172 4758 m
-3332 4758 l
-3332 4759 l
-3172 4759 l
-3171 4759 m
-3331 4759 l
-3331 4760 l
-3171 4760 l
-3170 4760 m
-3330 4760 l
-3330 4762 l
-3170 4762 l
-3169 4762 m
-3329 4762 l
-3329 4763 l
-3169 4763 l
-3168 4763 m
-3328 4763 l
-3328 4764 l
-3168 4764 l
-3167 4764 m
-3327 4764 l
-3327 4765 l
-3167 4765 l
-3166 4765 m
-3326 4765 l
-3326 4766 l
-3166 4766 l
-3165 4766 m
-3325 4766 l
-3325 4767 l
-3165 4767 l
-3165 4767 m
-3325 4767 l
-3325 4768 l
-3165 4768 l
-3165 4768 m
-3324 4768 l
-3324 4769 l
-3165 4769 l
-3166 4769 m
-3323 4769 l
-3323 4770 l
-3166 4770 l
-3167 4770 m
-3322 4770 l
-3322 4771 l
-3167 4771 l
-3168 4771 m
-3321 4771 l
-3321 4772 l
-3168 4772 l
-3169 4772 m
-3320 4772 l
-3320 4773 l
-3169 4773 l
-3171 4773 m
-3320 4773 l
-3320 4774 l
-3171 4774 l
-3172 4774 m
-3319 4774 l
-3319 4775 l
-3172 4775 l
-3173 4775 m
-3318 4775 l
-3318 4776 l
-3173 4776 l
-3174 4776 m
-3317 4776 l
-3317 4777 l
-3174 4777 l
-3175 4777 m
-3316 4777 l
-3316 4778 l
-3175 4778 l
-3177 4778 m
-3316 4778 l
-3316 4779 l
-3177 4779 l
-3178 4779 m
-3315 4779 l
-3315 4780 l
-3178 4780 l
-3179 4780 m
-3314 4780 l
-3314 4781 l
-3179 4781 l
-3180 4781 m
-3313 4781 l
-3313 4782 l
-3180 4782 l
-3181 4782 m
-3312 4782 l
-3312 4783 l
-3181 4783 l
-3183 4783 m
-3311 4783 l
-3311 4784 l
-3183 4784 l
-3184 4784 m
-3311 4784 l
-3311 4785 l
-3184 4785 l
-3185 4785 m
-3310 4785 l
-3310 4786 l
-3185 4786 l
-3186 4786 m
-3309 4786 l
-3309 4787 l
-3186 4787 l
-3187 4787 m
-3308 4787 l
-3308 4788 l
-3187 4788 l
-3189 4788 m
-3307 4788 l
-3307 4789 l
-3189 4789 l
-3190 4789 m
-3306 4789 l
-3306 4790 l
-3190 4790 l
-3191 4790 m
-3306 4790 l
-3306 4791 l
-3191 4791 l
-3192 4791 m
-3305 4791 l
-3305 4792 l
-3192 4792 l
-3193 4792 m
-3304 4792 l
-3304 4793 l
-3193 4793 l
-3195 4793 m
-3303 4793 l
-3303 4794 l
-3195 4794 l
-3196 4794 m
-3302 4794 l
-3302 4795 l
-3196 4795 l
-3197 4795 m
-3302 4795 l
-3302 4796 l
-3197 4796 l
-3198 4796 m
-3301 4796 l
-3301 4797 l
-3198 4797 l
-3199 4797 m
-3300 4797 l
-3300 4798 l
-3199 4798 l
-3201 4798 m
-3299 4798 l
-3299 4799 l
-3201 4799 l
-3202 4799 m
-3298 4799 l
-3298 4800 l
-3202 4800 l
-3203 4800 m
-3297 4800 l
-3297 4801 l
-3203 4801 l
-3204 4801 m
-3297 4801 l
-3297 4802 l
-3204 4802 l
-3205 4802 m
-3296 4802 l
-3296 4803 l
-3205 4803 l
-3207 4803 m
-3295 4803 l
-3295 4804 l
-3207 4804 l
-3208 4804 m
-3294 4804 l
-3294 4805 l
-3208 4805 l
-3209 4805 m
-3293 4805 l
-3293 4806 l
-3209 4806 l
-3210 4806 m
-3292 4806 l
-3292 4807 l
-3210 4807 l
-3212 4807 m
-3292 4807 l
-3292 4808 l
-3212 4808 l
-3213 4808 m
-3291 4808 l
-3291 4809 l
-3213 4809 l
-3214 4809 m
-3290 4809 l
-3290 4810 l
-3214 4810 l
-3215 4810 m
-3289 4810 l
-3289 4811 l
-3215 4811 l
-3216 4811 m
-3288 4811 l
-3288 4812 l
-3216 4812 l
-3218 4812 m
-3288 4812 l
-3288 4813 l
-3218 4813 l
-3219 4813 m
-3287 4813 l
-3287 4814 l
-3219 4814 l
-3220 4814 m
-3286 4814 l
-3286 4815 l
-3220 4815 l
-3221 4815 m
-3285 4815 l
-3285 4816 l
-3221 4816 l
-3222 4816 m
-3284 4816 l
-3284 4817 l
-3222 4817 l
-3224 4817 m
-3283 4817 l
-3283 4818 l
-3224 4818 l
-3225 4818 m
-3283 4818 l
-3283 4819 l
-3225 4819 l
-3226 4819 m
-3282 4819 l
-3282 4820 l
-3226 4820 l
-3227 4820 m
-3281 4820 l
-3281 4821 l
-3227 4821 l
-3228 4821 m
-3280 4821 l
-3280 4822 l
-3228 4822 l
-3230 4822 m
-3279 4822 l
-3279 4823 l
-3230 4823 l
-3231 4823 m
-3278 4823 l
-3278 4824 l
-3231 4824 l
-3232 4824 m
-3278 4824 l
-3278 4825 l
-3232 4825 l
-3233 4825 m
-3277 4825 l
-3277 4826 l
-3233 4826 l
-3234 4826 m
-3276 4826 l
-3276 4827 l
-3234 4827 l
-3236 4827 m
-3275 4827 l
-3275 4828 l
-3236 4828 l
-3237 4828 m
-3274 4828 l
-3274 4829 l
-3237 4829 l
-3238 4829 m
-3274 4829 l
-3274 4830 l
-3238 4830 l
-3239 4830 m
-3273 4830 l
-3273 4831 l
-3239 4831 l
-3240 4831 m
-3272 4831 l
-3272 4832 l
-3240 4832 l
-3242 4832 m
-3271 4832 l
-3271 4833 l
-3242 4833 l
-3243 4833 m
-3270 4833 l
-3270 4834 l
-3243 4834 l
-3244 4834 m
-3269 4834 l
-3269 4835 l
-3244 4835 l
-3245 4835 m
-3269 4835 l
-3269 4836 l
-3245 4836 l
-3246 4836 m
-3268 4836 l
-3268 4837 l
-3246 4837 l
-3248 4837 m
-3267 4837 l
-3267 4838 l
-3248 4838 l
-3249 4838 m
-3266 4838 l
-3266 4839 l
-3249 4839 l
-3250 4839 m
-3265 4839 l
-3265 4840 l
-3250 4840 l
-3251 4840 m
-3264 4840 l
-3264 4841 l
-3251 4841 l
-3252 4841 m
-3264 4841 l
-3264 4842 l
-3252 4842 l
-3254 4842 m
-3263 4842 l
-3263 4843 l
-3254 4843 l
-3255 4843 m
-3262 4843 l
-3262 4844 l
-3255 4844 l
-3256 4844 m
-3261 4844 l
-3261 4845 l
-3256 4845 l
-3257 4845 m
-3260 4845 l
-3260 4846 l
-3257 4846 l
-Y
-3375.8 4704.2 m
-3283 4627 l
-3165 4768 l
-3259 4846 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3277 4660 m
-3247 4695 l
-3289 4698 l
-3281 4707 l
-3279 4716 l
-3280 4722 l
-3287 4733 l
-3293 4739 l
-3305 4743 l
-3317 4742 l
-3328 4735 l
-3336 4726 l
-3341 4713 l
-3341 4708 l
-3337 4699 l
-S
-3213 4737 m
-3224 4730 l
-3239 4732 l
-3258 4742 l
-3267 4750 l
-3281 4767 l
-3285 4781 l
-3280 4793 l
-3275 4800 l
-3264 4807 l
-3249 4805 l
-3230 4795 l
-3220 4787 l
-3207 4770 l
-3203 4756 l
-3207 4744 l
-3213 4737 l
-S
-1 g
-2920 4919 m
-2925 4919 l
-2925 4920 l
-2920 4920 l
-2916 4920 m
-2925 4920 l
-2925 4921 l
-2916 4921 l
-2913 4921 m
-2925 4921 l
-2925 4922 l
-2913 4922 l
-2909 4922 m
-2926 4922 l
-2926 4923 l
-2909 4923 l
-2906 4923 m
-2926 4923 l
-2926 4924 l
-2906 4924 l
-2902 4924 m
-2926 4924 l
-2926 4925 l
-2902 4925 l
-2899 4925 m
-2927 4925 l
-2927 4926 l
-2899 4926 l
-2895 4926 m
-2927 4926 l
-2927 4927 l
-2895 4927 l
-2892 4927 m
-2927 4927 l
-2927 4928 l
-2892 4928 l
-2888 4928 m
-2927 4928 l
-2927 4929 l
-2888 4929 l
-2885 4929 m
-2928 4929 l
-2928 4930 l
-2885 4930 l
-2881 4930 m
-2928 4930 l
-2928 4931 l
-2881 4931 l
-2878 4931 m
-2928 4931 l
-2928 4932 l
-2878 4932 l
-2874 4932 m
-2929 4932 l
-2929 4933 l
-2874 4933 l
-2871 4933 m
-2929 4933 l
-2929 4934 l
-2871 4934 l
-2867 4934 m
-2929 4934 l
-2929 4935 l
-2867 4935 l
-2864 4935 m
-2929 4935 l
-2929 4936 l
-2864 4936 l
-2860 4936 m
-2930 4936 l
-2930 4937 l
-2860 4937 l
-2857 4937 m
-2930 4937 l
-2930 4938 l
-2857 4938 l
-2853 4938 m
-2930 4938 l
-2930 4939 l
-2853 4939 l
-2850 4939 m
-2931 4939 l
-2931 4940 l
-2850 4940 l
-2846 4940 m
-2931 4940 l
-2931 4941 l
-2846 4941 l
-2843 4941 m
-2931 4941 l
-2931 4942 l
-2843 4942 l
-2839 4942 m
-2931 4942 l
-2931 4943 l
-2839 4943 l
-2836 4943 m
-2932 4943 l
-2932 4944 l
-2836 4944 l
-2832 4944 m
-2932 4944 l
-2932 4945 l
-2832 4945 l
-2829 4945 m
-2932 4945 l
-2932 4946 l
-2829 4946 l
-2825 4946 m
-2933 4946 l
-2933 4947 l
-2825 4947 l
-2822 4947 m
-2933 4947 l
-2933 4948 l
-2822 4948 l
-2818 4948 m
-2933 4948 l
-2933 4949 l
-2818 4949 l
-2815 4949 m
-2933 4949 l
-2933 4950 l
-2815 4950 l
-2811 4950 m
-2934 4950 l
-2934 4951 l
-2811 4951 l
-2808 4951 m
-2934 4951 l
-2934 4952 l
-2808 4952 l
-2804 4952 m
-2934 4952 l
-2934 4953 l
-2804 4953 l
-2801 4953 m
-2935 4953 l
-2935 4954 l
-2801 4954 l
-2797 4954 m
-2935 4954 l
-2935 4955 l
-2797 4955 l
-2794 4955 m
-2935 4955 l
-2935 4956 l
-2794 4956 l
-2790 4956 m
-2935 4956 l
-2935 4957 l
-2790 4957 l
-2787 4957 m
-2936 4957 l
-2936 4958 l
-2787 4958 l
-2783 4958 m
-2936 4958 l
-2936 4959 l
-2783 4959 l
-2780 4959 m
-2936 4959 l
-2936 4960 l
-2780 4960 l
-2776 4960 m
-2937 4960 l
-2937 4961 l
-2776 4961 l
-2773 4961 m
-2937 4961 l
-2937 4962 l
-2773 4962 l
-2769 4962 m
-2937 4962 l
-2937 4963 l
-2769 4963 l
-2766 4963 m
-2937 4963 l
-2937 4964 l
-2766 4964 l
-2762 4964 m
-2938 4964 l
-2938 4965 l
-2762 4965 l
-2759 4965 m
-2938 4965 l
-2938 4966 l
-2759 4966 l
-2755 4966 m
-2938 4966 l
-2938 4967 l
-2755 4967 l
-2752 4967 m
-2939 4967 l
-2939 4968 l
-2752 4968 l
-2752 4968 m
-2939 4968 l
-2939 4971 l
-2752 4971 l
-2752 4971 m
-2940 4971 l
-2940 4972 l
-2752 4972 l
-2753 4972 m
-2940 4972 l
-2940 4974 l
-2753 4974 l
-2753 4974 m
-2941 4974 l
-2941 4976 l
-2753 4976 l
-2754 4976 m
-2941 4976 l
-2941 4978 l
-2754 4978 l
-2754 4978 m
-2942 4978 l
-2942 4979 l
-2754 4979 l
-2755 4979 m
-2942 4979 l
-2942 4981 l
-2755 4981 l
-2755 4981 m
-2943 4981 l
-2943 4983 l
-2755 4983 l
-2756 4983 m
-2943 4983 l
-2943 4985 l
-2756 4985 l
-2756 4985 m
-2944 4985 l
-2944 4986 l
-2756 4986 l
-2757 4986 m
-2944 4986 l
-2944 4988 l
-2757 4988 l
-2757 4988 m
-2945 4988 l
-2945 4990 l
-2757 4990 l
-2758 4990 m
-2945 4990 l
-2945 4992 l
-2758 4992 l
-2758 4992 m
-2946 4992 l
-2946 4993 l
-2758 4993 l
-2759 4993 m
-2946 4993 l
-2946 4995 l
-2759 4995 l
-2759 4995 m
-2947 4995 l
-2947 4997 l
-2759 4997 l
-2760 4997 m
-2947 4997 l
-2947 4999 l
-2760 4999 l
-2760 4999 m
-2948 4999 l
-2948 5000 l
-2760 5000 l
-2761 5000 m
-2948 5000 l
-2948 5002 l
-2761 5002 l
-2761 5002 m
-2949 5002 l
-2949 5004 l
-2761 5004 l
-2762 5004 m
-2949 5004 l
-2949 5006 l
-2762 5006 l
-2762 5006 m
-2950 5006 l
-2950 5007 l
-2762 5007 l
-2763 5007 m
-2950 5007 l
-2950 5009 l
-2763 5009 l
-2763 5009 m
-2951 5009 l
-2951 5011 l
-2763 5011 l
-2764 5011 m
-2951 5011 l
-2951 5013 l
-2764 5013 l
-2764 5013 m
-2952 5013 l
-2952 5015 l
-2764 5015 l
-2765 5015 m
-2952 5015 l
-2952 5016 l
-2765 5016 l
-2765 5016 m
-2953 5016 l
-2953 5018 l
-2765 5018 l
-2766 5018 m
-2953 5018 l
-2953 5020 l
-2766 5020 l
-2766 5020 m
-2954 5020 l
-2954 5022 l
-2766 5022 l
-2767 5022 m
-2954 5022 l
-2954 5023 l
-2767 5023 l
-2767 5023 m
-2955 5023 l
-2955 5025 l
-2767 5025 l
-2768 5025 m
-2955 5025 l
-2955 5026 l
-2768 5026 l
-2768 5026 m
-2956 5026 l
-2956 5029 l
-2768 5029 l
-2769 5029 m
-2956 5029 l
-2956 5030 l
-2769 5030 l
-2769 5030 m
-2957 5030 l
-2957 5032 l
-2769 5032 l
-2770 5032 m
-2957 5032 l
-2957 5033 l
-2770 5033 l
-2770 5033 m
-2958 5033 l
-2958 5035 l
-2770 5035 l
-2770 5035 m
-2958 5035 l
-2958 5036 l
-2770 5036 l
-2771 5036 m
-2957 5036 l
-2957 5037 l
-2771 5037 l
-2771 5037 m
-2953 5037 l
-2953 5038 l
-2771 5038 l
-2771 5038 m
-2950 5038 l
-2950 5039 l
-2771 5039 l
-2772 5039 m
-2946 5039 l
-2946 5040 l
-2772 5040 l
-2772 5040 m
-2943 5040 l
-2943 5041 l
-2772 5041 l
-2772 5041 m
-2939 5041 l
-2939 5042 l
-2772 5042 l
-2772 5042 m
-2936 5042 l
-2936 5043 l
-2772 5043 l
-2773 5043 m
-2932 5043 l
-2932 5044 l
-2773 5044 l
-2773 5044 m
-2929 5044 l
-2929 5045 l
-2773 5045 l
-2773 5045 m
-2925 5045 l
-2925 5046 l
-2773 5046 l
-2774 5046 m
-2922 5046 l
-2922 5047 l
-2774 5047 l
-2774 5047 m
-2918 5047 l
-2918 5048 l
-2774 5048 l
-2774 5048 m
-2915 5048 l
-2915 5049 l
-2774 5049 l
-2774 5049 m
-2911 5049 l
-2911 5050 l
-2774 5050 l
-2775 5050 m
-2908 5050 l
-2908 5051 l
-2775 5051 l
-2775 5051 m
-2904 5051 l
-2904 5052 l
-2775 5052 l
-2775 5052 m
-2901 5052 l
-2901 5053 l
-2775 5053 l
-2775 5053 m
-2897 5053 l
-2897 5054 l
-2775 5054 l
-2776 5054 m
-2894 5054 l
-2894 5055 l
-2776 5055 l
-2776 5055 m
-2890 5055 l
-2890 5056 l
-2776 5056 l
-2776 5056 m
-2887 5056 l
-2887 5057 l
-2776 5057 l
-2777 5057 m
-2883 5057 l
-2883 5058 l
-2777 5058 l
-2777 5058 m
-2880 5058 l
-2880 5059 l
-2777 5059 l
-2777 5059 m
-2876 5059 l
-2876 5060 l
-2777 5060 l
-2777 5060 m
-2873 5060 l
-2873 5061 l
-2777 5061 l
-2778 5061 m
-2869 5061 l
-2869 5062 l
-2778 5062 l
-2778 5062 m
-2866 5062 l
-2866 5063 l
-2778 5063 l
-2778 5063 m
-2862 5063 l
-2862 5064 l
-2778 5064 l
-2779 5064 m
-2859 5064 l
-2859 5065 l
-2779 5065 l
-2779 5065 m
-2855 5065 l
-2855 5066 l
-2779 5066 l
-2779 5066 m
-2852 5066 l
-2852 5067 l
-2779 5067 l
-2779 5067 m
-2848 5067 l
-2848 5068 l
-2779 5068 l
-2780 5068 m
-2845 5068 l
-2845 5069 l
-2780 5069 l
-2780 5069 m
-2841 5069 l
-2841 5070 l
-2780 5070 l
-2780 5070 m
-2838 5070 l
-2838 5071 l
-2780 5071 l
-2781 5071 m
-2834 5071 l
-2834 5072 l
-2781 5072 l
-2781 5072 m
-2831 5072 l
-2831 5073 l
-2781 5073 l
-2781 5073 m
-2827 5073 l
-2827 5074 l
-2781 5074 l
-2781 5074 m
-2824 5074 l
-2824 5075 l
-2781 5075 l
-2782 5075 m
-2820 5075 l
-2820 5076 l
-2782 5076 l
-2782 5076 m
-2817 5076 l
-2817 5077 l
-2782 5077 l
-2782 5077 m
-2813 5077 l
-2813 5078 l
-2782 5078 l
-2783 5078 m
-2810 5078 l
-2810 5079 l
-2783 5079 l
-2783 5079 m
-2806 5079 l
-2806 5080 l
-2783 5080 l
-2783 5080 m
-2803 5080 l
-2803 5081 l
-2783 5081 l
-2783 5081 m
-2799 5081 l
-2799 5082 l
-2783 5082 l
-2784 5082 m
-2796 5082 l
-2796 5083 l
-2784 5083 l
-2784 5083 m
-2792 5083 l
-2792 5084 l
-2784 5084 l
-2784 5084 m
-2789 5084 l
-2789 5085 l
-2784 5085 l
-Y
-2957.5 5035.7 m
-2924 4919 l
-2752 4968 l
-2785 5085 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2864 4967 m
-2866 4958 l
-2877 4950 l
-2885 4948 l
-2898 4948 l
-2909 4958 l
-2919 4977 l
-2925 4997 l
-2925 5014 l
-2920 5025 l
-2909 5032 l
-2905 5033 l
-2892 5033 l
-2881 5027 l
-2874 5016 l
-2873 5012 l
-2873 4999 l
-2879 4989 l
-2890 4981 l
-2894 4980 l
-2907 4981 l
-2917 4986 l
-2925 4997 l
-S
-2808 4970 m
-2822 4970 l
-2833 4980 l
-2843 4999 l
-2846 5011 l
-2848 5032 l
-2843 5046 l
-2832 5054 l
-2824 5056 l
-2811 5056 l
-2800 5046 l
-2790 5027 l
-2787 5015 l
-2785 4994 l
-2789 4979 l
-2800 4972 l
-2808 4970 l
-S
-1 g
-2198 4859 m
-2203 4859 l
-2203 4860 l
-2198 4860 l
-2198 4860 m
-2205 4860 l
-2205 4861 l
-2198 4861 l
-2197 4861 m
-2208 4861 l
-2208 4862 l
-2197 4862 l
-2197 4862 m
-2210 4862 l
-2210 4863 l
-2197 4863 l
-2196 4863 m
-2213 4863 l
-2213 4864 l
-2196 4864 l
-2196 4864 m
-2215 4864 l
-2215 4865 l
-2196 4865 l
-2196 4865 m
-2218 4865 l
-2218 4866 l
-2196 4866 l
-2195 4866 m
-2220 4866 l
-2220 4867 l
-2195 4867 l
-2195 4867 m
-2223 4867 l
-2223 4868 l
-2195 4868 l
-2194 4868 m
-2225 4868 l
-2225 4869 l
-2194 4869 l
-2194 4869 m
-2228 4869 l
-2228 4870 l
-2194 4870 l
-2194 4870 m
-2230 4870 l
-2230 4871 l
-2194 4871 l
-2193 4871 m
-2233 4871 l
-2233 4872 l
-2193 4872 l
-2193 4872 m
-2235 4872 l
-2235 4873 l
-2193 4873 l
-2192 4873 m
-2238 4873 l
-2238 4874 l
-2192 4874 l
-2192 4874 m
-2240 4874 l
-2240 4875 l
-2192 4875 l
-2192 4875 m
-2243 4875 l
-2243 4876 l
-2192 4876 l
-2191 4876 m
-2245 4876 l
-2245 4877 l
-2191 4877 l
-2191 4877 m
-2248 4877 l
-2248 4878 l
-2191 4878 l
-2190 4878 m
-2250 4878 l
-2250 4879 l
-2190 4879 l
-2190 4879 m
-2253 4879 l
-2253 4880 l
-2190 4880 l
-2190 4880 m
-2255 4880 l
-2255 4881 l
-2190 4881 l
-2189 4881 m
-2258 4881 l
-2258 4882 l
-2189 4882 l
-2189 4882 m
-2260 4882 l
-2260 4883 l
-2189 4883 l
-2188 4883 m
-2263 4883 l
-2263 4884 l
-2188 4884 l
-2188 4884 m
-2265 4884 l
-2265 4885 l
-2188 4885 l
-2188 4885 m
-2268 4885 l
-2268 4886 l
-2188 4886 l
-2187 4886 m
-2270 4886 l
-2270 4887 l
-2187 4887 l
-2187 4887 m
-2273 4887 l
-2273 4888 l
-2187 4888 l
-2186 4888 m
-2275 4888 l
-2275 4889 l
-2186 4889 l
-2186 4889 m
-2278 4889 l
-2278 4890 l
-2186 4890 l
-2186 4890 m
-2280 4890 l
-2280 4891 l
-2186 4891 l
-2185 4891 m
-2283 4891 l
-2283 4892 l
-2185 4892 l
-2185 4892 m
-2285 4892 l
-2285 4893 l
-2185 4893 l
-2184 4893 m
-2288 4893 l
-2288 4894 l
-2184 4894 l
-2184 4894 m
-2290 4894 l
-2290 4895 l
-2184 4895 l
-2184 4895 m
-2293 4895 l
-2293 4896 l
-2184 4896 l
-2183 4896 m
-2295 4896 l
-2295 4897 l
-2183 4897 l
-2183 4897 m
-2298 4897 l
-2298 4898 l
-2183 4898 l
-2182 4898 m
-2300 4898 l
-2300 4899 l
-2182 4899 l
-2182 4899 m
-2303 4899 l
-2303 4900 l
-2182 4900 l
-2182 4900 m
-2305 4900 l
-2305 4901 l
-2182 4901 l
-2181 4901 m
-2308 4901 l
-2308 4902 l
-2181 4902 l
-2181 4902 m
-2310 4902 l
-2310 4903 l
-2181 4903 l
-2180 4903 m
-2313 4903 l
-2313 4904 l
-2180 4904 l
-2180 4904 m
-2315 4904 l
-2315 4905 l
-2180 4905 l
-2180 4905 m
-2318 4905 l
-2318 4906 l
-2180 4906 l
-2179 4906 m
-2320 4906 l
-2320 4907 l
-2179 4907 l
-2179 4907 m
-2323 4907 l
-2323 4908 l
-2179 4908 l
-2178 4908 m
-2325 4908 l
-2325 4909 l
-2178 4909 l
-2178 4909 m
-2328 4909 l
-2328 4910 l
-2178 4910 l
-2178 4910 m
-2330 4910 l
-2330 4911 l
-2178 4911 l
-2177 4911 m
-2333 4911 l
-2333 4912 l
-2177 4912 l
-2177 4912 m
-2335 4912 l
-2335 4913 l
-2177 4913 l
-2176 4913 m
-2338 4913 l
-2338 4914 l
-2176 4914 l
-2176 4914 m
-2340 4914 l
-2340 4915 l
-2176 4915 l
-2176 4915 m
-2343 4915 l
-2343 4916 l
-2176 4916 l
-2175 4916 m
-2345 4916 l
-2345 4917 l
-2175 4917 l
-2175 4917 m
-2348 4917 l
-2348 4918 l
-2175 4918 l
-2174 4918 m
-2350 4918 l
-2350 4919 l
-2174 4919 l
-2174 4919 m
-2353 4919 l
-2353 4920 l
-2174 4920 l
-2174 4920 m
-2355 4920 l
-2355 4921 l
-2174 4921 l
-2173 4921 m
-2358 4921 l
-2358 4922 l
-2173 4922 l
-2173 4922 m
-2360 4922 l
-2360 4923 l
-2173 4923 l
-2172 4923 m
-2363 4923 l
-2363 4924 l
-2172 4924 l
-2172 4924 m
-2365 4924 l
-2365 4925 l
-2172 4925 l
-2172 4925 m
-2368 4925 l
-2368 4926 l
-2172 4926 l
-2171 4926 m
-2370 4926 l
-2370 4927 l
-2171 4927 l
-2171 4927 m
-2370 4927 l
-2370 4928 l
-2171 4928 l
-2170 4928 m
-2370 4928 l
-2370 4930 l
-2170 4930 l
-2170 4930 m
-2369 4930 l
-2369 4931 l
-2170 4931 l
-2169 4931 m
-2369 4931 l
-2369 4932 l
-2169 4932 l
-2169 4932 m
-2368 4932 l
-2368 4933 l
-2169 4933 l
-2168 4933 m
-2368 4933 l
-2368 4935 l
-2168 4935 l
-2168 4935 m
-2367 4935 l
-2367 4936 l
-2168 4936 l
-2167 4936 m
-2367 4936 l
-2367 4937 l
-2167 4937 l
-2167 4937 m
-2366 4937 l
-2366 4938 l
-2167 4938 l
-2166 4938 m
-2366 4938 l
-2366 4940 l
-2166 4940 l
-2166 4940 m
-2365 4940 l
-2365 4941 l
-2166 4941 l
-2165 4941 m
-2365 4941 l
-2365 4942 l
-2165 4942 l
-2165 4942 m
-2364 4942 l
-2364 4943 l
-2165 4943 l
-2164 4943 m
-2364 4943 l
-2364 4945 l
-2164 4945 l
-2164 4945 m
-2363 4945 l
-2363 4946 l
-2164 4946 l
-2163 4946 m
-2363 4946 l
-2363 4947 l
-2163 4947 l
-2163 4947 m
-2362 4947 l
-2362 4948 l
-2163 4948 l
-2162 4948 m
-2362 4948 l
-2362 4950 l
-2162 4950 l
-2162 4950 m
-2361 4950 l
-2361 4951 l
-2162 4951 l
-2161 4951 m
-2361 4951 l
-2361 4952 l
-2161 4952 l
-2161 4952 m
-2360 4952 l
-2360 4953 l
-2161 4953 l
-2160 4953 m
-2360 4953 l
-2360 4955 l
-2160 4955 l
-2160 4955 m
-2359 4955 l
-2359 4956 l
-2160 4956 l
-2159 4956 m
-2359 4956 l
-2359 4957 l
-2159 4957 l
-2159 4957 m
-2358 4957 l
-2358 4958 l
-2159 4958 l
-2158 4958 m
-2358 4958 l
-2358 4959 l
-2158 4959 l
-2158 4959 m
-2357 4959 l
-2357 4961 l
-2158 4961 l
-2157 4961 m
-2357 4961 l
-2357 4962 l
-2157 4962 l
-2157 4962 m
-2356 4962 l
-2356 4963 l
-2157 4963 l
-2156 4963 m
-2356 4963 l
-2356 4964 l
-2156 4964 l
-2156 4964 m
-2355 4964 l
-2355 4966 l
-2156 4966 l
-2155 4966 m
-2355 4966 l
-2355 4967 l
-2155 4967 l
-2155 4967 m
-2354 4967 l
-2354 4968 l
-2155 4968 l
-2154 4968 m
-2354 4968 l
-2354 4969 l
-2154 4969 l
-2154 4969 m
-2353 4969 l
-2353 4971 l
-2154 4971 l
-2154 4971 m
-2353 4971 l
-2353 4972 l
-2154 4972 l
-2156 4972 m
-2352 4972 l
-2352 4973 l
-2156 4973 l
-2158 4973 m
-2352 4973 l
-2352 4974 l
-2158 4974 l
-2161 4974 m
-2351 4974 l
-2351 4975 l
-2161 4975 l
-2163 4975 m
-2351 4975 l
-2351 4976 l
-2163 4976 l
-2166 4976 m
-2351 4976 l
-2351 4977 l
-2166 4977 l
-2168 4977 m
-2350 4977 l
-2350 4978 l
-2168 4978 l
-2171 4978 m
-2350 4978 l
-2350 4979 l
-2171 4979 l
-2173 4979 m
-2349 4979 l
-2349 4980 l
-2173 4980 l
-2176 4980 m
-2349 4980 l
-2349 4981 l
-2176 4981 l
-2178 4981 m
-2349 4981 l
-2349 4982 l
-2178 4982 l
-2181 4982 m
-2348 4982 l
-2348 4983 l
-2181 4983 l
-2183 4983 m
-2348 4983 l
-2348 4984 l
-2183 4984 l
-2186 4984 m
-2347 4984 l
-2347 4985 l
-2186 4985 l
-2188 4985 m
-2347 4985 l
-2347 4986 l
-2188 4986 l
-2190 4986 m
-2346 4986 l
-2346 4987 l
-2190 4987 l
-2193 4987 m
-2346 4987 l
-2346 4988 l
-2193 4988 l
-2195 4988 m
-2346 4988 l
-2346 4989 l
-2195 4989 l
-2198 4989 m
-2345 4989 l
-2345 4990 l
-2198 4990 l
-2200 4990 m
-2345 4990 l
-2345 4991 l
-2200 4991 l
-2203 4991 m
-2344 4991 l
-2344 4992 l
-2203 4992 l
-2205 4992 m
-2344 4992 l
-2344 4993 l
-2205 4993 l
-2208 4993 m
-2344 4993 l
-2344 4994 l
-2208 4994 l
-2210 4994 m
-2343 4994 l
-2343 4995 l
-2210 4995 l
-2213 4995 m
-2343 4995 l
-2343 4996 l
-2213 4996 l
-2215 4996 m
-2342 4996 l
-2342 4997 l
-2215 4997 l
-2218 4997 m
-2342 4997 l
-2342 4998 l
-2218 4998 l
-2220 4998 m
-2342 4998 l
-2342 4999 l
-2220 4999 l
-2222 4999 m
-2341 4999 l
-2341 5000 l
-2222 5000 l
-2225 5000 m
-2341 5000 l
-2341 5001 l
-2225 5001 l
-2227 5001 m
-2340 5001 l
-2340 5002 l
-2227 5002 l
-2230 5002 m
-2340 5002 l
-2340 5003 l
-2230 5003 l
-2232 5003 m
-2340 5003 l
-2340 5004 l
-2232 5004 l
-2235 5004 m
-2339 5004 l
-2339 5005 l
-2235 5005 l
-2237 5005 m
-2339 5005 l
-2339 5006 l
-2237 5006 l
-2240 5006 m
-2338 5006 l
-2338 5007 l
-2240 5007 l
-2242 5007 m
-2338 5007 l
-2338 5008 l
-2242 5008 l
-2245 5008 m
-2338 5008 l
-2338 5009 l
-2245 5009 l
-2247 5009 m
-2337 5009 l
-2337 5010 l
-2247 5010 l
-2250 5010 m
-2337 5010 l
-2337 5011 l
-2250 5011 l
-2252 5011 m
-2336 5011 l
-2336 5012 l
-2252 5012 l
-2255 5012 m
-2336 5012 l
-2336 5013 l
-2255 5013 l
-2257 5013 m
-2335 5013 l
-2335 5014 l
-2257 5014 l
-2259 5014 m
-2335 5014 l
-2335 5015 l
-2259 5015 l
-2262 5015 m
-2335 5015 l
-2335 5016 l
-2262 5016 l
-2264 5016 m
-2334 5016 l
-2334 5017 l
-2264 5017 l
-2267 5017 m
-2334 5017 l
-2334 5018 l
-2267 5018 l
-2269 5018 m
-2333 5018 l
-2333 5019 l
-2269 5019 l
-2272 5019 m
-2333 5019 l
-2333 5020 l
-2272 5020 l
-2274 5020 m
-2333 5020 l
-2333 5021 l
-2274 5021 l
-2277 5021 m
-2332 5021 l
-2332 5022 l
-2277 5022 l
-2279 5022 m
-2332 5022 l
-2332 5023 l
-2279 5023 l
-2282 5023 m
-2331 5023 l
-2331 5024 l
-2282 5024 l
-2284 5024 m
-2331 5024 l
-2331 5025 l
-2284 5025 l
-2287 5025 m
-2331 5025 l
-2331 5026 l
-2287 5026 l
-2289 5026 m
-2330 5026 l
-2330 5027 l
-2289 5027 l
-2291 5027 m
-2330 5027 l
-2330 5028 l
-2291 5028 l
-2294 5028 m
-2329 5028 l
-2329 5029 l
-2294 5029 l
-2296 5029 m
-2329 5029 l
-2329 5030 l
-2296 5030 l
-2299 5030 m
-2329 5030 l
-2329 5031 l
-2299 5031 l
-2301 5031 m
-2328 5031 l
-2328 5032 l
-2301 5032 l
-2304 5032 m
-2328 5032 l
-2328 5033 l
-2304 5033 l
-2306 5033 m
-2327 5033 l
-2327 5034 l
-2306 5034 l
-2309 5034 m
-2327 5034 l
-2327 5035 l
-2309 5035 l
-2311 5035 m
-2327 5035 l
-2327 5036 l
-2311 5036 l
-2314 5036 m
-2326 5036 l
-2326 5037 l
-2314 5037 l
-2316 5037 m
-2326 5037 l
-2326 5038 l
-2316 5038 l
-2319 5038 m
-2325 5038 l
-2325 5039 l
-2319 5039 l
-2321 5039 m
-2325 5039 l
-2325 5040 l
-2321 5040 l
-Y
-2199 4858.8 m
-2154 4971 l
-2324 5040 l
-2370 4927 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2241 4957 m
-2242 4943 l
-2237 4932 l
-2227 4924 l
-2223 4922 l
-2210 4922 l
-2199 4926 l
-2190 4936 l
-2189 4940 l
-2188 4953 l
-2193 4964 l
-2203 4973 l
-2207 4974 l
-2220 4975 l
-2231 4970 l
-2241 4957 l
-2249 4937 l
-2252 4916 l
-2249 4901 l
-2239 4893 l
-2232 4890 l
-2218 4889 l
-2211 4895 l
-S
-2280 5004 m
-2270 4995 l
-2267 4981 l
-2271 4960 l
-2276 4948 l
-2287 4930 l
-2300 4922 l
-2313 4922 l
-2321 4926 l
-2331 4934 l
-2334 4949 l
-2330 4970 l
-2325 4981 l
-2314 4999 l
-2301 5008 l
-2288 5007 l
-2280 5004 l
-S
-1 g
-974 2200 m
-1160 2200 l
-1160 5703 l
-974 5703 l
-Y
-1159.9 2200 m
-974 2200 l
-974 5703 l
-1160 5703 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1000 2225 m
-1105 2225 l
-S
-1000 2225 m
-1000 2290 l
-S
-1050 2225 m
-1050 2265 l
-S
-1105 2225 m
-1105 2290 l
-S
-1050 2375 m
-1040 2365 l
-1035 2355 l
-1035 2340 l
-1040 2330 l
-1050 2320 l
-1065 2315 l
-1075 2315 l
-1090 2320 l
-1100 2330 l
-1105 2340 l
-1105 2355 l
-1100 2365 l
-1090 2375 l
-S
-1000 2411 m
-1105 2411 l
-S
-1000 2446 m
-1005 2451 l
-1000 2456 l
-995 2451 l
-1000 2446 l
-S
-1035 2451 m
-1105 2451 l
-S
-1035 2491 m
-1140 2491 l
-S
-1050 2491 m
-1040 2501 l
-1035 2511 l
-1035 2526 l
-1040 2536 l
-1050 2546 l
-1065 2551 l
-1075 2551 l
-1090 2546 l
-1100 2536 l
-1105 2526 l
-1105 2511 l
-1100 2501 l
-1090 2491 l
-S
-1000 2591 m
-1085 2591 l
-1100 2596 l
-1105 2606 l
-1105 2616 l
-S
-1035 2576 m
-1035 2611 l
-S
-1000 2641 m
-1005 2646 l
-1000 2651 l
-995 2646 l
-1000 2641 l
-S
-1035 2646 m
-1105 2646 l
-S
-1050 2741 m
-1040 2731 l
-1035 2721 l
-1035 2706 l
-1040 2696 l
-1050 2686 l
-1065 2681 l
-1075 2681 l
-1090 2686 l
-1100 2696 l
-1105 2706 l
-1105 2721 l
-1100 2731 l
-1090 2741 l
-S
-1050 2912 m
-1040 2902 l
-1035 2892 l
-1035 2877 l
-1040 2867 l
-1050 2857 l
-1065 2852 l
-1075 2852 l
-1090 2857 l
-1100 2867 l
-1105 2877 l
-1105 2892 l
-1100 2902 l
-1090 2912 l
-S
-1035 2967 m
-1040 2957 l
-1050 2947 l
-1065 2942 l
-1075 2942 l
-1090 2947 l
-1100 2957 l
-1105 2967 l
-1105 2982 l
-1100 2992 l
-1090 3002 l
-1075 3007 l
-1065 3007 l
-1050 3002 l
-1040 2992 l
-1035 2982 l
-1035 2967 l
-S
-1035 3062 m
-1040 3052 l
-1050 3042 l
-1065 3037 l
-1075 3037 l
-1090 3042 l
-1100 3052 l
-1105 3062 l
-1105 3077 l
-1100 3087 l
-1090 3097 l
-1075 3102 l
-1065 3102 l
-1050 3097 l
-1040 3087 l
-1035 3077 l
-1035 3062 l
-S
-1035 3137 m
-1105 3137 l
-S
-1065 3137 m
-1050 3142 l
-1040 3152 l
-1035 3162 l
-1035 3177 l
-S
-1000 3258 m
-1105 3258 l
-S
-1050 3258 m
-1040 3248 l
-1035 3238 l
-1035 3222 l
-1040 3212 l
-1050 3202 l
-1065 3197 l
-1075 3197 l
-1090 3202 l
-1100 3212 l
-1105 3222 l
-1105 3238 l
-1100 3248 l
-1090 3258 l
-S
-1000 3293 m
-1005 3298 l
-1000 3303 l
-995 3298 l
-1000 3293 l
-S
-1035 3298 m
-1105 3298 l
-S
-1035 3338 m
-1105 3338 l
-S
-1055 3338 m
-1040 3353 l
-1035 3363 l
-1035 3378 l
-1040 3388 l
-1055 3393 l
-1105 3393 l
-S
-1035 3488 m
-1105 3488 l
-S
-1050 3488 m
-1040 3478 l
-1035 3468 l
-1035 3453 l
-1040 3443 l
-1050 3433 l
-1065 3428 l
-1075 3428 l
-1090 3433 l
-1100 3443 l
-1105 3453 l
-1105 3468 l
-1100 3478 l
-1090 3488 l
-S
-1000 3533 m
-1085 3533 l
-1100 3538 l
-1105 3548 l
-1105 3558 l
-S
-1035 3518 m
-1035 3553 l
-S
-1065 3583 m
-1065 3643 l
-1055 3643 l
-1045 3638 l
-1040 3633 l
-1035 3623 l
-1035 3608 l
-1040 3598 l
-1050 3588 l
-1065 3583 l
-1075 3583 l
-1090 3588 l
-1100 3598 l
-1105 3608 l
-1105 3623 l
-1100 3633 l
-1090 3643 l
-S
-1050 3729 m
-1040 3724 l
-1035 3709 l
-1035 3694 l
-1040 3679 l
-1050 3674 l
-1060 3679 l
-1065 3689 l
-1070 3714 l
-1075 3724 l
-1085 3729 l
-1090 3729 l
-1100 3724 l
-1105 3709 l
-1105 3694 l
-1100 3679 l
-1090 3674 l
-S
-1035 3769 m
-1040 3764 l
-1045 3769 l
-1040 3774 l
-1035 3769 l
-S
-1100 3774 m
-1105 3769 l
-1100 3764 l
-1095 3769 l
-1100 3774 l
-1110 3774 l
-1120 3769 l
-1125 3764 l
-S
-1035 3894 m
-1105 3894 l
-S
-1055 3894 m
-1040 3909 l
-1035 3919 l
-1035 3934 l
-1040 3944 l
-1055 3949 l
-1105 3949 l
-S
-1055 3949 m
-1040 3964 l
-1035 3974 l
-1035 3989 l
-1040 3999 l
-1055 4004 l
-1105 4004 l
-S
-1065 4039 m
-1065 4100 l
-1055 4100 l
-1045 4095 l
-1040 4090 l
-1035 4080 l
-1035 4065 l
-1040 4054 l
-1050 4044 l
-1065 4039 l
-1075 4039 l
-1090 4044 l
-1100 4054 l
-1105 4065 l
-1105 4080 l
-1100 4090 l
-1090 4100 l
-S
-1035 4190 m
-1105 4190 l
-S
-1050 4190 m
-1040 4180 l
-1035 4170 l
-1035 4155 l
-1040 4145 l
-1050 4135 l
-1065 4130 l
-1075 4130 l
-1090 4135 l
-1100 4145 l
-1105 4155 l
-1105 4170 l
-1100 4180 l
-1090 4190 l
-S
-1035 4230 m
-1105 4230 l
-S
-1055 4230 m
-1040 4245 l
-1035 4255 l
-1035 4270 l
-1040 4280 l
-1055 4285 l
-1105 4285 l
-S
-1065 4400 m
-1065 4460 l
-1055 4460 l
-1045 4455 l
-1040 4450 l
-1035 4440 l
-1035 4425 l
-1040 4415 l
-1050 4405 l
-1065 4400 l
-1075 4400 l
-1090 4405 l
-1100 4415 l
-1105 4425 l
-1105 4440 l
-1100 4450 l
-1090 4460 l
-S
-1035 4551 m
-1140 4551 l
-S
-1050 4551 m
-1040 4541 l
-1035 4531 l
-1035 4516 l
-1040 4506 l
-1050 4496 l
-1065 4491 l
-1075 4491 l
-1090 4496 l
-1100 4506 l
-1105 4516 l
-1105 4531 l
-1100 4541 l
-1090 4551 l
-S
-1035 4591 m
-1085 4591 l
-1100 4596 l
-1105 4606 l
-1105 4621 l
-1100 4631 l
-1085 4646 l
-S
-1035 4646 m
-1105 4646 l
-S
-1000 4681 m
-1005 4686 l
-1000 4691 l
-995 4686 l
-1000 4681 l
-S
-1035 4686 m
-1105 4686 l
-S
-1035 4726 m
-1105 4726 l
-S
-1055 4726 m
-1040 4741 l
-1035 4751 l
-1035 4766 l
-1040 4776 l
-1055 4781 l
-1105 4781 l
-S
-1035 4841 m
-1040 4831 l
-1050 4821 l
-1065 4816 l
-1075 4816 l
-1090 4821 l
-1100 4831 l
-1105 4841 l
-1105 4856 l
-1100 4866 l
-1090 4876 l
-1075 4881 l
-1065 4881 l
-1050 4876 l
-1040 4866 l
-1035 4856 l
-1035 4841 l
-S
-1035 4912 m
-1105 4967 l
-S
-1035 4967 m
-1105 4912 l
-S
-1000 5122 m
-1080 5122 l
-1095 5117 l
-1100 5112 l
-1105 5102 l
-1105 5092 l
-1100 5082 l
-1095 5077 l
-1080 5072 l
-1070 5072 l
-S
-1025 5162 m
-1020 5162 l
-1010 5167 l
-1005 5172 l
-1000 5182 l
-1000 5202 l
-1005 5212 l
-1010 5217 l
-1020 5222 l
-1030 5222 l
-1040 5217 l
-1055 5207 l
-1105 5157 l
-1105 5227 l
-S
-1000 5287 m
-1005 5272 l
-1020 5262 l
-1045 5257 l
-1060 5257 l
-1085 5262 l
-1100 5272 l
-1105 5287 l
-1105 5297 l
-1100 5313 l
-1085 5323 l
-1060 5328 l
-1045 5328 l
-1020 5323 l
-1005 5313 l
-1000 5297 l
-1000 5287 l
-S
-1000 5388 m
-1005 5373 l
-1020 5363 l
-1045 5358 l
-1060 5358 l
-1085 5363 l
-1100 5373 l
-1105 5388 l
-1105 5398 l
-1100 5413 l
-1085 5423 l
-1060 5428 l
-1045 5428 l
-1020 5423 l
-1005 5413 l
-1000 5398 l
-1000 5388 l
-S
-1000 5488 m
-1005 5473 l
-1020 5463 l
-1045 5458 l
-1060 5458 l
-1085 5463 l
-1100 5473 l
-1105 5488 l
-1105 5498 l
-1100 5513 l
-1085 5523 l
-1060 5528 l
-1045 5528 l
-1020 5523 l
-1005 5513 l
-1000 5498 l
-1000 5488 l
-S
-1095 5568 m
-1100 5563 l
-1105 5568 l
-1100 5573 l
-1095 5568 l
-S
-1000 5638 m
-1005 5623 l
-1020 5613 l
-1045 5608 l
-1060 5608 l
-1085 5613 l
-1100 5623 l
-1105 5638 l
-1105 5648 l
-1100 5663 l
-1085 5673 l
-1060 5678 l
-1045 5678 l
-1020 5673 l
-1005 5663 l
-1000 5648 l
-1000 5638 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/mapping.eps b/ast-5.3-1/sun210_figures/mapping.eps
deleted file mode 100644
index 7a88895..0000000
--- a/ast-5.3-1/sun210_figures/mapping.eps
+++ /dev/null
@@ -1,1003 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 118 85 511 258
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/05 15:19:04
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-3923.75 2106.95 m
-3923.75 2181.35 3863.75 2242.55 3788.15 2242.55 c
-2378.15 2242.55 l
-2303.75 2242.55 2242.55 2181.35 2242.55 2106.95 c
-2242.55 1296.95 l
-2242.55 1222.55 2303.75 1161.35 2378.15 1161.35 c
-3788.15 1161.35 l
-3863.75 1161.35 3923.75 1222.55 3923.75 1296.95 c
-f*
-1 g
-3858.95 2163.35 m
-3858.95 2236.55 3798.95 2296.55 3725.75 2296.55 c
-2322.95 2296.55 l
-2248.55 2296.55 2188.55 2236.55 2188.55 2163.35 c
-2188.55 1359.35 l
-2188.55 1286.15 2248.55 1226.15 2321.75 1226.15 c
-3725.75 1226.15 l
-3798.95 1226.15 3858.95 1286.15 3858.95 1359.35 c
-f*
-8 w
-1 J
-1 j
-0 g
-3858.95 2163.35 m
-3858.95 2236.55 3798.95 2296.55 3725.75 2296.55 c
-2322.95 2296.55 l
-2248.55 2296.55 2188.55 2236.55 2188.55 2163.35 c
-2188.55 1359.35 l
-2188.55 1286.15 2248.55 1226.15 2321.75 1226.15 c
-3725.75 1226.15 l
-3798.95 1226.15 3858.95 1286.15 3858.95 1359.35 c
-h
-S
-3863.75 2052.95 318 15.5999 re
-Y
-3861.35 2061.35 m
-4174.55 2061.35 l
-S
-0 0 6120 7920 re
-Y
-3902.15 2061.35 m
-3902.15 2084.15 3884.15 2102.15 3862.55 2102.15 c
-3840.95 2102.15 3822.95 2084.15 3822.95 2061.35 c
-3822.95 2039.75 3840.95 2021.75 3862.55 2021.75 c
-3884.15 2021.75 3902.15 2039.75 3902.15 2061.35 c
-f*
-4133.75 2013.35 m
-4151.75 2061.35 l
-4133.75 2108.15 l
-4286.15 2061.35 l
-f*
-3863.75 1752.95 315.6 15.5999 re
-Y
-3861.35 1761.35 m
-4172.15 1761.35 l
-S
-0 0 6120 7920 re
-Y
-3902.15 1761.35 m
-3902.15 1784.15 3884.15 1802.15 3862.55 1802.15 c
-3840.95 1802.15 3822.95 1784.15 3822.95 1761.35 c
-3822.95 1739.75 3840.95 1721.75 3862.55 1721.75 c
-3884.15 1721.75 3902.15 1739.75 3902.15 1761.35 c
-f*
-4131.35 1713.35 m
-4149.35 1761.35 l
-4131.35 1808.15 l
-4283.75 1761.35 l
-f*
-3863.75 1452.95 318 15.5999 re
-Y
-3861.35 1461.35 m
-4174.55 1461.35 l
-S
-0 0 6120 7920 re
-Y
-3902.15 1461.35 m
-3902.15 1484.15 3884.15 1502.15 3862.55 1502.15 c
-3840.95 1502.15 3822.95 1484.15 3822.95 1461.35 c
-3822.95 1439.75 3840.95 1421.75 3862.55 1421.75 c
-3884.15 1421.75 3902.15 1439.75 3902.15 1461.35 c
-f*
-4133.75 1413.35 m
-4151.75 1461.35 l
-4133.75 1508.15 l
-4286.15 1461.35 l
-f*
-1763.75 2052.95 318 15.5999 re
-Y
-1761.35 2061.35 m
-2074.55 2061.35 l
-S
-0 0 6120 7920 re
-Y
-1802.15 2061.35 m
-1802.15 2084.15 1784.15 2102.15 1762.55 2102.15 c
-1740.95 2102.15 1722.95 2084.15 1722.95 2061.35 c
-1722.95 2039.75 1740.95 2021.75 1762.55 2021.75 c
-1784.15 2021.75 1802.15 2039.75 1802.15 2061.35 c
-f*
-2033.75 2013.35 m
-2051.75 2061.35 l
-2033.75 2108.15 l
-2186.15 2061.35 l
-f*
-1763.75 1452.95 318 15.5999 re
-Y
-1761.35 1461.35 m
-2074.55 1461.35 l
-S
-0 0 6120 7920 re
-Y
-1802.15 1461.35 m
-1802.15 1484.15 1784.15 1502.15 1762.55 1502.15 c
-1740.95 1502.15 1722.95 1484.15 1722.95 1461.35 c
-1722.95 1439.75 1740.95 1421.75 1762.55 1421.75 c
-1784.15 1421.75 1802.15 1439.75 1802.15 1461.35 c
-f*
-2033.75 1413.35 m
-2051.75 1461.35 l
-2033.75 1508.15 l
-2186.15 1461.35 l
-f*
-q[1 0 0 1 0 0]concat
-44 93 true[1 0 0 1 -1379 -1821]@85 imagemask
-+92B at s6q-1s8W,g
-+92B at s6p"Qs8Vus!!iQ(^]4?:s8RTL!!3-"!!!!"s8Duu!!3-!zs8Duu!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!3-!!!!!"s8Duu!!E9$!!!!$s8RTL!"],0^]4B7s8Vus+92B at s6q-1s8W,g+92B at s6p~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -1425 -1821]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-66 94 true[1 0 0 1 -1495 -1791]@85 imagemask
-J,fQKhuE`W!.Y%K
-s53kW!!!Q0s8V!W!!!!"s8VQgz!<<(Lz!!%NKz!!!"KrVuouz5Q1W_z!'gA]
-z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]"979Z!!!!`r"&i*
-z5Q!bGrr<$!!'gC2s8Tk7!!#7^rr>:Q!!!!`s7cR)p](9o5QBXA#Q+Q%!'gM!!!E3#!!#7`J,fWM
-!!!!`rr<$!s*t(L5Q1W_!.Vca!'gA]!!#7A!!#7]!!!!`huEaAqu?]s+7K715PtK]!$Ct9!'gA]!!!Q)!!#7]!!!!0
-qu?^]qu?]s&,ZD-5PtK]!!iK'!'gA]!!!9'!!#7]!!!!(rVup_qu?]s#QFc(5PtK]!!iN(!'gA]!!!-$
-!!#7]!!!!$s*t)6qu?]s"93lO5PtK]!!E7O!'gA]!!!-$J,hh3!!!!$s*t)6qu?]s"96.:5PtK]!!E8:
-!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s"96.:5PtK]!!E8:!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s#QMR>5PtK]!!iP>
-!'gA]!!!9(^]6Us!!!!(s1eV!qu?]s#QMR>5PtK]!"]*[!'gA]!!!Q0J,hh3!!!!0s*t)6qu?]s+9-ik
-5PtK]!$D5k!'gA]!!",@!!#7]!!!!`rr<$`qu?]sJ,]KK5Q1W_!.XtJ!'gJ`!!*&u!!#7`J,fWMqu?^]
-s1eU:s82isJ,eF,#QOQ!!<<#m!"],!!.Y%Hrr at QKn,Rt<r."bHs53lAs85+]s8Tk7#QO]Ds8W+L!!*&s&-)\0!!!!@qud!!rVuou"8i3"s7cQo!!%BHJ,eF,!!!!=!"]*[!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 64 true[1 0 0 1 -1565 -1820]@85 imagemask
-!!!9(J-!Fc!!!!@
-s53qIzJ,f9ErVuou!<<)u!WTq8!!3-"rrN/t!!!-$s8RZMs*t(Ss8W,8s8V!W&-)\0iW&r9!"],!
-#P%il!!!Q0^]F92n,NG1s*t)ts53kW+9)<@+917!!$D4@!"]+F!!#7_!!!9(^]4@!rVup's1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!
-s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$
-^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!
-qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!%NH
-!!!-$^]4 at aqu?^%s1eU7s82is#QMR>!WW&t!"]+F!!iQ%!!%NK^]8laqu at 9-s1eVas82j-s8Tk7~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -1635 -1820]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-88 97 true[1 0 0 1 -1189 -1651]@85 imagemask
-z!$D6Vz
-!!!!$s8W&uz!!#7`s8V!Wz!WW3"s7cQo!!!!(s8W-!rr<$!!!", at s8W-!^]4?7!.Y%KJ-Z,D
-zs8VQg!'g5Y!!!-$s1eU7#Q=]'!!iQ'!!!!"rr<$!&-)D)!!!"K^]4@!s6p!g!!",!!!%NK^]4?7
-!"\Q!!<<(Lz"8Diss8N'!!!!!"qu?ctrVuou!!!"J!!E9!z!!#4`#QOQ!z!$;1Os6p!gz%fd.?
-n,NFg!!!!'!$D7!zz5QAM!z!!!!`s1eU7z!!%NKJ,fQLz!.Y$!zz
-s8N'!z!!!$!rr<$!z!!*'!zz!WW-!z!!!!"s8Duuz!!!'"rVuouz
-!!E9!zz"989!z!!!!$s82isz!!!9(qu?]sz!!iQ!zz#QOQ!z!!!!(s7cQo
-z!!!9(p](9oz!!iQ!zz&-)D)z!!!!0s6p!gz!!!Q0n,NFgz!"],!
-zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0
-s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!z
-z#QO8nz!!!!(s6p!gz!!!9(p](9oz!!iQ!zz#QOQ!z!!!!$s7cQo
-z!!!-$p](9oz!!E9!zz"989!z!!!!"s82isz!$21 at qu?]sz*Wc<?
-z!!!!?!<<#uz!!#1_s8Duuz!'UC4rr<$!z4og*4z!!!"J!'gL6z!!%HJ5Q?66z
-!.4bgs*t(Lzqu at i=^]4?7!!!#s!"]+fz!!2ut#QN]^z"8i-$s6p!g!!!!$qu?j!p](9o
-!!!9%!!3,pz!"\u-!<;rsz+8c*=J,TEJ!!!!`qu?^]rr<$!!!%NH!!", at J,fQL!<;rs!"]+F
-!!!!"s82is#QO8n!!!-$qu?]ts7cQo!!iQ%!!!$!rVuou+926=!!#7`J,fS!s82is!$D71!!E9$qu?]s
-#QOf(+92B=!!!!"s8W-!s5X"W!!!"Ks8W,u!;lfs!!!Q0s8V!WHiO-H!!3-"rVup\z!"]+F!!#+~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -1283 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -1352 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -1422 -1653]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-69 97 true[1 0 0 1 -1469 -1652]@85 imagemask
-!!!'"n,_GI!!!!0
-s8E&sz5QCb7rr<$!!<<*!_>iEn!!3-"s5F"U!!!9(s8VWhs*t([s8W,ps8VQg+926=rVuom!$D7!
-!'gM`p]*PY^]4oFqu?_Hs*t(Ss6p!gJ,]KK"97ij!<<#u!!E8Z!!3,t!!!'"huEfXp](9ps53kXs6p!g
-!WV'X"97ij!!3,X!!E8Z!!!'"huElZhuE`Xs53k^s53kW!WV'X#QMR>!!3,X!!iP>!!!'"huF#^^]4?8s53kfs*t(L
-!WV'X&-%.[!!3,X!"]*[!!!'"huF;fJ,fQMs53kfs*t(L!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"
-s53kfrr<$!!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"s53kfrr<$!!WV'X#QFc(!!3,X!!iN(!!!'"
-huF#^!!!!"s53k^rr<$!!WV'X#QFc(!!3,X!!E6$!!!'"huElZJ,fQMs53kZs*t(L!WV'X!WRZM!!3,X!!3+M!!!'"
-huEfXJ,fQMs53kWs1eU7!WV'X!<9h7!!3,X!!%Ma!!!'"huEb,huE`Xs53kW5MuMA"979Z!$C\1!!E8Z
-!!",1!!!-$huE`fp](:!s53kW#Q+Q%&-(Pf!!E-!!"]+f!!!'!!!", at huE`Ws*t)6s53kW!.Vcas8V!W
-!!#7Q"9&8X!!!!0s8VWhhuE`W#QOh_s53kW!!3-"JcFX.!!!!`rW3&Wz!!!'"huE`W!!!!"s53kWz!WV'X
-z!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kW
-z!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W
-!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!$s53kWz#QN]^z"98DZz!!E9$huE`W
-!!!-$s53kWz5QBXAz!!E8Zz!!!"KhuE`Wz&)[Efz!!2!Xz!!!!A!!~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -1538 -1653]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -1578 -1653]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -1647 -1652]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -1710 -1652]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -1748 -1652]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -1811 -1652]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-96 97 true[1 0 0 1 -4574 -1819]@85 imagemask
-z!"]*[z
-z"98E#zz+92B@^]4?7zs8W-!p](9o!!!!$s8W-!rVuou!!!!0s82lss*t(L!!!!`
-s1eUVs53kW!!!"KrVup#s6p!g!!!'"p](9os82is!!!-$n,NFgJ,TEJ!!!9(^]4?7+9)<@!!!Q0J,fQL
-&-%.[!!", at z#QMR>!!#7_z"979Z!!%NHz!WVWh!!*&oz!WVop!!3,pz!<;rs!!E8jz
-!.XtJ!!E8jz!.XtJ!!iP^z!'gJ`!"]+Fz!'gL6!"]+Fz!$D5k!$D6Vz!$D6V
-!$D5kz!"]+F!'gL6z!"]+f!'gJ`z!!iP^!.Y"Kz!!iPn!.Y"Kz!!iPn!<<#u
-z!!E8r!<<#uz!!E8r!<<#uz!!E8r!WW-!z!!E9!!WW-!z!!3,t!WW&tz!!3,t!WW&t
-z!!3,t"989!z!!3-!"989!z!!3-!"989!z!!3-!"989!z!!3-!"98,rz
-!!*&u"98,rz!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!
-#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!
-#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!
-z!!*&u"989!z!!*&u"989!z!!3-!"989!z!!3-!"989!z!!3-!"989!z
-!!3-!!WW&tz!!3,t!WW&tz!!3,t!WW-!z!!E9!!WW-!z!!E9!!<<#uz!!E8r!<<#uz
-!!E8r!<<'!z!!iQ!!.Y"Kz!!iPn!.Y"Kz!!iPn!'gL6z!!iP^!'gL6z!"]+f
-!$D5kz!"]+F!$D6Vz!$D6V!"]+Fz!$D5k!"]+fz!'gL6!!iP^z!'gJ`!!E8j
-z!.XtJ!!3,hz!.XtJ!!3,pz!<;rs!!*&sz!WVop!!%NHz"97ij!!#7_z"979Z!!", at z#QMR>!!!Q0^]4?7+9-ik!!!9(huE`W
-5Q:]`!!!-$n,NFgJ,TEJ!!!$!qu?]ts7cQo!!!"Krr<$(s6p!g!!!!@s1eUVs1eU7!!!!0s82otrr<$!
-!!!!$s8W-!qu?]szJ,fQKn,NFgz+92B@^]4?7z!WW2tzz!"]*[z~>
-Q
-q[1 0 0 1 0 0]concat
-67 64 true[1 0 0 1 -4675 -1820]@85 imagemask
-!!!9(J-!Fc!!!!@
-s53qIzJ,f9ErVuou!<<)u!WTq8!!3-"rrN/t!!!-$s8RZMs*t(Ss8W,8s8V!W&-)\0iW&r9!"],!
-#P%il!!!Q0^]F92n,NG1s*t)ts53kW+9)<@+917!!$D4@!"]+F!!#7_!!!9(^]4@!rVup's1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!
-s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$
-^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!
-qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!%NH
-!!!-$^]4 at aqu?^%s1eU7s82is#QMR>!WW&t!"]+F!!iQ%!!%NK^]8laqu at 9-s1eVas82j-s8Tk7~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -4745 -1820]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-66 94 true[1 0 0 1 -4784 -1791]@85 imagemask
-J,fQKhuE`W!.Y%K
-s53kW!!!Q0s8V!W!!!!"s8VQgz!<<(Lz!!%NKz!!!"KrVuouz5Q1W_z!'gA]
-z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]"979Z!!!!`r"&i*
-z5Q!bGrr<$!!'gC2s8Tk7!!#7^rr>:Q!!!!`s7cR)p](9o5QBXA#Q+Q%!'gM!!!E3#!!#7`J,fWM
-!!!!`rr<$!s*t(L5Q1W_!.Vca!'gA]!!#7A!!#7]!!!!`huEaAqu?]s+7K715PtK]!$Ct9!'gA]!!!Q)!!#7]!!!!0
-qu?^]qu?]s&,ZD-5PtK]!!iK'!'gA]!!!9'!!#7]!!!!(rVup_qu?]s#QFc(5PtK]!!iN(!'gA]!!!-$
-!!#7]!!!!$s*t)6qu?]s"93lO5PtK]!!E7O!'gA]!!!-$J,hh3!!!!$s*t)6qu?]s"96.:5PtK]!!E8:
-!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s"96.:5PtK]!!E8:!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s#QMR>5PtK]!!iP>
-!'gA]!!!9(^]6Us!!!!(s1eV!qu?]s#QMR>5PtK]!"]*[!'gA]!!!Q0J,hh3!!!!0s*t)6qu?]s+9-ik
-5PtK]!$D5k!'gA]!!",@!!#7]!!!!`rr<$`qu?]sJ,]KK5Q1W_!.XtJ!'gJ`!!*&u!!#7`J,fWMqu?^]
-s1eU:s82isJ,eF,#QOQ!!<<#m!"],!!.Y%Hrr at QKn,Rt<r."bHs53lAs85+]s8Tk7#QO]Ds8W+L!!*&s&-)\0!!!!@qud!!rVuou"8i3"s7cQo!!%BHJ,eF,!!!!=!"]*[!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 64 true[1 0 0 1 -4854 -1820]@85 imagemask
-!!!9(J-!Fc!!!!@
-s53qIzJ,f9ErVuou!<<)u!WTq8!!3-"rrN/t!!!-$s8RZMs*t(Ss8W,8s8V!W&-)\0iW&r9!"],!
-#P%il!!!Q0^]F92n,NG1s*t)ts53kW+9)<@+917!!$D4@!"]+F!!#7_!!!9(^]4@!rVup's1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!
-s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$
-^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!
-qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!%NH
-!!!-$^]4 at aqu?^%s1eU7s82is#QMR>!WW&t!"]+F!!iQ%!!%NK^]8laqu at 9-s1eVas82j-s8Tk7~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -4923 -1820]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-88 97 true[1 0 0 1 -4430 -1651]@85 imagemask
-z!$D6Vz
-!!!!$s8W&uz!!#7`s8V!Wz!WW3"s7cQo!!!!(s8W-!rr<$!!!", at s8W-!^]4?7!.Y%KJ-Z,D
-zs8VQg!'g5Y!!!-$s1eU7#Q=]'!!iQ'!!!!"rr<$!&-)D)!!!"K^]4@!s6p!g!!",!!!%NK^]4?7
-!"\Q!!<<(Lz"8Diss8N'!!!!!"qu?ctrVuou!!!"J!!E9!z!!#4`#QOQ!z!$;1Os6p!gz%fd.?
-n,NFg!!!!'!$D7!zz5QAM!z!!!!`s1eU7z!!%NKJ,fQLz!.Y$!zz
-s8N'!z!!!$!rr<$!z!!*'!zz!WW-!z!!!!"s8Duuz!!!'"rVuouz
-!!E9!zz"989!z!!!!$s82isz!!!9(qu?]sz!!iQ!zz#QOQ!z!!!!(s7cQo
-z!!!9(p](9oz!!iQ!zz&-)D)z!!!!0s6p!gz!!!Q0n,NFgz!"],!
-zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0
-s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!z
-z#QO8nz!!!!(s6p!gz!!!9(p](9oz!!iQ!zz#QOQ!z!!!!$s7cQo
-z!!!-$p](9oz!!E9!zz"989!z!!!!"s82isz!$21 at qu?]sz*Wc<?
-z!!!!?!<<#uz!!#1_s8Duuz!'UC4rr<$!z4og*4z!!!"J!'gL6z!!%HJ5Q?66z
-!.4bgs*t(Lzqu at i=^]4?7!!!#s!"]+fz!!2ut#QN]^z"8i-$s6p!g!!!!$qu?j!p](9o
-!!!9%!!3,pz!"\u-!<;rsz+8c*=J,TEJ!!!!`qu?^]rr<$!!!%NH!!", at J,fQL!<;rs!"]+F
-!!!!"s82is#QO8n!!!-$qu?]ts7cQo!!iQ%!!!$!rVuou+926=!!#7`J,fS!s82is!$D71!!E9$qu?]s
-#QOf(+92B=!!!!"s8W-!s5X"W!!!"Ks8W,u!;lfs!!!Q0s8V!WHiO-H!!3-"rVup\z!"]+F!!#+~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -4524 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -4593 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -4664 -1653]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-69 97 true[1 0 0 1 -4710 -1652]@85 imagemask
-!!!'"n,_GI!!!!0
-s8E&sz5QCb7rr<$!!<<*!_>iEn!!3-"s5F"U!!!9(s8VWhs*t([s8W,ps8VQg+926=rVuom!$D7!
-!'gM`p]*PY^]4oFqu?_Hs*t(Ss6p!gJ,]KK"97ij!<<#u!!E8Z!!3,t!!!'"huEfXp](9ps53kXs6p!g
-!WV'X"97ij!!3,X!!E8Z!!!'"huElZhuE`Xs53k^s53kW!WV'X#QMR>!!3,X!!iP>!!!'"huF#^^]4?8s53kfs*t(L
-!WV'X&-%.[!!3,X!"]*[!!!'"huF;fJ,fQMs53kfs*t(L!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"
-s53kfrr<$!!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"s53kfrr<$!!WV'X#QFc(!!3,X!!iN(!!!'"
-huF#^!!!!"s53k^rr<$!!WV'X#QFc(!!3,X!!E6$!!!'"huElZJ,fQMs53kZs*t(L!WV'X!WRZM!!3,X!!3+M!!!'"
-huEfXJ,fQMs53kWs1eU7!WV'X!<9h7!!3,X!!%Ma!!!'"huEb,huE`Xs53kW5MuMA"979Z!$C\1!!E8Z
-!!",1!!!-$huE`fp](:!s53kW#Q+Q%&-(Pf!!E-!!"]+f!!!'!!!", at huE`Ws*t)6s53kW!.Vcas8V!W
-!!#7Q"9&8X!!!!0s8VWhhuE`W#QOh_s53kW!!3-"JcFX.!!!!`rW3&Wz!!!'"huE`W!!!!"s53kWz!WV'X
-z!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kW
-z!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W
-!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!$s53kWz#QN]^z"98DZz!!E9$huE`W
-!!!-$s53kWz5QBXAz!!E8Zz!!!"KhuE`Wz&)[Efz!!2!Xz!!!!A!!~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -4779 -1653]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -4819 -1653]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -4889 -1652]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -4951 -1652]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -4989 -1652]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -5052 -1652]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-0.201248 i
-2711.08 1704.82 m
-2702.03 1705.43 2700.01 1707.44 2692.97 1722.33 c
-2642.86 1836.42 l
-2638.83 1836.42 l
-2596.97 1737.83 l
-2584.09 1708.45 2581.68 1705.43 2572.02 1704.82 c
-2572.02 1701 l
-2611.87 1701 l
-2611.87 1704.8 l
-2602.21 1704.8 2598.18 1707.42 2598.18 1713.07 c
-2598.18 1715.49 2598.79 1718.31 2599.79 1720.92 c
-2609.05 1745 l
-2661.78 1745 l
-2670.03 1725.15 l
-2672.44 1719.51 2673.85 1714.48 2673.85 1711.46 c
-2673.85 1709.65 2672.64 1707.44 2671.03 1706.63 c
-2668.62 1705.23 2667.01 1704.8 2659.76 1704.8 c
-2659.76 1701 l
-2711.08 1701 l
-h
-2612.47 1753 m
-2635.61 1808.06 l
-2658.96 1753 l
-h
-2714.3 1701 m
-f*
-2763.31 1701 m
-f*
-2898 1816.32 m
-2898 1725.15 l
-2898 1708.45 2895.67 1705.83 2880.33 1704.82 c
-2880.33 1701 l
-2936.68 1701 l
-2936.68 1704.82 l
-2921.99 1705.83 2919 1708.65 2919 1722.94 c
-2919 1812.29 l
-2919 1826.58 2921.64 1829.2 2936.68 1830.4 c
-2936.68 1834 l
-2896.63 1834 l
-2852.15 1732.6 l
-2805.67 1834 l
-2765.82 1834 l
-2765.82 1830 l
-2782.32 1829.02 2785 1826.65 2785 1812.29 c
-2785 1730.58 l
-2785 1709.85 2782.17 1706.03 2765.42 1704.82 c
-2765.42 1701 l
-2812.71 1701 l
-2812.71 1705 l
-2797.21 1705.8 2794 1710.4 2794 1730.58 c
-2794 1811.69 l
-2844.31 1701 l
-2847.12 1701 l
-h
-2941.91 1701 m
-f*
-3029.95 1714.28 m
-3026.53 1711.47 3024.12 1709.99 3021.1 1709.99 c
-3016.47 1709.99 3015 1712.92 3015 1722.13 c
-3015 1761.37 l
-3015 1771.64 3014.01 1777.27 3011.24 1781.9 c
-3007.01 1789.55 2998.36 1794.01 2986.08 1794.01 c
-2975.82 1794.01 2966.16 1791.03 2960.52 1786.13 c
-2955.49 1781.9 2952 1776.07 2952 1771.03 c
-2952 1766.41 2955.94 1762.38 2960.92 1762.38 c
-2965.75 1762.38 2969.98 1766.41 2969.98 1770.83 c
-2969.98 1771.64 2969.78 1772.64 2969.58 1774.05 c
-2969.18 1775.86 2969 1777.47 2969 1778.88 c
-2969 1784.32 2975.43 1789.01 2983.46 1789.01 c
-2993.33 1789.01 2999 1783.08 2999 1772.04 c
-2999 1759.76 l
-2967.83 1747.29 2964.39 1745.68 2955.69 1738.03 c
-2951.26 1734 2948.45 1727.16 2948.45 1720.52 c
-2948.45 1707.84 2957.1 1698.99 2969.58 1698.99 c
-2978.43 1698.99 2986.68 1703.21 2998.96 1713.68 c
-2999.97 1703.01 3003.59 1698.99 3011.84 1698.99 c
-3018.68 1698.99 3022.91 1701.4 3029.95 1709.05 c
-h
-2999 1725.75 m
-2999 1719.51 2997.95 1717.7 2993.53 1715.09 c
-2988.7 1712.27 2983.06 1710.99 2978.84 1710.99 c
-2971.79 1710.99 2966.18 1717.69 2966.18 1726.16 c
-2966.18 1726.96 l
-2966.18 1738.83 2974.49 1746.08 2999 1754.93 c
-h
-3030.35 1701 m
-f*
-3031.81 1780.09 m
-3033.62 1780.29 3035.03 1780.29 3036.84 1780.29 c
-3043.69 1780.29 3045 1778.28 3045 1768.82 c
-3045 1674.64 l
-3045 1664.17 3042.8 1661.96 3031.01 1660.75 c
-3031.01 1658 l
-3079.71 1658 l
-3079.71 1662 l
-3064.61 1662.19 3062 1664.25 3062 1676.05 c
-3062 1707.64 l
-3069.24 1701 3073.87 1698.99 3082.32 1698.99 c
-3106.27 1698.99 3124 1721.53 3124 1750.71 c
-3124 1775.66 3110.16 1794.01 3090.98 1794.01 c
-3079.71 1794.01 3070.85 1789.05 3062 1777.68 c
-3062 1793.17 l
-3060.79 1793.57 l
-3050.12 1789.35 3042.88 1786.73 3031.81 1783.31 c
-h
-3062 1768.22 m
-3062 1774.25 3073.27 1782.01 3082.53 1782.01 c
-3097.42 1782.01 3107 1766.52 3107 1742.66 c
-3107 1720.52 3097.25 1704.99 3082.93 1704.99 c
-3073.47 1704.99 3062 1712.47 3062 1718.71 c
-h
-3130.62 1701 m
-f*
-3130.81 1780.09 m
-3132.62 1780.29 3134.03 1780.29 3135.84 1780.29 c
-3142.69 1780.29 3144 1778.28 3144 1768.82 c
-3144 1674.64 l
-3144 1664.17 3141.8 1661.96 3130.01 1660.75 c
-3130.01 1658 l
-3178.71 1658 l
-3178.71 1662 l
-3163.61 1662.19 3161 1664.25 3161 1676.05 c
-3161 1707.64 l
-3168.24 1701 3172.87 1698.99 3181.32 1698.99 c
-3205.27 1698.99 3223 1721.53 3223 1750.71 c
-3223 1775.66 3209.16 1794.01 3189.98 1794.01 c
-3178.71 1794.01 3169.85 1789.05 3161 1777.68 c
-3161 1793.17 l
-3159.79 1793.57 l
-3149.12 1789.35 3141.88 1786.73 3130.81 1783.31 c
-h
-3161 1768.22 m
-3161 1774.25 3172.27 1782.01 3181.53 1782.01 c
-3196.42 1782.01 3206 1766.52 3206 1742.66 c
-3206 1720.52 3196.25 1704.99 3181.93 1704.99 c
-3172.47 1704.99 3161 1712.47 3161 1718.71 c
-h
-3229.62 1701 m
-f*
-3265.22 1793.57 m
-3234.02 1782.51 l
-3234.02 1779.49 l
-3235.64 1779.69 l
-3238.05 1780.09 3240.67 1779.8 3242.48 1779.8 c
-3247.31 1779.8 3249 1776.71 3249 1768.22 c
-3249 1721.53 l
-3249 1707.04 3247 1704.82 3233.22 1704.02 c
-3233.22 1701 l
-3280.92 1701 l
-3280.92 1704.02 l
-3267.63 1705.02 3266 1707.04 3266 1721.53 c
-3266 1792.97 l
-h
-3255.96 1839 m
-3250.33 1839 3245 1834.12 3245 1828.19 c
-3245 1822.35 3249.73 1818 3255.76 1818 c
-3261.8 1818 3266 1822.4 3266 1828.19 c
-3266 1833.82 3261.47 1839 3255.96 1839 c
-h
-3285.95 1701 m
-f*
-3288.22 1781.1 m
-3289.63 1781.7 3291.44 1781.9 3293.65 1781.9 c
-3299.29 1781.9 3301 1778.88 3301 1769.02 c
-3301 1719.11 l
-3301 1707.64 3298.8 1704.82 3288.62 1704.02 c
-3288.62 1701 l
-3331.29 1701 l
-3331.29 1704.02 l
-3321.02 1704.82 3318 1707.24 3318 1714.48 c
-3318 1771.03 l
-3327.46 1780.09 3332.09 1783.01 3338.73 1783.01 c
-3348.59 1783.01 3353 1776.61 3353 1762.98 c
-3353 1720.92 l
-3353 1708.24 3350.47 1704.82 3340.75 1704.02 c
-3340.75 1701 l
-3382.61 1701 l
-3382.61 1704.02 l
-3372.74 1705.02 3370 1707.44 3370 1717.3 c
-3370 1763.39 l
-3370 1782.3 3361.27 1794.01 3346.58 1794.01 c
-3337.32 1794.01 3331.08 1790.5 3317.4 1777.27 c
-3317.4 1793.17 l
-3315.99 1793.57 l
-3306.13 1789.95 3299.29 1787.74 3288.22 1784.52 c
-h
-3385.62 1701 m
-f*
-3479.59 1779 m
-3479.59 1787 l
-3464.09 1787 l
-3460.07 1787 3457.05 1787.58 3453.02 1788.95 c
-3448.59 1790.56 l
-3443.16 1792.57 3437.73 1794.01 3432.5 1794.01 c
-3413.78 1794.01 3399.25 1779.33 3399.25 1760.77 c
-3399.25 1748.09 3404.38 1740.44 3417.6 1733.8 c
-3414.79 1730.99 3411.97 1728.37 3408.95 1725.75 c
-3402.31 1719.92 3400.06 1715.89 3400.06 1711.87 c
-3400.06 1707.44 3402.19 1705.23 3410.36 1701.2 c
-3395.87 1690.74 3391 1684.1 3391 1676.65 c
-3391 1665.98 3406.33 1657 3425.45 1657 c
-3439.94 1657 3455.24 1661.88 3465.7 1670.01 c
-3473.95 1676.45 3478 1683.09 3478 1691.14 c
-3478 1703.62 3468.45 1712.07 3453.43 1712.67 c
-3427.46 1713.88 l
-3416.6 1714.28 3411.77 1716.09 3411.77 1719.31 c
-3411.77 1723.34 3418.41 1730.38 3423.84 1731.99 c
-3427.67 1731.59 l
-3431.29 1731.19 3434.1 1731 3435.31 1731 c
-3442.36 1731 3450.2 1733.81 3456.24 1738.84 c
-3463.49 1744.47 3466 1751.72 3466 1762.18 c
-3466 1767.99 3465.18 1772.59 3462.88 1779 c
-h
-3414.58 1700.6 m
-3421.43 1699.19 3437.32 1697.98 3447.19 1697.98 c
-3465.5 1697.98 3472 1695.57 3472 1688.12 c
-3472 1676.45 3456.76 1668 3433.9 1668 c
-3416.19 1668 3405 1674.07 3405 1683.29 c
-3405 1687.92 3406.76 1690.94 3414.58 1700.6 c
-h
-3415.59 1769.02 m
-3415.59 1780.9 3421.23 1788.01 3430.48 1788.01 c
-3436.72 1788.01 3441.95 1784.57 3445.17 1778.48 c
-3449 1771.44 3451 1762.38 3451 1754.13 c
-3451 1743.06 3445.25 1736 3436.32 1736 c
-3423.84 1736 3415.59 1749.09 3415.59 1768.42 c
-h
-3485.62 1701 m
-f*
-q[1 0 0 1 0 0]concat
-76 93 true[1 0 0 1 -2731 -2481]@85 imagemask
-5QCc`s*t(L!!#7`
-s8W+Lz5QCc`s*t(L!!!$!s8VQgz!$D7 at z!!!!0s8Duuz!"],-z!!!!(s7cQo
-z!!iQ!z!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz
-!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$
-s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!g
-z!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jzhuE`Zs6p!g!!(pW
-!!E8j!!!!"huE`Zs6p!g!!2!X!!E8j!!!!"huE`Zs6p!g!!2!X!!E8j!!!!"huE`Zs6p!g!!D-Z!!E8j!!!!$huE`Z
-s6p!g!!hE^!!E8j!!!!(huE`Zs6p!g!"[uf!!E8j!!!!`huE`Zs6p!g!WV'X!!E9$s8W-!huE`Zs8W-!
-s8V!W!!E9$s8W-!huE`Zs8W-!s8V!W!!E9$s8W-!huE`Zs6p!g!WV'X!!E8j!!!!`huE`Zs6p!g!$C,!
-!!E8j!!!!0huE`Zs6p!g!!hE^!!E8j!!!!$huE`Zs6p!g!!D-Z!!E8j!!!!$huE`Zs6p!g!!2!X!!E8j!!!!"huE`Z
-s6p!g!!2!X!!E8j!!!!"huE`Zs6p!g!!(pW!!E8jzhuE`Zs6p!gz!!E8jz!!!!$s6p!g
-z!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!g!!!"<
-!!E8jz!,qo?s6p!g!!!#g!!E8jz!:Tsjs6p!g!!!#g!!E8jz!:Tsjs6p!g!!!&h!!E8j
-z!Up'ks6p!g!!!,j!!E8jz"7Q9ms6p!g!!!8n!!iPnz&+BQ(s6p!g!!",1!"],)z
-J+*F[s82is!!iPn!'gM`s8W-!s6p-js8W-!s8W,g5QCc`s8W-!s6r8Qs8W-!s8W,g5QCc`s8W-!s6p~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -2809 -2480]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -2879 -2481]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-97 65 true[1 0 0 1 -2927 -2479]@85 imagemask
-z^]4?7(]XO9
-z!Pe[8!#tt=z!!2!X!!#+]z!!!,Z!!!!_z!!!!$n,NFgIK0?Jz"7Q9j!.OtK
-z!!i9!!!%KKz!!!9!!!!$!z!!!!0qu?]ss*t(Lz&,ZD-!WRZMz!"]&/!!3,8
-z!!",?!!!'"^]4?7!!!!@rr<$$s1eU7z5Q:]`"979Zz!'gL6!!E8Zz!!#7`J,fiSn,NFg!!!"K
-s1eU>s6p!gzJ,d:a&-),!z!<;f/!"],)z!!*&nhuF;ep](9o!!!$!j59nZr;6Np!!!!"
-s5WSK+8l$:z!WV-J!'gC/z!!E8;p]*PRIK0?J!!!-$_"[mopc\ZX!!!!$s+("IJ+,Z&z
-#QK>P!.XK&z!!iOSIK4le*rl9@!!!Q0!.FqJi#dIL!!!!0rr>7`s54E<z&,lPn!WV'g^]4?7!$D1?++aI-
-&&8/F!!",?!$?dl^^%XT!!!!`qu at 7[s*t at 4z5PtKl_uG5hhuE`W!'gA]#KQjp"7Q9j!!%ND!!h]e
-!!2Qh!!!"Kp](EZrr<)hzJ+*F?s8N'"p](9o!<;Ng"98?#!;HNo!!*&g!!3-!!!)co!!!'"huEfX
-qu?_E!!!!"s53kWs82isHiO-H!WV'X!<;rs!.FnJ!!E8:!!%ND!!#1_!!!-$^]4 at ap](:X!!!!(s*t(LJ+s!D*rl9@
-#QK;S!<;Ng!$;1@!!iOS!!*&g!!"*k!!!Q0!!!$!huE`fJ,fQ[rr<$"s53kW%tFW[+9)<@!WV'X!!g:>
-!$D1?!!3,8!!!8>!!",?!!!-$^]4?>huEaAqu?^!s1eU7#N,R^5PtK]#QK;S!!D-Z!.XnH!!iOS!!!,j
-!!%NH!!!9(J,fQOn,NIgqu?^-s*t(L"8Dirs82is+9-ik!!Dur!WW&t!$D6V!!!-!!!E9#!!%NKhuE`frW!3's1e[8s8Duu5Q:^*s8VQns8W+L!<<(L+92B1#QOi(J,oWLJ,~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -3026 -2480]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -3089 -2481]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-69 97 true[1 0 0 1 -3135 -2480]@85 imagemask
-!!!'"n,_GI!!!!0
-s8E&sz5QCb7rr<$!!<<*!_>iEn!!3-"s5F"U!!!9(s8VWhs*t([s8W,ps8VQg+926=rVuom!$D7!
-!'gM`p]*PY^]4oFqu?_Hs*t(Ss6p!gJ,]KK"97ij!<<#u!!E8Z!!3,t!!!'"huEfXp](9ps53kXs6p!g
-!WV'X"97ij!!3,X!!E8Z!!!'"huElZhuE`Xs53k^s53kW!WV'X#QMR>!!3,X!!iP>!!!'"huF#^^]4?8s53kfs*t(L
-!WV'X&-%.[!!3,X!"]*[!!!'"huF;fJ,fQMs53kfs*t(L!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"
-s53kfrr<$!!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"s53kfrr<$!!WV'X#QFc(!!3,X!!iN(!!!'"
-huF#^!!!!"s53k^rr<$!!WV'X#QFc(!!3,X!!E6$!!!'"huElZJ,fQMs53kZs*t(L!WV'X!WRZM!!3,X!!3+M!!!'"
-huEfXJ,fQMs53kWs1eU7!WV'X!<9h7!!3,X!!%Ma!!!'"huEb,huE`Xs53kW5MuMA"979Z!$C\1!!E8Z
-!!",1!!!-$huE`fp](:!s53kW#Q+Q%&-(Pf!!E-!!"]+f!!!'!!!", at huE`Ws*t)6s53kW!.Vcas8V!W
-!!#7Q"9&8X!!!!0s8VWhhuE`W#QOh_s53kW!!3-"JcFX.!!!!`rW3&Wz!!!'"huE`W!!!!"s53kWz!WV'X
-z!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kW
-z!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W
-!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!$s53kWz#QN]^z"98DZz!!E9$huE`W
-!!!-$s53kWz5QBXAz!!E8Zz!!!"KhuE`Wz&)[Efz!!2!Xz!!!!A!!~>
-Q
-q[1 0 0 1 0 0]concat
-44 93 true[1 0 0 1 -2821 -861]@85 imagemask
-+92B at s6q-1s8W,g
-+92B at s6p"Qs8Vus!!iQ(^]4?:s8RTL!!3-"!!!!"s8Duu!!3-!zs8Duu!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!3-!!!!!"s8Duu!!E9$!!!!$s8RTL!"],0^]4B7s8Vus+92B at s6q-1s8W,g+92B at s6p~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -2868 -861]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-67 65 true[1 0 0 1 -2937 -859]@85 imagemask
-z(]XO9z
-!&srYz!!#+]z!!!"HzzIK0?Jz!.FnJz!!*$!z!!!$!z!!!!"
-rr<$!z!WRZMz!!3+Mz!!!-$^]4?7!!!!$s1eU7z#QMR>z!!iP^z!!!Q0
-huE`W!!!!0s6p!gz&-),!z!$D71z!!",?p](9o!!!!`r:g6lz5Q#m/z!'g7+z!!%ND
-HiO-H!!!"Kpc\ZXzs6r2Pz!<;OQz!!3,X*rl9@!!!'"i#_q!!!!!"s54E<z"96.I
-J,fQL!!E8:&&8/F!!!9(J-Wji!!!!(s*t?iz#QK;VhuE`W!"])0"5j.Z!!!Q0!!D]j!!!!@rVuug
-z+8u6 at n,NFg!'gG_!VcWp!!#7]!!)co!!!!`qu?`pzJ+s!DHiO-H!.XbD!.4bH!!*&o!!%HJ!!!$!n,NGPzs6p!g4obQ_!WV'X!'^G`!!3,X!!")@!!!-$huEa!J,fQOs1eU7%tFW[
-#QMR>!"XS[!!iOS!!!PF!!!Q0J,fQS^]4?Fs*t(L#N,R^+9)<@!!hE^!$D4@!!!,j!!#7`!!!!$n,NGQ
-rr<$!"8DirJ,]KK!!Dur!<<'!!!!9%!!3-"J,fQ[rW!3's53kW5Q?6Us8Vus!WW2X+92B=!!3-"hu~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -3007 -860]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -3069 -861]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -3116 -860]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -3171 -860]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-1 i
-16 w
-2513.75 2386.55 896.4 25.2 re
-Y
-2511.35 2399.75 m
-3401.75 2399.75 l
-S
-0 0 6120 7920 re
-Y
-3374.15 2357.75 m
-3387.35 2399.75 l
-3374.15 2441.75 l
-3473.75 2399.75 l
-f*
-2585.75 1006.55 897.6 25.2 re
-Y
-3476.15 1019.75 m
-2583.35 1019.75 l
-S
-0 0 6120 7920 re
-Y
-2613.35 1061.75 m
-2600.15 1019.75 l
-2613.35 977.75 l
-2513.75 1019.75 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/overgrid.eps b/ast-5.3-1/sun210_figures/overgrid.eps
deleted file mode 100644
index 9835925..0000000
--- a/ast-5.3-1/sun210_figures/overgrid.eps
+++ /dev/null
@@ -1,6080 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 17 141 489 645
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1998/06/12 18:39:31
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-543.14 1777.49 4343.48 4343.48 re
-Y
-q[10 0 0 10 0 0]concat
-51 51 8[0.117417 0 0 0.117417 -6.377 -20.871]@85 false 3 colorimage
-a2c6>`PpfpiNfbp
-c-=MC\@ArS[FE^U^:q=q^:p>9U9:Z%U8"BIQ'I&WKp at pgMi3KQ3&gm<z*??.#zzz
-z!&uqt=BJ[*<E2"<3,rqXAnGY;OccH8UrLEodaHRneC<jOm-O**jlPU\hVS2.r5m(&kND$RcHcIi
-s8W-!s8W-!s8W-!s1>nTZEgd<Xf]7K]Y;+o_83t-`l>a,^:h4nZEgd8WMt]0Lm=6jZEgcYF`g\a<<rj9,pai;!!%"Y
-EBZQMzzzz!!$8/>_e)iK7edg&J8eoCMn$-Mi3M#['[`g_qs8,mHs;ecd1nAlL431
-q"XXJkii'Hs4#QJgY:K_s8W-!s8W-!s8W-!s8TI5[$[5JXf\^rSXl[VVnB[TX/i;0[^N$/V50o_['[3'
-P*1][MNX-c>?b<!6ULhR!!WW3!!!!j8P&m^z#mgn<!!!3-"onW'!!!"4BP<<^Mg9Sn'GM6k at q2F7Vk9TRQBmiY
-aiViRcI:7kjlPUdk2tdejkSYHmHs;thVQi7f%\s6s8W-!s8W-!s8W-!s8W+UM2 at CYP(%k/SXl=MW2QD`
-TpqO at ZEgclLkq:[P_Y$LI!g<RAnIX+ScA`j$k*P-4ZsPr('"=7()@Yczzzzz
-Bk_:9L5'kpFrMA>KS5#c['[0GZ_XCmf\"j*e'm%)g>:]CdF$A0mdB6"k2G:Xf%/F0hqul1df9 at Is8W-!s8W-!s8W-!
-N/W^HJUr&jG_q96MMd:dUSEBkJV8]0C2.L#D/E-I;#gRr"U,&Z.Ol&D&c_n3!s8W>'GLNIzz
-!!!6/#64`("9\i-z!/ZPhC2.L;KnUB^)2!Qo_83t!]"5Yk^UUe`e^`4?naYo0lK%$eo()A,gt^T9
-g"tTBe^`4Cp%A at bs8W-!s8W-!s8W-!s.>pUH[C*F?!UuOA6`AEBP;'S:/5M;BjG"M8P)JR!!!-)"?AJ&6psEC!!!TC
-&HDe2zzz"9\i.!<E9)!rr<$$O[>L?XISaCP at IrIt)rH;cAI,LUOY"Y-+qKaN3/lgrmma
-c-=N%n*fB"jm;@#s8W,lp%@_>mG[$_l07I4s8W-!s8W-!s8W-!s8S7FP&>/T;,L1Y6ps."4?5D^4Ztqb
-1c-^5.f]PL!!!!<)]MCA8iARc+!2RV/M-r&!"KJK&J5TTzz!!!!^4ZukJ=!&M+I=6O2R$`/EH$4 at SK7efC
-Q^?4OeC`F+lK[ZWb0&i-jl,1Wp at e4Bk2tacjQ#:\kND$olg*cukjn<8s8W-!s8W-!s8W-!s8W*S1,;Bk
-80]?(/1`=k)]JbWz'bqG`zz9he>E4?Q;29LVB=4$,Ml6pt$T<B)rtz!!!fO(Igk`
-91qoP9heAX:0_%/&eYh"F`i%XHa9r_X/i;?`PoU,^Y%2kcHa_]cd1b9k3;-pkih6ag=l#an+?8EiSibMgY:uWl2Ue`
-s8W-!s8W-!s8W-!.OlnS#mgS3zzzzzz!)ZTjF)uD at Df8-97oN>b8kM]_
-?XJ2.HiO-H%LrtM=''csI!'RSF`hh_LkpG+Hpg at jEH,uCG^-U&[&g at 1bKJ)Qbfnu%hpKj!aN2HajlPRa
-jR2I(lg*lqiSj1kmEX#&g"G'=j5^1>s8W-!s8W-!s8W-!rr<$!zzzzzz+!2Rn77Cs+
-C0Y"K2`EZZ5!ELfA;Z8%G'8%CBk_-iAP5ZhM2@(8H?s=@C4C__WMukUN/W47IZ9>HMMd:ZR at 1On\(THf
-[^NWpe^a!OlcI8jhr!>eq>':>l.atIbfn<&oCLu$in2o9k2th+s8W-!s8W-!s8W-!s8N'!zz
-zzz!!#AR6XF)*A7T4S>$>*5>!YG??=$rVDf:VpNLcW2Vl-G(AS%sEXGD[gZ*CQ_IX[EAOgqp2MMd:6
-F`j:IT");?ZEgdZbKIB(\)ui8n*f_rf%/I)fCAD$kih7)p\4">lh'iAq>'jChVQi7f'DYfs8W-!s8W-!
-s8W-!s8W*!!!#)B4(;Z.2`EYqzz<`W7=DJj]DG\Ll+JqAS_@:="iD1-h\It)s1Ocd&Z[CNiY
-T:_ag]Y();V8:!a]"5J%IX[cURr<4`H?sm[F`kgJaiMQEf%/F(f at T-Gjo>A\cd0r1p%@V8lK76kp\4FTp%@D,jS8NF
-p%A";io85-c2[hDs8W-!s8W-!s8W-!0ekCrBP;:$DJO$'4?P_^1G]CH$X[7J;,L1[7Rgfp at 8g*'H[C*a
-G^, at 5OdVW*UnjfiYHPUO]WA39]tM+j]"5Ja\p&@BBP;'tDf:YrNcoShS"#npdF#5(Z+drdp\4F7f\#`a
-n_DpTiSibNgt_,Wkk=`Dm-O*&kigdUg[aq+`5KUJg=lT,s8W-!s8W-!s8W-!s'B#<KS5#(H$Nq2A8Q1#EH,u*?XGfR
-3HK7_G'8%HDJk#VJTc3[H?smrN/XO,UU[hDZa7!=X/i\;[\BLj]"5J[['YL>KStbH>?b='St<!`X08_1
-]=Y\raN35phX'Uqs8W,alK[Eij6Z.!io8t]kig^Qg$S1om-O*,mdB9$kLnPAl07I4s8W-!s8W-!s8W-!
-s8T'tWL&s<JqAT%I!gs7NbE*>;GpD/Ci"9<G&q_G>?b<LDJk5bLLaq+MMd:dUSGN9]rnN at _o'BmX/i\;[aNUPWiE)*
-Za6$dR#6cYR[T\=TqT*1]=behgY:K<gt_>cmecnYmdBN8o^qhLp#=ujcHa_tk2uI6pupr*jQ,ClnaY8a
-fZ(qNs8W-!s8W-!s8W-!s8W+XN/W.3I#a5IQ^=&%P*23"R#Hu_I=6NeG'8b#MJ?m at 7RfkCUniZsKT1tN
-Q^=&U_SXdNe$HBe]Y(o#bKJ>^d^Q]pW2QYZPa&/HWMukr`l?$2]Y)"o^Zt+LjQ,Cflg*p(m,[6gkND%,rVccrs6f=C
-n*f`2lg*cukiq?rkih6RbKKqcs8W-!s8W-!s8W-!s8W-!Z*CQpO,oZqR%g=LR$a8GZ*AY&HYdM7K7ef>
-P*0QpC2.KuLPLY5I=8&mW5?Eg\[f8UZ*CL9YJ%W_\$ria_o'!o\?E*>Za7!/SXl.8R(U)Ef%/Ec]tNC`
-iV`WOn*f`*j5]e(o]G;ukih6okih*gjT#8[n*f`$h;.,Oj5T(Xg"G'Ys8W-!s8W-!s8W-!s8W-!s/DusSXl=*KnXMd
-EK#j8R at 0IG=]q2^R]39cU8"B=M2 at .KMlNeWXK8LpSt<O)\tc$qUnjg$^V@:g\BE(=daHRU]=ZA6cE++K
-USFTfYHPsc`n]A)dF$@th;.bsp%eFZjlPUcjlQ=6q>0sak2th+s8W&rrVHBekih6nkNDC*n`&Qfs8W-!
-s8W-!s8W-!s8W-!s8T.#X/rD(KnY5&FEE at rM1U>2 at q0#0O,p9>WK3+$R at 0JDX/iP3ZF[WYPa%E?[C*KQ\$riUg=k8l
-]"6;:dFHdt`5KU%[C)TtSr&;\X/i;'Xf]pqce-n&_o'CSk2u7*o&\upmHs<<qtoU at kiV$ioCMS>lg+TN
-s7Z0[naZ/(gY:lQk5YJ]s8W-!s8W-!s8W-!s8W+cQ^<YiN-9AfDf9Pu>?cl<LQdpcVl-GuZEgO3X-f9A
-USFTKPa%K"QBmi&U8"BST:a9Kb1+qjkih6^f at SL#e"WS2Y-+q(V59QHR$jA1bKJ)WdaHe#f\"j/]tM,-daIUQn*'!!
-lg*m.oCM>8m+^:Lr;?Kcp%@D,jRVm4lK[['n*g;Vs8W-!s8W-!s8W-!s8W-!V5:#fWMu/JQ'R`%TqS0]
-XK8M)XI>TH[C*EQ\[f,U[?m5HW2QYXP*2N4TsM)3]"5K*f\#$9h:L91[C*EP\@AH7Vpa#AV5:#cVP^5f
-VT-Wqgt^]5daICEl/^pdiSiban*fB"jo>A\o()A-h;.Memdfr>s8W-!s8UBicL(#ds8W-!s8W-!s8W-!s8W-!s8W-!
-s.c?a^:q=u_SX1,_QL&EP*2!G_o'F2`4s(%`l?$WiShMb^9tAVWiE(nU8#0-\@/iSdaHRpf%.dX`6lu[
-`l?$Cc-=qpfu:qLVP^6Hh;,rb_U?l\o()A9l08!<q!%&-kND$^g=kHAhu*EMp\4FJlg+QLroiS0e^`4,
-hVRGYkPtS^s8W-!s8W-!s8W-!s8W-!s8U[$f"&?%Unjg*`Pog8`O`Xlbfn;ZdaHe#f]2#Pe^`4*gt^B-e&]VOeC<"'
-gt^)rbK at uMhVR,:dF%FOn'B>+b0%l#TqT]Sbd"FXgt^]Eio9"Yj7Dm6j5]1emHs0&l1=N<p at e4WqtoaH
-m-jE3rr2onqYL'bqY9j\aN2H^io:"<s8W-!s8W-!s8W-!s8W-!s8W,;`5L-Re&]VOaN2H_j5\8'aku"5
-cd0qif\"[%e'umsaiVZB_o(6`gXXj)eC<"!f%/C%e^N!rlK[ZqjQ+nCf%&=$dF$@je'ljte\oDEkih7+q>&e"g\^mF
-k2tgnmHs&uk4SE?q"XXJkihC"m/-\Wj5]1_kNDmFs4c;_hr!>ks8W-!s8W-!s8W-!s8W-!s8W-!]tM,%
-b0&/\dbEO2j5]1[j5]7_jkAGBf\"ir`l?Z`f\+s2aiVZbj5\tOh9XEncd0r!jlP+Gf?MRbjQ,Cak2t:I
-fAkoObKJ)WdaI"/hV?oAlg*m0p%@\<m.'W9q>'jSmdBB*lM:8Okih6umdB,qj5T(XgY:K]rVbd:j/oGcs8W-!s8W-!
-s8W-!s8W-!s8W-!s2`:&eC<"2kND*ol.k(Llg*llgt]HN\_Z)tgt^]QmdB2ujkntQe^`3RYHQ^8gXXj)
-jQ,C>_o(-Zf\bTDnaZ/(gY:]GiV<3Cg=k9KmdB6"k4/!3q"XXLlK\0>pu:;mn*f`8naZ2 at o)JaikND$i
-jlQ.,o_SF\m-O*"jQ-@@s8W-!s8W-!s8W-!s8W-!s8W-!s8VBLlJ^^\eC<"Ap at dP,j5oCab0%likNCOOg#M,Qhr!>@
-eC;ppdc09G[C*F)k2u7*o%;UIa2c6ZiSj1kmHEcthr!>Ae^`jGkMtU_lg*lqiSj(elKRQtm-O*)lg+9<
-pA+O[rr2omq>'[To]YN&naZ/Eq"W\$h<jUsf\"jVs8W-!s8W-!s8W-!s8W-!s8W-!s8W,RgY9BR]["gJ
-naZ.qcd2C]pu12j`l?$Cc->J9kjIm,k2tgmm-N!Ac*=OYnaZ/Ao^qA2kiCgcgt^]5daGb>]Dqp2iSibXk2tdejlbgi
-lK[Zpj5^+:rV60_rVc]fp%?tif_>.7o()A-h;.Pgn+QJKqtp9IhVRqup!M17s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!o^qeKp%@1uhWEt_hr!>gqto7,hUpK5g=k9Oo((SkguIGTs8W,dmHrKUf%Ja0o^qe%cd1tE
-m,?p^k2tghkND7"mHs<.mdBN&io91ckktAVb0%l\g=kfUl0.?poCMS2hr!JSj7W*<r;?KhqYK"&gu%#Hm-O)if%0m$
-s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s4Z2\l07Hmj5]OomIp8Io()A"daI"/hWjCkmdBMtgY;/amap(B
-kih6UcHb;'hSd at Ng"G'Rq"Wt4jlGL`mHs<4oCLeoh;$f at hr!>VlKZpMeb8_1lK[ZtkND:$mdp&AoCMSI
-p at e+LoBu&7s8W,np\4O\qX!S8p%A"Xs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8U?gc11>oc-=Mtl06O?ccs_Zh;-o2
-bfno!h=gR9mHs<0n*fi<o$5P+io8tam-Ma3`nT8&h;-oIj5]k,p>Y)ko^qe=kND3um.0`<lg*m3q"XRV
-p@@eFq"XXSnaZMRqu?]ro^qe?l07KulL431mdBNCs8V<Hkgn>9s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
-s8W,UhVR)Eh;R>OdaHS#hVQr=g$.bccHa_kh;.D_lh0rDf%/F>mHr0Cc, at Q=j5]1Gcd1nAlK@?nkih7+q>'dZp\FX\
-j5]1al07a.nb)SJs8W,rqtpEns8Dopp at e4?j5]Usn+#r<q>'jRmHs?0md]i;o^qeUs8W-!s8W-!s8W-!
-s8W-!s8W-!s8W-!s8W-!s8W-!g"G'MoCM84lI+,/iSibQhr"8*q:=-Jm-O)jf at THYmf*4bf\"if]"5r&
-a6DjQmdBN*k2tmkkje35lg*m$l08$>q=4"FmdBMsg=ko[m/I"`l07I!m-Ns"ki_-lmdBN0m-Niqjmr!5lK[[7s8VHP
-m+0b=mHs<@s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s5W/"l07H`f%0-OlIXY>hVR,>e^aEgpZh&/
-q"XXas8V?Jl0 at R!aN2H>_SYa/maft?e'ldqeC='[o'>W-iSibip\3\,ipH.#oCMS1hVRP_lKRQtk2th#
-p\4LZq=!e at mHs<4oCM/.kM+bGg"G'Ys8V?Jl-e#.s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8V3Bjk8>?hr!>X
-m-O**m+9k at m-O*4p at dn@mIp8In*f`+jQ,1ShTF!`jQ,CSf\"p3g?@balK[ZtkNDd at r:TaUp at e4Hm-OB:
-o_SF\o()ABo()8<n)rlsq"XXMlg*g"l2L\]s8W,emdB]<oCr"RkND$]g"HE*s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!s8W-!s8W,^kND3um+gCOj5]1`kihR,naGr8rVc]kqYKs\p\FX\mdBN0m-Mp=bL+_biSibdo((r*k55&Q
-r;?K`o((DafC/1sjlPU_iSjY0qWR/,lg*m1p at de:lKdd%daHS:p%@\<m-jE3lg*m,naY;cg&D!Mp at e4[
-s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!o()A+gY;,_mHX!%kih6nkND$kkPY8Ur;?K]n*fl>
-oChnOcd0r"k2tacjR;R+gt^]AhVRGYkP4iIp%A"Ur;>pJm-F!'io8tmq"XIPoD/4Xm-O**m-Ncmj6>gmlg*lujlQ+*
-oDSXdiSibXk2tdejlu$os8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s6An7n*f`8naZGNq:aQV
-q>'j_qYKF>kj7[&lg*m7r;?!Nm_?NOcd0r8r;>^>k5"iKo^qeCmHsW at p@S"LkND$lkihC"m.^8KlK[['
-n*fuDp=S$Mkih7%oCMeRq>^Kps8W,blg*]qk5+rNjlPUVf\$6(s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
-s8V]^oDejjjlPUsp%A at bs82]js8W-!s8W-!s7c9^gY:K2daH^tf	?oCMSBn*f#cgZ[kbo^qeOq>'^V
-p%S4Ts8W,\jlPXek5"iKlg*m'm-OZJr9ES4hVR,7cHb5#h#73Ml07I4s8U?gc0Xf`kND%.s8W-!s8W-!
-s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,hnaZ&8mcs*&q>'jPlg+9<p?(N"m-O*/naZ#6mHEcteC<!rdaI at Ckf:`a
-h;-o_q>&n(hZ*WUkND$unaZ2 at o)/F`q>'jNl08-Dr:fs[s8W,ko^qkNp?Lr.p at e4[s8VQVn,NFfoCMRs
-bKJo)irB&Ys8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!kih71s8VfdpAb0mrVc]iq"WRs
-gAh3Qs8W,^kNCXUgsjj'm-O**m-OB:o_/"Pj5]1op\3CqgAV!KlK[['n*fW0m-X3-r;?Kcp%A.Vq<I81p%A"Xs8V?J
-l1t/No^qeMp\4U`r;Zfsio8tcmdC,Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8)Tg
-o()AOs8V``o_\O_p%A"FmHsK8o)8Ocs8W,Le^a*UmdBN2mHs<$j5]h*p&+acrr2oVio9e0q=aOUp\4F[
-r;?Tps8;fmrVc]iq"XFNo&Jcjo^qeRr;>dBkjIm,mHs<4oCMVHo^;/8s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!s8W-!s8VHPm,[6gs8W-!s8VQVn+QJKs8W,mp at e+LoB#)qlK[Zoio9Comd9E/jQ,CYhVS,*
-qWdA2rVc]Ykih6okhb1Qlg*m*n*g;Vs82]jp%A"TqtosTo&\upnaZ/8lg+TNs8;fmmHs<'k2u7*o)Jai
-s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,Of\#NUlgF3/q"XX\qYKXJme?JMkih6nkND!ik2G:X
-oCMSGo^q;.k4\NBqtp9`p%A at bs5N%tb0%m,s8V9FkNM-ns8W,`l07m6p&"X`q>'jXoCN"^s7GsUkih6n
-kNDO2p&4jflg*ldeC=Nus8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!kih6sm-OWH
-qu?]rg"G'MoCMkVqt9XTlK[[-p%A%Pp?V&1p at e4AjlPgolf[Hon*f`5mdAuihuE`VlK[[7s8VZ\o(2JEoCMSQrr2fl
-qsNn?p at e4[s8V]^oCDJClK[['n*f>ujN#<]s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!s6oFFnaZ/Bp%A1XqY0aYp%A"Ur;?9^p@@eFjlPUJbfoJAmJm4de^`4Ms8Vlhq"==Qo^qeJ
-o^q,$iS<5DnaZ/?o()h\s8W-!p\4FHl07g2oDJOalg*m9rr2<PmIB`:h;-oQlg+TNs8W-!s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8VWZn`f<&qtp9Mio9e0q<-r(f at SX%dF%FOn*f`6n*f`6n*g;V
-s8W-!naZ/Ir;>gDl21AThVR,Rl07EqkiCgclK[["lK\!4oD\ago^qeUs8W&rrVHBel07HrkihX0oDJOa
-kih71s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,\jlP1Kg%"V&g"G'GmHs`Fq;L;k
-q"XXZq"XIPoD/4XiSibPhVS50rT<8)s8W,fn*g;Vs5rJ+o^qeQqto$uf_YI at p%A"<j5]OomJQn[s8W,h
-naZSVrVuotr;?K`o()28mJm4ds8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
-s8W-!gt^]Eio91ckk+N>o^qe?l08$>q>^Kpp\4F6f at TlqqW6i#o()ADo^qV at n,NFfg=k9[rr2<PmI0N4rr2ofo()DD
-oBbi1s8W,cm-OE<p%S4TmHs<2naZMRqqg2dp at e4+cd2Xks8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!s8W-!s8W-!s8W-!s7lBanaZ/Ao^q;.k4J<<j5]2"s8V<Hkk"E;mdBNCs8VWZn_N$WjlPUm
-n*g;Vs8W-!iSibYkNDO2p&G'lqYL'dr;?<`p[n+Mp at e4CkNDR4pA"FXdF$A>r;?Kjr9!/(s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8V]^oCV\IhVR,`p\4=Po_naes8W,cm-Ns"
-kkb/Pp\4F\rVbm at k55&Qo()AAnaZ8Do[VLBq"XXTo((o(jmhm2iSibdo()GFo^_SDo^qeIoCM>8m.BrB
-hr!>Xm-Ma3`rH)=s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W*~>
-Q
-0.36 w
-1 J
-1 j
-1 0 0 rg
-2283 1777 m
-2286 1812 l
-2290 1870 l
-2293 1927 l
-2296 1985 l
-2299 2042 l
-2301 2100 l
-2302 2158 l
-2303 2216 l
-2303 2274 l
-2302 2332 l
-2301 2390 l
-2299 2448 l
-2297 2506 l
-2294 2564 l
-2291 2622 l
-2287 2680 l
-2282 2738 l
-2277 2796 l
-2271 2854 l
-2265 2913 l
-2258 2971 l
-2250 3029 l
-2242 3087 l
-2233 3145 l
-2223 3202 l
-2213 3260 l
-2203 3318 l
-2192 3376 l
-2180 3433 l
-2167 3491 l
-2154 3548 l
-2141 3606 l
-2126 3663 l
-2112 3720 l
-2096 3777 l
-2080 3834 l
-2063 3891 l
-2046 3948 l
-2028 4004 l
-2010 4061 l
-1991 4117 l
-1971 4173 l
-1951 4229 l
-1930 4284 l
-1909 4340 l
-1887 4395 l
-1865 4451 l
-1841 4505 l
-1818 4560 l
-1816 4564 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1813 4570 l
-1813 4570 l
-S
-1911 1777 m
-1913 1784 l
-1924 1834 l
-1935 1885 l
-1945 1936 l
-1955 1987 l
-1964 2038 l
-1973 2089 l
-1981 2141 l
-1989 2193 l
-1997 2244 l
-2004 2296 l
-2010 2349 l
-2016 2401 l
-2021 2453 l
-2026 2506 l
-2031 2559 l
-2035 2611 l
-2038 2664 l
-2041 2717 l
-2044 2770 l
-2045 2824 l
-2047 2877 l
-2048 2931 l
-2048 2984 l
-2048 3038 l
-2047 3092 l
-2046 3145 l
-2044 3199 l
-2042 3253 l
-2039 3307 l
-2035 3362 l
-2031 3416 l
-2027 3470 l
-2022 3524 l
-2016 3579 l
-2010 3633 l
-2003 3688 l
-1996 3742 l
-1988 3797 l
-1979 3851 l
-1970 3906 l
-1961 3960 l
-1950 4015 l
-1940 4070 l
-1928 4124 l
-1916 4179 l
-1904 4233 l
-1891 4288 l
-1877 4342 l
-1863 4397 l
-1848 4451 l
-1832 4506 l
-1816 4560 l
-1815 4564 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1813 4570 l
-1813 4570 l
-S
-1433 1777 m
-1446 1809 l
-1464 1851 l
-1482 1893 l
-1499 1935 l
-1516 1978 l
-1532 2020 l
-1549 2063 l
-1564 2106 l
-1580 2149 l
-1595 2193 l
-1610 2236 l
-1624 2280 l
-1638 2324 l
-1651 2368 l
-1665 2413 l
-1677 2457 l
-1690 2502 l
-1702 2547 l
-1714 2592 l
-1725 2637 l
-1736 2682 l
-1746 2728 l
-1756 2773 l
-1766 2819 l
-1775 2865 l
-1784 2911 l
-1793 2958 l
-1801 3004 l
-1808 3051 l
-1816 3097 l
-1822 3144 l
-1829 3191 l
-1835 3239 l
-1840 3286 l
-1845 3333 l
-1850 3381 l
-1854 3429 l
-1857 3477 l
-1861 3525 l
-1863 3573 l
-1866 3621 l
-1867 3670 l
-1869 3718 l
-1870 3767 l
-1870 3816 l
-1870 3865 l
-1869 3914 l
-1868 3963 l
-1866 4012 l
-1864 4062 l
-1862 4111 l
-1859 4161 l
-1855 4210 l
-1851 4260 l
-1846 4310 l
-1841 4360 l
-1835 4410 l
-1829 4460 l
-1822 4511 l
-1815 4561 l
-1814 4565 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-732 1777 m
-733 1778 l
-758 1811 l
-782 1843 l
-807 1876 l
-831 1908 l
-855 1941 l
-878 1974 l
-902 2007 l
-925 2041 l
-948 2074 l
-971 2108 l
-993 2141 l
-1015 2175 l
-1037 2209 l
-1059 2243 l
-1081 2278 l
-1102 2312 l
-1123 2347 l
-1143 2382 l
-1164 2417 l
-1184 2452 l
-1204 2487 l
-1224 2522 l
-1243 2558 l
-1262 2593 l
-1281 2629 l
-1300 2665 l
-1318 2701 l
-1336 2738 l
-1354 2774 l
-1371 2811 l
-1388 2847 l
-1405 2884 l
-1422 2921 l
-1438 2958 l
-1454 2995 l
-1470 3033 l
-1485 3070 l
-1500 3108 l
-1515 3146 l
-1530 3184 l
-1544 3222 l
-1558 3260 l
-1571 3299 l
-1584 3338 l
-1597 3376 l
-1610 3415 l
-1622 3454 l
-1634 3493 l
-1645 3533 l
-1657 3572 l
-1667 3612 l
-1678 3651 l
-1688 3691 l
-1698 3731 l
-1707 3772 l
-1716 3812 l
-1725 3852 l
-1733 3893 l
-1741 3934 l
-1749 3975 l
-1756 4016 l
-1763 4057 l
-1769 4098 l
-1775 4140 l
-1781 4181 l
-1786 4223 l
-1791 4265 l
-1795 4307 l
-1799 4349 l
-1803 4392 l
-1806 4434 l
-1809 4477 l
-1811 4519 l
-1813 4562 l
-1813 4565 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 2622 m
-551 2630 l
-577 2656 l
-602 2682 l
-628 2709 l
-653 2736 l
-678 2762 l
-703 2789 l
-728 2816 l
-753 2843 l
-777 2870 l
-801 2897 l
-825 2925 l
-849 2952 l
-873 2979 l
-896 3007 l
-920 3034 l
-943 3062 l
-966 3090 l
-988 3118 l
-1011 3146 l
-1033 3174 l
-1055 3202 l
-1077 3230 l
-1099 3258 l
-1120 3287 l
-1142 3315 l
-1163 3344 l
-1184 3372 l
-1204 3401 l
-1225 3430 l
-1245 3459 l
-1265 3488 l
-1285 3517 l
-1304 3546 l
-1324 3575 l
-1343 3605 l
-1362 3634 l
-1381 3664 l
-1399 3693 l
-1417 3723 l
-1435 3753 l
-1453 3783 l
-1470 3813 l
-1488 3843 l
-1505 3873 l
-1521 3903 l
-1538 3934 l
-1554 3964 l
-1570 3995 l
-1586 4026 l
-1601 4056 l
-1616 4087 l
-1631 4118 l
-1646 4150 l
-1661 4181 l
-1675 4212 l
-1689 4244 l
-1702 4275 l
-1715 4307 l
-1728 4339 l
-1741 4370 l
-1754 4402 l
-1766 4435 l
-1778 4467 l
-1789 4499 l
-1800 4532 l
-1811 4564 l
-1812 4567 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 3506 m
-561 3518 l
-588 3538 l
-615 3558 l
-642 3577 l
-669 3597 l
-696 3616 l
-723 3636 l
-749 3656 l
-776 3675 l
-802 3695 l
-828 3714 l
-854 3734 l
-880 3754 l
-906 3773 l
-932 3793 l
-957 3813 l
-982 3832 l
-1008 3852 l
-1033 3872 l
-1057 3891 l
-1082 3911 l
-1107 3931 l
-1131 3950 l
-1156 3970 l
-1180 3990 l
-1204 4010 l
-1228 4029 l
-1251 4049 l
-1275 4069 l
-1298 4089 l
-1321 4108 l
-1344 4128 l
-1367 4148 l
-1390 4168 l
-1413 4188 l
-1435 4207 l
-1457 4227 l
-1480 4247 l
-1501 4267 l
-1523 4287 l
-1545 4307 l
-1566 4327 l
-1588 4346 l
-1609 4366 l
-1630 4386 l
-1650 4406 l
-1671 4426 l
-1691 4446 l
-1711 4466 l
-1731 4486 l
-1751 4506 l
-1771 4526 l
-1791 4546 l
-1810 4567 l
-1811 4568 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 4183 m
-554 4186 l
-584 4197 l
-615 4208 l
-645 4219 l
-675 4229 l
-705 4240 l
-735 4250 l
-765 4260 l
-795 4271 l
-825 4281 l
-855 4291 l
-884 4301 l
-914 4311 l
-943 4320 l
-973 4330 l
-1002 4340 l
-1031 4349 l
-1060 4358 l
-1089 4368 l
-1118 4377 l
-1147 4386 l
-1176 4395 l
-1204 4403 l
-1233 4412 l
-1261 4421 l
-1290 4429 l
-1318 4438 l
-1346 4446 l
-1374 4454 l
-1402 4462 l
-1430 4470 l
-1457 4478 l
-1485 4486 l
-1513 4493 l
-1540 4501 l
-1567 4508 l
-1595 4515 l
-1622 4523 l
-1649 4530 l
-1676 4536 l
-1702 4543 l
-1729 4550 l
-1756 4556 l
-1782 4563 l
-1809 4569 l
-1810 4570 l
-1812 4570 l
-1812 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 4696 m
-548 4696 l
-582 4697 l
-617 4698 l
-651 4698 l
-685 4699 l
-719 4699 l
-753 4699 l
-788 4698 l
-822 4698 l
-855 4697 l
-889 4696 l
-923 4695 l
-957 4693 l
-990 4692 l
-1024 4690 l
-1058 4688 l
-1091 4685 l
-1124 4683 l
-1158 4680 l
-1191 4677 l
-1224 4674 l
-1257 4670 l
-1290 4666 l
-1323 4663 l
-1356 4658 l
-1389 4654 l
-1421 4649 l
-1454 4644 l
-1487 4639 l
-1519 4633 l
-1551 4628 l
-1584 4622 l
-1616 4615 l
-1648 4609 l
-1680 4602 l
-1712 4595 l
-1744 4587 l
-1776 4580 l
-1808 4572 l
-1810 4571 l
-1812 4571 l
-1812 4570 l
-1812 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 5102 m
-557 5098 l
-596 5089 l
-634 5079 l
-672 5068 l
-710 5058 l
-748 5047 l
-786 5035 l
-823 5024 l
-861 5012 l
-899 4999 l
-936 4987 l
-974 4974 l
-1011 4960 l
-1048 4947 l
-1085 4933 l
-1122 4918 l
-1159 4904 l
-1196 4889 l
-1233 4873 l
-1270 4857 l
-1306 4841 l
-1343 4825 l
-1379 4808 l
-1416 4790 l
-1452 4773 l
-1488 4755 l
-1524 4736 l
-1560 4717 l
-1595 4698 l
-1631 4678 l
-1666 4658 l
-1702 4638 l
-1737 4617 l
-1772 4596 l
-1807 4574 l
-1809 4573 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 5444 m
-564 5435 l
-605 5414 l
-646 5394 l
-687 5373 l
-728 5352 l
-769 5330 l
-810 5308 l
-850 5285 l
-890 5262 l
-931 5239 l
-971 5215 l
-1011 5191 l
-1050 5166 l
-1090 5141 l
-1129 5115 l
-1169 5089 l
-1208 5063 l
-1247 5036 l
-1285 5008 l
-1324 4981 l
-1362 4952 l
-1400 4923 l
-1438 4894 l
-1476 4865 l
-1514 4834 l
-1551 4804 l
-1588 4773 l
-1625 4741 l
-1662 4709 l
-1699 4677 l
-1735 4644 l
-1771 4610 l
-1807 4576 l
-1809 4574 l
-1812 4572 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-S
-543 5757 m
-554 5749 l
-597 5720 l
-640 5690 l
-683 5660 l
-726 5629 l
-768 5598 l
-810 5567 l
-852 5535 l
-893 5502 l
-935 5469 l
-976 5435 l
-1017 5401 l
-1057 5367 l
-1098 5332 l
-1138 5297 l
-1178 5261 l
-1217 5224 l
-1256 5187 l
-1295 5150 l
-1334 5112 l
-1372 5074 l
-1410 5035 l
-1448 4996 l
-1486 4956 l
-1523 4916 l
-1559 4876 l
-1596 4835 l
-1632 4793 l
-1668 4751 l
-1703 4709 l
-1738 4666 l
-1773 4622 l
-1807 4578 l
-1810 4575 l
-1812 4572 l
-1812 4572 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-543 6064 m
-569 6042 l
-613 6005 l
-656 5967 l
-700 5929 l
-742 5890 l
-785 5851 l
-827 5812 l
-868 5772 l
-910 5731 l
-951 5691 l
-991 5649 l
-1031 5607 l
-1071 5565 l
-1110 5522 l
-1149 5479 l
-1188 5436 l
-1226 5392 l
-1264 5347 l
-1301 5302 l
-1338 5257 l
-1375 5211 l
-1411 5165 l
-1446 5118 l
-1482 5071 l
-1516 5024 l
-1551 4976 l
-1584 4928 l
-1618 4879 l
-1651 4830 l
-1683 4781 l
-1715 4731 l
-1746 4681 l
-1777 4630 l
-1808 4579 l
-1810 4576 l
-1812 4572 l
-1812 4572 l
-1812 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-804 6121 m
-831 6091 l
-871 6046 l
-911 6000 l
-950 5954 l
-989 5907 l
-1027 5860 l
-1065 5813 l
-1102 5765 l
-1139 5717 l
-1175 5669 l
-1211 5620 l
-1246 5571 l
-1280 5521 l
-1315 5471 l
-1348 5421 l
-1381 5371 l
-1414 5320 l
-1445 5269 l
-1477 5218 l
-1508 5166 l
-1538 5114 l
-1567 5062 l
-1597 5009 l
-1625 4957 l
-1653 4903 l
-1681 4850 l
-1707 4797 l
-1734 4743 l
-1759 4689 l
-1784 4635 l
-1809 4580 l
-1811 4576 l
-1812 4572 l
-1812 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1061 6121 m
-1070 6107 l
-1104 6057 l
-1138 6007 l
-1171 5956 l
-1203 5905 l
-1235 5854 l
-1266 5803 l
-1297 5751 l
-1327 5700 l
-1356 5648 l
-1384 5596 l
-1412 5544 l
-1440 5491 l
-1467 5439 l
-1493 5386 l
-1518 5333 l
-1543 5280 l
-1567 5227 l
-1591 5173 l
-1614 5120 l
-1636 5066 l
-1658 5013 l
-1679 4959 l
-1700 4905 l
-1720 4851 l
-1739 4797 l
-1758 4743 l
-1776 4689 l
-1793 4634 l
-1810 4580 l
-1811 4576 l
-1813 4572 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1301 6121 m
-1308 6108 l
-1334 6057 l
-1360 6006 l
-1384 5955 l
-1408 5904 l
-1432 5853 l
-1455 5802 l
-1477 5751 l
-1498 5700 l
-1519 5649 l
-1539 5598 l
-1558 5547 l
-1577 5495 l
-1595 5444 l
-1613 5393 l
-1630 5342 l
-1646 5291 l
-1662 5240 l
-1677 5189 l
-1691 5138 l
-1705 5087 l
-1718 5036 l
-1731 4985 l
-1743 4934 l
-1755 4883 l
-1766 4832 l
-1776 4782 l
-1786 4731 l
-1795 4680 l
-1804 4630 l
-1812 4579 l
-1812 4576 l
-1813 4572 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1567 6121 m
-1568 6117 l
-1585 6070 l
-1601 6023 l
-1617 5976 l
-1632 5929 l
-1646 5882 l
-1659 5835 l
-1672 5789 l
-1685 5742 l
-1697 5696 l
-1708 5650 l
-1718 5603 l
-1728 5557 l
-1738 5512 l
-1747 5466 l
-1755 5420 l
-1763 5375 l
-1770 5329 l
-1776 5284 l
-1783 5239 l
-1788 5194 l
-1793 5149 l
-1798 5104 l
-1802 5060 l
-1805 5015 l
-1808 4971 l
-1811 4927 l
-1813 4883 l
-1814 4839 l
-1815 4795 l
-1816 4751 l
-1816 4708 l
-1816 4664 l
-1815 4621 l
-1814 4578 l
-1813 4575 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1922 6121 m
-1923 6116 l
-1930 6076 l
-1937 6037 l
-1943 5998 l
-1949 5959 l
-1954 5921 l
-1958 5882 l
-1962 5844 l
-1966 5806 l
-1969 5768 l
-1971 5730 l
-1973 5693 l
-1975 5655 l
-1976 5618 l
-1976 5581 l
-1976 5544 l
-1976 5508 l
-1975 5471 l
-1974 5435 l
-1972 5399 l
-1970 5363 l
-1967 5327 l
-1964 5292 l
-1961 5256 l
-1957 5221 l
-1953 5186 l
-1948 5150 l
-1943 5116 l
-1938 5081 l
-1932 5046 l
-1926 5012 l
-1920 4978 l
-1913 4943 l
-1906 4909 l
-1898 4875 l
-1890 4842 l
-1882 4808 l
-1874 4774 l
-1865 4741 l
-1855 4708 l
-1846 4675 l
-1836 4642 l
-1826 4609 l
-1815 4576 l
-1814 4574 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-S
-2562 6121 m
-2562 6116 l
-2562 6089 l
-2562 6062 l
-2562 6035 l
-2561 6009 l
-2560 5983 l
-2558 5957 l
-2556 5931 l
-2553 5906 l
-2550 5880 l
-2546 5855 l
-2543 5830 l
-2538 5806 l
-2534 5781 l
-2529 5757 l
-2523 5733 l
-2517 5709 l
-2511 5685 l
-2505 5661 l
-2498 5638 l
-2491 5615 l
-2483 5591 l
-2476 5568 l
-2468 5545 l
-2459 5523 l
-2451 5500 l
-2442 5477 l
-2432 5455 l
-2423 5432 l
-2413 5410 l
-2403 5388 l
-2392 5366 l
-2381 5344 l
-2370 5322 l
-2359 5300 l
-2348 5279 l
-2336 5257 l
-2324 5236 l
-2311 5214 l
-2299 5193 l
-2286 5171 l
-2273 5150 l
-2260 5129 l
-2246 5108 l
-2232 5087 l
-2218 5066 l
-2204 5045 l
-2190 5024 l
-2175 5003 l
-2160 4982 l
-2145 4961 l
-2129 4941 l
-2114 4920 l
-2098 4899 l
-2082 4879 l
-2066 4858 l
-2049 4838 l
-2033 4817 l
-2016 4797 l
-1999 4776 l
-1981 4756 l
-1964 4736 l
-1946 4715 l
-1928 4695 l
-1910 4675 l
-1892 4655 l
-1873 4634 l
-1855 4614 l
-1836 4594 l
-1817 4574 l
-1815 4572 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4570 l
-1813 4570 l
-1813 4570 l
-S
-4454 1777 m
-4454 1785 l
-4454 1798 l
-4454 1810 l
-4454 1822 l
-4453 1834 l
-4453 1847 l
-4453 1859 l
-4453 1871 l
-4452 1882 l
-4452 1894 l
-4452 1906 l
-4451 1918 l
-4451 1929 l
-4451 1941 l
-4450 1952 l
-4450 1964 l
-4449 1975 l
-4449 1986 l
-4448 1998 l
-4448 2009 l
-4447 2020 l
-4447 2031 l
-4446 2042 l
-4446 2053 l
-4445 2064 l
-4445 2075 l
-4444 2086 l
-4443 2096 l
-4443 2107 l
-4442 2118 l
-4442 2128 l
-4441 2139 l
-4440 2149 l
-4440 2159 l
-4439 2170 l
-4428 2309 l
-4415 2438 l
-4401 2558 l
-4385 2670 l
-4369 2775 l
-4352 2874 l
-4334 2966 l
-4316 3052 l
-4297 3134 l
-4278 3210 l
-4259 3283 l
-4240 3351 l
-4221 3416 l
-4201 3477 l
-4182 3534 l
-4163 3589 l
-4143 3641 l
-4124 3691 l
-4105 3738 l
-4085 3783 l
-4066 3825 l
-4047 3866 l
-4028 3905 l
-4009 3942 l
-3990 3977 l
-3971 4011 l
-3952 4043 l
-3933 4074 l
-3914 4104 l
-3895 4132 l
-3876 4159 l
-3858 4185 l
-3839 4210 l
-3820 4234 l
-3801 4257 l
-3783 4279 l
-3764 4300 l
-3745 4320 l
-3726 4340 l
-3708 4358 l
-3689 4376 l
-3670 4393 l
-3651 4410 l
-3633 4425 l
-3614 4441 l
-3595 4455 l
-3576 4469 l
-3557 4482 l
-3538 4495 l
-3519 4507 l
-3500 4519 l
-3481 4531 l
-3462 4541 l
-3442 4552 l
-3423 4561 l
-3404 4571 l
-3384 4580 l
-3365 4589 l
-3345 4597 l
-3325 4605 l
-3306 4612 l
-3286 4619 l
-3266 4626 l
-3246 4632 l
-3226 4638 l
-3206 4644 l
-3186 4649 l
-3165 4654 l
-3145 4659 l
-3125 4663 l
-3104 4668 l
-3083 4671 l
-3063 4675 l
-3042 4678 l
-3021 4681 l
-3000 4684 l
-2979 4687 l
-2958 4689 l
-2936 4691 l
-2915 4693 l
-2894 4694 l
-2872 4696 l
-2850 4697 l
-2828 4698 l
-2807 4698 l
-2785 4699 l
-2762 4699 l
-2740 4699 l
-2718 4699 l
-2696 4699 l
-2673 4698 l
-2650 4697 l
-2628 4696 l
-2605 4695 l
-2582 4694 l
-2559 4692 l
-2536 4690 l
-2513 4689 l
-2489 4686 l
-2466 4684 l
-2442 4682 l
-2418 4679 l
-2395 4676 l
-2371 4674 l
-2347 4670 l
-2323 4667 l
-2298 4664 l
-2274 4660 l
-2250 4657 l
-2225 4653 l
-2201 4649 l
-2176 4644 l
-2151 4640 l
-2126 4636 l
-2101 4631 l
-2076 4626 l
-2050 4621 l
-2025 4616 l
-2000 4611 l
-1974 4606 l
-1948 4601 l
-1922 4595 l
-1896 4589 l
-1870 4583 l
-1844 4577 l
-1818 4571 l
-1816 4571 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-4071 1777 m
-4067 1810 l
-4057 1881 l
-4046 1950 l
-4034 2018 l
-4021 2084 l
-4007 2148 l
-3993 2211 l
-3979 2273 l
-3963 2333 l
-3947 2392 l
-3931 2450 l
-3914 2506 l
-3897 2561 l
-3879 2615 l
-3860 2667 l
-3842 2719 l
-3822 2769 l
-3803 2818 l
-3783 2866 l
-3762 2913 l
-3742 2959 l
-3721 3004 l
-3699 3048 l
-3678 3091 l
-3656 3134 l
-3633 3175 l
-3611 3215 l
-3588 3255 l
-3565 3293 l
-3542 3331 l
-3518 3368 l
-3494 3404 l
-3470 3440 l
-3446 3474 l
-3421 3508 l
-3397 3541 l
-3372 3574 l
-3347 3606 l
-3321 3637 l
-3296 3667 l
-3270 3697 l
-3245 3726 l
-3219 3754 l
-3192 3782 l
-3166 3810 l
-3140 3836 l
-3113 3863 l
-3086 3888 l
-3059 3913 l
-3032 3938 l
-3005 3962 l
-2978 3985 l
-2950 4008 l
-2922 4030 l
-2895 4052 l
-2867 4074 l
-2839 4094 l
-2811 4115 l
-2782 4135 l
-2754 4154 l
-2725 4174 l
-2697 4192 l
-2668 4210 l
-2639 4228 l
-2610 4246 l
-2581 4263 l
-2552 4279 l
-2522 4295 l
-2493 4311 l
-2463 4326 l
-2433 4341 l
-2404 4356 l
-2374 4370 l
-2344 4384 l
-2314 4398 l
-2283 4411 l
-2253 4424 l
-2223 4436 l
-2192 4448 l
-2162 4460 l
-2131 4472 l
-2100 4483 l
-2069 4493 l
-2038 4504 l
-2007 4514 l
-1976 4524 l
-1945 4534 l
-1914 4543 l
-1882 4552 l
-1851 4560 l
-1819 4569 l
-1817 4569 l
-1815 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-3631 1777 m
-3622 1824 l
-3610 1887 l
-3597 1950 l
-3583 2011 l
-3568 2072 l
-3553 2132 l
-3537 2191 l
-3521 2249 l
-3504 2307 l
-3486 2363 l
-3468 2419 l
-3450 2474 l
-3431 2528 l
-3411 2582 l
-3391 2635 l
-3370 2687 l
-3349 2738 l
-3328 2789 l
-3306 2839 l
-3283 2888 l
-3260 2936 l
-3237 2984 l
-3213 3031 l
-3189 3078 l
-3165 3123 l
-3140 3168 l
-3115 3213 l
-3089 3256 l
-3063 3300 l
-3037 3342 l
-3010 3384 l
-2984 3425 l
-2956 3466 l
-2929 3506 l
-2901 3545 l
-2873 3584 l
-2845 3622 l
-2816 3659 l
-2787 3696 l
-2758 3733 l
-2728 3769 l
-2699 3804 l
-2669 3839 l
-2639 3873 l
-2608 3907 l
-2578 3940 l
-2547 3972 l
-2516 4004 l
-2484 4036 l
-2453 4067 l
-2421 4098 l
-2389 4128 l
-2357 4157 l
-2325 4186 l
-2292 4215 l
-2260 4243 l
-2227 4270 l
-2194 4298 l
-2160 4324 l
-2127 4350 l
-2094 4376 l
-2060 4401 l
-2026 4426 l
-1992 4451 l
-1958 4475 l
-1923 4498 l
-1889 4521 l
-1854 4544 l
-1820 4566 l
-1817 4568 l
-1815 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-3251 1777 m
-3241 1834 l
-3230 1898 l
-3218 1960 l
-3205 2023 l
-3192 2084 l
-3178 2146 l
-3164 2206 l
-3149 2266 l
-3133 2326 l
-3116 2385 l
-3099 2444 l
-3082 2502 l
-3063 2559 l
-3045 2616 l
-3025 2673 l
-3005 2728 l
-2985 2784 l
-2964 2839 l
-2942 2893 l
-2920 2947 l
-2898 3000 l
-2875 3052 l
-2851 3105 l
-2827 3156 l
-2803 3207 l
-2778 3258 l
-2753 3308 l
-2727 3357 l
-2700 3406 l
-2674 3454 l
-2647 3502 l
-2619 3549 l
-2591 3596 l
-2563 3642 l
-2534 3688 l
-2505 3733 l
-2476 3778 l
-2446 3822 l
-2416 3866 l
-2386 3909 l
-2355 3951 l
-2324 3993 l
-2292 4035 l
-2260 4076 l
-2228 4117 l
-2196 4157 l
-2163 4196 l
-2130 4235 l
-2096 4274 l
-2063 4312 l
-2029 4349 l
-1995 4386 l
-1960 4423 l
-1926 4459 l
-1891 4494 l
-1855 4529 l
-1820 4564 l
-1817 4566 l
-1815 4569 l
-1815 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2919 1777 m
-2914 1822 l
-2907 1885 l
-2898 1949 l
-2890 2012 l
-2880 2074 l
-2870 2137 l
-2859 2199 l
-2848 2261 l
-2836 2322 l
-2823 2383 l
-2809 2444 l
-2795 2505 l
-2781 2565 l
-2765 2625 l
-2749 2685 l
-2733 2744 l
-2715 2803 l
-2698 2861 l
-2679 2919 l
-2660 2977 l
-2641 3034 l
-2621 3091 l
-2600 3148 l
-2579 3204 l
-2557 3260 l
-2535 3315 l
-2512 3370 l
-2489 3425 l
-2465 3479 l
-2440 3533 l
-2415 3586 l
-2390 3639 l
-2364 3692 l
-2338 3744 l
-2311 3795 l
-2283 3847 l
-2255 3898 l
-2227 3948 l
-2198 3998 l
-2169 4047 l
-2139 4096 l
-2109 4145 l
-2079 4193 l
-2048 4241 l
-2016 4288 l
-1985 4335 l
-1952 4381 l
-1920 4427 l
-1887 4473 l
-1853 4518 l
-1819 4562 l
-1817 4565 l
-1815 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2606 1777 m
-2606 1788 l
-2604 1850 l
-2602 1912 l
-2599 1973 l
-2595 2035 l
-2590 2096 l
-2585 2158 l
-2579 2219 l
-2573 2280 l
-2566 2341 l
-2558 2402 l
-2550 2463 l
-2541 2524 l
-2531 2584 l
-2521 2645 l
-2510 2705 l
-2499 2765 l
-2487 2825 l
-2474 2885 l
-2461 2944 l
-2447 3004 l
-2432 3063 l
-2417 3122 l
-2401 3181 l
-2385 3239 l
-2367 3297 l
-2350 3355 l
-2332 3413 l
-2313 3471 l
-2293 3528 l
-2273 3585 l
-2253 3642 l
-2232 3698 l
-2210 3755 l
-2188 3810 l
-2165 3866 l
-2142 3922 l
-2118 3977 l
-2093 4031 l
-2068 4086 l
-2042 4140 l
-2016 4194 l
-1990 4247 l
-1963 4300 l
-1935 4353 l
-1907 4406 l
-1878 4458 l
-1849 4509 l
-1819 4561 l
-1817 4565 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2890 6121 m
-2892 6118 l
-2906 6096 l
-2920 6075 l
-2934 6054 l
-2948 6032 l
-2962 6011 l
-2976 5989 l
-2990 5968 l
-3003 5946 l
-3017 5924 l
-3031 5902 l
-3044 5880 l
-3058 5858 l
-3071 5836 l
-3084 5814 l
-3097 5792 l
-3111 5770 l
-3124 5748 l
-3137 5725 l
-3150 5703 l
-3162 5681 l
-3175 5658 l
-3188 5635 l
-3200 5613 l
-3213 5590 l
-3225 5567 l
-3238 5545 l
-3250 5522 l
-3262 5499 l
-3274 5476 l
-3286 5453 l
-3298 5430 l
-3310 5407 l
-3322 5384 l
-3334 5360 l
-3345 5337 l
-3357 5314 l
-3368 5291 l
-3380 5267 l
-3391 5244 l
-3402 5220 l
-3413 5197 l
-3424 5173 l
-3435 5150 l
-3446 5126 l
-3457 5103 l
-3468 5079 l
-3478 5055 l
-3489 5032 l
-3499 5008 l
-3509 4984 l
-3519 4961 l
-3530 4937 l
-3540 4913 l
-3549 4889 l
-3559 4865 l
-3569 4841 l
-3579 4817 l
-3588 4793 l
-3598 4769 l
-3607 4745 l
-3616 4721 l
-3625 4697 l
-3634 4673 l
-3643 4649 l
-3652 4625 l
-3661 4601 l
-3670 4577 l
-3678 4553 l
-3687 4529 l
-3695 4505 l
-3704 4481 l
-3712 4457 l
-3720 4433 l
-3728 4409 l
-3736 4385 l
-3744 4361 l
-3751 4337 l
-3759 4312 l
-3766 4288 l
-3774 4264 l
-3781 4240 l
-3788 4216 l
-3796 4192 l
-3803 4168 l
-3810 4144 l
-3816 4120 l
-3823 4096 l
-3830 4072 l
-3836 4048 l
-3843 4024 l
-3849 4000 l
-3855 3976 l
-3861 3953 l
-3868 3929 l
-3874 3905 l
-3879 3881 l
-3885 3857 l
-3891 3833 l
-3896 3810 l
-3902 3786 l
-3907 3762 l
-3913 3738 l
-3918 3715 l
-3923 3691 l
-3928 3668 l
-3933 3644 l
-3938 3621 l
-3942 3597 l
-3947 3574 l
-3952 3550 l
-3956 3527 l
-3960 3504 l
-3965 3480 l
-3969 3457 l
-3973 3434 l
-3977 3411 l
-3981 3387 l
-3985 3364 l
-3989 3341 l
-3992 3318 l
-3996 3295 l
-3999 3272 l
-4003 3249 l
-4006 3227 l
-4009 3204 l
-4012 3181 l
-4015 3158 l
-4018 3136 l
-4021 3113 l
-4024 3091 l
-4026 3068 l
-4029 3046 l
-4032 3023 l
-4034 3001 l
-4036 2979 l
-4039 2957 l
-4041 2934 l
-4043 2912 l
-4045 2890 l
-4047 2868 l
-4049 2846 l
-4051 2825 l
-4052 2803 l
-4054 2781 l
-4055 2759 l
-4057 2738 l
-4058 2716 l
-4060 2695 l
-4061 2673 l
-4062 2652 l
-4063 2631 l
-4064 2609 l
-4065 2588 l
-4066 2567 l
-4067 2546 l
-4068 2525 l
-4068 2504 l
-4069 2483 l
-4069 2462 l
-4070 2442 l
-4070 2421 l
-4070 2401 l
-4071 2380 l
-4071 2360 l
-4071 2339 l
-4071 2319 l
-4071 2299 l
-4071 2279 l
-4071 2259 l
-4071 2239 l
-4070 2219 l
-4070 2199 l
-4069 2179 l
-4069 2159 l
-4068 2140 l
-4068 2120 l
-4067 2100 l
-4066 2081 l
-4066 2062 l
-4065 2042 l
-4064 2023 l
-4063 2004 l
-4062 1985 l
-4061 1966 l
-4060 1947 l
-4059 1928 l
-4057 1910 l
-4056 1891 l
-4055 1872 l
-4053 1854 l
-4052 1835 l
-4050 1817 l
-4049 1799 l
-4047 1781 l
-4047 1777 l
-S
-868 1777 m
-823 1845 l
-772 1921 l
-722 1998 l
-672 2076 l
-623 2155 l
-573 2235 l
-543 2285 l
-S
-2598 6121 m
-2601 6118 l
-2611 6104 l
-2620 6091 l
-2630 6078 l
-2639 6064 l
-2649 6051 l
-2658 6038 l
-2668 6024 l
-2677 6011 l
-2686 5997 l
-2696 5984 l
-2705 5970 l
-2714 5956 l
-2724 5943 l
-2733 5929 l
-2742 5915 l
-2751 5901 l
-2761 5887 l
-2770 5874 l
-2779 5860 l
-2788 5846 l
-2797 5832 l
-2806 5818 l
-2815 5804 l
-2824 5790 l
-2833 5775 l
-2842 5761 l
-2850 5747 l
-2859 5733 l
-2868 5719 l
-2877 5704 l
-2886 5690 l
-2894 5676 l
-2903 5661 l
-2912 5647 l
-2920 5633 l
-2929 5618 l
-2937 5604 l
-2946 5589 l
-2954 5574 l
-2963 5560 l
-2971 5545 l
-2979 5531 l
-2988 5516 l
-2996 5501 l
-3004 5487 l
-3012 5472 l
-3020 5457 l
-3028 5442 l
-3037 5427 l
-3045 5412 l
-3053 5398 l
-3061 5383 l
-3068 5368 l
-3076 5353 l
-3084 5338 l
-3092 5323 l
-3100 5308 l
-3108 5293 l
-3115 5278 l
-3123 5263 l
-3130 5247 l
-3138 5232 l
-3146 5217 l
-3153 5202 l
-3160 5187 l
-3168 5172 l
-3175 5156 l
-3183 5141 l
-3190 5126 l
-3197 5111 l
-3204 5095 l
-3211 5080 l
-3218 5065 l
-3225 5049 l
-3233 5034 l
-3239 5018 l
-3246 5003 l
-3253 4988 l
-3260 4972 l
-3267 4957 l
-3274 4941 l
-3280 4926 l
-3287 4910 l
-3294 4895 l
-3300 4879 l
-3307 4864 l
-3313 4848 l
-3320 4833 l
-3326 4817 l
-3332 4802 l
-3339 4786 l
-3345 4771 l
-3351 4755 l
-3357 4739 l
-3364 4724 l
-3370 4708 l
-3376 4693 l
-3382 4677 l
-3388 4661 l
-3393 4646 l
-3399 4630 l
-3405 4614 l
-3411 4599 l
-3417 4583 l
-3422 4567 l
-3428 4552 l
-3433 4536 l
-3439 4521 l
-3444 4505 l
-3450 4489 l
-3455 4474 l
-3461 4458 l
-3466 4442 l
-3471 4427 l
-3476 4411 l
-3481 4395 l
-3487 4380 l
-3492 4364 l
-3497 4348 l
-3502 4333 l
-3506 4317 l
-3511 4301 l
-3516 4286 l
-3521 4270 l
-3526 4254 l
-3530 4239 l
-3535 4223 l
-3540 4208 l
-3544 4192 l
-3549 4176 l
-3553 4161 l
-3557 4145 l
-3562 4130 l
-3566 4114 l
-3570 4098 l
-3574 4083 l
-3579 4067 l
-3583 4052 l
-3587 4036 l
-3591 4021 l
-3595 4005 l
-3599 3990 l
-3603 3974 l
-3606 3959 l
-3610 3943 l
-3614 3928 l
-3618 3912 l
-3621 3897 l
-3625 3882 l
-3628 3866 l
-3632 3851 l
-3635 3836 l
-3639 3820 l
-3642 3805 l
-3645 3790 l
-3649 3774 l
-3652 3759 l
-3655 3744 l
-3658 3728 l
-3661 3713 l
-3664 3698 l
-3667 3683 l
-3670 3668 l
-3673 3653 l
-3676 3637 l
-3679 3622 l
-3682 3607 l
-3684 3592 l
-3687 3577 l
-3690 3562 l
-3692 3547 l
-3695 3532 l
-3697 3517 l
-3700 3502 l
-3702 3487 l
-3705 3472 l
-3707 3457 l
-3709 3443 l
-3711 3428 l
-3714 3413 l
-3716 3398 l
-3718 3383 l
-3720 3369 l
-3722 3354 l
-3724 3339 l
-3726 3325 l
-3728 3310 l
-3730 3295 l
-3731 3281 l
-3733 3266 l
-3735 3252 l
-3737 3237 l
-3738 3223 l
-3740 3208 l
-3741 3194 l
-3743 3180 l
-3744 3165 l
-3746 3151 l
-S
-3746 3151 m
-3747 3137 l
-3749 3122 l
-3750 3108 l
-3751 3094 l
-3752 3080 l
-3754 3065 l
-3755 3051 l
-3756 3037 l
-3757 3023 l
-3758 3009 l
-3759 2995 l
-3760 2981 l
-3761 2967 l
-3762 2953 l
-3763 2940 l
-3763 2926 l
-3764 2912 l
-3765 2898 l
-3765 2884 l
-3766 2871 l
-3767 2857 l
-3767 2843 l
-3768 2830 l
-3768 2816 l
-3769 2803 l
-3769 2789 l
-3770 2776 l
-3770 2762 l
-3770 2749 l
-3771 2736 l
-3771 2722 l
-3771 2709 l
-3771 2696 l
-3771 2682 l
-3771 2669 l
-3772 2656 l
-3772 2643 l
-3772 2630 l
-3772 2617 l
-3771 2604 l
-3771 2591 l
-3771 2578 l
-3771 2565 l
-3771 2552 l
-3771 2539 l
-3770 2527 l
-3770 2514 l
-3770 2501 l
-3769 2488 l
-3769 2476 l
-3769 2463 l
-3768 2451 l
-3768 2438 l
-3767 2426 l
-3766 2413 l
-3766 2401 l
-3765 2389 l
-3765 2376 l
-3764 2364 l
-3763 2352 l
-3762 2339 l
-3762 2327 l
-3761 2315 l
-3760 2303 l
-3759 2291 l
-3758 2279 l
-3757 2267 l
-3756 2255 l
-3756 2243 l
-3755 2231 l
-3753 2220 l
-3752 2208 l
-3751 2196 l
-3750 2184 l
-3749 2173 l
-3748 2161 l
-3747 2150 l
-3745 2138 l
-3744 2127 l
-3743 2115 l
-3742 2104 l
-3740 2092 l
-3739 2081 l
-3738 2070 l
-3736 2058 l
-3735 2047 l
-3733 2036 l
-3732 2025 l
-3730 2014 l
-3729 2003 l
-3727 1992 l
-3726 1981 l
-3724 1970 l
-3722 1959 l
-3721 1948 l
-3719 1937 l
-3717 1927 l
-3716 1916 l
-3714 1905 l
-3712 1895 l
-3710 1884 l
-3709 1874 l
-3707 1863 l
-3705 1853 l
-3703 1842 l
-3701 1832 l
-3699 1821 l
-3697 1811 l
-3695 1801 l
-3693 1791 l
-3691 1780 l
-3691 1777 l
-S
-1826 1777 m
-1793 1806 l
-1747 1847 l
-1702 1889 l
-1657 1933 l
-1612 1979 l
-1567 2026 l
-1523 2075 l
-1478 2125 l
-1434 2177 l
-1389 2230 l
-1345 2285 l
-1301 2341 l
-1258 2398 l
-1214 2456 l
-1171 2515 l
-1128 2576 l
-1085 2637 l
-1042 2700 l
-1000 2763 l
-958 2827 l
-916 2893 l
-875 2959 l
-834 3025 l
-793 3093 l
-752 3161 l
-712 3230 l
-672 3299 l
-633 3369 l
-594 3439 l
-555 3510 l
-543 3532 l
-S
-2210 6121 m
-2215 6114 l
-2222 6106 l
-2228 6099 l
-2235 6091 l
-2241 6083 l
-2248 6076 l
-2254 6068 l
-2261 6060 l
-2267 6052 l
-2273 6044 l
-2280 6036 l
-2286 6029 l
-2293 6021 l
-2299 6013 l
-2305 6005 l
-2312 5997 l
-2318 5989 l
-2324 5981 l
-2331 5973 l
-2337 5965 l
-2343 5957 l
-2349 5948 l
-2356 5940 l
-2362 5932 l
-2368 5924 l
-2375 5916 l
-2381 5908 l
-2387 5899 l
-2393 5891 l
-2399 5883 l
-2406 5874 l
-2412 5866 l
-2418 5858 l
-2424 5849 l
-2430 5841 l
-2436 5833 l
-2442 5824 l
-2449 5816 l
-2455 5807 l
-2461 5799 l
-2467 5790 l
-2473 5782 l
-2479 5773 l
-2485 5764 l
-2491 5756 l
-2497 5747 l
-2503 5739 l
-2509 5730 l
-2515 5721 l
-2521 5713 l
-2527 5704 l
-2533 5695 l
-2539 5686 l
-2545 5678 l
-2550 5669 l
-2556 5660 l
-2562 5651 l
-2568 5642 l
-2574 5633 l
-2580 5625 l
-2586 5616 l
-2591 5607 l
-2597 5598 l
-2603 5589 l
-2609 5580 l
-2614 5571 l
-2620 5562 l
-2626 5553 l
-2631 5544 l
-2637 5535 l
-2643 5526 l
-2648 5517 l
-2654 5508 l
-2660 5498 l
-2665 5489 l
-2671 5480 l
-2676 5471 l
-2682 5462 l
-2687 5453 l
-2693 5443 l
-2698 5434 l
-2704 5425 l
-2709 5416 l
-2715 5406 l
-2720 5397 l
-2725 5388 l
-2731 5378 l
-2736 5369 l
-2742 5360 l
-2747 5350 l
-2752 5341 l
-2757 5332 l
-2763 5322 l
-2768 5313 l
-2773 5303 l
-2778 5294 l
-2784 5284 l
-2789 5275 l
-2794 5265 l
-2799 5256 l
-2804 5246 l
-2809 5237 l
-2814 5227 l
-2820 5218 l
-2825 5208 l
-2830 5199 l
-2835 5189 l
-2840 5179 l
-2845 5170 l
-2850 5160 l
-2854 5151 l
-2859 5141 l
-2864 5131 l
-2869 5122 l
-2874 5112 l
-2879 5102 l
-2884 5093 l
-2888 5083 l
-2893 5073 l
-2898 5063 l
-2903 5054 l
-2907 5044 l
-2912 5034 l
-2917 5024 l
-2921 5015 l
-2926 5005 l
-2931 4995 l
-2935 4985 l
-2940 4976 l
-2944 4966 l
-2949 4956 l
-2953 4946 l
-2958 4936 l
-2962 4926 l
-2967 4917 l
-2971 4907 l
-2976 4897 l
-2980 4887 l
-2984 4877 l
-2989 4867 l
-2993 4857 l
-2997 4847 l
-3001 4838 l
-3006 4828 l
-3010 4818 l
-3014 4808 l
-3018 4798 l
-3022 4788 l
-3027 4778 l
-3031 4768 l
-3035 4758 l
-3039 4748 l
-3043 4738 l
-3047 4728 l
-3051 4718 l
-3055 4708 l
-3059 4698 l
-3063 4688 l
-3067 4678 l
-3071 4669 l
-3074 4659 l
-3078 4649 l
-3082 4639 l
-3086 4629 l
-3090 4619 l
-3093 4609 l
-3097 4599 l
-3101 4589 l
-3104 4579 l
-3108 4569 l
-3112 4559 l
-3115 4549 l
-3119 4539 l
-3123 4529 l
-3126 4519 l
-3130 4509 l
-3133 4499 l
-3137 4489 l
-3140 4479 l
-3143 4469 l
-3147 4459 l
-3150 4449 l
-3153 4439 l
-3157 4429 l
-3160 4419 l
-3163 4409 l
-3167 4399 l
-3170 4389 l
-3173 4379 l
-3176 4369 l
-3179 4359 l
-3183 4349 l
-3186 4339 l
-3189 4329 l
-3192 4319 l
-3195 4309 l
-3198 4299 l
-3201 4289 l
-3204 4279 l
-S
-3204 4279 m
-3207 4269 l
-3210 4259 l
-3213 4249 l
-3216 4239 l
-3218 4229 l
-3221 4219 l
-3224 4209 l
-3227 4199 l
-3230 4189 l
-3232 4180 l
-3235 4170 l
-3238 4160 l
-3240 4150 l
-3243 4140 l
-3246 4130 l
-3248 4120 l
-3251 4110 l
-3253 4100 l
-3256 4091 l
-3258 4081 l
-3261 4071 l
-3263 4061 l
-3266 4051 l
-3268 4041 l
-3270 4031 l
-3273 4022 l
-3275 4012 l
-3277 4002 l
-3280 3992 l
-3282 3982 l
-3284 3973 l
-3286 3963 l
-3289 3953 l
-3291 3943 l
-3293 3934 l
-3295 3924 l
-3297 3914 l
-3299 3904 l
-3301 3895 l
-3303 3885 l
-3305 3875 l
-3307 3866 l
-3309 3856 l
-3311 3846 l
-3313 3837 l
-3315 3827 l
-3317 3817 l
-3319 3808 l
-3320 3798 l
-3322 3788 l
-3324 3779 l
-3326 3769 l
-3328 3760 l
-3329 3750 l
-3331 3741 l
-3333 3731 l
-3334 3722 l
-3336 3712 l
-3337 3702 l
-3339 3693 l
-3340 3684 l
-3342 3674 l
-3343 3665 l
-3345 3655 l
-3346 3646 l
-3348 3636 l
-3349 3627 l
-3351 3618 l
-3352 3608 l
-3353 3599 l
-3355 3589 l
-3356 3580 l
-3357 3571 l
-3358 3561 l
-3360 3552 l
-3361 3543 l
-3362 3534 l
-3363 3524 l
-3364 3515 l
-3365 3506 l
-3367 3497 l
-3368 3488 l
-3369 3478 l
-3370 3469 l
-3371 3460 l
-3372 3451 l
-3373 3442 l
-3374 3433 l
-3375 3424 l
-3375 3415 l
-3376 3405 l
-3377 3396 l
-3378 3387 l
-3379 3378 l
-3380 3369 l
-3380 3360 l
-3381 3351 l
-3382 3342 l
-3383 3334 l
-3383 3325 l
-3384 3316 l
-3385 3307 l
-3385 3298 l
-3386 3289 l
-3386 3280 l
-3387 3272 l
-3387 3263 l
-3388 3254 l
-3389 3245 l
-3389 3236 l
-3389 3228 l
-3390 3219 l
-3390 3210 l
-3391 3202 l
-3391 3193 l
-3391 3184 l
-3392 3176 l
-3392 3167 l
-3392 3159 l
-3393 3150 l
-3393 3141 l
-3393 3133 l
-3393 3124 l
-3394 3116 l
-3394 3107 l
-3394 3099 l
-3394 3091 l
-3394 3082 l
-3394 3074 l
-3394 3065 l
-3394 3057 l
-3395 3049 l
-3395 3040 l
-3395 3032 l
-3395 3024 l
-3395 3016 l
-3394 3007 l
-3394 2999 l
-3394 2991 l
-3394 2983 l
-3394 2975 l
-3394 2966 l
-3394 2958 l
-3394 2950 l
-3393 2942 l
-3393 2934 l
-3393 2926 l
-3393 2918 l
-3393 2910 l
-3392 2902 l
-3392 2894 l
-3392 2886 l
-3391 2878 l
-3391 2870 l
-3391 2862 l
-3390 2855 l
-3390 2847 l
-3389 2839 l
-3389 2831 l
-3388 2823 l
-3388 2816 l
-3387 2808 l
-3387 2800 l
-3386 2793 l
-3386 2785 l
-3385 2777 l
-3385 2770 l
-3384 2762 l
-3384 2754 l
-3383 2747 l
-3382 2739 l
-3382 2732 l
-3381 2724 l
-3380 2717 l
-3380 2709 l
-3379 2702 l
-3378 2695 l
-3377 2687 l
-3377 2680 l
-3376 2672 l
-3375 2665 l
-3374 2658 l
-3373 2651 l
-3373 2643 l
-3372 2636 l
-3371 2629 l
-3370 2622 l
-3369 2615 l
-3368 2607 l
-3367 2600 l
-3366 2593 l
-3365 2586 l
-3364 2579 l
-3363 2572 l
-3362 2565 l
-3361 2558 l
-3360 2551 l
-3359 2544 l
-3358 2537 l
-S
-3358 2537 m
-3357 2530 l
-3356 2523 l
-3355 2517 l
-3354 2510 l
-3352 2503 l
-3351 2496 l
-3350 2489 l
-3349 2483 l
-3348 2476 l
-3347 2469 l
-3345 2463 l
-3344 2456 l
-3343 2449 l
-3342 2443 l
-3340 2436 l
-3339 2430 l
-3338 2423 l
-3336 2417 l
-3335 2410 l
-3334 2404 l
-3332 2397 l
-3331 2391 l
-3330 2384 l
-3328 2378 l
-3327 2372 l
-3325 2365 l
-3324 2359 l
-3322 2353 l
-3321 2347 l
-3319 2340 l
-3318 2334 l
-3316 2328 l
-3315 2322 l
-3313 2316 l
-3312 2310 l
-3310 2303 l
-3309 2297 l
-3307 2291 l
-3306 2285 l
-3304 2279 l
-3302 2273 l
-3301 2267 l
-3299 2261 l
-3298 2256 l
-3296 2250 l
-3294 2244 l
-3293 2238 l
-3291 2232 l
-3289 2226 l
-3287 2221 l
-3286 2215 l
-3284 2209 l
-3282 2203 l
-3281 2198 l
-3279 2192 l
-3277 2187 l
-3275 2181 l
-3273 2175 l
-3272 2170 l
-3270 2164 l
-3268 2159 l
-3266 2153 l
-3264 2148 l
-3262 2142 l
-3261 2137 l
-3259 2132 l
-3257 2126 l
-3255 2121 l
-3253 2116 l
-3251 2110 l
-3249 2105 l
-3247 2100 l
-3245 2094 l
-3243 2089 l
-3241 2084 l
-3239 2079 l
-3237 2074 l
-3235 2069 l
-3233 2064 l
-3231 2059 l
-3229 2053 l
-3227 2048 l
-3225 2043 l
-3223 2038 l
-3221 2034 l
-3219 2029 l
-3217 2024 l
-3215 2019 l
-3213 2014 l
-3211 2009 l
-3208 2004 l
-3206 1999 l
-3204 1995 l
-3202 1990 l
-3200 1985 l
-3198 1981 l
-3196 1976 l
-3193 1971 l
-3191 1967 l
-3189 1962 l
-3187 1957 l
-3185 1953 l
-3182 1948 l
-3180 1944 l
-3178 1939 l
-3176 1935 l
-3173 1930 l
-3171 1926 l
-3169 1922 l
-3167 1917 l
-3164 1913 l
-3162 1908 l
-3160 1904 l
-3157 1900 l
-3155 1896 l
-3153 1891 l
-3150 1887 l
-3148 1883 l
-3146 1879 l
-3143 1875 l
-3141 1870 l
-3139 1866 l
-3136 1862 l
-3134 1858 l
-3131 1854 l
-3129 1850 l
-3127 1846 l
-3124 1842 l
-3122 1838 l
-3119 1834 l
-3117 1830 l
-3114 1827 l
-3112 1823 l
-3110 1819 l
-3107 1815 l
-3105 1811 l
-3102 1807 l
-3100 1804 l
-3097 1800 l
-3095 1796 l
-3092 1793 l
-3090 1789 l
-3087 1785 l
-3085 1782 l
-3082 1778 l
-3082 1777 l
-S
-2296 2538 m
-2295 2538 l
-2295 2538 l
-2295 2538 l
-2293 2538 l
-2290 2538 l
-2258 2546 l
-2226 2555 l
-2193 2565 l
-2160 2578 l
-2126 2593 l
-2093 2609 l
-2060 2627 l
-2026 2647 l
-1992 2668 l
-1958 2691 l
-1925 2715 l
-1891 2741 l
-1857 2769 l
-1823 2798 l
-1789 2828 l
-1755 2859 l
-1721 2892 l
-1687 2926 l
-1654 2962 l
-1620 2998 l
-1587 3036 l
-1554 3074 l
-1520 3114 l
-1487 3155 l
-1455 3197 l
-1422 3239 l
-1390 3283 l
-1357 3327 l
-1325 3372 l
-1294 3418 l
-1262 3465 l
-1231 3512 l
-1200 3560 l
-1170 3609 l
-1140 3658 l
-1110 3708 l
-1080 3759 l
-1051 3809 l
-1022 3861 l
-994 3912 l
-966 3964 l
-939 4017 l
-912 4070 l
-885 4122 l
-859 4176 l
-834 4229 l
-809 4283 l
-784 4336 l
-760 4390 l
-737 4444 l
-714 4498 l
-692 4552 l
-671 4606 l
-650 4659 l
-630 4713 l
-610 4767 l
-592 4820 l
-574 4873 l
-557 4926 l
-543 4969 l
-S
-1633 6121 m
-1679 6086 l
-1733 6042 l
-1787 5995 l
-1841 5945 l
-1895 5893 l
-1949 5839 l
-2003 5782 l
-2056 5722 l
-2109 5660 l
-2161 5596 l
-2212 5530 l
-2262 5461 l
-2311 5391 l
-2359 5319 l
-2405 5245 l
-2450 5170 l
-2494 5093 l
-2536 5015 l
-2576 4936 l
-2614 4857 l
-2650 4776 l
-2685 4695 l
-2717 4614 l
-2747 4532 l
-2775 4450 l
-2801 4369 l
-2825 4288 l
-2846 4207 l
-2866 4127 l
-2883 4048 l
-2897 3970 l
-2910 3893 l
-2920 3818 l
-2929 3743 l
-2935 3671 l
-2939 3600 l
-2941 3531 l
-2941 3463 l
-2939 3398 l
-2936 3335 l
-2930 3274 l
-2923 3215 l
-2914 3159 l
-2904 3104 l
-2892 3053 l
-2878 3003 l
-2863 2956 l
-2847 2912 l
-2829 2870 l
-2811 2830 l
-2791 2793 l
-2770 2759 l
-2748 2727 l
-2724 2697 l
-2701 2670 l
-2676 2645 l
-2650 2623 l
-2624 2604 l
-2597 2586 l
-2569 2571 l
-2540 2559 l
-2511 2548 l
-2482 2540 l
-2452 2535 l
-2421 2531 l
-2391 2529 l
-2359 2530 l
-2328 2533 l
-2296 2538 l
-S
-2149 3569 m
-2149 3569 l
-2149 3569 l
-2149 3569 l
-2148 3569 l
-2147 3569 l
-2130 3570 l
-2114 3571 l
-2096 3573 l
-2079 3577 l
-2062 3581 l
-2044 3587 l
-2026 3594 l
-2008 3601 l
-1990 3610 l
-1971 3619 l
-1953 3629 l
-1934 3641 l
-1915 3653 l
-1897 3666 l
-1878 3680 l
-1859 3695 l
-1840 3710 l
-1821 3726 l
-1802 3744 l
-1783 3761 l
-1764 3780 l
-1745 3799 l
-1726 3819 l
-1708 3840 l
-1689 3861 l
-1670 3883 l
-1652 3906 l
-1633 3929 l
-1615 3952 l
-1597 3976 l
-1579 4001 l
-1562 4026 l
-1544 4052 l
-1527 4078 l
-1510 4104 l
-1493 4131 l
-1476 4158 l
-1460 4186 l
-1444 4213 l
-1428 4242 l
-1413 4270 l
-1397 4299 l
-1383 4327 l
-1368 4356 l
-1354 4385 l
-1340 4415 l
-1326 4444 l
-1313 4474 l
-1301 4503 l
-1288 4533 l
-1276 4563 l
-1265 4592 l
-1254 4622 l
-1243 4651 l
-1233 4681 l
-1224 4710 l
-1215 4739 l
-1206 4768 l
-1198 4797 l
-1190 4826 l
-1183 4854 l
-1176 4883 l
-1170 4910 l
-1165 4938 l
-1160 4965 l
-1156 4992 l
-1152 5019 l
-1149 5045 l
-1146 5071 l
-1144 5096 l
-1143 5121 l
-1142 5145 l
-1142 5169 l
-1143 5192 l
-1144 5215 l
-1146 5237 l
-1148 5258 l
-1151 5279 l
-1155 5299 l
-1160 5318 l
-1165 5337 l
-1171 5355 l
-1178 5372 l
-1185 5388 l
-1193 5404 l
-1201 5419 l
-1211 5432 l
-1220 5445 l
-1231 5458 l
-1242 5469 l
-1254 5479 l
-1267 5488 l
-1280 5496 l
-1294 5504 l
-1309 5510 l
-1324 5515 l
-1340 5519 l
-1356 5523 l
-1373 5525 l
-1390 5526 l
-1408 5525 l
-1427 5524 l
-1446 5522 l
-1466 5518 l
-1486 5513 l
-1506 5508 l
-1527 5501 l
-1549 5492 l
-1571 5483 l
-1593 5473 l
-1615 5461 l
-1638 5448 l
-1661 5434 l
-1684 5419 l
-1708 5403 l
-1731 5385 l
-1755 5367 l
-1779 5347 l
-1803 5326 l
-1826 5304 l
-1850 5282 l
-1874 5258 l
-1898 5233 l
-1921 5207 l
-1945 5180 l
-1968 5153 l
-1991 5124 l
-2014 5095 l
-2036 5065 l
-2058 5034 l
-2079 5002 l
-2101 4970 l
-2121 4937 l
-2141 4904 l
-2161 4870 l
-2180 4835 l
-2199 4800 l
-2216 4765 l
-2234 4729 l
-2250 4694 l
-2266 4657 l
-2281 4621 l
-2295 4585 l
-2309 4549 l
-2322 4512 l
-2334 4476 l
-2345 4440 l
-2355 4404 l
-2365 4368 l
-2373 4333 l
-2381 4298 l
-2388 4263 l
-2394 4229 l
-2400 4195 l
-2404 4162 l
-2408 4129 l
-2410 4097 l
-2412 4066 l
-2413 4035 l
-2414 4005 l
-2413 3976 l
-2412 3948 l
-2410 3920 l
-2407 3894 l
-2403 3868 l
-2399 3844 l
-2393 3820 l
-2388 3797 l
-2381 3775 l
-2374 3755 l
-2366 3735 l
-2357 3716 l
-2348 3699 l
-2338 3682 l
-2328 3667 l
-2317 3653 l
-2306 3640 l
-2294 3628 l
-2281 3617 l
-2268 3607 l
-2255 3599 l
-2241 3591 l
-2227 3585 l
-2212 3579 l
-2197 3575 l
-2181 3572 l
-2166 3570 l
-2149 3569 l
-S
-0 0 1 rg
-543 1777 m
-853 1777 l
-1164 1777 l
-1474 1777 l
-1784 1777 l
-2094 1777 l
-2405 1777 l
-2715 1777 l
-3025 1777 l
-3335 1777 l
-3646 1777 l
-3956 1777 l
-4266 1777 l
-4288 1777 l
-4310 1777 l
-4333 1777 l
-4355 1777 l
-4377 1777 l
-4399 1777 l
-4421 1777 l
-4443 1777 l
-4466 1777 l
-4488 1777 l
-4489 1777 l
-4491 1777 l
-4492 1777 l
-4494 1777 l
-4496 1777 l
-4497 1777 l
-4499 1777 l
-4500 1777 l
-4502 1777 l
-4502 1777 l
-4502 1777 l
-4502 1777 l
-S
-3299 6121 m
-3299 6121 l
-3299 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3297 6121 l
-3296 6121 l
-3294 6121 l
-3293 6121 l
-3291 6121 l
-3269 6121 l
-3247 6121 l
-3225 6121 l
-3202 6121 l
-3180 6121 l
-3158 6121 l
-3136 6121 l
-3114 6121 l
-3092 6121 l
-3069 6121 l
-3047 6121 l
-3025 6121 l
-2715 6121 l
-2405 6121 l
-2094 6121 l
-1784 6121 l
-1474 6121 l
-1164 6121 l
-853 6121 l
-543 6121 l
-S
-543 6121 m
-543 5811 l
-543 5500 l
-543 5190 l
-543 4880 l
-543 4570 l
-543 4259 l
-543 3949 l
-543 3639 l
-543 3329 l
-543 3018 l
-543 2708 l
-543 2398 l
-543 2088 l
-543 1777 l
-S
-4505 1818 m
-4505 1813 l
-4505 1809 l
-4505 1804 l
-4505 1800 l
-4505 1795 l
-4505 1791 l
-4505 1786 l
-4505 1782 l
-4505 1777 l
-S
-4505 1858 m
-4505 1853 l
-4505 1849 l
-4505 1845 l
-4505 1840 l
-4505 1836 l
-4505 1831 l
-4505 1827 l
-4505 1822 l
-4505 1818 l
-S
-4505 1898 m
-4505 1894 l
-4505 1889 l
-4505 1885 l
-4505 1880 l
-4505 1876 l
-4505 1871 l
-4505 1867 l
-4505 1862 l
-4505 1858 l
-S
-4505 1938 m
-4505 1934 l
-4505 1929 l
-4505 1925 l
-4505 1920 l
-4505 1916 l
-4505 1912 l
-4505 1907 l
-4505 1903 l
-4505 1898 l
-S
-4500 1979 m
-4500 1974 l
-4500 1970 l
-4500 1965 l
-4500 1961 l
-4500 1956 l
-4500 1952 l
-4502 1950 l
-4505 1947 l
-4505 1943 l
-4505 1938 l
-S
-4500 2019 m
-4500 2014 l
-4500 2010 l
-4500 2005 l
-4500 2001 l
-4500 1996 l
-4500 1992 l
-4500 1988 l
-4500 1983 l
-4500 1979 l
-S
-4500 2059 m
-4500 2055 l
-4500 2050 l
-4500 2046 l
-4500 2041 l
-4500 2037 l
-4500 2032 l
-4500 2028 l
-4500 2023 l
-4500 2019 l
-S
-4500 2099 m
-4500 2095 l
-4500 2090 l
-4500 2086 l
-4500 2081 l
-4500 2077 l
-4500 2072 l
-4500 2068 l
-4500 2063 l
-4500 2059 l
-S
-4500 2139 m
-4500 2135 l
-4500 2131 l
-4500 2126 l
-4500 2122 l
-4500 2117 l
-4500 2113 l
-4500 2108 l
-4500 2104 l
-4500 2099 l
-S
-4496 2180 m
-4496 2175 l
-4496 2171 l
-4496 2166 l
-4496 2162 l
-4496 2157 l
-4496 2153 l
-4496 2148 l
-4498 2146 l
-4500 2144 l
-4500 2139 l
-S
-4496 2220 m
-4496 2215 l
-4496 2211 l
-4496 2206 l
-4496 2202 l
-4496 2198 l
-4496 2193 l
-4496 2189 l
-4496 2184 l
-4496 2180 l
-S
-4491 2260 m
-4491 2256 l
-4493 2253 l
-4496 2251 l
-4496 2247 l
-4496 2242 l
-4496 2238 l
-4496 2233 l
-4496 2229 l
-4496 2224 l
-4496 2220 l
-S
-4491 2300 m
-4491 2296 l
-4491 2291 l
-4491 2287 l
-4491 2282 l
-4491 2278 l
-4491 2274 l
-4491 2269 l
-4491 2265 l
-4491 2260 l
-S
-4487 2341 m
-4489 2338 l
-4491 2336 l
-4491 2332 l
-4491 2327 l
-4491 2323 l
-4491 2318 l
-4491 2314 l
-4491 2309 l
-4491 2305 l
-4491 2300 l
-S
-4487 2341 m
-4487 2345 l
-4487 2349 l
-4487 2354 l
-4487 2358 l
-4487 2363 l
-4487 2367 l
-4487 2372 l
-4487 2376 l
-4487 2381 l
-S
-4482 2421 m
-4482 2416 l
-4482 2412 l
-4484 2410 l
-S
-4487 2381 m
-4487 2385 l
-4487 2390 l
-4487 2394 l
-4487 2399 l
-4487 2403 l
-4487 2408 l
-4484 2410 l
-S
-4482 2461 m
-4482 2457 l
-4482 2452 l
-4482 2448 l
-4482 2443 l
-4482 2439 l
-4482 2434 l
-4482 2430 l
-4482 2425 l
-4482 2421 l
-S
-4478 2501 m
-4478 2497 l
-4478 2492 l
-4478 2488 l
-4478 2484 l
-4478 2479 l
-4478 2475 l
-4480 2472 l
-4482 2470 l
-4482 2466 l
-4482 2461 l
-S
-4473 2542 m
-4473 2537 l
-4473 2533 l
-4473 2528 l
-4476 2526 l
-4478 2524 l
-4478 2519 l
-4478 2515 l
-4478 2510 l
-4478 2506 l
-4478 2501 l
-S
-4469 2582 m
-4471 2580 l
-4473 2577 l
-4473 2573 l
-4473 2568 l
-4473 2564 l
-4473 2559 l
-4473 2555 l
-4473 2551 l
-4473 2546 l
-4473 2542 l
-S
-4469 2622 m
-4469 2618 l
-4469 2613 l
-4469 2609 l
-4469 2604 l
-4469 2600 l
-4469 2595 l
-4469 2591 l
-4469 2586 l
-4469 2582 l
-S
-4464 2662 m
-4464 2658 l
-4464 2653 l
-4464 2649 l
-4464 2644 l
-4464 2640 l
-4464 2635 l
-4464 2631 l
-4467 2629 l
-4469 2627 l
-4469 2622 l
-S
-4460 2702 m
-4460 2698 l
-4460 2694 l
-4460 2689 l
-4460 2685 l
-4460 2680 l
-4460 2676 l
-4462 2673 l
-4464 2671 l
-4464 2667 l
-4464 2662 l
-S
-4455 2743 m
-4455 2738 l
-4455 2734 l
-4455 2729 l
-4455 2725 l
-4455 2720 l
-4458 2718 l
-4460 2716 l
-4460 2711 l
-4460 2707 l
-4460 2702 l
-S
-4451 2783 m
-4451 2778 l
-4451 2774 l
-4451 2770 l
-4451 2765 l
-4451 2761 l
-4453 2758 l
-4455 2756 l
-4455 2752 l
-4455 2747 l
-4455 2743 l
-S
-4446 2823 m
-4446 2819 l
-4446 2814 l
-4446 2810 l
-4446 2805 l
-4446 2801 l
-4449 2799 l
-4451 2796 l
-4451 2792 l
-4451 2787 l
-4451 2783 l
-S
-4442 2863 m
-4442 2859 l
-4442 2854 l
-4442 2850 l
-4442 2845 l
-4442 2841 l
-4444 2839 l
-S
-4446 2823 m
-4446 2828 l
-4446 2832 l
-4446 2837 l
-4444 2839 l
-S
-4438 2904 m
-4438 2899 l
-4438 2895 l
-4438 2890 l
-4438 2886 l
-4438 2881 l
-4438 2877 l
-4440 2875 l
-4442 2872 l
-4442 2868 l
-4442 2863 l
-S
-4429 2944 m
-4431 2942 l
-4433 2939 l
-4433 2935 l
-4433 2930 l
-4433 2926 l
-4433 2921 l
-4433 2917 l
-4433 2913 l
-4435 2910 l
-4438 2908 l
-4438 2904 l
-S
-4424 2984 m
-4424 2980 l
-4424 2975 l
-4426 2973 l
-4429 2971 l
-4429 2966 l
-4429 2962 l
-4429 2957 l
-4429 2953 l
-4429 2948 l
-4429 2944 l
-S
-4420 3024 m
-4420 3020 l
-4420 3015 l
-4420 3011 l
-4422 3009 l
-4424 3006 l
-4424 3002 l
-4424 2997 l
-4424 2993 l
-4424 2988 l
-4424 2984 l
-S
-4415 3064 m
-4415 3060 l
-4415 3056 l
-4415 3051 l
-4415 3047 l
-4415 3042 l
-4417 3040 l
-4420 3038 l
-4420 3033 l
-4420 3029 l
-4420 3024 l
-S
-4406 3105 m
-4406 3100 l
-4408 3098 l
-4411 3096 l
-4411 3091 l
-4411 3087 l
-4411 3082 l
-4411 3078 l
-4411 3073 l
-4411 3069 l
-4413 3067 l
-4415 3064 l
-S
-4402 3145 m
-4402 3140 l
-4402 3136 l
-4402 3131 l
-4402 3127 l
-4404 3125 l
-S
-4406 3105 m
-4406 3109 l
-4406 3114 l
-4406 3118 l
-4406 3123 l
-4404 3125 l
-S
-4393 3185 m
-4395 3183 l
-4397 3181 l
-4397 3176 l
-4397 3172 l
-4397 3167 l
-4397 3163 l
-4397 3158 l
-4400 3156 l
-4402 3154 l
-4402 3149 l
-4402 3145 l
-S
-4388 3225 m
-4388 3221 l
-4388 3216 l
-4388 3212 l
-4391 3210 l
-4393 3207 l
-4393 3203 l
-4393 3199 l
-4393 3194 l
-4393 3190 l
-4393 3185 l
-S
-4379 3266 m
-4379 3261 l
-4382 3259 l
-4384 3257 l
-4384 3252 l
-4384 3248 l
-4384 3243 l
-4384 3239 l
-4386 3236 l
-4388 3234 l
-4388 3230 l
-4388 3225 l
-S
-4375 3306 m
-4375 3301 l
-4375 3297 l
-4375 3292 l
-4375 3288 l
-4377 3286 l
-4379 3283 l
-4379 3279 l
-4379 3274 l
-4379 3270 l
-4379 3266 l
-S
-4366 3346 m
-4366 3341 l
-4366 3337 l
-4368 3335 l
-4370 3333 l
-4370 3328 l
-4370 3324 l
-4370 3319 l
-4370 3315 l
-4373 3312 l
-4375 3310 l
-4375 3306 l
-S
-4357 3386 m
-4359 3384 l
-4362 3382 l
-4362 3377 l
-4362 3373 l
-4362 3368 l
-4362 3364 l
-4364 3362 l
-S
-4366 3346 m
-4366 3350 l
-4366 3355 l
-4366 3359 l
-4364 3362 l
-S
-4353 3426 m
-4353 3422 l
-4353 3417 l
-4353 3413 l
-4353 3409 l
-4355 3406 l
-4357 3404 l
-4357 3400 l
-4357 3395 l
-4357 3391 l
-4357 3386 l
-S
-4344 3467 m
-4344 3462 l
-4344 3458 l
-4344 3453 l
-4346 3451 l
-4348 3449 l
-4348 3444 l
-4348 3440 l
-4348 3435 l
-4348 3431 l
-4350 3429 l
-4353 3426 l
-S
-4335 3507 m
-4335 3502 l
-4335 3498 l
-4337 3496 l
-4339 3493 l
-4339 3489 l
-4339 3484 l
-4339 3480 l
-4339 3476 l
-4341 3473 l
-4344 3471 l
-4344 3467 l
-S
-4326 3547 m
-4326 3543 l
-4328 3540 l
-4330 3538 l
-4330 3534 l
-4330 3529 l
-4330 3525 l
-4330 3520 l
-4333 3518 l
-4335 3516 l
-4335 3511 l
-4335 3507 l
-S
-4317 3587 m
-4317 3583 l
-4319 3581 l
-4321 3578 l
-4321 3574 l
-4321 3569 l
-4321 3565 l
-4324 3563 l
-S
-4326 3547 m
-4326 3552 l
-4326 3556 l
-4326 3560 l
-4324 3563 l
-S
-4308 3627 m
-4308 3623 l
-4310 3621 l
-4312 3619 l
-4312 3614 l
-4312 3610 l
-4312 3605 l
-4315 3603 l
-4317 3601 l
-4317 3596 l
-4317 3592 l
-4317 3587 l
-S
-4299 3668 m
-4299 3663 l
-4301 3661 l
-4303 3659 l
-4303 3654 l
-4303 3650 l
-4303 3645 l
-4306 3643 l
-4308 3641 l
-4308 3636 l
-4308 3632 l
-4308 3627 l
-S
-4290 3708 m
-4290 3703 l
-4292 3701 l
-4295 3699 l
-4295 3695 l
-4295 3690 l
-4295 3686 l
-4297 3683 l
-4299 3681 l
-4299 3677 l
-4299 3672 l
-4299 3668 l
-S
-4281 3748 m
-4281 3744 l
-4281 3739 l
-4283 3737 l
-S
-4283 3737 m
-4286 3735 l
-4286 3730 l
-4286 3726 l
-4286 3721 l
-4288 3719 l
-4290 3717 l
-4290 3712 l
-4290 3708 l
-S
-4272 3788 m
-4272 3784 l
-4272 3779 l
-4274 3777 l
-4277 3775 l
-4277 3770 l
-4277 3766 l
-4277 3762 l
-4279 3759 l
-4281 3757 l
-4281 3753 l
-4281 3748 l
-S
-4263 3829 m
-4263 3824 l
-4263 3820 l
-4263 3815 l
-4265 3813 l
-4268 3811 l
-4268 3806 l
-4268 3802 l
-4268 3797 l
-4270 3795 l
-4272 3793 l
-4272 3788 l
-S
-4250 3869 m
-4252 3867 l
-4254 3864 l
-4254 3860 l
-4254 3855 l
-4254 3851 l
-4257 3849 l
-4259 3846 l
-4259 3842 l
-4259 3838 l
-4259 3833 l
-4261 3831 l
-4263 3829 l
-S
-4241 3909 m
-4241 3905 l
-4243 3902 l
-S
-4243 3902 m
-4245 3900 l
-4245 3896 l
-4245 3891 l
-4245 3887 l
-4248 3884 l
-4250 3882 l
-4250 3878 l
-4250 3873 l
-4250 3869 l
-S
-4232 3949 m
-4232 3945 l
-4232 3940 l
-4232 3936 l
-4234 3934 l
-4236 3931 l
-4236 3927 l
-4236 3922 l
-4239 3920 l
-4241 3918 l
-4241 3913 l
-4241 3909 l
-S
-4219 3989 m
-4221 3987 l
-4223 3985 l
-4223 3981 l
-4223 3976 l
-4223 3972 l
-4225 3969 l
-4228 3967 l
-4228 3963 l
-4228 3958 l
-4228 3954 l
-4230 3951 l
-4232 3949 l
-S
-4210 4030 m
-4210 4025 l
-4210 4021 l
-4212 4018 l
-4214 4016 l
-4214 4012 l
-4214 4007 l
-4214 4003 l
-4216 4001 l
-4219 3998 l
-4219 3994 l
-4219 3989 l
-S
-4196 4070 m
-4198 4068 l
-4201 4065 l
-4201 4061 l
-4201 4056 l
-4201 4052 l
-4203 4050 l
-S
-4203 4050 m
-4205 4048 l
-4205 4043 l
-4205 4039 l
-4207 4036 l
-4210 4034 l
-4210 4030 l
-S
-4187 4110 m
-4187 4106 l
-4187 4101 l
-4190 4099 l
-4192 4097 l
-4192 4092 l
-4192 4088 l
-4192 4083 l
-4194 4081 l
-4196 4079 l
-4196 4074 l
-4196 4070 l
-S
-4174 4150 m
-4174 4146 l
-4176 4144 l
-4178 4141 l
-4178 4137 l
-4178 4132 l
-4181 4130 l
-4183 4128 l
-4183 4124 l
-4183 4119 l
-4183 4115 l
-4185 4112 l
-4187 4110 l
-S
-4160 4191 m
-4163 4188 l
-S
-4163 4188 m
-4165 4186 l
-4165 4182 l
-4165 4177 l
-4167 4175 l
-4169 4173 l
-4169 4168 l
-4169 4164 l
-4172 4161 l
-4174 4159 l
-4174 4155 l
-4174 4150 l
-S
-4152 4231 m
-4152 4226 l
-4152 4222 l
-4154 4220 l
-4156 4217 l
-4156 4213 l
-4156 4208 l
-4158 4206 l
-4160 4204 l
-4160 4199 l
-4160 4195 l
-4160 4191 l
-S
-4138 4271 m
-4138 4266 l
-4140 4264 l
-4143 4262 l
-4143 4258 l
-4143 4253 l
-4145 4251 l
-4147 4249 l
-4147 4244 l
-4147 4240 l
-4147 4235 l
-4149 4233 l
-4152 4231 l
-S
-4125 4311 m
-4125 4307 l
-4127 4304 l
-4129 4302 l
-4129 4298 l
-4129 4293 l
-4131 4291 l
-4134 4289 l
-4134 4284 l
-4134 4280 l
-4136 4278 l
-4138 4275 l
-4138 4271 l
-S
-4111 4351 m
-4114 4349 l
-4116 4347 l
-4116 4342 l
-4116 4338 l
-4118 4336 l
-4120 4334 l
-4120 4329 l
-4120 4325 l
-4122 4322 l
-S
-4125 4311 m
-4125 4316 l
-4125 4320 l
-4122 4322 l
-S
-4098 4392 m
-4100 4389 l
-4102 4387 l
-4102 4383 l
-4102 4378 l
-4105 4376 l
-4107 4374 l
-4107 4369 l
-4107 4365 l
-4109 4363 l
-4111 4360 l
-4111 4356 l
-4111 4351 l
-S
-4085 4432 m
-4087 4430 l
-4089 4427 l
-4089 4423 l
-4089 4418 l
-4091 4416 l
-4093 4414 l
-4093 4409 l
-4093 4405 l
-4096 4403 l
-4098 4401 l
-4098 4396 l
-4098 4392 l
-S
-4071 4472 m
-4073 4470 l
-4076 4468 l
-4076 4463 l
-4076 4459 l
-4078 4456 l
-4080 4454 l
-4080 4450 l
-4080 4445 l
-4082 4443 l
-S
-4085 4432 m
-4085 4436 l
-4085 4441 l
-4082 4443 l
-S
-4058 4512 m
-4060 4510 l
-4062 4508 l
-4062 4503 l
-4062 4499 l
-4064 4497 l
-4067 4494 l
-4067 4490 l
-4067 4485 l
-4069 4483 l
-4071 4481 l
-4071 4477 l
-4071 4472 l
-S
-4044 4552 m
-4047 4550 l
-4049 4548 l
-4049 4544 l
-4049 4539 l
-4051 4537 l
-4053 4535 l
-4053 4530 l
-4053 4526 l
-4055 4523 l
-4058 4521 l
-4058 4517 l
-4058 4512 l
-S
-4031 4593 m
-4031 4588 l
-4033 4586 l
-4035 4584 l
-4035 4579 l
-4035 4575 l
-4038 4573 l
-4040 4570 l
-4040 4566 l
-4040 4561 l
-4042 4559 l
-S
-4044 4552 m
-4044 4557 l
-4042 4559 l
-S
-4017 4633 m
-4017 4628 l
-4017 4624 l
-4020 4622 l
-4022 4620 l
-4022 4615 l
-4024 4613 l
-4026 4611 l
-4026 4606 l
-4026 4602 l
-4029 4599 l
-4031 4597 l
-4031 4593 l
-S
-4000 4673 m
-4002 4671 l
-S
-4002 4671 m
-4004 4669 l
-4004 4664 l
-4006 4662 l
-4009 4660 l
-4009 4655 l
-4009 4651 l
-4011 4649 l
-4013 4646 l
-4013 4642 l
-4013 4637 l
-4015 4635 l
-4017 4633 l
-S
-3986 4713 m
-3988 4711 l
-3991 4709 l
-3991 4704 l
-3991 4700 l
-3993 4698 l
-3995 4695 l
-3995 4691 l
-3995 4687 l
-3997 4684 l
-4000 4682 l
-4000 4678 l
-4000 4673 l
-S
-3973 4754 m
-3973 4749 l
-3973 4745 l
-3975 4742 l
-3977 4740 l
-3977 4736 l
-3979 4733 l
-3982 4731 l
-3982 4727 l
-3982 4722 l
-3984 4720 l
-3986 4718 l
-3986 4713 l
-S
-3955 4794 m
-3957 4792 l
-3959 4789 l
-3959 4785 l
-3959 4780 l
-3962 4778 l
-S
-3962 4778 m
-3964 4776 l
-3964 4771 l
-3966 4769 l
-3968 4767 l
-3968 4763 l
-3968 4758 l
-3971 4756 l
-3973 4754 l
-S
-3942 4834 m
-3942 4830 l
-3944 4827 l
-3946 4825 l
-3946 4821 l
-3946 4816 l
-3948 4814 l
-3950 4812 l
-3950 4807 l
-3953 4805 l
-3955 4803 l
-3955 4798 l
-3955 4794 l
-S
-3924 4874 m
-3926 4872 l
-3928 4870 l
-3928 4865 l
-3928 4861 l
-3930 4859 l
-3933 4856 l
-3933 4852 l
-3935 4850 l
-3937 4847 l
-3937 4843 l
-3937 4838 l
-3939 4836 l
-3942 4834 l
-S
-3910 4914 m
-3910 4910 l
-3910 4906 l
-3912 4903 l
-3915 4901 l
-3915 4897 l
-3917 4894 l
-3919 4892 l
-3919 4888 l
-3919 4883 l
-3921 4881 l
-S
-3924 4874 m
-3924 4879 l
-3921 4881 l
-S
-3892 4955 m
-3892 4950 l
-3895 4948 l
-3897 4946 l
-3897 4941 l
-3899 4939 l
-3901 4937 l
-3901 4932 l
-3901 4928 l
-3904 4926 l
-3906 4923 l
-3906 4919 l
-3908 4917 l
-3910 4914 l
-S
-3874 4995 m
-3877 4993 l
-3879 4990 l
-3879 4986 l
-3879 4981 l
-3881 4979 l
-S
-3881 4979 m
-3883 4977 l
-3883 4973 l
-3886 4970 l
-3888 4968 l
-3888 4964 l
-3890 4961 l
-3892 4959 l
-3892 4955 l
-S
-3857 5035 m
-3859 5033 l
-3861 5031 l
-3861 5026 l
-3863 5024 l
-3866 5022 l
-3866 5017 l
-3868 5015 l
-3870 5013 l
-3870 5008 l
-3870 5004 l
-3872 5002 l
-3874 4999 l
-3874 4995 l
-S
-3843 5075 m
-3843 5071 l
-3843 5066 l
-3845 5064 l
-3848 5062 l
-3848 5057 l
-3850 5055 l
-3852 5053 l
-3852 5049 l
-3854 5046 l
-3857 5044 l
-3857 5040 l
-3857 5035 l
-S
-3825 5116 m
-3825 5111 l
-3828 5109 l
-3830 5107 l
-3830 5102 l
-3830 5098 l
-3832 5095 l
-3834 5093 l
-3834 5089 l
-3836 5086 l
-3839 5084 l
-3839 5080 l
-3841 5078 l
-S
-3843 5075 m
-3841 5078 l
-S
-3807 5156 m
-3807 5151 l
-3810 5149 l
-3812 5147 l
-3812 5142 l
-3812 5138 l
-3814 5136 l
-3816 5133 l
-3816 5129 l
-3819 5127 l
-3821 5124 l
-3821 5120 l
-3823 5118 l
-3825 5116 l
-S
-3790 5196 m
-3790 5191 l
-3792 5189 l
-3794 5187 l
-3794 5183 l
-3796 5180 l
-3799 5178 l
-3799 5174 l
-3799 5169 l
-3801 5167 l
-S
-3801 5167 m
-3803 5165 l
-3803 5160 l
-3805 5158 l
-3807 5156 l
-S
-3772 5236 m
-3772 5232 l
-3774 5229 l
-3776 5227 l
-3776 5223 l
-3776 5218 l
-3778 5216 l
-3781 5214 l
-3781 5209 l
-3783 5207 l
-3785 5205 l
-3785 5200 l
-3787 5198 l
-3790 5196 l
-S
-3754 5276 m
-3754 5272 l
-3754 5267 l
-3756 5265 l
-3758 5263 l
-3758 5259 l
-3761 5256 l
-S
-3761 5256 m
-3763 5254 l
-3763 5250 l
-3765 5247 l
-3767 5245 l
-3767 5241 l
-3769 5238 l
-3772 5236 l
-S
-3731 5317 m
-3734 5314 l
-3736 5312 l
-3736 5308 l
-3738 5305 l
-3740 5303 l
-3740 5299 l
-3743 5297 l
-3745 5294 l
-3745 5290 l
-3747 5288 l
-3749 5285 l
-3749 5281 l
-3752 5279 l
-3754 5276 l
-S
-3714 5357 m
-3716 5355 l
-3718 5352 l
-3718 5348 l
-3718 5343 l
-3720 5341 l
-S
-3720 5341 m
-3723 5339 l
-3723 5334 l
-3725 5332 l
-3727 5330 l
-3727 5326 l
-3729 5323 l
-3731 5321 l
-3731 5317 l
-S
-3696 5397 m
-3696 5393 l
-3698 5390 l
-3700 5388 l
-3700 5384 l
-3702 5381 l
-3705 5379 l
-3705 5375 l
-3707 5372 l
-3709 5370 l
-3709 5366 l
-3711 5364 l
-3714 5361 l
-3714 5357 l
-S
-3673 5437 m
-3676 5435 l
-3678 5433 l
-3678 5428 l
-3680 5426 l
-S
-3680 5426 m
-3682 5424 l
-3682 5419 l
-3685 5417 l
-3687 5415 l
-3687 5410 l
-3689 5408 l
-3691 5406 l
-3691 5402 l
-3694 5399 l
-3696 5397 l
-S
-3656 5477 m
-3656 5473 l
-3658 5471 l
-3660 5469 l
-3660 5464 l
-3662 5462 l
-3664 5460 l
-3664 5455 l
-3667 5453 l
-3669 5451 l
-3669 5446 l
-3671 5444 l
-3673 5442 l
-3673 5437 l
-S
-3633 5518 m
-3635 5515 l
-3638 5513 l
-3638 5509 l
-3640 5507 l
-S
-3640 5507 m
-3642 5504 l
-3642 5500 l
-3644 5498 l
-3647 5495 l
-3647 5491 l
-3649 5489 l
-3651 5486 l
-3651 5482 l
-3653 5480 l
-3656 5477 l
-S
-3615 5558 m
-3615 5553 l
-3618 5551 l
-3620 5549 l
-3620 5545 l
-3622 5542 l
-3624 5540 l
-3624 5536 l
-3626 5533 l
-3629 5531 l
-3629 5527 l
-3631 5524 l
-3633 5522 l
-3633 5518 l
-S
-3593 5598 m
-3595 5596 l
-3597 5594 l
-3597 5589 l
-3600 5587 l
-S
-3600 5587 m
-3602 5585 l
-3602 5580 l
-3604 5578 l
-3606 5576 l
-3606 5571 l
-3609 5569 l
-3611 5567 l
-3611 5562 l
-3613 5560 l
-3615 5558 l
-S
-3575 5638 m
-3575 5634 l
-3577 5632 l
-3580 5629 l
-3580 5625 l
-3582 5623 l
-3584 5620 l
-3584 5616 l
-3586 5614 l
-3588 5612 l
-3588 5607 l
-3591 5605 l
-3593 5603 l
-3593 5598 l
-S
-3553 5679 m
-3553 5674 l
-3555 5672 l
-3557 5670 l
-3557 5665 l
-3559 5663 l
-S
-3559 5663 m
-3562 5661 l
-3562 5656 l
-3564 5654 l
-3566 5652 l
-3568 5650 l
-3571 5647 l
-3571 5643 l
-3573 5641 l
-3575 5638 l
-S
-3530 5719 m
-3533 5717 l
-3535 5714 l
-3535 5710 l
-3537 5708 l
-3539 5705 l
-3539 5701 l
-3542 5699 l
-3544 5696 l
-3544 5692 l
-3546 5690 l
-3548 5688 l
-3548 5683 l
-3551 5681 l
-3553 5679 l
-S
-3508 5759 m
-3510 5757 l
-3513 5755 l
-3513 5750 l
-3515 5748 l
-3517 5746 l
-3517 5741 l
-3519 5739 l
-S
-3519 5739 m
-3521 5737 l
-3521 5732 l
-3524 5730 l
-3526 5728 l
-3526 5723 l
-3528 5721 l
-3530 5719 l
-S
-3486 5799 m
-3488 5797 l
-3490 5795 l
-3490 5790 l
-3492 5788 l
-3495 5786 l
-3495 5781 l
-3497 5779 l
-3499 5777 l
-3499 5772 l
-3501 5770 l
-3504 5768 l
-3506 5766 l
-3508 5763 l
-3508 5759 l
-S
-3463 5839 m
-3466 5837 l
-3468 5835 l
-3468 5831 l
-3470 5828 l
-3472 5826 l
-3472 5822 l
-3475 5819 l
-3477 5817 l
-3479 5815 l
-S
-3479 5815 m
-3481 5813 l
-3481 5808 l
-3483 5806 l
-3486 5804 l
-3486 5799 l
-S
-3441 5880 m
-3443 5877 l
-3445 5875 l
-3445 5871 l
-3448 5868 l
-3450 5866 l
-3450 5862 l
-3452 5860 l
-3454 5857 l
-3454 5853 l
-3457 5851 l
-3459 5848 l
-3461 5846 l
-3463 5844 l
-3463 5839 l
-S
-3419 5920 m
-3421 5918 l
-3423 5915 l
-3423 5911 l
-3425 5909 l
-3428 5906 l
-3428 5902 l
-3430 5900 l
-3432 5898 l
-3432 5893 l
-3434 5891 l
-3437 5889 l
-3439 5886 l
-S
-3441 5880 m
-3441 5884 l
-3439 5886 l
-S
-3396 5960 m
-3396 5956 l
-3399 5953 l
-S
-3399 5953 m
-3401 5951 l
-3401 5947 l
-3403 5944 l
-3405 5942 l
-3408 5940 l
-3410 5938 l
-3410 5933 l
-3412 5931 l
-3414 5929 l
-3414 5924 l
-3416 5922 l
-3419 5920 l
-S
-3370 6000 m
-3372 5998 l
-3374 5996 l
-3376 5994 l
-3378 5991 l
-3378 5987 l
-3381 5985 l
-3383 5982 l
-3383 5978 l
-3385 5976 l
-3387 5974 l
-3390 5971 l
-3392 5969 l
-3392 5965 l
-3394 5962 l
-3396 5960 l
-S
-3347 6041 m
-3349 6038 l
-3352 6036 l
-3352 6032 l
-3354 6029 l
-3356 6027 l
-3356 6023 l
-3358 6020 l
-S
-3358 6020 m
-3361 6018 l
-3363 6016 l
-3365 6014 l
-3365 6009 l
-3367 6007 l
-3370 6005 l
-3370 6000 l
-S
-3325 6081 m
-3325 6076 l
-3327 6074 l
-3329 6072 l
-3329 6067 l
-3332 6065 l
-3334 6063 l
-3336 6061 l
-3338 6058 l
-3338 6054 l
-3340 6052 l
-3343 6049 l
-3345 6047 l
-3347 6045 l
-3347 6041 l
-S
-3298 6121 m
-3300 6119 l
-3303 6116 l
-3303 6112 l
-3305 6110 l
-3307 6108 l
-3309 6105 l
-3311 6103 l
-3311 6099 l
-3314 6096 l
-3316 6094 l
-3316 6090 l
-3318 6087 l
-S
-3318 6087 m
-3320 6085 l
-3323 6083 l
-3325 6081 l
-S
-1 g
-Y
-2232.6 1612.9 m
-2233 1734 l
-2333 1734 l
-2333 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2279 1717 m
-2266 1713 l
-2258 1701 l
-2253 1680 l
-2253 1667 l
-2258 1646 l
-2266 1634 l
-2279 1630 l
-2287 1630 l
-2299 1634 l
-2308 1646 l
-2312 1667 l
-2312 1680 l
-2308 1701 l
-2299 1713 l
-2287 1717 l
-2279 1717 l
-S
-1 g
-Y
-1873.8 1612.9 m
-1874 1734 l
-1936 1734 l
-1936 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-1895 1701 m
-1903 1705 l
-1916 1717 l
-1916 1630 l
-S
-1 g
-Y
-1382.7 1612.9 m
-1383 1734 l
-1483 1734 l
-1483 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-1408 1696 m
-1408 1701 l
-1412 1709 l
-1416 1713 l
-1424 1717 l
-1441 1717 l
-1450 1713 l
-1454 1709 l
-1458 1701 l
-1458 1692 l
-1454 1684 l
-1445 1671 l
-1404 1630 l
-1462 1630 l
-S
-1 g
-Y
-682.1 1612.9 m
-682 1734 l
-782 1734 l
-782 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-711 1717 m
-757 1717 l
-732 1684 l
-745 1684 l
-753 1680 l
-757 1676 l
-761 1663 l
-761 1655 l
-757 1642 l
-749 1634 l
-736 1630 l
-724 1630 l
-711 1634 l
-707 1638 l
-703 1646 l
-S
-1 g
-Y
-2514.3 1612.9 m
-2514 1734 l
-2698 1734 l
-2698 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2539 1696 m
-2539 1701 l
-2544 1709 l
-2548 1713 l
-2556 1717 l
-2573 1717 l
-2581 1713 l
-2585 1709 l
-2589 1701 l
-2589 1692 l
-2585 1684 l
-2577 1671 l
-2535 1630 l
-2594 1630 l
-S
-2627 1717 m
-2673 1717 l
-2648 1684 l
-2660 1684 l
-2669 1680 l
-2673 1676 l
-2677 1663 l
-2677 1655 l
-2673 1642 l
-2665 1634 l
-2652 1630 l
-2640 1630 l
-2627 1634 l
-2623 1638 l
-2619 1646 l
-S
-1 g
-Y
-2826.8 1612.9 m
-2827 1734 l
-3011 1734 l
-3011 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2852 1696 m
-2852 1701 l
-2856 1709 l
-2860 1713 l
-2869 1717 l
-2885 1717 l
-2894 1713 l
-2898 1709 l
-2902 1701 l
-2902 1692 l
-2898 1684 l
-2889 1671 l
-2848 1630 l
-2906 1630 l
-S
-2935 1696 m
-2935 1701 l
-2940 1709 l
-2944 1713 l
-2952 1717 l
-2969 1717 l
-2977 1713 l
-2981 1709 l
-2985 1701 l
-2985 1692 l
-2981 1684 l
-2973 1671 l
-2931 1630 l
-2990 1630 l
-S
-1 g
-Y
-3158.7 1612.9 m
-3159 1734 l
-3317 1734 l
-3317 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-3184 1696 m
-3184 1701 l
-3188 1709 l
-3192 1713 l
-3200 1717 l
-3217 1717 l
-3226 1713 l
-3230 1709 l
-3234 1701 l
-3234 1692 l
-3230 1684 l
-3221 1671 l
-3180 1630 l
-3238 1630 l
-S
-3276 1701 m
-3284 1705 l
-3297 1717 l
-3297 1630 l
-S
-1 g
-Y
-3539 1612.9 m
-3539 1734 l
-3723 1734 l
-3723 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-3564 1696 m
-3564 1701 l
-3568 1709 l
-3572 1713 l
-3581 1717 l
-3597 1717 l
-3606 1713 l
-3610 1709 l
-3614 1701 l
-3614 1692 l
-3610 1684 l
-3602 1671 l
-3560 1630 l
-3618 1630 l
-S
-3668 1717 m
-3656 1713 l
-3648 1701 l
-3643 1680 l
-3643 1667 l
-3648 1646 l
-3656 1634 l
-3668 1630 l
-3677 1630 l
-3689 1634 l
-3698 1646 l
-3702 1667 l
-3702 1680 l
-3698 1701 l
-3689 1713 l
-3677 1717 l
-3668 1717 l
-S
-1 g
-Y
-3992.1 1612.9 m
-3992 1734 l
-4159 1734 l
-4159 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-4013 1701 m
-4021 1705 l
-4034 1717 l
-4034 1630 l
-S
-4138 1688 m
-4134 1676 l
-4126 1667 l
-4113 1663 l
-4109 1663 l
-4097 1667 l
-4088 1676 l
-4084 1688 l
-4084 1692 l
-4088 1705 l
-4097 1713 l
-4109 1717 l
-4113 1717 l
-4126 1713 l
-4134 1705 l
-4138 1688 l
-4138 1667 l
-4134 1646 l
-4126 1634 l
-4113 1630 l
-4105 1630 l
-4092 1634 l
-4088 1642 l
-S
-1 g
-Y
-4375 1612.9 m
-4375 1734 l
-4546 1734 l
-4546 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-4396 1701 m
-4404 1705 l
-4417 1717 l
-4417 1630 l
-S
-4488 1717 m
-4475 1713 l
-4471 1705 l
-4471 1696 l
-4475 1688 l
-4484 1684 l
-4500 1680 l
-4513 1676 l
-4521 1667 l
-4525 1659 l
-4525 1646 l
-4521 1638 l
-4517 1634 l
-4504 1630 l
-4488 1630 l
-4475 1634 l
-4471 1638 l
-4467 1646 l
-4467 1659 l
-4471 1667 l
-4479 1676 l
-4492 1680 l
-4509 1684 l
-4517 1688 l
-4521 1696 l
-4521 1705 l
-4517 1713 l
-4504 1717 l
-4488 1717 l
-S
-1 g
-Y
-324.3 2215.9 m
-324 2337 l
-508 2337 l
-508 2216 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-395 2320 m
-354 2320 l
-349 2283 l
-354 2287 l
-366 2291 l
-379 2291 l
-391 2287 l
-399 2279 l
-404 2266 l
-404 2258 l
-399 2245 l
-391 2237 l
-379 2233 l
-366 2233 l
-354 2237 l
-349 2241 l
-345 2249 l
-S
-454 2320 m
-441 2316 l
-433 2304 l
-429 2283 l
-429 2270 l
-433 2249 l
-441 2237 l
-454 2233 l
-462 2233 l
-475 2237 l
-483 2249 l
-487 2270 l
-487 2283 l
-483 2304 l
-475 2316 l
-462 2320 l
-454 2320 l
-S
-1 g
-Y
-328.5 3463.3 m
-328 3584 l
-508 3584 l
-508 3463 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-399 3555 m
-395 3564 l
-383 3568 l
-374 3568 l
-362 3564 l
-354 3551 l
-349 3530 l
-349 3509 l
-354 3493 l
-362 3484 l
-374 3480 l
-379 3480 l
-391 3484 l
-399 3493 l
-404 3505 l
-404 3509 l
-399 3522 l
-391 3530 l
-379 3534 l
-374 3534 l
-362 3530 l
-354 3522 l
-349 3509 l
-S
-454 3568 m
-441 3564 l
-433 3551 l
-429 3530 l
-429 3518 l
-433 3497 l
-441 3484 l
-454 3480 l
-462 3480 l
-475 3484 l
-483 3497 l
-487 3518 l
-487 3530 l
-483 3551 l
-475 3564 l
-462 3568 l
-454 3568 l
-S
-1 g
-Y
-324.3 4900 m
-324 5021 l
-508 5021 l
-508 4900 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-404 5004 m
-362 4917 l
-S
-345 5004 m
-404 5004 l
-S
-454 5004 m
-441 5000 l
-433 4988 l
-429 4967 l
-429 4954 l
-433 4933 l
-441 4921 l
-454 4917 l
-462 4917 l
-475 4921 l
-483 4933 l
-487 4954 l
-487 4967 l
-483 4988 l
-475 5000 l
-462 5004 l
-454 5004 l
-S
-1 g
-Y
-2021.5 1398.2 m
-2022 1553 l
-3070 1553 l
-3070 1398 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2042 1532 m
-2042 1444 l
-S
-2042 1532 m
-2080 1532 l
-2093 1528 l
-2097 1524 l
-2101 1515 l
-2101 1507 l
-2097 1498 l
-2093 1494 l
-2080 1490 l
-2042 1490 l
-S
-2072 1490 m
-2101 1444 l
-S
-2126 1532 m
-2130 1528 l
-2134 1532 l
-2130 1536 l
-2126 1532 l
-S
-2130 1503 m
-2130 1444 l
-S
-2209 1503 m
-2209 1436 l
-2205 1423 l
-2201 1419 l
-2193 1415 l
-2180 1415 l
-2172 1419 l
-S
-2209 1490 m
-2201 1498 l
-2193 1503 l
-2180 1503 l
-2172 1498 l
-2164 1490 l
-2159 1478 l
-2159 1469 l
-2164 1457 l
-2172 1448 l
-2180 1444 l
-2193 1444 l
-2201 1448 l
-2209 1457 l
-S
-2243 1532 m
-2243 1444 l
-S
-2243 1486 m
-2255 1498 l
-2264 1503 l
-2276 1503 l
-2285 1498 l
-2289 1486 l
-2289 1444 l
-S
-2326 1532 m
-2326 1461 l
-2331 1448 l
-2339 1444 l
-2347 1444 l
-S
-2314 1503 m
-2343 1503 l
-S
-2485 1503 m
-2485 1444 l
-S
-2485 1490 m
-2477 1498 l
-2468 1503 l
-2456 1503 l
-2448 1498 l
-2439 1490 l
-2435 1478 l
-2435 1469 l
-2439 1457 l
-2448 1448 l
-2456 1444 l
-2468 1444 l
-2477 1448 l
-2485 1457 l
-S
-2560 1490 m
-2556 1498 l
-2544 1503 l
-2531 1503 l
-2519 1498 l
-2514 1490 l
-2519 1482 l
-2527 1478 l
-2548 1473 l
-2556 1469 l
-2560 1461 l
-2560 1457 l
-2556 1448 l
-2544 1444 l
-2531 1444 l
-2519 1448 l
-2514 1457 l
-S
-2636 1490 m
-2627 1498 l
-2619 1503 l
-2606 1503 l
-2598 1498 l
-2590 1490 l
-2585 1478 l
-2585 1469 l
-2590 1457 l
-2598 1448 l
-2606 1444 l
-2619 1444 l
-2627 1448 l
-2636 1457 l
-S
-2661 1478 m
-2711 1478 l
-2711 1486 l
-2707 1494 l
-2702 1498 l
-2694 1503 l
-2681 1503 l
-2673 1498 l
-2665 1490 l
-2661 1478 l
-2661 1469 l
-2665 1457 l
-2673 1448 l
-2681 1444 l
-2694 1444 l
-2702 1448 l
-2711 1457 l
-S
-2740 1503 m
-2740 1444 l
-S
-2740 1486 m
-2752 1498 l
-2761 1503 l
-2773 1503 l
-2782 1498 l
-2786 1486 l
-2786 1444 l
-S
-2861 1490 m
-2857 1498 l
-2844 1503 l
-2832 1503 l
-2819 1498 l
-2815 1490 l
-2819 1482 l
-2828 1478 l
-2849 1473 l
-2857 1469 l
-2861 1461 l
-2861 1457 l
-2857 1448 l
-2844 1444 l
-2832 1444 l
-2819 1448 l
-2815 1457 l
-S
-2886 1532 m
-2890 1528 l
-2894 1532 l
-2890 1536 l
-2886 1532 l
-S
-2890 1503 m
-2890 1444 l
-S
-2940 1503 m
-2932 1498 l
-2924 1490 l
-2920 1478 l
-2920 1469 l
-2924 1457 l
-2932 1448 l
-2940 1444 l
-2953 1444 l
-2961 1448 l
-2970 1457 l
-2974 1469 l
-2974 1478 l
-2970 1490 l
-2961 1498 l
-2953 1503 l
-2940 1503 l
-S
-3003 1503 m
-3003 1444 l
-S
-3003 1486 m
-3016 1498 l
-3024 1503 l
-3036 1503 l
-3045 1498 l
-3049 1486 l
-3049 1444 l
-S
-1 g
-Y
-285 3592.2 m
-160 3592 l
-160 4306 l
-285 4306 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-181 3613 m
-268 3613 l
-S
-181 3613 m
-181 3642 l
-185 3655 l
-193 3663 l
-201 3667 l
-214 3672 l
-235 3672 l
-247 3667 l
-256 3663 l
-264 3655 l
-268 3642 l
-268 3613 l
-S
-235 3697 m
-235 3747 l
-227 3747 l
-218 3743 l
-214 3738 l
-210 3730 l
-210 3718 l
-214 3709 l
-222 3701 l
-235 3697 l
-243 3697 l
-256 3701 l
-264 3709 l
-268 3718 l
-268 3730 l
-264 3738 l
-256 3747 l
-S
-222 3822 m
-214 3814 l
-210 3805 l
-210 3793 l
-214 3784 l
-222 3776 l
-235 3772 l
-243 3772 l
-256 3776 l
-264 3784 l
-268 3793 l
-268 3805 l
-264 3814 l
-256 3822 l
-S
-181 3851 m
-268 3851 l
-S
-181 3880 m
-185 3885 l
-181 3889 l
-176 3885 l
-181 3880 l
-S
-210 3885 m
-268 3885 l
-S
-210 3918 m
-268 3918 l
-S
-227 3918 m
-214 3931 l
-210 3939 l
-210 3951 l
-214 3960 l
-227 3964 l
-268 3964 l
-S
-210 4043 m
-268 4043 l
-S
-222 4043 m
-214 4035 l
-210 4027 l
-210 4014 l
-214 4006 l
-222 3997 l
-235 3993 l
-243 3993 l
-256 3997 l
-264 4006 l
-268 4014 l
-268 4027 l
-264 4035 l
-256 4043 l
-S
-181 4081 m
-252 4081 l
-264 4085 l
-268 4093 l
-268 4102 l
-S
-210 4068 m
-210 4098 l
-S
-181 4123 m
-185 4127 l
-181 4131 l
-176 4127 l
-181 4123 l
-S
-210 4127 m
-268 4127 l
-S
-210 4177 m
-214 4169 l
-222 4160 l
-235 4156 l
-243 4156 l
-256 4160 l
-264 4169 l
-268 4177 l
-268 4189 l
-264 4198 l
-256 4206 l
-243 4210 l
-235 4210 l
-222 4206 l
-214 4198 l
-210 4189 l
-210 4177 l
-S
-210 4240 m
-268 4240 l
-S
-227 4240 m
-214 4252 l
-210 4261 l
-210 4273 l
-214 4281 l
-227 4286 l
-268 4286 l
-S
-1 g
-Y
-924.3 6283 m
-924 6468 l
-4172 6468 l
-4172 6283 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-949 6443 m
-949 6338 l
-S
-949 6443 m
-1015 6443 l
-S
-949 6393 m
-989 6393 l
-S
-1040 6443 m
-1040 6338 l
-S
-1110 6443 m
-1040 6373 l
-S
-1065 6398 m
-1110 6338 l
-S
-1200 6443 m
-1150 6443 l
-1145 6398 l
-1150 6403 l
-1165 6408 l
-1180 6408 l
-1195 6403 l
-1205 6393 l
-1210 6378 l
-1210 6368 l
-1205 6353 l
-1195 6343 l
-1180 6338 l
-1165 6338 l
-1150 6343 l
-1145 6348 l
-1140 6358 l
-S
-1380 6393 m
-1370 6403 l
-1360 6408 l
-1345 6408 l
-1335 6403 l
-1325 6393 l
-1320 6378 l
-1320 6368 l
-1325 6353 l
-1335 6343 l
-1345 6338 l
-1360 6338 l
-1370 6343 l
-1380 6353 l
-S
-1436 6408 m
-1426 6403 l
-1415 6393 l
-1410 6378 l
-1410 6368 l
-1415 6353 l
-1426 6343 l
-1436 6338 l
-1451 6338 l
-1461 6343 l
-1471 6353 l
-1476 6368 l
-1476 6378 l
-1471 6393 l
-1461 6403 l
-1451 6408 l
-1436 6408 l
-S
-1531 6408 m
-1521 6403 l
-1511 6393 l
-1506 6378 l
-1506 6368 l
-1511 6353 l
-1521 6343 l
-1531 6338 l
-1546 6338 l
-1556 6343 l
-1566 6353 l
-1571 6368 l
-1571 6378 l
-1566 6393 l
-1556 6403 l
-1546 6408 l
-1531 6408 l
-S
-1606 6408 m
-1606 6338 l
-S
-1606 6378 m
-1611 6393 l
-1621 6403 l
-1631 6408 l
-1646 6408 l
-S
-1726 6443 m
-1726 6338 l
-S
-1726 6393 m
-1716 6403 l
-1706 6408 l
-1691 6408 l
-1681 6403 l
-1671 6393 l
-1666 6378 l
-1666 6368 l
-1671 6353 l
-1681 6343 l
-1691 6338 l
-1706 6338 l
-1716 6343 l
-1726 6353 l
-S
-1761 6443 m
-1766 6438 l
-1771 6443 l
-1766 6448 l
-1761 6443 l
-S
-1766 6408 m
-1766 6338 l
-S
-1806 6408 m
-1806 6338 l
-S
-1806 6388 m
-1821 6403 l
-1831 6408 l
-1847 6408 l
-1857 6403 l
-1862 6388 l
-1862 6338 l
-S
-1957 6408 m
-1957 6338 l
-S
-1957 6393 m
-1947 6403 l
-1937 6408 l
-1922 6408 l
-1912 6403 l
-1902 6393 l
-1897 6378 l
-1897 6368 l
-1902 6353 l
-1912 6343 l
-1922 6338 l
-1937 6338 l
-1947 6343 l
-1957 6353 l
-S
-2002 6443 m
-2002 6358 l
-2007 6343 l
-2017 6338 l
-2027 6338 l
-S
-1987 6408 m
-2022 6408 l
-S
-2052 6378 m
-2112 6378 l
-2112 6388 l
-2107 6398 l
-2102 6403 l
-2092 6408 l
-2077 6408 l
-2067 6403 l
-2057 6393 l
-2052 6378 l
-2052 6368 l
-2057 6353 l
-2067 6343 l
-2077 6338 l
-2092 6338 l
-2102 6343 l
-2112 6353 l
-S
-2197 6393 m
-2192 6403 l
-2177 6408 l
-2162 6408 l
-2147 6403 l
-2142 6393 l
-2147 6383 l
-2157 6378 l
-2182 6373 l
-2192 6368 l
-2197 6358 l
-2197 6353 l
-2192 6343 l
-2177 6338 l
-2162 6338 l
-2147 6343 l
-2142 6353 l
-S
-2237 6408 m
-2232 6403 l
-2237 6398 l
-2242 6403 l
-2237 6408 l
-S
-2242 6343 m
-2237 6338 l
-2232 6343 l
-2237 6348 l
-2242 6343 l
-2242 6333 l
-2237 6323 l
-2232 6318 l
-S
-2363 6408 m
-2363 6338 l
-S
-2363 6388 m
-2378 6403 l
-2388 6408 l
-2403 6408 l
-2413 6403 l
-2418 6388 l
-2418 6338 l
-S
-2418 6388 m
-2433 6403 l
-2443 6408 l
-2458 6408 l
-2468 6403 l
-2473 6388 l
-2473 6338 l
-S
-2508 6378 m
-2568 6378 l
-2568 6388 l
-2563 6398 l
-2558 6403 l
-2548 6408 l
-2533 6408 l
-2523 6403 l
-2513 6393 l
-2508 6378 l
-2508 6368 l
-2513 6353 l
-2523 6343 l
-2533 6338 l
-2548 6338 l
-2558 6343 l
-2568 6353 l
-S
-2658 6408 m
-2658 6338 l
-S
-2658 6393 m
-2648 6403 l
-2638 6408 l
-2623 6408 l
-2613 6403 l
-2603 6393 l
-2598 6378 l
-2598 6368 l
-2603 6353 l
-2613 6343 l
-2623 6338 l
-2638 6338 l
-2648 6343 l
-2658 6353 l
-S
-2699 6408 m
-2699 6338 l
-S
-2699 6388 m
-2714 6403 l
-2724 6408 l
-2739 6408 l
-2749 6403 l
-2754 6388 l
-2754 6338 l
-S
-2869 6378 m
-2929 6378 l
-2929 6388 l
-2924 6398 l
-2919 6403 l
-2909 6408 l
-2894 6408 l
-2884 6403 l
-2874 6393 l
-2869 6378 l
-2869 6368 l
-2874 6353 l
-2884 6343 l
-2894 6338 l
-2909 6338 l
-2919 6343 l
-2929 6353 l
-S
-3019 6408 m
-3019 6303 l
-S
-3019 6393 m
-3009 6403 l
-2999 6408 l
-2984 6408 l
-2974 6403 l
-2964 6393 l
-2959 6378 l
-2959 6368 l
-2964 6353 l
-2974 6343 l
-2984 6338 l
-2999 6338 l
-3009 6343 l
-3019 6353 l
-S
-3059 6408 m
-3059 6358 l
-3064 6343 l
-3074 6338 l
-3090 6338 l
-3100 6343 l
-3115 6358 l
-S
-3115 6408 m
-3115 6338 l
-S
-3150 6443 m
-3155 6438 l
-3160 6443 l
-3155 6448 l
-3150 6443 l
-S
-3155 6408 m
-3155 6338 l
-S
-3195 6408 m
-3195 6338 l
-S
-3195 6388 m
-3210 6403 l
-3220 6408 l
-3235 6408 l
-3245 6403 l
-3250 6388 l
-3250 6338 l
-S
-3310 6408 m
-3300 6403 l
-3290 6393 l
-3285 6378 l
-3285 6368 l
-3290 6353 l
-3300 6343 l
-3310 6338 l
-3325 6338 l
-3335 6343 l
-3345 6353 l
-3350 6368 l
-3350 6378 l
-3345 6393 l
-3335 6403 l
-3325 6408 l
-3310 6408 l
-S
-3380 6408 m
-3435 6338 l
-S
-3435 6408 m
-3380 6338 l
-S
-3591 6443 m
-3591 6363 l
-3586 6348 l
-3581 6343 l
-3571 6338 l
-3561 6338 l
-3551 6343 l
-3546 6348 l
-3541 6363 l
-3541 6373 l
-S
-3631 6418 m
-3631 6423 l
-3636 6433 l
-3641 6438 l
-3651 6443 l
-3671 6443 l
-3681 6438 l
-3686 6433 l
-3691 6423 l
-3691 6413 l
-3686 6403 l
-3676 6388 l
-3626 6338 l
-3696 6338 l
-S
-3756 6443 m
-3741 6438 l
-3731 6423 l
-3726 6398 l
-3726 6383 l
-3731 6358 l
-3741 6343 l
-3756 6338 l
-3766 6338 l
-3781 6343 l
-3791 6358 l
-3796 6383 l
-3796 6398 l
-3791 6423 l
-3781 6438 l
-3766 6443 l
-3756 6443 l
-S
-3856 6443 m
-3841 6438 l
-3831 6423 l
-3826 6398 l
-3826 6383 l
-3831 6358 l
-3841 6343 l
-3856 6338 l
-3866 6338 l
-3881 6343 l
-3891 6358 l
-3896 6383 l
-3896 6398 l
-3891 6423 l
-3881 6438 l
-3866 6443 l
-3856 6443 l
-S
-3957 6443 m
-3942 6438 l
-3932 6423 l
-3927 6398 l
-3927 6383 l
-3932 6358 l
-3942 6343 l
-3957 6338 l
-3967 6338 l
-3982 6343 l
-3992 6358 l
-3997 6383 l
-3997 6398 l
-3992 6423 l
-3982 6438 l
-3967 6443 l
-3957 6443 l
-S
-4037 6348 m
-4032 6343 l
-4037 6338 l
-4042 6343 l
-4037 6348 l
-S
-4107 6443 m
-4092 6438 l
-4082 6423 l
-4077 6398 l
-4077 6383 l
-4082 6358 l
-4092 6343 l
-4107 6338 l
-4117 6338 l
-4132 6343 l
-4142 6358 l
-4147 6383 l
-4147 6398 l
-4142 6423 l
-4132 6438 l
-4117 6443 l
-4107 6443 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/overgrid_bw.eps b/ast-5.3-1/sun210_figures/overgrid_bw.eps
deleted file mode 100644
index 7046ecb..0000000
--- a/ast-5.3-1/sun210_figures/overgrid_bw.eps
+++ /dev/null
@@ -1,6001 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 15 138 489 648
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1998/06/15 11:01:49
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-543.14 1777.49 4343.48 4343.48 re
-Y
-q[10 0 0 10 0 0]concat
-51 51 8[0.117417 0 0 0.117417 -6.377 -20.871]@85 image
-ai*)CcFL:2^:pAF
-UQ^:nNA^b:+92BA!!!!W='%;#B9T+/eC<sPjPU!ZlH]G0s8W,5Z`_$V`5KC(Z`&\DZZfIX-3/'Jz
-!!$8[Je2a7NO-R\n':4eqWe+1g&M*Ps8TEmY+;N*W3`7oZ]gB4>X8>n!(Hqg$3150!,%:8'k4,4R*!Y'
-jQ,CTn))XJs8W-!s+lkeSZ&<SZ\Xg$I:o)N$9Jt&'`\46zB8CaNK!VeYg!n^4cL9iOeDJdUs8W-!NIlA1LnfQR
-ChurK"Y1,a"Vh";!!!0&"TSOYCk<UX^:CtgeF2\`p#"H[eFikAs8W+iI9^5dB1urC7K<TR5l_Grz
-"TSN&$=[h'I8Pg,Y0#SCcL9iZs7Pj<lMpnas8S:!;*d9*4#SSh!#nTi+=dF'&-)\1!'=7)I@,5&Jsb'@
-lH/,Ep#P2plK[['s8W-!s"Qti.iSHg'`\469KPp;4%<:0!!!a'9MA,b&9<3*Y/J'-cHbM9lIkY!hq@;ps8W-!.gc7V
-z!!!!rEbn3B9O`DM&6F:#Eeo-0Ed+jmaj/ehalMOOlJM'Ug#W25s8W*!zz+@^0P2F1f3
-G at tP^Lja)kW/Z4bNL790\^]odhtlWkcLp8OjT#8[s8N'!z!!#;i at U*/(@WII!W+W8hY'lMENH1T#
-ZcTc=n'p%ZlLjH8qVTffs8W-!rr>,i2?3^W=)<(nJmrPEJs3OOS\Cl;\UC#hI<*HOeCip_cLpJ`p%@DBp#"'ps8W-!
-0kY<=4#%(O;+>"lI<UmBUTV>6^:CduB6&uUS^+CPqUt>jhq@;flK['k`7b1js8W+(Jp1[?Eah+NGAMkT
-I>t#4Z`^X0\[-mI>b/%#\]Naos6A\6hs/n`n*fPplMpnas8T$bJpiVk;/CGs>\o4*NMF4j`3-GrW3_kI
-R%q4+g"Gijn+HA2cK+iejR:d?s8W-!s,DGdR$3nsI<UK`7\bQpR)IL\^<+m8W0=0Y`4itNjQc$kjT#8Kn*93'lH0)+
-s8W-!Z]1?IR'V3WJs1"eLjc5?\[/HQ\\u%]Z^mJte at si:n)X0&lK[I1n)*3`g&M*Ps8W+tSUtmAQrfZR
-UPOo.Y+<+uUV=:\e at El-UTVPgcJS<kjQ-16jT#8VlK[j!s8W-!s8T7)JoZ[!@[!aMR&I@%PI%g1ft#DX
-`3Z"jY--('`8pUPn+u>1p$2SMn(He%s8W-!s-SdiEa4EaW3`XoUQ_(4URfNVlIj[^Y+qAOajf"s^=;W:lLjGqqXrqB
-lL4cQs8W-!USsBDSZ],_ZamE0W0=!_\_5liZam$aUSt-0g!o<Jhs]Y+p##62s8UC5s8W-!s8W+o^;Rsm
-PJkDRaksh=W2$o0cIBeXaj/SXUYj#>n*9c7jOrGep$2SBeDK?es8W-!s8UTZUVt*]cICP.eDJcteDJBi
-hp1]9adp_`hr!MfjR;C,p%n.Gs8)TgalNL%s8W-!s2<F/alLS$cIp^sai)l^eC<!tlK$IEcIC@^lMB31jR;1&qWdAB
-jQ-?ohuE`Vs8W-!^<+[RjQ,CTfu2RsalM@)cK*L#jQ,"Tajf5*lLjW7qX<_GlL3fpg&L-9s8W-!s8W,@
-eEZ>VlJK/0hs]X`e?7KSjM]a/n(HUpg$e"jqWdq<n*frLlK%X7lK&!Fs8W-!s8VBAeFhn`am.R?hpg05
-ZfLT.akuRPhpg`JlJLmllK\'=s8)ERn+tr1g&M*Ps8W-!s4P-3n':de`6RZ:jQb$sn+Gu,g!mb9hrNk`lK&!As7P(<
-n)*U,qVUtks8W-!s8W-!p%@5'htl6`g$dhZs6nIjp!3$`jQ,dun)Wd1ak>tEp#"j'qYK+,n'qC;s8W-!
-s8W,PlK%F,p!hman(I0_lH\;*g%sdjn+GSqhs/_alK[j2p%A"Hs7Q6Rp&G'ls8W-!s8UC5cK`^#hp1-P
-n*f_jhs//5hrOIkp$1i2lMC2HqX=:\p$1i2n,M\&s8W-!s8W-!s52_keDJsEcJRp[eF1]$jNd&OlMC2MjQc4,s8)cq
-p#PT1qX<nAp&G'ls8W-!s8W-!g%FX[hr":[n'ph+ft#5in)Wd&lK\67n(I"+lK[["n*9!&lMp/!n,NFf
-s8W-!s8W,[lI>+Khph>aqZ#jGai*YteC<sPht>mqp##'"jRrB<n+Gu!g&L?es8W-!s8W-!s8V05hs0[`
-n+H/Bn)WBJjOr5OlK\6=p$25Hn*f`+qWdAGs6oXRjOsS5s8W-!s8W-!s6B(+jQc4&s8)Ebn*eBDht?(,qX<,+jPTh!
-lLjH-eFi+qlL3F+p&G'ls8W-!s8W-!n(I0plK[I,qX=+McK+'Tg#))kp%mt=jSJQGlK[HqlK%X<hrNk`
-s8W-!s8W-!s8W,an*g,+qYKLBlMBt`cMHVup$_SHlK[[2lL4E!lLk#Rs6A\AjOsS5s8W-!s8W-!s8Vcl
-jRrQLs8W,qg!nO/p$^T!p%n at Ss5`8;lL4T7hp1-ZlMo/pjT#8[s8W-!s8W-!s6oFAqWdb7n*f`1eC<d*htl71jR;R6
-qWdqMs7Q'Mp&FL\ouZ:ps8W-!s8W-!s8W-!lMpPWs8(FKs6ALklL4E=jRq4+lL4$,qXs^Mp&F=Rp%A1]
-jR<-Ks8W-!s8W-!s8W,qn,N(Wp$_ALs4$N+n)X0<s53\GqYL6gs8)3Fp&F=Gn+HABs8W-!s8W-!s8W-!
-s8VBFs8VQ\s7Q'GlJM(!jPTh!s6An,lL4cLp%n.<n*9rLn)Ws;s8W-!s8W-!s8W-!s4Q]+qYK[RlK%$`p%@D=qXsmL
-aoCYks6B:RqXsm]lK\'BlI>k6s8W-!s8W-!s8W-!lL4TLg%G47lLji8p#PE!n*f06lMp>Gp&FmWp&F^R
-lL3fUs8W-!s8W-!s8W-!s8W,fn+HPMp%n at SjNd5oeGoC<p%@5"n*g;Vp$25HlMp>Ahs17As8W-!s8W-!
-s8W-!s8VQQqVV/1g!9'Tn*g;Vn+u>Ghs0LflK\'Bp&G'glK\'=lMpnas8W-!s8W-!s8W-!s5_l%g$edpqYKm]hr"Ip
-s6p!Kp%mA<p#PT<s6p!fqXs=Ws8W-!s8W-!s8W-!s8W-!g#))fp$2DRp"B3&n+H/Lg&LO0s6oXGs6oXR
-n*g,1p!3U;s8W-!s8W-!s8W-!s8W,qn+Gc7jT"N<n,Mk6jR<-Khs0n7qYKmXp#PfBcMICus8W-!s8W-!
-s8W-!s8W-!s8Vcbht?[Bs6AnGp&F+Ln*fr!qX<M6hs^7,p%@eHhs\M`s8W-!s8W-!s8W-!s8W-!rr~>
-Q
-5.04 w
-1 J
-1 j
-0 g
-2283 1777 m
-2286 1812 l
-2290 1870 l
-2293 1927 l
-2296 1985 l
-2299 2042 l
-2301 2100 l
-2302 2158 l
-2303 2216 l
-2303 2274 l
-2302 2332 l
-2301 2390 l
-2299 2448 l
-2297 2506 l
-2294 2564 l
-2291 2622 l
-2287 2680 l
-2282 2738 l
-2277 2796 l
-2271 2854 l
-2265 2913 l
-2258 2971 l
-2250 3029 l
-2242 3087 l
-2233 3145 l
-2223 3202 l
-2213 3260 l
-2203 3318 l
-2192 3376 l
-2180 3433 l
-2167 3491 l
-2154 3548 l
-2141 3606 l
-2126 3663 l
-2112 3720 l
-2096 3777 l
-2080 3834 l
-2063 3891 l
-2046 3948 l
-2028 4004 l
-2010 4061 l
-1991 4117 l
-1971 4173 l
-1951 4229 l
-1930 4284 l
-1909 4340 l
-1887 4395 l
-1865 4451 l
-1841 4505 l
-1818 4560 l
-1816 4564 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1813 4570 l
-1813 4570 l
-S
-1911 1777 m
-1913 1784 l
-1924 1834 l
-1935 1885 l
-1945 1936 l
-1955 1987 l
-1964 2038 l
-1973 2089 l
-1981 2141 l
-1989 2193 l
-1997 2244 l
-2004 2296 l
-2010 2349 l
-2016 2401 l
-2021 2453 l
-2026 2506 l
-2031 2559 l
-2035 2611 l
-2038 2664 l
-2041 2717 l
-2044 2770 l
-2045 2824 l
-2047 2877 l
-2048 2931 l
-2048 2984 l
-2048 3038 l
-2047 3092 l
-2046 3145 l
-2044 3199 l
-2042 3253 l
-2039 3307 l
-2035 3362 l
-2031 3416 l
-2027 3470 l
-2022 3524 l
-2016 3579 l
-2010 3633 l
-2003 3688 l
-1996 3742 l
-1988 3797 l
-1979 3851 l
-1970 3906 l
-1961 3960 l
-1950 4015 l
-1940 4070 l
-1928 4124 l
-1916 4179 l
-1904 4233 l
-1891 4288 l
-1877 4342 l
-1863 4397 l
-1848 4451 l
-1832 4506 l
-1816 4560 l
-1815 4564 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1813 4570 l
-1813 4570 l
-S
-1433 1777 m
-1446 1809 l
-1464 1851 l
-1482 1893 l
-1499 1935 l
-1516 1978 l
-1532 2020 l
-1549 2063 l
-1564 2106 l
-1580 2149 l
-1595 2193 l
-1610 2236 l
-1624 2280 l
-1638 2324 l
-1651 2368 l
-1665 2413 l
-1677 2457 l
-1690 2502 l
-1702 2547 l
-1714 2592 l
-1725 2637 l
-1736 2682 l
-1746 2728 l
-1756 2773 l
-1766 2819 l
-1775 2865 l
-1784 2911 l
-1793 2958 l
-1801 3004 l
-1808 3051 l
-1816 3097 l
-1822 3144 l
-1829 3191 l
-1835 3239 l
-1840 3286 l
-1845 3333 l
-1850 3381 l
-1854 3429 l
-1857 3477 l
-1861 3525 l
-1863 3573 l
-1866 3621 l
-1867 3670 l
-1869 3718 l
-1870 3767 l
-1870 3816 l
-1870 3865 l
-1869 3914 l
-1868 3963 l
-1866 4012 l
-1864 4062 l
-1862 4111 l
-1859 4161 l
-1855 4210 l
-1851 4260 l
-1846 4310 l
-1841 4360 l
-1835 4410 l
-1829 4460 l
-1822 4511 l
-1815 4561 l
-1814 4565 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-732 1777 m
-733 1778 l
-758 1811 l
-782 1843 l
-807 1876 l
-831 1908 l
-855 1941 l
-878 1974 l
-902 2007 l
-925 2041 l
-948 2074 l
-971 2108 l
-993 2141 l
-1015 2175 l
-1037 2209 l
-1059 2243 l
-1081 2278 l
-1102 2312 l
-1123 2347 l
-1143 2382 l
-1164 2417 l
-1184 2452 l
-1204 2487 l
-1224 2522 l
-1243 2558 l
-1262 2593 l
-1281 2629 l
-1300 2665 l
-1318 2701 l
-1336 2738 l
-1354 2774 l
-1371 2811 l
-1388 2847 l
-1405 2884 l
-1422 2921 l
-1438 2958 l
-1454 2995 l
-1470 3033 l
-1485 3070 l
-1500 3108 l
-1515 3146 l
-1530 3184 l
-1544 3222 l
-1558 3260 l
-1571 3299 l
-1584 3338 l
-1597 3376 l
-1610 3415 l
-1622 3454 l
-1634 3493 l
-1645 3533 l
-1657 3572 l
-1667 3612 l
-1678 3651 l
-1688 3691 l
-1698 3731 l
-1707 3772 l
-1716 3812 l
-1725 3852 l
-1733 3893 l
-1741 3934 l
-1749 3975 l
-1756 4016 l
-1763 4057 l
-1769 4098 l
-1775 4140 l
-1781 4181 l
-1786 4223 l
-1791 4265 l
-1795 4307 l
-1799 4349 l
-1803 4392 l
-1806 4434 l
-1809 4477 l
-1811 4519 l
-1813 4562 l
-1813 4565 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 2622 m
-551 2630 l
-577 2656 l
-602 2682 l
-628 2709 l
-653 2736 l
-678 2762 l
-703 2789 l
-728 2816 l
-753 2843 l
-777 2870 l
-801 2897 l
-825 2925 l
-849 2952 l
-873 2979 l
-896 3007 l
-920 3034 l
-943 3062 l
-966 3090 l
-988 3118 l
-1011 3146 l
-1033 3174 l
-1055 3202 l
-1077 3230 l
-1099 3258 l
-1120 3287 l
-1142 3315 l
-1163 3344 l
-1184 3372 l
-1204 3401 l
-1225 3430 l
-1245 3459 l
-1265 3488 l
-1285 3517 l
-1304 3546 l
-1324 3575 l
-1343 3605 l
-1362 3634 l
-1381 3664 l
-1399 3693 l
-1417 3723 l
-1435 3753 l
-1453 3783 l
-1470 3813 l
-1488 3843 l
-1505 3873 l
-1521 3903 l
-1538 3934 l
-1554 3964 l
-1570 3995 l
-1586 4026 l
-1601 4056 l
-1616 4087 l
-1631 4118 l
-1646 4150 l
-1661 4181 l
-1675 4212 l
-1689 4244 l
-1702 4275 l
-1715 4307 l
-1728 4339 l
-1741 4370 l
-1754 4402 l
-1766 4435 l
-1778 4467 l
-1789 4499 l
-1800 4532 l
-1811 4564 l
-1812 4567 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 3506 m
-561 3518 l
-588 3538 l
-615 3558 l
-642 3577 l
-669 3597 l
-696 3616 l
-723 3636 l
-749 3656 l
-776 3675 l
-802 3695 l
-828 3714 l
-854 3734 l
-880 3754 l
-906 3773 l
-932 3793 l
-957 3813 l
-982 3832 l
-1008 3852 l
-1033 3872 l
-1057 3891 l
-1082 3911 l
-1107 3931 l
-1131 3950 l
-1156 3970 l
-1180 3990 l
-1204 4010 l
-1228 4029 l
-1251 4049 l
-1275 4069 l
-1298 4089 l
-1321 4108 l
-1344 4128 l
-1367 4148 l
-1390 4168 l
-1413 4188 l
-1435 4207 l
-1457 4227 l
-1480 4247 l
-1501 4267 l
-1523 4287 l
-1545 4307 l
-1566 4327 l
-1588 4346 l
-1609 4366 l
-1630 4386 l
-1650 4406 l
-1671 4426 l
-1691 4446 l
-1711 4466 l
-1731 4486 l
-1751 4506 l
-1771 4526 l
-1791 4546 l
-1810 4567 l
-1811 4568 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 4183 m
-554 4186 l
-584 4197 l
-615 4208 l
-645 4219 l
-675 4229 l
-705 4240 l
-735 4250 l
-765 4260 l
-795 4271 l
-825 4281 l
-855 4291 l
-884 4301 l
-914 4311 l
-943 4320 l
-973 4330 l
-1002 4340 l
-1031 4349 l
-1060 4358 l
-1089 4368 l
-1118 4377 l
-1147 4386 l
-1176 4395 l
-1204 4403 l
-1233 4412 l
-1261 4421 l
-1290 4429 l
-1318 4438 l
-1346 4446 l
-1374 4454 l
-1402 4462 l
-1430 4470 l
-1457 4478 l
-1485 4486 l
-1513 4493 l
-1540 4501 l
-1567 4508 l
-1595 4515 l
-1622 4523 l
-1649 4530 l
-1676 4536 l
-1702 4543 l
-1729 4550 l
-1756 4556 l
-1782 4563 l
-1809 4569 l
-1810 4570 l
-1812 4570 l
-1812 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 4696 m
-548 4696 l
-582 4697 l
-617 4698 l
-651 4698 l
-685 4699 l
-719 4699 l
-753 4699 l
-788 4698 l
-822 4698 l
-855 4697 l
-889 4696 l
-923 4695 l
-957 4693 l
-990 4692 l
-1024 4690 l
-1058 4688 l
-1091 4685 l
-1124 4683 l
-1158 4680 l
-1191 4677 l
-1224 4674 l
-1257 4670 l
-1290 4666 l
-1323 4663 l
-1356 4658 l
-1389 4654 l
-1421 4649 l
-1454 4644 l
-1487 4639 l
-1519 4633 l
-1551 4628 l
-1584 4622 l
-1616 4615 l
-1648 4609 l
-1680 4602 l
-1712 4595 l
-1744 4587 l
-1776 4580 l
-1808 4572 l
-1810 4571 l
-1812 4571 l
-1812 4570 l
-1812 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 5102 m
-557 5098 l
-596 5089 l
-634 5079 l
-672 5068 l
-710 5058 l
-748 5047 l
-786 5035 l
-823 5024 l
-861 5012 l
-899 4999 l
-936 4987 l
-974 4974 l
-1011 4960 l
-1048 4947 l
-1085 4933 l
-1122 4918 l
-1159 4904 l
-1196 4889 l
-1233 4873 l
-1270 4857 l
-1306 4841 l
-1343 4825 l
-1379 4808 l
-1416 4790 l
-1452 4773 l
-1488 4755 l
-1524 4736 l
-1560 4717 l
-1595 4698 l
-1631 4678 l
-1666 4658 l
-1702 4638 l
-1737 4617 l
-1772 4596 l
-1807 4574 l
-1809 4573 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 5444 m
-564 5435 l
-605 5414 l
-646 5394 l
-687 5373 l
-728 5352 l
-769 5330 l
-810 5308 l
-850 5285 l
-890 5262 l
-931 5239 l
-971 5215 l
-1011 5191 l
-1050 5166 l
-1090 5141 l
-1129 5115 l
-1169 5089 l
-1208 5063 l
-1247 5036 l
-1285 5008 l
-1324 4981 l
-1362 4952 l
-1400 4923 l
-1438 4894 l
-1476 4865 l
-1514 4834 l
-1551 4804 l
-1588 4773 l
-1625 4741 l
-1662 4709 l
-1699 4677 l
-1735 4644 l
-1771 4610 l
-1807 4576 l
-1809 4574 l
-1812 4572 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-S
-543 5757 m
-554 5749 l
-597 5720 l
-640 5690 l
-683 5660 l
-726 5629 l
-768 5598 l
-810 5567 l
-852 5535 l
-893 5502 l
-935 5469 l
-976 5435 l
-1017 5401 l
-1057 5367 l
-1098 5332 l
-1138 5297 l
-1178 5261 l
-1217 5224 l
-1256 5187 l
-1295 5150 l
-1334 5112 l
-1372 5074 l
-1410 5035 l
-1448 4996 l
-1486 4956 l
-1523 4916 l
-1559 4876 l
-1596 4835 l
-1632 4793 l
-1668 4751 l
-1703 4709 l
-1738 4666 l
-1773 4622 l
-1807 4578 l
-1810 4575 l
-1812 4572 l
-1812 4572 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-543 6064 m
-569 6042 l
-613 6005 l
-656 5967 l
-700 5929 l
-742 5890 l
-785 5851 l
-827 5812 l
-868 5772 l
-910 5731 l
-951 5691 l
-991 5649 l
-1031 5607 l
-1071 5565 l
-1110 5522 l
-1149 5479 l
-1188 5436 l
-1226 5392 l
-1264 5347 l
-1301 5302 l
-1338 5257 l
-1375 5211 l
-1411 5165 l
-1446 5118 l
-1482 5071 l
-1516 5024 l
-1551 4976 l
-1584 4928 l
-1618 4879 l
-1651 4830 l
-1683 4781 l
-1715 4731 l
-1746 4681 l
-1777 4630 l
-1808 4579 l
-1810 4576 l
-1812 4572 l
-1812 4572 l
-1812 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-804 6121 m
-831 6091 l
-871 6046 l
-911 6000 l
-950 5954 l
-989 5907 l
-1027 5860 l
-1065 5813 l
-1102 5765 l
-1139 5717 l
-1175 5669 l
-1211 5620 l
-1246 5571 l
-1280 5521 l
-1315 5471 l
-1348 5421 l
-1381 5371 l
-1414 5320 l
-1445 5269 l
-1477 5218 l
-1508 5166 l
-1538 5114 l
-1567 5062 l
-1597 5009 l
-1625 4957 l
-1653 4903 l
-1681 4850 l
-1707 4797 l
-1734 4743 l
-1759 4689 l
-1784 4635 l
-1809 4580 l
-1811 4576 l
-1812 4572 l
-1812 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1061 6121 m
-1070 6107 l
-1104 6057 l
-1138 6007 l
-1171 5956 l
-1203 5905 l
-1235 5854 l
-1266 5803 l
-1297 5751 l
-1327 5700 l
-1356 5648 l
-1384 5596 l
-1412 5544 l
-1440 5491 l
-1467 5439 l
-1493 5386 l
-1518 5333 l
-1543 5280 l
-1567 5227 l
-1591 5173 l
-1614 5120 l
-1636 5066 l
-1658 5013 l
-1679 4959 l
-1700 4905 l
-1720 4851 l
-1739 4797 l
-1758 4743 l
-1776 4689 l
-1793 4634 l
-1810 4580 l
-1811 4576 l
-1813 4572 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1301 6121 m
-1308 6108 l
-1334 6057 l
-1360 6006 l
-1384 5955 l
-1408 5904 l
-1432 5853 l
-1455 5802 l
-1477 5751 l
-1498 5700 l
-1519 5649 l
-1539 5598 l
-1558 5547 l
-1577 5495 l
-1595 5444 l
-1613 5393 l
-1630 5342 l
-1646 5291 l
-1662 5240 l
-1677 5189 l
-1691 5138 l
-1705 5087 l
-1718 5036 l
-1731 4985 l
-1743 4934 l
-1755 4883 l
-1766 4832 l
-1776 4782 l
-1786 4731 l
-1795 4680 l
-1804 4630 l
-1812 4579 l
-1812 4576 l
-1813 4572 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1567 6121 m
-1568 6117 l
-1585 6070 l
-1601 6023 l
-1617 5976 l
-1632 5929 l
-1646 5882 l
-1659 5835 l
-1672 5789 l
-1685 5742 l
-1697 5696 l
-1708 5650 l
-1718 5603 l
-1728 5557 l
-1738 5512 l
-1747 5466 l
-1755 5420 l
-1763 5375 l
-1770 5329 l
-1776 5284 l
-1783 5239 l
-1788 5194 l
-1793 5149 l
-1798 5104 l
-1802 5060 l
-1805 5015 l
-1808 4971 l
-1811 4927 l
-1813 4883 l
-1814 4839 l
-1815 4795 l
-1816 4751 l
-1816 4708 l
-1816 4664 l
-1815 4621 l
-1814 4578 l
-1813 4575 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1922 6121 m
-1923 6116 l
-1930 6076 l
-1937 6037 l
-1943 5998 l
-1949 5959 l
-1954 5921 l
-1958 5882 l
-1962 5844 l
-1966 5806 l
-1969 5768 l
-1971 5730 l
-1973 5693 l
-1975 5655 l
-1976 5618 l
-1976 5581 l
-1976 5544 l
-1976 5508 l
-1975 5471 l
-1974 5435 l
-1972 5399 l
-1970 5363 l
-1967 5327 l
-1964 5292 l
-1961 5256 l
-1957 5221 l
-1953 5186 l
-1948 5150 l
-1943 5116 l
-1938 5081 l
-1932 5046 l
-1926 5012 l
-1920 4978 l
-1913 4943 l
-1906 4909 l
-1898 4875 l
-1890 4842 l
-1882 4808 l
-1874 4774 l
-1865 4741 l
-1855 4708 l
-1846 4675 l
-1836 4642 l
-1826 4609 l
-1815 4576 l
-1814 4574 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-S
-2562 6121 m
-2562 6116 l
-2562 6089 l
-2562 6062 l
-2562 6035 l
-2561 6009 l
-2560 5983 l
-2558 5957 l
-2556 5931 l
-2553 5906 l
-2550 5880 l
-2546 5855 l
-2543 5830 l
-2538 5806 l
-2534 5781 l
-2529 5757 l
-2523 5733 l
-2517 5709 l
-2511 5685 l
-2505 5661 l
-2498 5638 l
-2491 5615 l
-2483 5591 l
-2476 5568 l
-2468 5545 l
-2459 5523 l
-2451 5500 l
-2442 5477 l
-2432 5455 l
-2423 5432 l
-2413 5410 l
-2403 5388 l
-2392 5366 l
-2381 5344 l
-2370 5322 l
-2359 5300 l
-2348 5279 l
-2336 5257 l
-2324 5236 l
-2311 5214 l
-2299 5193 l
-2286 5171 l
-2273 5150 l
-2260 5129 l
-2246 5108 l
-2232 5087 l
-2218 5066 l
-2204 5045 l
-2190 5024 l
-2175 5003 l
-2160 4982 l
-2145 4961 l
-2129 4941 l
-2114 4920 l
-2098 4899 l
-2082 4879 l
-2066 4858 l
-2049 4838 l
-2033 4817 l
-2016 4797 l
-1999 4776 l
-1981 4756 l
-1964 4736 l
-1946 4715 l
-1928 4695 l
-1910 4675 l
-1892 4655 l
-1873 4634 l
-1855 4614 l
-1836 4594 l
-1817 4574 l
-1815 4572 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4570 l
-1813 4570 l
-1813 4570 l
-S
-4454 1777 m
-4454 1785 l
-4454 1798 l
-4454 1810 l
-4454 1822 l
-4453 1834 l
-4453 1847 l
-4453 1859 l
-4453 1871 l
-4452 1882 l
-4452 1894 l
-4452 1906 l
-4451 1918 l
-4451 1929 l
-4451 1941 l
-4450 1952 l
-4450 1964 l
-4449 1975 l
-4449 1986 l
-4448 1998 l
-4448 2009 l
-4447 2020 l
-4447 2031 l
-4446 2042 l
-4446 2053 l
-4445 2064 l
-4445 2075 l
-4444 2086 l
-4443 2096 l
-4443 2107 l
-4442 2118 l
-4442 2128 l
-4441 2139 l
-4440 2149 l
-4440 2159 l
-4439 2170 l
-4428 2309 l
-4415 2438 l
-4401 2558 l
-4385 2670 l
-4369 2775 l
-4352 2874 l
-4334 2966 l
-4316 3052 l
-4297 3134 l
-4278 3210 l
-4259 3283 l
-4240 3351 l
-4221 3416 l
-4201 3477 l
-4182 3534 l
-4163 3589 l
-4143 3641 l
-4124 3691 l
-4105 3738 l
-4085 3783 l
-4066 3825 l
-4047 3866 l
-4028 3905 l
-4009 3942 l
-3990 3977 l
-3971 4011 l
-3952 4043 l
-3933 4074 l
-3914 4104 l
-3895 4132 l
-3876 4159 l
-3858 4185 l
-3839 4210 l
-3820 4234 l
-3801 4257 l
-3783 4279 l
-3764 4300 l
-3745 4320 l
-3726 4340 l
-3708 4358 l
-3689 4376 l
-3670 4393 l
-3651 4410 l
-3633 4425 l
-3614 4441 l
-3595 4455 l
-3576 4469 l
-3557 4482 l
-3538 4495 l
-3519 4507 l
-3500 4519 l
-3481 4531 l
-3462 4541 l
-3442 4552 l
-3423 4561 l
-3404 4571 l
-3384 4580 l
-3365 4589 l
-3345 4597 l
-3325 4605 l
-3306 4612 l
-3286 4619 l
-3266 4626 l
-3246 4632 l
-3226 4638 l
-3206 4644 l
-3186 4649 l
-3165 4654 l
-3145 4659 l
-3125 4663 l
-3104 4668 l
-3083 4671 l
-3063 4675 l
-3042 4678 l
-3021 4681 l
-3000 4684 l
-2979 4687 l
-2958 4689 l
-2936 4691 l
-2915 4693 l
-2894 4694 l
-2872 4696 l
-2850 4697 l
-2828 4698 l
-2807 4698 l
-2785 4699 l
-2762 4699 l
-2740 4699 l
-2718 4699 l
-2696 4699 l
-2673 4698 l
-2650 4697 l
-2628 4696 l
-2605 4695 l
-2582 4694 l
-2559 4692 l
-2536 4690 l
-2513 4689 l
-2489 4686 l
-2466 4684 l
-2442 4682 l
-2418 4679 l
-2395 4676 l
-2371 4674 l
-2347 4670 l
-2323 4667 l
-2298 4664 l
-2274 4660 l
-2250 4657 l
-2225 4653 l
-2201 4649 l
-2176 4644 l
-2151 4640 l
-2126 4636 l
-2101 4631 l
-2076 4626 l
-2050 4621 l
-2025 4616 l
-2000 4611 l
-1974 4606 l
-1948 4601 l
-1922 4595 l
-1896 4589 l
-1870 4583 l
-1844 4577 l
-1818 4571 l
-1816 4571 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-4071 1777 m
-4067 1810 l
-4057 1881 l
-4046 1950 l
-4034 2018 l
-4021 2084 l
-4007 2148 l
-3993 2211 l
-3979 2273 l
-3963 2333 l
-3947 2392 l
-3931 2450 l
-3914 2506 l
-3897 2561 l
-3879 2615 l
-3860 2667 l
-3842 2719 l
-3822 2769 l
-3803 2818 l
-3783 2866 l
-3762 2913 l
-3742 2959 l
-3721 3004 l
-3699 3048 l
-3678 3091 l
-3656 3134 l
-3633 3175 l
-3611 3215 l
-3588 3255 l
-3565 3293 l
-3542 3331 l
-3518 3368 l
-3494 3404 l
-3470 3440 l
-3446 3474 l
-3421 3508 l
-3397 3541 l
-3372 3574 l
-3347 3606 l
-3321 3637 l
-3296 3667 l
-3270 3697 l
-3245 3726 l
-3219 3754 l
-3192 3782 l
-3166 3810 l
-3140 3836 l
-3113 3863 l
-3086 3888 l
-3059 3913 l
-3032 3938 l
-3005 3962 l
-2978 3985 l
-2950 4008 l
-2922 4030 l
-2895 4052 l
-2867 4074 l
-2839 4094 l
-2811 4115 l
-2782 4135 l
-2754 4154 l
-2725 4174 l
-2697 4192 l
-2668 4210 l
-2639 4228 l
-2610 4246 l
-2581 4263 l
-2552 4279 l
-2522 4295 l
-2493 4311 l
-2463 4326 l
-2433 4341 l
-2404 4356 l
-2374 4370 l
-2344 4384 l
-2314 4398 l
-2283 4411 l
-2253 4424 l
-2223 4436 l
-2192 4448 l
-2162 4460 l
-2131 4472 l
-2100 4483 l
-2069 4493 l
-2038 4504 l
-2007 4514 l
-1976 4524 l
-1945 4534 l
-1914 4543 l
-1882 4552 l
-1851 4560 l
-1819 4569 l
-1817 4569 l
-1815 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-3631 1777 m
-3622 1824 l
-3610 1887 l
-3597 1950 l
-3583 2011 l
-3568 2072 l
-3553 2132 l
-3537 2191 l
-3521 2249 l
-3504 2307 l
-3486 2363 l
-3468 2419 l
-3450 2474 l
-3431 2528 l
-3411 2582 l
-3391 2635 l
-3370 2687 l
-3349 2738 l
-3328 2789 l
-3306 2839 l
-3283 2888 l
-3260 2936 l
-3237 2984 l
-3213 3031 l
-3189 3078 l
-3165 3123 l
-3140 3168 l
-3115 3213 l
-3089 3256 l
-3063 3300 l
-3037 3342 l
-3010 3384 l
-2984 3425 l
-2956 3466 l
-2929 3506 l
-2901 3545 l
-2873 3584 l
-2845 3622 l
-2816 3659 l
-2787 3696 l
-2758 3733 l
-2728 3769 l
-2699 3804 l
-2669 3839 l
-2639 3873 l
-2608 3907 l
-2578 3940 l
-2547 3972 l
-2516 4004 l
-2484 4036 l
-2453 4067 l
-2421 4098 l
-2389 4128 l
-2357 4157 l
-2325 4186 l
-2292 4215 l
-2260 4243 l
-2227 4270 l
-2194 4298 l
-2160 4324 l
-2127 4350 l
-2094 4376 l
-2060 4401 l
-2026 4426 l
-1992 4451 l
-1958 4475 l
-1923 4498 l
-1889 4521 l
-1854 4544 l
-1820 4566 l
-1817 4568 l
-1815 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-3251 1777 m
-3241 1834 l
-3230 1898 l
-3218 1960 l
-3205 2023 l
-3192 2084 l
-3178 2146 l
-3164 2206 l
-3149 2266 l
-3133 2326 l
-3116 2385 l
-3099 2444 l
-3082 2502 l
-3063 2559 l
-3045 2616 l
-3025 2673 l
-3005 2728 l
-2985 2784 l
-2964 2839 l
-2942 2893 l
-2920 2947 l
-2898 3000 l
-2875 3052 l
-2851 3105 l
-2827 3156 l
-2803 3207 l
-2778 3258 l
-2753 3308 l
-2727 3357 l
-2700 3406 l
-2674 3454 l
-2647 3502 l
-2619 3549 l
-2591 3596 l
-2563 3642 l
-2534 3688 l
-2505 3733 l
-2476 3778 l
-2446 3822 l
-2416 3866 l
-2386 3909 l
-2355 3951 l
-2324 3993 l
-2292 4035 l
-2260 4076 l
-2228 4117 l
-2196 4157 l
-2163 4196 l
-2130 4235 l
-2096 4274 l
-2063 4312 l
-2029 4349 l
-1995 4386 l
-1960 4423 l
-1926 4459 l
-1891 4494 l
-1855 4529 l
-1820 4564 l
-1817 4566 l
-1815 4569 l
-1815 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2919 1777 m
-2914 1822 l
-2907 1885 l
-2898 1949 l
-2890 2012 l
-2880 2074 l
-2870 2137 l
-2859 2199 l
-2848 2261 l
-2836 2322 l
-2823 2383 l
-2809 2444 l
-2795 2505 l
-2781 2565 l
-2765 2625 l
-2749 2685 l
-2733 2744 l
-2715 2803 l
-2698 2861 l
-2679 2919 l
-2660 2977 l
-2641 3034 l
-2621 3091 l
-2600 3148 l
-2579 3204 l
-2557 3260 l
-2535 3315 l
-2512 3370 l
-2489 3425 l
-2465 3479 l
-2440 3533 l
-2415 3586 l
-2390 3639 l
-2364 3692 l
-2338 3744 l
-2311 3795 l
-2283 3847 l
-2255 3898 l
-2227 3948 l
-2198 3998 l
-2169 4047 l
-2139 4096 l
-2109 4145 l
-2079 4193 l
-2048 4241 l
-2016 4288 l
-1985 4335 l
-1952 4381 l
-1920 4427 l
-1887 4473 l
-1853 4518 l
-1819 4562 l
-1817 4565 l
-1815 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2606 1777 m
-2606 1788 l
-2604 1850 l
-2602 1912 l
-2599 1973 l
-2595 2035 l
-2590 2096 l
-2585 2158 l
-2579 2219 l
-2573 2280 l
-2566 2341 l
-2558 2402 l
-2550 2463 l
-2541 2524 l
-2531 2584 l
-2521 2645 l
-2510 2705 l
-2499 2765 l
-2487 2825 l
-2474 2885 l
-2461 2944 l
-2447 3004 l
-2432 3063 l
-2417 3122 l
-2401 3181 l
-2385 3239 l
-2367 3297 l
-2350 3355 l
-2332 3413 l
-2313 3471 l
-2293 3528 l
-2273 3585 l
-2253 3642 l
-2232 3698 l
-2210 3755 l
-2188 3810 l
-2165 3866 l
-2142 3922 l
-2118 3977 l
-2093 4031 l
-2068 4086 l
-2042 4140 l
-2016 4194 l
-1990 4247 l
-1963 4300 l
-1935 4353 l
-1907 4406 l
-1878 4458 l
-1849 4509 l
-1819 4561 l
-1817 4565 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2890 6121 m
-2892 6118 l
-2906 6096 l
-2920 6075 l
-2934 6054 l
-2948 6032 l
-2962 6011 l
-2976 5989 l
-2990 5968 l
-3003 5946 l
-3017 5924 l
-3031 5902 l
-3044 5880 l
-3058 5858 l
-3071 5836 l
-3084 5814 l
-3097 5792 l
-3111 5770 l
-3124 5748 l
-3137 5725 l
-3150 5703 l
-3162 5681 l
-3175 5658 l
-3188 5635 l
-3200 5613 l
-3213 5590 l
-3225 5567 l
-3238 5545 l
-3250 5522 l
-3262 5499 l
-3274 5476 l
-3286 5453 l
-3298 5430 l
-3310 5407 l
-3322 5384 l
-3334 5360 l
-3345 5337 l
-3357 5314 l
-3368 5291 l
-3380 5267 l
-3391 5244 l
-3402 5220 l
-3413 5197 l
-3424 5173 l
-3435 5150 l
-3446 5126 l
-3457 5103 l
-3468 5079 l
-3478 5055 l
-3489 5032 l
-3499 5008 l
-3509 4984 l
-3519 4961 l
-3530 4937 l
-3540 4913 l
-3549 4889 l
-3559 4865 l
-3569 4841 l
-3579 4817 l
-3588 4793 l
-3598 4769 l
-3607 4745 l
-3616 4721 l
-3625 4697 l
-3634 4673 l
-3643 4649 l
-3652 4625 l
-3661 4601 l
-3670 4577 l
-3678 4553 l
-3687 4529 l
-3695 4505 l
-3704 4481 l
-3712 4457 l
-3720 4433 l
-3728 4409 l
-3736 4385 l
-3744 4361 l
-3751 4337 l
-3759 4312 l
-3766 4288 l
-3774 4264 l
-3781 4240 l
-3788 4216 l
-3796 4192 l
-3803 4168 l
-3810 4144 l
-3816 4120 l
-3823 4096 l
-3830 4072 l
-3836 4048 l
-3843 4024 l
-3849 4000 l
-3855 3976 l
-3861 3953 l
-3868 3929 l
-3874 3905 l
-3879 3881 l
-3885 3857 l
-3891 3833 l
-3896 3810 l
-3902 3786 l
-3907 3762 l
-3913 3738 l
-3918 3715 l
-3923 3691 l
-3928 3668 l
-3933 3644 l
-3938 3621 l
-3942 3597 l
-3947 3574 l
-3952 3550 l
-3956 3527 l
-3960 3504 l
-3965 3480 l
-3969 3457 l
-3973 3434 l
-3977 3411 l
-3981 3387 l
-3985 3364 l
-3989 3341 l
-3992 3318 l
-3996 3295 l
-3999 3272 l
-4003 3249 l
-4006 3227 l
-4009 3204 l
-4012 3181 l
-4015 3158 l
-4018 3136 l
-4021 3113 l
-4024 3091 l
-4026 3068 l
-4029 3046 l
-4032 3023 l
-4034 3001 l
-4036 2979 l
-4039 2957 l
-4041 2934 l
-4043 2912 l
-4045 2890 l
-4047 2868 l
-4049 2846 l
-4051 2825 l
-4052 2803 l
-4054 2781 l
-4055 2759 l
-4057 2738 l
-4058 2716 l
-4060 2695 l
-4061 2673 l
-4062 2652 l
-4063 2631 l
-4064 2609 l
-4065 2588 l
-4066 2567 l
-4067 2546 l
-4068 2525 l
-4068 2504 l
-4069 2483 l
-4069 2462 l
-4070 2442 l
-4070 2421 l
-4070 2401 l
-4071 2380 l
-4071 2360 l
-4071 2339 l
-4071 2319 l
-4071 2299 l
-4071 2279 l
-4071 2259 l
-4071 2239 l
-4070 2219 l
-4070 2199 l
-4069 2179 l
-4069 2159 l
-4068 2140 l
-4068 2120 l
-4067 2100 l
-4066 2081 l
-4066 2062 l
-4065 2042 l
-4064 2023 l
-4063 2004 l
-4062 1985 l
-4061 1966 l
-4060 1947 l
-4059 1928 l
-4057 1910 l
-4056 1891 l
-4055 1872 l
-4053 1854 l
-4052 1835 l
-4050 1817 l
-4049 1799 l
-4047 1781 l
-4047 1777 l
-S
-868 1777 m
-823 1845 l
-772 1921 l
-722 1998 l
-672 2076 l
-623 2155 l
-573 2235 l
-543 2285 l
-S
-2598 6121 m
-2601 6118 l
-2611 6104 l
-2620 6091 l
-2630 6078 l
-2639 6064 l
-2649 6051 l
-2658 6038 l
-2668 6024 l
-2677 6011 l
-2686 5997 l
-2696 5984 l
-2705 5970 l
-2714 5956 l
-2724 5943 l
-2733 5929 l
-2742 5915 l
-2751 5901 l
-2761 5887 l
-2770 5874 l
-2779 5860 l
-2788 5846 l
-2797 5832 l
-2806 5818 l
-2815 5804 l
-2824 5790 l
-2833 5775 l
-2842 5761 l
-2850 5747 l
-2859 5733 l
-2868 5719 l
-2877 5704 l
-2886 5690 l
-2894 5676 l
-2903 5661 l
-2912 5647 l
-2920 5633 l
-2929 5618 l
-2937 5604 l
-2946 5589 l
-2954 5574 l
-2963 5560 l
-2971 5545 l
-2979 5531 l
-2988 5516 l
-2996 5501 l
-3004 5487 l
-3012 5472 l
-3020 5457 l
-3028 5442 l
-3037 5427 l
-3045 5412 l
-3053 5398 l
-3061 5383 l
-3068 5368 l
-3076 5353 l
-3084 5338 l
-3092 5323 l
-3100 5308 l
-3108 5293 l
-3115 5278 l
-3123 5263 l
-3130 5247 l
-3138 5232 l
-3146 5217 l
-3153 5202 l
-3160 5187 l
-3168 5172 l
-3175 5156 l
-3183 5141 l
-3190 5126 l
-3197 5111 l
-3204 5095 l
-3211 5080 l
-3218 5065 l
-3225 5049 l
-3233 5034 l
-3239 5018 l
-3246 5003 l
-3253 4988 l
-3260 4972 l
-3267 4957 l
-3274 4941 l
-3280 4926 l
-3287 4910 l
-3294 4895 l
-3300 4879 l
-3307 4864 l
-3313 4848 l
-3320 4833 l
-3326 4817 l
-3332 4802 l
-3339 4786 l
-3345 4771 l
-3351 4755 l
-3357 4739 l
-3364 4724 l
-3370 4708 l
-3376 4693 l
-3382 4677 l
-3388 4661 l
-3393 4646 l
-3399 4630 l
-3405 4614 l
-3411 4599 l
-3417 4583 l
-3422 4567 l
-3428 4552 l
-3433 4536 l
-3439 4521 l
-3444 4505 l
-3450 4489 l
-3455 4474 l
-3461 4458 l
-3466 4442 l
-3471 4427 l
-3476 4411 l
-3481 4395 l
-3487 4380 l
-3492 4364 l
-3497 4348 l
-3502 4333 l
-3506 4317 l
-3511 4301 l
-3516 4286 l
-3521 4270 l
-3526 4254 l
-3530 4239 l
-3535 4223 l
-3540 4208 l
-3544 4192 l
-3549 4176 l
-3553 4161 l
-3557 4145 l
-3562 4130 l
-3566 4114 l
-3570 4098 l
-3574 4083 l
-3579 4067 l
-3583 4052 l
-3587 4036 l
-3591 4021 l
-3595 4005 l
-3599 3990 l
-3603 3974 l
-3606 3959 l
-3610 3943 l
-3614 3928 l
-3618 3912 l
-3621 3897 l
-3625 3882 l
-3628 3866 l
-3632 3851 l
-3635 3836 l
-3639 3820 l
-3642 3805 l
-3645 3790 l
-3649 3774 l
-3652 3759 l
-3655 3744 l
-3658 3728 l
-3661 3713 l
-3664 3698 l
-3667 3683 l
-3670 3668 l
-3673 3653 l
-3676 3637 l
-3679 3622 l
-3682 3607 l
-3684 3592 l
-3687 3577 l
-3690 3562 l
-3692 3547 l
-3695 3532 l
-3697 3517 l
-3700 3502 l
-3702 3487 l
-3705 3472 l
-3707 3457 l
-3709 3443 l
-3711 3428 l
-3714 3413 l
-3716 3398 l
-3718 3383 l
-3720 3369 l
-3722 3354 l
-3724 3339 l
-3726 3325 l
-3728 3310 l
-3730 3295 l
-3731 3281 l
-3733 3266 l
-3735 3252 l
-3737 3237 l
-3738 3223 l
-3740 3208 l
-3741 3194 l
-3743 3180 l
-3744 3165 l
-3746 3151 l
-S
-3746 3151 m
-3747 3137 l
-3749 3122 l
-3750 3108 l
-3751 3094 l
-3752 3080 l
-3754 3065 l
-3755 3051 l
-3756 3037 l
-3757 3023 l
-3758 3009 l
-3759 2995 l
-3760 2981 l
-3761 2967 l
-3762 2953 l
-3763 2940 l
-3763 2926 l
-3764 2912 l
-3765 2898 l
-3765 2884 l
-3766 2871 l
-3767 2857 l
-3767 2843 l
-3768 2830 l
-3768 2816 l
-3769 2803 l
-3769 2789 l
-3770 2776 l
-3770 2762 l
-3770 2749 l
-3771 2736 l
-3771 2722 l
-3771 2709 l
-3771 2696 l
-3771 2682 l
-3771 2669 l
-3772 2656 l
-3772 2643 l
-3772 2630 l
-3772 2617 l
-3771 2604 l
-3771 2591 l
-3771 2578 l
-3771 2565 l
-3771 2552 l
-3771 2539 l
-3770 2527 l
-3770 2514 l
-3770 2501 l
-3769 2488 l
-3769 2476 l
-3769 2463 l
-3768 2451 l
-3768 2438 l
-3767 2426 l
-3766 2413 l
-3766 2401 l
-3765 2389 l
-3765 2376 l
-3764 2364 l
-3763 2352 l
-3762 2339 l
-3762 2327 l
-3761 2315 l
-3760 2303 l
-3759 2291 l
-3758 2279 l
-3757 2267 l
-3756 2255 l
-3756 2243 l
-3755 2231 l
-3753 2220 l
-3752 2208 l
-3751 2196 l
-3750 2184 l
-3749 2173 l
-3748 2161 l
-3747 2150 l
-3745 2138 l
-3744 2127 l
-3743 2115 l
-3742 2104 l
-3740 2092 l
-3739 2081 l
-3738 2070 l
-3736 2058 l
-3735 2047 l
-3733 2036 l
-3732 2025 l
-3730 2014 l
-3729 2003 l
-3727 1992 l
-3726 1981 l
-3724 1970 l
-3722 1959 l
-3721 1948 l
-3719 1937 l
-3717 1927 l
-3716 1916 l
-3714 1905 l
-3712 1895 l
-3710 1884 l
-3709 1874 l
-3707 1863 l
-3705 1853 l
-3703 1842 l
-3701 1832 l
-3699 1821 l
-3697 1811 l
-3695 1801 l
-3693 1791 l
-3691 1780 l
-3691 1777 l
-S
-1826 1777 m
-1793 1806 l
-1747 1847 l
-1702 1889 l
-1657 1933 l
-1612 1979 l
-1567 2026 l
-1523 2075 l
-1478 2125 l
-1434 2177 l
-1389 2230 l
-1345 2285 l
-1301 2341 l
-1258 2398 l
-1214 2456 l
-1171 2515 l
-1128 2576 l
-1085 2637 l
-1042 2700 l
-1000 2763 l
-958 2827 l
-916 2893 l
-875 2959 l
-834 3025 l
-793 3093 l
-752 3161 l
-712 3230 l
-672 3299 l
-633 3369 l
-594 3439 l
-555 3510 l
-543 3532 l
-S
-2210 6121 m
-2215 6114 l
-2222 6106 l
-2228 6099 l
-2235 6091 l
-2241 6083 l
-2248 6076 l
-2254 6068 l
-2261 6060 l
-2267 6052 l
-2273 6044 l
-2280 6036 l
-2286 6029 l
-2293 6021 l
-2299 6013 l
-2305 6005 l
-2312 5997 l
-2318 5989 l
-2324 5981 l
-2331 5973 l
-2337 5965 l
-2343 5957 l
-2349 5948 l
-2356 5940 l
-2362 5932 l
-2368 5924 l
-2375 5916 l
-2381 5908 l
-2387 5899 l
-2393 5891 l
-2399 5883 l
-2406 5874 l
-2412 5866 l
-2418 5858 l
-2424 5849 l
-2430 5841 l
-2436 5833 l
-2442 5824 l
-2449 5816 l
-2455 5807 l
-2461 5799 l
-2467 5790 l
-2473 5782 l
-2479 5773 l
-2485 5764 l
-2491 5756 l
-2497 5747 l
-2503 5739 l
-2509 5730 l
-2515 5721 l
-2521 5713 l
-2527 5704 l
-2533 5695 l
-2539 5686 l
-2545 5678 l
-2550 5669 l
-2556 5660 l
-2562 5651 l
-2568 5642 l
-2574 5633 l
-2580 5625 l
-2586 5616 l
-2591 5607 l
-2597 5598 l
-2603 5589 l
-2609 5580 l
-2614 5571 l
-2620 5562 l
-2626 5553 l
-2631 5544 l
-2637 5535 l
-2643 5526 l
-2648 5517 l
-2654 5508 l
-2660 5498 l
-2665 5489 l
-2671 5480 l
-2676 5471 l
-2682 5462 l
-2687 5453 l
-2693 5443 l
-2698 5434 l
-2704 5425 l
-2709 5416 l
-2715 5406 l
-2720 5397 l
-2725 5388 l
-2731 5378 l
-2736 5369 l
-2742 5360 l
-2747 5350 l
-2752 5341 l
-2757 5332 l
-2763 5322 l
-2768 5313 l
-2773 5303 l
-2778 5294 l
-2784 5284 l
-2789 5275 l
-2794 5265 l
-2799 5256 l
-2804 5246 l
-2809 5237 l
-2814 5227 l
-2820 5218 l
-2825 5208 l
-2830 5199 l
-2835 5189 l
-2840 5179 l
-2845 5170 l
-2850 5160 l
-2854 5151 l
-2859 5141 l
-2864 5131 l
-2869 5122 l
-2874 5112 l
-2879 5102 l
-2884 5093 l
-2888 5083 l
-2893 5073 l
-2898 5063 l
-2903 5054 l
-2907 5044 l
-2912 5034 l
-2917 5024 l
-2921 5015 l
-2926 5005 l
-2931 4995 l
-2935 4985 l
-2940 4976 l
-2944 4966 l
-2949 4956 l
-2953 4946 l
-2958 4936 l
-2962 4926 l
-2967 4917 l
-2971 4907 l
-2976 4897 l
-2980 4887 l
-2984 4877 l
-2989 4867 l
-2993 4857 l
-2997 4847 l
-3001 4838 l
-3006 4828 l
-3010 4818 l
-3014 4808 l
-3018 4798 l
-3022 4788 l
-3027 4778 l
-3031 4768 l
-3035 4758 l
-3039 4748 l
-3043 4738 l
-3047 4728 l
-3051 4718 l
-3055 4708 l
-3059 4698 l
-3063 4688 l
-3067 4678 l
-3071 4669 l
-3074 4659 l
-3078 4649 l
-3082 4639 l
-3086 4629 l
-3090 4619 l
-3093 4609 l
-3097 4599 l
-3101 4589 l
-3104 4579 l
-3108 4569 l
-3112 4559 l
-3115 4549 l
-3119 4539 l
-3123 4529 l
-3126 4519 l
-3130 4509 l
-3133 4499 l
-3137 4489 l
-3140 4479 l
-3143 4469 l
-3147 4459 l
-3150 4449 l
-3153 4439 l
-3157 4429 l
-3160 4419 l
-3163 4409 l
-3167 4399 l
-3170 4389 l
-3173 4379 l
-3176 4369 l
-3179 4359 l
-3183 4349 l
-3186 4339 l
-3189 4329 l
-3192 4319 l
-3195 4309 l
-3198 4299 l
-3201 4289 l
-3204 4279 l
-S
-3204 4279 m
-3207 4269 l
-3210 4259 l
-3213 4249 l
-3216 4239 l
-3218 4229 l
-3221 4219 l
-3224 4209 l
-3227 4199 l
-3230 4189 l
-3232 4180 l
-3235 4170 l
-3238 4160 l
-3240 4150 l
-3243 4140 l
-3246 4130 l
-3248 4120 l
-3251 4110 l
-3253 4100 l
-3256 4091 l
-3258 4081 l
-3261 4071 l
-3263 4061 l
-3266 4051 l
-3268 4041 l
-3270 4031 l
-3273 4022 l
-3275 4012 l
-3277 4002 l
-3280 3992 l
-3282 3982 l
-3284 3973 l
-3286 3963 l
-3289 3953 l
-3291 3943 l
-3293 3934 l
-3295 3924 l
-3297 3914 l
-3299 3904 l
-3301 3895 l
-3303 3885 l
-3305 3875 l
-3307 3866 l
-3309 3856 l
-3311 3846 l
-3313 3837 l
-3315 3827 l
-3317 3817 l
-3319 3808 l
-3320 3798 l
-3322 3788 l
-3324 3779 l
-3326 3769 l
-3328 3760 l
-3329 3750 l
-3331 3741 l
-3333 3731 l
-3334 3722 l
-3336 3712 l
-3337 3702 l
-3339 3693 l
-3340 3684 l
-3342 3674 l
-3343 3665 l
-3345 3655 l
-3346 3646 l
-3348 3636 l
-3349 3627 l
-3351 3618 l
-3352 3608 l
-3353 3599 l
-3355 3589 l
-3356 3580 l
-3357 3571 l
-3358 3561 l
-3360 3552 l
-3361 3543 l
-3362 3534 l
-3363 3524 l
-3364 3515 l
-3365 3506 l
-3367 3497 l
-3368 3488 l
-3369 3478 l
-3370 3469 l
-3371 3460 l
-3372 3451 l
-3373 3442 l
-3374 3433 l
-3375 3424 l
-3375 3415 l
-3376 3405 l
-3377 3396 l
-3378 3387 l
-3379 3378 l
-3380 3369 l
-3380 3360 l
-3381 3351 l
-3382 3342 l
-3383 3334 l
-3383 3325 l
-3384 3316 l
-3385 3307 l
-3385 3298 l
-3386 3289 l
-3386 3280 l
-3387 3272 l
-3387 3263 l
-3388 3254 l
-3389 3245 l
-3389 3236 l
-3389 3228 l
-3390 3219 l
-3390 3210 l
-3391 3202 l
-3391 3193 l
-3391 3184 l
-3392 3176 l
-3392 3167 l
-3392 3159 l
-3393 3150 l
-3393 3141 l
-3393 3133 l
-3393 3124 l
-3394 3116 l
-3394 3107 l
-3394 3099 l
-3394 3091 l
-3394 3082 l
-3394 3074 l
-3394 3065 l
-3394 3057 l
-3395 3049 l
-3395 3040 l
-3395 3032 l
-3395 3024 l
-3395 3016 l
-3394 3007 l
-3394 2999 l
-3394 2991 l
-3394 2983 l
-3394 2975 l
-3394 2966 l
-3394 2958 l
-3394 2950 l
-3393 2942 l
-3393 2934 l
-3393 2926 l
-3393 2918 l
-3393 2910 l
-3392 2902 l
-3392 2894 l
-3392 2886 l
-3391 2878 l
-3391 2870 l
-3391 2862 l
-3390 2855 l
-3390 2847 l
-3389 2839 l
-3389 2831 l
-3388 2823 l
-3388 2816 l
-3387 2808 l
-3387 2800 l
-3386 2793 l
-3386 2785 l
-3385 2777 l
-3385 2770 l
-3384 2762 l
-3384 2754 l
-3383 2747 l
-3382 2739 l
-3382 2732 l
-3381 2724 l
-3380 2717 l
-3380 2709 l
-3379 2702 l
-3378 2695 l
-3377 2687 l
-3377 2680 l
-3376 2672 l
-3375 2665 l
-3374 2658 l
-3373 2651 l
-3373 2643 l
-3372 2636 l
-3371 2629 l
-3370 2622 l
-3369 2615 l
-3368 2607 l
-3367 2600 l
-3366 2593 l
-3365 2586 l
-3364 2579 l
-3363 2572 l
-3362 2565 l
-3361 2558 l
-3360 2551 l
-3359 2544 l
-3358 2537 l
-S
-3358 2537 m
-3357 2530 l
-3356 2523 l
-3355 2517 l
-3354 2510 l
-3352 2503 l
-3351 2496 l
-3350 2489 l
-3349 2483 l
-3348 2476 l
-3347 2469 l
-3345 2463 l
-3344 2456 l
-3343 2449 l
-3342 2443 l
-3340 2436 l
-3339 2430 l
-3338 2423 l
-3336 2417 l
-3335 2410 l
-3334 2404 l
-3332 2397 l
-3331 2391 l
-3330 2384 l
-3328 2378 l
-3327 2372 l
-3325 2365 l
-3324 2359 l
-3322 2353 l
-3321 2347 l
-3319 2340 l
-3318 2334 l
-3316 2328 l
-3315 2322 l
-3313 2316 l
-3312 2310 l
-3310 2303 l
-3309 2297 l
-3307 2291 l
-3306 2285 l
-3304 2279 l
-3302 2273 l
-3301 2267 l
-3299 2261 l
-3298 2256 l
-3296 2250 l
-3294 2244 l
-3293 2238 l
-3291 2232 l
-3289 2226 l
-3287 2221 l
-3286 2215 l
-3284 2209 l
-3282 2203 l
-3281 2198 l
-3279 2192 l
-3277 2187 l
-3275 2181 l
-3273 2175 l
-3272 2170 l
-3270 2164 l
-3268 2159 l
-3266 2153 l
-3264 2148 l
-3262 2142 l
-3261 2137 l
-3259 2132 l
-3257 2126 l
-3255 2121 l
-3253 2116 l
-3251 2110 l
-3249 2105 l
-3247 2100 l
-3245 2094 l
-3243 2089 l
-3241 2084 l
-3239 2079 l
-3237 2074 l
-3235 2069 l
-3233 2064 l
-3231 2059 l
-3229 2053 l
-3227 2048 l
-3225 2043 l
-3223 2038 l
-3221 2034 l
-3219 2029 l
-3217 2024 l
-3215 2019 l
-3213 2014 l
-3211 2009 l
-3208 2004 l
-3206 1999 l
-3204 1995 l
-3202 1990 l
-3200 1985 l
-3198 1981 l
-3196 1976 l
-3193 1971 l
-3191 1967 l
-3189 1962 l
-3187 1957 l
-3185 1953 l
-3182 1948 l
-3180 1944 l
-3178 1939 l
-3176 1935 l
-3173 1930 l
-3171 1926 l
-3169 1922 l
-3167 1917 l
-3164 1913 l
-3162 1908 l
-3160 1904 l
-3157 1900 l
-3155 1896 l
-3153 1891 l
-3150 1887 l
-3148 1883 l
-3146 1879 l
-3143 1875 l
-3141 1870 l
-3139 1866 l
-3136 1862 l
-3134 1858 l
-3131 1854 l
-3129 1850 l
-3127 1846 l
-3124 1842 l
-3122 1838 l
-3119 1834 l
-3117 1830 l
-3114 1827 l
-3112 1823 l
-3110 1819 l
-3107 1815 l
-3105 1811 l
-3102 1807 l
-3100 1804 l
-3097 1800 l
-3095 1796 l
-3092 1793 l
-3090 1789 l
-3087 1785 l
-3085 1782 l
-3082 1778 l
-3082 1777 l
-S
-2296 2538 m
-2295 2538 l
-2295 2538 l
-2295 2538 l
-2293 2538 l
-2290 2538 l
-2258 2546 l
-2226 2555 l
-2193 2565 l
-2160 2578 l
-2126 2593 l
-2093 2609 l
-2060 2627 l
-2026 2647 l
-1992 2668 l
-1958 2691 l
-1925 2715 l
-1891 2741 l
-1857 2769 l
-1823 2798 l
-1789 2828 l
-1755 2859 l
-1721 2892 l
-1687 2926 l
-1654 2962 l
-1620 2998 l
-1587 3036 l
-1554 3074 l
-1520 3114 l
-1487 3155 l
-1455 3197 l
-1422 3239 l
-1390 3283 l
-1357 3327 l
-1325 3372 l
-1294 3418 l
-1262 3465 l
-1231 3512 l
-1200 3560 l
-1170 3609 l
-1140 3658 l
-1110 3708 l
-1080 3759 l
-1051 3809 l
-1022 3861 l
-994 3912 l
-966 3964 l
-939 4017 l
-912 4070 l
-885 4122 l
-859 4176 l
-834 4229 l
-809 4283 l
-784 4336 l
-760 4390 l
-737 4444 l
-714 4498 l
-692 4552 l
-671 4606 l
-650 4659 l
-630 4713 l
-610 4767 l
-592 4820 l
-574 4873 l
-557 4926 l
-543 4969 l
-S
-1633 6121 m
-1679 6086 l
-1733 6042 l
-1787 5995 l
-1841 5945 l
-1895 5893 l
-1949 5839 l
-2003 5782 l
-2056 5722 l
-2109 5660 l
-2161 5596 l
-2212 5530 l
-2262 5461 l
-2311 5391 l
-2359 5319 l
-2405 5245 l
-2450 5170 l
-2494 5093 l
-2536 5015 l
-2576 4936 l
-2614 4857 l
-2650 4776 l
-2685 4695 l
-2717 4614 l
-2747 4532 l
-2775 4450 l
-2801 4369 l
-2825 4288 l
-2846 4207 l
-2866 4127 l
-2883 4048 l
-2897 3970 l
-2910 3893 l
-2920 3818 l
-2929 3743 l
-2935 3671 l
-2939 3600 l
-2941 3531 l
-2941 3463 l
-2939 3398 l
-2936 3335 l
-2930 3274 l
-2923 3215 l
-2914 3159 l
-2904 3104 l
-2892 3053 l
-2878 3003 l
-2863 2956 l
-2847 2912 l
-2829 2870 l
-2811 2830 l
-2791 2793 l
-2770 2759 l
-2748 2727 l
-2724 2697 l
-2701 2670 l
-2676 2645 l
-2650 2623 l
-2624 2604 l
-2597 2586 l
-2569 2571 l
-2540 2559 l
-2511 2548 l
-2482 2540 l
-2452 2535 l
-2421 2531 l
-2391 2529 l
-2359 2530 l
-2328 2533 l
-2296 2538 l
-S
-2149 3569 m
-2149 3569 l
-2149 3569 l
-2149 3569 l
-2148 3569 l
-2147 3569 l
-2130 3570 l
-2114 3571 l
-2096 3573 l
-2079 3577 l
-2062 3581 l
-2044 3587 l
-2026 3594 l
-2008 3601 l
-1990 3610 l
-1971 3619 l
-1953 3629 l
-1934 3641 l
-1915 3653 l
-1897 3666 l
-1878 3680 l
-1859 3695 l
-1840 3710 l
-1821 3726 l
-1802 3744 l
-1783 3761 l
-1764 3780 l
-1745 3799 l
-1726 3819 l
-1708 3840 l
-1689 3861 l
-1670 3883 l
-1652 3906 l
-1633 3929 l
-1615 3952 l
-1597 3976 l
-1579 4001 l
-1562 4026 l
-1544 4052 l
-1527 4078 l
-1510 4104 l
-1493 4131 l
-1476 4158 l
-1460 4186 l
-1444 4213 l
-1428 4242 l
-1413 4270 l
-1397 4299 l
-1383 4327 l
-1368 4356 l
-1354 4385 l
-1340 4415 l
-1326 4444 l
-1313 4474 l
-1301 4503 l
-1288 4533 l
-1276 4563 l
-1265 4592 l
-1254 4622 l
-1243 4651 l
-1233 4681 l
-1224 4710 l
-1215 4739 l
-1206 4768 l
-1198 4797 l
-1190 4826 l
-1183 4854 l
-1176 4883 l
-1170 4910 l
-1165 4938 l
-1160 4965 l
-1156 4992 l
-1152 5019 l
-1149 5045 l
-1146 5071 l
-1144 5096 l
-1143 5121 l
-1142 5145 l
-1142 5169 l
-1143 5192 l
-1144 5215 l
-1146 5237 l
-1148 5258 l
-1151 5279 l
-1155 5299 l
-1160 5318 l
-1165 5337 l
-1171 5355 l
-1178 5372 l
-1185 5388 l
-1193 5404 l
-1201 5419 l
-1211 5432 l
-1220 5445 l
-1231 5458 l
-1242 5469 l
-1254 5479 l
-1267 5488 l
-1280 5496 l
-1294 5504 l
-1309 5510 l
-1324 5515 l
-1340 5519 l
-1356 5523 l
-1373 5525 l
-1390 5526 l
-1408 5525 l
-1427 5524 l
-1446 5522 l
-1466 5518 l
-1486 5513 l
-1506 5508 l
-1527 5501 l
-1549 5492 l
-1571 5483 l
-1593 5473 l
-1615 5461 l
-1638 5448 l
-1661 5434 l
-1684 5419 l
-1708 5403 l
-1731 5385 l
-1755 5367 l
-1779 5347 l
-1803 5326 l
-1826 5304 l
-1850 5282 l
-1874 5258 l
-1898 5233 l
-1921 5207 l
-1945 5180 l
-1968 5153 l
-1991 5124 l
-2014 5095 l
-2036 5065 l
-2058 5034 l
-2079 5002 l
-2101 4970 l
-2121 4937 l
-2141 4904 l
-2161 4870 l
-2180 4835 l
-2199 4800 l
-2216 4765 l
-2234 4729 l
-2250 4694 l
-2266 4657 l
-2281 4621 l
-2295 4585 l
-2309 4549 l
-2322 4512 l
-2334 4476 l
-2345 4440 l
-2355 4404 l
-2365 4368 l
-2373 4333 l
-2381 4298 l
-2388 4263 l
-2394 4229 l
-2400 4195 l
-2404 4162 l
-2408 4129 l
-2410 4097 l
-2412 4066 l
-2413 4035 l
-2414 4005 l
-2413 3976 l
-2412 3948 l
-2410 3920 l
-2407 3894 l
-2403 3868 l
-2399 3844 l
-2393 3820 l
-2388 3797 l
-2381 3775 l
-2374 3755 l
-2366 3735 l
-2357 3716 l
-2348 3699 l
-2338 3682 l
-2328 3667 l
-2317 3653 l
-2306 3640 l
-2294 3628 l
-2281 3617 l
-2268 3607 l
-2255 3599 l
-2241 3591 l
-2227 3585 l
-2212 3579 l
-2197 3575 l
-2181 3572 l
-2166 3570 l
-2149 3569 l
-S
-543 1777 m
-853 1777 l
-1164 1777 l
-1474 1777 l
-1784 1777 l
-2094 1777 l
-2405 1777 l
-2715 1777 l
-3025 1777 l
-3335 1777 l
-3646 1777 l
-3956 1777 l
-4266 1777 l
-4288 1777 l
-4310 1777 l
-4333 1777 l
-4355 1777 l
-4377 1777 l
-4399 1777 l
-4421 1777 l
-4443 1777 l
-4466 1777 l
-4488 1777 l
-4489 1777 l
-4491 1777 l
-4492 1777 l
-4494 1777 l
-4496 1777 l
-4497 1777 l
-4499 1777 l
-4500 1777 l
-4502 1777 l
-4502 1777 l
-4502 1777 l
-4502 1777 l
-S
-3299 6121 m
-3299 6121 l
-3299 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3297 6121 l
-3296 6121 l
-3294 6121 l
-3293 6121 l
-3291 6121 l
-3269 6121 l
-3247 6121 l
-3225 6121 l
-3202 6121 l
-3180 6121 l
-3158 6121 l
-3136 6121 l
-3114 6121 l
-3092 6121 l
-3069 6121 l
-3047 6121 l
-3025 6121 l
-2715 6121 l
-2405 6121 l
-2094 6121 l
-1784 6121 l
-1474 6121 l
-1164 6121 l
-853 6121 l
-543 6121 l
-S
-543 6121 m
-543 5811 l
-543 5500 l
-543 5190 l
-543 4880 l
-543 4570 l
-543 4259 l
-543 3949 l
-543 3639 l
-543 3329 l
-543 3018 l
-543 2708 l
-543 2398 l
-543 2088 l
-543 1777 l
-S
-4505 1818 m
-4505 1813 l
-4505 1809 l
-4505 1804 l
-4505 1800 l
-4505 1795 l
-4505 1791 l
-4505 1786 l
-4505 1782 l
-4505 1777 l
-S
-4505 1858 m
-4505 1853 l
-4505 1849 l
-4505 1845 l
-4505 1840 l
-4505 1836 l
-4505 1831 l
-4505 1827 l
-4505 1822 l
-4505 1818 l
-S
-4505 1898 m
-4505 1894 l
-4505 1889 l
-4505 1885 l
-4505 1880 l
-4505 1876 l
-4505 1871 l
-4505 1867 l
-4505 1862 l
-4505 1858 l
-S
-4505 1938 m
-4505 1934 l
-4505 1929 l
-4505 1925 l
-4505 1920 l
-4505 1916 l
-4505 1912 l
-4505 1907 l
-4505 1903 l
-4505 1898 l
-S
-4500 1979 m
-4500 1974 l
-4500 1970 l
-4500 1965 l
-4500 1961 l
-4500 1956 l
-4500 1952 l
-4502 1950 l
-4505 1947 l
-4505 1943 l
-4505 1938 l
-S
-4500 2019 m
-4500 2014 l
-4500 2010 l
-4500 2005 l
-4500 2001 l
-4500 1996 l
-4500 1992 l
-4500 1988 l
-4500 1983 l
-4500 1979 l
-S
-4500 2059 m
-4500 2055 l
-4500 2050 l
-4500 2046 l
-4500 2041 l
-4500 2037 l
-4500 2032 l
-4500 2028 l
-4500 2023 l
-4500 2019 l
-S
-4500 2099 m
-4500 2095 l
-4500 2090 l
-4500 2086 l
-4500 2081 l
-4500 2077 l
-4500 2072 l
-4500 2068 l
-4500 2063 l
-4500 2059 l
-S
-4500 2139 m
-4500 2135 l
-4500 2131 l
-4500 2126 l
-4500 2122 l
-4500 2117 l
-4500 2113 l
-4500 2108 l
-4500 2104 l
-4500 2099 l
-S
-4496 2180 m
-4496 2175 l
-4496 2171 l
-4496 2166 l
-4496 2162 l
-4496 2157 l
-4496 2153 l
-4496 2148 l
-4498 2146 l
-4500 2144 l
-4500 2139 l
-S
-4496 2220 m
-4496 2215 l
-4496 2211 l
-4496 2206 l
-4496 2202 l
-4496 2198 l
-4496 2193 l
-4496 2189 l
-4496 2184 l
-4496 2180 l
-S
-4491 2260 m
-4491 2256 l
-4493 2253 l
-4496 2251 l
-4496 2247 l
-4496 2242 l
-4496 2238 l
-4496 2233 l
-4496 2229 l
-4496 2224 l
-4496 2220 l
-S
-4491 2300 m
-4491 2296 l
-4491 2291 l
-4491 2287 l
-4491 2282 l
-4491 2278 l
-4491 2274 l
-4491 2269 l
-4491 2265 l
-4491 2260 l
-S
-4487 2341 m
-4489 2338 l
-4491 2336 l
-4491 2332 l
-4491 2327 l
-4491 2323 l
-4491 2318 l
-4491 2314 l
-4491 2309 l
-4491 2305 l
-4491 2300 l
-S
-4487 2341 m
-4487 2345 l
-4487 2349 l
-4487 2354 l
-4487 2358 l
-4487 2363 l
-4487 2367 l
-4487 2372 l
-4487 2376 l
-4487 2381 l
-S
-4482 2421 m
-4482 2416 l
-4482 2412 l
-4484 2410 l
-S
-4487 2381 m
-4487 2385 l
-4487 2390 l
-4487 2394 l
-4487 2399 l
-4487 2403 l
-4487 2408 l
-4484 2410 l
-S
-4482 2461 m
-4482 2457 l
-4482 2452 l
-4482 2448 l
-4482 2443 l
-4482 2439 l
-4482 2434 l
-4482 2430 l
-4482 2425 l
-4482 2421 l
-S
-4478 2501 m
-4478 2497 l
-4478 2492 l
-4478 2488 l
-4478 2484 l
-4478 2479 l
-4478 2475 l
-4480 2472 l
-4482 2470 l
-4482 2466 l
-4482 2461 l
-S
-4473 2542 m
-4473 2537 l
-4473 2533 l
-4473 2528 l
-4476 2526 l
-4478 2524 l
-4478 2519 l
-4478 2515 l
-4478 2510 l
-4478 2506 l
-4478 2501 l
-S
-4469 2582 m
-4471 2580 l
-4473 2577 l
-4473 2573 l
-4473 2568 l
-4473 2564 l
-4473 2559 l
-4473 2555 l
-4473 2551 l
-4473 2546 l
-4473 2542 l
-S
-4469 2622 m
-4469 2618 l
-4469 2613 l
-4469 2609 l
-4469 2604 l
-4469 2600 l
-4469 2595 l
-4469 2591 l
-4469 2586 l
-4469 2582 l
-S
-4464 2662 m
-4464 2658 l
-4464 2653 l
-4464 2649 l
-4464 2644 l
-4464 2640 l
-4464 2635 l
-4464 2631 l
-4467 2629 l
-4469 2627 l
-4469 2622 l
-S
-4460 2702 m
-4460 2698 l
-4460 2694 l
-4460 2689 l
-4460 2685 l
-4460 2680 l
-4460 2676 l
-4462 2673 l
-4464 2671 l
-4464 2667 l
-4464 2662 l
-S
-4455 2743 m
-4455 2738 l
-4455 2734 l
-4455 2729 l
-4455 2725 l
-4455 2720 l
-4458 2718 l
-4460 2716 l
-4460 2711 l
-4460 2707 l
-4460 2702 l
-S
-4451 2783 m
-4451 2778 l
-4451 2774 l
-4451 2770 l
-4451 2765 l
-4451 2761 l
-4453 2758 l
-4455 2756 l
-4455 2752 l
-4455 2747 l
-4455 2743 l
-S
-4446 2823 m
-4446 2819 l
-4446 2814 l
-4446 2810 l
-4446 2805 l
-4446 2801 l
-4449 2799 l
-4451 2796 l
-4451 2792 l
-4451 2787 l
-4451 2783 l
-S
-4442 2863 m
-4442 2859 l
-4442 2854 l
-4442 2850 l
-4442 2845 l
-4442 2841 l
-4444 2839 l
-S
-4446 2823 m
-4446 2828 l
-4446 2832 l
-4446 2837 l
-4444 2839 l
-S
-4438 2904 m
-4438 2899 l
-4438 2895 l
-4438 2890 l
-4438 2886 l
-4438 2881 l
-4438 2877 l
-4440 2875 l
-4442 2872 l
-4442 2868 l
-4442 2863 l
-S
-4429 2944 m
-4431 2942 l
-4433 2939 l
-4433 2935 l
-4433 2930 l
-4433 2926 l
-4433 2921 l
-4433 2917 l
-4433 2913 l
-4435 2910 l
-4438 2908 l
-4438 2904 l
-S
-4424 2984 m
-4424 2980 l
-4424 2975 l
-4426 2973 l
-4429 2971 l
-4429 2966 l
-4429 2962 l
-4429 2957 l
-4429 2953 l
-4429 2948 l
-4429 2944 l
-S
-4420 3024 m
-4420 3020 l
-4420 3015 l
-4420 3011 l
-4422 3009 l
-4424 3006 l
-4424 3002 l
-4424 2997 l
-4424 2993 l
-4424 2988 l
-4424 2984 l
-S
-4415 3064 m
-4415 3060 l
-4415 3056 l
-4415 3051 l
-4415 3047 l
-4415 3042 l
-4417 3040 l
-4420 3038 l
-4420 3033 l
-4420 3029 l
-4420 3024 l
-S
-4406 3105 m
-4406 3100 l
-4408 3098 l
-4411 3096 l
-4411 3091 l
-4411 3087 l
-4411 3082 l
-4411 3078 l
-4411 3073 l
-4411 3069 l
-4413 3067 l
-4415 3064 l
-S
-4402 3145 m
-4402 3140 l
-4402 3136 l
-4402 3131 l
-4402 3127 l
-4404 3125 l
-S
-4406 3105 m
-4406 3109 l
-4406 3114 l
-4406 3118 l
-4406 3123 l
-4404 3125 l
-S
-4393 3185 m
-4395 3183 l
-4397 3181 l
-4397 3176 l
-4397 3172 l
-4397 3167 l
-4397 3163 l
-4397 3158 l
-4400 3156 l
-4402 3154 l
-4402 3149 l
-4402 3145 l
-S
-4388 3225 m
-4388 3221 l
-4388 3216 l
-4388 3212 l
-4391 3210 l
-4393 3207 l
-4393 3203 l
-4393 3199 l
-4393 3194 l
-4393 3190 l
-4393 3185 l
-S
-4379 3266 m
-4379 3261 l
-4382 3259 l
-4384 3257 l
-4384 3252 l
-4384 3248 l
-4384 3243 l
-4384 3239 l
-4386 3236 l
-4388 3234 l
-4388 3230 l
-4388 3225 l
-S
-4375 3306 m
-4375 3301 l
-4375 3297 l
-4375 3292 l
-4375 3288 l
-4377 3286 l
-4379 3283 l
-4379 3279 l
-4379 3274 l
-4379 3270 l
-4379 3266 l
-S
-4366 3346 m
-4366 3341 l
-4366 3337 l
-4368 3335 l
-4370 3333 l
-4370 3328 l
-4370 3324 l
-4370 3319 l
-4370 3315 l
-4373 3312 l
-4375 3310 l
-4375 3306 l
-S
-4357 3386 m
-4359 3384 l
-4362 3382 l
-4362 3377 l
-4362 3373 l
-4362 3368 l
-4362 3364 l
-4364 3362 l
-S
-4366 3346 m
-4366 3350 l
-4366 3355 l
-4366 3359 l
-4364 3362 l
-S
-4353 3426 m
-4353 3422 l
-4353 3417 l
-4353 3413 l
-4353 3409 l
-4355 3406 l
-4357 3404 l
-4357 3400 l
-4357 3395 l
-4357 3391 l
-4357 3386 l
-S
-4344 3467 m
-4344 3462 l
-4344 3458 l
-4344 3453 l
-4346 3451 l
-4348 3449 l
-4348 3444 l
-4348 3440 l
-4348 3435 l
-4348 3431 l
-4350 3429 l
-4353 3426 l
-S
-4335 3507 m
-4335 3502 l
-4335 3498 l
-4337 3496 l
-4339 3493 l
-4339 3489 l
-4339 3484 l
-4339 3480 l
-4339 3476 l
-4341 3473 l
-4344 3471 l
-4344 3467 l
-S
-4326 3547 m
-4326 3543 l
-4328 3540 l
-4330 3538 l
-4330 3534 l
-4330 3529 l
-4330 3525 l
-4330 3520 l
-4333 3518 l
-4335 3516 l
-4335 3511 l
-4335 3507 l
-S
-4317 3587 m
-4317 3583 l
-4319 3581 l
-4321 3578 l
-4321 3574 l
-4321 3569 l
-4321 3565 l
-4324 3563 l
-S
-4326 3547 m
-4326 3552 l
-4326 3556 l
-4326 3560 l
-4324 3563 l
-S
-4308 3627 m
-4308 3623 l
-4310 3621 l
-4312 3619 l
-4312 3614 l
-4312 3610 l
-4312 3605 l
-4315 3603 l
-4317 3601 l
-4317 3596 l
-4317 3592 l
-4317 3587 l
-S
-4299 3668 m
-4299 3663 l
-4301 3661 l
-4303 3659 l
-4303 3654 l
-4303 3650 l
-4303 3645 l
-4306 3643 l
-4308 3641 l
-4308 3636 l
-4308 3632 l
-4308 3627 l
-S
-4290 3708 m
-4290 3703 l
-4292 3701 l
-4295 3699 l
-4295 3695 l
-4295 3690 l
-4295 3686 l
-4297 3683 l
-4299 3681 l
-4299 3677 l
-4299 3672 l
-4299 3668 l
-S
-4281 3748 m
-4281 3744 l
-4281 3739 l
-4283 3737 l
-S
-4283 3737 m
-4286 3735 l
-4286 3730 l
-4286 3726 l
-4286 3721 l
-4288 3719 l
-4290 3717 l
-4290 3712 l
-4290 3708 l
-S
-4272 3788 m
-4272 3784 l
-4272 3779 l
-4274 3777 l
-4277 3775 l
-4277 3770 l
-4277 3766 l
-4277 3762 l
-4279 3759 l
-4281 3757 l
-4281 3753 l
-4281 3748 l
-S
-4263 3829 m
-4263 3824 l
-4263 3820 l
-4263 3815 l
-4265 3813 l
-4268 3811 l
-4268 3806 l
-4268 3802 l
-4268 3797 l
-4270 3795 l
-4272 3793 l
-4272 3788 l
-S
-4250 3869 m
-4252 3867 l
-4254 3864 l
-4254 3860 l
-4254 3855 l
-4254 3851 l
-4257 3849 l
-4259 3846 l
-4259 3842 l
-4259 3838 l
-4259 3833 l
-4261 3831 l
-4263 3829 l
-S
-4241 3909 m
-4241 3905 l
-4243 3902 l
-S
-4243 3902 m
-4245 3900 l
-4245 3896 l
-4245 3891 l
-4245 3887 l
-4248 3884 l
-4250 3882 l
-4250 3878 l
-4250 3873 l
-4250 3869 l
-S
-4232 3949 m
-4232 3945 l
-4232 3940 l
-4232 3936 l
-4234 3934 l
-4236 3931 l
-4236 3927 l
-4236 3922 l
-4239 3920 l
-4241 3918 l
-4241 3913 l
-4241 3909 l
-S
-4219 3989 m
-4221 3987 l
-4223 3985 l
-4223 3981 l
-4223 3976 l
-4223 3972 l
-4225 3969 l
-4228 3967 l
-4228 3963 l
-4228 3958 l
-4228 3954 l
-4230 3951 l
-4232 3949 l
-S
-4210 4030 m
-4210 4025 l
-4210 4021 l
-4212 4018 l
-4214 4016 l
-4214 4012 l
-4214 4007 l
-4214 4003 l
-4216 4001 l
-4219 3998 l
-4219 3994 l
-4219 3989 l
-S
-4196 4070 m
-4198 4068 l
-4201 4065 l
-4201 4061 l
-4201 4056 l
-4201 4052 l
-4203 4050 l
-S
-4203 4050 m
-4205 4048 l
-4205 4043 l
-4205 4039 l
-4207 4036 l
-4210 4034 l
-4210 4030 l
-S
-4187 4110 m
-4187 4106 l
-4187 4101 l
-4190 4099 l
-4192 4097 l
-4192 4092 l
-4192 4088 l
-4192 4083 l
-4194 4081 l
-4196 4079 l
-4196 4074 l
-4196 4070 l
-S
-4174 4150 m
-4174 4146 l
-4176 4144 l
-4178 4141 l
-4178 4137 l
-4178 4132 l
-4181 4130 l
-4183 4128 l
-4183 4124 l
-4183 4119 l
-4183 4115 l
-4185 4112 l
-4187 4110 l
-S
-4160 4191 m
-4163 4188 l
-S
-4163 4188 m
-4165 4186 l
-4165 4182 l
-4165 4177 l
-4167 4175 l
-4169 4173 l
-4169 4168 l
-4169 4164 l
-4172 4161 l
-4174 4159 l
-4174 4155 l
-4174 4150 l
-S
-4152 4231 m
-4152 4226 l
-4152 4222 l
-4154 4220 l
-4156 4217 l
-4156 4213 l
-4156 4208 l
-4158 4206 l
-4160 4204 l
-4160 4199 l
-4160 4195 l
-4160 4191 l
-S
-4138 4271 m
-4138 4266 l
-4140 4264 l
-4143 4262 l
-4143 4258 l
-4143 4253 l
-4145 4251 l
-4147 4249 l
-4147 4244 l
-4147 4240 l
-4147 4235 l
-4149 4233 l
-4152 4231 l
-S
-4125 4311 m
-4125 4307 l
-4127 4304 l
-4129 4302 l
-4129 4298 l
-4129 4293 l
-4131 4291 l
-4134 4289 l
-4134 4284 l
-4134 4280 l
-4136 4278 l
-4138 4275 l
-4138 4271 l
-S
-4111 4351 m
-4114 4349 l
-4116 4347 l
-4116 4342 l
-4116 4338 l
-4118 4336 l
-4120 4334 l
-4120 4329 l
-4120 4325 l
-4122 4322 l
-S
-4125 4311 m
-4125 4316 l
-4125 4320 l
-4122 4322 l
-S
-4098 4392 m
-4100 4389 l
-4102 4387 l
-4102 4383 l
-4102 4378 l
-4105 4376 l
-4107 4374 l
-4107 4369 l
-4107 4365 l
-4109 4363 l
-4111 4360 l
-4111 4356 l
-4111 4351 l
-S
-4085 4432 m
-4087 4430 l
-4089 4427 l
-4089 4423 l
-4089 4418 l
-4091 4416 l
-4093 4414 l
-4093 4409 l
-4093 4405 l
-4096 4403 l
-4098 4401 l
-4098 4396 l
-4098 4392 l
-S
-4071 4472 m
-4073 4470 l
-4076 4468 l
-4076 4463 l
-4076 4459 l
-4078 4456 l
-4080 4454 l
-4080 4450 l
-4080 4445 l
-4082 4443 l
-S
-4085 4432 m
-4085 4436 l
-4085 4441 l
-4082 4443 l
-S
-4058 4512 m
-4060 4510 l
-4062 4508 l
-4062 4503 l
-4062 4499 l
-4064 4497 l
-4067 4494 l
-4067 4490 l
-4067 4485 l
-4069 4483 l
-4071 4481 l
-4071 4477 l
-4071 4472 l
-S
-4044 4552 m
-4047 4550 l
-4049 4548 l
-4049 4544 l
-4049 4539 l
-4051 4537 l
-4053 4535 l
-4053 4530 l
-4053 4526 l
-4055 4523 l
-4058 4521 l
-4058 4517 l
-4058 4512 l
-S
-4031 4593 m
-4031 4588 l
-4033 4586 l
-4035 4584 l
-4035 4579 l
-4035 4575 l
-4038 4573 l
-4040 4570 l
-4040 4566 l
-4040 4561 l
-4042 4559 l
-S
-4044 4552 m
-4044 4557 l
-4042 4559 l
-S
-4017 4633 m
-4017 4628 l
-4017 4624 l
-4020 4622 l
-4022 4620 l
-4022 4615 l
-4024 4613 l
-4026 4611 l
-4026 4606 l
-4026 4602 l
-4029 4599 l
-4031 4597 l
-4031 4593 l
-S
-4000 4673 m
-4002 4671 l
-S
-4002 4671 m
-4004 4669 l
-4004 4664 l
-4006 4662 l
-4009 4660 l
-4009 4655 l
-4009 4651 l
-4011 4649 l
-4013 4646 l
-4013 4642 l
-4013 4637 l
-4015 4635 l
-4017 4633 l
-S
-3986 4713 m
-3988 4711 l
-3991 4709 l
-3991 4704 l
-3991 4700 l
-3993 4698 l
-3995 4695 l
-3995 4691 l
-3995 4687 l
-3997 4684 l
-4000 4682 l
-4000 4678 l
-4000 4673 l
-S
-3973 4754 m
-3973 4749 l
-3973 4745 l
-3975 4742 l
-3977 4740 l
-3977 4736 l
-3979 4733 l
-3982 4731 l
-3982 4727 l
-3982 4722 l
-3984 4720 l
-3986 4718 l
-3986 4713 l
-S
-3955 4794 m
-3957 4792 l
-3959 4789 l
-3959 4785 l
-3959 4780 l
-3962 4778 l
-S
-3962 4778 m
-3964 4776 l
-3964 4771 l
-3966 4769 l
-3968 4767 l
-3968 4763 l
-3968 4758 l
-3971 4756 l
-3973 4754 l
-S
-3942 4834 m
-3942 4830 l
-3944 4827 l
-3946 4825 l
-3946 4821 l
-3946 4816 l
-3948 4814 l
-3950 4812 l
-3950 4807 l
-3953 4805 l
-3955 4803 l
-3955 4798 l
-3955 4794 l
-S
-3924 4874 m
-3926 4872 l
-3928 4870 l
-3928 4865 l
-3928 4861 l
-3930 4859 l
-3933 4856 l
-3933 4852 l
-3935 4850 l
-3937 4847 l
-3937 4843 l
-3937 4838 l
-3939 4836 l
-3942 4834 l
-S
-3910 4914 m
-3910 4910 l
-3910 4906 l
-3912 4903 l
-3915 4901 l
-3915 4897 l
-3917 4894 l
-3919 4892 l
-3919 4888 l
-3919 4883 l
-3921 4881 l
-S
-3924 4874 m
-3924 4879 l
-3921 4881 l
-S
-3892 4955 m
-3892 4950 l
-3895 4948 l
-3897 4946 l
-3897 4941 l
-3899 4939 l
-3901 4937 l
-3901 4932 l
-3901 4928 l
-3904 4926 l
-3906 4923 l
-3906 4919 l
-3908 4917 l
-3910 4914 l
-S
-3874 4995 m
-3877 4993 l
-3879 4990 l
-3879 4986 l
-3879 4981 l
-3881 4979 l
-S
-3881 4979 m
-3883 4977 l
-3883 4973 l
-3886 4970 l
-3888 4968 l
-3888 4964 l
-3890 4961 l
-3892 4959 l
-3892 4955 l
-S
-3857 5035 m
-3859 5033 l
-3861 5031 l
-3861 5026 l
-3863 5024 l
-3866 5022 l
-3866 5017 l
-3868 5015 l
-3870 5013 l
-3870 5008 l
-3870 5004 l
-3872 5002 l
-3874 4999 l
-3874 4995 l
-S
-3843 5075 m
-3843 5071 l
-3843 5066 l
-3845 5064 l
-3848 5062 l
-3848 5057 l
-3850 5055 l
-3852 5053 l
-3852 5049 l
-3854 5046 l
-3857 5044 l
-3857 5040 l
-3857 5035 l
-S
-3825 5116 m
-3825 5111 l
-3828 5109 l
-3830 5107 l
-3830 5102 l
-3830 5098 l
-3832 5095 l
-3834 5093 l
-3834 5089 l
-3836 5086 l
-3839 5084 l
-3839 5080 l
-3841 5078 l
-S
-3843 5075 m
-3841 5078 l
-S
-3807 5156 m
-3807 5151 l
-3810 5149 l
-3812 5147 l
-3812 5142 l
-3812 5138 l
-3814 5136 l
-3816 5133 l
-3816 5129 l
-3819 5127 l
-3821 5124 l
-3821 5120 l
-3823 5118 l
-3825 5116 l
-S
-3790 5196 m
-3790 5191 l
-3792 5189 l
-3794 5187 l
-3794 5183 l
-3796 5180 l
-3799 5178 l
-3799 5174 l
-3799 5169 l
-3801 5167 l
-S
-3801 5167 m
-3803 5165 l
-3803 5160 l
-3805 5158 l
-3807 5156 l
-S
-3772 5236 m
-3772 5232 l
-3774 5229 l
-3776 5227 l
-3776 5223 l
-3776 5218 l
-3778 5216 l
-3781 5214 l
-3781 5209 l
-3783 5207 l
-3785 5205 l
-3785 5200 l
-3787 5198 l
-3790 5196 l
-S
-3754 5276 m
-3754 5272 l
-3754 5267 l
-3756 5265 l
-3758 5263 l
-3758 5259 l
-3761 5256 l
-S
-3761 5256 m
-3763 5254 l
-3763 5250 l
-3765 5247 l
-3767 5245 l
-3767 5241 l
-3769 5238 l
-3772 5236 l
-S
-3731 5317 m
-3734 5314 l
-3736 5312 l
-3736 5308 l
-3738 5305 l
-3740 5303 l
-3740 5299 l
-3743 5297 l
-3745 5294 l
-3745 5290 l
-3747 5288 l
-3749 5285 l
-3749 5281 l
-3752 5279 l
-3754 5276 l
-S
-3714 5357 m
-3716 5355 l
-3718 5352 l
-3718 5348 l
-3718 5343 l
-3720 5341 l
-S
-3720 5341 m
-3723 5339 l
-3723 5334 l
-3725 5332 l
-3727 5330 l
-3727 5326 l
-3729 5323 l
-3731 5321 l
-3731 5317 l
-S
-3696 5397 m
-3696 5393 l
-3698 5390 l
-3700 5388 l
-3700 5384 l
-3702 5381 l
-3705 5379 l
-3705 5375 l
-3707 5372 l
-3709 5370 l
-3709 5366 l
-3711 5364 l
-3714 5361 l
-3714 5357 l
-S
-3673 5437 m
-3676 5435 l
-3678 5433 l
-3678 5428 l
-3680 5426 l
-S
-3680 5426 m
-3682 5424 l
-3682 5419 l
-3685 5417 l
-3687 5415 l
-3687 5410 l
-3689 5408 l
-3691 5406 l
-3691 5402 l
-3694 5399 l
-3696 5397 l
-S
-3656 5477 m
-3656 5473 l
-3658 5471 l
-3660 5469 l
-3660 5464 l
-3662 5462 l
-3664 5460 l
-3664 5455 l
-3667 5453 l
-3669 5451 l
-3669 5446 l
-3671 5444 l
-3673 5442 l
-3673 5437 l
-S
-3633 5518 m
-3635 5515 l
-3638 5513 l
-3638 5509 l
-3640 5507 l
-S
-3640 5507 m
-3642 5504 l
-3642 5500 l
-3644 5498 l
-3647 5495 l
-3647 5491 l
-3649 5489 l
-3651 5486 l
-3651 5482 l
-3653 5480 l
-3656 5477 l
-S
-3615 5558 m
-3615 5553 l
-3618 5551 l
-3620 5549 l
-3620 5545 l
-3622 5542 l
-3624 5540 l
-3624 5536 l
-3626 5533 l
-3629 5531 l
-3629 5527 l
-3631 5524 l
-3633 5522 l
-3633 5518 l
-S
-3593 5598 m
-3595 5596 l
-3597 5594 l
-3597 5589 l
-3600 5587 l
-S
-3600 5587 m
-3602 5585 l
-3602 5580 l
-3604 5578 l
-3606 5576 l
-3606 5571 l
-3609 5569 l
-3611 5567 l
-3611 5562 l
-3613 5560 l
-3615 5558 l
-S
-3575 5638 m
-3575 5634 l
-3577 5632 l
-3580 5629 l
-3580 5625 l
-3582 5623 l
-3584 5620 l
-3584 5616 l
-3586 5614 l
-3588 5612 l
-3588 5607 l
-3591 5605 l
-3593 5603 l
-3593 5598 l
-S
-3553 5679 m
-3553 5674 l
-3555 5672 l
-3557 5670 l
-3557 5665 l
-3559 5663 l
-S
-3559 5663 m
-3562 5661 l
-3562 5656 l
-3564 5654 l
-3566 5652 l
-3568 5650 l
-3571 5647 l
-3571 5643 l
-3573 5641 l
-3575 5638 l
-S
-3530 5719 m
-3533 5717 l
-3535 5714 l
-3535 5710 l
-3537 5708 l
-3539 5705 l
-3539 5701 l
-3542 5699 l
-3544 5696 l
-3544 5692 l
-3546 5690 l
-3548 5688 l
-3548 5683 l
-3551 5681 l
-3553 5679 l
-S
-3508 5759 m
-3510 5757 l
-3513 5755 l
-3513 5750 l
-3515 5748 l
-3517 5746 l
-3517 5741 l
-3519 5739 l
-S
-3519 5739 m
-3521 5737 l
-3521 5732 l
-3524 5730 l
-3526 5728 l
-3526 5723 l
-3528 5721 l
-3530 5719 l
-S
-3486 5799 m
-3488 5797 l
-3490 5795 l
-3490 5790 l
-3492 5788 l
-3495 5786 l
-3495 5781 l
-3497 5779 l
-3499 5777 l
-3499 5772 l
-3501 5770 l
-3504 5768 l
-3506 5766 l
-3508 5763 l
-3508 5759 l
-S
-3463 5839 m
-3466 5837 l
-3468 5835 l
-3468 5831 l
-3470 5828 l
-3472 5826 l
-3472 5822 l
-3475 5819 l
-3477 5817 l
-3479 5815 l
-S
-3479 5815 m
-3481 5813 l
-3481 5808 l
-3483 5806 l
-3486 5804 l
-3486 5799 l
-S
-3441 5880 m
-3443 5877 l
-3445 5875 l
-3445 5871 l
-3448 5868 l
-3450 5866 l
-3450 5862 l
-3452 5860 l
-3454 5857 l
-3454 5853 l
-3457 5851 l
-3459 5848 l
-3461 5846 l
-3463 5844 l
-3463 5839 l
-S
-3419 5920 m
-3421 5918 l
-3423 5915 l
-3423 5911 l
-3425 5909 l
-3428 5906 l
-3428 5902 l
-3430 5900 l
-3432 5898 l
-3432 5893 l
-3434 5891 l
-3437 5889 l
-3439 5886 l
-S
-3441 5880 m
-3441 5884 l
-3439 5886 l
-S
-3396 5960 m
-3396 5956 l
-3399 5953 l
-S
-3399 5953 m
-3401 5951 l
-3401 5947 l
-3403 5944 l
-3405 5942 l
-3408 5940 l
-3410 5938 l
-3410 5933 l
-3412 5931 l
-3414 5929 l
-3414 5924 l
-3416 5922 l
-3419 5920 l
-S
-3370 6000 m
-3372 5998 l
-3374 5996 l
-3376 5994 l
-3378 5991 l
-3378 5987 l
-3381 5985 l
-3383 5982 l
-3383 5978 l
-3385 5976 l
-3387 5974 l
-3390 5971 l
-3392 5969 l
-3392 5965 l
-3394 5962 l
-3396 5960 l
-S
-3347 6041 m
-3349 6038 l
-3352 6036 l
-3352 6032 l
-3354 6029 l
-3356 6027 l
-3356 6023 l
-3358 6020 l
-S
-3358 6020 m
-3361 6018 l
-3363 6016 l
-3365 6014 l
-3365 6009 l
-3367 6007 l
-3370 6005 l
-3370 6000 l
-S
-3325 6081 m
-3325 6076 l
-3327 6074 l
-3329 6072 l
-3329 6067 l
-3332 6065 l
-3334 6063 l
-3336 6061 l
-3338 6058 l
-3338 6054 l
-3340 6052 l
-3343 6049 l
-3345 6047 l
-3347 6045 l
-3347 6041 l
-S
-3298 6121 m
-3300 6119 l
-3303 6116 l
-3303 6112 l
-3305 6110 l
-3307 6108 l
-3309 6105 l
-3311 6103 l
-3311 6099 l
-3314 6096 l
-3316 6094 l
-3316 6090 l
-3318 6087 l
-S
-3318 6087 m
-3320 6085 l
-3323 6083 l
-3325 6081 l
-S
-1 g
-Y
-2232.6 1612.9 m
-2233 1734 l
-2333 1734 l
-2333 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2279 1717 m
-2266 1713 l
-2258 1701 l
-2253 1680 l
-2253 1667 l
-2258 1646 l
-2266 1634 l
-2279 1630 l
-2287 1630 l
-2299 1634 l
-2308 1646 l
-2312 1667 l
-2312 1680 l
-2308 1701 l
-2299 1713 l
-2287 1717 l
-2279 1717 l
-S
-1 g
-Y
-1873.8 1612.9 m
-1874 1734 l
-1936 1734 l
-1936 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-1895 1701 m
-1903 1705 l
-1916 1717 l
-1916 1630 l
-S
-1 g
-Y
-1382.7 1612.9 m
-1383 1734 l
-1483 1734 l
-1483 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-1408 1696 m
-1408 1701 l
-1412 1709 l
-1416 1713 l
-1424 1717 l
-1441 1717 l
-1450 1713 l
-1454 1709 l
-1458 1701 l
-1458 1692 l
-1454 1684 l
-1445 1671 l
-1404 1630 l
-1462 1630 l
-S
-1 g
-Y
-682.1 1612.9 m
-682 1734 l
-782 1734 l
-782 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-711 1717 m
-757 1717 l
-732 1684 l
-745 1684 l
-753 1680 l
-757 1676 l
-761 1663 l
-761 1655 l
-757 1642 l
-749 1634 l
-736 1630 l
-724 1630 l
-711 1634 l
-707 1638 l
-703 1646 l
-S
-1 g
-Y
-2514.3 1612.9 m
-2514 1734 l
-2698 1734 l
-2698 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2539 1696 m
-2539 1701 l
-2544 1709 l
-2548 1713 l
-2556 1717 l
-2573 1717 l
-2581 1713 l
-2585 1709 l
-2589 1701 l
-2589 1692 l
-2585 1684 l
-2577 1671 l
-2535 1630 l
-2594 1630 l
-S
-2627 1717 m
-2673 1717 l
-2648 1684 l
-2660 1684 l
-2669 1680 l
-2673 1676 l
-2677 1663 l
-2677 1655 l
-2673 1642 l
-2665 1634 l
-2652 1630 l
-2640 1630 l
-2627 1634 l
-2623 1638 l
-2619 1646 l
-S
-1 g
-Y
-2826.8 1612.9 m
-2827 1734 l
-3011 1734 l
-3011 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2852 1696 m
-2852 1701 l
-2856 1709 l
-2860 1713 l
-2869 1717 l
-2885 1717 l
-2894 1713 l
-2898 1709 l
-2902 1701 l
-2902 1692 l
-2898 1684 l
-2889 1671 l
-2848 1630 l
-2906 1630 l
-S
-2935 1696 m
-2935 1701 l
-2940 1709 l
-2944 1713 l
-2952 1717 l
-2969 1717 l
-2977 1713 l
-2981 1709 l
-2985 1701 l
-2985 1692 l
-2981 1684 l
-2973 1671 l
-2931 1630 l
-2990 1630 l
-S
-1 g
-Y
-3158.7 1612.9 m
-3159 1734 l
-3317 1734 l
-3317 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-3184 1696 m
-3184 1701 l
-3188 1709 l
-3192 1713 l
-3200 1717 l
-3217 1717 l
-3226 1713 l
-3230 1709 l
-3234 1701 l
-3234 1692 l
-3230 1684 l
-3221 1671 l
-3180 1630 l
-3238 1630 l
-S
-3276 1701 m
-3284 1705 l
-3297 1717 l
-3297 1630 l
-S
-1 g
-Y
-3539 1612.9 m
-3539 1734 l
-3723 1734 l
-3723 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-3564 1696 m
-3564 1701 l
-3568 1709 l
-3572 1713 l
-3581 1717 l
-3597 1717 l
-3606 1713 l
-3610 1709 l
-3614 1701 l
-3614 1692 l
-3610 1684 l
-3602 1671 l
-3560 1630 l
-3618 1630 l
-S
-3668 1717 m
-3656 1713 l
-3648 1701 l
-3643 1680 l
-3643 1667 l
-3648 1646 l
-3656 1634 l
-3668 1630 l
-3677 1630 l
-3689 1634 l
-3698 1646 l
-3702 1667 l
-3702 1680 l
-3698 1701 l
-3689 1713 l
-3677 1717 l
-3668 1717 l
-S
-1 g
-Y
-3992.1 1612.9 m
-3992 1734 l
-4159 1734 l
-4159 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-4013 1701 m
-4021 1705 l
-4034 1717 l
-4034 1630 l
-S
-4138 1688 m
-4134 1676 l
-4126 1667 l
-4113 1663 l
-4109 1663 l
-4097 1667 l
-4088 1676 l
-4084 1688 l
-4084 1692 l
-4088 1705 l
-4097 1713 l
-4109 1717 l
-4113 1717 l
-4126 1713 l
-4134 1705 l
-4138 1688 l
-4138 1667 l
-4134 1646 l
-4126 1634 l
-4113 1630 l
-4105 1630 l
-4092 1634 l
-4088 1642 l
-S
-1 g
-Y
-4375 1612.9 m
-4375 1734 l
-4546 1734 l
-4546 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-4396 1701 m
-4404 1705 l
-4417 1717 l
-4417 1630 l
-S
-4488 1717 m
-4475 1713 l
-4471 1705 l
-4471 1696 l
-4475 1688 l
-4484 1684 l
-4500 1680 l
-4513 1676 l
-4521 1667 l
-4525 1659 l
-4525 1646 l
-4521 1638 l
-4517 1634 l
-4504 1630 l
-4488 1630 l
-4475 1634 l
-4471 1638 l
-4467 1646 l
-4467 1659 l
-4471 1667 l
-4479 1676 l
-4492 1680 l
-4509 1684 l
-4517 1688 l
-4521 1696 l
-4521 1705 l
-4517 1713 l
-4504 1717 l
-4488 1717 l
-S
-1 g
-Y
-324.3 2215.9 m
-324 2337 l
-508 2337 l
-508 2216 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-395 2320 m
-354 2320 l
-349 2283 l
-354 2287 l
-366 2291 l
-379 2291 l
-391 2287 l
-399 2279 l
-404 2266 l
-404 2258 l
-399 2245 l
-391 2237 l
-379 2233 l
-366 2233 l
-354 2237 l
-349 2241 l
-345 2249 l
-S
-454 2320 m
-441 2316 l
-433 2304 l
-429 2283 l
-429 2270 l
-433 2249 l
-441 2237 l
-454 2233 l
-462 2233 l
-475 2237 l
-483 2249 l
-487 2270 l
-487 2283 l
-483 2304 l
-475 2316 l
-462 2320 l
-454 2320 l
-S
-1 g
-Y
-328.5 3463.3 m
-328 3584 l
-508 3584 l
-508 3463 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-399 3555 m
-395 3564 l
-383 3568 l
-374 3568 l
-362 3564 l
-354 3551 l
-349 3530 l
-349 3509 l
-354 3493 l
-362 3484 l
-374 3480 l
-379 3480 l
-391 3484 l
-399 3493 l
-404 3505 l
-404 3509 l
-399 3522 l
-391 3530 l
-379 3534 l
-374 3534 l
-362 3530 l
-354 3522 l
-349 3509 l
-S
-454 3568 m
-441 3564 l
-433 3551 l
-429 3530 l
-429 3518 l
-433 3497 l
-441 3484 l
-454 3480 l
-462 3480 l
-475 3484 l
-483 3497 l
-487 3518 l
-487 3530 l
-483 3551 l
-475 3564 l
-462 3568 l
-454 3568 l
-S
-1 g
-Y
-324.3 4900 m
-324 5021 l
-508 5021 l
-508 4900 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-404 5004 m
-362 4917 l
-S
-345 5004 m
-404 5004 l
-S
-454 5004 m
-441 5000 l
-433 4988 l
-429 4967 l
-429 4954 l
-433 4933 l
-441 4921 l
-454 4917 l
-462 4917 l
-475 4921 l
-483 4933 l
-487 4954 l
-487 4967 l
-483 4988 l
-475 5000 l
-462 5004 l
-454 5004 l
-S
-1 g
-Y
-2021.5 1398.2 m
-2022 1553 l
-3070 1553 l
-3070 1398 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2042 1532 m
-2042 1444 l
-S
-2042 1532 m
-2080 1532 l
-2093 1528 l
-2097 1524 l
-2101 1515 l
-2101 1507 l
-2097 1498 l
-2093 1494 l
-2080 1490 l
-2042 1490 l
-S
-2072 1490 m
-2101 1444 l
-S
-2126 1532 m
-2130 1528 l
-2134 1532 l
-2130 1536 l
-2126 1532 l
-S
-2130 1503 m
-2130 1444 l
-S
-2209 1503 m
-2209 1436 l
-2205 1423 l
-2201 1419 l
-2193 1415 l
-2180 1415 l
-2172 1419 l
-S
-2209 1490 m
-2201 1498 l
-2193 1503 l
-2180 1503 l
-2172 1498 l
-2164 1490 l
-2159 1478 l
-2159 1469 l
-2164 1457 l
-2172 1448 l
-2180 1444 l
-2193 1444 l
-2201 1448 l
-2209 1457 l
-S
-2243 1532 m
-2243 1444 l
-S
-2243 1486 m
-2255 1498 l
-2264 1503 l
-2276 1503 l
-2285 1498 l
-2289 1486 l
-2289 1444 l
-S
-2326 1532 m
-2326 1461 l
-2331 1448 l
-2339 1444 l
-2347 1444 l
-S
-2314 1503 m
-2343 1503 l
-S
-2485 1503 m
-2485 1444 l
-S
-2485 1490 m
-2477 1498 l
-2468 1503 l
-2456 1503 l
-2448 1498 l
-2439 1490 l
-2435 1478 l
-2435 1469 l
-2439 1457 l
-2448 1448 l
-2456 1444 l
-2468 1444 l
-2477 1448 l
-2485 1457 l
-S
-2560 1490 m
-2556 1498 l
-2544 1503 l
-2531 1503 l
-2519 1498 l
-2514 1490 l
-2519 1482 l
-2527 1478 l
-2548 1473 l
-2556 1469 l
-2560 1461 l
-2560 1457 l
-2556 1448 l
-2544 1444 l
-2531 1444 l
-2519 1448 l
-2514 1457 l
-S
-2636 1490 m
-2627 1498 l
-2619 1503 l
-2606 1503 l
-2598 1498 l
-2590 1490 l
-2585 1478 l
-2585 1469 l
-2590 1457 l
-2598 1448 l
-2606 1444 l
-2619 1444 l
-2627 1448 l
-2636 1457 l
-S
-2661 1478 m
-2711 1478 l
-2711 1486 l
-2707 1494 l
-2702 1498 l
-2694 1503 l
-2681 1503 l
-2673 1498 l
-2665 1490 l
-2661 1478 l
-2661 1469 l
-2665 1457 l
-2673 1448 l
-2681 1444 l
-2694 1444 l
-2702 1448 l
-2711 1457 l
-S
-2740 1503 m
-2740 1444 l
-S
-2740 1486 m
-2752 1498 l
-2761 1503 l
-2773 1503 l
-2782 1498 l
-2786 1486 l
-2786 1444 l
-S
-2861 1490 m
-2857 1498 l
-2844 1503 l
-2832 1503 l
-2819 1498 l
-2815 1490 l
-2819 1482 l
-2828 1478 l
-2849 1473 l
-2857 1469 l
-2861 1461 l
-2861 1457 l
-2857 1448 l
-2844 1444 l
-2832 1444 l
-2819 1448 l
-2815 1457 l
-S
-2886 1532 m
-2890 1528 l
-2894 1532 l
-2890 1536 l
-2886 1532 l
-S
-2890 1503 m
-2890 1444 l
-S
-2940 1503 m
-2932 1498 l
-2924 1490 l
-2920 1478 l
-2920 1469 l
-2924 1457 l
-2932 1448 l
-2940 1444 l
-2953 1444 l
-2961 1448 l
-2970 1457 l
-2974 1469 l
-2974 1478 l
-2970 1490 l
-2961 1498 l
-2953 1503 l
-2940 1503 l
-S
-3003 1503 m
-3003 1444 l
-S
-3003 1486 m
-3016 1498 l
-3024 1503 l
-3036 1503 l
-3045 1498 l
-3049 1486 l
-3049 1444 l
-S
-1 g
-Y
-285 3592.2 m
-160 3592 l
-160 4306 l
-285 4306 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-181 3613 m
-268 3613 l
-S
-181 3613 m
-181 3642 l
-185 3655 l
-193 3663 l
-201 3667 l
-214 3672 l
-235 3672 l
-247 3667 l
-256 3663 l
-264 3655 l
-268 3642 l
-268 3613 l
-S
-235 3697 m
-235 3747 l
-227 3747 l
-218 3743 l
-214 3738 l
-210 3730 l
-210 3718 l
-214 3709 l
-222 3701 l
-235 3697 l
-243 3697 l
-256 3701 l
-264 3709 l
-268 3718 l
-268 3730 l
-264 3738 l
-256 3747 l
-S
-222 3822 m
-214 3814 l
-210 3805 l
-210 3793 l
-214 3784 l
-222 3776 l
-235 3772 l
-243 3772 l
-256 3776 l
-264 3784 l
-268 3793 l
-268 3805 l
-264 3814 l
-256 3822 l
-S
-181 3851 m
-268 3851 l
-S
-181 3880 m
-185 3885 l
-181 3889 l
-176 3885 l
-181 3880 l
-S
-210 3885 m
-268 3885 l
-S
-210 3918 m
-268 3918 l
-S
-227 3918 m
-214 3931 l
-210 3939 l
-210 3951 l
-214 3960 l
-227 3964 l
-268 3964 l
-S
-210 4043 m
-268 4043 l
-S
-222 4043 m
-214 4035 l
-210 4027 l
-210 4014 l
-214 4006 l
-222 3997 l
-235 3993 l
-243 3993 l
-256 3997 l
-264 4006 l
-268 4014 l
-268 4027 l
-264 4035 l
-256 4043 l
-S
-181 4081 m
-252 4081 l
-264 4085 l
-268 4093 l
-268 4102 l
-S
-210 4068 m
-210 4098 l
-S
-181 4123 m
-185 4127 l
-181 4131 l
-176 4127 l
-181 4123 l
-S
-210 4127 m
-268 4127 l
-S
-210 4177 m
-214 4169 l
-222 4160 l
-235 4156 l
-243 4156 l
-256 4160 l
-264 4169 l
-268 4177 l
-268 4189 l
-264 4198 l
-256 4206 l
-243 4210 l
-235 4210 l
-222 4206 l
-214 4198 l
-210 4189 l
-210 4177 l
-S
-210 4240 m
-268 4240 l
-S
-227 4240 m
-214 4252 l
-210 4261 l
-210 4273 l
-214 4281 l
-227 4286 l
-268 4286 l
-S
-1 g
-Y
-924.3 6283 m
-924 6468 l
-4172 6468 l
-4172 6283 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-949 6443 m
-949 6338 l
-S
-949 6443 m
-1015 6443 l
-S
-949 6393 m
-989 6393 l
-S
-1040 6443 m
-1040 6338 l
-S
-1110 6443 m
-1040 6373 l
-S
-1065 6398 m
-1110 6338 l
-S
-1200 6443 m
-1150 6443 l
-1145 6398 l
-1150 6403 l
-1165 6408 l
-1180 6408 l
-1195 6403 l
-1205 6393 l
-1210 6378 l
-1210 6368 l
-1205 6353 l
-1195 6343 l
-1180 6338 l
-1165 6338 l
-1150 6343 l
-1145 6348 l
-1140 6358 l
-S
-1380 6393 m
-1370 6403 l
-1360 6408 l
-1345 6408 l
-1335 6403 l
-1325 6393 l
-1320 6378 l
-1320 6368 l
-1325 6353 l
-1335 6343 l
-1345 6338 l
-1360 6338 l
-1370 6343 l
-1380 6353 l
-S
-1436 6408 m
-1426 6403 l
-1415 6393 l
-1410 6378 l
-1410 6368 l
-1415 6353 l
-1426 6343 l
-1436 6338 l
-1451 6338 l
-1461 6343 l
-1471 6353 l
-1476 6368 l
-1476 6378 l
-1471 6393 l
-1461 6403 l
-1451 6408 l
-1436 6408 l
-S
-1531 6408 m
-1521 6403 l
-1511 6393 l
-1506 6378 l
-1506 6368 l
-1511 6353 l
-1521 6343 l
-1531 6338 l
-1546 6338 l
-1556 6343 l
-1566 6353 l
-1571 6368 l
-1571 6378 l
-1566 6393 l
-1556 6403 l
-1546 6408 l
-1531 6408 l
-S
-1606 6408 m
-1606 6338 l
-S
-1606 6378 m
-1611 6393 l
-1621 6403 l
-1631 6408 l
-1646 6408 l
-S
-1726 6443 m
-1726 6338 l
-S
-1726 6393 m
-1716 6403 l
-1706 6408 l
-1691 6408 l
-1681 6403 l
-1671 6393 l
-1666 6378 l
-1666 6368 l
-1671 6353 l
-1681 6343 l
-1691 6338 l
-1706 6338 l
-1716 6343 l
-1726 6353 l
-S
-1761 6443 m
-1766 6438 l
-1771 6443 l
-1766 6448 l
-1761 6443 l
-S
-1766 6408 m
-1766 6338 l
-S
-1806 6408 m
-1806 6338 l
-S
-1806 6388 m
-1821 6403 l
-1831 6408 l
-1847 6408 l
-1857 6403 l
-1862 6388 l
-1862 6338 l
-S
-1957 6408 m
-1957 6338 l
-S
-1957 6393 m
-1947 6403 l
-1937 6408 l
-1922 6408 l
-1912 6403 l
-1902 6393 l
-1897 6378 l
-1897 6368 l
-1902 6353 l
-1912 6343 l
-1922 6338 l
-1937 6338 l
-1947 6343 l
-1957 6353 l
-S
-2002 6443 m
-2002 6358 l
-2007 6343 l
-2017 6338 l
-2027 6338 l
-S
-1987 6408 m
-2022 6408 l
-S
-2052 6378 m
-2112 6378 l
-2112 6388 l
-2107 6398 l
-2102 6403 l
-2092 6408 l
-2077 6408 l
-2067 6403 l
-2057 6393 l
-2052 6378 l
-2052 6368 l
-2057 6353 l
-2067 6343 l
-2077 6338 l
-2092 6338 l
-2102 6343 l
-2112 6353 l
-S
-2197 6393 m
-2192 6403 l
-2177 6408 l
-2162 6408 l
-2147 6403 l
-2142 6393 l
-2147 6383 l
-2157 6378 l
-2182 6373 l
-2192 6368 l
-2197 6358 l
-2197 6353 l
-2192 6343 l
-2177 6338 l
-2162 6338 l
-2147 6343 l
-2142 6353 l
-S
-2237 6408 m
-2232 6403 l
-2237 6398 l
-2242 6403 l
-2237 6408 l
-S
-2242 6343 m
-2237 6338 l
-2232 6343 l
-2237 6348 l
-2242 6343 l
-2242 6333 l
-2237 6323 l
-2232 6318 l
-S
-2363 6408 m
-2363 6338 l
-S
-2363 6388 m
-2378 6403 l
-2388 6408 l
-2403 6408 l
-2413 6403 l
-2418 6388 l
-2418 6338 l
-S
-2418 6388 m
-2433 6403 l
-2443 6408 l
-2458 6408 l
-2468 6403 l
-2473 6388 l
-2473 6338 l
-S
-2508 6378 m
-2568 6378 l
-2568 6388 l
-2563 6398 l
-2558 6403 l
-2548 6408 l
-2533 6408 l
-2523 6403 l
-2513 6393 l
-2508 6378 l
-2508 6368 l
-2513 6353 l
-2523 6343 l
-2533 6338 l
-2548 6338 l
-2558 6343 l
-2568 6353 l
-S
-2658 6408 m
-2658 6338 l
-S
-2658 6393 m
-2648 6403 l
-2638 6408 l
-2623 6408 l
-2613 6403 l
-2603 6393 l
-2598 6378 l
-2598 6368 l
-2603 6353 l
-2613 6343 l
-2623 6338 l
-2638 6338 l
-2648 6343 l
-2658 6353 l
-S
-2699 6408 m
-2699 6338 l
-S
-2699 6388 m
-2714 6403 l
-2724 6408 l
-2739 6408 l
-2749 6403 l
-2754 6388 l
-2754 6338 l
-S
-2869 6378 m
-2929 6378 l
-2929 6388 l
-2924 6398 l
-2919 6403 l
-2909 6408 l
-2894 6408 l
-2884 6403 l
-2874 6393 l
-2869 6378 l
-2869 6368 l
-2874 6353 l
-2884 6343 l
-2894 6338 l
-2909 6338 l
-2919 6343 l
-2929 6353 l
-S
-3019 6408 m
-3019 6303 l
-S
-3019 6393 m
-3009 6403 l
-2999 6408 l
-2984 6408 l
-2974 6403 l
-2964 6393 l
-2959 6378 l
-2959 6368 l
-2964 6353 l
-2974 6343 l
-2984 6338 l
-2999 6338 l
-3009 6343 l
-3019 6353 l
-S
-3059 6408 m
-3059 6358 l
-3064 6343 l
-3074 6338 l
-3090 6338 l
-3100 6343 l
-3115 6358 l
-S
-3115 6408 m
-3115 6338 l
-S
-3150 6443 m
-3155 6438 l
-3160 6443 l
-3155 6448 l
-3150 6443 l
-S
-3155 6408 m
-3155 6338 l
-S
-3195 6408 m
-3195 6338 l
-S
-3195 6388 m
-3210 6403 l
-3220 6408 l
-3235 6408 l
-3245 6403 l
-3250 6388 l
-3250 6338 l
-S
-3310 6408 m
-3300 6403 l
-3290 6393 l
-3285 6378 l
-3285 6368 l
-3290 6353 l
-3300 6343 l
-3310 6338 l
-3325 6338 l
-3335 6343 l
-3345 6353 l
-3350 6368 l
-3350 6378 l
-3345 6393 l
-3335 6403 l
-3325 6408 l
-3310 6408 l
-S
-3380 6408 m
-3435 6338 l
-S
-3435 6408 m
-3380 6338 l
-S
-3591 6443 m
-3591 6363 l
-3586 6348 l
-3581 6343 l
-3571 6338 l
-3561 6338 l
-3551 6343 l
-3546 6348 l
-3541 6363 l
-3541 6373 l
-S
-3631 6418 m
-3631 6423 l
-3636 6433 l
-3641 6438 l
-3651 6443 l
-3671 6443 l
-3681 6438 l
-3686 6433 l
-3691 6423 l
-3691 6413 l
-3686 6403 l
-3676 6388 l
-3626 6338 l
-3696 6338 l
-S
-3756 6443 m
-3741 6438 l
-3731 6423 l
-3726 6398 l
-3726 6383 l
-3731 6358 l
-3741 6343 l
-3756 6338 l
-3766 6338 l
-3781 6343 l
-3791 6358 l
-3796 6383 l
-3796 6398 l
-3791 6423 l
-3781 6438 l
-3766 6443 l
-3756 6443 l
-S
-3856 6443 m
-3841 6438 l
-3831 6423 l
-3826 6398 l
-3826 6383 l
-3831 6358 l
-3841 6343 l
-3856 6338 l
-3866 6338 l
-3881 6343 l
-3891 6358 l
-3896 6383 l
-3896 6398 l
-3891 6423 l
-3881 6438 l
-3866 6443 l
-3856 6443 l
-S
-3957 6443 m
-3942 6438 l
-3932 6423 l
-3927 6398 l
-3927 6383 l
-3932 6358 l
-3942 6343 l
-3957 6338 l
-3967 6338 l
-3982 6343 l
-3992 6358 l
-3997 6383 l
-3997 6398 l
-3992 6423 l
-3982 6438 l
-3967 6443 l
-3957 6443 l
-S
-4037 6348 m
-4032 6343 l
-4037 6338 l
-4042 6343 l
-4037 6348 l
-S
-4107 6443 m
-4092 6438 l
-4082 6423 l
-4077 6398 l
-4077 6383 l
-4082 6358 l
-4092 6343 l
-4107 6338 l
-4117 6338 l
-4132 6343 l
-4142 6358 l
-4147 6383 l
-4147 6398 l
-4142 6423 l
-4132 6438 l
-4117 6443 l
-4107 6443 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/parallel.eps b/ast-5.3-1/sun210_figures/parallel.eps
deleted file mode 100644
index 5baa971..0000000
--- a/ast-5.3-1/sun210_figures/parallel.eps
+++ /dev/null
@@ -1,988 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 152 155 463 420
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/05 14:50:56
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-4253.75 3863.75 m
-4253.75 4016.15 4128.95 4140.95 3976.55 4140.95 c
-2309.75 4140.95 l
-2157.35 4140.95 2032.55 4016.15 2032.55 3863.75 c
-2032.55 1836.95 l
-2032.55 1684.55 2157.35 1559.75 2309.75 1559.75 c
-3976.55 1559.75 l
-4128.95 1559.75 4253.75 1684.55 4253.75 1836.95 c
-f*
-1 g
-4188.95 3918.95 m
-4188.95 4071.35 4065.35 4194.95 3912.95 4194.95 c
-2254.55 4194.95 l
-2102.15 4194.95 1978.55 4071.35 1978.55 3918.95 c
-1978.55 1900.55 l
-1978.55 1748.15 2102.15 1624.55 2254.55 1624.55 c
-3912.95 1624.55 l
-4065.35 1624.55 4188.95 1748.15 4188.95 1900.55 c
-f*
-8 w
-1 J
-1 j
-0 g
-4188.95 3918.95 m
-4188.95 4071.35 4065.35 4194.95 3912.95 4194.95 c
-2254.55 4194.95 l
-2102.15 4194.95 1978.55 4071.35 1978.55 3918.95 c
-1978.55 1900.55 l
-1978.55 1748.15 2102.15 1624.55 2254.55 1624.55 c
-3912.95 1624.55 l
-4065.35 1624.55 4188.95 1748.15 4188.95 1900.55 c
-h
-S
-1983.35 3352.55 308.4 103.2 re
-Y
-1983.35 3360.95 m
-2283.35 3448.55 l
-S
-0 0 6120 7920 re
-Y
-2022.95 3362.15 m
-2022.95 3383.75 2004.95 3401.75 1983.35 3401.75 c
-1960.55 3401.75 1942.55 3383.75 1942.55 3362.15 c
-1942.55 3340.55 1960.55 3322.55 1983.35 3322.55 c
-2004.95 3322.55 2022.95 3340.55 2022.95 3362.15 c
-f*
-2259.35 3392.15 m
-2265.35 3442.55 l
-2234.15 3482.15 l
-2393.75 3479.75 l
-f*
-0.564706 g
-3833.75 3651.35 m
-3833.75 3722.15 3776.15 3780.95 3704.15 3780.95 c
-2582.15 3780.95 l
-2510.15 3780.95 2452.55 3722.15 2452.55 3651.35 c
-2452.55 2872.55 l
-2452.55 2800.55 2510.15 2742.95 2582.15 2742.95 c
-3704.15 2742.95 l
-3776.15 2742.95 3833.75 2800.55 3833.75 2872.55 c
-f*
-1 g
-3768.95 3706.55 m
-3768.95 3777.35 3712.55 3834.95 3640.55 3834.95 c
-2526.95 3834.95 l
-2456.15 3834.95 2398.55 3777.35 2398.55 3706.55 c
-2398.55 2934.95 l
-2398.55 2865.35 2456.15 2807.75 2526.95 2807.75 c
-3640.55 2807.75 l
-3711.35 2807.75 3768.95 2865.35 3768.95 2934.95 c
-f*
-0 g
-3768.95 3706.55 m
-3768.95 3777.35 3712.55 3834.95 3640.55 3834.95 c
-2526.95 3834.95 l
-2456.15 3834.95 2398.55 3777.35 2398.55 3706.55 c
-2398.55 2934.95 l
-2398.55 2865.35 2456.15 2807.75 2526.95 2807.75 c
-3640.55 2807.75 l
-3711.35 2807.75 3768.95 2865.35 3768.95 2934.95 c
-h
-S
-0.564706 g
-3833.75 2325.35 m
-3833.75 2367.35 3800.15 2400.95 3758.15 2400.95 c
-2528.15 2400.95 l
-2486.15 2400.95 2452.55 2367.35 2452.55 2325.35 c
-2452.55 1875.35 l
-2452.55 1833.35 2486.15 1799.75 2528.15 1799.75 c
-3758.15 1799.75 l
-3800.15 1799.75 3833.75 1833.35 3833.75 1875.35 c
-f*
-1 g
-3768.95 2381.75 m
-3768.95 2422.55 3736.55 2454.95 3694.55 2454.95 c
-2472.95 2454.95 l
-2430.95 2454.95 2398.55 2422.55 2398.55 2381.75 c
-2398.55 1937.75 l
-2398.55 1896.95 2430.95 1864.55 2472.95 1864.55 c
-3694.55 1864.55 l
-3736.55 1864.55 3768.95 1896.95 3768.95 1937.75 c
-f*
-0 g
-3768.95 2381.75 m
-3768.95 2422.55 3736.55 2454.95 3694.55 2454.95 c
-2472.95 2454.95 l
-2430.95 2454.95 2398.55 2422.55 2398.55 2381.75 c
-2398.55 1937.75 l
-2398.55 1896.95 2430.95 1864.55 2472.95 1864.55 c
-3694.55 1864.55 l
-3736.55 1864.55 3768.95 1896.95 3768.95 1937.75 c
-h
-S
-1983.35 2932.55 320.4 190.8 re
-Y
-1983.35 2940.95 m
-2295.35 3123.35 l
-S
-0 0 6120 7920 re
-Y
-2022.95 2942.15 m
-2022.95 2963.75 2004.95 2981.75 1983.35 2981.75 c
-1960.55 2981.75 1942.55 2963.75 1942.55 2942.15 c
-1942.55 2920.55 1960.55 2902.55 1983.35 2902.55 c
-2004.95 2902.55 2022.95 2920.55 2022.95 2942.15 c
-f*
-2285.75 3062.15 m
-2277.35 3112.55 l
-2237.75 3144.95 l
-2393.75 3179.75 l
-f*
-0.2 i
-2762 3384.14 m
-2762 3302.6 l
-2762 3287.66 2759.88 3285.32 2745.94 3284.42 c
-2745.94 3281 l
-2796.34 3281 l
-2796.34 3284.42 l
-2783.2 3285.32 2781 3287.84 2781 3300.62 c
-2781 3380.54 l
-2781 3393.32 2783.29 3395.66 2796.34 3396.74 c
-2796.34 3400 l
-2760.52 3400 l
-2720.74 3309.26 l
-2679.16 3400 l
-2643.52 3400 l
-2643.52 3397 l
-2658.28 3396.09 2661 3393.89 2661 3380.54 c
-2661 3307.46 l
-2661 3288.92 2658.43 3285.5 2643.16 3284.42 c
-2643.16 3281 l
-2685.46 3281 l
-2685.46 3284 l
-2671.6 3284.73 2669 3288.95 2669 3307.46 c
-2669 3380 l
-2713.72 3281 l
-2716.24 3281 l
-h
-2801.02 3281 m
-f*
-2880.56 3292.88 m
-2877.5 3290.36 2875.34 3289.2 2872.64 3289.2 c
-2868.5 3289.2 2867 3291.78 2867 3299.9 c
-2867 3335 l
-2867 3344.18 2866.16 3349.22 2863.82 3353.36 c
-2860.04 3360.2 2852.3 3363.8 2841.32 3363.8 c
-2832.14 3363.8 2823.5 3361.28 2818.46 3357.14 c
-2813.96 3353.36 2811 3348.14 2811 3343.64 c
-2811 3339.5 2814.46 3335.9 2818.82 3335.9 c
-2823.14 3335.9 2826.92 3339.5 2826.92 3343.46 c
-2826.92 3344.18 2826.74 3345.08 2826.56 3346.34 c
-2826.2 3347.96 2826 3349.4 2826 3350.66 c
-2826 3355.52 2831.77 3359.8 2838.98 3359.8 c
-2847.8 3359.8 2852 3354.47 2852 3344.54 c
-2852 3333.56 l
-2824.76 3322.4 2821.75 3320.96 2814.14 3314.12 c
-2810.18 3310.52 2807.66 3304.4 2807.66 3298.46 c
-2807.66 3287.12 2815.4 3279.2 2826.56 3279.2 c
-2834.48 3279.2 2841.86 3282.98 2852.84 3292.34 c
-2853.74 3282.8 2856.98 3279.2 2864.36 3279.2 c
-2870.48 3279.2 2874.26 3281.36 2880.56 3288.2 c
-h
-2852 3303.14 m
-2852 3297.56 2851.23 3295.94 2847.98 3293.6 c
-2843.66 3291.08 2838.62 3289.2 2834.84 3289.2 c
-2828.54 3289.2 2823.48 3295.51 2823.48 3303.5 c
-2823.48 3304.22 l
-2823.48 3314.84 2830.7 3321.32 2852 3329.24 c
-h
-2880.92 3281 m
-f*
-2882.62 3351.74 m
-2884.24 3351.92 2885.5 3351.92 2887.12 3351.92 c
-2893.24 3351.92 2895 3350.12 2895 3341.66 c
-2895 3257.42 l
-2895 3248.06 2892.94 3246.08 2881.9 3245 c
-2881.9 3242 l
-2925.46 3242 l
-2925.46 3245 l
-2911.96 3245.18 2910 3247.19 2910 3258.68 c
-2910 3286.94 l
-2916.34 3281 2920.4 3279.2 2927.8 3279.2 c
-2949.22 3279.2 2965 3299.36 2965 3325.46 c
-2965 3347.78 2952.65 3363.8 2935.54 3363.8 c
-2925.61 3363.8 2917.8 3359.48 2910 3349.58 c
-2910 3363.44 l
-2908.54 3363.8 l
-2899 3360.02 2892.52 3357.68 2882.62 3354.62 c
-h
-2910 3341.12 m
-2910 3346.52 2919.87 3352.8 2927.98 3352.8 c
-2941.3 3352.8 2950 3339.2 2950 3318.26 c
-2950 3298.46 2941.23 3284.2 2928.34 3284.2 c
-2919.88 3284.2 2910 3291.09 2910 3296.84 c
-h
-2971 3281 m
-f*
-2972.62 3351.74 m
-2974.24 3351.92 2975.5 3351.92 2977.12 3351.92 c
-2983.24 3351.92 2985 3350.12 2985 3341.66 c
-2985 3257.42 l
-2985 3248.06 2982.94 3246.08 2971.9 3245 c
-2971.9 3242 l
-3015.46 3242 l
-3015.46 3245 l
-3001.96 3245.18 3000 3247.19 3000 3258.68 c
-3000 3286.94 l
-3006.34 3281 3010.4 3279.2 3017.8 3279.2 c
-3039.22 3279.2 3055 3299.36 3055 3325.46 c
-3055 3347.78 3042.65 3363.8 3025.54 3363.8 c
-3015.61 3363.8 3007.8 3359.48 3000 3349.58 c
-3000 3363.44 l
-2998.54 3363.8 l
-2989 3360.02 2982.52 3357.68 2972.62 3354.62 c
-h
-3000 3341.12 m
-3000 3346.52 3009.87 3352.8 3017.98 3352.8 c
-3031.3 3352.8 3040 3339.2 3040 3318.26 c
-3040 3298.46 3031.23 3284.2 3018.34 3284.2 c
-3009.88 3284.2 3000 3291.09 3000 3296.84 c
-h
-3061 3281 m
-f*
-3092.5 3363.8 m
-3064.6 3353.9 l
-3064.6 3351.2 l
-3066.04 3351.38 l
-3068.2 3351.74 3070.54 3351.72 3072.16 3351.72 c
-3076.48 3351.72 3078 3348.89 3078 3341.12 c
-3078 3299.36 l
-3078 3286.4 3076.21 3284.42 3063.88 3283.7 c
-3063.88 3281 l
-3106.54 3281 l
-3106.54 3283.7 l
-3094.66 3284.6 3093 3286.4 3093 3299.36 c
-3093 3363.26 l
-h
-3084.22 3404 m
-3079.18 3404 3075 3399.83 3075 3394.76 c
-3075 3389.54 3078.98 3386 3084.04 3386 c
-3089.44 3386 3094 3389.78 3094 3394.76 c
-3094 3399.8 3089.59 3404 3084.22 3404 c
-h
-3111.04 3281 m
-f*
-3113.88 3352.64 m
-3115.14 3353.18 3116.76 3353.36 3118.74 3353.36 c
-3123.78 3353.36 3125 3350.66 3125 3341.84 c
-3125 3297.2 l
-3125 3286.94 3123.09 3284.42 3114.24 3283.7 c
-3114.24 3281 l
-3152.4 3281 l
-3152.4 3283.7 l
-3143.22 3284.42 3140 3286.58 3140 3293.06 c
-3140 3343.64 l
-3148.7 3351.74 3152.95 3353.8 3159.06 3353.8 c
-3167.88 3353.8 3172 3348.25 3172 3336.44 c
-3172 3298.82 l
-3172 3287.48 3169.7 3284.42 3160.86 3283.7 c
-3160.86 3281 l
-3198.3 3281 l
-3198.3 3283.7 l
-3189.48 3284.6 3187 3286.76 3187 3295.58 c
-3187 3336.8 l
-3187 3353.72 3179.2 3363.8 3166.08 3363.8 c
-3157.64 3363.8 3151.94 3360.74 3139.46 3349.22 c
-3139.46 3363.44 l
-3138.72 3363.8 l
-3129.9 3360.56 3123.78 3358.58 3113.88 3355.7 c
-h
-3201 3281 m
-f*
-3285.6 3351 m
-3285.6 3358 l
-3271.74 3358 l
-3268.14 3358 3265.44 3358.5 3261.84 3359.66 c
-3257.88 3361.1 l
-3253.02 3362.9 3248.16 3363.8 3243.48 3363.8 c
-3226.74 3363.8 3213.38 3350.84 3213.38 3334.46 c
-3213.38 3323.12 3218.07 3316.28 3230.16 3310.34 c
-3227.64 3307.82 3225.12 3305.48 3222.42 3303.14 c
-3216.48 3297.92 3214.1 3294.32 3214.1 3290.72 c
-3214.1 3286.76 3216.09 3284.78 3223.68 3281.18 c
-3210.72 3271.82 3206 3265.88 3206 3259.22 c
-3206 3249.68 3219.88 3242 3237.18 3242 c
-3250.14 3242 3263.82 3246.23 3273.18 3253.28 c
-3280.56 3259.04 3284 3264.98 3284 3272.18 c
-3284 3283.34 3275.53 3290.9 3262.2 3291.44 c
-3238.98 3292.52 l
-3229.26 3292.88 3224.94 3294.5 3224.94 3297.38 c
-3224.94 3300.98 3230.88 3307.28 3235.74 3308.72 c
-3239.16 3308.36 l
-3242.4 3308 3244.92 3308 3246 3308 c
-3252.3 3308 3259.32 3310.46 3264.72 3314.84 c
-3271.2 3319.88 3274 3326.36 3274 3335.72 c
-3274 3341 3273.12 3345.18 3270.66 3351 c
-h
-3227.46 3280.64 m
-3233.58 3279.38 3247.8 3278.3 3256.62 3278.3 c
-3273 3278.3 3279 3276.14 3279 3269.48 c
-3279 3259.04 3265.3 3252 3244.74 3252 c
-3228.9 3252 3219 3257.23 3219 3265.16 c
-3219 3269.3 3220.55 3272 3227.46 3280.64 c
-h
-3228.36 3341.84 m
-3228.36 3352.46 3233.4 3358.8 3241.68 3358.8 c
-3247.26 3358.8 3251.94 3355.73 3254.82 3350.3 c
-3258.24 3344 3260 3335.9 3260 3328.52 c
-3260 3318.62 3254.87 3313 3246.9 3313 c
-3235.74 3313 3228.36 3324.43 3228.36 3341.3 c
-h
-3291 3281 m
-f*
-3336 3281 m
-f*
-3463.08 3284.42 m
-3454.98 3284.96 3453.18 3286.76 3446.88 3300.08 c
-3402.06 3402.16 l
-3398.46 3402.16 l
-3361.02 3313.94 l
-3349.5 3287.66 3347.34 3284.96 3338.7 3284.42 c
-3338.7 3281 l
-3374.34 3281 l
-3374.34 3284.82 l
-3365.7 3284.82 3362.1 3287.03 3362.1 3291.8 c
-3362.1 3293.96 3362.64 3296.48 3363.54 3298.82 c
-3371.82 3320 l
-3418.98 3320 l
-3426.36 3302.6 l
-3428.52 3297.56 3429.78 3293.06 3429.78 3290.36 c
-3429.78 3288.74 3428.7 3286.76 3427.26 3286.04 c
-3425.1 3284.78 3423.66 3284.82 3417.18 3284.82 c
-3417.18 3281 l
-3463.08 3281 l
-h
-3374.88 3327 m
-3395.58 3376.76 l
-3416.46 3327 l
-h
-3465.96 3281 m
-f*
-2827 2184.14 m
-2827 2102.6 l
-2827 2087.66 2824.88 2085.32 2810.94 2084.42 c
-2810.94 2081 l
-2861.34 2081 l
-2861.34 2084.42 l
-2848.2 2085.32 2846 2087.84 2846 2100.62 c
-2846 2180.54 l
-2846 2193.32 2848.29 2195.66 2861.34 2196.74 c
-2861.34 2200 l
-2825.52 2200 l
-2785.74 2109.26 l
-2744.16 2200 l
-2708.52 2200 l
-2708.52 2197 l
-2723.28 2196.09 2726 2193.89 2726 2180.54 c
-2726 2107.46 l
-2726 2088.92 2723.43 2085.5 2708.16 2084.42 c
-2708.16 2081 l
-2750.46 2081 l
-2750.46 2084 l
-2736.6 2084.73 2734 2088.95 2734 2107.46 c
-2734 2180 l
-2778.72 2081 l
-2781.24 2081 l
-h
-2866.02 2081 m
-f*
-2946.56 2092.88 m
-2943.5 2090.36 2941.34 2089.2 2938.64 2089.2 c
-2934.5 2089.2 2933 2091.78 2933 2099.9 c
-2933 2135 l
-2933 2144.18 2932.16 2149.22 2929.82 2153.36 c
-2926.04 2160.2 2918.3 2163.8 2907.32 2163.8 c
-2898.14 2163.8 2889.5 2161.28 2884.46 2157.14 c
-2879.96 2153.36 2877 2148.14 2877 2143.64 c
-2877 2139.5 2880.46 2135.9 2884.82 2135.9 c
-2889.14 2135.9 2892.92 2139.5 2892.92 2143.46 c
-2892.92 2144.18 2892.74 2145.08 2892.56 2146.34 c
-2892.2 2147.96 2892 2149.4 2892 2150.66 c
-2892 2155.52 2897.77 2159.8 2904.98 2159.8 c
-2913.8 2159.8 2918 2154.47 2918 2144.54 c
-2918 2133.56 l
-2890.76 2122.4 2887.75 2120.96 2880.14 2114.12 c
-2876.18 2110.52 2873.66 2104.4 2873.66 2098.46 c
-2873.66 2087.12 2881.4 2079.2 2892.56 2079.2 c
-2900.48 2079.2 2907.86 2082.98 2918.84 2092.34 c
-2919.74 2082.8 2922.98 2079.2 2930.36 2079.2 c
-2936.48 2079.2 2940.26 2081.36 2946.56 2088.2 c
-h
-2918 2103.14 m
-2918 2097.56 2917.23 2095.94 2913.98 2093.6 c
-2909.66 2091.08 2904.62 2089.2 2900.84 2089.2 c
-2894.54 2089.2 2889.48 2095.51 2889.48 2103.5 c
-2889.48 2104.22 l
-2889.48 2114.84 2896.7 2121.32 2918 2129.24 c
-h
-2946.92 2081 m
-f*
-2947.62 2151.74 m
-2949.24 2151.92 2950.5 2151.92 2952.12 2151.92 c
-2958.24 2151.92 2960 2150.12 2960 2141.66 c
-2960 2057.42 l
-2960 2048.06 2957.94 2046.08 2946.9 2045 c
-2946.9 2042 l
-2990.46 2042 l
-2990.46 2045 l
-2976.96 2045.18 2975 2047.19 2975 2058.68 c
-2975 2086.94 l
-2981.34 2081 2985.4 2079.2 2992.8 2079.2 c
-3014.22 2079.2 3030 2099.36 3030 2125.46 c
-3030 2147.78 3017.65 2163.8 3000.54 2163.8 c
-2990.61 2163.8 2982.8 2159.48 2975 2149.58 c
-2975 2163.44 l
-2973.54 2163.8 l
-2964 2160.02 2957.52 2157.68 2947.62 2154.62 c
-h
-2975 2141.12 m
-2975 2146.52 2984.87 2152.8 2992.98 2152.8 c
-3006.3 2152.8 3015 2139.2 3015 2118.26 c
-3015 2098.46 3006.23 2084.2 2993.34 2084.2 c
-2984.88 2084.2 2975 2091.09 2975 2096.84 c
-h
-3036 2081 m
-f*
-3037.62 2151.74 m
-3039.24 2151.92 3040.5 2151.92 3042.12 2151.92 c
-3048.24 2151.92 3050 2150.12 3050 2141.66 c
-3050 2057.42 l
-3050 2048.06 3047.94 2046.08 3036.9 2045 c
-3036.9 2042 l
-3080.46 2042 l
-3080.46 2045 l
-3066.96 2045.18 3065 2047.19 3065 2058.68 c
-3065 2086.94 l
-3071.34 2081 3075.4 2079.2 3082.8 2079.2 c
-3104.22 2079.2 3120 2099.36 3120 2125.46 c
-3120 2147.78 3107.65 2163.8 3090.54 2163.8 c
-3080.61 2163.8 3072.8 2159.48 3065 2149.58 c
-3065 2163.44 l
-3063.54 2163.8 l
-3054 2160.02 3047.52 2157.68 3037.62 2154.62 c
-h
-3065 2141.12 m
-3065 2146.52 3074.87 2152.8 3082.98 2152.8 c
-3096.3 2152.8 3105 2139.2 3105 2118.26 c
-3105 2098.46 3096.23 2084.2 3083.34 2084.2 c
-3074.88 2084.2 3065 2091.09 3065 2096.84 c
-h
-3126 2081 m
-f*
-3157.5 2163.8 m
-3129.6 2153.9 l
-3129.6 2151.2 l
-3131.04 2151.38 l
-3133.2 2151.74 3135.54 2151.72 3137.16 2151.72 c
-3141.48 2151.72 3143 2148.89 3143 2141.12 c
-3143 2099.36 l
-3143 2086.4 3141.21 2084.42 3128.88 2083.7 c
-3128.88 2081 l
-3171.54 2081 l
-3171.54 2083.7 l
-3159.66 2084.6 3158 2086.4 3158 2099.36 c
-3158 2163.26 l
-h
-3149.22 2204 m
-3144.18 2204 3140 2199.83 3140 2194.76 c
-3140 2189.54 3143.98 2186 3149.04 2186 c
-3154.44 2186 3159 2189.78 3159 2194.76 c
-3159 2199.8 3154.59 2204 3149.22 2204 c
-h
-3176.04 2081 m
-f*
-3178.88 2152.64 m
-3180.14 2153.18 3181.76 2153.36 3183.74 2153.36 c
-3188.78 2153.36 3190 2150.66 3190 2141.84 c
-3190 2097.2 l
-3190 2086.94 3188.09 2084.42 3179.24 2083.7 c
-3179.24 2081 l
-3217.4 2081 l
-3217.4 2083.7 l
-3208.22 2084.42 3205 2086.58 3205 2093.06 c
-3205 2143.64 l
-3213.7 2151.74 3217.95 2153.8 3224.06 2153.8 c
-3232.88 2153.8 3237 2148.25 3237 2136.44 c
-3237 2098.82 l
-3237 2087.48 3234.7 2084.42 3225.86 2083.7 c
-3225.86 2081 l
-3263.3 2081 l
-3263.3 2083.7 l
-3254.48 2084.6 3252 2086.76 3252 2095.58 c
-3252 2136.8 l
-3252 2153.72 3244.2 2163.8 3231.08 2163.8 c
-3222.64 2163.8 3216.94 2160.74 3204.46 2149.22 c
-3204.46 2163.44 l
-3203.72 2163.8 l
-3194.9 2160.56 3188.78 2158.58 3178.88 2155.7 c
-h
-3266 2081 m
-f*
-3350.6 2151 m
-3350.6 2158 l
-3336.74 2158 l
-3333.14 2158 3330.44 2158.5 3326.84 2159.66 c
-3322.88 2161.1 l
-3318.02 2162.9 3313.16 2163.8 3308.48 2163.8 c
-3291.74 2163.8 3278.38 2150.84 3278.38 2134.46 c
-3278.38 2123.12 3283.07 2116.28 3295.16 2110.34 c
-3292.64 2107.82 3290.12 2105.48 3287.42 2103.14 c
-3281.48 2097.92 3279.1 2094.32 3279.1 2090.72 c
-3279.1 2086.76 3281.09 2084.78 3288.68 2081.18 c
-3275.72 2071.82 3271 2065.88 3271 2059.22 c
-3271 2049.68 3284.88 2042 3302.18 2042 c
-3315.14 2042 3328.82 2046.23 3338.18 2053.28 c
-3345.56 2059.04 3349 2064.98 3349 2072.18 c
-3349 2083.34 3340.53 2090.9 3327.2 2091.44 c
-3303.98 2092.52 l
-3294.26 2092.88 3289.94 2094.5 3289.94 2097.38 c
-3289.94 2100.98 3295.88 2107.28 3300.74 2108.72 c
-3304.16 2108.36 l
-3307.4 2108 3309.92 2108 3311 2108 c
-3317.3 2108 3324.32 2110.46 3329.72 2114.84 c
-3336.2 2119.88 3339 2126.36 3339 2135.72 c
-3339 2141 3338.12 2145.18 3335.66 2151 c
-h
-3292.46 2080.64 m
-3298.58 2079.38 3312.8 2078.3 3321.62 2078.3 c
-3338 2078.3 3344 2076.14 3344 2069.48 c
-3344 2059.04 3330.3 2052 3309.74 2052 c
-3293.9 2052 3284 2057.23 3284 2065.16 c
-3284 2069.3 3285.55 2072 3292.46 2080.64 c
-h
-3293.36 2141.84 m
-3293.36 2152.46 3298.4 2158.8 3306.68 2158.8 c
-3312.26 2158.8 3316.94 2155.73 3319.82 2150.3 c
-3323.24 2144 3325 2135.9 3325 2128.52 c
-3325 2118.62 3319.87 2113 3311.9 2113 c
-3300.74 2113 3293.36 2124.43 3293.36 2141.3 c
-h
-3356 2081 m
-f*
-3401 2081 m
-f*
-3404.06 2200 m
-3404.06 2197 l
-3419.18 2196.09 3421 2194.07 3421 2180.54 c
-3421 2100.62 l
-3421 2087.3 3418.71 2084.96 3404.06 2084.42 c
-3404.06 2081 l
-3464.18 2081 l
-3491 2081 3508 2093.42 3508 2113.4 c
-3508 2121.32 3504.85 2128.52 3498.92 2133.74 c
-3493.52 2138.6 3488.66 2140.94 3476.96 2143.64 c
-3486.32 2145.98 3490.1 2147.78 3494.42 2151.56 c
-3498.92 2155.52 3502 2162.18 3502 2169.56 c
-3502 2189.72 3485.85 2200 3454.46 2200 c
-h
-3440 2139.68 m
-3456.94 2139.68 3464.78 2138.78 3471.56 2136.26 c
-3482 2132.12 3487 2124.74 3487 2113.22 c
-3487 2103.5 3483.23 2096.48 3476.06 2092.34 c
-3470.3 2088.92 3463.1 2088 3450.5 2088 c
-3442.22 2088 3440 2089.55 3440 2095.04 c
-h
-3440 2146.88 m
-3440 2188.1 l
-3440 2191.88 3441.16 2193 3443.66 2193 c
-3451.58 2193 l
-3472.28 2193 3483 2184.71 3483 2168.84 c
-3483 2154.8 3473.55 2146.88 3456.8 2146.88 c
-h
-3521.06 2081 m
-f*
-2825.6 4082 m
-2823.98 4122.52 l
-2820.2 4122.52 l
-2819.12 4118.84 2816.24 4116.58 2812.82 4116.58 c
-2811.02 4116.58 2808.5 4117.17 2805.62 4118.36 c
-2796.8 4121.24 2787.98 4122.52 2779.16 4122.52 c
-2765.3 4122.52 2751.08 4117.36 2740.1 4108.46 c
-2726.42 4097.12 2719 4080.02 2719 4059.5 c
-2719 4022.96 2742.96 3998.48 2778.8 3998.48 c
-2799.14 3998.48 2816.96 4006.76 2827.94 4021.34 c
-2824.7 4024.58 l
-2811.38 4011.8 2799.5 4006.48 2784.56 4006.48 c
-2773.76 4006.48 2764.04 4009.69 2756.48 4015.94 c
-2745.86 4024.76 2740 4040.96 2740 4061.84 c
-2740 4094.42 2756.71 4115.52 2782.76 4115.52 c
-2793.2 4115.52 2802.38 4111.73 2809.58 4104.5 c
-2815.34 4098.74 2818.04 4093.7 2821.46 4082 c
-h
-2834.06 4001 m
-f*
-2837.14 4072.64 m
-2839.48 4073.18 2840.92 4073.36 2842.9 4073.36 c
-2847.58 4073.36 2849 4070.48 2849 4061.84 c
-2849 4016.3 l
-2849 4006.58 2846.52 4003.88 2836.6 4003.7 c
-2836.6 4001 l
-2876.56 4001 l
-2876.56 4004 l
-2867.02 4004.35 2864 4006.27 2864 4013.06 c
-2864 4063.82 l
-2864 4064.18 2865.23 4065.44 2866.66 4066.88 c
-2870.98 4071.2 2879.08 4074.8 2885.74 4074.8 c
-2893.48 4074.8 2898 4068.2 2898 4055.54 c
-2898 4016.48 l
-2898 4006.4 2895.93 4004.42 2885.2 4003.7 c
-2885.2 4001 l
-2925.52 4001 l
-2925.52 4004 l
-2915.26 4004.18 2913 4007.17 2913 4018.1 c
-2913 4063.46 l
-2918.28 4071.2 2923.91 4074.8 2932.18 4074.8 c
-2942.44 4074.8 2946 4069.85 2946 4054.64 c
-2946 4016.66 l
-2946 4006.4 2944.52 4004.96 2933.8 4003.7 c
-2933.8 4001 l
-2973.22 4001 l
-2973.22 4003.7 l
-2968.54 4004.06 l
-2963.14 4004.42 2961 4007.66 2961 4014.68 c
-2961 4051.76 l
-2961 4073 2953.91 4083.8 2939.92 4083.8 c
-2929.48 4083.8 2920.3 4079.12 2910.58 4068.68 c
-2907.34 4078.94 2901.22 4083.8 2891.5 4083.8 c
-2883.31 4083.8 2878.57 4081.46 2863.28 4069.94 c
-2863.28 4083.44 l
-2862.34 4083.8 l
-2853.16 4080.38 2847.04 4078.4 2837.14 4075.7 c
-h
-2974.04 4001 m
-f*
-2974.62 4071.74 m
-2976.24 4071.92 2977.5 4071.92 2979.12 4071.92 c
-2985.24 4071.92 2987 4070.12 2987 4061.66 c
-2987 3977.42 l
-2987 3968.06 2984.94 3966.08 2973.9 3965 c
-2973.9 3962 l
-3017.46 3962 l
-3017.46 3965 l
-3003.96 3965.18 3002 3967.19 3002 3978.68 c
-3002 4006.94 l
-3008.34 4001 3012.4 3999.2 3019.8 3999.2 c
-3041.22 3999.2 3057 4019.36 3057 4045.46 c
-3057 4067.78 3044.65 4083.8 3027.54 4083.8 c
-3017.61 4083.8 3009.8 4079.48 3002 4069.58 c
-3002 4083.44 l
-3000.54 4083.8 l
-2991 4080.02 2984.52 4077.68 2974.62 4074.62 c
-h
-3002 4061.12 m
-3002 4066.52 3011.87 4072.8 3019.98 4072.8 c
-3033.3 4072.8 3042 4059.2 3042 4038.26 c
-3042 4018.46 3033.23 4004.2 3020.34 4004.2 c
-3011.88 4004.2 3002 4011.09 3002 4016.84 c
-h
-3063 4001 m
-f*
-3184 4104.14 m
-3184 4022.6 l
-3184 4007.66 3181.88 4005.32 3167.94 4004.42 c
-3167.94 4001 l
-3218.34 4001 l
-3218.34 4004.42 l
-3205.2 4005.32 3203 4007.84 3203 4020.62 c
-3203 4100.54 l
-3203 4113.32 3205.29 4115.66 3218.34 4116.74 c
-3218.34 4120 l
-3182.52 4120 l
-3142.74 4029.26 l
-3101.16 4120 l
-3065.52 4120 l
-3065.52 4117 l
-3080.28 4116.09 3083 4113.89 3083 4100.54 c
-3083 4027.46 l
-3083 4008.92 3080.43 4005.5 3065.16 4004.42 c
-3065.16 4001 l
-3107.46 4001 l
-3107.46 4004 l
-3093.6 4004.73 3091 4008.95 3091 4027.46 c
-3091 4100 l
-3135.72 4001 l
-3138.24 4001 l
-h
-3223.02 4001 m
-f*
-3303.56 4012.88 m
-3300.5 4010.36 3298.34 4009.2 3295.64 4009.2 c
-3291.5 4009.2 3290 4011.78 3290 4019.9 c
-3290 4055 l
-3290 4064.18 3289.16 4069.22 3286.82 4073.36 c
-3283.04 4080.2 3275.3 4083.8 3264.32 4083.8 c
-3255.14 4083.8 3246.5 4081.28 3241.46 4077.14 c
-3236.96 4073.36 3234 4068.14 3234 4063.64 c
-3234 4059.5 3237.46 4055.9 3241.82 4055.9 c
-3246.14 4055.9 3249.92 4059.5 3249.92 4063.46 c
-3249.92 4064.18 3249.74 4065.08 3249.56 4066.34 c
-3249.2 4067.96 3249 4069.4 3249 4070.66 c
-3249 4075.52 3254.77 4079.8 3261.98 4079.8 c
-3270.8 4079.8 3275 4074.47 3275 4064.54 c
-3275 4053.56 l
-3247.76 4042.4 3244.75 4040.96 3237.14 4034.12 c
-3233.18 4030.52 3230.66 4024.4 3230.66 4018.46 c
-3230.66 4007.12 3238.4 3999.2 3249.56 3999.2 c
-3257.48 3999.2 3264.86 4002.98 3275.84 4012.34 c
-3276.74 4002.8 3279.98 3999.2 3287.36 3999.2 c
-3293.48 3999.2 3297.26 4001.36 3303.56 4008.2 c
-h
-3275 4023.14 m
-3275 4017.56 3274.23 4015.94 3270.98 4013.6 c
-3266.66 4011.08 3261.62 4009.2 3257.84 4009.2 c
-3251.54 4009.2 3246.48 4015.51 3246.48 4023.5 c
-3246.48 4024.22 l
-3246.48 4034.84 3253.7 4041.32 3275 4049.24 c
-h
-3303.92 4001 m
-f*
-3304.62 4071.74 m
-3306.24 4071.92 3307.5 4071.92 3309.12 4071.92 c
-3315.24 4071.92 3317 4070.12 3317 4061.66 c
-3317 3977.42 l
-3317 3968.06 3314.94 3966.08 3303.9 3965 c
-3303.9 3962 l
-3347.46 3962 l
-3347.46 3965 l
-3333.96 3965.18 3332 3967.19 3332 3978.68 c
-3332 4006.94 l
-3338.34 4001 3342.4 3999.2 3349.8 3999.2 c
-3371.22 3999.2 3387 4019.36 3387 4045.46 c
-3387 4067.78 3374.65 4083.8 3357.54 4083.8 c
-3347.61 4083.8 3339.8 4079.48 3332 4069.58 c
-3332 4083.44 l
-3330.54 4083.8 l
-3321 4080.02 3314.52 4077.68 3304.62 4074.62 c
-h
-3332 4061.12 m
-3332 4066.52 3341.87 4072.8 3349.98 4072.8 c
-3363.3 4072.8 3372 4059.2 3372 4038.26 c
-3372 4018.46 3363.23 4004.2 3350.34 4004.2 c
-3341.88 4004.2 3332 4011.09 3332 4016.84 c
-h
-3393 4001 m
-f*
-1 i
-3773.75 3382.55 330 104.4 re
-Y
-3773.75 3479.75 m
-4095.35 3390.95 l
-S
-0 0 6120 7920 re
-Y
-3812.15 3480.95 m
-3812.15 3502.55 3794.15 3520.55 3772.55 3520.55 c
-3750.95 3520.55 3732.95 3502.55 3732.95 3480.95 c
-3732.95 3459.35 3750.95 3441.35 3772.55 3441.35 c
-3794.15 3441.35 3812.15 3459.35 3812.15 3480.95 c
-f*
-4046.15 3354.95 m
-4077.35 3395.75 l
-4071.35 3447.35 l
-4205.75 3360.95 l
-f*
-3773.75 2988.95 339.6 190.8 re
-Y
-3773.75 3179.75 m
-4104.95 2997.35 l
-S
-0 0 6120 7920 re
-Y
-3812.15 3180.95 m
-3812.15 3202.55 3794.15 3220.55 3772.55 3220.55 c
-3750.95 3220.55 3732.95 3202.55 3732.95 3180.95 c
-3732.95 3159.35 3750.95 3141.35 3772.55 3141.35 c
-3794.15 3141.35 3812.15 3159.35 3812.15 3180.95 c
-f*
-4049.75 2973.35 m
-4088.15 3005.75 l
-4096.55 3056.15 l
-4205.75 2940.95 l
-f*
-1973.75 2225.75 342 294 re
-Y
-1973.75 2519.75 m
-2307.35 2234.15 l
-S
-0 0 6120 7920 re
-Y
-2012.15 2520.95 m
-2012.15 2542.55 1994.15 2560.55 1972.55 2560.55 c
-1950.95 2560.55 1932.95 2542.55 1932.95 2520.95 c
-1932.95 2499.35 1950.95 2481.35 1972.55 2481.35 c
-1994.15 2481.35 2012.15 2499.35 2012.15 2520.95 c
-f*
-2247.35 2223.35 m
-2291.75 2247.35 l
-2308.55 2294.15 l
-2393.75 2159.75 l
-f*
-3773.75 2151.35 342 295.2 re
-Y
-3773.75 2159.75 m
-4107.35 2446.55 l
-S
-0 0 6120 7920 re
-Y
-3812.15 2160.95 m
-3812.15 2182.55 3794.15 2200.55 3772.55 2200.55 c
-3750.95 2200.55 3732.95 2182.55 3732.95 2160.95 c
-3732.95 2139.35 3750.95 2121.35 3772.55 2121.35 c
-3794.15 2121.35 3812.15 2139.35 3812.15 2160.95 c
-f*
-4108.55 2384.15 m
-4091.75 2432.15 l
-4047.35 2456.15 l
-4193.75 2519.75 l
-f*
-4203.35 3352.55 319.2 15.5999 re
-Y
-4200.95 3360.95 m
-4515.35 3360.95 l
-S
-0 0 6120 7920 re
-Y
-4242.95 3362.15 m
-4242.95 3383.75 4224.95 3401.75 4203.35 3401.75 c
-4180.55 3401.75 4162.55 3383.75 4162.55 3362.15 c
-4162.55 3340.55 4180.55 3322.55 4203.35 3322.55 c
-4224.95 3322.55 4242.95 3340.55 4242.95 3362.15 c
-f*
-4473.35 3312.95 m
-4492.55 3360.95 l
-4473.35 3408.95 l
-4625.75 3360.95 l
-f*
-4203.35 2932.55 319.2 15.5999 re
-Y
-4200.95 2940.95 m
-4515.35 2940.95 l
-S
-0 0 6120 7920 re
-Y
-4242.95 2942.15 m
-4242.95 2963.75 4224.95 2981.75 4203.35 2981.75 c
-4180.55 2981.75 4162.55 2963.75 4162.55 2942.15 c
-4162.55 2920.55 4180.55 2902.55 4203.35 2902.55 c
-4224.95 2902.55 4242.95 2920.55 4242.95 2942.15 c
-f*
-4473.35 2892.95 m
-4492.55 2940.95 l
-4473.35 2988.95 l
-4625.75 2940.95 l
-f*
-4203.35 2512.55 319.2 15.5999 re
-Y
-4200.95 2520.95 m
-4515.35 2520.95 l
-S
-0 0 6120 7920 re
-Y
-4242.95 2522.15 m
-4242.95 2543.75 4224.95 2561.75 4203.35 2561.75 c
-4180.55 2561.75 4162.55 2543.75 4162.55 2522.15 c
-4162.55 2500.55 4180.55 2482.55 4203.35 2482.55 c
-4224.95 2482.55 4242.95 2500.55 4242.95 2522.15 c
-f*
-4473.35 2472.95 m
-4492.55 2520.95 l
-4473.35 2568.95 l
-4625.75 2520.95 l
-f*
-1563.35 3352.55 319.2 15.5999 re
-Y
-1560.95 3360.95 m
-1875.35 3360.95 l
-S
-0 0 6120 7920 re
-Y
-1602.95 3362.15 m
-1602.95 3383.75 1584.95 3401.75 1563.35 3401.75 c
-1540.55 3401.75 1522.55 3383.75 1522.55 3362.15 c
-1522.55 3340.55 1540.55 3322.55 1563.35 3322.55 c
-1584.95 3322.55 1602.95 3340.55 1602.95 3362.15 c
-f*
-1833.35 3312.95 m
-1852.55 3360.95 l
-1833.35 3408.95 l
-1985.75 3360.95 l
-f*
-1563.35 2932.55 319.2 15.5999 re
-Y
-1560.95 2940.95 m
-1875.35 2940.95 l
-S
-0 0 6120 7920 re
-Y
-1602.95 2942.15 m
-1602.95 2963.75 1584.95 2981.75 1563.35 2981.75 c
-1540.55 2981.75 1522.55 2963.75 1522.55 2942.15 c
-1522.55 2920.55 1540.55 2902.55 1563.35 2902.55 c
-1584.95 2902.55 1602.95 2920.55 1602.95 2942.15 c
-f*
-1833.35 2892.95 m
-1852.55 2940.95 l
-1833.35 2988.95 l
-1985.75 2940.95 l
-f*
-1563.35 2512.55 319.2 15.5999 re
-Y
-1560.95 2520.95 m
-1875.35 2520.95 l
-S
-0 0 6120 7920 re
-Y
-1602.95 2522.15 m
-1602.95 2543.75 1584.95 2561.75 1563.35 2561.75 c
-1540.55 2561.75 1522.55 2543.75 1522.55 2522.15 c
-1522.55 2500.55 1540.55 2482.55 1563.35 2482.55 c
-1584.95 2482.55 1602.95 2500.55 1602.95 2522.15 c
-f*
-1833.35 2472.95 m
-1852.55 2520.95 l
-1833.35 2568.95 l
-1985.75 2520.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/series.eps b/ast-5.3-1/sun210_figures/series.eps
deleted file mode 100644
index be928fc..0000000
--- a/ast-5.3-1/sun210_figures/series.eps
+++ /dev/null
@@ -1,970 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 44 119 541 306
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:38:48
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5033.75 2775.35 m
-5033.75 2900.15 4932.95 3000.95 4808.15 3000.95 c
-1178.15 3000.95 l
-1053.35 3000.95 952.55 2900.15 952.55 2775.35 c
-952.55 1425.35 l
-952.55 1300.55 1053.35 1199.75 1178.15 1199.75 c
-4808.15 1199.75 l
-4932.95 1199.75 5033.75 1300.55 5033.75 1425.35 c
-f*
-1 g
-4968.95 2831.75 m
-4968.95 2955.35 4869.35 3054.95 4744.55 3054.95 c
-1122.95 3054.95 l
-998.15 3054.95 898.55 2955.35 898.55 2831.75 c
-898.55 1487.75 l
-898.55 1364.15 998.15 1264.55 1122.95 1264.55 c
-4744.55 1264.55 l
-4869.35 1264.55 4968.95 1364.15 4968.95 1487.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-4968.95 2831.75 m
-4968.95 2955.35 4869.35 3054.95 4744.55 3054.95 c
-1122.95 3054.95 l
-998.15 3054.95 898.55 2955.35 898.55 2831.75 c
-898.55 1487.75 l
-898.55 1364.15 998.15 1264.55 1122.95 1264.55 c
-4744.55 1264.55 l
-4869.35 1264.55 4968.95 1364.15 4968.95 1487.75 c
-h
-S
-903.35 2212.55 319.2 15.5999 re
-Y
-900.95 2220.95 m
-1215.35 2220.95 l
-S
-0 0 6120 7920 re
-Y
-942.95 2222.15 m
-942.95 2243.75 924.95 2261.75 903.35 2261.75 c
-880.55 2261.75 862.55 2243.75 862.55 2222.15 c
-862.55 2200.55 880.55 2182.55 903.35 2182.55 c
-924.95 2182.55 942.95 2200.55 942.95 2222.15 c
-f*
-1173.35 2172.95 m
-1192.55 2220.95 l
-1173.35 2268.95 l
-1325.75 2220.95 l
-f*
-0.564706 g
-2793.35 2331.35 m
-2793.35 2402.15 2735.75 2460.95 2663.75 2460.95 c
-1524.95 2460.95 l
-1452.95 2460.95 1395.35 2402.15 1395.35 2331.35 c
-1395.35 1552.55 l
-1395.35 1480.55 1452.95 1422.95 1524.95 1422.95 c
-2663.75 1422.95 l
-2735.75 1422.95 2793.35 1480.55 2793.35 1552.55 c
-f*
-1 g
-2728.55 2386.55 m
-2728.55 2457.35 2672.15 2514.95 2600.15 2514.95 c
-1469.75 2514.95 l
-1398.95 2514.95 1341.35 2457.35 1341.35 2386.55 c
-1341.35 1614.95 l
-1341.35 1545.35 1398.95 1487.75 1469.75 1487.75 c
-2600.15 1487.75 l
-2670.95 1487.75 2728.55 1545.35 2728.55 1614.95 c
-f*
-0 g
-2728.55 2386.55 m
-2728.55 2457.35 2672.15 2514.95 2600.15 2514.95 c
-1469.75 2514.95 l
-1398.95 2514.95 1341.35 2457.35 1341.35 2386.55 c
-1341.35 1614.95 l
-1341.35 1545.35 1398.95 1487.75 1469.75 1487.75 c
-2600.15 1487.75 l
-2670.95 1487.75 2728.55 1545.35 2728.55 1614.95 c
-h
-S
-0.564706 g
-4624.55 2327.75 m
-4624.55 2400.95 4564.55 2460.95 4491.35 2460.95 c
-3359.75 2460.95 l
-3286.55 2460.95 3226.55 2400.95 3226.55 2327.75 c
-3226.55 1527.35 l
-3226.55 1454.15 3286.55 1394.15 3359.75 1394.15 c
-4491.35 1394.15 l
-4564.55 1394.15 4624.55 1454.15 4624.55 1527.35 c
-f*
-1 g
-4559.75 2382.95 m
-4559.75 2456.15 4500.95 2514.95 4427.75 2514.95 c
-3304.55 2514.95 l
-3231.35 2514.95 3172.55 2456.15 3172.55 2382.95 c
-3172.55 1590.95 l
-3172.55 1517.75 3231.35 1458.95 3304.55 1458.95 c
-4427.75 1458.95 l
-4500.95 1458.95 4559.75 1517.75 4559.75 1590.95 c
-f*
-0 g
-4559.75 2382.95 m
-4559.75 2456.15 4500.95 2514.95 4427.75 2514.95 c
-3304.55 2514.95 l
-3231.35 2514.95 3172.55 2456.15 3172.55 2382.95 c
-3172.55 1590.95 l
-3172.55 1517.75 3231.35 1458.95 3304.55 1458.95 c
-4427.75 1458.95 l
-4500.95 1458.95 4559.75 1517.75 4559.75 1590.95 c
-h
-S
-903.35 1792.55 319.2 15.5999 re
-Y
-900.95 1800.95 m
-1215.35 1800.95 l
-S
-0 0 6120 7920 re
-Y
-942.95 1802.15 m
-942.95 1823.75 924.95 1841.75 903.35 1841.75 c
-880.55 1841.75 862.55 1823.75 862.55 1802.15 c
-862.55 1780.55 880.55 1762.55 903.35 1762.55 c
-924.95 1762.55 942.95 1780.55 942.95 1802.15 c
-f*
-1173.35 1752.95 m
-1192.55 1800.95 l
-1173.35 1848.95 l
-1325.75 1800.95 l
-f*
-2724.95 2272.55 340.8 15.5999 re
-Y
-2722.55 2280.95 m
-3058.55 2280.95 l
-S
-0 0 6120 7920 re
-Y
-2763.35 2282.15 m
-2763.35 2303.75 2745.35 2321.75 2723.75 2321.75 c
-2702.15 2321.75 2684.15 2303.75 2684.15 2282.15 c
-2684.15 2260.55 2702.15 2242.55 2723.75 2242.55 c
-2745.35 2242.55 2763.35 2260.55 2763.35 2282.15 c
-f*
-3017.75 2232.95 m
-3035.75 2280.95 l
-3017.75 2328.95 l
-3170.15 2280.95 l
-f*
-2724.95 1672.55 339.6 15.5999 re
-Y
-2722.55 1680.95 m
-3057.35 1680.95 l
-S
-0 0 6120 7920 re
-Y
-2763.35 1682.15 m
-2763.35 1703.75 2745.35 1721.75 2723.75 1721.75 c
-2702.15 1721.75 2684.15 1703.75 2684.15 1682.15 c
-2684.15 1660.55 2702.15 1642.55 2723.75 1642.55 c
-2745.35 1642.55 2763.35 1660.55 2763.35 1682.15 c
-f*
-3016.55 1632.95 m
-3034.55 1680.95 l
-3016.55 1728.95 l
-3168.95 1680.95 l
-f*
-2724.95 1974.95 340.8 15.5999 re
-Y
-2722.55 1983.35 m
-3058.55 1983.35 l
-S
-0 0 6120 7920 re
-Y
-2763.35 1984.55 m
-2763.35 2006.15 2745.35 2024.15 2723.75 2024.15 c
-2702.15 2024.15 2684.15 2006.15 2684.15 1984.55 c
-2684.15 1962.95 2702.15 1944.95 2723.75 1944.95 c
-2745.35 1944.95 2763.35 1962.95 2763.35 1984.55 c
-f*
-3017.75 1936.55 m
-3035.75 1983.35 l
-3017.75 2031.35 l
-3170.15 1983.35 l
-f*
-4558.55 2216.15 304.8 15.5999 re
-Y
-4556.15 2224.55 m
-4856.15 2224.55 l
-S
-0 0 6120 7920 re
-Y
-4596.95 2225.75 m
-4596.95 2247.35 4578.95 2265.35 4557.35 2265.35 c
-4535.75 2265.35 4517.75 2247.35 4517.75 2225.75 c
-4517.75 2204.15 4535.75 2186.15 4557.35 2186.15 c
-4578.95 2186.15 4596.95 2204.15 4596.95 2225.75 c
-f*
-4816.55 2177.75 m
-4834.55 2224.55 l
-4816.55 2272.55 l
-4968.95 2224.55 l
-f*
-4558.55 1791.35 304.8 15.5999 re
-Y
-4556.15 1799.75 m
-4856.15 1799.75 l
-S
-0 0 6120 7920 re
-Y
-4596.95 1800.95 m
-4596.95 1822.55 4578.95 1840.55 4557.35 1840.55 c
-4535.75 1840.55 4517.75 1822.55 4517.75 1800.95 c
-4517.75 1779.35 4535.75 1761.35 4557.35 1761.35 c
-4578.95 1761.35 4596.95 1779.35 4596.95 1800.95 c
-f*
-4816.55 1751.75 m
-4834.55 1799.75 l
-4816.55 1847.75 l
-4968.95 1799.75 l
-f*
-0.2 i
-1742 2064.14 m
-1742 1982.6 l
-1742 1967.66 1739.88 1965.32 1725.94 1964.42 c
-1725.94 1961 l
-1776.34 1961 l
-1776.34 1964.42 l
-1763.2 1965.32 1761 1967.84 1761 1980.62 c
-1761 2060.54 l
-1761 2073.32 1763.29 2075.66 1776.34 2076.74 c
-1776.34 2080 l
-1740.52 2080 l
-1700.74 1989.26 l
-1659.16 2080 l
-1623.52 2080 l
-1623.52 2077 l
-1638.28 2076.09 1641 2073.89 1641 2060.54 c
-1641 1987.46 l
-1641 1968.92 1638.43 1965.5 1623.16 1964.42 c
-1623.16 1961 l
-1665.46 1961 l
-1665.46 1964 l
-1651.6 1964.73 1649 1968.95 1649 1987.46 c
-1649 2060 l
-1693.72 1961 l
-1696.24 1961 l
-h
-1781.02 1961 m
-f*
-1860.56 1972.88 m
-1857.5 1970.36 1855.34 1969.2 1852.64 1969.2 c
-1848.5 1969.2 1847 1971.78 1847 1979.9 c
-1847 2015 l
-1847 2024.18 1846.16 2029.22 1843.82 2033.36 c
-1840.04 2040.2 1832.3 2043.8 1821.32 2043.8 c
-1812.14 2043.8 1803.5 2041.28 1798.46 2037.14 c
-1793.96 2033.36 1791 2028.14 1791 2023.64 c
-1791 2019.5 1794.46 2015.9 1798.82 2015.9 c
-1803.14 2015.9 1806.92 2019.5 1806.92 2023.46 c
-1806.92 2024.18 1806.74 2025.08 1806.56 2026.34 c
-1806.2 2027.96 1806 2029.4 1806 2030.66 c
-1806 2035.52 1811.77 2039.8 1818.98 2039.8 c
-1827.8 2039.8 1832 2034.47 1832 2024.54 c
-1832 2013.56 l
-1804.76 2002.4 1801.75 2000.96 1794.14 1994.12 c
-1790.18 1990.52 1787.66 1984.4 1787.66 1978.46 c
-1787.66 1967.12 1795.4 1959.2 1806.56 1959.2 c
-1814.48 1959.2 1821.86 1962.98 1832.84 1972.34 c
-1833.74 1962.8 1836.98 1959.2 1844.36 1959.2 c
-1850.48 1959.2 1854.26 1961.36 1860.56 1968.2 c
-h
-1832 1983.14 m
-1832 1977.56 1831.23 1975.94 1827.98 1973.6 c
-1823.66 1971.08 1818.62 1969.2 1814.84 1969.2 c
-1808.54 1969.2 1803.48 1975.51 1803.48 1983.5 c
-1803.48 1984.22 l
-1803.48 1994.84 1810.7 2001.32 1832 2009.24 c
-h
-1860.92 1961 m
-f*
-1862.62 2031.74 m
-1864.24 2031.92 1865.5 2031.92 1867.12 2031.92 c
-1873.24 2031.92 1875 2030.12 1875 2021.66 c
-1875 1937.42 l
-1875 1928.06 1872.94 1926.08 1861.9 1925 c
-1861.9 1922 l
-1905.46 1922 l
-1905.46 1925 l
-1891.96 1925.18 1890 1927.19 1890 1938.68 c
-1890 1966.94 l
-1896.34 1961 1900.4 1959.2 1907.8 1959.2 c
-1929.22 1959.2 1945 1979.36 1945 2005.46 c
-1945 2027.78 1932.65 2043.8 1915.54 2043.8 c
-1905.61 2043.8 1897.8 2039.48 1890 2029.58 c
-1890 2043.44 l
-1888.54 2043.8 l
-1879 2040.02 1872.52 2037.68 1862.62 2034.62 c
-h
-1890 2021.12 m
-1890 2026.52 1899.87 2032.8 1907.98 2032.8 c
-1921.3 2032.8 1930 2019.2 1930 1998.26 c
-1930 1978.46 1921.23 1964.2 1908.34 1964.2 c
-1899.88 1964.2 1890 1971.09 1890 1976.84 c
-h
-1951 1961 m
-f*
-1952.62 2031.74 m
-1954.24 2031.92 1955.5 2031.92 1957.12 2031.92 c
-1963.24 2031.92 1965 2030.12 1965 2021.66 c
-1965 1937.42 l
-1965 1928.06 1962.94 1926.08 1951.9 1925 c
-1951.9 1922 l
-1995.46 1922 l
-1995.46 1925 l
-1981.96 1925.18 1980 1927.19 1980 1938.68 c
-1980 1966.94 l
-1986.34 1961 1990.4 1959.2 1997.8 1959.2 c
-2019.22 1959.2 2035 1979.36 2035 2005.46 c
-2035 2027.78 2022.65 2043.8 2005.54 2043.8 c
-1995.61 2043.8 1987.8 2039.48 1980 2029.58 c
-1980 2043.44 l
-1978.54 2043.8 l
-1969 2040.02 1962.52 2037.68 1952.62 2034.62 c
-h
-1980 2021.12 m
-1980 2026.52 1989.87 2032.8 1997.98 2032.8 c
-2011.3 2032.8 2020 2019.2 2020 1998.26 c
-2020 1978.46 2011.23 1964.2 1998.34 1964.2 c
-1989.88 1964.2 1980 1971.09 1980 1976.84 c
-h
-2041 1961 m
-f*
-2072.5 2043.8 m
-2044.6 2033.9 l
-2044.6 2031.2 l
-2046.04 2031.38 l
-2048.2 2031.74 2050.54 2031.72 2052.16 2031.72 c
-2056.48 2031.72 2058 2028.89 2058 2021.12 c
-2058 1979.36 l
-2058 1966.4 2056.21 1964.42 2043.88 1963.7 c
-2043.88 1961 l
-2086.54 1961 l
-2086.54 1963.7 l
-2074.66 1964.6 2073 1966.4 2073 1979.36 c
-2073 2043.26 l
-h
-2064.22 2084 m
-2059.18 2084 2055 2079.83 2055 2074.76 c
-2055 2069.54 2058.98 2066 2064.04 2066 c
-2069.44 2066 2074 2069.78 2074 2074.76 c
-2074 2079.8 2069.59 2084 2064.22 2084 c
-h
-2091.04 1961 m
-f*
-2093.88 2032.64 m
-2095.14 2033.18 2096.76 2033.36 2098.74 2033.36 c
-2103.78 2033.36 2105 2030.66 2105 2021.84 c
-2105 1977.2 l
-2105 1966.94 2103.09 1964.42 2094.24 1963.7 c
-2094.24 1961 l
-2132.4 1961 l
-2132.4 1963.7 l
-2123.22 1964.42 2120 1966.58 2120 1973.06 c
-2120 2023.64 l
-2128.7 2031.74 2132.95 2033.8 2139.06 2033.8 c
-2147.88 2033.8 2152 2028.25 2152 2016.44 c
-2152 1978.82 l
-2152 1967.48 2149.7 1964.42 2140.86 1963.7 c
-2140.86 1961 l
-2178.3 1961 l
-2178.3 1963.7 l
-2169.48 1964.6 2167 1966.76 2167 1975.58 c
-2167 2016.8 l
-2167 2033.72 2159.2 2043.8 2146.08 2043.8 c
-2137.64 2043.8 2131.94 2040.74 2119.46 2029.22 c
-2119.46 2043.44 l
-2118.72 2043.8 l
-2109.9 2040.56 2103.78 2038.58 2093.88 2035.7 c
-h
-2181 1961 m
-f*
-2265.6 2031 m
-2265.6 2038 l
-2251.74 2038 l
-2248.14 2038 2245.44 2038.5 2241.84 2039.66 c
-2237.88 2041.1 l
-2233.02 2042.9 2228.16 2043.8 2223.48 2043.8 c
-2206.74 2043.8 2193.38 2030.84 2193.38 2014.46 c
-2193.38 2003.12 2198.07 1996.28 2210.16 1990.34 c
-2207.64 1987.82 2205.12 1985.48 2202.42 1983.14 c
-2196.48 1977.92 2194.1 1974.32 2194.1 1970.72 c
-2194.1 1966.76 2196.09 1964.78 2203.68 1961.18 c
-2190.72 1951.82 2186 1945.88 2186 1939.22 c
-2186 1929.68 2199.88 1922 2217.18 1922 c
-2230.14 1922 2243.82 1926.23 2253.18 1933.28 c
-2260.56 1939.04 2264 1944.98 2264 1952.18 c
-2264 1963.34 2255.53 1970.9 2242.2 1971.44 c
-2218.98 1972.52 l
-2209.26 1972.88 2204.94 1974.5 2204.94 1977.38 c
-2204.94 1980.98 2210.88 1987.28 2215.74 1988.72 c
-2219.16 1988.36 l
-2222.4 1988 2224.92 1988 2226 1988 c
-2232.3 1988 2239.32 1990.46 2244.72 1994.84 c
-2251.2 1999.88 2254 2006.36 2254 2015.72 c
-2254 2021 2253.12 2025.18 2250.66 2031 c
-h
-2207.46 1960.64 m
-2213.58 1959.38 2227.8 1958.3 2236.62 1958.3 c
-2253 1958.3 2259 1956.14 2259 1949.48 c
-2259 1939.04 2245.3 1932 2224.74 1932 c
-2208.9 1932 2199 1937.23 2199 1945.16 c
-2199 1949.3 2200.55 1952 2207.46 1960.64 c
-h
-2208.36 2021.84 m
-2208.36 2032.46 2213.4 2038.8 2221.68 2038.8 c
-2227.26 2038.8 2231.94 2035.73 2234.82 2030.3 c
-2238.24 2024 2240 2015.9 2240 2008.52 c
-2240 1998.62 2234.87 1993 2226.9 1993 c
-2215.74 1993 2208.36 2004.43 2208.36 2021.3 c
-h
-2271 1961 m
-f*
-2316 1961 m
-f*
-2443.08 1964.42 m
-2434.98 1964.96 2433.18 1966.76 2426.88 1980.08 c
-2382.06 2082.16 l
-2378.46 2082.16 l
-2341.02 1993.94 l
-2329.5 1967.66 2327.34 1964.96 2318.7 1964.42 c
-2318.7 1961 l
-2354.34 1961 l
-2354.34 1964.82 l
-2345.7 1964.82 2342.1 1967.03 2342.1 1971.8 c
-2342.1 1973.96 2342.64 1976.48 2343.54 1978.82 c
-2351.82 2000 l
-2398.98 2000 l
-2406.36 1982.6 l
-2408.52 1977.56 2409.78 1973.06 2409.78 1970.36 c
-2409.78 1968.74 2408.7 1966.76 2407.26 1966.04 c
-2405.1 1964.78 2403.66 1964.82 2397.18 1964.82 c
-2397.18 1961 l
-2443.08 1961 l
-h
-2354.88 2007 m
-2375.58 2056.76 l
-2396.46 2007 l
-h
-2445.96 1961 m
-f*
-3607 2064.14 m
-3607 1982.6 l
-3607 1967.66 3604.88 1965.32 3590.94 1964.42 c
-3590.94 1961 l
-3641.34 1961 l
-3641.34 1964.42 l
-3628.2 1965.32 3626 1967.84 3626 1980.62 c
-3626 2060.54 l
-3626 2073.32 3628.29 2075.66 3641.34 2076.74 c
-3641.34 2080 l
-3605.52 2080 l
-3565.74 1989.26 l
-3524.16 2080 l
-3488.52 2080 l
-3488.52 2077 l
-3503.28 2076.09 3506 2073.89 3506 2060.54 c
-3506 1987.46 l
-3506 1968.92 3503.43 1965.5 3488.16 1964.42 c
-3488.16 1961 l
-3530.46 1961 l
-3530.46 1964 l
-3516.6 1964.73 3514 1968.95 3514 1987.46 c
-3514 2060 l
-3558.72 1961 l
-3561.24 1961 l
-h
-3646.02 1961 m
-f*
-3726.56 1972.88 m
-3723.5 1970.36 3721.34 1969.2 3718.64 1969.2 c
-3714.5 1969.2 3713 1971.78 3713 1979.9 c
-3713 2015 l
-3713 2024.18 3712.16 2029.22 3709.82 2033.36 c
-3706.04 2040.2 3698.3 2043.8 3687.32 2043.8 c
-3678.14 2043.8 3669.5 2041.28 3664.46 2037.14 c
-3659.96 2033.36 3657 2028.14 3657 2023.64 c
-3657 2019.5 3660.46 2015.9 3664.82 2015.9 c
-3669.14 2015.9 3672.92 2019.5 3672.92 2023.46 c
-3672.92 2024.18 3672.74 2025.08 3672.56 2026.34 c
-3672.2 2027.96 3672 2029.4 3672 2030.66 c
-3672 2035.52 3677.77 2039.8 3684.98 2039.8 c
-3693.8 2039.8 3698 2034.47 3698 2024.54 c
-3698 2013.56 l
-3670.76 2002.4 3667.75 2000.96 3660.14 1994.12 c
-3656.18 1990.52 3653.66 1984.4 3653.66 1978.46 c
-3653.66 1967.12 3661.4 1959.2 3672.56 1959.2 c
-3680.48 1959.2 3687.86 1962.98 3698.84 1972.34 c
-3699.74 1962.8 3702.98 1959.2 3710.36 1959.2 c
-3716.48 1959.2 3720.26 1961.36 3726.56 1968.2 c
-h
-3698 1983.14 m
-3698 1977.56 3697.23 1975.94 3693.98 1973.6 c
-3689.66 1971.08 3684.62 1969.2 3680.84 1969.2 c
-3674.54 1969.2 3669.48 1975.51 3669.48 1983.5 c
-3669.48 1984.22 l
-3669.48 1994.84 3676.7 2001.32 3698 2009.24 c
-h
-3726.92 1961 m
-f*
-3727.62 2031.74 m
-3729.24 2031.92 3730.5 2031.92 3732.12 2031.92 c
-3738.24 2031.92 3740 2030.12 3740 2021.66 c
-3740 1937.42 l
-3740 1928.06 3737.94 1926.08 3726.9 1925 c
-3726.9 1922 l
-3770.46 1922 l
-3770.46 1925 l
-3756.96 1925.18 3755 1927.19 3755 1938.68 c
-3755 1966.94 l
-3761.34 1961 3765.4 1959.2 3772.8 1959.2 c
-3794.22 1959.2 3810 1979.36 3810 2005.46 c
-3810 2027.78 3797.65 2043.8 3780.54 2043.8 c
-3770.61 2043.8 3762.8 2039.48 3755 2029.58 c
-3755 2043.44 l
-3753.54 2043.8 l
-3744 2040.02 3737.52 2037.68 3727.62 2034.62 c
-h
-3755 2021.12 m
-3755 2026.52 3764.87 2032.8 3772.98 2032.8 c
-3786.3 2032.8 3795 2019.2 3795 1998.26 c
-3795 1978.46 3786.23 1964.2 3773.34 1964.2 c
-3764.88 1964.2 3755 1971.09 3755 1976.84 c
-h
-3816 1961 m
-f*
-3817.62 2031.74 m
-3819.24 2031.92 3820.5 2031.92 3822.12 2031.92 c
-3828.24 2031.92 3830 2030.12 3830 2021.66 c
-3830 1937.42 l
-3830 1928.06 3827.94 1926.08 3816.9 1925 c
-3816.9 1922 l
-3860.46 1922 l
-3860.46 1925 l
-3846.96 1925.18 3845 1927.19 3845 1938.68 c
-3845 1966.94 l
-3851.34 1961 3855.4 1959.2 3862.8 1959.2 c
-3884.22 1959.2 3900 1979.36 3900 2005.46 c
-3900 2027.78 3887.65 2043.8 3870.54 2043.8 c
-3860.61 2043.8 3852.8 2039.48 3845 2029.58 c
-3845 2043.44 l
-3843.54 2043.8 l
-3834 2040.02 3827.52 2037.68 3817.62 2034.62 c
-h
-3845 2021.12 m
-3845 2026.52 3854.87 2032.8 3862.98 2032.8 c
-3876.3 2032.8 3885 2019.2 3885 1998.26 c
-3885 1978.46 3876.23 1964.2 3863.34 1964.2 c
-3854.88 1964.2 3845 1971.09 3845 1976.84 c
-h
-3906 1961 m
-f*
-3937.5 2043.8 m
-3909.6 2033.9 l
-3909.6 2031.2 l
-3911.04 2031.38 l
-3913.2 2031.74 3915.54 2031.72 3917.16 2031.72 c
-3921.48 2031.72 3923 2028.89 3923 2021.12 c
-3923 1979.36 l
-3923 1966.4 3921.21 1964.42 3908.88 1963.7 c
-3908.88 1961 l
-3951.54 1961 l
-3951.54 1963.7 l
-3939.66 1964.6 3938 1966.4 3938 1979.36 c
-3938 2043.26 l
-h
-3929.22 2084 m
-3924.18 2084 3920 2079.83 3920 2074.76 c
-3920 2069.54 3923.98 2066 3929.04 2066 c
-3934.44 2066 3939 2069.78 3939 2074.76 c
-3939 2079.8 3934.59 2084 3929.22 2084 c
-h
-3956.04 1961 m
-f*
-3958.88 2032.64 m
-3960.14 2033.18 3961.76 2033.36 3963.74 2033.36 c
-3968.78 2033.36 3970 2030.66 3970 2021.84 c
-3970 1977.2 l
-3970 1966.94 3968.09 1964.42 3959.24 1963.7 c
-3959.24 1961 l
-3997.4 1961 l
-3997.4 1963.7 l
-3988.22 1964.42 3985 1966.58 3985 1973.06 c
-3985 2023.64 l
-3993.7 2031.74 3997.95 2033.8 4004.06 2033.8 c
-4012.88 2033.8 4017 2028.25 4017 2016.44 c
-4017 1978.82 l
-4017 1967.48 4014.7 1964.42 4005.86 1963.7 c
-4005.86 1961 l
-4043.3 1961 l
-4043.3 1963.7 l
-4034.48 1964.6 4032 1966.76 4032 1975.58 c
-4032 2016.8 l
-4032 2033.72 4024.2 2043.8 4011.08 2043.8 c
-4002.64 2043.8 3996.94 2040.74 3984.46 2029.22 c
-3984.46 2043.44 l
-3983.72 2043.8 l
-3974.9 2040.56 3968.78 2038.58 3958.88 2035.7 c
-h
-4046 1961 m
-f*
-4130.6 2031 m
-4130.6 2038 l
-4116.74 2038 l
-4113.14 2038 4110.44 2038.5 4106.84 2039.66 c
-4102.88 2041.1 l
-4098.02 2042.9 4093.16 2043.8 4088.48 2043.8 c
-4071.74 2043.8 4058.38 2030.84 4058.38 2014.46 c
-4058.38 2003.12 4063.07 1996.28 4075.16 1990.34 c
-4072.64 1987.82 4070.12 1985.48 4067.42 1983.14 c
-4061.48 1977.92 4059.1 1974.32 4059.1 1970.72 c
-4059.1 1966.76 4061.09 1964.78 4068.68 1961.18 c
-4055.72 1951.82 4051 1945.88 4051 1939.22 c
-4051 1929.68 4064.88 1922 4082.18 1922 c
-4095.14 1922 4108.82 1926.23 4118.18 1933.28 c
-4125.56 1939.04 4129 1944.98 4129 1952.18 c
-4129 1963.34 4120.53 1970.9 4107.2 1971.44 c
-4083.98 1972.52 l
-4074.26 1972.88 4069.94 1974.5 4069.94 1977.38 c
-4069.94 1980.98 4075.88 1987.28 4080.74 1988.72 c
-4084.16 1988.36 l
-4087.4 1988 4089.92 1988 4091 1988 c
-4097.3 1988 4104.32 1990.46 4109.72 1994.84 c
-4116.2 1999.88 4119 2006.36 4119 2015.72 c
-4119 2021 4118.12 2025.18 4115.66 2031 c
-h
-4072.46 1960.64 m
-4078.58 1959.38 4092.8 1958.3 4101.62 1958.3 c
-4118 1958.3 4124 1956.14 4124 1949.48 c
-4124 1939.04 4110.3 1932 4089.74 1932 c
-4073.9 1932 4064 1937.23 4064 1945.16 c
-4064 1949.3 4065.55 1952 4072.46 1960.64 c
-h
-4073.36 2021.84 m
-4073.36 2032.46 4078.4 2038.8 4086.68 2038.8 c
-4092.26 2038.8 4096.94 2035.73 4099.82 2030.3 c
-4103.24 2024 4105 2015.9 4105 2008.52 c
-4105 1998.62 4099.87 1993 4091.9 1993 c
-4080.74 1993 4073.36 2004.43 4073.36 2021.3 c
-h
-4136 1961 m
-f*
-4181 1961 m
-f*
-4184.06 2080 m
-4184.06 2077 l
-4199.18 2076.09 4201 2074.07 4201 2060.54 c
-4201 1980.62 l
-4201 1967.3 4198.71 1964.96 4184.06 1964.42 c
-4184.06 1961 l
-4244.18 1961 l
-4271 1961 4288 1973.42 4288 1993.4 c
-4288 2001.32 4284.85 2008.52 4278.92 2013.74 c
-4273.52 2018.6 4268.66 2020.94 4256.96 2023.64 c
-4266.32 2025.98 4270.1 2027.78 4274.42 2031.56 c
-4278.92 2035.52 4282 2042.18 4282 2049.56 c
-4282 2069.72 4265.85 2080 4234.46 2080 c
-h
-4220 2019.68 m
-4236.94 2019.68 4244.78 2018.78 4251.56 2016.26 c
-4262 2012.12 4267 2004.74 4267 1993.22 c
-4267 1983.5 4263.23 1976.48 4256.06 1972.34 c
-4250.3 1968.92 4243.1 1968 4230.5 1968 c
-4222.22 1968 4220 1969.55 4220 1975.04 c
-h
-4220 2026.88 m
-4220 2068.1 l
-4220 2071.88 4221.16 2073 4223.66 2073 c
-4231.58 2073 l
-4252.28 2073 4263 2064.71 4263 2048.84 c
-4263 2034.8 4253.55 2026.88 4236.8 2026.88 c
-h
-4301.06 1961 m
-f*
-2645.6 2822 m
-2643.98 2862.52 l
-2640.2 2862.52 l
-2639.12 2858.84 2636.24 2856.58 2632.82 2856.58 c
-2631.02 2856.58 2628.5 2857.17 2625.62 2858.36 c
-2616.8 2861.24 2607.98 2862.52 2599.16 2862.52 c
-2585.3 2862.52 2571.08 2857.36 2560.1 2848.46 c
-2546.42 2837.12 2539 2820.02 2539 2799.5 c
-2539 2762.96 2562.96 2738.48 2598.8 2738.48 c
-2619.14 2738.48 2636.96 2746.76 2647.94 2761.34 c
-2644.7 2764.58 l
-2631.38 2751.8 2619.5 2746.48 2604.56 2746.48 c
-2593.76 2746.48 2584.04 2749.69 2576.48 2755.94 c
-2565.86 2764.76 2560 2780.96 2560 2801.84 c
-2560 2834.42 2576.71 2855.52 2602.76 2855.52 c
-2613.2 2855.52 2622.38 2851.73 2629.58 2844.5 c
-2635.34 2838.74 2638.04 2833.7 2641.46 2822 c
-h
-2654.06 2741 m
-f*
-2657.14 2812.64 m
-2659.48 2813.18 2660.92 2813.36 2662.9 2813.36 c
-2667.58 2813.36 2669 2810.48 2669 2801.84 c
-2669 2756.3 l
-2669 2746.58 2666.52 2743.88 2656.6 2743.7 c
-2656.6 2741 l
-2696.56 2741 l
-2696.56 2744 l
-2687.02 2744.35 2684 2746.27 2684 2753.06 c
-2684 2803.82 l
-2684 2804.18 2685.23 2805.44 2686.66 2806.88 c
-2690.98 2811.2 2699.08 2814.8 2705.74 2814.8 c
-2713.48 2814.8 2718 2808.2 2718 2795.54 c
-2718 2756.48 l
-2718 2746.4 2715.93 2744.42 2705.2 2743.7 c
-2705.2 2741 l
-2745.52 2741 l
-2745.52 2744 l
-2735.26 2744.18 2733 2747.17 2733 2758.1 c
-2733 2803.46 l
-2738.28 2811.2 2743.91 2814.8 2752.18 2814.8 c
-2762.44 2814.8 2766 2809.85 2766 2794.64 c
-2766 2756.66 l
-2766 2746.4 2764.52 2744.96 2753.8 2743.7 c
-2753.8 2741 l
-2793.22 2741 l
-2793.22 2743.7 l
-2788.54 2744.06 l
-2783.14 2744.42 2781 2747.66 2781 2754.68 c
-2781 2791.76 l
-2781 2813 2773.91 2823.8 2759.92 2823.8 c
-2749.48 2823.8 2740.3 2819.12 2730.58 2808.68 c
-2727.34 2818.94 2721.22 2823.8 2711.5 2823.8 c
-2703.31 2823.8 2698.57 2821.46 2683.28 2809.94 c
-2683.28 2823.44 l
-2682.34 2823.8 l
-2673.16 2820.38 2667.04 2818.4 2657.14 2815.7 c
-h
-2794.04 2741 m
-f*
-2794.62 2811.74 m
-2796.24 2811.92 2797.5 2811.92 2799.12 2811.92 c
-2805.24 2811.92 2807 2810.12 2807 2801.66 c
-2807 2717.42 l
-2807 2708.06 2804.94 2706.08 2793.9 2705 c
-2793.9 2702 l
-2837.46 2702 l
-2837.46 2705 l
-2823.96 2705.18 2822 2707.19 2822 2718.68 c
-2822 2746.94 l
-2828.34 2741 2832.4 2739.2 2839.8 2739.2 c
-2861.22 2739.2 2877 2759.36 2877 2785.46 c
-2877 2807.78 2864.65 2823.8 2847.54 2823.8 c
-2837.61 2823.8 2829.8 2819.48 2822 2809.58 c
-2822 2823.44 l
-2820.54 2823.8 l
-2811 2820.02 2804.52 2817.68 2794.62 2814.62 c
-h
-2822 2801.12 m
-2822 2806.52 2831.87 2812.8 2839.98 2812.8 c
-2853.3 2812.8 2862 2799.2 2862 2778.26 c
-2862 2758.46 2853.23 2744.2 2840.34 2744.2 c
-2831.88 2744.2 2822 2751.09 2822 2756.84 c
-h
-2883 2741 m
-f*
-3004 2844.14 m
-3004 2762.6 l
-3004 2747.66 3001.88 2745.32 2987.94 2744.42 c
-2987.94 2741 l
-3038.34 2741 l
-3038.34 2744.42 l
-3025.2 2745.32 3023 2747.84 3023 2760.62 c
-3023 2840.54 l
-3023 2853.32 3025.29 2855.66 3038.34 2856.74 c
-3038.34 2860 l
-3002.52 2860 l
-2962.74 2769.26 l
-2921.16 2860 l
-2885.52 2860 l
-2885.52 2857 l
-2900.28 2856.09 2903 2853.89 2903 2840.54 c
-2903 2767.46 l
-2903 2748.92 2900.43 2745.5 2885.16 2744.42 c
-2885.16 2741 l
-2927.46 2741 l
-2927.46 2744 l
-2913.6 2744.73 2911 2748.95 2911 2767.46 c
-2911 2840 l
-2955.72 2741 l
-2958.24 2741 l
-h
-3043.02 2741 m
-f*
-3123.56 2752.88 m
-3120.5 2750.36 3118.34 2749.2 3115.64 2749.2 c
-3111.5 2749.2 3110 2751.78 3110 2759.9 c
-3110 2795 l
-3110 2804.18 3109.16 2809.22 3106.82 2813.36 c
-3103.04 2820.2 3095.3 2823.8 3084.32 2823.8 c
-3075.14 2823.8 3066.5 2821.28 3061.46 2817.14 c
-3056.96 2813.36 3054 2808.14 3054 2803.64 c
-3054 2799.5 3057.46 2795.9 3061.82 2795.9 c
-3066.14 2795.9 3069.92 2799.5 3069.92 2803.46 c
-3069.92 2804.18 3069.74 2805.08 3069.56 2806.34 c
-3069.2 2807.96 3069 2809.4 3069 2810.66 c
-3069 2815.52 3074.77 2819.8 3081.98 2819.8 c
-3090.8 2819.8 3095 2814.47 3095 2804.54 c
-3095 2793.56 l
-3067.76 2782.4 3064.75 2780.96 3057.14 2774.12 c
-3053.18 2770.52 3050.66 2764.4 3050.66 2758.46 c
-3050.66 2747.12 3058.4 2739.2 3069.56 2739.2 c
-3077.48 2739.2 3084.86 2742.98 3095.84 2752.34 c
-3096.74 2742.8 3099.98 2739.2 3107.36 2739.2 c
-3113.48 2739.2 3117.26 2741.36 3123.56 2748.2 c
-h
-3095 2763.14 m
-3095 2757.56 3094.23 2755.94 3090.98 2753.6 c
-3086.66 2751.08 3081.62 2749.2 3077.84 2749.2 c
-3071.54 2749.2 3066.48 2755.51 3066.48 2763.5 c
-3066.48 2764.22 l
-3066.48 2774.84 3073.7 2781.32 3095 2789.24 c
-h
-3123.92 2741 m
-f*
-3124.62 2811.74 m
-3126.24 2811.92 3127.5 2811.92 3129.12 2811.92 c
-3135.24 2811.92 3137 2810.12 3137 2801.66 c
-3137 2717.42 l
-3137 2708.06 3134.94 2706.08 3123.9 2705 c
-3123.9 2702 l
-3167.46 2702 l
-3167.46 2705 l
-3153.96 2705.18 3152 2707.19 3152 2718.68 c
-3152 2746.94 l
-3158.34 2741 3162.4 2739.2 3169.8 2739.2 c
-3191.22 2739.2 3207 2759.36 3207 2785.46 c
-3207 2807.78 3194.65 2823.8 3177.54 2823.8 c
-3167.61 2823.8 3159.8 2819.48 3152 2809.58 c
-3152 2823.44 l
-3150.54 2823.8 l
-3141 2820.02 3134.52 2817.68 3124.62 2814.62 c
-h
-3152 2801.12 m
-3152 2806.52 3161.87 2812.8 3169.98 2812.8 c
-3183.3 2812.8 3192 2799.2 3192 2778.26 c
-3192 2758.46 3183.23 2744.2 3170.34 2744.2 c
-3161.88 2744.2 3152 2751.09 3152 2756.84 c
-h
-3213 2741 m
-f*
-1 i
-483.35 2212.55 319.2 15.5999 re
-Y
-480.95 2220.95 m
-795.35 2220.95 l
-S
-0 0 6120 7920 re
-Y
-522.95 2222.15 m
-522.95 2243.75 504.95 2261.75 483.35 2261.75 c
-460.55 2261.75 442.55 2243.75 442.55 2222.15 c
-442.55 2200.55 460.55 2182.55 483.35 2182.55 c
-504.95 2182.55 522.95 2200.55 522.95 2222.15 c
-f*
-753.35 2172.95 m
-772.55 2220.95 l
-753.35 2268.95 l
-905.75 2220.95 l
-f*
-483.35 1792.55 319.2 15.5999 re
-Y
-480.95 1800.95 m
-795.35 1800.95 l
-S
-0 0 6120 7920 re
-Y
-522.95 1802.15 m
-522.95 1823.75 504.95 1841.75 483.35 1841.75 c
-460.55 1841.75 442.55 1823.75 442.55 1802.15 c
-442.55 1780.55 460.55 1762.55 483.35 1762.55 c
-504.95 1762.55 522.95 1780.55 522.95 1802.15 c
-f*
-753.35 1752.95 m
-772.55 1800.95 l
-753.35 1848.95 l
-905.75 1800.95 l
-f*
-4966.55 2212.55 333.6 16.7996 re
-Y
-4966.55 2222.15 m
-5291.75 2220.95 l
-S
-0 0 6120 7920 re
-Y
-5004.95 2223.35 m
-5004.95 2244.95 4986.95 2262.95 4965.35 2262.95 c
-4942.55 2262.95 4924.55 2244.95 4924.55 2223.35 c
-4924.55 2201.75 4942.55 2183.75 4965.35 2183.75 c
-4986.95 2183.75 5004.95 2201.75 5004.95 2223.35 c
-f*
-5253.35 2172.95 m
-5272.55 2220.95 l
-5253.35 2268.95 l
-5405.75 2220.95 l
-f*
-4968.95 1791.35 330 16.7996 re
-Y
-4968.95 1799.75 m
-5290.55 1800.95 l
-S
-0 0 6120 7920 re
-Y
-5007.35 1800.95 m
-5007.35 1822.55 4989.35 1840.55 4967.75 1840.55 c
-4944.95 1840.55 4926.95 1822.55 4926.95 1800.95 c
-4926.95 1779.35 4944.95 1761.35 4967.75 1761.35 c
-4989.35 1761.35 5007.35 1779.35 5007.35 1800.95 c
-f*
-5253.35 1752.95 m
-5272.55 1800.95 l
-5253.35 1848.95 l
-5405.75 1800.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/simpexamp.eps b/ast-5.3-1/sun210_figures/simpexamp.eps
deleted file mode 100644
index 7f56ceb..0000000
--- a/ast-5.3-1/sun210_figures/simpexamp.eps
+++ /dev/null
@@ -1,1197 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 43 353 522 564
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/19 15:31:00
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-3233.75 5340.95 m
-3233.75 5373.35 3206.15 5400.95 3173.75 5400.95 c
-2452.55 5400.95 l
-2420.15 5400.95 2392.55 5373.35 2392.55 5340.95 c
-2392.55 4979.75 l
-2392.55 4947.35 2420.15 4919.75 2452.55 4919.75 c
-3173.75 4919.75 l
-3206.15 4919.75 3233.75 4947.35 3233.75 4979.75 c
-f*
-1 g
-3168.95 5396.15 m
-3168.95 5428.55 3142.55 5454.95 3110.15 5454.95 c
-2397.35 5454.95 l
-2364.95 5454.95 2338.55 5428.55 2338.55 5396.15 c
-2338.55 5043.35 l
-2338.55 5010.95 2364.95 4984.55 2397.35 4984.55 c
-3110.15 4984.55 l
-3142.55 4984.55 3168.95 5010.95 3168.95 5043.35 c
-f*
-8 w
-1 J
-1 j
-0 g
-3168.95 5396.15 m
-3168.95 5428.55 3142.55 5454.95 3110.15 5454.95 c
-2397.35 5454.95 l
-2364.95 5454.95 2338.55 5428.55 2338.55 5396.15 c
-2338.55 5043.35 l
-2338.55 5010.95 2364.95 4984.55 2397.35 4984.55 c
-3110.15 4984.55 l
-3142.55 4984.55 3168.95 5010.95 3168.95 5043.35 c
-h
-S
-0.564706 g
-2693.75 4320.95 m
-2693.75 4353.35 2667.35 4380.95 2633.75 4380.95 c
-2272.55 4380.95 l
-2240.15 4380.95 2212.55 4353.35 2212.55 4320.95 c
-2212.55 3719.75 l
-2212.55 3687.35 2240.15 3659.75 2272.55 3659.75 c
-2633.75 3659.75 l
-2667.35 3659.75 2693.75 3687.35 2693.75 3719.75 c
-f*
-1 g
-2628.95 4376.15 m
-2628.95 4408.55 2603.75 4434.95 2570.15 4434.95 c
-2217.35 4434.95 l
-2184.95 4434.95 2158.55 4408.55 2158.55 4376.15 c
-2158.55 3783.35 l
-2158.55 3750.95 2184.95 3724.55 2217.35 3724.55 c
-2570.15 3724.55 l
-2602.55 3724.55 2628.95 3750.95 2628.95 3783.35 c
-f*
-0 g
-2628.95 4376.15 m
-2628.95 4408.55 2603.75 4434.95 2570.15 4434.95 c
-2217.35 4434.95 l
-2184.95 4434.95 2158.55 4408.55 2158.55 4376.15 c
-2158.55 3783.35 l
-2158.55 3750.95 2184.95 3724.55 2217.35 3724.55 c
-2570.15 3724.55 l
-2602.55 3724.55 2628.95 3750.95 2628.95 3783.35 c
-h
-S
-0.564706 g
-3473.75 4320.95 m
-3473.75 4353.35 3447.35 4380.95 3413.75 4380.95 c
-3052.55 4380.95 l
-3020.15 4380.95 2992.55 4353.35 2992.55 4320.95 c
-2992.55 3719.75 l
-2992.55 3687.35 3020.15 3659.75 3052.55 3659.75 c
-3413.75 3659.75 l
-3447.35 3659.75 3473.75 3687.35 3473.75 3719.75 c
-f*
-1 g
-3408.95 4376.15 m
-3408.95 4408.55 3383.75 4434.95 3350.15 4434.95 c
-2997.35 4434.95 l
-2964.95 4434.95 2938.55 4408.55 2938.55 4376.15 c
-2938.55 3783.35 l
-2938.55 3750.95 2964.95 3724.55 2997.35 3724.55 c
-3350.15 3724.55 l
-3382.55 3724.55 3408.95 3750.95 3408.95 3783.35 c
-f*
-0 g
-3408.95 4376.15 m
-3408.95 4408.55 3383.75 4434.95 3350.15 4434.95 c
-2997.35 4434.95 l
-2964.95 4434.95 2938.55 4408.55 2938.55 4376.15 c
-2938.55 3783.35 l
-2938.55 3750.95 2964.95 3724.55 2997.35 3724.55 c
-3350.15 3724.55 l
-3382.55 3724.55 3408.95 3750.95 3408.95 3783.35 c
-h
-S
-0.564706 g
-1793.75 5468.15 m
-1793.75 5530.55 1743.35 5580.95 1680.95 5580.95 c
-1005.35 5580.95 l
-942.95 5580.95 892.55 5530.55 892.55 5468.15 c
-892.55 3652.55 l
-892.55 3590.15 942.95 3539.75 1005.35 3539.75 c
-1680.95 3539.75 l
-1743.35 3539.75 1793.75 3590.15 1793.75 3652.55 c
-f*
-1 g
-1728.95 5523.35 m
-1728.95 5584.55 1679.75 5634.95 1618.55 5634.95 c
-948.95 5634.95 l
-887.75 5634.95 838.55 5584.55 838.55 5523.35 c
-838.55 3716.15 l
-838.55 3653.75 887.75 3604.55 948.95 3604.55 c
-1618.55 3604.55 l
-1679.75 3604.55 1728.95 3653.75 1728.95 3716.15 c
-f*
-0 g
-1728.95 5523.35 m
-1728.95 5584.55 1679.75 5634.95 1618.55 5634.95 c
-948.95 5634.95 l
-887.75 5634.95 838.55 5584.55 838.55 5523.35 c
-838.55 3716.15 l
-838.55 3653.75 887.75 3604.55 948.95 3604.55 c
-1618.55 3604.55 l
-1679.75 3604.55 1728.95 3653.75 1728.95 3716.15 c
-h
-S
-473.75 5151.35 254.4 15.5999 re
-Y
-471.35 5159.75 m
-720.95 5159.75 l
-S
-0 0 6120 7920 re
-Y
-512.15 5160.95 m
-512.15 5182.55 494.15 5200.55 472.55 5200.55 c
-450.95 5200.55 432.95 5182.55 432.95 5160.95 c
-432.95 5139.35 450.95 5121.35 472.55 5121.35 c
-494.15 5121.35 512.15 5139.35 512.15 5160.95 c
-f*
-681.35 5111.75 m
-699.35 5159.75 l
-681.35 5207.75 l
-833.75 5159.75 l
-f*
-473.75 4611.35 254.4 15.5999 re
-Y
-471.35 4619.75 m
-720.95 4619.75 l
-S
-0 0 6120 7920 re
-Y
-512.15 4620.95 m
-512.15 4642.55 494.15 4660.55 472.55 4660.55 c
-450.95 4660.55 432.95 4642.55 432.95 4620.95 c
-432.95 4599.35 450.95 4581.35 472.55 4581.35 c
-494.15 4581.35 512.15 4599.35 512.15 4620.95 c
-f*
-681.35 4571.75 m
-699.35 4619.75 l
-681.35 4667.75 l
-833.75 4619.75 l
-f*
-473.75 4071.35 254.4 15.5999 re
-Y
-471.35 4079.75 m
-720.95 4079.75 l
-S
-0 0 6120 7920 re
-Y
-512.15 4080.95 m
-512.15 4102.55 494.15 4120.55 472.55 4120.55 c
-450.95 4120.55 432.95 4102.55 432.95 4080.95 c
-432.95 4059.35 450.95 4041.35 472.55 4041.35 c
-494.15 4041.35 512.15 4059.35 512.15 4080.95 c
-f*
-681.35 4031.75 m
-699.35 4079.75 l
-681.35 4127.75 l
-833.75 4079.75 l
-f*
-1733.75 5151.35 495.6 64.7996 re
-Y
-1733.75 5159.75 m
-2220.95 5208.95 l
-S
-0 0 6120 7920 re
-Y
-1772.15 5160.95 m
-1772.15 5182.55 1754.15 5200.55 1732.55 5200.55 c
-1710.95 5200.55 1692.95 5182.55 1692.95 5160.95 c
-1692.95 5139.35 1710.95 5121.35 1732.55 5121.35 c
-1754.15 5121.35 1772.15 5139.35 1772.15 5160.95 c
-f*
-2186.15 5157.35 m
-2200.55 5206.55 l
-2177.75 5252.15 l
-2333.75 5219.75 l
-f*
-1733.75 4325.75 342 294 re
-Y
-1733.75 4619.75 m
-2067.35 4334.15 l
-S
-0 0 6120 7920 re
-Y
-1772.15 4620.95 m
-1772.15 4642.55 1754.15 4660.55 1732.55 4660.55 c
-1710.95 4660.55 1692.95 4642.55 1692.95 4620.95 c
-1692.95 4599.35 1710.95 4581.35 1732.55 4581.35 c
-1754.15 4581.35 1772.15 4599.35 1772.15 4620.95 c
-f*
-2007.35 4323.35 m
-2051.75 4347.35 l
-2068.55 4394.15 l
-2153.75 4259.75 l
-f*
-1733.75 3935.75 322.8 151.2 re
-Y
-1733.75 4079.75 m
-2048.15 3944.15 l
-S
-0 0 6120 7920 re
-Y
-1772.15 4080.95 m
-1772.15 4102.55 1754.15 4120.55 1732.55 4120.55 c
-1710.95 4120.55 1692.95 4102.55 1692.95 4080.95 c
-1692.95 4059.35 1710.95 4041.35 1732.55 4041.35 c
-1754.15 4041.35 1772.15 4059.35 1772.15 4080.95 c
-f*
-1995.35 3916.55 m
-2031.35 3952.55 l
-2032.55 4002.95 l
-2153.75 3899.75 l
-f*
-833.75 4670.15 811.2 489.6 re
-Y
-833.75 5159.75 m
-1636.55 4678.55 l
-S
-0 0 6120 7920 re
-Y
-872.15 5160.95 m
-872.15 5182.55 854.15 5200.55 832.55 5200.55 c
-810.95 5200.55 792.95 5182.55 792.95 5160.95 c
-792.95 5139.35 810.95 5121.35 832.55 5121.35 c
-854.15 5121.35 872.15 5139.35 872.15 5160.95 c
-f*
-1578.95 4656.95 m
-1618.55 4688.15 l
-1626.95 4738.55 l
-1733.75 4619.75 l
-f*
-833.75 4611.35 811.2 490.8 re
-Y
-833.75 4619.75 m
-1636.55 5102.15 l
-S
-0 0 6120 7920 re
-Y
-872.15 4620.95 m
-872.15 4642.55 854.15 4660.55 832.55 4660.55 c
-810.95 4660.55 792.95 4642.55 792.95 4620.95 c
-792.95 4599.35 810.95 4581.35 832.55 4581.35 c
-854.15 4581.35 872.15 4599.35 872.15 4620.95 c
-f*
-1626.95 5040.95 m
-1618.55 5091.35 l
-1578.95 5122.55 l
-1733.75 5159.75 l
-f*
-833.75 4071.35 795.6 15.5999 re
-Y
-831.35 4079.75 m
-1622.15 4079.75 l
-S
-0 0 6120 7920 re
-Y
-1581.35 4031.75 m
-1599.35 4079.75 l
-1581.35 4127.75 l
-1733.75 4079.75 l
-f*
-0.564706 g
-4853.75 5468.15 m
-4853.75 5530.55 4803.35 5580.95 4740.95 5580.95 c
-4065.35 5580.95 l
-4002.95 5580.95 3952.55 5530.55 3952.55 5468.15 c
-3952.55 3652.55 l
-3952.55 3590.15 4002.95 3539.75 4065.35 3539.75 c
-4740.95 3539.75 l
-4803.35 3539.75 4853.75 3590.15 4853.75 3652.55 c
-f*
-1 g
-4788.95 5523.35 m
-4788.95 5584.55 4739.75 5634.95 4678.55 5634.95 c
-4008.95 5634.95 l
-3947.75 5634.95 3898.55 5584.55 3898.55 5523.35 c
-3898.55 3716.15 l
-3898.55 3653.75 3947.75 3604.55 4008.95 3604.55 c
-4678.55 3604.55 l
-4739.75 3604.55 4788.95 3653.75 4788.95 3716.15 c
-f*
-0 g
-4788.95 5523.35 m
-4788.95 5584.55 4739.75 5634.95 4678.55 5634.95 c
-4008.95 5634.95 l
-3947.75 5634.95 3898.55 5584.55 3898.55 5523.35 c
-3898.55 3716.15 l
-3898.55 3653.75 3947.75 3604.55 4008.95 3604.55 c
-4678.55 3604.55 l
-4739.75 3604.55 4788.95 3653.75 4788.95 3716.15 c
-h
-S
-3173.75 5160.95 613.2 65.9998 re
-Y
-3173.75 5219.75 m
-3778.55 5169.35 l
-S
-0 0 6120 7920 re
-Y
-3212.15 5220.95 m
-3212.15 5242.55 3194.15 5260.55 3172.55 5260.55 c
-3150.95 5260.55 3132.95 5242.55 3132.95 5220.95 c
-3132.95 5199.35 3150.95 5181.35 3172.55 5181.35 c
-3194.15 5181.35 3212.15 5199.35 3212.15 5220.95 c
-f*
-3737.75 5124.95 m
-3759.35 5170.55 l
-3746.15 5219.75 l
-3893.75 5159.75 l
-f*
-3413.75 4251.35 396 301.2 re
-Y
-3413.75 4259.75 m
-3801.35 4552.55 l
-S
-0 0 6120 7920 re
-Y
-3452.15 4260.95 m
-3452.15 4282.55 3434.15 4300.55 3412.55 4300.55 c
-3390.95 4300.55 3372.95 4282.55 3372.95 4260.95 c
-3372.95 4239.35 3390.95 4221.35 3412.55 4221.35 c
-3434.15 4221.35 3452.15 4239.35 3452.15 4260.95 c
-f*
-3800.15 4491.35 m
-3785.75 4539.35 l
-3742.55 4566.95 l
-3893.75 4619.75 l
-f*
-3413.75 3891.35 380.4 156 re
-Y
-3413.75 3899.75 m
-3785.75 4040.15 l
-S
-0 0 6120 7920 re
-Y
-3452.15 3900.95 m
-3452.15 3922.55 3434.15 3940.55 3412.55 3940.55 c
-3390.95 3940.55 3372.95 3922.55 3372.95 3900.95 c
-3372.95 3879.35 3390.95 3861.35 3412.55 3861.35 c
-3434.15 3861.35 3452.15 3879.35 3452.15 3900.95 c
-f*
-3767.75 3981.35 m
-3768.95 4031.75 l
-3734.15 4070.15 l
-3893.75 4079.75 l
-f*
-4793.75 5151.35 315.6 15.5999 re
-Y
-4791.35 5159.75 m
-5102.15 5159.75 l
-S
-0 0 6120 7920 re
-Y
-4832.15 5160.95 m
-4832.15 5182.55 4814.15 5200.55 4792.55 5200.55 c
-4770.95 5200.55 4752.95 5182.55 4752.95 5160.95 c
-4752.95 5139.35 4770.95 5121.35 4792.55 5121.35 c
-4814.15 5121.35 4832.15 5139.35 4832.15 5160.95 c
-f*
-5061.35 5111.75 m
-5079.35 5159.75 l
-5061.35 5207.75 l
-5213.75 5159.75 l
-f*
-4793.75 4611.35 315.6 15.5999 re
-Y
-4791.35 4619.75 m
-5102.15 4619.75 l
-S
-0 0 6120 7920 re
-Y
-4832.15 4620.95 m
-4832.15 4642.55 4814.15 4660.55 4792.55 4660.55 c
-4770.95 4660.55 4752.95 4642.55 4752.95 4620.95 c
-4752.95 4599.35 4770.95 4581.35 4792.55 4581.35 c
-4814.15 4581.35 4832.15 4599.35 4832.15 4620.95 c
-f*
-5061.35 4571.75 m
-5079.35 4619.75 l
-5061.35 4667.75 l
-5213.75 4619.75 l
-f*
-4793.75 4071.35 315.6 15.5999 re
-Y
-4791.35 4079.75 m
-5102.15 4079.75 l
-S
-0 0 6120 7920 re
-Y
-4832.15 4080.95 m
-4832.15 4102.55 4814.15 4120.55 4792.55 4120.55 c
-4770.95 4120.55 4752.95 4102.55 4752.95 4080.95 c
-4752.95 4059.35 4770.95 4041.35 4792.55 4041.35 c
-4814.15 4041.35 4832.15 4059.35 4832.15 4080.95 c
-f*
-5061.35 4031.75 m
-5079.35 4079.75 l
-5061.35 4127.75 l
-5213.75 4079.75 l
-f*
-3893.75 4670.15 811.2 489.6 re
-Y
-3893.75 5159.75 m
-4696.55 4678.55 l
-S
-0 0 6120 7920 re
-Y
-3932.15 5160.95 m
-3932.15 5182.55 3914.15 5200.55 3892.55 5200.55 c
-3870.95 5200.55 3852.95 5182.55 3852.95 5160.95 c
-3852.95 5139.35 3870.95 5121.35 3892.55 5121.35 c
-3914.15 5121.35 3932.15 5139.35 3932.15 5160.95 c
-f*
-4638.95 4656.95 m
-4678.55 4688.15 l
-4686.95 4738.55 l
-4793.75 4619.75 l
-f*
-3893.75 4611.35 811.2 490.8 re
-Y
-3893.75 4619.75 m
-4696.55 5102.15 l
-S
-0 0 6120 7920 re
-Y
-3932.15 4620.95 m
-3932.15 4642.55 3914.15 4660.55 3892.55 4660.55 c
-3870.95 4660.55 3852.95 4642.55 3852.95 4620.95 c
-3852.95 4599.35 3870.95 4581.35 3892.55 4581.35 c
-3914.15 4581.35 3932.15 4599.35 3932.15 4620.95 c
-f*
-4686.95 5040.95 m
-4678.55 5091.35 l
-4638.95 5122.55 l
-4793.75 5159.75 l
-f*
-3893.75 4071.35 795.6 15.5999 re
-Y
-3891.35 4079.75 m
-4682.15 4079.75 l
-S
-0 0 6120 7920 re
-Y
-4641.35 4031.75 m
-4659.35 4079.75 l
-4641.35 4127.75 l
-4793.75 4079.75 l
-f*
-2633.75 4251.35 194.4 15.5999 re
-Y
-2631.35 4259.75 m
-2820.95 4259.75 l
-S
-0 0 6120 7920 re
-Y
-2672.15 4260.95 m
-2672.15 4282.55 2654.15 4300.55 2632.55 4300.55 c
-2610.95 4300.55 2592.95 4282.55 2592.95 4260.95 c
-2592.95 4239.35 2610.95 4221.35 2632.55 4221.35 c
-2654.15 4221.35 2672.15 4239.35 2672.15 4260.95 c
-f*
-2781.35 4211.75 m
-2799.35 4259.75 l
-2781.35 4307.75 l
-2933.75 4259.75 l
-f*
-2633.75 3891.35 194.4 15.5999 re
-Y
-2631.35 3899.75 m
-2820.95 3899.75 l
-S
-0 0 6120 7920 re
-Y
-2672.15 3900.95 m
-2672.15 3922.55 2654.15 3940.55 2632.55 3940.55 c
-2610.95 3940.55 2592.95 3922.55 2592.95 3900.95 c
-2592.95 3879.35 2610.95 3861.35 2632.55 3861.35 c
-2654.15 3861.35 2672.15 3879.35 2672.15 3900.95 c
-f*
-2781.35 3851.75 m
-2799.35 3899.75 l
-2781.35 3947.75 l
-2933.75 3899.75 l
-f*
-q[1 0 0 1 0 0]concat
-89 106 true[1 0 0 1 -939 -5340]@85 imagemask
-"98E$s8Tk7z
-"98E$s8Tk7z"98E$s8Tk7z!'gM`s6p!gz!!E9$rr<$!z!!*'!rVuouz!!%NK
-p](9oz!!#7`p](9oz!!#7`n,NFgz!!#7`n,NFgz!!#7`n,NFgz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at n,NE<z!!", at s8W,uz!!", at s8W-!huE`W!!", at s8W-!qu?]s!!", at s8W-!rr<$!
-!!", at s8W-!s1eU7!!", at qu@9-s6p!g!!", at huEcWs82is!!", at huEa!s8Duu!!", at huE`^s8N'!!!",@
-huE`Xs8RTL!!", at huE`Ws8Tk7!!", at huE`WJ,eF,!!", at huE`W5QC3Q!!", at huE`W+91g1!!", at huE`W
-&-)D)!!", at huE`W#QOQ!!!", at huE`W#QO]%!!", at huE`W"989!!!", at huE`W"98?#!!", at huE`W!WW-!!!", at huE`W
-!WW0"!!", at huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W!<<'!!!", at huE`W!<<(L!!", at huE`W!<<(L
-!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!",@
-huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!WW1M!!", at huE`W!WW0"!!",@
-huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W"98B$!!", at huE`W"98?#!!", at huE`W#QOc'!!", at huE`W
-#QO]%!!", at huE`W&-)P-!!", at huE`W+92*9!!", at huE`W5QCKY!!", at huE`WJ,f!<!!", at huE`Ws8V!W
-!!", at huE`Xs8Tk7!!#7`huE`^s8RTL!!#7`huEaAs8N'!!!%NKn,NLhs82is!!%NKp],gDs6p!g!!*'!s8W-!s53kW
-!!iQ(s8W-!rr<$!!.Y%Ks8W-!qu?]s"98E$s8W-!huE`W"98E$s8W,uz"98E$s8W*!z~>
-Q
-q[1 0 0 1 0 0]concat
-71 76 true[1 0 0 1 -1028 -5338]@85 imagemask
-z56(Z`z
-&-)P-z!.Y%KJ,fQL!!3-"s53kW!!!9(s8Vio!!!!0s8W,uz+92B at rr<$!!.Y%Ks8RTL!!*'!
-s8W,W!!!$!s8W-!n,NFhs8W-!s7cQo"98E$KE(iL!!iQ(n,OR.!!!9(s1eU:rVup/s8N'!!<3$!+926=
-!!%M!!$D79!!!!@J,g\kn,NFg&&800s53kW!!hE^5QAM!!!!,Z!.Y$a!!!!"n,Rt<J,fQL!Up)=rr<$!!!)cos8N'!
-!!!"D!<<#uz495E\z!'C8]qu?]s!!"&?s82is!!!!-!<;foz!!3,pz!!!'"p](9o
-!!!!"s6p!gz!WVWhz!!3,hz!!!'"n,NFg!!!!"s53kWz!WV'Xz!!3,Xz
-!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!<:sWz!!*&Wz
-!!!$!s8W-!s8VQgs8W-!s8W,g!<<*!s8W-!huJ9,s8W-!s53m,s8W-!s8V!WJ)C;,!$D7!!'fBA!!",@
-huH""!!!!@s53lAhuE`W+90+V+7K71!$D6V!$C\1!!#7`^]4o7!!!!`s1eUFp](9o5Q?66#P\9!!'gL6
-!!i9!!!%NKJ,f]L!!!"Krr<$"qu?]ss8N'!!WE'!!<<#u!!*$!!!3,t!!!"KJ,fWMqu?]s5JR7$s7cQo!$C,!&-),!!!!Q)!$D7!!!!!(
-s24m:^]4?7!WW3"s*t(L!!*'!s8Duu!!!!`s8Vioz#QOh^z!!*'!z!!!!$huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-57 74 true[1 0 0 1 -1100 -5340]@85 imagemask
-&-)\0s1eU7&-)\0
-s1eU7&-)\0p](9o!.Y%K^]4?7!"],0z!!iQ'z!!E9!z!!E9!z!!3,tz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,tz!!3,tz!!3-!z!!3-!z!!3-"z!!3-"
-!!)co!!E8uJ-5cN!!E8u^^'i=!!iQ"i",hf#S6t1pcncY&-)\)IfKEJ&-)\)J,fP!"98Dr5QCb6!.Y%D
-+92 at k!"],)&-)Y0!!3,p#QOf(!!%ND"98B$!!!Q)!WW-!!!!,r!<;rs!!!"D!'g5Yz!!@`O~>
-Q
-q[1 0 0 1 0 0]concat
-127 74 true[1 0 0 1 -1154 -5340]@85 imagemask
-#QOi(s+(.Ls8VR!
-s8W,u#QOi(s+(.Ls8VR!s8W,u!WW3"n,P]Qs8E!/s8W,o!"],0J,fWMs7cQoJ,fKJ!!E9$!!!"Ks53kW
-+926=!!E9#!!!"Ks53kW#QOQ!!!3-!!!!!`s1eU7#QOQ!!!3,t!!!!`s1eU7#QO8n!!*&s!!!!@s1eU7
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"979Z!!*&s!!!!`s*t(L"979Z!!*&s!!!!`s1eU7#QN]^!!*&u!!!!`s1eU7#QN]^!!*'!!!!!`s53kW
-#QN]^!!*'!J,fS!s6p!g#QMR>!!3-"^]4 at as7cQo&-'EF!!3,sn,NIgrql`r&-'EF!!3,qp](<or-n\H+9-ik!!E8rrr<*"r',]35Q?66"98Dr5JRO(p`JDos8N'!"98Dr+9"M)p]pg0s8N'!"98Dr
-&-)\0n,r^js8Duu!'gMY"98E$huWlXs82is!!iQ!!WW3"huJ9,s82is!!*&o!.Y%K^]6V!s7cQo!!",9
-!$D7@!!!Q0s53kW!!!,r!"],/!!!-$s1eU7!!!"D!!3,p!!!"Krr<$!z!!!N0!!!!"huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -1277 -5340]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -1427 -5338]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -1491 -5305]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-89 106 true[1 0 0 1 -3999 -5340]@85 imagemask
-"98E$s8Tk7z
-"98E$s8Tk7z"98E$s8Tk7z!'gM`s6p!gz!!E9$rr<$!z!!*'!rVuouz!!%NK
-p](9oz!!#7`p](9oz!!#7`n,NFgz!!#7`n,NFgz!!#7`n,NFgz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at n,NE<z!!", at s8W,uz!!", at s8W-!huE`W!!", at s8W-!qu?]s!!", at s8W-!rr<$!
-!!", at s8W-!s1eU7!!", at qu@9-s6p!g!!", at huEcWs82is!!", at huEa!s8Duu!!", at huE`^s8N'!!!",@
-huE`Xs8RTL!!", at huE`Ws8Tk7!!", at huE`WJ,eF,!!", at huE`W5QC3Q!!", at huE`W+91g1!!", at huE`W
-&-)D)!!", at huE`W#QOQ!!!", at huE`W#QO]%!!", at huE`W"989!!!", at huE`W"98?#!!", at huE`W!WW-!!!", at huE`W
-!WW0"!!", at huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W!<<'!!!", at huE`W!<<(L!!", at huE`W!<<(L
-!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!",@
-huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!WW1M!!", at huE`W!WW0"!!",@
-huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W"98B$!!", at huE`W"98?#!!", at huE`W#QOc'!!", at huE`W
-#QO]%!!", at huE`W&-)P-!!", at huE`W+92*9!!", at huE`W5QCKY!!", at huE`WJ,f!<!!", at huE`Ws8V!W
-!!", at huE`Xs8Tk7!!#7`huE`^s8RTL!!#7`huEaAs8N'!!!%NKn,NLhs82is!!%NKp],gDs6p!g!!*'!s8W-!s53kW
-!!iQ(s8W-!rr<$!!.Y%Ks8W-!qu?]s"98E$s8W-!huE`W"98E$s8W,uz"98E$s8W*!z~>
-Q
-q[1 0 0 1 0 0]concat
-71 76 true[1 0 0 1 -4088 -5338]@85 imagemask
-z56(Z`z
-&-)P-z!.Y%KJ,fQL!!3-"s53kW!!!9(s8Vio!!!!0s8W,uz+92B at rr<$!!.Y%Ks8RTL!!*'!
-s8W,W!!!$!s8W-!n,NFhs8W-!s7cQo"98E$KE(iL!!iQ(n,OR.!!!9(s1eU:rVup/s8N'!!<3$!+926=
-!!%M!!$D79!!!!@J,g\kn,NFg&&800s53kW!!hE^5QAM!!!!,Z!.Y$a!!!!"n,Rt<J,fQL!Up)=rr<$!!!)cos8N'!
-!!!"D!<<#uz495E\z!'C8]qu?]s!!"&?s82is!!!!-!<;foz!!3,pz!!!'"p](9o
-!!!!"s6p!gz!WVWhz!!3,hz!!!'"n,NFg!!!!"s53kWz!WV'Xz!!3,Xz
-!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!<:sWz!!*&Wz
-!!!$!s8W-!s8VQgs8W-!s8W,g!<<*!s8W-!huJ9,s8W-!s53m,s8W-!s8V!WJ)C;,!$D7!!'fBA!!",@
-huH""!!!!@s53lAhuE`W+90+V+7K71!$D6V!$C\1!!#7`^]4o7!!!!`s1eUFp](9o5Q?66#P\9!!'gL6
-!!i9!!!%NKJ,f]L!!!"Krr<$"qu?]ss8N'!!WE'!!<<#u!!*$!!!3,t!!!"KJ,fWMqu?]s5JR7$s7cQo!$C,!&-),!!!!Q)!$D7!!!!!(
-s24m:^]4?7!WW3"s*t(L!!*'!s8Duu!!!!`s8Vioz#QOh^z!!*'!z!!!!$huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-57 74 true[1 0 0 1 -4160 -5340]@85 imagemask
-&-)\0s1eU7&-)\0
-s1eU7&-)\0p](9o!.Y%K^]4?7!"],0z!!iQ'z!!E9!z!!E9!z!!3,tz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,tz!!3,tz!!3-!z!!3-!z!!3-"z!!3-"
-!!)co!!E8uJ-5cN!!E8u^^'i=!!iQ"i",hf#S6t1pcncY&-)\)IfKEJ&-)\)J,fP!"98Dr5QCb6!.Y%D
-+92 at k!"],)&-)Y0!!3,p#QOf(!!%ND"98B$!!!Q)!WW-!!!!,r!<;rs!!!"D!'g5Yz!!@`O~>
-Q
-q[1 0 0 1 0 0]concat
-127 74 true[1 0 0 1 -4214 -5340]@85 imagemask
-#QOi(s+(.Ls8VR!
-s8W,u#QOi(s+(.Ls8VR!s8W,u!WW3"n,P]Qs8E!/s8W,o!"],0J,fWMs7cQoJ,fKJ!!E9$!!!"Ks53kW
-+926=!!E9#!!!"Ks53kW#QOQ!!!3-!!!!!`s1eU7#QOQ!!!3,t!!!!`s1eU7#QO8n!!*&s!!!!@s1eU7
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"979Z!!*&s!!!!`s*t(L"979Z!!*&s!!!!`s1eU7#QN]^!!*&u!!!!`s1eU7#QN]^!!*'!!!!!`s53kW
-#QN]^!!*'!J,fS!s6p!g#QMR>!!3-"^]4 at as7cQo&-'EF!!3,sn,NIgrql`r&-'EF!!3,qp](<or-n\H+9-ik!!E8rrr<*"r',]35Q?66"98Dr5JRO(p`JDos8N'!"98Dr+9"M)p]pg0s8N'!"98Dr
-&-)\0n,r^js8Duu!'gMY"98E$huWlXs82is!!iQ!!WW3"huJ9,s82is!!*&o!.Y%K^]6V!s7cQo!!",9
-!$D7@!!!Q0s53kW!!!,r!"],/!!!-$s1eU7!!!"D!!3,p!!!"Krr<$!z!!!N0!!!!"huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -4337 -5340]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -4487 -5338]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -4551 -5305]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-116 108 true[1 0 0 1 -2464 -5158]@85 imagemask
-z!!#7`qu?]s
-zz#QOi(huE`Wz!!!"Ks8W,szz!!3-"s8W+Lzz#QOi(s8V!Wz
-!!!!@s8W-!s7cQoz!!#7`s8W-!qu?]sz!<<*!!!3-"z!!!!"s8VQg!$D5kz!!!-$
-s*t(L"96.:z!!iQ'zs53kWz&-)P-!!!!`n,NFg!!!!@s7cQo!!!Q)z!!", at n,NFg!!iE%z
-!'gMAz"8i-!zJ,d:a!!!!"rVuou!!!"Ks*t(L!!!$!z!!*'!z!!%KKz!<<'!
-z!.TM!zs8Duuz5C`_6!!!'"rVuou!!!!@^]4?7!!3,tz!!"+Vz"989!z
-!"ZjF!!!!$s82isz&)[Ef!!!-$p](9o!!!!0huE`W!!E8rz!!!Pfz#QOQ!z!!hE^!!!!(s7cQo
-z#Oh]n!!!9(p](9o!!!!(n,NFg!!iPnz!!!8nz#QO8nz!!hun!!!!(s6p!gz
-"7Q9j!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir
-!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$
-p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o
-!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!
-z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz
-&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!
-z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z
-!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!g
-z"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz
-"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir
-!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$
-p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o
-!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!
-z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!9!z
-&-),!z!!iE%!!!!0s6p!gz#Q+Q%!!!Q0n,NFg!!!!(qu?]s!$D71z!!!9%z+92*9
-z!"]&/!!!!@s7cQoz&,lP/!!#7`qu?]s!!!!@rr<$!!'gM]z!!#7`J,fQLs8W*!z
-!.Y$a!!!-$s8Tk7!!!!$s8Vio!.Y%Ks8Duu!!#7`s8RTSs8W-!s53kW!WW3"s6p9ns8W-!huE`Xs8W-!n-B!ns8W,W!!!'"s8W,g~>
-Q
-q[1 0 0 1 0 0]concat
-81 74 true[1 0 0 1 -2579 -5160]@85 imagemask
-"98E$rrN0"s8RTO
-s8W-!!WW3"s*t.Ms8W&us8W-!!!!Q0s1eUFs8V!W!!iQ(!!!-$s*t(L"98?#!!3-"!!!!"s8Duu!<<'!
-!!!'"qu?]ss8N'!!!*&s!!!$!rVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"K
-rVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!
-qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou
-!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ
-!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs
-!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!
-qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou
-!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]s
-s8Duu!!*&u!!!$!qu?]s!<<'!!!*&szs8RTL!<;rs!!!$!s1eU8s82is!!3-"huEfXp](9o!WW2p
-!!E8r!!!!$s8Diq#QOQ!!!!9(r-n\gs6p!g"98E!5Oe^Qn,NFjs8W!=s8W,W!!!-$s83E-s8V!W!!%NK
-r!39%s1eU7!!iQ%"98E$J,fQL!<;rss8W*!z+8c+gs8Duu!!!!$qu at i=p](9o!!!"H!!iP^z!!!Q1!'C5]!!!~>
-Q
-q[1 0 0 1 0 0]concat
-43 109 true[1 0 0 1 -2660 -5160]@85 imagemask
-"98E$s54"Zs8W,W
-!WW3"s1eU>s8Vio!!3-"huE`Ws8Tk7!!%NKJ,fQLJ,b$!!!%NKz5Q:]`!!#7`z5Q:]`!!#7`
-z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z
-5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z
-5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`
-!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`
-z5Q:]`!!#7`z5Q:]`!!%NKzJ,]KK!W`9#!!!,ms8N'!"98E$!!!$!s8N'!!$D7@!!!!$s8N'!!!%NK
-z+9)<@!!!-$z!.OtK!!!!0zzzzzzzzzz
-zzzzzzzzzzzzzzzz
-zzzzz"+U at O!!",1z5PP3Y!!%NHzJ,TEJ!!*'!zs8N'!!!*'!zs8N'!!!*'!zs8N'!!!%NJzJ,TEJ!!#7]z+8>g9!!!Pf!!!~>
-Q
-q[1 0 0 1 0 0]concat
-48 95 true[1 0 0 1 -2704 -5158]@85 imagemask
-!!!!]z"979Z
-!!!9(p](9o+92<?!!#7`s*t(L5QCc!!!%NKs53kWs8W,g!!*'!kP,#Ws8N)s!!3-!!'C5^s82j<!!3,p
-!"T&1s7cQu!!E8r!!!!$s7cQo!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$
-s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$
-s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g
-!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j
-!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!9(s8W,g#QOi(s6p-js8W,g!WW3"s6p#<s8W,g
-!'gMQ!!!!@s6p!g!"],!!!!!(s6p!g!!E8j!!!!"s6p!g!!*&gzJ+*F<!!#7Qz+7K71!!",1
-z&+BQ!!!!8nz#Oh]n!!!,jz!Up'h!!!#gz!:Tsg!!!"<z!&+BQ!!!!A!!!~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -2750 -5160]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -2898 -5158]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -2962 -5125]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-98 106 true[1 0 0 1 -2385 -4560]@85 imagemask
-&-)\0s8W-!s8W,u
-!"],0s8W-!s8W-!rW!3's8W-!s8W-!s8E!'s8W-!s8W-!s8W&u"98E$s8W-!s8W,u!!3-"s8W-!s8W-!
-rW!!!s53kW!!!!`s8N'!s8V!Wz!WW0"!.Y%<z!!#7`!!#7`p](9o!!!!0rr<$`s7cQoz
-#QFc(+926=z!!E6$!"],/z!!!'"!!!Q0rr<$!zs*t(Ss8N'!z!.TM!"98COz!!#66!!3-"
-^]4?7!!!!`J,fWMs1eU7z++O=ks8V!Wz!$?^k!.Y%<z!!!O[!!%NKn,NFg!!!!0J,fR6
-s7cQoz#J^<>+926=z!!g:>!"],/z!!!8>!!!Q0rVuou!!!!$^]4?>s8N'!z"2Fm:
-"98COz!!C":!!E9$J,fQL!!!&8!!!'"s1eU7zzs8V!Wzz!.Y%<zz!!%NKn,NFg
-z!!!!`s7cQozz+926=zz!$D7=zz!!!Q0rVuouz!!!!(s8N'!
-zz"98COzz!!E9$J,fQLz!!!'"s1eU7zzs8V!Wzz!<<)W
-zz!!%NKn,NFgz!!!!`s7cQozz+92*9zz!$D7=zz!!!Q0rVuouz
-!!!!(s8N'!zz#QOf(zz!!E9$J,fQLz!!!'"s1eU7zzs8Tk7z
-z!<<)Wzz!!%NKn,NFgz!!!!`s7cQozz5QCKYzz!$D7=z
-z!!!Q0rVuouz!!!!(s8Duuzz#QOf(zz!!E9$J,fQLz!!!'"s1eU7z!!!!"
-s8Tk7zz!<<)Wzz!!%NKn,NFgz!!!!`s6p!gzz5QCKYzz
-!$D7=zz!!!Q0qu?]sz!!!!(s8Duuzz#QOf(zz!!E9$J,fQLz
-!!!'"s*t(Lz!!!!"s8Tk7zz!<<)Wzz!!%NKhuE`Wz!!!!`s6p!gzz5QCKY
-zz!$D7=zn,NFg!!!Q0qu?]s!:Tsg!!!!0s8Duu!!)coz#QOf(!!!#oz!!E9$
-zGQ7^D!!!'"s*t(L!-eJD!!!!"s8Tk7!!%BHz!<<)W!!!"Hz!!%NKhuE`WHiO-H!!!"K
-s6p!g!.FnJz5QCKY!!%HJz!$D79!!!"Kz!!!Q0qu?]sIfKHK!!!!0s8Duu!'bu6z#QOf(!!#7!z!!E9$!!!!`huE`W!!!-$s*t(L5O\XQ!!!!"s8Tk7!'gA]
-z!<<)7!!#7`z!!%NKhuEaAs53kW!!!"Ks6p!g5QC]_z5QC3Q!$D7 at s8W-!s8W,o!!",@
-s8W-!s8W-!qu?^=s8W-!s8W-!s8Duu+92B at s8W-!s8W&u!$D7 at s8W-!s8W,u!!", at s8W-!s8W-!rVu~>
-Q
-q[1 0 0 1 0 0]concat
-70 76 true[1 0 0 1 -2490 -4558]@85 imagemask
-zp](9oz
-5QBXAz!WW3!z!"],0s*t(L!!#7`s8V!W!!!"Ks5F"Q!!!!"s8E!?qu?]s"98,r#QFc(!!iP^
-!!3+M!!",@^]4B7^]4@!s*t(LJ)C;,J,]KK!'frQ!.XtJ!!",9!!*&s!!!!@qu?ctp](9o&,ZD0s7cQo
-!"]&/"97ij!!!9(!!iPn!!!!(rr<<(huE`W"93l^s53kW!!E7O&-(Pf!!!-$^`WTl!!!!"s1f`V^]4?7!WV(Bs1eU7
-!!3,X5Q?66!!!'"n3?r'!!!!"s6tO<J,fQL!<;P<rr<$!!!*&gJ,]KK!!!$!pj`;Dzs7h*Dz
-!<;iorVuou!!*&os8Duu!!!$!q#C<nzs8;orz!<;usrVuou!!*&ss8Duu!!!$!r;ZZpz
-s8;opz!<;usqu?]s!!*&ss82is!!!$!r;ZZpzs8;opz!WW)tqu?]s!!3,ts82is!!!'"r."VE!!!!"
-s87BEz!WVqEqu?]s!!E8rJ,B9H!!!-$pj`2A!!!!$s7ehVz"98-\qu?]s!!iPn5Q1W_!!!9(
-n/qW0!!!!(s6q-0z&-(Q0rVuou!"]+f&,lP/!!!Q0^^pGF!!!!@s1em>z+9-irs*t(L!'gL6
-"93lO!!#7`!!3,8!!!"KrW!!!^]4?7s8Duus53kW!<;rs!.XJ<!!3,p!!#7Q!!!-$n,NG1qu?^%s53kW&,lP/+90+V!!iN(!'gL6!!!'"
-^]FK7zs8F,?qu?]s!'gM`s6p!g!!!Q0s8Tk7!!!!$s8W*!z!'gMQz!!!#sz~>
-Q
-q[1 0 0 1 0 0]concat
-70 76 true[1 0 0 1 -2570 -4558]@85 imagemask
-zp](9oz
-5QBXAz!WW3!z!"],0s*t(L!!#7`s8V!W!!!"Ks5F"Q!!!!"s8E!?qu?]s"98,r#QFc(!!iP^
-!!3+M!!",@^]4B7^]4@!s*t(LJ)C;,J,]KK!'frQ!.XtJ!!",9!!*&s!!!!@qu?ctp](9o&,ZD0s7cQo
-!"]&/"97ij!!!9(!!iPn!!!!(rr<<(huE`W"93l^s53kW!!E7O&-(Pf!!!-$^`WTl!!!!"s1f`V^]4?7!WV(Bs1eU7
-!!3,X5Q?66!!!'"n3?r'!!!!"s6tO<J,fQL!<;P<rr<$!!!*&gJ,]KK!!!$!pj`;Dzs7h*Dz
-!<;iorVuou!!*&os8Duu!!!$!q#C<nzs8;orz!<;usrVuou!!*&ss8Duu!!!$!r;ZZpz
-s8;opz!<;usqu?]s!!*&ss82is!!!$!r;ZZpzs8;opz!WW)tqu?]s!!3,ts82is!!!'"r."VE!!!!"
-s87BEz!WVqEqu?]s!!E8rJ,B9H!!!-$pj`2A!!!!$s7ehVz"98-\qu?]s!!iPn5Q1W_!!!9(
-n/qW0!!!!(s6q-0z&-(Q0rVuou!"]+f&,lP/!!!Q0^^pGF!!!!@s1em>z+9-irs*t(L!'gL6
-"93lO!!#7`!!3,8!!!"KrW!!!^]4?7s8Duus53kW!<;rs!.XJ<!!3,p!!#7Q!!!-$n,NG1qu?^%s53kW&,lP/+90+V!!iN(!'gL6!!!'"
-^]FK7zs8F,?qu?]s!'gM`s6p!g!!!Q0s8Tk7!!!!$s8W*!z!'gMQz!!!#sz~>
-Q
-q[1 0 0 1 0 0]concat
-127 74 true[1 0 0 1 -2642 -4560]@85 imagemask
-#QOi(s+(.Ls8VR!
-s8W,u#QOi(s+(.Ls8VR!s8W,u!WW3"n,P]Qs8E!/s8W,o!"],0J,fWMs7cQoJ,fKJ!!E9$!!!"Ks53kW
-+926=!!E9#!!!"Ks53kW#QOQ!!!3-!!!!!`s1eU7#QOQ!!!3,t!!!!`s1eU7#QO8n!!*&s!!!!@s1eU7
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"979Z!!*&s!!!!`s*t(L"979Z!!*&s!!!!`s1eU7#QN]^!!*&u!!!!`s1eU7#QN]^!!*'!!!!!`s53kW
-#QN]^!!*'!J,fS!s6p!g#QMR>!!3-"^]4 at as7cQo&-'EF!!3,sn,NIgrql`r&-'EF!!3,qp](<or-n\H+9-ik!!E8rrr<*"r',]35Q?66"98Dr5JRO(p`JDos8N'!"98Dr+9"M)p]pg0s8N'!"98Dr
-&-)\0n,r^js8Duu!'gMY"98E$huWlXs82is!!iQ!!WW3"huJ9,s82is!!*&o!.Y%K^]6V!s7cQo!!",9
-!$D7@!!!Q0s53kW!!!,r!"],/!!!-$s1eU7!!!"D!!3,p!!!"Krr<$!z!!!N0!!!!"huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -2766 -4560]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -2917 -4558]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -2979 -4525]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-51 75 true[1 0 0 1 -3067 -4558]@85 imagemask
-!!!!]!!!!=!$D7!
-!!!u at s8Vus!$D7 at s8N'!+92?Os1eUVs53m,huFl!J,g\\!$D1?!!i9!+8c*="8i- at p](9rrW"&0!!!'"
-!$C\1!!3*"+5d,!!<7Qk^]4?7s*u3,!!!$!^`S(,!!*&7++O=k!<9hVJ,fQLs54t!!!!$!i#_q!!!3,X
-*WQ0?!WV(!!!!!$s54pu!!!9(i#Vju!"]+f)uos=+917=!!!!`s1eU7!!%NK^]4?7!WW28!!!!(s8RTL!!!Q0s*t(L
-!'gM`zs8W*!!!!-$s8Duu!!iQ(qu?]s+92B9!!!"Ks8VQg!!*'!s53kW"98E$J,fQSs8W*!!!!Q0
-s82is!$D7 at n,NFgJ,fQ,!!!$!s8RTL!!*'!rVuou!WW2t!!!!$s8VQg!!!9(s1eU7!!iQ(z&-)V/
-!!!!0s7cQo!!!Q0huE`W!$D6Vz+9-ik!#tt\rr<$!)uq)[!!!!]!$D+=!!#+]+8c*=!'C6'qu?]sHiP8`!!!"H!$Ct9!!%BH&,6,)!;HO)p](9op](j"!!!&p!!i9!!!2ip#Q+Q%"8Diuqu?^!p](Eo
-!!!9!!!3'!!"\i)!<3$!+8>g9J%u&6p](:Yn,`Ra!!", at s8Vio!!iQ(rceDC!WW2h2uipY5Q?66!!~>
-Q
-q[1 0 0 1 0 0]concat
-82 67 true[1 0 0 1 -2313 -4020]@85 imagemask
-&-)\-!!!-$s8N'@
-s8W*!!!iQ(s+!?6s8N'!&-)\0^d%l!rr<$0s8W,75QCc`!!!Q0s8TkVs8W&u!!iQ(s*tX[s82is"98E$
-!!*%Lz!'frQ!.VcazJ)C;,+7K71!!!$!J,fQ[p](9o!!3*"!!!9%z"9&9#!!E3#!!!!(
-qu?]s!WN-"!!!Q)zs*t(L!$C\1!!!"K^]4?75MuMA!!#7A!!!"K^]4?7!$C\1!!*%Lz&,6,)!WN-"!!!!(
-qu?^!rVuou!!!-#!!!Q-z!!3*"!$Ct9z!<9h75O\XQzJ)C<VhuE`W!!!!`n,WL(z
-!!",9!WRZMz!"\u0rr<$!z#Q=u-z!!!!$rt##-z!!!$!TC;g\z!!%NKhuE`W
-z!'gM!zz+9-ikz!!!!0rr<$!z!!!9'zz!!iK'zz&,uV0z!!!!@
-s*t(Lz!!#7`^]4?7z!.Y%,zzs.Ac\z!!!'"&,6,)z!!E3*qu?]sz
-#Q+]'z!!!!@p]:DFz!!#7Q!.Vcaz!.Wo,5MuMAzs1eUVn,NFg!!!'"J,g,Tz
-!!E3#!!iE%z#Q+Q%"9&9#!!!!0p](9prr<$!!!",1!!!$!J,fQL!'fBA!!%MazJ%u$a!'fBA!!!$!J,fQL
-+7K71!!3*"!!!!0p](9o"9&9#!!!9%!!!!(qu?]s!!E3#!!!Q)z!WN-"!<<)u!!!-$s6p!js8W*!
-!"],0qu?j!s8N'!&-)\-!!E9$rr<$0s8Vus"98E$!!!Q0s82j!s8W*!!"],0qu?cts8Duu"98Dj!!~>
-Q
-q[1 0 0 1 0 0]concat
-65 112 true[1 0 0 1 -2408 -4018]@85 imagemask
-!$D79z!!3-"
-s*t(L!!!9(s8Vio!!!!0s8W,uz5QCc`s1eU7!'gM`s8VQg!!%NKs1f`O!!!$!s8N'$rVuous8Vus
-!<3$!!<<)g!!%Ma!!*'!huEa!huEcWs*t(L&+BQ!J,]KK!!i9!!.XnH!!!9%!!#7Q!!!!$rVup'z
-!WE'!z!!*$!z!!!$!J,fQLzJ%u$az!.Vcaz!!#7Az!!!!`huE`Wz5O\XQz
-!$C\1z!!",1z!!!!@p](9oz+8>g9z!"\i)z!!!Q-z!!!!0qu?]sz
-&,ZD-z!"\u-z!!!Q-z!!!!0rVuouz&,lP/z!"]&/z!!!Q/z!!!!0
-rVuouz&,lP/z!$D1?z!!",?z!!!!@rVuouz+8u6?z!$D1?z!!#7_z!!!!`
-rVuouzJ,TEJz!.XtJz!!*&sz!!!$!qu?]s!!!!"s82isz"989!z!!E9!
-z!!!9(p](9o!!!!0s7cQoz+92*9z!.Y%<z!!*'!n,NFg!!!'"s53kW!!!!(s8V!W
-z+92AVz!.Y%KJ,fQL!!3-"s*t(L!!!9(s8N'!!!!!`s8W&u!!!!$s8W,sz5QCc`p](9o#QOi(s6p!g
-#QOi(s8V!W!!iQ(s8W,7!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s82is!!3-"s8Vio!!!'"s8W,Wz
-s8W-!J,fQL!<<*!qu?]s!!%NKs53kW!!!"Ks8N'!z5QC3Qz!'gG_z!!"+Vz!!!!@
-^]4?7z&&8/Fz!"[ufz!!!8^z!!!!(n,NFgz#Oh]nz!!Durz!!!,rz!!!!"
-qu?]sz!W2otz!!)uuz!!!#uzzIfKHKz!.Y%Ks8Tk7!!#7`s8W,W!!!!`
-s8W-!huE`W5QCc`s6p!g!$D7 at s8VQg!!", at s8W,o!!!!0s8W-!p](9o&-)\0s7cQo!!iQ(s8Vus!!!9(
-s8W,s!!!!$s8W-!rVuou"98E$s8Duu!!3-"s8W*!z!!!!0zz#64`(z!!@`Oz!!!$"~>
-Q
-q[1 0 0 1 0 0]concat
-82 67 true[1 0 0 1 -3033 -4020]@85 imagemask
-&-)\-!!!-$s8N'@
-s8W*!!!iQ(s+!?6s8N'!&-)\0^d%l!rr<$0s8W,75QCc`!!!Q0s8TkVs8W&u!!iQ(s*tX[s82is"98E$
-!!*%Lz!'frQ!.VcazJ)C;,+7K71!!!$!J,fQ[p](9o!!3*"!!!9%z"9&9#!!E3#!!!!(
-qu?]s!WN-"!!!Q)zs*t(L!$C\1!!!"K^]4?75MuMA!!#7A!!!"K^]4?7!$C\1!!*%Lz&,6,)!WN-"!!!!(
-qu?^!rVuou!!!-#!!!Q-z!!3*"!$Ct9z!<9h75O\XQzJ)C<VhuE`W!!!!`n,WL(z
-!!",9!WRZMz!"\u0rr<$!z#Q=u-z!!!!$rt##-z!!!$!TC;g\z!!%NKhuE`W
-z!'gM!zz+9-ikz!!!!0rr<$!z!!!9'zz!!iK'zz&,uV0z!!!!@
-s*t(Lz!!#7`^]4?7z!.Y%,zzs.Ac\z!!!'"&,6,)z!!E3*qu?]sz
-#Q+]'z!!!!@p]:DFz!!#7Q!.Vcaz!.Wo,5MuMAzs1eUVn,NFg!!!'"J,g,Tz
-!!E3#!!iE%z#Q+Q%"9&9#!!!!0p](9prr<$!!!",1!!!$!J,fQL!'fBA!!%MazJ%u$a!'fBA!!!$!J,fQL
-+7K71!!3*"!!!!0p](9o"9&9#!!!9%!!!!(qu?]s!!E3#!!!Q)z!WN-"!<<)u!!!-$s6p!js8W*!
-!"],0qu?j!s8N'!&-)\-!!E9$rr<$0s8Vus"98E$!!!Q0s82j!s8W*!!"],0qu?cts8Duu"98Dj!!~>
-Q
-q[1 0 0 1 0 0]concat
-79 110 true[1 0 0 1 -3120 -4018]@85 imagemask
-z&-'EFz
-!!%NKqu?]s!!!!$s8W*!z!"],0s1eU7!!!!`quHcTz!.XJ<5PP3Y!!!$!huFksz!WRZM
-#Q=]'!!!-$!!!-$z#Q=]'!WRZM!!!Q/!!!'"^]4?7+8c*=!<:sW!!#7Y!!!"Kn,NFg5PP3Y!.XJ<
-!!%N<!!!!`p](9os6p!g!'gA]!!*&W!!!!@qu?]ts53kW!$D1?!!3,X!!!!@rVup#s1eU7!"])0!!E8:!!!!0rr<$(
-s1eU7!"]*[!!iOS!!!!(s*t(Ss*t(L!!iOS!"]*[!!!!(s1eUFs*t(L!!iP>!"])0!!!!$s53l!rr<$!
-!!E8Z!$D4@!!!!$s53l!rr<$!!!E8j!'gJ`!!!!$s6p"QrVuou!!3,h!'gG_!!!!"s6p"QrVuou!!3,p
-!.XtJ!!!!"s7cSDrVuou!!3,p!.XtJ!!!!"s7cSDrVuou!!3,p!.XtJ!!!!"s82lsrVuou!!3,t!<;rszs82ls
-qu?]s!!*&s!<;rszs82lsqu?]s!!*&s!<;rszs82lsqu?]s!!*&u!WW&tzs8E'!qu?]s
-!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u
-!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!
-qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E#uqu?]s!!*&s!<;rszs82lsqu?]s
-!!*&s!<;rszs82lsrVuou!!3,t!<<#u!!!!"s82lsrVuou!!3,t!.XtJ!!!!"s7cSDrVuou!!3,p
-!.XtJ!!!!"s7cSDrVuou!!3,p!.XtJ!!!!"s7cRYrVuou!!3,h!'gJ`!!!!$s6p"Qrr<$!!!E8j!$D4@!!!!$s6p"1
-rr<$!!!E8Z!$D4@!!!!$s53l!s*t(L!!iP^!"]*[!!!!(s1eUFs*t(L!!iP>!!iOS!!!!(s*t(Ss1eU7
-!!iOS!!iP>!!!!0s*t(Os1eU7!"])0!!E8:!!!!0rr<$"s53kW!$D1?!!3,X!!!!@rVuous6p!g!'gA]
-!!%N<!!!!`p](9oJ+*F<!'g5Y!!#7Y!!!"Kn,NFg+8c*=!<:sW!!",=!!!$!huE`W&,lP/!WTq8!!!9(!!!-$J,fQL"9/?$#QFc(!!!'"J,g,Zz!<:sW+8c*=
-!!!"Kn,P]Bz!$D+>s53kW!!!!0s8W+Lz!!E9$rr<$!zJ,f9Dz!!!Q0^]4?7~>
-Q
-q[1 0 0 1 0 0]concat
-24 18 true[1 0 0 1 -3209 -4018]@85 imagemask
-!"ZjF5O\Z&p]1?l!WW-"s8E-#rr`<$"98B's8N3$rr`<$!WW-"s8E#uquD6A!'frQ&&8~>
-Q
-q[1 0 0 1 0 0]concat
-71 108 true[1 0 0 1 -3248 -4020]@85 imagemask
-s8W-!s8W,s!<<*!
-s8W-!rW)uus8W-!s8E"Js8W-!s8W*!5QCc`s8W-!!$D7 at s8W-!rr<T0s8W-!s8RTSs8W-!s8W+L"98E$
-s8W-!^]FK8s8W-!s1eX7s8W-!s8Tk7J,fQKs8W,W!'^G`!!!!@huFjLz#Oh^(^]4?7!!2Qh#N,R^
-!!!#g!!D]jzp](Ekz!-eJEqu?]s!!#+]!<)ru!!!!=!!%KKz)uot'z!"Ju/++O=kz!"ZjF
-z!!!8^z!!!!$n,NFgz!VcWpz!!)osz!!!"Jzz56(Z`z!$?^k
-z!!!PFz!!!!(huE`Wz"7Q9jz!!Durz!!!&tzzrVuouz!.OtK
-z!!#66z!!!!@^]4?7z+5d,!z!"[ufz!!!8nz!!!!$p](9oz"8i-!z!!3'!
-z!!!$!zzs*t(Lz!.Vcaz!!%Maz!!!!`huE`Wz+7K71z!$Ct9
-z!!!Q)z!!!!0qu?]sz#Q=]'z!!iK'z!!!9(z!!!!$s*t(Lz"93lO
-z!!3,8z!!!'"^]4?7!!!!"s53kWz!<:sWz!!*&gz!!!$!n,NFgzs6p!gz!<;fo
-z!!%NDz!!!"Kp](9ozJ,B9Hz!.XnHz!!%NHz!!!"Kqu?]szJ,TEJ
-z!.XtJn,NFg!!%NJ!:Tsg!!!"KrW)]nzJ,TFmz!<<#uGQ7^D!!*&u!.4bH!!!$!rW#%\
-zs8E!^z!WW-!56(Z`!!3-!!$;1@!!!-$qu at gh!!!!$s82j=J,fQL#QO]%&&8/F!"],-!"[uf!!", at p](Qg!!!!`s7cR!p](9oJ,f9D"8i-!!<<)g!!E3#!!E9$n,NLh
-J,g,[s53kWs6p#<s8Tk7!.Y%Ks8W,7!!#7`s8W-!J,fR6s8W-!rr<$!+92B at s8Duu!!iQ(s8Vus!!!-$
-s8W,o!!!!"s8W-!huE`W!.Y%Ks1eU7!!#7`s8N'!!!!!0s8Vusz!WW2hz!!#7`z~>
-Q
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211.htx_tar b/ast-5.3-1/sun211.htx_tar
deleted file mode 100644
index 3b18b86..0000000
Binary files a/ast-5.3-1/sun211.htx_tar and /dev/null differ
diff --git a/ast-5.3-1/sun211.ps b/ast-5.3-1/sun211.ps
deleted file mode 100644
index debe2b7..0000000
--- a/ast-5.3-1/sun211.ps
+++ /dev/null
@@ -1,140969 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.96.1 Copyright 2007 Radical Eye Software
-%%Title: sun211.dvi
-%%CreationDate: Fri Oct 30 12:47:04 2009
-%%Pages: 578
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 595 842
-%%DocumentFonts: CMR10 CMCSC10 CMBX10 CMR12 CMBX12 CMSL10 CMTI10 CMR8
-%%+ CMSY10 CMTT10 CMR6 CMR9 CMSY8 CMMI10 CMMI9 CMSY9 CMMI7 CMMI8 CMTI9
-%%+ CMTT9 CMMI12 CMTT12 CMBXTI10
-%%DocumentPaperSizes: a4
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips -f sun211
-%DVIPSParameters: dpi=600
-%DVIPSSource: TeX output 2009.10.30:1247
-%%BeginProcSet: tex.pro 0 0
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
-/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
-setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
-restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-%%BeginProcSet: texps.pro 0 0
-%!
-TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
-index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
-exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
-ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
-pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
-div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
-/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
-definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
-sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
-mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
-exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
-forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
-end
-
-%%EndProcSet
-%%BeginProcSet: special.pro 0 0
-%!
-TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
-/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
-/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
-/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
-/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
-X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
-/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
-/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
-{userdict/md get type/dicttype eq{userdict begin md length 10 add md
-maxlength ge{/md md dup length 20 add dict copy def}if end md begin
-/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
-atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
-itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
-transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
-curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
-pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
-if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
--1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
-get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
-yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
-neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
-noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
-90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
-neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
-1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
-2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
--1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
-TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
-Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
-}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
-save N userdict maxlength dict begin/magscale true def normalscale
-currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
-/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
-psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
-psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
-TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def
- at MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll
-newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto
-closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N
-/@beginspecial{SDict begin/SpecialSave save N gsave normalscale
-currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}
-N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs
-neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate
-rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse
-scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg
-lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx
-ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N
-/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{
-pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave
-restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B
-/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1
-setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY
-moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix
-matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc
-savematrix setmatrix}N end
-
-%%EndProcSet
-%%BeginFont: CMBXTI10
-%!PS-AdobeFont-1.1: CMBXTI10 1.0
-%%CreationDate: 1991 Aug 18 17:46:30
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBXTI10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBXTI10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 105 /i put
-readonly def
-/FontBBox{-29 -250 1274 754}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D004B836D34E88C20EEB527CE1124209388A2DF
-E27A8DF298A2693A9D529916AA0B2176E6ED237F69D84A8FEEB36861D1847207
-BE2BD61C6A412FFFEDFF13AFEC32AC7735BCCE5965F5966418A62ECB99112AB3
-3BC938EC590FF6922659125EB67E260BF02885E49BA6019E696D33F0B53606A2
-F515E0C45F323311613A94B838491BAB9FE230C5CC79D22925E3D882799F2707
-C32975A494F0F9513E4D8332E7E54470D9721FBD345CDBB48286F2F19CC6D66E
-BB631DD6476A509167A49CA525A72CA50E82C1D08C2B372DB54C5949C753B632
-2009B761EB90492ACD3CBE6A35CE1B66F3BC4D8DC36827CE4261A703328451D1
-879438479917C1647772999171DCCF1491A1C9086E0C6393506768F8757BD81D
-141C46EB9BF507EEC29962A0072B6C5D8C8588F3D68886CD2606DD3BD2FECCEF
-63245494E93EEA12AAFB06110E54ADC444C7E7619627A48A464394E5DE06EB46
-4C76A2FF010318BBE48B3776C826A265C66515717F7F2E943C60EBAB23D96B5B
-FD514A1C4E79BB3D3D2DEB936F90CD3FABF7B09FF7F564AB5CF4AF6A40E869FD
-395885A88F4A138B3CA6943A2D430BBE43D91F7F17621CAF52FB7161DA3B2003
-82244FB6EE792DCA1722C03392C296C029A2DCC5BAAB3EA03F8DEB039DC83AE1
-763AAB84776A2CCFFAE9EAF0BFDAE417E8BE682D237FFEDAF224AC09C9665019
-165CE32F5349E857177D94AD6396570932E1657ADE4D3FF57A3419946CCD210E
-57E5A1D91CF708395942527D127606350924D71BC21C6F969288B1C8CA3404ED
-E6219985F7301A20621368F74747EAD38990A4C9F2B62913B8FDB93657409FF5
-178DAA7C97C35EAFA47778CE03E863303582D8A99017F26A160DE09CAF559887
-BB7542DAE9D93635D7935E338FFFB7604DEF34DCD58044CED8179C3D5D153580
-B5DFF72BA41025750BC5AAABFCC548DBC3B40AA114A259480F7B979FC60C0A38
-A2A17337F124FC64D6D3B0AE140CD95202F8E25D2A5E87041F837647C29FD3F2
-81F74B7E43F45DA22971625A4876A4A0558D7D3CBDF61767A626695AD266B569
-0F406D8A4873FDB8B9ABE5EA5D5DEDC76A94A2204A79B3BA51C2725ADDDD581A
-103D8F830BB5AAD1B5FF4A270A2D96EFFC09E7DA49F15005486CA3455EAF0AF6
-CD8B3E7AFE65C2572276CB9A466F455B36EFC39717C2BF639972D09B4AD24800
-54315F0B9D482DF70DDDFAE6BA7232743157D0821906ABD931EFD1663FDE6221
-51E9F02CD62A034ED67DEA76CB859C879788F9A1831A1AC4D5D7EC5A09144481
-16CA2CAA7C229DE470982BFF4B7D3A
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTT12
-%!PS-AdobeFont-1.1: CMTT12 1.0
-%%CreationDate: 1991 Aug 20 16:45:46
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT12) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT12 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 95 /underscore put
-readonly def
-/FontBBox{-1 -234 524 695}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F0364CD5660FE13FF01BC20148F9C480BCD0E
-C81D5BFC66F04993DD73F0BE0AB13F53B1BA79FE5F618A4F672B16C06BE3251E
-3BCB599BFA0E6041FBD558475370D693A959259A2699BA6E97CF40435B8E8A4B
-426343E145DF14E59028D4E0941AB537E34024E6CDE0EA9AF8038A3260A0358D
-D5B1DB53582F0DAB7ADE29CF8DBA0992D5A94672DFF91573F38D9BFD1A57E161
-E52DA1B41433C82261E47F79997DF603935D2A187A95F7A25D148FB3C2B6AA32
-6B982C32C6B25867871ED7B38E150031A3DE568C8D3731A779EAAF09AC5CE6C5
-A129C4147E56882B8068DF37C97C761694F1316AF93E33FF7E0B2F1F252735CE
-0D9F7BCE136B06EE967ABE0C8DF24DCBBF99874702ED252B677F407CB39678CC
-85DDFC2F45C552BA967E4158165ED16FECC4E32AC4D3B3EB8046DCDD37C92FDF
-F1F3710BB8EF5CA358ABACA33C7E5ACAD6BF5DC58BDFC3CF09BA2A38291D45A4
-C15FF1916FE2EC47FDC80911EB9C61F5D355BEDFC9DB17588547763AC5F0B1CC
-12D2FFB32E0803D37E3281DA9CE36C5433655526ACFB3A301C56FAB09DF07B5D
-048B47687348DEB96F3F9C53CE56DDD312B93D3918CD92AF53FB9461864D11B8
-0138918D0B1270C54873C4012CDE6F886DB11BCEA04B023EBB43E0D0A06BE725
-741D08B9DB688731A6C9886C15A83C28DADCC81385EA239E045E8F3670CE03DB
-9EE77ED067036595C9F3B1854343BE3A12E486B6E5A2F8AC44FA5378D28DCCEE
-306B0E283AA444423F9A4FF38E2B56DCF67A39CEB2C643DAE86865517D5D0371
-CB8797208ADEC637330A3A57902C9A88EDB75A7C16FA9850075D9F19578EC666
-1353CC1FC512D59DFF847ACCD058E2058E262194FA3370E876BBB803BCC86609
-B8BBDE432EAC6C13261A28739A53C16EFA6271A92A2CD064F081395ED8E128E7
-9067F11414984D2F7BA9E153FAE76ECE849AE1D73D30499ED90D3735941DA9CA
-1AEEC1D3B8A1592D1D8EB167E150D8197C341105DFCF09414CD7F36EDC918BF8
-453512B168390413C5F9731885E06EE7B378C923AEEA80B5C62ECD7274F23284
-B290609EE41FF287DAF03E405DCF3D03FB75E5EC6F1982F71566F7A843C3AAEC
-153355FA4FEEF24E0E5E86E54491E4C5FE16869EC47F14147126748F9A1E6F4E
-E9313BB550258FA93E
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMMI12
-%!PS-AdobeFont-1.1: CMMI12 1.100
-%%CreationDate: 1996 Jul 27 08:57:55
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI12) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI12 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 60 /less put
-dup 62 /greater put
-readonly def
-/FontBBox{-30 -250 1026 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
-5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC
-4391C9DF440285B8FC159D0E98D4258FC57892DCC57F7903449E07914FBE9E67
-3C15C2153C061EB541F66C11E7EE77D5D77C0B11E1AC55101DA976CCACAB6993
-EED1406FBB7FF30EAC9E90B90B2AF4EC7C273CA32F11A5C1426FF641B4A2FB2F
-4E68635C93DB835737567FAF8471CBC05078DCD4E40E25A2F4E5AF46C234CF59
-2A1CE8F39E1BA1B2A594355637E474167EAD4D97D51AF0A899B44387E1FD933A
-323AFDA6BA740534A510B4705C0A15647AFBF3E53A82BF320DD96753639BE49C
-2F79A1988863EF977B800C9DB5B42039C23EB86953713F730E03EA22FF7BB2C1
-D97D33FD77B1BDCC2A60B12CF7805CFC90C5B914C0F30A673DF9587F93E47CEA
-5932DD1930560C4F0D97547BCD805D6D854455B13A4D7382A22F562D7C55041F
-0FD294BDAA1834820F894265A667E5C97D95FF152531EF97258F56374502865D
-A1E7C0C5FB7C6FB7D3C43FEB3431095A59FBF6F61CEC6D6DEE09F4EB0FD70D77
-2A8B0A4984C6120293F6B947944BE23259F6EB64303D627353163B6505FC8A60
-00681F7A3968B6CBB49E0420A691258F5E7B07B417157803FCBE9B9FB1F80FD8
-CA0DA1186446DD565542BCCC7D339A1EB34C7F49246E8D72E987EB477C6DB757
-99AF86CEBCD7605C487A00CD2CD093098182DC57B20D78ECE0BECF3A0BF88EBA
-C866DB19F34BBBED6634AFC0F08D2AFB2A92578A6F8B4ADCD6594737FF6EED7D
-5B536DA9E3E2CADB40DB7C600EA4D100D33C3B92B1CF857E012C4EB370BA8295
-55B50047CD58E912E67E22C1B92F41D0BEE742201DF198F3766AE35EA71D8195
-A8C94D661C40D718CB09497485FAA34204229AECFE644C93FFDA54C789E4F751
-3D2519F7CB9E79B2ABE3101DF2EBFAD375469CDC687FB3DC2833EDC0F946B41F
-F28D72FFF2A9B8B0D76DC542537612E2BE0F3FB9601C897386359C55E867A547
-F872005F5C56C6EC5E9685E03D7A82653BE8B69741C4DF332AEEB2AA450B23F3
-EABD5ED060606CC7DB1762632EC3C6C4A66ADAF61A97D949DEA5156B4CF34765
-67AC3F10AE17199A710A882D47979F9D41AA2CB794648BE47479F0B00E18BF04
-923F54CEC1214BAFA39BB65ECB013875899E9901B7882D16D2E2C97AD3353668
-A6070081E4DC627AF9192599F5876369908FBDFA11E8D6CB2E83896E9C897CEC
-FD1D25651D66A333AF531FF74E1B0DEB1E3D1B5B7D3FB9D1C8BF60517B31C8D2
-1C264F44BC9AF3D9BA5280D1618EED96C11ED24F789FAA263394C658DFCA8DE9
-D47D9E188E212F9EC1DCF449DFDAB8437FAB9EA9AF01AE1714E8F932855182
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMBX10
-%!PS-AdobeFont-1.1: CMBX10 1.00B
-%%CreationDate: 1992 Feb 19 19:54:06
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 13 /fl put
-dup 34 /quotedblright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-dup 58 /colon put
-dup 59 /semicolon put
-dup 60 /exclamdown put
-dup 62 /questiondown put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 89 /Y put
-dup 90 /Z put
-dup 92 /quotedblleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 124 /emdash put
-readonly def
-/FontBBox{-301 -250 1164 946}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F00F963068B8B731A88D7740B0DDAED1B3F82
-7DB9DFB4372D3935C286E39EE7AC9FB6A9B5CE4D2FAE1BC0E55AE02BFC464378
-77B9F65C23E3BAB41EFAE344DDC9AB1B3CCBC0618290D83DC756F9D5BEFECB18
-2DB0E39997F264D408BD076F65A50E7E94C9C88D849AB2E92005CFA316ACCD91
-FF524AAD7262B10351C50EBAD08FB4CD55D2E369F6E836C82C591606E1E5C73F
-DE3FA3CAD272C67C6CBF43B66FE4B8677DAFEEA19288428D07FEB1F4001BAA68
-7AAD6DDBE432714E799CFA49D8A1A128F32E8B280524BC8041F1E64ECE4053C4
-9F0AEC699A75B827002E9F95826DB3F643338F858011008E338A899020962176
-CF66A62E3AEF046D91C88C87DEB03CE6CCDF4FB651990F0E86D17409F121773D
-6877DF0085DFB269A3C07AA6660419BD0F0EF3C53DA2318BA1860AB34E28BAC6
-E82DDB1C43E5203AC9DF9277098F2E42C0F7BD03C6D90B629DE97730245B8E8E
-8903B9225098079C55A37E4E59AE2A9E36B6349FA2C09BB1F5F4433E4EEFC75E
-3F9830EB085E7E6FBE2666AC5A398C2DF228062ACF9FCA5656390A15837C4A99
-EC3740D873CFEF2E248B44CA134693A782594DD0692B4DBF1F16C4CDECA692C4
-0E44FDBEF704101118BC53575BF22731E7F7717934AD715AC33B5D3679B784C9
-4046E6CD3C0AD80ED1F65626B14E33CFDA6EB2825DC444FA6209615BC08173FF
-1805BDFCCA4B11F50D6BD483FD8639F9E8D0245B463D65A0F12C26C8A8EE2910
-757696C3F13144D8EA5649816AAD61A949C3A723ABB585990593F20A35CD6B7E
-0FA0AD8551CEE41F61924DC36A464A10A1B14C33FAFB04862E30C66C1BC55665
-6D07D93B8C0D596E109EE2B1AAB479F7FAA35279ADB468A624BE26D527BFF5ED
-E067598E1B8B78188FA4BCFB0B51692D07B0BEBB930C6F0997B437E2C51B876B
-61A563A2673932C2045833FAA35DB22ADE12102335D5DC734AE3AC5EEE6658D7
-92EB62131E1DFBA441F53EFF9021D9D4C491F26BE8F54C61165CAD778CE8695C
-EEAF70E3B20C64D4C2B34A084B5770BAB2A974E898F62BFE90F132A37E2DCA4F
-43E13DB13C94DFA8ECE2B7374827AE168634FA007F8981ADA046CED3448BF453
-FCD9A4F194FA648F9FC0971734BB69CB73439CB0DD021D44A7C11BF295E81733
-4DFBA460FF3D654F9FB337E99E6D66FBA87A817EB9CA1536C84833870E3626DA
-55D48DE850D3E6F6B29DA0E7C9D681283586F208DB8D58042E3A7CE55BE84822
-C98237911453E479EAB65AFEBA3F61A763B40E74535BE56C9D8D06DDF9441741
-5C9D9D917439368736619717FAB4F06E2C329AE0BA411F3FD522D9C33AD8369B
-D7DCC9DF993778482F35F965973DE876FA19E109AA198A00658AB3F0D8E3DDD1
-08A573F2D525202AFC57E05D141E6C0BB811E1FE280EEA002B7A45BB363AD06C
-318D320D2C81AA5DCC842CEF66E7DF7670588CB39C9F42EE7763A3A17372432A
-173BDEF7ECCEA297CCDD76A835C36DCE9DB8F8CB66CC71B4920CF5BF055A5260
-5B41A5373BA6E4F63C85671D979EA5EC30D22163E6D206168A3827F465279870
-CA80E6632872F721BBCC622EE4214BF723551C846765495FA9921E11FE1A950A
-53150C3F5D8595958A47E0B16064CC3AFD65DA294FFD111153F4F233BC5468AE
-69585C16CFBFCA32C4B96C161F47B56661DF84FCD8ADD3EC086CFB6BB5179BC3
-A5469A1CFBC8620BC711F42D0D3139BCE4E38698D9C574450DB43B5A19FA6D54
-0368BA9F7A8DBF96DCD0B8968CD194264E6DD10A958846C278B8C2BAFE7AAF8B
-44C84C955F1A89A13E62A054BC76CABBBF6296DE00A79CD7C8C61C70F127618E
-9975B59A880685E126F57AD80F8F4D376E1B476BDFDAC868FB6AFAD9D694B561
-001623C4D9F55366D053B52F2B09EC08B81901AE0986C5350312E626006038AD
-AC15FE313FCEE1A2E61F8992AC00CA7BB7F997707EA377D37EA6FF35BFBC2866
-A572B31491F9B80445685DBA5E62F166E80589F768FC95BBC79158C23B2F1BD1
-25816F1486A64F76D99A638AC0DC101FDF390811B3C118C2D972B2E7587F6F24
-7F1DB2DD922D237A7D18FF08FD665355CFBBEE799D3BFF11CD94CFFDBA3E725E
-DCF4CDE4307E3B199D91893A365D04F43A5305BDD2538E28A0788E061F3A621A
-B4A04E5063B47F0109C1693A284FA43E8F1EA9B68145FF51C005D3FA40713BA8
-1879BFC3CAA881B9D885A0C1AA8BBEA7EF469AEFA06ECD3C26AABD535E9FBDC5
-CF858BFCD827A42CC5CCC4F1353A38204E89F80CAB3A5536F848EDDE1590A2A0
-EA53A5B5EE4BA2E44C0C4D37FF0C41E493FEDA6F034B72EE3B707AFEB7C95948
-628FF2D0AB46CE262FD48BE38A9EE135DD3B964F2AF6FFF727171FB2CFE03BD8
-F283FB6832C3E3F7CBB8BCAB0832CF2A8E614BBB3247CBFF413C62B66BA53CF6
-7389EECA675BFB2D7009025507988F15A89EA5E8FF18D4EFF6B7F9ED4839B6A4
-4DB456F527A910A57679CAFB925C92C2FD4006211445542DB24AF25F0A8294A0
-F1BA550A79E1DF637DA2BE0CBF54E3BC900DE2705FA5D39117C6D60A211DA570
-1767730698E8B894239BD9C1479A7699323FF448A4F09CBCD2043D643F79E5E2
-CE906E4CB48B87061E31ADC961CA1572AC8421BF39F7B411A9BC24ED53983C6F
-280083C9FDB651061980B7EE9E0BE46BAC8438B7132A178EF85333C42EC96662
-9492603E81D660C04F6E987221B84C126C873E07F3B98AE2A812AC2568AA2E8A
-72C259E99BAB20F278A375F62BBE150E0C31E5503977EC2E48851DB6ACF56291
-7751546B0A823DA0B180607D7E017E26DED254A742FC52B76DA76B749922A186
-E5289E8C05C6A9FAFBBD7636A099EBADF6E5E1F82280DDE4673C718D89139309
-780288A213ECC662AB646F272F2EEFED28C8423DFE4E8A3221F759C38D165583
-EF1402CACD01853182A20C5920BDB3E4A15B06A9E047D14CEC33397CC21CC60C
-CF9CF4590E3E1BAF10124B24938C06687474F6C62A824D7935380221649956FF
-88A63BFEB557BD68DF393A2E217C7AC2E311A5BF6A50CBA00E93CB093D28BBDA
-28E09307384AFD3A366F7207C59FFF6B714557C15537208AABE524C14DCF26DB
-63246401AA21F177D818F42C5BB582410C524971A226064657A2041A3DA2ED06
-32F94AE2EA8809142B01A1EC9BC2F523E666C586B385171FA974D457E21BD6B4
-CE7D97BC179F9152C1A608CEB6684F76369BF1CF68A51D367A90A723FA3C21A3
-93CE8F3EF2282C21BD2937BCDDC2C3C630E2DD7680E6DE9F785B60305B8D25EA
-724D36E8804D23D32D26231ADA92D9CFB30385E568CFE7F16162292FBE411AF6
-011471D6E8CBAF3BE10C9C97E5BCE6AD1D3A8A5836DE65B9DE2373B97CFFDC47
-49DCE584F79C8F2CE89AE45C411B57863F996C647DBFFEEC5BA53EF4C1E47150
-950C3380201D0E8B42417636D76233CC5A5993BA2CAFCC2B24079E8DCBE3854A
-CF739B22F069F3906CC35713393E35E478E2DCF24C79E4949634F80C0A4913BE
-8C147E4AB70874F6A10C29E5AA2AE8FA7C73A64503D3F02E0AE4908DCD680F79
-ACCFDE541BE5577C220B0788E583B6B457D63E1CC4F259BA014BB0AE799B03CF
-1A95A0FD44D418A096CC887E49B0C96E0A957CA809828BB6DB415F21BD74B9BF
-682906022563EDF64ABED6E71E417E07231F360BAD0FFF44DE7964C45117A266
-E7153658832787D16FF877084BBFF2CF3270A5F7ABBB3C6F3CC78FC5625362C5
-95C0B9E84437F1DD7816DEE4416F7503A13939074EC2C903CBF4F3B94894E0EB
-5FB5DF79ED323ADBDA74F03B91D1EFFE255BD7601643F717469291A7FA7C3D5D
-A3C493E9AC6120C44DB2134183EDEC41A13C9E9F509E117D6D291129AFC32A49
-820DD87A9BBD788B7CEAA564B0AC2467663F1880D25C07B6E48BE4697DA24DE1
-16008C5006656C73EB8ED8CD98CD5C94B273DDC62BBF8D5DD9E6BE69C29F32CD
-BD20BF7DDC2E7D3A6DE671E3768207CBA6B349305B425715A496A06FA9182937
-DA37B722A3EB307A903E0DAADC63460691EC785E9C70E95F97A36038D2313D3D
-AA9ABD56BF08D7693BC497332FDB06BCC30146498DD44B241D76D3825B05FE5E
-81D3DC62B89BEE1F84AD229F19066F04A921CA4F5762F4E7B33AF63E67AB139A
-D345F31EF338DBBB231734F7BCCAD965CE6197B30F1107F51B40C9B6A46180A3
-9BC594F71A2D1AADE24BA422A0622F183B45310BA8DDED8685B353D09E9A9F89
-15168CE022422321F41054D129F92C9F34B2AAEB39ED0450842EBA0E5815C9FB
-4E21DB19AC5C0038A9D189340084A196E3EED7D3A401D6CC6F0EA92C566BDA37
-B8AB0A856F303C08ED9321A064FC2D6082BEA44B489483C2564E7A8E03976832
-49277FBF853FC5EAEDBE07C81159EAA175E7B503E480D8289EF3F162BBB78D59
-996AA611E984F8DD863BCCEB62E87A6BF04CB920EEEC9526FB6A0AEC1D59C00A
-611D0442A2C1283D0A3574553521655C6408AA57DC0AE854F8EA25D0D6C8741E
-0FA9D1A1D69D376AB28F01045EC42CEA17E6FC874CB190E63818FD96FB0389DA
-A3ADF5CECAAEAA0DD0C993DC934510C7802EF5C98BC1853EADE10B7F07096BF4
-709D65195934D513D1602B20C11DB0A43959E70905D23C02F0E1A097F825EB31
-9818C5BB1C9FF73A4D02E454BE2C29624A642AAD8BFBF1D0BD71CF2A664DCAB4
-47A8AB55C97066E05C87734AE7B9268C5198D1638CC1BAD7C0BFB2CEB58E66C5
-2FBD7A493C19AB750DAD935320F954F24600FB4514F0CA5971CB9114855E94E6
-3E62193C6F8445CFEA9FA91FD727EC56341DB1F5B5C550E4B68D46B3FF212042
-883DBC856E01FB5EBA7871C6FB49A77C1F512328077A175B6CA33150895A38A5
-F40C2BB584A2D74A21E245C127A338632E6DFA0883FC7DC599A58B5D24F48897
-BED5C958FEC519C376C5ABD4594C5CA05726EEC267A673748884A832EAF19B27
-F84028DF17FCD6A2D95B8A15ACF6087C65F4ABAA19681D70E55AE1B2D702B731
-149FD6435A6F677BDC33D847F7948CE84207C21D9C68A05B764DBF5C3B51754B
-45EBD4302F0E594FEB2CDC8F0BB566D555F8671BAAE3DA7F189402B287F78DD1
-A44A047B195B708906E3A4C5A1AA953EFA64B86E292AD56AB7C75ADFE988AB05
-B900FBB56CB85161F44DE1F575768815C91B5A23770433D5B6A68DD41978257B
-7E616B289C52A670D5526E395BAA4D6E7ED660C8A2C7CBC3E04A806563335B28
-6505661F8F7E012DA1E68FAF6E6372FD7DB99059932AAE142B36A798E38F7704
-BA30BA424EA4D81AE67FA3598C95BFBB1386557F5C68E0D9C1024C2104303FCF
-E3A8362864B6F28CDF28B80F50619A7513F5E12B3093DB2BD592A87122EDD579
-12477A9C6536498376104C9D750C85630818EF7EB2C49CF25AC4750BAD67EF3B
-EEB0709BD43EDC14999541D455CD0A55DC4D9301A27251E512763288031217CC
-A1B65F4FB717326E6789FDCE63DDF1CDB3BEB36033C5702808142A1CCB0BF57E
-005668C47BEBE8A4BF45C86CEE87E485D543A438AE2E6E2BF5CFF511B534BAE6
-2C4B6672749E58A91C50A3D44AA0334B0F7946D27A0BB7ABE8632DBB09C7B25B
-3D6EEF34C7A9667ADE14845A7179D232259AD40E8124A8BF81F2B41F698DBDEB
-B44677E4266853E71F120A6DB801436777E0037180F140DD6B87DB2B2D1B5C26
-F326EA89A4B95CB0B82F764D65505BD050600A25C51BEAFB6CAE565A07BE6A8F
-A7EEE15F80E9CA72F831AED5BB95DCA6ECA8756726C3D8243B38239AA628BD34
-EF91B96065E09068992A212CDF87B6FD473517AEDF9854D4E62A705609DA3CE8
-70DBD37B5F69CF8A7E3F14110552E3AA563DEBB2434C85A09CBD8A4461F87ED5
-D1AF1C8EE4833EDA23C4FC46DEDA2CFC77D9366098D82409891F7D44D663DAC0
-9F0F410B59437E53EA25D5C33F7C6150F20D033EAD0BF2A567DE2B62D262865D
-98971AFD35ED018C674ED3EE2CD67EC831FBB4E0BC0CC8CC8A4CF942E80148F3
-0FF8F85E2C27643382BD1FC3B13DF57638B211AD367EB0BDC69E793D282D67AE
-7ED6564CFB28E05D672DD6C81E855C8782BB170142CA8372A4ABC48CAEA6CDFF
-DD690492536C5DFD67829E909CBD491DE71E4C57929FD05753E4F62B1E1D4D32
-79AC5ED666620DA726063323209A96A9D6CAA8B36A5254C3907F5C5390219A1C
-B1F8A5F2FFEDA7788886D5C751AB741F9353661BA51E7D222F66E2DD39A3C341
-FA55A29B5C030886EDA70A7FCE0AFC8E762D3DC5EAD05B1931802C4558177B9D
-740DE6DD7195BB4C8EE3C79ED98B11D23BFE16A449A03BF83BF1BDFF7AE1D11C
-76C6CEC837BF2CD744C2821653B9F38DEAA861086467B9666969BD5FCFE5C761
-4E4B5A73FF0D86D88CC483CCCE0EEFFEB2AE776DBF77A9189A2E0174C5CF8F8B
-C1649EE31A1B6E24DB11C42005B9F81C173976368B16BF672D5E3CBA440CE8CE
-E7ED30223601668EA4450312B2C17EBBF4F8B9B4B3CFA605B4C0CDACD87099C7
-887A6A25D452FE3DD7C7156A9701D8A36E89D693B6A50DE592463D9684BE1FAB
-FF20CB4441F69CCE1BBA19F2BEDC98491F9FA4DD8A82644F2EAF750A5C93A5D4
-1B0FB7C6D3CE2148D1893FABC36B36004BD896D925FC98EDE33CD621EC7A22A5
-7003D04DA7A4F5BFC17365E243F26EAB54D97D19FAA371A4FA318DA32BBC0F28
-ED366A6C724A75DDED9C47893EB789E88AAC4BCB4A355DFE4E4BC5D1B98E0EDE
-1ABC755D259E8DE4C96C17A73706C487BE862D11C9EAA08ABB90726688AFD379
-3CFBC5DDF7AAF4ADE0DAE96787FB3E53F2F440303AE4D884078C1839AE92E7E5
-E1BF0AA47DF2664055869A259CAD759C126D03ADC39CE7CD7FB2451B3AF68CC8
-3F889CF2272E2F77D86DB31F61ECD2530A2B34B5E1F0EEF287E0C1F59D161ED2
-2B66B8BFCB3E79B06B8F2E8FB1E7BE4542956CC5C53177495DD931873A1AB2EB
-6B3BE6F58A5194C48BFFDC203DAB8FB7F5F0DC54C7D6211F6CEB648468C06BA1
-02D5216A8492174F2149F316866D17CE74FC3B4D67D7A6C822B85E27A5F490E7
-C9F60CD5D17666A01033F8EEF4BAA32FB49C84BDB048CE4D9B4415AE6FB123DF
-A75E7EE6BD0EAB310FEFE047DDF882CC47B0353B91BADEA64B02D402E0EBA726
-AF110F0D26932F007A6B727255F1EC4330BDB50B313B6D3BE299B2279FA9CC88
-E8DD0FB3BC7D0C8987A6AFF652A80999D1576111F12BBB159FCE1C9E0984383C
-BC89903756261555CCAC6E72B1ECD7BCE53AD2F3708825ED6332B0A5BF607F21
-6A4FD49955B524F5C98F881793505088F3CF2F5FFF55482EAE6DC46E496FD872
-F8207879EA69CDDF0CB4BB181B4D9D951627BBCAFC802D77179F497CB56451C4
-CEEAF7E2E62F1649C8D27FD8D7723EE0FF348A9876F1CD06BFEAE48A76910208
-ED96039A5A1FA887C3724105A6EB2F096126331EA3F9E0DE04108DCB9A85EE5A
-268A415D2D59FE8B91C0936390CFC1FDBA90B83E132EE62F650D0E779903BD0C
-8BA546618343387FFAE571FB28F4786186C106AC03808BCB23BBE43754A967DB
-03E8AD6F2FC4FC5D4AE13BD744DD40E7034E0E255583056A4AD5D2759C569B98
-A92E3572CDFF0338D4663727FDF0A6B821B83E9C4FC9958692F09342DE095CC4
-AD1CFB33CADC5463CCCCDA68BA557CF8B288122AD9137B7C45BECF8003168014
-52E021F48A2AEA1DE7D28383FEA9252E8C9399E1E66989878DC9E8B0DBDE2597
-FFE15031D701D3515E1AD1F314D0063670E9004D853A7D6CD36003EA06FE7A2C
-FEBCD75652274CE0EBE3792C293744ACC51D95D71499B67B63941496582EF8B5
-04C08625F21AB3E43C01E96F574BBA160185474D2C5D8A6DEE24A44F83C33B98
-14B8D4561F50EABAD8B8BAB5FBF8503AF905996A1A7617D0D308E6DA9D0C32F8
-3E5AF9FBE4C8FEEE2E35ED2A89428AB1B99C7ACB593DCD20A36F99B81A488C6E
-758E86ECC98408F52CD49BE493FFD1EF56AFA24B1D89D1292593BED5F806B165
-F257369DD8BB7C627D1EC905959E0A0FB4656D14DD86C27DAB365F704851F2E3
-27176B0E9C109492D29DB73DEEF74D916BE2C0E8B4C9D2E28E6321EEF8D2352F
-E7DF3563FEE9492F39EC890B1C8919E2C7370F05DB3CF9CE5D39144E44864990
-42CF5B4AF252231D62811A217B14E8A0187189FBE036CF9092467F31806AA70B
-4D9B7774E3E2BA095019311B8ABBFC41744047F165966F57CEB77AD3B664C376
-0E16EC287FF0C53D9635D7A1A7DEC98D5DAD478C3B839F83A392AF4963FAA566
-4092D94331ED03142A7838E1362F5C237AA7E687D94F626F7AFF3AA7474A7DF6
-C403C5A958C0B5D226EF3054324EBA57CFCCDDB8A6FE6AAA113D7F832C1C3541
-A7DD13B35FF997485009FC9274877C59B62871D9C63EC6BCAA5FCD2D0D7B3DE1
-6A50197CCC3D607B5955A4BD89774AF4FFEF5AA4C8A27C342E3D7039A5DEF86E
-512CBA5ACA4FDDCBCBE05EF9C0A5BAE2C42C4B9D7F76D720F7EA8B96B2251EC6
-001EE61C7EFE9D00747AF01199B205B7F22A811CB91782AD46C26A6C536A91EF
-A41B7E0342D434DCF3AC731D19B45E2A95FDA82E587E4B128D119A5CD198FA6A
-C8FCCF566CBF9F4C99A44EC18161A1AA0CD1750DA5196F3804D002D213D0BEF0
-7B3CAA159145B4486E22F86C28B5727F48A53160287F9DC8671466FE8A2FF818
-3B059B24DF899AE1779047D0831B93B80EE5D203F92155A1BBA7D0E9F22845C8
-202BB45911133A30981B1E7F571DB87D1EA980F4BC3FED2FDF786292EA403204
-D63EAE635FC1E1467288AD6FB5C9ABBCC568F521F72A152129B089F397F9AB07
-643CD45528BFE327BE32B77791EAC63CF49D5B0F16DC9D13F1E7DDB44F6485E7
-F7E1D7B62DE956C2AAF2DF0091C169FF51D6124BF25D1477F9A0F5E7FF27D6E2
-96F33123FAD4C48CEE6A6839676B0CF9FBE026BF02ABA10845CA33990F147E14
-E7EDE92E07FCBAFF7BFB31826BED12BBD4323C1872873137372008E01C5D4DC7
-E316F129A91CEC18B085258DFF7EA65DE5A8E9B48B220AE66355AEFC5DFBF9CA
-30F35CE0DA9E056AEED94A567EC212C3831CC9CC6CB16FDFF0D9F4C021D19BB2
-35CA75B5722F39602CF965DEDCE1CC5C8EA8D2FFBA5BB5600431416EB8FED0FF
-0F4A53ADAC4E0B4B65BD90421A92C9C38AA6537D49C0F969D35AD4161C926D3F
-5B2BD863AA4D97882D6C2D9AEC0903FE5551918EE6295AC74533FC1AF0D222ED
-886A196AB9EFA0EAA67DA4C4AA276872A849EBBDDFBCA7FAA011B8ACA5E2EEC8
-F9E62CBFCAF692A1729A09E140ECA0B955B12CA1C466E2F2D8776F754BA9F9C5
-DA57140846FD9FBF7A3769D8E1B6AE09425097158AFD393AAFD7934832D9F797
-DC16CCF84C9075C1831AFAB238ECCBB6360AF12C91B4A81EC7CDC4A98B33D5D0
-8BC4A77F44DF777AC3EE8BA6FF3C8B9BE815A9FE0121EF4327C6E0F4DFF0F4C8
-2DE1BDACA16CCBA63F9369D4DF8FCF8865F54CA8BAA70E3EEBEC8FB2D96C51C9
-5D580E7CF08E1E25F96238825CC077B78B882D4DDD94DC0C1B2979138A4833E4
-DCBCB6324DD5B38B41062CD02B8B4EA090B2E91F36B368CA9FBD2487CA6AC117
-AFF8ED81CAB8DBA473671EE355024CC783DBB127AD578B7C0A418A28EAC41709
-A33FB215F3DC7516EE4C485117FC9780A42EBD0B8ED4B4BFC652B59225D66646
-AC8C5C4C85C70AD5CE24743CBF557959D1D1E7C1F7CE707DC33BD0322730012D
-235900BBDEE6EEFC35105BF6890A6DB96B570BE0F47BF680B9F9931ADD9E9885
-031C9D74CFE6BA384081A7877632C84C25909155A36CAE72A595CD010A18D689
-4C645D2DD6DCC7C163AC9BE6162D457FA40A8786D8242572184730496920E918
-0FEABB3A4DEB14B355BEB7A77E9E999DF48FCCF5040AA36DB7B3A0D77159EE53
-9DE84CEE53B945BD266812651E2EF0B0E9BB43AC3E4B094EBB9A2B8A658997FE
-A330EEBD3D82539AE025E94CD9FE26298A5C4899C07A5102D8E0D6C5A27733D9
-E1029192577F04FB2D820806B7ED83DC902B778C0EFA7D09AB6C0145BF4E4CF9
-83C3BCD08DD7CECC9FE8EF6DE320BA8E1C0353C24F6E4575A4209DA11501ED0E
-41D9D5CC653A9B1C6DD5AC35B6A81185B324DEE9238DF138E93ADB93E46EE1E2
-A8DFFBD867488E1A8D878BF72E9AA291F3B5C9EDCCEF338AF53A28DE9307B434
-481EA06AE42ADCDD7D98DC4921B0175B71E2C6E7D94F9428708EF232D49BB177
-6145FFAC1019C03644BA48095091F0CDDF25FF7C65BC30991EEB01863050B259
-DD945D98D1DC28FA89D7B8EA4D0644BFC06A60588F658310D908977B8621401A
-8B658067B8CD4B614DADF1A83C50E78563BE809C6A9F809819E6C332ED4E7A90
-421B28A240826A57690E29C165A3D49C86549CC0213C609A95E2BE178BD7C9BA
-2348288954AA57BCE267105D924A0489BE9F9F60306F844165AF4062D5348B34
-CD78D246F44443EA88F4B38B5F015C8450562709FCDD14511894C246FEBAC110
-FFB1EEEF6EF1C18005AD17B19BFAD62B40D116DF7E604913777DA73D580359A9
-4790ACA55E263B34A679803F1D1CC700BAFEEE33B3F31139F30487A72F89FEB9
-4680AE0F513E4A1866B095BFBE58013DF186757AED8C0B83203290B9FF343197
-D6D14D9D5F98AA56C1A43A9EB5FDC019F42019FC1DE869698EBCD34CEB62223F
-26ACFC9058D39851F62C071C5539C5F53F23CC5DFFB16DEB9D9620F7455CB458
-D616113D0C0B906F6764797147B9E05406AA0627B1803B1C830D612DF01CAF47
-AD8300C4F91D7CE48980FDB1E999BEDEBEF149BCF02F5D46C4EE1F91927FB419
-9A22DD8A76F03FC195A585A397AC559E532E68E4D2657B8CB8C0A19ABBEDFDA1
-8BDC0A2A756A869A6C6C28D687A9DD0DB9358C12129F644909E0206A57C662DA
-0437CA9D4A1EC28710822CA1F3334ECD33FD0314454A9E3F5474A9B42EE5B299
-7A3E73F856070BA286156F3065DAFC4811925B2736DE150982E38331E15171D6
-5B9718F0CB80ED2215117343051CD0FFDA7E78B5D866581248BEC1CA81F48B62
-255080A36E41258294FE74601153B5BECC7BF6F62664E556D3126BE1A9E4445E
-52518BFC1037F6B81A463F9C203E4AFD537303C2C260531290790813D5880C98
-0E41D1742BD9D2B13FFA77562E0E180763D6784238E84BD4A030630EF09A82F6
-3F49181433F795CE9A8364BDEE56E199C5409C8E55CD94302EA3D21799903854
-A4314C2B968F143CEAE31C78B818AB12590C4FDA6BA868A2D8B54B9DD772A882
-5D471C9D9A70B751AB204605FC656BFB5B3369949257AE76DE90FBD26E332EFF
-DE6D7335CC7DFF91FE5BD71A871F879060373A1B47E6C8C8F3FC9543498BD37B
-64DE85F7CBF4C28D38FE8387D94C0FD841BC8382347B48C6F0ED8A83E4910D96
-936A95F09DC8BB49D45C109318777B091ADB7A5168C567893652587387B16002
-AEFD628C94B3608E1B1B6C6C5249D36623BA467A34D65E00875D1542D96D8F79
-77F8F187CE9EC79B3AFC123A2FF77CDBA0E5D3CB9D084394AB8E047C4149DDC5
-BC700C6E3389C416E82AD9ABBBF2482F49A8AEB923231EE0599925E3D7B21A11
-04F7290653E2A93429D63242429E800391FA80D96AB55DF0E16B2CC9B9C4994E
-38341779F7821B867D09D32CEF97C5D6A01722ABD656BD44197028EE2525C772
-A3FC99625E0B01FF8522548EA89CE03A1C186D78335A1AED9B41CA28EE0491B9
-68CEA78450B007471EFA7474238B90E5F98684F542A81486A750E4432FABF50E
-D69B479FC61920A3CF9C34021D9D57ACF7D2E41CF06EA1A1B64A4F6A7B45AE8C
-392EABADED669B41C519EC2EF4DBA29BFF3316B670F751FE1A33C7062A712EB4
-D228D8B9FC06CB7FC258F25042BAFF2680957DE0AA966ACAC1B8FB98736D0544
-BF64E3D4085097461E3CC14AF43F74890B41DA81165DAFAA6687D2CCEFBD7F71
-043BB6F07199449AF2842B3DEFFB6CA5108BFBBB488C2BEF8EF2E7CD6F45F92D
-065E8967871A3799B492743C40BC4966E1B70698C516CA77D6FFD9DAE7441A12
-A3790D42D97B5D2B806333E7FA4B8BA2DFCAF02B9A3AECFC62349214CAB8105E
-02CDA3637FD30537BDACD9399630864D7B851F637C3DCAD155802E13EDF34437
-19FCD43E5706F34B7D48BAFD373083F3E9AB9A77254CBC818AD5CF4EB552D559
-5C4E22864B40C2A28A8FCA0EFBEF5BE72473A18644FFD1E3FEE0E70BBB3FD7A1
-0E53E4EDDE509044641222EE6B7CF9D9316BBAA8B28F40FAC504633FD973D77B
-BFB43CC80136B8F8120385A534743A5851794CD65F8FC92B699996D6A629DCED
-A490EE35F41B2D72897B540989280B875DFE2B1768A87A6373AD3AA76C32CDF2
-4FD544A95CB8A561D059DE149334C5E40B21F6FD2B8E41AA9866F3382450DD08
-285BE055145A2B89332B0930B3B352614038970E46D4FB9F5280A6B2D5641AC7
-AC55F2582F5AEFFBB40F0EFF5633D9F5FB9F166A146322BD592C3D85C91F3EF5
-F6002A4CDD5C95388EDB53DB8198B6E77A04AC91C1263F622452601CE5D564B1
-7F87D0D22E8604BB2AEB1D917AA35BAF6A7817E4D005FE09E0FEC38B0B15E766
-0134723DFD3FC5FAEF33E5F95FF678A9DA7C679FA75618746DCD53107722D7CC
-B4D796D6C38AFAB3C172DB597B055128CBCF4CFBE2B041EC6EE45FBE829A6784
-4779333BE530C3B6E55F7F36A4AD60905CFFA52152FE377D5193419F345620E9
-35C9FEC6AD70EA8AF73465A653834EE7AB03A90CEE0C1976B81CCEB03F04649A
-6AFCB48C9A06A4AA38C7D99D1A816CA1A345469E6D89C0D52C83158228A9B631
-4228A211199C7CE07C8EA59FFAA62AF7BE66A9CCDB552E0D1CA06D6E1E4A1562
-94816CFCC53366312B18130082653BB2F3DBD919A2F24A9FFF6D36300BB9F7B7
-FC33CD417D56B29817F2F3D10EA4664747103F31098E9733C833AFA21232EB77
-57FCF77624CE44D87D0A5E8406DB1D52137AA5BBD6BEC4063FCD55D3EF20632E
-89E3CB6317A9B152AFE3322DC213EAC76BE5DDF89EFC9C90BAFF999C90E64ABD
-A83F200AF2DDB9F15398219B426F4E078A3E0BFF41D3AA55CFE5433C452CB6C2
-1B32E373C9E69FB5A8A911DB8A55674BC6F13EB1F680EA63D5AE9B71623E81C4
-FF8B544E3AF0E8F8E5ABF6F191442C2928CFD3B9E55F21EFDAEB00899BC247B4
-B72757EF6D8979387EEC0F92A3732C17A04C43750293FD5225225E4F97012296
-641B7502603A97C041265436950FD7CDFBFFF7098B1DF56EB33AC8DF94726DDF
-EDD72E6C6AB96BDBB5A3D0F25EC05D29C8CFE715BDDE2F41BFF7582015B91E17
-0B711C95D88A59EFD1838F9D7E0D604C0C6F779EEB4980D658ADEAE4E3C4EEDD
-7C035ABBA4E94B5D46D746C519874072C8A0157F295D39FBC0EBC602AA0726ED
-F500BBA654E879DC49ABDA1E2CBDDD45EDE551235BEC251C5DC48545BDD33FC5
-A4CC39F4A1CFCCAA9AD5351FC83F64D152E829EE2103132AC17D92D0C415B0BB
-90914CCD36A792822F764B94D3294DEC6F1C04A95F83CC61D96D8E244951CF6F
-4B51EF691A7C0684F235274BCA4E877FAED403F5698EC74960C0C0249AABC887
-AF85166779548C356083CB43B6D72EAB07E29B13D9852DC752842DF687DAF86C
-6F1540624C1D147080035507CE0FEFD544E92298E32F3D3F3D4D092CE7DB3C08
-51F0C4E1689F793286DE7B88D879D33E1C11FACB49E57DCE865E7494A75687C1
-361D8EB050033EE7F45294B6F8DD99974E44EFE6AD22FA9F34F5BFD99D3EB6C5
-1E8E69846ABC8B8AF4447391AFA9FE4AEDC30F87A0957968769381C6A7D8777B
-A0BCBDB3784B22C5DC5CDD6E1140BDC225978AB41F0ECC3694FEC08AEA278853
-CBE034D003327CC57BD87075A61DC1993376EB76A2149CD154DE8B872F2118D8
-E4D57229AD9FCA8B10E737BC0261772C13E7CA92E57974A25490FFBB92D43400
-1DAE7E872991F3C24D0656462EB8E45A965E68E301433FCDC3606ECB0AD92866
-F9B5D259DF699EFFE8C4D659CC9326E0E6A4AD973CABA344EA51953734F61FEF
-414E16C0428EA32279A52B68D6AD9551B31FB3E21C6C2FA3DFC19390521B6951
-8B3FD17DEE0E00D0AF929E3897DF6DC0EA5189841113440E7CB54A99B7D0A94C
-B0FBB9503F9CC92244623C694D1272C6A50FAF778A40CB1F148ADE8EF9CBCB80
-DA6444E22107C2D4F9AFE72CB50E41C5BFC68BFB57809369EAA3D9137D9D7ED0
-18602FC89DF2D010C37D4CE736CE32332013027D57ADFC674C34447B91B6A5B7
-FE73EF494C3150B6D79BFD1D66CD28FC439116FCD50B01694CD4E6CA343FD748
-7FB195E900CFE5DF4E319ED97ABB3A9837ED5381D93F9E0564F07826B042B607
-63BF5320032D63EDF87AC3C9C06A1AAE107FCDFA1BCFF844AA54C0A540D815E6
-E2E577ABCC722EE29216AFFF975C2801CF9BD8B6A63A6CCF98ACD7993C5612B5
-71756DD5D103B4BA21913FAB18D9EF5FA83362E95E0AE4EC327C6858914B49DA
-7432194339667D0FA573BA83B3707E51B31C3ECB23681ED901668C5C3E9EE7AB
-9E593C76C0077C4FAD1BDA5268C6D38B96A72F4C45ED0CD52E413765E99B12B6
-46F81D368420DD177B8CFF97B363F2EE52B7E2D39A5FAB1276BDC9978393950E
-3F470B219CC27F0443C8B02D80CFB417F89339A04901C293D2CADD8E6E9CB150
-DDD6759CD37AAA46BDA5BAC7147DA5CF7AE5EA3DF8DA45150FAD48AFA729A513
-FAA2CFC349AF0E0735672AB45DC75CA6B72F0EBC60243C923A1F85E01C934E19
-7242E363929F6FE6E96722D6E0A0A87ABB44949E49AAD377A099E84C97A35F40
-67691B95C95D9D546A6938D993ED92F12C9D8BB8F533B55A7551C840D17A79EC
-DB42DE4DBBB1A5A2E9ACFB206D527B714A769D4C584DE13EFE87F21DB5694037
-219244E5FCE1A76393BE29F3C7B848CDC92DDCD006CC5A467FA7E20043E8B374
-6A57159B3C4DD12D458964D8681FA5A2EA1087561263930D28403099ADCDD9CB
-B55BA9D8B5A9986E4FDC67B07E11E8D5E697F50BFF36959CCACDD12865EE6A31
-301D3085EDC3DB796DBE6420208425B9861975401D0D57D4E684E60A1BE33D81
-38623A72C254C538C736F80EB9FA6690869639625AB3AE2AF1E0E307905FB0FE
-850647D6D86BCB243D7D59E4F6C2CF54FEFD1446F8EB10EFAC97A4DCC4513534
-B49D83099AAD8ABBDE0B25B1E51E223E005356155A226718CEB44887AE2ECD2A
-F3960898233EB3F42C3880F25785299854D827AC0C6AE152BAE929F0E9ED60B6
-DE7A8D4C3A543329C4F93781A94B53798ADFF5ACFD325A9AC23D9BBE5C6EFBC2
-8EDCF1D811A7FC48B5C37D265A85B7AD31D62B1AA9F1B015687DEBE083EB0958
-3EEC86D3549F9DA109BA1DD4CF20DD96C69CFE1BC3BE4143CD8B73C952773D9E
-8337E5D46EA8E525154BDA85880B819D62908DC9F320FAE41B0617A97FBEF261
-B7C4BEF6EC9ADEC4274E46C2C005A97C877A855BDE2451FA95E3337F4D26AFDD
-0BF46AA30A9AE939524A3B99C85E872DBA90E397D4979B3DFFEE6207C2B96463
-FCDC3A3B66B5029F4EA250B10AFCFA6355E02FF3AE52D1228C0097C53BBA65A1
-5B1E1F1FE93848268C4B8DB901F5CAE15478C79C77D910F019E25448ECE74BFA
-9C0B8137E42A9B54EB08178A66EFFF8FD9070EE1B3976D52DF6B4A5F44F6E8F1
-4B17465CBE09F66E5938EB91BE6FC073747952A1500C249388E5BD36AEC1DF5D
-94D309DC7E77C9F93CDB4ED309E79ADD1735A32D9E6115565DEB0F09DD499E91
-062DF0EB15712CD9328FFCCB56E08273BCFDECF4F0936F61761E42A128A6A08E
-DE6FB51C7FF86C16B1F0049F3B2B46E00459410D9F9BA4112FEF16FF57149A96
-505A5A0BCAAF7C9F990A103107604FFB894AD2974989645D9C77B733F048D0D1
-6ABD6BF44C002E9B49FCBE70FF5647AD46C0537AF41252B987A131403D2403B8
-D15D8F75189F4B64A34E16FC692E1BDA89ACF070888E615CAF284B651752A6E7
-9B55A190D521761ABADB6436420CA13F7786F86CC02C7A5DBD9F99EE0B4A4716
-C8F8A431C9D11339F4CB004D14B4E2F04761688DFC7FC95F209F31A0F20C6F81
-F43940D7B2D5868922527C2E6F4A5D6FC0435582E52CB5821E320DA9482A2DC9
-DA4C281A722C459B4FD21C61F96381ED5BA0CEFB5A607B2A6DC3B8A3E031E3BE
-045540A2C4BEF5C414338F82018ADBE1482F6DD971CF6254C0BD597A225ACA3D
-AF7E5379C3F6D06391CF77475EF74980EC3FF73086FB883ECF192096EB3B876E
-D703740DCB799C168B2FE61AB4B66F20467E794C2E90EAAF6E44FBF72D7CB9D1
-12BB005582D4DCC96A59DDD164B43C374C21DF3420EFCE01B46848F11D5C7859
-8DC80CE8B50E0950D07942FA406A27ECDFCC198309ABB3D32B1C38F50A69E547
-C11ADBE3198B08C55353F9876E0698DC0954936D443658C7A58D9ED61E7E26D8
-C958F383D878E13E364899DBB8F24C3D43F273063FA0CA60D189432E08DC7EF7
-E4D081130689F4C7C221FA3F33C0DEBC749D89038C06C9BD93309C4F2491DFD2
-A795C7A175A7C2172B013006CE7412185AAD48110ECA125C35D8CFD498BBF36B
-7D3AE40E3FD04728D49FF3B93037DD8D50FC871E3E7209D74C44C9234E7836BD
-B685098635D58FC5807BA56BC164AA5653D457CA473925DF4884CD0F036C377F
-CFE339583A4CDE7A15C1A036CE1505FB4BF20FC0C69CC6F9267AC8808D691D31
-23F6BC65D71CDA5366628163742208B7F91119DB801466873BF2ADE146EF419D
-3028C5EB2B19121A3FB25C30274C8CB82A7D32C262606A2D2FDA7CBECE4C3F7B
-C0983F718974FFC030D32298A34B433AB7B969192E98DE9DEE1D2B6886A585E6
-62889C020B6EB5061C51CB3755C4D983DDF3A356AB850C527D89953391519CD8
-51B70827AD2ACA61DCA97377A51C75D5450A4D4C2B94BF180E1762C38F3B4821
-06B3C67476DCBE27384B719472C9F40FE6BF9EA553A723692D912C09CF54F1CE
-BAB1527B34AAC07BF3A09EB8067587106D9FD1B05147EDF5111F88DFDEB9ED21
-9B046EB315292CC17A3777E174B5B805283A71E4A99A802A244F3C95575A8B1C
-A0F9A0C57EB6583C61210DD017FF9F3F590E65CADD852C851C5405FC981CAA63
-4459C7CD8550460EA1BA09F095A524B40DB09861E531CED2961FEC286EA8A0CB
-C714CDE3B97144054AD09F9458D1680D3C7DF12472815839A3B5735863C3F3A4
-95D770943FC0C15DBD147834A50865A54A8E16056F20541589F1E86679FA4E83
-E0962F15A86A12E785FA113CFBE1689E8CB8661D6ED5D6F75ACA2E1E7A8E2671
-4C961A0108F2C98372BE8C1952439CA554DB3881A25F0C8387E54E53F780A2AB
-2271530AD8E07C6FA3A56EFEF3DE7A57BF0DD75F7CD4778DA87E20333ACBACFC
-3A5E2A761C5B851197FC657AE47E152F9C468D7C79DB8C4A1BDEC998232BD19B
-66B64FE879E264C8A3599569E2FEA6822BC0576E3999EF8DB22B7E1D1965B4B6
-973A7DD93ACE840BE9F4726AF930E81C56A863CDA19AF12CF19BAB1E410496CC
-2212DF4E93E887E29547C316A19A22F6289E66973F56805E53D1DC89E2FFA164
-FB486468933182F9AA9ED55E7F3D9DBACB3975DBA562BD38B46ED505A256CE0B
-8006D11D1EA9C646FB9C845DB29BA0D9FCE9DCFA3C16F8106CABD18FACE7AF5D
-126663CF040260D0D48B477EC2056384238D5FD65493F74B0684692EADA452F8
-0972B8F1F223EEA87C677AEC06534CF615BE04303F8524FE7D7B48D146F7062B
-C91F3FC95A33F84F675AF3B94C09F390C221E4CC86072B4BB9D8F78A0C4A2E68
-3DBB42AC22FCAE2ACB30C3D912F6405EE4D2F4ED99CE37FBD3618B65816DE26C
-B4DFC6AC28FE6C1C1CFFAB3DE13FF6D4D09579DF216F9594957B9D4EFEFC2267
-DE7248E3BA4FF08165D85E1D1AF2942EDAD5C3C354D9047D128C649043AB8904
-959CF0342552319E1FFE4850E62C6DD1A38AE7ED8F4CCFB2708BE84B0C25F727
-FBA30F77064935D4CEEF3233A785D0F35303A4FFAD2FC318238927DB55881459
-E2A8DBABAC2C28E97F0E79A71D64DE67473DC29C8D28C7829022C2E8AB641D88
-ADA4FAE13C1A51F23F71AF94DC05D8A132697C74FD2B6CD8B9FFA0E540A7B645
-EFB8043C5DB7B350CFE981843F01AB27690F58DD55EA2B62D81284F4834D390A
-735B7FFB4EA13ABF47F934FE47125AE7E498E6A4674516C812D6FEBB88DFA717
-71CC9497E2C37D2628A582D80CE7304DF6F26569D1EB11164479130AD8709300
-FE437476C3D88006B8F7A1C44F3F77DEBCDAB5DBF3F53B183013AD9ECA9B00E3
-711B2DC7F79B9803B3AEEF824123421FE881214ED4F48D81D8D44058DAE2C582
-F3D2EA49BAF581CEE0A34E7FF56F05A07F2A8EE1D5B99EF02128FEE57CC9A2BD
-F92DDC2754E71AF91C40835154DF45882235E4B04100FFE7AF26B0AB52079A51
-8E5F087785B2DE417E33A7397586411A1E40440470E0CF263B7214E6AB8D6E16
-4A64A9EE9D0DA4DDD005C7719F35F4CADB5ED2521E799626AD4C248848D401FD
-73D1AE687608112AA25DC7110514F7989F73FCA253A953F1B3D819D1B84ACC1E
-6B622A24EDD9FB9C350E28E28BBB57CC86A45E0843A3CA3F4612A815FF72A7D2
-CE642998046A2C047DEE6E97EDB1EC2933A9D44AF1CDA32CC92476D9C64D8065
-2A6BC2B0FC40C6C5EAF67155B35F5298F7FC754AD63F72506080379A2908E450
-D8B2CAED1A9DB18D9F61CC0B3E2D4BE990B88D44A6AED9D5B1B6A5BFDB19D968
-FE55B9DC2704529E6C19EEAC7F09E4C2785ABAABABC2F5445080992CDD8566B3
-B2EA382A5B2DE296D2A18832DB49DEF116628C0DF5968F85DF61B72F1D454FE0
-4CC19EBA3359ED3E61D736237930CEF5AC3D1D0BE02172B99D369A3D88EA3CCC
-FB9D3ECB39B860744C66253D4FC465A327B2C0110C797C1E3CE7F3E46A7A6981
-3B57B414BFA08A3A5EEF88BC97B31F13B9E8A4D1956EE5879AA308900E46736F
-06260E2DA8A88ED930417D1631C96728B294DD4F610C7EA035911620ED8662F3
-B5697687935573104E5116CF74E982E1D34F0E8627686D73AA52AA7BD1281A78
-215AD585F5D42985654635F96D53D4A635EAC418D654E20E3B19DD8E6F0E5B21
-BD332D62A33DD2D72F31B04C34EAC133AB7E0680F6D7E5A7F12F758A452FD63F
-D5EEA7538F7CFED5BA55EE202FCEB568B9B4BA61B51EAC5D78B87E658721A436
-56DAB8B7E8EE28AC80E5F103723CBB9F29B0C175F13C65AC69F7BF068F2E0DF8
-F99D74411B7B24BA3A7149A9FC087E3165866B33F6C7E2F7BE6B85FAB60B5368
-A856E691DC067CC5FEE7CE5ECAED99F905CAFD46C50AB922548659AB438FAE6B
-6C3C09F957D530363119ABA2FAC5E0A8ABCD728A06228E0342C29922FB4F7CEC
-4664D5581B1CDC62E2AA473CF4361B6DC60F88C26522D9F75FD58AD0D0C34FC8
-9C28BBB97EC4F4CEC5A0BE8CEDF1B0985A7F8B8EC5AFD6C9F17A46438C2D1762
-F8A3FAE8F49CD26D0A25C51BABCEF6E207357C05D1D18A266EF6F50C37FD4293
-0DA3531FD742D1D3CECF63C68F51AA583CC1C7CAAA77A19B1A7696670A517870
-FDF8360B5248EF25F812C10CBA3C07129194429790DC4FEBF36713F24114E60E
-FF635C19611CCAB0D94DB829D2940EDCF2D2468C5B57BA1FC13D0F24FC6BB43B
-0965DD72060495EEC6D71AD9AB0B620AB900B23840D58DB3CF9F3813A0F45A65
-2FE351FE47669397BC9135AE929F6BEFB2A712DCC4FD4C09E6B32D8D6B4EE98B
-538346DDE105506B553954123773E7983E829A244897041F49BAFD433CA47C92
-12A2B7430435BB89285B59BBD896C14F3CE0B2B745ECF6699D1C8B420BE27F1E
-E04092AC219F01D93032296196F464DEDAEE3265F9E18433F3D28E7D051BFDA5
-452AA9CA782A0CD1BEB91F5C09D7B77C26F1
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR12
-%!PS-AdobeFont-1.1: CMR12 1.0
-%%CreationDate: 1991 Aug 20 16:38:05
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR12) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR12 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 13 /fl put
-dup 14 /ffi put
-dup 38 /ampersand put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 57 /nine put
-dup 63 /question put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 90 /Z put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-readonly def
-/FontBBox{-34 -251 988 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA04C77322EB2E6A79D73DC194E
-59C120A2DABB9BF72E2CF256DD6EB54EECBA588101ABD933B57CE8A3A0D16B28
-51D7494F73096DF53BDC66BBF896B587DF9643317D5F610CD9088F9849126F23
-DDE030F7B277DD99055C8B119CAE9C99158AC4E150CDFC2C66ED92EBB4CC092A
-AA078CE16247A1335AD332DAA950D20395A7384C33FF72EAA31A5B89766E635F
-45C4C068AD7EE867398F0381B07CB94D29FF097D59FF9961D195A948E3D87C31
-821E9295A56D21875B41988F7A16A1587050C3C71B4E4355BB37F255D6B237CE
-96F25467F70FA19E0F85785FF49068949CCC79F2F8AE57D5F79BB9C5CF5EED5D
-9857B9967D9B96CDCF73D5D65FF75AFABB66734018BAE264597220C89FD17379
-26764A9302D078B4EB0E29178C878FD61007EEA2DDB119AE88C57ECFEF4B71E4
-140A34951DDC3568A84CC92371A789021A103A1A347050FDA6ECF7903F67D213
-1D0C7C474A9053866E9C88E65E6932BA87A73686EAB0019389F84D159809C498
-1E7A30ED942EB211B00DBFF5BCC720F4E276C3339B31B6EABBB078430E6A09BB
-377D3061A20B1EB98796B8607EECBC699445EAA866C38E03ED7D4F3EDBCA1926
-2AF6A41F67AFCFBF3630C943FA111E4CCD988A7363F7C2B75EAF5830B049460E
-0D2B337988F150B9182E989E7750C51BA83DF37685483F86D1F47478883F3F6A
-4B7F768DA5AA89E8F163029ADD4A9209DE8A4F285766C06EA859639B92CCCDCA
-F59B1C2BB8D588CA754D1257BFF76B53984DF4937093AAEF79009D32A29A4C16
-FB610C7D6713482C48D7F9E8410C0F00AD6E67021056B6035534E79F05D14EF2
-4E82E498FC1B42722014C6B17DD12335E62AA3A7E2B9C7696EFB68B5B0BD46FF
-DE521645629F982F465D160C3CF5FE8E5E713DCA6BB454201ABB90F5DA64546A
-7E81240DD20BA52A5641BE7F49591FB4DED72A9F0C5F0E3FEEA3993113FA3573
-AAD8BEA19E295ECD63AC355E493FF904A334CF3C4B2F05D35D1E97B0CADB8FBD
-BDF8BBB565CBD97D3306FCFED92678953C8A14C1CD1D6DF84F34EBB794BF485F
-6D7B029BE279807B4460876AD864CE225AAFAAC07CA5CE89CF435AA949F1B05A
-C3F5BDED3E57529B5F16B278085AD4B08420E86B5A7321E45CF85F66532E5F99
-E9B6C4BA221A4AAE20D6633E0A28B59501410FEEE3E6E473050F688F6032C498
-1F51813EC2625E622EE53A53BA4711B3A46DE390DF26532C4D5FB8F32B125E6D
-07D51A74BE2B345FEACBE3E38C83F63177BEB8F1DD0D928143BBA25AF8CD818B
-8D2AA54444BBCA253D1E3B2944FDE0B5E5ED2053E2CCFDD0D7D3BA97E0879FBA
-6B54E65C3AC870FEBD41E4CAF6CFA5C4D3A58F04576DDB0437B3368BE5EF99C9
-9BF5F0D1A08848AB4642F36D7BF6CACF7694143E15724C1010CDBB5D1BF57F15
-FD5E0FF847B73CF2A6FB1912B353A7736F8CE995842C679E03CB90936239069B
-F801580D8DAEB7F0F7B225DD674A8A9B5BFCEE110A8C0A8CD70A984CC3BF7B6D
-4E21D7B472117EC1F616012248491A5737717390CB8F3D4FEEF179F2D25D4FA6
-8D7053153BA613E1456A800C81D3E7DAB80B2302C29641C8A9A548941070CE3B
-B6573D1253F30ADB7850A2E0980EB519B25EFC55F48D6BAC3E8DED03B7797A87
-E1C4ABC2DBA3703E7CE14B9604840CAAACEF680EA1624570F525BB474A61F699
-37BE7789F0E3E70A2D4537D647E3D592C3609DCB8F8D69B368D373B907038276
-E7C2CB12EC56AC100DB087949E12700BF553003A71FCCEB42D1FBE1C9F54D7D9
-46D54369BF4910824A8ED43C201C7811D6CE6D4B9F80B9BFCCD73FBCB5A371AD
-8CA1C8DEFB68FA5B17C2A1E03CF1E32CD7CACCA8C2477FF7CD07B2A7076458C4
-2185D246390EA42ECB68A3D1B59C0C4D15D7E0C9200A30F397CDAB806E894BE9
-2B550A330484BFFD4E4295231D915DC167B0E6AE459649F2735AC9CD0CCBD75B
-B86FDF8946C6F16D781F877943CE5D7344105C5D6E68D0AEB0D916ED6F0FFB31
-F43EA0D0564FBADD08EE9C27575983A27DE5814610D0A6BE3059D598B872C568
-290A3BBA7E237F20FCC984897882104EAC09DC808B4D067BFC64AF5B9B568ABC
-36E1EE7BD8B802D290C4F1D4A502575289876EA466593D4A19448A9E58068F19
-A827AE46284B7528BE3ED2884D060F95934BDFC43EE060B3E528F05C4517451F
-62B548C21B7111CBCC4B7A586266181767A91463367013FD9858AD9BC51453B2
-441A1D5A4D3F329F5888691EA7EEE0286DD73E7E46BE13E4A1C73051D7D7AD71
-B535DD987127D09899F1512DFB1FFCCD5D4594113A6ECD85A750DA95C221CA70
-6209FD1C073146BC83DFA878355EEF3C29B3B2F6B4584C0B3BE4755DA9EC17A8
-C7BB7AB521E9A301F98ADE64EBFECF08BC19E7B725DE8EDE74DD39EB76105F57
-4F20B42A8A3597E74C5E4E074D1F11817C2A4164FD7CC0C417D0D438621E6993
-F3C6D14EB7FA2A0E7B6EEA91C93F867001F5EB967E072AF47D0980A089ABBD74
-B9334B6E67F0059735AA6217D46215F3B5B65B82B96A09ABC9F87633BAF0CE4F
-1B84D71A52F435652FA08FD405EADED5CB16701CD0731C0AE3DD381F911B7FA6
-897E0ADE8E7861C0BE67D21C92E64F0328FA9D6D4DBC3BAFA6D5B6E6A0A791FC
-26C58DED193F26C0FECE84C1D80BFEDC4111B9B5082ED49EBF0144CA693DB986
-036B42793DD45679C79D475610B876A875DE3237ACB8F5C14AE72A7D5A55A23C
-EBC9C00CC8C98F364B19A259166FFF2369A718DD82C77DE66D0703F706D90B3A
-495D7133178FA6214AF35E63F43E59D7BB251B1F58DCE5174C7FC79AEF610634
-617378A34EF5A8CC75E1E0BC8D9270AF839BDCDFEFDB5FC45AB5E1C5C6E128AF
-B045E23A7D55CBBC911CBACB0947864C29E8E204773E346B3C8A04AD94E1C4E1
-7401269A13ECFFC442CB36E7A813460E74084F4C9F8C5BE067320383AB4E16C6
-CD7FF582C88C97206F8F2177A348F973E37AC87B3BE6F62A7B7633D3861D3203
-57153A1DBCEA06F674D789355FC0785E08F98E9809261EF3CF61E30F3895FCB5
-C296EBD677C1A8546AD76071C1109609EE8EC174E095F0961610DDD78987FEA4
-AD5538F1334AFE06D03D2BB8D82F072A331F115432A1F19023FC1A1FC422EA48
-FB16178DDD19FF1F884DE84674A63E5DF7D8B5CB63234C64BE336CD71604897F
-9D257762EBC5B79E72DED0F38F36506876323C5C79632E965914FC71B73BD0AE
-FEF2EAADA74422BA83405124DBA5D3842A783CB7D541B0057C48384895A42963
-6A9AED15A5BACC748DD935FB252F035A3422F8D0F68510D210C2C0D7ED08B70C
-865029D3FF6FBA9D0770D15838963A386FD6C571EBFBCE7D08B5E73E07920D92
-A09422A17150D02946FF812964F826C12B647DF3135169C81469947580DDEAD3
-066A5F45B6AD472CAE5BBF9F2EED2344C7CBFD7238F73CE719DD3DC5016EBF43
-CB3CF9DEC26DC8089B6302C5A12B1C6B4F3B9EB64B9321BFBE26B15B6A146368
-9B44A744B6C20F48F937BB2D4DAE7E9BC037317C711F2EB7F7C4E3C60BB95060
-B51FBB7F421A64E2B297F24AD7D1F440EF97A4870C831B89C24E183D9D2FA4B7
-9EE818DDD83BE56D10DB8CE787489B9D9A7E3DB93EF4C5B699B8452C9C786478
-E19AC905DE7A99F2500BD0C70EA37B69C4EF579CCB400FC8C16CD5B7E6E4575A
-4895F8001BF11F7D68BF6AB30D278506327972C3B71A08EB3411BD9EF523BE6E
-7ED5C27E8426B2BFFAA95CE557F811BC73B322588BACB5E0BC39FEA701A3F85B
-8D4B5BF47D92F2B3A51C4176399467C2A4C1B862575B8B35090749653D42F361
-CF86B681738106DD501B213B397815E12D84F4A4C6B5A201D426E7601E462BBB
-C0394DC5AD7F137E7EC1403EC2DD427EDAE9143EAD0708E58175FFD5426A900A
-D9A5449EA5145E7DEBED3025394C1C1841EC747B578A2F4DFA92377ADE853440
-71BF551447CEA1982A8B1BD2C845B0FE8187C36941F05AC969BFF7D1F9DEC09F
-CA41DA45F2B7185B3CC34E3601056D23B8C02009BBCCA8424E6FBE82D7450118
-274631744274EA222ED81B7C750A5330B3B46BA0523D20BB647DE888BC644FBA
-768524875C9E7AC767450D19BEB6E593C6AE88585476DDD86EF228595F16C2C2
-8143B46702F15334D97FED2B63BC0E2A2F8755D3971152DB4914C58C52F153F8
-ACE0432436DC37C250CC8710DF036BE081B140DD94FF03F7233E95F9C47515B3
-DB85CCB6CC59853D1E61785F7F7FC782BF0080C3EE64677D64FDA7E0B2A94627
-8E60AEB33E825D1EBDB4117CB450B7FB79146234970E76A4EEBE643F58796184
-BFAB1AB32425FE23DF9779BE52B9C3206433691D5E5197249AD2D2D85CB32CF0
-B1846FF0CA7E78A4A189A7DA09535059A0A87BCC8CDFE85D8133596811E3B2E3
-A126FE300A786EB6708CDEED20C9CD659CFE2CE5C53CDCD569EF94BC1814A520
-1AA4682107B4882DD6E7544B148A6504F82EF0D8FC4782B7C8D736B8DA6E8ADC
-9BA1DBDF6A995E43D4A916D8D14AA0ED29E3FB8284CBEDFCD23DDAADF6ED6667
-B36CBB550070F4DC61D5E248FFB9A0E6D0C1E6E1AAFBEEF059F71F5CFA254A5D
-0302CDA18AACB55809E6581E3509B4132409F649BE9B3107FB31C6DEB92503BD
-F66622A52C00E2C7E3AFFBFA791B1B66799DD09D487A67823BB857F53458B89E
-E56C3A8D3A12E01542362D5803B132EF2BE214CD1212373B85D36BDA3784C79D
-D7E2136408C9061F7FB68B0EF736DD57703308C5F8B1054B21DA6469FA6C71FC
-D652EEE90E4B5AC1D8281217665BA38201EB10F6BBD7C4636D91C87F682625D1
-D5D406A50B70798483D28B2F3C41D31A21B20558A5CE9166FFD6AC2E5C3F6007
-0B77CDCCE8A4E95AED80B3630783DA99059CFC9B9AEE796EE541869B7002CB33
-EB08343F8F20748D2BA77CAFE553BED67C83499FC2B0FF7627339F98ECCC7617
-9ABC2A8D98EF2A2D7F5D2009232CACF2861D6BDD9171DD07A65CC62AE1BE3789
-D32297BB75D31E8BFA7D429CE2A9A147CE886DBFE16AD85F78367B551B740B3A
-D5B804A3D865036DA4A82A1D61D530DBDEEE8F5C8FACC760F24F323B6BA6252C
-0393DC194FF5D19D908DE3B925F5BAB82018F44D83936A5B4DC2C779C5062967
-EBD484293DAF2E6A7E480E03DFF9B56C696CC0CA9E684090F1A77F637EEA1A3B
-D6195268FA8D5A5E51BF4CDA3F39D866123F6347C34AFBD9E46CB6E97DBED3B4
-D358DFA53F44B6F35DF44BD3EA017DD8B10245747BDDEC602D4EFD23AB7004B9
-A1677614D3B3B091E79631EAB5C7CDF20C1BD436696C6E4322B43A5C1522CE7C
-D29D2F8EFA8CC976A598C1CED923CDD4B78213A5DC65BB830D1301F6D12A4D6B
-8FB9D60BCCD2FD29499C0018080AA0490CB5DEBDBE86951AAF7EF3E31207B300
-6CE237FDF45EE4E1CF4CE0D3938A0C47EDBF83F07405A4CC0D32982FD4A3742F
-4A5EAC235B55C532C47F2114EBB0C92BB8FAFD185786A921E1EB4FFB4D4EE0B0
-894A7A55870F146399EC6FCC52A6C77E452D754933002A73EECB16C3018A61F1
-D7131F94696B8D7B23327F64B2E961E08E6CFEE12D30896D281022E06C61A926
-3643335F9E1BA700ECE7E09749462C4742F8B3C3045356015CB19DA4F7A25BFB
-BF1E64A20D27E5F2BC9BD91BFAFE58E91DE8F6FF405837786E62F6432E3B3F25
-5915B787A30E4026896F9CCC4E59DF67E45FA3DF5282D78C2A1BE713404420F2
-978FD54762D992D3D6269FBAF5083A19130F306B8185B771D090C1A984187D6C
-F04A2968524652391F444B507F81C10DD7565C39DEFF14CF7E033751296D3F58
-D6039EFF7CCB5B83190C5876873460C75844B80E5814F00F4A139B4DC22051D0
-D652BB9935B87AD32BA32F7CC90378C58A75D851B0CDF67D02F8DC3A98055380
-D9EFDE44D3FE2A8C27D938767E15AB09102424C244C1457DB57733BA19102F2A
-321E083EDEE209BBD0ADCE44A060A9D74A649668644491AE48A55765D75D4198
-EE34BEC385D4EBCA91B1426A4C863E3599ED5A26225423B55B7691E9158DE18F
-71F29911F33E0922242400AF628DA72BFAEDB9E67AE2EFFA6F513C1130C86B92
-3CBCE096747EA85ADF5E9E1A9275263EB0CB3122529496EF7FD8936FC98F7249
-2C054AE2F03C7FC65DF5FF36564E6973BC0CDE0FCCB981A3A2F88F3FFFBA6334
-9F8FE3385E56C4A4CD12C87068357931F3C25C8E78A7A0A1F8916CFE202329F3
-ECCC48E37DA8DE5D4C7346284A3DF4CB92055F63DA790519801237CF0FE83B9F
-5FDF0B488EE9D0D39875D80DE7AD5E9B3659F839D77EF1389006DDDC0D193AEE
-EC5C35C4D5F4B49963EA9405527415DBC1EDA8536D868C98B4A1D377B06D416B
-DAA92A7B83D78C7137B6316769B0922B59FA96EEE68D6B53228769209B553EFC
-D7D477B0032905B417626E5BEAF5B99466F4DA885C86292E22759E6D10008A63
-6FC01EF558BF5C168AEC491B91A44E2599D0E8CE124524514CE7D85C8EE16474
-F43E92F8318E0D20C1E4F3C94C0BA253B45CE1B75A4C8CEE0E324512248B7572
-09DD7F4E530308A2597744DF5DDE0F595EFA43EA3CEC70A70D5ECC36BB4FCBB0
-2A6D7A7C23710D0BA83E715598CFDD164C8A27018AAD2031E07871CC90122069
-40E10CCD1D252E430B8A198249ACA2FF4EFEC8577A2D1D1B3060E93B522EE044
-D526B3F079748FCBE3F59DE3CBAEF62B71A9EB3B9A02119618A19A0ADD184E95
-5D4F294C857786058B76876391C2B10C02A98D9D9EBF24B17CEAE7E073872D32
-34F75BD0E32E5A6B696D11B922628D812457A0FC5AA599106A6CE8E000438542
-DF76234EBAEBAD4728776CFC0DD4465ED151DEE16B3119CE79C50317B62CCDA0
-FE257A37A8049F268EBFC5E24DD058287244545C2920A9ECC639424387B4D930
-F656BCF3C2EE676DA272287F73A06DAAFDD70F6648780729A9A86CCC785E4623
-BC7FD4BE2CC1EC5585560F2B072F100588177FB47135DEC09B529916B82C3AC5
-D9DE366E5E00C1E821E98AE9A1507097A9152E341D792B86ACAAFC8107E48D17
-19F19EBEAB35AE907B8D5D6A0F0CDA90B96B2BB04AAE2228AB4F873F4BCA8C79
-A9959D73748EF3EEBEAD0FC8276193776C69224184A38327242C84D7AEFAD013
-CFAD7C6C1DE05FD2A0527305E708FFD54E72F733BA384C77A220CCF6035BFC56
-5F8D16D0B9F28DB461D3F48DCEF034D02B089747BC195267B303342BF01AE140
-A5F30EED3F56C7AC702B948AEED75C93424CF3B47DAD20D7E75B7EBA25B9EB31
-42B7D65C1B387D907218F08E6C388E5DB4B29155D30075D72BE3F401940FDA76
-4B1A05414239963EC20CFBA89F4CDCD7BE2F2A33265DB21BAB5CC988CFD11BE1
-4B6527D0B4049AE582C403601460CDD138DC449AF7E8EC16FB9D1C7E3BB1CE44
-68E86BEE15D75A30B3276B15B60A2C8069DD092798283FAF212F7CA2CFECE02D
-99D1D7A83CC640BF879A427CA0264389F7312E6915F53FBB50106012B562C9D3
-FC58B5B7C7C91966F81544849B5CD23B1438A85DC89354B16FC59F672E5045EB
-2CD3E32C96CE19ADE35AD59307E217C92FF23C297502747D4FC1A6A51ADA74A0
-5A34DB9D9C25D44060E7C0FC1004FBBB2E5010EE0DC2BD7048F8C8160DAD7AF7
-453BCDFFF452D3DE7E09C407C36CB3F15C3796FE51308335DC65E4E1AFBF30B9
-7681AC7915968811290A2F4E49F5D0991641109C6E0C2E4750DED4B4144B79A2
-C7356F5F3BC4C0F1DEAFCAB163F8C26353F7D5AD14A81D9EA012E63CF02F93FB
-FF0911C638811D9BD6FF4CB49A9EA8BE82CF09160B63FC65ED85929903D48164
-2A18291E4BEF2958E43914F1753D2C7B2B3C97FA7EDED715F05B0D1DA8B9EBF1
-43F953AF5A9B3E719265AE8239CC4FFEA9FAADBD6E2DECB7D39B133CFFF75E97
-EA34FFA8AC12909E6E23B564037767A7F7D743C81CFBAC9F31A9EEEE5E51E3D6
-48CE6B0BE1E9A0D46F29160C2127298492DCBCB618B2D297F263284F159FA5FA
-F686ABA1081D814035CD803A1E7D335C075B901ED1160EA9B64ED9C1F9C65F94
-AAA11EEA0C8AF61A2AF4511AB16FC7E1411F5BCF3C393462E84A7F564D36D74A
-3896756E4D76E526B679AE3DCBC49F9072F7493EAD1CB21710A4CD84EA9F18E7
-86C5D3AC909427BEF1243719CC102EFC0A46F40297F6851E2DC480282D95F3DF
-0200B15548DEF8D57601ECC98081C733BA1C507D738F451B68A024CC0AE6A785
-F95A0831E2D37B479D2E0F309D60B1D164A30A133AF0CF3AE0FF4EFF1E99D5E9
-7209E1BA09A27F4E102A62E272D01BC5C55A6D6189C084817A3995D4CD2474CA
-8688FC90D0E04F19E5D3744FAF09FAAB2D6A266E197B4890B86021B58D04801B
-36AC9F21ADD711CE23E61DB4E79F47047C7A424353E5DA5121DCCB29AA452F67
-34ED8FC8127ABB32E9E480F9056ED43D347D9BDD41DCCDFABD99C6445838D18A
-FFBFCF8EB1DD227C2BEBC6BCE097298427CFCCDEEF55B3E37F50FF810406F07F
-E77C0D0F48C849741E07E8420AEEF23C43DC9343AF86FD44118865F1967E0F67
-EACD32981EDCCD8F8152C532611B1788A42D353359846210FC5EA61071AF8125
-88548B8F9627114AA123C599801DC839B0058B6D0BD341BDDC51BEE8C2CB245F
-CB17D4C74E289FEAAA947547F47FA369743CBB627C0ACDC7C8195CF5AD024E69
-A9CBC4BC143E2FC31248FA0CB3F702C237EE5C85F53AD2BC39DCFBD72DE6212B
-84300ADDAF562852DB28B4D054C2F308C7FE25ABAB90802A4594601712720FCF
-5C4D492CD39A883F5B5832DEB1E83589DC20BC388E4CEA03FA22AE1C2C09625A
-DFEE57135F86DAE3DB8BFECAEB731224204EE2B3ACD71752B850016C2F1D9F4F
-57311E02F83E68EED20BBBFDBB6972993BF23B7D560E2DB0B3BD1DAE0061F618
-7854A4A4A96376CF30B9332C056F4F754B19A82C2959575E540DF7513F6BE3DA
-D369AF7EFB6C9D5F40C1363E1699E14C55E18E25093588F5142CE60E110657EE
-BF62C0868FF5766F5F398886236F35FFD89E909F6AD0ACC0093E5609856D0189
-3CBD6783B5D6704AA2B06D3BFB14E146DB60590C1FC78BCE82158738A18E72BE
-F671564930F481E3B9058687B1DF14B01D6CF736EDBAEFBAC5A427EBFA03794B
-C493735817FCF7F6C341468F20D8F865257293A8FEFAD10A52DB6A18EFDC09A1
-5B0EE26B3720C08C1ECFBD7BC01C74C552F2D261547CFA65A3BFC2E071C97750
-7FF2D95C27C59AE3301BE516714E69F07CC086C627F6732A7D8497249203636B
-55B52E751E0FE3DF6CCFF815497C38AFA00B3211EA7DAD9110089B0DECD377C2
-B7F8446415B0632F2466373CEF97F89C76C80C592AF551EAC73D7CCDB46903D0
-BB9DBC86F6C2E441491685470B7FE8553CD7A3AC5A0D28E1B2C486744634DEC4
-BDE5B86B232656DA19781547E9A896B11A68E6322E964CC8A7EC22E3AF91B7E0
-9AF2549E220B6FA0B9649668424098AA75EA0A90B790546527B3C6C3DDF52FC2
-2DCB99AE44F020FBC5BDFBDA754A1AA32AA0C0CCFA53765EA45FDAED7DFF2CAB
-EEA13414047C09BD70D488DFB6650DEE63EC53A153877B13093105FE629104DC
-70C556A4F8D9971E7FB67A083B6438348F0A679085039EAC4563E143903EFAB3
-3E9342E8FDFC56BF234FCE1DBA8268A35B57E6D30E26AAF53B6A35F2FB35B48F
-D1395226C222E50E6652684D7BFBB4D7CE6AAB5E4923C8425625522CDF6CDCCF
-423B3B835BEE8E32F827B833AA64AA0769815A03A4F926172BAE556198902818
-4B7395C7E653D999A7E0FBEFC5D0E5635FED826A5D24FB3A9147A54D9CCC6E39
-3562F5F1706699EBBAED3550703B55B0FE102747DA9653643DCF1ED5848DF60F
-CD5F8F261D598321DB4A148C6DA6EA00702B562480A704C2E71CFCE4A2A97D29
-E368D265227430FDCA5F48A4A8D5EE7A213ADDB8FD90872DCB7AD2DCF4EBBE0F
-10BC9AE754BF1098BBE293CA8C20FF7B45B27EFB2FA82A726A4B52E73ADFD0AE
-B6BBD6E3EFA78C96FFF5BC387D9F74FA07AD078C6D38A0EEFCB53A0AEF128343
-5CE0C3372A7EC25228F1CEB24044999EB563663B97330C74831B8EF25A39546A
-DBE84A779B1581DD7E4F3D58618D335CA7ABEEEE71F140038A776AEF523EF986
-545870B820B253813F5013374C87F0AAE821FA11AC5FF0C27CD929FC49E2B413
-1EF3BB49A65BDEA4F6364D691CAD976BA5852A2BAE7072D0A315C6E283C90C81
-6EC7819FEBD0B48FB179B1FCC16B2936C5E9128F26071AEDE920730B0DFE7B08
-28E6434F92514D58B4407B4E5CE59CD2C14451C75BFA4EAF835C40D61DA09671
-F26A9809A6457991B669BFA034F5C6328566E45E4572B80236C4C4F0C1D40004
-663D56B2646D879FC0A4F1198D1C7AAC9DFF8BC35156F276BC8C4259A8DA5A9F
-9B69628937C9AE9101DF676798E823836A211D23610F8B02875FF0C5EC47A732
-5F1B24A455BA51AA19DB7CB18C650D379F5139C3EA3A60237E30B4EC509370EF
-AD5DBE08ABF432E4C4A6A438781FC2040A66CBDDE4B3FF4B3AD3775648122CBB
-6B1029E88C01E2E2EBD9CB0EC696403C0653D2B3002D75BBD38C6D24A9F8A059
-1A21918FC18BDD74698D5DC0790C8399D73605773A053D0D31B844325A56BA94
-AC5BF1E4C62FF6D9B08DB420DED281AAE8AF466197BF842267B322E2028A51A6
-08742198C5711B6F3CB0E475BEFF27E8DC250F8F6CDFB5247E1341F6989DDA09
-0B0698167E3E6F01D936FCE68946B2EB60D1EBC57FC1881F3F3B68860F68B4B0
-124BBF878D5D64E5F20916A1BC7F215DAD6D92D67455C73B558E764CF68CA362
-6A12B3B7F1C4E2B3314742B0FB19585B17EBC756E897BA54354AA72CACCCD09C
-8BDDDA8BDA19E2B9E991DAE922379FBCBCF29272E3659AC77CC99993E7C009B1
-139A2CD4C3DDE2F14DF18DDD8BD9C845B476457F0A4534D680E1CF8F859D53D3
-578F86FE28129D1D9C3740283CDF39B09DDE1EDE265B63A22B6EECC20FFC7939
-388ECABF3C4335E4BE47478A24FCF1D13706EF6233285474A94D03113B5DD48F
-B169C1BF47B7DDA9367EADC60B61519C6E479CCED471E0ADC6834A07749EE2B4
-2AB0320F80C869BBD118D41EDD8496CCB5AC28BAACDB9771A3142ABF3EF29AF1
-CCF29C30B3D9AE45AA7FFCCBF68BDFF0D18773A8365E32D9CFF55EA560E3DF40
-985264AE89531A74BD8E127E8B353D07C2A5D8C7E7D5F443AE233F259BCEF3C9
-8C9F7626408C61EFECFCF64F0524345E516730A9628675C693A7189389AC3F14
-3556EF670A601423FA640248BF387571839E87195BD9CB1271B1276F21AB4A70
-EB142FB25DA6F8EECDAD5B40C75684C95F07A800F41B847CFE6454415B161C59
-6C57B1C79E2284DA41FCD116E6F37EEC95656E197331DBCB9677A365D52D3855
-2FE611105DD2C2D8D27357171684AA286DB4F11D1C4109F1D7AC31ADBE66A556
-D4CB1DD177F0F9D88ED5535A28BDB3BCFAA1A90EF36486536C92EC1638C8FF6F
-0DD1A4D63DF29EB590E9123DAB85DF9AE58E81F7B196165375101E96B25841C7
-B030424C9D0A23FE788E7637840F044DBB8137CC1A6AEF537CF8702E78DA239A
-1F00310E500902F16E6D53003510A34340D31D9CC4716913AF10281A4CBE475C
-0FA814C3EB63FF5FA1B1C33F32A84AB17B80AFDBCBBB6BF1C2F5E24B6A6EBBFC
-820D2BE9AE6B7DB3FAE77BD22A903A6A8A967F8451A4841F07BA55CDD1CD4260
-738C01BA72F553480F89C041ACBB6B90E21AAB64971CBDBFDAAC24DA5052AE1D
-D34B6426C12EEB1947BE9353682AA9DFBC9E69FF5312A8B3861FFA27413981F5
-7228E1969A6F9ACCE2E67CF009B55D47DD2E46570F1B6765342E9843AC6F9F38
-AAB1F8EE5438D007C82A95DB32B8FBFAA09EBF452825F9A83E1EA5FDCFCBC8E5
-02D3087D8A269B9BA9C404AF6F19C66ED45F0A8F0E59548E4902D44BA97676BC
-B5EDE4C5DE24AFBD65FC54DA8559F027D931172DBADD9B7D5A8994E0132D0240
-3495795BBA09011D3CDF143935C9BA2DA28671035F8CB8F0D5A7B6E86694760A
-5B173969663DEDC41A4119990CF1A73501DEEBA0D03FF50610F67721720C2783
-6542027531583AFFDD9173BB0C8FAD6F5895013CE8AB40693B3F86781B7B28CE
-360F65B4B593C016EEAE0E54CEC7C40CB8312F1F295866AF63D2CDE358C2EF11
-8F1A14E012FDE3772321C11D084F8C353AD52A4F7836F75EE68C505F01AEFD8E
-E9F1779DC94F1915F54B1ACDF926C4D74DCC68943A7352DF79AEC6D16C78C03A
-B4F5907272CAD0E54D33FC9C638270A91EA38366F1FDD2822CB6F43CD4EB50C5
-2BEE60F9656BB085FD69BD6000E68018C4D899934F4F8B01C3AEFC2E46A5ADA7
-16B43E4E91141A5D61F92EBE058A62A251947FF96C3B6F49663F7EA2D6E01AA8
-1EED3CD01B5078FCAC48545883CA8368D36EDB44F63C24E31FCFC0ABF9B0FA70
-6FC0FF1E5AFD08D9AC8ADACEEF713CBDC92B89C25254DB9E22EBAC2EF83277E3
-B33B8F5FC784627B804C355D283CDC4AD4F36AF97BDA3F752EFDA08F8A945359
-ECFA936E3CB38180688BEBB439BC52BB7944D37F5461E1FFC444B1A65390665F
-1932899E0BF71B246DB15C3695C7CBF33B7F61E26E906F2736ABD99C29BD45C3
-9B4F1350450D27ED6D008ECDE1C358470DCAA7834A7CCD4FE0EAB64AA8BA5C74
-7E2CA44972638BB3830A7A272D6832A0ED4DB0A6AB1E79FFAC9FF7814C8A747C
-D58428B17B6C6AA690E62B7B44EAFE7DA6E71ADB7D1747DF69DD33604EACED7C
-F273FEE83513E1CDA863289126D79C2B469BDCB2325F8036A1535683F95FAAD7
-AE08E20D0761ED39CD40555B47C8DF045AB774552FE787274E8BDC6688987FB8
-CBBF9D7645D6B2DE4F57B18C53ACF4589FE68B41B917CF69B38A8ECC7760CDE9
-88273727D3D81EC0D1F3F7000197E38F4A5F9A2018527918B2BFC79B4D802487
-97FAA052C99CC8C8A7CA9CD061F5877153FED5772A4305DBB9F2FD576B62AD34
-62E0CC672DC969A5F13D6C1021D6B4C94CA51F44AEA8F125CEF3F8536D7811E9
-643F90A5E33A122224FC4D0F446A080BFB166ADBFE16CB13ADD19FF67ED6A858
-EC976E8782D113C73892B363B219D059D6B68940341C95E8BACB644D0AD16A0E
-2D78A74D4D6B350BB87B30071498397EF3B75C4D5013F4D7C82991BB489E4C21
-F7FBB09ADD951B5010801BFE6E511D9B90DA6EB84DD0C2C6A29812131E599200
-2B36410D88D779DCFFF8093F61075E9D03600B79DBA0CF038910A60BEFC25A15
-0335783812198B168136C9C164F9868B6C121AC2AE1060AF9C03BC6B4037C93D
-CA04B66C02445185FA6E98DCE8AD003F32676B8A63D9388720B2E1C1A6FDCE2C
-BC37BBEC2B343111056B50DD162B64DB4F33B66976958DE0DCCB6956E0ACF112
-DBC21763E905086D75ABBF7208064DEB26F87C283F7E3B65BD8EAC941063C158
-0FB6A76DE2E9D20F1E085652D0BE0DC0536177A0DEC6574B931CBCCC41D0FAEF
-2105AD7684D6D555018795BE42EB0BC5631568701AF7FA8A65D960C42EBED824
-AFE6E2A96668FB441B5D47CCECE2888ABA305EB4CA634DD2E53A49BC9902F9F7
-5F2B7E2F5CCFA7CDFC2ECF8FEC41FC61953F441A2AD85FE42F81C2B7FE067DF5
-A15D63FFF2F0A0DE91C6365A71930DC7ECB6791B5754BF0F4058EA8C8A76CCAD
-7DB11FBEA158903D6E3657F64BA5302D11476711A591ADC421683546CD7B8812
-80421693B42620C2668EB1D8F0B08E8CE974D9465597AA109101F88B342DF0C4
-DFA6374583119B847C8D9BBA9DC59B5564E83128E9043640315EF967D9A7C783
-A3F94B7FE4FC6FF5358C814FE291379F585639BC1A0DB5024F54BF22B02EEF96
-43C37B01C38F262F7060788468E7A1E83466DDDEF78E6777664A452070540FA4
-13EE30E3CE3B5F8A7756BA67083C873C03389A4700755C07CF8A89DCEDA11777
-DEAE579ED01F70DE0F99D07BB9363CC259577AF3FA3D5A673D02B5DB43652999
-22B9AA35C4D377D638E7F040C1539F0A17D37A9D059AA31911612144CBAD8012
-EA27564D7BCF5E321710C327B6D3F161F556297B08A8073EC36C9972803B0225
-12642EFF0D9C216A78AED534E0B832C2A4FAE052F36B0273085B52E4666EDC58
-F644455423F102C2161DCE7A3159479354AAE66ABDE281445B23B54346679263
-355A76EE144C76C12646F9C21E1072E8991FFA2F89E61819CCB21BBE45E66CA1
-D707F7D54FAEE1767C4AC6991AD01974878653E839E6D08E8537A31C256B7FC8
-56EC4D34713CE3A3BEE667E2148D6E854032E1E2A6386F154526B7C7F3670384
-EA2606823DACD84724A94124CE6EAFDFED2FC22754263466D47366EF9B7AE444
-20DF7FF8CF0BFDF952F627148045DEA4FB178507B4CCDEA0F668EA39FCE1FDCD
-89D9302F9737FE7CAA7F93804AF631D8C197BF4B3E81C07CEE4787C4A2736DF8
-2410E10044DB3272CDC28050FF12F9CCAC93F5BABE90CB83A126346FD9E3A121
-5AACF9847332CE1F8D77F5174333A781186CDD5D7A1C587B1AF60BC015D2EABA
-7F67037F662C3487190799D40C5EEA961D5B1F2ABFD628F544DC3A971D0CB4B9
-E78FDCC22DF4670619D3FE1D38F1BEA163575EB00BEED368058584D5E31A3D09
-C60A1917069AA83C7F35A31DBE215F3984659704F92313BD40AD6318808E0897
-7F4A347B29B3F3943EA38FF66026455C52C949DC4674DF291157129062852C64
-98F2D4EAC6995E1CD2F563C1F715313BEF0B5577E4596FD0C02FE29C7F4CDE55
-FBC1B2F7A735BAE6C5CBAFC9D03DDF7DD526F1B4527EBFDB12A06B2D209E462B
-762B2E5CA4B1ADDF98DD874F23381FA376B7F116CE7F1F4C1CF2F42840662EFB
-95BC5035CD6ECD95B4BED82DA1DD0689B4C7F18CEBB2D7C33E50BB856372053A
-1D153C1580F98C2D5E813700DFA8EADB0DFFBC6E9CE035AC579851D282A0C4AD
-B1B1FA1F6F1C694C87E550D1CDEAE83DF259F219D3C06A5DFE646EAAF1D74A41
-700CFDB8313D01B5251B43449516FDBCA68AD69748A20AA028A2F525BA111B12
-88EBA8C67E5B23B606D3C524B2B3A059AA7FD77282FA28C6F6DCA7635F828D74
-20490167EC98BDCEC5D753DE7834696ABA87624038D61B2AAB32578F38DEC9E4
-2751800EE57493C00E6AC97B92287ECA89B03253B3233D815A2B35A21AB9722D
-BB16F31EA9D73286460FB97853355DC4A1589B7025F7829E35B6A294651D020D
-87CAB97991EA91C5A09F4FFA042BA5E1E6C9968CF47EA0BF50D2F984F539C85A
-090B9C6B95EA1AB2F1699A14AC2161BC0A2529E5694F5EB58D908A9B15B0C8E8
-3186490485CBD543E3D5A8041D71BD1C607E50FEC13B4EFC28E98D7E90C53AEB
-120003830BED4EB3505CB0E371EF849813872FAD161399F62B410424B0CE1065
-2033BE50281EAB588C5D3CDCEAF1958DC79D4BDD15CD5FDA46DB0E9EDF9F000B
-909F83B5DAE35F2BDF66165F563E29EBB5686EBD7B0733D83A41763113139973
-301FE4E447B4F33A059D300A471D80EF3FB002107CD56304E4317C450870BFE7
-9035F1BEE06A30B220F25C1040B1E9AFDF20158B1345FE11816004B4F1983ABA
-AE34176148CAC1EAA36F0DB2425EBACE5600B6CFD12FFCCAA364B9E21547FF82
-34DA67D532ECE504CEAC691611AD0E167D8E6C651482B7AD2DB150994BD83B66
-F5C8E4E2501BDEA0F70A06709DB3A2D0A87842A99926EB690E3C66B0754ACA43
-4F523D9F2E2A0089C5C00AA4C455A4F70596B7F2BAABAA5EE63812082E4E8292
-5CCBAD15D10178D48DD38D1C6C4089354EBADE70BA4EB757D85EE21700C3B6DD
-752154C482E5936849F70A2E4C58DAA56CC9B70A0119109936D20DD94B883FC7
-001D087B21DFFD8115CFB6A898DCE84EB9D026BD12382DFD8029D04461134953
-E85949F652F4E1E601FC16906BD4261F019F84E0B5B3B4C8231F1CD44048F280
-7EAC075DDAF1BE658DBB219C05755F6CA8F460428213C6545C6FD631995B229B
-3944E2E11161C664CFF4B484A25C765FAA60394B233BC1F2E8EE1B74D0AAC8F0
-7692151F544D736C904EF1C3BFEC8B2F262E383EC2DA934522CE23961251E498
-CB545CAA9C018B0EDEEED5C33302A0C91EFFA8D2A71851C1703C6C1954953C9A
-EA6930040290F4834729408A243B7AB60FBEBA673F3A03D03E774902B9DB8796
-4FB336D899630CB361DA0A8DC4D6F736CF4FB120DCD06E045B2BCC205FBC9A6F
-7D9C33EDD182953404F3139207546D57286E5BA298AEDD2D8872C5269E9C67BF
-F1832FB403D5359B81CF1D0B873F0863D7BE051DE2B8C3C51E7CDBB802CD7EF0
-1D09E28597A7AECADA737CBA26B2B61325DD56CEA91948B9C21A6CE72669B213
-B1DEC2704E4E97C89C5BC2965FA770E4F12658DD6BD00931233C0FBB38D7A60B
-FE878B2516F363AC230CF3B07839017EF07C665F9A3BCEA9971D9B9531F2ADBC
-355CD844E0A8326288E2AEB99907F839514E204E0AFF8FB25CAAF2EB2E212EA6
-374A96F7DAC15E1A81E93303C9A541BDFB2FD67F1B242FA96DA7DC13CB1DA128
-63B06589B1E6C1AA5271CE6A9A87D7B655C79E6CFC8EC3D6CA372813A9C8497E
-94B670209ED95B38CD3BE3DB5F0A3D8AF723C6ACB1D05AC082E3321541D7FAB2
-4283A65D37A9AE6D6395680BC727678143AA14194B9A2E3E69AEFC177D791902
-8CE650CFA9464D949EAA4CA45E5F81897BF8BDD8921686531684C6BDFC18D46C
-C971826937B67E47B706135BC59ADCF6B603EDE35F91FA71A46AAFD337190DF8
-7DC21E2C9FA91FF575AE5840016C3D4904A5BE24FD41707E22427763F5599F02
-99C447524D9515E6EE09120A28929C51A515685A190D06BC4A3DB809AFAD8A20
-0D5C2BD3E212733BF8A8B9A44464CF9C2AAC58FD013DA91322CA69F3F29A9156
-7C008C33423A16EA20EBD8887B12011690746FE0A92A9E0E0D2BF9E74DDE037D
-1270A065E20037128C026138E3DA53625464EB51494FAC1FE05DCC6663D2D6A5
-A5F25FB3ED580BC79B064DE2B96B47026B65FB63192D85754453867553FE884E
-61DF54C3D1C4E69A65ED8DF4763D029A40AA9A61DEE2D6E0A2A89609A37DC289
-E38C8CAC6A7903C33D76F5118011F8F3B12FA280A896F8131C989ED182256B6B
-CA737EC6240CA28D8F20A44D479BAF7FD914CC736D8837F859B3E23E602ED53A
-EE217E8B959648AB522CEFD1AF09D4C2EE6091CB929216CA398F3F179DF036A6
-2E8F4A1FF27FCF3951F40C7A7FE8D3E397F8C2F6CAB99FF537BDD72A74E58B65
-27109EBDE9AA46D941A3B746BFBBEEE437D04D463D1AE698AE0850EE674510E0
-ADE5BBE05A239E96975371DF52B1991806D88C0FE32AC146F378C861AE63E79E
-86BE778BC24F56C676F72054F70D7F23A029875777C1CD834202CCF0
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTT9
-%!PS-AdobeFont-1.1: CMTT9 1.0
-%%CreationDate: 1991 Aug 20 16:46:24
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT9) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT9 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 95 /underscore put
-readonly def
-/FontBBox{-6 -233 542 698}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D1E
-2931CE5F5D18C658602059F07BE66E6EFC9239D7AB2FB8A4CBD41675B8ECF279
-650C29E53B14AC0E392A664848C1844B1CECBB2D5CFB72D0916B675C9A9A1E35
-F12696A6F628473C604A95376468E06E295AD6F76CEB939D94113532050B9D5A
-D2F41A9EFB9424D986612313B89EFE9C8A71313340B248F6853B1EDBF02B7F9E
-F447220FE131D7D54CFB8AA1281DBAEA73E665BACB1F164552CC0CEDB63BD4B1
-4A9AE8AC6FA02242DBE8DA46B64B6BFC11762F0784F216FC8B9120D688D1705A
-438B14F5E5DEAF2A98408B3B64620DE3732A4DAE6D08D5D97E34C75DAE19EABD
-BA0796165C1151BCBFB1DF8D29A63A8300DBDB9E3323CB82D0337598B83F4F2B
-A97CF5196D4D1CEC1EDB8966E548C0D9C194C932319610FB43EA1B86322FE641
-AB48770FF13BD475A7267E142388563D1A400419C585B22A9886074687BEDF74
-D905BE8EE440BA2ABF28EAB673399B7F129B9729DD5564C681954621903B84BB
-CAF89AC5ADB2932472DF29ADA2BDBDB4D05F65F28F5F4C529613D61858E0074A
-082A852710A62A147C966F2B85B51B0BE85F11D2057C66FDD61F6C5755367980
-9F4DE680601D4DA41B46F8D2148450000413C27AA39B586B74B977B25F0FD3C0
-4BA1EBFAFDBEC531EA13DFBD6700E53818CE04D23886B8AE75DCC36BCD3189B1
-0D55FAE27D0D126E82AEF31D7B5DF27E58C30BB0867D6D7AC1DA9EFB8A2DF095
-B5B934A68EE122DA0A83B36C952431586B957990206194E89339048AA6EE4C53
-703763505ED57C494DD907D0EEA04F6B1D4C8F3BA778F4E7AA832AAB4D75F024
-61E91C6D25FD6823CB24FC863B44EAE226CBCD81DEE29413023C52E4C515FD30
-4E9CC58955D9F87CEFAFAD73F2027DC0BC9CA76F8C6A3F8704CA70B2392330C9
-DCCEA27BF45555C2D9BC3A0BB5F3D899BD27615BE02CF8EFC5E9CB9C92BBB681
-36AA6264983BE3C6F2545C48C416F14577DF9E6D63EC23246A67AE1A2EF21CA7
-F7FFABD5A306E2A2A78A8659D03CB34940DE84886EF41C8DDE72A41EF93C2801
-2E69B7CCCAF7AC2A85E68F823EDE2054CF9E1CDBF0B0FB41479706C30AE9854C
-89DB5F12A2A3523A255630D7ADB82BCAA224DDD4CCDA372A984265CE
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTI9
-%!PS-AdobeFont-1.1: CMTI9 1.0
-%%CreationDate: 1991 Aug 18 21:08:07
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTI9) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMTI9 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 46 /period put
-dup 97 /a put
-dup 101 /e put
-dup 105 /i put
-dup 118 /v put
-readonly def
-/FontBBox{-35 -250 1148 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9E3948FFB3DF7BFF10C9BDA4EFE5F68A8CB1526990D1357AE6D2F7C2D2EF8496
-4E47B39E6712EB8908A3265E5FAB40567E866C244814449F1E993AAB422C3F1D
-DFA8C7118584F2E5197FD4BFA3A8AE9E953C6CD4672C0FF51E41C3A919749C1A
-F06650DF4C5E17492164BDBCDF22609A74BFA7F69960A64B9F949FFC2A807458
-8579366C4F41BDE1FDFBCC4845FA19BBB6963D65EE8532549274BAEBDFF24FA6
-03235D1BE37C06B1938AF369DA75BF38DDBC87A1FF445EAA16E1895ABE9506B9
-211955753E447865D33CEF007391D2666A046277A30A49804FFCED3FEA5EB2C3
-E52EE14A9F75241EA10C91974CDA6236EB840FD44D6DDE4D9B3266C3B99BD38B
-D835BCA8CB819C073480FB972CC028D218F6A1D344CE1B63F4FBF2C826F412E1
-6E0B05A26125865A14FD7B7030B478BB8BC6BC395335C3BA940E1C348267F4F9
-0AF97BBEE253511940F1048E175D3569F7D05A28851B6F50765FEB6C9654FEDC
-1BF52F535DB5BB90C1BD5D2EBF75E0AEBE82B20507F3C28A03746781018D4EB2
-298E4F2C27ACF73FA73EBE43F014BB575AAD516C0407B29E1653375135ECB74D
-C91372F06FA8EF37C31AF3FA48AE65318EAA6C34830A5377ABB2DFA5DA53A574
-433484BA1466709A4B186761655C8E482833B697673E847C691079E7F1DCB8D6
-1AD91101D757B83E2090337D525AEECB028FB3C9F6A6E6AD2F322CFDC5A833E6
-1CE4EDBF41FD34FD61630581D222F854A76C2EA9FD72796A7C9CC1F6C2FCCD16
-E95CA05826A4ECFADA6A5FB83C41A7131E52BA6585DD6DD78515D8F7327DFC6F
-9404F896CD850A7B3B3D71D485F5459E5A1D5C5BA2A6C6AAA7BC81847D4828E5
-60F546433B6D2E24A2D86D453E4AB77B152506F8F1667924DE76E180B2364426
-1F7032EE5011E95527B4F4FEDCF3402747E80F63C78935097C11F672F0B25AF9
-8EFA8D6630EF519CDE68BC41C28EBE6DFD11485D178EEEF59E10BD23F147A2A3
-4BF925E0799FD8A6409984959B2247A900288B6C01F714A37E646D9A26FD7304
-5F11C7F76E1E6245C363387A6CE7C4D864FFC29216AA33D0B209EFAAAC8A589F
-AFF549A9F9EB94F6A5B5C0F1F805C9ADA61BF970E62F565C84048FCF6B521D02
-C07B6EA4DEA977B78F1FBECC0456EE6B5C7282E9B2A6542C54078437241F2323
-6A8D684806535D67759684FB48E7F9C2CF887CC6C156A56D3381FE06E0798FA2
-BA2042448CC78EEEC8D9A310170C105BD1B14D14E40CD609AE90A3AA656A3733
-E492BA2E6B41D8F99AB678AE3004A5F25F7737798A3992C05E05A1EB0DB6E18B
-5CBC533933132DA50E70A3FA76A55F0F7AAC65E1BD7B938BE4BB0435E54EAB2B
-C339E381392F2586ECE2EAF21EC7739F98C774B94D7BDEA395DA286749024FB7
-80790BA6408114D47FEB5AD960B0DA2BA595DBAA3AE039B77026B696E1E79D36
-8E3CF024B830AEF788342C37AA60E4CC83602470332FEBE0DBD17538C0697BEF
-9AC5C518FBD909B24D8B6FAEF366D02A6C806536B51013F867BB1507EFFA0C49
-A4F1391793C918A09F579C720CAF7F40467CFDE27F71A3DBA09167271226E942
-7D9B5FBB3FAF471B2ADD37A4DA1F96A4BF415020FF93AB38EEE0FC319FF61D0E
-C558FAFBB42D326C701E8F85353C629C03AC71A9C18B14FBD353E3C85B2EE79C
-F6507A829F61272C1749DE0A502A0D81342D24F58A057CB0734785B758504779
-537C6D592F7AA483198E7D2E2841AF263E79E5E9AB20A45B99170A9F2EDF450F
-C1F2E83C22E02014E1A04470145E9D857295B0854A55AEC3D3C296D5BA5E66D6
-C07ECA217D95693D68042A9C17D51B98C144B4DB5B855BC12E3582615AE62A3D
-E2AD013682CFDD6D8DCDB2A9086BDFA58D0EA35B8F2B1CA04C61FC17996F6E89
-063F1A60DCDC03F391CE653610886ED15900F0EF5365AAF8F7929389838C6AA9
-02CF6DF8C4CB6DDA327883DAF58395CEB66453AD5C4E4B1FD14D1B6D9254B271
-0151343D14622E225B9C6F5B5A04A3FE39AC11D5EC0A0B7D32AFF978236BC9D6
-850027DA23A0A7F2C819AFC378171A0BA1F38187FEDC87485CAA529C10F5CA2F
-3F61A49997D481FC8CF011AECB4FA4A8DBFD4A3047245676BE0329090249BC28
-8D3CAF777B58
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMMI8
-%!PS-AdobeFont-1.1: CMMI8 1.100
-%%CreationDate: 1996 Jul 23 07:53:54
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 58 /period put
-dup 76 /L put
-dup 79 /O put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 101 /e put
-dup 102 /f put
-dup 105 /i put
-dup 108 /l put
-dup 110 /n put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-readonly def
-/FontBBox{-24 -250 1110 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
-5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC
-4391C9DF440285B8FC159D0E98D4258FC57892DDF753642CD526A96ACEDA4120
-788F22B1D09F149794E66DD1AC2C2B3BC6FEC59D626F427CD5AE9C54C7F78F62
-C36F49B3C2E5E62AFB56DCEE87445A12A942C14AE618D1FE1B11A9CF9FAA1F32
-617B598CE5058715EF3051E228F72F651040AD99A741F247C68007E68C84E9D1
-D0BF99AA5D777D88A7D3CED2EA67F4AE61E8BC0495E7DA382E82DDB2B009DD63
-532C74E3BE5EC555A014BCBB6AB31B8286D7712E0E926F8696830672B8214E9B
-5D0740C16ADF0AFD47C4938F373575C6CA91E46D88DE24E682DEC44B57EA8AF8
-4E57D45646073250D82C4B50CBBB0B369932618301F3D4186277103B53B3C9E6
-DB42D6B30115F67B9D078220D5752644930643BDF9FACF684EBE13E39B65055E
-B1BD054C324962025EC79E1D155936FE32D9F2224353F2A46C3558EF216F6BB2
-A304BAF752BEEC36C4440B556AEFECF454BA7CBBA7537BCB10EBC21047333A89
-8936419D857CD9F59EBA20B0A3D9BA4A0D3395336B4CDA4BA6451B6E4D1370FA
-D9BDABB7F271BC1C6C48D9DF1E5A6FAE788F5609DE3C48D47A67097C547D9817
-AD3A7CCE2B771843D69F860DA4059A71494281C0AD8D4BAB3F67BB6739723C04
-AE05F9E35B2B2CB9C7874C114F57A185C8563C0DCCA93F8096384D71A2994748
-A3C7C8B8AF54961A8838AD279441D9A5EB6C1FE26C98BD025F353124DA68A827
-AE2AF8D25CA48031C242AA433EEEBB8ABA4B96821786C38BACB5F58C3D5DA011
-85B385124F41AD03466151F55D8DDD97A9E3D47CDF844D7B199E2E53FEED0890
-1B156E50130621D5F9BB1519F270FF5B3F56A55B51AB602AF4CCCB9CAB1DEF9A
-0A8039CCEFBD933FE2FD035B9F0C7E2C4E8FDD18D5A0EDB72A7A181A90C87B68
-BEEAEDB6B041D8B3825220522A5D732025A3C9A0ABF97B8E43D19770B89DFAE0
-6E0B9672C5343287C0CE34C0EEC861A0ADFB0CA6F981074DBDE03FF04497775D
-EFA85F1C5296FA028878BA0654325D9A49E63FE1213D15BC94931376628D3F4D
-13D498AFE975ABAAE6CE5238D6D1B7B3C512285FCB55DD32B0D2BD26F01005A3
-E250F857FBB82E6EA870746E82C150977F6D65834A676FB35B5A0C1B22669268
-15BE1BE02BDDF1755970184563F025842B60584A82EE68B28FEC42EC38ADE1FB
-A7D9846F9473F5B90A72A94CC37C34A6F8165188486270BDE4F77FB9C8D01E22
-44220F591515B4D1DDB2E580FF4A9DBC1551F2455E732433E4924E7832E961E1
-57EE9DE24438DBFFB02AC702B2AC1B5E21A9EB382B4215B3FFF438E133F1FAB4
-952E14834907E3891FD9ACC8BCB8D73182A0D9F833C52CCAA23D8F4CE0D53BFB
-3DF5DD2974F4202381DA84D7F4E60C0BB78D4A492F895A1009217B44D4818D19
-C8486FB1DBCE4EF9E22F86455AA1114974F33FBC805C349DF0543A23138BE750
-864E401F2F4B8A80273325E63456785824CBFFE96030ED13E5DF1BA39A14938C
-52C3C4F13A6601B29E69BB7A5433D5896F72C96FD7E8747F3335D60C20A6192C
-EED9FDF074D67FC602163DD30B24B0EAD4BE34F5B85ADC44DAF646A78FFB8B4A
-5411A3A7BA863127C03D731A3A993F6B3CCE260A43D07A51E436A5C34714E98C
-FB8759DF7A99F37929EE75134C309D057548D1E23D509C512FBF783DE0939C81
-11CBA018B1AF51CC8ECA958F8F8C08385FB259268E1833784BB2796EA77E321D
-31BEB0D65E5EACE1C79D40CEED3A73EEFB73E44D6C634124FA70C317948B87DB
-D8BF5FA6A300A967A8F440136700779E96AF75D6CDBD6E71A90D0B429A3BD20B
-9BCDC33BEAB7F7CE3D06EB1DFC56B8E817FFE644405D0E2EA5676EEC4CB4F962
-632CCD89545375F4E1EE85DA0B4AE1C54757708AC060B68F1980395351AFE413
-1E0A8C155E2D4609238DCED812CAAC20C7AEDF09B136C647DD677733F29F1E13
-C0E362D5E1D07E3F7EFB55490E67696C511CEA05C9C9E1040B0472E4B0A2A7C0
-4EBE71AF9F60FD39AA2034B7F7B0F75C06F59BC0CBF6E239C1AEF505A0A67E29
-A47F5B74ECC9E6E52D9E988EB41B9289364232AFEE31F71F85DD9691ED98B3BF
-AD066C4DE2572347712E09CFBF6A4BC13850B72134D3A03EF23D7658FA25E748
-6EF85C4F458CC8C8EC4D72B9829E1622CED93E125CF521F78D330B4C32066309
-FB9EE455364F4F22583D33FE288774FEFDEFEDAD58011AAFFC3F5F34140C1A53
-62C451127DB52FCA37A6EFBCC2402CF37C7816FD61ED4AD0F04EAA5C3BED6415
-2FC7BC9F5FF00AF26072912D8017A120B0CBD4CC38D34CBC1B01C96AD5584FA4
-9D021F0A12CA1FF0CEE32749AA57322DC4F900E7D1A64C0F14E8BAFC581AB654
-7F06764257AE3DEECB03897F756CD1AFF8CC2B8CF5DEDB84DE27FE65D647D203
-62684B6142B6D75A484E97DB661BECE0E09908573B3CCF706DD80082B87AA58E
-4BBB7F73F9BAB600C0D21F9473A4FB6A1DC61A701F183EB0821ABE76FC002BC2
-A8DF5A75200BE6426F50244E74401015AAACF80ACC9E61355CE6A37955350F3E
-EC1DD6E694E547672AC3F4C2E80AEC5971AF9922BF9EE9B0A0A8DF051236F70C
-73B5000528E555FF80F8824AA73F5523EF414793A1080485DF0905E131D8EEE9
-DA2791AB32AF692294246198ABFF9B7AE7BB57F073CB74F5B6B999F6E1A1592A
-F805CC0F87C988DFCFF7DF498FF6BB361A4A982BABACA25DEFBFA8371B54C183
-A0B9F374EFCD7C2E1BFD41830AF81AD91B15BF7CF57BF802AB1F774DC60B2779
-2449CB7FCAAE00485CECB1C61377EF970BBE0FCDBC93B9E600E42722C265EC9A
-54828FBE5F1EA9EBB42017DF66579AD5F64EC75AA9DFA190ECC9AD929241EBB8
-489EC89EC24757BBBC8FA446DD4B51D4C6ADB4857B0B2437348CCA65CB47CA94
-5C26C15E8939593B1530C37A97826373146DAC8D32875731AFF91FA6619BFC20
-043BF9E9314A6DBA5635F2C05E92FA7CE2C1BAA491A719677E3BA2713F756C36
-F9EBAE900749DB09BA993899823AC3102E9163B96A64416639EA9884759F83D3
-D22D0F64C947861873119C2FBBFF08090A877C5C47B27989EA08487ED73855C8
-90D2EA92B9011BA0E843499316F842CDA7D4ECEB0D1B81B37FA156C4E8F6EE39
-EDB83DCF81B06AA793EECDD2C8801F765BD560CCDD4F9EC2DCCE2FAF0CA2C3AA
-299E765058C6C4BB141B64AC4E158C55A749A9E3C8AB771B6FB44C22F3A9A83C
-48A7050514F1D2C15D42EC19954C5D68E91A22B7B62A4858E22FA22D599CC34C
-ACF7B65EFD2C1E64C090C382A18AA1D275A281D418644D1DCF95805FA1C955CD
-7C9151C1C0232EFA3690273D9AD60CA684FDDD6160894C35CB02A67241670CFE
-1B160FA1DE7BF0BF505202D0287AE5C238AB0F546F0D0B39D7EC8877C16C55AA
-484D949EE6D32888C7538F392FF5C538616853293B9548AC2183246FB243B858
-16B4187C05C2F643E6D5939D54680CE86E0896B8171555F73B60851772E8A50D
-C4FFC74058AFE1102CD69C49BC74BE5785CE0D894A1D7D5A983E6C2E024CFB13
-9D14C5742717170375C51F39416D104A4328DB5EC02D57C8E0AFB8E75B4CC935
-FE5456B73A46F4B006B72E4DCBA5A18F9B2FAE5E8AF54F713B57078E53349380
-8C4F3DA4632E01CA0ED79CE8FBA8106E5D0E8B9869D8DEE86314DF1C9D93C61D
-08F64A7B1B9808B214CF3B7AD23C07AEE94FBA86B95B64FDA62EFF64CE60D715
-715D6975D52594C876A11E6AAA93A50826A366D88C1013569F34732286C131B5
-BF03E4A1EFDF69F5650A6D6B49FE69B709CAB22AEE4FA1FE7DB4D6B0DBF24C1D
-89F3E0697A9B893550CD57FBB87CA933AD02BD2E7E7E232990755208670F6CEA
-8CC718F206C0C1FC6B83FEF75AEB04B08B60740517BA268366673662C9DFDBBE
-F69CBAB754C26E377BDE8F0BD2566264D2CE638E1F49F108D65D8BE857926D08
-4580719D64B5C19FA3F62E9A231EF6A78F5AC65E9486238018A179FA2DF2E472
-9348990402BEF7847F72C883F872269BA46DAD793A4CD4FECCB11198B5EC22BD
-68C81C4EF31D74D43709535E63536FEC23A58CE23924C49E335C65197A73B191
-D8378046BD327178AF86835C47C3D20C15F8521F07A37324FC83062E4258190B
-9B9E16C9736F346010755617B1338A44B3A95DC03D35A2389E5C502F9DF3F3A8
-4D15A67EC2C83D34C3196EA03C6CA5C727460F62FF071CD25A7CC9E1A2F8649B
-6E23FD3704938B7FA85662C39E751A481FF3F7AAF63FF57B7768B02BF2BDC52F
-A260AB5C9EC3D0F618A1FABCEC7678963EF168D3EA4B58D68F4D8489C9DC439B
-23D5504ED042B489DD905E67268AB37475FA87219758027D3C9AC133572B4917
-9E55D0420DF1B5C40442E6033BC3BB1D1B873EC81EBCC3F325B45793D5E167AD
-E6EBDF237EBC5C4602A4E19A76608BB2BEC6A6DFBD2CF3A78C221AB47B841295
-16B218A7DF4F2971D92F48A20AC60330065CEB69CB34702AF91AF9B0D50DE0DB
-91C36856ABBF6961D5740A0C585475C139BC23359255E6A08C5B565E88714BB7
-AC3DB3109C36753FE2D2E4801E859FF2B53E6CE9C523CB3A40EA019A4BDBC721
-C3ABDF17370DA8B61E3CC7E4B550F2D52F964A9AA3FEB4E117DED5B23DC70738
-227F013D89DC649B7FC167392A6763B05B4216B47B054606144ABA97FB2BA77C
-46EF77D5B7D4F5846CBBE247DEDE49C5177D851726E559B38A8362DE62E37A03
-F608F4
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMSY10
-%!PS-AdobeFont-1.1: CMSY10 1.0
-%%CreationDate: 1991 Aug 15 07:20:57
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /minus put
-dup 2 /multiply put
-dup 3 /asteriskmath put
-dup 6 /plusminus put
-dup 15 /bullet put
-dup 24 /similar put
-dup 94 /logicaland put
-dup 102 /braceleft put
-dup 103 /braceright put
-dup 106 /bar put
-dup 110 /backslash put
-dup 112 /radical put
-dup 120 /section put
-readonly def
-/FontBBox{-29 -960 1116 775}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A
-27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF
-5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09
-0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730
-DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A
-71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09
-4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C
-515DB70A8D4F6146FE068DC1E5DE8BC57034F27CF0B9E4BF1164D21A8A3D9366
-48317F1579A4E4772661250F737F41ADCF2ABEE72716CBDEC756B66AD35FDFB6
-E37BDDACA68370E604401BE303246CF0F7A46394A52B5E9D34B1E181AE500C2A
-F3CF1A8DD52495B2BE675556CDABF286CDFD02EF1D24B2F2CE63B11A19221CEF
-D0B52B0A53C65D98C14A6B98F8DCF790824C5B2FC5CD97222534B7BD36006B06
-74D1CB5E00DBDCE7E54CBE90BD412D97620C55633A99836457375F2BE6B04BDA
-6A78C178AD1DE0BE3A25A3DC23B990FC90EC9F5AF67A04EAE6235E400F90868C
-6A59C8F95773C7A708AFA871A725C220DA4D6D39D49C738D0777BBE3EBC0B640
-ADCFFDC87BC04759F0EDD89F7035AFC1FBC6CEFDCFD14C51665CEA4CD5DC3005
-D8EB97CE3B80883B7878D038815DF6E60938CBECD30B4D60B202F17ADF33CB94
-A15DAB53E9B28EEA4E4EA360CD89350708C859C80727E065C1CD03AF3FCFCE74
-4A33C7E2E1BA644C6143A67AD079DF51CDFD6B3E76B5B72C1320F1301FAF38F8
-FE3E47A022FD8C71195A0CD551220BE02D5AE98A9758958D3A42FE7FED28D5DF
-537A742B432694CED109EA13249DE6DCFE3E41B352EFF95D8D076EA90FB6E25D
-55693E0C4B6FACDCC4D9C0FB3CEA8D1975D3623B426BCD8DC87297D7091B4FF8
-508F3901D5963018989F10988BD719E38E8F94EC2061E3251DE3796459490032
-D4CD2E4EBA006B63FFD85D54D47B158CF64B236140F62C684789D78B3DD46D9F
-4EF1D4D0695DD344B523D3DBA993BEB7077301835D19EE7650106DB164A93327
-2EE8372C785CEDAFF37E3F8FC867BC2B419B5C0FA588EDB3D03857F24B3F9AEF
-82F411D4B36ECE1E4247F531BA917E29EFD92502D4E9AEDDEB4D641CEE2DEAB8
-43275720A51D80670DBF867F08D3355DD7256DBF1CCF7FF225750F1675C62E42
-641E60DD07FB58DC3E872997EA069F2BB182C20F89A85BB70C0FDDF00883B5F1
-DF84B9753509757501C87B38289C3E2BDDEAFEC8576EECDE90DAAE7B86A60E6B
-DC2F16CC833B1302CEEFF831543E3637CD0BCA08661187F7182A93FD87558E3F
-DD0EF15023D25C990A30BA289747CF98E395075B71D72CBD97D0181A7F6FBC76
-6B2946F2AAF06D223CE1971780166DFE8E2514F742D33CEB36A9AB20949F45B0
-01C64923934503898E9EF1B028228648622C43000B21E51E848E56BD0BA87182
-5CC6761CDCC594531F4FC36B8D663587C4DBD65E40680F5E7958C41301CB492F
-6EE0524879931C173F8D7D341ACB17E8F3400A78BEB162A8CCCD20199A440FCF
-DD2838C734D74D34A67B50414C7DACBC2940E8DBAF5D95B86A19C79B199713FA
-9706B06FA419CED1502B6CCAD866234D22F3AAD8482A48C3840FD713D795A8DF
-A5085B2DB23C5681AE0989F67503D526FBC1E85B5C7FF034408095A6DC57E36B
-074AD42041536A25EABB259CBC456D6267803ECD333DDE69FB193A7E797B6EE3
-D25B6B115734423F07E0E87D1B47EFF08EFA9C7545EFD6923F105F58DF2601BF
-47319F65FCEAB964F918B48A9A127998547C24B447ECBA1F3FDF5D162F66310F
-09EC87746B86D45A55CBFE9607DB2442E36D70E6011CF16A1A0B7CA4D93440E8
-61C3230419895D1DA86F74D36FEA20A1A25E69A759D07D3CD26328E427F490AB
-DC928BE161DCDB7B088873EE6F6F90F109AED1893F2058A8CED5910F52FAEFB9
-B13A7EEA288409A7B6030B05946F5DF5981F5F755D6F7F0642637E4155A14B8A
-B791F5C092705F971CAFE3DBD44E1224E87F5C57A081E6464CAA91A9A3D942CF
-E9AC66183A6B5A1988A4D46B6CF58568BB72A4DB7EAC43203F5D2FA148992E2A
-87DB68B45EF62046D4536B87B51275DF232F90D62941A697755790B14CD6921C
-7E43BDC21B81C3DFE73024E3EF407D8F141F9E84243E6A1F5131916B606C03C0
-DF4EF2902071E651A2B89647491D9D61AF6B9D3ECD3C9D607A18B5ADDFB3CB04
-4B1416370CF3EB9D44F2E11F121B5C6EADF4E09568AF9C894E8340253B0102CA
-8AC30A449452360A7DC314D932D36799FDC0E0CE9AE2DE6B132CC53A956E83D7
-73B9EB2879C68D2E8AA5EBE4DD2E24C20BE770E7E24FC914008928C450D348E7
-2EA5FFF1515414E818EF2BA2EC3831E567BB1C1AC7863391B1C3E857BF8CB15B
-4088ADAE3B8061EF7211EAFA3BB0364274274CB734A2222C34B34766A6D3D0C3
-F5C7BCD32A6724F4D762528BCCE9021924138469FA267848C2546EAE182043AB
-C2B551792B6B6E8BAC48A8CFE394C751071C98C5E69D3D4E6366078405D6124B
-12D1FD49982FCB434B640FB9E042053557D9634D20D2D86A45CAE192E5C33C9F
-24560F472586B9D7F886D5A6A39FF2973B4F508CBB92D239204A2F527BC18231
-0AFAADFE3B52EE58F12D148AF884444E58BA60C74C6B58DACB61A4B2E50B7527
-4AD570A7039E244848FB8FB192ADBA34599613C125F9BAA42AFE506962EA3D87
-4F9F331433266DD04B6D44E89B0FA33E9E2AC02BB8FC1C2AC44250872A046881
-17BBE950D17465352320C3586823B38390B46FE0F3F3CA845E18FC883B28290C
-948BBFC0C72FACD33192C650C9D04A352210C5B4D192482BCD0AC25CC3159C3B
-4CE0A5E090F46D2AB4B2B7A8B2530A44ABD95AD0CB87A5FA48DC033CE8FC3468
-6AE949072A4B99112DFBA74A8A4FFC4CEE9585208EAE9755E2B9D268104CBEB4
-E7E40644CC1FDCC1433353ABE19006B8BAC8D0154C16DA8D0350
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR10
-%!PS-AdobeFont-1.1: CMR10 1.00B
-%%CreationDate: 1992 Feb 19 19:54:52
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 13 /fl put
-dup 14 /ffi put
-dup 15 /ffl put
-dup 33 /exclam put
-dup 34 /quotedblright put
-dup 36 /dollar put
-dup 37 /percent put
-dup 38 /ampersand put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 42 /asterisk put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-dup 58 /colon put
-dup 59 /semicolon put
-dup 60 /exclamdown put
-dup 61 /equal put
-dup 62 /questiondown put
-dup 63 /question put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 89 /Y put
-dup 90 /Z put
-dup 91 /bracketleft put
-dup 92 /quotedblleft put
-dup 93 /bracketright put
-dup 96 /quoteleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 123 /endash put
-dup 124 /emdash put
-readonly def
-/FontBBox{-251 -250 1009 969}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
-87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
-D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0
-92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C
-295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75
-409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C
-4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF
-2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E
-0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E
-B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008
-24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B
-43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF
-D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575
-5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC
-96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3
-7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3BEFD8D9C400015B65
-0F2F536D035626B1FF0A69D732C7A1836D635C30C06BED4327737029E5BA5830
-B9E88A4024C3326AD2F34F47B54739B48825AD6699F7D117EA4C4AEC4440BF6D
-AA0099DEFD326235965C63647921828BF269ECC87A2B1C8CAD6C78B6E561B007
-97BE2BC7CA32B4534075F6491BE959D1F635463E71679E527F4F456F774B2AF8
-FEF3D8C63B2F8B99FE0F73BA44B3CF15A613471EA3C7A1CD783D3EB41F4ACEE5
-20759B6A4C4466E2D80EF7C7866BAD06E5DF0434D2C607FC82C9EBD4D8902EE4
-0A7617C3AEACCB7CCE00319D0677AA6DB7E0250B51908F966977BD8C8D07FDBD
-F4D058444E7D7D91788DEA997CBE0545902E67194B7BA3CD0BF454FCA60B9A20
-3E6BB526D2D21FBD6D78E21A936F2E123C0F6EF41AA2266CF51B513EBF49D4D9
-2C0C93820A37010A4C8990B3D2551EEBA36E8B8DC122B1432A6BA9A8A674CA2D
-5F3DE1AEC33589A13F6DBEAFAF69B753BC0DA94017AD3D1CE981FF38A306FE6B
-A6A35630A7D636C1FCDB936F6BF93040C2E147714DEA74B7E32E97D4A9A10944
-1F389DAD067D206763C22156CACF1B820A6F71A5AEEB76D95A7BC008F0470EFF
-D7D7BAE7545D44A16A51FBE1975162DB333B696716F8978E6E9589A86B824A07
-95F6BDDC7A0FB3D7EF795BFE39EA4885E6E3173C865CAAF8A0BCF4EC66FA0B06
-A3E04E071686DD0C578DEC9EDFD2ECF8457E0BBB5591AF24A8ED3316CF401C81
-EC70E8F0D3BF4A21529B5E42A049AF60AD5B7DCC6E9908902410779460D7BA86
-5C9C6AEED7A598A024222D4131D025ECA5B3321E2E99BB5B451D663E5E06000E
-FF852435FA696BC421FB7B71F4AC3F060A4244F4405709FAE714D6AA3919B086
-308294FACD400EB49591DDADD04F5B5EA452CFA1356624091215D04D9D086929
-626217F6F167FD5FE4811A15068E576E95B795A7D58C9F45283714284A4F707D
-03DB209B0E863AED1651B06C0C5C5724AE78785F5E53B44DB3512023D9C9F099
-4D01D2A9E965FEDD523240FF4F6ED5767302E55364365B74AAE4A47543F4EFA1
-ACEBCA28D7A70F2404FD9AF6FDFBF9279708EEFD35C4F05D8AB48F2C2EED59E9
-975FE2FC27B882ADE0D3602126EAA1A8567D6BBAC36945795936D156B21F0EBE
-B708B9822A394DB88A3FBABE04BA4D3157ADCC999ED02CDD4D4E57F282D4BCA2
-DE43FF19C7AB7D0A90BC193D8027233258E4F3DB5E8609A92942B5CF2AB05522
-D20EE59212B62B3FF3B60B1D278EC27B3C7B04D1730650FEAD382077FCAE9A89
-5D47D5DDFEF1A22A8E2B92C298ABB82F425AC7752EA3934942FA9A8D024B7E2D
-8328DF72FC99DEF01738890882836514F59489829FB6229A1410C45CAA89F704
-1AE31F8AFA55EB7151BFD6F26FD8DB0BC0356DDB161352C10C138B32278107FD
-5EC219A1C326C0A7733A8A25BDF8D0E2E7EAA26AD43451E013F2F6E53CC3A85C
-AB5CBB66B461289E965B5C4A91CCA1708141D3E0E674227CF6EFCB763871BFF4
-CED6FFBD468E5933E2F6E50D358367A274A10B539A55FAB259A706268BAEC7C2
-6D370D735FFDC9FB7EEE0F879C5AD1918E86DAACB863EB75D154E237004940FD
-777C2F5EE1D2A5A2BF663D135EAD37177406926CD6A707DD72DD3FFDF715BAD2
-1C54896D52CD09B9BE943CAA320B1C907A38C853EB5C1978BCF50B0C1D1FE5FB
-3CA1A507FC68012012BF2B32C3910E3D367BC8E3E7AA7F88A9D9EE87D8FB888D
-47ECF9AB2285BFE6BCE7174188380EA574CD7D94C7AF0FA9BC2BB71B71D8C969
-3151A55E08CA30D5EA41A5CC07C0FA424F64FACB2DF3175DD6763C5A2F431C51
-72E6F0F7EDE3AE90008B6B5F03445EAC9F5882BF044036C2DD237344E5951BE3
-406A36374EB73760BDB5B8BD8E40E34D583FF4941720B2D85BD866FF355ABCC6
-B79DCDCBC7C71C1D979914B878DEBE9F3F51EA090244B766964FE238F087D15C
-119AEC68F80C1D2A286E8FA222D6B8325B093D427DA39E53667604C549D35C3F
-DFEACCC08E8D95473B1A00F5DB8278A0A913EBC3DF5070BCBADAD036EB4805BB
-812525D190B20A652871C797235A7A4817071CADB863BDB8BF991F04D6B0BE85
-8F55098A6C2D40E1F5F9BD3C2277234238964802085B6EA70EE966407FD5A7E5
-CE9F45A7E6DCEB62B7EF8D2AD41B8C224FCB696CE2299B1400B5ECB3BDC15D40
-300AC4BE7C849B6620C8EE25CC25A6FE361D2B63CFACE30E63EED2A5D2F8477A
-D204C249F4B7A35357EB2300C4B1F02F31805F3ACE290FBB94EEF97B44D53B7F
-C203A2EFDCE2009888E5958181FA213F977D3860458B7664FDF8A8A8FCACE950
-D1DB562F52478E88D98CE5DE997E27EE90065B812100A5E33273E54B556B584F
-0625E4CB1B002C5F8CFB7091F22192C613F10E2F0863D67218B3F0E753BB2558
-60A7D0D8B0BAB0BE51F2C94E0A1117237B04C33A9098F71FB52852C0CAC93432
-EE19DD3729C897CC7D082E045DDFFF3CF40C8805970D7E6F14AA3279A30B0F9D
-1664EE599779E1D796FA6A7D64A24930262536951EB3EC0D7ADFAFB2803EAF74
-FDD286B223985E16D560D430C4A9BC9D1E37B39DB1591769665E3E32704F2323
-ADE2F2D938B9D2B4F2162001E9ECEABB845D5ABB15C00511E966A0F9986A8024
-D67ED8F1913AD1EC129433065F781091ABBD6A93A0C6E8DF007BA681AB70099F
-624C796739A3D96095775A375907B4595E19C6E3535342940B3273F4D6339DB2
-F619E06E0B52B69F90166CC1DE866AB70C4024D6FB066E754030266461C5A71B
-840C61F1F6F5473A4182924B883A48A62FF2856FE82E8CE025163ADB2616EB55
-1CBEC3CCAA6A8A75B91926A7E68C2A01FB71C27D7ABBF20FEB4B9D3499E060DD
-DFC5A72CD19E87A8C1671FD9DB53FB66407EB01774CB4B7EBC99E9459459BBC0
-FE69CC2D4255BD09E16BF5219E4E896668B809837E8FA4AE3D2DFC959625A6DF
-EE8087E8968499703FC58B250386F5C6CF9F2DED9B306871A3BDF6EB76DE1025
-CAD398D3C3A7470C6217A9B6DD82A68302F4DC5A72394FA8E875C64CDDF20EF2
-AB3C62453827302B77FA2B876B9011E93DB24109ECDFB08BCCC67F76C22462B9
-4AE3041019379D0EADE8654D2DB8823272B9CFB2202A3A67DC4BE5D54B974DE7
-7562A042152A7DC1E5A453511423B288CEE8EACFE41D10B29A96B5252C058E8F
-B0BD004387BE048350C6C20D8B159A9F6A167AF8B22E4AB57AAF303AF9FAC676
-E7BD6BD032FE0C284A8CE180CFE24E22570F2C1D724C593ECD4C8B0A035BD821
-EB8E262F5F8011279454348966910FB9889D6CB47EAC0844648CD5DE4A9F6AD1
-A6BCEC860DEB1DDCFBDCA01C855AF0E73307D95B4E4B0ECFAE68754FDD1A5A4B
-F5408024CEE2FC6D85B38379498665D4B54043DE9D7B3B704669E766CB30FE6B
-6A3EA29F49647428ABDEA2C263EEACDDD333364533EE4D4BAF93E2B1A7841419
-B2B25DC22D5D0C62E1560347869270AFE440172B2BB963586CB61E969132D881
-1E39A33D5DAC923DEE8E85CDB33E227691A543398A25A3383D4BBB5E7D5365BC
-6B66FFD54819D9A064EF59020001D387E7035245CD0A9DA4681257A05238510A
-F224E2ABE340B1917931E2C4F1224DC694FC869F57425DC219D36046C500CEF0
-E5789E3E99C1F4F644300A1220D2A79865984BA7E636F02AD6B78BE64522BC90
-9D440158455096F784047E10ED44983B5B9D87CEE25522EC371B689F3E021B88
-20EA0E623FE4C91921D4BE6E14A138E733685D7D29E32992633C7221D3601C49
-8CAB875C554E969123882371A917DDF87813E4AE5221B2BA267895BBCE390CD1
-C2F16AC6092DED9CFB567D599036679BE1A6D104ACB7B80F8BE93E126FABB474
-9EE686FDED800D5595D679A3401E218BF3B84CD220CA0511DB3F66D7B5473FEA
-84C3F144608774780D3188CBDA1B1EC60184166441D727666DCEC83F24B1FA28
-1CC2C5D6C8C1ABEF666C6AF22BCD09AD37E69B147EAAC4F4A4321B4AC7FF5FEE
-DF286DFDDE34C7A45B5E0A6415D71B42A23F1E5A4C387F348F28CEFE59BA5D20
-BDF31B70F8431927EFD9048C00D36F23DDCFD84511F7A29B1009D3EE128C71F2
-38FED266DDCE9F1118C2B3E183376ECC1FFB884F0D83FB4D4D8DF734FD90859A
-A9A8DD1C0B56E14CF5E1E6E52B0FD1163A072E3EF47F87514043E4AA5912FB98
-21AE97568A3B363C70B67B6A28108D9AB3EF7B8C04C0C6B68E36166605B56636
-5165421C3162C595EBD857D407195205E7BD43DCCFDDB06AA4EC48F0F4F89839
-56E6AF97D6F7CFA9E35D71D30E44E6F83E9586BC51B85DD383F0720485433B1D
-7EDBF1506023C35AFA6FF14326B5CA6B858910E8FE8E1F88894A4C40F7D4011A
-A40E6157C68A71BA8665D5C345D6F1CC9759FEFCEE7F2B0AD72155339A39715A
-D5FD556C02C721C8011A1D9F2C7B43BAE0EF48D0617EAE4ADD901535985E87FC
-AADB22A11B7BA545796EE2C03AD7F6386EF2CA01BD32C9C23B6445484DE87A63
-46FFB9C7DB9FFDC4B295C924BF3A7A461695735A6E53BBBE8F261FC493A35C92
-183BFA79C39F8B6599934B0B000BE40E42A642D1C9197EF378EA199950C793B9
-7D4D4D2D95D295706268069B8AC3E214B1884D973DA7E3DE77FDE870071B9178
-9F45A79844A7C26FD4749402BAE986E0C29BDBFC5E392F8BF09EE13F3E9D211F
-F35CF5914B16B70079CC5B0C718152CCE2C6552591B66D5E22B4329E08247386
-95E6A4F30DC7E54247F7E69D6A402FBBD7ADB85C3DD65A489F1D00B3B3A6AE4D
-439261CCCF85B85FC9F5276BFB288A8314E51E8664CB5914DA4D24928C45BC54
-B60B2A6EA7E5F7C05669B0B5538B4B356BEBB60124CF64476AD5C4102EE16AD8
-D06682DFB2C8ADBC6D8B7A1A82E9F366D711B2424A450217DDBEC64B8BCA7222
-9459359E165E42BB4B1745CE01DCD011156DF98678F8AB2E4822D0EF1A540149
-B984E97ECEB831F1495C97B4FF65E66DC15F591A70C5FF3F8C5F2BCD4231D2CD
-3A1D944849A9BD0710F5E13189F1E5F1E0BC94C99A0AFE09B8A9BDA6DED9863C
-E52947195BDA1E631C16F135558E4C446015F5410A2997E5AA0730C0B8A64487
-1B7497CB014D51C82F066EB7AB47AD360C26B5FA080C467A6DF7391E176946FC
-228CB794B431923FFA2EC214CF7F578DD1A7A8C9C40B38D20919DD7CB02CEE44
-17DE17133B2BBF5B855F70B4E850BE893226DFD5F0A04D7F7C2EEBC35C796697
-8DC79636E04C8297F177760727E55C44545E19204DACB37A7C3A8EC7DBE1F798
-163A743BBA7C6B87912817A728F8F593C82DF49CF3305290C8D74AF4AF4BEDC5
-25605822EA42FDAC7047BA1120D32107F189274A629D5BCF63D28851D94123A7
-CFDF7BD9DDC51F523CE0FD4B113EFDE8CB8B7822176F4ED431C47FEC3BF39B58
-DB015462B45EE063055DC1A34212526A1D2A04CCBA8DFAE9A440334316FDD47D
-25B6FF2CCBC69FB9F119F5214063A8E36ED59F3EC0F889EF2245A29823DFDF10
-82B2447FE12A9456F841B782BF6A2A31C257ACDA4FC57C85D807F0B0FA3D090F
-59D64BDB56C4760D9253A690437DDFF16619536E9CB512F0B7778F824617E263
-2B154BFF29D72FDD274E5833AB81AB89FCF9E02CE9E403454B6F381D26A50DA7
-176249746F258DDBDF90336B21D0AD0C7D5F79D6DF256621E9C2CBBF7585B266
-3D0CE331B8175E9C6240D850A11B0BA0732A331CBE581DF02074A28303F648FA
-A9E549130B79503A433CD128B961A0F65FB4424860DFEBA4610B21BE418843CF
-C3A3571E8BF031D04301350A63546DC8FC5AFC0B91B14074F8F13183ABC0F7D9
-18A5FA6C69FDF3DBD843E6E8770B7D4D426938901DBA64537D5FBB7A99B44E76
-59F201A6AE8848BF459F3E37D4F41B495DDEDDED20E44D58815F5235782919F4
-DEFF1760A19B7EAE5D0416C52272B5E6A68E61CCAEB4112C08D6AEDAF80C158F
-F7F3602BF867D41C98A102940D8BDDF9683D8869D31FF86CABBEABACC9DF3E30
-4CA445291C3FF6E15CFC67F9F1E840D549FB47025B11EA27211BFE0392F5DED2
-C8A58BCAA99DE800148B160C2F05DD8A47BD25440C14D015202457F810A1420B
-798FA57D04A6B72B0A3B93F48C2EED262721ED3BE1AF9CDA8379D57515A38304
-A5331F353DB1C47BE82A264C2575E572ED00A7E0A5571A6B429D165D16C9F8B9
-C6AC7258E8E3BA5AF74CFA54A5DFD4C807C4111F7D8C9930226DEA13317607D2
-3F99F12FC5E9B2C85A13CD7B8AFCDC6DD6323DD6B2FCB462E2BF6A1A3A35FB08
-B59FD161A2FC7D925AB07DA792811FB23BC31DB40950AFEF5340F5681201F34F
-40252B3635E34F297E523649AACD48E9A2102AFDD5EB6E53C00D0520DD6311D3
-6292B5D6170B96CB7B9119D6156AF9DB7C1999F7865E6CBD0FFCC09D50F1D55E
-93AC2B7BA182CD223A53A0D431DC3A7CF3D9BD4E8C9EFF126275CC801E1A7490
-E0AE144E68364A72ED3C87367F5A93BE4E5E05FC2F5A1E37AB4C0E005574BDE1
-2F35B66FCF1C74FBA65836C2E726417E7D5CCCD2CA833F79EB1D7F2FFF3A4E07
-D054139DA553B24A508670446137080308E4D66FAAFC05285B7F18A76323AC3C
-93B843B7E442A42ECA4F1195BB81004ECC00A86F1A66C1419455DF96B5C18A7D
-E7CC0485B447F3641C240DBD7B6E29890A4CC7DB3E220F8F2FD51334B8799569
-125BB626B1B79AE14F11EFF50B8DBC8AA9046DB569EDB971E664154EA58E1DF9
-5961A86680A454DA8605E4604A83DE22D70870259E42A9A657874F7A36EBB93F
-524C271CE8307994D3EB3E09F2E9F139E4EDA7993C6FAC9D3E0ABF00F4F7AC14
-0406D7683F6084AAD3E0AD0C108EBCA94BDE4814CD025E92AB4A5E4A0D9B2A58
-262713C25212FD84C0D81AD012887B901738332622E09B03AE5304AB4D742E89
-D36D4CF255F53CDF9819AC4CF86B1DAD57681FE8491723651CFB54D3A7B4DBA6
-08746FD44272FF02A8F21ECE5DD433E380DB8125F4417188021036F1638CB6FA
-6D0A084B3A8482C21D47401154BE666EAB29052D669A853D2783BFC473C0789E
-E88381D399A773DE0449DE49FA847E5827D16F9BA6F63660F515328ECC3B438C
-A8BB639F045BD8537184F7A6A1072C101B3FD270811F0496F4A734A69B791F70
-5AC0E1B891EBAEA1FEA231B0A63A2738E74A4649DEF82A717E3C5B054D6CE868
-6ACA07DF4D4306921EDD1E8DE6E378E2F5F669E4BDBE3C58D44712BF76D16BB4
-E4C294CA329839F37839233B7C26FA6D34C259E741D805FE24CA60F53B6D0E10
-6E8065C4FCDDE9FAC42125CF8BEB5CA2A2E9F7DF8DCE38C314EE6FC50E532073
-61986E6D8AEA90F325561BB1080408F541E7034CB507B39230741179720EA9E7
-77BDB6F3A6A2AC629CB5E33EA55462BD33468B242AA1EBE01DDE66CB7B098DFC
-74C64598F12FC3E029C382AD73361F8262CAAAA3309402959E51D150D79D90D2
-21523F67CE1D3257725969F86D73EC7504D824001320918EA45D136BD0C06EB9
-2CDE3D6C4A28B4F69BA1631D5723FC3C6CE7221D0E1A6DAE5395C95C05D67325
-5520BE4B09909EEBCF8049D3C2236A7D9C55EFADF775FEE65D974794CCD7EA60
-E5265EF9A9629FF0F9C414B4441A614B15018CCCC1EBCE5A7D47C14681D78FFB
-FE2A40EF5B090A793AB09F0188B0F8E196C46C68D0111671612E4FC423668E31
-D75231A7C570D6CA6A7AB859978AA1DD206290E4D7650664077151F78FEE3B65
-F28D761C0501A811DF4E86C0ACD7670773688417F167A83A63E3DB9A493871EE
-C44BE19C0501F1A79596BA2CA1CB3224B478F5C03D7484DDAE9DE05C7FE6F085
-3296A235A5DCC97FE907016797CB4B8B59AA50E94EFAEDF43F2B48EB67648BDE
-37BB7382A2EE1D43E0CFBE632779701BF4FD4A072DD4FA8ADFF523705495FD4E
-4599C0602B97FDDAF610AB4ECEBD03D491D915E5A519C253CABFBAAFC8314FAB
-3AB59C80F5770F21717CB2AAD2C4568F62C7D391FB7218CC755CE494380ACA8F
-A2BD1E7150200EB9AE20C0FD1DB8F519A1F2C30D3A8D97B4EC6D30C83A127F35
-C3086603D75FC69E3F0149409D9329FA98471F2E904B7BE1F8402917CCD549E2
-3747A46341D6EF09935E2B9B92F9B92593F5B1A6573BDAC71D89B2E78750B142
-0976D0081689FE99830AE09E9584D407BB748030E33327702A5E4576396460FC
-6FE1D88D1DA9BD79EAD9BF3F3DE9BE3DCB6DD729E7A2BF90DE614A184847B494
-565EBBDB3022FD2FBB08004DEC355F32381F573588FA7DAA1D25D125E5E77F6D
-43DB95D150A3C4A26E36EAEFCBC9FF5E767E29D968E51AE7B86BE1D68F73FB28
-F4342DE9C788E56062FD0B3584EAB404447DBCF1FFA6E4C17D0BAC86ACF2F119
-B01CB95355DB97268519E5111A0B6D8E36C421439C603474965F0B19215745E7
-5220C074F4C51D472663769401AA8EE0B54FF7085E8AF8E177617D059DDDA2B6
-B1F0B37E1AE18C005337D3358185B3B8F2B74A6811B71CEF37328C8D63089AC5
-AE93CFD82B6A28AA57E69CCF7174D1AACDCC11BC6CE1EFD49333DE0BDFE29173
-D802A15C24F230A1258F02E3F1C026C9153F0B575B8EE9B06F40D1FB5C5BB8A6
-0D71FCF1F05C26971F650A2D3BA524D70EA611A1FE613D8B883DCF4B3803B188
-5136FCD635CB8B1453B24CB24A0C8E46EAF00099DFF9E9AA1A8CC442FE914BB3
-9AD671B186CDA7DD7EF4266A5A648EF0E4DAD721300961CB2E7381F857B54DE6
-E11E4BBA99AA1D18850CF0672BF24468156526012339C25C6AAAD1295254DFA7
-47F61A700E814D057BEB65AA6D18B43CF2E0844A8387FB93B000897E7311D55D
-BE9293D7B31256B68545ECEFF76840BDBD4E35142A42026608160C6899FFD1D5
-88F7FC49F77DBF435C7738872C06CB97212183A39D5D67B3F524EA1C3242B459
-EE7B175DD9BD5972249307F27757E2A9980F90803B74ACF4F3B907930F0250FC
-7E3A528ADDE0C8F82E8BE2FA7C9CCFA00D4D30E688A131AC6D62F6EE3B5FA20D
-3DFB5F10A39F34728DAEC6B454D69B7B6D6A60D075580CC6C3D046CBE098FBA2
-695DEDA9B5D297EE34543668BF35EF3866CB9183B00C531C0630E2F2673F1806
-BB4C2358CE221325B074A192DBAE357511650A565433789AF3226004D91E3F25
-4A2C42014069AD0D58B1451EFA5994687C26CF975A5B67CA079BE18F6B05096B
-7D6160BCECDD8E74C237E53DE77D702079C3FF031AD9FE88A948832311BC74F6
-67DA1B65A8A107667B15655D2361F9985E5EC1014EC95CE15F8B24CAE2D2B5DE
-72086CA75EBEFB374C2B7A673DDC128BC179254E9F3CEF1F77199C134402C0EC
-670A510C83566D9C9104488FBF56DCE4BDE25357CFCC3FAE2700844DDD42A928
-E607BAC3AC56F4D607897965947CA3250115546E59770E2D9BFA5E163BCA143F
-7122EEADC5E8DFCC6E2D2DB9E5A640C0414F49A147A469FB011BEFCC2B4294EC
-2E8491C5321F16FBC3C88BFE2005C7A95EBA8EED6103637065C63195A52EB679
-8D106E6A3ACDD0620A54C9F9B1CE3CF76EDA503C1EC64E26D2D0431F7CC17746
-743028B1F0C0CC8AFF6F89885783F9A3F0C192A555494069D23FF0CD910EE91B
-8C99F3575FDBB4129E7DA441D50B939BC396BE10767DAFA062CDA8D8A0EAE275
-0D41609B4CDB4E2FC5035EDCB847B671C6DDD07EB14C9C4D1A9F70EE09A22138
-33D39677A5E8B0A85C11C3BCE0FF707495F7CAFB2E773016FFEF03104377A529
-1A25D74D7D8573AB714431EBFF4FFA84062466A5BDD3973CDEF7D675981D4FF7
-B914889B997A03CB64F9B80E4881989B6D86DBD1D6405D72CE13100A802D8ED5
-CD5BF3210257FF538161C70D35D002C7E84FAF36384FFD6C1B882B673C78B691
-C8D263E92135374A9DF336200F008878533610709EB1CB413D5BF646673D5141
-6D6E59852BFD395B3043D3B91F3765961DEE1C48AFD9FE246F6F4EB19763C303
-2594E02C7F2666A8F396B96960D21CD46B75E9DDFB9A74B00ABCBAC2173D76A5
-7BFD860709B82DD07CEBD95440C90AE4BD999F56E4CC6C07692F95F58F358A96
-8D4694A04FE16A8DACFF0743C1875F3CBC0B64A3B85E07401906D740C06864E2
-20A69ADE0BD9282EA3B8A7447BB5DC5A718EFB229BEDB5B1E46C41DDE1AD5AD1
-7595BC33A1942020F594399645F450D8DCCFF6E74AC99CD04922B762F7BF5877
-050CEE87A64054FFD5C066193B18DAD221FB3300EF1A2019052CB62930A6C8E8
-DA103F126CD881F6C3686A01C20A0A64DA580BB3C1846E12D9A040973B087DAB
-343DE8DE1A519F9B1464ABE131DAA2C544DA34FF6CDC33D628F62668E851BCD4
-B6802CCFB8575DDAD5B98BC77E109F39CC8E0CE132D15BC4B8BC5F235BDB983F
-07A62A1EACDD5F943272B37E0E3B90B951D543F6275A1F79BA3118FC5ECDC0E4
-93091BE4CF8F1A13F5326AF096DA671C0E8BD9931631BF95690677AE506A5339
-AFC10502C2FC1D349B0D7015EC8C5FF0BD7FBF583FC92210B4ECAB6CA9D1ED1E
-B1F8313F67D707757BAE04F14983B88D55B27D9416DE24D59AFBD96F082BD4E8
-6A238ECC361783E79D3CAA12E03B4E0575A870B2AD4C0C9AC678A4878A532C03
-ED66CA0919BA19AD6185193A57D29200F2D60C320358DF9C779561F673CE94FB
-30BF804E1FAB52FE6B3B36621A5871058AB432187072C204ED630DFF588AF5A0
-190D6CBFAD7FFEC300D69553FC8C16415B4DDF6D997A73E111B27B54B576D2E0
-019CDE06FEED4293828FBCF9850136E5A7A3707635CD91D1E741811A1F3C2586
-87FEC52BA590B748A75A38D78482FFEE4CC6D556920EB94A96A1DAF029384DA1
-8EA8322D2E3247D05548A8AE74FA5DD42130B9AFB0354604BFF2852A2B21997B
-7BA7536C5A0BB9A6CD31C36145E186036613405F6BD7A4DFEB5E282E9072A50E
-6CFFCEF4DAF27D45A954084197AA9E33E4A4D4564722A524237E9BA18C7D7861
-7548074048E78BEEEFDE573490766116FE9A4ABCEBE168FA7B46186ACBB78541
-805EBF2A905CC697BCEA3E8D5FCD1F6F24A8C1DD040319760F48E02937893D53
-3BC6695AB5AD2D83A0719397650FFE37548BDF56BB79E1B5C89E820D82FDFB38
-E672A5BD180659309C430B26D432EE2194D580D75C153F7DB436CD6B6FC51A44
-A807416355190534C41E09B808CB53DD280CDFD64D19568E163373DB9150DA95
-6D28DF5EC39658DACF66093059DDC8E23681FFEFA705B56CA1665C66C693A016
-791FD4CFBD4F2F2CCC6D47980D4D348A4A960CE8E74AF3EF831525272B7768A9
-5B1DA74C4396A804D95555A2AE1B684DEA08795363692440E1B8770A62CD0BAD
-72B7E3DBB539BC6B036A445745EB8B269F54F20712B5F234F07AF70FB84A9B31
-8B830564452381C3155B268A9EB2996CC84A8D0C9290CD03553E54B4B02151E2
-54382494B2CDB7BE8A5C4286B4245D0546BDF0D397647FA7C71A15018847CF7E
-23F75E69A88A5B7565F359EBE689C07C47B5A50FCF5216219F067E858E48253B
-A9DA834F94950B1A5B5412B2C829C2E689D2C936EAC9F87A112303BAC082F9B9
-BC825C103C4F01DB005FD6D5B516F062B6CE7387331992C254980BB3E3335E9E
-D214CC6C77933CF5836C8669E9D24CDD9E5E4FC24A4EA46974DC184B262C6D41
-899B7536B71FA3D6C0203AC4AF8475BBC6DB1974870A79467F2851C0A06299A9
-C945EF0872382F429413679CE19F3884A7DF01692544D127A8F50FB74DFFF4FB
-676BFBF1FE4DB88E27406C0639E77C7D7B6CADE321636B10F87CDFDBE940CD78
-CA9EF58CDC8CB8AB946969554963ACC11FE7A028C245D4A210ADC9800B287EAE
-385FEA05BAD452559BA5516B7BE4BF14C02165204DB2DB770732FC00E75D2714
-0A28292288732177AAACA0CA5420E9613183E9D70C256C038FA83BC1E5AB57F8
-B4A1A814FF72DCAAE2E18E310FA2ADDAD57B4CF22B3E14421C7309C88E2D956D
-CA8FEE193B88372B59AF0FDB5CC97AD29CDD80D0247FA29BB3C5BEC1C44242BA
-A3F2F73CF01CDE620351E954DE496945E9E54E007F62E285D894596D59854724
-5545E7251C59182EB3DF455DBC3EEC88560CD1A75CBF0C2B2DBFA09192B26914
-75CBDAA5D5D709980ACFA795DF8C3790BF88DE1F6FCE263CDB4127E89E30D616
-E52F0791D4BE886E10099BC3F0ADD41FD636E40C863AE8A6F9283D5B7C27E7B0
-01F71F66E829476CB7440213DF68BEE5EADBB5D9DAAB4F0AEA3F025B5587FEC8
-A24D6B8F95E69CAD2B7226476750B74F013F1F0F5801128FA0D070DF2AE52C9B
-F8868B466125DC520DBA3A17CAC6C19836956CD6777A06FF4432E0D3A0EEF390
-CDAEDB2D807C67A43D893FB7BD18418A5A15CC476748FDC1DE5C6F4A8607314D
-A82612539E3EC6E15FB19F627E57DA83FB8058AEEC09E7B90E770B99D294B3D8
-E78D3774E6CD9B4E52DFBFFBC89AB73009163B34CC7850C2C9313D3955B29867
-8B1AB6ECAC1E3558964AD66F2EE1B0C41B26EA770298111F4BC19A795D841FFE
-86036CA074BFB85F80D0C5A586D4FB1238A8C60F93BAE298A5EAC26D55D38DA9
-92095801070CD6B5B0EEF6224CD2850AE725E42B672F54FD3C7B72449AA8107A
-1E5C9FC970933D74D2D6FD3FC03E2B56A8745B34CD50B6CD1E3559443271DA9B
-8548D5988296C476D0265120F5FE04FF15D05D1BB0D05DFC0161ABEA805CE619
-1E1A19C96BA1CFE126AF73E6401AC45D646CE1FF6EC73DF0852D4AF39636CCE4
-119F53A808BDB986EAFC8C8FBA94E2B6A73B8C6C2C518BA1E9626DAABF1075BA
-23AF7AD65C141635824C93052DA3ACFE7A4F78EE03D9705DDE497EE90A43A0B0
-5F3D8FB276C5EA974683F1C834EF0D08E371ADD62B15E6691F3BAAA17A3E7FE6
-077DEAC2686CD88C8E277D823F2B3ED4CE621B846C0A40968B5341D59320A10C
-8EABECD761FEA64809BFCAE24F28347AF5281C542637E22EB13FC4B462880202
-3F4CBBB97DCD885E582653A87691C5E3B07C99A2BA90EA830CD0434877C1298C
-706CF38C137B150A3D3BDD91FF67FE1EFFBC68915DE5EAECA6261AA5057738BD
-A15497D2D3B4B61B15B771215A629FE6A6223E39E19380819E43284F3E1D087D
-7CC6AEBB21FC0D3D329DE0FA37D1B3A3A0322A0B4926B3CFD7DFAD0EE18F973A
-91E08EBC9070475804F55E84634C30B0455CC5503A61246FEB234A833AC0C0EA
-E7DCA5A5ACE5B0EAEADC492807BE15781401D4FC3BA47E69B112808907BDF1F8
-D7E7FEFCCA01460429C3779305446E0B489643394196F0B74EFEFEF6EBD6CCA2
-787A82F89951C145BD3E84D0091DE3F2FF4B30DACF2A9B256CF2D17D51051227
-D2EEC4B81E29885973E8685E8F6D9DEFB03E58E77ECEE91E833D99BDB1292158
-D37A2202F805E3856A47CD89B3851AFD0C0230DA10DFF1A3D05AED5A093C56CB
-ACF6162C56F39C0171F8EAB7AFBF3476A9C26B5C25C1C2C329B3918F8AC39A25
-F0F873266BE95A35E98773525A70B9DDAD168A930703DE3E6DBBD851178D5908
-CC9A68B2966D12424EB01E04F1DD4F9720D984A1E7890989D126B4AB9AB72FBB
-D3D1A90E6DD97941C9D673976C9E3D63EE82D870B922E0A5282406BB2E4AEA6E
-348A88E24ECFD3F028574A0061C637BD6CE6CE53D161B760C437332DCEB939D7
-E7B820E4A35A462F9A48389111920C293DE0F129202F22C437778EE114A9913B
-5CF32F9DD78DA38783A240B39BAA0DEE1203EA69EC659DB8F6E772A710CDC28A
-9AFF9897CD3300045048C7B963A43A6ABA107EF492915B791181ABA49ED58EFB
-EF110116976DD0B0AB3FED5E685A2226ECA937B80DBFCB5DE0D5DAF85B77ECD5
-FA1714275C4A8BAC5A5A96979E85C5DF4950EEE8443F3A0A80803B661422A8C3
-8A74D380CCC0D3DA1D0E9DC31060751C7AD6C1748B33C1950C66EA7FD079499F
-FB290FBC6E17968CF20355D47ABC9211699101970493B7F315F2196413530AF5
-4DD48577F5E6B1D12A1B2E9F5DC804635A831EA65303FA9C2D0E1E31A7C1728F
-C546F15D734944F31BDCBF2313D9DCD40BD0C4DB3F69F686ACDA82DFC326F2AF
-8A08C0DFE1685B32EEBEB6C27FE6CDED95550A213F028A682DB03BC0985B1CF0
-40D144F8050D4FDE19BD00686FCE960E2500FA604023B02C0E315FD71D984E52
-CD16CEC7BC46388AA525F2CA06CC11C5321F6C563DFE38C947D8EFAEAC856DB1
-DBA53CFD1136BA8E408CEBEBB20D7C10EA2CFC9CB8EDEF4E34F411BDF74A7871
-37A4CB9D184C10C1798277EC9BBF272204ACA44673C5931F7BCC62DD693F22F2
-2318A90E11A3C29485C3BC88A995C9AD63259B327B613C91D05F2809099FFF99
-D8D596187B7C7DE7DCB5564578565340F9E3F5B3BBCE299D5FA3C66A4D08F5A3
-15C7862F452B43D6DFA9C4DAEEB2BDEB450A5556742928DDDA517A2AFDF0ED51
-8AB160FD0F8164E7E04DF89725860BC50B7DE75CD5B403724169A121F35CEF1D
-6DA72B2F0D908A56ED0AC64A05F927B24037BEC994D471DB81D6AAC668FCB9A9
-A56653914062F7D3FC78BE6B75880B543F66D2762876569913FD12768FFF146D
-3D24BBBC876DF6A53C75D70000C6F8B019CD762D6D2BC64EE7046D2BD1DBD891
-6399F5E7BD1B5CA301F05EA0C21F6BE7FAB614E82A74FCAAEA3D88FAD9AC3978
-CF58980E544F1430AE39BB1F1A8FAD760AAC08E077FD493FFC345B1CD0CD7559
-7C8AB30819492CD58821A743436B4907099EE5310560CED64BACCD834A969591
-329BDFD8D0A45BFCAA2FA61BF44A0ACCF02A88F7C1518EFE9F928A9BC986FB4A
-DDCF42339888846C0A958558E4A4D4930862995E0C457C44FDBA5AF54232EA09
-CCB32EF02DB3F25063B18D66E383ECBBF85A85EF111588746499DA03C9970D19
-51DA7140B40D36B912F74C56DCD1C78F66D59AC960E3F49F1ECDB9EB91998ACA
-240755AD792C3550D76875B2809A4C2F3E48FB05756EA4F3F667EA789318E4D7
-FAFF08731E38FFF69BFAEFEB46565DBA154719778EB6DCC9009167895CFAED3F
-2DA4A34253674F6E0869C657E06E84FA7CAB672148AC0B3211E1C2CF887CC6F1
-0A0E15FC84DD8D86E568B801FA921CB2D001BA12C560CDA46C0F0BCC7F5DF546
-3D4F5D20E44E185DADDE662E35E49169108062654454A40174B7C253689F7ABD
-7633A7CD423EEEA1A17F62C2EF2A44D2308AA4891A52785A6D4954ACB3E3BA3B
-254BC9114D465D8C85EBC2D288733DF4CEFD70EF64EB2E9A18AED697475EAAC4
-4A98A284AFDCF302A086BE220D465791BD0A7C200082FDD8CA24049815DD7476
-850C6D9DD70137BF5E639068D54DF998631798E11ADD52B4AF3A57E4BEC7408F
-DEAD4E652AB782B1B565473AD9693FEFD84A96AA95700254CE575E3A2BE6E360
-92C1C8D4BECC4F35A09D324F2CB2AA9ABBEB698672A9C024D1076DEC7E37B835
-5DA1936F0E70220FFC51173E563736002C715C886533B445FE7105DE8DB38655
-AD1C8CEC4A80EB75BEFC9A94281EE92478DF3B139FE0411CC169CB0C7FFDEFA7
-16E6609FC71D81D41320D79B45A74A4F209356EBD8B9414816D588107CCD5EAE
-F3766056AF8460426DED6AF02CE100550B2EF2EB26C8BD0E200399B921118EB7
-621526D87926638BA9D807EAC971279C873F4858F1923DAB733F03331887D5F9
-7F0A36FD5400989A589FDC5930B2D15FDEEF68188BCD9417DC2B342DE2919CEC
-2FBAD986F778FA02A83165A31DA9A57E3AD10441E66CDFD0C8263092CB9E649A
-9CC820CC956B81087F7243327D95C2865E5DB05DCF0F94C201E4881823DA13C0
-72C31B97BD861E56EB013341DBD550F4E26FB46E68B2979F07067115577C1C13
-E31AC637BC1DC4BCF192A305F228D00EE0DFA8D51983174A99B2906F453FC77A
-F60BDAE2A0DBD9FA830A1D3EC14640270B91581C302F10863BFC0BB296145F98
-9FD475AC909C05EB7E1298B1EF1B5FEFCA6A10F7291A3407736B94DD38482BFC
-BC3B8AC56E70B3B254A0158C9A8E514EBCD5FD7C4CA088C44936F3548D56451B
-6A8E4347D346C5D9B1339ED7628FB3F89444438A6F80B031BB7626139FADADAC
-FBDCA83F8646F347D140667748A838EDC1A5A8FB2C7F08800F815F04183769F2
-C9A8614A640631A7C61A7DECFB6DE6AAE5162BC566444D0A7E7D1D942007E3EA
-1B158FC1685A7CA3088C34E2E9373452D6E219922A4209D84EF43BDF17C9F261
-5562E28E480C3E6976D2B8F6C346E135083D0C4783EA0AB2F06ACB9C831F90C1
-FBD4D5EC84CB1290E3BE9EA183EE572E68F6E2A914E2A4E5BA2229F29DF6F4C7
-88E776969191017973271452055536701EB8F401C2FB25949DB4473D8A523697
-0F88A5268FC4B1508B790DD61DEAD35A42CCEF8656C7DB92FD0E8BA8F79F7F10
-C8B38FD1CE9F485A094E119D090A4B9A970DA1FE5EFBD0BA6524F5874FA8888A
-FBF530AA22371983BEA0D77B054629AE3B1D1FF5D066CA27EED993B5D2FC4F57
-CF2864A413098141464B56DB6E51F24812B862A31E76CC92960451C36CC00B13
-9F5920D9B9F39CE7EDAD22CDE7A27D234EBF39D91FCFDB87555847CFAD4EE711
-B6DF66F45079F9670A6E5617A2668C234C3057CD3A939FBC128B2114B1FB7AA9
-B63D96F47B2E30221253DCA306EBF64999D666EADE0D3C69BAFFFF35DB41BFA9
-55B54E16C578B1FCF8B383D33D5AFEBC9E2806E12D07493DF78B9C7EFD5B892E
-C8DBBAB6F168A65A785A6A30C500E5A8843514C6A7C8280281DA64D38B960190
-ADFC738837D2BAEEEBAC87A61E459D248ABA66B53745F294DD38B7A505F455DD
-4E2025457233763BADD741A6AF5EC610004DADEE3041E09513598D070C481DAA
-D624237D14F43E861DA1EDF8B2034D610BEFD4C01963AD11FA454B3F4946A0F0
-42B65722FD8F047C1391DF886F27382024403AF6E0E8F5BC7F7E0FA0AD851EC5
-8B4D415F531B5413EA9F060C24EBDCA30444406532F775B0A983E0346CF76872
-5A8FA9A2060757B8791BD90835D9AA27706E1A7A2853ED76BC7CF1E1D7E46F81
-C1042A6C577E8F8ECC4CBB1200E8BA8D2DDA863C0FB287B9885094E17A00836B
-1B3B32CE070892CF4BF0D40D40AA39135AC8CC7CF784E7C306BB248083D8911A
-5A10A67712F1230975578CA03A218ABEC6C76992E339338985C51D624CDE420D
-71E86ED65B2F63D02CE09AA13379EB2B04E64C351EB35037782A4FFA2F5F0154
-CA727CE0A21B90DE53AEC9F87D8FE94470A09FA1313AB0982584449F23388363
-CE4A9DBF75D85A1D1F5EDAD209A8D718FCA14CC99BF55ADB9B165135A47BEE9C
-AAD89CE551B6B91BAF61C685AE30604D3BFD35202914D5B70181299EBD921719
-9E019BDCD82F23D4545481AA010C85B8907DFA2E16CD174A1A77E4B6A9DADFAA
-2EFD4EF91904BA0DC5056449C4BAC3F8CD7275DD7D0B972ED1C5FE49EA6CB007
-21392E91904455353C3665F3152548C4D56B3BB4FACE1AC042AA2099DCC382B3
-AAB4A69DF065017C33BFB2B01D96FCACE327528EEB16DABF2C07F4E938B97D2B
-343240B185316FF749E0F8578E4B89B0496DB399E914266521AE9AA633CB7C56
-FE9F4E1288C1A72CB47764F52D869C9AD9763F672DEB14C6BC8731586361A210
-5DA7CA7C7861EB18AD2ADF5BEF65E752834F806DECC29EEC1EE81A2AF2689146
-BBCEC2180C4C662C8AAAA42A84F483E5B999DD6DFFF5A9A7D501AFD0C993256E
-66988935EECADF7DEDB64377D71956A56861C2050AB7AA808F3206C19516C233
-2640FDF04F402D508AD7A6EA00944F0AAC0E3AD50538C817877E29EF5ACA02A7
-63017E53A286BC31DA51D37ED506940AFABB3BC603DD96D67A342D4517DCA0AB
-F56F65EBCA3B3F4AED09CE3B8A8106CCDD7855709D9BA233A333519F78BD73F3
-C4B98FF9F681D12239D0526A6592721CD7302217D3E0F88E8DDE741C7D887CB3
-F8683808CD4D7D594E4F5A18984CFC74CFF31684526CF7D73112EF8AB3BECF9D
-AE3DA2359EE026B9EA5A762AD3D836212AFCE09B5856AEC23ED8670902AF7C61
-EA98D24DBB2C2045C186C008E569CF06D805BD845AF3E4F870E62CD4E93FD9BA
-DEE4065B16130D777547EA07484BD2A0003B52506D55A71AC6FBB422E14FE0A6
-631E9C0C6F6D003236BD5880315BCBA0F5CD09A267CC5D804258A2034155CFDC
-22D22F952FFCD7C1DB06C532775B794EC0FF59F9314BFB6FA11DE4CB94925ED4
-43B772E01BDBA2B578C4A0D88309A9D6A03D60B5B891B40AEE8E02650A706992
-E81EF07F071E21E7B3BA93F8F65111AFD9D3ECBC2437E25A2037FFBE7C18E66C
-1D374AFB3C0E17937EEEB6E5AE26A52E8C4A11464BA2D688B5FC145996A1DF12
-92A391A4E46BB4BDE8C4564745B2689BF4C5F9E722C50A96B80A376F79C7B7DF
-41DEDBEA2EBD898292CD0622217BB62B038118945B564A1ED87FC14A8841E1C3
-72A335EE1CC6BC4EFE24A44F41E7B32C55A0E313E1BCFD69EBA90A9FF5B8C13D
-6C2C4047D40696E784614EB6CB1BB7FB3D67FE03754D3BE29CD591D01F02B0F8
-B9D811E639297A869FA3CDFDFD1B460148535E30B1B9164B2A2BEFD13036B9E5
-460C68837FD00309214ABBDA2F6B7EBE0069228F5A1CAAF41120237B91EFABD4
-E9C8EC82D76771D8D638FB3140B9FB3BD7040733ABC350C75A9C92ABC8345851
-C661846452D72FD47DCBC0C53E4BB50E6B792B3E462E7F3F43346E38CC2FB2AB
-E3C456D0CD0FFE59EBC284FEB82919F5372298DE9B51B9756F8160272715E91F
-7D7249E3B66449E53DC5285A682B755F51DE544E4932FE019A12BA2DE8E39531
-1B3C526C1502E194CC0671003BCB29C303D4DC033A28942466687C41792EBB29
-1EFFCB4990361E8CBB554DBD6FB14BBDD6DD98E97C10EE1A74D758AE802BD9E8
-9687B528DA0CFDC755FF9EA8F994C88C5E111D457B0DBC7654E4794FC399BB8E
-7B8A7DA51208C746CABF4E4388FCB637D24A6EF93B1707D77E3859085A9E3608
-A85C792884AD60D4416E2F644C11E2C922863AC370B076FD7C5483382A5C2D05
-72BB563BFB485FE41BB8479469A592AF7622082DACEF884768B33072EA301531
-3A54F2374DCC03FB2DFD198A47CEC2AF9C8DF9EE11BBC660B26821A5CDA3E6EE
-79F281F38B622B2E3D1779B7D87A86AC56D6E95D278489F383B53934F0F41BAB
-0225840E0B5691BB5A799654F5F0BC86C4ADA541DAAB343D1001B384470AAAC2
-1726FBE4FC5D7F16E0C73B24ABD88AEFA5F4D993740A44FAE3C2E97650414B91
-FA91E1B5FF940B12A07B51222705712D3031F6A3C52966D9BC1E9A91B8A5CCBE
-E26F06D964FFF18725A018BBFBC3FA205A55AD02A41B57DCD1A67F8AD3EC55F7
-019A2C8B13879858A57A3AB376816E5A84C125BA649F82A3298598E3CFEAE75E
-1F7F54D1DE8C415B62FA025C6C3291CFB87DA982D6E50549C12A9C1000A71761
-5975BFAE48535C4908E42C4608E25DD5C00CBFCB5C982A1A260E4CDBB9537F3A
-AC24871DCB91CF0EF748ED8E2BED39BD923618D03ECC0095A1711DAA720558F1
-2F44AAFC7AEC0242F9146AD375763E17A8ED2C72326608D8074799C67BBE062D
-DF82439F0167E3C1AA9207B642D72C3AF151260C5112EADFF1A43B37104520AD
-9199C6DC3BFEDC0641CC0F677757789FCCE08CCDACB9C7713070557551A53D81
-1BF6B50545CBFA1ACA5E1AACC651440EAC6C2F39CECB884D6506E0BF7BAA9768
-13AA548329431C5DF5E31CAB04CBA084DDDD98F21CBE87BFB0F7813F9E061416
-E666E264A94A76F514418F3B43458AD066263391C2C8D21DE06AEBC67EA91615
-304EA84AD69785408D83C5ABB9706B17D2EF42E00E4ACD07443F27B784FFCE81
-68D4F0F3DEE3EC94AA2FA303EC31FE357267B2098DFC1C6468641FBAAC436196
-8C409BE2EBB7B1C9FD3CD0E6438A6E94D245596FB9E4568CFA945AD3500F7D6E
-20B074B38CF5BCE69A503934C671C81803BBEA06D8F360D441084D6288F9C0AB
-8305293CB8F342F3C589AFE082D4CA2B605BB131A401429271B1C80672A1F37D
-196F4333D9086B8954C5B5F8A16AAF68C76AC5C0B9CE65CA1BA715F0B053BF02
-EEC79406E2C5143A9AD69CA6E358AC636CFF2DF700E15E83CA0C6EEB77C3E62C
-080706926BE171E07ABD4BC16E2EA0D9DFF580C90D478A6F9829860753D47B85
-6D08505132D659E524C7DD22C60EE3000D2479ABAAD132F0E4FC239350FC53C0
-9F4725EC06512093F7A2E6F15DBFBD4A29D773B9901D15DB0EE6EA73692F55A2
-10FCD66B25694E77285161FAB2282DFDECDB983D19448048C0D3C11F9BA88E46
-A938048A1C07572142D341D29E3EE6D9C84D89E33B9588DE28DD8EF02495DA6C
-50C6F709CB5BF02D98A603DF91DCB72CC97EDCC976C6037B8882E19303764ED7
-D4D9A3C890102638A8A81873858E29377F82D99DAC7067DFDEEA9A41EFD041A7
-9006681BD107D26534D5025CFBC3AE5EAD6ED7CD73202FD0C19795290CF76984
-CFE283FDB44E9C1D4792CBE073332E3EB3ABC36B443875BBC38CCC07E6927D34
-BB7FA1AC8BADDDE59B179D5B69C1C25F2032963E50CCD2712A0823ACF0FBD85D
-04E516E396A00A08EE1EF678AD8BBDCDC843A19A11DFB2A696520136839DDFDD
-E4E3CAF21914FB51E6D29FCCC0917C4DABB5F09FC722432CB6B5FF4A7915BE9A
-79DA41680211BAEA2424D4E3877C1AF7948DB6DC599A9B76F8AA97A08BDE3A51
-50F0DF9F0C93A26D04B6F8621EC6FC12CBBE55772CA9E8F4924778E35C7A90C4
-DD23EA49A1917E29A57312ACAB38432466281F6BE8F8AE166FA6FB296D28ABD5
-3472889B9BD60EC474876B3BC2050093FE68777362F21A2B996A4EBC86DDB90B
-FF01BD9D9572ED8C874CD9B5D847598E77E97578F2B194B22E7E7B58490AD6F5
-DE58903DC4F4CF2E030696794EBBFBF26FAA5E987BA89CF48A7885F70BFF2E3A
-764BC941BA2CDC13D11CB7CDA4D75BDAEFAFBA74776A091A8B5C0813F5B866ED
-1112648840F5649F28672CD3871F12DADC5A9EF64661A598F58D1AACA6B454A0
-A8124E5DB346A8CAF10FE9FDF27E8236BB8CEEEFDE41403653493A70AD0526B8
-E4B27D6F336A204773399DEA3AC3764F8018433F24B742B361412157C459656A
-3F02E6D2ABA47257C2FFCB2E995BE54EA462C6AF4BDCDACF20B99EF84E7B7893
-6A41219E3887862B3B1A665D8B569A64643B9D46E9206483BF750F233A28C328
-61A574D884DAE594FD821E3C5088C0D426571F37602B05A4DD325588CABC8E9D
-537348D510B36730FC02819EA9D16C095F79CCAC6557D612461E06C125436B04
-EAF3818692A5027F849944EAC60A0B876E4F887AD355E1F053D9B7F3A3721809
-1C9B890F9F76FECAF2D0213972F5E854760FF0EB984971A83E912401B7E8A74A
-1DB586E582846B79C0EA8B86F2264E8A855A345BCD69E68BF402DD75D7B09D06
-AD39E0C3AABDD237F65ADE2A3EAF85EAE56443CBE532C2D350DDE786E23D2523
-95FFD6DD5DC45F833F9FB9A9BBC689BC4E895AB203E74CEF2D79E6EA56A5575F
-ACC1778A021BEB2A5434E841049529D075B689D6C2E100C26D749DFB422E9A29
-39706B5E1CCB15FE881CA79EC7F4FBF8DC894852A01535F217EBA1E5B426E73B
-F216ABD01DFE485D01B75B1F184B94886CC6D3BAC121D354D2728BC04A572B40
-C871448E60D68F282F9CB843757AEA34FE295D77EBF4B6B2D06E6A0906C86827
-B784EB962364120E9E05A266B4802B4DFFA1F4A0D2B4CB1EEC19B40EA8DC7C1A
-EFC27FF75A9D85BC7D644AD32A840608842DB95938B5193BAAC5B11FD4DBA606
-18ACB6BCEEB65D81F5CE26CAAB9BF5099B206E3806E6E7DD2CE0DF830BB7EEDC
-2599C356AB180E21ED848F8B67A2C6C4CDA2DC3E1275F4ED395867EA1C8401F2
-100DC886CC4055213C45B885ABDD5AA73137BC640FC907F08162D3A74F94FE2F
-1EF83DE6BE326DC4857F702E4E34A173766DD04E4FDEA70612A25B0FA009F296
-AEFDAD0CBA0B954D466E784D82C7646B96A7D056E66D1A0A53A496D57C725E12
-355B5BCA2C362B021B4AE1D9033615F8E371022082A7222F2E3BAE0102440DC8
-BFE7ECEF23016F00D49F5D70B1D0F2D682C6D721DF3CE151E4DB12A6FBE7893F
-4835FC32C4FCA08243A3346E4DE790EF3E59863B600209A0C29E849D15516491
-0EF1B77DAD20380F716CE5A4ADBEE9E6876880C47E0F705F6106ADBC22CE7E2A
-2F2250245853563691AAADE6D6EB426B33172FCEF257EA17D6895818A915D4E9
-D37C9ABDC474582F343D14D89EBEDCCB411A8D78A97BA9961A1C12833048FEFA
-A34D7EEBEBFA510383ADEAD76F173852D457248C5570D96FEC7373161DE42FA6
-FE4285C9B5FDD1096B64009EFF8552DF1BF3530315D75AC47B91BA5D18C121A7
-B23FA326CF66CE881AED6CC39250EF04B8CBB6D9BE41C30C54804105D623F035
-963CB66BDBB934D96E8C88FF31B44DD5E1DEADCF558F297024D1083D76FCD4D1
-FEB4D6E37E6BBFE61BC57B6C53EDD5E3062F4ED3A3E2F7FDC3D5E7683405660F
-B185997053FBB39536386B41CA82429613125A6FB9D97C0921278801B7A1A024
-6EBF6CC952EA47AB3BFE21FF39A242B601A8EFFDE9BD013079E94F38EC522D95
-A028FA8EE869EC6F205CD56E803E8B71D3027C95EDE133D1824A67E33E4EE943
-FCE174267837732A1FCB4F4E047AA340CA16D656D58A3C8CF00E543B4A651D40
-D19953915CC1573F92CBB861E4D66D782DB20EC203BC2E6B21F4F92A7CBEBDD7
-8F43CB3E8B6EF199DFFF945B8A492F9E1C6FBCF4E98387AB610CAFFD700AE3CE
-AECE6F8646724B74170764C548BD365F7E94F8CEA7A237490A88979A63D554A5
-CE853BD5AD24173E05FE407FBAAE3C064B99964D8DFA6EDBFB1C7AD1DA79AB85
-FE3B5B3D71414BD5A1FD3CEC3B4124E47B8FC3BD78D28AF2DBBFBDBC5F3C7EBD
-F2CE62BDCFDEE3B25B688D76707E8DEBA532F9F8391C6974BF0D57B4B6025F58
-B32971047F3CFF9C15E7AFEC953DFDA82B57DED07FCD9A6040ABDF23C3ED23DF
-52D32CF9094FC0F739DF0D2EA11A09100FEDDB5D4C0B3924CE259C7179412839
-4484B01A870A08B07CC7C8B586F2097828122D1FB186ED16B267E1B050CB7E36
-6F0D0F2BE0CC1A124C626251F6A4C44824E768E2AAB65C1FC0A1E06679DE0526
-60A1DD8DC114F2BA3C8BF6FB77426BD7AC50C136970FCEF17A77CB14ED54EEED
-0597BA5FFF3929570DFACC87C27EC2A9DB720527093BFB90F7595918C4A72F3B
-3252E9129299080EF38D56A67FBA6B9F057A47140BF2FF882355D0E9CC029B62
-B18097ACAB41ACB815A0FFD7C48BDA41E5239DEA54B528A2261768D0C2A9B03D
-EDB6D92B68050A989D73C4BC029769E9A64BDE03BFCF13C714DD04320BC41AFF
-200D33D9FE1CB42623EF64D3780162C65889386C5EB5172D3E8A95B25CEA017C
-F711E12A66644E4B66F3A139544C54B4F9020E330D4FF3B92084C2CA7D147746
-DD71DB602A89467CA9E138856AC428B3635C910F96AE34F5A0B513F5EB0ACA2C
-D2F6F7686F45736C4C812A80BDE034923ED067D117238C1FCF92CA6715BF244B
-04D7692A05
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMMI7
-%!PS-AdobeFont-1.1: CMMI7 1.100
-%%CreationDate: 1996 Jul 23 07:53:53
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI7) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI7 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 76 /L put
-dup 79 /O put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 101 /e put
-dup 102 /f put
-dup 105 /i put
-dup 108 /l put
-dup 110 /n put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-readonly def
-/FontBBox{0 -250 1171 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D77639DF1232A4D6233A9CAF69B151DFD33F
-C0962EAC6E3EBFB8AD256A3C654EAAF9A50C51BC6FA90B61B60401C235AFAB7B
-B078D20B4B8A6D7F0300CF694E6956FF9C29C84FCC5C9E8890AA56B1BC60E868
-DA8488AC4435E6B5CE34EA88E904D5C978514D7E476BF8971D419363125D4811
-4D886EDDDCDDA8A6B0FDA5CF0603EA9FA5D4393BEBB26E1AB11C2D74FFA6FEE3
-FAFBC6F05B801C1C3276B11080F5023902B56593F3F6B1F37997038F36B9E3AB
-76C2E97E1F492D27A8E99F3E947A47166D0D0D063E4E6A9B535DC9F1BED129C5
-123775D5D68787A58C93009FD5DA55B19511B95168C83429BD2D878207C39770
-012318EA7AA39900C97B9D3859E3D0B04750B8390BF1F1BC29DC22BCAD50ECC6
-A3C633D0937A59E859E5185AF9F56704708D5F1C50F78F43DFAC43C4E7DC9413
-44CEFE43279AFD3C167C942889A352F2FF806C2FF8B3EB4908D50778AA58CFFC
-4D1B14597A06A994ED8414BBE8B26E74D49F6CF54176B7297CDA112A69518050
-01337CBA5478EB984CDD22020DAED9CA8311C33FBCC84177F5CE870E709FC608
-D28B3A7208EFF72988C136142CE79B4E9C7B3FE588E9824ABC6F04D141E589B3
-914A73A42801305439862414F893D5B6C327A7EE2730DEDE6A1597B09C258F05
-261BC634F64C9F8477CD51634BA648FC70F659C90DC042C0D6B68CD1DF36D615
-24F362B85A58D65A8E6DFD583EF9A79A428F2390A0B5398EEB78F4B5A89D9AD2
-A517E0361749554ABD6547072398FFDD863E40501C316F28FDDF8B550FF8D663
-9843D0BEA42289F85BD844891DB42EC7C51229D33EE7E83B1290404C799B8E8C
-889787CDC2B7473D4BEE78E00E265ADB7C0CEA8499FFD6216BF93D037C46264E
-AC4CB4008BBFAA66772352E4EFEB86DB16C78779B78B6475094B9E88EF8696A4
-1F68154AA757BA4B2557DADA0652E1F8872DC24DB43F18EECEAF6BD4CB7283AC
-689599B06C56B323D3A159E8020FFAA681FFA5129E9F5F8636BB23939E0ED812
-E8F614F259F766DDC177A0A446B6C1DA735E428424C7A4D7E506656391F620DE
-75F0119BC4DE2AE1C435A6C95E3CB596E05E514DC9A63DB2B9B7C3270CBFE791
-5AEE48E27C863442D4FE5F04C98E04328DA2B0B36E6DA2A89ABF04268C434274
-8F7A738E6BC6A22D5A4B164885CF227E19B0911221545ED8F265FD01C52EAFDB
-DDBB1C44FCB24D04CA40C618808F55A57CD46DC13CDF0F656AD848C1DD44EE1A
-48B98E0EE1E18F3543EB349A9D397D06130E06FC6FB929270DD59646E4E7943F
-A071BCBECFB18D7825792B29CF15891F7B2C66E8663F206BBFF21EE4F4D93185
-B1D93162375AEF337AEE684A06D6B8774B60D3294B0757E3687FBF25370B19FC
-06427436C2A17F3DED1600B83DD5088119BE41C2E1B3D34EE3DC8FC3B5F44F7E
-30F5BB801976DBC5E227AF39C6CE8F36D3E60780EBDAAC01FD6D564D9529E767
-14446290E248E8AF181BB0A32EE9783E619F9D924B9093B879E667E1AECFED2A
-5A6CCFDA2918F1962B4CC2E432B1252179A67CD25C51129F2213801C4362F2D2
-95E940E08A7AE4CEDCF9CBFDF08B5952310A750A2E0876BD9933881E305439DA
-E90BD9FC5AC7B3B7FDBB209891C418DD34CE2C5A2BA8BE7D41758F797B810C7A
-E8D05491FA2533AFB5C853E32DE0A4B29DD8756436358554AAB440256760BA53
-09706EDFE9A0EB27CE296FA1389345BFD52EB891308518D0859928DB814CE2B1
-26E483A6AFDD9E4D5556FF630FB65254575DF8E72DA0AACE0F384C2953FCDD2A
-F029095274FEE0532611A0C5FF0FFC941B58B785E2B722D3E41E3F78741E0109
-F72F32A6E2AA8CCA6C9A0C3979A3CCCB59D63EBE1090CBAC1A40D6F3251235EB
-7356D2E5D7E2ACA608C651C7A4FEFBD2868F52B3DFAE49D39BFF63139D160A85
-C39081657327C22C3A931613C0DD5524D5EECF42FAF9254CB40ED96DF9F96554
-6B3CD165D762C9CDF3FF7CD10ECAF587D12EA668B893D40AEE0F9621398C792D
-40FD0F00D8A2E983019FFBD3B53B692736635BE31E4E16D28D2447F28A73F602
-B96C0744CF60E9BD111E2FF7BC6E683732D05AD405A758410B9EE62F39975E89
-D5833515981AF9D75A37F91FBA72B289ED766AD95E1C7682FC8891709BD3A921
-AFF13477A1FB29DC97E7F229FD2D4572EC85EF947A581EA3BBED9D6538E04EC3
-BC67B4D25AEC5EC8651538FC4E9875788FB08709DD4CBEF57B4C647A0181439C
-21F881B00ECB6452BD46C28F1642E48F3454FBFC87B7F494FC0713ACDD086D95
-A645A13D4AF3720CEB1FF7E28EEF4932F1DCB0F2E1BA5F151E7BE009FE61615D
-95C03441EA772ACFBE326FF905F472FAEA6273A7F037569029F4F6BED81E8EF4
-4A36F0352723435769BC03999083349B5799560280032DC84ED868F1295CA342
-9058E86432E55F40268615C9E2EAF8D698E87F98FE9197E9B1C6A9E4EEB772EC
-C0A7CFB8F790C917FA90D1AF0C4E1F9ABE9DB2380F7AED8E78C1FBE82E76E8B6
-D6237AD859C708BD33A6656B32076B2F1CD2EABFAC4C75A6DA5C69BFEB955040
-63FC2D9548F24EE128B8548565FF74D64C5C6431DD3A693FBCF1BA1CD9FBB95F
-28C97F598055D1D68FDAF79D3EEBFBA12531177C6E18041B478314D8A387891A
-1EEE740345096934257993037FE2CF6574FE9B7E6E5716E9F72F69BE58198311
-7DCEF3B8B1C409523F9B3BFB0D8922DA07EC5DAB9BD03221F553D51A32FBAF1C
-D35CB8AE05E3A93E91323D4EB655953001644487D6F505B449615593508A9766
-31835141CA10ECB75E747B930AC5C0A01D5B932A4C0FA7416E7A0E443B7E60BC
-6FDA8145EED76AF299492A07E6B521F2C54989978C363904A4C48D490A6A2676
-4FD816FFDEC0EDFD4E8F770A953ECF6A111DC0CA0DCCBA7180C8098AAD99BDF1
-D8B2E5140D2808ED4B0588E33158856F2259CC898AFBD5472F49937A73720CA6
-BBEB1E04EE34531C71D5BD41E69A718F0DED1990EF9C3241B29FE9137A950E71
-9B4B8EA3831163FDFBB27C0240F7A10E7BCCBDCD3D6B23ECBEA07620069C3497
-BEB7C63386890FEE54EE60B93B49860B9E67B299365EB5970D6539A105EF1300
-06B77B94688E0E5BA2E5965BC896600F80847B52C80D93344D348C905A4DE156
-1B5091616EE02B5C8F02507DABD7D773602E63E531A9E3EB8A5229262D9C03C1
-8D76CC23BFA16E6931BB95216090891790965A05317BC09D432F10A565838FCA
-AC1C0C5103CBF39ED79AB1EAF2B02C9CD197B49E9643EAD0C865B075C84BF6E2
-F71E10AFFB9F05E56CBEF06A61FB682C7CE803C57A49BD3654AB4326D06BDC53
-2C352F973DA2D82D257A793992DF20D7649EA76961E89CDEF7B07F5B060FD247
-10CCD26CD6B39F0C6EE988557AB7B14F4306F3869AA35AD7C8DC4562AA96F7FE
-217904CC6399ED6C69DF4A6A3B1DF2174B65275315F0F3DC8772AA416F6BC671
-83F649634B7EA172BE5B3D4F39D738BF23B89C8C0C49AE40ECE799024044F696
-80AB7E8B7BA18179B4051399F81B0FE5185C4BE06698AA4AF103853CEA607160
-6B9D6F7D90B9DA42E9644D20DAE6978BA4EDA80F2D146A41F28AE8B08F603B27
-82C9791DBAFED163DBD7F6CCB11A4CBF053FC850C0E932ADCE6AE96AABC6ED33
-29DFDFA6460BBC74D929090376C98ED514BCA0A8BDDDEFB9EF1D1CA91E555E03
-18430E70AE9AC15C7A403420C1274AA80370762EE20DC2FA0FF1B4D07D47780A
-851D8507CF22E1E4EB45AD4F0A52E259265809F5E52DA74E4C8B2A091A142D1E
-A98875CEE6B59219536FFC757FF99D0A6BE8F4A8155C0869156532E390EDFE3C
-A4ECB006E180C7652869EC62457785CEBF03B1A069F97CED823599C15DC60C5F
-9A31F856BD53428DE3BA000C584C95F69E624C78107E2D7540CE0DD1F5588057
-B51843FB65202233DFBEC04DA1E50088BC93C74E9A63E0C5B2BD655C46946F75
-3F173B2233D371C48510A5454554FD4DCE581E24C717910148FC8B09AFE86266
-5F36B88EE1968F1B80934F36AB16BB2B14446DE04393B9C421B088F235EA2672
-95B91992050520CD4B87530C03631C0E784FC40BE9E612F59E8532BE174D9EA3
-42078AA750E32C2C6B81492DCDFDF765AF01826DD0F87B37233F98C716C50709
-6EC70A29A7A50228A5C2A32EBE46FF8D829A186E2FB7EED0B7EC556BE99A4CC5
-A89BBBB64833CD4537CE067AA55FE88D9ACB18FCD9DBDD8C675FC60CD7B7B6E0
-58436002FA04F7D36CFD33EF7484F43EEFD9C129753E38F7EB81E87CB8DCF5B0
-292D90197007A8D86BA9183F6C65BEAA191D1F18D7FF60BA34136CD07405FE75
-C914878505C7C6674C8194ACEE7366914E288157DAE849067722EB9887ABBE38
-B972A6A9912928B6BFACA746A686C9D0C0DC396BCDAF8EED8A8BEFEBFEEF13D5
-94D2EB97F091E27F8105DEC2AB7CD83F753EE1DB8BD2C735A4F7B1EF0B9EE8FD
-3516277C41F83501F17E8F7146768F06129A47C8ED086CAED746F99039BFFC96
-732C4786BCBB294A04001C758FACB42A8BEAD3FB773EE7F9CAB43617B609D65F
-2977E2940349E9199401FF9679B17E2614C1AB13EF7A1088F251E3DC50945881
-2203556EA28F6D300C5F7914F61F94D5BEC53706B9712A1F56DA76F257ED0DE9
-FC1C4D3CAA09A530AB51F339E188D24E009B0D07571A3215A3E994C1AF64103E
-983A771E41987DF9FAADFFDAC86E94EEEDD2D7D27134A1A5EBB0DBEE6282
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMMI10
-%!PS-AdobeFont-1.1: CMMI10 1.100
-%%CreationDate: 1996 Jul 23 07:53:57
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 22 /mu put
-dup 25 /pi put
-dup 58 /period put
-dup 59 /comma put
-dup 60 /less put
-dup 61 /slash put
-dup 62 /greater put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 78 /N put
-dup 79 /O put
-dup 83 /S put
-dup 86 /V put
-dup 102 /f put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 109 /m put
-dup 115 /s put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-readonly def
-/FontBBox{-32 -250 1048 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321
-990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E
-6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB
-DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721
-59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823
-D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF
-8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808
-6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9
-1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE
-03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909
-95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1
-74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2
-3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8
-47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19
-AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8
-42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8
-40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837
-B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53
-9560176676BD77D63B504843E6B9DB3EC18FCC62037E546FF3874549AABEDABC
-7C29E9200B309A37E5F90D7E629987616751F694BBDEBB9DDC5E1D1520FAD1AB
-6061A81FC25FCDE966D02085C3A53F84C246FBE8A58FA92886394F286FA58CED
-ED951A42DCE8BF447D61FE2F2FF6A4D1544543E3D6EBC020A26571EC0F04D6DC
-128C92BF1B54806E3F47D676D778940D71D25D5FBE66F42775D350FCB92E3E69
-C9AE83139BE00D5C85DE103E6E6AD38AEC32C8839AC3AFFB5EA29DB16661D893
-F489E5BEDA53FCE4252AD180FF42AC4F9091C8F454B3EB0AD8DD336A8296F4EF
-5D7F74D7A4A600AE4A43FECF40E57FA23B750214AA97C41202053493D48883E3
-670B0CD75CA74B4A36643C321AF87753D781FEB88B761CE87B1C8E36FAC7020F
-DA1A9ABDD370615B435BB5A3CC658F657DE25E83599A10ABAEBA0A9C6A7E8E99
-E20F2F16AEC10A06349705B3437EC0E9FA18ABA5763082DFB7C2EE4D13D56B24
-58ED6D93727F9A015F483B6E34DE2291E06AE67E4E700763FC9EFFB543D98DA4
-449F2314B1395F4479B977A0226455CD2210ECC972BA2D458AFA84A59127BBDB
-3882CD6E43210CC25E0B9DF80C0BC0811C2C1F232E79B33A44A955F8034814D8
-306E7204C4672D41BE3A3DA1099BAAFF3E1131580821E1A25C7E1D8D846CF37F
-0DEBB92482BB747B022E4CD9515FE413990A9E7A531E4FBD252D422A19C089CC
-543EA2C4E7AC6AF2B7CABE2E4A990850C0EF0BEF20E7A319C3E7ABFDA4F7DD69
-8183F34350A589BE48B20D2C93BDB7CBD3D174B6421A374BFE3C1D9529ABF99C
-DF892672C8D149F6A7D846989762812C669CF165B4BC219E782E3A717FF838AD
-19E15A7ABF0531B1C2AAE85E11C9261B8865766845CC6C2AAE190806FBA0A5D1
-0BDC9734DD842A4D2967E274BF8E46294331E4B9F3C1C5109DA6E84167EC9311
-CD1D7F035729214E9B0C8C2674B14E781F02646EE8858BE6897BC0EF37E95EF5
-641E71A2350007D85301FC811951821EDEE7AC62B228BA9EC6A71F2ABF9F7162
-4435A92685172C7F804B9492DBF6E541C4B582AA83902999F44AA7D12E4F0A2E
-E458BA2F4AD1E52901C4CAC25841C91510546CB2CCE5C7615AFA072981896657
-5EB6E6FC680DF3BAD9C3E115AEF48FAF1F9B8630F65ED6288714C81AD7E93045
-980C15BB7FF2D395EDF891179901CA7E35FE12CDA9E03F30CA527E8BF3BC2E3A
-9CDFA0ACD2BB2D6EAC1F271BC6C46724D59C9B95361077A23E5788BB47C98BDF
-2F6A0E803DE994C7D8ABCE1F0A90B5A041100B2E311903026E1186079ED84698
-C8370D1D53AE3CBBF6D419AE8138644349C3F9AE6ED7097766E0A01B3DCF3170
-44AD83B53C275ADFA86DB31474E6EDF918C01143286BC506D338A9E53DB6BBEB
-A2ECBF589A23968E493B3AED5475690AA6E76B093E24BBF2F7BF44C0B34D160F
-ABD237E27E9CCC922A9C332A460EAEDC3F536D10BC156323E2BB5C124BADAD07
-BE3C7BD414AEB7084BE22A4B61697C3475B1368970E63B4A2ACF2B8D13639EFD
-0FBB25F0E3E0698E45C04572CFDAE8247BD7AAB6CF0AA3DE2EE2900802B60ABE
-D384004E59CEC8F80EC8A27D4595A4FE311A1169F8191B7B47726D2868C5B409
-9FAA85C1749D0E51EF4832E3DAE72632E835396D6121BB78FB8A369EE9E49393
-DD2A76A5FA4EB8C193E0249B76995FD182439AF117A9F625CEDB749A71B6CE70
-BA428DCD1E8EBE20FD0B0608367B7C04E541C13A9171AE694EB655396AC0E39E
-1F8FFC45F178CE2E8EE5028B8BA6724927F8EEFCE517E42CD06BA66554E08083
-4A17DC0102781607668B2E8C3DB8A4F2279803C7BBCD60B8F589389C6B3B427C
-3CE8D655DDAC52CB0BEBAE00C776D5CD163B217E6FF27AEB2176919BA19FAEA5
-D49CA5AD218523C853375DE37DBB3608F05689600251369E7C02B9A626ED1D37
-87DBE2D65D38FA0AA6EDE4A7C66FF9BCD94B9FFFA414704D5C938675F1EBB1F6
-3F3E08B07E7C6D3B1A81BF920F02D8015D94B57DB694E61026D36BC3CB77B1A4
-77943FA55F1B832A9C72B07AF07B16262F696E2F5CD1FCB6D3866A2A6FCBAD34
-B3FBF40699E0352C66449BAF9D87DCA0F17F390A820285B4DA315F9436A8DD2F
-168A1A6757EB8B0C1628F1BAF805950DF41125D5074081B15410FDBDFA22E00E
-4825B1CC2D75E8ADC3ECDC89E23892EB0DE9D59231170BF3F9E45D175B203684
-F6FD58E0BAB317493FA9567EFF853085BE3EF14B66E95F582B01170CC4D6CFD0
-45090A6D96D98808FE3D388B4E1790C93BC88B8CB2A2CED40118CB2CA728DF3B
-85393866457EF436DD5548E35E0B5866E0403D8FF02E894A7A70A730CF245CB4
-AC7DB2B430C48DC56968BF2609A1CF08CC5CB2303D8B2D92A2BCC9278FBBCCBE
-54E6B76265C4E057566B658931AEC8B27C7E97C9FEE83012A644E5EA613F9AE7
-00CC8B7F4031F6FC83CBF8DFB27971032E56DF3B8E05D8B55C168A2099CDC4FF
-0A6906937376D1400E2A11B76B2E0C8127504EFF5D8812A2648695D72923E9D0
-BE231B8F6948F4FDD1D8C7D798073F44580C21EA66BCBB0D73AC156454D34907
-2D6C1830C2B97C0FBD8796545D7285C897442DD38E0E6EBED608DC787FAE717D
-23918786F642FA7534DAAD8D841D0DDDB048C4D9AA0007710D70F5376BE2C14A
-C7681A68E732B01C899614F3CBC2346566FB71F5F3D83B21C64CE02B4CC4AC9D
-C531E77C84F61722C493D7AAC08B4D0AF596C9381445CD34ED923483D687CA09
-001C76C4D2C5777F1EB1BFB6828F0BDE391C55ECB3393AE4E035EA9BA3E0015F
-5760BD49C1734F924160FEF926F171DF3F4413C2C2BCD47CA1134CF44B0EFBE1
-803A120820588DD5AFA577D126863843E49EF4BD6090651EBFAA29E4151F00F1
-DA63730AEBEFDEF5C574887F7DE4DA9EB571E9F1CDDCDC11890871064026D2D3
-F1B605A56C5ADCD8557993BD360E16D9C85EFE54438F232C023FCB84AED05215
-563D48BB23155C3EF1E6BDA95E46606ADA0162C19DEEF189645181F3BCB5A262
-EC91D182BCFAA6C11677A792A5B6C9DF910CA85FC6EB6EE08CC6D8632AC9EA70
-C67769456542E96635D83E65341AAE511D7025D9C9DF793E14540AB28E638E40
-BC4A8019EB7FF97B58211377C18E732B793819D55540A01D69344567C723B975
-9934F575977D1F288A8D645BCA5772615B56618C86D2ACAB57E8A32CD6BE9095
-7C0A9FE793028E9156E418B4619FF8D987580A79C37095F60F2E2F332CAD6D7D
-4AA75964FC7D060A0CB0E1E2D244233C176F3FA842B9B0D32B759B22C056CB6B
-940CEBE98E99A3F69D8BD0B8615AE0B27156456FC85F3C0B6E9BB4A72C469475
-A1AD2844B1F8FDECD621A9D7FD4E8E37D22DF2522B9BF389FC76B17CBD243C1D
-415ADD7D4A7A30FF556837574DB098CDA4DFAFC71625E03F20789A3C8A8B8882
-BB7AD3449D26A2D3CD08FDAEC6697EFB9C3381EE25494446DC7B0B5B9F129363
-CE0F3D0B817F9EDC2908A6D918F32330689F31785B701F0E5C98A0122FC581BD
-E71AA9D0940D4016A05C8662FDF1C65A4A22AD2AF4AFCBABAE5F8E0EE5F4640D
-1DC58133FE62D38D84C6F2DA83C10A32CAA0A2734B30227DE5E0E654E58CEA34
-F39A4E9433452559323B0D1EF7CBD9D524F48CC01554BE590EB283EB36E98DD6
-38004D516BD7C3C66AAEEB9D934834F618DA833D1E52CF2E8B1EB35C24BE9AE7
-58415CEE5FF8F25F897737D1EC5F9E20613FAEE5FF81780607F7B0B2E1424083
-6961EA7A8106AC710F2A021050DFE7022637B71895DD18AF1DC6ECB616D3CB82
-D1A1D297B68F5E55BA28EDEFB64620B95BE1221F192877DE691A19250A15FA5F
-07CC57D0F9CE9DB6042FF6F33BBB18E3318C3F0AE36E12EC57B0AB7FFA829AB9
-D1FFDC0FAA493A02A40624D40853920F349558A08FC832C83EAF8C04486F4908
-FE59359EAA8097118AFC9BEC2A8B4BB81C168172310A8F67A6AA9D297C45F3B0
-234544A739152D2B71B5E7E5A02625022D6B6F35014F07CE2F1879304D74891C
-CD3366967897749C3BC21D25CA5DDB6D25241980F453FE03B3CA2B26353F1341
-5B96207836015DE2403524E469A9FDB895F7EE37697E5075947027C3C55E914E
-4EF2B76EB8C0F7F4C43C2984E0E24CA103C64CCC93D2690E2DB4AE5078ADBC9A
-695F466082E09A2DC5B2E7F4B166490744C72DCA2617E7608C84328832BF7614
-DDDD369A04FF194BD3F1E44F68043EA5041C99D8559A908DD4243B5E7D3A2BE1
-DB5D560FEEA32E72E087FC688F04C84179EBE29353D65CC810FE2B2B47BF112E
-B2A63768FB38EDC4730398975FA1EAED7F51336F332A6D438C34B7CBF8346D8C
-FCC5392D1F7B1EB5B18632A9F92E6D92650559CF209C6266AEEFCAA1FC27265B
-9A32961A5AF55412F68318C1B082DD53AF70F77F8AD0AAF6ECD66BE4A60A59A2
-4FDBD7C0187A7E3568BA43D804FCE0B13D6CCBC26DE7D641085F47B53442124F
-76FCA95268291208FCA5E264C0D5E064D34831BD0184FD40D10F9ECF427AAB08
-F9DDD9249844C0921714687E5EE0A8B840E1D4F11783A70AC58CB32C0F55073B
-6C4025F515C08DEE9F066E73A805C1B31BD4B6C9CE63A23B34CF2391EDFD5B53
-3B524D7D5B9DEDFA2BFE15911AC09030E5E040A73F6EB4E28907E4924EE33E9D
-67B1282C226C1F3893E1B9A48F652E942B0073093B85524A1FAE3C0BD4357CEA
-48441B4FC4707DE9AC9F102EF340F949D4276CF8A2602310D90358D2FBDFA5A1
-E0AE476F3CEB84E6812231A2DA8B98283BD6E4D7BEB0A79ECC4666C3D25466A9
-6A0200083653C063AC8EA9E1DC92427BF04E19D107E002C4F03C1A4C6467C255
-CD8B8DF2E0A0D010BF7BE9D8A4F1BA862E5FFB7A4CB2CC2E065306341A02DE9A
-1F38478D47C38A07AEE89560670D44CC8C19DC25690145A4EE465B12604A8A96
-4CC01E2B5D8BE39B0AA5991B876A0619F6E3BB3F712293B5A7C785586DBB2204
-4C1A7763165AF3B057D61D10C391053ED6E0655C076C5E2B4F6F01A712C56AA0
-BF1E786DF7F8BE640C94EBA89DCB3B341C61C02DB5535EF2773BEB75D3D8753E
-D2F5893453AA90A829D4C3F3D66B0DC653F3587811E8B5F9E62E81D0C6DE4CA5
-38AA2BC800C838B7D0BDB0E679BBF5F6249F904485BF07B47BCA9B349ADDF151
-AD448E539A1EBBE6F9A7DC484F00EF663C1DD47B8EC13B53CF1604F594C0FDCF
-3739D23A0FEF264FE443D9D4EDDBA4BE0DC73A56B62AC633354F23CEEC0C7E76
-A4951DDDA23FD78563A6C3400E275BBC290C15C6B755679A86921E47CEBADB1A
-47C3DEC5644D0BA3CC6BFC1D204FFDF9D0573620DE5EE074833CE42D21A52147
-69B9262B85EF9D36FF0B37D3DDD67D79433BE3DC79CF95C6AAF3234837D86D9C
-B7CF7D18DB3899D57ED5736565B6E33496953C443000960655860625661E415A
-D09301BE581E6F2AF9EB34C045478CC3B703B8C6E31A60D8BF3698CF01C33641
-49517767897309D558F48E8284B5A954A3291155B752BFFBDF0F564152072378
-B4B7BDB965577C5BDD25C8CDB9CE4FD5A3B5D44A2765BDFEA71A1D506709CFBA
-A7066CFC5A1480E46D12CCCABE567214C83EE3E4F7FB010D594131E4ED9842C5
-06179CA41FD6637EB013AF1263EC14EDEC5EC9235501C54C2DC51F757CE1336F
-C5097BF6C5FF8AE522A9E4F94179F7426A846B37C50606454AF09C0ECB26A781
-EF074683986B10B9238CCC9B92973BF7105FCFAE3E5DE815F907395B0251D481
-D1BBAE5BFDD69470B77D078DEDFD90577FAA7CB18551E154B8489007C516C489
-B82D235086DC907121AE074202EE7EA12DC2F58ACFEDFDAFC024BD98DE725E10
-905BF7081EFFC29F697D495428AF568E303D813B1AAB432C1284DE7EFAE7C819
-62155860FB47412959690E95EDA37376891462D8FBC99533F032E654B88046C9
-31354A02F8E238A6470C451F2045132FB49FF35282BB1EF520D7BEEA0B37AA28
-146DE26218C80EB65CA25EF425A340DC5AE9066892EAA0969BB3986EE81EB7CC
-712814459F1A272C9F9F8801969D330135BA9FB83B167CEAB6EC1BC95F3546B3
-89AF2A2CFC8702866A9F78AD406C804401C327A0550F386F399BEF92C2B18DDF
-BAEDD788FEE1F4BC0BDF65743BD4EE56B0E91A7014C06CD1DEE074C0FC57BDC4
-41BE0F2CA1861F629F83BFDF53C5FCE7F6F13EB4E81A877ECEB34AEA48289ABF
-2DBC2C89624035B7335112D903D2AF5A0F9A78642C963B4A006165E44E4A8C65
-C94B90856ABF2658C6A6E7BE117A7380DC19B35DA4C4DC5FAFCA065CB10772FA
-97DC5D2BC9B02EB192855CF6346D2CBF56569B510A7CFC126BB3FD2B00D7ED86
-2C667F38E300894BD29E442A3E145F340A4E565422AEBA88CB10B571EC4F8D93
-CE7E56B0F12EFEECBDE78BAF8106894DCC9D00EA8A1E7243E7719278BAD83B4D
-D5B0A518BF385162CC3FC6DA8CFCEF4F3814A115EC0B9524FE587EF45EFE7916
-BAD6A1D40CFE8F0428DABD7DD4651B170CD8F9C6ADDE78A57B2835B39AA9412A
-0064F067D77D9E97BCCEE5A30FFDFC49591DE7DB034872A74F0D296AFDBCF69B
-0BDBCE3C8B502B665D8F786D265BD2A64AFA21364BD536920DD1644B0130D18E
-AB26CBE9D91C85BCA872FAF3DAA8749E9C5477E6BE78C6DE49F5E7E105385E1D
-7C2632D0F2DD0E9BE581947E27CBDA5716F38FB6AE65837E6AEE83959A5C63CB
-2D5B00E98189E14999F753C771AFECDCAA4A37882F9F724BE41EC797D13FF4E4
-A296888603851EA53FF59E5FC73EAC1D4E80B91AB149077527408B622EB5A55B
-042D6C7FF304158F56B85C02FC4697FB320AA0D721A7E0934557AADBBBB1A51E
-DA1297DB496716BFEF4D01DA8354BE929AF8644300B0202FEE0F7E609814E5EC
-ED8A68408949A9914AA90579B0DDA8CA648417983CCD59F9203A528091C0EDEC
-696FD08E4D84F336B1F64C480C29CB39B3F1A04A086618B23C04837A1EE3FB3D
-E9530E0FE6334867D9B5371CA88E41731A00590E510169B4FCD90767200B658D
-15C5FC3D43B8AA7DBC75E1B3D86F7B9885A66612AA4BF2FBE5913312B97D06AD
-2EB0E48F22D0C2C3E2EE6F8D1085F0DB844EFDD13C512EFC4F739C91199D78E0
-5CF3110CC73662A718FAEA5F8FAAE845D9F0FFD4EC5541217F1E2CCCC46A639B
-A28F3AAD94B4B6B613DC781ADCB970566D06888C24738248EFA261BC122E2B12
-A00282328D52
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMSY9
-%!PS-AdobeFont-1.1: CMSY9 1.0
-%%CreationDate: 1991 Aug 15 07:22:27
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY9) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY9 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /minus put
-dup 3 /asteriskmath put
-readonly def
-/FontBBox{-30 -958 1146 777}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A
-27D1663E0B62F461F6E40A5D6676D0037D33F24E2FAC2B0009AD3C8350CDF8CC
-65BCA87979C36D14CB552E9A985E48BE4E88ECA16DF418749AF04FDD2B0E1380
-D281BB2476BB45FF30946B247DFD7F57305FA87E50CA338121C71CDFDF927A9C
-77FF14CB4A1D6D80356FB1171ED38C37702350497B44E42CE31DB2F493807DAA
-15B887C671199A54C4C1294BC520F5538C15556BC43C9F62342B121C6DCD6C5F
-491DA47FF360201EE21C08A781ED0589A6DF91B99FE118B9B29E4F068672E52F
-1A06C514D91C4C937D4E642503392B1CD1BF5AF0BCA28EBD840AD76CC39AD7AA
-CF2C057D436A245217829DB786A3D592C0F5A073E44D137405B0D44F7D7356F1
-DFE3D933072E0CA836B5B72B1DDEB8FF86D5F9A2AFDEC789B2FBDAC307F2DBF7
-2B5BE20870A423F85DAC7075769E74EC93D759E9095E4C1FA2D5D8FCE0EB3586
-E193EE511DC1B950972544335EA5B46B3AF5B3FA5B7922DDAEFC5DB52B22CBCA
-7C8ACA790FBE3B57A89D10E84DA86BCA85AD169F0B7F8F93B228EF212069866B
-6D930B7FE660F87BB45A1DFF541F6B8926AFC7FA90E81B7628D4273B10474731
-4F5D42B1C5EEE258EF4C5255BAE05301CF5DA133FDD927D3065ADC77D0187C41
-7F0DC217781C1D37053C2D43C838597E76AB194348E78C59ED1AF4300B3885C2
-3408811AEC8C98E7E7E2E12CECEA0E666C993A48BE5CA6A23524B15433779571
-56CADB29D1963EB1AFE4EDDD12CC64264A6D12E624DC132B00CD3565784EC293
-83B0A827CD6D16BDDE351C14092435A687A98FC4599C6B712CD5809D8A8FB171
-BB2694D50BF5C52E068A58F907F702769A98ED6AA915DA9E56620FC819AF54A0
-30C2B7541C94336DC23F290F8A3C4B37E2C4513CACF349
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMMI9
-%!PS-AdobeFont-1.1: CMMI9 1.100
-%%CreationDate: 1996 Jul 23 07:53:55
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI9) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI9 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 58 /period put
-readonly def
-/FontBBox{-29 -250 1075 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9E394A533A081C36D6F5CA5FED4F9AC9ADE41E04F9FC52E758C9F45A92BED935
-86F9CFDB57732045913A6422AD4206418610C81D882EE493DE9523CC1BFE1505
-DD1390B19BC1947A01B93BC668BE9B2A0E69A968554239B88C00AF9FBDF09CCD
-67D3B2094C11A04762FE8CC1E91D020A28B3C122D24BEAACF82313F4604F2FEF
-6E176D730A879BE45DD0D4996EF0247AEB1CA0AB08FF374D99F06D47B36F9554
-FAD9A2D3CE451B7791C3709D8A1DDDEFBD840C1B42AB824D5A0DFF0E0F15B0B7
-22AEEB877FF489581DA6FA8DA64944555101EB16F7AB0B717E148B7B98D8DBFD
-730C52937E226545CF8DC3E07C5BA30739BAFCD0F2B44275A6D503F582C0FB4F
-449963D0AD2FAFDE33BA3D77BCA9D1DF878DDAFCA2E22CC4BACD542B282164C7
-97C2BDE318AF9D501CA21F6E662E7AAB75A5F24D2C182E598D175D44E88AB19A
-E7CD59584F95B389183EE21B525BF52A3F23C0FE5383A5565A19361D716F508C
-AAB78411CA5A4D27552CC1C435760D5A89D535B71C593E755C616661363308DA
-A683F54ED0C23FB2C225A008392B0B719F66F11A946A090B7C00B662A3C69599
-B4ECB0CC70C85C4BBBF207E0026F6C7A19F2ACFB7A60804FC98A4BFFD7BFFF2B
-9529E6D9D4238002BBC255BC62959D6F3381FE06E0621B879D5FE5B541D45A1E
-759A6E7DC32B1D1632368D09A97039DF255B6492B1B2B7E2C1434E8306ECA7D3
-5A79B6D614B4979F10988BC76ED53A5F45315CD7DA216221F842FD0F3E050DD2
-BAC23C984D506D8F7D614BCB6B244F5F41321549BB0BD041FBF3053307168680
-3435E9C9445A59A7C666418C4F2512C32058B1CE1EA46C7839C6E372F6CC60AE
-2CF46DD2F130B532DE8ECD42D9204500E413799E298CF6426F28D23BB7216BEA
-1A618B3ECC61B44DDEF0BB22D640B47C09AC0DF378CE68FC9CD88BDAE9ED89CB
-431A5CF9C3E9528FEE7A9936C2B1CF7B38DD2B95773F0EA0051607BE1B0B3588
-A8B907A5EF011B4622C5093A7B107DD1EED6FEE9536DECF1CC96E65373D0F433
-30AE3C094654ABF4698C07F8C74E71D023DFD242EE83B1306786124DD8C6BFA7
-801E66CB944BE7EBCB3FE803EC97067AF7AFC8A4E9AC9D11
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMSY8
-%!PS-AdobeFont-1.1: CMSY8 1.0
-%%CreationDate: 1991 Aug 15 07:22:10
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /minus put
-dup 14 /openbullet put
-readonly def
-/FontBBox{-30 -955 1185 779}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFBB2A7C1B5D8E7E8AA0
-5B10EA43D6A8ED61AF5B23D49920D8F79DAB6A59062134D84AC0100187A6CD1F
-80F5DDD9D222ACB1C23326A7656A635C4A241CCD32CBFDF8363206B8AA36E107
-1477F5496111E055C7491002AFF272E46ECC46422F0380D093284870022523FB
-DA1716CC4F2E2CCAD5F173FCBE6EDDB874AD255CD5E5C0F86214393FCB5F5C20
-9C3C2BB5886E36FC3CCC21483C3AC193485A46E9D22BD7201894E4D45ADD9BF1
-CC5CF6A5010B5654AC0BE0DA903DB563B13840BA3015F72E51E3BC80156388BA
-F83C7D393392BCBC227771CDCB976E93302530FA3F4BEF341997D4302A48384A
-CEFFC1559462EA5F60DC05245E8499D8E61397B2C094CEED1AF26EE15A837209
-ECE64FEF41ABE8DDA7BE1F351CF14E07BA8FD40CEFBFC3CE7B9D4912D6FE752D
-9CF163084E688DDCC4AA8920DB579C3683D160EFA6B40388374D5A3649B3C34C
-15DA4DE3AB03095AA746523B99CE6A49ECD5C69F7A4B8E9FCB76807B31D0FAB6
-D9247627402D29D82CA6688DCCAA9CF05CE9D363F1AD1BCDB7E888F07E35D4EA
-3C1B0A9C7C60CE8D1BD0E5B5E4200E6B549131874AE8FE573C1F57C1F020F041
-87F10CCEE6A4AD99BF08C3CD0AA51C97ECE3D78D121F56F0160334E923527791
-79A7DD4CAB8E8986E613DA9B9E1F235F7F2D1C458AD399FA743ABB240D367130
-DC3A912FEBEDA1644188E68ABD6B93EB50111B12D9D6BFC93AEF44588A310392
-171E75C2911C242B8E764603ADF21C9D12BDB1
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTT10
-%!PS-AdobeFont-1.1: CMTT10 1.00B
-%%CreationDate: 1992 Apr 26 10:42:42
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 33 /exclam put
-dup 34 /quotedbl put
-dup 35 /numbersign put
-dup 37 /percent put
-dup 38 /ampersand put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 42 /asterisk put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-dup 58 /colon put
-dup 59 /semicolon put
-dup 60 /less put
-dup 61 /equal put
-dup 62 /greater put
-dup 63 /question put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 89 /Y put
-dup 90 /Z put
-dup 91 /bracketleft put
-dup 92 /backslash put
-dup 93 /bracketright put
-dup 94 /asciicircum put
-dup 95 /underscore put
-dup 96 /quoteleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 123 /braceleft put
-dup 124 /bar put
-dup 125 /braceright put
-readonly def
-/FontBBox{-4 -235 731 800}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D19
-38DD5C4467F9DD8C5D1A2000B3A6BF2F25629BAEC199AE8BD4BA6ED9BBF7DABF
-D0E153BAB1C17900D4FCE209622ACD19E7C74C2807D0397357ED07AB460D5204
-EB3A45B7AC4D106B7303AD8348853032A745F417943F9B4FED652B835AA49727
-A8B4117AFF1D4BCE831EB510B6851796D0BE6982B76620CB3CE0C22CACDD4593
-F244C14EEC0E5A7C4AC42392F81C01BC4257FE12AF33F4BFEA9108FF11CF9714
-4DD6EC70A2C4C1E4F328A1EB25E43525FB1E16C07E28CC359DF61F426B7D41EA
-6A0C84DD63275395A503AAE908E1C82D389FD12A21E86999799E7F24A994472E
-A10EAE77096709BE0D11AAD24A30D96E15A51D720AFB3B10D2E0AC8DC1A1204B
-E8725E00D7E3A96F9978BC19377034D93D080C4391E579C34FF9FC2379CB119F
-1E5BBEA91AE20F343C6420BE1E2BD0636B04FCCC0BEE0DC2D56D66F06DB22438
-452822CBEAF03EE9EAA8398F276EC0D92A7FB978C17805DB2F4A7DFBA56FD6AF
-8670EB364F01DE8FCAFBAF657D68C3A03112915736CEABAA8BA5C0AC25288369
-5D49BD891FABEFE8699A0AE3ED85B48ACB22229E15623399C93DE7D935734ADA
-DA7A1462C111D44AD53EA35B57E5D0B5FC0B481820E43222DB8EFCD5D30E15F9
-BA304FA879392EE0BCC0E1A61E74B3A1FC3A3D170218D7244580C7AA0DC65D19
-741FA5FE6F8CBF60250ACC27454BBF0897CA4B909C83A56672958752ED4B5E79
-E18660764F155E86F09EFA9F7685F2F5027EC85A775287B30E2069DE4E4D5712
-E7D033481A53A2702BA7542C71062173039030CF28D8B9C63B5596A9B42B33E7
-D922944A38713383D3648A4AF160A3B0C8F3379BA4372BE2E7EA49AABA75AEEE
-C5DDE1D8BF68483C3D21271280ABB91D54CC819680322EAB72E1250A760BC8DC
-FF798F2ABFC4F3539392985C4CB324B00072295FC160818BB0355FDC4F12E39B
-984826450553E3D271F03D8DC2D12A92A4D32034FD16DA13B876D88C8C097384
-46D8D7E41CA1A8979F9B07EC3337E70CBBE3A377235B04C79BBBDB66CE1C1A41
-89DAB7CE91F2FC0CAF6DDAD09992D56F72299068192610EE3DE5DB7CF6366B4C
-D74F414484DCCDBA449BFAADA39D0F27574E604E31CB513B18E3821A33076151
-C2BCB6E957C77A0AECA48C587ABB5E8C7624D56B32F80BBCFDC874AAD6EA5119
-C9B06886F08CC7DE5400E0F52B07483FD4BAF26C1556CA27B259FF3DDF71131F
-DFC05D8B14C28F2073C460B5011B76D84F7917E919E50FEF563B5DEBC5CE6923
-ADB72392C98D03CD978D3FC207A52B91E267E7ED8BB4531E8BBAC113DA68765E
-E23FA502BC71CFB91E4FDCA39BDAEB7FEEC3588B1108CE4A1652B770375724A6
-508376586216289093485CDDBBE68956210B6FFF3953D097D66BA31D19CEF2A4
-35A33AE97547B81426E58F9FFECAB633C6433E86C32130665210F44F10F3A2F4
-EA31540D0BC08EA4DA2DDE3E8CAEBE52A3E8B037632B235D4ECE3CB797A5A939
-12C45C282783F675060040FFE2676A7ED903798EE3B86644EF30D3B461D4EC3A
-A1D2E95C02FF1531D93180F66A13E868C9E1FF1722FEF6C4F304921961D4A10A
-6AE943157B1B0E8871BEA71162E5246080618A96D5B23FFA8F420F2AC74BFB60
-BFA3BAC4AC3A320887D4090FA3EF7071D2E1DD5D70DB98A01B6D315271D10F2B
-3D9256D96FFE8D8BA0F4781B74490C63686397241640B08A08FBE7CC9B1FD0A8
-21CECF0F994CC97AB18411EC8745F5A6AF56010C22E73CFFCB45B82DB68E6552
-2E57A4C06B96C55031442EE1F53373C50E14657ED320D9ECD21ACB26D7535DEA
-D36F68D8479E0B28185EDC21207BFC130315E7341A85018CA22A251ED1BECD7B
-08A33D61A73E061B2B1B6B23FAFFE725F967F1713EB98446A9045AEAE23E725C
-ABF73E2B90F429D6EF62567ED4140AB5648EAACE7DDC8E61B456C36D377418D7
-4BBAD5754ADF5D3023EBF5E35886078B9553406EAD40A1328EF917A05730AF7B
-1D776901B4AEFC3444FD3FF04EFEC96FA9ABCBC841975993E6E829A1732D8E56
-CB51C433510AF8E81CD8693A9561AD2C3F9B9737C698FB07D42C089F720E36B2
-997B18E2BAD498424539316476532E3B730962F63C8BBCB9C6155FAEA379CB8B
-3A95089641FCAB3E3CCC1FE6A2BFA86A8E80668715BBCD87FD41463D2271C067
-0BC3563F0A9991AF367D47239E3B30AE63687B5983F04D7B3A68A6BBD596CC74
-E34D190493177F2C5D57EB151A22197C74DCAEB278D03129AE28C441D25EEF83
-25AA19FB56A6F5614BA4AE4884508BBA29AEEB8418964D839D5231D55FABAAB6
-6A7731EACC6B70DA88D43D3F1DB3C971829ACF8BD090F5721FD8157E49AF2D95
-DD212A2D658E89C5DF508E91CA4BF26B9C3ACBF92F637F3C598E5DD46C2C4FBE
-1C75401E91F45DC95B55E8D6439C370FD99A1202C594F74A8084E4A4194C5325
-640AF8E16E42990C1F5331C2E4A8D35D518FAB4A62F289EC5AA45C8957765E23
-496E9B789BE56BA9CE6E4BD0670CD575EEF4DB1874140113A644FCE48CA1071A
-E1F2E8EBAAD73FE1DCD945D333D7545E3B67D84273627648C4143CDDB212F39D
-CB5D07D28F0DB5BD4181C88ADA12427C09026042C29B52280C58FB927DD1987A
-5E533F9B98E952A09466CC16C58D5FF46F46E6240E71BAE56363C1DEF36F03C2
-0BEA962CC25C8FC129669F423DADB195CD443BFF34436B164CF9F7F77E68FD04
-321D66CBB12EC0E073E05DAA8321956CDC6835A179E551A17E863270FBD54C9C
-301538A8B74867F52C803ED1AE36A49A0042E08EB7A2FC1A05EA6CA8180E1B68
-D4E42800815D88E947314FC4C0812BC55ED286A5438D1CAC0D76955D05073E39
-B0A29F3D1868BE46334E032BDF1F825C506D0CF1B120BD7A6B7F519F2AF96415
-528A5AADC23501A324AB4B65AF5574BF2E28693AF57BEF1DF4A76496EB94980D
-CF8ACA0EB8F27E89329CC8986D9F3CA851F76A7E2E4411614A9E1A76DBC59B0D
-5DDAAF6F0EEE50B737529C66E5845A4AB11A4728772A74AD81123F08E1E44E83
-C153A19781087F236F1D4E52ACC568D425CED800D3A89F1841CCE5476AC42000
-8062216F082064C1B8ABF67D4219647B3207807050D0B1E22BFFB916A86784AA
-2EF8FC2CC1EF22E0799FFF30FE847AA426240A85BB130129151F7E939B6C2383
-4D8C93986BF721EE67DD384E9DEA2854E411D58ACC3EEEC8DB5C3AA9E28B81E4
-A80774B6917B6B5588C57C9C3F9E2C873FC662D37C071C654C7B56C3737B4F6D
-C355FDA1668072307F06679809920EE1C034A7A3246E8FC22CD520C8267C2F40
-A071FB5952366744B1DE6272830720A4CF2C5C2C346685D95A7B91D2E312E27B
-90E44516C60DBAEB762F6690FA4958EF94F3D9BB05D78FFB3BEEE286017067EB
-092076305E003A45CD8842973828041168C07E8021206951DE8AFB25948734EA
-2229CB113779B1765046864C30DCF3918FA162066C79C4FA6FAB60C47E3A5679
-2A16F337C752360BE1B1BC108CA9799526556CA746A7F0E18CFD027A465FAC65
-2B83244303F270E6740B7E6A2151C41B6550CA65B70BF8CEC6ED49F648354C61
-9E24B898C4A96679FED2402632908709CCDA01A017E8DB340185D8628D71B0DB
-B37D1331E65015E7CDDA64CF3FDC0255399A102964D65567332720ECFBC8366D
-E385D50C34790B2730E3F5358E09CF71D8D271CF150CC994B45C0E18ACD300AD
-997BE0F68584DADF60E550F2CA2F75B43601DE0352C940F51B250A361619360E
-93A3F1290B0D335E812AEAC0D3D9B684866E5BC09F11B4BC4B7D636C8033DABF
-E6B56A88620520EC7A1DE98BDBC1D8803D092A92E2107327ED0370E7B89F856F
-A5A94566D95A2989D193B45CA39B2A4C33567E9040EA628D85E445D7FCA4901B
-DE28B0AC8EB1398463F59ABAA46FBA2545AB9273AB04A93DBFF8DE51C91BFA77
-B9D66218E9565ECE3BCD32E1931D8E9BC2BB23AEB4D7D7BD5A009C9C5C1C55EF
-932E2572F67FA55449038A882BDF5449D244FF89F24A9A5809120A764EA418CD
-4C08EB2BB118C6E7F875D17962FE517B5F6FCD675FA82832FA72C9CC2431E061
-E255D3839FE3E0B3FDD2927804878C68431595F67366DA1EC6928044CD664C65
-3630DA8CDEF94C7260669A715B1EEB7CBDA1591906E2A0601F6E3FC3A91A6E4D
-657F8E859C1D60935978E72A22ADD109DFD1F7A2C26331437EDA4C522A5A4B5F
-E0E54F75D5BD112272FA9FB48F2E4860FDD52321D0C1A8DA36AC3149B763549A
-F3B0E49C5D364E58B4AAC201325393D8975A2F9FB8DB72465C9608EBDD9F4B23
-EB03683FE15B60871BCDE2455A9DF22A4B2972E2C1602602C0F2265F63F17DFE
-AEBFD4DED83076B793ABB6036FCC354A9FE2C1014BEB54D32DD08DACA47E7B87
-65D4140DB71FCF2CF189DC7B70B504BAB83776B497EB58D0EAF32CCFD5079432
-2AEC2E5256C81F2FFDC17DC177741778885A3C2699F904D21FDCCAECE1E0E2DB
-AEF3336D614B1406756469B3182E0F21F10A12B5BFB8FF6ED2356BAB9D3FCA57
-6861FF5072FB3A7289D6AED565E75F10FA793A42FD696157CED5BBD6A61589F6
-3229A3A1AB3793FD98CAF4E6B39E347C1DA8465FF967C333DBADF94291BD92C2
-80F8F21C406F272AF4B821AA97204AF92A92F0C03FC7CD786667BE7032D410F2
-B25B62F3D6A98210A5F8BB2C26AE8449B7C197063B20BC684E6449D109BAE866
-2C68070EDA01FEA511CEB43BA4094165BBAAB0BA77F7D64DB4AF46BFA519F57A
-C2BD812159A646E3E946D85C3C94C47DB8392A71A58E79A60B2B4963CA61D0DC
-97B96DCB06E85B7A2FAAC0C2F0AF36E0172050C2E202E26B26F0D94B848EE7EB
-17690B5D72D880527E9853BE88A144279CBA27F0C908899263B65C0816CB1EED
-6411E1FB2E6D8120EE75E7D94C873C8D0007C50E2F4578DEACF9F0482E9E40C8
-071348DE7399D5E44E59AA1E21A69E1684AF373EDDFA3ACC7629384F744E7DF3
-10369AEA079F0A3ABF1980D0ED4F972FE54795A11C063C9F15746A0011E951FD
-49AD218ACD96234313D894C9CCAB22FB53E5722923F2F616A5823BC79210D3A1
-AD5CF60094CECF4A55D6307F0F5695A747715E8780559BC502E3039F8805F23B
-285E62BA162D15345BD8BE8A2CA04A81C4D55C67498858FE5FCD1F228A44D32A
-F4F995D2AA2E8DAA278879D766F9A2CC4A176B6AB6DDC36204D5A6452A0FE4AB
-B80FCAA7F3A072904576E5544C2144D18521CB325D803C1D2ABBE5C6CF688214
-F2BB48DF31BB488017CA6519D26F63AE5AB99302182C6A99AC466BDA29D2315D
-3E0D1FB7F2E3C79D71A48917AE39979897C3878B1129BCE200C056F1801BB202
-7A50CE659B36C9B6BF2106CB5B8A26C50799E779C9A95267F25F08DD798F48D3
-9838441CFF0B736FD2A2E413329E96FF78536BF3347F4239353965923F22F8D3
-9CBFE87B0D9D260B8541C344A0E99332D9A85F84A26D27A0F74CC345E1452CA5
-73A9D146A40E8535F96A0407E4E7B0B1D03E2D63E570A9881D282F141772E719
-A995E748E5D88D8B455F4D667E92EBBBBC64EB49CC873FBB269732DF9C9BEEE4
-30FB2834F08B7705BDCD241E342CED1D18B2533DF92ED4D80E105DE1C27C789A
-0BD339F36C24AE263BB4D2099820249EC5FF177CB7E08BFA1E83255CE859DCBD
-965551F26338647768FAF43BE07ED7711CFABE41A7BB004112613DFDA7FF6D61
-9D17FADBBA60210DBBAC72373E78A7C6CE6074AB710A65D975468FA9C7D00EE1
-B12191CA5D875580BFDD86F60DF1647C753A4BC953C7F34FDDBA6611AD469D1E
-D4725F69889388529AA084DE6B3D2714BDE834CB37A3B4892D412C809CEC81CE
-048F4CE3E4E433DB68BED8C890E6C13036C97534C1FA56A88555A87D4A446A30
-520EBF4617A13EEBFD053AB8819DDE73207FD8D2C4D9F8499FB781362E1D5BB9
-CA12E3B3840E14B7695B7BEE7653A4DB36C356AB59C798BC46AE5789038212D5
-35518D660393DA347163596A0C40A39DA04E1C582AFD30443ACF7C30F34F7E43
-C71C957C2CC4C4D0F711A175DAB8C29751F7C9F0FFA01337C1E82D8B959128ED
-D4962A9A8D0C23B01A18292B92A776A2069E95F7698E8771D3A284022B07BCC8
-8F7A776C6887E5F58676605E5C041416B4CF7F882200E23CD114323A0D5BCFB8
-18D943E750435342346CC3629B79DC72E41A34ECE15FCBBC2E00027997A27078
-5A2E8C503A68354C434A05BF1991F346758440A4EA7A4BD90B625789051FBDCB
-3F1933719F4F51C63D79520545C333C6A524D9D78187833EE3C3C0B1BCC8B01B
-A19DB12CF3A219B1E6735BCB6EDB44C160C8B10F32CEE20E1BAD42B40343D19D
-6B63C9B46222A9D6DCE506B8C73A0F16EB95DBF15BEF3B0FA08A20386EF14D79
-F4F9A13C77A753C0EFEA6FC13A2394992350E63C203F21781E9F2CB01F7547C9
-32D166212FA768BF3CC2AEC3408175AD68F629B3861D75AA0D11BA4CD8190621
-E338A6550263468293C7F140CCE7CCDC691B249FA2030B232813430023260440
-49B0409A25C8C1D436AE028927AFF112F1AC472E3D34795397623D803A547204
-45ECFD5AD77B95E8ECD7741BABCBFBDC51B29E3A4B343F81DE6A4515A0E46099
-0B813F7547A76596D9F1687E929A7E0C7CE305EE56B7E75AE7C704ECB8CBCDFA
-6660BFA3741DA3CA8639C0D47D68E8B0EEDEEC4C9D09D44AFE6A4EF122CC592F
-97FD91C67B446E053C95F616835AD4FF3D06179946D9078EE65A2E3A757CAED6
-492724E99D32DF131C3C0B8DFB7299B0D3C211B1BDEE029ADC30EAE2F32997BC
-65073F6E7DC90E8060E7178BAFC1FA1C094261C5FFCE6B7275EC110E43AAFF85
-352100BF37DDAB85058CFE44EC6B6E71C69A228993EB7A190FF265A696A410E8
-57C12B901F031F3FF286C64CADBF24951E3CFF45D5CC64C331B950E9D95A9F67
-ED46F10ECD08FE64179E6FA2E67FF55C01F373E7F42D2AC5942011C12A146288
-2C4B363842F6F737DF6E734CFFF3F3E1438F123759DF6A2E82B87106BEC41FD7
-765C5291E8DBDD5F4EBC43D0810C0BAEDB90DD47B4242959037571D5B2F6145F
-8D7EE4BD931489D58F5C38BDD8502D60715C1A9351E51B5ECD4F41E07997A3F4
-D4686EF369E2C4F4BA5ACBAAE76DAD38B9FED23214399363A2606EADE0E42F28
-2009915C0277F0D8A2D9F9121A45FFCF5C9D6D47CE400338789577235C872F5B
-3771ED746C09A8D33811AD41963EDF751455F37D059EFCC2851606F8ECC9107A
-DCA01DD66B6EF9FCD4DB75A2B5EE89AC997250759DDCFD6B67487D48A9EB3A01
-E203B2B253F2E6FE92D7BDEE83FFCBDF6CAF0C7BDEEE52464A055F81BE7D4FC6
-CD9C444573752D927076A05E1195CB3BDFB3B2F71EA6FD2B57E2A2BFCBEEB1BC
-60DA7BAAA6F851AB1FFE65DCA5064F2482916FF54F3B6E38B69503FDC60389E7
-FB6E26AF8C41C032CAFB938648CDFBD105870D2B352355EC73002BDE35956636
-803B7D0854F0F1E56548C1A2A9CA105CC3944E72F76741C6AD909C731B6DF453
-61CCD6DF4BED5490D195C37C5FC237858B183B540192A986B859246EF31F9ED5
-450E0781D911740D313E8B01F7144C8B5815FF4AEE9F0D9CB9589589232EB3A9
-25595657BC3F23DE5F91AABDE7A6D8BC1DC2788E3249FEA1C153840A3D2B1B6B
-494DFF85D7D4EE6DE5A5BE0664EE9FCCB9EC5608749D3CD49C7C19FF9E7FC2A6
-0514CAC9BB8D5AE151F584D1795CADD4B25F79D2EBEA7DFB90206F9729C82F0B
-82D3C284B0F145BAA8FED9C6A4EA9AB71CB449342E33CD33DC2D62E86DB0F213
-5AA7E8DAF85DCA93707032F8690B5961E3365DE715370398FB908D6F3BF10A34
-A79FAC115F1A43981B3EB633DD8DA73B62DB33240E5458496B963CD88A3D9DC0
-CC7CFCA2AF97634110FF97217E0761A0892D75E9C5C01E3345221C40D7AED353
-4EA90A94D160D1AF994FBDEBC640A63AFCAF584F49C5FF09E2E8EA657B31FAC5
-C0E172F5A509F6CB3AA18CCBCB7902EBA04A0D8B8660D30915F7526DD3CFFB42
-CC6E0730487FE28BA66A7CFF85F1CA595470D3173E4793A74FC72191FB2B593A
-24F13A9F16BA0BEB93C2116AACA45DDC7FC9C6218D84D83F8849D9CE4BC2640D
-C95EA3A7C56D52E1CECCA26965EB25D41D2B2CA4B8949BFE8A02BA6153D9D2FD
-E54131397E8B404A8B03C1680E442DDD076F5947FBC6C09F1476390FE4F91B83
-D2BCD5AFBEFE99031DC16DF0394EC8B8D91ACAF3FA436CC620CCFD8C90FCE2B5
-20BD10FF411F1EEC8800485D35A068E3D28E6C25E7F0D0570579A62C31387DE0
-451A74D8B9AB950E8112833A0AD2403AD1D48FC7A881DAC12F6C5C3B59346145
-49F78188AC567A5CE08C1F100315EFCE8F9DFAD1710C529A50AD72678F865AE0
-B6D27D59754C150DAB8F3FE86A204B7E970A70CF6E695659062F0B4184A42B5F
-395B7F3ABEDF1E21BCD72D133B2A86F4643458ECBD33B63F9658EE64CAC7A01B
-87BAA8F1B42C13BE070B8D90B310B83F5B528A1E2C0F8B1F8540025EF7724295
-696584C4C3C410F12A84FBABD656E8F540A41ADA93F226175A38E1DCC910FF58
-FB972A5DE9F9390D2BCB441DA762E7F50EBE14E5CC26708333B7F76D68BF46DE
-FEAC4C08581B6760C61F92144ED42F09158B2C1C127EF5865EF0DE72E1EC2013
-D70CF96CAF8D0C2E6C06DC42B9A2B142E2E0242C86B9B69738478691E8DC483F
-F83BCC1F45891681A8024B3868889893ADFCA57B663E21A0555A04F7D17280BB
-A5F04B342D2CA4D0F03B5014749E20B0B717D80665C3F0CC9E77CF7018003D66
-811A8550145B350521A398E77B82BA7E35D0D38BA03AB031B16C7660E6BC65B6
-A3A936FFDC9123411B63BABA2F29C544E4CE7C36E6C8A08E694F96DD85A5A93E
-2E1888FC004C0747931AF8FA8E2038721D82A1F7AB642C70FB38E98D4573E565
-E718E67D6FBDC3DC92536D9EC9D3D046B24BB4D85F083C38DEBDB5F31C52EB2B
-92544CAC70DA0EBB6B2B3F9E5E393FF9054DC4105269AF32D6071F2F151E62AD
-EDFC9BB20EF0100B11D0E861B853032A315FDC79C7B4029CF95BE589BA6BD0E6
-02A9114C443482C4ABA199369894CDC94C8C19A2E701EE57AA35D56637D62001
-C9AA8B0C8439B3B92B92DD7152E3D429C65944AFEBB54DA64495245BB26F316D
-FD0589DF258684B04E336445195320EFD3520D4832B7D258582B463A8F1227BD
-BE63FB4B53B185BDACDDC6FBEB2B6FF20863BB073B0F6592011BB953F82CA6DC
-20AE5BD68CDBDE9564C17C656960DDC27597F9148B2720E9C468E78DCA267361
-64EDB978A82A5FF432779B61A2449578756EBA3842C52AB0004B64121011859B
-EF04639D7497D06BBF435CEC7FF5497B0EF5E44038C75FE36C6A5FE28E20F504
-AA9284DBC5C2DDC571FCB9864E86C6F8ACAB18F776B7B4C357FF8D48A4199E3D
-05BC874927E35F8CAD5BA4A25B4398B4C98AC36C98DD31331A022B2950AFE442
-C833BF4A939E15257AB2C3437931CA615E379844AD400A54E467C88DD30A0AA3
-663FC816C02FA267431D008696C05F3083A62C4AABE69CC908B311E7C38FD6C6
-0694F1C6230E9D2B0C6974781E123ED0DA18BDF865EA766405958E74DCF9C0E6
-E4E9B3DD649EFF9FCDAC0DF03E2F863D174741D2A31C58D57CE787D88F73DD93
-881388B1D559B863007DDC2F7BE8E1CFD31AC79611C119C81169BBB7DD4AD4CA
-4061C65CFA8AE47D1121008C98C5E746E814DB1B6544634A21A58865A1EBA793
-F4AE8F4791FA8A414A605A7AE75D280FDB30F3E278B8D5270817411ED8ED0846
-9812641F54A6F5081B45CAFEB9CCE76FB0A8A21325A53F6F3226294D970D9FED
-B33A4D51CA796C64608E768D3BDECDAB423C9194276F3082268E35159AC90501
-9BF85693972E26CF96E1DC32073FBCC9509BB98BD8A43E719959CAE57C35CC43
-7762EF32525262B267DF6C072ED4E2245377992627561725B26D3C94605B8D53
-A1EBDED4757F4CA6B62BB0B293FB808A868EF8CEFC1845C1CC7F563937D1F719
-5B8EB569AC9A735F1FC7A8FE5ED667A0C510323BB4C5686B04757DA0BA178E97
-456B60AD23F6D2D3671045B971BEEF38F56ABCE18A91EFCC35BDA27E32088952
-74C6961D6CC05699E2E4EB2A8D27E87D80EAA10CD4077A73E2930C3832486A23
-9A639DBBA1DD11EF8B806FEB46851E0353213E7620AD5C5CEF1C4843CCEB01BF
-68990B31DC56D3D7D70546DC834F6122450839BDCDEA82ED38DF136345F4ED65
-6D4D9D50CBC94BE7706CF26A67687A344B777AF93646D78A4E09C35F09AC478C
-EBFA7736388D51A897AFE53E0BD70A932F41A569B60FDE11047BE8F9D0E809DC
-D97FD5E3D197F13B350FD3AA21D6751B7FCDECDC359938557BDEF8CD8259A70B
-9667DA767F04FF8D020B37329E8F9C902A93CC5D1D646E406A2FEAA93C2ECC01
-AC50022B171B9B7828C828D7DC64DC3A39F36320333D8629D678C5D4A54C1AD8
-B30A75DC0276C4E8F3CA10AB8DF4558B74486A46C8F4CA22A5F34ED898A9E16F
-CA5857B5D2E35642FEE788E9DA04264000F25BA9EAF53120679D8A008C081643
-8126EC916AEBCDD0E73F120A9FA5D3E03B95DE747F5AFF9EC6FB0A1EA78B1BDB
-6602BBC54A5CAB04CCECAC3E3ACF00E9B9DF13F1BD765423B1E28ED17ADB0F95
-CA2ACF675BAC85CF32BFD37FA211E2F66CE01B93212D37FF32767FD204F5D8E9
-0B8F7BA9CC7C75F48E871C135E9E5A9740880DFA43EC9511EB4DCB9A5EA292CA
-57F5EE3F627565E888792209A1C445F1A4AB64272A1B9C88CF0607F3B3AB62BD
-579656E35320753E14D53E46D80083ED94ED924617FABA5E664C260BAF675A9D
-FCE50DAFC590F0142CE14102CF27DB7C3E7C4A9798C2E2AEA25DBDF79377DEE0
-BF67D5D2D75CFF77F00014DB64ABC0864B4E26FC022CDC213BE68A6D62FAF02B
-81648DFC72C0EB70812355EC1A1072090F0168239C72D6D2019A15028C1022AE
-35B3F09E38C6736B04FEE979907809F2AEB14D4E4868F16514BCF60ECD59B743
-3998F5CC7AD9DD6774F6B64B209C4D10F5495B2588528E77456D07B53E6D1FA3
-29F22DFC2F8BADE4FA88386F23A98B59952F07FFADD57D3E04508B6EB00925C4
-9E6BDEB71D4069E5655EDF508EAD542D5AC58409809EAC51CE15BBF36742D669
-3E81E19516B5D247F9912BA63C564DB3700BA46E99ED01F81877F508185A9EEE
-2D27925EC7BBFA5FB5B4982EC046E71E51579D36DF30698CE27F696F94055B35
-44AA5B4EB8E5E6A162A937A6103BB79C617927E4D3CAF9F325C7A1EAF6AAEC98
-4F6C2731CB40D53DACDA1FE054827BCC5DF1F7A514CEA95527A1AAB8E5285008
-6AC229AAC82365B39A5472D839D2D779B067B82B48A1F87934DE62B2BA96F19F
-C7BC5720497D8E48DCC6EB9FCAE294B3E876D17A10B54C702305E5DD53CD1B78
-D7445C62E4CCBB8783E1E3D3E21D4596E72ADA5FDC947034855B6906B904C034
-BF4400FF3EC9DC35B872E02AFD12BFDC2BF38009A176007F347C414198B43CE7
-797C13275ADD7523636D2211E5D26FFDC185DB3317324A88C9E83BEE22834150
-81D7CF4196BAEB1FA271FE3EDB53ABC9352F1BF39EB53D1C288EF274F9744059
-EE9DADCC9E5052F877E3D889E4B1B3EB276AD065E4087C0C96492D6D0A4BC8F0
-4D8A15031C178B27F1C02D81F72FC40803B05799BBC36664308438EF6C9E723C
-69C9B8AC696AD2EF4B2F6255C68C604718837F5122F5C09CE02A1E4D3A5FB03D
-58204759514E05A343898DA1157A70B4C1B13D98F62113DD0463261267D050F7
-4B04BA0F967F347E43FB760AE200FBD51ACC1A78C09392CE1403C49E3DA99466
-C3942360BE380A335EC2FABBB11F24CE383F02A0C4321B4122C13BE2674A6D70
-EC252CE45B0DC5ADEF1C17A4969EFBEDCFF16852A66C566DE66DF6AC4FC25CC7
-D23697B655B452BB27BC71B1D23315B1A0DA3B33C4F11E64FC716401BCA38483
-DC2C45C0F7EDAF1080BF31662FDA700554A992440949F991871EDCD463719C3B
-7A22B8A20FEEA5C206A3445AB9CEB524E45098B8C6A2E1A1E6FE3CE8781086C0
-D4C2FAFF2D8B0E40F1E3B6B157087B33874F3D62FEE705A8F2596AFBB7CA2D2D
-E5896AF28EDD47471E9ED0AE39E67563B56A9509B7D8AE7F7E982581DEC0E26A
-B9A23AEB4ACE2754528715C4EF1D2A6AA46E0EDC5672DDF7E1DD58327B6D7B6E
-F6B3D755EBE2B20B34CD10982BEAA4BCF4EBD051374C61875EA3AC80FCAF3771
-EC77E2D0CF51E997C568BD16752314848EB31CC2CFCE6E72579106DFEB0E7C2E
-35A1C3AC2280EE1CE0FC837D8BB8639FB984D1BEE2F40DB33D10A51115728734
-3F176382F86BD6F83384F063A678575A8F05B63EC3CE777F9994720C0D3D5FCA
-FA52E65193CAB9738F83E9F338B534D2FAEEC67D34D5D133B8962AC8E51D8D40
-7BD9D4FD46A91677B42F2768D212BA3415F049881A4722AC56A73BD2A1C7BCB8
-9BA879EA89FC2F5BA7F9C71052FDE13A05DAF6B387E0ABF1984C0C6F8116F7AA
-F66DE76334D68E7EED9EE460A0B2F903CC23DC2381073AA6576722B554947C54
-CD7443E802F872E2B1570735957D9B2BDB3A6BE0713985C046A4B97357DE0BC5
-DCB171A7BFCD964784237BACD7CE3FA998CCCB0174CF5E0D3B209631EC8C9BFE
-EA2D03E58D9BF4D50902191A362040BE5CD18CCD43B6D559E45E510F596AC859
-240CB589D13647B53168B1BDF0AB23E2A390B1693BE362B838E24DC01D058565
-3BE2EDA0257580611851739472752057370E97F8ADABF3E1E74088AAA88D2D36
-3302DF3A63EFBAF72AFF4AB3DD49A12A931E545A1EE70B109EB3756323CFFED0
-79CA240ED2F3D5666A617914539E5EA93F8E123F51756E1762363D3706BAE3B1
-0CD12C229BA7031D2407F0F76B5AFB7D4C206B1952A1A047DA72C4FA8A954D30
-D81AE44E5AD1A8AC1AB76791694F3EAD0402D3F75CEEA88C48D7B7CA24D96C1F
-10FC68FFFF9EDDA8422ADF62E47FF30C9A971C61FD6D2E51A8A983B25FA56A28
-0101E83DEA3951FEC9BDFCE9EC527EE67679A85BFB74B46084131FC69A533A4F
-50DCC52D946B08A523120C16801833C1243B92485BC2A756398C414D9D1D6020
-67A221FD3DA50BED126DE2D2947353308D4D2BAFC1EAF81AB6035D90B8DFBA26
-2C46C26DDC449776F4732E9A114A90E0B216D482E6742AE5F8FDB81AF2B8160D
-27766BCB915D0991EAA3D75F6C39F834EBCDC2F36D69B26D198A285E4848A6CB
-D5387067A5A653AB097093800CB307CD16E7F1B13A635D2D85157C03FDB0B026
-B5E8175360334142D5397013F692EE164E01491992399F758117A2D30BCB47F7
-2C15094710B9732745732F4A18975989AAA47A71987F2A38DF016685E58C593E
-B70A0B5E8245BDBE57D78D889A24A7BBB74B81F674B25267C85B94985360ADF7
-F218F9EDFD82051B88E9DD19CFF9CBEBBE83B2E67CB361EDBDD49A4D298772C1
-A854EE0122E7E972AA1DFB6E7770E1659E5AD403881B3A7818D62E44E874844C
-EBA18955674B4458074BC50140B4460421CDAD116900327CCEEA4B9CEE476422
-8A96274A8047ACBF8B44193B15161AB9BEB47739DBC8D0D97A920ECF282EDA69
-0E6509F16F844C903B26F48CDDC6BC6EA525E0D9358210F94F3E1900183E01BC
-B1EEEEA06991C3F1E0D61A68F12188D62DDF5644E62490BE5C39D3DCF34E3828
-C06DFCA8AC5120A809CE18529B9476E7B96CD317666F853590BE809D87B1AF33
-0AC00F6DE4E35569F93A2A563BA330075C5AF753877E2CA4CEE6286710893927
-20FA9C62FF089B07355035643F5EBBB1A5566FD32AF8D73BDB951E0B26EFB5F4
-DBF47B837B63EBE7ABAE0DED81C09E84F241F5BBD237D4D5C063AB4C38E0F327
-DA66C39BC570D28D5FAAD90CEAE125D61FB02399C6B2EBBB606104C602D072B6
-1622908FAB22056C98D055432571BE95BCC562F5FBE219F7A97963A7DEBFAB3D
-689152BB73D3D91014A4F4E51D649F9CA0F54775A2C41C48FA7C1C824A74427E
-A303DE21078CDB63E3E2FA2120A784F10469A3F8EB31952B7E2328348B56C31B
-F9646D6EB7AA5703CE8B32ACBE2CC9F6EFC90B407CD040ED217439F7930AD432
-8BB34794B625D30E307FF4707E939E9D1DA7E68856F553FA381AAC6B98DE984E
-44B64B445C3EEF23BAD16AC056CA177B1D146E8529DF18BDC9D26741D7FB9E9E
-89317E1B58B5E86756517552959C88B96CB58AC91EC4B66A7CEAF9B6D7860FFD
-27660675CBC1758382EF64B69806B58E85A91E26ED4C410B158B2BE9F1784234
-2280A60B162512DF95DA5F64D3973FB80B83AE89C0816699DB299DAF9743F316
-6721B2FD0475E225B9C187695345A9B1AD61076F2C7C43AEF08D3650FCC2A97A
-C689959579DFF25979A0801A52F3DAA3105C6B1696F73D7A3719802836985A24
-C600B3CE20AB98BF3D2C4D7361071FE24D1E1917C955546A94E82D08B430EF17
-8FAE58E767211DE394F873F4393EFA4C8920D98D55BFF9DDA9FF3089EE7EC6C4
-5B8661E0301C609845B53299228865689ABD2B16BDA53B1F5B176F1A17581965
-DDAB36225237CF4F7161D0FFBF33CD204AD4FB6C1149F8A98100A7CF7521B33B
-8E3FDE34E0E5F830C0BCBB24A8DFA47CDB2D19D695804AE3EE547A418C988969
-6ED259050E47F08D519382E4C77CA08F222FC59EFA752BCCB6C47AD088C968C7
-B30787A968967EEAB11B1AFC0201F211147B81AD6C8223AD6C031EAE5995A619
-11EE212A8E2DB52F5AB4B46FCCF6629B19F475CBC11C539047DEBF3AB0FE6B73
-619644DF9E30E227282D208CBB8CEA06B20E94FBA31590B1482177DD6C3E81AE
-67CDCBA1301B243D1B16BD0FF2E3280FC1D31FFC094E872E3449D79C93331C7E
-B8C88152ABA1221EF1BAEE1297FB6A95DAE8E180B05B88BF47C3164C5AA2E5E4
-B40A84739426A1E0703B429903C34F9D62036CBCDBA28AFC2EE33AD78B197580
-1CB7485FC6D812DD6C0BA74A738EE8356D4C353CE8FF67004BE92E355703576A
-4E09BDBAA1977DC1C06E273E4D86B4FD7501BFDE679729763C05E0C1DDA2AE94
-7758851E508CD591A9633276076A41E177320D321A5295BB33A126D59AD4DCE2
-4B0029402F1BDBBDD8E2E8EEA37E989F793CE3C5BDCCE8ABA7B5283CB983C71A
-C662D4AAA69A40CFDF69CB655A5CBE57057DBA0CB97CE3624FFE9C669CDF4256
-C2489FED8D68FC4EC7CC8E01BDB88A71F85FCB03FD2E1B3F71C708669B793B65
-90523E959B51F4CA8A4C4B529DCB4604694D398FB452C579D90363D2364B7C41
-522BA211AC389FAE45923D145D5B72A91BD204BCC0BA10910E58634987D987C9
-F152F54845E15DC8BC7E39B844107613F40CBBBF59159E677D1CB36738DE414D
-B43B26773BA899DC73BFB8E9C3D6602D8EC106A746D995E84B74EFE96E366BD4
-D61472143AA1E6D05D260C175EBC6059A712516BC9729C03BB3A77995B4BECA6
-4CD3DF4AEC651F96B95D20B0A14BC8083D40902EBF535C3B552DB8F26A10A211
-9DFE12049F31401E88149B94F8C68CBDFB6483F113CB13E30D27C967D9965C7D
-5BF3B2909001CD65C2C3E3CACD50A48C20C67AE26B3833A407784D072BE909FE
-A9453CADD7FFF67F87586BC11684DC93985E7789E7E494DC879B22C2C7E329B6
-34E5A2F05E567467302C63CB9F4CB8AC98CD579EB2AE6218DD4829979A5EDFED
-A2A7F8685E3316F75E0562E6340B7ADF3083B245E32E57C452753103F968D02F
-FD41AC768B514CC4EFAEE6E9CD3A9288A04F6B8D4A47FED10A4A5436C0BAC513
-0F632019C6987A22BE20185CA30B0A8A764D33B0563A7C045602C076C80064B2
-F1BDB61A86BD277E0BB50AB6F439FC05902DDD6EFC6726E89943E70FDE125510
-A451085298F282ECC4626DF8935207BF3691504D4CB89D8D00DD28A0720651E3
-395CF4400F1AF5FF4EA1CEB628A5238CD78DB023A46A8166BB4B4EAE43FE0D7C
-B47D63640A55486D3C2C4CAC3F5F44D263B21E31604907AD9CDCDA4F2424CE0D
-C999DEBB795262722396DCCAB8CDB893798548CDE0D56E019471563DE61A5727
-5C2A72C174D97D2C86CFC84BF3745473CB197B7581262A879FE7A17E1797BBDD
-B1E2B488D1585A88957A452C9025C18C40C272B38CB17275463C26A14F3B0CA6
-B68E420CBF82D61927541EBEAF1C46D719A743E012AB3328787FB98B635A4CDF
-CCB5A3F9CE5F87741897E07182CA87E35E6B38B6ED3DC91E5E70D6C37C9C986D
-FABA3F6B543DB34EAA5A69820E96D1D796466D00338634A109142BD36AE89D4D
-6C5E49ADBBD2FB3AA8DC63A2639D1F2A7013E095F5583C4A8F07F73CA91EA726
-F7D630A697D66DFF632E169C88B332B45BA095AAE2AD8EF438C1D9ED8FF34AE6
-31887A0245F8C84E1F2E72E131A6B761BB333AEB08EEE7747692B0693E5B36BB
-1BE5E990B8F35AC30EABDAD07A44E5AD52D73AF73E4D981C1F56F9AD50D0AC36
-1FBE1A42A1B89D02DAA2853AC0DFE185B10AA022FC3C1891ACD5A8FDE288290C
-36452B00E055127089BDC9513E3B44201938B4CAA3D41AB3DCF62FAFD5FF1294
-9886FFA5B85A5254A523A550872D2409FBD6539DFFA88B2A5641DC01EA84F74C
-53721AFA9580262BF7398CAFD1E4349910AA60705A2D81727CD01C1CF5FC2C2D
-8B4E5F323FDFCFCBB34ECC9AC82CB66D2EA316EBEA254B7BA915CB1E7FEDA372
-33448C96D74A02CD3B166308D1D39EE2703F8BE3460B0AAB8E000AA6BD781097
-A48851F97F38E6E7CC1A6EA26BC06D5F87215529E413F5902F96DA18BFB618C4
-CCE86976ABE2F675A5859D3137C26AC08D89A13CDBFFF35104B0FF06DB59BD26
-2B2ED9B072CF836AB3717D0CBFAD954DD7E4F8406423DDDFD15B56ACAF8CA0E9
-35474BE6D4239FF20857BE44608A119C13B7EA8475BBF8A7A9E95652614A3150
-FF662B54DF277F0D46D51CCEB9F8CC80622937685685DB92A9265CDA8FE40806
-EC30C412C637ADBDE1254A1FBC0C329F1C93D541350AFE445A59D2CB7A3C3FA5
-50317C3BF192D55D792058ABD2FB9EE404993BA88449163830CEECF5A979CB7A
-D1806A1621B2383B1CCC4881F53A94D4ADB5A05DA900ABB57B6BC3F8C6A7A707
-A86E0938F6C3ACA740B001CCBFDB71AEBD46038AD1B16A1B1F389C79A9ED0577
-7B1607F5C94A7310374BAB1102EF5E83C9587D93A1B7AAD8A4A5E26A6A414AA4
-4E512589AB794D3C1E83430A8C60DCD71688C5C63E16DD6D8FE678D4D550CA03
-140B11FEED7F4D046D6F558CF381C7E8A5ADD6648EF09C600152A880C9F607A1
-DCE0232AED1D1A4745371AAC5752C8459B10193AD4AE12E067FACDBD7DD4814B
-7936461CA58232116E4391DF10599E8C8E215DC324E33D50D1D5D431980B05C4
-F35467687B16B33A0F0E2B004448F695434560A0FEFF407982B5D5215D69F405
-5E67215A6D03977CE21F9DD9329DD0C62263A551E4B7775FA2A88BCA53408855
-FB4822582A6420C5D7012A1E97A1908EB3CC9B1294FA6149DF3440F5EC112D45
-AB231B82F20ADE7CC306F446BD1C6A22A8754A8106E1E371EBE0B128175CC7B3
-1A50256508C7A2861AE3194AF684CBBAD3AE15A84F26049BC6175689D5A0FB27
-F5BF346A2C50FE1EAC7F8824124EC0ED3745F172E8613282F4C678A07D215B40
-B9DCBDB21B1A2003B236F954234BEE60B9B97A81C3F57445A737BC7BD6530C5A
-F665245F912BACF72AE5A963DCB249F8CF75E3EB26946B6E22AED9017EEEFB5C
-6DDC1896D2D33EA619A067C126FD3B0D9C0DB3DFFDAB557DAF7F8FDFE8DEED04
-59E739BF3D25826E2AF5B4E8415E8E0468CC32DC8AED669DB288507B24E2D63A
-049AA1E4EA83F5FEBD36CC2D959E3A579CC1D9194D16BC693BAC3B622E64D76B
-7727C412A72F1EABDFA27D971035FDA8D95BD1F4BD11A2A5998A52A86844270A
-AA6F04085ADFA189197FF3AC99EB320635D9900399F03320C58E479894B5FCDD
-DCFA905EEDFA4F232481ED4ED48B8762BDC945A3A11883023831B5D26546966B
-DF3FABF8F91AA8E3105ED2A6118D34DC4F8860DD188852A74C7D248CBD53FF63
-FDE6C9BDFFCC1723CA1F689BF37EA377CC1F512D2E120318EBAD5E0ED3B1E40A
-2B799F9D39E3A826487D0B708EA5D6B8FC92D4C4FA4E4435148F54CA3E1E68BE
-F6000C34FF0EB9F4EDC44049780FC8100232C4B509D89AB263973386D09B7B84
-C56FAAD1311F0C7B2A81A33C8F843DE95E5FA5E5A0FAB56F0B07A28844223A21
-0676FFB6ED33E4BBC4007310796CFB2C51F3C37A3818B8C2321DF707DB42CBF6
-0CBC4AEBAE8534BBCC8AC20930F40CDDA867638A3658F8A5BAFD7BC9F14ED3F3
-38564B4EC809C61020CD409E252E6A35C02625311A21B3F47E7F4637BFF2BF5B
-076AA5161A372F36123E41DEACB8C1CFE3D0F6FC52DCAF6972469AF1A5A3EBB3
-61D66E3F0B73B97BA68E690B4453A9A56FFDBA1F9A63CFBFD47A3443ADDF148B
-2536106839CDF5815AA562596FBDEE9E346DC4F21DC16B8D12BA1F2622B1FE69
-9BF5BBE271BE0D50D36947F71B3DD190E3354957E39CF99827AC75280F6AB35D
-7AED2BE61D3378D9EAA6FB0F0BAACE580FDB7F017EE232742F539D630D78D5E2
-5929A5C43108DF515797225B3CA58F3690E55C84E2B2869CEB3860A9A8F2A2E7
-5B75FBF7D2ECFDB28F35840D962FBE5C5AEC404213C6C086845298897A89CC75
-8C06BBBAFD8BA8CF12CA66927526FED9640D8644E5FDAD711FE6D9AB9CA858DF
-24EA55990B874077C9D66675DCB68FBDF40EADB305E9806532DA6ACC2E94BA42
-B214A70ABBCBFFE8A0BF16A2AEB94D5D8DC122A7BC86FEFEC7C268F5B8911912
-F111E7CA37771946D13E9776F673E18A9DB0BF149610563B2A69B02C8B1D4BF7
-21FA88F72B4C8C6DCC2BD717D2B0B55293AB701C64C84B8C6ED1EBC07AD14C37
-D0488BC9D66EC5E18EE403E211125698EA30ACB2930020959EFC990AED384B49
-0DBA5E2DE533B7399D5FC694FF35744A22C2505419AB7006CA51D9F244841153
-8211CE32D92BDF813ED791D12EC5E1097DC87796ACE5091B4A80286CF8273E5D
-136DB706617D615F97506804231E5F21F479BFF4813A9FD69AB0956E755CE61A
-01E009ADAD283A44C76EDA88355FBAC73A5BCCB9E904FEFBF9770866580BF7B0
-51190577C8E95285D83045E14FC05821634B7DD6D5AE96A814BECCF44DA89663
-40E9E61A5D8CCD9B761D5752823618E6DD11B3D27D7BE61C5CBB1F04CB49E077
-7B10A337F949F882981E0DF0603521F158EB98AE444BECB940970A7FB3FD56FC
-557647B56036EC357385A0976ED46F9A96B8ED2A36D266A185B99C7C4E35CC6C
-46FBF936874CEB4DE2E197F0EC962896D5D394AC1573CDE20E59FEA8B9F40C4B
-1B57999320F7489A2A22BF65D5634964781830E0048198FECE91F7E3A2A373F2
-28D1F46216839BE18D503BA8B41CC5C03AD383F23D9D3F4F16F9E4ECC3E50C87
-11F90D12B2910EF83E2EC3372A07597A6FD768D44446F1297EB9F40091580483
-6D27C2294587D92505F5EAC1B6F788BB1B380D39BCBBAFEC59492D9220B498C1
-36037C1AE4E77680F346D1475290CB79424F8DCCAA37F0A23799FB9E04AB9751
-657A0A6FFDF042828B0DC798BFAB1CD41BA453F2FD90A68BB3CEED016206BB0F
-129D57FC361CCB600F1EA440F6B875ABACA3FA5DCDC663C5820EDCDC3FD254FE
-F4557E7448A85986B76D6B1344307D3AA3A934F3EDC3F56C0BF371B46C84B6D6
-35F30374956DFE8D3233FD28D588785050B2D29818B50EF6D8236291BC5C5997
-A8F654647EDAED0CDCE4DE467AFB4F4BC987FC9D833A8B730DA9BB15BAF04619
-A3FF3065C1B52E16BEB70256C63971FBF42AFC5D6584B9A45B8546CF1B4D0AB4
-C903FBAD1259CB5EC4BA87763F06ABDDE80D8CF75F5E867D6F4C44BB03FA620E
-D1F2F0DBC1F30EC2F0AE7C1E53A607E18B8D9505AB44CD1C267FCA572DC31D54
-3064ACB944AACFA2E18D46F5820084CE1E5710FC00F4B1DD43B1FB084C5CA5E7
-CAB661B2AEB2A44FA2E72B71F11E89CB0B2029A77BC15B4F668313951EB87156
-33CE96E3C2E6306DD38ECAEDF75C8610AA0DF4613976A47BE0B53540BB040C38
-7C30313F550BDA2A859E3B532C9E524635203E4AFB425455B31F53516007C65F
-6DCC85A7A3505963AA3B019EA98D53CC19D34596EBEA1C3994C07BC1F6AE4B32
-6C84027B1A5BF54FC444A3584760C8770726B25903719D1770179F48FE08C27B
-988B70D3C2CA38E5EDA3294AA6BD4AD4A8A55E2C8ABC4A3BE2945377EE635212
-C7F894AB2ED31F2D43D229337B42B151C92644C9703E9FEC0C4D43F897313864
-FA24946F4AC11657B8DABFC8003995A0474C0B8694050BCB781E20FC9B112A2F
-8CD205E30E0DCEB5FC0393F2D640CC4A8EC998311CBC492965BF3D9E5A392B0A
-5E1970360A7DE98F73BD8752A46279BAC099D2456579E18678AF1656754C7F0D
-38F4B3A63AD251C38E9864E3908669D07341DC64B193B175237635412A52D341
-44DEDB1B5E849148FF4C
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR9
-%!PS-AdobeFont-1.1: CMR9 1.0
-%%CreationDate: 1991 Aug 20 16:39:59
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR9) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR9 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 33 /exclam put
-dup 34 /quotedblright put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 58 /colon put
-dup 63 /question put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 87 /W put
-dup 88 /X put
-dup 90 /Z put
-dup 92 /quotedblleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-readonly def
-/FontBBox{-39 -250 1036 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
-87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
-D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0
-92A36FADB679CF58BAFDD3E51DFDD314B91A605515D729EE20C42505FD4E0835
-3C9D365B14C003BC6DD352F0228A8C161F172D2551CD1C67CD0B1B21DED53203
-046FAFF9B1129167921DD82C5964F9DDDFE0D2686875BD075FC81831A941F20E
-C5CD90040A092E559F6D1D3B0E9BB71733595AE0EA6093F986377A96060BF12A
-A1B525CD9FA741FE051DD54A32BECD55A868DD63119A4370F8322CCBEC889BC2
-A723CB4015FC4AA90AE873EA14DE13382CA9CF0D8DFB65F0ABEDFD9A64BB3F4D
-731E2E1C9A1789228FF44116230A70C339C9819676022AB31B5C9C589AE9094B
-09882051AD4637C1710D93E8DD117B4E7B478493B91EA6306FDB3FA6D738AAB1
-49FBB21A00AC2A999C21445DE3177F21D8B6AAB33869C882613EA6B5EC56476B
-5634181ECBF03BFEDB57F079EACE3B334F6F384BDF9D70AEBD592C8ECF21378B
-54A8B5DBF7CB9282E16AA517E14843909339B5E7C55B038BF3BB493F3B884A1C
-C25F9E8FB912CBE23199AD9D2C3E573727701BA301526C66C3617B9514D6F11F
-11930B1D97C17816C85B1BFD9B973A191B33CC3B391815AC46268691C741B2D4
-48A840F1128D9B2F9CF07D0709FE796B23A836417BF7B5B12D67F74453C82F5F
-25F7B30701D6F6D4F4DC623C0C27D6A6FBECC7312A3CD10932FC7C10851C3C52
-24B75DEA8A648B7F34F5711DB0E843C914E25663C510185BC37BDB7593C1C259
-21D8DDAD33982C336BF272BAB2F48E68217403FE9F54877B243614A87E64784D
-2796EE4179FBF96123D1BEE3EF89D682B427BA4F12A1318A57F18BE5DD903815
-26168CF2ACAB48E4B0A6628DE7084F42076CB48636F1094890E895F5CEFF70E7
-E06BC0A2A7BB7E839A3C0B8AFF23D9C0447344336DD1228233C1E2E1854AEF44
-703C32AA0099886908E7BBACA5B0D474A382448944F763768B8E4C29803D3CCB
-4F7DD6768ABE27E0F33C82ACA2C1731960CEFCE1B972C88B145EEFBF0E498813
-97BF1F66935B22136A1A686A4A1A8FFAA4CA95EF05282D9F3939AFD86C020B34
-0AC1373F63A04136A900D331B9BDF5D5091851AC905AC374A31E597335EF0165
-FDE5F91FE810F1CCA3125DEF372385E4571087B0D89701F2FAF69B8E65770328
-1D7F7317E3CA8CF845D1821375D5F18844AD52E00B5C73A670E88E4C362D9040
-C805AC27C17237F7AF177F8945A5E613E60138177F5BA98FA2B6FF994A19AE5E
-384813F4452938BC214F07C01689F63DC45B1E493BD3CEED1488FA823D2ACCFD
-4931EC3B0882548257EEE2778CC0C3264E678D4B04A61C63BAA55822C680DDAE
-0268E96FC74F104DEDB5E83193890747845A68EA3C41ABBC7DB9246CF5DD41BA
-2F22C925631AAD3C1CA1698B5E1212A5941280BDF151CAE45E5A88B3F03D000A
-B47BE5C71F69D254B56A97B229383E8D80A1C1C4E3AA19DBF15DBD91894392A5
-853330042F1498EC981D4BBA1BDC694037E74C5395109433156F45B72B1FFB50
-00715301FDCD1B13F063A58E049D3D64C983EEA9791141B553F45A0BD0DF35A9
-0EC16ED0C2E8173B8B6961C3367001B8CEDE5B1159B4F1F1007B7C870CD90BAF
-EE299F9E85EA17A88F6717608CC0C7A246619E7DE4D5EB2E0188AADE5B5D261E
-B60E41597DB75A3449F93DFF41D278F3CB13FABE69C443AE86702E295CACE5D9
-36C7B59D68D31885CF5396F8DB9B1016A05791E707B1A58780399D4A39B2803A
-CCBE3DF81C67CD6892173F510AE0939E979453A0972FE2FFC34C99BCA2D4971A
-F915B205C97A7969F45AD89321FB48E0F87EEF04A42EB0C9E4B740D034D3FBBB
-194750165F9405FAA2DCF49559DBD132B21871907FA456F0009DA68F0A5B5AA2
-840893D3E7CB2646DF4DDCDF8E334C1C7A99E6BFFE9912B56C2B4ECE2B400A47
-74F57F2F18F238678B2273DC91FEF76EA7243E8A2E9DF0F8BAF59F5F8841CD3C
-19C51906868E104846ACAD5268669C87D2E75F5645807EDC7367A4DE8019C8F3
-9E160E3C12053B09C5CD351EB9A334BDC9CE007DB81D21AF32813FA6D3A79052
-110207CB1EF978C91104B9584F22962FBE66BDEC4035A39B2D36CE3B50F0763D
-5793E5681A054AC0580D3EEF4FBD5C97C38D2219B086C5D1167EBC368AA619A8
-81BA2CF4A9BD3D564D827B88F0C0CAE8865FA63D426903A83FFE33B201FA5C1F
-398C0C4F83BB92B69C8021C9DC3ABE3706BF553D7A0AAA10D66DCEAC6A266C2F
-2BE03CA2119623C866B40020110125C9A42598E04BBFAB235E2A3FCBD4D65E28
-57D30D0519C5A580DB28C5054CE78A7146186734056ED8034749A6D609E70FFF
-F984C11598338F4418ECD3E7456D11B254655A743B82362025D23989F9E432DF
-064493D92DCE72869DF1BD139652618C43EB63B98A442AC3A84CD1BF8A134CFC
-559A3DCF26FB9FD2850C8517F4A817C426DBF193353E250721C525D9C2D3075E
-EF8C32A34DAA0E6BEE1C9939D1027908D1ACFCAC83F331998C150281DC7D41C0
-0345AA65256E2C17377DD385B4E4DBBDAC1A00EDEBC473CF8BFD0854C5F22433
-C54DC433AFD880A79C2826253BE23F335B79119FA9F9C2C5111AB434433FBB17
-996F8716350CA8F804782A08544AD59D62A32571297DEAD60599D88019B9EAB2
-8E064E88101C1DC08500D98845EC50CF541AF447D4EE121099EBB0F260C7DABC
-07E4CC9B6DB06A67E82347714F9D7C7679B719B5B5F6CFC8326D8EAE1984455B
-F310C71FC6FCA69D5B8FA822BEC0840F950DF373EEDE3C16011FE191D768F607
-2DF1E34A7FBC1EA68A98B14163511ED06B024C3E8489BD545065E8E099385619
-6CB8719B35D08E199DB0430DA6D8676D2C88F7B040D8758BC64B8F1D486050B3
-0871D35EA9DADD7BCEC4B5A69167E75770F5D5A7ED63A98A509E39AB7D6F676F
-DAEF4BB780EB55975C091DA75708D258F1EBF93571713536D62CD842A74046A5
-A6F43BF167B0D152ADFD1DD719B86708F7650F0E88009EFE5E52B90124670A5B
-938AB5F7031155E55D0ECE4E0050299828CE6D3C41199554B6A37D6BF281BF78
-D528D0DF179AC7291CA631D5CF3E6C0B769E16AEA70DDF8967C362BFA26EBFD0
-8C6573E6F87676F67255791A6E7CEBFB9343CA59F70C02EEB6E91A41F67BF2E0
-4A97EB4FD2AA0805173ADBEC7A1CF095E3660B7F0D0316265F9D226360F9D58F
-5B159069EACD65F0BDC7541FF33A745B0A918E2FC44D0980B297AF55565B4B26
-E4172FC34D2056A6729444AD5EF2EDF1AC619DA67529DEFA394F5B3A9BD0F187
-54B2313E9557A034DA5E6CF77D9D5293E325E4FF4362912036772AD79639D646
-DB99E84CF2C7969CA1C8D236D3ACDD1544D2AFA99CE9B3F446782562FA872C12
-D3AFD4C3A3E6C2166FC3891BC31E5A4910342F0C89AFA7DE3DC0F574D87B0080
-9A79E90883ABE9686B0B1851B43D6E18841EDEA59CE564E94469AC87E2DD6B65
-FEBCA7CFF1F72A27E884269977563AB7160642C074192044247A69B5D0FA2925
-AD6DC6A604E1A764BA3E0215D40CA483DDC7FB728D9DA6CC23C0F9CF1127E485
-B7763C78CAC3A0513D203A16A8964E0CE606ECADB730FC5ECABE489341C3C4A3
-2BF8BC3C24C7FF34594D29A85985F83EFCC137D69D359BEC8C4D22BC1B984DC4
-EB2444C51CBB2C480F52DBDCE11106920355A2B8BC8E04F8E45FB6D1AAA7F2A9
-7F2BFF73AA997F721AFCA4E248E93B53E9D4580F94FC92AB66883017C20703AC
-10C48F7FCAF5C595949647D74387C0C6D01F2E3723AC24B14F856FAB896E23A7
-0C8F9DF01FD5CD5078CB6554371D3C0919D7DD1FDD1F2CF395FEEDEC0DEF42F3
-CAD38E207AB809A685486A7496D0492935326852AF1A86B26359969934760C15
-E030B7E3C407E72A5BAC5D133759D403E68548E860EAC60CC20C0B216D8DBEE1
-B98DF96AC49EBD6910311A636700DB404E0D997F0F613ADA9387AAB0A7D19A6E
-9D51F8F23A0C05BD992E616737510F0B83B5C940160EAB9C4614393697AD2662
-99CF061A94B528006F01B31952816C13D783DA3055D74C877A29C57D60BC2C32
-CE1AA0B5658F3A775D8CA6FA52D6E3CA94C0491C77E3A2470B7E72D01CC038E3
-DA20A49D6EB00CDDE59D73B368DC233CC74481B18EC4E79DFC77AD3216F6AAA0
-B91C0D2B070BF1CAF52321B7FA2E49A80D2CE8102A637A4E06E963E25F1BAF29
-34D57959CAE1035C1FB2DC04A7D576EBE0023BA2DFA47303AE521C6C4ED77AD9
-83A8E2A215C65B7AB6AAD43AA844499F63852A715452C996EE024B0BEFB15966
-1D83B892A847212B4DB72BBAD4FB47E4314ECF12D5A69192A4347B7282EF55BE
-21E7187E1AD486E3BAC7E82976387B2B3734A614A5C097211725D9F0CBA493C7
-79C1F8454448D31B6D3C809D749588A756198FE274BE651D3CB50584AFFBE298
-81BE55C1C465A5F9AB16E016D8B136D89ACB499AB6205A6872B2A5B399C61657
-437BA63635C374E84C4FEFE4FF1DBA40A62159D199429660958B1EBFDDC8826A
-4AF1BC1DD26B5F240BD521287E4DCF23E64AD55477E7A9EEAC5D2D9AC7AD0403
-1F43F20EC89FB09527C64D5DEAD3A2E9CBF038E4C39A5ADC2719128595EAA4BE
-2178179E3DC025E37297AB3E38C430A6BA6E1140857215479EF610F19FE9658D
-579E438CEC0CA2F48C205CBAEFAE4159C42CF0EF0907525159ED3A444EBBBFAA
-8AD1644AC799CC2CC5E69400AF06D27225BCF3BE1FBD957F62A63C1D17446D2D
-F8117243F2A3D072073C11B0C5699DD37DD76245E6C0FA2A489EBB403386A238
-57B31C27F17EFDA2A31EF0662A727A20D21C1625964B62FB7A327A968CBDCE13
-00903C172B2F69CE0F91D6C1F41B73E49251564395BCE6320FB433E280AA2529
-FABAF1BC995D1A6B49EC5DEF4F027C8A712C8EF26B0736FAF975182A3E46B2B6
-F02DB267D3767CA3500E7313E4320B4F707C477518A9FD058585501BFFEB5C40
-6288BE9F4726D4321D50477EE25762A408D01D87D2BF5FCB63FD0FE49A49ED5F
-9F6E1F12D5BE264BFE8863A4EEC42006D07619CD66C27876BEE37BE90079E58A
-AFE59504563274E53F23EFCD2C24DF04EC3258827CB7412E89BA2DBB7C326A4F
-9EC5AA6B9B7E16E585FFA4BCE927CFB01F22C678ACB5A1D57466FC3BA96927B0
-8D57F0BBB96D2FD2916742F1A537D1B24C5259FB1012FBFBAACB1D1A59EE7AA2
-4F07768509F921E6DFAC93B356758A43DE778243464B54E9565331877575A659
-1F5101F43A65ED82DB11A1095B25EBDFCFE49B0385D6C0E65BA4620041A9CDCE
-495972CCE9BDC42D46A60616DFFE01AD64DBCEF56A15A2603AB3FCE5894F8E70
-BC54BD6E8DE0266A488742BB6325473D8BF52378EC196DB2C60799078BED0276
-5503EC8DDE9D8D878BA76F1581A219898B21952A20ACA3D28A262FF74650FE3D
-FFCD7BA9FA7CA0D2705AC08A439CD3DA643D9C3A7E00F0C433C3E81EA249BE29
-8A9152C28390E9E5A5D88B9159C077F7AAA3C9B991E397E617D043A553DBA75D
-BA0C408D450CB67A01A9F287F38A236E21B20CE35B205655B7A03346DDDEC0CD
-F0B058A760E4AC6D194BDE01573EF464B2787AAF45429668C151075D4689D94E
-2F8F430AEBC04CB530E2D268F04AEE98B8B58F7C1A017C994B7CCB2A14A0DC5A
-F866ECF8BB6CD9C19E9AC782BADEADBF4D59FB01E6DB56B84A10ABF13AC0F4AB
-22741493820C6CBE2429CE0C4D00459AE847FB44D7AF99B06431DA16DF232203
-743FEE3BF96A5D92D4D7EA95CE353D888EA075A91575D077C8D63498E6B342BA
-F2AC5A263AE38A947DE744EE7F7494599CAB84452E7FDD9FD68E89E0A506ABA9
-63E43BF5890FB0A39E987D1141FE2575254DB1596F16130CF7F47F026BDB135D
-FB53D2975464888EF193A254AF0B6CDD766749ED54FF9F5F477C04D328DDDD0E
-9C70BE408F8747DA5679F26B1EDC4BE58DBE55E30DF64166925EB1E133141CCF
-A3D6C03A0C56F4D62AB1A34DBA137A668D664B5B95F393F5FE769315798B1CEF
-D79393913E0EB907652B674A7A61AE130A25712BA7542C2F3D636DF2909F53C3
-C218BC6CDE9D0AAE981DF0E23577C3A4772D1358D155FAFBE90B275482EA1366
-C61AD46ACC9858F6A8ED89970EF09763C3511E517EE78661A00BEA32A4204EAA
-9D57399E83369C3FD59F65E46E4970B9A32170C36D11A47C0B9608E162FB73DB
-4DCAF59DDAB8FBE2B89C913563C6D11A2F59B8F9D7DB8332B2DB21DB15737661
-51815792830E43BEC6F90DAFAD24D7B922DD98D7F4E6EA982D6E2DEE2885FF9F
-443D8E922FB3C1F063E537E46924652A287A01DC66450031F3A0C754488EAC96
-E17FBB1177E9569E80BE8B9D80AE2E5D7948DCF1FB400BCFF3633DCD24DEE533
-FEC773764EE7DF3C8486FEF2393D55A9CCC18FB0E492BAD1BE62FA50FDE99E4F
-3F4F2EEDA507CC21108E742C35EA9DB21CBF1E1576A5FE0EED8995870DBBB536
-DB8AE49968714715C74FE03CDE7D9882C6B4737BBD5020895FC2FBE5FE2DD6FE
-5008A40CAC68550B8E2B61DAF6E957299F00016810BCA138E8BDD80EE113119E
-B7CD864FD5DE84954AE5AFEB2C41655E3346F38609E841099048DDE6EBC67798
-5B489F5EBA5B244D2F4BB14B92C2B287156EE2EFEE5C18F52F804F44003A8EA9
-642427F56D0C65903783DCCA9666486C5CAD4E72F81E9A6941F1C69F437D0E4B
-429C8BA3935B1EB84D29BAAB13AFD268088E83143753BF5C37F7276E8F11B33A
-73AB8BD20EB6A855E546ECFDBA80095592EE3A270CFECD546AE7B705842096C0
-42270EE790AE74A37FE8E39C63178E49010E027A9C6884F30DE52FB14DF3A665
-A6CD4864E8570FA5C0F1568DAFFC86A5D2A7202DA35FC82841D16D68DBF73D14
-56C8E4128AA6E36D0AFAEEC107A045963984530D162AE04DAE44374DC276F5B7
-A910DB4A75C4961880AE82807D679A3AD9B29E1A9824B25470092D9A45BA09E8
-4727288B82D381ABB69EB8861DE16AF20800491EEF14B6DE8230AB2BC790408D
-0AB6D45CD480F9BDAA6100D8931A0E28F484D587B5692FBAD4ED9F786B165E38
-2B3BE4EDEC42579D1B3AF118EBB8A98103AAA6BF19896D3A0A868CBC3D0F79E2
-542F7BD648763440E59046D571BB6DBF8CEBB74DEC26660A2335EFFBCC0EBC54
-85102286C92E626F5877A5F5B28E1CF8843D95CB719F37858C6C96AEE20B2695
-59ACB93BA2042F735E2EA4D3ED7E1905DFEEA922A28DA310162893668D138F59
-FB26C94535E4C02D4B8F9AA302DF8F6AB3C00869E22EE9FB6AA9FC2AA8865118
-0DC18A9AD8E9B39D23DBEC650C600E3F43EFBB48D63210231B51B102D963989A
-0453291811F46C8D1669F7C091B02ABD0A171F8EE5D1F9DFABCC769865F28FB3
-A28F938782E7374DD9FBF8D911404C8FFDC7C42C808A735F9DC1F3D38E4C099A
-03E25202E6FC87380A46B20D6956E90F6452F90D941AE6FDDF41D45C24D75E0D
-67C59668A88BFDB9F30B2B1404090C883E1B1B630A5885FC65CD370AA1CC7B95
-FC4F837EA0E7B67CEA006DF98FBDCF45BBC2003EEB204ADC6A1E500DD9D31B59
-CDF4095747E5A836859E7E77F8905EA6BB2FCD9D9D02A3C2B675E35618EA114C
-0051FAD9C3DE14A5CB33BEFBB6F11A8F7BAB5F1C3E751D6346BCF3B0DA4C4099
-312806F671C299D302624A115FD4A4E275A16C06E0FCAF1892DFA3F5DAA58AEB
-0087CA02134E2F12B333AFD2630F73BD54B9ACE3350A0DF56FF1202D7E2EB5E7
-B22C4BA2A90AFA390273345D8C0BA734413432D7E6E7BDC97DA3220B873CFE3B
-92CD8721A2B1CFCEECD8298F9C0515F8C3A6DBE10F8CA1419E104BFE7D20896A
-3C7272BF4F27252CC0690932C822B46DA18D39A0EA2313858CBDD242F6C172F9
-404F391E4C026D0FB81563F097760138EED33F051BFC3D1B4F1398907B741ACC
-BA444550D2C35B218DC6DD94C43FFD48F126191DADC4BF0F4170ECA5CD3721BD
-D7CB53587564D54199FFF947F70FAB9924C57B28F8B48D611529CE6B583B6487
-2E73254334A8E0995C5875FEEF81051E7F2B41F65F285401F0D69B97B1A2E9CF
-D64820502BD65167B8E551079F5CCF614CA606181D256922A68A333714D1F38A
-63C38C0DA7F95F23639AF5AF168C5F652DA19CA98E0B583E89FAE67E6E6FFFDD
-15E7C65656E47573ABBA868FED73FAA2857A836273707010720470A1C22E0355
-8B7BBFDFE10108857B6648E844B02B226BB5B2ABBE56223E182BFA9E473D050C
-6649A80D34E4F03004C51A1D5D84986D21ECFC04AC9117D06AFADB75C221A9DE
-ED6D3E373EDE6A842BDC29E9CFF10F7BAADAA143862C3192C354E185AD8BEF02
-5A5C16B7239EC2B076EF6FD2036F0A3C046F9B74D0F8EFF918256A663F77B017
-866F7BAB29C5A58B453EDD952BA70EBEEF918C51B8BF9060325A1E9B6764CE2B
-6D8659190CE1D04BA903F829C18535356A5B941D757625982BDD258EBDEC96B3
-A928DF053C1098BBE7F2E18AC6A6CDD0D72D37753E31663A771F5B0588442EF0
-7314DC4561CD1A3469B6E447DE7AAB88EE97AB10CBBCF3FD7EFD5ECEB30595D8
-C23E9E66A7350FD77A6ED3AFBC0C50381A969A3625AA82EFF18E1A01D5E6260A
-9FEC7A62718AE28040F582E7887A98B889AD07A791C5CF02F7DB62FCF4DF995E
-C6CEEE9EA355A1F301356ED7C54068F3123999888ADF6D9305CC83CDEF9BA998
-762364AA1811F8B573D223FD1A1135EF7E4DC571277C5E35041EF23644BC3CD0
-06A3127093463748311D331E5F16FE71F99AA1498005A04222C70CB87FC73F5F
-127F8488DE4CF87A849C8E1AECD4E57692D813AD22D70BA386168B6CD6B8ECDA
-DE7C755D6783FBA582A618B36BC23CDE4F6627EFAD808AC53140AF61B8A15ED7
-32D501019C30806D4D7DD4BFE8778B78C820202DB731660F56B40E0B6D8C4325
-19DA10311C548074E33D9541E30FC4D7E62E9FD28CA556B66A5FD818A2C70AB8
-A3CEA5F161FEDB4717FC0C13E7BB612939EA7EF31CC7FD1867CF2BA77DA0643F
-DB1FB594E2F15E9673F1272FCCB5FEA47D3905EB04FD0DE37BEB4058E1B5DCC2
-5B668A6A56F3620F3441E4427E9FD0CA151FB49A8F140797CD6F35566AAD14DF
-5AF6595C0B9B03AC4EF286C1F71F33195C93DC4D3621AF0FFF908D420B52812C
-4EBFF06D74D8759051FD1C64B4385FCDBB2B97BDE22935504EBA49F1E798A52F
-52C3431D1F886E8D4F8CE7E32DCEED6D90A290AE4C97E394BE2E8FF760E05A9B
-446ED5DCCE90ACF14BC2EF7F4FF96DF6B8D9FAF2A20DAD9F95340D11BFF5C7F8
-648E188E5BC244765EF006D73F56B9BF9AD193D6AD3B3AB2418DD691F2FC2EEF
-4EAFF90DB1372B5525C0B1AEAF040378EF2F72AD7439ECECDE46427B26B63F75
-FC1B0498E1A1DE15BCFE365E276937A7D222D928D628A4428BC654DBB851AE00
-9594221B5008A0F915B2D893EB2D547475BD8FEE8414D14CFE2699F1E64C0001
-2AF3D495AC66890B02A0B9D17E572B498BA481A3A7E84D70EC6F0935AA02B5A8
-ACD89B33BEA21027FA6BD84BB9DF3F49A248C194AD631119E5978648B884122E
-DC8E2FE5C2912634889E262C360B2AE7D39DA68A18A5052876797EC39BB4C9CB
-ED25ED247BFB4602F3C1C1580C4A99EC21381A57C9E14D0B19631F5D051ED2F1
-385154080FEFDB6677A1F235082C0817831243CCE3F03A3378A061D46453BA02
-824F806EAA4987D6BC0EAE78E71A20599D16BB386C604D4C2B3FBABEAFE69E63
-9C63706D5952ACB1BDE14CDCC584C9638D09E1D347C5A452BA60726BA3E077AB
-5FB45E51262301BD1DF71287F17BABF4FC3317862CA1836753C7D8287F3B2E2C
-6E43B617734F9DAF3D5F046DC555E552F182F91201ABDFB437076173A5644171
-5F688976CD85685D846F2EFB282960413731F81E563E7AA2A449CD9DE75B5EA1
-AF6D4224D1F193FB1D96B3F3D92B2A19C3D328B0E1BEC1880EF0AC727BA52459
-D994EB6F2AEA637390D1570BAE2BCF4281FF170CF96C4734412FF76B0EBE2C1D
-F58DE09BE4010011A1DF2902B1F8135EACBCA5E4C52849FBB9A1978FBBC7060E
-4DD494673F174D2DFA5B4F141D4C92613493ED5086E4324AC3102EA8C8734A6F
-FC0BFD7D5831ADBCF1A406E08B08C25B9393C32B3E3948350A6CE9E5946B8D0E
-A3C1B99DDC633E443DDB64C272D31DD44944116514FCFA5CA98EC3600EEACC3C
-39750233A1F02F35FAC5C414C309DEDDFBA242C39E1164D28FDC901F7C0B5D96
-6E54B71201F47A2F4378190E1482BA54505E07CF45E8F9863F3053C8C2241B8F
-A91A73D32D279ABB187CF9D2C068E16F950F332686E4C4E76A8C36AEDE750134
-8FCC87A81958F820B4EC5DA79E0501268C2903E8C8DA20AEEF0F50E6E719C848
-63977D07A70F6AC8B6CA105BCEDAB2E92B948B73179145742E571FF296B18B55
-9099AE4C060493AE8D76010182E5FE139347BA614534122EB2A02663384D3CDE
-8062C48FBFBEEE038409130C895C73D12218E62F16E465B0AECD2619E335AF01
-25530592A6BABEA59E9F0466830C9E81FB152C5E5FA7ACEDB04BD8394A5717BB
-2F7A34958FF620B4B5A1CAB1206E8F4CE8BC1EB68EDB11B20FEEDECF51B61B4E
-55006E935BC1EA2498143161843BF8D7ADEBDE78D17EB5CD36795BA2A2673E55
-15AC21B6CB32C5D0720D841F682C4A680B2C0BAC7DCA01AD1595A900DC9B9F57
-17AA310057E327B3E1AFFEAEC20A22752951A7D29CF5A5A00A1971797992B2D7
-8EB7FCC6E09AFC5E66446FAB43E6A802889B7336E51ADDB2BA40CD4BB18233C7
-FB102B8268E775E47DC4990986CFC9637356676DFF0B687E55D3EC0A86263DF5
-0A0627145113B2CA4F5EF28825F86D2477854D8A0147E432CFFA00CC59FAA77A
-443FF8B8E23BAFF5F864E2F22F0ED2AE662D4319E25FE35EB12B8789C54A65BB
-13F7F9BF8EA39D720639C0EEC0703AC68A693CC5A6B1499F5C32FFA933AC5A1C
-F7DE81D214E6DF52E7C22D99AE2111A58A80BE12A452B5B63D2A41791009B311
-B964CBD97D9210AF0BD152594B4055931C3488EE743346C1BE271A622487EAF1
-9E6B388FF7DA8526FCAE939870F53DC6966957F8BD1AF7623DD6856AE9C6F347
-F5ACC8572D32B0280D9358C07188534990C79A88916AB3969B3FEDE10ECB0BF7
-720B02BD450C56562545FCE9119EA2C8AE3C91D2D18E663722C6ABA632568151
-EEE05ED6E12E54CAD1BF1B43C3419DD52BB30C63BA18FCB2B3A68254EF024237
-AD9E610648587B64AFD0DFD40B51D60CD98C8AA5D8D5C1B3E9F41FDE095C11A8
-8B0780629DA1AD69E98BD8F24A96DA77611A0D2F7E640998A261CD3240E1D741
-DACEFB1E51F8E9A66D31FA02941DCBD75E7DF48D084F9EA5B93A55A2F0928367
-B2CB7EC64E6C70DA90D0827A2705808125310B2AB558799ABCC844FF8F89F471
-9C63BF32D091BAED7E38862C27D584D12A99B4AEB89EFA27B67298E9B8A183CF
-F70980D781ED2EAE9BC850F8F7D86B7C40503E67CAE51D3C22DA5C3990323E93
-8FABDD894CACF1B6F1D490F3294AD64857E463670F3A5DDBE8B4F34DAFACDA36
-E3253B0FCA548104FB8322B74D0F696365A05313E93BE3B79DD5E080ACEFF496
-C52CEFE8C2B36563C59C1D10FF0CEF110D0222441C5AA2307F1E1796D326CC4C
-6C73C56F2B28B5A02E849508CF1F58CDF96CC3FB3FC2D9CA33FDB0204B955291
-4DE38A7E9D6DE062E2E23CA9ADCDB6ACCCB2C3E658AA65B36E38B9013CE929D2
-B22F51DCE809588824D9E733915226A1A08178879CE7949248E61AF2B8AB20FD
-B303A906DB910C21EB5A2887ED5F0B325EE953ABC7AF9811EDD167E966E147BD
-4E3C920772371DBF01BC40CCBC5BF0BA55EC9E98CB16D021A9B92A10912836A8
-D65EC4BB7FE0630C6031414F5A7D0F04C452CD2A3DD114BC229381C593DE6894
-6080AE0FD6516259A4A91A40CF116925F51BE60D414C28745EC9D6EE9760E6EE
-ACF93D86C1C56A441B4EBA3C424365F92899BABC2C0EE323EFE0713C55561404
-8F5B84203AE3FFEB363AB61691ECE399625B95B796310E649347B6CCABD90CD8
-AD7A6DE6ED1D01408DC4BBBFB885415665F8FF4984E7F5533EEF428E7D3FE0D7
-55801F46AC1A834091C5775C6B7A10124986AA058F0A515ECF5881DB78D2675E
-DE2C7D6C6DA489A2BB518D91488B71798832BA39BAAA80A0FE08C4C00BBF53B2
-861F849134C204D397A21F7A0D2F6E7B3DB8F2B66936A77BEC6F0D84A278BFBB
-88F2C445167EA37A3ADAC4DDAD2688C58F63886AD048FD6BEA1252D2DEE8DDE7
-0D380B4A90DF34B79F1B24318FC05E9231EEDEF8DC4C4A13428FB63C8BEC8821
-E6FEEE96C2AF6A594D27B2F9B87FA266CBD4DD04634E2B16139D92D0041E2E5E
-059464C4A2D183C8145756D25BFE00622471A6E4E79A1EFE6E58AFAF15EB10B9
-E635A5FB9C1CDBE10CB15C15E5D1C3812EA7B8F9E4A0B06242EFD54D1323A5B4
-66482B903A6148D92335B3FC3DE714CF6C7BF5C5DD1A719470D561795F2F58AC
-80ED946AEAA2AF8B6CC3615C201A8B7DA41E544DE91BE420EC9D3CFB7B58BCA5
-55FA73795BE48428076BF67CB8DC0EE6C1D36218062B715AA3C1D45D8AF07954
-8A3A7E6CB1C2E460802F54BD053EB48FCCF1609912CC773AF3486372593B8E58
-E9E6C93C141F4FEE16EE4BFA59B4EE5E3E124911F898011B62F45C80731AB829
-985A271D800992032ED66390931AA6CE59122866FC7C320FF73365E16F9AF3C2
-4AF57FC4AAB658558D70BDF1F7354B89F153C26AA8E76E17EC6F92607240FD12
-8F108645F95AC91F3F7B6F7DA5B64535A3B5AABE7A1D37743F9847AD56169FDA
-C8C9C1D1BC019503B9734BA04BB4DABE31B6055F870D6575CC62F6F729D21074
-87A4F362009576660C6431902FD4EA52D2765E2045DDF5C25675F9F1D4276983
-D452A46267520F5D7288277A31ECA2B4EE12B97CA3F76F7D0B9F3977E0672496
-8FA02CDA1F76B8FD199F2BC2616580D8839BE1288297E5808D66BD04321620ED
-21B26AF23EA4E2E64B373C7310246609596666F872D9BD7192DB67997E0D9A5E
-D595BDD5A5C1461BF226FF2D756675494143B47BC1512441E51C0017BC9C8274
-B44D77C9A1BC953BFA44C1A0F532CC27F9ECF7D6AB3E1FE1CCE494A8BDF5993B
-C420BC61A295CBA2FBC60AA33CB2EFBEEB1EDF34AC96FDD98566902158CC75E4
-9EA4C612810161854E09453D960D2A4F3C0FE4A5C8E59144B730537BB141CA7B
-22108604A901BC7DF4E55541122563B228947E3E7E6A2E328F2631D363F97AAB
-73D0025B184DA41863D857D9BC282D4EC74C2CD20794B2A4A78C455C309F60D2
-C568FF05CFC7D7DD9DA01BA393401808B25350FBF4CCE08491B3B788BF0F34CB
-0619887C7AD8EBA8441517C1469EC5C3018229564DEF0ADB0FDA1C8D407122A0
-EA4F4E742000FA882CDFF36E00EA1FB9A7E38AA948ACC43126EFF2E1C568C105
-3FC7D867E0578C9AD2478658C41FC1F0D642BF5ECE965A81954578A09B1BE241
-02DF288A6C803B123BCA21CD1E1888F0C1DA1980A443B6AA179AA55C2485DB25
-5A631FA18DA75F07B5598E94953D6EE1E3B25B4E32996DA72CD431DE9CC1341E
-B27A6E612ECF38033A9CD6C51F83FDCECD86E65ECED6F0A05546606A8D7C397E
-8B24A2F7B3995C54F609B6FEDD6E5F7BE8EEC9B37EE27B4474F5E21485CDA627
-7BDFA2D6AF6E971F71667F934B617DECBE77C7434025F366AAF4906F69570CD3
-B65CF130FDAA3BFBC3DFFE94CBC2C946CE94736B5C0F281F461FE4467FECC00E
-4CAA95306E610057596F7F85647F1EEF0646B4F39D96CE5D971796DBF470A6ED
-EA0D2BBB03142A46363F538C81CA2396A8645BD215A6129CEFD1022C50FFCE2E
-991109A32467378EF1879EE07089E0601AF9B16F7AF745BBE665D155E951E638
-9611AD8204091D1B52351DC7D825C4241D2C20FFF8C67B44A5996829DA7606BF
-22565BE752083976797486A18416865389C00EE6989EFA7A82E7F39A75F1EA60
-3996238BF10369624A0A64EC43EA4D98AEACFF189FF1EAC7FAE3F319DCF018FC
-D399C3A8503B65E63E374E7BA01471B3CF564F57E0B705FAB5EB0C33050816F4
-331A6161855A37F003CBB5F8DF3825C81597679340F18CA1F664AF09BB4D5539
-5FD33AB6CB19BBD3D2A60924E34F61E62FC9A4F3D8ED6C849F5864FBF2D9AE27
-16CAF59F292AEC85D322ACFED0E23721A4CD9920872C1B4263A01ECD58810CC4
-EACE1B0BB4A4915B57773D8CF68702EDF839E302488295EC2A43950395736F5B
-25ED769D15DCFB608426125CAF40406686209B84C64B9C730587CF192D16853F
-393AF1E56BB1E454B55C200B87F4DDDD5493B6FDB1AB600D3A3BC69D83A54C3C
-55F1425698F1F4CA2A36981C90B54184B265A1EFD4D1A1424BEC8C23E5360DE1
-B101DECFD25BF88F8771F1B0A3E8BA26AC0C9C81943C6B8850C28459BAF4819A
-9827ED4C97A163297574609A4C65D9FDBDA87B865DAB7DB40F2A1EADE14EA5FE
-0C6D96E36CF6367091B73D0B10497A68FEA1BDA2E1279DC3A5E3BE4C2B3E321C
-90438C00B93AE85D744B41E1C2F9D7CF1BB0FDECAE06F3AE506B8F947A92B9AB
-0857AE6987E1AE589BA8F14269CF275F551543F15A9A8E52BA033A28AD73F507
-1460F6546B9AF012EB52FE6FF79CD365858BCA117987CACC880456B0E0507563
-EF86886D9CE14B7870D31390EC3AB9CE3787609CC1E73AB3BC98B4E61A0CDD8D
-07D9AE7A7D9435AA849574B944822B2D55FDD3D4D3C34D78C7D499A26E9D7EEE
-BE7A196176B2BDBCDAD359A22B91DAF554ECD8D47B5C26AB4F6F4F7A9F824C17
-778E629872899AD52181054D639BC9259B08399356EE8C02CF0FE7A5556C8620
-19220458AD463FAEE4A5F5021B2EA3D4DADEE0083700F3256C5A82AADCDDCBA9
-52E0CC63695856F525A9C6F7153701F75A4AD61AF654258F79D542A7D97FAD66
-42F74697458A4F5707D1478D51E1D742B03264FFFF2D6271D821DDAEFD14FBFB
-D11677929240578993400895F323518F1B8E5D7C60A67E2AE4E782393415D477
-2BC6850FCF14583B0AE0CE6965D59A43E4F58CB9D762F91793C2477F02020B7E
-F8307AA26DE94537729BFA79D796FBC03C3ADE70F621F55A3B7A69E1DEDEE23D
-1E3F63D82934279E4DB990E049FDE9F8C267A68E0FA480801BE2A26929F3DB2A
-10BAD06C9D9B8CE02B43FC55FD0A6316254ED468F741E7395759A20841DBDE17
-4AB21CB72FF342FCEA6575AC296CA46319B8A9A93764CB7D3C77C3DACFFDD7B7
-8A5DD5AEA5998432570A33F65AA967FEF7F8137E6052AE628500014373B5290D
-46FD388981A8ED2A20D013014311BDCD68EE0581506471CDED6C329E6DCFB6BB
-DC7AC884051FC823615983DF039EB643280D351B8965D94633A6E4DFF8FA2F12
-CA651975568B9A3A07395436DF29D8A97C458A0E86C5BBA84D7212D6714AD79B
-7D778591C2BE6C3E88BA4E5388C7FC701F906B226FDE4238CAA5EFF4DF572D81
-B4AF9CCD374924A67F02D1A9E385395362DA99C838794380A1985BBA0F2B54A6
-3D3B7C56801B0EDBF283E46BC589A4931CA83BB358EFCF8019A20F2C8DD49F4B
-93BE8D823F2C6834C058263C5BFD03C77FBF3979776BDBE4AF1516583F90B9D7
-0C4624D4B54F7ECC9112C6A7DD233A0A47B2CBB828E88C62E8F6AD478F580BCD
-D0A8CF52E6797BEE5F0B067499D90E7B6ED5B0806FA5447453C2D5FBD8C27E2B
-096D2B0434954E0923FE4B25C75A7290570FEDF52E2AF39AA99531261F734CC0
-35A8E3E4389D43341AC6D9521ABC7F2D7C4512775DEC7F2FB86F59FCED236B51
-6FFB3D868F762DA6CB0645E75B28FFBB50DF060D498974149C5F5272A67644E2
-B4BF6720A55B25429C59D1659CF6F3319D5CA32505F7B16733FA0F8247FCFFC0
-BCA6B2C18A8C326F5CE96C37AEEFFEFA6DC668062691E645A4AE1817F81D7707
-3A82C1BC4D5C1105FE569704B54843BD516281F2B310180377A706CEE4E9D41C
-23D461031C71D86397D7DFDE8965F41CA3226FBE23E02FA95A10A7AAC5EBB5AF
-E0CC4CC81FBC8E949C10C8E95B8216BF179A897446D7F77D9748008C5896CB98
-AA5C395F934D9769019B9EF28D3F047BBBC42CC6878AF603A37BF818391533BC
-5E75028F0B08200950A6C534CBE9CB1CE9C6A1E594E5C2C53D21E7ED4C50285C
-C6D8EDDAE21B980FE488C265BB0527F17491246FEC9E64F59B0060CE7C78FDFE
-26BB1880CCB8F7FA4F01F5E318697A1C36622E6EF6609FA44164984D730375C5
-093A11B97FAE1C1550217E15CD94C58F641199AD6F91AF0E215E18D87750842D
-3AF4E3425B22736D3AD04E94C3E31FAB965D8880EB70CF21BEB13B21B533ED06
-FB16C732B1C073813BB0E5DBC81F4841FF049AA0BE805186E095DA7746690028
-FE8C23D443FBE964B06034A5C927C8BF5C00FCE579DCBF64664A08E1406B1960
-B49A9C253BE7E8A1D08C093FE5A35331C02C4B0292EDE031DD8AB82F5BDA7F57
-2CE752F97CE43F828A768C9499993326F68FF2EDB6D58C7E5A365A1A43BF47D0
-3CDA128583A3FFE7B5D05BC29249B0A1A19BFE4EFC52010742C70AA8A901A320
-822403AA573269366356772E3CA6D57627C05FEE370AA99F8208DB2E9BBA0DF3
-5A41C973E97927D16A110D8F775361DFCA3CC8B0E02C8FED2B7653B78E7CE4D1
-73B897D7FB96307681DCAD93B5DA96D071DB5E6A8BF7833CA3E0286D86ADF49D
-794CF631DB84A69000C1BB9144C23BE131108023FC32D44129689BE0911C44F8
-F27C08557BCE6E753F21B0D1B1
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR6
-%!PS-AdobeFont-1.1: CMR6 1.0
-%%CreationDate: 1991 Aug 20 16:39:02
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR6) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR6 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-readonly def
-/FontBBox{-20 -250 1193 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA17D1AFFF95F4224CF7ECEE45C
-BFB7C8C77C22A01C345078D28D3ECBF804CDC2FE5025FA0D05CCC5EFC0C4F87E
-CBED13DDDF8F34E404F471C6DD2E43331D73E89BBC71E7BF889F6293793FEF5A
-C9DD3792F032E37A364C70914843F7AA314413D022AE3238730B420A7E9D0CF5
-D0E24F501451F9CDECE10AF7E14FF15C4F12F3FCA47DD9CD3C7AEA8D1551017D
-23131C09ED104C052054520268A4FA3C6338BA6CF14C3DE3BAF2EA35296EE3D8
-D6496277E11DFF6076FE64C8A8C3419FA774473D63223FFA41CBAE609C3D976B
-93DFB4079ADC7C4EF07303F93808DDA9F651F61BCCF79555059A44CBAF84A711
-6D98083CEF58230D54AD486C74C4A257FC703ACF918219D0A597A5F680B606E4
-EF94ADF8BF91A5096A806DB64EC96636A98397D22A74932EB7346A9C4B5EE953
-CB3C80AA634BFC28AA938C704BDA8DC4D13551CCFE2B2784BE8BF54502EBA9AF
-D49B79237B9C56310550BC30E9108BB06EAC755D6AA4E688EFE2A0AAB17F20FE
-00CD0BFF1B9CB6BDA0FA3A29A3117388B6686657A150CE6421FD5D420F4F7FB5
-B0DAA1BA19D638676E9CF159AC7325EF17B9F74E082BEF75E10A31C7011C0FFA
-99B797CE549B5C45238DD0FADD6B99D233AC69282DF0D91EA2DBD08CE0083904
-A6D968D5AE3BD159D01BDFF42D16111BC0A517C66B43972080D9DD4F3B9AE7FB
-11B035CE715C1218B2D779761D8D7E9DEBE277531BD58F313EBD27E33BEF9DC5
-50C7821A8BBC3B9FDF899D7EAA0B94493B97AFEAC503EB5ED7A7AB65763C9AE4
-247C7C9B60444EFCA66AB8108DF1085D4F3D758CA672BC89FD250646AAFC9585
-F7F8583BEF48D4A97DCEAABEB778FDFC2AC2789D6F4E1F0D9237205E6210893F
-77BC26458D7CB35B844DE20BC63A4057AEDA379413FB28B0C7C9A6AAC97CEB9D
-5F712AB7B25A697092C13D2042A04EA2FB36836E425CB0C97A9F30C6758FD6F5
-2E4A4AFF054C14C7507A4D90B76F44A240D2709F26814A24C405E59D5109948F
-87A93BFABAFE124C8D58EDF774E060F599847C6DA5E7349BBD7791505BA1AA41
-C047310EA5BE5555F3908ABC457CF1E806AE9D9ED134577DA0DCAA9120B78425
-571445724A1D1BE4A49A88C16F64C3E73CE74A68CE9F413A0186BF50527E3378
-0BDC374D6775CD1A60D04A2936D6613D91023157B2277815D3EACBBD0F5EC49B
-E10FB601A820B3FBFDE967AE881960711947F2C00DF744E3E29D6783D3F10D95
-0140A5B62877AA3A89794368D3866910416393C21EB2C8D48B36A3175ED20B45
-D3389ECE0C0FD0B8219CC0FE131BCADF70835C1ECF5B3B45D25467E7035313D4
-C9D0DA39FEA7F03DD763174C09C7F59D83D484E2C8151DB2A52428C5EA3A0649
-0AE2EA79DE5DC679CF978D3CE71BA42811E1DE2CADA4FD5618AAB6CA11976402
-57E5F5448863B4B0123088E8B1C22853F731BA9797197646BD327D873769B322
-12479C1813D4DEB5E9C7CFE623DC65CC67B381FD18537BD381FE8B0EB0E65407
-D5C970329E61082E5BC69152FE91373CB3773CA987742586E6ED8C3016011724
-E3F5266ACC8161A3E60B779F99C62483289B8F5FAB2A65A2B3EF026F50521673
-94318A800C2BADBE0F256E2B0B1BB9DB90996B17E39E5732E0932EE71D94AFA8
-6B5B0E5DAE5C3DE55A167544D9F315D7DA1DC1DE8B00E14164B941F136801A81
-FDBA98CA9A96D881EE331F4B45FF396B54F7BDF32408863D62F39AABCB5B45DB
-5E1DFB417F9E79FA062244A32D847C0CE041A90A2375EA44ED95DFD6A7BE97A4
-69A896ACA2A8F3D1838AE43D8315F69DEA5DDFDB068CC94C5B0890474075E320
-A5EDFB9E13A5060BD2C45E855F51AEF305CA576A9785324F98652B3340F6858C
-0F936ACC0280DEBC3084E0C3BEA789D8E5CF803B7D72F2E96AD34D947DAFC787
-806C936F0F9D8C7C8C7AF64EBB2EBAD3A97DC56A775279BFE6FE5A17209A5DD7
-BA86A542B70E8AEEE4B53A6A7E389709156BD02E37648648A8C4E6366A255D4F
-B6D33EB9F9A7E96AEFA0E9D68268C3A5A1A8CEC390A244C6CB8F210C608F51B7
-769E52259B2EFBF44DE98ADA262AF6132C829EDE71A0883DC517E14DC0312DB3
-10899A3662CF88797DDE4BE8507121E7EE58D83F0761A5F9DFE463637560BE31
-EA5E7931C115F68D02EE832D60E974D5BB0F6025D28E24058E8E3CEE6B45156A
-70B4C4DB0C784FC5D4A95959C6C71C70233E3EBB696E813A2AE3CB830D6D07E7
-4F790752D9E8E6BD41C3EA514EFF1ACA2DD8D1111BE62A17120A17A6BF806CF0
-9E8FB18AFCBDBF67B15E4D45A3688E4A7108380FD6DE1491CDB932A7A8CBA1C1
-5D6770AEE80289FA6D6CF1460C151A78147DCFE4CF3A0A91BD7A14091CC7BA0B
-87F2E10493A80BC1E88A382088CA09806D7324018B3C832C984EAF9E801F08CB
-AB1EABE8C8A6E14AF293B5776C6F75CCDEA7F25431F902A1247CF5A101BAA8AF
-846E3366916058BAD88CD99BE5369D7CC3B143CDC0E48DA50BD130997962726E
-D50E227D7171951F42C60857453E6574084AFFC583423E902277E7F86BCC93F1
-C7A8CE812F89B20FD8FBED0005CFE83303F61369405336DF24CC15745443E9AD
-8B49D9F29798735EF6892E925C254400DA606C657DE585088692AE468276EEC8
-4544F24C068ADBAE403BB7D643AB02A289097A3E87E464D1E2DB0E7885AE8B96
-44C08FC42CE55281BC901F194CF9FC24755DB18845D8FFE03F70A9A2D70C7097
-46B7CA5F10AAE098D99DFEC165BA71A67381F49D1F09BEEC2C0348A290C1A1EF
-298DC0B5931CEE66FB6836A3C7A09CA9D8B37043478539426F6269EAC21F5ED5
-59AB35645218CDE8946FD4468608D539E0AFC73812F41C6AB6508CB796B50483
-C268C21A06BEA059D0EE331836A4E242E243439655BF0EEB18E45E6DF5BD75D3
-1B5E0112FF2080818146214D1A6F1CF66F2FAB4A4A975B99FE8282FB68D29032
-EA0AA51B2810F66E0B72A8CEC2BAA30E88AEA22B3A30EE6C66A1DF6D4273EF6A
-FA09EC1CA0BE4E156FBCD5029381E0368F42E466B2078639AE281C31F5B282C6
-6F621D7371113AB536EFC242766FAC1696D1902CC514E8444D8C977FEB555E82
-32C08EEEAF5A8820E4341EDCC6E98AB6F0EF6EA5F5CD18D1922FDD273C61ABA3
-1AE8EF4874E27B005CE5D1308EC915999E62E44638BCB9116A69A202392A8463
-CD263C86FDB8E0CF5E25CAFFD32F824F9475232A27862EF2723B84B35DBB0627
-37579F19E21253433D9BF96F4C8841331190F924CBAE983DFB9728B0B896879B
-DE3A0D087C1E16BC93D734757D327C31866CE6B15DD65EC169CC2B9C5FEEE538
-E5B8FFBFD3BE85FDFDFCA09EA4491C539D79D4F7
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR8
-%!PS-AdobeFont-1.1: CMR8 1.0
-%%CreationDate: 1991 Aug 20 16:39:40
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-readonly def
-/FontBBox{-36 -250 1070 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA1772CE422BB1D7283AD675B65
-48A7EA0069A883EC1DAA3E1F9ECE7586D6CF0A128CD557C7E5D7AA3EA97EBAD3
-9619D1BFCF4A6D64768741EDEA0A5B0EFBBF347CDCBE2E03D756967A16B613DB
-0FC45FA2A3312E0C46A5FD0466AB097C58FFEEC40601B8395E52775D0AFCD7DB
-8AB317333110531E5C44A4CB4B5ACD571A1A60960B15E450948A5EEA14DD330F
-EA209265DB8E1A1FC80DCD3860323FD26C113B041A88C88A21655878680A4466
-FA10403D24BB97152A49B842C180E4D258C9D48F21D057782D90623116830BA3
-9902B3C5F2F2DD01433B0D7099C07DBDE268D0FFED5169BCD03D48B2F058AD62
-D8678C626DC7A3F352152C99BA963EF95F8AD11DB8B0D351210A17E4C2C55AD8
-9EB64172935D3C20A398F3EEEEC31551966A7438EF3FEE422C6D4E05337620D5
-ACC7B52BED984BFAAD36EF9D20748B05D07BE4414A63975125D272FAD83F76E6
-10FFF8363014BE526D580873C5A42B70FA911EC7B86905F13AFE55EB0273F582
-83158793B8CC296B8DE1DCCF1250FD57CB0E035C7EDA3B0092ED940D37A05493
-2EC54E09B984FCA4AB7D2EA182BCF1263AA244B07EC0EA901C077A059F709F30
-4384CB5FA748F2054FAD9A7A43D4EA427918BD414F766531136B60C3477C6632
-BEFE3897B58C19276A301926C2AEF2756B367319772C9B201C49B4D935A8267B
-041D6F1783B6AEA4DAC4F5B3507D7032AA640AAB12E343A4E9BDCF419C04A721
-3888B25AF4E293AACED9A6BDC78E61DA1C424C6503CC1885F762BADD50DF87A0
-8B6D1BA96CC415579DE9A26786F37C6F37C57E20559A06FBDDAFB7A0421BE3AF
-ED947D999B9B6FCFD973D2A9CFFB2C38CD1F4E83DE081288F2654E747F7E7BE5
-32FF02074DF581DB456CDD381D834EF577A7DC94FFABD35019230545DF24B281
-3C57DEDE6580DFF703681287F31B62A0DF73E0E08FE3E8D4F3BC58079DF85A2F
-9D66DE46A9D3F8F289BD78DD2641DF574F334704A570AC88AD21D0EDA5E7660A
-5ADE393595DB983117680F836913355EAA0C6DBBCED2E7568D988462897B5EB7
-F32692135C9C6ED6E12978DDA350CB2BA64D433A908E31F61761C23FBF18DD4F
-987FA6D14562DDEC9623FE5480255072140CE23ADDC4B0E867FA871B5D1CD62A
-0E07EB4CD8067A363DB0FA8E9A81109A1028A076A716CCEA3D569950E2683B60
-D0E5EB6611DA3DD784FE69E0425E19731170E3FD55E533C4D2D9932B5CC8CE59
-D641D0116334D2360F7A8681ADBB014895484FBDFD0B903E8E15DCB4C5207445
-1AD1EAFF6D9EF7EFD9883B95A6F179D2B108CCA419643B31658A4755658130FE
-E210089026EBFE95DF621F381F7236E4A407F8298A30E5F704C28A1C5F64FBC3
-9991B88BD657CEAD53805B2F61F2264DC7159572C18E5537886145C22574845A
-9A616E5D4C2613192073481EA165A94547E0337ECCEE93ADE0281A913C9B4045
-C3165427682AE888369D9BE2A3333232979FFEE701652CCD553F4909D0A99FC9
-C8C851B968ADBB92C8550384651FC30FD010251D792EBDF4BCE1E241AFEC6B67
-EDC73EECA0BA12DD9A22937CACC49F0AFD3CD7E032C248F70D2D338CBC6E9B34
-205C184BD86663C972E37D05E01137415E2F27F6AA774530FC05BB3DF616356D
-4FD973B3B74C43EBD83CAB8E9F72D1B4278350321E4894587B458BA313029168
-AC14916C7FD5788B4E4A675081CE6046FEA28ABAEFD1ED7C577BB74F66F5D8B2
-2F355DECC234EAB0DF594B9C9F11A3415DC4734AD1E43CB4311C8DB693F2ED84
-C70A36215C4D146DD4DF54FAF65B8C7A2B93498B4A74BE58B40778E4A881DC38
-D180B995251CC4A6AC8C8979536212CF023C0EDA692DDCE760D3A12C108DD40B
-C86B0A2300B94E7AD95EDEEA99AE3A034F21E98FBFA2E31621DB4BEF674CBFD3
-1FD6102118844C29CC3CEDB9A9BB2EA82C5E43934A7BBE72980855283C3BC562
-11292ECCF4805B390FC29C3A5C526D4B365ABAECCD0B5D4C71CEB495B455D836
-548AFE038A03F581390C5AD5814F6E395DAADB1B3E93BE91AEC7BF5CF9220A6A
-91DFED453CB4013B89FBE39B32CEBFD4BF498FDB985407ABBBA84784FBA1EB9A
-41B2B9BEE5865DDC8658920D96B6C26BAD0A67EC5940E5C34A8069B1D31695B2
-C7095A0A5C74A733436960E3F1FFEF9DAB3CFB3842F2BAC3D6498652D3CCD618
-8336FDED8A3FBC5A0B01013E06B10208B94A5BACD939B91A9251F8EFCD0A8970
-A7D19A1CED133D1BD4A1FCC33C0F11E3490B80DDF8471C1BD826ADC77894C7D4
-E69C826EAB793FA6C1C942E9FBFC416213A66B19710A34239758CF055D6C4E31
-39DF5B49A21E433E299C6E03E290CB2BAD44EED9D20C0B39FF6B0AC8D1D8D1CC
-28196F69A3FE2FD78A65DE47387363CB633080D42048FA14A7656346EE34F2B7
-2472024F755C094803EF3AF917C4D7FC183DFCF1D72D73B3BE40BBDF63E621D5
-A07A6FF8C5C5D1946FB877AF00585D260CEC0051128927F0E68FF4743BC2C5C4
-7AE2F82CD28D717E155CD2B8E0880948EAE84A3CCE30B01E8445834FB3D3062E
-CD7E6E84C549D73F735141DCB74390924EF902F7E053BB7C65403B96B8AAA827
-EA8FFF133A6310BEF8EB5EC3F9FF7881EE687E31DCB5749B41933BBE086AADF0
-877FAA01AA390061EFD315FCC44BC099FB6EBAA35070B8A12BD44D474201D42F
-C0C0577AC0AE21FD682D9A50C71CBB8FD5DEFE37AA50B2D69EAB483FE64A7BE1
-920137441DB5EBCBE4D0A1CB7E06B31282DB73B910E33C628EC5267DCE7723FA
-456259380153BA68A817869C62F315C4BC750E47060A0B467455E72C872003E0
-F6E0C3B4023424950373514C099D10AB46348B0CFA3488269451B10CD072DD61
-1FABCA5E1A488917BA120F9207EF7F3E07B473497A77A0043925E52BA328C105
-6D8B680EB5C7648602BE3CAD4C37CD9617C17EA141AAD191CA7FCD23A6C473DE
-9F4B38D38E0909B3C5969F6B592E35ECC11618FE0B8A7DBC2D8A5585DCF4FD20
-47D07DBF38A9439CBD3D17FDE6AACE7C5D2F9F2881D6E3E92A4B51A42E4415AF
-E3784D7921DEEAF969C8BBDD1EB0499A88CEC7C4B098C32FB32C8B95E9C3FF6D
-97269D5D5A1098AC4AB4EAB8839C3AB34521A16203C42550373AEC6A18AFA4F7
-E15946EFB23467C26C09ECFC832B1084414F20D39123FA77522CCEAA63F11857
-D69CEEB988FE3B57C2A5781FC235F72248C628631D9C9BE8AE25E34FE8E3629D
-82EFEAF0BEAF6F237052E4B398AD1AA82CA20EBDC707C3DCBA9450AD2D8BF9BA
-220B4EC5CCA2E03F82555CA52232656942752E80C50A2A339AEAE834010819AD
-E40B332499E2E32DB9EDB7C65964CB10532FCFC0BDF028B0
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMBX12
-%!PS-AdobeFont-1.1: CMBX12 1.0
-%%CreationDate: 1991 Aug 20 16:34:54
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX12) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX12 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 34 /quotedblright put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-dup 63 /question put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 89 /Y put
-dup 90 /Z put
-dup 92 /quotedblleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 124 /emdash put
-readonly def
-/FontBBox{-53 -251 1139 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712
-B1805DA88AE375A04D99598EADFC625BDC1F9C315B6CF28C9BD427F32C745C99
-AEBE70DAAED49EA45AF94F081934AA47894A370D698ABABDA4215500B190AF26
-7FCFB7DDA2BC68605A4EF61ECCA3D61C684B47FFB5887A3BEDE0B4D30E8EBABF
-20980C23312618EB0EAF289B2924FF4A334B85D98FD68545FDADB47F991E7390
-B10EE86A46A5AF8866C010225024D5E5862D49DEB5D8ECCB95D94283C50A363D
-68A49071445610F03CE3600945118A6BC0B3AA4593104E727261C68C4A47F809
-D77E4CF27B3681F6B6F3AC498E45361BF9E01FAF5527F5E3CC790D3084674B3E
-26296F3E03321B5C555D2458578A89E72D3166A3C5D740B3ABB127CF420C316D
-F957873DA04CF0DB25A73574A4DE2E4F2D5D4E8E0B430654CF7F341A1BDB3E26
-77C194764EAD58C585F49EF10843FE020F9FDFD9008D660DE50B9BD7A2A87299
-BC319E66D781101BB956E30643A19B93C8967E1AE4719F300BFE5866F0D6DA5E
-C55E171A24D3B707EFA325D47F473764E99BC8B1108D815CF2ACADFA6C4663E8
-30855D673CE98AB78F5F829F7FA226AB57F07B3E7D4E7CE30ED3B7EB0D3035C5
-148DA8D9FA34483414FDA8E3DC9E6C479E3EEE9A11A0547FC9085FA4631AD19C
-E936E0598E3197207FA7BB6E55CFD5EF72AEC12D9A9675241C7A71316B2E148D
-E2A1732B3627109EA446CB320EBBE2E78281CDF0890E2E72B6711335857F1E23
-337C75E729701E93D5BEC0630CDC7F4E957233EC09F917E5CA703C7E93841598
-0E73843FC6619DE017C8473A6D1B2BE5142DEBA285B98FA1CC5E64D2ADB981E6
-472971848451A245DDF6AA3B8225E9AC8E4630B0FF32D679EC27ACAD85C6394E
-A6F71023B660EE883D8B676837E9EBA4E42BA8F365433A900F1DC3A9F0E88A26
-31BADF9D4A8B8AB7F9551D56B767E0CB134C7A7C3AF4EFAE9BA8007917CA79E0
-8E7B8E95E6955777B6A216B9315B38CEC1C94E82D973C2C03C5E08BF0C4E7EA7
-F04072D0AC8A5CD7046C378382B2A09ADF5573A15AED11C1329E4D332C89025A
-23470B8FEC12FAD9E3D99DEBBC9BC9C20D63A8DEA6D6DF84E4E248C86801F209
-8738DAC9E96292B57F5B55C69231BA247C8BF5C6328935743FBC401C3616C58B
-2B8FB16101F7A710AD5AB745F4F5B77A20EE32D435BCC888FCE3CD9E648D10B9
-8CB5F28384EE11A3CF8DFEAE4D09327B09B26C49F5563CB82A48729EA20AE878
-AB0BA32FA28829138EE25BEEC9C1F5074B29A79CE7CB6F64367CD8A5A931511C
-0179B300ACFB5521324E57A14B97B31F6D1E1FEEAE39CC1345CFC12890C51ADB
-EE1427F2B3BBD0E8937215F1F066998ED86ABDFCF3E614E3354A1A0C54EEC159
-58F976928CEE343C8E91975A59F149E11D53E74B3E38BE9BF42B2A2BEDA73113
-416CA306CA631BE9A259F150ADD9A8EEA7640A9EAA0780F9F1175A80FD531E4C
-EC8A3849C674FFE4380C30E69095E841824E787B740C42E415762BC05150143C
-A11F8270C4875DB0530189CE6E04010FEECFF00D18F008112E0565F19F592378
-ECE719D216001ACCC47FEC09123F566E9F58D7275BCCC05ED6E19707A59A841D
-7C1E6C17603F069B5432D80ACB5FBB9EB8B210E1E58A4CCD7AC302271C3C3C58
-E64C0CBB2E96AC52ADF7C55EFA5492DEDDC73140781C09E8B7B2746B3F178A41
-94B1765A66441406D1F8839423AD7154F853F8F918258D5B9649DE7FB974E2B9
-7831752E86FA4D9B64A7262A4EC9C78FE4C9E14E39EFD4AE26383F6501B2373C
-6368A1F9A2278192F6FC9DE11DB537A94F45DD4C21C7905AC5A3B303B733C091
-28D3576F4EFC863A1E91F6AF21AF44C84B31CFF7A5BB63FF594222D6546CC0D7
-9DFEEAE8B7ECE67C0540278463D488CA27D7EC1BF8908D18D82358B4AF11C60A
-734E394AAA20FCF94AF2B881F805D8BCCA3FBD0749EF20A2C86CB8536A076972
-9CB1C2889E182297B45904FDB6BDCF07C112A827401BE9FE57E49F2C6E647DFA
-7787FD65AEE4903E99DE269E88A998874835D0ADF014612088FE2E5ECE53EA3D
-331F119199C612FF3F72EDC9F09538F4883E52E3DCA31F70E502F7275D3B1ADC
-FE3DA2D65153C4D3305E465C32A651D550B612D3126821FB211285EE2A0B97AD
-11D0F21B20EBCBBD81DE360B8061BF2FC5B2D321C270DB853FDF60F166F794F4
-FB9321D9BB4C392BDB46A037466FD0C461DFDE7D2AA8CCF75E9A79FD19ED8A08
-1B1FFE071F218323135310C62D29299DBDEF5F5C554BBA73D9381A5E3D7DEE6C
-D25AC81527B935FBBC1B04B21A5ED4FC59DE8B6C10FAB4D39D86D33348052CDA
-25E114345A8A05413D39531484087CBF92934AA3AC20A5A19B933463D077AB8C
-85892D23D1BA6B05AB4F4FDD4B61CAED6822A4BE00E79DE49ABA6A22F43CF7E4
-E7E81CDEAE3CFC1F6B197E2777573AD8BA0F8D6F1E31C4478AA60A5FFEFE2FB0
-C27A92049140B1E592FF36244F9CFFBB56D89B4523D024C4CE3EE14A78FDB029
-73246C71C68F1B063619ACA51CB3771E7385E272B4D85A447D07F1294B392768
-CDC97F2E94C67B701E459B0A3F1B0E8131F1207D9FCD34DA7753DBD7CA765231
-DFFB32CA1967A3BCBBC0BB8CA9C7A2BC450955CB208F76857680B4B0F25F0937
-1F5C27902673B5CC9212DA464C2E97C939A30B46FDE0D2AF64AA54B9159C6055
-ADECA637EB7CBB4990F8699D49671EB6715D45B61A87E7B36B6707F71D227CF9
-41C44FE089227A340403071F8AA30E5A1FC2D009C82BEB84E08A8874BDE42B15
-7C11D5585F4AC1C44EDBE20D421982E64E945117CB82FBBA913FBCA3E31D87C3
-6A1C4757572B57CDC478C6C87122E9F6C90FDB5F5F5D802F246C6C6E0B4162F1
-AE0ABB7CB31003CFCC7BCC27065F8BD6BD3E86C2E59B68597186B65A45A8CB5D
-4AADFABDDE456D8F7B6CD064233BCCD2D74D150FD322E788AEC94998080FCAFE
-17FA2532B24F21F58220F860BE6203C7D2DF1961E4747BC669D7E1F7CB7D0714
-56EB2A50B61FA8448514697FA3CD47A6D1979B71C9FF6AA2BA1DF92D286CB4EB
-1E87CD3FCC8C5BEA5D32864CB3116D567146408541DB66D4C9EB53E7126E9C28
-812DEF847D1B0038F97B6FE6D90482FE16CAB59BD919A6437D55CC2790CB0176
-548849B93785C3DF03A79AD2DE11449AECD437EDF63B9C1B4D5900DD81206712
-69AA9B81B7E80A3AEB8449D997E24E95B50ED4D024F803C1C9FE74F32D9B21CF
-C7F0A4902DCCC4809DB0EFEBFFC7E8765611EFA919E88AF7C9EF9D4CBEE4D67C
-35A1FC24A4C07FDF97DCC4F4289F3FC20816713AC68F64B556478DC61E9716A6
-AFAC0BEE693FD4B9CBF6A249EC4B158B7D976030A3E298377981C8362258B373
-309BBC7A29B18BE67E3BCD2CDD0F8DF937DAEAA3B84DD79F902D1A19BB74F8FD
-74B1F7C923F3BC4F5DE58FA8A81C0F7B4AC12AF2E340DC1E032A034A6CDB1E14
-7F476C09F68BEBFB34303AFBCA5DDE73FBBF612ED04870F4E25AF3AC09D4B009
-BC00CFC6B5F3A2743A46BBC511A4112BD332154FAF563EB6F2FDA470554B16A4
-4A30E15E39A579D3026A6E26615B858B6B925FF867553C9EDA802FC11826AFEE
-3315ABBE67B35DA3DC7E1B10252D693D79F9F11E42DD7A6B07E1C5CEE13DA56A
-F37234D87D877C7C59E9E9E3881AD9B43479CC6C3C1BD8387F0FE80A84EB429C
-84463767A8E88D8DB3818C27E940A5E6E99626AE04A11AC018C044736EF99D1E
-478FE9022F9B4C3EC7C23CA196F2E007DE9FB5EBCA32E917C6B6C025FF0B2D87
-440A3E5E5DCC03E9367C2EACE3D8BC58235DCBD67F3C1F09ACCEBC437864B009
-BB7B7A97B0FF1ACF52DD7DF665CE08C615C27FA89FE02CFA057A4D37DCEA4A90
-9F899B7D50DEF62DF60287F5D4E9AD34D38F766A32D8AE413A5EC79A7A1E06E0
-A3DFBF6EE3B89CF49E2608D21D5A9B4AEA6DCBD54B8BE7B7D3677D434F75AD32
-9D9519E3A1868CE2DBECAFEFD435ADBC249CDFCFCF0022D8B9BDD683A26BBD7B
-CCE0C46CB371ED46C072840D9DC759A2E3E5256E2FE0C02E9935C1F0AEECDA8E
-09270BFBCB58AEE312B48545D693A8D67FED462FB1884A9B8A359227F6B98B83
-EEE7638C4C4C49E6B2FD4A345B68BCEAD175FB38C840F24C040DDD23B7CB6C4A
-FE7F1CE9078424610B72BEBF01AC38C59C5B96994299BCBE87CB8EBD252858A1
-A97253A4215E4F2393E05742984773DE6FB721AAFC61416E3488C44302C3CE7A
-5D716482D69DFB85EF789C69CD59EB061A0C82B1E7DC26FF4C9E40CC829329D6
-77125D2D505FC762C4C2BA41D13CB6D4F24CF77FCB6EBA610F2206749F59D00F
-4BC072A8A2256FD9B622E29029A142E4B3A8E73E2A7ADF2892B22E8479F0786C
-63557B164B99F4C86B3855C7A705170DC455486E5E12327605EDC60ADD5577E1
-B6CC53EA84161587753DA9663809F4FD12A5746FF9FE8EF5C7F09D0B4055779B
-6965F1194CF69F654A842808CB9AFAB1690CF47137119F0497AED5F4DB2CB02A
-B76B1AACF790F8847763C93058D476D65D84E52B0D95004009347DC2EFE550D5
-7D0DE92F27958F573B1DFA14412F6FBE4FACAD0560C7084770525F9F3F9D8EA6
-51806A0E49E1E19BC368F9031E41035DFAAC8484F3051AA031FFBB746FFE9681
-44E75F9F41990ABF86AE793BAE3B12E37896613EC8EF0335042F71A2D548805C
-49AA2CC0769B5D6634EE35F06AEE51988D0262EEB97C956A4F0FBAA1C157A2FF
-CD6A7D43107C125DBA1E68B86E391B70945C5F07737D9EA027824EFA2A963D2A
-FA1F641E45411E17D1602D73B5997776EE540BC02237A3BCAB3CAC4B63EB8045
-61BA2F07B3EED152C747E1F90E26F2663DB63A7B0C534F1D96D08237C3A983ED
-14B9C0907ED5D79E675B924E095D59F177D4493FFC3141CD1EBB592118769AD6
-4BB6AA687F275E452C435772286982C8A0EFDADAA79367087E94A86566D1D646
-040EFBCA57B792FB4C709E6679F1550674AF3577902A402D2236BDF1A124862D
-0E6DEA0459AD2A12FA66115C89A530F4495321DBBFA5D500CC75BDF82695ECF8
-75072C11CE4F31D74E042F601CA1CD2916FAF3510121FF590E3EC5300CF36879
-590F6F7C1B3552B1700FBAEE412A7CE39E42730C51168F6E4F6CA1D60446F3E9
-353507DEA03DF4CAD9C4F674AD2EC37BF7F077E7BC2D87DA434FAA25D0E5986C
-0F1FAA70DD0DF742A1A386757CA112509986EAAE5839F95369B1EA8D629E2363
-A584EA90182886644878CEC168634A47DE9C41D1CED9D3D0B2E34CC9615F6CD9
-E201B929BBBE9FEDFD8380B42D7315690D69D0A7D0724A8F4C680B0539A51E22
-3FB87D014F3AD8A1595E8F7287157E94996254ED88618999A9B795AD9731968A
-214919A9DBC5B1CF965903CF2A8DFB9D4CC00F2C0AC0F0E59320ECC1734726BA
-1A4950FFFE0EAD01F5066371FC815A2743822002AB3A625872F5E0FD0BA6007E
-42967C96D8C33F40243C7831309B1D73FCB29E26C11BFFC8AF961C3092D344D4
-36FAC6A5B9D7AD8231A6F0C22A01A715942F8BCB92D0F3FE746EECF376775643
-C23260B5F405C944E7B96331B416877B045BF1B2CC6EF7466BC0120BE79AD225
-333064E57FABBC2A96B4CB91364D8BB70E26D7B20BBE883C8633EB86B25B0342
-095465D254CC33E4D16F438DEC851469D826F3B60B603B1C1EF8925EB54D8F52
-25B709CFC5D0AD62397043C35532740789914EE690D548B16ACD312A240F52CF
-520ECE0F4E4F2A88B93EDAA0DDFAC140BD4B8D28AC4E3968668B922F9E1382C1
-13C8BF2E83DCF712B7AF8F96CAF36F0EDCA6FBF2C53E556852D03C9FCB655A85
-A4BEF3F02045E80AA5CDC5DCD88D191816416640742A0A69B3530A1753384C7A
-5E0BE7DBA7337C3EAF3045362AE7EDD06A4BA28BD4D0ABFE1DD8A96B41206F50
-C3657DC73AFBD7CEF7C280A0E84704EE66AED813136A1B2135A2BACE670DEB2F
-00B89E8362E51939D6FE6E1994736FFE3701A3EEC6DE22D83A54E47AFD8D4BE6
-50731CACDBEAD7B353C7C70A457EB11BD829C318652AAA6E78B448A176684242
-E99CDDEA87CFB7FDE7596F727DF20AD60FA7DA1FAD59D07376BB905506144ECB
-AAABA35B6CA476A4E84717589CE538A34A9CE12A1023B06607461422EBD29198
-D66C3550BABC5CDA548D1D17053ABB1CDE8BAD0E79A5E5446526EB48F943EEBA
-B4CABBB898451495828869636E507D1ED10BF8A078AA1ED0C6F9982F2A12A42E
-940F6F934F5370109DBBEB6DA2221D1CA22322079A0B4CF3D3025B8BCEFE9079
-9B239382EBDB60B029496BC2061CD37DFDE0D7A7C17EAFBB7B5F2C0CCC905003
-8AF3BBF861E2D206272C3BF1D67F81CD2F7766521FCE432498950F9420BCEE04
-944C1DC45679D11D3F54C90B41F2598074343CC0B689D6A257E514944B533532
-83C3AD092BB709993B1912FFF47D416C842E08E9A090469A1104CC802F8740C4
-EDED557C1C140A2929BD11257A385E38FB5D8A5ABB10F452352E64B06299E919
-A0333C30478E204BEE26959C5E72C39FBFF797A570F2A3A6791CC6909EDFAFC5
-CC5AB8F2CCE1BF24F46919B5E84FA1DF9D5EBC0FCE8C23D4FAD6A1549EEAB1F7
-C27E348B8055B997D6E807219E117950A223F7C94B21EBDB8A151192C5E75814
-D9B6A0EEECE02989613C94DF7ACC834F31B53B3BF83F62D15E314092AC96ED9F
-A4B4965FF754F9799FA955486089AEAAF6A65BE8B0A966C34AF7D3E2EA1FD2F8
-26FE9153D82FAC104C1CDBD8DB3DEBED96531426922885005B83D39D401480C2
-5A38158B992389ABFF9567DAC10D4ED00CADE3B8B69FAB0E8B873EF9F2D74FD9
-7D597E9E0FDDFAA60E39B29406D4084319CF68D6E886F781646B5AAA62A3B7AA
-3AB27D7CCC90DF224CD7A5E44740D166F355AAEEDF53B4CBA34E119C6098FCE2
-AF5BF9DA76D2B08F224E1A77007673C78E139304A8BCE38C21B4A9FBA7426833
-EBAAC46A7E3667A17A6684E9C362652B98A5EAF06D040AAEB41D9032E65F1BCC
-108668B04A31E217DFF00BC97E48433D5B3D56415C8DE148ABBCBB6093626DA9
-BE2ED34B7121977FF1191F31A079CC3FD58DD86C9E707AFC21111C6FB65273A4
-109634BC4886C25D71C317634A495FF1743557145F737362B8FEEFED4C4F231E
-BED255AA4022CB77358B1D88E89A9431DC3D28D09DDC916481C16AF44AEB94D3
-A41098A4E76852B63D975A2EF73D38D3714B924BE7BF104AFC213540FD8F0C8A
-CA0E475EA259D0A9B8CAFA377E15547A22626C4AC321BEA264DBC2B90B1F1C9B
-2ECCF142072DE53D41DDDF33B034BBE0EAE3674691E3DD2B1C47E5AA4C14E45C
-EB17EDBBD4573242EE8EE20E0901719F45074BF0FB5BD802FCFB890053D04AFC
-6BC1F29F45364240967EC7C0282200F467248C24E0E84C98FE8A48E3FD5EEDBD
-AFDB87366166CB35EBA1B3B40237EBEB30D3763A8222F5CDAE38303961EBB670
-013034ED410DFAC76D35710542EB127425B72C6AF57124FE44B7403B1B6D0084
-581F93DBEBE7D745E249DDBBD9C66EFA92405B0D6F6C3C4426B608A74D5FD824
-5E2191B88559FF3516ED861C937979916A10E31ACA28BDB1DBC9723086080FA3
-9F51EAC77A2FFCB1B1DDFBE7A9F60D476981EF91C6BE3B44EBC73B10D956E489
-08E3D33B212F5DDF704C663256DE33CDE9F5B496AB777CCFAEAE98618A7549BF
-B99A2008A4307C56CA7EDE662EF177D6134AA3510BC65D07ABBB84E183379A92
-001F96403C36C1BBF8E29DC6D3D0A3D5FB2323FFDB226CDBF6611B5A47E19D42
-757D9A913CCD4F4789E4628942E658D56AC59219152109238C2D5BA83DCF1383
-7C246912923A1B2BE94C59FF0F90C9861F8B76240BDD9DB9690C7178419C82D4
-57927A378385B91F053F3AC241C76BF9A8B82D2AB54D9DCA2335632AACB70BE5
-42C95F45C9608229028D1B30EC9E33AA3A0032B4E27DE9F6805D57F72166BB90
-199FF1935E705DAFED58E479414809E027C175AA68594BBB995E3D4DE2F0E5CB
-DA0DCF4E5DD734FB68CD75DDCF76886CAA5F0159BCD80D026327D973716C1B0E
-ADD57B4DE3DE89E9E5BAECBC73B994C4115DBD51BDD69CC96C26589B56325811
-F2C90FF7F4101FC6AFB7D2D057D6D304A264C1705259BFE151F7CC218D152902
-B9882ABB86FE476460455F2BC4BA77DDAFE36A6E206C4EA4409F29AD197DE5F9
-ABE0F02C8673DF769F386CA30886C6746921F60F98645E317AB07589504BC94A
-1E294F5CBC6D79FEE377DDE16FE24783E7CAF22240508BC19D1B3CFE0396C1D4
-AE60A20FBDA130F26E97FF2D12766950273FE1E0F62D80303C483A3DA022DD75
-DF8B8F035CE89D82A17C063481C0D2AC84FC1F85B48DFC2EEFCED63E0AE6EEEC
-99733208427D4C8FB4BBFD9C16E189F989B0B05A1963179035D0AD785AFF8D6E
-01EB8B95A399DF925CABE4B7C6F8C3B731A8C22D6173D9AA89A86E6989548936
-86D3C16DBFB5A4F91606A7FCB87416D0E739FEC697A2A953DDAFEE08462ABF79
-830613ED1055D4ED0266F1A5CC4242D65A53A5FBDEA2190CBE622C1E206B131B
-DB052E9F330DF6496A6DB5F51C0A98FDBE422743D2E2F4556752040F34ECB36E
-25F94AFBEF1DBDC4E1C29CDC8795203ACFCA8D9E68FE7E2D717CD0F496112C53
-80F07B027A3F4B5953DD2FEE63FCE79D42E5975AC8D22514FF21F53C22F103DC
-9D8C89965A563F10B2DB53EAC3E39C7020C5F72F1A8C507CD08F6E25BA0925E1
-B4412FE92E479BED95C4238CFB5853FD8F9BF2F2EB852E8643AEA49E43D3D2EA
-4AC882D27F0813C946CD47E53904B6788F2398E6C90FB4C4E501F640E7D145F2
-D0F3AB87E46EBFDC939B36ED55F2E83545022AFEEEF8B779C48CB583BBBC7C7E
-A5979EB281FA976D3CE56634EFC2D97FDB2C0A8BF2205C3DFA151392E66AC6F0
-13A47B884B492DBC48EFA6AFDAF32C4C2005763D407105B55DF6CF42A0D3E5C6
-71F0C0A530D50D5199D6F63760DB8366D58DBA5BB566C057C36847F7939ACDF8
-6098ED2A20937FCE73B4B788F12CAC91B55E842929D1F460D38AED1A9EBEE9BC
-EFAE47FBC4CA390BA9BD9CBC6F2BE03A10EA823D8FB337024CDA44621C295569
-449D208C13028AD40AA3E03B100EB8A59F2475B64415782FCA8250B588CE96A2
-0FD879ECF199344EF77C01A22776FC5C2C7AFE5F3E6AC2C3B5AF10912463F866
-0DF436A0F34ADA506692932581008F562424907146EAE3A8CF5106DA0CB29FE6
-34FCB7337741A22D954B7D10DA847C5D21E0310AB853E8F10DFA0164B547A1F8
-021B19A1F68634884B5810E0EB61144A45D1ACE4A7C4F9A9169A672A0F90D489
-19D02C00A5F6D2DE248C814C76F3C77F731D9F5D6C609E1FF64B81675D1D5214
-A7ACAF5803777F32386DDE1662DABAD9283869E9319B3CDACCE58C8E9D9B5B65
-194D92B0DD888AEC7082E23E844D7640A8AF08C6B3E795E2FEEA7136FD137E56
-ACF3A63A3F035C93BDE3FD1F53514BCAE12217117B046FCAB732DD5B71808003
-9519FCA7B9AD901BA54A41BA0295F82DD8E72753C57D4DBB5DDD7BDDF8868288
-70CA2E1E6E760E09DBD6DFF409CE9F87F61C6D234412A50EFDA6B98D92546309
-517F52A1C9C1E398A3DB99B12B5F590A218A76540E2F36CCE555E12B18CBA2A9
-34323F8BC7A1DBFC9DDE24CC31CBE97E7839B47C61459619B00A36BCA49A649A
-1E2EBE5BF6BBA4DD5DBD847278FCFA3B4F22D9E64B361DF3AFD99164FAAA74DD
-C424107F05F524C338056F180D36D410F10B8CDA4DBB37AB79B049A2478C9DB0
-CD0E8C22C02B8CECA74751F2CB725DC729F9171A371503C47DD13464DB19EF0F
-858D75A0904CD81389E43F334C3AC8703BC2889846A1EBBE44604220E9175A68
-0FD28E44AEF1B85C0D48C1921F9F6D4AB8CE9F8AA8958D5FBCEC3389835B0264
-07ACA8D8CEDDC054CB4BEFC1446A6191C6C2DC7DA04975B4DC7AF4BE4FDB8C3D
-7DA8FEC73C63C65397A62C84488745DC5A1C38EAA9AB7216021A279B0D9F5D92
-6B2EBAE5F6C0F63EED02774276B007644D52A1D0B302376A2417F233A400D4D8
-68EE54370C4803FB5341BF408ADD4D8E1932E49087883F5D4E9D009D9B13D4E9
-6C050A465C6E789870455D1FA50D35315CFEFBF31EC8128B3A2614B440EA2165
-7368D99EE33CC2BD4372AEA8109DE68187B6DA97EC0BD3F1E3FB031634CE0D35
-7C9A050954392A93D64927606C832F846DD9420D0D30942AA563FD17AEB9C6A8
-DC903BB60D7D2F0256B6E5C94EA62619E4BCC4E8673F0F14BF127407EFC309A5
-394DED4EF75CEBF13946DA9521E5102418E43C1E8EDE80F1A7B95139F1E81397
-3780A64A77CFFEBEB21A80B6522B4920C65F484119F44934A5121CED9AF3BE8B
-8F6BFFF1180A5B9E49A74412D1B52D8D6D4E5078228DEAA5115A2D9A1F942728
-736CC424EC12DADEF264913EEEE06A7006D23CB4838B0A66858EF0973320BCAF
-627B49CE02556343ACC375E6FE55722B12C8992C290B422409BCB56EB4B7921C
-848A66F9E4D99074E531081DDB99FA83F7FF91EEED3074713E2DE2020550007B
-B63D13C431DCC1796E6C7CB2B7D550B180DE9CF10683842094C99EB0C4987AD3
-38F4DD665D41A5AD9FA72DE8108B2B99065D3C3AFDCF866DE4B5D37564B9407C
-142009B5E495AF0E0FE17FE8EB7F2F67D519528A243ED76D9CB40CC9E69F18D4
-FAA2FB53F1279F48EF60357CA3CB7BEB91F93B06DFCF7C9C121A92C9332B80E0
-6003D277A20E1091C83C4553B8A21245A1D4CFDF653F12B95F8D3E71B1FF9457
-12893834FF808EC2F0ECD53A90C3BC6F7C6C6E5D790AC5B44E64D4C50CAEE526
-83DB5FDD8DC8FD3272DE8098A7BBDD2564B002198E92CDFEF2D0B2F46B44B29C
-BE936CD65E95601067C630921E2274422A7E99A4D12AD1BFF3F28FE2B448FFBF
-FF569FD4D1A5EF0A248EF49AF37FC6DD16A7117C3B3FFE653272BCE3641514EC
-77FA28A9A2FCB9E1D030BB214D97DE21077C9169E28952A9393DC5786AE63281
-AA1C312F9CAED174D8A6232ACE2C22B84F06EC3E5AE4153DBDF43F30488B71A4
-65A783E993B0A449030EAEB1E4088109BE42B57D26B03CB45FF1F11AB70AD1B4
-FCE6F6BE803C9C67369B675BE1198D8500FD66B3CBFB22F7E389E09F53F1F06A
-CFCBE93EC97643C2D39D44D9D115B64A87F2C44657D3A5468F2FB0C622368C27
-3605D02B67C3980904A09FBD3EBD381F21D01AF28AE2F02E5E912CF53C9CCEFC
-7DFB478B06671508EC99F2B3821E04C38AF905B433940C483BC3CCC20A571FB4
-EA0EB10FFD32FE4C5BDB144A9809C6D6E978EBCBD5C1689CD63AAD418FF2EB00
-C07026C402691479BFCEC1C3C9D0EFA023544707BBF0C4F2581EC349C329C8F2
-EC1C185775803127892305355EADC87555C3A5C7C39B88E8D634F6678E66AB4F
-7D6868B5CCAC69AB2F780691329EB50A3A5D0D2D84D2D4340F52CCA827A459A9
-9E52E27FC011C98F02CC13CF1B034603530DA1C61BE456828FDE8F6BD179E3DF
-31D20CF6C2E5C43243E89572B1A13A688984B159B85BABCAA891AFD141E2B4C6
-8A4AB955D06C519844A2AA16F60116668AFABCCEB8026ECA6C5B8401EFE42C28
-26FF175448155F403E56406888563C4CAA16E6BEC75BCC5B1EE5A4F5228A5191
-7A4C66DC74ABC6B947907D770B3302F587295E48916E048A233951FFFAEB38C4
-51D2751FE8D76F8F151E85CBD1411EF20719AD02ABB67763FA408B50A5F161E6
-6FF6E0C7D66D02C7D69B58450C9AD117667A64756125CFDCF8C5E87ACF1BCA88
-F285F1110AED5C105EB4692269716750E611D22CC87659150BDBD816C7945C86
-4CF176404B422F4A332D996C525C81BA60695D7683268516CA298247CDFB8443
-5F59A4742C9947CC3E86452EDA5454650FDE9BD847FF514FC6866D701F504F88
-1EAFAD9864B88B4A94185C738B8CCC7DADFF2DCA7B37E797C632A6E36687410C
-9454EB6AFC522016430BCC3D8109D379B70DDCF9DF5308B6EBFDA5E0FE2DBC0E
-6155E392CA5B7F1DF8B212800AB68A34AF59A84780FB4DA396D1B81AA4D7D1E6
-2A985DAE36862E0F46F7ECCF55D5B5FDF849A3445FB41D260A6C36897ABEDC6F
-81DFE56F96DFF7227EFF86462CDDA3E49A191D07BB154D552341EC1126402062
-0DB07461B3B2021911B417FC2A89EDEE5D3993269DAC7A6DBCEB51468706B12E
-A450153DCAFEC64B75A4ABC010A8109D5A8B6B2126042B908588665A3E08735C
-08D18A82AF444557C62F0CC17161507A46A0C18394F475EEB1CC97477D784546
-1E89D671A4E2457A39F8BECA13B1C3C40C7CC063E38A31A1349C92A7DBC8CD39
-6222232C5CAAE2EEC4818676F8747BA35CCEB287909BFF3468636265206D43C6
-FE79F77DE145BEB6EA506645716B1B2C0EB9989707A04AB4E2A9343D0CC9D3A5
-A295E5337B61E9B20861FD534865E2C21EBE959F323659088E0B969DEAB332AA
-5DE5A8752C9B94B388893F2B4E31DF3092F28E4DC3B8BF395B9683A5200E9F5E
-71C3076DDF1BFB6E43B5F6CB723BF555667DEA7B9A721DD41CF7B4AB95FC6476
-C8F8C3E295227651F7114B9582D10D886F83CC18102FA95137673F99E2E57D78
-9FE74CE4D3195E251E6347066FDE3CFEBC2D853997E467739E2B012DD1F8EFCF
-81F5567AAF667748448E815A08A3ABCE31322D1E87AB3F81C3B7BE8A5C4FE989
-1FB99A0E8DF0D3623F0AC0CC6FEEAB56021F4178849451EBD965EACCF1BFFA89
-B8AB1D92AC2ED3C8780D99A204CAEFBC4B730A9F510299E78790886DC7773E88
-9E7D8B1CEF34CE0A77AED44AAA3E3047064AAFC787041B45AD23554A9C300C46
-7177FC5976757D567D43337D9218AFA47FA00856CD05A14940A3C8B8178C2D06
-ACCC1995E035B98100C89B97220490DF8DABDB77591D5ABD2AF5D10D7474391B
-4B9CC1FFC1B4D9D5C2CF01842D734A727AB551CC08D5C7C90BC2BD8E9A38DCF8
-7495E860AB1F8F81B66C38891CD29C05848A220BA1E0595EC503AF941D1FF94C
-7FA2A0F1FAFBA1A4ADC36A2B3F145C1328A9D0772824357EA2BC8433E42EFFB6
-3990C948397C3D68A11390DA02E774BCFE140E1030C659141C8BB01399F2BD00
-1B96A1CC69F77DF652F68260CEC5B7452C6ED6CCEAF4B120C345650AEFE91700
-C5459550F514380FAD5F0BBA2508C5EB5496363271FE69D649D89A37E9BD04B1
-01432B15DA2AB82CD45D1F086A598E51823E227A745E701C10D7536FD61523E9
-BDED60BBA0EB265F94EB050C045BDD437548EC12B2F46CCC6F543F224644521B
-C7860AF607CF90C134233DF6AA783280B26E5D3BFEB682D3FEEBA0D2665A8337
-475E92C4D98A3B1A3B02F02B17F5DCB550C23947DA98661DBE02A44D03568C9C
-D6B7B96C8BE08FF89DD682B519534D177597CE791172EABC384292E5A1A55078
-DEEA6F352521DE269B40E67D127190B03A1825A882ECC28EBCDF85C78EE0ECCB
-5B9E63DA9FE68A90FF751677EFEC3821BF5184633AFF49178845495A91EB364E
-B1BC1BF93B7A062F018D76D276D4DA317FAA08D4B9A390C8ED7BFB34B2D515F0
-7416402669F4E7E6C4FC90DCB3D0F473648A9C8B172AE87B02C037AA31AE6152
-B73600B468D174CF249E407DB07D0D6220F6065B0CE421267FE06ED007A771C3
-0402B2F981FED37CD212FE893F689AB6373B7EED4DE64B2E867326AF8FBA8AE3
-692EFED1BF9DF46951D5F513F9942679CE7E9A17C620987B975ADE400C9808F4
-35726DE4FAAA1C676B0C83C52E7A027EF9AEC383BC1EDFE71F2D29FBC0B20EAE
-911B7E114124552A44EABCE4EB77A6FA41F1C2BCC8D8A39E5C337B6622A7B57B
-91596504B001F60804921E7C32D38D89124DB7109FC2C4FDC9A25D23ED6B3D78
-255C0E155CFABD8EAF060E8235DE285B9D6055E41C9AB269063B65B2445A6C8F
-73F992135378DFC36CD17589D1157AE2C76C6180FAFFDFEE25541B63F13F170E
-034902C00D6F155D77D7FA27E2C2BA9B579225D032B5BAD19242C976DD0DE208
-2E68FFDACE8DB27CC964A3280452E7EA9E2BCB592D6D2C8D3B3D79F1C8BC3978
-3715E110955004751B83E460D40E7729103AFFD778CABD829CC3048E25510A11
-2DB1879A99BCC146EADF5329079E8F13753CD057CFAE3376E35D5115B0F239DA
-3E024673C3240379D923AD6BB2219772E80CB027CE53C89373EF7ACFE38EF9DB
-61F8BB731AEA052D586DB8258DA7B9920FED3E4C834CD5EBA4261C4072A94184
-59246717250A9A74AAC7899122CB890A0F713B16E2D86BE0AFDD1D4DAEDEC5D2
-ADFB093E29E56DD2A80774BC0F3046E90751D4C59033E34A6E952F617BDAB8DA
-8DB611F32B0B15C9D7D407CAB63A14F04BFDB5EFB63EBAC3A8B69C4E22F7BC02
-9AA197F929A547C293F2ED65ED10B6270300FEDFB21000B1971B7CE06BEEFF27
-66BC049704FBB0254F2742D78EE8290E8A5DD5281EA1597C945D21A231DCCC7E
-4FD43005C57CD36AE310789AAE39BC3CC1A7AC9BC008C291911699DE6E1C2DA0
-B61EA2C6BCEC2F9B547C025837D6B2C90C22F2F992644F803C1DB5591DFE1C9F
-3E92EF348ACE485C11D9A9B082DA6CF912FB5AF73AEA2DAE1BAC6397F21F230C
-92A59DC9EFF4902804E6BE7FB18077227774EC29CDA427091617D12B718BCD64
-9FC339926A2D87C6FAA103CE20078883FC7FE0D3C8E5239DEA54A2D302D788D3
-7AF944D9B59B7BF52648A4C931DD9AA381406672B7DA8F7FAF429692FAD2CD95
-519CD8130239484D4EA1F011588A81946BD7CB413E9379E8657982C714C3F1C4
-E4702EF88446BA8ED439B45693A4DBA81E1D12F51275434C5BC8239D4ED8AB38
-9C1D7903EF56F62E101209C1146EA97F7A9BE7BA458F6E90EEF62B9EE7F4B50B
-742A8E80E29EE926188A8AC8CF1A9B0B1C4613A50F9E5AEEFB3ACE2E1DB154E3
-9412698E054AD73B611F110770DB58470ABD8C6A9E253820FE83098CBB2B9621
-CB6D9CC62F97013A68D7F7F51DAFAF6123580EE28939A913766661A31CC33D41
-D30695DBEC32BC0E9CF9C1CC5A61A6D91228BB1C344EE0945EFE6F1E28AF9D60
-3286FF60A724CD3F2F328594DF427BE835C33BE6A410DAB31A2BFDD3CA0737F3
-72B2022A449B28847F41985FB2CC3ED5DDB440927FB8E6C7B43A476429674279
-A044F4225D1388B2BDE8577546F059FA7F995F43956C072B022CBF9BF329C202
-1685F7C63A7E231CAAFB68981DDD796B0ADA0AA83A1F4984D2D1823141865D70
-0641CB24250EBF0B8E62D60409268DDAD6516C0A6B388C4D2E1167ECDE17482C
-19A8594829DDBA8226E1CC0183D82160CCCB52BC2224C1A6DDF4396A7BB3B3D3
-A68E50C5203151E90F853843CE73DF045A9ACA162F72988DBAFBCEE6E1B1B895
-8DE44B802A52EA92286C9C768EF7C6D8232E2868F996DD98CB2F3408015A5BB0
-8F3A22DDDF5D3485CF883DD0477E80191808E76CB4AAD9A4C3478913BF17C5CD
-34365B7E440A9A0BE07A6CE91A0040719CFAC12ACD31A0611CC567107F1DE5BC
-CFB02E943F6B972C57D6F9F7B306E6ACF0D59AEB788E3B57B1E705E49239EA23
-5A9F11AD1260B80284F988AB7AF8FB0A699F1381BEC667BA8E9EDDC807560FC2
-65E08501EC786C946D5B0D324532F7EA2FB33EC0BB2E2EF84020A6975564DA27
-B679B54219E224E9A65E09B5C289E58BF748FE1D32D4D751484C252CC6FDF193
-0CA498DE4A747EC17678E1D1D4DDB6DE365E712822BAB428FC4D5CB0DD34CD8C
-D9AD902B5858BC574B8774E278E0D45E205E6829E4738D8120C1ACB8383347B5
-7B55D27CF1F8872E06017A7E62C7EB2BD0643587AF29FC3324EEC192196CBF33
-6FE4DD8CD83240F94CC7AC45832BAC58462AA469D195D987D741105B5861AC3B
-EDE19D35680553A33A3944917DAE1A38011E5352E235551D227174C29C4487A0
-5F64DE647D3160ACF30A4D78660C2C00ECCDEDC2AF695C1C7D3FCAA68172481A
-CC6D8DAE26E5AAA3F2B52C04513C4FDA5BD658939E90795BADC3CE44CAAFBAB7
-972D9880BBD9B910F33EC4B8CB86A850635E972A9414E319BB9B327C86532275
-4F7717C999070ED9E6A24EFD2B6494CCCED711EE769C835FA077018C6CE83355
-D5628CB19CF27A09AB5DE60F4D099D1703981407B116C1A736588E71104A11D0
-9695548F1A157D0BB890080F76DD12BA4FB8B8B67383EC9A8764CBED60BBB333
-96276BA0555697223E80ED9F9688788F840900808680C1865FD281F3DCBAD383
-12E920AC49826DA6E0A733374EAD25767DC8A32423505E32B277C8B41CA6898B
-B350E225F43F842262851CCB0BA893BFD81FB440C1E67CF0AD751F1482DEEB74
-F5B4E24FC1E4E4B9C907067DCBF66D2608813092E155F1B9F469CF29013382DE
-BB61D28137A91937BDB6821068814B22473CFFB5F97123ADCD6F39545F59120A
-ED18FBC3222B8A6C4780DA0398AE308FE654FEC978B646912B35EDC8939B7DCD
-F7995199261746C1C4A5A1F4CD031F2C2F15F6887CC0914D185913E3021C995C
-CBB112F46C3E08CF328BB928BFA4543E8BCAF867036BE24B894433754CA06242
-5C52429B475EC45E8611CF03332ABA62DAE7D8EE31E8F9B0690C0E367BF7B013
-940B8AC8D40FCF6D2D2499464AB0D2C16BB6DC0F53C87C115E37178E46E7DB8D
-AE16C117AD668CB7A5F558BCD58628B56CACBF6598CA8B2B90950D8C4B3BF3ED
-4E9F003631BB68B0354C98BDE0811DE1718B0563F02A68C555BE4B3CE2E54BE4
-CA04D230E5F18A7E63EFA5B5D6B3FB1210B6BCD12E9BE069376BE5FED9E60684
-78B73FE4D212044ACE582FD96AB6F1D651815CDB1F6EB6194A82E8840EBF574D
-E7425C4638ED7A79D04F
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTI10
-%!PS-AdobeFont-1.1: CMTI10 1.00B
-%%CreationDate: 1992 Feb 19 19:56:16
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTI10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMTI10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 53 /five put
-dup 58 /colon put
-dup 67 /C put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 73 /I put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 87 /W put
-dup 90 /Z put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-readonly def
-/FontBBox{-163 -250 1146 969}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9E3948FFB0B4E70F212EC976D65099D84E0D37A7A771C3101D6AD26A0513378F
-21EC3643079EECE0C9AB54B4772E5DCA82D0D4ACC7F42FB493AA04A3BF4A1BD6
-06ECE186315DBE9CFDCB1A0303E8D3E83027CD3AFA8F0BD466A8E8CA0E7164CF
-55B332FAD43482748DD4A1CB3F40CB1F5E67192B8216A0D8FE30F9F05BF016F5
-B5CC130A4B0796EE065495422FBA55BEE9BFD99D04464D987AC4D237C208FA86
-0B112E55CE7B3782A34BC22E3DE31755D9AFF19E490C8E43B85E17ECE87FA8B9
-1485831624D24F37C39BF9972D74E6EC4784727AC00B9C4A3AD3DA1C22BD6961
-7E0ADAF55422F22ACA5E4DCD4DF9FCD187A566B7FB661D0530454D0DD6C6C50A
-7A3875C6CBF8EC7769F32A1F3F7FC1C072BADEC97794D4E90E0035282A170402
-356E5A9CD9ABD80AC4342A5283E458A7269252F4541CBB6452B39ED54D336D0B
-19928E9CD1AB26AD83EB209E2EC75011A2643813053B5DBB0246097C4821B5F2
-C92554E9140BE35B2DBFCD98809A8EC9FC910FDE9E0D86457C70ACB056EBF90F
-244DC0A5BBD455E15D6E3180311D52CF50B0BF7D0A7F64F3A1821E0AEDBC2E7B
-AEB549FE1D51088C153799C6E089B5D5D65E1C4E2D2B430CDF1FFA23CCB25D95
-5C4DD885310A706B320AB25C8D742C6F29953254FA54DAAEE60ED477877D19BC
-D28E9AB576B0EA088171FD000B60D73B3C57F754BC07EBC9BF751B7D2B32459D
-993861B7C4B0D98C422A11BECEF76F4EFC0ECAEE89723E6CED53E3678D733363
-2DF068AEF0FE7DFB57393BDAA439A6A4C396F86032A98009EAE1247B7DE83B3B
-E46DF2898598FF5E6CA6953127432A967E4FD41CDD60D6E413059A58FA556EF3
-309178B57C16A763CFC9BEEC276944BDEA255789EF4E1ECDE1EA43EEDB955513
-F42EDDCF39AE522A1DC2DC523F046EEC4CCAE25792B702C288732F5B13B5CCE7
-E8B6A1A1DB86B1EA38883E481BEAB54023EDD9BB94E7780DEEA577ADAA169E66
-AB7D8607B409619E79F242CF52E618AC0DAE43317C507CDB27EA8A1472D4E8D9
-17E62C98DFB049C78AD15560CE44A39581BD6B555165091C5D41071212A9D2E3
-05965AA02B8A67AEB04D915DADC1B84A531A1D672AAA06E9F720BA88419A3183
-63D1F9A3BEF8CB2E23CD1F9C003BD7849F093D3B4C83C153A5A790C1F9E37948
-5799C02F004C61A6FFDEAA1F9AE884DDD40DEB1539CFE3C3BE03C7C33CB54D56
-2C2A0F467049797B56D407AA43EE6B8C3F978A7D945A80BF711C12D6BFFA3DED
-35FA8B22E68BBE4FEC5EF5705D30044C578A6F8113AD90DF6EB8C75B8CC7F74F
-CA551C3D4943F2E82A9FEC069BF6CB92D44DA5D5715D4E11DF8F0F44C9504509
-2104847DECF36C46182AA495C81E880C4B3B31654105A8B1117596CCD7B57420
-43C7EC42014311F62536A94E3AC36FA69C5CD12AD86D421943FD84B1FE313B56
-C52135435BBF0BDBBD42C4EAB939DE326B3EE850D20739DBDF95864B878232A3
-8CDE2C581228E40C9F2B38A70B5E538452F06C402DDCC8194FF07D468466588D
-189DC6A34F5AE97D662E14A879DA6066DFF2282C04425CD1B5E4D90A8144366F
-D56442D3914F2483BC63C43293401A1B92B68429E3DA46191B8A5729BA64A4C8
-11D18F857CCAA49EAB20A91B5716716AE921D4C0A197E77E65E1D4D5AABF13D8
-C05D460941502A9AB47BDD89CA3E6B582EE3CCA9B6BFE3B48208269053F0591F
-533FBD31B92B658F94219FB950E13FEC1008FBE66F39C5EFBC30608EB2B2A11B
-9791D2FBDD0C316D99F578E39C367BE576ECE3E0CD61468EC6D2544A94035BE1
-2890162C477F5E059C445BD45994913282F9F11AB090EF24AF388685B4871293
-E36A1DCF7E5398D626AD9A4A8559B084B995A62AE8A9B7B5DF602DB6A85C3398
-A6658B86546DEEEF6146143C36257E7760BBD96A72470FCF10C5B01F26B9B86E
-4FDDC09ED0FF824532BB3BBB49EE5B74029F05D41B178E184A368A4B1B781E05
-9B3B348A2DADC1FFBE38F0855722BED498D5217C05E96B38627F82736FCB8D6E
-59E20D47DDE56549E6982EEF065F78D065079400E0739191D137C64F892AD3AB
-CEAECB677905CCEC5F4481C0AB5B5C74DBF993ED88BD91D11BF65EAA9DEDA1A4
-3620A127D565E792DE8BBB741D3C268AF2D4A7F8EF075C8C39925076F6573923
-B8BB096262C7EC3CBDE660B450714AE762FC521A6E536A5C01DD4D4924DE1E9A
-EDDE18CB08BDD0C6CDB1152FB2FD0FF7EB169453375D6839307D89B14C6B8E62
-831C8556A4D8FEB34E1DD59CAB008D9A086F81E2DCD3CEDCC8301B10D156FAA5
-0D8784C19780F7B658A3A5A2FA999DA55DC0D5E185CCACC86F740A82B336E35B
-72E27CFA90FA8E3A727692838135C4E0D37CB242A37F8BF7C5750BDBDD4F3B80
-0D9FC29366FB3B3CD7F0BB1F29EF70577AB9F9A0432445CBB3A417B05B596C6B
-4FE97D1EF0F0946E777E57948C75828BD8A2A4BB5396623A56EAF8A2C509CA2C
-57C065E3322D49ADB129AD0F891FD0EEAF1F9038E7104869C4529A9FADBABBD3
-3722F039CAA9F1AC9EC6E7CCD1A3FDC26FC646AC8D3288AA5C332D3D1F0EE2DF
-79FE4F56DC98BAD583C6EF3FF7543FC0477054750076C42CA4A204F7BD84A5CD
-DBE98E2A645D3C930552F3DFC7137A2AB42748B6731D0805430E4583E8189887
-7F15C1CB2AC969E857CC5B6CF8270010761713F0EAE7D1A8E8D0A667B77289C2
-097DF758B42BACB5B7627DF6B65373D785C9A5D040E9CF0D1E479CCE31DC538C
-68C49AA43DF71AF4FEE494E841832AA7ED423F9B3251B72550A4D5B3D91BE1E6
-4FE2141070AD51F3090E2091E91398B293F353DC20975EFFD8FA6F03F13EFFC3
-5BD73D0BAC92EED1F842718FC1351E1E0781177C8560875002448F64171094F1
-DB49C1CC01AD89B1E2850ECA4510AE82472E771F80B033A569A54E741DAD2C98
-D10B02F34434CBDB3906B8E5EDE6A4CEA27BF5BE3E907C1DB5A8D2A43F3D64DE
-D01FDC8228C477407A37B794766B432151FB1284B39CA17BA8FB624F8774ADF1
-32364D99270F11F9EC9EE79B485EDEC9D8CF1AA6A18C8BEEAD8AA3094036B52A
-E9DDC96ADAFABCC1FBD1BDACFFE16CF84C4F7EEF0DB0DC261A9EEF467516E300
-9A75FE5924966DC75599BB8FCBA5B17C9287BD10BDF21909733B05BE2A252210
-E2428C5C94033DEE1EAA629FE975D2C85A3A395A94D90DF6594CED3E34819855
-79BEA9F3BA4DAB951AA2AA139510A1376F7E3AFD61AD7B1CFB835B4156D7580D
-4AB3F69C818657FCD2F80D3A211C87EA29EF06BC4BBD20FC3CCDF16490A29AAC
-42A412B25929C1791A32B627B24F0673E652FD25C2E615554A7249737D93FD73
-072E9CB361102633CB1CBA9D2F729D98A0FD5C2EFF04AD11BC4697CA6C7F537D
-12C6D4594AEF4D2A8DEC58B5CE59DFD1A328C43B0A8B3926EC1D0257E2103ECD
-4B99931B84B22EF16BCE9C9AC3A366A826016315677F91662EEF414966544677
-A54DEE08D6468607FC8D7BDF30F566D7BD3714D4480AA6480B0C1361AB2733A5
-94377CF3A49C80E9F7A783B6DC10F4AB0AFFD8FF246F5B31DE45AD7E79E4B365
-4DD45A7929B260E7FE3D0117DCD8BDCFEAA6C0567B946060EDC38399419A0ED8
-01DE1A3345CD2F7BF016A03E3DD0B608FA2F9F6C393ED5EDF75F0EA1DA3D9A4D
-A5B7426D39805C1C4E2D912368E8AF7BEFE1599B918343A105BD43BC72454E62
-0B42DD19F2FBFB6759D5996770D86C9E29CC910997A4513C4483CD6E6D168AF9
-C642825E0A92A8B9A762A544FFBCE7CE7E20322FA5376B488B738A2CB97223C1
-045FC1BF628382F93C93C4A989E224AF0AB255B43384BDFBB0251AB456343764
-2B706FB3713F52D5B2F8703D2E3ED423F2DB04F2DA1B32C8DA7ADA4B3B821304
-F6D387297E5C889CD9A577E7C6E15E991C643CF9E4EC6F4845BBF09FEA8B4203
-15D6AB38BF43F5F8D8348EC5BBD438B67AEB5EFD1E69816151099752BE986358
-B6619A28FA7E64E26DF40F3BEFFFA6F1637DC35BC303C3816EAA7147210E067B
-182CC3FCF4CA559DF3CC1B378534F56A77FE1AD96C91ED38133F64322299C66D
-7ED5480A4628040088D1D593B880A7FE2D5F1148C9982697D14C848921E6E80B
-66FC022C15B75271ABC2448FA1F970FE92AB870601F7EF423058AE75CA3F567D
-8EEFC277DD60A9F98C0C6CC3B087BCBF968627FA653A27A31CA3ACDBFB949FDC
-A37E637D72FEABE5DEC8B44B8B391192EEC59550E83DB4A1276837679A412E3C
-9705EA895DD6E69391B50AE036FF691FC151BD30FC310F8B5FB4AEF4658F1B57
-0FF9C61AE902E200BFCEC8617768E53E7AE447637869BCEA90077AFDA038C141
-61232C9DDB3C1366B126B8A73BEDD5D55A2C86C9D4860752AEED234EE0E09E3C
-A3E8A57504AD52081B83C5FEBD96A5EF9C44F632F136D8361B2A47889656C3BF
-EDA3DA7A3388B32688DCE391FD533EAC4D0EE4F3AEF88C4B0F67C5A2094E6CCA
-90892C6B42F18526B28358A18803B981EC5B7B0C6501096F6E98DD09B2743799
-054D9A8F2124F7D01E8E2D1ACD5F9031B659BAA496307720CF56C190B0373DDE
-40568DE8E3B0A292FE75EE1F75B9364FAF23E3B331190D7FA990AAB9CACC3BA2
-9DC6465E4A6E5C61273C9D2BC0C4066CC78A28E6DA8CFBFDF2215BB582E4D432
-27EBC4168C41752233B2206024F45BE5BBAC62C2F7C08210858E351CA53B1968
-4B342D7532F59C7A7B16D2851640E202054036BC4BE42FB656E8DF2BA6DB58AB
-3D327CA88195886BB2E27E20F7369AEA3B0E8D00BF503F26837F0794F468BC92
-E0E1846FF355540AD183A78EA48803DA87D1038357023039D3E022E2BACA4987
-09B3CC68C95F0F0199A4EDB259BC93FBA809B2AD7D073155BC59D010253D6271
-6ED2D4305135BBBD0D813F343A95CA1C895B9B0065605C2A249FF40C9B99A77D
-A3E572C6EDC3D279D6F87BE29D23AD6DECCE4B61EA5D84EAE0280231A4601E5B
-C0A87899AF034AED4A8472BA331F645CAF9723018081C577FAE27341F76B86AF
-DAD33653C43094932475B4A1ABE9175EEA91757EBEF5CC72E93A9B1B19DDD313
-4A7659D1A66A170C2E8B3FFD21F3580E475855EE55C77B88B7F5522511539754
-4F446B448883D25878F128B50EC3AC6BF66F903E0D34DCA8949F9BA384B53ECF
-FD8E63F8744685B6472B0E199FA345F918E7499E196AC9372036C2280945C8BB
-0BA3AA6859A74576C4DFFA12FB6309D4CDA1E7B9580285A85E6B9A1253962319
-711891CE9B624316C615B6D8058632C0024B78F4A503CDA9E16F046439113130
-80B0B8EF7DF44C846620C75C4FA4C00B5B5D31FD5901839A873D7FC479A3820F
-4A2405B91058F48C910A98918362D2DEC0F14F105CAA188CF411226808CBA599
-2F538973AF7A2F22A7AB27A6D9AB101F267BA63D7AD0085E6C596EAFAA92CBC7
-42E9A7E92482F1C75B7DB7DDB5B970D06A93A509FDDC729B9CA65AFDEB31660D
-86E735CC34714F38C9C26BD83DD67F777B3E9955DB2B4103C790DB4C38007859
-8557F7770520D40E70C2DBB4C39AAFF9C2EDBF8F8A8CC61069C04C0F6EED839B
-FD1A67501E5251A44C99435ACF9E0439C0FFA976B281C044AC92694F4D9E356A
-A6559171D6805B1700FE709BB995D5C4ABE67701482F1A1CD01279E44047DFA0
-199B75516635CF72D8392E306F90B2206557D982142F6F948A33E67F63806FA2
-8AF3B281AA4F1F2ADC9FBA41BB4DD12C6221535A9986D0A4DD01F905DEC55768
-6D0F4D1503EB5337229065C90BB1164D6F798FF010C9E462C94EE5CAD027DA90
-40EC569FB17FF6052CAF415CDC7A56D5C249A4BF3F2AE597910F65F4DF4DFD04
-80618EFD4D2D3811FC6CEA00F860DCB9B9217B7D7FEBCF9021B87ADAE185AF6F
-1F0E4442006F96FFD298D4C4536AB2DD638B0F77077F1141B4FE8DC82816EC7C
-105DA69518233DF23DAB07FACD2EE9FAD9D99B57922CE84278AE9503936E3D32
-2B1062EAFB3170D4E170C47A967FD2CC198ECFB822A1123D2E201ED1428CBA99
-9F2525A643AC0AEF1CF07E9F024DB058FA4B6433CD118DF1FE1F1DD6DBDA075A
-85F123D47577FE432B7CB2E0682E6F85334CBEABEAF12C0BECDDA0C76EF5491E
-26D6F92DE2A64DDE1A9C6485F1B3F2D3495FA84D58DE993E6D8A046E6B258588
-A461CC7A59478C00296A5BC560B8FEE758CBACA73AEE85F6FC4F38964E5E9B26
-401C0005768187B2640C2C994C9936382A0F1DA05720B855015E9B264EDEF3B8
-FAE24A08FDDA849CE3C24ED7595B1E683D0568B0B536A9428337D2D8F64A3289
-813ED299261A4932C41F86E8F8A39F91F94FCC633DBCEE9125CD8214937F1318
-41A2753D38A984E58FE917D88A415C3AF7EA2CCEF7E61F6F39C985EAA9C2B499
-A7440E84D85E2F0A2EA4079DF0457328E612F87CFAC3080D861F3DA636A0B03E
-DD74CFCFAEDE202B1F6C07CCE2EEFA23A849D807972E0FAB2C9D62BDA90A37F8
-2511F0DF42130103753DD7E2F1C38ABDCB8D1B2E03FCD57B203B62E0B07C2F15
-03BBEF5C805558831B0E20F7FEDA19E08DAE3F90B084258D0DCFFD4EA5567681
-56C7303C22DF26539C09422B95E231DE3EF87BFFB0989951F42387B5BD13585F
-C147240807229724EA2C014790D65EFF9BDA018BFFB118E363D2B2A227F3A807
-D5F4F35CB4602BE765EAD02A6CF8E5AD1985B289FE798B245BB0D645B9A57BB8
-F649FBAC821816A5A3B6E5D62BD871200C7AFD61DD977657FECEC18F70C20BCB
-76C645BB5D63352077998D3BA6669D24865346965043E5487DC995051B0418DD
-DA06FB724347B51B96DA9C901C9B02B18DD7D24090E0EC2C20E4034B0E103863
-21752CCB19C1CD30FEF03D9854B5A5E3CCBBB015F71C1B4628D5FBB3E9222CE7
-ED14334052D222E7C9A80FF01D72349105C2E437EC559BAFE1492F2A60BB6B88
-58CE3070A121DCC8371E2155FE6B6FC5703E6F0206DC8899A5E2A9C63240DED6
-754A2CC9455791E28798002BD95735219BEAB462F710868023357D752E9B93C7
-A8546377B1C53158F214DE4FEBFBBC98FD465CF08CF70D2C5795F382C01FFFE2
-E0E4F908585F630C2783196D4B1B1882F9D80E472FECF6F16195E0C3827D808C
-73155EF1DF117088C6ABDBE3427B81649DDC0D08B02325306228FC8A6896EB2E
-850C87B0A98F2F3BA4B4B70517E42B162ABB22DDC7201A8E98A1806FC742EFCB
-2C980CAFD1DDDCD23BA5947EB56DC19819F1ED123053EA0ABB4B19886527F3D4
-0EB5D6EF3321438259A1A5888987D804F5A45D7F0D2A39E1D8E54E884360C407
-80CA559041F5AC88350829A25A35DB91011F5F07854247E5BD09DE183A43A599
-75B8A381AC752FD009B05E43FF7AF3D64FD4E1E3E58BE177C5B3DB2CEF18684D
-2915B205A95076151790A4EB5C375FCF33270BCB5FC068FB13AAB159A08AADC4
-1A42A5F603A1E3D062974091B5E37EA7B487059932367780B677D80C2601201E
-90AB3E35CC154D06D9AEA6AD8FFD21327FF4C22D0E62897E5246A304D1345EF3
-CEFB49D8354DC8B8ABB30467771E768BA46A7954EA6127193BB94B1DF2981853
-B4883ABAE331EC4D7588B296154700605575C649D48C5B15C887FE6D290929FC
-5BF11B15DA974E4536136B21A2C89D34C86CBA247620657DC75893BAB6F7F9FD
-A72AF57D53B7CFA122EE5F0BC1554CF8B0BF5A5C94132087C5BE0F02381FCE43
-FECF253A5D7313E8BBEEBC418A588AE65306F27CFB0F852EEED51E2CCF02F6BE
-1C06E8C0575CD36A9712D54320C44266241A3554198F0EB830CA48A843C38140
-56E6E13F86A6C37DC5045ABC9D453CD3C1A9876E87E5896BEB5FDE3A8E61FC7D
-27436A72D8BCADDA81F0538705EE1463D470F8D9E25CD186DD10ABE5290956AC
-6F3DF1F23764DBD104CA70422C9F31DA1A568FFB34750574FB2D3216EB96B773
-9BEFE7E455AC2E57D9D86F79CCA12D1973219650018BB3D32F46A17E7AE81D9C
-E021FD5176868329BFC033204CB93C84C6C77237CD65513B0F9221F3B474BC72
-B9754376DD45C87FD87BAA895C4E8D789EE7F56FFDD54BE622DAA72E65C3F1DE
-642453BA57161EBF837055347CE8A0749AA5AE5B1DF01C60987DADD3B2F8A334
-2564DF7F6CA6444292E2696C9D18D58DA38EC015EBCC62F45D5AF69CFCFB6017
-AB9CD079C571B24F6C3B28F028D2DDE13C3D81679C954A5CB1452BCB1D841FAB
-93F6237B9FBF2787AF369AD77AB4E316A93EDCD10C0B7BD70DA6F777100B6C20
-0452C1AA759EAB3368557DB8283C7E31B488B623D267355E57BC6C20AB54983C
-48F9A7E48BE64FCCC78FAA027D1BA2A851FC8068697BBC177F178E02BAA3CB88
-EAFDF6B5B008EE76911424BA7E8EA2B3978CC2A40E6E5D7D42F832BAE6C41C7A
-BC05AA2B877F5A2FA28B98B8F0390228F7281F75DB984A4F3B4343EEA2D5C4FB
-3642A0FE69A37E099F05B1E0579772F0BABECECF9477ACEE42A4CE66C189FB8F
-2C27078353CC2DA831B50135D18ADE3C64F2969D362A71C09E97291FE1E5012D
-DDCCAA835C16BCAC47F24C3729066F2F61F8DDB46A69941E0A56B0E49644D6F4
-7DA9D51A362152CEDB349680C8E6E3EC16111C133AD90E6D0D0F70E87F21F0CB
-388389C0D94D9FA57E7D32C907D77B1D3DD1AB9BB9212B97B3F27AA99DD6EF47
-FD8D13660D1C96F10457EEA4F24EDFC1FF46D0B1EF5BDB8A2E993A54E10AA59F
-5492C962FA89462DC7DACE0E126EAB9D1604DE20EABD3C776168A995B5FE95DE
-BC8FD018BB4CFB1E45ABDE4D0AE13AC4427585DA4698DDD40ED922A4EDA2A857
-F2A4CD3CB1E2990BC733118AF61817A5A7189B1ADFC188D255E6DFF1D9AC517E
-9D89A5A4DC745DE13AC6880CAFAD86E26516D4399FA94491B62776D30B830032
-14A5090CEB39363B0FC91CBC76CF031794990C6823A8833DD323CFD93EC39618
-C0495EFC97D150794299509C865D37311579AA722F73A044EA9E33B0A393EF1F
-0160FA1D86549F255C0F123850AE1DAD749D3C0656C48C708F89D51D5E5A1707
-A91A22361017884A87C0422B824C7262237C11BDEE0D0F81E9C9481D98DF5BB6
-707F084C0ABF02249A62DFB067FA0E47184423ACF4FB6E96AA9DE89DE2F999DB
-BB492377427B152971471BA28574A07E39759F82D03D378843A71472CF2D9282
-A06DADE6DED489F80C7C11B3BDEE2ED7168E009A9B076C6192170F6B5068EC11
-3BF227F90DBFC59AB45499DB8F793E07398D04FA5C968BA9A70BCA76C67741CB
-574C35C13217D92444EFCC36A8116030DB08EBAFCA2D09923D9D0607BEE377E7
-A4011C552A79FDA336A7A40776AF0FA62418AE04696625A4E125177450919F4D
-477705E429989BB3E5BF0BAEFAB7A26B7B7A3A3444EC6E7A4F120F0950764403
-CA3D291F956728C19CCA09ECCEC7F52B5371445D5BCFBF4705A29E4EF4409C66
-5266031B54B09EBE288B7DDE6F33B34B5576B30BC8FB8EC9B9B6F448EBF96FCF
-0E1450B5EDD24D37B13FA57580533DE4D6DEDBF1D3033EA9FB9646BC445C23D9
-877D0EC27A5C3CBC4B70DC75556FB067BF53B505ED5E4DEF0B17B452455C3B31
-F5794B6C4B1C6F9722F5A23DE0159AC9A249C5CC0A6261677EDF386A428E3DCA
-C5EB5490DF67D135537681A427EA5145A2412EB8BF587E3F8A5A27B2EA8AE357
-7380662C22E4B917834ED0992440DCC98E0E6563F0F9351F1EA1DCBB0C7CF358
-A579E617AF83AF0E55F8BADBC0AF9BFD6407C255997EE38A0F851FC65A400296
-A891C3F7E59523FFD362FD725217EFD131B27B113D059512A3D3410376BC276D
-3D2B5E3CB92EB41D9A95126547ED25A3CADF508B36B8B98704980A66F04F4BA2
-A00429ACD555DE1B47A4F508B1BF985951C3D5097D1D411D8643E5D060A72525
-3670342121FBB0E287F63A64C00A9D4E09F82D5635B4D2A126B218289F8C94CB
-A5D6563C99BC2EDF150644DBA1809435FEFE4076987F9024F2B5847AB7A53616
-17082F6FA8A7974371431987DAF519328655173E5C622DD3A806F07E9A954267
-18F575A9A0EBBB5910A8DBE810D6A7A4BE756A261D6E148B626DAEA5BE156A92
-704FC56424D0A3DF187C6FE2C7D8E36CD9BB39BF603C3BC86BB107F728A8BA75
-D4847F67D435380CC252F25D4FB1EE51B3A558110A1CB869D1D3EB4E4D433F19
-8D5E44995C178FC0CE624377DDB3D3081237412885F3E621E26989147E4BD51A
-25A1BECD4D5AA7F7C4844B523162B8A6B4F9A756055E8E93A91E501DE568FF51
-BB697A2B8014C56401E479D6927133FF767D7E47C90BEDC5C10647234FF73294
-CEA62D3DF3D860B30BD1DAF07AB71B2C050A79D9A3C244A2E9FEA6A39A79DBAE
-9376742B3C103CC420A7B95D30E992BC2B4B4771CA8D26BB909D656DDA661960
-621157D89D1942CB49530C187D9251BBEC7AC5FFF012090196AC474B5F2F4608
-EC43E3C0805B0B1279963C206E7CAA09EBAADBC5B4F2BD6D0E80BAC7D348C5E4
-D778B082FAB1D7521CE35CE99C44346DA3F0D57F4071DCB73EDF4F8FE3F3A4C1
-76B8196A9C8725C7730564727375388AE12FD27535CC0480763D5C59B8BC2391
-01F6977E8EE36ECE7A2BE64D47F7FD6E0A9A5DA9175C7C9EF4A46673DBC4F8C5
-2B0EEAD552132BA6A064237061CC6F29DE10DB1A800EF33D45EDEE7AE6F8CFBD
-56CDEDD0C4895E72D4074A1CB8DEC529E1BDF21CD4A70216012D0FE95FF258CF
-32649C9853154D18F8997481409FDC38D1F2FD0644DB0016EEF689924831A809
-46AC416D0A658D346D77C2410C1A3141AB5D5FD22424769C6CA73CA93A3CED15
-D4A11761DD47854325E5F636C1089B5F39F352E812617196E3C9E268AEF94722
-988F9582A40DAAE15E3FAD1D4F9FBEBC4AEC3BA444A3A6823FB701D2534F53F4
-A3C3C69EE88349CFBF9F58A9D8D1DE1070A27CFA23752D260D1EBD8F1985299A
-31AE5C701856B7C4E5B83F13DB88945F2F53019CEB666DF7B29AAF156D8AF851
-8E0BA3410AFF970EA4300DB62DF6D323EF9B9F7FB4B59B3AB242199439613EAE
-4DAC517A4EB3F56993DF75A0EB1FBE491C50BD275F5DE105BA0275DA53706675
-D6F10B82E5E0E8BD6FBE52E497EE90D4399995241BE0300AA6E251DB081B7B21
-EB7C33B7B7A2BE5BF2B3EE597782AC09412C8028E152463D3EABE456A392F0B2
-80FA35D01BF7936741CC2F8287A7EE23A155F9B1937C764CBDA5927EC5FAE6E5
-6F3C48981220E11A777253AAF382DB5637A243D3E83A5D3853BD87D83203EB3A
-ADE95F0413692DDB6240FD858DFBD66EC1EA1D95CB8066B5A26EC0F6D38630DE
-64A1038EFBFE794DF0145D45B2E6BE46AA4B08E917B486193666AC3F966A13B2
-9F98C10CB104834E75E9DE8F51B18B48292FB1C7BB5167FE2E3B6ACDA2A1DE48
-F928FCEC6EFCB7629C250C30057DAB2380E5694BD4A6C30C90D7D77E1F8B5E84
-51471338DCA6E93CE3A4F08716E8594F3892AC22A6236224843CDC9D9885A523
-6B21A90D7742D7DC612BBA313DFEAFC5E97265D1B34218B6F05CD14AA08E4181
-0657CC147984600E11DC9138B2A830442BA6D65AFF07483FA6191FD343856DA3
-DF8A85BDAA81ACA55D8C698FC2C4DABAE3F1228D43395B81B2736EF8D70E35FA
-0B9E9E4D784E60207421FF079F25E3AC579265783BAEB950C2ABEA38581B150E
-24889433640AE0960D4F1BEA54232C4BD31AAA6914094C1BFF4156B24857A344
-50A82AE7EFE8BF55E4BA03725D91827A25DAB25768AC40C65DA0DB13DE588344
-09125F1982E7F986CDD0F81B82A18EC5B8BF5E630994E7C41E85FA106CBEBADA
-673F9A42352A1065DAD3427360F27070AB58BED9F281335D6293E23440D5E9A9
-C0A2CF28F2C83B01AF7E09218944031BCB6EE075A3B4C3A31B38EAF9EC16023B
-E3202D4BABFE6D8BD17C29A3D8466AB7C7AFEB8A6A16D6510E01B126F5DAC30E
-0A12BC4B201A63FEE4640694D763A4954E49D59733DCAB6BF05D1980E7B742A3
-DFE7F446EF7BD2F3B4950D3BC6C4EB078CE6F082315B4BDABCDA92DD1455AB92
-A53D42D549E3A3E7439164AA1A8B3E827546C01C7CBFBA8C89446FFB437FBEC7
-7669666AA379B3C1D0D4EF7F4867004130B766EC0FA4A2627B9A4C96D871104F
-B892D91243D9A2F384C9F371A411778C6717D55D2A9AB67BF295C1A5A534A216
-A8682B78D33734FC0AD49A531E7ED6C0107DBFD63EA1E0C7C16AB232DC2F50AC
-D1DECA610A64AA7B49F4581CD5D9B8ED2E30D2DCF867B65D143EA8A245D96260
-1AC0DFAA3032FDB6986446333946528A28D8481C62875D2C580936D7E11D3689
-1D290F57AE163C8498A0E1EAC69983033DC8D34FFC92A5528CE84A61DA44FEFC
-5F377CF8BBDC16FC660A4D35500FDCC516CC9A3DF17E55DAAC5DD65935F0D510
-F4B20B070C7620BD4DEF7A9409D6ECB67969B1FE1393B5471DF049527E804E54
-CC95CC41068C7445D197C304F1400651D32E469C74361217A35AD1C1A1A2894C
-1AFD9DFF97B0D33FC2BCEE7D6B7C7A486C0F1AA80FFEAF3134A1E4BB4FC465E5
-40DBFA6E74FE7B2BB5670B09004E2502FB9BFBB231448615C21C9E58D9CE71F9
-7E6DE7732E1006B66CF2E8C7CE545452380555E11DDE58F113B5AF1806719604
-318EDAC8101C0E34293159C07D8F5E15EA9EEED412AD84B8F73812F255248534
-3A38625FBF1E5025017EEFAEAC2FD6F6504372309F1BE2E2F9F654FC83C6C6F3
-D0BF4C6808A707CCCFFFFC097F064015DF36EB95E5C487DE9ACFA010BF6CD88E
-719E68A6B4ACFC0AA63F5DDA8A57CD0E6641CAC62EF1B4CE1B480FA9F1980EEC
-8160FF7C804E452A0D15C5345A986E20F96CD073E1D37264096361D37795AB90
-47FBAE19AA1ED324163F53C97B6220FAC96636B4F1C27724486CED57096E3B28
-ACB88D2F49EF88D9F47BB9DD0C92D844782F47476F184A8ED69F520C39CE4BC2
-D66EB026F87B44D05FC91239E8D7221837323F341A95B2C557234BA4B8647EB8
-690D981F1DF9154ED842557A9A3A14DE392CA75F2EDAFA3165CD28C0951546C7
-E7D6A87CB80E83C437E753F146F68B1BB3CA3A5653B091DF73D1B4A41EB91DA7
-672F1D5314BE3D9354B5DDD6C3FA992F9B0BF5D212D710E9F66E8C07CC260DB1
-012B51EDCEAFFED316AAD1863D1697DC5661B0D76613BA8D74232A357DD2B9BF
-088F37199FC7AEF824D7B7A0237AB9F4821E7DCBAA840AEC1F81C2E14A3B5CA2
-0EACF0C8382CCE5C7F52EBC7D3CA6C4094FBC42CE531DD8E5576476B71264706
-0143F48159C35E073756FAD833886382BC1AA047E0B55A0F7B14F0A656F428BE
-0C83B01CA685069D94FAB75E8AD28AB73C59AAF1EA0F0B6E0D9DDD008E141118
-DF7D013EA4A488BE6B5BFE2E5C7DBDE394AE3B66FE73E513BEC5C56ED4470526
-C4DDE2DCFDE9E96DBA302EB117046238AAA68650F8E1900AC0CC7CD6A5EF5B7A
-D60F756DE517AB0D249B09174C34DE85ABC09B5F212CCDF819DE9F0B6F1292E0
-1B438E058CA1BE808C860D0C8F45316CE312FE45E5294243B1639212E31A92B8
-3681C4C6FE25CDDE91987B85E5A34BC2B3DAEDD9494490C1FEBE8D61139596FF
-8BFB1F171AEA1A91C82B47D7C396EB6234262CE313069C6328ADC95127288D2B
-2A6496986858E9BC25292EE31AAC170FD7FED360F5CB266E1A7ED9E85E87487F
-C40BCCAABF016EE19EBBA8D7B00E5F73D33CA501B0373491CAB5A6D2531C60E5
-CF6AE0387426494CFE6748E3CAA74E2B6123684E5A9C708D9E79CBA5FB63FC92
-B8F11D9D1AC10C6333CF853E104A1179928A38B5566EF95B703A4D5B0878012E
-08052DD899553D9F4887773BE33B3019170417526E8F11AC0D11A957831968EF
-84CE690BAB6A8C6741CF3540F327FE013B1F0B9FFDF431E96339F941A1DAA2C3
-57DCA60BA6CC6D948B9CECA09CC2EBB4171F2ECA88FCE01F0CE9F743D9E17E89
-199EC67A6AB71FB899A2DE399A83C9720B7A9131FB2A32CA25DB37675F3F6352
-A4D39CC5F3A411775D78672DDBE76441AC525870BF533AEF5FE1D7C9D136F8E6
-122DE44680F76E4EB87810C70A6355CC74670E1804B10B8541826999CB63F7FB
-3732128868C1971EDE846EB7726168BF6E4D9F8C8FF45D3C74823287B33CC5A8
-E146415FC6EF9798B35658352DFE317F10C67436E876674F83ECCE85E2CA38C2
-F435B3B6B1994A73775EF7F056F8EEBA1CB60C5A4C5A17A062B5BCED07EF0073
-203788287ECC6523EEFDD70C3D69DB26280B5932267C1758E314A093357AB0BB
-74CC1281E90959C79734FBEB04CEAD6D03C85B1F111F10BB89D9D154913C8BE4
-86C383F2DCC1ACD79222580EE891869FC9F288CD5840D36DF9B50D6515198089
-9B4E44FA4D2F92B0BFAB3B095C18D79BC38F5131B88C1B6DE1CF90C4A7133A55
-F4BC6190D356ACCECF35F504E9ED5E7679A0CE846E299A0821C42E1D344DC018
-0A074E9C38F6AEB34FC7FFB2685073A8CDBDB8576866AD84813F1FFB4C1657E6
-B27A669C645D4960BA252A555D9F8774CCB4EBE145C3EAF785F5B4328B1670E1
-A27DDF13E5257DFDB97A8BD75ACD26AA324B9E2AF3A2FAE7D2E20441D59D78E5
-0B3FF2D90145884D33C0C4C6FA7B07E8ADBF32E636AD699F1586DAB75BDAD114
-80B00F6D96BB112A64FEB073C651E7A54AFA5666295E3179435CE871FE45A906
-0EF117813E55C9D0F716A61F46F48C9FCD9CCA446477A4F4AE6E34F77E13034E
-1E80E83237820AA3CB4D6C3F0C7033140F389386924005DF3BC08702DCF7E072
-EDA8692CBED27EFFC6A365B7908828CAC19651C86C08383E8ECF45902D85BF24
-857DDFE8CFF6495223BC6245347A516A628881E87ED11957805B5435491D2147
-148098A905877B20ECCCFE1A80C3E9F04E5D9512E789D0FB60327FCF7C74B462
-D1C3873CF8CCFB713BAB3D08B3EAF68CF0DA090EBAE9A3EE7659A20A5993AE78
-76BFFFBF4F96BC28A5EA9AFA514402C80DA323CCDE2765183B87698FE7997D04
-8E2A3993E344349924B23FA178E0C604E13A0276370D0949BDCFCD302D831D19
-AE32CEB29A16953557F0E7982BA774A30E85298787CCDCF89F4ED3849016587F
-91F62D3138D5C238353294ED99EA55D83A2241C09EE00DB63B597639992B15D0
-7CA5B74FC7E65181FAA3F39FF4A78B1C1D6CC2F4062FA3466487B03667E6A244
-0ACBFE403198F43AAB19690ED73D2B0BE6ED61E42787B7830872D9B80878E087
-67BE4A91CE08006CA2EEC1893D7E30732ADF900E3282B2AE84DB20E7B25F621B
-77176D1AB3019ECED5229999615FE3D8A30C5341343BFE93D6A85A395B63D8C2
-8CA3EB8B7602E511921AEC7FA35DCFA0845E0A0DA99DD50FB7DFFA1750182684
-E5C26FEE93C35DE33D3555526ADEB2B20D39748EE16FA99DD01E5749246E3A4D
-62EEA42F323713CEEE14BFCD9E9E122BA152DBCCA98D1D4512F597661856EBDC
-0DBC186DC4FDC6E9112338C39BE0A604091C4E55E0DB5905B2F8F2BEC9BFE646
-A7A356675DB630712A158E07D525C83150CAF0A7460E917E86412253EC0C92AA
-C7E5E6D54DF49AD33BA0C413FA4824EDE1288258F4E4C45409C99B73649F47BB
-834F8E56350237BF9EC5388EA2D4F280EB42C80E5377C0EF572E2168545FE075
-E8E0B5F06DB414464C871757E40FC6085F307A1473615DDE96D3BBF3D3706724
-BF40240B970D2953C066BC931E4E59A6805CC892577485D16C2A0BF2A1567F57
-95D2071FD145376A53218F1A6B8CE7C52BB2AB54A6D677D589B0E8096083F38A
-671A9CE4C451E8D2029199CFE05A72C6B45FA185394436C95D7CCBD8B658332F
-974DCAFB83B77069193B965FCB7B715A12ACABD422ECCD5935A2EE5BEC7A223B
-754746709D2050120924C6560E5B3CE6AD7D93181C35A8850D1821C7D03580A0
-659E608A3192D2917DE0A6951ABEE01A380E60BAC18E40FDAC03B37E2DF7056F
-984A519B316DFF48766B61E40B90EE810F53951931CACE6E243DFCF7480AD026
-D9EB9E6A94AC117A41948553333397B0290F3C1546CF324A3C83921514DFB4AB
-52931E24A3DF165201F30B3CD0B885FD87CAEABD6A110FDC2E2EF2B092305C25
-7E6A3D0811DCF3C83BBA251CC58C4DF88FFF00E01FED721083EBA8DB25186BA3
-487F4A4DD6F46A6071C55BBF0D593E1FD7483DC1412CC5EF900120
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMSL10
-%!PS-AdobeFont-1.1: CMSL10 1.0
-%%CreationDate: 1991 Aug 20 16:40:20
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSL10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -9.46 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSL10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 89 /Y put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 124 /emdash put
-readonly def
-/FontBBox{-62 -250 1123 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9429B9D40924DC059325D9D4CC0344F3F997A99E6CC0676735EBCD685AAC9142
-08DAFEC78BB41AFC2F1C219910BDF41D6279284EF600B69776CA15BC8A34347C
-30783C52AFA60FBE3E353E2AE354CF87B558776A22C776C7A0B5AB5CE1F941EF
-C2D9CAC37294BF407A671F10E4743BF842143F4F7DFEE643BA3BBD8BB9E3F24A
-BCCF7F0ADF8BA500620C81033EAE8C4EF2C1DEF13AC575F1B3BBB66F093D3B78
-5412B82B67FFA087AF57182B2230F9F2137180CA58A7D9B2C822FF04BE6CD01D
-43B2CA7058C7B953F6D9B5D6E91ECBAA5CDE1159B0E59C83DBAD96D6C8C8BAB1
-374EF652D10C0F3EE7104472C98DD3572AAF2D45A70BF7061447E21EE3C3BF23
-DF39C2D1B35B42CD5297BEBE6BC94F7C9DC6E61EC67E4F677256FED9064BD3E4
-B51A71B1D27CA4E5AA9E1D8080E6DAB5310711EEF87C40859FA935B19524AE83
-63B163FA8397BDFF443227FEDF7DB27DC35D89FB1C5E435DA0619A5C88AFC73B
-89A2DF5E767C5B536BC7167A840A0C32BD57A14DE69A7D0D819AC36FF32F908A
-5070F32983BB007437E3500799DF5E0AD3710A4C0000F0098D5BE99F2EB9C1C2
-C444FD9552D0DCA098A94B3BF176F511CEE13DB7EFFAED7C47B5ADCF8D4700F5
-7A5FD1B49560969BF5C44F3749370663A04776F749DDD7B50674D93254426C4B
-EFE264BEE7810EC93784B7C01A7F29EFD92547E13A2C7851A2E709FBD5B87850
-4A44F08F56A542DBE072D2FBC58D9E6468E1AB858DC35240E30D31C7AC13D6C5
-7D2BB634BEE96FA0E10F842B11A789F72A333DD6DDCB1BC23227EBC406E50B40
-30AF0C48E6359AB0C46898CDAF1118E46BFF8B00F54EACBC2AC262AB898C42B9
-2E080C10DE923C1A027CA718A83ACB879C37A1B7CBABAA34E7937C1CEC2CBF6F
-55FF0EC9D84EF9670F6B75F605D946C6642F4A54FE50609FD98028BDAC593852
-9980F55F4F16B3F60671472AB434358E6017B225DF2A5B12409320E0C35B9A38
-4A50E8ED725B6E3E92AAAE89FD3C8AB816B3DB2EF4718708DF5DDF5E371F3D63
-3A89D3CE54BD42854F3B204DBAE32DB7F96832C130AC7123FA18C3FFE146EF43
-0872D6B4F52EC27E21C5F4CC79C5090886058F43745C1B8AE1F19CC1A8E7066A
-E67A1E788EAB8DF286DB392D09A53A2DA05E2F09107D17624C8F335267F3EDAB
-632638B61AC51C1240FF13B07E160731EA4C70BF5480DE7E251561DAF06B6310
-D8011A705D5ABD4B28606D48F1A865E1A1CB3AF6BF59B12C48BA3C67A423E17B
-67D206A43CCCF17F0DC7AEB99C5282C227228445B66B8AAE255F94FC094CC8ED
-C6CBFB45E6E46767A1C0A1B877E9D69E737668DFA576999E17CB7E6E1E283995
-B92EB2A388DCAC2FC528474A5A0EB35BA90AA31326EA3FD40283F7192EA6F6BB
-356B8859169931FA48A0869B087BF79312DB8BDCD01F2E343CD6CE6A44752ABD
-BA7CDCDB638701B39B32D0AEE57C7D7223EBA1DB6BCDC6A07FDCA3C38BB429B6
-8F896712AD2574E6144792A529329B849FC2EF9CD9E422A9112C5CB05D1BD513
-DF307B79C7CCA39AE8902F94A4B643C15EAAB8853C01433FEDA20C165F127D46
-AAAA0A27FCC3BDA9681E103C2C8F539D13A817A39219340DE466A37ACE5D4643
-5B0C287A3E6E74F1C1A9BA9F64D0FC9CEA533F4B40C1FEDEE115F8B63552BB86
-585724A76957329E714DCFC9D9D6AFC5AFC2506F258CEE8B152654BE66BA7A5E
-8DCED21DF5A18A17056F5A4E1F00C9D4301C287C5CB8C07EBD49C261D85F6A00
-656FDB9B68F88A096952465893457C6650AA403AC5A2CE22F8AD80AF8712C461
-491754BD849328CD16266C6066E8B147017A334787DA8A02D5E7F70F508968FD
-4038BA55FF1B9B7A12353C1A67397A4F09420857E4869273C913681978911F06
-D06A2211D42026B879FC77C80D31C8DA9C020977B54F17C0FCCCDD46E3F144B7
-F24304B4B385FF15EB1F110A451CDFA3E9D41400AE753D816E0F500A89065C97
-F3C48C0F90F51A70D49A65B71B6E7640BA3B665288506E6EB6B25FB1AE0FE86D
-F15A534D6B0A23612E459ED8D892C6355C67F19F208590D75E4CA2531C7D54BF
-C4BD0D02A620B9345803700184E4BAE6B9AECFA5EB96EB00E3A3103E4F484852
-95A27E80CF42791FEDA2ED2CAAFD9F76BC2DA372555CE32B2FBDC0CC11CED6B5
-6AB508C3A20A613F88BCF7EEF1A3A7E33AAFBD197E29278E47365DB7B2B8A7D4
-4F6F630CE19A5949F1F92DED59EE20B3DECC899659933389D2B20CF40E1564C9
-0B53010BBC619AFA62D13869F31DCDAFAAF267C5262912F8A21AB7EF4E4B401B
-03BD37D730E5DD696536567E7D8BF7328147EB420D67D18B792D4691AFEF9961
-40D78AC041963D98E0F32EE060209019962A0DA3BC9469DECC10323A4CF6DCFE
-AD848FF62C482CB64F36B4A0EB963A41C804E9FC06D678DB1B59580C16E048D3
-344045A303766BB43BCD2097C985FF769C0E0C3879DA69B56CDCE591F27BC78E
-9E5F5D6DB443B46FF0711E85BDDBF21A920BEB5CD8F75CABEF91F738F6F2C913
-A8C49CA9D9AC71CD79C6A5250C0AA9B04DF78D8696D76D2FF99F0E611F92B213
-89FF8528EAE70B60F6B82F7A3FB6E67501A82BB9B81EDC10079A6C5C0FA02CCD
-667A6B415D328AFAFBBF1CEF5BAC0092B6580322336098ED9793B7C2DEB1B12F
-D552351140F6D79473A7C8B51AEFC5682A77BCB3E8678E6A0E77A8454C467254
-E17992583317D59702E6E26FA44BBAB82BB9CAA058C1238B216F3A986DAF2671
-E0C17FD8A986252E4331FB348AD3943F87E86A427B65C39350C7C517668C1EA2
-C1F42968770EB096611780EFFEF9A6860745171BDC91ACD1704446774E5835F2
-7AC02728DA6452F2E861DE0DA25121B08578C3E35E1919BE49D1747D3060953D
-05960730E1658AFBDF5C99B479F89250CF2D538F30492703BBF0C42FEB05D632
-2DB9E4331066EE7308A159B2EA26D7EB8F6E0508F13998BB2303EDCFBF3D2CA0
-EDCEEBA69D99024ED24FDACDDF40A8CFA996A3EECD1DA81FA2F59A8AA8738139
-8A38A5A5FEBDB5CFE4D2D0E6B2BBBFC7048C7AF2F687117BE7E2E33F669DD417
-2CD985DF7D107E733BD9E09AA3F02FD8C99E8AEA4DD70E4DCDB7B82BB3F11CD7
-3C7866D16AF28A3636199A712C0DDC782AD9645866443F5135D8F51C7EE9C2F6
-FD6B9E19A73262D87ACF76DCEB741564E625FDB342CD1F3FA743290D280A5FAA
-05321A4A8399A20046253FA44F875A27367BEEEF2446E2F15967BDDBFBD95450
-512767C8C5779FE85B0C7097CD5D96B69928DA71F3F76D3F4CFD87F827787250
-46E208572A2DAECFC675F69545A463016947F4811C924CBC4B0634E2C001DABA
-CCD4C5DADA558D5421FBDBF8C1C1962E2C0D452DC7A1285C47A4E5CB2DB8D965
-3A16D26BD7C00485C2F17E71369782CA97F1DE49EEC68ED369BB6B9DB1FBDA0A
-4381FE3380B3D68B76F74775CF67FE417546F70EC1D14B2BD1A526EF7FC3C564
-0B955593FF952D2BF090DFBD9290284A2D556D1CD03B5E0E06EF9C48B19ED270
-A01E5DA6CC1B54ADC019D0203D1D769CAE457B5576D9485D7A3BE3F8CA9B7D82
-D08C0D3EBDE7C7ECFF5B31F29848A3DA2009EF053EF7D13A39FA938143BB61D9
-976E9CB791301D076DCF4A5F6E6775B72E662F24EBFAD725B571DB8DBF10A281
-9AC2BDD417106F82850B4FB626C671E71A85491937CE26994B4AE3029B73AF4A
-CEB1E5C27DFBBDA4378786E94826AB2771EE06E56293C58A80136E07D2F6CF5F
-FE275792BCB97C0E4C2A2ED563C841F621BF46F21DEABF69DED06F1647A64ACA
-F31105F6473F239272DF6FF325D8EA93D85679710DF2B3F9D06DE851D7F6D991
-4FAA2C121E8529DBE00CAF32AFA5E39976FE1ED499E7E3AF28801144A0505631
-5301019D5D9C4281D143BE3DCB8F318B5E7613A27D84C66E10104CEA0E25009D
-C9A933476FF02EEE929135B5507878E0275EE14150B4ABB3034915F0D489BD71
-1B3412F39BAE4F3DD3B657EC5D5DDB1AC9F431D3295709653CFCCFE2A4442169
-63596742AD51AD2A21783C21D791DF0269845435F9C3EC91C7444842C0093BC7
-AFF99C782CF7CA23E953CB769780F252466F9BFF5D2B2453E1020E5B49882BAF
-8B68CC2E80E02E700B01815D122A5D271DABB62BFD3C106F6875145104C1C965
-F05DE045332318DB753D8E8276B3C0840D0A9AE3DE793BD9E109AA0D18981C2B
-514F0160799454B94CC2E0E169A6FD483EE46EE5F9CCFB4699411B5CCBDD78C1
-866A15C4B598271C5E2B5013DC6899022B09609C6E497AB1DC236FDF35875F78
-BC99EADC04BBCED190C3A74E59B93F6366256E9E7EA827AE2AF88CB0FACE7BBB
-88C13857598FDF7FAA299AD58F48048F45556233DE5281F4F41515846D766E75
-D85C52F12EC1794234C42F9F0C8DE08E7E80DF76F62BED9230BAAE750B3ED684
-6CC18938753F6D46827B6C375C4AC361A4916C9E4F05D047481F85FCDB6A4CDD
-89912B2948387E8668BE9338DA652452B328C2EBD7A35482671096BB2B6D038C
-C7FB1398759B8396D192C874319DABB76AC95180B7BA1134CCF7CC6901BC75B8
-D13DFB39DCD47A16AFDF933E80A3C18EA76C14579916A17E541F7134AEA52517
-177C622FBF40F7C75060AA4CC058C0BD0AC655D2E818E87AC8C0C0401BCCFC67
-055FD15D025BD403E0106B7D8DE2013E8D3DE96BB1F024E63D0022E59E751665
-6D149F842E7CF2B498AB9F053C60DD220584FF16B9C20C1C8B42FCF6C31E772C
-54C7C63A166F6689B852579723FD25D5AC7CC1CE1B20C34704C226F3459605BF
-83C20E2ADF663E4765EB3C8C05B0B879EC8BC6313FEEB0B2E868807C3C7DA43B
-8348622F780166CFA8B089BA110A43F77CA8C09A3D6FEA31E32052F55173C866
-78A25FE37B3C52DDA874CE9FCC6C94EC2176A8F6908A9D89133BEFD95E79810A
-578FC0A51DD6F2446080129216D1CD462D0C8B5FA8DC9EBB6A3F34246615E5BE
-50E484ACCE9B9E0957CEF1642FC3E14C80BC14BCABADB61EE3E6CD2BB79C4AFD
-675C414F98C0620C7A91E75E2295BD0AB286DECD52F676290D6B5BEA296517F7
-81F6EC5F682C7B6FDD416AC585F2A041906AE1F3A356E97CB9373E8108390708
-184026DD80D0711ACD30510CD81266940A74E9CB78665AC0E15403E499236DE8
-C963042D39AFFCB1C39D72D7CFF89A1A218AF997F1A3B04BF1A9424A7BE78C9D
-ACA267C62C6C3EF01CC9E7710739F8DDA90046E9A4C0411C748F2551AEBBC466
-C93BBC6B9D874153DE5D7BC25F2F0545A223D767CB239772F3AA96593CA5CE9F
-5664DBBE8560E777E2941C9FCD22F65E9E8E556F09B477CE454FD7D1662971EE
-CDE4C5899DD76B0285235AFEF6B1BCD8CB58DCD2E908F41EC8FC56DD66CF1D78
-3EABDAB5A518D272BF1360CDF6D484FB782384908062D29B350EC29847E7081F
-B77F61F8ABF351A7C4B5946F96FFCF73FF1C2FA58D89812CA2C12EB60D0BC9EF
-2B33C65DCCA72054DA8A839FD8E7E3EE98B4A8C5C9B5C3FC9B054A07E7421265
-C06272337BF86115D904851A12A393A46E1EC3B2F7FC9559AB55A25CBD8EA075
-4A97DD79EE3E83C4A586A28A705CF1E0D7470953B163DA693E053CE99F7FA480
-1CE3234047C8D21F9C82CBB504BED56BEFEF93BA2351D9406EC42881CA864CC8
-193B05F6FB0B0FAD790B2B6FD58F05B7269FC9D6534BB9EF6B75DD0E3B9378A7
-C4A97FB7CC1BCBACBBEFBD7FF7DBDF0D6FFF65D299B95790AB84BFCBD6306726
-053253440030C5A5147D1DF6351A6D5D8E18F42124437296DEC1D09532CBAD9D
-97E38C375FC2C71B986C1EF54DB4FB0E2BBE04AC563363D06457A84D567F3335
-A007E37DEDEF877BDD62A39CB156AB379A31B8ED5E3993680BF0AF077BC895FE
-254DE9953A69EE824E49E008B38ABCC20DE80BD6934CE0404FBB2CBE0ED28DB0
-EBBD6D28DC35C8C88CF2FF4491D2F5B0F83B26F85D3692853AD6BEA5785B5981
-6C7E5A4F301BAEC672A34A9DB0D80855FFC4D865CCE845C58D5950E424AF2AF3
-0850269ED7C0C52A6DE92C1935BDB6C02681972D98F99869A30EFF9DDA144FBE
-04C8FE264FB8942304163BAE396DE1BC2B137C35F742C21D465CFDE2B6AB9DA2
-C89935BA16E133C3A81757702A0C490519C413D230A5D33F0AC84CDFB8D7EF40
-120515EF383BE74AFE6A214E056DC98DC560600C9B0A57568AF650E0D2F80FC3
-137992C3C6ACFBABD14A81235CEE0A9BD743E1512D790D11F28FE3D07886AF22
-47BFBE157DC9AFEB5A09D40403643D04256EEA85C39AC1CE909365199CC85BED
-80D5D5ABDCB25506D7EB4B52CD412436896C1DEEC661E48BE16F388BDB4D2673
-D8A9C1242A1B058737CDA19648DFD72134BCF7F6E292381C331269F3947D3A59
-AD9A34B6368FE4CF2D973429FA6F527BB228BF2E37F31E58AF5FFD45A94F7CAC
-DB81642D723C01F3AD25A278D87B27D6A6F32FD56BDA371BAA9B5F864130FE6D
-DF8D73B516F6E20FFAC81ACB0150F5ECC080E0C46A5B5D501FB867D3F0499847
-6E59F2CE715189E81C5E1228DEFF7F5DC760F4D1DDACE3F7149DAF9CBE68ACF9
-C8DA12628C07F29B21D82C7C724CE95A50F95D3D3A86591876A6DA0E36310E0C
-AEA133442C07A4EA0397A69F83BBBB1A4B4E6B8F7BCAA71D8ED9A538A380AF5B
-E8335A514D114A7111D3288610B653468AD721417F01FFE0CA457F4A7E65A4CD
-9158C6E574002D163986F9C4DF3265C1555FBCAE3B40280B7F40E63560CAE3F4
-1737235740D9002F5B2E6F58B5920B99C777788219FAA488A2ED5F8CF4D3811D
-10A321C377C17227460E5091E3D01C185323F3B0839643CC4D9FB150A5EAC0D7
-45DE4919AEAABFEDE466357CF075839B6ED866E89631C7DED2E8292523D28988
-687163F4F69FDF1273237F4C2E5D595190609D39791A11856005E3B56CB30F60
-5C76EDA611F38033850306EFDBFD10111AB4453E529AAAD3D8048A1A60690176
-FD981EE99D52604DA1DDEFD29498FD859CC1AC117D42F62506B5040B8A27D8B3
-63C8257A0D5CBD3FFC332C9A77E9E7640515238FBC96A6A57CA3BDC1BB050D66
-3CE205F1913749357AA9F399DDDD96496CE317762A837E4D60A67F8700C74BD9
-8B38ADC85914B35B6CDBA018C26417ACF4BA101193F158A68947193849A2C3DA
-F5138DDE7937368DBB65FD8A3EC9590B13699A8264F6625CE6660F2B05E18345
-5EBF0D9115A4988036F19451558F7222C478D97E3F06C64B0AF3E6D2637DBFAA
-DA0AE10A3AE1BD15E14DC9FE955ABD16CBDFBE410BC9305A47EFB7551D351A68
-E1E85B5CFDC3E83AD0273E235930D2216CA1A0E2F83F357C70BDA79FB07DDA67
-5FA022F626710D053110EF8FC5A37B14523F7595F2D8B191647F797E3A32F02A
-38EEA80C6DB62EDB165E46A3CF1093E7A840665D3B86632456C4BD58F8F9332A
-5E1C52853F0AF418DD658F6975A8B4A1702FB64FA40AA051B57F2C42B51CF787
-9FE35AC98D25DE3482E5A2B2130C72366187D255EA710256370ED0F188EEA243
-A2B153A52ACFFB3762288DB525E9F1BB08A5EC5C6CB032F78F7CB5D266912B1E
-8967E58AE8FEA5C2798EA3DD31308ACA66A7BC017E888205ECEE59D6D1935419
-B3DFC4BCA4669E983D0A8C40EF8D705D9363678C76712678590DF98741EA2BF1
-01F15D7D47DA60A42FEF198FB18B8EFD1A31BC3ABB57C1D9B1A2D64D9D76D131
-6A0A150D2C0CF681C082A3FD08B2DBF51B64C2523132A1259762FB6F47A524FD
-75B87250DA15D1BE3AC05D3A79A20D19CFBFAD5D9BBD0D6E71E839DD432F48D3
-311AB858F4107EDB50726F9F8A189CA84F7F125CE2DFBB874CF444D2DD165B15
-2E3D6AB03CBB7D9CBE28CA101A6593E0921C052E6DC54D03DE4800128E644C25
-87B781D64B22503B5061D69636D37C237F1B62D568DD42BC69C2D77FD3F78B5E
-07E8284D5B0D4D15F1E8CF70305E8E46DA1CB42EBDADFC8D65E69BD4A46F4F0B
-D6EFB732DD1C6240C7BCE44C99B3BE7254A188F26478CDF12D6EE24F1C2D83F3
-92EAFEADBEEF7E86D30B5D50A978885638A0D1B834D513D554E84F388BBAEF0E
-F4ED0F75065D6F1F9058E581DA7096EFB1900384C0E04236368DC5FF2FAF84EA
-9355CA0AFE2E8DDC76A8B90CE195CB4CC48477471A07F297D0B5DD32AA437DC7
-31A37347F7355516310C073F51B8576EC2F9030F09F6F45075A392C5CB18B650
-509CBCCAD37CFE6AFE232A7A6D21881D667F51420353CF8A7BB09D4B00E23CD2
-AC61DD527F4BD79240650D6BF9EA53A86803E112DAFBFB0BCE3BE6FB117F2B47
-B1B3CF1D90D2BE58A35BB06FC628E5064DC76F01FCFF96FD6076FCEC26A0478A
-3CA8E1891C9BF8D9AC4449A65FF1C7F361BAC8ADA1E32B5AE6DBD18EF4AEF32C
-8F84381E21D7FB6C391BF6386432134EC79A716B2CD4324DAF57B985BFD7FB87
-57CFAC69CCEB4F98137AE626EE1E653C59F697323D62849C0926C2504D60AEBB
-97A5BD2A183EA77695A269A79BAC47697438A71F2E364CB61C0413645F16C57B
-A1593782C0BBEB60653ECA519B0BB5605D25E0040CA4A11C9C2FC2F5E82C0DB3
-EFE49D9203FEFEAEFAD79FB4FAC4595B92DECF7822C56DA3AEF822544EDF1B43
-BA5FC0DFD98490B8C6665BCC871175F24DE30FE67F847EB924B63F12B3DE39BF
-5A33FAAE2E785BC8BA5F8809626260B159EE3624BE39D64D3E1AAC8C762D50A2
-508324FADFE19C54CFDA9BA61BC327B5842BF4FE3D54E5F3ABEF21684B9ABB9D
-EC3E1C5E023F073406D8B4C7AFC103E196EDA2E5A142B80B06DFD09DE99842F2
-DC550FC37307BDB5DCC5E1E80866E49CC170F0A082F4357A94542A5F5FAEAD6A
-A795FDDA3017B981DEBB2F0267CE26BB78BB498385E94B39010B93B23958AE7B
-45386A3E35E9BEC3BE3D2C197A6B7B6BE23E602052B7C58AA264F0EF1D779F04
-5D2E19819BE201F16A8FA515828FEFAFA0CD72C2B4B47ACD10ED87B3D39EF7B9
-2DD0EDA1DDD44699AA11196E48822F11AA7CBCD57B9AAC4E0657B56BAA02B230
-4D1113B8BE0AA09057CB4097B45CE2F2F6709C282586289B30657BDD19C2754B
-23526268EF8B616FF68E39031E5E052630E1B5CA5E7EC5D363ABF0DC0324A3D0
-BB4E888019425A07611FC6ECC14E3D9F13685E241C3C26B295CE8132961E4BCE
-6B570992D73CB110300280AF27DFF5230EBFAB54A1F7A30914C479B720DFAE23
-1E060B4EE82BA4747404BF340AAF3DB62494327A2C342382C053163B4C8CEB73
-BEFB0A64B4BE72F0215037D6848D1F2B2165F569C8B7E2A471068BD9B39F6433
-7FD7F82FB80348AAED8860C5336714017BBD40C465E2CD116D509F5FB570EA1D
-5A28918BDDC6AC918643F79472945930542DA0F3FCE0ED0172E5D7AC01E7C2BE
-C88CEDE2FF908B90E2D0F17409D1BC4429BEAED8FEB64D192C5619536AFA72F4
-88B197C2EC5C3F4E86C4D7063E831800B098C771572344EDC9F6F031C5B535FB
-306C9834BA9D932DA6323C717C9676B13D203D71CA476B98C25B9D0FE5FB1D58
-38190C49E189E207CF980004999C7EB603495836707FF66118D306C4CF690BF8
-2253BBADBBCBC5CF2764D2015D1A8DBB3742238EDFC0015C9BDB5CDB996BD1D4
-6818EFFD831A363AA81C641F502294E56EE5717B297B6CA1A50ED60D8B1CFFB6
-29151463169D30AEB685AC120F6F703B10037398B20B4A19421F5D5E2F2196AD
-A9324CD03D0311278AC5316A25779960046BBF8AFA27A90897E9C93BE55E8E19
-EEE5A9B49983527A21161E1EF849AEDBEB4AA0D16100A82A0C17F747DEB26C63
-529BC7C019524B772959361267CAF66A753C57599A1484DC5DC5B7B8619F9CA8
-3EF20A88BFEAD2D55DF0B9114D8E3F77FBAA8B3E6A9216D1A5C03FE4A2E29571
-A187662A0E75A997128C51FE310CE2563647CE8F7E78D3366B725129063CF456
-4C46451A40D1D01402F1BD9E3ED8CEF26D74AF047A9B8F066E935BEFBD7B74B3
-4F896E5E3F86F6D1B76F0D3C4638751EEFBAE65F116007EC04C6D54F7C66534B
-63368C667BA9DA44E132E6E6750266F0563149E955823D3323FB1D88602C1DAF
-91ABF0CC1CE35D50C204387E622BB33A6F867E65BDB0C79346298AA472CD7894
-4F0F2C997D41CB47C8F485AC5D6D60CAE106A1F70EAC706A065660BE5EB56CFE
-2D0F55C144EDA227D692F99FC92CFCC619B48D774FA5815770720EC9BD945291
-6E992BC1A0DA54D9D37BA4AF917FC2AA55F9361148EF665C3BA2A8455B493423
-BC75A0831E138F085CFB6FE00D4AAA8CE338B8431749A3BF2F9D022E57E34D73
-AB02D498DD1465AFB511B7CE8FC1106FA5AD1254DDDE19F4919D2EC534C499DB
-A5BBE3174AEE7CDB1E0E312E7B3FD2495CAF5E674124515B1179D8E45601FEAE
-B144DB54CE59D6D12D5B5222F365323035373B7F8EEB42924383E6BE093187C8
-47E9F72BC50AA6C43B33E4BE133479AD6E5F9B0684200552AA37D4E5B9D7747A
-8D94B165F5A1DEF256FBA55097BD0F3FD1D7DAB79B2FBA873B1A0ED3BA3698BB
-81EF45AFA1BC17A88E31F8B58618393EB50CB66DCB053D400889B289390513C1
-E65684F9BA2ADF1ABB9186BF3A1F3E6269CEC1AEFED4523B102F440296A6669F
-0004898DD5ED4D136C84CFA893F051217E551D9BB109DC066495FC3D9E21E29C
-61622A8F661164D4572970785027DAC03A03D250EA5A0FE9F0C51F8B116F1984
-68A29ECE9960D050553E874FD559460CE7D3CFD2E8063BEA191F742A881CD532
-2907C967810EA6B4AC72708D62914E0061A51815D321BE8B2CC28A5F1220D46C
-D4CA5E82C7F7E265A204B650B38D17768565CFA0D90DA917B1FED14F8F6D46AD
-E7EDB249CA57EF69995EB897D855170DB24EB306DF5B4C1413605F791C44407A
-22D53D19404B0DAB66CF1071ED8EF6F57A35EEC83CBAADD9584ADD74801ACDC6
-9D7079A183739B7DAEAD055FE8CF8E9981529941002CA30A12C3ED013709A59C
-DFD3FBCA7244393CC27485B72A5D656B74AF298DB699E109D4FFE01D77779CB5
-1DBF65578E675480661D853200C3D666E7854C8EB197AF183C7E719394964212
-0F469E87697D0048F3842431BF10D19361C6F3C0D244335001CB401DA457C734
-5FC96047D1A45669D9FBE9BAF45820F3FE522BF150D53526900D8DF705DF1461
-2AF52B9F9C1CA9FAE4BB64CD641EC8889EDA72B5A50C878D43D3D2E8763C42B5
-D2F151D54B72279AEDC3AA8A5C094CE5AC9CCC6A9982FBA1A8095F8EBA2E6170
-AAF51DE96629DC4E891405F93472CD4AD45D854BA69A672C29BFEE6471D2C667
-0BEA37060BD4790EF53535F68AF9B5C51610C6C803FD9777EEE7F31433C640F0
-4592B5A05BD05AC815AC3F4E7098F7FEA00BD30542EBA0BDC61BE489E11D6F3E
-0A6C9296D0AE9BD7A4A11CDA7CCAB031D76E09B41BA530F761F34A6652B2E404
-49A9DFF71AD0E6A333CAC5D24C95A0F66D4FFFF006E56602D5E911875BCF96C1
-A19ECB6C7BFCB001CA81037386BA7857D60F9A28D2A9ADA240069754F0EA4CF5
-6068BE5772A74D9A0BEC5F1B0C44747476DDD6A68301F2A58A961910DB6D205D
-370F9ABC897FF767C18F1F7D78ADEE0807AC1C4B66AF7DE68BB568233D044A0A
-089E6C8A420129616FE5456B2143AC62725097A19628F3967CD677659FC655B6
-DD22ADC822A5B1FF2761832804158F6BFAD3AA6877DA79C29C3F438E616C1FCF
-C5027493EB503FB22846E6EC21041E47F5F37929A70D384181032D7F9A8EC6BF
-9C77A34E4D5FC83450B3784B77DC7F46507FAD4C59BA798CD9873AC22577B6A6
-9932394D57086C6A2DFFB221D1C65E1FFD8061C035A4B1B5B02CD0230927158C
-07BB76F5B953BF530BB5E9B29ADC1B5C3AAB365FD0D781FB1E3B4A5DBF837ECD
-93E21C5D8B67492C7B424079F9B62F12B9CD58497F38C90BDFA280940A503067
-08BE0093B29A33C68B18AF820BE01657795ED7A06C2580AC06F0493C59AE9177
-EA75CE1AF552894FB296AF2903B323BA15BF4762733563EF6ECE4F2A2A8636EA
-6AB535F95C2F98BB0C3C5509E23A1DC04E0AEF5B91BA3F2BAD1C6C1DC5BCBEC3
-A83674D19785AB8924E9867F0E489EB962BF5F8E3B6170B5690D4C6A1BE521E8
-B09A5BCE219FAEC1418CD14BEA725AA688D6FF28F0211BC4EBB14D1013BAC8B5
-A7F28FD4E0B33CD7E051F8CC27DAC79530A3478C79B43F7B3155F97C10FC84A9
-C4BE63BCC37C7E3CEB7C14717163E902CD957017C0B023E71D04A29E3C424CAF
-2A1EEEB4C7C79842F062E7E668F7AC6F3CCAB7D34FF0B8DFC135348B32F3D040
-0BDC235FF4C0B533116C4A311A4EBE4D93A2DEAA5EE14FF43DB3A1E343B3F04D
-D0D43938DFEBD69A44719AD6A9DF4A53F6B857E96810865950484EAC676C7E24
-34C8ADCD142084E2297C1C32A9388DE6B832926DBEC25957590B05730987C00A
-42E08E3FF9A3A465F2E219E75954582684C15F65A6DF071401E7E58C40CD3AE7
-DCBADE6D8FCA3301D68F0E81C1EBD1E69ED4F2F5DCBBF17656047E887E08BC2A
-1D896E062D59FA6CEEBC56B6723E49F839CDEA7899264A2D1BF7E48ECCEE1EED
-7C86D5BD5CB5D8CFDF3ECE4939A22D2A9032BA745AF2DF5C7F91FE4D866E6324
-518D8C7999C2FDA6779F144462029EFDBC0EA5E201C207C107D39BF611663E41
-5AEC0B37E3092EC37846DB737A84A05A6B88E6654E691939554CBB03563E96A0
-01B8371D4DEE25312E2B0EB90086FC494E179DBC70AC525395231F93B49B04BF
-B93C99D8D3049A9DCE647695761ADABDBC5240337114A90488C6C4B1E209DAA9
-55EB3BC0C965993AC8E2C8D0D0A7E97FA118917B448E0D1A608DA5629ADBBC45
-11519016D530903DDAA1DE7B4282759FB4E41899D94130C3E583695557070AD8
-B9510DEE22EADB8E1D0DC22B85453705F0B6F59B9C30CD2EA845CEB084EF92AF
-D028CD99A8B08FE2CC63AD9EA8779E32FF927A1301BA3E0F77A3D862FE399CB8
-2AFE428564823C894330521CC2FD8462313B06CE2610FB6F033B19B6D50EC0B0
-45B412D291A2C92FB5E0A1B9DFE1C257B18987A793005FA591A3A99A389C5637
-77BD5CA585E4DB46553ABD1A9E6C49648025BFA974221AF71989924191676321
-D8BC0C2FDA627B626E36A6C30ABA8590C560D58A9B278D4BC8FAB9D0680CE874
-BB5C07D5E617EFB06804791F0A5344600711BC9D16D5A75D59597A0EAC2D3007
-429F6D11D53D97187B01DB88944A261B256B74D5BCAFFA4DB3FB8C7B66ADC500
-D97B4A98ADB6A60B375FE6CD4DE92D151827BCFCA63D2271E6319FDCBC91B8A3
-D987FA7614F56AF51467B9D860BF5913AD6D6DD981C41D588066A20556DEBB00
-C37611BA36EA8BDE29C45ABE9CA964D9380AA1B156440A7A9F3D1219430222F1
-E5DED04055F3138849FFE0D2D23CF2A4C16B4373E69E5A9515D52EFE92121CF8
-FE49A53A387AFF37CB668BCADE61593AEE3CCD78A2E40AC7F7AD53FAF0B334EE
-2CE9474C43A8F745E8EB9139C65EBB14CAAE13903F62A33A65D5E29AD45C8A7E
-7589127E9CFA74CAE15C1988CB6D150F5976331FC153CC13610B804C66FDEAA2
-6318A3E31C5E92326CC475289F66B82EA76F1BB29C3152EF979B025DBF8BE049
-128D23C49A094B3C70DF0A6E9C3C5F98774A6DA798013469C92EC09A30751399
-D6544A4ABD87F4750AB1DDF787F46D98E3311B1640F7D7F10BCC77C462A3AFBB
-CAD3CB3954CF53D0A3690CCE3A07AE8653F0DEA5BA711C69D61B58A6F2877E3D
-4C7D4A1D8F797C497318A26E43AB8E4581DCDEF81AA5A470712B421042D59778
-EDFE7A3BC148B5040C8734227B33544D0DF33318351021C1100BA913B3C4A2D0
-799EE051C71F2DE24C59D5BDF818AD5905C0B61AF8008EFFA5CF52473A62F6D9
-86B787A2788837A0D7779D16DEC55F3B83D248B9389407C22B1F4A674B5A14C0
-BD2D691BD9525EC94C2931007C797BCC8E9C4E27345ED46DB4F9BC60C31B3345
-74F21A6D13B857CD9D4B59C8206D6250DDCCE60EA76E688B86DC8C9F2A72C866
-D8CDF56410550C2591E4697ABE86D74A51E0DE671849C5AF50E70636BDDBEC1E
-DDCD74409CB6190338912FFD8BA79880298E54DBA7B2CA3791AEE581901F71F5
-CA2A7E9514C8AC4E789C917D10C18787B2644C5EAC961A9CFC4071554664BBBB
-03F93F9FB8AE1BE31DB2DB66AEDDC36AA2A9417B255937FDD57ED74B5E4E90DD
-CB2EED5E680C87E7D354717B885A7052FF9AA413F79BABCB8BB6CE03939C3D77
-1A11BD9B5B11B28F4AC99A7ED0E9E2AF18589C443D8D7ABC72203ABA0A9A1E56
-5E522ADE675AA4EC12D3797E7E330E3B09C0B69FD3EF30349DEE4F5FCF789994
-11A76A12B413127BA6F03434009E01ABB3DD7AE3AD6C134354D438E169EEAEA3
-5CBE2DB693D6C20C62411B7DCAE4E26B3BAD191B8A9562FE2FB6DF4714DC311F
-E7428D8C9B0D09EAA42F49871513215F10C0B330C75CD71D65273D23D31B1C2C
-05FD731F173504C089AC663533A6C9FABCF602B231A24D5C08396F4EA21D1D8A
-E1213851CC95C91D7626389BB6EAAFDB55B1874F4B23AC40291B69C3BA3536BB
-734C64108A748246661743EB227F8B8BDCB43130C62E327B9A6EE3DEF4431568
-3E082203E4D04910527688E8D8E4C077346C447D827F8EE789023A87BD779495
-7B7F6D86B236BEBFFC90C3BAB159C980BB6630920CA0118043EE85E090EBEA58
-2C95405D8505CD00F6C42E29B543D2AA364E2302560AB9C8F1A888928B11BAFC
-C6841EC5C10B8A89876A92E07EF5C12DB5086F2BCFE425AC1AAD76F7664EC108
-A46C8AABC878C60E66A64335EE4D2CAAF9DE00665D26C3DAD514AFDB9ACDE18B
-77A39416BF26F7E60EFEB4AE20CA3B28FCB2C6052161F3514D7F1C0DD328B598
-62DC3F1F458789DAA88742023271F4C7D8ED4329206624F006B5B8017BA7E853
-8AB2C2E904B11CA6598D971A758CD79BBE09442A22603B8682CC5E2B58FEF657
-B271CCAA51DA95AC0E25E09640813F66F4B7CA1A51BC85E7C60607BE329B634A
-5EC93D93CAC6748B5BDFED18534624A16A04665F44527CB0F95B890196E610AE
-A09A630071E64A7B69F18CAAEC39B093537D2A422766EFE1843B111458483E79
-2B7D8867A42CABBAE2B58E3E6142D2359D038322C1E35E7464888ADD2D2CFE1B
-1C7477BBD81979AAFFFA85038646641D3C5F5B6342031E0F5995A64B83A4DD26
-78433393C9287492BF46FECE53E7AE61D113CDDE8FC4945FD1624C2AE6BBFF96
-5ECE8C0E15DD49894A26A11AD3A509C51E206ACA05A75FAC6D85C4F8F390CA44
-9085E037A3BC1BAC41CF8E02D6007BDB231C78E7853DF2C78B807E59AB6B8F44
-0048F8D44445A6208A41B6C3B2967893ADD900B156724E0AE2B41A26956A99AD
-7E19606708FED04F40460A10439565D7BA4D0B45B4BC6AE343B0ED8422066D6C
-BB7434D6C7AF7F830433F6A70B5044C798F211DC4AE846547C9B273C7ABE3FF0
-4651ABC02DD582603A1404894BAB9DE851F26F44A2F9C794AB433930ED76E008
-8C1255DF316C0C34C7D72709A6A05F0BE2401A305FF999866ED55E662B2ED511
-70897916716FE9EBC6D2F2EC21E7E2DC418742CFEC20C5BA43A72E61B416266B
-16E69B84E384931A7523B02EC41EDCC072F52D8F4E8C9DFF3EED5F287728BF2B
-9427FEBB9CAC80A4BB2EBDC351FD8B3CA28227D9CE812DA6A787EBD0E777AE81
-1A972CB469082AF0DB6FF728E875539CE2204F50C46914877E9F6134F0052635
-5CA45E21C580FBCD0E490F7EF4A968E4C6FD0328285C59A418094967C8DCC3E1
-E1EA2F3B89D05BFFFAB5F79E67EE8AD276076E21B3F5288D2198933B8D6104C0
-70A5B68C9276789BBEFFC6FD3C7A49FFC36F623093A4B017413CC2A0FE7A5EFD
-43B0CDD3FB76D430BDCD5E30636B9C960B95C283C7A68E703CC31AB9E75D7143
-5D0C3F0D80FDE3A90867F09A42BCF7CE30329196142F3800DA8D1A0EF8C1CD5E
-6B7920DB08E81CCED0E852960769A28FAB9D1FB1BE2FBF8F26F339C70025E1E2
-E0B6A9ED330ECE80A5591B27D3307A6CC51DCCCA59613D84FF0971F0AB0741C6
-8A0481459B57CE8D02B906C78E0C13E8F4F98996B55F00F2FBA6C499870037E0
-C46E571A1AAE29D1471F372B406CB2BE78A8C5F6DFD46338146C3A4BFC0F0B2F
-98E8821E0A15647F5D65A178F13D24A698DCEDA7994B17452C67988CBDB916C3
-B037EEE02A9E1B0E7FEC3343ED4CFC33A71CF42ED5CC9E0B85A039CF686171B0
-05F1F59AB4802DE0C70D21B5390FDE1378A4EF3441CA4F9A172AC20FC56B1D9C
-1188244115F0E78254F467E3DFDF3537B382A3B27012887C24E7F1E5ADB02E80
-51C25DBF73B67D0F7FD4EDC1A8BBC8FB7DB2D053AB8B03B30003CC944A146C92
-35795A0BBEF00CC4CEB3A6E51605E0624C7D4E3CE20D9236C33B6C25D96A9560
-4C22EFA98BE24F406C4378C7908AEFCA99D6DC390B1722C53F8D81E6F82C9201
-90694663A3EEE97BB2BC1EA61402B51CBD2DB98BA67DA3CD2C7702DEA81B08E1
-37E15954CF7207567F499507AD6F6441B314E9765663E7B97AB054E5E43FF2E8
-3E55A2BC69B3E329944FBB6A89712F01705355D381971423A8D92AA0F6148122
-79FF6656EAF11DA79AE2ED7CD20CF6C2E5D27CA1A303D26BBFC61B7EED09C267
-AF069F6222AEE8021C055D3925F416A1E87C0D5B5712D368F9197304A3BC0179
-302F7786BF0D917578AF8FF0D0BC8D2622CB00835EE45BFF1A5BABAD64F816E2
-2B019077AF25AF84B110EEBD9F67AA72EF46586F81AD2B0D3778A040D98FA801
-4749531D612DA3B2EB3F15637BB67CBBF510562CA91F5ADDEA8D224105F17041
-DF41FAEC591B36FD5D8E9B1E17B550A139E97101A15C053B8132DD223768DD65
-BCC3E81DBB4AC7562DA15A54597495A5CBB4EC11AC13D1F323305874D4973C34
-9ACE4DE9DF1C1CEC32F6E365930A25B4BD8050066DB87B455C7703D35D3ED5D6
-E4724D69901889BA61A6DC19D9F4F8C3EE4A08D3A5D6D0EC554151275C6C2C9E
-6A97505763BDA178E443A34C2F58C9D0DC25E14785454F0F1FF04C285A92799B
-755FD7A129BD019F68E921A5BDADB28C6ADEC0492F49FF143C836320F5BE027D
-57399677A4E1FCBDC530B03342B476ACA7756E432B05A9E0D19A56FD8CA10C6F
-E10DD88922D75A80DDFFE0047A18CBDE683B22EFBA43B9947FAD6F587BE6A39C
-CFB57B06BE4606B63F8BEE2FBD4BD609FF22843283A486293EB28BFA6AAC988F
-CD5E44A37550CAD6EE9CDE2B11DC2801D07E15D69B58254B43F9E0052C16202C
-FD06FC09DB828A5D662B9FF0A65CBACCA5891BF58E0165B962FE988E5416B01D
-F164CCDD712E451C98B13F4906F91C5D32D90A18A8690A983DE1A16C9A0D0ECE
-CFA7FFD4A70E49510AD7AC05F96905035257FC3A6523D9AFD759741B8F6831F3
-C6986EF4F7E345971DCDE1614E4A6BD6EBE7FB188AFA5F68C73BD8BAE5B080D1
-C8FCFEC5F37BFCE83C83FFE6A28A5A92B467484D5F0E62BA7C1F01F8BE99B963
-1D218C617192829A1CBE4595EEBDBE6C003DF6D2BEC6F7093418F57611FC145E
-F899F25C06203399147E68AD2555FE4AA55D10A74FA21BD1B49B0F8AF69687AB
-82E1B221017ED55B6066D8E5DB67EB34112BF819A9CD0B4889E5EC0CBC29E8DB
-CF1F2144477A21770EAC0A168A0721A5ACD02C8DD52AFFED2D1DC5261D1D31DB
-6A71B466A1E5F0A8B5E7139E6D5A3DAA07D3FDCB5A67FCAB59485237998219EA
-76CF0FCC3FAE0EBE7CEEFB87681B8F767957B3EC013A0FD3865301C00080C402
-16A1EE30488674F4B0C73E974861FDF1C36C01EB39B0EEACC1192BE4D0BC7277
-83D24F76655473BFE2BB37A16ECBB6CDD7049A40585F3A3E6D83E5F2D477D53F
-A61F1896CFB7F9C5F6D6AF66FAE1A930D5B7F1481BDC25B3E90CFEADACD3FA3E
-CC22D0B14D4B7A2D1B20C975847279B907A4D0379184AEF964A6956AC6675E9D
-540DB1E69980BA8E33BF379C3FA2943473E60E8204A50C037E30684460EA326B
-3D2789A8C5521FCE733EB527DABD96A52661401C91229B5EBD90EC2DF899B25C
-7A8FF9703C39B67DF148B753907C4C4BBF79FF317E6E22749CE3BE573992B1DB
-E0D45B61C080EA167DEEA544532421F7CA78AB1C6AE9EB16DA18A166619BF863
-90D4F9BCA5F533E484D4FED76B7A9E7FE259EBCF583936A02E3DE997BEFE1ED8
-1953B7A5F9295967B18AE5AE8C00F8AF334F376693094B30ADFA1389A74CA2BB
-87E621C6025E5C6BADE40F5AC6F6DBF055987E5C5C87660163C3692150A50A1F
-82971F7690B05041B4139753BB90AB544CBBE2BA33FDF9F7FA515464C6013C8F
-865AA1D8353A47799C63F558D4F21FFD59BF4723AA77365000A9F4BBED286E4B
-FDD01B60C88019E2
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMCSC10
-%!PS-AdobeFont-1.1: CMCSC10 1.0
-%%CreationDate: 1991 Aug 18 17:46:49
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMCSC10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMCSC10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 65 /A put
-dup 76 /L put
-dup 82 /R put
-dup 97 /a put
-dup 98 /b put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 104 /h put
-dup 108 /l put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 116 /t put
-dup 117 /u put
-dup 121 /y put
-readonly def
-/FontBBox{14 -250 1077 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A30EB76029337
-900ECFB1390CA5C0C3A04528044F266BA17BE487C79B94FAC6D6484684C5BFEA
-87BCCC77D40AD11552035E95E3007126418ED49B68468B38A14E88E68A267B98
-076F1C9769A5AFBC285E5B158EAC9F926F1D6C0B8F1D57D9C31D25AE27123518
-9D2CD92E5689E0213089BD268DA5E47525CB8EABAA4B78A15AEA34705889AB3A
-FFB8953B5B3482E52BFA0940630ADF8C0AC2177D907324299EE980E850F203CD
-B627962F43D5A678C44243CDE97853BDC6AB45FD5C09AD274DAF89929F583CC9
-CCC24BDFC68B92111055ABA5F26D2DC67C70906F71C2957701D65AE746A60C30
-40E6CB24B97FCDAD0487AE38A201FBF0E41BABD2181981A71940F1E707F91E5D
-C8CA50CB16D8702D188E56D014D92F76CE0B52ABDB9110E32438D2BBF3E6A40B
-7B005F10BB437812CAC6ED2996F7606DC962C4FDE207FF322782C343DF44CEC5
-FF06A55C630C20E9AE1B0D1C5673753C43BA0767D65D1B451CC6380D8BB3C4DC
-81E8FD8AA79BE993218686F29D3CD925566DD587F541A0DA1B1CC3BCEA2E6C7D
-5E1016F6917A871F1BBAD96AF9E867735017119A381FCF33EB2D3E1E7093FD90
-CDB0CED4818CFD9E201A03430CEC713620BE0D3254158931FB657C6AD4B2482A
-0E7D070D7497892E9E942DF58E88CAF0C8221BF36BF7C435BF2C683A4A2EF4CB
-E85820A8AD3486155A40143011BA9D76297F46DEF69ECA4596D6E4CAABF84091
-22A96A4BC78A8DD072FEB759A68A44BE1164638B6D952147EE3C628F9A022060
-1D1941E73310943FA782532ABCCC88593FD63E7E2CECF6665C04DB48D641ABD3
-AE1BB468638681E96394B9E7BED1D13E534B897DB90EA6EC706BAAE06BE2FEFF
-1DFA5258113E9B4CD2D36655973864574E0E8D6291E48A8C62203F679B7ED838
-6F7CBD523C2943ECA994CACE63DBE3C3FC80F475ABF6BD5EDEADE08D828E6B26
-6FE55D18EDED9A2A7B353AB7B1DA738F4F262AF743F8907DEB78362173D5EBEE
-5238175D5CA0BF9CE9B82399D771C12720F18B9B7CFF85D5D20332904A71D4B7
-A174C77F5B8D1E632967E3516A260178E07A1EE092EDD6F348B25AF1F69EC753
-802EE12BAA4E755785F548A7C2B2C1EE4ACCF84E5831BB0D1A1BC7B7E4508C0F
-0156F9BE0189BCDC40D7B2DE6CE5724B03352DDB93E97B862600D0FB9FA3C583
-38C84108D1934D8716E3ED3B064C8CD28FF3E24D6ACE036C592F4F2D010C4A68
-5B338B4380B4F24DF440965836B17F7B46592D24CD8668DE3CD9A027BA1A70FC
-750C51D36FD3B39911A01B48BE87DAE7BC1633C44247502286405A1F13B7717B
-7569ADDBACCEA4AE3E88D1CF3F78060DBD2B7695693902385DDF1B30A71098B6
-7B5CEC9A2FA61779BE27421DFA3B18DDA2E7F038CDB3605EA355E954932EB9ED
-4B7AECF7F33286C2E2B54698563BEC0D14DFBD313802D808B4C69761C1002C64
-8F6E75DBA7A7B0DFDB5B0CBCE27F108C1A8C0989ABA3A290EBA4782CBF8E270E
-A291213DD16D0151D6A493AD2CB1C0EDDAF839A78796B388AD27A8E7CADCB17C
-BF01E25B36A4D9600FD7F8355A7366CAB1E923D60DDE0CDA5813FEC7679E9DE9
-CEE9010A637BF09CA29D4C59E8E43BAF97ABB82E54326D7E2D6246A0B2CE2042
-7B81376AD1FA3552FAB451C905DDDEB8BAEF44EE76EE4D1A9BE715C3FD317028
-EAE42497E8419F83E3278849D441621DBF8A491F66A24AE49B9972C46B2F6C2B
-4463F73E15CEFD43E46B9517E9E1C886404FB41345556A2998516C00B700D053
-0DDCD51F0EC27CB43C84561624757505CF959521FBB7F47051FDF60E1E36247E
-0819273C424165F053C831293B50615EBF3FD01E784431DA1C4DCBFE8A04C5DC
-CCF0F23A51C77291A124A2DD1A167BCA8F3B8FD5B0FAB4546A417C6C63FD265E
-9E9BBEA99A37D3707C99AE85BD75A35EB8B3F97C1052D63337D5FCD7A2E3C133
-A137B80D4ECAF904A35E094996CB722EA00E197C660D915788EF61335C97A1D8
-C8442C42F6076C051F17BD4308154C99ED66D4BDE1D5D3ADA4507B415B4F58C6
-83C155A9DD0C95A97BE9B14BBBD6791E11E170AAB2C2E638EBD33EA7CFE35A5B
-06223215D2A6C806EAE888D600DA4112A09E691FF7AF08F8A00B4FC6E1B0F4EB
-D34E84A1409C474865229BBF39376D62289A2C35F3EF2FE2B4604D7ADAF0755F
-EBA9038FA2C3B6EB6C7F8B343EFF9AE0068EFBB24949CBB8BEC157451D14F86E
-91785EE29B3BE2B1479740090BB4A450CCB1143C5F9271992A90D05E64A31B64
-4745DCB13B4A3EE25939DCBE342F18E625419FA82B5A718780F8B8E86E26DAB3
-9A8F0065CFDE2405DDA7EFCF75D538848C296ED7CF5F03153420D27311003FD2
-F29236C4DCAD83E7C72BE250DF3443CF105C3083275C29673F686B9BCCB41F78
-8491ECC2F9AF90276705BF08F1C0AE18B57EF6C29427C77D11848F6ED88A5FE0
-025DF6383C2B49CDA9C7D20A649F3CA5493B1BE4FAA0BC6A9EABE0EB7AC19A35
-88E0AD4871314D5D202CB25584FFA236ADF1C2DA02566FC44B36926661312276
-8EA1E55BC08807F595E89DE0E3791D27EC975D11159DBD41EDF5D99CF092A991
-268001084E09138095AC768D063804BDE078AD9DFF074207139AC26D23B90AD0
-A571490214CDEC8F090B8A4497A1697DE589C5DF782B56C4083007D697A2B602
-13725A6D4105588509D27A6550F40A379E53B1CAD8050FBC2F77875266498046
-243ADCA1F4860B4EEAB4BAE088BC2AB990508F7F48326214D62975639F9FAE67
-72D82F304C10479AEED5594BFA5E3234C17EED3D7FA1BD2C0C3ABF5CBDC18BED
-6A4F1B3A210BB8281EA848BD5CEDEB93CB4BDCB917C85DE151C92A398E228446
-EB9516265C34437ED5745139AF4B422054D118D0C8BB168C4DDBF152A9BAA3B2
-E3A7B515E35323418B1267E25AB312CC57ADF2BC879B4961F4D331228A6319FB
-E39117D6BE6989C594C3516F7B485BA19C95FBC6C5D2D8123D88705981E02DDC
-8DE2D08FCA03A4DA14CDD45D52209A5F7EFE19043122FF2575C4A10BAEB015C2
-041D4DCFA024373DD96021210ABF2CE0447AE374AB39BBC2523767B5D4D32EB2
-DB0DD9B1EEFFE16B2819182F0335F984740A60BDFBFDAF8BD036640F360B8D0A
-723DF3A2395DC347051BA8260D3DE173F9DCFD0E9C69D88E3BDFB0CF73E2D0E1
-8BE0BCD8933EF4D2DF9F57F3EC894782C366F5F95CFFADD7844585F2F4E7FC0B
-29FBF43D5476A1D8710523A2DF19832A73E5B7D40CA8A476C3E41FD3B5A34366
-F3DC42231743D5AD92BED6AB872F0548B81F0F83A40F1CE45F1A1A7104C1B033
-731CC0B5A96252924415CED4A8FFAD8D5DB42F21F2AC183832551102603C1C8A
-6332ACC319838B9EE080768CB09DE60C6D4007399C6130577FC8925367B73DE5
-0E5D0DA7ABAF518C58FFE632640B039932010B0B621B9D04E7BEA1492034522F
-A80BCBDB6A0B7BC89968F02371164E29F3B62766128AEDABD73FC685F72A6717
-6C77026662A2CE8BF0E7B728107DD61C38C15E3CFB2A79CF957CF3A3AB312E87
-FB7EB8F1FF8605CD0B451BB28BDCD3B145177E5C799D1EA3DC8E24BCD4BCE3D1
-302199DC6EC1B0BEFB8E7AFC228BD5F5E7F05E2B93F33E903724E07212F3B96E
-3E31D8C164B464443C08CD41C51F30A6F310E76E550ACB045B6F530BC73B6C4E
-BDB8785CCC20D84393D447D68415BE0779C72156CECD2A4AB616FBE8B3840A58
-36CA343E3EFA85B98A0AA0FFEDD3921D1D0CDC3AF250B91778C0EB8CDBF2027D
-DD9FEB89105658120513D5BE01DBEE3D8CB662AC0F44BE0E5A1C6A4FC1CD9A07
-C0206B77F84CA48997EEC2002AF7D36A4DB872FDB1BA65BE82B39CC6ABFE9C10
-3163442E2E24C18C4C441915A94911FF5A150BEFD2F88D6CE3AAFDDAE115B64E
-F1DBD90A742149CC8DDE50E3DA10444215015A812DB478CFABD4064265CC61B3
-9B5C9A4DE0BF464DCBC38E736483C2DDE7654F3E2BB7015C3C78A68854DFA1B3
-6700839203AB93FB4A56F3441454B1DF79E79E398084FC7A63CBFAB6628D5504
-725A43221C9F6EEA584F93C12126188E0F74A78D95E390AC27FEE9ABF06B934B
-2542AFEA0B6E648FA461F4D65B5187E326C128155445AA7C065AB7AD2311E16E
-3A5D4614859CF78A6948145405D449A62279F83629085B71782A00969254BD1F
-BED9862FFEBC63103C1A8C4F64A1D1700C7909D81D5199B88ED79A907C503EF4
-E7E46AC957CB4330D39B823C793AE592F0DF06EE26E7FC5CF024E4E3EDE1AA4B
-93AE4C205D93D15DBE10083471AC5F58B3F4A18CA9D4093F4B21CB0D8DC48F1E
-0EE8F82C333E6B6CBA64E915EDD88CAFCD71945F93DBC713F0D6237132615F4A
-C50DA1A760D3D2579A3E3BF1BA9B0D24C0D96669DF652E4F09397509C5CDE8DB
-545806D74D722A2AE74031B3079CEBE922619E4BA181868B2F304DCA9DE05366
-C21BA5AD769FB898DEF6DE248004F4999EBCB8A6EE38FDEB09509BE08E8BDE17
-DD914E47D0418C7A4F66B69AEFF1DF30E85474AF9837908F40239335925AC35A
-88CE8914667AD0185919F0B57D18B2550942C9A89DA77E4EBB86383729239E60
-97809CCE0800D0EFFBCD0912ED69F514F7B3F2DF77F64E9B1012833B84519444
-85BAB11C62D9DD4E6B0306D27E40D90F630431F9F737B7F384F9BC084FB6EC35
-97556AACA6E7F5B9246102C2150212DEA5F6B2D82BBA992960DC158CDC9A5893
-1AE8BB3BCB7DD2C3E33B3F3764259ECDE6DD310BDCC309AA5997B95D0785538A
-94A6370DAD984AF104E6F40E23DB1D13CB10E1749D44C695A3F91D3F2902304C
-7D1615C7846F3580
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-TeXDict begin 39139632 55387786 1000 600 600 (sun211.dvi)
- at start /Fa 150[32 105[{}1 90.9091 /CMBXTI10 rf /Fb 160[62
-95[{}1 119.552 /CMTT12 rf /Fc 193[91 1[91 60[{}2 119.552
-/CMMI12 rf /Fd 133[42 50 50 69 50 53 37 38 39 50 53 48
-53 80 27 50 29 27 53 48 29 44 53 42 53 46 6[58 1[72 99
-72 73 66 53 72 72 65 72 75 91 57 75 1[36 75 75 60 63
-73 69 68 72 5[27 27 5[48 48 48 48 48 1[27 32 3[37 37
-26[53 53 56 11[{}64 83.022 /CMBX10 rf /Fe 133[52 62 62
-85 62 65 46 46 46 62 65 59 65 98 33 62 36 33 65 59 36
-52 65 52 65 59 6[72 1[88 120 88 88 85 65 86 1[80 91 88
-107 73 91 1[42 88 92 76 80 89 85 83 88 1[55 5[59 3[59
-59 59 59 59 59 59 1[39 33 2[46 46 33 24[98 65 65 68 11[{}67
-119.552 /CMR12 rf /Ff 160[39 95[{}1 74.7198 /CMTT9 rf
-/Fg 137[35 12[24 3[35 3[39 50[24 46[{}5 74.7198 /CMTI9
-rf /Fh 138[41 25 33 32 3[43 1[21 2[24 2[34 33 1[31 30
-37 17[54 2[48 17[20 58[{}15 66.4176 /CMMI8 rf /Fi 145[42
-3[23 2[42 42 7[55 69[65 8[42 11[42 2[65{}9 83.022 /CMSY10
-rf /Fj 131[83 42 37 44 44 60 44 46 32 33 33 44 46 42
-46 69 23 44 25 23 46 42 25 37 46 37 46 42 3[23 42 23
-51 62 62 85 62 62 60 46 61 65 57 65 62 76 52 65 43 30
-62 65 54 57 63 60 59 62 1[39 1[65 1[23 23 42 42 42 42
-42 42 42 42 42 42 42 23 28 23 65 1[32 32 23 65 69 42
-1[42 23 18[69 46 46 48 11[{}88 83.022 /CMR10 rf /Fk 138[39
-25 31 31 3[41 1[21 2[23 2[32 31 1[30 29 36 17[50 2[46
-76[{}14 58.1154 /CMMI7 rf /Fl 153[41 39[65 1[65 1[23
-58[{}4 83.022 /CMMI10 rf /Fm 252[38 2[60{}2 74.7198 /CMSY9
-rf /Fn 197[21 58[{}1 74.7198 /CMMI9 rf /Fo 133[42 45
-52 4[43 5[80 1[47 1[31 52 1[45 15[53 2[56 3[69 73 3[50
-40 76 71 58 7[71 45 71 25 25 32[52 2[55 22[{}25 90.9091
-/CMMI10 rf /Fp 241[35 13[55{}2 66.4176 /CMSY8 rf /Fq
-133[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
-48 48 48 48 48 48 48 48 48 48 48 48 1[48 1[48 48 48 48
-48 48 48 48 48 1[48 48 48 48 48 48 48 48 48 48 48 48
-48 48 48 48 2[48 48 48 48 48 48 48 48 48 48 48 48 48
-48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 48 34[{}83
-90.9091 /CMTT10 rf /Fr 133[34 41 41 55 41 43 30 30 30
-41 43 38 43 64 21 41 23 21 43 38 23 34 43 34 43 38 4[38
-1[47 1[58 79 1[58 55 43 57 1[52 60 58 70 48 60 1[28 58
-60 50 1[59 55 54 58 1[36 4[21 1[38 38 38 38 1[38 38 38
-38 38 21 26 21 60 1[30 30 21 4[38 21 20[43 45 11[{}70
-74.7198 /CMR9 rf /Fs 198[30 30 30 30 30 30 30 30 30 30
-48[{}10 49.8132 /CMR6 rf /Ft 130[44 44 44 44 44 44 44
-44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44
-44 44 44 44 44 44 1[44 44 44 44 44 44 44 44 44 44 44
-44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44
-1[44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44
-44 44 44 44 44 44 44 44 44 44 1[44 44 44 33[{}90 83.022
-/CMTT10 rf /Fu 135[40 7[76 8[45 45 86[45 8[71 2[45 71
-1[71{}9 90.9091 /CMSY10 rf /Fv 198[35 35 35 35 35 35
-35 35 35 35 48[{}10 66.4176 /CMR8 rf /Fw 131[112 1[50
-59 59 81 59 62 44 44 46 1[62 56 62 93 31 59 34 31 62
-56 34 51 62 50 62 54 4[58 3[85 116 85 86 78 62 84 84
-77 84 88 106 67 2[42 88 88 70 74 86 81 80 85 1[53 5[56
-56 56 56 56 56 56 56 56 56 56 31 37 31 2[44 44 5[58 21[62
-65 11[{}69 99.6264 /CMBX12 rf /Fx 134[44 42 60 42 49
-30 37 38 42 46 46 51 74 23 42 28 28 46 42 28 42 46 42
-42 46 6[56 2[91 1[68 65 51 66 2[70 68 82 3[35 1[70 59
-62 1[65 8[28 4[46 2[46 46 46 46 28 33 28 2[37 37 27[51
-56 11[{}52 90.9091 /CMTI10 rf /Fy 131[91 2[48 48 66 48
-51 35 36 36 1[51 45 51 76 25 48 28 25 51 45 28 40 51
-40 51 45 7[68 68 93 68 68 66 51 67 1[62 71 68 83 57 71
-47 33 68 71 59 62 69 66 64 68 7[45 45 45 45 45 45 45
-45 45 45 45 25 30 25 2[35 35 27[51 53 11[{}67 90.9091
-/CMSL10 rf /Fz 133[60 71 71 97 71 75 52 53 55 71 75 67
-75 112 37 71 41 37 75 67 41 61 75 60 75 65 6[82 102 102
-139 102 103 94 75 100 1[92 101 105 128 81 105 1[50 105
-106 85 88 103 97 96 102 7[67 67 67 67 67 67 67 67 67
-67 67 37 45 3[52 52 27[75 78 11[{}67 119.552 /CMBX12
-rf /FA 169[122 32[81 1[81 4[45 46[{}4 143.462 /CMBX12
-rf /FB 134[123 3[129 90 92 95 2[116 129 194 65 2[65 1[116
-71 106 129 1[129 113 9[240 175 1[162 129 2[159 3[140
-3[182 183 3[168 1[175 23[90 90 65 39[{}29 206.559 /CMBX12
-rf /FC 134[51 51 1[51 54 38 38 38 1[54 49 54 81 27 51
-30 27 54 1[30 43 54 43 54 49 11[73 1[54 72 1[66 1[73
-89 8[75 70 69 73 10[49 3[49 49 2[27 33 6[76 25[54 12[{}39
-99.6264 /CMR12 rf /FD 131[105 2[55 55 76 55 58 41 41
-43 55 58 52 58 87 29 55 32 29 58 52 32 48 58 46 58 51
-4[55 2[79 79 108 79 80 73 58 78 1[71 79 82 99 63 82 1[40
-82 82 66 69 80 76 74 79 2[49 1[32 1[29 52 52 52 52 52
-52 52 52 52 52 52 29 35 29 81 1[41 41 5[55 21[58 61 11[{}73
-90.9091 /CMBX10 rf /FE 134[56 3[56 54 1[55 1[51 58 56
-1[47 3[56 1[49 51 57 1[53 56 14[73 5[62 10[74 65[{}17
-90.9091 /CMCSC10 rf /FF 131[91 45 40 48 48 66 48 51 35
-36 36 48 51 45 51 76 25 48 28 25 51 45 28 40 51 40 51
-45 25 2[25 45 25 56 68 68 93 68 68 66 51 67 71 62 71
-68 83 57 71 47 33 68 71 59 62 69 66 64 68 1[43 43 71
-25 25 25 45 45 45 45 45 45 45 45 45 45 45 25 30 25 71
-45 35 35 25 71 76 2[45 25 17[76 76 51 51 53 11[{}92 90.9091
-/CMR10 rf end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%PaperSize: A4
- end
-%%EndSetup
-%%Page: 1 1
-TeXDict begin 1 0 bop 0 351 a FF(CCLR)m(C)29 b(/)i FE(R)m(utherf)n(ord)
-h(Appleton)h(Labora)-6 b(tor)g(y)1176 b FD(SUN/211.26)0
-464 y FC(P)m(article)34 b(Ph)m(ysics)h(&)d(Astronom)m(y)i(Researc)m(h)g
-(Council)0 577 y(Starlink)f(Pro)5 b(ject)0 690 y(Starlink)33
-b(User)h(Note)e(211.26)2455 927 y FF(R.F.)f(W)-8 b(arren-Smith)31
-b(&)f(D.S.)h(Berry)3039 1040 y(30th)g(Octob)s(er)g(2009)p
-0 1183 3780 12 v 1657 1504 a FB(AST)702 1754 y(A)78 b(Library)e(for)h
-(Handling)520 2003 y(W)-19 b(orld)77 b(Co)6 b(ordinate)78
-b(Systems)1192 2252 y(in)f(Astronom)-6 b(y)1726 2618
-y FA(V5.3)826 2931 y FB(Programmer's)76 b(Guide)1297
-3134 y(\(C)i(V)-19 b(ersion\))245 3396 y
- gsave currentpoint currentpoint translate -90 neg rotate neg exch neg exch translate
- 245 3396 a @beginspecial
-20 @llx 100 @lly 530 @urx 631 @ury 1275 @rwi @setspecial
-%%BeginDocument: sun211_figures/fronta_bw.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 20 100 530 631
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:47:36
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-4877 5612 m
-4853 5612 l
-S
-4829 5613 m
-4805 5613 l
-S
-4781 5614 m
-4757 5614 l
-S
-4733 5614 m
-4709 5615 l
-S
-4685 5615 m
-4661 5616 l
-S
-4637 5616 m
-4613 5617 l
-S
-4589 5617 m
-4565 5618 l
-S
-4541 5618 m
-4517 5619 l
-S
-4493 5619 m
-4469 5620 l
-S
-4445 5620 m
-4421 5621 l
-S
-4397 5621 m
-4373 5621 l
-S
-4349 5622 m
-4325 5622 l
-S
-4301 5623 m
-4277 5623 l
-S
-4253 5624 m
-4229 5624 l
-S
-4205 5625 m
-4181 5625 l
-S
-4157 5626 m
-4133 5626 l
-S
-4109 5627 m
-4101 5627 l
-4085 5627 l
-S
-4061 5628 m
-4037 5628 l
-S
-4013 5628 m
-3989 5629 l
-S
-3965 5629 m
-3941 5630 l
-S
-3917 5630 m
-3893 5631 l
-S
-3869 5631 m
-3845 5632 l
-S
-3821 5632 m
-3797 5633 l
-S
-3773 5633 m
-3749 5634 l
-S
-3725 5634 m
-3701 5635 l
-S
-3677 5635 m
-3652 5636 l
-S
-3628 5636 m
-3604 5636 l
-S
-3580 5637 m
-3564 5637 l
-3556 5637 l
-S
-3532 5638 m
-3508 5638 l
-S
-3484 5639 m
-3460 5639 l
-S
-3436 5640 m
-3412 5640 l
-S
-3388 5641 m
-3364 5641 l
-S
-3340 5642 m
-3316 5642 l
-S
-3292 5643 m
-3268 5643 l
-S
-3244 5643 m
-3220 5644 l
-S
-3196 5644 m
-3172 5645 l
-S
-3148 5645 m
-3124 5646 l
-S
-3100 5646 m
-3076 5647 l
-S
-3052 5647 m
-3028 5648 l
-S
-3004 5648 m
-2980 5649 l
-S
-2956 5649 m
-2932 5650 l
-S
-2908 5650 m
-2884 5650 l
-S
-2860 5651 m
-2836 5651 l
-S
-2812 5652 m
-2788 5652 l
-S
-2764 5653 m
-2740 5653 l
-S
-2716 5654 m
-2692 5654 l
-S
-2668 5655 m
-2644 5655 l
-S
-2620 5656 m
-2596 5656 l
-S
-2572 5657 m
-2548 5657 l
-S
-2524 5657 m
-2500 5658 l
-S
-2476 5658 m
-2452 5659 l
-S
-2428 5659 m
-2404 5660 l
-S
-2380 5660 m
-2356 5661 l
-S
-2332 5661 m
-2308 5662 l
-S
-2284 5662 m
-2260 5663 l
-S
-2236 5663 m
-2212 5664 l
-S
-2188 5664 m
-2164 5665 l
-S
-2140 5665 m
-2116 5665 l
-S
-2092 5666 m
-2068 5666 l
-S
-2044 5667 m
-2020 5667 l
-S
-1996 5668 m
-1972 5668 l
-S
-1948 5669 m
-1924 5669 l
-S
-1900 5670 m
-1876 5670 l
-S
-1852 5671 m
-1828 5671 l
-S
-1804 5672 m
-1780 5672 l
-S
-1756 5672 m
-1732 5673 l
-S
-1708 5673 m
-1684 5674 l
-S
-1660 5674 m
-1636 5675 l
-S
-1612 5675 m
-1588 5676 l
-S
-1564 5676 m
-1540 5677 l
-S
-1516 5677 m
-1492 5678 l
-S
-1468 5678 m
-1444 5679 l
-S
-1420 5679 m
-1416 5679 l
-1396 5679 l
-S
-1372 5680 m
-1348 5680 l
-S
-1323 5681 m
-1299 5681 l
-S
-1275 5682 m
-1251 5682 l
-S
-1227 5683 m
-1203 5683 l
-S
-1179 5684 m
-1155 5684 l
-S
-1131 5685 m
-1107 5685 l
-S
-1083 5686 m
-1059 5686 l
-S
-1035 5687 m
-1011 5687 l
-S
-987 5687 m
-963 5688 l
-S
-939 5688 m
-915 5689 l
-S
-891 5689 m
-879 5690 l
-867 5690 l
-S
-843 5690 m
-819 5691 l
-S
-795 5691 m
-771 5692 l
-S
-747 5692 m
-723 5693 l
-S
-699 5693 m
-675 5694 l
-S
-651 5694 m
-627 5694 l
-S
-603 5695 m
-579 5695 l
-S
-555 5696 m
-533 5696 l
-S
-4877 4985 m
-4875 4985 l
-S
-4851 4986 m
-4827 4986 l
-S
-4803 4987 m
-4779 4987 l
-S
-4755 4988 m
-4731 4988 l
-S
-4707 4988 m
-4683 4989 l
-S
-4659 4989 m
-4635 4990 l
-S
-4611 4990 m
-4601 4991 l
-4587 4991 l
-S
-4563 4991 m
-4539 4992 l
-S
-4515 4992 m
-4491 4993 l
-S
-4467 4993 m
-4443 4994 l
-S
-4419 4994 m
-4395 4995 l
-S
-4371 4995 m
-4347 4996 l
-S
-4323 4996 m
-4299 4997 l
-S
-4275 4997 m
-4251 4997 l
-S
-4227 4998 m
-4203 4998 l
-S
-4179 4999 m
-4155 4999 l
-S
-4131 5000 m
-4107 5000 l
-S
-4083 5001 m
-4064 5001 l
-4059 5001 l
-S
-4035 5002 m
-4011 5002 l
-S
-3987 5003 m
-3963 5003 l
-S
-3939 5004 m
-3915 5004 l
-S
-3891 5005 m
-3867 5005 l
-S
-3843 5006 m
-3819 5006 l
-S
-3795 5007 m
-3770 5007 l
-S
-3746 5007 m
-3722 5008 l
-S
-3698 5008 m
-3674 5009 l
-S
-3650 5009 m
-3626 5010 l
-S
-3602 5010 m
-3578 5011 l
-S
-3554 5011 m
-3530 5012 l
-S
-3506 5012 m
-3482 5013 l
-S
-3458 5013 m
-3434 5014 l
-S
-3410 5014 m
-3386 5015 l
-S
-3362 5015 m
-3338 5016 l
-S
-3314 5016 m
-3290 5016 l
-S
-3266 5017 m
-3242 5017 l
-S
-3218 5018 m
-3194 5018 l
-S
-3170 5019 m
-3146 5019 l
-S
-3122 5020 m
-3098 5020 l
-S
-3074 5021 m
-3050 5021 l
-S
-3026 5022 m
-3002 5022 l
-S
-2978 5023 m
-2954 5023 l
-S
-2930 5024 m
-2906 5024 l
-S
-2882 5025 m
-2858 5025 l
-S
-2834 5025 m
-2810 5026 l
-S
-2786 5026 m
-2762 5027 l
-S
-2738 5027 m
-2714 5028 l
-S
-2690 5028 m
-2666 5029 l
-S
-2642 5029 m
-2618 5030 l
-S
-2594 5030 m
-2570 5031 l
-S
-2546 5031 m
-2522 5032 l
-S
-2498 5032 m
-2474 5033 l
-S
-2450 5033 m
-2426 5034 l
-S
-2402 5034 m
-2378 5035 l
-S
-2354 5035 m
-2330 5035 l
-S
-2306 5036 m
-2282 5036 l
-S
-2258 5037 m
-2234 5037 l
-S
-2210 5038 m
-2186 5038 l
-S
-2162 5039 m
-2138 5039 l
-S
-2114 5040 m
-2090 5040 l
-S
-2066 5041 m
-2042 5041 l
-S
-2018 5042 m
-1994 5042 l
-S
-1970 5043 m
-1946 5043 l
-S
-1922 5044 m
-1916 5044 l
-1898 5044 l
-S
-1874 5044 m
-1850 5045 l
-S
-1826 5045 m
-1802 5046 l
-S
-1778 5046 m
-1754 5047 l
-S
-1730 5047 m
-1706 5048 l
-S
-1682 5048 m
-1658 5049 l
-S
-1634 5049 m
-1610 5050 l
-S
-1586 5050 m
-1562 5051 l
-S
-1538 5051 m
-1514 5052 l
-S
-1490 5052 m
-1466 5053 l
-S
-1442 5053 m
-1418 5053 l
-S
-1393 5054 m
-1379 5054 l
-1369 5054 l
-S
-1345 5055 m
-1321 5055 l
-S
-1297 5056 m
-1273 5056 l
-S
-1249 5057 m
-1225 5057 l
-S
-1201 5058 m
-1177 5058 l
-S
-1153 5059 m
-1129 5059 l
-S
-1105 5060 m
-1081 5060 l
-S
-1057 5061 m
-1033 5061 l
-S
-1009 5062 m
-985 5062 l
-S
-961 5063 m
-937 5063 l
-S
-913 5063 m
-889 5064 l
-S
-865 5064 m
-842 5065 l
-841 5065 l
-S
-817 5065 m
-793 5066 l
-S
-769 5066 m
-745 5067 l
-S
-721 5067 m
-697 5068 l
-S
-673 5068 m
-649 5069 l
-S
-625 5069 m
-601 5070 l
-S
-577 5070 m
-553 5071 l
-S
-4873 4359 m
-4849 4359 l
-S
-4825 4360 m
-4801 4360 l
-S
-4777 4361 m
-4753 4361 l
-S
-4729 4362 m
-4705 4362 l
-S
-4681 4362 m
-4657 4363 l
-S
-4633 4363 m
-4609 4364 l
-S
-4585 4364 m
-4563 4365 l
-4561 4365 l
-S
-4537 4365 m
-4513 4366 l
-S
-4489 4366 m
-4465 4367 l
-S
-4441 4367 m
-4417 4368 l
-S
-4393 4368 m
-4369 4369 l
-S
-4345 4369 m
-4321 4370 l
-S
-4297 4370 m
-4273 4371 l
-S
-4249 4371 m
-4225 4372 l
-S
-4201 4372 m
-4177 4373 l
-S
-4153 4373 m
-4129 4374 l
-S
-4105 4374 m
-4081 4375 l
-S
-4057 4375 m
-4033 4375 l
-S
-4009 4376 m
-3985 4376 l
-S
-3961 4377 m
-3937 4377 l
-S
-3913 4378 m
-3889 4378 l
-S
-3865 4379 m
-3841 4379 l
-S
-3816 4380 m
-3792 4380 l
-S
-3768 4381 m
-3744 4381 l
-S
-3720 4382 m
-3696 4382 l
-S
-3672 4383 m
-3648 4383 l
-S
-3624 4384 m
-3600 4384 l
-S
-3576 4385 m
-3552 4385 l
-S
-3528 4386 m
-3504 4386 l
-S
-3480 4387 m
-3456 4387 l
-S
-3432 4387 m
-3408 4388 l
-S
-3384 4388 m
-3360 4389 l
-S
-3336 4389 m
-3312 4390 l
-S
-3288 4390 m
-3264 4391 l
-S
-3240 4391 m
-3216 4392 l
-S
-3192 4392 m
-3168 4393 l
-S
-3144 4393 m
-3120 4394 l
-S
-3096 4394 m
-3072 4395 l
-S
-3048 4395 m
-3024 4396 l
-S
-3000 4396 m
-2976 4397 l
-S
-2952 4397 m
-2928 4398 l
-S
-2904 4398 m
-2880 4399 l
-S
-2856 4399 m
-2832 4400 l
-S
-2808 4400 m
-2784 4400 l
-S
-2760 4401 m
-2736 4401 l
-S
-2712 4402 m
-2688 4402 l
-S
-2664 4403 m
-2640 4403 l
-S
-2616 4404 m
-2592 4404 l
-S
-2568 4405 m
-2544 4405 l
-S
-2520 4406 m
-2496 4406 l
-S
-2472 4407 m
-2448 4407 l
-S
-2424 4408 m
-2416 4408 l
-2400 4408 l
-S
-2376 4409 m
-2352 4409 l
-S
-2328 4410 m
-2304 4410 l
-S
-2280 4411 m
-2256 4411 l
-S
-2232 4412 m
-2208 4412 l
-S
-2184 4413 m
-2160 4413 l
-S
-2136 4413 m
-2112 4414 l
-S
-2088 4414 m
-2064 4415 l
-S
-2040 4415 m
-2016 4416 l
-S
-1992 4416 m
-1968 4417 l
-S
-1944 4417 m
-1920 4418 l
-S
-1896 4418 m
-1879 4419 l
-1872 4419 l
-S
-1848 4419 m
-1824 4420 l
-S
-1800 4420 m
-1776 4421 l
-S
-1752 4421 m
-1728 4422 l
-S
-1704 4422 m
-1680 4423 l
-S
-1656 4423 m
-1632 4424 l
-S
-1608 4424 m
-1584 4425 l
-S
-1560 4425 m
-1536 4426 l
-S
-1512 4426 m
-1488 4426 l
-S
-1464 4427 m
-1439 4427 l
-S
-1415 4428 m
-1391 4428 l
-S
-1367 4429 m
-1343 4429 l
-S
-1319 4430 m
-1295 4430 l
-S
-1271 4431 m
-1247 4431 l
-S
-1223 4432 m
-1199 4432 l
-S
-1175 4433 m
-1151 4433 l
-S
-1127 4434 m
-1103 4434 l
-S
-1079 4435 m
-1055 4435 l
-S
-1031 4436 m
-1007 4436 l
-S
-983 4437 m
-959 4437 l
-S
-935 4438 m
-911 4438 l
-S
-887 4439 m
-863 4439 l
-S
-839 4439 m
-815 4440 l
-S
-791 4440 m
-767 4441 l
-S
-743 4441 m
-719 4442 l
-S
-695 4442 m
-671 4443 l
-S
-647 4443 m
-623 4444 l
-S
-599 4444 m
-575 4445 l
-S
-551 4445 m
-533 4446 l
-S
-4877 3732 m
-4871 3732 l
-S
-4847 3733 m
-4823 3733 l
-S
-4799 3734 m
-4775 3734 l
-S
-4751 3735 m
-4727 3735 l
-S
-4703 3735 m
-4679 3736 l
-S
-4655 3736 m
-4631 3737 l
-S
-4607 3737 m
-4583 3738 l
-S
-4559 3738 m
-4535 3739 l
-S
-4511 3739 m
-4487 3740 l
-S
-4463 3740 m
-4439 3741 l
-S
-4415 3741 m
-4391 3742 l
-S
-4367 3742 m
-4343 3743 l
-S
-4319 3743 m
-4295 3744 l
-S
-4271 3744 m
-4247 3745 l
-S
-4223 3745 m
-4199 3746 l
-S
-4175 3746 m
-4151 3747 l
-S
-4127 3747 m
-4103 3748 l
-S
-4079 3748 m
-4055 3749 l
-S
-4031 3749 m
-4007 3750 l
-S
-3983 3750 m
-3959 3751 l
-S
-3935 3751 m
-3911 3752 l
-S
-3887 3752 m
-3863 3753 l
-S
-3839 3753 m
-3814 3754 l
-S
-3790 3754 m
-3766 3755 l
-S
-3742 3755 m
-3718 3755 l
-S
-3694 3756 m
-3670 3756 l
-S
-3646 3757 m
-3622 3757 l
-S
-3598 3758 m
-3574 3758 l
-S
-3550 3759 m
-3526 3759 l
-S
-3502 3760 m
-3478 3760 l
-S
-3454 3761 m
-3451 3761 l
-3430 3761 l
-S
-3406 3762 m
-3382 3762 l
-S
-3358 3763 m
-3334 3763 l
-S
-3310 3764 m
-3286 3764 l
-S
-3262 3765 m
-3238 3765 l
-S
-3214 3766 m
-3190 3766 l
-S
-3166 3767 m
-3142 3767 l
-S
-3118 3768 m
-3094 3768 l
-S
-3070 3769 m
-3046 3769 l
-S
-3022 3770 m
-2998 3770 l
-S
-2974 3771 m
-2950 3771 l
-S
-2926 3772 m
-2914 3772 l
-2902 3772 l
-S
-2878 3773 m
-2854 3773 l
-S
-2830 3774 m
-2806 3774 l
-S
-2782 3775 m
-2758 3775 l
-S
-2734 3776 m
-2710 3776 l
-S
-2686 3776 m
-2662 3777 l
-S
-2638 3777 m
-2614 3778 l
-S
-2590 3778 m
-2566 3779 l
-S
-2542 3779 m
-2518 3780 l
-S
-2494 3780 m
-2470 3781 l
-S
-2446 3781 m
-2422 3782 l
-S
-2398 3782 m
-2378 3783 l
-2374 3783 l
-S
-2350 3783 m
-2326 3784 l
-S
-2302 3784 m
-2278 3785 l
-S
-2254 3785 m
-2230 3786 l
-S
-2206 3786 m
-2182 3787 l
-S
-2158 3787 m
-2134 3788 l
-S
-2110 3788 m
-2086 3789 l
-S
-2062 3789 m
-2038 3790 l
-S
-2014 3790 m
-1990 3791 l
-S
-1966 3791 m
-1942 3792 l
-S
-1918 3792 m
-1894 3793 l
-S
-1870 3793 m
-1846 3794 l
-S
-1822 3794 m
-1798 3795 l
-S
-1774 3795 m
-1750 3796 l
-S
-1726 3796 m
-1702 3796 l
-S
-1678 3797 m
-1654 3797 l
-S
-1630 3798 m
-1606 3798 l
-S
-1582 3799 m
-1558 3799 l
-S
-1534 3800 m
-1510 3800 l
-S
-1486 3801 m
-1462 3801 l
-S
-1438 3802 m
-1414 3802 l
-S
-1389 3803 m
-1365 3803 l
-S
-1341 3804 m
-1317 3804 l
-S
-1293 3805 m
-1269 3805 l
-S
-1245 3806 m
-1221 3806 l
-S
-1197 3807 m
-1173 3807 l
-S
-1149 3808 m
-1125 3808 l
-S
-1101 3809 m
-1077 3809 l
-S
-1053 3810 m
-1029 3810 l
-S
-1005 3811 m
-981 3811 l
-S
-957 3812 m
-933 3812 l
-S
-909 3813 m
-885 3813 l
-S
-861 3814 m
-837 3814 l
-S
-813 3815 m
-789 3815 l
-S
-765 3816 m
-741 3816 l
-S
-717 3817 m
-693 3817 l
-S
-669 3817 m
-645 3818 l
-S
-621 3818 m
-597 3819 l
-S
-573 3819 m
-549 3820 l
-S
-4869 3105 m
-4845 3106 l
-S
-4821 3106 m
-4797 3107 l
-S
-4773 3107 m
-4749 3108 l
-S
-4725 3108 m
-4701 3109 l
-S
-4677 3109 m
-4653 3110 l
-S
-4629 3110 m
-4605 3111 l
-S
-4581 3111 m
-4557 3112 l
-S
-4533 3112 m
-4509 3113 l
-S
-4485 3113 m
-4461 3114 l
-S
-4437 3114 m
-4413 3115 l
-S
-4389 3115 m
-4365 3116 l
-S
-4341 3116 m
-4317 3117 l
-S
-4293 3117 m
-4269 3118 l
-S
-4245 3118 m
-4221 3119 l
-S
-4197 3119 m
-4173 3120 l
-S
-4149 3120 m
-4125 3121 l
-S
-4101 3121 m
-4077 3122 l
-S
-4053 3122 m
-4029 3123 l
-S
-4005 3123 m
-3981 3124 l
-S
-3957 3124 m
-3950 3124 l
-3933 3125 l
-S
-3909 3125 m
-3885 3126 l
-S
-3861 3126 m
-3837 3127 l
-S
-3813 3127 m
-3789 3128 l
-S
-3764 3128 m
-3740 3129 l
-S
-3716 3129 m
-3692 3130 l
-S
-3668 3130 m
-3644 3131 l
-S
-3620 3131 m
-3596 3132 l
-S
-3572 3132 m
-3548 3133 l
-S
-3524 3133 m
-3500 3134 l
-S
-3476 3134 m
-3452 3135 l
-S
-3428 3135 m
-3413 3135 l
-3404 3136 l
-S
-3380 3136 m
-3356 3137 l
-S
-3332 3137 m
-3308 3138 l
-S
-3284 3138 m
-3260 3139 l
-S
-3236 3139 m
-3212 3140 l
-S
-3188 3140 m
-3164 3141 l
-S
-3140 3141 m
-3116 3142 l
-S
-3092 3142 m
-3068 3143 l
-S
-3044 3143 m
-3020 3144 l
-S
-2996 3144 m
-2972 3145 l
-S
-2948 3145 m
-2924 3146 l
-S
-2900 3146 m
-2876 3147 l
-S
-2852 3147 m
-2828 3148 l
-S
-2804 3148 m
-2780 3149 l
-S
-2756 3149 m
-2732 3150 l
-S
-2708 3150 m
-2684 3151 l
-S
-2660 3151 m
-2636 3152 l
-S
-2612 3152 m
-2588 3152 l
-S
-2564 3153 m
-2540 3153 l
-S
-2516 3154 m
-2492 3154 l
-S
-2468 3155 m
-2444 3155 l
-S
-2420 3156 m
-2396 3156 l
-S
-2372 3157 m
-2348 3157 l
-S
-2324 3158 m
-2300 3158 l
-S
-2276 3159 m
-2252 3159 l
-S
-2228 3160 m
-2204 3160 l
-S
-2180 3161 m
-2156 3161 l
-S
-2132 3162 m
-2108 3162 l
-S
-2084 3163 m
-2060 3163 l
-S
-2036 3164 m
-2012 3164 l
-S
-1988 3165 m
-1964 3165 l
-S
-1940 3166 m
-1916 3166 l
-S
-1892 3167 m
-1868 3167 l
-S
-1844 3168 m
-1820 3168 l
-S
-1796 3169 m
-1772 3169 l
-S
-1748 3170 m
-1724 3170 l
-S
-1700 3171 m
-1676 3171 l
-S
-1652 3172 m
-1628 3172 l
-S
-1604 3173 m
-1580 3173 l
-S
-1556 3174 m
-1532 3174 l
-S
-1508 3175 m
-1484 3175 l
-S
-1460 3176 m
-1436 3176 l
-S
-1412 3177 m
-1388 3177 l
-S
-1364 3178 m
-1340 3178 l
-S
-1315 3179 m
-1291 3179 l
-S
-1267 3180 m
-1265 3180 l
-1243 3180 l
-S
-1219 3181 m
-1195 3181 l
-S
-1171 3182 m
-1147 3182 l
-S
-1123 3183 m
-1099 3183 l
-S
-1075 3184 m
-1051 3184 l
-S
-1027 3185 m
-1003 3185 l
-S
-979 3186 m
-955 3186 l
-S
-931 3187 m
-907 3187 l
-S
-883 3188 m
-859 3188 l
-S
-835 3189 m
-811 3189 l
-S
-787 3190 m
-763 3190 l
-S
-739 3191 m
-728 3191 l
-715 3191 l
-S
-691 3192 m
-667 3192 l
-S
-643 3193 m
-619 3193 l
-S
-595 3194 m
-571 3194 l
-S
-547 3195 m
-533 3195 l
-S
-4877 2479 m
-4867 2479 l
-S
-4843 2479 m
-4819 2480 l
-S
-4795 2480 m
-4771 2481 l
-S
-4747 2481 m
-4723 2482 l
-S
-4699 2482 m
-4675 2483 l
-S
-4651 2483 m
-4627 2484 l
-S
-4603 2484 m
-4579 2485 l
-S
-4555 2485 m
-4531 2486 l
-S
-4507 2486 m
-4483 2487 l
-S
-4459 2487 m
-4448 2488 l
-4435 2488 l
-S
-4411 2488 m
-4387 2489 l
-S
-4363 2489 m
-4339 2490 l
-S
-4315 2490 m
-4291 2491 l
-S
-4267 2491 m
-4243 2492 l
-S
-4219 2492 m
-4195 2493 l
-S
-4171 2493 m
-4147 2494 l
-S
-4123 2494 m
-4099 2495 l
-S
-4075 2495 m
-4051 2496 l
-S
-4027 2496 m
-4003 2497 l
-S
-3979 2497 m
-3955 2498 l
-S
-3931 2498 m
-3911 2499 l
-3907 2499 l
-S
-3883 2499 m
-3859 2500 l
-S
-3835 2500 m
-3811 2501 l
-S
-3787 2501 m
-3763 2502 l
-S
-3739 2502 m
-3715 2503 l
-S
-3691 2503 m
-3667 2504 l
-S
-3642 2504 m
-3618 2505 l
-S
-3594 2505 m
-3570 2506 l
-S
-3546 2506 m
-3522 2507 l
-S
-3498 2507 m
-3474 2508 l
-S
-3450 2508 m
-3426 2509 l
-S
-3402 2509 m
-3378 2510 l
-S
-3354 2510 m
-3330 2511 l
-S
-3306 2511 m
-3282 2512 l
-S
-3258 2512 m
-3234 2513 l
-S
-3210 2513 m
-3186 2514 l
-S
-3162 2514 m
-3138 2515 l
-S
-3114 2515 m
-3090 2516 l
-S
-3066 2516 m
-3042 2517 l
-S
-3018 2517 m
-2994 2518 l
-S
-2970 2519 m
-2946 2519 l
-S
-2922 2520 m
-2898 2520 l
-S
-2874 2521 m
-2850 2521 l
-S
-2826 2522 m
-2802 2522 l
-S
-2778 2523 m
-2754 2523 l
-S
-2730 2524 m
-2706 2524 l
-S
-2682 2525 m
-2658 2525 l
-S
-2634 2526 m
-2610 2526 l
-S
-2586 2527 m
-2562 2527 l
-S
-2538 2528 m
-2514 2528 l
-S
-2490 2529 m
-2466 2529 l
-S
-2442 2530 m
-2418 2530 l
-S
-2394 2531 m
-2370 2531 l
-S
-2346 2532 m
-2322 2532 l
-S
-2298 2533 m
-2274 2533 l
-S
-2250 2534 m
-2226 2534 l
-S
-2202 2535 m
-2178 2535 l
-S
-2154 2536 m
-2130 2536 l
-S
-2106 2537 m
-2082 2537 l
-S
-2058 2538 m
-2034 2538 l
-S
-2010 2539 m
-1986 2539 l
-S
-1962 2540 m
-1938 2540 l
-S
-1914 2541 m
-1890 2541 l
-S
-1866 2542 m
-1842 2542 l
-S
-1818 2543 m
-1794 2543 l
-S
-1770 2544 m
-1763 2544 l
-1746 2544 l
-S
-1722 2545 m
-1698 2545 l
-S
-1674 2546 m
-1650 2546 l
-S
-1626 2547 m
-1602 2547 l
-S
-1578 2548 m
-1554 2548 l
-S
-1530 2549 m
-1506 2549 l
-S
-1482 2550 m
-1458 2550 l
-S
-1434 2551 m
-1410 2551 l
-S
-1386 2552 m
-1362 2552 l
-S
-1338 2553 m
-1314 2553 l
-S
-1290 2554 m
-1266 2554 l
-S
-1242 2555 m
-1226 2555 l
-1218 2555 l
-S
-1194 2556 m
-1170 2556 l
-S
-1145 2557 m
-1121 2557 l
-S
-1097 2558 m
-1073 2558 l
-S
-1049 2559 m
-1025 2559 l
-S
-1001 2560 m
-977 2560 l
-S
-953 2561 m
-929 2561 l
-S
-905 2562 m
-881 2562 l
-S
-857 2563 m
-833 2563 l
-S
-809 2564 m
-785 2564 l
-S
-761 2565 m
-737 2565 l
-S
-713 2566 m
-689 2566 l
-S
-665 2567 m
-641 2567 l
-S
-617 2568 m
-593 2568 l
-S
-569 2569 m
-545 2569 l
-S
-4865 1852 m
-4841 1853 l
-S
-4817 1853 m
-4793 1854 l
-S
-4769 1854 m
-4745 1855 l
-S
-4721 1855 m
-4697 1856 l
-S
-4673 1856 m
-4649 1857 l
-S
-4625 1857 m
-4601 1858 l
-S
-4577 1858 m
-4553 1859 l
-S
-4529 1859 m
-4505 1860 l
-S
-4481 1860 m
-4457 1861 l
-S
-4433 1861 m
-4409 1862 l
-S
-4385 1862 m
-4361 1863 l
-S
-4337 1863 m
-4313 1864 l
-S
-4289 1864 m
-4265 1865 l
-S
-4241 1865 m
-4217 1866 l
-S
-4193 1866 m
-4169 1867 l
-S
-4145 1867 m
-4121 1868 l
-S
-4097 1869 m
-4073 1869 l
-S
-4049 1870 m
-4025 1870 l
-S
-4001 1871 m
-3977 1871 l
-S
-3953 1872 m
-3929 1872 l
-S
-3905 1873 m
-3881 1873 l
-S
-3857 1874 m
-3833 1874 l
-S
-3809 1875 m
-3785 1875 l
-S
-3761 1876 m
-3737 1876 l
-S
-3713 1877 m
-3689 1877 l
-S
-3665 1878 m
-3641 1878 l
-S
-3617 1879 m
-3593 1879 l
-S
-3569 1880 m
-3545 1880 l
-S
-3521 1881 m
-3497 1881 l
-S
-3473 1882 m
-3448 1882 l
-S
-3424 1883 m
-3400 1883 l
-S
-3376 1884 m
-3352 1884 l
-S
-3328 1885 m
-3304 1885 l
-S
-3280 1886 m
-3256 1886 l
-S
-3232 1887 m
-3208 1887 l
-S
-3184 1888 m
-3160 1888 l
-S
-3136 1889 m
-3112 1889 l
-S
-3088 1890 m
-3064 1890 l
-S
-3040 1891 m
-3016 1891 l
-S
-2992 1892 m
-2968 1892 l
-S
-2944 1893 m
-2920 1893 l
-S
-2896 1894 m
-2872 1894 l
-S
-2848 1895 m
-2824 1895 l
-S
-2800 1896 m
-2797 1896 l
-2776 1896 l
-S
-2752 1897 m
-2728 1897 l
-S
-2704 1898 m
-2680 1898 l
-S
-2656 1899 m
-2632 1900 l
-S
-2608 1900 m
-2584 1901 l
-S
-2560 1901 m
-2536 1902 l
-S
-2512 1902 m
-2488 1903 l
-S
-2464 1903 m
-2440 1904 l
-S
-2416 1904 m
-2392 1905 l
-S
-2368 1905 m
-2344 1906 l
-S
-2320 1906 m
-2296 1907 l
-S
-2272 1907 m
-2260 1907 l
-2248 1908 l
-S
-2224 1908 m
-2200 1909 l
-S
-2176 1909 m
-2152 1910 l
-S
-2128 1910 m
-2104 1911 l
-S
-2080 1911 m
-2056 1912 l
-S
-2032 1912 m
-2008 1913 l
-S
-1984 1913 m
-1960 1914 l
-S
-1936 1914 m
-1912 1915 l
-S
-1888 1915 m
-1864 1916 l
-S
-1840 1916 m
-1816 1917 l
-S
-1792 1917 m
-1768 1918 l
-S
-1744 1918 m
-1724 1919 l
-1720 1919 l
-S
-1696 1919 m
-1672 1920 l
-S
-1648 1920 m
-1624 1921 l
-S
-1600 1921 m
-1576 1922 l
-S
-1552 1922 m
-1528 1923 l
-S
-1504 1923 m
-1480 1924 l
-S
-1456 1924 m
-1432 1925 l
-S
-1408 1925 m
-1384 1926 l
-S
-1360 1926 m
-1336 1927 l
-S
-1312 1927 m
-1288 1928 l
-S
-1264 1928 m
-1240 1929 l
-S
-1216 1930 m
-1192 1930 l
-S
-1168 1931 m
-1144 1931 l
-S
-1120 1932 m
-1096 1932 l
-S
-1072 1933 m
-1048 1933 l
-S
-1024 1934 m
-1000 1934 l
-S
-976 1935 m
-952 1935 l
-S
-927 1936 m
-903 1936 l
-S
-879 1937 m
-855 1937 l
-S
-831 1938 m
-807 1938 l
-S
-783 1939 m
-759 1939 l
-S
-735 1940 m
-711 1940 l
-S
-687 1941 m
-663 1941 l
-S
-639 1942 m
-615 1942 l
-S
-591 1943 m
-567 1943 l
-S
-543 1944 m
-533 1944 l
-S
-4877 2742 m
-4876 2728 l
-S
-4875 2704 m
-4873 2680 l
-S
-4872 2656 m
-4870 2632 l
-S
-4869 2608 m
-4867 2584 l
-S
-4866 2560 m
-4864 2536 l
-S
-4863 2512 m
-4861 2488 l
-S
-4860 2464 m
-4858 2440 l
-S
-4857 2416 m
-4855 2392 l
-S
-4854 2368 m
-4852 2344 l
-S
-4851 2320 m
-4849 2296 l
-S
-4848 2273 m
-4846 2249 l
-S
-4845 2225 m
-4843 2201 l
-S
-4842 2177 m
-4840 2153 l
-S
-4838 2129 m
-4838 2121 l
-4837 2105 l
-S
-4835 2081 m
-4834 2057 l
-S
-4832 2033 m
-4831 2009 l
-S
-4829 1985 m
-4828 1961 l
-S
-4826 1937 m
-4825 1913 l
-S
-4823 1889 m
-4822 1865 l
-S
-4820 1841 m
-4819 1817 l
-S
-4817 1793 m
-4816 1777 l
-S
-4502 6121 m
-4501 6113 l
-S
-4500 6089 m
-4498 6065 l
-S
-4497 6041 m
-4496 6017 l
-S
-4494 5993 m
-4493 5969 l
-S
-4491 5945 m
-4490 5921 l
-S
-4489 5897 m
-4488 5888 l
-4487 5874 l
-S
-4486 5850 m
-4484 5826 l
-S
-4483 5802 m
-4482 5778 l
-S
-4480 5754 m
-4479 5730 l
-S
-4477 5706 m
-4476 5682 l
-S
-4475 5658 m
-4473 5634 l
-S
-4472 5610 m
-4470 5586 l
-S
-4469 5562 m
-4468 5538 l
-S
-4466 5514 m
-4465 5490 l
-S
-4463 5466 m
-4462 5442 l
-S
-4461 5418 m
-4459 5394 l
-S
-4458 5370 m
-4457 5351 l
-4456 5346 l
-S
-4455 5322 m
-4454 5298 l
-S
-4452 5274 m
-4451 5250 l
-S
-4449 5226 m
-4448 5202 l
-S
-4446 5178 m
-4445 5155 l
-S
-4444 5131 m
-4442 5107 l
-S
-4441 5083 m
-4439 5059 l
-S
-4438 5035 m
-4436 5011 l
-S
-4435 4987 m
-4434 4963 l
-S
-4432 4939 m
-4431 4915 l
-S
-4429 4891 m
-4428 4867 l
-S
-4426 4843 m
-4425 4819 l
-S
-4424 4795 m
-4422 4771 l
-S
-4421 4747 m
-4419 4723 l
-S
-4418 4699 m
-4416 4675 l
-S
-4415 4651 m
-4414 4627 l
-S
-4412 4603 m
-4411 4579 l
-S
-4409 4555 m
-4408 4531 l
-S
-4406 4507 m
-4405 4484 l
-S
-4403 4460 m
-4402 4436 l
-S
-4401 4412 m
-4399 4388 l
-S
-4398 4364 m
-4396 4340 l
-S
-4395 4316 m
-4393 4292 l
-S
-4392 4268 m
-4390 4244 l
-S
-4389 4220 m
-4388 4196 l
-S
-4386 4172 m
-4385 4148 l
-S
-4383 4124 m
-4382 4100 l
-S
-4380 4076 m
-4379 4052 l
-S
-4377 4028 m
-4376 4004 l
-S
-4374 3980 m
-4373 3956 l
-S
-4372 3932 m
-4370 3908 l
-S
-4369 3884 m
-4367 3860 l
-S
-4366 3836 m
-4364 3813 l
-S
-4363 3789 m
-4361 3765 l
-S
-4360 3741 m
-4358 3717 l
-S
-4357 3693 m
-4355 3669 l
-S
-4354 3645 m
-4353 3621 l
-S
-4351 3597 m
-4350 3573 l
-S
-4348 3549 m
-4347 3525 l
-S
-4345 3501 m
-4344 3477 l
-S
-4342 3453 m
-4341 3429 l
-S
-4339 3405 m
-4338 3381 l
-S
-4336 3357 m
-4335 3333 l
-S
-4333 3309 m
-4332 3285 l
-S
-4330 3261 m
-4329 3237 l
-S
-4327 3213 m
-4327 3206 l
-4326 3190 l
-S
-4324 3166 m
-4323 3142 l
-S
-4321 3118 m
-4320 3094 l
-S
-4318 3070 m
-4317 3046 l
-S
-4316 3022 m
-4314 2998 l
-S
-4313 2974 m
-4311 2950 l
-S
-4310 2926 m
-4308 2902 l
-S
-4307 2878 m
-4305 2854 l
-S
-4304 2830 m
-4302 2806 l
-S
-4301 2782 m
-4299 2758 l
-S
-4298 2734 m
-4296 2710 l
-S
-4295 2686 m
-4294 2670 l
-4293 2662 l
-S
-4292 2638 m
-4290 2614 l
-S
-4289 2590 m
-4287 2567 l
-S
-4286 2543 m
-4284 2519 l
-S
-4283 2495 m
-4281 2471 l
-S
-4280 2447 m
-4278 2423 l
-S
-4277 2399 m
-4275 2375 l
-S
-4274 2351 m
-4272 2327 l
-S
-4270 2303 m
-4269 2279 l
-S
-4267 2255 m
-4266 2231 l
-S
-4264 2207 m
-4263 2183 l
-S
-4261 2159 m
-4260 2135 l
-S
-4258 2111 m
-4257 2087 l
-S
-4255 2063 m
-4254 2039 l
-S
-4252 2015 m
-4251 1991 l
-S
-4249 1968 m
-4248 1944 l
-S
-4246 1920 m
-4245 1896 l
-S
-4243 1872 m
-4242 1848 l
-S
-4240 1824 m
-4239 1800 l
-S
-3923 6120 m
-3921 6096 l
-S
-3920 6072 m
-3918 6048 l
-S
-3917 6024 m
-3916 6000 l
-S
-3914 5976 m
-3913 5952 l
-S
-3912 5928 m
-3910 5904 l
-S
-3909 5880 m
-3907 5856 l
-S
-3906 5832 m
-3905 5808 l
-S
-3903 5784 m
-3902 5760 l
-S
-3900 5736 m
-3899 5712 l
-S
-3898 5688 m
-3896 5664 l
-S
-3895 5640 m
-3893 5616 l
-S
-3892 5592 m
-3890 5568 l
-S
-3889 5544 m
-3888 5521 l
-S
-3886 5497 m
-3885 5473 l
-S
-3883 5449 m
-3882 5425 l
-S
-3881 5401 m
-3879 5377 l
-S
-3878 5353 m
-3876 5329 l
-S
-3875 5305 m
-3874 5281 l
-S
-3872 5257 m
-3871 5233 l
-S
-3869 5209 m
-3868 5185 l
-S
-3866 5161 m
-3865 5137 l
-S
-3864 5113 m
-3862 5089 l
-S
-3861 5065 m
-3859 5041 l
-S
-3858 5017 m
-3857 4993 l
-S
-3855 4969 m
-3854 4945 l
-S
-3852 4921 m
-3851 4897 l
-S
-3849 4873 m
-3848 4849 l
-S
-3847 4826 m
-3845 4802 l
-S
-3844 4778 m
-3842 4754 l
-S
-3841 4730 m
-3839 4706 l
-S
-3838 4682 m
-3836 4658 l
-S
-3835 4634 m
-3834 4610 l
-S
-3832 4586 m
-3831 4562 l
-S
-3829 4538 m
-3828 4514 l
-S
-3826 4490 m
-3825 4466 l
-S
-3823 4442 m
-3822 4418 l
-S
-3821 4394 m
-3819 4370 l
-S
-3818 4346 m
-3816 4322 l
-S
-3815 4298 m
-3814 4290 l
-3813 4274 l
-S
-3812 4250 m
-3810 4226 l
-S
-3809 4202 m
-3808 4178 l
-S
-3806 4155 m
-3805 4131 l
-S
-3803 4107 m
-3802 4083 l
-S
-3800 4059 m
-3799 4035 l
-S
-3797 4011 m
-3796 3987 l
-S
-3794 3963 m
-3793 3939 l
-S
-3792 3915 m
-3790 3891 l
-S
-3789 3867 m
-3787 3843 l
-S
-3786 3819 m
-3784 3795 l
-S
-3783 3771 m
-3782 3754 l
-3781 3747 l
-S
-3780 3723 m
-3778 3699 l
-S
-3777 3675 m
-3775 3651 l
-S
-3774 3627 m
-3772 3603 l
-S
-3771 3579 m
-3770 3555 l
-S
-3768 3531 m
-3767 3508 l
-S
-3765 3484 m
-3764 3460 l
-S
-3762 3436 m
-3761 3412 l
-S
-3759 3388 m
-3758 3364 l
-S
-3756 3340 m
-3755 3316 l
-S
-3753 3292 m
-3752 3268 l
-S
-3750 3244 m
-3749 3220 l
-S
-3747 3196 m
-3746 3172 l
-S
-3744 3148 m
-3743 3124 l
-S
-3741 3100 m
-3740 3076 l
-S
-3738 3052 m
-3737 3028 l
-S
-3735 3004 m
-3734 2980 l
-S
-3732 2956 m
-3731 2932 l
-S
-3730 2908 m
-3728 2885 l
-S
-3727 2861 m
-3725 2837 l
-S
-3724 2813 m
-3722 2789 l
-S
-3721 2765 m
-3719 2741 l
-S
-3718 2717 m
-3716 2693 l
-S
-3715 2669 m
-3713 2645 l
-S
-3712 2621 m
-3710 2597 l
-S
-3709 2573 m
-3707 2549 l
-S
-3706 2525 m
-3704 2501 l
-S
-3703 2477 m
-3701 2453 l
-S
-3699 2429 m
-3698 2405 l
-S
-3696 2381 m
-3695 2357 l
-S
-3693 2333 m
-3692 2309 l
-S
-3690 2286 m
-3689 2262 l
-S
-3687 2238 m
-3686 2214 l
-S
-3684 2190 m
-3683 2166 l
-S
-3681 2142 m
-3680 2118 l
-S
-3678 2094 m
-3677 2070 l
-S
-3675 2046 m
-3674 2022 l
-S
-3672 1998 m
-3671 1974 l
-S
-3669 1950 m
-3668 1926 l
-S
-3666 1902 m
-3665 1878 l
-S
-3663 1854 m
-3662 1830 l
-S
-3660 1806 m
-3658 1782 l
-S
-3343 6102 m
-3341 6078 l
-S
-3340 6054 m
-3339 6030 l
-S
-3337 6006 m
-3336 5982 l
-S
-3334 5958 m
-3333 5934 l
-S
-3332 5910 m
-3332 5910 l
-3330 5887 l
-S
-3329 5863 m
-3327 5839 l
-S
-3326 5815 m
-3325 5791 l
-S
-3323 5767 m
-3322 5743 l
-S
-3320 5719 m
-3319 5695 l
-S
-3318 5671 m
-3316 5647 l
-S
-3315 5623 m
-3313 5599 l
-S
-3312 5575 m
-3311 5551 l
-S
-3309 5527 m
-3308 5503 l
-S
-3306 5479 m
-3305 5455 l
-S
-3304 5431 m
-3302 5407 l
-S
-3301 5383 m
-3300 5374 l
-3299 5359 l
-S
-3298 5335 m
-3296 5311 l
-S
-3295 5287 m
-3294 5263 l
-S
-3292 5239 m
-3291 5215 l
-S
-3289 5191 m
-3288 5168 l
-S
-3287 5144 m
-3285 5120 l
-S
-3284 5096 m
-3282 5072 l
-S
-3281 5048 m
-3279 5024 l
-S
-3278 5000 m
-3277 4976 l
-S
-3275 4952 m
-3274 4928 l
-S
-3272 4904 m
-3271 4880 l
-S
-3269 4856 m
-3268 4838 l
-3268 4832 l
-S
-3267 4808 m
-3265 4784 l
-S
-3264 4760 m
-3262 4736 l
-S
-3261 4712 m
-3259 4688 l
-S
-3258 4664 m
-3256 4640 l
-S
-3255 4616 m
-3254 4592 l
-S
-3252 4568 m
-3251 4544 l
-S
-3249 4520 m
-3248 4497 l
-S
-3246 4473 m
-3245 4449 l
-S
-3244 4425 m
-3242 4401 l
-S
-3241 4377 m
-3239 4353 l
-S
-3238 4329 m
-3236 4305 l
-S
-3235 4281 m
-3233 4257 l
-S
-3232 4233 m
-3231 4209 l
-S
-3229 4185 m
-3228 4161 l
-S
-3226 4137 m
-3225 4113 l
-S
-3223 4089 m
-3222 4065 l
-S
-3220 4041 m
-3219 4017 l
-S
-3217 3993 m
-3216 3969 l
-S
-3214 3945 m
-3213 3921 l
-S
-3212 3897 m
-3210 3873 l
-S
-3209 3849 m
-3207 3826 l
-S
-3206 3802 m
-3204 3778 l
-S
-3203 3754 m
-3201 3730 l
-S
-3200 3706 m
-3198 3682 l
-S
-3197 3658 m
-3195 3634 l
-S
-3194 3610 m
-3192 3586 l
-S
-3191 3562 m
-3190 3538 l
-S
-3188 3514 m
-3187 3490 l
-S
-3185 3466 m
-3184 3442 l
-S
-3182 3418 m
-3181 3394 l
-S
-3179 3370 m
-3178 3346 l
-S
-3176 3322 m
-3175 3298 l
-S
-3173 3274 m
-3172 3250 l
-S
-3170 3226 m
-3169 3203 l
-S
-3167 3179 m
-3166 3155 l
-S
-3164 3131 m
-3163 3107 l
-S
-3161 3083 m
-3160 3059 l
-S
-3158 3035 m
-3157 3011 l
-S
-3155 2987 m
-3154 2963 l
-S
-3152 2939 m
-3151 2915 l
-S
-3149 2891 m
-3148 2867 l
-S
-3146 2843 m
-3145 2819 l
-S
-3143 2795 m
-3142 2771 l
-S
-3141 2747 m
-3139 2723 l
-S
-3138 2699 m
-3137 2694 l
-3136 2675 l
-S
-3135 2651 m
-3133 2627 l
-S
-3131 2603 m
-3130 2580 l
-S
-3128 2556 m
-3127 2532 l
-S
-3125 2508 m
-3124 2484 l
-S
-3122 2460 m
-3121 2436 l
-S
-3119 2412 m
-3118 2388 l
-S
-3116 2364 m
-3115 2340 l
-S
-3113 2316 m
-3112 2292 l
-S
-3110 2268 m
-3109 2244 l
-S
-3107 2220 m
-3106 2196 l
-S
-3104 2172 m
-3103 2158 l
-3103 2148 l
-S
-3101 2124 m
-3100 2100 l
-S
-3098 2076 m
-3097 2052 l
-S
-3095 2028 m
-3094 2004 l
-S
-3092 1981 m
-3091 1957 l
-S
-3089 1933 m
-3088 1909 l
-S
-3086 1885 m
-3084 1861 l
-S
-3083 1837 m
-3081 1813 l
-S
-3080 1789 m
-3079 1777 l
-S
-2765 6121 m
-2764 6109 l
-S
-2763 6085 m
-2761 6061 l
-S
-2760 6037 m
-2759 6013 l
-S
-2757 5989 m
-2756 5965 l
-S
-2755 5941 m
-2753 5921 l
-2753 5917 l
-S
-2752 5893 m
-2750 5869 l
-S
-2749 5845 m
-2748 5821 l
-S
-2746 5797 m
-2745 5773 l
-S
-2743 5749 m
-2742 5725 l
-S
-2741 5701 m
-2739 5677 l
-S
-2738 5653 m
-2736 5629 l
-S
-2735 5605 m
-2733 5581 l
-S
-2732 5557 m
-2731 5534 l
-S
-2729 5510 m
-2728 5486 l
-S
-2726 5462 m
-2725 5438 l
-S
-2724 5414 m
-2722 5390 l
-S
-2721 5366 m
-2719 5342 l
-S
-2718 5318 m
-2717 5294 l
-S
-2715 5270 m
-2714 5246 l
-S
-2712 5222 m
-2711 5198 l
-S
-2709 5174 m
-2708 5150 l
-S
-2707 5126 m
-2705 5102 l
-S
-2704 5078 m
-2702 5054 l
-S
-2701 5030 m
-2699 5006 l
-S
-2698 4982 m
-2697 4958 l
-S
-2695 4934 m
-2694 4910 l
-S
-2692 4886 m
-2691 4862 l
-S
-2689 4839 m
-2688 4815 l
-S
-2687 4791 m
-2685 4767 l
-S
-2684 4743 m
-2682 4719 l
-S
-2681 4695 m
-2679 4671 l
-S
-2678 4647 m
-2677 4623 l
-S
-2675 4599 m
-2674 4575 l
-S
-2672 4551 m
-2671 4527 l
-S
-2669 4503 m
-2668 4479 l
-S
-2666 4455 m
-2665 4431 l
-S
-2664 4407 m
-2662 4383 l
-S
-2661 4359 m
-2659 4335 l
-S
-2658 4311 m
-2656 4287 l
-S
-2655 4263 m
-2653 4239 l
-S
-2652 4215 m
-2651 4191 l
-S
-2649 4168 m
-2648 4144 l
-S
-2646 4120 m
-2645 4096 l
-S
-2643 4072 m
-2642 4048 l
-S
-2640 4024 m
-2639 4000 l
-S
-2637 3976 m
-2636 3952 l
-S
-2634 3928 m
-2633 3904 l
-S
-2632 3880 m
-2630 3856 l
-S
-2629 3832 m
-2627 3808 l
-S
-2626 3784 m
-2625 3778 l
-2624 3760 l
-S
-2623 3736 m
-2621 3712 l
-S
-2620 3688 m
-2618 3664 l
-S
-2617 3640 m
-2615 3616 l
-S
-2614 3592 m
-2612 3568 l
-S
-2611 3544 m
-2610 3521 l
-S
-2608 3497 m
-2607 3473 l
-S
-2605 3449 m
-2604 3425 l
-S
-2602 3401 m
-2601 3377 l
-S
-2599 3353 m
-2598 3329 l
-S
-2596 3305 m
-2595 3281 l
-S
-2593 3257 m
-2592 3242 l
-2592 3233 l
-S
-2590 3209 m
-2589 3185 l
-S
-2587 3161 m
-2586 3137 l
-S
-2584 3113 m
-2583 3089 l
-S
-2581 3065 m
-2580 3041 l
-S
-2578 3017 m
-2577 2993 l
-S
-2575 2969 m
-2574 2945 l
-S
-2572 2921 m
-2571 2898 l
-S
-2569 2874 m
-2568 2850 l
-S
-2566 2826 m
-2565 2802 l
-S
-2563 2778 m
-2562 2754 l
-S
-2560 2730 m
-2559 2706 l
-2559 2706 l
-S
-2557 2682 m
-2556 2658 l
-S
-2554 2634 m
-2553 2610 l
-S
-2551 2586 m
-2550 2562 l
-S
-2548 2538 m
-2547 2514 l
-S
-2545 2490 m
-2544 2466 l
-S
-2542 2442 m
-2541 2418 l
-S
-2539 2394 m
-2538 2370 l
-S
-2536 2346 m
-2535 2322 l
-S
-2533 2299 m
-2532 2275 l
-S
-2530 2251 m
-2529 2227 l
-S
-2527 2203 m
-2526 2179 l
-S
-2524 2155 m
-2523 2131 l
-S
-2521 2107 m
-2520 2083 l
-S
-2518 2059 m
-2517 2035 l
-S
-2515 2011 m
-2514 1987 l
-S
-2512 1963 m
-2511 1939 l
-S
-2509 1915 m
-2507 1891 l
-S
-2506 1867 m
-2504 1843 l
-S
-2503 1819 m
-2501 1795 l
-S
-2186 6115 m
-2184 6091 l
-S
-2183 6067 m
-2182 6043 l
-S
-2180 6019 m
-2179 5995 l
-S
-2177 5971 m
-2176 5947 l
-S
-2175 5923 m
-2173 5900 l
-S
-2172 5876 m
-2170 5852 l
-S
-2169 5828 m
-2168 5804 l
-S
-2166 5780 m
-2165 5756 l
-S
-2163 5732 m
-2162 5708 l
-S
-2161 5684 m
-2159 5660 l
-S
-2158 5636 m
-2156 5612 l
-S
-2155 5588 m
-2154 5564 l
-S
-2152 5540 m
-2151 5516 l
-S
-2149 5492 m
-2148 5468 l
-S
-2147 5444 m
-2145 5420 l
-S
-2144 5396 m
-2142 5372 l
-S
-2141 5348 m
-2139 5324 l
-S
-2138 5300 m
-2137 5276 l
-S
-2135 5252 m
-2134 5228 l
-S
-2132 5205 m
-2131 5181 l
-S
-2129 5157 m
-2128 5133 l
-S
-2127 5109 m
-2125 5085 l
-S
-2124 5061 m
-2122 5037 l
-S
-2121 5013 m
-2120 4989 l
-S
-2118 4965 m
-2117 4941 l
-S
-2115 4917 m
-2114 4893 l
-S
-2112 4869 m
-2112 4861 l
-2111 4845 l
-S
-2110 4821 m
-2108 4797 l
-S
-2107 4773 m
-2105 4749 l
-S
-2104 4725 m
-2102 4701 l
-S
-2101 4677 m
-2099 4653 l
-S
-2098 4629 m
-2097 4605 l
-S
-2095 4581 m
-2094 4557 l
-S
-2092 4533 m
-2091 4510 l
-S
-2089 4486 m
-2088 4462 l
-S
-2086 4438 m
-2085 4414 l
-S
-2084 4390 m
-2082 4366 l
-S
-2081 4342 m
-2080 4325 l
-2079 4318 l
-S
-2078 4294 m
-2076 4270 l
-S
-2075 4246 m
-2073 4222 l
-S
-2072 4198 m
-2071 4174 l
-S
-2069 4150 m
-2068 4126 l
-S
-2066 4102 m
-2065 4078 l
-S
-2063 4054 m
-2062 4030 l
-S
-2060 4006 m
-2059 3982 l
-S
-2057 3958 m
-2056 3934 l
-S
-2054 3910 m
-2053 3886 l
-S
-2052 3863 m
-2050 3839 l
-S
-2049 3815 m
-2047 3791 l
-S
-2046 3767 m
-2044 3743 l
-S
-2043 3719 m
-2041 3695 l
-S
-2040 3671 m
-2038 3647 l
-S
-2037 3623 m
-2035 3599 l
-S
-2034 3575 m
-2032 3551 l
-S
-2031 3527 m
-2030 3503 l
-S
-2028 3479 m
-2027 3455 l
-S
-2025 3431 m
-2024 3407 l
-S
-2022 3383 m
-2021 3359 l
-S
-2019 3335 m
-2018 3311 l
-S
-2016 3287 m
-2015 3263 l
-S
-2013 3239 m
-2012 3216 l
-S
-2010 3192 m
-2009 3168 l
-S
-2007 3144 m
-2006 3120 l
-S
-2004 3096 m
-2003 3072 l
-S
-2001 3048 m
-2000 3024 l
-S
-1998 3000 m
-1997 2976 l
-S
-1995 2952 m
-1994 2928 l
-S
-1992 2904 m
-1991 2880 l
-S
-1989 2856 m
-1988 2832 l
-S
-1986 2808 m
-1985 2784 l
-S
-1983 2760 m
-1982 2736 l
-S
-1980 2712 m
-1979 2688 l
-S
-1977 2664 m
-1976 2640 l
-S
-1974 2617 m
-1973 2593 l
-S
-1971 2569 m
-1970 2545 l
-S
-1968 2521 m
-1967 2497 l
-S
-1965 2473 m
-1964 2449 l
-S
-1962 2425 m
-1961 2401 l
-S
-1959 2377 m
-1958 2353 l
-S
-1956 2329 m
-1955 2305 l
-S
-1953 2281 m
-1952 2257 l
-S
-1950 2233 m
-1949 2209 l
-S
-1947 2185 m
-1947 2182 l
-1946 2161 l
-S
-1944 2137 m
-1943 2113 l
-S
-1941 2089 m
-1940 2065 l
-S
-1938 2041 m
-1937 2018 l
-S
-1935 1994 m
-1933 1970 l
-S
-1932 1946 m
-1930 1922 l
-S
-1929 1898 m
-1927 1874 l
-S
-1926 1850 m
-1924 1826 l
-S
-1923 1802 m
-1921 1778 l
-S
-1606 6098 m
-1604 6074 l
-S
-1603 6050 m
-1602 6026 l
-S
-1600 6002 m
-1599 5978 l
-S
-1598 5954 m
-1597 5944 l
-1596 5930 l
-S
-1595 5906 m
-1593 5882 l
-S
-1592 5858 m
-1591 5834 l
-S
-1589 5810 m
-1588 5786 l
-S
-1586 5762 m
-1585 5738 l
-S
-1583 5714 m
-1582 5690 l
-S
-1581 5666 m
-1579 5642 l
-S
-1578 5618 m
-1576 5594 l
-S
-1575 5571 m
-1574 5547 l
-S
-1572 5523 m
-1571 5499 l
-S
-1569 5475 m
-1568 5451 l
-S
-1567 5427 m
-1566 5408 l
-1565 5403 l
-S
-1564 5379 m
-1562 5355 l
-S
-1561 5331 m
-1560 5307 l
-S
-1558 5283 m
-1557 5259 l
-S
-1555 5235 m
-1554 5211 l
-S
-1552 5187 m
-1551 5163 l
-S
-1550 5139 m
-1548 5115 l
-S
-1547 5091 m
-1545 5067 l
-S
-1544 5043 m
-1542 5019 l
-S
-1541 4995 m
-1540 4971 l
-S
-1538 4947 m
-1537 4923 l
-S
-1535 4899 m
-1534 4876 l
-S
-1532 4852 m
-1531 4828 l
-S
-1530 4804 m
-1528 4780 l
-S
-1527 4756 m
-1525 4732 l
-S
-1524 4708 m
-1522 4684 l
-S
-1521 4660 m
-1519 4636 l
-S
-1518 4612 m
-1517 4588 l
-S
-1515 4564 m
-1514 4540 l
-S
-1512 4516 m
-1511 4492 l
-S
-1509 4468 m
-1508 4444 l
-S
-1507 4420 m
-1505 4396 l
-S
-1504 4372 m
-1502 4348 l
-S
-1501 4324 m
-1499 4300 l
-S
-1498 4276 m
-1496 4252 l
-S
-1495 4228 m
-1493 4205 l
-S
-1492 4181 m
-1491 4157 l
-S
-1489 4133 m
-1488 4109 l
-S
-1486 4085 m
-1485 4061 l
-S
-1483 4037 m
-1482 4013 l
-S
-1480 3989 m
-1479 3965 l
-S
-1477 3941 m
-1476 3917 l
-S
-1475 3893 m
-1473 3869 l
-S
-1472 3845 m
-1470 3821 l
-S
-1469 3797 m
-1467 3773 l
-S
-1466 3749 m
-1464 3725 l
-S
-1463 3701 m
-1461 3677 l
-S
-1460 3653 m
-1458 3629 l
-S
-1457 3605 m
-1455 3581 l
-S
-1454 3558 m
-1452 3534 l
-S
-1451 3510 m
-1449 3486 l
-S
-1448 3462 m
-1447 3438 l
-S
-1445 3414 m
-1444 3390 l
-S
-1442 3366 m
-1441 3342 l
-S
-1439 3318 m
-1438 3294 l
-S
-1436 3270 m
-1436 3266 l
-1435 3246 l
-S
-1433 3222 m
-1432 3198 l
-S
-1430 3174 m
-1429 3150 l
-S
-1427 3126 m
-1426 3102 l
-S
-1424 3078 m
-1423 3054 l
-S
-1421 3030 m
-1420 3006 l
-S
-1418 2982 m
-1417 2958 l
-S
-1415 2935 m
-1414 2911 l
-S
-1412 2887 m
-1411 2863 l
-S
-1409 2839 m
-1408 2815 l
-S
-1406 2791 m
-1405 2767 l
-S
-1403 2743 m
-1403 2730 l
-1402 2719 l
-S
-1400 2695 m
-1399 2671 l
-S
-1397 2647 m
-1396 2623 l
-S
-1394 2599 m
-1393 2575 l
-S
-1391 2551 m
-1390 2527 l
-S
-1388 2503 m
-1387 2479 l
-S
-1385 2455 m
-1384 2431 l
-S
-1382 2407 m
-1381 2383 l
-S
-1379 2359 m
-1378 2336 l
-S
-1376 2312 m
-1375 2288 l
-S
-1373 2264 m
-1372 2240 l
-S
-1370 2216 m
-1369 2194 l
-1369 2192 l
-S
-1367 2168 m
-1366 2144 l
-S
-1364 2120 m
-1363 2096 l
-S
-1361 2072 m
-1360 2048 l
-S
-1358 2024 m
-1356 2000 l
-S
-1355 1976 m
-1353 1952 l
-S
-1352 1928 m
-1350 1904 l
-S
-1349 1880 m
-1347 1856 l
-S
-1346 1832 m
-1344 1808 l
-S
-1343 1784 m
-1342 1777 l
-S
-1028 6121 m
-1027 6104 l
-S
-1026 6080 m
-1025 6056 l
-S
-1023 6032 m
-1022 6008 l
-S
-1020 5984 m
-1019 5960 l
-S
-1018 5937 m
-1016 5913 l
-S
-1015 5889 m
-1013 5865 l
-S
-1012 5841 m
-1011 5817 l
-S
-1009 5793 m
-1008 5769 l
-S
-1006 5745 m
-1005 5721 l
-S
-1004 5697 m
-1002 5673 l
-S
-1001 5649 m
-999 5625 l
-S
-998 5601 m
-997 5577 l
-S
-995 5553 m
-994 5529 l
-S
-992 5505 m
-991 5481 l
-S
-990 5457 m
-988 5433 l
-S
-987 5409 m
-985 5385 l
-S
-984 5361 m
-982 5337 l
-S
-981 5313 m
-980 5289 l
-S
-978 5265 m
-977 5242 l
-S
-975 5218 m
-974 5194 l
-S
-972 5170 m
-971 5146 l
-S
-970 5122 m
-968 5098 l
-S
-967 5074 m
-965 5050 l
-S
-964 5026 m
-962 5002 l
-S
-961 4978 m
-960 4954 l
-S
-958 4930 m
-957 4906 l
-S
-955 4882 m
-954 4858 l
-S
-952 4834 m
-951 4810 l
-S
-950 4786 m
-948 4762 l
-S
-947 4738 m
-945 4714 l
-S
-944 4690 m
-942 4666 l
-S
-941 4642 m
-940 4618 l
-S
-938 4594 m
-937 4571 l
-S
-935 4547 m
-934 4523 l
-S
-932 4499 m
-931 4475 l
-S
-929 4451 m
-928 4427 l
-S
-927 4403 m
-925 4379 l
-S
-924 4355 m
-923 4348 l
-922 4331 l
-S
-921 4307 m
-919 4283 l
-S
-918 4259 m
-916 4235 l
-S
-915 4211 m
-913 4187 l
-S
-912 4163 m
-911 4139 l
-S
-909 4115 m
-908 4091 l
-S
-906 4067 m
-905 4043 l
-S
-903 4019 m
-902 3995 l
-S
-900 3971 m
-899 3947 l
-S
-897 3923 m
-896 3900 l
-S
-895 3876 m
-893 3852 l
-S
-892 3828 m
-891 3813 l
-890 3804 l
-S
-889 3780 m
-887 3756 l
-S
-886 3732 m
-884 3708 l
-S
-883 3684 m
-881 3660 l
-S
-880 3636 m
-878 3612 l
-S
-877 3588 m
-875 3564 l
-S
-874 3540 m
-872 3516 l
-S
-871 3492 m
-869 3468 l
-S
-868 3444 m
-867 3420 l
-S
-865 3396 m
-864 3372 l
-S
-862 3348 m
-861 3324 l
-S
-859 3300 m
-858 3278 l
-858 3277 l
-S
-856 3253 m
-855 3229 l
-S
-853 3205 m
-852 3181 l
-S
-850 3157 m
-849 3133 l
-S
-847 3109 m
-846 3085 l
-S
-844 3061 m
-843 3037 l
-S
-841 3013 m
-840 2989 l
-S
-838 2965 m
-837 2941 l
-S
-835 2917 m
-834 2893 l
-S
-832 2869 m
-831 2845 l
-S
-829 2821 m
-828 2797 l
-S
-826 2773 m
-825 2749 l
-S
-823 2725 m
-822 2701 l
-S
-820 2677 m
-819 2654 l
-S
-817 2630 m
-816 2606 l
-S
-814 2582 m
-813 2558 l
-S
-811 2534 m
-810 2510 l
-S
-808 2486 m
-807 2462 l
-S
-805 2438 m
-804 2414 l
-S
-802 2390 m
-801 2366 l
-S
-799 2342 m
-798 2318 l
-S
-796 2294 m
-795 2270 l
-S
-793 2246 m
-792 2222 l
-S
-790 2198 m
-789 2174 l
-S
-787 2150 m
-786 2126 l
-S
-784 2102 m
-782 2078 l
-S
-781 2055 m
-779 2031 l
-S
-778 2007 m
-776 1983 l
-S
-775 1959 m
-773 1935 l
-S
-772 1911 m
-770 1887 l
-S
-769 1863 m
-767 1839 l
-S
-766 1815 m
-764 1791 l
-S
-4877 6113 m
-4847 6113 l
-S
-4877 5988 m
-4847 5988 l
-S
-4877 5862 m
-4847 5863 l
-S
-4877 5737 m
-4847 5738 l
-S
-4877 5486 m
-4847 5487 l
-S
-4877 5361 m
-4847 5362 l
-S
-4877 5236 m
-4847 5236 l
-S
-4877 5110 m
-4847 5111 l
-S
-4877 4860 m
-4847 4860 l
-S
-4877 4734 m
-4847 4735 l
-S
-4877 4609 m
-4847 4610 l
-S
-4877 4484 m
-4847 4484 l
-S
-4877 4233 m
-4847 4234 l
-S
-4877 4108 m
-4847 4109 l
-S
-4877 3983 m
-4847 3983 l
-S
-4877 3857 m
-4847 3858 l
-S
-4877 3607 m
-4847 3607 l
-S
-4877 3481 m
-4847 3482 l
-S
-4877 3356 m
-4847 3357 l
-S
-4877 3231 m
-4847 3231 l
-S
-4877 2980 m
-4847 2981 l
-S
-4877 2855 m
-4847 2855 l
-S
-4877 2729 m
-4847 2730 l
-S
-4877 2604 m
-4847 2605 l
-S
-4877 2353 m
-4847 2354 l
-S
-4877 2228 m
-4847 2229 l
-S
-4877 2103 m
-4847 2103 l
-S
-4877 1977 m
-4847 1978 l
-S
-4671 1777 m
-4673 1808 l
-S
-4527 1777 m
-4529 1808 l
-S
-4382 1777 m
-4384 1808 l
-S
-4092 1777 m
-4094 1808 l
-S
-3948 1777 m
-3950 1808 l
-S
-3803 1777 m
-3805 1808 l
-S
-3513 1777 m
-3515 1808 l
-S
-3369 1777 m
-3371 1808 l
-S
-3224 1777 m
-3226 1808 l
-S
-2934 1777 m
-2936 1808 l
-S
-2790 1777 m
-2792 1808 l
-S
-2645 1777 m
-2647 1808 l
-S
-2355 1777 m
-2357 1808 l
-S
-2211 1777 m
-2213 1808 l
-S
-2066 1777 m
-2068 1808 l
-S
-1777 1777 m
-1778 1808 l
-S
-1632 1777 m
-1634 1808 l
-S
-1487 1777 m
-1489 1808 l
-S
-1198 1777 m
-1199 1808 l
-S
-1053 1777 m
-1055 1808 l
-S
-908 1777 m
-910 1808 l
-S
-619 1777 m
-621 1808 l
-S
-533 6071 m
-564 6071 l
-S
-533 5946 m
-564 5946 l
-S
-533 5821 m
-564 5821 l
-S
-533 5571 m
-564 5571 l
-S
-533 5446 m
-564 5446 l
-S
-533 5321 m
-564 5321 l
-S
-533 5196 m
-564 5195 l
-S
-533 4946 m
-564 4945 l
-S
-533 4821 m
-564 4820 l
-S
-533 4696 m
-564 4695 l
-S
-533 4571 m
-564 4570 l
-S
-533 4321 m
-564 4320 l
-S
-533 4195 m
-564 4195 l
-S
-533 4070 m
-564 4070 l
-S
-533 3945 m
-564 3945 l
-S
-533 3695 m
-564 3695 l
-S
-533 3570 m
-564 3569 l
-S
-533 3445 m
-564 3444 l
-S
-533 3320 m
-564 3319 l
-S
-533 3070 m
-564 3069 l
-S
-533 2945 m
-564 2944 l
-S
-533 2820 m
-564 2819 l
-S
-533 2695 m
-564 2694 l
-S
-533 2444 m
-564 2444 l
-S
-533 2319 m
-564 2319 l
-S
-533 2194 m
-564 2194 l
-S
-533 2069 m
-564 2068 l
-S
-533 1819 m
-564 1818 l
-S
-4791 6121 m
-4789 6091 l
-S
-4646 6121 m
-4645 6091 l
-S
-4357 6121 m
-4355 6091 l
-S
-4212 6121 m
-4210 6091 l
-S
-4068 6121 m
-4066 6091 l
-S
-3778 6121 m
-3776 6091 l
-S
-3633 6121 m
-3632 6091 l
-S
-3489 6121 m
-3487 6091 l
-S
-3199 6121 m
-3197 6091 l
-S
-3054 6121 m
-3053 6091 l
-S
-2910 6121 m
-2908 6091 l
-S
-2620 6121 m
-2619 6091 l
-S
-2476 6121 m
-2474 6091 l
-S
-2331 6121 m
-2329 6091 l
-S
-2041 6121 m
-2040 6091 l
-S
-1897 6121 m
-1895 6091 l
-S
-1752 6121 m
-1750 6091 l
-S
-1463 6121 m
-1461 6091 l
-S
-1318 6121 m
-1316 6091 l
-S
-1173 6121 m
-1171 6091 l
-S
-884 6121 m
-882 6091 l
-S
-739 6121 m
-737 6091 l
-S
-594 6121 m
-592 6091 l
-S
-4877 1777 m
-4877 2088 l
-4877 2398 l
-4877 2708 l
-4877 3018 l
-4877 3329 l
-4877 3639 l
-4877 3949 l
-4877 4260 l
-4877 4570 l
-4877 4880 l
-4877 5190 l
-4877 5501 l
-4877 5811 l
-4877 6121 l
-S
-4877 6121 m
-4567 6121 l
-4256 6121 l
-3946 6121 l
-3636 6121 l
-3326 6121 l
-3015 6121 l
-2705 6121 l
-2395 6121 l
-2085 6121 l
-1774 6121 l
-1464 6121 l
-1154 6121 l
-843 6121 l
-533 6121 l
-S
-533 6121 m
-533 5811 l
-533 5501 l
-533 5190 l
-533 4880 l
-533 4570 l
-533 4260 l
-533 3949 l
-533 3639 l
-533 3329 l
-533 3018 l
-533 2708 l
-533 2398 l
-533 2088 l
-533 1777 l
-S
-533 1777 m
-843 1777 l
-1154 1777 l
-1464 1777 l
-1774 1777 l
-2085 1777 l
-2395 1777 l
-2705 1777 l
-3015 1777 l
-3326 1777 l
-3636 1777 l
-3946 1777 l
-4256 1777 l
-4567 1777 l
-4877 1777 l
-S
-1 g
-Y
-5029.5 2159.2 m
-4920 2159 l
-4920 2798 l
-5029 2798 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4935 2185 m
-4935 2227 l
-4966 2204 l
-4966 2216 l
-4969 2223 l
-4973 2227 l
-4984 2231 l
-4992 2231 l
-5003 2227 l
-5011 2219 l
-5014 2208 l
-5014 2197 l
-5011 2185 l
-5007 2182 l
-4999 2178 l
-S
-4935 2257 m
-5014 2257 l
-S
-4977 2257 m
-4966 2268 l
-4962 2276 l
-4962 2287 l
-4966 2294 l
-4977 2298 l
-5014 2298 l
-S
-4954 2328 m
-4951 2328 l
-4943 2332 l
-4939 2336 l
-4935 2343 l
-4935 2358 l
-4939 2366 l
-4943 2370 l
-4951 2373 l
-4958 2373 l
-4966 2370 l
-4977 2362 l
-5014 2325 l
-5014 2377 l
-S
-4935 2422 m
-4939 2411 l
-4951 2403 l
-4969 2400 l
-4981 2400 l
-4999 2403 l
-5011 2411 l
-5014 2422 l
-5014 2430 l
-5011 2441 l
-4999 2449 l
-4981 2452 l
-4969 2452 l
-4951 2449 l
-4939 2441 l
-4935 2430 l
-4935 2422 l
-S
-4962 2479 m
-5014 2479 l
-S
-4977 2479 m
-4966 2490 l
-4962 2497 l
-4962 2509 l
-4966 2516 l
-4977 2520 l
-5014 2520 l
-S
-4977 2520 m
-4966 2531 l
-4962 2539 l
-4962 2550 l
-4966 2558 l
-4977 2561 l
-5014 2561 l
-S
-4935 2610 m
-4939 2599 l
-4951 2591 l
-4969 2588 l
-4981 2588 l
-4999 2591 l
-5011 2599 l
-5014 2610 l
-5014 2618 l
-5011 2629 l
-4999 2637 l
-4981 2640 l
-4969 2640 l
-4951 2637 l
-4939 2629 l
-4935 2618 l
-4935 2610 l
-S
-4935 2685 m
-4939 2674 l
-4951 2667 l
-4969 2663 l
-4981 2663 l
-4999 2667 l
-5011 2674 l
-5014 2685 l
-5014 2693 l
-5011 2704 l
-4999 2712 l
-4981 2716 l
-4969 2716 l
-4951 2712 l
-4939 2704 l
-4935 2693 l
-4935 2685 l
-S
-4973 2779 m
-4966 2776 l
-4962 2764 l
-4962 2753 l
-4966 2742 l
-4973 2738 l
-4981 2742 l
-4984 2749 l
-4988 2768 l
-4992 2776 l
-4999 2779 l
-5003 2779 l
-5011 2776 l
-5014 2764 l
-5014 2753 l
-5011 2742 l
-5003 2738 l
-S
-1 g
-Y
-5029.5 3617.3 m
-4920 3617 l
-4920 3847 l
-5029 3847 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4935 3674 m
-4988 3636 l
-4988 3692 l
-S
-4935 3674 m
-5014 3674 l
-S
-4935 3734 m
-4939 3723 l
-4951 3715 l
-4969 3711 l
-4981 3711 l
-4999 3715 l
-5011 3723 l
-5014 3734 l
-5014 3741 l
-5011 3753 l
-4999 3760 l
-4981 3764 l
-4969 3764 l
-4951 3760 l
-4939 3753 l
-4935 3741 l
-4935 3734 l
-S
-4973 3828 m
-4966 3824 l
-4962 3813 l
-4962 3801 l
-4966 3790 l
-4973 3786 l
-4981 3790 l
-4984 3798 l
-4988 3817 l
-4992 3824 l
-4999 3828 l
-5003 3828 l
-5011 3824 l
-5014 3813 l
-5014 3801 l
-5011 3790 l
-5003 3786 l
-S
-1 g
-Y
-5029.5 4870.5 m
-4920 4870 l
-4920 5100 l
-5029 5100 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4954 4893 m
-4951 4893 l
-4943 4897 l
-4939 4901 l
-4935 4908 l
-4935 4923 l
-4939 4931 l
-4943 4934 l
-4951 4938 l
-4958 4938 l
-4966 4934 l
-4977 4927 l
-5014 4889 l
-5014 4942 l
-S
-4935 4987 m
-4939 4976 l
-4951 4968 l
-4969 4964 l
-4981 4964 l
-4999 4968 l
-5011 4976 l
-5014 4987 l
-5014 4995 l
-5011 5006 l
-4999 5013 l
-4981 5017 l
-4969 5017 l
-4951 5013 l
-4939 5006 l
-4935 4995 l
-4935 4987 l
-S
-4973 5081 m
-4966 5077 l
-4962 5066 l
-4962 5055 l
-4966 5043 l
-4973 5040 l
-4981 5043 l
-4984 5051 l
-4988 5070 l
-4992 5077 l
-4999 5081 l
-5003 5081 l
-5011 5077 l
-5014 5066 l
-5014 5055 l
-5011 5043 l
-5003 5040 l
-S
-1 g
-Y
-2562.2 1200.1 m
-2453 1200 l
-2453 1741 l
-2562 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2468 1256 m
-2521 1219 l
-2521 1275 l
-S
-2468 1256 m
-2547 1256 l
-S
-2483 1305 m
-2480 1313 l
-2468 1324 l
-2547 1324 l
-S
-2495 1377 m
-2498 1373 l
-2502 1377 l
-2498 1381 l
-2495 1377 l
-S
-2540 1377 m
-2543 1373 l
-2547 1377 l
-2543 1381 l
-2540 1377 l
-S
-2468 1414 m
-2468 1456 l
-2498 1433 l
-2498 1444 l
-2502 1452 l
-2506 1456 l
-2517 1459 l
-2525 1459 l
-2536 1456 l
-2543 1448 l
-2547 1437 l
-2547 1426 l
-2543 1414 l
-2540 1411 l
-2532 1407 l
-S
-2468 1505 m
-2472 1493 l
-2483 1486 l
-2502 1482 l
-2513 1482 l
-2532 1486 l
-2543 1493 l
-2547 1505 l
-2547 1512 l
-2543 1523 l
-2532 1531 l
-2513 1535 l
-2502 1535 l
-2483 1531 l
-2472 1523 l
-2468 1512 l
-2468 1505 l
-S
-2495 1565 m
-2498 1561 l
-2502 1565 l
-2498 1568 l
-2495 1565 l
-S
-2540 1565 m
-2543 1561 l
-2547 1565 l
-2543 1568 l
-2540 1565 l
-S
-2468 1617 m
-2472 1606 l
-2483 1599 l
-2502 1595 l
-2513 1595 l
-2532 1599 l
-2543 1606 l
-2547 1617 l
-2547 1625 l
-2543 1636 l
-2532 1644 l
-2513 1647 l
-2502 1647 l
-2483 1644 l
-2472 1636 l
-2468 1625 l
-2468 1617 l
-S
-2468 1693 m
-2472 1681 l
-2483 1674 l
-2502 1670 l
-2513 1670 l
-2532 1674 l
-2543 1681 l
-2547 1693 l
-2547 1700 l
-2543 1711 l
-2532 1719 l
-2513 1723 l
-2502 1723 l
-2483 1719 l
-2472 1711 l
-2468 1700 l
-2468 1693 l
-S
-1 g
-Y
-3141.2 1388.1 m
-3032 1388 l
-3032 1741 l
-3141 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3066 1411 m
-3062 1411 l
-3055 1414 l
-3051 1418 l
-3047 1426 l
-3047 1441 l
-3051 1448 l
-3055 1452 l
-3062 1456 l
-3070 1456 l
-3077 1452 l
-3089 1444 l
-3126 1407 l
-3126 1459 l
-S
-3074 1531 m
-3085 1527 l
-3092 1520 l
-3096 1508 l
-3096 1505 l
-3092 1493 l
-3085 1486 l
-3074 1482 l
-3070 1482 l
-3059 1486 l
-3051 1493 l
-3047 1505 l
-3047 1508 l
-3051 1520 l
-3059 1527 l
-3074 1531 l
-3092 1531 l
-3111 1527 l
-3122 1520 l
-3126 1508 l
-3126 1501 l
-3122 1490 l
-3115 1486 l
-S
-3074 1565 m
-3077 1561 l
-3081 1565 l
-3077 1568 l
-3074 1565 l
-S
-3119 1565 m
-3122 1561 l
-3126 1565 l
-3122 1568 l
-3119 1565 l
-S
-3047 1617 m
-3051 1606 l
-3062 1599 l
-3081 1595 l
-3092 1595 l
-3111 1599 l
-3122 1606 l
-3126 1617 l
-3126 1625 l
-3122 1636 l
-3111 1644 l
-3092 1647 l
-3081 1647 l
-3062 1644 l
-3051 1636 l
-3047 1625 l
-3047 1617 l
-S
-3047 1693 m
-3051 1681 l
-3062 1674 l
-3081 1670 l
-3092 1670 l
-3111 1674 l
-3122 1681 l
-3126 1693 l
-3126 1700 l
-3122 1711 l
-3111 1719 l
-3092 1723 l
-3081 1723 l
-3062 1719 l
-3051 1711 l
-3047 1700 l
-3047 1693 l
-S
-1 g
-Y
-3720.2 1388.1 m
-3611 1388 l
-3611 1741 l
-3720 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3645 1411 m
-3641 1411 l
-3634 1414 l
-3630 1418 l
-3626 1426 l
-3626 1441 l
-3630 1448 l
-3634 1452 l
-3641 1456 l
-3649 1456 l
-3656 1452 l
-3668 1444 l
-3705 1407 l
-3705 1459 l
-S
-3626 1501 m
-3630 1490 l
-3637 1486 l
-3645 1486 l
-3653 1490 l
-3656 1497 l
-3660 1512 l
-3664 1523 l
-3671 1531 l
-3679 1535 l
-3690 1535 l
-3698 1531 l
-3701 1527 l
-3705 1516 l
-3705 1501 l
-3701 1490 l
-3698 1486 l
-3690 1482 l
-3679 1482 l
-3671 1486 l
-3664 1493 l
-3660 1505 l
-3656 1520 l
-3653 1527 l
-3645 1531 l
-3637 1531 l
-3630 1527 l
-3626 1516 l
-3626 1501 l
-S
-3653 1565 m
-3656 1561 l
-3660 1565 l
-3656 1568 l
-3653 1565 l
-S
-3698 1565 m
-3701 1561 l
-3705 1565 l
-3701 1568 l
-3698 1565 l
-S
-3626 1617 m
-3630 1606 l
-3641 1599 l
-3660 1595 l
-3671 1595 l
-3690 1599 l
-3701 1606 l
-3705 1617 l
-3705 1625 l
-3701 1636 l
-3690 1644 l
-3671 1647 l
-3660 1647 l
-3641 1644 l
-3630 1636 l
-3626 1625 l
-3626 1617 l
-S
-3626 1693 m
-3630 1681 l
-3641 1674 l
-3660 1670 l
-3671 1670 l
-3690 1674 l
-3701 1681 l
-3705 1693 l
-3705 1700 l
-3701 1711 l
-3690 1719 l
-3671 1723 l
-3660 1723 l
-3641 1719 l
-3630 1711 l
-3626 1700 l
-3626 1693 l
-S
-1 g
-Y
-4299.2 1388.1 m
-4190 1388 l
-4190 1741 l
-4299 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4224 1411 m
-4220 1411 l
-4213 1414 l
-4209 1418 l
-4205 1426 l
-4205 1441 l
-4209 1448 l
-4213 1452 l
-4220 1456 l
-4228 1456 l
-4235 1452 l
-4247 1444 l
-4284 1407 l
-4284 1459 l
-S
-4205 1535 m
-4284 1497 l
-S
-4205 1482 m
-4205 1535 l
-S
-4231 1565 m
-4235 1561 l
-4239 1565 l
-4235 1568 l
-4231 1565 l
-S
-4277 1565 m
-4280 1561 l
-4284 1565 l
-4280 1568 l
-4277 1565 l
-S
-4205 1617 m
-4209 1606 l
-4220 1599 l
-4239 1595 l
-4250 1595 l
-4269 1599 l
-4280 1606 l
-4284 1617 l
-4284 1625 l
-4280 1636 l
-4269 1644 l
-4250 1647 l
-4239 1647 l
-4220 1644 l
-4209 1636 l
-4205 1625 l
-4205 1617 l
-S
-4205 1693 m
-4209 1681 l
-4220 1674 l
-4239 1670 l
-4250 1670 l
-4269 1674 l
-4280 1681 l
-4284 1693 l
-4284 1700 l
-4280 1711 l
-4269 1719 l
-4250 1723 l
-4239 1723 l
-4220 1719 l
-4209 1711 l
-4205 1700 l
-4205 1693 l
-S
-1 g
-Y
-4878.1 1388.1 m
-4769 1388 l
-4769 1741 l
-4878 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4803 1411 m
-4799 1411 l
-4792 1414 l
-4788 1418 l
-4784 1426 l
-4784 1441 l
-4788 1448 l
-4792 1452 l
-4799 1456 l
-4807 1456 l
-4814 1452 l
-4826 1444 l
-4863 1407 l
-4863 1459 l
-S
-4795 1531 m
-4788 1527 l
-4784 1516 l
-4784 1508 l
-4788 1497 l
-4799 1490 l
-4818 1486 l
-4837 1486 l
-4852 1490 l
-4859 1497 l
-4863 1508 l
-4863 1512 l
-4859 1523 l
-4852 1531 l
-4841 1535 l
-4837 1535 l
-4826 1531 l
-4818 1523 l
-4814 1512 l
-4814 1508 l
-4818 1497 l
-4826 1490 l
-4837 1486 l
-S
-4810 1565 m
-4814 1561 l
-4818 1565 l
-4814 1568 l
-4810 1565 l
-S
-4856 1565 m
-4859 1561 l
-4863 1565 l
-4859 1568 l
-4856 1565 l
-S
-4784 1617 m
-4788 1606 l
-4799 1599 l
-4818 1595 l
-4829 1595 l
-4848 1599 l
-4859 1606 l
-4863 1617 l
-4863 1625 l
-4859 1636 l
-4848 1644 l
-4829 1647 l
-4818 1647 l
-4799 1644 l
-4788 1636 l
-4784 1625 l
-4784 1617 l
-S
-4784 1693 m
-4788 1681 l
-4799 1674 l
-4818 1670 l
-4829 1670 l
-4848 1674 l
-4859 1681 l
-4863 1693 l
-4863 1700 l
-4859 1711 l
-4848 1719 l
-4829 1723 l
-4818 1723 l
-4799 1719 l
-4788 1711 l
-4784 1700 l
-4784 1693 l
-S
-1 g
-Y
-1983.3 1388.1 m
-1874 1388 l
-1874 1741 l
-1983 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1889 1414 m
-1889 1456 l
-1919 1433 l
-1919 1444 l
-1923 1452 l
-1927 1456 l
-1938 1459 l
-1946 1459 l
-1957 1456 l
-1964 1448 l
-1968 1437 l
-1968 1426 l
-1964 1414 l
-1961 1411 l
-1953 1407 l
-S
-1904 1493 m
-1901 1501 l
-1889 1512 l
-1968 1512 l
-S
-1916 1565 m
-1919 1561 l
-1923 1565 l
-1919 1568 l
-1916 1565 l
-S
-1961 1565 m
-1964 1561 l
-1968 1565 l
-1964 1568 l
-1961 1565 l
-S
-1889 1617 m
-1893 1606 l
-1904 1599 l
-1923 1595 l
-1934 1595 l
-1953 1599 l
-1964 1606 l
-1968 1617 l
-1968 1625 l
-1964 1636 l
-1953 1644 l
-1934 1647 l
-1923 1647 l
-1904 1644 l
-1893 1636 l
-1889 1625 l
-1889 1617 l
-S
-1889 1693 m
-1893 1681 l
-1904 1674 l
-1923 1670 l
-1934 1670 l
-1953 1674 l
-1964 1681 l
-1968 1693 l
-1968 1700 l
-1964 1711 l
-1953 1719 l
-1934 1723 l
-1923 1723 l
-1904 1719 l
-1893 1711 l
-1889 1700 l
-1889 1693 l
-S
-1 g
-Y
-1404.3 1388.1 m
-1295 1388 l
-1295 1741 l
-1404 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1310 1414 m
-1310 1456 l
-1340 1433 l
-1340 1444 l
-1344 1452 l
-1348 1456 l
-1359 1459 l
-1367 1459 l
-1378 1456 l
-1385 1448 l
-1389 1437 l
-1389 1426 l
-1385 1414 l
-1382 1411 l
-1374 1407 l
-S
-1329 1486 m
-1325 1486 l
-1318 1490 l
-1314 1493 l
-1310 1501 l
-1310 1516 l
-1314 1523 l
-1318 1527 l
-1325 1531 l
-1333 1531 l
-1340 1527 l
-1352 1520 l
-1389 1482 l
-1389 1535 l
-S
-1337 1565 m
-1340 1561 l
-1344 1565 l
-1340 1568 l
-1337 1565 l
-S
-1382 1565 m
-1385 1561 l
-1389 1565 l
-1385 1568 l
-1382 1565 l
-S
-1310 1617 m
-1314 1606 l
-1325 1599 l
-1344 1595 l
-1355 1595 l
-1374 1599 l
-1385 1606 l
-1389 1617 l
-1389 1625 l
-1385 1636 l
-1374 1644 l
-1355 1647 l
-1344 1647 l
-1325 1644 l
-1314 1636 l
-1310 1625 l
-1310 1617 l
-S
-1310 1693 m
-1314 1681 l
-1325 1674 l
-1344 1670 l
-1355 1670 l
-1374 1674 l
-1385 1681 l
-1389 1693 l
-1389 1700 l
-1385 1711 l
-1374 1719 l
-1355 1723 l
-1344 1723 l
-1325 1719 l
-1314 1711 l
-1310 1700 l
-1310 1693 l
-S
-1 g
-Y
-825.3 1388.1 m
-716 1388 l
-716 1741 l
-825 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-731 1414 m
-731 1456 l
-761 1433 l
-761 1444 l
-765 1452 l
-769 1456 l
-780 1459 l
-788 1459 l
-799 1456 l
-807 1448 l
-810 1437 l
-810 1426 l
-807 1414 l
-803 1411 l
-795 1407 l
-S
-731 1490 m
-731 1531 l
-761 1508 l
-761 1520 l
-765 1527 l
-769 1531 l
-780 1535 l
-788 1535 l
-799 1531 l
-807 1523 l
-810 1512 l
-810 1501 l
-807 1490 l
-803 1486 l
-795 1482 l
-S
-758 1565 m
-761 1561 l
-765 1565 l
-761 1568 l
-758 1565 l
-S
-803 1565 m
-807 1561 l
-810 1565 l
-807 1568 l
-803 1565 l
-S
-731 1617 m
-735 1606 l
-746 1599 l
-765 1595 l
-776 1595 l
-795 1599 l
-807 1606 l
-810 1617 l
-810 1625 l
-807 1636 l
-795 1644 l
-776 1647 l
-765 1647 l
-746 1644 l
-735 1636 l
-731 1625 l
-731 1617 l
-S
-731 1693 m
-735 1681 l
-746 1674 l
-765 1670 l
-776 1670 l
-795 1674 l
-807 1681 l
-810 1693 l
-810 1700 l
-807 1711 l
-795 1719 l
-776 1723 l
-765 1723 l
-746 1719 l
-735 1711 l
-731 1700 l
-731 1693 l
-S
-1 g
-Y
-5319.8 3163 m
-5088 3163 l
-5088 4736 l
-5320 4736 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-5119 3194 m
-5251 3194 l
-S
-5119 3194 m
-5119 3251 l
-5126 3269 l
-5132 3276 l
-5144 3282 l
-5157 3282 l
-5169 3276 l
-5176 3269 l
-5182 3251 l
-5182 3194 l
-S
-5182 3238 m
-5251 3282 l
-S
-5119 3320 m
-5126 3326 l
-5119 3332 l
-5113 3326 l
-5119 3320 l
-S
-5163 3326 m
-5251 3326 l
-S
-5163 3445 m
-5263 3445 l
-5282 3439 l
-5288 3432 l
-5295 3420 l
-5295 3401 l
-5288 3389 l
-S
-5182 3445 m
-5169 3432 l
-5163 3420 l
-5163 3401 l
-5169 3389 l
-5182 3376 l
-5201 3370 l
-5213 3370 l
-5232 3376 l
-5245 3389 l
-5251 3401 l
-5251 3420 l
-5245 3432 l
-5232 3445 l
-S
-5119 3495 m
-5251 3495 l
-S
-5188 3495 m
-5169 3514 l
-5163 3526 l
-5163 3545 l
-5169 3558 l
-5188 3564 l
-5251 3564 l
-S
-5119 3620 m
-5226 3620 l
-5245 3627 l
-5251 3639 l
-5251 3652 l
-S
-5163 3602 m
-5163 3645 l
-S
-5163 3858 m
-5251 3858 l
-S
-5182 3858 m
-5169 3846 l
-5163 3833 l
-5163 3815 l
-5169 3802 l
-5182 3789 l
-5201 3783 l
-5213 3783 l
-5232 3789 l
-5245 3802 l
-5251 3815 l
-5251 3833 l
-5245 3846 l
-5232 3858 l
-S
-5182 3971 m
-5169 3965 l
-5163 3946 l
-5163 3927 l
-5169 3909 l
-5182 3902 l
-5194 3909 l
-5201 3921 l
-5207 3952 l
-5213 3965 l
-5226 3971 l
-5232 3971 l
-5245 3965 l
-5251 3946 l
-5251 3927 l
-5245 3909 l
-5232 3902 l
-S
-5182 4084 m
-5169 4071 l
-5163 4059 l
-5163 4040 l
-5169 4028 l
-5182 4015 l
-5201 4009 l
-5213 4009 l
-5232 4015 l
-5245 4028 l
-5251 4040 l
-5251 4059 l
-5245 4071 l
-5232 4084 l
-S
-5201 4122 m
-5201 4197 l
-5188 4197 l
-5176 4190 l
-5169 4184 l
-5163 4172 l
-5163 4153 l
-5169 4140 l
-5182 4128 l
-5201 4122 l
-5213 4122 l
-5232 4128 l
-5245 4140 l
-5251 4153 l
-5251 4172 l
-5245 4184 l
-5232 4197 l
-S
-5163 4241 m
-5251 4241 l
-S
-5188 4241 m
-5169 4259 l
-5163 4272 l
-5163 4291 l
-5169 4303 l
-5188 4309 l
-5251 4309 l
-S
-5182 4422 m
-5169 4416 l
-5163 4397 l
-5163 4378 l
-5169 4360 l
-5182 4353 l
-5194 4360 l
-5201 4372 l
-5207 4403 l
-5213 4416 l
-5226 4422 l
-5232 4422 l
-5245 4416 l
-5251 4397 l
-5251 4378 l
-5245 4360 l
-5232 4353 l
-S
-5119 4460 m
-5126 4466 l
-5119 4472 l
-5113 4466 l
-5119 4460 l
-S
-5163 4466 m
-5251 4466 l
-S
-5163 4541 m
-5169 4529 l
-5182 4516 l
-5201 4510 l
-5213 4510 l
-5232 4516 l
-5245 4529 l
-5251 4541 l
-5251 4560 l
-5245 4573 l
-5232 4585 l
-5213 4591 l
-5201 4591 l
-5182 4585 l
-5169 4573 l
-5163 4560 l
-5163 4541 l
-S
-5163 4635 m
-5251 4635 l
-S
-5188 4635 m
-5169 4654 l
-5163 4667 l
-5163 4685 l
-5169 4698 l
-5188 4704 l
-5251 4704 l
-S
-1 g
-Y
-3240.9 1170.4 m
-3241 982 l
-2170 982 l
-2170 1170 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3210 1014 m
-3210 1145 l
-S
-3210 1014 m
-3166 1014 l
-3147 1020 l
-3134 1033 l
-3128 1045 l
-3122 1064 l
-3122 1095 l
-3128 1114 l
-3134 1127 l
-3147 1139 l
-3166 1145 l
-3210 1145 l
-S
-3084 1095 m
-3009 1095 l
-3009 1083 l
-3015 1070 l
-3022 1064 l
-3034 1058 l
-3053 1058 l
-3066 1064 l
-3078 1076 l
-3084 1095 l
-3084 1108 l
-3078 1127 l
-3066 1139 l
-3053 1145 l
-3034 1145 l
-3022 1139 l
-3009 1127 l
-S
-2896 1076 m
-2909 1064 l
-2921 1058 l
-2940 1058 l
-2953 1064 l
-2965 1076 l
-2972 1095 l
-2972 1108 l
-2965 1127 l
-2953 1139 l
-2940 1145 l
-2921 1145 l
-2909 1139 l
-2896 1127 l
-S
-2853 1014 m
-2853 1145 l
-S
-2809 1014 m
-2802 1020 l
-2796 1014 l
-2802 1008 l
-2809 1014 l
-S
-2802 1058 m
-2802 1145 l
-S
-2752 1058 m
-2752 1145 l
-S
-2752 1083 m
-2733 1064 l
-2721 1058 l
-2702 1058 l
-2690 1064 l
-2683 1083 l
-2683 1145 l
-S
-2564 1058 m
-2564 1145 l
-S
-2564 1076 m
-2577 1064 l
-2589 1058 l
-2608 1058 l
-2621 1064 l
-2633 1076 l
-2639 1095 l
-2639 1108 l
-2633 1127 l
-2621 1139 l
-2608 1145 l
-2589 1145 l
-2577 1139 l
-2564 1127 l
-S
-2508 1014 m
-2508 1120 l
-2502 1139 l
-2489 1145 l
-2477 1145 l
-S
-2527 1058 m
-2483 1058 l
-S
-2445 1014 m
-2439 1020 l
-2433 1014 l
-2439 1008 l
-2445 1014 l
-S
-2439 1058 m
-2439 1145 l
-S
-2364 1058 m
-2376 1064 l
-2389 1076 l
-2395 1095 l
-2395 1108 l
-2389 1127 l
-2376 1139 l
-2364 1145 l
-2345 1145 l
-2333 1139 l
-2320 1127 l
-2314 1108 l
-2314 1095 l
-2320 1076 l
-2333 1064 l
-2345 1058 l
-2364 1058 l
-S
-2270 1058 m
-2270 1145 l
-S
-2270 1083 m
-2251 1064 l
-2239 1058 l
-2220 1058 l
-2207 1064 l
-2201 1083 l
-2201 1145 l
-S
-1 g
-Y
-371.2 1568.5 m
-186 1568 l
-186 6330 l
-371 6330 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-236 1669 m
-226 1664 l
-216 1654 l
-211 1644 l
-211 1624 l
-216 1614 l
-226 1604 l
-236 1599 l
-251 1594 l
-276 1594 l
-291 1599 l
-301 1604 l
-311 1614 l
-316 1624 l
-316 1644 l
-311 1654 l
-301 1664 l
-291 1669 l
-276 1669 l
-S
-276 1644 m
-276 1669 l
-S
-276 1699 m
-276 1759 l
-266 1759 l
-256 1754 l
-251 1749 l
-246 1739 l
-246 1724 l
-251 1714 l
-261 1704 l
-276 1699 l
-286 1699 l
-301 1704 l
-311 1714 l
-316 1724 l
-316 1739 l
-311 1749 l
-301 1759 l
-S
-246 1814 m
-251 1804 l
-261 1794 l
-276 1789 l
-286 1789 l
-301 1794 l
-311 1804 l
-316 1814 l
-316 1829 l
-311 1839 l
-301 1849 l
-286 1854 l
-276 1854 l
-261 1849 l
-251 1839 l
-246 1829 l
-246 1814 l
-S
-261 1944 m
-251 1934 l
-246 1924 l
-246 1909 l
-251 1899 l
-261 1889 l
-276 1884 l
-286 1884 l
-301 1889 l
-311 1899 l
-316 1909 l
-316 1924 l
-311 1934 l
-301 1944 l
-S
-276 1974 m
-276 2035 l
-266 2035 l
-256 2030 l
-251 2025 l
-246 2015 l
-246 2000 l
-251 1990 l
-261 1979 l
-276 1974 l
-286 1974 l
-301 1979 l
-311 1990 l
-316 2000 l
-316 2015 l
-311 2025 l
-301 2035 l
-S
-246 2070 m
-316 2070 l
-S
-266 2070 m
-251 2085 l
-246 2095 l
-246 2110 l
-251 2120 l
-266 2125 l
-316 2125 l
-S
-211 2170 m
-296 2170 l
-311 2175 l
-316 2185 l
-316 2195 l
-S
-246 2155 m
-246 2190 l
-S
-246 2225 m
-316 2225 l
-S
-276 2225 m
-261 2230 l
-251 2240 l
-246 2250 l
-246 2265 l
-S
-211 2285 m
-216 2290 l
-211 2295 l
-206 2290 l
-211 2285 l
-S
-246 2290 m
-316 2290 l
-S
-261 2385 m
-251 2375 l
-246 2365 l
-246 2350 l
-251 2340 l
-261 2330 l
-276 2325 l
-286 2325 l
-301 2330 l
-311 2340 l
-316 2350 l
-316 2365 l
-311 2375 l
-301 2385 l
-S
-246 2556 m
-316 2556 l
-S
-261 2556 m
-251 2546 l
-246 2536 l
-246 2521 l
-251 2511 l
-261 2501 l
-276 2496 l
-286 2496 l
-301 2501 l
-311 2511 l
-316 2521 l
-316 2536 l
-311 2546 l
-301 2556 l
-S
-246 2596 m
-351 2596 l
-S
-261 2596 m
-251 2606 l
-246 2616 l
-246 2631 l
-251 2641 l
-261 2651 l
-276 2656 l
-286 2656 l
-301 2651 l
-311 2641 l
-316 2631 l
-316 2616 l
-311 2606 l
-301 2596 l
-S
-246 2691 m
-351 2691 l
-S
-261 2691 m
-251 2701 l
-246 2711 l
-246 2726 l
-251 2736 l
-261 2746 l
-276 2751 l
-286 2751 l
-301 2746 l
-311 2736 l
-316 2726 l
-316 2711 l
-311 2701 l
-301 2691 l
-S
-246 2842 m
-316 2842 l
-S
-261 2842 m
-251 2832 l
-246 2822 l
-246 2806 l
-251 2796 l
-261 2786 l
-276 2781 l
-286 2781 l
-301 2786 l
-311 2796 l
-316 2806 l
-316 2822 l
-311 2832 l
-301 2842 l
-S
-246 2882 m
-316 2882 l
-S
-276 2882 m
-261 2887 l
-251 2897 l
-246 2907 l
-246 2922 l
-S
-276 2942 m
-276 3002 l
-266 3002 l
-256 2997 l
-251 2992 l
-246 2982 l
-246 2967 l
-251 2957 l
-261 2947 l
-276 2942 l
-286 2942 l
-301 2947 l
-311 2957 l
-316 2967 l
-316 2982 l
-311 2992 l
-301 3002 l
-S
-246 3037 m
-316 3037 l
-S
-266 3037 m
-251 3052 l
-246 3062 l
-246 3077 l
-251 3087 l
-266 3092 l
-316 3092 l
-S
-211 3137 m
-296 3137 l
-311 3142 l
-316 3152 l
-316 3162 l
-S
-246 3122 m
-246 3157 l
-S
-276 3268 m
-276 3328 l
-266 3328 l
-256 3323 l
-251 3318 l
-246 3308 l
-246 3293 l
-251 3283 l
-261 3273 l
-276 3268 l
-286 3268 l
-301 3273 l
-311 3283 l
-316 3293 l
-316 3308 l
-311 3318 l
-301 3328 l
-S
-246 3418 m
-351 3418 l
-S
-261 3418 m
-251 3408 l
-246 3398 l
-246 3383 l
-251 3373 l
-261 3363 l
-276 3358 l
-286 3358 l
-301 3363 l
-311 3373 l
-316 3383 l
-316 3398 l
-311 3408 l
-301 3418 l
-S
-246 3458 m
-296 3458 l
-311 3463 l
-316 3473 l
-316 3488 l
-311 3498 l
-296 3513 l
-S
-246 3513 m
-316 3513 l
-S
-246 3608 m
-316 3608 l
-S
-261 3608 m
-251 3598 l
-246 3588 l
-246 3573 l
-251 3563 l
-261 3553 l
-276 3548 l
-286 3548 l
-301 3553 l
-311 3563 l
-316 3573 l
-316 3588 l
-311 3598 l
-301 3608 l
-S
-211 3654 m
-296 3654 l
-311 3659 l
-316 3669 l
-316 3679 l
-S
-246 3638 m
-246 3674 l
-S
-246 3729 m
-251 3719 l
-261 3709 l
-276 3704 l
-286 3704 l
-301 3709 l
-311 3719 l
-316 3729 l
-316 3744 l
-311 3754 l
-301 3764 l
-286 3769 l
-276 3769 l
-261 3764 l
-251 3754 l
-246 3744 l
-246 3729 l
-S
-246 3804 m
-316 3804 l
-S
-276 3804 m
-261 3809 l
-251 3819 l
-246 3829 l
-246 3844 l
-S
-211 3864 m
-216 3869 l
-211 3874 l
-206 3869 l
-211 3864 l
-S
-246 3869 m
-316 3869 l
-S
-246 3964 m
-316 3964 l
-S
-261 3964 m
-251 3954 l
-246 3944 l
-246 3929 l
-251 3919 l
-261 3909 l
-276 3904 l
-286 3904 l
-301 3909 l
-311 3919 l
-316 3929 l
-316 3944 l
-311 3954 l
-301 3964 l
-S
-211 4004 m
-316 4004 l
-S
-261 4180 m
-251 4170 l
-246 4160 l
-246 4145 l
-251 4135 l
-261 4125 l
-276 4120 l
-286 4120 l
-301 4125 l
-311 4135 l
-316 4145 l
-316 4160 l
-311 4170 l
-301 4180 l
-S
-246 4235 m
-251 4225 l
-261 4215 l
-276 4210 l
-286 4210 l
-301 4215 l
-311 4225 l
-316 4235 l
-316 4250 l
-311 4260 l
-301 4270 l
-286 4275 l
-276 4275 l
-261 4270 l
-251 4260 l
-246 4250 l
-246 4235 l
-S
-246 4330 m
-251 4320 l
-261 4310 l
-276 4305 l
-286 4305 l
-301 4310 l
-311 4320 l
-316 4330 l
-316 4345 l
-311 4355 l
-301 4365 l
-286 4370 l
-276 4370 l
-261 4365 l
-251 4355 l
-246 4345 l
-246 4330 l
-S
-246 4405 m
-316 4405 l
-S
-276 4405 m
-261 4410 l
-251 4420 l
-246 4430 l
-246 4445 l
-S
-211 4526 m
-316 4526 l
-S
-261 4526 m
-251 4516 l
-246 4506 l
-246 4491 l
-251 4481 l
-261 4470 l
-276 4465 l
-286 4465 l
-301 4470 l
-311 4481 l
-316 4491 l
-316 4506 l
-311 4516 l
-301 4526 l
-S
-211 4561 m
-216 4566 l
-211 4571 l
-206 4566 l
-211 4561 l
-S
-246 4566 m
-316 4566 l
-S
-246 4606 m
-316 4606 l
-S
-266 4606 m
-251 4621 l
-246 4631 l
-246 4646 l
-251 4656 l
-266 4661 l
-316 4661 l
-S
-246 4756 m
-316 4756 l
-S
-261 4756 m
-251 4746 l
-246 4736 l
-246 4721 l
-251 4711 l
-261 4701 l
-276 4696 l
-286 4696 l
-301 4701 l
-311 4711 l
-316 4721 l
-316 4736 l
-311 4746 l
-301 4756 l
-S
-211 4801 m
-296 4801 l
-311 4806 l
-316 4816 l
-316 4826 l
-S
-246 4786 m
-246 4821 l
-S
-276 4851 m
-276 4912 l
-266 4912 l
-256 4907 l
-251 4902 l
-246 4892 l
-246 4876 l
-251 4866 l
-261 4856 l
-276 4851 l
-286 4851 l
-301 4856 l
-311 4866 l
-316 4876 l
-316 4892 l
-311 4902 l
-301 4912 l
-S
-261 4997 m
-251 4992 l
-246 4977 l
-246 4962 l
-251 4947 l
-261 4942 l
-271 4947 l
-276 4957 l
-281 4982 l
-286 4992 l
-296 4997 l
-301 4997 l
-311 4992 l
-316 4977 l
-316 4962 l
-311 4947 l
-301 4942 l
-S
-246 5037 m
-251 5032 l
-256 5037 l
-251 5042 l
-246 5037 l
-S
-311 5042 m
-316 5037 l
-311 5032 l
-306 5037 l
-311 5042 l
-321 5042 l
-331 5037 l
-336 5032 l
-S
-276 5157 m
-276 5217 l
-266 5217 l
-256 5212 l
-251 5207 l
-246 5197 l
-246 5182 l
-251 5172 l
-261 5162 l
-276 5157 l
-286 5157 l
-301 5162 l
-311 5172 l
-316 5182 l
-316 5197 l
-311 5207 l
-301 5217 l
-S
-246 5252 m
-351 5252 l
-S
-261 5252 m
-251 5262 l
-246 5272 l
-246 5287 l
-251 5297 l
-261 5308 l
-276 5313 l
-286 5313 l
-301 5308 l
-311 5297 l
-316 5287 l
-316 5272 l
-311 5262 l
-301 5252 l
-S
-246 5368 m
-251 5358 l
-261 5348 l
-276 5343 l
-286 5343 l
-301 5348 l
-311 5358 l
-316 5368 l
-316 5383 l
-311 5393 l
-301 5403 l
-286 5408 l
-276 5408 l
-261 5403 l
-251 5393 l
-246 5383 l
-246 5368 l
-S
-261 5498 m
-251 5488 l
-246 5478 l
-246 5463 l
-251 5453 l
-261 5443 l
-276 5438 l
-286 5438 l
-301 5443 l
-311 5453 l
-316 5463 l
-316 5478 l
-311 5488 l
-301 5498 l
-S
-211 5533 m
-316 5533 l
-S
-266 5533 m
-251 5548 l
-246 5558 l
-246 5573 l
-251 5583 l
-266 5588 l
-316 5588 l
-S
-211 5749 m
-291 5749 l
-306 5744 l
-311 5739 l
-316 5729 l
-316 5718 l
-311 5708 l
-306 5703 l
-291 5698 l
-281 5698 l
-S
-231 5799 m
-226 5809 l
-211 5824 l
-316 5824 l
-S
-246 5949 m
-261 5944 l
-271 5934 l
-276 5919 l
-276 5914 l
-271 5899 l
-261 5889 l
-246 5884 l
-241 5884 l
-226 5889 l
-216 5899 l
-211 5914 l
-211 5919 l
-216 5934 l
-226 5944 l
-246 5949 l
-271 5949 l
-296 5944 l
-311 5934 l
-316 5919 l
-316 5909 l
-311 5894 l
-301 5889 l
-S
-246 6049 m
-261 6044 l
-271 6034 l
-276 6019 l
-276 6014 l
-271 5999 l
-261 5989 l
-246 5984 l
-241 5984 l
-226 5989 l
-216 5999 l
-211 6014 l
-211 6019 l
-216 6034 l
-226 6044 l
-246 6049 l
-271 6049 l
-296 6044 l
-311 6034 l
-316 6019 l
-316 6009 l
-311 5994 l
-301 5989 l
-S
-211 6155 m
-316 6104 l
-S
-211 6084 m
-211 6155 l
-S
-306 6195 m
-311 6190 l
-316 6195 l
-311 6200 l
-306 6195 l
-S
-211 6295 m
-211 6245 l
-256 6240 l
-251 6245 l
-246 6260 l
-246 6275 l
-251 6290 l
-261 6300 l
-276 6305 l
-286 6305 l
-301 6300 l
-311 6290 l
-316 6275 l
-316 6260 l
-311 6245 l
-306 6240 l
-296 6235 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 1307 3396 a
- currentpoint grestore moveto
- 1307 3396 a 1596 3396 a
- gsave currentpoint currentpoint translate -90 neg rotate neg exch neg exch translate
- 1596
-3396 a @beginspecial 30 @llx 189 @lly 477 @urx 603 @ury
-1117 @rwi @setspecial
-%%BeginDocument: sun211_figures/frontb_bw.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 30 189 477 603
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:07:11
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3111 3017 l
-3112 3018 l
-3114 3019 l
-3116 3020 l
-3117 3021 l
-3119 3021 l
-3120 3022 l
-3142 3035 l
-3164 3048 l
-3186 3061 l
-3207 3075 l
-3229 3089 l
-3250 3103 l
-3270 3117 l
-3291 3132 l
-3311 3147 l
-3331 3163 l
-3351 3179 l
-3371 3195 l
-3390 3211 l
-3409 3228 l
-3428 3245 l
-3447 3262 l
-3465 3280 l
-3483 3297 l
-3501 3315 l
-3518 3334 l
-3536 3353 l
-3553 3371 l
-3569 3391 l
-3586 3410 l
-3602 3430 l
-3617 3450 l
-3633 3470 l
-3648 3490 l
-3663 3511 l
-3677 3532 l
-3691 3553 l
-3705 3574 l
-3719 3596 l
-3732 3618 l
-3745 3640 l
-3757 3662 l
-3769 3684 l
-3781 3707 l
-3792 3730 l
-3803 3753 l
-3814 3776 l
-3824 3800 l
-3834 3823 l
-3843 3847 l
-3852 3871 l
-3861 3895 l
-3869 3919 l
-3877 3944 l
-3884 3968 l
-3891 3993 l
-3898 4018 l
-3904 4043 l
-3910 4068 l
-3915 4094 l
-3920 4119 l
-3924 4144 l
-3928 4170 l
-3932 4196 l
-3935 4222 l
-3937 4248 l
-3939 4274 l
-3941 4300 l
-3942 4326 l
-3942 4352 l
-3943 4379 l
-3942 4405 l
-3941 4431 l
-3940 4458 l
-3938 4484 l
-3935 4511 l
-3932 4538 l
-3929 4564 l
-3925 4591 l
-3920 4617 l
-3915 4644 l
-3909 4671 l
-3903 4697 l
-3896 4724 l
-3888 4750 l
-3880 4776 l
-3872 4803 l
-3862 4829 l
-3852 4855 l
-3842 4881 l
-3831 4907 l
-3819 4933 l
-3807 4959 l
-3794 4984 l
-3780 5010 l
-3766 5035 l
-3751 5060 l
-3736 5085 l
-3720 5110 l
-3703 5134 l
-3685 5159 l
-3667 5183 l
-3648 5206 l
-3629 5230 l
-3609 5253 l
-3588 5276 l
-3566 5298 l
-3544 5320 l
-3521 5342 l
-3497 5363 l
-3473 5384 l
-3448 5405 l
-3422 5425 l
-3396 5444 l
-3369 5463 l
-3341 5482 l
-3312 5500 l
-3283 5517 l
-3254 5534 l
-3223 5551 l
-3192 5566 l
-3160 5581 l
-3128 5595 l
-3095 5609 l
-3061 5622 l
-3026 5634 l
-2992 5645 l
-2956 5656 l
-2920 5665 l
-2883 5674 l
-2846 5682 l
-2808 5689 l
-2770 5695 l
-2732 5700 l
-2693 5704 l
-2653 5707 l
-2613 5709 l
-2573 5710 l
-2533 5710 l
-2492 5709 l
-2451 5707 l
-2410 5703 l
-2368 5699 l
-2327 5693 l
-2285 5686 l
-2243 5678 l
-2202 5669 l
-2160 5658 l
-2119 5647 l
-2077 5634 l
-2036 5620 l
-1995 5605 l
-1992 5603 l
-1989 5602 l
-1986 5601 l
-1984 5600 l
-1981 5599 l
-1978 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3110 3018 l
-3110 3019 l
-3111 3021 l
-3112 3022 l
-3112 3023 l
-3113 3025 l
-3113 3026 l
-3122 3046 l
-3129 3067 l
-3137 3087 l
-3145 3108 l
-3152 3129 l
-3159 3150 l
-3166 3171 l
-3172 3192 l
-3179 3213 l
-3185 3234 l
-3191 3256 l
-3196 3277 l
-3202 3299 l
-3207 3320 l
-3212 3342 l
-3217 3364 l
-3222 3386 l
-3226 3408 l
-3230 3430 l
-3234 3452 l
-3238 3475 l
-3242 3497 l
-3245 3519 l
-3248 3542 l
-3251 3564 l
-3254 3587 l
-3257 3610 l
-3259 3632 l
-3261 3655 l
-3263 3678 l
-3265 3700 l
-3266 3723 l
-3268 3746 l
-3269 3769 l
-3270 3792 l
-3270 3815 l
-3271 3838 l
-3271 3861 l
-3271 3884 l
-3271 3907 l
-3271 3929 l
-3270 3952 l
-3269 3975 l
-3268 3998 l
-3267 4021 l
-3266 4044 l
-3264 4067 l
-3263 4090 l
-3261 4113 l
-3259 4136 l
-3256 4158 l
-3254 4181 l
-3251 4204 l
-3248 4227 l
-3245 4249 l
-3242 4272 l
-3238 4294 l
-3234 4317 l
-3230 4339 l
-3226 4362 l
-3222 4384 l
-3217 4406 l
-3212 4429 l
-3207 4451 l
-3202 4473 l
-3197 4495 l
-3191 4517 l
-3186 4538 l
-3180 4560 l
-3173 4582 l
-3167 4603 l
-3160 4625 l
-3154 4646 l
-3146 4667 l
-3139 4688 l
-3132 4709 l
-3124 4730 l
-3116 4751 l
-3108 4771 l
-3100 4792 l
-3092 4812 l
-3083 4832 l
-3074 4852 l
-3065 4872 l
-3055 4892 l
-3046 4912 l
-3036 4931 l
-3026 4950 l
-3016 4970 l
-3005 4989 l
-2995 5007 l
-2984 5026 l
-2973 5044 l
-2962 5063 l
-2950 5081 l
-2938 5099 l
-2926 5116 l
-2914 5134 l
-2902 5151 l
-2889 5168 l
-2876 5185 l
-2863 5202 l
-2849 5218 l
-2836 5234 l
-2822 5250 l
-2808 5266 l
-2793 5281 l
-2778 5296 l
-2764 5311 l
-2748 5326 l
-2733 5340 l
-2717 5355 l
-2701 5368 l
-2685 5382 l
-2668 5395 l
-2652 5408 l
-2634 5421 l
-2617 5433 l
-2599 5445 l
-2581 5457 l
-2563 5468 l
-2544 5479 l
-2526 5489 l
-2506 5499 l
-2487 5509 l
-2467 5519 l
-2447 5528 l
-2426 5536 l
-2405 5544 l
-2384 5552 l
-2362 5559 l
-2340 5566 l
-2318 5572 l
-2295 5578 l
-2272 5583 l
-2248 5587 l
-2224 5591 l
-2200 5595 l
-2175 5598 l
-2150 5600 l
-2124 5601 l
-2098 5602 l
-2072 5602 l
-2045 5602 l
-2017 5600 l
-1989 5598 l
-1987 5598 l
-1985 5598 l
-1983 5597 l
-1981 5597 l
-1979 5597 l
-1977 5597 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3109 3017 l
-3108 3019 l
-3107 3020 l
-3106 3021 l
-3106 3022 l
-3105 3023 l
-3104 3024 l
-3094 3041 l
-3083 3057 l
-3073 3074 l
-3062 3090 l
-3052 3107 l
-3041 3124 l
-3031 3141 l
-3020 3158 l
-3010 3175 l
-2999 3192 l
-2989 3210 l
-2978 3227 l
-2968 3245 l
-2957 3263 l
-2947 3280 l
-2936 3298 l
-2926 3316 l
-2915 3334 l
-2905 3352 l
-2894 3371 l
-2884 3389 l
-2873 3407 l
-2863 3426 l
-2852 3444 l
-2841 3463 l
-2831 3482 l
-2820 3500 l
-2810 3519 l
-2799 3538 l
-2789 3557 l
-2779 3576 l
-2768 3595 l
-2758 3614 l
-2747 3633 l
-2737 3653 l
-2726 3672 l
-2716 3691 l
-2706 3710 l
-2695 3730 l
-2685 3749 l
-2675 3769 l
-2664 3788 l
-2654 3808 l
-2644 3827 l
-2634 3847 l
-2624 3866 l
-2614 3886 l
-2603 3906 l
-2593 3925 l
-2583 3945 l
-2573 3965 l
-2563 3984 l
-2553 4004 l
-2544 4024 l
-2534 4043 l
-2524 4063 l
-2514 4083 l
-2504 4103 l
-2495 4122 l
-2485 4142 l
-2475 4162 l
-2466 4181 l
-2456 4201 l
-2447 4221 l
-2438 4240 l
-2428 4260 l
-2419 4279 l
-2410 4299 l
-2400 4319 l
-2391 4338 l
-2382 4357 l
-2373 4377 l
-2364 4396 l
-2355 4416 l
-2347 4435 l
-2338 4454 l
-2329 4473 l
-2321 4493 l
-2312 4512 l
-2304 4531 l
-2295 4550 l
-2287 4569 l
-2278 4588 l
-2270 4607 l
-2262 4625 l
-2254 4644 l
-2246 4663 l
-2238 4681 l
-2230 4700 l
-2223 4718 l
-2215 4737 l
-2208 4755 l
-2200 4773 l
-2193 4792 l
-2185 4810 l
-2178 4828 l
-2171 4846 l
-2164 4863 l
-2157 4881 l
-2150 4899 l
-2144 4916 l
-2137 4934 l
-2130 4951 l
-2124 4969 l
-2118 4986 l
-2111 5003 l
-2105 5020 l
-2099 5037 l
-2093 5053 l
-2088 5070 l
-2082 5087 l
-2076 5103 l
-2071 5119 l
-2066 5136 l
-2061 5152 l
-2055 5168 l
-2051 5184 l
-2046 5200 l
-2041 5215 l
-2036 5231 l
-2032 5246 l
-2028 5261 l
-2024 5277 l
-2020 5292 l
-2016 5307 l
-2012 5321 l
-2009 5336 l
-2005 5351 l
-2002 5365 l
-1999 5379 l
-1996 5393 l
-1993 5408 l
-1991 5421 l
-1988 5435 l
-1986 5449 l
-1984 5462 l
-1982 5476 l
-1980 5489 l
-1979 5502 l
-1978 5515 l
-1977 5528 l
-1976 5541 l
-1975 5553 l
-1975 5566 l
-1975 5578 l
-1975 5590 l
-1975 5591 l
-1975 5592 l
-1975 5593 l
-1975 5594 l
-1975 5595 l
-1975 5596 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3108 3016 l
-3106 3017 l
-3104 3017 l
-3103 3017 l
-3101 3017 l
-3099 3017 l
-3098 3018 l
-3075 3021 l
-3052 3024 l
-3029 3028 l
-3006 3032 l
-2983 3036 l
-2960 3041 l
-2937 3046 l
-2914 3051 l
-2892 3057 l
-2869 3063 l
-2846 3069 l
-2824 3075 l
-2801 3082 l
-2779 3089 l
-2757 3096 l
-2735 3104 l
-2712 3112 l
-2690 3120 l
-2668 3128 l
-2646 3137 l
-2625 3146 l
-2603 3155 l
-2581 3164 l
-2560 3174 l
-2538 3184 l
-2517 3194 l
-2496 3205 l
-2475 3216 l
-2454 3227 l
-2433 3238 l
-2412 3249 l
-2392 3261 l
-2371 3273 l
-2351 3285 l
-2331 3297 l
-2311 3310 l
-2291 3323 l
-2271 3336 l
-2252 3349 l
-2232 3363 l
-2213 3377 l
-2194 3391 l
-2175 3405 l
-2156 3419 l
-2138 3434 l
-2119 3449 l
-2101 3464 l
-2083 3479 l
-2065 3495 l
-2047 3510 l
-2030 3526 l
-2012 3542 l
-1995 3559 l
-1978 3575 l
-1962 3592 l
-1945 3609 l
-1929 3626 l
-1913 3643 l
-1897 3660 l
-1881 3678 l
-1866 3695 l
-1851 3713 l
-1836 3731 l
-1821 3750 l
-1807 3768 l
-1793 3787 l
-1779 3806 l
-1765 3824 l
-1752 3844 l
-1738 3863 l
-1725 3882 l
-1713 3902 l
-1700 3922 l
-1688 3941 l
-1677 3962 l
-1665 3982 l
-1654 4002 l
-1643 4022 l
-1632 4043 l
-1622 4064 l
-1612 4085 l
-1602 4106 l
-1593 4127 l
-1584 4148 l
-1575 4170 l
-1566 4191 l
-1558 4213 l
-1551 4235 l
-1543 4257 l
-1536 4279 l
-1530 4301 l
-1523 4323 l
-1517 4345 l
-1512 4368 l
-1507 4391 l
-1502 4413 l
-1497 4436 l
-1493 4459 l
-1490 4482 l
-1487 4505 l
-1484 4528 l
-1481 4551 l
-1480 4575 l
-1478 4598 l
-1477 4622 l
-1477 4645 l
-1477 4669 l
-1477 4693 l
-1478 4717 l
-1479 4741 l
-1481 4764 l
-1483 4788 l
-1486 4812 l
-1490 4837 l
-1494 4861 l
-1498 4885 l
-1504 4909 l
-1509 4933 l
-1515 4958 l
-1522 4982 l
-1530 5006 l
-1538 5030 l
-1547 5055 l
-1556 5079 l
-1566 5103 l
-1577 5127 l
-1588 5152 l
-1601 5176 l
-1613 5200 l
-1627 5224 l
-1641 5248 l
-1657 5272 l
-1673 5295 l
-1689 5319 l
-1707 5343 l
-1725 5366 l
-1745 5389 l
-1765 5412 l
-1786 5435 l
-1808 5457 l
-1831 5480 l
-1855 5502 l
-1880 5523 l
-1906 5545 l
-1933 5566 l
-1960 5586 l
-1962 5588 l
-1965 5589 l
-1967 5591 l
-1969 5592 l
-1971 5594 l
-1973 5595 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3108 3015 l
-3106 3014 l
-3104 3014 l
-3103 3013 l
-3101 3012 l
-3100 3011 l
-3098 3010 l
-3076 2998 l
-3053 2987 l
-3030 2975 l
-3007 2965 l
-2984 2954 l
-2961 2944 l
-2938 2934 l
-2914 2925 l
-2890 2916 l
-2866 2907 l
-2842 2899 l
-2818 2891 l
-2794 2883 l
-2769 2876 l
-2745 2869 l
-2720 2863 l
-2695 2857 l
-2671 2852 l
-2646 2846 l
-2620 2842 l
-2595 2837 l
-2570 2833 l
-2545 2830 l
-2519 2827 l
-2494 2824 l
-2468 2822 l
-2443 2820 l
-2417 2819 l
-2392 2818 l
-2366 2817 l
-2340 2817 l
-2315 2818 l
-2289 2818 l
-2263 2820 l
-2237 2821 l
-2211 2824 l
-2186 2826 l
-2160 2829 l
-2134 2833 l
-2109 2837 l
-2083 2842 l
-2057 2847 l
-2032 2852 l
-2006 2858 l
-1981 2865 l
-1955 2872 l
-1930 2879 l
-1905 2887 l
-1880 2896 l
-1855 2905 l
-1830 2914 l
-1805 2925 l
-1780 2935 l
-1756 2946 l
-1732 2958 l
-1707 2970 l
-1683 2983 l
-1660 2996 l
-1636 3010 l
-1612 3024 l
-1589 3039 l
-1566 3054 l
-1543 3070 l
-1521 3087 l
-1499 3104 l
-1477 3122 l
-1455 3140 l
-1433 3159 l
-1412 3178 l
-1391 3198 l
-1371 3218 l
-1351 3239 l
-1331 3261 l
-1312 3283 l
-1293 3306 l
-1274 3329 l
-1256 3353 l
-1238 3378 l
-1221 3403 l
-1204 3429 l
-1188 3455 l
-1172 3482 l
-1156 3509 l
-1142 3537 l
-1128 3565 l
-1114 3594 l
-1101 3624 l
-1089 3654 l
-1077 3685 l
-1066 3716 l
-1055 3748 l
-1046 3780 l
-1037 3812 l
-1028 3846 l
-1021 3879 l
-1014 3914 l
-1008 3948 l
-1003 3983 l
-999 4019 l
-996 4055 l
-993 4091 l
-992 4128 l
-991 4165 l
-992 4202 l
-993 4239 l
-996 4277 l
-999 4315 l
-1003 4354 l
-1009 4392 l
-1015 4431 l
-1023 4470 l
-1032 4509 l
-1041 4548 l
-1052 4587 l
-1065 4625 l
-1078 4664 l
-1092 4703 l
-1108 4742 l
-1124 4780 l
-1142 4818 l
-1161 4856 l
-1181 4894 l
-1202 4931 l
-1225 4968 l
-1248 5004 l
-1273 5040 l
-1298 5075 l
-1325 5110 l
-1353 5144 l
-1382 5178 l
-1412 5210 l
-1442 5242 l
-1474 5273 l
-1507 5304 l
-1540 5333 l
-1575 5361 l
-1610 5389 l
-1646 5415 l
-1682 5441 l
-1719 5465 l
-1757 5488 l
-1796 5511 l
-1835 5532 l
-1874 5552 l
-1914 5571 l
-1955 5588 l
-1957 5589 l
-1960 5591 l
-1963 5592 l
-1966 5593 l
-1969 5594 l
-1972 5595 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3109 3015 l
-3108 3013 l
-3107 3012 l
-3107 3010 l
-3106 3009 l
-3106 3008 l
-3105 3006 l
-3096 2986 l
-3088 2966 l
-3079 2947 l
-3069 2927 l
-3060 2908 l
-3050 2889 l
-3040 2870 l
-3030 2851 l
-3019 2832 l
-3008 2814 l
-2997 2796 l
-2986 2778 l
-2975 2760 l
-2963 2742 l
-2951 2725 l
-2939 2707 l
-2926 2690 l
-2913 2674 l
-2900 2657 l
-2887 2641 l
-2873 2624 l
-2859 2609 l
-2845 2593 l
-2831 2578 l
-2816 2562 l
-2801 2548 l
-2786 2533 l
-2770 2519 l
-2754 2505 l
-2738 2491 l
-2721 2478 l
-2704 2464 l
-2687 2452 l
-2669 2439 l
-2651 2427 l
-2633 2415 l
-2615 2404 l
-2596 2393 l
-2576 2382 l
-2557 2372 l
-2537 2362 l
-2516 2353 l
-2495 2344 l
-2474 2335 l
-2452 2327 l
-2430 2319 l
-2408 2312 l
-2385 2306 l
-2361 2300 l
-2337 2294 l
-2313 2289 l
-2288 2285 l
-2263 2281 l
-2237 2278 l
-2211 2275 l
-2184 2274 l
-2157 2273 l
-2129 2272 l
-2101 2273 l
-2072 2274 l
-2042 2277 l
-2012 2280 l
-1981 2284 l
-1950 2289 l
-1918 2295 l
-1886 2302 l
-1853 2311 l
-1819 2320 l
-1785 2331 l
-1750 2343 l
-1714 2357 l
-1679 2372 l
-1642 2388 l
-1605 2407 l
-1567 2426 l
-1529 2448 l
-1491 2472 l
-1452 2497 l
-1413 2525 l
-1373 2555 l
-1334 2587 l
-1294 2621 l
-1254 2658 l
-1214 2697 l
-1175 2738 l
-1136 2783 l
-1097 2830 l
-1060 2879 l
-1023 2932 l
-987 2987 l
-952 3045 l
-919 3105 l
-888 3169 l
-859 3234 l
-831 3302 l
-829 3307 l
-828 3312 l
-826 3317 l
-824 3322 l
-822 3327 l
-820 3332 l
-819 3337 l
-817 3342 l
-815 3347 l
-813 3352 l
-811 3357 l
-810 3362 l
-808 3367 l
-806 3373 l
-805 3378 l
-803 3383 l
-801 3388 l
-800 3393 l
-798 3398 l
-796 3403 l
-795 3408 l
-793 3414 l
-792 3419 l
-790 3424 l
-789 3429 l
-787 3434 l
-786 3440 l
-784 3445 l
-783 3450 l
-781 3455 l
-780 3461 l
-778 3466 l
-777 3471 l
-775 3476 l
-774 3482 l
-773 3487 l
-771 3492 l
-770 3498 l
-768 3503 l
-767 3508 l
-766 3514 l
-764 3519 l
-763 3524 l
-762 3530 l
-761 3535 l
-759 3540 l
-758 3546 l
-757 3551 l
-756 3557 l
-755 3562 l
-753 3567 l
-752 3573 l
-751 3578 l
-750 3584 l
-749 3589 l
-748 3595 l
-747 3600 l
-746 3606 l
-745 3611 l
-744 3616 l
-743 3622 l
-742 3627 l
-741 3633 l
-740 3638 l
-739 3644 l
-738 3649 l
-737 3655 l
-736 3660 l
-735 3666 l
-734 3672 l
-733 3677 l
-733 3683 l
-732 3688 l
-731 3694 l
-730 3699 l
-729 3705 l
-729 3710 l
-728 3716 l
-727 3722 l
-727 3727 l
-726 3733 l
-725 3738 l
-725 3744 l
-724 3750 l
-723 3755 l
-723 3761 l
-722 3766 l
-722 3772 l
-721 3778 l
-720 3783 l
-720 3789 l
-719 3794 l
-719 3800 l
-719 3806 l
-718 3811 l
-S
-718 3811 m
-718 3817 l
-717 3823 l
-717 3828 l
-716 3834 l
-716 3839 l
-716 3845 l
-715 3851 l
-715 3856 l
-715 3862 l
-715 3868 l
-714 3873 l
-714 3879 l
-714 3885 l
-714 3890 l
-713 3896 l
-713 3902 l
-713 3907 l
-713 3913 l
-713 3918 l
-713 3924 l
-713 3930 l
-713 3935 l
-713 3941 l
-713 3947 l
-713 3952 l
-713 3958 l
-713 3964 l
-713 3969 l
-713 3975 l
-713 3981 l
-713 3986 l
-713 3992 l
-713 3997 l
-713 4003 l
-713 4009 l
-713 4014 l
-714 4020 l
-714 4026 l
-714 4031 l
-714 4037 l
-715 4042 l
-715 4048 l
-715 4054 l
-715 4059 l
-716 4065 l
-716 4071 l
-716 4076 l
-717 4082 l
-717 4087 l
-718 4093 l
-718 4099 l
-718 4104 l
-719 4110 l
-719 4115 l
-720 4121 l
-720 4126 l
-721 4132 l
-721 4137 l
-722 4143 l
-723 4149 l
-723 4154 l
-724 4160 l
-724 4165 l
-725 4171 l
-726 4176 l
-726 4182 l
-727 4187 l
-728 4193 l
-728 4198 l
-729 4204 l
-730 4209 l
-731 4215 l
-731 4220 l
-732 4226 l
-733 4231 l
-734 4237 l
-735 4242 l
-736 4248 l
-737 4253 l
-737 4258 l
-738 4264 l
-739 4269 l
-740 4275 l
-741 4280 l
-742 4285 l
-743 4291 l
-744 4296 l
-745 4302 l
-746 4307 l
-747 4312 l
-748 4318 l
-749 4323 l
-750 4328 l
-751 4334 l
-753 4339 l
-754 4344 l
-755 4350 l
-756 4355 l
-757 4360 l
-758 4365 l
-760 4371 l
-761 4376 l
-762 4381 l
-763 4386 l
-765 4392 l
-766 4397 l
-767 4402 l
-768 4407 l
-770 4412 l
-771 4418 l
-772 4423 l
-774 4428 l
-775 4433 l
-777 4438 l
-778 4443 l
-799 4514 l
-822 4583 l
-848 4649 l
-875 4713 l
-905 4774 l
-936 4833 l
-968 4889 l
-1001 4943 l
-1036 4994 l
-1071 5042 l
-1107 5088 l
-1143 5131 l
-1180 5171 l
-1217 5210 l
-1254 5245 l
-1291 5279 l
-1328 5310 l
-1365 5340 l
-1401 5367 l
-1438 5392 l
-1474 5416 l
-1510 5438 l
-1545 5458 l
-1580 5476 l
-1614 5493 l
-1648 5508 l
-1682 5522 l
-1715 5535 l
-1747 5546 l
-1779 5556 l
-1811 5565 l
-1842 5573 l
-1872 5580 l
-1902 5586 l
-1932 5591 l
-1961 5595 l
-1963 5595 l
-1965 5595 l
-1967 5596 l
-1969 5596 l
-1971 5596 l
-1973 5596 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3110 3015 l
-3111 3014 l
-3111 3013 l
-3112 3012 l
-3113 3010 l
-3114 3009 l
-3114 3008 l
-3125 2992 l
-3135 2976 l
-3146 2960 l
-3156 2945 l
-3166 2929 l
-3176 2914 l
-3187 2899 l
-3197 2884 l
-3207 2869 l
-3217 2854 l
-3228 2839 l
-3238 2825 l
-3248 2811 l
-3258 2796 l
-3268 2782 l
-3278 2769 l
-3288 2755 l
-3298 2741 l
-3308 2728 l
-3318 2715 l
-3328 2702 l
-3338 2689 l
-3348 2676 l
-3358 2664 l
-3368 2652 l
-3378 2639 l
-3388 2628 l
-3398 2616 l
-3408 2604 l
-3417 2593 l
-3427 2582 l
-3437 2571 l
-3447 2560 l
-3457 2550 l
-3466 2539 l
-3476 2529 l
-3486 2519 l
-3496 2510 l
-3506 2500 l
-3515 2491 l
-3525 2482 l
-3535 2473 l
-3545 2465 l
-3555 2457 l
-3565 2449 l
-3574 2441 l
-3584 2434 l
-3594 2427 l
-3604 2420 l
-3614 2413 l
-3625 2407 l
-3635 2401 l
-3645 2395 l
-3656 2390 l
-3666 2385 l
-3677 2380 l
-3687 2376 l
-3698 2372 l
-3709 2368 l
-3721 2365 l
-3732 2362 l
-3744 2360 l
-3755 2358 l
-3768 2357 l
-3780 2356 l
-3793 2356 l
-3806 2356 l
-3819 2357 l
-3833 2359 l
-3848 2361 l
-3863 2364 l
-3878 2368 l
-3895 2373 l
-3912 2379 l
-3930 2386 l
-3949 2395 l
-3969 2405 l
-3991 2416 l
-4014 2430 l
-4038 2446 l
-4065 2465 l
-4093 2486 l
-4125 2511 l
-4159 2541 l
-4196 2576 l
-4238 2618 l
-4283 2669 l
-4287 2673 l
-4290 2677 l
-4294 2681 l
-4297 2685 l
-4301 2689 l
-4304 2693 l
-4308 2698 l
-4312 2702 l
-4315 2706 l
-4319 2711 l
-4323 2716 l
-4326 2720 l
-4330 2725 l
-4334 2730 l
-4338 2734 l
-4342 2739 l
-4346 2744 l
-4349 2749 l
-4353 2755 l
-4357 2760 l
-4361 2765 l
-4365 2770 l
-4369 2776 l
-4373 2781 l
-4378 2787 l
-4382 2793 l
-4386 2798 l
-4390 2804 l
-4394 2810 l
-4399 2816 l
-4403 2822 l
-4407 2829 l
-4411 2835 l
-4416 2841 l
-4420 2848 l
-4425 2855 l
-4429 2861 l
-4434 2868 l
-4438 2875 l
-4443 2882 l
-4447 2889 l
-4452 2897 l
-4456 2904 l
-4461 2912 l
-4466 2919 l
-4470 2927 l
-4475 2935 l
-4480 2943 l
-4485 2951 l
-4489 2960 l
-4494 2968 l
-4499 2977 l
-4504 2986 l
-4509 2994 l
-4514 3003 l
-4519 3013 l
-4524 3022 l
-4529 3032 l
-4534 3041 l
-4539 3051 l
-4544 3061 l
-4549 3071 l
-4554 3082 l
-4559 3092 l
-4564 3103 l
-4569 3114 l
-4574 3125 l
-4579 3136 l
-4584 3148 l
-4589 3159 l
-4594 3171 l
-4599 3183 l
-4605 3196 l
-4610 3208 l
-4615 3221 l
-4620 3234 l
-4625 3247 l
-4630 3261 l
-4635 3274 l
-4640 3288 l
-4645 3302 l
-4649 3317 l
-4654 3331 l
-4659 3346 l
-4664 3362 l
-4669 3377 l
-4673 3393 l
-4678 3409 l
-4682 3425 l
-4687 3441 l
-4691 3458 l
-4695 3475 l
-4700 3493 l
-4704 3510 l
-4708 3528 l
-4712 3547 l
-4715 3565 l
-4719 3584 l
-4723 3603 l
-4726 3623 l
-4729 3643 l
-4732 3663 l
-4735 3683 l
-S
-4735 3683 m
-4738 3704 l
-4741 3725 l
-4743 3747 l
-4745 3768 l
-4747 3790 l
-4749 3813 l
-4751 3835 l
-4752 3858 l
-4753 3881 l
-4754 3905 l
-4754 3929 l
-4755 3953 l
-4755 3978 l
-4754 4002 l
-4754 4027 l
-4753 4053 l
-4751 4078 l
-4750 4104 l
-4748 4130 l
-4745 4157 l
-4743 4183 l
-4740 4210 l
-4736 4237 l
-4732 4264 l
-4728 4292 l
-4723 4319 l
-4718 4347 l
-4713 4375 l
-4707 4403 l
-4701 4431 l
-4694 4459 l
-4686 4488 l
-4679 4516 l
-4671 4545 l
-4662 4573 l
-4653 4602 l
-4643 4630 l
-4633 4659 l
-4623 4687 l
-4612 4716 l
-4600 4744 l
-4589 4772 l
-4576 4800 l
-4564 4828 l
-4550 4856 l
-4537 4883 l
-4523 4911 l
-4509 4938 l
-4494 4965 l
-4479 4992 l
-4463 5018 l
-4447 5044 l
-4431 5070 l
-4414 5095 l
-4397 5121 l
-4380 5146 l
-4363 5170 l
-4345 5194 l
-4327 5218 l
-4309 5241 l
-4290 5264 l
-4271 5287 l
-4252 5309 l
-4233 5331 l
-4214 5352 l
-4195 5373 l
-4175 5393 l
-4155 5413 l
-4136 5433 l
-4116 5452 l
-4096 5471 l
-4076 5489 l
-4056 5507 l
-4036 5524 l
-4016 5541 l
-3996 5558 l
-3976 5574 l
-3956 5589 l
-3936 5604 l
-3916 5619 l
-3896 5634 l
-3876 5648 l
-3856 5661 l
-3837 5674 l
-3817 5687 l
-3798 5700 l
-3778 5712 l
-3759 5723 l
-3740 5735 l
-3721 5746 l
-3702 5756 l
-3684 5767 l
-3665 5777 l
-3647 5786 l
-3629 5795 l
-3611 5804 l
-3593 5813 l
-3575 5822 l
-3558 5830 l
-3540 5838 l
-3523 5845 l
-3506 5852 l
-3489 5859 l
-3473 5866 l
-3456 5873 l
-3440 5879 l
-3424 5885 l
-3408 5891 l
-3392 5897 l
-3377 5902 l
-3362 5907 l
-3346 5912 l
-3331 5917 l
-3317 5922 l
-3302 5926 l
-3288 5931 l
-3273 5935 l
-3259 5939 l
-3246 5943 l
-3232 5946 l
-3218 5950 l
-3205 5953 l
-3192 5956 l
-3179 5960 l
-3166 5963 l
-3153 5965 l
-3141 5968 l
-3128 5971 l
-3116 5973 l
-3104 5976 l
-3092 5978 l
-3081 5980 l
-3069 5982 l
-3058 5984 l
-3046 5986 l
-3035 5988 l
-3024 5989 l
-3014 5991 l
-3003 5993 l
-2992 5994 l
-2982 5995 l
-2972 5997 l
-2962 5998 l
-2952 5999 l
-2942 6000 l
-2932 6001 l
-2923 6002 l
-2913 6003 l
-2904 6004 l
-2895 6005 l
-2885 6006 l
-2876 6006 l
-2868 6007 l
-2859 6008 l
-2850 6008 l
-2842 6009 l
-2833 6009 l
-2825 6009 l
-2817 6010 l
-2809 6010 l
-2801 6010 l
-2793 6011 l
-2785 6011 l
-2777 6011 l
-2770 6011 l
-2762 6011 l
-2755 6011 l
-2747 6012 l
-2740 6012 l
-2733 6012 l
-2726 6012 l
-2719 6011 l
-2712 6011 l
-2705 6011 l
-2699 6011 l
-2692 6011 l
-2685 6011 l
-2679 6011 l
-2673 6010 l
-2666 6010 l
-2660 6010 l
-2654 6010 l
-2648 6009 l
-2642 6009 l
-2636 6009 l
-2630 6008 l
-2624 6008 l
-2618 6008 l
-2613 6007 l
-2607 6007 l
-2601 6006 l
-2596 6006 l
-2590 6006 l
-2585 6005 l
-2580 6005 l
-2575 6004 l
-2569 6004 l
-2564 6003 l
-2559 6003 l
-S
-2559 6003 m
-2554 6002 l
-2549 6002 l
-2544 6001 l
-2539 6001 l
-2535 6000 l
-2530 5999 l
-2468 5991 l
-2415 5981 l
-2369 5971 l
-2328 5960 l
-2292 5950 l
-2260 5939 l
-2232 5928 l
-2206 5918 l
-2184 5907 l
-2163 5896 l
-2144 5886 l
-2127 5875 l
-2112 5865 l
-2098 5855 l
-2085 5844 l
-2073 5834 l
-2063 5823 l
-2053 5813 l
-2044 5803 l
-2036 5792 l
-2028 5782 l
-2021 5771 l
-2015 5761 l
-2010 5750 l
-2004 5739 l
-2000 5728 l
-1996 5717 l
-1992 5706 l
-1989 5695 l
-1986 5684 l
-1983 5673 l
-1981 5661 l
-1979 5650 l
-1978 5638 l
-1977 5626 l
-1976 5615 l
-1975 5603 l
-1975 5602 l
-1975 5601 l
-1975 5600 l
-1975 5599 l
-1975 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3111 3016 l
-3113 3016 l
-3114 3016 l
-3116 3015 l
-3117 3015 l
-3119 3015 l
-3121 3015 l
-3144 3012 l
-3167 3010 l
-3190 3009 l
-3213 3007 l
-3236 3006 l
-3260 3005 l
-3283 3005 l
-3306 3005 l
-3329 3005 l
-3352 3006 l
-3375 3007 l
-3398 3008 l
-3421 3010 l
-3444 3012 l
-3467 3014 l
-3490 3017 l
-3513 3021 l
-3536 3024 l
-3559 3028 l
-3582 3033 l
-3604 3038 l
-3627 3043 l
-3650 3049 l
-3672 3055 l
-3695 3061 l
-3717 3068 l
-3739 3076 l
-3761 3084 l
-3784 3092 l
-3806 3101 l
-3827 3110 l
-3849 3120 l
-3871 3130 l
-3892 3141 l
-3913 3152 l
-3935 3163 l
-3956 3176 l
-3977 3188 l
-3997 3201 l
-4018 3215 l
-4038 3229 l
-4058 3244 l
-4078 3260 l
-4098 3276 l
-4117 3292 l
-4136 3309 l
-4155 3327 l
-4174 3345 l
-4193 3364 l
-4211 3384 l
-4228 3404 l
-4246 3425 l
-4263 3446 l
-4280 3469 l
-4296 3491 l
-4312 3515 l
-4328 3539 l
-4343 3564 l
-4358 3590 l
-4372 3616 l
-4386 3643 l
-4399 3671 l
-4412 3700 l
-4424 3729 l
-4435 3759 l
-4446 3790 l
-4456 3822 l
-4466 3855 l
-4475 3888 l
-4482 3922 l
-4490 3957 l
-4496 3993 l
-4501 4030 l
-4506 4067 l
-4509 4106 l
-4511 4145 l
-4513 4185 l
-4513 4225 l
-4512 4267 l
-4509 4309 l
-4506 4352 l
-4501 4395 l
-4494 4439 l
-4486 4484 l
-4477 4530 l
-4466 4575 l
-4454 4622 l
-4439 4669 l
-4423 4716 l
-4406 4763 l
-4386 4811 l
-4365 4858 l
-4342 4906 l
-4317 4954 l
-4290 5001 l
-4261 5048 l
-4230 5095 l
-4197 5141 l
-4162 5187 l
-4126 5232 l
-4087 5276 l
-4047 5319 l
-4005 5361 l
-3962 5402 l
-3917 5441 l
-3870 5479 l
-3822 5515 l
-3773 5550 l
-3722 5583 l
-3670 5614 l
-3618 5644 l
-3565 5671 l
-3511 5697 l
-3456 5720 l
-3401 5742 l
-3346 5761 l
-3291 5779 l
-3235 5794 l
-3180 5808 l
-3125 5819 l
-3070 5829 l
-3016 5836 l
-2962 5842 l
-2909 5846 l
-2856 5848 l
-2804 5849 l
-2753 5848 l
-2703 5845 l
-2654 5841 l
-2606 5835 l
-2559 5828 l
-2513 5820 l
-2468 5811 l
-2425 5800 l
-2382 5789 l
-2341 5776 l
-2300 5762 l
-2261 5748 l
-2223 5733 l
-2187 5717 l
-2151 5700 l
-2116 5682 l
-2083 5664 l
-2051 5646 l
-2020 5626 l
-1989 5607 l
-1987 5605 l
-1985 5604 l
-1983 5602 l
-1981 5601 l
-1979 5599 l
-1977 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3586 3410 m
-3585 3411 l
-3584 3412 l
-3583 3413 l
-3571 3424 l
-3559 3435 l
-3547 3445 l
-3533 3455 l
-3520 3464 l
-3506 3473 l
-3491 3481 l
-3477 3489 l
-3462 3496 l
-3446 3502 l
-3430 3509 l
-3414 3514 l
-3398 3519 l
-3381 3524 l
-3364 3528 l
-3347 3531 l
-3330 3534 l
-3312 3537 l
-3294 3539 l
-3276 3541 l
-3258 3542 l
-3240 3542 l
-3222 3542 l
-3204 3542 l
-3185 3541 l
-3167 3539 l
-3148 3537 l
-3129 3535 l
-3111 3532 l
-3092 3529 l
-3074 3525 l
-3055 3521 l
-3037 3516 l
-3018 3511 l
-3000 3506 l
-2982 3500 l
-2963 3494 l
-2945 3487 l
-2927 3480 l
-2910 3472 l
-2892 3464 l
-2875 3456 l
-2858 3447 l
-2841 3438 l
-2824 3429 l
-2808 3419 l
-2791 3409 l
-2775 3398 l
-2760 3388 l
-2744 3377 l
-2729 3365 l
-2715 3353 l
-2700 3341 l
-2686 3329 l
-2673 3316 l
-2660 3303 l
-2647 3290 l
-2634 3277 l
-2622 3263 l
-2611 3249 l
-2600 3235 l
-2589 3220 l
-2579 3206 l
-2570 3191 l
-2561 3176 l
-2552 3161 l
-2544 3145 l
-2537 3130 l
-2530 3114 l
-2524 3098 l
-2518 3082 l
-2513 3066 l
-2509 3050 l
-2505 3034 l
-2502 3018 l
-2500 3002 l
-2498 2985 l
-2497 2969 l
-2496 2953 l
-2497 2937 l
-2498 2920 l
-2500 2904 l
-2502 2888 l
-2506 2872 l
-2510 2856 l
-2514 2841 l
-2520 2825 l
-2526 2810 l
-2534 2795 l
-2542 2780 l
-2550 2765 l
-2560 2751 l
-2570 2737 l
-2581 2723 l
-2593 2709 l
-2606 2697 l
-2620 2684 l
-2634 2672 l
-2649 2660 l
-2665 2649 l
-2681 2638 l
-2699 2628 l
-2717 2619 l
-2735 2610 l
-2755 2602 l
-2774 2594 l
-2795 2587 l
-2816 2581 l
-2838 2576 l
-2860 2571 l
-2883 2567 l
-2906 2564 l
-2930 2562 l
-2954 2561 l
-2978 2560 l
-3003 2561 l
-3028 2562 l
-3053 2564 l
-3078 2567 l
-3103 2571 l
-3128 2576 l
-3154 2581 l
-3179 2588 l
-3204 2596 l
-3229 2604 l
-3253 2613 l
-3277 2623 l
-3301 2634 l
-3325 2646 l
-3348 2658 l
-3371 2671 l
-3393 2685 l
-3414 2700 l
-3435 2715 l
-3455 2730 l
-3475 2747 l
-3493 2764 l
-3511 2781 l
-3529 2799 l
-3545 2817 l
-3560 2835 l
-3575 2854 l
-3589 2873 l
-3602 2893 l
-3614 2912 l
-3625 2932 l
-3635 2951 l
-3644 2971 l
-3652 2991 l
-3659 3011 l
-3666 3031 l
-3671 3050 l
-3676 3070 l
-3679 3089 l
-3682 3109 l
-3684 3128 l
-3685 3146 l
-3685 3165 l
-3684 3183 l
-3683 3201 l
-3681 3219 l
-3677 3236 l
-3674 3253 l
-3669 3269 l
-3664 3285 l
-3657 3301 l
-3651 3316 l
-3643 3331 l
-3635 3346 l
-3626 3359 l
-3617 3373 l
-3607 3386 l
-3597 3398 l
-3586 3410 l
-S
-3881 3956 m
-3879 3957 l
-3877 3958 l
-3875 3960 l
-3851 3975 l
-3826 3989 l
-3800 4003 l
-3774 4016 l
-3748 4027 l
-3721 4038 l
-3693 4048 l
-3665 4057 l
-3637 4065 l
-3609 4073 l
-3580 4079 l
-3551 4085 l
-3521 4090 l
-3492 4094 l
-3462 4097 l
-3432 4100 l
-3402 4102 l
-3371 4103 l
-3341 4104 l
-3310 4103 l
-3279 4102 l
-3248 4101 l
-3217 4098 l
-3186 4095 l
-3155 4091 l
-3124 4087 l
-3093 4082 l
-3061 4076 l
-3030 4070 l
-2999 4063 l
-2968 4056 l
-2937 4047 l
-2907 4039 l
-2876 4029 l
-2845 4019 l
-2815 4009 l
-2785 3998 l
-2755 3986 l
-2725 3974 l
-2695 3962 l
-2666 3948 l
-2637 3935 l
-2608 3920 l
-2579 3906 l
-2551 3890 l
-2523 3875 l
-2495 3858 l
-2468 3842 l
-2441 3824 l
-2415 3807 l
-2389 3789 l
-2363 3770 l
-2338 3751 l
-2313 3731 l
-2288 3711 l
-2265 3691 l
-2241 3670 l
-2219 3649 l
-2196 3627 l
-2175 3605 l
-2154 3583 l
-2133 3560 l
-2113 3537 l
-2094 3514 l
-2076 3490 l
-2058 3465 l
-2041 3441 l
-2025 3416 l
-2009 3390 l
-1994 3365 l
-1981 3339 l
-1967 3313 l
-1955 3286 l
-1944 3259 l
-1934 3232 l
-1924 3205 l
-1916 3177 l
-1908 3149 l
-1902 3121 l
-1897 3092 l
-1892 3064 l
-1889 3035 l
-1888 3006 l
-1887 2977 l
-1888 2947 l
-1889 2918 l
-1893 2888 l
-1897 2859 l
-1903 2829 l
-1911 2799 l
-1920 2770 l
-1930 2740 l
-1943 2710 l
-1956 2681 l
-1972 2652 l
-1989 2623 l
-2008 2594 l
-2029 2565 l
-2051 2537 l
-2076 2510 l
-2102 2483 l
-2131 2456 l
-2161 2430 l
-2194 2405 l
-2228 2381 l
-2265 2358 l
-2304 2336 l
-2345 2316 l
-2388 2296 l
-2432 2278 l
-2479 2262 l
-2528 2248 l
-2579 2235 l
-2632 2225 l
-2686 2216 l
-2742 2210 l
-2799 2206 l
-2857 2205 l
-2917 2207 l
-2977 2211 l
-3038 2218 l
-3100 2228 l
-3161 2241 l
-3223 2256 l
-3284 2275 l
-3344 2296 l
-3404 2320 l
-3463 2347 l
-3520 2376 l
-3575 2408 l
-3629 2442 l
-3681 2478 l
-3730 2516 l
-3777 2556 l
-3822 2597 l
-3864 2640 l
-3904 2683 l
-3941 2728 l
-3975 2773 l
-4006 2818 l
-4035 2864 l
-4061 2910 l
-4084 2956 l
-4104 3002 l
-4122 3047 l
-4138 3092 l
-4151 3136 l
-4162 3180 l
-4170 3223 l
-4177 3265 l
-4181 3306 l
-4183 3346 l
-4183 3385 l
-4182 3423 l
-4179 3460 l
-4174 3496 l
-4167 3531 l
-4160 3565 l
-4150 3598 l
-4139 3629 l
-4127 3660 l
-4114 3689 l
-4100 3717 l
-4084 3744 l
-4068 3770 l
-4050 3795 l
-4032 3819 l
-4013 3842 l
-3993 3863 l
-3972 3884 l
-3950 3903 l
-3928 3922 l
-3904 3939 l
-3881 3956 l
-S
-3924 4591 m
-3922 4592 l
-3920 4593 l
-3917 4593 l
-3884 4604 l
-3851 4614 l
-3817 4623 l
-3783 4631 l
-3749 4638 l
-3715 4645 l
-3680 4650 l
-3645 4655 l
-3609 4659 l
-3574 4662 l
-3538 4664 l
-3502 4666 l
-3466 4667 l
-3430 4667 l
-3394 4666 l
-3358 4665 l
-3321 4663 l
-3284 4661 l
-3248 4657 l
-3211 4653 l
-3174 4649 l
-3137 4643 l
-3100 4638 l
-3063 4631 l
-3026 4624 l
-2989 4616 l
-2952 4608 l
-2916 4599 l
-2879 4590 l
-2842 4580 l
-2805 4569 l
-2769 4558 l
-2732 4547 l
-2696 4534 l
-2659 4522 l
-2623 4509 l
-2587 4495 l
-2552 4481 l
-2516 4466 l
-2481 4451 l
-2445 4435 l
-2411 4419 l
-2376 4402 l
-2341 4385 l
-2307 4367 l
-2273 4349 l
-2240 4331 l
-2206 4312 l
-2174 4292 l
-2141 4272 l
-2109 4252 l
-2077 4231 l
-2045 4210 l
-2014 4188 l
-1984 4166 l
-1953 4144 l
-1924 4121 l
-1894 4098 l
-1865 4074 l
-1837 4050 l
-1809 4026 l
-1782 4001 l
-1755 3976 l
-1729 3950 l
-1703 3925 l
-1678 3898 l
-1654 3871 l
-1630 3844 l
-1607 3817 l
-1584 3789 l
-1563 3761 l
-1542 3732 l
-1521 3703 l
-1502 3674 l
-1483 3644 l
-1465 3614 l
-1448 3584 l
-1432 3553 l
-1417 3522 l
-1402 3490 l
-1389 3458 l
-1376 3426 l
-1365 3393 l
-1354 3360 l
-1345 3326 l
-1337 3292 l
-1330 3257 l
-1325 3222 l
-1320 3187 l
-1317 3151 l
-1316 3114 l
-1316 3078 l
-1317 3040 l
-1321 3002 l
-1326 2964 l
-1332 2925 l
-1341 2886 l
-1352 2845 l
-1365 2805 l
-1381 2764 l
-1399 2722 l
-1419 2680 l
-1443 2637 l
-1469 2594 l
-1499 2551 l
-1533 2507 l
-1570 2462 l
-1573 2459 l
-1576 2456 l
-1579 2453 l
-1582 2450 l
-1585 2447 l
-1588 2443 l
-1590 2440 l
-1593 2437 l
-1596 2434 l
-1599 2431 l
-1603 2427 l
-1606 2424 l
-1609 2421 l
-1612 2418 l
-1615 2415 l
-1618 2412 l
-1621 2408 l
-1624 2405 l
-1628 2402 l
-1631 2399 l
-1634 2396 l
-1638 2393 l
-1641 2389 l
-1644 2386 l
-1648 2383 l
-1651 2380 l
-1654 2377 l
-1658 2374 l
-1661 2370 l
-1665 2367 l
-1668 2364 l
-1672 2361 l
-1675 2358 l
-1679 2355 l
-1683 2351 l
-1686 2348 l
-1690 2345 l
-1694 2342 l
-1697 2339 l
-1701 2336 l
-1705 2332 l
-1709 2329 l
-1712 2326 l
-1716 2323 l
-1720 2320 l
-1724 2317 l
-1728 2314 l
-1732 2310 l
-1736 2307 l
-1740 2304 l
-1744 2301 l
-1748 2298 l
-1752 2295 l
-1756 2292 l
-1760 2289 l
-1765 2286 l
-1769 2282 l
-1773 2279 l
-1777 2276 l
-1782 2273 l
-1786 2270 l
-1790 2267 l
-1795 2264 l
-1799 2261 l
-1803 2258 l
-1808 2255 l
-1812 2252 l
-1817 2249 l
-1822 2245 l
-1826 2242 l
-1831 2239 l
-1835 2236 l
-1840 2233 l
-1845 2230 l
-1849 2227 l
-1854 2224 l
-1859 2221 l
-1864 2218 l
-1869 2215 l
-1874 2212 l
-1879 2209 l
-1883 2206 l
-1888 2203 l
-1893 2200 l
-1899 2198 l
-1904 2195 l
-1909 2192 l
-1914 2189 l
-1919 2186 l
-S
-1919 2186 m
-1924 2183 l
-1930 2180 l
-1935 2177 l
-1940 2174 l
-1945 2171 l
-1951 2169 l
-1956 2166 l
-1962 2163 l
-1967 2160 l
-1973 2157 l
-1978 2154 l
-1984 2152 l
-1989 2149 l
-1995 2146 l
-2001 2143 l
-2006 2141 l
-2012 2138 l
-2018 2135 l
-2024 2132 l
-2030 2130 l
-2036 2127 l
-2041 2124 l
-2047 2122 l
-2053 2119 l
-2059 2116 l
-2065 2114 l
-2072 2111 l
-2078 2109 l
-2084 2106 l
-2090 2103 l
-2096 2101 l
-2103 2098 l
-2109 2096 l
-2115 2093 l
-2122 2091 l
-2128 2088 l
-2135 2086 l
-2141 2084 l
-2148 2081 l
-2154 2079 l
-2161 2076 l
-2167 2074 l
-2174 2072 l
-2181 2069 l
-2187 2067 l
-2194 2065 l
-2201 2063 l
-2208 2060 l
-2215 2058 l
-2222 2056 l
-2229 2054 l
-2236 2052 l
-2243 2050 l
-2250 2048 l
-2257 2045 l
-2264 2043 l
-2271 2041 l
-2279 2039 l
-2286 2037 l
-2293 2035 l
-2300 2034 l
-2308 2032 l
-2315 2030 l
-2323 2028 l
-2330 2026 l
-2338 2024 l
-2345 2022 l
-2353 2021 l
-2360 2019 l
-2368 2017 l
-2376 2016 l
-2383 2014 l
-2391 2012 l
-2399 2011 l
-2407 2009 l
-2415 2008 l
-2423 2006 l
-2431 2005 l
-2439 2004 l
-2447 2002 l
-2455 2001 l
-2463 1999 l
-2471 1998 l
-2479 1997 l
-2487 1996 l
-2495 1995 l
-2504 1993 l
-2512 1992 l
-2520 1991 l
-2529 1990 l
-2537 1989 l
-2545 1988 l
-2554 1987 l
-2562 1986 l
-2571 1986 l
-2579 1985 l
-2588 1984 l
-2597 1983 l
-2605 1983 l
-2614 1982 l
-2623 1981 l
-2631 1981 l
-2640 1980 l
-2649 1980 l
-2658 1979 l
-2667 1979 l
-2676 1978 l
-2684 1978 l
-2693 1978 l
-2702 1978 l
-2711 1977 l
-2720 1977 l
-2729 1977 l
-2739 1977 l
-2748 1977 l
-2757 1977 l
-2766 1977 l
-2775 1977 l
-2784 1977 l
-2794 1978 l
-2803 1978 l
-2812 1978 l
-2821 1979 l
-2831 1979 l
-2840 1979 l
-2849 1980 l
-2859 1980 l
-2868 1981 l
-2878 1982 l
-2887 1982 l
-2896 1983 l
-2906 1984 l
-2915 1985 l
-2925 1986 l
-2935 1987 l
-2944 1988 l
-2954 1989 l
-2963 1990 l
-2973 1991 l
-2982 1992 l
-2992 1993 l
-3002 1995 l
-3011 1996 l
-3021 1998 l
-3031 1999 l
-3040 2001 l
-3050 2002 l
-3060 2004 l
-3069 2006 l
-3079 2007 l
-3089 2009 l
-3098 2011 l
-3108 2013 l
-3118 2015 l
-3128 2017 l
-3137 2019 l
-3147 2021 l
-3157 2023 l
-3167 2026 l
-3176 2028 l
-3186 2030 l
-3196 2033 l
-3206 2035 l
-3215 2038 l
-3225 2040 l
-3235 2043 l
-3245 2045 l
-3254 2048 l
-3264 2051 l
-3274 2054 l
-3284 2057 l
-3293 2060 l
-3303 2063 l
-3313 2066 l
-3322 2069 l
-3332 2072 l
-3342 2075 l
-3351 2079 l
-3361 2082 l
-3371 2085 l
-3380 2089 l
-3390 2092 l
-3399 2096 l
-3409 2100 l
-3419 2103 l
-3428 2107 l
-3438 2111 l
-3447 2115 l
-3457 2118 l
-3466 2122 l
-3476 2126 l
-3485 2130 l
-3494 2135 l
-3504 2139 l
-3513 2143 l
-3522 2147 l
-3532 2151 l
-3541 2156 l
-3550 2160 l
-S
-3550 2160 m
-3559 2165 l
-3569 2169 l
-3578 2174 l
-3587 2178 l
-3596 2183 l
-3605 2187 l
-3614 2192 l
-3623 2197 l
-3632 2202 l
-3641 2207 l
-3650 2212 l
-3659 2217 l
-3668 2222 l
-3677 2227 l
-3686 2232 l
-3694 2237 l
-3703 2242 l
-3712 2247 l
-3720 2252 l
-3729 2258 l
-3738 2263 l
-3746 2268 l
-3755 2274 l
-3763 2279 l
-3772 2285 l
-3780 2290 l
-3788 2296 l
-3797 2302 l
-3805 2307 l
-3813 2313 l
-3821 2319 l
-3829 2324 l
-3838 2330 l
-3846 2336 l
-3854 2342 l
-3862 2348 l
-3869 2354 l
-3877 2360 l
-3885 2366 l
-3893 2372 l
-3901 2378 l
-3908 2384 l
-3916 2390 l
-3924 2396 l
-3931 2402 l
-3939 2408 l
-3946 2415 l
-3954 2421 l
-3961 2427 l
-3968 2433 l
-3976 2440 l
-3983 2446 l
-3990 2452 l
-3997 2459 l
-4004 2465 l
-4011 2472 l
-4018 2478 l
-4025 2485 l
-4032 2491 l
-4039 2498 l
-4045 2504 l
-4052 2511 l
-4059 2517 l
-4065 2524 l
-4072 2530 l
-4079 2537 l
-4085 2544 l
-4091 2550 l
-4098 2557 l
-4104 2564 l
-4110 2570 l
-4117 2577 l
-4123 2584 l
-4129 2590 l
-4135 2597 l
-4141 2604 l
-4147 2611 l
-4153 2617 l
-4159 2624 l
-4165 2631 l
-4170 2638 l
-4176 2645 l
-4182 2651 l
-4187 2658 l
-4193 2665 l
-4198 2672 l
-4204 2679 l
-4209 2686 l
-4215 2692 l
-4220 2699 l
-4225 2706 l
-4230 2713 l
-4235 2720 l
-4241 2727 l
-4246 2734 l
-4251 2740 l
-4256 2747 l
-4260 2754 l
-4265 2761 l
-4270 2768 l
-4275 2775 l
-4280 2782 l
-4284 2788 l
-4289 2795 l
-4293 2802 l
-4298 2809 l
-4302 2816 l
-4307 2823 l
-4311 2829 l
-4316 2836 l
-4320 2843 l
-4324 2850 l
-4328 2857 l
-4332 2864 l
-4337 2870 l
-4341 2877 l
-4345 2884 l
-4349 2891 l
-4352 2898 l
-4356 2904 l
-4360 2911 l
-4364 2918 l
-4368 2925 l
-4371 2931 l
-4375 2938 l
-4379 2945 l
-4382 2952 l
-4386 2958 l
-4389 2965 l
-4393 2972 l
-4396 2978 l
-4399 2985 l
-4403 2992 l
-4406 2998 l
-4409 3005 l
-4412 3011 l
-4415 3018 l
-4418 3025 l
-4421 3031 l
-4425 3038 l
-4427 3044 l
-4430 3051 l
-4433 3057 l
-4436 3064 l
-4439 3070 l
-4442 3077 l
-4444 3083 l
-4447 3090 l
-4450 3096 l
-4452 3103 l
-4455 3109 l
-4458 3115 l
-4460 3122 l
-4463 3128 l
-4465 3135 l
-4467 3141 l
-4470 3147 l
-4472 3154 l
-4474 3160 l
-4477 3166 l
-4479 3172 l
-4481 3179 l
-4483 3185 l
-4485 3191 l
-4487 3197 l
-4489 3203 l
-4491 3210 l
-4493 3216 l
-4495 3222 l
-4497 3228 l
-4499 3234 l
-4501 3240 l
-4503 3246 l
-4505 3252 l
-4506 3258 l
-4508 3264 l
-4510 3270 l
-4512 3276 l
-4513 3282 l
-4515 3288 l
-4516 3294 l
-4518 3300 l
-4519 3306 l
-4521 3312 l
-4522 3318 l
-4524 3323 l
-4525 3329 l
-4527 3335 l
-4528 3341 l
-4529 3347 l
-4530 3352 l
-4532 3358 l
-4533 3364 l
-4534 3369 l
-4535 3375 l
-4536 3381 l
-4538 3386 l
-4539 3392 l
-4540 3397 l
-S
-4540 3397 m
-4541 3403 l
-4542 3409 l
-4543 3414 l
-4544 3420 l
-4545 3425 l
-4546 3431 l
-4546 3436 l
-4547 3442 l
-4548 3447 l
-4549 3452 l
-4550 3458 l
-4551 3463 l
-4551 3469 l
-4552 3474 l
-4553 3479 l
-4553 3484 l
-4554 3490 l
-4555 3495 l
-4555 3500 l
-4556 3505 l
-4556 3511 l
-4557 3516 l
-4558 3521 l
-4558 3526 l
-4559 3531 l
-4559 3536 l
-4559 3542 l
-4560 3547 l
-4560 3552 l
-4561 3557 l
-4561 3562 l
-4561 3567 l
-4562 3572 l
-4562 3577 l
-4562 3582 l
-4562 3587 l
-4563 3592 l
-4563 3596 l
-4563 3601 l
-4563 3606 l
-4563 3611 l
-4564 3616 l
-4564 3621 l
-4564 3625 l
-4564 3630 l
-4564 3635 l
-4564 3640 l
-4564 3644 l
-4564 3649 l
-4564 3654 l
-4564 3658 l
-4564 3663 l
-4564 3668 l
-4564 3672 l
-4564 3677 l
-4564 3682 l
-4564 3686 l
-4563 3691 l
-4563 3695 l
-4560 3757 l
-4553 3815 l
-4544 3871 l
-4533 3923 l
-4520 3973 l
-4505 4020 l
-4488 4064 l
-4470 4106 l
-4451 4146 l
-4430 4184 l
-4408 4220 l
-4385 4254 l
-4361 4285 l
-4337 4316 l
-4311 4344 l
-4285 4371 l
-4258 4396 l
-4230 4420 l
-4202 4443 l
-4173 4464 l
-4144 4484 l
-4114 4503 l
-4083 4520 l
-4053 4536 l
-4021 4552 l
-3989 4566 l
-3957 4579 l
-3925 4591 l
-S
-3638 5218 m
-3636 5218 l
-3634 5218 l
-3632 5218 l
-3601 5218 l
-3570 5217 l
-3539 5216 l
-3507 5215 l
-3476 5213 l
-3443 5211 l
-3411 5208 l
-3379 5205 l
-3346 5202 l
-3313 5198 l
-3280 5194 l
-3246 5189 l
-3213 5184 l
-3179 5179 l
-3145 5173 l
-3111 5167 l
-3077 5160 l
-3043 5153 l
-3008 5146 l
-2974 5138 l
-2939 5130 l
-2905 5121 l
-2870 5112 l
-2835 5103 l
-2800 5093 l
-2766 5083 l
-2731 5073 l
-2696 5062 l
-2661 5051 l
-2626 5040 l
-2591 5028 l
-2556 5016 l
-2522 5003 l
-2487 4990 l
-2452 4977 l
-2418 4963 l
-2383 4950 l
-2349 4935 l
-2314 4921 l
-2280 4906 l
-2246 4891 l
-2212 4876 l
-2179 4860 l
-2145 4844 l
-2112 4828 l
-2079 4811 l
-2046 4794 l
-2013 4777 l
-1980 4760 l
-1948 4742 l
-1916 4724 l
-1884 4706 l
-1853 4687 l
-1821 4669 l
-1790 4650 l
-1760 4631 l
-1729 4611 l
-1699 4592 l
-1669 4572 l
-1640 4552 l
-1611 4532 l
-1582 4512 l
-1554 4491 l
-1526 4471 l
-1498 4450 l
-1471 4429 l
-1444 4408 l
-1418 4386 l
-1392 4365 l
-1366 4343 l
-1341 4322 l
-1316 4300 l
-1292 4278 l
-1268 4256 l
-1245 4234 l
-1222 4211 l
-1200 4189 l
-1178 4167 l
-1156 4144 l
-1136 4122 l
-1115 4099 l
-1095 4077 l
-1076 4054 l
-1057 4031 l
-1039 4009 l
-1021 3986 l
-1004 3963 l
-987 3940 l
-971 3918 l
-956 3895 l
-941 3872 l
-926 3850 l
-912 3827 l
-899 3804 l
-886 3782 l
-874 3759 l
-863 3737 l
-852 3714 l
-842 3692 l
-832 3670 l
-823 3648 l
-814 3626 l
-807 3604 l
-799 3582 l
-793 3560 l
-787 3539 l
-781 3517 l
-777 3496 l
-773 3475 l
-769 3454 l
-766 3433 l
-764 3412 l
-763 3391 l
-762 3371 l
-761 3350 l
-762 3330 l
-763 3310 l
-765 3290 l
-767 3270 l
-770 3250 l
-774 3230 l
-779 3210 l
-785 3189 l
-792 3167 l
-802 3140 l
-802 3138 l
-803 3136 l
-804 3134 l
-805 3131 l
-806 3129 l
-807 3126 l
-808 3124 l
-810 3121 l
-811 3118 l
-812 3115 l
-814 3112 l
-815 3108 l
-817 3105 l
-819 3100 l
-820 3096 l
-823 3091 l
-825 3086 l
-828 3080 l
-831 3073 l
-835 3065 l
-840 3055 l
-845 3044 l
-852 3030 l
-862 3011 l
-875 2987 l
-894 2951 l
-896 2948 l
-898 2945 l
-899 2942 l
-901 2938 l
-903 2935 l
-906 2931 l
-908 2927 l
-910 2923 l
-912 2919 l
-915 2915 l
-918 2910 l
-920 2906 l
-923 2901 l
-926 2896 l
-929 2891 l
-933 2885 l
-936 2880 l
-940 2874 l
-944 2868 l
-948 2861 l
-952 2854 l
-956 2847 l
-961 2840 l
-966 2832 l
-972 2823 l
-978 2815 l
-984 2806 l
-990 2796 l
-998 2785 l
-1005 2774 l
-1013 2763 l
-1022 2750 l
-1032 2737 l
-1042 2723 l
-1054 2708 l
-1066 2692 l
-1080 2674 l
-1095 2655 l
-1112 2635 l
-1131 2613 l
-1152 2589 l
-1175 2563 l
-1202 2535 l
-1232 2504 l
-1267 2470 l
-S
-1267 2470 m
-1307 2432 l
-1353 2391 l
-1408 2346 l
-1412 2343 l
-1417 2339 l
-1421 2336 l
-1425 2332 l
-1430 2329 l
-1434 2326 l
-1439 2322 l
-1444 2318 l
-1448 2315 l
-1453 2311 l
-1458 2308 l
-1463 2304 l
-1468 2300 l
-1473 2297 l
-1478 2293 l
-1483 2289 l
-1488 2285 l
-1494 2282 l
-1499 2278 l
-1504 2274 l
-1510 2270 l
-1515 2266 l
-1521 2262 l
-1527 2258 l
-1533 2254 l
-1538 2250 l
-1544 2246 l
-1550 2242 l
-1556 2238 l
-1563 2234 l
-1569 2230 l
-1575 2226 l
-1582 2222 l
-1588 2218 l
-1595 2214 l
-1602 2209 l
-1608 2205 l
-1615 2201 l
-1622 2197 l
-1629 2192 l
-1636 2188 l
-1644 2184 l
-1651 2179 l
-1659 2175 l
-1666 2171 l
-1674 2166 l
-1682 2162 l
-1690 2157 l
-1698 2153 l
-1706 2148 l
-1714 2144 l
-1722 2139 l
-1731 2135 l
-1740 2130 l
-1748 2126 l
-1757 2121 l
-1766 2117 l
-1775 2112 l
-1785 2108 l
-1794 2103 l
-1804 2098 l
-1813 2094 l
-1823 2089 l
-1833 2085 l
-1843 2080 l
-1853 2075 l
-1864 2071 l
-1874 2066 l
-1885 2062 l
-1896 2057 l
-1907 2052 l
-1918 2048 l
-1929 2043 l
-1941 2039 l
-1953 2034 l
-1965 2030 l
-1977 2025 l
-1989 2021 l
-2001 2016 l
-2014 2012 l
-2026 2007 l
-2039 2003 l
-2052 1999 l
-2066 1994 l
-2079 1990 l
-2093 1986 l
-2107 1982 l
-2121 1978 l
-2135 1974 l
-2150 1970 l
-2164 1966 l
-2179 1962 l
-2194 1958 l
-2209 1954 l
-2225 1950 l
-2241 1947 l
-2257 1943 l
-2273 1940 l
-2289 1937 l
-2306 1933 l
-2322 1930 l
-2339 1927 l
-2357 1924 l
-2374 1921 l
-2392 1919 l
-2409 1916 l
-2427 1914 l
-2446 1911 l
-2464 1909 l
-2483 1907 l
-2502 1905 l
-2521 1904 l
-2540 1902 l
-2560 1901 l
-2580 1900 l
-2600 1899 l
-2620 1898 l
-2640 1897 l
-2661 1897 l
-2682 1896 l
-2702 1896 l
-2724 1897 l
-2745 1897 l
-2766 1898 l
-2788 1898 l
-2810 1900 l
-2832 1901 l
-2854 1903 l
-2876 1904 l
-2899 1906 l
-2921 1909 l
-2944 1912 l
-2967 1914 l
-2990 1918 l
-3013 1921 l
-3036 1925 l
-3059 1929 l
-3083 1933 l
-3106 1938 l
-3129 1943 l
-3153 1948 l
-3176 1953 l
-3200 1959 l
-3224 1965 l
-3247 1972 l
-3271 1979 l
-3294 1986 l
-3318 1993 l
-3342 2000 l
-3365 2008 l
-3389 2017 l
-3412 2025 l
-3435 2034 l
-3459 2043 l
-3482 2052 l
-3505 2062 l
-3528 2072 l
-3551 2082 l
-3573 2093 l
-3596 2104 l
-3618 2115 l
-3640 2126 l
-3663 2138 l
-3684 2149 l
-3706 2161 l
-3728 2174 l
-3749 2186 l
-3770 2199 l
-3791 2212 l
-3811 2225 l
-3832 2238 l
-3852 2252 l
-3872 2265 l
-3892 2279 l
-3911 2293 l
-3930 2307 l
-3949 2322 l
-3968 2336 l
-3986 2351 l
-4004 2365 l
-4022 2380 l
-4039 2395 l
-4057 2410 l
-4073 2425 l
-4090 2440 l
-4107 2455 l
-4123 2470 l
-4138 2486 l
-4154 2501 l
-4169 2516 l
-4184 2532 l
-4199 2547 l
-4213 2563 l
-4227 2578 l
-4241 2594 l
-4254 2609 l
-S
-4254 2609 m
-4268 2625 l
-4281 2640 l
-4293 2655 l
-4306 2671 l
-4318 2686 l
-4330 2701 l
-4341 2717 l
-4353 2732 l
-4364 2747 l
-4375 2762 l
-4385 2777 l
-4396 2792 l
-4406 2807 l
-4416 2822 l
-4425 2836 l
-4435 2851 l
-4444 2865 l
-4453 2880 l
-4462 2894 l
-4470 2909 l
-4478 2923 l
-4486 2937 l
-4494 2951 l
-4502 2965 l
-4510 2978 l
-4517 2992 l
-4524 3006 l
-4531 3019 l
-4538 3032 l
-4544 3046 l
-4551 3059 l
-4557 3072 l
-4563 3085 l
-4569 3098 l
-4575 3110 l
-4581 3123 l
-4586 3135 l
-4591 3148 l
-4597 3160 l
-4602 3172 l
-4606 3184 l
-4611 3196 l
-4616 3208 l
-4620 3219 l
-4625 3231 l
-4629 3242 l
-4633 3253 l
-4637 3265 l
-4641 3276 l
-4645 3287 l
-4649 3298 l
-4652 3308 l
-4656 3319 l
-4659 3329 l
-4663 3340 l
-4666 3350 l
-4669 3360 l
-4672 3371 l
-4675 3381 l
-4678 3390 l
-4681 3400 l
-4683 3410 l
-4686 3420 l
-4689 3429 l
-4691 3438 l
-4693 3448 l
-4696 3457 l
-4698 3466 l
-4700 3475 l
-4702 3484 l
-4704 3493 l
-4706 3501 l
-4708 3510 l
-4710 3519 l
-4712 3527 l
-4714 3535 l
-4716 3544 l
-4717 3552 l
-4719 3560 l
-4720 3568 l
-4722 3576 l
-4723 3584 l
-4725 3591 l
-4726 3599 l
-4728 3607 l
-4729 3614 l
-4730 3622 l
-4731 3629 l
-4732 3636 l
-4734 3644 l
-4735 3651 l
-4736 3658 l
-4737 3665 l
-4738 3672 l
-4739 3679 l
-4740 3685 l
-4741 3692 l
-4741 3699 l
-4742 3705 l
-4743 3712 l
-4744 3718 l
-4745 3725 l
-4745 3731 l
-4746 3737 l
-4747 3743 l
-4747 3749 l
-4748 3755 l
-4748 3761 l
-4749 3767 l
-4750 3773 l
-4750 3779 l
-4751 3785 l
-4756 3860 l
-4758 3925 l
-4758 3983 l
-4757 4034 l
-4755 4079 l
-4752 4120 l
-4749 4156 l
-4745 4189 l
-4742 4219 l
-4738 4246 l
-4734 4271 l
-4731 4293 l
-4727 4314 l
-4724 4334 l
-4721 4351 l
-4717 4368 l
-4714 4383 l
-4711 4398 l
-4708 4411 l
-4705 4424 l
-4703 4435 l
-4700 4446 l
-4697 4457 l
-4695 4467 l
-4692 4476 l
-4690 4485 l
-4688 4493 l
-4686 4501 l
-4684 4509 l
-4682 4516 l
-4680 4523 l
-4678 4529 l
-4676 4535 l
-4674 4541 l
-4673 4547 l
-4671 4552 l
-4670 4558 l
-4668 4563 l
-4667 4567 l
-4665 4572 l
-4664 4576 l
-4662 4581 l
-4647 4627 l
-4636 4658 l
-4628 4680 l
-4622 4697 l
-4617 4710 l
-4613 4721 l
-4609 4729 l
-4606 4737 l
-4603 4744 l
-4601 4749 l
-4599 4755 l
-4597 4759 l
-4595 4763 l
-4593 4767 l
-4592 4771 l
-4590 4774 l
-4589 4777 l
-4587 4780 l
-4586 4783 l
-4585 4786 l
-4584 4788 l
-4582 4791 l
-4569 4818 l
-4557 4839 l
-4546 4858 l
-4534 4876 l
-4522 4893 l
-4510 4909 l
-4497 4924 l
-4483 4939 l
-4470 4954 l
-4455 4968 l
-4440 4981 l
-4425 4995 l
-4408 5008 l
-4392 5020 l
-4375 5032 l
-4357 5044 l
-4339 5056 l
-4320 5067 l
-4301 5077 l
-4281 5088 l
-4261 5098 l
-4240 5107 l
-4218 5116 l
-S
-4218 5116 m
-4197 5125 l
-4174 5134 l
-4152 5142 l
-4128 5149 l
-4105 5156 l
-4080 5163 l
-4056 5170 l
-4031 5176 l
-4005 5181 l
-3979 5187 l
-3953 5192 l
-3926 5196 l
-3899 5200 l
-3872 5204 l
-3844 5207 l
-3816 5210 l
-3787 5212 l
-3758 5214 l
-3729 5216 l
-3699 5217 l
-3669 5218 l
-3639 5218 l
-S
-2956 5656 m
-2955 5655 l
-2954 5655 l
-2953 5654 l
-2939 5646 l
-2924 5639 l
-2909 5631 l
-2893 5623 l
-2876 5616 l
-2860 5608 l
-2842 5600 l
-2824 5592 l
-2806 5584 l
-2787 5577 l
-2768 5568 l
-2748 5560 l
-2728 5552 l
-2708 5544 l
-2687 5536 l
-2666 5527 l
-2645 5519 l
-2623 5510 l
-2601 5501 l
-2579 5493 l
-2557 5484 l
-2534 5475 l
-2512 5466 l
-2489 5456 l
-2466 5447 l
-2443 5438 l
-2419 5428 l
-2396 5419 l
-2372 5409 l
-2348 5399 l
-2324 5389 l
-2301 5380 l
-2277 5369 l
-2253 5359 l
-2228 5349 l
-2204 5339 l
-2180 5329 l
-2156 5318 l
-2132 5308 l
-2108 5297 l
-2084 5286 l
-2060 5276 l
-2036 5265 l
-2012 5254 l
-1988 5243 l
-1964 5233 l
-1940 5222 l
-1917 5211 l
-1893 5200 l
-1870 5189 l
-1847 5178 l
-1824 5167 l
-1801 5156 l
-1778 5146 l
-1755 5135 l
-1733 5124 l
-1710 5113 l
-1688 5103 l
-1667 5092 l
-1645 5082 l
-1623 5072 l
-1602 5061 l
-1581 5051 l
-1561 5041 l
-1540 5032 l
-1520 5022 l
-1500 5012 l
-1481 5003 l
-1461 4994 l
-1442 4985 l
-1424 4977 l
-1406 4969 l
-1388 4961 l
-1370 4953 l
-1353 4946 l
-1336 4939 l
-1319 4932 l
-1303 4926 l
-1288 4920 l
-1273 4915 l
-1258 4910 l
-1244 4906 l
-1230 4902 l
-1216 4899 l
-1204 4897 l
-1191 4895 l
-1180 4894 l
-1169 4893 l
-1158 4894 l
-1148 4895 l
-1139 4897 l
-1131 4900 l
-1123 4904 l
-1116 4908 l
-1110 4914 l
-1105 4921 l
-1100 4930 l
-1097 4939 l
-1094 4950 l
-1093 4962 l
-1093 4975 l
-1094 4990 l
-1097 5007 l
-1101 5025 l
-1107 5044 l
-1114 5066 l
-1123 5089 l
-1134 5113 l
-1148 5140 l
-1163 5168 l
-1181 5198 l
-1202 5230 l
-1225 5263 l
-1251 5298 l
-1280 5334 l
-1312 5371 l
-1348 5410 l
-1387 5449 l
-1430 5488 l
-1476 5528 l
-1525 5568 l
-1578 5607 l
-1633 5645 l
-1692 5682 l
-1753 5717 l
-1816 5750 l
-1881 5780 l
-1948 5808 l
-2015 5834 l
-2082 5856 l
-2149 5875 l
-2215 5892 l
-2280 5905 l
-2343 5915 l
-2404 5923 l
-2463 5928 l
-2519 5931 l
-2572 5932 l
-2623 5931 l
-2670 5929 l
-2714 5925 l
-2755 5920 l
-2794 5914 l
-2829 5907 l
-2861 5900 l
-2890 5892 l
-2917 5883 l
-2941 5875 l
-2962 5866 l
-2981 5857 l
-2998 5847 l
-3013 5838 l
-3025 5829 l
-3036 5820 l
-3044 5811 l
-3051 5802 l
-3056 5793 l
-3060 5784 l
-3062 5775 l
-3063 5767 l
-3062 5758 l
-3060 5750 l
-3057 5742 l
-3052 5734 l
-3047 5726 l
-3040 5718 l
-3033 5710 l
-3024 5702 l
-3015 5694 l
-3005 5686 l
-2994 5679 l
-2982 5671 l
-2969 5663 l
-2956 5656 l
-S
-3678 4650 m
-3671 4680 l
-S
-3420 4667 m
-3410 4696 l
-S
-2885 4592 m
-2874 4620 l
-S
-2621 4508 m
-2609 4536 l
-S
-2122 4260 m
-2108 4288 l
-S
-1898 4101 m
-1884 4128 l
-S
-1534 3722 m
-1518 3747 l
-S
-1407 3502 m
-1390 3527 l
-S
-1321 2997 m
-1300 3019 l
-S
-1407 2705 m
-1383 2725 l
-S
-2128 2089 m
-2098 2095 l
-S
-2959 1989 m
-2930 1980 l
-S
-4430 3050 m
-4446 3076 l
-S
-4564 3628 m
-4571 3657 l
-S
-4350 4300 m
-4348 4331 l
-S
-4152 4479 m
-4147 4509 l
-S
-3198 3069 m
-3218 3046 l
-S
-3284 3127 m
-3305 3105 l
-S
-3366 3191 m
-3387 3169 l
-S
-3444 3259 m
-3466 3238 l
-S
-3517 3332 m
-3540 3312 l
-S
-3649 3492 m
-3673 3473 l
-S
-3707 3578 m
-3732 3560 l
-S
-3760 3668 m
-3785 3650 l
-S
-3807 3761 m
-3832 3744 l
-S
-3847 3857 m
-3873 3841 l
-S
-3907 4058 m
-3935 4044 l
-S
-3927 4162 m
-3955 4149 l
-S
-3939 4267 m
-3967 4255 l
-S
-3943 4374 m
-3971 4364 l
-S
-3938 4482 m
-3967 4473 l
-S
-3902 4699 m
-3932 4692 l
-S
-3870 4807 m
-3900 4802 l
-S
-3828 4914 m
-3858 4910 l
-S
-3776 5018 m
-3806 5016 l
-S
-3713 5120 m
-3743 5119 l
-S
-3553 5311 m
-3583 5314 l
-S
-3456 5398 m
-3486 5402 l
-S
-3348 5477 m
-3378 5484 l
-S
-3228 5548 m
-3257 5557 l
-S
-3097 5608 m
-3126 5619 l
-S
-2805 5690 m
-2831 5706 l
-S
-2647 5708 m
-2670 5727 l
-S
-2482 5709 m
-2503 5731 l
-S
-2313 5691 m
-2330 5716 l
-S
-2143 5654 m
-2156 5681 l
-S
-3925 4591 m
-3873 4608 l
-3821 4622 l
-3768 4635 l
-3715 4645 l
-3660 4653 l
-3606 4659 l
-3550 4664 l
-3495 4666 l
-3438 4667 l
-3382 4666 l
-3325 4663 l
-3268 4659 l
-3211 4653 l
-3154 4646 l
-S
-3154 4646 m
-3096 4637 l
-3039 4626 l
-2981 4615 l
-2924 4601 l
-2866 4587 l
-2809 4571 l
-2752 4553 l
-2696 4534 l
-2639 4514 l
-2583 4493 l
-2528 4471 l
-2473 4447 l
-2418 4422 l
-2364 4396 l
-S
-2364 4396 m
-2311 4369 l
-2258 4341 l
-2206 4312 l
-2155 4281 l
-2105 4250 l
-2056 4217 l
-2007 4184 l
-1960 4149 l
-1914 4114 l
-1869 4077 l
-1825 4040 l
-1782 4001 l
-1740 3962 l
-1700 3922 l
-S
-1700 3922 m
-1662 3880 l
-1625 3838 l
-1589 3795 l
-1556 3751 l
-1524 3707 l
-1493 3661 l
-1465 3614 l
-1439 3567 l
-1415 3518 l
-1393 3469 l
-1374 3418 l
-1357 3367 l
-1342 3315 l
-1331 3261 l
-S
-1331 3261 m
-1330 3257 l
-1330 3253 l
-1329 3249 l
-1328 3246 l
-1328 3242 l
-1327 3238 l
-1326 3234 l
-1326 3230 l
-1325 3226 l
-1325 3222 l
-1324 3218 l
-1324 3214 l
-1323 3210 l
-1323 3207 l
-1322 3203 l
-1322 3199 l
-1321 3195 l
-1321 3191 l
-1320 3187 l
-1320 3183 l
-1320 3179 l
-1319 3175 l
-1319 3171 l
-1318 3167 l
-1318 3163 l
-1318 3159 l
-1318 3155 l
-1317 3151 l
-1317 3147 l
-1317 3143 l
-1317 3139 l
-1316 3135 l
-1316 3131 l
-1316 3127 l
-1316 3123 l
-1316 3119 l
-1316 3114 l
-1316 3110 l
-1316 3106 l
-1316 3102 l
-1316 3098 l
-1316 3094 l
-1316 3090 l
-1316 3086 l
-1316 3082 l
-1316 3078 l
-1316 3073 l
-1316 3069 l
-1316 3065 l
-1316 3061 l
-1316 3057 l
-1317 3053 l
-1317 3049 l
-1317 3044 l
-1317 3040 l
-1318 3036 l
-1318 3032 l
-1318 3028 l
-1319 3023 l
-1319 3019 l
-1319 3015 l
-1320 3011 l
-1320 3007 l
-1321 3002 l
-1321 2998 l
-1322 2994 l
-1322 2990 l
-1323 2985 l
-1323 2981 l
-1324 2977 l
-1324 2972 l
-1325 2968 l
-1326 2964 l
-1326 2960 l
-1327 2955 l
-1328 2951 l
-1328 2947 l
-1329 2942 l
-1330 2938 l
-1331 2934 l
-1332 2929 l
-1332 2925 l
-1333 2921 l
-1334 2916 l
-1335 2912 l
-1336 2908 l
-1337 2903 l
-1338 2899 l
-1339 2894 l
-1340 2890 l
-1341 2886 l
-1342 2881 l
-1343 2877 l
-1345 2872 l
-1346 2868 l
-1347 2863 l
-1348 2859 l
-1349 2854 l
-1351 2850 l
-1352 2845 l
-1353 2841 l
-1355 2837 l
-1356 2832 l
-1358 2828 l
-1359 2823 l
-1360 2819 l
-1362 2814 l
-1364 2809 l
-1365 2805 l
-1367 2800 l
-1368 2796 l
-1370 2791 l
-1372 2787 l
-1373 2782 l
-1375 2778 l
-1377 2773 l
-1379 2768 l
-1381 2764 l
-1382 2759 l
-1384 2755 l
-1386 2750 l
-1388 2745 l
-1390 2741 l
-1392 2736 l
-1394 2731 l
-1396 2727 l
-1399 2722 l
-1401 2717 l
-1403 2713 l
-1405 2708 l
-1407 2703 l
-1410 2699 l
-1412 2694 l
-1414 2689 l
-1417 2685 l
-1419 2680 l
-1422 2675 l
-1424 2671 l
-1427 2666 l
-1429 2661 l
-1432 2656 l
-1435 2652 l
-1437 2647 l
-1440 2642 l
-1443 2637 l
-1446 2633 l
-1448 2628 l
-1451 2623 l
-1454 2618 l
-1457 2613 l
-1460 2609 l
-1463 2604 l
-1466 2599 l
-1469 2594 l
-1473 2589 l
-1476 2584 l
-1479 2580 l
-1482 2575 l
-1486 2570 l
-1489 2565 l
-1492 2560 l
-1496 2555 l
-1499 2551 l
-1503 2546 l
-1506 2541 l
-1510 2536 l
-1514 2531 l
-1518 2526 l
-1521 2521 l
-1525 2516 l
-1529 2511 l
-1533 2507 l
-1537 2502 l
-1541 2497 l
-1545 2492 l
-1549 2487 l
-1553 2482 l
-1557 2477 l
-1562 2472 l
-1566 2467 l
-1570 2462 l
-1575 2457 l
-1579 2452 l
-1584 2448 l
-1588 2443 l
-1593 2438 l
-1597 2433 l
-1602 2428 l
-1607 2423 l
-1612 2418 l
-1617 2413 l
-1622 2408 l
-1627 2403 l
-1632 2398 l
-1637 2393 l
-1642 2388 l
-S
-1642 2388 m
-1647 2383 l
-1652 2378 l
-1658 2374 l
-1663 2369 l
-1669 2364 l
-1674 2359 l
-1680 2354 l
-1685 2349 l
-1691 2344 l
-1697 2339 l
-1703 2334 l
-1709 2329 l
-1715 2324 l
-1721 2320 l
-1727 2315 l
-1733 2310 l
-1739 2305 l
-1745 2300 l
-1752 2295 l
-1758 2290 l
-1765 2286 l
-1771 2281 l
-1778 2276 l
-1784 2271 l
-1791 2266 l
-1798 2261 l
-1805 2257 l
-1812 2252 l
-1819 2247 l
-1826 2242 l
-1833 2238 l
-1841 2233 l
-1848 2228 l
-1855 2224 l
-1863 2219 l
-1870 2214 l
-1878 2210 l
-1886 2205 l
-1893 2200 l
-1901 2196 l
-1909 2191 l
-1917 2187 l
-1925 2182 l
-1934 2178 l
-1942 2173 l
-1950 2169 l
-1959 2164 l
-1967 2160 l
-1976 2156 l
-1984 2151 l
-1993 2147 l
-2002 2143 l
-2011 2138 l
-2020 2134 l
-2029 2130 l
-2038 2126 l
-2047 2122 l
-2057 2118 l
-2066 2113 l
-2076 2109 l
-2085 2105 l
-2095 2101 l
-2105 2098 l
-2115 2094 l
-2124 2090 l
-2135 2086 l
-2145 2082 l
-2155 2079 l
-2165 2075 l
-2176 2071 l
-2186 2068 l
-2197 2064 l
-2207 2061 l
-2218 2057 l
-2229 2054 l
-2240 2051 l
-2251 2047 l
-2262 2044 l
-2273 2041 l
-2284 2038 l
-2296 2035 l
-2307 2032 l
-2318 2029 l
-2330 2026 l
-2342 2023 l
-2354 2021 l
-2365 2018 l
-2377 2015 l
-2390 2013 l
-2402 2010 l
-2414 2008 l
-2426 2006 l
-2439 2004 l
-2451 2001 l
-2464 1999 l
-2476 1997 l
-2489 1995 l
-2502 1994 l
-2515 1992 l
-2528 1990 l
-2541 1989 l
-2554 1987 l
-2567 1986 l
-2580 1985 l
-2594 1983 l
-2607 1982 l
-2621 1981 l
-2634 1980 l
-2648 1980 l
-2662 1979 l
-2676 1978 l
-2689 1978 l
-2703 1978 l
-2717 1977 l
-2731 1977 l
-2746 1977 l
-2760 1977 l
-2774 1977 l
-2788 1977 l
-2803 1978 l
-2817 1978 l
-2832 1979 l
-2846 1980 l
-2861 1981 l
-2875 1982 l
-2890 1983 l
-2905 1984 l
-2920 1985 l
-2935 1987 l
-2949 1988 l
-2964 1990 l
-2979 1992 l
-2994 1994 l
-3009 1996 l
-3024 1998 l
-3039 2000 l
-3054 2003 l
-3069 2006 l
-3084 2008 l
-3100 2011 l
-3115 2014 l
-3130 2017 l
-3145 2021 l
-3160 2024 l
-3175 2028 l
-3191 2031 l
-3206 2035 l
-3221 2039 l
-3236 2043 l
-3251 2047 l
-3266 2052 l
-3281 2056 l
-3297 2061 l
-3312 2066 l
-3327 2070 l
-3342 2075 l
-3357 2081 l
-3372 2086 l
-3387 2091 l
-3402 2097 l
-3416 2102 l
-3431 2108 l
-3446 2114 l
-3461 2120 l
-3476 2126 l
-3490 2133 l
-3505 2139 l
-3519 2146 l
-3534 2152 l
-3548 2159 l
-3563 2166 l
-3577 2173 l
-3591 2180 l
-3605 2187 l
-3619 2195 l
-3633 2202 l
-3647 2210 l
-3661 2218 l
-3675 2225 l
-3689 2233 l
-3702 2241 l
-3716 2250 l
-3729 2258 l
-3742 2266 l
-3756 2275 l
-3769 2283 l
-3782 2292 l
-3795 2300 l
-3808 2309 l
-3820 2318 l
-3833 2327 l
-3846 2336 l
-3858 2345 l
-3870 2354 l
-3883 2364 l
-3895 2373 l
-S
-3895 2373 m
-3907 2382 l
-3919 2392 l
-3930 2401 l
-3942 2411 l
-3954 2421 l
-3965 2431 l
-3976 2440 l
-3988 2450 l
-3999 2460 l
-4010 2470 l
-4020 2480 l
-4031 2490 l
-4042 2500 l
-4052 2511 l
-4063 2521 l
-4073 2531 l
-4083 2541 l
-4093 2552 l
-4103 2562 l
-4113 2573 l
-4122 2583 l
-4132 2593 l
-4141 2604 l
-4150 2614 l
-4159 2625 l
-4168 2636 l
-4177 2646 l
-4186 2657 l
-4195 2667 l
-4203 2678 l
-4212 2689 l
-4220 2699 l
-4228 2710 l
-4236 2721 l
-4244 2731 l
-4252 2742 l
-4259 2753 l
-4267 2763 l
-4274 2774 l
-4282 2785 l
-4289 2795 l
-4296 2806 l
-4303 2817 l
-4310 2827 l
-4317 2838 l
-4323 2848 l
-4330 2859 l
-4336 2870 l
-4342 2880 l
-4349 2891 l
-4355 2901 l
-4361 2912 l
-4366 2922 l
-4372 2933 l
-4378 2943 l
-4383 2954 l
-4389 2964 l
-4394 2975 l
-4399 2985 l
-4404 2995 l
-4409 3006 l
-4414 3016 l
-4419 3026 l
-4424 3036 l
-4428 3046 l
-4433 3057 l
-4437 3067 l
-4442 3077 l
-4446 3087 l
-4450 3097 l
-4454 3107 l
-4458 3117 l
-4462 3127 l
-4466 3137 l
-4470 3147 l
-4473 3156 l
-4477 3166 l
-4480 3176 l
-4483 3186 l
-4487 3195 l
-4490 3205 l
-4493 3214 l
-4496 3224 l
-4499 3233 l
-4502 3243 l
-4505 3252 l
-4507 3262 l
-4510 3271 l
-4513 3280 l
-4515 3289 l
-4518 3299 l
-4520 3308 l
-4522 3317 l
-4524 3326 l
-4527 3335 l
-4529 3344 l
-4531 3353 l
-4533 3362 l
-4534 3371 l
-4536 3379 l
-4538 3388 l
-4540 3397 l
-4541 3406 l
-4543 3414 l
-4544 3423 l
-4546 3431 l
-4547 3440 l
-4548 3448 l
-4550 3457 l
-4551 3465 l
-4552 3473 l
-4553 3482 l
-4554 3490 l
-4555 3498 l
-4556 3506 l
-4557 3514 l
-4558 3522 l
-4558 3530 l
-4559 3538 l
-4560 3546 l
-4560 3554 l
-4561 3562 l
-4561 3570 l
-4562 3577 l
-4562 3585 l
-4563 3593 l
-4563 3600 l
-4563 3608 l
-4564 3615 l
-4564 3623 l
-4564 3630 l
-4564 3638 l
-4564 3645 l
-4564 3652 l
-4564 3660 l
-4564 3667 l
-4564 3674 l
-4564 3681 l
-4564 3688 l
-4563 3695 l
-4563 3702 l
-4563 3709 l
-4562 3716 l
-4562 3723 l
-4562 3730 l
-4561 3737 l
-4561 3743 l
-4560 3750 l
-4560 3757 l
-4559 3763 l
-4558 3770 l
-4558 3777 l
-4557 3783 l
-4556 3790 l
-4556 3796 l
-4555 3803 l
-4554 3809 l
-4553 3815 l
-4552 3822 l
-4551 3828 l
-4550 3834 l
-4549 3840 l
-4548 3846 l
-4547 3853 l
-4546 3859 l
-4545 3865 l
-4544 3871 l
-4543 3877 l
-4542 3883 l
-4541 3888 l
-4539 3894 l
-4538 3900 l
-4537 3906 l
-4536 3912 l
-4534 3917 l
-4533 3923 l
-4532 3929 l
-4530 3934 l
-4529 3940 l
-4527 3946 l
-4526 3951 l
-4524 3957 l
-4523 3962 l
-4521 3967 l
-4520 3973 l
-4518 3978 l
-4517 3983 l
-4515 3989 l
-4513 3994 l
-4512 3999 l
-4510 4004 l
-4508 4010 l
-4506 4015 l
-4505 4020 l
-4503 4025 l
-4501 4030 l
-S
-4501 4030 m
-4499 4035 l
-4498 4040 l
-4496 4045 l
-4494 4050 l
-4492 4055 l
-4490 4059 l
-4488 4064 l
-4486 4069 l
-4484 4074 l
-4482 4079 l
-4480 4083 l
-4478 4088 l
-4476 4093 l
-4474 4097 l
-4472 4102 l
-4470 4106 l
-4468 4111 l
-4466 4116 l
-4464 4120 l
-4461 4124 l
-4459 4129 l
-4457 4133 l
-4455 4138 l
-4453 4142 l
-4451 4146 l
-4448 4151 l
-4446 4155 l
-4444 4159 l
-4441 4163 l
-4439 4168 l
-4437 4172 l
-4435 4176 l
-4432 4180 l
-4430 4184 l
-4427 4188 l
-4425 4192 l
-4423 4196 l
-4420 4200 l
-4418 4204 l
-4415 4208 l
-4413 4212 l
-4411 4216 l
-4408 4220 l
-4406 4224 l
-4403 4227 l
-4401 4231 l
-4398 4235 l
-4395 4239 l
-4393 4242 l
-4390 4246 l
-4388 4250 l
-4385 4254 l
-4383 4257 l
-4380 4261 l
-4377 4264 l
-4375 4268 l
-4372 4271 l
-4369 4275 l
-4367 4278 l
-4364 4282 l
-4361 4285 l
-4359 4289 l
-4356 4292 l
-4353 4296 l
-4351 4299 l
-4348 4302 l
-4345 4306 l
-4342 4309 l
-4340 4312 l
-4337 4316 l
-4334 4319 l
-4331 4322 l
-4328 4325 l
-4326 4328 l
-4323 4332 l
-4320 4335 l
-4317 4338 l
-4314 4341 l
-4311 4344 l
-4308 4347 l
-4305 4350 l
-4303 4353 l
-4300 4356 l
-4297 4359 l
-4294 4362 l
-4291 4365 l
-4288 4368 l
-4285 4371 l
-4282 4374 l
-4279 4377 l
-4276 4380 l
-4273 4382 l
-4270 4385 l
-4267 4388 l
-4264 4391 l
-4261 4394 l
-4258 4396 l
-4255 4399 l
-4252 4402 l
-4249 4405 l
-4246 4407 l
-4243 4410 l
-4240 4412 l
-4237 4415 l
-4234 4418 l
-4230 4420 l
-4227 4423 l
-4224 4425 l
-4221 4428 l
-4218 4430 l
-4215 4433 l
-4212 4435 l
-4208 4438 l
-4205 4440 l
-4202 4443 l
-4199 4445 l
-4196 4448 l
-4193 4450 l
-4189 4452 l
-4186 4455 l
-4183 4457 l
-4180 4459 l
-4177 4462 l
-4173 4464 l
-4170 4466 l
-4167 4469 l
-4164 4471 l
-4160 4473 l
-4157 4475 l
-4154 4477 l
-4150 4480 l
-4147 4482 l
-4144 4484 l
-4141 4486 l
-4137 4488 l
-4134 4490 l
-4131 4492 l
-4127 4494 l
-4124 4496 l
-4121 4499 l
-4117 4501 l
-4114 4503 l
-4111 4505 l
-4107 4507 l
-4104 4509 l
-4100 4510 l
-4097 4512 l
-4094 4514 l
-4090 4516 l
-4087 4518 l
-4083 4520 l
-4080 4522 l
-4077 4524 l
-4073 4526 l
-4025 4550 l
-3975 4572 l
-3972 4573 l
-3968 4575 l
-3964 4576 l
-3961 4577 l
-3957 4579 l
-3954 4580 l
-3950 4582 l
-3946 4583 l
-3943 4584 l
-3939 4586 l
-3936 4587 l
-3932 4588 l
-3928 4590 l
-3928 4590 l
-3928 4590 l
-3927 4590 l
-3927 4590 l
-3927 4590 l
-3927 4590 l
-3926 4590 l
-3926 4590 l
-3926 4590 l
-3926 4590 l
-3925 4591 l
-3925 4591 l
-3925 4591 l
-S
-3109 3016 m
-3148 3038 l
-3186 3061 l
-3223 3085 l
-3260 3110 l
-3296 3136 l
-3331 3163 l
-3366 3191 l
-3400 3219 l
-3433 3249 l
-3465 3280 l
-3497 3311 l
-3527 3343 l
-3557 3376 l
-3586 3410 l
-S
-3586 3410 m
-3613 3445 l
-3640 3480 l
-3666 3516 l
-3691 3553 l
-3715 3590 l
-3738 3629 l
-3760 3668 l
-3781 3707 l
-3800 3747 l
-3819 3788 l
-3836 3829 l
-3852 3871 l
-3867 3913 l
-3881 3956 l
-S
-3881 3956 m
-3893 3999 l
-3904 4043 l
-3914 4087 l
-3922 4132 l
-3929 4177 l
-3935 4222 l
-3939 4267 l
-3941 4313 l
-3943 4359 l
-3942 4405 l
-3940 4451 l
-3937 4498 l
-3931 4544 l
-3925 4591 l
-S
-3925 4591 m
-3916 4637 l
-3906 4684 l
-3894 4730 l
-3880 4776 l
-3865 4823 l
-3847 4868 l
-3828 4914 l
-3807 4959 l
-3784 5004 l
-3759 5048 l
-3732 5091 l
-3703 5134 l
-3672 5177 l
-3639 5218 l
-S
-3639 5218 m
-3603 5258 l
-3566 5298 l
-3527 5336 l
-3485 5374 l
-3442 5410 l
-3396 5444 l
-3348 5477 l
-3298 5509 l
-3246 5538 l
-3192 5566 l
-3136 5592 l
-3078 5616 l
-3018 5637 l
-2956 5656 l
-S
-2956 5656 m
-2952 5657 l
-2947 5658 l
-2943 5660 l
-2938 5661 l
-2934 5662 l
-2929 5663 l
-2924 5664 l
-2920 5665 l
-2915 5667 l
-2911 5668 l
-2906 5669 l
-2902 5670 l
-2897 5671 l
-2892 5672 l
-2888 5673 l
-2883 5674 l
-2879 5675 l
-2874 5676 l
-2869 5677 l
-2865 5678 l
-2860 5679 l
-2855 5680 l
-2851 5681 l
-2846 5682 l
-2841 5683 l
-2837 5684 l
-2832 5685 l
-2827 5686 l
-2823 5687 l
-2818 5687 l
-2813 5688 l
-2808 5689 l
-2804 5690 l
-2799 5691 l
-2794 5691 l
-2789 5692 l
-2785 5693 l
-2780 5694 l
-2775 5694 l
-2770 5695 l
-2765 5696 l
-2761 5697 l
-2756 5697 l
-2751 5698 l
-2746 5698 l
-2741 5699 l
-2737 5700 l
-2732 5700 l
-2727 5701 l
-2722 5701 l
-2717 5702 l
-2712 5702 l
-2707 5703 l
-2702 5703 l
-2698 5704 l
-2693 5704 l
-2688 5705 l
-2683 5705 l
-2678 5706 l
-2673 5706 l
-2668 5706 l
-2663 5707 l
-2658 5707 l
-2653 5707 l
-2648 5708 l
-2643 5708 l
-2638 5708 l
-2633 5709 l
-2628 5709 l
-2623 5709 l
-2618 5709 l
-2613 5709 l
-2608 5710 l
-2603 5710 l
-2598 5710 l
-2593 5710 l
-2588 5710 l
-2583 5710 l
-2578 5710 l
-2573 5710 l
-2568 5710 l
-2563 5711 l
-2558 5711 l
-2553 5711 l
-2548 5711 l
-2543 5710 l
-2538 5710 l
-2533 5710 l
-2528 5710 l
-2522 5710 l
-2517 5710 l
-2512 5710 l
-2507 5710 l
-2502 5710 l
-2497 5709 l
-2492 5709 l
-2487 5709 l
-2482 5709 l
-2476 5708 l
-2471 5708 l
-2466 5708 l
-2461 5708 l
-2456 5707 l
-2451 5707 l
-2446 5707 l
-2441 5706 l
-2435 5706 l
-2430 5705 l
-2425 5705 l
-2420 5704 l
-2415 5704 l
-2410 5703 l
-2404 5703 l
-2399 5702 l
-2394 5702 l
-2389 5701 l
-2384 5701 l
-2379 5700 l
-2373 5700 l
-2368 5699 l
-2363 5698 l
-2358 5698 l
-2353 5697 l
-2347 5696 l
-2342 5695 l
-2337 5695 l
-2332 5694 l
-2327 5693 l
-2321 5692 l
-2316 5692 l
-2311 5691 l
-2306 5690 l
-2301 5689 l
-2295 5688 l
-2290 5687 l
-2285 5686 l
-2280 5685 l
-2275 5684 l
-2269 5683 l
-2264 5682 l
-2259 5681 l
-2254 5680 l
-2249 5679 l
-2243 5678 l
-2238 5677 l
-2233 5676 l
-2228 5675 l
-2223 5674 l
-2217 5673 l
-2212 5671 l
-2207 5670 l
-2202 5669 l
-2197 5668 l
-2191 5666 l
-2186 5665 l
-2181 5664 l
-2176 5663 l
-2171 5661 l
-2165 5660 l
-2160 5658 l
-2155 5657 l
-2150 5656 l
-2145 5654 l
-2139 5653 l
-2134 5651 l
-2129 5650 l
-2124 5648 l
-2119 5647 l
-2113 5645 l
-2108 5644 l
-2103 5642 l
-2098 5641 l
-2093 5639 l
-2088 5637 l
-2082 5636 l
-2077 5634 l
-2072 5632 l
-2067 5631 l
-2062 5629 l
-2057 5627 l
-2052 5625 l
-2046 5624 l
-2041 5622 l
-2036 5620 l
-2031 5618 l
-2026 5616 l
-2021 5614 l
-2016 5612 l
-2011 5610 l
-2005 5609 l
-2000 5607 l
-1995 5605 l
-1990 5603 l
-1985 5601 l
-1980 5599 l
-1975 5597 l
-S
-4756 3875 m
-4759 3878 l
-4759 3882 l
-4759 3887 l
-4759 3891 l
-4759 3896 l
-4759 3900 l
-4759 3905 l
-4759 3909 l
-S
-4759 3909 m
-4759 3913 l
-4759 3918 l
-4759 3922 l
-4759 3927 l
-4759 3931 l
-4759 3936 l
-4759 3940 l
-4759 3945 l
-4759 3949 l
-S
-4759 3949 m
-4759 3954 l
-4759 3958 l
-4759 3963 l
-4759 3967 l
-4759 3972 l
-4759 3976 l
-4759 3981 l
-4759 3985 l
-4759 3989 l
-S
-4759 3989 m
-4759 3994 l
-4759 3998 l
-4759 4003 l
-4759 4007 l
-4759 4012 l
-4759 4016 l
-4759 4021 l
-4759 4025 l
-4759 4030 l
-S
-4756 4041 m
-4759 4039 l
-4759 4034 l
-4759 4030 l
-S
-4716 3545 m
-4718 3547 l
-S
-4718 3547 m
-4718 3551 l
-4718 3556 l
-4718 3560 l
-4718 3565 l
-4721 3567 l
-4723 3569 l
-4723 3574 l
-4723 3578 l
-4723 3583 l
-4723 3587 l
-S
-4723 3587 m
-4723 3592 l
-4725 3594 l
-4727 3596 l
-4727 3601 l
-4727 3605 l
-4727 3610 l
-4727 3614 l
-4730 3616 l
-4732 3619 l
-4732 3623 l
-4732 3627 l
-S
-4732 3627 m
-4732 3632 l
-4732 3636 l
-4732 3641 l
-4732 3645 l
-4734 3648 l
-4736 3650 l
-4736 3654 l
-4736 3659 l
-4736 3663 l
-4736 3668 l
-S
-4736 3668 m
-4736 3672 l
-4736 3677 l
-4738 3679 l
-4741 3681 l
-4741 3686 l
-4741 3690 l
-4741 3694 l
-4741 3699 l
-4741 3703 l
-4741 3708 l
-S
-4741 3708 m
-4743 3710 l
-4745 3712 l
-4745 3717 l
-4745 3721 l
-4745 3726 l
-4745 3730 l
-4745 3735 l
-4745 3739 l
-4745 3744 l
-4745 3748 l
-S
-4745 3748 m
-4747 3750 l
-4750 3753 l
-4750 3757 l
-4750 3762 l
-4750 3766 l
-4750 3770 l
-4750 3775 l
-4750 3779 l
-4750 3784 l
-4750 3788 l
-S
-4750 3788 m
-4750 3793 l
-4750 3797 l
-4752 3800 l
-4754 3802 l
-4754 3806 l
-4754 3811 l
-4754 3815 l
-4754 3820 l
-4754 3824 l
-4754 3829 l
-S
-4754 3829 m
-4754 3833 l
-4754 3838 l
-4754 3842 l
-4754 3846 l
-4754 3851 l
-4754 3855 l
-4754 3860 l
-4754 3864 l
-4754 3869 l
-S
-4754 3869 m
-4754 3873 l
-4756 3875 l
-S
-4754 4070 m
-4754 4065 l
-4754 4061 l
-4754 4056 l
-4754 4052 l
-4754 4048 l
-4754 4043 l
-4756 4041 l
-S
-4754 4070 m
-4754 4074 l
-4754 4079 l
-4754 4083 l
-4754 4088 l
-4754 4092 l
-4754 4097 l
-4754 4101 l
-4754 4106 l
-4754 4110 l
-S
-4754 4110 m
-4754 4115 l
-4752 4117 l
-4750 4119 l
-4750 4124 l
-4750 4128 l
-4750 4132 l
-4750 4137 l
-4750 4141 l
-4750 4146 l
-4750 4150 l
-S
-4750 4150 m
-4750 4155 l
-4750 4159 l
-4750 4164 l
-4750 4168 l
-4747 4170 l
-4745 4173 l
-4745 4177 l
-4745 4182 l
-4745 4186 l
-4745 4191 l
-S
-4745 4191 m
-4745 4195 l
-4745 4199 l
-4745 4204 l
-4745 4208 l
-4743 4211 l
-4741 4213 l
-4741 4217 l
-4741 4222 l
-4741 4226 l
-4741 4231 l
-S
-4741 4231 m
-4741 4235 l
-4741 4240 l
-4738 4242 l
-4736 4244 l
-4736 4249 l
-4736 4253 l
-4736 4258 l
-4736 4262 l
-4736 4267 l
-4736 4271 l
-S
-4736 4271 m
-4734 4273 l
-4732 4275 l
-4732 4280 l
-4732 4284 l
-4732 4289 l
-4732 4293 l
-4732 4298 l
-4730 4300 l
-4727 4302 l
-4727 4307 l
-4727 4311 l
-S
-4727 4311 m
-4727 4316 l
-4727 4320 l
-4727 4325 l
-4725 4327 l
-4723 4329 l
-4723 4334 l
-4723 4338 l
-4723 4342 l
-4723 4347 l
-4721 4349 l
-4718 4351 l
-S
-4716 4372 m
-4718 4369 l
-4718 4365 l
-4718 4360 l
-4718 4356 l
-4718 4351 l
-S
-4676 3384 m
-4678 3386 l
-S
-4678 3386 m
-4678 3391 l
-4678 3395 l
-4680 3397 l
-4683 3400 l
-4683 3404 l
-4683 3408 l
-4683 3413 l
-4685 3415 l
-4687 3417 l
-4687 3422 l
-4687 3426 l
-S
-4687 3426 m
-4687 3431 l
-4689 3433 l
-4692 3435 l
-4692 3440 l
-4692 3444 l
-4692 3449 l
-4694 3451 l
-4696 3453 l
-4696 3458 l
-4696 3462 l
-4696 3467 l
-S
-4696 3467 m
-4698 3469 l
-4701 3471 l
-4701 3476 l
-4701 3480 l
-4701 3484 l
-4703 3487 l
-4705 3489 l
-4705 3493 l
-4705 3498 l
-4705 3502 l
-4707 3505 l
-4709 3507 l
-S
-4709 3507 m
-4709 3511 l
-4709 3516 l
-4709 3520 l
-4709 3525 l
-4712 3527 l
-4714 3529 l
-4714 3534 l
-4714 3538 l
-4714 3543 l
-4716 3545 l
-S
-4714 4392 m
-4714 4387 l
-4714 4383 l
-4714 4378 l
-4714 4374 l
-4716 4372 l
-S
-4714 4392 m
-4712 4394 l
-4709 4396 l
-4709 4401 l
-4709 4405 l
-4709 4410 l
-4709 4414 l
-4707 4416 l
-4705 4418 l
-4705 4423 l
-4705 4427 l
-4705 4432 l
-S
-4705 4432 m
-4703 4434 l
-4701 4436 l
-4701 4441 l
-4701 4445 l
-4701 4450 l
-4698 4452 l
-4696 4454 l
-4696 4459 l
-4696 4463 l
-4696 4468 l
-4694 4470 l
-4692 4472 l
-S
-4692 4472 m
-4692 4477 l
-4692 4481 l
-4692 4486 l
-4689 4488 l
-4687 4490 l
-4687 4494 l
-4687 4499 l
-4687 4503 l
-4685 4506 l
-4683 4508 l
-4683 4512 l
-S
-4676 4537 m
-4678 4535 l
-4678 4530 l
-4678 4526 l
-4678 4521 l
-4680 4519 l
-4683 4517 l
-4683 4512 l
-S
-4636 3259 m
-4638 3261 l
-4638 3265 l
-S
-4638 3265 m
-4638 3270 l
-4640 3272 l
-4642 3274 l
-4642 3279 l
-4642 3283 l
-4645 3286 l
-4647 3288 l
-4647 3292 l
-4647 3297 l
-4649 3299 l
-4651 3301 l
-4651 3306 l
-S
-4651 3306 m
-4651 3310 l
-4654 3312 l
-4656 3315 l
-4656 3319 l
-4656 3324 l
-4658 3326 l
-4660 3328 l
-4660 3333 l
-4660 3337 l
-4663 3339 l
-4665 3341 l
-4665 3346 l
-S
-4665 3346 m
-4665 3350 l
-4667 3353 l
-4669 3355 l
-4669 3359 l
-4669 3364 l
-4669 3368 l
-4671 3371 l
-4674 3373 l
-4674 3377 l
-4674 3382 l
-4676 3384 l
-S
-4669 4553 m
-4671 4550 l
-4674 4548 l
-4674 4544 l
-4674 4539 l
-4676 4537 l
-S
-4669 4553 m
-4669 4557 l
-4669 4561 l
-4669 4566 l
-4667 4568 l
-4665 4570 l
-4665 4575 l
-4665 4579 l
-4663 4582 l
-4660 4584 l
-4660 4588 l
-4660 4593 l
-S
-4660 4593 m
-4658 4595 l
-4656 4597 l
-4656 4602 l
-4656 4606 l
-4654 4608 l
-4651 4611 l
-4651 4615 l
-4651 4620 l
-4649 4622 l
-4647 4624 l
-4647 4629 l
-4647 4633 l
-S
-4636 4662 m
-4638 4660 l
-4638 4655 l
-4638 4651 l
-4640 4649 l
-4642 4646 l
-4642 4642 l
-4642 4637 l
-4645 4635 l
-4647 4633 l
-S
-4595 3156 m
-4598 3158 l
-4598 3163 l
-4598 3167 l
-4600 3169 l
-4602 3172 l
-4602 3176 l
-4604 3178 l
-4607 3181 l
-4607 3185 l
-S
-4607 3185 m
-4607 3190 l
-4609 3192 l
-4611 3194 l
-4611 3198 l
-4613 3201 l
-4616 3203 l
-4616 3207 l
-4616 3212 l
-4618 3214 l
-4620 3216 l
-4620 3221 l
-4622 3223 l
-4625 3225 l
-S
-4625 3225 m
-4625 3230 l
-4625 3234 l
-4627 3236 l
-4629 3239 l
-4629 3243 l
-4629 3248 l
-4631 3250 l
-4633 3252 l
-4633 3257 l
-4636 3259 l
-S
-4629 4673 m
-4631 4671 l
-4633 4669 l
-4633 4664 l
-4636 4662 l
-S
-4629 4673 m
-4629 4678 l
-4629 4682 l
-4627 4684 l
-4625 4687 l
-4625 4691 l
-4625 4696 l
-4622 4698 l
-4620 4700 l
-4620 4704 l
-4618 4707 l
-4616 4709 l
-4616 4713 l
-S
-4616 4713 m
-4616 4718 l
-4613 4720 l
-4611 4722 l
-4611 4727 l
-4609 4729 l
-4607 4731 l
-4607 4736 l
-4607 4740 l
-4604 4742 l
-4602 4745 l
-4602 4749 l
-4600 4751 l
-4598 4754 l
-S
-4595 4765 m
-4598 4763 l
-4598 4758 l
-4598 4754 l
-S
-4555 3067 m
-4557 3069 l
-4557 3073 l
-4560 3076 l
-4562 3078 l
-4562 3082 l
-4562 3087 l
-4564 3089 l
-4566 3091 l
-4566 3096 l
-4569 3098 l
-4571 3100 l
-4571 3105 l
-S
-4571 3105 m
-4573 3107 l
-4575 3109 l
-4575 3114 l
-4578 3116 l
-4580 3118 l
-4580 3122 l
-4582 3125 l
-4584 3127 l
-4584 3131 l
-4584 3136 l
-4587 3138 l
-4589 3140 l
-4589 3145 l
-S
-4589 3145 m
-4591 3147 l
-4593 3149 l
-4593 3154 l
-4595 3156 l
-S
-4580 4794 m
-4582 4792 l
-4584 4789 l
-4584 4785 l
-4587 4783 l
-4589 4780 l
-4589 4776 l
-4591 4774 l
-4593 4772 l
-4593 4767 l
-4595 4765 l
-S
-4580 4794 m
-4580 4798 l
-4580 4803 l
-4578 4805 l
-4575 4807 l
-4575 4812 l
-4573 4814 l
-4571 4816 l
-4571 4821 l
-4569 4823 l
-4566 4825 l
-4566 4830 l
-4564 4832 l
-4562 4834 l
-S
-4555 4854 m
-4557 4852 l
-4557 4847 l
-4557 4843 l
-4560 4841 l
-4562 4839 l
-4562 4834 l
-S
-4515 2991 m
-4517 2993 l
-4520 2995 l
-4522 2997 l
-4522 3002 l
-4524 3004 l
-4526 3006 l
-4526 3011 l
-4528 3013 l
-4531 3015 l
-4531 3020 l
-4533 3022 l
-4535 3024 l
-S
-4535 3024 m
-4535 3029 l
-4537 3031 l
-4540 3033 l
-4540 3038 l
-4542 3040 l
-4544 3042 l
-4544 3047 l
-4546 3049 l
-4549 3051 l
-4549 3055 l
-4551 3058 l
-4553 3060 l
-4553 3064 l
-S
-4555 3067 m
-4553 3064 l
-S
-4544 4874 m
-4546 4872 l
-4549 4870 l
-4549 4865 l
-4551 4863 l
-4553 4861 l
-4553 4856 l
-4555 4854 l
-S
-4544 4874 m
-4544 4879 l
-4542 4881 l
-4540 4883 l
-4540 4888 l
-4537 4890 l
-4535 4892 l
-4535 4897 l
-4533 4899 l
-4531 4901 l
-4531 4906 l
-4528 4908 l
-4526 4910 l
-4526 4915 l
-S
-4515 4930 m
-4517 4928 l
-4517 4923 l
-4520 4921 l
-4522 4919 l
-4524 4917 l
-4526 4915 l
-S
-4475 2915 m
-4477 2917 l
-4477 2921 l
-4479 2924 l
-4482 2926 l
-4482 2930 l
-4484 2933 l
-4486 2935 l
-4486 2939 l
-4488 2941 l
-4490 2944 l
-S
-4490 2944 m
-4493 2946 l
-4495 2948 l
-4495 2953 l
-4497 2955 l
-4499 2957 l
-4499 2962 l
-4502 2964 l
-4504 2966 l
-4504 2971 l
-4506 2973 l
-4508 2975 l
-4508 2979 l
-4511 2982 l
-4513 2984 l
-S
-4513 2984 m
-4513 2988 l
-4515 2991 l
-S
-4504 4955 m
-4504 4950 l
-4506 4948 l
-4508 4946 l
-4508 4941 l
-4511 4939 l
-4513 4937 l
-4513 4932 l
-4515 4930 l
-S
-4504 4955 m
-4502 4957 l
-4499 4959 l
-4499 4964 l
-4497 4966 l
-4495 4968 l
-4493 4970 l
-4490 4973 l
-4490 4977 l
-4488 4979 l
-4486 4982 l
-4486 4986 l
-4484 4988 l
-4482 4990 l
-4482 4995 l
-S
-4475 5002 m
-4477 4999 l
-4479 4997 l
-4482 4995 l
-S
-4435 2852 m
-4437 2854 l
-4439 2857 l
-4441 2859 l
-4441 2863 l
-S
-4441 2863 m
-4444 2866 l
-4446 2868 l
-4448 2870 l
-4450 2872 l
-4450 2877 l
-4452 2879 l
-4455 2881 l
-4455 2886 l
-4457 2888 l
-4459 2890 l
-4461 2892 l
-4464 2895 l
-4464 2899 l
-4466 2901 l
-4468 2903 l
-S
-4468 2903 m
-4468 2908 l
-4470 2910 l
-4473 2912 l
-4475 2915 l
-S
-4455 5035 m
-4457 5033 l
-4459 5031 l
-4459 5026 l
-4461 5024 l
-4464 5022 l
-4466 5020 l
-4468 5017 l
-4468 5013 l
-4470 5011 l
-4473 5008 l
-4473 5004 l
-4475 5002 l
-S
-4435 5069 m
-4437 5066 l
-4439 5064 l
-4441 5062 l
-4441 5058 l
-4444 5055 l
-4446 5053 l
-4446 5049 l
-4448 5046 l
-4450 5044 l
-4452 5042 l
-4455 5040 l
-4455 5035 l
-S
-4394 2790 m
-4397 2792 l
-4397 2796 l
-4399 2798 l
-4401 2801 l
-4403 2803 l
-4406 2805 l
-4406 2810 l
-4408 2812 l
-4410 2814 l
-4412 2816 l
-4414 2819 l
-4414 2823 l
-S
-4414 2823 m
-4417 2825 l
-4419 2828 l
-4421 2830 l
-4423 2832 l
-4423 2836 l
-4426 2839 l
-4428 2841 l
-4430 2843 l
-4432 2845 l
-4432 2850 l
-4435 2852 l
-S
-4432 5075 m
-4432 5071 l
-4435 5069 l
-S
-4432 5075 m
-4430 5078 l
-4428 5080 l
-4426 5082 l
-4423 5084 l
-4423 5089 l
-4421 5091 l
-4419 5093 l
-4417 5096 l
-4414 5098 l
-4414 5102 l
-4412 5104 l
-4410 5107 l
-4408 5109 l
-4406 5111 l
-4406 5116 l
-S
-4394 5131 m
-4397 5129 l
-4397 5125 l
-4399 5122 l
-4401 5120 l
-4403 5118 l
-4406 5116 l
-S
-4354 2736 m
-4356 2738 l
-4359 2740 l
-4361 2743 l
-S
-4361 2743 m
-4363 2745 l
-4365 2747 l
-4365 2752 l
-4368 2754 l
-4370 2756 l
-4372 2758 l
-4374 2760 l
-4377 2763 l
-4379 2765 l
-4379 2769 l
-4381 2772 l
-4383 2774 l
-4385 2776 l
-4388 2778 l
-4388 2783 l
-S
-4388 2783 m
-4390 2785 l
-4392 2787 l
-4394 2790 l
-S
-4374 5156 m
-4377 5154 l
-4379 5151 l
-4381 5149 l
-4383 5147 l
-4385 5145 l
-4388 5142 l
-4388 5138 l
-4390 5136 l
-4392 5133 l
-4394 5131 l
-S
-4354 5185 m
-4356 5183 l
-4359 5180 l
-4361 5178 l
-4363 5176 l
-4365 5174 l
-4365 5169 l
-4368 5167 l
-4370 5165 l
-4372 5163 l
-4374 5160 l
-4374 5156 l
-S
-4314 2682 m
-4316 2685 l
-4318 2687 l
-4321 2689 l
-4323 2691 l
-4325 2693 l
-4325 2698 l
-4327 2700 l
-4330 2702 l
-S
-4330 2702 m
-4332 2705 l
-4334 2707 l
-4336 2709 l
-4339 2711 l
-4339 2716 l
-4341 2718 l
-4343 2720 l
-4345 2723 l
-4347 2725 l
-4350 2727 l
-4352 2729 l
-4352 2734 l
-4354 2736 l
-S
-4347 5196 m
-4350 5194 l
-4352 5192 l
-4352 5187 l
-4354 5185 l
-S
-4347 5196 m
-4345 5198 l
-4343 5201 l
-4341 5203 l
-4339 5205 l
-4339 5209 l
-4336 5212 l
-4334 5214 l
-4332 5216 l
-4330 5218 l
-4327 5221 l
-4325 5223 l
-4325 5227 l
-4323 5230 l
-4321 5232 l
-4318 5234 l
-4316 5236 l
-S
-4314 5239 m
-4316 5236 l
-S
-4274 2633 m
-4276 2635 l
-4278 2638 l
-4280 2640 l
-4283 2642 l
-4285 2644 l
-4287 2647 l
-4289 2649 l
-4289 2653 l
-4292 2655 l
-4294 2658 l
-4296 2660 l
-4298 2662 l
-S
-4298 2662 m
-4301 2664 l
-4303 2667 l
-4305 2669 l
-4307 2671 l
-4309 2673 l
-4312 2676 l
-4312 2680 l
-4314 2682 l
-S
-4314 5239 m
-4312 5241 l
-4309 5243 l
-4307 5245 l
-4307 5250 l
-4305 5252 l
-4303 5254 l
-4301 5256 l
-4298 5259 l
-4296 5261 l
-4294 5263 l
-4292 5265 l
-4289 5268 l
-4289 5272 l
-4287 5274 l
-4285 5277 l
-S
-4274 5288 m
-4276 5285 l
-4278 5283 l
-4280 5281 l
-4283 5279 l
-4285 5277 l
-S
-4233 2584 m
-4236 2586 l
-4238 2588 l
-4240 2591 l
-4240 2595 l
-4242 2597 l
-4245 2600 l
-4247 2602 l
-4249 2604 l
-4251 2606 l
-4254 2609 l
-4256 2611 l
-4258 2613 l
-4260 2615 l
-4263 2617 l
-4265 2620 l
-4267 2622 l
-S
-4267 2622 m
-4267 2626 l
-4269 2629 l
-4271 2631 l
-4274 2633 l
-S
-4249 5317 m
-4251 5314 l
-4254 5312 l
-4256 5310 l
-4258 5308 l
-4260 5306 l
-4263 5303 l
-4265 5301 l
-4267 5299 l
-4267 5294 l
-4269 5292 l
-4271 5290 l
-4274 5288 l
-S
-4233 5337 m
-4236 5335 l
-4236 5330 l
-4238 5328 l
-4240 5326 l
-4242 5323 l
-4245 5321 l
-4247 5319 l
-4249 5317 l
-S
-4193 2544 m
-4196 2546 l
-4198 2548 l
-4200 2550 l
-4202 2553 l
-4204 2555 l
-4207 2557 l
-4209 2559 l
-4211 2562 l
-4213 2564 l
-4216 2566 l
-4218 2568 l
-4220 2571 l
-4222 2573 l
-4225 2575 l
-4227 2577 l
-4229 2579 l
-4231 2582 l
-S
-4233 2584 m
-4231 2582 l
-S
-4213 5357 m
-4216 5355 l
-4218 5352 l
-4220 5350 l
-4222 5348 l
-4225 5346 l
-4227 5344 l
-4229 5341 l
-4231 5339 l
-4233 5337 l
-S
-4193 5377 m
-4196 5375 l
-4198 5373 l
-4200 5370 l
-4202 5368 l
-4204 5366 l
-4207 5364 l
-4209 5361 l
-4211 5359 l
-4213 5357 l
-S
-4153 2499 m
-4155 2501 l
-S
-4155 2501 m
-4158 2504 l
-4160 2506 l
-4162 2508 l
-4164 2510 l
-4166 2512 l
-4169 2515 l
-4171 2517 l
-4173 2519 l
-4175 2521 l
-4178 2524 l
-4180 2526 l
-4182 2528 l
-4184 2530 l
-4187 2533 l
-4189 2535 l
-4191 2537 l
-4191 2542 l
-S
-4193 2544 m
-4191 2542 l
-S
-4173 5397 m
-4175 5395 l
-4178 5393 l
-4180 5390 l
-4182 5388 l
-4184 5386 l
-4187 5384 l
-4189 5382 l
-4191 5379 l
-4193 5377 l
-S
-4153 5422 m
-4155 5420 l
-4158 5417 l
-4160 5415 l
-4162 5413 l
-4164 5411 l
-4166 5408 l
-4169 5406 l
-4171 5404 l
-4173 5402 l
-4173 5397 l
-S
-4113 2463 m
-4117 2463 l
-4120 2466 l
-4122 2468 l
-4124 2470 l
-4126 2472 l
-4128 2474 l
-4131 2477 l
-4133 2479 l
-4135 2481 l
-4137 2483 l
-4140 2486 l
-4142 2488 l
-4144 2490 l
-4146 2492 l
-4149 2495 l
-4151 2497 l
-4153 2499 l
-S
-4137 5437 m
-4140 5435 l
-4142 5433 l
-4144 5431 l
-4146 5428 l
-4149 5426 l
-4151 5424 l
-4153 5422 l
-S
-4113 5457 m
-4115 5455 l
-4117 5453 l
-4120 5451 l
-4122 5449 l
-4124 5446 l
-4126 5444 l
-4128 5442 l
-4131 5440 l
-4135 5440 l
-4137 5437 l
-S
-4073 2423 m
-4075 2425 l
-4077 2428 l
-4079 2430 l
-4082 2432 l
-4084 2434 l
-4086 2436 l
-4088 2439 l
-4090 2441 l
-4093 2443 l
-4095 2445 l
-4097 2448 l
-4099 2450 l
-4102 2452 l
-4104 2454 l
-4106 2457 l
-4108 2459 l
-4111 2461 l
-S
-4113 2463 m
-4111 2461 l
-S
-4093 5478 m
-4095 5475 l
-4097 5473 l
-4099 5471 l
-4102 5469 l
-4104 5466 l
-4106 5464 l
-4108 5462 l
-4111 5460 l
-4113 5457 l
-S
-4073 5498 m
-4075 5495 l
-4077 5493 l
-4079 5491 l
-4082 5489 l
-4084 5487 l
-4086 5484 l
-4088 5482 l
-4090 5480 l
-4093 5478 l
-S
-4032 2387 m
-4035 2390 l
-4037 2392 l
-4039 2394 l
-4041 2396 l
-4044 2399 l
-4046 2401 l
-4048 2403 l
-4050 2405 l
-4053 2407 l
-4055 2410 l
-4057 2412 l
-4059 2414 l
-4064 2414 l
-4066 2416 l
-4068 2419 l
-4070 2421 l
-S
-4073 2423 m
-4070 2421 l
-S
-4048 5518 m
-4050 5516 l
-4053 5513 l
-4055 5511 l
-4057 5509 l
-4059 5507 l
-4061 5504 l
-4064 5502 l
-4068 5502 l
-4070 5500 l
-4073 5498 l
-S
-4032 5529 m
-4037 5529 l
-4039 5527 l
-4041 5525 l
-4044 5522 l
-4046 5520 l
-4048 5518 l
-S
-3992 2356 m
-3994 2358 l
-3997 2361 l
-3999 2363 l
-4001 2365 l
-4006 2365 l
-4008 2367 l
-4010 2369 l
-4012 2372 l
-4015 2374 l
-4017 2376 l
-4019 2378 l
-4021 2381 l
-S
-4021 2381 m
-4023 2383 l
-4026 2385 l
-4028 2387 l
-4032 2387 l
-S
-3999 5558 m
-4001 5556 l
-4006 5556 l
-4008 5554 l
-4010 5551 l
-4012 5549 l
-4015 5547 l
-4017 5545 l
-4019 5542 l
-4021 5540 l
-4023 5538 l
-4026 5536 l
-4028 5533 l
-4030 5531 l
-4032 5529 l
-S
-3992 5565 m
-3994 5563 l
-3997 5560 l
-3999 5558 l
-S
-3952 2325 m
-3954 2327 l
-3956 2329 l
-3961 2329 l
-3963 2331 l
-3965 2334 l
-3968 2336 l
-3970 2338 l
-3972 2340 l
-S
-3972 2340 m
-3974 2343 l
-3979 2343 l
-3981 2345 l
-3983 2347 l
-3985 2349 l
-3988 2352 l
-3990 2354 l
-3992 2356 l
-S
-3952 5596 m
-3954 5594 l
-3956 5592 l
-3961 5592 l
-3963 5589 l
-3965 5587 l
-3968 5585 l
-3970 5583 l
-3972 5580 l
-3974 5578 l
-3977 5576 l
-3979 5574 l
-3983 5574 l
-3985 5571 l
-3988 5569 l
-3990 5567 l
-3992 5565 l
-S
-3912 2293 m
-3914 2296 l
-3916 2298 l
-3918 2300 l
-S
-3918 2300 m
-3921 2302 l
-3925 2302 l
-3927 2305 l
-3930 2307 l
-3932 2309 l
-3934 2311 l
-3936 2314 l
-3939 2316 l
-3943 2316 l
-3945 2318 l
-3947 2320 l
-3950 2323 l
-3952 2325 l
-S
-3950 5598 m
-3952 5596 l
-S
-3912 5627 m
-3914 5625 l
-3916 5623 l
-3918 5621 l
-3921 5618 l
-3925 5618 l
-3927 5616 l
-3930 5614 l
-3932 5612 l
-3934 5609 l
-3936 5607 l
-3939 5605 l
-3943 5605 l
-3945 5603 l
-3947 5601 l
-3950 5598 l
-S
-3872 2267 m
-3876 2267 l
-3878 2269 l
-3880 2271 l
-3883 2273 l
-3885 2276 l
-3889 2276 l
-3892 2278 l
-3894 2280 l
-3896 2282 l
-3898 2285 l
-3901 2287 l
-3903 2289 l
-3907 2289 l
-3909 2291 l
-3912 2293 l
-S
-3896 5638 m
-3898 5636 l
-3901 5634 l
-3903 5632 l
-3907 5632 l
-3909 5630 l
-3912 5627 l
-S
-3872 5654 m
-3876 5654 l
-3878 5652 l
-3880 5650 l
-3883 5647 l
-3885 5645 l
-3887 5643 l
-3889 5641 l
-3894 5641 l
-3896 5638 l
-S
-3831 2240 m
-3836 2240 l
-3838 2242 l
-3840 2244 l
-3842 2247 l
-3845 2249 l
-3849 2249 l
-3851 2251 l
-3854 2253 l
-3856 2256 l
-3858 2258 l
-3863 2258 l
-3865 2260 l
-S
-3865 2260 m
-3867 2262 l
-3869 2264 l
-3872 2267 l
-S
-3838 5679 m
-3840 5676 l
-3842 5674 l
-3845 5672 l
-3849 5672 l
-3851 5670 l
-3854 5668 l
-3856 5665 l
-3858 5663 l
-3863 5663 l
-3865 5661 l
-3867 5659 l
-3869 5656 l
-3872 5654 l
-S
-3831 5681 m
-3836 5681 l
-3838 5679 l
-S
-3791 2213 m
-3796 2213 l
-3798 2215 l
-3800 2218 l
-3802 2220 l
-S
-3802 2220 m
-3804 2222 l
-3809 2222 l
-3811 2224 l
-3813 2226 l
-3816 2229 l
-3818 2231 l
-3822 2231 l
-3825 2233 l
-3827 2235 l
-3829 2238 l
-3831 2240 l
-S
-3831 5681 m
-3829 5683 l
-3827 5685 l
-3825 5688 l
-3822 5690 l
-3818 5690 l
-3816 5692 l
-3813 5694 l
-3811 5697 l
-3809 5699 l
-3804 5699 l
-3802 5701 l
-3800 5703 l
-3796 5703 l
-3793 5706 l
-3791 5708 l
-S
-3751 2186 m
-3753 2188 l
-3755 2191 l
-3760 2191 l
-3762 2193 l
-3764 2195 l
-3766 2197 l
-3769 2200 l
-3773 2200 l
-3775 2202 l
-3778 2204 l
-3782 2204 l
-3784 2206 l
-3787 2209 l
-3789 2211 l
-3791 2213 l
-S
-3775 5719 m
-3778 5717 l
-3780 5714 l
-3782 5712 l
-3787 5712 l
-3789 5710 l
-3791 5708 l
-S
-3751 5735 m
-3753 5732 l
-3755 5730 l
-3758 5728 l
-3760 5726 l
-3764 5726 l
-3766 5723 l
-3769 5721 l
-3773 5721 l
-3775 5719 l
-S
-3711 2164 m
-3713 2166 l
-3715 2168 l
-3720 2168 l
-3722 2171 l
-3724 2173 l
-3729 2173 l
-3731 2175 l
-3733 2177 l
-3737 2177 l
-3740 2180 l
-S
-3740 2180 m
-3742 2182 l
-3744 2184 l
-3746 2186 l
-3751 2186 l
-S
-3711 5757 m
-3713 5755 l
-3715 5752 l
-3720 5752 l
-3722 5750 l
-3724 5748 l
-3729 5748 l
-3731 5746 l
-3733 5744 l
-3735 5741 l
-3737 5739 l
-3742 5739 l
-3744 5737 l
-3746 5735 l
-3751 5735 l
-S
-3670 2142 m
-3673 2144 l
-3675 2146 l
-3679 2146 l
-3682 2148 l
-3684 2150 l
-3688 2150 l
-3691 2153 l
-3693 2155 l
-3697 2155 l
-3699 2157 l
-3702 2159 l
-3706 2159 l
-3708 2162 l
-3711 2164 l
-S
-3704 5759 m
-3706 5757 l
-3711 5757 l
-S
-3670 5779 m
-3673 5777 l
-3675 5775 l
-3679 5775 l
-3682 5773 l
-3684 5770 l
-3688 5770 l
-3691 5768 l
-3693 5766 l
-3697 5766 l
-3699 5764 l
-3702 5761 l
-3704 5759 l
-S
-3630 2119 m
-3632 2121 l
-3635 2124 l
-3639 2124 l
-3641 2126 l
-3644 2128 l
-3648 2128 l
-3650 2130 l
-3653 2133 l
-3657 2133 l
-3659 2135 l
-3661 2137 l
-3664 2139 l
-S
-3670 2142 m
-3666 2142 l
-3664 2139 l
-S
-3630 5797 m
-3635 5797 l
-3637 5795 l
-3639 5793 l
-3644 5793 l
-3646 5790 l
-3648 5788 l
-3653 5788 l
-3655 5786 l
-3657 5784 l
-3661 5784 l
-3664 5781 l
-3666 5779 l
-3670 5779 l
-S
-3590 2101 m
-3594 2101 l
-3597 2104 l
-3599 2106 l
-3603 2106 l
-3606 2108 l
-3608 2110 l
-3612 2110 l
-3615 2112 l
-3617 2115 l
-3621 2115 l
-3623 2117 l
-3626 2119 l
-3630 2119 l
-S
-3628 5799 m
-3630 5797 l
-S
-3590 5819 m
-3592 5817 l
-3594 5815 l
-3599 5815 l
-3601 5813 l
-3603 5811 l
-3608 5811 l
-3612 5811 l
-3615 5808 l
-3617 5806 l
-3621 5806 l
-3623 5804 l
-3626 5802 l
-3628 5799 l
-S
-3550 2083 m
-3554 2083 l
-3556 2086 l
-3559 2088 l
-3563 2088 l
-3565 2090 l
-3568 2092 l
-3572 2092 l
-3577 2092 l
-3579 2095 l
-3581 2097 l
-3585 2097 l
-3588 2099 l
-S
-3590 2101 m
-3588 2099 l
-S
-3550 5837 m
-3554 5837 l
-3556 5835 l
-3559 5833 l
-3563 5833 l
-3565 5831 l
-3568 5828 l
-3572 5828 l
-3574 5826 l
-3577 5824 l
-3581 5824 l
-3583 5822 l
-3585 5819 l
-3590 5819 l
-S
-3510 2066 m
-3514 2066 l
-3516 2068 l
-3518 2070 l
-3523 2070 l
-3527 2070 l
-3530 2072 l
-3532 2075 l
-3536 2075 l
-3539 2077 l
-3541 2079 l
-3545 2079 l
-3548 2081 l
-3550 2083 l
-S
-3548 5840 m
-3550 5837 l
-S
-3510 5855 m
-3514 5855 l
-3516 5853 l
-3518 5851 l
-3523 5851 l
-3525 5849 l
-3527 5846 l
-3532 5846 l
-3536 5846 l
-3539 5844 l
-3541 5842 l
-3545 5842 l
-3548 5840 l
-S
-3469 2048 m
-3474 2048 l
-3476 2050 l
-3478 2052 l
-3483 2052 l
-3485 2054 l
-3487 2057 l
-3492 2057 l
-3496 2057 l
-3498 2059 l
-S
-3498 2059 m
-3501 2061 l
-3505 2061 l
-3507 2063 l
-3510 2066 l
-S
-3469 5873 m
-3472 5871 l
-3474 5869 l
-3478 5869 l
-3483 5869 l
-3485 5866 l
-3487 5864 l
-3492 5864 l
-3494 5862 l
-3496 5860 l
-3501 5860 l
-3505 5860 l
-3507 5857 l
-3510 5855 l
-S
-3429 2030 m
-3431 2032 l
-3434 2034 l
-3438 2034 l
-3440 2037 l
-3442 2039 l
-3447 2039 l
-3451 2039 l
-3454 2041 l
-3456 2043 l
-3460 2043 l
-3463 2045 l
-3465 2048 l
-3469 2048 l
-S
-3454 5880 m
-3456 5878 l
-3460 5878 l
-3463 5875 l
-3465 5873 l
-3469 5873 l
-S
-3429 5887 m
-3434 5887 l
-3438 5887 l
-3440 5884 l
-3442 5882 l
-3447 5882 l
-3451 5882 l
-3454 5880 l
-S
-3389 2016 m
-3393 2016 l
-3396 2019 l
-S
-3396 2019 m
-3398 2021 l
-3402 2021 l
-3405 2023 l
-3407 2025 l
-3411 2025 l
-3416 2025 l
-3418 2028 l
-3420 2030 l
-3425 2030 l
-3429 2030 l
-S
-3389 5904 m
-3391 5902 l
-3393 5900 l
-3398 5900 l
-3402 5900 l
-3405 5898 l
-3407 5895 l
-3411 5895 l
-3416 5895 l
-3418 5893 l
-3420 5891 l
-3425 5891 l
-3427 5889 l
-3429 5887 l
-S
-3349 2003 m
-3353 2003 l
-3355 2005 l
-3358 2007 l
-3362 2007 l
-3367 2007 l
-3369 2010 l
-3371 2012 l
-3375 2012 l
-3380 2012 l
-3382 2014 l
-3384 2016 l
-3389 2016 l
-S
-3349 5918 m
-3353 5918 l
-3355 5916 l
-3358 5913 l
-3362 5913 l
-3367 5913 l
-3369 5911 l
-3371 5909 l
-3375 5909 l
-3378 5907 l
-3380 5904 l
-3384 5904 l
-3389 5904 l
-S
-3308 1990 m
-3313 1990 l
-3315 1992 l
-3317 1994 l
-3322 1994 l
-3326 1994 l
-3329 1996 l
-3331 1999 l
-3335 1999 l
-3340 1999 l
-3342 2001 l
-3344 2003 l
-3349 2003 l
-S
-3342 5920 m
-3344 5918 l
-3349 5918 l
-S
-3308 5931 m
-3311 5929 l
-3313 5927 l
-3317 5927 l
-3322 5927 l
-3326 5927 l
-3329 5925 l
-3331 5922 l
-3335 5922 l
-3340 5922 l
-3342 5920 l
-S
-3268 1976 m
-3270 1978 l
-S
-3270 1978 m
-3273 1981 l
-3277 1981 l
-3282 1981 l
-3284 1983 l
-3286 1985 l
-3291 1985 l
-3295 1985 l
-3299 1985 l
-3302 1987 l
-3304 1990 l
-3308 1990 l
-S
-3268 5940 m
-3273 5940 l
-3277 5940 l
-3282 5940 l
-3284 5938 l
-3286 5936 l
-3291 5936 l
-3295 5936 l
-3297 5933 l
-3299 5931 l
-3304 5931 l
-3308 5931 l
-S
-3228 1967 m
-3232 1967 l
-3237 1967 l
-3239 1969 l
-3241 1972 l
-3246 1972 l
-3250 1972 l
-3255 1972 l
-3257 1974 l
-3259 1976 l
-3264 1976 l
-3268 1976 l
-S
-3228 5954 m
-3232 5954 l
-3235 5951 l
-3237 5949 l
-3241 5949 l
-3246 5949 l
-3250 5949 l
-3253 5947 l
-3255 5945 l
-3259 5945 l
-3264 5945 l
-3266 5942 l
-3268 5940 l
-S
-3188 1958 m
-3192 1958 l
-3197 1958 l
-3201 1958 l
-3203 1961 l
-3206 1963 l
-3210 1963 l
-3215 1963 l
-3219 1963 l
-3221 1965 l
-3224 1967 l
-3228 1967 l
-S
-3203 5960 m
-3206 5958 l
-3210 5958 l
-3215 5958 l
-3219 5958 l
-3221 5956 l
-3224 5954 l
-3228 5954 l
-S
-3188 5962 m
-3192 5962 l
-3197 5962 l
-3201 5962 l
-3203 5960 l
-S
-3148 1945 m
-3150 1947 l
-3152 1949 l
-3156 1949 l
-3161 1949 l
-3165 1949 l
-3168 1952 l
-3170 1954 l
-3174 1954 l
-3179 1954 l
-3183 1954 l
-3186 1956 l
-3188 1958 l
-S
-3188 5962 m
-3186 5965 l
-3183 5967 l
-3179 5967 l
-3174 5967 l
-3170 5967 l
-3168 5969 l
-3165 5971 l
-3161 5971 l
-3156 5971 l
-3152 5971 l
-3148 5971 l
-S
-3107 1936 m
-3110 1938 l
-S
-3110 1938 m
-3112 1940 l
-3116 1940 l
-3121 1940 l
-3125 1940 l
-3127 1943 l
-3130 1945 l
-3134 1945 l
-3139 1945 l
-3143 1945 l
-3148 1945 l
-S
-3107 5980 m
-3112 5980 l
-3116 5980 l
-3121 5980 l
-3125 5980 l
-3127 5978 l
-3130 5976 l
-3134 5976 l
-3139 5976 l
-3143 5976 l
-3145 5974 l
-3148 5971 l
-S
-3067 1932 m
-3072 1932 l
-3076 1932 l
-3081 1932 l
-3085 1932 l
-3087 1934 l
-3089 1936 l
-3094 1936 l
-3098 1936 l
-3103 1936 l
-3107 1936 l
-S
-3067 5989 m
-3072 5989 l
-3076 5989 l
-3081 5989 l
-3083 5987 l
-3085 5985 l
-3089 5985 l
-3094 5985 l
-3098 5985 l
-3103 5985 l
-3105 5983 l
-3107 5980 l
-S
-3027 1923 m
-3031 1923 l
-3036 1923 l
-3038 1925 l
-3040 1927 l
-3045 1927 l
-3049 1927 l
-3054 1927 l
-3058 1927 l
-3060 1929 l
-3063 1932 l
-3067 1932 l
-S
-3027 5998 m
-3031 5998 l
-3034 5996 l
-3036 5994 l
-3040 5994 l
-3045 5994 l
-3049 5994 l
-3054 5994 l
-3056 5992 l
-3058 5989 l
-3063 5989 l
-3067 5989 l
-S
-2987 1918 m
-2991 1918 l
-2996 1918 l
-3000 1918 l
-3005 1918 l
-3007 1920 l
-3009 1923 l
-3013 1923 l
-3018 1923 l
-3022 1923 l
-3027 1923 l
-S
-3002 6000 m
-3005 5998 l
-3009 5998 l
-3013 5998 l
-3018 5998 l
-3022 5998 l
-3027 5998 l
-S
-2987 6003 m
-2991 6003 l
-2996 6003 l
-3000 6003 l
-3002 6000 l
-S
-2946 1914 m
-2951 1914 l
-2955 1914 l
-2960 1914 l
-2964 1914 l
-2969 1914 l
-2973 1914 l
-2975 1916 l
-2978 1918 l
-2982 1918 l
-2987 1918 l
-S
-2987 6003 m
-2982 6003 l
-2978 6003 l
-2973 6003 l
-2971 6005 l
-2969 6007 l
-2964 6007 l
-2960 6007 l
-2955 6007 l
-2951 6007 l
-2946 6007 l
-S
-2906 1909 m
-2911 1909 l
-2915 1909 l
-2920 1909 l
-2924 1909 l
-2929 1909 l
-2933 1909 l
-2938 1909 l
-2942 1909 l
-2944 1911 l
-2946 1914 l
-S
-2906 6012 m
-2911 6012 l
-2915 6012 l
-2920 6012 l
-2924 6012 l
-2929 6012 l
-2933 6012 l
-2935 6009 l
-2938 6007 l
-2942 6007 l
-2946 6007 l
-S
-2866 1905 m
-2870 1905 l
-2875 1905 l
-2879 1905 l
-2884 1905 l
-2888 1905 l
-2893 1905 l
-2897 1905 l
-2902 1905 l
-2904 1907 l
-2906 1909 l
-S
-2866 6016 m
-2870 6016 l
-2875 6016 l
-2879 6016 l
-2884 6016 l
-2888 6016 l
-2893 6016 l
-2895 6014 l
-2897 6012 l
-2902 6012 l
-2906 6012 l
-S
-2826 1900 m
-2830 1900 l
-2835 1900 l
-2839 1900 l
-2844 1900 l
-2848 1900 l
-2853 1900 l
-2855 1902 l
-2857 1905 l
-2862 1905 l
-2866 1905 l
-S
-2826 6021 m
-2830 6021 l
-2835 6021 l
-2839 6021 l
-2841 6018 l
-2844 6016 l
-2848 6016 l
-2853 6016 l
-2857 6016 l
-2862 6016 l
-2866 6016 l
-S
-2826 1900 m
-2821 1900 l
-2817 1900 l
-2812 1900 l
-2808 1900 l
-2803 1900 l
-2799 1900 l
-2794 1900 l
-2790 1900 l
-2786 1900 l
-S
-2786 6021 m
-2790 6021 l
-2794 6021 l
-2799 6021 l
-2803 6021 l
-2808 6021 l
-2812 6021 l
-2817 6021 l
-2821 6021 l
-2826 6021 l
-S
-2745 1896 m
-2750 1896 l
-2754 1896 l
-2759 1896 l
-2763 1896 l
-2768 1896 l
-2772 1896 l
-2777 1896 l
-2779 1898 l
-S
-2786 1900 m
-2781 1900 l
-2779 1898 l
-S
-2745 6025 m
-2750 6025 l
-2754 6025 l
-2757 6023 l
-2759 6021 l
-2763 6021 l
-2768 6021 l
-2772 6021 l
-2777 6021 l
-2781 6021 l
-2786 6021 l
-S
-2705 1896 m
-2710 1896 l
-2714 1896 l
-2719 1896 l
-2723 1896 l
-2727 1896 l
-2732 1896 l
-2736 1896 l
-2741 1896 l
-2745 1896 l
-S
-2705 6025 m
-2710 6025 l
-2714 6025 l
-2719 6025 l
-2723 6025 l
-2727 6025 l
-2732 6025 l
-2736 6025 l
-2741 6025 l
-2745 6025 l
-S
-2665 1896 m
-2669 1896 l
-2674 1896 l
-2678 1896 l
-2683 1896 l
-2687 1896 l
-2692 1896 l
-2696 1896 l
-2701 1896 l
-2705 1896 l
-S
-2665 6025 m
-2669 6025 l
-2674 6025 l
-2678 6025 l
-2683 6025 l
-2687 6025 l
-2692 6025 l
-2696 6025 l
-2701 6025 l
-2705 6025 l
-S
-2625 1896 m
-2629 1896 l
-2634 1896 l
-2638 1896 l
-2643 1896 l
-2647 1896 l
-2651 1896 l
-2656 1896 l
-2660 1896 l
-2665 1896 l
-S
-2625 6021 m
-2629 6021 l
-2631 6023 l
-2634 6025 l
-2638 6025 l
-2643 6025 l
-2647 6025 l
-2651 6025 l
-2656 6025 l
-2660 6025 l
-2665 6025 l
-S
-2614 1898 m
-2616 1896 l
-2620 1896 l
-2625 1896 l
-S
-2584 1900 m
-2589 1900 l
-2593 1900 l
-2598 1900 l
-2602 1900 l
-2607 1900 l
-2611 1900 l
-2614 1898 l
-S
-2584 6021 m
-2589 6021 l
-2593 6021 l
-2598 6021 l
-2602 6021 l
-2607 6021 l
-2611 6021 l
-2616 6021 l
-2620 6021 l
-2625 6021 l
-S
-2584 1900 m
-2580 1900 l
-2576 1900 l
-2571 1900 l
-2567 1900 l
-2562 1900 l
-2558 1900 l
-2553 1900 l
-2549 1900 l
-2544 1900 l
-S
-2544 6016 m
-2546 6018 l
-2549 6021 l
-2553 6021 l
-2558 6021 l
-2562 6021 l
-2567 6021 l
-2571 6021 l
-2576 6021 l
-2580 6021 l
-2584 6021 l
-S
-2544 1900 m
-2540 1900 l
-2538 1902 l
-2535 1905 l
-2531 1905 l
-2526 1905 l
-2522 1905 l
-2517 1905 l
-2513 1905 l
-2508 1905 l
-2504 1905 l
-S
-2504 6016 m
-2508 6016 l
-2513 6016 l
-2517 6016 l
-2522 6016 l
-2526 6016 l
-2531 6016 l
-2535 6016 l
-2540 6016 l
-2544 6016 l
-S
-2464 1909 m
-2468 1909 l
-2473 1909 l
-2477 1909 l
-2482 1909 l
-2484 1907 l
-2486 1905 l
-2491 1905 l
-2495 1905 l
-2500 1905 l
-2504 1905 l
-S
-2464 6012 m
-2468 6012 l
-2473 6012 l
-2477 6012 l
-2482 6012 l
-2486 6012 l
-2491 6012 l
-2493 6014 l
-2495 6016 l
-2500 6016 l
-2504 6016 l
-S
-2424 1914 m
-2428 1914 l
-2433 1914 l
-2437 1914 l
-2441 1914 l
-2444 1911 l
-2446 1909 l
-2450 1909 l
-2455 1909 l
-2459 1909 l
-2464 1909 l
-S
-2424 6007 m
-2428 6007 l
-2433 6007 l
-2437 6007 l
-2441 6007 l
-2446 6007 l
-2450 6007 l
-2453 6009 l
-2455 6012 l
-2459 6012 l
-2464 6012 l
-S
-2383 1918 m
-2388 1918 l
-2392 1918 l
-2397 1918 l
-2401 1918 l
-2406 1918 l
-2410 1918 l
-2412 1916 l
-2415 1914 l
-2419 1914 l
-2424 1914 l
-S
-2383 5998 m
-2386 6000 l
-S
-2386 6000 m
-2388 6003 l
-2392 6003 l
-2397 6003 l
-2401 6003 l
-2406 6003 l
-2410 6003 l
-2415 6003 l
-2417 6005 l
-2419 6007 l
-2424 6007 l
-S
-2343 1927 m
-2348 1927 l
-2352 1927 l
-2354 1925 l
-2357 1923 l
-2361 1923 l
-2365 1923 l
-2370 1923 l
-2374 1923 l
-2379 1923 l
-2381 1920 l
-2383 1918 l
-S
-2343 5994 m
-2348 5994 l
-2352 5994 l
-2357 5994 l
-2359 5996 l
-2361 5998 l
-2365 5998 l
-2370 5998 l
-2374 5998 l
-2379 5998 l
-2383 5998 l
-S
-2303 1936 m
-2305 1934 l
-2307 1932 l
-2312 1932 l
-2316 1932 l
-2321 1932 l
-2325 1932 l
-2327 1929 l
-2330 1927 l
-2334 1927 l
-2339 1927 l
-2343 1927 l
-S
-2303 5985 m
-2305 5987 l
-2307 5989 l
-2312 5989 l
-2316 5989 l
-2321 5989 l
-2325 5989 l
-2330 5989 l
-2332 5992 l
-2334 5994 l
-2339 5994 l
-2343 5994 l
-S
-2283 1938 m
-2285 1936 l
-2290 1936 l
-2294 1936 l
-2298 1936 l
-2303 1936 l
-S
-2263 1940 m
-2267 1940 l
-2272 1940 l
-2276 1940 l
-2281 1940 l
-2283 1938 l
-S
-2263 5976 m
-2265 5978 l
-2267 5980 l
-2272 5980 l
-2276 5980 l
-2281 5980 l
-2283 5983 l
-2285 5985 l
-2290 5985 l
-2294 5985 l
-2298 5985 l
-2303 5985 l
-S
-2263 1940 m
-2260 1943 l
-2258 1945 l
-2254 1945 l
-2249 1945 l
-2245 1945 l
-2240 1945 l
-2238 1947 l
-2236 1949 l
-2231 1949 l
-2227 1949 l
-2222 1949 l
-S
-2222 5967 m
-2225 5969 l
-2227 5971 l
-2231 5971 l
-2236 5971 l
-2240 5971 l
-2243 5974 l
-2245 5976 l
-2249 5976 l
-2254 5976 l
-2258 5976 l
-2263 5976 l
-S
-2182 1963 m
-2184 1961 l
-2187 1958 l
-2191 1958 l
-2196 1958 l
-2200 1958 l
-2202 1956 l
-2205 1954 l
-2209 1954 l
-2214 1954 l
-2218 1954 l
-2220 1952 l
-2222 1949 l
-S
-2182 5958 m
-2184 5960 l
-S
-2184 5960 m
-2187 5962 l
-2191 5962 l
-2196 5962 l
-2200 5962 l
-2202 5965 l
-2205 5967 l
-2209 5967 l
-2214 5967 l
-2218 5967 l
-2222 5967 l
-S
-2142 1972 m
-2147 1972 l
-2149 1969 l
-2151 1967 l
-2155 1967 l
-2160 1967 l
-2164 1967 l
-2167 1965 l
-2169 1963 l
-2173 1963 l
-2178 1963 l
-2182 1963 l
-S
-2142 5949 m
-2147 5949 l
-2151 5949 l
-2153 5951 l
-2155 5954 l
-2160 5954 l
-2164 5954 l
-2169 5954 l
-2171 5956 l
-2173 5958 l
-2178 5958 l
-2182 5958 l
-S
-2117 1978 m
-2120 1976 l
-2124 1976 l
-2129 1976 l
-2133 1976 l
-2135 1974 l
-2138 1972 l
-2142 1972 l
-S
-2102 1985 m
-2104 1983 l
-2106 1981 l
-2111 1981 l
-2115 1981 l
-2117 1978 l
-S
-2102 5936 m
-2104 5938 l
-2106 5940 l
-2111 5940 l
-2115 5940 l
-2120 5940 l
-2122 5942 l
-2124 5945 l
-2129 5945 l
-2133 5945 l
-2135 5947 l
-2138 5949 l
-2142 5949 l
-S
-2062 1994 m
-2066 1994 l
-2071 1994 l
-2073 1992 l
-2075 1990 l
-2079 1990 l
-2084 1990 l
-2086 1987 l
-2088 1985 l
-2093 1985 l
-2097 1985 l
-2102 1985 l
-S
-2062 5922 m
-2064 5925 l
-2066 5927 l
-2071 5927 l
-2075 5927 l
-2077 5929 l
-2079 5931 l
-2084 5931 l
-2088 5931 l
-2091 5933 l
-2093 5936 l
-2097 5936 l
-2102 5936 l
-S
-2021 2007 m
-2026 2007 l
-2030 2007 l
-2033 2005 l
-2035 2003 l
-2039 2003 l
-2044 2003 l
-2046 2001 l
-2048 1999 l
-2053 1999 l
-2057 1999 l
-2059 1996 l
-2062 1994 l
-S
-2021 5909 m
-2024 5911 l
-2026 5913 l
-2030 5913 l
-2035 5913 l
-2037 5916 l
-2039 5918 l
-2044 5918 l
-2048 5918 l
-2050 5920 l
-S
-2062 5922 m
-2057 5922 l
-2053 5922 l
-2050 5920 l
-S
-1992 2019 m
-1995 2016 l
-1999 2016 l
-2003 2016 l
-2006 2014 l
-2008 2012 l
-2012 2012 l
-2017 2012 l
-2019 2010 l
-2021 2007 l
-S
-1981 2025 m
-1983 2023 l
-1986 2021 l
-1990 2021 l
-1992 2019 l
-S
-1981 5895 m
-1983 5898 l
-1986 5900 l
-1990 5900 l
-1995 5900 l
-1997 5902 l
-1999 5904 l
-2003 5904 l
-2008 5904 l
-2010 5907 l
-2012 5909 l
-2017 5909 l
-2021 5909 l
-S
-1941 2039 m
-1945 2039 l
-1948 2037 l
-1950 2034 l
-1954 2034 l
-1957 2032 l
-1959 2030 l
-1963 2030 l
-1968 2030 l
-1970 2028 l
-1972 2025 l
-1977 2025 l
-1981 2025 l
-S
-1941 5882 m
-1945 5882 l
-1948 5884 l
-1950 5887 l
-1954 5887 l
-1959 5887 l
-1961 5889 l
-1963 5891 l
-1968 5891 l
-1970 5893 l
-1972 5895 l
-1977 5895 l
-1981 5895 l
-S
-1901 2057 m
-1903 2054 l
-1905 2052 l
-1910 2052 l
-1912 2050 l
-1914 2048 l
-1919 2048 l
-1923 2048 l
-1925 2045 l
-1928 2043 l
-1932 2043 l
-1934 2041 l
-1936 2039 l
-1941 2039 l
-S
-1901 5864 m
-1903 5866 l
-1905 5869 l
-1910 5869 l
-1914 5869 l
-1916 5871 l
-1919 5873 l
-1923 5873 l
-1925 5875 l
-1928 5878 l
-1932 5878 l
-1936 5878 l
-1939 5880 l
-S
-1941 5882 m
-1939 5880 l
-S
-1890 2059 m
-1892 2057 l
-1896 2057 l
-1901 2057 l
-S
-1860 2075 m
-1863 2072 l
-1865 2070 l
-1869 2070 l
-1872 2068 l
-1874 2066 l
-1878 2066 l
-1881 2063 l
-1883 2061 l
-1887 2061 l
-1890 2059 l
-S
-1860 5846 m
-1863 5849 l
-1865 5851 l
-1869 5851 l
-1872 5853 l
-1874 5855 l
-1878 5855 l
-1881 5857 l
-1883 5860 l
-1887 5860 l
-1892 5860 l
-1894 5862 l
-1896 5864 l
-1901 5864 l
-S
-1820 2092 m
-1823 2090 l
-1825 2088 l
-1829 2088 l
-1831 2086 l
-1834 2083 l
-1838 2083 l
-1840 2081 l
-1843 2079 l
-1847 2079 l
-1849 2077 l
-1852 2075 l
-1856 2075 l
-1860 2075 l
-S
-1820 5828 m
-1823 5831 l
-1825 5833 l
-1829 5833 l
-1831 5835 l
-1834 5837 l
-1838 5837 l
-1840 5840 l
-S
-1840 5840 m
-1843 5842 l
-1847 5842 l
-1852 5842 l
-1854 5844 l
-1856 5846 l
-1860 5846 l
-S
-1800 2099 m
-1802 2097 l
-1807 2097 l
-1811 2097 l
-1814 2095 l
-1816 2092 l
-1820 2092 l
-S
-1780 2110 m
-1782 2108 l
-1785 2106 l
-1789 2106 l
-1791 2104 l
-1793 2101 l
-1798 2101 l
-1800 2099 l
-S
-1780 5811 m
-1785 5811 l
-1787 5813 l
-1789 5815 l
-1793 5815 l
-1796 5817 l
-1798 5819 l
-1802 5819 l
-1805 5822 l
-1807 5824 l
-1811 5824 l
-1814 5826 l
-1816 5828 l
-1820 5828 l
-S
-1740 2128 m
-1744 2128 l
-1747 2126 l
-1749 2124 l
-1753 2124 l
-1755 2121 l
-1758 2119 l
-1762 2119 l
-1764 2117 l
-1767 2115 l
-1771 2115 l
-1773 2112 l
-1776 2110 l
-1780 2110 l
-S
-1740 5788 m
-1742 5790 l
-1744 5793 l
-1749 5793 l
-1751 5795 l
-1753 5797 l
-1758 5797 l
-1760 5799 l
-S
-1760 5799 m
-1762 5802 l
-1767 5802 l
-1769 5804 l
-1771 5806 l
-1776 5806 l
-1778 5808 l
-1780 5811 l
-S
-1724 2139 m
-1726 2137 l
-1731 2137 l
-1733 2135 l
-1735 2133 l
-1738 2130 l
-1740 2128 l
-S
-1700 2150 m
-1704 2150 l
-1706 2148 l
-1709 2146 l
-1713 2146 l
-1715 2144 l
-1717 2142 l
-1722 2142 l
-1724 2139 l
-S
-1700 5770 m
-1704 5770 l
-1706 5773 l
-1709 5775 l
-1713 5775 l
-1715 5777 l
-1717 5779 l
-1722 5779 l
-1724 5781 l
-1726 5784 l
-1731 5784 l
-1733 5786 l
-1735 5788 l
-1740 5788 l
-S
-1659 2173 m
-1664 2173 l
-1666 2171 l
-1668 2168 l
-1673 2168 l
-1675 2166 l
-1677 2164 l
-1682 2164 l
-1684 2162 l
-1686 2159 l
-1688 2157 l
-1691 2155 l
-1695 2155 l
-1697 2153 l
-1700 2150 l
-S
-1659 5744 m
-1662 5746 l
-1664 5748 l
-1666 5750 l
-1668 5752 l
-1673 5752 l
-1675 5755 l
-1677 5757 l
-1682 5757 l
-1684 5759 l
-S
-1684 5759 m
-1686 5761 l
-1691 5761 l
-1693 5764 l
-1695 5766 l
-1697 5768 l
-1700 5770 l
-S
-1653 2180 m
-1655 2177 l
-1657 2175 l
-1659 2173 l
-S
-1619 2200 m
-1621 2197 l
-1624 2195 l
-1628 2195 l
-1630 2193 l
-1633 2191 l
-1635 2188 l
-1637 2186 l
-1642 2186 l
-1644 2184 l
-1646 2182 l
-1650 2182 l
-1653 2180 l
-S
-1619 5721 m
-1621 5723 l
-1624 5726 l
-1628 5726 l
-1630 5728 l
-1633 5730 l
-1637 5730 l
-1639 5732 l
-1642 5735 l
-1644 5737 l
-1646 5739 l
-1650 5739 l
-1653 5741 l
-1655 5744 l
-1659 5744 l
-S
-1586 2220 m
-1588 2218 l
-1590 2215 l
-1592 2213 l
-1597 2213 l
-1599 2211 l
-1601 2209 l
-1606 2209 l
-1608 2206 l
-1610 2204 l
-1612 2202 l
-1615 2200 l
-1619 2200 l
-S
-1579 2222 m
-1583 2222 l
-1586 2220 l
-S
-1579 5694 m
-1581 5697 l
-1583 5699 l
-1586 5701 l
-1588 5703 l
-1592 5703 l
-1595 5706 l
-1597 5708 l
-1599 5710 l
-1601 5712 l
-1606 5712 l
-1608 5714 l
-1610 5717 l
-1615 5717 l
-1617 5719 l
-S
-1619 5721 m
-1617 5719 l
-S
-1579 2222 m
-1577 2224 l
-1574 2226 l
-1572 2229 l
-1570 2231 l
-1566 2231 l
-1563 2233 l
-1561 2235 l
-1559 2238 l
-1557 2240 l
-1552 2240 l
-1550 2242 l
-1548 2244 l
-1545 2247 l
-1543 2249 l
-1539 2249 l
-S
-1539 5672 m
-1543 5672 l
-1545 5674 l
-1548 5676 l
-1550 5679 l
-S
-1550 5679 m
-1552 5681 l
-1557 5681 l
-1559 5683 l
-1561 5685 l
-1563 5688 l
-1566 5690 l
-1570 5690 l
-1572 5692 l
-1574 5694 l
-1579 5694 l
-S
-1523 2260 m
-1525 2258 l
-1530 2258 l
-1532 2256 l
-1534 2253 l
-1536 2251 l
-1539 2249 l
-S
-1499 2280 m
-1501 2278 l
-1503 2276 l
-1505 2273 l
-1507 2271 l
-1510 2269 l
-1512 2267 l
-1516 2267 l
-1519 2264 l
-1521 2262 l
-1523 2260 l
-S
-1499 5641 m
-1501 5643 l
-1503 5645 l
-1505 5647 l
-1507 5650 l
-1512 5650 l
-1514 5652 l
-1516 5654 l
-1519 5656 l
-1521 5659 l
-1525 5659 l
-1528 5661 l
-1530 5663 l
-1532 5665 l
-1534 5668 l
-1536 5670 l
-1539 5672 l
-S
-1469 2300 m
-1472 2298 l
-1474 2296 l
-1476 2293 l
-1478 2291 l
-1481 2289 l
-1485 2289 l
-1487 2287 l
-1490 2285 l
-1492 2282 l
-1494 2280 l
-1499 2280 l
-S
-1458 2307 m
-1461 2305 l
-1463 2302 l
-1467 2302 l
-1469 2300 l
-S
-1458 5614 m
-1463 5614 l
-1465 5616 l
-1467 5618 l
-1469 5621 l
-1472 5623 l
-1474 5625 l
-1476 5627 l
-1481 5627 l
-1483 5630 l
-1485 5632 l
-1487 5634 l
-1490 5636 l
-1492 5638 l
-S
-1499 5641 m
-1494 5641 l
-1492 5638 l
-S
-1418 2338 m
-1420 2336 l
-1423 2334 l
-1425 2331 l
-1427 2329 l
-1431 2329 l
-1434 2327 l
-1436 2325 l
-1438 2323 l
-1440 2320 l
-1443 2318 l
-1445 2316 l
-1449 2316 l
-1452 2314 l
-1454 2311 l
-1456 2309 l
-1458 2307 l
-S
-1418 5583 m
-1420 5585 l
-1423 5587 l
-1427 5587 l
-1429 5589 l
-1431 5592 l
-1434 5594 l
-1436 5596 l
-1438 5598 l
-S
-1438 5598 m
-1440 5601 l
-1445 5601 l
-1447 5603 l
-1449 5605 l
-1452 5607 l
-1454 5609 l
-1456 5612 l
-1458 5614 l
-S
-1416 2340 m
-1418 2338 l
-S
-1378 2369 m
-1380 2367 l
-1382 2365 l
-1387 2365 l
-1389 2363 l
-1391 2361 l
-1393 2358 l
-1396 2356 l
-1398 2354 l
-1400 2352 l
-1402 2349 l
-1405 2347 l
-1409 2347 l
-1411 2345 l
-1414 2343 l
-1416 2340 l
-S
-1378 5551 m
-1382 5551 l
-1385 5554 l
-1387 5556 l
-1389 5558 l
-S
-1389 5558 m
-1391 5560 l
-1393 5563 l
-1396 5565 l
-1398 5567 l
-1400 5569 l
-1405 5569 l
-1407 5571 l
-1409 5574 l
-1411 5576 l
-1414 5578 l
-1416 5580 l
-1418 5583 l
-S
-1367 2381 m
-1369 2378 l
-1371 2376 l
-1373 2374 l
-1376 2372 l
-1378 2369 l
-S
-1338 2405 m
-1340 2403 l
-1342 2401 l
-1344 2399 l
-1347 2396 l
-1349 2394 l
-1351 2392 l
-1353 2390 l
-1355 2387 l
-1360 2387 l
-1362 2385 l
-1364 2383 l
-1367 2381 l
-S
-1338 5516 m
-1340 5518 l
-S
-1340 5518 m
-1342 5520 l
-1344 5522 l
-1347 5525 l
-1351 5525 l
-1353 5527 l
-1355 5529 l
-1358 5531 l
-1360 5533 l
-1362 5536 l
-1364 5538 l
-1367 5540 l
-1369 5542 l
-1371 5545 l
-1373 5547 l
-1376 5549 l
-1378 5551 l
-S
-1318 2421 m
-1320 2419 l
-1324 2419 l
-1326 2416 l
-1329 2414 l
-1331 2412 l
-1333 2410 l
-1335 2407 l
-1338 2405 l
-S
-1297 2441 m
-1300 2439 l
-1302 2436 l
-1304 2434 l
-1306 2432 l
-1309 2430 l
-1311 2428 l
-1313 2425 l
-1315 2423 l
-1318 2421 l
-S
-1297 5480 m
-1300 5482 l
-1302 5484 l
-1304 5487 l
-1306 5489 l
-1309 5491 l
-1311 5493 l
-1315 5493 l
-1318 5495 l
-1320 5498 l
-1322 5500 l
-1324 5502 l
-1326 5504 l
-1329 5507 l
-1331 5509 l
-1333 5511 l
-1335 5513 l
-1338 5516 l
-S
-1277 2461 m
-1280 2459 l
-1282 2457 l
-1284 2454 l
-1286 2452 l
-1288 2450 l
-1291 2448 l
-1293 2445 l
-1295 2443 l
-1297 2441 l
-S
-1257 2481 m
-1259 2479 l
-1262 2477 l
-1264 2474 l
-1266 2472 l
-1268 2470 l
-1271 2468 l
-1273 2466 l
-1275 2463 l
-1277 2461 l
-S
-1257 5440 m
-1259 5442 l
-1262 5444 l
-1264 5446 l
-1266 5449 l
-1268 5451 l
-1271 5453 l
-1273 5455 l
-1275 5457 l
-1277 5460 l
-1280 5462 l
-1282 5464 l
-1284 5466 l
-1286 5469 l
-1288 5471 l
-1291 5473 l
-1293 5475 l
-1295 5478 l
-S
-1297 5480 m
-1295 5478 l
-S
-1233 2501 m
-1235 2499 l
-1237 2497 l
-1239 2495 l
-1242 2492 l
-1244 2490 l
-1246 2488 l
-1248 2486 l
-1250 2483 l
-1253 2481 l
-1257 2481 l
-S
-1217 2517 m
-1219 2515 l
-1221 2512 l
-1224 2510 l
-1226 2508 l
-1228 2506 l
-1230 2504 l
-1233 2501 l
-S
-1217 5399 m
-1219 5402 l
-1221 5404 l
-1224 5406 l
-1226 5408 l
-1228 5411 l
-1230 5413 l
-1233 5415 l
-1235 5417 l
-1237 5420 l
-1239 5422 l
-1242 5424 l
-1244 5426 l
-1246 5428 l
-1248 5431 l
-1250 5433 l
-1253 5435 l
-1255 5437 l
-S
-1257 5440 m
-1255 5437 l
-S
-1197 2542 m
-1199 2539 l
-1201 2537 l
-1204 2535 l
-1206 2533 l
-1208 2530 l
-1210 2528 l
-1212 2526 l
-1215 2524 l
-1215 2519 l
-1217 2517 l
-S
-1177 2562 m
-1179 2559 l
-1181 2557 l
-1183 2555 l
-1186 2553 l
-1188 2550 l
-1190 2548 l
-1192 2546 l
-1195 2544 l
-1197 2542 l
-S
-1177 5359 m
-1179 5361 l
-1181 5364 l
-1183 5366 l
-1186 5368 l
-1188 5370 l
-1190 5373 l
-1192 5375 l
-1195 5377 l
-1197 5379 l
-1199 5382 l
-1201 5384 l
-1204 5386 l
-1206 5388 l
-1208 5390 l
-1210 5393 l
-1212 5395 l
-1215 5397 l
-S
-1217 5399 m
-1215 5397 l
-S
-1157 2582 m
-1159 2579 l
-1161 2577 l
-1163 2575 l
-1166 2573 l
-1168 2571 l
-1170 2568 l
-1172 2566 l
-1175 2564 l
-1177 2562 l
-S
-1137 2606 m
-1139 2604 l
-1141 2602 l
-1143 2600 l
-1145 2597 l
-1148 2595 l
-1150 2593 l
-1152 2591 l
-1152 2586 l
-1154 2584 l
-1157 2582 l
-S
-1137 5314 m
-1139 5317 l
-S
-1139 5317 m
-1141 5319 l
-1143 5321 l
-1145 5323 l
-1148 5326 l
-1150 5328 l
-1152 5330 l
-1154 5332 l
-1157 5335 l
-1159 5337 l
-1161 5339 l
-1161 5344 l
-1163 5346 l
-1166 5348 l
-1168 5350 l
-1170 5352 l
-1172 5355 l
-1175 5357 l
-S
-1177 5359 m
-1175 5357 l
-S
-1125 2622 m
-1125 2617 l
-1128 2615 l
-1130 2613 l
-1132 2611 l
-1134 2609 l
-1137 2606 l
-S
-1096 2655 m
-1099 2653 l
-1099 2649 l
-1101 2647 l
-1103 2644 l
-1105 2642 l
-1107 2640 l
-1110 2638 l
-1112 2635 l
-1114 2633 l
-1116 2631 l
-1119 2629 l
-1121 2626 l
-1123 2624 l
-1125 2622 l
-S
-1096 5265 m
-1099 5268 l
-1101 5270 l
-1103 5272 l
-1103 5277 l
-S
-1103 5277 m
-1105 5279 l
-1107 5281 l
-1110 5283 l
-1112 5285 l
-1114 5288 l
-1116 5290 l
-1119 5292 l
-1121 5294 l
-1123 5297 l
-1125 5299 l
-1128 5301 l
-1130 5303 l
-1130 5308 l
-1132 5310 l
-1134 5312 l
-1137 5314 l
-S
-1090 2662 m
-1092 2660 l
-1094 2658 l
-1096 2655 l
-S
-1090 2662 m
-1087 2664 l
-1085 2667 l
-1083 2669 l
-1081 2671 l
-1081 2676 l
-1078 2678 l
-1076 2680 l
-1074 2682 l
-1072 2685 l
-1069 2687 l
-1067 2689 l
-1065 2691 l
-1063 2693 l
-1063 2698 l
-1061 2700 l
-1058 2702 l
-S
-1056 2705 m
-1058 2702 l
-S
-1056 5216 m
-1058 5218 l
-1061 5221 l
-1063 5223 l
-1065 5225 l
-1067 5227 l
-1067 5232 l
-1069 5234 l
-1072 5236 l
-S
-1072 5236 m
-1074 5239 l
-1076 5241 l
-1078 5243 l
-1081 5245 l
-1083 5247 l
-1085 5250 l
-1085 5254 l
-1087 5256 l
-1090 5259 l
-1092 5261 l
-1094 5263 l
-1096 5265 l
-S
-1056 2705 m
-1054 2707 l
-1052 2709 l
-1049 2711 l
-1049 2716 l
-1047 2718 l
-1045 2720 l
-1043 2723 l
-1040 2725 l
-1038 2727 l
-1036 2729 l
-1036 2734 l
-1034 2736 l
-1031 2738 l
-1029 2740 l
-1027 2743 l
-S
-1016 2758 m
-1018 2756 l
-1020 2754 l
-1023 2752 l
-1023 2747 l
-1025 2745 l
-1027 2743 l
-S
-1016 5163 m
-1018 5165 l
-1020 5167 l
-1023 5169 l
-1025 5171 l
-1027 5174 l
-1027 5178 l
-1029 5180 l
-1031 5183 l
-1034 5185 l
-1036 5187 l
-1038 5189 l
-1040 5192 l
-1040 5196 l
-S
-1040 5196 m
-1043 5198 l
-1045 5201 l
-1047 5203 l
-1049 5205 l
-1052 5207 l
-1054 5209 l
-1054 5214 l
-1056 5216 l
-S
-1000 2783 m
-1000 2778 l
-1002 2776 l
-1005 2774 l
-1007 2772 l
-1009 2769 l
-1011 2767 l
-1014 2765 l
-1014 2760 l
-1016 2758 l
-S
-976 2816 m
-978 2814 l
-980 2812 l
-982 2810 l
-982 2805 l
-985 2803 l
-987 2801 l
-989 2798 l
-991 2796 l
-991 2792 l
-994 2790 l
-996 2787 l
-998 2785 l
-1000 2783 l
-S
-976 5104 m
-978 5107 l
-980 5109 l
-982 5111 l
-982 5116 l
-S
-982 5116 m
-985 5118 l
-987 5120 l
-989 5122 l
-991 5125 l
-994 5127 l
-996 5129 l
-996 5133 l
-998 5136 l
-1000 5138 l
-1002 5140 l
-1005 5142 l
-1005 5147 l
-1007 5149 l
-1009 5151 l
-1011 5154 l
-1014 5156 l
-S
-1014 5156 m
-1014 5160 l
-1016 5163 l
-S
-973 2823 m
-973 2819 l
-976 2816 l
-S
-973 2823 m
-971 2825 l
-969 2828 l
-967 2830 l
-964 2832 l
-964 2836 l
-962 2839 l
-960 2841 l
-958 2843 l
-956 2845 l
-956 2850 l
-953 2852 l
-951 2854 l
-951 2859 l
-949 2861 l
-947 2863 l
-S
-935 2879 m
-938 2877 l
-940 2874 l
-942 2872 l
-942 2868 l
-944 2866 l
-947 2863 l
-S
-935 5037 m
-938 5040 l
-938 5044 l
-940 5046 l
-942 5049 l
-942 5053 l
-944 5055 l
-947 5058 l
-949 5060 l
-951 5062 l
-951 5066 l
-953 5069 l
-956 5071 l
-958 5073 l
-960 5075 l
-S
-960 5075 m
-960 5080 l
-962 5082 l
-964 5084 l
-964 5089 l
-967 5091 l
-969 5093 l
-971 5096 l
-973 5098 l
-973 5102 l
-976 5104 l
-S
-920 2903 m
-922 2901 l
-924 2899 l
-926 2897 l
-929 2895 l
-929 2890 l
-931 2888 l
-933 2886 l
-933 2881 l
-935 2879 l
-S
-920 2903 m
-920 2908 l
-918 2910 l
-915 2912 l
-915 2917 l
-913 2919 l
-911 2921 l
-909 2924 l
-906 2926 l
-906 2930 l
-904 2933 l
-902 2935 l
-902 2939 l
-900 2941 l
-897 2944 l
-S
-895 2950 m
-897 2948 l
-897 2944 l
-S
-895 4970 m
-897 4973 l
-897 4977 l
-900 4979 l
-902 4982 l
-902 4986 l
-904 4988 l
-906 4990 l
-909 4993 l
-911 4995 l
-S
-911 4995 m
-911 4999 l
-913 5002 l
-915 5004 l
-915 5008 l
-918 5011 l
-920 5013 l
-922 5015 l
-924 5017 l
-924 5022 l
-926 5024 l
-929 5026 l
-929 5031 l
-931 5033 l
-933 5035 l
-S
-935 5037 m
-933 5035 l
-S
-875 2984 m
-877 2982 l
-880 2979 l
-880 2975 l
-882 2973 l
-884 2971 l
-884 2966 l
-886 2964 l
-888 2962 l
-888 2957 l
-891 2955 l
-893 2953 l
-895 2950 l
-S
-875 2984 m
-875 2988 l
-873 2991 l
-871 2993 l
-871 2997 l
-868 3000 l
-866 3002 l
-866 3006 l
-864 3009 l
-862 3011 l
-862 3015 l
-859 3017 l
-857 3020 l
-857 3024 l
-S
-855 3026 m
-857 3024 l
-S
-855 4894 m
-857 4897 l
-857 4901 l
-859 4903 l
-862 4906 l
-862 4910 l
-864 4912 l
-866 4915 l
-S
-866 4915 m
-866 4919 l
-868 4921 l
-871 4923 l
-871 4928 l
-873 4930 l
-875 4932 l
-875 4937 l
-877 4939 l
-880 4941 l
-880 4946 l
-882 4948 l
-884 4950 l
-884 4955 l
-S
-884 4955 m
-886 4957 l
-888 4959 l
-891 4961 l
-893 4964 l
-893 4968 l
-895 4970 l
-S
-855 3026 m
-853 3029 l
-851 3031 l
-848 3033 l
-848 3038 l
-846 3040 l
-844 3042 l
-844 3047 l
-844 3051 l
-842 3053 l
-839 3055 l
-839 3060 l
-837 3062 l
-835 3064 l
-S
-835 3064 m
-835 3069 l
-833 3071 l
-830 3073 l
-830 3078 l
-828 3080 l
-826 3082 l
-826 3087 l
-824 3089 l
-821 3091 l
-821 3096 l
-819 3098 l
-817 3100 l
-817 3105 l
-S
-815 3107 m
-817 3105 l
-S
-815 4814 m
-817 4816 l
-817 4821 l
-819 4823 l
-821 4825 l
-821 4830 l
-824 4832 l
-826 4834 l
-S
-826 4834 m
-826 4839 l
-828 4841 l
-830 4843 l
-830 4847 l
-833 4850 l
-835 4852 l
-835 4856 l
-837 4859 l
-839 4861 l
-839 4865 l
-842 4868 l
-844 4870 l
-844 4874 l
-S
-844 4874 m
-846 4877 l
-848 4879 l
-848 4883 l
-851 4885 l
-853 4888 l
-853 4892 l
-855 4894 l
-S
-815 3107 m
-813 3109 l
-813 3114 l
-810 3116 l
-808 3118 l
-808 3122 l
-808 3127 l
-806 3129 l
-804 3131 l
-804 3136 l
-801 3138 l
-799 3140 l
-799 3145 l
-S
-799 3145 m
-797 3147 l
-795 3149 l
-795 3154 l
-795 3158 l
-792 3160 l
-790 3163 l
-790 3167 l
-788 3169 l
-786 3172 l
-786 3176 l
-786 3181 l
-783 3183 l
-781 3185 l
-S
-775 3201 m
-777 3198 l
-777 3194 l
-779 3192 l
-781 3190 l
-781 3185 l
-S
-775 4716 m
-777 4718 l
-777 4722 l
-777 4727 l
-779 4729 l
-781 4731 l
-781 4736 l
-783 4738 l
-786 4740 l
-786 4745 l
-786 4749 l
-788 4751 l
-790 4754 l
-S
-790 4754 m
-790 4758 l
-792 4760 l
-795 4763 l
-795 4767 l
-795 4772 l
-797 4774 l
-799 4776 l
-799 4780 l
-801 4783 l
-804 4785 l
-804 4789 l
-806 4792 l
-808 4794 l
-S
-808 4794 m
-808 4798 l
-810 4801 l
-813 4803 l
-813 4807 l
-813 4812 l
-815 4814 l
-S
-768 3225 m
-768 3221 l
-768 3216 l
-770 3214 l
-772 3212 l
-772 3207 l
-772 3203 l
-775 3201 l
-S
-768 3225 m
-766 3227 l
-763 3230 l
-763 3234 l
-761 3236 l
-759 3239 l
-759 3243 l
-759 3248 l
-757 3250 l
-754 3252 l
-754 3257 l
-754 3261 l
-752 3263 l
-750 3265 l
-S
-750 3265 m
-750 3270 l
-750 3274 l
-748 3277 l
-745 3279 l
-745 3283 l
-743 3286 l
-741 3288 l
-741 3292 l
-741 3297 l
-739 3299 l
-737 3301 l
-737 3306 l
-S
-734 3312 m
-737 3310 l
-737 3306 l
-S
-734 4604 m
-737 4606 l
-737 4611 l
-737 4615 l
-739 4617 l
-741 4620 l
-741 4624 l
-741 4629 l
-743 4631 l
-745 4633 l
-S
-745 4633 m
-745 4637 l
-745 4642 l
-748 4644 l
-750 4646 l
-750 4651 l
-750 4655 l
-752 4658 l
-754 4660 l
-754 4664 l
-754 4669 l
-757 4671 l
-759 4673 l
-S
-759 4673 m
-759 4678 l
-759 4682 l
-761 4684 l
-763 4687 l
-763 4691 l
-766 4693 l
-768 4696 l
-768 4700 l
-768 4704 l
-770 4707 l
-772 4709 l
-772 4713 l
-S
-775 4716 m
-772 4713 l
-S
-723 3346 m
-725 3344 l
-728 3341 l
-728 3337 l
-728 3333 l
-728 3328 l
-730 3326 l
-732 3324 l
-732 3319 l
-732 3315 l
-734 3312 l
-S
-723 3346 m
-723 3350 l
-723 3355 l
-721 3357 l
-719 3359 l
-719 3364 l
-719 3368 l
-716 3371 l
-714 3373 l
-714 3377 l
-714 3382 l
-714 3386 l
-S
-714 3386 m
-712 3388 l
-710 3391 l
-710 3395 l
-710 3400 l
-708 3402 l
-705 3404 l
-705 3408 l
-705 3413 l
-705 3417 l
-703 3420 l
-701 3422 l
-701 3426 l
-S
-694 3451 m
-696 3449 l
-696 3444 l
-696 3440 l
-696 3435 l
-699 3433 l
-701 3431 l
-701 3426 l
-S
-694 4470 m
-696 4472 l
-S
-696 4472 m
-696 4477 l
-696 4481 l
-699 4483 l
-701 4486 l
-701 4490 l
-701 4494 l
-701 4499 l
-703 4501 l
-705 4503 l
-705 4508 l
-705 4512 l
-S
-705 4512 m
-705 4517 l
-708 4519 l
-710 4521 l
-710 4526 l
-710 4530 l
-712 4532 l
-714 4535 l
-714 4539 l
-714 4544 l
-714 4548 l
-716 4550 l
-719 4553 l
-S
-719 4553 m
-719 4557 l
-719 4561 l
-721 4564 l
-723 4566 l
-723 4570 l
-723 4575 l
-725 4577 l
-728 4579 l
-728 4584 l
-728 4588 l
-730 4591 l
-732 4593 l
-S
-732 4593 m
-732 4597 l
-732 4602 l
-734 4604 l
-S
-692 3467 m
-692 3462 l
-692 3458 l
-692 3453 l
-694 3451 l
-S
-692 3467 m
-690 3469 l
-687 3471 l
-687 3476 l
-687 3480 l
-687 3484 l
-685 3487 l
-683 3489 l
-683 3493 l
-683 3498 l
-683 3502 l
-683 3507 l
-S
-683 3507 m
-681 3509 l
-678 3511 l
-678 3516 l
-678 3520 l
-678 3525 l
-676 3527 l
-674 3529 l
-674 3534 l
-674 3538 l
-674 3543 l
-674 3547 l
-S
-674 3547 m
-672 3549 l
-670 3551 l
-670 3556 l
-670 3560 l
-670 3565 l
-670 3569 l
-667 3572 l
-665 3574 l
-665 3578 l
-665 3583 l
-665 3587 l
-S
-665 3587 m
-665 3592 l
-665 3596 l
-663 3598 l
-661 3601 l
-661 3605 l
-661 3610 l
-661 3614 l
-661 3619 l
-658 3621 l
-656 3623 l
-656 3627 l
-S
-654 3652 m
-656 3650 l
-656 3645 l
-656 3641 l
-656 3636 l
-656 3632 l
-656 3627 l
-S
-654 4269 m
-656 4271 l
-S
-656 4271 m
-656 4275 l
-656 4280 l
-656 4284 l
-656 4289 l
-656 4293 l
-658 4296 l
-661 4298 l
-661 4302 l
-661 4307 l
-661 4311 l
-S
-661 4311 m
-661 4316 l
-661 4320 l
-663 4322 l
-665 4325 l
-665 4329 l
-665 4334 l
-665 4338 l
-665 4342 l
-665 4347 l
-667 4349 l
-670 4351 l
-S
-670 4351 m
-670 4356 l
-670 4360 l
-670 4365 l
-670 4369 l
-672 4372 l
-674 4374 l
-674 4378 l
-674 4383 l
-674 4387 l
-676 4389 l
-678 4392 l
-S
-678 4392 m
-678 4396 l
-678 4401 l
-678 4405 l
-678 4410 l
-681 4412 l
-683 4414 l
-683 4418 l
-683 4423 l
-683 4427 l
-685 4430 l
-687 4432 l
-S
-687 4432 m
-687 4436 l
-687 4441 l
-687 4445 l
-687 4450 l
-690 4452 l
-692 4454 l
-692 4459 l
-692 4463 l
-692 4468 l
-694 4470 l
-S
-652 3668 m
-652 3663 l
-652 3659 l
-652 3654 l
-654 3652 l
-S
-652 3668 m
-652 3672 l
-652 3677 l
-652 3681 l
-649 3683 l
-647 3686 l
-647 3690 l
-647 3694 l
-647 3699 l
-647 3703 l
-647 3708 l
-S
-647 3708 m
-647 3712 l
-647 3717 l
-645 3719 l
-643 3721 l
-643 3726 l
-643 3730 l
-643 3735 l
-643 3739 l
-643 3744 l
-643 3748 l
-S
-643 3748 m
-643 3753 l
-643 3757 l
-640 3759 l
-638 3762 l
-638 3766 l
-638 3770 l
-638 3775 l
-638 3779 l
-638 3784 l
-638 3788 l
-S
-638 3788 m
-638 3793 l
-638 3797 l
-638 3802 l
-638 3806 l
-638 3811 l
-636 3813 l
-634 3815 l
-634 3820 l
-634 3824 l
-634 3829 l
-S
-634 3829 m
-634 3833 l
-634 3838 l
-634 3842 l
-634 3846 l
-634 3851 l
-634 3855 l
-634 3860 l
-634 3864 l
-634 3869 l
-S
-634 3869 m
-634 3873 l
-634 3878 l
-634 3882 l
-634 3887 l
-634 3891 l
-634 3896 l
-632 3898 l
-629 3900 l
-629 3905 l
-629 3909 l
-S
-629 3909 m
-629 3913 l
-629 3918 l
-629 3922 l
-629 3927 l
-629 3931 l
-629 3936 l
-629 3940 l
-629 3945 l
-629 3949 l
-S
-629 3949 m
-629 3954 l
-629 3958 l
-629 3963 l
-629 3967 l
-629 3972 l
-629 3976 l
-629 3981 l
-629 3985 l
-629 3989 l
-S
-629 3989 m
-629 3994 l
-629 3998 l
-629 4003 l
-629 4007 l
-629 4012 l
-629 4016 l
-629 4021 l
-632 4023 l
-634 4025 l
-634 4030 l
-S
-634 4030 m
-634 4034 l
-634 4039 l
-634 4043 l
-634 4048 l
-634 4052 l
-634 4056 l
-634 4061 l
-634 4065 l
-634 4070 l
-S
-634 4070 m
-634 4074 l
-634 4079 l
-634 4083 l
-634 4088 l
-634 4092 l
-634 4097 l
-634 4101 l
-634 4106 l
-636 4108 l
-638 4110 l
-S
-638 4110 m
-638 4115 l
-638 4119 l
-638 4124 l
-638 4128 l
-638 4132 l
-638 4137 l
-638 4141 l
-638 4146 l
-638 4150 l
-S
-638 4150 m
-638 4155 l
-638 4159 l
-640 4162 l
-643 4164 l
-643 4168 l
-643 4173 l
-643 4177 l
-643 4182 l
-643 4186 l
-643 4191 l
-S
-643 4191 m
-643 4195 l
-643 4199 l
-645 4202 l
-647 4204 l
-647 4208 l
-647 4213 l
-647 4217 l
-647 4222 l
-647 4226 l
-647 4231 l
-S
-647 4231 m
-647 4235 l
-649 4237 l
-652 4240 l
-652 4244 l
-652 4249 l
-652 4253 l
-652 4258 l
-652 4262 l
-652 4267 l
-654 4269 l
-S
-1 g
-3920 4435 m
-3924 4435 l
-3924 4436 l
-3920 4436 l
-3917 4436 m
-3924 4436 l
-3924 4437 l
-3917 4437 l
-3914 4437 m
-3925 4437 l
-3925 4438 l
-3914 4438 l
-3911 4438 m
-3925 4438 l
-3925 4439 l
-3911 4439 l
-3908 4439 m
-3925 4439 l
-3925 4440 l
-3908 4440 l
-3905 4440 m
-3926 4440 l
-3926 4441 l
-3905 4441 l
-3903 4441 m
-3926 4441 l
-3926 4442 l
-3903 4442 l
-3900 4442 m
-3926 4442 l
-3926 4443 l
-3900 4443 l
-3897 4443 m
-3927 4443 l
-3927 4444 l
-3897 4444 l
-3894 4444 m
-3927 4444 l
-3927 4445 l
-3894 4445 l
-3891 4445 m
-3927 4445 l
-3927 4446 l
-3891 4446 l
-3888 4446 m
-3928 4446 l
-3928 4447 l
-3888 4447 l
-3885 4447 m
-3928 4447 l
-3928 4448 l
-3885 4448 l
-3883 4448 m
-3928 4448 l
-3928 4449 l
-3883 4449 l
-3880 4449 m
-3929 4449 l
-3929 4450 l
-3880 4450 l
-3877 4450 m
-3929 4450 l
-3929 4451 l
-3877 4451 l
-3874 4451 m
-3929 4451 l
-3929 4452 l
-3874 4452 l
-3871 4452 m
-3930 4452 l
-3930 4453 l
-3871 4453 l
-3868 4453 m
-3930 4453 l
-3930 4454 l
-3868 4454 l
-3866 4454 m
-3931 4454 l
-3931 4455 l
-3866 4455 l
-3863 4455 m
-3931 4455 l
-3931 4456 l
-3863 4456 l
-3860 4456 m
-3931 4456 l
-3931 4457 l
-3860 4457 l
-3857 4457 m
-3932 4457 l
-3932 4458 l
-3857 4458 l
-3854 4458 m
-3932 4458 l
-3932 4459 l
-3854 4459 l
-3851 4459 m
-3932 4459 l
-3932 4460 l
-3851 4460 l
-3848 4460 m
-3933 4460 l
-3933 4461 l
-3848 4461 l
-3846 4461 m
-3933 4461 l
-3933 4462 l
-3846 4462 l
-3843 4462 m
-3933 4462 l
-3933 4463 l
-3843 4463 l
-3840 4463 m
-3934 4463 l
-3934 4464 l
-3840 4464 l
-3837 4464 m
-3934 4464 l
-3934 4465 l
-3837 4465 l
-3834 4465 m
-3934 4465 l
-3934 4466 l
-3834 4466 l
-3831 4466 m
-3935 4466 l
-3935 4467 l
-3831 4467 l
-3829 4467 m
-3935 4467 l
-3935 4468 l
-3829 4468 l
-3829 4468 m
-3935 4468 l
-3935 4469 l
-3829 4469 l
-3829 4469 m
-3936 4469 l
-3936 4471 l
-3829 4471 l
-3830 4471 m
-3937 4471 l
-3937 4474 l
-3830 4474 l
-3831 4474 m
-3938 4474 l
-3938 4477 l
-3831 4477 l
-3832 4477 m
-3939 4477 l
-3939 4480 l
-3832 4480 l
-3833 4480 m
-3940 4480 l
-3940 4483 l
-3833 4483 l
-3834 4483 m
-3941 4483 l
-3941 4486 l
-3834 4486 l
-3835 4486 m
-3942 4486 l
-3942 4488 l
-3835 4488 l
-3836 4488 m
-3942 4488 l
-3942 4489 l
-3836 4489 l
-3836 4489 m
-3943 4489 l
-3943 4491 l
-3836 4491 l
-3837 4491 m
-3944 4491 l
-3944 4494 l
-3837 4494 l
-3838 4494 m
-3945 4494 l
-3945 4497 l
-3838 4497 l
-3839 4497 m
-3946 4497 l
-3946 4500 l
-3839 4500 l
-3840 4500 m
-3947 4500 l
-3947 4503 l
-3840 4503 l
-3841 4503 m
-3948 4503 l
-3948 4506 l
-3841 4506 l
-3842 4506 m
-3949 4506 l
-3949 4508 l
-3842 4508 l
-3843 4508 m
-3950 4508 l
-3950 4511 l
-3843 4511 l
-3844 4511 m
-3951 4511 l
-3951 4514 l
-3844 4514 l
-3845 4514 m
-3952 4514 l
-3952 4517 l
-3845 4517 l
-3846 4517 m
-3953 4517 l
-3953 4520 l
-3846 4520 l
-3847 4520 m
-3954 4520 l
-3954 4523 l
-3847 4523 l
-3848 4523 m
-3955 4523 l
-3955 4525 l
-3848 4525 l
-3848 4525 m
-3956 4525 l
-3956 4526 l
-3848 4526 l
-3849 4526 m
-3956 4526 l
-3956 4528 l
-3849 4528 l
-3850 4528 m
-3957 4528 l
-3957 4531 l
-3850 4531 l
-3851 4531 m
-3958 4531 l
-3958 4534 l
-3851 4534 l
-3852 4534 m
-3959 4534 l
-3959 4537 l
-3852 4537 l
-3853 4537 m
-3960 4537 l
-3960 4540 l
-3853 4540 l
-3854 4540 m
-3961 4540 l
-3961 4543 l
-3854 4543 l
-3855 4543 m
-3962 4543 l
-3962 4545 l
-3855 4545 l
-3856 4545 m
-3963 4545 l
-3963 4548 l
-3856 4548 l
-3857 4548 m
-3964 4548 l
-3964 4549 l
-3857 4549 l
-3857 4549 m
-3964 4549 l
-3964 4550 l
-3857 4550 l
-3857 4550 m
-3961 4550 l
-3961 4551 l
-3857 4551 l
-3858 4551 m
-3958 4551 l
-3958 4552 l
-3858 4552 l
-3858 4552 m
-3955 4552 l
-3955 4553 l
-3858 4553 l
-3858 4553 m
-3952 4553 l
-3952 4554 l
-3858 4554 l
-3859 4554 m
-3949 4554 l
-3949 4555 l
-3859 4555 l
-3859 4555 m
-3946 4555 l
-3946 4556 l
-3859 4556 l
-3859 4556 m
-3944 4556 l
-3944 4557 l
-3859 4557 l
-3860 4557 m
-3941 4557 l
-3941 4558 l
-3860 4558 l
-3860 4558 m
-3938 4558 l
-3938 4559 l
-3860 4559 l
-3860 4559 m
-3935 4559 l
-3935 4560 l
-3860 4560 l
-3861 4560 m
-3932 4560 l
-3932 4561 l
-3861 4561 l
-3861 4561 m
-3929 4561 l
-3929 4562 l
-3861 4562 l
-3861 4562 m
-3927 4562 l
-3927 4563 l
-3861 4563 l
-3862 4563 m
-3924 4563 l
-3924 4564 l
-3862 4564 l
-3862 4564 m
-3921 4564 l
-3921 4565 l
-3862 4565 l
-3863 4565 m
-3918 4565 l
-3918 4566 l
-3863 4566 l
-3863 4566 m
-3915 4566 l
-3915 4567 l
-3863 4567 l
-3863 4567 m
-3912 4567 l
-3912 4568 l
-3863 4568 l
-3864 4568 m
-3909 4568 l
-3909 4569 l
-3864 4569 l
-3864 4569 m
-3907 4569 l
-3907 4570 l
-3864 4570 l
-3864 4570 m
-3904 4570 l
-3904 4571 l
-3864 4571 l
-3865 4571 m
-3901 4571 l
-3901 4572 l
-3865 4572 l
-3865 4572 m
-3898 4572 l
-3898 4573 l
-3865 4573 l
-3865 4573 m
-3895 4573 l
-3895 4574 l
-3865 4574 l
-3866 4574 m
-3892 4574 l
-3892 4575 l
-3866 4575 l
-3866 4575 m
-3889 4575 l
-3889 4576 l
-3866 4576 l
-3866 4576 m
-3887 4576 l
-3887 4577 l
-3866 4577 l
-3867 4577 m
-3884 4577 l
-3884 4578 l
-3867 4578 l
-3867 4578 m
-3881 4578 l
-3881 4579 l
-3867 4579 l
-3867 4579 m
-3878 4579 l
-3878 4580 l
-3867 4580 l
-3868 4580 m
-3875 4580 l
-3875 4581 l
-3868 4581 l
-3868 4581 m
-3872 4581 l
-3872 4582 l
-3868 4582 l
-Y
-3963.1 4549 m
-3923 4435 l
-3829 4468 l
-3869 4582 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3885 4466 m
-3899 4465 l
-3911 4475 l
-3921 4493 l
-3926 4505 l
-3928 4526 l
-3925 4540 l
-3914 4548 l
-3906 4551 l
-3893 4551 l
-3881 4542 l
-3870 4524 l
-3866 4512 l
-3863 4491 l
-3867 4476 l
-3877 4468 l
-3885 4466 l
-S
-1 g
-3085 4470 m
-3095 4470 l
-3095 4471 l
-3085 4471 l
-3085 4471 m
-3102 4471 l
-3102 4472 l
-3085 4472 l
-3085 4472 m
-3109 4472 l
-3109 4473 l
-3085 4473 l
-3085 4473 m
-3116 4473 l
-3116 4474 l
-3085 4474 l
-3085 4474 m
-3123 4474 l
-3123 4475 l
-3085 4475 l
-3085 4475 m
-3130 4475 l
-3130 4476 l
-3085 4476 l
-3085 4476 m
-3137 4476 l
-3137 4477 l
-3085 4477 l
-3084 4477 m
-3144 4477 l
-3144 4478 l
-3084 4478 l
-3084 4478 m
-3150 4478 l
-3150 4479 l
-3084 4479 l
-3084 4479 m
-3157 4479 l
-3157 4480 l
-3084 4480 l
-3084 4480 m
-3164 4480 l
-3164 4481 l
-3084 4481 l
-3084 4481 m
-3171 4481 l
-3171 4482 l
-3084 4482 l
-3084 4482 m
-3178 4482 l
-3178 4483 l
-3084 4483 l
-3084 4483 m
-3185 4483 l
-3185 4484 l
-3084 4484 l
-3083 4484 m
-3192 4484 l
-3192 4485 l
-3083 4485 l
-3083 4485 m
-3199 4485 l
-3199 4486 l
-3083 4486 l
-3083 4486 m
-3206 4486 l
-3206 4487 l
-3083 4487 l
-3083 4487 m
-3213 4487 l
-3213 4488 l
-3083 4488 l
-3083 4488 m
-3220 4488 l
-3220 4489 l
-3083 4489 l
-3083 4489 m
-3227 4489 l
-3227 4490 l
-3083 4490 l
-3083 4490 m
-3234 4490 l
-3234 4491 l
-3083 4491 l
-3082 4491 m
-3241 4491 l
-3241 4492 l
-3082 4492 l
-3082 4492 m
-3248 4492 l
-3248 4493 l
-3082 4493 l
-3082 4493 m
-3255 4493 l
-3255 4494 l
-3082 4494 l
-3082 4494 m
-3262 4494 l
-3262 4495 l
-3082 4495 l
-3082 4495 m
-3268 4495 l
-3268 4496 l
-3082 4496 l
-3082 4496 m
-3269 4496 l
-3269 4497 l
-3082 4497 l
-3082 4497 m
-3268 4497 l
-3268 4498 l
-3082 4498 l
-3081 4498 m
-3268 4498 l
-3268 4504 l
-3081 4504 l
-3081 4504 m
-3267 4504 l
-3267 4505 l
-3081 4505 l
-3080 4505 m
-3267 4505 l
-3267 4511 l
-3080 4511 l
-3080 4511 m
-3266 4511 l
-3266 4512 l
-3080 4512 l
-3079 4512 m
-3266 4512 l
-3266 4518 l
-3079 4518 l
-3079 4518 m
-3265 4518 l
-3265 4519 l
-3079 4519 l
-3078 4519 m
-3265 4519 l
-3265 4525 l
-3078 4525 l
-3078 4525 m
-3264 4525 l
-3264 4526 l
-3078 4526 l
-3077 4526 m
-3264 4526 l
-3264 4532 l
-3077 4532 l
-3077 4532 m
-3263 4532 l
-3263 4533 l
-3077 4533 l
-3076 4533 m
-3263 4533 l
-3263 4539 l
-3076 4539 l
-3076 4539 m
-3262 4539 l
-3262 4540 l
-3076 4540 l
-3075 4540 m
-3262 4540 l
-3262 4546 l
-3075 4546 l
-3075 4546 m
-3261 4546 l
-3261 4547 l
-3075 4547 l
-3074 4547 m
-3261 4547 l
-3261 4553 l
-3074 4553 l
-3074 4553 m
-3260 4553 l
-3260 4554 l
-3074 4554 l
-3073 4554 m
-3260 4554 l
-3260 4560 l
-3073 4560 l
-3073 4560 m
-3259 4560 l
-3259 4561 l
-3073 4561 l
-3072 4561 m
-3259 4561 l
-3259 4567 l
-3072 4567 l
-3072 4567 m
-3258 4567 l
-3258 4568 l
-3072 4568 l
-3071 4568 m
-3258 4568 l
-3258 4574 l
-3071 4574 l
-3071 4574 m
-3257 4574 l
-3257 4575 l
-3071 4575 l
-3070 4575 m
-3257 4575 l
-3257 4581 l
-3070 4581 l
-3070 4581 m
-3256 4581 l
-3256 4582 l
-3070 4582 l
-3069 4582 m
-3256 4582 l
-3256 4588 l
-3069 4588 l
-3069 4588 m
-3255 4588 l
-3255 4590 l
-3069 4590 l
-3069 4590 m
-3255 4590 l
-3255 4591 l
-3069 4591 l
-3076 4591 m
-3255 4591 l
-3255 4592 l
-3076 4592 l
-3083 4592 m
-3255 4592 l
-3255 4593 l
-3083 4593 l
-3090 4593 m
-3255 4593 l
-3255 4594 l
-3090 4594 l
-3097 4594 m
-3255 4594 l
-3255 4595 l
-3097 4595 l
-3104 4595 m
-3254 4595 l
-3254 4596 l
-3104 4596 l
-3111 4596 m
-3254 4596 l
-3254 4597 l
-3111 4597 l
-3118 4597 m
-3254 4597 l
-3254 4598 l
-3118 4598 l
-3125 4598 m
-3254 4598 l
-3254 4599 l
-3125 4599 l
-3132 4599 m
-3254 4599 l
-3254 4600 l
-3132 4600 l
-3139 4600 m
-3254 4600 l
-3254 4601 l
-3139 4601 l
-3146 4601 m
-3254 4601 l
-3254 4602 l
-3146 4602 l
-3153 4602 m
-3253 4602 l
-3253 4603 l
-3153 4603 l
-3160 4603 m
-3253 4603 l
-3253 4604 l
-3160 4604 l
-3167 4604 m
-3253 4604 l
-3253 4605 l
-3167 4605 l
-3174 4605 m
-3253 4605 l
-3253 4606 l
-3174 4606 l
-3181 4606 m
-3253 4606 l
-3253 4607 l
-3181 4607 l
-3188 4607 m
-3253 4607 l
-3253 4608 l
-3188 4608 l
-3195 4608 m
-3253 4608 l
-3253 4609 l
-3195 4609 l
-3202 4609 m
-3252 4609 l
-3252 4610 l
-3202 4610 l
-3209 4610 m
-3252 4610 l
-3252 4611 l
-3209 4611 l
-3216 4611 m
-3252 4611 l
-3252 4612 l
-3216 4612 l
-3223 4612 m
-3252 4612 l
-3252 4613 l
-3223 4613 l
-3230 4613 m
-3252 4613 l
-3252 4614 l
-3230 4614 l
-3237 4614 m
-3252 4614 l
-3252 4615 l
-3237 4615 l
-3244 4615 m
-3252 4615 l
-3252 4616 l
-3244 4616 l
-Y
-3086.1 4469.8 m
-3069 4590 l
-3251 4616 l
-3268 4496 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3133 4582 m
-3100 4518 l
-3162 4527 l
-S
-3133 4582 m
-3146 4495 l
-S
-3224 4595 m
-3183 4589 l
-3184 4552 l
-3188 4556 l
-3199 4562 l
-3212 4564 l
-3225 4562 l
-3234 4555 l
-3240 4543 l
-3241 4534 l
-3239 4521 l
-3232 4512 l
-3220 4506 l
-3208 4504 l
-3195 4507 l
-3190 4510 l
-3185 4518 l
-S
-1 g
-2354 4208 m
-2358 4208 l
-2358 4209 l
-2354 4209 l
-2354 4209 m
-2360 4209 l
-2360 4210 l
-2354 4210 l
-2353 4210 m
-2362 4210 l
-2362 4211 l
-2353 4211 l
-2353 4211 m
-2364 4211 l
-2364 4212 l
-2353 4212 l
-2352 4212 m
-2366 4212 l
-2366 4213 l
-2352 4213 l
-2352 4213 m
-2368 4213 l
-2368 4214 l
-2352 4214 l
-2351 4214 m
-2370 4214 l
-2370 4215 l
-2351 4215 l
-2351 4215 m
-2372 4215 l
-2372 4216 l
-2351 4216 l
-2350 4216 m
-2374 4216 l
-2374 4217 l
-2350 4217 l
-2350 4217 m
-2376 4217 l
-2376 4218 l
-2350 4218 l
-2349 4218 m
-2378 4218 l
-2378 4219 l
-2349 4219 l
-2349 4219 m
-2380 4219 l
-2380 4220 l
-2349 4220 l
-2348 4220 m
-2382 4220 l
-2382 4221 l
-2348 4221 l
-2348 4221 m
-2384 4221 l
-2384 4222 l
-2348 4222 l
-2347 4222 m
-2386 4222 l
-2386 4223 l
-2347 4223 l
-2347 4223 m
-2388 4223 l
-2388 4224 l
-2347 4224 l
-2346 4224 m
-2390 4224 l
-2390 4225 l
-2346 4225 l
-2346 4225 m
-2392 4225 l
-2392 4226 l
-2346 4226 l
-2345 4226 m
-2394 4226 l
-2394 4227 l
-2345 4227 l
-2345 4227 m
-2396 4227 l
-2396 4228 l
-2345 4228 l
-2344 4228 m
-2398 4228 l
-2398 4229 l
-2344 4229 l
-2344 4229 m
-2400 4229 l
-2400 4230 l
-2344 4230 l
-2343 4230 m
-2402 4230 l
-2402 4231 l
-2343 4231 l
-2343 4231 m
-2404 4231 l
-2404 4232 l
-2343 4232 l
-2342 4232 m
-2406 4232 l
-2406 4233 l
-2342 4233 l
-2342 4233 m
-2408 4233 l
-2408 4234 l
-2342 4234 l
-2341 4234 m
-2410 4234 l
-2410 4235 l
-2341 4235 l
-2341 4235 m
-2412 4235 l
-2412 4236 l
-2341 4236 l
-2340 4236 m
-2414 4236 l
-2414 4237 l
-2340 4237 l
-2340 4237 m
-2416 4237 l
-2416 4238 l
-2340 4238 l
-2339 4238 m
-2418 4238 l
-2418 4239 l
-2339 4239 l
-2339 4239 m
-2420 4239 l
-2420 4240 l
-2339 4240 l
-2338 4240 m
-2422 4240 l
-2422 4241 l
-2338 4241 l
-2338 4241 m
-2424 4241 l
-2424 4242 l
-2338 4242 l
-2337 4242 m
-2426 4242 l
-2426 4243 l
-2337 4243 l
-2337 4243 m
-2428 4243 l
-2428 4244 l
-2337 4244 l
-2336 4244 m
-2430 4244 l
-2430 4245 l
-2336 4245 l
-2336 4245 m
-2432 4245 l
-2432 4246 l
-2336 4246 l
-2335 4246 m
-2434 4246 l
-2434 4247 l
-2335 4247 l
-2335 4247 m
-2436 4247 l
-2436 4248 l
-2335 4248 l
-2334 4248 m
-2438 4248 l
-2438 4249 l
-2334 4249 l
-2334 4249 m
-2440 4249 l
-2440 4250 l
-2334 4250 l
-2333 4250 m
-2442 4250 l
-2442 4251 l
-2333 4251 l
-2333 4251 m
-2444 4251 l
-2444 4252 l
-2333 4252 l
-2332 4252 m
-2446 4252 l
-2446 4253 l
-2332 4253 l
-2332 4253 m
-2448 4253 l
-2448 4254 l
-2332 4254 l
-2331 4254 m
-2450 4254 l
-2450 4255 l
-2331 4255 l
-2331 4255 m
-2452 4255 l
-2452 4256 l
-2331 4256 l
-2330 4256 m
-2454 4256 l
-2454 4257 l
-2330 4257 l
-2330 4257 m
-2456 4257 l
-2456 4258 l
-2330 4258 l
-2329 4258 m
-2458 4258 l
-2458 4259 l
-2329 4259 l
-2329 4259 m
-2460 4259 l
-2460 4260 l
-2329 4260 l
-2328 4260 m
-2462 4260 l
-2462 4261 l
-2328 4261 l
-2328 4261 m
-2464 4261 l
-2464 4262 l
-2328 4262 l
-2327 4262 m
-2466 4262 l
-2466 4263 l
-2327 4263 l
-2327 4263 m
-2468 4263 l
-2468 4264 l
-2327 4264 l
-2326 4264 m
-2470 4264 l
-2470 4265 l
-2326 4265 l
-2326 4265 m
-2472 4265 l
-2472 4266 l
-2326 4266 l
-2325 4266 m
-2474 4266 l
-2474 4267 l
-2325 4267 l
-2325 4267 m
-2476 4267 l
-2476 4268 l
-2325 4268 l
-2324 4268 m
-2478 4268 l
-2478 4269 l
-2324 4269 l
-2324 4269 m
-2480 4269 l
-2480 4270 l
-2324 4270 l
-2323 4270 m
-2482 4270 l
-2482 4271 l
-2323 4271 l
-2323 4271 m
-2484 4271 l
-2484 4272 l
-2323 4272 l
-2322 4272 m
-2486 4272 l
-2486 4273 l
-2322 4273 l
-2322 4273 m
-2488 4273 l
-2488 4274 l
-2322 4274 l
-2321 4274 m
-2490 4274 l
-2490 4275 l
-2321 4275 l
-2321 4275 m
-2492 4275 l
-2492 4276 l
-2321 4276 l
-2320 4276 m
-2494 4276 l
-2494 4277 l
-2320 4277 l
-2320 4277 m
-2496 4277 l
-2496 4278 l
-2320 4278 l
-2319 4278 m
-2498 4278 l
-2498 4279 l
-2319 4279 l
-2319 4279 m
-2500 4279 l
-2500 4280 l
-2319 4280 l
-2318 4280 m
-2502 4280 l
-2502 4281 l
-2318 4281 l
-2318 4281 m
-2504 4281 l
-2504 4282 l
-2318 4282 l
-2317 4282 m
-2506 4282 l
-2506 4283 l
-2317 4283 l
-2317 4283 m
-2508 4283 l
-2508 4284 l
-2317 4284 l
-2316 4284 m
-2510 4284 l
-2510 4285 l
-2316 4285 l
-2316 4285 m
-2512 4285 l
-2512 4286 l
-2316 4286 l
-2315 4286 m
-2514 4286 l
-2514 4287 l
-2315 4287 l
-2315 4287 m
-2516 4287 l
-2516 4288 l
-2315 4288 l
-2314 4288 m
-2518 4288 l
-2518 4289 l
-2314 4289 l
-2314 4289 m
-2520 4289 l
-2520 4290 l
-2314 4290 l
-2313 4290 m
-2520 4290 l
-2520 4292 l
-2313 4292 l
-2312 4292 m
-2519 4292 l
-2519 4294 l
-2312 4294 l
-2311 4294 m
-2518 4294 l
-2518 4296 l
-2311 4296 l
-2310 4296 m
-2517 4296 l
-2517 4298 l
-2310 4298 l
-2309 4298 m
-2516 4298 l
-2516 4300 l
-2309 4300 l
-2308 4300 m
-2515 4300 l
-2515 4302 l
-2308 4302 l
-2307 4302 m
-2514 4302 l
-2514 4304 l
-2307 4304 l
-2306 4304 m
-2513 4304 l
-2513 4306 l
-2306 4306 l
-2305 4306 m
-2512 4306 l
-2512 4308 l
-2305 4308 l
-2304 4308 m
-2511 4308 l
-2511 4310 l
-2304 4310 l
-2303 4310 m
-2510 4310 l
-2510 4312 l
-2303 4312 l
-2302 4312 m
-2509 4312 l
-2509 4314 l
-2302 4314 l
-2301 4314 m
-2508 4314 l
-2508 4316 l
-2301 4316 l
-2301 4316 m
-2508 4316 l
-2508 4317 l
-2301 4317 l
-2303 4317 m
-2507 4317 l
-2507 4318 l
-2303 4318 l
-2305 4318 m
-2506 4318 l
-2506 4319 l
-2305 4319 l
-2307 4319 m
-2506 4319 l
-2506 4320 l
-2307 4320 l
-2309 4320 m
-2505 4320 l
-2505 4321 l
-2309 4321 l
-2311 4321 m
-2505 4321 l
-2505 4322 l
-2311 4322 l
-2313 4322 m
-2504 4322 l
-2504 4323 l
-2313 4323 l
-2315 4323 m
-2504 4323 l
-2504 4324 l
-2315 4324 l
-2317 4324 m
-2503 4324 l
-2503 4325 l
-2317 4325 l
-2319 4325 m
-2503 4325 l
-2503 4326 l
-2319 4326 l
-2321 4326 m
-2502 4326 l
-2502 4327 l
-2321 4327 l
-2323 4327 m
-2502 4327 l
-2502 4328 l
-2323 4328 l
-2325 4328 m
-2501 4328 l
-2501 4329 l
-2325 4329 l
-2327 4329 m
-2501 4329 l
-2501 4330 l
-2327 4330 l
-2329 4330 m
-2500 4330 l
-2500 4331 l
-2329 4331 l
-2331 4331 m
-2500 4331 l
-2500 4332 l
-2331 4332 l
-2333 4332 m
-2499 4332 l
-2499 4333 l
-2333 4333 l
-2335 4333 m
-2499 4333 l
-2499 4334 l
-2335 4334 l
-2337 4334 m
-2498 4334 l
-2498 4335 l
-2337 4335 l
-2339 4335 m
-2498 4335 l
-2498 4336 l
-2339 4336 l
-2341 4336 m
-2497 4336 l
-2497 4337 l
-2341 4337 l
-2343 4337 m
-2497 4337 l
-2497 4338 l
-2343 4338 l
-2345 4338 m
-2496 4338 l
-2496 4339 l
-2345 4339 l
-2347 4339 m
-2496 4339 l
-2496 4340 l
-2347 4340 l
-2349 4340 m
-2495 4340 l
-2495 4341 l
-2349 4341 l
-2351 4341 m
-2495 4341 l
-2495 4342 l
-2351 4342 l
-2353 4342 m
-2494 4342 l
-2494 4343 l
-2353 4343 l
-2355 4343 m
-2494 4343 l
-2494 4344 l
-2355 4344 l
-2357 4344 m
-2493 4344 l
-2493 4345 l
-2357 4345 l
-2359 4345 m
-2493 4345 l
-2493 4346 l
-2359 4346 l
-2361 4346 m
-2492 4346 l
-2492 4347 l
-2361 4347 l
-2363 4347 m
-2492 4347 l
-2492 4348 l
-2363 4348 l
-2365 4348 m
-2491 4348 l
-2491 4349 l
-2365 4349 l
-2367 4349 m
-2491 4349 l
-2491 4350 l
-2367 4350 l
-2369 4350 m
-2490 4350 l
-2490 4351 l
-2369 4351 l
-2371 4351 m
-2490 4351 l
-2490 4352 l
-2371 4352 l
-2373 4352 m
-2489 4352 l
-2489 4353 l
-2373 4353 l
-2375 4353 m
-2489 4353 l
-2489 4354 l
-2375 4354 l
-2377 4354 m
-2488 4354 l
-2488 4355 l
-2377 4355 l
-2379 4355 m
-2488 4355 l
-2488 4356 l
-2379 4356 l
-2381 4356 m
-2487 4356 l
-2487 4357 l
-2381 4357 l
-2383 4357 m
-2487 4357 l
-2487 4358 l
-2383 4358 l
-2385 4358 m
-2486 4358 l
-2486 4359 l
-2385 4359 l
-2387 4359 m
-2486 4359 l
-2486 4360 l
-2387 4360 l
-2389 4360 m
-2485 4360 l
-2485 4361 l
-2389 4361 l
-2391 4361 m
-2485 4361 l
-2485 4362 l
-2391 4362 l
-2393 4362 m
-2484 4362 l
-2484 4363 l
-2393 4363 l
-2395 4363 m
-2484 4363 l
-2484 4364 l
-2395 4364 l
-2397 4364 m
-2483 4364 l
-2483 4365 l
-2397 4365 l
-2399 4365 m
-2483 4365 l
-2483 4366 l
-2399 4366 l
-2401 4366 m
-2482 4366 l
-2482 4367 l
-2401 4367 l
-2403 4367 m
-2482 4367 l
-2482 4368 l
-2403 4368 l
-2405 4368 m
-2481 4368 l
-2481 4369 l
-2405 4369 l
-2407 4369 m
-2481 4369 l
-2481 4370 l
-2407 4370 l
-2409 4370 m
-2480 4370 l
-2480 4371 l
-2409 4371 l
-2411 4371 m
-2480 4371 l
-2480 4372 l
-2411 4372 l
-2413 4372 m
-2479 4372 l
-2479 4373 l
-2413 4373 l
-2415 4373 m
-2479 4373 l
-2479 4374 l
-2415 4374 l
-2417 4374 m
-2478 4374 l
-2478 4375 l
-2417 4375 l
-2419 4375 m
-2478 4375 l
-2478 4376 l
-2419 4376 l
-2421 4376 m
-2477 4376 l
-2477 4377 l
-2421 4377 l
-2423 4377 m
-2477 4377 l
-2477 4378 l
-2423 4378 l
-2425 4378 m
-2476 4378 l
-2476 4379 l
-2425 4379 l
-2427 4379 m
-2476 4379 l
-2476 4380 l
-2427 4380 l
-2429 4380 m
-2475 4380 l
-2475 4381 l
-2429 4381 l
-2431 4381 m
-2475 4381 l
-2475 4382 l
-2431 4382 l
-2433 4382 m
-2474 4382 l
-2474 4383 l
-2433 4383 l
-2435 4383 m
-2474 4383 l
-2474 4384 l
-2435 4384 l
-2437 4384 m
-2473 4384 l
-2473 4385 l
-2437 4385 l
-2439 4385 m
-2473 4385 l
-2473 4386 l
-2439 4386 l
-2441 4386 m
-2472 4386 l
-2472 4387 l
-2441 4387 l
-2443 4387 m
-2472 4387 l
-2472 4388 l
-2443 4388 l
-2445 4388 m
-2471 4388 l
-2471 4389 l
-2445 4389 l
-2447 4389 m
-2471 4389 l
-2471 4390 l
-2447 4390 l
-2449 4390 m
-2470 4390 l
-2470 4391 l
-2449 4391 l
-2451 4391 m
-2470 4391 l
-2470 4392 l
-2451 4392 l
-2453 4392 m
-2469 4392 l
-2469 4393 l
-2453 4393 l
-2455 4393 m
-2469 4393 l
-2469 4394 l
-2455 4394 l
-2457 4394 m
-2468 4394 l
-2468 4395 l
-2457 4395 l
-2459 4395 m
-2468 4395 l
-2468 4396 l
-2459 4396 l
-2461 4396 m
-2467 4396 l
-2467 4397 l
-2461 4397 l
-2463 4397 m
-2467 4397 l
-2467 4398 l
-2463 4398 l
-Y
-2355.3 4208 m
-2301 4316 l
-2466 4398 l
-2520 4290 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2389 4309 m
-2391 4296 l
-2387 4285 l
-2378 4275 l
-2374 4273 l
-2361 4272 l
-2350 4275 l
-2341 4285 l
-2339 4288 l
-2337 4301 l
-2341 4313 l
-2350 4322 l
-2354 4324 l
-2367 4326 l
-2378 4322 l
-2389 4309 l
-2398 4290 l
-2404 4270 l
-2402 4255 l
-2393 4245 l
-2385 4242 l
-2372 4240 l
-2365 4245 l
-S
-2425 4359 m
-2415 4350 l
-2413 4335 l
-2419 4314 l
-2425 4303 l
-2438 4286 l
-2451 4279 l
-2464 4281 l
-2471 4284 l
-2481 4294 l
-2483 4309 l
-2477 4329 l
-2471 4340 l
-2458 4357 l
-2445 4365 l
-2432 4363 l
-2425 4359 l
-S
-1 g
-1733 3720 m
-1736 3720 l
-1736 3721 l
-1733 3721 l
-1732 3721 m
-1737 3721 l
-1737 3722 l
-1732 3722 l
-1731 3722 m
-1738 3722 l
-1738 3723 l
-1731 3723 l
-1730 3723 m
-1739 3723 l
-1739 3724 l
-1730 3724 l
-1729 3724 m
-1740 3724 l
-1740 3725 l
-1729 3725 l
-1728 3725 m
-1741 3725 l
-1741 3726 l
-1728 3726 l
-1727 3726 m
-1742 3726 l
-1742 3727 l
-1727 3727 l
-1726 3727 m
-1742 3727 l
-1742 3728 l
-1726 3728 l
-1725 3728 m
-1743 3728 l
-1743 3729 l
-1725 3729 l
-1723 3729 m
-1744 3729 l
-1744 3730 l
-1723 3730 l
-1722 3730 m
-1745 3730 l
-1745 3731 l
-1722 3731 l
-1721 3731 m
-1746 3731 l
-1746 3732 l
-1721 3732 l
-1720 3732 m
-1747 3732 l
-1747 3733 l
-1720 3733 l
-1719 3733 m
-1748 3733 l
-1748 3734 l
-1719 3734 l
-1718 3734 m
-1749 3734 l
-1749 3735 l
-1718 3735 l
-1717 3735 m
-1750 3735 l
-1750 3736 l
-1717 3736 l
-1716 3736 m
-1751 3736 l
-1751 3737 l
-1716 3737 l
-1715 3737 m
-1752 3737 l
-1752 3738 l
-1715 3738 l
-1714 3738 m
-1753 3738 l
-1753 3739 l
-1714 3739 l
-1713 3739 m
-1754 3739 l
-1754 3740 l
-1713 3740 l
-1712 3740 m
-1755 3740 l
-1755 3741 l
-1712 3741 l
-1711 3741 m
-1756 3741 l
-1756 3742 l
-1711 3742 l
-1710 3742 m
-1757 3742 l
-1757 3743 l
-1710 3743 l
-1709 3743 m
-1758 3743 l
-1758 3744 l
-1709 3744 l
-1708 3744 m
-1759 3744 l
-1759 3745 l
-1708 3745 l
-1707 3745 m
-1760 3745 l
-1760 3746 l
-1707 3746 l
-1706 3746 m
-1761 3746 l
-1761 3747 l
-1706 3747 l
-1705 3747 m
-1762 3747 l
-1762 3748 l
-1705 3748 l
-1704 3748 m
-1763 3748 l
-1763 3749 l
-1704 3749 l
-1703 3749 m
-1764 3749 l
-1764 3750 l
-1703 3750 l
-1702 3750 m
-1765 3750 l
-1765 3751 l
-1702 3751 l
-1701 3751 m
-1766 3751 l
-1766 3752 l
-1701 3752 l
-1700 3752 m
-1767 3752 l
-1767 3753 l
-1700 3753 l
-1699 3753 m
-1768 3753 l
-1768 3754 l
-1699 3754 l
-1697 3754 m
-1769 3754 l
-1769 3755 l
-1697 3755 l
-1696 3755 m
-1770 3755 l
-1770 3756 l
-1696 3756 l
-1695 3756 m
-1771 3756 l
-1771 3757 l
-1695 3757 l
-1694 3757 m
-1772 3757 l
-1772 3758 l
-1694 3758 l
-1693 3758 m
-1773 3758 l
-1773 3759 l
-1693 3759 l
-1692 3759 m
-1774 3759 l
-1774 3760 l
-1692 3760 l
-1691 3760 m
-1775 3760 l
-1775 3761 l
-1691 3761 l
-1690 3761 m
-1776 3761 l
-1776 3762 l
-1690 3762 l
-1689 3762 m
-1776 3762 l
-1776 3763 l
-1689 3763 l
-1688 3763 m
-1777 3763 l
-1777 3764 l
-1688 3764 l
-1687 3764 m
-1778 3764 l
-1778 3765 l
-1687 3765 l
-1686 3765 m
-1779 3765 l
-1779 3766 l
-1686 3766 l
-1685 3766 m
-1780 3766 l
-1780 3767 l
-1685 3767 l
-1684 3767 m
-1781 3767 l
-1781 3768 l
-1684 3768 l
-1683 3768 m
-1782 3768 l
-1782 3769 l
-1683 3769 l
-1682 3769 m
-1783 3769 l
-1783 3770 l
-1682 3770 l
-1681 3770 m
-1784 3770 l
-1784 3771 l
-1681 3771 l
-1680 3771 m
-1785 3771 l
-1785 3772 l
-1680 3772 l
-1679 3772 m
-1786 3772 l
-1786 3773 l
-1679 3773 l
-1678 3773 m
-1787 3773 l
-1787 3774 l
-1678 3774 l
-1677 3774 m
-1788 3774 l
-1788 3775 l
-1677 3775 l
-1676 3775 m
-1789 3775 l
-1789 3776 l
-1676 3776 l
-1675 3776 m
-1790 3776 l
-1790 3777 l
-1675 3777 l
-1674 3777 m
-1791 3777 l
-1791 3778 l
-1674 3778 l
-1673 3778 m
-1792 3778 l
-1792 3779 l
-1673 3779 l
-1671 3779 m
-1793 3779 l
-1793 3780 l
-1671 3780 l
-1670 3780 m
-1794 3780 l
-1794 3781 l
-1670 3781 l
-1669 3781 m
-1795 3781 l
-1795 3782 l
-1669 3782 l
-1668 3782 m
-1796 3782 l
-1796 3783 l
-1668 3783 l
-1667 3783 m
-1797 3783 l
-1797 3784 l
-1667 3784 l
-1666 3784 m
-1798 3784 l
-1798 3785 l
-1666 3785 l
-1665 3785 m
-1799 3785 l
-1799 3786 l
-1665 3786 l
-1664 3786 m
-1800 3786 l
-1800 3787 l
-1664 3787 l
-1663 3787 m
-1801 3787 l
-1801 3788 l
-1663 3788 l
-1662 3788 m
-1802 3788 l
-1802 3789 l
-1662 3789 l
-1661 3789 m
-1803 3789 l
-1803 3790 l
-1661 3790 l
-1660 3790 m
-1804 3790 l
-1804 3791 l
-1660 3791 l
-1659 3791 m
-1805 3791 l
-1805 3792 l
-1659 3792 l
-1658 3792 m
-1806 3792 l
-1806 3793 l
-1658 3793 l
-1657 3793 m
-1807 3793 l
-1807 3794 l
-1657 3794 l
-1656 3794 m
-1808 3794 l
-1808 3795 l
-1656 3795 l
-1655 3795 m
-1809 3795 l
-1809 3796 l
-1655 3796 l
-1654 3796 m
-1810 3796 l
-1810 3797 l
-1654 3797 l
-1653 3797 m
-1810 3797 l
-1810 3798 l
-1653 3798 l
-1652 3798 m
-1811 3798 l
-1811 3799 l
-1652 3799 l
-1651 3799 m
-1812 3799 l
-1812 3800 l
-1651 3800 l
-1650 3800 m
-1813 3800 l
-1813 3801 l
-1650 3801 l
-1649 3801 m
-1814 3801 l
-1814 3802 l
-1649 3802 l
-1648 3802 m
-1815 3802 l
-1815 3803 l
-1648 3803 l
-1647 3803 m
-1816 3803 l
-1816 3804 l
-1647 3804 l
-1647 3804 m
-1817 3804 l
-1817 3805 l
-1647 3805 l
-1647 3805 m
-1818 3805 l
-1818 3806 l
-1647 3806 l
-1648 3806 m
-1819 3806 l
-1819 3807 l
-1648 3807 l
-1649 3807 m
-1820 3807 l
-1820 3808 l
-1649 3808 l
-1650 3808 m
-1821 3808 l
-1821 3809 l
-1650 3809 l
-1651 3809 m
-1822 3809 l
-1822 3810 l
-1651 3810 l
-1652 3810 m
-1823 3810 l
-1823 3811 l
-1652 3811 l
-1653 3811 m
-1824 3811 l
-1824 3812 l
-1653 3812 l
-1654 3812 m
-1825 3812 l
-1825 3813 l
-1654 3813 l
-1655 3813 m
-1826 3813 l
-1826 3814 l
-1655 3814 l
-1656 3814 m
-1827 3814 l
-1827 3815 l
-1656 3815 l
-1657 3815 m
-1828 3815 l
-1828 3816 l
-1657 3816 l
-1658 3816 m
-1829 3816 l
-1829 3817 l
-1658 3817 l
-1659 3817 m
-1830 3817 l
-1830 3818 l
-1659 3818 l
-1660 3818 m
-1831 3818 l
-1831 3819 l
-1660 3819 l
-1661 3819 m
-1832 3819 l
-1832 3820 l
-1661 3820 l
-1662 3820 m
-1833 3820 l
-1833 3821 l
-1662 3821 l
-1663 3821 m
-1834 3821 l
-1834 3822 l
-1663 3822 l
-1664 3822 m
-1835 3822 l
-1835 3823 l
-1664 3823 l
-1665 3823 m
-1836 3823 l
-1836 3824 l
-1665 3824 l
-1666 3824 m
-1837 3824 l
-1837 3825 l
-1666 3825 l
-1667 3825 m
-1838 3825 l
-1838 3826 l
-1667 3826 l
-1668 3826 m
-1839 3826 l
-1839 3827 l
-1668 3827 l
-1669 3827 m
-1840 3827 l
-1840 3828 l
-1669 3828 l
-1670 3828 m
-1841 3828 l
-1841 3829 l
-1670 3829 l
-1671 3829 m
-1842 3829 l
-1842 3830 l
-1671 3830 l
-1672 3830 m
-1843 3830 l
-1843 3831 l
-1672 3831 l
-1673 3831 m
-1844 3831 l
-1844 3832 l
-1673 3832 l
-1674 3832 m
-1844 3832 l
-1844 3833 l
-1674 3833 l
-1675 3833 m
-1845 3833 l
-1845 3834 l
-1675 3834 l
-1676 3834 m
-1846 3834 l
-1846 3835 l
-1676 3835 l
-1677 3835 m
-1847 3835 l
-1847 3836 l
-1677 3836 l
-1678 3836 m
-1848 3836 l
-1848 3837 l
-1678 3837 l
-1679 3837 m
-1849 3837 l
-1849 3838 l
-1679 3838 l
-1680 3838 m
-1850 3838 l
-1850 3839 l
-1680 3839 l
-1681 3839 m
-1851 3839 l
-1851 3840 l
-1681 3840 l
-1682 3840 m
-1852 3840 l
-1852 3841 l
-1682 3841 l
-1682 3841 m
-1853 3841 l
-1853 3842 l
-1682 3842 l
-1683 3842 m
-1854 3842 l
-1854 3843 l
-1683 3843 l
-1684 3843 m
-1855 3843 l
-1855 3844 l
-1684 3844 l
-1685 3844 m
-1856 3844 l
-1856 3845 l
-1685 3845 l
-1686 3845 m
-1857 3845 l
-1857 3846 l
-1686 3846 l
-1687 3846 m
-1858 3846 l
-1858 3847 l
-1687 3847 l
-1688 3847 m
-1859 3847 l
-1859 3848 l
-1688 3848 l
-1689 3848 m
-1860 3848 l
-1860 3849 l
-1689 3849 l
-1690 3849 m
-1861 3849 l
-1861 3850 l
-1690 3850 l
-1691 3850 m
-1862 3850 l
-1862 3851 l
-1691 3851 l
-1692 3851 m
-1863 3851 l
-1863 3852 l
-1692 3852 l
-1693 3852 m
-1864 3852 l
-1864 3853 l
-1693 3853 l
-1694 3853 m
-1865 3853 l
-1865 3854 l
-1694 3854 l
-1695 3854 m
-1866 3854 l
-1866 3855 l
-1695 3855 l
-1696 3855 m
-1867 3855 l
-1867 3856 l
-1696 3856 l
-1697 3856 m
-1868 3856 l
-1868 3857 l
-1697 3857 l
-1698 3857 m
-1869 3857 l
-1869 3858 l
-1698 3858 l
-1699 3858 m
-1870 3858 l
-1870 3859 l
-1699 3859 l
-1700 3859 m
-1871 3859 l
-1871 3860 l
-1700 3860 l
-1701 3860 m
-1872 3860 l
-1872 3861 l
-1701 3861 l
-1702 3861 m
-1873 3861 l
-1873 3862 l
-1702 3862 l
-1703 3862 m
-1874 3862 l
-1874 3863 l
-1703 3863 l
-1704 3863 m
-1875 3863 l
-1875 3864 l
-1704 3864 l
-1705 3864 m
-1876 3864 l
-1876 3865 l
-1705 3865 l
-1706 3865 m
-1877 3865 l
-1877 3866 l
-1706 3866 l
-1707 3866 m
-1878 3866 l
-1878 3867 l
-1707 3867 l
-1708 3867 m
-1878 3867 l
-1878 3868 l
-1708 3868 l
-1709 3868 m
-1879 3868 l
-1879 3869 l
-1709 3869 l
-1710 3869 m
-1880 3869 l
-1880 3870 l
-1710 3870 l
-1711 3870 m
-1881 3870 l
-1881 3871 l
-1711 3871 l
-1712 3871 m
-1882 3871 l
-1882 3872 l
-1712 3872 l
-1713 3872 m
-1883 3872 l
-1883 3873 l
-1713 3873 l
-1714 3873 m
-1884 3873 l
-1884 3874 l
-1714 3874 l
-1715 3874 m
-1885 3874 l
-1885 3875 l
-1715 3875 l
-1716 3875 m
-1886 3875 l
-1886 3876 l
-1716 3876 l
-1717 3876 m
-1887 3876 l
-1887 3877 l
-1717 3877 l
-1718 3877 m
-1888 3877 l
-1888 3878 l
-1718 3878 l
-1718 3878 m
-1889 3878 l
-1889 3879 l
-1718 3879 l
-1719 3879 m
-1890 3879 l
-1890 3880 l
-1719 3880 l
-1720 3880 m
-1891 3880 l
-1891 3881 l
-1720 3881 l
-1721 3881 m
-1892 3881 l
-1892 3882 l
-1721 3882 l
-1722 3882 m
-1893 3882 l
-1893 3883 l
-1722 3883 l
-1723 3883 m
-1894 3883 l
-1894 3884 l
-1723 3884 l
-1724 3884 m
-1895 3884 l
-1895 3885 l
-1724 3885 l
-1725 3885 m
-1896 3885 l
-1896 3886 l
-1725 3886 l
-1726 3886 m
-1897 3886 l
-1897 3887 l
-1726 3887 l
-1727 3887 m
-1898 3887 l
-1898 3888 l
-1727 3888 l
-1728 3888 m
-1899 3888 l
-1899 3889 l
-1728 3889 l
-1729 3889 m
-1900 3889 l
-1900 3890 l
-1729 3890 l
-1730 3890 m
-1901 3890 l
-1901 3891 l
-1730 3891 l
-1731 3891 m
-1902 3891 l
-1902 3892 l
-1731 3892 l
-1732 3892 m
-1903 3892 l
-1903 3893 l
-1732 3893 l
-1733 3893 m
-1904 3893 l
-1904 3894 l
-1733 3894 l
-1734 3894 m
-1905 3894 l
-1905 3895 l
-1734 3895 l
-1735 3895 m
-1906 3895 l
-1906 3896 l
-1735 3896 l
-1736 3896 m
-1907 3896 l
-1907 3897 l
-1736 3897 l
-1737 3897 m
-1908 3897 l
-1908 3898 l
-1737 3898 l
-1738 3898 m
-1909 3898 l
-1909 3899 l
-1738 3899 l
-1739 3899 m
-1910 3899 l
-1910 3900 l
-1739 3900 l
-1740 3900 m
-1911 3900 l
-1911 3901 l
-1740 3901 l
-1741 3901 m
-1912 3901 l
-1912 3902 l
-1741 3902 l
-1742 3902 m
-1913 3902 l
-1913 3903 l
-1742 3903 l
-1743 3903 m
-1912 3903 l
-1912 3904 l
-1743 3904 l
-1744 3904 m
-1911 3904 l
-1911 3905 l
-1744 3905 l
-1745 3905 m
-1910 3905 l
-1910 3906 l
-1745 3906 l
-1746 3906 m
-1909 3906 l
-1909 3907 l
-1746 3907 l
-1747 3907 m
-1908 3907 l
-1908 3908 l
-1747 3908 l
-1748 3908 m
-1907 3908 l
-1907 3909 l
-1748 3909 l
-1749 3909 m
-1906 3909 l
-1906 3910 l
-1749 3910 l
-1750 3910 m
-1905 3910 l
-1905 3911 l
-1750 3911 l
-1751 3911 m
-1904 3911 l
-1904 3912 l
-1751 3912 l
-1752 3912 m
-1903 3912 l
-1903 3913 l
-1752 3913 l
-1753 3913 m
-1902 3913 l
-1902 3914 l
-1753 3914 l
-1753 3914 m
-1901 3914 l
-1901 3915 l
-1753 3915 l
-1754 3915 m
-1900 3915 l
-1900 3916 l
-1754 3916 l
-1755 3916 m
-1899 3916 l
-1899 3917 l
-1755 3917 l
-1756 3917 m
-1898 3917 l
-1898 3918 l
-1756 3918 l
-1757 3918 m
-1897 3918 l
-1897 3919 l
-1757 3919 l
-1758 3919 m
-1896 3919 l
-1896 3920 l
-1758 3920 l
-1759 3920 m
-1895 3920 l
-1895 3921 l
-1759 3921 l
-1760 3921 m
-1894 3921 l
-1894 3922 l
-1760 3922 l
-1761 3922 m
-1893 3922 l
-1893 3923 l
-1761 3923 l
-1762 3923 m
-1892 3923 l
-1892 3924 l
-1762 3924 l
-1763 3924 m
-1891 3924 l
-1891 3925 l
-1763 3925 l
-1764 3925 m
-1890 3925 l
-1890 3926 l
-1764 3926 l
-1765 3926 m
-1889 3926 l
-1889 3927 l
-1765 3927 l
-1766 3927 m
-1888 3927 l
-1888 3928 l
-1766 3928 l
-1767 3928 m
-1887 3928 l
-1887 3929 l
-1767 3929 l
-1768 3929 m
-1886 3929 l
-1886 3930 l
-1768 3930 l
-1769 3930 m
-1885 3930 l
-1885 3931 l
-1769 3931 l
-1770 3931 m
-1883 3931 l
-1883 3932 l
-1770 3932 l
-1771 3932 m
-1882 3932 l
-1882 3933 l
-1771 3933 l
-1772 3933 m
-1881 3933 l
-1881 3934 l
-1772 3934 l
-1773 3934 m
-1880 3934 l
-1880 3935 l
-1773 3935 l
-1774 3935 m
-1879 3935 l
-1879 3936 l
-1774 3936 l
-1775 3936 m
-1878 3936 l
-1878 3937 l
-1775 3937 l
-1776 3937 m
-1877 3937 l
-1877 3938 l
-1776 3938 l
-1777 3938 m
-1876 3938 l
-1876 3939 l
-1777 3939 l
-1778 3939 m
-1875 3939 l
-1875 3940 l
-1778 3940 l
-1779 3940 m
-1874 3940 l
-1874 3941 l
-1779 3941 l
-1780 3941 m
-1873 3941 l
-1873 3942 l
-1780 3942 l
-1781 3942 m
-1872 3942 l
-1872 3943 l
-1781 3943 l
-1782 3943 m
-1871 3943 l
-1871 3944 l
-1782 3944 l
-1783 3944 m
-1870 3944 l
-1870 3945 l
-1783 3945 l
-1784 3945 m
-1869 3945 l
-1869 3946 l
-1784 3946 l
-1785 3946 m
-1868 3946 l
-1868 3947 l
-1785 3947 l
-1786 3947 m
-1867 3947 l
-1867 3948 l
-1786 3948 l
-1787 3948 m
-1866 3948 l
-1866 3949 l
-1787 3949 l
-1788 3949 m
-1865 3949 l
-1865 3950 l
-1788 3950 l
-1789 3950 m
-1864 3950 l
-1864 3951 l
-1789 3951 l
-1789 3951 m
-1863 3951 l
-1863 3952 l
-1789 3952 l
-1790 3952 m
-1862 3952 l
-1862 3953 l
-1790 3953 l
-1791 3953 m
-1861 3953 l
-1861 3954 l
-1791 3954 l
-1792 3954 m
-1860 3954 l
-1860 3955 l
-1792 3955 l
-1793 3955 m
-1859 3955 l
-1859 3956 l
-1793 3956 l
-1794 3956 m
-1858 3956 l
-1858 3957 l
-1794 3957 l
-1795 3957 m
-1857 3957 l
-1857 3958 l
-1795 3958 l
-1796 3958 m
-1856 3958 l
-1856 3959 l
-1796 3959 l
-1797 3959 m
-1854 3959 l
-1854 3960 l
-1797 3960 l
-1798 3960 m
-1853 3960 l
-1853 3961 l
-1798 3961 l
-1799 3961 m
-1852 3961 l
-1852 3962 l
-1799 3962 l
-1800 3962 m
-1851 3962 l
-1851 3963 l
-1800 3963 l
-1801 3963 m
-1850 3963 l
-1850 3964 l
-1801 3964 l
-1802 3964 m
-1849 3964 l
-1849 3965 l
-1802 3965 l
-1803 3965 m
-1848 3965 l
-1848 3966 l
-1803 3966 l
-1804 3966 m
-1847 3966 l
-1847 3967 l
-1804 3967 l
-1805 3967 m
-1846 3967 l
-1846 3968 l
-1805 3968 l
-1806 3968 m
-1845 3968 l
-1845 3969 l
-1806 3969 l
-1807 3969 m
-1844 3969 l
-1844 3970 l
-1807 3970 l
-1808 3970 m
-1843 3970 l
-1843 3971 l
-1808 3971 l
-1809 3971 m
-1842 3971 l
-1842 3972 l
-1809 3972 l
-1810 3972 m
-1841 3972 l
-1841 3973 l
-1810 3973 l
-1811 3973 m
-1840 3973 l
-1840 3974 l
-1811 3974 l
-1812 3974 m
-1839 3974 l
-1839 3975 l
-1812 3975 l
-1813 3975 m
-1838 3975 l
-1838 3976 l
-1813 3976 l
-1814 3976 m
-1837 3976 l
-1837 3977 l
-1814 3977 l
-1815 3977 m
-1836 3977 l
-1836 3978 l
-1815 3978 l
-1816 3978 m
-1835 3978 l
-1835 3979 l
-1816 3979 l
-1817 3979 m
-1834 3979 l
-1834 3980 l
-1817 3980 l
-1818 3980 m
-1833 3980 l
-1833 3981 l
-1818 3981 l
-1819 3981 m
-1832 3981 l
-1832 3982 l
-1819 3982 l
-1820 3982 m
-1831 3982 l
-1831 3983 l
-1820 3983 l
-1821 3983 m
-1830 3983 l
-1830 3984 l
-1821 3984 l
-1822 3984 m
-1829 3984 l
-1829 3985 l
-1822 3985 l
-1823 3985 m
-1828 3985 l
-1828 3986 l
-1823 3986 l
-1824 3986 m
-1827 3986 l
-1827 3987 l
-1824 3987 l
-Y
-1734.3 3720.1 m
-1647 3804 l
-1825 3987 l
-1912 3903 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1686 3796 m
-1689 3805 l
-1688 3823 l
-1751 3762 l
-S
-1729 3865 m
-1761 3898 l
-1768 3856 l
-1776 3865 l
-1785 3869 l
-1791 3869 l
-1803 3863 l
-1809 3857 l
-1815 3845 l
-1815 3834 l
-1809 3822 l
-1801 3813 l
-1789 3807 l
-1783 3807 l
-1774 3809 l
-S
-1816 3955 m
-1787 3925 l
-1811 3896 l
-1811 3901 l
-1817 3913 l
-1826 3922 l
-1837 3928 l
-1849 3929 l
-1861 3923 l
-1867 3917 l
-1873 3905 l
-1873 3894 l
-1868 3882 l
-1859 3873 l
-1847 3867 l
-1841 3866 l
-1832 3869 l
-S
-1 g
-1467 3111 m
-1471 3111 l
-1471 3112 l
-1467 3112 l
-1462 3112 m
-1471 3112 l
-1471 3113 l
-1462 3113 l
-1456 3113 m
-1471 3113 l
-1471 3114 l
-1456 3114 l
-1451 3114 m
-1471 3114 l
-1471 3115 l
-1451 3115 l
-1446 3115 m
-1472 3115 l
-1472 3116 l
-1446 3116 l
-1441 3116 m
-1472 3116 l
-1472 3117 l
-1441 3117 l
-1435 3117 m
-1472 3117 l
-1472 3118 l
-1435 3118 l
-1430 3118 m
-1472 3118 l
-1472 3119 l
-1430 3119 l
-1425 3119 m
-1472 3119 l
-1472 3120 l
-1425 3120 l
-1419 3120 m
-1472 3120 l
-1472 3121 l
-1419 3121 l
-1414 3121 m
-1473 3121 l
-1473 3122 l
-1414 3122 l
-1409 3122 m
-1473 3122 l
-1473 3123 l
-1409 3123 l
-1403 3123 m
-1473 3123 l
-1473 3124 l
-1403 3124 l
-1398 3124 m
-1473 3124 l
-1473 3125 l
-1398 3125 l
-1393 3125 m
-1473 3125 l
-1473 3126 l
-1393 3126 l
-1388 3126 m
-1474 3126 l
-1474 3127 l
-1388 3127 l
-1382 3127 m
-1474 3127 l
-1474 3128 l
-1382 3128 l
-1377 3128 m
-1474 3128 l
-1474 3129 l
-1377 3129 l
-1372 3129 m
-1474 3129 l
-1474 3130 l
-1372 3130 l
-1366 3130 m
-1474 3130 l
-1474 3131 l
-1366 3131 l
-1361 3131 m
-1475 3131 l
-1475 3132 l
-1361 3132 l
-1356 3132 m
-1475 3132 l
-1475 3133 l
-1356 3133 l
-1351 3133 m
-1475 3133 l
-1475 3134 l
-1351 3134 l
-1351 3134 m
-1475 3134 l
-1475 3137 l
-1351 3137 l
-1351 3137 m
-1476 3137 l
-1476 3140 l
-1351 3140 l
-1352 3140 m
-1476 3140 l
-1476 3142 l
-1352 3142 l
-1352 3142 m
-1477 3142 l
-1477 3145 l
-1352 3145 l
-1353 3145 m
-1477 3145 l
-1477 3147 l
-1353 3147 l
-1353 3147 m
-1478 3147 l
-1478 3150 l
-1353 3150 l
-1354 3150 m
-1478 3150 l
-1478 3153 l
-1354 3153 l
-1354 3153 m
-1479 3153 l
-1479 3156 l
-1354 3156 l
-1355 3156 m
-1479 3156 l
-1479 3158 l
-1355 3158 l
-1355 3158 m
-1480 3158 l
-1480 3161 l
-1355 3161 l
-1356 3161 m
-1480 3161 l
-1480 3163 l
-1356 3163 l
-1356 3163 m
-1481 3163 l
-1481 3166 l
-1356 3166 l
-1357 3166 m
-1481 3166 l
-1481 3169 l
-1357 3169 l
-1357 3169 m
-1482 3169 l
-1482 3172 l
-1357 3172 l
-1358 3172 m
-1482 3172 l
-1482 3174 l
-1358 3174 l
-1358 3174 m
-1483 3174 l
-1483 3177 l
-1358 3177 l
-1359 3177 m
-1483 3177 l
-1483 3180 l
-1359 3180 l
-1359 3180 m
-1484 3180 l
-1484 3182 l
-1359 3182 l
-1360 3182 m
-1484 3182 l
-1484 3185 l
-1360 3185 l
-1360 3185 m
-1485 3185 l
-1485 3188 l
-1360 3188 l
-1361 3188 m
-1485 3188 l
-1485 3190 l
-1361 3190 l
-1361 3190 m
-1486 3190 l
-1486 3193 l
-1361 3193 l
-1362 3193 m
-1486 3193 l
-1486 3196 l
-1362 3196 l
-1362 3196 m
-1487 3196 l
-1487 3198 l
-1362 3198 l
-1363 3198 m
-1487 3198 l
-1487 3201 l
-1363 3201 l
-1363 3201 m
-1488 3201 l
-1488 3204 l
-1363 3204 l
-1364 3204 m
-1488 3204 l
-1488 3206 l
-1364 3206 l
-1364 3206 m
-1489 3206 l
-1489 3209 l
-1364 3209 l
-1365 3209 m
-1489 3209 l
-1489 3212 l
-1365 3212 l
-1365 3212 m
-1490 3212 l
-1490 3214 l
-1365 3214 l
-1366 3214 m
-1490 3214 l
-1490 3217 l
-1366 3217 l
-1366 3217 m
-1491 3217 l
-1491 3220 l
-1366 3220 l
-1367 3220 m
-1491 3220 l
-1491 3222 l
-1367 3222 l
-1367 3222 m
-1492 3222 l
-1492 3225 l
-1367 3225 l
-1368 3225 m
-1492 3225 l
-1492 3228 l
-1368 3228 l
-1368 3228 m
-1493 3228 l
-1493 3230 l
-1368 3230 l
-1369 3230 m
-1493 3230 l
-1493 3233 l
-1369 3233 l
-1369 3233 m
-1494 3233 l
-1494 3236 l
-1369 3236 l
-1370 3236 m
-1494 3236 l
-1494 3238 l
-1370 3238 l
-1370 3238 m
-1495 3238 l
-1495 3241 l
-1370 3241 l
-1371 3241 m
-1495 3241 l
-1495 3244 l
-1371 3244 l
-1371 3244 m
-1496 3244 l
-1496 3246 l
-1371 3246 l
-1372 3246 m
-1496 3246 l
-1496 3249 l
-1372 3249 l
-1372 3249 m
-1497 3249 l
-1497 3252 l
-1372 3252 l
-1373 3252 m
-1497 3252 l
-1497 3254 l
-1373 3254 l
-1373 3254 m
-1498 3254 l
-1498 3257 l
-1373 3257 l
-1374 3257 m
-1498 3257 l
-1498 3260 l
-1374 3260 l
-1374 3260 m
-1499 3260 l
-1499 3262 l
-1374 3262 l
-1375 3262 m
-1499 3262 l
-1499 3265 l
-1375 3265 l
-1375 3265 m
-1500 3265 l
-1500 3267 l
-1375 3267 l
-1376 3267 m
-1500 3267 l
-1500 3271 l
-1376 3271 l
-1376 3271 m
-1501 3271 l
-1501 3273 l
-1376 3273 l
-1377 3273 m
-1501 3273 l
-1501 3276 l
-1377 3276 l
-1377 3276 m
-1502 3276 l
-1502 3278 l
-1377 3278 l
-1378 3278 m
-1502 3278 l
-1502 3281 l
-1378 3281 l
-1378 3281 m
-1503 3281 l
-1503 3283 l
-1378 3283 l
-1379 3283 m
-1503 3283 l
-1503 3287 l
-1379 3287 l
-1379 3287 m
-1504 3287 l
-1504 3289 l
-1379 3289 l
-1380 3289 m
-1504 3289 l
-1504 3292 l
-1380 3292 l
-1380 3292 m
-1505 3292 l
-1505 3294 l
-1380 3294 l
-1381 3294 m
-1505 3294 l
-1505 3297 l
-1381 3297 l
-1381 3297 m
-1506 3297 l
-1506 3299 l
-1381 3299 l
-1382 3299 m
-1506 3299 l
-1506 3303 l
-1382 3303 l
-1382 3303 m
-1507 3303 l
-1507 3305 l
-1382 3305 l
-1383 3305 m
-1507 3305 l
-1507 3308 l
-1383 3308 l
-1383 3308 m
-1508 3308 l
-1508 3310 l
-1383 3310 l
-1384 3310 m
-1508 3310 l
-1508 3313 l
-1384 3313 l
-1384 3313 m
-1509 3313 l
-1509 3315 l
-1384 3315 l
-1385 3315 m
-1509 3315 l
-1509 3319 l
-1385 3319 l
-1385 3319 m
-1510 3319 l
-1510 3321 l
-1385 3321 l
-1386 3321 m
-1510 3321 l
-1510 3324 l
-1386 3324 l
-1386 3324 m
-1511 3324 l
-1511 3326 l
-1386 3326 l
-1387 3326 m
-1511 3326 l
-1511 3329 l
-1387 3329 l
-1387 3329 m
-1512 3329 l
-1512 3331 l
-1387 3331 l
-1388 3331 m
-1512 3331 l
-1512 3335 l
-1388 3335 l
-1388 3335 m
-1513 3335 l
-1513 3337 l
-1388 3337 l
-1389 3337 m
-1513 3337 l
-1513 3340 l
-1389 3340 l
-1389 3340 m
-1514 3340 l
-1514 3342 l
-1389 3342 l
-1390 3342 m
-1514 3342 l
-1514 3345 l
-1390 3345 l
-1390 3345 m
-1515 3345 l
-1515 3347 l
-1390 3347 l
-1391 3347 m
-1515 3347 l
-1515 3351 l
-1391 3351 l
-1391 3351 m
-1516 3351 l
-1516 3353 l
-1391 3353 l
-1392 3353 m
-1516 3353 l
-1516 3356 l
-1392 3356 l
-1392 3356 m
-1517 3356 l
-1517 3358 l
-1392 3358 l
-1393 3358 m
-1517 3358 l
-1517 3362 l
-1393 3362 l
-1393 3362 m
-1518 3362 l
-1518 3363 l
-1393 3363 l
-1394 3363 m
-1512 3363 l
-1512 3364 l
-1394 3364 l
-1394 3364 m
-1507 3364 l
-1507 3365 l
-1394 3365 l
-1394 3365 m
-1501 3365 l
-1501 3366 l
-1394 3366 l
-1394 3366 m
-1496 3366 l
-1496 3367 l
-1394 3367 l
-1394 3367 m
-1490 3367 l
-1490 3368 l
-1394 3368 l
-1394 3368 m
-1485 3368 l
-1485 3369 l
-1394 3369 l
-1395 3369 m
-1480 3369 l
-1480 3370 l
-1395 3370 l
-1395 3370 m
-1474 3370 l
-1474 3371 l
-1395 3371 l
-1395 3371 m
-1469 3371 l
-1469 3372 l
-1395 3372 l
-1395 3372 m
-1463 3372 l
-1463 3373 l
-1395 3373 l
-1395 3373 m
-1458 3373 l
-1458 3374 l
-1395 3374 l
-1396 3374 m
-1453 3374 l
-1453 3375 l
-1396 3375 l
-1396 3375 m
-1447 3375 l
-1447 3376 l
-1396 3376 l
-1396 3376 m
-1442 3376 l
-1442 3377 l
-1396 3377 l
-1396 3377 m
-1436 3377 l
-1436 3378 l
-1396 3378 l
-1396 3378 m
-1431 3378 l
-1431 3379 l
-1396 3379 l
-1397 3379 m
-1426 3379 l
-1426 3380 l
-1397 3380 l
-1397 3380 m
-1420 3380 l
-1420 3381 l
-1397 3381 l
-1397 3381 m
-1415 3381 l
-1415 3382 l
-1397 3382 l
-1397 3382 m
-1409 3382 l
-1409 3383 l
-1397 3383 l
-1397 3383 m
-1404 3383 l
-1404 3384 l
-1397 3384 l
-Y
-1470.2 3111.5 m
-1351 3134 l
-1398 3384 l
-1517 3362 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1388 3148 m
-1385 3157 l
-1375 3172 l
-1462 3156 l
-S
-1389 3242 m
-1390 3229 l
-1398 3223 l
-1406 3221 l
-1415 3224 l
-1421 3231 l
-1428 3247 l
-1434 3259 l
-1444 3265 l
-1453 3268 l
-1465 3265 l
-1473 3260 l
-1476 3255 l
-1478 3242 l
-1475 3225 l
-1468 3214 l
-1463 3211 l
-1454 3208 l
-1442 3210 l
-1435 3216 l
-1428 3226 l
-1426 3239 l
-1425 3256 l
-1423 3265 l
-1415 3271 l
-1407 3272 l
-1398 3270 l
-1392 3258 l
-1389 3242 l
-S
-1405 3328 m
-1407 3315 l
-1417 3304 l
-1437 3296 l
-1449 3294 l
-1471 3294 l
-1485 3300 l
-1491 3312 l
-1493 3320 l
-1491 3333 l
-1480 3343 l
-1460 3351 l
-1448 3354 l
-1427 3354 l
-1413 3348 l
-1406 3336 l
-1405 3328 l
-S
-1 g
-1766 2327 m
-1769 2327 l
-1769 2328 l
-1766 2328 l
-1765 2328 m
-1770 2328 l
-1770 2329 l
-1765 2329 l
-1764 2329 m
-1771 2329 l
-1771 2330 l
-1764 2330 l
-1763 2330 m
-1772 2330 l
-1772 2331 l
-1763 2331 l
-1762 2331 m
-1773 2331 l
-1773 2332 l
-1762 2332 l
-1761 2332 m
-1774 2332 l
-1774 2333 l
-1761 2333 l
-1760 2333 m
-1775 2333 l
-1775 2334 l
-1760 2334 l
-1759 2334 m
-1776 2334 l
-1776 2335 l
-1759 2335 l
-1758 2335 m
-1777 2335 l
-1777 2336 l
-1758 2336 l
-1757 2336 m
-1778 2336 l
-1778 2337 l
-1757 2337 l
-1756 2337 m
-1779 2337 l
-1779 2338 l
-1756 2338 l
-1755 2338 m
-1780 2338 l
-1780 2339 l
-1755 2339 l
-1754 2339 m
-1781 2339 l
-1781 2340 l
-1754 2340 l
-1753 2340 m
-1782 2340 l
-1782 2341 l
-1753 2341 l
-1752 2341 m
-1783 2341 l
-1783 2342 l
-1752 2342 l
-1751 2342 m
-1784 2342 l
-1784 2343 l
-1751 2343 l
-1750 2343 m
-1785 2343 l
-1785 2344 l
-1750 2344 l
-1749 2344 m
-1786 2344 l
-1786 2345 l
-1749 2345 l
-1748 2345 m
-1787 2345 l
-1787 2346 l
-1748 2346 l
-1747 2346 m
-1788 2346 l
-1788 2347 l
-1747 2347 l
-1746 2347 m
-1789 2347 l
-1789 2348 l
-1746 2348 l
-1745 2348 m
-1790 2348 l
-1790 2349 l
-1745 2349 l
-1744 2349 m
-1791 2349 l
-1791 2350 l
-1744 2350 l
-1743 2350 m
-1792 2350 l
-1792 2351 l
-1743 2351 l
-1742 2351 m
-1793 2351 l
-1793 2352 l
-1742 2352 l
-1741 2352 m
-1794 2352 l
-1794 2353 l
-1741 2353 l
-1739 2353 m
-1795 2353 l
-1795 2354 l
-1739 2354 l
-1738 2354 m
-1796 2354 l
-1796 2355 l
-1738 2355 l
-1737 2355 m
-1796 2355 l
-1796 2356 l
-1737 2356 l
-1736 2356 m
-1797 2356 l
-1797 2357 l
-1736 2357 l
-1735 2357 m
-1798 2357 l
-1798 2358 l
-1735 2358 l
-1734 2358 m
-1799 2358 l
-1799 2359 l
-1734 2359 l
-1733 2359 m
-1800 2359 l
-1800 2360 l
-1733 2360 l
-1732 2360 m
-1801 2360 l
-1801 2361 l
-1732 2361 l
-1731 2361 m
-1802 2361 l
-1802 2362 l
-1731 2362 l
-1730 2362 m
-1803 2362 l
-1803 2363 l
-1730 2363 l
-1729 2363 m
-1804 2363 l
-1804 2364 l
-1729 2364 l
-1728 2364 m
-1805 2364 l
-1805 2365 l
-1728 2365 l
-1727 2365 m
-1806 2365 l
-1806 2366 l
-1727 2366 l
-1726 2366 m
-1807 2366 l
-1807 2367 l
-1726 2367 l
-1725 2367 m
-1808 2367 l
-1808 2368 l
-1725 2368 l
-1724 2368 m
-1809 2368 l
-1809 2369 l
-1724 2369 l
-1723 2369 m
-1810 2369 l
-1810 2370 l
-1723 2370 l
-1722 2370 m
-1811 2370 l
-1811 2371 l
-1722 2371 l
-1721 2371 m
-1812 2371 l
-1812 2372 l
-1721 2372 l
-1720 2372 m
-1813 2372 l
-1813 2373 l
-1720 2373 l
-1719 2373 m
-1814 2373 l
-1814 2374 l
-1719 2374 l
-1718 2374 m
-1815 2374 l
-1815 2375 l
-1718 2375 l
-1717 2375 m
-1816 2375 l
-1816 2376 l
-1717 2376 l
-1716 2376 m
-1817 2376 l
-1817 2377 l
-1716 2377 l
-1715 2377 m
-1818 2377 l
-1818 2378 l
-1715 2378 l
-1714 2378 m
-1819 2378 l
-1819 2379 l
-1714 2379 l
-1712 2379 m
-1820 2379 l
-1820 2380 l
-1712 2380 l
-1711 2380 m
-1821 2380 l
-1821 2381 l
-1711 2381 l
-1710 2381 m
-1822 2381 l
-1822 2382 l
-1710 2382 l
-1709 2382 m
-1823 2382 l
-1823 2383 l
-1709 2383 l
-1708 2383 m
-1823 2383 l
-1823 2384 l
-1708 2384 l
-1707 2384 m
-1824 2384 l
-1824 2385 l
-1707 2385 l
-1706 2385 m
-1825 2385 l
-1825 2386 l
-1706 2386 l
-1705 2386 m
-1826 2386 l
-1826 2387 l
-1705 2387 l
-1704 2387 m
-1827 2387 l
-1827 2388 l
-1704 2388 l
-1703 2388 m
-1828 2388 l
-1828 2389 l
-1703 2389 l
-1702 2389 m
-1829 2389 l
-1829 2390 l
-1702 2390 l
-1701 2390 m
-1830 2390 l
-1830 2391 l
-1701 2391 l
-1700 2391 m
-1831 2391 l
-1831 2392 l
-1700 2392 l
-1699 2392 m
-1832 2392 l
-1832 2393 l
-1699 2393 l
-1698 2393 m
-1833 2393 l
-1833 2394 l
-1698 2394 l
-1697 2394 m
-1834 2394 l
-1834 2395 l
-1697 2395 l
-1696 2395 m
-1835 2395 l
-1835 2396 l
-1696 2396 l
-1695 2396 m
-1836 2396 l
-1836 2397 l
-1695 2397 l
-1694 2397 m
-1837 2397 l
-1837 2398 l
-1694 2398 l
-1693 2398 m
-1838 2398 l
-1838 2399 l
-1693 2399 l
-1692 2399 m
-1839 2399 l
-1839 2400 l
-1692 2400 l
-1691 2400 m
-1840 2400 l
-1840 2401 l
-1691 2401 l
-1690 2401 m
-1841 2401 l
-1841 2402 l
-1690 2402 l
-1689 2402 m
-1842 2402 l
-1842 2403 l
-1689 2403 l
-1688 2403 m
-1843 2403 l
-1843 2404 l
-1688 2404 l
-1687 2404 m
-1844 2404 l
-1844 2405 l
-1687 2405 l
-1686 2405 m
-1845 2405 l
-1845 2406 l
-1686 2406 l
-1684 2406 m
-1846 2406 l
-1846 2407 l
-1684 2407 l
-1683 2407 m
-1847 2407 l
-1847 2408 l
-1683 2408 l
-1682 2408 m
-1848 2408 l
-1848 2409 l
-1682 2409 l
-1681 2409 m
-1849 2409 l
-1849 2410 l
-1681 2410 l
-1680 2410 m
-1850 2410 l
-1850 2411 l
-1680 2411 l
-1679 2411 m
-1850 2411 l
-1850 2412 l
-1679 2412 l
-1678 2412 m
-1851 2412 l
-1851 2413 l
-1678 2413 l
-1677 2413 m
-1852 2413 l
-1852 2414 l
-1677 2414 l
-1676 2414 m
-1853 2414 l
-1853 2415 l
-1676 2415 l
-1675 2415 m
-1852 2415 l
-1852 2416 l
-1675 2416 l
-1674 2416 m
-1851 2416 l
-1851 2417 l
-1674 2417 l
-1673 2417 m
-1850 2417 l
-1850 2418 l
-1673 2418 l
-1672 2418 m
-1849 2418 l
-1849 2419 l
-1672 2419 l
-1671 2419 m
-1848 2419 l
-1848 2420 l
-1671 2420 l
-1670 2420 m
-1847 2420 l
-1847 2421 l
-1670 2421 l
-1669 2421 m
-1846 2421 l
-1846 2422 l
-1669 2422 l
-1668 2422 m
-1845 2422 l
-1845 2423 l
-1668 2423 l
-1667 2423 m
-1844 2423 l
-1844 2424 l
-1667 2424 l
-1666 2424 m
-1843 2424 l
-1843 2425 l
-1666 2425 l
-1665 2425 m
-1842 2425 l
-1842 2426 l
-1665 2426 l
-1664 2426 m
-1841 2426 l
-1841 2427 l
-1664 2427 l
-1663 2427 m
-1840 2427 l
-1840 2428 l
-1663 2428 l
-1662 2428 m
-1839 2428 l
-1839 2429 l
-1662 2429 l
-1661 2429 m
-1838 2429 l
-1838 2430 l
-1661 2430 l
-1660 2430 m
-1837 2430 l
-1837 2431 l
-1660 2431 l
-1659 2431 m
-1836 2431 l
-1836 2432 l
-1659 2432 l
-1657 2432 m
-1835 2432 l
-1835 2433 l
-1657 2433 l
-1656 2433 m
-1834 2433 l
-1834 2434 l
-1656 2434 l
-1655 2434 m
-1833 2434 l
-1833 2435 l
-1655 2435 l
-1654 2435 m
-1832 2435 l
-1832 2436 l
-1654 2436 l
-1653 2436 m
-1831 2436 l
-1831 2437 l
-1653 2437 l
-1652 2437 m
-1830 2437 l
-1830 2438 l
-1652 2438 l
-1651 2438 m
-1829 2438 l
-1829 2439 l
-1651 2439 l
-1650 2439 m
-1827 2439 l
-1827 2440 l
-1650 2440 l
-1649 2440 m
-1826 2440 l
-1826 2441 l
-1649 2441 l
-1648 2441 m
-1825 2441 l
-1825 2442 l
-1648 2442 l
-1647 2442 m
-1824 2442 l
-1824 2443 l
-1647 2443 l
-1646 2443 m
-1823 2443 l
-1823 2444 l
-1646 2444 l
-1645 2444 m
-1822 2444 l
-1822 2445 l
-1645 2445 l
-1644 2445 m
-1821 2445 l
-1821 2446 l
-1644 2446 l
-1643 2446 m
-1820 2446 l
-1820 2447 l
-1643 2447 l
-1642 2447 m
-1819 2447 l
-1819 2448 l
-1642 2448 l
-1641 2448 m
-1818 2448 l
-1818 2449 l
-1641 2449 l
-1640 2449 m
-1817 2449 l
-1817 2450 l
-1640 2450 l
-1639 2450 m
-1816 2450 l
-1816 2451 l
-1639 2451 l
-1638 2451 m
-1815 2451 l
-1815 2452 l
-1638 2452 l
-1637 2452 m
-1814 2452 l
-1814 2453 l
-1637 2453 l
-1636 2453 m
-1813 2453 l
-1813 2454 l
-1636 2454 l
-1635 2454 m
-1812 2454 l
-1812 2455 l
-1635 2455 l
-1634 2455 m
-1811 2455 l
-1811 2456 l
-1634 2456 l
-1633 2456 m
-1810 2456 l
-1810 2457 l
-1633 2457 l
-1632 2457 m
-1809 2457 l
-1809 2458 l
-1632 2458 l
-1631 2458 m
-1808 2458 l
-1808 2459 l
-1631 2459 l
-1629 2459 m
-1807 2459 l
-1807 2460 l
-1629 2460 l
-1628 2460 m
-1806 2460 l
-1806 2461 l
-1628 2461 l
-1627 2461 m
-1805 2461 l
-1805 2462 l
-1627 2462 l
-1626 2462 m
-1804 2462 l
-1804 2463 l
-1626 2463 l
-1625 2463 m
-1803 2463 l
-1803 2464 l
-1625 2464 l
-1624 2464 m
-1802 2464 l
-1802 2465 l
-1624 2465 l
-1623 2465 m
-1801 2465 l
-1801 2466 l
-1623 2466 l
-1622 2466 m
-1799 2466 l
-1799 2467 l
-1622 2467 l
-1621 2467 m
-1798 2467 l
-1798 2468 l
-1621 2468 l
-1620 2468 m
-1797 2468 l
-1797 2469 l
-1620 2469 l
-1619 2469 m
-1796 2469 l
-1796 2470 l
-1619 2470 l
-1618 2470 m
-1795 2470 l
-1795 2471 l
-1618 2471 l
-1617 2471 m
-1794 2471 l
-1794 2472 l
-1617 2472 l
-1616 2472 m
-1793 2472 l
-1793 2473 l
-1616 2473 l
-1615 2473 m
-1792 2473 l
-1792 2474 l
-1615 2474 l
-1614 2474 m
-1791 2474 l
-1791 2475 l
-1614 2475 l
-1613 2475 m
-1790 2475 l
-1790 2476 l
-1613 2476 l
-1612 2476 m
-1789 2476 l
-1789 2477 l
-1612 2477 l
-1611 2477 m
-1788 2477 l
-1788 2478 l
-1611 2478 l
-1610 2478 m
-1787 2478 l
-1787 2479 l
-1610 2479 l
-1609 2479 m
-1786 2479 l
-1786 2480 l
-1609 2480 l
-1608 2480 m
-1785 2480 l
-1785 2481 l
-1608 2481 l
-1607 2481 m
-1784 2481 l
-1784 2482 l
-1607 2482 l
-1606 2482 m
-1783 2482 l
-1783 2483 l
-1606 2483 l
-1605 2483 m
-1782 2483 l
-1782 2484 l
-1605 2484 l
-1604 2484 m
-1781 2484 l
-1781 2485 l
-1604 2485 l
-1602 2485 m
-1780 2485 l
-1780 2486 l
-1602 2486 l
-1601 2486 m
-1779 2486 l
-1779 2487 l
-1601 2487 l
-1600 2487 m
-1778 2487 l
-1778 2488 l
-1600 2488 l
-1599 2488 m
-1777 2488 l
-1777 2489 l
-1599 2489 l
-1598 2489 m
-1776 2489 l
-1776 2490 l
-1598 2490 l
-1597 2490 m
-1775 2490 l
-1775 2491 l
-1597 2491 l
-1596 2491 m
-1774 2491 l
-1774 2492 l
-1596 2492 l
-1595 2492 m
-1773 2492 l
-1773 2493 l
-1595 2493 l
-1594 2493 m
-1771 2493 l
-1771 2494 l
-1594 2494 l
-1593 2494 m
-1770 2494 l
-1770 2495 l
-1593 2495 l
-1592 2495 m
-1769 2495 l
-1769 2496 l
-1592 2496 l
-1591 2496 m
-1768 2496 l
-1768 2497 l
-1591 2497 l
-1590 2497 m
-1767 2497 l
-1767 2498 l
-1590 2498 l
-1589 2498 m
-1766 2498 l
-1766 2499 l
-1589 2499 l
-1588 2499 m
-1765 2499 l
-1765 2500 l
-1588 2500 l
-1587 2500 m
-1764 2500 l
-1764 2501 l
-1587 2501 l
-1586 2501 m
-1763 2501 l
-1763 2502 l
-1586 2502 l
-1585 2502 m
-1762 2502 l
-1762 2503 l
-1585 2503 l
-1584 2503 m
-1761 2503 l
-1761 2504 l
-1584 2504 l
-1583 2504 m
-1760 2504 l
-1760 2505 l
-1583 2505 l
-1582 2505 m
-1759 2505 l
-1759 2506 l
-1582 2506 l
-1581 2506 m
-1758 2506 l
-1758 2507 l
-1581 2507 l
-1580 2507 m
-1757 2507 l
-1757 2508 l
-1580 2508 l
-1579 2508 m
-1756 2508 l
-1756 2509 l
-1579 2509 l
-1578 2509 m
-1755 2509 l
-1755 2510 l
-1578 2510 l
-1577 2510 m
-1754 2510 l
-1754 2511 l
-1577 2511 l
-1576 2511 m
-1753 2511 l
-1753 2512 l
-1576 2512 l
-1576 2512 m
-1752 2512 l
-1752 2513 l
-1576 2513 l
-1576 2513 m
-1751 2513 l
-1751 2514 l
-1576 2514 l
-1577 2514 m
-1750 2514 l
-1750 2515 l
-1577 2515 l
-1578 2515 m
-1749 2515 l
-1749 2516 l
-1578 2516 l
-1579 2516 m
-1748 2516 l
-1748 2517 l
-1579 2517 l
-1580 2517 m
-1747 2517 l
-1747 2518 l
-1580 2518 l
-1581 2518 m
-1746 2518 l
-1746 2519 l
-1581 2519 l
-1582 2519 m
-1745 2519 l
-1745 2520 l
-1582 2520 l
-1583 2520 m
-1743 2520 l
-1743 2521 l
-1583 2521 l
-1584 2521 m
-1742 2521 l
-1742 2522 l
-1584 2522 l
-1585 2522 m
-1741 2522 l
-1741 2523 l
-1585 2523 l
-1586 2523 m
-1740 2523 l
-1740 2524 l
-1586 2524 l
-1587 2524 m
-1739 2524 l
-1739 2525 l
-1587 2525 l
-1588 2525 m
-1738 2525 l
-1738 2526 l
-1588 2526 l
-1589 2526 m
-1737 2526 l
-1737 2527 l
-1589 2527 l
-1590 2527 m
-1736 2527 l
-1736 2528 l
-1590 2528 l
-1591 2528 m
-1735 2528 l
-1735 2529 l
-1591 2529 l
-1592 2529 m
-1734 2529 l
-1734 2530 l
-1592 2530 l
-1593 2530 m
-1733 2530 l
-1733 2531 l
-1593 2531 l
-1594 2531 m
-1732 2531 l
-1732 2532 l
-1594 2532 l
-1595 2532 m
-1731 2532 l
-1731 2533 l
-1595 2533 l
-1596 2533 m
-1730 2533 l
-1730 2534 l
-1596 2534 l
-1597 2534 m
-1729 2534 l
-1729 2535 l
-1597 2535 l
-1597 2535 m
-1728 2535 l
-1728 2536 l
-1597 2536 l
-1598 2536 m
-1727 2536 l
-1727 2537 l
-1598 2537 l
-1599 2537 m
-1726 2537 l
-1726 2538 l
-1599 2538 l
-1600 2538 m
-1725 2538 l
-1725 2539 l
-1600 2539 l
-1601 2539 m
-1724 2539 l
-1724 2540 l
-1601 2540 l
-1602 2540 m
-1723 2540 l
-1723 2541 l
-1602 2541 l
-1603 2541 m
-1722 2541 l
-1722 2542 l
-1603 2542 l
-1604 2542 m
-1721 2542 l
-1721 2543 l
-1604 2543 l
-1605 2543 m
-1720 2543 l
-1720 2544 l
-1605 2544 l
-1606 2544 m
-1719 2544 l
-1719 2545 l
-1606 2545 l
-1607 2545 m
-1718 2545 l
-1718 2546 l
-1607 2546 l
-1608 2546 m
-1717 2546 l
-1717 2547 l
-1608 2547 l
-1609 2547 m
-1715 2547 l
-1715 2548 l
-1609 2548 l
-1610 2548 m
-1714 2548 l
-1714 2549 l
-1610 2549 l
-1611 2549 m
-1713 2549 l
-1713 2550 l
-1611 2550 l
-1612 2550 m
-1712 2550 l
-1712 2551 l
-1612 2551 l
-1613 2551 m
-1711 2551 l
-1711 2552 l
-1613 2552 l
-1614 2552 m
-1710 2552 l
-1710 2553 l
-1614 2553 l
-1615 2553 m
-1709 2553 l
-1709 2554 l
-1615 2554 l
-1616 2554 m
-1708 2554 l
-1708 2555 l
-1616 2555 l
-1617 2555 m
-1707 2555 l
-1707 2556 l
-1617 2556 l
-1618 2556 m
-1706 2556 l
-1706 2557 l
-1618 2557 l
-1618 2557 m
-1705 2557 l
-1705 2558 l
-1618 2558 l
-1619 2558 m
-1704 2558 l
-1704 2559 l
-1619 2559 l
-1620 2559 m
-1703 2559 l
-1703 2560 l
-1620 2560 l
-1621 2560 m
-1702 2560 l
-1702 2561 l
-1621 2561 l
-1622 2561 m
-1701 2561 l
-1701 2562 l
-1622 2562 l
-1623 2562 m
-1700 2562 l
-1700 2563 l
-1623 2563 l
-1624 2563 m
-1699 2563 l
-1699 2564 l
-1624 2564 l
-1625 2564 m
-1698 2564 l
-1698 2565 l
-1625 2565 l
-1626 2565 m
-1697 2565 l
-1697 2566 l
-1626 2566 l
-1627 2566 m
-1696 2566 l
-1696 2567 l
-1627 2567 l
-1628 2567 m
-1695 2567 l
-1695 2568 l
-1628 2568 l
-1629 2568 m
-1694 2568 l
-1694 2569 l
-1629 2569 l
-1630 2569 m
-1693 2569 l
-1693 2570 l
-1630 2570 l
-1631 2570 m
-1692 2570 l
-1692 2571 l
-1631 2571 l
-1632 2571 m
-1691 2571 l
-1691 2572 l
-1632 2572 l
-1633 2572 m
-1690 2572 l
-1690 2573 l
-1633 2573 l
-1634 2573 m
-1689 2573 l
-1689 2574 l
-1634 2574 l
-1635 2574 m
-1687 2574 l
-1687 2575 l
-1635 2575 l
-1636 2575 m
-1686 2575 l
-1686 2576 l
-1636 2576 l
-1637 2576 m
-1685 2576 l
-1685 2577 l
-1637 2577 l
-1638 2577 m
-1684 2577 l
-1684 2578 l
-1638 2578 l
-1639 2578 m
-1683 2578 l
-1683 2579 l
-1639 2579 l
-1639 2579 m
-1682 2579 l
-1682 2580 l
-1639 2580 l
-1640 2580 m
-1681 2580 l
-1681 2581 l
-1640 2581 l
-1641 2581 m
-1680 2581 l
-1680 2582 l
-1641 2582 l
-1642 2582 m
-1679 2582 l
-1679 2583 l
-1642 2583 l
-1643 2583 m
-1678 2583 l
-1678 2584 l
-1643 2584 l
-1644 2584 m
-1677 2584 l
-1677 2585 l
-1644 2585 l
-1645 2585 m
-1676 2585 l
-1676 2586 l
-1645 2586 l
-1646 2586 m
-1675 2586 l
-1675 2587 l
-1646 2587 l
-1647 2587 m
-1674 2587 l
-1674 2588 l
-1647 2588 l
-1648 2588 m
-1673 2588 l
-1673 2589 l
-1648 2589 l
-1649 2589 m
-1672 2589 l
-1672 2590 l
-1649 2590 l
-1650 2590 m
-1671 2590 l
-1671 2591 l
-1650 2591 l
-1651 2591 m
-1670 2591 l
-1670 2592 l
-1651 2592 l
-1652 2592 m
-1669 2592 l
-1669 2593 l
-1652 2593 l
-1653 2593 m
-1668 2593 l
-1668 2594 l
-1653 2594 l
-1654 2594 m
-1667 2594 l
-1667 2595 l
-1654 2595 l
-1655 2595 m
-1666 2595 l
-1666 2596 l
-1655 2596 l
-1656 2596 m
-1665 2596 l
-1665 2597 l
-1656 2597 l
-1657 2597 m
-1664 2597 l
-1664 2598 l
-1657 2598 l
-1658 2598 m
-1663 2598 l
-1663 2599 l
-1658 2599 l
-1659 2599 m
-1662 2599 l
-1662 2600 l
-1659 2600 l
-Y
-1852.4 2414.5 m
-1768 2327 l
-1576 2512 l
-1660 2600 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1776 2372 m
-1774 2369 l
-1765 2365 l
-1759 2365 l
-1750 2368 l
-1738 2380 l
-1735 2388 l
-1735 2394 l
-1737 2403 l
-1743 2409 l
-1752 2412 l
-1767 2416 l
-1826 2417 l
-1784 2457 l
-S
-1716 2429 m
-1713 2426 l
-1704 2423 l
-1699 2423 l
-1690 2426 l
-1678 2438 l
-1674 2446 l
-1674 2452 l
-1677 2461 l
-1683 2467 l
-1692 2470 l
-1706 2474 l
-1765 2475 l
-1723 2515 l
-S
-1608 2504 m
-1638 2475 l
-1667 2499 l
-1662 2499 l
-1650 2505 l
-1641 2514 l
-1634 2525 l
-1634 2537 l
-1640 2549 l
-1646 2555 l
-1657 2561 l
-1669 2561 l
-1681 2556 l
-1690 2547 l
-1696 2535 l
-1696 2529 l
-1694 2521 l
-S
-1 g
-3771 2313 m
-3774 2313 l
-3774 2314 l
-3771 2314 l
-3770 2314 m
-3776 2314 l
-3776 2315 l
-3770 2315 l
-3769 2315 m
-3777 2315 l
-3777 2316 l
-3769 2316 l
-3769 2316 m
-3778 2316 l
-3778 2317 l
-3769 2317 l
-3768 2317 m
-3779 2317 l
-3779 2318 l
-3768 2318 l
-3767 2318 m
-3781 2318 l
-3781 2319 l
-3767 2319 l
-3766 2319 m
-3782 2319 l
-3782 2320 l
-3766 2320 l
-3766 2320 m
-3783 2320 l
-3783 2321 l
-3766 2321 l
-3765 2321 m
-3785 2321 l
-3785 2322 l
-3765 2322 l
-3764 2322 m
-3786 2322 l
-3786 2323 l
-3764 2323 l
-3763 2323 m
-3787 2323 l
-3787 2324 l
-3763 2324 l
-3763 2324 m
-3789 2324 l
-3789 2325 l
-3763 2325 l
-3762 2325 m
-3790 2325 l
-3790 2326 l
-3762 2326 l
-3761 2326 m
-3791 2326 l
-3791 2327 l
-3761 2327 l
-3760 2327 m
-3792 2327 l
-3792 2328 l
-3760 2328 l
-3760 2328 m
-3794 2328 l
-3794 2329 l
-3760 2329 l
-3759 2329 m
-3795 2329 l
-3795 2330 l
-3759 2330 l
-3758 2330 m
-3796 2330 l
-3796 2331 l
-3758 2331 l
-3757 2331 m
-3798 2331 l
-3798 2332 l
-3757 2332 l
-3756 2332 m
-3799 2332 l
-3799 2333 l
-3756 2333 l
-3756 2333 m
-3800 2333 l
-3800 2334 l
-3756 2334 l
-3755 2334 m
-3801 2334 l
-3801 2335 l
-3755 2335 l
-3754 2335 m
-3803 2335 l
-3803 2336 l
-3754 2336 l
-3753 2336 m
-3804 2336 l
-3804 2337 l
-3753 2337 l
-3753 2337 m
-3805 2337 l
-3805 2338 l
-3753 2338 l
-3752 2338 m
-3807 2338 l
-3807 2339 l
-3752 2339 l
-3751 2339 m
-3808 2339 l
-3808 2340 l
-3751 2340 l
-3750 2340 m
-3809 2340 l
-3809 2341 l
-3750 2341 l
-3750 2341 m
-3811 2341 l
-3811 2342 l
-3750 2342 l
-3749 2342 m
-3812 2342 l
-3812 2343 l
-3749 2343 l
-3748 2343 m
-3813 2343 l
-3813 2344 l
-3748 2344 l
-3747 2344 m
-3814 2344 l
-3814 2345 l
-3747 2345 l
-3747 2345 m
-3816 2345 l
-3816 2346 l
-3747 2346 l
-3746 2346 m
-3817 2346 l
-3817 2347 l
-3746 2347 l
-3745 2347 m
-3818 2347 l
-3818 2348 l
-3745 2348 l
-3744 2348 m
-3820 2348 l
-3820 2349 l
-3744 2349 l
-3744 2349 m
-3821 2349 l
-3821 2350 l
-3744 2350 l
-3743 2350 m
-3822 2350 l
-3822 2351 l
-3743 2351 l
-3742 2351 m
-3824 2351 l
-3824 2352 l
-3742 2352 l
-3741 2352 m
-3825 2352 l
-3825 2353 l
-3741 2353 l
-3740 2353 m
-3826 2353 l
-3826 2354 l
-3740 2354 l
-3740 2354 m
-3827 2354 l
-3827 2355 l
-3740 2355 l
-3739 2355 m
-3829 2355 l
-3829 2356 l
-3739 2356 l
-3738 2356 m
-3830 2356 l
-3830 2357 l
-3738 2357 l
-3737 2357 m
-3831 2357 l
-3831 2358 l
-3737 2358 l
-3737 2358 m
-3833 2358 l
-3833 2359 l
-3737 2359 l
-3736 2359 m
-3834 2359 l
-3834 2360 l
-3736 2360 l
-3735 2360 m
-3835 2360 l
-3835 2361 l
-3735 2361 l
-3734 2361 m
-3837 2361 l
-3837 2362 l
-3734 2362 l
-3734 2362 m
-3838 2362 l
-3838 2363 l
-3734 2363 l
-3733 2363 m
-3839 2363 l
-3839 2364 l
-3733 2364 l
-3732 2364 m
-3840 2364 l
-3840 2365 l
-3732 2365 l
-3731 2365 m
-3842 2365 l
-3842 2366 l
-3731 2366 l
-3731 2366 m
-3843 2366 l
-3843 2367 l
-3731 2367 l
-3730 2367 m
-3844 2367 l
-3844 2368 l
-3730 2368 l
-3729 2368 m
-3846 2368 l
-3846 2369 l
-3729 2369 l
-3728 2369 m
-3847 2369 l
-3847 2370 l
-3728 2370 l
-3727 2370 m
-3848 2370 l
-3848 2371 l
-3727 2371 l
-3727 2371 m
-3850 2371 l
-3850 2372 l
-3727 2372 l
-3726 2372 m
-3851 2372 l
-3851 2373 l
-3726 2373 l
-3725 2373 m
-3852 2373 l
-3852 2374 l
-3725 2374 l
-3724 2374 m
-3853 2374 l
-3853 2375 l
-3724 2375 l
-3724 2375 m
-3855 2375 l
-3855 2376 l
-3724 2376 l
-3723 2376 m
-3856 2376 l
-3856 2377 l
-3723 2377 l
-3722 2377 m
-3857 2377 l
-3857 2378 l
-3722 2378 l
-3721 2378 m
-3859 2378 l
-3859 2379 l
-3721 2379 l
-3721 2379 m
-3860 2379 l
-3860 2380 l
-3721 2380 l
-3720 2380 m
-3861 2380 l
-3861 2381 l
-3720 2381 l
-3719 2381 m
-3862 2381 l
-3862 2382 l
-3719 2382 l
-3718 2382 m
-3864 2382 l
-3864 2383 l
-3718 2383 l
-3718 2383 m
-3865 2383 l
-3865 2384 l
-3718 2384 l
-3717 2384 m
-3866 2384 l
-3866 2385 l
-3717 2385 l
-3716 2385 m
-3868 2385 l
-3868 2386 l
-3716 2386 l
-3715 2386 m
-3869 2386 l
-3869 2387 l
-3715 2387 l
-3715 2387 m
-3870 2387 l
-3870 2388 l
-3715 2388 l
-3714 2388 m
-3872 2388 l
-3872 2389 l
-3714 2389 l
-3713 2389 m
-3873 2389 l
-3873 2390 l
-3713 2390 l
-3712 2390 m
-3874 2390 l
-3874 2391 l
-3712 2391 l
-3711 2391 m
-3875 2391 l
-3875 2392 l
-3711 2392 l
-3711 2392 m
-3877 2392 l
-3877 2393 l
-3711 2393 l
-3710 2393 m
-3878 2393 l
-3878 2394 l
-3710 2394 l
-3709 2394 m
-3879 2394 l
-3879 2395 l
-3709 2395 l
-3708 2395 m
-3881 2395 l
-3881 2396 l
-3708 2396 l
-3708 2396 m
-3882 2396 l
-3882 2397 l
-3708 2397 l
-3707 2397 m
-3883 2397 l
-3883 2398 l
-3707 2398 l
-3706 2398 m
-3885 2398 l
-3885 2399 l
-3706 2399 l
-3705 2399 m
-3886 2399 l
-3886 2400 l
-3705 2400 l
-3705 2400 m
-3887 2400 l
-3887 2401 l
-3705 2401 l
-3704 2401 m
-3888 2401 l
-3888 2402 l
-3704 2402 l
-3703 2402 m
-3890 2402 l
-3890 2403 l
-3703 2403 l
-3702 2403 m
-3891 2403 l
-3891 2404 l
-3702 2404 l
-3702 2404 m
-3892 2404 l
-3892 2405 l
-3702 2405 l
-3701 2405 m
-3894 2405 l
-3894 2406 l
-3701 2406 l
-3700 2406 m
-3895 2406 l
-3895 2407 l
-3700 2407 l
-3699 2407 m
-3896 2407 l
-3896 2408 l
-3699 2408 l
-3699 2408 m
-3898 2408 l
-3898 2409 l
-3699 2409 l
-3699 2409 m
-3899 2409 l
-3899 2410 l
-3699 2410 l
-3700 2410 m
-3900 2410 l
-3900 2411 l
-3700 2411 l
-3701 2411 m
-3901 2411 l
-3901 2412 l
-3701 2412 l
-3702 2412 m
-3903 2412 l
-3903 2413 l
-3702 2413 l
-3704 2413 m
-3904 2413 l
-3904 2414 l
-3704 2414 l
-3705 2414 m
-3905 2414 l
-3905 2415 l
-3705 2415 l
-3706 2415 m
-3907 2415 l
-3907 2416 l
-3706 2416 l
-3708 2416 m
-3908 2416 l
-3908 2417 l
-3708 2417 l
-3709 2417 m
-3909 2417 l
-3909 2418 l
-3709 2418 l
-3710 2418 m
-3911 2418 l
-3911 2419 l
-3710 2419 l
-3712 2419 m
-3912 2419 l
-3912 2420 l
-3712 2420 l
-3713 2420 m
-3913 2420 l
-3913 2421 l
-3713 2421 l
-3714 2421 m
-3914 2421 l
-3914 2422 l
-3714 2422 l
-3715 2422 m
-3916 2422 l
-3916 2423 l
-3715 2423 l
-3717 2423 m
-3917 2423 l
-3917 2424 l
-3717 2424 l
-3718 2424 m
-3918 2424 l
-3918 2425 l
-3718 2425 l
-3719 2425 m
-3920 2425 l
-3920 2426 l
-3719 2426 l
-3721 2426 m
-3921 2426 l
-3921 2427 l
-3721 2427 l
-3722 2427 m
-3922 2427 l
-3922 2428 l
-3722 2428 l
-3723 2428 m
-3923 2428 l
-3923 2429 l
-3723 2429 l
-3725 2429 m
-3925 2429 l
-3925 2430 l
-3725 2430 l
-3726 2430 m
-3926 2430 l
-3926 2431 l
-3726 2431 l
-3727 2431 m
-3927 2431 l
-3927 2432 l
-3727 2432 l
-3728 2432 m
-3929 2432 l
-3929 2433 l
-3728 2433 l
-3730 2433 m
-3930 2433 l
-3930 2434 l
-3730 2434 l
-3731 2434 m
-3931 2434 l
-3931 2435 l
-3731 2435 l
-3732 2435 m
-3933 2435 l
-3933 2436 l
-3732 2436 l
-3734 2436 m
-3934 2436 l
-3934 2437 l
-3734 2437 l
-3735 2437 m
-3935 2437 l
-3935 2438 l
-3735 2438 l
-3736 2438 m
-3936 2438 l
-3936 2439 l
-3736 2439 l
-3738 2439 m
-3938 2439 l
-3938 2440 l
-3738 2440 l
-3739 2440 m
-3939 2440 l
-3939 2441 l
-3739 2441 l
-3740 2441 m
-3940 2441 l
-3940 2442 l
-3740 2442 l
-3741 2442 m
-3942 2442 l
-3942 2443 l
-3741 2443 l
-3743 2443 m
-3943 2443 l
-3943 2444 l
-3743 2444 l
-3744 2444 m
-3944 2444 l
-3944 2445 l
-3744 2445 l
-3745 2445 m
-3946 2445 l
-3946 2446 l
-3745 2446 l
-3747 2446 m
-3947 2446 l
-3947 2447 l
-3747 2447 l
-3748 2447 m
-3948 2447 l
-3948 2448 l
-3748 2448 l
-3749 2448 m
-3949 2448 l
-3949 2449 l
-3749 2449 l
-3751 2449 m
-3951 2449 l
-3951 2450 l
-3751 2450 l
-3752 2450 m
-3952 2450 l
-3952 2451 l
-3752 2451 l
-3753 2451 m
-3953 2451 l
-3953 2452 l
-3753 2452 l
-3754 2452 m
-3955 2452 l
-3955 2453 l
-3754 2453 l
-3756 2453 m
-3956 2453 l
-3956 2454 l
-3756 2454 l
-3757 2454 m
-3957 2454 l
-3957 2455 l
-3757 2455 l
-3758 2455 m
-3959 2455 l
-3959 2456 l
-3758 2456 l
-3760 2456 m
-3960 2456 l
-3960 2457 l
-3760 2457 l
-3761 2457 m
-3961 2457 l
-3961 2458 l
-3761 2458 l
-3762 2458 m
-3962 2458 l
-3962 2459 l
-3762 2459 l
-3764 2459 m
-3964 2459 l
-3964 2460 l
-3764 2460 l
-3765 2460 m
-3965 2460 l
-3965 2461 l
-3765 2461 l
-3766 2461 m
-3966 2461 l
-3966 2462 l
-3766 2462 l
-3767 2462 m
-3968 2462 l
-3968 2463 l
-3767 2463 l
-3769 2463 m
-3969 2463 l
-3969 2464 l
-3769 2464 l
-3770 2464 m
-3970 2464 l
-3970 2465 l
-3770 2465 l
-3771 2465 m
-3972 2465 l
-3972 2466 l
-3771 2466 l
-3773 2466 m
-3973 2466 l
-3973 2467 l
-3773 2467 l
-3774 2467 m
-3974 2467 l
-3974 2468 l
-3774 2468 l
-3775 2468 m
-3975 2468 l
-3975 2469 l
-3775 2469 l
-3777 2469 m
-3977 2469 l
-3977 2470 l
-3777 2470 l
-3778 2470 m
-3978 2470 l
-3978 2471 l
-3778 2471 l
-3779 2471 m
-3979 2471 l
-3979 2472 l
-3779 2472 l
-3780 2472 m
-3981 2472 l
-3981 2473 l
-3780 2473 l
-3782 2473 m
-3982 2473 l
-3982 2474 l
-3782 2474 l
-3783 2474 m
-3983 2474 l
-3983 2475 l
-3783 2475 l
-3784 2475 m
-3984 2475 l
-3984 2476 l
-3784 2476 l
-3786 2476 m
-3984 2476 l
-3984 2477 l
-3786 2477 l
-3787 2477 m
-3984 2477 l
-3984 2478 l
-3787 2478 l
-3788 2478 m
-3983 2478 l
-3983 2479 l
-3788 2479 l
-3790 2479 m
-3982 2479 l
-3982 2480 l
-3790 2480 l
-3791 2480 m
-3981 2480 l
-3981 2481 l
-3791 2481 l
-3792 2481 m
-3981 2481 l
-3981 2482 l
-3792 2482 l
-3793 2482 m
-3980 2482 l
-3980 2483 l
-3793 2483 l
-3795 2483 m
-3979 2483 l
-3979 2484 l
-3795 2484 l
-3796 2484 m
-3978 2484 l
-3978 2485 l
-3796 2485 l
-3797 2485 m
-3978 2485 l
-3978 2486 l
-3797 2486 l
-3799 2486 m
-3977 2486 l
-3977 2487 l
-3799 2487 l
-3800 2487 m
-3976 2487 l
-3976 2488 l
-3800 2488 l
-3801 2488 m
-3975 2488 l
-3975 2489 l
-3801 2489 l
-3803 2489 m
-3975 2489 l
-3975 2490 l
-3803 2490 l
-3804 2490 m
-3974 2490 l
-3974 2491 l
-3804 2491 l
-3805 2491 m
-3973 2491 l
-3973 2492 l
-3805 2492 l
-3806 2492 m
-3972 2492 l
-3972 2493 l
-3806 2493 l
-3808 2493 m
-3972 2493 l
-3972 2494 l
-3808 2494 l
-3809 2494 m
-3971 2494 l
-3971 2495 l
-3809 2495 l
-3810 2495 m
-3970 2495 l
-3970 2496 l
-3810 2496 l
-3812 2496 m
-3969 2496 l
-3969 2497 l
-3812 2497 l
-3813 2497 m
-3969 2497 l
-3969 2498 l
-3813 2498 l
-3814 2498 m
-3968 2498 l
-3968 2499 l
-3814 2499 l
-3816 2499 m
-3967 2499 l
-3967 2500 l
-3816 2500 l
-3817 2500 m
-3966 2500 l
-3966 2501 l
-3817 2501 l
-3818 2501 m
-3965 2501 l
-3965 2502 l
-3818 2502 l
-3819 2502 m
-3965 2502 l
-3965 2503 l
-3819 2503 l
-3821 2503 m
-3964 2503 l
-3964 2504 l
-3821 2504 l
-3822 2504 m
-3963 2504 l
-3963 2505 l
-3822 2505 l
-3823 2505 m
-3962 2505 l
-3962 2506 l
-3823 2506 l
-3825 2506 m
-3962 2506 l
-3962 2507 l
-3825 2507 l
-3826 2507 m
-3961 2507 l
-3961 2508 l
-3826 2508 l
-3827 2508 m
-3960 2508 l
-3960 2509 l
-3827 2509 l
-3829 2509 m
-3959 2509 l
-3959 2510 l
-3829 2510 l
-3830 2510 m
-3959 2510 l
-3959 2511 l
-3830 2511 l
-3831 2511 m
-3958 2511 l
-3958 2512 l
-3831 2512 l
-3832 2512 m
-3957 2512 l
-3957 2513 l
-3832 2513 l
-3834 2513 m
-3956 2513 l
-3956 2514 l
-3834 2514 l
-3835 2514 m
-3956 2514 l
-3956 2515 l
-3835 2515 l
-3836 2515 m
-3955 2515 l
-3955 2516 l
-3836 2516 l
-3838 2516 m
-3954 2516 l
-3954 2517 l
-3838 2517 l
-3839 2517 m
-3953 2517 l
-3953 2518 l
-3839 2518 l
-3840 2518 m
-3953 2518 l
-3953 2519 l
-3840 2519 l
-3842 2519 m
-3952 2519 l
-3952 2520 l
-3842 2520 l
-3843 2520 m
-3951 2520 l
-3951 2521 l
-3843 2521 l
-3844 2521 m
-3950 2521 l
-3950 2522 l
-3844 2522 l
-3845 2522 m
-3950 2522 l
-3950 2523 l
-3845 2523 l
-3847 2523 m
-3949 2523 l
-3949 2524 l
-3847 2524 l
-3848 2524 m
-3948 2524 l
-3948 2525 l
-3848 2525 l
-3849 2525 m
-3947 2525 l
-3947 2526 l
-3849 2526 l
-3851 2526 m
-3946 2526 l
-3946 2527 l
-3851 2527 l
-3852 2527 m
-3946 2527 l
-3946 2528 l
-3852 2528 l
-3853 2528 m
-3945 2528 l
-3945 2529 l
-3853 2529 l
-3855 2529 m
-3944 2529 l
-3944 2530 l
-3855 2530 l
-3856 2530 m
-3943 2530 l
-3943 2531 l
-3856 2531 l
-3857 2531 m
-3943 2531 l
-3943 2532 l
-3857 2532 l
-3858 2532 m
-3942 2532 l
-3942 2533 l
-3858 2533 l
-3860 2533 m
-3941 2533 l
-3941 2534 l
-3860 2534 l
-3861 2534 m
-3940 2534 l
-3940 2535 l
-3861 2535 l
-3862 2535 m
-3940 2535 l
-3940 2536 l
-3862 2536 l
-3864 2536 m
-3939 2536 l
-3939 2537 l
-3864 2537 l
-3865 2537 m
-3938 2537 l
-3938 2538 l
-3865 2538 l
-3866 2538 m
-3937 2538 l
-3937 2539 l
-3866 2539 l
-3868 2539 m
-3937 2539 l
-3937 2540 l
-3868 2540 l
-3869 2540 m
-3936 2540 l
-3936 2541 l
-3869 2541 l
-3870 2541 m
-3935 2541 l
-3935 2542 l
-3870 2542 l
-3871 2542 m
-3934 2542 l
-3934 2543 l
-3871 2543 l
-3873 2543 m
-3934 2543 l
-3934 2544 l
-3873 2544 l
-3874 2544 m
-3933 2544 l
-3933 2545 l
-3874 2545 l
-3875 2545 m
-3932 2545 l
-3932 2546 l
-3875 2546 l
-3877 2546 m
-3931 2546 l
-3931 2547 l
-3877 2547 l
-3878 2547 m
-3931 2547 l
-3931 2548 l
-3878 2548 l
-3879 2548 m
-3930 2548 l
-3930 2549 l
-3879 2549 l
-3881 2549 m
-3929 2549 l
-3929 2550 l
-3881 2550 l
-3882 2550 m
-3928 2550 l
-3928 2551 l
-3882 2551 l
-3883 2551 m
-3927 2551 l
-3927 2552 l
-3883 2552 l
-3884 2552 m
-3927 2552 l
-3927 2553 l
-3884 2553 l
-3886 2553 m
-3926 2553 l
-3926 2554 l
-3886 2554 l
-3887 2554 m
-3925 2554 l
-3925 2555 l
-3887 2555 l
-3888 2555 m
-3924 2555 l
-3924 2556 l
-3888 2556 l
-3890 2556 m
-3924 2556 l
-3924 2557 l
-3890 2557 l
-3891 2557 m
-3923 2557 l
-3923 2558 l
-3891 2558 l
-3892 2558 m
-3922 2558 l
-3922 2559 l
-3892 2559 l
-3894 2559 m
-3921 2559 l
-3921 2560 l
-3894 2560 l
-3895 2560 m
-3921 2560 l
-3921 2561 l
-3895 2561 l
-3896 2561 m
-3920 2561 l
-3920 2562 l
-3896 2562 l
-3897 2562 m
-3919 2562 l
-3919 2563 l
-3897 2563 l
-3899 2563 m
-3918 2563 l
-3918 2564 l
-3899 2564 l
-3900 2564 m
-3918 2564 l
-3918 2565 l
-3900 2565 l
-3901 2565 m
-3917 2565 l
-3917 2566 l
-3901 2566 l
-3903 2566 m
-3916 2566 l
-3916 2567 l
-3903 2567 l
-3904 2567 m
-3915 2567 l
-3915 2568 l
-3904 2568 l
-3905 2568 m
-3915 2568 l
-3915 2569 l
-3905 2569 l
-3907 2569 m
-3914 2569 l
-3914 2570 l
-3907 2570 l
-3908 2570 m
-3913 2570 l
-3913 2571 l
-3908 2571 l
-3909 2571 m
-3912 2571 l
-3912 2572 l
-3909 2572 l
-Y
-3772.3 2312.9 m
-3699 2409 l
-3911 2572 l
-3984 2476 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3741 2394 m
-3739 2398 l
-3737 2407 l
-3738 2413 l
-3742 2421 l
-3755 2431 l
-3764 2433 l
-3770 2432 l
-3779 2428 l
-3784 2422 l
-3785 2412 l
-3786 2397 l
-3779 2339 l
-3825 2374 l
-S
-3838 2495 m
-3858 2400 l
-S
-3792 2459 m
-3838 2495 l
-S
-3878 2525 m
-3870 2514 l
-3871 2499 l
-3881 2480 l
-3888 2470 l
-3905 2456 l
-3919 2451 l
-3931 2456 l
-3938 2461 l
-3945 2472 l
-3944 2487 l
-3935 2506 l
-3927 2516 l
-3911 2530 l
-3897 2535 l
-3885 2530 l
-3878 2525 l
-S
-1 g
-4405 3855 m
-4409 3855 l
-4409 3856 l
-4405 3856 l
-4405 3856 m
-4412 3856 l
-4412 3857 l
-4405 3857 l
-4404 3857 m
-4415 3857 l
-4415 3858 l
-4404 3858 l
-4404 3858 m
-4418 3858 l
-4418 3859 l
-4404 3859 l
-4404 3859 m
-4421 3859 l
-4421 3860 l
-4404 3860 l
-4403 3860 m
-4424 3860 l
-4424 3861 l
-4403 3861 l
-4403 3861 m
-4427 3861 l
-4427 3862 l
-4403 3862 l
-4403 3862 m
-4429 3862 l
-4429 3863 l
-4403 3863 l
-4402 3863 m
-4432 3863 l
-4432 3864 l
-4402 3864 l
-4402 3864 m
-4435 3864 l
-4435 3865 l
-4402 3865 l
-4402 3865 m
-4438 3865 l
-4438 3866 l
-4402 3866 l
-4401 3866 m
-4441 3866 l
-4441 3867 l
-4401 3867 l
-4401 3867 m
-4444 3867 l
-4444 3868 l
-4401 3868 l
-4401 3868 m
-4447 3868 l
-4447 3869 l
-4401 3869 l
-4400 3869 m
-4449 3869 l
-4449 3870 l
-4400 3870 l
-4400 3870 m
-4452 3870 l
-4452 3871 l
-4400 3871 l
-4399 3871 m
-4455 3871 l
-4455 3872 l
-4399 3872 l
-4399 3872 m
-4458 3872 l
-4458 3873 l
-4399 3873 l
-4399 3873 m
-4461 3873 l
-4461 3874 l
-4399 3874 l
-4398 3874 m
-4464 3874 l
-4464 3875 l
-4398 3875 l
-4398 3875 m
-4467 3875 l
-4467 3876 l
-4398 3876 l
-4398 3876 m
-4469 3876 l
-4469 3877 l
-4398 3877 l
-4397 3877 m
-4472 3877 l
-4472 3878 l
-4397 3878 l
-4397 3878 m
-4475 3878 l
-4475 3879 l
-4397 3879 l
-4397 3879 m
-4478 3879 l
-4478 3880 l
-4397 3880 l
-4396 3880 m
-4481 3880 l
-4481 3881 l
-4396 3881 l
-4396 3881 m
-4484 3881 l
-4484 3882 l
-4396 3882 l
-4396 3882 m
-4487 3882 l
-4487 3883 l
-4396 3883 l
-4395 3883 m
-4489 3883 l
-4489 3884 l
-4395 3884 l
-4395 3884 m
-4492 3884 l
-4492 3885 l
-4395 3885 l
-4395 3885 m
-4495 3885 l
-4495 3886 l
-4395 3886 l
-4394 3886 m
-4498 3886 l
-4498 3887 l
-4394 3887 l
-4394 3887 m
-4501 3887 l
-4501 3888 l
-4394 3888 l
-4393 3888 m
-4504 3888 l
-4504 3889 l
-4393 3889 l
-4393 3889 m
-4507 3889 l
-4507 3890 l
-4393 3890 l
-4393 3890 m
-4509 3890 l
-4509 3891 l
-4393 3891 l
-4392 3891 m
-4512 3891 l
-4512 3892 l
-4392 3892 l
-4392 3892 m
-4515 3892 l
-4515 3893 l
-4392 3893 l
-4392 3893 m
-4518 3893 l
-4518 3894 l
-4392 3894 l
-4391 3894 m
-4521 3894 l
-4521 3895 l
-4391 3895 l
-4391 3895 m
-4521 3895 l
-4521 3897 l
-4391 3897 l
-4390 3897 m
-4520 3897 l
-4520 3899 l
-4390 3899 l
-4390 3899 m
-4519 3899 l
-4519 3900 l
-4390 3900 l
-4389 3900 m
-4519 3900 l
-4519 3902 l
-4389 3902 l
-4389 3902 m
-4518 3902 l
-4518 3903 l
-4389 3903 l
-4388 3903 m
-4518 3903 l
-4518 3905 l
-4388 3905 l
-4387 3905 m
-4517 3905 l
-4517 3908 l
-4387 3908 l
-4386 3908 m
-4516 3908 l
-4516 3911 l
-4386 3911 l
-4385 3911 m
-4515 3911 l
-4515 3914 l
-4385 3914 l
-4384 3914 m
-4514 3914 l
-4514 3917 l
-4384 3917 l
-4383 3917 m
-4513 3917 l
-4513 3919 l
-4383 3919 l
-4383 3919 m
-4512 3919 l
-4512 3920 l
-4383 3920 l
-4382 3920 m
-4512 3920 l
-4512 3922 l
-4382 3922 l
-4381 3922 m
-4511 3922 l
-4511 3925 l
-4381 3925 l
-4380 3925 m
-4510 3925 l
-4510 3928 l
-4380 3928 l
-4379 3928 m
-4509 3928 l
-4509 3931 l
-4379 3931 l
-4378 3931 m
-4508 3931 l
-4508 3934 l
-4378 3934 l
-4377 3934 m
-4507 3934 l
-4507 3937 l
-4377 3937 l
-4376 3937 m
-4506 3937 l
-4506 3939 l
-4376 3939 l
-4375 3939 m
-4505 3939 l
-4505 3942 l
-4375 3942 l
-4374 3942 m
-4504 3942 l
-4504 3945 l
-4374 3945 l
-4373 3945 m
-4503 3945 l
-4503 3948 l
-4373 3948 l
-4372 3948 m
-4502 3948 l
-4502 3951 l
-4372 3951 l
-4371 3951 m
-4501 3951 l
-4501 3954 l
-4371 3954 l
-4370 3954 m
-4500 3954 l
-4500 3956 l
-4370 3956 l
-4369 3956 m
-4500 3956 l
-4500 3957 l
-4369 3957 l
-4369 3957 m
-4499 3957 l
-4499 3959 l
-4369 3959 l
-4368 3959 m
-4498 3959 l
-4498 3962 l
-4368 3962 l
-4367 3962 m
-4497 3962 l
-4497 3965 l
-4367 3965 l
-4366 3965 m
-4496 3965 l
-4496 3968 l
-4366 3968 l
-4365 3968 m
-4495 3968 l
-4495 3971 l
-4365 3971 l
-4364 3971 m
-4494 3971 l
-4494 3973 l
-4364 3973 l
-4363 3973 m
-4494 3973 l
-4494 3974 l
-4363 3974 l
-4363 3974 m
-4493 3974 l
-4493 3976 l
-4363 3976 l
-4362 3976 m
-4492 3976 l
-4492 3979 l
-4362 3979 l
-4361 3979 m
-4491 3979 l
-4491 3982 l
-4361 3982 l
-4360 3982 m
-4490 3982 l
-4490 3985 l
-4360 3985 l
-4359 3985 m
-4489 3985 l
-4489 3988 l
-4359 3988 l
-4358 3988 m
-4488 3988 l
-4488 3990 l
-4358 3990 l
-4357 3990 m
-4488 3990 l
-4488 3991 l
-4357 3991 l
-4357 3991 m
-4487 3991 l
-4487 3993 l
-4357 3993 l
-4356 3993 m
-4487 3993 l
-4487 3994 l
-4356 3994 l
-4356 3994 m
-4486 3994 l
-4486 3996 l
-4356 3996 l
-4355 3996 m
-4485 3996 l
-4485 3999 l
-4355 3999 l
-4354 3999 m
-4484 3999 l
-4484 4002 l
-4354 4002 l
-4353 4002 m
-4483 4002 l
-4483 4005 l
-4353 4005 l
-4352 4005 m
-4482 4005 l
-4482 4007 l
-4352 4007 l
-4351 4007 m
-4482 4007 l
-4482 4008 l
-4351 4008 l
-4351 4008 m
-4481 4008 l
-4481 4010 l
-4351 4010 l
-4350 4010 m
-4481 4010 l
-4481 4011 l
-4350 4011 l
-4350 4011 m
-4480 4011 l
-4480 4013 l
-4350 4013 l
-4349 4013 m
-4480 4013 l
-4480 4014 l
-4349 4014 l
-4349 4014 m
-4479 4014 l
-4479 4016 l
-4349 4016 l
-4348 4016 m
-4478 4016 l
-4478 4019 l
-4348 4019 l
-4347 4019 m
-4477 4019 l
-4477 4022 l
-4347 4022 l
-4346 4022 m
-4476 4022 l
-4476 4024 l
-4346 4024 l
-4345 4024 m
-4476 4024 l
-4476 4025 l
-4345 4025 l
-4345 4025 m
-4475 4025 l
-4475 4027 l
-4345 4027 l
-4344 4027 m
-4475 4027 l
-4475 4028 l
-4344 4028 l
-4344 4028 m
-4474 4028 l
-4474 4030 l
-4344 4030 l
-4343 4030 m
-4474 4030 l
-4474 4031 l
-4343 4031 l
-4343 4031 m
-4473 4031 l
-4473 4033 l
-4343 4033 l
-4342 4033 m
-4472 4033 l
-4472 4036 l
-4342 4036 l
-4341 4036 m
-4471 4036 l
-4471 4039 l
-4341 4039 l
-4340 4039 m
-4470 4039 l
-4470 4041 l
-4340 4041 l
-4339 4041 m
-4470 4041 l
-4470 4042 l
-4339 4042 l
-4339 4042 m
-4469 4042 l
-4469 4044 l
-4339 4044 l
-4338 4044 m
-4469 4044 l
-4469 4045 l
-4338 4045 l
-4338 4045 m
-4468 4045 l
-4468 4047 l
-4338 4047 l
-4337 4047 m
-4468 4047 l
-4468 4048 l
-4337 4048 l
-4337 4048 m
-4467 4048 l
-4467 4050 l
-4337 4050 l
-4336 4050 m
-4467 4050 l
-4467 4051 l
-4336 4051 l
-4336 4051 m
-4466 4051 l
-4466 4053 l
-4336 4053 l
-4335 4053 m
-4465 4053 l
-4465 4056 l
-4335 4056 l
-4334 4056 m
-4464 4056 l
-4464 4058 l
-4334 4058 l
-4333 4058 m
-4464 4058 l
-4464 4059 l
-4333 4059 l
-4333 4059 m
-4463 4059 l
-4463 4061 l
-4333 4061 l
-4332 4061 m
-4463 4061 l
-4463 4062 l
-4332 4062 l
-4332 4062 m
-4462 4062 l
-4462 4064 l
-4332 4064 l
-4331 4064 m
-4462 4064 l
-4462 4065 l
-4331 4065 l
-4331 4065 m
-4461 4065 l
-4461 4067 l
-4331 4067 l
-4330 4067 m
-4461 4067 l
-4461 4068 l
-4330 4068 l
-4330 4068 m
-4460 4068 l
-4460 4070 l
-4330 4070 l
-4329 4070 m
-4460 4070 l
-4460 4071 l
-4329 4071 l
-4329 4071 m
-4459 4071 l
-4459 4073 l
-4329 4073 l
-4328 4073 m
-4458 4073 l
-4458 4075 l
-4328 4075 l
-4327 4075 m
-4458 4075 l
-4458 4076 l
-4327 4076 l
-4327 4076 m
-4457 4076 l
-4457 4078 l
-4327 4078 l
-4326 4078 m
-4457 4078 l
-4457 4079 l
-4326 4079 l
-4326 4079 m
-4456 4079 l
-4456 4081 l
-4326 4081 l
-4325 4081 m
-4456 4081 l
-4456 4082 l
-4325 4082 l
-4325 4082 m
-4455 4082 l
-4455 4084 l
-4325 4084 l
-4324 4084 m
-4455 4084 l
-4455 4085 l
-4324 4085 l
-4324 4085 m
-4454 4085 l
-4454 4087 l
-4324 4087 l
-4323 4087 m
-4454 4087 l
-4454 4088 l
-4323 4088 l
-4323 4088 m
-4453 4088 l
-4453 4090 l
-4323 4090 l
-4322 4090 m
-4452 4090 l
-4452 4092 l
-4322 4092 l
-4321 4092 m
-4452 4092 l
-4452 4093 l
-4321 4093 l
-4321 4093 m
-4451 4093 l
-4451 4095 l
-4321 4095 l
-4320 4095 m
-4451 4095 l
-4451 4096 l
-4320 4096 l
-4320 4096 m
-4450 4096 l
-4450 4098 l
-4320 4098 l
-4319 4098 m
-4450 4098 l
-4450 4099 l
-4319 4099 l
-4319 4099 m
-4449 4099 l
-4449 4101 l
-4319 4101 l
-4318 4101 m
-4449 4101 l
-4449 4102 l
-4318 4102 l
-4318 4102 m
-4448 4102 l
-4448 4104 l
-4318 4104 l
-4317 4104 m
-4448 4104 l
-4448 4105 l
-4317 4105 l
-4317 4105 m
-4447 4105 l
-4447 4107 l
-4317 4107 l
-4317 4107 m
-4447 4107 l
-4447 4108 l
-4317 4108 l
-4319 4108 m
-4446 4108 l
-4446 4109 l
-4319 4109 l
-4322 4109 m
-4446 4109 l
-4446 4110 l
-4322 4110 l
-4325 4110 m
-4445 4110 l
-4445 4111 l
-4325 4111 l
-4328 4111 m
-4445 4111 l
-4445 4112 l
-4328 4112 l
-4331 4112 m
-4445 4112 l
-4445 4113 l
-4331 4113 l
-4334 4113 m
-4444 4113 l
-4444 4114 l
-4334 4114 l
-4337 4114 m
-4444 4114 l
-4444 4115 l
-4337 4115 l
-4340 4115 m
-4444 4115 l
-4444 4116 l
-4340 4116 l
-4342 4116 m
-4443 4116 l
-4443 4117 l
-4342 4117 l
-4345 4117 m
-4443 4117 l
-4443 4118 l
-4345 4118 l
-4348 4118 m
-4443 4118 l
-4443 4119 l
-4348 4119 l
-4351 4119 m
-4442 4119 l
-4442 4120 l
-4351 4120 l
-4354 4120 m
-4442 4120 l
-4442 4121 l
-4354 4121 l
-4357 4121 m
-4442 4121 l
-4442 4122 l
-4357 4122 l
-4360 4122 m
-4441 4122 l
-4441 4123 l
-4360 4123 l
-4363 4123 m
-4441 4123 l
-4441 4124 l
-4363 4124 l
-4365 4124 m
-4441 4124 l
-4441 4125 l
-4365 4125 l
-4368 4125 m
-4440 4125 l
-4440 4126 l
-4368 4126 l
-4371 4126 m
-4440 4126 l
-4440 4127 l
-4371 4127 l
-4374 4127 m
-4440 4127 l
-4440 4128 l
-4374 4128 l
-4377 4128 m
-4439 4128 l
-4439 4129 l
-4377 4129 l
-4380 4129 m
-4439 4129 l
-4439 4130 l
-4380 4130 l
-4383 4130 m
-4438 4130 l
-4438 4131 l
-4383 4131 l
-4386 4131 m
-4438 4131 l
-4438 4132 l
-4386 4132 l
-4388 4132 m
-4438 4132 l
-4438 4133 l
-4388 4133 l
-4391 4133 m
-4437 4133 l
-4437 4134 l
-4391 4134 l
-4394 4134 m
-4437 4134 l
-4437 4135 l
-4394 4135 l
-4397 4135 m
-4437 4135 l
-4437 4136 l
-4397 4136 l
-4400 4136 m
-4436 4136 l
-4436 4137 l
-4400 4137 l
-4403 4137 m
-4436 4137 l
-4436 4138 l
-4403 4138 l
-4406 4138 m
-4436 4138 l
-4436 4139 l
-4406 4139 l
-4409 4139 m
-4435 4139 l
-4435 4140 l
-4409 4140 l
-4411 4140 m
-4435 4140 l
-4435 4141 l
-4411 4141 l
-4414 4141 m
-4435 4141 l
-4435 4142 l
-4414 4142 l
-4417 4142 m
-4434 4142 l
-4434 4143 l
-4417 4143 l
-4420 4143 m
-4434 4143 l
-4434 4144 l
-4420 4144 l
-4423 4144 m
-4434 4144 l
-4434 4145 l
-4423 4145 l
-4426 4145 m
-4433 4145 l
-4433 4146 l
-4426 4146 l
-4429 4146 m
-4433 4146 l
-4433 4147 l
-4429 4147 l
-Y
-4520.4 3895 m
-4406 3855 l
-4317 4107 l
-4432 4147 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4412 3888 m
-4397 3931 l
-4437 3919 l
-4433 3930 l
-4434 3940 l
-4436 3945 l
-4447 3953 l
-4455 3956 l
-4468 3956 l
-4478 3951 l
-4487 3941 l
-4491 3929 l
-4491 3916 l
-4488 3910 l
-4482 3904 l
-S
-4399 3976 m
-4392 3983 l
-4376 3990 l
-4459 4019 l
-S
-4343 4085 m
-4357 4045 l
-4393 4054 l
-4388 4057 l
-4380 4067 l
-4376 4079 l
-4376 4092 l
-4381 4103 l
-4391 4111 l
-4399 4113 l
-4412 4114 l
-4423 4109 l
-4431 4098 l
-4435 4086 l
-4435 4073 l
-4433 4068 l
-4426 4061 l
-S
-1 g
-2971 2971 m
-2974 2971 l
-2974 2972 l
-2971 2972 l
-2970 2972 m
-2976 2972 l
-2976 2973 l
-2970 2973 l
-2970 2973 m
-2978 2973 l
-2978 2974 l
-2970 2974 l
-2969 2974 m
-2980 2974 l
-2980 2975 l
-2969 2975 l
-2969 2975 m
-2982 2975 l
-2982 2976 l
-2969 2976 l
-2968 2976 m
-2984 2976 l
-2984 2977 l
-2968 2977 l
-2968 2977 m
-2985 2977 l
-2985 2978 l
-2968 2978 l
-2967 2978 m
-2987 2978 l
-2987 2979 l
-2967 2979 l
-2966 2979 m
-2989 2979 l
-2989 2980 l
-2966 2980 l
-2966 2980 m
-2991 2980 l
-2991 2981 l
-2966 2981 l
-2965 2981 m
-2993 2981 l
-2993 2982 l
-2965 2982 l
-2965 2982 m
-2994 2982 l
-2994 2983 l
-2965 2983 l
-2964 2983 m
-2996 2983 l
-2996 2984 l
-2964 2984 l
-2964 2984 m
-2998 2984 l
-2998 2985 l
-2964 2985 l
-2963 2985 m
-3000 2985 l
-3000 2986 l
-2963 2986 l
-2963 2986 m
-3002 2986 l
-3002 2987 l
-2963 2987 l
-2962 2987 m
-3003 2987 l
-3003 2988 l
-2962 2988 l
-2961 2988 m
-3005 2988 l
-3005 2989 l
-2961 2989 l
-2961 2989 m
-3007 2989 l
-3007 2990 l
-2961 2990 l
-2960 2990 m
-3009 2990 l
-3009 2991 l
-2960 2991 l
-2960 2991 m
-3011 2991 l
-3011 2992 l
-2960 2992 l
-2959 2992 m
-3013 2992 l
-3013 2993 l
-2959 2993 l
-2959 2993 m
-3014 2993 l
-3014 2994 l
-2959 2994 l
-2958 2994 m
-3016 2994 l
-3016 2995 l
-2958 2995 l
-2958 2995 m
-3018 2995 l
-3018 2996 l
-2958 2996 l
-2957 2996 m
-3020 2996 l
-3020 2997 l
-2957 2997 l
-2956 2997 m
-3022 2997 l
-3022 2998 l
-2956 2998 l
-2956 2998 m
-3023 2998 l
-3023 2999 l
-2956 2999 l
-2955 2999 m
-3025 2999 l
-3025 3000 l
-2955 3000 l
-2955 3000 m
-3027 3000 l
-3027 3001 l
-2955 3001 l
-2954 3001 m
-3029 3001 l
-3029 3002 l
-2954 3002 l
-2954 3002 m
-3031 3002 l
-3031 3003 l
-2954 3003 l
-2953 3003 m
-3032 3003 l
-3032 3004 l
-2953 3004 l
-2953 3004 m
-3034 3004 l
-3034 3005 l
-2953 3005 l
-2952 3005 m
-3036 3005 l
-3036 3006 l
-2952 3006 l
-2951 3006 m
-3038 3006 l
-3038 3007 l
-2951 3007 l
-2951 3007 m
-3040 3007 l
-3040 3008 l
-2951 3008 l
-2950 3008 m
-3042 3008 l
-3042 3009 l
-2950 3009 l
-2950 3009 m
-3043 3009 l
-3043 3010 l
-2950 3010 l
-2949 3010 m
-3045 3010 l
-3045 3011 l
-2949 3011 l
-2949 3011 m
-3047 3011 l
-3047 3012 l
-2949 3012 l
-2948 3012 m
-3049 3012 l
-3049 3013 l
-2948 3013 l
-2948 3013 m
-3051 3013 l
-3051 3014 l
-2948 3014 l
-2947 3014 m
-3052 3014 l
-3052 3015 l
-2947 3015 l
-2946 3015 m
-3054 3015 l
-3054 3016 l
-2946 3016 l
-2946 3016 m
-3056 3016 l
-3056 3017 l
-2946 3017 l
-2945 3017 m
-3058 3017 l
-3058 3018 l
-2945 3018 l
-2945 3018 m
-3060 3018 l
-3060 3019 l
-2945 3019 l
-2944 3019 m
-3061 3019 l
-3061 3020 l
-2944 3020 l
-2944 3020 m
-3063 3020 l
-3063 3021 l
-2944 3021 l
-2943 3021 m
-3065 3021 l
-3065 3022 l
-2943 3022 l
-2943 3022 m
-3067 3022 l
-3067 3023 l
-2943 3023 l
-2942 3023 m
-3069 3023 l
-3069 3024 l
-2942 3024 l
-2941 3024 m
-3071 3024 l
-3071 3025 l
-2941 3025 l
-2941 3025 m
-3072 3025 l
-3072 3026 l
-2941 3026 l
-2940 3026 m
-3074 3026 l
-3074 3027 l
-2940 3027 l
-2940 3027 m
-3076 3027 l
-3076 3028 l
-2940 3028 l
-2939 3028 m
-3078 3028 l
-3078 3029 l
-2939 3029 l
-2939 3029 m
-3080 3029 l
-3080 3030 l
-2939 3030 l
-2938 3030 m
-3081 3030 l
-3081 3031 l
-2938 3031 l
-2938 3031 m
-3083 3031 l
-3083 3032 l
-2938 3032 l
-2937 3032 m
-3085 3032 l
-3085 3033 l
-2937 3033 l
-2936 3033 m
-3087 3033 l
-3087 3034 l
-2936 3034 l
-2936 3034 m
-3089 3034 l
-3089 3035 l
-2936 3035 l
-2935 3035 m
-3090 3035 l
-3090 3036 l
-2935 3036 l
-2935 3036 m
-3092 3036 l
-3092 3037 l
-2935 3037 l
-2934 3037 m
-3094 3037 l
-3094 3038 l
-2934 3038 l
-2934 3038 m
-3096 3038 l
-3096 3039 l
-2934 3039 l
-2933 3039 m
-3098 3039 l
-3098 3040 l
-2933 3040 l
-2933 3040 m
-3099 3040 l
-3099 3041 l
-2933 3041 l
-2932 3041 m
-3101 3041 l
-3101 3042 l
-2932 3042 l
-2931 3042 m
-3103 3042 l
-3103 3043 l
-2931 3043 l
-2931 3043 m
-3105 3043 l
-3105 3044 l
-2931 3044 l
-2930 3044 m
-3107 3044 l
-3107 3045 l
-2930 3045 l
-2930 3045 m
-3109 3045 l
-3109 3046 l
-2930 3046 l
-2929 3046 m
-3110 3046 l
-3110 3047 l
-2929 3047 l
-2929 3047 m
-3112 3047 l
-3112 3048 l
-2929 3048 l
-2928 3048 m
-3114 3048 l
-3114 3049 l
-2928 3049 l
-2928 3049 m
-3116 3049 l
-3116 3050 l
-2928 3050 l
-2927 3050 m
-3118 3050 l
-3118 3051 l
-2927 3051 l
-2926 3051 m
-3119 3051 l
-3119 3052 l
-2926 3052 l
-2926 3052 m
-3121 3052 l
-3121 3053 l
-2926 3053 l
-2925 3053 m
-3123 3053 l
-3123 3054 l
-2925 3054 l
-2925 3054 m
-3125 3054 l
-3125 3055 l
-2925 3055 l
-2924 3055 m
-3127 3055 l
-3127 3056 l
-2924 3056 l
-2924 3056 m
-3128 3056 l
-3128 3057 l
-2924 3057 l
-2923 3057 m
-3130 3057 l
-3130 3058 l
-2923 3058 l
-2923 3058 m
-3132 3058 l
-3132 3059 l
-2923 3059 l
-2922 3059 m
-3134 3059 l
-3134 3060 l
-2922 3060 l
-2921 3060 m
-3136 3060 l
-3136 3061 l
-2921 3061 l
-2921 3061 m
-3138 3061 l
-3138 3062 l
-2921 3062 l
-2920 3062 m
-3139 3062 l
-3139 3063 l
-2920 3063 l
-2920 3063 m
-3141 3063 l
-3141 3064 l
-2920 3064 l
-2919 3064 m
-3143 3064 l
-3143 3065 l
-2919 3065 l
-2919 3065 m
-3145 3065 l
-3145 3066 l
-2919 3066 l
-2918 3066 m
-3147 3066 l
-3147 3067 l
-2918 3067 l
-2918 3067 m
-3148 3067 l
-3148 3068 l
-2918 3068 l
-2917 3068 m
-3150 3068 l
-3150 3069 l
-2917 3069 l
-2916 3069 m
-3152 3069 l
-3152 3070 l
-2916 3070 l
-2916 3070 m
-3154 3070 l
-3154 3071 l
-2916 3071 l
-2915 3071 m
-3156 3071 l
-3156 3072 l
-2915 3072 l
-2915 3072 m
-3157 3072 l
-3157 3073 l
-2915 3073 l
-2914 3073 m
-3159 3073 l
-3159 3074 l
-2914 3074 l
-2914 3074 m
-3161 3074 l
-3161 3075 l
-2914 3075 l
-2913 3075 m
-3163 3075 l
-3163 3076 l
-2913 3076 l
-2913 3076 m
-3165 3076 l
-3165 3077 l
-2913 3077 l
-2913 3077 m
-3167 3077 l
-3167 3078 l
-2913 3078 l
-2914 3078 m
-3168 3078 l
-3168 3079 l
-2914 3079 l
-2916 3079 m
-3170 3079 l
-3170 3080 l
-2916 3080 l
-2918 3080 m
-3172 3080 l
-3172 3081 l
-2918 3081 l
-2920 3081 m
-3174 3081 l
-3174 3082 l
-2920 3082 l
-2922 3082 m
-3176 3082 l
-3176 3083 l
-2922 3083 l
-2923 3083 m
-3177 3083 l
-3177 3084 l
-2923 3084 l
-2925 3084 m
-3179 3084 l
-3179 3085 l
-2925 3085 l
-2927 3085 m
-3181 3085 l
-3181 3086 l
-2927 3086 l
-2929 3086 m
-3183 3086 l
-3183 3087 l
-2929 3087 l
-2931 3087 m
-3185 3087 l
-3185 3088 l
-2931 3088 l
-2933 3088 m
-3186 3088 l
-3186 3089 l
-2933 3089 l
-2934 3089 m
-3188 3089 l
-3188 3090 l
-2934 3090 l
-2936 3090 m
-3190 3090 l
-3190 3091 l
-2936 3091 l
-2938 3091 m
-3192 3091 l
-3192 3092 l
-2938 3092 l
-2940 3092 m
-3194 3092 l
-3194 3093 l
-2940 3093 l
-2942 3093 m
-3196 3093 l
-3196 3094 l
-2942 3094 l
-2943 3094 m
-3197 3094 l
-3197 3095 l
-2943 3095 l
-2945 3095 m
-3199 3095 l
-3199 3096 l
-2945 3096 l
-2947 3096 m
-3201 3096 l
-3201 3097 l
-2947 3097 l
-2949 3097 m
-3203 3097 l
-3203 3098 l
-2949 3098 l
-2951 3098 m
-3205 3098 l
-3205 3099 l
-2951 3099 l
-2953 3099 m
-3206 3099 l
-3206 3100 l
-2953 3100 l
-2954 3100 m
-3208 3100 l
-3208 3101 l
-2954 3101 l
-2956 3101 m
-3210 3101 l
-3210 3102 l
-2956 3102 l
-2958 3102 m
-3212 3102 l
-3212 3103 l
-2958 3103 l
-2960 3103 m
-3214 3103 l
-3214 3104 l
-2960 3104 l
-2962 3104 m
-3215 3104 l
-3215 3105 l
-2962 3105 l
-2963 3105 m
-3217 3105 l
-3217 3106 l
-2963 3106 l
-2965 3106 m
-3219 3106 l
-3219 3107 l
-2965 3107 l
-2967 3107 m
-3221 3107 l
-3221 3108 l
-2967 3108 l
-2969 3108 m
-3223 3108 l
-3223 3109 l
-2969 3109 l
-2971 3109 m
-3224 3109 l
-3224 3110 l
-2971 3110 l
-2973 3110 m
-3224 3110 l
-3224 3111 l
-2973 3111 l
-2974 3111 m
-3224 3111 l
-3224 3112 l
-2974 3112 l
-2976 3112 m
-3223 3112 l
-3223 3113 l
-2976 3113 l
-2978 3113 m
-3223 3113 l
-3223 3114 l
-2978 3114 l
-2980 3114 m
-3222 3114 l
-3222 3115 l
-2980 3115 l
-2982 3115 m
-3222 3115 l
-3222 3116 l
-2982 3116 l
-2983 3116 m
-3221 3116 l
-3221 3117 l
-2983 3117 l
-2985 3117 m
-3221 3117 l
-3221 3118 l
-2985 3118 l
-2987 3118 m
-3220 3118 l
-3220 3119 l
-2987 3119 l
-2989 3119 m
-3220 3119 l
-3220 3120 l
-2989 3120 l
-2991 3120 m
-3219 3120 l
-3219 3121 l
-2991 3121 l
-2993 3121 m
-3218 3121 l
-3218 3122 l
-2993 3122 l
-2994 3122 m
-3218 3122 l
-3218 3123 l
-2994 3123 l
-2996 3123 m
-3217 3123 l
-3217 3124 l
-2996 3124 l
-2998 3124 m
-3217 3124 l
-3217 3125 l
-2998 3125 l
-3000 3125 m
-3216 3125 l
-3216 3126 l
-3000 3126 l
-3002 3126 m
-3216 3126 l
-3216 3127 l
-3002 3127 l
-3004 3127 m
-3215 3127 l
-3215 3128 l
-3004 3128 l
-3005 3128 m
-3215 3128 l
-3215 3129 l
-3005 3129 l
-3007 3129 m
-3214 3129 l
-3214 3130 l
-3007 3130 l
-3009 3130 m
-3214 3130 l
-3214 3131 l
-3009 3131 l
-3011 3131 m
-3213 3131 l
-3213 3132 l
-3011 3132 l
-3013 3132 m
-3212 3132 l
-3212 3133 l
-3013 3133 l
-3014 3133 m
-3212 3133 l
-3212 3134 l
-3014 3134 l
-3016 3134 m
-3211 3134 l
-3211 3135 l
-3016 3135 l
-3018 3135 m
-3211 3135 l
-3211 3136 l
-3018 3136 l
-3020 3136 m
-3210 3136 l
-3210 3137 l
-3020 3137 l
-3022 3137 m
-3210 3137 l
-3210 3138 l
-3022 3138 l
-3024 3138 m
-3209 3138 l
-3209 3139 l
-3024 3139 l
-3025 3139 m
-3209 3139 l
-3209 3140 l
-3025 3140 l
-3027 3140 m
-3208 3140 l
-3208 3141 l
-3027 3141 l
-3029 3141 m
-3208 3141 l
-3208 3142 l
-3029 3142 l
-3031 3142 m
-3207 3142 l
-3207 3143 l
-3031 3143 l
-3033 3143 m
-3206 3143 l
-3206 3144 l
-3033 3144 l
-3034 3144 m
-3206 3144 l
-3206 3145 l
-3034 3145 l
-3036 3145 m
-3205 3145 l
-3205 3146 l
-3036 3146 l
-3038 3146 m
-3205 3146 l
-3205 3147 l
-3038 3147 l
-3040 3147 m
-3204 3147 l
-3204 3148 l
-3040 3148 l
-3042 3148 m
-3204 3148 l
-3204 3149 l
-3042 3149 l
-3044 3149 m
-3203 3149 l
-3203 3150 l
-3044 3150 l
-3045 3150 m
-3203 3150 l
-3203 3151 l
-3045 3151 l
-3047 3151 m
-3202 3151 l
-3202 3152 l
-3047 3152 l
-3049 3152 m
-3202 3152 l
-3202 3153 l
-3049 3153 l
-3051 3153 m
-3201 3153 l
-3201 3154 l
-3051 3154 l
-3053 3154 m
-3200 3154 l
-3200 3155 l
-3053 3155 l
-3054 3155 m
-3200 3155 l
-3200 3156 l
-3054 3156 l
-3056 3156 m
-3199 3156 l
-3199 3157 l
-3056 3157 l
-3058 3157 m
-3199 3157 l
-3199 3158 l
-3058 3158 l
-3060 3158 m
-3198 3158 l
-3198 3159 l
-3060 3159 l
-3062 3159 m
-3198 3159 l
-3198 3160 l
-3062 3160 l
-3064 3160 m
-3197 3160 l
-3197 3161 l
-3064 3161 l
-3065 3161 m
-3197 3161 l
-3197 3162 l
-3065 3162 l
-3067 3162 m
-3196 3162 l
-3196 3163 l
-3067 3163 l
-3069 3163 m
-3195 3163 l
-3195 3164 l
-3069 3164 l
-3071 3164 m
-3195 3164 l
-3195 3165 l
-3071 3165 l
-3073 3165 m
-3194 3165 l
-3194 3166 l
-3073 3166 l
-3074 3166 m
-3194 3166 l
-3194 3167 l
-3074 3167 l
-3076 3167 m
-3193 3167 l
-3193 3168 l
-3076 3168 l
-3078 3168 m
-3193 3168 l
-3193 3169 l
-3078 3169 l
-3080 3169 m
-3192 3169 l
-3192 3170 l
-3080 3170 l
-3082 3170 m
-3192 3170 l
-3192 3171 l
-3082 3171 l
-3084 3171 m
-3191 3171 l
-3191 3172 l
-3084 3172 l
-3085 3172 m
-3191 3172 l
-3191 3173 l
-3085 3173 l
-3087 3173 m
-3190 3173 l
-3190 3174 l
-3087 3174 l
-3089 3174 m
-3189 3174 l
-3189 3175 l
-3089 3175 l
-3091 3175 m
-3189 3175 l
-3189 3176 l
-3091 3176 l
-3093 3176 m
-3188 3176 l
-3188 3177 l
-3093 3177 l
-3095 3177 m
-3188 3177 l
-3188 3178 l
-3095 3178 l
-3096 3178 m
-3187 3178 l
-3187 3179 l
-3096 3179 l
-3098 3179 m
-3187 3179 l
-3187 3180 l
-3098 3180 l
-3100 3180 m
-3186 3180 l
-3186 3181 l
-3100 3181 l
-3102 3181 m
-3186 3181 l
-3186 3182 l
-3102 3182 l
-3104 3182 m
-3185 3182 l
-3185 3183 l
-3104 3183 l
-3105 3183 m
-3185 3183 l
-3185 3184 l
-3105 3184 l
-3107 3184 m
-3184 3184 l
-3184 3185 l
-3107 3185 l
-3109 3185 m
-3183 3185 l
-3183 3186 l
-3109 3186 l
-3111 3186 m
-3183 3186 l
-3183 3187 l
-3111 3187 l
-3113 3187 m
-3182 3187 l
-3182 3188 l
-3113 3188 l
-3115 3188 m
-3182 3188 l
-3182 3189 l
-3115 3189 l
-3116 3189 m
-3181 3189 l
-3181 3190 l
-3116 3190 l
-3118 3190 m
-3181 3190 l
-3181 3191 l
-3118 3191 l
-3120 3191 m
-3180 3191 l
-3180 3192 l
-3120 3192 l
-3122 3192 m
-3180 3192 l
-3180 3193 l
-3122 3193 l
-3124 3193 m
-3179 3193 l
-3179 3194 l
-3124 3194 l
-3125 3194 m
-3179 3194 l
-3179 3195 l
-3125 3195 l
-3127 3195 m
-3178 3195 l
-3178 3196 l
-3127 3196 l
-3129 3196 m
-3177 3196 l
-3177 3197 l
-3129 3197 l
-3131 3197 m
-3177 3197 l
-3177 3198 l
-3131 3198 l
-3133 3198 m
-3176 3198 l
-3176 3199 l
-3133 3199 l
-3135 3199 m
-3176 3199 l
-3176 3200 l
-3135 3200 l
-3136 3200 m
-3175 3200 l
-3175 3201 l
-3136 3201 l
-3138 3201 m
-3175 3201 l
-3175 3202 l
-3138 3202 l
-3140 3202 m
-3174 3202 l
-3174 3203 l
-3140 3203 l
-3142 3203 m
-3174 3203 l
-3174 3204 l
-3142 3204 l
-3144 3204 m
-3173 3204 l
-3173 3205 l
-3144 3205 l
-3145 3205 m
-3173 3205 l
-3173 3206 l
-3145 3206 l
-3147 3206 m
-3172 3206 l
-3172 3207 l
-3147 3207 l
-3149 3207 m
-3171 3207 l
-3171 3208 l
-3149 3208 l
-3151 3208 m
-3171 3208 l
-3171 3209 l
-3151 3209 l
-3153 3209 m
-3170 3209 l
-3170 3210 l
-3153 3210 l
-3155 3210 m
-3170 3210 l
-3170 3211 l
-3155 3211 l
-3156 3211 m
-3169 3211 l
-3169 3212 l
-3156 3212 l
-3158 3212 m
-3169 3212 l
-3169 3213 l
-3158 3213 l
-3160 3213 m
-3168 3213 l
-3168 3214 l
-3160 3214 l
-3162 3214 m
-3168 3214 l
-3168 3215 l
-3162 3215 l
-3164 3215 m
-3167 3215 l
-3167 3216 l
-3164 3216 l
-Y
-2972 2970.9 m
-2913 3077 l
-3166 3216 l
-3224 3110 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2964 3028 m
-3030 3065 l
-S
-3093 3124 m
-3095 3111 l
-3092 3099 l
-3083 3090 l
-3079 3088 l
-3066 3085 l
-3055 3088 l
-3045 3097 l
-3043 3101 l
-3041 3114 l
-3044 3125 l
-3053 3135 l
-3057 3137 l
-3070 3139 l
-3081 3136 l
-3093 3124 l
-3103 3105 l
-3109 3085 l
-3108 3070 l
-3099 3060 l
-3092 3056 l
-3079 3054 l
-3071 3059 l
-S
-3126 3175 m
-3117 3166 l
-3116 3151 l
-3122 3130 l
-3128 3119 l
-3142 3103 l
-3156 3096 l
-3169 3099 l
-3176 3103 l
-3185 3112 l
-3186 3127 l
-3180 3148 l
-3174 3159 l
-3160 3175 l
-3146 3182 l
-3133 3179 l
-3126 3175 l
-S
-1 g
-3473 3317 m
-3476 3317 l
-3476 3318 l
-3473 3318 l
-3472 3318 m
-3476 3318 l
-3476 3319 l
-3472 3319 l
-3471 3319 m
-3477 3319 l
-3477 3320 l
-3471 3320 l
-3470 3320 m
-3478 3320 l
-3478 3321 l
-3470 3321 l
-3469 3321 m
-3479 3321 l
-3479 3322 l
-3469 3322 l
-3467 3322 m
-3480 3322 l
-3480 3323 l
-3467 3323 l
-3466 3323 m
-3480 3323 l
-3480 3324 l
-3466 3324 l
-3465 3324 m
-3481 3324 l
-3481 3325 l
-3465 3325 l
-3464 3325 m
-3482 3325 l
-3482 3326 l
-3464 3326 l
-3463 3326 m
-3483 3326 l
-3483 3327 l
-3463 3327 l
-3461 3327 m
-3484 3327 l
-3484 3328 l
-3461 3328 l
-3460 3328 m
-3485 3328 l
-3485 3329 l
-3460 3329 l
-3459 3329 m
-3485 3329 l
-3485 3330 l
-3459 3330 l
-3458 3330 m
-3486 3330 l
-3486 3331 l
-3458 3331 l
-3457 3331 m
-3487 3331 l
-3487 3332 l
-3457 3332 l
-3455 3332 m
-3488 3332 l
-3488 3333 l
-3455 3333 l
-3454 3333 m
-3489 3333 l
-3489 3334 l
-3454 3334 l
-3453 3334 m
-3490 3334 l
-3490 3335 l
-3453 3335 l
-3452 3335 m
-3490 3335 l
-3490 3336 l
-3452 3336 l
-3451 3336 m
-3491 3336 l
-3491 3337 l
-3451 3337 l
-3449 3337 m
-3492 3337 l
-3492 3338 l
-3449 3338 l
-3448 3338 m
-3493 3338 l
-3493 3339 l
-3448 3339 l
-3447 3339 m
-3494 3339 l
-3494 3340 l
-3447 3340 l
-3446 3340 m
-3494 3340 l
-3494 3341 l
-3446 3341 l
-3445 3341 m
-3495 3341 l
-3495 3342 l
-3445 3342 l
-3443 3342 m
-3496 3342 l
-3496 3343 l
-3443 3343 l
-3442 3343 m
-3497 3343 l
-3497 3344 l
-3442 3344 l
-3441 3344 m
-3498 3344 l
-3498 3345 l
-3441 3345 l
-3440 3345 m
-3499 3345 l
-3499 3346 l
-3440 3346 l
-3438 3346 m
-3499 3346 l
-3499 3347 l
-3438 3347 l
-3437 3347 m
-3500 3347 l
-3500 3348 l
-3437 3348 l
-3436 3348 m
-3501 3348 l
-3501 3349 l
-3436 3349 l
-3435 3349 m
-3502 3349 l
-3502 3350 l
-3435 3350 l
-3434 3350 m
-3503 3350 l
-3503 3351 l
-3434 3351 l
-3432 3351 m
-3504 3351 l
-3504 3352 l
-3432 3352 l
-3431 3352 m
-3504 3352 l
-3504 3353 l
-3431 3353 l
-3430 3353 m
-3505 3353 l
-3505 3354 l
-3430 3354 l
-3429 3354 m
-3506 3354 l
-3506 3355 l
-3429 3355 l
-3428 3355 m
-3507 3355 l
-3507 3356 l
-3428 3356 l
-3426 3356 m
-3508 3356 l
-3508 3357 l
-3426 3357 l
-3425 3357 m
-3508 3357 l
-3508 3358 l
-3425 3358 l
-3424 3358 m
-3509 3358 l
-3509 3359 l
-3424 3359 l
-3423 3359 m
-3510 3359 l
-3510 3360 l
-3423 3360 l
-3422 3360 m
-3511 3360 l
-3511 3361 l
-3422 3361 l
-3420 3361 m
-3512 3361 l
-3512 3362 l
-3420 3362 l
-3419 3362 m
-3513 3362 l
-3513 3363 l
-3419 3363 l
-3418 3363 m
-3513 3363 l
-3513 3364 l
-3418 3364 l
-3417 3364 m
-3514 3364 l
-3514 3365 l
-3417 3365 l
-3416 3365 m
-3515 3365 l
-3515 3366 l
-3416 3366 l
-3414 3366 m
-3516 3366 l
-3516 3367 l
-3414 3367 l
-3413 3367 m
-3517 3367 l
-3517 3368 l
-3413 3368 l
-3412 3368 m
-3518 3368 l
-3518 3369 l
-3412 3369 l
-3411 3369 m
-3518 3369 l
-3518 3370 l
-3411 3370 l
-3409 3370 m
-3519 3370 l
-3519 3371 l
-3409 3371 l
-3408 3371 m
-3520 3371 l
-3520 3372 l
-3408 3372 l
-3407 3372 m
-3521 3372 l
-3521 3373 l
-3407 3373 l
-3406 3373 m
-3522 3373 l
-3522 3374 l
-3406 3374 l
-3405 3374 m
-3522 3374 l
-3522 3375 l
-3405 3375 l
-3403 3375 m
-3523 3375 l
-3523 3376 l
-3403 3376 l
-3402 3376 m
-3524 3376 l
-3524 3377 l
-3402 3377 l
-3401 3377 m
-3525 3377 l
-3525 3378 l
-3401 3378 l
-3400 3378 m
-3526 3378 l
-3526 3379 l
-3400 3379 l
-3399 3379 m
-3527 3379 l
-3527 3380 l
-3399 3380 l
-3397 3380 m
-3527 3380 l
-3527 3381 l
-3397 3381 l
-3396 3381 m
-3528 3381 l
-3528 3382 l
-3396 3382 l
-3395 3382 m
-3529 3382 l
-3529 3383 l
-3395 3383 l
-3394 3383 m
-3530 3383 l
-3530 3384 l
-3394 3384 l
-3393 3384 m
-3531 3384 l
-3531 3385 l
-3393 3385 l
-3391 3385 m
-3532 3385 l
-3532 3386 l
-3391 3386 l
-3390 3386 m
-3532 3386 l
-3532 3387 l
-3390 3387 l
-3389 3387 m
-3533 3387 l
-3533 3388 l
-3389 3388 l
-3388 3388 m
-3534 3388 l
-3534 3389 l
-3388 3389 l
-3387 3389 m
-3535 3389 l
-3535 3390 l
-3387 3390 l
-3385 3390 m
-3536 3390 l
-3536 3391 l
-3385 3391 l
-3384 3391 m
-3537 3391 l
-3537 3392 l
-3384 3392 l
-3383 3392 m
-3537 3392 l
-3537 3393 l
-3383 3393 l
-3382 3393 m
-3538 3393 l
-3538 3394 l
-3382 3394 l
-3381 3394 m
-3539 3394 l
-3539 3395 l
-3381 3395 l
-3381 3395 m
-3540 3395 l
-3540 3396 l
-3381 3396 l
-3381 3396 m
-3541 3396 l
-3541 3397 l
-3381 3397 l
-3382 3397 m
-3541 3397 l
-3541 3398 l
-3382 3398 l
-3383 3398 m
-3542 3398 l
-3542 3399 l
-3383 3399 l
-3384 3399 m
-3543 3399 l
-3543 3400 l
-3384 3400 l
-3385 3400 m
-3544 3400 l
-3544 3401 l
-3385 3401 l
-3385 3401 m
-3545 3401 l
-3545 3402 l
-3385 3402 l
-3386 3402 m
-3546 3402 l
-3546 3403 l
-3386 3403 l
-3387 3403 m
-3546 3403 l
-3546 3404 l
-3387 3404 l
-3388 3404 m
-3547 3404 l
-3547 3405 l
-3388 3405 l
-3389 3405 m
-3548 3405 l
-3548 3406 l
-3389 3406 l
-3390 3406 m
-3549 3406 l
-3549 3407 l
-3390 3407 l
-3390 3407 m
-3550 3407 l
-3550 3408 l
-3390 3408 l
-3391 3408 m
-3551 3408 l
-3551 3409 l
-3391 3409 l
-3392 3409 m
-3551 3409 l
-3551 3410 l
-3392 3410 l
-3393 3410 m
-3552 3410 l
-3552 3411 l
-3393 3411 l
-3394 3411 m
-3553 3411 l
-3553 3412 l
-3394 3412 l
-3395 3412 m
-3554 3412 l
-3554 3413 l
-3395 3413 l
-3395 3413 m
-3555 3413 l
-3555 3414 l
-3395 3414 l
-3396 3414 m
-3555 3414 l
-3555 3415 l
-3396 3415 l
-3397 3415 m
-3556 3415 l
-3556 3416 l
-3397 3416 l
-3398 3416 m
-3557 3416 l
-3557 3417 l
-3398 3417 l
-3399 3417 m
-3558 3417 l
-3558 3418 l
-3399 3418 l
-3400 3418 m
-3559 3418 l
-3559 3419 l
-3400 3419 l
-3400 3419 m
-3560 3419 l
-3560 3420 l
-3400 3420 l
-3401 3420 m
-3560 3420 l
-3560 3421 l
-3401 3421 l
-3402 3421 m
-3561 3421 l
-3561 3422 l
-3402 3422 l
-3403 3422 m
-3562 3422 l
-3562 3423 l
-3403 3423 l
-3404 3423 m
-3563 3423 l
-3563 3424 l
-3404 3424 l
-3405 3424 m
-3564 3424 l
-3564 3425 l
-3405 3425 l
-3405 3425 m
-3565 3425 l
-3565 3426 l
-3405 3426 l
-3406 3426 m
-3565 3426 l
-3565 3427 l
-3406 3427 l
-3407 3427 m
-3566 3427 l
-3566 3428 l
-3407 3428 l
-3408 3428 m
-3567 3428 l
-3567 3429 l
-3408 3429 l
-3409 3429 m
-3568 3429 l
-3568 3430 l
-3409 3430 l
-3410 3430 m
-3569 3430 l
-3569 3432 l
-3410 3432 l
-3411 3432 m
-3570 3432 l
-3570 3433 l
-3411 3433 l
-3412 3433 m
-3571 3433 l
-3571 3434 l
-3412 3434 l
-3413 3434 m
-3572 3434 l
-3572 3435 l
-3413 3435 l
-3414 3435 m
-3573 3435 l
-3573 3436 l
-3414 3436 l
-3414 3436 m
-3574 3436 l
-3574 3437 l
-3414 3437 l
-3415 3437 m
-3574 3437 l
-3574 3438 l
-3415 3438 l
-3416 3438 m
-3575 3438 l
-3575 3439 l
-3416 3439 l
-3417 3439 m
-3576 3439 l
-3576 3440 l
-3417 3440 l
-3418 3440 m
-3577 3440 l
-3577 3441 l
-3418 3441 l
-3419 3441 m
-3578 3441 l
-3578 3442 l
-3419 3442 l
-3419 3442 m
-3579 3442 l
-3579 3443 l
-3419 3443 l
-3420 3443 m
-3579 3443 l
-3579 3444 l
-3420 3444 l
-3421 3444 m
-3580 3444 l
-3580 3445 l
-3421 3445 l
-3422 3445 m
-3581 3445 l
-3581 3446 l
-3422 3446 l
-3423 3446 m
-3582 3446 l
-3582 3447 l
-3423 3447 l
-3424 3447 m
-3583 3447 l
-3583 3449 l
-3424 3449 l
-3425 3449 m
-3584 3449 l
-3584 3450 l
-3425 3450 l
-3426 3450 m
-3585 3450 l
-3585 3451 l
-3426 3451 l
-3427 3451 m
-3586 3451 l
-3586 3452 l
-3427 3452 l
-3428 3452 m
-3587 3452 l
-3587 3453 l
-3428 3453 l
-3429 3453 m
-3588 3453 l
-3588 3455 l
-3429 3455 l
-3430 3455 m
-3589 3455 l
-3589 3456 l
-3430 3456 l
-3431 3456 m
-3590 3456 l
-3590 3457 l
-3431 3457 l
-3432 3457 m
-3591 3457 l
-3591 3458 l
-3432 3458 l
-3433 3458 m
-3592 3458 l
-3592 3459 l
-3433 3459 l
-3434 3459 m
-3593 3459 l
-3593 3461 l
-3434 3461 l
-3435 3461 m
-3594 3461 l
-3594 3462 l
-3435 3462 l
-3436 3462 m
-3595 3462 l
-3595 3463 l
-3436 3463 l
-3437 3463 m
-3596 3463 l
-3596 3464 l
-3437 3464 l
-3438 3464 m
-3597 3464 l
-3597 3465 l
-3438 3465 l
-3439 3465 m
-3598 3465 l
-3598 3467 l
-3439 3467 l
-3440 3467 m
-3599 3467 l
-3599 3468 l
-3440 3468 l
-3441 3468 m
-3600 3468 l
-3600 3469 l
-3441 3469 l
-3442 3469 m
-3601 3469 l
-3601 3470 l
-3442 3470 l
-3443 3470 m
-3602 3470 l
-3602 3472 l
-3443 3472 l
-3444 3472 m
-3603 3472 l
-3603 3473 l
-3444 3473 l
-3445 3473 m
-3604 3473 l
-3604 3474 l
-3445 3474 l
-3446 3474 m
-3605 3474 l
-3605 3475 l
-3446 3475 l
-3447 3475 m
-3606 3475 l
-3606 3476 l
-3447 3476 l
-3448 3476 m
-3607 3476 l
-3607 3478 l
-3448 3478 l
-3449 3478 m
-3608 3478 l
-3608 3479 l
-3449 3479 l
-3450 3479 m
-3609 3479 l
-3609 3480 l
-3450 3480 l
-3451 3480 m
-3610 3480 l
-3610 3481 l
-3451 3481 l
-3452 3481 m
-3611 3481 l
-3611 3482 l
-3452 3482 l
-3453 3482 m
-3612 3482 l
-3612 3484 l
-3453 3484 l
-3454 3484 m
-3613 3484 l
-3613 3485 l
-3454 3485 l
-3455 3485 m
-3614 3485 l
-3614 3486 l
-3455 3486 l
-3456 3486 m
-3615 3486 l
-3615 3487 l
-3456 3487 l
-3457 3487 m
-3616 3487 l
-3616 3488 l
-3457 3488 l
-3458 3488 m
-3616 3488 l
-3616 3489 l
-3458 3489 l
-3458 3489 m
-3617 3489 l
-3617 3490 l
-3458 3490 l
-3459 3490 m
-3618 3490 l
-3618 3491 l
-3459 3491 l
-3460 3491 m
-3619 3491 l
-3619 3492 l
-3460 3492 l
-3461 3492 m
-3620 3492 l
-3620 3493 l
-3461 3493 l
-3462 3493 m
-3621 3493 l
-3621 3494 l
-3462 3494 l
-3463 3494 m
-3621 3494 l
-3621 3495 l
-3463 3495 l
-3463 3495 m
-3622 3495 l
-3622 3496 l
-3463 3496 l
-3464 3496 m
-3623 3496 l
-3623 3497 l
-3464 3497 l
-3465 3497 m
-3624 3497 l
-3624 3498 l
-3465 3498 l
-3466 3498 m
-3625 3498 l
-3625 3499 l
-3466 3499 l
-3467 3499 m
-3626 3499 l
-3626 3500 l
-3467 3500 l
-3468 3500 m
-3626 3500 l
-3626 3501 l
-3468 3501 l
-3468 3501 m
-3627 3501 l
-3627 3502 l
-3468 3502 l
-3469 3502 m
-3628 3502 l
-3628 3503 l
-3469 3503 l
-3470 3503 m
-3629 3503 l
-3629 3504 l
-3470 3504 l
-3471 3504 m
-3630 3504 l
-3630 3505 l
-3471 3505 l
-3472 3505 m
-3630 3505 l
-3630 3506 l
-3472 3506 l
-3473 3506 m
-3631 3506 l
-3631 3507 l
-3473 3507 l
-3473 3507 m
-3632 3507 l
-3632 3508 l
-3473 3508 l
-3474 3508 m
-3633 3508 l
-3633 3509 l
-3474 3509 l
-3475 3509 m
-3634 3509 l
-3634 3510 l
-3475 3510 l
-3476 3510 m
-3635 3510 l
-3635 3511 l
-3476 3511 l
-3477 3511 m
-3635 3511 l
-3635 3512 l
-3477 3512 l
-3477 3512 m
-3636 3512 l
-3636 3513 l
-3477 3513 l
-3478 3513 m
-3637 3513 l
-3637 3514 l
-3478 3514 l
-3479 3514 m
-3638 3514 l
-3638 3515 l
-3479 3515 l
-3480 3515 m
-3639 3515 l
-3639 3516 l
-3480 3516 l
-3481 3516 m
-3640 3516 l
-3640 3517 l
-3481 3517 l
-3482 3517 m
-3640 3517 l
-3640 3518 l
-3482 3518 l
-3482 3518 m
-3641 3518 l
-3641 3519 l
-3482 3519 l
-3483 3519 m
-3642 3519 l
-3642 3520 l
-3483 3520 l
-3484 3520 m
-3643 3520 l
-3643 3521 l
-3484 3521 l
-3485 3521 m
-3644 3521 l
-3644 3522 l
-3485 3522 l
-3486 3522 m
-3644 3522 l
-3644 3523 l
-3486 3523 l
-3487 3523 m
-3645 3523 l
-3645 3524 l
-3487 3524 l
-3487 3524 m
-3646 3524 l
-3646 3525 l
-3487 3525 l
-3488 3525 m
-3647 3525 l
-3647 3526 l
-3488 3526 l
-3489 3526 m
-3648 3526 l
-3648 3527 l
-3489 3527 l
-3490 3527 m
-3649 3527 l
-3649 3528 l
-3490 3528 l
-3491 3528 m
-3649 3528 l
-3649 3529 l
-3491 3529 l
-3492 3529 m
-3650 3529 l
-3650 3530 l
-3492 3530 l
-3492 3530 m
-3651 3530 l
-3651 3531 l
-3492 3531 l
-3493 3531 m
-3652 3531 l
-3652 3532 l
-3493 3532 l
-3494 3532 m
-3653 3532 l
-3653 3533 l
-3494 3533 l
-3495 3533 m
-3654 3533 l
-3654 3534 l
-3495 3534 l
-3496 3534 m
-3654 3534 l
-3654 3535 l
-3496 3535 l
-3497 3535 m
-3655 3535 l
-3655 3536 l
-3497 3536 l
-3497 3536 m
-3656 3536 l
-3656 3537 l
-3497 3537 l
-3498 3537 m
-3657 3537 l
-3657 3538 l
-3498 3538 l
-3499 3538 m
-3658 3538 l
-3658 3539 l
-3499 3539 l
-3500 3539 m
-3658 3539 l
-3658 3540 l
-3500 3540 l
-3501 3540 m
-3659 3540 l
-3659 3541 l
-3501 3541 l
-3502 3541 m
-3657 3541 l
-3657 3542 l
-3502 3542 l
-3502 3542 m
-3656 3542 l
-3656 3543 l
-3502 3543 l
-3503 3543 m
-3655 3543 l
-3655 3544 l
-3503 3544 l
-3504 3544 m
-3654 3544 l
-3654 3545 l
-3504 3545 l
-3505 3545 m
-3652 3545 l
-3652 3546 l
-3505 3546 l
-3506 3546 m
-3651 3546 l
-3651 3547 l
-3506 3547 l
-3506 3547 m
-3650 3547 l
-3650 3548 l
-3506 3548 l
-3507 3548 m
-3649 3548 l
-3649 3549 l
-3507 3549 l
-3508 3549 m
-3648 3549 l
-3648 3550 l
-3508 3550 l
-3509 3550 m
-3646 3550 l
-3646 3551 l
-3509 3551 l
-3510 3551 m
-3645 3551 l
-3645 3552 l
-3510 3552 l
-3511 3552 m
-3644 3552 l
-3644 3553 l
-3511 3553 l
-3511 3553 m
-3643 3553 l
-3643 3554 l
-3511 3554 l
-3512 3554 m
-3642 3554 l
-3642 3555 l
-3512 3555 l
-3513 3555 m
-3640 3555 l
-3640 3556 l
-3513 3556 l
-3514 3556 m
-3639 3556 l
-3639 3557 l
-3514 3557 l
-3515 3557 m
-3638 3557 l
-3638 3558 l
-3515 3558 l
-3516 3558 m
-3637 3558 l
-3637 3559 l
-3516 3559 l
-3516 3559 m
-3636 3559 l
-3636 3560 l
-3516 3560 l
-3517 3560 m
-3634 3560 l
-3634 3561 l
-3517 3561 l
-3518 3561 m
-3633 3561 l
-3633 3562 l
-3518 3562 l
-3519 3562 m
-3632 3562 l
-3632 3563 l
-3519 3563 l
-3520 3563 m
-3631 3563 l
-3631 3564 l
-3520 3564 l
-3521 3564 m
-3630 3564 l
-3630 3565 l
-3521 3565 l
-3521 3565 m
-3628 3565 l
-3628 3566 l
-3521 3566 l
-3522 3566 m
-3627 3566 l
-3627 3567 l
-3522 3567 l
-3523 3567 m
-3626 3567 l
-3626 3568 l
-3523 3568 l
-3524 3568 m
-3625 3568 l
-3625 3569 l
-3524 3569 l
-3525 3569 m
-3623 3569 l
-3623 3570 l
-3525 3570 l
-3526 3570 m
-3622 3570 l
-3622 3571 l
-3526 3571 l
-3526 3571 m
-3621 3571 l
-3621 3572 l
-3526 3572 l
-3527 3572 m
-3620 3572 l
-3620 3573 l
-3527 3573 l
-3528 3573 m
-3619 3573 l
-3619 3574 l
-3528 3574 l
-3529 3574 m
-3617 3574 l
-3617 3575 l
-3529 3575 l
-3530 3575 m
-3616 3575 l
-3616 3576 l
-3530 3576 l
-3531 3576 m
-3615 3576 l
-3615 3577 l
-3531 3577 l
-3531 3577 m
-3614 3577 l
-3614 3578 l
-3531 3578 l
-3532 3578 m
-3613 3578 l
-3613 3579 l
-3532 3579 l
-3533 3579 m
-3611 3579 l
-3611 3580 l
-3533 3580 l
-3534 3580 m
-3610 3580 l
-3610 3581 l
-3534 3581 l
-3535 3581 m
-3609 3581 l
-3609 3582 l
-3535 3582 l
-3535 3582 m
-3608 3582 l
-3608 3583 l
-3535 3583 l
-3536 3583 m
-3607 3583 l
-3607 3584 l
-3536 3584 l
-3537 3584 m
-3605 3584 l
-3605 3585 l
-3537 3585 l
-3538 3585 m
-3604 3585 l
-3604 3586 l
-3538 3586 l
-3539 3586 m
-3603 3586 l
-3603 3587 l
-3539 3587 l
-3540 3587 m
-3602 3587 l
-3602 3588 l
-3540 3588 l
-3540 3588 m
-3601 3588 l
-3601 3589 l
-3540 3589 l
-3541 3589 m
-3599 3589 l
-3599 3590 l
-3541 3590 l
-3542 3590 m
-3598 3590 l
-3598 3591 l
-3542 3591 l
-3543 3591 m
-3597 3591 l
-3597 3592 l
-3543 3592 l
-3544 3592 m
-3596 3592 l
-3596 3593 l
-3544 3593 l
-3545 3593 m
-3594 3593 l
-3594 3594 l
-3545 3594 l
-3545 3594 m
-3593 3594 l
-3593 3595 l
-3545 3595 l
-3546 3595 m
-3592 3595 l
-3592 3596 l
-3546 3596 l
-3547 3596 m
-3591 3596 l
-3591 3597 l
-3547 3597 l
-3548 3597 m
-3590 3597 l
-3590 3598 l
-3548 3598 l
-3549 3598 m
-3588 3598 l
-3588 3599 l
-3549 3599 l
-3550 3599 m
-3587 3599 l
-3587 3600 l
-3550 3600 l
-3550 3600 m
-3586 3600 l
-3586 3601 l
-3550 3601 l
-3551 3601 m
-3585 3601 l
-3585 3602 l
-3551 3602 l
-3552 3602 m
-3584 3602 l
-3584 3603 l
-3552 3603 l
-3553 3603 m
-3582 3603 l
-3582 3604 l
-3553 3604 l
-3554 3604 m
-3581 3604 l
-3581 3605 l
-3554 3605 l
-3555 3605 m
-3580 3605 l
-3580 3606 l
-3555 3606 l
-3555 3606 m
-3579 3606 l
-3579 3607 l
-3555 3607 l
-3556 3607 m
-3578 3607 l
-3578 3608 l
-3556 3608 l
-3557 3608 m
-3576 3608 l
-3576 3609 l
-3557 3609 l
-3558 3609 m
-3575 3609 l
-3575 3610 l
-3558 3610 l
-3559 3610 m
-3574 3610 l
-3574 3611 l
-3559 3611 l
-3560 3611 m
-3573 3611 l
-3573 3612 l
-3560 3612 l
-3560 3612 m
-3572 3612 l
-3572 3613 l
-3560 3613 l
-3561 3613 m
-3570 3613 l
-3570 3614 l
-3561 3614 l
-3562 3614 m
-3569 3614 l
-3569 3615 l
-3562 3615 l
-3563 3615 m
-3568 3615 l
-3568 3616 l
-3563 3616 l
-3564 3616 m
-3567 3616 l
-3567 3617 l
-3564 3617 l
-Y
-3474.6 3317.5 m
-3381 3395 l
-3565 3617 l
-3658 3540 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3446 3368 m
-3494 3426 l
-S
-3518 3515 m
-3509 3517 l
-3498 3510 l
-3492 3503 l
-3488 3491 l
-3492 3476 l
-3505 3460 l
-3522 3447 l
-3537 3439 l
-3549 3440 l
-3560 3447 l
-3563 3451 l
-3567 3463 l
-3566 3475 l
-3559 3486 l
-3556 3488 l
-3544 3493 l
-3532 3492 l
-3521 3485 l
-3518 3482 l
-3513 3470 l
-3515 3458 l
-3522 3447 l
-S
-3543 3564 m
-3538 3552 l
-3542 3538 l
-3556 3521 l
-3566 3513 l
-3584 3503 l
-3599 3502 l
-3611 3509 l
-3616 3515 l
-3621 3527 l
-3616 3542 l
-3603 3558 l
-3593 3566 l
-3574 3576 l
-3559 3578 l
-3548 3571 l
-3543 3564 l
-S
-1 g
-3809 3828 m
-3815 3828 l
-3815 3829 l
-3809 3829 l
-3806 3829 m
-3816 3829 l
-3816 3830 l
-3806 3830 l
-3803 3830 m
-3816 3830 l
-3816 3831 l
-3803 3831 l
-3799 3831 m
-3816 3831 l
-3816 3832 l
-3799 3832 l
-3796 3832 m
-3816 3832 l
-3816 3833 l
-3796 3833 l
-3793 3833 m
-3817 3833 l
-3817 3834 l
-3793 3834 l
-3789 3834 m
-3817 3834 l
-3817 3835 l
-3789 3835 l
-3786 3835 m
-3817 3835 l
-3817 3836 l
-3786 3836 l
-3782 3836 m
-3818 3836 l
-3818 3837 l
-3782 3837 l
-3779 3837 m
-3818 3837 l
-3818 3838 l
-3779 3838 l
-3776 3838 m
-3818 3838 l
-3818 3839 l
-3776 3839 l
-3772 3839 m
-3819 3839 l
-3819 3840 l
-3772 3840 l
-3769 3840 m
-3819 3840 l
-3819 3841 l
-3769 3841 l
-3765 3841 m
-3819 3841 l
-3819 3842 l
-3765 3842 l
-3762 3842 m
-3819 3842 l
-3819 3843 l
-3762 3843 l
-3759 3843 m
-3820 3843 l
-3820 3844 l
-3759 3844 l
-3755 3844 m
-3820 3844 l
-3820 3845 l
-3755 3845 l
-3752 3845 m
-3820 3845 l
-3820 3846 l
-3752 3846 l
-3748 3846 m
-3821 3846 l
-3821 3847 l
-3748 3847 l
-3745 3847 m
-3821 3847 l
-3821 3848 l
-3745 3848 l
-3742 3848 m
-3821 3848 l
-3821 3849 l
-3742 3849 l
-3738 3849 m
-3822 3849 l
-3822 3850 l
-3738 3850 l
-3735 3850 m
-3822 3850 l
-3822 3851 l
-3735 3851 l
-3731 3851 m
-3822 3851 l
-3822 3852 l
-3731 3852 l
-3728 3852 m
-3822 3852 l
-3822 3853 l
-3728 3853 l
-3725 3853 m
-3823 3853 l
-3823 3854 l
-3725 3854 l
-3721 3854 m
-3823 3854 l
-3823 3855 l
-3721 3855 l
-3718 3855 m
-3823 3855 l
-3823 3856 l
-3718 3856 l
-3714 3856 m
-3824 3856 l
-3824 3857 l
-3714 3857 l
-3711 3857 m
-3824 3857 l
-3824 3858 l
-3711 3858 l
-3708 3858 m
-3824 3858 l
-3824 3859 l
-3708 3859 l
-3704 3859 m
-3825 3859 l
-3825 3860 l
-3704 3860 l
-3701 3860 m
-3825 3860 l
-3825 3861 l
-3701 3861 l
-3698 3861 m
-3825 3861 l
-3825 3862 l
-3698 3862 l
-3698 3862 m
-3825 3862 l
-3825 3863 l
-3698 3863 l
-3698 3863 m
-3826 3863 l
-3826 3866 l
-3698 3866 l
-3699 3866 m
-3827 3866 l
-3827 3869 l
-3699 3869 l
-3700 3869 m
-3828 3869 l
-3828 3873 l
-3700 3873 l
-3701 3873 m
-3829 3873 l
-3829 3876 l
-3701 3876 l
-3702 3876 m
-3830 3876 l
-3830 3879 l
-3702 3879 l
-3703 3879 m
-3831 3879 l
-3831 3883 l
-3703 3883 l
-3704 3883 m
-3832 3883 l
-3832 3886 l
-3704 3886 l
-3705 3886 m
-3833 3886 l
-3833 3889 l
-3705 3889 l
-3706 3889 m
-3834 3889 l
-3834 3893 l
-3706 3893 l
-3707 3893 m
-3835 3893 l
-3835 3896 l
-3707 3896 l
-3708 3896 m
-3836 3896 l
-3836 3899 l
-3708 3899 l
-3709 3899 m
-3837 3899 l
-3837 3903 l
-3709 3903 l
-3710 3903 m
-3838 3903 l
-3838 3906 l
-3710 3906 l
-3711 3906 m
-3839 3906 l
-3839 3909 l
-3711 3909 l
-3712 3909 m
-3840 3909 l
-3840 3913 l
-3712 3913 l
-3713 3913 m
-3841 3913 l
-3841 3916 l
-3713 3916 l
-3714 3916 m
-3842 3916 l
-3842 3919 l
-3714 3919 l
-3715 3919 m
-3842 3919 l
-3842 3920 l
-3715 3920 l
-3715 3920 m
-3843 3920 l
-3843 3923 l
-3715 3923 l
-3716 3923 m
-3844 3923 l
-3844 3926 l
-3716 3926 l
-3717 3926 m
-3845 3926 l
-3845 3929 l
-3717 3929 l
-3718 3929 m
-3845 3929 l
-3845 3930 l
-3718 3930 l
-3718 3930 m
-3846 3930 l
-3846 3933 l
-3718 3933 l
-3719 3933 m
-3847 3933 l
-3847 3936 l
-3719 3936 l
-3720 3936 m
-3848 3936 l
-3848 3939 l
-3720 3939 l
-3721 3939 m
-3848 3939 l
-3848 3940 l
-3721 3940 l
-3721 3940 m
-3849 3940 l
-3849 3943 l
-3721 3943 l
-3722 3943 m
-3850 3943 l
-3850 3946 l
-3722 3946 l
-3723 3946 m
-3851 3946 l
-3851 3949 l
-3723 3949 l
-3724 3949 m
-3851 3949 l
-3851 3950 l
-3724 3950 l
-3724 3950 m
-3852 3950 l
-3852 3953 l
-3724 3953 l
-3725 3953 m
-3853 3953 l
-3853 3956 l
-3725 3956 l
-3726 3956 m
-3854 3956 l
-3854 3959 l
-3726 3959 l
-3727 3959 m
-3854 3959 l
-3854 3960 l
-3727 3960 l
-3727 3960 m
-3855 3960 l
-3855 3963 l
-3727 3963 l
-3728 3963 m
-3856 3963 l
-3856 3966 l
-3728 3966 l
-3729 3966 m
-3857 3966 l
-3857 3969 l
-3729 3969 l
-3730 3969 m
-3857 3969 l
-3857 3970 l
-3730 3970 l
-3730 3970 m
-3858 3970 l
-3858 3973 l
-3730 3973 l
-3731 3973 m
-3859 3973 l
-3859 3976 l
-3731 3976 l
-3732 3976 m
-3860 3976 l
-3860 3979 l
-3732 3979 l
-3733 3979 m
-3860 3979 l
-3860 3980 l
-3733 3980 l
-3733 3980 m
-3861 3980 l
-3861 3983 l
-3733 3983 l
-3734 3983 m
-3862 3983 l
-3862 3986 l
-3734 3986 l
-3735 3986 m
-3863 3986 l
-3863 3989 l
-3735 3989 l
-3736 3989 m
-3863 3989 l
-3863 3990 l
-3736 3990 l
-3736 3990 m
-3864 3990 l
-3864 3993 l
-3736 3993 l
-3737 3993 m
-3865 3993 l
-3865 3996 l
-3737 3996 l
-3738 3996 m
-3866 3996 l
-3866 3999 l
-3738 3999 l
-3739 3999 m
-3866 3999 l
-3866 4000 l
-3739 4000 l
-3739 4000 m
-3867 4000 l
-3867 4003 l
-3739 4003 l
-3740 4003 m
-3868 4003 l
-3868 4006 l
-3740 4006 l
-3741 4006 m
-3869 4006 l
-3869 4009 l
-3741 4009 l
-3742 4009 m
-3869 4009 l
-3869 4010 l
-3742 4010 l
-3742 4010 m
-3870 4010 l
-3870 4013 l
-3742 4013 l
-3743 4013 m
-3871 4013 l
-3871 4016 l
-3743 4016 l
-3744 4016 m
-3871 4016 l
-3871 4017 l
-3744 4017 l
-3744 4017 m
-3872 4017 l
-3872 4019 l
-3744 4019 l
-3745 4019 m
-3872 4019 l
-3872 4020 l
-3745 4020 l
-3745 4020 m
-3873 4020 l
-3873 4023 l
-3745 4023 l
-3746 4023 m
-3874 4023 l
-3874 4026 l
-3746 4026 l
-3747 4026 m
-3874 4026 l
-3874 4027 l
-3747 4027 l
-3747 4027 m
-3875 4027 l
-3875 4029 l
-3747 4029 l
-3748 4029 m
-3875 4029 l
-3875 4030 l
-3748 4030 l
-3748 4030 m
-3876 4030 l
-3876 4033 l
-3748 4033 l
-3749 4033 m
-3877 4033 l
-3877 4036 l
-3749 4036 l
-3750 4036 m
-3877 4036 l
-3877 4037 l
-3750 4037 l
-3750 4037 m
-3878 4037 l
-3878 4039 l
-3750 4039 l
-3751 4039 m
-3878 4039 l
-3878 4040 l
-3751 4040 l
-3751 4040 m
-3879 4040 l
-3879 4043 l
-3751 4043 l
-3752 4043 m
-3880 4043 l
-3880 4046 l
-3752 4046 l
-3753 4046 m
-3880 4046 l
-3880 4047 l
-3753 4047 l
-3753 4047 m
-3881 4047 l
-3881 4049 l
-3753 4049 l
-3754 4049 m
-3881 4049 l
-3881 4050 l
-3754 4050 l
-3754 4050 m
-3882 4050 l
-3882 4053 l
-3754 4053 l
-3755 4053 m
-3883 4053 l
-3883 4056 l
-3755 4056 l
-3756 4056 m
-3883 4056 l
-3883 4057 l
-3756 4057 l
-3756 4057 m
-3884 4057 l
-3884 4059 l
-3756 4059 l
-3757 4059 m
-3884 4059 l
-3884 4060 l
-3757 4060 l
-3757 4060 m
-3885 4060 l
-3885 4063 l
-3757 4063 l
-3758 4063 m
-3886 4063 l
-3886 4066 l
-3758 4066 l
-3759 4066 m
-3886 4066 l
-3886 4067 l
-3759 4067 l
-3759 4067 m
-3887 4067 l
-3887 4069 l
-3759 4069 l
-3760 4069 m
-3887 4069 l
-3887 4070 l
-3760 4070 l
-3760 4070 m
-3888 4070 l
-3888 4073 l
-3760 4073 l
-3761 4073 m
-3889 4073 l
-3889 4076 l
-3761 4076 l
-3762 4076 m
-3889 4076 l
-3889 4077 l
-3762 4077 l
-3762 4077 m
-3890 4077 l
-3890 4079 l
-3762 4079 l
-3763 4079 m
-3890 4079 l
-3890 4080 l
-3763 4080 l
-3763 4080 m
-3891 4080 l
-3891 4083 l
-3763 4083 l
-3764 4083 m
-3892 4083 l
-3892 4086 l
-3764 4086 l
-3765 4086 m
-3892 4086 l
-3892 4087 l
-3765 4087 l
-3765 4087 m
-3893 4087 l
-3893 4089 l
-3765 4089 l
-3766 4089 m
-3893 4089 l
-3893 4090 l
-3766 4090 l
-3766 4090 m
-3894 4090 l
-3894 4093 l
-3766 4093 l
-3767 4093 m
-3895 4093 l
-3895 4096 l
-3767 4096 l
-3768 4096 m
-3895 4096 l
-3895 4097 l
-3768 4097 l
-3768 4097 m
-3896 4097 l
-3896 4099 l
-3768 4099 l
-3769 4099 m
-3896 4099 l
-3896 4100 l
-3769 4100 l
-3769 4100 m
-3897 4100 l
-3897 4103 l
-3769 4103 l
-3770 4103 m
-3897 4103 l
-3897 4104 l
-3770 4104 l
-3770 4104 m
-3897 4104 l
-3897 4105 l
-3770 4105 l
-3770 4105 m
-3894 4105 l
-3894 4106 l
-3770 4106 l
-3771 4106 m
-3891 4106 l
-3891 4107 l
-3771 4107 l
-3771 4107 m
-3888 4107 l
-3888 4108 l
-3771 4108 l
-3771 4108 m
-3884 4108 l
-3884 4109 l
-3771 4109 l
-3772 4109 m
-3881 4109 l
-3881 4110 l
-3772 4110 l
-3772 4110 m
-3878 4110 l
-3878 4111 l
-3772 4111 l
-3772 4111 m
-3874 4111 l
-3874 4112 l
-3772 4112 l
-3772 4112 m
-3871 4112 l
-3871 4113 l
-3772 4113 l
-3773 4113 m
-3868 4113 l
-3868 4114 l
-3773 4114 l
-3773 4114 m
-3864 4114 l
-3864 4115 l
-3773 4115 l
-3773 4115 m
-3861 4115 l
-3861 4116 l
-3773 4116 l
-3774 4116 m
-3858 4116 l
-3858 4117 l
-3774 4117 l
-3774 4117 m
-3854 4117 l
-3854 4118 l
-3774 4118 l
-3774 4118 m
-3851 4118 l
-3851 4119 l
-3774 4119 l
-3775 4119 m
-3848 4119 l
-3848 4120 l
-3775 4120 l
-3775 4120 m
-3844 4120 l
-3844 4121 l
-3775 4121 l
-3775 4121 m
-3841 4121 l
-3841 4122 l
-3775 4122 l
-3775 4122 m
-3838 4122 l
-3838 4123 l
-3775 4123 l
-3776 4123 m
-3835 4123 l
-3835 4124 l
-3776 4124 l
-3776 4124 m
-3831 4124 l
-3831 4125 l
-3776 4125 l
-3776 4125 m
-3828 4125 l
-3828 4126 l
-3776 4126 l
-3777 4126 m
-3825 4126 l
-3825 4127 l
-3777 4127 l
-3777 4127 m
-3821 4127 l
-3821 4128 l
-3777 4128 l
-3777 4128 m
-3818 4128 l
-3818 4129 l
-3777 4129 l
-3778 4129 m
-3815 4129 l
-3815 4130 l
-3778 4130 l
-3778 4130 m
-3811 4130 l
-3811 4131 l
-3778 4131 l
-3778 4131 m
-3808 4131 l
-3808 4132 l
-3778 4132 l
-3778 4132 m
-3805 4132 l
-3805 4133 l
-3778 4133 l
-3779 4133 m
-3801 4133 l
-3801 4134 l
-3779 4134 l
-3779 4134 m
-3798 4134 l
-3798 4135 l
-3779 4135 l
-3779 4135 m
-3795 4135 l
-3795 4136 l
-3779 4136 l
-3780 4136 m
-3791 4136 l
-3791 4137 l
-3780 4137 l
-3780 4137 m
-3788 4137 l
-3788 4138 l
-3780 4138 l
-3780 4138 m
-3785 4138 l
-3785 4139 l
-3780 4139 l
-Y
-3814.4 3827.7 m
-3698 3862 l
-3781 4139 l
-3897 4104 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3768 3863 m
-3790 3935 l
-S
-3753 3986 m
-3766 4030 l
-3791 3996 l
-3794 4008 l
-3801 4015 l
-3806 4018 l
-3819 4018 l
-3827 4016 l
-3838 4008 l
-3843 3998 l
-3844 3985 l
-3840 3973 l
-3833 3962 l
-3827 3959 l
-3818 3957 l
-S
-3781 4082 m
-3782 4069 l
-3791 4057 l
-3810 4047 l
-3822 4043 l
-3843 4041 l
-3858 4046 l
-3865 4057 l
-3868 4065 l
-3867 4078 l
-3858 4089 l
-3839 4099 l
-3827 4103 l
-3806 4105 l
-3791 4101 l
-3784 4090 l
-3781 4082 l
-S
-1 g
-3582 5053 m
-3585 5053 l
-3585 5054 l
-3582 5054 l
-3581 5054 m
-3586 5054 l
-3586 5055 l
-3581 5055 l
-3580 5055 m
-3587 5055 l
-3587 5056 l
-3580 5056 l
-3579 5056 m
-3588 5056 l
-3588 5057 l
-3579 5057 l
-3578 5057 m
-3590 5057 l
-3590 5058 l
-3578 5058 l
-3578 5058 m
-3591 5058 l
-3591 5059 l
-3578 5059 l
-3577 5059 m
-3592 5059 l
-3592 5060 l
-3577 5060 l
-3576 5060 m
-3593 5060 l
-3593 5061 l
-3576 5061 l
-3575 5061 m
-3594 5061 l
-3594 5062 l
-3575 5062 l
-3574 5062 m
-3596 5062 l
-3596 5063 l
-3574 5063 l
-3573 5063 m
-3597 5063 l
-3597 5064 l
-3573 5064 l
-3573 5064 m
-3598 5064 l
-3598 5065 l
-3573 5065 l
-3572 5065 m
-3599 5065 l
-3599 5066 l
-3572 5066 l
-3571 5066 m
-3600 5066 l
-3600 5067 l
-3571 5067 l
-3570 5067 m
-3602 5067 l
-3602 5068 l
-3570 5068 l
-3569 5068 m
-3603 5068 l
-3603 5069 l
-3569 5069 l
-3568 5069 m
-3604 5069 l
-3604 5070 l
-3568 5070 l
-3568 5070 m
-3605 5070 l
-3605 5071 l
-3568 5071 l
-3567 5071 m
-3607 5071 l
-3607 5072 l
-3567 5072 l
-3566 5072 m
-3608 5072 l
-3608 5073 l
-3566 5073 l
-3565 5073 m
-3609 5073 l
-3609 5074 l
-3565 5074 l
-3564 5074 m
-3610 5074 l
-3610 5075 l
-3564 5075 l
-3563 5075 m
-3611 5075 l
-3611 5076 l
-3563 5076 l
-3563 5076 m
-3613 5076 l
-3613 5077 l
-3563 5077 l
-3562 5077 m
-3614 5077 l
-3614 5078 l
-3562 5078 l
-3561 5078 m
-3615 5078 l
-3615 5079 l
-3561 5079 l
-3560 5079 m
-3616 5079 l
-3616 5080 l
-3560 5080 l
-3559 5080 m
-3617 5080 l
-3617 5081 l
-3559 5081 l
-3558 5081 m
-3619 5081 l
-3619 5082 l
-3558 5082 l
-3558 5082 m
-3620 5082 l
-3620 5083 l
-3558 5083 l
-3557 5083 m
-3621 5083 l
-3621 5084 l
-3557 5084 l
-3556 5084 m
-3622 5084 l
-3622 5085 l
-3556 5085 l
-3555 5085 m
-3624 5085 l
-3624 5086 l
-3555 5086 l
-3554 5086 m
-3625 5086 l
-3625 5087 l
-3554 5087 l
-3553 5087 m
-3626 5087 l
-3626 5088 l
-3553 5088 l
-3553 5088 m
-3627 5088 l
-3627 5089 l
-3553 5089 l
-3552 5089 m
-3628 5089 l
-3628 5090 l
-3552 5090 l
-3551 5090 m
-3630 5090 l
-3630 5091 l
-3551 5091 l
-3550 5091 m
-3631 5091 l
-3631 5092 l
-3550 5092 l
-3549 5092 m
-3632 5092 l
-3632 5093 l
-3549 5093 l
-3548 5093 m
-3633 5093 l
-3633 5094 l
-3548 5094 l
-3548 5094 m
-3634 5094 l
-3634 5095 l
-3548 5095 l
-3547 5095 m
-3636 5095 l
-3636 5096 l
-3547 5096 l
-3546 5096 m
-3637 5096 l
-3637 5097 l
-3546 5097 l
-3545 5097 m
-3638 5097 l
-3638 5098 l
-3545 5098 l
-3544 5098 m
-3639 5098 l
-3639 5099 l
-3544 5099 l
-3544 5099 m
-3641 5099 l
-3641 5100 l
-3544 5100 l
-3543 5100 m
-3642 5100 l
-3642 5101 l
-3543 5101 l
-3542 5101 m
-3643 5101 l
-3643 5102 l
-3542 5102 l
-3541 5102 m
-3644 5102 l
-3644 5103 l
-3541 5103 l
-3540 5103 m
-3645 5103 l
-3645 5104 l
-3540 5104 l
-3539 5104 m
-3647 5104 l
-3647 5105 l
-3539 5105 l
-3539 5105 m
-3648 5105 l
-3648 5106 l
-3539 5106 l
-3538 5106 m
-3649 5106 l
-3649 5107 l
-3538 5107 l
-3537 5107 m
-3650 5107 l
-3650 5108 l
-3537 5108 l
-3536 5108 m
-3651 5108 l
-3651 5109 l
-3536 5109 l
-3535 5109 m
-3653 5109 l
-3653 5110 l
-3535 5110 l
-3534 5110 m
-3654 5110 l
-3654 5111 l
-3534 5111 l
-3534 5111 m
-3655 5111 l
-3655 5112 l
-3534 5112 l
-3533 5112 m
-3656 5112 l
-3656 5113 l
-3533 5113 l
-3532 5113 m
-3658 5113 l
-3658 5114 l
-3532 5114 l
-3531 5114 m
-3659 5114 l
-3659 5115 l
-3531 5115 l
-3530 5115 m
-3660 5115 l
-3660 5116 l
-3530 5116 l
-3529 5116 m
-3661 5116 l
-3661 5117 l
-3529 5117 l
-3529 5117 m
-3662 5117 l
-3662 5118 l
-3529 5118 l
-3528 5118 m
-3664 5118 l
-3664 5119 l
-3528 5119 l
-3527 5119 m
-3665 5119 l
-3665 5120 l
-3527 5120 l
-3526 5120 m
-3666 5120 l
-3666 5121 l
-3526 5121 l
-3525 5121 m
-3667 5121 l
-3667 5122 l
-3525 5122 l
-3524 5122 m
-3668 5122 l
-3668 5123 l
-3524 5123 l
-3524 5123 m
-3670 5123 l
-3670 5124 l
-3524 5124 l
-3523 5124 m
-3671 5124 l
-3671 5125 l
-3523 5125 l
-3522 5125 m
-3672 5125 l
-3672 5126 l
-3522 5126 l
-3521 5126 m
-3673 5126 l
-3673 5127 l
-3521 5127 l
-3520 5127 m
-3675 5127 l
-3675 5128 l
-3520 5128 l
-3519 5128 m
-3676 5128 l
-3676 5129 l
-3519 5129 l
-3519 5129 m
-3677 5129 l
-3677 5130 l
-3519 5130 l
-3518 5130 m
-3677 5130 l
-3677 5131 l
-3518 5131 l
-3517 5131 m
-3676 5131 l
-3676 5132 l
-3517 5132 l
-3516 5132 m
-3676 5132 l
-3676 5133 l
-3516 5133 l
-3515 5133 m
-3675 5133 l
-3675 5134 l
-3515 5134 l
-3514 5134 m
-3674 5134 l
-3674 5135 l
-3514 5135 l
-3514 5135 m
-3673 5135 l
-3673 5136 l
-3514 5136 l
-3513 5136 m
-3672 5136 l
-3672 5137 l
-3513 5137 l
-3512 5137 m
-3671 5137 l
-3671 5138 l
-3512 5138 l
-3511 5138 m
-3671 5138 l
-3671 5139 l
-3511 5139 l
-3510 5139 m
-3670 5139 l
-3670 5140 l
-3510 5140 l
-3509 5140 m
-3669 5140 l
-3669 5141 l
-3509 5141 l
-3509 5141 m
-3668 5141 l
-3668 5142 l
-3509 5142 l
-3508 5142 m
-3667 5142 l
-3667 5143 l
-3508 5143 l
-3507 5143 m
-3666 5143 l
-3666 5144 l
-3507 5144 l
-3506 5144 m
-3666 5144 l
-3666 5145 l
-3506 5145 l
-3505 5145 m
-3665 5145 l
-3665 5146 l
-3505 5146 l
-3505 5146 m
-3664 5146 l
-3664 5147 l
-3505 5147 l
-3504 5147 m
-3663 5147 l
-3663 5148 l
-3504 5148 l
-3503 5148 m
-3662 5148 l
-3662 5149 l
-3503 5149 l
-3502 5149 m
-3661 5149 l
-3661 5150 l
-3502 5150 l
-3501 5150 m
-3661 5150 l
-3661 5151 l
-3501 5151 l
-3500 5151 m
-3660 5151 l
-3660 5152 l
-3500 5152 l
-3500 5152 m
-3659 5152 l
-3659 5153 l
-3500 5153 l
-3499 5153 m
-3658 5153 l
-3658 5154 l
-3499 5154 l
-3498 5154 m
-3657 5154 l
-3657 5155 l
-3498 5155 l
-3497 5155 m
-3656 5155 l
-3656 5156 l
-3497 5156 l
-3496 5156 m
-3656 5156 l
-3656 5157 l
-3496 5157 l
-3495 5157 m
-3655 5157 l
-3655 5158 l
-3495 5158 l
-3495 5158 m
-3654 5158 l
-3654 5159 l
-3495 5159 l
-3494 5159 m
-3653 5159 l
-3653 5160 l
-3494 5160 l
-3493 5160 m
-3652 5160 l
-3652 5161 l
-3493 5161 l
-3492 5161 m
-3651 5161 l
-3651 5162 l
-3492 5162 l
-3491 5162 m
-3651 5162 l
-3651 5163 l
-3491 5163 l
-3490 5163 m
-3650 5163 l
-3650 5164 l
-3490 5164 l
-3490 5164 m
-3649 5164 l
-3649 5165 l
-3490 5165 l
-3489 5165 m
-3648 5165 l
-3648 5166 l
-3489 5166 l
-3488 5166 m
-3647 5166 l
-3647 5167 l
-3488 5167 l
-3487 5167 m
-3647 5167 l
-3647 5168 l
-3487 5168 l
-3486 5168 m
-3646 5168 l
-3646 5169 l
-3486 5169 l
-3485 5169 m
-3645 5169 l
-3645 5170 l
-3485 5170 l
-3485 5170 m
-3644 5170 l
-3644 5171 l
-3485 5171 l
-3484 5171 m
-3643 5171 l
-3643 5172 l
-3484 5172 l
-3483 5172 m
-3642 5172 l
-3642 5173 l
-3483 5173 l
-3482 5173 m
-3642 5173 l
-3642 5174 l
-3482 5174 l
-3481 5174 m
-3641 5174 l
-3641 5175 l
-3481 5175 l
-3480 5175 m
-3640 5175 l
-3640 5176 l
-3480 5176 l
-3480 5176 m
-3639 5176 l
-3639 5177 l
-3480 5177 l
-3479 5177 m
-3638 5177 l
-3638 5178 l
-3479 5178 l
-3478 5178 m
-3637 5178 l
-3637 5179 l
-3478 5179 l
-3477 5179 m
-3637 5179 l
-3637 5180 l
-3477 5180 l
-3476 5180 m
-3636 5180 l
-3636 5181 l
-3476 5181 l
-3475 5181 m
-3635 5181 l
-3635 5182 l
-3475 5182 l
-3475 5182 m
-3634 5182 l
-3634 5183 l
-3475 5183 l
-3474 5183 m
-3633 5183 l
-3633 5184 l
-3474 5184 l
-3473 5184 m
-3632 5184 l
-3632 5185 l
-3473 5185 l
-3472 5185 m
-3632 5185 l
-3632 5186 l
-3472 5186 l
-3471 5186 m
-3631 5186 l
-3631 5187 l
-3471 5187 l
-3470 5187 m
-3630 5187 l
-3630 5188 l
-3470 5188 l
-3470 5188 m
-3629 5188 l
-3629 5189 l
-3470 5189 l
-3469 5189 m
-3628 5189 l
-3628 5190 l
-3469 5190 l
-3468 5190 m
-3627 5190 l
-3627 5191 l
-3468 5191 l
-3467 5191 m
-3627 5191 l
-3627 5192 l
-3467 5192 l
-3466 5192 m
-3626 5192 l
-3626 5193 l
-3466 5193 l
-3466 5193 m
-3625 5193 l
-3625 5194 l
-3466 5194 l
-3466 5194 m
-3624 5194 l
-3624 5195 l
-3466 5195 l
-3467 5195 m
-3623 5195 l
-3623 5196 l
-3467 5196 l
-3468 5196 m
-3622 5196 l
-3622 5197 l
-3468 5197 l
-3469 5197 m
-3622 5197 l
-3622 5198 l
-3469 5198 l
-3470 5198 m
-3621 5198 l
-3621 5199 l
-3470 5199 l
-3471 5199 m
-3620 5199 l
-3620 5200 l
-3471 5200 l
-3473 5200 m
-3619 5200 l
-3619 5201 l
-3473 5201 l
-3474 5201 m
-3618 5201 l
-3618 5202 l
-3474 5202 l
-3475 5202 m
-3618 5202 l
-3618 5203 l
-3475 5203 l
-3476 5203 m
-3617 5203 l
-3617 5204 l
-3476 5204 l
-3477 5204 m
-3616 5204 l
-3616 5205 l
-3477 5205 l
-3479 5205 m
-3615 5205 l
-3615 5206 l
-3479 5206 l
-3480 5206 m
-3614 5206 l
-3614 5207 l
-3480 5207 l
-3481 5207 m
-3613 5207 l
-3613 5208 l
-3481 5208 l
-3482 5208 m
-3613 5208 l
-3613 5209 l
-3482 5209 l
-3483 5209 m
-3612 5209 l
-3612 5210 l
-3483 5210 l
-3485 5210 m
-3611 5210 l
-3611 5211 l
-3485 5211 l
-3486 5211 m
-3610 5211 l
-3610 5212 l
-3486 5212 l
-3487 5212 m
-3609 5212 l
-3609 5213 l
-3487 5213 l
-3488 5213 m
-3608 5213 l
-3608 5214 l
-3488 5214 l
-3489 5214 m
-3608 5214 l
-3608 5215 l
-3489 5215 l
-3491 5215 m
-3607 5215 l
-3607 5216 l
-3491 5216 l
-3492 5216 m
-3606 5216 l
-3606 5217 l
-3492 5217 l
-3493 5217 m
-3605 5217 l
-3605 5218 l
-3493 5218 l
-3494 5218 m
-3604 5218 l
-3604 5219 l
-3494 5219 l
-3495 5219 m
-3603 5219 l
-3603 5220 l
-3495 5220 l
-3496 5220 m
-3603 5220 l
-3603 5221 l
-3496 5221 l
-3498 5221 m
-3602 5221 l
-3602 5222 l
-3498 5222 l
-3499 5222 m
-3601 5222 l
-3601 5223 l
-3499 5223 l
-3500 5223 m
-3600 5223 l
-3600 5224 l
-3500 5224 l
-3501 5224 m
-3599 5224 l
-3599 5225 l
-3501 5225 l
-3502 5225 m
-3598 5225 l
-3598 5226 l
-3502 5226 l
-3504 5226 m
-3598 5226 l
-3598 5227 l
-3504 5227 l
-3505 5227 m
-3597 5227 l
-3597 5228 l
-3505 5228 l
-3506 5228 m
-3596 5228 l
-3596 5229 l
-3506 5229 l
-3507 5229 m
-3595 5229 l
-3595 5230 l
-3507 5230 l
-3508 5230 m
-3594 5230 l
-3594 5231 l
-3508 5231 l
-3510 5231 m
-3593 5231 l
-3593 5232 l
-3510 5232 l
-3511 5232 m
-3593 5232 l
-3593 5233 l
-3511 5233 l
-3512 5233 m
-3592 5233 l
-3592 5234 l
-3512 5234 l
-3513 5234 m
-3591 5234 l
-3591 5235 l
-3513 5235 l
-3514 5235 m
-3590 5235 l
-3590 5236 l
-3514 5236 l
-3516 5236 m
-3589 5236 l
-3589 5237 l
-3516 5237 l
-3517 5237 m
-3589 5237 l
-3589 5238 l
-3517 5238 l
-3518 5238 m
-3588 5238 l
-3588 5239 l
-3518 5239 l
-3519 5239 m
-3587 5239 l
-3587 5240 l
-3519 5240 l
-3520 5240 m
-3586 5240 l
-3586 5241 l
-3520 5241 l
-3522 5241 m
-3585 5241 l
-3585 5242 l
-3522 5242 l
-3523 5242 m
-3584 5242 l
-3584 5243 l
-3523 5243 l
-3524 5243 m
-3584 5243 l
-3584 5244 l
-3524 5244 l
-3525 5244 m
-3583 5244 l
-3583 5245 l
-3525 5245 l
-3526 5245 m
-3582 5245 l
-3582 5246 l
-3526 5246 l
-3527 5246 m
-3581 5246 l
-3581 5247 l
-3527 5247 l
-3529 5247 m
-3580 5247 l
-3580 5248 l
-3529 5248 l
-3530 5248 m
-3579 5248 l
-3579 5249 l
-3530 5249 l
-3531 5249 m
-3579 5249 l
-3579 5250 l
-3531 5250 l
-3532 5250 m
-3578 5250 l
-3578 5251 l
-3532 5251 l
-3533 5251 m
-3577 5251 l
-3577 5252 l
-3533 5252 l
-3535 5252 m
-3576 5252 l
-3576 5253 l
-3535 5253 l
-3536 5253 m
-3575 5253 l
-3575 5254 l
-3536 5254 l
-3537 5254 m
-3574 5254 l
-3574 5255 l
-3537 5255 l
-3538 5255 m
-3574 5255 l
-3574 5256 l
-3538 5256 l
-3539 5256 m
-3573 5256 l
-3573 5257 l
-3539 5257 l
-3541 5257 m
-3572 5257 l
-3572 5258 l
-3541 5258 l
-3542 5258 m
-3571 5258 l
-3571 5259 l
-3542 5259 l
-3543 5259 m
-3570 5259 l
-3570 5260 l
-3543 5260 l
-3544 5260 m
-3569 5260 l
-3569 5261 l
-3544 5261 l
-3545 5261 m
-3569 5261 l
-3569 5262 l
-3545 5262 l
-3547 5262 m
-3568 5262 l
-3568 5263 l
-3547 5263 l
-3548 5263 m
-3567 5263 l
-3567 5264 l
-3548 5264 l
-3549 5264 m
-3566 5264 l
-3566 5265 l
-3549 5265 l
-3550 5265 m
-3565 5265 l
-3565 5266 l
-3550 5266 l
-3551 5266 m
-3564 5266 l
-3564 5267 l
-3551 5267 l
-3553 5267 m
-3564 5267 l
-3564 5268 l
-3553 5268 l
-3554 5268 m
-3563 5268 l
-3563 5269 l
-3554 5269 l
-3555 5269 m
-3562 5269 l
-3562 5270 l
-3555 5270 l
-3556 5270 m
-3561 5270 l
-3561 5271 l
-3556 5271 l
-3557 5271 m
-3560 5271 l
-3560 5272 l
-3557 5272 l
-Y
-3676.6 5130.1 m
-3583 5053 l
-3466 5194 l
-3559 5272 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3578 5086 m
-3548 5121 l
-3590 5123 l
-3582 5133 l
-3580 5142 l
-3580 5148 l
-3587 5159 l
-3594 5165 l
-3606 5169 l
-3618 5168 l
-3629 5161 l
-3637 5152 l
-3642 5139 l
-3641 5133 l
-3638 5125 l
-S
-3514 5163 m
-3525 5156 l
-3540 5158 l
-3559 5168 l
-3568 5176 l
-3582 5192 l
-3586 5207 l
-3581 5219 l
-3576 5226 l
-3565 5233 l
-3550 5231 l
-3531 5221 l
-3521 5213 l
-3508 5196 l
-3504 5182 l
-3508 5170 l
-3514 5163 l
-S
-1 g
-2996 5490 m
-3001 5490 l
-3001 5491 l
-2996 5491 l
-2992 5491 m
-3001 5491 l
-3001 5492 l
-2992 5492 l
-2989 5492 m
-3001 5492 l
-3001 5493 l
-2989 5493 l
-2985 5493 m
-3002 5493 l
-3002 5494 l
-2985 5494 l
-2982 5494 m
-3002 5494 l
-3002 5495 l
-2982 5495 l
-2978 5495 m
-3002 5495 l
-3002 5496 l
-2978 5496 l
-2975 5496 m
-3002 5496 l
-3002 5497 l
-2975 5497 l
-2971 5497 m
-3003 5497 l
-3003 5498 l
-2971 5498 l
-2968 5498 m
-3003 5498 l
-3003 5499 l
-2968 5499 l
-2964 5499 m
-3003 5499 l
-3003 5500 l
-2964 5500 l
-2961 5500 m
-3004 5500 l
-3004 5501 l
-2961 5501 l
-2957 5501 m
-3004 5501 l
-3004 5502 l
-2957 5502 l
-2954 5502 m
-3004 5502 l
-3004 5503 l
-2954 5503 l
-2950 5503 m
-3004 5503 l
-3004 5504 l
-2950 5504 l
-2947 5504 m
-3005 5504 l
-3005 5505 l
-2947 5505 l
-2943 5505 m
-3005 5505 l
-3005 5506 l
-2943 5506 l
-2939 5506 m
-3005 5506 l
-3005 5507 l
-2939 5507 l
-2936 5507 m
-3006 5507 l
-3006 5508 l
-2936 5508 l
-2932 5508 m
-3006 5508 l
-3006 5509 l
-2932 5509 l
-2929 5509 m
-3006 5509 l
-3006 5510 l
-2929 5510 l
-2925 5510 m
-3006 5510 l
-3006 5511 l
-2925 5511 l
-2922 5511 m
-3007 5511 l
-3007 5512 l
-2922 5512 l
-2918 5512 m
-3007 5512 l
-3007 5513 l
-2918 5513 l
-2915 5513 m
-3007 5513 l
-3007 5514 l
-2915 5514 l
-2911 5514 m
-3008 5514 l
-3008 5515 l
-2911 5515 l
-2908 5515 m
-3008 5515 l
-3008 5516 l
-2908 5516 l
-2904 5516 m
-3008 5516 l
-3008 5517 l
-2904 5517 l
-2901 5517 m
-3008 5517 l
-3008 5518 l
-2901 5518 l
-2897 5518 m
-3009 5518 l
-3009 5519 l
-2897 5519 l
-2894 5519 m
-3009 5519 l
-3009 5520 l
-2894 5520 l
-2890 5520 m
-3009 5520 l
-3009 5521 l
-2890 5521 l
-2887 5521 m
-3010 5521 l
-3010 5522 l
-2887 5522 l
-2883 5522 m
-3010 5522 l
-3010 5523 l
-2883 5523 l
-2879 5523 m
-3010 5523 l
-3010 5524 l
-2879 5524 l
-2876 5524 m
-3010 5524 l
-3010 5525 l
-2876 5525 l
-2872 5525 m
-3011 5525 l
-3011 5526 l
-2872 5526 l
-2869 5526 m
-3011 5526 l
-3011 5527 l
-2869 5527 l
-2865 5527 m
-3011 5527 l
-3011 5528 l
-2865 5528 l
-2862 5528 m
-3012 5528 l
-3012 5529 l
-2862 5529 l
-2858 5529 m
-3012 5529 l
-3012 5530 l
-2858 5530 l
-2855 5530 m
-3012 5530 l
-3012 5531 l
-2855 5531 l
-2851 5531 m
-3012 5531 l
-3012 5532 l
-2851 5532 l
-2848 5532 m
-3013 5532 l
-3013 5533 l
-2848 5533 l
-2844 5533 m
-3013 5533 l
-3013 5534 l
-2844 5534 l
-2841 5534 m
-3013 5534 l
-3013 5535 l
-2841 5535 l
-2837 5535 m
-3014 5535 l
-3014 5536 l
-2837 5536 l
-2834 5536 m
-3014 5536 l
-3014 5537 l
-2834 5537 l
-2830 5537 m
-3014 5537 l
-3014 5538 l
-2830 5538 l
-2827 5538 m
-3014 5538 l
-3014 5539 l
-2827 5539 l
-2827 5539 m
-3015 5539 l
-3015 5540 l
-2827 5540 l
-2827 5540 m
-3015 5540 l
-3015 5542 l
-2827 5542 l
-2827 5542 m
-3016 5542 l
-3016 5543 l
-2827 5543 l
-2828 5543 m
-3016 5543 l
-3016 5546 l
-2828 5546 l
-2828 5546 m
-3017 5546 l
-3017 5547 l
-2828 5547 l
-2829 5547 m
-3017 5547 l
-3017 5549 l
-2829 5549 l
-2829 5549 m
-3018 5549 l
-3018 5550 l
-2829 5550 l
-2830 5550 m
-3018 5550 l
-3018 5553 l
-2830 5553 l
-2830 5553 m
-3019 5553 l
-3019 5554 l
-2830 5554 l
-2831 5554 m
-3019 5554 l
-3019 5556 l
-2831 5556 l
-2831 5556 m
-3020 5556 l
-3020 5557 l
-2831 5557 l
-2832 5557 m
-3020 5557 l
-3020 5560 l
-2832 5560 l
-2832 5560 m
-3021 5560 l
-3021 5561 l
-2832 5561 l
-2833 5561 m
-3021 5561 l
-3021 5563 l
-2833 5563 l
-2833 5563 m
-3022 5563 l
-3022 5564 l
-2833 5564 l
-2834 5564 m
-3022 5564 l
-3022 5567 l
-2834 5567 l
-2834 5567 m
-3023 5567 l
-3023 5568 l
-2834 5568 l
-2835 5568 m
-3023 5568 l
-3023 5570 l
-2835 5570 l
-2835 5570 m
-3024 5570 l
-3024 5571 l
-2835 5571 l
-2836 5571 m
-3024 5571 l
-3024 5574 l
-2836 5574 l
-2836 5574 m
-3025 5574 l
-3025 5575 l
-2836 5575 l
-2837 5575 m
-3025 5575 l
-3025 5577 l
-2837 5577 l
-2837 5577 m
-3026 5577 l
-3026 5578 l
-2837 5578 l
-2838 5578 m
-3026 5578 l
-3026 5581 l
-2838 5581 l
-2838 5581 m
-3027 5581 l
-3027 5582 l
-2838 5582 l
-2839 5582 m
-3027 5582 l
-3027 5584 l
-2839 5584 l
-2839 5584 m
-3028 5584 l
-3028 5585 l
-2839 5585 l
-2840 5585 m
-3028 5585 l
-3028 5588 l
-2840 5588 l
-2840 5588 m
-3029 5588 l
-3029 5589 l
-2840 5589 l
-2841 5589 m
-3029 5589 l
-3029 5591 l
-2841 5591 l
-2841 5591 m
-3030 5591 l
-3030 5592 l
-2841 5592 l
-2842 5592 m
-3030 5592 l
-3030 5595 l
-2842 5595 l
-2842 5595 m
-3031 5595 l
-3031 5596 l
-2842 5596 l
-2843 5596 m
-3031 5596 l
-3031 5598 l
-2843 5598 l
-2843 5598 m
-3032 5598 l
-3032 5599 l
-2843 5599 l
-2844 5599 m
-3032 5599 l
-3032 5602 l
-2844 5602 l
-2844 5602 m
-3033 5602 l
-3033 5603 l
-2844 5603 l
-2845 5603 m
-3033 5603 l
-3033 5605 l
-2845 5605 l
-2845 5605 m
-3034 5605 l
-3034 5606 l
-2845 5606 l
-2846 5606 m
-3034 5606 l
-3034 5607 l
-2846 5607 l
-2846 5607 m
-3030 5607 l
-3030 5608 l
-2846 5608 l
-2846 5608 m
-3027 5608 l
-3027 5609 l
-2846 5609 l
-2846 5609 m
-3023 5609 l
-3023 5610 l
-2846 5610 l
-2847 5610 m
-3020 5610 l
-3020 5611 l
-2847 5611 l
-2847 5611 m
-3016 5611 l
-3016 5612 l
-2847 5612 l
-2847 5612 m
-3013 5612 l
-3013 5613 l
-2847 5613 l
-2848 5613 m
-3009 5613 l
-3009 5614 l
-2848 5614 l
-2848 5614 m
-3006 5614 l
-3006 5615 l
-2848 5615 l
-2848 5615 m
-3002 5615 l
-3002 5616 l
-2848 5616 l
-2848 5616 m
-2999 5616 l
-2999 5617 l
-2848 5617 l
-2849 5617 m
-2995 5617 l
-2995 5618 l
-2849 5618 l
-2849 5618 m
-2991 5618 l
-2991 5619 l
-2849 5619 l
-2849 5619 m
-2988 5619 l
-2988 5620 l
-2849 5620 l
-2850 5620 m
-2984 5620 l
-2984 5621 l
-2850 5621 l
-2850 5621 m
-2981 5621 l
-2981 5622 l
-2850 5622 l
-2850 5622 m
-2977 5622 l
-2977 5623 l
-2850 5623 l
-2850 5623 m
-2974 5623 l
-2974 5624 l
-2850 5624 l
-2851 5624 m
-2970 5624 l
-2970 5625 l
-2851 5625 l
-2851 5625 m
-2967 5625 l
-2967 5626 l
-2851 5626 l
-2851 5626 m
-2963 5626 l
-2963 5627 l
-2851 5627 l
-2852 5627 m
-2960 5627 l
-2960 5628 l
-2852 5628 l
-2852 5628 m
-2956 5628 l
-2956 5629 l
-2852 5629 l
-2852 5629 m
-2953 5629 l
-2953 5630 l
-2852 5630 l
-2852 5630 m
-2949 5630 l
-2949 5631 l
-2852 5631 l
-2853 5631 m
-2945 5631 l
-2945 5632 l
-2853 5632 l
-2853 5632 m
-2942 5632 l
-2942 5633 l
-2853 5633 l
-2853 5633 m
-2938 5633 l
-2938 5634 l
-2853 5634 l
-2854 5634 m
-2935 5634 l
-2935 5635 l
-2854 5635 l
-2854 5635 m
-2931 5635 l
-2931 5636 l
-2854 5636 l
-2854 5636 m
-2928 5636 l
-2928 5637 l
-2854 5637 l
-2854 5637 m
-2924 5637 l
-2924 5638 l
-2854 5638 l
-2855 5638 m
-2921 5638 l
-2921 5639 l
-2855 5639 l
-2855 5639 m
-2917 5639 l
-2917 5640 l
-2855 5640 l
-2855 5640 m
-2914 5640 l
-2914 5641 l
-2855 5641 l
-2856 5641 m
-2910 5641 l
-2910 5642 l
-2856 5642 l
-2856 5642 m
-2907 5642 l
-2907 5643 l
-2856 5643 l
-2856 5643 m
-2903 5643 l
-2903 5644 l
-2856 5644 l
-2856 5644 m
-2899 5644 l
-2899 5645 l
-2856 5645 l
-2857 5645 m
-2896 5645 l
-2896 5646 l
-2857 5646 l
-2857 5646 m
-2892 5646 l
-2892 5647 l
-2857 5647 l
-2857 5647 m
-2889 5647 l
-2889 5648 l
-2857 5648 l
-2858 5648 m
-2885 5648 l
-2885 5649 l
-2858 5649 l
-2858 5649 m
-2882 5649 l
-2882 5650 l
-2858 5650 l
-2858 5650 m
-2878 5650 l
-2878 5651 l
-2858 5651 l
-2858 5651 m
-2875 5651 l
-2875 5652 l
-2858 5652 l
-2859 5652 m
-2871 5652 l
-2871 5653 l
-2859 5653 l
-2859 5653 m
-2868 5653 l
-2868 5654 l
-2859 5654 l
-2859 5654 m
-2864 5654 l
-2864 5655 l
-2859 5655 l
-Y
-3033.1 5606.1 m
-3000 5490 l
-2827 5539 l
-2860 5655 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2940 5537 m
-2941 5528 l
-2952 5521 l
-2960 5518 l
-2973 5519 l
-2985 5529 l
-2995 5548 l
-3000 5568 l
-3001 5585 l
-2995 5595 l
-2984 5603 l
-2980 5604 l
-2967 5603 l
-2957 5597 l
-2949 5586 l
-2948 5582 l
-2949 5569 l
-2955 5559 l
-2965 5551 l
-2969 5550 l
-2983 5551 l
-2993 5557 l
-3000 5568 l
-S
-2884 5540 m
-2897 5541 l
-2909 5550 l
-2918 5569 l
-2922 5581 l
-2923 5603 l
-2919 5617 l
-2908 5624 l
-2900 5627 l
-2887 5626 l
-2875 5616 l
-2866 5597 l
-2862 5585 l
-2860 5564 l
-2865 5550 l
-2876 5542 l
-2884 5540 l
-S
-1 g
-1950 5410 m
-1955 5410 l
-1955 5411 l
-1950 5411 l
-1949 5411 m
-1957 5411 l
-1957 5412 l
-1949 5412 l
-1949 5412 m
-1960 5412 l
-1960 5413 l
-1949 5413 l
-1948 5413 m
-1962 5413 l
-1962 5414 l
-1948 5414 l
-1948 5414 m
-1965 5414 l
-1965 5415 l
-1948 5415 l
-1948 5415 m
-1967 5415 l
-1967 5416 l
-1948 5416 l
-1947 5416 m
-1970 5416 l
-1970 5417 l
-1947 5417 l
-1947 5417 m
-1972 5417 l
-1972 5418 l
-1947 5418 l
-1946 5418 m
-1975 5418 l
-1975 5419 l
-1946 5419 l
-1946 5419 m
-1977 5419 l
-1977 5420 l
-1946 5420 l
-1946 5420 m
-1980 5420 l
-1980 5421 l
-1946 5421 l
-1945 5421 m
-1982 5421 l
-1982 5422 l
-1945 5422 l
-1945 5422 m
-1985 5422 l
-1985 5423 l
-1945 5423 l
-1944 5423 m
-1987 5423 l
-1987 5424 l
-1944 5424 l
-1944 5424 m
-1990 5424 l
-1990 5425 l
-1944 5425 l
-1944 5425 m
-1992 5425 l
-1992 5426 l
-1944 5426 l
-1943 5426 m
-1995 5426 l
-1995 5427 l
-1943 5427 l
-1943 5427 m
-1997 5427 l
-1997 5428 l
-1943 5428 l
-1942 5428 m
-2000 5428 l
-2000 5429 l
-1942 5429 l
-1942 5429 m
-2002 5429 l
-2002 5430 l
-1942 5430 l
-1942 5430 m
-2004 5430 l
-2004 5431 l
-1942 5431 l
-1941 5431 m
-2007 5431 l
-2007 5432 l
-1941 5432 l
-1941 5432 m
-2009 5432 l
-2009 5433 l
-1941 5433 l
-1940 5433 m
-2012 5433 l
-2012 5434 l
-1940 5434 l
-1940 5434 m
-2014 5434 l
-2014 5435 l
-1940 5435 l
-1940 5435 m
-2017 5435 l
-2017 5436 l
-1940 5436 l
-1939 5436 m
-2019 5436 l
-2019 5437 l
-1939 5437 l
-1939 5437 m
-2022 5437 l
-2022 5438 l
-1939 5438 l
-1939 5438 m
-2024 5438 l
-2024 5439 l
-1939 5439 l
-1938 5439 m
-2027 5439 l
-2027 5440 l
-1938 5440 l
-1938 5440 m
-2029 5440 l
-2029 5441 l
-1938 5441 l
-1937 5441 m
-2032 5441 l
-2032 5442 l
-1937 5442 l
-1937 5442 m
-2034 5442 l
-2034 5443 l
-1937 5443 l
-1937 5443 m
-2037 5443 l
-2037 5444 l
-1937 5444 l
-1936 5444 m
-2039 5444 l
-2039 5445 l
-1936 5445 l
-1936 5445 m
-2042 5445 l
-2042 5446 l
-1936 5446 l
-1935 5446 m
-2044 5446 l
-2044 5447 l
-1935 5447 l
-1935 5447 m
-2047 5447 l
-2047 5448 l
-1935 5448 l
-1935 5448 m
-2049 5448 l
-2049 5449 l
-1935 5449 l
-1934 5449 m
-2052 5449 l
-2052 5450 l
-1934 5450 l
-1934 5450 m
-2054 5450 l
-2054 5451 l
-1934 5451 l
-1933 5451 m
-2057 5451 l
-2057 5452 l
-1933 5452 l
-1933 5452 m
-2059 5452 l
-2059 5453 l
-1933 5453 l
-1933 5453 m
-2062 5453 l
-2062 5454 l
-1933 5454 l
-1932 5454 m
-2064 5454 l
-2064 5455 l
-1932 5455 l
-1932 5455 m
-2067 5455 l
-2067 5456 l
-1932 5456 l
-1931 5456 m
-2069 5456 l
-2069 5457 l
-1931 5457 l
-1931 5457 m
-2072 5457 l
-2072 5458 l
-1931 5458 l
-1931 5458 m
-2074 5458 l
-2074 5459 l
-1931 5459 l
-1930 5459 m
-2077 5459 l
-2077 5460 l
-1930 5460 l
-1930 5460 m
-2079 5460 l
-2079 5461 l
-1930 5461 l
-1929 5461 m
-2082 5461 l
-2082 5462 l
-1929 5462 l
-1929 5462 m
-2084 5462 l
-2084 5463 l
-1929 5463 l
-1929 5463 m
-2087 5463 l
-2087 5464 l
-1929 5464 l
-1928 5464 m
-2089 5464 l
-2089 5465 l
-1928 5465 l
-1928 5465 m
-2092 5465 l
-2092 5466 l
-1928 5466 l
-1927 5466 m
-2094 5466 l
-2094 5467 l
-1927 5467 l
-1927 5467 m
-2097 5467 l
-2097 5468 l
-1927 5468 l
-1927 5468 m
-2099 5468 l
-2099 5469 l
-1927 5469 l
-1926 5469 m
-2102 5469 l
-2102 5470 l
-1926 5470 l
-1926 5470 m
-2104 5470 l
-2104 5471 l
-1926 5471 l
-1925 5471 m
-2107 5471 l
-2107 5472 l
-1925 5472 l
-1925 5472 m
-2109 5472 l
-2109 5473 l
-1925 5473 l
-1925 5473 m
-2112 5473 l
-2112 5474 l
-1925 5474 l
-1924 5474 m
-2114 5474 l
-2114 5475 l
-1924 5475 l
-1924 5475 m
-2117 5475 l
-2117 5476 l
-1924 5476 l
-1923 5476 m
-2119 5476 l
-2119 5477 l
-1923 5477 l
-1923 5477 m
-2122 5477 l
-2122 5478 l
-1923 5478 l
-1923 5478 m
-2121 5478 l
-2121 5479 l
-1923 5479 l
-1922 5479 m
-2121 5479 l
-2121 5481 l
-1922 5481 l
-1921 5481 m
-2120 5481 l
-2120 5483 l
-1921 5483 l
-1921 5483 m
-2119 5483 l
-2119 5484 l
-1921 5484 l
-1920 5484 m
-2119 5484 l
-2119 5486 l
-1920 5486 l
-1919 5486 m
-2118 5486 l
-2118 5488 l
-1919 5488 l
-1919 5488 m
-2117 5488 l
-2117 5489 l
-1919 5489 l
-1918 5489 m
-2117 5489 l
-2117 5491 l
-1918 5491 l
-1917 5491 m
-2116 5491 l
-2116 5493 l
-1917 5493 l
-1917 5493 m
-2115 5493 l
-2115 5494 l
-1917 5494 l
-1916 5494 m
-2115 5494 l
-2115 5496 l
-1916 5496 l
-1915 5496 m
-2114 5496 l
-2114 5498 l
-1915 5498 l
-1915 5498 m
-2113 5498 l
-2113 5499 l
-1915 5499 l
-1914 5499 m
-2113 5499 l
-2113 5501 l
-1914 5501 l
-1913 5501 m
-2112 5501 l
-2112 5503 l
-1913 5503 l
-1913 5503 m
-2111 5503 l
-2111 5504 l
-1913 5504 l
-1912 5504 m
-2111 5504 l
-2111 5506 l
-1912 5506 l
-1911 5506 m
-2110 5506 l
-2110 5508 l
-1911 5508 l
-1911 5508 m
-2109 5508 l
-2109 5509 l
-1911 5509 l
-1910 5509 m
-2109 5509 l
-2109 5511 l
-1910 5511 l
-1909 5511 m
-2108 5511 l
-2108 5513 l
-1909 5513 l
-1909 5513 m
-2107 5513 l
-2107 5514 l
-1909 5514 l
-1908 5514 m
-2107 5514 l
-2107 5516 l
-1908 5516 l
-1907 5516 m
-2106 5516 l
-2106 5518 l
-1907 5518 l
-1907 5518 m
-2105 5518 l
-2105 5519 l
-1907 5519 l
-1906 5519 m
-2105 5519 l
-2105 5521 l
-1906 5521 l
-1906 5521 m
-2104 5521 l
-2104 5522 l
-1906 5522 l
-1906 5522 m
-2104 5522 l
-2104 5523 l
-1906 5523 l
-1908 5523 m
-2103 5523 l
-2103 5524 l
-1908 5524 l
-1911 5524 m
-2103 5524 l
-2103 5525 l
-1911 5525 l
-1913 5525 m
-2103 5525 l
-2103 5526 l
-1913 5526 l
-1916 5526 m
-2102 5526 l
-2102 5527 l
-1916 5527 l
-1918 5527 m
-2102 5527 l
-2102 5528 l
-1918 5528 l
-1921 5528 m
-2101 5528 l
-2101 5529 l
-1921 5529 l
-1923 5529 m
-2101 5529 l
-2101 5530 l
-1923 5530 l
-1926 5530 m
-2101 5530 l
-2101 5531 l
-1926 5531 l
-1928 5531 m
-2100 5531 l
-2100 5532 l
-1928 5532 l
-1931 5532 m
-2100 5532 l
-2100 5533 l
-1931 5533 l
-1933 5533 m
-2099 5533 l
-2099 5534 l
-1933 5534 l
-1936 5534 m
-2099 5534 l
-2099 5535 l
-1936 5535 l
-1938 5535 m
-2099 5535 l
-2099 5536 l
-1938 5536 l
-1941 5536 m
-2098 5536 l
-2098 5537 l
-1941 5537 l
-1943 5537 m
-2098 5537 l
-2098 5538 l
-1943 5538 l
-1946 5538 m
-2097 5538 l
-2097 5539 l
-1946 5539 l
-1948 5539 m
-2097 5539 l
-2097 5540 l
-1948 5540 l
-1951 5540 m
-2097 5540 l
-2097 5541 l
-1951 5541 l
-1953 5541 m
-2096 5541 l
-2096 5542 l
-1953 5542 l
-1956 5542 m
-2096 5542 l
-2096 5543 l
-1956 5543 l
-1958 5543 m
-2095 5543 l
-2095 5544 l
-1958 5544 l
-1961 5544 m
-2095 5544 l
-2095 5545 l
-1961 5545 l
-1963 5545 m
-2095 5545 l
-2095 5546 l
-1963 5546 l
-1966 5546 m
-2094 5546 l
-2094 5547 l
-1966 5547 l
-1968 5547 m
-2094 5547 l
-2094 5548 l
-1968 5548 l
-1971 5548 m
-2093 5548 l
-2093 5549 l
-1971 5549 l
-1973 5549 m
-2093 5549 l
-2093 5550 l
-1973 5550 l
-1976 5550 m
-2093 5550 l
-2093 5551 l
-1976 5551 l
-1978 5551 m
-2092 5551 l
-2092 5552 l
-1978 5552 l
-1981 5552 m
-2092 5552 l
-2092 5553 l
-1981 5553 l
-1983 5553 m
-2091 5553 l
-2091 5554 l
-1983 5554 l
-1986 5554 m
-2091 5554 l
-2091 5555 l
-1986 5555 l
-1988 5555 m
-2091 5555 l
-2091 5556 l
-1988 5556 l
-1991 5556 m
-2090 5556 l
-2090 5557 l
-1991 5557 l
-1993 5557 m
-2090 5557 l
-2090 5558 l
-1993 5558 l
-1996 5558 m
-2089 5558 l
-2089 5559 l
-1996 5559 l
-1998 5559 m
-2089 5559 l
-2089 5560 l
-1998 5560 l
-2001 5560 m
-2089 5560 l
-2089 5561 l
-2001 5561 l
-2003 5561 m
-2088 5561 l
-2088 5562 l
-2003 5562 l
-2006 5562 m
-2088 5562 l
-2088 5563 l
-2006 5563 l
-2008 5563 m
-2087 5563 l
-2087 5564 l
-2008 5564 l
-2011 5564 m
-2087 5564 l
-2087 5565 l
-2011 5565 l
-2013 5565 m
-2087 5565 l
-2087 5566 l
-2013 5566 l
-2016 5566 m
-2086 5566 l
-2086 5567 l
-2016 5567 l
-2018 5567 m
-2086 5567 l
-2086 5568 l
-2018 5568 l
-2021 5568 m
-2085 5568 l
-2085 5569 l
-2021 5569 l
-2023 5569 m
-2085 5569 l
-2085 5570 l
-2023 5570 l
-2026 5570 m
-2085 5570 l
-2085 5571 l
-2026 5571 l
-2028 5571 m
-2084 5571 l
-2084 5572 l
-2028 5572 l
-2031 5572 m
-2084 5572 l
-2084 5573 l
-2031 5573 l
-2033 5573 m
-2083 5573 l
-2083 5574 l
-2033 5574 l
-2036 5574 m
-2083 5574 l
-2083 5575 l
-2036 5575 l
-2038 5575 m
-2083 5575 l
-2083 5576 l
-2038 5576 l
-2041 5576 m
-2082 5576 l
-2082 5577 l
-2041 5577 l
-2043 5577 m
-2082 5577 l
-2082 5578 l
-2043 5578 l
-2046 5578 m
-2081 5578 l
-2081 5579 l
-2046 5579 l
-2048 5579 m
-2081 5579 l
-2081 5580 l
-2048 5580 l
-2051 5580 m
-2081 5580 l
-2081 5581 l
-2051 5581 l
-2053 5581 m
-2080 5581 l
-2080 5582 l
-2053 5582 l
-2056 5582 m
-2080 5582 l
-2080 5583 l
-2056 5583 l
-2058 5583 m
-2079 5583 l
-2079 5584 l
-2058 5584 l
-2061 5584 m
-2079 5584 l
-2079 5585 l
-2061 5585 l
-2063 5585 m
-2079 5585 l
-2079 5586 l
-2063 5586 l
-2066 5586 m
-2078 5586 l
-2078 5587 l
-2066 5587 l
-2068 5587 m
-2078 5587 l
-2078 5588 l
-2068 5588 l
-2071 5588 m
-2077 5588 l
-2077 5589 l
-2071 5589 l
-2073 5589 m
-2077 5589 l
-2077 5590 l
-2073 5590 l
-Y
-1950.7 5409.6 m
-1906 5522 l
-2076 5590 l
-2121 5478 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1993 5507 m
-1993 5494 l
-1989 5483 l
-1979 5475 l
-1975 5473 l
-1962 5472 l
-1951 5477 l
-1942 5487 l
-1941 5491 l
-1940 5504 l
-1944 5515 l
-1955 5524 l
-1958 5525 l
-1972 5526 l
-1982 5521 l
-1993 5507 l
-2000 5488 l
-2004 5467 l
-2001 5452 l
-1991 5444 l
-1983 5441 l
-1970 5440 l
-1963 5446 l
-S
-2032 5555 m
-2022 5546 l
-2019 5531 l
-2023 5510 l
-2027 5499 l
-2039 5481 l
-2052 5472 l
-2065 5473 l
-2072 5476 l
-2083 5485 l
-2086 5500 l
-2082 5521 l
-2077 5532 l
-2065 5550 l
-2053 5559 l
-2040 5558 l
-2032 5555 l
-S
-1 g
-Y
-467.2 2211.2 m
-282 2211 l
-282 5715 l
-467 5715 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-307 2236 m
-412 2236 l
-S
-307 2236 m
-307 2301 l
-S
-357 2236 m
-357 2276 l
-S
-412 2236 m
-412 2301 l
-S
-357 2387 m
-347 2377 l
-342 2367 l
-342 2352 l
-347 2341 l
-357 2331 l
-372 2326 l
-382 2326 l
-397 2331 l
-407 2341 l
-412 2352 l
-412 2367 l
-407 2377 l
-397 2387 l
-S
-307 2422 m
-412 2422 l
-S
-307 2457 m
-312 2462 l
-307 2467 l
-302 2462 l
-307 2457 l
-S
-342 2462 m
-412 2462 l
-S
-342 2502 m
-447 2502 l
-S
-357 2502 m
-347 2512 l
-342 2522 l
-342 2537 l
-347 2547 l
-357 2557 l
-372 2562 l
-382 2562 l
-397 2557 l
-407 2547 l
-412 2537 l
-412 2522 l
-407 2512 l
-397 2502 l
-S
-307 2602 m
-392 2602 l
-407 2607 l
-412 2617 l
-412 2627 l
-S
-342 2587 m
-342 2622 l
-S
-307 2652 m
-312 2657 l
-307 2662 l
-302 2657 l
-307 2652 l
-S
-342 2657 m
-412 2657 l
-S
-357 2752 m
-347 2742 l
-342 2732 l
-342 2717 l
-347 2707 l
-357 2697 l
-372 2692 l
-382 2692 l
-397 2697 l
-407 2707 l
-412 2717 l
-412 2732 l
-407 2742 l
-397 2752 l
-S
-357 2923 m
-347 2913 l
-342 2903 l
-342 2888 l
-347 2878 l
-357 2868 l
-372 2863 l
-382 2863 l
-397 2868 l
-407 2878 l
-412 2888 l
-412 2903 l
-407 2913 l
-397 2923 l
-S
-342 2978 m
-347 2968 l
-357 2958 l
-372 2953 l
-382 2953 l
-397 2958 l
-407 2968 l
-412 2978 l
-412 2993 l
-407 3003 l
-397 3013 l
-382 3018 l
-372 3018 l
-357 3013 l
-347 3003 l
-342 2993 l
-342 2978 l
-S
-342 3073 m
-347 3063 l
-357 3053 l
-372 3048 l
-382 3048 l
-397 3053 l
-407 3063 l
-412 3073 l
-412 3088 l
-407 3098 l
-397 3108 l
-382 3113 l
-372 3113 l
-357 3108 l
-347 3098 l
-342 3088 l
-342 3073 l
-S
-342 3148 m
-412 3148 l
-S
-372 3148 m
-357 3153 l
-347 3163 l
-342 3174 l
-342 3189 l
-S
-307 3269 m
-412 3269 l
-S
-357 3269 m
-347 3259 l
-342 3249 l
-342 3234 l
-347 3224 l
-357 3214 l
-372 3209 l
-382 3209 l
-397 3214 l
-407 3224 l
-412 3234 l
-412 3249 l
-407 3259 l
-397 3269 l
-S
-307 3304 m
-312 3309 l
-307 3314 l
-302 3309 l
-307 3304 l
-S
-342 3309 m
-412 3309 l
-S
-342 3349 m
-412 3349 l
-S
-362 3349 m
-347 3364 l
-342 3374 l
-342 3389 l
-347 3399 l
-362 3404 l
-412 3404 l
-S
-342 3499 m
-412 3499 l
-S
-357 3499 m
-347 3489 l
-342 3479 l
-342 3464 l
-347 3454 l
-357 3444 l
-372 3439 l
-382 3439 l
-397 3444 l
-407 3454 l
-412 3464 l
-412 3479 l
-407 3489 l
-397 3499 l
-S
-307 3544 m
-392 3544 l
-407 3549 l
-412 3559 l
-412 3569 l
-S
-342 3529 m
-342 3564 l
-S
-372 3595 m
-372 3655 l
-362 3655 l
-352 3650 l
-347 3645 l
-342 3635 l
-342 3620 l
-347 3610 l
-357 3600 l
-372 3595 l
-382 3595 l
-397 3600 l
-407 3610 l
-412 3620 l
-412 3635 l
-407 3645 l
-397 3655 l
-S
-357 3740 m
-347 3735 l
-342 3720 l
-342 3705 l
-347 3690 l
-357 3685 l
-367 3690 l
-372 3700 l
-377 3725 l
-382 3735 l
-392 3740 l
-397 3740 l
-407 3735 l
-412 3720 l
-412 3705 l
-407 3690 l
-397 3685 l
-S
-342 3780 m
-347 3775 l
-352 3780 l
-347 3785 l
-342 3780 l
-S
-407 3785 m
-412 3780 l
-407 3775 l
-402 3780 l
-407 3785 l
-417 3785 l
-427 3780 l
-432 3775 l
-S
-342 3905 m
-412 3905 l
-S
-362 3905 m
-347 3920 l
-342 3930 l
-342 3945 l
-347 3955 l
-362 3960 l
-412 3960 l
-S
-362 3960 m
-347 3975 l
-342 3985 l
-342 4000 l
-347 4011 l
-362 4016 l
-412 4016 l
-S
-372 4051 m
-372 4111 l
-362 4111 l
-352 4106 l
-347 4101 l
-342 4091 l
-342 4076 l
-347 4066 l
-357 4056 l
-372 4051 l
-382 4051 l
-397 4056 l
-407 4066 l
-412 4076 l
-412 4091 l
-407 4101 l
-397 4111 l
-S
-342 4201 m
-412 4201 l
-S
-357 4201 m
-347 4191 l
-342 4181 l
-342 4166 l
-347 4156 l
-357 4146 l
-372 4141 l
-382 4141 l
-397 4146 l
-407 4156 l
-412 4166 l
-412 4181 l
-407 4191 l
-397 4201 l
-S
-342 4241 m
-412 4241 l
-S
-362 4241 m
-347 4256 l
-342 4266 l
-342 4281 l
-347 4291 l
-362 4296 l
-412 4296 l
-S
-372 4411 m
-372 4472 l
-362 4472 l
-352 4467 l
-347 4462 l
-342 4452 l
-342 4437 l
-347 4427 l
-357 4417 l
-372 4411 l
-382 4411 l
-397 4417 l
-407 4427 l
-412 4437 l
-412 4452 l
-407 4462 l
-397 4472 l
-S
-342 4562 m
-447 4562 l
-S
-357 4562 m
-347 4552 l
-342 4542 l
-342 4527 l
-347 4517 l
-357 4507 l
-372 4502 l
-382 4502 l
-397 4507 l
-407 4517 l
-412 4527 l
-412 4542 l
-407 4552 l
-397 4562 l
-S
-342 4602 m
-392 4602 l
-407 4607 l
-412 4617 l
-412 4632 l
-407 4642 l
-392 4657 l
-S
-342 4657 m
-412 4657 l
-S
-307 4692 m
-312 4697 l
-307 4702 l
-302 4697 l
-307 4692 l
-S
-342 4697 m
-412 4697 l
-S
-342 4737 m
-412 4737 l
-S
-362 4737 m
-347 4752 l
-342 4762 l
-342 4777 l
-347 4787 l
-362 4792 l
-412 4792 l
-S
-342 4853 m
-347 4843 l
-357 4833 l
-372 4827 l
-382 4827 l
-397 4833 l
-407 4843 l
-412 4853 l
-412 4868 l
-407 4878 l
-397 4888 l
-382 4893 l
-372 4893 l
-357 4888 l
-347 4878 l
-342 4868 l
-342 4853 l
-S
-342 4923 m
-412 4978 l
-S
-342 4978 m
-412 4923 l
-S
-307 5133 m
-387 5133 l
-402 5128 l
-407 5123 l
-412 5113 l
-412 5103 l
-407 5093 l
-402 5088 l
-387 5083 l
-377 5083 l
-S
-332 5173 m
-327 5173 l
-317 5178 l
-312 5183 l
-307 5193 l
-307 5213 l
-312 5223 l
-317 5228 l
-327 5233 l
-337 5233 l
-347 5228 l
-362 5218 l
-412 5168 l
-412 5238 l
-S
-307 5299 m
-312 5284 l
-327 5274 l
-352 5269 l
-367 5269 l
-392 5274 l
-407 5284 l
-412 5299 l
-412 5309 l
-407 5324 l
-392 5334 l
-367 5339 l
-352 5339 l
-327 5334 l
-312 5324 l
-307 5309 l
-307 5299 l
-S
-307 5399 m
-312 5384 l
-327 5374 l
-352 5369 l
-367 5369 l
-392 5374 l
-407 5384 l
-412 5399 l
-412 5409 l
-407 5424 l
-392 5434 l
-367 5439 l
-352 5439 l
-327 5434 l
-312 5424 l
-307 5409 l
-307 5399 l
-S
-307 5499 m
-312 5484 l
-327 5474 l
-352 5469 l
-367 5469 l
-392 5474 l
-407 5484 l
-412 5499 l
-412 5509 l
-407 5524 l
-392 5534 l
-367 5539 l
-352 5539 l
-327 5534 l
-312 5524 l
-307 5509 l
-307 5499 l
-S
-402 5579 m
-407 5574 l
-412 5579 l
-407 5584 l
-402 5579 l
-S
-307 5649 m
-312 5634 l
-327 5624 l
-352 5619 l
-367 5619 l
-392 5624 l
-407 5634 l
-412 5649 l
-412 5659 l
-407 5675 l
-392 5685 l
-367 5690 l
-352 5690 l
-327 5685 l
-312 5675 l
-307 5659 l
-307 5649 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 2527 3396 a
- currentpoint grestore moveto
- 2527 3396 a 2703 3396 a
- gsave currentpoint currentpoint translate -90 neg rotate neg exch neg exch translate
- 2703
-3396 a @beginspecial 22 @llx 206 @lly 490 @urx 605 @ury
-1170 @rwi @setspecial
-%%BeginDocument: sun211_figures/frontc_bw.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 22 206 490 605
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:48:46
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-4877 3093 m
-4662 3178 l
-4355 3300 l
-4048 3421 l
-3740 3543 l
-3433 3665 l
-3126 3786 l
-2819 3908 l
-2512 4029 l
-2205 4151 l
-2203 4152 l
-2202 4152 l
-2200 4153 l
-2199 4154 l
-2197 4154 l
-2195 4155 l
-2194 4155 l
-2192 4156 l
-2191 4157 l
-2189 4157 l
-2188 4158 l
-2186 4159 l
-2184 4159 l
-2183 4160 l
-2181 4160 l
-2180 4161 l
-2178 4162 l
-2177 4162 l
-2175 4163 l
-2173 4164 l
-2172 4164 l
-2170 4165 l
-2169 4165 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-4059 1777 m
-4039 1803 l
-3834 2062 l
-3628 2321 l
-3423 2580 l
-3218 2839 l
-3013 3098 l
-2808 3357 l
-2602 3616 l
-2397 3875 l
-2192 4134 l
-2191 4135 l
-2190 4137 l
-2189 4138 l
-2188 4139 l
-2187 4141 l
-2186 4142 l
-2185 4143 l
-2184 4145 l
-2183 4146 l
-2182 4147 l
-2181 4149 l
-2180 4150 l
-2178 4151 l
-2177 4152 l
-2176 4154 l
-2175 4155 l
-2174 4156 l
-2173 4158 l
-2172 4159 l
-2171 4160 l
-2170 4162 l
-2169 4163 l
-2168 4164 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-2519 1777 m
-2510 1837 l
-2462 2164 l
-2414 2491 l
-2365 2818 l
-2317 3145 l
-2269 3472 l
-2221 3799 l
-2172 4125 l
-2172 4127 l
-2172 4129 l
-2172 4130 l
-2171 4132 l
-2171 4134 l
-2171 4135 l
-2171 4137 l
-2171 4139 l
-2170 4140 l
-2170 4142 l
-2170 4144 l
-2170 4146 l
-2169 4147 l
-2169 4149 l
-2169 4151 l
-2169 4152 l
-2168 4154 l
-2168 4156 l
-2168 4157 l
-2168 4159 l
-2167 4161 l
-2167 4162 l
-2167 4164 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1221 1777 m
-1300 1977 l
-1422 2284 l
-1543 2591 l
-1665 2899 l
-1786 3206 l
-1908 3513 l
-2030 3821 l
-2151 4128 l
-2152 4130 l
-2152 4131 l
-2153 4133 l
-2154 4134 l
-2154 4136 l
-2155 4137 l
-2156 4139 l
-2156 4140 l
-2157 4142 l
-2157 4144 l
-2158 4145 l
-2159 4147 l
-2159 4148 l
-2160 4150 l
-2161 4151 l
-2161 4153 l
-2162 4155 l
-2162 4156 l
-2163 4158 l
-2164 4159 l
-2164 4161 l
-2165 4162 l
-2166 4164 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 2871 m
-581 2909 l
-840 3114 l
-1099 3319 l
-1357 3525 l
-1616 3730 l
-1875 3935 l
-2134 4141 l
-2135 4142 l
-2137 4143 l
-2138 4144 l
-2139 4145 l
-2141 4146 l
-2142 4147 l
-2143 4148 l
-2145 4149 l
-2146 4150 l
-2147 4151 l
-2149 4152 l
-2150 4153 l
-2151 4154 l
-2153 4155 l
-2154 4156 l
-2155 4157 l
-2157 4158 l
-2158 4160 l
-2159 4161 l
-2160 4162 l
-2162 4163 l
-2163 4164 l
-2164 4165 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 3925 m
-818 3967 l
-1145 4015 l
-1472 4064 l
-1799 4112 l
-2126 4160 l
-2127 4161 l
-2129 4161 l
-2131 4161 l
-2132 4161 l
-2134 4162 l
-2136 4162 l
-2137 4162 l
-2139 4162 l
-2141 4163 l
-2142 4163 l
-2144 4163 l
-2146 4163 l
-2147 4164 l
-2149 4164 l
-2151 4164 l
-2152 4164 l
-2154 4165 l
-2156 4165 l
-2157 4165 l
-2159 4165 l
-2161 4165 l
-2162 4166 l
-2164 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 4813 m
-592 4790 l
-900 4668 l
-1207 4547 l
-1514 4425 l
-1821 4303 l
-2128 4182 l
-2130 4181 l
-2131 4180 l
-2133 4180 l
-2134 4179 l
-2136 4178 l
-2137 4178 l
-2139 4177 l
-2141 4177 l
-2142 4176 l
-2144 4175 l
-2145 4175 l
-2147 4174 l
-2148 4173 l
-2150 4173 l
-2152 4172 l
-2153 4172 l
-2155 4171 l
-2156 4170 l
-2158 4170 l
-2159 4169 l
-2161 4169 l
-2163 4168 l
-2164 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-618 6121 m
-705 6012 l
-910 5753 l
-1115 5494 l
-1320 5235 l
-1525 4976 l
-1730 4717 l
-1936 4458 l
-2141 4199 l
-2142 4197 l
-2143 4196 l
-2144 4195 l
-2145 4193 l
-2146 4192 l
-2147 4191 l
-2148 4189 l
-2149 4188 l
-2150 4187 l
-2151 4186 l
-2152 4184 l
-2153 4183 l
-2154 4182 l
-2155 4180 l
-2156 4179 l
-2158 4178 l
-2159 4176 l
-2160 4175 l
-2161 4174 l
-2162 4172 l
-2163 4171 l
-2164 4170 l
-2165 4168 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-S
-1878 6121 m
-1919 5842 l
-1967 5515 l
-2016 5188 l
-2064 4861 l
-2112 4534 l
-2160 4207 l
-2161 4206 l
-2161 4204 l
-2161 4202 l
-2161 4201 l
-2162 4199 l
-2162 4197 l
-2162 4196 l
-2162 4194 l
-2163 4192 l
-2163 4191 l
-2163 4189 l
-2163 4187 l
-2164 4186 l
-2164 4184 l
-2164 4182 l
-2164 4181 l
-2165 4179 l
-2165 4177 l
-2165 4176 l
-2165 4174 l
-2166 4172 l
-2166 4171 l
-2166 4169 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-S
-2940 6121 m
-2911 6049 l
-2790 5741 l
-2668 5434 l
-2546 5127 l
-2425 4819 l
-2303 4512 l
-2182 4205 l
-2181 4203 l
-2180 4202 l
-2180 4200 l
-2179 4198 l
-2179 4197 l
-2178 4195 l
-2177 4194 l
-2177 4192 l
-2176 4191 l
-2175 4189 l
-2175 4188 l
-2174 4186 l
-2174 4184 l
-2173 4183 l
-2172 4181 l
-2172 4180 l
-2171 4178 l
-2170 4177 l
-2170 4175 l
-2169 4173 l
-2169 4172 l
-2168 4170 l
-2167 4169 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2166 4166 l
-2166 4166 l
-S
-4631 6121 m
-4529 6040 l
-4270 5835 l
-4011 5629 l
-3752 5424 l
-3493 5219 l
-3234 5013 l
-2975 4808 l
-2717 4603 l
-2458 4397 l
-2199 4192 l
-2197 4191 l
-2196 4190 l
-2195 4189 l
-2194 4188 l
-2192 4187 l
-2191 4186 l
-2190 4185 l
-2188 4184 l
-2187 4183 l
-2186 4182 l
-2184 4180 l
-2183 4179 l
-2182 4178 l
-2180 4177 l
-2179 4176 l
-2178 4175 l
-2176 4174 l
-2175 4173 l
-2174 4172 l
-2172 4171 l
-2171 4170 l
-2170 4169 l
-2168 4168 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4166 l
-2166 4166 l
-S
-4877 4567 m
-4822 4559 l
-4495 4511 l
-4168 4462 l
-3841 4414 l
-3514 4366 l
-3188 4317 l
-2861 4269 l
-2534 4221 l
-2207 4172 l
-2206 4172 l
-2204 4172 l
-2202 4172 l
-2201 4171 l
-2199 4171 l
-2197 4171 l
-2196 4171 l
-2194 4170 l
-2192 4170 l
-2191 4170 l
-2189 4170 l
-2187 4169 l
-2186 4169 l
-2184 4169 l
-2182 4169 l
-2181 4168 l
-2179 4168 l
-2177 4168 l
-2176 4168 l
-2174 4167 l
-2172 4167 l
-2171 4167 l
-2169 4167 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-4877 2504 m
-4876 2503 l
-4872 2496 l
-4868 2489 l
-4864 2482 l
-4860 2476 l
-4855 2469 l
-4851 2462 l
-4847 2456 l
-4843 2449 l
-4838 2442 l
-4834 2436 l
-4830 2429 l
-4826 2423 l
-4821 2416 l
-4817 2409 l
-4812 2403 l
-4808 2396 l
-4804 2390 l
-4799 2383 l
-4795 2377 l
-4790 2370 l
-4786 2364 l
-4781 2357 l
-4777 2351 l
-4772 2344 l
-4768 2338 l
-4763 2331 l
-4759 2325 l
-4754 2318 l
-4750 2312 l
-4745 2306 l
-4740 2299 l
-4736 2293 l
-4731 2286 l
-4726 2280 l
-4722 2274 l
-4717 2267 l
-4712 2261 l
-4708 2255 l
-4703 2248 l
-4698 2242 l
-4693 2236 l
-4689 2230 l
-4684 2223 l
-4679 2217 l
-4674 2211 l
-4669 2205 l
-4664 2198 l
-4659 2192 l
-4655 2186 l
-4650 2180 l
-4645 2174 l
-4640 2168 l
-4635 2161 l
-4630 2155 l
-4625 2149 l
-4620 2143 l
-4615 2137 l
-4610 2131 l
-4605 2125 l
-4600 2119 l
-4595 2113 l
-4589 2107 l
-4584 2101 l
-4579 2095 l
-4574 2089 l
-4569 2083 l
-4564 2077 l
-4559 2071 l
-4553 2065 l
-4548 2059 l
-4543 2053 l
-4538 2047 l
-4532 2041 l
-4527 2036 l
-4522 2030 l
-4517 2024 l
-4511 2018 l
-4506 2012 l
-4501 2006 l
-4495 2001 l
-4490 1995 l
-4484 1989 l
-4479 1983 l
-4474 1978 l
-4468 1972 l
-4463 1966 l
-4457 1960 l
-4452 1955 l
-4446 1949 l
-4441 1943 l
-4435 1938 l
-4430 1932 l
-4424 1927 l
-4419 1921 l
-4413 1915 l
-4407 1910 l
-4402 1904 l
-4396 1899 l
-4391 1893 l
-4385 1888 l
-4379 1882 l
-4374 1877 l
-4368 1871 l
-4362 1866 l
-4357 1860 l
-4351 1855 l
-4345 1849 l
-4339 1844 l
-4334 1839 l
-4328 1833 l
-4322 1828 l
-4316 1823 l
-4310 1817 l
-4305 1812 l
-4299 1807 l
-4293 1801 l
-4287 1796 l
-4281 1791 l
-4275 1786 l
-4269 1780 l
-4266 1777 l
-S
-4675 6121 m
-4678 6117 l
-4683 6111 l
-4688 6104 l
-4693 6098 l
-4698 6092 l
-4702 6086 l
-4707 6079 l
-4712 6073 l
-4717 6067 l
-4721 6060 l
-4726 6054 l
-4731 6048 l
-4735 6041 l
-4740 6035 l
-4745 6028 l
-4749 6022 l
-4754 6016 l
-4758 6009 l
-4763 6003 l
-4767 5996 l
-4772 5990 l
-4776 5983 l
-4781 5977 l
-4785 5970 l
-4790 5964 l
-4794 5957 l
-4799 5951 l
-4803 5944 l
-4808 5938 l
-4812 5931 l
-4816 5925 l
-4821 5918 l
-4825 5911 l
-4829 5905 l
-4834 5898 l
-4838 5892 l
-4842 5885 l
-4846 5878 l
-4851 5872 l
-4855 5865 l
-4859 5858 l
-4863 5852 l
-4867 5845 l
-4872 5838 l
-4876 5831 l
-4877 5829 l
-S
-4854 3102 m
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3101 l
-4853 3101 l
-4853 3101 l
-4853 3100 l
-4853 3100 l
-4853 3099 l
-4853 3099 l
-4852 3098 l
-4852 3098 l
-4852 3097 l
-4852 3097 l
-4852 3096 l
-4851 3096 l
-4849 3089 l
-4846 3082 l
-4843 3076 l
-4841 3069 l
-4838 3063 l
-4835 3056 l
-4832 3049 l
-4830 3043 l
-4827 3036 l
-4824 3029 l
-4821 3023 l
-4818 3016 l
-4816 3010 l
-4813 3003 l
-4810 2997 l
-4807 2990 l
-4804 2983 l
-4801 2977 l
-4798 2970 l
-4795 2964 l
-4792 2957 l
-4789 2951 l
-4786 2944 l
-4783 2938 l
-4780 2931 l
-4777 2925 l
-4774 2918 l
-4771 2912 l
-4768 2905 l
-4764 2899 l
-4761 2893 l
-4758 2886 l
-4755 2880 l
-4752 2873 l
-4748 2867 l
-4745 2860 l
-4742 2854 l
-4739 2848 l
-4735 2841 l
-4732 2835 l
-4729 2829 l
-4726 2822 l
-4722 2816 l
-4719 2809 l
-4715 2803 l
-4712 2797 l
-4709 2791 l
-4705 2784 l
-4702 2778 l
-4698 2772 l
-4695 2765 l
-4691 2759 l
-4688 2753 l
-4684 2747 l
-4681 2740 l
-4677 2734 l
-4674 2728 l
-4670 2722 l
-4667 2715 l
-4663 2709 l
-4659 2703 l
-4656 2697 l
-4652 2691 l
-4648 2684 l
-4645 2678 l
-4641 2672 l
-4637 2666 l
-4634 2660 l
-4630 2654 l
-4626 2648 l
-4622 2642 l
-4619 2635 l
-4615 2629 l
-4611 2623 l
-4607 2617 l
-4603 2611 l
-4599 2605 l
-4596 2599 l
-4592 2593 l
-4588 2587 l
-4584 2581 l
-4580 2575 l
-4576 2569 l
-4572 2563 l
-4568 2557 l
-4564 2551 l
-4560 2545 l
-4556 2539 l
-4552 2533 l
-4548 2527 l
-4544 2522 l
-4540 2516 l
-4536 2510 l
-4531 2504 l
-4527 2498 l
-4523 2492 l
-4519 2486 l
-4515 2481 l
-4511 2475 l
-4506 2469 l
-4502 2463 l
-4498 2457 l
-4494 2452 l
-4489 2446 l
-4485 2440 l
-4481 2434 l
-4477 2428 l
-4472 2423 l
-4468 2417 l
-4464 2411 l
-4459 2406 l
-4455 2400 l
-4451 2394 l
-4446 2389 l
-4442 2383 l
-4437 2377 l
-4433 2372 l
-4428 2366 l
-4424 2360 l
-4419 2355 l
-4415 2349 l
-4410 2344 l
-4406 2338 l
-4401 2333 l
-4397 2327 l
-4392 2321 l
-4388 2316 l
-4383 2310 l
-4378 2305 l
-4374 2299 l
-4369 2294 l
-4365 2289 l
-4360 2283 l
-4355 2278 l
-4351 2272 l
-4346 2267 l
-4341 2261 l
-4336 2256 l
-4332 2251 l
-4327 2245 l
-4322 2240 l
-4317 2235 l
-4313 2229 l
-4308 2224 l
-4303 2219 l
-4298 2213 l
-4293 2208 l
-4288 2203 l
-4283 2197 l
-4279 2192 l
-4274 2187 l
-4269 2182 l
-4264 2177 l
-4259 2171 l
-4254 2166 l
-4249 2161 l
-4244 2156 l
-4239 2151 l
-4234 2146 l
-4229 2140 l
-4224 2135 l
-4219 2130 l
-4214 2125 l
-4209 2120 l
-4204 2115 l
-4199 2110 l
-4194 2105 l
-4188 2100 l
-4183 2095 l
-4178 2090 l
-4173 2085 l
-4168 2080 l
-4163 2075 l
-4157 2070 l
-4152 2065 l
-S
-4152 2065 m
-4147 2060 l
-4142 2055 l
-4137 2050 l
-4131 2045 l
-4126 2041 l
-4121 2036 l
-4115 2031 l
-4110 2026 l
-4105 2021 l
-4100 2016 l
-4094 2012 l
-4089 2007 l
-4083 2002 l
-4078 1997 l
-4073 1993 l
-4067 1988 l
-4062 1983 l
-4056 1978 l
-4051 1974 l
-4046 1969 l
-4040 1964 l
-4035 1960 l
-4029 1955 l
-4024 1951 l
-4018 1946 l
-4013 1941 l
-4007 1937 l
-4002 1932 l
-3996 1928 l
-3991 1923 l
-3985 1919 l
-3979 1914 l
-3974 1910 l
-3968 1905 l
-3963 1901 l
-3957 1896 l
-3951 1892 l
-3946 1887 l
-3940 1883 l
-3934 1879 l
-3929 1874 l
-3923 1870 l
-3917 1865 l
-3912 1861 l
-3906 1857 l
-3900 1852 l
-3894 1848 l
-3889 1844 l
-3883 1840 l
-3877 1835 l
-3871 1831 l
-3866 1827 l
-3860 1823 l
-3854 1818 l
-3848 1814 l
-3842 1810 l
-3836 1806 l
-3831 1802 l
-3825 1798 l
-3819 1794 l
-3813 1790 l
-3807 1785 l
-3801 1781 l
-3795 1777 l
-S
-4297 6121 m
-4298 6120 l
-4302 6115 l
-4307 6110 l
-4312 6105 l
-4317 6099 l
-4322 6094 l
-4326 6088 l
-4331 6083 l
-4336 6078 l
-4341 6072 l
-4345 6067 l
-4350 6062 l
-4355 6056 l
-4359 6051 l
-4364 6045 l
-4369 6040 l
-4373 6034 l
-4378 6029 l
-4383 6023 l
-4387 6018 l
-4392 6012 l
-4396 6007 l
-4401 6001 l
-4405 5996 l
-4410 5990 l
-4414 5985 l
-4419 5979 l
-4423 5973 l
-4428 5968 l
-4432 5962 l
-4437 5956 l
-4441 5951 l
-4446 5945 l
-4450 5940 l
-4454 5934 l
-4459 5928 l
-4463 5922 l
-4468 5917 l
-4472 5911 l
-4476 5905 l
-4480 5900 l
-4485 5894 l
-4489 5888 l
-4493 5882 l
-4498 5877 l
-4502 5871 l
-4506 5865 l
-4510 5859 l
-4514 5853 l
-4519 5847 l
-4523 5842 l
-4527 5836 l
-4531 5830 l
-4535 5824 l
-4539 5818 l
-4543 5812 l
-4547 5806 l
-4551 5800 l
-4555 5795 l
-4560 5789 l
-4564 5783 l
-4568 5777 l
-4572 5771 l
-4575 5765 l
-4579 5759 l
-4583 5753 l
-4587 5747 l
-4591 5741 l
-4595 5735 l
-4599 5729 l
-4603 5723 l
-4607 5717 l
-4611 5711 l
-4614 5704 l
-4618 5698 l
-4622 5692 l
-4626 5686 l
-4629 5680 l
-4633 5674 l
-4637 5668 l
-4641 5662 l
-4644 5656 l
-4648 5649 l
-4652 5643 l
-4655 5637 l
-4659 5631 l
-4663 5625 l
-4666 5619 l
-4670 5612 l
-4673 5606 l
-4677 5600 l
-4681 5594 l
-4684 5587 l
-4688 5581 l
-4691 5575 l
-4695 5569 l
-4698 5562 l
-4701 5556 l
-4705 5550 l
-4708 5543 l
-4712 5537 l
-4715 5531 l
-4718 5524 l
-4722 5518 l
-4725 5512 l
-4729 5505 l
-4732 5499 l
-4735 5493 l
-4738 5486 l
-4742 5480 l
-4745 5474 l
-4748 5467 l
-4751 5461 l
-4755 5454 l
-4758 5448 l
-4761 5441 l
-4764 5435 l
-4767 5429 l
-4770 5422 l
-4773 5416 l
-4777 5409 l
-4780 5403 l
-4783 5396 l
-4786 5390 l
-4789 5383 l
-4792 5377 l
-4795 5370 l
-4798 5364 l
-4801 5357 l
-4804 5351 l
-4807 5344 l
-4809 5337 l
-4812 5331 l
-4815 5324 l
-4818 5318 l
-4821 5311 l
-4824 5305 l
-4827 5298 l
-4829 5291 l
-4832 5285 l
-4835 5278 l
-4838 5271 l
-4840 5265 l
-4843 5258 l
-4846 5252 l
-4848 5245 l
-4851 5238 l
-4854 5232 l
-4856 5225 l
-4859 5218 l
-4862 5212 l
-4864 5205 l
-4867 5198 l
-4869 5191 l
-4872 5185 l
-4874 5178 l
-4877 5171 l
-4877 5171 l
-S
-4877 3162 m
-4877 3162 l
-4874 3155 l
-4872 3149 l
-4869 3142 l
-4867 3135 l
-4864 3129 l
-4862 3122 l
-4859 3115 l
-4856 3109 l
-4854 3102 l
-S
-4585 3208 m
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3207 l
-4584 3207 l
-4584 3206 l
-4584 3206 l
-4584 3205 l
-4584 3205 l
-4584 3205 l
-4583 3204 l
-4583 3204 l
-4583 3203 l
-4583 3203 l
-4581 3197 l
-4578 3191 l
-4576 3185 l
-4573 3179 l
-4571 3173 l
-4568 3167 l
-4566 3161 l
-4563 3155 l
-4561 3149 l
-4558 3143 l
-4556 3137 l
-4553 3131 l
-4551 3125 l
-4548 3119 l
-4545 3114 l
-4543 3108 l
-4540 3102 l
-4538 3096 l
-4535 3090 l
-4532 3084 l
-4529 3078 l
-4527 3072 l
-4524 3067 l
-4521 3061 l
-4519 3055 l
-4516 3049 l
-4513 3043 l
-4510 3037 l
-4507 3032 l
-4505 3026 l
-4502 3020 l
-4499 3014 l
-4496 3008 l
-4493 3003 l
-4490 2997 l
-4487 2991 l
-4484 2985 l
-4482 2980 l
-4479 2974 l
-4476 2968 l
-4473 2962 l
-4470 2957 l
-4467 2951 l
-4464 2945 l
-4461 2939 l
-4458 2934 l
-4454 2928 l
-4451 2922 l
-4448 2917 l
-4445 2911 l
-4442 2905 l
-4439 2900 l
-4436 2894 l
-4433 2889 l
-4429 2883 l
-4426 2877 l
-4423 2872 l
-4420 2866 l
-4417 2860 l
-4413 2855 l
-4410 2849 l
-4407 2844 l
-4404 2838 l
-4400 2833 l
-4397 2827 l
-4394 2822 l
-4390 2816 l
-4387 2811 l
-4384 2805 l
-4380 2800 l
-4377 2794 l
-4373 2789 l
-4370 2783 l
-4366 2778 l
-4363 2772 l
-4360 2767 l
-4356 2761 l
-4353 2756 l
-4349 2750 l
-4346 2745 l
-4342 2740 l
-4339 2734 l
-4335 2729 l
-4331 2723 l
-4328 2718 l
-4324 2713 l
-4321 2707 l
-4317 2702 l
-4313 2697 l
-4310 2691 l
-4306 2686 l
-4302 2681 l
-4299 2675 l
-4295 2670 l
-4291 2665 l
-4287 2660 l
-4284 2654 l
-4280 2649 l
-4276 2644 l
-4272 2639 l
-4269 2633 l
-4265 2628 l
-4261 2623 l
-4257 2618 l
-4253 2613 l
-4249 2607 l
-4246 2602 l
-4242 2597 l
-4238 2592 l
-4234 2587 l
-4230 2582 l
-4226 2577 l
-4222 2571 l
-4218 2566 l
-4214 2561 l
-4210 2556 l
-4206 2551 l
-4202 2546 l
-4198 2541 l
-4194 2536 l
-4190 2531 l
-4186 2526 l
-4182 2521 l
-4178 2516 l
-4174 2511 l
-4170 2506 l
-4166 2501 l
-4161 2496 l
-4157 2491 l
-4153 2486 l
-4149 2481 l
-4145 2476 l
-4141 2471 l
-4136 2467 l
-4132 2462 l
-4128 2457 l
-4124 2452 l
-4119 2447 l
-4115 2442 l
-4111 2437 l
-4107 2433 l
-4102 2428 l
-4098 2423 l
-4094 2418 l
-4089 2413 l
-4085 2409 l
-4081 2404 l
-4076 2399 l
-4072 2394 l
-4067 2390 l
-4063 2385 l
-4059 2380 l
-4054 2376 l
-4050 2371 l
-4045 2366 l
-4041 2362 l
-4036 2357 l
-4032 2352 l
-4027 2348 l
-4023 2343 l
-4018 2338 l
-4014 2334 l
-4009 2329 l
-4005 2325 l
-4000 2320 l
-3995 2316 l
-3991 2311 l
-3986 2307 l
-3982 2302 l
-3977 2298 l
-3972 2293 l
-3968 2289 l
-3963 2284 l
-3958 2280 l
-3954 2275 l
-S
-3954 2275 m
-3949 2271 l
-3944 2266 l
-3940 2262 l
-3935 2258 l
-3930 2253 l
-3925 2249 l
-3921 2244 l
-3916 2240 l
-3911 2236 l
-3906 2231 l
-3901 2227 l
-3897 2223 l
-3892 2218 l
-3887 2214 l
-3882 2210 l
-3877 2206 l
-3872 2201 l
-3867 2197 l
-3863 2193 l
-3858 2189 l
-3853 2185 l
-3848 2180 l
-3843 2176 l
-3838 2172 l
-3833 2168 l
-3828 2164 l
-3823 2160 l
-3818 2156 l
-3813 2152 l
-3808 2147 l
-3803 2143 l
-3798 2139 l
-3793 2135 l
-3788 2131 l
-3783 2127 l
-3778 2123 l
-3773 2119 l
-3768 2115 l
-3763 2111 l
-3758 2107 l
-3752 2103 l
-3747 2099 l
-3742 2096 l
-3737 2092 l
-3732 2088 l
-3727 2084 l
-3722 2080 l
-3716 2076 l
-3711 2072 l
-3706 2068 l
-3701 2065 l
-3696 2061 l
-3690 2057 l
-3685 2053 l
-3680 2049 l
-3675 2046 l
-3669 2042 l
-3664 2038 l
-3659 2035 l
-3654 2031 l
-3648 2027 l
-3643 2024 l
-3638 2020 l
-3632 2016 l
-3627 2013 l
-3622 2009 l
-3616 2005 l
-3611 2002 l
-3606 1998 l
-3600 1995 l
-3595 1991 l
-3589 1988 l
-3584 1984 l
-3579 1980 l
-3573 1977 l
-3568 1974 l
-3562 1970 l
-3557 1967 l
-3551 1963 l
-3546 1960 l
-3540 1956 l
-3535 1953 l
-3529 1949 l
-3524 1946 l
-3518 1943 l
-3513 1939 l
-3507 1936 l
-3502 1933 l
-3496 1929 l
-3491 1926 l
-3485 1923 l
-3480 1920 l
-3474 1916 l
-3468 1913 l
-3463 1910 l
-3457 1907 l
-3452 1903 l
-3446 1900 l
-3440 1897 l
-3435 1894 l
-3429 1891 l
-3424 1888 l
-3418 1885 l
-3412 1881 l
-3407 1878 l
-3401 1875 l
-3395 1872 l
-3390 1869 l
-3384 1866 l
-3378 1863 l
-3372 1860 l
-3367 1857 l
-3361 1854 l
-3355 1851 l
-3349 1848 l
-3344 1845 l
-3338 1842 l
-3332 1840 l
-3326 1837 l
-3321 1834 l
-3315 1831 l
-3309 1828 l
-3303 1825 l
-3297 1822 l
-3292 1820 l
-3286 1817 l
-3280 1814 l
-3274 1811 l
-3268 1809 l
-3262 1806 l
-3257 1803 l
-3251 1800 l
-3245 1798 l
-3239 1795 l
-3233 1792 l
-3227 1790 l
-3221 1787 l
-3215 1785 l
-3210 1782 l
-3204 1779 l
-3199 1777 l
-S
-1133 1777 m
-1133 1778 l
-1127 1780 l
-1121 1783 l
-1115 1785 l
-1109 1788 l
-1104 1791 l
-1098 1793 l
-1092 1796 l
-1086 1798 l
-1080 1801 l
-1074 1804 l
-1068 1807 l
-1062 1809 l
-1057 1812 l
-1051 1815 l
-1045 1818 l
-1039 1820 l
-1033 1823 l
-1028 1826 l
-1022 1829 l
-1016 1832 l
-1010 1835 l
-1004 1837 l
-999 1840 l
-993 1843 l
-987 1846 l
-981 1849 l
-976 1852 l
-970 1855 l
-964 1858 l
-958 1861 l
-953 1864 l
-947 1867 l
-941 1870 l
-936 1873 l
-930 1876 l
-924 1879 l
-919 1882 l
-913 1885 l
-907 1889 l
-902 1892 l
-896 1895 l
-890 1898 l
-885 1901 l
-879 1904 l
-874 1908 l
-868 1911 l
-862 1914 l
-857 1917 l
-851 1920 l
-846 1924 l
-840 1927 l
-835 1930 l
-829 1934 l
-823 1937 l
-818 1940 l
-812 1944 l
-807 1947 l
-801 1950 l
-796 1954 l
-790 1957 l
-785 1961 l
-780 1964 l
-774 1968 l
-769 1971 l
-763 1974 l
-758 1978 l
-752 1981 l
-747 1985 l
-742 1988 l
-736 1992 l
-731 1996 l
-725 1999 l
-720 2003 l
-715 2006 l
-709 2010 l
-704 2014 l
-699 2017 l
-693 2021 l
-688 2025 l
-683 2028 l
-677 2032 l
-672 2036 l
-667 2039 l
-662 2043 l
-656 2047 l
-651 2051 l
-646 2054 l
-641 2058 l
-635 2062 l
-630 2066 l
-625 2069 l
-620 2073 l
-615 2077 l
-609 2081 l
-604 2085 l
-599 2089 l
-594 2093 l
-589 2097 l
-584 2100 l
-579 2104 l
-573 2108 l
-568 2112 l
-563 2116 l
-558 2120 l
-553 2124 l
-548 2128 l
-543 2132 l
-538 2136 l
-533 2140 l
-S
-3884 6121 m
-3886 6119 l
-3891 6115 l
-3896 6111 l
-3901 6106 l
-3906 6102 l
-3910 6098 l
-3915 6093 l
-3920 6089 l
-3925 6085 l
-3930 6080 l
-3934 6076 l
-3939 6072 l
-3944 6067 l
-3948 6063 l
-3953 6058 l
-3958 6054 l
-3962 6050 l
-3967 6045 l
-3972 6041 l
-3976 6036 l
-3981 6032 l
-3986 6027 l
-3990 6023 l
-3995 6018 l
-3999 6013 l
-4004 6009 l
-4009 6004 l
-4013 6000 l
-4018 5995 l
-4022 5991 l
-4027 5986 l
-4031 5981 l
-4036 5977 l
-4040 5972 l
-4045 5967 l
-4049 5963 l
-4054 5958 l
-4058 5953 l
-4062 5949 l
-4067 5944 l
-4071 5939 l
-4076 5935 l
-4080 5930 l
-4084 5925 l
-4089 5920 l
-4093 5915 l
-4097 5911 l
-4102 5906 l
-4106 5901 l
-4110 5896 l
-4115 5891 l
-4119 5887 l
-4123 5882 l
-4127 5877 l
-4132 5872 l
-4136 5867 l
-4140 5862 l
-4144 5857 l
-4148 5852 l
-4153 5847 l
-4157 5843 l
-4161 5838 l
-4165 5833 l
-4169 5828 l
-4173 5823 l
-4177 5818 l
-4182 5813 l
-4186 5808 l
-4190 5803 l
-4194 5798 l
-4198 5793 l
-4202 5788 l
-4206 5783 l
-4210 5777 l
-4214 5772 l
-4218 5767 l
-4222 5762 l
-4226 5757 l
-4230 5752 l
-4234 5747 l
-4237 5742 l
-4241 5737 l
-4245 5731 l
-4249 5726 l
-4253 5721 l
-4257 5716 l
-4261 5711 l
-4264 5706 l
-4268 5700 l
-4272 5695 l
-4276 5690 l
-4280 5685 l
-4283 5679 l
-4287 5674 l
-4291 5669 l
-4295 5664 l
-4298 5658 l
-4302 5653 l
-4306 5648 l
-4309 5642 l
-4313 5637 l
-4317 5632 l
-4320 5626 l
-4324 5621 l
-4327 5616 l
-4331 5610 l
-4335 5605 l
-4338 5600 l
-4342 5594 l
-4345 5589 l
-4349 5583 l
-4352 5578 l
-4356 5572 l
-4359 5567 l
-4363 5562 l
-4366 5556 l
-4370 5551 l
-4373 5545 l
-4376 5540 l
-4380 5534 l
-4383 5529 l
-4387 5523 l
-4390 5518 l
-4393 5512 l
-4397 5507 l
-4400 5501 l
-4403 5496 l
-4406 5490 l
-4410 5484 l
-4413 5479 l
-4416 5473 l
-4419 5468 l
-4423 5462 l
-4426 5457 l
-4429 5451 l
-4432 5445 l
-4435 5440 l
-4439 5434 l
-4442 5428 l
-4445 5423 l
-4448 5417 l
-4451 5411 l
-4454 5406 l
-4457 5400 l
-4460 5394 l
-4463 5389 l
-4466 5383 l
-4469 5377 l
-4472 5372 l
-4475 5366 l
-4478 5360 l
-4481 5354 l
-4484 5349 l
-4487 5343 l
-4490 5337 l
-4493 5331 l
-4496 5326 l
-4499 5320 l
-4501 5314 l
-4504 5308 l
-4507 5302 l
-4510 5297 l
-4513 5291 l
-4516 5285 l
-4518 5279 l
-4521 5273 l
-4524 5267 l
-4526 5261 l
-4529 5256 l
-4532 5250 l
-4535 5244 l
-4537 5238 l
-4540 5232 l
-4543 5226 l
-4545 5220 l
-4548 5214 l
-4550 5208 l
-4553 5203 l
-4555 5197 l
-4558 5191 l
-4561 5185 l
-4563 5179 l
-4566 5173 l
-4568 5167 l
-4571 5161 l
-4573 5155 l
-4575 5149 l
-4578 5143 l
-4580 5137 l
-4583 5131 l
-4585 5125 l
-4587 5119 l
-4590 5113 l
-4592 5107 l
-4594 5101 l
-4597 5095 l
-4599 5089 l
-4601 5083 l
-4604 5077 l
-S
-4604 5077 m
-4606 5071 l
-4608 5065 l
-4610 5059 l
-4612 5053 l
-4615 5047 l
-4617 5040 l
-4619 5034 l
-4621 5028 l
-4623 5022 l
-4625 5016 l
-4627 5010 l
-4630 5004 l
-4632 4998 l
-4634 4992 l
-4636 4986 l
-4638 4979 l
-4640 4973 l
-4642 4967 l
-4644 4961 l
-4646 4955 l
-4648 4949 l
-4650 4942 l
-4651 4936 l
-4653 4930 l
-4655 4924 l
-4657 4918 l
-4659 4912 l
-4661 4905 l
-4663 4899 l
-4664 4893 l
-4666 4887 l
-4668 4881 l
-4670 4874 l
-4672 4868 l
-4673 4862 l
-4675 4856 l
-4677 4850 l
-4678 4843 l
-4680 4837 l
-4682 4831 l
-4683 4825 l
-4685 4818 l
-4687 4812 l
-4688 4806 l
-4690 4800 l
-4691 4793 l
-4693 4787 l
-4694 4781 l
-4696 4774 l
-4697 4768 l
-4699 4762 l
-4700 4756 l
-4702 4749 l
-4703 4743 l
-4705 4737 l
-4706 4730 l
-4707 4724 l
-4709 4718 l
-4710 4711 l
-4712 4705 l
-4713 4699 l
-4714 4693 l
-4715 4686 l
-4717 4680 l
-4718 4674 l
-4719 4667 l
-4720 4661 l
-4722 4655 l
-4723 4648 l
-4724 4642 l
-4725 4636 l
-4726 4629 l
-4728 4623 l
-4729 4616 l
-4730 4610 l
-4731 4604 l
-4732 4597 l
-4733 4591 l
-4734 4585 l
-4735 4578 l
-4736 4572 l
-4737 4565 l
-4738 4559 l
-4739 4553 l
-4740 4546 l
-4741 4540 l
-4742 4534 l
-4743 4527 l
-4744 4521 l
-4744 4514 l
-4745 4508 l
-4746 4502 l
-4747 4495 l
-4748 4489 l
-4749 4482 l
-4749 4476 l
-4750 4470 l
-4751 4463 l
-4752 4457 l
-4752 4450 l
-4753 4444 l
-4754 4437 l
-4754 4431 l
-4755 4425 l
-4756 4418 l
-4756 4412 l
-4757 4405 l
-4757 4399 l
-4758 4392 l
-4759 4386 l
-4759 4380 l
-4760 4373 l
-4760 4367 l
-4761 4360 l
-4761 4354 l
-4762 4347 l
-4762 4341 l
-4762 4334 l
-4763 4328 l
-4763 4322 l
-4764 4315 l
-4764 4309 l
-4764 4302 l
-4765 4296 l
-4765 4289 l
-4765 4283 l
-4765 4276 l
-4766 4270 l
-4766 4264 l
-4766 4257 l
-4766 4251 l
-4767 4244 l
-4767 4238 l
-4767 4231 l
-4767 4225 l
-4767 4218 l
-4767 4212 l
-4768 4205 l
-4768 4199 l
-4768 4193 l
-4768 4186 l
-4768 4180 l
-4768 4173 l
-4768 4167 l
-4768 4160 l
-4768 4154 l
-4768 4147 l
-4768 4141 l
-4768 4134 l
-4768 4128 l
-4767 4122 l
-4767 4115 l
-4767 4109 l
-4767 4102 l
-4767 4096 l
-4767 4089 l
-4766 4083 l
-4766 4076 l
-4766 4070 l
-4766 4063 l
-4766 4057 l
-4765 4051 l
-4765 4044 l
-4765 4038 l
-4764 4031 l
-4764 4025 l
-4764 4018 l
-4763 4012 l
-4763 4005 l
-4762 3999 l
-4762 3993 l
-4762 3986 l
-4761 3980 l
-4761 3973 l
-4760 3967 l
-4760 3960 l
-4759 3954 l
-4759 3947 l
-4758 3941 l
-4757 3935 l
-4757 3928 l
-4756 3922 l
-4756 3915 l
-4755 3909 l
-4754 3902 l
-4754 3896 l
-4753 3890 l
-4752 3883 l
-4752 3877 l
-4751 3870 l
-4750 3864 l
-4749 3858 l
-4749 3851 l
-4748 3845 l
-4747 3838 l
-4746 3832 l
-4745 3826 l
-4745 3819 l
-4744 3813 l
-S
-4744 3813 m
-4743 3806 l
-4742 3800 l
-4741 3794 l
-4740 3787 l
-4739 3781 l
-4738 3774 l
-4737 3768 l
-4736 3762 l
-4735 3755 l
-4734 3749 l
-4733 3742 l
-4732 3736 l
-4731 3730 l
-4730 3723 l
-4729 3717 l
-4728 3711 l
-4726 3704 l
-4725 3698 l
-4724 3692 l
-4723 3685 l
-4722 3679 l
-4721 3673 l
-4719 3666 l
-4718 3660 l
-4717 3654 l
-4715 3647 l
-4714 3641 l
-4713 3635 l
-4712 3628 l
-4710 3622 l
-4709 3616 l
-4707 3609 l
-4706 3603 l
-4705 3597 l
-4703 3590 l
-4702 3584 l
-4700 3578 l
-4699 3572 l
-4697 3565 l
-4696 3559 l
-4694 3553 l
-4693 3546 l
-4691 3540 l
-4690 3534 l
-4688 3528 l
-4687 3521 l
-4685 3515 l
-4683 3509 l
-4682 3503 l
-4680 3496 l
-4678 3490 l
-4677 3484 l
-4675 3478 l
-4673 3471 l
-4672 3465 l
-4670 3459 l
-4668 3453 l
-4666 3447 l
-4665 3440 l
-4663 3434 l
-4661 3428 l
-4659 3422 l
-4657 3416 l
-4655 3409 l
-4653 3403 l
-4652 3397 l
-4650 3391 l
-4648 3385 l
-4646 3379 l
-4644 3372 l
-4642 3366 l
-4640 3360 l
-4638 3354 l
-4636 3348 l
-4634 3342 l
-4632 3336 l
-4630 3330 l
-4628 3323 l
-4625 3317 l
-4623 3311 l
-4621 3305 l
-4619 3299 l
-4617 3293 l
-4615 3287 l
-4613 3281 l
-4610 3275 l
-4608 3269 l
-4606 3263 l
-4604 3257 l
-4601 3251 l
-4599 3244 l
-4597 3238 l
-4594 3232 l
-4592 3226 l
-4590 3220 l
-4587 3214 l
-4585 3208 l
-S
-4316 3315 m
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3314 l
-4316 3314 l
-4316 3314 l
-4316 3314 l
-4316 3313 l
-4316 3313 l
-4315 3313 l
-4315 3312 l
-4315 3312 l
-4315 3311 l
-4315 3311 l
-4315 3311 l
-4315 3310 l
-4314 3310 l
-4312 3305 l
-4310 3299 l
-4308 3294 l
-4306 3289 l
-4304 3283 l
-4301 3278 l
-4299 3273 l
-4297 3267 l
-4295 3262 l
-4293 3257 l
-4290 3252 l
-4288 3246 l
-4255 3173 l
-4219 3101 l
-4181 3031 l
-4140 2961 l
-4097 2893 l
-4052 2827 l
-4004 2762 l
-3954 2699 l
-3902 2638 l
-3848 2579 l
-3792 2521 l
-3734 2466 l
-3674 2412 l
-3612 2361 l
-3549 2312 l
-3484 2265 l
-3417 2220 l
-3349 2178 l
-3279 2138 l
-3208 2101 l
-3135 2066 l
-3062 2033 l
-2987 2003 l
-2912 1976 l
-2835 1952 l
-2758 1930 l
-2680 1911 l
-2602 1894 l
-2522 1880 l
-2443 1869 l
-2363 1861 l
-2283 1856 l
-2203 1853 l
-2122 1853 l
-2042 1856 l
-1962 1862 l
-1882 1870 l
-1803 1881 l
-1724 1895 l
-1645 1912 l
-1567 1932 l
-1490 1954 l
-1414 1979 l
-1338 2006 l
-1264 2036 l
-1190 2069 l
-1118 2104 l
-1047 2142 l
-978 2182 l
-909 2224 l
-843 2269 l
-778 2316 l
-714 2366 l
-653 2417 l
-593 2471 l
-535 2526 l
-533 2528 l
-S
-533 5804 m
-572 5842 l
-631 5896 l
-692 5948 l
-755 5998 l
-819 6046 l
-885 6092 l
-930 6121 l
-S
-3403 6121 m
-3459 6085 l
-3525 6039 l
-3589 5990 l
-3652 5940 l
-3712 5887 l
-3771 5832 l
-3828 5776 l
-3883 5717 l
-3936 5656 l
-3986 5594 l
-4035 5530 l
-4081 5464 l
-4125 5397 l
-4166 5328 l
-4205 5258 l
-4242 5186 l
-4276 5114 l
-4308 5040 l
-4337 4965 l
-4363 4889 l
-4387 4812 l
-4408 4735 l
-4426 4657 l
-4442 4578 l
-4455 4498 l
-4465 4419 l
-4472 4339 l
-4477 4258 l
-4479 4178 l
-4478 4098 l
-4474 4018 l
-4467 3937 l
-4458 3858 l
-4446 3778 l
-4431 3699 l
-4414 3621 l
-4393 3543 l
-4370 3466 l
-4345 3390 l
-4316 3315 l
-S
-4048 3421 m
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4047 3421 l
-4047 3420 l
-4047 3420 l
-4047 3420 l
-4047 3419 l
-4047 3419 l
-4047 3419 l
-4046 3418 l
-4046 3418 l
-4046 3418 l
-4046 3417 l
-4046 3417 l
-4044 3412 l
-4042 3408 l
-4040 3403 l
-4038 3398 l
-4036 3394 l
-4035 3389 l
-4033 3384 l
-4031 3380 l
-4029 3375 l
-4027 3371 l
-4025 3366 l
-4023 3361 l
-3994 3297 l
-3962 3234 l
-3929 3172 l
-3893 3112 l
-3856 3052 l
-3816 2994 l
-3774 2938 l
-3731 2883 l
-3685 2829 l
-3638 2777 l
-3589 2727 l
-3538 2678 l
-3486 2632 l
-3432 2587 l
-3376 2544 l
-3319 2503 l
-3261 2464 l
-3201 2427 l
-3140 2392 l
-3078 2359 l
-3014 2328 l
-2950 2300 l
-2885 2274 l
-2819 2250 l
-2752 2229 l
-2684 2209 l
-2616 2193 l
-2547 2178 l
-2478 2166 l
-2408 2156 l
-2338 2149 l
-2268 2144 l
-2198 2142 l
-2128 2142 l
-2058 2145 l
-1988 2150 l
-1918 2157 l
-1848 2167 l
-1779 2179 l
-1710 2194 l
-1642 2211 l
-1575 2230 l
-1508 2252 l
-1442 2276 l
-1377 2302 l
-1312 2331 l
-1249 2362 l
-1187 2395 l
-1126 2430 l
-1067 2467 l
-1008 2506 l
-951 2547 l
-896 2591 l
-842 2636 l
-790 2683 l
-739 2731 l
-690 2782 l
-643 2834 l
-598 2888 l
-554 2943 l
-533 2972 l
-S
-533 5361 m
-539 5369 l
-582 5425 l
-626 5479 l
-673 5532 l
-721 5583 l
-771 5632 l
-823 5680 l
-876 5726 l
-931 5769 l
-987 5811 l
-1045 5851 l
-1104 5889 l
-1165 5925 l
-1226 5959 l
-1289 5991 l
-1353 6020 l
-1418 6047 l
-1484 6072 l
-1550 6095 l
-1617 6115 l
-1641 6121 l
-S
-2692 6121 m
-2727 6112 l
-2794 6091 l
-2861 6068 l
-2926 6043 l
-2991 6015 l
-3055 5985 l
-3117 5953 l
-3179 5919 l
-3239 5883 l
-3298 5845 l
-3355 5805 l
-3412 5762 l
-3466 5718 l
-3519 5672 l
-3571 5624 l
-3620 5574 l
-3668 5523 l
-3714 5470 l
-3759 5416 l
-3801 5359 l
-3842 5302 l
-3880 5243 l
-3916 5183 l
-3951 5121 l
-3983 5059 l
-4012 4995 l
-4040 4931 l
-4065 4865 l
-4089 4799 l
-4109 4732 l
-4128 4664 l
-4144 4595 l
-4158 4526 l
-4169 4457 l
-4178 4387 l
-4184 4317 l
-4188 4247 l
-4190 4177 l
-4189 4106 l
-4186 4036 l
-4180 3966 l
-4172 3896 l
-4161 3827 l
-4148 3758 l
-4133 3689 l
-4115 3621 l
-4095 3554 l
-4072 3487 l
-4048 3421 l
-S
-3779 3527 m
-3779 3527 l
-3779 3527 l
-3778 3527 l
-3778 3526 l
-3778 3526 l
-3778 3526 l
-3778 3525 l
-3778 3525 l
-3778 3525 l
-3778 3525 l
-3778 3524 l
-3777 3524 l
-3776 3520 l
-3774 3516 l
-3773 3512 l
-3771 3508 l
-3769 3504 l
-3768 3500 l
-3766 3496 l
-3764 3492 l
-3763 3488 l
-3761 3484 l
-3759 3480 l
-3758 3476 l
-3733 3421 l
-3706 3367 l
-3677 3314 l
-3647 3262 l
-3614 3212 l
-3580 3162 l
-3545 3113 l
-3507 3066 l
-3468 3020 l
-3428 2976 l
-3386 2933 l
-3342 2891 l
-3297 2851 l
-3251 2812 l
-3203 2775 l
-3154 2740 l
-3104 2707 l
-3053 2675 l
-3001 2645 l
-2947 2617 l
-2893 2591 l
-2838 2567 l
-2782 2544 l
-2726 2524 l
-2668 2505 l
-2610 2489 l
-2552 2474 l
-2493 2462 l
-2433 2452 l
-2374 2444 l
-2314 2437 l
-2254 2433 l
-2194 2431 l
-2133 2431 l
-2073 2434 l
-2013 2438 l
-1953 2444 l
-1894 2453 l
-1834 2463 l
-1775 2476 l
-1717 2490 l
-1659 2507 l
-1602 2526 l
-1545 2546 l
-1489 2569 l
-1434 2593 l
-1380 2620 l
-1327 2648 l
-1275 2678 l
-1224 2710 l
-1174 2743 l
-1125 2779 l
-1077 2816 l
-1031 2854 l
-986 2895 l
-943 2936 l
-901 2980 l
-861 3024 l
-822 3070 l
-785 3118 l
-749 3166 l
-715 3216 l
-683 3267 l
-653 3319 l
-624 3372 l
-598 3426 l
-573 3481 l
-550 3537 l
-533 3583 l
-S
-533 4749 m
-542 4775 l
-564 4831 l
-588 4886 l
-614 4940 l
-642 4994 l
-672 5046 l
-703 5098 l
-736 5148 l
-771 5197 l
-808 5245 l
-846 5292 l
-886 5337 l
-928 5380 l
-970 5423 l
-1015 5464 l
-1060 5503 l
-1107 5540 l
-1156 5576 l
-1205 5611 l
-1256 5643 l
-1308 5674 l
-1361 5703 l
-1415 5730 l
-1469 5755 l
-1525 5778 l
-1581 5800 l
-1638 5819 l
-1696 5836 l
-1754 5852 l
-1813 5865 l
-1872 5876 l
-1931 5886 l
-1991 5893 l
-2051 5898 l
-2111 5901 l
-2172 5902 l
-2232 5900 l
-2292 5897 l
-2352 5892 l
-2412 5884 l
-2471 5875 l
-2530 5863 l
-2589 5849 l
-2647 5834 l
-2705 5816 l
-2762 5796 l
-2818 5775 l
-2873 5751 l
-2928 5726 l
-2981 5698 l
-3034 5669 l
-3086 5638 l
-3136 5605 l
-3186 5571 l
-3234 5534 l
-3280 5496 l
-3326 5457 l
-3370 5416 l
-3413 5373 l
-3454 5329 l
-3493 5284 l
-3531 5237 l
-3568 5189 l
-3602 5140 l
-3635 5089 l
-3666 5038 l
-3696 4985 l
-3723 4931 l
-3749 4877 l
-3772 4821 l
-3794 4765 l
-3814 4708 l
-3832 4651 l
-3848 4593 l
-3861 4534 l
-3873 4475 l
-3883 4415 l
-3890 4356 l
-3896 4296 l
-3899 4235 l
-3901 4175 l
-3900 4115 l
-3897 4055 l
-3892 3995 l
-3885 3935 l
-3876 3875 l
-3865 3816 l
-3852 3757 l
-3837 3699 l
-3819 3641 l
-3800 3584 l
-3779 3528 l
-S
-3510 3634 m
-3510 3634 l
-3510 3633 l
-3510 3633 l
-3510 3633 l
-3510 3633 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3631 l
-3509 3631 l
-3508 3628 l
-3506 3624 l
-3505 3621 l
-3504 3618 l
-3502 3614 l
-3501 3611 l
-3499 3608 l
-3498 3605 l
-3497 3601 l
-3495 3598 l
-3494 3595 l
-3492 3591 l
-3472 3546 l
-3449 3501 l
-3425 3456 l
-3400 3413 l
-3373 3371 l
-3345 3329 l
-3315 3289 l
-3284 3249 l
-3251 3211 l
-3218 3174 l
-3183 3138 l
-3146 3103 l
-3109 3070 l
-3070 3038 l
-3030 3007 l
-2990 2978 l
-2948 2950 l
-2905 2924 l
-2862 2899 l
-2817 2875 l
-2772 2853 l
-2726 2833 l
-2680 2815 l
-2632 2798 l
-2585 2782 l
-2536 2768 l
-2488 2756 l
-2438 2746 l
-2389 2738 l
-2339 2731 l
-2289 2726 l
-2239 2722 l
-2189 2720 l
-2139 2721 l
-2089 2722 l
-2039 2726 l
-1989 2731 l
-1939 2738 l
-1890 2747 l
-1841 2757 l
-1792 2770 l
-1744 2784 l
-1696 2799 l
-1649 2816 l
-1602 2835 l
-1556 2855 l
-1511 2877 l
-1467 2901 l
-1423 2926 l
-1381 2953 l
-1339 2981 l
-1299 3010 l
-1259 3041 l
-1220 3073 l
-1183 3107 l
-1147 3141 l
-1112 3177 l
-1078 3215 l
-1046 3253 l
-1015 3292 l
-985 3333 l
-957 3375 l
-930 3417 l
-905 3460 l
-881 3505 l
-859 3550 l
-839 3595 l
-820 3642 l
-802 3689 l
-786 3737 l
-772 3785 l
-760 3834 l
-749 3883 l
-740 3932 l
-733 3982 l
-727 4032 l
-724 4082 l
-722 4132 l
-721 4182 l
-723 4232 l
-726 4282 l
-731 4332 l
-737 4382 l
-746 4432 l
-756 4481 l
-768 4530 l
-781 4578 l
-796 4626 l
-813 4673 l
-831 4720 l
-851 4766 l
-873 4811 l
-896 4856 l
-921 4900 l
-947 4943 l
-975 4984 l
-1004 5025 l
-1034 5065 l
-1066 5104 l
-1100 5142 l
-1134 5178 l
-1170 5213 l
-1207 5247 l
-1245 5280 l
-1284 5311 l
-1324 5341 l
-1366 5370 l
-1408 5397 l
-1451 5423 l
-1495 5447 l
-1540 5469 l
-1585 5490 l
-1632 5510 l
-1679 5528 l
-1726 5544 l
-1774 5558 l
-1823 5571 l
-1872 5582 l
-1921 5591 l
-1971 5599 l
-2020 5605 l
-2070 5609 l
-2121 5612 l
-2171 5612 l
-2221 5611 l
-2271 5609 l
-2321 5604 l
-2371 5598 l
-2420 5590 l
-2470 5580 l
-2519 5569 l
-2567 5556 l
-2615 5541 l
-2662 5525 l
-2709 5507 l
-2755 5487 l
-2801 5466 l
-2846 5443 l
-2889 5419 l
-2932 5393 l
-2975 5365 l
-3016 5336 l
-3056 5306 l
-3095 5275 l
-3133 5242 l
-3169 5208 l
-3205 5172 l
-3239 5135 l
-3272 5098 l
-3304 5059 l
-3334 5019 l
-3363 4977 l
-3390 4935 l
-3416 4892 l
-3441 4849 l
-3464 4804 l
-3485 4758 l
-3505 4712 l
-3523 4665 l
-3539 4618 l
-3554 4570 l
-3567 4522 l
-3579 4473 l
-3589 4423 l
-3597 4374 l
-3603 4324 l
-3608 4274 l
-3611 4224 l
-3612 4174 l
-3611 4124 l
-3609 4073 l
-3605 4023 l
-3599 3973 l
-3591 3924 l
-3582 3874 l
-S
-3582 3874 m
-3571 3825 l
-3558 3777 l
-3544 3729 l
-3528 3681 l
-3510 3634 l
-S
-3241 3740 m
-3241 3740 l
-3241 3740 l
-3241 3740 l
-3241 3740 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3738 l
-3241 3738 l
-3240 3738 l
-3239 3735 l
-3238 3733 l
-3237 3730 l
-3236 3727 l
-3235 3725 l
-3234 3722 l
-3233 3720 l
-3232 3717 l
-3231 3714 l
-3229 3712 l
-3228 3709 l
-3227 3706 l
-3211 3670 l
-3193 3634 l
-3174 3598 l
-3153 3564 l
-3132 3530 l
-3109 3497 l
-3085 3464 l
-3060 3433 l
-3034 3402 l
-3007 3373 l
-2979 3344 l
-2950 3316 l
-2920 3289 l
-2889 3264 l
-2858 3239 l
-2825 3216 l
-2792 3193 l
-2757 3172 l
-2723 3152 l
-2687 3134 l
-2651 3116 l
-2614 3100 l
-2577 3085 l
-2539 3071 l
-2501 3059 l
-2462 3048 l
-2423 3038 l
-2384 3030 l
-2344 3023 l
-2305 3018 l
-2265 3014 l
-2225 3011 l
-2185 3010 l
-2144 3010 l
-2104 3011 l
-2064 3014 l
-2024 3018 l
-1985 3024 l
-1945 3031 l
-1906 3039 l
-1867 3049 l
-1828 3060 l
-1790 3072 l
-1752 3086 l
-1715 3101 l
-1678 3118 l
-1642 3135 l
-1607 3154 l
-1572 3174 l
-1538 3195 l
-1505 3218 l
-1472 3241 l
-1440 3266 l
-1410 3292 l
-1380 3319 l
-1351 3346 l
-1323 3375 l
-1296 3405 l
-1270 3436 l
-1245 3467 l
-1221 3500 l
-1199 3533 l
-1178 3567 l
-1157 3602 l
-1138 3637 l
-1121 3673 l
-1104 3710 l
-1089 3747 l
-1075 3785 l
-1062 3823 l
-1051 3861 l
-1041 3900 l
-1033 3939 l
-1026 3979 l
-1020 4019 l
-1015 4059 l
-1012 4099 l
-1011 4139 l
-1010 4179 l
-1011 4219 l
-1014 4259 l
-1018 4299 l
-1023 4339 l
-1030 4379 l
-1038 4418 l
-1047 4457 l
-1058 4496 l
-1070 4534 l
-1084 4572 l
-1098 4609 l
-1114 4646 l
-1132 4682 l
-1150 4718 l
-1170 4753 l
-1191 4787 l
-1213 4821 l
-1236 4854 l
-1261 4885 l
-1286 4916 l
-1313 4947 l
-1340 4976 l
-1369 5004 l
-1399 5031 l
-1429 5057 l
-1460 5082 l
-1493 5106 l
-1526 5129 l
-1560 5151 l
-1594 5171 l
-1629 5191 l
-1665 5209 l
-1702 5226 l
-1739 5241 l
-1776 5255 l
-1814 5268 l
-1853 5280 l
-1892 5290 l
-1931 5299 l
-1970 5306 l
-2010 5313 l
-2050 5317 l
-2090 5321 l
-2130 5323 l
-2170 5323 l
-2210 5322 l
-2250 5320 l
-2290 5317 l
-2330 5312 l
-2370 5305 l
-2409 5297 l
-2448 5288 l
-2487 5278 l
-2525 5266 l
-2563 5253 l
-2601 5239 l
-2638 5223 l
-2674 5206 l
-2710 5188 l
-2745 5168 l
-2779 5147 l
-2813 5126 l
-2846 5102 l
-2878 5078 l
-2909 5053 l
-2939 5027 l
-2969 4999 l
-2997 4971 l
-3025 4942 l
-3051 4911 l
-3076 4880 l
-3101 4848 l
-3124 4815 l
-3146 4782 l
-3166 4747 l
-3186 4712 l
-3204 4676 l
-3221 4640 l
-3237 4603 l
-3252 4566 l
-3265 4528 l
-3277 4489 l
-3287 4451 l
-3296 4411 l
-3304 4372 l
-3311 4332 l
-3316 4293 l
-3319 4253 l
-3322 4212 l
-3323 4172 l
-3322 4132 l
-3320 4092 l
-3317 4052 l
-3312 4012 l
-3306 3972 l
-3299 3933 l
-S
-3299 3933 m
-3290 3894 l
-3280 3855 l
-3268 3816 l
-3256 3778 l
-3241 3741 l
-S
-2973 3847 m
-2973 3847 l
-2972 3847 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3845 l
-2972 3845 l
-2972 3845 l
-2971 3843 l
-2970 3841 l
-2970 3839 l
-2969 3837 l
-2968 3835 l
-2967 3833 l
-2966 3831 l
-2965 3829 l
-2965 3827 l
-2964 3825 l
-2963 3823 l
-2962 3821 l
-2950 3794 l
-2936 3767 l
-2922 3740 l
-2907 3714 l
-2890 3689 l
-2873 3664 l
-2856 3640 l
-2837 3616 l
-2817 3593 l
-2797 3571 l
-2776 3549 l
-2754 3529 l
-2732 3509 l
-2709 3489 l
-2685 3471 l
-2660 3453 l
-2635 3437 l
-2610 3421 l
-2584 3406 l
-2557 3392 l
-2530 3379 l
-2502 3366 l
-2474 3355 l
-2446 3345 l
-2417 3336 l
-2388 3328 l
-2359 3320 l
-2330 3314 l
-2300 3309 l
-2270 3305 l
-2240 3302 l
-2210 3300 l
-2180 3299 l
-2150 3299 l
-2120 3300 l
-2090 3302 l
-2060 3305 l
-2030 3310 l
-2000 3315 l
-1971 3321 l
-1942 3328 l
-1913 3337 l
-1884 3346 l
-1856 3356 l
-1828 3368 l
-1800 3380 l
-1773 3393 l
-1747 3407 l
-1721 3422 l
-1695 3438 l
-1670 3455 l
-1646 3473 l
-1622 3491 l
-1599 3510 l
-1576 3530 l
-1555 3551 l
-1534 3573 l
-1514 3595 l
-1494 3618 l
-1476 3642 l
-1458 3666 l
-1441 3691 l
-1425 3717 l
-1410 3743 l
-1395 3769 l
-1382 3796 l
-1370 3824 l
-1358 3852 l
-1348 3880 l
-1338 3909 l
-1330 3938 l
-1323 3967 l
-1316 3996 l
-1311 4026 l
-1306 4056 l
-1303 4086 l
-1301 4116 l
-1300 4146 l
-1299 4176 l
-1300 4206 l
-1302 4236 l
-1305 4266 l
-1309 4296 l
-1314 4326 l
-1320 4355 l
-1327 4384 l
-1335 4413 l
-1344 4442 l
-1354 4471 l
-1365 4499 l
-1377 4526 l
-1390 4553 l
-1404 4580 l
-1419 4606 l
-1435 4632 l
-1451 4657 l
-1469 4682 l
-1487 4706 l
-1506 4729 l
-1526 4752 l
-1547 4773 l
-1568 4795 l
-1591 4815 l
-1613 4835 l
-1637 4853 l
-1661 4871 l
-1686 4889 l
-1711 4905 l
-1737 4920 l
-1764 4935 l
-1790 4948 l
-1818 4961 l
-1846 4972 l
-1874 4983 l
-1902 4993 l
-1931 5001 l
-1960 5009 l
-1990 5016 l
-2019 5021 l
-2049 5026 l
-2079 5030 l
-2109 5032 l
-2139 5034 l
-2169 5034 l
-2199 5033 l
-2229 5032 l
-2259 5029 l
-2289 5025 l
-2319 5021 l
-2348 5015 l
-2378 5008 l
-2407 5000 l
-2436 4991 l
-2464 4981 l
-2492 4971 l
-2520 4959 l
-2547 4946 l
-2574 4932 l
-2600 4918 l
-2626 4902 l
-2651 4886 l
-2676 4868 l
-2700 4850 l
-2723 4831 l
-2746 4812 l
-2768 4791 l
-2790 4770 l
-2810 4748 l
-2830 4725 l
-2849 4702 l
-2867 4678 l
-2884 4653 l
-2901 4628 l
-2916 4602 l
-2931 4576 l
-2945 4549 l
-2958 4522 l
-2969 4494 l
-2980 4466 l
-2990 4437 l
-2999 4409 l
-3007 4380 l
-3014 4350 l
-3020 4321 l
-3025 4291 l
-3028 4261 l
-3031 4231 l
-3033 4201 l
-3034 4171 l
-3033 4141 l
-3032 4111 l
-3029 4081 l
-3026 4051 l
-3021 4021 l
-3016 3991 l
-S
-3016 3991 m
-3009 3962 l
-3001 3933 l
-2993 3904 l
-2983 3875 l
-2973 3847 l
-S
-2704 3953 m
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3952 l
-2703 3952 l
-2703 3952 l
-2703 3951 l
-2702 3950 l
-2702 3948 l
-2701 3947 l
-2701 3946 l
-2700 3944 l
-2700 3943 l
-2699 3942 l
-2699 3940 l
-2698 3939 l
-2697 3938 l
-2697 3936 l
-2689 3918 l
-2680 3900 l
-2670 3882 l
-2660 3865 l
-2649 3848 l
-2638 3832 l
-2626 3815 l
-2613 3800 l
-2600 3784 l
-2587 3769 l
-2573 3755 l
-2558 3741 l
-2543 3728 l
-2528 3715 l
-2512 3703 l
-2496 3691 l
-2479 3680 l
-2462 3669 l
-2445 3659 l
-2427 3650 l
-2409 3641 l
-2390 3633 l
-2372 3626 l
-2353 3619 l
-2334 3613 l
-2314 3607 l
-2295 3602 l
-2275 3598 l
-2255 3595 l
-2236 3592 l
-2216 3590 l
-2196 3589 l
-2176 3588 l
-2155 3588 l
-2135 3589 l
-2115 3590 l
-2095 3592 l
-2076 3595 l
-2056 3599 l
-2036 3603 l
-2017 3608 l
-1997 3613 l
-1978 3619 l
-1959 3626 l
-1941 3634 l
-1922 3642 l
-1904 3651 l
-1887 3660 l
-1869 3670 l
-1852 3681 l
-1836 3692 l
-1819 3704 l
-1803 3716 l
-1788 3729 l
-1773 3742 l
-1759 3756 l
-1745 3771 l
-1731 3786 l
-1718 3801 l
-1706 3817 l
-1694 3833 l
-1683 3850 l
-1672 3867 l
-1662 3884 l
-1652 3902 l
-1644 3920 l
-1635 3938 l
-1628 3957 l
-1621 3975 l
-1614 3995 l
-1609 4014 l
-1604 4033 l
-1600 4053 l
-1596 4073 l
-1593 4093 l
-1591 4112 l
-1589 4133 l
-1589 4153 l
-1588 4173 l
-1589 4193 l
-1590 4213 l
-1592 4233 l
-1595 4253 l
-1598 4273 l
-1602 4292 l
-1607 4312 l
-1612 4331 l
-1618 4350 l
-1625 4369 l
-1632 4388 l
-1640 4406 l
-1649 4424 l
-1658 4442 l
-1668 4460 l
-1679 4477 l
-1690 4494 l
-1701 4510 l
-1714 4526 l
-1726 4541 l
-1740 4556 l
-1753 4571 l
-1768 4585 l
-1783 4599 l
-1798 4612 l
-1813 4624 l
-1830 4636 l
-1846 4648 l
-1863 4659 l
-1880 4669 l
-1898 4679 l
-1916 4688 l
-1934 4696 l
-1953 4704 l
-1971 4711 l
-1990 4717 l
-2010 4723 l
-2029 4728 l
-2049 4733 l
-2068 4736 l
-2088 4739 l
-2108 4742 l
-2128 4743 l
-2148 4744 l
-2168 4745 l
-2188 4744 l
-2208 4743 l
-2228 4741 l
-2248 4739 l
-2268 4736 l
-2288 4732 l
-2307 4727 l
-2327 4722 l
-2346 4716 l
-2365 4710 l
-2384 4702 l
-2402 4695 l
-2420 4686 l
-2438 4677 l
-2456 4667 l
-2473 4657 l
-2490 4646 l
-2506 4634 l
-2522 4622 l
-2538 4610 l
-2553 4597 l
-2568 4583 l
-2582 4569 l
-2596 4554 l
-2609 4539 l
-2621 4523 l
-2634 4507 l
-2645 4491 l
-2656 4474 l
-2666 4457 l
-2676 4439 l
-2685 4421 l
-2694 4403 l
-2702 4385 l
-2709 4366 l
-2716 4347 l
-2722 4328 l
-2727 4308 l
-2731 4289 l
-2735 4269 l
-2739 4249 l
-2741 4229 l
-2743 4209 l
-2744 4189 l
-2745 4169 l
-2744 4149 l
-2743 4129 l
-2742 4109 l
-2739 4089 l
-2736 4069 l
-2733 4050 l
-S
-2733 4050 m
-2728 4030 l
-2723 4011 l
-2717 3991 l
-2711 3972 l
-2704 3953 l
-S
-2435 4060 m
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2434 4058 l
-2434 4057 l
-2434 4057 l
-2434 4056 l
-2433 4055 l
-2433 4055 l
-2433 4054 l
-2432 4053 l
-2432 4053 l
-2432 4052 l
-2432 4051 l
-2427 4042 l
-2423 4033 l
-2418 4024 l
-2413 4016 l
-2408 4007 l
-2402 3999 l
-2396 3991 l
-2390 3983 l
-2383 3975 l
-2377 3968 l
-2370 3961 l
-2362 3954 l
-2355 3947 l
-2347 3941 l
-2339 3935 l
-2331 3929 l
-2323 3923 l
-2314 3918 l
-2305 3913 l
-2297 3908 l
-2288 3904 l
-2278 3900 l
-2269 3896 l
-2260 3893 l
-2250 3890 l
-2240 3887 l
-2231 3884 l
-2221 3882 l
-2211 3881 l
-2201 3879 l
-2191 3878 l
-2181 3878 l
-2171 3877 l
-2161 3877 l
-2151 3878 l
-2141 3878 l
-2131 3879 l
-2121 3881 l
-2111 3882 l
-2101 3885 l
-2092 3887 l
-2082 3890 l
-2072 3893 l
-2063 3896 l
-2054 3900 l
-2044 3904 l
-2035 3909 l
-2027 3913 l
-2018 3918 l
-2009 3924 l
-2001 3929 l
-1993 3935 l
-1985 3941 l
-1977 3948 l
-1970 3954 l
-1963 3961 l
-1956 3969 l
-1949 3976 l
-1942 3984 l
-1936 3992 l
-1930 4000 l
-1925 4008 l
-1919 4016 l
-1914 4025 l
-1909 4034 l
-1905 4043 l
-1901 4052 l
-1897 4061 l
-1894 4071 l
-1890 4080 l
-1888 4090 l
-1885 4100 l
-1883 4110 l
-1881 4120 l
-1880 4129 l
-1879 4139 l
-1878 4149 l
-1877 4159 l
-1877 4170 l
-1878 4180 l
-1878 4190 l
-1879 4200 l
-1881 4210 l
-1882 4219 l
-1884 4229 l
-1887 4239 l
-1889 4249 l
-1892 4258 l
-1896 4268 l
-1899 4277 l
-1903 4286 l
-1908 4295 l
-1912 4304 l
-1917 4313 l
-1923 4322 l
-1928 4330 l
-1934 4338 l
-1940 4346 l
-1946 4354 l
-1953 4361 l
-1960 4369 l
-1967 4376 l
-1974 4383 l
-1982 4389 l
-1990 4395 l
-1998 4401 l
-2006 4407 l
-2015 4412 l
-2023 4418 l
-2032 4422 l
-2041 4427 l
-2050 4431 l
-2059 4435 l
-2069 4439 l
-2078 4442 l
-2088 4445 l
-2098 4447 l
-2107 4449 l
-2117 4451 l
-2127 4453 l
-2137 4454 l
-2147 4455 l
-2157 4455 l
-2167 4456 l
-2177 4455 l
-2187 4455 l
-2197 4454 l
-2207 4453 l
-2217 4451 l
-2227 4449 l
-2237 4447 l
-2247 4444 l
-2256 4441 l
-2266 4438 l
-2275 4434 l
-2284 4430 l
-2293 4426 l
-2302 4422 l
-2311 4417 l
-2320 4412 l
-2328 4406 l
-2336 4400 l
-2344 4394 l
-2352 4388 l
-2360 4381 l
-2367 4375 l
-2374 4368 l
-2381 4360 l
-2388 4353 l
-2394 4345 l
-2400 4337 l
-2406 4329 l
-2411 4320 l
-2416 4312 l
-2421 4303 l
-2426 4294 l
-2430 4285 l
-2434 4276 l
-2438 4266 l
-2441 4257 l
-2444 4247 l
-2447 4237 l
-2449 4228 l
-2451 4218 l
-2452 4208 l
-2454 4198 l
-2455 4188 l
-2455 4178 l
-2455 4168 l
-2455 4158 l
-2455 4148 l
-2454 4138 l
-2453 4128 l
-2451 4118 l
-2450 4108 l
-S
-2450 4108 m
-2447 4098 l
-2445 4088 l
-2442 4079 l
-2439 4069 l
-2435 4060 l
-S
-2166 4166 m
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-3682 3323 m
-3655 3337 l
-S
-3559 3132 m
-3534 3150 l
-S
-3412 2959 m
-3390 2980 l
-S
-3057 2677 m
-3041 2704 l
-S
-2855 2574 m
-2843 2602 l
-S
-2642 2498 m
-2633 2527 l
-S
-2194 2431 m
-2193 2462 l
-S
-1967 2443 m
-1971 2473 l
-S
-1744 2483 m
-1751 2513 l
-S
-1323 2650 m
-1338 2677 l
-S
-1132 2773 m
-1151 2798 l
-S
-960 2920 m
-981 2942 l
-S
-678 3275 m
-704 3291 l
-S
-575 3477 m
-603 3489 l
-S
-651 5010 m
-678 4995 l
-S
-774 5201 m
-799 5183 l
-S
-921 5374 m
-943 5353 l
-S
-1276 5655 m
-1291 5629 l
-S
-1478 5759 m
-1490 5731 l
-S
-1691 5835 m
-1700 5806 l
-S
-2139 5901 m
-2140 5871 l
-S
-2366 5890 m
-2362 5860 l
-S
-2589 5849 m
-2582 5820 l
-S
-3010 5683 m
-2995 5656 l
-S
-3200 5560 m
-3182 5535 l
-S
-3373 5413 m
-3352 5391 l
-S
-3655 5058 m
-3628 5042 l
-S
-3758 4856 m
-3730 4844 l
-S
-3834 4642 m
-3805 4634 l
-S
-3900 4194 m
-3870 4193 l
-S
-3889 3967 m
-3859 3971 l
-S
-3848 3744 m
-3819 3751 l
-S
-4787 3129 m
-4799 3156 l
-S
-4719 3155 m
-4732 3183 l
-S
-4652 3182 m
-4665 3209 l
-S
-4518 3235 m
-4531 3263 l
-S
-4451 3262 m
-4463 3289 l
-S
-4384 3288 m
-4396 3316 l
-S
-4249 3341 m
-4262 3369 l
-S
-4182 3368 m
-4195 3396 l
-S
-4115 3395 m
-4127 3422 l
-S
-3980 3448 m
-3993 3476 l
-S
-3913 3474 m
-3926 3502 l
-S
-3846 3501 m
-3859 3529 l
-S
-3712 3554 m
-3724 3582 l
-S
-3645 3581 m
-3657 3609 l
-S
-3577 3608 m
-3590 3635 l
-S
-3443 3661 m
-3456 3688 l
-S
-3376 3687 m
-3388 3715 l
-S
-3309 3714 m
-3321 3742 l
-S
-3174 3767 m
-3187 3795 l
-S
-3107 3794 m
-3120 3821 l
-S
-3040 3820 m
-3052 3848 l
-S
-2905 3874 m
-2918 3901 l
-S
-2838 3900 m
-2851 3928 l
-S
-2771 3927 m
-2784 3955 l
-S
-2637 3980 m
-2649 4008 l
-S
-2570 4007 m
-2582 4034 l
-S
-2502 4033 m
-2515 4061 l
-S
-2368 4087 m
-2381 4114 l
-S
-2301 4113 m
-2313 4141 l
-S
-2234 4140 m
-2246 4167 l
-S
-3779 3528 m
-3754 3468 l
-3727 3409 l
-3697 3351 l
-3666 3294 l
-3632 3239 l
-3596 3185 l
-3559 3132 l
-3519 3080 l
-3478 3031 l
-3434 2982 l
-3389 2936 l
-3342 2891 l
-3294 2848 l
-3244 2807 l
-S
-3244 2807 m
-3192 2767 l
-3139 2730 l
-3085 2694 l
-3029 2661 l
-2972 2630 l
-2914 2601 l
-2855 2574 l
-2795 2549 l
-2734 2527 l
-2673 2507 l
-2610 2489 l
-2547 2473 l
-2484 2460 l
-2420 2450 l
-S
-2420 2450 m
-2355 2441 l
-2291 2436 l
-2226 2432 l
-2161 2431 l
-2096 2432 l
-2032 2436 l
-1967 2443 l
-1903 2451 l
-1839 2462 l
-1775 2476 l
-1713 2492 l
-1650 2510 l
-1589 2530 l
-1528 2553 l
-S
-1528 2553 m
-1468 2578 l
-1409 2605 l
-1351 2635 l
-1295 2666 l
-1239 2700 l
-1185 2735 l
-1132 2773 l
-1081 2813 l
-1031 2854 l
-983 2898 l
-936 2943 l
-892 2990 l
-849 3038 l
-807 3088 l
-S
-807 3088 m
-768 3140 l
-731 3193 l
-695 3247 l
-662 3303 l
-631 3360 l
-602 3418 l
-575 3477 l
-550 3537 l
-533 3583 l
-S
-533 4749 m
-554 4805 l
-S
-554 4805 m
-579 4865 l
-606 4924 l
-636 4982 l
-667 5038 l
-701 5094 l
-736 5148 l
-774 5201 l
-814 5252 l
-855 5302 l
-899 5350 l
-944 5397 l
-991 5442 l
-1039 5485 l
-1089 5526 l
-S
-1089 5526 m
-1141 5566 l
-1194 5603 l
-1248 5638 l
-1304 5672 l
-1361 5703 l
-1419 5732 l
-1478 5759 l
-1538 5784 l
-1599 5806 l
-1660 5826 l
-1723 5844 l
-1786 5859 l
-1849 5872 l
-1913 5883 l
-S
-1913 5883 m
-1977 5891 l
-2042 5897 l
-2107 5901 l
-2172 5902 l
-2237 5900 l
-2301 5896 l
-2366 5890 l
-2430 5881 l
-2494 5870 l
-2557 5857 l
-2620 5841 l
-2683 5823 l
-2744 5803 l
-2805 5780 l
-S
-2805 5780 m
-2865 5755 l
-2924 5728 l
-2981 5698 l
-3038 5667 l
-3094 5633 l
-3148 5597 l
-3200 5560 l
-3252 5520 l
-3302 5478 l
-3350 5435 l
-3396 5390 l
-3441 5343 l
-3484 5294 l
-3526 5244 l
-S
-3526 5244 m
-3565 5193 l
-3602 5140 l
-3638 5085 l
-3671 5030 l
-3702 4973 l
-3731 4915 l
-3758 4856 l
-3783 4796 l
-3805 4735 l
-3825 4673 l
-3843 4611 l
-3858 4548 l
-3871 4484 l
-3882 4420 l
-S
-3882 4420 m
-3890 4356 l
-3896 4291 l
-3900 4226 l
-3901 4161 l
-3899 4096 l
-3895 4032 l
-3889 3967 l
-3881 3903 l
-3869 3839 l
-3856 3775 l
-3840 3712 l
-3822 3650 l
-3802 3588 l
-3800 3584 l
-3799 3580 l
-3797 3575 l
-3795 3571 l
-3794 3567 l
-3792 3562 l
-3791 3558 l
-3789 3554 l
-3787 3549 l
-3786 3545 l
-3784 3541 l
-3782 3536 l
-3781 3532 l
-3780 3532 l
-3780 3531 l
-3780 3531 l
-3780 3531 l
-3780 3530 l
-3780 3530 l
-3780 3530 l
-3780 3530 l
-3779 3529 l
-3779 3529 l
-3779 3529 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-S
-4877 3093 m
-4873 3094 l
-4854 3102 l
-S
-4854 3102 m
-4835 3110 l
-4815 3117 l
-4796 3125 l
-4777 3132 l
-4758 3140 l
-4739 3148 l
-4719 3155 l
-4700 3163 l
-4681 3170 l
-4662 3178 l
-4643 3186 l
-4624 3193 l
-4604 3201 l
-4585 3208 l
-S
-4585 3208 m
-4566 3216 l
-4547 3224 l
-4528 3231 l
-4508 3239 l
-4489 3246 l
-4470 3254 l
-4451 3262 l
-4432 3269 l
-4412 3277 l
-4393 3284 l
-4374 3292 l
-4355 3300 l
-4336 3307 l
-4316 3315 l
-S
-4316 3315 m
-4297 3322 l
-4278 3330 l
-4259 3338 l
-4240 3345 l
-4220 3353 l
-4201 3360 l
-4182 3368 l
-4163 3376 l
-4144 3383 l
-4124 3391 l
-4105 3398 l
-4086 3406 l
-4067 3414 l
-4048 3421 l
-S
-4048 3421 m
-4028 3429 l
-4009 3436 l
-3990 3444 l
-3971 3452 l
-3952 3459 l
-3932 3467 l
-3913 3474 l
-3894 3482 l
-3875 3490 l
-3856 3497 l
-3836 3505 l
-3817 3512 l
-3798 3520 l
-3779 3528 l
-S
-3779 3528 m
-3760 3535 l
-3740 3543 l
-3721 3551 l
-3702 3558 l
-3683 3566 l
-3664 3573 l
-3645 3581 l
-3625 3589 l
-3606 3596 l
-3587 3604 l
-3568 3611 l
-3549 3619 l
-3529 3627 l
-3510 3634 l
-S
-3510 3634 m
-3491 3642 l
-3472 3649 l
-3453 3657 l
-3433 3665 l
-3414 3672 l
-3395 3680 l
-3376 3687 l
-3357 3695 l
-3337 3703 l
-3318 3710 l
-3299 3718 l
-3280 3725 l
-3261 3733 l
-3241 3741 l
-S
-3241 3741 m
-3222 3748 l
-3203 3756 l
-3184 3763 l
-3165 3771 l
-3145 3779 l
-3126 3786 l
-3107 3794 l
-3088 3801 l
-3069 3809 l
-3049 3817 l
-3030 3824 l
-3011 3832 l
-2992 3839 l
-2973 3847 l
-S
-2973 3847 m
-2953 3855 l
-2934 3862 l
-2915 3870 l
-2896 3877 l
-2877 3885 l
-2857 3893 l
-2838 3900 l
-2819 3908 l
-2800 3915 l
-2781 3923 l
-2762 3931 l
-2742 3938 l
-2723 3946 l
-2704 3953 l
-S
-2704 3953 m
-2685 3961 l
-2666 3969 l
-2646 3976 l
-2627 3984 l
-2608 3991 l
-2589 3999 l
-2570 4007 l
-2550 4014 l
-2531 4022 l
-2512 4029 l
-2493 4037 l
-2474 4045 l
-2454 4052 l
-2435 4060 l
-S
-2435 4060 m
-2416 4068 l
-2397 4075 l
-2378 4083 l
-2358 4090 l
-2339 4098 l
-2320 4106 l
-2301 4113 l
-2282 4121 l
-2262 4128 l
-2243 4136 l
-2224 4144 l
-2205 4151 l
-2186 4159 l
-2166 4166 l
-S
-2166 4166 m
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1 g
-3911 3420 m
-3914 3420 l
-3914 3421 l
-3911 3421 l
-3908 3421 m
-3914 3421 l
-3914 3422 l
-3908 3422 l
-3906 3422 m
-3915 3422 l
-3915 3423 l
-3906 3423 l
-3903 3423 m
-3915 3423 l
-3915 3424 l
-3903 3424 l
-3901 3424 m
-3916 3424 l
-3916 3425 l
-3901 3425 l
-3898 3425 m
-3916 3425 l
-3916 3426 l
-3898 3426 l
-3896 3426 m
-3916 3426 l
-3916 3427 l
-3896 3427 l
-3893 3427 m
-3917 3427 l
-3917 3428 l
-3893 3428 l
-3891 3428 m
-3917 3428 l
-3917 3429 l
-3891 3429 l
-3888 3429 m
-3918 3429 l
-3918 3430 l
-3888 3430 l
-3886 3430 m
-3918 3430 l
-3918 3431 l
-3886 3431 l
-3883 3431 m
-3918 3431 l
-3918 3432 l
-3883 3432 l
-3881 3432 m
-3919 3432 l
-3919 3433 l
-3881 3433 l
-3878 3433 m
-3919 3433 l
-3919 3434 l
-3878 3434 l
-3876 3434 m
-3920 3434 l
-3920 3435 l
-3876 3435 l
-3873 3435 m
-3920 3435 l
-3920 3436 l
-3873 3436 l
-3871 3436 m
-3920 3436 l
-3920 3437 l
-3871 3437 l
-3868 3437 m
-3921 3437 l
-3921 3438 l
-3868 3438 l
-3866 3438 m
-3921 3438 l
-3921 3439 l
-3866 3439 l
-3863 3439 m
-3922 3439 l
-3922 3440 l
-3863 3440 l
-3861 3440 m
-3922 3440 l
-3922 3441 l
-3861 3441 l
-3858 3441 m
-3922 3441 l
-3922 3442 l
-3858 3442 l
-3856 3442 m
-3923 3442 l
-3923 3443 l
-3856 3443 l
-3853 3443 m
-3923 3443 l
-3923 3444 l
-3853 3444 l
-3851 3444 m
-3924 3444 l
-3924 3445 l
-3851 3445 l
-3848 3445 m
-3924 3445 l
-3924 3446 l
-3848 3446 l
-3846 3446 m
-3924 3446 l
-3924 3447 l
-3846 3447 l
-3843 3447 m
-3925 3447 l
-3925 3448 l
-3843 3448 l
-3841 3448 m
-3925 3448 l
-3925 3449 l
-3841 3449 l
-3838 3449 m
-3926 3449 l
-3926 3450 l
-3838 3450 l
-3836 3450 m
-3926 3450 l
-3926 3451 l
-3836 3451 l
-3833 3451 m
-3926 3451 l
-3926 3452 l
-3833 3452 l
-3831 3452 m
-3927 3452 l
-3927 3453 l
-3831 3453 l
-3828 3453 m
-3927 3453 l
-3927 3454 l
-3828 3454 l
-3826 3454 m
-3927 3454 l
-3927 3455 l
-3826 3455 l
-3823 3455 m
-3928 3455 l
-3928 3456 l
-3823 3456 l
-3821 3456 m
-3928 3456 l
-3928 3457 l
-3821 3457 l
-3818 3457 m
-3929 3457 l
-3929 3458 l
-3818 3458 l
-3816 3458 m
-3929 3458 l
-3929 3459 l
-3816 3459 l
-3813 3459 m
-3929 3459 l
-3929 3460 l
-3813 3460 l
-3811 3460 m
-3930 3460 l
-3930 3461 l
-3811 3461 l
-3808 3461 m
-3930 3461 l
-3930 3462 l
-3808 3462 l
-3806 3462 m
-3931 3462 l
-3931 3463 l
-3806 3463 l
-3803 3463 m
-3931 3463 l
-3931 3464 l
-3803 3464 l
-3801 3464 m
-3931 3464 l
-3931 3465 l
-3801 3465 l
-3801 3465 m
-3932 3465 l
-3932 3467 l
-3801 3467 l
-3801 3467 m
-3933 3467 l
-3933 3468 l
-3801 3468 l
-3802 3468 m
-3933 3468 l
-3933 3470 l
-3802 3470 l
-3802 3470 m
-3934 3470 l
-3934 3471 l
-3802 3471 l
-3803 3471 m
-3934 3471 l
-3934 3472 l
-3803 3472 l
-3803 3472 m
-3935 3472 l
-3935 3473 l
-3803 3473 l
-3804 3473 m
-3935 3473 l
-3935 3475 l
-3804 3475 l
-3804 3475 m
-3936 3475 l
-3936 3476 l
-3804 3476 l
-3805 3476 m
-3936 3476 l
-3936 3477 l
-3805 3477 l
-3805 3477 m
-3937 3477 l
-3937 3478 l
-3805 3478 l
-3806 3478 m
-3937 3478 l
-3937 3480 l
-3806 3480 l
-3806 3480 m
-3938 3480 l
-3938 3481 l
-3806 3481 l
-3807 3481 m
-3938 3481 l
-3938 3482 l
-3807 3482 l
-3807 3482 m
-3939 3482 l
-3939 3483 l
-3807 3483 l
-3808 3483 m
-3939 3483 l
-3939 3485 l
-3808 3485 l
-3808 3485 m
-3940 3485 l
-3940 3486 l
-3808 3486 l
-3809 3486 m
-3940 3486 l
-3940 3487 l
-3809 3487 l
-3809 3487 m
-3941 3487 l
-3941 3488 l
-3809 3488 l
-3810 3488 m
-3941 3488 l
-3941 3490 l
-3810 3490 l
-3810 3490 m
-3942 3490 l
-3942 3491 l
-3810 3491 l
-3811 3491 m
-3942 3491 l
-3942 3492 l
-3811 3492 l
-3811 3492 m
-3943 3492 l
-3943 3493 l
-3811 3493 l
-3812 3493 m
-3943 3493 l
-3943 3495 l
-3812 3495 l
-3812 3495 m
-3944 3495 l
-3944 3496 l
-3812 3496 l
-3813 3496 m
-3944 3496 l
-3944 3497 l
-3813 3497 l
-3813 3497 m
-3945 3497 l
-3945 3498 l
-3813 3498 l
-3814 3498 m
-3945 3498 l
-3945 3500 l
-3814 3500 l
-3814 3500 m
-3946 3500 l
-3946 3501 l
-3814 3501 l
-3815 3501 m
-3946 3501 l
-3946 3502 l
-3815 3502 l
-3815 3502 m
-3947 3502 l
-3947 3503 l
-3815 3503 l
-3816 3503 m
-3947 3503 l
-3947 3505 l
-3816 3505 l
-3816 3505 m
-3948 3505 l
-3948 3506 l
-3816 3506 l
-3817 3506 m
-3948 3506 l
-3948 3507 l
-3817 3507 l
-3817 3507 m
-3949 3507 l
-3949 3508 l
-3817 3508 l
-3818 3508 m
-3949 3508 l
-3949 3510 l
-3818 3510 l
-3818 3510 m
-3950 3510 l
-3950 3511 l
-3818 3511 l
-3819 3511 m
-3950 3511 l
-3950 3512 l
-3819 3512 l
-3819 3512 m
-3950 3512 l
-3950 3513 l
-3819 3513 l
-3820 3513 m
-3950 3513 l
-3950 3514 l
-3820 3514 l
-3820 3514 m
-3948 3514 l
-3948 3515 l
-3820 3515 l
-3820 3515 m
-3946 3515 l
-3946 3516 l
-3820 3516 l
-3821 3516 m
-3943 3516 l
-3943 3517 l
-3821 3517 l
-3821 3517 m
-3941 3517 l
-3941 3518 l
-3821 3518 l
-3822 3518 m
-3938 3518 l
-3938 3519 l
-3822 3519 l
-3822 3519 m
-3936 3519 l
-3936 3520 l
-3822 3520 l
-3822 3520 m
-3933 3520 l
-3933 3521 l
-3822 3521 l
-3823 3521 m
-3931 3521 l
-3931 3522 l
-3823 3522 l
-3823 3522 m
-3928 3522 l
-3928 3523 l
-3823 3523 l
-3824 3523 m
-3926 3523 l
-3926 3524 l
-3824 3524 l
-3824 3524 m
-3923 3524 l
-3923 3525 l
-3824 3525 l
-3824 3525 m
-3921 3525 l
-3921 3526 l
-3824 3526 l
-3825 3526 m
-3918 3526 l
-3918 3527 l
-3825 3527 l
-3825 3527 m
-3916 3527 l
-3916 3528 l
-3825 3528 l
-3826 3528 m
-3913 3528 l
-3913 3529 l
-3826 3529 l
-3826 3529 m
-3911 3529 l
-3911 3530 l
-3826 3530 l
-3826 3530 m
-3908 3530 l
-3908 3531 l
-3826 3531 l
-3827 3531 m
-3906 3531 l
-3906 3532 l
-3827 3532 l
-3827 3532 m
-3903 3532 l
-3903 3533 l
-3827 3533 l
-3828 3533 m
-3901 3533 l
-3901 3534 l
-3828 3534 l
-3828 3534 m
-3898 3534 l
-3898 3535 l
-3828 3535 l
-3828 3535 m
-3896 3535 l
-3896 3536 l
-3828 3536 l
-3829 3536 m
-3893 3536 l
-3893 3537 l
-3829 3537 l
-3829 3537 m
-3891 3537 l
-3891 3538 l
-3829 3538 l
-3830 3538 m
-3888 3538 l
-3888 3539 l
-3830 3539 l
-3830 3539 m
-3886 3539 l
-3886 3540 l
-3830 3540 l
-3830 3540 m
-3883 3540 l
-3883 3541 l
-3830 3541 l
-3831 3541 m
-3881 3541 l
-3881 3542 l
-3831 3542 l
-3831 3542 m
-3878 3542 l
-3878 3543 l
-3831 3543 l
-3832 3543 m
-3876 3543 l
-3876 3544 l
-3832 3544 l
-3832 3544 m
-3873 3544 l
-3873 3545 l
-3832 3545 l
-3832 3545 m
-3871 3545 l
-3871 3546 l
-3832 3546 l
-3833 3546 m
-3868 3546 l
-3868 3547 l
-3833 3547 l
-3833 3547 m
-3866 3547 l
-3866 3548 l
-3833 3548 l
-3834 3548 m
-3863 3548 l
-3863 3549 l
-3834 3549 l
-3834 3549 m
-3861 3549 l
-3861 3550 l
-3834 3550 l
-3834 3550 m
-3858 3550 l
-3858 3551 l
-3834 3551 l
-3835 3551 m
-3856 3551 l
-3856 3552 l
-3835 3552 l
-3835 3552 m
-3853 3552 l
-3853 3553 l
-3835 3553 l
-3836 3553 m
-3851 3553 l
-3851 3554 l
-3836 3554 l
-3836 3554 m
-3848 3554 l
-3848 3555 l
-3836 3555 l
-3836 3555 m
-3846 3555 l
-3846 3556 l
-3836 3556 l
-3837 3556 m
-3843 3556 l
-3843 3557 l
-3837 3557 l
-3837 3557 m
-3841 3557 l
-3841 3558 l
-3837 3558 l
-Y
-3913.2 3420.2 m
-3801 3465 l
-3838 3558 l
-3950 3513 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3833 3502 m
-3832 3488 l
-3841 3476 l
-3859 3464 l
-3870 3460 l
-3891 3456 l
-3906 3459 l
-3915 3469 l
-3918 3477 l
-3919 3490 l
-3910 3502 l
-3892 3514 l
-3880 3519 l
-3860 3523 l
-3845 3519 l
-3836 3509 l
-3833 3502 l
-S
-1 g
-3305 2646 m
-3308 2646 l
-3308 2647 l
-3305 2647 l
-3304 2647 m
-3309 2647 l
-3309 2648 l
-3304 2648 l
-3304 2648 m
-3310 2648 l
-3310 2649 l
-3304 2649 l
-3303 2649 m
-3311 2649 l
-3311 2650 l
-3303 2650 l
-3302 2650 m
-3313 2650 l
-3313 2651 l
-3302 2651 l
-3301 2651 m
-3314 2651 l
-3314 2652 l
-3301 2652 l
-3300 2652 m
-3315 2652 l
-3315 2653 l
-3300 2653 l
-3300 2653 m
-3317 2653 l
-3317 2654 l
-3300 2654 l
-3299 2654 m
-3318 2654 l
-3318 2655 l
-3299 2655 l
-3298 2655 m
-3319 2655 l
-3319 2656 l
-3298 2656 l
-3297 2656 m
-3320 2656 l
-3320 2657 l
-3297 2657 l
-3296 2657 m
-3322 2657 l
-3322 2658 l
-3296 2658 l
-3296 2658 m
-3323 2658 l
-3323 2659 l
-3296 2659 l
-3295 2659 m
-3324 2659 l
-3324 2660 l
-3295 2660 l
-3294 2660 m
-3325 2660 l
-3325 2661 l
-3294 2661 l
-3293 2661 m
-3327 2661 l
-3327 2662 l
-3293 2662 l
-3292 2662 m
-3328 2662 l
-3328 2663 l
-3292 2663 l
-3292 2663 m
-3329 2663 l
-3329 2664 l
-3292 2664 l
-3291 2664 m
-3331 2664 l
-3331 2665 l
-3291 2665 l
-3290 2665 m
-3332 2665 l
-3332 2666 l
-3290 2666 l
-3289 2666 m
-3333 2666 l
-3333 2667 l
-3289 2667 l
-3288 2667 m
-3334 2667 l
-3334 2668 l
-3288 2668 l
-3288 2668 m
-3336 2668 l
-3336 2669 l
-3288 2669 l
-3287 2669 m
-3337 2669 l
-3337 2670 l
-3287 2670 l
-3286 2670 m
-3338 2670 l
-3338 2671 l
-3286 2671 l
-3285 2671 m
-3340 2671 l
-3340 2672 l
-3285 2672 l
-3284 2672 m
-3341 2672 l
-3341 2673 l
-3284 2673 l
-3284 2673 m
-3342 2673 l
-3342 2674 l
-3284 2674 l
-3283 2674 m
-3343 2674 l
-3343 2675 l
-3283 2675 l
-3282 2675 m
-3345 2675 l
-3345 2676 l
-3282 2676 l
-3281 2676 m
-3346 2676 l
-3346 2677 l
-3281 2677 l
-3281 2677 m
-3347 2677 l
-3347 2678 l
-3281 2678 l
-3280 2678 m
-3348 2678 l
-3348 2679 l
-3280 2679 l
-3279 2679 m
-3350 2679 l
-3350 2680 l
-3279 2680 l
-3278 2680 m
-3351 2680 l
-3351 2681 l
-3278 2681 l
-3277 2681 m
-3352 2681 l
-3352 2682 l
-3277 2682 l
-3277 2682 m
-3354 2682 l
-3354 2683 l
-3277 2683 l
-3276 2683 m
-3355 2683 l
-3355 2684 l
-3276 2684 l
-3275 2684 m
-3356 2684 l
-3356 2685 l
-3275 2685 l
-3274 2685 m
-3357 2685 l
-3357 2686 l
-3274 2686 l
-3273 2686 m
-3359 2686 l
-3359 2687 l
-3273 2687 l
-3273 2687 m
-3360 2687 l
-3360 2688 l
-3273 2688 l
-3272 2688 m
-3361 2688 l
-3361 2689 l
-3272 2689 l
-3271 2689 m
-3363 2689 l
-3363 2690 l
-3271 2690 l
-3270 2690 m
-3364 2690 l
-3364 2691 l
-3270 2691 l
-3269 2691 m
-3365 2691 l
-3365 2692 l
-3269 2692 l
-3269 2692 m
-3366 2692 l
-3366 2693 l
-3269 2693 l
-3268 2693 m
-3368 2693 l
-3368 2694 l
-3268 2694 l
-3267 2694 m
-3369 2694 l
-3369 2695 l
-3267 2695 l
-3266 2695 m
-3370 2695 l
-3370 2696 l
-3266 2696 l
-3265 2696 m
-3371 2696 l
-3371 2697 l
-3265 2697 l
-3265 2697 m
-3373 2697 l
-3373 2698 l
-3265 2698 l
-3264 2698 m
-3374 2698 l
-3374 2699 l
-3264 2699 l
-3263 2699 m
-3375 2699 l
-3375 2700 l
-3263 2700 l
-3262 2700 m
-3377 2700 l
-3377 2701 l
-3262 2701 l
-3261 2701 m
-3378 2701 l
-3378 2702 l
-3261 2702 l
-3261 2702 m
-3379 2702 l
-3379 2703 l
-3261 2703 l
-3260 2703 m
-3380 2703 l
-3380 2704 l
-3260 2704 l
-3259 2704 m
-3382 2704 l
-3382 2705 l
-3259 2705 l
-3258 2705 m
-3383 2705 l
-3383 2706 l
-3258 2706 l
-3257 2706 m
-3384 2706 l
-3384 2707 l
-3257 2707 l
-3257 2707 m
-3385 2707 l
-3385 2708 l
-3257 2708 l
-3256 2708 m
-3385 2708 l
-3385 2709 l
-3256 2709 l
-3255 2709 m
-3385 2709 l
-3385 2710 l
-3255 2710 l
-3254 2710 m
-3384 2710 l
-3384 2711 l
-3254 2711 l
-3254 2711 m
-3383 2711 l
-3383 2712 l
-3254 2712 l
-3253 2712 m
-3382 2712 l
-3382 2713 l
-3253 2713 l
-3252 2713 m
-3382 2713 l
-3382 2714 l
-3252 2714 l
-3251 2714 m
-3381 2714 l
-3381 2715 l
-3251 2715 l
-3250 2715 m
-3380 2715 l
-3380 2716 l
-3250 2716 l
-3250 2716 m
-3379 2716 l
-3379 2717 l
-3250 2717 l
-3249 2717 m
-3378 2717 l
-3378 2718 l
-3249 2718 l
-3248 2718 m
-3378 2718 l
-3378 2719 l
-3248 2719 l
-3247 2719 m
-3377 2719 l
-3377 2720 l
-3247 2720 l
-3246 2720 m
-3376 2720 l
-3376 2721 l
-3246 2721 l
-3246 2721 m
-3375 2721 l
-3375 2722 l
-3246 2722 l
-3245 2722 m
-3374 2722 l
-3374 2723 l
-3245 2723 l
-3244 2723 m
-3374 2723 l
-3374 2724 l
-3244 2724 l
-3243 2724 m
-3373 2724 l
-3373 2725 l
-3243 2725 l
-3242 2725 m
-3372 2725 l
-3372 2726 l
-3242 2726 l
-3242 2726 m
-3371 2726 l
-3371 2727 l
-3242 2727 l
-3241 2727 m
-3370 2727 l
-3370 2728 l
-3241 2728 l
-3240 2728 m
-3370 2728 l
-3370 2729 l
-3240 2729 l
-3239 2729 m
-3369 2729 l
-3369 2730 l
-3239 2730 l
-3238 2730 m
-3368 2730 l
-3368 2731 l
-3238 2731 l
-3238 2731 m
-3367 2731 l
-3367 2732 l
-3238 2732 l
-3237 2732 m
-3367 2732 l
-3367 2733 l
-3237 2733 l
-3236 2733 m
-3366 2733 l
-3366 2734 l
-3236 2734 l
-3235 2734 m
-3365 2734 l
-3365 2735 l
-3235 2735 l
-3234 2735 m
-3364 2735 l
-3364 2736 l
-3234 2736 l
-3234 2736 m
-3363 2736 l
-3363 2737 l
-3234 2737 l
-3233 2737 m
-3363 2737 l
-3363 2738 l
-3233 2738 l
-3232 2738 m
-3362 2738 l
-3362 2739 l
-3232 2739 l
-3231 2739 m
-3361 2739 l
-3361 2740 l
-3231 2740 l
-3231 2740 m
-3360 2740 l
-3360 2741 l
-3231 2741 l
-3231 2741 m
-3359 2741 l
-3359 2742 l
-3231 2742 l
-3232 2742 m
-3359 2742 l
-3359 2743 l
-3232 2743 l
-3233 2743 m
-3358 2743 l
-3358 2744 l
-3233 2744 l
-3234 2744 m
-3357 2744 l
-3357 2745 l
-3234 2745 l
-3236 2745 m
-3356 2745 l
-3356 2746 l
-3236 2746 l
-3237 2746 m
-3355 2746 l
-3355 2747 l
-3237 2747 l
-3238 2747 m
-3355 2747 l
-3355 2748 l
-3238 2748 l
-3239 2748 m
-3354 2748 l
-3354 2749 l
-3239 2749 l
-3241 2749 m
-3353 2749 l
-3353 2750 l
-3241 2750 l
-3242 2750 m
-3352 2750 l
-3352 2751 l
-3242 2751 l
-3243 2751 m
-3352 2751 l
-3352 2752 l
-3243 2752 l
-3245 2752 m
-3351 2752 l
-3351 2753 l
-3245 2753 l
-3246 2753 m
-3350 2753 l
-3350 2754 l
-3246 2754 l
-3247 2754 m
-3349 2754 l
-3349 2755 l
-3247 2755 l
-3248 2755 m
-3348 2755 l
-3348 2756 l
-3248 2756 l
-3250 2756 m
-3348 2756 l
-3348 2757 l
-3250 2757 l
-3251 2757 m
-3347 2757 l
-3347 2758 l
-3251 2758 l
-3252 2758 m
-3346 2758 l
-3346 2759 l
-3252 2759 l
-3253 2759 m
-3345 2759 l
-3345 2760 l
-3253 2760 l
-3255 2760 m
-3344 2760 l
-3344 2761 l
-3255 2761 l
-3256 2761 m
-3344 2761 l
-3344 2762 l
-3256 2762 l
-3257 2762 m
-3343 2762 l
-3343 2763 l
-3257 2763 l
-3259 2763 m
-3342 2763 l
-3342 2764 l
-3259 2764 l
-3260 2764 m
-3341 2764 l
-3341 2765 l
-3260 2765 l
-3261 2765 m
-3340 2765 l
-3340 2766 l
-3261 2766 l
-3262 2766 m
-3340 2766 l
-3340 2767 l
-3262 2767 l
-3264 2767 m
-3339 2767 l
-3339 2768 l
-3264 2768 l
-3265 2768 m
-3338 2768 l
-3338 2769 l
-3265 2769 l
-3266 2769 m
-3337 2769 l
-3337 2770 l
-3266 2770 l
-3267 2770 m
-3337 2770 l
-3337 2771 l
-3267 2771 l
-3269 2771 m
-3336 2771 l
-3336 2772 l
-3269 2772 l
-3270 2772 m
-3335 2772 l
-3335 2773 l
-3270 2773 l
-3271 2773 m
-3334 2773 l
-3334 2774 l
-3271 2774 l
-3273 2774 m
-3333 2774 l
-3333 2775 l
-3273 2775 l
-3274 2775 m
-3333 2775 l
-3333 2776 l
-3274 2776 l
-3275 2776 m
-3332 2776 l
-3332 2777 l
-3275 2777 l
-3276 2777 m
-3331 2777 l
-3331 2778 l
-3276 2778 l
-3278 2778 m
-3330 2778 l
-3330 2779 l
-3278 2779 l
-3279 2779 m
-3329 2779 l
-3329 2780 l
-3279 2780 l
-3280 2780 m
-3329 2780 l
-3329 2781 l
-3280 2781 l
-3281 2781 m
-3328 2781 l
-3328 2782 l
-3281 2782 l
-3283 2782 m
-3327 2782 l
-3327 2783 l
-3283 2783 l
-3284 2783 m
-3326 2783 l
-3326 2784 l
-3284 2784 l
-3285 2784 m
-3325 2784 l
-3325 2785 l
-3285 2785 l
-3287 2785 m
-3325 2785 l
-3325 2786 l
-3287 2786 l
-3288 2786 m
-3324 2786 l
-3324 2787 l
-3288 2787 l
-3289 2787 m
-3323 2787 l
-3323 2788 l
-3289 2788 l
-3290 2788 m
-3322 2788 l
-3322 2789 l
-3290 2789 l
-3292 2789 m
-3322 2789 l
-3322 2790 l
-3292 2790 l
-3293 2790 m
-3321 2790 l
-3321 2791 l
-3293 2791 l
-3294 2791 m
-3320 2791 l
-3320 2792 l
-3294 2792 l
-3295 2792 m
-3319 2792 l
-3319 2793 l
-3295 2793 l
-3297 2793 m
-3318 2793 l
-3318 2794 l
-3297 2794 l
-3298 2794 m
-3318 2794 l
-3318 2795 l
-3298 2795 l
-3299 2795 m
-3317 2795 l
-3317 2796 l
-3299 2796 l
-3301 2796 m
-3316 2796 l
-3316 2797 l
-3301 2797 l
-3302 2797 m
-3315 2797 l
-3315 2798 l
-3302 2798 l
-3303 2798 m
-3314 2798 l
-3314 2799 l
-3303 2799 l
-3304 2799 m
-3314 2799 l
-3314 2800 l
-3304 2800 l
-3306 2800 m
-3313 2800 l
-3313 2801 l
-3306 2801 l
-3307 2801 m
-3312 2801 l
-3312 2802 l
-3307 2802 l
-3308 2802 m
-3311 2802 l
-3311 2803 l
-3308 2803 l
-Y
-3306.2 2646.3 m
-3231 2741 l
-3310 2803 l
-3385 2708 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3274 2727 m
-3272 2731 l
-3270 2740 l
-3270 2746 l
-3274 2754 l
-3287 2764 l
-3297 2766 l
-3302 2766 l
-3311 2762 l
-3316 2755 l
-3318 2746 l
-3319 2731 l
-3312 2672 l
-3358 2709 l
-S
-1 g
-2393 2280 m
-2403 2280 l
-2403 2281 l
-2393 2281 l
-2393 2281 m
-2410 2281 l
-2410 2282 l
-2393 2282 l
-2393 2282 m
-2417 2282 l
-2417 2283 l
-2393 2283 l
-2393 2283 m
-2423 2283 l
-2423 2284 l
-2393 2284 l
-2393 2284 m
-2430 2284 l
-2430 2285 l
-2393 2285 l
-2392 2285 m
-2437 2285 l
-2437 2286 l
-2392 2286 l
-2392 2286 m
-2444 2286 l
-2444 2287 l
-2392 2287 l
-2392 2287 m
-2450 2287 l
-2450 2288 l
-2392 2288 l
-2392 2288 m
-2457 2288 l
-2457 2289 l
-2392 2289 l
-2392 2289 m
-2464 2289 l
-2464 2290 l
-2392 2290 l
-2392 2290 m
-2471 2290 l
-2471 2291 l
-2392 2291 l
-2391 2291 m
-2477 2291 l
-2477 2292 l
-2391 2292 l
-2391 2292 m
-2484 2292 l
-2484 2293 l
-2391 2293 l
-2391 2293 m
-2491 2293 l
-2491 2294 l
-2391 2294 l
-2391 2294 m
-2497 2294 l
-2497 2295 l
-2391 2295 l
-2391 2295 m
-2498 2295 l
-2498 2296 l
-2391 2296 l
-2391 2296 m
-2497 2296 l
-2497 2298 l
-2391 2298 l
-2390 2298 m
-2497 2298 l
-2497 2303 l
-2390 2303 l
-2390 2303 m
-2496 2303 l
-2496 2305 l
-2390 2305 l
-2389 2305 m
-2496 2305 l
-2496 2310 l
-2389 2310 l
-2389 2310 m
-2495 2310 l
-2495 2312 l
-2389 2312 l
-2388 2312 m
-2495 2312 l
-2495 2317 l
-2388 2317 l
-2388 2317 m
-2494 2317 l
-2494 2318 l
-2388 2318 l
-2387 2318 m
-2494 2318 l
-2494 2324 l
-2387 2324 l
-2387 2324 m
-2493 2324 l
-2493 2325 l
-2387 2325 l
-2386 2325 m
-2493 2325 l
-2493 2331 l
-2386 2331 l
-2386 2331 m
-2492 2331 l
-2492 2332 l
-2386 2332 l
-2385 2332 m
-2492 2332 l
-2492 2338 l
-2385 2338 l
-2385 2338 m
-2491 2338 l
-2491 2339 l
-2385 2339 l
-2384 2339 m
-2491 2339 l
-2491 2345 l
-2384 2345 l
-2383 2345 m
-2490 2345 l
-2490 2352 l
-2383 2352 l
-2382 2352 m
-2489 2352 l
-2489 2359 l
-2382 2359 l
-2381 2359 m
-2488 2359 l
-2488 2366 l
-2381 2366 l
-2380 2366 m
-2487 2366 l
-2487 2372 l
-2380 2372 l
-2379 2372 m
-2487 2372 l
-2487 2373 l
-2379 2373 l
-2379 2373 m
-2486 2373 l
-2486 2379 l
-2379 2379 l
-2378 2379 m
-2486 2379 l
-2486 2380 l
-2378 2380 l
-2378 2380 m
-2485 2380 l
-2485 2386 l
-2378 2386 l
-2377 2386 m
-2485 2386 l
-2485 2387 l
-2377 2387 l
-2377 2387 m
-2484 2387 l
-2484 2393 l
-2377 2393 l
-2376 2393 m
-2484 2393 l
-2484 2394 l
-2376 2394 l
-2376 2394 m
-2483 2394 l
-2483 2400 l
-2376 2400 l
-2376 2400 m
-2483 2400 l
-2483 2401 l
-2376 2401 l
-2382 2401 m
-2482 2401 l
-2482 2402 l
-2382 2402 l
-2389 2402 m
-2482 2402 l
-2482 2403 l
-2389 2403 l
-2396 2403 m
-2482 2403 l
-2482 2404 l
-2396 2404 l
-2403 2404 m
-2482 2404 l
-2482 2405 l
-2403 2405 l
-2410 2405 m
-2482 2405 l
-2482 2406 l
-2410 2406 l
-2417 2406 m
-2482 2406 l
-2482 2407 l
-2417 2407 l
-2424 2407 m
-2482 2407 l
-2482 2408 l
-2424 2408 l
-2431 2408 m
-2481 2408 l
-2481 2409 l
-2431 2409 l
-2438 2409 m
-2481 2409 l
-2481 2410 l
-2438 2410 l
-2445 2410 m
-2481 2410 l
-2481 2411 l
-2445 2411 l
-2452 2411 m
-2481 2411 l
-2481 2412 l
-2452 2412 l
-2459 2412 m
-2481 2412 l
-2481 2413 l
-2459 2413 l
-2466 2413 m
-2481 2413 l
-2481 2414 l
-2466 2414 l
-2473 2414 m
-2481 2414 l
-2481 2415 l
-2473 2415 l
-Y
-2393.8 2279.7 m
-2376 2400 l
-2480 2415 l
-2497 2295 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2441 2392 m
-2408 2328 l
-2470 2337 l
-S
-2441 2392 m
-2453 2305 l
-S
-1 g
-1513 2399 m
-1517 2399 l
-1517 2400 l
-1513 2400 l
-1510 2400 m
-1517 2400 l
-1517 2401 l
-1510 2401 l
-1508 2401 m
-1518 2401 l
-1518 2402 l
-1508 2402 l
-1505 2402 m
-1518 2402 l
-1518 2403 l
-1505 2403 l
-1503 2403 m
-1518 2403 l
-1518 2404 l
-1503 2404 l
-1500 2404 m
-1519 2404 l
-1519 2405 l
-1500 2405 l
-1498 2405 m
-1519 2405 l
-1519 2406 l
-1498 2406 l
-1495 2406 m
-1520 2406 l
-1520 2407 l
-1495 2407 l
-1493 2407 m
-1520 2407 l
-1520 2408 l
-1493 2408 l
-1490 2408 m
-1520 2408 l
-1520 2409 l
-1490 2409 l
-1488 2409 m
-1521 2409 l
-1521 2410 l
-1488 2410 l
-1485 2410 m
-1521 2410 l
-1521 2411 l
-1485 2411 l
-1482 2411 m
-1522 2411 l
-1522 2412 l
-1482 2412 l
-1480 2412 m
-1522 2412 l
-1522 2413 l
-1480 2413 l
-1477 2413 m
-1522 2413 l
-1522 2414 l
-1477 2414 l
-1475 2414 m
-1523 2414 l
-1523 2415 l
-1475 2415 l
-1472 2415 m
-1523 2415 l
-1523 2416 l
-1472 2416 l
-1470 2416 m
-1524 2416 l
-1524 2417 l
-1470 2417 l
-1467 2417 m
-1524 2417 l
-1524 2418 l
-1467 2418 l
-1465 2418 m
-1524 2418 l
-1524 2419 l
-1465 2419 l
-1462 2419 m
-1525 2419 l
-1525 2420 l
-1462 2420 l
-1460 2420 m
-1525 2420 l
-1525 2421 l
-1460 2421 l
-1457 2421 m
-1526 2421 l
-1526 2422 l
-1457 2422 l
-1454 2422 m
-1526 2422 l
-1526 2423 l
-1454 2423 l
-1452 2423 m
-1526 2423 l
-1526 2424 l
-1452 2424 l
-1449 2424 m
-1527 2424 l
-1527 2425 l
-1449 2425 l
-1447 2425 m
-1527 2425 l
-1527 2426 l
-1447 2426 l
-1444 2426 m
-1528 2426 l
-1528 2427 l
-1444 2427 l
-1442 2427 m
-1528 2427 l
-1528 2428 l
-1442 2428 l
-1439 2428 m
-1528 2428 l
-1528 2429 l
-1439 2429 l
-1437 2429 m
-1529 2429 l
-1529 2430 l
-1437 2430 l
-1434 2430 m
-1529 2430 l
-1529 2431 l
-1434 2431 l
-1432 2431 m
-1530 2431 l
-1530 2432 l
-1432 2432 l
-1429 2432 m
-1530 2432 l
-1530 2433 l
-1429 2433 l
-1427 2433 m
-1530 2433 l
-1530 2434 l
-1427 2434 l
-1427 2434 m
-1531 2434 l
-1531 2436 l
-1427 2436 l
-1427 2436 m
-1532 2436 l
-1532 2437 l
-1427 2437 l
-1428 2437 m
-1532 2437 l
-1532 2439 l
-1428 2439 l
-1428 2439 m
-1533 2439 l
-1533 2440 l
-1428 2440 l
-1429 2440 m
-1533 2440 l
-1533 2441 l
-1429 2441 l
-1429 2441 m
-1534 2441 l
-1534 2442 l
-1429 2442 l
-1430 2442 m
-1534 2442 l
-1534 2444 l
-1430 2444 l
-1430 2444 m
-1535 2444 l
-1535 2445 l
-1430 2445 l
-1431 2445 m
-1535 2445 l
-1535 2446 l
-1431 2446 l
-1431 2446 m
-1536 2446 l
-1536 2447 l
-1431 2447 l
-1432 2447 m
-1536 2447 l
-1536 2449 l
-1432 2449 l
-1432 2449 m
-1537 2449 l
-1537 2450 l
-1432 2450 l
-1433 2450 m
-1537 2450 l
-1537 2451 l
-1433 2451 l
-1433 2451 m
-1538 2451 l
-1538 2452 l
-1433 2452 l
-1434 2452 m
-1538 2452 l
-1538 2454 l
-1434 2454 l
-1434 2454 m
-1539 2454 l
-1539 2455 l
-1434 2455 l
-1435 2455 m
-1539 2455 l
-1539 2456 l
-1435 2456 l
-1435 2456 m
-1540 2456 l
-1540 2457 l
-1435 2457 l
-1436 2457 m
-1540 2457 l
-1540 2459 l
-1436 2459 l
-1436 2459 m
-1541 2459 l
-1541 2460 l
-1436 2460 l
-1437 2460 m
-1541 2460 l
-1541 2461 l
-1437 2461 l
-1437 2461 m
-1542 2461 l
-1542 2462 l
-1437 2462 l
-1438 2462 m
-1542 2462 l
-1542 2464 l
-1438 2464 l
-1438 2464 m
-1543 2464 l
-1543 2465 l
-1438 2465 l
-1439 2465 m
-1543 2465 l
-1543 2466 l
-1439 2466 l
-1439 2466 m
-1544 2466 l
-1544 2467 l
-1439 2467 l
-1440 2467 m
-1544 2467 l
-1544 2469 l
-1440 2469 l
-1440 2469 m
-1545 2469 l
-1545 2470 l
-1440 2470 l
-1441 2470 m
-1545 2470 l
-1545 2471 l
-1441 2471 l
-1441 2471 m
-1546 2471 l
-1546 2472 l
-1441 2472 l
-1442 2472 m
-1546 2472 l
-1546 2474 l
-1442 2474 l
-1442 2474 m
-1547 2474 l
-1547 2475 l
-1442 2475 l
-1443 2475 m
-1547 2475 l
-1547 2476 l
-1443 2476 l
-1443 2476 m
-1548 2476 l
-1548 2477 l
-1443 2477 l
-1444 2477 m
-1548 2477 l
-1548 2479 l
-1444 2479 l
-1444 2479 m
-1549 2479 l
-1549 2480 l
-1444 2480 l
-1445 2480 m
-1549 2480 l
-1549 2481 l
-1445 2481 l
-1445 2481 m
-1550 2481 l
-1550 2482 l
-1445 2482 l
-1446 2482 m
-1550 2482 l
-1550 2484 l
-1446 2484 l
-1446 2484 m
-1551 2484 l
-1551 2485 l
-1446 2485 l
-1447 2485 m
-1551 2485 l
-1551 2486 l
-1447 2486 l
-1447 2486 m
-1552 2486 l
-1552 2487 l
-1447 2487 l
-1448 2487 m
-1552 2487 l
-1552 2489 l
-1448 2489 l
-1448 2489 m
-1553 2489 l
-1553 2490 l
-1448 2490 l
-1449 2490 m
-1553 2490 l
-1553 2491 l
-1449 2491 l
-1449 2491 m
-1554 2491 l
-1554 2492 l
-1449 2492 l
-1450 2492 m
-1554 2492 l
-1554 2494 l
-1450 2494 l
-1450 2494 m
-1555 2494 l
-1555 2495 l
-1450 2495 l
-1451 2495 m
-1555 2495 l
-1555 2496 l
-1451 2496 l
-1451 2496 m
-1556 2496 l
-1556 2497 l
-1451 2497 l
-1452 2497 m
-1556 2497 l
-1556 2499 l
-1452 2499 l
-1452 2499 m
-1557 2499 l
-1557 2500 l
-1452 2500 l
-1453 2500 m
-1557 2500 l
-1557 2501 l
-1453 2501 l
-1453 2501 m
-1558 2501 l
-1558 2502 l
-1453 2502 l
-1454 2502 m
-1558 2502 l
-1558 2504 l
-1454 2504 l
-1454 2504 m
-1559 2504 l
-1559 2505 l
-1454 2505 l
-1455 2505 m
-1559 2505 l
-1559 2506 l
-1455 2506 l
-1455 2506 m
-1560 2506 l
-1560 2507 l
-1455 2507 l
-1456 2507 m
-1560 2507 l
-1560 2509 l
-1456 2509 l
-1456 2509 m
-1561 2509 l
-1561 2510 l
-1456 2510 l
-1457 2510 m
-1561 2510 l
-1561 2511 l
-1457 2511 l
-1457 2511 m
-1561 2511 l
-1561 2512 l
-1457 2512 l
-1458 2512 m
-1559 2512 l
-1559 2513 l
-1458 2513 l
-1458 2513 m
-1556 2513 l
-1556 2514 l
-1458 2514 l
-1458 2514 m
-1554 2514 l
-1554 2515 l
-1458 2515 l
-1459 2515 m
-1551 2515 l
-1551 2516 l
-1459 2516 l
-1459 2516 m
-1549 2516 l
-1549 2517 l
-1459 2517 l
-1460 2517 m
-1546 2517 l
-1546 2518 l
-1460 2518 l
-1460 2518 m
-1544 2518 l
-1544 2519 l
-1460 2519 l
-1460 2519 m
-1541 2519 l
-1541 2520 l
-1460 2520 l
-1461 2520 m
-1539 2520 l
-1539 2521 l
-1461 2521 l
-1461 2521 m
-1537 2521 l
-1537 2522 l
-1461 2522 l
-1462 2522 m
-1534 2522 l
-1534 2523 l
-1462 2523 l
-1462 2523 m
-1532 2523 l
-1532 2524 l
-1462 2524 l
-1462 2524 m
-1529 2524 l
-1529 2525 l
-1462 2525 l
-1463 2525 m
-1527 2525 l
-1527 2526 l
-1463 2526 l
-1463 2526 m
-1524 2526 l
-1524 2527 l
-1463 2527 l
-1464 2527 m
-1522 2527 l
-1522 2528 l
-1464 2528 l
-1464 2528 m
-1519 2528 l
-1519 2529 l
-1464 2529 l
-1464 2529 m
-1517 2529 l
-1517 2530 l
-1464 2530 l
-1465 2530 m
-1514 2530 l
-1514 2531 l
-1465 2531 l
-1465 2531 m
-1512 2531 l
-1512 2532 l
-1465 2532 l
-1466 2532 m
-1509 2532 l
-1509 2533 l
-1466 2533 l
-1466 2533 m
-1507 2533 l
-1507 2534 l
-1466 2534 l
-1466 2534 m
-1505 2534 l
-1505 2535 l
-1466 2535 l
-1467 2535 m
-1502 2535 l
-1502 2536 l
-1467 2536 l
-1467 2536 m
-1500 2536 l
-1500 2537 l
-1467 2537 l
-1468 2537 m
-1497 2537 l
-1497 2538 l
-1468 2538 l
-1468 2538 m
-1495 2538 l
-1495 2539 l
-1468 2539 l
-1468 2539 m
-1492 2539 l
-1492 2540 l
-1468 2540 l
-1469 2540 m
-1490 2540 l
-1490 2541 l
-1469 2541 l
-1469 2541 m
-1487 2541 l
-1487 2542 l
-1469 2542 l
-1470 2542 m
-1485 2542 l
-1485 2543 l
-1470 2543 l
-1470 2543 m
-1482 2543 l
-1482 2544 l
-1470 2544 l
-1470 2544 m
-1480 2544 l
-1480 2545 l
-1470 2545 l
-1471 2545 m
-1477 2545 l
-1477 2546 l
-1471 2546 l
-1471 2546 m
-1475 2546 l
-1475 2547 l
-1471 2547 l
-Y
-1560.7 2511 m
-1516 2399 l
-1427 2434 l
-1472 2547 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1461 2452 m
-1462 2443 l
-1472 2434 l
-1479 2431 l
-1493 2430 l
-1505 2439 l
-1517 2457 l
-1524 2476 l
-1527 2493 l
-1522 2504 l
-1512 2513 l
-1508 2514 l
-1495 2515 l
-1484 2510 l
-1475 2500 l
-1474 2496 l
-1473 2483 l
-1478 2472 l
-1488 2464 l
-1492 2462 l
-1505 2461 l
-1516 2466 l
-1524 2476 l
-S
-1 g
-721 2958 m
-724 2958 l
-724 2959 l
-721 2959 l
-720 2959 m
-725 2959 l
-725 2960 l
-720 2960 l
-719 2960 m
-726 2960 l
-726 2961 l
-719 2961 l
-718 2961 m
-728 2961 l
-728 2962 l
-718 2962 l
-718 2962 m
-729 2962 l
-729 2963 l
-718 2963 l
-717 2963 m
-730 2963 l
-730 2964 l
-717 2964 l
-716 2964 m
-731 2964 l
-731 2965 l
-716 2965 l
-715 2965 m
-733 2965 l
-733 2966 l
-715 2966 l
-714 2966 m
-734 2966 l
-734 2967 l
-714 2967 l
-714 2967 m
-735 2967 l
-735 2968 l
-714 2968 l
-713 2968 m
-737 2968 l
-737 2969 l
-713 2969 l
-712 2969 m
-738 2969 l
-738 2970 l
-712 2970 l
-711 2970 m
-739 2970 l
-739 2971 l
-711 2971 l
-710 2971 m
-740 2971 l
-740 2972 l
-710 2972 l
-710 2972 m
-742 2972 l
-742 2973 l
-710 2973 l
-709 2973 m
-743 2973 l
-743 2974 l
-709 2974 l
-708 2974 m
-744 2974 l
-744 2975 l
-708 2975 l
-707 2975 m
-746 2975 l
-746 2976 l
-707 2976 l
-706 2976 m
-747 2976 l
-747 2977 l
-706 2977 l
-706 2977 m
-748 2977 l
-748 2978 l
-706 2978 l
-705 2978 m
-749 2978 l
-749 2979 l
-705 2979 l
-704 2979 m
-751 2979 l
-751 2980 l
-704 2980 l
-703 2980 m
-752 2980 l
-752 2981 l
-703 2981 l
-702 2981 m
-753 2981 l
-753 2982 l
-702 2982 l
-702 2982 m
-754 2982 l
-754 2983 l
-702 2983 l
-701 2983 m
-756 2983 l
-756 2984 l
-701 2984 l
-700 2984 m
-757 2984 l
-757 2985 l
-700 2985 l
-699 2985 m
-758 2985 l
-758 2986 l
-699 2986 l
-698 2986 m
-760 2986 l
-760 2987 l
-698 2987 l
-698 2987 m
-761 2987 l
-761 2988 l
-698 2988 l
-697 2988 m
-762 2988 l
-762 2989 l
-697 2989 l
-696 2989 m
-763 2989 l
-763 2990 l
-696 2990 l
-695 2990 m
-765 2990 l
-765 2991 l
-695 2991 l
-694 2991 m
-766 2991 l
-766 2992 l
-694 2992 l
-694 2992 m
-767 2992 l
-767 2993 l
-694 2993 l
-693 2993 m
-769 2993 l
-769 2994 l
-693 2994 l
-692 2994 m
-770 2994 l
-770 2995 l
-692 2995 l
-691 2995 m
-771 2995 l
-771 2996 l
-691 2996 l
-691 2996 m
-772 2996 l
-772 2997 l
-691 2997 l
-690 2997 m
-774 2997 l
-774 2998 l
-690 2998 l
-689 2998 m
-775 2998 l
-775 2999 l
-689 2999 l
-688 2999 m
-776 2999 l
-776 3000 l
-688 3000 l
-687 3000 m
-778 3000 l
-778 3001 l
-687 3001 l
-687 3001 m
-779 3001 l
-779 3002 l
-687 3002 l
-686 3002 m
-780 3002 l
-780 3003 l
-686 3003 l
-685 3003 m
-781 3003 l
-781 3004 l
-685 3004 l
-684 3004 m
-783 3004 l
-783 3005 l
-684 3005 l
-683 3005 m
-784 3005 l
-784 3006 l
-683 3006 l
-683 3006 m
-785 3006 l
-785 3007 l
-683 3007 l
-682 3007 m
-786 3007 l
-786 3008 l
-682 3008 l
-681 3008 m
-788 3008 l
-788 3009 l
-681 3009 l
-680 3009 m
-789 3009 l
-789 3010 l
-680 3010 l
-679 3010 m
-790 3010 l
-790 3011 l
-679 3011 l
-679 3011 m
-792 3011 l
-792 3012 l
-679 3012 l
-678 3012 m
-793 3012 l
-793 3013 l
-678 3013 l
-677 3013 m
-794 3013 l
-794 3014 l
-677 3014 l
-676 3014 m
-795 3014 l
-795 3015 l
-676 3015 l
-675 3015 m
-797 3015 l
-797 3016 l
-675 3016 l
-675 3016 m
-798 3016 l
-798 3017 l
-675 3017 l
-674 3017 m
-799 3017 l
-799 3018 l
-674 3018 l
-673 3018 m
-801 3018 l
-801 3019 l
-673 3019 l
-672 3019 m
-802 3019 l
-802 3020 l
-672 3020 l
-671 3020 m
-803 3020 l
-803 3021 l
-671 3021 l
-671 3021 m
-804 3021 l
-804 3022 l
-671 3022 l
-670 3022 m
-806 3022 l
-806 3023 l
-670 3023 l
-669 3023 m
-807 3023 l
-807 3024 l
-669 3024 l
-668 3024 m
-808 3024 l
-808 3025 l
-668 3025 l
-667 3025 m
-809 3025 l
-809 3026 l
-667 3026 l
-667 3026 m
-811 3026 l
-811 3027 l
-667 3027 l
-666 3027 m
-812 3027 l
-812 3028 l
-666 3028 l
-665 3028 m
-813 3028 l
-813 3029 l
-665 3029 l
-664 3029 m
-815 3029 l
-815 3030 l
-664 3030 l
-663 3030 m
-816 3030 l
-816 3031 l
-663 3031 l
-663 3031 m
-817 3031 l
-817 3032 l
-663 3032 l
-662 3032 m
-818 3032 l
-818 3033 l
-662 3033 l
-661 3033 m
-817 3033 l
-817 3034 l
-661 3034 l
-660 3034 m
-817 3034 l
-817 3035 l
-660 3035 l
-660 3035 m
-816 3035 l
-816 3036 l
-660 3036 l
-660 3036 m
-815 3036 l
-815 3037 l
-660 3037 l
-661 3037 m
-814 3037 l
-814 3038 l
-661 3038 l
-662 3038 m
-813 3038 l
-813 3039 l
-662 3039 l
-663 3039 m
-813 3039 l
-813 3040 l
-663 3040 l
-665 3040 m
-812 3040 l
-812 3041 l
-665 3041 l
-666 3041 m
-811 3041 l
-811 3042 l
-666 3042 l
-667 3042 m
-810 3042 l
-810 3043 l
-667 3043 l
-668 3043 m
-809 3043 l
-809 3044 l
-668 3044 l
-670 3044 m
-809 3044 l
-809 3045 l
-670 3045 l
-671 3045 m
-808 3045 l
-808 3046 l
-671 3046 l
-672 3046 m
-807 3046 l
-807 3047 l
-672 3047 l
-673 3047 m
-806 3047 l
-806 3048 l
-673 3048 l
-675 3048 m
-805 3048 l
-805 3049 l
-675 3049 l
-676 3049 m
-805 3049 l
-805 3050 l
-676 3050 l
-677 3050 m
-804 3050 l
-804 3051 l
-677 3051 l
-679 3051 m
-803 3051 l
-803 3052 l
-679 3052 l
-680 3052 m
-802 3052 l
-802 3053 l
-680 3053 l
-681 3053 m
-802 3053 l
-802 3054 l
-681 3054 l
-682 3054 m
-801 3054 l
-801 3055 l
-682 3055 l
-684 3055 m
-800 3055 l
-800 3056 l
-684 3056 l
-685 3056 m
-799 3056 l
-799 3057 l
-685 3057 l
-686 3057 m
-798 3057 l
-798 3058 l
-686 3058 l
-687 3058 m
-798 3058 l
-798 3059 l
-687 3059 l
-689 3059 m
-797 3059 l
-797 3060 l
-689 3060 l
-690 3060 m
-796 3060 l
-796 3061 l
-690 3061 l
-691 3061 m
-795 3061 l
-795 3062 l
-691 3062 l
-692 3062 m
-794 3062 l
-794 3063 l
-692 3063 l
-694 3063 m
-794 3063 l
-794 3064 l
-694 3064 l
-695 3064 m
-793 3064 l
-793 3065 l
-695 3065 l
-696 3065 m
-792 3065 l
-792 3066 l
-696 3066 l
-698 3066 m
-791 3066 l
-791 3067 l
-698 3067 l
-699 3067 m
-790 3067 l
-790 3068 l
-699 3068 l
-700 3068 m
-790 3068 l
-790 3069 l
-700 3069 l
-701 3069 m
-789 3069 l
-789 3070 l
-701 3070 l
-703 3070 m
-788 3070 l
-788 3071 l
-703 3071 l
-704 3071 m
-787 3071 l
-787 3072 l
-704 3072 l
-705 3072 m
-786 3072 l
-786 3073 l
-705 3073 l
-706 3073 m
-786 3073 l
-786 3074 l
-706 3074 l
-708 3074 m
-785 3074 l
-785 3075 l
-708 3075 l
-709 3075 m
-784 3075 l
-784 3076 l
-709 3076 l
-710 3076 m
-783 3076 l
-783 3077 l
-710 3077 l
-711 3077 m
-782 3077 l
-782 3078 l
-711 3078 l
-713 3078 m
-782 3078 l
-782 3079 l
-713 3079 l
-714 3079 m
-781 3079 l
-781 3080 l
-714 3080 l
-715 3080 m
-780 3080 l
-780 3081 l
-715 3081 l
-717 3081 m
-779 3081 l
-779 3082 l
-717 3082 l
-718 3082 m
-779 3082 l
-779 3083 l
-718 3083 l
-719 3083 m
-778 3083 l
-778 3084 l
-719 3084 l
-720 3084 m
-777 3084 l
-777 3085 l
-720 3085 l
-722 3085 m
-776 3085 l
-776 3086 l
-722 3086 l
-723 3086 m
-775 3086 l
-775 3087 l
-723 3087 l
-724 3087 m
-775 3087 l
-775 3088 l
-724 3088 l
-725 3088 m
-774 3088 l
-774 3089 l
-725 3089 l
-727 3089 m
-773 3089 l
-773 3090 l
-727 3090 l
-728 3090 m
-772 3090 l
-772 3091 l
-728 3091 l
-729 3091 m
-771 3091 l
-771 3092 l
-729 3092 l
-730 3092 m
-771 3092 l
-771 3093 l
-730 3093 l
-732 3093 m
-770 3093 l
-770 3094 l
-732 3094 l
-733 3094 m
-769 3094 l
-769 3095 l
-733 3095 l
-734 3095 m
-768 3095 l
-768 3096 l
-734 3096 l
-736 3096 m
-767 3096 l
-767 3097 l
-736 3097 l
-737 3097 m
-767 3097 l
-767 3098 l
-737 3098 l
-738 3098 m
-766 3098 l
-766 3099 l
-738 3099 l
-739 3099 m
-765 3099 l
-765 3100 l
-739 3100 l
-741 3100 m
-764 3100 l
-764 3101 l
-741 3101 l
-742 3101 m
-763 3101 l
-763 3102 l
-742 3102 l
-743 3102 m
-763 3102 l
-763 3103 l
-743 3103 l
-744 3103 m
-762 3103 l
-762 3104 l
-744 3104 l
-746 3104 m
-761 3104 l
-761 3105 l
-746 3105 l
-747 3105 m
-760 3105 l
-760 3106 l
-747 3106 l
-748 3106 m
-759 3106 l
-759 3107 l
-748 3107 l
-749 3107 m
-759 3107 l
-759 3108 l
-749 3108 l
-751 3108 m
-758 3108 l
-758 3109 l
-751 3109 l
-752 3109 m
-757 3109 l
-757 3110 l
-752 3110 l
-753 3110 m
-756 3110 l
-756 3111 l
-753 3111 l
-Y
-817.3 3032.5 m
-722 2958 l
-660 3036 l
-755 3111 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-709 3001 m
-720 2993 l
-730 2995 l
-736 3000 l
-740 3009 l
-738 3018 l
-731 3034 l
-727 3046 l
-728 3058 l
-732 3066 l
-742 3074 l
-751 3076 l
-757 3075 l
-768 3068 l
-778 3055 l
-783 3043 l
-782 3037 l
-778 3028 l
-768 3020 l
-759 3019 l
-747 3020 l
-736 3027 l
-723 3038 l
-714 3042 l
-705 3040 l
-699 3035 l
-695 3026 l
-699 3014 l
-709 3001 l
-S
-1 g
-1009 5498 m
-1013 5498 l
-1013 5499 l
-1009 5499 l
-1008 5499 m
-1014 5499 l
-1014 5500 l
-1008 5500 l
-1007 5500 m
-1015 5500 l
-1015 5501 l
-1007 5501 l
-1006 5501 m
-1017 5501 l
-1017 5502 l
-1006 5502 l
-1006 5502 m
-1018 5502 l
-1018 5503 l
-1006 5503 l
-1005 5503 m
-1019 5503 l
-1019 5504 l
-1005 5504 l
-1004 5504 m
-1020 5504 l
-1020 5505 l
-1004 5505 l
-1003 5505 m
-1022 5505 l
-1022 5506 l
-1003 5506 l
-1002 5506 m
-1023 5506 l
-1023 5507 l
-1002 5507 l
-1002 5507 m
-1024 5507 l
-1024 5508 l
-1002 5508 l
-1001 5508 m
-1025 5508 l
-1025 5509 l
-1001 5509 l
-1000 5509 m
-1027 5509 l
-1027 5510 l
-1000 5510 l
-999 5510 m
-1028 5510 l
-1028 5511 l
-999 5511 l
-998 5511 m
-1029 5511 l
-1029 5512 l
-998 5512 l
-998 5512 m
-1030 5512 l
-1030 5513 l
-998 5513 l
-997 5513 m
-1032 5513 l
-1032 5514 l
-997 5514 l
-996 5514 m
-1033 5514 l
-1033 5515 l
-996 5515 l
-995 5515 m
-1034 5515 l
-1034 5516 l
-995 5516 l
-994 5516 m
-1035 5516 l
-1035 5517 l
-994 5517 l
-994 5517 m
-1037 5517 l
-1037 5518 l
-994 5518 l
-993 5518 m
-1038 5518 l
-1038 5519 l
-993 5519 l
-992 5519 m
-1039 5519 l
-1039 5520 l
-992 5520 l
-991 5520 m
-1040 5520 l
-1040 5521 l
-991 5521 l
-990 5521 m
-1042 5521 l
-1042 5522 l
-990 5522 l
-990 5522 m
-1043 5522 l
-1043 5523 l
-990 5523 l
-989 5523 m
-1044 5523 l
-1044 5524 l
-989 5524 l
-988 5524 m
-1045 5524 l
-1045 5525 l
-988 5525 l
-987 5525 m
-1047 5525 l
-1047 5526 l
-987 5526 l
-986 5526 m
-1048 5526 l
-1048 5527 l
-986 5527 l
-986 5527 m
-1049 5527 l
-1049 5528 l
-986 5528 l
-985 5528 m
-1050 5528 l
-1050 5529 l
-985 5529 l
-984 5529 m
-1052 5529 l
-1052 5530 l
-984 5530 l
-983 5530 m
-1053 5530 l
-1053 5531 l
-983 5531 l
-982 5531 m
-1054 5531 l
-1054 5532 l
-982 5532 l
-982 5532 m
-1055 5532 l
-1055 5533 l
-982 5533 l
-981 5533 m
-1057 5533 l
-1057 5534 l
-981 5534 l
-980 5534 m
-1058 5534 l
-1058 5535 l
-980 5535 l
-979 5535 m
-1059 5535 l
-1059 5536 l
-979 5536 l
-978 5536 m
-1061 5536 l
-1061 5537 l
-978 5537 l
-978 5537 m
-1062 5537 l
-1062 5538 l
-978 5538 l
-977 5538 m
-1063 5538 l
-1063 5539 l
-977 5539 l
-976 5539 m
-1064 5539 l
-1064 5540 l
-976 5540 l
-975 5540 m
-1066 5540 l
-1066 5541 l
-975 5541 l
-974 5541 m
-1067 5541 l
-1067 5542 l
-974 5542 l
-974 5542 m
-1068 5542 l
-1068 5543 l
-974 5543 l
-973 5543 m
-1069 5543 l
-1069 5544 l
-973 5544 l
-972 5544 m
-1071 5544 l
-1071 5545 l
-972 5545 l
-971 5545 m
-1072 5545 l
-1072 5546 l
-971 5546 l
-970 5546 m
-1073 5546 l
-1073 5547 l
-970 5547 l
-970 5547 m
-1074 5547 l
-1074 5548 l
-970 5548 l
-969 5548 m
-1076 5548 l
-1076 5549 l
-969 5549 l
-968 5549 m
-1077 5549 l
-1077 5550 l
-968 5550 l
-967 5550 m
-1078 5550 l
-1078 5551 l
-967 5551 l
-966 5551 m
-1079 5551 l
-1079 5552 l
-966 5552 l
-966 5552 m
-1081 5552 l
-1081 5553 l
-966 5553 l
-965 5553 m
-1082 5553 l
-1082 5554 l
-965 5554 l
-964 5554 m
-1083 5554 l
-1083 5555 l
-964 5555 l
-963 5555 m
-1084 5555 l
-1084 5556 l
-963 5556 l
-962 5556 m
-1086 5556 l
-1086 5557 l
-962 5557 l
-962 5557 m
-1087 5557 l
-1087 5558 l
-962 5558 l
-961 5558 m
-1088 5558 l
-1088 5559 l
-961 5559 l
-960 5559 m
-1089 5559 l
-1089 5560 l
-960 5560 l
-959 5560 m
-1091 5560 l
-1091 5561 l
-959 5561 l
-958 5561 m
-1092 5561 l
-1092 5562 l
-958 5562 l
-958 5562 m
-1093 5562 l
-1093 5563 l
-958 5563 l
-957 5563 m
-1094 5563 l
-1094 5564 l
-957 5564 l
-956 5564 m
-1096 5564 l
-1096 5565 l
-956 5565 l
-955 5565 m
-1097 5565 l
-1097 5566 l
-955 5566 l
-954 5566 m
-1098 5566 l
-1098 5567 l
-954 5567 l
-954 5567 m
-1099 5567 l
-1099 5568 l
-954 5568 l
-953 5568 m
-1101 5568 l
-1101 5569 l
-953 5569 l
-952 5569 m
-1102 5569 l
-1102 5570 l
-952 5570 l
-951 5570 m
-1103 5570 l
-1103 5571 l
-951 5571 l
-950 5571 m
-1105 5571 l
-1105 5572 l
-950 5572 l
-950 5572 m
-1106 5572 l
-1106 5573 l
-950 5573 l
-949 5573 m
-1107 5573 l
-1107 5574 l
-949 5574 l
-948 5574 m
-1108 5574 l
-1108 5575 l
-948 5575 l
-947 5575 m
-1110 5575 l
-1110 5576 l
-947 5576 l
-946 5576 m
-1111 5576 l
-1111 5577 l
-946 5577 l
-946 5577 m
-1112 5577 l
-1112 5578 l
-946 5578 l
-945 5578 m
-1113 5578 l
-1113 5579 l
-945 5579 l
-944 5579 m
-1115 5579 l
-1115 5580 l
-944 5580 l
-943 5580 m
-1116 5580 l
-1116 5581 l
-943 5581 l
-942 5581 m
-1117 5581 l
-1117 5582 l
-942 5582 l
-942 5582 m
-1118 5582 l
-1118 5583 l
-942 5583 l
-941 5583 m
-1120 5583 l
-1120 5584 l
-941 5584 l
-940 5584 m
-1121 5584 l
-1121 5585 l
-940 5585 l
-939 5585 m
-1122 5585 l
-1122 5586 l
-939 5586 l
-938 5586 m
-1123 5586 l
-1123 5587 l
-938 5587 l
-938 5587 m
-1125 5587 l
-1125 5588 l
-938 5588 l
-937 5588 m
-1126 5588 l
-1126 5589 l
-937 5589 l
-936 5589 m
-1127 5589 l
-1127 5590 l
-936 5590 l
-935 5590 m
-1128 5590 l
-1128 5591 l
-935 5591 l
-935 5591 m
-1130 5591 l
-1130 5592 l
-935 5592 l
-935 5592 m
-1131 5592 l
-1131 5593 l
-935 5593 l
-936 5593 m
-1132 5593 l
-1132 5594 l
-936 5594 l
-937 5594 m
-1133 5594 l
-1133 5595 l
-937 5595 l
-938 5595 m
-1135 5595 l
-1135 5596 l
-938 5596 l
-939 5596 m
-1136 5596 l
-1136 5597 l
-939 5597 l
-941 5597 m
-1137 5597 l
-1137 5598 l
-941 5598 l
-942 5598 m
-1138 5598 l
-1138 5599 l
-942 5599 l
-943 5599 m
-1140 5599 l
-1140 5600 l
-943 5600 l
-944 5600 m
-1141 5600 l
-1141 5601 l
-944 5601 l
-946 5601 m
-1142 5601 l
-1142 5602 l
-946 5602 l
-947 5602 m
-1143 5602 l
-1143 5603 l
-947 5603 l
-948 5603 m
-1145 5603 l
-1145 5604 l
-948 5604 l
-949 5604 m
-1146 5604 l
-1146 5605 l
-949 5605 l
-951 5605 m
-1147 5605 l
-1147 5606 l
-951 5606 l
-952 5606 m
-1148 5606 l
-1148 5607 l
-952 5607 l
-953 5607 m
-1148 5607 l
-1148 5608 l
-953 5608 l
-954 5608 m
-1148 5608 l
-1148 5609 l
-954 5609 l
-956 5609 m
-1147 5609 l
-1147 5610 l
-956 5610 l
-957 5610 m
-1146 5610 l
-1146 5611 l
-957 5611 l
-958 5611 m
-1145 5611 l
-1145 5612 l
-958 5612 l
-959 5612 m
-1144 5612 l
-1144 5613 l
-959 5613 l
-961 5613 m
-1144 5613 l
-1144 5614 l
-961 5614 l
-962 5614 m
-1143 5614 l
-1143 5615 l
-962 5615 l
-963 5615 m
-1142 5615 l
-1142 5616 l
-963 5616 l
-964 5616 m
-1141 5616 l
-1141 5617 l
-964 5617 l
-966 5617 m
-1140 5617 l
-1140 5618 l
-966 5618 l
-967 5618 m
-1140 5618 l
-1140 5619 l
-967 5619 l
-968 5619 m
-1139 5619 l
-1139 5620 l
-968 5620 l
-969 5620 m
-1138 5620 l
-1138 5621 l
-969 5621 l
-971 5621 m
-1137 5621 l
-1137 5622 l
-971 5622 l
-972 5622 m
-1136 5622 l
-1136 5623 l
-972 5623 l
-973 5623 m
-1136 5623 l
-1136 5624 l
-973 5624 l
-974 5624 m
-1135 5624 l
-1135 5625 l
-974 5625 l
-976 5625 m
-1134 5625 l
-1134 5626 l
-976 5626 l
-977 5626 m
-1133 5626 l
-1133 5627 l
-977 5627 l
-978 5627 m
-1132 5627 l
-1132 5628 l
-978 5628 l
-979 5628 m
-1132 5628 l
-1132 5629 l
-979 5629 l
-981 5629 m
-1131 5629 l
-1131 5630 l
-981 5630 l
-982 5630 m
-1130 5630 l
-1130 5631 l
-982 5631 l
-983 5631 m
-1129 5631 l
-1129 5632 l
-983 5632 l
-984 5632 m
-1128 5632 l
-1128 5633 l
-984 5633 l
-986 5633 m
-1128 5633 l
-1128 5634 l
-986 5634 l
-987 5634 m
-1127 5634 l
-1127 5635 l
-987 5635 l
-988 5635 m
-1126 5635 l
-1126 5636 l
-988 5636 l
-989 5636 m
-1125 5636 l
-1125 5637 l
-989 5637 l
-991 5637 m
-1124 5637 l
-1124 5638 l
-991 5638 l
-992 5638 m
-1124 5638 l
-1124 5639 l
-992 5639 l
-993 5639 m
-1123 5639 l
-1123 5640 l
-993 5640 l
-994 5640 m
-1122 5640 l
-1122 5641 l
-994 5641 l
-996 5641 m
-1121 5641 l
-1121 5642 l
-996 5642 l
-997 5642 m
-1120 5642 l
-1120 5643 l
-997 5643 l
-998 5643 m
-1120 5643 l
-1120 5644 l
-998 5644 l
-999 5644 m
-1119 5644 l
-1119 5645 l
-999 5645 l
-1001 5645 m
-1118 5645 l
-1118 5646 l
-1001 5646 l
-1002 5646 m
-1117 5646 l
-1117 5647 l
-1002 5647 l
-1003 5647 m
-1116 5647 l
-1116 5648 l
-1003 5648 l
-1004 5648 m
-1116 5648 l
-1116 5649 l
-1004 5649 l
-1005 5649 m
-1115 5649 l
-1115 5650 l
-1005 5650 l
-1007 5650 m
-1114 5650 l
-1114 5651 l
-1007 5651 l
-1008 5651 m
-1113 5651 l
-1113 5652 l
-1008 5652 l
-1009 5652 m
-1112 5652 l
-1112 5653 l
-1009 5653 l
-1010 5653 m
-1112 5653 l
-1112 5654 l
-1010 5654 l
-1012 5654 m
-1111 5654 l
-1111 5655 l
-1012 5655 l
-1013 5655 m
-1110 5655 l
-1110 5656 l
-1013 5656 l
-1014 5656 m
-1109 5656 l
-1109 5657 l
-1014 5657 l
-1015 5657 m
-1108 5657 l
-1108 5658 l
-1015 5658 l
-1017 5658 m
-1108 5658 l
-1108 5659 l
-1017 5659 l
-1018 5659 m
-1107 5659 l
-1107 5660 l
-1018 5660 l
-1019 5660 m
-1106 5660 l
-1106 5661 l
-1019 5661 l
-1020 5661 m
-1105 5661 l
-1105 5662 l
-1020 5662 l
-1022 5662 m
-1104 5662 l
-1104 5663 l
-1022 5663 l
-1023 5663 m
-1104 5663 l
-1104 5664 l
-1023 5664 l
-1024 5664 m
-1103 5664 l
-1103 5665 l
-1024 5665 l
-1025 5665 m
-1102 5665 l
-1102 5666 l
-1025 5666 l
-1027 5666 m
-1101 5666 l
-1101 5667 l
-1027 5667 l
-1028 5667 m
-1100 5667 l
-1100 5668 l
-1028 5668 l
-1029 5668 m
-1100 5668 l
-1100 5669 l
-1029 5669 l
-1030 5669 m
-1099 5669 l
-1099 5670 l
-1030 5670 l
-1032 5670 m
-1098 5670 l
-1098 5671 l
-1032 5671 l
-1033 5671 m
-1097 5671 l
-1097 5672 l
-1033 5672 l
-1034 5672 m
-1096 5672 l
-1096 5673 l
-1034 5673 l
-1035 5673 m
-1096 5673 l
-1096 5674 l
-1035 5674 l
-1037 5674 m
-1095 5674 l
-1095 5675 l
-1037 5675 l
-1038 5675 m
-1094 5675 l
-1094 5676 l
-1038 5676 l
-1039 5676 m
-1093 5676 l
-1093 5677 l
-1039 5677 l
-1040 5677 m
-1092 5677 l
-1092 5678 l
-1040 5678 l
-1042 5678 m
-1092 5678 l
-1092 5679 l
-1042 5679 l
-1043 5679 m
-1091 5679 l
-1091 5680 l
-1043 5680 l
-1044 5680 m
-1090 5680 l
-1090 5681 l
-1044 5681 l
-1045 5681 m
-1089 5681 l
-1089 5682 l
-1045 5682 l
-1047 5682 m
-1088 5682 l
-1088 5683 l
-1047 5683 l
-1048 5683 m
-1088 5683 l
-1088 5684 l
-1048 5684 l
-1049 5684 m
-1087 5684 l
-1087 5685 l
-1049 5685 l
-1050 5685 m
-1086 5685 l
-1086 5686 l
-1050 5686 l
-1052 5686 m
-1085 5686 l
-1085 5687 l
-1052 5687 l
-1053 5687 m
-1084 5687 l
-1084 5688 l
-1053 5688 l
-1054 5688 m
-1084 5688 l
-1084 5689 l
-1054 5689 l
-1055 5689 m
-1083 5689 l
-1083 5690 l
-1055 5690 l
-1057 5690 m
-1082 5690 l
-1082 5691 l
-1057 5691 l
-1058 5691 m
-1081 5691 l
-1081 5692 l
-1058 5692 l
-1059 5692 m
-1080 5692 l
-1080 5693 l
-1059 5693 l
-1060 5693 m
-1080 5693 l
-1080 5694 l
-1060 5694 l
-1062 5694 m
-1079 5694 l
-1079 5695 l
-1062 5695 l
-1063 5695 m
-1078 5695 l
-1078 5696 l
-1063 5696 l
-1064 5696 m
-1077 5696 l
-1077 5697 l
-1064 5697 l
-1065 5697 m
-1076 5697 l
-1076 5698 l
-1065 5698 l
-1067 5698 m
-1076 5698 l
-1076 5699 l
-1067 5699 l
-1068 5699 m
-1075 5699 l
-1075 5700 l
-1068 5700 l
-1069 5700 m
-1074 5700 l
-1074 5701 l
-1069 5701 l
-1070 5701 m
-1073 5701 l
-1073 5702 l
-1070 5702 l
-Y
-1010.5 5497.6 m
-935 5592 l
-1072 5702 l
-1148 5607 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-972 5579 m
-976 5588 l
-978 5605 l
-1033 5537 l
-S
-1050 5663 m
-1054 5591 l
-1103 5630 l
-S
-1050 5663 m
-1105 5594 l
-S
-1 g
-1830 5898 m
-1841 5898 l
-1841 5899 l
-1830 5899 l
-1830 5899 m
-1847 5899 l
-1847 5900 l
-1830 5900 l
-1830 5900 m
-1854 5900 l
-1854 5901 l
-1830 5901 l
-1830 5901 m
-1861 5901 l
-1861 5902 l
-1830 5902 l
-1829 5902 m
-1867 5902 l
-1867 5903 l
-1829 5903 l
-1829 5903 m
-1874 5903 l
-1874 5904 l
-1829 5904 l
-1829 5904 m
-1881 5904 l
-1881 5905 l
-1829 5905 l
-1829 5905 m
-1887 5905 l
-1887 5906 l
-1829 5906 l
-1829 5906 m
-1894 5906 l
-1894 5907 l
-1829 5907 l
-1829 5907 m
-1901 5907 l
-1901 5908 l
-1829 5908 l
-1829 5908 m
-1907 5908 l
-1907 5909 l
-1829 5909 l
-1828 5909 m
-1914 5909 l
-1914 5910 l
-1828 5910 l
-1828 5910 m
-1921 5910 l
-1921 5911 l
-1828 5911 l
-1828 5911 m
-1927 5911 l
-1927 5912 l
-1828 5912 l
-1828 5912 m
-1934 5912 l
-1934 5913 l
-1828 5913 l
-1828 5913 m
-1941 5913 l
-1941 5914 l
-1828 5914 l
-1828 5914 m
-1947 5914 l
-1947 5915 l
-1828 5915 l
-1827 5915 m
-1954 5915 l
-1954 5916 l
-1827 5916 l
-1827 5916 m
-1961 5916 l
-1961 5917 l
-1827 5917 l
-1827 5917 m
-1967 5917 l
-1967 5918 l
-1827 5918 l
-1827 5918 m
-1974 5918 l
-1974 5919 l
-1827 5919 l
-1827 5919 m
-1981 5919 l
-1981 5920 l
-1827 5920 l
-1827 5920 m
-1987 5920 l
-1987 5921 l
-1827 5921 l
-1827 5921 m
-1994 5921 l
-1994 5922 l
-1827 5922 l
-1826 5922 m
-2000 5922 l
-2000 5923 l
-1826 5923 l
-1826 5923 m
-2000 5923 l
-2000 5929 l
-1826 5929 l
-1825 5929 m
-2000 5929 l
-2000 5930 l
-1825 5930 l
-1825 5930 m
-1999 5930 l
-1999 5936 l
-1825 5936 l
-1824 5936 m
-1999 5936 l
-1999 5937 l
-1824 5937 l
-1824 5937 m
-1998 5937 l
-1998 5942 l
-1824 5942 l
-1823 5942 m
-1998 5942 l
-1998 5943 l
-1823 5943 l
-1823 5943 m
-1997 5943 l
-1997 5949 l
-1823 5949 l
-1822 5949 m
-1997 5949 l
-1997 5950 l
-1822 5950 l
-1822 5950 m
-1996 5950 l
-1996 5956 l
-1822 5956 l
-1821 5956 m
-1996 5956 l
-1996 5957 l
-1821 5957 l
-1821 5957 m
-1995 5957 l
-1995 5963 l
-1821 5963 l
-1820 5963 m
-1994 5963 l
-1994 5969 l
-1820 5969 l
-1819 5969 m
-1994 5969 l
-1994 5970 l
-1819 5970 l
-1819 5970 m
-1993 5970 l
-1993 5976 l
-1819 5976 l
-1818 5976 m
-1993 5976 l
-1993 5977 l
-1818 5977 l
-1818 5977 m
-1992 5977 l
-1992 5983 l
-1818 5983 l
-1817 5983 m
-1991 5983 l
-1991 5990 l
-1817 5990 l
-1816 5990 m
-1990 5990 l
-1990 5996 l
-1816 5996 l
-1815 5996 m
-1990 5996 l
-1990 5997 l
-1815 5997 l
-1815 5997 m
-1989 5997 l
-1989 6003 l
-1815 6003 l
-1814 6003 m
-1989 6003 l
-1989 6004 l
-1814 6004 l
-1814 6004 m
-1988 6004 l
-1988 6010 l
-1814 6010 l
-1813 6010 m
-1987 6010 l
-1987 6017 l
-1813 6017 l
-1813 6017 m
-1986 6017 l
-1986 6018 l
-1813 6018 l
-1819 6018 m
-1986 6018 l
-1986 6019 l
-1819 6019 l
-1826 6019 m
-1986 6019 l
-1986 6020 l
-1826 6020 l
-1832 6020 m
-1986 6020 l
-1986 6021 l
-1832 6021 l
-1839 6021 m
-1986 6021 l
-1986 6022 l
-1839 6022 l
-1845 6022 m
-1986 6022 l
-1986 6023 l
-1845 6023 l
-1852 6023 m
-1986 6023 l
-1986 6024 l
-1852 6024 l
-1858 6024 m
-1985 6024 l
-1985 6025 l
-1858 6025 l
-1865 6025 m
-1985 6025 l
-1985 6026 l
-1865 6026 l
-1871 6026 m
-1985 6026 l
-1985 6027 l
-1871 6027 l
-1878 6027 m
-1985 6027 l
-1985 6028 l
-1878 6028 l
-1884 6028 m
-1985 6028 l
-1985 6029 l
-1884 6029 l
-1891 6029 m
-1985 6029 l
-1985 6030 l
-1891 6030 l
-1897 6030 m
-1984 6030 l
-1984 6031 l
-1897 6031 l
-1904 6031 m
-1984 6031 l
-1984 6032 l
-1904 6032 l
-1910 6032 m
-1984 6032 l
-1984 6033 l
-1910 6033 l
-1917 6033 m
-1984 6033 l
-1984 6034 l
-1917 6034 l
-1923 6034 m
-1984 6034 l
-1984 6035 l
-1923 6035 l
-1930 6035 m
-1984 6035 l
-1984 6036 l
-1930 6036 l
-1936 6036 m
-1984 6036 l
-1984 6037 l
-1936 6037 l
-1943 6037 m
-1983 6037 l
-1983 6038 l
-1943 6038 l
-1949 6038 m
-1983 6038 l
-1983 6039 l
-1949 6039 l
-1956 6039 m
-1983 6039 l
-1983 6040 l
-1956 6040 l
-1962 6040 m
-1983 6040 l
-1983 6041 l
-1962 6041 l
-1969 6041 m
-1983 6041 l
-1983 6042 l
-1969 6042 l
-1975 6042 m
-1983 6042 l
-1983 6043 l
-1975 6043 l
-Y
-1830.7 5897.6 m
-1813 6017 l
-1982 6043 l
-2000 5923 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1838 5987 m
-1846 5993 l
-1856 6007 l
-1869 5920 l
-S
-1962 6010 m
-1956 6018 l
-1943 6020 l
-1935 6019 l
-1923 6013 l
-1917 5999 l
-1916 5978 l
-1919 5957 l
-1925 5941 l
-1935 5934 l
-1948 5932 l
-1952 5933 l
-1964 5939 l
-1971 5948 l
-1973 5961 l
-1973 5965 l
-1967 5977 l
-1957 5984 l
-1944 5986 l
-1940 5986 l
-1928 5980 l
-1921 5970 l
-1919 5957 l
-S
-1 g
-2892 5791 m
-2896 5791 l
-2896 5792 l
-2892 5792 l
-2889 5792 m
-2896 5792 l
-2896 5793 l
-2889 5793 l
-2887 5793 m
-2897 5793 l
-2897 5794 l
-2887 5794 l
-2884 5794 m
-2897 5794 l
-2897 5795 l
-2884 5795 l
-2882 5795 m
-2897 5795 l
-2897 5796 l
-2882 5796 l
-2879 5796 m
-2898 5796 l
-2898 5797 l
-2879 5797 l
-2877 5797 m
-2898 5797 l
-2898 5798 l
-2877 5798 l
-2874 5798 m
-2899 5798 l
-2899 5799 l
-2874 5799 l
-2872 5799 m
-2899 5799 l
-2899 5800 l
-2872 5800 l
-2869 5800 m
-2899 5800 l
-2899 5801 l
-2869 5801 l
-2867 5801 m
-2900 5801 l
-2900 5802 l
-2867 5802 l
-2864 5802 m
-2900 5802 l
-2900 5803 l
-2864 5803 l
-2861 5803 m
-2901 5803 l
-2901 5804 l
-2861 5804 l
-2859 5804 m
-2901 5804 l
-2901 5805 l
-2859 5805 l
-2856 5805 m
-2901 5805 l
-2901 5806 l
-2856 5806 l
-2854 5806 m
-2902 5806 l
-2902 5807 l
-2854 5807 l
-2851 5807 m
-2902 5807 l
-2902 5808 l
-2851 5808 l
-2849 5808 m
-2903 5808 l
-2903 5809 l
-2849 5809 l
-2846 5809 m
-2903 5809 l
-2903 5810 l
-2846 5810 l
-2844 5810 m
-2903 5810 l
-2903 5811 l
-2844 5811 l
-2841 5811 m
-2904 5811 l
-2904 5812 l
-2841 5812 l
-2839 5812 m
-2904 5812 l
-2904 5813 l
-2839 5813 l
-2836 5813 m
-2904 5813 l
-2904 5814 l
-2836 5814 l
-2834 5814 m
-2905 5814 l
-2905 5815 l
-2834 5815 l
-2831 5815 m
-2905 5815 l
-2905 5816 l
-2831 5816 l
-2828 5816 m
-2906 5816 l
-2906 5817 l
-2828 5817 l
-2826 5817 m
-2906 5817 l
-2906 5818 l
-2826 5818 l
-2823 5818 m
-2906 5818 l
-2906 5819 l
-2823 5819 l
-2821 5819 m
-2907 5819 l
-2907 5820 l
-2821 5820 l
-2818 5820 m
-2907 5820 l
-2907 5821 l
-2818 5821 l
-2816 5821 m
-2908 5821 l
-2908 5822 l
-2816 5822 l
-2813 5822 m
-2908 5822 l
-2908 5823 l
-2813 5823 l
-2811 5823 m
-2908 5823 l
-2908 5824 l
-2811 5824 l
-2808 5824 m
-2909 5824 l
-2909 5825 l
-2808 5825 l
-2806 5825 m
-2909 5825 l
-2909 5826 l
-2806 5826 l
-2803 5826 m
-2910 5826 l
-2910 5827 l
-2803 5827 l
-2801 5827 m
-2910 5827 l
-2910 5828 l
-2801 5828 l
-2798 5828 m
-2910 5828 l
-2910 5829 l
-2798 5829 l
-2795 5829 m
-2911 5829 l
-2911 5830 l
-2795 5830 l
-2793 5830 m
-2911 5830 l
-2911 5831 l
-2793 5831 l
-2790 5831 m
-2911 5831 l
-2911 5832 l
-2790 5832 l
-2788 5832 m
-2912 5832 l
-2912 5833 l
-2788 5833 l
-2785 5833 m
-2912 5833 l
-2912 5834 l
-2785 5834 l
-2783 5834 m
-2913 5834 l
-2913 5835 l
-2783 5835 l
-2780 5835 m
-2913 5835 l
-2913 5836 l
-2780 5836 l
-2778 5836 m
-2913 5836 l
-2913 5837 l
-2778 5837 l
-2775 5837 m
-2914 5837 l
-2914 5838 l
-2775 5838 l
-2773 5838 m
-2914 5838 l
-2914 5839 l
-2773 5839 l
-2770 5839 m
-2915 5839 l
-2915 5840 l
-2770 5840 l
-2768 5840 m
-2915 5840 l
-2915 5841 l
-2768 5841 l
-2765 5841 m
-2915 5841 l
-2915 5842 l
-2765 5842 l
-2762 5842 m
-2916 5842 l
-2916 5843 l
-2762 5843 l
-2760 5843 m
-2916 5843 l
-2916 5844 l
-2760 5844 l
-2757 5844 m
-2917 5844 l
-2917 5845 l
-2757 5845 l
-2755 5845 m
-2917 5845 l
-2917 5846 l
-2755 5846 l
-2752 5846 m
-2917 5846 l
-2917 5847 l
-2752 5847 l
-2750 5847 m
-2918 5847 l
-2918 5848 l
-2750 5848 l
-2747 5848 m
-2918 5848 l
-2918 5849 l
-2747 5849 l
-2745 5849 m
-2918 5849 l
-2918 5850 l
-2745 5850 l
-2742 5850 m
-2919 5850 l
-2919 5851 l
-2742 5851 l
-2740 5851 m
-2919 5851 l
-2919 5852 l
-2740 5852 l
-2737 5852 m
-2920 5852 l
-2920 5853 l
-2737 5853 l
-2735 5853 m
-2920 5853 l
-2920 5854 l
-2735 5854 l
-2735 5854 m
-2920 5854 l
-2920 5855 l
-2735 5855 l
-2735 5855 m
-2921 5855 l
-2921 5857 l
-2735 5857 l
-2736 5857 m
-2922 5857 l
-2922 5860 l
-2736 5860 l
-2737 5860 m
-2923 5860 l
-2923 5862 l
-2737 5862 l
-2738 5862 m
-2924 5862 l
-2924 5865 l
-2738 5865 l
-2739 5865 m
-2925 5865 l
-2925 5867 l
-2739 5867 l
-2740 5867 m
-2926 5867 l
-2926 5870 l
-2740 5870 l
-2741 5870 m
-2927 5870 l
-2927 5872 l
-2741 5872 l
-2742 5872 m
-2927 5872 l
-2927 5873 l
-2742 5873 l
-2742 5873 m
-2928 5873 l
-2928 5875 l
-2742 5875 l
-2743 5875 m
-2929 5875 l
-2929 5877 l
-2743 5877 l
-2744 5877 m
-2929 5877 l
-2929 5878 l
-2744 5878 l
-2744 5878 m
-2930 5878 l
-2930 5880 l
-2744 5880 l
-2745 5880 m
-2931 5880 l
-2931 5882 l
-2745 5882 l
-2746 5882 m
-2931 5882 l
-2931 5883 l
-2746 5883 l
-2746 5883 m
-2932 5883 l
-2932 5885 l
-2746 5885 l
-2747 5885 m
-2933 5885 l
-2933 5887 l
-2747 5887 l
-2748 5887 m
-2933 5887 l
-2933 5888 l
-2748 5888 l
-2748 5888 m
-2934 5888 l
-2934 5890 l
-2748 5890 l
-2749 5890 m
-2934 5890 l
-2934 5891 l
-2749 5891 l
-2749 5891 m
-2935 5891 l
-2935 5892 l
-2749 5892 l
-2750 5892 m
-2935 5892 l
-2935 5893 l
-2750 5893 l
-2750 5893 m
-2936 5893 l
-2936 5895 l
-2750 5895 l
-2751 5895 m
-2936 5895 l
-2936 5896 l
-2751 5896 l
-2751 5896 m
-2937 5896 l
-2937 5897 l
-2751 5897 l
-2752 5897 m
-2937 5897 l
-2937 5898 l
-2752 5898 l
-2752 5898 m
-2938 5898 l
-2938 5900 l
-2752 5900 l
-2753 5900 m
-2938 5900 l
-2938 5901 l
-2753 5901 l
-2753 5901 m
-2939 5901 l
-2939 5902 l
-2753 5902 l
-2754 5902 m
-2939 5902 l
-2939 5903 l
-2754 5903 l
-2754 5903 m
-2939 5903 l
-2939 5904 l
-2754 5904 l
-2754 5904 m
-2939 5904 l
-2939 5905 l
-2754 5905 l
-2755 5905 m
-2937 5905 l
-2937 5906 l
-2755 5906 l
-2755 5906 m
-2934 5906 l
-2934 5907 l
-2755 5907 l
-2756 5907 m
-2932 5907 l
-2932 5908 l
-2756 5908 l
-2756 5908 m
-2929 5908 l
-2929 5909 l
-2756 5909 l
-2756 5909 m
-2927 5909 l
-2927 5910 l
-2756 5910 l
-2757 5910 m
-2924 5910 l
-2924 5911 l
-2757 5911 l
-2757 5911 m
-2922 5911 l
-2922 5912 l
-2757 5912 l
-2758 5912 m
-2919 5912 l
-2919 5913 l
-2758 5913 l
-2758 5913 m
-2917 5913 l
-2917 5914 l
-2758 5914 l
-2758 5914 m
-2914 5914 l
-2914 5915 l
-2758 5915 l
-2759 5915 m
-2912 5915 l
-2912 5916 l
-2759 5916 l
-2759 5916 m
-2909 5916 l
-2909 5917 l
-2759 5917 l
-2760 5917 m
-2906 5917 l
-2906 5918 l
-2760 5918 l
-2760 5918 m
-2904 5918 l
-2904 5919 l
-2760 5919 l
-2760 5919 m
-2901 5919 l
-2901 5920 l
-2760 5920 l
-2761 5920 m
-2899 5920 l
-2899 5921 l
-2761 5921 l
-2761 5921 m
-2896 5921 l
-2896 5922 l
-2761 5922 l
-2762 5922 m
-2894 5922 l
-2894 5923 l
-2762 5923 l
-2762 5923 m
-2891 5923 l
-2891 5924 l
-2762 5924 l
-2762 5924 m
-2889 5924 l
-2889 5925 l
-2762 5925 l
-2763 5925 m
-2886 5925 l
-2886 5926 l
-2763 5926 l
-2763 5926 m
-2884 5926 l
-2884 5927 l
-2763 5927 l
-2764 5927 m
-2881 5927 l
-2881 5928 l
-2764 5928 l
-2764 5928 m
-2879 5928 l
-2879 5929 l
-2764 5929 l
-2764 5929 m
-2876 5929 l
-2876 5930 l
-2764 5930 l
-2765 5930 m
-2874 5930 l
-2874 5931 l
-2765 5931 l
-2765 5931 m
-2871 5931 l
-2871 5932 l
-2765 5932 l
-2766 5932 m
-2869 5932 l
-2869 5933 l
-2766 5933 l
-2766 5933 m
-2866 5933 l
-2866 5934 l
-2766 5934 l
-2766 5934 m
-2864 5934 l
-2864 5935 l
-2766 5935 l
-2767 5935 m
-2861 5935 l
-2861 5936 l
-2767 5936 l
-2767 5936 m
-2859 5936 l
-2859 5937 l
-2767 5937 l
-2768 5937 m
-2856 5937 l
-2856 5938 l
-2768 5938 l
-2768 5938 m
-2854 5938 l
-2854 5939 l
-2768 5939 l
-2768 5939 m
-2851 5939 l
-2851 5940 l
-2768 5940 l
-2769 5940 m
-2849 5940 l
-2849 5941 l
-2769 5941 l
-2769 5941 m
-2846 5941 l
-2846 5942 l
-2769 5942 l
-2770 5942 m
-2843 5942 l
-2843 5943 l
-2770 5943 l
-2770 5943 m
-2841 5943 l
-2841 5944 l
-2770 5944 l
-2770 5944 m
-2838 5944 l
-2838 5945 l
-2770 5945 l
-2771 5945 m
-2836 5945 l
-2836 5946 l
-2771 5946 l
-2771 5946 m
-2833 5946 l
-2833 5947 l
-2771 5947 l
-2772 5947 m
-2831 5947 l
-2831 5948 l
-2772 5948 l
-2772 5948 m
-2828 5948 l
-2828 5949 l
-2772 5949 l
-2772 5949 m
-2826 5949 l
-2826 5950 l
-2772 5950 l
-2773 5950 m
-2823 5950 l
-2823 5951 l
-2773 5951 l
-2773 5951 m
-2821 5951 l
-2821 5952 l
-2773 5952 l
-2774 5952 m
-2818 5952 l
-2818 5953 l
-2774 5953 l
-2774 5953 m
-2816 5953 l
-2816 5954 l
-2774 5954 l
-2774 5954 m
-2813 5954 l
-2813 5955 l
-2774 5955 l
-2775 5955 m
-2811 5955 l
-2811 5956 l
-2775 5956 l
-2775 5956 m
-2808 5956 l
-2808 5957 l
-2775 5957 l
-2776 5957 m
-2806 5957 l
-2806 5958 l
-2776 5958 l
-2776 5958 m
-2803 5958 l
-2803 5959 l
-2776 5959 l
-2776 5959 m
-2801 5959 l
-2801 5960 l
-2776 5960 l
-2777 5960 m
-2798 5960 l
-2798 5961 l
-2777 5961 l
-2777 5961 m
-2796 5961 l
-2796 5962 l
-2777 5962 l
-2778 5962 m
-2793 5962 l
-2793 5963 l
-2778 5963 l
-2778 5963 m
-2791 5963 l
-2791 5964 l
-2778 5964 l
-2778 5964 m
-2788 5964 l
-2788 5965 l
-2778 5965 l
-2779 5965 m
-2786 5965 l
-2786 5966 l
-2779 5966 l
-2779 5966 m
-2783 5966 l
-2783 5967 l
-2779 5967 l
-Y
-2939 5903.9 m
-2895 5791 l
-2735 5854 l
-2780 5967 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2887 5830 m
-2878 5829 l
-2862 5822 l
-2894 5904 l
-S
-2796 5848 m
-2809 5847 l
-2816 5854 l
-2819 5861 l
-2818 5871 l
-2812 5878 l
-2798 5888 l
-2788 5896 l
-2783 5907 l
-2782 5916 l
-2787 5928 l
-2794 5934 l
-2799 5936 l
-2812 5936 l
-2828 5930 l
-2838 5921 l
-2840 5916 l
-2841 5906 l
-2837 5895 l
-2830 5889 l
-2819 5884 l
-2806 5885 l
-2789 5887 l
-2779 5886 l
-2772 5880 l
-2769 5872 l
-2770 5863 l
-2780 5854 l
-2796 5848 l
-S
-1 g
-3616 5200 m
-3619 5200 l
-3619 5201 l
-3616 5201 l
-3615 5201 m
-3620 5201 l
-3620 5202 l
-3615 5202 l
-3614 5202 m
-3621 5202 l
-3621 5203 l
-3614 5203 l
-3613 5203 m
-3623 5203 l
-3623 5204 l
-3613 5204 l
-3612 5204 m
-3624 5204 l
-3624 5205 l
-3612 5205 l
-3612 5205 m
-3625 5205 l
-3625 5206 l
-3612 5206 l
-3611 5206 m
-3626 5206 l
-3626 5207 l
-3611 5207 l
-3610 5207 m
-3628 5207 l
-3628 5208 l
-3610 5208 l
-3609 5208 m
-3629 5208 l
-3629 5209 l
-3609 5209 l
-3608 5209 m
-3630 5209 l
-3630 5210 l
-3608 5210 l
-3608 5210 m
-3631 5210 l
-3631 5211 l
-3608 5211 l
-3607 5211 m
-3633 5211 l
-3633 5212 l
-3607 5212 l
-3606 5212 m
-3634 5212 l
-3634 5213 l
-3606 5213 l
-3605 5213 m
-3635 5213 l
-3635 5214 l
-3605 5214 l
-3604 5214 m
-3636 5214 l
-3636 5215 l
-3604 5215 l
-3604 5215 m
-3638 5215 l
-3638 5216 l
-3604 5216 l
-3603 5216 m
-3639 5216 l
-3639 5217 l
-3603 5217 l
-3602 5217 m
-3640 5217 l
-3640 5218 l
-3602 5218 l
-3601 5218 m
-3641 5218 l
-3641 5219 l
-3601 5219 l
-3600 5219 m
-3643 5219 l
-3643 5220 l
-3600 5220 l
-3600 5220 m
-3644 5220 l
-3644 5221 l
-3600 5221 l
-3599 5221 m
-3645 5221 l
-3645 5222 l
-3599 5222 l
-3598 5222 m
-3647 5222 l
-3647 5223 l
-3598 5223 l
-3597 5223 m
-3648 5223 l
-3648 5224 l
-3597 5224 l
-3596 5224 m
-3649 5224 l
-3649 5225 l
-3596 5225 l
-3596 5225 m
-3650 5225 l
-3650 5226 l
-3596 5226 l
-3595 5226 m
-3652 5226 l
-3652 5227 l
-3595 5227 l
-3594 5227 m
-3653 5227 l
-3653 5228 l
-3594 5228 l
-3593 5228 m
-3654 5228 l
-3654 5229 l
-3593 5229 l
-3592 5229 m
-3655 5229 l
-3655 5230 l
-3592 5230 l
-3592 5230 m
-3657 5230 l
-3657 5231 l
-3592 5231 l
-3591 5231 m
-3658 5231 l
-3658 5232 l
-3591 5232 l
-3590 5232 m
-3659 5232 l
-3659 5233 l
-3590 5233 l
-3589 5233 m
-3660 5233 l
-3660 5234 l
-3589 5234 l
-3588 5234 m
-3662 5234 l
-3662 5235 l
-3588 5235 l
-3588 5235 m
-3663 5235 l
-3663 5236 l
-3588 5236 l
-3587 5236 m
-3664 5236 l
-3664 5237 l
-3587 5237 l
-3586 5237 m
-3665 5237 l
-3665 5238 l
-3586 5238 l
-3585 5238 m
-3667 5238 l
-3667 5239 l
-3585 5239 l
-3584 5239 m
-3668 5239 l
-3668 5240 l
-3584 5240 l
-3584 5240 m
-3669 5240 l
-3669 5241 l
-3584 5241 l
-3583 5241 m
-3670 5241 l
-3670 5242 l
-3583 5242 l
-3582 5242 m
-3672 5242 l
-3672 5243 l
-3582 5243 l
-3581 5243 m
-3673 5243 l
-3673 5244 l
-3581 5244 l
-3580 5244 m
-3674 5244 l
-3674 5245 l
-3580 5245 l
-3580 5245 m
-3676 5245 l
-3676 5246 l
-3580 5246 l
-3579 5246 m
-3677 5246 l
-3677 5247 l
-3579 5247 l
-3578 5247 m
-3678 5247 l
-3678 5248 l
-3578 5248 l
-3577 5248 m
-3679 5248 l
-3679 5249 l
-3577 5249 l
-3576 5249 m
-3681 5249 l
-3681 5250 l
-3576 5250 l
-3575 5250 m
-3682 5250 l
-3682 5251 l
-3575 5251 l
-3575 5251 m
-3683 5251 l
-3683 5252 l
-3575 5252 l
-3574 5252 m
-3684 5252 l
-3684 5253 l
-3574 5253 l
-3573 5253 m
-3686 5253 l
-3686 5254 l
-3573 5254 l
-3572 5254 m
-3687 5254 l
-3687 5255 l
-3572 5255 l
-3571 5255 m
-3688 5255 l
-3688 5256 l
-3571 5256 l
-3571 5256 m
-3689 5256 l
-3689 5257 l
-3571 5257 l
-3570 5257 m
-3691 5257 l
-3691 5258 l
-3570 5258 l
-3569 5258 m
-3692 5258 l
-3692 5259 l
-3569 5259 l
-3568 5259 m
-3693 5259 l
-3693 5260 l
-3568 5260 l
-3567 5260 m
-3694 5260 l
-3694 5261 l
-3567 5261 l
-3567 5261 m
-3696 5261 l
-3696 5262 l
-3567 5262 l
-3566 5262 m
-3697 5262 l
-3697 5263 l
-3566 5263 l
-3565 5263 m
-3698 5263 l
-3698 5264 l
-3565 5264 l
-3564 5264 m
-3699 5264 l
-3699 5265 l
-3564 5265 l
-3563 5265 m
-3701 5265 l
-3701 5266 l
-3563 5266 l
-3563 5266 m
-3702 5266 l
-3702 5267 l
-3563 5267 l
-3562 5267 m
-3703 5267 l
-3703 5268 l
-3562 5268 l
-3561 5268 m
-3705 5268 l
-3705 5269 l
-3561 5269 l
-3560 5269 m
-3706 5269 l
-3706 5270 l
-3560 5270 l
-3559 5270 m
-3707 5270 l
-3707 5271 l
-3559 5271 l
-3559 5271 m
-3708 5271 l
-3708 5272 l
-3559 5272 l
-3558 5272 m
-3710 5272 l
-3710 5273 l
-3558 5273 l
-3557 5273 m
-3711 5273 l
-3711 5274 l
-3557 5274 l
-3556 5274 m
-3712 5274 l
-3712 5275 l
-3556 5275 l
-3555 5275 m
-3712 5275 l
-3712 5276 l
-3555 5276 l
-3555 5276 m
-3711 5276 l
-3711 5277 l
-3555 5277 l
-3554 5277 m
-3711 5277 l
-3711 5278 l
-3554 5278 l
-3553 5278 m
-3710 5278 l
-3710 5279 l
-3553 5279 l
-3552 5279 m
-3709 5279 l
-3709 5280 l
-3552 5280 l
-3551 5280 m
-3708 5280 l
-3708 5281 l
-3551 5281 l
-3551 5281 m
-3707 5281 l
-3707 5282 l
-3551 5282 l
-3550 5282 m
-3707 5282 l
-3707 5283 l
-3550 5283 l
-3549 5283 m
-3706 5283 l
-3706 5284 l
-3549 5284 l
-3548 5284 m
-3705 5284 l
-3705 5285 l
-3548 5285 l
-3547 5285 m
-3704 5285 l
-3704 5286 l
-3547 5286 l
-3547 5286 m
-3703 5286 l
-3703 5287 l
-3547 5287 l
-3546 5287 m
-3703 5287 l
-3703 5288 l
-3546 5288 l
-3545 5288 m
-3702 5288 l
-3702 5289 l
-3545 5289 l
-3544 5289 m
-3701 5289 l
-3701 5290 l
-3544 5290 l
-3543 5290 m
-3700 5290 l
-3700 5291 l
-3543 5291 l
-3543 5291 m
-3699 5291 l
-3699 5292 l
-3543 5292 l
-3542 5292 m
-3699 5292 l
-3699 5293 l
-3542 5293 l
-3541 5293 m
-3698 5293 l
-3698 5294 l
-3541 5294 l
-3540 5294 m
-3697 5294 l
-3697 5295 l
-3540 5295 l
-3539 5295 m
-3696 5295 l
-3696 5296 l
-3539 5296 l
-3538 5296 m
-3695 5296 l
-3695 5298 l
-3538 5298 l
-3537 5298 m
-3694 5298 l
-3694 5299 l
-3537 5299 l
-3536 5299 m
-3693 5299 l
-3693 5300 l
-3536 5300 l
-3535 5300 m
-3692 5300 l
-3692 5301 l
-3535 5301 l
-3534 5301 m
-3691 5301 l
-3691 5303 l
-3534 5303 l
-3533 5303 m
-3690 5303 l
-3690 5304 l
-3533 5304 l
-3532 5304 m
-3689 5304 l
-3689 5305 l
-3532 5305 l
-3531 5305 m
-3688 5305 l
-3688 5306 l
-3531 5306 l
-3530 5306 m
-3687 5306 l
-3687 5308 l
-3530 5308 l
-3529 5308 m
-3686 5308 l
-3686 5309 l
-3529 5309 l
-3528 5309 m
-3685 5309 l
-3685 5310 l
-3528 5310 l
-3527 5310 m
-3684 5310 l
-3684 5311 l
-3527 5311 l
-3526 5311 m
-3683 5311 l
-3683 5313 l
-3526 5313 l
-3525 5313 m
-3682 5313 l
-3682 5314 l
-3525 5314 l
-3524 5314 m
-3681 5314 l
-3681 5315 l
-3524 5315 l
-3523 5315 m
-3680 5315 l
-3680 5316 l
-3523 5316 l
-3522 5316 m
-3679 5316 l
-3679 5318 l
-3522 5318 l
-3521 5318 m
-3678 5318 l
-3678 5319 l
-3521 5319 l
-3520 5319 m
-3677 5319 l
-3677 5320 l
-3520 5320 l
-3519 5320 m
-3676 5320 l
-3676 5321 l
-3519 5321 l
-3518 5321 m
-3675 5321 l
-3675 5323 l
-3518 5323 l
-3517 5323 m
-3674 5323 l
-3674 5324 l
-3517 5324 l
-3516 5324 m
-3673 5324 l
-3673 5325 l
-3516 5325 l
-3515 5325 m
-3672 5325 l
-3672 5326 l
-3515 5326 l
-3514 5326 m
-3672 5326 l
-3672 5327 l
-3514 5327 l
-3514 5327 m
-3671 5327 l
-3671 5328 l
-3514 5328 l
-3513 5328 m
-3670 5328 l
-3670 5329 l
-3513 5329 l
-3512 5329 m
-3669 5329 l
-3669 5330 l
-3512 5330 l
-3511 5330 m
-3668 5330 l
-3668 5331 l
-3511 5331 l
-3510 5331 m
-3668 5331 l
-3668 5332 l
-3510 5332 l
-3510 5332 m
-3667 5332 l
-3667 5333 l
-3510 5333 l
-3509 5333 m
-3666 5333 l
-3666 5334 l
-3509 5334 l
-3508 5334 m
-3665 5334 l
-3665 5335 l
-3508 5335 l
-3507 5335 m
-3664 5335 l
-3664 5336 l
-3507 5336 l
-3506 5336 m
-3664 5336 l
-3664 5337 l
-3506 5337 l
-3506 5337 m
-3663 5337 l
-3663 5338 l
-3506 5338 l
-3505 5338 m
-3662 5338 l
-3662 5339 l
-3505 5339 l
-3504 5339 m
-3661 5339 l
-3661 5340 l
-3504 5340 l
-3503 5340 m
-3660 5340 l
-3660 5341 l
-3503 5341 l
-3502 5341 m
-3660 5341 l
-3660 5342 l
-3502 5342 l
-3502 5342 m
-3659 5342 l
-3659 5343 l
-3502 5343 l
-3502 5343 m
-3658 5343 l
-3658 5344 l
-3502 5344 l
-3503 5344 m
-3657 5344 l
-3657 5345 l
-3503 5345 l
-3504 5345 m
-3656 5345 l
-3656 5346 l
-3504 5346 l
-3505 5346 m
-3656 5346 l
-3656 5347 l
-3505 5347 l
-3507 5347 m
-3655 5347 l
-3655 5348 l
-3507 5348 l
-3508 5348 m
-3654 5348 l
-3654 5349 l
-3508 5349 l
-3509 5349 m
-3653 5349 l
-3653 5350 l
-3509 5350 l
-3510 5350 m
-3652 5350 l
-3652 5351 l
-3510 5351 l
-3512 5351 m
-3652 5351 l
-3652 5352 l
-3512 5352 l
-3513 5352 m
-3651 5352 l
-3651 5353 l
-3513 5353 l
-3514 5353 m
-3650 5353 l
-3650 5354 l
-3514 5354 l
-3515 5354 m
-3649 5354 l
-3649 5355 l
-3515 5355 l
-3517 5355 m
-3648 5355 l
-3648 5356 l
-3517 5356 l
-3518 5356 m
-3648 5356 l
-3648 5357 l
-3518 5357 l
-3519 5357 m
-3647 5357 l
-3647 5358 l
-3519 5358 l
-3520 5358 m
-3646 5358 l
-3646 5359 l
-3520 5359 l
-3522 5359 m
-3645 5359 l
-3645 5360 l
-3522 5360 l
-3523 5360 m
-3644 5360 l
-3644 5361 l
-3523 5361 l
-3524 5361 m
-3644 5361 l
-3644 5362 l
-3524 5362 l
-3525 5362 m
-3643 5362 l
-3643 5363 l
-3525 5363 l
-3527 5363 m
-3642 5363 l
-3642 5364 l
-3527 5364 l
-3528 5364 m
-3641 5364 l
-3641 5365 l
-3528 5365 l
-3529 5365 m
-3640 5365 l
-3640 5366 l
-3529 5366 l
-3530 5366 m
-3640 5366 l
-3640 5367 l
-3530 5367 l
-3532 5367 m
-3639 5367 l
-3639 5368 l
-3532 5368 l
-3533 5368 m
-3638 5368 l
-3638 5369 l
-3533 5369 l
-3534 5369 m
-3637 5369 l
-3637 5370 l
-3534 5370 l
-3535 5370 m
-3636 5370 l
-3636 5371 l
-3535 5371 l
-3537 5371 m
-3636 5371 l
-3636 5372 l
-3537 5372 l
-3538 5372 m
-3635 5372 l
-3635 5373 l
-3538 5373 l
-3539 5373 m
-3634 5373 l
-3634 5374 l
-3539 5374 l
-3540 5374 m
-3633 5374 l
-3633 5375 l
-3540 5375 l
-3542 5375 m
-3633 5375 l
-3633 5376 l
-3542 5376 l
-3543 5376 m
-3632 5376 l
-3632 5377 l
-3543 5377 l
-3544 5377 m
-3631 5377 l
-3631 5378 l
-3544 5378 l
-3545 5378 m
-3630 5378 l
-3630 5379 l
-3545 5379 l
-3547 5379 m
-3629 5379 l
-3629 5380 l
-3547 5380 l
-3548 5380 m
-3629 5380 l
-3629 5381 l
-3548 5381 l
-3549 5381 m
-3628 5381 l
-3628 5382 l
-3549 5382 l
-3550 5382 m
-3627 5382 l
-3627 5383 l
-3550 5383 l
-3551 5383 m
-3626 5383 l
-3626 5384 l
-3551 5384 l
-3553 5384 m
-3625 5384 l
-3625 5385 l
-3553 5385 l
-3554 5385 m
-3625 5385 l
-3625 5386 l
-3554 5386 l
-3555 5386 m
-3624 5386 l
-3624 5387 l
-3555 5387 l
-3556 5387 m
-3623 5387 l
-3623 5388 l
-3556 5388 l
-3558 5388 m
-3622 5388 l
-3622 5389 l
-3558 5389 l
-3559 5389 m
-3621 5389 l
-3621 5390 l
-3559 5390 l
-3560 5390 m
-3621 5390 l
-3621 5391 l
-3560 5391 l
-3561 5391 m
-3620 5391 l
-3620 5392 l
-3561 5392 l
-3563 5392 m
-3619 5392 l
-3619 5393 l
-3563 5393 l
-3564 5393 m
-3618 5393 l
-3618 5394 l
-3564 5394 l
-3565 5394 m
-3617 5394 l
-3617 5395 l
-3565 5395 l
-3566 5395 m
-3617 5395 l
-3617 5396 l
-3566 5396 l
-3568 5396 m
-3616 5396 l
-3616 5397 l
-3568 5397 l
-3569 5397 m
-3615 5397 l
-3615 5398 l
-3569 5398 l
-3570 5398 m
-3614 5398 l
-3614 5399 l
-3570 5399 l
-3571 5399 m
-3613 5399 l
-3613 5400 l
-3571 5400 l
-3573 5400 m
-3613 5400 l
-3613 5401 l
-3573 5401 l
-3574 5401 m
-3612 5401 l
-3612 5402 l
-3574 5402 l
-3575 5402 m
-3611 5402 l
-3611 5403 l
-3575 5403 l
-3576 5403 m
-3610 5403 l
-3610 5404 l
-3576 5404 l
-3578 5404 m
-3609 5404 l
-3609 5405 l
-3578 5405 l
-3579 5405 m
-3609 5405 l
-3609 5406 l
-3579 5406 l
-3580 5406 m
-3608 5406 l
-3608 5407 l
-3580 5407 l
-3581 5407 m
-3607 5407 l
-3607 5408 l
-3581 5408 l
-3583 5408 m
-3606 5408 l
-3606 5409 l
-3583 5409 l
-3584 5409 m
-3605 5409 l
-3605 5410 l
-3584 5410 l
-3585 5410 m
-3605 5410 l
-3605 5411 l
-3585 5411 l
-3586 5411 m
-3604 5411 l
-3604 5412 l
-3586 5412 l
-3588 5412 m
-3603 5412 l
-3603 5413 l
-3588 5413 l
-3589 5413 m
-3602 5413 l
-3602 5414 l
-3589 5414 l
-3590 5414 m
-3601 5414 l
-3601 5415 l
-3590 5415 l
-3591 5415 m
-3601 5415 l
-3601 5416 l
-3591 5416 l
-3593 5416 m
-3600 5416 l
-3600 5417 l
-3593 5417 l
-3594 5417 m
-3599 5417 l
-3599 5418 l
-3594 5418 l
-3595 5418 m
-3598 5418 l
-3598 5419 l
-3595 5419 l
-Y
-3711.6 5275 m
-3617 5200 l
-3502 5343 l
-3597 5419 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3631 5243 m
-3627 5240 l
-3618 5238 l
-3612 5239 l
-3604 5243 l
-3593 5256 l
-3592 5265 l
-3592 5271 l
-3596 5279 l
-3603 5284 l
-3612 5286 l
-3627 5288 l
-3685 5281 l
-3649 5327 l
-S
-3549 5311 m
-3560 5304 l
-3575 5305 l
-3594 5315 l
-3604 5323 l
-3618 5339 l
-3622 5353 l
-3618 5366 l
-3613 5372 l
-3602 5380 l
-3587 5378 l
-3568 5369 l
-3558 5361 l
-3544 5344 l
-3539 5330 l
-3544 5318 l
-3549 5311 l
-S
-1 g
-3938 4336 m
-3946 4336 l
-3946 4337 l
-3938 4337 l
-3938 4337 m
-3953 4337 l
-3953 4338 l
-3938 4338 l
-3938 4338 m
-3960 4338 l
-3960 4339 l
-3938 4339 l
-3938 4339 m
-3967 4339 l
-3967 4340 l
-3938 4340 l
-3938 4340 m
-3973 4340 l
-3973 4341 l
-3938 4341 l
-3938 4341 m
-3980 4341 l
-3980 4342 l
-3938 4342 l
-3937 4342 m
-3987 4342 l
-3987 4343 l
-3937 4343 l
-3937 4343 m
-3994 4343 l
-3994 4344 l
-3937 4344 l
-3937 4344 m
-4001 4344 l
-4001 4345 l
-3937 4345 l
-3937 4345 m
-4007 4345 l
-4007 4346 l
-3937 4346 l
-3937 4346 m
-4014 4346 l
-4014 4347 l
-3937 4347 l
-3937 4347 m
-4021 4347 l
-4021 4348 l
-3937 4348 l
-3936 4348 m
-4028 4348 l
-4028 4349 l
-3936 4349 l
-3936 4349 m
-4035 4349 l
-4035 4350 l
-3936 4350 l
-3936 4350 m
-4041 4350 l
-4041 4351 l
-3936 4351 l
-3936 4351 m
-4048 4351 l
-4048 4352 l
-3936 4352 l
-3936 4352 m
-4055 4352 l
-4055 4353 l
-3936 4353 l
-3936 4353 m
-4059 4353 l
-4059 4354 l
-3936 4354 l
-3936 4354 m
-4059 4354 l
-4059 4355 l
-3936 4355 l
-3935 4355 m
-4059 4355 l
-4059 4357 l
-3935 4357 l
-3935 4357 m
-4058 4357 l
-4058 4361 l
-3935 4361 l
-3934 4361 m
-4058 4361 l
-4058 4364 l
-3934 4364 l
-3934 4364 m
-4057 4364 l
-4057 4368 l
-3934 4368 l
-3933 4368 m
-4057 4368 l
-4057 4371 l
-3933 4371 l
-3933 4371 m
-4056 4371 l
-4056 4374 l
-3933 4374 l
-3932 4374 m
-4056 4374 l
-4056 4377 l
-3932 4377 l
-3932 4377 m
-4055 4377 l
-4055 4381 l
-3932 4381 l
-3931 4381 m
-4055 4381 l
-4055 4384 l
-3931 4384 l
-3931 4384 m
-4054 4384 l
-4054 4387 l
-3931 4387 l
-3930 4387 m
-4054 4387 l
-4054 4390 l
-3930 4390 l
-3930 4390 m
-4053 4390 l
-4053 4394 l
-3930 4394 l
-3929 4394 m
-4053 4394 l
-4053 4397 l
-3929 4397 l
-3929 4397 m
-4052 4397 l
-4052 4400 l
-3929 4400 l
-3928 4400 m
-4052 4400 l
-4052 4404 l
-3928 4404 l
-3928 4404 m
-4051 4404 l
-4051 4407 l
-3928 4407 l
-3927 4407 m
-4051 4407 l
-4051 4410 l
-3927 4410 l
-3927 4410 m
-4050 4410 l
-4050 4413 l
-3927 4413 l
-3926 4413 m
-4050 4413 l
-4050 4417 l
-3926 4417 l
-3926 4417 m
-4049 4417 l
-4049 4420 l
-3926 4420 l
-3925 4420 m
-4049 4420 l
-4049 4423 l
-3925 4423 l
-3925 4423 m
-4048 4423 l
-4048 4426 l
-3925 4426 l
-3924 4426 m
-4048 4426 l
-4048 4430 l
-3924 4430 l
-3924 4430 m
-4047 4430 l
-4047 4432 l
-3924 4432 l
-3923 4432 m
-4047 4432 l
-4047 4437 l
-3923 4437 l
-3923 4437 m
-4046 4437 l
-4046 4439 l
-3923 4439 l
-3922 4439 m
-4046 4439 l
-4046 4443 l
-3922 4443 l
-3922 4443 m
-4045 4443 l
-4045 4445 l
-3922 4445 l
-3921 4445 m
-4045 4445 l
-4045 4450 l
-3921 4450 l
-3921 4450 m
-4044 4450 l
-4044 4452 l
-3921 4452 l
-3920 4452 m
-4044 4452 l
-4044 4456 l
-3920 4456 l
-3920 4456 m
-4043 4456 l
-4043 4458 l
-3920 4458 l
-3919 4458 m
-4043 4458 l
-4043 4463 l
-3919 4463 l
-3919 4463 m
-4042 4463 l
-4042 4465 l
-3919 4465 l
-3918 4465 m
-4042 4465 l
-4042 4470 l
-3918 4470 l
-3918 4470 m
-4041 4470 l
-4041 4471 l
-3918 4471 l
-3917 4471 m
-4041 4471 l
-4041 4476 l
-3917 4476 l
-3917 4476 m
-4040 4476 l
-4040 4478 l
-3917 4478 l
-3916 4478 m
-4040 4478 l
-4040 4483 l
-3916 4483 l
-3916 4483 m
-4039 4483 l
-4039 4484 l
-3916 4484 l
-3915 4484 m
-4039 4484 l
-4039 4489 l
-3915 4489 l
-3915 4489 m
-4038 4489 l
-4038 4491 l
-3915 4491 l
-3914 4491 m
-4038 4491 l
-4038 4496 l
-3914 4496 l
-3914 4496 m
-4037 4496 l
-4037 4497 l
-3914 4497 l
-3913 4497 m
-4037 4497 l
-4037 4503 l
-3913 4503 l
-3913 4503 m
-4036 4503 l
-4036 4504 l
-3913 4504 l
-3912 4504 m
-4036 4504 l
-4036 4509 l
-3912 4509 l
-3912 4509 m
-4035 4509 l
-4035 4510 l
-3912 4510 l
-3911 4510 m
-4035 4510 l
-4035 4516 l
-3911 4516 l
-3911 4516 m
-4034 4516 l
-4034 4517 l
-3911 4517 l
-3911 4517 m
-4034 4517 l
-4034 4518 l
-3911 4518 l
-3917 4518 m
-4034 4518 l
-4034 4519 l
-3917 4519 l
-3924 4519 m
-4034 4519 l
-4034 4520 l
-3924 4520 l
-3931 4520 m
-4034 4520 l
-4034 4521 l
-3931 4521 l
-3937 4521 m
-4034 4521 l
-4034 4522 l
-3937 4522 l
-3944 4522 m
-4033 4522 l
-4033 4523 l
-3944 4523 l
-3951 4523 m
-4033 4523 l
-4033 4524 l
-3951 4524 l
-3957 4524 m
-4033 4524 l
-4033 4525 l
-3957 4525 l
-3964 4525 m
-4033 4525 l
-4033 4526 l
-3964 4526 l
-3971 4526 m
-4033 4526 l
-4033 4527 l
-3971 4527 l
-3977 4527 m
-4033 4527 l
-4033 4528 l
-3977 4528 l
-3984 4528 m
-4033 4528 l
-4033 4529 l
-3984 4529 l
-3991 4529 m
-4032 4529 l
-4032 4530 l
-3991 4530 l
-3997 4530 m
-4032 4530 l
-4032 4531 l
-3997 4531 l
-4004 4531 m
-4032 4531 l
-4032 4532 l
-4004 4532 l
-4011 4532 m
-4032 4532 l
-4032 4533 l
-4011 4533 l
-4017 4533 m
-4032 4533 l
-4032 4534 l
-4017 4534 l
-4024 4534 m
-4032 4534 l
-4032 4535 l
-4024 4535 l
-Y
-4058.5 4353.6 m
-3939 4336 l
-3911 4517 l
-4031 4535 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3972 4366 m
-3968 4365 l
-3959 4368 l
-3954 4372 l
-3949 4379 l
-3947 4396 l
-3949 4405 l
-3953 4410 l
-3961 4415 l
-3969 4416 l
-3978 4413 l
-3991 4407 l
-4039 4372 l
-4030 4430 l
-S
-3960 4449 m
-3956 4448 l
-3947 4451 l
-3942 4454 l
-3937 4462 l
-3934 4478 l
-3937 4487 l
-3941 4492 l
-3948 4497 l
-3956 4499 l
-3965 4496 l
-3979 4489 l
-4026 4454 l
-4018 4512 l
-S
-1 g
-2292 3957 m
-2296 3957 l
-2296 3958 l
-2292 3958 l
-2289 3958 m
-2296 3958 l
-2296 3959 l
-2289 3959 l
-2287 3959 m
-2297 3959 l
-2297 3960 l
-2287 3960 l
-2284 3960 m
-2297 3960 l
-2297 3961 l
-2284 3961 l
-2282 3961 m
-2297 3961 l
-2297 3962 l
-2282 3962 l
-2279 3962 m
-2298 3962 l
-2298 3963 l
-2279 3963 l
-2277 3963 m
-2298 3963 l
-2298 3964 l
-2277 3964 l
-2274 3964 m
-2299 3964 l
-2299 3965 l
-2274 3965 l
-2272 3965 m
-2299 3965 l
-2299 3966 l
-2272 3966 l
-2269 3966 m
-2299 3966 l
-2299 3967 l
-2269 3967 l
-2267 3967 m
-2300 3967 l
-2300 3968 l
-2267 3968 l
-2264 3968 m
-2300 3968 l
-2300 3969 l
-2264 3969 l
-2262 3969 m
-2301 3969 l
-2301 3970 l
-2262 3970 l
-2259 3970 m
-2301 3970 l
-2301 3971 l
-2259 3971 l
-2256 3971 m
-2301 3971 l
-2301 3972 l
-2256 3972 l
-2254 3972 m
-2302 3972 l
-2302 3973 l
-2254 3973 l
-2251 3973 m
-2302 3973 l
-2302 3974 l
-2251 3974 l
-2249 3974 m
-2303 3974 l
-2303 3975 l
-2249 3975 l
-2246 3975 m
-2303 3975 l
-2303 3976 l
-2246 3976 l
-2244 3976 m
-2303 3976 l
-2303 3977 l
-2244 3977 l
-2241 3977 m
-2304 3977 l
-2304 3978 l
-2241 3978 l
-2239 3978 m
-2304 3978 l
-2304 3979 l
-2239 3979 l
-2236 3979 m
-2305 3979 l
-2305 3980 l
-2236 3980 l
-2234 3980 m
-2305 3980 l
-2305 3981 l
-2234 3981 l
-2231 3981 m
-2305 3981 l
-2305 3982 l
-2231 3982 l
-2229 3982 m
-2306 3982 l
-2306 3983 l
-2229 3983 l
-2226 3983 m
-2306 3983 l
-2306 3984 l
-2226 3984 l
-2224 3984 m
-2307 3984 l
-2307 3985 l
-2224 3985 l
-2221 3985 m
-2307 3985 l
-2307 3986 l
-2221 3986 l
-2218 3986 m
-2307 3986 l
-2307 3987 l
-2218 3987 l
-2216 3987 m
-2308 3987 l
-2308 3988 l
-2216 3988 l
-2213 3988 m
-2308 3988 l
-2308 3989 l
-2213 3989 l
-2211 3989 m
-2308 3989 l
-2308 3990 l
-2211 3990 l
-2208 3990 m
-2309 3990 l
-2309 3991 l
-2208 3991 l
-2206 3991 m
-2309 3991 l
-2309 3992 l
-2206 3992 l
-2203 3992 m
-2310 3992 l
-2310 3993 l
-2203 3993 l
-2201 3993 m
-2310 3993 l
-2310 3994 l
-2201 3994 l
-2198 3994 m
-2310 3994 l
-2310 3995 l
-2198 3995 l
-2196 3995 m
-2311 3995 l
-2311 3996 l
-2196 3996 l
-2193 3996 m
-2311 3996 l
-2311 3997 l
-2193 3997 l
-2191 3997 m
-2312 3997 l
-2312 3998 l
-2191 3998 l
-2188 3998 m
-2312 3998 l
-2312 3999 l
-2188 3999 l
-2186 3999 m
-2312 3999 l
-2312 4000 l
-2186 4000 l
-2183 4000 m
-2313 4000 l
-2313 4001 l
-2183 4001 l
-2180 4001 m
-2313 4001 l
-2313 4002 l
-2180 4002 l
-2178 4002 m
-2314 4002 l
-2314 4003 l
-2178 4003 l
-2175 4003 m
-2314 4003 l
-2314 4004 l
-2175 4004 l
-2173 4004 m
-2314 4004 l
-2314 4005 l
-2173 4005 l
-2170 4005 m
-2315 4005 l
-2315 4006 l
-2170 4006 l
-2168 4006 m
-2315 4006 l
-2315 4007 l
-2168 4007 l
-2165 4007 m
-2316 4007 l
-2316 4008 l
-2165 4008 l
-2163 4008 m
-2316 4008 l
-2316 4009 l
-2163 4009 l
-2160 4009 m
-2316 4009 l
-2316 4010 l
-2160 4010 l
-2158 4010 m
-2317 4010 l
-2317 4011 l
-2158 4011 l
-2155 4011 m
-2317 4011 l
-2317 4012 l
-2155 4012 l
-2153 4012 m
-2318 4012 l
-2318 4013 l
-2153 4013 l
-2150 4013 m
-2318 4013 l
-2318 4014 l
-2150 4014 l
-2147 4014 m
-2318 4014 l
-2318 4015 l
-2147 4015 l
-2145 4015 m
-2319 4015 l
-2319 4016 l
-2145 4016 l
-2142 4016 m
-2319 4016 l
-2319 4017 l
-2142 4017 l
-2140 4017 m
-2320 4017 l
-2320 4018 l
-2140 4018 l
-2137 4018 m
-2320 4018 l
-2320 4019 l
-2137 4019 l
-2135 4019 m
-2320 4019 l
-2320 4020 l
-2135 4020 l
-2132 4020 m
-2321 4020 l
-2321 4021 l
-2132 4021 l
-2130 4021 m
-2321 4021 l
-2321 4022 l
-2130 4022 l
-2127 4022 m
-2321 4022 l
-2321 4023 l
-2127 4023 l
-2125 4023 m
-2322 4023 l
-2322 4024 l
-2125 4024 l
-2122 4024 m
-2322 4024 l
-2322 4025 l
-2122 4025 l
-2120 4025 m
-2323 4025 l
-2323 4026 l
-2120 4026 l
-2117 4026 m
-2323 4026 l
-2323 4027 l
-2117 4027 l
-2115 4027 m
-2323 4027 l
-2323 4028 l
-2115 4028 l
-2112 4028 m
-2324 4028 l
-2324 4029 l
-2112 4029 l
-2109 4029 m
-2324 4029 l
-2324 4030 l
-2109 4030 l
-2107 4030 m
-2325 4030 l
-2325 4031 l
-2107 4031 l
-2104 4031 m
-2325 4031 l
-2325 4032 l
-2104 4032 l
-2102 4032 m
-2325 4032 l
-2325 4033 l
-2102 4033 l
-2099 4033 m
-2326 4033 l
-2326 4034 l
-2099 4034 l
-2097 4034 m
-2326 4034 l
-2326 4035 l
-2097 4035 l
-2094 4035 m
-2327 4035 l
-2327 4036 l
-2094 4036 l
-2092 4036 m
-2327 4036 l
-2327 4037 l
-2092 4037 l
-2089 4037 m
-2327 4037 l
-2327 4038 l
-2089 4038 l
-2087 4038 m
-2328 4038 l
-2328 4039 l
-2087 4039 l
-2084 4039 m
-2328 4039 l
-2328 4040 l
-2084 4040 l
-2082 4040 m
-2329 4040 l
-2329 4041 l
-2082 4041 l
-2079 4041 m
-2329 4041 l
-2329 4042 l
-2079 4042 l
-2077 4042 m
-2329 4042 l
-2329 4043 l
-2077 4043 l
-2074 4043 m
-2330 4043 l
-2330 4044 l
-2074 4044 l
-2071 4044 m
-2330 4044 l
-2330 4045 l
-2071 4045 l
-2069 4045 m
-2331 4045 l
-2331 4046 l
-2069 4046 l
-2066 4046 m
-2331 4046 l
-2331 4047 l
-2066 4047 l
-2064 4047 m
-2331 4047 l
-2331 4048 l
-2064 4048 l
-2061 4048 m
-2332 4048 l
-2332 4049 l
-2061 4049 l
-2059 4049 m
-2332 4049 l
-2332 4050 l
-2059 4050 l
-2056 4050 m
-2333 4050 l
-2333 4051 l
-2056 4051 l
-2054 4051 m
-2333 4051 l
-2333 4052 l
-2054 4052 l
-2051 4052 m
-2333 4052 l
-2333 4053 l
-2051 4053 l
-2049 4053 m
-2334 4053 l
-2334 4054 l
-2049 4054 l
-2046 4054 m
-2334 4054 l
-2334 4055 l
-2046 4055 l
-2044 4055 m
-2334 4055 l
-2334 4056 l
-2044 4056 l
-2041 4056 m
-2335 4056 l
-2335 4057 l
-2041 4057 l
-2038 4057 m
-2335 4057 l
-2335 4058 l
-2038 4058 l
-2036 4058 m
-2336 4058 l
-2336 4059 l
-2036 4059 l
-2033 4059 m
-2336 4059 l
-2336 4060 l
-2033 4060 l
-2031 4060 m
-2336 4060 l
-2336 4061 l
-2031 4061 l
-2028 4061 m
-2337 4061 l
-2337 4062 l
-2028 4062 l
-2026 4062 m
-2337 4062 l
-2337 4063 l
-2026 4063 l
-2023 4063 m
-2338 4063 l
-2338 4064 l
-2023 4064 l
-2021 4064 m
-2338 4064 l
-2338 4065 l
-2021 4065 l
-2018 4065 m
-2338 4065 l
-2338 4066 l
-2018 4066 l
-2016 4066 m
-2339 4066 l
-2339 4067 l
-2016 4067 l
-2013 4067 m
-2339 4067 l
-2339 4068 l
-2013 4068 l
-2011 4068 m
-2340 4068 l
-2340 4069 l
-2011 4069 l
-2008 4069 m
-2340 4069 l
-2340 4070 l
-2008 4070 l
-2006 4070 m
-2338 4070 l
-2338 4071 l
-2006 4071 l
-2003 4071 m
-2335 4071 l
-2335 4072 l
-2003 4072 l
-2000 4072 m
-2333 4072 l
-2333 4073 l
-2000 4073 l
-1998 4073 m
-2330 4073 l
-2330 4074 l
-1998 4074 l
-1995 4074 m
-2328 4074 l
-2328 4075 l
-1995 4075 l
-1993 4075 m
-2325 4075 l
-2325 4076 l
-1993 4076 l
-1990 4076 m
-2323 4076 l
-2323 4077 l
-1990 4077 l
-1988 4077 m
-2320 4077 l
-2320 4078 l
-1988 4078 l
-1985 4078 m
-2318 4078 l
-2318 4079 l
-1985 4079 l
-1983 4079 m
-2315 4079 l
-2315 4080 l
-1983 4080 l
-1980 4080 m
-2312 4080 l
-2312 4081 l
-1980 4081 l
-1978 4081 m
-2310 4081 l
-2310 4082 l
-1978 4082 l
-1975 4082 m
-2307 4082 l
-2307 4083 l
-1975 4083 l
-1973 4083 m
-2305 4083 l
-2305 4084 l
-1973 4084 l
-1970 4084 m
-2302 4084 l
-2302 4085 l
-1970 4085 l
-1968 4085 m
-2300 4085 l
-2300 4086 l
-1968 4086 l
-1965 4086 m
-2297 4086 l
-2297 4087 l
-1965 4087 l
-1962 4087 m
-2295 4087 l
-2295 4088 l
-1962 4088 l
-1960 4088 m
-2292 4088 l
-2292 4089 l
-1960 4089 l
-1957 4089 m
-2290 4089 l
-2290 4090 l
-1957 4090 l
-1955 4090 m
-2287 4090 l
-2287 4091 l
-1955 4091 l
-1952 4091 m
-2285 4091 l
-2285 4092 l
-1952 4092 l
-1950 4092 m
-2282 4092 l
-2282 4093 l
-1950 4093 l
-1947 4093 m
-2280 4093 l
-2280 4094 l
-1947 4094 l
-1945 4094 m
-2277 4094 l
-2277 4095 l
-1945 4095 l
-1942 4095 m
-2275 4095 l
-2275 4096 l
-1942 4096 l
-1940 4096 m
-2272 4096 l
-2272 4097 l
-1940 4097 l
-1937 4097 m
-2270 4097 l
-2270 4098 l
-1937 4098 l
-1935 4098 m
-2267 4098 l
-2267 4099 l
-1935 4099 l
-1932 4099 m
-2265 4099 l
-2265 4100 l
-1932 4100 l
-1930 4100 m
-2262 4100 l
-2262 4101 l
-1930 4101 l
-1930 4101 m
-2259 4101 l
-2259 4102 l
-1930 4102 l
-1930 4102 m
-2257 4102 l
-2257 4103 l
-1930 4103 l
-1930 4103 m
-2254 4103 l
-2254 4104 l
-1930 4104 l
-1931 4104 m
-2252 4104 l
-2252 4105 l
-1931 4105 l
-1931 4105 m
-2249 4105 l
-2249 4106 l
-1931 4106 l
-1931 4106 m
-2247 4106 l
-2247 4107 l
-1931 4107 l
-1932 4107 m
-2244 4107 l
-2244 4108 l
-1932 4108 l
-1932 4108 m
-2242 4108 l
-2242 4109 l
-1932 4109 l
-1933 4109 m
-2239 4109 l
-2239 4110 l
-1933 4110 l
-1933 4110 m
-2237 4110 l
-2237 4111 l
-1933 4111 l
-1933 4111 m
-2234 4111 l
-2234 4112 l
-1933 4112 l
-1934 4112 m
-2232 4112 l
-2232 4113 l
-1934 4113 l
-1934 4113 m
-2229 4113 l
-2229 4114 l
-1934 4114 l
-1935 4114 m
-2227 4114 l
-2227 4115 l
-1935 4115 l
-1935 4115 m
-2224 4115 l
-2224 4116 l
-1935 4116 l
-1935 4116 m
-2222 4116 l
-2222 4117 l
-1935 4117 l
-1936 4117 m
-2219 4117 l
-2219 4118 l
-1936 4118 l
-1936 4118 m
-2217 4118 l
-2217 4119 l
-1936 4119 l
-1937 4119 m
-2214 4119 l
-2214 4120 l
-1937 4120 l
-1937 4120 m
-2212 4120 l
-2212 4121 l
-1937 4121 l
-1937 4121 m
-2209 4121 l
-2209 4122 l
-1937 4122 l
-1938 4122 m
-2207 4122 l
-2207 4123 l
-1938 4123 l
-1938 4123 m
-2204 4123 l
-2204 4124 l
-1938 4124 l
-1938 4124 m
-2201 4124 l
-2201 4125 l
-1938 4125 l
-1939 4125 m
-2199 4125 l
-2199 4126 l
-1939 4126 l
-1939 4126 m
-2196 4126 l
-2196 4127 l
-1939 4127 l
-1940 4127 m
-2194 4127 l
-2194 4128 l
-1940 4128 l
-1940 4128 m
-2191 4128 l
-2191 4129 l
-1940 4129 l
-1940 4129 m
-2189 4129 l
-2189 4130 l
-1940 4130 l
-1941 4130 m
-2186 4130 l
-2186 4131 l
-1941 4131 l
-1941 4131 m
-2184 4131 l
-2184 4132 l
-1941 4132 l
-1942 4132 m
-2181 4132 l
-2181 4133 l
-1942 4133 l
-1942 4133 m
-2179 4133 l
-2179 4134 l
-1942 4134 l
-1942 4134 m
-2176 4134 l
-2176 4135 l
-1942 4135 l
-1943 4135 m
-2174 4135 l
-2174 4136 l
-1943 4136 l
-1943 4136 m
-2171 4136 l
-2171 4137 l
-1943 4137 l
-1944 4137 m
-2169 4137 l
-2169 4138 l
-1944 4138 l
-1944 4138 m
-2166 4138 l
-2166 4139 l
-1944 4139 l
-1944 4139 m
-2164 4139 l
-2164 4140 l
-1944 4140 l
-1945 4140 m
-2161 4140 l
-2161 4141 l
-1945 4141 l
-1945 4141 m
-2159 4141 l
-2159 4142 l
-1945 4142 l
-1945 4142 m
-2156 4142 l
-2156 4143 l
-1945 4143 l
-1946 4143 m
-2154 4143 l
-2154 4144 l
-1946 4144 l
-1946 4144 m
-2151 4144 l
-2151 4145 l
-1946 4145 l
-1947 4145 m
-2149 4145 l
-2149 4146 l
-1947 4146 l
-1947 4146 m
-2146 4146 l
-2146 4147 l
-1947 4147 l
-1947 4147 m
-2143 4147 l
-2143 4148 l
-1947 4148 l
-1948 4148 m
-2141 4148 l
-2141 4149 l
-1948 4149 l
-1948 4149 m
-2138 4149 l
-2138 4150 l
-1948 4150 l
-1949 4150 m
-2136 4150 l
-2136 4151 l
-1949 4151 l
-1949 4151 m
-2133 4151 l
-2133 4152 l
-1949 4152 l
-1949 4152 m
-2131 4152 l
-2131 4153 l
-1949 4153 l
-1950 4153 m
-2128 4153 l
-2128 4154 l
-1950 4154 l
-1950 4154 m
-2126 4154 l
-2126 4155 l
-1950 4155 l
-1951 4155 m
-2123 4155 l
-2123 4156 l
-1951 4156 l
-1951 4156 m
-2121 4156 l
-2121 4157 l
-1951 4157 l
-1951 4157 m
-2118 4157 l
-2118 4158 l
-1951 4158 l
-1952 4158 m
-2116 4158 l
-2116 4159 l
-1952 4159 l
-1952 4159 m
-2113 4159 l
-2113 4160 l
-1952 4160 l
-1952 4160 m
-2111 4160 l
-2111 4161 l
-1952 4161 l
-1953 4161 m
-2108 4161 l
-2108 4162 l
-1953 4162 l
-1953 4162 m
-2106 4162 l
-2106 4163 l
-1953 4163 l
-1954 4163 m
-2103 4163 l
-2103 4164 l
-1954 4164 l
-1954 4164 m
-2101 4164 l
-2101 4165 l
-1954 4165 l
-1954 4165 m
-2098 4165 l
-2098 4166 l
-1954 4166 l
-1955 4166 m
-2096 4166 l
-2096 4167 l
-1955 4167 l
-1955 4167 m
-2093 4167 l
-2093 4168 l
-1955 4168 l
-1956 4168 m
-2091 4168 l
-2091 4169 l
-1956 4169 l
-1956 4169 m
-2088 4169 l
-2088 4170 l
-1956 4170 l
-1956 4170 m
-2085 4170 l
-2085 4171 l
-1956 4171 l
-1957 4171 m
-2083 4171 l
-2083 4172 l
-1957 4172 l
-1957 4172 m
-2080 4172 l
-2080 4173 l
-1957 4173 l
-1958 4173 m
-2078 4173 l
-2078 4174 l
-1958 4174 l
-1958 4174 m
-2075 4174 l
-2075 4175 l
-1958 4175 l
-1958 4175 m
-2073 4175 l
-2073 4176 l
-1958 4176 l
-1959 4176 m
-2070 4176 l
-2070 4177 l
-1959 4177 l
-1959 4177 m
-2068 4177 l
-2068 4178 l
-1959 4178 l
-1959 4178 m
-2065 4178 l
-2065 4179 l
-1959 4179 l
-1960 4179 m
-2063 4179 l
-2063 4180 l
-1960 4180 l
-1960 4180 m
-2060 4180 l
-2060 4181 l
-1960 4181 l
-1961 4181 m
-2058 4181 l
-2058 4182 l
-1961 4182 l
-1961 4182 m
-2055 4182 l
-2055 4183 l
-1961 4183 l
-1961 4183 m
-2053 4183 l
-2053 4184 l
-1961 4184 l
-1962 4184 m
-2050 4184 l
-2050 4185 l
-1962 4185 l
-1962 4185 m
-2048 4185 l
-2048 4186 l
-1962 4186 l
-1963 4186 m
-2045 4186 l
-2045 4187 l
-1963 4187 l
-1963 4187 m
-2043 4187 l
-2043 4188 l
-1963 4188 l
-1963 4188 m
-2040 4188 l
-2040 4189 l
-1963 4189 l
-1964 4189 m
-2038 4189 l
-2038 4190 l
-1964 4190 l
-1964 4190 m
-2035 4190 l
-2035 4191 l
-1964 4191 l
-1965 4191 m
-2033 4191 l
-2033 4192 l
-1965 4192 l
-1965 4192 m
-2030 4192 l
-2030 4193 l
-1965 4193 l
-1965 4193 m
-2027 4193 l
-2027 4194 l
-1965 4194 l
-1966 4194 m
-2025 4194 l
-2025 4195 l
-1966 4195 l
-1966 4195 m
-2022 4195 l
-2022 4196 l
-1966 4196 l
-1966 4196 m
-2020 4196 l
-2020 4197 l
-1966 4197 l
-1967 4197 m
-2017 4197 l
-2017 4198 l
-1967 4198 l
-1967 4198 m
-2015 4198 l
-2015 4199 l
-1967 4199 l
-1968 4199 m
-2012 4199 l
-2012 4200 l
-1968 4200 l
-1968 4200 m
-2010 4200 l
-2010 4201 l
-1968 4201 l
-1968 4201 m
-2007 4201 l
-2007 4202 l
-1968 4202 l
-1969 4202 m
-2005 4202 l
-2005 4203 l
-1969 4203 l
-1969 4203 m
-2002 4203 l
-2002 4204 l
-1969 4204 l
-1970 4204 m
-2000 4204 l
-2000 4205 l
-1970 4205 l
-1970 4205 m
-1997 4205 l
-1997 4206 l
-1970 4206 l
-1970 4206 m
-1995 4206 l
-1995 4207 l
-1970 4207 l
-1971 4207 m
-1992 4207 l
-1992 4208 l
-1971 4208 l
-1971 4208 m
-1990 4208 l
-1990 4209 l
-1971 4209 l
-1972 4209 m
-1987 4209 l
-1987 4210 l
-1972 4210 l
-1972 4210 m
-1985 4210 l
-1985 4211 l
-1972 4211 l
-1972 4211 m
-1982 4211 l
-1982 4212 l
-1972 4212 l
-1973 4212 m
-1980 4212 l
-1980 4213 l
-1973 4213 l
-1973 4213 m
-1977 4213 l
-1977 4214 l
-1973 4214 l
-Y
-2339.2 4069.2 m
-2295 3957 l
-1930 4101 l
-1974 4214 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2242 4027 m
-2250 4037 l
-2261 4042 l
-2274 4041 l
-2278 4040 l
-2288 4031 l
-2293 4020 l
-2292 4007 l
-2291 4003 l
-2282 3993 l
-2271 3988 l
-2258 3989 l
-2254 3991 l
-2244 3999 l
-2239 4010 l
-2242 4027 l
-2249 4046 l
-2261 4064 l
-2273 4073 l
-2286 4072 l
-2294 4069 l
-2304 4061 l
-2305 4051 l
-S
-2180 4020 m
-2194 4019 l
-2206 4028 l
-2217 4046 l
-2222 4057 l
-2226 4078 l
-2223 4093 l
-2213 4101 l
-2205 4104 l
-2192 4105 l
-2179 4097 l
-2168 4079 l
-2163 4067 l
-2159 4046 l
-2162 4031 l
-2173 4023 l
-2180 4020 l
-S
-2129 4072 m
-2134 4074 l
-2132 4079 l
-2127 4077 l
-2129 4072 l
-S
-2147 4118 m
-2153 4121 l
-2150 4126 l
-2145 4124 l
-2147 4118 l
-S
-2064 4066 m
-2077 4065 l
-2089 4074 l
-2101 4092 l
-2106 4103 l
-2109 4124 l
-2106 4139 l
-2096 4148 l
-2088 4151 l
-2075 4151 l
-2063 4143 l
-2051 4125 l
-2047 4113 l
-2043 4092 l
-2046 4078 l
-2056 4069 l
-2064 4066 l
-S
-1986 4097 m
-1999 4096 l
-2012 4105 l
-2023 4122 l
-2028 4134 l
-2032 4155 l
-2029 4170 l
-2018 4178 l
-2011 4181 l
-1998 4182 l
-1985 4173 l
-1974 4156 l
-1969 4144 l
-1965 4123 l
-1968 4108 l
-1978 4100 l
-1986 4097 l
-S
-1 g
-2732 3782 m
-2736 3782 l
-2736 3783 l
-2732 3783 l
-2729 3783 m
-2736 3783 l
-2736 3784 l
-2729 3784 l
-2727 3784 m
-2737 3784 l
-2737 3785 l
-2727 3785 l
-2724 3785 m
-2737 3785 l
-2737 3786 l
-2724 3786 l
-2722 3786 m
-2737 3786 l
-2737 3787 l
-2722 3787 l
-2719 3787 m
-2738 3787 l
-2738 3788 l
-2719 3788 l
-2717 3788 m
-2738 3788 l
-2738 3789 l
-2717 3789 l
-2714 3789 m
-2739 3789 l
-2739 3790 l
-2714 3790 l
-2712 3790 m
-2739 3790 l
-2739 3791 l
-2712 3791 l
-2709 3791 m
-2739 3791 l
-2739 3792 l
-2709 3792 l
-2707 3792 m
-2740 3792 l
-2740 3793 l
-2707 3793 l
-2704 3793 m
-2740 3793 l
-2740 3794 l
-2704 3794 l
-2702 3794 m
-2741 3794 l
-2741 3795 l
-2702 3795 l
-2699 3795 m
-2741 3795 l
-2741 3796 l
-2699 3796 l
-2697 3796 m
-2741 3796 l
-2741 3797 l
-2697 3797 l
-2694 3797 m
-2742 3797 l
-2742 3798 l
-2694 3798 l
-2692 3798 m
-2742 3798 l
-2742 3799 l
-2692 3799 l
-2689 3799 m
-2743 3799 l
-2743 3800 l
-2689 3800 l
-2687 3800 m
-2743 3800 l
-2743 3801 l
-2687 3801 l
-2684 3801 m
-2743 3801 l
-2743 3802 l
-2684 3802 l
-2682 3802 m
-2744 3802 l
-2744 3803 l
-2682 3803 l
-2679 3803 m
-2744 3803 l
-2744 3804 l
-2679 3804 l
-2677 3804 m
-2745 3804 l
-2745 3805 l
-2677 3805 l
-2674 3805 m
-2745 3805 l
-2745 3806 l
-2674 3806 l
-2672 3806 m
-2745 3806 l
-2745 3807 l
-2672 3807 l
-2669 3807 m
-2746 3807 l
-2746 3808 l
-2669 3808 l
-2667 3808 m
-2746 3808 l
-2746 3809 l
-2667 3809 l
-2664 3809 m
-2747 3809 l
-2747 3810 l
-2664 3810 l
-2662 3810 m
-2747 3810 l
-2747 3811 l
-2662 3811 l
-2659 3811 m
-2747 3811 l
-2747 3812 l
-2659 3812 l
-2657 3812 m
-2748 3812 l
-2748 3813 l
-2657 3813 l
-2654 3813 m
-2748 3813 l
-2748 3814 l
-2654 3814 l
-2652 3814 m
-2749 3814 l
-2749 3815 l
-2652 3815 l
-2649 3815 m
-2749 3815 l
-2749 3816 l
-2649 3816 l
-2646 3816 m
-2749 3816 l
-2749 3817 l
-2646 3817 l
-2644 3817 m
-2750 3817 l
-2750 3818 l
-2644 3818 l
-2641 3818 m
-2750 3818 l
-2750 3819 l
-2641 3819 l
-2639 3819 m
-2750 3819 l
-2750 3820 l
-2639 3820 l
-2636 3820 m
-2751 3820 l
-2751 3821 l
-2636 3821 l
-2634 3821 m
-2751 3821 l
-2751 3822 l
-2634 3822 l
-2631 3822 m
-2752 3822 l
-2752 3823 l
-2631 3823 l
-2629 3823 m
-2752 3823 l
-2752 3824 l
-2629 3824 l
-2626 3824 m
-2752 3824 l
-2752 3825 l
-2626 3825 l
-2624 3825 m
-2753 3825 l
-2753 3826 l
-2624 3826 l
-2621 3826 m
-2753 3826 l
-2753 3827 l
-2621 3827 l
-2619 3827 m
-2754 3827 l
-2754 3828 l
-2619 3828 l
-2616 3828 m
-2754 3828 l
-2754 3829 l
-2616 3829 l
-2614 3829 m
-2754 3829 l
-2754 3830 l
-2614 3830 l
-2611 3830 m
-2755 3830 l
-2755 3831 l
-2611 3831 l
-2609 3831 m
-2755 3831 l
-2755 3832 l
-2609 3832 l
-2606 3832 m
-2756 3832 l
-2756 3833 l
-2606 3833 l
-2604 3833 m
-2756 3833 l
-2756 3834 l
-2604 3834 l
-2601 3834 m
-2756 3834 l
-2756 3835 l
-2601 3835 l
-2599 3835 m
-2757 3835 l
-2757 3836 l
-2599 3836 l
-2596 3836 m
-2757 3836 l
-2757 3837 l
-2596 3837 l
-2594 3837 m
-2758 3837 l
-2758 3838 l
-2594 3838 l
-2591 3838 m
-2758 3838 l
-2758 3839 l
-2591 3839 l
-2589 3839 m
-2758 3839 l
-2758 3840 l
-2589 3840 l
-2586 3840 m
-2759 3840 l
-2759 3841 l
-2586 3841 l
-2584 3841 m
-2759 3841 l
-2759 3842 l
-2584 3842 l
-2581 3842 m
-2760 3842 l
-2760 3843 l
-2581 3843 l
-2579 3843 m
-2760 3843 l
-2760 3844 l
-2579 3844 l
-2576 3844 m
-2760 3844 l
-2760 3845 l
-2576 3845 l
-2574 3845 m
-2761 3845 l
-2761 3846 l
-2574 3846 l
-2571 3846 m
-2761 3846 l
-2761 3847 l
-2571 3847 l
-2569 3847 m
-2762 3847 l
-2762 3848 l
-2569 3848 l
-2566 3848 m
-2762 3848 l
-2762 3849 l
-2566 3849 l
-2564 3849 m
-2762 3849 l
-2762 3850 l
-2564 3850 l
-2564 3850 m
-2763 3850 l
-2763 3852 l
-2564 3852 l
-2564 3852 m
-2764 3852 l
-2764 3853 l
-2564 3853 l
-2565 3853 m
-2764 3853 l
-2764 3855 l
-2565 3855 l
-2566 3855 m
-2765 3855 l
-2765 3858 l
-2566 3858 l
-2567 3858 m
-2766 3858 l
-2766 3860 l
-2567 3860 l
-2568 3860 m
-2767 3860 l
-2767 3863 l
-2568 3863 l
-2569 3863 m
-2768 3863 l
-2768 3865 l
-2569 3865 l
-2570 3865 m
-2769 3865 l
-2769 3868 l
-2570 3868 l
-2571 3868 m
-2770 3868 l
-2770 3870 l
-2571 3870 l
-2572 3870 m
-2771 3870 l
-2771 3873 l
-2572 3873 l
-2573 3873 m
-2772 3873 l
-2772 3875 l
-2573 3875 l
-2574 3875 m
-2773 3875 l
-2773 3878 l
-2574 3878 l
-2575 3878 m
-2774 3878 l
-2774 3880 l
-2575 3880 l
-2576 3880 m
-2775 3880 l
-2775 3883 l
-2576 3883 l
-2577 3883 m
-2776 3883 l
-2776 3885 l
-2577 3885 l
-2578 3885 m
-2777 3885 l
-2777 3888 l
-2578 3888 l
-2579 3888 m
-2778 3888 l
-2778 3890 l
-2579 3890 l
-2580 3890 m
-2779 3890 l
-2779 3893 l
-2580 3893 l
-2581 3893 m
-2780 3893 l
-2780 3894 l
-2581 3894 l
-2581 3894 m
-2780 3894 l
-2780 3895 l
-2581 3895 l
-2582 3895 m
-2779 3895 l
-2779 3896 l
-2582 3896 l
-2582 3896 m
-2777 3896 l
-2777 3897 l
-2582 3897 l
-2582 3897 m
-2774 3897 l
-2774 3898 l
-2582 3898 l
-2583 3898 m
-2772 3898 l
-2772 3899 l
-2583 3899 l
-2583 3899 m
-2769 3899 l
-2769 3900 l
-2583 3900 l
-2584 3900 m
-2767 3900 l
-2767 3901 l
-2584 3901 l
-2584 3901 m
-2764 3901 l
-2764 3902 l
-2584 3902 l
-2584 3902 m
-2762 3902 l
-2762 3903 l
-2584 3903 l
-2585 3903 m
-2759 3903 l
-2759 3904 l
-2585 3904 l
-2585 3904 m
-2757 3904 l
-2757 3905 l
-2585 3905 l
-2586 3905 m
-2754 3905 l
-2754 3906 l
-2586 3906 l
-2586 3906 m
-2752 3906 l
-2752 3907 l
-2586 3907 l
-2586 3907 m
-2749 3907 l
-2749 3908 l
-2586 3908 l
-2587 3908 m
-2747 3908 l
-2747 3909 l
-2587 3909 l
-2587 3909 m
-2744 3909 l
-2744 3910 l
-2587 3910 l
-2588 3910 m
-2741 3910 l
-2741 3911 l
-2588 3911 l
-2588 3911 m
-2739 3911 l
-2739 3912 l
-2588 3912 l
-2588 3912 m
-2736 3912 l
-2736 3913 l
-2588 3913 l
-2589 3913 m
-2734 3913 l
-2734 3914 l
-2589 3914 l
-2589 3914 m
-2731 3914 l
-2731 3915 l
-2589 3915 l
-2590 3915 m
-2729 3915 l
-2729 3916 l
-2590 3916 l
-2590 3916 m
-2726 3916 l
-2726 3917 l
-2590 3917 l
-2590 3917 m
-2724 3917 l
-2724 3918 l
-2590 3918 l
-2591 3918 m
-2721 3918 l
-2721 3919 l
-2591 3919 l
-2591 3919 m
-2719 3919 l
-2719 3920 l
-2591 3920 l
-2592 3920 m
-2716 3920 l
-2716 3921 l
-2592 3921 l
-2592 3921 m
-2714 3921 l
-2714 3922 l
-2592 3922 l
-2592 3922 m
-2711 3922 l
-2711 3923 l
-2592 3923 l
-2593 3923 m
-2708 3923 l
-2708 3924 l
-2593 3924 l
-2593 3924 m
-2706 3924 l
-2706 3925 l
-2593 3925 l
-2594 3925 m
-2703 3925 l
-2703 3926 l
-2594 3926 l
-2594 3926 m
-2701 3926 l
-2701 3927 l
-2594 3927 l
-2594 3927 m
-2698 3927 l
-2698 3928 l
-2594 3928 l
-2595 3928 m
-2696 3928 l
-2696 3929 l
-2595 3929 l
-2595 3929 m
-2693 3929 l
-2693 3930 l
-2595 3930 l
-2596 3930 m
-2691 3930 l
-2691 3931 l
-2596 3931 l
-2596 3931 m
-2688 3931 l
-2688 3932 l
-2596 3932 l
-2596 3932 m
-2686 3932 l
-2686 3933 l
-2596 3933 l
-2597 3933 m
-2683 3933 l
-2683 3934 l
-2597 3934 l
-2597 3934 m
-2681 3934 l
-2681 3935 l
-2597 3935 l
-2598 3935 m
-2678 3935 l
-2678 3936 l
-2598 3936 l
-2598 3936 m
-2675 3936 l
-2675 3937 l
-2598 3937 l
-2598 3937 m
-2673 3937 l
-2673 3938 l
-2598 3938 l
-2599 3938 m
-2670 3938 l
-2670 3939 l
-2599 3939 l
-2599 3939 m
-2668 3939 l
-2668 3940 l
-2599 3940 l
-2600 3940 m
-2665 3940 l
-2665 3941 l
-2600 3941 l
-2600 3941 m
-2663 3941 l
-2663 3942 l
-2600 3942 l
-2600 3942 m
-2660 3942 l
-2660 3943 l
-2600 3943 l
-2601 3943 m
-2658 3943 l
-2658 3944 l
-2601 3944 l
-2601 3944 m
-2655 3944 l
-2655 3945 l
-2601 3945 l
-2602 3945 m
-2653 3945 l
-2653 3946 l
-2602 3946 l
-2602 3946 m
-2650 3946 l
-2650 3947 l
-2602 3947 l
-2602 3947 m
-2648 3947 l
-2648 3948 l
-2602 3948 l
-2603 3948 m
-2645 3948 l
-2645 3949 l
-2603 3949 l
-2603 3949 m
-2642 3949 l
-2642 3950 l
-2603 3950 l
-2604 3950 m
-2640 3950 l
-2640 3951 l
-2604 3951 l
-2604 3951 m
-2637 3951 l
-2637 3952 l
-2604 3952 l
-2604 3952 m
-2635 3952 l
-2635 3953 l
-2604 3953 l
-2605 3953 m
-2632 3953 l
-2632 3954 l
-2605 3954 l
-2605 3954 m
-2630 3954 l
-2630 3955 l
-2605 3955 l
-2606 3955 m
-2627 3955 l
-2627 3956 l
-2606 3956 l
-2606 3956 m
-2625 3956 l
-2625 3957 l
-2606 3957 l
-2606 3957 m
-2622 3957 l
-2622 3958 l
-2606 3958 l
-2607 3958 m
-2620 3958 l
-2620 3959 l
-2607 3959 l
-2607 3959 m
-2617 3959 l
-2617 3960 l
-2607 3960 l
-2608 3960 m
-2615 3960 l
-2615 3961 l
-2608 3961 l
-2608 3961 m
-2612 3961 l
-2612 3962 l
-2608 3962 l
-Y
-2779.5 3894.8 m
-2735 3782 l
-2564 3850 l
-2609 3962 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2675 3824 m
-2714 3808 l
-2732 3842 l
-2726 3840 l
-2713 3840 l
-2701 3845 l
-2691 3853 l
-2687 3864 l
-2687 3877 l
-2690 3885 l
-2699 3895 l
-2710 3900 l
-2723 3899 l
-2735 3895 l
-2745 3886 l
-2747 3881 l
-2748 3871 l
-S
-2625 3844 m
-2638 3843 l
-2645 3849 l
-2648 3857 l
-2647 3866 l
-2641 3873 l
-2627 3883 l
-2617 3892 l
-2612 3903 l
-2611 3912 l
-2616 3924 l
-2623 3930 l
-2628 3932 l
-2641 3932 l
-2657 3925 l
-2667 3917 l
-2669 3911 l
-2670 3902 l
-2666 3891 l
-2659 3884 l
-2648 3880 l
-2635 3880 l
-2617 3883 l
-2608 3882 l
-2601 3876 l
-2598 3868 l
-2599 3858 l
-2609 3850 l
-2625 3844 l
-S
-1 g
-3269 3569 m
-3273 3569 l
-3273 3570 l
-3269 3570 l
-3267 3570 m
-3273 3570 l
-3273 3571 l
-3267 3571 l
-3264 3571 m
-3274 3571 l
-3274 3572 l
-3264 3572 l
-3262 3572 m
-3274 3572 l
-3274 3573 l
-3262 3573 l
-3259 3573 m
-3274 3573 l
-3274 3574 l
-3259 3574 l
-3257 3574 m
-3275 3574 l
-3275 3575 l
-3257 3575 l
-3254 3575 m
-3275 3575 l
-3275 3576 l
-3254 3576 l
-3252 3576 m
-3276 3576 l
-3276 3577 l
-3252 3577 l
-3249 3577 m
-3276 3577 l
-3276 3578 l
-3249 3578 l
-3247 3578 m
-3276 3578 l
-3276 3579 l
-3247 3579 l
-3244 3579 m
-3277 3579 l
-3277 3580 l
-3244 3580 l
-3242 3580 m
-3277 3580 l
-3277 3581 l
-3242 3581 l
-3239 3581 m
-3278 3581 l
-3278 3582 l
-3239 3582 l
-3237 3582 m
-3278 3582 l
-3278 3583 l
-3237 3583 l
-3234 3583 m
-3278 3583 l
-3278 3584 l
-3234 3584 l
-3232 3584 m
-3279 3584 l
-3279 3585 l
-3232 3585 l
-3229 3585 m
-3279 3585 l
-3279 3586 l
-3229 3586 l
-3227 3586 m
-3280 3586 l
-3280 3587 l
-3227 3587 l
-3224 3587 m
-3280 3587 l
-3280 3588 l
-3224 3588 l
-3222 3588 m
-3280 3588 l
-3280 3589 l
-3222 3589 l
-3219 3589 m
-3281 3589 l
-3281 3590 l
-3219 3590 l
-3217 3590 m
-3281 3590 l
-3281 3591 l
-3217 3591 l
-3214 3591 m
-3282 3591 l
-3282 3592 l
-3214 3592 l
-3212 3592 m
-3282 3592 l
-3282 3593 l
-3212 3593 l
-3209 3593 m
-3282 3593 l
-3282 3594 l
-3209 3594 l
-3207 3594 m
-3283 3594 l
-3283 3595 l
-3207 3595 l
-3204 3595 m
-3283 3595 l
-3283 3596 l
-3204 3596 l
-3202 3596 m
-3284 3596 l
-3284 3597 l
-3202 3597 l
-3199 3597 m
-3284 3597 l
-3284 3598 l
-3199 3598 l
-3197 3598 m
-3284 3598 l
-3284 3599 l
-3197 3599 l
-3194 3599 m
-3285 3599 l
-3285 3600 l
-3194 3600 l
-3192 3600 m
-3285 3600 l
-3285 3601 l
-3192 3601 l
-3189 3601 m
-3286 3601 l
-3286 3602 l
-3189 3602 l
-3187 3602 m
-3286 3602 l
-3286 3603 l
-3187 3603 l
-3184 3603 m
-3286 3603 l
-3286 3604 l
-3184 3604 l
-3182 3604 m
-3287 3604 l
-3287 3605 l
-3182 3605 l
-3179 3605 m
-3287 3605 l
-3287 3606 l
-3179 3606 l
-3177 3606 m
-3288 3606 l
-3288 3607 l
-3177 3607 l
-3174 3607 m
-3288 3607 l
-3288 3608 l
-3174 3608 l
-3172 3608 m
-3288 3608 l
-3288 3609 l
-3172 3609 l
-3169 3609 m
-3289 3609 l
-3289 3610 l
-3169 3610 l
-3167 3610 m
-3289 3610 l
-3289 3611 l
-3167 3611 l
-3164 3611 m
-3290 3611 l
-3290 3612 l
-3164 3612 l
-3162 3612 m
-3290 3612 l
-3290 3613 l
-3162 3613 l
-3159 3613 m
-3290 3613 l
-3290 3614 l
-3159 3614 l
-3157 3614 m
-3291 3614 l
-3291 3615 l
-3157 3615 l
-3154 3615 m
-3291 3615 l
-3291 3616 l
-3154 3616 l
-3152 3616 m
-3292 3616 l
-3292 3617 l
-3152 3617 l
-3149 3617 m
-3292 3617 l
-3292 3618 l
-3149 3618 l
-3147 3618 m
-3292 3618 l
-3292 3619 l
-3147 3619 l
-3144 3619 m
-3293 3619 l
-3293 3620 l
-3144 3620 l
-3142 3620 m
-3293 3620 l
-3293 3621 l
-3142 3621 l
-3139 3621 m
-3294 3621 l
-3294 3622 l
-3139 3622 l
-3137 3622 m
-3294 3622 l
-3294 3623 l
-3137 3623 l
-3134 3623 m
-3294 3623 l
-3294 3624 l
-3134 3624 l
-3132 3624 m
-3295 3624 l
-3295 3625 l
-3132 3625 l
-3129 3625 m
-3295 3625 l
-3295 3626 l
-3129 3626 l
-3127 3626 m
-3296 3626 l
-3296 3627 l
-3127 3627 l
-3124 3627 m
-3296 3627 l
-3296 3628 l
-3124 3628 l
-3122 3628 m
-3296 3628 l
-3296 3629 l
-3122 3629 l
-3119 3629 m
-3297 3629 l
-3297 3630 l
-3119 3630 l
-3117 3630 m
-3297 3630 l
-3297 3631 l
-3117 3631 l
-3114 3631 m
-3298 3631 l
-3298 3632 l
-3114 3632 l
-3112 3632 m
-3298 3632 l
-3298 3633 l
-3112 3633 l
-3109 3633 m
-3298 3633 l
-3298 3634 l
-3109 3634 l
-3107 3634 m
-3299 3634 l
-3299 3635 l
-3107 3635 l
-3104 3635 m
-3299 3635 l
-3299 3636 l
-3104 3636 l
-3102 3636 m
-3300 3636 l
-3300 3637 l
-3102 3637 l
-3102 3637 m
-3300 3637 l
-3300 3639 l
-3102 3639 l
-3102 3639 m
-3301 3639 l
-3301 3640 l
-3102 3640 l
-3103 3640 m
-3301 3640 l
-3301 3641 l
-3103 3641 l
-3103 3641 m
-3302 3641 l
-3302 3643 l
-3103 3643 l
-3104 3643 m
-3302 3643 l
-3302 3644 l
-3104 3644 l
-3104 3644 m
-3303 3644 l
-3303 3645 l
-3104 3645 l
-3105 3645 m
-3303 3645 l
-3303 3646 l
-3105 3646 l
-3105 3646 m
-3304 3646 l
-3304 3648 l
-3105 3648 l
-3106 3648 m
-3304 3648 l
-3304 3649 l
-3106 3649 l
-3106 3649 m
-3305 3649 l
-3305 3650 l
-3106 3650 l
-3107 3650 m
-3305 3650 l
-3305 3651 l
-3107 3651 l
-3107 3651 m
-3306 3651 l
-3306 3653 l
-3107 3653 l
-3108 3653 m
-3306 3653 l
-3306 3654 l
-3108 3654 l
-3108 3654 m
-3307 3654 l
-3307 3655 l
-3108 3655 l
-3109 3655 m
-3307 3655 l
-3307 3656 l
-3109 3656 l
-3109 3656 m
-3308 3656 l
-3308 3658 l
-3109 3658 l
-3110 3658 m
-3308 3658 l
-3308 3659 l
-3110 3659 l
-3110 3659 m
-3309 3659 l
-3309 3661 l
-3110 3661 l
-3111 3661 m
-3310 3661 l
-3310 3663 l
-3111 3663 l
-3112 3663 m
-3310 3663 l
-3310 3664 l
-3112 3664 l
-3112 3664 m
-3311 3664 l
-3311 3666 l
-3112 3666 l
-3113 3666 m
-3312 3666 l
-3312 3668 l
-3113 3668 l
-3114 3668 m
-3312 3668 l
-3312 3669 l
-3114 3669 l
-3114 3669 m
-3313 3669 l
-3313 3671 l
-3114 3671 l
-3115 3671 m
-3314 3671 l
-3314 3673 l
-3115 3673 l
-3116 3673 m
-3314 3673 l
-3314 3674 l
-3116 3674 l
-3116 3674 m
-3315 3674 l
-3315 3676 l
-3116 3676 l
-3117 3676 m
-3316 3676 l
-3316 3679 l
-3117 3679 l
-3118 3679 m
-3317 3679 l
-3317 3681 l
-3118 3681 l
-3119 3681 m
-3317 3681 l
-3317 3682 l
-3119 3682 l
-3119 3682 m
-3317 3682 l
-3317 3683 l
-3119 3683 l
-3119 3683 m
-3315 3683 l
-3315 3684 l
-3119 3684 l
-3120 3684 m
-3312 3684 l
-3312 3685 l
-3120 3685 l
-3120 3685 m
-3310 3685 l
-3310 3686 l
-3120 3686 l
-3121 3686 m
-3307 3686 l
-3307 3687 l
-3121 3687 l
-3121 3687 m
-3305 3687 l
-3305 3688 l
-3121 3688 l
-3121 3688 m
-3302 3688 l
-3302 3689 l
-3121 3689 l
-3122 3689 m
-3300 3689 l
-3300 3690 l
-3122 3690 l
-3122 3690 m
-3297 3690 l
-3297 3691 l
-3122 3691 l
-3123 3691 m
-3295 3691 l
-3295 3692 l
-3123 3692 l
-3123 3692 m
-3292 3692 l
-3292 3693 l
-3123 3693 l
-3123 3693 m
-3290 3693 l
-3290 3694 l
-3123 3694 l
-3124 3694 m
-3287 3694 l
-3287 3695 l
-3124 3695 l
-3124 3695 m
-3285 3695 l
-3285 3696 l
-3124 3696 l
-3124 3696 m
-3282 3696 l
-3282 3697 l
-3124 3697 l
-3125 3697 m
-3280 3697 l
-3280 3698 l
-3125 3698 l
-3125 3698 m
-3277 3698 l
-3277 3699 l
-3125 3699 l
-3126 3699 m
-3275 3699 l
-3275 3700 l
-3126 3700 l
-3126 3700 m
-3272 3700 l
-3272 3701 l
-3126 3701 l
-3126 3701 m
-3270 3701 l
-3270 3702 l
-3126 3702 l
-3127 3702 m
-3267 3702 l
-3267 3703 l
-3127 3703 l
-3127 3703 m
-3265 3703 l
-3265 3704 l
-3127 3704 l
-3128 3704 m
-3262 3704 l
-3262 3705 l
-3128 3705 l
-3128 3705 m
-3259 3705 l
-3259 3706 l
-3128 3706 l
-3128 3706 m
-3257 3706 l
-3257 3707 l
-3128 3707 l
-3129 3707 m
-3254 3707 l
-3254 3708 l
-3129 3708 l
-3129 3708 m
-3252 3708 l
-3252 3709 l
-3129 3709 l
-3130 3709 m
-3249 3709 l
-3249 3710 l
-3130 3710 l
-3130 3710 m
-3247 3710 l
-3247 3711 l
-3130 3711 l
-3130 3711 m
-3244 3711 l
-3244 3712 l
-3130 3712 l
-3131 3712 m
-3242 3712 l
-3242 3713 l
-3131 3713 l
-3131 3713 m
-3239 3713 l
-3239 3714 l
-3131 3714 l
-3131 3714 m
-3237 3714 l
-3237 3715 l
-3131 3715 l
-3132 3715 m
-3234 3715 l
-3234 3716 l
-3132 3716 l
-3132 3716 m
-3232 3716 l
-3232 3717 l
-3132 3717 l
-3133 3717 m
-3229 3717 l
-3229 3718 l
-3133 3718 l
-3133 3718 m
-3227 3718 l
-3227 3719 l
-3133 3719 l
-3133 3719 m
-3224 3719 l
-3224 3720 l
-3133 3720 l
-3134 3720 m
-3222 3720 l
-3222 3721 l
-3134 3721 l
-3134 3721 m
-3219 3721 l
-3219 3722 l
-3134 3722 l
-3135 3722 m
-3217 3722 l
-3217 3723 l
-3135 3723 l
-3135 3723 m
-3214 3723 l
-3214 3724 l
-3135 3724 l
-3135 3724 m
-3212 3724 l
-3212 3725 l
-3135 3725 l
-3136 3725 m
-3209 3725 l
-3209 3726 l
-3136 3726 l
-3136 3726 m
-3207 3726 l
-3207 3727 l
-3136 3727 l
-3137 3727 m
-3204 3727 l
-3204 3728 l
-3137 3728 l
-3137 3728 m
-3202 3728 l
-3202 3729 l
-3137 3729 l
-3137 3729 m
-3199 3729 l
-3199 3730 l
-3137 3730 l
-3138 3730 m
-3197 3730 l
-3197 3731 l
-3138 3731 l
-3138 3731 m
-3194 3731 l
-3194 3732 l
-3138 3732 l
-3138 3732 m
-3192 3732 l
-3192 3733 l
-3138 3733 l
-3139 3733 m
-3189 3733 l
-3189 3734 l
-3139 3734 l
-3139 3734 m
-3187 3734 l
-3187 3735 l
-3139 3735 l
-3140 3735 m
-3184 3735 l
-3184 3736 l
-3140 3736 l
-3140 3736 m
-3182 3736 l
-3182 3737 l
-3140 3737 l
-3140 3737 m
-3179 3737 l
-3179 3738 l
-3140 3738 l
-3141 3738 m
-3177 3738 l
-3177 3739 l
-3141 3739 l
-3141 3739 m
-3174 3739 l
-3174 3740 l
-3141 3740 l
-3142 3740 m
-3172 3740 l
-3172 3741 l
-3142 3741 l
-3142 3741 m
-3169 3741 l
-3169 3742 l
-3142 3742 l
-3142 3742 m
-3167 3742 l
-3167 3743 l
-3142 3743 l
-3143 3743 m
-3164 3743 l
-3164 3744 l
-3143 3744 l
-3143 3744 m
-3162 3744 l
-3162 3745 l
-3143 3745 l
-3144 3745 m
-3159 3745 l
-3159 3746 l
-3144 3746 l
-3144 3746 m
-3157 3746 l
-3157 3747 l
-3144 3747 l
-3144 3747 m
-3154 3747 l
-3154 3748 l
-3144 3748 l
-3145 3748 m
-3152 3748 l
-3152 3749 l
-3145 3749 l
-3145 3749 m
-3149 3749 l
-3149 3750 l
-3145 3750 l
-Y
-3317 3681.9 m
-3272 3569 l
-3102 3637 l
-3146 3750 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3213 3611 m
-3251 3596 l
-3269 3629 l
-3264 3627 l
-3250 3627 l
-3239 3632 l
-3229 3640 l
-3224 3651 l
-3225 3665 l
-3228 3672 l
-3236 3682 l
-3247 3687 l
-3260 3686 l
-3272 3682 l
-3282 3673 l
-3284 3668 l
-3285 3659 l
-S
-3136 3655 m
-3136 3646 l
-3147 3637 l
-3154 3634 l
-3167 3633 l
-3180 3642 l
-3191 3660 l
-3199 3679 l
-3201 3696 l
-3197 3707 l
-3187 3716 l
-3183 3717 l
-3170 3718 l
-3159 3713 l
-3150 3703 l
-3149 3699 l
-3148 3686 l
-3153 3675 l
-3163 3667 l
-3167 3665 l
-3180 3664 l
-3191 3669 l
-3199 3679 l
-S
-1 g
-4344 3144 m
-4348 3144 l
-4348 3145 l
-4344 3145 l
-4341 3145 m
-4348 3145 l
-4348 3146 l
-4341 3146 l
-4339 3146 m
-4349 3146 l
-4349 3147 l
-4339 3147 l
-4336 3147 m
-4349 3147 l
-4349 3148 l
-4336 3148 l
-4334 3148 m
-4350 3148 l
-4350 3149 l
-4334 3149 l
-4331 3149 m
-4350 3149 l
-4350 3150 l
-4331 3150 l
-4329 3150 m
-4350 3150 l
-4350 3151 l
-4329 3151 l
-4326 3151 m
-4351 3151 l
-4351 3152 l
-4326 3152 l
-4324 3152 m
-4351 3152 l
-4351 3153 l
-4324 3153 l
-4321 3153 m
-4352 3153 l
-4352 3154 l
-4321 3154 l
-4319 3154 m
-4352 3154 l
-4352 3155 l
-4319 3155 l
-4316 3155 m
-4352 3155 l
-4352 3156 l
-4316 3156 l
-4314 3156 m
-4353 3156 l
-4353 3157 l
-4314 3157 l
-4311 3157 m
-4353 3157 l
-4353 3158 l
-4311 3158 l
-4308 3158 m
-4354 3158 l
-4354 3159 l
-4308 3159 l
-4306 3159 m
-4354 3159 l
-4354 3160 l
-4306 3160 l
-4303 3160 m
-4354 3160 l
-4354 3161 l
-4303 3161 l
-4301 3161 m
-4355 3161 l
-4355 3162 l
-4301 3162 l
-4298 3162 m
-4355 3162 l
-4355 3163 l
-4298 3163 l
-4296 3163 m
-4356 3163 l
-4356 3164 l
-4296 3164 l
-4293 3164 m
-4356 3164 l
-4356 3165 l
-4293 3165 l
-4291 3165 m
-4356 3165 l
-4356 3166 l
-4291 3166 l
-4288 3166 m
-4357 3166 l
-4357 3167 l
-4288 3167 l
-4286 3167 m
-4357 3167 l
-4357 3168 l
-4286 3168 l
-4283 3168 m
-4358 3168 l
-4358 3169 l
-4283 3169 l
-4281 3169 m
-4358 3169 l
-4358 3170 l
-4281 3170 l
-4278 3170 m
-4358 3170 l
-4358 3171 l
-4278 3171 l
-4275 3171 m
-4359 3171 l
-4359 3172 l
-4275 3172 l
-4273 3172 m
-4359 3172 l
-4359 3173 l
-4273 3173 l
-4270 3173 m
-4360 3173 l
-4360 3174 l
-4270 3174 l
-4268 3174 m
-4360 3174 l
-4360 3175 l
-4268 3175 l
-4265 3175 m
-4360 3175 l
-4360 3176 l
-4265 3176 l
-4263 3176 m
-4361 3176 l
-4361 3177 l
-4263 3177 l
-4260 3177 m
-4361 3177 l
-4361 3178 l
-4260 3178 l
-4258 3178 m
-4362 3178 l
-4362 3179 l
-4258 3179 l
-4255 3179 m
-4362 3179 l
-4362 3180 l
-4255 3180 l
-4253 3180 m
-4362 3180 l
-4362 3181 l
-4253 3181 l
-4250 3181 m
-4363 3181 l
-4363 3182 l
-4250 3182 l
-4248 3182 m
-4363 3182 l
-4363 3183 l
-4248 3183 l
-4245 3183 m
-4364 3183 l
-4364 3184 l
-4245 3184 l
-4242 3184 m
-4364 3184 l
-4364 3185 l
-4242 3185 l
-4240 3185 m
-4364 3185 l
-4364 3186 l
-4240 3186 l
-4237 3186 m
-4365 3186 l
-4365 3187 l
-4237 3187 l
-4235 3187 m
-4365 3187 l
-4365 3188 l
-4235 3188 l
-4232 3188 m
-4366 3188 l
-4366 3189 l
-4232 3189 l
-4230 3189 m
-4366 3189 l
-4366 3190 l
-4230 3190 l
-4227 3190 m
-4366 3190 l
-4366 3191 l
-4227 3191 l
-4225 3191 m
-4367 3191 l
-4367 3192 l
-4225 3192 l
-4222 3192 m
-4367 3192 l
-4367 3193 l
-4222 3193 l
-4220 3193 m
-4368 3193 l
-4368 3194 l
-4220 3194 l
-4217 3194 m
-4368 3194 l
-4368 3195 l
-4217 3195 l
-4215 3195 m
-4368 3195 l
-4368 3196 l
-4215 3196 l
-4212 3196 m
-4369 3196 l
-4369 3197 l
-4212 3197 l
-4209 3197 m
-4369 3197 l
-4369 3198 l
-4209 3198 l
-4207 3198 m
-4370 3198 l
-4370 3199 l
-4207 3199 l
-4204 3199 m
-4370 3199 l
-4370 3200 l
-4204 3200 l
-4202 3200 m
-4370 3200 l
-4370 3201 l
-4202 3201 l
-4199 3201 m
-4371 3201 l
-4371 3202 l
-4199 3202 l
-4197 3202 m
-4371 3202 l
-4371 3203 l
-4197 3203 l
-4194 3203 m
-4372 3203 l
-4372 3204 l
-4194 3204 l
-4192 3204 m
-4372 3204 l
-4372 3205 l
-4192 3205 l
-4189 3205 m
-4372 3205 l
-4372 3206 l
-4189 3206 l
-4187 3206 m
-4373 3206 l
-4373 3207 l
-4187 3207 l
-4184 3207 m
-4373 3207 l
-4373 3208 l
-4184 3208 l
-4182 3208 m
-4374 3208 l
-4374 3209 l
-4182 3209 l
-4179 3209 m
-4374 3209 l
-4374 3210 l
-4179 3210 l
-4177 3210 m
-4374 3210 l
-4374 3211 l
-4177 3211 l
-4177 3211 m
-4375 3211 l
-4375 3213 l
-4177 3213 l
-4177 3213 m
-4376 3213 l
-4376 3214 l
-4177 3214 l
-4178 3214 m
-4376 3214 l
-4376 3216 l
-4178 3216 l
-4178 3216 m
-4377 3216 l
-4377 3217 l
-4178 3217 l
-4179 3217 m
-4377 3217 l
-4377 3218 l
-4179 3218 l
-4179 3218 m
-4378 3218 l
-4378 3219 l
-4179 3219 l
-4180 3219 m
-4378 3219 l
-4378 3221 l
-4180 3221 l
-4180 3221 m
-4379 3221 l
-4379 3222 l
-4180 3222 l
-4181 3222 m
-4379 3222 l
-4379 3223 l
-4181 3223 l
-4181 3223 m
-4380 3223 l
-4380 3224 l
-4181 3224 l
-4182 3224 m
-4380 3224 l
-4380 3226 l
-4182 3226 l
-4182 3226 m
-4381 3226 l
-4381 3227 l
-4182 3227 l
-4183 3227 m
-4381 3227 l
-4381 3228 l
-4183 3228 l
-4183 3228 m
-4382 3228 l
-4382 3229 l
-4183 3229 l
-4184 3229 m
-4382 3229 l
-4382 3231 l
-4184 3231 l
-4184 3231 m
-4383 3231 l
-4383 3232 l
-4184 3232 l
-4185 3232 m
-4383 3232 l
-4383 3233 l
-4185 3233 l
-4185 3233 m
-4384 3233 l
-4384 3235 l
-4185 3235 l
-4186 3235 m
-4384 3235 l
-4384 3236 l
-4186 3236 l
-4186 3236 m
-4385 3236 l
-4385 3237 l
-4186 3237 l
-4187 3237 m
-4385 3237 l
-4385 3238 l
-4187 3238 l
-4187 3238 m
-4386 3238 l
-4386 3240 l
-4187 3240 l
-4188 3240 m
-4386 3240 l
-4386 3241 l
-4188 3241 l
-4188 3241 m
-4387 3241 l
-4387 3242 l
-4188 3242 l
-4189 3242 m
-4387 3242 l
-4387 3243 l
-4189 3243 l
-4189 3243 m
-4388 3243 l
-4388 3245 l
-4189 3245 l
-4190 3245 m
-4388 3245 l
-4388 3246 l
-4190 3246 l
-4190 3246 m
-4389 3246 l
-4389 3247 l
-4190 3247 l
-4191 3247 m
-4389 3247 l
-4389 3248 l
-4191 3248 l
-4191 3248 m
-4390 3248 l
-4390 3250 l
-4191 3250 l
-4192 3250 m
-4390 3250 l
-4390 3251 l
-4192 3251 l
-4192 3251 m
-4391 3251 l
-4391 3253 l
-4192 3253 l
-4193 3253 m
-4392 3253 l
-4392 3255 l
-4193 3255 l
-4194 3255 m
-4392 3255 l
-4392 3256 l
-4194 3256 l
-4194 3256 m
-4392 3256 l
-4392 3257 l
-4194 3257 l
-4194 3257 m
-4390 3257 l
-4390 3258 l
-4194 3258 l
-4195 3258 m
-4388 3258 l
-4388 3259 l
-4195 3259 l
-4195 3259 m
-4385 3259 l
-4385 3260 l
-4195 3260 l
-4196 3260 m
-4383 3260 l
-4383 3261 l
-4196 3261 l
-4196 3261 m
-4380 3261 l
-4380 3262 l
-4196 3262 l
-4196 3262 m
-4378 3262 l
-4378 3263 l
-4196 3263 l
-4197 3263 m
-4375 3263 l
-4375 3264 l
-4197 3264 l
-4197 3264 m
-4373 3264 l
-4373 3265 l
-4197 3265 l
-4198 3265 m
-4370 3265 l
-4370 3266 l
-4198 3266 l
-4198 3266 m
-4368 3266 l
-4368 3267 l
-4198 3267 l
-4198 3267 m
-4365 3267 l
-4365 3268 l
-4198 3268 l
-4199 3268 m
-4363 3268 l
-4363 3269 l
-4199 3269 l
-4199 3269 m
-4360 3269 l
-4360 3270 l
-4199 3270 l
-4199 3270 m
-4357 3270 l
-4357 3271 l
-4199 3271 l
-4200 3271 m
-4355 3271 l
-4355 3272 l
-4200 3272 l
-4200 3272 m
-4352 3272 l
-4352 3273 l
-4200 3273 l
-4201 3273 m
-4350 3273 l
-4350 3274 l
-4201 3274 l
-4201 3274 m
-4347 3274 l
-4347 3275 l
-4201 3275 l
-4201 3275 m
-4345 3275 l
-4345 3276 l
-4201 3276 l
-4202 3276 m
-4342 3276 l
-4342 3277 l
-4202 3277 l
-4202 3277 m
-4340 3277 l
-4340 3278 l
-4202 3278 l
-4203 3278 m
-4337 3278 l
-4337 3279 l
-4203 3279 l
-4203 3279 m
-4335 3279 l
-4335 3280 l
-4203 3280 l
-4203 3280 m
-4332 3280 l
-4332 3281 l
-4203 3281 l
-4204 3281 m
-4330 3281 l
-4330 3282 l
-4204 3282 l
-4204 3282 m
-4327 3282 l
-4327 3283 l
-4204 3283 l
-4205 3283 m
-4325 3283 l
-4325 3284 l
-4205 3284 l
-4205 3284 m
-4322 3284 l
-4322 3285 l
-4205 3285 l
-4205 3285 m
-4320 3285 l
-4320 3286 l
-4205 3286 l
-4206 3286 m
-4317 3286 l
-4317 3287 l
-4206 3287 l
-4206 3287 m
-4315 3287 l
-4315 3288 l
-4206 3288 l
-4206 3288 m
-4312 3288 l
-4312 3289 l
-4206 3289 l
-4207 3289 m
-4310 3289 l
-4310 3290 l
-4207 3290 l
-4207 3290 m
-4307 3290 l
-4307 3291 l
-4207 3291 l
-4208 3291 m
-4305 3291 l
-4305 3292 l
-4208 3292 l
-4208 3292 m
-4302 3292 l
-4302 3293 l
-4208 3293 l
-4208 3293 m
-4300 3293 l
-4300 3294 l
-4208 3294 l
-4209 3294 m
-4297 3294 l
-4297 3295 l
-4209 3295 l
-4209 3295 m
-4295 3295 l
-4295 3296 l
-4209 3296 l
-4210 3296 m
-4292 3296 l
-4292 3297 l
-4210 3297 l
-4210 3297 m
-4289 3297 l
-4289 3298 l
-4210 3298 l
-4210 3298 m
-4287 3298 l
-4287 3299 l
-4210 3299 l
-4211 3299 m
-4284 3299 l
-4284 3300 l
-4211 3300 l
-4211 3300 m
-4282 3300 l
-4282 3301 l
-4211 3301 l
-4212 3301 m
-4279 3301 l
-4279 3302 l
-4212 3302 l
-4212 3302 m
-4277 3302 l
-4277 3303 l
-4212 3303 l
-4212 3303 m
-4274 3303 l
-4274 3304 l
-4212 3304 l
-4213 3304 m
-4272 3304 l
-4272 3305 l
-4213 3305 l
-4213 3305 m
-4269 3305 l
-4269 3306 l
-4213 3306 l
-4213 3306 m
-4267 3306 l
-4267 3307 l
-4213 3307 l
-4214 3307 m
-4264 3307 l
-4264 3308 l
-4214 3308 l
-4214 3308 m
-4262 3308 l
-4262 3309 l
-4214 3309 l
-4215 3309 m
-4259 3309 l
-4259 3310 l
-4215 3310 l
-4215 3310 m
-4257 3310 l
-4257 3311 l
-4215 3311 l
-4215 3311 m
-4254 3311 l
-4254 3312 l
-4215 3312 l
-4216 3312 m
-4252 3312 l
-4252 3313 l
-4216 3313 l
-4216 3313 m
-4249 3313 l
-4249 3314 l
-4216 3314 l
-4217 3314 m
-4247 3314 l
-4247 3315 l
-4217 3315 l
-4217 3315 m
-4244 3315 l
-4244 3316 l
-4217 3316 l
-4217 3316 m
-4242 3316 l
-4242 3317 l
-4217 3317 l
-4218 3317 m
-4239 3317 l
-4239 3318 l
-4218 3318 l
-4218 3318 m
-4237 3318 l
-4237 3319 l
-4218 3319 l
-4219 3319 m
-4234 3319 l
-4234 3320 l
-4219 3320 l
-4219 3320 m
-4232 3320 l
-4232 3321 l
-4219 3321 l
-4219 3321 m
-4229 3321 l
-4229 3322 l
-4219 3322 l
-4220 3322 m
-4227 3322 l
-4227 3323 l
-4220 3323 l
-4220 3323 m
-4224 3323 l
-4224 3324 l
-4220 3324 l
-Y
-4392 3256.1 m
-4347 3144 l
-4177 3211 l
-4221 3324 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4288 3185 m
-4326 3170 l
-4344 3203 l
-4339 3201 l
-4325 3202 l
-4314 3206 l
-4304 3215 l
-4299 3226 l
-4300 3239 l
-4303 3247 l
-4311 3257 l
-4322 3261 l
-4335 3261 l
-4347 3256 l
-4357 3247 l
-4359 3242 l
-4360 3233 l
-S
-4260 3218 m
-4259 3215 l
-4252 3208 l
-4246 3206 l
-4237 3205 l
-4221 3211 l
-4215 3218 l
-4213 3224 l
-4212 3233 l
-4215 3241 l
-4222 3247 l
-4235 3256 l
-4289 3279 l
-4234 3301 l
-S
-1 g
-4877 2933 m
-4878 2933 l
-4878 2934 l
-4877 2934 l
-4874 2934 m
-4878 2934 l
-4878 2935 l
-4874 2935 l
-4872 2935 m
-4878 2935 l
-4878 2936 l
-4872 2936 l
-4869 2936 m
-4878 2936 l
-4878 2937 l
-4869 2937 l
-4867 2937 m
-4878 2937 l
-4878 2938 l
-4867 2938 l
-4864 2938 m
-4878 2938 l
-4878 2939 l
-4864 2939 l
-4862 2939 m
-4878 2939 l
-4878 2940 l
-4862 2940 l
-4859 2940 m
-4878 2940 l
-4878 2941 l
-4859 2941 l
-4856 2941 m
-4878 2941 l
-4878 2942 l
-4856 2942 l
-4854 2942 m
-4878 2942 l
-4878 2943 l
-4854 2943 l
-4851 2943 m
-4878 2943 l
-4878 2944 l
-4851 2944 l
-4849 2944 m
-4878 2944 l
-4878 2945 l
-4849 2945 l
-4846 2945 m
-4878 2945 l
-4878 2946 l
-4846 2946 l
-4844 2946 m
-4878 2946 l
-4878 2947 l
-4844 2947 l
-4841 2947 m
-4878 2947 l
-4878 2948 l
-4841 2948 l
-4839 2948 m
-4878 2948 l
-4878 2949 l
-4839 2949 l
-4836 2949 m
-4878 2949 l
-4878 2950 l
-4836 2950 l
-4833 2950 m
-4878 2950 l
-4878 2951 l
-4833 2951 l
-4831 2951 m
-4878 2951 l
-4878 2952 l
-4831 2952 l
-4828 2952 m
-4878 2952 l
-4878 2953 l
-4828 2953 l
-4826 2953 m
-4878 2953 l
-4878 2954 l
-4826 2954 l
-4823 2954 m
-4878 2954 l
-4878 2955 l
-4823 2955 l
-4821 2955 m
-4878 2955 l
-4878 2956 l
-4821 2956 l
-4818 2956 m
-4878 2956 l
-4878 2957 l
-4818 2957 l
-4816 2957 m
-4878 2957 l
-4878 2958 l
-4816 2958 l
-4813 2958 m
-4878 2958 l
-4878 2959 l
-4813 2959 l
-4810 2959 m
-4878 2959 l
-4878 2960 l
-4810 2960 l
-4808 2960 m
-4878 2960 l
-4878 2961 l
-4808 2961 l
-4805 2961 m
-4878 2961 l
-4878 2962 l
-4805 2962 l
-4803 2962 m
-4878 2962 l
-4878 2963 l
-4803 2963 l
-4800 2963 m
-4878 2963 l
-4878 2964 l
-4800 2964 l
-4798 2964 m
-4878 2964 l
-4878 2965 l
-4798 2965 l
-4795 2965 m
-4878 2965 l
-4878 2966 l
-4795 2966 l
-4793 2966 m
-4878 2966 l
-4878 2967 l
-4793 2967 l
-4790 2967 m
-4878 2967 l
-4878 2968 l
-4790 2968 l
-4788 2968 m
-4878 2968 l
-4878 2969 l
-4788 2969 l
-4785 2969 m
-4878 2969 l
-4878 2970 l
-4785 2970 l
-4782 2970 m
-4878 2970 l
-4878 2971 l
-4782 2971 l
-4780 2971 m
-4878 2971 l
-4878 2972 l
-4780 2972 l
-4777 2972 m
-4878 2972 l
-4878 2973 l
-4777 2973 l
-4775 2973 m
-4878 2973 l
-4878 2974 l
-4775 2974 l
-4772 2974 m
-4878 2974 l
-4878 2975 l
-4772 2975 l
-4770 2975 m
-4878 2975 l
-4878 2976 l
-4770 2976 l
-4767 2976 m
-4878 2976 l
-4878 2977 l
-4767 2977 l
-4765 2977 m
-4878 2977 l
-4878 2978 l
-4765 2978 l
-4762 2978 m
-4878 2978 l
-4878 2979 l
-4762 2979 l
-4759 2979 m
-4878 2979 l
-4878 2980 l
-4759 2980 l
-4757 2980 m
-4878 2980 l
-4878 2981 l
-4757 2981 l
-4754 2981 m
-4878 2981 l
-4878 2982 l
-4754 2982 l
-4752 2982 m
-4878 2982 l
-4878 2983 l
-4752 2983 l
-4749 2983 m
-4878 2983 l
-4878 2984 l
-4749 2984 l
-4747 2984 m
-4878 2984 l
-4878 2985 l
-4747 2985 l
-4744 2985 m
-4878 2985 l
-4878 2986 l
-4744 2986 l
-4742 2986 m
-4878 2986 l
-4878 2987 l
-4742 2987 l
-4739 2987 m
-4878 2987 l
-4878 2988 l
-4739 2988 l
-4736 2988 m
-4878 2988 l
-4878 2989 l
-4736 2989 l
-4734 2989 m
-4878 2989 l
-4878 2990 l
-4734 2990 l
-4731 2990 m
-4878 2990 l
-4878 2991 l
-4731 2991 l
-4729 2991 m
-4878 2991 l
-4878 2992 l
-4729 2992 l
-4726 2992 m
-4878 2992 l
-4878 2993 l
-4726 2993 l
-4724 2993 m
-4878 2993 l
-4878 2994 l
-4724 2994 l
-4721 2994 m
-4878 2994 l
-4878 2995 l
-4721 2995 l
-4719 2995 m
-4878 2995 l
-4878 2996 l
-4719 2996 l
-4716 2996 m
-4878 2996 l
-4878 2997 l
-4716 2997 l
-4714 2997 m
-4878 2997 l
-4878 2998 l
-4714 2998 l
-4714 2998 m
-4878 2998 l
-4878 2999 l
-4714 2999 l
-4714 2999 m
-4878 2999 l
-4878 3001 l
-4714 3001 l
-4715 3001 m
-4878 3001 l
-4878 3004 l
-4715 3004 l
-4716 3004 m
-4878 3004 l
-4878 3006 l
-4716 3006 l
-4717 3006 m
-4878 3006 l
-4878 3009 l
-4717 3009 l
-4718 3009 m
-4878 3009 l
-4878 3011 l
-4718 3011 l
-4719 3011 m
-4878 3011 l
-4878 3014 l
-4719 3014 l
-4720 3014 m
-4878 3014 l
-4878 3016 l
-4720 3016 l
-4721 3016 m
-4878 3016 l
-4878 3019 l
-4721 3019 l
-4722 3019 m
-4878 3019 l
-4878 3021 l
-4722 3021 l
-4723 3021 m
-4878 3021 l
-4878 3024 l
-4723 3024 l
-4724 3024 m
-4878 3024 l
-4878 3026 l
-4724 3026 l
-4725 3026 m
-4878 3026 l
-4878 3029 l
-4725 3029 l
-4726 3029 m
-4878 3029 l
-4878 3031 l
-4726 3031 l
-4727 3031 m
-4878 3031 l
-4878 3034 l
-4727 3034 l
-4728 3034 m
-4878 3034 l
-4878 3036 l
-4728 3036 l
-4729 3036 m
-4878 3036 l
-4878 3039 l
-4729 3039 l
-4730 3039 m
-4878 3039 l
-4878 3041 l
-4730 3041 l
-4731 3041 m
-4878 3041 l
-4878 3043 l
-4731 3043 l
-4731 3043 m
-4878 3043 l
-4878 3044 l
-4731 3044 l
-4732 3044 m
-4878 3044 l
-4878 3045 l
-4732 3045 l
-4732 3045 m
-4878 3045 l
-4878 3046 l
-4732 3046 l
-4733 3046 m
-4878 3046 l
-4878 3047 l
-4733 3047 l
-4733 3047 m
-4878 3047 l
-4878 3048 l
-4733 3048 l
-4733 3048 m
-4878 3048 l
-4878 3049 l
-4733 3049 l
-4734 3049 m
-4878 3049 l
-4878 3050 l
-4734 3050 l
-4734 3050 m
-4878 3050 l
-4878 3051 l
-4734 3051 l
-4735 3051 m
-4878 3051 l
-4878 3052 l
-4735 3052 l
-4735 3052 m
-4878 3052 l
-4878 3053 l
-4735 3053 l
-4735 3053 m
-4878 3053 l
-4878 3054 l
-4735 3054 l
-4736 3054 m
-4878 3054 l
-4878 3055 l
-4736 3055 l
-4736 3055 m
-4878 3055 l
-4878 3056 l
-4736 3056 l
-4737 3056 m
-4878 3056 l
-4878 3057 l
-4737 3057 l
-4737 3057 m
-4878 3057 l
-4878 3058 l
-4737 3058 l
-4737 3058 m
-4878 3058 l
-4878 3059 l
-4737 3059 l
-4738 3059 m
-4878 3059 l
-4878 3060 l
-4738 3060 l
-4738 3060 m
-4878 3060 l
-4878 3061 l
-4738 3061 l
-4739 3061 m
-4878 3061 l
-4878 3062 l
-4739 3062 l
-4739 3062 m
-4878 3062 l
-4878 3063 l
-4739 3063 l
-4739 3063 m
-4878 3063 l
-4878 3064 l
-4739 3064 l
-4740 3064 m
-4878 3064 l
-4878 3065 l
-4740 3065 l
-4740 3065 m
-4875 3065 l
-4875 3066 l
-4740 3066 l
-4741 3066 m
-4873 3066 l
-4873 3067 l
-4741 3067 l
-4741 3067 m
-4870 3067 l
-4870 3068 l
-4741 3068 l
-4741 3068 m
-4868 3068 l
-4868 3069 l
-4741 3069 l
-4742 3069 m
-4865 3069 l
-4865 3070 l
-4742 3070 l
-4742 3070 m
-4863 3070 l
-4863 3071 l
-4742 3071 l
-4743 3071 m
-4860 3071 l
-4860 3072 l
-4743 3072 l
-4743 3072 m
-4858 3072 l
-4858 3073 l
-4743 3073 l
-4743 3073 m
-4855 3073 l
-4855 3074 l
-4743 3074 l
-4744 3074 m
-4853 3074 l
-4853 3075 l
-4744 3075 l
-4744 3075 m
-4850 3075 l
-4850 3076 l
-4744 3076 l
-4745 3076 m
-4848 3076 l
-4848 3077 l
-4745 3077 l
-4745 3077 m
-4845 3077 l
-4845 3078 l
-4745 3078 l
-4745 3078 m
-4842 3078 l
-4842 3079 l
-4745 3079 l
-4746 3079 m
-4840 3079 l
-4840 3080 l
-4746 3080 l
-4746 3080 m
-4837 3080 l
-4837 3081 l
-4746 3081 l
-4747 3081 m
-4835 3081 l
-4835 3082 l
-4747 3082 l
-4747 3082 m
-4832 3082 l
-4832 3083 l
-4747 3083 l
-4747 3083 m
-4830 3083 l
-4830 3084 l
-4747 3084 l
-4748 3084 m
-4827 3084 l
-4827 3085 l
-4748 3085 l
-4748 3085 m
-4825 3085 l
-4825 3086 l
-4748 3086 l
-4749 3086 m
-4822 3086 l
-4822 3087 l
-4749 3087 l
-4749 3087 m
-4820 3087 l
-4820 3088 l
-4749 3088 l
-4749 3088 m
-4817 3088 l
-4817 3089 l
-4749 3089 l
-4750 3089 m
-4815 3089 l
-4815 3090 l
-4750 3090 l
-4750 3090 m
-4812 3090 l
-4812 3091 l
-4750 3091 l
-4751 3091 m
-4810 3091 l
-4810 3092 l
-4751 3092 l
-4751 3092 m
-4807 3092 l
-4807 3093 l
-4751 3093 l
-4751 3093 m
-4805 3093 l
-4805 3094 l
-4751 3094 l
-4752 3094 m
-4802 3094 l
-4802 3095 l
-4752 3095 l
-4752 3095 m
-4800 3095 l
-4800 3096 l
-4752 3096 l
-4753 3096 m
-4797 3096 l
-4797 3097 l
-4753 3097 l
-4753 3097 m
-4795 3097 l
-4795 3098 l
-4753 3098 l
-4753 3098 m
-4792 3098 l
-4792 3099 l
-4753 3099 l
-4754 3099 m
-4790 3099 l
-4790 3100 l
-4754 3100 l
-4754 3100 m
-4787 3100 l
-4787 3101 l
-4754 3101 l
-4755 3101 m
-4785 3101 l
-4785 3102 l
-4755 3102 l
-4755 3102 m
-4782 3102 l
-4782 3103 l
-4755 3103 l
-4755 3103 m
-4780 3103 l
-4780 3104 l
-4755 3104 l
-4756 3104 m
-4777 3104 l
-4777 3105 l
-4756 3105 l
-4756 3105 m
-4775 3105 l
-4775 3106 l
-4756 3106 l
-4757 3106 m
-4772 3106 l
-4772 3107 l
-4757 3107 l
-4757 3107 m
-4770 3107 l
-4770 3108 l
-4757 3108 l
-4757 3108 m
-4767 3108 l
-4767 3109 l
-4757 3109 l
-4758 3109 m
-4765 3109 l
-4765 3110 l
-4758 3110 l
-4758 3110 m
-4762 3110 l
-4762 3111 l
-4758 3111 l
-Y
-4929.5 3043.2 m
-4885 2931 l
-4714 2998 l
-4759 3111 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4825 2972 m
-4864 2957 l
-4882 2990 l
-4876 2988 l
-4863 2989 l
-4851 2993 l
-4841 3002 l
-4836 3013 l
-4837 3026 l
-4840 3034 l
-4849 3044 l
-4860 3048 l
-4873 3048 l
-4884 3043 l
-4895 3035 l
-4897 3029 l
-4898 3020 l
-S
-4771 2994 m
-4784 2993 l
-4796 3002 l
-4808 3020 l
-4812 3031 l
-4816 3052 l
-4813 3067 l
-4803 3075 l
-4795 3078 l
-4782 3079 l
-4770 3071 l
-4758 3053 l
-4753 3041 l
-4750 3020 l
-4753 3005 l
-4763 2997 l
-4771 2994 l
-S
-1 g
-Y
-362 3391.6 m
-207 3392 l
-207 4507 l
-362 4507 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-228 3413 m
-316 3413 l
-S
-228 3413 m
-228 3467 l
-S
-270 3413 m
-270 3446 l
-S
-228 3488 m
-316 3488 l
-S
-228 3546 m
-287 3488 l
-S
-266 3509 m
-316 3546 l
-S
-228 3621 m
-228 3580 l
-266 3575 l
-262 3580 l
-258 3592 l
-258 3605 l
-262 3617 l
-270 3626 l
-283 3630 l
-291 3630 l
-303 3626 l
-312 3617 l
-316 3605 l
-316 3592 l
-312 3580 l
-308 3575 l
-299 3571 l
-S
-258 3726 m
-345 3726 l
-S
-270 3726 m
-262 3734 l
-258 3742 l
-258 3755 l
-262 3763 l
-270 3772 l
-283 3776 l
-291 3776 l
-303 3772 l
-312 3763 l
-316 3755 l
-316 3742 l
-312 3734 l
-303 3726 l
-S
-258 3822 m
-262 3813 l
-270 3805 l
-283 3801 l
-291 3801 l
-303 3805 l
-312 3813 l
-316 3822 l
-316 3834 l
-312 3843 l
-303 3851 l
-291 3855 l
-283 3855 l
-270 3851 l
-262 3843 l
-258 3834 l
-258 3822 l
-S
-228 3884 m
-316 3884 l
-S
-258 3964 m
-316 3964 l
-S
-270 3964 m
-262 3955 l
-258 3947 l
-258 3935 l
-262 3926 l
-270 3918 l
-283 3914 l
-291 3914 l
-303 3918 l
-312 3926 l
-316 3935 l
-316 3947 l
-312 3955 l
-303 3964 l
-S
-258 3997 m
-316 3997 l
-S
-283 3997 m
-270 4001 l
-262 4010 l
-258 4018 l
-258 4031 l
-S
-258 4118 m
-316 4118 l
-S
-283 4118 m
-270 4123 l
-262 4131 l
-258 4139 l
-258 4152 l
-S
-283 4169 m
-283 4219 l
-274 4219 l
-266 4214 l
-262 4210 l
-258 4202 l
-258 4189 l
-262 4181 l
-270 4173 l
-283 4169 l
-291 4169 l
-303 4173 l
-312 4181 l
-316 4189 l
-316 4202 l
-312 4210 l
-303 4219 l
-S
-258 4294 m
-324 4294 l
-337 4290 l
-341 4285 l
-345 4277 l
-345 4265 l
-341 4256 l
-S
-270 4294 m
-262 4285 l
-258 4277 l
-258 4265 l
-262 4256 l
-270 4248 l
-283 4244 l
-291 4244 l
-303 4248 l
-312 4256 l
-316 4265 l
-316 4277 l
-312 4285 l
-303 4294 l
-S
-228 4323 m
-232 4327 l
-228 4331 l
-224 4327 l
-228 4323 l
-S
-258 4327 m
-316 4327 l
-S
-258 4377 m
-262 4369 l
-270 4361 l
-283 4356 l
-291 4356 l
-303 4361 l
-312 4369 l
-316 4377 l
-316 4390 l
-312 4398 l
-303 4407 l
-291 4411 l
-283 4411 l
-270 4407 l
-262 4398 l
-258 4390 l
-258 4377 l
-S
-258 4440 m
-316 4440 l
-S
-274 4440 m
-262 4453 l
-258 4461 l
-258 4473 l
-262 4482 l
-274 4486 l
-316 4486 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 3678 3396 a
- currentpoint grestore moveto
- 3678 3396 a 1633 4700 a Fz(Abstract)0
-4962 y FF(The)40 b(AST)g(library)h(pro)m(vides)f(a)h(comprehensiv)m(e)h
-(range)f(of)g(facilities)i(for)d(attac)m(hing)j(w)m(orld)e(co)s
-(ordinate)0 5075 y(systems)c(to)h(astronomical)h(data,)h(for)d
-(retrieving)h(and)f(in)m(terpreting)h(that)g(information)f(in)g(a)h(v)
--5 b(ariet)m(y)38 b(of)0 5188 y(formats,)31 b(including)f(FITS-W)m(CS,)
-g(and)g(for)g(generating)i(graphical)f(output)f(based)g(on)g(it.)0
-5351 y(This)38 b(programmer's)g(man)m(ual)h(should)f(b)s(e)g(of)g(in)m
-(terest)i(to)g(an)m(y)m(one)f(writing)g(astronomical)h(applications)0
-5464 y(whic)m(h)g(need)h(to)h(manipulate)f(co)s(ordinate)g(system)g
-(data,)j(esp)s(ecially)e(celestial)i(or)d(sp)s(ectral)g(co)s(ordinate)0
-5576 y(systems.)g(AST)29 b(is)i(p)s(ortable)f(and)g(en)m(vironmen)m
-(t-indep)s(enden)m(t.)p eop end
-%%Page: 2 2
-TeXDict begin 2 1 bop 0 52 a FF(ii)3245 b Fy(SUN/211.26)0
-5670 y FF(Cop)m(yrigh)m(t)31 b(\(C\))g(2009)h(Science)f(&)f(T)-8
-b(ec)m(hnology)32 b(F)-8 b(acilities)34 b(Council)p eop
-end
-%%Page: 3 3
-TeXDict begin 3 2 bop 0 52 a Fy(CONTENTS)3186 b FF(iii)0
-351 y Fz(Con)l(ten)l(ts)0 556 y FD(1)84 b(In)m(tro)s(duction)3015
-b(1)136 669 y FF(1.1)94 b(What)32 b(Problems)e(Do)s(es)h(AST)e(T)-8
-b(ac)m(kle?)54 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151
-b(1)136 782 y(1.2)94 b(Other)30 b(Design)i(Ob)5 b(jectiv)m(es)44
-b(.)i(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151
-b(2)136 895 y(1.3)94 b(What)32 b(Do)s(es)e(\\AST")h(Stand)f(F)-8
-b(or?)81 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151
-b(4)0 1100 y FD(2)84 b(Ov)m(erview)35 b(of)g(AST)f(Concepts)2343
-b(5)136 1213 y FF(2.1)94 b(Relationships)31 b(Bet)m(w)m(een)i(Co)s
-(ordinate)d(Systems)79 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151 b(5)136 1326
-y(2.2)94 b(Mappings)31 b(Av)-5 b(ailable)95 b(.)45 b(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151 b(5)136
-1439 y(2.3)94 b(Comp)s(ound)29 b(Mappings)c(.)45 b(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151 b(6)136 1552
-y(2.4)94 b(Represen)m(ting)31 b(Co)s(ordinate)g(Systems)k(.)45
-b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151 b(7)136 1665 y(2.5)94
-b(Net)m(w)m(orks)32 b(of)f(Co)s(ordinate)f(Systems)77
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151 b(9)136 1778
-y(2.6)94 b(Input/Output)29 b(F)-8 b(acilities)85 b(.)46
-b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(11)136 1891 y(2.7)94 b(Pro)s(ducing)30 b(Graphical)h(Output)80
-b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(12)0
-2096 y FD(3)84 b(Ho)m(w)35 b(T)-9 b(o.)18 b(.)f(.)3059
-b(15)136 2209 y FF(3.1)94 b(.)16 b(.)f(.)h(Obtain)30
-b(and)g(Install)g(AST)91 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)106 b(15)136 2322 y(3.2)94 b(.)16 b(.)f(.)h(Structure)29
-b(an)h(AST)g(Program)92 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(15)136 2435 y(3.3)94 b(.)16 b(.)f(.)h(Build)30 b(an)g(AST)g(Program)
-38 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(15)136 2548 y(3.4)94 b(.)16 b(.)f(.)h(Read)30 b(a)h(W)m(CS)f
-(Calibration)h(from)f(a)h(Dataset)55 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(16)136 2661 y(3.5)94 b(.)16 b(.)f(.)h(V)-8 b(alidate)32
-b(W)m(CS)f(Information)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(17)136 2774 y(3.6)94 b(.)16 b(.)f(.)h(Displa)m(y)31
-b(AST)f(Data)92 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)106 b(17)136 2888 y(3.7)94 b(.)16 b(.)f(.)h(Con)m(v)m(ert)31
-b(Bet)m(w)m(een)h(Pixel)f(and)f(W)-8 b(orld)31 b(Co)s(ordinates)93
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(18)136 3001 y(3.8)94 b(.)16 b(.)f(.)h(T)-8 b(est)31
-b(if)f(a)h(W)m(CS)f(is)h(a)f(Celestial)i(Co)s(ordinate)f(System)69
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(18)136 3114 y(3.9)94 b(.)16 b(.)f(.)h(T)-8 b(est)31
-b(if)f(a)h(W)m(CS)f(is)h(a)f(Sp)s(ectral)h(Co)s(ordinate)f(System)82
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(19)136 3227 y(3.10)49 b(.)16 b(.)f(.)h(F)-8 b(ormat)31
-b(Co)s(ordinates)g(for)f(Displa)m(y)60 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)106 b(19)136 3340 y(3.11)49 b(.)16 b(.)f(.)h(Displa)m(y)31
-b(Co)s(ordinates)g(as)f(they)h(are)f(T)-8 b(ransformed)84
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)106 b(19)136 3453 y(3.12)49 b(.)16 b(.)f(.)h(Read)30
-b(Co)s(ordinates)h(En)m(tered)f(b)m(y)g(a)h(User)69 b(.)46
-b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)106 b(20)136 3566 y(3.13)49 b(.)16
-b(.)f(.)h(Create)31 b(a)g(New)f(W)m(CS)h(Calibration)63
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(21)136 3679
-y(3.14)49 b(.)16 b(.)f(.)h(Mo)s(dify)30 b(a)h(W)m(CS)f(Calibration)36
-b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(23)136
-3792 y(3.15)49 b(.)16 b(.)f(.)h(W)-8 b(rite)31 b(a)g(Mo)s(di\014ed)f(W)
-m(CS)g(Calibration)h(to)h(a)e(Dataset)44 b(.)h(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(25)136 3905
-y(3.16)49 b(.)16 b(.)f(.)h(Displa)m(y)31 b(a)g(Graphical)g(Co)s
-(ordinate)g(Grid)56 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(27)136
-4018 y(3.17)49 b(.)16 b(.)f(.)h(Switc)m(h)30 b(to)h(Plot)g(a)g
-(Di\013eren)m(t)h(Celestial)g(Co)s(ordinate)f(Grid)89
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(29)136 4131 y(3.18)49 b(.)16 b(.)f(.)h(Giv)m(e)31 b(a)g(User)g(Con)m
-(trol)g(Ov)m(er)f(the)h(App)s(earance)f(of)g(a)h(Plot)46
-b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(30)0 4336 y FD(4)84 b(An)35 b(AST)g(Ob)6 b(ject)34
-b(Primer)2457 b(33)136 4449 y FF(4.1)94 b(AST)30 b(Ob)5
-b(jects)76 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)106 b(33)136 4562 y(4.2)94 b(Ob)5
-b(ject)31 b(Creation)g(and)f(P)m(oin)m(ters)57 b(.)46
-b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(33)136
-4675 y(4.3)94 b(The)30 b(Ob)5 b(ject)31 b(Hierarc)m(h)m(y)79
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(34)136 4788 y(4.4)94 b(Displa)m(ying)32 b(Ob)5 b(jects)54
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)106 b(35)136 4901 y(4.5)94 b(Getting)32 b(A)m(ttribute)g(V)-8
-b(alues)25 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(35)136 5015 y(4.6)94 b(Setting)32 b(A)m(ttribute)f(V)-8
-b(alues)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(36)136 5128 y(4.7)94 b(T)-8 b(esting,)32 b(Clearing)f(and)f
-(Defaulting)h(A)m(ttributes)57 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(38)136
-5241 y(4.8)94 b(T)-8 b(ransforming)30 b(Co)s(ordinates)52
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(39)136 5354 y(4.9)94 b(Managing)32 b(Ob)5 b(ject)31
-b(P)m(oin)m(ters)45 b(.)h(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)106 b(40)136 5467 y(4.10)49 b(AST)30 b(P)m(oin)m(ter)i(Con)m
-(texts|Begin)g(and)e(End)80 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(41)136 5580 y(4.11)49 b(Exp)s(orting,)31 b(Imp)s(orting)e(and)h
-(Exempting)g(AST)g(P)m(oin)m(ters)87 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(41)136 5693
-y(4.12)49 b(AST)30 b(Ob)5 b(jects)30 b(within)g(Multi-threaded)h
-(Applications)51 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)106 b(42)p eop end
-%%Page: 4 4
-TeXDict begin 4 3 bop 0 52 a FF(iv)3190 b Fy(CONTENTS)345
-351 y FF(4.12.1)61 b(Lo)s(c)m(king)32 b(AST)d(Ob)5 b(jects)31
-b(for)f(Exclusiv)m(e)h(Use)69 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(42)345 464
-y(4.12.2)61 b(AST)30 b(P)m(oin)m(ter)i(Con)m(texts)54
-b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(43)136
-577 y(4.13)49 b(Cop)m(ying)31 b(Ob)5 b(jects)73 b(.)46
-b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(43)136 690 y(4.14)49 b(C)30 b(P)m(oin)m(ter)i(T)m(yp)s(es)81
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)106 b(44)136 804 y(4.15)49 b(Error)30 b(Detection)43
-b(.)i(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)106 b(45)136 917 y(4.16)49 b(Sharing)30 b(the)h(Error)e(Status)
-k(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(47)0 1121 y FD(5)84 b(In)m(ter-Relating)35 b(Co)s(ordinate)f(Systems)
-h(\(Mappings\))1377 b(49)136 1234 y FF(5.1)94 b(The)30
-b(Mapping)h(Class)h(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)106 b(49)136 1347 y(5.2)94 b(The)30
-b(Mapping)h(Mo)s(del)64 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)106 b(50)136 1461 y(5.3)94 b(Input)29
-b(and)h(Output)f(Co)s(ordinate)i(Num)m(b)s(ers)76 b(.)46
-b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)106 b(50)136 1574 y(5.4)94 b(F)-8
-b(orw)m(ard)31 b(and)f(In)m(v)m(erse)h(T)-8 b(ransformations)24
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(50)136 1687 y(5.5)94
-b(In)m(v)m(erting)32 b(Mappings)g(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(51)136 1800
-y(5.6)94 b(Finding)31 b(the)f(Rate)i(of)e(Change)g(of)h(a)g(Mapping)f
-(Output)83 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)106 b(51)136 1913 y(5.7)94 b(Rep)s(orting)31
-b(Co)s(ordinate)f(T)-8 b(ransformations)38 b(.)45 b(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(51)136 2026 y(5.8)94 b(Handling)31 b(Missing)g(\(Bad\))g(Co)s
-(ordinate)g(V)-8 b(alues)84 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(52)136
-2139 y(5.9)94 b(Example|the)31 b(UnitMap)68 b(.)46 b(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(52)136 2252
-y(5.10)49 b(Example|the)31 b(P)m(ermMap)36 b(.)46 b(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(53)0 2457 y FD(6)84
-b(Comp)s(ound)36 b(Mappings)f(\(CmpMaps\))1968 b(57)136
-2570 y FF(6.1)94 b(Com)m(bining)31 b(Mappings)f(in)g(Series)90
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(57)136
-2683 y(6.2)94 b(Com)m(bining)31 b(Mappings)f(in)g(P)m(arallel)89
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(58)136
-2796 y(6.3)94 b(The)30 b(Comp)s(onen)m(t)g(Mappings)e(.)46
-b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(58)136 2909 y(6.4)94 b(Creating)31 b(More)h(Complex)e(Mappings)67
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(59)136 3022
-y(6.5)94 b(Example|T)-8 b(ransforming)30 b(Bet)m(w)m(een)j(Tw)m(o)d
-(Calibrated)h(Images)73 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)106 b(59)136 3135 y(6.6)94 b(Ov)m(er-Complex)31
-b(Comp)s(ound)d(Mappings)58 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(60)136 3248 y(6.7)94 b(Simplifying)30 b(Comp)s(ound)e(Mappings)41
-b(.)k(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(60)0 3453
-y FD(7)84 b(Represen)m(ting)36 b(Co)s(ordinate)e(Systems)i(\(F)-9
-b(rames\))1543 b(63)136 3566 y FF(7.1)94 b(The)30 b(F)-8
-b(rame)32 b(Mo)s(del)24 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(63)136 3679 y(7.2)94
-b(Creating)31 b(a)g(F)-8 b(rame)40 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(63)136
-3792 y(7.3)94 b(Using)31 b(a)g(F)-8 b(rame)31 b(as)g(a)f(Mapping)84
-b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(63)136
-3905 y(7.4)94 b(F)-8 b(rame)32 b(Axis)e(A)m(ttributes)54
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(64)136 4018 y(7.5)94 b(F)-8 b(rame)32 b(A)m(ttributes)49
-b(.)d(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)106 b(65)136 4131 y(7.6)94 b(F)-8 b(ormatting)33
-b(Axis)d(V)-8 b(alues)80 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)106 b(67)136 4244 y(7.7)94 b(Normalising)32
-b(F)-8 b(rame)31 b(Co)s(ordinates)38 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)106 b(68)136 4358 y(7.8)94 b(Reading)31 b(F)-8
-b(ormatted)32 b(Axis)f(V)-8 b(alues)38 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)106 b(68)136 4471 y(7.9)94 b(P)m(erm)m(uting)31
-b(F)-8 b(rame)32 b(Axes)g(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)106 b(72)136 4584 y(7.10)49 b(Selecting)32
-b(F)-8 b(rame)32 b(Axes)24 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)106 b(72)136 4697 y(7.11)49 b(Calculating)32
-b(Distances,)g(Angles)f(and)f(O\013sets)65 b(.)46 b(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(73)136 4810 y(7.12)49 b(The)30 b(Domain)h(A)m(ttribute)48
-b(.)e(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(75)136 4923 y(7.13)49 b(Con)m(v)m(en)m(tions)32 b(for)e(Domain)h
-(Names)42 b(.)k(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(77)136 5036 y(7.14)49 b(The)30 b(Unit)h(A)m(ttribute)39
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)106 b(78)345 5149 y(7.14.1)61 b(The)30 b(Syn)m(tax)h(for)f(Unit)h
-(Strings)i(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(79)345
-5262 y(7.14.2)61 b(Side-e\013ects)32 b(of)f(Changing)f(the)g(Unit)h
-(attribute)86 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)106 b(80)0 5467 y FD(8)84 b(Celestial)34
-b(Co)s(ordinate)h(Systems)g(\(SkyF)-9 b(rames\))1584
-b(83)136 5580 y FF(8.1)94 b(The)30 b(SkyF)-8 b(rame)31
-b(Mo)s(del)90 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)106 b(83)136 5693 y(8.2)94 b(Creating)31 b(a)g(SkyF)-8
-b(rame)35 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)106 b(83)p eop end
-%%Page: 5 5
-TeXDict begin 5 4 bop 0 52 a Fy(CONTENTS)3214 b FF(v)136
-351 y(8.3)94 b(Sp)s(ecifying)30 b(a)h(P)m(articular)h(Celestial)g(Co)s
-(ordinate)e(System)83 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)106 b(83)136 465 y(8.4)94 b(A)m(ttributes)32
-b(whic)m(h)e(Qualify)g(Celestial)i(Co)s(ordinate)f(Systems)k(.)46
-b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(84)136 579 y(8.5)94 b(Using)31 b(Default)h(SkyF)-8
-b(rame)30 b(A)m(ttributes)g(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(85)136 692 y(8.6)94 b(F)-8 b(ormatting)33 b(Celestial)f(Co)s
-(ordinates)51 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(86)136 806 y(8.7)94 b(Reading)31 b(F)-8 b(ormatted)32
-b(Celestial)g(Co)s(ordinates)80 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(88)136 920 y(8.8)94 b(Represen)m(ting)31 b(O\013sets)g(from)f(a)h(Sp)
-s(eci\014ed)e(Sky)h(P)m(osition)65 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(90)0 1128 y
-FD(9)84 b(Sp)s(ectral)35 b(Co)s(ordinate)g(Systems)g(\(Sp)s(ecF)-9
-b(rames\))1553 b(93)136 1242 y FF(9.1)94 b(The)30 b(Sp)s(ecF)-8
-b(rame)31 b(Mo)s(del)52 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)106 b(93)136 1355 y(9.2)94 b(Creating)31
-b(a)g(Sp)s(ecF)-8 b(rame)67 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)106 b(93)136 1469 y(9.3)94 b(Sp)s(ecifying)30
-b(a)h(P)m(articular)h(Sp)s(ectral)e(Co)s(ordinate)g(System)c(.)45
-b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(93)136 1583 y(9.4)94 b(A)m(ttributes)32 b(whic)m(h)e(Qualify)g(Sp)s
-(ectral)g(Co)s(ordinate)h(Systems)48 b(.)e(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(94)136 1696 y(9.5)94
-b(Using)31 b(Default)h(Sp)s(ecF)-8 b(rame)30 b(A)m(ttributes)63
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(95)136 1810 y(9.6)94
-b(Creating)31 b(Sp)s(ectral)g(Cub)s(es)43 b(.)j(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(96)136 1924 y(9.7)94
-b(Handling)31 b(Dual-Sideband)f(Sp)s(ectra)67 b(.)45
-b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(97)0 2132 y
-FD(10)32 b(Time)j(Systems)g(\(TimeF)-9 b(rames\))2215
-b(99)136 2246 y FF(10.1)49 b(The)30 b(TimeF)-8 b(rame)32
-b(Mo)s(del)d(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)106 b(99)136 2359 y(10.2)49 b(Creating)31 b(a)g(TimeF)-8
-b(rame)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(99)136 2473 y(10.3)49 b(Sp)s(ecifying)30 b(a)h(P)m(articular)h
-(Time)e(System)51 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(99)136 2587 y(10.4)49 b(A)m(ttributes)32 b(whic)m(h)e(Qualify)g(Time)
-g(Co)s(ordinate)h(Systems)26 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(100)0 2795 y FD(11)32
-b(Comp)s(ound)k(F)-9 b(rames)35 b(\(CmpF)-9 b(rames\))1957
-b(101)136 2908 y FF(11.1)49 b(Creating)31 b(a)g(CmpF)-8
-b(rame)59 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)60 b(101)136 3022 y(11.2)49 b(The)30 b(A)m(ttributes)h(of)g(a)g
-(CmpF)-8 b(rame)56 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(101)0 3230 y FD(12)32 b(An)j(In)m(tro)s(duction)h(to)e(Co)s(ordinate)
-h(System)g(Con)m(v)m(ersions)1118 b(103)136 3344 y FF(12.1)49
-b(Con)m(v)m(erting)32 b(b)s(et)m(w)m(een)f(Celestial)h(Co)s(ordinate)f
-(Systems)d(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)60 b(103)136 3458 y(12.2)49 b(Con)m(v)m(erting)32
-b(b)s(et)m(w)m(een)f(Sp)s(ectral)f(Co)s(ordinate)h(Systems)41
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)60 b(105)136 3571 y(12.3)49 b(Con)m(v)m(erting)32
-b(b)s(et)m(w)m(een)f(Time)f(Co)s(ordinate)h(Systems)89
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)60 b(107)136 3685 y(12.4)49 b(Handling)31 b(SkyF)-8
-b(rame)31 b(Axis)f(P)m(erm)m(utations)h(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(107)136 3799 y(12.5)49 b(Con)m(v)m(erting)32 b(Bet)m(w)m(een)g(F)-8
-b(rames)49 b(.)c(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(108)136 3912 y(12.6)49 b(The)30 b(Choice)h(of)g(Alignmen)m(t)g
-(System)56 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(108)0 4120 y FD(13)32 b(Co)s(ordinate)j(System)g(Net)m(w)m(orks)g
-(\(F)-9 b(rameSets\))1553 b(111)136 4234 y FF(13.1)49
-b(The)30 b(F)-8 b(rameSet)32 b(Mo)s(del)40 b(.)45 b(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(111)136
-4348 y(13.2)49 b(Creating)31 b(a)g(F)-8 b(rameSet)56
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(112)136 4462 y(13.3)49 b(Adding)30 b(New)h(F)-8 b(rames)31
-b(to)g(a)g(F)-8 b(rameSet)43 b(.)j(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(112)136 4575 y(13.4)49 b(The)30 b(Base)i(and)e(Curren)m(t)f(F)-8
-b(rames)27 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(113)136 4689 y(13.5)49 b(Referring)31 b(to)g(the)f(Base)i(and)e
-(Curren)m(t)f(F)-8 b(rames)43 b(.)j(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(114)136
-4803 y(13.6)49 b(Using)31 b(a)g(F)-8 b(rameSet)31 b(as)g(a)g(Mapping)d
-(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(115)136
-4916 y(13.7)49 b(Extracting)32 b(a)f(Mapping)f(from)g(a)h(F)-8
-b(rameSet)81 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(115)136 5030
-y(13.8)49 b(Using)31 b(a)g(F)-8 b(rameSet)31 b(as)g(a)g(F)-8
-b(rame)60 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(116)136 5144 y(13.9)49 b(Extracting)32 b(a)f(F)-8 b(rame)31
-b(from)f(a)h(F)-8 b(rameSet)42 b(.)k(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(117)136 5258 y(13.10)t(Remo)m(ving)32 b(a)f(F)-8 b(rame)31
-b(from)f(a)h(F)-8 b(rameSet)70 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(117)0 5466 y FD(14)32 b(Higher)j(Lev)m(el)g(Op)s(erations)g(on)g(F)-9
-b(rameSets)1708 b(119)136 5579 y FF(14.1)49 b(Creating)31
-b(F)-8 b(rameSets)32 b(with)e(astCon)m(v)m(ert)62 b(.)46
-b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(119)136 5693 y(14.2)49
-b(Con)m(v)m(erting)32 b(b)s(et)m(w)m(een)f(F)-8 b(rameSet)31
-b(Co)s(ordinate)g(Systems)63 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(120)p eop end
-%%Page: 6 6
-TeXDict begin 6 5 bop 0 52 a FF(vi)3190 b Fy(CONTENTS)136
-351 y FF(14.3)49 b(Example|Registering)32 b(Tw)m(o)f(Images)50
-b(.)c(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(122)136 464 y(14.4)49
-b(Re-De\014ning)31 b(a)g(F)-8 b(rameSet)32 b(Co)s(ordinate)e(System)59
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)60 b(124)136 577 y(14.5)49 b(Example|Binning)31
-b(an)f(Image)87 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(125)136 690 y(14.6)49 b(Main)m(taining)33 b(the)d(In)m(tegrit)m(y)i
-(of)f(F)-8 b(rameSets)32 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(126)136 804 y(14.7)49 b(Merging)32 b(F)-8 b(rameSets)42
-b(.)k(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-60 b(127)0 1008 y FD(15)32 b(Sa)m(ving)k(and)f(Restoring)g(Ob)6
-b(jects)35 b(\(Channels\))1585 b(131)136 1121 y FF(15.1)49
-b(The)30 b(Channel)g(Mo)s(del)87 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(131)136 1234 y(15.2)49
-b(Creating)31 b(a)g(Channel)f(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(131)136 1347 y(15.3)49
-b(W)-8 b(riting)32 b(Ob)5 b(jects)30 b(to)i(a)e(Channel)47
-b(.)f(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(132)136
-1461 y(15.4)49 b(Reading)31 b(Ob)5 b(jects)31 b(from)f(a)g(Channel)64
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(132)136
-1574 y(15.5)49 b(Sa)m(ving)31 b(and)f(Restoring)h(Multiple)g(Ob)5
-b(jects)34 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(133)136 1687
-y(15.6)49 b(V)-8 b(alidating)33 b(Input)77 b(.)46 b(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(133)136
-1800 y(15.7)49 b(Storing)31 b(an)f(ID)h(String)f(with)g(an)g(Ob)5
-b(ject)62 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(133)136
-1913 y(15.8)49 b(The)30 b(T)-8 b(extual)32 b(Output)d(F)-8
-b(ormat)31 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(134)136 2026 y(15.9)49 b(Con)m(trolling)32 b(the)f(Amoun)m(t)f(of)h
-(Output)59 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(135)136
-2139 y(15.10)t(Con)m(trolling)32 b(Commen)m(ting)k(.)46
-b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(137)136 2252 y(15.11)t(Editing)31 b(T)-8 b(extual)31
-b(Output)69 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)60 b(138)136 2365 y(15.12)t(Mixing)32 b(Ob)5 b(jects)30
-b(with)g(other)h(T)-8 b(ext)33 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)60 b(139)136 2478 y(15.13)t(Reading)31 b(Ob)5 b(jects)31
-b(from)f(Files)71 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-60 b(139)136 2591 y(15.14)t(W)-8 b(riting)32 b(Ob)5 b(jects)30
-b(to)i(Files)54 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)60 b(140)136 2704 y(15.15)t(Reading)31 b(and)f(W)-8
-b(riting)32 b(Ob)5 b(jects)30 b(to)h(other)g(Places)71
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)60 b(141)0 2909 y FD(16)32 b(Storing)k(AST)e(Ob)6
-b(jects)35 b(in)g(FITS)f(Headers)h(\(FitsChans\))1146
-b(143)136 3022 y FF(16.1)49 b(The)30 b(Nativ)m(e)j(FITS)c(Enco)s(ding)
-74 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(143)136 3135 y(16.2)49 b(The)30 b(FitsChan)h(Mo)s(del)47
-b(.)e(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(143)136 3248 y(16.3)49 b(Creating)31 b(a)g(FitsChan)62
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(144)136 3361 y(16.4)49 b(Addressing)30 b(Cards)f(in)h(a)h(FitsChan)93
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(145)136
-3474 y(16.5)49 b(W)-8 b(riting)32 b(Nativ)m(e)g(Ob)5
-b(jects)31 b(to)g(a)g(FitsChan)71 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(146)136 3588 y(16.6)49 b(Extracting)32 b(Individual)d(Cards)h(from)g
-(a)g(FitsChan)60 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(146)136 3701 y(16.7)49
-b(The)30 b(Nativ)m(e)j(FitsChan)d(Output)f(F)-8 b(ormat)29
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(147)136 3814 y(16.8)49
-b(Adding)30 b(Individual)g(Cards)f(to)i(a)g(FitsChan)83
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)60 b(148)136 3927 y(16.9)49 b(Adding)30
-b(Concatenated)i(Cards)d(to)i(a)g(FitsChan)84 b(.)46
-b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)60 b(149)136 4040 y(16.10)t(Reading)31 b(Nativ)m(e)i(Ob)5
-b(jects)30 b(F)-8 b(rom)31 b(a)g(FitsChan)63 b(.)46 b(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(149)136 4153 y(16.11)t(Sa)m(ving)31 b(and)f(Restoring)h(Multiple)g
-(Ob)5 b(jects)31 b(in)f(a)h(FitsChan)89 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(150)136 4266 y(16.12)t(Mixing)32
-b(Nativ)m(e)g(Ob)5 b(jects)30 b(with)g(Other)g(FITS)g(Cards)62
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)60 b(150)136 4379 y(16.13)t(Finding)31 b(and)e(Changing)h
-(Cards)g(in)g(a)h(FitsChan)62 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(150)136
-4492 y(16.14)t(Source)31 b(and)e(Sink)h(F)-8 b(unctions)31
-b(for)f(FitsChans)23 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(151)0
-4697 y FD(17)32 b(Using)k(F)-9 b(oreign)36 b(FITS)e(Enco)s(dings)2079
-b(153)136 4810 y FF(17.1)49 b(The)30 b(F)-8 b(oreign)32
-b(FITS)e(Enco)s(dings)73 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)60 b(153)136 4923 y(17.2)49 b(Limitations)32 b(of)f(F)-8
-b(oreign)31 b(Enco)s(dings)51 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-60 b(154)136 5036 y(17.3)49 b(Iden)m(tifying)31 b(F)-8
-b(oreign)32 b(Enco)s(dings)d(on)i(Input)86 b(.)46 b(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(155)136 5149 y(17.4)49 b(Reading)31 b(F)-8 b(oreign)32
-b(W)m(CS)e(Information)h(from)f(a)g(FITS)g(Header)67
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(157)136 5262 y(17.5)49 b(Remo)m(ving)32 b(W)m(CS)e(Information)h
-(from)e(FITS)h(Headers|the)h(Destructiv)m(e)h(Read)62
-b(.)46 b(.)g(.)f(.)h(.)60 b(158)136 5375 y(17.6)49 b(Propagating)32
-b(W)m(CS)e(Information)h(through)e(Data)j(Pro)s(cessing)f(Steps)90
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(159)136
-5488 y(17.7)49 b(W)-8 b(riting)32 b(F)-8 b(oreign)32
-b(W)m(CS)e(Information)g(to)i(a)e(FITS)g(Header)50 b(.)c(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(160)0
-5693 y FD(18)32 b(Storing)k(AST)e(Ob)6 b(jects)35 b(as)g(XML)g
-(\(XmlChan\))1565 b(163)p eop end
-%%Page: 7 7
-TeXDict begin 7 6 bop 0 52 a Fy(CONTENTS)3163 b FF(vii)136
-351 y(18.1)49 b(Reading)31 b(IV)m(O)m(A)g(Space-Time-Co)s(ordinates)h
-(XML)e(\(STC-X\))h(Descriptions)56 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)60
-b(164)0 563 y FD(19)32 b(Reading)k(and)f(writing)f(STC-S)g
-(descriptions)i(\(StcsChans\))1047 b(167)0 775 y(20)32
-b(Creating)j(Y)-9 b(our)35 b(Own)f(Priv)-6 b(ate)35 b(Mappings)h(\(In)m
-(traMaps\))1139 b(169)136 889 y FF(20.1)49 b(The)30 b(Need)h(for)f
-(Extensibilit)m(y)j(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)60 b(169)136 1004 y(20.2)49 b(The)30 b(In)m(traMap)h(Mo)s(del)39
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(169)136 1118 y(20.3)49 b(Limitations)32 b(of)f(In)m(traMaps)89
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(169)136 1233 y(20.4)49 b(W)-8 b(riting)32 b(a)f(T)-8
-b(ransformation)30 b(F)-8 b(unction)44 b(.)i(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)60 b(170)136 1347 y(20.5)49 b(Registering)32 b(a)f(T)-8
-b(ransformation)30 b(F)-8 b(unction)43 b(.)i(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(171)136 1462 y(20.6)49 b(Creating)31 b(an)g(In)m(traMap)73
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(172)136 1576 y(20.7)49 b(Restricted)32 b(Implemen)m(tations)f(of)g(T)
--8 b(ransformation)30 b(F)-8 b(unctions)34 b(.)46 b(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(173)136 1691 y(20.8)49
-b(V)-8 b(ariable)32 b(Num)m(b)s(ers)d(of)i(Co)s(ordinates)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(173)136 1806
-y(20.9)49 b(Adapting)31 b(a)g(T)-8 b(ransformation)30
-b(F)-8 b(unction)31 b(to)g(Individual)f(In)m(traMaps)48
-b(.)e(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(174)136
-1920 y(20.10)t(Simplifying)30 b(In)m(traMaps)58 b(.)46
-b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(175)136 2035 y(20.11)t(W)-8 b(riting)32 b(and)e(Reading)h(In)m
-(traMaps)26 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(176)136 2149 y(20.12)t(Managing)32 b(T)-8 b(ransformation)31
-b(F)-8 b(unctions)31 b(in)f(Libraries)73 b(.)46 b(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(177)0
-2361 y FD(21)32 b(Pro)s(ducing)37 b(Graphical)e(Output)f(\(Plots\))1813
-b(179)136 2475 y FF(21.1)49 b(The)30 b(Plot)i(Mo)s(del)j(.)45
-b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)60 b(179)136 2590 y(21.2)49 b(Plotting)32 b(Sym)m(b)s(ols)51
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)60 b(179)136 2704 y(21.3)49 b(Plotting)32 b(Geo)s(desic)g(Curv)m
-(es)80 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(180)136 2819 y(21.4)49 b(Plotting)32 b(Curv)m(es)e(P)m(arallel)i(to)f
-(Axes)81 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(181)136 2933 y(21.5)49 b(Plotting)32 b(Generalized)g(Curv)m(es)38
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(181)136 3048 y(21.6)49 b(Clipping)d(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(181)136 3162 y(21.7)49 b(Using)31 b(a)g(Plot)g(as)g(a)f(Mapping)24
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(182)136 3277 y(21.8)49 b(Using)31 b(a)g(Plot)g(as)g(a)f(F)-8
-b(rame)56 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-60 b(182)136 3391 y(21.9)49 b(Regions)32 b(of)e(V)-8
-b(alid)32 b(Ph)m(ysical)f(Co)s(ordinates)67 b(.)45 b(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)60 b(183)136 3506 y(21.10)t(Plotting)32 b(Borders)75
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)60 b(183)136 3620 y(21.11)t(Plotting)32 b(T)-8
-b(ext)61 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)60 b(184)136 3735 y(21.12)t(Plotting)32
-b(a)f(Grid)54 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)60 b(184)136 3850 y(21.13)t(Con)m(trolling)32
-b(the)f(App)s(earance)f(of)g(Sub-strings)43 b(.)j(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(184)136 3964 y(21.14)t(Pro)s(ducing)30 b(Logarithmic)h(Axes)91
-b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(185)136
-4079 y(21.15)t(Cho)s(osing)30 b(a)h(Graphics)f(P)m(ac)m(k)-5
-b(age)61 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(186)0 4290 y FD(22)32 b(Compiling)k(and)e(Linking)i(Soft)m(w)m(are)e
-(that)g(Uses)i(AST)1290 b(187)136 4405 y FF(22.1)49 b(Accessing)32
-b(the)f(\\ast.h")g(Header)g(File)h(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)60 b(187)136 4519 y(22.2)49 b(Linking)31 b(with)f(AST)f(F)-8
-b(acilities)62 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(187)136 4634 y(22.3)49 b(Building)31 b(AD)m(AM)h(Applications)f(that)
-g(Use)g(AST)e(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(188)0 4846 y FD(A)d(The)35
-b(AST)g(Class)f(Hierarc)m(h)m(y)2307 b(189)0 5058 y(B)62
-b(AST)35 b(F)-9 b(unction)36 b(Descriptions)2241 b(191)0
-5269 y(C)60 b(AST)35 b(A)m(ttribute)f(Descriptions)2207
-b(389)0 5481 y(D)56 b(AST)35 b(Class)g(Descriptions)2403
-b(485)0 5693 y(E)67 b(UNIX)35 b(Command)g(Descriptions)2101
-b(527)p eop end
-%%Page: 8 8
-TeXDict begin 8 7 bop 0 52 a FF(viii)3140 b Fy(CONTENTS)0
-351 y FD(F)70 b(FITS-W)m(CS)34 b(Co)m(v)m(erage)2523
-b(531)136 465 y FF(F.1)80 b(P)m(ap)s(er)31 b(I)f(-)g(General)i(Linear)e
-(Co)s(ordinates)c(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(531)345
-579 y(F.1.1)92 b(Requiremen)m(ts)31 b(for)f(a)h(Successful)f(W)-8
-b(rite)32 b(Op)s(eration)61 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)60 b(531)345 693 y(F.1.2)92 b(Use)31
-b(and)f(Choice)h(of)f(CTYPE)p Fx(i)39 b FF(k)m(eyw)m(ords)71
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)60 b(531)345 807 y(F.1.3)92 b(Choice)31 b(of)g(Reference)g
-(P)m(oin)m(t)57 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(533)345 922 y(F.1.4)92 b(Choice)31 b(of)g(Axis)f(Ordering)49
-b(.)d(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(533)345
-1036 y(F.1.5)92 b(Alternate)32 b(Axis)f(Descriptions)50
-b(.)c(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(533)136 1150
-y(F.2)80 b(P)m(ap)s(er)31 b(I)s(I)e(-)i(Celestial)h(Co)s(ordinates)h(.)
-46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(534)345
-1264 y(F.2.1)92 b(Requiremen)m(ts)31 b(for)f(a)h(Successful)f(W)-8
-b(rite)32 b(Op)s(eration)61 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)60 b(534)345 1378 y(F.2.2)92 b(Choice)31
-b(of)g(LONPOLE/LA)-8 b(TPOLE)36 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(534)345 1492 y(F.2.3)92 b(User)31 b(De\014ned)f(Fiducial)h(P)m(oin)m
-(ts)82 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(536)345 1606
-y(F.2.4)92 b(Common)30 b(Non-Standard)g(F)-8 b(eatures)54
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)60 b(536)136 1720 y(F.3)80 b(P)m(ap)s(er)31
-b(I)s(I)s(I)d(-)j(Sp)s(ectral)f(Co)s(ordinates)82 b(.)45
-b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(537)345 1834
-y(F.3.1)92 b(Requiremen)m(ts)31 b(for)f(a)h(Successful)f(W)-8
-b(rite)32 b(Op)s(eration)61 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)60 b(537)345 1948 y(F.3.2)92 b(Common)30
-b(Non-Standard)g(F)-8 b(eatures)54 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(537)136 2062 y(F.4)80 b(P)m(ap)s(er)31 b(IV)f(-)h(Co)s(ordinate)f
-(Distortions)78 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(539)345 2176 y(F.4.1)92 b(The)30 b(\\-SIP")h(distortion)g(co)s(de)76
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(539)0 2386 y
-FD(G)54 b(Changes)35 b(and)g(New)f(F)-9 b(eatures)2239
-b(540)136 2500 y FF(G.1)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.1)
-47 b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(540)136 2614 y(G.2)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.2)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(541)136 2728 y(G.3)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.3)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(542)136 2842 y(G.4)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.4)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(543)136 2956 y(G.5)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.5)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(544)136 3070 y(G.6)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.6)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(545)136 3184 y(G.7)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.7)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(547)136 3298 y(G.8)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-2)
-42 b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(548)136
-3412 y(G.9)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-3)42
-b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(548)136
-3526 y(G.10)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-4)42
-b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(549)136
-3640 y(G.11)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-5)42
-b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(549)136
-3754 y(G.12)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-7)42
-b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(549)136
-3868 y(G.13)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-8)42
-b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(550)136
-3982 y(G.14)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-13)68
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(550)136
-4096 y(G.15)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V2.0)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(551)136 4210 y(G.16)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.0)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(553)136 4324 y(G.17)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.1)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(555)136 4438 y(G.18)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.2)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(556)136 4553 y(G.19)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.3)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(557)136 4667 y(G.20)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.4)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(558)136 4781 y(G.21)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.5)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(559)136 4895 y(G.22)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.6)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(560)136 5009 y(G.23)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.7)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(560)136 5123 y(G.24)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.0)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(560)136 5237 y(G.25)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.1)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(561)136 5351 y(G.26)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.2)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(561)136 5465 y(G.27)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.3)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(562)136 5579 y(G.28)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.4)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(563)136 5693 y(G.29)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.5)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(564)p eop end
-%%Page: 9 9
-TeXDict begin 9 8 bop 0 52 a Fy(SUN/211.26)3224 b FF(ix)136
-351 y(G.30)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.6)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(565)136 464 y(G.31)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V5.0)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(565)136 577 y(G.32)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V5.1)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(565)136 690 y(G.33)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V5.2)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(566)136 803 y(G.34)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V5.3)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(567)136 916 y(G.35)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V5.3-1)
-42 b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(568)p
-eop end
-%%Page: 10 10
-TeXDict begin 10 9 bop 0 52 a FF(x)3247 b Fy(SUN/211.26)p
-eop end
-%%Page: 1 11
-TeXDict begin 1 10 bop 3734 52 a FF(1)p 945 709 1890
-12 v 1755 898 a Fz(AST)1202 1047 y(A)45 b(Library)g(for)g(Handling)1097
-1196 y(W)-11 b(orld)45 b(Co)t(ordinate)h(Systems)1486
-1346 y(in)f(Astronom)l(y)1753 1592 y(V5.3)p 945 1783
-V 1111 2176 a Fx(This)33 b(is)g(the)g(C)f(version)h(of)g(this)g(do)-5
-b(cument.)985 2289 y(F)e(or)33 b(the)g(F)-7 b(ortr)i(an)35
-b(version,)e(ple)-5 b(ase)34 b(se)-5 b(e)33 b(SUN/210.)0
-2865 y Fz(1)135 b(In)l(tro)t(duction)0 3112 y FF(W)-8
-b(elcome)30 b(to)d(the)h(AST)e(library)-8 b(.)40 b(If)26
-b(y)m(ou)i(are)f(writing)g(soft)m(w)m(are)i(for)e(astronom)m(y)h(and)e
-(need)h(to)h(use)f(celestial)0 3225 y(co)s(ordinates)k(\()p
-Fx(e.g.)g FF(RA)f(and)g(Dec\),)i(sp)s(ectral)f(co)s(ordinates)h(\()p
-Fx(e.g.)e FF(w)m(a)m(v)m(elength,)j(frequency)-8 b(,)31
-b Fx(etc.)p FF(\),)g(or)f(other)0 3338 y(co)s(ordinate)i(system)f
-(information,)g(then)g(this)g(library)f(should)g(b)s(e)h(of)g(in)m
-(terest.)43 b(It)31 b(pro)m(vides)g(solutions)h(for)0
-3450 y(most)i(of)f(the)h(problems)e(y)m(ou)i(will)g(meet)g(and)e(allo)m
-(ws)j(y)m(ou)f(to)g(write)f(robust)g(and)f(\015exible)i(soft)m(w)m
-(are.)51 b(It)33 b(is)0 3563 y(able)e(to)g(read)f(and)g(write)h(W)m(CS)
-f(information)h(in)f(a)h(v)-5 b(ariet)m(y)31 b(of)g(formats,)g
-(including)f(FITS-W)m(CS.)0 3848 y Fw(1.1)112 b(What)38
-b(Problems)g(Do)s(es)f(AST)h(T)-9 b(ac)m(kle?)0 4064
-y FF(Here)43 b(are)h(some)f(of)g(the)g(main)g(problems)f(y)m(ou)h(ma)m
-(y)h(face)g(when)e(handling)g(w)m(orld)h(co)s(ordinate)g(system)0
-4177 y(\(W)m(CS\))31 b(information)g(and)f(the)g(solutions)h(that)g
-(AST)f(pro)m(vides:)0 4416 y FD(1.)47 b(The)34 b(V)-9
-b(ariet)m(y)35 b(of)g(Co)s(ordinate)g(Systems)227 4529
-y FF(Astronomers)29 b(use)g(a)g(wide)g(range)g(of)g(di\013ering)g(co)s
-(ordinate)h(systems)f(to)h(describ)s(e)e(p)s(ositions)h(within)227
-4642 y(a)24 b(v)-5 b(ariet)m(y)25 b(of)e(ph)m(ysical)h(domains.)39
-b(F)-8 b(or)24 b(instance,)h(there)f(are)g(a)g(large)g(n)m(um)m(b)s(er)
-e(of)i(celestial)i(co)s(ordinate)227 4755 y(systems)35
-b(in)g(use)f(within)h(astronom)m(y)h(to)f(describ)s(e)f(p)s(ositions)h
-(on)g(the)g(sky)-8 b(.)55 b(Understanding)34 b(these,)227
-4868 y(and)24 b(kno)m(wing)h(ho)m(w)f(to)h(con)m(v)m(ert)h(co)s
-(ordinates)f(b)s(et)m(w)m(een)g(them,)h(can)f(require)f(considerable)h
-(exp)s(ertise.)227 4981 y(It)34 b(can)g(also)g(b)s(e)f(di\016cult)h(to)
-g(decide)g(whic)m(h)f(of)h(them)f(y)m(our)h(soft)m(w)m(are)h(should)e
-(supp)s(ort.)48 b(The)33 b(same)227 5094 y(applies)25
-b(to)h(co)s(ordinate)g(systems)f(describing)f(other)h(domains,)h(suc)m
-(h)f(as)g(p)s(osition)g(within)g(an)f(electro-)227 5207
-y(magnetic)32 b(sp)s(ectrum.)227 5354 y FD(Solution.)69
-b FF(AST)39 b(has)h(built-in)f(kno)m(wledge)i(of)f(man)m(y)f(co)s
-(ordinate)i(systems)f(and)f(allo)m(ws)i(y)m(ou)f(to)227
-5467 y(con)m(v)m(ert)30 b(freely)e(b)s(et)m(w)m(een)h(them)f(without)g
-(sp)s(ecialist)h(kno)m(wledge.)41 b(This)28 b(a)m(v)m(oids)h(the)f
-(need)g(to)h(em)m(b)s(ed)227 5580 y(details)43 b(of)e(sp)s(eci\014c)g
-(co)s(ordinate)h(systems)f(in)g(y)m(our)g(soft)m(w)m(are.)75
-b(Y)-8 b(ou)42 b(also)g(b)s(ene\014t)f(automatically)227
-5693 y(when)30 b(new)g(co)s(ordinate)h(systems)f(are)h(added)f(to)h
-(AST.)p eop end
-%%Page: 2 12
-TeXDict begin 2 11 bop 0 52 a FF(2)2856 b Fy(1)91 b(INTR)m(ODUCTION)0
-351 y FD(2.)47 b(Storing)35 b(and)g(Retrieving)g(W)m(CS)g(Information)
-227 464 y FF(Storing)44 b(co)s(ordinate)h(system)f(information)g(in)f
-(astronomical)j(datasets)f(and)e(retrieving)h(it)g(later)227
-577 y(can)35 b(presen)m(t)g(a)g(considerable)g(c)m(hallenge.)56
-b(T)m(ypically)-8 b(,)37 b(it)f(requires)e(kno)m(wledge)h(of)g(rather)g
-(complex)227 690 y(con)m(v)m(en)m(tions)f(\()p Fx(e.g.)d
-FF(FITS\))g(whic)m(h)h(are)g(lo)m(w-lev)m(el,)j(often)d(mis-in)m
-(terpreted)g(and)f(ma)m(y)h(b)s(e)f(sub)5 b(ject)32 b(to)227
-803 y(c)m(hange.)66 b(Exc)m(hanging)39 b(information)g(with)f(other)g
-(soft)m(w)m(are)i(systems)e(is)h(further)e(complicated)j(b)m(y)227
-916 y(the)31 b(n)m(um)m(b)s(er)e(of)h(di\013eren)m(t)h(con)m(v)m(en)m
-(tions)i(in)d(use.)227 1085 y FD(Solution.)48 b FF(AST)32
-b(com)m(bines)h(a)f(unifying)g(high-lev)m(el)i(description)f(of)g(W)m
-(CS)f(information)h(with)f(the)227 1198 y(abilit)m(y)k(to)f(sa)m(v)m(e)
-i(and)c(restore)j(this)e(using)g(a)h(v)-5 b(ariet)m(y)36
-b(of)f(formats.)53 b(Details)36 b(of)f(the)g(formats,)h(whic)m(h)227
-1310 y(include)29 b(FITS,)f(are)h(handled)e(in)m(ternally)j(b)m(y)e
-(AST.)g(This)g(frees)h(y)m(ou)g(from)f(the)h(need)f(to)h(understand)227
-1423 y(them)k(or)g(em)m(b)s(ed)g(the)g(details)h(in)f(y)m(our)g(soft)m
-(w)m(are.)50 b(Again,)35 b(y)m(ou)e(b)s(ene\014t)f(automatically)k
-(when)c(new)227 1536 y(formats)f(are)g(added)e(to)i(AST.)0
-1761 y FD(3.)47 b(Generating)35 b(Graphical)g(Output)227
-1874 y FF(Pro)s(ducing)40 b(graphical)h(displa)m(ys)g(in)m(v)m(olving)h
-(curvilinear)e(co)s(ordinate)i(systems,)h(suc)m(h)d(as)h(celestial)227
-1987 y(co)s(ordinate)i(grids,)j(can)c(b)s(e)g(complicated.)78
-b(P)m(articular)44 b(di\016culties)f(arise)f(when)g(handling)f(large)
-227 2100 y(areas)35 b(of)e(sky)-8 b(,)35 b(the)f(p)s(olar)f(regions)h
-(and)f(discon)m(tin)m(uous)h(\()p Fx(e.g.)f FF(segmen)m(ted\))i(sky)e
-(pro)5 b(jections.)51 b(Ev)m(en)227 2213 y(just)30 b(n)m(um)m(b)s
-(ering)f(and)h(lab)s(elling)h(curvilinear)g(axes)g(is)f(rarely)h
-(straigh)m(tforw)m(ard.)227 2382 y FD(Solution.)73 b
-FF(AST)40 b(pro)m(vides)h(plotting)h(facilities)h(esp)s(ecially)f
-(designed)f(for)g(use)g(with)f(curvilinear)227 2495 y(co)s(ordinate)35
-b(systems.)49 b(These)33 b(include)h(the)f(plotting)i(of)e(axes)h(and)f
-(complete)i(lab)s(elled)f(co)s(ordinate)227 2607 y(grids.)65
-b(A)39 b(large)h(n)m(um)m(b)s(er)d(of)i(options)g(are)g(pro)m(vided)f
-(for)h(tailoring)h(the)e(output)h(to)g(y)m(our)g(sp)s(eci\014c)227
-2720 y(needs.)0 2945 y FD(4.)47 b(Aligning)35 b(Data)g(from)g
-(Di\013eren)m(t)g(Sources)227 3058 y FF(One)h(of)g(the)h(main)f(uses)f
-(of)i(co)s(ordinate)g(systems)f(is)g(to)h(facilitate)i(the)d(in)m
-(ter-comparison)h(of)g(data)227 3171 y(from)29 b(di\013eren)m(t)g
-(sources.)40 b(A)29 b(t)m(ypical)h(use)f(migh)m(t)g(b)s(e)g(to)g(plot)g
-(\(sa)m(y\))i(radio)e(con)m(tours)g(o)m(v)m(er)h(an)f(optical)227
-3284 y(image.)61 b(In)37 b(practice,)j(ho)m(w)m(ev)m(er,)g(di\013eren)m
-(t)d(celestial)i(co)s(ordinate)f(systems)f(ma)m(y)g(ha)m(v)m(e)h(b)s
-(een)e(used,)227 3397 y(making)31 b(accurate)h(alignmen)m(t)g(far)e
-(from)g(simple.)227 3566 y FD(Solution)h FF(AST)f(pro)m(vides)h(a)g
-(one-step)g(metho)s(d)g(of)f(aligning)i(datasets,)g(searc)m(hing)g(for)
-e(all)i(p)s(ossible)227 3679 y(in)m(termediate)39 b(co)s(ordinate)g
-(systems.)62 b(This)37 b(mak)m(es)h(it)g(simple)g(to)g(directly)h(in)m
-(ter-relate)g(the)f(pixel)227 3792 y(co)s(ordinates)31
-b(of)g(di\013eren)m(t)g(datasets.)0 4016 y FD(5.)47 b(Handling)35
-b(Di\013eren)m(t)g(T)m(yp)s(es)g(of)g(Co)s(ordinate)f(System)227
-4129 y FF(Not)44 b(all)g(co)s(ordinate)g(systems)e(used)h(in)f
-(astronom)m(y)i(are)f(celestial)j(ones,)g(so)d(if)g(y)m(ou)g(are)g
-(writing)227 4242 y(general-purp)s(ose)35 b(soft)m(w)m(are)h(suc)m(h)f
-(as)g(\(sa)m(y\))h(a)g(displa)m(y)f(to)s(ol,)i(y)m(ou)f(ma)m(y)f(also)h
-(need)f(to)g(handle)g(axes)227 4355 y(represen)m(ting)43
-b(w)m(a)m(v)m(elength,)48 b(distance,)e(time)d(or)f(whatev)m(er)h(else)
-h(comes)f(along.)77 b(Ob)m(viously)-8 b(,)46 b(y)m(ou)227
-4468 y(w)m(ould)30 b(prefer)g(not)h(to)g(handle)f(eac)m(h)h(one)g(as)g
-(a)f(sp)s(ecial)h(case.)227 4637 y FD(Solution)h FF(AST)f(uses)g(the)g
-(same)h(\015exible)f(high-lev)m(el)j(mo)s(del)d(to)h(describ)s(e)e(all)
-j(t)m(yp)s(es)e(of)h(co)s(ordinate)227 4750 y(system.)48
-b(This)32 b(allo)m(ws)i(y)m(ou)f(to)g(write)g(soft)m(w)m(are)h(that)g
-(handles)e(di\013eren)m(t)h(kinds)f(of)g(co)s(ordinate)i(axis)227
-4863 y(without)d(in)m(tro)s(ducing)f(sp)s(ecial)h(cases.)0
-5218 y Fw(1.2)112 b(Other)38 b(Design)g(Ob)6 b(jectiv)m(es)0
-5467 y FF(As)43 b(w)m(ell)i(as)f(its)f(scien)m(ti\014c)i(ob)5
-b(jectiv)m(es,)49 b(the)44 b(AST)e(library's)i(design)f(includes)g(a)h
-(n)m(um)m(b)s(er)e(of)i(tec)m(hnical)0 5580 y(criteria)c(in)m(tended)e
-(to)h(mak)m(e)g(it)g(applicable)h(to)f(as)g(wide)f(a)h(range)f(of)h
-(pro)5 b(jects)39 b(as)f(p)s(ossible.)65 b(The)38 b(main)0
-5693 y(considerations)31 b(are)g(describ)s(ed)e(here:)p
-eop end
-%%Page: 3 13
-TeXDict begin 3 12 bop 0 52 a Fy(1.2)92 b(Other)30 b(Design)h(Ob)5
-b(jectiv)m(es)2551 b FF(3)111 351 y(1.)46 b FD(Minim)m(um)36
-b(Soft)m(w)m(are)e(Dep)s(endencies.)41 b FF(The)30 b(AST)f(library)h
-(dep)s(ends)f(on)h(no)g(other)g(other)h(soft-)227 464
-y(w)m(are)411 431 y Fv(1)451 464 y FF(.)111 680 y(2.)46
-b FD(En)m(vironmen)m(t)d(Indep)s(endence.)61 b FF(AST)37
-b(is)g(designed)g(so)g(that)h(it)g(can)f(op)s(erate)h(in)f(a)h(v)-5
-b(ariet)m(y)38 b(of)227 793 y(\\programming)31 b(en)m(vironmen)m(ts")g
-(and)f(is)g(not)h(tied)g(to)g(an)m(y)g(particular)g(one.)41
-b(T)-8 b(o)31 b(allo)m(w)g(this,)g(it)g(uses)227 906
-y(simple,)g(\015exible)f(in)m(terfaces)i(to)f(obtain)g(the)g(follo)m
-(wing)h(services:)336 1154 y Fu(\017)46 b FD(Data)37
-b(Storage.)45 b FF(Data)34 b(I/O)e(op)s(erations)h(are)f(based)g(on)g
-(text)h(and/or)f(FITS)g(headers.)45 b(This)427 1267 y(mak)m(es)24
-b(it)g(easy)g(to)g(in)m(terface)h(to)e(a)h(wide)f(v)-5
-b(ariet)m(y)25 b(of)e(astronomical)i(data)f(formats)f(in)g(a)g(mac)m
-(hine-)427 1380 y(indep)s(enden)m(t)29 b(w)m(a)m(y)-8
-b(.)336 1541 y Fu(\017)46 b FD(Graphics.)74 b FF(Graphical)42
-b(output)f(is)g(pro)s(duced)f Fx(via)h FF(a)h(simple)f(generic)h
-(graphics)g(in)m(terface,)427 1653 y(whic)m(h)48 b(ma)m(y)h(easily)h(b)
-s(e)d(re-implemen)m(ted)i(o)m(v)m(er)h(di\013eren)m(t)f(graphics)f
-(systems.)94 b(AST)48 b(pro-)427 1766 y(vides)32 b(a)g(default)g
-(implemen)m(tation)h(based)f(on)f(the)h(widely-used)g(PGPLOT)f
-(graphics)g(system)427 1879 y(\(SUN/15\).)336 2040 y
-Fu(\017)46 b FD(Error)39 b(Handling.)52 b FF(Error)33
-b(messages)i(are)f(written)h(to)f(standard)f(error)h(b)m(y)g(default,)h
-(but)f(go)427 2153 y(through)k(a)i(simple)e(generic)i(in)m(terface)h
-(similar)e(to)g(that)h(used)e(for)g(graphics)h(\(ab)s(o)m(v)m(e\).)68
-b(This)427 2265 y(p)s(ermits)33 b(error)h(message)h(deliv)m(ery)f
-Fx(via)g FF(other)g(routes)g(when)f(necessary)h(\()p
-Fx(e.g.)51 b FF(in)33 b(a)i(graphical)427 2378 y(in)m(terface\).)111
-2627 y(3.)46 b FD(Multiple)h(Language)f(Supp)s(ort.)70
-b FF(AST)39 b(has)h(b)s(een)g(designed)g(to)h(b)s(e)e(called)j(from)d
-(more)i(than)227 2739 y(one)33 b(language.)50 b(Both)33
-b(C)f(and)g(F)-8 b(ortran)34 b(in)m(terfaces)g(are)f(a)m(v)-5
-b(ailable)35 b(\(see)f(SUN/210)g(for)f(the)g(F)-8 b(ortran)227
-2852 y(v)m(ersion\))31 b(and)f(use)g(from)g(C++)g(is)g(also)h(straigh)m
-(tforw)m(ard)g(if)g(the)f(C)g(in)m(terface)i(is)f(included)e(using:)427
-3087 y Ft(extern)41 b("C")i({)427 3187 y(#include)e("ast.h")427
-3286 y(})227 3535 y FF(A)d(JNI)g(in)m(terface)i(\(kno)m(wn)e(as)g
-(\\JNIAST")g(-)g(see)h(h)m(ttp://www.starlink.ac.uk/jniast/\))i(has)d
-(also)227 3648 y(b)s(een)30 b(dev)m(elop)s(ed)h(b)m(y)f(Starlink)g
-(whic)m(h)g(allo)m(ws)i(AST)e(to)h(b)s(e)e(used)h(from)g(Ja)m(v)-5
-b(a.)111 3864 y(4.)46 b FD(Ob)6 b(ject)44 b(Orien)m(ted)g(Design.)66
-b FF(AST)38 b(uses)g(\\ob)5 b(ject)40 b(orien)m(ted")g(tec)m(hniques)f
-(in)m(ternally)h(in)e(order)227 3977 y(to)h(pro)m(vide)f(a)g
-(\015exible)h(and)e(easily-extended)i(programming)f(mo)s(del.)63
-b(A)38 b(fairly)h(traditional)g(call-)227 4090 y(ing)f(in)m(terface)h
-(is)e(pro)m(vided,)i(ho)m(w)m(ev)m(er,)i(so)d(that)g(the)f(library's)h
-(facilities)h(are)f(easily)h(accessible)g(to)227 4202
-y(programmers)30 b(using)g(C)g(and)g(F)-8 b(ortran.)111
-4419 y(5.)46 b FD(P)m(ortabilit)m(y)-9 b(.)52 b FF(AST)33
-b(is)h(implemen)m(ted)h(en)m(tirely)g(in)e(ANSI)h(standard)f(C)h(and,)g
-(when)f(called)i Fx(via)f FF(its)227 4531 y(C)c(in)m(terface,)i(mak)m
-(es)g(no)e(explicit)i(use)e(of)g(an)m(y)h(mac)m(hine-dep)s(enden)m(t)f
-(facilities.)227 4696 y(The)42 b(F)-8 b(ortran)43 b(in)m(terface)g(is,)
-j(una)m(v)m(oidably)-8 b(,)46 b(mac)m(hine)d(dep)s(enden)m(t.)75
-b(Ho)m(w)m(ev)m(er,)48 b(the)42 b(p)s(oten)m(tial)i(for)227
-4809 y(problems)34 b(has)f(b)s(een)h(minimised)f(b)m(y)h(encapsulating)
-h(the)f(in)m(terface)i(la)m(y)m(er)g(in)d(a)i(compact)g(set)g(of)f(C)
-227 4922 y(macros)f(whic)m(h)g(facilitate)i(its)e(transfer)f(to)i
-(other)f(platforms.)47 b(No)33 b(F)-8 b(ortran)34 b(compiler)f(is)f
-(needed)h(to)227 5035 y(build)d(the)g(library)-8 b(.)227
-5199 y(Curren)m(tly)g(,)33 b(AST)f(is)h(supp)s(orted)d(b)m(y)j
-(Starlink)f(on)h(PC)f(Lin)m(ux,)g(Sun)f(Solaris)i(and)f(T)-8
-b(ru64)33 b(Unix)f(\(for-)227 5312 y(merly)f(DEC)f(UNIX\))h(platforms.)
-p 0 5425 1512 4 v 104 5479 a Fs(1)138 5510 y Fr(It)26
-b(no)n(w)g(comes)h(with)f(a)h(minimal)g(cut-do)n(wn)e(v)n(ersion)h(of)h
-(the)f(widely-a)n(v)l(ailable)h(SLALIB)e(p)r(ositional)j(astronom)n(y)e
-(library)0 5602 y(\(SUN/67\),)h(including)f(just)h(those)g(functions)g
-(needed)e(b)n(y)h(AST,)g(and)g(the)g(previous)h(dep)r(endency)e(on)h
-(SLALIB)g(is)h(no)g(longer)0 5693 y(presen)n(t)p eop
-end
-%%Page: 4 14
-TeXDict begin 4 13 bop 0 52 a FF(4)2856 b Fy(1)91 b(INTR)m(ODUCTION)0
-351 y Fw(1.3)112 b(What)38 b(Do)s(es)g(\\AST")f(Stand)h(F)-9
-b(or?)0 573 y FF(The)20 b(library)h(name)g(\\AST")g(stands)f(for)h
-(\\AST)-8 b(rometry)21 b(Library".)37 b(The)20 b(name)h(arose)h(when)d
-(it)j(w)m(as)f(though)m(t)0 686 y(that)36 b(kno)m(wledge)g(of)f
-(\\astrometry")h(\()p Fx(i.e.)f FF(celestial)j(co)s(ordinate)d
-(systems\))h(w)m(ould)e(form)h(the)g(bulk)f(of)h(the)0
-799 y(library)-8 b(.)40 b(In)27 b(fact,)i(it)f(turns)e(out)i(that)g
-(astrometry)h(forms)e(only)g(a)h(minor)f(comp)s(onen)m(t,)i(but)e(the)h
-(name)f(AST)0 911 y(has)j(stuc)m(k.)p eop end
-%%Page: 5 15
-TeXDict begin 5 14 bop 3734 52 a FF(5)0 351 y Fz(2)135
-b(Ov)l(erview)46 b(of)f(AST)f(Concepts)0 605 y FF(This)37
-b(section)i(presen)m(ts)f(a)g(brief)f(o)m(v)m(erview)i(of)f(AST)f
-(concepts.)64 b(It)38 b(is)g(in)m(tended)f(as)h(a)g(basic)g(orien)m
-(tation)0 718 y(course)31 b(b)s(efore)f(y)m(ou)g(mo)m(v)m(e)i(on)e(to)h
-(the)g(more)g(tec)m(hnical)h(considerations)f(in)f(subsequen)m(t)g
-(sections.)0 1015 y Fw(2.1)112 b(Relationships)39 b(Bet)m(w)m(een)e(Co)
-s(ordinate)h(Systems)0 1237 y FF(The)33 b(relationships)h(b)s(et)m(w)m
-(een)g(co)s(ordinate)h(systems)f(are)g(represen)m(ted)f(in)h(AST)f(b)m
-(y)g(Ob)5 b(jects)34 b(called)h(Map-)0 1350 y(pings.)j(A)24
-b(Mapping)f(do)s(es)h(not)g(represen)m(t)f(a)i(co)s(ordinate)f(system)g
-(itself,)i(but)d(merely)h(the)g(pro)s(cess)f(b)m(y)h(whic)m(h)0
-1463 y(y)m(ou)31 b(mo)m(v)m(e)h(from)d(one)i(co)s(ordinate)g(system)g
-(to)g(another)g(related)g(one.)0 1627 y(A)43 b(con)m(v)m(enien)m(t)h
-(picture)f(of)f(a)h(Mapping)g(is)f(as)h(a)g(\\blac)m(k)h(b)s(o)m(x")f
-(\(Figure)g(1\))g(in)m(to)h(whic)m(h)e(y)m(ou)h(can)f(feed)0
-1740 y(sets)f(of)g(co)s(ordinates.)144 b(F)-8 b(or)42
-b(eac)m(h)g(set)f(y)m(ou)g(feed)g(in,)i(the)e(Mapping)g(returns)e(a)i
-(corresp)s(onding)f(set)h(of)744 2867 y @beginspecial
-118 @llx 85 @lly 511 @urx 258 @ury 2751 @rwi @setspecial
-%%BeginDocument: sun211_figures/mapping.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 118 85 511 258
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/05 15:19:04
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-3923.75 2106.95 m
-3923.75 2181.35 3863.75 2242.55 3788.15 2242.55 c
-2378.15 2242.55 l
-2303.75 2242.55 2242.55 2181.35 2242.55 2106.95 c
-2242.55 1296.95 l
-2242.55 1222.55 2303.75 1161.35 2378.15 1161.35 c
-3788.15 1161.35 l
-3863.75 1161.35 3923.75 1222.55 3923.75 1296.95 c
-f*
-1 g
-3858.95 2163.35 m
-3858.95 2236.55 3798.95 2296.55 3725.75 2296.55 c
-2322.95 2296.55 l
-2248.55 2296.55 2188.55 2236.55 2188.55 2163.35 c
-2188.55 1359.35 l
-2188.55 1286.15 2248.55 1226.15 2321.75 1226.15 c
-3725.75 1226.15 l
-3798.95 1226.15 3858.95 1286.15 3858.95 1359.35 c
-f*
-8 w
-1 J
-1 j
-0 g
-3858.95 2163.35 m
-3858.95 2236.55 3798.95 2296.55 3725.75 2296.55 c
-2322.95 2296.55 l
-2248.55 2296.55 2188.55 2236.55 2188.55 2163.35 c
-2188.55 1359.35 l
-2188.55 1286.15 2248.55 1226.15 2321.75 1226.15 c
-3725.75 1226.15 l
-3798.95 1226.15 3858.95 1286.15 3858.95 1359.35 c
-h
-S
-3863.75 2052.95 318 15.5999 re
-Y
-3861.35 2061.35 m
-4174.55 2061.35 l
-S
-0 0 6120 7920 re
-Y
-3902.15 2061.35 m
-3902.15 2084.15 3884.15 2102.15 3862.55 2102.15 c
-3840.95 2102.15 3822.95 2084.15 3822.95 2061.35 c
-3822.95 2039.75 3840.95 2021.75 3862.55 2021.75 c
-3884.15 2021.75 3902.15 2039.75 3902.15 2061.35 c
-f*
-4133.75 2013.35 m
-4151.75 2061.35 l
-4133.75 2108.15 l
-4286.15 2061.35 l
-f*
-3863.75 1752.95 315.6 15.5999 re
-Y
-3861.35 1761.35 m
-4172.15 1761.35 l
-S
-0 0 6120 7920 re
-Y
-3902.15 1761.35 m
-3902.15 1784.15 3884.15 1802.15 3862.55 1802.15 c
-3840.95 1802.15 3822.95 1784.15 3822.95 1761.35 c
-3822.95 1739.75 3840.95 1721.75 3862.55 1721.75 c
-3884.15 1721.75 3902.15 1739.75 3902.15 1761.35 c
-f*
-4131.35 1713.35 m
-4149.35 1761.35 l
-4131.35 1808.15 l
-4283.75 1761.35 l
-f*
-3863.75 1452.95 318 15.5999 re
-Y
-3861.35 1461.35 m
-4174.55 1461.35 l
-S
-0 0 6120 7920 re
-Y
-3902.15 1461.35 m
-3902.15 1484.15 3884.15 1502.15 3862.55 1502.15 c
-3840.95 1502.15 3822.95 1484.15 3822.95 1461.35 c
-3822.95 1439.75 3840.95 1421.75 3862.55 1421.75 c
-3884.15 1421.75 3902.15 1439.75 3902.15 1461.35 c
-f*
-4133.75 1413.35 m
-4151.75 1461.35 l
-4133.75 1508.15 l
-4286.15 1461.35 l
-f*
-1763.75 2052.95 318 15.5999 re
-Y
-1761.35 2061.35 m
-2074.55 2061.35 l
-S
-0 0 6120 7920 re
-Y
-1802.15 2061.35 m
-1802.15 2084.15 1784.15 2102.15 1762.55 2102.15 c
-1740.95 2102.15 1722.95 2084.15 1722.95 2061.35 c
-1722.95 2039.75 1740.95 2021.75 1762.55 2021.75 c
-1784.15 2021.75 1802.15 2039.75 1802.15 2061.35 c
-f*
-2033.75 2013.35 m
-2051.75 2061.35 l
-2033.75 2108.15 l
-2186.15 2061.35 l
-f*
-1763.75 1452.95 318 15.5999 re
-Y
-1761.35 1461.35 m
-2074.55 1461.35 l
-S
-0 0 6120 7920 re
-Y
-1802.15 1461.35 m
-1802.15 1484.15 1784.15 1502.15 1762.55 1502.15 c
-1740.95 1502.15 1722.95 1484.15 1722.95 1461.35 c
-1722.95 1439.75 1740.95 1421.75 1762.55 1421.75 c
-1784.15 1421.75 1802.15 1439.75 1802.15 1461.35 c
-f*
-2033.75 1413.35 m
-2051.75 1461.35 l
-2033.75 1508.15 l
-2186.15 1461.35 l
-f*
-q[1 0 0 1 0 0]concat
-44 93 true[1 0 0 1 -1379 -1821]@85 imagemask
-+92B at s6q-1s8W,g
-+92B at s6p"Qs8Vus!!iQ(^]4?:s8RTL!!3-"!!!!"s8Duu!!3-!zs8Duu!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!3-!!!!!"s8Duu!!E9$!!!!$s8RTL!"],0^]4B7s8Vus+92B at s6q-1s8W,g+92B at s6p~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -1425 -1821]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-66 94 true[1 0 0 1 -1495 -1791]@85 imagemask
-J,fQKhuE`W!.Y%K
-s53kW!!!Q0s8V!W!!!!"s8VQgz!<<(Lz!!%NKz!!!"KrVuouz5Q1W_z!'gA]
-z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]"979Z!!!!`r"&i*
-z5Q!bGrr<$!!'gC2s8Tk7!!#7^rr>:Q!!!!`s7cR)p](9o5QBXA#Q+Q%!'gM!!!E3#!!#7`J,fWM
-!!!!`rr<$!s*t(L5Q1W_!.Vca!'gA]!!#7A!!#7]!!!!`huEaAqu?]s+7K715PtK]!$Ct9!'gA]!!!Q)!!#7]!!!!0
-qu?^]qu?]s&,ZD-5PtK]!!iK'!'gA]!!!9'!!#7]!!!!(rVup_qu?]s#QFc(5PtK]!!iN(!'gA]!!!-$
-!!#7]!!!!$s*t)6qu?]s"93lO5PtK]!!E7O!'gA]!!!-$J,hh3!!!!$s*t)6qu?]s"96.:5PtK]!!E8:
-!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s"96.:5PtK]!!E8:!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s#QMR>5PtK]!!iP>
-!'gA]!!!9(^]6Us!!!!(s1eV!qu?]s#QMR>5PtK]!"]*[!'gA]!!!Q0J,hh3!!!!0s*t)6qu?]s+9-ik
-5PtK]!$D5k!'gA]!!",@!!#7]!!!!`rr<$`qu?]sJ,]KK5Q1W_!.XtJ!'gJ`!!*&u!!#7`J,fWMqu?^]
-s1eU:s82isJ,eF,#QOQ!!<<#m!"],!!.Y%Hrr at QKn,Rt<r."bHs53lAs85+]s8Tk7#QO]Ds8W+L!!*&s&-)\0!!!!@qud!!rVuou"8i3"s7cQo!!%BHJ,eF,!!!!=!"]*[!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 64 true[1 0 0 1 -1565 -1820]@85 imagemask
-!!!9(J-!Fc!!!!@
-s53qIzJ,f9ErVuou!<<)u!WTq8!!3-"rrN/t!!!-$s8RZMs*t(Ss8W,8s8V!W&-)\0iW&r9!"],!
-#P%il!!!Q0^]F92n,NG1s*t)ts53kW+9)<@+917!!$D4@!"]+F!!#7_!!!9(^]4@!rVup's1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!
-s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$
-^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!
-qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!%NH
-!!!-$^]4 at aqu?^%s1eU7s82is#QMR>!WW&t!"]+F!!iQ%!!%NK^]8laqu at 9-s1eVas82j-s8Tk7~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -1635 -1820]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-88 97 true[1 0 0 1 -1189 -1651]@85 imagemask
-z!$D6Vz
-!!!!$s8W&uz!!#7`s8V!Wz!WW3"s7cQo!!!!(s8W-!rr<$!!!", at s8W-!^]4?7!.Y%KJ-Z,D
-zs8VQg!'g5Y!!!-$s1eU7#Q=]'!!iQ'!!!!"rr<$!&-)D)!!!"K^]4@!s6p!g!!",!!!%NK^]4?7
-!"\Q!!<<(Lz"8Diss8N'!!!!!"qu?ctrVuou!!!"J!!E9!z!!#4`#QOQ!z!$;1Os6p!gz%fd.?
-n,NFg!!!!'!$D7!zz5QAM!z!!!!`s1eU7z!!%NKJ,fQLz!.Y$!zz
-s8N'!z!!!$!rr<$!z!!*'!zz!WW-!z!!!!"s8Duuz!!!'"rVuouz
-!!E9!zz"989!z!!!!$s82isz!!!9(qu?]sz!!iQ!zz#QOQ!z!!!!(s7cQo
-z!!!9(p](9oz!!iQ!zz&-)D)z!!!!0s6p!gz!!!Q0n,NFgz!"],!
-zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0
-s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!z
-z#QO8nz!!!!(s6p!gz!!!9(p](9oz!!iQ!zz#QOQ!z!!!!$s7cQo
-z!!!-$p](9oz!!E9!zz"989!z!!!!"s82isz!$21 at qu?]sz*Wc<?
-z!!!!?!<<#uz!!#1_s8Duuz!'UC4rr<$!z4og*4z!!!"J!'gL6z!!%HJ5Q?66z
-!.4bgs*t(Lzqu at i=^]4?7!!!#s!"]+fz!!2ut#QN]^z"8i-$s6p!g!!!!$qu?j!p](9o
-!!!9%!!3,pz!"\u-!<;rsz+8c*=J,TEJ!!!!`qu?^]rr<$!!!%NH!!", at J,fQL!<;rs!"]+F
-!!!!"s82is#QO8n!!!-$qu?]ts7cQo!!iQ%!!!$!rVuou+926=!!#7`J,fS!s82is!$D71!!E9$qu?]s
-#QOf(+92B=!!!!"s8W-!s5X"W!!!"Ks8W,u!;lfs!!!Q0s8V!WHiO-H!!3-"rVup\z!"]+F!!#+~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -1283 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -1352 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -1422 -1653]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-69 97 true[1 0 0 1 -1469 -1652]@85 imagemask
-!!!'"n,_GI!!!!0
-s8E&sz5QCb7rr<$!!<<*!_>iEn!!3-"s5F"U!!!9(s8VWhs*t([s8W,ps8VQg+926=rVuom!$D7!
-!'gM`p]*PY^]4oFqu?_Hs*t(Ss6p!gJ,]KK"97ij!<<#u!!E8Z!!3,t!!!'"huEfXp](9ps53kXs6p!g
-!WV'X"97ij!!3,X!!E8Z!!!'"huElZhuE`Xs53k^s53kW!WV'X#QMR>!!3,X!!iP>!!!'"huF#^^]4?8s53kfs*t(L
-!WV'X&-%.[!!3,X!"]*[!!!'"huF;fJ,fQMs53kfs*t(L!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"
-s53kfrr<$!!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"s53kfrr<$!!WV'X#QFc(!!3,X!!iN(!!!'"
-huF#^!!!!"s53k^rr<$!!WV'X#QFc(!!3,X!!E6$!!!'"huElZJ,fQMs53kZs*t(L!WV'X!WRZM!!3,X!!3+M!!!'"
-huEfXJ,fQMs53kWs1eU7!WV'X!<9h7!!3,X!!%Ma!!!'"huEb,huE`Xs53kW5MuMA"979Z!$C\1!!E8Z
-!!",1!!!-$huE`fp](:!s53kW#Q+Q%&-(Pf!!E-!!"]+f!!!'!!!", at huE`Ws*t)6s53kW!.Vcas8V!W
-!!#7Q"9&8X!!!!0s8VWhhuE`W#QOh_s53kW!!3-"JcFX.!!!!`rW3&Wz!!!'"huE`W!!!!"s53kWz!WV'X
-z!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kW
-z!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W
-!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!$s53kWz#QN]^z"98DZz!!E9$huE`W
-!!!-$s53kWz5QBXAz!!E8Zz!!!"KhuE`Wz&)[Efz!!2!Xz!!!!A!!~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -1538 -1653]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -1578 -1653]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -1647 -1652]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -1710 -1652]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -1748 -1652]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -1811 -1652]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-96 97 true[1 0 0 1 -4574 -1819]@85 imagemask
-z!"]*[z
-z"98E#zz+92B@^]4?7zs8W-!p](9o!!!!$s8W-!rVuou!!!!0s82lss*t(L!!!!`
-s1eUVs53kW!!!"KrVup#s6p!g!!!'"p](9os82is!!!-$n,NFgJ,TEJ!!!9(^]4?7+9)<@!!!Q0J,fQL
-&-%.[!!", at z#QMR>!!#7_z"979Z!!%NHz!WVWh!!*&oz!WVop!!3,pz!<;rs!!E8jz
-!.XtJ!!E8jz!.XtJ!!iP^z!'gJ`!"]+Fz!'gL6!"]+Fz!$D5k!$D6Vz!$D6V
-!$D5kz!"]+F!'gL6z!"]+f!'gJ`z!!iP^!.Y"Kz!!iPn!.Y"Kz!!iPn!<<#u
-z!!E8r!<<#uz!!E8r!<<#uz!!E8r!WW-!z!!E9!!WW-!z!!3,t!WW&tz!!3,t!WW&t
-z!!3,t"989!z!!3-!"989!z!!3-!"989!z!!3-!"989!z!!3-!"98,rz
-!!*&u"98,rz!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!
-#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!
-#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!
-z!!*&u"989!z!!*&u"989!z!!3-!"989!z!!3-!"989!z!!3-!"989!z
-!!3-!!WW&tz!!3,t!WW&tz!!3,t!WW-!z!!E9!!WW-!z!!E9!!<<#uz!!E8r!<<#uz
-!!E8r!<<'!z!!iQ!!.Y"Kz!!iPn!.Y"Kz!!iPn!'gL6z!!iP^!'gL6z!"]+f
-!$D5kz!"]+F!$D6Vz!$D6V!"]+Fz!$D5k!"]+fz!'gL6!!iP^z!'gJ`!!E8j
-z!.XtJ!!3,hz!.XtJ!!3,pz!<;rs!!*&sz!WVop!!%NHz"97ij!!#7_z"979Z!!", at z#QMR>!!!Q0^]4?7+9-ik!!!9(huE`W
-5Q:]`!!!-$n,NFgJ,TEJ!!!$!qu?]ts7cQo!!!"Krr<$(s6p!g!!!!@s1eUVs1eU7!!!!0s82otrr<$!
-!!!!$s8W-!qu?]szJ,fQKn,NFgz+92B@^]4?7z!WW2tzz!"]*[z~>
-Q
-q[1 0 0 1 0 0]concat
-67 64 true[1 0 0 1 -4675 -1820]@85 imagemask
-!!!9(J-!Fc!!!!@
-s53qIzJ,f9ErVuou!<<)u!WTq8!!3-"rrN/t!!!-$s8RZMs*t(Ss8W,8s8V!W&-)\0iW&r9!"],!
-#P%il!!!Q0^]F92n,NG1s*t)ts53kW+9)<@+917!!$D4@!"]+F!!#7_!!!9(^]4@!rVup's1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!
-s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$
-^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!
-qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!%NH
-!!!-$^]4 at aqu?^%s1eU7s82is#QMR>!WW&t!"]+F!!iQ%!!%NK^]8laqu at 9-s1eVas82j-s8Tk7~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -4745 -1820]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-66 94 true[1 0 0 1 -4784 -1791]@85 imagemask
-J,fQKhuE`W!.Y%K
-s53kW!!!Q0s8V!W!!!!"s8VQgz!<<(Lz!!%NKz!!!"KrVuouz5Q1W_z!'gA]
-z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]"979Z!!!!`r"&i*
-z5Q!bGrr<$!!'gC2s8Tk7!!#7^rr>:Q!!!!`s7cR)p](9o5QBXA#Q+Q%!'gM!!!E3#!!#7`J,fWM
-!!!!`rr<$!s*t(L5Q1W_!.Vca!'gA]!!#7A!!#7]!!!!`huEaAqu?]s+7K715PtK]!$Ct9!'gA]!!!Q)!!#7]!!!!0
-qu?^]qu?]s&,ZD-5PtK]!!iK'!'gA]!!!9'!!#7]!!!!(rVup_qu?]s#QFc(5PtK]!!iN(!'gA]!!!-$
-!!#7]!!!!$s*t)6qu?]s"93lO5PtK]!!E7O!'gA]!!!-$J,hh3!!!!$s*t)6qu?]s"96.:5PtK]!!E8:
-!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s"96.:5PtK]!!E8:!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s#QMR>5PtK]!!iP>
-!'gA]!!!9(^]6Us!!!!(s1eV!qu?]s#QMR>5PtK]!"]*[!'gA]!!!Q0J,hh3!!!!0s*t)6qu?]s+9-ik
-5PtK]!$D5k!'gA]!!",@!!#7]!!!!`rr<$`qu?]sJ,]KK5Q1W_!.XtJ!'gJ`!!*&u!!#7`J,fWMqu?^]
-s1eU:s82isJ,eF,#QOQ!!<<#m!"],!!.Y%Hrr at QKn,Rt<r."bHs53lAs85+]s8Tk7#QO]Ds8W+L!!*&s&-)\0!!!!@qud!!rVuou"8i3"s7cQo!!%BHJ,eF,!!!!=!"]*[!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 64 true[1 0 0 1 -4854 -1820]@85 imagemask
-!!!9(J-!Fc!!!!@
-s53qIzJ,f9ErVuou!<<)u!WTq8!!3-"rrN/t!!!-$s8RZMs*t(Ss8W,8s8V!W&-)\0iW&r9!"],!
-#P%il!!!Q0^]F92n,NG1s*t)ts53kW+9)<@+917!!$D4@!"]+F!!#7_!!!9(^]4@!rVup's1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!
-s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$
-^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!
-qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!%NH
-!!!-$^]4 at aqu?^%s1eU7s82is#QMR>!WW&t!"]+F!!iQ%!!%NK^]8laqu at 9-s1eVas82j-s8Tk7~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -4923 -1820]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-88 97 true[1 0 0 1 -4430 -1651]@85 imagemask
-z!$D6Vz
-!!!!$s8W&uz!!#7`s8V!Wz!WW3"s7cQo!!!!(s8W-!rr<$!!!", at s8W-!^]4?7!.Y%KJ-Z,D
-zs8VQg!'g5Y!!!-$s1eU7#Q=]'!!iQ'!!!!"rr<$!&-)D)!!!"K^]4@!s6p!g!!",!!!%NK^]4?7
-!"\Q!!<<(Lz"8Diss8N'!!!!!"qu?ctrVuou!!!"J!!E9!z!!#4`#QOQ!z!$;1Os6p!gz%fd.?
-n,NFg!!!!'!$D7!zz5QAM!z!!!!`s1eU7z!!%NKJ,fQLz!.Y$!zz
-s8N'!z!!!$!rr<$!z!!*'!zz!WW-!z!!!!"s8Duuz!!!'"rVuouz
-!!E9!zz"989!z!!!!$s82isz!!!9(qu?]sz!!iQ!zz#QOQ!z!!!!(s7cQo
-z!!!9(p](9oz!!iQ!zz&-)D)z!!!!0s6p!gz!!!Q0n,NFgz!"],!
-zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0
-s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!z
-z#QO8nz!!!!(s6p!gz!!!9(p](9oz!!iQ!zz#QOQ!z!!!!$s7cQo
-z!!!-$p](9oz!!E9!zz"989!z!!!!"s82isz!$21 at qu?]sz*Wc<?
-z!!!!?!<<#uz!!#1_s8Duuz!'UC4rr<$!z4og*4z!!!"J!'gL6z!!%HJ5Q?66z
-!.4bgs*t(Lzqu at i=^]4?7!!!#s!"]+fz!!2ut#QN]^z"8i-$s6p!g!!!!$qu?j!p](9o
-!!!9%!!3,pz!"\u-!<;rsz+8c*=J,TEJ!!!!`qu?^]rr<$!!!%NH!!", at J,fQL!<;rs!"]+F
-!!!!"s82is#QO8n!!!-$qu?]ts7cQo!!iQ%!!!$!rVuou+926=!!#7`J,fS!s82is!$D71!!E9$qu?]s
-#QOf(+92B=!!!!"s8W-!s5X"W!!!"Ks8W,u!;lfs!!!Q0s8V!WHiO-H!!3-"rVup\z!"]+F!!#+~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -4524 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -4593 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -4664 -1653]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-69 97 true[1 0 0 1 -4710 -1652]@85 imagemask
-!!!'"n,_GI!!!!0
-s8E&sz5QCb7rr<$!!<<*!_>iEn!!3-"s5F"U!!!9(s8VWhs*t([s8W,ps8VQg+926=rVuom!$D7!
-!'gM`p]*PY^]4oFqu?_Hs*t(Ss6p!gJ,]KK"97ij!<<#u!!E8Z!!3,t!!!'"huEfXp](9ps53kXs6p!g
-!WV'X"97ij!!3,X!!E8Z!!!'"huElZhuE`Xs53k^s53kW!WV'X#QMR>!!3,X!!iP>!!!'"huF#^^]4?8s53kfs*t(L
-!WV'X&-%.[!!3,X!"]*[!!!'"huF;fJ,fQMs53kfs*t(L!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"
-s53kfrr<$!!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"s53kfrr<$!!WV'X#QFc(!!3,X!!iN(!!!'"
-huF#^!!!!"s53k^rr<$!!WV'X#QFc(!!3,X!!E6$!!!'"huElZJ,fQMs53kZs*t(L!WV'X!WRZM!!3,X!!3+M!!!'"
-huEfXJ,fQMs53kWs1eU7!WV'X!<9h7!!3,X!!%Ma!!!'"huEb,huE`Xs53kW5MuMA"979Z!$C\1!!E8Z
-!!",1!!!-$huE`fp](:!s53kW#Q+Q%&-(Pf!!E-!!"]+f!!!'!!!", at huE`Ws*t)6s53kW!.Vcas8V!W
-!!#7Q"9&8X!!!!0s8VWhhuE`W#QOh_s53kW!!3-"JcFX.!!!!`rW3&Wz!!!'"huE`W!!!!"s53kWz!WV'X
-z!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kW
-z!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W
-!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!$s53kWz#QN]^z"98DZz!!E9$huE`W
-!!!-$s53kWz5QBXAz!!E8Zz!!!"KhuE`Wz&)[Efz!!2!Xz!!!!A!!~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -4779 -1653]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -4819 -1653]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -4889 -1652]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -4951 -1652]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -4989 -1652]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -5052 -1652]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-0.201248 i
-2711.08 1704.82 m
-2702.03 1705.43 2700.01 1707.44 2692.97 1722.33 c
-2642.86 1836.42 l
-2638.83 1836.42 l
-2596.97 1737.83 l
-2584.09 1708.45 2581.68 1705.43 2572.02 1704.82 c
-2572.02 1701 l
-2611.87 1701 l
-2611.87 1704.8 l
-2602.21 1704.8 2598.18 1707.42 2598.18 1713.07 c
-2598.18 1715.49 2598.79 1718.31 2599.79 1720.92 c
-2609.05 1745 l
-2661.78 1745 l
-2670.03 1725.15 l
-2672.44 1719.51 2673.85 1714.48 2673.85 1711.46 c
-2673.85 1709.65 2672.64 1707.44 2671.03 1706.63 c
-2668.62 1705.23 2667.01 1704.8 2659.76 1704.8 c
-2659.76 1701 l
-2711.08 1701 l
-h
-2612.47 1753 m
-2635.61 1808.06 l
-2658.96 1753 l
-h
-2714.3 1701 m
-f*
-2763.31 1701 m
-f*
-2898 1816.32 m
-2898 1725.15 l
-2898 1708.45 2895.67 1705.83 2880.33 1704.82 c
-2880.33 1701 l
-2936.68 1701 l
-2936.68 1704.82 l
-2921.99 1705.83 2919 1708.65 2919 1722.94 c
-2919 1812.29 l
-2919 1826.58 2921.64 1829.2 2936.68 1830.4 c
-2936.68 1834 l
-2896.63 1834 l
-2852.15 1732.6 l
-2805.67 1834 l
-2765.82 1834 l
-2765.82 1830 l
-2782.32 1829.02 2785 1826.65 2785 1812.29 c
-2785 1730.58 l
-2785 1709.85 2782.17 1706.03 2765.42 1704.82 c
-2765.42 1701 l
-2812.71 1701 l
-2812.71 1705 l
-2797.21 1705.8 2794 1710.4 2794 1730.58 c
-2794 1811.69 l
-2844.31 1701 l
-2847.12 1701 l
-h
-2941.91 1701 m
-f*
-3029.95 1714.28 m
-3026.53 1711.47 3024.12 1709.99 3021.1 1709.99 c
-3016.47 1709.99 3015 1712.92 3015 1722.13 c
-3015 1761.37 l
-3015 1771.64 3014.01 1777.27 3011.24 1781.9 c
-3007.01 1789.55 2998.36 1794.01 2986.08 1794.01 c
-2975.82 1794.01 2966.16 1791.03 2960.52 1786.13 c
-2955.49 1781.9 2952 1776.07 2952 1771.03 c
-2952 1766.41 2955.94 1762.38 2960.92 1762.38 c
-2965.75 1762.38 2969.98 1766.41 2969.98 1770.83 c
-2969.98 1771.64 2969.78 1772.64 2969.58 1774.05 c
-2969.18 1775.86 2969 1777.47 2969 1778.88 c
-2969 1784.32 2975.43 1789.01 2983.46 1789.01 c
-2993.33 1789.01 2999 1783.08 2999 1772.04 c
-2999 1759.76 l
-2967.83 1747.29 2964.39 1745.68 2955.69 1738.03 c
-2951.26 1734 2948.45 1727.16 2948.45 1720.52 c
-2948.45 1707.84 2957.1 1698.99 2969.58 1698.99 c
-2978.43 1698.99 2986.68 1703.21 2998.96 1713.68 c
-2999.97 1703.01 3003.59 1698.99 3011.84 1698.99 c
-3018.68 1698.99 3022.91 1701.4 3029.95 1709.05 c
-h
-2999 1725.75 m
-2999 1719.51 2997.95 1717.7 2993.53 1715.09 c
-2988.7 1712.27 2983.06 1710.99 2978.84 1710.99 c
-2971.79 1710.99 2966.18 1717.69 2966.18 1726.16 c
-2966.18 1726.96 l
-2966.18 1738.83 2974.49 1746.08 2999 1754.93 c
-h
-3030.35 1701 m
-f*
-3031.81 1780.09 m
-3033.62 1780.29 3035.03 1780.29 3036.84 1780.29 c
-3043.69 1780.29 3045 1778.28 3045 1768.82 c
-3045 1674.64 l
-3045 1664.17 3042.8 1661.96 3031.01 1660.75 c
-3031.01 1658 l
-3079.71 1658 l
-3079.71 1662 l
-3064.61 1662.19 3062 1664.25 3062 1676.05 c
-3062 1707.64 l
-3069.24 1701 3073.87 1698.99 3082.32 1698.99 c
-3106.27 1698.99 3124 1721.53 3124 1750.71 c
-3124 1775.66 3110.16 1794.01 3090.98 1794.01 c
-3079.71 1794.01 3070.85 1789.05 3062 1777.68 c
-3062 1793.17 l
-3060.79 1793.57 l
-3050.12 1789.35 3042.88 1786.73 3031.81 1783.31 c
-h
-3062 1768.22 m
-3062 1774.25 3073.27 1782.01 3082.53 1782.01 c
-3097.42 1782.01 3107 1766.52 3107 1742.66 c
-3107 1720.52 3097.25 1704.99 3082.93 1704.99 c
-3073.47 1704.99 3062 1712.47 3062 1718.71 c
-h
-3130.62 1701 m
-f*
-3130.81 1780.09 m
-3132.62 1780.29 3134.03 1780.29 3135.84 1780.29 c
-3142.69 1780.29 3144 1778.28 3144 1768.82 c
-3144 1674.64 l
-3144 1664.17 3141.8 1661.96 3130.01 1660.75 c
-3130.01 1658 l
-3178.71 1658 l
-3178.71 1662 l
-3163.61 1662.19 3161 1664.25 3161 1676.05 c
-3161 1707.64 l
-3168.24 1701 3172.87 1698.99 3181.32 1698.99 c
-3205.27 1698.99 3223 1721.53 3223 1750.71 c
-3223 1775.66 3209.16 1794.01 3189.98 1794.01 c
-3178.71 1794.01 3169.85 1789.05 3161 1777.68 c
-3161 1793.17 l
-3159.79 1793.57 l
-3149.12 1789.35 3141.88 1786.73 3130.81 1783.31 c
-h
-3161 1768.22 m
-3161 1774.25 3172.27 1782.01 3181.53 1782.01 c
-3196.42 1782.01 3206 1766.52 3206 1742.66 c
-3206 1720.52 3196.25 1704.99 3181.93 1704.99 c
-3172.47 1704.99 3161 1712.47 3161 1718.71 c
-h
-3229.62 1701 m
-f*
-3265.22 1793.57 m
-3234.02 1782.51 l
-3234.02 1779.49 l
-3235.64 1779.69 l
-3238.05 1780.09 3240.67 1779.8 3242.48 1779.8 c
-3247.31 1779.8 3249 1776.71 3249 1768.22 c
-3249 1721.53 l
-3249 1707.04 3247 1704.82 3233.22 1704.02 c
-3233.22 1701 l
-3280.92 1701 l
-3280.92 1704.02 l
-3267.63 1705.02 3266 1707.04 3266 1721.53 c
-3266 1792.97 l
-h
-3255.96 1839 m
-3250.33 1839 3245 1834.12 3245 1828.19 c
-3245 1822.35 3249.73 1818 3255.76 1818 c
-3261.8 1818 3266 1822.4 3266 1828.19 c
-3266 1833.82 3261.47 1839 3255.96 1839 c
-h
-3285.95 1701 m
-f*
-3288.22 1781.1 m
-3289.63 1781.7 3291.44 1781.9 3293.65 1781.9 c
-3299.29 1781.9 3301 1778.88 3301 1769.02 c
-3301 1719.11 l
-3301 1707.64 3298.8 1704.82 3288.62 1704.02 c
-3288.62 1701 l
-3331.29 1701 l
-3331.29 1704.02 l
-3321.02 1704.82 3318 1707.24 3318 1714.48 c
-3318 1771.03 l
-3327.46 1780.09 3332.09 1783.01 3338.73 1783.01 c
-3348.59 1783.01 3353 1776.61 3353 1762.98 c
-3353 1720.92 l
-3353 1708.24 3350.47 1704.82 3340.75 1704.02 c
-3340.75 1701 l
-3382.61 1701 l
-3382.61 1704.02 l
-3372.74 1705.02 3370 1707.44 3370 1717.3 c
-3370 1763.39 l
-3370 1782.3 3361.27 1794.01 3346.58 1794.01 c
-3337.32 1794.01 3331.08 1790.5 3317.4 1777.27 c
-3317.4 1793.17 l
-3315.99 1793.57 l
-3306.13 1789.95 3299.29 1787.74 3288.22 1784.52 c
-h
-3385.62 1701 m
-f*
-3479.59 1779 m
-3479.59 1787 l
-3464.09 1787 l
-3460.07 1787 3457.05 1787.58 3453.02 1788.95 c
-3448.59 1790.56 l
-3443.16 1792.57 3437.73 1794.01 3432.5 1794.01 c
-3413.78 1794.01 3399.25 1779.33 3399.25 1760.77 c
-3399.25 1748.09 3404.38 1740.44 3417.6 1733.8 c
-3414.79 1730.99 3411.97 1728.37 3408.95 1725.75 c
-3402.31 1719.92 3400.06 1715.89 3400.06 1711.87 c
-3400.06 1707.44 3402.19 1705.23 3410.36 1701.2 c
-3395.87 1690.74 3391 1684.1 3391 1676.65 c
-3391 1665.98 3406.33 1657 3425.45 1657 c
-3439.94 1657 3455.24 1661.88 3465.7 1670.01 c
-3473.95 1676.45 3478 1683.09 3478 1691.14 c
-3478 1703.62 3468.45 1712.07 3453.43 1712.67 c
-3427.46 1713.88 l
-3416.6 1714.28 3411.77 1716.09 3411.77 1719.31 c
-3411.77 1723.34 3418.41 1730.38 3423.84 1731.99 c
-3427.67 1731.59 l
-3431.29 1731.19 3434.1 1731 3435.31 1731 c
-3442.36 1731 3450.2 1733.81 3456.24 1738.84 c
-3463.49 1744.47 3466 1751.72 3466 1762.18 c
-3466 1767.99 3465.18 1772.59 3462.88 1779 c
-h
-3414.58 1700.6 m
-3421.43 1699.19 3437.32 1697.98 3447.19 1697.98 c
-3465.5 1697.98 3472 1695.57 3472 1688.12 c
-3472 1676.45 3456.76 1668 3433.9 1668 c
-3416.19 1668 3405 1674.07 3405 1683.29 c
-3405 1687.92 3406.76 1690.94 3414.58 1700.6 c
-h
-3415.59 1769.02 m
-3415.59 1780.9 3421.23 1788.01 3430.48 1788.01 c
-3436.72 1788.01 3441.95 1784.57 3445.17 1778.48 c
-3449 1771.44 3451 1762.38 3451 1754.13 c
-3451 1743.06 3445.25 1736 3436.32 1736 c
-3423.84 1736 3415.59 1749.09 3415.59 1768.42 c
-h
-3485.62 1701 m
-f*
-q[1 0 0 1 0 0]concat
-76 93 true[1 0 0 1 -2731 -2481]@85 imagemask
-5QCc`s*t(L!!#7`
-s8W+Lz5QCc`s*t(L!!!$!s8VQgz!$D7 at z!!!!0s8Duuz!"],-z!!!!(s7cQo
-z!!iQ!z!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz
-!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$
-s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!g
-z!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jzhuE`Zs6p!g!!(pW
-!!E8j!!!!"huE`Zs6p!g!!2!X!!E8j!!!!"huE`Zs6p!g!!2!X!!E8j!!!!"huE`Zs6p!g!!D-Z!!E8j!!!!$huE`Z
-s6p!g!!hE^!!E8j!!!!(huE`Zs6p!g!"[uf!!E8j!!!!`huE`Zs6p!g!WV'X!!E9$s8W-!huE`Zs8W-!
-s8V!W!!E9$s8W-!huE`Zs8W-!s8V!W!!E9$s8W-!huE`Zs6p!g!WV'X!!E8j!!!!`huE`Zs6p!g!$C,!
-!!E8j!!!!0huE`Zs6p!g!!hE^!!E8j!!!!$huE`Zs6p!g!!D-Z!!E8j!!!!$huE`Zs6p!g!!2!X!!E8j!!!!"huE`Z
-s6p!g!!2!X!!E8j!!!!"huE`Zs6p!g!!(pW!!E8jzhuE`Zs6p!gz!!E8jz!!!!$s6p!g
-z!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!g!!!"<
-!!E8jz!,qo?s6p!g!!!#g!!E8jz!:Tsjs6p!g!!!#g!!E8jz!:Tsjs6p!g!!!&h!!E8j
-z!Up'ks6p!g!!!,j!!E8jz"7Q9ms6p!g!!!8n!!iPnz&+BQ(s6p!g!!",1!"],)z
-J+*F[s82is!!iPn!'gM`s8W-!s6p-js8W-!s8W,g5QCc`s8W-!s6r8Qs8W-!s8W,g5QCc`s8W-!s6p~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -2809 -2480]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -2879 -2481]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-97 65 true[1 0 0 1 -2927 -2479]@85 imagemask
-z^]4?7(]XO9
-z!Pe[8!#tt=z!!2!X!!#+]z!!!,Z!!!!_z!!!!$n,NFgIK0?Jz"7Q9j!.OtK
-z!!i9!!!%KKz!!!9!!!!$!z!!!!0qu?]ss*t(Lz&,ZD-!WRZMz!"]&/!!3,8
-z!!",?!!!'"^]4?7!!!!@rr<$$s1eU7z5Q:]`"979Zz!'gL6!!E8Zz!!#7`J,fiSn,NFg!!!"K
-s1eU>s6p!gzJ,d:a&-),!z!<;f/!"],)z!!*&nhuF;ep](9o!!!$!j59nZr;6Np!!!!"
-s5WSK+8l$:z!WV-J!'gC/z!!E8;p]*PRIK0?J!!!-$_"[mopc\ZX!!!!$s+("IJ+,Z&z
-#QK>P!.XK&z!!iOSIK4le*rl9@!!!Q0!.FqJi#dIL!!!!0rr>7`s54E<z&,lPn!WV'g^]4?7!$D1?++aI-
-&&8/F!!",?!$?dl^^%XT!!!!`qu at 7[s*t at 4z5PtKl_uG5hhuE`W!'gA]#KQjp"7Q9j!!%ND!!h]e
-!!2Qh!!!"Kp](EZrr<)hzJ+*F?s8N'"p](9o!<;Ng"98?#!;HNo!!*&g!!3-!!!)co!!!'"huEfX
-qu?_E!!!!"s53kWs82isHiO-H!WV'X!<;rs!.FnJ!!E8:!!%ND!!#1_!!!-$^]4 at ap](:X!!!!(s*t(LJ+s!D*rl9@
-#QK;S!<;Ng!$;1@!!iOS!!*&g!!"*k!!!Q0!!!$!huE`fJ,fQ[rr<$"s53kW%tFW[+9)<@!WV'X!!g:>
-!$D1?!!3,8!!!8>!!",?!!!-$^]4?>huEaAqu?^!s1eU7#N,R^5PtK]#QK;S!!D-Z!.XnH!!iOS!!!,j
-!!%NH!!!9(J,fQOn,NIgqu?^-s*t(L"8Dirs82is+9-ik!!Dur!WW&t!$D6V!!!-!!!E9#!!%NKhuE`frW!3's1e[8s8Duu5Q:^*s8VQns8W+L!<<(L+92B1#QOi(J,oWLJ,~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -3026 -2480]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -3089 -2481]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-69 97 true[1 0 0 1 -3135 -2480]@85 imagemask
-!!!'"n,_GI!!!!0
-s8E&sz5QCb7rr<$!!<<*!_>iEn!!3-"s5F"U!!!9(s8VWhs*t([s8W,ps8VQg+926=rVuom!$D7!
-!'gM`p]*PY^]4oFqu?_Hs*t(Ss6p!gJ,]KK"97ij!<<#u!!E8Z!!3,t!!!'"huEfXp](9ps53kXs6p!g
-!WV'X"97ij!!3,X!!E8Z!!!'"huElZhuE`Xs53k^s53kW!WV'X#QMR>!!3,X!!iP>!!!'"huF#^^]4?8s53kfs*t(L
-!WV'X&-%.[!!3,X!"]*[!!!'"huF;fJ,fQMs53kfs*t(L!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"
-s53kfrr<$!!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"s53kfrr<$!!WV'X#QFc(!!3,X!!iN(!!!'"
-huF#^!!!!"s53k^rr<$!!WV'X#QFc(!!3,X!!E6$!!!'"huElZJ,fQMs53kZs*t(L!WV'X!WRZM!!3,X!!3+M!!!'"
-huEfXJ,fQMs53kWs1eU7!WV'X!<9h7!!3,X!!%Ma!!!'"huEb,huE`Xs53kW5MuMA"979Z!$C\1!!E8Z
-!!",1!!!-$huE`fp](:!s53kW#Q+Q%&-(Pf!!E-!!"]+f!!!'!!!", at huE`Ws*t)6s53kW!.Vcas8V!W
-!!#7Q"9&8X!!!!0s8VWhhuE`W#QOh_s53kW!!3-"JcFX.!!!!`rW3&Wz!!!'"huE`W!!!!"s53kWz!WV'X
-z!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kW
-z!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W
-!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!$s53kWz#QN]^z"98DZz!!E9$huE`W
-!!!-$s53kWz5QBXAz!!E8Zz!!!"KhuE`Wz&)[Efz!!2!Xz!!!!A!!~>
-Q
-q[1 0 0 1 0 0]concat
-44 93 true[1 0 0 1 -2821 -861]@85 imagemask
-+92B at s6q-1s8W,g
-+92B at s6p"Qs8Vus!!iQ(^]4?:s8RTL!!3-"!!!!"s8Duu!!3-!zs8Duu!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!3-!!!!!"s8Duu!!E9$!!!!$s8RTL!"],0^]4B7s8Vus+92B at s6q-1s8W,g+92B at s6p~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -2868 -861]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-67 65 true[1 0 0 1 -2937 -859]@85 imagemask
-z(]XO9z
-!&srYz!!#+]z!!!"HzzIK0?Jz!.FnJz!!*$!z!!!$!z!!!!"
-rr<$!z!WRZMz!!3+Mz!!!-$^]4?7!!!!$s1eU7z#QMR>z!!iP^z!!!Q0
-huE`W!!!!0s6p!gz&-),!z!$D71z!!",?p](9o!!!!`r:g6lz5Q#m/z!'g7+z!!%ND
-HiO-H!!!"Kpc\ZXzs6r2Pz!<;OQz!!3,X*rl9@!!!'"i#_q!!!!!"s54E<z"96.I
-J,fQL!!E8:&&8/F!!!9(J-Wji!!!!(s*t?iz#QK;VhuE`W!"])0"5j.Z!!!Q0!!D]j!!!!@rVuug
-z+8u6 at n,NFg!'gG_!VcWp!!#7]!!)co!!!!`qu?`pzJ+s!DHiO-H!.XbD!.4bH!!*&o!!%HJ!!!$!n,NGPzs6p!g4obQ_!WV'X!'^G`!!3,X!!")@!!!-$huEa!J,fQOs1eU7%tFW[
-#QMR>!"XS[!!iOS!!!PF!!!Q0J,fQS^]4?Fs*t(L#N,R^+9)<@!!hE^!$D4@!!!,j!!#7`!!!!$n,NGQ
-rr<$!"8DirJ,]KK!!Dur!<<'!!!!9%!!3-"J,fQ[rW!3's53kW5Q?6Us8Vus!WW2X+92B=!!3-"hu~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -3007 -860]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -3069 -861]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -3116 -860]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -3171 -860]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-1 i
-16 w
-2513.75 2386.55 896.4 25.2 re
-Y
-2511.35 2399.75 m
-3401.75 2399.75 l
-S
-0 0 6120 7920 re
-Y
-3374.15 2357.75 m
-3387.35 2399.75 l
-3374.15 2441.75 l
-3473.75 2399.75 l
-f*
-2585.75 1006.55 897.6 25.2 re
-Y
-3476.15 1019.75 m
-2583.35 1019.75 l
-S
-0 0 6120 7920 re
-Y
-2613.35 1061.75 m
-2600.15 1019.75 l
-2613.35 977.75 l
-2513.75 1019.75 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 379 3063 a(Figure)31 b(1:)41 b(A)30 b(Mapping)h(view)m(ed)
-g(as)f(a)h(\\blac)m(k)h(b)s(o)m(x")f(for)f(transforming)g(co)s
-(ordinates.)0 3376 y(transformed)d(co)s(ordinates.)41
-b(Since)28 b(eac)m(h)i(set)f(of)f(co)s(ordinates)h(represen)m(ts)f(a)h
-(p)s(oin)m(t)f(in)g(a)h(co)s(ordinate)g(space,)0 3489
-y(the)f(Mapping)f(acts)h(to)g(in)m(ter-relate)i(corresp)s(onding)d(p)s
-(ositions)g(in)g(the)h(t)m(w)m(o)g(spaces,)h(although)f(what)f(these)0
-3602 y(spaces)h(represen)m(t)g(is)f(unsp)s(eci\014ed.)38
-b(Notice)30 b(that)e(a)g(Mapping)g(need)f(not)h(ha)m(v)m(e)h(the)e
-(same)h(n)m(um)m(b)s(er)f(of)g(input)0 3715 y(and)h(output)h(co)s
-(ordinates.)41 b(That)29 b(is,)g(the)g(t)m(w)m(o)h(co)s(ordinate)g
-(spaces)f(whic)m(h)g(it)g(in)m(ter-relates)i(need)e(not)g(ha)m(v)m(e)0
-3828 y(the)i(same)f(n)m(um)m(b)s(er)f(of)i(dimensions.)0
-3991 y(In)38 b(man)m(y)h(cases,)k(the)c(transformation)g(can,)j(in)c
-(principle,)j(b)s(e)e(p)s(erformed)e(in)i(either)g(direction:)59
-b(either)0 4104 y(from)35 b(the)h Fx(input)g FF(co)s(ordinate)h(space)f
-(to)h(the)f Fx(output,)h FF(or)f Fx(vic)-5 b(e)37 b(versa.)57
-b FF(The)36 b(\014rst)f(of)h(these)g(is)g(termed)f(the)0
-4217 y Fx(forwar)-5 b(d)33 b FF(transformation)e(and)e(the)i(other)g
-(the)f Fx(inverse)g FF(transformation.)0 4381 y FD(F)-9
-b(urther)35 b(reading:)40 b FF(F)-8 b(or)32 b(a)e(more)h(complete)h
-(discussion)d(of)i(Mappings,)f(see)h Fu(x)p FF(5.)0 4677
-y Fw(2.2)112 b(Mappings)40 b(Av)-6 b(ailable)0 4900 y
-FF(The)35 b(basic)h(concept)h(of)f(a)g(Mapping)g(\()p
-Fu(x)p FF(2.1\))i(is)e(rather)f(generic)i(and)e(ob)m(viously)h(it)h(is)
-f(necessary)g(to)g(ha)m(v)m(e)0 5013 y(sp)s(eci\014c)31
-b(Mappings)g(that)g(implemen)m(t)h(sp)s(eci\014c)e(relationships)i(b)s
-(et)m(w)m(een)f(co)s(ordinate)h(systems.)42 b(AST)31
-b(pro-)0 5126 y(vides)26 b(a)h(range)g(of)f(these,)i(to)g(p)s(erform)d
-(transformations)h(suc)m(h)g(as)h(the)g(follo)m(wing)g(and,)g(where)f
-(appropriate,)0 5239 y(their)k(in)m(v)m(erses:)136 5504
-y Fu(\017)46 b FF(Con)m(v)m(ersions)31 b(b)s(et)m(w)m(een)g(v)-5
-b(arious)30 b(celestial)j(co)s(ordinate)f(systems)e(\(the)h(SlaMap\).)
-136 5693 y Fu(\017)46 b FF(Con)m(v)m(ersions)31 b(b)s(et)m(w)m(een)g(v)
--5 b(arious)30 b(sp)s(ectral)h(co)s(ordinate)g(systems)g(\(the)g(Sp)s
-(ecMap)f(and)f(GrismMap\).)p eop end
-%%Page: 6 16
-TeXDict begin 6 15 bop 0 52 a FF(6)2171 b Fy(2)92 b(O)m(VER)-10
-b(VIEW)30 b(OF)h(AST)e(CONCEPTS)854 1039 y @beginspecial
-44 @llx 119 @lly 541 @urx 306 @ury 2485 @rwi @setspecial
-%%BeginDocument: sun211_figures/series.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 44 119 541 306
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:38:48
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5033.75 2775.35 m
-5033.75 2900.15 4932.95 3000.95 4808.15 3000.95 c
-1178.15 3000.95 l
-1053.35 3000.95 952.55 2900.15 952.55 2775.35 c
-952.55 1425.35 l
-952.55 1300.55 1053.35 1199.75 1178.15 1199.75 c
-4808.15 1199.75 l
-4932.95 1199.75 5033.75 1300.55 5033.75 1425.35 c
-f*
-1 g
-4968.95 2831.75 m
-4968.95 2955.35 4869.35 3054.95 4744.55 3054.95 c
-1122.95 3054.95 l
-998.15 3054.95 898.55 2955.35 898.55 2831.75 c
-898.55 1487.75 l
-898.55 1364.15 998.15 1264.55 1122.95 1264.55 c
-4744.55 1264.55 l
-4869.35 1264.55 4968.95 1364.15 4968.95 1487.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-4968.95 2831.75 m
-4968.95 2955.35 4869.35 3054.95 4744.55 3054.95 c
-1122.95 3054.95 l
-998.15 3054.95 898.55 2955.35 898.55 2831.75 c
-898.55 1487.75 l
-898.55 1364.15 998.15 1264.55 1122.95 1264.55 c
-4744.55 1264.55 l
-4869.35 1264.55 4968.95 1364.15 4968.95 1487.75 c
-h
-S
-903.35 2212.55 319.2 15.5999 re
-Y
-900.95 2220.95 m
-1215.35 2220.95 l
-S
-0 0 6120 7920 re
-Y
-942.95 2222.15 m
-942.95 2243.75 924.95 2261.75 903.35 2261.75 c
-880.55 2261.75 862.55 2243.75 862.55 2222.15 c
-862.55 2200.55 880.55 2182.55 903.35 2182.55 c
-924.95 2182.55 942.95 2200.55 942.95 2222.15 c
-f*
-1173.35 2172.95 m
-1192.55 2220.95 l
-1173.35 2268.95 l
-1325.75 2220.95 l
-f*
-0.564706 g
-2793.35 2331.35 m
-2793.35 2402.15 2735.75 2460.95 2663.75 2460.95 c
-1524.95 2460.95 l
-1452.95 2460.95 1395.35 2402.15 1395.35 2331.35 c
-1395.35 1552.55 l
-1395.35 1480.55 1452.95 1422.95 1524.95 1422.95 c
-2663.75 1422.95 l
-2735.75 1422.95 2793.35 1480.55 2793.35 1552.55 c
-f*
-1 g
-2728.55 2386.55 m
-2728.55 2457.35 2672.15 2514.95 2600.15 2514.95 c
-1469.75 2514.95 l
-1398.95 2514.95 1341.35 2457.35 1341.35 2386.55 c
-1341.35 1614.95 l
-1341.35 1545.35 1398.95 1487.75 1469.75 1487.75 c
-2600.15 1487.75 l
-2670.95 1487.75 2728.55 1545.35 2728.55 1614.95 c
-f*
-0 g
-2728.55 2386.55 m
-2728.55 2457.35 2672.15 2514.95 2600.15 2514.95 c
-1469.75 2514.95 l
-1398.95 2514.95 1341.35 2457.35 1341.35 2386.55 c
-1341.35 1614.95 l
-1341.35 1545.35 1398.95 1487.75 1469.75 1487.75 c
-2600.15 1487.75 l
-2670.95 1487.75 2728.55 1545.35 2728.55 1614.95 c
-h
-S
-0.564706 g
-4624.55 2327.75 m
-4624.55 2400.95 4564.55 2460.95 4491.35 2460.95 c
-3359.75 2460.95 l
-3286.55 2460.95 3226.55 2400.95 3226.55 2327.75 c
-3226.55 1527.35 l
-3226.55 1454.15 3286.55 1394.15 3359.75 1394.15 c
-4491.35 1394.15 l
-4564.55 1394.15 4624.55 1454.15 4624.55 1527.35 c
-f*
-1 g
-4559.75 2382.95 m
-4559.75 2456.15 4500.95 2514.95 4427.75 2514.95 c
-3304.55 2514.95 l
-3231.35 2514.95 3172.55 2456.15 3172.55 2382.95 c
-3172.55 1590.95 l
-3172.55 1517.75 3231.35 1458.95 3304.55 1458.95 c
-4427.75 1458.95 l
-4500.95 1458.95 4559.75 1517.75 4559.75 1590.95 c
-f*
-0 g
-4559.75 2382.95 m
-4559.75 2456.15 4500.95 2514.95 4427.75 2514.95 c
-3304.55 2514.95 l
-3231.35 2514.95 3172.55 2456.15 3172.55 2382.95 c
-3172.55 1590.95 l
-3172.55 1517.75 3231.35 1458.95 3304.55 1458.95 c
-4427.75 1458.95 l
-4500.95 1458.95 4559.75 1517.75 4559.75 1590.95 c
-h
-S
-903.35 1792.55 319.2 15.5999 re
-Y
-900.95 1800.95 m
-1215.35 1800.95 l
-S
-0 0 6120 7920 re
-Y
-942.95 1802.15 m
-942.95 1823.75 924.95 1841.75 903.35 1841.75 c
-880.55 1841.75 862.55 1823.75 862.55 1802.15 c
-862.55 1780.55 880.55 1762.55 903.35 1762.55 c
-924.95 1762.55 942.95 1780.55 942.95 1802.15 c
-f*
-1173.35 1752.95 m
-1192.55 1800.95 l
-1173.35 1848.95 l
-1325.75 1800.95 l
-f*
-2724.95 2272.55 340.8 15.5999 re
-Y
-2722.55 2280.95 m
-3058.55 2280.95 l
-S
-0 0 6120 7920 re
-Y
-2763.35 2282.15 m
-2763.35 2303.75 2745.35 2321.75 2723.75 2321.75 c
-2702.15 2321.75 2684.15 2303.75 2684.15 2282.15 c
-2684.15 2260.55 2702.15 2242.55 2723.75 2242.55 c
-2745.35 2242.55 2763.35 2260.55 2763.35 2282.15 c
-f*
-3017.75 2232.95 m
-3035.75 2280.95 l
-3017.75 2328.95 l
-3170.15 2280.95 l
-f*
-2724.95 1672.55 339.6 15.5999 re
-Y
-2722.55 1680.95 m
-3057.35 1680.95 l
-S
-0 0 6120 7920 re
-Y
-2763.35 1682.15 m
-2763.35 1703.75 2745.35 1721.75 2723.75 1721.75 c
-2702.15 1721.75 2684.15 1703.75 2684.15 1682.15 c
-2684.15 1660.55 2702.15 1642.55 2723.75 1642.55 c
-2745.35 1642.55 2763.35 1660.55 2763.35 1682.15 c
-f*
-3016.55 1632.95 m
-3034.55 1680.95 l
-3016.55 1728.95 l
-3168.95 1680.95 l
-f*
-2724.95 1974.95 340.8 15.5999 re
-Y
-2722.55 1983.35 m
-3058.55 1983.35 l
-S
-0 0 6120 7920 re
-Y
-2763.35 1984.55 m
-2763.35 2006.15 2745.35 2024.15 2723.75 2024.15 c
-2702.15 2024.15 2684.15 2006.15 2684.15 1984.55 c
-2684.15 1962.95 2702.15 1944.95 2723.75 1944.95 c
-2745.35 1944.95 2763.35 1962.95 2763.35 1984.55 c
-f*
-3017.75 1936.55 m
-3035.75 1983.35 l
-3017.75 2031.35 l
-3170.15 1983.35 l
-f*
-4558.55 2216.15 304.8 15.5999 re
-Y
-4556.15 2224.55 m
-4856.15 2224.55 l
-S
-0 0 6120 7920 re
-Y
-4596.95 2225.75 m
-4596.95 2247.35 4578.95 2265.35 4557.35 2265.35 c
-4535.75 2265.35 4517.75 2247.35 4517.75 2225.75 c
-4517.75 2204.15 4535.75 2186.15 4557.35 2186.15 c
-4578.95 2186.15 4596.95 2204.15 4596.95 2225.75 c
-f*
-4816.55 2177.75 m
-4834.55 2224.55 l
-4816.55 2272.55 l
-4968.95 2224.55 l
-f*
-4558.55 1791.35 304.8 15.5999 re
-Y
-4556.15 1799.75 m
-4856.15 1799.75 l
-S
-0 0 6120 7920 re
-Y
-4596.95 1800.95 m
-4596.95 1822.55 4578.95 1840.55 4557.35 1840.55 c
-4535.75 1840.55 4517.75 1822.55 4517.75 1800.95 c
-4517.75 1779.35 4535.75 1761.35 4557.35 1761.35 c
-4578.95 1761.35 4596.95 1779.35 4596.95 1800.95 c
-f*
-4816.55 1751.75 m
-4834.55 1799.75 l
-4816.55 1847.75 l
-4968.95 1799.75 l
-f*
-0.2 i
-1742 2064.14 m
-1742 1982.6 l
-1742 1967.66 1739.88 1965.32 1725.94 1964.42 c
-1725.94 1961 l
-1776.34 1961 l
-1776.34 1964.42 l
-1763.2 1965.32 1761 1967.84 1761 1980.62 c
-1761 2060.54 l
-1761 2073.32 1763.29 2075.66 1776.34 2076.74 c
-1776.34 2080 l
-1740.52 2080 l
-1700.74 1989.26 l
-1659.16 2080 l
-1623.52 2080 l
-1623.52 2077 l
-1638.28 2076.09 1641 2073.89 1641 2060.54 c
-1641 1987.46 l
-1641 1968.92 1638.43 1965.5 1623.16 1964.42 c
-1623.16 1961 l
-1665.46 1961 l
-1665.46 1964 l
-1651.6 1964.73 1649 1968.95 1649 1987.46 c
-1649 2060 l
-1693.72 1961 l
-1696.24 1961 l
-h
-1781.02 1961 m
-f*
-1860.56 1972.88 m
-1857.5 1970.36 1855.34 1969.2 1852.64 1969.2 c
-1848.5 1969.2 1847 1971.78 1847 1979.9 c
-1847 2015 l
-1847 2024.18 1846.16 2029.22 1843.82 2033.36 c
-1840.04 2040.2 1832.3 2043.8 1821.32 2043.8 c
-1812.14 2043.8 1803.5 2041.28 1798.46 2037.14 c
-1793.96 2033.36 1791 2028.14 1791 2023.64 c
-1791 2019.5 1794.46 2015.9 1798.82 2015.9 c
-1803.14 2015.9 1806.92 2019.5 1806.92 2023.46 c
-1806.92 2024.18 1806.74 2025.08 1806.56 2026.34 c
-1806.2 2027.96 1806 2029.4 1806 2030.66 c
-1806 2035.52 1811.77 2039.8 1818.98 2039.8 c
-1827.8 2039.8 1832 2034.47 1832 2024.54 c
-1832 2013.56 l
-1804.76 2002.4 1801.75 2000.96 1794.14 1994.12 c
-1790.18 1990.52 1787.66 1984.4 1787.66 1978.46 c
-1787.66 1967.12 1795.4 1959.2 1806.56 1959.2 c
-1814.48 1959.2 1821.86 1962.98 1832.84 1972.34 c
-1833.74 1962.8 1836.98 1959.2 1844.36 1959.2 c
-1850.48 1959.2 1854.26 1961.36 1860.56 1968.2 c
-h
-1832 1983.14 m
-1832 1977.56 1831.23 1975.94 1827.98 1973.6 c
-1823.66 1971.08 1818.62 1969.2 1814.84 1969.2 c
-1808.54 1969.2 1803.48 1975.51 1803.48 1983.5 c
-1803.48 1984.22 l
-1803.48 1994.84 1810.7 2001.32 1832 2009.24 c
-h
-1860.92 1961 m
-f*
-1862.62 2031.74 m
-1864.24 2031.92 1865.5 2031.92 1867.12 2031.92 c
-1873.24 2031.92 1875 2030.12 1875 2021.66 c
-1875 1937.42 l
-1875 1928.06 1872.94 1926.08 1861.9 1925 c
-1861.9 1922 l
-1905.46 1922 l
-1905.46 1925 l
-1891.96 1925.18 1890 1927.19 1890 1938.68 c
-1890 1966.94 l
-1896.34 1961 1900.4 1959.2 1907.8 1959.2 c
-1929.22 1959.2 1945 1979.36 1945 2005.46 c
-1945 2027.78 1932.65 2043.8 1915.54 2043.8 c
-1905.61 2043.8 1897.8 2039.48 1890 2029.58 c
-1890 2043.44 l
-1888.54 2043.8 l
-1879 2040.02 1872.52 2037.68 1862.62 2034.62 c
-h
-1890 2021.12 m
-1890 2026.52 1899.87 2032.8 1907.98 2032.8 c
-1921.3 2032.8 1930 2019.2 1930 1998.26 c
-1930 1978.46 1921.23 1964.2 1908.34 1964.2 c
-1899.88 1964.2 1890 1971.09 1890 1976.84 c
-h
-1951 1961 m
-f*
-1952.62 2031.74 m
-1954.24 2031.92 1955.5 2031.92 1957.12 2031.92 c
-1963.24 2031.92 1965 2030.12 1965 2021.66 c
-1965 1937.42 l
-1965 1928.06 1962.94 1926.08 1951.9 1925 c
-1951.9 1922 l
-1995.46 1922 l
-1995.46 1925 l
-1981.96 1925.18 1980 1927.19 1980 1938.68 c
-1980 1966.94 l
-1986.34 1961 1990.4 1959.2 1997.8 1959.2 c
-2019.22 1959.2 2035 1979.36 2035 2005.46 c
-2035 2027.78 2022.65 2043.8 2005.54 2043.8 c
-1995.61 2043.8 1987.8 2039.48 1980 2029.58 c
-1980 2043.44 l
-1978.54 2043.8 l
-1969 2040.02 1962.52 2037.68 1952.62 2034.62 c
-h
-1980 2021.12 m
-1980 2026.52 1989.87 2032.8 1997.98 2032.8 c
-2011.3 2032.8 2020 2019.2 2020 1998.26 c
-2020 1978.46 2011.23 1964.2 1998.34 1964.2 c
-1989.88 1964.2 1980 1971.09 1980 1976.84 c
-h
-2041 1961 m
-f*
-2072.5 2043.8 m
-2044.6 2033.9 l
-2044.6 2031.2 l
-2046.04 2031.38 l
-2048.2 2031.74 2050.54 2031.72 2052.16 2031.72 c
-2056.48 2031.72 2058 2028.89 2058 2021.12 c
-2058 1979.36 l
-2058 1966.4 2056.21 1964.42 2043.88 1963.7 c
-2043.88 1961 l
-2086.54 1961 l
-2086.54 1963.7 l
-2074.66 1964.6 2073 1966.4 2073 1979.36 c
-2073 2043.26 l
-h
-2064.22 2084 m
-2059.18 2084 2055 2079.83 2055 2074.76 c
-2055 2069.54 2058.98 2066 2064.04 2066 c
-2069.44 2066 2074 2069.78 2074 2074.76 c
-2074 2079.8 2069.59 2084 2064.22 2084 c
-h
-2091.04 1961 m
-f*
-2093.88 2032.64 m
-2095.14 2033.18 2096.76 2033.36 2098.74 2033.36 c
-2103.78 2033.36 2105 2030.66 2105 2021.84 c
-2105 1977.2 l
-2105 1966.94 2103.09 1964.42 2094.24 1963.7 c
-2094.24 1961 l
-2132.4 1961 l
-2132.4 1963.7 l
-2123.22 1964.42 2120 1966.58 2120 1973.06 c
-2120 2023.64 l
-2128.7 2031.74 2132.95 2033.8 2139.06 2033.8 c
-2147.88 2033.8 2152 2028.25 2152 2016.44 c
-2152 1978.82 l
-2152 1967.48 2149.7 1964.42 2140.86 1963.7 c
-2140.86 1961 l
-2178.3 1961 l
-2178.3 1963.7 l
-2169.48 1964.6 2167 1966.76 2167 1975.58 c
-2167 2016.8 l
-2167 2033.72 2159.2 2043.8 2146.08 2043.8 c
-2137.64 2043.8 2131.94 2040.74 2119.46 2029.22 c
-2119.46 2043.44 l
-2118.72 2043.8 l
-2109.9 2040.56 2103.78 2038.58 2093.88 2035.7 c
-h
-2181 1961 m
-f*
-2265.6 2031 m
-2265.6 2038 l
-2251.74 2038 l
-2248.14 2038 2245.44 2038.5 2241.84 2039.66 c
-2237.88 2041.1 l
-2233.02 2042.9 2228.16 2043.8 2223.48 2043.8 c
-2206.74 2043.8 2193.38 2030.84 2193.38 2014.46 c
-2193.38 2003.12 2198.07 1996.28 2210.16 1990.34 c
-2207.64 1987.82 2205.12 1985.48 2202.42 1983.14 c
-2196.48 1977.92 2194.1 1974.32 2194.1 1970.72 c
-2194.1 1966.76 2196.09 1964.78 2203.68 1961.18 c
-2190.72 1951.82 2186 1945.88 2186 1939.22 c
-2186 1929.68 2199.88 1922 2217.18 1922 c
-2230.14 1922 2243.82 1926.23 2253.18 1933.28 c
-2260.56 1939.04 2264 1944.98 2264 1952.18 c
-2264 1963.34 2255.53 1970.9 2242.2 1971.44 c
-2218.98 1972.52 l
-2209.26 1972.88 2204.94 1974.5 2204.94 1977.38 c
-2204.94 1980.98 2210.88 1987.28 2215.74 1988.72 c
-2219.16 1988.36 l
-2222.4 1988 2224.92 1988 2226 1988 c
-2232.3 1988 2239.32 1990.46 2244.72 1994.84 c
-2251.2 1999.88 2254 2006.36 2254 2015.72 c
-2254 2021 2253.12 2025.18 2250.66 2031 c
-h
-2207.46 1960.64 m
-2213.58 1959.38 2227.8 1958.3 2236.62 1958.3 c
-2253 1958.3 2259 1956.14 2259 1949.48 c
-2259 1939.04 2245.3 1932 2224.74 1932 c
-2208.9 1932 2199 1937.23 2199 1945.16 c
-2199 1949.3 2200.55 1952 2207.46 1960.64 c
-h
-2208.36 2021.84 m
-2208.36 2032.46 2213.4 2038.8 2221.68 2038.8 c
-2227.26 2038.8 2231.94 2035.73 2234.82 2030.3 c
-2238.24 2024 2240 2015.9 2240 2008.52 c
-2240 1998.62 2234.87 1993 2226.9 1993 c
-2215.74 1993 2208.36 2004.43 2208.36 2021.3 c
-h
-2271 1961 m
-f*
-2316 1961 m
-f*
-2443.08 1964.42 m
-2434.98 1964.96 2433.18 1966.76 2426.88 1980.08 c
-2382.06 2082.16 l
-2378.46 2082.16 l
-2341.02 1993.94 l
-2329.5 1967.66 2327.34 1964.96 2318.7 1964.42 c
-2318.7 1961 l
-2354.34 1961 l
-2354.34 1964.82 l
-2345.7 1964.82 2342.1 1967.03 2342.1 1971.8 c
-2342.1 1973.96 2342.64 1976.48 2343.54 1978.82 c
-2351.82 2000 l
-2398.98 2000 l
-2406.36 1982.6 l
-2408.52 1977.56 2409.78 1973.06 2409.78 1970.36 c
-2409.78 1968.74 2408.7 1966.76 2407.26 1966.04 c
-2405.1 1964.78 2403.66 1964.82 2397.18 1964.82 c
-2397.18 1961 l
-2443.08 1961 l
-h
-2354.88 2007 m
-2375.58 2056.76 l
-2396.46 2007 l
-h
-2445.96 1961 m
-f*
-3607 2064.14 m
-3607 1982.6 l
-3607 1967.66 3604.88 1965.32 3590.94 1964.42 c
-3590.94 1961 l
-3641.34 1961 l
-3641.34 1964.42 l
-3628.2 1965.32 3626 1967.84 3626 1980.62 c
-3626 2060.54 l
-3626 2073.32 3628.29 2075.66 3641.34 2076.74 c
-3641.34 2080 l
-3605.52 2080 l
-3565.74 1989.26 l
-3524.16 2080 l
-3488.52 2080 l
-3488.52 2077 l
-3503.28 2076.09 3506 2073.89 3506 2060.54 c
-3506 1987.46 l
-3506 1968.92 3503.43 1965.5 3488.16 1964.42 c
-3488.16 1961 l
-3530.46 1961 l
-3530.46 1964 l
-3516.6 1964.73 3514 1968.95 3514 1987.46 c
-3514 2060 l
-3558.72 1961 l
-3561.24 1961 l
-h
-3646.02 1961 m
-f*
-3726.56 1972.88 m
-3723.5 1970.36 3721.34 1969.2 3718.64 1969.2 c
-3714.5 1969.2 3713 1971.78 3713 1979.9 c
-3713 2015 l
-3713 2024.18 3712.16 2029.22 3709.82 2033.36 c
-3706.04 2040.2 3698.3 2043.8 3687.32 2043.8 c
-3678.14 2043.8 3669.5 2041.28 3664.46 2037.14 c
-3659.96 2033.36 3657 2028.14 3657 2023.64 c
-3657 2019.5 3660.46 2015.9 3664.82 2015.9 c
-3669.14 2015.9 3672.92 2019.5 3672.92 2023.46 c
-3672.92 2024.18 3672.74 2025.08 3672.56 2026.34 c
-3672.2 2027.96 3672 2029.4 3672 2030.66 c
-3672 2035.52 3677.77 2039.8 3684.98 2039.8 c
-3693.8 2039.8 3698 2034.47 3698 2024.54 c
-3698 2013.56 l
-3670.76 2002.4 3667.75 2000.96 3660.14 1994.12 c
-3656.18 1990.52 3653.66 1984.4 3653.66 1978.46 c
-3653.66 1967.12 3661.4 1959.2 3672.56 1959.2 c
-3680.48 1959.2 3687.86 1962.98 3698.84 1972.34 c
-3699.74 1962.8 3702.98 1959.2 3710.36 1959.2 c
-3716.48 1959.2 3720.26 1961.36 3726.56 1968.2 c
-h
-3698 1983.14 m
-3698 1977.56 3697.23 1975.94 3693.98 1973.6 c
-3689.66 1971.08 3684.62 1969.2 3680.84 1969.2 c
-3674.54 1969.2 3669.48 1975.51 3669.48 1983.5 c
-3669.48 1984.22 l
-3669.48 1994.84 3676.7 2001.32 3698 2009.24 c
-h
-3726.92 1961 m
-f*
-3727.62 2031.74 m
-3729.24 2031.92 3730.5 2031.92 3732.12 2031.92 c
-3738.24 2031.92 3740 2030.12 3740 2021.66 c
-3740 1937.42 l
-3740 1928.06 3737.94 1926.08 3726.9 1925 c
-3726.9 1922 l
-3770.46 1922 l
-3770.46 1925 l
-3756.96 1925.18 3755 1927.19 3755 1938.68 c
-3755 1966.94 l
-3761.34 1961 3765.4 1959.2 3772.8 1959.2 c
-3794.22 1959.2 3810 1979.36 3810 2005.46 c
-3810 2027.78 3797.65 2043.8 3780.54 2043.8 c
-3770.61 2043.8 3762.8 2039.48 3755 2029.58 c
-3755 2043.44 l
-3753.54 2043.8 l
-3744 2040.02 3737.52 2037.68 3727.62 2034.62 c
-h
-3755 2021.12 m
-3755 2026.52 3764.87 2032.8 3772.98 2032.8 c
-3786.3 2032.8 3795 2019.2 3795 1998.26 c
-3795 1978.46 3786.23 1964.2 3773.34 1964.2 c
-3764.88 1964.2 3755 1971.09 3755 1976.84 c
-h
-3816 1961 m
-f*
-3817.62 2031.74 m
-3819.24 2031.92 3820.5 2031.92 3822.12 2031.92 c
-3828.24 2031.92 3830 2030.12 3830 2021.66 c
-3830 1937.42 l
-3830 1928.06 3827.94 1926.08 3816.9 1925 c
-3816.9 1922 l
-3860.46 1922 l
-3860.46 1925 l
-3846.96 1925.18 3845 1927.19 3845 1938.68 c
-3845 1966.94 l
-3851.34 1961 3855.4 1959.2 3862.8 1959.2 c
-3884.22 1959.2 3900 1979.36 3900 2005.46 c
-3900 2027.78 3887.65 2043.8 3870.54 2043.8 c
-3860.61 2043.8 3852.8 2039.48 3845 2029.58 c
-3845 2043.44 l
-3843.54 2043.8 l
-3834 2040.02 3827.52 2037.68 3817.62 2034.62 c
-h
-3845 2021.12 m
-3845 2026.52 3854.87 2032.8 3862.98 2032.8 c
-3876.3 2032.8 3885 2019.2 3885 1998.26 c
-3885 1978.46 3876.23 1964.2 3863.34 1964.2 c
-3854.88 1964.2 3845 1971.09 3845 1976.84 c
-h
-3906 1961 m
-f*
-3937.5 2043.8 m
-3909.6 2033.9 l
-3909.6 2031.2 l
-3911.04 2031.38 l
-3913.2 2031.74 3915.54 2031.72 3917.16 2031.72 c
-3921.48 2031.72 3923 2028.89 3923 2021.12 c
-3923 1979.36 l
-3923 1966.4 3921.21 1964.42 3908.88 1963.7 c
-3908.88 1961 l
-3951.54 1961 l
-3951.54 1963.7 l
-3939.66 1964.6 3938 1966.4 3938 1979.36 c
-3938 2043.26 l
-h
-3929.22 2084 m
-3924.18 2084 3920 2079.83 3920 2074.76 c
-3920 2069.54 3923.98 2066 3929.04 2066 c
-3934.44 2066 3939 2069.78 3939 2074.76 c
-3939 2079.8 3934.59 2084 3929.22 2084 c
-h
-3956.04 1961 m
-f*
-3958.88 2032.64 m
-3960.14 2033.18 3961.76 2033.36 3963.74 2033.36 c
-3968.78 2033.36 3970 2030.66 3970 2021.84 c
-3970 1977.2 l
-3970 1966.94 3968.09 1964.42 3959.24 1963.7 c
-3959.24 1961 l
-3997.4 1961 l
-3997.4 1963.7 l
-3988.22 1964.42 3985 1966.58 3985 1973.06 c
-3985 2023.64 l
-3993.7 2031.74 3997.95 2033.8 4004.06 2033.8 c
-4012.88 2033.8 4017 2028.25 4017 2016.44 c
-4017 1978.82 l
-4017 1967.48 4014.7 1964.42 4005.86 1963.7 c
-4005.86 1961 l
-4043.3 1961 l
-4043.3 1963.7 l
-4034.48 1964.6 4032 1966.76 4032 1975.58 c
-4032 2016.8 l
-4032 2033.72 4024.2 2043.8 4011.08 2043.8 c
-4002.64 2043.8 3996.94 2040.74 3984.46 2029.22 c
-3984.46 2043.44 l
-3983.72 2043.8 l
-3974.9 2040.56 3968.78 2038.58 3958.88 2035.7 c
-h
-4046 1961 m
-f*
-4130.6 2031 m
-4130.6 2038 l
-4116.74 2038 l
-4113.14 2038 4110.44 2038.5 4106.84 2039.66 c
-4102.88 2041.1 l
-4098.02 2042.9 4093.16 2043.8 4088.48 2043.8 c
-4071.74 2043.8 4058.38 2030.84 4058.38 2014.46 c
-4058.38 2003.12 4063.07 1996.28 4075.16 1990.34 c
-4072.64 1987.82 4070.12 1985.48 4067.42 1983.14 c
-4061.48 1977.92 4059.1 1974.32 4059.1 1970.72 c
-4059.1 1966.76 4061.09 1964.78 4068.68 1961.18 c
-4055.72 1951.82 4051 1945.88 4051 1939.22 c
-4051 1929.68 4064.88 1922 4082.18 1922 c
-4095.14 1922 4108.82 1926.23 4118.18 1933.28 c
-4125.56 1939.04 4129 1944.98 4129 1952.18 c
-4129 1963.34 4120.53 1970.9 4107.2 1971.44 c
-4083.98 1972.52 l
-4074.26 1972.88 4069.94 1974.5 4069.94 1977.38 c
-4069.94 1980.98 4075.88 1987.28 4080.74 1988.72 c
-4084.16 1988.36 l
-4087.4 1988 4089.92 1988 4091 1988 c
-4097.3 1988 4104.32 1990.46 4109.72 1994.84 c
-4116.2 1999.88 4119 2006.36 4119 2015.72 c
-4119 2021 4118.12 2025.18 4115.66 2031 c
-h
-4072.46 1960.64 m
-4078.58 1959.38 4092.8 1958.3 4101.62 1958.3 c
-4118 1958.3 4124 1956.14 4124 1949.48 c
-4124 1939.04 4110.3 1932 4089.74 1932 c
-4073.9 1932 4064 1937.23 4064 1945.16 c
-4064 1949.3 4065.55 1952 4072.46 1960.64 c
-h
-4073.36 2021.84 m
-4073.36 2032.46 4078.4 2038.8 4086.68 2038.8 c
-4092.26 2038.8 4096.94 2035.73 4099.82 2030.3 c
-4103.24 2024 4105 2015.9 4105 2008.52 c
-4105 1998.62 4099.87 1993 4091.9 1993 c
-4080.74 1993 4073.36 2004.43 4073.36 2021.3 c
-h
-4136 1961 m
-f*
-4181 1961 m
-f*
-4184.06 2080 m
-4184.06 2077 l
-4199.18 2076.09 4201 2074.07 4201 2060.54 c
-4201 1980.62 l
-4201 1967.3 4198.71 1964.96 4184.06 1964.42 c
-4184.06 1961 l
-4244.18 1961 l
-4271 1961 4288 1973.42 4288 1993.4 c
-4288 2001.32 4284.85 2008.52 4278.92 2013.74 c
-4273.52 2018.6 4268.66 2020.94 4256.96 2023.64 c
-4266.32 2025.98 4270.1 2027.78 4274.42 2031.56 c
-4278.92 2035.52 4282 2042.18 4282 2049.56 c
-4282 2069.72 4265.85 2080 4234.46 2080 c
-h
-4220 2019.68 m
-4236.94 2019.68 4244.78 2018.78 4251.56 2016.26 c
-4262 2012.12 4267 2004.74 4267 1993.22 c
-4267 1983.5 4263.23 1976.48 4256.06 1972.34 c
-4250.3 1968.92 4243.1 1968 4230.5 1968 c
-4222.22 1968 4220 1969.55 4220 1975.04 c
-h
-4220 2026.88 m
-4220 2068.1 l
-4220 2071.88 4221.16 2073 4223.66 2073 c
-4231.58 2073 l
-4252.28 2073 4263 2064.71 4263 2048.84 c
-4263 2034.8 4253.55 2026.88 4236.8 2026.88 c
-h
-4301.06 1961 m
-f*
-2645.6 2822 m
-2643.98 2862.52 l
-2640.2 2862.52 l
-2639.12 2858.84 2636.24 2856.58 2632.82 2856.58 c
-2631.02 2856.58 2628.5 2857.17 2625.62 2858.36 c
-2616.8 2861.24 2607.98 2862.52 2599.16 2862.52 c
-2585.3 2862.52 2571.08 2857.36 2560.1 2848.46 c
-2546.42 2837.12 2539 2820.02 2539 2799.5 c
-2539 2762.96 2562.96 2738.48 2598.8 2738.48 c
-2619.14 2738.48 2636.96 2746.76 2647.94 2761.34 c
-2644.7 2764.58 l
-2631.38 2751.8 2619.5 2746.48 2604.56 2746.48 c
-2593.76 2746.48 2584.04 2749.69 2576.48 2755.94 c
-2565.86 2764.76 2560 2780.96 2560 2801.84 c
-2560 2834.42 2576.71 2855.52 2602.76 2855.52 c
-2613.2 2855.52 2622.38 2851.73 2629.58 2844.5 c
-2635.34 2838.74 2638.04 2833.7 2641.46 2822 c
-h
-2654.06 2741 m
-f*
-2657.14 2812.64 m
-2659.48 2813.18 2660.92 2813.36 2662.9 2813.36 c
-2667.58 2813.36 2669 2810.48 2669 2801.84 c
-2669 2756.3 l
-2669 2746.58 2666.52 2743.88 2656.6 2743.7 c
-2656.6 2741 l
-2696.56 2741 l
-2696.56 2744 l
-2687.02 2744.35 2684 2746.27 2684 2753.06 c
-2684 2803.82 l
-2684 2804.18 2685.23 2805.44 2686.66 2806.88 c
-2690.98 2811.2 2699.08 2814.8 2705.74 2814.8 c
-2713.48 2814.8 2718 2808.2 2718 2795.54 c
-2718 2756.48 l
-2718 2746.4 2715.93 2744.42 2705.2 2743.7 c
-2705.2 2741 l
-2745.52 2741 l
-2745.52 2744 l
-2735.26 2744.18 2733 2747.17 2733 2758.1 c
-2733 2803.46 l
-2738.28 2811.2 2743.91 2814.8 2752.18 2814.8 c
-2762.44 2814.8 2766 2809.85 2766 2794.64 c
-2766 2756.66 l
-2766 2746.4 2764.52 2744.96 2753.8 2743.7 c
-2753.8 2741 l
-2793.22 2741 l
-2793.22 2743.7 l
-2788.54 2744.06 l
-2783.14 2744.42 2781 2747.66 2781 2754.68 c
-2781 2791.76 l
-2781 2813 2773.91 2823.8 2759.92 2823.8 c
-2749.48 2823.8 2740.3 2819.12 2730.58 2808.68 c
-2727.34 2818.94 2721.22 2823.8 2711.5 2823.8 c
-2703.31 2823.8 2698.57 2821.46 2683.28 2809.94 c
-2683.28 2823.44 l
-2682.34 2823.8 l
-2673.16 2820.38 2667.04 2818.4 2657.14 2815.7 c
-h
-2794.04 2741 m
-f*
-2794.62 2811.74 m
-2796.24 2811.92 2797.5 2811.92 2799.12 2811.92 c
-2805.24 2811.92 2807 2810.12 2807 2801.66 c
-2807 2717.42 l
-2807 2708.06 2804.94 2706.08 2793.9 2705 c
-2793.9 2702 l
-2837.46 2702 l
-2837.46 2705 l
-2823.96 2705.18 2822 2707.19 2822 2718.68 c
-2822 2746.94 l
-2828.34 2741 2832.4 2739.2 2839.8 2739.2 c
-2861.22 2739.2 2877 2759.36 2877 2785.46 c
-2877 2807.78 2864.65 2823.8 2847.54 2823.8 c
-2837.61 2823.8 2829.8 2819.48 2822 2809.58 c
-2822 2823.44 l
-2820.54 2823.8 l
-2811 2820.02 2804.52 2817.68 2794.62 2814.62 c
-h
-2822 2801.12 m
-2822 2806.52 2831.87 2812.8 2839.98 2812.8 c
-2853.3 2812.8 2862 2799.2 2862 2778.26 c
-2862 2758.46 2853.23 2744.2 2840.34 2744.2 c
-2831.88 2744.2 2822 2751.09 2822 2756.84 c
-h
-2883 2741 m
-f*
-3004 2844.14 m
-3004 2762.6 l
-3004 2747.66 3001.88 2745.32 2987.94 2744.42 c
-2987.94 2741 l
-3038.34 2741 l
-3038.34 2744.42 l
-3025.2 2745.32 3023 2747.84 3023 2760.62 c
-3023 2840.54 l
-3023 2853.32 3025.29 2855.66 3038.34 2856.74 c
-3038.34 2860 l
-3002.52 2860 l
-2962.74 2769.26 l
-2921.16 2860 l
-2885.52 2860 l
-2885.52 2857 l
-2900.28 2856.09 2903 2853.89 2903 2840.54 c
-2903 2767.46 l
-2903 2748.92 2900.43 2745.5 2885.16 2744.42 c
-2885.16 2741 l
-2927.46 2741 l
-2927.46 2744 l
-2913.6 2744.73 2911 2748.95 2911 2767.46 c
-2911 2840 l
-2955.72 2741 l
-2958.24 2741 l
-h
-3043.02 2741 m
-f*
-3123.56 2752.88 m
-3120.5 2750.36 3118.34 2749.2 3115.64 2749.2 c
-3111.5 2749.2 3110 2751.78 3110 2759.9 c
-3110 2795 l
-3110 2804.18 3109.16 2809.22 3106.82 2813.36 c
-3103.04 2820.2 3095.3 2823.8 3084.32 2823.8 c
-3075.14 2823.8 3066.5 2821.28 3061.46 2817.14 c
-3056.96 2813.36 3054 2808.14 3054 2803.64 c
-3054 2799.5 3057.46 2795.9 3061.82 2795.9 c
-3066.14 2795.9 3069.92 2799.5 3069.92 2803.46 c
-3069.92 2804.18 3069.74 2805.08 3069.56 2806.34 c
-3069.2 2807.96 3069 2809.4 3069 2810.66 c
-3069 2815.52 3074.77 2819.8 3081.98 2819.8 c
-3090.8 2819.8 3095 2814.47 3095 2804.54 c
-3095 2793.56 l
-3067.76 2782.4 3064.75 2780.96 3057.14 2774.12 c
-3053.18 2770.52 3050.66 2764.4 3050.66 2758.46 c
-3050.66 2747.12 3058.4 2739.2 3069.56 2739.2 c
-3077.48 2739.2 3084.86 2742.98 3095.84 2752.34 c
-3096.74 2742.8 3099.98 2739.2 3107.36 2739.2 c
-3113.48 2739.2 3117.26 2741.36 3123.56 2748.2 c
-h
-3095 2763.14 m
-3095 2757.56 3094.23 2755.94 3090.98 2753.6 c
-3086.66 2751.08 3081.62 2749.2 3077.84 2749.2 c
-3071.54 2749.2 3066.48 2755.51 3066.48 2763.5 c
-3066.48 2764.22 l
-3066.48 2774.84 3073.7 2781.32 3095 2789.24 c
-h
-3123.92 2741 m
-f*
-3124.62 2811.74 m
-3126.24 2811.92 3127.5 2811.92 3129.12 2811.92 c
-3135.24 2811.92 3137 2810.12 3137 2801.66 c
-3137 2717.42 l
-3137 2708.06 3134.94 2706.08 3123.9 2705 c
-3123.9 2702 l
-3167.46 2702 l
-3167.46 2705 l
-3153.96 2705.18 3152 2707.19 3152 2718.68 c
-3152 2746.94 l
-3158.34 2741 3162.4 2739.2 3169.8 2739.2 c
-3191.22 2739.2 3207 2759.36 3207 2785.46 c
-3207 2807.78 3194.65 2823.8 3177.54 2823.8 c
-3167.61 2823.8 3159.8 2819.48 3152 2809.58 c
-3152 2823.44 l
-3150.54 2823.8 l
-3141 2820.02 3134.52 2817.68 3124.62 2814.62 c
-h
-3152 2801.12 m
-3152 2806.52 3161.87 2812.8 3169.98 2812.8 c
-3183.3 2812.8 3192 2799.2 3192 2778.26 c
-3192 2758.46 3183.23 2744.2 3170.34 2744.2 c
-3161.88 2744.2 3152 2751.09 3152 2756.84 c
-h
-3213 2741 m
-f*
-1 i
-483.35 2212.55 319.2 15.5999 re
-Y
-480.95 2220.95 m
-795.35 2220.95 l
-S
-0 0 6120 7920 re
-Y
-522.95 2222.15 m
-522.95 2243.75 504.95 2261.75 483.35 2261.75 c
-460.55 2261.75 442.55 2243.75 442.55 2222.15 c
-442.55 2200.55 460.55 2182.55 483.35 2182.55 c
-504.95 2182.55 522.95 2200.55 522.95 2222.15 c
-f*
-753.35 2172.95 m
-772.55 2220.95 l
-753.35 2268.95 l
-905.75 2220.95 l
-f*
-483.35 1792.55 319.2 15.5999 re
-Y
-480.95 1800.95 m
-795.35 1800.95 l
-S
-0 0 6120 7920 re
-Y
-522.95 1802.15 m
-522.95 1823.75 504.95 1841.75 483.35 1841.75 c
-460.55 1841.75 442.55 1823.75 442.55 1802.15 c
-442.55 1780.55 460.55 1762.55 483.35 1762.55 c
-504.95 1762.55 522.95 1780.55 522.95 1802.15 c
-f*
-753.35 1752.95 m
-772.55 1800.95 l
-753.35 1848.95 l
-905.75 1800.95 l
-f*
-4966.55 2212.55 333.6 16.7996 re
-Y
-4966.55 2222.15 m
-5291.75 2220.95 l
-S
-0 0 6120 7920 re
-Y
-5004.95 2223.35 m
-5004.95 2244.95 4986.95 2262.95 4965.35 2262.95 c
-4942.55 2262.95 4924.55 2244.95 4924.55 2223.35 c
-4924.55 2201.75 4942.55 2183.75 4965.35 2183.75 c
-4986.95 2183.75 5004.95 2201.75 5004.95 2223.35 c
-f*
-5253.35 2172.95 m
-5272.55 2220.95 l
-5253.35 2268.95 l
-5405.75 2220.95 l
-f*
-4968.95 1791.35 330 16.7996 re
-Y
-4968.95 1799.75 m
-5290.55 1800.95 l
-S
-0 0 6120 7920 re
-Y
-5007.35 1800.95 m
-5007.35 1822.55 4989.35 1840.55 4967.75 1840.55 c
-4944.95 1840.55 4926.95 1822.55 4926.95 1800.95 c
-4926.95 1779.35 4944.95 1761.35 4967.75 1761.35 c
-4989.35 1761.35 5007.35 1779.35 5007.35 1800.95 c
-f*
-5253.35 1752.95 m
-5272.55 1800.95 l
-5253.35 1848.95 l
-5405.75 1800.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 1235 a FF(Figure)36 b(2:)52 b(A)35 b(CmpMap)g(\(comp)s
-(ound)f(Mapping\))i(comp)s(osed)g(of)f(t)m(w)m(o)i(comp)s(onen)m(t)f
-(Mappings)f(joined)h(in)0 1348 y(series.)j(The)25 b(output)g(co)s
-(ordinates)g(of)h(the)f(\014rst)f(Mapping)h(feed)g(in)m(to)i(the)e
-(input)f(co)s(ordinates)i(of)f(the)g(second)0 1461 y(one,)31
-b(so)g(that)g(the)f(whole)h(en)m(tit)m(y)h(b)s(eha)m(v)m(es)f(lik)m(e)g
-(a)g(single)g(Mapping.)136 1838 y Fu(\017)46 b FF(Con)m(v)m(ersions)31
-b(b)s(et)m(w)m(een)g(v)-5 b(arious)30 b(time)i(systems)e(\(the)h
-(TimeMap\).)136 2030 y Fu(\017)46 b FF(Con)m(v)m(ersion)31
-b(b)s(et)m(w)m(een)f(2-dimensional)h(spherical)f(celestial)i(co)s
-(ordinates)f(\(longitude)g(and)e(latitude\))227 2143
-y(and)h(a)h(3-dimensional)g(v)m(ectorial)i(p)s(ositions)d(\(the)h
-(SphMap\).)136 2336 y Fu(\017)46 b FF(V)-8 b(arious)26
-b(pro)5 b(jections)25 b(of)g(the)h(celestial)h(sphere)d(on)h(to)h
-(2-dimensional)f(co)s(ordinate)h(spaces|)p Fx(i.e.)f
-FF(map)227 2449 y(pro)5 b(jections)31 b(\(the)g(DssMap)g(and)f
-(WcsMap\).)136 2641 y Fu(\017)46 b FF(P)m(erm)m(utation,)32
-b(in)m(tro)s(duction)f(and)f(elimination)h(of)g(co)s(ordinates)g(\(the)
-g(P)m(ermMap\).)136 2833 y Fu(\017)46 b FF(V)-8 b(arious)21
-b(linear)g(co)s(ordinate)g(transformations)f(\(the)h(MatrixMap,)j
-(WinMap,)f(ShiftMap)d(and)g(Zo)s(omMap\).)136 3026 y
-Fu(\017)46 b FF(General)32 b(N-dimensional)f(p)s(olynomial)f
-(transformations)h(\(the)g(P)m(olyMap\).)136 3218 y Fu(\017)46
-b FF(Lo)s(okup)30 b(tables)h(\(the)g(LutMap\).)136 3411
-y Fu(\017)46 b FF(General-purp)s(ose)24 b(transformations)h(expressed)f
-(using)f(arithmetic)j(op)s(erations)f(and)e(functions)h(sim-)227
-3524 y(ilar)31 b(to)g(those)g(a)m(v)-5 b(ailable)33 b(in)d(C)g(\(the)h
-(MathMap\).)136 3716 y Fu(\017)46 b FF(T)-8 b(ransformations)30
-b(for)f(in)m(ternal)h(use)f(within)g(a)h(program,)f(based)g(on)g(priv)
--5 b(ate)30 b(transformation)g(func-)227 3829 y(tions)h(whic)m(h)f(y)m
-(ou)h(write)f(y)m(ourself)h(in)f(C)g(\(the)h(In)m(traMap\).)0
-4098 y FD(F)-9 b(urther)34 b(reading:)41 b FF(F)-8 b(or)30
-b(a)g(more)g(complete)h(description)f(of)g(eac)m(h)h(of)f(the)g
-(Mappings)g(men)m(tioned)g(ab)s(o)m(v)m(e,)0 4211 y(see)42
-b(its)h(en)m(try)f(in)f(App)s(endix)g(D.)75 b(In)41 b(addition,)46
-b(see)c(the)g(discussion)f(of)h(the)h(P)m(ermMap)f(in)f
-Fu(x)p FF(5.10,)47 b(the)0 4324 y(UnitMap)28 b(in)f Fu(x)p
-FF(5.9)i(and)e(the)g(In)m(traMap)h(in)f Fu(x)p FF(20.)41
-b(The)27 b(Zo)s(omMap)g(is)h(used)e(as)i(an)f(example)h(throughout)f
-Fu(x)p FF(4.)0 4625 y Fw(2.3)112 b(Comp)s(ound)39 b(Mappings)0
-4850 y FF(The)27 b(Mappings)f(describ)s(ed)g(in)h Fu(x)p
-FF(2.2)i(pro)m(vide)e(a)g(set)h(of)f(basic)h(building)e(blo)s(c)m(ks)h
-(from)g(whic)m(h)g(more)g(complex)0 4963 y(Mappings)f(ma)m(y)h(b)s(e)e
-(constructed.)40 b(The)25 b(k)m(ey)i(to)g(doing)f(this)g(is)g(a)h(t)m
-(yp)s(e)f(of)g(Mapping)g(called)i(a)e(CmpMap,)g(or)0
-5076 y(comp)s(ound)k(Mapping.)42 b(A)31 b(CmpMap's)f(role)i(is,)f(in)g
-(principle,)g(v)m(ery)g(simple:)42 b(it)32 b(allo)m(ws)g(an)m(y)f
-(other)h(pair)e(of)0 5189 y(Mappings)c(to)h(b)s(e)e(joined)h(together)h
-(in)m(to)g(a)f(single)h(en)m(tit)m(y)h(whic)m(h)e(b)s(eha)m(v)m(es)g
-(as)g(if)g(it)h(w)m(ere)f(a)h(single)f(Mapping.)0 5302
-y(A)k(CmpMap)g(is)g(therefore)h(a)g(con)m(tainer)h(for)e(another)g
-(pair)h(of)f(Mappings.)0 5467 y(A)c(pair)h(of)f(Mappings)g(ma)m(y)h(b)s
-(e)f(com)m(bined)g(using)g(a)h(CmpMap)f(in)g(either)g(of)h(t)m(w)m(o)h
-(w)m(a)m(ys.)40 b(The)26 b(\014rst)f(of)i(these,)0 5580
-y Fx(in)g(series,)e FF(is)f(illustrated)g(in)g(Figure)g(2.)116
-b(Here,)26 b(the)e(transformations)g(implemen)m(ted)g(b)m(y)g(eac)m(h)h
-(comp)s(onen)m(t)0 5693 y(Mapping)i(are)g(p)s(erformed)e(one)h(after)i
-(the)e(other,)i(with)e(the)h(output)f(from)h(the)f(\014rst)g(Mapping)h
-(feeding)f(in)m(to)p eop end
-%%Page: 7 17
-TeXDict begin 7 16 bop 0 52 a Fy(2.4)92 b(Represen)m(ting)31
-b(Co)s(ordinate)f(Systems)2188 b FF(7)918 1916 y @beginspecial
-152 @llx 155 @lly 463 @urx 420 @ury 2332 @rwi @setspecial
-%%BeginDocument: sun211_figures/parallel.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 152 155 463 420
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/05 14:50:56
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-4253.75 3863.75 m
-4253.75 4016.15 4128.95 4140.95 3976.55 4140.95 c
-2309.75 4140.95 l
-2157.35 4140.95 2032.55 4016.15 2032.55 3863.75 c
-2032.55 1836.95 l
-2032.55 1684.55 2157.35 1559.75 2309.75 1559.75 c
-3976.55 1559.75 l
-4128.95 1559.75 4253.75 1684.55 4253.75 1836.95 c
-f*
-1 g
-4188.95 3918.95 m
-4188.95 4071.35 4065.35 4194.95 3912.95 4194.95 c
-2254.55 4194.95 l
-2102.15 4194.95 1978.55 4071.35 1978.55 3918.95 c
-1978.55 1900.55 l
-1978.55 1748.15 2102.15 1624.55 2254.55 1624.55 c
-3912.95 1624.55 l
-4065.35 1624.55 4188.95 1748.15 4188.95 1900.55 c
-f*
-8 w
-1 J
-1 j
-0 g
-4188.95 3918.95 m
-4188.95 4071.35 4065.35 4194.95 3912.95 4194.95 c
-2254.55 4194.95 l
-2102.15 4194.95 1978.55 4071.35 1978.55 3918.95 c
-1978.55 1900.55 l
-1978.55 1748.15 2102.15 1624.55 2254.55 1624.55 c
-3912.95 1624.55 l
-4065.35 1624.55 4188.95 1748.15 4188.95 1900.55 c
-h
-S
-1983.35 3352.55 308.4 103.2 re
-Y
-1983.35 3360.95 m
-2283.35 3448.55 l
-S
-0 0 6120 7920 re
-Y
-2022.95 3362.15 m
-2022.95 3383.75 2004.95 3401.75 1983.35 3401.75 c
-1960.55 3401.75 1942.55 3383.75 1942.55 3362.15 c
-1942.55 3340.55 1960.55 3322.55 1983.35 3322.55 c
-2004.95 3322.55 2022.95 3340.55 2022.95 3362.15 c
-f*
-2259.35 3392.15 m
-2265.35 3442.55 l
-2234.15 3482.15 l
-2393.75 3479.75 l
-f*
-0.564706 g
-3833.75 3651.35 m
-3833.75 3722.15 3776.15 3780.95 3704.15 3780.95 c
-2582.15 3780.95 l
-2510.15 3780.95 2452.55 3722.15 2452.55 3651.35 c
-2452.55 2872.55 l
-2452.55 2800.55 2510.15 2742.95 2582.15 2742.95 c
-3704.15 2742.95 l
-3776.15 2742.95 3833.75 2800.55 3833.75 2872.55 c
-f*
-1 g
-3768.95 3706.55 m
-3768.95 3777.35 3712.55 3834.95 3640.55 3834.95 c
-2526.95 3834.95 l
-2456.15 3834.95 2398.55 3777.35 2398.55 3706.55 c
-2398.55 2934.95 l
-2398.55 2865.35 2456.15 2807.75 2526.95 2807.75 c
-3640.55 2807.75 l
-3711.35 2807.75 3768.95 2865.35 3768.95 2934.95 c
-f*
-0 g
-3768.95 3706.55 m
-3768.95 3777.35 3712.55 3834.95 3640.55 3834.95 c
-2526.95 3834.95 l
-2456.15 3834.95 2398.55 3777.35 2398.55 3706.55 c
-2398.55 2934.95 l
-2398.55 2865.35 2456.15 2807.75 2526.95 2807.75 c
-3640.55 2807.75 l
-3711.35 2807.75 3768.95 2865.35 3768.95 2934.95 c
-h
-S
-0.564706 g
-3833.75 2325.35 m
-3833.75 2367.35 3800.15 2400.95 3758.15 2400.95 c
-2528.15 2400.95 l
-2486.15 2400.95 2452.55 2367.35 2452.55 2325.35 c
-2452.55 1875.35 l
-2452.55 1833.35 2486.15 1799.75 2528.15 1799.75 c
-3758.15 1799.75 l
-3800.15 1799.75 3833.75 1833.35 3833.75 1875.35 c
-f*
-1 g
-3768.95 2381.75 m
-3768.95 2422.55 3736.55 2454.95 3694.55 2454.95 c
-2472.95 2454.95 l
-2430.95 2454.95 2398.55 2422.55 2398.55 2381.75 c
-2398.55 1937.75 l
-2398.55 1896.95 2430.95 1864.55 2472.95 1864.55 c
-3694.55 1864.55 l
-3736.55 1864.55 3768.95 1896.95 3768.95 1937.75 c
-f*
-0 g
-3768.95 2381.75 m
-3768.95 2422.55 3736.55 2454.95 3694.55 2454.95 c
-2472.95 2454.95 l
-2430.95 2454.95 2398.55 2422.55 2398.55 2381.75 c
-2398.55 1937.75 l
-2398.55 1896.95 2430.95 1864.55 2472.95 1864.55 c
-3694.55 1864.55 l
-3736.55 1864.55 3768.95 1896.95 3768.95 1937.75 c
-h
-S
-1983.35 2932.55 320.4 190.8 re
-Y
-1983.35 2940.95 m
-2295.35 3123.35 l
-S
-0 0 6120 7920 re
-Y
-2022.95 2942.15 m
-2022.95 2963.75 2004.95 2981.75 1983.35 2981.75 c
-1960.55 2981.75 1942.55 2963.75 1942.55 2942.15 c
-1942.55 2920.55 1960.55 2902.55 1983.35 2902.55 c
-2004.95 2902.55 2022.95 2920.55 2022.95 2942.15 c
-f*
-2285.75 3062.15 m
-2277.35 3112.55 l
-2237.75 3144.95 l
-2393.75 3179.75 l
-f*
-0.2 i
-2762 3384.14 m
-2762 3302.6 l
-2762 3287.66 2759.88 3285.32 2745.94 3284.42 c
-2745.94 3281 l
-2796.34 3281 l
-2796.34 3284.42 l
-2783.2 3285.32 2781 3287.84 2781 3300.62 c
-2781 3380.54 l
-2781 3393.32 2783.29 3395.66 2796.34 3396.74 c
-2796.34 3400 l
-2760.52 3400 l
-2720.74 3309.26 l
-2679.16 3400 l
-2643.52 3400 l
-2643.52 3397 l
-2658.28 3396.09 2661 3393.89 2661 3380.54 c
-2661 3307.46 l
-2661 3288.92 2658.43 3285.5 2643.16 3284.42 c
-2643.16 3281 l
-2685.46 3281 l
-2685.46 3284 l
-2671.6 3284.73 2669 3288.95 2669 3307.46 c
-2669 3380 l
-2713.72 3281 l
-2716.24 3281 l
-h
-2801.02 3281 m
-f*
-2880.56 3292.88 m
-2877.5 3290.36 2875.34 3289.2 2872.64 3289.2 c
-2868.5 3289.2 2867 3291.78 2867 3299.9 c
-2867 3335 l
-2867 3344.18 2866.16 3349.22 2863.82 3353.36 c
-2860.04 3360.2 2852.3 3363.8 2841.32 3363.8 c
-2832.14 3363.8 2823.5 3361.28 2818.46 3357.14 c
-2813.96 3353.36 2811 3348.14 2811 3343.64 c
-2811 3339.5 2814.46 3335.9 2818.82 3335.9 c
-2823.14 3335.9 2826.92 3339.5 2826.92 3343.46 c
-2826.92 3344.18 2826.74 3345.08 2826.56 3346.34 c
-2826.2 3347.96 2826 3349.4 2826 3350.66 c
-2826 3355.52 2831.77 3359.8 2838.98 3359.8 c
-2847.8 3359.8 2852 3354.47 2852 3344.54 c
-2852 3333.56 l
-2824.76 3322.4 2821.75 3320.96 2814.14 3314.12 c
-2810.18 3310.52 2807.66 3304.4 2807.66 3298.46 c
-2807.66 3287.12 2815.4 3279.2 2826.56 3279.2 c
-2834.48 3279.2 2841.86 3282.98 2852.84 3292.34 c
-2853.74 3282.8 2856.98 3279.2 2864.36 3279.2 c
-2870.48 3279.2 2874.26 3281.36 2880.56 3288.2 c
-h
-2852 3303.14 m
-2852 3297.56 2851.23 3295.94 2847.98 3293.6 c
-2843.66 3291.08 2838.62 3289.2 2834.84 3289.2 c
-2828.54 3289.2 2823.48 3295.51 2823.48 3303.5 c
-2823.48 3304.22 l
-2823.48 3314.84 2830.7 3321.32 2852 3329.24 c
-h
-2880.92 3281 m
-f*
-2882.62 3351.74 m
-2884.24 3351.92 2885.5 3351.92 2887.12 3351.92 c
-2893.24 3351.92 2895 3350.12 2895 3341.66 c
-2895 3257.42 l
-2895 3248.06 2892.94 3246.08 2881.9 3245 c
-2881.9 3242 l
-2925.46 3242 l
-2925.46 3245 l
-2911.96 3245.18 2910 3247.19 2910 3258.68 c
-2910 3286.94 l
-2916.34 3281 2920.4 3279.2 2927.8 3279.2 c
-2949.22 3279.2 2965 3299.36 2965 3325.46 c
-2965 3347.78 2952.65 3363.8 2935.54 3363.8 c
-2925.61 3363.8 2917.8 3359.48 2910 3349.58 c
-2910 3363.44 l
-2908.54 3363.8 l
-2899 3360.02 2892.52 3357.68 2882.62 3354.62 c
-h
-2910 3341.12 m
-2910 3346.52 2919.87 3352.8 2927.98 3352.8 c
-2941.3 3352.8 2950 3339.2 2950 3318.26 c
-2950 3298.46 2941.23 3284.2 2928.34 3284.2 c
-2919.88 3284.2 2910 3291.09 2910 3296.84 c
-h
-2971 3281 m
-f*
-2972.62 3351.74 m
-2974.24 3351.92 2975.5 3351.92 2977.12 3351.92 c
-2983.24 3351.92 2985 3350.12 2985 3341.66 c
-2985 3257.42 l
-2985 3248.06 2982.94 3246.08 2971.9 3245 c
-2971.9 3242 l
-3015.46 3242 l
-3015.46 3245 l
-3001.96 3245.18 3000 3247.19 3000 3258.68 c
-3000 3286.94 l
-3006.34 3281 3010.4 3279.2 3017.8 3279.2 c
-3039.22 3279.2 3055 3299.36 3055 3325.46 c
-3055 3347.78 3042.65 3363.8 3025.54 3363.8 c
-3015.61 3363.8 3007.8 3359.48 3000 3349.58 c
-3000 3363.44 l
-2998.54 3363.8 l
-2989 3360.02 2982.52 3357.68 2972.62 3354.62 c
-h
-3000 3341.12 m
-3000 3346.52 3009.87 3352.8 3017.98 3352.8 c
-3031.3 3352.8 3040 3339.2 3040 3318.26 c
-3040 3298.46 3031.23 3284.2 3018.34 3284.2 c
-3009.88 3284.2 3000 3291.09 3000 3296.84 c
-h
-3061 3281 m
-f*
-3092.5 3363.8 m
-3064.6 3353.9 l
-3064.6 3351.2 l
-3066.04 3351.38 l
-3068.2 3351.74 3070.54 3351.72 3072.16 3351.72 c
-3076.48 3351.72 3078 3348.89 3078 3341.12 c
-3078 3299.36 l
-3078 3286.4 3076.21 3284.42 3063.88 3283.7 c
-3063.88 3281 l
-3106.54 3281 l
-3106.54 3283.7 l
-3094.66 3284.6 3093 3286.4 3093 3299.36 c
-3093 3363.26 l
-h
-3084.22 3404 m
-3079.18 3404 3075 3399.83 3075 3394.76 c
-3075 3389.54 3078.98 3386 3084.04 3386 c
-3089.44 3386 3094 3389.78 3094 3394.76 c
-3094 3399.8 3089.59 3404 3084.22 3404 c
-h
-3111.04 3281 m
-f*
-3113.88 3352.64 m
-3115.14 3353.18 3116.76 3353.36 3118.74 3353.36 c
-3123.78 3353.36 3125 3350.66 3125 3341.84 c
-3125 3297.2 l
-3125 3286.94 3123.09 3284.42 3114.24 3283.7 c
-3114.24 3281 l
-3152.4 3281 l
-3152.4 3283.7 l
-3143.22 3284.42 3140 3286.58 3140 3293.06 c
-3140 3343.64 l
-3148.7 3351.74 3152.95 3353.8 3159.06 3353.8 c
-3167.88 3353.8 3172 3348.25 3172 3336.44 c
-3172 3298.82 l
-3172 3287.48 3169.7 3284.42 3160.86 3283.7 c
-3160.86 3281 l
-3198.3 3281 l
-3198.3 3283.7 l
-3189.48 3284.6 3187 3286.76 3187 3295.58 c
-3187 3336.8 l
-3187 3353.72 3179.2 3363.8 3166.08 3363.8 c
-3157.64 3363.8 3151.94 3360.74 3139.46 3349.22 c
-3139.46 3363.44 l
-3138.72 3363.8 l
-3129.9 3360.56 3123.78 3358.58 3113.88 3355.7 c
-h
-3201 3281 m
-f*
-3285.6 3351 m
-3285.6 3358 l
-3271.74 3358 l
-3268.14 3358 3265.44 3358.5 3261.84 3359.66 c
-3257.88 3361.1 l
-3253.02 3362.9 3248.16 3363.8 3243.48 3363.8 c
-3226.74 3363.8 3213.38 3350.84 3213.38 3334.46 c
-3213.38 3323.12 3218.07 3316.28 3230.16 3310.34 c
-3227.64 3307.82 3225.12 3305.48 3222.42 3303.14 c
-3216.48 3297.92 3214.1 3294.32 3214.1 3290.72 c
-3214.1 3286.76 3216.09 3284.78 3223.68 3281.18 c
-3210.72 3271.82 3206 3265.88 3206 3259.22 c
-3206 3249.68 3219.88 3242 3237.18 3242 c
-3250.14 3242 3263.82 3246.23 3273.18 3253.28 c
-3280.56 3259.04 3284 3264.98 3284 3272.18 c
-3284 3283.34 3275.53 3290.9 3262.2 3291.44 c
-3238.98 3292.52 l
-3229.26 3292.88 3224.94 3294.5 3224.94 3297.38 c
-3224.94 3300.98 3230.88 3307.28 3235.74 3308.72 c
-3239.16 3308.36 l
-3242.4 3308 3244.92 3308 3246 3308 c
-3252.3 3308 3259.32 3310.46 3264.72 3314.84 c
-3271.2 3319.88 3274 3326.36 3274 3335.72 c
-3274 3341 3273.12 3345.18 3270.66 3351 c
-h
-3227.46 3280.64 m
-3233.58 3279.38 3247.8 3278.3 3256.62 3278.3 c
-3273 3278.3 3279 3276.14 3279 3269.48 c
-3279 3259.04 3265.3 3252 3244.74 3252 c
-3228.9 3252 3219 3257.23 3219 3265.16 c
-3219 3269.3 3220.55 3272 3227.46 3280.64 c
-h
-3228.36 3341.84 m
-3228.36 3352.46 3233.4 3358.8 3241.68 3358.8 c
-3247.26 3358.8 3251.94 3355.73 3254.82 3350.3 c
-3258.24 3344 3260 3335.9 3260 3328.52 c
-3260 3318.62 3254.87 3313 3246.9 3313 c
-3235.74 3313 3228.36 3324.43 3228.36 3341.3 c
-h
-3291 3281 m
-f*
-3336 3281 m
-f*
-3463.08 3284.42 m
-3454.98 3284.96 3453.18 3286.76 3446.88 3300.08 c
-3402.06 3402.16 l
-3398.46 3402.16 l
-3361.02 3313.94 l
-3349.5 3287.66 3347.34 3284.96 3338.7 3284.42 c
-3338.7 3281 l
-3374.34 3281 l
-3374.34 3284.82 l
-3365.7 3284.82 3362.1 3287.03 3362.1 3291.8 c
-3362.1 3293.96 3362.64 3296.48 3363.54 3298.82 c
-3371.82 3320 l
-3418.98 3320 l
-3426.36 3302.6 l
-3428.52 3297.56 3429.78 3293.06 3429.78 3290.36 c
-3429.78 3288.74 3428.7 3286.76 3427.26 3286.04 c
-3425.1 3284.78 3423.66 3284.82 3417.18 3284.82 c
-3417.18 3281 l
-3463.08 3281 l
-h
-3374.88 3327 m
-3395.58 3376.76 l
-3416.46 3327 l
-h
-3465.96 3281 m
-f*
-2827 2184.14 m
-2827 2102.6 l
-2827 2087.66 2824.88 2085.32 2810.94 2084.42 c
-2810.94 2081 l
-2861.34 2081 l
-2861.34 2084.42 l
-2848.2 2085.32 2846 2087.84 2846 2100.62 c
-2846 2180.54 l
-2846 2193.32 2848.29 2195.66 2861.34 2196.74 c
-2861.34 2200 l
-2825.52 2200 l
-2785.74 2109.26 l
-2744.16 2200 l
-2708.52 2200 l
-2708.52 2197 l
-2723.28 2196.09 2726 2193.89 2726 2180.54 c
-2726 2107.46 l
-2726 2088.92 2723.43 2085.5 2708.16 2084.42 c
-2708.16 2081 l
-2750.46 2081 l
-2750.46 2084 l
-2736.6 2084.73 2734 2088.95 2734 2107.46 c
-2734 2180 l
-2778.72 2081 l
-2781.24 2081 l
-h
-2866.02 2081 m
-f*
-2946.56 2092.88 m
-2943.5 2090.36 2941.34 2089.2 2938.64 2089.2 c
-2934.5 2089.2 2933 2091.78 2933 2099.9 c
-2933 2135 l
-2933 2144.18 2932.16 2149.22 2929.82 2153.36 c
-2926.04 2160.2 2918.3 2163.8 2907.32 2163.8 c
-2898.14 2163.8 2889.5 2161.28 2884.46 2157.14 c
-2879.96 2153.36 2877 2148.14 2877 2143.64 c
-2877 2139.5 2880.46 2135.9 2884.82 2135.9 c
-2889.14 2135.9 2892.92 2139.5 2892.92 2143.46 c
-2892.92 2144.18 2892.74 2145.08 2892.56 2146.34 c
-2892.2 2147.96 2892 2149.4 2892 2150.66 c
-2892 2155.52 2897.77 2159.8 2904.98 2159.8 c
-2913.8 2159.8 2918 2154.47 2918 2144.54 c
-2918 2133.56 l
-2890.76 2122.4 2887.75 2120.96 2880.14 2114.12 c
-2876.18 2110.52 2873.66 2104.4 2873.66 2098.46 c
-2873.66 2087.12 2881.4 2079.2 2892.56 2079.2 c
-2900.48 2079.2 2907.86 2082.98 2918.84 2092.34 c
-2919.74 2082.8 2922.98 2079.2 2930.36 2079.2 c
-2936.48 2079.2 2940.26 2081.36 2946.56 2088.2 c
-h
-2918 2103.14 m
-2918 2097.56 2917.23 2095.94 2913.98 2093.6 c
-2909.66 2091.08 2904.62 2089.2 2900.84 2089.2 c
-2894.54 2089.2 2889.48 2095.51 2889.48 2103.5 c
-2889.48 2104.22 l
-2889.48 2114.84 2896.7 2121.32 2918 2129.24 c
-h
-2946.92 2081 m
-f*
-2947.62 2151.74 m
-2949.24 2151.92 2950.5 2151.92 2952.12 2151.92 c
-2958.24 2151.92 2960 2150.12 2960 2141.66 c
-2960 2057.42 l
-2960 2048.06 2957.94 2046.08 2946.9 2045 c
-2946.9 2042 l
-2990.46 2042 l
-2990.46 2045 l
-2976.96 2045.18 2975 2047.19 2975 2058.68 c
-2975 2086.94 l
-2981.34 2081 2985.4 2079.2 2992.8 2079.2 c
-3014.22 2079.2 3030 2099.36 3030 2125.46 c
-3030 2147.78 3017.65 2163.8 3000.54 2163.8 c
-2990.61 2163.8 2982.8 2159.48 2975 2149.58 c
-2975 2163.44 l
-2973.54 2163.8 l
-2964 2160.02 2957.52 2157.68 2947.62 2154.62 c
-h
-2975 2141.12 m
-2975 2146.52 2984.87 2152.8 2992.98 2152.8 c
-3006.3 2152.8 3015 2139.2 3015 2118.26 c
-3015 2098.46 3006.23 2084.2 2993.34 2084.2 c
-2984.88 2084.2 2975 2091.09 2975 2096.84 c
-h
-3036 2081 m
-f*
-3037.62 2151.74 m
-3039.24 2151.92 3040.5 2151.92 3042.12 2151.92 c
-3048.24 2151.92 3050 2150.12 3050 2141.66 c
-3050 2057.42 l
-3050 2048.06 3047.94 2046.08 3036.9 2045 c
-3036.9 2042 l
-3080.46 2042 l
-3080.46 2045 l
-3066.96 2045.18 3065 2047.19 3065 2058.68 c
-3065 2086.94 l
-3071.34 2081 3075.4 2079.2 3082.8 2079.2 c
-3104.22 2079.2 3120 2099.36 3120 2125.46 c
-3120 2147.78 3107.65 2163.8 3090.54 2163.8 c
-3080.61 2163.8 3072.8 2159.48 3065 2149.58 c
-3065 2163.44 l
-3063.54 2163.8 l
-3054 2160.02 3047.52 2157.68 3037.62 2154.62 c
-h
-3065 2141.12 m
-3065 2146.52 3074.87 2152.8 3082.98 2152.8 c
-3096.3 2152.8 3105 2139.2 3105 2118.26 c
-3105 2098.46 3096.23 2084.2 3083.34 2084.2 c
-3074.88 2084.2 3065 2091.09 3065 2096.84 c
-h
-3126 2081 m
-f*
-3157.5 2163.8 m
-3129.6 2153.9 l
-3129.6 2151.2 l
-3131.04 2151.38 l
-3133.2 2151.74 3135.54 2151.72 3137.16 2151.72 c
-3141.48 2151.72 3143 2148.89 3143 2141.12 c
-3143 2099.36 l
-3143 2086.4 3141.21 2084.42 3128.88 2083.7 c
-3128.88 2081 l
-3171.54 2081 l
-3171.54 2083.7 l
-3159.66 2084.6 3158 2086.4 3158 2099.36 c
-3158 2163.26 l
-h
-3149.22 2204 m
-3144.18 2204 3140 2199.83 3140 2194.76 c
-3140 2189.54 3143.98 2186 3149.04 2186 c
-3154.44 2186 3159 2189.78 3159 2194.76 c
-3159 2199.8 3154.59 2204 3149.22 2204 c
-h
-3176.04 2081 m
-f*
-3178.88 2152.64 m
-3180.14 2153.18 3181.76 2153.36 3183.74 2153.36 c
-3188.78 2153.36 3190 2150.66 3190 2141.84 c
-3190 2097.2 l
-3190 2086.94 3188.09 2084.42 3179.24 2083.7 c
-3179.24 2081 l
-3217.4 2081 l
-3217.4 2083.7 l
-3208.22 2084.42 3205 2086.58 3205 2093.06 c
-3205 2143.64 l
-3213.7 2151.74 3217.95 2153.8 3224.06 2153.8 c
-3232.88 2153.8 3237 2148.25 3237 2136.44 c
-3237 2098.82 l
-3237 2087.48 3234.7 2084.42 3225.86 2083.7 c
-3225.86 2081 l
-3263.3 2081 l
-3263.3 2083.7 l
-3254.48 2084.6 3252 2086.76 3252 2095.58 c
-3252 2136.8 l
-3252 2153.72 3244.2 2163.8 3231.08 2163.8 c
-3222.64 2163.8 3216.94 2160.74 3204.46 2149.22 c
-3204.46 2163.44 l
-3203.72 2163.8 l
-3194.9 2160.56 3188.78 2158.58 3178.88 2155.7 c
-h
-3266 2081 m
-f*
-3350.6 2151 m
-3350.6 2158 l
-3336.74 2158 l
-3333.14 2158 3330.44 2158.5 3326.84 2159.66 c
-3322.88 2161.1 l
-3318.02 2162.9 3313.16 2163.8 3308.48 2163.8 c
-3291.74 2163.8 3278.38 2150.84 3278.38 2134.46 c
-3278.38 2123.12 3283.07 2116.28 3295.16 2110.34 c
-3292.64 2107.82 3290.12 2105.48 3287.42 2103.14 c
-3281.48 2097.92 3279.1 2094.32 3279.1 2090.72 c
-3279.1 2086.76 3281.09 2084.78 3288.68 2081.18 c
-3275.72 2071.82 3271 2065.88 3271 2059.22 c
-3271 2049.68 3284.88 2042 3302.18 2042 c
-3315.14 2042 3328.82 2046.23 3338.18 2053.28 c
-3345.56 2059.04 3349 2064.98 3349 2072.18 c
-3349 2083.34 3340.53 2090.9 3327.2 2091.44 c
-3303.98 2092.52 l
-3294.26 2092.88 3289.94 2094.5 3289.94 2097.38 c
-3289.94 2100.98 3295.88 2107.28 3300.74 2108.72 c
-3304.16 2108.36 l
-3307.4 2108 3309.92 2108 3311 2108 c
-3317.3 2108 3324.32 2110.46 3329.72 2114.84 c
-3336.2 2119.88 3339 2126.36 3339 2135.72 c
-3339 2141 3338.12 2145.18 3335.66 2151 c
-h
-3292.46 2080.64 m
-3298.58 2079.38 3312.8 2078.3 3321.62 2078.3 c
-3338 2078.3 3344 2076.14 3344 2069.48 c
-3344 2059.04 3330.3 2052 3309.74 2052 c
-3293.9 2052 3284 2057.23 3284 2065.16 c
-3284 2069.3 3285.55 2072 3292.46 2080.64 c
-h
-3293.36 2141.84 m
-3293.36 2152.46 3298.4 2158.8 3306.68 2158.8 c
-3312.26 2158.8 3316.94 2155.73 3319.82 2150.3 c
-3323.24 2144 3325 2135.9 3325 2128.52 c
-3325 2118.62 3319.87 2113 3311.9 2113 c
-3300.74 2113 3293.36 2124.43 3293.36 2141.3 c
-h
-3356 2081 m
-f*
-3401 2081 m
-f*
-3404.06 2200 m
-3404.06 2197 l
-3419.18 2196.09 3421 2194.07 3421 2180.54 c
-3421 2100.62 l
-3421 2087.3 3418.71 2084.96 3404.06 2084.42 c
-3404.06 2081 l
-3464.18 2081 l
-3491 2081 3508 2093.42 3508 2113.4 c
-3508 2121.32 3504.85 2128.52 3498.92 2133.74 c
-3493.52 2138.6 3488.66 2140.94 3476.96 2143.64 c
-3486.32 2145.98 3490.1 2147.78 3494.42 2151.56 c
-3498.92 2155.52 3502 2162.18 3502 2169.56 c
-3502 2189.72 3485.85 2200 3454.46 2200 c
-h
-3440 2139.68 m
-3456.94 2139.68 3464.78 2138.78 3471.56 2136.26 c
-3482 2132.12 3487 2124.74 3487 2113.22 c
-3487 2103.5 3483.23 2096.48 3476.06 2092.34 c
-3470.3 2088.92 3463.1 2088 3450.5 2088 c
-3442.22 2088 3440 2089.55 3440 2095.04 c
-h
-3440 2146.88 m
-3440 2188.1 l
-3440 2191.88 3441.16 2193 3443.66 2193 c
-3451.58 2193 l
-3472.28 2193 3483 2184.71 3483 2168.84 c
-3483 2154.8 3473.55 2146.88 3456.8 2146.88 c
-h
-3521.06 2081 m
-f*
-2825.6 4082 m
-2823.98 4122.52 l
-2820.2 4122.52 l
-2819.12 4118.84 2816.24 4116.58 2812.82 4116.58 c
-2811.02 4116.58 2808.5 4117.17 2805.62 4118.36 c
-2796.8 4121.24 2787.98 4122.52 2779.16 4122.52 c
-2765.3 4122.52 2751.08 4117.36 2740.1 4108.46 c
-2726.42 4097.12 2719 4080.02 2719 4059.5 c
-2719 4022.96 2742.96 3998.48 2778.8 3998.48 c
-2799.14 3998.48 2816.96 4006.76 2827.94 4021.34 c
-2824.7 4024.58 l
-2811.38 4011.8 2799.5 4006.48 2784.56 4006.48 c
-2773.76 4006.48 2764.04 4009.69 2756.48 4015.94 c
-2745.86 4024.76 2740 4040.96 2740 4061.84 c
-2740 4094.42 2756.71 4115.52 2782.76 4115.52 c
-2793.2 4115.52 2802.38 4111.73 2809.58 4104.5 c
-2815.34 4098.74 2818.04 4093.7 2821.46 4082 c
-h
-2834.06 4001 m
-f*
-2837.14 4072.64 m
-2839.48 4073.18 2840.92 4073.36 2842.9 4073.36 c
-2847.58 4073.36 2849 4070.48 2849 4061.84 c
-2849 4016.3 l
-2849 4006.58 2846.52 4003.88 2836.6 4003.7 c
-2836.6 4001 l
-2876.56 4001 l
-2876.56 4004 l
-2867.02 4004.35 2864 4006.27 2864 4013.06 c
-2864 4063.82 l
-2864 4064.18 2865.23 4065.44 2866.66 4066.88 c
-2870.98 4071.2 2879.08 4074.8 2885.74 4074.8 c
-2893.48 4074.8 2898 4068.2 2898 4055.54 c
-2898 4016.48 l
-2898 4006.4 2895.93 4004.42 2885.2 4003.7 c
-2885.2 4001 l
-2925.52 4001 l
-2925.52 4004 l
-2915.26 4004.18 2913 4007.17 2913 4018.1 c
-2913 4063.46 l
-2918.28 4071.2 2923.91 4074.8 2932.18 4074.8 c
-2942.44 4074.8 2946 4069.85 2946 4054.64 c
-2946 4016.66 l
-2946 4006.4 2944.52 4004.96 2933.8 4003.7 c
-2933.8 4001 l
-2973.22 4001 l
-2973.22 4003.7 l
-2968.54 4004.06 l
-2963.14 4004.42 2961 4007.66 2961 4014.68 c
-2961 4051.76 l
-2961 4073 2953.91 4083.8 2939.92 4083.8 c
-2929.48 4083.8 2920.3 4079.12 2910.58 4068.68 c
-2907.34 4078.94 2901.22 4083.8 2891.5 4083.8 c
-2883.31 4083.8 2878.57 4081.46 2863.28 4069.94 c
-2863.28 4083.44 l
-2862.34 4083.8 l
-2853.16 4080.38 2847.04 4078.4 2837.14 4075.7 c
-h
-2974.04 4001 m
-f*
-2974.62 4071.74 m
-2976.24 4071.92 2977.5 4071.92 2979.12 4071.92 c
-2985.24 4071.92 2987 4070.12 2987 4061.66 c
-2987 3977.42 l
-2987 3968.06 2984.94 3966.08 2973.9 3965 c
-2973.9 3962 l
-3017.46 3962 l
-3017.46 3965 l
-3003.96 3965.18 3002 3967.19 3002 3978.68 c
-3002 4006.94 l
-3008.34 4001 3012.4 3999.2 3019.8 3999.2 c
-3041.22 3999.2 3057 4019.36 3057 4045.46 c
-3057 4067.78 3044.65 4083.8 3027.54 4083.8 c
-3017.61 4083.8 3009.8 4079.48 3002 4069.58 c
-3002 4083.44 l
-3000.54 4083.8 l
-2991 4080.02 2984.52 4077.68 2974.62 4074.62 c
-h
-3002 4061.12 m
-3002 4066.52 3011.87 4072.8 3019.98 4072.8 c
-3033.3 4072.8 3042 4059.2 3042 4038.26 c
-3042 4018.46 3033.23 4004.2 3020.34 4004.2 c
-3011.88 4004.2 3002 4011.09 3002 4016.84 c
-h
-3063 4001 m
-f*
-3184 4104.14 m
-3184 4022.6 l
-3184 4007.66 3181.88 4005.32 3167.94 4004.42 c
-3167.94 4001 l
-3218.34 4001 l
-3218.34 4004.42 l
-3205.2 4005.32 3203 4007.84 3203 4020.62 c
-3203 4100.54 l
-3203 4113.32 3205.29 4115.66 3218.34 4116.74 c
-3218.34 4120 l
-3182.52 4120 l
-3142.74 4029.26 l
-3101.16 4120 l
-3065.52 4120 l
-3065.52 4117 l
-3080.28 4116.09 3083 4113.89 3083 4100.54 c
-3083 4027.46 l
-3083 4008.92 3080.43 4005.5 3065.16 4004.42 c
-3065.16 4001 l
-3107.46 4001 l
-3107.46 4004 l
-3093.6 4004.73 3091 4008.95 3091 4027.46 c
-3091 4100 l
-3135.72 4001 l
-3138.24 4001 l
-h
-3223.02 4001 m
-f*
-3303.56 4012.88 m
-3300.5 4010.36 3298.34 4009.2 3295.64 4009.2 c
-3291.5 4009.2 3290 4011.78 3290 4019.9 c
-3290 4055 l
-3290 4064.18 3289.16 4069.22 3286.82 4073.36 c
-3283.04 4080.2 3275.3 4083.8 3264.32 4083.8 c
-3255.14 4083.8 3246.5 4081.28 3241.46 4077.14 c
-3236.96 4073.36 3234 4068.14 3234 4063.64 c
-3234 4059.5 3237.46 4055.9 3241.82 4055.9 c
-3246.14 4055.9 3249.92 4059.5 3249.92 4063.46 c
-3249.92 4064.18 3249.74 4065.08 3249.56 4066.34 c
-3249.2 4067.96 3249 4069.4 3249 4070.66 c
-3249 4075.52 3254.77 4079.8 3261.98 4079.8 c
-3270.8 4079.8 3275 4074.47 3275 4064.54 c
-3275 4053.56 l
-3247.76 4042.4 3244.75 4040.96 3237.14 4034.12 c
-3233.18 4030.52 3230.66 4024.4 3230.66 4018.46 c
-3230.66 4007.12 3238.4 3999.2 3249.56 3999.2 c
-3257.48 3999.2 3264.86 4002.98 3275.84 4012.34 c
-3276.74 4002.8 3279.98 3999.2 3287.36 3999.2 c
-3293.48 3999.2 3297.26 4001.36 3303.56 4008.2 c
-h
-3275 4023.14 m
-3275 4017.56 3274.23 4015.94 3270.98 4013.6 c
-3266.66 4011.08 3261.62 4009.2 3257.84 4009.2 c
-3251.54 4009.2 3246.48 4015.51 3246.48 4023.5 c
-3246.48 4024.22 l
-3246.48 4034.84 3253.7 4041.32 3275 4049.24 c
-h
-3303.92 4001 m
-f*
-3304.62 4071.74 m
-3306.24 4071.92 3307.5 4071.92 3309.12 4071.92 c
-3315.24 4071.92 3317 4070.12 3317 4061.66 c
-3317 3977.42 l
-3317 3968.06 3314.94 3966.08 3303.9 3965 c
-3303.9 3962 l
-3347.46 3962 l
-3347.46 3965 l
-3333.96 3965.18 3332 3967.19 3332 3978.68 c
-3332 4006.94 l
-3338.34 4001 3342.4 3999.2 3349.8 3999.2 c
-3371.22 3999.2 3387 4019.36 3387 4045.46 c
-3387 4067.78 3374.65 4083.8 3357.54 4083.8 c
-3347.61 4083.8 3339.8 4079.48 3332 4069.58 c
-3332 4083.44 l
-3330.54 4083.8 l
-3321 4080.02 3314.52 4077.68 3304.62 4074.62 c
-h
-3332 4061.12 m
-3332 4066.52 3341.87 4072.8 3349.98 4072.8 c
-3363.3 4072.8 3372 4059.2 3372 4038.26 c
-3372 4018.46 3363.23 4004.2 3350.34 4004.2 c
-3341.88 4004.2 3332 4011.09 3332 4016.84 c
-h
-3393 4001 m
-f*
-1 i
-3773.75 3382.55 330 104.4 re
-Y
-3773.75 3479.75 m
-4095.35 3390.95 l
-S
-0 0 6120 7920 re
-Y
-3812.15 3480.95 m
-3812.15 3502.55 3794.15 3520.55 3772.55 3520.55 c
-3750.95 3520.55 3732.95 3502.55 3732.95 3480.95 c
-3732.95 3459.35 3750.95 3441.35 3772.55 3441.35 c
-3794.15 3441.35 3812.15 3459.35 3812.15 3480.95 c
-f*
-4046.15 3354.95 m
-4077.35 3395.75 l
-4071.35 3447.35 l
-4205.75 3360.95 l
-f*
-3773.75 2988.95 339.6 190.8 re
-Y
-3773.75 3179.75 m
-4104.95 2997.35 l
-S
-0 0 6120 7920 re
-Y
-3812.15 3180.95 m
-3812.15 3202.55 3794.15 3220.55 3772.55 3220.55 c
-3750.95 3220.55 3732.95 3202.55 3732.95 3180.95 c
-3732.95 3159.35 3750.95 3141.35 3772.55 3141.35 c
-3794.15 3141.35 3812.15 3159.35 3812.15 3180.95 c
-f*
-4049.75 2973.35 m
-4088.15 3005.75 l
-4096.55 3056.15 l
-4205.75 2940.95 l
-f*
-1973.75 2225.75 342 294 re
-Y
-1973.75 2519.75 m
-2307.35 2234.15 l
-S
-0 0 6120 7920 re
-Y
-2012.15 2520.95 m
-2012.15 2542.55 1994.15 2560.55 1972.55 2560.55 c
-1950.95 2560.55 1932.95 2542.55 1932.95 2520.95 c
-1932.95 2499.35 1950.95 2481.35 1972.55 2481.35 c
-1994.15 2481.35 2012.15 2499.35 2012.15 2520.95 c
-f*
-2247.35 2223.35 m
-2291.75 2247.35 l
-2308.55 2294.15 l
-2393.75 2159.75 l
-f*
-3773.75 2151.35 342 295.2 re
-Y
-3773.75 2159.75 m
-4107.35 2446.55 l
-S
-0 0 6120 7920 re
-Y
-3812.15 2160.95 m
-3812.15 2182.55 3794.15 2200.55 3772.55 2200.55 c
-3750.95 2200.55 3732.95 2182.55 3732.95 2160.95 c
-3732.95 2139.35 3750.95 2121.35 3772.55 2121.35 c
-3794.15 2121.35 3812.15 2139.35 3812.15 2160.95 c
-f*
-4108.55 2384.15 m
-4091.75 2432.15 l
-4047.35 2456.15 l
-4193.75 2519.75 l
-f*
-4203.35 3352.55 319.2 15.5999 re
-Y
-4200.95 3360.95 m
-4515.35 3360.95 l
-S
-0 0 6120 7920 re
-Y
-4242.95 3362.15 m
-4242.95 3383.75 4224.95 3401.75 4203.35 3401.75 c
-4180.55 3401.75 4162.55 3383.75 4162.55 3362.15 c
-4162.55 3340.55 4180.55 3322.55 4203.35 3322.55 c
-4224.95 3322.55 4242.95 3340.55 4242.95 3362.15 c
-f*
-4473.35 3312.95 m
-4492.55 3360.95 l
-4473.35 3408.95 l
-4625.75 3360.95 l
-f*
-4203.35 2932.55 319.2 15.5999 re
-Y
-4200.95 2940.95 m
-4515.35 2940.95 l
-S
-0 0 6120 7920 re
-Y
-4242.95 2942.15 m
-4242.95 2963.75 4224.95 2981.75 4203.35 2981.75 c
-4180.55 2981.75 4162.55 2963.75 4162.55 2942.15 c
-4162.55 2920.55 4180.55 2902.55 4203.35 2902.55 c
-4224.95 2902.55 4242.95 2920.55 4242.95 2942.15 c
-f*
-4473.35 2892.95 m
-4492.55 2940.95 l
-4473.35 2988.95 l
-4625.75 2940.95 l
-f*
-4203.35 2512.55 319.2 15.5999 re
-Y
-4200.95 2520.95 m
-4515.35 2520.95 l
-S
-0 0 6120 7920 re
-Y
-4242.95 2522.15 m
-4242.95 2543.75 4224.95 2561.75 4203.35 2561.75 c
-4180.55 2561.75 4162.55 2543.75 4162.55 2522.15 c
-4162.55 2500.55 4180.55 2482.55 4203.35 2482.55 c
-4224.95 2482.55 4242.95 2500.55 4242.95 2522.15 c
-f*
-4473.35 2472.95 m
-4492.55 2520.95 l
-4473.35 2568.95 l
-4625.75 2520.95 l
-f*
-1563.35 3352.55 319.2 15.5999 re
-Y
-1560.95 3360.95 m
-1875.35 3360.95 l
-S
-0 0 6120 7920 re
-Y
-1602.95 3362.15 m
-1602.95 3383.75 1584.95 3401.75 1563.35 3401.75 c
-1540.55 3401.75 1522.55 3383.75 1522.55 3362.15 c
-1522.55 3340.55 1540.55 3322.55 1563.35 3322.55 c
-1584.95 3322.55 1602.95 3340.55 1602.95 3362.15 c
-f*
-1833.35 3312.95 m
-1852.55 3360.95 l
-1833.35 3408.95 l
-1985.75 3360.95 l
-f*
-1563.35 2932.55 319.2 15.5999 re
-Y
-1560.95 2940.95 m
-1875.35 2940.95 l
-S
-0 0 6120 7920 re
-Y
-1602.95 2942.15 m
-1602.95 2963.75 1584.95 2981.75 1563.35 2981.75 c
-1540.55 2981.75 1522.55 2963.75 1522.55 2942.15 c
-1522.55 2920.55 1540.55 2902.55 1563.35 2902.55 c
-1584.95 2902.55 1602.95 2920.55 1602.95 2942.15 c
-f*
-1833.35 2892.95 m
-1852.55 2940.95 l
-1833.35 2988.95 l
-1985.75 2940.95 l
-f*
-1563.35 2512.55 319.2 15.5999 re
-Y
-1560.95 2520.95 m
-1875.35 2520.95 l
-S
-0 0 6120 7920 re
-Y
-1602.95 2522.15 m
-1602.95 2543.75 1584.95 2561.75 1563.35 2561.75 c
-1540.55 2561.75 1522.55 2543.75 1522.55 2522.15 c
-1522.55 2500.55 1540.55 2482.55 1563.35 2482.55 c
-1584.95 2482.55 1602.95 2500.55 1602.95 2522.15 c
-f*
-1833.35 2472.95 m
-1852.55 2520.95 l
-1833.35 2568.95 l
-1985.75 2520.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 2112 a(Figure)30 b(3:)41 b(A)30 b(CmpMap)g(comp)s(osed)f
-(of)h(t)m(w)m(o)i(Mappings)e(joined)f(in)h(parallel.)42
-b(Eac)m(h)30 b(comp)s(onen)m(t)h(Mapping)0 2225 y(acts)g(on)g(a)f
-(complemen)m(tary)i(subset)e(of)g(the)h(input)e(and)h(output)g(co)s
-(ordinates.)0 2604 y(the)g(second.)41 b(The)29 b(second)h(w)m(a)m(y)-8
-b(,)32 b Fx(in)g(p)-5 b(ar)g(al)5 b(lel,)33 b FF(is)d(sho)m(wn)f(in)h
-(Figure)g(3.)82 b(In)29 b(this)h(case,)h(eac)m(h)h(Mapping)d(acts)0
-2717 y(on)h(a)h(complemen)m(tary)h(subset)d(of)i(the)g(input)e(and)h
-(output)g(co)s(ordinates.)2572 2684 y Fv(2)0 2884 y FF(The)c(CmpMap)g
-(forms)g(the)h(k)m(ey)g(to)h(building)e(arbitrarily)h(complex)g
-(Mappings)g(b)s(ecause)f(it)i(is)e(itself)i(a)f(form)0
-2997 y(of)39 b(Mapping.)64 b(This)38 b(means)g(that)h(a)g(CmpMap)e(ma)m
-(y)i(con)m(tain)h(other)e(CmpMaps)g(as)g(comp)s(onen)m(ts)h(\()p
-Fx(e.g.)0 3110 y FF(Figure)d(4\).)58 b(This)34 b(nesting)i(of)g
-(CmpMaps)f(can)h(b)s(e)f(rep)s(eated)h(inde\014nitely)-8
-b(,)37 b(so)f(that)g(complex)h(Mappings)0 3223 y(ma)m(y)f(b)s(e)f
-(built)g(in)g(a)h(hierarc)m(hical)g(manner)f(out)g(of)h(simp)s(er)e
-(ones.)56 b(This)34 b(giv)m(es)j(AST)e(great)h(\015exibilit)m(y)h(in)0
-3336 y(the)31 b(co)s(ordinate)g(transformations)f(it)h(can)g(describ)s
-(e.)0 3503 y FD(F)-9 b(urther)28 b(reading:)38 b FF(F)-8
-b(or)26 b(a)f(more)g(complete)h(description)f(of)g(CmpMaps,)g(see)g
-Fu(x)p FF(6.)40 b(Also)25 b(see)g(the)g(CmpMap)0 3616
-y(en)m(try)31 b(in)f(App)s(endix)e(D.)0 3925 y Fw(2.4)112
-b(Represen)m(ting)38 b(Co)s(ordinate)g(Systems)0 4153
-y FF(While)45 b(Mappings)f(\()p Fu(x)p FF(2.1\))i(represen)m(t)e(the)h
-(relationships)f(b)s(et)m(w)m(een)h(co)s(ordinate)g(systems)f(in)g
-(AST,)f(the)0 4266 y(co)s(ordinate)32 b(systems)f(themselv)m(es)h(are)g
-(represen)m(ted)f(b)m(y)g(Ob)5 b(jects)31 b(called)h(F)-8
-b(rames)32 b(\(Figure)g(5\).)86 b(A)32 b(F)-8 b(rame)0
-4379 y(is)41 b(similar)g(in)f(concept)i(to)f(the)g(frame)g(y)m(ou)g
-(migh)m(t)g(dra)m(w)g(around)e(a)i(graph.)71 b(It)41
-b(con)m(tains)h(information)0 4492 y(ab)s(out)32 b(the)h(lab)s(els)g
-(whic)m(h)g(app)s(ear)f(on)h(the)g(axes,)h(the)f(axis)g(units,)g(a)g
-(title,)i(kno)m(wledge)f(of)f(ho)m(w)g(to)g(format)0
-4605 y(the)43 b(co)s(ordinate)i(v)-5 b(alues)43 b(on)g(eac)m(h)i(axis,)
-i Fx(etc.)79 b FF(An)43 b(AST)f(F)-8 b(rame)45 b(is)e(not,)k(ho)m(w)m
-(ev)m(er,)h(restricted)c(to)g(t)m(w)m(o)0 4718 y(dimensions)30
-b(and)f(ma)m(y)i(ha)m(v)m(e)h(an)m(y)f(n)m(um)m(b)s(er)e(of)h(axes.)0
-4885 y(A)37 b(basic)h(F)-8 b(rame)38 b(ma)m(y)g(b)s(e)f(used)f(to)i
-(represen)m(t)g(a)f(Cartesian)h(co)s(ordinate)g(system)g(b)m(y)f
-(setting)h(v)-5 b(alues)38 b(for)0 4998 y(its)d Fx(attributes)g
-FF(\(all)h(AST)e(Ob)5 b(jects)34 b(ha)m(v)m(e)i(v)-5
-b(alues)35 b(asso)s(ciated)h(with)e(them)h(called)g(attributes,)i(whic)
-m(h)d(ma)m(y)0 5111 y(b)s(e)e(set)h(and)e(enquired\).)46
-b(Usually)-8 b(,)34 b(this)f(w)m(ould)f(in)m(v)m(olv)m(e)i(setting)g
-(appropriate)e(axis)h(lab)s(els)f(and)g(units,)h(for)0
-5224 y(example.)41 b(F)-8 b(unctions)30 b(are)h(pro)m(vided)e(for)g
-(use)h(with)f(F)-8 b(rames)31 b(to)f(p)s(erform)e(op)s(erations)i(suc)m
-(h)g(as)g(formatting)0 5337 y(co)s(ordinate)h(v)-5 b(alues)31
-b(as)g(text,)g(calculating)i(distances)e(b)s(et)m(w)m(een)g(p)s(oin)m
-(ts,)f(in)m(terc)m(hanging)i(axes,)f Fx(etc.)p 0 5425
-1512 4 v 104 5479 a Fs(2)138 5510 y Fr(A)k(pair)h(of)h(Mappings)f(can)g
-(b)r(e)g(com)n(bined)f(in)h(a)g(third)f(w)n(a)n(y)h(using)g(a)g(T)-6
-b(ranMap.)65 b(A)35 b(T)-6 b(ranMap)36 b(allo)n(ws)i(the)d(forw)n(ard)0
-5602 y(transformation)d(of)f(one)f(Mapping)h(to)f(b)r(e)g(com)n(bined)g
-(with)g(the)g(in)n(v)n(erse)g(transformation)i(of)f(another)f(to)g(pro)
-r(duce)g(a)g(single)0 5693 y(Mapping.)p eop end
-%%Page: 8 18
-TeXDict begin 8 17 bop 0 52 a FF(8)2171 b Fy(2)92 b(O)m(VER)-10
-b(VIEW)30 b(OF)h(AST)e(CONCEPTS)557 2242 y @beginspecial
-38 @llx 119 @lly 571 @urx 462 @ury 3198 @rwi @setspecial
-%%BeginDocument: sun211_figures/complex.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 38 119 571 462
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/05 15:49:04
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5333.75 4140.95 m
-5333.75 4372.55 5145.35 4560.95 4913.75 4560.95 c
-1312.55 4560.95 l
-1080.95 4560.95 892.55 4372.55 892.55 4140.95 c
-892.55 1619.75 l
-892.55 1388.15 1080.95 1199.75 1312.55 1199.75 c
-4913.75 1199.75 l
-5145.35 1199.75 5333.75 1388.15 5333.75 1619.75 c
-f*
-1 g
-5268.95 4196.15 m
-5268.95 4427.75 5081.75 4614.95 4850.15 4614.95 c
-1257.35 4614.95 l
-1025.75 4614.95 838.55 4427.75 838.55 4196.15 c
-838.55 1683.35 l
-838.55 1451.75 1025.75 1264.55 1257.35 1264.55 c
-4850.15 1264.55 l
-5081.75 1264.55 5268.95 1451.75 5268.95 1683.35 c
-f*
-8 w
-1 J
-1 j
-0 g
-5268.95 4196.15 m
-5268.95 4427.75 5081.75 4614.95 4850.15 4614.95 c
-1257.35 4614.95 l
-1025.75 4614.95 838.55 4427.75 838.55 4196.15 c
-838.55 1683.35 l
-838.55 1451.75 1025.75 1264.55 1257.35 1264.55 c
-4850.15 1264.55 l
-5081.75 1264.55 5268.95 1451.75 5268.95 1683.35 c
-h
-S
-0.564706 g
-4913.75 3743.75 m
-4913.75 3896.15 4788.95 4020.95 4636.55 4020.95 c
-2969.75 4020.95 l
-2817.35 4020.95 2692.55 3896.15 2692.55 3743.75 c
-2692.55 1716.95 l
-2692.55 1564.55 2817.35 1439.75 2969.75 1439.75 c
-4636.55 1439.75 l
-4788.95 1439.75 4913.75 1564.55 4913.75 1716.95 c
-f*
-1 g
-4848.95 3798.95 m
-4848.95 3951.35 4725.35 4074.95 4572.95 4074.95 c
-2914.55 4074.95 l
-2762.15 4074.95 2638.55 3951.35 2638.55 3798.95 c
-2638.55 1780.55 l
-2638.55 1628.15 2762.15 1504.55 2914.55 1504.55 c
-4572.95 1504.55 l
-4725.35 1504.55 4848.95 1628.15 4848.95 1780.55 c
-f*
-0 g
-4848.95 3798.95 m
-4848.95 3951.35 4725.35 4074.95 4572.95 4074.95 c
-2914.55 4074.95 l
-2762.15 4074.95 2638.55 3951.35 2638.55 3798.95 c
-2638.55 1780.55 l
-2638.55 1628.15 2762.15 1504.55 2914.55 1504.55 c
-4572.95 1504.55 l
-4725.35 1504.55 4848.95 1628.15 4848.95 1780.55 c
-h
-S
-0.564706 g
-4493.75 2205.35 m
-4493.75 2247.35 4460.15 2280.95 4418.15 2280.95 c
-3188.15 2280.95 l
-3146.15 2280.95 3112.55 2247.35 3112.55 2205.35 c
-3112.55 1755.35 l
-3112.55 1713.35 3146.15 1679.75 3188.15 1679.75 c
-4418.15 1679.75 l
-4460.15 1679.75 4493.75 1713.35 4493.75 1755.35 c
-f*
-1 g
-4428.95 2261.75 m
-4428.95 2302.55 4396.55 2334.95 4354.55 2334.95 c
-3132.95 2334.95 l
-3090.95 2334.95 3058.55 2302.55 3058.55 2261.75 c
-3058.55 1817.75 l
-3058.55 1776.95 3090.95 1744.55 3132.95 1744.55 c
-4354.55 1744.55 l
-4396.55 1744.55 4428.95 1776.95 4428.95 1817.75 c
-f*
-0 g
-4428.95 2261.75 m
-4428.95 2302.55 4396.55 2334.95 4354.55 2334.95 c
-3132.95 2334.95 l
-3090.95 2334.95 3058.55 2302.55 3058.55 2261.75 c
-3058.55 1817.75 l
-3058.55 1776.95 3090.95 1744.55 3132.95 1744.55 c
-4354.55 1744.55 l
-4396.55 1744.55 4428.95 1776.95 4428.95 1817.75 c
-h
-S
-843.35 3052.55 319.2 15.5999 re
-Y
-840.95 3060.95 m
-1155.35 3060.95 l
-S
-0 0 6120 7920 re
-Y
-882.95 3062.15 m
-882.95 3083.75 864.95 3101.75 843.35 3101.75 c
-820.55 3101.75 802.55 3083.75 802.55 3062.15 c
-802.55 3040.55 820.55 3022.55 843.35 3022.55 c
-864.95 3022.55 882.95 3040.55 882.95 3062.15 c
-f*
-1113.35 3012.95 m
-1132.55 3060.95 l
-1113.35 3108.95 l
-1265.75 3060.95 l
-f*
-0.564706 g
-2393.75 3225.35 m
-2393.75 3299.75 2333.75 3360.95 2258.15 3360.95 c
-1448.15 3360.95 l
-1373.75 3360.95 1312.55 3299.75 1312.55 3225.35 c
-1312.55 2355.35 l
-1312.55 2280.95 1373.75 2219.75 1448.15 2219.75 c
-2258.15 2219.75 l
-2333.75 2219.75 2393.75 2280.95 2393.75 2355.35 c
-f*
-1 g
-2328.95 3281.75 m
-2328.95 3354.95 2270.15 3414.95 2195.75 3414.95 c
-1391.75 3414.95 l
-1318.55 3414.95 1258.55 3354.95 1258.55 3281.75 c
-1258.55 2417.75 l
-1258.55 2344.55 1318.55 2284.55 1391.75 2284.55 c
-2195.75 2284.55 l
-2268.95 2284.55 2328.95 2344.55 2328.95 2417.75 c
-f*
-0 g
-2328.95 3281.75 m
-2328.95 3354.95 2270.15 3414.95 2195.75 3414.95 c
-1391.75 3414.95 l
-1318.55 3414.95 1258.55 3354.95 1258.55 3281.75 c
-1258.55 2417.75 l
-1258.55 2344.55 1318.55 2284.55 1391.75 2284.55 c
-2195.75 2284.55 l
-2268.95 2284.55 2328.95 2344.55 2328.95 2417.75 c
-h
-S
-843.35 2632.55 319.2 15.5999 re
-Y
-840.95 2640.95 m
-1155.35 2640.95 l
-S
-0 0 6120 7920 re
-Y
-882.95 2642.15 m
-882.95 2663.75 864.95 2681.75 843.35 2681.75 c
-820.55 2681.75 802.55 2663.75 802.55 2642.15 c
-802.55 2620.55 820.55 2602.55 843.35 2602.55 c
-864.95 2602.55 882.95 2620.55 882.95 2642.15 c
-f*
-1113.35 2592.95 m
-1132.55 2640.95 l
-1113.35 2688.95 l
-1265.75 2640.95 l
-f*
-0.2 i
-1502 2904.14 m
-1502 2822.6 l
-1502 2807.66 1499.88 2805.32 1485.94 2804.42 c
-1485.94 2801 l
-1536.34 2801 l
-1536.34 2804.42 l
-1523.2 2805.32 1521 2807.84 1521 2820.62 c
-1521 2900.54 l
-1521 2913.32 1523.29 2915.66 1536.34 2916.74 c
-1536.34 2920 l
-1500.52 2920 l
-1460.74 2829.26 l
-1419.16 2920 l
-1383.52 2920 l
-1383.52 2917 l
-1398.28 2916.09 1401 2913.89 1401 2900.54 c
-1401 2827.46 l
-1401 2808.92 1398.43 2805.5 1383.16 2804.42 c
-1383.16 2801 l
-1425.46 2801 l
-1425.46 2804 l
-1411.6 2804.73 1409 2808.95 1409 2827.46 c
-1409 2900 l
-1453.72 2801 l
-1456.24 2801 l
-h
-1541.02 2801 m
-f*
-1620.56 2812.88 m
-1617.5 2810.36 1615.34 2809.2 1612.64 2809.2 c
-1608.5 2809.2 1607 2811.78 1607 2819.9 c
-1607 2855 l
-1607 2864.18 1606.16 2869.22 1603.82 2873.36 c
-1600.04 2880.2 1592.3 2883.8 1581.32 2883.8 c
-1572.14 2883.8 1563.5 2881.28 1558.46 2877.14 c
-1553.96 2873.36 1551 2868.14 1551 2863.64 c
-1551 2859.5 1554.46 2855.9 1558.82 2855.9 c
-1563.14 2855.9 1566.92 2859.5 1566.92 2863.46 c
-1566.92 2864.18 1566.74 2865.08 1566.56 2866.34 c
-1566.2 2867.96 1566 2869.4 1566 2870.66 c
-1566 2875.52 1571.77 2879.8 1578.98 2879.8 c
-1587.8 2879.8 1592 2874.47 1592 2864.54 c
-1592 2853.56 l
-1564.76 2842.4 1561.75 2840.96 1554.14 2834.12 c
-1550.18 2830.52 1547.66 2824.4 1547.66 2818.46 c
-1547.66 2807.12 1555.4 2799.2 1566.56 2799.2 c
-1574.48 2799.2 1581.86 2802.98 1592.84 2812.34 c
-1593.74 2802.8 1596.98 2799.2 1604.36 2799.2 c
-1610.48 2799.2 1614.26 2801.36 1620.56 2808.2 c
-h
-1592 2823.14 m
-1592 2817.56 1591.23 2815.94 1587.98 2813.6 c
-1583.66 2811.08 1578.62 2809.2 1574.84 2809.2 c
-1568.54 2809.2 1563.48 2815.51 1563.48 2823.5 c
-1563.48 2824.22 l
-1563.48 2834.84 1570.7 2841.32 1592 2849.24 c
-h
-1620.92 2801 m
-f*
-1622.62 2871.74 m
-1624.24 2871.92 1625.5 2871.92 1627.12 2871.92 c
-1633.24 2871.92 1635 2870.12 1635 2861.66 c
-1635 2777.42 l
-1635 2768.06 1632.94 2766.08 1621.9 2765 c
-1621.9 2762 l
-1665.46 2762 l
-1665.46 2765 l
-1651.96 2765.18 1650 2767.19 1650 2778.68 c
-1650 2806.94 l
-1656.34 2801 1660.4 2799.2 1667.8 2799.2 c
-1689.22 2799.2 1705 2819.36 1705 2845.46 c
-1705 2867.78 1692.65 2883.8 1675.54 2883.8 c
-1665.61 2883.8 1657.8 2879.48 1650 2869.58 c
-1650 2883.44 l
-1648.54 2883.8 l
-1639 2880.02 1632.52 2877.68 1622.62 2874.62 c
-h
-1650 2861.12 m
-1650 2866.52 1659.87 2872.8 1667.98 2872.8 c
-1681.3 2872.8 1690 2859.2 1690 2838.26 c
-1690 2818.46 1681.23 2804.2 1668.34 2804.2 c
-1659.88 2804.2 1650 2811.09 1650 2816.84 c
-h
-1711 2801 m
-f*
-1712.62 2871.74 m
-1714.24 2871.92 1715.5 2871.92 1717.12 2871.92 c
-1723.24 2871.92 1725 2870.12 1725 2861.66 c
-1725 2777.42 l
-1725 2768.06 1722.94 2766.08 1711.9 2765 c
-1711.9 2762 l
-1755.46 2762 l
-1755.46 2765 l
-1741.96 2765.18 1740 2767.19 1740 2778.68 c
-1740 2806.94 l
-1746.34 2801 1750.4 2799.2 1757.8 2799.2 c
-1779.22 2799.2 1795 2819.36 1795 2845.46 c
-1795 2867.78 1782.65 2883.8 1765.54 2883.8 c
-1755.61 2883.8 1747.8 2879.48 1740 2869.58 c
-1740 2883.44 l
-1738.54 2883.8 l
-1729 2880.02 1722.52 2877.68 1712.62 2874.62 c
-h
-1740 2861.12 m
-1740 2866.52 1749.87 2872.8 1757.98 2872.8 c
-1771.3 2872.8 1780 2859.2 1780 2838.26 c
-1780 2818.46 1771.23 2804.2 1758.34 2804.2 c
-1749.88 2804.2 1740 2811.09 1740 2816.84 c
-h
-1801 2801 m
-f*
-1832.5 2883.8 m
-1804.6 2873.9 l
-1804.6 2871.2 l
-1806.04 2871.38 l
-1808.2 2871.74 1810.54 2871.72 1812.16 2871.72 c
-1816.48 2871.72 1818 2868.89 1818 2861.12 c
-1818 2819.36 l
-1818 2806.4 1816.21 2804.42 1803.88 2803.7 c
-1803.88 2801 l
-1846.54 2801 l
-1846.54 2803.7 l
-1834.66 2804.6 1833 2806.4 1833 2819.36 c
-1833 2883.26 l
-h
-1824.22 2924 m
-1819.18 2924 1815 2919.83 1815 2914.76 c
-1815 2909.54 1818.98 2906 1824.04 2906 c
-1829.44 2906 1834 2909.78 1834 2914.76 c
-1834 2919.8 1829.59 2924 1824.22 2924 c
-h
-1851.04 2801 m
-f*
-1853.88 2872.64 m
-1855.14 2873.18 1856.76 2873.36 1858.74 2873.36 c
-1863.78 2873.36 1865 2870.66 1865 2861.84 c
-1865 2817.2 l
-1865 2806.94 1863.09 2804.42 1854.24 2803.7 c
-1854.24 2801 l
-1892.4 2801 l
-1892.4 2803.7 l
-1883.22 2804.42 1880 2806.58 1880 2813.06 c
-1880 2863.64 l
-1888.7 2871.74 1892.95 2873.8 1899.06 2873.8 c
-1907.88 2873.8 1912 2868.25 1912 2856.44 c
-1912 2818.82 l
-1912 2807.48 1909.7 2804.42 1900.86 2803.7 c
-1900.86 2801 l
-1938.3 2801 l
-1938.3 2803.7 l
-1929.48 2804.6 1927 2806.76 1927 2815.58 c
-1927 2856.8 l
-1927 2873.72 1919.2 2883.8 1906.08 2883.8 c
-1897.64 2883.8 1891.94 2880.74 1879.46 2869.22 c
-1879.46 2883.44 l
-1878.72 2883.8 l
-1869.9 2880.56 1863.78 2878.58 1853.88 2875.7 c
-h
-1941 2801 m
-f*
-2025.6 2871 m
-2025.6 2878 l
-2011.74 2878 l
-2008.14 2878 2005.44 2878.5 2001.84 2879.66 c
-1997.88 2881.1 l
-1993.02 2882.9 1988.16 2883.8 1983.48 2883.8 c
-1966.74 2883.8 1953.38 2870.84 1953.38 2854.46 c
-1953.38 2843.12 1958.07 2836.28 1970.16 2830.34 c
-1967.64 2827.82 1965.12 2825.48 1962.42 2823.14 c
-1956.48 2817.92 1954.1 2814.32 1954.1 2810.72 c
-1954.1 2806.76 1956.09 2804.78 1963.68 2801.18 c
-1950.72 2791.82 1946 2785.88 1946 2779.22 c
-1946 2769.68 1959.88 2762 1977.18 2762 c
-1990.14 2762 2003.82 2766.23 2013.18 2773.28 c
-2020.56 2779.04 2024 2784.98 2024 2792.18 c
-2024 2803.34 2015.53 2810.9 2002.2 2811.44 c
-1978.98 2812.52 l
-1969.26 2812.88 1964.94 2814.5 1964.94 2817.38 c
-1964.94 2820.98 1970.88 2827.28 1975.74 2828.72 c
-1979.16 2828.36 l
-1982.4 2828 1984.92 2828 1986 2828 c
-1992.3 2828 1999.32 2830.46 2004.72 2834.84 c
-2011.2 2839.88 2014 2846.36 2014 2855.72 c
-2014 2861 2013.12 2865.18 2010.66 2871 c
-h
-1967.46 2800.64 m
-1973.58 2799.38 1987.8 2798.3 1996.62 2798.3 c
-2013 2798.3 2019 2796.14 2019 2789.48 c
-2019 2779.04 2005.3 2772 1984.74 2772 c
-1968.9 2772 1959 2777.23 1959 2785.16 c
-1959 2789.3 1960.55 2792 1967.46 2800.64 c
-h
-1968.36 2861.84 m
-1968.36 2872.46 1973.4 2878.8 1981.68 2878.8 c
-1987.26 2878.8 1991.94 2875.73 1994.82 2870.3 c
-1998.24 2864 2000 2855.9 2000 2848.52 c
-2000 2838.62 1994.87 2833 1986.9 2833 c
-1975.74 2833 1968.36 2844.43 1968.36 2861.3 c
-h
-2031 2801 m
-f*
-2076 2801 m
-f*
-2203.08 2804.42 m
-2194.98 2804.96 2193.18 2806.76 2186.88 2820.08 c
-2142.06 2922.16 l
-2138.46 2922.16 l
-2101.02 2833.94 l
-2089.5 2807.66 2087.34 2804.96 2078.7 2804.42 c
-2078.7 2801 l
-2114.34 2801 l
-2114.34 2804.82 l
-2105.7 2804.82 2102.1 2807.03 2102.1 2811.8 c
-2102.1 2813.96 2102.64 2816.48 2103.54 2818.82 c
-2111.82 2840 l
-2158.98 2840 l
-2166.36 2822.6 l
-2168.52 2817.56 2169.78 2813.06 2169.78 2810.36 c
-2169.78 2808.74 2168.7 2806.76 2167.26 2806.04 c
-2165.1 2804.78 2163.66 2804.82 2157.18 2804.82 c
-2157.18 2801 l
-2203.08 2801 l
-h
-2114.88 2847 m
-2135.58 2896.76 l
-2156.46 2847 l
-h
-2205.96 2801 m
-f*
-2705.6 4382 m
-2703.98 4422.52 l
-2700.2 4422.52 l
-2699.12 4418.84 2696.24 4416.58 2692.82 4416.58 c
-2691.02 4416.58 2688.5 4417.17 2685.62 4418.36 c
-2676.8 4421.24 2667.98 4422.52 2659.16 4422.52 c
-2645.3 4422.52 2631.08 4417.36 2620.1 4408.46 c
-2606.42 4397.12 2599 4380.02 2599 4359.5 c
-2599 4322.96 2622.96 4298.48 2658.8 4298.48 c
-2679.14 4298.48 2696.96 4306.76 2707.94 4321.34 c
-2704.7 4324.58 l
-2691.38 4311.8 2679.5 4306.48 2664.56 4306.48 c
-2653.76 4306.48 2644.04 4309.69 2636.48 4315.94 c
-2625.86 4324.76 2620 4340.96 2620 4361.84 c
-2620 4394.42 2636.71 4415.52 2662.76 4415.52 c
-2673.2 4415.52 2682.38 4411.73 2689.58 4404.5 c
-2695.34 4398.74 2698.04 4393.7 2701.46 4382 c
-h
-2714.06 4301 m
-f*
-2717.14 4372.64 m
-2719.48 4373.18 2720.92 4373.36 2722.9 4373.36 c
-2727.58 4373.36 2729 4370.48 2729 4361.84 c
-2729 4316.3 l
-2729 4306.58 2726.52 4303.88 2716.6 4303.7 c
-2716.6 4301 l
-2756.56 4301 l
-2756.56 4304 l
-2747.02 4304.35 2744 4306.27 2744 4313.06 c
-2744 4363.82 l
-2744 4364.18 2745.23 4365.44 2746.66 4366.88 c
-2750.98 4371.2 2759.08 4374.8 2765.74 4374.8 c
-2773.48 4374.8 2778 4368.2 2778 4355.54 c
-2778 4316.48 l
-2778 4306.4 2775.93 4304.42 2765.2 4303.7 c
-2765.2 4301 l
-2805.52 4301 l
-2805.52 4304 l
-2795.26 4304.18 2793 4307.17 2793 4318.1 c
-2793 4363.46 l
-2798.28 4371.2 2803.91 4374.8 2812.18 4374.8 c
-2822.44 4374.8 2826 4369.85 2826 4354.64 c
-2826 4316.66 l
-2826 4306.4 2824.52 4304.96 2813.8 4303.7 c
-2813.8 4301 l
-2853.22 4301 l
-2853.22 4303.7 l
-2848.54 4304.06 l
-2843.14 4304.42 2841 4307.66 2841 4314.68 c
-2841 4351.76 l
-2841 4373 2833.91 4383.8 2819.92 4383.8 c
-2809.48 4383.8 2800.3 4379.12 2790.58 4368.68 c
-2787.34 4378.94 2781.22 4383.8 2771.5 4383.8 c
-2763.31 4383.8 2758.57 4381.46 2743.28 4369.94 c
-2743.28 4383.44 l
-2742.34 4383.8 l
-2733.16 4380.38 2727.04 4378.4 2717.14 4375.7 c
-h
-2854.04 4301 m
-f*
-2854.62 4371.74 m
-2856.24 4371.92 2857.5 4371.92 2859.12 4371.92 c
-2865.24 4371.92 2867 4370.12 2867 4361.66 c
-2867 4277.42 l
-2867 4268.06 2864.94 4266.08 2853.9 4265 c
-2853.9 4262 l
-2897.46 4262 l
-2897.46 4265 l
-2883.96 4265.18 2882 4267.19 2882 4278.68 c
-2882 4306.94 l
-2888.34 4301 2892.4 4299.2 2899.8 4299.2 c
-2921.22 4299.2 2937 4319.36 2937 4345.46 c
-2937 4367.78 2924.65 4383.8 2907.54 4383.8 c
-2897.61 4383.8 2889.8 4379.48 2882 4369.58 c
-2882 4383.44 l
-2880.54 4383.8 l
-2871 4380.02 2864.52 4377.68 2854.62 4374.62 c
-h
-2882 4361.12 m
-2882 4366.52 2891.87 4372.8 2899.98 4372.8 c
-2913.3 4372.8 2922 4359.2 2922 4338.26 c
-2922 4318.46 2913.23 4304.2 2900.34 4304.2 c
-2891.88 4304.2 2882 4311.09 2882 4316.84 c
-h
-2943 4301 m
-f*
-3064 4404.14 m
-3064 4322.6 l
-3064 4307.66 3061.88 4305.32 3047.94 4304.42 c
-3047.94 4301 l
-3098.34 4301 l
-3098.34 4304.42 l
-3085.2 4305.32 3083 4307.84 3083 4320.62 c
-3083 4400.54 l
-3083 4413.32 3085.29 4415.66 3098.34 4416.74 c
-3098.34 4420 l
-3062.52 4420 l
-3022.74 4329.26 l
-2981.16 4420 l
-2945.52 4420 l
-2945.52 4417 l
-2960.28 4416.09 2963 4413.89 2963 4400.54 c
-2963 4327.46 l
-2963 4308.92 2960.43 4305.5 2945.16 4304.42 c
-2945.16 4301 l
-2987.46 4301 l
-2987.46 4304 l
-2973.6 4304.73 2971 4308.95 2971 4327.46 c
-2971 4400 l
-3015.72 4301 l
-3018.24 4301 l
-h
-3103.02 4301 m
-f*
-3183.56 4312.88 m
-3180.5 4310.36 3178.34 4309.2 3175.64 4309.2 c
-3171.5 4309.2 3170 4311.78 3170 4319.9 c
-3170 4355 l
-3170 4364.18 3169.16 4369.22 3166.82 4373.36 c
-3163.04 4380.2 3155.3 4383.8 3144.32 4383.8 c
-3135.14 4383.8 3126.5 4381.28 3121.46 4377.14 c
-3116.96 4373.36 3114 4368.14 3114 4363.64 c
-3114 4359.5 3117.46 4355.9 3121.82 4355.9 c
-3126.14 4355.9 3129.92 4359.5 3129.92 4363.46 c
-3129.92 4364.18 3129.74 4365.08 3129.56 4366.34 c
-3129.2 4367.96 3129 4369.4 3129 4370.66 c
-3129 4375.52 3134.77 4379.8 3141.98 4379.8 c
-3150.8 4379.8 3155 4374.47 3155 4364.54 c
-3155 4353.56 l
-3127.76 4342.4 3124.75 4340.96 3117.14 4334.12 c
-3113.18 4330.52 3110.66 4324.4 3110.66 4318.46 c
-3110.66 4307.12 3118.4 4299.2 3129.56 4299.2 c
-3137.48 4299.2 3144.86 4302.98 3155.84 4312.34 c
-3156.74 4302.8 3159.98 4299.2 3167.36 4299.2 c
-3173.48 4299.2 3177.26 4301.36 3183.56 4308.2 c
-h
-3155 4323.14 m
-3155 4317.56 3154.23 4315.94 3150.98 4313.6 c
-3146.66 4311.08 3141.62 4309.2 3137.84 4309.2 c
-3131.54 4309.2 3126.48 4315.51 3126.48 4323.5 c
-3126.48 4324.22 l
-3126.48 4334.84 3133.7 4341.32 3155 4349.24 c
-h
-3183.92 4301 m
-f*
-3184.62 4371.74 m
-3186.24 4371.92 3187.5 4371.92 3189.12 4371.92 c
-3195.24 4371.92 3197 4370.12 3197 4361.66 c
-3197 4277.42 l
-3197 4268.06 3194.94 4266.08 3183.9 4265 c
-3183.9 4262 l
-3227.46 4262 l
-3227.46 4265 l
-3213.96 4265.18 3212 4267.19 3212 4278.68 c
-3212 4306.94 l
-3218.34 4301 3222.4 4299.2 3229.8 4299.2 c
-3251.22 4299.2 3267 4319.36 3267 4345.46 c
-3267 4367.78 3254.65 4383.8 3237.54 4383.8 c
-3227.61 4383.8 3219.8 4379.48 3212 4369.58 c
-3212 4383.44 l
-3210.54 4383.8 l
-3201 4380.02 3194.52 4377.68 3184.62 4374.62 c
-h
-3212 4361.12 m
-3212 4366.52 3221.87 4372.8 3229.98 4372.8 c
-3243.3 4372.8 3252 4359.2 3252 4338.26 c
-3252 4318.46 3243.23 4304.2 3230.34 4304.2 c
-3221.88 4304.2 3212 4311.09 3212 4316.84 c
-h
-3273 4301 m
-f*
-1 i
-423.35 3052.55 319.2 15.5999 re
-Y
-420.95 3060.95 m
-735.35 3060.95 l
-S
-0 0 6120 7920 re
-Y
-462.95 3062.15 m
-462.95 3083.75 444.95 3101.75 423.35 3101.75 c
-400.55 3101.75 382.55 3083.75 382.55 3062.15 c
-382.55 3040.55 400.55 3022.55 423.35 3022.55 c
-444.95 3022.55 462.95 3040.55 462.95 3062.15 c
-f*
-693.35 3012.95 m
-712.55 3060.95 l
-693.35 3108.95 l
-845.75 3060.95 l
-f*
-0.564706 g
-4493.75 3531.35 m
-4493.75 3602.15 4436.15 3660.95 4364.15 3660.95 c
-3242.15 3660.95 l
-3170.15 3660.95 3112.55 3602.15 3112.55 3531.35 c
-3112.55 2752.55 l
-3112.55 2680.55 3170.15 2622.95 3242.15 2622.95 c
-4364.15 2622.95 l
-4436.15 2622.95 4493.75 2680.55 4493.75 2752.55 c
-f*
-1 g
-4428.95 3586.55 m
-4428.95 3657.35 4372.55 3714.95 4300.55 3714.95 c
-3186.95 3714.95 l
-3116.15 3714.95 3058.55 3657.35 3058.55 3586.55 c
-3058.55 2814.95 l
-3058.55 2745.35 3116.15 2687.75 3186.95 2687.75 c
-4300.55 2687.75 l
-4371.35 2687.75 4428.95 2745.35 4428.95 2814.95 c
-f*
-0 g
-4428.95 3586.55 m
-4428.95 3657.35 4372.55 3714.95 4300.55 3714.95 c
-3186.95 3714.95 l
-3116.15 3714.95 3058.55 3657.35 3058.55 3586.55 c
-3058.55 2814.95 l
-3058.55 2745.35 3116.15 2687.75 3186.95 2687.75 c
-4300.55 2687.75 l
-4371.35 2687.75 4428.95 2745.35 4428.95 2814.95 c
-h
-S
-423.35 2632.55 319.2 15.5999 re
-Y
-420.95 2640.95 m
-735.35 2640.95 l
-S
-0 0 6120 7920 re
-Y
-462.95 2642.15 m
-462.95 2663.75 444.95 2681.75 423.35 2681.75 c
-400.55 2681.75 382.55 2663.75 382.55 2642.15 c
-382.55 2620.55 400.55 2602.55 423.35 2602.55 c
-444.95 2602.55 462.95 2620.55 462.95 2642.15 c
-f*
-693.35 2592.95 m
-712.55 2640.95 l
-693.35 2688.95 l
-845.75 2640.95 l
-f*
-2643.35 3232.55 308.4 103.2 re
-Y
-2643.35 3240.95 m
-2943.35 3328.55 l
-S
-0 0 6120 7920 re
-Y
-2682.95 3242.15 m
-2682.95 3263.75 2664.95 3281.75 2643.35 3281.75 c
-2620.55 3281.75 2602.55 3263.75 2602.55 3242.15 c
-2602.55 3220.55 2620.55 3202.55 2643.35 3202.55 c
-2664.95 3202.55 2682.95 3220.55 2682.95 3242.15 c
-f*
-2919.35 3272.15 m
-2925.35 3322.55 l
-2894.15 3362.15 l
-3053.75 3359.75 l
-f*
-2643.35 2812.55 320.4 190.8 re
-Y
-2643.35 2820.95 m
-2955.35 3003.35 l
-S
-0 0 6120 7920 re
-Y
-2682.95 2822.15 m
-2682.95 2843.75 2664.95 2861.75 2643.35 2861.75 c
-2620.55 2861.75 2602.55 2843.75 2602.55 2822.15 c
-2602.55 2800.55 2620.55 2782.55 2643.35 2782.55 c
-2664.95 2782.55 2682.95 2800.55 2682.95 2822.15 c
-f*
-2945.75 2942.15 m
-2937.35 2992.55 l
-2897.75 3024.95 l
-3053.75 3059.75 l
-f*
-0.2 i
-3427 3264.14 m
-3427 3182.6 l
-3427 3167.66 3424.88 3165.32 3410.94 3164.42 c
-3410.94 3161 l
-3461.34 3161 l
-3461.34 3164.42 l
-3448.2 3165.32 3446 3167.84 3446 3180.62 c
-3446 3260.54 l
-3446 3273.32 3448.29 3275.66 3461.34 3276.74 c
-3461.34 3280 l
-3425.52 3280 l
-3385.74 3189.26 l
-3344.16 3280 l
-3308.52 3280 l
-3308.52 3277 l
-3323.28 3276.09 3326 3273.89 3326 3260.54 c
-3326 3187.46 l
-3326 3168.92 3323.43 3165.5 3308.16 3164.42 c
-3308.16 3161 l
-3350.46 3161 l
-3350.46 3164 l
-3336.6 3164.73 3334 3168.95 3334 3187.46 c
-3334 3260 l
-3378.72 3161 l
-3381.24 3161 l
-h
-3466.02 3161 m
-f*
-3546.56 3172.88 m
-3543.5 3170.36 3541.34 3169.2 3538.64 3169.2 c
-3534.5 3169.2 3533 3171.78 3533 3179.9 c
-3533 3215 l
-3533 3224.18 3532.16 3229.22 3529.82 3233.36 c
-3526.04 3240.2 3518.3 3243.8 3507.32 3243.8 c
-3498.14 3243.8 3489.5 3241.28 3484.46 3237.14 c
-3479.96 3233.36 3477 3228.14 3477 3223.64 c
-3477 3219.5 3480.46 3215.9 3484.82 3215.9 c
-3489.14 3215.9 3492.92 3219.5 3492.92 3223.46 c
-3492.92 3224.18 3492.74 3225.08 3492.56 3226.34 c
-3492.2 3227.96 3492 3229.4 3492 3230.66 c
-3492 3235.52 3497.77 3239.8 3504.98 3239.8 c
-3513.8 3239.8 3518 3234.47 3518 3224.54 c
-3518 3213.56 l
-3490.76 3202.4 3487.75 3200.96 3480.14 3194.12 c
-3476.18 3190.52 3473.66 3184.4 3473.66 3178.46 c
-3473.66 3167.12 3481.4 3159.2 3492.56 3159.2 c
-3500.48 3159.2 3507.86 3162.98 3518.84 3172.34 c
-3519.74 3162.8 3522.98 3159.2 3530.36 3159.2 c
-3536.48 3159.2 3540.26 3161.36 3546.56 3168.2 c
-h
-3518 3183.14 m
-3518 3177.56 3517.23 3175.94 3513.98 3173.6 c
-3509.66 3171.08 3504.62 3169.2 3500.84 3169.2 c
-3494.54 3169.2 3489.48 3175.51 3489.48 3183.5 c
-3489.48 3184.22 l
-3489.48 3194.84 3496.7 3201.32 3518 3209.24 c
-h
-3546.92 3161 m
-f*
-3547.62 3231.74 m
-3549.24 3231.92 3550.5 3231.92 3552.12 3231.92 c
-3558.24 3231.92 3560 3230.12 3560 3221.66 c
-3560 3137.42 l
-3560 3128.06 3557.94 3126.08 3546.9 3125 c
-3546.9 3122 l
-3590.46 3122 l
-3590.46 3125 l
-3576.96 3125.18 3575 3127.19 3575 3138.68 c
-3575 3166.94 l
-3581.34 3161 3585.4 3159.2 3592.8 3159.2 c
-3614.22 3159.2 3630 3179.36 3630 3205.46 c
-3630 3227.78 3617.65 3243.8 3600.54 3243.8 c
-3590.61 3243.8 3582.8 3239.48 3575 3229.58 c
-3575 3243.44 l
-3573.54 3243.8 l
-3564 3240.02 3557.52 3237.68 3547.62 3234.62 c
-h
-3575 3221.12 m
-3575 3226.52 3584.87 3232.8 3592.98 3232.8 c
-3606.3 3232.8 3615 3219.2 3615 3198.26 c
-3615 3178.46 3606.23 3164.2 3593.34 3164.2 c
-3584.88 3164.2 3575 3171.09 3575 3176.84 c
-h
-3636 3161 m
-f*
-3637.62 3231.74 m
-3639.24 3231.92 3640.5 3231.92 3642.12 3231.92 c
-3648.24 3231.92 3650 3230.12 3650 3221.66 c
-3650 3137.42 l
-3650 3128.06 3647.94 3126.08 3636.9 3125 c
-3636.9 3122 l
-3680.46 3122 l
-3680.46 3125 l
-3666.96 3125.18 3665 3127.19 3665 3138.68 c
-3665 3166.94 l
-3671.34 3161 3675.4 3159.2 3682.8 3159.2 c
-3704.22 3159.2 3720 3179.36 3720 3205.46 c
-3720 3227.78 3707.65 3243.8 3690.54 3243.8 c
-3680.61 3243.8 3672.8 3239.48 3665 3229.58 c
-3665 3243.44 l
-3663.54 3243.8 l
-3654 3240.02 3647.52 3237.68 3637.62 3234.62 c
-h
-3665 3221.12 m
-3665 3226.52 3674.87 3232.8 3682.98 3232.8 c
-3696.3 3232.8 3705 3219.2 3705 3198.26 c
-3705 3178.46 3696.23 3164.2 3683.34 3164.2 c
-3674.88 3164.2 3665 3171.09 3665 3176.84 c
-h
-3726 3161 m
-f*
-3757.5 3243.8 m
-3729.6 3233.9 l
-3729.6 3231.2 l
-3731.04 3231.38 l
-3733.2 3231.74 3735.54 3231.72 3737.16 3231.72 c
-3741.48 3231.72 3743 3228.89 3743 3221.12 c
-3743 3179.36 l
-3743 3166.4 3741.21 3164.42 3728.88 3163.7 c
-3728.88 3161 l
-3771.54 3161 l
-3771.54 3163.7 l
-3759.66 3164.6 3758 3166.4 3758 3179.36 c
-3758 3243.26 l
-h
-3749.22 3284 m
-3744.18 3284 3740 3279.83 3740 3274.76 c
-3740 3269.54 3743.98 3266 3749.04 3266 c
-3754.44 3266 3759 3269.78 3759 3274.76 c
-3759 3279.8 3754.59 3284 3749.22 3284 c
-h
-3776.04 3161 m
-f*
-3778.88 3232.64 m
-3780.14 3233.18 3781.76 3233.36 3783.74 3233.36 c
-3788.78 3233.36 3790 3230.66 3790 3221.84 c
-3790 3177.2 l
-3790 3166.94 3788.09 3164.42 3779.24 3163.7 c
-3779.24 3161 l
-3817.4 3161 l
-3817.4 3163.7 l
-3808.22 3164.42 3805 3166.58 3805 3173.06 c
-3805 3223.64 l
-3813.7 3231.74 3817.95 3233.8 3824.06 3233.8 c
-3832.88 3233.8 3837 3228.25 3837 3216.44 c
-3837 3178.82 l
-3837 3167.48 3834.7 3164.42 3825.86 3163.7 c
-3825.86 3161 l
-3863.3 3161 l
-3863.3 3163.7 l
-3854.48 3164.6 3852 3166.76 3852 3175.58 c
-3852 3216.8 l
-3852 3233.72 3844.2 3243.8 3831.08 3243.8 c
-3822.64 3243.8 3816.94 3240.74 3804.46 3229.22 c
-3804.46 3243.44 l
-3803.72 3243.8 l
-3794.9 3240.56 3788.78 3238.58 3778.88 3235.7 c
-h
-3866 3161 m
-f*
-3950.6 3231 m
-3950.6 3238 l
-3936.74 3238 l
-3933.14 3238 3930.44 3238.5 3926.84 3239.66 c
-3922.88 3241.1 l
-3918.02 3242.9 3913.16 3243.8 3908.48 3243.8 c
-3891.74 3243.8 3878.38 3230.84 3878.38 3214.46 c
-3878.38 3203.12 3883.07 3196.28 3895.16 3190.34 c
-3892.64 3187.82 3890.12 3185.48 3887.42 3183.14 c
-3881.48 3177.92 3879.1 3174.32 3879.1 3170.72 c
-3879.1 3166.76 3881.09 3164.78 3888.68 3161.18 c
-3875.72 3151.82 3871 3145.88 3871 3139.22 c
-3871 3129.68 3884.88 3122 3902.18 3122 c
-3915.14 3122 3928.82 3126.23 3938.18 3133.28 c
-3945.56 3139.04 3949 3144.98 3949 3152.18 c
-3949 3163.34 3940.53 3170.9 3927.2 3171.44 c
-3903.98 3172.52 l
-3894.26 3172.88 3889.94 3174.5 3889.94 3177.38 c
-3889.94 3180.98 3895.88 3187.28 3900.74 3188.72 c
-3904.16 3188.36 l
-3907.4 3188 3909.92 3188 3911 3188 c
-3917.3 3188 3924.32 3190.46 3929.72 3194.84 c
-3936.2 3199.88 3939 3206.36 3939 3215.72 c
-3939 3221 3938.12 3225.18 3935.66 3231 c
-h
-3892.46 3160.64 m
-3898.58 3159.38 3912.8 3158.3 3921.62 3158.3 c
-3938 3158.3 3944 3156.14 3944 3149.48 c
-3944 3139.04 3930.3 3132 3909.74 3132 c
-3893.9 3132 3884 3137.23 3884 3145.16 c
-3884 3149.3 3885.55 3152 3892.46 3160.64 c
-h
-3893.36 3221.84 m
-3893.36 3232.46 3898.4 3238.8 3906.68 3238.8 c
-3912.26 3238.8 3916.94 3235.73 3919.82 3230.3 c
-3923.24 3224 3925 3215.9 3925 3208.52 c
-3925 3198.62 3919.87 3193 3911.9 3193 c
-3900.74 3193 3893.36 3204.43 3893.36 3221.3 c
-h
-3956 3161 m
-f*
-4001 3161 m
-f*
-4004.06 3280 m
-4004.06 3277 l
-4019.18 3276.09 4021 3274.07 4021 3260.54 c
-4021 3180.62 l
-4021 3167.3 4018.71 3164.96 4004.06 3164.42 c
-4004.06 3161 l
-4064.18 3161 l
-4091 3161 4108 3173.42 4108 3193.4 c
-4108 3201.32 4104.85 3208.52 4098.92 3213.74 c
-4093.52 3218.6 4088.66 3220.94 4076.96 3223.64 c
-4086.32 3225.98 4090.1 3227.78 4094.42 3231.56 c
-4098.92 3235.52 4102 3242.18 4102 3249.56 c
-4102 3269.72 4085.85 3280 4054.46 3280 c
-h
-4040 3219.68 m
-4056.94 3219.68 4064.78 3218.78 4071.56 3216.26 c
-4082 3212.12 4087 3204.74 4087 3193.22 c
-4087 3183.5 4083.23 3176.48 4076.06 3172.34 c
-4070.3 3168.92 4063.1 3168 4050.5 3168 c
-4042.22 3168 4040 3169.55 4040 3175.04 c
-h
-4040 3226.88 m
-4040 3268.1 l
-4040 3271.88 4041.16 3273 4043.66 3273 c
-4051.58 3273 l
-4072.28 3273 4083 3264.71 4083 3248.84 c
-4083 3234.8 4073.55 3226.88 4056.8 3226.88 c
-h
-4121.06 3161 m
-f*
-3487 2064.14 m
-3487 1982.6 l
-3487 1967.66 3484.88 1965.32 3470.94 1964.42 c
-3470.94 1961 l
-3521.34 1961 l
-3521.34 1964.42 l
-3508.2 1965.32 3506 1967.84 3506 1980.62 c
-3506 2060.54 l
-3506 2073.32 3508.29 2075.66 3521.34 2076.74 c
-3521.34 2080 l
-3485.52 2080 l
-3445.74 1989.26 l
-3404.16 2080 l
-3368.52 2080 l
-3368.52 2077 l
-3383.28 2076.09 3386 2073.89 3386 2060.54 c
-3386 1987.46 l
-3386 1968.92 3383.43 1965.5 3368.16 1964.42 c
-3368.16 1961 l
-3410.46 1961 l
-3410.46 1964 l
-3396.6 1964.73 3394 1968.95 3394 1987.46 c
-3394 2060 l
-3438.72 1961 l
-3441.24 1961 l
-h
-3526.02 1961 m
-f*
-3606.56 1972.88 m
-3603.5 1970.36 3601.34 1969.2 3598.64 1969.2 c
-3594.5 1969.2 3593 1971.78 3593 1979.9 c
-3593 2015 l
-3593 2024.18 3592.16 2029.22 3589.82 2033.36 c
-3586.04 2040.2 3578.3 2043.8 3567.32 2043.8 c
-3558.14 2043.8 3549.5 2041.28 3544.46 2037.14 c
-3539.96 2033.36 3537 2028.14 3537 2023.64 c
-3537 2019.5 3540.46 2015.9 3544.82 2015.9 c
-3549.14 2015.9 3552.92 2019.5 3552.92 2023.46 c
-3552.92 2024.18 3552.74 2025.08 3552.56 2026.34 c
-3552.2 2027.96 3552 2029.4 3552 2030.66 c
-3552 2035.52 3557.77 2039.8 3564.98 2039.8 c
-3573.8 2039.8 3578 2034.47 3578 2024.54 c
-3578 2013.56 l
-3550.76 2002.4 3547.75 2000.96 3540.14 1994.12 c
-3536.18 1990.52 3533.66 1984.4 3533.66 1978.46 c
-3533.66 1967.12 3541.4 1959.2 3552.56 1959.2 c
-3560.48 1959.2 3567.86 1962.98 3578.84 1972.34 c
-3579.74 1962.8 3582.98 1959.2 3590.36 1959.2 c
-3596.48 1959.2 3600.26 1961.36 3606.56 1968.2 c
-h
-3578 1983.14 m
-3578 1977.56 3577.23 1975.94 3573.98 1973.6 c
-3569.66 1971.08 3564.62 1969.2 3560.84 1969.2 c
-3554.54 1969.2 3549.48 1975.51 3549.48 1983.5 c
-3549.48 1984.22 l
-3549.48 1994.84 3556.7 2001.32 3578 2009.24 c
-h
-3606.92 1961 m
-f*
-3607.62 2031.74 m
-3609.24 2031.92 3610.5 2031.92 3612.12 2031.92 c
-3618.24 2031.92 3620 2030.12 3620 2021.66 c
-3620 1937.42 l
-3620 1928.06 3617.94 1926.08 3606.9 1925 c
-3606.9 1922 l
-3650.46 1922 l
-3650.46 1925 l
-3636.96 1925.18 3635 1927.19 3635 1938.68 c
-3635 1966.94 l
-3641.34 1961 3645.4 1959.2 3652.8 1959.2 c
-3674.22 1959.2 3690 1979.36 3690 2005.46 c
-3690 2027.78 3677.65 2043.8 3660.54 2043.8 c
-3650.61 2043.8 3642.8 2039.48 3635 2029.58 c
-3635 2043.44 l
-3633.54 2043.8 l
-3624 2040.02 3617.52 2037.68 3607.62 2034.62 c
-h
-3635 2021.12 m
-3635 2026.52 3644.87 2032.8 3652.98 2032.8 c
-3666.3 2032.8 3675 2019.2 3675 1998.26 c
-3675 1978.46 3666.23 1964.2 3653.34 1964.2 c
-3644.88 1964.2 3635 1971.09 3635 1976.84 c
-h
-3696 1961 m
-f*
-3697.62 2031.74 m
-3699.24 2031.92 3700.5 2031.92 3702.12 2031.92 c
-3708.24 2031.92 3710 2030.12 3710 2021.66 c
-3710 1937.42 l
-3710 1928.06 3707.94 1926.08 3696.9 1925 c
-3696.9 1922 l
-3740.46 1922 l
-3740.46 1925 l
-3726.96 1925.18 3725 1927.19 3725 1938.68 c
-3725 1966.94 l
-3731.34 1961 3735.4 1959.2 3742.8 1959.2 c
-3764.22 1959.2 3780 1979.36 3780 2005.46 c
-3780 2027.78 3767.65 2043.8 3750.54 2043.8 c
-3740.61 2043.8 3732.8 2039.48 3725 2029.58 c
-3725 2043.44 l
-3723.54 2043.8 l
-3714 2040.02 3707.52 2037.68 3697.62 2034.62 c
-h
-3725 2021.12 m
-3725 2026.52 3734.87 2032.8 3742.98 2032.8 c
-3756.3 2032.8 3765 2019.2 3765 1998.26 c
-3765 1978.46 3756.23 1964.2 3743.34 1964.2 c
-3734.88 1964.2 3725 1971.09 3725 1976.84 c
-h
-3786 1961 m
-f*
-3817.5 2043.8 m
-3789.6 2033.9 l
-3789.6 2031.2 l
-3791.04 2031.38 l
-3793.2 2031.74 3795.54 2031.72 3797.16 2031.72 c
-3801.48 2031.72 3803 2028.89 3803 2021.12 c
-3803 1979.36 l
-3803 1966.4 3801.21 1964.42 3788.88 1963.7 c
-3788.88 1961 l
-3831.54 1961 l
-3831.54 1963.7 l
-3819.66 1964.6 3818 1966.4 3818 1979.36 c
-3818 2043.26 l
-h
-3809.22 2084 m
-3804.18 2084 3800 2079.83 3800 2074.76 c
-3800 2069.54 3803.98 2066 3809.04 2066 c
-3814.44 2066 3819 2069.78 3819 2074.76 c
-3819 2079.8 3814.59 2084 3809.22 2084 c
-h
-3836.04 1961 m
-f*
-3838.88 2032.64 m
-3840.14 2033.18 3841.76 2033.36 3843.74 2033.36 c
-3848.78 2033.36 3850 2030.66 3850 2021.84 c
-3850 1977.2 l
-3850 1966.94 3848.09 1964.42 3839.24 1963.7 c
-3839.24 1961 l
-3877.4 1961 l
-3877.4 1963.7 l
-3868.22 1964.42 3865 1966.58 3865 1973.06 c
-3865 2023.64 l
-3873.7 2031.74 3877.95 2033.8 3884.06 2033.8 c
-3892.88 2033.8 3897 2028.25 3897 2016.44 c
-3897 1978.82 l
-3897 1967.48 3894.7 1964.42 3885.86 1963.7 c
-3885.86 1961 l
-3923.3 1961 l
-3923.3 1963.7 l
-3914.48 1964.6 3912 1966.76 3912 1975.58 c
-3912 2016.8 l
-3912 2033.72 3904.2 2043.8 3891.08 2043.8 c
-3882.64 2043.8 3876.94 2040.74 3864.46 2029.22 c
-3864.46 2043.44 l
-3863.72 2043.8 l
-3854.9 2040.56 3848.78 2038.58 3838.88 2035.7 c
-h
-3926 1961 m
-f*
-4010.6 2031 m
-4010.6 2038 l
-3996.74 2038 l
-3993.14 2038 3990.44 2038.5 3986.84 2039.66 c
-3982.88 2041.1 l
-3978.02 2042.9 3973.16 2043.8 3968.48 2043.8 c
-3951.74 2043.8 3938.38 2030.84 3938.38 2014.46 c
-3938.38 2003.12 3943.07 1996.28 3955.16 1990.34 c
-3952.64 1987.82 3950.12 1985.48 3947.42 1983.14 c
-3941.48 1977.92 3939.1 1974.32 3939.1 1970.72 c
-3939.1 1966.76 3941.09 1964.78 3948.68 1961.18 c
-3935.72 1951.82 3931 1945.88 3931 1939.22 c
-3931 1929.68 3944.88 1922 3962.18 1922 c
-3975.14 1922 3988.82 1926.23 3998.18 1933.28 c
-4005.56 1939.04 4009 1944.98 4009 1952.18 c
-4009 1963.34 4000.53 1970.9 3987.2 1971.44 c
-3963.98 1972.52 l
-3954.26 1972.88 3949.94 1974.5 3949.94 1977.38 c
-3949.94 1980.98 3955.88 1987.28 3960.74 1988.72 c
-3964.16 1988.36 l
-3967.4 1988 3969.92 1988 3971 1988 c
-3977.3 1988 3984.32 1990.46 3989.72 1994.84 c
-3996.2 1999.88 3999 2006.36 3999 2015.72 c
-3999 2021 3998.12 2025.18 3995.66 2031 c
-h
-3952.46 1960.64 m
-3958.58 1959.38 3972.8 1958.3 3981.62 1958.3 c
-3998 1958.3 4004 1956.14 4004 1949.48 c
-4004 1939.04 3990.3 1932 3969.74 1932 c
-3953.9 1932 3944 1937.23 3944 1945.16 c
-3944 1949.3 3945.55 1952 3952.46 1960.64 c
-h
-3953.36 2021.84 m
-3953.36 2032.46 3958.4 2038.8 3966.68 2038.8 c
-3972.26 2038.8 3976.94 2035.73 3979.82 2030.3 c
-3983.24 2024 3985 2015.9 3985 2008.52 c
-3985 1998.62 3979.87 1993 3971.9 1993 c
-3960.74 1993 3953.36 2004.43 3953.36 2021.3 c
-h
-4016 1961 m
-f*
-4061 1961 m
-f*
-4172.6 2042 m
-4170.98 2082.52 l
-4167.2 2082.52 l
-4166.12 2078.84 4163.24 2076.58 4159.82 2076.58 c
-4158.02 2076.58 4155.5 2077.17 4152.62 2078.36 c
-4143.8 2081.24 4134.98 2082.52 4126.16 2082.52 c
-4112.3 2082.52 4098.08 2077.36 4087.1 2068.46 c
-4073.42 2057.12 4066 2040.02 4066 2019.5 c
-4066 1982.96 4089.96 1958.48 4125.8 1958.48 c
-4146.14 1958.48 4163.96 1966.76 4174.94 1981.34 c
-4171.7 1984.58 l
-4158.38 1971.8 4146.5 1966.48 4131.56 1966.48 c
-4120.76 1966.48 4111.04 1969.69 4103.48 1975.94 c
-4092.86 1984.76 4087 2000.96 4087 2021.84 c
-4087 2054.42 4103.71 2075.52 4129.76 2075.52 c
-4140.2 2075.52 4149.38 2071.73 4156.58 2064.5 c
-4162.34 2058.74 4165.04 2053.7 4168.46 2042 c
-h
-4181.06 1961 m
-f*
-3485.6 3962 m
-3483.98 4002.52 l
-3480.2 4002.52 l
-3479.12 3998.84 3476.24 3996.58 3472.82 3996.58 c
-3471.02 3996.58 3468.5 3997.17 3465.62 3998.36 c
-3456.8 4001.24 3447.98 4002.52 3439.16 4002.52 c
-3425.3 4002.52 3411.08 3997.36 3400.1 3988.46 c
-3386.42 3977.12 3379 3960.02 3379 3939.5 c
-3379 3902.96 3402.96 3878.48 3438.8 3878.48 c
-3459.14 3878.48 3476.96 3886.76 3487.94 3901.34 c
-3484.7 3904.58 l
-3471.38 3891.8 3459.5 3886.48 3444.56 3886.48 c
-3433.76 3886.48 3424.04 3889.69 3416.48 3895.94 c
-3405.86 3904.76 3400 3920.96 3400 3941.84 c
-3400 3974.42 3416.71 3995.52 3442.76 3995.52 c
-3453.2 3995.52 3462.38 3991.73 3469.58 3984.5 c
-3475.34 3978.74 3478.04 3973.7 3481.46 3962 c
-h
-3494.06 3881 m
-f*
-3497.14 3952.64 m
-3499.48 3953.18 3500.92 3953.36 3502.9 3953.36 c
-3507.58 3953.36 3509 3950.48 3509 3941.84 c
-3509 3896.3 l
-3509 3886.58 3506.52 3883.88 3496.6 3883.7 c
-3496.6 3881 l
-3536.56 3881 l
-3536.56 3884 l
-3527.02 3884.35 3524 3886.27 3524 3893.06 c
-3524 3943.82 l
-3524 3944.18 3525.23 3945.44 3526.66 3946.88 c
-3530.98 3951.2 3539.08 3954.8 3545.74 3954.8 c
-3553.48 3954.8 3558 3948.2 3558 3935.54 c
-3558 3896.48 l
-3558 3886.4 3555.93 3884.42 3545.2 3883.7 c
-3545.2 3881 l
-3585.52 3881 l
-3585.52 3884 l
-3575.26 3884.18 3573 3887.17 3573 3898.1 c
-3573 3943.46 l
-3578.28 3951.2 3583.91 3954.8 3592.18 3954.8 c
-3602.44 3954.8 3606 3949.85 3606 3934.64 c
-3606 3896.66 l
-3606 3886.4 3604.52 3884.96 3593.8 3883.7 c
-3593.8 3881 l
-3633.22 3881 l
-3633.22 3883.7 l
-3628.54 3884.06 l
-3623.14 3884.42 3621 3887.66 3621 3894.68 c
-3621 3931.76 l
-3621 3953 3613.91 3963.8 3599.92 3963.8 c
-3589.48 3963.8 3580.3 3959.12 3570.58 3948.68 c
-3567.34 3958.94 3561.22 3963.8 3551.5 3963.8 c
-3543.31 3963.8 3538.57 3961.46 3523.28 3949.94 c
-3523.28 3963.44 l
-3522.34 3963.8 l
-3513.16 3960.38 3507.04 3958.4 3497.14 3955.7 c
-h
-3634.04 3881 m
-f*
-3634.62 3951.74 m
-3636.24 3951.92 3637.5 3951.92 3639.12 3951.92 c
-3645.24 3951.92 3647 3950.12 3647 3941.66 c
-3647 3857.42 l
-3647 3848.06 3644.94 3846.08 3633.9 3845 c
-3633.9 3842 l
-3677.46 3842 l
-3677.46 3845 l
-3663.96 3845.18 3662 3847.19 3662 3858.68 c
-3662 3886.94 l
-3668.34 3881 3672.4 3879.2 3679.8 3879.2 c
-3701.22 3879.2 3717 3899.36 3717 3925.46 c
-3717 3947.78 3704.65 3963.8 3687.54 3963.8 c
-3677.61 3963.8 3669.8 3959.48 3662 3949.58 c
-3662 3963.44 l
-3660.54 3963.8 l
-3651 3960.02 3644.52 3957.68 3634.62 3954.62 c
-h
-3662 3941.12 m
-3662 3946.52 3671.87 3952.8 3679.98 3952.8 c
-3693.3 3952.8 3702 3939.2 3702 3918.26 c
-3702 3898.46 3693.23 3884.2 3680.34 3884.2 c
-3671.88 3884.2 3662 3891.09 3662 3896.84 c
-h
-3723 3881 m
-f*
-3844 3984.14 m
-3844 3902.6 l
-3844 3887.66 3841.88 3885.32 3827.94 3884.42 c
-3827.94 3881 l
-3878.34 3881 l
-3878.34 3884.42 l
-3865.2 3885.32 3863 3887.84 3863 3900.62 c
-3863 3980.54 l
-3863 3993.32 3865.29 3995.66 3878.34 3996.74 c
-3878.34 4000 l
-3842.52 4000 l
-3802.74 3909.26 l
-3761.16 4000 l
-3725.52 4000 l
-3725.52 3997 l
-3740.28 3996.09 3743 3993.89 3743 3980.54 c
-3743 3907.46 l
-3743 3888.92 3740.43 3885.5 3725.16 3884.42 c
-3725.16 3881 l
-3767.46 3881 l
-3767.46 3884 l
-3753.6 3884.73 3751 3888.95 3751 3907.46 c
-3751 3980 l
-3795.72 3881 l
-3798.24 3881 l
-h
-3883.02 3881 m
-f*
-3963.56 3892.88 m
-3960.5 3890.36 3958.34 3889.2 3955.64 3889.2 c
-3951.5 3889.2 3950 3891.78 3950 3899.9 c
-3950 3935 l
-3950 3944.18 3949.16 3949.22 3946.82 3953.36 c
-3943.04 3960.2 3935.3 3963.8 3924.32 3963.8 c
-3915.14 3963.8 3906.5 3961.28 3901.46 3957.14 c
-3896.96 3953.36 3894 3948.14 3894 3943.64 c
-3894 3939.5 3897.46 3935.9 3901.82 3935.9 c
-3906.14 3935.9 3909.92 3939.5 3909.92 3943.46 c
-3909.92 3944.18 3909.74 3945.08 3909.56 3946.34 c
-3909.2 3947.96 3909 3949.4 3909 3950.66 c
-3909 3955.52 3914.77 3959.8 3921.98 3959.8 c
-3930.8 3959.8 3935 3954.47 3935 3944.54 c
-3935 3933.56 l
-3907.76 3922.4 3904.75 3920.96 3897.14 3914.12 c
-3893.18 3910.52 3890.66 3904.4 3890.66 3898.46 c
-3890.66 3887.12 3898.4 3879.2 3909.56 3879.2 c
-3917.48 3879.2 3924.86 3882.98 3935.84 3892.34 c
-3936.74 3882.8 3939.98 3879.2 3947.36 3879.2 c
-3953.48 3879.2 3957.26 3881.36 3963.56 3888.2 c
-h
-3935 3903.14 m
-3935 3897.56 3934.23 3895.94 3930.98 3893.6 c
-3926.66 3891.08 3921.62 3889.2 3917.84 3889.2 c
-3911.54 3889.2 3906.48 3895.51 3906.48 3903.5 c
-3906.48 3904.22 l
-3906.48 3914.84 3913.7 3921.32 3935 3929.24 c
-h
-3963.92 3881 m
-f*
-3964.62 3951.74 m
-3966.24 3951.92 3967.5 3951.92 3969.12 3951.92 c
-3975.24 3951.92 3977 3950.12 3977 3941.66 c
-3977 3857.42 l
-3977 3848.06 3974.94 3846.08 3963.9 3845 c
-3963.9 3842 l
-4007.46 3842 l
-4007.46 3845 l
-3993.96 3845.18 3992 3847.19 3992 3858.68 c
-3992 3886.94 l
-3998.34 3881 4002.4 3879.2 4009.8 3879.2 c
-4031.22 3879.2 4047 3899.36 4047 3925.46 c
-4047 3947.78 4034.65 3963.8 4017.54 3963.8 c
-4007.61 3963.8 3999.8 3959.48 3992 3949.58 c
-3992 3963.44 l
-3990.54 3963.8 l
-3981 3960.02 3974.52 3957.68 3964.62 3954.62 c
-h
-3992 3941.12 m
-3992 3946.52 4001.87 3952.8 4009.98 3952.8 c
-4023.3 3952.8 4032 3939.2 4032 3918.26 c
-4032 3898.46 4023.23 3884.2 4010.34 3884.2 c
-4001.88 3884.2 3992 3891.09 3992 3896.84 c
-h
-4053 3881 m
-f*
-1 i
-4433.75 3262.55 330 104.4 re
-Y
-4433.75 3359.75 m
-4755.35 3270.95 l
-S
-0 0 6120 7920 re
-Y
-4472.15 3360.95 m
-4472.15 3382.55 4454.15 3400.55 4432.55 3400.55 c
-4410.95 3400.55 4392.95 3382.55 4392.95 3360.95 c
-4392.95 3339.35 4410.95 3321.35 4432.55 3321.35 c
-4454.15 3321.35 4472.15 3339.35 4472.15 3360.95 c
-f*
-4706.15 3234.95 m
-4737.35 3275.75 l
-4731.35 3327.35 l
-4865.75 3240.95 l
-f*
-4433.75 2868.95 339.6 190.8 re
-Y
-4433.75 3059.75 m
-4764.95 2877.35 l
-S
-0 0 6120 7920 re
-Y
-4472.15 3060.95 m
-4472.15 3082.55 4454.15 3100.55 4432.55 3100.55 c
-4410.95 3100.55 4392.95 3082.55 4392.95 3060.95 c
-4392.95 3039.35 4410.95 3021.35 4432.55 3021.35 c
-4454.15 3021.35 4472.15 3039.35 4472.15 3060.95 c
-f*
-4709.75 2853.35 m
-4748.15 2885.75 l
-4756.55 2936.15 l
-4865.75 2820.95 l
-f*
-2633.75 2105.75 342 294 re
-Y
-2633.75 2399.75 m
-2967.35 2114.15 l
-S
-0 0 6120 7920 re
-Y
-2672.15 2400.95 m
-2672.15 2422.55 2654.15 2440.55 2632.55 2440.55 c
-2610.95 2440.55 2592.95 2422.55 2592.95 2400.95 c
-2592.95 2379.35 2610.95 2361.35 2632.55 2361.35 c
-2654.15 2361.35 2672.15 2379.35 2672.15 2400.95 c
-f*
-2907.35 2103.35 m
-2951.75 2127.35 l
-2968.55 2174.15 l
-3053.75 2039.75 l
-f*
-4433.75 2031.35 342 295.2 re
-Y
-4433.75 2039.75 m
-4767.35 2326.55 l
-S
-0 0 6120 7920 re
-Y
-4472.15 2040.95 m
-4472.15 2062.55 4454.15 2080.55 4432.55 2080.55 c
-4410.95 2080.55 4392.95 2062.55 4392.95 2040.95 c
-4392.95 2019.35 4410.95 2001.35 4432.55 2001.35 c
-4454.15 2001.35 4472.15 2019.35 4472.15 2040.95 c
-f*
-4768.55 2264.15 m
-4751.75 2312.15 l
-4707.35 2336.15 l
-4853.75 2399.75 l
-f*
-4863.35 3232.55 319.2 15.5999 re
-Y
-4860.95 3240.95 m
-5175.35 3240.95 l
-S
-0 0 6120 7920 re
-Y
-4902.95 3242.15 m
-4902.95 3263.75 4884.95 3281.75 4863.35 3281.75 c
-4840.55 3281.75 4822.55 3263.75 4822.55 3242.15 c
-4822.55 3220.55 4840.55 3202.55 4863.35 3202.55 c
-4884.95 3202.55 4902.95 3220.55 4902.95 3242.15 c
-f*
-5133.35 3192.95 m
-5152.55 3240.95 l
-5133.35 3288.95 l
-5285.75 3240.95 l
-f*
-4863.35 2812.55 319.2 15.5999 re
-Y
-4860.95 2820.95 m
-5175.35 2820.95 l
-S
-0 0 6120 7920 re
-Y
-4902.95 2822.15 m
-4902.95 2843.75 4884.95 2861.75 4863.35 2861.75 c
-4840.55 2861.75 4822.55 2843.75 4822.55 2822.15 c
-4822.55 2800.55 4840.55 2782.55 4863.35 2782.55 c
-4884.95 2782.55 4902.95 2800.55 4902.95 2822.15 c
-f*
-5133.35 2772.95 m
-5152.55 2820.95 l
-5133.35 2868.95 l
-5285.75 2820.95 l
-f*
-4863.35 2392.55 319.2 15.5999 re
-Y
-4860.95 2400.95 m
-5175.35 2400.95 l
-S
-0 0 6120 7920 re
-Y
-4902.95 2402.15 m
-4902.95 2423.75 4884.95 2441.75 4863.35 2441.75 c
-4840.55 2441.75 4822.55 2423.75 4822.55 2402.15 c
-4822.55 2380.55 4840.55 2362.55 4863.35 2362.55 c
-4884.95 2362.55 4902.95 2380.55 4902.95 2402.15 c
-f*
-5133.35 2352.95 m
-5152.55 2400.95 l
-5133.35 2448.95 l
-5285.75 2400.95 l
-f*
-2333.75 3231.35 206.4 16.7996 re
-Y
-2333.75 3239.75 m
-2531.75 3240.95 l
-S
-0 0 6120 7920 re
-Y
-2372.15 3240.95 m
-2372.15 3262.55 2354.15 3280.55 2332.55 3280.55 c
-2310.95 3280.55 2292.95 3262.55 2292.95 3240.95 c
-2292.95 3219.35 2310.95 3201.35 2332.55 3201.35 c
-2354.15 3201.35 2372.15 3219.35 2372.15 3240.95 c
-f*
-2493.35 3192.95 m
-2512.55 3240.95 l
-2493.35 3288.95 l
-2645.75 3240.95 l
-f*
-2333.75 2811.35 206.4 16.7996 re
-Y
-2333.75 2819.75 m
-2531.75 2820.95 l
-S
-0 0 6120 7920 re
-Y
-2372.15 2820.95 m
-2372.15 2842.55 2354.15 2860.55 2332.55 2860.55 c
-2310.95 2860.55 2292.95 2842.55 2292.95 2820.95 c
-2292.95 2799.35 2310.95 2781.35 2332.55 2781.35 c
-2354.15 2781.35 2372.15 2799.35 2372.15 2820.95 c
-f*
-2493.35 2772.95 m
-2512.55 2820.95 l
-2493.35 2868.95 l
-2645.75 2820.95 l
-f*
-2333.75 2391.35 206.4 16.7996 re
-Y
-2333.75 2399.75 m
-2531.75 2400.95 l
-S
-0 0 6120 7920 re
-Y
-2372.15 2400.95 m
-2372.15 2422.55 2354.15 2440.55 2332.55 2440.55 c
-2310.95 2440.55 2292.95 2422.55 2292.95 2400.95 c
-2292.95 2379.35 2310.95 2361.35 2332.55 2361.35 c
-2354.15 2361.35 2372.15 2379.35 2372.15 2400.95 c
-f*
-2493.35 2352.95 m
-2512.55 2400.95 l
-2493.35 2448.95 l
-2645.75 2400.95 l
-f*
-5283.35 3232.55 319.2 15.5999 re
-Y
-5280.95 3240.95 m
-5595.35 3240.95 l
-S
-0 0 6120 7920 re
-Y
-5322.95 3242.15 m
-5322.95 3263.75 5304.95 3281.75 5283.35 3281.75 c
-5260.55 3281.75 5242.55 3263.75 5242.55 3242.15 c
-5242.55 3220.55 5260.55 3202.55 5283.35 3202.55 c
-5304.95 3202.55 5322.95 3220.55 5322.95 3242.15 c
-f*
-5553.35 3192.95 m
-5572.55 3240.95 l
-5553.35 3288.95 l
-5705.75 3240.95 l
-f*
-5283.35 2812.55 319.2 15.5999 re
-Y
-5280.95 2820.95 m
-5595.35 2820.95 l
-S
-0 0 6120 7920 re
-Y
-5322.95 2822.15 m
-5322.95 2843.75 5304.95 2861.75 5283.35 2861.75 c
-5260.55 2861.75 5242.55 2843.75 5242.55 2822.15 c
-5242.55 2800.55 5260.55 2782.55 5283.35 2782.55 c
-5304.95 2782.55 5322.95 2800.55 5322.95 2822.15 c
-f*
-5553.35 2772.95 m
-5572.55 2820.95 l
-5553.35 2868.95 l
-5705.75 2820.95 l
-f*
-5283.35 2392.55 319.2 15.5999 re
-Y
-5280.95 2400.95 m
-5595.35 2400.95 l
-S
-0 0 6120 7920 re
-Y
-5322.95 2402.15 m
-5322.95 2423.75 5304.95 2441.75 5283.35 2441.75 c
-5260.55 2441.75 5242.55 2423.75 5242.55 2402.15 c
-5242.55 2380.55 5260.55 2362.55 5283.35 2362.55 c
-5304.95 2362.55 5322.95 2380.55 5322.95 2402.15 c
-f*
-5553.35 2352.95 m
-5572.55 2400.95 l
-5553.35 2448.95 l
-5705.75 2400.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 2438 a FF(Figure)h(4:)41 b(CmpMaps)28
-b(\(comp)s(ound)h(Mappings\))h(ma)m(y)g(b)s(e)f(nested)g(in)g(order)g
-(to)i(construct)f(complex)g(Map-)0 2551 y(pings)g(out)g(of)h(simpler)f
-(building)g(blo)s(c)m(ks.)1012 4887 y @beginspecial 141
- at llx 322 @lly 422 @urx 581 @ury 2107 @rwi @setspecial
-%%BeginDocument: sun211_figures/frames.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 141 322 422 581
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:50:26
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-2266.55 5424.95 m
-2266.55 5477.75 2223.35 5522.15 2169.35 5522.15 c
-1582.55 5522.15 l
-1529.75 5522.15 1485.35 5477.75 1485.35 5424.95 c
-1485.35 4778.15 l
-1485.35 4725.35 1529.75 4680.95 1582.55 4680.95 c
-2169.35 4680.95 l
-2223.35 4680.95 2266.55 4725.35 2266.55 4778.15 c
-f*
-1 g
-2201.75 5480.15 m
-2201.75 5532.95 2159.75 5576.15 2105.75 5576.15 c
-1527.35 5576.15 l
-1474.55 5576.15 1431.35 5532.95 1431.35 5480.15 c
-1431.35 4841.75 l
-1431.35 4788.95 1474.55 4745.75 1527.35 4745.75 c
-2105.75 4745.75 l
-2158.55 4745.75 2201.75 4788.95 2201.75 4841.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-2201.75 5480.15 m
-2201.75 5532.95 2159.75 5576.15 2105.75 5576.15 c
-1527.35 5576.15 l
-1474.55 5576.15 1431.35 5532.95 1431.35 5480.15 c
-1431.35 4841.75 l
-1431.35 4788.95 1474.55 4745.75 1527.35 4745.75 c
-2105.75 4745.75 l
-2158.55 4745.75 2201.75 4788.95 2201.75 4841.75 c
-h
-S
-2019.35 4731.35 15.5999 849.6 re
-Y
-2026.55 5583.35 m
-2026.55 4738.55 l
-S
-2026.55 5212.55 189.6 15.5999 re
-Y
-2024.15 5220.95 m
-2208.95 5220.95 l
-S
-0 0 6120 7920 re
-Y
-2064.95 5222.15 m
-2064.95 5243.75 2046.95 5261.75 2025.35 5261.75 c
-2002.55 5261.75 1984.55 5243.75 1984.55 5222.15 c
-1984.55 5200.55 2002.55 5182.55 2025.35 5182.55 c
-2046.95 5182.55 2064.95 5200.55 2064.95 5222.15 c
-f*
-2244.95 5222.15 m
-2244.95 5243.75 2226.95 5261.75 2205.35 5261.75 c
-2182.55 5261.75 2164.55 5243.75 2164.55 5222.15 c
-2164.55 5200.55 2182.55 5182.55 2205.35 5182.55 c
-2226.95 5182.55 2244.95 5200.55 2244.95 5222.15 c
-f*
-2026.55 4972.55 189.6 15.5999 re
-Y
-2024.15 4980.95 m
-2208.95 4980.95 l
-S
-0 0 6120 7920 re
-Y
-2064.95 4982.15 m
-2064.95 5003.75 2046.95 5021.75 2025.35 5021.75 c
-2002.55 5021.75 1984.55 5003.75 1984.55 4982.15 c
-1984.55 4960.55 2002.55 4942.55 2025.35 4942.55 c
-2046.95 4942.55 2064.95 4960.55 2064.95 4982.15 c
-f*
-2244.95 4982.15 m
-2244.95 5003.75 2226.95 5021.75 2205.35 5021.75 c
-2182.55 5021.75 2164.55 5003.75 2164.55 4982.15 c
-2164.55 4960.55 2182.55 4942.55 2205.35 4942.55 c
-2226.95 4942.55 2244.95 4960.55 2244.95 4982.15 c
-f*
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -1530 -5401]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -1615 -5401]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -1677 -5399]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -1747 -5401]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -1863 -5399]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -1569 -5179]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -1671 -5179]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -1741 -5179]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -1779 -5178]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-39 95 true[1 0 0 1 -1851 -5179]@85 imagemask
-J,fQKrdXtJs8E-#
-s8N'!5QCKY!$D7!!!!Q0huE`^s1eU7#QMR>!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:J-Z+i!8n+^^]8`m
-s1eUVs8Tk7#QOh>!!3-"^]4 at as1eU7+90+V!!iP>!!!'"^]4?7J%u$a!$AuV!!!8>!!!!$^]4?7!.Y%~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -2316 -5179]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-39 95 true[1 0 0 1 -2403 -5179]@85 imagemask
-J,fQKrdXtJs8E-#
-s8N'!5QCKY!$D7!!!!Q0huE`^s1eU7#QMR>!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:J-Z+i!8n+^^]8`m
-s1eUVs8Tk7#QOh>!!3-"^]4 at as1eU7+90+V!!iP>!!!'"^]4?7J%u$a!$AuV!!!8>!!!!$^]4?7!.Y%~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -2316 -4939]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-66 95 true[1 0 0 1 -2387 -4939]@85 imagemask
-&-)\0s8W,W!"],0
-s8W-!huF#^s8W-!s6p!js8W-!s8VQg!WW3"s8W,o!!*'!s8W-!p](;Ds8W-!s7cQo5QCc`s8Vus!$D7@
-s8W,s!!!Q0s8W-!rVup's8W-!s8Duu#J^<>!!)uu!!D-Z!!!!@!!!&hz%fcS0p](9o!!e#S!.4bH
-!!!+O!!#1_!!!!$J,fQkz!Pe[8%tFW[!!'e7!!g:>!!!#7!!!,Zz!!!!"n,NFgz!;HNoz!!%BH
-z!!!!_zz*rl9 at z!"XS[z!!!8>z!!!!(huE`Wz"7Q9jz!!2ip
-z!!!#szzIK0?Jz!'^G`z!!"*kz!!!!@^]4?7z&)[Efz!!hun
-z!!!8nz!!!!$p](9oz!W2otz!!3'!z!!!$!zzIt.M!z!.TM!z!!#7!
-z!!!!`huE`Wz+5d,!z!$C\1z!!!Q)z!!!!0p](9oz&,ZD-z!!iE%
-z!!!9'z!!!!(rVuouz"9/?$z!!E6$z!!!-$J,fQL!!!!$s*t(Lz!WRZM
-z!!3,8z!!!'"^]4?7!!!!"s1eU7z!WTq8z!!3,Xz!!!'"huEfY!!!!"s53k^z!WV'X
-#64`(!!3,X!!e#S!!!'"huF"4!!!!$s53kZ^]4?7"979Z"2Fm:!!E8Z!!D-Z!!!9(huEf9!!!!(s53kX
-n,NFg&-'EF!Up'h!"]+F!!)co!!",@^]4B4!!!!`s1eU7IK0?J5Q?66!.OtK!.Y$!!!#66!!3-"!!!!`
-^]4K:rr<$!+7K7 at s8Duu!"]&/s8Vus!!!9(s8W,s!!!!$s8W-!p](9o!WW3"s6p!g!!*'!s8V!W!!!"Ks8W,7z+92B at z!"],0rVuou!!!-$s7cQozJ,d:az!"\u-!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -1568 -4944]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -1670 -4944]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -1740 -4944]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -1778 -4943]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-66 95 true[1 0 0 1 -1833 -4944]@85 imagemask
-&-)\0s8W,W!"],0
-s8W-!huF#^s8W-!s6p!js8W-!s8VQg!WW3"s8W,o!!*'!s8W-!p](;Ds8W-!s7cQo5QCc`s8Vus!$D7@
-s8W,s!!!Q0s8W-!rVup's8W-!s8Duu#J^<>!!)uu!!D-Z!!!!@!!!&hz%fcS0p](9o!!e#S!.4bH
-!!!+O!!#1_!!!!$J,fQkz!Pe[8%tFW[!!'e7!!g:>!!!#7!!!,Zz!!!!"n,NFgz!;HNoz!!%BH
-z!!!!_zz*rl9 at z!"XS[z!!!8>z!!!!(huE`Wz"7Q9jz!!2ip
-z!!!#szzIK0?Jz!'^G`z!!"*kz!!!!@^]4?7z&)[Efz!!hun
-z!!!8nz!!!!$p](9oz!W2otz!!3'!z!!!$!zzIt.M!z!.TM!z!!#7!
-z!!!!`huE`Wz+5d,!z!$C\1z!!!Q)z!!!!0p](9oz&,ZD-z!!iE%
-z!!!9'z!!!!(rVuouz"9/?$z!!E6$z!!!-$J,fQL!!!!$s*t(Lz!WRZM
-z!!3,8z!!!'"^]4?7!!!!"s1eU7z!WTq8z!!3,Xz!!!'"huEfY!!!!"s53k^z!WV'X
-#64`(!!3,X!!e#S!!!'"huF"4!!!!$s53kZ^]4?7"979Z"2Fm:!!E8Z!!D-Z!!!9(huEf9!!!!(s53kX
-n,NFg&-'EF!Up'h!"]+F!!)co!!",@^]4B4!!!!`s1eU7IK0?J5Q?66!.OtK!.Y$!!!#66!!3-"!!!!`
-^]4K:rr<$!+7K7 at s8Duu!"]&/s8Vus!!!9(s8W,s!!!!$s8W-!p](9o!WW3"s6p!g!!*'!s8V!W!!!"Ks8W,7z+92B at z!"],0rVuou!!!-$s7cQozJ,d:az!"\u-!!!!~>
-Q
-0.564706 g
-4055.75 4824.95 m
-4055.75 4883.75 4008.95 4930.55 3950.15 4930.55 c
-3140.15 4930.55 l
-3081.35 4930.55 3034.55 4883.75 3034.55 4824.95 c
-3034.55 4194.95 l
-3034.55 4136.15 3081.35 4089.35 3140.15 4089.35 c
-3950.15 4089.35 l
-4008.95 4089.35 4055.75 4136.15 4055.75 4194.95 c
-f*
-1 g
-3990.95 4881.35 m
-3990.95 4938.95 3945.35 4984.55 3887.75 4984.55 c
-3083.75 4984.55 l
-3026.15 4984.55 2980.55 4938.95 2980.55 4881.35 c
-2980.55 4257.35 l
-2980.55 4199.75 3026.15 4154.15 3083.75 4154.15 c
-3887.75 4154.15 l
-3945.35 4154.15 3990.95 4199.75 3990.95 4257.35 c
-f*
-0 g
-3990.95 4881.35 m
-3990.95 4938.95 3945.35 4984.55 3887.75 4984.55 c
-3083.75 4984.55 l
-3026.15 4984.55 2980.55 4938.95 2980.55 4881.35 c
-2980.55 4257.35 l
-2980.55 4199.75 3026.15 4154.15 3083.75 4154.15 c
-3887.75 4154.15 l
-3945.35 4154.15 3990.95 4199.75 3990.95 4257.35 c
-h
-S
-3808.55 4139.75 15.5999 849.6 re
-Y
-3815.75 4991.75 m
-3815.75 4146.95 l
-S
-3815.75 4620.95 190.8 15.5999 re
-Y
-3813.35 4629.35 m
-3998.15 4629.35 l
-S
-0 0 6120 7920 re
-Y
-3855.35 4630.55 m
-3855.35 4653.35 3837.35 4671.35 3815.75 4671.35 c
-3792.95 4671.35 3774.95 4653.35 3774.95 4630.55 c
-3774.95 4608.95 3792.95 4590.95 3815.75 4590.95 c
-3837.35 4590.95 3855.35 4608.95 3855.35 4630.55 c
-f*
-4035.35 4630.55 m
-4035.35 4653.35 4017.35 4671.35 3995.75 4671.35 c
-3972.95 4671.35 3954.95 4653.35 3954.95 4630.55 c
-3954.95 4608.95 3972.95 4590.95 3995.75 4590.95 c
-4017.35 4590.95 4035.35 4608.95 4035.35 4630.55 c
-f*
-3815.75 4380.95 190.8 15.5999 re
-Y
-3813.35 4389.35 m
-3998.15 4389.35 l
-S
-0 0 6120 7920 re
-Y
-3855.35 4390.55 m
-3855.35 4413.35 3837.35 4431.35 3815.75 4431.35 c
-3792.95 4431.35 3774.95 4413.35 3774.95 4390.55 c
-3774.95 4368.95 3792.95 4350.95 3815.75 4350.95 c
-3837.35 4350.95 3855.35 4368.95 3855.35 4390.55 c
-f*
-4035.35 4390.55 m
-4035.35 4413.35 4017.35 4431.35 3995.75 4431.35 c
-3972.95 4431.35 3954.95 4413.35 3954.95 4390.55 c
-3954.95 4368.95 3972.95 4350.95 3995.75 4350.95 c
-4017.35 4350.95 4035.35 4368.95 4035.35 4390.55 c
-f*
-q[1 0 0 1 0 0]concat
-72 100 true[1 0 0 1 -3071 -4806]@85 imagemask
-#CldSIt.M!!!e#S
-5QC``!!!8>!WW3"huE`^^`WUVs82is#N5X^s8W*!!!iQ(s1n[7^]4W>s82j%s6p!ns8V!W!WVop#QOgS
-!!%NH!!iQ'!!!!`rW!3'qu?]s+9)<Gs7cQo!"]*[#QO8n!!!9(^^'nt!!!!(s54.^^]4?7"97iqs*t(L
-!!E8j#QFc(!!!'"p]pg!!!!!"s7ciuz!WW'&qu?]s!!3,t#Q+Q%!!!'"rWi2u!!!!"s8E8uz!WW-(n,NFg
-!!3-!#Oh]n!!!'"rs/#n!!!!$s8N>^z"98B+huE`W!!E9$#N,R^!!!9(rs-=>!!!!0s8N>>z
-+92?G^]4?7!'gM`#J^<>!!%NKrs+&S!!!'"s8N=S!!!!$s8W*!z&-)\/z!'gM`rVuou!!*'!
-s8Duu!!!-$s8W&u!!!!0s8W,sz5QCc`qu?]s!<<*!s7cQo!!iQ(s8Vio!!!Q0s8W,g!!!!`s8W-!n,NFgs8W-!
-s53kW"98E$s8V!W!!iQ(s8W,7!!", at s8W-!J,fR6s8W-!rr<$!J,fQKs8Duu!WW3"s8Vus!!E9$s8W,o
-!!!9(s8W-!n,NG!s8W-!s1eU7&-)\0s8N'!!$D7 at s8Vus!!#7`s8W,g!!!"Ks8W-!^]4?7J,fQKrr<$!
-!<<*!s82is!!*'!s8VQg!!!'"s8W,7!!!!"s8W-!z!WW3"qu?]s!!3-"s6p!g!!!-$s8Tk7!!!!$s8W*!z
-"98E!z!!E9$p](9o!:U*js53kW!!)Kjs8Tk7!!!&h"98CO!!!!"n,r^jz!Up3krVuou!!D]m
-s82is!!!,j"989!!!!!(n,`Rez#Ohcop](9o!"\Q"s7cQo!!!Q!!WVop!!!!@n,WL`z+7K:1
-p](9o!'frQs7cQo!!#7Q!.XbD!!!"Kn,Rt9zs6p"Qqu?]s!WVWh5PtK]!!E8j!$D1?!!!9(n,O!u!!!!0s6p"!rr<$!+91g1#QK;S!.Y%<!!E8Z!!3-"n,NIg
-n,N^ns6p!gJ,TF4s8VQg!'gM`s8RlD!!!Q0s8Virn,NFjs8W,7!Up'h!.Y%J!!2Qh!!!9(huEfI~>
-Q
-q[1 0 0 1 0 0]concat
-76 95 true[1 0 0 1 -3149 -4809]@85 imagemask
-+92B at p`KP9s6q-1
-s8Vj9s8W,g+92B at p`KP9s6pR!s8VQns8W,7!WW3"!!*'!s*t+Ls8DuuJ,fNK!.Y%H!!%NKrr<%Ks82is
-J,fKJ!'gM]!!*'!qu?^]s82iss8Vus!'gM]!!3-"p](:Ys82j!s8VQg!'gM]!!E9$huEaAs82j%s8V!W
-!'gM]!"],0^]4@!s82j-s8RTL!'gM]!$D7 at J,fR6s82j]s8N'!!'gM]!.Y%J!!!!`s82kHs82is!'gM]!<<)s!!!!`
-s82ots7cQo!'gM]!WW2h!!!!`s83!!s53kW!'gM]#QOh^!!!!`s83E-s1eU7!'gM]&-)Z[!!!!`s83u=
-s*t(L!'gM_5QC``!!!!`s8G7_rVuou!'gM`J,fEH!!!!`s8W-!qu?]s!'gM`s8Vio!!!!`s8W-!n,NFg
-!'gM`s8V!W!!!!`s8DuthuE`W!'gM]s8Tk7!!!!`s87BHJ,fQL!'gM]5Q?66!!!!`s83u=z!'gM]&,lP/!!!!`
-s83-"z!'gM]"8i-!!!!!`s82oqz!'gM]!<)ru!!!!`s82kHz!'gM]!'bu6!!!!`s82j=
-^]4?7!'gM]!"[uf!!!!`s82j%n,NFg!'gM]!!Dur!!!!`s82j!qu?]s!'gM]!!3'!!!!!`s82isrr<$!
-!'gM]!!%M!!!!!`s82isJ%u$a!'gM]!!#7Q!!!!`s82is5PP3Y!'gM]!!#7_!!!!`s82isJ,b$!!'gM]!!3-"huEaA
-s82j]s8W*!!'gM]!'gM`rr<$`s82j]s8W*!!'gM]!'gM`rr<$`s82isz!'gM]z!!!!`s82is
-z!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!", at s82isz+92B=z!!", at s82isz+92B=z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 94 true[1 0 0 1 -3228 -4780]@85 imagemask
-!$C\1z!!%NJ
-z!!!'"s*t(L!!!!$s8Tk7z#QOh^z!"],0n,NFg!!", at s7cQo!!!!@s8Vusz5QC9O
-z!'gMAIK0?J!!#7`i'%,@!!!!`s56*Az5QBX`z!'gMA%tFW[!!", at i"(><!!!!@s54-t
-z+917(^]4?7!"]+F"5j.Z!!!9(J-4^0!!!!"rW!&Yz!!!!"n,NFgz!Up'hz!!2ipz!!!#o
-zzp](9oz!;lfsz!!%BHz!!!"HzzIK0?Jz!<)ruz!!*$!
-z!!!'"z!!!!"rr<$!z"93lOz!!E7Oz!!!-$J,fQL!!!!(s1eU7z#QMR>
-z!"]+fz!!!Q0huE`W!!!!0s53kWz+91g1z!$D71z!!#7`n,NFg!!!!`s7cQoz5QCKY
-z!.Y%Hz!!%NKqu?]s!!!$!s82iszs8W&uz!<<)uz!!3-"rVuou!!!'"s8N'!
-!!!!$s8UsVz"98DYJ,fQL!!E9$O+731!!!9(s,V[1!!!!(s8Rkiz&-)Y7^]4?7!"],0#J^<>
-!!", at rr_0Z!!!!@s8E,Yz+92<Bn,NFg!'gM]!Up'h!!#7`quQ9e!!!"Ks82omzJ,f9Dp](9o!.Y%D!;HNo
-!!*'!n,W at d!!!$!s6p#9!!!!"s8VQgIK0?J!WW2X!.FnJ!!3-"huGq@!!!-$s1eV!!!!!$s8Tk7*rl9@
-#QOh>!$;1@!!iQ(J,g[A!!!Q0s*t([J,fQ[s8RTL&&8/F+92?@!"ZjF!$D7@!!!8>!!#7`rVup'huEaA
-s8Duu#N,R^5QC]_!!D]j!.Y%H!!!,j!!%NKqu?^!n,NIgs82is"8Diss8Vus!!iE%!WW3!!!!9'!!iQ(rr<$@rr>:`s8Virs8V"As8W,o"98DZ5QCc`p]LQri'78As7c]rs53~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -3297 -4809]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -3383 -4809]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -3445 -4807]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -3515 -4809]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -3631 -4807]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-92 93 true[1 0 0 1 -3429 -4587]@85 imagemask
-5QCc`s*t(L#QOhn
-5QCc`s*t(L#QOhn5QCc`s*t(L&-)\!!<<*!huE`W+92?@!$D7 at z5QCKY!"],-zJ,f!<!!iQ%
-zJ,eF,!!iQ!zs8Tk7!!iQ!!!!!"s8RTL!!E8j!!!!$s8N'!!!E8j!!!!$s8Duu!!E8j!!!!(
-s82is!!E8j!!!!0s7cQo!!E8j!!!!@s7cQo!!E8j!!!!@s6p!g!!E8j!!!!`s53kW!!E8j!!!"Ks1eU7!!E8j!!!$!
-s*t(L!!E8j!!!'"s*t(L!!E8j!!!'"rr<$!!!E8j!!!-$rVuou!!E8j!!!9(qu?]s!!E8j!!!Q0p](9o
-!!E8j!!!Q0n,NFg!!E8j!!", at n,NFg!!E8j!!#7`huE`W!!E8j!!%NK^]4?7!!E8j!!*'!J,fQL!!E8j
-!!*'!z!!E8j!!3-"z!!E8j!!E9#z!!E8j!!iQ%z!!E8j!!iQ!z!!E8j!"],!z!!E8j
-!$D71z!!E8j!'gMAz!!E8j!'gM!z!!E8j!.Y$!z!!E8j!<<'!z!!E8j!WW-!
-z!!E8j"98?#z!!E8j"989!z!!E8j#QOQ!z!!E9$s8VQgz!!E9$s8V!Wz
-!!E9$s8W&uz!!E9$s8W,Wz!!E9$s8W,oz!!E8j"98E$z!!E8j!!iQ(^]4?7!!E8j!!*'!huE`W
-!!E8j!!", at p](9o!!E8j!!!9(qu?]s!!E8j!!!-$rVuou!!E8j!!!$!rr<$!!!E8j!!!"Ks*t(L!!E8j
-!!!!`s*t(L!!E8j!!!!`s1eU7!!E8j!!!!@s1eU7!!E8j!!!!@s53kW!!E8j!!!!0s53kW!!E8j!!!!0
-s53kW!!E8j!!!!0s53kW!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(
-s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g
-!!E8j!!!!(s6p!g!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!@s1eU7!!E8j
-!!!!@s1eU7!!E8j!!!!`s1eU7!!E8j!!!!`s*t(L!!E8j!!!"Krr<$!!!E8j!!!$!rr<$!!!E8j!!!'"rVuou!!iPn!!!9(qu?]s!!iQ!!!", at n,NFg!!iQ!!!*'!huE`W!"],/!$D7 at J,fQL
-!'gM`s8W-!z"98E$s8W,oz5QCc`s8W,7z5QCc`s8W&uz5QCc`s8RTLz~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -3524 -4587]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-82 74 true[1 0 0 1 -4137 -4585]@85 imagemask
-!!!$!huE`W&&8/F
-!"],/!!!!`n,NFgJ,fP!!!%ND!!!'"s8V!W!<;rs!!E9$s7cQps82is&-(QPqu?j!rVup?s*tX[!!E9#
-!!#7_!!iOS#QOf(!.XnH"96.As8N'!s7cQps54Ffrr<*"p](<on.5R!J-#]>!!%N<&,:X)"979Z!.Xbc
-n/m/cs53kW5PuV]%tFob^]4?Vr'.t-J.M[q!!",?5C`uh&-'EF!"]&nJ-Wk3s*t(L&-%+Z#J_G]J,fQSs*k"N^`WT,
-!!!9(rW!&95Q?66!!E9#!!C#$rr<$!"989!"2I/$!!!!$s82j!^jl at a!!!'"qu?]sJ,]KK!!3,p!!!"K
-rr<$!!<;fo!!%NKzs7cQo!.XtJ!!!$!p](9oJ,TEJ!!%ND!!!$!rVuou!.XbD!!*&uzJ,B9H
-!<<#u!!!!`qu?]ss8Duu!!#7]!!!$!rVuou!'gG_!!*&uz+8u6?!<<#u!!!!@rVuous8Duu!!",@!!!$!rVuou
-!$D4@!!*&uz+9)<@!<<#u!!!!@s*t(Ls8Duu!!", at J,fTLrVuou!'gL6!!*&uz5QAM!!<<#u
-!!!!`s1eU7s8Duu!!#7`huEb,rVuou!'gMA!!%NKzJ,eF,!.Y"K!!!"Ks6p!gJ,]KK!!%KJn,NH<
-rr<$!!.Ot;!!#7`zrr;`n!'gJ`!!!#uJ+s!D5Q?66!!)qHp](:Ys*t(L!W7HF!!", at J,fQMr'1)Z!$D5k!!!&p
-5PtK]&-'EF!!E!\rVup/s1eU7"8Eu;!!!9(^]4?>n/qZ1!!iP^!!!8n+9)<@"979Z!"[uurr<$$s6p!g
-+5d\0J,fWMn,NGQ^^pHq!!*&o!!#7!#QK;S!.XnH!<7QSs1eU75Q1W`rr<0$^]4?Vrr<<'!!E8:!!!Q0
-i#hjs"979Z!!iQ(s7cQps53kW!WW3"n,NLhn,NFgJ,fQ,!!3,h!!!!@s8RTL!<;Ng!!!9(rVuous7cQo!!%N,z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-62 107 true[1 0 0 1 -4147 -4345]@85 imagemask
-!!!$!huE`W!!!Q0
-rVuou!!#7`s*t(L!!*'!s53kW!!E9$s7cQo!!iQ(s82is!"],0s8N'!!'gMQ+9-ik!.Y$a"96.:!<<'!
-!<:sW!WW-!!.XJ<!WW&t!'g5Y"98,r!$D+=#QO8n!"]&/#QO8n!"]&/&-(Pf!!iN(+90+V!!iOS+90+V
-!!E7O+90+V!!E8:5Q?66!!E8Z5Q?66!!3,XJ,b$!!!3,XJ,]KK!!3,hJ,]KK!!3,hJ,]KK!!*&os8N'!!!*&os8N'!
-!!*&os8Duu!!*&os8Duu!!*&os8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu
-!!*&ss8Duu!!*&ss8Duu!!*&sJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,t5Q:]`!!3,p5Q:]`
-!!E8r+9)<@!!E8r+9)<@!!E8r+9-ik!!iQ!&-%.[!!iPn#QK;S!"],!#QMR>!"],!"96.:!$D7!!WV'X!$D7!!WV'X
-!'gM!!<;Ng!'gM!!.XbD!.Y$!!'gA]!<<(L!$D1?!WW0"!!iN("98?#!!E7O"98?#!!3,X#QO]%!!%ND
-&-)D)!!", at +91g1!!!9(s8V!W!!!$!s8Tk7!!!!`s8RTL!!!!(s8N'!!!!!(s8Duu!!!!0s82is!!!!@
-s7cQo!!!!`s53kW!!!"Ks1eU7!!!$!rr<$!!!!'"rVuou!!!-$p](9o!!!9(huE`W!!!Q0^]4?7!!", at z!!%NH
-z!!*&oz!!3,Xz!!E8:z!!iN(z!"]&/z!"\u-z!$Ct9z!'frQ
-z!'fBAz!.Vcaz!.TM!!!Dur!<3$!!"]&/!<3$!!$D1?!<)ru!'gJ`!<)ru!.Y"K!<)ru
-!<<'!!<)ru!WW0"!<)ru"98B$!<3$!#QOf(!<3$!&-)V/!.TM!5QC]_!.VcaJ,fEH!'fBBs8Vio!$D+Ds8VQg!"],0s8Tk7!!iQ(s8RTL!!E9$s8Duu!!*'!s6p!g!!#7`s*t(L!!!'"n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-96 93 true[1 0 0 1 -3414 -4352]@85 imagemask
-5QCc`s8V!Wz
-5QCc`s8W+Lz5QCc`s8W,sz!.Y%Ks8W-!J,fQL!$D7 at s8W-!n,NFg!!iQ(!!E9$qu?]s!!E9!
-!!!Q0s*t(L!!E9!!!!$!s53kW!!E8r!!!!@s6p!g!!3,p!!!!(s82is!!3,p!!!!"s8Duu!!3,pz
-J,b$!!!3,pz5QAM!!!3,pz+917!!!3,pz#QO8n!!3,pz"98,r!!3,pz!WW&t!!3,pz
-!<;rs!!3,pz!.XtJ!!3,pz!.Y"K!!3,pz!'gJ`!!3,pz!$D5k!!3,pz!$D6V
-!!3,pz!"]+F!!3,pz!!iP^!!3,pz!!iP^!!3,pz!!iPn!!3,pz!!E8j!!3,p
-z!!E8r!!3,pz!!3,p!!3,pz!!3,p!!3,pz!!3,t!!3,pz!!3,t!!3,pz!!*&s!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!%NJ!!3,pz
-!!%NJ!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!*'!!!3,pz!!*&u!!3,pz!!*&u!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!3-!!!3,pz!!3,t!!3,pz!!3,t!!3,pz
-!!E9!!!3,pz!!E9!!!3,pz!!E8r!!3,pz!!iQ!!!3,pz!!iQ!!!3,pz!"],!!!3,pz
-!"],!!!3,pz!$D7!!!3,pz!$D7!!!3,pz!'gM!!!3,pz!.Y$!!!3,pz!<<(L
-!!3,pz!<<'!!!3,pz!WW-!!!3,pz"989!!!3,pz#QO]%!!3,pz&-)D)!!3,p
-z+91g1!!3,pzJ,eF,!!3,pzs8Tk7!!3,p!!!!"s8N'!!!3,p!!!!(s8Duu!!3,p!!!!@s7cQo!!E8r!!!"Ks6p!g!!E9!!!!-$s1eU7!!iQ%!!", at rr<$!!"],0!!iQ(qu?]s
-!$D7 at s8W-!n,NFg!WW3"s8W-!J,fQL5QCc`s8W,oz5QCc`s8W+Lz5QCc`s8Tk7z~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -3515 -4351]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-58 65 true[1 0 0 1 -3577 -4351]@85 imagemask
-!!!'"p](9o!!!Q0
-rr<$!!!#7`s1eU7!!*'!s53kW!!3-"s7cQo!!E9$s82is!"],0s8Duu!$D7 at s8N'!!$D7 at s8RTL!'gM`
-s8Tk7!.Y%H!'fBA!<<)W!!hun!<<(L!!D]j!WW0"!!)co!WW-!!!%BH"989!!!#+]"98,r!!"&?#QO8n
-!!!N0#QN]^!!!6(#QN]^!!!7S&-'EF!!!+O&-%.[!!!&8&-%.[!!!$"&,uV0z+9)<@z+9)<@z+8u6?
-z+8u6?z+8u6?z+8u6?z+8u6?z+8c*=z+8c*=z+8c*=z+8c*=
-z+8c*=z+8c*=z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z#Q+Q%
-z#Q=]'z#Q=]'z"9&9#!!2Qh"9&9#!!i9!!WN-"!"\u-!WN-"!"]&/!<3$!!$D1?!<7QL!$D4@!.TM!!'gJ`!'e7!!'gJ`!$C,!!'gG_!$C,!!'gG_!"\Q!!.XtJ!!i9!!.XnH!!E-!
-!.XbD!!)uu!<;Ng!!%M!!WV'X!!#7Q"96.:!!!Q0s8RTL!!!-$s8Duu!!!$!s7cQo!!!!@s1eU7~>
-Q
-0.564706 g
-2662.55 3959.75 m
-2662.55 4018.55 2615.75 4065.35 2556.95 4065.35 c
-1746.95 4065.35 l
-1688.15 4065.35 1641.35 4018.55 1641.35 3959.75 c
-1641.35 3329.75 l
-1641.35 3270.95 1688.15 3224.15 1746.95 3224.15 c
-2556.95 3224.15 l
-2615.75 3224.15 2662.55 3270.95 2662.55 3329.75 c
-f*
-1 g
-2597.75 4016.15 m
-2597.75 4073.75 2552.15 4119.35 2494.55 4119.35 c
-1690.55 4119.35 l
-1632.95 4119.35 1587.35 4073.75 1587.35 4016.15 c
-1587.35 3392.15 l
-1587.35 3334.55 1632.95 3288.95 1690.55 3288.95 c
-2494.55 3288.95 l
-2552.15 3288.95 2597.75 3334.55 2597.75 3392.15 c
-f*
-0 g
-2597.75 4016.15 m
-2597.75 4073.75 2552.15 4119.35 2494.55 4119.35 c
-1690.55 4119.35 l
-1632.95 4119.35 1587.35 4073.75 1587.35 4016.15 c
-1587.35 3392.15 l
-1587.35 3334.55 1632.95 3288.95 1690.55 3288.95 c
-2494.55 3288.95 l
-2552.15 3288.95 2597.75 3334.55 2597.75 3392.15 c
-h
-S
-2415.35 3274.55 15.5999 849.6 re
-Y
-2422.55 4127.75 m
-2422.55 3281.75 l
-S
-2422.55 3520.55 177.6 243.6 re
-Y
-2422.55 3764.15 m
-2591.75 3528.95 l
-S
-0 0 6120 7920 re
-Y
-2460.95 3765.35 m
-2460.95 3788.15 2442.95 3806.15 2421.35 3806.15 c
-2398.55 3806.15 2380.55 3788.15 2380.55 3765.35 c
-2380.55 3743.75 2398.55 3725.75 2421.35 3725.75 c
-2442.95 3725.75 2460.95 3743.75 2460.95 3765.35 c
-f*
-2631.35 3528.95 m
-2631.35 3551.75 2613.35 3569.75 2591.75 3569.75 c
-2568.95 3569.75 2550.95 3551.75 2550.95 3528.95 c
-2550.95 3507.35 2568.95 3489.35 2591.75 3489.35 c
-2613.35 3489.35 2631.35 3507.35 2631.35 3528.95 c
-f*
-2422.55 3515.75 182.4 252 re
-Y
-2422.55 3524.15 m
-2596.55 3767.75 l
-S
-0 0 6120 7920 re
-Y
-2460.95 3525.35 m
-2460.95 3548.15 2442.95 3566.15 2421.35 3566.15 c
-2398.55 3566.15 2380.55 3548.15 2380.55 3525.35 c
-2380.55 3503.75 2398.55 3485.75 2421.35 3485.75 c
-2442.95 3485.75 2460.95 3503.75 2460.95 3525.35 c
-f*
-2634.95 3767.75 m
-2634.95 3790.55 2616.95 3808.55 2595.35 3808.55 c
-2572.55 3808.55 2554.55 3790.55 2554.55 3767.75 c
-2554.55 3746.15 2572.55 3728.15 2595.35 3728.15 c
-2616.95 3728.15 2634.95 3746.15 2634.95 3767.75 c
-f*
-q[1 0 0 1 0 0]concat
-72 100 true[1 0 0 1 -1677 -3941]@85 imagemask
-#CldSIt.M!!!e#S
-5QC``!!!8>!WW3"huE`^^`WUVs82is#N5X^s8W*!!!iQ(s1n[7^]4W>s82j%s6p!ns8V!W!WVop#QOgS
-!!%NH!!iQ'!!!!`rW!3'qu?]s+9)<Gs7cQo!"]*[#QO8n!!!9(^^'nt!!!!(s54.^^]4?7"97iqs*t(L
-!!E8j#QFc(!!!'"p]pg!!!!!"s7ciuz!WW'&qu?]s!!3,t#Q+Q%!!!'"rWi2u!!!!"s8E8uz!WW-(n,NFg
-!!3-!#Oh]n!!!'"rs/#n!!!!$s8N>^z"98B+huE`W!!E9$#N,R^!!!9(rs-=>!!!!0s8N>>z
-+92?G^]4?7!'gM`#J^<>!!%NKrs+&S!!!'"s8N=S!!!!$s8W*!z&-)\/z!'gM`rVuou!!*'!
-s8Duu!!!-$s8W&u!!!!0s8W,sz5QCc`qu?]s!<<*!s7cQo!!iQ(s8Vio!!!Q0s8W,g!!!!`s8W-!n,NFgs8W-!
-s53kW"98E$s8V!W!!iQ(s8W,7!!", at s8W-!J,fR6s8W-!rr<$!J,fQKs8Duu!WW3"s8Vus!!E9$s8W,o
-!!!9(s8W-!n,NG!s8W-!s1eU7&-)\0s8N'!!$D7 at s8Vus!!#7`s8W,g!!!"Ks8W-!^]4?7J,fQKrr<$!
-!<<*!s82is!!*'!s8VQg!!!'"s8W,7!!!!"s8W-!z!WW3"qu?]s!!3-"s6p!g!!!-$s8Tk7!!!!$s8W*!z
-"98E!z!!E9$p](9o!:U*js53kW!!)Kjs8Tk7!!!&h"98CO!!!!"n,r^jz!Up3krVuou!!D]m
-s82is!!!,j"989!!!!!(n,`Rez#Ohcop](9o!"\Q"s7cQo!!!Q!!WVop!!!!@n,WL`z+7K:1
-p](9o!'frQs7cQo!!#7Q!.XbD!!!"Kn,Rt9zs6p"Qqu?]s!WVWh5PtK]!!E8j!$D1?!!!9(n,O!u!!!!0s6p"!rr<$!+91g1#QK;S!.Y%<!!E8Z!!3-"n,NIg
-n,N^ns6p!gJ,TF4s8VQg!'gM`s8RlD!!!Q0s8Virn,NFjs8W,7!Up'h!.Y%J!!2Qh!!!9(huEfI~>
-Q
-q[1 0 0 1 0 0]concat
-76 95 true[1 0 0 1 -1755 -3944]@85 imagemask
-+92B at p`KP9s6q-1
-s8Vj9s8W,g+92B at p`KP9s6pR!s8VQns8W,7!WW3"!!*'!s*t+Ls8DuuJ,fNK!.Y%H!!%NKrr<%Ks82is
-J,fKJ!'gM]!!*'!qu?^]s82iss8Vus!'gM]!!3-"p](:Ys82j!s8VQg!'gM]!!E9$huEaAs82j%s8V!W
-!'gM]!"],0^]4@!s82j-s8RTL!'gM]!$D7 at J,fR6s82j]s8N'!!'gM]!.Y%J!!!!`s82kHs82is!'gM]!<<)s!!!!`
-s82ots7cQo!'gM]!WW2h!!!!`s83!!s53kW!'gM]#QOh^!!!!`s83E-s1eU7!'gM]&-)Z[!!!!`s83u=
-s*t(L!'gM_5QC``!!!!`s8G7_rVuou!'gM`J,fEH!!!!`s8W-!qu?]s!'gM`s8Vio!!!!`s8W-!n,NFg
-!'gM`s8V!W!!!!`s8DuthuE`W!'gM]s8Tk7!!!!`s87BHJ,fQL!'gM]5Q?66!!!!`s83u=z!'gM]&,lP/!!!!`
-s83-"z!'gM]"8i-!!!!!`s82oqz!'gM]!<)ru!!!!`s82kHz!'gM]!'bu6!!!!`s82j=
-^]4?7!'gM]!"[uf!!!!`s82j%n,NFg!'gM]!!Dur!!!!`s82j!qu?]s!'gM]!!3'!!!!!`s82isrr<$!
-!'gM]!!%M!!!!!`s82isJ%u$a!'gM]!!#7Q!!!!`s82is5PP3Y!'gM]!!#7_!!!!`s82isJ,b$!!'gM]!!3-"huEaA
-s82j]s8W*!!'gM]!'gM`rr<$`s82j]s8W*!!'gM]!'gM`rr<$`s82isz!'gM]z!!!!`s82is
-z!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!", at s82isz+92B=z!!", at s82isz+92B=z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 94 true[1 0 0 1 -1833 -3915]@85 imagemask
-!$C\1z!!%NJ
-z!!!'"s*t(L!!!!$s8Tk7z#QOh^z!"],0n,NFg!!", at s7cQo!!!!@s8Vusz5QC9O
-z!'gMAIK0?J!!#7`i'%,@!!!!`s56*Az5QBX`z!'gMA%tFW[!!", at i"(><!!!!@s54-t
-z+917(^]4?7!"]+F"5j.Z!!!9(J-4^0!!!!"rW!&Yz!!!!"n,NFgz!Up'hz!!2ipz!!!#o
-zzp](9oz!;lfsz!!%BHz!!!"HzzIK0?Jz!<)ruz!!*$!
-z!!!'"z!!!!"rr<$!z"93lOz!!E7Oz!!!-$J,fQL!!!!(s1eU7z#QMR>
-z!"]+fz!!!Q0huE`W!!!!0s53kWz+91g1z!$D71z!!#7`n,NFg!!!!`s7cQoz5QCKY
-z!.Y%Hz!!%NKqu?]s!!!$!s82iszs8W&uz!<<)uz!!3-"rVuou!!!'"s8N'!
-!!!!$s8UsVz"98DYJ,fQL!!E9$O+731!!!9(s,V[1!!!!(s8Rkiz&-)Y7^]4?7!"],0#J^<>
-!!", at rr_0Z!!!!@s8E,Yz+92<Bn,NFg!'gM]!Up'h!!#7`quQ9e!!!"Ks82omzJ,f9Dp](9o!.Y%D!;HNo
-!!*'!n,W at d!!!$!s6p#9!!!!"s8VQgIK0?J!WW2X!.FnJ!!3-"huGq@!!!-$s1eV!!!!!$s8Tk7*rl9@
-#QOh>!$;1@!!iQ(J,g[A!!!Q0s*t([J,fQ[s8RTL&&8/F+92?@!"ZjF!$D7@!!!8>!!#7`rVup'huEaA
-s8Duu#N,R^5QC]_!!D]j!.Y%H!!!,j!!%NKqu?^!n,NIgs82is"8Diss8Vus!!iE%!WW3!!!!9'!!iQ(rr<$@rr>:`s8Virs8V"As8W,o"98DZ5QCc`p]LQri'78As7c]rs53~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -1904 -3944]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -1988 -3944]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2051 -3942]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2121 -3944]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2238 -3942]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-92 93 true[1 0 0 1 -2036 -3722]@85 imagemask
-5QCc`s*t(L#QOhn
-5QCc`s*t(L#QOhn5QCc`s*t(L&-)\!!<<*!huE`W+92?@!$D7 at z5QCKY!"],-zJ,f!<!!iQ%
-zJ,eF,!!iQ!zs8Tk7!!iQ!!!!!"s8RTL!!E8j!!!!$s8N'!!!E8j!!!!$s8Duu!!E8j!!!!(
-s82is!!E8j!!!!0s7cQo!!E8j!!!!@s7cQo!!E8j!!!!@s6p!g!!E8j!!!!`s53kW!!E8j!!!"Ks1eU7!!E8j!!!$!
-s*t(L!!E8j!!!'"s*t(L!!E8j!!!'"rr<$!!!E8j!!!-$rVuou!!E8j!!!9(qu?]s!!E8j!!!Q0p](9o
-!!E8j!!!Q0n,NFg!!E8j!!", at n,NFg!!E8j!!#7`huE`W!!E8j!!%NK^]4?7!!E8j!!*'!J,fQL!!E8j
-!!*'!z!!E8j!!3-"z!!E8j!!E9#z!!E8j!!iQ%z!!E8j!!iQ!z!!E8j!"],!z!!E8j
-!$D71z!!E8j!'gMAz!!E8j!'gM!z!!E8j!.Y$!z!!E8j!<<'!z!!E8j!WW-!
-z!!E8j"98?#z!!E8j"989!z!!E8j#QOQ!z!!E9$s8VQgz!!E9$s8V!Wz
-!!E9$s8W&uz!!E9$s8W,Wz!!E9$s8W,oz!!E8j"98E$z!!E8j!!iQ(^]4?7!!E8j!!*'!huE`W
-!!E8j!!", at p](9o!!E8j!!!9(qu?]s!!E8j!!!-$rVuou!!E8j!!!$!rr<$!!!E8j!!!"Ks*t(L!!E8j
-!!!!`s*t(L!!E8j!!!!`s1eU7!!E8j!!!!@s1eU7!!E8j!!!!@s53kW!!E8j!!!!0s53kW!!E8j!!!!0
-s53kW!!E8j!!!!0s53kW!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(
-s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g
-!!E8j!!!!(s6p!g!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!@s1eU7!!E8j
-!!!!@s1eU7!!E8j!!!!`s1eU7!!E8j!!!!`s*t(L!!E8j!!!"Krr<$!!!E8j!!!$!rr<$!!!E8j!!!'"rVuou!!iPn!!!9(qu?]s!!iQ!!!", at n,NFg!!iQ!!!*'!huE`W!"],/!$D7 at J,fQL
-!'gM`s8W-!z"98E$s8W,oz5QCc`s8W,7z5QCc`s8W&uz5QCc`s8RTLz~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -2130 -3722]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-62 107 true[1 0 0 1 -2754 -3720]@85 imagemask
-!!!$!huE`W!!!Q0
-rVuou!!#7`s*t(L!!*'!s53kW!!E9$s7cQo!!iQ(s82is!"],0s8N'!!'gMQ+9-ik!.Y$a"96.:!<<'!
-!<:sW!WW-!!.XJ<!WW&t!'g5Y"98,r!$D+=#QO8n!"]&/#QO8n!"]&/&-(Pf!!iN(+90+V!!iOS+90+V
-!!E7O+90+V!!E8:5Q?66!!E8Z5Q?66!!3,XJ,b$!!!3,XJ,]KK!!3,hJ,]KK!!3,hJ,]KK!!*&os8N'!!!*&os8N'!
-!!*&os8Duu!!*&os8Duu!!*&os8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu
-!!*&ss8Duu!!*&ss8Duu!!*&sJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,t5Q:]`!!3,p5Q:]`
-!!E8r+9)<@!!E8r+9)<@!!E8r+9-ik!!iQ!&-%.[!!iPn#QK;S!"],!#QMR>!"],!"96.:!$D7!!WV'X!$D7!!WV'X
-!'gM!!<;Ng!'gM!!.XbD!.Y$!!'gA]!<<(L!$D1?!WW0"!!iN("98?#!!E7O"98?#!!3,X#QO]%!!%ND
-&-)D)!!", at +91g1!!!9(s8V!W!!!$!s8Tk7!!!!`s8RTL!!!!(s8N'!!!!!(s8Duu!!!!0s82is!!!!@
-s7cQo!!!!`s53kW!!!"Ks1eU7!!!$!rr<$!!!!'"rVuou!!!-$p](9o!!!9(huE`W!!!Q0^]4?7!!", at z!!%NH
-z!!*&oz!!3,Xz!!E8:z!!iN(z!"]&/z!"\u-z!$Ct9z!'frQ
-z!'fBAz!.Vcaz!.TM!!!Dur!<3$!!"]&/!<3$!!$D1?!<)ru!'gJ`!<)ru!.Y"K!<)ru
-!<<'!!<)ru!WW0"!<)ru"98B$!<3$!#QOf(!<3$!&-)V/!.TM!5QC]_!.VcaJ,fEH!'fBBs8Vio!$D+Ds8VQg!"],0s8Tk7!!iQ(s8RTL!!E9$s8Duu!!*'!s6p!g!!#7`s*t(L!!!'"n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-82 74 true[1 0 0 1 -2743 -3480]@85 imagemask
-!!!$!huE`W&&8/F
-!"],/!!!!`n,NFgJ,fP!!!%ND!!!'"s8V!W!<;rs!!E9$s7cQps82is&-(QPqu?j!rVup?s*tX[!!E9#
-!!#7_!!iOS#QOf(!.XnH"96.As8N'!s7cQps54Ffrr<*"p](<on.5R!J-#]>!!%N<&,:X)"979Z!.Xbc
-n/m/cs53kW5PuV]%tFob^]4?Vr'.t-J.M[q!!",?5C`uh&-'EF!"]&nJ-Wk3s*t(L&-%+Z#J_G]J,fQSs*k"N^`WT,
-!!!9(rW!&95Q?66!!E9#!!C#$rr<$!"989!"2I/$!!!!$s82j!^jl at a!!!'"qu?]sJ,]KK!!3,p!!!"K
-rr<$!!<;fo!!%NKzs7cQo!.XtJ!!!$!p](9oJ,TEJ!!%ND!!!$!rVuou!.XbD!!*&uzJ,B9H
-!<<#u!!!!`qu?]ss8Duu!!#7]!!!$!rVuou!'gG_!!*&uz+8u6?!<<#u!!!!@rVuous8Duu!!",@!!!$!rVuou
-!$D4@!!*&uz+9)<@!<<#u!!!!@s*t(Ls8Duu!!", at J,fTLrVuou!'gL6!!*&uz5QAM!!<<#u
-!!!!`s1eU7s8Duu!!#7`huEb,rVuou!'gMA!!%NKzJ,eF,!.Y"K!!!"Ks6p!gJ,]KK!!%KJn,NH<
-rr<$!!.Ot;!!#7`zrr;`n!'gJ`!!!#uJ+s!D5Q?66!!)qHp](:Ys*t(L!W7HF!!", at J,fQMr'1)Z!$D5k!!!&p
-5PtK]&-'EF!!E!\rVup/s1eU7"8Eu;!!!9(^]4?>n/qZ1!!iP^!!!8n+9)<@"979Z!"[uurr<$$s6p!g
-+5d\0J,fWMn,NGQ^^pHq!!*&o!!#7!#QK;S!.XnH!<7QSs1eU75Q1W`rr<0$^]4?Vrr<<'!!E8:!!!Q0
-i#hjs"979Z!!iQ(s7cQps53kW!WW3"n,NLhn,NFgJ,fQ,!!3,h!!!!@s8RTL!<;Ng!!!9(rVuous7cQo!!%N,z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-96 93 true[1 0 0 1 -2019 -3487]@85 imagemask
-5QCc`s8V!Wz
-5QCc`s8W+Lz5QCc`s8W,sz!.Y%Ks8W-!J,fQL!$D7 at s8W-!n,NFg!!iQ(!!E9$qu?]s!!E9!
-!!!Q0s*t(L!!E9!!!!$!s53kW!!E8r!!!!@s6p!g!!3,p!!!!(s82is!!3,p!!!!"s8Duu!!3,pz
-J,b$!!!3,pz5QAM!!!3,pz+917!!!3,pz#QO8n!!3,pz"98,r!!3,pz!WW&t!!3,pz
-!<;rs!!3,pz!.XtJ!!3,pz!.Y"K!!3,pz!'gJ`!!3,pz!$D5k!!3,pz!$D6V
-!!3,pz!"]+F!!3,pz!!iP^!!3,pz!!iP^!!3,pz!!iPn!!3,pz!!E8j!!3,p
-z!!E8r!!3,pz!!3,p!!3,pz!!3,p!!3,pz!!3,t!!3,pz!!3,t!!3,pz!!*&s!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!%NJ!!3,pz
-!!%NJ!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!*'!!!3,pz!!*&u!!3,pz!!*&u!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!3-!!!3,pz!!3,t!!3,pz!!3,t!!3,pz
-!!E9!!!3,pz!!E9!!!3,pz!!E8r!!3,pz!!iQ!!!3,pz!!iQ!!!3,pz!"],!!!3,pz
-!"],!!!3,pz!$D7!!!3,pz!$D7!!!3,pz!'gM!!!3,pz!.Y$!!!3,pz!<<(L
-!!3,pz!<<'!!!3,pz!WW-!!!3,pz"989!!!3,pz#QO]%!!3,pz&-)D)!!3,p
-z+91g1!!3,pzJ,eF,!!3,pzs8Tk7!!3,p!!!!"s8N'!!!3,p!!!!(s8Duu!!3,p!!!!@s7cQo!!E8r!!!"Ks6p!g!!E9!!!!-$s1eU7!!iQ%!!", at rr<$!!"],0!!iQ(qu?]s
-!$D7 at s8W-!n,NFg!WW3"s8W-!J,fQL5QCc`s8W,oz5QCc`s8W+Lz5QCc`s8Tk7z~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2121 -3486]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-58 65 true[1 0 0 1 -2184 -3486]@85 imagemask
-!!!'"p](9o!!!Q0
-rr<$!!!#7`s1eU7!!*'!s53kW!!3-"s7cQo!!E9$s82is!"],0s8Duu!$D7 at s8N'!!$D7 at s8RTL!'gM`
-s8Tk7!.Y%H!'fBA!<<)W!!hun!<<(L!!D]j!WW0"!!)co!WW-!!!%BH"989!!!#+]"98,r!!"&?#QO8n
-!!!N0#QN]^!!!6(#QN]^!!!7S&-'EF!!!+O&-%.[!!!&8&-%.[!!!$"&,uV0z+9)<@z+9)<@z+8u6?
-z+8u6?z+8u6?z+8u6?z+8u6?z+8c*=z+8c*=z+8c*=z+8c*=
-z+8c*=z+8c*=z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z#Q+Q%
-z#Q=]'z#Q=]'z"9&9#!!2Qh"9&9#!!i9!!WN-"!"\u-!WN-"!"]&/!<3$!!$D1?!<7QL!$D4@!.TM!!'gJ`!'e7!!'gJ`!$C,!!'gG_!$C,!!'gG_!"\Q!!.XtJ!!i9!!.XnH!!E-!
-!.XbD!!)uu!<;Ng!!%M!!WV'X!!#7Q"96.:!!!Q0s8RTL!!!-$s8Duu!!!$!s7cQo!!!!@s1eU7~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -1413 -5707]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-40 120 true[1 0 0 1 -1483 -5686]@85 imagemask
-$ig8-!"Ju/!!!O[
-!!!!0huE`W"7Q9j!!2ut!!!#uz56(Z`!$?^k!!!Pf!!!!(n,NFg"8Dir!!2ut!!!#szrVuou
-!.OtK!!%M!!!!!`^]4?75MuMA!$C,!!!",1!!!!0p](9o&,6,)!"\u-!!!9'!!!!(rVuou#QFc(!!iN(
-!!!9(J,fQOs*t(L"96.:!!E8:!!!-$huE`Zs53kW"979Z!!3,h!!!'"n,NFhs6p!g!WVop!!3,p!!!'"p](9ps82is
-!WW&t!!3,t!!!$!qu?]ss8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&u!!!$!rr<$!s8N'!!<<'!
-!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!
-!!!$!rr<$!s8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&s!!!$!qu?]ts82is!WW&t!!3,p!!!'"p](9ps7cQo
-!WVWh!!3,h!!!'"n,NFhs53kW"979Z!!E8:!!!-$^]4?:s1eU7"93lO!!iOS!!!9(!!!!(rr<$!#Q=]'
-!"\u-!!!Q-!!!!0p](9o+7K71!$C\1!!",!!!!!`^]4?75JR7!!.TM!!!*$!!!!#u!!!!"qu?]s"8Dir
-!!D]j!!!8^!!!!0^]4?75C`_6!.FnJ!!)os!!!,r!!!!(huE`W&&8/F!"T&0!!!E-!!!!)z~>
-Q
-q[1 0 0 1 0 0]concat
-73 97 true[1 0 0 1 -2960 -5116]@85 imagemask
-!&+BQ&,lP/!!!!]
-!!%NKhuE`W!'UAbs8Vus!!!!`!!iQ(rr<$!!'e7 at s8W,7!!!!`i'6]qs53kW!'g7.^^'o7!!!!`rVqBM
-s82is!'gM`!!3-!!!!!`s8Duus8N'!!'gM_!!*'!J,fR6s8DuuJ,d:a!'gM]!!%NK^]4@!s82is5QBXA
-!'gM]!!#7`n,NGQs82is5QC3Q!'gM]!!#7`p](:Ys82is+92*9!'gM]!!", at qu?^]s82is+926=!'gM]!!", at qu?^]
-s82is+92<?!'gM]!!", at rVup_s82is&-)V/!'gM]!!!Q0rr<$`s82is&-)Y0!'gM]!!!Q0rr<$`s82is
-&-)Y0!'gM]!!!Q0rr<$`s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[
-!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6
-s82is&-)Z[!'gM]!!!Q0s*t)6s82is+92?@!'gM]!!", at rr<$`s82is+92?@!'gM]!!", at rr<$`s82is
-+92<?!'gM]!!", at rVup_s82is5QC]_!'gM]!!#7`rVup_s82is5QCW]!'gM]!!%NKqu?^]s82isJ,f9D
-!'gM_!!%NKp](:Ys8Duus8VQg!'gM`!!3-"n,NGQs8RTMs8V!W!'gM`^]XW:^]4@!s8V!fs8Tk7!'gM`pj`>DJ,fR6
-s8Duts8N'!!'gM]s8W,u!!!!`s87BHs82is!'gM]5QCcQ!!!!`s83E-s53kW!'gM]#QOgS!!!!`s82ot
-qu?]s!'gM]!"ZjF!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!#7`s82isz5QCc]z!!#7`s82isz5QCc]z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-40 120 true[1 0 0 1 -3037 -5095]@85 imagemask
-$ig8-!"Ju/!!!O[
-!!!!0huE`W"7Q9j!!2ut!!!#uz56(Z`!$?^k!!!Pf!!!!(n,NFg"8Dir!!2ut!!!#szrVuou
-!.OtK!!%M!!!!!`^]4?75MuMA!$C,!!!",1!!!!0p](9o&,6,)!"\u-!!!9'!!!!(rVuou#QFc(!!iN(
-!!!9(J,fQOs*t(L"96.:!!E8:!!!-$huE`Zs53kW"979Z!!3,h!!!'"n,NFhs6p!g!WVop!!3,p!!!'"p](9ps82is
-!WW&t!!3,t!!!$!qu?]ss8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&u!!!$!rr<$!s8N'!!<<'!
-!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!
-!!!$!rr<$!s8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&s!!!$!qu?]ts82is!WW&t!!3,p!!!'"p](9ps7cQo
-!WVWh!!3,h!!!'"n,NFhs53kW"979Z!!E8:!!!-$^]4?:s1eU7"93lO!!iOS!!!9(!!!!(rr<$!#Q=]'
-!"\u-!!!Q-!!!!0p](9o+7K71!$C\1!!",!!!!!`^]4?75JR7!!.TM!!!*$!!!!#u!!!!"qu?]s"8Dir
-!!D]j!!!8^!!!!0^]4?75C`_6!.FnJ!!)os!!!,r!!!!(huE`W&&8/F!"T&0!!!E-!!!!)z~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -1580 -4260]@85 imagemask
-!!!!0rVuou!!!$!
-s53kW!!!9(s82is!!", at s8N'!!!%NKs8RTL!!*'!s8V!W!!3-"s8VQg!!iQ(s8Vio!"],0s8W&u!$D7@
-rW3$!!$D7 at n,P\'!'gM`^]5I,!.Y%KJ,fhi!<<*!!!!,Z!<<)u!!!&h!WW2t!!!#W!WW2p!!!!a"98Dr
-z"98Djz#QOh^z#QOh^z#QOh>z&-)[Fz&-)[Fz&-)Z[z&-)Z[z&-)Z[
-z+92?@z+92?@z+92?@z+92?@z+92?@z+92?@z+92<?z+92<?
-z+92<?z+92<?z+92<?z+92<?z+92<?z&-)V/z&-)V/z&-)V/
-z&-)V/z#QOc'!!D]j#QOc'!"]&/#QOc'!$D4@"98?#!'gL6"98B$!'gL6"98B$!.Y$a!WW0"!.Y$a!WW0"!.Y$a!<<'!!.Y$a!.Y$!
-!.Y$a!.Y$!!.Y$a!'gL6!.Y$a!$D6V!.Y$a!"]+F!.Y$!!"]+f!.Y$!!!iP^!.Y"K!!3,h!.Y"K!!*&o
-!<<#u!!%NJ!WW&t!!", at L]@,L!!!Q0s8V!W!!!-$s8Tk7!!!$!s8N'!!!!!0s7cQozIfKHK~>
-Q
-q[1 0 0 1 0 0]concat
-40 120 true[1 0 0 1 -1643 -4239]@85 imagemask
-$ig8-!"Ju/!!!O[
-!!!!0huE`W"7Q9j!!2ut!!!#uz56(Z`!$?^k!!!Pf!!!!(n,NFg"8Dir!!2ut!!!#szrVuou
-!.OtK!!%M!!!!!`^]4?75MuMA!$C,!!!",1!!!!0p](9o&,6,)!"\u-!!!9'!!!!(rVuou#QFc(!!iN(
-!!!9(J,fQOs*t(L"96.:!!E8:!!!-$huE`Zs53kW"979Z!!3,h!!!'"n,NFhs6p!g!WVop!!3,p!!!'"p](9ps82is
-!WW&t!!3,t!!!$!qu?]ss8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&u!!!$!rr<$!s8N'!!<<'!
-!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!
-!!!$!rr<$!s8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&s!!!$!qu?]ts82is!WW&t!!3,p!!!'"p](9ps7cQo
-!WVWh!!3,h!!!'"n,NFhs53kW"979Z!!E8:!!!-$^]4?:s1eU7"93lO!!iOS!!!9(!!!!(rr<$!#Q=]'
-!"\u-!!!Q-!!!!0p](9o+7K71!$C\1!!",!!!!!`^]4?75JR7!!.TM!!!*$!!!!#u!!!!"qu?]s"8Dir
-!!D]j!!!8^!!!!0^]4?75C`_6!.FnJ!!)os!!!,r!!!!(huE`W&&8/F!"T&0!!!E-!!!!)z~>
-Q
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 5083 a(Figure)49 b(5:)77 b(\(a\))50 b(A)f(basic)f(F)-8
-b(rame)50 b(is)e(used)g(to)h(represen)m(t)g(a)g(Cartesian)g(co)s
-(ordinate)g(system,)k(here)c(2-)0 5196 y(dimensional.)78
-b(\(b\))43 b(A)g(SkyF)-8 b(rame)44 b(represen)m(ts)e(a)i(\(spherical\))
-f(celestial)j(co)s(ordinate)e(system.)78 b(\(c\))44 b(The)0
-5309 y(axis)31 b(order)f(of)g(an)m(y)h(F)-8 b(rame)31
-b(ma)m(y)g(b)s(e)f(p)s(erm)m(uted)f(to)i(matc)m(h)h(the)e(co)s
-(ordinate)h(space)g(it)g(describ)s(es.)p eop end
-%%Page: 9 19
-TeXDict begin 9 18 bop 0 52 a Fy(2.5)92 b(Net)m(w)m(orks)32
-b(of)e(Co)s(ordinate)h(Systems)2229 b FF(9)1291 1620
-y @beginspecial 215 @llx 202 @lly 384 @urx 394 @ury 1436
- at rwi @setspecial
-%%BeginDocument: sun211_figures/cmpframe.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 215 202 384 394
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 17:24:02
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-3657.35 3700.55 m
-3657.35 3800.15 3576.95 3880.55 3477.35 3880.55 c
-2396.15 3880.55 l
-2296.55 3880.55 2216.15 3800.15 2216.15 3700.55 c
-2216.15 2210.15 l
-2216.15 2110.55 2296.55 2030.15 2396.15 2030.15 c
-3477.35 2030.15 l
-3576.95 2030.15 3657.35 2110.55 3657.35 2210.15 c
-f*
-1 g
-3592.55 3755.75 m
-3592.55 3854.15 3513.35 3934.55 3413.75 3934.55 c
-2340.95 3934.55 l
-2241.35 3934.55 2162.15 3854.15 2162.15 3755.75 c
-2162.15 2273.75 l
-2162.15 2174.15 2241.35 2094.95 2340.95 2094.95 c
-3413.75 2094.95 l
-3513.35 2094.95 3592.55 2174.15 3592.55 2273.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-3592.55 3755.75 m
-3592.55 3854.15 3513.35 3934.55 3413.75 3934.55 c
-2340.95 3934.55 l
-2241.35 3934.55 2162.15 3854.15 2162.15 3755.75 c
-2162.15 2273.75 l
-2162.15 2174.15 2241.35 2094.95 2340.95 2094.95 c
-3413.75 2094.95 l
-3513.35 2094.95 3592.55 2174.15 3592.55 2273.75 c
-h
-S
-0.564706 g
-3297.35 3532.55 m
-3297.35 3591.35 3250.55 3638.15 3191.75 3638.15 c
-2381.75 3638.15 l
-2322.95 3638.15 2276.15 3591.35 2276.15 3532.55 c
-2276.15 2902.55 l
-2276.15 2843.75 2322.95 2796.95 2381.75 2796.95 c
-3191.75 2796.95 l
-3250.55 2796.95 3297.35 2843.75 3297.35 2902.55 c
-f*
-1 g
-3232.55 3588.95 m
-3232.55 3646.55 3186.95 3692.15 3129.35 3692.15 c
-2325.35 3692.15 l
-2267.75 3692.15 2222.15 3646.55 2222.15 3588.95 c
-2222.15 2964.95 l
-2222.15 2907.35 2267.75 2861.75 2325.35 2861.75 c
-3129.35 2861.75 l
-3186.95 2861.75 3232.55 2907.35 3232.55 2964.95 c
-f*
-0 g
-3232.55 3588.95 m
-3232.55 3646.55 3186.95 3692.15 3129.35 3692.15 c
-2325.35 3692.15 l
-2267.75 3692.15 2222.15 3646.55 2222.15 3588.95 c
-2222.15 2964.95 l
-2222.15 2907.35 2267.75 2861.75 2325.35 2861.75 c
-3129.35 2861.75 l
-3186.95 2861.75 3232.55 2907.35 3232.55 2964.95 c
-h
-S
-3050.15 2847.35 15.5999 849.6 re
-Y
-3057.35 3699.35 m
-3057.35 2854.55 l
-S
-3057.35 3088.55 188.4 248.4 re
-Y
-3057.35 3336.95 m
-3237.35 3096.95 l
-S
-0 0 6120 7920 re
-Y
-3095.75 3338.15 m
-3095.75 3360.95 3077.75 3378.95 3056.15 3378.95 c
-3034.55 3378.95 3016.55 3360.95 3016.55 3338.15 c
-3016.55 3316.55 3034.55 3298.55 3056.15 3298.55 c
-3077.75 3298.55 3095.75 3316.55 3095.75 3338.15 c
-f*
-3275.75 3098.15 m
-3275.75 3120.95 3257.75 3138.95 3236.15 3138.95 c
-3214.55 3138.95 3196.55 3120.95 3196.55 3098.15 c
-3196.55 3076.55 3214.55 3058.55 3236.15 3058.55 c
-3257.75 3058.55 3275.75 3076.55 3275.75 3098.15 c
-f*
-3057.35 3088.55 188.4 248.4 re
-Y
-3057.35 3096.95 m
-3237.35 3336.95 l
-S
-0 0 6120 7920 re
-Y
-3095.75 3098.15 m
-3095.75 3120.95 3077.75 3138.95 3056.15 3138.95 c
-3034.55 3138.95 3016.55 3120.95 3016.55 3098.15 c
-3016.55 3076.55 3034.55 3058.55 3056.15 3058.55 c
-3077.75 3058.55 3095.75 3076.55 3095.75 3098.15 c
-f*
-3275.75 3338.15 m
-3275.75 3360.95 3257.75 3378.95 3236.15 3378.95 c
-3214.55 3378.95 3196.55 3360.95 3196.55 3338.15 c
-3196.55 3316.55 3214.55 3298.55 3236.15 3298.55 c
-3257.75 3298.55 3275.75 3316.55 3275.75 3338.15 c
-f*
-q[1 0 0 1 0 0]concat
-72 100 true[1 0 0 1 -2333 -3514]@85 imagemask
-#CldSIt.M!!!e#S
-5QC``!!!8>!WW3"huE`^^`WUVs82is#N5X^s8W*!!!iQ(s1n[7^]4W>s82j%s6p!ns8V!W!WVop#QOgS
-!!%NH!!iQ'!!!!`rW!3'qu?]s+9)<Gs7cQo!"]*[#QO8n!!!9(^^'nt!!!!(s54.^^]4?7"97iqs*t(L
-!!E8j#QFc(!!!'"p]pg!!!!!"s7ciuz!WW'&qu?]s!!3,t#Q+Q%!!!'"rWi2u!!!!"s8E8uz!WW-(n,NFg
-!!3-!#Oh]n!!!'"rs/#n!!!!$s8N>^z"98B+huE`W!!E9$#N,R^!!!9(rs-=>!!!!0s8N>>z
-+92?G^]4?7!'gM`#J^<>!!%NKrs+&S!!!'"s8N=S!!!!$s8W*!z&-)\/z!'gM`rVuou!!*'!
-s8Duu!!!-$s8W&u!!!!0s8W,sz5QCc`qu?]s!<<*!s7cQo!!iQ(s8Vio!!!Q0s8W,g!!!!`s8W-!n,NFgs8W-!
-s53kW"98E$s8V!W!!iQ(s8W,7!!", at s8W-!J,fR6s8W-!rr<$!J,fQKs8Duu!WW3"s8Vus!!E9$s8W,o
-!!!9(s8W-!n,NG!s8W-!s1eU7&-)\0s8N'!!$D7 at s8Vus!!#7`s8W,g!!!"Ks8W-!^]4?7J,fQKrr<$!
-!<<*!s82is!!*'!s8VQg!!!'"s8W,7!!!!"s8W-!z!WW3"qu?]s!!3-"s6p!g!!!-$s8Tk7!!!!$s8W*!z
-"98E!z!!E9$p](9o!:U*js53kW!!)Kjs8Tk7!!!&h"98CO!!!!"n,r^jz!Up3krVuou!!D]m
-s82is!!!,j"989!!!!!(n,`Rez#Ohcop](9o!"\Q"s7cQo!!!Q!!WVop!!!!@n,WL`z+7K:1
-p](9o!'frQs7cQo!!#7Q!.XbD!!!"Kn,Rt9zs6p"Qqu?]s!WVWh5PtK]!!E8j!$D1?!!!9(n,O!u!!!!0s6p"!rr<$!+91g1#QK;S!.Y%<!!E8Z!!3-"n,NIg
-n,N^ns6p!gJ,TF4s8VQg!'gM`s8RlD!!!Q0s8Virn,NFjs8W,7!Up'h!.Y%J!!2Qh!!!9(huEfI~>
-Q
-q[1 0 0 1 0 0]concat
-76 95 true[1 0 0 1 -2409 -3517]@85 imagemask
-+92B at p`KP9s6q-1
-s8Vj9s8W,g+92B at p`KP9s6pR!s8VQns8W,7!WW3"!!*'!s*t+Ls8DuuJ,fNK!.Y%H!!%NKrr<%Ks82is
-J,fKJ!'gM]!!*'!qu?^]s82iss8Vus!'gM]!!3-"p](:Ys82j!s8VQg!'gM]!!E9$huEaAs82j%s8V!W
-!'gM]!"],0^]4@!s82j-s8RTL!'gM]!$D7 at J,fR6s82j]s8N'!!'gM]!.Y%J!!!!`s82kHs82is!'gM]!<<)s!!!!`
-s82ots7cQo!'gM]!WW2h!!!!`s83!!s53kW!'gM]#QOh^!!!!`s83E-s1eU7!'gM]&-)Z[!!!!`s83u=
-s*t(L!'gM_5QC``!!!!`s8G7_rVuou!'gM`J,fEH!!!!`s8W-!qu?]s!'gM`s8Vio!!!!`s8W-!n,NFg
-!'gM`s8V!W!!!!`s8DuthuE`W!'gM]s8Tk7!!!!`s87BHJ,fQL!'gM]5Q?66!!!!`s83u=z!'gM]&,lP/!!!!`
-s83-"z!'gM]"8i-!!!!!`s82oqz!'gM]!<)ru!!!!`s82kHz!'gM]!'bu6!!!!`s82j=
-^]4?7!'gM]!"[uf!!!!`s82j%n,NFg!'gM]!!Dur!!!!`s82j!qu?]s!'gM]!!3'!!!!!`s82isrr<$!
-!'gM]!!%M!!!!!`s82isJ%u$a!'gM]!!#7Q!!!!`s82is5PP3Y!'gM]!!#7_!!!!`s82isJ,b$!!'gM]!!3-"huEaA
-s82j]s8W*!!'gM]!'gM`rr<$`s82j]s8W*!!'gM]!'gM`rr<$`s82isz!'gM]z!!!!`s82is
-z!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!", at s82isz+92B=z!!", at s82isz+92B=z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 94 true[1 0 0 1 -2489 -3488]@85 imagemask
-!$C\1z!!%NJ
-z!!!'"s*t(L!!!!$s8Tk7z#QOh^z!"],0n,NFg!!", at s7cQo!!!!@s8Vusz5QC9O
-z!'gMAIK0?J!!#7`i'%,@!!!!`s56*Az5QBX`z!'gMA%tFW[!!", at i"(><!!!!@s54-t
-z+917(^]4?7!"]+F"5j.Z!!!9(J-4^0!!!!"rW!&Yz!!!!"n,NFgz!Up'hz!!2ipz!!!#o
-zzp](9oz!;lfsz!!%BHz!!!"HzzIK0?Jz!<)ruz!!*$!
-z!!!'"z!!!!"rr<$!z"93lOz!!E7Oz!!!-$J,fQL!!!!(s1eU7z#QMR>
-z!"]+fz!!!Q0huE`W!!!!0s53kWz+91g1z!$D71z!!#7`n,NFg!!!!`s7cQoz5QCKY
-z!.Y%Hz!!%NKqu?]s!!!$!s82iszs8W&uz!<<)uz!!3-"rVuou!!!'"s8N'!
-!!!!$s8UsVz"98DYJ,fQL!!E9$O+731!!!9(s,V[1!!!!(s8Rkiz&-)Y7^]4?7!"],0#J^<>
-!!", at rr_0Z!!!!@s8E,Yz+92<Bn,NFg!'gM]!Up'h!!#7`quQ9e!!!"Ks82omzJ,f9Dp](9o!.Y%D!;HNo
-!!*'!n,W at d!!!$!s6p#9!!!!"s8VQgIK0?J!WW2X!.FnJ!!3-"huGq@!!!-$s1eV!!!!!$s8Tk7*rl9@
-#QOh>!$;1@!!iQ(J,g[A!!!Q0s*t([J,fQ[s8RTL&&8/F+92?@!"ZjF!$D7@!!!8>!!#7`rVup'huEaA
-s8Duu#N,R^5QC]_!!D]j!.Y%H!!!,j!!%NKqu?^!n,NIgs82is"8Diss8Vus!!iE%!WW3!!!!9'!!iQ(rr<$@rr>:`s8Virs8V"As8W,o"98DZ5QCc`p]LQri'78As7c]rs53~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -2558 -3517]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -2643 -3517]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2706 -3515]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2777 -3517]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2892 -3515]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-92 93 true[1 0 0 1 -2691 -3295]@85 imagemask
-5QCc`s*t(L#QOhn
-5QCc`s*t(L#QOhn5QCc`s*t(L&-)\!!<<*!huE`W+92?@!$D7 at z5QCKY!"],-zJ,f!<!!iQ%
-zJ,eF,!!iQ!zs8Tk7!!iQ!!!!!"s8RTL!!E8j!!!!$s8N'!!!E8j!!!!$s8Duu!!E8j!!!!(
-s82is!!E8j!!!!0s7cQo!!E8j!!!!@s7cQo!!E8j!!!!@s6p!g!!E8j!!!!`s53kW!!E8j!!!"Ks1eU7!!E8j!!!$!
-s*t(L!!E8j!!!'"s*t(L!!E8j!!!'"rr<$!!!E8j!!!-$rVuou!!E8j!!!9(qu?]s!!E8j!!!Q0p](9o
-!!E8j!!!Q0n,NFg!!E8j!!", at n,NFg!!E8j!!#7`huE`W!!E8j!!%NK^]4?7!!E8j!!*'!J,fQL!!E8j
-!!*'!z!!E8j!!3-"z!!E8j!!E9#z!!E8j!!iQ%z!!E8j!!iQ!z!!E8j!"],!z!!E8j
-!$D71z!!E8j!'gMAz!!E8j!'gM!z!!E8j!.Y$!z!!E8j!<<'!z!!E8j!WW-!
-z!!E8j"98?#z!!E8j"989!z!!E8j#QOQ!z!!E9$s8VQgz!!E9$s8V!Wz
-!!E9$s8W&uz!!E9$s8W,Wz!!E9$s8W,oz!!E8j"98E$z!!E8j!!iQ(^]4?7!!E8j!!*'!huE`W
-!!E8j!!", at p](9o!!E8j!!!9(qu?]s!!E8j!!!-$rVuou!!E8j!!!$!rr<$!!!E8j!!!"Ks*t(L!!E8j
-!!!!`s*t(L!!E8j!!!!`s1eU7!!E8j!!!!@s1eU7!!E8j!!!!@s53kW!!E8j!!!!0s53kW!!E8j!!!!0
-s53kW!!E8j!!!!0s53kW!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(
-s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g
-!!E8j!!!!(s6p!g!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!@s1eU7!!E8j
-!!!!@s1eU7!!E8j!!!!`s1eU7!!E8j!!!!`s*t(L!!E8j!!!"Krr<$!!!E8j!!!$!rr<$!!!E8j!!!'"rVuou!!iPn!!!9(qu?]s!!iQ!!!", at n,NFg!!iQ!!!*'!huE`W!"],/!$D7 at J,fQL
-!'gM`s8W-!z"98E$s8W,oz5QCc`s8W,7z5QCc`s8W&uz5QCc`s8RTLz~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -2785 -3295]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-62 107 true[1 0 0 1 -3768 -3293]@85 imagemask
-!!!$!huE`W!!!Q0
-rVuou!!#7`s*t(L!!*'!s53kW!!E9$s7cQo!!iQ(s82is!"],0s8N'!!'gMQ+9-ik!.Y$a"96.:!<<'!
-!<:sW!WW-!!.XJ<!WW&t!'g5Y"98,r!$D+=#QO8n!"]&/#QO8n!"]&/&-(Pf!!iN(+90+V!!iOS+90+V
-!!E7O+90+V!!E8:5Q?66!!E8Z5Q?66!!3,XJ,b$!!!3,XJ,]KK!!3,hJ,]KK!!3,hJ,]KK!!*&os8N'!!!*&os8N'!
-!!*&os8Duu!!*&os8Duu!!*&os8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu
-!!*&ss8Duu!!*&ss8Duu!!*&sJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,t5Q:]`!!3,p5Q:]`
-!!E8r+9)<@!!E8r+9)<@!!E8r+9-ik!!iQ!&-%.[!!iPn#QK;S!"],!#QMR>!"],!"96.:!$D7!!WV'X!$D7!!WV'X
-!'gM!!<;Ng!'gM!!.XbD!.Y$!!'gA]!<<(L!$D1?!WW0"!!iN("98?#!!E7O"98?#!!3,X#QO]%!!%ND
-&-)D)!!", at +91g1!!!9(s8V!W!!!$!s8Tk7!!!!`s8RTL!!!!(s8N'!!!!!(s8Duu!!!!0s82is!!!!@
-s7cQo!!!!`s53kW!!!"Ks1eU7!!!$!rr<$!!!!'"rVuou!!!-$p](9o!!!9(huE`W!!!Q0^]4?7!!", at z!!%NH
-z!!*&oz!!3,Xz!!E8:z!!iN(z!"]&/z!"\u-z!$Ct9z!'frQ
-z!'fBAz!.Vcaz!.TM!!!Dur!<3$!!"]&/!<3$!!$D1?!<)ru!'gJ`!<)ru!.Y"K!<)ru
-!<<'!!<)ru!WW0"!<)ru"98B$!<3$!#QOf(!<3$!&-)V/!.TM!5QC]_!.VcaJ,fEH!'fBBs8Vio!$D+Ds8VQg!"],0s8Tk7!!iQ(s8RTL!!E9$s8Duu!!*'!s6p!g!!#7`s*t(L!!!'"n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-79 106 true[1 0 0 1 -3756 -2453]@85 imagemask
-z!!!!(n,NFg
-z!$D1?"979Z!!!!`rr<0$huE`W!<<(L!WVWh!!!'"s1e[8n,NFg!WW2X!<;fo!!!-$s6p$gp](9o
-#QOhn!<;rs!!!9(s7cSDqu?]s&-)\)!.XtJ!!!Q0s7cRYrVuou+92B=!'gJ`!!",@"8i- at rr<$!5PtQ[
-!$D5k!!#7Y!.4bWs*t(L5O\Z%!"]+F!!#7A!'UAfs1eU7J%u%*!!iP^!!%Ma!$2+Bs53kWIt.M?!!E8j!!%M!!"Ju2
-s6p!grr<$/!!3,h!!*$!!"Ju0s7cQorVup.!!*&o!!)uuzs82itrVuou!!%NH!!2utzJ,TEK
-qu?]s!!#7_!!2utz5Q:]aqu?]s!!",@!!2utz+9-inp](9o!!!Q0J-5QHz&-'EIp](9o
-!!!Q0^]X?3z#QN]an,NFg!!!9(i!8`Oz"97iqn,NFg!!!-$n-AF_z!WVWon,NFg!!!'"p]o^Wz
-!<;g!huE`W!!!$!r"%]cz!.XnWhuE`W!!!"KrX[oez!'gGn^]4?7!!!!`rsumFz!'gJo
-^]4?7!!!!@s.@(,z!$D65^]4?7!!!!0s5/>,z!"]+eJ,fQL!!!!(s8RTLz!!iQ(J,fQL
-!!!!$s8RTLz!!E9$z!!!!"s8N'!z!!3-"zzs8N'!z!!*'!zzs8Duuz
-!!%NJzzJ,TEJz!!#7_zz5Q1W_z!!",=zz+8c*=z!!!Q-
-zz&,ZD-z!!!9%zz#P\9!z!!!,rzz"8Dirz!!!,rz
-z"7Q9jz!!!8nzz#Oh]nz!!!8nzz#N,R^z!!!Pfzz&)[Efz
-!!!Pfzz+2 at jV!!!"D!!"+Vz!-eJD+2 at jV!!!!Y!!#66z!&srY5C`_6!!!!]!!#66
-z!'C5]IfKHK!!!!_!!%KKz!'UA_rr<$!!!!!@!!3'!z!$?^nrVuou!!!!@^^'i=z
-!$CtXqu?]s!!!!0s8Vusz!"],0qu?]s!!!!0s8Vioz!!iQ(p](9o!!!!(s8VQgz!!E9$huE`W!!!!"s8Tk7z!!3-"J,fQLzJ,]KKz!!#7]zz&+BQ!z~>
-Q
-q[1 0 0 1 0 0]concat
-96 93 true[1 0 0 1 -2675 -3060]@85 imagemask
-5QCc`s8V!Wz
-5QCc`s8W+Lz5QCc`s8W,sz!.Y%Ks8W-!J,fQL!$D7 at s8W-!n,NFg!!iQ(!!E9$qu?]s!!E9!
-!!!Q0s*t(L!!E9!!!!$!s53kW!!E8r!!!!@s6p!g!!3,p!!!!(s82is!!3,p!!!!"s8Duu!!3,pz
-J,b$!!!3,pz5QAM!!!3,pz+917!!!3,pz#QO8n!!3,pz"98,r!!3,pz!WW&t!!3,pz
-!<;rs!!3,pz!.XtJ!!3,pz!.Y"K!!3,pz!'gJ`!!3,pz!$D5k!!3,pz!$D6V
-!!3,pz!"]+F!!3,pz!!iP^!!3,pz!!iP^!!3,pz!!iPn!!3,pz!!E8j!!3,p
-z!!E8r!!3,pz!!3,p!!3,pz!!3,p!!3,pz!!3,t!!3,pz!!3,t!!3,pz!!*&s!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!%NJ!!3,pz
-!!%NJ!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!*'!!!3,pz!!*&u!!3,pz!!*&u!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!3-!!!3,pz!!3,t!!3,pz!!3,t!!3,pz
-!!E9!!!3,pz!!E9!!!3,pz!!E8r!!3,pz!!iQ!!!3,pz!!iQ!!!3,pz!"],!!!3,pz
-!"],!!!3,pz!$D7!!!3,pz!$D7!!!3,pz!'gM!!!3,pz!.Y$!!!3,pz!<<(L
-!!3,pz!<<'!!!3,pz!WW-!!!3,pz"989!!!3,pz#QO]%!!3,pz&-)D)!!3,p
-z+91g1!!3,pzJ,eF,!!3,pzs8Tk7!!3,p!!!!"s8N'!!!3,p!!!!(s8Duu!!3,p!!!!@s7cQo!!E8r!!!"Ks6p!g!!E9!!!!-$s1eU7!!iQ%!!", at rr<$!!"],0!!iQ(qu?]s
-!$D7 at s8W-!n,NFg!WW3"s8W-!J,fQL5QCc`s8W,oz5QCc`s8W+Lz5QCc`s8Tk7z~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2777 -3059]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-58 65 true[1 0 0 1 -2839 -3059]@85 imagemask
-!!!'"p](9o!!!Q0
-rr<$!!!#7`s1eU7!!*'!s53kW!!3-"s7cQo!!E9$s82is!"],0s8Duu!$D7 at s8N'!!$D7 at s8RTL!'gM`
-s8Tk7!.Y%H!'fBA!<<)W!!hun!<<(L!!D]j!WW0"!!)co!WW-!!!%BH"989!!!#+]"98,r!!"&?#QO8n
-!!!N0#QN]^!!!6(#QN]^!!!7S&-'EF!!!+O&-%.[!!!&8&-%.[!!!$"&,uV0z+9)<@z+9)<@z+8u6?
-z+8u6?z+8u6?z+8u6?z+8u6?z+8c*=z+8c*=z+8c*=z+8c*=
-z+8c*=z+8c*=z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z#Q+Q%
-z#Q=]'z#Q=]'z"9&9#!!2Qh"9&9#!!i9!!WN-"!"\u-!WN-"!"]&/!<3$!!$D1?!<7QL!$D4@!.TM!!'gJ`!'e7!!'gJ`!$C,!!'gG_!$C,!!'gG_!"\Q!!.XtJ!!i9!!.XnH!!E-!
-!.XbD!!)uu!<;Ng!!%M!!WV'X!!#7Q"96.:!!!Q0s8RTL!!!-$s8Duu!!!$!s7cQo!!!!@s1eU7~>
-Q
-0.564706 g
-3297.35 2610.95 m
-3297.35 2648.15 3267.35 2678.15 3230.15 2678.15 c
-2343.35 2678.15 l
-2306.15 2678.15 2276.15 2648.15 2276.15 2610.95 c
-2276.15 2204.15 l
-2276.15 2166.95 2306.15 2136.95 2343.35 2136.95 c
-3230.15 2136.95 l
-3267.35 2136.95 3297.35 2166.95 3297.35 2204.15 c
-f*
-1 g
-3232.55 2666.15 m
-3232.55 2703.35 3203.75 2732.15 3166.55 2732.15 c
-2288.15 2732.15 l
-2252.15 2732.15 2222.15 2703.35 2222.15 2666.15 c
-2222.15 2267.75 l
-2222.15 2230.55 2252.15 2201.75 2288.15 2201.75 c
-3166.55 2201.75 l
-3202.55 2201.75 3232.55 2230.55 3232.55 2267.75 c
-f*
-0 g
-3232.55 2666.15 m
-3232.55 2703.35 3203.75 2732.15 3166.55 2732.15 c
-2288.15 2732.15 l
-2252.15 2732.15 2222.15 2703.35 2222.15 2666.15 c
-2222.15 2267.75 l
-2222.15 2230.55 2252.15 2201.75 2288.15 2201.75 c
-3166.55 2201.75 l
-3202.55 2201.75 3232.55 2230.55 3232.55 2267.75 c
-h
-S
-3050.15 2187.35 15.5999 549.6 re
-Y
-3057.35 2739.35 m
-3057.35 2194.55 l
-S
-3057.35 2368.55 189.6 15.5999 re
-Y
-3054.95 2376.95 m
-3239.75 2376.95 l
-S
-0 0 6120 7920 re
-Y
-3095.75 2378.15 m
-3095.75 2400.95 3077.75 2418.95 3056.15 2418.95 c
-3034.55 2418.95 3016.55 2400.95 3016.55 2378.15 c
-3016.55 2356.55 3034.55 2338.55 3056.15 2338.55 c
-3077.75 2338.55 3095.75 2356.55 3095.75 2378.15 c
-f*
-3275.75 2378.15 m
-3275.75 2400.95 3257.75 2418.95 3236.15 2418.95 c
-3214.55 2418.95 3196.55 2400.95 3196.55 2378.15 c
-3196.55 2356.55 3214.55 2338.55 3236.15 2338.55 c
-3257.75 2338.55 3275.75 2356.55 3275.75 2378.15 c
-f*
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -2581 -2562]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -2666 -2562]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2729 -2560]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2798 -2562]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2915 -2560]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-130 95 true[1 0 0 1 -2289 -2338]@85 imagemask
-z!&+BQ!!!#7
-zz!!"tYzhuE`Wz!!!"Dz!T3qXzzGQ7^D!!2!Xzz!.4bH
-!!!&hzz!!)os!!!!$n,NFgz!!!#sz"7Q9jzzrVuou!!Durzz
-!WE'!!!!9!zz!!3*"!!!!(p](9oz!!!'"z&,ZD-z!!!!$rr<$!!"\u-zz"93lO
-!!!Q-zz!!iOS!!!!@rVuouz!!!9(J,fQL+8u6?z!!!!(s1eU7!$D1?zz
-&-'EF!!#7`zz!"]+F!!!!`rr<$!z!!!Q0huE`WJ,]KKz!!!!@s53kW!.Y$!z
-z+91g1!!%NKJ,fQLz!$D71!!!$!s*t(Lz!!#7`n,NFgs8Tk7z!!!!`s7cQo!WW28zz
-J,f9D!!3-"^]4?7z!.Y%D!!!'"s53kWz!!%NKqu?^!s8V!Wz!!!$!s82is"98DZz
-zs8Vus!!E8qn,NFgz!<<&t!!!9(p[A._z!!3-!rVup's7>^[z!!!'"r-n\H&-(\b
-z!!!!"s87?H!"]+ip](9oz"989`!!!Q0iV3BQz!!E8r5C`_Us2"U5z!!!-$pcj9/+901Tz
-!!!!(s7d[d!$D5kqu?]sz#QO98^]6V!JGoNKz!"],!+2 at k@s+#Ouz!!!Q0i"*U'J,]Lt
-z!!!!0s54FG!.Y"KIfKHKz+917(huJ9+!'^G`z!$D6V#Oh`nrW#._z!!",@^^'?/
-s8E!_J,fQL!!!!`s*t4@!<;rs++O=kz5Q?69p]:Em!$?^kz!'gL6"8Dosqu at hSz!!%NK!!2iss7cR)
-^]4?7!!!"Krr<)t"98,r&)[EfzJ,]KKqucug!!hE^z!<<#u!;m*%n,N^Oz!!*&u!!*!'
-s6p!nn,NFg!!!'"qu?_G#QN]^"7Q9j!!!!"s82isIh2S;!!D]jz!WW&t!.POZ^]4K3z!!E8r
-!!#5*s1eU8p](9o!!!-$p](:YTDu\,!VcWp!!!!$s6p!g+.rR`!!)osz#QO8n!$AuUJ,fTIz!!iPn!!",@
-rr<$!rVuou!!!9(huE`fs8N'!!.FnJ!!!!0s53kW&-)Y0!!%HJz&-(Pf!!iQ'!!!"Kz!$D6V
-!!!9(rVuou56(Z`!!",@^]4?>s8Duu!'^G`!!!!@s*t(L"989!!!#66z5Q?66!!E9!!!!!@J,fQL
-!'gL6!!!-$p](9o++O=k!!#7`!!!!$s7cQo!"ZjF!!!"Krr<$!"98,r!!!PFzJ,TEJ!!E8j!!!!0huE`W!.XtJ
-!!!9(n,NFg#N,R^!!*&u!!!!(s53kW!!hE^!!!$!qu?]s&-(Pf!!!8nzs82is!"]+f!!!!$n,NFg
-!WW&t!!!Q0^]4?7"7Q9j!!3,p!!!!@s1eU7!!2ip!!!-$p](9o+90+V!!!&p!!!!$s6p!g!'gL6!!!!"
-qu?]s"97ij!!#7`J,fQL!W2ot!!iPn!!!!`rr<$!!!)os!!!9(huE`WJ,]KK!!!#u!!!!0s53kW!.XtJzrVuou
-&-(Pf!!*&uz!<)ru!$D6V!!!$!rVuou!!*$!!!",@^]4?8s8Duu!!!$!!!!!`s1eU7!WW&tz
-s*t(LJ,d:a!!E9!z!<7QL!.Y$a!!!9(rVuou!!*&7!!*'!^]4?>s8Duu!!!'"huElZs53kW+92?@
-!!!!$s7cR)s8Vus!.Y%KhuE`W5QC``J,fQKi",kfs8RTL!WW3"^jlCas54Ffs8W+L!!3-"s1j-as8V!fs8W-!J,fWMs8Tk~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -2423 -2339]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-67 65 true[1 0 0 1 -2484 -2338]@85 imagemask
-z(]XO9z
-!&srYz!!#+]z!!!"HzzIK0?Jz!.FnJz!!*$!z!!!$!z!!!!"
-rr<$!z!WRZMz!!3+Mz!!!-$^]4?7!!!!$s1eU7z#QMR>z!!iP^z!!!Q0
-huE`W!!!!0s6p!gz&-),!z!$D71z!!",?p](9o!!!!`r:g6lz5Q#m/z!'g7+z!!%ND
-HiO-H!!!"Kpc\ZXzs6r2Pz!<;OQz!!3,X*rl9@!!!'"i#_q!!!!!"s54E<z"96.I
-J,fQL!!E8:&&8/F!!!9(J-Wji!!!!(s*t?iz#QK;VhuE`W!"])0"5j.Z!!!Q0!!D]j!!!!@rVuug
-z+8u6 at n,NFg!'gG_!VcWp!!#7]!!)co!!!!`qu?`pzJ+s!DHiO-H!.XbD!.4bH!!*&o!!%HJ!!!$!n,NGPzs6p!g4obQ_!WV'X!'^G`!!3,X!!")@!!!-$huEa!J,fQOs1eU7%tFW[
-#QMR>!"XS[!!iOS!!!PF!!!Q0J,fQS^]4?Fs*t(L#N,R^+9)<@!!hE^!$D4@!!!,j!!#7`!!!!$n,NGQ
-rr<$!"8DirJ,]KK!!Dur!<<'!!!!9%!!3-"J,fQ[rW!3's53kW5Q?6Us8Vus!WW2X+92B=!!3-"hu~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2553 -2339]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-36 95 true[1 0 0 1 -2616 -2340]@85 imagemask
-+92B at n/q]1s6p'h
-s8N'!5QCKY!"]+f!!!9(huE`^s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!iP>!!!9(^]4?Fs1eUVs8Tk7+92AV!$D7@^]4E8s1eU7+90+V!!3,8!!!!`^]4?7#J^<~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2655 -2339]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -2718 -2340]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-66 95 true[1 0 0 1 -2787 -2309]@85 imagemask
-!!!-$huE`W!!!"K
-s8N'!!!!!"s8W,Wz&-)\0qu?]s!$D7 at s8N'!!!%NKs8W,7!!!$!s8W-!n,NFhs8W-!s7cQo"98DZ
-!'gG_!!iQ'!!!'"!!!9(n,NFg5C`_Es1eU7!!hE^&-%.[!!!&h!"])0zp](j(z!-eJSrVuou
-!!#+]&,ZD-!!!!?!!iE%z%KHb3z!"T&7qu?]s!!!6("8i-!!!!!(J-#QJz#ClgRz!!e#SIK0?J
-!!!7S!.OtK!!!!(J,g[Az%tFWjJ,fQL!$?^k#J^<>!!%M!!!D-Z!!!Q0!!!&h"98E$rr<$!F8u:?
-s8N'!!.Y%Ks8W&u!!3-"s8W,s!!!9(s8W-!qu?^-s8W-!s7cQo+92B at s8V!W!$D7 at s8W,7!!#7`s8W-!
-!!!!`s8W-!n,NFg5QCc_z!$D4 at z!!",1z!!!!@huE`Wz&)[Efz!!hE^z!!!,Zz
-!!!!"n,NFgz!:Tsgz!!%6Dz!!!!]zz*WQ0?z!"XS[z!!!8mrVuou
-!!!!$s8V!Wz#QOi!z!"],0rVuou!!#7`!WN-"!!!"KquD5^!!!!"s6p"1huE`W"979Z&+BQ!
-!!E8:!"\i)!!!9(^]4W;!!!!0s*t(Squ?]s&,uV0#Q=]'!$D4@!!E3#!!",?!!!-$!!!!`rVup#rr<$!5Q1W_"9/?$
-!'gA]!!E7O!!#7]!!!-$J,fR6qu?^!s*t(L5PtK]"93lO!'gA]!!E7O!!#7]!!!-$J,fR6p](:!s*t(L
-5PP3Y#QK;S!'g5Y!!iOS!!#7Y!!!9(J,fQkp](:)s*t(L+8>g9&,uV0!$Ct9!"])0!!!Q)!!",@!!!!0
-qu?^=rr<$!#Q+Q%+8u6?!!iE%!'gG_!!!-#!!#7]!!!!$rVuqJs8Tk7!WN-"s8W,7!!*%L!WW3"^]4 at a^]XW:s1eU75N!(Ps8Tk7!"],0s1eU7!!!-$s82iszs8VQgz!'gJ`!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -2857 -2339]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-68 95 true[1 0 0 1 -2897 -2340]@85 imagemask
-J,fQJ"98E$n:1K<
-rWE3#s6pR!s7cSDs8Tk8s8RTL#QOc'!<<'!!!E9!!!%NJ!!!'"p](;DrVup!s7cQo5Q1W_!WVWh!'gA]
-!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]
-!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]
-!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]s
-s6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!
-n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!
-n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!3,h!!#7_!!!'"huEaArr<$"s53kW5QAM!"979Z!'gMA!!E8Z
-!!#7^n,N^n^]4@!rVQX+s1eU75Q(N]5QAM!!'gC2s8W+L!!#7]5QCc`J,fR6r#bt=rr<$!5Pu&ls8Duu
-!'gA`s8Vus!!#7]!WW2p!!!!`quD6HhuE`W5PtKls*t(L!'gA]z!!#7]z!!!!`qu?]sz5PtK]z
-!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz
-5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`
-qu?]sz5PtK]z!'gA]z!!%NHz!!!$!qu?]s!!!"Ks82iszJ,fEHz!'gM]z!!!9(qu?]szs82isz!"\u-z!!!&tzz49,?]!!!!~>
-Q
-3346.55 2079.35 15.5999 1860 re
-Y
-3353.75 3941.75 m
-3353.75 2087.75 l
-S
-3237.35 3328.55 129.6 15.5999 re
-Y
-3234.95 3336.95 m
-3359.75 3336.95 l
-S
-0 0 6120 7920 re
-Y
-3275.75 3338.15 m
-3275.75 3360.95 3257.75 3378.95 3236.15 3378.95 c
-3214.55 3378.95 3196.55 3360.95 3196.55 3338.15 c
-3196.55 3316.55 3214.55 3298.55 3236.15 3298.55 c
-3257.75 3298.55 3275.75 3316.55 3275.75 3338.15 c
-f*
-3395.75 3338.15 m
-3395.75 3360.95 3377.75 3378.95 3356.15 3378.95 c
-3334.55 3378.95 3316.55 3360.95 3316.55 3338.15 c
-3316.55 3316.55 3334.55 3298.55 3356.15 3298.55 c
-3377.75 3298.55 3395.75 3316.55 3395.75 3338.15 c
-f*
-3237.35 3088.55 129.6 15.5999 re
-Y
-3234.95 3096.95 m
-3359.75 3096.95 l
-S
-0 0 6120 7920 re
-Y
-3275.75 3098.15 m
-3275.75 3120.95 3257.75 3138.95 3236.15 3138.95 c
-3214.55 3138.95 3196.55 3120.95 3196.55 3098.15 c
-3196.55 3076.55 3214.55 3058.55 3236.15 3058.55 c
-3257.75 3058.55 3275.75 3076.55 3275.75 3098.15 c
-f*
-3395.75 3098.15 m
-3395.75 3120.95 3377.75 3138.95 3356.15 3138.95 c
-3334.55 3138.95 3316.55 3120.95 3316.55 3098.15 c
-3316.55 3076.55 3334.55 3058.55 3356.15 3058.55 c
-3377.75 3058.55 3395.75 3076.55 3395.75 3098.15 c
-f*
-3237.35 2368.55 129.6 15.5999 re
-Y
-3234.95 2376.95 m
-3359.75 2376.95 l
-S
-0 0 6120 7920 re
-Y
-3275.75 2378.15 m
-3275.75 2400.95 3257.75 2418.95 3236.15 2418.95 c
-3214.55 2418.95 3196.55 2400.95 3196.55 2378.15 c
-3196.55 2356.55 3214.55 2338.55 3236.15 2338.55 c
-3257.75 2338.55 3275.75 2356.55 3275.75 2378.15 c
-f*
-3395.75 2378.15 m
-3395.75 2400.95 3377.75 2418.95 3356.15 2418.95 c
-3334.55 2418.95 3316.55 2400.95 3316.55 2378.15 c
-3316.55 2356.55 3334.55 2338.55 3356.15 2338.55 c
-3377.75 2338.55 3395.75 2356.55 3395.75 2378.15 c
-f*
-3357.35 3328.55 249.6 15.5999 re
-Y
-3354.95 3336.95 m
-3599.75 3336.95 l
-S
-0 0 6120 7920 re
-Y
-3395.75 3338.15 m
-3395.75 3360.95 3377.75 3378.95 3356.15 3378.95 c
-3334.55 3378.95 3316.55 3360.95 3316.55 3338.15 c
-3316.55 3316.55 3334.55 3298.55 3356.15 3298.55 c
-3377.75 3298.55 3395.75 3316.55 3395.75 3338.15 c
-f*
-3635.75 3338.15 m
-3635.75 3360.95 3617.75 3378.95 3596.15 3378.95 c
-3574.55 3378.95 3556.55 3360.95 3556.55 3338.15 c
-3556.55 3316.55 3574.55 3298.55 3596.15 3298.55 c
-3617.75 3298.55 3635.75 3316.55 3635.75 3338.15 c
-f*
-3357.35 2368.55 248.4 188.4 re
-Y
-3357.35 2376.95 m
-3597.35 2556.95 l
-S
-0 0 6120 7920 re
-Y
-3395.75 2378.15 m
-3395.75 2400.95 3377.75 2418.95 3356.15 2418.95 c
-3334.55 2418.95 3316.55 2400.95 3316.55 2378.15 c
-3316.55 2356.55 3334.55 2338.55 3356.15 2338.55 c
-3377.75 2338.55 3395.75 2356.55 3395.75 2378.15 c
-f*
-3635.75 2558.15 m
-3635.75 2580.95 3617.75 2598.95 3596.15 2598.95 c
-3574.55 2598.95 3556.55 2580.95 3556.55 2558.15 c
-3556.55 2536.55 3574.55 2518.55 3596.15 2518.55 c
-3617.75 2518.55 3635.75 2536.55 3635.75 2558.15 c
-f*
-3357.35 2908.55 248.4 188.4 re
-Y
-3357.35 3096.95 m
-3597.35 2916.95 l
-S
-0 0 6120 7920 re
-Y
-3395.75 3098.15 m
-3395.75 3120.95 3377.75 3138.95 3356.15 3138.95 c
-3334.55 3138.95 3316.55 3120.95 3316.55 3098.15 c
-3316.55 3076.55 3334.55 3058.55 3356.15 3058.55 c
-3377.75 3058.55 3395.75 3076.55 3395.75 3098.15 c
-f*
-3635.75 2918.15 m
-3635.75 2940.95 3617.75 2958.95 3596.15 2958.95 c
-3574.55 2958.95 3556.55 2940.95 3556.55 2918.15 c
-3556.55 2896.55 3574.55 2878.55 3596.15 2878.55 c
-3617.75 2878.55 3635.75 2896.55 3635.75 2918.15 c
-f*
-q[1 0 0 1 0 0]concat
-82 74 true[1 0 0 1 -3758 -2873]@85 imagemask
-!!!$!huE`W&&8/F
-!"],/!!!!`n,NFgJ,fP!!!%ND!!!'"s8V!W!<;rs!!E9$s7cQps82is&-(QPqu?j!rVup?s*tX[!!E9#
-!!#7_!!iOS#QOf(!.XnH"96.As8N'!s7cQps54Ffrr<*"p](<on.5R!J-#]>!!%N<&,:X)"979Z!.Xbc
-n/m/cs53kW5PuV]%tFob^]4?Vr'.t-J.M[q!!",?5C`uh&-'EF!"]&nJ-Wk3s*t(L&-%+Z#J_G]J,fQSs*k"N^`WT,
-!!!9(rW!&95Q?66!!E9#!!C#$rr<$!"989!"2I/$!!!!$s82j!^jl at a!!!'"qu?]sJ,]KK!!3,p!!!"K
-rr<$!!<;fo!!%NKzs7cQo!.XtJ!!!$!p](9oJ,TEJ!!%ND!!!$!rVuou!.XbD!!*&uzJ,B9H
-!<<#u!!!!`qu?]ss8Duu!!#7]!!!$!rVuou!'gG_!!*&uz+8u6?!<<#u!!!!@rVuous8Duu!!",@!!!$!rVuou
-!$D4@!!*&uz+9)<@!<<#u!!!!@s*t(Ls8Duu!!", at J,fTLrVuou!'gL6!!*&uz5QAM!!<<#u
-!!!!`s1eU7s8Duu!!#7`huEb,rVuou!'gMA!!%NKzJ,eF,!.Y"K!!!"Ks6p!gJ,]KK!!%KJn,NH<
-rr<$!!.Ot;!!#7`zrr;`n!'gJ`!!!#uJ+s!D5Q?66!!)qHp](:Ys*t(L!W7HF!!", at J,fQMr'1)Z!$D5k!!!&p
-5PtK]&-'EF!!E!\rVup/s1eU7"8Eu;!!!9(^]4?>n/qZ1!!iP^!!!8n+9)<@"979Z!"[uurr<$$s6p!g
-+5d\0J,fWMn,NGQ^^pHq!!*&o!!#7!#QK;S!.XnH!<7QSs1eU75Q1W`rr<0$^]4?Vrr<<'!!E8:!!!Q0
-i#hjs"979Z!!iQ(s7cQps53kW!WW3"n,NLhn,NFgJ,fQ,!!3,h!!!!@s8RTL!<;Ng!!!9(rVuous7cQo!!%N,z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-96 100 true[1 0 0 1 -2325 -3767]@85 imagemask
-z!!!Q)z
-z!!iQ(n,NFgz!.Y%Krr<$!z"98E$s1eU7z+92B at s7cQozJ,fQKs82is!!!!"
-s8W-!s8N'!!!!!(s8W+Ms8Tk7!!!!0s8VQg#QN]^!!!!`s8RTL!<;Ng!!!"Ks8Duu!$D+=!!!$!s7cQo
-!!iK'!!!'"s6p!g!!E6$!!!9(s53kW!!*%L!!!Q0s*t(L!!%Ma!!", at rr<$!!!",!!!", at rr<$!!!!Q!!!#7`rVuou
-!!!9!!!%NKqu?]s!!!-!!!*'!qu?]s!!!'!!!3-"p](9o!!!$!!!3-"p](9o!!!"J!!E9$n,NFg!!!!]
-!!E9$n,NFg!!!!9!!iQ(huE`Wz!!iQ(huE`Wz!"],0huE`Wz!"],0^]4?7z!$D7@
-^]4?7z!$D7@^]4?7z!'gM`^]4?7z!'gM`J,fQLz!'gM`J,fQLz!.Y%KJ,fQLz!.Y%K
-J,fQLz!.Y%KJ,fQLz!<<*!J,fQLz!<<*!J,fQLz!<<*!J,fQLz!<<*!z
-z!<<*!zz!<<*!zz!WW3"zz!WW3"zz!WW3"zz
-!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"zz
-!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"
-zz!<<*!zz!<<*!zz!<<*!zz!<<*!zz!<<*!z
-z!<<*!J,fQLz!.Y%KJ,fQLz!.Y%KJ,fQLz!.Y%KJ,fQLz!'gM`J,fQLz!'gM`J,fQL
-!!!!]!'gM`J,fQL!!!"H!$D7@^]4?7!!!"H!$D7@^]4?7!!!#s!$D7@^]4?7!!!#s!"],0^]4?7!!!&t
-!"],0^]4?7!!!&t!!iQ(huE`W!!!-!!!iQ(huE`W!!!-!!!E9$huE`W!!!9%!!3-"n,NFg!!!Q-!!3-"
-n,NFg!!!Q-!!*'!n,NFg!!",=!!%NKp](9o!!#7]!!%NKp](9o!!#7]!!#7`qu?]s!!%NH!!", at qu?]s!!*&s!!!Q0
-rVuou!!3,t!!!9(rVuou!!E9!!!!-$rr<$!!!iQ%!!!'"s*t(L!"],-!!!$!s1eU7!$D7=!!!"Ks53kW
-!.Y%H!!!!`s6p!g!<<)s!!!!0s7cQo"98E!!!!!(s8Duu&-)\-!!!!"s8RTL5Q?B6zJ,f!=s82oq
-z+92B at s6p$dz#QOi(s*t+Iz!WW3"qu?_Ez!$D7 at huEb)z!!*&s!!!!]~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2426 -3770]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-73 96 true[1 0 0 1 -2543 -3741]@85 imagemask
-+92B at s*t(L!!",@
-s8W+Lz+92B at s*t(L!!", at s8Vioz"98E$^]4?7!!!$!s8RTLz!.Y%Kz!!!!`s8Duu
-z!'gM_z!!!!`s8Duuz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`
-s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82j=
-^]4?7!'gM]!WW&t!!!!`s83-%s*t(L!'gM]&-)[f!!!!`s83u=s6p!g!'gM]J,fQD!!!!`s8;oss8Duu
-!'gM^s8W-!!!!!`s8W!=s8N'!!'gM`n-B!nJ,fR6s8Tk8s8Tk7!'gM`J,oWLhuEaAs8N'!s8V!W!'gM`!!%NKn,NGQ
-s8DuuJ,f!<!'gM]!!#7`p](:Ys82is5QCKY!'gM]!!#7`qu?^]s82is+926=!'gM]!!", at rVup_s82is
-+92<?!'gM]!!", at rVup_s82is+92<?!'gM]!!", at rr<$`s82is&-)Y0!'gM]!!!Q0rr<$`s82is&-)Y0
-!'gM]!!!Q0rr<$`s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6
-s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is
-&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0rr<$`s82is&-)Y0!'gM]!!!Q0rr<$`s82is+92?@
-!'gM]!!", at rr<$`s82is+92<?!'gM]!!", at rVup_s82is+92<?!'gM]!!", at qu?^]s8Duu5QCW]!'gM_!!#7`p](:Ys8N'!5QCKY!'gM`J,k*!n,NGQs8Tk7
-J,f!<!'gM`huNfWhuEaAs8DEfs8V!W!'gM^qud!!^]4 at as8;m-s8RTL!<<)sJ,fQK!!!-$s87BHs8Duu
-+92B=5QCc]!!", at s83u=s7cQo+92B=&-)[f!!", at s83!!s*t(Lz!<<#uz!!!!0^]4?7~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -2619 -3770]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -2706 -3770]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2768 -3768]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2839 -3770]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2955 -3768]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 1816 a(Figure)39 b(6:)57 b(A)39 b(CmpF)-8
-b(rame)38 b(\(comp)s(ound)f(F)-8 b(rame\))40 b(formed)e(b)m(y)g(com)m
-(bining)h(t)m(w)m(o)h(simpler)e(F)-8 b(rames.)65 b(Note)0
-1929 y(ho)m(w)29 b(the)g(sp)s(ecial)g(relationship)g(whic)m(h)f(exists)
-h(b)s(et)m(w)m(een)h(the)f(RA)f(and)g(Dec)i(axes)f(is)g(preserv)m(ed)f
-(within)h(this)0 2042 y(data)35 b(structure.)53 b(As)34
-b(with)h(comp)s(ound)e(Mappings)h(\(Figure)h(4\),)i(CmpF)-8
-b(rames)34 b(ma)m(y)h(b)s(e)f(nested)h(in)f(order)0 2155
-y(to)d(build)e(more)i(complex)g(F)-8 b(rames.)0 2531
-y(There)35 b(are)g(sev)m(eral)i(more)e(sp)s(ecialised)h(forms)f(of)g(F)
--8 b(rame,)38 b(whic)m(h)d(pro)m(vide)g(the)h(additional)g
-(functionalit)m(y)0 2644 y(required)j(when)f(handling)h(co)s(ordinates)
-h(within)f(some)h(sp)s(eci\014c)f(ph)m(ysical)i(domain.)68
-b(This)38 b(ranges)i(from)0 2757 y(tasks)33 b(suc)m(h)g(as)g
-(formatting)h(axis)f(v)-5 b(alues,)34 b(to)g(complex)f(tasks)h(suc)m(h)
-e(as)h(determining)g(the)g(transformation)0 2870 y(b)s(et)m(w)m(een)43
-b(an)m(y)g(pair)f(of)h(related)h(co)s(ordinate)f(systems.)77
-b(F)-8 b(or)44 b(instance,)i(the)d(SkyF)-8 b(rame)43
-b(\(Figure)g(5b,c\),)0 2983 y(represen)m(ts)33 b(celestial)j(co)s
-(ordinate)e(systems,)h(the)e(Sp)s(ecF)-8 b(rame)34 b(represen)m(ts)f
-(sp)s(ectral)h(co)s(ordinate)g(systems,)0 3096 y(and)42
-b(the)i(TimeF)-8 b(rame)44 b(represen)m(ts)f(time)h(co)s(ordinate)f
-(systems.)79 b(All)44 b(these)f(pro)m(vide)h(a)f(wide)g(range)g(of)0
-3209 y(di\013eren)m(t)f(systems)f(for)g(describing)g(p)s(ositions)g
-(within)g(their)g(asso)s(ciated)i(ph)m(ysical)e(domain,)j(and)d(these)0
-3321 y(ma)m(y)31 b(b)s(e)f(selected)i(b)m(y)e(setting)h(appropriate)g
-(attributes.)0 3486 y(As)c(with)h(comp)s(ound)e(Mappings)h(\()p
-Fu(x)p FF(2.3\),)j(it)e(is)g(p)s(ossible)f(to)h(merge)g(t)m(w)m(o)h(F)
--8 b(rames)28 b(together)h(to)f(form)f(a)h(com-)0 3599
-y(p)s(ound)f(F)-8 b(rame,)30 b(or)f(CmpF)-8 b(rame,)30
-b(in)e(whic)m(h)h(b)s(oth)f(sets)i(of)f(axes)h(are)f(com)m(bined.)41
-b(One)28 b(could,)i(for)f(example,)0 3712 y(ha)m(v)m(e)j(celestial)i
-(co)s(ordinates)e(on)f(t)m(w)m(o)i(axes)f(and)e(an)h(unrelated)h(co)s
-(ordinate)g(\(w)m(a)m(v)m(elength,)i(p)s(erhaps\))c(on)h(a)0
-3825 y(third)c(\(Figure)h(6\).)41 b(Kno)m(wledge)28 b(of)g(the)g
-(relationships)g(b)s(et)m(w)m(een)g(the)g(axes)g(is)g(preserv)m(ed)f
-(in)m(ternally)i(b)m(y)e(the)0 3938 y(pro)s(cess)j(of)g(constructing)h
-(the)g(CmpF)-8 b(rame)30 b(whic)m(h)g(represen)m(ts)h(them.)0
-4102 y FD(F)-9 b(urther)31 b(reading:)39 b FF(F)-8 b(or)28
-b(a)g(more)f(complete)i(description)e(of)h(F)-8 b(rames)28
-b(see)g Fu(x)p FF(7,)h(for)e(SkyF)-8 b(rames)27 b(see)h
-Fu(x)p FF(8)g(and)0 4215 y(for)h(Sp)s(ecF)-8 b(rames)29
-b(see)h Fu(x)p FF(9.)41 b(Also)29 b(see)h(the)f(F)-8
-b(rame,)31 b(SkyF)-8 b(rame,)29 b(Sp)s(ecF)-8 b(rame,)30
-b(TimeF)-8 b(rame)30 b(and)f(CmpF)-8 b(rame)0 4328 y(en)m(tries)31
-b(in)f(App)s(endix)f(D.)0 4627 y Fw(2.5)112 b(Net)m(w)m(orks)37
-b(of)h(Co)s(ordinate)g(Systems)0 4851 y FF(Mappings)h(and)f(F)-8
-b(rames)40 b(ma)m(y)f(b)s(e)f(connected)i(together)h(to)e(form)g(net)m
-(w)m(orks)g(called)h(F)-8 b(rameSets,)43 b(whic)m(h)0
-4964 y(are)c(used)f(to)i(represen)m(t)f(sets)g(of)g(in)m(ter-related)i
-(co)s(ordinate)e(systems)g(\(Figure)h(7\).)133 b(A)39
-b(F)-8 b(rameSet)40 b(ma)m(y)0 5077 y(b)s(e)33 b(extended)h(b)m(y)f
-(adding)h(a)g(new)f(F)-8 b(rame)35 b(to)f(it,)i(together)f(with)e(an)h
-(asso)s(ciated)h(Mapping)f(whic)m(h)f(relates)0 5190
-y(the)h(new)e(co)s(ordinate)j(system)e(to)h(one)g(whic)m(h)f(is)g
-(already)h(presen)m(t.)50 b(This)33 b(pro)s(cess)f(ensures)h(that)h
-(there)f(is)0 5303 y(alw)m(a)m(ys)e(exactly)h(one)e(path,)f
-Fx(via)h FF(Mappings,)g(b)s(et)m(w)m(een)g(an)m(y)g(pair)g(of)f(F)-8
-b(rames.)42 b(A)29 b(function)h(is)f(pro)m(vided)h(for)0
-5416 y(iden)m(tifying)h(this)f(path)g(and)g(returning)g(the)g(complete)
-i(Mapping.)0 5580 y(One)42 b(of)h(the)f(F)-8 b(rames)44
-b(in)e(a)h(F)-8 b(rameSet)43 b(is)g(termed)f(its)h Fx(b)-5
-b(ase)43 b FF(F)-8 b(rame.)78 b(This)42 b(underlies)f(the)i(F)-8
-b(rameSet's)0 5693 y(purp)s(ose,)38 b(whic)m(h)g(is)f(to)i(calibrate)g
-(datasets)g(and)e(other)h(en)m(tities)i(b)m(y)d(attac)m(hing)j(co)s
-(ordinate)f(systems)f(to)p eop end
-%%Page: 10 20
-TeXDict begin 10 19 bop 0 52 a FF(10)2126 b Fy(2)92 b(O)m(VER)-10
-b(VIEW)30 b(OF)h(AST)e(CONCEPTS)612 4135 y @beginspecial
-107 @llx 108 @lly 516 @urx 547 @ury 3067 @rwi @setspecial
-%%BeginDocument: sun211_figures/frameset.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 107 108 516 547
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 17:14:16
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5153.75 4907.75 m
-5153.75 5184.95 4928.15 5410.55 4650.95 5410.55 c
-1635.35 5410.55 l
-1358.15 5410.55 1132.55 5184.95 1132.55 4907.75 c
-1132.55 1592.15 l
-1132.55 1314.95 1358.15 1089.35 1635.35 1089.35 c
-4650.95 1089.35 l
-4928.15 1089.35 5153.75 1314.95 5153.75 1592.15 c
-f*
-1 g
-5088.95 4964.15 m
-5088.95 5240.15 4864.55 5464.55 4588.55 5464.55 c
-1578.95 5464.55 l
-1302.95 5464.55 1078.55 5240.15 1078.55 4964.15 c
-1078.55 1654.55 l
-1078.55 1378.55 1302.95 1154.15 1578.95 1154.15 c
-4588.55 1154.15 l
-4864.55 1154.15 5088.95 1378.55 5088.95 1654.55 c
-f*
-8 w
-1 J
-1 j
-0 g
-5088.95 4964.15 m
-5088.95 5240.15 4864.55 5464.55 4588.55 5464.55 c
-1578.95 5464.55 l
-1302.95 5464.55 1078.55 5240.15 1078.55 4964.15 c
-1078.55 1654.55 l
-1078.55 1378.55 1302.95 1154.15 1578.95 1154.15 c
-4588.55 1154.15 l
-4864.55 1154.15 5088.95 1378.55 5088.95 1654.55 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1563.35 5256.95 l
-1451.75 5256.95 1360.55 5165.75 1360.55 5055.35 c
-1360.55 4917.35 l
-1360.55 4806.95 1451.75 4715.75 1563.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-f*
-0 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-h
-S
-0.201248 i
-1539.33 5152 m
-1425.22 5152 l
-1425.22 5147 l
-1439.11 5146.2 1443 5143.18 1443 5132.72 c
-1443 5035.32 l
-1443 5024.85 1440.17 5022.64 1425.22 5021.03 c
-1425.22 5016 l
-1497.67 5016 l
-1497.67 5021 l
-1479.15 5021.81 1476 5024.23 1476 5035.32 c
-1476 5082.21 l
-1496.22 5081.81 1503.55 5074.36 1506.32 5051.02 c
-1511.35 5051.02 l
-1511.35 5119.04 l
-1506.32 5119.04 l
-1502.76 5096.1 1495.82 5089.05 1476 5089.05 c
-1476 5135.74 l
-1476 5143.19 1478.52 5145 1488.41 5145 c
-1507.13 5145 1518.8 5141.64 1525.04 5134.74 c
-1529.47 5129.71 1531.68 5124.27 1534.5 5111.59 c
-1539.33 5111.59 l
-h
-1544.96 5016 m
-f*
-1589.19 5109 m
-1550.84 5109 l
-1550.84 5103.95 l
-1559.49 5102.74 1562 5100.12 1562 5092.07 c
-1562 5032.9 l
-1562 5024.65 1559.93 5022.44 1550.84 5020.83 c
-1550.84 5016 l
-1604.37 5016 l
-1604.37 5020.83 l
-1592.09 5021.63 1590 5024.25 1590 5036.73 c
-1590 5074.76 l
-1590 5085.23 1595.49 5093.88 1601.95 5093.88 c
-1603.56 5093.88 1605.37 5092.47 1607.59 5089.25 c
-1611.41 5083.82 1614.43 5082.01 1619.66 5082.01 c
-1627.11 5082.01 1632.34 5087.64 1632.34 5095.29 c
-1632.34 5104.55 1625.5 5111.41 1616.04 5111.41 c
-1606.1 5111.41 1598.54 5106.12 1589.19 5092.27 c
-h
-1634.35 5016 m
-f*
-1729.19 5028.88 m
-1727.18 5026.87 l
-1726.57 5026.26 1725.97 5026.06 1724.96 5026.06 c
-1722.15 5026.06 1721 5027.67 1721 5031.09 c
-1721 5083.62 l
-1721 5100.73 1705.6 5111.42 1680.89 5111.42 c
-1658.15 5111.42 1642.85 5101.06 1642.85 5085.83 c
-1642.85 5077.38 1647.69 5072.55 1655.94 5072.55 c
-1663.99 5072.55 1669.62 5077.38 1669.62 5084.22 c
-1669.62 5087.04 1668.61 5089.66 1666 5092.88 c
-1664.19 5094.89 1663.58 5096.1 1663.58 5097.3 c
-1663.58 5101.53 1669.02 5104.42 1676.26 5104.42 c
-1688.14 5104.42 1693.86 5099.08 1693.86 5087.04 c
-1693.86 5072.35 l
-1669.91 5065.1 1660.29 5061.48 1652.51 5056.45 c
-1643.46 5050.41 1639 5043.37 1639 5034.52 c
-1639 5022.24 1648.27 5013.18 1661.17 5013.18 c
-1672.84 5013.18 1682.1 5017.21 1693.17 5027.27 c
-1695.38 5017.01 1699.81 5013.18 1709.67 5013.18 c
-1718.32 5013.18 1724.56 5016.4 1732.21 5024.65 c
-h
-1693 5036.13 m
-1687.55 5029.89 1683.52 5027.47 1678.68 5027.47 c
-1672.64 5027.47 1668 5032.91 1668 5040.96 c
-1668 5052.63 1676.61 5060.88 1693 5065.31 c
-h
-1734.62 5016 m
-f*
-1776.4 5109 m
-1737.7 5109 l
-1737.7 5103.95 l
-1746.55 5102.74 1749 5100.32 1749 5092.07 c
-1749 5032.9 l
-1749 5024.65 1746.74 5022.44 1737.7 5020.83 c
-1737.7 5016 l
-1786 5016 l
-1786 5020.83 l
-1778.95 5021.84 1777 5024.65 1777 5032.3 c
-1777 5086.03 l
-1777 5087.04 1779.87 5090.66 1782.18 5092.88 c
-1786.4 5096.1 1790.02 5098.42 1793.65 5098.42 c
-1801.5 5098.42 1805 5093.59 1805 5081 c
-1805 5032.3 l
-1805 5024.05 1802.68 5021.43 1794.85 5020.83 c
-1794.85 5016 l
-1841.95 5016 l
-1841.95 5020.83 l
-1834.9 5021.64 1833 5024.65 1833 5032.3 c
-1833 5086.03 l
-1833 5087.04 1835.73 5090.46 1837.92 5092.68 c
-1842.35 5096.1 1845.97 5098.42 1849.59 5098.42 c
-1857.24 5098.42 1860 5093.38 1860 5081 c
-1860 5032.3 l
-1860 5023.85 1857.85 5021.43 1850.4 5020.83 c
-1850.4 5016 l
-1898.3 5016 l
-1898.3 5021 l
-1890.45 5021.4 1888 5023.78 1888 5032.3 c
-1888 5082.81 l
-1888 5100.12 1877.43 5111.42 1861.07 5111.42 c
-1849.59 5111.42 1841.95 5106.73 1831.48 5093.68 c
-1825.44 5106.36 1818.4 5111.42 1805.72 5111.42 c
-1792.95 5111.42 1783.98 5105.91 1776.4 5093.68 c
-h
-1901.64 5016 m
-f*
-1979.9 5041.16 m
-1971.65 5031.29 1965.61 5027.18 1956.96 5027.18 c
-1949.31 5027.18 1943.27 5030.77 1939.25 5037.94 c
-1935.43 5044.54 1933.82 5051.56 1933.01 5066 c
-1983.73 5066 l
-1982.52 5082.36 1979.5 5091.43 1973.26 5099.12 c
-1966.82 5106.96 1957.36 5111.42 1946.09 5111.42 c
-1920.94 5111.42 1904.03 5091.4 1904.03 5061.88 c
-1904.03 5032.5 1920.53 5013.18 1945.49 5013.18 c
-1961.79 5013.18 1971.65 5019.42 1984.73 5038.34 c
-h
-1932 5073 m
-1932.61 5096.96 1936.23 5104.42 1946.09 5104.42 c
-1951.93 5104.42 1955.55 5101.38 1957.16 5095.49 c
-1958.17 5091.67 1958.57 5086.03 1958.97 5075.77 c
-1958.97 5073 l
-h
-1988.35 5016 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -5016]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4722.95 4254.95 m
-4722.95 4366.55 4631.75 4457.75 4520.15 4457.75 c
-4023.35 4457.75 l
-3911.75 4457.75 3820.55 4366.55 3820.55 4254.95 c
-3820.55 4118.15 l
-3820.55 4006.55 3911.75 3915.35 4023.35 3915.35 c
-4520.15 3915.35 l
-4631.75 3915.35 4722.95 4006.55 4722.95 4118.15 c
-f*
-1 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-f*
-16 w
-0 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-h
-S
-0.201248 i
-3999.33 4353 m
-3885.22 4353 l
-3885.22 4348 l
-3899.11 4347.2 3903 4344.18 3903 4333.72 c
-3903 4236.32 l
-3903 4225.85 3900.17 4223.64 3885.22 4222.03 c
-3885.22 4217 l
-3957.67 4217 l
-3957.67 4222 l
-3939.15 4222.81 3936 4225.23 3936 4236.32 c
-3936 4283.21 l
-3956.22 4282.81 3963.55 4275.36 3966.32 4252.02 c
-3971.35 4252.02 l
-3971.35 4320.04 l
-3966.32 4320.04 l
-3962.76 4297.1 3955.82 4290.05 3936 4290.05 c
-3936 4336.74 l
-3936 4344.19 3938.52 4346 3948.41 4346 c
-3967.13 4346 3978.8 4342.64 3985.04 4335.74 c
-3989.47 4330.71 3991.68 4325.27 3994.5 4312.59 c
-3999.33 4312.59 l
-h
-4004.96 4217 m
-f*
-4049.19 4310 m
-4010.84 4310 l
-4010.84 4304.95 l
-4019.49 4303.74 4022 4301.12 4022 4293.07 c
-4022 4233.9 l
-4022 4225.65 4019.93 4223.44 4010.84 4221.83 c
-4010.84 4217 l
-4064.37 4217 l
-4064.37 4221.83 l
-4052.09 4222.63 4050 4225.25 4050 4237.73 c
-4050 4275.76 l
-4050 4286.23 4055.49 4294.88 4061.95 4294.88 c
-4063.56 4294.88 4065.37 4293.47 4067.59 4290.25 c
-4071.41 4284.82 4074.43 4283.01 4079.66 4283.01 c
-4087.11 4283.01 4092.34 4288.64 4092.34 4296.29 c
-4092.34 4305.55 4085.5 4312.41 4076.04 4312.41 c
-4066.1 4312.41 4058.54 4307.12 4049.19 4293.27 c
-h
-4094.35 4217 m
-f*
-4189.19 4229.88 m
-4187.18 4227.87 l
-4186.57 4227.26 4185.97 4227.06 4184.96 4227.06 c
-4182.15 4227.06 4181 4228.67 4181 4232.09 c
-4181 4284.62 l
-4181 4301.73 4165.6 4312.42 4140.89 4312.42 c
-4118.15 4312.42 4102.85 4302.06 4102.85 4286.83 c
-4102.85 4278.38 4107.69 4273.55 4115.94 4273.55 c
-4123.99 4273.55 4129.62 4278.38 4129.62 4285.22 c
-4129.62 4288.04 4128.61 4290.66 4126 4293.88 c
-4124.19 4295.89 4123.58 4297.1 4123.58 4298.3 c
-4123.58 4302.53 4129.02 4305.42 4136.26 4305.42 c
-4148.14 4305.42 4153.86 4300.08 4153.86 4288.04 c
-4153.86 4273.35 l
-4129.91 4266.1 4120.29 4262.48 4112.51 4257.45 c
-4103.46 4251.41 4099 4244.37 4099 4235.52 c
-4099 4223.24 4108.27 4214.18 4121.17 4214.18 c
-4132.84 4214.18 4142.1 4218.21 4153.17 4228.27 c
-4155.38 4218.01 4159.81 4214.18 4169.67 4214.18 c
-4178.32 4214.18 4184.56 4217.4 4192.21 4225.65 c
-h
-4153 4237.13 m
-4147.55 4230.89 4143.52 4228.47 4138.68 4228.47 c
-4132.64 4228.47 4128 4233.91 4128 4241.96 c
-4128 4253.63 4136.61 4261.88 4153 4266.31 c
-h
-4194.62 4217 m
-f*
-4236.4 4310 m
-4197.7 4310 l
-4197.7 4304.95 l
-4206.55 4303.74 4209 4301.32 4209 4293.07 c
-4209 4233.9 l
-4209 4225.65 4206.74 4223.44 4197.7 4221.83 c
-4197.7 4217 l
-4246 4217 l
-4246 4221.83 l
-4238.95 4222.84 4237 4225.65 4237 4233.3 c
-4237 4287.03 l
-4237 4288.04 4239.87 4291.66 4242.18 4293.88 c
-4246.4 4297.1 4250.02 4299.42 4253.65 4299.42 c
-4261.5 4299.42 4265 4294.59 4265 4282 c
-4265 4233.3 l
-4265 4225.05 4262.68 4222.43 4254.85 4221.83 c
-4254.85 4217 l
-4301.95 4217 l
-4301.95 4221.83 l
-4294.9 4222.64 4293 4225.65 4293 4233.3 c
-4293 4287.03 l
-4293 4288.04 4295.73 4291.46 4297.92 4293.68 c
-4302.35 4297.1 4305.97 4299.42 4309.59 4299.42 c
-4317.24 4299.42 4320 4294.38 4320 4282 c
-4320 4233.3 l
-4320 4224.85 4317.85 4222.43 4310.4 4221.83 c
-4310.4 4217 l
-4358.3 4217 l
-4358.3 4222 l
-4350.45 4222.4 4348 4224.78 4348 4233.3 c
-4348 4283.81 l
-4348 4301.12 4337.43 4312.42 4321.07 4312.42 c
-4309.59 4312.42 4301.95 4307.73 4291.48 4294.68 c
-4285.44 4307.36 4278.4 4312.42 4265.72 4312.42 c
-4252.95 4312.42 4243.98 4306.91 4236.4 4294.68 c
-h
-4361.64 4217 m
-f*
-4439.9 4242.16 m
-4431.65 4232.29 4425.61 4228.18 4416.96 4228.18 c
-4409.31 4228.18 4403.27 4231.77 4399.25 4238.94 c
-4395.43 4245.54 4393.82 4252.56 4393.01 4267 c
-4443.73 4267 l
-4442.52 4283.36 4439.5 4292.43 4433.26 4300.12 c
-4426.82 4307.96 4417.36 4312.42 4406.09 4312.42 c
-4380.94 4312.42 4364.03 4292.4 4364.03 4262.88 c
-4364.03 4233.5 4380.53 4214.18 4405.49 4214.18 c
-4421.79 4214.18 4431.65 4220.42 4444.73 4239.34 c
-h
-4392 4274 m
-4392.61 4297.96 4396.23 4305.42 4406.09 4305.42 c
-4411.93 4305.42 4415.55 4302.38 4417.16 4296.49 c
-4418.17 4292.67 4418.57 4287.03 4418.97 4276.77 c
-4418.97 4274 l
-h
-4448.35 4217 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4484 -4215]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-2447.75 1960.55 m
-2447.75 2070.95 2356.55 2162.15 2244.95 2162.15 c
-1749.35 2162.15 l
-1637.75 2162.15 1546.55 2070.95 1546.55 1960.55 c
-1546.55 1822.55 l
-1546.55 1712.15 1637.75 1620.95 1749.35 1620.95 c
-2244.95 1620.95 l
-2356.55 1620.95 2447.75 1712.15 2447.75 1822.55 c
-f*
-1 g
-2378.15 2016.95 m
-2378.15 2123.75 2289.35 2211.35 2180.15 2211.35 c
-1695.35 2211.35 l
-1586.15 2211.35 1497.35 2123.75 1497.35 2016.95 c
-1497.35 1884.95 l
-1497.35 1778.15 1586.15 1690.55 1695.35 1690.55 c
-2180.15 1690.55 l
-2289.35 1690.55 2378.15 1778.15 2378.15 1884.95 c
-f*
-0 g
-2378.15 2016.95 m
-2378.15 2123.75 2289.35 2211.35 2180.15 2211.35 c
-1695.35 2211.35 l
-1586.15 2211.35 1497.35 2123.75 1497.35 2016.95 c
-1497.35 1884.95 l
-1497.35 1778.15 1586.15 1690.55 1695.35 1690.55 c
-2180.15 1690.55 l
-2289.35 1690.55 2378.15 1778.15 2378.15 1884.95 c
-h
-S
-0.201248 i
-1725.33 2057 m
-1611.22 2057 l
-1611.22 2052 l
-1625.11 2051.2 1629 2048.18 1629 2037.72 c
-1629 1940.32 l
-1629 1929.85 1626.17 1927.64 1611.22 1926.03 c
-1611.22 1921 l
-1683.67 1921 l
-1683.67 1926 l
-1665.15 1926.81 1662 1929.23 1662 1940.32 c
-1662 1987.21 l
-1682.22 1986.81 1689.55 1979.36 1692.32 1956.02 c
-1697.35 1956.02 l
-1697.35 2024.04 l
-1692.32 2024.04 l
-1688.76 2001.1 1681.82 1994.05 1662 1994.05 c
-1662 2040.74 l
-1662 2048.19 1664.52 2050 1674.41 2050 c
-1693.13 2050 1704.8 2046.64 1711.04 2039.74 c
-1715.47 2034.71 1717.68 2029.27 1720.5 2016.59 c
-1725.33 2016.59 l
-h
-1730.96 1921 m
-f*
-1774.19 2014 m
-1735.84 2014 l
-1735.84 2008.95 l
-1744.49 2007.74 1747 2005.12 1747 1997.07 c
-1747 1937.9 l
-1747 1929.65 1744.93 1927.44 1735.84 1925.83 c
-1735.84 1921 l
-1789.37 1921 l
-1789.37 1925.83 l
-1777.09 1926.63 1775 1929.25 1775 1941.73 c
-1775 1979.76 l
-1775 1990.23 1780.49 1998.88 1786.95 1998.88 c
-1788.56 1998.88 1790.37 1997.47 1792.59 1994.25 c
-1796.41 1988.82 1799.43 1987.01 1804.66 1987.01 c
-1812.11 1987.01 1817.34 1992.64 1817.34 2000.29 c
-1817.34 2009.55 1810.5 2016.41 1801.04 2016.41 c
-1791.1 2016.41 1783.54 2011.12 1774.19 1997.27 c
-h
-1819.35 1921 m
-f*
-1914.19 1933.88 m
-1912.18 1931.87 l
-1911.57 1931.26 1910.97 1931.06 1909.96 1931.06 c
-1907.15 1931.06 1906 1932.67 1906 1936.09 c
-1906 1988.62 l
-1906 2005.73 1890.6 2016.42 1865.89 2016.42 c
-1843.15 2016.42 1827.85 2006.06 1827.85 1990.83 c
-1827.85 1982.38 1832.69 1977.55 1840.94 1977.55 c
-1848.99 1977.55 1854.62 1982.38 1854.62 1989.22 c
-1854.62 1992.04 1853.61 1994.66 1851 1997.88 c
-1849.19 1999.89 1848.58 2001.1 1848.58 2002.3 c
-1848.58 2006.53 1854.02 2009.42 1861.26 2009.42 c
-1873.14 2009.42 1878.86 2004.08 1878.86 1992.04 c
-1878.86 1977.35 l
-1854.91 1970.1 1845.29 1966.48 1837.51 1961.45 c
-1828.46 1955.41 1824 1948.37 1824 1939.52 c
-1824 1927.24 1833.27 1918.18 1846.17 1918.18 c
-1857.84 1918.18 1867.1 1922.21 1878.17 1932.27 c
-1880.38 1922.01 1884.81 1918.18 1894.67 1918.18 c
-1903.32 1918.18 1909.56 1921.4 1917.21 1929.65 c
-h
-1878 1941.13 m
-1872.55 1934.89 1868.52 1932.47 1863.68 1932.47 c
-1857.64 1932.47 1853 1937.91 1853 1945.96 c
-1853 1957.63 1861.61 1965.88 1878 1970.31 c
-h
-1919.62 1921 m
-f*
-1961.4 2014 m
-1922.7 2014 l
-1922.7 2008.95 l
-1931.55 2007.74 1934 2005.32 1934 1997.07 c
-1934 1937.9 l
-1934 1929.65 1931.74 1927.44 1922.7 1925.83 c
-1922.7 1921 l
-1971 1921 l
-1971 1925.83 l
-1963.95 1926.84 1962 1929.65 1962 1937.3 c
-1962 1991.03 l
-1962 1992.04 1964.87 1995.66 1967.18 1997.88 c
-1971.4 2001.1 1975.02 2003.42 1978.65 2003.42 c
-1986.5 2003.42 1990 1998.59 1990 1986 c
-1990 1937.3 l
-1990 1929.05 1987.68 1926.43 1979.85 1925.83 c
-1979.85 1921 l
-2026.95 1921 l
-2026.95 1925.83 l
-2019.9 1926.64 2018 1929.65 2018 1937.3 c
-2018 1991.03 l
-2018 1992.04 2020.73 1995.46 2022.92 1997.68 c
-2027.35 2001.1 2030.97 2003.42 2034.59 2003.42 c
-2042.24 2003.42 2045 1998.38 2045 1986 c
-2045 1937.3 l
-2045 1928.85 2042.85 1926.43 2035.4 1925.83 c
-2035.4 1921 l
-2083.3 1921 l
-2083.3 1926 l
-2075.45 1926.4 2073 1928.78 2073 1937.3 c
-2073 1987.81 l
-2073 2005.12 2062.43 2016.42 2046.07 2016.42 c
-2034.59 2016.42 2026.95 2011.73 2016.48 1998.68 c
-2010.44 2011.36 2003.4 2016.42 1990.72 2016.42 c
-1977.95 2016.42 1968.98 2010.91 1961.4 1998.68 c
-h
-2086.64 1921 m
-f*
-2165.9 1946.16 m
-2157.65 1936.29 2151.61 1932.18 2142.96 1932.18 c
-2135.31 1932.18 2129.27 1935.77 2125.25 1942.94 c
-2121.43 1949.54 2119.82 1956.56 2119.01 1971 c
-2169.73 1971 l
-2168.52 1987.36 2165.5 1996.43 2159.26 2004.12 c
-2152.82 2011.96 2143.36 2016.42 2132.09 2016.42 c
-2106.94 2016.42 2090.03 1996.4 2090.03 1966.88 c
-2090.03 1937.5 2106.53 1918.18 2131.49 1918.18 c
-2147.79 1918.18 2157.65 1924.42 2170.73 1943.34 c
-h
-2118 1978 m
-2118.61 2001.96 2122.23 2009.42 2132.09 2009.42 c
-2137.93 2009.42 2141.55 2006.38 2143.16 2000.49 c
-2144.17 1996.67 2144.57 1991.03 2144.97 1980.77 c
-2144.97 1978 l
-h
-2174.35 1921 m
-f*
-q[1 0 0 1 0 0]concat
-66 97 true[1 0 0 1 -2209 -1921]@85 imagemask
-z"98D:z
-!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z
-"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$
-s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!
-s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!
-s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7++O=k"98D:!"XS[!!E9$
-^]4n\!!!-$s1eU>huE`Zs8Tk7"7Q9j"98D:!!D]j!!E9$^]4E1!!!-$s1eU7qu?^!s8Tk7!;lfs"98D:!!%HJ!!E9$
-^]4@!!!!-$s1eU75C`_9s8Tk7!$?^k"98D:!!!PF!!E9$^]4?FhuElZs1eU7#Oh]qs8Tk7!!D]j"98D:
-!!!,r!!E9$^]4?8qu?j!s1eU7!;lg!s8Tk7!!%HJ"98D:!!!"K!!E9$^]4?75C`k9s1eU7!$?^ns8Tk7
-!!"+V"98D:!!!!0huj#Z^]4?7#N,^as1eU7!!D]ms8Tk7!!!,r"98D:!!!!"qud!!^]4?7!;ls!s1eU7!!%HMs8Tk7
-!!!"K"98D:z56Lrc^]4?7!$?jns1eU7!!!PIs8Tk7!!!!0j8].pz#NPja^]4?7!!Dims1eU7
-!!!&ss8Tk7!!!!"qu?]3z!<<*!^]4?7!!%NKs1eU7!!!!`s8Tk7z5QCc!z!$D7@^]4?7
-!!!Q0s1eU7!!!!(s8Tk7z#QOh>z!!E9$^]4?7!!!'"s1eU7zs8Tk7z!<<)7z!!%NK^]4?7
-!!!!`s1eU7z+90+Vz!$D6Vz!!!Q0^]4?7!!!!(s1eU7z"96.:z!!E8:!!~>
-Q
-1 i
-0.564706 g
-3804.95 3548.15 m
-3804.95 3658.55 3713.75 3749.75 3602.15 3749.75 c
-3106.55 3749.75 l
-2994.95 3749.75 2903.75 3658.55 2903.75 3548.15 c
-2903.75 3410.15 l
-2903.75 3299.75 2994.95 3208.55 3106.55 3208.55 c
-3602.15 3208.55 l
-3713.75 3208.55 3804.95 3299.75 3804.95 3410.15 c
-f*
-1 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-f*
-8 w
-0 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-h
-S
-0.201248 i
-3082.33 3645 m
-2968.22 3645 l
-2968.22 3640 l
-2982.11 3639.2 2986 3636.18 2986 3625.72 c
-2986 3528.32 l
-2986 3517.85 2983.17 3515.64 2968.22 3514.03 c
-2968.22 3509 l
-3040.67 3509 l
-3040.67 3514 l
-3022.15 3514.81 3019 3517.23 3019 3528.32 c
-3019 3575.21 l
-3039.22 3574.81 3046.55 3567.36 3049.32 3544.02 c
-3054.35 3544.02 l
-3054.35 3612.04 l
-3049.32 3612.04 l
-3045.76 3589.1 3038.82 3582.05 3019 3582.05 c
-3019 3628.74 l
-3019 3636.19 3021.52 3638 3031.41 3638 c
-3050.13 3638 3061.8 3634.64 3068.04 3627.74 c
-3072.47 3622.71 3074.68 3617.27 3077.5 3604.59 c
-3082.33 3604.59 l
-h
-3087.96 3509 m
-f*
-3131.19 3602 m
-3092.84 3602 l
-3092.84 3596.95 l
-3101.49 3595.74 3104 3593.12 3104 3585.07 c
-3104 3525.9 l
-3104 3517.65 3101.93 3515.44 3092.84 3513.83 c
-3092.84 3509 l
-3146.37 3509 l
-3146.37 3513.83 l
-3134.09 3514.63 3132 3517.25 3132 3529.73 c
-3132 3567.76 l
-3132 3578.23 3137.49 3586.88 3143.95 3586.88 c
-3145.56 3586.88 3147.37 3585.47 3149.59 3582.25 c
-3153.41 3576.82 3156.43 3575.01 3161.66 3575.01 c
-3169.11 3575.01 3174.34 3580.64 3174.34 3588.29 c
-3174.34 3597.55 3167.5 3604.41 3158.04 3604.41 c
-3148.1 3604.41 3140.54 3599.12 3131.19 3585.27 c
-h
-3176.35 3509 m
-f*
-3271.19 3521.88 m
-3269.18 3519.87 l
-3268.57 3519.26 3267.97 3519.06 3266.96 3519.06 c
-3264.15 3519.06 3263 3520.67 3263 3524.09 c
-3263 3576.62 l
-3263 3593.73 3247.6 3604.42 3222.89 3604.42 c
-3200.15 3604.42 3184.85 3594.06 3184.85 3578.83 c
-3184.85 3570.38 3189.69 3565.55 3197.94 3565.55 c
-3205.99 3565.55 3211.62 3570.38 3211.62 3577.22 c
-3211.62 3580.04 3210.61 3582.66 3208 3585.88 c
-3206.19 3587.89 3205.58 3589.1 3205.58 3590.3 c
-3205.58 3594.53 3211.02 3597.42 3218.26 3597.42 c
-3230.14 3597.42 3235.86 3592.08 3235.86 3580.04 c
-3235.86 3565.35 l
-3211.91 3558.1 3202.29 3554.48 3194.51 3549.45 c
-3185.46 3543.41 3181 3536.37 3181 3527.52 c
-3181 3515.24 3190.27 3506.18 3203.17 3506.18 c
-3214.84 3506.18 3224.1 3510.21 3235.17 3520.27 c
-3237.38 3510.01 3241.81 3506.18 3251.67 3506.18 c
-3260.32 3506.18 3266.56 3509.4 3274.21 3517.65 c
-h
-3235 3529.13 m
-3229.55 3522.89 3225.52 3520.47 3220.68 3520.47 c
-3214.64 3520.47 3210 3525.91 3210 3533.96 c
-3210 3545.63 3218.61 3553.88 3235 3558.31 c
-h
-3276.62 3509 m
-f*
-3318.4 3602 m
-3279.7 3602 l
-3279.7 3596.95 l
-3288.55 3595.74 3291 3593.32 3291 3585.07 c
-3291 3525.9 l
-3291 3517.65 3288.74 3515.44 3279.7 3513.83 c
-3279.7 3509 l
-3328 3509 l
-3328 3513.83 l
-3320.95 3514.84 3319 3517.65 3319 3525.3 c
-3319 3579.03 l
-3319 3580.04 3321.87 3583.66 3324.18 3585.88 c
-3328.4 3589.1 3332.02 3591.42 3335.65 3591.42 c
-3343.5 3591.42 3347 3586.59 3347 3574 c
-3347 3525.3 l
-3347 3517.05 3344.68 3514.43 3336.85 3513.83 c
-3336.85 3509 l
-3383.95 3509 l
-3383.95 3513.83 l
-3376.9 3514.64 3375 3517.65 3375 3525.3 c
-3375 3579.03 l
-3375 3580.04 3377.73 3583.46 3379.92 3585.68 c
-3384.35 3589.1 3387.97 3591.42 3391.59 3591.42 c
-3399.24 3591.42 3402 3586.38 3402 3574 c
-3402 3525.3 l
-3402 3516.85 3399.85 3514.43 3392.4 3513.83 c
-3392.4 3509 l
-3440.3 3509 l
-3440.3 3514 l
-3432.45 3514.4 3430 3516.78 3430 3525.3 c
-3430 3575.81 l
-3430 3593.12 3419.43 3604.42 3403.07 3604.42 c
-3391.59 3604.42 3383.95 3599.73 3373.48 3586.68 c
-3367.44 3599.36 3360.4 3604.42 3347.72 3604.42 c
-3334.95 3604.42 3325.98 3598.91 3318.4 3586.68 c
-h
-3443.64 3509 m
-f*
-3523.9 3534.16 m
-3515.65 3524.29 3509.61 3520.18 3500.96 3520.18 c
-3493.31 3520.18 3487.27 3523.77 3483.25 3530.94 c
-3479.43 3537.54 3477.82 3544.56 3477.01 3559 c
-3527.73 3559 l
-3526.52 3575.36 3523.5 3584.43 3517.26 3592.12 c
-3510.82 3599.96 3501.36 3604.42 3490.09 3604.42 c
-3464.94 3604.42 3448.03 3584.4 3448.03 3554.88 c
-3448.03 3525.5 3464.53 3506.18 3489.49 3506.18 c
-3505.79 3506.18 3515.65 3512.42 3528.73 3531.34 c
-h
-3476 3566 m
-3476.61 3589.96 3480.23 3597.42 3490.09 3597.42 c
-3495.93 3597.42 3499.55 3594.38 3501.16 3588.49 c
-3502.17 3584.67 3502.57 3579.03 3502.97 3568.77 c
-3502.97 3566 l
-h
-3532.35 3509 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -3509]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-0.564706 g
-3962.15 2110.55 m
-3962.15 2220.95 3870.95 2312.15 3759.35 2312.15 c
-3263.75 2312.15 l
-3152.15 2312.15 3060.95 2220.95 3060.95 2110.55 c
-3060.95 1972.55 l
-3060.95 1862.15 3152.15 1770.95 3263.75 1770.95 c
-3759.35 1770.95 l
-3870.95 1770.95 3962.15 1862.15 3962.15 1972.55 c
-f*
-1 g
-3897.35 2168.15 m
-3897.35 2277.35 3808.55 2366.15 3698.15 2366.15 c
-3207.35 2366.15 l
-3095.75 2366.15 3006.95 2277.35 3006.95 2168.15 c
-3006.95 2033.75 l
-3006.95 1924.55 3095.75 1835.75 3207.35 1835.75 c
-3696.95 1835.75 l
-3808.55 1835.75 3897.35 1924.55 3897.35 2033.75 c
-f*
-0 g
-3897.35 2168.15 m
-3897.35 2277.35 3808.55 2366.15 3698.15 2366.15 c
-3207.35 2366.15 l
-3095.75 2366.15 3006.95 2277.35 3006.95 2168.15 c
-3006.95 2033.75 l
-3006.95 1924.55 3095.75 1835.75 3207.35 1835.75 c
-3696.95 1835.75 l
-3808.55 1835.75 3897.35 1924.55 3897.35 2033.75 c
-h
-S
-0.201248 i
-3239.33 2207 m
-3125.22 2207 l
-3125.22 2202 l
-3139.11 2201.2 3143 2198.18 3143 2187.72 c
-3143 2090.32 l
-3143 2079.85 3140.17 2077.64 3125.22 2076.03 c
-3125.22 2071 l
-3197.67 2071 l
-3197.67 2076 l
-3179.15 2076.81 3176 2079.23 3176 2090.32 c
-3176 2137.21 l
-3196.22 2136.81 3203.55 2129.36 3206.32 2106.02 c
-3211.35 2106.02 l
-3211.35 2174.04 l
-3206.32 2174.04 l
-3202.76 2151.1 3195.82 2144.05 3176 2144.05 c
-3176 2190.74 l
-3176 2198.19 3178.52 2200 3188.41 2200 c
-3207.13 2200 3218.8 2196.64 3225.04 2189.74 c
-3229.47 2184.71 3231.68 2179.27 3234.5 2166.59 c
-3239.33 2166.59 l
-h
-3244.96 2071 m
-f*
-3289.19 2164 m
-3250.84 2164 l
-3250.84 2158.95 l
-3259.49 2157.74 3262 2155.12 3262 2147.07 c
-3262 2087.9 l
-3262 2079.65 3259.93 2077.44 3250.84 2075.83 c
-3250.84 2071 l
-3304.37 2071 l
-3304.37 2075.83 l
-3292.09 2076.63 3290 2079.25 3290 2091.73 c
-3290 2129.76 l
-3290 2140.23 3295.49 2148.88 3301.95 2148.88 c
-3303.56 2148.88 3305.37 2147.47 3307.59 2144.25 c
-3311.41 2138.82 3314.43 2137.01 3319.66 2137.01 c
-3327.11 2137.01 3332.34 2142.64 3332.34 2150.29 c
-3332.34 2159.55 3325.5 2166.41 3316.04 2166.41 c
-3306.1 2166.41 3298.54 2161.12 3289.19 2147.27 c
-h
-3334.35 2071 m
-f*
-3428.19 2083.88 m
-3426.18 2081.87 l
-3425.57 2081.26 3424.97 2081.06 3423.96 2081.06 c
-3421.15 2081.06 3420 2082.67 3420 2086.09 c
-3420 2138.62 l
-3420 2155.73 3404.6 2166.42 3379.89 2166.42 c
-3357.15 2166.42 3341.85 2156.06 3341.85 2140.83 c
-3341.85 2132.38 3346.69 2127.55 3354.94 2127.55 c
-3362.99 2127.55 3368.62 2132.38 3368.62 2139.22 c
-3368.62 2142.04 3367.61 2144.66 3365 2147.88 c
-3363.19 2149.89 3362.58 2151.1 3362.58 2152.3 c
-3362.58 2156.53 3368.02 2159.42 3375.26 2159.42 c
-3387.14 2159.42 3392.86 2154.08 3392.86 2142.04 c
-3392.86 2127.35 l
-3368.91 2120.1 3359.29 2116.48 3351.51 2111.45 c
-3342.46 2105.41 3338 2098.37 3338 2089.52 c
-3338 2077.24 3347.27 2068.18 3360.17 2068.18 c
-3371.84 2068.18 3381.1 2072.21 3392.17 2082.27 c
-3394.38 2072.01 3398.81 2068.18 3408.67 2068.18 c
-3417.32 2068.18 3423.56 2071.4 3431.21 2079.65 c
-h
-3392 2091.13 m
-3386.55 2084.89 3382.52 2082.47 3377.68 2082.47 c
-3371.64 2082.47 3367 2087.91 3367 2095.96 c
-3367 2107.63 3375.61 2115.88 3392 2120.31 c
-h
-3433.62 2071 m
-f*
-3476.4 2164 m
-3437.7 2164 l
-3437.7 2158.95 l
-3446.55 2157.74 3449 2155.32 3449 2147.07 c
-3449 2087.9 l
-3449 2079.65 3446.74 2077.44 3437.7 2075.83 c
-3437.7 2071 l
-3486 2071 l
-3486 2075.83 l
-3478.95 2076.84 3477 2079.65 3477 2087.3 c
-3477 2141.03 l
-3477 2142.04 3479.87 2145.66 3482.18 2147.88 c
-3486.4 2151.1 3490.02 2153.42 3493.65 2153.42 c
-3501.5 2153.42 3505 2148.59 3505 2136 c
-3505 2087.3 l
-3505 2079.05 3502.68 2076.43 3494.85 2075.83 c
-3494.85 2071 l
-3541.95 2071 l
-3541.95 2075.83 l
-3534.9 2076.64 3533 2079.65 3533 2087.3 c
-3533 2141.03 l
-3533 2142.04 3535.73 2145.46 3537.92 2147.68 c
-3542.35 2151.1 3545.97 2153.42 3549.59 2153.42 c
-3557.24 2153.42 3560 2148.38 3560 2136 c
-3560 2087.3 l
-3560 2078.85 3557.85 2076.43 3550.4 2075.83 c
-3550.4 2071 l
-3598.3 2071 l
-3598.3 2076 l
-3590.45 2076.4 3588 2078.78 3588 2087.3 c
-3588 2137.81 l
-3588 2155.12 3577.43 2166.42 3561.07 2166.42 c
-3549.59 2166.42 3541.95 2161.73 3531.48 2148.68 c
-3525.44 2161.36 3518.4 2166.42 3505.72 2166.42 c
-3492.95 2166.42 3483.98 2160.91 3476.4 2148.68 c
-h
-3601.64 2071 m
-f*
-3680.9 2096.16 m
-3672.65 2086.29 3666.61 2082.18 3657.96 2082.18 c
-3650.31 2082.18 3644.27 2085.77 3640.25 2092.94 c
-3636.43 2099.54 3634.82 2106.56 3634.01 2121 c
-3684.73 2121 l
-3683.52 2137.36 3680.5 2146.43 3674.26 2154.12 c
-3667.82 2161.96 3658.36 2166.42 3647.09 2166.42 c
-3621.94 2166.42 3605.03 2146.4 3605.03 2116.88 c
-3605.03 2087.5 3621.53 2068.18 3646.49 2068.18 c
-3662.79 2068.18 3672.65 2074.42 3685.73 2093.34 c
-h
-3633 2128 m
-3633.61 2151.96 3637.23 2159.42 3647.09 2159.42 c
-3652.93 2159.42 3656.55 2156.38 3658.16 2150.49 c
-3659.17 2146.67 3659.57 2141.03 3659.97 2130.77 c
-3659.97 2128 l
-h
-3689.35 2071 m
-f*
-q[1 0 0 1 0 0]concat
-66 96 true[1 0 0 1 -3723 -2070]@85 imagemask
-!!*'!z!!!9(
-s7cQo!!!!`s8W*!zs8W-!^]4?7!WW3"s7cQo!!E9$s8W&u!!!9(s8W-!!!!!0s8W-!s1eU7&-)\0
-s8V!W!$D7 at s56-2!!", at s8N'(p](:9s8Vus!W2ot+92B1!!)uu!$D7 at huEb,!!", at s*t(L5C`_Es8N'!
-!'e7!&-)P-!!"+V!!iQ!!!!!@huElZhuE`W+5d,"s*t(L!"\Q!!&srY!!!Q!z!!!!0p](9oz&,6,)z
-!"\i)z!!!Q-z!!!!0qu?]sz&,ZD-z!$D+=z!!",?z!!!!@rVuouz
-5Q1W_z!'gG_z!!%NJz!!!$!rVuou!!!!"s8Duuz"98?#z!!iQ'z!!!Q0
-rVuou!!!!@s8DuuzJ,fEHz!<<)sz!!E9$qu?]s!!", at s82is!!!$!s8Vio!!!!(s8W,ozJ,fQK
-p](9o5QCc`s6p!hs8W-!s8VQg!WW3"s8W,W!!*'!s8W-!huEcWs8W-!s1eU7s8W-!s8RTL!.Y%Ks8W+L
-!!%NKs8W-!!!!"Ks8W-!rVuouJ,fQKs82is!'gM`s8Vio!!#7`s8W,g!!!!`s8W-!^]4?7+92B at s*t(L
-!$D7 at s8Duu!!", at s8Vio!!!!@s8W,Wz&-)\0z!"],0n,NFg!!!Q0qu?]s!!!!0^]4?7z#J^<>z
-!!g:>z!!!8^z!!!!$huE`Wz"5j.Zz!!D-Zz!!!,jz!!!!"n,NFgz
-!Up'hz!!2Qhz!!!#ozzs8W-!s6p!g!<<*!s8VQg!!*'!s8W,o!!!"Ks8W-!p](9o
-J,fQKs7cQo!.Y%Ks8Vus!!#7`s8W,s!!!!`s8W-!qu?]s5QCc`s8Duu!'gM`s8W&u!!", at s8W,u!!!!@
-s8W-!rr<$!+92B at s8N'!!$D7 at s8W*!!!!Q0s8W-!J,fQ[s8W-!s*t(L&-)\0s8RTL!!iQ(s8W,7~>
-Q
-1 i
-1751.75 4750.55 m
-1751.75 4758.95 1751.75 4758.95 1751.75 4750.55 c
-1751.75 4602.95 1791.35 4461.35 1863.35 4360.55 c
-S
-1804.55 4366.55 m
-1853.75 4382.15 l
-1878.95 4427.75 l
-1940.15 4280.15 l
-f*
-2244.95 3784.55 m
-2334.95 3666.95 2519.75 3582.95 2740.55 3561.35 c
-S
-2699.75 3518.15 m
-2721.35 3564.95 l
-2705.75 3612.95 l
-2854.55 3556.55 l
-f*
-2855.75 3413.75 m
-2625.35 3369.35 2448.95 3267.35 2384.15 3140.15 c
-S
-2360.15 3190.55 m
-2399.75 3158.15 l
-2450.15 3160.55 l
-2357.75 3030.95 l
-f*
-2178.95 2306.15 m
-2232.95 2368.55 2274.95 2441.75 2302.55 2520.95 c
-S
-2168.15 2369.75 m
-2189.75 2322.95 l
-2237.75 2303.75 l
-2097.35 2226.95 l
-f*
-2831.75 5164.55 m
-2729.75 5264.15 2584.55 5321.75 2430.95 5321.75 c
-2326.55 5321.75 2224.55 5295.35 2136.95 5244.95 c
-S
-2766.95 5158.55 m
-2814.95 5174.15 l
-2838.95 5219.75 l
-2902.55 5073.35 l
-f*
-3186.95 4588.55 m
-3275.75 4414.55 3440.15 4289.75 3635.75 4250.15 c
-S
-3591.35 4210.55 m
-3616.55 4256.15 l
-3604.55 4306.55 l
-3748.55 4235.75 l
-f*
-3302.15 3256.55 m
-3302.15 3262.55 3302.15 3262.55 3302.15 3255.35 c
-3302.15 3064.55 3456.95 2896.55 3682.55 2846.15 c
-S
-3638.15 2810.15 m
-3664.55 2853.35 l
-3654.95 2902.55 l
-3797.75 2830.55 l
-f*
-4030.55 2122.55 m
-4202.15 2176.55 4323.35 2344.55 4332.95 2540.15 c
-S
-4058.15 2181.35 m
-4048.55 2130.95 l
-4076.15 2088.95 l
-3917.75 2105.75 l
-f*
-0.564706 g
-3638.15 4764.95 m
-3503.75 4800.95 l
-3599.75 4857.35 l
-3446.15 4865.75 l
-3488.15 4936.55 l
-3340.55 4916.15 l
-3323.75 4986.95 l
-3203.75 4942.55 l
-3128.15 5006.15 l
-3052.55 4942.55 l
-2932.55 4986.95 l
-2914.55 4916.15 l
-2765.75 4936.55 l
-2810.15 4865.75 l
-2656.55 4857.35 l
-2752.55 4800.95 l
-2616.95 4764.95 l
-2752.55 4730.15 l
-2656.55 4673.75 l
-2810.15 4664.15 l
-2765.75 4594.55 l
-2914.55 4614.95 l
-2932.55 4542.95 l
-3052.55 4588.55 l
-3128.15 4524.95 l
-3203.75 4588.55 l
-3323.75 4542.95 l
-3340.55 4614.95 l
-3488.15 4594.55 l
-3446.15 4664.15 l
-3599.75 4673.75 l
-3503.75 4730.15 l
-f*
-1 g
-3578.15 4824.95 m
-3443.75 4860.95 l
-3539.75 4917.35 l
-3386.15 4925.75 l
-3428.15 4996.55 l
-3280.55 4976.15 l
-3263.75 5046.95 l
-3143.75 5002.55 l
-3068.15 5066.15 l
-2992.55 5002.55 l
-2872.55 5046.95 l
-2854.55 4976.15 l
-2705.75 4996.55 l
-2750.15 4925.75 l
-2596.55 4917.35 l
-2692.55 4860.95 l
-2556.95 4824.95 l
-2692.55 4790.15 l
-2596.55 4733.75 l
-2750.15 4724.15 l
-2705.75 4654.55 l
-2854.55 4674.95 l
-2872.55 4602.95 l
-2992.55 4648.55 l
-3068.15 4584.95 l
-3143.75 4648.55 l
-3263.75 4602.95 l
-3280.55 4674.95 l
-3428.15 4654.55 l
-3386.15 4724.15 l
-3539.75 4733.75 l
-3443.75 4790.15 l
-f*
-0 g
-3578.15 4824.95 m
-3443.75 4860.95 l
-3539.75 4917.35 l
-3386.15 4925.75 l
-3428.15 4996.55 l
-3280.55 4976.15 l
-3263.75 5046.95 l
-3143.75 5002.55 l
-3068.15 5066.15 l
-2992.55 5002.55 l
-2872.55 5046.95 l
-2854.55 4976.15 l
-2705.75 4996.55 l
-2750.15 4925.75 l
-2596.55 4917.35 l
-2692.55 4860.95 l
-2556.95 4824.95 l
-2692.55 4790.15 l
-2596.55 4733.75 l
-2750.15 4724.15 l
-2705.75 4654.55 l
-2854.55 4674.95 l
-2872.55 4602.95 l
-2992.55 4648.55 l
-3068.15 4584.95 l
-3143.75 4648.55 l
-3263.75 4602.95 l
-3280.55 4674.95 l
-3428.15 4654.55 l
-3386.15 4724.15 l
-3539.75 4733.75 l
-3443.75 4790.15 l
-3578.15 4824.95 l
-3539.75 4824.95 l
-3417.35 4793.75 l
-3506.15 4740.95 l
-3368.15 4733.75 l
-3408.95 4667.75 l
-3273.35 4685.75 l
-3256.55 4617.35 l
-3141.35 4659.35 l
-3068.15 4596.95 l
-2994.95 4659.35 l
-2879.75 4617.35 l
-2861.75 4685.75 l
-2726.15 4667.75 l
-2766.95 4733.75 l
-2630.15 4740.95 l
-2718.95 4793.75 l
-2596.55 4824.95 l
-2717.75 4857.35 l
-2630.15 4910.15 l
-2766.95 4917.35 l
-2726.15 4983.35 l
-2861.75 4964.15 l
-2879.75 5033.75 l
-2994.95 4990.55 l
-3068.15 5052.95 l
-3141.35 4990.55 l
-3256.55 5033.75 l
-3273.35 4964.15 l
-3408.95 4983.35 l
-3368.15 4917.35 l
-3506.15 4910.15 l
-3417.35 4857.35 l
-3539.75 4824.95 l
-3578.15 4824.95 l
-f*
-0.2 i
-2890.08 4876.76 m
-2870.08 4802.52 l
-2867.52 4793.88 2864.48 4791.64 2854.08 4791 c
-2854.08 4787 l
-2904 4787 l
-2904 4791 l
-2894.72 4791.48 2892.48 4792.76 2892.48 4797.88 c
-2892.48 4799.64 2892.8 4801.4 2893.76 4805.08 c
-2893.92 4805.88 l
-2894.08 4806.68 l
-2913.76 4878.52 l
-2916.16 4886.84 2918.56 4889.08 2926.72 4890.04 c
-2926.72 4894 l
-2892.8 4894 l
-2843.2 4817.24 l
-2834.56 4894 l
-2799.2 4894 l
-2799.2 4890 l
-2809.28 4889.52 2810.72 4888.89 2810.72 4884.44 c
-2810.72 4882.2 2810.08 4879.32 2808.96 4875.16 c
-2791.52 4815.48 l
-2785.12 4794.68 2784 4792.92 2775.36 4791 c
-2775.36 4787 l
-2808.48 4787 l
-2808.48 4791 l
-2798.24 4792.28 2795.68 4794.2 2795.68 4800.76 c
-2795.68 4803.48 2796.48 4807.48 2798.72 4815.48 c
-2814.88 4874.52 l
-2825.6 4785.08 l
-2830.08 4785.08 l
-h
-2922.24 4787 m
-f*
-2991.44 4807.32 m
-2984.88 4798.52 2982.48 4795.76 2979.92 4795.76 c
-2978.64 4795.76 2978 4796.86 2978 4798.52 c
-2978 4802.52 2979.44 4809.08 2983.44 4822.2 c
-2994.8 4859.96 l
-2977.04 4858.84 l
-2974.16 4849.4 l
-2972.72 4857.56 2969.2 4861.08 2962.32 4861.08 c
-2942.64 4861.08 2919 4830.27 2919 4805.24 c
-2919 4793.08 2925.74 4784.92 2935.92 4784.92 c
-2945.68 4784.92 2953.04 4790.68 2962.16 4806.04 c
-2960.24 4799.48 2960 4797.56 2960 4795.32 c
-2960 4789.4 2964.76 4784.76 2970.64 4784.76 c
-2978.16 4784.76 2985.52 4791 2994.8 4804.92 c
-h
-2964.56 4854.2 m
-2968.08 4853.88 2970.56 4851 2970.56 4846.68 c
-2970.56 4837.08 2965.24 4819.32 2958.96 4808.28 c
-2954.64 4800.44 2949.84 4795.92 2945.52 4795.92 c
-2941.36 4795.92 2938 4799.75 2938 4804.92 c
-2938 4813.24 2943.42 4829.24 2950.16 4841.08 c
-2954.96 4849.56 2960.24 4854.52 2964.56 4854.2 c
-h
-3002 4787 m
-f*
-3036.56 4860.92 m
-3020.24 4858.36 3014 4857.4 3005.68 4856.44 c
-3005.68 4852 l
-3012.88 4851.69 3014.32 4851.07 3014.32 4848.12 c
-3014.32 4846.52 3013.04 4840.76 3010.8 4832.44 c
-2994.8 4770.36 l
-2991.76 4759.8 2990.48 4758.84 2982.8 4759 c
-2982.8 4754 l
-3022.64 4754 l
-3022.64 4759 l
-3014.64 4759.14 3012.24 4760.16 3012.24 4763.64 c
-3012.24 4765.88 3013.36 4770.68 3016.4 4781.88 c
-3017.52 4785.72 3017.52 4786.04 3018.16 4788.44 c
-3023.76 4785.56 3025.68 4784.92 3029.04 4784.92 c
-3050.8 4784.92 3073.36 4813.88 3073.36 4841.56 c
-3073.36 4853.4 3066.64 4861.08 3056.08 4861.08 c
-3046.96 4861.08 3039.92 4855.92 3030.48 4842.52 c
-h
-3047.12 4849.56 m
-3051.28 4849.24 3053.68 4845.56 3053.36 4840.44 c
-3052.72 4829.88 3047.6 4814.04 3041.84 4803.64 c
-3036.88 4795 3031.76 4789.92 3026.32 4789.92 c
-3022.8 4789.92 3020.08 4792.75 3020.08 4796.28 c
-3020.08 4799 3021.84 4805.56 3026.16 4820.12 c
-3029.68 4831.8 3031.12 4835.8 3033.52 4839.48 c
-3037.52 4845.72 3042.96 4849.88 3047.12 4849.56 c
-h
-3082 4787 m
-f*
-3117.56 4860.92 m
-3101.24 4858.36 3095 4857.4 3086.68 4856.44 c
-3086.68 4852 l
-3093.88 4851.69 3095.32 4851.07 3095.32 4848.12 c
-3095.32 4846.52 3094.04 4840.76 3091.8 4832.44 c
-3075.8 4770.36 l
-3072.76 4759.8 3071.48 4758.84 3063.8 4759 c
-3063.8 4754 l
-3103.64 4754 l
-3103.64 4759 l
-3095.64 4759.14 3093.24 4760.16 3093.24 4763.64 c
-3093.24 4765.88 3094.36 4770.68 3097.4 4781.88 c
-3098.52 4785.72 3098.52 4786.04 3099.16 4788.44 c
-3104.76 4785.56 3106.68 4784.92 3110.04 4784.92 c
-3131.8 4784.92 3154.36 4813.88 3154.36 4841.56 c
-3154.36 4853.4 3147.64 4861.08 3137.08 4861.08 c
-3127.96 4861.08 3120.92 4855.92 3111.48 4842.52 c
-h
-3128.12 4849.56 m
-3132.28 4849.24 3134.68 4845.56 3134.36 4840.44 c
-3133.72 4829.88 3128.6 4814.04 3122.84 4803.64 c
-3117.88 4795 3112.76 4789.92 3107.32 4789.92 c
-3103.8 4789.92 3101.08 4792.75 3101.08 4796.28 c
-3101.08 4799 3102.84 4805.56 3107.16 4820.12 c
-3110.68 4831.8 3112.12 4835.8 3114.52 4839.48 c
-3118.52 4845.72 3123.96 4849.88 3128.12 4849.56 c
-h
-3163 4787 m
-f*
-3196.56 4809.56 m
-3194.32 4806.36 l
-3190.16 4800.12 3186.48 4796.56 3184.08 4796.56 c
-3182.8 4796.56 3182 4797.77 3182 4799.16 c
-3182 4800.6 3182.62 4804.76 3183.12 4807.48 c
-3197.68 4860.92 l
-3189.22 4859 3178.26 4857.4 3166.04 4856.44 c
-3166.04 4852 l
-3167.44 4852 l
-3172.24 4852 3175.48 4850.44 3175.48 4847.48 c
-3175.48 4846.2 3174.71 4843.8 3173.68 4841.08 c
-3164.4 4806.68 l
-3163.12 4802.04 3163 4797.88 3163 4795.64 c
-3163 4789.56 3167.2 4785.56 3173.36 4785.56 c
-3182.96 4785.56 3188.88 4790.36 3200.08 4807.32 c
-h
-3192.88 4896.4 m
-3187.44 4896.4 3183 4891.46 3183 4886.04 c
-3183 4879.8 3187.26 4875.4 3193.04 4875.4 c
-3199.12 4875.4 3204 4879.86 3204 4885.56 c
-3204 4891.48 3199 4896.4 3192.88 4896.4 c
-h
-3206.48 4787 m
-f*
-3281.36 4808.6 m
-3274.96 4798.68 3272.88 4796.56 3270.16 4796.56 c
-3268.88 4796.56 3268 4797.63 3268 4799.16 c
-3268 4800.76 3268.94 4804.12 3271.92 4813.08 c
-3277.68 4830.52 l
-3280.24 4838.04 3282 4845.08 3282 4848.92 c
-3282 4856.76 3277.78 4861.08 3270.16 4861.08 c
-3264.24 4861.08 3258.48 4858.62 3254.16 4854.36 c
-3248.24 4848.76 3245.2 4844.92 3234.48 4829.08 c
-3244.72 4860.76 l
-3234.48 4858.52 3221.68 4856.92 3212.72 4856.6 c
-3212.72 4851.8 l
-3219.44 4851.65 3221.36 4850.92 3221.36 4848.12 c
-3221.36 4846.2 3219.12 4837.72 3214 4819.64 c
-3210.32 4806.68 3209.2 4802.52 3205.04 4787 c
-3224.4 4787 l
-3231.92 4814.68 3237.68 4828.6 3247.6 4841.56 c
-3250.8 4845.88 3255.76 4849.08 3258.64 4849.08 c
-3260.72 4849.08 3263 4847.63 3263 4846.04 c
-3263 4845.56 3262.54 4844.28 3261.84 4842.68 c
-3253.04 4816.12 l
-3250.48 4808.44 3249 4799.32 3249 4795.16 c
-3249 4789.08 3252.84 4785.56 3259.44 4785.56 c
-3269.04 4785.56 3275.6 4791 3284.88 4806.52 c
-h
-3294.96 4787 m
-f*
-3372.48 4856 m
-3354.72 4856 l
-3349.28 4859.58 3344.48 4861.08 3337.12 4861.08 c
-3317.44 4861.08 3301 4848.05 3301 4831.8 c
-3301 4823.64 3305.35 4817.88 3314.4 4814.2 c
-3301.28 4806.84 3299 4804.6 3299 4798.68 c
-3299 4793.56 3301.89 4790.52 3308.96 4788.12 c
-3299.04 4785.72 3295.84 4784.44 3292 4781.4 c
-3289.44 4779.16 3288 4775.32 3288 4771.48 c
-3288 4761.08 3299.56 4755 3317.76 4755 c
-3340.32 4755 3356 4764.72 3356 4778.52 c
-3356 4788.28 3349.6 4793.56 3332.16 4798.52 c
-3323.68 4800.92 l
-3318.56 4802.36 3315 4804.6 3315 4807 c
-3315 4809.56 3317.68 4812.28 3320 4812.28 c
-3320.8 4812.28 3321.92 4812.24 3323.2 4812.12 c
-3324.96 4811.64 3326.24 4811 3328.16 4811 c
-3335.2 4811 3342.4 4813.09 3348.48 4816.92 c
-3357.76 4822.2 3363 4830.36 3363 4839.96 c
-3363 4842.64 3362.59 4844.32 3361.76 4847 c
-3372.48 4847 l
-h
-3314.4 4786.04 m
-3316.32 4785.88 3328.48 4781.72 3332 4780.12 c
-3336.48 4777.88 3339 4775.16 3339 4771 c
-3339 4763.96 3331.8 4760 3319.36 4760 c
-3308.96 4760 3302 4765.1 3302 4772.44 c
-3302 4775.48 3303.32 4778.2 3306.24 4781.24 c
-3308.32 4783.32 3313.12 4786.2 3314.4 4786.04 c
-h
-3336.8 4856.08 m
-3340.96 4856.08 3344 4852.19 3344 4846.52 c
-3344 4841.08 3342.08 4833.4 3339.36 4827.48 c
-3336 4820.12 3331.84 4816 3326.88 4816 c
-3322.56 4816 3320 4819.52 3320 4825.88 c
-3320 4832.28 3322.79 4842.04 3326.24 4848.12 c
-3329.28 4853.4 3332.64 4856.08 3336.8 4856.08 c
-h
-3376 4787 m
-f*
-1 i
-0.564706 g
-2708.15 3969.35 m
-2573.75 4006.55 l
-2669.75 4061.75 l
-2516.15 4071.35 l
-2558.15 4140.95 l
-2410.55 4120.55 l
-2393.75 4192.55 l
-2273.75 4146.95 l
-2198.15 4210.55 l
-2122.55 4146.95 l
-2002.55 4192.55 l
-1984.55 4120.55 l
-1835.75 4140.95 l
-1880.15 4071.35 l
-1726.55 4061.75 l
-1822.55 4006.55 l
-1686.95 3969.35 l
-1822.55 3934.55 l
-1726.55 3878.15 l
-1880.15 3869.75 l
-1835.75 3800.15 l
-1984.55 3819.35 l
-2002.55 3748.55 l
-2122.55 3792.95 l
-2198.15 3729.35 l
-2273.75 3792.95 l
-2393.75 3748.55 l
-2410.55 3819.35 l
-2558.15 3800.15 l
-2516.15 3869.75 l
-2669.75 3878.15 l
-2573.75 3934.55 l
-f*
-1 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-f*
-0 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-2648.15 4029.35 l
-2609.75 4029.35 l
-2487.35 3998.15 l
-2576.15 3946.55 l
-2438.15 3938.15 l
-2478.95 3872.15 l
-2343.35 3891.35 l
-2326.55 3821.75 l
-2211.35 3864.95 l
-2138.15 3802.55 l
-2064.95 3864.95 l
-1949.75 3821.75 l
-1931.75 3891.35 l
-1796.15 3872.15 l
-1836.95 3938.15 l
-1700.15 3946.55 l
-1788.95 3998.15 l
-1666.55 4029.35 l
-1787.75 4061.75 l
-1700.15 4114.55 l
-1836.95 4121.75 l
-1796.15 4188.95 l
-1931.75 4169.75 l
-1949.75 4238.15 l
-2064.95 4196.15 l
-2138.15 4258.55 l
-2211.35 4196.15 l
-2326.55 4238.15 l
-2343.35 4169.75 l
-2478.95 4188.95 l
-2438.15 4121.75 l
-2576.15 4114.55 l
-2487.35 4061.75 l
-2609.75 4029.35 l
-2648.15 4029.35 l
-f*
-0.2 i
-1960.08 4080.76 m
-1940.08 4006.52 l
-1937.52 3997.88 1934.48 3995.64 1924.08 3995 c
-1924.08 3991 l
-1974 3991 l
-1974 3995 l
-1964.72 3995.48 1962.48 3996.76 1962.48 4001.88 c
-1962.48 4003.64 1962.8 4005.4 1963.76 4009.08 c
-1963.92 4009.88 l
-1964.08 4010.68 l
-1983.76 4082.52 l
-1986.16 4090.84 1988.56 4093.08 1996.72 4094.04 c
-1996.72 4098 l
-1962.8 4098 l
-1913.2 4021.24 l
-1904.56 4098 l
-1869.2 4098 l
-1869.2 4094 l
-1879.28 4093.52 1880.72 4092.89 1880.72 4088.44 c
-1880.72 4086.2 1880.08 4083.32 1878.96 4079.16 c
-1861.52 4019.48 l
-1855.12 3998.68 1854 3996.92 1845.36 3995 c
-1845.36 3991 l
-1878.48 3991 l
-1878.48 3995 l
-1868.24 3996.28 1865.68 3998.2 1865.68 4004.76 c
-1865.68 4007.48 1866.48 4011.48 1868.72 4019.48 c
-1884.88 4078.52 l
-1895.6 3989.08 l
-1900.08 3989.08 l
-h
-1992.24 3991 m
-f*
-2061.44 4011.32 m
-2054.88 4002.52 2052.48 3999.76 2049.92 3999.76 c
-2048.64 3999.76 2048 4000.86 2048 4002.52 c
-2048 4006.52 2049.44 4013.08 2053.44 4026.2 c
-2064.8 4063.96 l
-2047.04 4062.84 l
-2044.16 4053.4 l
-2042.72 4061.56 2039.2 4065.08 2032.32 4065.08 c
-2012.64 4065.08 1989 4034.27 1989 4009.24 c
-1989 3997.08 1995.74 3988.92 2005.92 3988.92 c
-2015.68 3988.92 2023.04 3994.68 2032.16 4010.04 c
-2030.24 4003.48 2030 4001.56 2030 3999.32 c
-2030 3993.4 2034.76 3988.76 2040.64 3988.76 c
-2048.16 3988.76 2055.52 3995 2064.8 4008.92 c
-h
-2034.56 4058.2 m
-2038.08 4057.88 2040.56 4055 2040.56 4050.68 c
-2040.56 4041.08 2035.24 4023.32 2028.96 4012.28 c
-2024.64 4004.44 2019.84 3999.92 2015.52 3999.92 c
-2011.36 3999.92 2008 4003.75 2008 4008.92 c
-2008 4017.24 2013.42 4033.24 2020.16 4045.08 c
-2024.96 4053.56 2030.24 4058.52 2034.56 4058.2 c
-h
-2072 3991 m
-f*
-2106.56 4064.92 m
-2090.24 4062.36 2084 4061.4 2075.68 4060.44 c
-2075.68 4056 l
-2082.88 4055.69 2084.32 4055.07 2084.32 4052.12 c
-2084.32 4050.52 2083.04 4044.76 2080.8 4036.44 c
-2064.8 3974.36 l
-2061.76 3963.8 2060.48 3962.84 2052.8 3963 c
-2052.8 3958 l
-2092.64 3958 l
-2092.64 3963 l
-2084.64 3963.14 2082.24 3964.16 2082.24 3967.64 c
-2082.24 3969.88 2083.36 3974.68 2086.4 3985.88 c
-2087.52 3989.72 2087.52 3990.04 2088.16 3992.44 c
-2093.76 3989.56 2095.68 3988.92 2099.04 3988.92 c
-2120.8 3988.92 2143.36 4017.88 2143.36 4045.56 c
-2143.36 4057.4 2136.64 4065.08 2126.08 4065.08 c
-2116.96 4065.08 2109.92 4059.92 2100.48 4046.52 c
-h
-2117.12 4053.56 m
-2121.28 4053.24 2123.68 4049.56 2123.36 4044.44 c
-2122.72 4033.88 2117.6 4018.04 2111.84 4007.64 c
-2106.88 3999 2101.76 3993.92 2096.32 3993.92 c
-2092.8 3993.92 2090.08 3996.75 2090.08 4000.28 c
-2090.08 4003 2091.84 4009.56 2096.16 4024.12 c
-2099.68 4035.8 2101.12 4039.8 2103.52 4043.48 c
-2107.52 4049.72 2112.96 4053.88 2117.12 4053.56 c
-h
-2152 3991 m
-f*
-2187.56 4064.92 m
-2171.24 4062.36 2165 4061.4 2156.68 4060.44 c
-2156.68 4056 l
-2163.88 4055.69 2165.32 4055.07 2165.32 4052.12 c
-2165.32 4050.52 2164.04 4044.76 2161.8 4036.44 c
-2145.8 3974.36 l
-2142.76 3963.8 2141.48 3962.84 2133.8 3963 c
-2133.8 3958 l
-2173.64 3958 l
-2173.64 3963 l
-2165.64 3963.14 2163.24 3964.16 2163.24 3967.64 c
-2163.24 3969.88 2164.36 3974.68 2167.4 3985.88 c
-2168.52 3989.72 2168.52 3990.04 2169.16 3992.44 c
-2174.76 3989.56 2176.68 3988.92 2180.04 3988.92 c
-2201.8 3988.92 2224.36 4017.88 2224.36 4045.56 c
-2224.36 4057.4 2217.64 4065.08 2207.08 4065.08 c
-2197.96 4065.08 2190.92 4059.92 2181.48 4046.52 c
-h
-2198.12 4053.56 m
-2202.28 4053.24 2204.68 4049.56 2204.36 4044.44 c
-2203.72 4033.88 2198.6 4018.04 2192.84 4007.64 c
-2187.88 3999 2182.76 3993.92 2177.32 3993.92 c
-2173.8 3993.92 2171.08 3996.75 2171.08 4000.28 c
-2171.08 4003 2172.84 4009.56 2177.16 4024.12 c
-2180.68 4035.8 2182.12 4039.8 2184.52 4043.48 c
-2188.52 4049.72 2193.96 4053.88 2198.12 4053.56 c
-h
-2233 3991 m
-f*
-2266.56 4013.56 m
-2264.32 4010.36 l
-2260.16 4004.12 2256.48 4000.56 2254.08 4000.56 c
-2252.8 4000.56 2252 4001.77 2252 4003.16 c
-2252 4004.6 2252.62 4008.76 2253.12 4011.48 c
-2267.68 4064.92 l
-2259.22 4063 2248.26 4061.4 2236.04 4060.44 c
-2236.04 4056 l
-2237.44 4056 l
-2242.24 4056 2245.48 4054.44 2245.48 4051.48 c
-2245.48 4050.2 2244.71 4047.8 2243.68 4045.08 c
-2234.4 4010.68 l
-2233.12 4006.04 2233 4001.88 2233 3999.64 c
-2233 3993.56 2237.2 3989.56 2243.36 3989.56 c
-2252.96 3989.56 2258.88 3994.36 2270.08 4011.32 c
-h
-2262.88 4100.4 m
-2257.44 4100.4 2253 4095.46 2253 4090.04 c
-2253 4083.8 2257.26 4079.4 2263.04 4079.4 c
-2269.12 4079.4 2274 4083.86 2274 4089.56 c
-2274 4095.48 2269 4100.4 2262.88 4100.4 c
-h
-2276.48 3991 m
-f*
-2351.36 4012.6 m
-2344.96 4002.68 2342.88 4000.56 2340.16 4000.56 c
-2338.88 4000.56 2338 4001.63 2338 4003.16 c
-2338 4004.76 2338.94 4008.12 2341.92 4017.08 c
-2347.68 4034.52 l
-2350.24 4042.04 2352 4049.08 2352 4052.92 c
-2352 4060.76 2347.78 4065.08 2340.16 4065.08 c
-2334.24 4065.08 2328.48 4062.62 2324.16 4058.36 c
-2318.24 4052.76 2315.2 4048.92 2304.48 4033.08 c
-2314.72 4064.76 l
-2304.48 4062.52 2291.68 4060.92 2282.72 4060.6 c
-2282.72 4055.8 l
-2289.44 4055.65 2291.36 4054.92 2291.36 4052.12 c
-2291.36 4050.2 2289.12 4041.72 2284 4023.64 c
-2280.32 4010.68 2279.2 4006.52 2275.04 3991 c
-2294.4 3991 l
-2301.92 4018.68 2307.68 4032.6 2317.6 4045.56 c
-2320.8 4049.88 2325.76 4053.08 2328.64 4053.08 c
-2330.72 4053.08 2333 4051.63 2333 4050.04 c
-2333 4049.56 2332.54 4048.28 2331.84 4046.68 c
-2323.04 4020.12 l
-2320.48 4012.44 2319 4003.32 2319 3999.16 c
-2319 3993.08 2322.84 3989.56 2329.44 3989.56 c
-2339.04 3989.56 2345.6 3995 2354.88 4010.52 c
-h
-2364.96 3991 m
-f*
-2442.48 4060 m
-2424.72 4060 l
-2419.28 4063.58 2414.48 4065.08 2407.12 4065.08 c
-2387.44 4065.08 2371 4052.05 2371 4035.8 c
-2371 4027.64 2375.35 4021.88 2384.4 4018.2 c
-2371.28 4010.84 2369 4008.6 2369 4002.68 c
-2369 3997.56 2371.89 3994.52 2378.96 3992.12 c
-2369.04 3989.72 2365.84 3988.44 2362 3985.4 c
-2359.44 3983.16 2358 3979.32 2358 3975.48 c
-2358 3965.08 2369.56 3959 2387.76 3959 c
-2410.32 3959 2426 3968.72 2426 3982.52 c
-2426 3992.28 2419.6 3997.56 2402.16 4002.52 c
-2393.68 4004.92 l
-2388.56 4006.36 2385 4008.6 2385 4011 c
-2385 4013.56 2387.68 4016.28 2390 4016.28 c
-2390.8 4016.28 2391.92 4016.24 2393.2 4016.12 c
-2394.96 4015.64 2396.24 4015 2398.16 4015 c
-2405.2 4015 2412.4 4017.09 2418.48 4020.92 c
-2427.76 4026.2 2433 4034.36 2433 4043.96 c
-2433 4046.64 2432.59 4048.32 2431.76 4051 c
-2442.48 4051 l
-h
-2384.4 3990.04 m
-2386.32 3989.88 2398.48 3985.72 2402 3984.12 c
-2406.48 3981.88 2409 3979.16 2409 3975 c
-2409 3967.96 2401.8 3964 2389.36 3964 c
-2378.96 3964 2372 3969.1 2372 3976.44 c
-2372 3979.48 2373.32 3982.2 2376.24 3985.24 c
-2378.32 3987.32 2383.12 3990.2 2384.4 3990.04 c
-h
-2406.8 4060.08 m
-2410.96 4060.08 2414 4056.19 2414 4050.52 c
-2414 4045.08 2412.08 4037.4 2409.36 4031.48 c
-2406 4024.12 2401.84 4020 2396.88 4020 c
-2392.56 4020 2390 4023.52 2390 4029.88 c
-2390 4036.28 2392.79 4046.04 2396.24 4052.12 c
-2399.28 4057.4 2402.64 4060.08 2406.8 4060.08 c
-h
-2446 3991 m
-f*
-1 i
-0.564706 g
-2894.15 2729.75 m
-2758.55 2765.75 l
-2854.55 2822.15 l
-2700.95 2830.55 l
-2744.15 2901.35 l
-2596.55 2880.95 l
-2578.55 2951.75 l
-2458.55 2907.35 l
-2384.15 2970.95 l
-2307.35 2907.35 l
-2187.35 2951.75 l
-2169.35 2880.95 l
-2020.55 2901.35 l
-2064.95 2830.55 l
-1911.35 2822.15 l
-2007.35 2765.75 l
-1871.75 2729.75 l
-2007.35 2694.95 l
-1911.35 2638.55 l
-2064.95 2630.15 l
-2020.55 2559.35 l
-2169.35 2579.75 l
-2187.35 2508.95 l
-2307.35 2553.35 l
-2384.15 2489.75 l
-2458.55 2553.35 l
-2578.55 2508.95 l
-2596.55 2579.75 l
-2744.15 2559.35 l
-2700.95 2630.15 l
-2854.55 2638.55 l
-2758.55 2694.95 l
-f*
-1 g
-2834.15 2789.75 m
-2698.55 2825.75 l
-2794.55 2882.15 l
-2640.95 2890.55 l
-2684.15 2961.35 l
-2536.55 2940.95 l
-2518.55 3011.75 l
-2398.55 2967.35 l
-2324.15 3030.95 l
-2247.35 2967.35 l
-2127.35 3011.75 l
-2109.35 2940.95 l
-1960.55 2961.35 l
-2004.95 2890.55 l
-1851.35 2882.15 l
-1947.35 2825.75 l
-1811.75 2789.75 l
-1947.35 2754.95 l
-1851.35 2698.55 l
-2004.95 2690.15 l
-1960.55 2619.35 l
-2109.35 2639.75 l
-2127.35 2568.95 l
-2247.35 2613.35 l
-2324.15 2549.75 l
-2398.55 2613.35 l
-2518.55 2568.95 l
-2536.55 2639.75 l
-2684.15 2619.35 l
-2640.95 2690.15 l
-2794.55 2698.55 l
-2698.55 2754.95 l
-f*
-0 g
-2834.15 2789.75 m
-2698.55 2825.75 l
-2794.55 2882.15 l
-2640.95 2890.55 l
-2684.15 2961.35 l
-2536.55 2940.95 l
-2518.55 3011.75 l
-2398.55 2967.35 l
-2324.15 3030.95 l
-2247.35 2967.35 l
-2127.35 3011.75 l
-2109.35 2940.95 l
-1960.55 2961.35 l
-2004.95 2890.55 l
-1851.35 2882.15 l
-1947.35 2825.75 l
-1811.75 2789.75 l
-1947.35 2754.95 l
-1851.35 2698.55 l
-2004.95 2690.15 l
-1960.55 2619.35 l
-2109.35 2639.75 l
-2127.35 2568.95 l
-2247.35 2613.35 l
-2324.15 2549.75 l
-2398.55 2613.35 l
-2518.55 2568.95 l
-2536.55 2639.75 l
-2684.15 2619.35 l
-2640.95 2690.15 l
-2794.55 2698.55 l
-2698.55 2754.95 l
-2834.15 2789.75 l
-2794.55 2789.75 l
-2672.15 2758.55 l
-2760.95 2705.75 l
-2624.15 2698.55 l
-2663.75 2632.55 l
-2528.15 2650.55 l
-2511.35 2582.15 l
-2396.15 2624.15 l
-2324.15 2561.75 l
-2249.75 2624.15 l
-2134.55 2582.15 l
-2117.75 2650.55 l
-1980.95 2632.55 l
-2021.75 2698.55 l
-1884.95 2705.75 l
-1973.75 2758.55 l
-1851.35 2789.75 l
-1972.55 2822.15 l
-1884.95 2874.95 l
-2021.75 2882.15 l
-1980.95 2948.15 l
-2117.75 2930.15 l
-2134.55 2998.55 l
-2249.75 2956.55 l
-2324.15 3018.95 l
-2396.15 2956.55 l
-2511.35 2998.55 l
-2528.15 2930.15 l
-2663.75 2948.15 l
-2624.15 2882.15 l
-2760.95 2874.95 l
-2672.15 2822.15 l
-2794.55 2789.75 l
-2834.15 2789.75 l
-f*
-0.2 i
-2145.08 2840.76 m
-2125.08 2766.52 l
-2122.52 2757.88 2119.48 2755.64 2109.08 2755 c
-2109.08 2751 l
-2159 2751 l
-2159 2755 l
-2149.72 2755.48 2147.48 2756.76 2147.48 2761.88 c
-2147.48 2763.64 2147.8 2765.4 2148.76 2769.08 c
-2148.92 2769.88 l
-2149.08 2770.68 l
-2168.76 2842.52 l
-2171.16 2850.84 2173.56 2853.08 2181.72 2854.04 c
-2181.72 2858 l
-2147.8 2858 l
-2098.2 2781.24 l
-2089.56 2858 l
-2054.2 2858 l
-2054.2 2854 l
-2064.28 2853.52 2065.72 2852.89 2065.72 2848.44 c
-2065.72 2846.2 2065.08 2843.32 2063.96 2839.16 c
-2046.52 2779.48 l
-2040.12 2758.68 2039 2756.92 2030.36 2755 c
-2030.36 2751 l
-2063.48 2751 l
-2063.48 2755 l
-2053.24 2756.28 2050.68 2758.2 2050.68 2764.76 c
-2050.68 2767.48 2051.48 2771.48 2053.72 2779.48 c
-2069.88 2838.52 l
-2080.6 2749.08 l
-2085.08 2749.08 l
-h
-2177.24 2751 m
-f*
-2247.44 2771.32 m
-2240.88 2762.52 2238.48 2759.76 2235.92 2759.76 c
-2234.64 2759.76 2234 2760.86 2234 2762.52 c
-2234 2766.52 2235.44 2773.08 2239.44 2786.2 c
-2250.8 2823.96 l
-2233.04 2822.84 l
-2230.16 2813.4 l
-2228.72 2821.56 2225.2 2825.08 2218.32 2825.08 c
-2198.64 2825.08 2175 2794.27 2175 2769.24 c
-2175 2757.08 2181.74 2748.92 2191.92 2748.92 c
-2201.68 2748.92 2209.04 2754.68 2218.16 2770.04 c
-2216.24 2763.48 2216 2761.56 2216 2759.32 c
-2216 2753.4 2220.76 2748.76 2226.64 2748.76 c
-2234.16 2748.76 2241.52 2755 2250.8 2768.92 c
-h
-2220.56 2818.2 m
-2224.08 2817.88 2226.56 2815 2226.56 2810.68 c
-2226.56 2801.08 2221.24 2783.32 2214.96 2772.28 c
-2210.64 2764.44 2205.84 2759.92 2201.52 2759.92 c
-2197.36 2759.92 2194 2763.75 2194 2768.92 c
-2194 2777.24 2199.42 2793.24 2206.16 2805.08 c
-2210.96 2813.56 2216.24 2818.52 2220.56 2818.2 c
-h
-2258 2751 m
-f*
-2291.56 2824.92 m
-2275.24 2822.36 2269 2821.4 2260.68 2820.44 c
-2260.68 2816 l
-2267.88 2815.69 2269.32 2815.07 2269.32 2812.12 c
-2269.32 2810.52 2268.04 2804.76 2265.8 2796.44 c
-2249.8 2734.36 l
-2246.76 2723.8 2245.48 2722.84 2237.8 2723 c
-2237.8 2718 l
-2277.64 2718 l
-2277.64 2723 l
-2269.64 2723.14 2267.24 2724.16 2267.24 2727.64 c
-2267.24 2729.88 2268.36 2734.68 2271.4 2745.88 c
-2272.52 2749.72 2272.52 2750.04 2273.16 2752.44 c
-2278.76 2749.56 2280.68 2748.92 2284.04 2748.92 c
-2305.8 2748.92 2328.36 2777.88 2328.36 2805.56 c
-2328.36 2817.4 2321.64 2825.08 2311.08 2825.08 c
-2301.96 2825.08 2294.92 2819.92 2285.48 2806.52 c
-h
-2302.12 2813.56 m
-2306.28 2813.24 2308.68 2809.56 2308.36 2804.44 c
-2307.72 2793.88 2302.6 2778.04 2296.84 2767.64 c
-2291.88 2759 2286.76 2753.92 2281.32 2753.92 c
-2277.8 2753.92 2275.08 2756.75 2275.08 2760.28 c
-2275.08 2763 2276.84 2769.56 2281.16 2784.12 c
-2284.68 2795.8 2286.12 2799.8 2288.52 2803.48 c
-2292.52 2809.72 2297.96 2813.88 2302.12 2813.56 c
-h
-2337 2751 m
-f*
-2371.56 2824.92 m
-2355.24 2822.36 2349 2821.4 2340.68 2820.44 c
-2340.68 2816 l
-2347.88 2815.69 2349.32 2815.07 2349.32 2812.12 c
-2349.32 2810.52 2348.04 2804.76 2345.8 2796.44 c
-2329.8 2734.36 l
-2326.76 2723.8 2325.48 2722.84 2317.8 2723 c
-2317.8 2718 l
-2357.64 2718 l
-2357.64 2723 l
-2349.64 2723.14 2347.24 2724.16 2347.24 2727.64 c
-2347.24 2729.88 2348.36 2734.68 2351.4 2745.88 c
-2352.52 2749.72 2352.52 2750.04 2353.16 2752.44 c
-2358.76 2749.56 2360.68 2748.92 2364.04 2748.92 c
-2385.8 2748.92 2408.36 2777.88 2408.36 2805.56 c
-2408.36 2817.4 2401.64 2825.08 2391.08 2825.08 c
-2381.96 2825.08 2374.92 2819.92 2365.48 2806.52 c
-h
-2382.12 2813.56 m
-2386.28 2813.24 2388.68 2809.56 2388.36 2804.44 c
-2387.72 2793.88 2382.6 2778.04 2376.84 2767.64 c
-2371.88 2759 2366.76 2753.92 2361.32 2753.92 c
-2357.8 2753.92 2355.08 2756.75 2355.08 2760.28 c
-2355.08 2763 2356.84 2769.56 2361.16 2784.12 c
-2364.68 2795.8 2366.12 2799.8 2368.52 2803.48 c
-2372.52 2809.72 2377.96 2813.88 2382.12 2813.56 c
-h
-2417 2751 m
-f*
-2452.56 2773.56 m
-2450.32 2770.36 l
-2446.16 2764.12 2442.48 2760.56 2440.08 2760.56 c
-2438.8 2760.56 2438 2761.77 2438 2763.16 c
-2438 2764.6 2438.62 2768.76 2439.12 2771.48 c
-2453.68 2824.92 l
-2445.22 2823 2434.26 2821.4 2422.04 2820.44 c
-2422.04 2816 l
-2423.44 2816 l
-2428.24 2816 2431.48 2814.44 2431.48 2811.48 c
-2431.48 2810.2 2430.71 2807.8 2429.68 2805.08 c
-2420.4 2770.68 l
-2419.12 2766.04 2419 2761.88 2419 2759.64 c
-2419 2753.56 2423.2 2749.56 2429.36 2749.56 c
-2438.96 2749.56 2444.88 2754.36 2456.08 2771.32 c
-h
-2448.88 2860.4 m
-2443.44 2860.4 2439 2855.46 2439 2850.04 c
-2439 2843.8 2443.26 2839.4 2449.04 2839.4 c
-2455.12 2839.4 2460 2843.86 2460 2849.56 c
-2460 2855.48 2455 2860.4 2448.88 2860.4 c
-h
-2462.48 2751 m
-f*
-2536.36 2772.6 m
-2529.96 2762.68 2527.88 2760.56 2525.16 2760.56 c
-2523.88 2760.56 2523 2761.63 2523 2763.16 c
-2523 2764.76 2523.94 2768.12 2526.92 2777.08 c
-2532.68 2794.52 l
-2535.24 2802.04 2537 2809.08 2537 2812.92 c
-2537 2820.76 2532.78 2825.08 2525.16 2825.08 c
-2519.24 2825.08 2513.48 2822.62 2509.16 2818.36 c
-2503.24 2812.76 2500.2 2808.92 2489.48 2793.08 c
-2499.72 2824.76 l
-2489.48 2822.52 2476.68 2820.92 2467.72 2820.6 c
-2467.72 2815.8 l
-2474.44 2815.65 2476.36 2814.92 2476.36 2812.12 c
-2476.36 2810.2 2474.12 2801.72 2469 2783.64 c
-2465.32 2770.68 2464.2 2766.52 2460.04 2751 c
-2479.4 2751 l
-2486.92 2778.68 2492.68 2792.6 2502.6 2805.56 c
-2505.8 2809.88 2510.76 2813.08 2513.64 2813.08 c
-2515.72 2813.08 2518 2811.63 2518 2810.04 c
-2518 2809.56 2517.54 2808.28 2516.84 2806.68 c
-2508.04 2780.12 l
-2505.48 2772.44 2504 2763.32 2504 2759.16 c
-2504 2753.08 2507.84 2749.56 2514.44 2749.56 c
-2524.04 2749.56 2530.6 2755 2539.88 2770.52 c
-h
-2549.96 2751 m
-f*
-2627.48 2820 m
-2609.72 2820 l
-2604.28 2823.58 2599.48 2825.08 2592.12 2825.08 c
-2572.44 2825.08 2556 2812.05 2556 2795.8 c
-2556 2787.64 2560.35 2781.88 2569.4 2778.2 c
-2556.28 2770.84 2554 2768.6 2554 2762.68 c
-2554 2757.56 2556.89 2754.52 2563.96 2752.12 c
-2554.04 2749.72 2550.84 2748.44 2547 2745.4 c
-2544.44 2743.16 2543 2739.32 2543 2735.48 c
-2543 2725.08 2554.56 2719 2572.76 2719 c
-2595.32 2719 2611 2728.72 2611 2742.52 c
-2611 2752.28 2604.6 2757.56 2587.16 2762.52 c
-2578.68 2764.92 l
-2573.56 2766.36 2570 2768.6 2570 2771 c
-2570 2773.56 2572.68 2776.28 2575 2776.28 c
-2575.8 2776.28 2576.92 2776.24 2578.2 2776.12 c
-2579.96 2775.64 2581.24 2775 2583.16 2775 c
-2590.2 2775 2597.4 2777.09 2603.48 2780.92 c
-2612.76 2786.2 2618 2794.36 2618 2803.96 c
-2618 2806.64 2617.59 2808.32 2616.76 2811 c
-2627.48 2811 l
-h
-2569.4 2750.04 m
-2571.32 2749.88 2583.48 2745.72 2587 2744.12 c
-2591.48 2741.88 2594 2739.16 2594 2735 c
-2594 2727.96 2586.8 2724 2574.36 2724 c
-2563.96 2724 2557 2729.1 2557 2736.44 c
-2557 2739.48 2558.32 2742.2 2561.24 2745.24 c
-2563.32 2747.32 2568.12 2750.2 2569.4 2750.04 c
-h
-2591.8 2820.08 m
-2595.96 2820.08 2599 2816.19 2599 2810.52 c
-2599 2805.08 2597.08 2797.4 2594.36 2791.48 c
-2591 2784.12 2586.84 2780 2581.88 2780 c
-2577.56 2780 2575 2783.52 2575 2789.88 c
-2575 2796.28 2577.79 2806.04 2581.24 2812.12 c
-2584.28 2817.4 2587.64 2820.08 2591.8 2820.08 c
-h
-2631 2751 m
-f*
-1 i
-0.564706 g
-4908.95 2769.35 m
-4773.35 2806.55 l
-4869.35 2861.75 l
-4715.75 2871.35 l
-4758.95 2940.95 l
-4611.35 2920.55 l
-4593.35 2992.55 l
-4473.35 2946.95 l
-4398.95 3010.55 l
-4322.15 2946.95 l
-4202.15 2992.55 l
-4185.35 2920.55 l
-4036.55 2940.95 l
-4079.75 2871.35 l
-3926.15 2861.75 l
-4022.15 2806.55 l
-3887.75 2769.35 l
-4022.15 2734.55 l
-3926.15 2678.15 l
-4079.75 2669.75 l
-4036.55 2600.15 l
-4185.35 2619.35 l
-4202.15 2548.55 l
-4322.15 2592.95 l
-4398.95 2529.35 l
-4473.35 2592.95 l
-4593.35 2548.55 l
-4611.35 2619.35 l
-4758.95 2600.15 l
-4715.75 2669.75 l
-4869.35 2678.15 l
-4773.35 2734.55 l
-f*
-1 g
-4848.95 2829.35 m
-4713.35 2866.55 l
-4809.35 2921.75 l
-4655.75 2931.35 l
-4698.95 3000.95 l
-4551.35 2980.55 l
-4533.35 3052.55 l
-4413.35 3006.95 l
-4338.95 3070.55 l
-4262.15 3006.95 l
-4142.15 3052.55 l
-4125.35 2980.55 l
-3976.55 3000.95 l
-4019.75 2931.35 l
-3866.15 2921.75 l
-3962.15 2866.55 l
-3827.75 2829.35 l
-3962.15 2794.55 l
-3866.15 2738.15 l
-4019.75 2729.75 l
-3976.55 2660.15 l
-4125.35 2679.35 l
-4142.15 2608.55 l
-4262.15 2652.95 l
-4338.95 2589.35 l
-4413.35 2652.95 l
-4533.35 2608.55 l
-4551.35 2679.35 l
-4698.95 2660.15 l
-4655.75 2729.75 l
-4809.35 2738.15 l
-4713.35 2794.55 l
-f*
-0 g
-4848.95 2829.35 m
-4713.35 2866.55 l
-4809.35 2921.75 l
-4655.75 2931.35 l
-4698.95 3000.95 l
-4551.35 2980.55 l
-4533.35 3052.55 l
-4413.35 3006.95 l
-4338.95 3070.55 l
-4262.15 3006.95 l
-4142.15 3052.55 l
-4125.35 2980.55 l
-3976.55 3000.95 l
-4019.75 2931.35 l
-3866.15 2921.75 l
-3962.15 2866.55 l
-3827.75 2829.35 l
-3962.15 2794.55 l
-3866.15 2738.15 l
-4019.75 2729.75 l
-3976.55 2660.15 l
-4125.35 2679.35 l
-4142.15 2608.55 l
-4262.15 2652.95 l
-4338.95 2589.35 l
-4413.35 2652.95 l
-4533.35 2608.55 l
-4551.35 2679.35 l
-4698.95 2660.15 l
-4655.75 2729.75 l
-4809.35 2738.15 l
-4713.35 2794.55 l
-4848.95 2829.35 l
-4809.35 2829.35 l
-4686.95 2798.15 l
-4775.75 2746.55 l
-4638.95 2738.15 l
-4678.55 2672.15 l
-4544.15 2691.35 l
-4526.15 2621.75 l
-4410.95 2664.95 l
-4338.95 2602.55 l
-4264.55 2664.95 l
-4149.35 2621.75 l
-4132.55 2691.35 l
-3995.75 2672.15 l
-4037.75 2738.15 l
-3899.75 2746.55 l
-3988.55 2798.15 l
-3866.15 2829.35 l
-3987.35 2861.75 l
-3899.75 2914.55 l
-4037.75 2921.75 l
-3995.75 2988.95 l
-4132.55 2969.75 l
-4149.35 3038.15 l
-4264.55 2996.15 l
-4338.95 3058.55 l
-4410.95 2996.15 l
-4526.15 3038.15 l
-4544.15 2969.75 l
-4678.55 2988.95 l
-4638.95 2921.75 l
-4775.75 2914.55 l
-4686.95 2861.75 l
-4809.35 2829.35 l
-4848.95 2829.35 l
-f*
-0.2 i
-4160.08 2880.76 m
-4140.08 2806.52 l
-4137.52 2797.88 4134.48 2795.64 4124.08 2795 c
-4124.08 2791 l
-4174 2791 l
-4174 2795 l
-4164.72 2795.48 4162.48 2796.76 4162.48 2801.88 c
-4162.48 2803.64 4162.8 2805.4 4163.76 2809.08 c
-4163.92 2809.88 l
-4164.08 2810.68 l
-4183.76 2882.52 l
-4186.16 2890.84 4188.56 2893.08 4196.72 2894.04 c
-4196.72 2898 l
-4162.8 2898 l
-4113.2 2821.24 l
-4104.56 2898 l
-4069.2 2898 l
-4069.2 2894 l
-4079.28 2893.52 4080.72 2892.89 4080.72 2888.44 c
-4080.72 2886.2 4080.08 2883.32 4078.96 2879.16 c
-4061.52 2819.48 l
-4055.12 2798.68 4054 2796.92 4045.36 2795 c
-4045.36 2791 l
-4078.48 2791 l
-4078.48 2795 l
-4068.24 2796.28 4065.68 2798.2 4065.68 2804.76 c
-4065.68 2807.48 4066.48 2811.48 4068.72 2819.48 c
-4084.88 2878.52 l
-4095.6 2789.08 l
-4100.08 2789.08 l
-h
-4192.24 2791 m
-f*
-4262.44 2811.32 m
-4255.88 2802.52 4253.48 2799.76 4250.92 2799.76 c
-4249.64 2799.76 4249 2800.86 4249 2802.52 c
-4249 2806.52 4250.44 2813.08 4254.44 2826.2 c
-4265.8 2863.96 l
-4248.04 2862.84 l
-4245.16 2853.4 l
-4243.72 2861.56 4240.2 2865.08 4233.32 2865.08 c
-4213.64 2865.08 4190 2834.27 4190 2809.24 c
-4190 2797.08 4196.74 2788.92 4206.92 2788.92 c
-4216.68 2788.92 4224.04 2794.68 4233.16 2810.04 c
-4231.24 2803.48 4231 2801.56 4231 2799.32 c
-4231 2793.4 4235.76 2788.76 4241.64 2788.76 c
-4249.16 2788.76 4256.52 2795 4265.8 2808.92 c
-h
-4235.56 2858.2 m
-4239.08 2857.88 4241.56 2855 4241.56 2850.68 c
-4241.56 2841.08 4236.24 2823.32 4229.96 2812.28 c
-4225.64 2804.44 4220.84 2799.92 4216.52 2799.92 c
-4212.36 2799.92 4209 2803.75 4209 2808.92 c
-4209 2817.24 4214.42 2833.24 4221.16 2845.08 c
-4225.96 2853.56 4231.24 2858.52 4235.56 2858.2 c
-h
-4273 2791 m
-f*
-4306.56 2864.92 m
-4290.24 2862.36 4284 2861.4 4275.68 2860.44 c
-4275.68 2856 l
-4282.88 2855.69 4284.32 2855.07 4284.32 2852.12 c
-4284.32 2850.52 4283.04 2844.76 4280.8 2836.44 c
-4264.8 2774.36 l
-4261.76 2763.8 4260.48 2762.84 4252.8 2763 c
-4252.8 2758 l
-4292.64 2758 l
-4292.64 2763 l
-4284.64 2763.14 4282.24 2764.16 4282.24 2767.64 c
-4282.24 2769.88 4283.36 2774.68 4286.4 2785.88 c
-4287.52 2789.72 4287.52 2790.04 4288.16 2792.44 c
-4293.76 2789.56 4295.68 2788.92 4299.04 2788.92 c
-4320.8 2788.92 4343.36 2817.88 4343.36 2845.56 c
-4343.36 2857.4 4336.64 2865.08 4326.08 2865.08 c
-4316.96 2865.08 4309.92 2859.92 4300.48 2846.52 c
-h
-4317.12 2853.56 m
-4321.28 2853.24 4323.68 2849.56 4323.36 2844.44 c
-4322.72 2833.88 4317.6 2818.04 4311.84 2807.64 c
-4306.88 2799 4301.76 2793.92 4296.32 2793.92 c
-4292.8 2793.92 4290.08 2796.75 4290.08 2800.28 c
-4290.08 2803 4291.84 2809.56 4296.16 2824.12 c
-4299.68 2835.8 4301.12 2839.8 4303.52 2843.48 c
-4307.52 2849.72 4312.96 2853.88 4317.12 2853.56 c
-h
-4352 2791 m
-f*
-4386.56 2864.92 m
-4370.24 2862.36 4364 2861.4 4355.68 2860.44 c
-4355.68 2856 l
-4362.88 2855.69 4364.32 2855.07 4364.32 2852.12 c
-4364.32 2850.52 4363.04 2844.76 4360.8 2836.44 c
-4344.8 2774.36 l
-4341.76 2763.8 4340.48 2762.84 4332.8 2763 c
-4332.8 2758 l
-4372.64 2758 l
-4372.64 2763 l
-4364.64 2763.14 4362.24 2764.16 4362.24 2767.64 c
-4362.24 2769.88 4363.36 2774.68 4366.4 2785.88 c
-4367.52 2789.72 4367.52 2790.04 4368.16 2792.44 c
-4373.76 2789.56 4375.68 2788.92 4379.04 2788.92 c
-4400.8 2788.92 4423.36 2817.88 4423.36 2845.56 c
-4423.36 2857.4 4416.64 2865.08 4406.08 2865.08 c
-4396.96 2865.08 4389.92 2859.92 4380.48 2846.52 c
-h
-4397.12 2853.56 m
-4401.28 2853.24 4403.68 2849.56 4403.36 2844.44 c
-4402.72 2833.88 4397.6 2818.04 4391.84 2807.64 c
-4386.88 2799 4381.76 2793.92 4376.32 2793.92 c
-4372.8 2793.92 4370.08 2796.75 4370.08 2800.28 c
-4370.08 2803 4371.84 2809.56 4376.16 2824.12 c
-4379.68 2835.8 4381.12 2839.8 4383.52 2843.48 c
-4387.52 2849.72 4392.96 2853.88 4397.12 2853.56 c
-h
-4432 2791 m
-f*
-4467.56 2813.56 m
-4465.32 2810.36 l
-4461.16 2804.12 4457.48 2800.56 4455.08 2800.56 c
-4453.8 2800.56 4453 2801.77 4453 2803.16 c
-4453 2804.6 4453.62 2808.76 4454.12 2811.48 c
-4468.68 2864.92 l
-4460.22 2863 4449.26 2861.4 4437.04 2860.44 c
-4437.04 2856 l
-4438.44 2856 l
-4443.24 2856 4446.48 2854.44 4446.48 2851.48 c
-4446.48 2850.2 4445.71 2847.8 4444.68 2845.08 c
-4435.4 2810.68 l
-4434.12 2806.04 4434 2801.88 4434 2799.64 c
-4434 2793.56 4438.2 2789.56 4444.36 2789.56 c
-4453.96 2789.56 4459.88 2794.36 4471.08 2811.32 c
-h
-4463.88 2900.4 m
-4458.44 2900.4 4454 2895.46 4454 2890.04 c
-4454 2883.8 4458.26 2879.4 4464.04 2879.4 c
-4470.12 2879.4 4475 2883.86 4475 2889.56 c
-4475 2895.48 4470 2900.4 4463.88 2900.4 c
-h
-4477.48 2791 m
-f*
-4551.36 2812.6 m
-4544.96 2802.68 4542.88 2800.56 4540.16 2800.56 c
-4538.88 2800.56 4538 2801.63 4538 2803.16 c
-4538 2804.76 4538.94 2808.12 4541.92 2817.08 c
-4547.68 2834.52 l
-4550.24 2842.04 4552 2849.08 4552 2852.92 c
-4552 2860.76 4547.78 2865.08 4540.16 2865.08 c
-4534.24 2865.08 4528.48 2862.62 4524.16 2858.36 c
-4518.24 2852.76 4515.2 2848.92 4504.48 2833.08 c
-4514.72 2864.76 l
-4504.48 2862.52 4491.68 2860.92 4482.72 2860.6 c
-4482.72 2855.8 l
-4489.44 2855.65 4491.36 2854.92 4491.36 2852.12 c
-4491.36 2850.2 4489.12 2841.72 4484 2823.64 c
-4480.32 2810.68 4479.2 2806.52 4475.04 2791 c
-4494.4 2791 l
-4501.92 2818.68 4507.68 2832.6 4517.6 2845.56 c
-4520.8 2849.88 4525.76 2853.08 4528.64 2853.08 c
-4530.72 2853.08 4533 2851.63 4533 2850.04 c
-4533 2849.56 4532.54 2848.28 4531.84 2846.68 c
-4523.04 2820.12 l
-4520.48 2812.44 4519 2803.32 4519 2799.16 c
-4519 2793.08 4522.84 2789.56 4529.44 2789.56 c
-4539.04 2789.56 4545.6 2795 4554.88 2810.52 c
-h
-4564.96 2791 m
-f*
-4642.48 2860 m
-4624.72 2860 l
-4619.28 2863.58 4614.48 2865.08 4607.12 2865.08 c
-4587.44 2865.08 4571 2852.05 4571 2835.8 c
-4571 2827.64 4575.35 2821.88 4584.4 2818.2 c
-4571.28 2810.84 4569 2808.6 4569 2802.68 c
-4569 2797.56 4571.89 2794.52 4578.96 2792.12 c
-4569.04 2789.72 4565.84 2788.44 4562 2785.4 c
-4559.44 2783.16 4558 2779.32 4558 2775.48 c
-4558 2765.08 4569.56 2759 4587.76 2759 c
-4610.32 2759 4626 2768.72 4626 2782.52 c
-4626 2792.28 4619.6 2797.56 4602.16 2802.52 c
-4593.68 2804.92 l
-4588.56 2806.36 4585 2808.6 4585 2811 c
-4585 2813.56 4587.68 2816.28 4590 2816.28 c
-4590.8 2816.28 4591.92 2816.24 4593.2 2816.12 c
-4594.96 2815.64 4596.24 2815 4598.16 2815 c
-4605.2 2815 4612.4 2817.09 4618.48 2820.92 c
-4627.76 2826.2 4633 2834.36 4633 2843.96 c
-4633 2846.64 4632.59 2848.32 4631.76 2851 c
-4642.48 2851 l
-h
-4584.4 2790.04 m
-4586.32 2789.88 4598.48 2785.72 4602 2784.12 c
-4606.48 2781.88 4609 2779.16 4609 2775 c
-4609 2767.96 4601.8 2764 4589.36 2764 c
-4578.96 2764 4572 2769.1 4572 2776.44 c
-4572 2779.48 4573.32 2782.2 4576.24 2785.24 c
-4578.32 2787.32 4583.12 2790.2 4584.4 2790.04 c
-h
-4606.8 2860.08 m
-4610.96 2860.08 4614 2856.19 4614 2850.52 c
-4614 2845.08 4612.08 2837.4 4609.36 2831.48 c
-4606 2824.12 4601.84 2820 4596.88 2820 c
-4592.56 2820 4590 2823.52 4590 2829.88 c
-4590 2836.28 4592.79 2846.04 4596.24 2852.12 c
-4599.28 2857.4 4602.64 2860.08 4606.8 2860.08 c
-h
-4646 2791 m
-f*
-1 i
-1 g
-1836.95 1421.75 m
-1919.75 1421.75 l
-1919.75 1268.15 l
-2086.55 1268.15 l
-2086.55 1421.75 l
-2166.95 1421.75 l
-2003.75 1572.95 l
-f*
-0 g
-1836.95 1421.75 m
-1919.75 1421.75 l
-1919.75 1268.15 l
-2086.55 1268.15 l
-2086.55 1421.75 l
-2166.95 1421.75 l
-2003.75 1572.95 l
-1836.95 1421.75 l
-1863.35 1432.55 l
-2003.75 1559.75 l
-2141.75 1432.55 l
-2075.75 1432.55 l
-2075.75 1278.95 l
-1929.35 1278.95 l
-1929.35 1432.55 l
-1863.35 1432.55 l
-1836.95 1421.75 l
-f*
-0.2 i
-2275.88 1447 m
-2275.88 1442 l
-2288.3 1441.29 2292 1438.45 2292 1429.4 c
-2292 1342.28 l
-2292 1333.1 2289.25 1330.94 2275.88 1329.5 c
-2275.88 1325 l
-2333.84 1325 l
-2364.26 1325 2384 1338.5 2384 1358.84 c
-2384 1367.12 2380.73 1374.32 2374.7 1379.9 c
-2368.4 1385.48 2362.28 1388 2349.68 1390.7 c
-2370.56 1396.82 2378 1404.2 2378 1417.88 c
-2378 1436.42 2361.55 1447 2331.5 1447 c
-h
-2321 1386.74 m
-2325.92 1386.74 l
-2344.46 1386.74 2353 1377.2 2353 1357.22 c
-2353 1339.76 2345.77 1331 2331.5 1331 c
-2323.58 1331 2321 1333.99 2321 1341.74 c
-h
-2321 1432.46 m
-2321 1438.94 2323.39 1442 2330.24 1442 c
-2342.84 1442 2349 1434.03 2349 1416.62 c
-2349 1397.72 2343.08 1392.68 2321 1392.14 c
-h
-2393.06 1325 m
-f*
-2478.14 1336.52 m
-2476.34 1334.72 l
-2475.8 1334.18 2475.26 1334 2474.36 1334 c
-2471.84 1334 2471 1335.44 2471 1338.5 c
-2471 1385.48 l
-2471 1400.78 2457.16 1410.16 2434.94 1410.16 c
-2414.6 1410.16 2400.92 1400.97 2400.92 1387.46 c
-2400.92 1379.9 2405.24 1375.58 2412.62 1375.58 c
-2419.82 1375.58 2424.86 1379.9 2424.86 1386.02 c
-2424.86 1388.54 2423.96 1390.88 2421.62 1393.76 c
-2420 1395.56 2419.46 1396.64 2419.46 1397.72 c
-2419.46 1401.5 2424.32 1404.16 2430.8 1404.16 c
-2441.42 1404.16 2446 1399.37 2446 1388.54 c
-2446 1375.4 l
-2424.89 1368.92 2416.41 1365.68 2409.56 1361.18 c
-2401.46 1355.78 2398 1349.48 2398 1341.56 c
-2398 1330.58 2406.07 1322.48 2417.3 1322.48 c
-2427.74 1322.48 2436.02 1326.08 2445.92 1335.08 c
-2447.9 1325.9 2451.86 1322.48 2460.68 1322.48 c
-2468.42 1322.48 2474 1325.36 2480.84 1332.74 c
-h
-2446 1343 m
-2441.04 1337.42 2437.37 1335.26 2432.96 1335.26 c
-2427.56 1335.26 2424 1340.12 2424 1347.32 c
-2424 1357.76 2431.57 1365.14 2446 1369.1 c
-h
-2483 1325 m
-f*
-2544.22 1383.68 m
-2544.22 1409.8 l
-2540.24 1409.8 l
-2539.16 1407.08 2538.08 1406.2 2535.74 1406.2 c
-2534.66 1406.2 2533.04 1406.55 2530.16 1407.44 c
-2524.4 1409.42 2520.26 1410.16 2516.12 1410.16 c
-2499.74 1410.16 2488 1398.99 2488 1383.86 c
-2488 1371.98 2495.34 1363.7 2513.42 1355.96 c
-2525.84 1350.56 2531 1346.06 2531 1340.3 c
-2531 1333.28 2525.48 1328.48 2517.2 1328.48 c
-2504.6 1328.48 2496.32 1336.62 2492.54 1352.36 c
-2487.5 1352.36 l
-2487.5 1322.66 l
-2492 1322.66 l
-2493.98 1326.44 2495.06 1327.7 2496.68 1327.7 c
-2497.58 1327.7 2499.02 1327.34 2500.82 1326.62 c
-2506.04 1324.46 2515.22 1322.48 2520.26 1322.48 c
-2536.64 1322.48 2548 1333.64 2548 1349.84 c
-2548 1362.62 2541.15 1370.54 2523.14 1377.92 c
-2510.9 1383.14 2506 1387.64 2506 1393.76 c
-2506 1399.7 2510.98 1404.16 2517.74 1404.16 c
-2522.6 1404.16 2527.28 1402.19 2531.24 1398.44 c
-2535.02 1394.84 2537 1391.42 2539.7 1383.68 c
-h
-2553.02 1325 m
-f*
-2624.36 1347.5 m
-2616.98 1338.68 2611.58 1335.48 2603.84 1335.48 c
-2597 1335.48 2591.6 1338.53 2588 1344.62 c
-2584.58 1350.36 2583.14 1356.45 2582.42 1369 c
-2627.78 1369 l
-2626.7 1383.99 2624 1392.3 2618.42 1399.34 c
-2612.66 1406.36 2604.2 1410.16 2594.12 1410.16 c
-2571.62 1410.16 2556.5 1392.33 2556.5 1366.04 c
-2556.5 1339.76 2571.26 1322.48 2593.58 1322.48 c
-2608.16 1322.48 2616.98 1328.06 2628.68 1344.98 c
-h
-2581.52 1376 m
-2582.06 1397.42 2585.3 1404.16 2594.12 1404.16 c
-2599.34 1404.16 2602.58 1401.42 2604.02 1396.1 c
-2604.92 1392.68 2605.28 1387.64 2605.64 1378.46 c
-2605.64 1376 l
-h
-2631.92 1325 m
-f*
-2678 1325 m
-f*
-2781.94 1447 m
-2679.88 1447 l
-2679.88 1442 l
-2692.3 1441.29 2696 1438.63 2696 1429.4 c
-2696 1342.28 l
-2696 1332.92 2693.44 1330.94 2679.88 1329.5 c
-2679.88 1325 l
-2744.68 1325 l
-2744.68 1330 l
-2728.12 1330.69 2725 1332.77 2725 1342.28 c
-2725 1384.22 l
-2743.28 1383.86 2749.91 1377.2 2752.42 1356.32 c
-2756.92 1356.32 l
-2756.92 1417.16 l
-2752.42 1417.16 l
-2749.19 1396.64 2742.92 1390.34 2725 1390.34 c
-2725 1432.1 l
-2725 1438.76 2727.32 1441 2736.4 1441 c
-2753.14 1441 2763.58 1437.8 2769.16 1431.2 c
-2773.12 1426.7 2775.1 1421.84 2777.62 1410.5 c
-2781.94 1410.5 l
-h
-2786.98 1325 m
-f*
-2826.28 1408 m
-2792.22 1408 l
-2792.22 1403.66 l
-2799.96 1402.58 2802 1400.24 2802 1393.04 c
-2802 1340.12 l
-2802 1332.74 2800.19 1330.76 2792.22 1329.32 c
-2792.22 1325 l
-2840.1 1325 l
-2840.1 1329.32 l
-2829.12 1330.04 2827 1332.38 2827 1343.54 c
-2827 1377.56 l
-2827 1386.92 2832.02 1394.66 2837.94 1394.66 c
-2839.38 1394.66 2841 1393.4 2842.98 1390.52 c
-2846.4 1385.66 2849.1 1384.04 2853.78 1384.04 c
-2860.44 1384.04 2865.12 1389.08 2865.12 1395.92 c
-2865.12 1404.2 2859 1410.16 2850.54 1410.16 c
-2841.55 1410.16 2834.73 1405.47 2826.28 1393.22 c
-h
-2866.92 1325 m
-f*
-2953.14 1336.52 m
-2951.34 1334.72 l
-2950.8 1334.18 2950.26 1334 2949.36 1334 c
-2946.84 1334 2946 1335.44 2946 1338.5 c
-2946 1385.48 l
-2946 1400.78 2932.16 1410.16 2909.94 1410.16 c
-2889.6 1410.16 2875.92 1400.97 2875.92 1387.46 c
-2875.92 1379.9 2880.24 1375.58 2887.62 1375.58 c
-2894.82 1375.58 2899.86 1379.9 2899.86 1386.02 c
-2899.86 1388.54 2898.96 1390.88 2896.62 1393.76 c
-2895 1395.56 2894.46 1396.64 2894.46 1397.72 c
-2894.46 1401.5 2899.32 1404.16 2905.8 1404.16 c
-2916.42 1404.16 2921 1399.37 2921 1388.54 c
-2921 1375.4 l
-2899.89 1368.92 2891.41 1365.68 2884.56 1361.18 c
-2876.46 1355.78 2873 1349.48 2873 1341.56 c
-2873 1330.58 2881.07 1322.48 2892.3 1322.48 c
-2902.74 1322.48 2911.02 1326.08 2920.92 1335.08 c
-2922.9 1325.9 2926.86 1322.48 2935.68 1322.48 c
-2943.42 1322.48 2949 1325.36 2955.84 1332.74 c
-h
-2921 1343 m
-2916.04 1337.42 2912.37 1335.26 2907.96 1335.26 c
-2902.56 1335.26 2899 1340.12 2899 1347.32 c
-2899 1357.76 2906.57 1365.14 2921 1369.1 c
-h
-2958 1325 m
-f*
-2995.46 1408 m
-2960.73 1408 l
-2960.73 1403.66 l
-2968.65 1402.58 2971 1400.42 2971 1393.04 c
-2971 1340.12 l
-2971 1332.74 2968.95 1330.76 2960.73 1329.32 c
-2960.73 1325 l
-3003.93 1325 l
-3003.93 1329.32 l
-2997.63 1330.22 2996 1332.74 2996 1339.58 c
-2996 1387.64 l
-2996 1388.54 2998.51 1391.78 3000.51 1393.76 c
-3004.29 1396.64 3007.53 1398.16 3010.77 1398.16 c
-3017.79 1398.16 3021 1394 3021 1383.14 c
-3021 1339.58 l
-3021 1332.2 3018.9 1329.86 3011.85 1329.32 c
-3011.85 1325 l
-3053.97 1325 l
-3053.97 1329.32 l
-3047.67 1330.04 3046 1332.74 3046 1339.58 c
-3046 1387.64 l
-3046 1388.54 3048.43 1391.6 3050.37 1393.58 c
-3054.33 1396.64 3057.57 1398.16 3060.81 1398.16 c
-3067.65 1398.16 3070 1393.82 3070 1383.14 c
-3070 1339.58 l
-3070 1332.02 3068.1 1329.86 3061.53 1329.32 c
-3061.53 1325 l
-3104.37 1325 l
-3104.37 1329 l
-3097.35 1329.37 3095 1331.6 3095 1339.58 c
-3095 1384.76 l
-3095 1400.24 3085.6 1410.16 3071.07 1410.16 c
-3060.81 1410.16 3053.97 1406.01 3044.61 1394.48 c
-3039.21 1405.82 3032.91 1410.16 3021.57 1410.16 c
-3010.2 1410.16 3002.21 1405.29 2995.46 1394.48 c
-h
-3107.94 1325 m
-f*
-3180.36 1347.5 m
-3172.98 1338.68 3167.58 1335.48 3159.84 1335.48 c
-3153 1335.48 3147.6 1338.53 3144 1344.62 c
-3140.58 1350.36 3139.14 1356.45 3138.42 1369 c
-3183.78 1369 l
-3182.7 1383.99 3180 1392.3 3174.42 1399.34 c
-3168.66 1406.36 3160.2 1410.16 3150.12 1410.16 c
-3127.62 1410.16 3112.5 1392.33 3112.5 1366.04 c
-3112.5 1339.76 3127.26 1322.48 3149.58 1322.48 c
-3164.16 1322.48 3172.98 1328.06 3184.68 1344.98 c
-h
-3137.52 1376 m
-3138.06 1397.42 3141.3 1404.16 3150.12 1404.16 c
-3155.34 1404.16 3158.58 1401.42 3160.02 1396.1 c
-3160.92 1392.68 3161.28 1387.64 3161.64 1378.46 c
-3161.64 1376 l
-h
-3187.92 1325 m
-f*
-1 i
-2272.55 1289.75 914.4 15.5999 re
-f
-0.2 i
-3784.26 5016.36 m
-3773.64 5005.2 3767.88 5000.88 3759.06 4997.46 c
-3753.84 4995.3 3747.9 4994.58 3742.86 4994.58 c
-3730.98 4994.58 3719.64 5000.74 3714.42 5009.88 c
-3709.2 5019.42 3707 5032.2 3707 5050.38 c
-3707 5087.64 3718.23 5107.7 3739.8 5107.7 c
-3748.26 5107.7 3756 5104.38 3763.74 5097.36 c
-3771.48 5090.52 3775.62 5084.4 3781.92 5070.72 c
-3786.42 5070.72 l
-3786.42 5113.16 l
-3781.56 5113.16 l
-3778.86 5106.43 3777.06 5104.56 3773.64 5104.56 c
-3771.84 5104.56 3769.5 5105.28 3765.36 5107.08 c
-3754.92 5111.4 3746.1 5113.7 3737.46 5113.7 c
-3701.64 5113.7 3675 5085.84 3675 5048.76 c
-3675 5011.68 3701.21 4985.58 3738.54 4985.58 c
-3759.24 4985.58 3771.48 4991.88 3789.66 5011.86 c
-h
-3795.96 4989 m
-f*
-3859.18 4986.66 m
-3866.78 4989.36 3871.02 4990.08 3882.5 4991.34 c
-3893.66 4992.6 l
-3893.66 4997 l
-3885.74 4997.35 3884 4999.63 3884 5007.18 c
-3884 5072 l
-3847.4 5072 l
-3847.4 5067.66 l
-3856.4 5066.94 3859 5064.78 3859 5057.04 c
-3859 5006.1 l
-3852.88 5000.16 3849.18 4998.48 3843.8 4998.48 c
-3836.42 4998.48 3834 5002 3834 5010.96 c
-3834 5072 l
-3799.88 5072 l
-3799.88 5067.66 l
-3807.26 5066.22 3809 5064.6 3809 5057.04 c
-3809 5011.68 l
-3809 4995.84 3817.89 4986.48 3832.64 4986.48 c
-3842.16 4986.48 3848.56 4989.36 3859.18 4998.36 c
-h
-3897.08 4989 m
-f*
-3935.28 5072 m
-3901.22 5072 l
-3901.22 5067.66 l
-3908.96 5066.58 3911 5064.24 3911 5057.04 c
-3911 5004.12 l
-3911 4996.74 3909.19 4994.76 3901.22 4993.32 c
-3901.22 4989 l
-3949.1 4989 l
-3949.1 4993.32 l
-3938.12 4994.04 3936 4996.38 3936 5007.54 c
-3936 5041.56 l
-3936 5050.92 3941.02 5058.66 3946.94 5058.66 c
-3948.38 5058.66 3950 5057.4 3951.98 5054.52 c
-3955.4 5049.66 3958.1 5048.04 3962.78 5048.04 c
-3969.44 5048.04 3974.12 5053.08 3974.12 5059.92 c
-3974.12 5068.2 3968 5074.16 3959.54 5074.16 c
-3950.55 5074.16 3943.73 5069.47 3935.28 5057.22 c
-h
-3975.92 4989 m
-f*
-4016.28 5072 m
-3982.22 5072 l
-3982.22 5067.66 l
-3989.96 5066.58 3992 5064.24 3992 5057.04 c
-3992 5004.12 l
-3992 4996.74 3990.19 4994.76 3982.22 4993.32 c
-3982.22 4989 l
-4030.1 4989 l
-4030.1 4993.32 l
-4019.12 4994.04 4017 4996.38 4017 5007.54 c
-4017 5041.56 l
-4017 5050.92 4022.02 5058.66 4027.94 5058.66 c
-4029.38 5058.66 4031 5057.4 4032.98 5054.52 c
-4036.4 5049.66 4039.1 5048.04 4043.78 5048.04 c
-4050.44 5048.04 4055.12 5053.08 4055.12 5059.92 c
-4055.12 5068.2 4049 5074.16 4040.54 5074.16 c
-4031.55 5074.16 4024.73 5069.47 4016.28 5057.22 c
-h
-4056.92 4989 m
-f*
-4128.36 5011.5 m
-4120.98 5002.68 4115.58 4999.48 4107.84 4999.48 c
-4101 4999.48 4095.6 5002.53 4092 5008.62 c
-4088.58 5014.36 4087.14 5020.45 4086.42 5033 c
-4131.78 5033 l
-4130.7 5047.99 4128 5056.3 4122.42 5063.34 c
-4116.66 5070.36 4108.2 5074.16 4098.12 5074.16 c
-4075.62 5074.16 4060.5 5056.33 4060.5 5030.04 c
-4060.5 5003.76 4075.26 4986.48 4097.58 4986.48 c
-4112.16 4986.48 4120.98 4992.06 4132.68 5008.98 c
-h
-4085.52 5040 m
-4086.06 5061.42 4089.3 5068.16 4098.12 5068.16 c
-4103.34 5068.16 4106.58 5065.42 4108.02 5060.1 c
-4108.92 5056.68 4109.28 5051.64 4109.64 5042.46 c
-4109.64 5040 l
-h
-4135.92 4989 m
-f*
-4173.82 5072 m
-4139.78 5072 l
-4139.78 5067.66 l
-4147.7 5066.4 4149 5064.6 4149 5057.04 c
-4149 5004.12 l
-4149 4996.56 4147.61 4994.94 4139.78 4993.32 c
-4139.78 4989 l
-4183.16 4989 l
-4183.16 4993.32 l
-4176.5 4994.22 4174 4996.92 4174 5003.58 c
-4174 5051.64 l
-4174 5052.36 4175.4 5054.16 4177.4 5055.96 c
-4181.36 5059.92 4185.68 5062.16 4190 5062.16 c
-4196.12 5062.16 4199 5057.27 4199 5047.14 c
-4199 5003.58 l
-4199 4996.92 4196.71 4994.04 4190.72 4993.32 c
-4190.72 4989 l
-4233.02 4989 l
-4233.02 4993.32 l
-4226 4993.86 4224 4996.02 4224 5003.58 c
-4224 5048.76 l
-4224 5064.24 4214.54 5074.16 4199.9 5074.16 c
-4188.96 5074.16 4180.57 5069.11 4173.82 5058.48 c
-h
-4236.08 4989 m
-f*
-4290.9 5072 m
-4274 5072 l
-4274 5102.4 l
-4269.48 5102.4 l
-4258.5 5086.92 4251.3 5078.82 4239.6 5068.92 c
-4239.6 5064 l
-4249 5064 l
-4249 5005.74 l
-4249 4994.04 4256.73 4986.84 4269.12 4986.84 c
-4281.18 4986.84 4288.38 4992.24 4295.76 5007 c
-4291.26 5008.98 l
-4287.66 5002.14 4284.78 4999.84 4281 4999.84 c
-4275.96 4999.84 4274 5002.83 4274 5009.88 c
-4274 5064 l
-4290.9 5064 l
-h
-4295.94 4989 m
-f*
-4341 4989 m
-f*
-4445.94 5111 m
-4343.88 5111 l
-4343.88 5106 l
-4356.3 5105.29 4360 5102.63 4360 5093.4 c
-4360 5006.28 l
-4360 4996.92 4357.44 4994.94 4343.88 4993.5 c
-4343.88 4989 l
-4408.68 4989 l
-4408.68 4994 l
-4392.12 4994.69 4389 4996.77 4389 5006.28 c
-4389 5048.22 l
-4407.28 5047.86 4413.91 5041.2 4416.42 5020.32 c
-4420.92 5020.32 l
-4420.92 5081.16 l
-4416.42 5081.16 l
-4413.19 5060.64 4406.92 5054.34 4389 5054.34 c
-4389 5096.1 l
-4389 5102.76 4391.32 5105 4400.4 5105 c
-4417.14 5105 4427.58 5101.8 4433.16 5095.2 c
-4437.12 5090.7 4439.1 5085.84 4441.62 5074.5 c
-4445.94 5074.5 l
-h
-4450.98 4989 m
-f*
-4490.28 5072 m
-4456.22 5072 l
-4456.22 5067.66 l
-4463.96 5066.58 4466 5064.24 4466 5057.04 c
-4466 5004.12 l
-4466 4996.74 4464.19 4994.76 4456.22 4993.32 c
-4456.22 4989 l
-4504.1 4989 l
-4504.1 4993.32 l
-4493.12 4994.04 4491 4996.38 4491 5007.54 c
-4491 5041.56 l
-4491 5050.92 4496.02 5058.66 4501.94 5058.66 c
-4503.38 5058.66 4505 5057.4 4506.98 5054.52 c
-4510.4 5049.66 4513.1 5048.04 4517.78 5048.04 c
-4524.44 5048.04 4529.12 5053.08 4529.12 5059.92 c
-4529.12 5068.2 4523 5074.16 4514.54 5074.16 c
-4505.55 5074.16 4498.73 5069.47 4490.28 5057.22 c
-h
-4530.92 4989 m
-f*
-4616.14 5000.52 m
-4614.34 4998.72 l
-4613.8 4998.18 4613.26 4998 4612.36 4998 c
-4609.84 4998 4609 4999.44 4609 5002.5 c
-4609 5049.48 l
-4609 5064.78 4595.16 5074.16 4572.94 5074.16 c
-4552.6 5074.16 4538.92 5064.97 4538.92 5051.46 c
-4538.92 5043.9 4543.24 5039.58 4550.62 5039.58 c
-4557.82 5039.58 4562.86 5043.9 4562.86 5050.02 c
-4562.86 5052.54 4561.96 5054.88 4559.62 5057.76 c
-4558 5059.56 4557.46 5060.64 4557.46 5061.72 c
-4557.46 5065.5 4562.32 5068.16 4568.8 5068.16 c
-4579.42 5068.16 4584 5063.37 4584 5052.54 c
-4584 5039.4 l
-4562.89 5032.92 4554.41 5029.68 4547.56 5025.18 c
-4539.46 5019.78 4536 5013.48 4536 5005.56 c
-4536 4994.58 4544.07 4986.48 4555.3 4986.48 c
-4565.74 4986.48 4574.02 4990.08 4583.92 4999.08 c
-4585.9 4989.9 4589.86 4986.48 4598.68 4986.48 c
-4606.42 4986.48 4612 4989.36 4618.84 4996.74 c
-h
-4584 5007 m
-4579.04 5001.42 4575.37 4999.26 4570.96 4999.26 c
-4565.56 4999.26 4562 5004.12 4562 5011.32 c
-4562 5021.76 4569.57 5029.14 4584 5033.1 c
-h
-4621 4989 m
-f*
-4658.46 5072 m
-4623.73 5072 l
-4623.73 5067.66 l
-4631.65 5066.58 4634 5064.42 4634 5057.04 c
-4634 5004.12 l
-4634 4996.74 4631.95 4994.76 4623.73 4993.32 c
-4623.73 4989 l
-4666.93 4989 l
-4666.93 4993.32 l
-4660.63 4994.22 4659 4996.74 4659 5003.58 c
-4659 5051.64 l
-4659 5052.54 4661.51 5055.78 4663.51 5057.76 c
-4667.29 5060.64 4670.53 5062.16 4673.77 5062.16 c
-4680.79 5062.16 4684 5058 4684 5047.14 c
-4684 5003.58 l
-4684 4996.2 4681.9 4993.86 4674.85 4993.32 c
-4674.85 4989 l
-4716.97 4989 l
-4716.97 4993.32 l
-4710.67 4994.04 4709 4996.74 4709 5003.58 c
-4709 5051.64 l
-4709 5052.54 4711.43 5055.6 4713.37 5057.58 c
-4717.33 5060.64 4720.57 5062.16 4723.81 5062.16 c
-4730.65 5062.16 4733 5057.82 4733 5047.14 c
-4733 5003.58 l
-4733 4996.02 4731.1 4993.86 4724.53 4993.32 c
-4724.53 4989 l
-4767.37 4989 l
-4767.37 4993 l
-4760.35 4993.37 4758 4995.6 4758 5003.58 c
-4758 5048.76 l
-4758 5064.24 4748.6 5074.16 4734.07 5074.16 c
-4723.81 5074.16 4716.97 5070.01 4707.61 5058.48 c
-4702.21 5069.82 4695.91 5074.16 4684.57 5074.16 c
-4673.2 5074.16 4665.21 5069.29 4658.46 5058.48 c
-h
-4770.94 4989 m
-f*
-4843.36 5011.5 m
-4835.98 5002.68 4830.58 4999.48 4822.84 4999.48 c
-4816 4999.48 4810.6 5002.53 4807 5008.62 c
-4803.58 5014.36 4802.14 5020.45 4801.42 5033 c
-4846.78 5033 l
-4845.7 5047.99 4843 5056.3 4837.42 5063.34 c
-4831.66 5070.36 4823.2 5074.16 4813.12 5074.16 c
-4790.62 5074.16 4775.5 5056.33 4775.5 5030.04 c
-4775.5 5003.76 4790.26 4986.48 4812.58 4986.48 c
-4827.16 4986.48 4835.98 4992.06 4847.68 5008.98 c
-h
-4800.52 5040 m
-4801.06 5061.42 4804.3 5068.16 4813.12 5068.16 c
-4818.34 5068.16 4821.58 5065.42 4823.02 5060.1 c
-4823.92 5056.68 4824.28 5051.64 4824.64 5042.46 c
-4824.64 5040 l
-h
-4850.92 4989 m
-f*
-1 i
-3665.75 4954.55 1184.4 15.5999 re
-f
-1 g
-4048.55 4732.55 m
-4130.15 4732.55 l
-4130.15 4581.35 l
-4295.75 4581.35 l
-4295.75 4732.55 l
-4378.55 4732.55 l
-4211.75 4886.15 l
-f*
-0 g
-4048.55 4732.55 m
-4130.15 4732.55 l
-4130.15 4581.35 l
-4295.75 4581.35 l
-4295.75 4732.55 l
-4378.55 4732.55 l
-4211.75 4886.15 l
-4048.55 4732.55 l
-4073.75 4742.15 l
-4211.75 4871.75 l
-4353.35 4742.15 l
-4286.15 4742.15 l
-4286.15 4590.95 l
-4139.75 4590.95 l
-4139.75 4742.15 l
-4073.75 4742.15 l
-4048.55 4732.55 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 4331 a FF(Figure)35 b(7:)50 b(A)34 b(F)-8
-b(rameSet)36 b(is)f(a)g(net)m(w)m(ork)g(of)g(F)-8 b(rames)35
-b(in)m(ter-connected)h(b)m(y)f(Mappings)f(suc)m(h)g(that)i(there)e(is)0
-4444 y(exactly)e(one)f(con)m(v)m(ersion)g(path,)g Fx(via)f
-FF(Mappings,)h(b)s(et)m(w)m(een)g(an)m(y)f(pair)h(of)f(F)-8
-b(rames.)p eop end
-%%Page: 11 21
-TeXDict begin 11 20 bop 0 52 a Fy(2.6)92 b(Input/Output)28
-b(F)-8 b(acilities)2547 b FF(11)0 351 y(them.)43 b(In)30
-b(this)h(con)m(text,)j(the)d(base)g(F)-8 b(rame)32 b(represen)m(ts)f
-(the)h(\\nativ)m(e")h(co)s(ordinate)f(system)f(\(for)h(example,)0
-464 y(the)43 b(pixel)h(co)s(ordinates)g(of)f(an)g(image\).)81
-b(Similarly)-8 b(,)48 b(one)43 b(F)-8 b(rame)44 b(is)f(termed)h(the)f
-Fx(curr)-5 b(ent)44 b FF(F)-8 b(rame)44 b(and)0 577 y(represen)m(ts)39
-b(the)g(\\curren)m(tly-selected")j(co)s(ordinates.)68
-b(It)39 b(migh)m(t,)k(t)m(ypically)-8 b(,)43 b(b)s(e)c(a)g(celestial)j
-(or)d(sp)s(ectral)0 690 y(co)s(ordinate)30 b(system)g(and)f(w)m(ould)g
-(b)s(e)g(used)g(during)f(in)m(teractions)j(with)f(a)f(user,)h(as)f
-(when)g(plotting)h(axes)h(on)0 803 y(a)h(graph)f(or)g(pro)s(ducing)g(a)
-h(table)g(of)g(results.)44 b(Other)31 b(F)-8 b(rames)32
-b(within)f(the)h(F)-8 b(rameSet)32 b(represen)m(t)g(a)g(library)0
-916 y(of)f(alternativ)m(e)h(co)s(ordinate)g(systems)e(whic)m(h)g(a)h
-(soft)m(w)m(are)h(user)d(can)i(select)h(b)m(y)e(making)h(them)f(curren)
-m(t.)0 1063 y FD(F)-9 b(urther)41 b(reading:)52 b FF(F)-8
-b(or)37 b(a)f(more)h(complete)g(description)f(of)g(F)-8
-b(rameSets,)39 b(see)e Fu(x)p FF(13)g(and)e Fu(x)p FF(14.)59
-b(Also)37 b(see)0 1176 y(the)31 b(F)-8 b(rameSet)31 b(en)m(try)g(in)f
-(App)s(endix)e(D.)0 1447 y Fw(2.6)112 b(Input/Output)38
-b(F)-9 b(acilities)0 1653 y FF(AST)44 b(allo)m(ws)h(y)m(ou)g(to)g(con)m
-(v)m(ert)h(an)m(y)f(kind)e(of)i(Ob)5 b(ject)44 b(in)m(to)h(a)g(stream)g
-(of)f(text)h(whic)m(h)g(con)m(tains)g(a)g(full)0 1766
-y(description)32 b(of)g(that)h(Ob)5 b(ject.)45 b(This)31
-b(text)i(ma)m(y)g(b)s(e)e(written)h(out)g(b)m(y)g(one)g(program)g(and)f
-(read)h(bac)m(k)h(in)f(b)m(y)0 1879 y(another,)f(th)m(us)f(allo)m(wing)
-i(the)e(original)i(Ob)5 b(ject)31 b(to)g(b)s(e)e(reconstructed.)0
-2027 y(The)35 b(\014lter)h(whic)m(h)g(con)m(v)m(erts)h(Ob)5
-b(jects)35 b(in)m(to)i(text)g(and)e(bac)m(k)i(again)f(is)g(itself)h(a)f
-(kind)f(of)h(Ob)5 b(ject,)37 b(called)g(a)0 2139 y(Channel.)i(A)26
-b(Channel)g(pro)m(vides)g(a)h(n)m(um)m(b)s(er)e(of)h(options)h(for)f
-(con)m(trolling)i(the)f(information)g(con)m(ten)m(t)h(of)e(the)0
-2252 y(text,)k(suc)m(h)e(as)h(the)f(addition)h(of)f(commen)m(ts)i(for)e
-(h)m(uman)f(in)m(terpretation.)42 b(It)28 b(is)h(also)g(p)s(ossible)f
-(to)h(in)m(tercept)0 2365 y(the)e(text)i(b)s(eing)e(pro)s(cessed)f(b)m
-(y)i(a)f(Channel)g(so)g(that)h(it)g(ma)m(y)g(b)s(e)e(redirected)i
-(to/from)g(an)m(y)g(c)m(hosen)g(external)0 2478 y(data)j(store,)g(suc)m
-(h)f(as)h(a)g(text)g(\014le,)g(an)f(astronomical)i(dataset,)g(or)f(a)f
-(net)m(w)m(ork)h(connection.)0 2626 y(The)42 b(text)i(format)f(used)e
-(b)m(y)i(the)g(basic)g(Channel)e(class)j(is)e(p)s(eculiar)h(to)g(the)g
-(AST)f(library)g(-)h(no)f(other)0 2739 y(soft)m(w)m(are)28
-b(will)f(understand)e(it.)40 b(Ho)m(w)m(ev)m(er,)30 b(more)d(sp)s
-(ecialised)h(forms)e(of)h(Channel)f(are)h(pro)m(vided)f(whic)m(h)h(use)
-0 2852 y(text)k(formats)g(more)f(widely)h(understo)s(o)s(d.)0
-2999 y(T)-8 b(o)37 b(further)f(facilitate)k(the)d(storage)h(of)g(co)s
-(ordinate)f(system)g(information)h(in)e(astronomical)j(datasets,)h(a)0
-3112 y(more)d(sp)s(ecialised)g(form)f(of)h(Channel)e(called)j(a)f
-(FitsChan)f(is)h(pro)m(vided.)59 b(Instead)36 b(of)h(using)f
-(free-format)0 3225 y(text,)46 b(a)c(FitsChan)g(con)m(v)m(erts)h(AST)e
-(Ob)5 b(jects)42 b(to)g(and)g(from)f(FITS)g(header)h(cards.)74
-b(It)42 b(also)h(allo)m(ws)g(the)0 3338 y(information)36
-b(to)g(b)s(e)f(enco)s(ded)h(in)f(the)h(FITS)f(cards)h(in)f(a)h(n)m(um)m
-(b)s(er)e(of)i(w)m(a)m(ys)h(\(called)g Fx(enc)-5 b(o)g(dings)p
-FF(\),)39 b(so)d(that)0 3451 y(W)m(CS)30 b(information)h(from)f(a)h(v)
--5 b(ariet)m(y)31 b(of)g(sources)f(can)h(b)s(e)f(handled.)0
-3598 y(Another)41 b(sub-class)g(of)g(Channel,)i(called)f(XmlChan,)h(is)
-f(a)f(sp)s(ecialised)h(form)e(of)h(Channel)f(that)i(stores)0
-3711 y(the)g(text)g(in)f(the)h(form)f(of)h(XML)g(markup.)73
-b(Curren)m(tly)-8 b(,)44 b(t)m(w)m(o)f(markup)d(formats)i(are)g(pro)m
-(vided)f(b)m(y)g(the)0 3824 y(XmlChan)35 b(class,)i(one)f(is)f(closely)
-i(related)f(to)g(the)g(text)g(format)g(pro)s(duced)e(b)m(y)h(the)g
-(basic)h(Channel)f(class)0 3937 y(\(curren)m(tly)-8 b(,)34
-b(no)f(sc)m(hema)g(or)f(DTD)h(is)g(a)m(v)-5 b(ailable)35
-b(describing)d(this)h(format\).)48 b(The)32 b(other)g(is)h(a)g(subset)f
-(of)h(an)0 4050 y(early)j(draft)e(of)h(the)h(IV)m(O)m(A)f
-(Space-Time-Co)s(ordinates)h(XML)g(\(STC-X\))f(sc)m(hema)g(\(V1.20\))j
-(describ)s(ed)c(at)0 4163 y(h)m(ttp://www.iv)m(oa.net/Do)s(cumen)m
-(ts/WD/STC/STC-200502)q(25)q(.h)m(tml)2605 4130 y Fv(3)2644
-4163 y FF(.)40 b(The)29 b(v)m(ersion)g(of)g(STC-X)f(that)0
-4276 y(has)k(b)s(een)f(adopted)h(b)m(y)g(the)g(IV)m(O)m(A)h(di\013ers)e
-(in)h(sev)m(eral)h(signi\014can)m(t)g(resp)s(ects)f(from)f(V1.20,)k
-(and)c(therefore)0 4389 y(this)f(XmlChan)g(format)h(is)f(of)h
-(historical)g(in)m(terest)h(only)-8 b(.)0 4536 y(Finally)g(,)37
-b(the)e(StcsChan)f(class)i(pro)m(vides)e(facilities)j(for)e(reading)f
-(and)h(writing)f(IV)m(O)m(A)i(STC-S)d(region)i(de-)0
-4649 y(scriptions.)48 b(STC-S)31 b(\(see)67 b(h)m(ttp://www.iv)m
-(oa.net/Do)s(cumen)m(ts/latest/STC-S.h)m(tml\))38 b(is)33
-b(a)g(linear)g(string)0 4762 y(syn)m(tax)e(that)g(allo)m(ws)h(simple)e
-(sp)s(eci\014cation)h(of)g(STC)e(metadata.)42 b(AST)30
-b(supp)s(orts)e(a)j(subset)f(of)g(the)h(STC-S)0 4875
-y(sp)s(eci\014cation,)f(allo)m(wing)h(an)e(STC-S)f(description)h(of)g
-(a)h(region)f(within)g(an)g(AST-supp)s(orted)e(astronomical)0
-4988 y(co)s(ordinate)k(system)g(to)g(b)s(e)f(con)m(v)m(erted)h(in)m(to)
-h(an)e(equiv)-5 b(alen)m(t)32 b(AST)e(Region)h(ob)5 b(ject,)31
-b(and)f(vice-v)m(ersa.)0 5135 y FD(F)-9 b(urther)35 b(reading:)40
-b FF(F)-8 b(or)31 b(a)g(more)g(complete)g(description)g(of)f(Channels)g
-(see)g Fu(x)p FF(15)i(and)e(for)g(FitsChans)g(see)0 5248
-y Fu(x)p FF(16)e(and)e Fu(x)p FF(17.)41 b(Also)27 b(see)h(the)f
-(Channel)f(and)g(FitsChan)h(en)m(tries)g(in)g(App)s(endix)e(D)i(and)f
-(the)h(Enco)s(ding)f(en)m(try)0 5361 y(in)k(App)s(endix)f(C.)p
-0 5425 1512 4 v 104 5479 a Fs(3)138 5510 y Fr(XML)19
-b(do)r(cumen)n(ts)g(whic)n(h)g(use)g(only)g(the)g(subset)g(of)g(the)g
-(STC)h(sc)n(hema)f(supp)r(orted)g(b)n(y)f(AST)g(can)i(b)r(e)e(read)i(b)
-n(y)e(the)g(XmlChan)0 5602 y(class)31 b(to)f(pro)r(duce)f(corresp)r
-(onding)i(AST)e(ob)t(jects)i(\(sub)r(classes)g(of)g(the)e(Stc)g
-(class\).)48 b(Ho)n(w)n(ev)n(er,)31 b(the)e(rev)n(erse)h(is)g(not)g(p)r
-(ossible.)0 5693 y(That)c(is,)h(AST)e(ob)t(jects)i(can)e(not)h(curren)n
-(tly)f(b)r(e)g(written)h(out)g(in)g(the)f(form)h(of)h(STC)f(do)r(cumen)
-n(ts.)p eop end
-%%Page: 12 22
-TeXDict begin 12 21 bop 0 52 a FF(12)2126 b Fy(2)92 b(O)m(VER)-10
-b(VIEW)30 b(OF)h(AST)e(CONCEPTS)720 260 y
- gsave currentpoint currentpoint translate -90 neg rotate neg exch neg exch translate
- 720 260 a @beginspecial
-97 @llx 220 @lly 409 @urx 571 @ury 2496 @rwi @setspecial
-%%BeginDocument: sun211_figures/gridplot_bw.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 97 220 409 571
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:41:51
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2984 3317 l
-2985 3318 l
-2986 3319 l
-2987 3319 l
-2988 3320 l
-2990 3320 l
-2991 3321 l
-3005 3329 l
-3020 3338 l
-3034 3347 l
-3049 3356 l
-3063 3365 l
-3077 3375 l
-3091 3385 l
-3105 3395 l
-3118 3405 l
-3132 3415 l
-3145 3426 l
-3158 3436 l
-3171 3447 l
-3184 3459 l
-3197 3470 l
-3209 3482 l
-3222 3493 l
-3234 3505 l
-3246 3517 l
-3257 3530 l
-3269 3542 l
-3280 3555 l
-3291 3568 l
-3302 3581 l
-3313 3594 l
-3324 3607 l
-3334 3621 l
-3344 3634 l
-3354 3648 l
-3364 3662 l
-3373 3676 l
-3382 3691 l
-3391 3705 l
-3400 3720 l
-3409 3735 l
-3417 3750 l
-3425 3765 l
-3433 3780 l
-3441 3795 l
-3448 3810 l
-3455 3826 l
-3462 3842 l
-3469 3858 l
-3475 3873 l
-3481 3890 l
-3487 3906 l
-3492 3922 l
-3497 3938 l
-3502 3955 l
-3507 3971 l
-3512 3988 l
-3516 4005 l
-3519 4022 l
-3523 4039 l
-3526 4056 l
-3529 4073 l
-3532 4090 l
-3534 4107 l
-3536 4125 l
-3538 4142 l
-3539 4159 l
-3540 4177 l
-3541 4194 l
-3541 4212 l
-3541 4230 l
-3541 4247 l
-3541 4265 l
-3540 4283 l
-3538 4301 l
-3537 4318 l
-3535 4336 l
-3532 4354 l
-3529 4372 l
-3526 4390 l
-3523 4407 l
-3519 4425 l
-3515 4443 l
-3510 4461 l
-3505 4479 l
-3500 4496 l
-3494 4514 l
-3488 4531 l
-3481 4549 l
-3474 4567 l
-3467 4584 l
-3459 4601 l
-3451 4618 l
-3442 4636 l
-3433 4653 l
-3423 4670 l
-3413 4686 l
-3403 4703 l
-3392 4720 l
-3381 4736 l
-3369 4752 l
-3357 4768 l
-3344 4784 l
-3331 4800 l
-3318 4815 l
-3304 4831 l
-3289 4846 l
-3274 4860 l
-3259 4875 l
-3243 4889 l
-3227 4903 l
-3210 4917 l
-3193 4931 l
-3175 4944 l
-3157 4956 l
-3138 4969 l
-3119 4981 l
-3100 4993 l
-3080 5004 l
-3059 5015 l
-3038 5025 l
-3017 5035 l
-2995 5045 l
-2973 5054 l
-2951 5063 l
-2928 5071 l
-2904 5078 l
-2880 5085 l
-2856 5092 l
-2832 5098 l
-2807 5103 l
-2782 5108 l
-2756 5112 l
-2730 5115 l
-2704 5118 l
-2678 5120 l
-2651 5121 l
-2624 5122 l
-2597 5122 l
-2569 5121 l
-2542 5120 l
-2514 5117 l
-2487 5114 l
-2459 5110 l
-2431 5106 l
-2403 5100 l
-2375 5094 l
-2347 5087 l
-2319 5079 l
-2292 5071 l
-2264 5061 l
-2237 5051 l
-2235 5050 l
-2233 5050 l
-2231 5049 l
-2229 5048 l
-2227 5047 l
-2225 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2983 3318 l
-2983 3319 l
-2983 3320 l
-2984 3321 l
-2984 3322 l
-2984 3323 l
-2984 3324 l
-2985 3337 l
-2986 3351 l
-2987 3364 l
-2988 3378 l
-2989 3392 l
-2990 3406 l
-2991 3420 l
-2991 3434 l
-2992 3448 l
-2992 3462 l
-2992 3476 l
-2992 3490 l
-2992 3504 l
-2992 3518 l
-2992 3533 l
-2992 3547 l
-2992 3561 l
-2991 3576 l
-2991 3590 l
-2990 3605 l
-2989 3619 l
-2988 3634 l
-2988 3648 l
-2986 3663 l
-2985 3678 l
-2984 3692 l
-2983 3707 l
-2982 3722 l
-2980 3736 l
-2978 3751 l
-2977 3766 l
-2975 3780 l
-2973 3795 l
-2971 3810 l
-2969 3825 l
-2967 3839 l
-2965 3854 l
-2963 3869 l
-2961 3884 l
-2958 3899 l
-2956 3913 l
-2953 3928 l
-2950 3943 l
-2948 3958 l
-2945 3972 l
-2942 3987 l
-2939 4002 l
-2936 4016 l
-2933 4031 l
-2929 4046 l
-2926 4060 l
-2923 4075 l
-2919 4089 l
-2916 4104 l
-2912 4119 l
-2908 4133 l
-2904 4147 l
-2900 4162 l
-2897 4176 l
-2893 4191 l
-2888 4205 l
-2884 4219 l
-2880 4233 l
-2876 4247 l
-2871 4262 l
-2867 4276 l
-2862 4290 l
-2858 4304 l
-2853 4317 l
-2848 4331 l
-2843 4345 l
-2838 4359 l
-2833 4372 l
-2828 4386 l
-2823 4400 l
-2818 4413 l
-2812 4426 l
-2807 4440 l
-2802 4453 l
-2796 4466 l
-2790 4479 l
-2785 4492 l
-2779 4505 l
-2773 4518 l
-2767 4531 l
-2761 4543 l
-2755 4556 l
-2749 4568 l
-2743 4581 l
-2737 4593 l
-2730 4605 l
-2724 4617 l
-2717 4629 l
-2711 4641 l
-2704 4653 l
-2697 4664 l
-2691 4676 l
-2684 4687 l
-2677 4699 l
-2670 4710 l
-2662 4721 l
-2655 4732 l
-2648 4743 l
-2641 4753 l
-2633 4764 l
-2626 4774 l
-2618 4785 l
-2610 4795 l
-2602 4805 l
-2594 4815 l
-2586 4825 l
-2578 4834 l
-2570 4844 l
-2562 4853 l
-2554 4862 l
-2545 4871 l
-2537 4880 l
-2528 4888 l
-2519 4897 l
-2510 4905 l
-2501 4913 l
-2492 4921 l
-2483 4929 l
-2474 4937 l
-2464 4944 l
-2455 4951 l
-2445 4958 l
-2435 4965 l
-2425 4972 l
-2415 4978 l
-2405 4984 l
-2394 4990 l
-2384 4996 l
-2373 5001 l
-2362 5006 l
-2351 5011 l
-2340 5016 l
-2328 5020 l
-2317 5025 l
-2305 5028 l
-2293 5032 l
-2281 5035 l
-2268 5038 l
-2256 5041 l
-2243 5043 l
-2230 5045 l
-2229 5045 l
-2228 5045 l
-2227 5045 l
-2226 5045 l
-2225 5045 l
-2224 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2982 3317 l
-2981 3318 l
-2980 3318 l
-2979 3318 l
-2978 3319 l
-2977 3319 l
-2976 3320 l
-2963 3325 l
-2950 3331 l
-2936 3336 l
-2923 3342 l
-2910 3348 l
-2896 3355 l
-2883 3361 l
-2870 3368 l
-2857 3374 l
-2844 3381 l
-2831 3388 l
-2818 3396 l
-2805 3403 l
-2792 3410 l
-2779 3418 l
-2766 3426 l
-2754 3434 l
-2741 3442 l
-2728 3450 l
-2716 3458 l
-2703 3467 l
-2691 3475 l
-2678 3484 l
-2666 3493 l
-2654 3502 l
-2642 3511 l
-2630 3520 l
-2618 3529 l
-2606 3539 l
-2594 3548 l
-2582 3558 l
-2570 3567 l
-2559 3577 l
-2547 3587 l
-2535 3597 l
-2524 3608 l
-2513 3618 l
-2501 3628 l
-2490 3639 l
-2479 3649 l
-2468 3660 l
-2457 3671 l
-2446 3682 l
-2436 3693 l
-2425 3704 l
-2415 3715 l
-2404 3726 l
-2394 3737 l
-2384 3749 l
-2373 3760 l
-2363 3772 l
-2353 3783 l
-2344 3795 l
-2334 3807 l
-2324 3819 l
-2315 3831 l
-2305 3843 l
-2296 3855 l
-2287 3867 l
-2278 3879 l
-2269 3892 l
-2260 3904 l
-2252 3916 l
-2243 3929 l
-2235 3942 l
-2226 3954 l
-2218 3967 l
-2210 3980 l
-2202 3992 l
-2194 4005 l
-2187 4018 l
-2179 4031 l
-2172 4044 l
-2165 4057 l
-2158 4070 l
-2151 4083 l
-2144 4096 l
-2137 4110 l
-2131 4123 l
-2125 4136 l
-2118 4150 l
-2112 4163 l
-2107 4176 l
-2101 4190 l
-2095 4203 l
-2090 4217 l
-2085 4231 l
-2080 4244 l
-2075 4258 l
-2070 4271 l
-2066 4285 l
-2062 4299 l
-2058 4312 l
-2054 4326 l
-2050 4340 l
-2046 4354 l
-2043 4368 l
-2040 4381 l
-2037 4395 l
-2034 4409 l
-2032 4423 l
-2029 4437 l
-2027 4451 l
-2025 4465 l
-2024 4479 l
-2022 4493 l
-2021 4507 l
-2020 4521 l
-2019 4535 l
-2019 4548 l
-2019 4562 l
-2019 4576 l
-2019 4590 l
-2019 4604 l
-2020 4618 l
-2021 4632 l
-2022 4646 l
-2024 4660 l
-2026 4674 l
-2028 4688 l
-2031 4702 l
-2033 4716 l
-2036 4730 l
-2040 4744 l
-2044 4758 l
-2048 4771 l
-2052 4785 l
-2057 4799 l
-2062 4813 l
-2068 4827 l
-2073 4840 l
-2080 4854 l
-2086 4868 l
-2094 4881 l
-2101 4895 l
-2109 4908 l
-2117 4922 l
-2126 4935 l
-2136 4949 l
-2146 4962 l
-2156 4975 l
-2167 4988 l
-2178 5001 l
-2190 5014 l
-2203 5027 l
-2216 5039 l
-2217 5040 l
-2218 5041 l
-2219 5042 l
-2220 5043 l
-2221 5044 l
-2222 5045 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2982 3316 l
-2981 3316 l
-2980 3315 l
-2979 3315 l
-2978 3314 l
-2977 3313 l
-2976 3313 l
-2961 3305 l
-2946 3297 l
-2930 3290 l
-2915 3282 l
-2899 3275 l
-2884 3268 l
-2868 3262 l
-2852 3256 l
-2836 3250 l
-2820 3244 l
-2804 3238 l
-2788 3233 l
-2772 3228 l
-2755 3223 l
-2739 3219 l
-2722 3214 l
-2706 3210 l
-2689 3207 l
-2672 3203 l
-2656 3200 l
-2639 3197 l
-2622 3194 l
-2605 3192 l
-2588 3190 l
-2571 3188 l
-2554 3187 l
-2537 3185 l
-2520 3185 l
-2502 3184 l
-2485 3184 l
-2468 3184 l
-2451 3184 l
-2433 3184 l
-2416 3185 l
-2399 3186 l
-2382 3188 l
-2364 3190 l
-2347 3192 l
-2330 3194 l
-2313 3197 l
-2295 3200 l
-2278 3203 l
-2261 3207 l
-2244 3211 l
-2227 3215 l
-2210 3220 l
-2193 3225 l
-2176 3231 l
-2159 3236 l
-2143 3242 l
-2126 3249 l
-2109 3255 l
-2093 3263 l
-2076 3270 l
-2060 3278 l
-2044 3286 l
-2028 3294 l
-2012 3303 l
-1996 3313 l
-1980 3322 l
-1965 3332 l
-1949 3342 l
-1934 3353 l
-1919 3364 l
-1904 3376 l
-1889 3388 l
-1875 3400 l
-1860 3412 l
-1846 3425 l
-1832 3439 l
-1818 3452 l
-1805 3466 l
-1792 3481 l
-1779 3496 l
-1766 3511 l
-1753 3527 l
-1741 3543 l
-1729 3559 l
-1718 3576 l
-1707 3593 l
-1696 3611 l
-1685 3629 l
-1675 3647 l
-1665 3666 l
-1655 3685 l
-1646 3704 l
-1638 3724 l
-1629 3744 l
-1621 3765 l
-1614 3786 l
-1607 3807 l
-1600 3828 l
-1594 3850 l
-1589 3873 l
-1584 3895 l
-1579 3918 l
-1576 3941 l
-1572 3965 l
-1569 3989 l
-1567 4013 l
-1566 4037 l
-1565 4061 l
-1564 4086 l
-1564 4111 l
-1565 4136 l
-1567 4162 l
-1569 4187 l
-1572 4213 l
-1576 4239 l
-1580 4265 l
-1585 4291 l
-1591 4317 l
-1598 4343 l
-1605 4369 l
-1613 4395 l
-1622 4421 l
-1632 4447 l
-1642 4473 l
-1653 4499 l
-1665 4524 l
-1678 4550 l
-1691 4575 l
-1705 4600 l
-1720 4625 l
-1736 4649 l
-1753 4673 l
-1770 4697 l
-1788 4720 l
-1806 4743 l
-1826 4765 l
-1846 4787 l
-1866 4808 l
-1888 4829 l
-1909 4849 l
-1932 4869 l
-1955 4888 l
-1978 4907 l
-2002 4924 l
-2027 4941 l
-2052 4958 l
-2077 4973 l
-2103 4988 l
-2129 5002 l
-2156 5016 l
-2182 5028 l
-2209 5040 l
-2211 5041 l
-2213 5042 l
-2215 5043 l
-2217 5043 l
-2219 5044 l
-2221 5045 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2983 3316 l
-2983 3315 l
-2983 3314 l
-2983 3313 l
-2983 3312 l
-2983 3311 l
-2982 3310 l
-2981 3297 l
-2979 3283 l
-2977 3270 l
-2976 3257 l
-2974 3244 l
-2971 3231 l
-2969 3218 l
-2967 3205 l
-2964 3192 l
-2962 3179 l
-2959 3167 l
-2956 3154 l
-2953 3142 l
-2950 3130 l
-2947 3117 l
-2943 3105 l
-2940 3093 l
-2936 3081 l
-2932 3069 l
-2928 3057 l
-2924 3046 l
-2920 3034 l
-2915 3023 l
-2911 3012 l
-2906 3000 l
-2901 2989 l
-2896 2978 l
-2890 2967 l
-2885 2957 l
-2879 2946 l
-2873 2936 l
-2867 2925 l
-2861 2915 l
-2855 2905 l
-2848 2895 l
-2841 2885 l
-2834 2876 l
-2827 2866 l
-2819 2857 l
-2811 2848 l
-2803 2839 l
-2795 2830 l
-2786 2821 l
-2778 2813 l
-2768 2804 l
-2759 2796 l
-2749 2788 l
-2739 2781 l
-2729 2773 l
-2718 2766 l
-2707 2759 l
-2695 2752 l
-2684 2745 l
-2671 2739 l
-2659 2733 l
-2645 2727 l
-2632 2722 l
-2618 2717 l
-2603 2712 l
-2588 2707 l
-2572 2703 l
-2556 2700 l
-2539 2696 l
-2521 2694 l
-2503 2691 l
-2483 2689 l
-2464 2688 l
-2443 2687 l
-2421 2687 l
-2399 2688 l
-2375 2690 l
-2351 2692 l
-2326 2695 l
-2299 2700 l
-2271 2705 l
-2242 2712 l
-2212 2720 l
-2180 2729 l
-2148 2741 l
-2113 2754 l
-2077 2769 l
-2040 2787 l
-2002 2807 l
-1962 2829 l
-1920 2855 l
-1878 2884 l
-1834 2917 l
-1831 2919 l
-1828 2922 l
-1825 2924 l
-1822 2927 l
-1819 2930 l
-1816 2932 l
-1812 2935 l
-1809 2937 l
-1806 2940 l
-1803 2943 l
-1800 2945 l
-1797 2948 l
-1793 2951 l
-1790 2954 l
-1787 2956 l
-1784 2959 l
-1781 2962 l
-1777 2965 l
-1774 2968 l
-1771 2971 l
-1768 2974 l
-1765 2976 l
-1761 2979 l
-1758 2982 l
-1755 2985 l
-1752 2988 l
-1749 2991 l
-1745 2994 l
-1742 2998 l
-1739 3001 l
-1736 3004 l
-1732 3007 l
-1729 3010 l
-1726 3013 l
-1723 3017 l
-1720 3020 l
-1716 3023 l
-1713 3026 l
-1710 3030 l
-1707 3033 l
-1703 3036 l
-1700 3040 l
-1697 3043 l
-1694 3047 l
-1691 3050 l
-1687 3054 l
-1684 3057 l
-1681 3061 l
-1678 3064 l
-1675 3068 l
-1671 3071 l
-1668 3075 l
-1665 3079 l
-1662 3082 l
-1659 3086 l
-1655 3090 l
-1652 3094 l
-1649 3097 l
-1646 3101 l
-1643 3105 l
-1640 3109 l
-1636 3113 l
-1633 3117 l
-1630 3121 l
-1627 3125 l
-1624 3129 l
-1621 3133 l
-1618 3137 l
-1614 3141 l
-1611 3145 l
-1608 3149 l
-1605 3153 l
-1602 3157 l
-1599 3161 l
-1596 3165 l
-1593 3170 l
-1590 3174 l
-1587 3178 l
-1584 3183 l
-1581 3187 l
-1578 3191 l
-1575 3196 l
-1572 3200 l
-1569 3204 l
-1566 3209 l
-1563 3213 l
-1560 3218 l
-1557 3222 l
-1554 3227 l
-1551 3231 l
-1548 3236 l
-1545 3241 l
-1542 3245 l
-1539 3250 l
-1536 3255 l
-1534 3259 l
-1531 3264 l
-1528 3269 l
-1525 3274 l
-1522 3279 l
-1519 3283 l
-1517 3288 l
-1514 3293 l
-S
-1514 3293 m
-1511 3298 l
-1508 3303 l
-1506 3308 l
-1503 3313 l
-1500 3318 l
-1498 3323 l
-1495 3328 l
-1492 3333 l
-1490 3338 l
-1487 3343 l
-1485 3348 l
-1482 3353 l
-1479 3359 l
-1477 3364 l
-1474 3369 l
-1472 3374 l
-1469 3379 l
-1467 3385 l
-1465 3390 l
-1462 3395 l
-1460 3401 l
-1457 3406 l
-1455 3411 l
-1453 3417 l
-1450 3422 l
-1448 3428 l
-1446 3433 l
-1443 3438 l
-1441 3444 l
-1439 3449 l
-1437 3455 l
-1435 3461 l
-1432 3466 l
-1430 3472 l
-1428 3477 l
-1426 3483 l
-1424 3488 l
-1422 3494 l
-1420 3500 l
-1418 3505 l
-1416 3511 l
-1414 3517 l
-1412 3522 l
-1410 3528 l
-1408 3534 l
-1407 3540 l
-1405 3545 l
-1403 3551 l
-1401 3557 l
-1399 3563 l
-1398 3569 l
-1396 3574 l
-1394 3580 l
-1393 3586 l
-1391 3592 l
-1390 3598 l
-1388 3604 l
-1386 3609 l
-1385 3615 l
-1383 3621 l
-1382 3627 l
-1381 3633 l
-1379 3639 l
-1378 3645 l
-1376 3651 l
-1375 3657 l
-1374 3663 l
-1373 3669 l
-1371 3675 l
-1370 3681 l
-1369 3687 l
-1368 3693 l
-1367 3699 l
-1365 3705 l
-1364 3711 l
-1363 3717 l
-1362 3723 l
-1361 3729 l
-1360 3735 l
-1359 3741 l
-1359 3747 l
-1358 3753 l
-1357 3759 l
-1356 3765 l
-1355 3771 l
-1354 3777 l
-1354 3783 l
-1353 3789 l
-1352 3795 l
-1352 3801 l
-1351 3807 l
-1350 3813 l
-1350 3819 l
-1349 3825 l
-1349 3831 l
-1348 3837 l
-1348 3843 l
-1347 3849 l
-1347 3855 l
-1347 3861 l
-1346 3867 l
-1346 3873 l
-1346 3879 l
-1345 3885 l
-1345 3891 l
-1345 3897 l
-1345 3902 l
-1345 3908 l
-1344 3914 l
-1344 3920 l
-1344 3926 l
-1344 3932 l
-1344 3938 l
-1344 3944 l
-1344 3950 l
-1344 3956 l
-1344 3961 l
-1344 3967 l
-1345 3973 l
-1345 3979 l
-1345 3985 l
-1345 3991 l
-1345 3996 l
-1346 4002 l
-1346 4008 l
-1346 4014 l
-1346 4019 l
-1347 4025 l
-1347 4031 l
-1348 4037 l
-1348 4042 l
-1348 4048 l
-1349 4054 l
-1349 4059 l
-1350 4065 l
-1350 4071 l
-1351 4076 l
-1352 4082 l
-1352 4087 l
-1353 4093 l
-1354 4098 l
-1354 4104 l
-1355 4109 l
-1356 4115 l
-1356 4120 l
-1357 4126 l
-1358 4131 l
-1359 4137 l
-1360 4142 l
-1360 4148 l
-1361 4153 l
-1362 4158 l
-1363 4164 l
-1364 4169 l
-1365 4174 l
-1366 4180 l
-1367 4185 l
-1368 4190 l
-1369 4195 l
-1370 4201 l
-1371 4206 l
-1372 4211 l
-1373 4216 l
-1374 4221 l
-1375 4226 l
-1377 4231 l
-1378 4236 l
-1379 4242 l
-1380 4247 l
-1381 4252 l
-1383 4257 l
-1384 4262 l
-1385 4267 l
-1386 4271 l
-1388 4276 l
-1389 4281 l
-1390 4286 l
-1392 4291 l
-1393 4296 l
-1394 4301 l
-1396 4305 l
-1397 4310 l
-1399 4315 l
-1400 4320 l
-1401 4324 l
-1403 4329 l
-1404 4334 l
-1406 4338 l
-1407 4343 l
-1409 4348 l
-1410 4352 l
-1412 4357 l
-1413 4361 l
-1415 4366 l
-1416 4370 l
-1418 4375 l
-1420 4379 l
-1421 4384 l
-1423 4388 l
-S
-1423 4388 m
-1424 4392 l
-1426 4397 l
-1428 4401 l
-1429 4406 l
-1431 4410 l
-1433 4414 l
-1434 4418 l
-1436 4423 l
-1438 4427 l
-1439 4431 l
-1441 4435 l
-1443 4439 l
-1445 4443 l
-1446 4448 l
-1448 4452 l
-1450 4456 l
-1452 4460 l
-1453 4464 l
-1455 4468 l
-1457 4472 l
-1483 4525 l
-1509 4575 l
-1537 4620 l
-1564 4662 l
-1592 4701 l
-1620 4736 l
-1647 4769 l
-1674 4798 l
-1701 4825 l
-1727 4850 l
-1753 4872 l
-1778 4893 l
-1802 4911 l
-1826 4928 l
-1849 4944 l
-1871 4958 l
-1893 4970 l
-1914 4981 l
-1935 4991 l
-1955 5001 l
-1975 5009 l
-1994 5016 l
-2012 5022 l
-2030 5028 l
-2048 5032 l
-2065 5037 l
-2082 5040 l
-2098 5043 l
-2114 5045 l
-2130 5047 l
-2145 5048 l
-2160 5048 l
-2174 5049 l
-2189 5048 l
-2203 5048 l
-2216 5046 l
-2217 5046 l
-2218 5046 l
-2219 5046 l
-2220 5046 l
-2221 5046 l
-2222 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2984 3316 l
-2985 3316 l
-2986 3316 l
-2987 3315 l
-2988 3315 l
-2989 3315 l
-2990 3314 l
-3003 3309 l
-3017 3304 l
-3030 3299 l
-3044 3295 l
-3058 3291 l
-3071 3286 l
-3085 3282 l
-3099 3279 l
-3113 3275 l
-3126 3272 l
-3140 3268 l
-3154 3265 l
-3168 3263 l
-3182 3260 l
-3195 3258 l
-3209 3255 l
-3223 3254 l
-3237 3252 l
-3251 3250 l
-3265 3249 l
-3279 3248 l
-3293 3247 l
-3307 3247 l
-3321 3247 l
-3335 3247 l
-3349 3247 l
-3363 3247 l
-3377 3248 l
-3391 3249 l
-3405 3251 l
-3419 3252 l
-3433 3254 l
-3447 3257 l
-3461 3259 l
-3475 3262 l
-3489 3265 l
-3502 3269 l
-3516 3273 l
-3530 3277 l
-3544 3281 l
-3558 3286 l
-3572 3292 l
-3586 3297 l
-3600 3304 l
-3614 3310 l
-3627 3317 l
-3641 3324 l
-3655 3332 l
-3668 3341 l
-3682 3349 l
-3695 3359 l
-3709 3368 l
-3722 3379 l
-3736 3389 l
-3749 3401 l
-3762 3413 l
-3775 3425 l
-3788 3438 l
-3801 3452 l
-3814 3467 l
-3826 3482 l
-3839 3498 l
-3851 3514 l
-3863 3532 l
-3875 3550 l
-3886 3569 l
-3897 3588 l
-3908 3609 l
-3919 3631 l
-3929 3653 l
-3939 3677 l
-3949 3701 l
-3958 3727 l
-3966 3753 l
-3974 3781 l
-3981 3809 l
-3988 3839 l
-3993 3870 l
-3998 3903 l
-4002 3936 l
-4005 3971 l
-4007 4006 l
-4007 4043 l
-4007 4082 l
-4005 4121 l
-4001 4161 l
-3996 4203 l
-3989 4245 l
-3980 4289 l
-3969 4333 l
-3957 4378 l
-3942 4423 l
-3925 4469 l
-3905 4515 l
-3884 4561 l
-3860 4607 l
-3834 4653 l
-3805 4698 l
-3774 4742 l
-3741 4785 l
-3706 4827 l
-3669 4868 l
-3631 4907 l
-3590 4944 l
-3549 4979 l
-3506 5012 l
-3462 5043 l
-3417 5072 l
-3372 5098 l
-3327 5122 l
-3281 5144 l
-3236 5163 l
-3190 5181 l
-3146 5196 l
-3101 5209 l
-3058 5220 l
-3015 5229 l
-2973 5236 l
-2932 5242 l
-2892 5246 l
-2854 5248 l
-2816 5249 l
-2779 5249 l
-2744 5247 l
-2710 5245 l
-2677 5241 l
-2645 5237 l
-2615 5232 l
-2585 5226 l
-2557 5219 l
-2529 5211 l
-2503 5203 l
-2478 5195 l
-2454 5186 l
-2430 5176 l
-2408 5167 l
-2387 5156 l
-2366 5146 l
-2346 5135 l
-2327 5124 l
-2309 5112 l
-2292 5101 l
-2276 5089 l
-2260 5077 l
-2245 5064 l
-2230 5052 l
-2229 5051 l
-2228 5050 l
-2227 5049 l
-2226 5048 l
-2225 5047 l
-2224 5047 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-3302 3581 m
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3301 3582 l
-3301 3582 l
-3300 3583 l
-3299 3584 l
-3299 3584 l
-3298 3585 l
-3298 3585 l
-3297 3586 l
-3297 3586 l
-3296 3587 l
-3295 3588 l
-3295 3588 l
-3294 3589 l
-3286 3596 l
-3277 3603 l
-3268 3610 l
-3259 3617 l
-3249 3623 l
-3239 3628 l
-3229 3634 l
-3218 3639 l
-3207 3643 l
-3196 3648 l
-3185 3651 l
-3174 3655 l
-3162 3658 l
-3150 3661 l
-3138 3663 l
-3126 3665 l
-3114 3666 l
-3101 3668 l
-3089 3669 l
-3076 3669 l
-3064 3669 l
-3051 3669 l
-3038 3669 l
-3025 3668 l
-3012 3666 l
-2999 3665 l
-2986 3663 l
-2974 3661 l
-2961 3658 l
-2948 3655 l
-2935 3652 l
-2922 3649 l
-2909 3645 l
-2897 3641 l
-2884 3636 l
-2872 3632 l
-2859 3627 l
-2847 3621 l
-2835 3616 l
-2823 3610 l
-2811 3604 l
-2799 3597 l
-2787 3591 l
-2776 3584 l
-2765 3577 l
-2754 3569 l
-2743 3562 l
-2733 3554 l
-2722 3546 l
-2712 3537 l
-2703 3529 l
-2693 3520 l
-2684 3511 l
-2675 3502 l
-2666 3493 l
-2658 3483 l
-2650 3473 l
-2642 3464 l
-2635 3454 l
-2628 3443 l
-2621 3433 l
-2615 3423 l
-2609 3412 l
-2604 3401 l
-2599 3391 l
-2594 3380 l
-2590 3369 l
-2586 3358 l
-2583 3347 l
-2580 3335 l
-2577 3324 l
-2575 3313 l
-2574 3302 l
-2573 3290 l
-2573 3279 l
-2573 3268 l
-2573 3256 l
-2574 3245 l
-2576 3234 l
-2578 3223 l
-2581 3212 l
-2584 3201 l
-2588 3190 l
-2592 3179 l
-2597 3169 l
-2603 3158 l
-2609 3148 l
-2616 3138 l
-2623 3128 l
-2631 3119 l
-2639 3110 l
-2648 3101 l
-2658 3092 l
-2668 3084 l
-2678 3076 l
-2689 3068 l
-2701 3061 l
-2713 3054 l
-2726 3048 l
-2739 3042 l
-2753 3036 l
-2767 3031 l
-2782 3027 l
-2796 3023 l
-2812 3020 l
-2828 3017 l
-2844 3014 l
-2860 3013 l
-2877 3012 l
-2894 3011 l
-2911 3012 l
-2928 3012 l
-2945 3014 l
-2963 3016 l
-2980 3019 l
-2998 3022 l
-3015 3026 l
-3033 3031 l
-3050 3036 l
-3067 3042 l
-3084 3049 l
-3101 3056 l
-3118 3064 l
-3134 3072 l
-3150 3081 l
-3165 3090 l
-3181 3100 l
-3195 3110 l
-3210 3121 l
-3223 3132 l
-3236 3144 l
-3249 3156 l
-3261 3168 l
-3273 3181 l
-3284 3193 l
-3294 3206 l
-3303 3220 l
-3312 3233 l
-3321 3247 l
-3328 3260 l
-3335 3274 l
-3342 3288 l
-3347 3302 l
-3352 3315 l
-3357 3329 l
-3360 3343 l
-3363 3356 l
-3366 3370 l
-3367 3383 l
-3369 3396 l
-3369 3409 l
-3369 3422 l
-3368 3435 l
-3367 3447 l
-3365 3459 l
-3362 3471 l
-3359 3482 l
-3356 3494 l
-3352 3505 l
-3347 3515 l
-3342 3526 l
-3337 3536 l
-3331 3545 l
-3324 3555 l
-3317 3564 l
-3310 3572 l
-3302 3581 l
-S
-3500 3947 m
-3500 3947 l
-3500 3947 l
-3500 3947 l
-3500 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3498 3948 l
-3496 3949 l
-3495 3950 l
-3494 3951 l
-3493 3951 l
-3492 3952 l
-3490 3953 l
-3489 3954 l
-3488 3954 l
-3487 3955 l
-3486 3956 l
-3484 3957 l
-3483 3957 l
-3466 3968 l
-3448 3977 l
-3430 3986 l
-3412 3994 l
-3393 4002 l
-3374 4008 l
-3354 4015 l
-3335 4020 l
-3315 4025 l
-3295 4030 l
-3275 4034 l
-3254 4037 l
-3234 4040 l
-3213 4042 l
-3192 4044 l
-3171 4045 l
-3149 4045 l
-3128 4045 l
-3107 4045 l
-3085 4044 l
-3064 4042 l
-3042 4041 l
-3021 4038 l
-2999 4035 l
-2977 4032 l
-2956 4028 l
-2934 4024 l
-2913 4019 l
-2891 4014 l
-2870 4008 l
-2848 4002 l
-2827 3996 l
-2806 3989 l
-2785 3981 l
-2764 3974 l
-2743 3966 l
-2722 3957 l
-2701 3948 l
-2681 3939 l
-2661 3929 l
-2641 3919 l
-2621 3909 l
-2601 3898 l
-2582 3887 l
-2563 3876 l
-2544 3864 l
-2526 3852 l
-2507 3839 l
-2489 3826 l
-2472 3813 l
-2454 3800 l
-2437 3786 l
-2421 3772 l
-2405 3758 l
-2389 3743 l
-2373 3728 l
-2358 3713 l
-2343 3697 l
-2329 3681 l
-2315 3665 l
-2302 3649 l
-2289 3632 l
-2277 3615 l
-2265 3598 l
-2254 3581 l
-2243 3563 l
-2233 3545 l
-2224 3527 l
-2215 3509 l
-2207 3490 l
-2199 3472 l
-2192 3453 l
-2186 3433 l
-2181 3414 l
-2176 3395 l
-2172 3375 l
-2169 3355 l
-2166 3335 l
-2165 3315 l
-2164 3295 l
-2164 3274 l
-2166 3254 l
-2168 3233 l
-2171 3213 l
-2175 3192 l
-2180 3172 l
-2186 3151 l
-2194 3130 l
-2202 3110 l
-2212 3089 l
-2223 3069 l
-2235 3049 l
-2249 3029 l
-2264 3009 l
-2280 2990 l
-2297 2971 l
-2316 2952 l
-2336 2934 l
-2358 2916 l
-2382 2899 l
-2406 2883 l
-2433 2867 l
-2461 2853 l
-2490 2839 l
-2521 2826 l
-2553 2814 l
-2586 2804 l
-2622 2795 l
-2658 2787 l
-2695 2781 l
-2734 2777 l
-2774 2774 l
-2814 2773 l
-2856 2775 l
-2898 2778 l
-2940 2783 l
-2983 2790 l
-3026 2799 l
-3068 2810 l
-3111 2824 l
-3153 2839 l
-3194 2856 l
-3234 2876 l
-3273 2897 l
-3312 2920 l
-3348 2944 l
-3383 2970 l
-3417 2997 l
-3449 3025 l
-3479 3054 l
-3507 3084 l
-3533 3115 l
-3557 3146 l
-3580 3178 l
-3600 3209 l
-3618 3241 l
-3634 3273 l
-3649 3305 l
-3662 3336 l
-3672 3368 l
-3681 3398 l
-3689 3429 l
-3695 3458 l
-3699 3487 l
-3701 3516 l
-3703 3544 l
-3703 3571 l
-3701 3597 l
-3699 3623 l
-3695 3647 l
-3690 3671 l
-3684 3694 l
-3677 3717 l
-3669 3738 l
-3661 3759 l
-3651 3779 l
-3640 3798 l
-3629 3816 l
-3617 3834 l
-3605 3851 l
-3591 3867 l
-3577 3882 l
-3563 3896 l
-3548 3910 l
-3532 3923 l
-3516 3935 l
-3500 3947 l
-S
-3529 4372 m
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3526 4373 l
-3525 4374 l
-3523 4374 l
-3521 4375 l
-3520 4375 l
-3518 4376 l
-3516 4376 l
-3515 4377 l
-3513 4377 l
-3511 4378 l
-3510 4378 l
-3508 4379 l
-3507 4380 l
-3483 4387 l
-3460 4393 l
-3436 4399 l
-3413 4404 l
-3389 4408 l
-3364 4412 l
-3340 4415 l
-3316 4418 l
-3291 4420 l
-3266 4421 l
-3241 4422 l
-3216 4423 l
-3191 4423 l
-3166 4422 l
-3140 4421 l
-3115 4420 l
-3090 4418 l
-3064 4415 l
-3038 4412 l
-3013 4409 l
-2987 4405 l
-2961 4401 l
-2936 4396 l
-2910 4391 l
-2884 4385 l
-2859 4379 l
-2833 4372 l
-2808 4366 l
-2782 4358 l
-2757 4351 l
-2731 4343 l
-2706 4334 l
-2681 4325 l
-2656 4316 l
-2631 4306 l
-2606 4297 l
-2581 4286 l
-2557 4276 l
-2532 4265 l
-2508 4253 l
-2484 4242 l
-2460 4229 l
-2436 4217 l
-2413 4204 l
-2390 4191 l
-2367 4178 l
-2344 4164 l
-2322 4150 l
-2299 4136 l
-2277 4121 l
-2256 4107 l
-2234 4091 l
-2213 4076 l
-2192 4060 l
-2172 4044 l
-2152 4028 l
-2132 4011 l
-2113 3994 l
-2094 3977 l
-2075 3959 l
-2057 3942 l
-2039 3923 l
-2022 3905 l
-2005 3887 l
-1989 3868 l
-1973 3849 l
-1957 3829 l
-1942 3809 l
-1928 3790 l
-1914 3769 l
-1901 3749 l
-1888 3728 l
-1876 3707 l
-1864 3686 l
-1853 3664 l
-1843 3642 l
-1833 3620 l
-1824 3598 l
-1816 3575 l
-1809 3552 l
-1802 3529 l
-1797 3505 l
-1792 3481 l
-1788 3457 l
-1785 3432 l
-1783 3407 l
-1782 3382 l
-1782 3356 l
-1783 3330 l
-1785 3304 l
-1789 3277 l
-1794 3250 l
-1800 3222 l
-1808 3194 l
-1818 3166 l
-1829 3137 l
-1842 3108 l
-1858 3079 l
-1875 3049 l
-1895 3019 l
-1917 2989 l
-1941 2958 l
-1969 2927 l
-2000 2896 l
-2034 2865 l
-2072 2835 l
-2114 2805 l
-2117 2803 l
-2120 2801 l
-2123 2798 l
-2127 2796 l
-2130 2794 l
-2133 2792 l
-2136 2790 l
-2140 2788 l
-2143 2786 l
-2146 2784 l
-2150 2782 l
-2153 2780 l
-2156 2778 l
-2160 2775 l
-2163 2773 l
-2167 2771 l
-2170 2769 l
-2174 2767 l
-2177 2765 l
-2181 2763 l
-2185 2761 l
-2188 2759 l
-2192 2757 l
-2195 2755 l
-2199 2753 l
-2203 2751 l
-2207 2749 l
-2210 2747 l
-2214 2745 l
-2218 2743 l
-2222 2741 l
-2226 2739 l
-2229 2737 l
-2233 2735 l
-2237 2734 l
-2241 2732 l
-2245 2730 l
-2249 2728 l
-2253 2726 l
-2257 2724 l
-2261 2722 l
-2265 2720 l
-2270 2718 l
-2274 2717 l
-2278 2715 l
-2282 2713 l
-2286 2711 l
-2291 2709 l
-2295 2708 l
-2299 2706 l
-2304 2704 l
-2308 2702 l
-2312 2700 l
-2317 2699 l
-2321 2697 l
-2326 2695 l
-2330 2694 l
-2335 2692 l
-2339 2690 l
-2344 2689 l
-2348 2687 l
-2353 2685 l
-2358 2684 l
-2362 2682 l
-2367 2681 l
-2372 2679 l
-S
-2372 2679 m
-2376 2677 l
-2381 2676 l
-2386 2674 l
-2391 2673 l
-2396 2671 l
-2400 2670 l
-2405 2668 l
-2410 2667 l
-2415 2666 l
-2420 2664 l
-2425 2663 l
-2430 2661 l
-2435 2660 l
-2440 2659 l
-2446 2657 l
-2451 2656 l
-2456 2655 l
-2461 2653 l
-2466 2652 l
-2472 2651 l
-2477 2650 l
-2482 2649 l
-2487 2647 l
-2493 2646 l
-2498 2645 l
-2504 2644 l
-2509 2643 l
-2514 2642 l
-2520 2641 l
-2525 2640 l
-2531 2639 l
-2537 2638 l
-2542 2637 l
-2548 2636 l
-2553 2635 l
-2559 2634 l
-2565 2633 l
-2570 2633 l
-2576 2632 l
-2582 2631 l
-2588 2630 l
-2593 2630 l
-2599 2629 l
-2605 2628 l
-2611 2627 l
-2617 2627 l
-2623 2626 l
-2629 2626 l
-2635 2625 l
-2641 2625 l
-2647 2624 l
-2653 2624 l
-2659 2623 l
-2665 2623 l
-2671 2623 l
-2677 2622 l
-2683 2622 l
-2689 2622 l
-2696 2621 l
-2702 2621 l
-2708 2621 l
-2714 2621 l
-2721 2621 l
-2727 2621 l
-2733 2621 l
-2739 2621 l
-2746 2621 l
-2752 2621 l
-2759 2621 l
-2765 2621 l
-2771 2621 l
-2778 2621 l
-2784 2621 l
-2791 2622 l
-2797 2622 l
-2804 2622 l
-2810 2623 l
-2817 2623 l
-2823 2623 l
-2830 2624 l
-2836 2624 l
-2843 2625 l
-2850 2625 l
-2856 2626 l
-2863 2627 l
-2869 2627 l
-2876 2628 l
-2883 2629 l
-2889 2630 l
-2896 2631 l
-2903 2631 l
-2909 2632 l
-2916 2633 l
-2923 2634 l
-2929 2635 l
-2936 2636 l
-2943 2637 l
-2950 2639 l
-2956 2640 l
-2963 2641 l
-2970 2642 l
-2977 2644 l
-2983 2645 l
-2990 2646 l
-2997 2648 l
-3004 2649 l
-3010 2651 l
-3017 2652 l
-3024 2654 l
-3031 2655 l
-3038 2657 l
-3044 2659 l
-3051 2660 l
-3058 2662 l
-3065 2664 l
-3071 2666 l
-3078 2668 l
-3085 2670 l
-3092 2672 l
-3098 2674 l
-3105 2676 l
-3112 2678 l
-3119 2680 l
-3125 2682 l
-3132 2684 l
-3139 2687 l
-3146 2689 l
-3152 2691 l
-3159 2694 l
-3166 2696 l
-3172 2698 l
-3179 2701 l
-3186 2703 l
-3192 2706 l
-3199 2709 l
-3205 2711 l
-3212 2714 l
-3219 2717 l
-3225 2719 l
-3232 2722 l
-3238 2725 l
-3245 2728 l
-3251 2731 l
-3258 2734 l
-3264 2737 l
-3271 2740 l
-3277 2743 l
-3284 2746 l
-3290 2749 l
-3296 2752 l
-3303 2755 l
-3309 2758 l
-3315 2762 l
-3322 2765 l
-3328 2768 l
-3334 2772 l
-3340 2775 l
-3347 2778 l
-3353 2782 l
-3359 2785 l
-3365 2789 l
-3371 2792 l
-3377 2796 l
-3383 2800 l
-3389 2803 l
-3395 2807 l
-3401 2811 l
-3407 2814 l
-3413 2818 l
-3419 2822 l
-3425 2826 l
-3431 2829 l
-3437 2833 l
-3442 2837 l
-3448 2841 l
-3454 2845 l
-3460 2849 l
-3465 2853 l
-3471 2857 l
-3476 2861 l
-3482 2865 l
-3488 2869 l
-3493 2873 l
-3499 2878 l
-3504 2882 l
-3509 2886 l
-3515 2890 l
-3520 2894 l
-3525 2899 l
-3531 2903 l
-3536 2907 l
-3541 2911 l
-3546 2916 l
-3551 2920 l
-3556 2925 l
-3562 2929 l
-3567 2933 l
-3572 2938 l
-3577 2942 l
-S
-3577 2942 m
-3581 2947 l
-3586 2951 l
-3591 2956 l
-3596 2960 l
-3601 2965 l
-3606 2969 l
-3610 2974 l
-3615 2978 l
-3620 2983 l
-3624 2987 l
-3629 2992 l
-3633 2996 l
-3638 3001 l
-3642 3006 l
-3647 3010 l
-3651 3015 l
-3655 3020 l
-3660 3024 l
-3664 3029 l
-3668 3034 l
-3672 3038 l
-3676 3043 l
-3681 3048 l
-3685 3052 l
-3689 3057 l
-3693 3062 l
-3697 3067 l
-3701 3071 l
-3705 3076 l
-3708 3081 l
-3712 3086 l
-3716 3090 l
-3720 3095 l
-3724 3100 l
-3727 3105 l
-3731 3109 l
-3734 3114 l
-3738 3119 l
-3742 3124 l
-3745 3128 l
-3749 3133 l
-3752 3138 l
-3755 3143 l
-3759 3147 l
-3762 3152 l
-3765 3157 l
-3769 3162 l
-3772 3166 l
-3775 3171 l
-3778 3176 l
-3781 3181 l
-3784 3185 l
-3787 3190 l
-3791 3195 l
-3793 3200 l
-3796 3204 l
-3799 3209 l
-3802 3214 l
-3805 3219 l
-3808 3223 l
-3811 3228 l
-3813 3233 l
-3816 3238 l
-3819 3242 l
-3821 3247 l
-3824 3252 l
-3827 3256 l
-3829 3261 l
-3832 3266 l
-3834 3270 l
-3837 3275 l
-3839 3280 l
-3842 3284 l
-3844 3289 l
-3846 3294 l
-3849 3298 l
-3851 3303 l
-3853 3307 l
-3855 3312 l
-3858 3317 l
-3860 3321 l
-3862 3326 l
-3864 3330 l
-3866 3335 l
-3868 3339 l
-3870 3344 l
-3872 3348 l
-3874 3353 l
-3876 3358 l
-3878 3362 l
-3880 3366 l
-3882 3371 l
-3883 3375 l
-3885 3380 l
-3887 3384 l
-3889 3389 l
-3890 3393 l
-3892 3398 l
-3894 3402 l
-3895 3406 l
-3897 3411 l
-3899 3415 l
-3900 3419 l
-3902 3424 l
-3903 3428 l
-3905 3432 l
-3906 3437 l
-3907 3441 l
-3909 3445 l
-3910 3450 l
-3912 3454 l
-3913 3458 l
-3914 3462 l
-3916 3467 l
-3917 3471 l
-3918 3475 l
-3919 3479 l
-3920 3483 l
-3922 3488 l
-3923 3492 l
-3924 3496 l
-3925 3500 l
-3926 3504 l
-3927 3508 l
-3928 3512 l
-3929 3516 l
-3930 3520 l
-3931 3524 l
-3932 3528 l
-3933 3532 l
-3934 3536 l
-3935 3540 l
-3936 3544 l
-3937 3548 l
-3938 3552 l
-3938 3556 l
-3939 3560 l
-3940 3564 l
-3941 3568 l
-3941 3572 l
-3942 3576 l
-3950 3629 l
-3956 3679 l
-3958 3727 l
-3957 3772 l
-3955 3815 l
-3950 3855 l
-3944 3893 l
-3936 3930 l
-3926 3964 l
-3916 3996 l
-3904 4027 l
-3891 4055 l
-3877 4083 l
-3863 4108 l
-3847 4133 l
-3831 4156 l
-3814 4177 l
-3797 4197 l
-3779 4217 l
-3760 4235 l
-3741 4252 l
-3722 4268 l
-3702 4283 l
-3681 4297 l
-3661 4310 l
-3640 4322 l
-3618 4334 l
-3596 4344 l
-3574 4354 l
-3552 4363 l
-3529 4372 l
-S
-3338 4792 m
-3338 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3336 4792 l
-3336 4792 l
-3336 4792 l
-3335 4792 l
-3333 4792 l
-3332 4792 l
-3330 4792 l
-3329 4792 l
-3327 4792 l
-3326 4792 l
-3324 4792 l
-3323 4792 l
-3321 4792 l
-3320 4792 l
-3318 4792 l
-3316 4792 l
-3295 4792 l
-3273 4791 l
-3251 4790 l
-3229 4789 l
-3207 4787 l
-3185 4786 l
-3162 4783 l
-3139 4781 l
-3116 4778 l
-3093 4775 l
-3070 4772 l
-3047 4769 l
-3023 4765 l
-3000 4761 l
-2976 4756 l
-2952 4751 l
-2928 4746 l
-2904 4741 l
-2880 4736 l
-2856 4730 l
-2832 4724 l
-2808 4717 l
-2784 4711 l
-2760 4704 l
-2736 4697 l
-2711 4689 l
-2687 4682 l
-2663 4674 l
-2639 4665 l
-2614 4657 l
-2590 4648 l
-2566 4639 l
-2542 4630 l
-2518 4621 l
-2494 4611 l
-2470 4601 l
-2446 4591 l
-2423 4581 l
-2399 4570 l
-2376 4560 l
-2352 4549 l
-2329 4537 l
-2306 4526 l
-2283 4514 l
-2260 4503 l
-2237 4491 l
-2215 4478 l
-2192 4466 l
-2170 4453 l
-2148 4441 l
-2126 4428 l
-2105 4415 l
-2083 4401 l
-2062 4388 l
-2041 4375 l
-2021 4361 l
-2000 4347 l
-1980 4333 l
-1960 4319 l
-1940 4305 l
-1921 4290 l
-1902 4276 l
-1883 4261 l
-1864 4246 l
-1846 4232 l
-1828 4217 l
-1810 4202 l
-1793 4187 l
-1776 4171 l
-1759 4156 l
-1743 4141 l
-1727 4125 l
-1711 4110 l
-1696 4094 l
-1681 4079 l
-1666 4063 l
-1652 4048 l
-1638 4032 l
-1624 4016 l
-1611 4000 l
-1598 3985 l
-1586 3969 l
-1574 3953 l
-1562 3937 l
-1551 3921 l
-1540 3906 l
-1530 3890 l
-1520 3874 l
-1510 3858 l
-1501 3843 l
-1492 3827 l
-1484 3811 l
-1476 3796 l
-1469 3780 l
-1462 3765 l
-1455 3749 l
-1449 3734 l
-1443 3719 l
-1438 3703 l
-1433 3688 l
-1429 3673 l
-1425 3658 l
-1421 3643 l
-1418 3629 l
-1416 3614 l
-1414 3599 l
-1412 3585 l
-1411 3571 l
-1410 3556 l
-1410 3542 l
-1410 3528 l
-1411 3514 l
-1412 3500 l
-1414 3486 l
-1416 3473 l
-1419 3459 l
-1422 3444 l
-1427 3430 l
-1432 3414 l
-1439 3395 l
-1440 3393 l
-1441 3391 l
-1441 3389 l
-1442 3388 l
-1443 3386 l
-1444 3383 l
-1445 3381 l
-1446 3379 l
-1447 3376 l
-1448 3373 l
-1450 3370 l
-1451 3367 l
-1453 3363 l
-1455 3359 l
-1457 3354 l
-1460 3348 l
-1463 3341 l
-1468 3333 l
-1473 3322 l
-1480 3308 l
-1491 3289 l
-1507 3259 l
-1509 3256 l
-1510 3254 l
-1512 3251 l
-1514 3248 l
-1515 3245 l
-1517 3241 l
-1519 3238 l
-1522 3234 l
-1524 3231 l
-1526 3227 l
-1529 3223 l
-1531 3219 l
-1534 3214 l
-1537 3210 l
-1540 3205 l
-1543 3200 l
-1547 3194 l
-1551 3188 l
-1555 3182 l
-1559 3176 l
-1564 3169 l
-1568 3162 l
-1574 3154 l
-1580 3146 l
-1586 3138 l
-1593 3128 l
-1600 3118 l
-1608 3108 l
-1617 3096 l
-1627 3084 l
-1638 3070 l
-S
-1638 3070 m
-1650 3056 l
-1664 3040 l
-1679 3023 l
-1696 3004 l
-1716 2983 l
-1739 2960 l
-1765 2935 l
-1796 2908 l
-1832 2877 l
-1875 2844 l
-1926 2807 l
-1930 2804 l
-1934 2801 l
-1939 2798 l
-1943 2796 l
-1947 2793 l
-1952 2790 l
-1956 2787 l
-1960 2784 l
-1965 2781 l
-1970 2778 l
-1974 2775 l
-1979 2773 l
-1984 2770 l
-1989 2767 l
-1994 2764 l
-1999 2761 l
-2004 2758 l
-2009 2755 l
-2014 2752 l
-2020 2748 l
-2025 2745 l
-2030 2742 l
-2036 2739 l
-2042 2736 l
-2047 2733 l
-2053 2730 l
-2059 2727 l
-2065 2724 l
-2071 2720 l
-2077 2717 l
-2084 2714 l
-2090 2711 l
-2096 2708 l
-2103 2705 l
-2110 2701 l
-2116 2698 l
-2123 2695 l
-2130 2692 l
-2137 2689 l
-2144 2685 l
-2152 2682 l
-2159 2679 l
-2166 2676 l
-2174 2673 l
-2182 2669 l
-2190 2666 l
-2198 2663 l
-2206 2660 l
-2214 2657 l
-2222 2654 l
-2231 2651 l
-2239 2647 l
-2248 2644 l
-2257 2641 l
-2266 2638 l
-2275 2635 l
-2284 2632 l
-2293 2629 l
-2303 2626 l
-2312 2623 l
-2322 2621 l
-2332 2618 l
-2342 2615 l
-2353 2612 l
-2363 2610 l
-2373 2607 l
-2384 2604 l
-2395 2602 l
-2406 2599 l
-2417 2597 l
-2428 2595 l
-2440 2592 l
-2451 2590 l
-2463 2588 l
-2475 2586 l
-2487 2584 l
-2499 2582 l
-2512 2580 l
-2524 2578 l
-2537 2577 l
-2550 2575 l
-2563 2574 l
-2576 2573 l
-2589 2571 l
-2602 2570 l
-2616 2569 l
-2630 2569 l
-2644 2568 l
-2658 2567 l
-2672 2567 l
-2686 2567 l
-2701 2567 l
-2715 2567 l
-2730 2567 l
-2745 2567 l
-2760 2568 l
-2775 2568 l
-2790 2569 l
-2806 2570 l
-2821 2571 l
-2837 2573 l
-2852 2574 l
-2868 2576 l
-2884 2578 l
-2900 2580 l
-2916 2583 l
-2932 2585 l
-2948 2588 l
-2964 2591 l
-2980 2594 l
-2997 2598 l
-3013 2601 l
-3029 2605 l
-3046 2609 l
-3062 2613 l
-3078 2618 l
-3095 2623 l
-3111 2628 l
-3128 2633 l
-3144 2638 l
-3160 2644 l
-3177 2649 l
-3193 2655 l
-3209 2662 l
-3225 2668 l
-3241 2675 l
-3257 2682 l
-3273 2689 l
-3289 2696 l
-3305 2703 l
-3320 2711 l
-3336 2719 l
-3351 2727 l
-3366 2735 l
-3381 2743 l
-3396 2752 l
-3411 2760 l
-3426 2769 l
-3440 2778 l
-3455 2787 l
-3469 2797 l
-3483 2806 l
-3497 2815 l
-3510 2825 l
-3524 2835 l
-3537 2845 l
-3550 2855 l
-3563 2865 l
-3575 2875 l
-3588 2885 l
-3600 2895 l
-3612 2906 l
-3624 2916 l
-3636 2927 l
-3647 2937 l
-3658 2948 l
-3670 2958 l
-3680 2969 l
-3691 2980 l
-3701 2990 l
-3712 3001 l
-3722 3012 l
-3731 3023 l
-3741 3033 l
-3750 3044 l
-3760 3055 l
-3769 3066 l
-3777 3076 l
-3786 3087 l
-3794 3098 l
-3803 3108 l
-3811 3119 l
-3818 3129 l
-3826 3140 l
-3834 3150 l
-3841 3161 l
-3848 3171 l
-3855 3181 l
-3862 3192 l
-3868 3202 l
-3875 3212 l
-3881 3222 l
-3887 3232 l
-3893 3242 l
-3899 3252 l
-3905 3262 l
-3910 3271 l
-3916 3281 l
-S
-3916 3281 m
-3921 3291 l
-3926 3300 l
-3931 3309 l
-3936 3319 l
-3940 3328 l
-3945 3337 l
-3949 3346 l
-3954 3355 l
-3958 3364 l
-3962 3373 l
-3966 3382 l
-3970 3391 l
-3974 3399 l
-3977 3408 l
-3981 3416 l
-3984 3425 l
-3988 3433 l
-3991 3441 l
-3994 3449 l
-3997 3457 l
-4000 3465 l
-4003 3473 l
-4006 3481 l
-4009 3489 l
-4012 3496 l
-4014 3504 l
-4017 3512 l
-4019 3519 l
-4022 3526 l
-4024 3533 l
-4026 3541 l
-4028 3548 l
-4030 3555 l
-4032 3562 l
-4034 3569 l
-4036 3575 l
-4038 3582 l
-4040 3589 l
-4042 3595 l
-4043 3602 l
-4045 3608 l
-4047 3615 l
-4048 3621 l
-4050 3627 l
-4051 3633 l
-4053 3639 l
-4054 3645 l
-4055 3651 l
-4057 3657 l
-4058 3663 l
-4059 3669 l
-4060 3675 l
-4061 3680 l
-4062 3686 l
-4064 3691 l
-4065 3697 l
-4066 3702 l
-4066 3707 l
-4067 3713 l
-4068 3718 l
-4069 3723 l
-4070 3728 l
-4071 3733 l
-4072 3738 l
-4072 3743 l
-4073 3748 l
-4074 3753 l
-4074 3758 l
-4075 3762 l
-4076 3767 l
-4076 3772 l
-4077 3776 l
-4078 3781 l
-4078 3785 l
-4079 3790 l
-4079 3794 l
-4080 3799 l
-4080 3803 l
-4085 3859 l
-4087 3907 l
-4088 3949 l
-4087 3987 l
-4086 4019 l
-4084 4049 l
-4082 4075 l
-4080 4098 l
-4077 4119 l
-4075 4138 l
-4072 4156 l
-4070 4172 l
-4067 4186 l
-4065 4199 l
-4063 4212 l
-4060 4223 l
-4058 4234 l
-4056 4244 l
-4054 4253 l
-4052 4262 l
-4050 4270 l
-4048 4277 l
-4047 4284 l
-4028 4352 l
-4016 4390 l
-4008 4413 l
-4002 4429 l
-3997 4441 l
-3994 4451 l
-3991 4458 l
-3988 4465 l
-3986 4470 l
-3984 4474 l
-3982 4478 l
-3981 4482 l
-3980 4485 l
-3978 4488 l
-3977 4491 l
-3976 4493 l
-3975 4495 l
-3974 4498 l
-3973 4500 l
-3972 4501 l
-3971 4503 l
-3971 4505 l
-3970 4507 l
-3969 4508 l
-3968 4510 l
-3968 4511 l
-3967 4513 l
-3966 4514 l
-3966 4515 l
-3965 4517 l
-3964 4518 l
-3964 4519 l
-3963 4521 l
-3962 4522 l
-3962 4523 l
-3961 4524 l
-3960 4525 l
-3960 4526 l
-3959 4528 l
-3959 4529 l
-3958 4530 l
-3958 4531 l
-3950 4545 l
-3942 4557 l
-3933 4569 l
-3925 4580 l
-3916 4591 l
-3907 4602 l
-3897 4612 l
-3887 4622 l
-3877 4632 l
-3866 4641 l
-3855 4650 l
-3844 4659 l
-3832 4667 l
-3820 4675 l
-3807 4683 l
-3794 4691 l
-3780 4698 l
-3767 4706 l
-3752 4712 l
-3738 4719 l
-3723 4725 l
-3708 4731 l
-3692 4737 l
-3676 4743 l
-3660 4748 l
-3643 4753 l
-3627 4757 l
-3609 4762 l
-3592 4766 l
-3574 4770 l
-3556 4773 l
-3537 4776 l
-3518 4779 l
-3499 4782 l
-3480 4784 l
-3461 4786 l
-3441 4788 l
-3421 4789 l
-3400 4790 l
-3380 4791 l
-3359 4792 l
-3338 4792 l
-S
-2880 5085 m
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2879 5085 l
-2878 5084 l
-2878 5084 l
-2877 5083 l
-2876 5083 l
-2876 5083 l
-2875 5082 l
-2874 5082 l
-2874 5082 l
-2873 5081 l
-2872 5081 l
-2871 5080 l
-2871 5080 l
-2861 5075 l
-2850 5069 l
-2839 5064 l
-2828 5059 l
-2816 5053 l
-2804 5048 l
-2791 5043 l
-2778 5037 l
-2765 5031 l
-2752 5026 l
-2738 5020 l
-2724 5015 l
-2710 5009 l
-2696 5003 l
-2681 4997 l
-2666 4991 l
-2651 4985 l
-2636 4979 l
-2620 4973 l
-2605 4967 l
-2589 4960 l
-2573 4954 l
-2557 4948 l
-2541 4941 l
-2525 4935 l
-2509 4928 l
-2492 4921 l
-2476 4915 l
-2459 4908 l
-2442 4901 l
-2426 4894 l
-2409 4887 l
-2392 4880 l
-2376 4873 l
-2359 4865 l
-2342 4858 l
-2325 4851 l
-2309 4843 l
-2292 4836 l
-2275 4829 l
-2259 4821 l
-2242 4814 l
-2225 4806 l
-2209 4799 l
-2192 4791 l
-2176 4784 l
-2160 4776 l
-2144 4768 l
-2127 4761 l
-2111 4753 l
-2096 4746 l
-2080 4738 l
-2064 4731 l
-2049 4723 l
-2033 4716 l
-2018 4709 l
-2003 4701 l
-1988 4694 l
-1973 4687 l
-1959 4680 l
-1945 4673 l
-1930 4666 l
-1916 4660 l
-1903 4653 l
-1889 4647 l
-1876 4641 l
-1863 4635 l
-1850 4629 l
-1837 4623 l
-1825 4618 l
-1813 4612 l
-1801 4607 l
-1789 4603 l
-1778 4598 l
-1767 4594 l
-1756 4590 l
-1746 4587 l
-1736 4584 l
-1726 4581 l
-1717 4579 l
-1708 4577 l
-1699 4576 l
-1691 4575 l
-1683 4575 l
-1676 4575 l
-1669 4575 l
-1663 4577 l
-1657 4579 l
-1652 4582 l
-1647 4585 l
-1643 4589 l
-1639 4594 l
-1636 4600 l
-1634 4607 l
-1633 4615 l
-1632 4624 l
-1633 4633 l
-1634 4644 l
-1636 4656 l
-1640 4669 l
-1644 4683 l
-1650 4699 l
-1657 4716 l
-1666 4734 l
-1676 4753 l
-1688 4773 l
-1702 4795 l
-1718 4818 l
-1735 4842 l
-1755 4867 l
-1778 4893 l
-1802 4919 l
-1829 4947 l
-1859 4974 l
-1891 5002 l
-1925 5029 l
-1962 5056 l
-2001 5083 l
-2043 5108 l
-2085 5132 l
-2130 5155 l
-2175 5175 l
-2222 5194 l
-2268 5211 l
-2315 5226 l
-2361 5238 l
-2407 5248 l
-2451 5256 l
-2494 5263 l
-2536 5267 l
-2575 5270 l
-2613 5271 l
-2649 5270 l
-2682 5269 l
-2713 5266 l
-2742 5263 l
-2769 5259 l
-2793 5254 l
-2816 5249 l
-2836 5243 l
-2855 5238 l
-2871 5232 l
-2886 5225 l
-2899 5219 l
-2911 5213 l
-2920 5206 l
-2929 5200 l
-2936 5194 l
-2941 5187 l
-2946 5181 l
-2949 5175 l
-2951 5169 l
-2952 5163 l
-2952 5157 l
-2951 5151 l
-2949 5145 l
-2946 5140 l
-2943 5134 l
-2938 5128 l
-2933 5123 l
-2928 5117 l
-2921 5112 l
-2914 5107 l
-2907 5101 l
-2898 5096 l
-2890 5091 l
-2880 5085 l
-S
-3421 4402 m
-3413 4431 l
-S
-3307 4418 m
-3299 4448 l
-S
-3191 4423 m
-3182 4452 l
-S
-3073 4416 m
-3063 4445 l
-S
-2953 4399 m
-2942 4428 l
-S
-2714 4337 m
-2703 4365 l
-S
-2598 4293 m
-2586 4321 l
-S
-2484 4242 m
-2471 4269 l
-S
-2374 4183 m
-2361 4210 l
-S
-2270 4117 m
-2256 4144 l
-S
-2081 3965 m
-2067 3992 l
-S
-1999 3880 m
-1984 3906 l
-S
-1928 3790 m
-1912 3815 l
-S
-1868 3693 m
-1851 3718 l
-S
-1822 3590 m
-1804 3615 l
-S
-1781 3365 m
-1761 3387 l
-S
-1796 3241 m
-1774 3262 l
-S
-1842 3108 m
-1819 3128 l
-S
-1933 2968 m
-1908 2985 l
-S
-2086 2825 m
-2058 2838 l
-S
-2673 2622 m
-2643 2620 l
-S
-3103 2675 m
-3081 2654 l
-S
-3509 2886 m
-3537 2898 l
-S
-3785 3187 m
-3805 3210 l
-S
-3920 3482 m
-3933 3510 l
-S
-3939 3918 m
-3942 3948 l
-S
-3887 4065 m
-3887 4095 l
-S
-3814 4177 m
-3812 4207 l
-S
-3728 4263 m
-3725 4293 l
-S
-3633 4326 m
-3627 4356 l
-S
-3043 3352 m
-3063 3330 l
-S
-3100 3391 m
-3121 3369 l
-S
-3155 3434 m
-3177 3413 l
-S
-3207 3480 m
-3230 3459 l
-S
-3256 3529 m
-3279 3509 l
-S
-3345 3636 m
-3369 3617 l
-S
-3384 3693 m
-3409 3676 l
-S
-3419 3753 m
-3445 3737 l
-S
-3450 3816 m
-3476 3800 l
-S
-3477 3880 m
-3504 3865 l
-S
-3518 4015 m
-3545 4002 l
-S
-3531 4084 m
-3559 4072 l
-S
-3539 4155 m
-3567 4144 l
-S
-3541 4227 m
-3570 4217 l
-S
-3538 4299 m
-3567 4290 l
-S
-3514 4445 m
-3544 4438 l
-S
-3493 4517 m
-3523 4512 l
-S
-3465 4588 m
-3495 4585 l
-S
-3430 4658 m
-3460 4656 l
-S
-3387 4726 m
-3418 4726 l
-S
-3281 4854 m
-3311 4857 l
-S
-3216 4913 m
-3246 4917 l
-S
-3143 4966 m
-3173 4973 l
-S
-3063 5013 m
-3092 5022 l
-S
-2975 5053 m
-3003 5064 l
-S
-2779 5108 m
-2805 5124 l
-S
-2673 5120 m
-2697 5139 l
-S
-2563 5121 m
-2584 5142 l
-S
-2450 5109 m
-2468 5133 l
-S
-2336 5084 m
-2350 5111 l
-S
-3529 4372 m
-3483 4387 l
-3436 4399 l
-3389 4408 l
-3340 4415 l
-3291 4420 l
-3241 4422 l
-3191 4423 l
-3140 4421 l
-3090 4418 l
-3038 4412 l
-2987 4405 l
-2936 4396 l
-2884 4385 l
-2833 4372 l
-S
-2833 4372 m
-2782 4358 l
-2731 4343 l
-2681 4325 l
-2631 4306 l
-2581 4286 l
-2532 4265 l
-2484 4242 l
-2436 4217 l
-2390 4191 l
-2344 4164 l
-2299 4136 l
-2256 4107 l
-2213 4076 l
-2172 4044 l
-S
-2172 4044 m
-2132 4011 l
-2094 3977 l
-2057 3942 l
-2022 3905 l
-1989 3868 l
-1957 3829 l
-1928 3790 l
-1901 3749 l
-1876 3707 l
-1853 3664 l
-1833 3620 l
-1832 3617 l
-1831 3614 l
-1829 3610 l
-1828 3607 l
-1827 3604 l
-1826 3601 l
-1824 3598 l
-1823 3594 l
-1822 3591 l
-1821 3588 l
-1820 3585 l
-1819 3581 l
-1817 3578 l
-1816 3575 l
-1815 3572 l
-1814 3568 l
-1813 3565 l
-1812 3562 l
-1811 3558 l
-1810 3555 l
-1809 3552 l
-1808 3549 l
-1807 3545 l
-1806 3542 l
-1805 3539 l
-1804 3535 l
-1803 3532 l
-1802 3529 l
-1801 3525 l
-1801 3522 l
-1800 3518 l
-1799 3515 l
-1798 3512 l
-1797 3508 l
-1797 3505 l
-1796 3501 l
-1795 3498 l
-1794 3495 l
-1794 3491 l
-1793 3488 l
-1792 3484 l
-1792 3481 l
-S
-1792 3481 m
-1791 3477 l
-1790 3474 l
-1790 3471 l
-1789 3467 l
-1789 3464 l
-1788 3460 l
-1788 3457 l
-1787 3453 l
-1787 3450 l
-1786 3446 l
-1786 3443 l
-1785 3439 l
-1785 3436 l
-1785 3432 l
-1784 3428 l
-1784 3425 l
-1784 3421 l
-1783 3418 l
-1783 3414 l
-1783 3411 l
-1783 3407 l
-1782 3403 l
-1782 3400 l
-1782 3396 l
-1782 3393 l
-1782 3389 l
-1782 3385 l
-1782 3382 l
-1781 3378 l
-1781 3374 l
-1781 3371 l
-1781 3367 l
-1781 3364 l
-1781 3360 l
-1782 3356 l
-1782 3352 l
-1782 3349 l
-1782 3345 l
-1782 3341 l
-1782 3338 l
-1782 3334 l
-1783 3330 l
-1783 3326 l
-1783 3323 l
-1784 3319 l
-1784 3315 l
-1784 3311 l
-1785 3308 l
-1785 3304 l
-1786 3300 l
-1786 3296 l
-1787 3292 l
-1787 3289 l
-1788 3285 l
-1788 3281 l
-1789 3277 l
-1789 3273 l
-1790 3269 l
-1791 3265 l
-1791 3262 l
-1792 3258 l
-1793 3254 l
-1794 3250 l
-1795 3246 l
-1795 3242 l
-1796 3238 l
-1797 3234 l
-1798 3230 l
-1799 3226 l
-1800 3222 l
-1801 3218 l
-1802 3214 l
-1803 3210 l
-1805 3206 l
-1806 3202 l
-1807 3198 l
-1808 3194 l
-1809 3190 l
-1811 3186 l
-1812 3182 l
-1814 3178 l
-1815 3174 l
-1816 3170 l
-1818 3166 l
-1819 3162 l
-1821 3158 l
-1822 3154 l
-1824 3150 l
-1826 3146 l
-1827 3142 l
-1829 3137 l
-1831 3133 l
-1833 3129 l
-1835 3125 l
-1836 3121 l
-1838 3117 l
-1840 3113 l
-1842 3108 l
-1844 3104 l
-1846 3100 l
-1849 3096 l
-1851 3092 l
-1853 3087 l
-1855 3083 l
-1858 3079 l
-1860 3075 l
-1862 3070 l
-1865 3066 l
-1867 3062 l
-1870 3058 l
-1872 3053 l
-1875 3049 l
-1878 3045 l
-1880 3041 l
-1883 3036 l
-1886 3032 l
-1889 3028 l
-1892 3023 l
-1895 3019 l
-1898 3015 l
-1901 3010 l
-1904 3006 l
-1907 3002 l
-1910 2997 l
-1913 2993 l
-1917 2989 l
-1920 2984 l
-1923 2980 l
-1927 2975 l
-1930 2971 l
-1934 2967 l
-1938 2962 l
-1941 2958 l
-1945 2953 l
-1949 2949 l
-1953 2945 l
-1957 2940 l
-1961 2936 l
-1965 2931 l
-1969 2927 l
-1973 2923 l
-1978 2918 l
-1982 2914 l
-1986 2909 l
-1991 2905 l
-1995 2901 l
-2000 2896 l
-2005 2892 l
-2009 2887 l
-2014 2883 l
-2019 2879 l
-2024 2874 l
-2029 2870 l
-2034 2865 l
-2039 2861 l
-2045 2857 l
-2050 2852 l
-2055 2848 l
-2061 2844 l
-2066 2839 l
-2072 2835 l
-2078 2831 l
-2084 2826 l
-2090 2822 l
-2096 2818 l
-2102 2813 l
-2108 2809 l
-2114 2805 l
-2120 2801 l
-2127 2796 l
-2133 2792 l
-2140 2788 l
-2146 2784 l
-2153 2780 l
-2160 2775 l
-2167 2771 l
-2174 2767 l
-2181 2763 l
-2188 2759 l
-2195 2755 l
-2203 2751 l
-2210 2747 l
-2218 2743 l
-2226 2739 l
-2233 2735 l
-2241 2732 l
-2249 2728 l
-2257 2724 l
-2265 2720 l
-2274 2717 l
-2282 2713 l
-2291 2709 l
-2299 2706 l
-2308 2702 l
-2317 2699 l
-2326 2695 l
-S
-2326 2695 m
-2335 2692 l
-2344 2689 l
-2353 2685 l
-2362 2682 l
-2372 2679 l
-2381 2676 l
-2391 2673 l
-2400 2670 l
-2410 2667 l
-2420 2664 l
-2430 2661 l
-2440 2659 l
-2451 2656 l
-2461 2653 l
-2472 2651 l
-2482 2649 l
-2493 2646 l
-2504 2644 l
-2514 2642 l
-2525 2640 l
-2537 2638 l
-2548 2636 l
-2559 2634 l
-2570 2633 l
-2582 2631 l
-2593 2630 l
-2605 2628 l
-2617 2627 l
-2629 2626 l
-2641 2625 l
-2653 2624 l
-2665 2623 l
-2677 2622 l
-2689 2622 l
-2702 2621 l
-2714 2621 l
-2727 2621 l
-2739 2621 l
-2752 2621 l
-2765 2621 l
-2778 2621 l
-2791 2622 l
-2804 2622 l
-2817 2623 l
-2830 2624 l
-2843 2625 l
-2856 2626 l
-2869 2627 l
-2883 2629 l
-2896 2631 l
-2909 2632 l
-2923 2634 l
-2936 2636 l
-2950 2639 l
-2963 2641 l
-2977 2644 l
-2990 2646 l
-3004 2649 l
-3017 2652 l
-3031 2655 l
-3044 2659 l
-3058 2662 l
-3071 2666 l
-3085 2670 l
-3098 2674 l
-3112 2678 l
-3125 2682 l
-3139 2687 l
-3152 2691 l
-3166 2696 l
-3179 2701 l
-3192 2706 l
-3205 2711 l
-3219 2717 l
-3232 2722 l
-3245 2728 l
-3258 2734 l
-3271 2740 l
-3284 2746 l
-3296 2752 l
-3309 2758 l
-3322 2765 l
-3334 2772 l
-3347 2778 l
-3359 2785 l
-3371 2792 l
-3383 2800 l
-3395 2807 l
-3407 2814 l
-3419 2822 l
-3431 2829 l
-3442 2837 l
-3454 2845 l
-3465 2853 l
-3476 2861 l
-3488 2869 l
-3499 2878 l
-3509 2886 l
-3520 2894 l
-3531 2903 l
-3541 2911 l
-3551 2920 l
-3562 2929 l
-3572 2938 l
-3581 2947 l
-3591 2956 l
-3601 2965 l
-3610 2974 l
-3620 2983 l
-3629 2992 l
-3638 3001 l
-3647 3010 l
-3655 3020 l
-3664 3029 l
-3672 3038 l
-3681 3048 l
-3689 3057 l
-3697 3067 l
-3705 3076 l
-3712 3086 l
-3720 3095 l
-3727 3105 l
-3734 3114 l
-3742 3124 l
-3749 3133 l
-3755 3143 l
-3762 3152 l
-3769 3162 l
-3775 3171 l
-3781 3181 l
-3787 3190 l
-3793 3200 l
-3799 3209 l
-3805 3219 l
-3811 3228 l
-3816 3238 l
-3821 3247 l
-3827 3256 l
-3832 3266 l
-3837 3275 l
-3842 3284 l
-3846 3294 l
-3851 3303 l
-3855 3312 l
-3860 3321 l
-3864 3330 l
-3868 3339 l
-3872 3348 l
-3876 3358 l
-3880 3366 l
-3883 3375 l
-3887 3384 l
-3890 3393 l
-3894 3402 l
-3897 3411 l
-3900 3419 l
-3903 3428 l
-3906 3437 l
-3909 3445 l
-3912 3454 l
-3914 3462 l
-3917 3471 l
-3919 3479 l
-3922 3488 l
-3924 3496 l
-3926 3504 l
-3928 3512 l
-3930 3520 l
-3932 3528 l
-3934 3536 l
-3936 3544 l
-3938 3552 l
-3939 3560 l
-3941 3568 l
-3942 3576 l
-3944 3583 l
-3945 3591 l
-3946 3599 l
-3947 3606 l
-3948 3614 l
-3949 3621 l
-3950 3629 l
-3951 3636 l
-3952 3643 l
-3953 3650 l
-3954 3658 l
-3954 3665 l
-3955 3672 l
-3956 3679 l
-3956 3686 l
-3956 3693 l
-3957 3700 l
-3957 3706 l
-3957 3713 l
-3958 3720 l
-3958 3727 l
-S
-3958 3727 m
-3958 3733 l
-3958 3740 l
-3958 3746 l
-3958 3753 l
-3958 3759 l
-3958 3765 l
-3957 3772 l
-3957 3778 l
-3957 3784 l
-3956 3790 l
-3956 3797 l
-3956 3803 l
-3955 3809 l
-3955 3815 l
-3954 3821 l
-3954 3826 l
-3953 3832 l
-3952 3838 l
-3952 3844 l
-3951 3849 l
-3950 3855 l
-3949 3861 l
-3948 3866 l
-3948 3872 l
-3947 3877 l
-3946 3883 l
-3945 3888 l
-3944 3893 l
-3943 3899 l
-3942 3904 l
-3940 3909 l
-3939 3914 l
-3938 3919 l
-3937 3924 l
-3936 3930 l
-3934 3935 l
-3933 3940 l
-3932 3944 l
-3931 3949 l
-3929 3954 l
-3928 3959 l
-3926 3964 l
-3925 3968 l
-3923 3973 l
-3922 3978 l
-3920 3982 l
-3919 3987 l
-3917 3992 l
-3916 3996 l
-3914 4001 l
-3912 4005 l
-3911 4009 l
-3909 4014 l
-3907 4018 l
-3906 4022 l
-3904 4027 l
-3902 4031 l
-3900 4035 l
-3899 4039 l
-3897 4043 l
-3895 4047 l
-3893 4051 l
-3891 4055 l
-3889 4059 l
-3887 4063 l
-3885 4067 l
-3883 4071 l
-3881 4075 l
-3879 4079 l
-3877 4083 l
-3875 4086 l
-3873 4090 l
-3871 4094 l
-3869 4097 l
-3867 4101 l
-3865 4105 l
-3863 4108 l
-3860 4112 l
-3858 4115 l
-3856 4119 l
-3854 4122 l
-3852 4126 l
-3849 4129 l
-3847 4133 l
-3845 4136 l
-3843 4139 l
-3840 4143 l
-3838 4146 l
-3836 4149 l
-3833 4152 l
-3831 4156 l
-3829 4159 l
-3826 4162 l
-3824 4165 l
-3821 4168 l
-3819 4171 l
-3817 4174 l
-3814 4177 l
-3812 4180 l
-3809 4183 l
-3807 4186 l
-3804 4189 l
-3802 4192 l
-3799 4195 l
-3797 4197 l
-3794 4200 l
-3792 4203 l
-3789 4206 l
-3787 4209 l
-3784 4211 l
-3781 4214 l
-3779 4217 l
-3776 4219 l
-3774 4222 l
-3771 4225 l
-3768 4227 l
-3766 4230 l
-3763 4232 l
-3760 4235 l
-3758 4237 l
-3755 4240 l
-3752 4242 l
-3749 4245 l
-3747 4247 l
-3744 4249 l
-3741 4252 l
-3738 4254 l
-3736 4256 l
-3733 4259 l
-3730 4261 l
-3727 4263 l
-3725 4266 l
-3722 4268 l
-3719 4270 l
-3716 4272 l
-3713 4274 l
-3710 4276 l
-3708 4279 l
-3705 4281 l
-3702 4283 l
-3699 4285 l
-3696 4287 l
-3693 4289 l
-3690 4291 l
-3687 4293 l
-3684 4295 l
-3681 4297 l
-3679 4299 l
-3676 4301 l
-3673 4303 l
-3670 4304 l
-3667 4306 l
-3664 4308 l
-3661 4310 l
-3658 4312 l
-3655 4314 l
-3652 4315 l
-3649 4317 l
-3646 4319 l
-3643 4321 l
-3640 4322 l
-3637 4324 l
-3634 4326 l
-3631 4327 l
-3627 4329 l
-3624 4331 l
-3621 4332 l
-3618 4334 l
-3615 4335 l
-3612 4337 l
-3609 4338 l
-3606 4340 l
-3603 4341 l
-3600 4343 l
-3596 4344 l
-3593 4346 l
-3590 4347 l
-3587 4349 l
-3584 4350 l
-3581 4352 l
-3578 4353 l
-3574 4354 l
-3571 4356 l
-3568 4357 l
-3565 4358 l
-3562 4360 l
-3558 4361 l
-3555 4362 l
-3552 4363 l
-3549 4365 l
-3546 4366 l
-3542 4367 l
-3539 4368 l
-3536 4370 l
-3533 4371 l
-3532 4371 l
-3532 4371 l
-3532 4371 l
-3532 4371 l
-S
-3532 4371 m
-3532 4371 l
-3531 4371 l
-3531 4371 l
-3531 4371 l
-3531 4371 l
-3530 4372 l
-3530 4372 l
-3530 4372 l
-3530 4372 l
-S
-2983 3317 m
-3009 3332 l
-3034 3347 l
-3060 3363 l
-3084 3380 l
-3108 3397 l
-3132 3415 l
-3155 3434 l
-3178 3453 l
-3200 3473 l
-3222 3493 l
-3243 3514 l
-3263 3536 l
-3283 3558 l
-3302 3581 l
-S
-3302 3581 m
-3321 3604 l
-3339 3628 l
-3356 3652 l
-3373 3676 l
-3389 3702 l
-3405 3727 l
-3419 3753 l
-3433 3780 l
-3446 3807 l
-3459 3834 l
-3470 3862 l
-3481 3890 l
-3491 3918 l
-3500 3947 l
-S
-3500 3947 m
-3508 3976 l
-3516 4005 l
-3522 4034 l
-3528 4064 l
-3532 4094 l
-3536 4125 l
-3539 4155 l
-3541 4186 l
-3541 4216 l
-3541 4247 l
-3540 4278 l
-3537 4310 l
-3534 4341 l
-3529 4372 l
-S
-3529 4372 m
-3524 4403 l
-3517 4434 l
-3509 4465 l
-3500 4496 l
-3489 4527 l
-3478 4558 l
-3465 4588 l
-3451 4618 l
-3435 4648 l
-3418 4678 l
-3400 4707 l
-3381 4736 l
-3360 4764 l
-3338 4792 l
-S
-3338 4792 m
-3314 4819 l
-3289 4846 l
-3263 4871 l
-3235 4896 l
-3206 4921 l
-3175 4944 l
-3143 4966 l
-3110 4987 l
-3075 5007 l
-3038 5025 l
-3001 5043 l
-2962 5058 l
-2922 5073 l
-2880 5085 l
-S
-2880 5085 m
-2838 5096 l
-2794 5105 l
-2750 5113 l
-2704 5118 l
-2658 5121 l
-2610 5122 l
-2563 5121 l
-2514 5117 l
-2466 5111 l
-2417 5103 l
-2368 5093 l
-2319 5079 l
-2271 5064 l
-2223 5046 l
-S
-4073 3746 m
-4075 3748 l
-S
-4075 3748 m
-4075 3753 l
-4075 3757 l
-4075 3762 l
-4075 3766 l
-4075 3770 l
-4075 3775 l
-4077 3777 l
-4079 3779 l
-4079 3784 l
-4079 3788 l
-S
-4079 3788 m
-4079 3793 l
-4079 3797 l
-4079 3802 l
-4079 3806 l
-4079 3811 l
-4079 3815 l
-4082 3817 l
-4084 3820 l
-4084 3824 l
-4084 3829 l
-S
-4084 3829 m
-4084 3833 l
-4084 3838 l
-4084 3842 l
-4084 3846 l
-4084 3851 l
-4084 3855 l
-4084 3860 l
-4084 3864 l
-4084 3869 l
-S
-4084 3869 m
-4084 3873 l
-4084 3878 l
-4086 3880 l
-4088 3882 l
-4088 3887 l
-4088 3891 l
-4088 3896 l
-4088 3900 l
-4088 3905 l
-4088 3909 l
-S
-4088 3909 m
-4088 3913 l
-4088 3918 l
-4088 3922 l
-4088 3927 l
-4088 3931 l
-4088 3936 l
-4088 3940 l
-4088 3945 l
-4088 3949 l
-S
-4088 3949 m
-4088 3954 l
-4088 3958 l
-4088 3963 l
-4088 3967 l
-4088 3972 l
-4088 3976 l
-4088 3981 l
-4088 3985 l
-4088 3989 l
-S
-4088 3989 m
-4088 3994 l
-4088 3998 l
-4088 4003 l
-4088 4007 l
-4088 4012 l
-4088 4016 l
-4086 4018 l
-4084 4021 l
-4084 4025 l
-4084 4030 l
-S
-4084 4030 m
-4084 4034 l
-4084 4039 l
-4084 4043 l
-4084 4048 l
-4084 4052 l
-4084 4056 l
-4084 4061 l
-4084 4065 l
-4084 4070 l
-S
-4084 4070 m
-4084 4074 l
-4084 4079 l
-4082 4081 l
-4079 4083 l
-4079 4088 l
-4079 4092 l
-4079 4097 l
-4079 4101 l
-4079 4106 l
-4079 4110 l
-S
-4079 4110 m
-4079 4115 l
-4079 4119 l
-4077 4121 l
-4075 4124 l
-4075 4128 l
-4075 4132 l
-4075 4137 l
-4075 4141 l
-4075 4146 l
-4075 4150 l
-S
-4073 4153 m
-4075 4150 l
-S
-4032 3563 m
-4035 3565 l
-4035 3569 l
-4035 3574 l
-4037 3576 l
-4039 3578 l
-4039 3583 l
-4039 3587 l
-S
-4039 3587 m
-4039 3592 l
-4041 3594 l
-4044 3596 l
-4044 3601 l
-4044 3605 l
-4044 3610 l
-4046 3612 l
-4048 3614 l
-4048 3619 l
-4048 3623 l
-4048 3627 l
-S
-4048 3627 m
-4050 3630 l
-4053 3632 l
-4053 3636 l
-4053 3641 l
-4053 3645 l
-4055 3648 l
-4057 3650 l
-4057 3654 l
-4057 3659 l
-4057 3663 l
-4057 3668 l
-S
-4057 3668 m
-4059 3670 l
-4061 3672 l
-4061 3677 l
-4061 3681 l
-4061 3686 l
-4061 3690 l
-4064 3692 l
-4066 3694 l
-4066 3699 l
-4066 3703 l
-4066 3708 l
-S
-4066 3708 m
-4066 3712 l
-4066 3717 l
-4068 3719 l
-4070 3721 l
-4070 3726 l
-4070 3730 l
-4070 3735 l
-4070 3739 l
-4070 3744 l
-4073 3746 l
-S
-4073 4153 m
-4070 4155 l
-4070 4159 l
-4070 4164 l
-4070 4168 l
-4070 4173 l
-4070 4177 l
-4068 4179 l
-4066 4182 l
-4066 4186 l
-4066 4191 l
-S
-4066 4191 m
-4066 4195 l
-4066 4199 l
-4066 4204 l
-4064 4206 l
-4061 4208 l
-4061 4213 l
-4061 4217 l
-4061 4222 l
-4061 4226 l
-4059 4229 l
-4057 4231 l
-S
-4057 4231 m
-4057 4235 l
-4057 4240 l
-4057 4244 l
-4057 4249 l
-4055 4251 l
-4053 4253 l
-4053 4258 l
-4053 4262 l
-4053 4267 l
-4050 4269 l
-4048 4271 l
-S
-4048 4271 m
-4048 4275 l
-4048 4280 l
-4048 4284 l
-4046 4287 l
-4044 4289 l
-4044 4293 l
-4044 4298 l
-4044 4302 l
-4041 4305 l
-4039 4307 l
-4039 4311 l
-S
-4032 4336 m
-4035 4334 l
-4035 4329 l
-4035 4325 l
-4037 4322 l
-4039 4320 l
-4039 4316 l
-4039 4311 l
-S
-3992 3442 m
-3994 3444 l
-3994 3449 l
-3994 3453 l
-3997 3455 l
-3999 3458 l
-3999 3462 l
-3999 3467 l
-S
-3999 3467 m
-4001 3469 l
-4003 3471 l
-4003 3476 l
-4006 3478 l
-4008 3480 l
-4008 3484 l
-4008 3489 l
-4010 3491 l
-4012 3493 l
-4012 3498 l
-4012 3502 l
-4015 3505 l
-4017 3507 l
-S
-4017 3507 m
-4017 3511 l
-4017 3516 l
-4019 3518 l
-4021 3520 l
-4021 3525 l
-4021 3529 l
-4023 3531 l
-4026 3534 l
-4026 3538 l
-4026 3543 l
-4028 3545 l
-4030 3547 l
-S
-4030 3547 m
-4030 3551 l
-4030 3556 l
-4030 3560 l
-4032 3563 l
-S
-4030 4351 m
-4030 4347 l
-4030 4342 l
-4030 4338 l
-4032 4336 l
-S
-4030 4351 m
-4028 4354 l
-4026 4356 l
-4026 4360 l
-4026 4365 l
-4023 4367 l
-4021 4369 l
-4021 4374 l
-4021 4378 l
-4019 4380 l
-4017 4383 l
-4017 4387 l
-4017 4392 l
-S
-4017 4392 m
-4015 4394 l
-4012 4396 l
-4012 4401 l
-4012 4405 l
-4010 4407 l
-4008 4410 l
-4008 4414 l
-4008 4418 l
-4006 4421 l
-4003 4423 l
-4003 4427 l
-4001 4430 l
-3999 4432 l
-S
-3992 4456 m
-3994 4454 l
-3994 4450 l
-3994 4445 l
-3997 4443 l
-3999 4441 l
-3999 4436 l
-3999 4432 l
-S
-3952 3353 m
-3954 3355 l
-3954 3359 l
-3956 3362 l
-3959 3364 l
-3959 3368 l
-3961 3371 l
-3963 3373 l
-3963 3377 l
-3965 3379 l
-3968 3382 l
-3968 3386 l
-S
-3968 3386 m
-3970 3388 l
-3972 3391 l
-3972 3395 l
-3972 3400 l
-3974 3402 l
-3977 3404 l
-3977 3408 l
-3979 3411 l
-3981 3413 l
-3981 3417 l
-3983 3420 l
-3985 3422 l
-3985 3426 l
-S
-3985 3426 m
-3985 3431 l
-3988 3433 l
-3990 3435 l
-3990 3440 l
-3992 3442 l
-S
-3985 4472 m
-3985 4468 l
-3988 4465 l
-3990 4463 l
-3990 4459 l
-3992 4456 l
-S
-3985 4472 m
-3985 4477 l
-3983 4479 l
-3981 4481 l
-3981 4486 l
-3979 4488 l
-3977 4490 l
-3977 4494 l
-3974 4497 l
-3972 4499 l
-3972 4503 l
-3972 4508 l
-3970 4510 l
-3968 4512 l
-S
-3952 4546 m
-3954 4544 l
-3954 4539 l
-3956 4537 l
-3959 4535 l
-3959 4530 l
-3961 4528 l
-3963 4526 l
-3963 4521 l
-3965 4519 l
-3968 4517 l
-3968 4512 l
-S
-3912 3272 m
-3914 3274 l
-3914 3279 l
-3916 3281 l
-3918 3283 l
-3918 3288 l
-3921 3290 l
-3923 3292 l
-3923 3297 l
-3925 3299 l
-3927 3301 l
-3927 3306 l
-S
-3927 3306 m
-3930 3308 l
-3932 3310 l
-3932 3315 l
-3934 3317 l
-3936 3319 l
-3936 3324 l
-3939 3326 l
-3941 3328 l
-3941 3333 l
-3943 3335 l
-3945 3337 l
-3945 3341 l
-3947 3344 l
-3950 3346 l
-S
-3950 3346 m
-3950 3350 l
-3952 3353 l
-S
-3950 4553 m
-3950 4548 l
-3952 4546 l
-S
-3950 4553 m
-3947 4555 l
-3945 4557 l
-3945 4561 l
-3943 4564 l
-3941 4566 l
-3941 4570 l
-3939 4573 l
-3936 4575 l
-3936 4579 l
-3934 4582 l
-3932 4584 l
-3932 4588 l
-3930 4591 l
-3927 4593 l
-S
-3912 4626 m
-3914 4624 l
-3914 4620 l
-3916 4617 l
-3918 4615 l
-3918 4611 l
-3921 4608 l
-3923 4606 l
-3923 4602 l
-3925 4599 l
-3927 4597 l
-3927 4593 l
-S
-3872 3205 m
-3874 3207 l
-3874 3212 l
-3876 3214 l
-3878 3216 l
-3878 3221 l
-3880 3223 l
-3883 3225 l
-S
-3883 3225 m
-3885 3227 l
-3887 3230 l
-3887 3234 l
-3889 3236 l
-3892 3239 l
-3894 3241 l
-3896 3243 l
-3896 3248 l
-3898 3250 l
-3901 3252 l
-3901 3257 l
-3903 3259 l
-3905 3261 l
-3905 3265 l
-S
-3905 3265 m
-3907 3268 l
-3909 3270 l
-3912 3272 l
-S
-3905 4633 m
-3907 4631 l
-3909 4629 l
-3912 4626 l
-S
-3905 4633 m
-3905 4637 l
-3903 4640 l
-3901 4642 l
-3901 4646 l
-3898 4649 l
-3896 4651 l
-3896 4655 l
-3894 4658 l
-3892 4660 l
-3889 4662 l
-3887 4664 l
-3887 4669 l
-3885 4671 l
-3883 4673 l
-S
-3872 4693 m
-3874 4691 l
-3874 4687 l
-3876 4684 l
-3878 4682 l
-3878 4678 l
-3880 4675 l
-3883 4673 l
-S
-3831 3147 m
-3834 3149 l
-3836 3152 l
-3838 3154 l
-3838 3158 l
-3840 3160 l
-3842 3163 l
-3845 3165 l
-3847 3167 l
-3847 3172 l
-3849 3174 l
-3851 3176 l
-3854 3178 l
-3856 3181 l
-3856 3185 l
-S
-3856 3185 m
-3858 3187 l
-3860 3190 l
-3863 3192 l
-3865 3194 l
-3865 3198 l
-3867 3201 l
-3869 3203 l
-3872 3205 l
-S
-3856 4713 m
-3858 4711 l
-3860 4709 l
-3863 4707 l
-3865 4704 l
-3865 4700 l
-3867 4698 l
-3869 4696 l
-3872 4693 l
-S
-3831 4751 m
-3834 4749 l
-3836 4747 l
-3838 4745 l
-3838 4740 l
-3840 4738 l
-3842 4736 l
-3845 4734 l
-3847 4731 l
-3847 4727 l
-3849 4725 l
-3851 4722 l
-3854 4720 l
-3856 4718 l
-3856 4713 l
-S
-3791 3093 m
-3793 3096 l
-3796 3098 l
-3798 3100 l
-3798 3105 l
-S
-3798 3105 m
-3800 3107 l
-3802 3109 l
-3804 3111 l
-3807 3114 l
-3809 3116 l
-3811 3118 l
-3811 3122 l
-3813 3125 l
-3816 3127 l
-3818 3129 l
-3820 3131 l
-3822 3134 l
-3825 3136 l
-3825 3140 l
-3827 3143 l
-3829 3145 l
-S
-3831 3147 m
-3829 3145 l
-S
-3829 4754 m
-3831 4751 l
-S
-3829 4754 m
-3827 4756 l
-3825 4758 l
-3825 4763 l
-3822 4765 l
-3820 4767 l
-3818 4769 l
-3816 4772 l
-3813 4774 l
-3811 4776 l
-3811 4780 l
-3809 4783 l
-3807 4785 l
-3804 4787 l
-3802 4789 l
-3800 4792 l
-3798 4794 l
-S
-3791 4805 m
-3793 4803 l
-3796 4801 l
-3798 4798 l
-3798 4794 l
-S
-3751 3044 m
-3753 3047 l
-3755 3049 l
-3758 3051 l
-3760 3053 l
-3762 3055 l
-3762 3060 l
-3764 3062 l
-3766 3064 l
-S
-3766 3064 m
-3769 3067 l
-3771 3069 l
-3773 3071 l
-3775 3073 l
-3778 3076 l
-3780 3078 l
-3782 3080 l
-3784 3082 l
-3784 3087 l
-3787 3089 l
-3789 3091 l
-3791 3093 l
-S
-3766 4834 m
-3769 4832 l
-3771 4830 l
-3773 4827 l
-3775 4825 l
-3778 4823 l
-3780 4821 l
-3782 4818 l
-3784 4816 l
-3784 4812 l
-3787 4810 l
-3789 4807 l
-3791 4805 l
-S
-3751 4854 m
-3753 4852 l
-3755 4850 l
-3758 4847 l
-3760 4845 l
-3762 4843 l
-3762 4839 l
-3764 4836 l
-3766 4834 l
-S
-3711 3000 m
-3713 3002 l
-3715 3004 l
-3717 3006 l
-3720 3009 l
-3722 3011 l
-3724 3013 l
-3726 3015 l
-3729 3017 l
-3731 3020 l
-3731 3024 l
-S
-3731 3024 m
-3733 3026 l
-3735 3029 l
-3737 3031 l
-3740 3033 l
-3742 3035 l
-3744 3038 l
-3746 3040 l
-3749 3042 l
-3751 3044 l
-S
-3731 4874 m
-3733 4872 l
-3735 4870 l
-3737 4868 l
-3740 4865 l
-3742 4863 l
-3744 4861 l
-3746 4859 l
-3749 4856 l
-3751 4854 l
-S
-3711 4899 m
-3713 4897 l
-3715 4894 l
-3717 4892 l
-3720 4890 l
-3722 4888 l
-3724 4885 l
-3726 4883 l
-3729 4881 l
-3731 4879 l
-3731 4874 l
-S
-3670 2959 m
-3673 2962 l
-3675 2964 l
-3677 2966 l
-3679 2968 l
-3682 2971 l
-3684 2973 l
-3686 2975 l
-3688 2977 l
-3691 2979 l
-3693 2982 l
-3695 2984 l
-S
-3695 2984 m
-3697 2986 l
-3699 2988 l
-3702 2991 l
-3704 2993 l
-3706 2995 l
-3708 2997 l
-3711 3000 l
-S
-3695 4915 m
-3697 4912 l
-3699 4910 l
-3702 4908 l
-3704 4906 l
-3706 4903 l
-3708 4901 l
-3711 4899 l
-S
-3670 4939 m
-3673 4937 l
-3675 4935 l
-3677 4932 l
-3679 4930 l
-3682 4928 l
-3684 4926 l
-3686 4923 l
-3688 4921 l
-3691 4919 l
-3693 4917 l
-3695 4915 l
-S
-3630 2924 m
-3635 2924 l
-3637 2926 l
-3639 2928 l
-3641 2930 l
-3644 2933 l
-3646 2935 l
-3648 2937 l
-3650 2939 l
-3653 2941 l
-3655 2944 l
-S
-3655 2944 m
-3657 2946 l
-3659 2948 l
-3661 2950 l
-3664 2953 l
-3666 2955 l
-3668 2957 l
-3670 2959 l
-S
-3655 4955 m
-3657 4953 l
-3659 4950 l
-3661 4948 l
-3664 4946 l
-3666 4944 l
-3668 4941 l
-3670 4939 l
-S
-3630 4975 m
-3635 4975 l
-3637 4973 l
-3639 4970 l
-3641 4968 l
-3644 4966 l
-3646 4964 l
-3648 4961 l
-3650 4959 l
-3653 4957 l
-3655 4955 l
-S
-3590 2888 m
-3592 2890 l
-3594 2892 l
-3599 2892 l
-3601 2895 l
-3603 2897 l
-3606 2899 l
-3608 2901 l
-3610 2903 l
-S
-3610 2903 m
-3612 2906 l
-3615 2908 l
-3617 2910 l
-3619 2912 l
-3621 2915 l
-3623 2917 l
-3626 2919 l
-3628 2921 l
-3630 2924 l
-S
-3610 4995 m
-3612 4993 l
-3615 4990 l
-3617 4988 l
-3619 4986 l
-3621 4984 l
-3623 4982 l
-3626 4979 l
-3628 4977 l
-3630 4975 l
-S
-3590 5011 m
-3592 5008 l
-3594 5006 l
-3599 5006 l
-3601 5004 l
-3603 5002 l
-3606 4999 l
-3608 4997 l
-3610 4995 l
-S
-3550 2857 m
-3554 2857 l
-3556 2859 l
-3559 2861 l
-3561 2863 l
-S
-3561 2863 m
-3563 2866 l
-3565 2868 l
-3568 2870 l
-3572 2870 l
-3574 2872 l
-3577 2874 l
-3579 2877 l
-3581 2879 l
-3583 2881 l
-3585 2883 l
-3588 2886 l
-3590 2888 l
-S
-3561 5035 m
-3563 5033 l
-3565 5031 l
-3568 5028 l
-3572 5028 l
-3574 5026 l
-3577 5024 l
-3579 5022 l
-3581 5020 l
-3583 5017 l
-3585 5015 l
-3588 5013 l
-3590 5011 l
-S
-3550 5042 m
-3554 5042 l
-3556 5040 l
-3559 5037 l
-3561 5035 l
-S
-3510 2825 m
-3512 2828 l
-3514 2830 l
-3518 2830 l
-3521 2832 l
-3523 2834 l
-3525 2836 l
-3527 2839 l
-3530 2841 l
-3532 2843 l
-3536 2843 l
-3539 2845 l
-3541 2848 l
-3543 2850 l
-3545 2852 l
-3548 2854 l
-3550 2857 l
-S
-3510 5073 m
-3512 5071 l
-3514 5069 l
-3518 5069 l
-3521 5066 l
-3523 5064 l
-3525 5062 l
-3527 5060 l
-3530 5058 l
-3532 5055 l
-3536 5055 l
-3539 5053 l
-3541 5051 l
-3543 5049 l
-3545 5046 l
-3548 5044 l
-3550 5042 l
-S
-3469 2798 m
-3474 2798 l
-3476 2801 l
-3478 2803 l
-3480 2805 l
-3483 2807 l
-3487 2807 l
-3489 2810 l
-3492 2812 l
-3494 2814 l
-3496 2816 l
-3501 2816 l
-3503 2819 l
-3505 2821 l
-3507 2823 l
-S
-3510 2825 m
-3507 2823 l
-S
-3507 5075 m
-3510 5073 l
-S
-3469 5100 m
-3474 5100 l
-3476 5098 l
-3478 5096 l
-3480 5093 l
-3483 5091 l
-3487 5091 l
-3489 5089 l
-3492 5087 l
-3494 5084 l
-3496 5082 l
-3501 5082 l
-3503 5080 l
-3505 5078 l
-3507 5075 l
-S
-3429 2772 m
-3431 2774 l
-3434 2776 l
-3438 2776 l
-3440 2778 l
-3442 2781 l
-3447 2781 l
-3449 2783 l
-S
-3449 2783 m
-3451 2785 l
-3454 2787 l
-3456 2790 l
-3460 2790 l
-3463 2792 l
-3465 2794 l
-3467 2796 l
-3469 2798 l
-S
-3449 5116 m
-3451 5113 l
-3454 5111 l
-3456 5109 l
-3460 5109 l
-3463 5107 l
-3465 5104 l
-3467 5102 l
-3469 5100 l
-S
-3429 5127 m
-3431 5125 l
-3434 5122 l
-3438 5122 l
-3440 5120 l
-3442 5118 l
-3447 5118 l
-3449 5116 l
-S
-3389 2749 m
-3393 2749 l
-3396 2752 l
-3398 2754 l
-3402 2754 l
-3405 2756 l
-3407 2758 l
-3411 2758 l
-3413 2760 l
-3416 2763 l
-3418 2765 l
-3420 2767 l
-3425 2767 l
-3427 2769 l
-3429 2772 l
-S
-3389 5149 m
-3393 5149 l
-3396 5147 l
-3398 5145 l
-3402 5145 l
-3405 5142 l
-3407 5140 l
-3411 5140 l
-3413 5138 l
-3416 5136 l
-3418 5133 l
-3420 5131 l
-3425 5131 l
-3427 5129 l
-3429 5127 l
-S
-3349 2727 m
-3353 2727 l
-3355 2729 l
-3358 2731 l
-3362 2731 l
-3364 2734 l
-3367 2736 l
-3371 2736 l
-3373 2738 l
-3375 2740 l
-3380 2740 l
-3382 2743 l
-S
-3382 2743 m
-3384 2745 l
-3387 2747 l
-3389 2749 l
-S
-3382 5156 m
-3384 5154 l
-3387 5151 l
-3389 5149 l
-S
-3349 5171 m
-3353 5171 l
-3355 5169 l
-3358 5167 l
-3362 5167 l
-3364 5165 l
-3367 5163 l
-3371 5163 l
-3373 5160 l
-3375 5158 l
-3380 5158 l
-3382 5156 l
-S
-3308 2705 m
-3311 2707 l
-3313 2709 l
-3317 2709 l
-3320 2711 l
-3322 2714 l
-3326 2714 l
-3329 2716 l
-3331 2718 l
-3335 2718 l
-3337 2720 l
-3340 2723 l
-3344 2723 l
-3346 2725 l
-3349 2727 l
-S
-3308 5194 m
-3311 5192 l
-3313 5189 l
-3317 5189 l
-3320 5187 l
-3322 5185 l
-3326 5185 l
-3329 5183 l
-3331 5180 l
-3335 5180 l
-3337 5178 l
-3340 5176 l
-3344 5176 l
-3346 5174 l
-3349 5171 l
-S
-3268 2687 m
-3273 2687 l
-3275 2689 l
-3277 2691 l
-3282 2691 l
-3284 2693 l
-3286 2696 l
-3291 2696 l
-3293 2698 l
-3295 2700 l
-3299 2700 l
-3302 2702 l
-S
-3308 2705 m
-3304 2705 l
-3302 2702 l
-S
-3302 5196 m
-3304 5194 l
-3308 5194 l
-S
-3268 5212 m
-3273 5212 l
-3275 5209 l
-3277 5207 l
-3282 5207 l
-3284 5205 l
-3286 5203 l
-3291 5203 l
-3293 5201 l
-3295 5198 l
-3299 5198 l
-3302 5196 l
-S
-3228 2669 m
-3232 2669 l
-3235 2671 l
-3237 2673 l
-3241 2673 l
-3244 2676 l
-3246 2678 l
-3250 2678 l
-3253 2680 l
-3255 2682 l
-3259 2682 l
-3264 2682 l
-3266 2685 l
-3268 2687 l
-S
-3228 5230 m
-3232 5230 l
-3235 5227 l
-3237 5225 l
-3241 5225 l
-3244 5223 l
-3246 5221 l
-3250 5221 l
-3253 5218 l
-3255 5216 l
-3259 5216 l
-3264 5216 l
-3266 5214 l
-3268 5212 l
-S
-3188 2655 m
-3192 2655 l
-3197 2655 l
-3199 2658 l
-3201 2660 l
-3206 2660 l
-3210 2660 l
-3212 2662 l
-S
-3212 2662 m
-3215 2664 l
-3219 2664 l
-3221 2667 l
-3224 2669 l
-3228 2669 l
-S
-3212 5236 m
-3215 5234 l
-3219 5234 l
-3221 5232 l
-3224 5230 l
-3228 5230 l
-S
-3188 5243 m
-3192 5243 l
-3197 5243 l
-3199 5241 l
-3201 5239 l
-3206 5239 l
-3210 5239 l
-3212 5236 l
-S
-3148 2638 m
-3150 2640 l
-3152 2642 l
-3156 2642 l
-3161 2642 l
-3163 2644 l
-3165 2647 l
-3170 2647 l
-3174 2647 l
-3177 2649 l
-3179 2651 l
-3183 2651 l
-3186 2653 l
-3188 2655 l
-S
-3148 5261 m
-3150 5259 l
-3152 5256 l
-3156 5256 l
-3161 5256 l
-3163 5254 l
-3165 5252 l
-3170 5252 l
-3174 5252 l
-3177 5250 l
-3179 5247 l
-3183 5247 l
-3186 5245 l
-3188 5243 l
-S
-3107 2624 m
-3110 2626 l
-3112 2629 l
-3116 2629 l
-3121 2629 l
-3123 2631 l
-3125 2633 l
-3130 2633 l
-3134 2633 l
-3136 2635 l
-3139 2638 l
-3143 2638 l
-3148 2638 l
-S
-3107 5274 m
-3110 5272 l
-3112 5270 l
-3116 5270 l
-3121 5270 l
-3123 5268 l
-3125 5265 l
-3130 5265 l
-3134 5265 l
-3136 5263 l
-3139 5261 l
-3143 5261 l
-3148 5261 l
-S
-3067 2615 m
-3072 2615 l
-3076 2615 l
-3078 2617 l
-3081 2620 l
-3085 2620 l
-3089 2620 l
-3092 2622 l
-S
-3107 2624 m
-3103 2624 l
-3098 2624 l
-3094 2624 l
-3092 2622 l
-S
-3092 5277 m
-3094 5274 l
-3098 5274 l
-3103 5274 l
-3107 5274 l
-S
-3067 5283 m
-3072 5283 l
-3076 5283 l
-3078 5281 l
-3081 5279 l
-3085 5279 l
-3089 5279 l
-3092 5277 l
-S
-3027 2606 m
-3031 2606 l
-3036 2606 l
-3040 2606 l
-3043 2609 l
-3045 2611 l
-3049 2611 l
-3054 2611 l
-3058 2611 l
-3060 2613 l
-3063 2615 l
-3067 2615 l
-S
-3027 5292 m
-3031 5292 l
-3036 5292 l
-3040 5292 l
-3043 5290 l
-3045 5288 l
-3049 5288 l
-3054 5288 l
-3058 5288 l
-3060 5285 l
-3063 5283 l
-3067 5283 l
-S
-2987 2597 m
-2991 2597 l
-2996 2597 l
-3000 2597 l
-3005 2597 l
-3007 2600 l
-3009 2602 l
-3013 2602 l
-3018 2602 l
-3022 2602 l
-3025 2604 l
-3027 2606 l
-S
-2987 5301 m
-2991 5301 l
-2996 5301 l
-3000 5301 l
-3005 5301 l
-3007 5299 l
-3009 5297 l
-3013 5297 l
-3018 5297 l
-3022 5297 l
-3025 5294 l
-3027 5292 l
-S
-2946 2588 m
-2951 2588 l
-2955 2588 l
-2960 2588 l
-2962 2591 l
-2964 2593 l
-2969 2593 l
-2973 2593 l
-2978 2593 l
-2982 2593 l
-2984 2595 l
-2987 2597 l
-S
-2946 5310 m
-2951 5310 l
-2955 5310 l
-2960 5310 l
-2962 5308 l
-2964 5306 l
-2969 5306 l
-2973 5306 l
-2978 5306 l
-2982 5306 l
-2984 5303 l
-2987 5301 l
-S
-2906 2579 m
-2908 2582 l
-S
-2908 2582 m
-2911 2584 l
-2915 2584 l
-2920 2584 l
-2924 2584 l
-2929 2584 l
-2933 2584 l
-2935 2586 l
-2938 2588 l
-2942 2588 l
-2946 2588 l
-S
-2908 5317 m
-2911 5314 l
-2915 5314 l
-2920 5314 l
-2924 5314 l
-2929 5314 l
-2933 5314 l
-2935 5312 l
-2938 5310 l
-2942 5310 l
-2946 5310 l
-S
-2906 5319 m
-2908 5317 l
-S
-2866 2575 m
-2870 2575 l
-2875 2575 l
-2877 2577 l
-2879 2579 l
-2884 2579 l
-2888 2579 l
-2893 2579 l
-2897 2579 l
-2902 2579 l
-2906 2579 l
-S
-2906 5319 m
-2902 5319 l
-2897 5319 l
-2893 5319 l
-2888 5319 l
-2884 5319 l
-2879 5319 l
-2877 5321 l
-2875 5323 l
-2870 5323 l
-2866 5323 l
-S
-2826 2571 m
-2830 2571 l
-2835 2571 l
-2837 2573 l
-2839 2575 l
-2844 2575 l
-2848 2575 l
-2853 2575 l
-2857 2575 l
-2862 2575 l
-2866 2575 l
-S
-2826 5328 m
-2830 5328 l
-2835 5328 l
-2837 5326 l
-2839 5323 l
-2844 5323 l
-2848 5323 l
-2853 5323 l
-2857 5323 l
-2862 5323 l
-2866 5323 l
-S
-2786 2571 m
-2790 2571 l
-2794 2571 l
-2799 2571 l
-2803 2571 l
-2808 2571 l
-2812 2571 l
-2817 2571 l
-2821 2571 l
-2826 2571 l
-S
-2786 5328 m
-2790 5328 l
-2794 5328 l
-2799 5328 l
-2803 5328 l
-2808 5328 l
-2812 5328 l
-2817 5328 l
-2821 5328 l
-2826 5328 l
-S
-2745 2566 m
-2750 2566 l
-2754 2566 l
-2759 2566 l
-2763 2566 l
-2768 2566 l
-2772 2566 l
-2774 2568 l
-2777 2571 l
-2781 2571 l
-2786 2571 l
-S
-2745 5332 m
-2750 5332 l
-2754 5332 l
-2759 5332 l
-2763 5332 l
-2768 5332 l
-2772 5332 l
-2774 5330 l
-2777 5328 l
-2781 5328 l
-2786 5328 l
-S
-2705 2566 m
-2710 2566 l
-2714 2566 l
-2719 2566 l
-2723 2566 l
-2727 2566 l
-2732 2566 l
-2736 2566 l
-2741 2566 l
-2745 2566 l
-S
-2705 5332 m
-2710 5332 l
-2714 5332 l
-2719 5332 l
-2723 5332 l
-2727 5332 l
-2732 5332 l
-2736 5332 l
-2741 5332 l
-2745 5332 l
-S
-2665 2566 m
-2669 2566 l
-2674 2566 l
-2678 2566 l
-2683 2566 l
-2687 2566 l
-2692 2566 l
-2696 2566 l
-2701 2566 l
-2705 2566 l
-S
-2665 5332 m
-2669 5332 l
-2674 5332 l
-2678 5332 l
-2683 5332 l
-2687 5332 l
-2692 5332 l
-2696 5332 l
-2701 5332 l
-2705 5332 l
-S
-2625 2571 m
-2629 2571 l
-2634 2571 l
-2636 2568 l
-2638 2566 l
-2643 2566 l
-2647 2566 l
-2651 2566 l
-2656 2566 l
-2660 2566 l
-2665 2566 l
-S
-2625 5328 m
-2629 5328 l
-2634 5328 l
-2636 5330 l
-2638 5332 l
-2643 5332 l
-2647 5332 l
-2651 5332 l
-2656 5332 l
-2660 5332 l
-2665 5332 l
-S
-2584 2571 m
-2589 2571 l
-2593 2571 l
-2598 2571 l
-2602 2571 l
-2607 2571 l
-2611 2571 l
-2616 2571 l
-2620 2571 l
-2625 2571 l
-S
-2584 5328 m
-2589 5328 l
-2593 5328 l
-2598 5328 l
-2602 5328 l
-2607 5328 l
-2611 5328 l
-2616 5328 l
-2620 5328 l
-2625 5328 l
-S
-2544 2575 m
-2549 2575 l
-2553 2575 l
-2558 2575 l
-2562 2575 l
-2567 2575 l
-2571 2575 l
-2573 2573 l
-2576 2571 l
-2580 2571 l
-2584 2571 l
-S
-2544 5323 m
-2549 5323 l
-2553 5323 l
-2558 5323 l
-2562 5323 l
-2567 5323 l
-2571 5323 l
-2573 5326 l
-2576 5328 l
-2580 5328 l
-2584 5328 l
-S
-2504 2579 m
-2508 2579 l
-2513 2579 l
-2517 2579 l
-2522 2579 l
-2526 2579 l
-2531 2579 l
-2533 2577 l
-2535 2575 l
-2540 2575 l
-2544 2575 l
-S
-2504 5319 m
-2508 5319 l
-2513 5319 l
-2517 5319 l
-2522 5319 l
-2526 5319 l
-2531 5319 l
-2533 5321 l
-2535 5323 l
-2540 5323 l
-2544 5323 l
-S
-2502 2582 m
-2504 2579 l
-S
-2464 2588 m
-2468 2588 l
-2473 2588 l
-2475 2586 l
-2477 2584 l
-2482 2584 l
-2486 2584 l
-2491 2584 l
-2495 2584 l
-2500 2584 l
-2502 2582 l
-S
-2464 5310 m
-2468 5310 l
-2473 5310 l
-2475 5312 l
-2477 5314 l
-2482 5314 l
-2486 5314 l
-2491 5314 l
-2495 5314 l
-2500 5314 l
-2502 5317 l
-S
-2504 5319 m
-2502 5317 l
-S
-2424 2597 m
-2426 2595 l
-2428 2593 l
-2433 2593 l
-2437 2593 l
-2441 2593 l
-2446 2593 l
-2448 2591 l
-2450 2588 l
-2455 2588 l
-2459 2588 l
-2464 2588 l
-S
-2424 5301 m
-2426 5303 l
-2428 5306 l
-2433 5306 l
-2437 5306 l
-2441 5306 l
-2446 5306 l
-2448 5308 l
-2450 5310 l
-2455 5310 l
-2459 5310 l
-2464 5310 l
-S
-2383 2606 m
-2386 2604 l
-2388 2602 l
-2392 2602 l
-2397 2602 l
-2401 2602 l
-2403 2600 l
-2406 2597 l
-2410 2597 l
-2415 2597 l
-2419 2597 l
-2424 2597 l
-S
-2383 5292 m
-2386 5294 l
-2388 5297 l
-2392 5297 l
-2397 5297 l
-2401 5297 l
-2403 5299 l
-2406 5301 l
-2410 5301 l
-2415 5301 l
-2419 5301 l
-2424 5301 l
-S
-2343 2615 m
-2348 2615 l
-2350 2613 l
-2352 2611 l
-2357 2611 l
-2361 2611 l
-2365 2611 l
-2368 2609 l
-2370 2606 l
-2374 2606 l
-2379 2606 l
-2383 2606 l
-S
-2343 5283 m
-2348 5283 l
-2350 5285 l
-2352 5288 l
-2357 5288 l
-2361 5288 l
-2365 5288 l
-2368 5290 l
-2370 5292 l
-2374 5292 l
-2379 5292 l
-2383 5292 l
-S
-2319 2622 m
-2321 2620 l
-2325 2620 l
-2330 2620 l
-2332 2617 l
-2334 2615 l
-2339 2615 l
-2343 2615 l
-S
-2303 2624 m
-2307 2624 l
-2312 2624 l
-2316 2624 l
-2319 2622 l
-S
-2303 5274 m
-2307 5274 l
-2312 5274 l
-2316 5274 l
-2319 5277 l
-S
-2319 5277 m
-2321 5279 l
-2325 5279 l
-2330 5279 l
-2332 5281 l
-2334 5283 l
-2339 5283 l
-2343 5283 l
-S
-2303 2624 m
-2301 2626 l
-2298 2629 l
-2294 2629 l
-2290 2629 l
-2287 2631 l
-2285 2633 l
-2281 2633 l
-2276 2633 l
-2274 2635 l
-2272 2638 l
-2267 2638 l
-2263 2638 l
-S
-2263 5261 m
-2267 5261 l
-2272 5261 l
-2274 5263 l
-2276 5265 l
-2281 5265 l
-2285 5265 l
-2287 5268 l
-2290 5270 l
-2294 5270 l
-2298 5270 l
-2301 5272 l
-2303 5274 l
-S
-2222 2655 m
-2225 2653 l
-2227 2651 l
-2231 2651 l
-2234 2649 l
-2236 2647 l
-2240 2647 l
-2245 2647 l
-2247 2644 l
-2249 2642 l
-2254 2642 l
-2258 2642 l
-2260 2640 l
-2263 2638 l
-S
-2222 5243 m
-2225 5245 l
-2227 5247 l
-2231 5247 l
-2234 5250 l
-2236 5252 l
-2240 5252 l
-2245 5252 l
-2247 5254 l
-2249 5256 l
-2254 5256 l
-2258 5256 l
-2260 5259 l
-2263 5261 l
-S
-2198 2662 m
-2200 2660 l
-2205 2660 l
-2209 2660 l
-2211 2658 l
-2214 2655 l
-2218 2655 l
-2222 2655 l
-S
-2182 2669 m
-2187 2669 l
-2189 2667 l
-2191 2664 l
-2196 2664 l
-2198 2662 l
-S
-2182 5230 m
-2187 5230 l
-2189 5232 l
-2191 5234 l
-2196 5234 l
-2198 5236 l
-S
-2198 5236 m
-2200 5239 l
-2205 5239 l
-2209 5239 l
-2211 5241 l
-2214 5243 l
-2218 5243 l
-2222 5243 l
-S
-2142 2687 m
-2144 2685 l
-2147 2682 l
-2151 2682 l
-2155 2682 l
-2158 2680 l
-2160 2678 l
-2164 2678 l
-2167 2676 l
-2169 2673 l
-2173 2673 l
-2176 2671 l
-2178 2669 l
-2182 2669 l
-S
-2142 5212 m
-2144 5214 l
-2147 5216 l
-2151 5216 l
-2155 5216 l
-2158 5218 l
-2160 5221 l
-2164 5221 l
-2167 5223 l
-2169 5225 l
-2173 5225 l
-2176 5227 l
-2178 5230 l
-2182 5230 l
-S
-2109 2702 m
-2111 2700 l
-2115 2700 l
-2117 2698 l
-2120 2696 l
-2124 2696 l
-2126 2693 l
-2129 2691 l
-2133 2691 l
-2135 2689 l
-2138 2687 l
-2142 2687 l
-S
-2102 2705 m
-2106 2705 l
-2109 2702 l
-S
-2102 5194 m
-2106 5194 l
-2109 5196 l
-S
-2109 5196 m
-2111 5198 l
-2115 5198 l
-2117 5201 l
-2120 5203 l
-2124 5203 l
-2126 5205 l
-2129 5207 l
-2133 5207 l
-2135 5209 l
-2138 5212 l
-2142 5212 l
-S
-2102 2705 m
-2100 2707 l
-2097 2709 l
-2093 2709 l
-2091 2711 l
-2088 2714 l
-2084 2714 l
-2082 2716 l
-2079 2718 l
-2075 2718 l
-2073 2720 l
-2071 2723 l
-2066 2723 l
-2064 2725 l
-2062 2727 l
-S
-2062 5171 m
-2064 5174 l
-2066 5176 l
-2071 5176 l
-2073 5178 l
-2075 5180 l
-2079 5180 l
-2082 5183 l
-2084 5185 l
-2088 5185 l
-2091 5187 l
-2093 5189 l
-2097 5189 l
-2100 5192 l
-2102 5194 l
-S
-2028 2743 m
-2030 2740 l
-2035 2740 l
-2037 2738 l
-2039 2736 l
-2044 2736 l
-2046 2734 l
-2048 2731 l
-2053 2731 l
-2055 2729 l
-2057 2727 l
-2062 2727 l
-S
-2021 2749 m
-2024 2747 l
-2026 2745 l
-2028 2743 l
-S
-2021 5149 m
-2024 5151 l
-2026 5154 l
-2028 5156 l
-S
-2028 5156 m
-2030 5158 l
-2035 5158 l
-2037 5160 l
-2039 5163 l
-2044 5163 l
-2046 5165 l
-2048 5167 l
-2053 5167 l
-2055 5169 l
-2057 5171 l
-2062 5171 l
-S
-1981 2772 m
-1983 2769 l
-1986 2767 l
-1990 2767 l
-1992 2765 l
-1995 2763 l
-1997 2760 l
-1999 2758 l
-2003 2758 l
-2006 2756 l
-2008 2754 l
-2012 2754 l
-2015 2752 l
-2017 2749 l
-2021 2749 l
-S
-1981 5127 m
-1983 5129 l
-1986 5131 l
-1990 5131 l
-1992 5133 l
-1995 5136 l
-1997 5138 l
-1999 5140 l
-2003 5140 l
-2006 5142 l
-2008 5145 l
-2012 5145 l
-2015 5147 l
-2017 5149 l
-2021 5149 l
-S
-1961 2783 m
-1963 2781 l
-1968 2781 l
-1970 2778 l
-1972 2776 l
-1977 2776 l
-1979 2774 l
-1981 2772 l
-S
-1941 2798 m
-1943 2796 l
-1945 2794 l
-1948 2792 l
-1950 2790 l
-1954 2790 l
-1957 2787 l
-1959 2785 l
-1961 2783 l
-S
-1941 5100 m
-1943 5102 l
-1945 5104 l
-1948 5107 l
-1950 5109 l
-1954 5109 l
-1957 5111 l
-1959 5113 l
-1961 5116 l
-S
-1961 5116 m
-1963 5118 l
-1968 5118 l
-1970 5120 l
-1972 5122 l
-1977 5122 l
-1979 5125 l
-1981 5127 l
-S
-1903 2823 m
-1905 2821 l
-1907 2819 l
-1910 2816 l
-1914 2816 l
-1916 2814 l
-1919 2812 l
-1921 2810 l
-1923 2807 l
-1928 2807 l
-1930 2805 l
-1932 2803 l
-1934 2801 l
-1936 2798 l
-1941 2798 l
-S
-1901 2825 m
-1903 2823 l
-S
-1901 5073 m
-1903 5075 l
-S
-1903 5075 m
-1905 5078 l
-1907 5080 l
-1910 5082 l
-1914 5082 l
-1916 5084 l
-1919 5087 l
-1921 5089 l
-1923 5091 l
-1928 5091 l
-1930 5093 l
-1932 5096 l
-1934 5098 l
-1936 5100 l
-1941 5100 l
-S
-1901 2825 m
-1898 2828 l
-1896 2830 l
-1892 2830 l
-1890 2832 l
-1887 2834 l
-1885 2836 l
-1883 2839 l
-1881 2841 l
-1878 2843 l
-1874 2843 l
-1872 2845 l
-1869 2848 l
-1867 2850 l
-1865 2852 l
-1863 2854 l
-1860 2857 l
-S
-1860 5042 m
-1863 5044 l
-1865 5046 l
-1867 5049 l
-1869 5051 l
-1872 5053 l
-1874 5055 l
-1878 5055 l
-1881 5058 l
-1883 5060 l
-1885 5062 l
-1887 5064 l
-1890 5066 l
-1892 5069 l
-1896 5069 l
-1898 5071 l
-1901 5073 l
-S
-1849 2863 m
-1852 2861 l
-1854 2859 l
-1856 2857 l
-1860 2857 l
-S
-1820 2888 m
-1823 2886 l
-1825 2883 l
-1827 2881 l
-1829 2879 l
-1831 2877 l
-1834 2874 l
-1836 2872 l
-1838 2870 l
-1843 2870 l
-1845 2868 l
-1847 2866 l
-1849 2863 l
-S
-1820 5011 m
-1823 5013 l
-1825 5015 l
-1827 5017 l
-1829 5020 l
-1831 5022 l
-1834 5024 l
-1836 5026 l
-1838 5028 l
-1843 5028 l
-1845 5031 l
-1847 5033 l
-1849 5035 l
-S
-1849 5035 m
-1852 5037 l
-1854 5040 l
-1856 5042 l
-1860 5042 l
-S
-1800 2903 m
-1802 2901 l
-1805 2899 l
-1807 2897 l
-1809 2895 l
-1811 2892 l
-1816 2892 l
-1818 2890 l
-1820 2888 l
-S
-1780 2924 m
-1782 2921 l
-1785 2919 l
-1787 2917 l
-1789 2915 l
-1791 2912 l
-1793 2910 l
-1796 2908 l
-1798 2906 l
-1800 2903 l
-S
-1780 4975 m
-1782 4977 l
-1785 4979 l
-1787 4982 l
-1789 4984 l
-1791 4986 l
-1793 4988 l
-1796 4990 l
-1798 4993 l
-1800 4995 l
-S
-1800 4995 m
-1802 4997 l
-1805 4999 l
-1807 5002 l
-1809 5004 l
-1811 5006 l
-1816 5006 l
-1818 5008 l
-1820 5011 l
-S
-1755 2944 m
-1758 2941 l
-1760 2939 l
-1762 2937 l
-1764 2935 l
-1767 2933 l
-1769 2930 l
-1771 2928 l
-1773 2926 l
-1776 2924 l
-1780 2924 l
-S
-1740 2959 m
-1742 2957 l
-1744 2955 l
-1747 2953 l
-1749 2950 l
-1751 2948 l
-1753 2946 l
-1755 2944 l
-S
-1740 4939 m
-1742 4941 l
-1744 4944 l
-1747 4946 l
-1749 4948 l
-1751 4950 l
-1753 4953 l
-1755 4955 l
-S
-1755 4955 m
-1758 4957 l
-1760 4959 l
-1762 4961 l
-1764 4964 l
-1767 4966 l
-1769 4968 l
-1771 4970 l
-1773 4973 l
-1776 4975 l
-1780 4975 l
-S
-1715 2984 m
-1717 2982 l
-1720 2979 l
-1722 2977 l
-1724 2975 l
-1726 2973 l
-1729 2971 l
-1731 2968 l
-1733 2966 l
-1735 2964 l
-1738 2962 l
-1740 2959 l
-S
-1700 3000 m
-1702 2997 l
-1704 2995 l
-1706 2993 l
-1709 2991 l
-1711 2988 l
-1713 2986 l
-1715 2984 l
-S
-1700 4899 m
-1702 4901 l
-1704 4903 l
-1706 4906 l
-1709 4908 l
-1711 4910 l
-1713 4912 l
-1715 4915 l
-S
-1715 4915 m
-1717 4917 l
-1720 4919 l
-1722 4921 l
-1724 4923 l
-1726 4926 l
-1729 4928 l
-1731 4930 l
-1733 4932 l
-1735 4935 l
-1738 4937 l
-1740 4939 l
-S
-1679 3024 m
-1679 3020 l
-1682 3017 l
-1684 3015 l
-1686 3013 l
-1688 3011 l
-1691 3009 l
-1693 3006 l
-1695 3004 l
-1697 3002 l
-1700 3000 l
-S
-1659 3044 m
-1662 3042 l
-1664 3040 l
-1666 3038 l
-1668 3035 l
-1671 3033 l
-1673 3031 l
-1675 3029 l
-1677 3026 l
-1679 3024 l
-S
-1659 4854 m
-1662 4856 l
-1664 4859 l
-1666 4861 l
-1668 4863 l
-1671 4865 l
-1673 4868 l
-1675 4870 l
-1677 4872 l
-1679 4874 l
-S
-1679 4874 m
-1679 4879 l
-1682 4881 l
-1684 4883 l
-1686 4885 l
-1688 4888 l
-1691 4890 l
-1693 4892 l
-1695 4894 l
-1697 4897 l
-1700 4899 l
-S
-1644 3064 m
-1646 3062 l
-1648 3060 l
-1648 3055 l
-1650 3053 l
-1653 3051 l
-1655 3049 l
-1657 3047 l
-1659 3044 l
-S
-1619 3093 m
-1621 3091 l
-1624 3089 l
-1626 3087 l
-1626 3082 l
-1628 3080 l
-1630 3078 l
-1633 3076 l
-1635 3073 l
-1637 3071 l
-1639 3069 l
-1642 3067 l
-1644 3064 l
-S
-1619 4805 m
-1621 4807 l
-1624 4810 l
-1626 4812 l
-1626 4816 l
-1628 4818 l
-1630 4821 l
-1633 4823 l
-1635 4825 l
-1637 4827 l
-1639 4830 l
-1642 4832 l
-1644 4834 l
-S
-1644 4834 m
-1646 4836 l
-1648 4839 l
-1648 4843 l
-1650 4845 l
-1653 4847 l
-1655 4850 l
-1657 4852 l
-1659 4854 l
-S
-1612 3105 m
-1612 3100 l
-1615 3098 l
-1617 3096 l
-1619 3093 l
-S
-1612 3105 m
-1610 3107 l
-1608 3109 l
-1606 3111 l
-1604 3114 l
-1601 3116 l
-1599 3118 l
-1599 3122 l
-1597 3125 l
-1595 3127 l
-1592 3129 l
-1590 3131 l
-1588 3134 l
-1586 3136 l
-1586 3140 l
-1583 3143 l
-1581 3145 l
-S
-1579 3147 m
-1581 3145 l
-S
-1579 4751 m
-1581 4754 l
-S
-1581 4754 m
-1583 4756 l
-1586 4758 l
-1586 4763 l
-1588 4765 l
-1590 4767 l
-1592 4769 l
-1595 4772 l
-1597 4774 l
-1599 4776 l
-1599 4780 l
-1601 4783 l
-1604 4785 l
-1606 4787 l
-1608 4789 l
-1610 4792 l
-1612 4794 l
-S
-1612 4794 m
-1612 4798 l
-1615 4801 l
-1617 4803 l
-1619 4805 l
-S
-1579 3147 m
-1577 3149 l
-1574 3152 l
-1572 3154 l
-1572 3158 l
-1570 3160 l
-1568 3163 l
-1566 3165 l
-1563 3167 l
-1563 3172 l
-1561 3174 l
-1559 3176 l
-1557 3178 l
-1554 3181 l
-1554 3185 l
-S
-1539 3205 m
-1541 3203 l
-1543 3201 l
-1545 3198 l
-1545 3194 l
-1548 3192 l
-1550 3190 l
-1552 3187 l
-1554 3185 l
-S
-1539 4693 m
-1541 4696 l
-1543 4698 l
-1545 4700 l
-1545 4704 l
-1548 4707 l
-1550 4709 l
-1552 4711 l
-1554 4713 l
-S
-1554 4713 m
-1554 4718 l
-1557 4720 l
-1559 4722 l
-1561 4725 l
-1563 4727 l
-1563 4731 l
-1566 4734 l
-1568 4736 l
-1570 4738 l
-1572 4740 l
-1572 4745 l
-1574 4747 l
-1577 4749 l
-1579 4751 l
-S
-1528 3225 m
-1530 3223 l
-1532 3221 l
-1532 3216 l
-1534 3214 l
-1536 3212 l
-1536 3207 l
-1539 3205 l
-S
-1528 3225 m
-1525 3227 l
-1523 3230 l
-1523 3234 l
-1521 3236 l
-1519 3239 l
-1516 3241 l
-1514 3243 l
-1514 3248 l
-1512 3250 l
-1510 3252 l
-1510 3257 l
-1507 3259 l
-1505 3261 l
-1505 3265 l
-S
-1499 3272 m
-1501 3270 l
-1503 3268 l
-1505 3265 l
-S
-1499 4626 m
-1501 4629 l
-1503 4631 l
-1505 4633 l
-S
-1505 4633 m
-1505 4637 l
-1507 4640 l
-1510 4642 l
-1510 4646 l
-1512 4649 l
-1514 4651 l
-1514 4655 l
-1516 4658 l
-1519 4660 l
-1521 4662 l
-1523 4664 l
-1523 4669 l
-1525 4671 l
-1528 4673 l
-S
-1528 4673 m
-1530 4675 l
-1532 4678 l
-1532 4682 l
-1534 4684 l
-1536 4687 l
-1536 4691 l
-1539 4693 l
-S
-1483 3306 m
-1483 3301 l
-1485 3299 l
-1487 3297 l
-1487 3292 l
-1490 3290 l
-1492 3288 l
-1492 3283 l
-1494 3281 l
-1496 3279 l
-1496 3274 l
-1499 3272 l
-S
-1483 3306 m
-1481 3308 l
-1478 3310 l
-1478 3315 l
-1476 3317 l
-1474 3319 l
-1474 3324 l
-1472 3326 l
-1469 3328 l
-1469 3333 l
-1467 3335 l
-1465 3337 l
-1465 3341 l
-1463 3344 l
-1461 3346 l
-S
-1458 3353 m
-1461 3350 l
-1461 3346 l
-S
-1458 4546 m
-1461 4548 l
-1461 4553 l
-S
-1461 4553 m
-1463 4555 l
-1465 4557 l
-1465 4561 l
-1467 4564 l
-1469 4566 l
-1469 4570 l
-1472 4573 l
-1474 4575 l
-1474 4579 l
-1476 4582 l
-1478 4584 l
-1478 4588 l
-1481 4591 l
-1483 4593 l
-S
-1483 4593 m
-1483 4597 l
-1485 4599 l
-1487 4602 l
-1487 4606 l
-1490 4608 l
-1492 4611 l
-1492 4615 l
-1494 4617 l
-1496 4620 l
-1496 4624 l
-1499 4626 l
-S
-1443 3386 m
-1443 3382 l
-1445 3379 l
-1447 3377 l
-1447 3373 l
-1449 3371 l
-1452 3368 l
-1452 3364 l
-1454 3362 l
-1456 3359 l
-1456 3355 l
-1458 3353 l
-S
-1443 3386 m
-1440 3388 l
-1438 3391 l
-1438 3395 l
-1438 3400 l
-1436 3402 l
-1434 3404 l
-1434 3408 l
-1431 3411 l
-1429 3413 l
-1429 3417 l
-1427 3420 l
-1425 3422 l
-1425 3426 l
-S
-1418 3442 m
-1420 3440 l
-1420 3435 l
-1423 3433 l
-1425 3431 l
-1425 3426 l
-S
-1418 4456 m
-1420 4459 l
-1420 4463 l
-1423 4465 l
-1425 4468 l
-1425 4472 l
-S
-1425 4472 m
-1425 4477 l
-1427 4479 l
-1429 4481 l
-1429 4486 l
-1431 4488 l
-1434 4490 l
-1434 4494 l
-1436 4497 l
-1438 4499 l
-1438 4503 l
-1438 4508 l
-1440 4510 l
-1443 4512 l
-S
-1443 4512 m
-1443 4517 l
-1445 4519 l
-1447 4521 l
-1447 4526 l
-1449 4528 l
-1452 4530 l
-1452 4535 l
-1454 4537 l
-1456 4539 l
-1456 4544 l
-1458 4546 l
-S
-1411 3467 m
-1411 3462 l
-1411 3458 l
-1414 3455 l
-1416 3453 l
-1416 3449 l
-1416 3444 l
-1418 3442 l
-S
-1411 3467 m
-1409 3469 l
-1407 3471 l
-1407 3476 l
-1405 3478 l
-1402 3480 l
-1402 3484 l
-1402 3489 l
-1400 3491 l
-1398 3493 l
-1398 3498 l
-1398 3502 l
-1396 3505 l
-1393 3507 l
-S
-1393 3507 m
-1393 3511 l
-1393 3516 l
-1391 3518 l
-1389 3520 l
-1389 3525 l
-1389 3529 l
-1387 3531 l
-1385 3534 l
-1385 3538 l
-1385 3543 l
-1382 3545 l
-1380 3547 l
-S
-1378 3563 m
-1380 3560 l
-1380 3556 l
-1380 3551 l
-1380 3547 l
-S
-1378 4336 m
-1380 4338 l
-1380 4342 l
-1380 4347 l
-1380 4351 l
-S
-1380 4351 m
-1382 4354 l
-1385 4356 l
-1385 4360 l
-1385 4365 l
-1387 4367 l
-1389 4369 l
-1389 4374 l
-1389 4378 l
-1391 4380 l
-1393 4383 l
-1393 4387 l
-1393 4392 l
-S
-1393 4392 m
-1396 4394 l
-1398 4396 l
-1398 4401 l
-1398 4405 l
-1400 4407 l
-1402 4410 l
-1402 4414 l
-1402 4418 l
-1405 4421 l
-1407 4423 l
-1407 4427 l
-1409 4430 l
-1411 4432 l
-S
-1411 4432 m
-1411 4436 l
-1411 4441 l
-1414 4443 l
-1416 4445 l
-1416 4450 l
-1416 4454 l
-1418 4456 l
-S
-1371 3587 m
-1371 3583 l
-1371 3578 l
-1373 3576 l
-1376 3574 l
-1376 3569 l
-1376 3565 l
-1378 3563 l
-S
-1371 3587 m
-1371 3592 l
-1369 3594 l
-1367 3596 l
-1367 3601 l
-1367 3605 l
-1367 3610 l
-1364 3612 l
-1362 3614 l
-1362 3619 l
-1362 3623 l
-1362 3627 l
-S
-1362 3627 m
-1360 3630 l
-1358 3632 l
-1358 3636 l
-1358 3641 l
-1358 3645 l
-1355 3648 l
-1353 3650 l
-1353 3654 l
-1353 3659 l
-1353 3663 l
-1353 3668 l
-S
-1353 3668 m
-1351 3670 l
-1349 3672 l
-1349 3677 l
-1349 3681 l
-1349 3686 l
-1349 3690 l
-1347 3692 l
-1344 3694 l
-1344 3699 l
-1344 3703 l
-1344 3708 l
-S
-1338 3746 m
-1340 3744 l
-1340 3739 l
-1340 3735 l
-1340 3730 l
-1340 3726 l
-1340 3721 l
-1342 3719 l
-1344 3717 l
-1344 3712 l
-1344 3708 l
-S
-1338 4153 m
-1340 4155 l
-1340 4159 l
-1340 4164 l
-1340 4168 l
-1340 4173 l
-1340 4177 l
-1342 4179 l
-1344 4182 l
-1344 4186 l
-1344 4191 l
-S
-1344 4191 m
-1344 4195 l
-1344 4199 l
-1344 4204 l
-1347 4206 l
-1349 4208 l
-1349 4213 l
-1349 4217 l
-1349 4222 l
-1349 4226 l
-1351 4229 l
-1353 4231 l
-S
-1353 4231 m
-1353 4235 l
-1353 4240 l
-1353 4244 l
-1353 4249 l
-1355 4251 l
-1358 4253 l
-1358 4258 l
-1358 4262 l
-1358 4267 l
-1360 4269 l
-1362 4271 l
-S
-1362 4271 m
-1362 4275 l
-1362 4280 l
-1362 4284 l
-1364 4287 l
-1367 4289 l
-1367 4293 l
-1367 4298 l
-1367 4302 l
-1369 4305 l
-1371 4307 l
-1371 4311 l
-S
-1371 4311 m
-1371 4316 l
-1371 4320 l
-1373 4322 l
-1376 4325 l
-1376 4329 l
-1376 4334 l
-1378 4336 l
-S
-1335 3748 m
-1338 3746 l
-S
-1335 3748 m
-1335 3753 l
-1335 3757 l
-1335 3762 l
-1335 3766 l
-1335 3770 l
-1335 3775 l
-1333 3777 l
-1331 3779 l
-1331 3784 l
-1331 3788 l
-S
-1331 3788 m
-1331 3793 l
-1331 3797 l
-1331 3802 l
-1331 3806 l
-1331 3811 l
-1331 3815 l
-1329 3817 l
-1326 3820 l
-1326 3824 l
-1326 3829 l
-S
-1326 3829 m
-1326 3833 l
-1326 3838 l
-1326 3842 l
-1326 3846 l
-1326 3851 l
-1326 3855 l
-1326 3860 l
-1326 3864 l
-1326 3869 l
-S
-1326 3869 m
-1326 3873 l
-1326 3878 l
-1324 3880 l
-1322 3882 l
-1322 3887 l
-1322 3891 l
-1322 3896 l
-1322 3900 l
-1322 3905 l
-1322 3909 l
-S
-1322 3909 m
-1322 3913 l
-1322 3918 l
-1322 3922 l
-1322 3927 l
-1322 3931 l
-1322 3936 l
-1322 3940 l
-1322 3945 l
-1322 3949 l
-S
-1322 3949 m
-1322 3954 l
-1322 3958 l
-1322 3963 l
-1322 3967 l
-1322 3972 l
-1322 3976 l
-1322 3981 l
-1322 3985 l
-1322 3989 l
-S
-1322 3989 m
-1322 3994 l
-1322 3998 l
-1322 4003 l
-1322 4007 l
-1322 4012 l
-1322 4016 l
-1324 4018 l
-1326 4021 l
-1326 4025 l
-1326 4030 l
-S
-1326 4030 m
-1326 4034 l
-1326 4039 l
-1326 4043 l
-1326 4048 l
-1326 4052 l
-1326 4056 l
-1326 4061 l
-1326 4065 l
-1326 4070 l
-S
-1326 4070 m
-1326 4074 l
-1326 4079 l
-1329 4081 l
-1331 4083 l
-1331 4088 l
-1331 4092 l
-1331 4097 l
-1331 4101 l
-1331 4106 l
-1331 4110 l
-S
-1331 4110 m
-1331 4115 l
-1331 4119 l
-1333 4121 l
-1335 4124 l
-1335 4128 l
-1335 4132 l
-1335 4137 l
-1335 4141 l
-1335 4146 l
-1335 4150 l
-S
-1338 4153 m
-1335 4150 l
-S
-1 g
-3879 3594 m
-3928 3594 l
-3928 3595 l
-3879 3595 l
-3842 3595 m
-3928 3595 l
-3928 3596 l
-3842 3596 l
-3806 3596 m
-3928 3596 l
-3928 3597 l
-3806 3597 l
-3806 3597 m
-3928 3597 l
-3928 3614 l
-3806 3614 l
-3806 3614 m
-3929 3614 l
-3929 3636 l
-3806 3636 l
-3807 3636 m
-3929 3636 l
-3929 3655 l
-3807 3655 l
-3807 3655 m
-3930 3655 l
-3930 3674 l
-3807 3674 l
-3808 3674 m
-3930 3674 l
-3930 3696 l
-3808 3696 l
-3808 3696 m
-3931 3696 l
-3931 3712 l
-3808 3712 l
-3809 3712 m
-3931 3712 l
-3931 3737 l
-3809 3737 l
-3809 3737 m
-3932 3737 l
-3932 3750 l
-3809 3750 l
-3810 3750 m
-3932 3750 l
-3932 3778 l
-3810 3778 l
-3810 3778 m
-3933 3778 l
-3933 3788 l
-3810 3788 l
-3811 3788 m
-3933 3788 l
-3933 3819 l
-3811 3819 l
-3811 3819 m
-3934 3819 l
-3934 3826 l
-3811 3826 l
-3812 3826 m
-3934 3826 l
-3934 3861 l
-3812 3861 l
-3812 3861 m
-3934 3861 l
-3934 3862 l
-3812 3862 l
-3812 3862 m
-3894 3862 l
-3894 3863 l
-3812 3863 l
-3812 3863 m
-3854 3863 l
-3854 3864 l
-3812 3864 l
-Y
-3927.5 3593.7 m
-3806 3597 l
-3813 3864 l
-3934 3861 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3824 3626 m
-3825 3672 l
-3858 3646 l
-3858 3658 l
-3863 3666 l
-3867 3670 l
-3879 3674 l
-3888 3674 l
-3900 3670 l
-3908 3661 l
-3912 3648 l
-3912 3636 l
-3907 3623 l
-3903 3619 l
-3895 3615 l
-S
-3826 3726 m
-3830 3713 l
-3843 3705 l
-3863 3700 l
-3876 3699 l
-3897 3703 l
-3910 3711 l
-3914 3724 l
-3914 3732 l
-3911 3745 l
-3898 3753 l
-3877 3758 l
-3865 3758 l
-3844 3755 l
-3831 3747 l
-3827 3734 l
-3826 3726 l
-S
-3829 3809 m
-3832 3797 l
-3845 3788 l
-3866 3783 l
-3878 3783 l
-3899 3787 l
-3912 3795 l
-3916 3807 l
-3917 3815 l
-3913 3828 l
-3900 3837 l
-3880 3841 l
-3867 3842 l
-3846 3838 l
-3833 3830 l
-3829 3818 l
-3829 3809 l
-S
-1 g
-2463 2687 m
-2467 2687 l
-2467 2688 l
-2463 2688 l
-2460 2688 m
-2467 2688 l
-2467 2689 l
-2460 2689 l
-2458 2689 m
-2468 2689 l
-2468 2690 l
-2458 2690 l
-2455 2690 m
-2468 2690 l
-2468 2691 l
-2455 2691 l
-2453 2691 m
-2468 2691 l
-2468 2692 l
-2453 2692 l
-2450 2692 m
-2469 2692 l
-2469 2693 l
-2450 2693 l
-2448 2693 m
-2469 2693 l
-2469 2694 l
-2448 2694 l
-2445 2694 m
-2470 2694 l
-2470 2695 l
-2445 2695 l
-2442 2695 m
-2470 2695 l
-2470 2696 l
-2442 2696 l
-2440 2696 m
-2470 2696 l
-2470 2697 l
-2440 2697 l
-2437 2697 m
-2471 2697 l
-2471 2698 l
-2437 2698 l
-2435 2698 m
-2471 2698 l
-2471 2699 l
-2435 2699 l
-2432 2699 m
-2472 2699 l
-2472 2700 l
-2432 2700 l
-2430 2700 m
-2472 2700 l
-2472 2701 l
-2430 2701 l
-2427 2701 m
-2472 2701 l
-2472 2702 l
-2427 2702 l
-2424 2702 m
-2473 2702 l
-2473 2703 l
-2424 2703 l
-2422 2703 m
-2473 2703 l
-2473 2704 l
-2422 2704 l
-2419 2704 m
-2473 2704 l
-2473 2705 l
-2419 2705 l
-2417 2705 m
-2474 2705 l
-2474 2706 l
-2417 2706 l
-2414 2706 m
-2474 2706 l
-2474 2707 l
-2414 2707 l
-2412 2707 m
-2475 2707 l
-2475 2708 l
-2412 2708 l
-2409 2708 m
-2475 2708 l
-2475 2709 l
-2409 2709 l
-2406 2709 m
-2475 2709 l
-2475 2710 l
-2406 2710 l
-2404 2710 m
-2476 2710 l
-2476 2711 l
-2404 2711 l
-2401 2711 m
-2476 2711 l
-2476 2712 l
-2401 2712 l
-2399 2712 m
-2477 2712 l
-2477 2713 l
-2399 2713 l
-2396 2713 m
-2477 2713 l
-2477 2714 l
-2396 2714 l
-2394 2714 m
-2477 2714 l
-2477 2715 l
-2394 2715 l
-2391 2715 m
-2478 2715 l
-2478 2716 l
-2391 2716 l
-2388 2716 m
-2478 2716 l
-2478 2717 l
-2388 2717 l
-2386 2717 m
-2479 2717 l
-2479 2718 l
-2386 2718 l
-2383 2718 m
-2479 2718 l
-2479 2719 l
-2383 2719 l
-2381 2719 m
-2479 2719 l
-2479 2720 l
-2381 2720 l
-2378 2720 m
-2480 2720 l
-2480 2721 l
-2378 2721 l
-2376 2721 m
-2480 2721 l
-2480 2722 l
-2376 2722 l
-2373 2722 m
-2480 2722 l
-2480 2723 l
-2373 2723 l
-2371 2723 m
-2481 2723 l
-2481 2724 l
-2371 2724 l
-2368 2724 m
-2481 2724 l
-2481 2725 l
-2368 2725 l
-2365 2725 m
-2482 2725 l
-2482 2726 l
-2365 2726 l
-2363 2726 m
-2482 2726 l
-2482 2727 l
-2363 2727 l
-2360 2727 m
-2482 2727 l
-2482 2728 l
-2360 2728 l
-2358 2728 m
-2483 2728 l
-2483 2729 l
-2358 2729 l
-2355 2729 m
-2483 2729 l
-2483 2730 l
-2355 2730 l
-2353 2730 m
-2484 2730 l
-2484 2731 l
-2353 2731 l
-2350 2731 m
-2484 2731 l
-2484 2732 l
-2350 2732 l
-2347 2732 m
-2484 2732 l
-2484 2733 l
-2347 2733 l
-2345 2733 m
-2485 2733 l
-2485 2734 l
-2345 2734 l
-2342 2734 m
-2485 2734 l
-2485 2735 l
-2342 2735 l
-2340 2735 m
-2486 2735 l
-2486 2736 l
-2340 2736 l
-2337 2736 m
-2486 2736 l
-2486 2737 l
-2337 2737 l
-2335 2737 m
-2486 2737 l
-2486 2738 l
-2335 2738 l
-2332 2738 m
-2487 2738 l
-2487 2739 l
-2332 2739 l
-2329 2739 m
-2487 2739 l
-2487 2740 l
-2329 2740 l
-2327 2740 m
-2487 2740 l
-2487 2741 l
-2327 2741 l
-2324 2741 m
-2488 2741 l
-2488 2742 l
-2324 2742 l
-2322 2742 m
-2488 2742 l
-2488 2743 l
-2322 2743 l
-2319 2743 m
-2489 2743 l
-2489 2744 l
-2319 2744 l
-2317 2744 m
-2489 2744 l
-2489 2745 l
-2317 2745 l
-2314 2745 m
-2489 2745 l
-2489 2746 l
-2314 2746 l
-2311 2746 m
-2490 2746 l
-2490 2747 l
-2311 2747 l
-2309 2747 m
-2490 2747 l
-2490 2748 l
-2309 2748 l
-2306 2748 m
-2491 2748 l
-2491 2749 l
-2306 2749 l
-2304 2749 m
-2491 2749 l
-2491 2750 l
-2304 2750 l
-2301 2750 m
-2491 2750 l
-2491 2751 l
-2301 2751 l
-2299 2751 m
-2492 2751 l
-2492 2752 l
-2299 2752 l
-2296 2752 m
-2492 2752 l
-2492 2753 l
-2296 2753 l
-2294 2753 m
-2493 2753 l
-2493 2754 l
-2294 2754 l
-2291 2754 m
-2493 2754 l
-2493 2755 l
-2291 2755 l
-2288 2755 m
-2493 2755 l
-2493 2756 l
-2288 2756 l
-2286 2756 m
-2494 2756 l
-2494 2757 l
-2286 2757 l
-2283 2757 m
-2494 2757 l
-2494 2758 l
-2283 2758 l
-2281 2758 m
-2494 2758 l
-2494 2759 l
-2281 2759 l
-2278 2759 m
-2495 2759 l
-2495 2760 l
-2278 2760 l
-2276 2760 m
-2495 2760 l
-2495 2761 l
-2276 2761 l
-2273 2761 m
-2496 2761 l
-2496 2762 l
-2273 2762 l
-2270 2762 m
-2496 2762 l
-2496 2763 l
-2270 2763 l
-2268 2763 m
-2496 2763 l
-2496 2764 l
-2268 2764 l
-2265 2764 m
-2497 2764 l
-2497 2765 l
-2265 2765 l
-2263 2765 m
-2497 2765 l
-2497 2766 l
-2263 2766 l
-2260 2766 m
-2498 2766 l
-2498 2767 l
-2260 2767 l
-2258 2767 m
-2498 2767 l
-2498 2768 l
-2258 2768 l
-2255 2768 m
-2498 2768 l
-2498 2769 l
-2255 2769 l
-2252 2769 m
-2499 2769 l
-2499 2770 l
-2252 2770 l
-2250 2770 m
-2499 2770 l
-2499 2771 l
-2250 2771 l
-2247 2771 m
-2500 2771 l
-2500 2772 l
-2247 2772 l
-2245 2772 m
-2500 2772 l
-2500 2773 l
-2245 2773 l
-2242 2773 m
-2500 2773 l
-2500 2774 l
-2242 2774 l
-2240 2774 m
-2501 2774 l
-2501 2775 l
-2240 2775 l
-2237 2775 m
-2501 2775 l
-2501 2776 l
-2237 2776 l
-2234 2776 m
-2501 2776 l
-2501 2777 l
-2234 2777 l
-2232 2777 m
-2502 2777 l
-2502 2778 l
-2232 2778 l
-2229 2778 m
-2502 2778 l
-2502 2779 l
-2229 2779 l
-2227 2779 m
-2503 2779 l
-2503 2780 l
-2227 2780 l
-2224 2780 m
-2503 2780 l
-2503 2781 l
-2224 2781 l
-2222 2781 m
-2503 2781 l
-2503 2782 l
-2222 2782 l
-2219 2782 m
-2504 2782 l
-2504 2783 l
-2219 2783 l
-2217 2783 m
-2504 2783 l
-2504 2784 l
-2217 2784 l
-2217 2784 m
-2505 2784 l
-2505 2787 l
-2217 2787 l
-2218 2787 m
-2506 2787 l
-2506 2789 l
-2218 2789 l
-2218 2789 m
-2507 2789 l
-2507 2790 l
-2218 2790 l
-2219 2790 m
-2507 2790 l
-2507 2792 l
-2219 2792 l
-2220 2792 m
-2508 2792 l
-2508 2795 l
-2220 2795 l
-2221 2795 m
-2509 2795 l
-2509 2797 l
-2221 2797 l
-2222 2797 m
-2510 2797 l
-2510 2800 l
-2222 2800 l
-2223 2800 m
-2510 2800 l
-2510 2801 l
-2223 2801 l
-2223 2801 m
-2508 2801 l
-2508 2802 l
-2223 2802 l
-2224 2802 m
-2505 2802 l
-2505 2803 l
-2224 2803 l
-2224 2803 m
-2503 2803 l
-2503 2804 l
-2224 2804 l
-2224 2804 m
-2500 2804 l
-2500 2805 l
-2224 2805 l
-2225 2805 m
-2498 2805 l
-2498 2806 l
-2225 2806 l
-2225 2806 m
-2495 2806 l
-2495 2807 l
-2225 2807 l
-2225 2807 m
-2492 2807 l
-2492 2808 l
-2225 2808 l
-2226 2808 m
-2490 2808 l
-2490 2809 l
-2226 2809 l
-2226 2809 m
-2487 2809 l
-2487 2810 l
-2226 2810 l
-2227 2810 m
-2485 2810 l
-2485 2811 l
-2227 2811 l
-2227 2811 m
-2482 2811 l
-2482 2812 l
-2227 2812 l
-2227 2812 m
-2480 2812 l
-2480 2813 l
-2227 2813 l
-2228 2813 m
-2477 2813 l
-2477 2814 l
-2228 2814 l
-2228 2814 m
-2474 2814 l
-2474 2815 l
-2228 2815 l
-2229 2815 m
-2472 2815 l
-2472 2816 l
-2229 2816 l
-2229 2816 m
-2469 2816 l
-2469 2817 l
-2229 2817 l
-2229 2817 m
-2467 2817 l
-2467 2818 l
-2229 2818 l
-2230 2818 m
-2464 2818 l
-2464 2819 l
-2230 2819 l
-2230 2819 m
-2462 2819 l
-2462 2820 l
-2230 2820 l
-2231 2820 m
-2459 2820 l
-2459 2821 l
-2231 2821 l
-2231 2821 m
-2457 2821 l
-2457 2822 l
-2231 2822 l
-2231 2822 m
-2454 2822 l
-2454 2823 l
-2231 2823 l
-2232 2823 m
-2451 2823 l
-2451 2824 l
-2232 2824 l
-2232 2824 m
-2449 2824 l
-2449 2825 l
-2232 2825 l
-2232 2825 m
-2446 2825 l
-2446 2826 l
-2232 2826 l
-2233 2826 m
-2444 2826 l
-2444 2827 l
-2233 2827 l
-2233 2827 m
-2441 2827 l
-2441 2828 l
-2233 2828 l
-2234 2828 m
-2439 2828 l
-2439 2829 l
-2234 2829 l
-2234 2829 m
-2436 2829 l
-2436 2830 l
-2234 2830 l
-2234 2830 m
-2433 2830 l
-2433 2831 l
-2234 2831 l
-2235 2831 m
-2431 2831 l
-2431 2832 l
-2235 2832 l
-2235 2832 m
-2428 2832 l
-2428 2833 l
-2235 2833 l
-2236 2833 m
-2426 2833 l
-2426 2834 l
-2236 2834 l
-2236 2834 m
-2423 2834 l
-2423 2835 l
-2236 2835 l
-2236 2835 m
-2421 2835 l
-2421 2836 l
-2236 2836 l
-2237 2836 m
-2418 2836 l
-2418 2837 l
-2237 2837 l
-2237 2837 m
-2415 2837 l
-2415 2838 l
-2237 2838 l
-2238 2838 m
-2413 2838 l
-2413 2839 l
-2238 2839 l
-2238 2839 m
-2410 2839 l
-2410 2840 l
-2238 2840 l
-2238 2840 m
-2408 2840 l
-2408 2841 l
-2238 2841 l
-2239 2841 m
-2405 2841 l
-2405 2842 l
-2239 2842 l
-2239 2842 m
-2403 2842 l
-2403 2843 l
-2239 2843 l
-2239 2843 m
-2400 2843 l
-2400 2844 l
-2239 2844 l
-2240 2844 m
-2397 2844 l
-2397 2845 l
-2240 2845 l
-2240 2845 m
-2395 2845 l
-2395 2846 l
-2240 2846 l
-2241 2846 m
-2392 2846 l
-2392 2847 l
-2241 2847 l
-2241 2847 m
-2390 2847 l
-2390 2848 l
-2241 2848 l
-2241 2848 m
-2387 2848 l
-2387 2849 l
-2241 2849 l
-2242 2849 m
-2385 2849 l
-2385 2850 l
-2242 2850 l
-2242 2850 m
-2382 2850 l
-2382 2851 l
-2242 2851 l
-2243 2851 m
-2380 2851 l
-2380 2852 l
-2243 2852 l
-2243 2852 m
-2377 2852 l
-2377 2853 l
-2243 2853 l
-2243 2853 m
-2374 2853 l
-2374 2854 l
-2243 2854 l
-2244 2854 m
-2372 2854 l
-2372 2855 l
-2244 2855 l
-2244 2855 m
-2369 2855 l
-2369 2856 l
-2244 2856 l
-2245 2856 m
-2367 2856 l
-2367 2857 l
-2245 2857 l
-2245 2857 m
-2364 2857 l
-2364 2858 l
-2245 2858 l
-2245 2858 m
-2362 2858 l
-2362 2859 l
-2245 2859 l
-2246 2859 m
-2359 2859 l
-2359 2860 l
-2246 2860 l
-2246 2860 m
-2356 2860 l
-2356 2861 l
-2246 2861 l
-2246 2861 m
-2354 2861 l
-2354 2862 l
-2246 2862 l
-2247 2862 m
-2351 2862 l
-2351 2863 l
-2247 2863 l
-2247 2863 m
-2349 2863 l
-2349 2864 l
-2247 2864 l
-2248 2864 m
-2346 2864 l
-2346 2865 l
-2248 2865 l
-2248 2865 m
-2344 2865 l
-2344 2866 l
-2248 2866 l
-2248 2866 m
-2341 2866 l
-2341 2867 l
-2248 2867 l
-2249 2867 m
-2338 2867 l
-2338 2868 l
-2249 2868 l
-2249 2868 m
-2336 2868 l
-2336 2869 l
-2249 2869 l
-2250 2869 m
-2333 2869 l
-2333 2870 l
-2250 2870 l
-2250 2870 m
-2331 2870 l
-2331 2871 l
-2250 2871 l
-2250 2871 m
-2328 2871 l
-2328 2872 l
-2250 2872 l
-2251 2872 m
-2326 2872 l
-2326 2873 l
-2251 2873 l
-2251 2873 m
-2323 2873 l
-2323 2874 l
-2251 2874 l
-2252 2874 m
-2321 2874 l
-2321 2875 l
-2252 2875 l
-2252 2875 m
-2318 2875 l
-2318 2876 l
-2252 2876 l
-2252 2876 m
-2315 2876 l
-2315 2877 l
-2252 2877 l
-2253 2877 m
-2313 2877 l
-2313 2878 l
-2253 2878 l
-2253 2878 m
-2310 2878 l
-2310 2879 l
-2253 2879 l
-2253 2879 m
-2308 2879 l
-2308 2880 l
-2253 2880 l
-2254 2880 m
-2305 2880 l
-2305 2881 l
-2254 2881 l
-2254 2881 m
-2303 2881 l
-2303 2882 l
-2254 2882 l
-2255 2882 m
-2300 2882 l
-2300 2883 l
-2255 2883 l
-2255 2883 m
-2297 2883 l
-2297 2884 l
-2255 2884 l
-2255 2884 m
-2295 2884 l
-2295 2885 l
-2255 2885 l
-2256 2885 m
-2292 2885 l
-2292 2886 l
-2256 2886 l
-2256 2886 m
-2290 2886 l
-2290 2887 l
-2256 2887 l
-2257 2887 m
-2287 2887 l
-2287 2888 l
-2257 2888 l
-2257 2888 m
-2285 2888 l
-2285 2889 l
-2257 2889 l
-2257 2889 m
-2282 2889 l
-2282 2890 l
-2257 2890 l
-2258 2890 m
-2279 2890 l
-2279 2891 l
-2258 2891 l
-2258 2891 m
-2277 2891 l
-2277 2892 l
-2258 2892 l
-2259 2892 m
-2274 2892 l
-2274 2893 l
-2259 2893 l
-2259 2893 m
-2272 2893 l
-2272 2894 l
-2259 2894 l
-2259 2894 m
-2269 2894 l
-2269 2895 l
-2259 2895 l
-2260 2895 m
-2267 2895 l
-2267 2896 l
-2260 2896 l
-2260 2896 m
-2264 2896 l
-2264 2897 l
-2260 2897 l
-Y
-2509.9 2800 m
-2466 2687 l
-2217 2784 l
-2261 2897 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2456 2731 m
-2455 2727 l
-2448 2721 l
-2442 2719 l
-2433 2718 l
-2418 2724 l
-2411 2731 l
-2409 2736 l
-2408 2746 l
-2411 2753 l
-2418 2760 l
-2430 2768 l
-2484 2792 l
-2430 2813 l
-S
-2336 2756 m
-2396 2795 l
-2338 2818 l
-S
-2336 2756 m
-2368 2838 l
-S
-2274 2780 m
-2287 2780 l
-2299 2788 l
-2311 2806 l
-2315 2818 l
-2319 2839 l
-2316 2853 l
-2305 2862 l
-2298 2865 l
-2284 2866 l
-2272 2857 l
-2261 2839 l
-2256 2827 l
-2252 2806 l
-2256 2792 l
-2266 2783 l
-2274 2780 l
-S
-1 g
-1926 3331 m
-1931 3331 l
-1931 3332 l
-1926 3332 l
-1921 3332 m
-1932 3332 l
-1932 3333 l
-1921 3333 l
-1916 3333 m
-1932 3333 l
-1932 3334 l
-1916 3334 l
-1910 3334 m
-1932 3334 l
-1932 3335 l
-1910 3335 l
-1905 3335 m
-1932 3335 l
-1932 3336 l
-1905 3336 l
-1900 3336 m
-1932 3336 l
-1932 3337 l
-1900 3337 l
-1895 3337 m
-1932 3337 l
-1932 3338 l
-1895 3338 l
-1890 3338 m
-1933 3338 l
-1933 3339 l
-1890 3339 l
-1884 3339 m
-1933 3339 l
-1933 3340 l
-1884 3340 l
-1879 3340 m
-1933 3340 l
-1933 3341 l
-1879 3341 l
-1874 3341 m
-1933 3341 l
-1933 3342 l
-1874 3342 l
-1869 3342 m
-1933 3342 l
-1933 3343 l
-1869 3343 l
-1864 3343 m
-1934 3343 l
-1934 3344 l
-1864 3344 l
-1858 3344 m
-1934 3344 l
-1934 3345 l
-1858 3345 l
-1853 3345 m
-1934 3345 l
-1934 3346 l
-1853 3346 l
-1848 3346 m
-1934 3346 l
-1934 3347 l
-1848 3347 l
-1843 3347 m
-1934 3347 l
-1934 3348 l
-1843 3348 l
-1838 3348 m
-1935 3348 l
-1935 3349 l
-1838 3349 l
-1832 3349 m
-1935 3349 l
-1935 3350 l
-1832 3350 l
-1827 3350 m
-1935 3350 l
-1935 3351 l
-1827 3351 l
-1822 3351 m
-1935 3351 l
-1935 3352 l
-1822 3352 l
-1817 3352 m
-1935 3352 l
-1935 3353 l
-1817 3353 l
-1812 3353 m
-1936 3353 l
-1936 3354 l
-1812 3354 l
-1812 3354 m
-1936 3354 l
-1936 3359 l
-1812 3359 l
-1812 3359 m
-1937 3359 l
-1937 3360 l
-1812 3360 l
-1813 3360 m
-1937 3360 l
-1937 3364 l
-1813 3364 l
-1813 3364 m
-1938 3364 l
-1938 3365 l
-1813 3365 l
-1814 3365 m
-1938 3365 l
-1938 3369 l
-1814 3369 l
-1814 3369 m
-1939 3369 l
-1939 3370 l
-1814 3370 l
-1815 3370 m
-1939 3370 l
-1939 3375 l
-1815 3375 l
-1815 3375 m
-1940 3375 l
-1940 3376 l
-1815 3376 l
-1816 3376 m
-1940 3376 l
-1940 3380 l
-1816 3380 l
-1816 3380 m
-1941 3380 l
-1941 3381 l
-1816 3381 l
-1817 3381 m
-1941 3381 l
-1941 3385 l
-1817 3385 l
-1817 3385 m
-1942 3385 l
-1942 3386 l
-1817 3386 l
-1818 3386 m
-1942 3386 l
-1942 3390 l
-1818 3390 l
-1818 3390 m
-1943 3390 l
-1943 3392 l
-1818 3392 l
-1819 3392 m
-1943 3392 l
-1943 3396 l
-1819 3396 l
-1819 3396 m
-1944 3396 l
-1944 3397 l
-1819 3397 l
-1820 3397 m
-1944 3397 l
-1944 3401 l
-1820 3401 l
-1820 3401 m
-1945 3401 l
-1945 3402 l
-1820 3402 l
-1821 3402 m
-1945 3402 l
-1945 3406 l
-1821 3406 l
-1821 3406 m
-1946 3406 l
-1946 3408 l
-1821 3408 l
-1822 3408 m
-1946 3408 l
-1946 3412 l
-1822 3412 l
-1822 3412 m
-1947 3412 l
-1947 3413 l
-1822 3413 l
-1823 3413 m
-1947 3413 l
-1947 3417 l
-1823 3417 l
-1823 3417 m
-1948 3417 l
-1948 3418 l
-1823 3418 l
-1824 3418 m
-1948 3418 l
-1948 3422 l
-1824 3422 l
-1824 3422 m
-1949 3422 l
-1949 3424 l
-1824 3424 l
-1825 3424 m
-1949 3424 l
-1949 3427 l
-1825 3427 l
-1825 3427 m
-1950 3427 l
-1950 3429 l
-1825 3429 l
-1826 3429 m
-1950 3429 l
-1950 3433 l
-1826 3433 l
-1826 3433 m
-1951 3433 l
-1951 3434 l
-1826 3434 l
-1827 3434 m
-1951 3434 l
-1951 3438 l
-1827 3438 l
-1827 3438 m
-1952 3438 l
-1952 3440 l
-1827 3440 l
-1828 3440 m
-1952 3440 l
-1952 3443 l
-1828 3443 l
-1828 3443 m
-1953 3443 l
-1953 3445 l
-1828 3445 l
-1829 3445 m
-1953 3445 l
-1953 3448 l
-1829 3448 l
-1829 3448 m
-1954 3448 l
-1954 3450 l
-1829 3450 l
-1830 3450 m
-1954 3450 l
-1954 3454 l
-1830 3454 l
-1830 3454 m
-1955 3454 l
-1955 3456 l
-1830 3456 l
-1831 3456 m
-1955 3456 l
-1955 3459 l
-1831 3459 l
-1831 3459 m
-1956 3459 l
-1956 3461 l
-1831 3461 l
-1832 3461 m
-1956 3461 l
-1956 3464 l
-1832 3464 l
-1832 3464 m
-1957 3464 l
-1957 3466 l
-1832 3466 l
-1833 3466 m
-1957 3466 l
-1957 3470 l
-1833 3470 l
-1833 3470 m
-1958 3470 l
-1958 3472 l
-1833 3472 l
-1834 3472 m
-1958 3472 l
-1958 3475 l
-1834 3475 l
-1834 3475 m
-1959 3475 l
-1959 3477 l
-1834 3477 l
-1835 3477 m
-1959 3477 l
-1959 3480 l
-1835 3480 l
-1835 3480 m
-1960 3480 l
-1960 3482 l
-1835 3482 l
-1836 3482 m
-1960 3482 l
-1960 3485 l
-1836 3485 l
-1836 3485 m
-1961 3485 l
-1961 3487 l
-1836 3487 l
-1837 3487 m
-1961 3487 l
-1961 3491 l
-1837 3491 l
-1837 3491 m
-1962 3491 l
-1962 3493 l
-1837 3493 l
-1838 3493 m
-1962 3493 l
-1962 3496 l
-1838 3496 l
-1838 3496 m
-1963 3496 l
-1963 3498 l
-1838 3498 l
-1839 3498 m
-1963 3498 l
-1963 3501 l
-1839 3501 l
-1839 3501 m
-1964 3501 l
-1964 3503 l
-1839 3503 l
-1840 3503 m
-1964 3503 l
-1964 3507 l
-1840 3507 l
-1840 3507 m
-1965 3507 l
-1965 3509 l
-1840 3509 l
-1841 3509 m
-1965 3509 l
-1965 3512 l
-1841 3512 l
-1841 3512 m
-1966 3512 l
-1966 3514 l
-1841 3514 l
-1842 3514 m
-1966 3514 l
-1966 3517 l
-1842 3517 l
-1842 3517 m
-1967 3517 l
-1967 3519 l
-1842 3519 l
-1843 3519 m
-1967 3519 l
-1967 3522 l
-1843 3522 l
-1843 3522 m
-1968 3522 l
-1968 3525 l
-1843 3525 l
-1844 3525 m
-1968 3525 l
-1968 3528 l
-1844 3528 l
-1844 3528 m
-1969 3528 l
-1969 3530 l
-1844 3530 l
-1845 3530 m
-1969 3530 l
-1969 3533 l
-1845 3533 l
-1845 3533 m
-1970 3533 l
-1970 3535 l
-1845 3535 l
-1846 3535 m
-1970 3535 l
-1970 3538 l
-1846 3538 l
-1846 3538 m
-1971 3538 l
-1971 3541 l
-1846 3541 l
-1847 3541 m
-1971 3541 l
-1971 3544 l
-1847 3544 l
-1847 3544 m
-1972 3544 l
-1972 3546 l
-1847 3546 l
-1848 3546 m
-1972 3546 l
-1972 3549 l
-1848 3549 l
-1848 3549 m
-1973 3549 l
-1973 3551 l
-1848 3551 l
-1849 3551 m
-1973 3551 l
-1973 3554 l
-1849 3554 l
-1849 3554 m
-1974 3554 l
-1974 3557 l
-1849 3557 l
-1850 3557 m
-1974 3557 l
-1974 3559 l
-1850 3559 l
-1850 3559 m
-1975 3559 l
-1975 3562 l
-1850 3562 l
-1851 3562 m
-1975 3562 l
-1975 3565 l
-1851 3565 l
-1851 3565 m
-1976 3565 l
-1976 3567 l
-1851 3567 l
-1852 3567 m
-1976 3567 l
-1976 3570 l
-1852 3570 l
-1852 3570 m
-1977 3570 l
-1977 3573 l
-1852 3573 l
-1853 3573 m
-1977 3573 l
-1977 3575 l
-1853 3575 l
-1853 3575 m
-1978 3575 l
-1978 3578 l
-1853 3578 l
-1854 3578 m
-1978 3578 l
-1978 3581 l
-1854 3581 l
-1854 3581 m
-1978 3581 l
-1978 3582 l
-1854 3582 l
-1854 3582 m
-1973 3582 l
-1973 3583 l
-1854 3583 l
-1855 3583 m
-1968 3583 l
-1968 3584 l
-1855 3584 l
-1855 3584 m
-1963 3584 l
-1963 3585 l
-1855 3585 l
-1855 3585 m
-1958 3585 l
-1958 3586 l
-1855 3586 l
-1855 3586 m
-1953 3586 l
-1953 3587 l
-1855 3587 l
-1855 3587 m
-1947 3587 l
-1947 3588 l
-1855 3588 l
-1855 3588 m
-1942 3588 l
-1942 3589 l
-1855 3589 l
-1856 3589 m
-1937 3589 l
-1937 3590 l
-1856 3590 l
-1856 3590 m
-1932 3590 l
-1932 3591 l
-1856 3591 l
-1856 3591 m
-1927 3591 l
-1927 3592 l
-1856 3592 l
-1856 3592 m
-1922 3592 l
-1922 3593 l
-1856 3593 l
-1856 3593 m
-1916 3593 l
-1916 3594 l
-1856 3594 l
-1857 3594 m
-1911 3594 l
-1911 3595 l
-1857 3595 l
-1857 3595 m
-1906 3595 l
-1906 3596 l
-1857 3596 l
-1857 3596 m
-1901 3596 l
-1901 3597 l
-1857 3597 l
-1857 3597 m
-1896 3597 l
-1896 3598 l
-1857 3598 l
-1857 3598 m
-1891 3598 l
-1891 3599 l
-1857 3599 l
-1858 3599 m
-1885 3599 l
-1885 3600 l
-1858 3600 l
-1858 3600 m
-1880 3600 l
-1880 3601 l
-1858 3601 l
-1858 3601 m
-1875 3601 l
-1875 3602 l
-1858 3602 l
-1858 3602 m
-1870 3602 l
-1870 3603 l
-1858 3603 l
-1858 3603 m
-1865 3603 l
-1865 3604 l
-1858 3604 l
-Y
-1930.7 3331.2 m
-1812 3354 l
-1859 3604 l
-1978 3581 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1848 3368 m
-1846 3377 l
-1836 3392 l
-1922 3375 l
-S
-1849 3461 m
-1851 3448 l
-1858 3443 l
-1867 3441 l
-1876 3444 l
-1881 3451 l
-1888 3467 l
-1895 3478 l
-1905 3485 l
-1914 3487 l
-1926 3485 l
-1933 3479 l
-1937 3475 l
-1938 3461 l
-1935 3445 l
-1929 3434 l
-1924 3430 l
-1915 3428 l
-1903 3430 l
-1895 3436 l
-1889 3445 l
-1887 3459 l
-1886 3476 l
-1883 3485 l
-1876 3490 l
-1868 3492 l
-1859 3489 l
-1852 3478 l
-1849 3461 l
-S
-1866 3548 m
-1867 3535 l
-1878 3524 l
-1898 3516 l
-1910 3514 l
-1931 3514 l
-1945 3520 l
-1952 3531 l
-1953 3539 l
-1952 3553 l
-1941 3563 l
-1921 3571 l
-1909 3573 l
-1887 3573 l
-1874 3567 l
-1867 3556 l
-1866 3548 l
-S
-1 g
-2178 3840 m
-2182 3840 l
-2182 3841 l
-2178 3841 l
-2178 3841 m
-2183 3841 l
-2183 3842 l
-2178 3842 l
-2177 3842 m
-2184 3842 l
-2184 3843 l
-2177 3843 l
-2176 3843 m
-2186 3843 l
-2186 3844 l
-2176 3844 l
-2175 3844 m
-2187 3844 l
-2187 3845 l
-2175 3845 l
-2174 3845 m
-2188 3845 l
-2188 3846 l
-2174 3846 l
-2174 3846 m
-2189 3846 l
-2189 3847 l
-2174 3847 l
-2173 3847 m
-2191 3847 l
-2191 3848 l
-2173 3848 l
-2172 3848 m
-2192 3848 l
-2192 3849 l
-2172 3849 l
-2171 3849 m
-2193 3849 l
-2193 3850 l
-2171 3850 l
-2170 3850 m
-2194 3850 l
-2194 3851 l
-2170 3851 l
-2170 3851 m
-2196 3851 l
-2196 3852 l
-2170 3852 l
-2169 3852 m
-2197 3852 l
-2197 3853 l
-2169 3853 l
-2168 3853 m
-2198 3853 l
-2198 3854 l
-2168 3854 l
-2167 3854 m
-2199 3854 l
-2199 3855 l
-2167 3855 l
-2166 3855 m
-2201 3855 l
-2201 3856 l
-2166 3856 l
-2166 3856 m
-2202 3856 l
-2202 3857 l
-2166 3857 l
-2165 3857 m
-2203 3857 l
-2203 3858 l
-2165 3858 l
-2164 3858 m
-2204 3858 l
-2204 3859 l
-2164 3859 l
-2163 3859 m
-2206 3859 l
-2206 3860 l
-2163 3860 l
-2162 3860 m
-2207 3860 l
-2207 3861 l
-2162 3861 l
-2162 3861 m
-2208 3861 l
-2208 3862 l
-2162 3862 l
-2161 3862 m
-2209 3862 l
-2209 3863 l
-2161 3863 l
-2160 3863 m
-2211 3863 l
-2211 3864 l
-2160 3864 l
-2159 3864 m
-2212 3864 l
-2212 3865 l
-2159 3865 l
-2158 3865 m
-2213 3865 l
-2213 3866 l
-2158 3866 l
-2158 3866 m
-2214 3866 l
-2214 3867 l
-2158 3867 l
-2157 3867 m
-2216 3867 l
-2216 3868 l
-2157 3868 l
-2156 3868 m
-2217 3868 l
-2217 3869 l
-2156 3869 l
-2155 3869 m
-2218 3869 l
-2218 3870 l
-2155 3870 l
-2154 3870 m
-2219 3870 l
-2219 3871 l
-2154 3871 l
-2154 3871 m
-2221 3871 l
-2221 3872 l
-2154 3872 l
-2153 3872 m
-2222 3872 l
-2222 3873 l
-2153 3873 l
-2152 3873 m
-2223 3873 l
-2223 3874 l
-2152 3874 l
-2151 3874 m
-2224 3874 l
-2224 3875 l
-2151 3875 l
-2150 3875 m
-2226 3875 l
-2226 3876 l
-2150 3876 l
-2150 3876 m
-2227 3876 l
-2227 3877 l
-2150 3877 l
-2149 3877 m
-2228 3877 l
-2228 3878 l
-2149 3878 l
-2148 3878 m
-2229 3878 l
-2229 3879 l
-2148 3879 l
-2147 3879 m
-2231 3879 l
-2231 3880 l
-2147 3880 l
-2146 3880 m
-2232 3880 l
-2232 3881 l
-2146 3881 l
-2146 3881 m
-2233 3881 l
-2233 3882 l
-2146 3882 l
-2145 3882 m
-2234 3882 l
-2234 3883 l
-2145 3883 l
-2144 3883 m
-2236 3883 l
-2236 3884 l
-2144 3884 l
-2143 3884 m
-2237 3884 l
-2237 3885 l
-2143 3885 l
-2143 3885 m
-2238 3885 l
-2238 3886 l
-2143 3886 l
-2142 3886 m
-2239 3886 l
-2239 3887 l
-2142 3887 l
-2141 3887 m
-2241 3887 l
-2241 3888 l
-2141 3888 l
-2140 3888 m
-2242 3888 l
-2242 3889 l
-2140 3889 l
-2139 3889 m
-2243 3889 l
-2243 3890 l
-2139 3890 l
-2139 3890 m
-2244 3890 l
-2244 3891 l
-2139 3891 l
-2138 3891 m
-2246 3891 l
-2246 3892 l
-2138 3892 l
-2137 3892 m
-2247 3892 l
-2247 3893 l
-2137 3893 l
-2136 3893 m
-2248 3893 l
-2248 3894 l
-2136 3894 l
-2135 3894 m
-2249 3894 l
-2249 3895 l
-2135 3895 l
-2135 3895 m
-2251 3895 l
-2251 3896 l
-2135 3896 l
-2134 3896 m
-2252 3896 l
-2252 3897 l
-2134 3897 l
-2133 3897 m
-2253 3897 l
-2253 3898 l
-2133 3898 l
-2132 3898 m
-2254 3898 l
-2254 3899 l
-2132 3899 l
-2131 3899 m
-2256 3899 l
-2256 3900 l
-2131 3900 l
-2131 3900 m
-2257 3900 l
-2257 3901 l
-2131 3901 l
-2130 3901 m
-2258 3901 l
-2258 3902 l
-2130 3902 l
-2129 3902 m
-2259 3902 l
-2259 3903 l
-2129 3903 l
-2128 3903 m
-2261 3903 l
-2261 3904 l
-2128 3904 l
-2127 3904 m
-2262 3904 l
-2262 3905 l
-2127 3905 l
-2127 3905 m
-2263 3905 l
-2263 3906 l
-2127 3906 l
-2126 3906 m
-2264 3906 l
-2264 3907 l
-2126 3907 l
-2125 3907 m
-2266 3907 l
-2266 3908 l
-2125 3908 l
-2124 3908 m
-2267 3908 l
-2267 3909 l
-2124 3909 l
-2123 3909 m
-2268 3909 l
-2268 3910 l
-2123 3910 l
-2123 3910 m
-2269 3910 l
-2269 3911 l
-2123 3911 l
-2122 3911 m
-2271 3911 l
-2271 3912 l
-2122 3912 l
-2121 3912 m
-2272 3912 l
-2272 3913 l
-2121 3913 l
-2120 3913 m
-2273 3913 l
-2273 3914 l
-2120 3914 l
-2119 3914 m
-2274 3914 l
-2274 3915 l
-2119 3915 l
-2119 3915 m
-2276 3915 l
-2276 3916 l
-2119 3916 l
-2118 3916 m
-2277 3916 l
-2277 3917 l
-2118 3917 l
-2117 3917 m
-2278 3917 l
-2278 3918 l
-2117 3918 l
-2116 3918 m
-2279 3918 l
-2279 3919 l
-2116 3919 l
-2115 3919 m
-2281 3919 l
-2281 3920 l
-2115 3920 l
-2115 3920 m
-2282 3920 l
-2282 3921 l
-2115 3921 l
-2114 3921 m
-2283 3921 l
-2283 3922 l
-2114 3922 l
-2113 3922 m
-2284 3922 l
-2284 3923 l
-2113 3923 l
-2112 3923 m
-2286 3923 l
-2286 3924 l
-2112 3924 l
-2111 3924 m
-2287 3924 l
-2287 3925 l
-2111 3925 l
-2111 3925 m
-2288 3925 l
-2288 3926 l
-2111 3926 l
-2110 3926 m
-2289 3926 l
-2289 3927 l
-2110 3927 l
-2109 3927 m
-2291 3927 l
-2291 3928 l
-2109 3928 l
-2108 3928 m
-2292 3928 l
-2292 3929 l
-2108 3929 l
-2107 3929 m
-2293 3929 l
-2293 3930 l
-2107 3930 l
-2107 3930 m
-2294 3930 l
-2294 3931 l
-2107 3931 l
-2106 3931 m
-2296 3931 l
-2296 3932 l
-2106 3932 l
-2105 3932 m
-2297 3932 l
-2297 3933 l
-2105 3933 l
-2104 3933 m
-2298 3933 l
-2298 3934 l
-2104 3934 l
-2104 3934 m
-2299 3934 l
-2299 3935 l
-2104 3935 l
-2104 3935 m
-2301 3935 l
-2301 3936 l
-2104 3936 l
-2105 3936 m
-2302 3936 l
-2302 3937 l
-2105 3937 l
-2106 3937 m
-2303 3937 l
-2303 3938 l
-2106 3938 l
-2107 3938 m
-2304 3938 l
-2304 3939 l
-2107 3939 l
-2109 3939 m
-2306 3939 l
-2306 3940 l
-2109 3940 l
-2110 3940 m
-2307 3940 l
-2307 3941 l
-2110 3941 l
-2111 3941 m
-2308 3941 l
-2308 3942 l
-2111 3942 l
-2112 3942 m
-2309 3942 l
-2309 3943 l
-2112 3943 l
-2114 3943 m
-2311 3943 l
-2311 3944 l
-2114 3944 l
-2115 3944 m
-2312 3944 l
-2312 3945 l
-2115 3945 l
-2116 3945 m
-2313 3945 l
-2313 3946 l
-2116 3946 l
-2117 3946 m
-2314 3946 l
-2314 3947 l
-2117 3947 l
-2119 3947 m
-2316 3947 l
-2316 3948 l
-2119 3948 l
-2120 3948 m
-2317 3948 l
-2317 3949 l
-2120 3949 l
-2121 3949 m
-2318 3949 l
-2318 3950 l
-2121 3950 l
-2122 3950 m
-2319 3950 l
-2319 3951 l
-2122 3951 l
-2124 3951 m
-2321 3951 l
-2321 3952 l
-2124 3952 l
-2125 3952 m
-2322 3952 l
-2322 3953 l
-2125 3953 l
-2126 3953 m
-2323 3953 l
-2323 3954 l
-2126 3954 l
-2127 3954 m
-2324 3954 l
-2324 3955 l
-2127 3955 l
-2129 3955 m
-2326 3955 l
-2326 3956 l
-2129 3956 l
-2130 3956 m
-2327 3956 l
-2327 3957 l
-2130 3957 l
-2131 3957 m
-2328 3957 l
-2328 3958 l
-2131 3958 l
-2132 3958 m
-2329 3958 l
-2329 3959 l
-2132 3959 l
-2134 3959 m
-2331 3959 l
-2331 3960 l
-2134 3960 l
-2135 3960 m
-2332 3960 l
-2332 3961 l
-2135 3961 l
-2136 3961 m
-2333 3961 l
-2333 3962 l
-2136 3962 l
-2138 3962 m
-2334 3962 l
-2334 3963 l
-2138 3963 l
-2139 3963 m
-2336 3963 l
-2336 3964 l
-2139 3964 l
-2140 3964 m
-2337 3964 l
-2337 3965 l
-2140 3965 l
-2141 3965 m
-2338 3965 l
-2338 3966 l
-2141 3966 l
-2143 3966 m
-2339 3966 l
-2339 3967 l
-2143 3967 l
-2144 3967 m
-2341 3967 l
-2341 3968 l
-2144 3968 l
-2145 3968 m
-2342 3968 l
-2342 3969 l
-2145 3969 l
-2146 3969 m
-2343 3969 l
-2343 3970 l
-2146 3970 l
-2148 3970 m
-2344 3970 l
-2344 3971 l
-2148 3971 l
-2149 3971 m
-2346 3971 l
-2346 3972 l
-2149 3972 l
-2150 3972 m
-2347 3972 l
-2347 3973 l
-2150 3973 l
-2151 3973 m
-2348 3973 l
-2348 3974 l
-2151 3974 l
-2153 3974 m
-2349 3974 l
-2349 3975 l
-2153 3975 l
-2154 3975 m
-2351 3975 l
-2351 3976 l
-2154 3976 l
-2155 3976 m
-2352 3976 l
-2352 3977 l
-2155 3977 l
-2156 3977 m
-2353 3977 l
-2353 3978 l
-2156 3978 l
-2158 3978 m
-2354 3978 l
-2354 3979 l
-2158 3979 l
-2159 3979 m
-2356 3979 l
-2356 3980 l
-2159 3980 l
-2160 3980 m
-2357 3980 l
-2357 3981 l
-2160 3981 l
-2161 3981 m
-2358 3981 l
-2358 3982 l
-2161 3982 l
-2163 3982 m
-2359 3982 l
-2359 3983 l
-2163 3983 l
-2164 3983 m
-2361 3983 l
-2361 3984 l
-2164 3984 l
-2165 3984 m
-2362 3984 l
-2362 3985 l
-2165 3985 l
-2166 3985 m
-2363 3985 l
-2363 3986 l
-2166 3986 l
-2168 3986 m
-2364 3986 l
-2364 3987 l
-2168 3987 l
-2169 3987 m
-2366 3987 l
-2366 3988 l
-2169 3988 l
-2170 3988 m
-2367 3988 l
-2367 3989 l
-2170 3989 l
-2172 3989 m
-2368 3989 l
-2368 3990 l
-2172 3990 l
-2173 3990 m
-2369 3990 l
-2369 3991 l
-2173 3991 l
-2174 3991 m
-2371 3991 l
-2371 3992 l
-2174 3992 l
-2175 3992 m
-2372 3992 l
-2372 3993 l
-2175 3993 l
-2177 3993 m
-2373 3993 l
-2373 3994 l
-2177 3994 l
-2178 3994 m
-2374 3994 l
-2374 3995 l
-2178 3995 l
-2179 3995 m
-2376 3995 l
-2376 3996 l
-2179 3996 l
-2180 3996 m
-2377 3996 l
-2377 3997 l
-2180 3997 l
-2182 3997 m
-2378 3997 l
-2378 3998 l
-2182 3998 l
-2183 3998 m
-2379 3998 l
-2379 3999 l
-2183 3999 l
-2184 3999 m
-2379 3999 l
-2379 4000 l
-2184 4000 l
-2185 4000 m
-2379 4000 l
-2379 4001 l
-2185 4001 l
-2187 4001 m
-2378 4001 l
-2378 4002 l
-2187 4002 l
-2188 4002 m
-2377 4002 l
-2377 4003 l
-2188 4003 l
-2189 4003 m
-2376 4003 l
-2376 4004 l
-2189 4004 l
-2190 4004 m
-2375 4004 l
-2375 4005 l
-2190 4005 l
-2192 4005 m
-2375 4005 l
-2375 4006 l
-2192 4006 l
-2193 4006 m
-2374 4006 l
-2374 4007 l
-2193 4007 l
-2194 4007 m
-2373 4007 l
-2373 4008 l
-2194 4008 l
-2195 4008 m
-2372 4008 l
-2372 4009 l
-2195 4009 l
-2197 4009 m
-2371 4009 l
-2371 4010 l
-2197 4010 l
-2198 4010 m
-2371 4010 l
-2371 4011 l
-2198 4011 l
-2199 4011 m
-2370 4011 l
-2370 4012 l
-2199 4012 l
-2200 4012 m
-2369 4012 l
-2369 4013 l
-2200 4013 l
-2202 4013 m
-2368 4013 l
-2368 4014 l
-2202 4014 l
-2203 4014 m
-2367 4014 l
-2367 4015 l
-2203 4015 l
-2204 4015 m
-2367 4015 l
-2367 4016 l
-2204 4016 l
-2206 4016 m
-2366 4016 l
-2366 4017 l
-2206 4017 l
-2207 4017 m
-2365 4017 l
-2365 4018 l
-2207 4018 l
-2208 4018 m
-2364 4018 l
-2364 4019 l
-2208 4019 l
-2209 4019 m
-2363 4019 l
-2363 4020 l
-2209 4020 l
-2211 4020 m
-2363 4020 l
-2363 4021 l
-2211 4021 l
-2212 4021 m
-2362 4021 l
-2362 4022 l
-2212 4022 l
-2213 4022 m
-2361 4022 l
-2361 4023 l
-2213 4023 l
-2214 4023 m
-2360 4023 l
-2360 4024 l
-2214 4024 l
-2216 4024 m
-2359 4024 l
-2359 4025 l
-2216 4025 l
-2217 4025 m
-2358 4025 l
-2358 4026 l
-2217 4026 l
-2218 4026 m
-2358 4026 l
-2358 4027 l
-2218 4027 l
-2219 4027 m
-2357 4027 l
-2357 4028 l
-2219 4028 l
-2221 4028 m
-2356 4028 l
-2356 4029 l
-2221 4029 l
-2222 4029 m
-2355 4029 l
-2355 4030 l
-2222 4030 l
-2223 4030 m
-2354 4030 l
-2354 4031 l
-2223 4031 l
-2224 4031 m
-2354 4031 l
-2354 4032 l
-2224 4032 l
-2226 4032 m
-2353 4032 l
-2353 4033 l
-2226 4033 l
-2227 4033 m
-2352 4033 l
-2352 4034 l
-2227 4034 l
-2228 4034 m
-2351 4034 l
-2351 4035 l
-2228 4035 l
-2229 4035 m
-2350 4035 l
-2350 4036 l
-2229 4036 l
-2231 4036 m
-2350 4036 l
-2350 4037 l
-2231 4037 l
-2232 4037 m
-2349 4037 l
-2349 4038 l
-2232 4038 l
-2233 4038 m
-2348 4038 l
-2348 4039 l
-2233 4039 l
-2234 4039 m
-2347 4039 l
-2347 4040 l
-2234 4040 l
-2236 4040 m
-2346 4040 l
-2346 4041 l
-2236 4041 l
-2237 4041 m
-2346 4041 l
-2346 4042 l
-2237 4042 l
-2238 4042 m
-2345 4042 l
-2345 4043 l
-2238 4043 l
-2240 4043 m
-2344 4043 l
-2344 4044 l
-2240 4044 l
-2241 4044 m
-2343 4044 l
-2343 4045 l
-2241 4045 l
-2242 4045 m
-2342 4045 l
-2342 4046 l
-2242 4046 l
-2243 4046 m
-2341 4046 l
-2341 4047 l
-2243 4047 l
-2245 4047 m
-2341 4047 l
-2341 4048 l
-2245 4048 l
-2246 4048 m
-2340 4048 l
-2340 4049 l
-2246 4049 l
-2247 4049 m
-2339 4049 l
-2339 4050 l
-2247 4050 l
-2248 4050 m
-2338 4050 l
-2338 4051 l
-2248 4051 l
-2250 4051 m
-2337 4051 l
-2337 4052 l
-2250 4052 l
-2251 4052 m
-2337 4052 l
-2337 4053 l
-2251 4053 l
-2252 4053 m
-2336 4053 l
-2336 4054 l
-2252 4054 l
-2253 4054 m
-2335 4054 l
-2335 4055 l
-2253 4055 l
-2255 4055 m
-2334 4055 l
-2334 4056 l
-2255 4056 l
-2256 4056 m
-2333 4056 l
-2333 4057 l
-2256 4057 l
-2257 4057 m
-2333 4057 l
-2333 4058 l
-2257 4058 l
-2258 4058 m
-2332 4058 l
-2332 4059 l
-2258 4059 l
-2260 4059 m
-2331 4059 l
-2331 4060 l
-2260 4060 l
-2261 4060 m
-2330 4060 l
-2330 4061 l
-2261 4061 l
-2262 4061 m
-2329 4061 l
-2329 4062 l
-2262 4062 l
-2263 4062 m
-2329 4062 l
-2329 4063 l
-2263 4063 l
-2265 4063 m
-2328 4063 l
-2328 4064 l
-2265 4064 l
-2266 4064 m
-2327 4064 l
-2327 4065 l
-2266 4065 l
-2267 4065 m
-2326 4065 l
-2326 4066 l
-2267 4066 l
-2268 4066 m
-2325 4066 l
-2325 4067 l
-2268 4067 l
-2270 4067 m
-2325 4067 l
-2325 4068 l
-2270 4068 l
-2271 4068 m
-2324 4068 l
-2324 4069 l
-2271 4069 l
-2272 4069 m
-2323 4069 l
-2323 4070 l
-2272 4070 l
-2274 4070 m
-2322 4070 l
-2322 4071 l
-2274 4071 l
-2275 4071 m
-2321 4071 l
-2321 4072 l
-2275 4072 l
-2276 4072 m
-2320 4072 l
-2320 4073 l
-2276 4073 l
-2277 4073 m
-2320 4073 l
-2320 4074 l
-2277 4074 l
-2279 4074 m
-2319 4074 l
-2319 4075 l
-2279 4075 l
-2280 4075 m
-2318 4075 l
-2318 4076 l
-2280 4076 l
-2281 4076 m
-2317 4076 l
-2317 4077 l
-2281 4077 l
-2282 4077 m
-2316 4077 l
-2316 4078 l
-2282 4078 l
-2284 4078 m
-2316 4078 l
-2316 4079 l
-2284 4079 l
-2285 4079 m
-2315 4079 l
-2315 4080 l
-2285 4080 l
-2286 4080 m
-2314 4080 l
-2314 4081 l
-2286 4081 l
-2287 4081 m
-2313 4081 l
-2313 4082 l
-2287 4082 l
-2289 4082 m
-2312 4082 l
-2312 4083 l
-2289 4083 l
-2290 4083 m
-2312 4083 l
-2312 4084 l
-2290 4084 l
-2291 4084 m
-2311 4084 l
-2311 4085 l
-2291 4085 l
-2292 4085 m
-2310 4085 l
-2310 4086 l
-2292 4086 l
-2294 4086 m
-2309 4086 l
-2309 4087 l
-2294 4087 l
-2295 4087 m
-2308 4087 l
-2308 4088 l
-2295 4088 l
-2296 4088 m
-2308 4088 l
-2308 4089 l
-2296 4089 l
-2297 4089 m
-2307 4089 l
-2307 4090 l
-2297 4090 l
-2299 4090 m
-2306 4090 l
-2306 4091 l
-2299 4091 l
-2300 4091 m
-2305 4091 l
-2305 4092 l
-2300 4092 l
-2301 4092 m
-2304 4092 l
-2304 4093 l
-2301 4093 l
-Y
-2179.8 3839.8 m
-2104 3935 l
-2303 4093 l
-2379 3999 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2141 3921 m
-2145 3930 l
-2147 3947 l
-2202 3879 l
-S
-2203 3965 m
-2200 3968 l
-2198 3977 l
-2199 3983 l
-2203 3992 l
-2216 4002 l
-2225 4004 l
-2231 4003 l
-2239 4000 l
-2245 3993 l
-2247 3984 l
-2248 3969 l
-2241 3910 l
-2287 3947 l
-S
-2271 4046 m
-2264 4035 l
-2266 4020 l
-2275 4001 l
-2283 3992 l
-2299 3978 l
-2314 3973 l
-2326 3978 l
-2333 3983 l
-2340 3994 l
-2339 4009 l
-2329 4028 l
-2321 4038 l
-2305 4052 l
-2290 4056 l
-2278 4052 l
-2271 4046 l
-S
-1 g
-2789 4191 m
-2795 4191 l
-2795 4192 l
-2789 4192 l
-2789 4192 m
-2799 4192 l
-2799 4193 l
-2789 4193 l
-2789 4193 m
-2802 4193 l
-2802 4194 l
-2789 4194 l
-2789 4194 m
-2806 4194 l
-2806 4195 l
-2789 4195 l
-2788 4195 m
-2810 4195 l
-2810 4196 l
-2788 4196 l
-2788 4196 m
-2814 4196 l
-2814 4197 l
-2788 4197 l
-2788 4197 m
-2817 4197 l
-2817 4198 l
-2788 4198 l
-2788 4198 m
-2821 4198 l
-2821 4199 l
-2788 4199 l
-2787 4199 m
-2825 4199 l
-2825 4200 l
-2787 4200 l
-2787 4200 m
-2829 4200 l
-2829 4201 l
-2787 4201 l
-2787 4201 m
-2833 4201 l
-2833 4202 l
-2787 4202 l
-2786 4202 m
-2836 4202 l
-2836 4203 l
-2786 4203 l
-2786 4203 m
-2840 4203 l
-2840 4204 l
-2786 4204 l
-2786 4204 m
-2844 4204 l
-2844 4205 l
-2786 4205 l
-2786 4205 m
-2848 4205 l
-2848 4206 l
-2786 4206 l
-2785 4206 m
-2851 4206 l
-2851 4207 l
-2785 4207 l
-2785 4207 m
-2855 4207 l
-2855 4208 l
-2785 4208 l
-2785 4208 m
-2859 4208 l
-2859 4209 l
-2785 4209 l
-2785 4209 m
-2863 4209 l
-2863 4210 l
-2785 4210 l
-2784 4210 m
-2866 4210 l
-2866 4211 l
-2784 4211 l
-2784 4211 m
-2870 4211 l
-2870 4212 l
-2784 4212 l
-2784 4212 m
-2874 4212 l
-2874 4213 l
-2784 4213 l
-2784 4213 m
-2878 4213 l
-2878 4214 l
-2784 4214 l
-2783 4214 m
-2882 4214 l
-2882 4215 l
-2783 4215 l
-2783 4215 m
-2885 4215 l
-2885 4216 l
-2783 4216 l
-2783 4216 m
-2889 4216 l
-2889 4217 l
-2783 4217 l
-2782 4217 m
-2893 4217 l
-2893 4218 l
-2782 4218 l
-2782 4218 m
-2897 4218 l
-2897 4219 l
-2782 4219 l
-2782 4219 m
-2900 4219 l
-2900 4220 l
-2782 4220 l
-2782 4220 m
-2904 4220 l
-2904 4221 l
-2782 4221 l
-2781 4221 m
-2908 4221 l
-2908 4222 l
-2781 4222 l
-2781 4222 m
-2912 4222 l
-2912 4223 l
-2781 4223 l
-2781 4223 m
-2915 4223 l
-2915 4224 l
-2781 4224 l
-2781 4224 m
-2919 4224 l
-2919 4225 l
-2781 4225 l
-2780 4225 m
-2923 4225 l
-2923 4226 l
-2780 4226 l
-2780 4226 m
-2927 4226 l
-2927 4227 l
-2780 4227 l
-2780 4227 m
-2931 4227 l
-2931 4228 l
-2780 4228 l
-2780 4228 m
-2934 4228 l
-2934 4229 l
-2780 4229 l
-2779 4229 m
-2938 4229 l
-2938 4230 l
-2779 4230 l
-2779 4230 m
-2942 4230 l
-2942 4231 l
-2779 4231 l
-2779 4231 m
-2946 4231 l
-2946 4232 l
-2779 4232 l
-2778 4232 m
-2949 4232 l
-2949 4233 l
-2778 4233 l
-2778 4233 m
-2953 4233 l
-2953 4234 l
-2778 4234 l
-2778 4234 m
-2957 4234 l
-2957 4235 l
-2778 4235 l
-2778 4235 m
-2961 4235 l
-2961 4236 l
-2778 4236 l
-2777 4236 m
-2964 4236 l
-2964 4237 l
-2777 4237 l
-2777 4237 m
-2964 4237 l
-2964 4240 l
-2777 4240 l
-2776 4240 m
-2964 4240 l
-2964 4241 l
-2776 4241 l
-2776 4241 m
-2963 4241 l
-2963 4244 l
-2776 4244 l
-2775 4244 m
-2963 4244 l
-2963 4245 l
-2775 4245 l
-2775 4245 m
-2962 4245 l
-2962 4247 l
-2775 4247 l
-2774 4247 m
-2962 4247 l
-2962 4249 l
-2774 4249 l
-2774 4249 m
-2961 4249 l
-2961 4251 l
-2774 4251 l
-2773 4251 m
-2961 4251 l
-2961 4253 l
-2773 4253 l
-2773 4253 m
-2960 4253 l
-2960 4255 l
-2773 4255 l
-2772 4255 m
-2960 4255 l
-2960 4256 l
-2772 4256 l
-2772 4256 m
-2959 4256 l
-2959 4259 l
-2772 4259 l
-2771 4259 m
-2959 4259 l
-2959 4260 l
-2771 4260 l
-2771 4260 m
-2958 4260 l
-2958 4262 l
-2771 4262 l
-2770 4262 m
-2958 4262 l
-2958 4264 l
-2770 4264 l
-2770 4264 m
-2957 4264 l
-2957 4266 l
-2770 4266 l
-2769 4266 m
-2957 4266 l
-2957 4268 l
-2769 4268 l
-2769 4268 m
-2956 4268 l
-2956 4270 l
-2769 4270 l
-2768 4270 m
-2956 4270 l
-2956 4271 l
-2768 4271 l
-2768 4271 m
-2955 4271 l
-2955 4274 l
-2768 4274 l
-2767 4274 m
-2955 4274 l
-2955 4275 l
-2767 4275 l
-2767 4275 m
-2954 4275 l
-2954 4277 l
-2767 4277 l
-2766 4277 m
-2954 4277 l
-2954 4279 l
-2766 4279 l
-2766 4279 m
-2953 4279 l
-2953 4281 l
-2766 4281 l
-2765 4281 m
-2953 4281 l
-2953 4283 l
-2765 4283 l
-2765 4283 m
-2952 4283 l
-2952 4285 l
-2765 4285 l
-2764 4285 m
-2952 4285 l
-2952 4287 l
-2764 4287 l
-2764 4287 m
-2951 4287 l
-2951 4289 l
-2764 4289 l
-2763 4289 m
-2951 4289 l
-2951 4290 l
-2763 4290 l
-2763 4290 m
-2950 4290 l
-2950 4292 l
-2763 4292 l
-2762 4292 m
-2950 4292 l
-2950 4294 l
-2762 4294 l
-2762 4294 m
-2949 4294 l
-2949 4296 l
-2762 4296 l
-2761 4296 m
-2949 4296 l
-2949 4298 l
-2761 4298 l
-2761 4298 m
-2948 4298 l
-2948 4300 l
-2761 4300 l
-2760 4300 m
-2948 4300 l
-2948 4302 l
-2760 4302 l
-2760 4302 m
-2947 4302 l
-2947 4304 l
-2760 4304 l
-2759 4304 m
-2947 4304 l
-2947 4305 l
-2759 4305 l
-2759 4305 m
-2946 4305 l
-2946 4307 l
-2759 4307 l
-2759 4307 m
-2946 4307 l
-2946 4308 l
-2759 4308 l
-2759 4308 m
-2946 4308 l
-2946 4309 l
-2759 4309 l
-2762 4309 m
-2945 4309 l
-2945 4310 l
-2762 4310 l
-2766 4310 m
-2945 4310 l
-2945 4311 l
-2766 4311 l
-2770 4311 m
-2945 4311 l
-2945 4312 l
-2770 4312 l
-2774 4312 m
-2945 4312 l
-2945 4313 l
-2774 4313 l
-2777 4313 m
-2944 4313 l
-2944 4314 l
-2777 4314 l
-2781 4314 m
-2944 4314 l
-2944 4315 l
-2781 4315 l
-2785 4315 m
-2944 4315 l
-2944 4316 l
-2785 4316 l
-2789 4316 m
-2944 4316 l
-2944 4317 l
-2789 4317 l
-2793 4317 m
-2943 4317 l
-2943 4318 l
-2793 4318 l
-2796 4318 m
-2943 4318 l
-2943 4319 l
-2796 4319 l
-2800 4319 m
-2943 4319 l
-2943 4320 l
-2800 4320 l
-2804 4320 m
-2943 4320 l
-2943 4321 l
-2804 4321 l
-2808 4321 m
-2942 4321 l
-2942 4322 l
-2808 4322 l
-2811 4322 m
-2942 4322 l
-2942 4323 l
-2811 4323 l
-2815 4323 m
-2942 4323 l
-2942 4324 l
-2815 4324 l
-2819 4324 m
-2941 4324 l
-2941 4325 l
-2819 4325 l
-2823 4325 m
-2941 4325 l
-2941 4326 l
-2823 4326 l
-2827 4326 m
-2941 4326 l
-2941 4327 l
-2827 4327 l
-2830 4327 m
-2941 4327 l
-2941 4328 l
-2830 4328 l
-2834 4328 m
-2940 4328 l
-2940 4329 l
-2834 4329 l
-2838 4329 m
-2940 4329 l
-2940 4330 l
-2838 4330 l
-2842 4330 m
-2940 4330 l
-2940 4331 l
-2842 4331 l
-2846 4331 m
-2940 4331 l
-2940 4332 l
-2846 4332 l
-2849 4332 m
-2939 4332 l
-2939 4333 l
-2849 4333 l
-2853 4333 m
-2939 4333 l
-2939 4334 l
-2853 4334 l
-2857 4334 m
-2939 4334 l
-2939 4335 l
-2857 4335 l
-2861 4335 m
-2939 4335 l
-2939 4336 l
-2861 4336 l
-2864 4336 m
-2938 4336 l
-2938 4337 l
-2864 4337 l
-2868 4337 m
-2938 4337 l
-2938 4338 l
-2868 4338 l
-2872 4338 m
-2938 4338 l
-2938 4339 l
-2872 4339 l
-2876 4339 m
-2937 4339 l
-2937 4340 l
-2876 4340 l
-2880 4340 m
-2937 4340 l
-2937 4341 l
-2880 4341 l
-2883 4341 m
-2937 4341 l
-2937 4342 l
-2883 4342 l
-2887 4342 m
-2937 4342 l
-2937 4343 l
-2887 4343 l
-2891 4343 m
-2936 4343 l
-2936 4344 l
-2891 4344 l
-2895 4344 m
-2936 4344 l
-2936 4345 l
-2895 4345 l
-2898 4345 m
-2936 4345 l
-2936 4346 l
-2898 4346 l
-2902 4346 m
-2936 4346 l
-2936 4347 l
-2902 4347 l
-2906 4347 m
-2935 4347 l
-2935 4348 l
-2906 4348 l
-2910 4348 m
-2935 4348 l
-2935 4349 l
-2910 4349 l
-2914 4349 m
-2935 4349 l
-2935 4350 l
-2914 4350 l
-2917 4350 m
-2935 4350 l
-2935 4351 l
-2917 4351 l
-2921 4351 m
-2934 4351 l
-2934 4352 l
-2921 4352 l
-2925 4352 m
-2934 4352 l
-2934 4353 l
-2925 4353 l
-2929 4353 m
-2934 4353 l
-2934 4354 l
-2929 4354 l
-Y
-2790.2 4190.9 m
-2759 4308 l
-2933 4354 l
-2964 4237 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2836 4298 m
-2829 4305 l
-2816 4306 l
-2808 4304 l
-2797 4296 l
-2792 4282 l
-2793 4261 l
-2799 4241 l
-2807 4226 l
-2817 4220 l
-2830 4219 l
-2834 4220 l
-2845 4227 l
-2851 4237 l
-2852 4250 l
-2851 4254 l
-2844 4266 l
-2834 4272 l
-2821 4272 l
-2817 4271 l
-2806 4264 l
-2800 4254 l
-2799 4241 l
-S
-2885 4324 m
-2874 4317 l
-2869 4302 l
-2870 4281 l
-2873 4269 l
-2883 4250 l
-2894 4240 l
-2907 4239 l
-2915 4241 l
-2926 4248 l
-2931 4263 l
-2930 4284 l
-2927 4296 l
-2917 4315 l
-2906 4325 l
-2893 4326 l
-2885 4324 l
-S
-1 g
-3525 4216 m
-3529 4216 l
-3529 4217 l
-3525 4217 l
-3522 4217 m
-3529 4217 l
-3529 4218 l
-3522 4218 l
-3519 4218 m
-3530 4218 l
-3530 4219 l
-3519 4219 l
-3516 4219 m
-3530 4219 l
-3530 4220 l
-3516 4220 l
-3513 4220 m
-3530 4220 l
-3530 4221 l
-3513 4221 l
-3510 4221 m
-3531 4221 l
-3531 4222 l
-3510 4222 l
-3507 4222 m
-3531 4222 l
-3531 4223 l
-3507 4223 l
-3504 4223 m
-3531 4223 l
-3531 4224 l
-3504 4224 l
-3502 4224 m
-3532 4224 l
-3532 4225 l
-3502 4225 l
-3499 4225 m
-3532 4225 l
-3532 4226 l
-3499 4226 l
-3496 4226 m
-3532 4226 l
-3532 4227 l
-3496 4227 l
-3493 4227 m
-3533 4227 l
-3533 4228 l
-3493 4228 l
-3490 4228 m
-3533 4228 l
-3533 4229 l
-3490 4229 l
-3487 4229 m
-3533 4229 l
-3533 4230 l
-3487 4230 l
-3484 4230 m
-3534 4230 l
-3534 4231 l
-3484 4231 l
-3481 4231 m
-3534 4231 l
-3534 4232 l
-3481 4232 l
-3479 4232 m
-3534 4232 l
-3534 4233 l
-3479 4233 l
-3476 4233 m
-3535 4233 l
-3535 4234 l
-3476 4234 l
-3473 4234 m
-3535 4234 l
-3535 4235 l
-3473 4235 l
-3470 4235 m
-3536 4235 l
-3536 4236 l
-3470 4236 l
-3467 4236 m
-3536 4236 l
-3536 4237 l
-3467 4237 l
-3464 4237 m
-3536 4237 l
-3536 4238 l
-3464 4238 l
-3461 4238 m
-3537 4238 l
-3537 4239 l
-3461 4239 l
-3458 4239 m
-3537 4239 l
-3537 4240 l
-3458 4240 l
-3456 4240 m
-3537 4240 l
-3537 4241 l
-3456 4241 l
-3453 4241 m
-3538 4241 l
-3538 4242 l
-3453 4242 l
-3450 4242 m
-3538 4242 l
-3538 4243 l
-3450 4243 l
-3447 4243 m
-3538 4243 l
-3538 4244 l
-3447 4244 l
-3444 4244 m
-3539 4244 l
-3539 4245 l
-3444 4245 l
-3441 4245 m
-3539 4245 l
-3539 4246 l
-3441 4246 l
-3438 4246 m
-3539 4246 l
-3539 4247 l
-3438 4247 l
-3435 4247 m
-3540 4247 l
-3540 4248 l
-3435 4248 l
-3433 4248 m
-3540 4248 l
-3540 4249 l
-3433 4249 l
-3433 4249 m
-3540 4249 l
-3540 4250 l
-3433 4250 l
-3433 4250 m
-3541 4250 l
-3541 4252 l
-3433 4252 l
-3434 4252 m
-3541 4252 l
-3541 4253 l
-3434 4253 l
-3434 4253 m
-3542 4253 l
-3542 4255 l
-3434 4255 l
-3435 4255 m
-3543 4255 l
-3543 4258 l
-3435 4258 l
-3436 4258 m
-3544 4258 l
-3544 4261 l
-3436 4261 l
-3437 4261 m
-3545 4261 l
-3545 4264 l
-3437 4264 l
-3438 4264 m
-3546 4264 l
-3546 4267 l
-3438 4267 l
-3439 4267 m
-3547 4267 l
-3547 4269 l
-3439 4269 l
-3440 4269 m
-3547 4269 l
-3547 4270 l
-3440 4270 l
-3440 4270 m
-3548 4270 l
-3548 4272 l
-3440 4272 l
-3441 4272 m
-3548 4272 l
-3548 4273 l
-3441 4273 l
-3441 4273 m
-3549 4273 l
-3549 4275 l
-3441 4275 l
-3442 4275 m
-3550 4275 l
-3550 4278 l
-3442 4278 l
-3443 4278 m
-3551 4278 l
-3551 4281 l
-3443 4281 l
-3444 4281 m
-3552 4281 l
-3552 4284 l
-3444 4284 l
-3445 4284 m
-3553 4284 l
-3553 4287 l
-3445 4287 l
-3446 4287 m
-3554 4287 l
-3554 4289 l
-3446 4289 l
-3447 4289 m
-3554 4289 l
-3554 4290 l
-3447 4290 l
-3447 4290 m
-3555 4290 l
-3555 4292 l
-3447 4292 l
-3448 4292 m
-3555 4292 l
-3555 4293 l
-3448 4293 l
-3448 4293 m
-3556 4293 l
-3556 4295 l
-3448 4295 l
-3449 4295 m
-3557 4295 l
-3557 4298 l
-3449 4298 l
-3450 4298 m
-3558 4298 l
-3558 4301 l
-3450 4301 l
-3451 4301 m
-3559 4301 l
-3559 4304 l
-3451 4304 l
-3452 4304 m
-3560 4304 l
-3560 4306 l
-3452 4306 l
-3453 4306 m
-3560 4306 l
-3560 4307 l
-3453 4307 l
-3453 4307 m
-3561 4307 l
-3561 4309 l
-3453 4309 l
-3454 4309 m
-3561 4309 l
-3561 4310 l
-3454 4310 l
-3454 4310 m
-3562 4310 l
-3562 4312 l
-3454 4312 l
-3455 4312 m
-3563 4312 l
-3563 4315 l
-3455 4315 l
-3456 4315 m
-3564 4315 l
-3564 4318 l
-3456 4318 l
-3457 4318 m
-3565 4318 l
-3565 4321 l
-3457 4321 l
-3458 4321 m
-3566 4321 l
-3566 4324 l
-3458 4324 l
-3459 4324 m
-3567 4324 l
-3567 4326 l
-3459 4326 l
-3460 4326 m
-3567 4326 l
-3567 4327 l
-3460 4327 l
-3460 4327 m
-3568 4327 l
-3568 4329 l
-3460 4329 l
-3461 4329 m
-3568 4329 l
-3568 4330 l
-3461 4330 l
-3461 4330 m
-3569 4330 l
-3569 4331 l
-3461 4331 l
-3461 4331 m
-3566 4331 l
-3566 4332 l
-3461 4332 l
-3462 4332 m
-3563 4332 l
-3563 4333 l
-3462 4333 l
-3462 4333 m
-3560 4333 l
-3560 4334 l
-3462 4334 l
-3462 4334 m
-3557 4334 l
-3557 4335 l
-3462 4335 l
-3463 4335 m
-3554 4335 l
-3554 4336 l
-3463 4336 l
-3463 4336 m
-3551 4336 l
-3551 4337 l
-3463 4337 l
-3463 4337 m
-3549 4337 l
-3549 4338 l
-3463 4338 l
-3464 4338 m
-3546 4338 l
-3546 4339 l
-3464 4339 l
-3464 4339 m
-3543 4339 l
-3543 4340 l
-3464 4340 l
-3464 4340 m
-3540 4340 l
-3540 4341 l
-3464 4341 l
-3465 4341 m
-3537 4341 l
-3537 4342 l
-3465 4342 l
-3465 4342 m
-3534 4342 l
-3534 4343 l
-3465 4343 l
-3465 4343 m
-3531 4343 l
-3531 4344 l
-3465 4344 l
-3466 4344 m
-3528 4344 l
-3528 4345 l
-3466 4345 l
-3466 4345 m
-3525 4345 l
-3525 4346 l
-3466 4346 l
-3467 4346 m
-3523 4346 l
-3523 4347 l
-3467 4347 l
-3467 4347 m
-3520 4347 l
-3520 4348 l
-3467 4348 l
-3467 4348 m
-3517 4348 l
-3517 4349 l
-3467 4349 l
-3468 4349 m
-3514 4349 l
-3514 4350 l
-3468 4350 l
-3468 4350 m
-3511 4350 l
-3511 4351 l
-3468 4351 l
-3468 4351 m
-3508 4351 l
-3508 4352 l
-3468 4352 l
-3469 4352 m
-3505 4352 l
-3505 4353 l
-3469 4353 l
-3469 4353 m
-3502 4353 l
-3502 4354 l
-3469 4354 l
-3469 4354 m
-3499 4354 l
-3499 4355 l
-3469 4355 l
-3470 4355 m
-3497 4355 l
-3497 4356 l
-3470 4356 l
-3470 4356 m
-3494 4356 l
-3494 4357 l
-3470 4357 l
-3470 4357 m
-3491 4357 l
-3491 4358 l
-3470 4358 l
-3471 4358 m
-3488 4358 l
-3488 4359 l
-3471 4359 l
-3471 4359 m
-3485 4359 l
-3485 4360 l
-3471 4360 l
-3471 4360 m
-3482 4360 l
-3482 4361 l
-3471 4361 l
-3472 4361 m
-3479 4361 l
-3479 4362 l
-3472 4362 l
-3472 4362 m
-3476 4362 l
-3476 4363 l
-3472 4363 l
-Y
-3568 4330.1 m
-3528 4216 l
-3433 4249 l
-3473 4363 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3490 4247 m
-3503 4246 l
-3515 4256 l
-3526 4274 l
-3530 4286 l
-3533 4307 l
-3530 4321 l
-3519 4329 l
-3511 4332 l
-3498 4332 l
-3486 4323 l
-3475 4305 l
-3471 4293 l
-3468 4272 l
-3472 4257 l
-3482 4249 l
-3490 4247 l
-S
-1 g
-2845 3271 m
-2847 3271 l
-2847 3272 l
-2845 3272 l
-2845 3272 m
-2849 3272 l
-2849 3273 l
-2845 3273 l
-2844 3273 m
-2851 3273 l
-2851 3274 l
-2844 3274 l
-2843 3274 m
-2853 3274 l
-2853 3275 l
-2843 3275 l
-2843 3275 m
-2855 3275 l
-2855 3276 l
-2843 3276 l
-2842 3276 m
-2856 3276 l
-2856 3277 l
-2842 3277 l
-2842 3277 m
-2858 3277 l
-2858 3278 l
-2842 3278 l
-2841 3278 m
-2860 3278 l
-2860 3279 l
-2841 3279 l
-2841 3279 m
-2862 3279 l
-2862 3280 l
-2841 3280 l
-2840 3280 m
-2864 3280 l
-2864 3281 l
-2840 3281 l
-2840 3281 m
-2865 3281 l
-2865 3282 l
-2840 3282 l
-2839 3282 m
-2867 3282 l
-2867 3283 l
-2839 3283 l
-2838 3283 m
-2869 3283 l
-2869 3284 l
-2838 3284 l
-2838 3284 m
-2871 3284 l
-2871 3285 l
-2838 3285 l
-2837 3285 m
-2873 3285 l
-2873 3286 l
-2837 3286 l
-2837 3286 m
-2874 3286 l
-2874 3287 l
-2837 3287 l
-2836 3287 m
-2876 3287 l
-2876 3288 l
-2836 3288 l
-2836 3288 m
-2878 3288 l
-2878 3289 l
-2836 3289 l
-2835 3289 m
-2880 3289 l
-2880 3290 l
-2835 3290 l
-2835 3290 m
-2882 3290 l
-2882 3291 l
-2835 3291 l
-2834 3291 m
-2883 3291 l
-2883 3292 l
-2834 3292 l
-2834 3292 m
-2885 3292 l
-2885 3293 l
-2834 3293 l
-2833 3293 m
-2887 3293 l
-2887 3294 l
-2833 3294 l
-2832 3294 m
-2889 3294 l
-2889 3295 l
-2832 3295 l
-2832 3295 m
-2891 3295 l
-2891 3296 l
-2832 3296 l
-2831 3296 m
-2892 3296 l
-2892 3297 l
-2831 3297 l
-2831 3297 m
-2894 3297 l
-2894 3298 l
-2831 3298 l
-2830 3298 m
-2896 3298 l
-2896 3299 l
-2830 3299 l
-2830 3299 m
-2898 3299 l
-2898 3300 l
-2830 3300 l
-2829 3300 m
-2900 3300 l
-2900 3301 l
-2829 3301 l
-2829 3301 m
-2902 3301 l
-2902 3302 l
-2829 3302 l
-2828 3302 m
-2903 3302 l
-2903 3303 l
-2828 3303 l
-2827 3303 m
-2905 3303 l
-2905 3304 l
-2827 3304 l
-2827 3304 m
-2907 3304 l
-2907 3305 l
-2827 3305 l
-2826 3305 m
-2909 3305 l
-2909 3306 l
-2826 3306 l
-2826 3306 m
-2911 3306 l
-2911 3307 l
-2826 3307 l
-2825 3307 m
-2912 3307 l
-2912 3308 l
-2825 3308 l
-2825 3308 m
-2914 3308 l
-2914 3309 l
-2825 3309 l
-2824 3309 m
-2916 3309 l
-2916 3310 l
-2824 3310 l
-2824 3310 m
-2918 3310 l
-2918 3311 l
-2824 3311 l
-2823 3311 m
-2920 3311 l
-2920 3312 l
-2823 3312 l
-2822 3312 m
-2921 3312 l
-2921 3313 l
-2822 3313 l
-2822 3313 m
-2923 3313 l
-2923 3314 l
-2822 3314 l
-2821 3314 m
-2925 3314 l
-2925 3315 l
-2821 3315 l
-2821 3315 m
-2927 3315 l
-2927 3316 l
-2821 3316 l
-2820 3316 m
-2929 3316 l
-2929 3317 l
-2820 3317 l
-2820 3317 m
-2930 3317 l
-2930 3318 l
-2820 3318 l
-2819 3318 m
-2932 3318 l
-2932 3319 l
-2819 3319 l
-2819 3319 m
-2934 3319 l
-2934 3320 l
-2819 3320 l
-2818 3320 m
-2936 3320 l
-2936 3321 l
-2818 3321 l
-2817 3321 m
-2938 3321 l
-2938 3322 l
-2817 3322 l
-2817 3322 m
-2939 3322 l
-2939 3323 l
-2817 3323 l
-2816 3323 m
-2941 3323 l
-2941 3324 l
-2816 3324 l
-2816 3324 m
-2943 3324 l
-2943 3325 l
-2816 3325 l
-2815 3325 m
-2945 3325 l
-2945 3326 l
-2815 3326 l
-2815 3326 m
-2947 3326 l
-2947 3327 l
-2815 3327 l
-2814 3327 m
-2949 3327 l
-2949 3328 l
-2814 3328 l
-2814 3328 m
-2950 3328 l
-2950 3329 l
-2814 3329 l
-2813 3329 m
-2952 3329 l
-2952 3330 l
-2813 3330 l
-2812 3330 m
-2954 3330 l
-2954 3331 l
-2812 3331 l
-2812 3331 m
-2956 3331 l
-2956 3332 l
-2812 3332 l
-2811 3332 m
-2958 3332 l
-2958 3333 l
-2811 3333 l
-2811 3333 m
-2959 3333 l
-2959 3334 l
-2811 3334 l
-2810 3334 m
-2961 3334 l
-2961 3335 l
-2810 3335 l
-2810 3335 m
-2963 3335 l
-2963 3336 l
-2810 3336 l
-2809 3336 m
-2965 3336 l
-2965 3337 l
-2809 3337 l
-2809 3337 m
-2967 3337 l
-2967 3338 l
-2809 3338 l
-2808 3338 m
-2968 3338 l
-2968 3339 l
-2808 3339 l
-2808 3339 m
-2970 3339 l
-2970 3340 l
-2808 3340 l
-2807 3340 m
-2972 3340 l
-2972 3341 l
-2807 3341 l
-2806 3341 m
-2974 3341 l
-2974 3342 l
-2806 3342 l
-2806 3342 m
-2976 3342 l
-2976 3343 l
-2806 3343 l
-2805 3343 m
-2977 3343 l
-2977 3344 l
-2805 3344 l
-2805 3344 m
-2979 3344 l
-2979 3345 l
-2805 3345 l
-2804 3345 m
-2981 3345 l
-2981 3346 l
-2804 3346 l
-2804 3346 m
-2983 3346 l
-2983 3347 l
-2804 3347 l
-2803 3347 m
-2985 3347 l
-2985 3348 l
-2803 3348 l
-2803 3348 m
-2986 3348 l
-2986 3349 l
-2803 3349 l
-2802 3349 m
-2988 3349 l
-2988 3350 l
-2802 3350 l
-2801 3350 m
-2990 3350 l
-2990 3351 l
-2801 3351 l
-2801 3351 m
-2992 3351 l
-2992 3352 l
-2801 3352 l
-2800 3352 m
-2994 3352 l
-2994 3353 l
-2800 3353 l
-2800 3353 m
-2995 3353 l
-2995 3354 l
-2800 3354 l
-2799 3354 m
-2997 3354 l
-2997 3355 l
-2799 3355 l
-2799 3355 m
-2999 3355 l
-2999 3356 l
-2799 3356 l
-2798 3356 m
-3001 3356 l
-3001 3357 l
-2798 3357 l
-2798 3357 m
-3003 3357 l
-3003 3358 l
-2798 3358 l
-2797 3358 m
-3005 3358 l
-3005 3359 l
-2797 3359 l
-2796 3359 m
-3006 3359 l
-3006 3360 l
-2796 3360 l
-2796 3360 m
-3008 3360 l
-3008 3361 l
-2796 3361 l
-2795 3361 m
-3010 3361 l
-3010 3362 l
-2795 3362 l
-2795 3362 m
-3012 3362 l
-3012 3363 l
-2795 3363 l
-2794 3363 m
-3014 3363 l
-3014 3364 l
-2794 3364 l
-2794 3364 m
-3015 3364 l
-3015 3365 l
-2794 3365 l
-2793 3365 m
-3017 3365 l
-3017 3366 l
-2793 3366 l
-2793 3366 m
-3019 3366 l
-3019 3367 l
-2793 3367 l
-2792 3367 m
-3021 3367 l
-3021 3368 l
-2792 3368 l
-2791 3368 m
-3023 3368 l
-3023 3369 l
-2791 3369 l
-2791 3369 m
-3024 3369 l
-3024 3370 l
-2791 3370 l
-2790 3370 m
-3026 3370 l
-3026 3371 l
-2790 3371 l
-2790 3371 m
-3028 3371 l
-3028 3372 l
-2790 3372 l
-2789 3372 m
-3030 3372 l
-3030 3373 l
-2789 3373 l
-2789 3373 m
-3032 3373 l
-3032 3374 l
-2789 3374 l
-2788 3374 m
-3033 3374 l
-3033 3375 l
-2788 3375 l
-2788 3375 m
-3035 3375 l
-3035 3376 l
-2788 3376 l
-2787 3376 m
-3037 3376 l
-3037 3377 l
-2787 3377 l
-2787 3377 m
-3039 3377 l
-3039 3378 l
-2787 3378 l
-2787 3378 m
-3041 3378 l
-3041 3379 l
-2787 3379 l
-2788 3379 m
-3042 3379 l
-3042 3380 l
-2788 3380 l
-2790 3380 m
-3044 3380 l
-3044 3381 l
-2790 3381 l
-2792 3381 m
-3046 3381 l
-3046 3382 l
-2792 3382 l
-2794 3382 m
-3048 3382 l
-3048 3383 l
-2794 3383 l
-2796 3383 m
-3050 3383 l
-3050 3384 l
-2796 3384 l
-2797 3384 m
-3052 3384 l
-3052 3385 l
-2797 3385 l
-2799 3385 m
-3053 3385 l
-3053 3386 l
-2799 3386 l
-2801 3386 m
-3055 3386 l
-3055 3387 l
-2801 3387 l
-2803 3387 m
-3057 3387 l
-3057 3388 l
-2803 3388 l
-2805 3388 m
-3059 3388 l
-3059 3389 l
-2805 3389 l
-2806 3389 m
-3061 3389 l
-3061 3390 l
-2806 3390 l
-2808 3390 m
-3062 3390 l
-3062 3391 l
-2808 3391 l
-2810 3391 m
-3064 3391 l
-3064 3392 l
-2810 3392 l
-2812 3392 m
-3066 3392 l
-3066 3393 l
-2812 3393 l
-2814 3393 m
-3068 3393 l
-3068 3394 l
-2814 3394 l
-2816 3394 m
-3070 3394 l
-3070 3395 l
-2816 3395 l
-2817 3395 m
-3071 3395 l
-3071 3396 l
-2817 3396 l
-2819 3396 m
-3073 3396 l
-3073 3397 l
-2819 3397 l
-2821 3397 m
-3075 3397 l
-3075 3398 l
-2821 3398 l
-2823 3398 m
-3077 3398 l
-3077 3399 l
-2823 3399 l
-2825 3399 m
-3079 3399 l
-3079 3400 l
-2825 3400 l
-2826 3400 m
-3080 3400 l
-3080 3401 l
-2826 3401 l
-2828 3401 m
-3082 3401 l
-3082 3402 l
-2828 3402 l
-2830 3402 m
-3084 3402 l
-3084 3403 l
-2830 3403 l
-2832 3403 m
-3086 3403 l
-3086 3404 l
-2832 3404 l
-2834 3404 m
-3088 3404 l
-3088 3405 l
-2834 3405 l
-2835 3405 m
-3089 3405 l
-3089 3406 l
-2835 3406 l
-2837 3406 m
-3091 3406 l
-3091 3407 l
-2837 3407 l
-2839 3407 m
-3093 3407 l
-3093 3408 l
-2839 3408 l
-2841 3408 m
-3095 3408 l
-3095 3409 l
-2841 3409 l
-2843 3409 m
-3097 3409 l
-3097 3410 l
-2843 3410 l
-2845 3410 m
-3098 3410 l
-3098 3411 l
-2845 3411 l
-2846 3411 m
-3099 3411 l
-3099 3412 l
-2846 3412 l
-2848 3412 m
-3098 3412 l
-3098 3413 l
-2848 3413 l
-2850 3413 m
-3097 3413 l
-3097 3414 l
-2850 3414 l
-2852 3414 m
-3097 3414 l
-3097 3415 l
-2852 3415 l
-2854 3415 m
-3096 3415 l
-3096 3416 l
-2854 3416 l
-2855 3416 m
-3096 3416 l
-3096 3417 l
-2855 3417 l
-2857 3417 m
-3095 3417 l
-3095 3418 l
-2857 3418 l
-2859 3418 m
-3095 3418 l
-3095 3419 l
-2859 3419 l
-2861 3419 m
-3094 3419 l
-3094 3420 l
-2861 3420 l
-2863 3420 m
-3093 3420 l
-3093 3421 l
-2863 3421 l
-2864 3421 m
-3093 3421 l
-3093 3422 l
-2864 3422 l
-2866 3422 m
-3092 3422 l
-3092 3423 l
-2866 3423 l
-2868 3423 m
-3092 3423 l
-3092 3424 l
-2868 3424 l
-2870 3424 m
-3091 3424 l
-3091 3425 l
-2870 3425 l
-2872 3425 m
-3091 3425 l
-3091 3426 l
-2872 3426 l
-2874 3426 m
-3090 3426 l
-3090 3427 l
-2874 3427 l
-2875 3427 m
-3090 3427 l
-3090 3428 l
-2875 3428 l
-2877 3428 m
-3089 3428 l
-3089 3429 l
-2877 3429 l
-2879 3429 m
-3088 3429 l
-3088 3430 l
-2879 3430 l
-2881 3430 m
-3088 3430 l
-3088 3431 l
-2881 3431 l
-2883 3431 m
-3087 3431 l
-3087 3432 l
-2883 3432 l
-2884 3432 m
-3087 3432 l
-3087 3433 l
-2884 3433 l
-2886 3433 m
-3086 3433 l
-3086 3434 l
-2886 3434 l
-2888 3434 m
-3086 3434 l
-3086 3435 l
-2888 3435 l
-2890 3435 m
-3085 3435 l
-3085 3436 l
-2890 3436 l
-2892 3436 m
-3085 3436 l
-3085 3437 l
-2892 3437 l
-2893 3437 m
-3084 3437 l
-3084 3438 l
-2893 3438 l
-2895 3438 m
-3083 3438 l
-3083 3439 l
-2895 3439 l
-2897 3439 m
-3083 3439 l
-3083 3440 l
-2897 3440 l
-2899 3440 m
-3082 3440 l
-3082 3441 l
-2899 3441 l
-2901 3441 m
-3082 3441 l
-3082 3442 l
-2901 3442 l
-2903 3442 m
-3081 3442 l
-3081 3443 l
-2903 3443 l
-2904 3443 m
-3081 3443 l
-3081 3444 l
-2904 3444 l
-2906 3444 m
-3080 3444 l
-3080 3445 l
-2906 3445 l
-2908 3445 m
-3080 3445 l
-3080 3446 l
-2908 3446 l
-2910 3446 m
-3079 3446 l
-3079 3447 l
-2910 3447 l
-2912 3447 m
-3078 3447 l
-3078 3448 l
-2912 3448 l
-2913 3448 m
-3078 3448 l
-3078 3449 l
-2913 3449 l
-2915 3449 m
-3077 3449 l
-3077 3450 l
-2915 3450 l
-2917 3450 m
-3077 3450 l
-3077 3451 l
-2917 3451 l
-2919 3451 m
-3076 3451 l
-3076 3452 l
-2919 3452 l
-2921 3452 m
-3076 3452 l
-3076 3453 l
-2921 3453 l
-2922 3453 m
-3075 3453 l
-3075 3454 l
-2922 3454 l
-2924 3454 m
-3075 3454 l
-3075 3455 l
-2924 3455 l
-2926 3455 m
-3074 3455 l
-3074 3456 l
-2926 3456 l
-2928 3456 m
-3073 3456 l
-3073 3457 l
-2928 3457 l
-2930 3457 m
-3073 3457 l
-3073 3458 l
-2930 3458 l
-2932 3458 m
-3072 3458 l
-3072 3459 l
-2932 3459 l
-2933 3459 m
-3072 3459 l
-3072 3460 l
-2933 3460 l
-2935 3460 m
-3071 3460 l
-3071 3461 l
-2935 3461 l
-2937 3461 m
-3071 3461 l
-3071 3462 l
-2937 3462 l
-2939 3462 m
-3070 3462 l
-3070 3463 l
-2939 3463 l
-2941 3463 m
-3070 3463 l
-3070 3464 l
-2941 3464 l
-2942 3464 m
-3069 3464 l
-3069 3465 l
-2942 3465 l
-2944 3465 m
-3068 3465 l
-3068 3466 l
-2944 3466 l
-2946 3466 m
-3068 3466 l
-3068 3467 l
-2946 3467 l
-2948 3467 m
-3067 3467 l
-3067 3468 l
-2948 3468 l
-2950 3468 m
-3067 3468 l
-3067 3469 l
-2950 3469 l
-2951 3469 m
-3066 3469 l
-3066 3470 l
-2951 3470 l
-2953 3470 m
-3066 3470 l
-3066 3471 l
-2953 3471 l
-2955 3471 m
-3065 3471 l
-3065 3472 l
-2955 3472 l
-2957 3472 m
-3065 3472 l
-3065 3473 l
-2957 3473 l
-2959 3473 m
-3064 3473 l
-3064 3474 l
-2959 3474 l
-2961 3474 m
-3063 3474 l
-3063 3475 l
-2961 3475 l
-2962 3475 m
-3063 3475 l
-3063 3476 l
-2962 3476 l
-2964 3476 m
-3062 3476 l
-3062 3477 l
-2964 3477 l
-2966 3477 m
-3062 3477 l
-3062 3478 l
-2966 3478 l
-2968 3478 m
-3061 3478 l
-3061 3479 l
-2968 3479 l
-2970 3479 m
-3061 3479 l
-3061 3480 l
-2970 3480 l
-2971 3480 m
-3060 3480 l
-3060 3481 l
-2971 3481 l
-2973 3481 m
-3060 3481 l
-3060 3482 l
-2973 3482 l
-2975 3482 m
-3059 3482 l
-3059 3483 l
-2975 3483 l
-2977 3483 m
-3058 3483 l
-3058 3484 l
-2977 3484 l
-2979 3484 m
-3058 3484 l
-3058 3485 l
-2979 3485 l
-2980 3485 m
-3057 3485 l
-3057 3486 l
-2980 3486 l
-2982 3486 m
-3057 3486 l
-3057 3487 l
-2982 3487 l
-2984 3487 m
-3056 3487 l
-3056 3488 l
-2984 3488 l
-2986 3488 m
-3056 3488 l
-3056 3489 l
-2986 3489 l
-2988 3489 m
-3055 3489 l
-3055 3490 l
-2988 3490 l
-2990 3490 m
-3055 3490 l
-3055 3491 l
-2990 3491 l
-2991 3491 m
-3054 3491 l
-3054 3492 l
-2991 3492 l
-2993 3492 m
-3053 3492 l
-3053 3493 l
-2993 3493 l
-2995 3493 m
-3053 3493 l
-3053 3494 l
-2995 3494 l
-2997 3494 m
-3052 3494 l
-3052 3495 l
-2997 3495 l
-2999 3495 m
-3052 3495 l
-3052 3496 l
-2999 3496 l
-3000 3496 m
-3051 3496 l
-3051 3497 l
-3000 3497 l
-3002 3497 m
-3051 3497 l
-3051 3498 l
-3002 3498 l
-3004 3498 m
-3050 3498 l
-3050 3499 l
-3004 3499 l
-3006 3499 m
-3050 3499 l
-3050 3500 l
-3006 3500 l
-3008 3500 m
-3049 3500 l
-3049 3501 l
-3008 3501 l
-3009 3501 m
-3048 3501 l
-3048 3502 l
-3009 3502 l
-3011 3502 m
-3048 3502 l
-3048 3503 l
-3011 3503 l
-3013 3503 m
-3047 3503 l
-3047 3504 l
-3013 3504 l
-3015 3504 m
-3047 3504 l
-3047 3505 l
-3015 3505 l
-3017 3505 m
-3046 3505 l
-3046 3506 l
-3017 3506 l
-3019 3506 m
-3046 3506 l
-3046 3507 l
-3019 3507 l
-3020 3507 m
-3045 3507 l
-3045 3508 l
-3020 3508 l
-3022 3508 m
-3045 3508 l
-3045 3509 l
-3022 3509 l
-3024 3509 m
-3044 3509 l
-3044 3510 l
-3024 3510 l
-3026 3510 m
-3043 3510 l
-3043 3511 l
-3026 3511 l
-3028 3511 m
-3043 3511 l
-3043 3512 l
-3028 3512 l
-3029 3512 m
-3042 3512 l
-3042 3513 l
-3029 3513 l
-3031 3513 m
-3042 3513 l
-3042 3514 l
-3031 3514 l
-3033 3514 m
-3041 3514 l
-3041 3515 l
-3033 3515 l
-3035 3515 m
-3041 3515 l
-3041 3516 l
-3035 3516 l
-3037 3516 m
-3040 3516 l
-3040 3517 l
-3037 3517 l
-Y
-2845.9 3271.5 m
-2787 3378 l
-3039 3517 l
-3098 3411 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2838 3329 m
-2904 3366 l
-S
-2967 3424 m
-2969 3411 l
-2966 3400 l
-2957 3390 l
-2953 3388 l
-2940 3386 l
-2929 3389 l
-2919 3398 l
-2917 3402 l
-2915 3415 l
-2918 3426 l
-2927 3436 l
-2931 3438 l
-2944 3440 l
-2955 3437 l
-2967 3424 l
-2977 3406 l
-2983 3386 l
-2982 3371 l
-2973 3361 l
-2966 3357 l
-2953 3354 l
-2945 3360 l
-S
-3000 3476 m
-2991 3466 l
-2990 3451 l
-2996 3431 l
-3002 3420 l
-3016 3404 l
-3029 3397 l
-3042 3399 l
-3050 3403 l
-3059 3413 l
-3060 3428 l
-3054 3448 l
-3047 3459 l
-3034 3476 l
-3020 3483 l
-3007 3480 l
-3000 3476 l
-S
-1 g
-3190 3488 m
-3192 3488 l
-3192 3489 l
-3190 3489 l
-3189 3489 m
-3193 3489 l
-3193 3490 l
-3189 3490 l
-3187 3490 m
-3194 3490 l
-3194 3491 l
-3187 3491 l
-3186 3491 m
-3195 3491 l
-3195 3492 l
-3186 3492 l
-3185 3492 m
-3196 3492 l
-3196 3493 l
-3185 3493 l
-3184 3493 m
-3197 3493 l
-3197 3494 l
-3184 3494 l
-3183 3494 m
-3197 3494 l
-3197 3495 l
-3183 3495 l
-3181 3495 m
-3198 3495 l
-3198 3496 l
-3181 3496 l
-3180 3496 m
-3199 3496 l
-3199 3497 l
-3180 3497 l
-3179 3497 m
-3200 3497 l
-3200 3498 l
-3179 3498 l
-3178 3498 m
-3201 3498 l
-3201 3499 l
-3178 3499 l
-3176 3499 m
-3202 3499 l
-3202 3500 l
-3176 3500 l
-3175 3500 m
-3202 3500 l
-3202 3501 l
-3175 3501 l
-3174 3501 m
-3203 3501 l
-3203 3502 l
-3174 3502 l
-3173 3502 m
-3204 3502 l
-3204 3503 l
-3173 3503 l
-3172 3503 m
-3205 3503 l
-3205 3504 l
-3172 3504 l
-3170 3504 m
-3206 3504 l
-3206 3505 l
-3170 3505 l
-3169 3505 m
-3207 3505 l
-3207 3506 l
-3169 3506 l
-3168 3506 m
-3207 3506 l
-3207 3507 l
-3168 3507 l
-3167 3507 m
-3208 3507 l
-3208 3508 l
-3167 3508 l
-3166 3508 m
-3209 3508 l
-3209 3509 l
-3166 3509 l
-3164 3509 m
-3210 3509 l
-3210 3510 l
-3164 3510 l
-3163 3510 m
-3211 3510 l
-3211 3511 l
-3163 3511 l
-3162 3511 m
-3212 3511 l
-3212 3512 l
-3162 3512 l
-3161 3512 m
-3212 3512 l
-3212 3513 l
-3161 3513 l
-3159 3513 m
-3213 3513 l
-3213 3514 l
-3159 3514 l
-3158 3514 m
-3214 3514 l
-3214 3515 l
-3158 3515 l
-3157 3515 m
-3215 3515 l
-3215 3516 l
-3157 3516 l
-3156 3516 m
-3216 3516 l
-3216 3517 l
-3156 3517 l
-3155 3517 m
-3216 3517 l
-3216 3518 l
-3155 3518 l
-3153 3518 m
-3217 3518 l
-3217 3519 l
-3153 3519 l
-3152 3519 m
-3218 3519 l
-3218 3520 l
-3152 3520 l
-3151 3520 m
-3219 3520 l
-3219 3521 l
-3151 3521 l
-3150 3521 m
-3220 3521 l
-3220 3522 l
-3150 3522 l
-3149 3522 m
-3221 3522 l
-3221 3523 l
-3149 3523 l
-3147 3523 m
-3221 3523 l
-3221 3524 l
-3147 3524 l
-3146 3524 m
-3222 3524 l
-3222 3525 l
-3146 3525 l
-3145 3525 m
-3223 3525 l
-3223 3526 l
-3145 3526 l
-3144 3526 m
-3224 3526 l
-3224 3527 l
-3144 3527 l
-3142 3527 m
-3225 3527 l
-3225 3528 l
-3142 3528 l
-3141 3528 m
-3226 3528 l
-3226 3529 l
-3141 3529 l
-3140 3529 m
-3226 3529 l
-3226 3530 l
-3140 3530 l
-3139 3530 m
-3227 3530 l
-3227 3531 l
-3139 3531 l
-3138 3531 m
-3228 3531 l
-3228 3532 l
-3138 3532 l
-3136 3532 m
-3229 3532 l
-3229 3533 l
-3136 3533 l
-3135 3533 m
-3230 3533 l
-3230 3534 l
-3135 3534 l
-3134 3534 m
-3231 3534 l
-3231 3535 l
-3134 3535 l
-3133 3535 m
-3231 3535 l
-3231 3536 l
-3133 3536 l
-3132 3536 m
-3232 3536 l
-3232 3537 l
-3132 3537 l
-3130 3537 m
-3233 3537 l
-3233 3538 l
-3130 3538 l
-3129 3538 m
-3234 3538 l
-3234 3539 l
-3129 3539 l
-3128 3539 m
-3235 3539 l
-3235 3540 l
-3128 3540 l
-3127 3540 m
-3236 3540 l
-3236 3541 l
-3127 3541 l
-3125 3541 m
-3236 3541 l
-3236 3542 l
-3125 3542 l
-3124 3542 m
-3237 3542 l
-3237 3543 l
-3124 3543 l
-3123 3543 m
-3238 3543 l
-3238 3544 l
-3123 3544 l
-3122 3544 m
-3239 3544 l
-3239 3545 l
-3122 3545 l
-3121 3545 m
-3240 3545 l
-3240 3546 l
-3121 3546 l
-3119 3546 m
-3240 3546 l
-3240 3547 l
-3119 3547 l
-3118 3547 m
-3241 3547 l
-3241 3548 l
-3118 3548 l
-3117 3548 m
-3242 3548 l
-3242 3549 l
-3117 3549 l
-3116 3549 m
-3243 3549 l
-3243 3550 l
-3116 3550 l
-3115 3550 m
-3244 3550 l
-3244 3551 l
-3115 3551 l
-3113 3551 m
-3245 3551 l
-3245 3552 l
-3113 3552 l
-3112 3552 m
-3245 3552 l
-3245 3553 l
-3112 3553 l
-3111 3553 m
-3246 3553 l
-3246 3554 l
-3111 3554 l
-3110 3554 m
-3247 3554 l
-3247 3555 l
-3110 3555 l
-3108 3555 m
-3248 3555 l
-3248 3556 l
-3108 3556 l
-3107 3556 m
-3249 3556 l
-3249 3557 l
-3107 3557 l
-3106 3557 m
-3250 3557 l
-3250 3558 l
-3106 3558 l
-3105 3558 m
-3250 3558 l
-3250 3559 l
-3105 3559 l
-3104 3559 m
-3251 3559 l
-3251 3560 l
-3104 3560 l
-3102 3560 m
-3252 3560 l
-3252 3561 l
-3102 3561 l
-3101 3561 m
-3253 3561 l
-3253 3562 l
-3101 3562 l
-3100 3562 m
-3254 3562 l
-3254 3563 l
-3100 3563 l
-3099 3563 m
-3255 3563 l
-3255 3564 l
-3099 3564 l
-3098 3564 m
-3255 3564 l
-3255 3565 l
-3098 3565 l
-3098 3565 m
-3256 3565 l
-3256 3566 l
-3098 3566 l
-3098 3566 m
-3257 3566 l
-3257 3567 l
-3098 3567 l
-3099 3567 m
-3258 3567 l
-3258 3568 l
-3099 3568 l
-3100 3568 m
-3259 3568 l
-3259 3569 l
-3100 3569 l
-3101 3569 m
-3260 3569 l
-3260 3570 l
-3101 3570 l
-3102 3570 m
-3260 3570 l
-3260 3571 l
-3102 3571 l
-3102 3571 m
-3261 3571 l
-3261 3572 l
-3102 3572 l
-3103 3572 m
-3262 3572 l
-3262 3573 l
-3103 3573 l
-3104 3573 m
-3263 3573 l
-3263 3574 l
-3104 3574 l
-3105 3574 m
-3264 3574 l
-3264 3575 l
-3105 3575 l
-3106 3575 m
-3265 3575 l
-3265 3576 l
-3106 3576 l
-3107 3576 m
-3265 3576 l
-3265 3577 l
-3107 3577 l
-3107 3577 m
-3266 3577 l
-3266 3578 l
-3107 3578 l
-3108 3578 m
-3267 3578 l
-3267 3579 l
-3108 3579 l
-3109 3579 m
-3268 3579 l
-3268 3580 l
-3109 3580 l
-3110 3580 m
-3269 3580 l
-3269 3581 l
-3110 3581 l
-3111 3581 m
-3269 3581 l
-3269 3582 l
-3111 3582 l
-3111 3582 m
-3270 3582 l
-3270 3583 l
-3111 3583 l
-3112 3583 m
-3271 3583 l
-3271 3584 l
-3112 3584 l
-3113 3584 m
-3272 3584 l
-3272 3585 l
-3113 3585 l
-3114 3585 m
-3273 3585 l
-3273 3586 l
-3114 3586 l
-3115 3586 m
-3274 3586 l
-3274 3587 l
-3115 3587 l
-3116 3587 m
-3274 3587 l
-3274 3588 l
-3116 3588 l
-3116 3588 m
-3275 3588 l
-3275 3589 l
-3116 3589 l
-3117 3589 m
-3276 3589 l
-3276 3590 l
-3117 3590 l
-3118 3590 m
-3277 3590 l
-3277 3591 l
-3118 3591 l
-3119 3591 m
-3278 3591 l
-3278 3592 l
-3119 3592 l
-3120 3592 m
-3279 3592 l
-3279 3594 l
-3120 3594 l
-3121 3594 m
-3280 3594 l
-3280 3595 l
-3121 3595 l
-3122 3595 m
-3281 3595 l
-3281 3596 l
-3122 3596 l
-3123 3596 m
-3282 3596 l
-3282 3597 l
-3123 3597 l
-3124 3597 m
-3283 3597 l
-3283 3598 l
-3124 3598 l
-3125 3598 m
-3284 3598 l
-3284 3600 l
-3125 3600 l
-3126 3600 m
-3285 3600 l
-3285 3601 l
-3126 3601 l
-3127 3601 m
-3286 3601 l
-3286 3602 l
-3127 3602 l
-3128 3602 m
-3287 3602 l
-3287 3603 l
-3128 3603 l
-3129 3603 m
-3288 3603 l
-3288 3604 l
-3129 3604 l
-3130 3604 m
-3289 3604 l
-3289 3606 l
-3130 3606 l
-3131 3606 m
-3290 3606 l
-3290 3607 l
-3131 3607 l
-3132 3607 m
-3291 3607 l
-3291 3608 l
-3132 3608 l
-3133 3608 m
-3292 3608 l
-3292 3609 l
-3133 3609 l
-3134 3609 m
-3293 3609 l
-3293 3610 l
-3134 3610 l
-3134 3610 m
-3294 3610 l
-3294 3611 l
-3134 3611 l
-3135 3611 m
-3294 3611 l
-3294 3612 l
-3135 3612 l
-3136 3612 m
-3295 3612 l
-3295 3613 l
-3136 3613 l
-3137 3613 m
-3296 3613 l
-3296 3614 l
-3137 3614 l
-3138 3614 m
-3297 3614 l
-3297 3615 l
-3138 3615 l
-3139 3615 m
-3298 3615 l
-3298 3617 l
-3139 3617 l
-3140 3617 m
-3299 3617 l
-3299 3618 l
-3140 3618 l
-3141 3618 m
-3300 3618 l
-3300 3619 l
-3141 3619 l
-3142 3619 m
-3301 3619 l
-3301 3620 l
-3142 3620 l
-3143 3620 m
-3302 3620 l
-3302 3621 l
-3143 3621 l
-3143 3621 m
-3303 3621 l
-3303 3622 l
-3143 3622 l
-3144 3622 m
-3303 3622 l
-3303 3623 l
-3144 3623 l
-3145 3623 m
-3304 3623 l
-3304 3624 l
-3145 3624 l
-3146 3624 m
-3305 3624 l
-3305 3625 l
-3146 3625 l
-3147 3625 m
-3306 3625 l
-3306 3626 l
-3147 3626 l
-3148 3626 m
-3307 3626 l
-3307 3627 l
-3148 3627 l
-3148 3627 m
-3308 3627 l
-3308 3628 l
-3148 3628 l
-3149 3628 m
-3308 3628 l
-3308 3629 l
-3149 3629 l
-3150 3629 m
-3309 3629 l
-3309 3630 l
-3150 3630 l
-3151 3630 m
-3310 3630 l
-3310 3631 l
-3151 3631 l
-3152 3631 m
-3311 3631 l
-3311 3632 l
-3152 3632 l
-3152 3632 m
-3312 3632 l
-3312 3633 l
-3152 3633 l
-3153 3633 m
-3313 3633 l
-3313 3634 l
-3153 3634 l
-3154 3634 m
-3313 3634 l
-3313 3635 l
-3154 3635 l
-3155 3635 m
-3314 3635 l
-3314 3636 l
-3155 3636 l
-3156 3636 m
-3315 3636 l
-3315 3637 l
-3156 3637 l
-3157 3637 m
-3316 3637 l
-3316 3638 l
-3157 3638 l
-3157 3638 m
-3317 3638 l
-3317 3639 l
-3157 3639 l
-3158 3639 m
-3318 3639 l
-3318 3640 l
-3158 3640 l
-3159 3640 m
-3318 3640 l
-3318 3641 l
-3159 3641 l
-3160 3641 m
-3319 3641 l
-3319 3642 l
-3160 3642 l
-3161 3642 m
-3320 3642 l
-3320 3643 l
-3161 3643 l
-3162 3643 m
-3321 3643 l
-3321 3644 l
-3162 3644 l
-3162 3644 m
-3322 3644 l
-3322 3645 l
-3162 3645 l
-3163 3645 m
-3322 3645 l
-3322 3646 l
-3163 3646 l
-3164 3646 m
-3323 3646 l
-3323 3647 l
-3164 3647 l
-3165 3647 m
-3324 3647 l
-3324 3648 l
-3165 3648 l
-3166 3648 m
-3325 3648 l
-3325 3649 l
-3166 3649 l
-3166 3649 m
-3326 3649 l
-3326 3650 l
-3166 3650 l
-3167 3650 m
-3327 3650 l
-3327 3651 l
-3167 3651 l
-3168 3651 m
-3327 3651 l
-3327 3652 l
-3168 3652 l
-3169 3652 m
-3328 3652 l
-3328 3653 l
-3169 3653 l
-3170 3653 m
-3329 3653 l
-3329 3654 l
-3170 3654 l
-3171 3654 m
-3330 3654 l
-3330 3655 l
-3171 3655 l
-3171 3655 m
-3331 3655 l
-3331 3656 l
-3171 3656 l
-3172 3656 m
-3332 3656 l
-3332 3657 l
-3172 3657 l
-3173 3657 m
-3332 3657 l
-3332 3658 l
-3173 3658 l
-3174 3658 m
-3333 3658 l
-3333 3659 l
-3174 3659 l
-3175 3659 m
-3334 3659 l
-3334 3660 l
-3175 3660 l
-3175 3660 m
-3335 3660 l
-3335 3661 l
-3175 3661 l
-3176 3661 m
-3336 3661 l
-3336 3662 l
-3176 3662 l
-3177 3662 m
-3337 3662 l
-3337 3663 l
-3177 3663 l
-3178 3663 m
-3337 3663 l
-3337 3664 l
-3178 3664 l
-3179 3664 m
-3338 3664 l
-3338 3665 l
-3179 3665 l
-3180 3665 m
-3339 3665 l
-3339 3666 l
-3180 3666 l
-3180 3666 m
-3340 3666 l
-3340 3667 l
-3180 3667 l
-3181 3667 m
-3341 3667 l
-3341 3668 l
-3181 3668 l
-3182 3668 m
-3342 3668 l
-3342 3669 l
-3182 3669 l
-3183 3669 m
-3342 3669 l
-3342 3670 l
-3183 3670 l
-3184 3670 m
-3343 3670 l
-3343 3671 l
-3184 3671 l
-3184 3671 m
-3344 3671 l
-3344 3672 l
-3184 3672 l
-3185 3672 m
-3345 3672 l
-3345 3673 l
-3185 3673 l
-3186 3673 m
-3346 3673 l
-3346 3674 l
-3186 3674 l
-3187 3674 m
-3347 3674 l
-3347 3675 l
-3187 3675 l
-3188 3675 m
-3347 3675 l
-3347 3676 l
-3188 3676 l
-3189 3676 m
-3348 3676 l
-3348 3677 l
-3189 3677 l
-3189 3677 m
-3349 3677 l
-3349 3678 l
-3189 3678 l
-3190 3678 m
-3350 3678 l
-3350 3679 l
-3190 3679 l
-3191 3679 m
-3351 3679 l
-3351 3680 l
-3191 3680 l
-3192 3680 m
-3351 3680 l
-3351 3681 l
-3192 3681 l
-3193 3681 m
-3352 3681 l
-3352 3682 l
-3193 3682 l
-3194 3682 m
-3353 3682 l
-3353 3683 l
-3194 3683 l
-3194 3683 m
-3354 3683 l
-3354 3684 l
-3194 3684 l
-3195 3684 m
-3355 3684 l
-3355 3685 l
-3195 3685 l
-3196 3685 m
-3356 3685 l
-3356 3686 l
-3196 3686 l
-3197 3686 m
-3356 3686 l
-3356 3687 l
-3197 3687 l
-3198 3687 m
-3357 3687 l
-3357 3688 l
-3198 3688 l
-3198 3688 m
-3358 3688 l
-3358 3689 l
-3198 3689 l
-3199 3689 m
-3359 3689 l
-3359 3690 l
-3199 3690 l
-3200 3690 m
-3360 3690 l
-3360 3691 l
-3200 3691 l
-3201 3691 m
-3361 3691 l
-3361 3692 l
-3201 3692 l
-3202 3692 m
-3361 3692 l
-3361 3693 l
-3202 3693 l
-3203 3693 m
-3362 3693 l
-3362 3694 l
-3203 3694 l
-3203 3694 m
-3363 3694 l
-3363 3695 l
-3203 3695 l
-3204 3695 m
-3364 3695 l
-3364 3696 l
-3204 3696 l
-3205 3696 m
-3365 3696 l
-3365 3697 l
-3205 3697 l
-3206 3697 m
-3366 3697 l
-3366 3698 l
-3206 3698 l
-3207 3698 m
-3366 3698 l
-3366 3699 l
-3207 3699 l
-3207 3699 m
-3367 3699 l
-3367 3700 l
-3207 3700 l
-3208 3700 m
-3368 3700 l
-3368 3701 l
-3208 3701 l
-3209 3701 m
-3369 3701 l
-3369 3702 l
-3209 3702 l
-3210 3702 m
-3370 3702 l
-3370 3703 l
-3210 3703 l
-3211 3703 m
-3371 3703 l
-3371 3704 l
-3211 3704 l
-3212 3704 m
-3371 3704 l
-3371 3705 l
-3212 3705 l
-3212 3705 m
-3372 3705 l
-3372 3706 l
-3212 3706 l
-3213 3706 m
-3373 3706 l
-3373 3707 l
-3213 3707 l
-3214 3707 m
-3374 3707 l
-3374 3708 l
-3214 3708 l
-3215 3708 m
-3375 3708 l
-3375 3709 l
-3215 3709 l
-3216 3709 m
-3375 3709 l
-3375 3710 l
-3216 3710 l
-3216 3710 m
-3375 3710 l
-3375 3711 l
-3216 3711 l
-3217 3711 m
-3374 3711 l
-3374 3712 l
-3217 3712 l
-3218 3712 m
-3373 3712 l
-3373 3713 l
-3218 3713 l
-3219 3713 m
-3372 3713 l
-3372 3714 l
-3219 3714 l
-3220 3714 m
-3371 3714 l
-3371 3715 l
-3220 3715 l
-3221 3715 m
-3369 3715 l
-3369 3716 l
-3221 3716 l
-3221 3716 m
-3368 3716 l
-3368 3717 l
-3221 3717 l
-3222 3717 m
-3367 3717 l
-3367 3718 l
-3222 3718 l
-3223 3718 m
-3366 3718 l
-3366 3719 l
-3223 3719 l
-3224 3719 m
-3365 3719 l
-3365 3720 l
-3224 3720 l
-3225 3720 m
-3363 3720 l
-3363 3721 l
-3225 3721 l
-3226 3721 m
-3362 3721 l
-3362 3722 l
-3226 3722 l
-3226 3722 m
-3361 3722 l
-3361 3723 l
-3226 3723 l
-3227 3723 m
-3360 3723 l
-3360 3724 l
-3227 3724 l
-3228 3724 m
-3359 3724 l
-3359 3725 l
-3228 3725 l
-3229 3725 m
-3357 3725 l
-3357 3726 l
-3229 3726 l
-3230 3726 m
-3356 3726 l
-3356 3727 l
-3230 3727 l
-3230 3727 m
-3355 3727 l
-3355 3728 l
-3230 3728 l
-3231 3728 m
-3354 3728 l
-3354 3729 l
-3231 3729 l
-3232 3729 m
-3353 3729 l
-3353 3730 l
-3232 3730 l
-3233 3730 m
-3351 3730 l
-3351 3731 l
-3233 3731 l
-3234 3731 m
-3350 3731 l
-3350 3732 l
-3234 3732 l
-3235 3732 m
-3349 3732 l
-3349 3733 l
-3235 3733 l
-3235 3733 m
-3348 3733 l
-3348 3734 l
-3235 3734 l
-3236 3734 m
-3347 3734 l
-3347 3735 l
-3236 3735 l
-3237 3735 m
-3345 3735 l
-3345 3736 l
-3237 3736 l
-3238 3736 m
-3344 3736 l
-3344 3737 l
-3238 3737 l
-3239 3737 m
-3343 3737 l
-3343 3738 l
-3239 3738 l
-3239 3738 m
-3342 3738 l
-3342 3739 l
-3239 3739 l
-3240 3739 m
-3341 3739 l
-3341 3740 l
-3240 3740 l
-3241 3740 m
-3339 3740 l
-3339 3741 l
-3241 3741 l
-3242 3741 m
-3338 3741 l
-3338 3742 l
-3242 3742 l
-3243 3742 m
-3337 3742 l
-3337 3743 l
-3243 3743 l
-3244 3743 m
-3336 3743 l
-3336 3744 l
-3244 3744 l
-3244 3744 m
-3335 3744 l
-3335 3745 l
-3244 3745 l
-3245 3745 m
-3333 3745 l
-3333 3746 l
-3245 3746 l
-3246 3746 m
-3332 3746 l
-3332 3747 l
-3246 3747 l
-3247 3747 m
-3331 3747 l
-3331 3748 l
-3247 3748 l
-3248 3748 m
-3330 3748 l
-3330 3749 l
-3248 3749 l
-3248 3749 m
-3328 3749 l
-3328 3750 l
-3248 3750 l
-3249 3750 m
-3327 3750 l
-3327 3751 l
-3249 3751 l
-3250 3751 m
-3326 3751 l
-3326 3752 l
-3250 3752 l
-3251 3752 m
-3325 3752 l
-3325 3753 l
-3251 3753 l
-3252 3753 m
-3324 3753 l
-3324 3754 l
-3252 3754 l
-3253 3754 m
-3322 3754 l
-3322 3755 l
-3253 3755 l
-3253 3755 m
-3321 3755 l
-3321 3756 l
-3253 3756 l
-3254 3756 m
-3320 3756 l
-3320 3757 l
-3254 3757 l
-3255 3757 m
-3319 3757 l
-3319 3758 l
-3255 3758 l
-3256 3758 m
-3318 3758 l
-3318 3759 l
-3256 3759 l
-3257 3759 m
-3316 3759 l
-3316 3760 l
-3257 3760 l
-3258 3760 m
-3315 3760 l
-3315 3761 l
-3258 3761 l
-3258 3761 m
-3314 3761 l
-3314 3762 l
-3258 3762 l
-3259 3762 m
-3313 3762 l
-3313 3763 l
-3259 3763 l
-3260 3763 m
-3312 3763 l
-3312 3764 l
-3260 3764 l
-3261 3764 m
-3310 3764 l
-3310 3765 l
-3261 3765 l
-3262 3765 m
-3309 3765 l
-3309 3766 l
-3262 3766 l
-3262 3766 m
-3308 3766 l
-3308 3767 l
-3262 3767 l
-3263 3767 m
-3307 3767 l
-3307 3768 l
-3263 3768 l
-3264 3768 m
-3306 3768 l
-3306 3769 l
-3264 3769 l
-3265 3769 m
-3304 3769 l
-3304 3770 l
-3265 3770 l
-3266 3770 m
-3303 3770 l
-3303 3771 l
-3266 3771 l
-3267 3771 m
-3302 3771 l
-3302 3772 l
-3267 3772 l
-3267 3772 m
-3301 3772 l
-3301 3773 l
-3267 3773 l
-3268 3773 m
-3300 3773 l
-3300 3774 l
-3268 3774 l
-3269 3774 m
-3298 3774 l
-3298 3775 l
-3269 3775 l
-3270 3775 m
-3297 3775 l
-3297 3776 l
-3270 3776 l
-3271 3776 m
-3296 3776 l
-3296 3777 l
-3271 3777 l
-3271 3777 m
-3295 3777 l
-3295 3778 l
-3271 3778 l
-3272 3778 m
-3294 3778 l
-3294 3779 l
-3272 3779 l
-3273 3779 m
-3292 3779 l
-3292 3780 l
-3273 3780 l
-3274 3780 m
-3291 3780 l
-3291 3781 l
-3274 3781 l
-3275 3781 m
-3290 3781 l
-3290 3782 l
-3275 3782 l
-3276 3782 m
-3289 3782 l
-3289 3783 l
-3276 3783 l
-3276 3783 m
-3288 3783 l
-3288 3784 l
-3276 3784 l
-3277 3784 m
-3286 3784 l
-3286 3785 l
-3277 3785 l
-3278 3785 m
-3285 3785 l
-3285 3786 l
-3278 3786 l
-3279 3786 m
-3284 3786 l
-3284 3787 l
-3279 3787 l
-3280 3787 m
-3283 3787 l
-3283 3788 l
-3280 3788 l
-Y
-3191.3 3488.2 m
-3098 3565 l
-3281 3788 l
-3375 3710 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3163 3539 m
-3211 3597 l
-S
-3235 3685 m
-3226 3687 l
-3214 3680 l
-3209 3674 l
-3204 3662 l
-3209 3647 l
-3222 3631 l
-3238 3617 l
-3254 3610 l
-3266 3611 l
-3277 3618 l
-3279 3621 l
-3284 3634 l
-3283 3645 l
-3276 3657 l
-3273 3659 l
-3260 3664 l
-3249 3663 l
-3238 3656 l
-3235 3653 l
-3230 3640 l
-3231 3629 l
-3238 3617 l
-S
-3260 3735 m
-3255 3723 l
-3259 3708 l
-3273 3692 l
-3282 3684 l
-3301 3674 l
-3316 3672 l
-3327 3679 l
-3333 3686 l
-3337 3698 l
-3333 3712 l
-3320 3729 l
-3310 3737 l
-3291 3747 l
-3276 3749 l
-3265 3742 l
-3260 3735 l
-S
-1 g
-3431 3818 m
-3434 3818 l
-3434 3819 l
-3431 3819 l
-3427 3819 m
-3435 3819 l
-3435 3820 l
-3427 3820 l
-3424 3820 m
-3435 3820 l
-3435 3821 l
-3424 3821 l
-3421 3821 m
-3435 3821 l
-3435 3822 l
-3421 3822 l
-3417 3822 m
-3436 3822 l
-3436 3823 l
-3417 3823 l
-3414 3823 m
-3436 3823 l
-3436 3824 l
-3414 3824 l
-3411 3824 m
-3436 3824 l
-3436 3825 l
-3411 3825 l
-3407 3825 m
-3437 3825 l
-3437 3826 l
-3407 3826 l
-3404 3826 m
-3437 3826 l
-3437 3827 l
-3404 3827 l
-3401 3827 m
-3437 3827 l
-3437 3828 l
-3401 3828 l
-3397 3828 m
-3437 3828 l
-3437 3829 l
-3397 3829 l
-3394 3829 m
-3438 3829 l
-3438 3830 l
-3394 3830 l
-3391 3830 m
-3438 3830 l
-3438 3831 l
-3391 3831 l
-3387 3831 m
-3438 3831 l
-3438 3832 l
-3387 3832 l
-3384 3832 m
-3439 3832 l
-3439 3833 l
-3384 3833 l
-3381 3833 m
-3439 3833 l
-3439 3834 l
-3381 3834 l
-3377 3834 m
-3439 3834 l
-3439 3835 l
-3377 3835 l
-3374 3835 m
-3440 3835 l
-3440 3836 l
-3374 3836 l
-3371 3836 m
-3440 3836 l
-3440 3837 l
-3371 3837 l
-3367 3837 m
-3440 3837 l
-3440 3838 l
-3367 3838 l
-3364 3838 m
-3440 3838 l
-3440 3839 l
-3364 3839 l
-3361 3839 m
-3441 3839 l
-3441 3840 l
-3361 3840 l
-3357 3840 m
-3441 3840 l
-3441 3841 l
-3357 3841 l
-3354 3841 m
-3441 3841 l
-3441 3842 l
-3354 3842 l
-3351 3842 m
-3442 3842 l
-3442 3843 l
-3351 3843 l
-3347 3843 m
-3442 3843 l
-3442 3844 l
-3347 3844 l
-3344 3844 m
-3442 3844 l
-3442 3845 l
-3344 3845 l
-3341 3845 m
-3442 3845 l
-3442 3846 l
-3341 3846 l
-3337 3846 m
-3443 3846 l
-3443 3847 l
-3337 3847 l
-3334 3847 m
-3443 3847 l
-3443 3848 l
-3334 3848 l
-3331 3848 m
-3443 3848 l
-3443 3849 l
-3331 3849 l
-3327 3849 m
-3444 3849 l
-3444 3850 l
-3327 3850 l
-3324 3850 m
-3444 3850 l
-3444 3851 l
-3324 3851 l
-3321 3851 m
-3444 3851 l
-3444 3852 l
-3321 3852 l
-3318 3852 m
-3445 3852 l
-3445 3853 l
-3318 3853 l
-3318 3853 m
-3445 3853 l
-3445 3856 l
-3318 3856 l
-3318 3856 m
-3446 3856 l
-3446 3857 l
-3318 3857 l
-3319 3857 m
-3446 3857 l
-3446 3859 l
-3319 3859 l
-3319 3859 m
-3447 3859 l
-3447 3860 l
-3319 3860 l
-3320 3860 m
-3447 3860 l
-3447 3862 l
-3320 3862 l
-3320 3862 m
-3448 3862 l
-3448 3864 l
-3320 3864 l
-3321 3864 m
-3448 3864 l
-3448 3866 l
-3321 3866 l
-3321 3866 m
-3449 3866 l
-3449 3867 l
-3321 3867 l
-3322 3867 m
-3449 3867 l
-3449 3869 l
-3322 3869 l
-3322 3869 m
-3450 3869 l
-3450 3870 l
-3322 3870 l
-3323 3870 m
-3450 3870 l
-3450 3872 l
-3323 3872 l
-3323 3872 m
-3451 3872 l
-3451 3874 l
-3323 3874 l
-3324 3874 m
-3451 3874 l
-3451 3876 l
-3324 3876 l
-3324 3876 m
-3452 3876 l
-3452 3877 l
-3324 3877 l
-3325 3877 m
-3452 3877 l
-3452 3879 l
-3325 3879 l
-3325 3879 m
-3453 3879 l
-3453 3880 l
-3325 3880 l
-3326 3880 m
-3453 3880 l
-3453 3882 l
-3326 3882 l
-3326 3882 m
-3454 3882 l
-3454 3884 l
-3326 3884 l
-3327 3884 m
-3454 3884 l
-3454 3886 l
-3327 3886 l
-3327 3886 m
-3455 3886 l
-3455 3887 l
-3327 3887 l
-3328 3887 m
-3455 3887 l
-3455 3889 l
-3328 3889 l
-3328 3889 m
-3456 3889 l
-3456 3891 l
-3328 3891 l
-3329 3891 m
-3456 3891 l
-3456 3892 l
-3329 3892 l
-3329 3892 m
-3457 3892 l
-3457 3894 l
-3329 3894 l
-3330 3894 m
-3457 3894 l
-3457 3896 l
-3330 3896 l
-3330 3896 m
-3458 3896 l
-3458 3897 l
-3330 3897 l
-3331 3897 m
-3458 3897 l
-3458 3899 l
-3331 3899 l
-3331 3899 m
-3459 3899 l
-3459 3901 l
-3331 3901 l
-3332 3901 m
-3459 3901 l
-3459 3902 l
-3332 3902 l
-3332 3902 m
-3460 3902 l
-3460 3904 l
-3332 3904 l
-3333 3904 m
-3460 3904 l
-3460 3906 l
-3333 3906 l
-3333 3906 m
-3461 3906 l
-3461 3907 l
-3333 3907 l
-3334 3907 m
-3461 3907 l
-3461 3909 l
-3334 3909 l
-3334 3909 m
-3462 3909 l
-3462 3911 l
-3334 3911 l
-3335 3911 m
-3462 3911 l
-3462 3913 l
-3335 3913 l
-3335 3913 m
-3463 3913 l
-3463 3914 l
-3335 3914 l
-3336 3914 m
-3463 3914 l
-3463 3916 l
-3336 3916 l
-3336 3916 m
-3464 3916 l
-3464 3917 l
-3336 3917 l
-3337 3917 m
-3464 3917 l
-3464 3919 l
-3337 3919 l
-3337 3919 m
-3465 3919 l
-3465 3921 l
-3337 3921 l
-3338 3921 m
-3465 3921 l
-3465 3923 l
-3338 3923 l
-3338 3923 m
-3466 3923 l
-3466 3924 l
-3338 3924 l
-3339 3924 m
-3466 3924 l
-3466 3926 l
-3339 3926 l
-3339 3926 m
-3467 3926 l
-3467 3928 l
-3339 3928 l
-3340 3928 m
-3467 3928 l
-3467 3929 l
-3340 3929 l
-3340 3929 m
-3468 3929 l
-3468 3931 l
-3340 3931 l
-3341 3931 m
-3468 3931 l
-3468 3933 l
-3341 3933 l
-3341 3933 m
-3469 3933 l
-3469 3934 l
-3341 3934 l
-3342 3934 m
-3469 3934 l
-3469 3936 l
-3342 3936 l
-3342 3936 m
-3470 3936 l
-3470 3938 l
-3342 3938 l
-3343 3938 m
-3470 3938 l
-3470 3939 l
-3343 3939 l
-3343 3939 m
-3471 3939 l
-3471 3941 l
-3343 3941 l
-3344 3941 m
-3471 3941 l
-3471 3943 l
-3344 3943 l
-3344 3943 m
-3472 3943 l
-3472 3944 l
-3344 3944 l
-3345 3944 m
-3472 3944 l
-3472 3946 l
-3345 3946 l
-3345 3946 m
-3473 3946 l
-3473 3948 l
-3345 3948 l
-3346 3948 m
-3473 3948 l
-3473 3949 l
-3346 3949 l
-3346 3949 m
-3474 3949 l
-3474 3951 l
-3346 3951 l
-3347 3951 m
-3474 3951 l
-3474 3953 l
-3347 3953 l
-3347 3953 m
-3475 3953 l
-3475 3954 l
-3347 3954 l
-3348 3954 m
-3475 3954 l
-3475 3956 l
-3348 3956 l
-3348 3956 m
-3476 3956 l
-3476 3958 l
-3348 3958 l
-3349 3958 m
-3476 3958 l
-3476 3959 l
-3349 3959 l
-3349 3959 m
-3477 3959 l
-3477 3961 l
-3349 3961 l
-3350 3961 m
-3477 3961 l
-3477 3963 l
-3350 3963 l
-3350 3963 m
-3478 3963 l
-3478 3965 l
-3350 3965 l
-3351 3965 m
-3478 3965 l
-3478 3966 l
-3351 3966 l
-3351 3966 m
-3479 3966 l
-3479 3968 l
-3351 3968 l
-3352 3968 m
-3479 3968 l
-3479 3970 l
-3352 3970 l
-3352 3970 m
-3480 3970 l
-3480 3971 l
-3352 3971 l
-3353 3971 m
-3480 3971 l
-3480 3973 l
-3353 3973 l
-3353 3973 m
-3481 3973 l
-3481 3975 l
-3353 3975 l
-3354 3975 m
-3481 3975 l
-3481 3976 l
-3354 3976 l
-3354 3976 m
-3482 3976 l
-3482 3978 l
-3354 3978 l
-3355 3978 m
-3482 3978 l
-3482 3980 l
-3355 3980 l
-3355 3980 m
-3483 3980 l
-3483 3981 l
-3355 3981 l
-3356 3981 m
-3483 3981 l
-3483 3983 l
-3356 3983 l
-3356 3983 m
-3484 3983 l
-3484 3985 l
-3356 3985 l
-3357 3985 m
-3484 3985 l
-3484 3986 l
-3357 3986 l
-3357 3986 m
-3485 3986 l
-3485 3988 l
-3357 3988 l
-3358 3988 m
-3485 3988 l
-3485 3990 l
-3358 3990 l
-3358 3990 m
-3486 3990 l
-3486 3991 l
-3358 3991 l
-3359 3991 m
-3486 3991 l
-3486 3993 l
-3359 3993 l
-3359 3993 m
-3487 3993 l
-3487 3995 l
-3359 3995 l
-3360 3995 m
-3487 3995 l
-3487 3996 l
-3360 3996 l
-3360 3996 m
-3488 3996 l
-3488 3998 l
-3360 3998 l
-3361 3998 m
-3488 3998 l
-3488 4000 l
-3361 4000 l
-3361 4000 m
-3489 4000 l
-3489 4002 l
-3361 4002 l
-3362 4002 m
-3489 4002 l
-3489 4003 l
-3362 4003 l
-3362 4003 m
-3490 4003 l
-3490 4005 l
-3362 4005 l
-3363 4005 m
-3490 4005 l
-3490 4006 l
-3363 4006 l
-3363 4006 m
-3491 4006 l
-3491 4008 l
-3363 4008 l
-3364 4008 m
-3491 4008 l
-3491 4010 l
-3364 4010 l
-3364 4010 m
-3492 4010 l
-3492 4012 l
-3364 4012 l
-3365 4012 m
-3492 4012 l
-3492 4013 l
-3365 4013 l
-3365 4013 m
-3493 4013 l
-3493 4015 l
-3365 4015 l
-3366 4015 m
-3493 4015 l
-3493 4016 l
-3366 4016 l
-3366 4016 m
-3494 4016 l
-3494 4018 l
-3366 4018 l
-3367 4018 m
-3494 4018 l
-3494 4020 l
-3367 4020 l
-3367 4020 m
-3495 4020 l
-3495 4022 l
-3367 4022 l
-3368 4022 m
-3495 4022 l
-3495 4023 l
-3368 4023 l
-3368 4023 m
-3496 4023 l
-3496 4025 l
-3368 4025 l
-3369 4025 m
-3496 4025 l
-3496 4026 l
-3369 4026 l
-3369 4026 m
-3497 4026 l
-3497 4029 l
-3369 4029 l
-3370 4029 m
-3497 4029 l
-3497 4030 l
-3370 4030 l
-3370 4030 m
-3498 4030 l
-3498 4032 l
-3370 4032 l
-3371 4032 m
-3498 4032 l
-3498 4033 l
-3371 4033 l
-3371 4033 m
-3499 4033 l
-3499 4035 l
-3371 4035 l
-3372 4035 m
-3499 4035 l
-3499 4037 l
-3372 4037 l
-3372 4037 m
-3500 4037 l
-3500 4039 l
-3372 4039 l
-3373 4039 m
-3500 4039 l
-3500 4040 l
-3373 4040 l
-3373 4040 m
-3501 4040 l
-3501 4042 l
-3373 4042 l
-3374 4042 m
-3501 4042 l
-3501 4043 l
-3374 4043 l
-3374 4043 m
-3502 4043 l
-3502 4045 l
-3374 4045 l
-3375 4045 m
-3502 4045 l
-3502 4047 l
-3375 4047 l
-3375 4047 m
-3503 4047 l
-3503 4049 l
-3375 4049 l
-3376 4049 m
-3503 4049 l
-3503 4050 l
-3376 4050 l
-3376 4050 m
-3504 4050 l
-3504 4052 l
-3376 4052 l
-3377 4052 m
-3504 4052 l
-3504 4053 l
-3377 4053 l
-3377 4053 m
-3505 4053 l
-3505 4055 l
-3377 4055 l
-3378 4055 m
-3505 4055 l
-3505 4057 l
-3378 4057 l
-3378 4057 m
-3506 4057 l
-3506 4059 l
-3378 4059 l
-3379 4059 m
-3506 4059 l
-3506 4060 l
-3379 4060 l
-3379 4060 m
-3507 4060 l
-3507 4062 l
-3379 4062 l
-3380 4062 m
-3507 4062 l
-3507 4063 l
-3380 4063 l
-3380 4063 m
-3508 4063 l
-3508 4066 l
-3380 4066 l
-3381 4066 m
-3508 4066 l
-3508 4067 l
-3381 4067 l
-3381 4067 m
-3509 4067 l
-3509 4069 l
-3381 4069 l
-3382 4069 m
-3509 4069 l
-3509 4070 l
-3382 4070 l
-3382 4070 m
-3510 4070 l
-3510 4072 l
-3382 4072 l
-3383 4072 m
-3510 4072 l
-3510 4073 l
-3383 4073 l
-3383 4073 m
-3511 4073 l
-3511 4076 l
-3383 4076 l
-3384 4076 m
-3511 4076 l
-3511 4077 l
-3384 4077 l
-3384 4077 m
-3512 4077 l
-3512 4079 l
-3384 4079 l
-3385 4079 m
-3512 4079 l
-3512 4080 l
-3385 4080 l
-3385 4080 m
-3513 4080 l
-3513 4082 l
-3385 4082 l
-3386 4082 m
-3513 4082 l
-3513 4083 l
-3386 4083 l
-3386 4083 m
-3514 4083 l
-3514 4086 l
-3386 4086 l
-3387 4086 m
-3514 4086 l
-3514 4087 l
-3387 4087 l
-3387 4087 m
-3515 4087 l
-3515 4089 l
-3387 4089 l
-3388 4089 m
-3515 4089 l
-3515 4090 l
-3388 4090 l
-3388 4090 m
-3516 4090 l
-3516 4092 l
-3388 4092 l
-3389 4092 m
-3516 4092 l
-3516 4093 l
-3389 4093 l
-3389 4093 m
-3517 4093 l
-3517 4094 l
-3389 4094 l
-3389 4094 m
-3516 4094 l
-3516 4095 l
-3389 4095 l
-3389 4095 m
-3513 4095 l
-3513 4096 l
-3389 4096 l
-3390 4096 m
-3510 4096 l
-3510 4097 l
-3390 4097 l
-3390 4097 m
-3507 4097 l
-3507 4098 l
-3390 4098 l
-3390 4098 m
-3503 4098 l
-3503 4099 l
-3390 4099 l
-3391 4099 m
-3500 4099 l
-3500 4100 l
-3391 4100 l
-3391 4100 m
-3497 4100 l
-3497 4101 l
-3391 4101 l
-3391 4101 m
-3493 4101 l
-3493 4102 l
-3391 4102 l
-3391 4102 m
-3490 4102 l
-3490 4103 l
-3391 4103 l
-3392 4103 m
-3487 4103 l
-3487 4104 l
-3392 4104 l
-3392 4104 m
-3483 4104 l
-3483 4105 l
-3392 4105 l
-3392 4105 m
-3480 4105 l
-3480 4106 l
-3392 4106 l
-3393 4106 m
-3477 4106 l
-3477 4107 l
-3393 4107 l
-3393 4107 m
-3473 4107 l
-3473 4108 l
-3393 4108 l
-3393 4108 m
-3470 4108 l
-3470 4109 l
-3393 4109 l
-3394 4109 m
-3467 4109 l
-3467 4110 l
-3394 4110 l
-3394 4110 m
-3463 4110 l
-3463 4111 l
-3394 4111 l
-3394 4111 m
-3460 4111 l
-3460 4112 l
-3394 4112 l
-3394 4112 m
-3457 4112 l
-3457 4113 l
-3394 4113 l
-3395 4113 m
-3454 4113 l
-3454 4114 l
-3395 4114 l
-3395 4114 m
-3450 4114 l
-3450 4115 l
-3395 4115 l
-3395 4115 m
-3447 4115 l
-3447 4116 l
-3395 4116 l
-3396 4116 m
-3444 4116 l
-3444 4117 l
-3396 4117 l
-3396 4117 m
-3440 4117 l
-3440 4118 l
-3396 4118 l
-3396 4118 m
-3437 4118 l
-3437 4119 l
-3396 4119 l
-3397 4119 m
-3434 4119 l
-3434 4120 l
-3397 4120 l
-3397 4120 m
-3430 4120 l
-3430 4121 l
-3397 4121 l
-3397 4121 m
-3427 4121 l
-3427 4122 l
-3397 4122 l
-3397 4122 m
-3424 4122 l
-3424 4123 l
-3397 4123 l
-3398 4123 m
-3420 4123 l
-3420 4124 l
-3398 4124 l
-3398 4124 m
-3417 4124 l
-3417 4125 l
-3398 4125 l
-3398 4125 m
-3414 4125 l
-3414 4126 l
-3398 4126 l
-3399 4126 m
-3410 4126 l
-3410 4127 l
-3399 4127 l
-3399 4127 m
-3407 4127 l
-3407 4128 l
-3399 4128 l
-3399 4128 m
-3404 4128 l
-3404 4129 l
-3399 4129 l
-Y
-3433.7 3818.2 m
-3318 3853 l
-3400 4129 l
-3516 4094 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3388 3854 m
-3409 3926 l
-S
-3372 3976 m
-3385 4020 l
-3410 3987 l
-3414 3999 l
-3420 4005 l
-3425 4008 l
-3438 4009 l
-3446 4006 l
-3457 3999 l
-3463 3988 l
-3463 3975 l
-3460 3963 l
-3452 3952 l
-3447 3949 l
-3438 3948 l
-S
-3401 4072 m
-3401 4059 l
-3411 4047 l
-3430 4037 l
-3442 4034 l
-3463 4032 l
-3477 4036 l
-3485 4047 l
-3487 4055 l
-3487 4068 l
-3477 4080 l
-3458 4090 l
-3446 4093 l
-3425 4095 l
-3411 4091 l
-3403 4080 l
-3401 4072 l
-S
-1 g
-3282 4627 m
-3285 4627 l
-3285 4628 l
-3282 4628 l
-3281 4628 m
-3286 4628 l
-3286 4629 l
-3281 4629 l
-3280 4629 m
-3287 4629 l
-3287 4630 l
-3280 4630 l
-3279 4630 m
-3288 4630 l
-3288 4631 l
-3279 4631 l
-3278 4631 m
-3290 4631 l
-3290 4632 l
-3278 4632 l
-3277 4632 m
-3291 4632 l
-3291 4633 l
-3277 4633 l
-3277 4633 m
-3292 4633 l
-3292 4634 l
-3277 4634 l
-3276 4634 m
-3293 4634 l
-3293 4635 l
-3276 4635 l
-3275 4635 m
-3294 4635 l
-3294 4636 l
-3275 4636 l
-3274 4636 m
-3296 4636 l
-3296 4637 l
-3274 4637 l
-3273 4637 m
-3297 4637 l
-3297 4638 l
-3273 4638 l
-3272 4638 m
-3298 4638 l
-3298 4639 l
-3272 4639 l
-3272 4639 m
-3299 4639 l
-3299 4640 l
-3272 4640 l
-3271 4640 m
-3300 4640 l
-3300 4641 l
-3271 4641 l
-3270 4641 m
-3302 4641 l
-3302 4642 l
-3270 4642 l
-3269 4642 m
-3303 4642 l
-3303 4643 l
-3269 4643 l
-3268 4643 m
-3304 4643 l
-3304 4644 l
-3268 4644 l
-3267 4644 m
-3305 4644 l
-3305 4645 l
-3267 4645 l
-3267 4645 m
-3306 4645 l
-3306 4646 l
-3267 4646 l
-3266 4646 m
-3308 4646 l
-3308 4647 l
-3266 4647 l
-3265 4647 m
-3309 4647 l
-3309 4648 l
-3265 4648 l
-3264 4648 m
-3310 4648 l
-3310 4649 l
-3264 4649 l
-3263 4649 m
-3311 4649 l
-3311 4650 l
-3263 4650 l
-3262 4650 m
-3312 4650 l
-3312 4651 l
-3262 4651 l
-3262 4651 m
-3314 4651 l
-3314 4652 l
-3262 4652 l
-3261 4652 m
-3315 4652 l
-3315 4653 l
-3261 4653 l
-3260 4653 m
-3316 4653 l
-3316 4654 l
-3260 4654 l
-3259 4654 m
-3317 4654 l
-3317 4655 l
-3259 4655 l
-3258 4655 m
-3318 4655 l
-3318 4656 l
-3258 4656 l
-3257 4656 m
-3320 4656 l
-3320 4657 l
-3257 4657 l
-3257 4657 m
-3321 4657 l
-3321 4658 l
-3257 4658 l
-3256 4658 m
-3322 4658 l
-3322 4659 l
-3256 4659 l
-3255 4659 m
-3323 4659 l
-3323 4660 l
-3255 4660 l
-3254 4660 m
-3324 4660 l
-3324 4661 l
-3254 4661 l
-3253 4661 m
-3326 4661 l
-3326 4662 l
-3253 4662 l
-3252 4662 m
-3327 4662 l
-3327 4663 l
-3252 4663 l
-3252 4663 m
-3328 4663 l
-3328 4664 l
-3252 4664 l
-3251 4664 m
-3329 4664 l
-3329 4665 l
-3251 4665 l
-3250 4665 m
-3330 4665 l
-3330 4666 l
-3250 4666 l
-3249 4666 m
-3332 4666 l
-3332 4667 l
-3249 4667 l
-3248 4667 m
-3333 4667 l
-3333 4668 l
-3248 4668 l
-3247 4668 m
-3334 4668 l
-3334 4669 l
-3247 4669 l
-3247 4669 m
-3335 4669 l
-3335 4670 l
-3247 4670 l
-3246 4670 m
-3336 4670 l
-3336 4671 l
-3246 4671 l
-3245 4671 m
-3338 4671 l
-3338 4672 l
-3245 4672 l
-3244 4672 m
-3339 4672 l
-3339 4673 l
-3244 4673 l
-3243 4673 m
-3340 4673 l
-3340 4674 l
-3243 4674 l
-3242 4674 m
-3341 4674 l
-3341 4675 l
-3242 4675 l
-3241 4675 m
-3342 4675 l
-3342 4676 l
-3241 4676 l
-3241 4676 m
-3344 4676 l
-3344 4677 l
-3241 4677 l
-3240 4677 m
-3345 4677 l
-3345 4678 l
-3240 4678 l
-3239 4678 m
-3346 4678 l
-3346 4679 l
-3239 4679 l
-3238 4679 m
-3347 4679 l
-3347 4680 l
-3238 4680 l
-3237 4680 m
-3348 4680 l
-3348 4681 l
-3237 4681 l
-3236 4681 m
-3350 4681 l
-3350 4682 l
-3236 4682 l
-3236 4682 m
-3351 4682 l
-3351 4683 l
-3236 4683 l
-3235 4683 m
-3352 4683 l
-3352 4684 l
-3235 4684 l
-3234 4684 m
-3353 4684 l
-3353 4685 l
-3234 4685 l
-3233 4685 m
-3354 4685 l
-3354 4686 l
-3233 4686 l
-3232 4686 m
-3356 4686 l
-3356 4687 l
-3232 4687 l
-3231 4687 m
-3357 4687 l
-3357 4688 l
-3231 4688 l
-3231 4688 m
-3358 4688 l
-3358 4689 l
-3231 4689 l
-3230 4689 m
-3359 4689 l
-3359 4690 l
-3230 4690 l
-3229 4690 m
-3360 4690 l
-3360 4691 l
-3229 4691 l
-3228 4691 m
-3362 4691 l
-3362 4692 l
-3228 4692 l
-3227 4692 m
-3363 4692 l
-3363 4693 l
-3227 4693 l
-3226 4693 m
-3364 4693 l
-3364 4694 l
-3226 4694 l
-3226 4694 m
-3365 4694 l
-3365 4695 l
-3226 4695 l
-3225 4695 m
-3366 4695 l
-3366 4696 l
-3225 4696 l
-3224 4696 m
-3368 4696 l
-3368 4697 l
-3224 4697 l
-3223 4697 m
-3369 4697 l
-3369 4698 l
-3223 4698 l
-3222 4698 m
-3370 4698 l
-3370 4699 l
-3222 4699 l
-3221 4699 m
-3371 4699 l
-3371 4700 l
-3221 4700 l
-3221 4700 m
-3372 4700 l
-3372 4701 l
-3221 4701 l
-3220 4701 m
-3374 4701 l
-3374 4702 l
-3220 4702 l
-3219 4702 m
-3375 4702 l
-3375 4703 l
-3219 4703 l
-3218 4703 m
-3376 4703 l
-3376 4704 l
-3218 4704 l
-3217 4704 m
-3376 4704 l
-3376 4705 l
-3217 4705 l
-3216 4705 m
-3376 4705 l
-3376 4706 l
-3216 4706 l
-3216 4706 m
-3375 4706 l
-3375 4707 l
-3216 4707 l
-3215 4707 m
-3374 4707 l
-3374 4708 l
-3215 4708 l
-3214 4708 m
-3373 4708 l
-3373 4709 l
-3214 4709 l
-3213 4709 m
-3372 4709 l
-3372 4710 l
-3213 4710 l
-3212 4710 m
-3372 4710 l
-3372 4711 l
-3212 4711 l
-3211 4711 m
-3371 4711 l
-3371 4712 l
-3211 4712 l
-3211 4712 m
-3370 4712 l
-3370 4713 l
-3211 4713 l
-3210 4713 m
-3369 4713 l
-3369 4714 l
-3210 4714 l
-3209 4714 m
-3368 4714 l
-3368 4715 l
-3209 4715 l
-3208 4715 m
-3367 4715 l
-3367 4716 l
-3208 4716 l
-3207 4716 m
-3367 4716 l
-3367 4717 l
-3207 4717 l
-3206 4717 m
-3366 4717 l
-3366 4718 l
-3206 4718 l
-3206 4718 m
-3365 4718 l
-3365 4719 l
-3206 4719 l
-3205 4719 m
-3364 4719 l
-3364 4720 l
-3205 4720 l
-3204 4720 m
-3363 4720 l
-3363 4721 l
-3204 4721 l
-3203 4721 m
-3362 4721 l
-3362 4722 l
-3203 4722 l
-3202 4722 m
-3362 4722 l
-3362 4723 l
-3202 4723 l
-3201 4723 m
-3361 4723 l
-3361 4724 l
-3201 4724 l
-3200 4724 m
-3360 4724 l
-3360 4725 l
-3200 4725 l
-3200 4725 m
-3359 4725 l
-3359 4726 l
-3200 4726 l
-3199 4726 m
-3358 4726 l
-3358 4727 l
-3199 4727 l
-3198 4727 m
-3358 4727 l
-3358 4728 l
-3198 4728 l
-3197 4728 m
-3357 4728 l
-3357 4729 l
-3197 4729 l
-3196 4729 m
-3356 4729 l
-3356 4730 l
-3196 4730 l
-3195 4730 m
-3355 4730 l
-3355 4731 l
-3195 4731 l
-3195 4731 m
-3354 4731 l
-3354 4732 l
-3195 4732 l
-3194 4732 m
-3353 4732 l
-3353 4733 l
-3194 4733 l
-3193 4733 m
-3353 4733 l
-3353 4734 l
-3193 4734 l
-3192 4734 m
-3352 4734 l
-3352 4735 l
-3192 4735 l
-3191 4735 m
-3351 4735 l
-3351 4736 l
-3191 4736 l
-3190 4736 m
-3350 4736 l
-3350 4737 l
-3190 4737 l
-3190 4737 m
-3349 4737 l
-3349 4738 l
-3190 4738 l
-3189 4738 m
-3348 4738 l
-3348 4739 l
-3189 4739 l
-3188 4739 m
-3348 4739 l
-3348 4740 l
-3188 4740 l
-3187 4740 m
-3347 4740 l
-3347 4741 l
-3187 4741 l
-3186 4741 m
-3346 4741 l
-3346 4742 l
-3186 4742 l
-3185 4742 m
-3345 4742 l
-3345 4743 l
-3185 4743 l
-3185 4743 m
-3344 4743 l
-3344 4744 l
-3185 4744 l
-3184 4744 m
-3344 4744 l
-3344 4745 l
-3184 4745 l
-3183 4745 m
-3343 4745 l
-3343 4746 l
-3183 4746 l
-3182 4746 m
-3342 4746 l
-3342 4747 l
-3182 4747 l
-3181 4747 m
-3341 4747 l
-3341 4748 l
-3181 4748 l
-3180 4748 m
-3340 4748 l
-3340 4749 l
-3180 4749 l
-3180 4749 m
-3339 4749 l
-3339 4750 l
-3180 4750 l
-3179 4750 m
-3339 4750 l
-3339 4751 l
-3179 4751 l
-3178 4751 m
-3338 4751 l
-3338 4752 l
-3178 4752 l
-3177 4752 m
-3337 4752 l
-3337 4753 l
-3177 4753 l
-3176 4753 m
-3336 4753 l
-3336 4754 l
-3176 4754 l
-3175 4754 m
-3335 4754 l
-3335 4755 l
-3175 4755 l
-3175 4755 m
-3334 4755 l
-3334 4756 l
-3175 4756 l
-3174 4756 m
-3334 4756 l
-3334 4757 l
-3174 4757 l
-3173 4757 m
-3333 4757 l
-3333 4758 l
-3173 4758 l
-3172 4758 m
-3332 4758 l
-3332 4759 l
-3172 4759 l
-3171 4759 m
-3331 4759 l
-3331 4760 l
-3171 4760 l
-3170 4760 m
-3330 4760 l
-3330 4762 l
-3170 4762 l
-3169 4762 m
-3329 4762 l
-3329 4763 l
-3169 4763 l
-3168 4763 m
-3328 4763 l
-3328 4764 l
-3168 4764 l
-3167 4764 m
-3327 4764 l
-3327 4765 l
-3167 4765 l
-3166 4765 m
-3326 4765 l
-3326 4766 l
-3166 4766 l
-3165 4766 m
-3325 4766 l
-3325 4767 l
-3165 4767 l
-3165 4767 m
-3325 4767 l
-3325 4768 l
-3165 4768 l
-3165 4768 m
-3324 4768 l
-3324 4769 l
-3165 4769 l
-3166 4769 m
-3323 4769 l
-3323 4770 l
-3166 4770 l
-3167 4770 m
-3322 4770 l
-3322 4771 l
-3167 4771 l
-3168 4771 m
-3321 4771 l
-3321 4772 l
-3168 4772 l
-3169 4772 m
-3320 4772 l
-3320 4773 l
-3169 4773 l
-3171 4773 m
-3320 4773 l
-3320 4774 l
-3171 4774 l
-3172 4774 m
-3319 4774 l
-3319 4775 l
-3172 4775 l
-3173 4775 m
-3318 4775 l
-3318 4776 l
-3173 4776 l
-3174 4776 m
-3317 4776 l
-3317 4777 l
-3174 4777 l
-3175 4777 m
-3316 4777 l
-3316 4778 l
-3175 4778 l
-3177 4778 m
-3316 4778 l
-3316 4779 l
-3177 4779 l
-3178 4779 m
-3315 4779 l
-3315 4780 l
-3178 4780 l
-3179 4780 m
-3314 4780 l
-3314 4781 l
-3179 4781 l
-3180 4781 m
-3313 4781 l
-3313 4782 l
-3180 4782 l
-3181 4782 m
-3312 4782 l
-3312 4783 l
-3181 4783 l
-3183 4783 m
-3311 4783 l
-3311 4784 l
-3183 4784 l
-3184 4784 m
-3311 4784 l
-3311 4785 l
-3184 4785 l
-3185 4785 m
-3310 4785 l
-3310 4786 l
-3185 4786 l
-3186 4786 m
-3309 4786 l
-3309 4787 l
-3186 4787 l
-3187 4787 m
-3308 4787 l
-3308 4788 l
-3187 4788 l
-3189 4788 m
-3307 4788 l
-3307 4789 l
-3189 4789 l
-3190 4789 m
-3306 4789 l
-3306 4790 l
-3190 4790 l
-3191 4790 m
-3306 4790 l
-3306 4791 l
-3191 4791 l
-3192 4791 m
-3305 4791 l
-3305 4792 l
-3192 4792 l
-3193 4792 m
-3304 4792 l
-3304 4793 l
-3193 4793 l
-3195 4793 m
-3303 4793 l
-3303 4794 l
-3195 4794 l
-3196 4794 m
-3302 4794 l
-3302 4795 l
-3196 4795 l
-3197 4795 m
-3302 4795 l
-3302 4796 l
-3197 4796 l
-3198 4796 m
-3301 4796 l
-3301 4797 l
-3198 4797 l
-3199 4797 m
-3300 4797 l
-3300 4798 l
-3199 4798 l
-3201 4798 m
-3299 4798 l
-3299 4799 l
-3201 4799 l
-3202 4799 m
-3298 4799 l
-3298 4800 l
-3202 4800 l
-3203 4800 m
-3297 4800 l
-3297 4801 l
-3203 4801 l
-3204 4801 m
-3297 4801 l
-3297 4802 l
-3204 4802 l
-3205 4802 m
-3296 4802 l
-3296 4803 l
-3205 4803 l
-3207 4803 m
-3295 4803 l
-3295 4804 l
-3207 4804 l
-3208 4804 m
-3294 4804 l
-3294 4805 l
-3208 4805 l
-3209 4805 m
-3293 4805 l
-3293 4806 l
-3209 4806 l
-3210 4806 m
-3292 4806 l
-3292 4807 l
-3210 4807 l
-3212 4807 m
-3292 4807 l
-3292 4808 l
-3212 4808 l
-3213 4808 m
-3291 4808 l
-3291 4809 l
-3213 4809 l
-3214 4809 m
-3290 4809 l
-3290 4810 l
-3214 4810 l
-3215 4810 m
-3289 4810 l
-3289 4811 l
-3215 4811 l
-3216 4811 m
-3288 4811 l
-3288 4812 l
-3216 4812 l
-3218 4812 m
-3288 4812 l
-3288 4813 l
-3218 4813 l
-3219 4813 m
-3287 4813 l
-3287 4814 l
-3219 4814 l
-3220 4814 m
-3286 4814 l
-3286 4815 l
-3220 4815 l
-3221 4815 m
-3285 4815 l
-3285 4816 l
-3221 4816 l
-3222 4816 m
-3284 4816 l
-3284 4817 l
-3222 4817 l
-3224 4817 m
-3283 4817 l
-3283 4818 l
-3224 4818 l
-3225 4818 m
-3283 4818 l
-3283 4819 l
-3225 4819 l
-3226 4819 m
-3282 4819 l
-3282 4820 l
-3226 4820 l
-3227 4820 m
-3281 4820 l
-3281 4821 l
-3227 4821 l
-3228 4821 m
-3280 4821 l
-3280 4822 l
-3228 4822 l
-3230 4822 m
-3279 4822 l
-3279 4823 l
-3230 4823 l
-3231 4823 m
-3278 4823 l
-3278 4824 l
-3231 4824 l
-3232 4824 m
-3278 4824 l
-3278 4825 l
-3232 4825 l
-3233 4825 m
-3277 4825 l
-3277 4826 l
-3233 4826 l
-3234 4826 m
-3276 4826 l
-3276 4827 l
-3234 4827 l
-3236 4827 m
-3275 4827 l
-3275 4828 l
-3236 4828 l
-3237 4828 m
-3274 4828 l
-3274 4829 l
-3237 4829 l
-3238 4829 m
-3274 4829 l
-3274 4830 l
-3238 4830 l
-3239 4830 m
-3273 4830 l
-3273 4831 l
-3239 4831 l
-3240 4831 m
-3272 4831 l
-3272 4832 l
-3240 4832 l
-3242 4832 m
-3271 4832 l
-3271 4833 l
-3242 4833 l
-3243 4833 m
-3270 4833 l
-3270 4834 l
-3243 4834 l
-3244 4834 m
-3269 4834 l
-3269 4835 l
-3244 4835 l
-3245 4835 m
-3269 4835 l
-3269 4836 l
-3245 4836 l
-3246 4836 m
-3268 4836 l
-3268 4837 l
-3246 4837 l
-3248 4837 m
-3267 4837 l
-3267 4838 l
-3248 4838 l
-3249 4838 m
-3266 4838 l
-3266 4839 l
-3249 4839 l
-3250 4839 m
-3265 4839 l
-3265 4840 l
-3250 4840 l
-3251 4840 m
-3264 4840 l
-3264 4841 l
-3251 4841 l
-3252 4841 m
-3264 4841 l
-3264 4842 l
-3252 4842 l
-3254 4842 m
-3263 4842 l
-3263 4843 l
-3254 4843 l
-3255 4843 m
-3262 4843 l
-3262 4844 l
-3255 4844 l
-3256 4844 m
-3261 4844 l
-3261 4845 l
-3256 4845 l
-3257 4845 m
-3260 4845 l
-3260 4846 l
-3257 4846 l
-Y
-3375.8 4704.2 m
-3283 4627 l
-3165 4768 l
-3259 4846 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3277 4660 m
-3247 4695 l
-3289 4698 l
-3281 4707 l
-3279 4716 l
-3280 4722 l
-3287 4733 l
-3293 4739 l
-3305 4743 l
-3317 4742 l
-3328 4735 l
-3336 4726 l
-3341 4713 l
-3341 4708 l
-3337 4699 l
-S
-3213 4737 m
-3224 4730 l
-3239 4732 l
-3258 4742 l
-3267 4750 l
-3281 4767 l
-3285 4781 l
-3280 4793 l
-3275 4800 l
-3264 4807 l
-3249 4805 l
-3230 4795 l
-3220 4787 l
-3207 4770 l
-3203 4756 l
-3207 4744 l
-3213 4737 l
-S
-1 g
-2920 4919 m
-2925 4919 l
-2925 4920 l
-2920 4920 l
-2916 4920 m
-2925 4920 l
-2925 4921 l
-2916 4921 l
-2913 4921 m
-2925 4921 l
-2925 4922 l
-2913 4922 l
-2909 4922 m
-2926 4922 l
-2926 4923 l
-2909 4923 l
-2906 4923 m
-2926 4923 l
-2926 4924 l
-2906 4924 l
-2902 4924 m
-2926 4924 l
-2926 4925 l
-2902 4925 l
-2899 4925 m
-2927 4925 l
-2927 4926 l
-2899 4926 l
-2895 4926 m
-2927 4926 l
-2927 4927 l
-2895 4927 l
-2892 4927 m
-2927 4927 l
-2927 4928 l
-2892 4928 l
-2888 4928 m
-2927 4928 l
-2927 4929 l
-2888 4929 l
-2885 4929 m
-2928 4929 l
-2928 4930 l
-2885 4930 l
-2881 4930 m
-2928 4930 l
-2928 4931 l
-2881 4931 l
-2878 4931 m
-2928 4931 l
-2928 4932 l
-2878 4932 l
-2874 4932 m
-2929 4932 l
-2929 4933 l
-2874 4933 l
-2871 4933 m
-2929 4933 l
-2929 4934 l
-2871 4934 l
-2867 4934 m
-2929 4934 l
-2929 4935 l
-2867 4935 l
-2864 4935 m
-2929 4935 l
-2929 4936 l
-2864 4936 l
-2860 4936 m
-2930 4936 l
-2930 4937 l
-2860 4937 l
-2857 4937 m
-2930 4937 l
-2930 4938 l
-2857 4938 l
-2853 4938 m
-2930 4938 l
-2930 4939 l
-2853 4939 l
-2850 4939 m
-2931 4939 l
-2931 4940 l
-2850 4940 l
-2846 4940 m
-2931 4940 l
-2931 4941 l
-2846 4941 l
-2843 4941 m
-2931 4941 l
-2931 4942 l
-2843 4942 l
-2839 4942 m
-2931 4942 l
-2931 4943 l
-2839 4943 l
-2836 4943 m
-2932 4943 l
-2932 4944 l
-2836 4944 l
-2832 4944 m
-2932 4944 l
-2932 4945 l
-2832 4945 l
-2829 4945 m
-2932 4945 l
-2932 4946 l
-2829 4946 l
-2825 4946 m
-2933 4946 l
-2933 4947 l
-2825 4947 l
-2822 4947 m
-2933 4947 l
-2933 4948 l
-2822 4948 l
-2818 4948 m
-2933 4948 l
-2933 4949 l
-2818 4949 l
-2815 4949 m
-2933 4949 l
-2933 4950 l
-2815 4950 l
-2811 4950 m
-2934 4950 l
-2934 4951 l
-2811 4951 l
-2808 4951 m
-2934 4951 l
-2934 4952 l
-2808 4952 l
-2804 4952 m
-2934 4952 l
-2934 4953 l
-2804 4953 l
-2801 4953 m
-2935 4953 l
-2935 4954 l
-2801 4954 l
-2797 4954 m
-2935 4954 l
-2935 4955 l
-2797 4955 l
-2794 4955 m
-2935 4955 l
-2935 4956 l
-2794 4956 l
-2790 4956 m
-2935 4956 l
-2935 4957 l
-2790 4957 l
-2787 4957 m
-2936 4957 l
-2936 4958 l
-2787 4958 l
-2783 4958 m
-2936 4958 l
-2936 4959 l
-2783 4959 l
-2780 4959 m
-2936 4959 l
-2936 4960 l
-2780 4960 l
-2776 4960 m
-2937 4960 l
-2937 4961 l
-2776 4961 l
-2773 4961 m
-2937 4961 l
-2937 4962 l
-2773 4962 l
-2769 4962 m
-2937 4962 l
-2937 4963 l
-2769 4963 l
-2766 4963 m
-2937 4963 l
-2937 4964 l
-2766 4964 l
-2762 4964 m
-2938 4964 l
-2938 4965 l
-2762 4965 l
-2759 4965 m
-2938 4965 l
-2938 4966 l
-2759 4966 l
-2755 4966 m
-2938 4966 l
-2938 4967 l
-2755 4967 l
-2752 4967 m
-2939 4967 l
-2939 4968 l
-2752 4968 l
-2752 4968 m
-2939 4968 l
-2939 4971 l
-2752 4971 l
-2752 4971 m
-2940 4971 l
-2940 4972 l
-2752 4972 l
-2753 4972 m
-2940 4972 l
-2940 4974 l
-2753 4974 l
-2753 4974 m
-2941 4974 l
-2941 4976 l
-2753 4976 l
-2754 4976 m
-2941 4976 l
-2941 4978 l
-2754 4978 l
-2754 4978 m
-2942 4978 l
-2942 4979 l
-2754 4979 l
-2755 4979 m
-2942 4979 l
-2942 4981 l
-2755 4981 l
-2755 4981 m
-2943 4981 l
-2943 4983 l
-2755 4983 l
-2756 4983 m
-2943 4983 l
-2943 4985 l
-2756 4985 l
-2756 4985 m
-2944 4985 l
-2944 4986 l
-2756 4986 l
-2757 4986 m
-2944 4986 l
-2944 4988 l
-2757 4988 l
-2757 4988 m
-2945 4988 l
-2945 4990 l
-2757 4990 l
-2758 4990 m
-2945 4990 l
-2945 4992 l
-2758 4992 l
-2758 4992 m
-2946 4992 l
-2946 4993 l
-2758 4993 l
-2759 4993 m
-2946 4993 l
-2946 4995 l
-2759 4995 l
-2759 4995 m
-2947 4995 l
-2947 4997 l
-2759 4997 l
-2760 4997 m
-2947 4997 l
-2947 4999 l
-2760 4999 l
-2760 4999 m
-2948 4999 l
-2948 5000 l
-2760 5000 l
-2761 5000 m
-2948 5000 l
-2948 5002 l
-2761 5002 l
-2761 5002 m
-2949 5002 l
-2949 5004 l
-2761 5004 l
-2762 5004 m
-2949 5004 l
-2949 5006 l
-2762 5006 l
-2762 5006 m
-2950 5006 l
-2950 5007 l
-2762 5007 l
-2763 5007 m
-2950 5007 l
-2950 5009 l
-2763 5009 l
-2763 5009 m
-2951 5009 l
-2951 5011 l
-2763 5011 l
-2764 5011 m
-2951 5011 l
-2951 5013 l
-2764 5013 l
-2764 5013 m
-2952 5013 l
-2952 5015 l
-2764 5015 l
-2765 5015 m
-2952 5015 l
-2952 5016 l
-2765 5016 l
-2765 5016 m
-2953 5016 l
-2953 5018 l
-2765 5018 l
-2766 5018 m
-2953 5018 l
-2953 5020 l
-2766 5020 l
-2766 5020 m
-2954 5020 l
-2954 5022 l
-2766 5022 l
-2767 5022 m
-2954 5022 l
-2954 5023 l
-2767 5023 l
-2767 5023 m
-2955 5023 l
-2955 5025 l
-2767 5025 l
-2768 5025 m
-2955 5025 l
-2955 5026 l
-2768 5026 l
-2768 5026 m
-2956 5026 l
-2956 5029 l
-2768 5029 l
-2769 5029 m
-2956 5029 l
-2956 5030 l
-2769 5030 l
-2769 5030 m
-2957 5030 l
-2957 5032 l
-2769 5032 l
-2770 5032 m
-2957 5032 l
-2957 5033 l
-2770 5033 l
-2770 5033 m
-2958 5033 l
-2958 5035 l
-2770 5035 l
-2770 5035 m
-2958 5035 l
-2958 5036 l
-2770 5036 l
-2771 5036 m
-2957 5036 l
-2957 5037 l
-2771 5037 l
-2771 5037 m
-2953 5037 l
-2953 5038 l
-2771 5038 l
-2771 5038 m
-2950 5038 l
-2950 5039 l
-2771 5039 l
-2772 5039 m
-2946 5039 l
-2946 5040 l
-2772 5040 l
-2772 5040 m
-2943 5040 l
-2943 5041 l
-2772 5041 l
-2772 5041 m
-2939 5041 l
-2939 5042 l
-2772 5042 l
-2772 5042 m
-2936 5042 l
-2936 5043 l
-2772 5043 l
-2773 5043 m
-2932 5043 l
-2932 5044 l
-2773 5044 l
-2773 5044 m
-2929 5044 l
-2929 5045 l
-2773 5045 l
-2773 5045 m
-2925 5045 l
-2925 5046 l
-2773 5046 l
-2774 5046 m
-2922 5046 l
-2922 5047 l
-2774 5047 l
-2774 5047 m
-2918 5047 l
-2918 5048 l
-2774 5048 l
-2774 5048 m
-2915 5048 l
-2915 5049 l
-2774 5049 l
-2774 5049 m
-2911 5049 l
-2911 5050 l
-2774 5050 l
-2775 5050 m
-2908 5050 l
-2908 5051 l
-2775 5051 l
-2775 5051 m
-2904 5051 l
-2904 5052 l
-2775 5052 l
-2775 5052 m
-2901 5052 l
-2901 5053 l
-2775 5053 l
-2775 5053 m
-2897 5053 l
-2897 5054 l
-2775 5054 l
-2776 5054 m
-2894 5054 l
-2894 5055 l
-2776 5055 l
-2776 5055 m
-2890 5055 l
-2890 5056 l
-2776 5056 l
-2776 5056 m
-2887 5056 l
-2887 5057 l
-2776 5057 l
-2777 5057 m
-2883 5057 l
-2883 5058 l
-2777 5058 l
-2777 5058 m
-2880 5058 l
-2880 5059 l
-2777 5059 l
-2777 5059 m
-2876 5059 l
-2876 5060 l
-2777 5060 l
-2777 5060 m
-2873 5060 l
-2873 5061 l
-2777 5061 l
-2778 5061 m
-2869 5061 l
-2869 5062 l
-2778 5062 l
-2778 5062 m
-2866 5062 l
-2866 5063 l
-2778 5063 l
-2778 5063 m
-2862 5063 l
-2862 5064 l
-2778 5064 l
-2779 5064 m
-2859 5064 l
-2859 5065 l
-2779 5065 l
-2779 5065 m
-2855 5065 l
-2855 5066 l
-2779 5066 l
-2779 5066 m
-2852 5066 l
-2852 5067 l
-2779 5067 l
-2779 5067 m
-2848 5067 l
-2848 5068 l
-2779 5068 l
-2780 5068 m
-2845 5068 l
-2845 5069 l
-2780 5069 l
-2780 5069 m
-2841 5069 l
-2841 5070 l
-2780 5070 l
-2780 5070 m
-2838 5070 l
-2838 5071 l
-2780 5071 l
-2781 5071 m
-2834 5071 l
-2834 5072 l
-2781 5072 l
-2781 5072 m
-2831 5072 l
-2831 5073 l
-2781 5073 l
-2781 5073 m
-2827 5073 l
-2827 5074 l
-2781 5074 l
-2781 5074 m
-2824 5074 l
-2824 5075 l
-2781 5075 l
-2782 5075 m
-2820 5075 l
-2820 5076 l
-2782 5076 l
-2782 5076 m
-2817 5076 l
-2817 5077 l
-2782 5077 l
-2782 5077 m
-2813 5077 l
-2813 5078 l
-2782 5078 l
-2783 5078 m
-2810 5078 l
-2810 5079 l
-2783 5079 l
-2783 5079 m
-2806 5079 l
-2806 5080 l
-2783 5080 l
-2783 5080 m
-2803 5080 l
-2803 5081 l
-2783 5081 l
-2783 5081 m
-2799 5081 l
-2799 5082 l
-2783 5082 l
-2784 5082 m
-2796 5082 l
-2796 5083 l
-2784 5083 l
-2784 5083 m
-2792 5083 l
-2792 5084 l
-2784 5084 l
-2784 5084 m
-2789 5084 l
-2789 5085 l
-2784 5085 l
-Y
-2957.5 5035.7 m
-2924 4919 l
-2752 4968 l
-2785 5085 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2864 4967 m
-2866 4958 l
-2877 4950 l
-2885 4948 l
-2898 4948 l
-2909 4958 l
-2919 4977 l
-2925 4997 l
-2925 5014 l
-2920 5025 l
-2909 5032 l
-2905 5033 l
-2892 5033 l
-2881 5027 l
-2874 5016 l
-2873 5012 l
-2873 4999 l
-2879 4989 l
-2890 4981 l
-2894 4980 l
-2907 4981 l
-2917 4986 l
-2925 4997 l
-S
-2808 4970 m
-2822 4970 l
-2833 4980 l
-2843 4999 l
-2846 5011 l
-2848 5032 l
-2843 5046 l
-2832 5054 l
-2824 5056 l
-2811 5056 l
-2800 5046 l
-2790 5027 l
-2787 5015 l
-2785 4994 l
-2789 4979 l
-2800 4972 l
-2808 4970 l
-S
-1 g
-2198 4859 m
-2203 4859 l
-2203 4860 l
-2198 4860 l
-2198 4860 m
-2205 4860 l
-2205 4861 l
-2198 4861 l
-2197 4861 m
-2208 4861 l
-2208 4862 l
-2197 4862 l
-2197 4862 m
-2210 4862 l
-2210 4863 l
-2197 4863 l
-2196 4863 m
-2213 4863 l
-2213 4864 l
-2196 4864 l
-2196 4864 m
-2215 4864 l
-2215 4865 l
-2196 4865 l
-2196 4865 m
-2218 4865 l
-2218 4866 l
-2196 4866 l
-2195 4866 m
-2220 4866 l
-2220 4867 l
-2195 4867 l
-2195 4867 m
-2223 4867 l
-2223 4868 l
-2195 4868 l
-2194 4868 m
-2225 4868 l
-2225 4869 l
-2194 4869 l
-2194 4869 m
-2228 4869 l
-2228 4870 l
-2194 4870 l
-2194 4870 m
-2230 4870 l
-2230 4871 l
-2194 4871 l
-2193 4871 m
-2233 4871 l
-2233 4872 l
-2193 4872 l
-2193 4872 m
-2235 4872 l
-2235 4873 l
-2193 4873 l
-2192 4873 m
-2238 4873 l
-2238 4874 l
-2192 4874 l
-2192 4874 m
-2240 4874 l
-2240 4875 l
-2192 4875 l
-2192 4875 m
-2243 4875 l
-2243 4876 l
-2192 4876 l
-2191 4876 m
-2245 4876 l
-2245 4877 l
-2191 4877 l
-2191 4877 m
-2248 4877 l
-2248 4878 l
-2191 4878 l
-2190 4878 m
-2250 4878 l
-2250 4879 l
-2190 4879 l
-2190 4879 m
-2253 4879 l
-2253 4880 l
-2190 4880 l
-2190 4880 m
-2255 4880 l
-2255 4881 l
-2190 4881 l
-2189 4881 m
-2258 4881 l
-2258 4882 l
-2189 4882 l
-2189 4882 m
-2260 4882 l
-2260 4883 l
-2189 4883 l
-2188 4883 m
-2263 4883 l
-2263 4884 l
-2188 4884 l
-2188 4884 m
-2265 4884 l
-2265 4885 l
-2188 4885 l
-2188 4885 m
-2268 4885 l
-2268 4886 l
-2188 4886 l
-2187 4886 m
-2270 4886 l
-2270 4887 l
-2187 4887 l
-2187 4887 m
-2273 4887 l
-2273 4888 l
-2187 4888 l
-2186 4888 m
-2275 4888 l
-2275 4889 l
-2186 4889 l
-2186 4889 m
-2278 4889 l
-2278 4890 l
-2186 4890 l
-2186 4890 m
-2280 4890 l
-2280 4891 l
-2186 4891 l
-2185 4891 m
-2283 4891 l
-2283 4892 l
-2185 4892 l
-2185 4892 m
-2285 4892 l
-2285 4893 l
-2185 4893 l
-2184 4893 m
-2288 4893 l
-2288 4894 l
-2184 4894 l
-2184 4894 m
-2290 4894 l
-2290 4895 l
-2184 4895 l
-2184 4895 m
-2293 4895 l
-2293 4896 l
-2184 4896 l
-2183 4896 m
-2295 4896 l
-2295 4897 l
-2183 4897 l
-2183 4897 m
-2298 4897 l
-2298 4898 l
-2183 4898 l
-2182 4898 m
-2300 4898 l
-2300 4899 l
-2182 4899 l
-2182 4899 m
-2303 4899 l
-2303 4900 l
-2182 4900 l
-2182 4900 m
-2305 4900 l
-2305 4901 l
-2182 4901 l
-2181 4901 m
-2308 4901 l
-2308 4902 l
-2181 4902 l
-2181 4902 m
-2310 4902 l
-2310 4903 l
-2181 4903 l
-2180 4903 m
-2313 4903 l
-2313 4904 l
-2180 4904 l
-2180 4904 m
-2315 4904 l
-2315 4905 l
-2180 4905 l
-2180 4905 m
-2318 4905 l
-2318 4906 l
-2180 4906 l
-2179 4906 m
-2320 4906 l
-2320 4907 l
-2179 4907 l
-2179 4907 m
-2323 4907 l
-2323 4908 l
-2179 4908 l
-2178 4908 m
-2325 4908 l
-2325 4909 l
-2178 4909 l
-2178 4909 m
-2328 4909 l
-2328 4910 l
-2178 4910 l
-2178 4910 m
-2330 4910 l
-2330 4911 l
-2178 4911 l
-2177 4911 m
-2333 4911 l
-2333 4912 l
-2177 4912 l
-2177 4912 m
-2335 4912 l
-2335 4913 l
-2177 4913 l
-2176 4913 m
-2338 4913 l
-2338 4914 l
-2176 4914 l
-2176 4914 m
-2340 4914 l
-2340 4915 l
-2176 4915 l
-2176 4915 m
-2343 4915 l
-2343 4916 l
-2176 4916 l
-2175 4916 m
-2345 4916 l
-2345 4917 l
-2175 4917 l
-2175 4917 m
-2348 4917 l
-2348 4918 l
-2175 4918 l
-2174 4918 m
-2350 4918 l
-2350 4919 l
-2174 4919 l
-2174 4919 m
-2353 4919 l
-2353 4920 l
-2174 4920 l
-2174 4920 m
-2355 4920 l
-2355 4921 l
-2174 4921 l
-2173 4921 m
-2358 4921 l
-2358 4922 l
-2173 4922 l
-2173 4922 m
-2360 4922 l
-2360 4923 l
-2173 4923 l
-2172 4923 m
-2363 4923 l
-2363 4924 l
-2172 4924 l
-2172 4924 m
-2365 4924 l
-2365 4925 l
-2172 4925 l
-2172 4925 m
-2368 4925 l
-2368 4926 l
-2172 4926 l
-2171 4926 m
-2370 4926 l
-2370 4927 l
-2171 4927 l
-2171 4927 m
-2370 4927 l
-2370 4928 l
-2171 4928 l
-2170 4928 m
-2370 4928 l
-2370 4930 l
-2170 4930 l
-2170 4930 m
-2369 4930 l
-2369 4931 l
-2170 4931 l
-2169 4931 m
-2369 4931 l
-2369 4932 l
-2169 4932 l
-2169 4932 m
-2368 4932 l
-2368 4933 l
-2169 4933 l
-2168 4933 m
-2368 4933 l
-2368 4935 l
-2168 4935 l
-2168 4935 m
-2367 4935 l
-2367 4936 l
-2168 4936 l
-2167 4936 m
-2367 4936 l
-2367 4937 l
-2167 4937 l
-2167 4937 m
-2366 4937 l
-2366 4938 l
-2167 4938 l
-2166 4938 m
-2366 4938 l
-2366 4940 l
-2166 4940 l
-2166 4940 m
-2365 4940 l
-2365 4941 l
-2166 4941 l
-2165 4941 m
-2365 4941 l
-2365 4942 l
-2165 4942 l
-2165 4942 m
-2364 4942 l
-2364 4943 l
-2165 4943 l
-2164 4943 m
-2364 4943 l
-2364 4945 l
-2164 4945 l
-2164 4945 m
-2363 4945 l
-2363 4946 l
-2164 4946 l
-2163 4946 m
-2363 4946 l
-2363 4947 l
-2163 4947 l
-2163 4947 m
-2362 4947 l
-2362 4948 l
-2163 4948 l
-2162 4948 m
-2362 4948 l
-2362 4950 l
-2162 4950 l
-2162 4950 m
-2361 4950 l
-2361 4951 l
-2162 4951 l
-2161 4951 m
-2361 4951 l
-2361 4952 l
-2161 4952 l
-2161 4952 m
-2360 4952 l
-2360 4953 l
-2161 4953 l
-2160 4953 m
-2360 4953 l
-2360 4955 l
-2160 4955 l
-2160 4955 m
-2359 4955 l
-2359 4956 l
-2160 4956 l
-2159 4956 m
-2359 4956 l
-2359 4957 l
-2159 4957 l
-2159 4957 m
-2358 4957 l
-2358 4958 l
-2159 4958 l
-2158 4958 m
-2358 4958 l
-2358 4959 l
-2158 4959 l
-2158 4959 m
-2357 4959 l
-2357 4961 l
-2158 4961 l
-2157 4961 m
-2357 4961 l
-2357 4962 l
-2157 4962 l
-2157 4962 m
-2356 4962 l
-2356 4963 l
-2157 4963 l
-2156 4963 m
-2356 4963 l
-2356 4964 l
-2156 4964 l
-2156 4964 m
-2355 4964 l
-2355 4966 l
-2156 4966 l
-2155 4966 m
-2355 4966 l
-2355 4967 l
-2155 4967 l
-2155 4967 m
-2354 4967 l
-2354 4968 l
-2155 4968 l
-2154 4968 m
-2354 4968 l
-2354 4969 l
-2154 4969 l
-2154 4969 m
-2353 4969 l
-2353 4971 l
-2154 4971 l
-2154 4971 m
-2353 4971 l
-2353 4972 l
-2154 4972 l
-2156 4972 m
-2352 4972 l
-2352 4973 l
-2156 4973 l
-2158 4973 m
-2352 4973 l
-2352 4974 l
-2158 4974 l
-2161 4974 m
-2351 4974 l
-2351 4975 l
-2161 4975 l
-2163 4975 m
-2351 4975 l
-2351 4976 l
-2163 4976 l
-2166 4976 m
-2351 4976 l
-2351 4977 l
-2166 4977 l
-2168 4977 m
-2350 4977 l
-2350 4978 l
-2168 4978 l
-2171 4978 m
-2350 4978 l
-2350 4979 l
-2171 4979 l
-2173 4979 m
-2349 4979 l
-2349 4980 l
-2173 4980 l
-2176 4980 m
-2349 4980 l
-2349 4981 l
-2176 4981 l
-2178 4981 m
-2349 4981 l
-2349 4982 l
-2178 4982 l
-2181 4982 m
-2348 4982 l
-2348 4983 l
-2181 4983 l
-2183 4983 m
-2348 4983 l
-2348 4984 l
-2183 4984 l
-2186 4984 m
-2347 4984 l
-2347 4985 l
-2186 4985 l
-2188 4985 m
-2347 4985 l
-2347 4986 l
-2188 4986 l
-2190 4986 m
-2346 4986 l
-2346 4987 l
-2190 4987 l
-2193 4987 m
-2346 4987 l
-2346 4988 l
-2193 4988 l
-2195 4988 m
-2346 4988 l
-2346 4989 l
-2195 4989 l
-2198 4989 m
-2345 4989 l
-2345 4990 l
-2198 4990 l
-2200 4990 m
-2345 4990 l
-2345 4991 l
-2200 4991 l
-2203 4991 m
-2344 4991 l
-2344 4992 l
-2203 4992 l
-2205 4992 m
-2344 4992 l
-2344 4993 l
-2205 4993 l
-2208 4993 m
-2344 4993 l
-2344 4994 l
-2208 4994 l
-2210 4994 m
-2343 4994 l
-2343 4995 l
-2210 4995 l
-2213 4995 m
-2343 4995 l
-2343 4996 l
-2213 4996 l
-2215 4996 m
-2342 4996 l
-2342 4997 l
-2215 4997 l
-2218 4997 m
-2342 4997 l
-2342 4998 l
-2218 4998 l
-2220 4998 m
-2342 4998 l
-2342 4999 l
-2220 4999 l
-2222 4999 m
-2341 4999 l
-2341 5000 l
-2222 5000 l
-2225 5000 m
-2341 5000 l
-2341 5001 l
-2225 5001 l
-2227 5001 m
-2340 5001 l
-2340 5002 l
-2227 5002 l
-2230 5002 m
-2340 5002 l
-2340 5003 l
-2230 5003 l
-2232 5003 m
-2340 5003 l
-2340 5004 l
-2232 5004 l
-2235 5004 m
-2339 5004 l
-2339 5005 l
-2235 5005 l
-2237 5005 m
-2339 5005 l
-2339 5006 l
-2237 5006 l
-2240 5006 m
-2338 5006 l
-2338 5007 l
-2240 5007 l
-2242 5007 m
-2338 5007 l
-2338 5008 l
-2242 5008 l
-2245 5008 m
-2338 5008 l
-2338 5009 l
-2245 5009 l
-2247 5009 m
-2337 5009 l
-2337 5010 l
-2247 5010 l
-2250 5010 m
-2337 5010 l
-2337 5011 l
-2250 5011 l
-2252 5011 m
-2336 5011 l
-2336 5012 l
-2252 5012 l
-2255 5012 m
-2336 5012 l
-2336 5013 l
-2255 5013 l
-2257 5013 m
-2335 5013 l
-2335 5014 l
-2257 5014 l
-2259 5014 m
-2335 5014 l
-2335 5015 l
-2259 5015 l
-2262 5015 m
-2335 5015 l
-2335 5016 l
-2262 5016 l
-2264 5016 m
-2334 5016 l
-2334 5017 l
-2264 5017 l
-2267 5017 m
-2334 5017 l
-2334 5018 l
-2267 5018 l
-2269 5018 m
-2333 5018 l
-2333 5019 l
-2269 5019 l
-2272 5019 m
-2333 5019 l
-2333 5020 l
-2272 5020 l
-2274 5020 m
-2333 5020 l
-2333 5021 l
-2274 5021 l
-2277 5021 m
-2332 5021 l
-2332 5022 l
-2277 5022 l
-2279 5022 m
-2332 5022 l
-2332 5023 l
-2279 5023 l
-2282 5023 m
-2331 5023 l
-2331 5024 l
-2282 5024 l
-2284 5024 m
-2331 5024 l
-2331 5025 l
-2284 5025 l
-2287 5025 m
-2331 5025 l
-2331 5026 l
-2287 5026 l
-2289 5026 m
-2330 5026 l
-2330 5027 l
-2289 5027 l
-2291 5027 m
-2330 5027 l
-2330 5028 l
-2291 5028 l
-2294 5028 m
-2329 5028 l
-2329 5029 l
-2294 5029 l
-2296 5029 m
-2329 5029 l
-2329 5030 l
-2296 5030 l
-2299 5030 m
-2329 5030 l
-2329 5031 l
-2299 5031 l
-2301 5031 m
-2328 5031 l
-2328 5032 l
-2301 5032 l
-2304 5032 m
-2328 5032 l
-2328 5033 l
-2304 5033 l
-2306 5033 m
-2327 5033 l
-2327 5034 l
-2306 5034 l
-2309 5034 m
-2327 5034 l
-2327 5035 l
-2309 5035 l
-2311 5035 m
-2327 5035 l
-2327 5036 l
-2311 5036 l
-2314 5036 m
-2326 5036 l
-2326 5037 l
-2314 5037 l
-2316 5037 m
-2326 5037 l
-2326 5038 l
-2316 5038 l
-2319 5038 m
-2325 5038 l
-2325 5039 l
-2319 5039 l
-2321 5039 m
-2325 5039 l
-2325 5040 l
-2321 5040 l
-Y
-2199 4858.8 m
-2154 4971 l
-2324 5040 l
-2370 4927 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2241 4957 m
-2242 4943 l
-2237 4932 l
-2227 4924 l
-2223 4922 l
-2210 4922 l
-2199 4926 l
-2190 4936 l
-2189 4940 l
-2188 4953 l
-2193 4964 l
-2203 4973 l
-2207 4974 l
-2220 4975 l
-2231 4970 l
-2241 4957 l
-2249 4937 l
-2252 4916 l
-2249 4901 l
-2239 4893 l
-2232 4890 l
-2218 4889 l
-2211 4895 l
-S
-2280 5004 m
-2270 4995 l
-2267 4981 l
-2271 4960 l
-2276 4948 l
-2287 4930 l
-2300 4922 l
-2313 4922 l
-2321 4926 l
-2331 4934 l
-2334 4949 l
-2330 4970 l
-2325 4981 l
-2314 4999 l
-2301 5008 l
-2288 5007 l
-2280 5004 l
-S
-1 g
-974 2200 m
-1160 2200 l
-1160 5703 l
-974 5703 l
-Y
-1159.9 2200 m
-974 2200 l
-974 5703 l
-1160 5703 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1000 2225 m
-1105 2225 l
-S
-1000 2225 m
-1000 2290 l
-S
-1050 2225 m
-1050 2265 l
-S
-1105 2225 m
-1105 2290 l
-S
-1050 2375 m
-1040 2365 l
-1035 2355 l
-1035 2340 l
-1040 2330 l
-1050 2320 l
-1065 2315 l
-1075 2315 l
-1090 2320 l
-1100 2330 l
-1105 2340 l
-1105 2355 l
-1100 2365 l
-1090 2375 l
-S
-1000 2411 m
-1105 2411 l
-S
-1000 2446 m
-1005 2451 l
-1000 2456 l
-995 2451 l
-1000 2446 l
-S
-1035 2451 m
-1105 2451 l
-S
-1035 2491 m
-1140 2491 l
-S
-1050 2491 m
-1040 2501 l
-1035 2511 l
-1035 2526 l
-1040 2536 l
-1050 2546 l
-1065 2551 l
-1075 2551 l
-1090 2546 l
-1100 2536 l
-1105 2526 l
-1105 2511 l
-1100 2501 l
-1090 2491 l
-S
-1000 2591 m
-1085 2591 l
-1100 2596 l
-1105 2606 l
-1105 2616 l
-S
-1035 2576 m
-1035 2611 l
-S
-1000 2641 m
-1005 2646 l
-1000 2651 l
-995 2646 l
-1000 2641 l
-S
-1035 2646 m
-1105 2646 l
-S
-1050 2741 m
-1040 2731 l
-1035 2721 l
-1035 2706 l
-1040 2696 l
-1050 2686 l
-1065 2681 l
-1075 2681 l
-1090 2686 l
-1100 2696 l
-1105 2706 l
-1105 2721 l
-1100 2731 l
-1090 2741 l
-S
-1050 2912 m
-1040 2902 l
-1035 2892 l
-1035 2877 l
-1040 2867 l
-1050 2857 l
-1065 2852 l
-1075 2852 l
-1090 2857 l
-1100 2867 l
-1105 2877 l
-1105 2892 l
-1100 2902 l
-1090 2912 l
-S
-1035 2967 m
-1040 2957 l
-1050 2947 l
-1065 2942 l
-1075 2942 l
-1090 2947 l
-1100 2957 l
-1105 2967 l
-1105 2982 l
-1100 2992 l
-1090 3002 l
-1075 3007 l
-1065 3007 l
-1050 3002 l
-1040 2992 l
-1035 2982 l
-1035 2967 l
-S
-1035 3062 m
-1040 3052 l
-1050 3042 l
-1065 3037 l
-1075 3037 l
-1090 3042 l
-1100 3052 l
-1105 3062 l
-1105 3077 l
-1100 3087 l
-1090 3097 l
-1075 3102 l
-1065 3102 l
-1050 3097 l
-1040 3087 l
-1035 3077 l
-1035 3062 l
-S
-1035 3137 m
-1105 3137 l
-S
-1065 3137 m
-1050 3142 l
-1040 3152 l
-1035 3162 l
-1035 3177 l
-S
-1000 3258 m
-1105 3258 l
-S
-1050 3258 m
-1040 3248 l
-1035 3238 l
-1035 3222 l
-1040 3212 l
-1050 3202 l
-1065 3197 l
-1075 3197 l
-1090 3202 l
-1100 3212 l
-1105 3222 l
-1105 3238 l
-1100 3248 l
-1090 3258 l
-S
-1000 3293 m
-1005 3298 l
-1000 3303 l
-995 3298 l
-1000 3293 l
-S
-1035 3298 m
-1105 3298 l
-S
-1035 3338 m
-1105 3338 l
-S
-1055 3338 m
-1040 3353 l
-1035 3363 l
-1035 3378 l
-1040 3388 l
-1055 3393 l
-1105 3393 l
-S
-1035 3488 m
-1105 3488 l
-S
-1050 3488 m
-1040 3478 l
-1035 3468 l
-1035 3453 l
-1040 3443 l
-1050 3433 l
-1065 3428 l
-1075 3428 l
-1090 3433 l
-1100 3443 l
-1105 3453 l
-1105 3468 l
-1100 3478 l
-1090 3488 l
-S
-1000 3533 m
-1085 3533 l
-1100 3538 l
-1105 3548 l
-1105 3558 l
-S
-1035 3518 m
-1035 3553 l
-S
-1065 3583 m
-1065 3643 l
-1055 3643 l
-1045 3638 l
-1040 3633 l
-1035 3623 l
-1035 3608 l
-1040 3598 l
-1050 3588 l
-1065 3583 l
-1075 3583 l
-1090 3588 l
-1100 3598 l
-1105 3608 l
-1105 3623 l
-1100 3633 l
-1090 3643 l
-S
-1050 3729 m
-1040 3724 l
-1035 3709 l
-1035 3694 l
-1040 3679 l
-1050 3674 l
-1060 3679 l
-1065 3689 l
-1070 3714 l
-1075 3724 l
-1085 3729 l
-1090 3729 l
-1100 3724 l
-1105 3709 l
-1105 3694 l
-1100 3679 l
-1090 3674 l
-S
-1035 3769 m
-1040 3764 l
-1045 3769 l
-1040 3774 l
-1035 3769 l
-S
-1100 3774 m
-1105 3769 l
-1100 3764 l
-1095 3769 l
-1100 3774 l
-1110 3774 l
-1120 3769 l
-1125 3764 l
-S
-1035 3894 m
-1105 3894 l
-S
-1055 3894 m
-1040 3909 l
-1035 3919 l
-1035 3934 l
-1040 3944 l
-1055 3949 l
-1105 3949 l
-S
-1055 3949 m
-1040 3964 l
-1035 3974 l
-1035 3989 l
-1040 3999 l
-1055 4004 l
-1105 4004 l
-S
-1065 4039 m
-1065 4100 l
-1055 4100 l
-1045 4095 l
-1040 4090 l
-1035 4080 l
-1035 4065 l
-1040 4054 l
-1050 4044 l
-1065 4039 l
-1075 4039 l
-1090 4044 l
-1100 4054 l
-1105 4065 l
-1105 4080 l
-1100 4090 l
-1090 4100 l
-S
-1035 4190 m
-1105 4190 l
-S
-1050 4190 m
-1040 4180 l
-1035 4170 l
-1035 4155 l
-1040 4145 l
-1050 4135 l
-1065 4130 l
-1075 4130 l
-1090 4135 l
-1100 4145 l
-1105 4155 l
-1105 4170 l
-1100 4180 l
-1090 4190 l
-S
-1035 4230 m
-1105 4230 l
-S
-1055 4230 m
-1040 4245 l
-1035 4255 l
-1035 4270 l
-1040 4280 l
-1055 4285 l
-1105 4285 l
-S
-1065 4400 m
-1065 4460 l
-1055 4460 l
-1045 4455 l
-1040 4450 l
-1035 4440 l
-1035 4425 l
-1040 4415 l
-1050 4405 l
-1065 4400 l
-1075 4400 l
-1090 4405 l
-1100 4415 l
-1105 4425 l
-1105 4440 l
-1100 4450 l
-1090 4460 l
-S
-1035 4551 m
-1140 4551 l
-S
-1050 4551 m
-1040 4541 l
-1035 4531 l
-1035 4516 l
-1040 4506 l
-1050 4496 l
-1065 4491 l
-1075 4491 l
-1090 4496 l
-1100 4506 l
-1105 4516 l
-1105 4531 l
-1100 4541 l
-1090 4551 l
-S
-1035 4591 m
-1085 4591 l
-1100 4596 l
-1105 4606 l
-1105 4621 l
-1100 4631 l
-1085 4646 l
-S
-1035 4646 m
-1105 4646 l
-S
-1000 4681 m
-1005 4686 l
-1000 4691 l
-995 4686 l
-1000 4681 l
-S
-1035 4686 m
-1105 4686 l
-S
-1035 4726 m
-1105 4726 l
-S
-1055 4726 m
-1040 4741 l
-1035 4751 l
-1035 4766 l
-1040 4776 l
-1055 4781 l
-1105 4781 l
-S
-1035 4841 m
-1040 4831 l
-1050 4821 l
-1065 4816 l
-1075 4816 l
-1090 4821 l
-1100 4831 l
-1105 4841 l
-1105 4856 l
-1100 4866 l
-1090 4876 l
-1075 4881 l
-1065 4881 l
-1050 4876 l
-1040 4866 l
-1035 4856 l
-1035 4841 l
-S
-1035 4912 m
-1105 4967 l
-S
-1035 4967 m
-1105 4912 l
-S
-1000 5122 m
-1080 5122 l
-1095 5117 l
-1100 5112 l
-1105 5102 l
-1105 5092 l
-1100 5082 l
-1095 5077 l
-1080 5072 l
-1070 5072 l
-S
-1025 5162 m
-1020 5162 l
-1010 5167 l
-1005 5172 l
-1000 5182 l
-1000 5202 l
-1005 5212 l
-1010 5217 l
-1020 5222 l
-1030 5222 l
-1040 5217 l
-1055 5207 l
-1105 5157 l
-1105 5227 l
-S
-1000 5287 m
-1005 5272 l
-1020 5262 l
-1045 5257 l
-1060 5257 l
-1085 5262 l
-1100 5272 l
-1105 5287 l
-1105 5297 l
-1100 5313 l
-1085 5323 l
-1060 5328 l
-1045 5328 l
-1020 5323 l
-1005 5313 l
-1000 5297 l
-1000 5287 l
-S
-1000 5388 m
-1005 5373 l
-1020 5363 l
-1045 5358 l
-1060 5358 l
-1085 5363 l
-1100 5373 l
-1105 5388 l
-1105 5398 l
-1100 5413 l
-1085 5423 l
-1060 5428 l
-1045 5428 l
-1020 5423 l
-1005 5413 l
-1000 5398 l
-1000 5388 l
-S
-1000 5488 m
-1005 5473 l
-1020 5463 l
-1045 5458 l
-1060 5458 l
-1085 5463 l
-1100 5473 l
-1105 5488 l
-1105 5498 l
-1100 5513 l
-1085 5523 l
-1060 5528 l
-1045 5528 l
-1020 5523 l
-1005 5513 l
-1000 5498 l
-1000 5488 l
-S
-1095 5568 m
-1100 5563 l
-1105 5568 l
-1100 5573 l
-1095 5568 l
-S
-1000 5638 m
-1005 5623 l
-1020 5613 l
-1045 5608 l
-1060 5608 l
-1085 5613 l
-1100 5623 l
-1105 5638 l
-1105 5648 l
-1100 5663 l
-1085 5673 l
-1060 5678 l
-1045 5678 l
-1020 5673 l
-1005 5663 l
-1000 5648 l
-1000 5638 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 2800 260 a
- currentpoint grestore moveto
- 2800 260 a 0 2494 a FF(Figure)41
-b(8:)62 b(A)41 b(lab)s(elled)h(co)s(ordinate)g(grid)e(for)h(an)g
-(all-sky)g(zenithal)h(equal)g(area)g(pro)5 b(jection)41
-b(in)g(ecliptic)0 2607 y(co)s(ordinates.)g(This)30 b(w)m(as)h(comp)s
-(osed)f(and)g(dra)m(wn)f Fx(via)i FF(a)f(Plot)i(using)e(a)g(single)h
-(function)f(call.)0 2997 y Fw(2.7)112 b(Pro)s(ducing)38
-b(Graphical)h(Output)0 3240 y FF(Graphical)24 b(output)e(is)i(supp)s
-(orted)d(b)m(y)i(a)g(sp)s(ecialised)h(form)f(of)g(F)-8
-b(rameSet)24 b(called)g(a)g(Plot,)h(whose)e(base)h(F)-8
-b(rame)0 3353 y(corresp)s(onds)28 b(with)g(the)h(nativ)m(e)i(co)s
-(ordinates)e(of)g(the)h(underlying)d(graphics)i(system.)41
-b(Plotting)30 b(op)s(erations)0 3466 y(are)f(sp)s(eci\014ed)e(in)h
-Fx(physic)-5 b(al)33 b(c)-5 b(o)g(or)g(dinates)32 b FF(whic)m(h)c
-(corresp)s(ond)f(with)h(the)g(Plot's)i(curren)m(t)e(F)-8
-b(rame.)41 b(T)m(ypically)-8 b(,)0 3579 y(this)30 b(migh)m(t)h(b)s(e)f
-(a)h(celestial)i(co)s(ordinate)e(system.)0 3757 y(Op)s(erations,)43
-b(suc)m(h)d(as)h(dra)m(wing)g(lines,)i(are)e(automatically)j
-(transformed)c(from)g(ph)m(ysical)h(to)h(graphical)0
-3870 y(co)s(ordinates)30 b(b)s(efore)f(plotting,)h(using)f(an)g
-(adaptiv)m(e)i(algorithm)f(whic)m(h)f(ensures)f(smo)s(oth)h(curv)m(es)g
-(\(b)s(ecause)0 3983 y(the)44 b(transformation)f(is)h(usually)f
-(non-linear\).)80 b(\\Missing")45 b(co)s(ordinates)f(\()p
-Fx(e.g.)f FF(graphical)h(co)s(ordinates)0 4096 y(whic)m(h)31
-b(do)g(not)g(pro)5 b(ject)31 b(on)g(to)h(the)f(celestial)i(sphere\),)e
-(discon)m(tin)m(uities)i(and)d(generalised)i(clipping)f(are)h(all)0
-4209 y(consisten)m(tly)37 b(handled.)56 b(It)36 b(is)g(p)s(ossible,)h
-(for)e(example,)j(to)f(plot)f(in)g(equatorial)h(co)s(ordinates)g(and)e
-(clip)h(in)0 4321 y(galactic)30 b(co)s(ordinates.)41
-b(The)27 b(usual)g(plotting)h(op)s(erations)g(are)g(pro)m(vided)f
-(\(text,)i(mark)m(ers\),)g(but)d(a)i(geo)s(desic)0 4434
-y(curv)m(e)i(replaces)g(the)f(primitiv)m(e)h(straigh)m(t)g(line)g
-(elemen)m(t.)42 b(There)29 b(is)g(also)h(a)g(separate)g(function)f(for)
-g(dra)m(wing)0 4547 y(axis)i(lines,)g(since)f(these)h(are)g(normally)g
-(not)f(geo)s(desics.)0 4725 y(In)c(addition)h(to)h(dra)m(wing)e(co)s
-(ordinate)i(grids)e(o)m(v)m(er)i(an)f(area)g(of)g(the)g(sky)-8
-b(,)28 b(another)f(common)g(use)g(of)g(the)g(Plot)0 4838
-y(class)j(is)g(to)g(pro)s(duce)e(line)i(plots)g(suc)m(h)f(as)h(\015ux)f
-(against)h(w)m(a)m(v)m(elength,)j(displacemen)m(t)d(again)h(time,)f
-Fx(etc)p FF(.)41 b(F)-8 b(or)0 4951 y(these)33 b(situations)g(the)f
-(curren)m(t)g(F)-8 b(rame)34 b(of)e(the)g(Plot)i(w)m(ould)e(b)s(e)f(a)i
-(comp)s(ound)e(F)-8 b(rame)33 b(\(CmpF)-8 b(rame\))33
-b(con-)0 5064 y(taining)d(a)h(pair)e(of)h(1-dimensional)h(F)-8
-b(rames)30 b(-)g(the)g(\014rst)f(represen)m(ting)h(the)g(X)g(axis)g
-(quan)m(tit)m(y)i(\(w)m(a)m(v)m(elength,)0 5177 y(time,)g(etc\),)i(and)
-c(the)i(second)f(represen)m(ting)h(the)f(Y)h(axis)f(quan)m(tit)m(y)i
-(\(\015ux,)e(displacemen)m(t,)i(etc\).)45 b(The)31 b(Plot)0
-5289 y(class)g(includes)f(an)g(option)h(for)f(axes)h(to)g(b)s(e)f
-(plotted)h(logarithmically)-8 b(.)0 5467 y(P)m(erhaps)36
-b(the)h(most)f(useful)g(graphics)g(function)h(a)m(v)-5
-b(ailable)38 b(is)f(for)f(dra)m(wing)g(fully)g(annotated)i(co)s
-(ordinate)0 5580 y(grids)d(\()p Fx(e.g.)f FF(Figure)i(8\).)109
-b(This)35 b(uses)f(a)h(general)h(algorithm)g(whic)m(h)f(do)s(es)g(not)g
-(dep)s(end)e(on)i(kno)m(wledge)h(of)0 5693 y(the)d(co)s(ordinates)g(b)s
-(eing)g(represen)m(ted,)g(so)g(can)g(also)h(handle)e
-(programmer-de\014ned)g(co)s(ordinate)h(systems.)p eop
-end
-%%Page: 13 23
-TeXDict begin 13 22 bop 0 52 a Fy(2.7)92 b(Pro)s(ducing)29
-b(Graphical)j(Output)2329 b FF(13)0 351 y(Grids)39 b(for)h(all-sky)g
-(pro)5 b(jections,)43 b(including)c(p)s(olar)h(regions,)j(can)c(b)s(e)h
-(dra)m(wn)e(and)h(most)h(asp)s(ects)g(of)g(the)0 464
-y(output)30 b(\(colour,)i(line)e(st)m(yle,)i Fx(etc.)p
-FF(\))41 b(can)30 b(b)s(e)g(adjusted)g(b)m(y)g(setting)h(appropriate)g
-(Plot)g(attributes.)0 627 y FD(F)-9 b(urther)47 b(reading:)61
-b FF(F)-8 b(or)42 b(a)f(more)g(complete)h(description)f(of)g(Plots)g
-(and)g(ho)m(w)f(to)i(pro)s(duce)e(graphical)0 740 y(output,)30
-b(see)h Fu(x)p FF(21.)42 b(Also)31 b(see)g(the)g(Plot)g(en)m(try)g(in)f
-(App)s(endix)e(D.)p eop end
-%%Page: 14 24
-TeXDict begin 14 23 bop 0 52 a FF(14)2126 b Fy(2)92 b(O)m(VER)-10
-b(VIEW)30 b(OF)h(AST)e(CONCEPTS)p eop end
-%%Page: 15 25
-TeXDict begin 15 24 bop 3689 52 a FF(15)0 351 y Fz(3)135
-b(Ho)l(w)45 b(T)-11 b(o.)23 b(.)g(.)0 604 y FF(F)-8 b(or)29
-b(those)g(of)f(y)m(ou)g(with)g(a)h(plane)f(to)h(catc)m(h,)h(this)f
-(section)g(pro)m(vides)f(some)h(instan)m(t)g(templates)g(and)f(recip)s
-(es)0 717 y(for)22 b(p)s(erforming)f(the)i(most)f(commonly-required)h
-(op)s(erations)f(using)g(AST,)g(but)f(without)h(going)i(in)m(to)f
-(detail.)0 830 y(The)35 b(examples)h(giv)m(en)g(\(sort)g(of)7
-b(\))36 b(follo)m(w)g(on)f(from)g(eac)m(h)i(other,)g(so)e(y)m(ou)h
-(should)e(b)s(e)h(able)g(to)h(construct)g(a)0 943 y(v)-5
-b(ariet)m(y)30 b(of)f(programs)f(b)m(y)g(piecing)i(them)e(together.)42
-b(Note)30 b(that)f(some)g(of)f(them)h(app)s(ear)f(longer)h(than)f(they)
-0 1056 y(actually)h(are,)f(b)s(ecause)f(w)m(e)h(ha)m(v)m(e)g(included)f
-(plen)m(t)m(y)g(of)h(commen)m(ts)g(and)e(a)i(few)f(options)g(that)h(y)m
-(ou)f(probably)0 1169 y(w)m(on't)k(need.)0 1332 y(If)g(an)m(y)g(of)g
-(this)g(material)h(has)f(y)m(ou)g(completely)i(ba\017ed,)e(then)g(y)m
-(ou)g(ma)m(y)h(w)m(an)m(t)g(to)f(read)g(the)g(in)m(tro)s(duction)0
-1445 y(to)36 b(AST)f(programming)g(concepts)i(in)e Fu(x)p
-FF(4)h(\014rst.)55 b(Otherwise,)37 b(references)f(to)g(more)g(detailed)
-g(reading)g(are)0 1558 y(giv)m(en)31 b(after)g(eac)m(h)h(example,)f
-(just)f(in)g(case)h(they)g(don't)f(quite)h(do)f(what)h(y)m(ou)f(w)m(an)
-m(t.)0 1852 y Fw(3.1)112 b(.)19 b(.)g(.)g(Obtain)38 b(and)g(Install)g
-(AST)0 2074 y FF(The)h(AST)g(library)g(is)h(a)m(v)-5
-b(ailable)42 b(b)s(oth)c(as)i(a)g(stand-alone)h(pac)m(k)-5
-b(age)41 b(and)e(also)i(as)f(part)f(of)h(the)g(Starlink)0
-2186 y(Soft)m(w)m(are)26 b(Collection)763 2153 y Fv(4)804
-2186 y FF(.)39 b(If)24 b(y)m(our)h(site)g(has)f(the)h(Starlink)g(Soft)m
-(w)m(are)g(Collection)i(installed)e(then)g(AST)e(should)0
-2299 y(already)31 b(b)s(e)f(a)m(v)-5 b(ailable.)0 2462
-y(If)30 b(not,)h(y)m(ou)f(can)h(do)m(wnload)g(the)f(AST)g(library)g(b)m
-(y)g(itself)h(from)f(h)m(ttp://www.starlink.ac.uk/ast/.)0
-2756 y Fw(3.2)112 b(.)19 b(.)g(.)g(Structure)37 b(an)h(AST)f(Program)0
-2978 y FF(An)30 b(AST)g(program)g(normally)g(has)g(the)h(follo)m(wing)h
-(structure:)227 3228 y Ft(/*)43 b(Include)e(the)h(interface)e(to)j(the)
-f(AST)g(library.)f(*/)227 3328 y(#include)g("ast.h")227
-3527 y(/*)i(Main)f(program)f(\(or)h(could)g(be)g(any)h(function\).)c
-(*/)227 3627 y(main)j(\(\))h({)358 3726 y(<normal)e(C)i(declarations)c
-(and)j(statements>)227 3925 y(/*)h(Enclose)e(the)h(parts)g(which)f(use)
-h(AST)h(between)d(the)j(astBegin)d(and)i(astEnd)g(macros.)e(*/)358
-4025 y(astBegin;)358 4125 y(<C)j(statements)c(which)j(use)g(AST>)358
-4224 y(astEnd;)358 4424 y(<maybe)f(more)h(C)h(statements>)227
-4523 y(})0 4786 y FF(The)c(use)h(of)g(astBegin)i(and)d(astEnd)h(is)g
-(optional,)j(but)d(has)f(the)i(e\013ect)g(of)f(tidying)g(up)f(after)i
-(y)m(ou)f(ha)m(v)m(e)0 4899 y(\014nished)25 b(using)h(AST,)h(so)g(is)f
-(normally)h(recommended.)40 b(F)-8 b(or)27 b(more)g(details)h(of)f
-(this,)g(see)g Fu(x)p FF(4.10.)42 b(F)-8 b(or)27 b(details)0
-5012 y(of)k(ho)m(w)f(to)h(access)h(the)e(\\ast.h")i(header)e(\014le,)h
-(see)g Fu(x)p FF(22.1.)0 5306 y Fw(3.3)112 b(.)19 b(.)g(.)g(Build)38
-b(an)g(AST)f(Program)0 5528 y FF(T)-8 b(o)31 b(build)e(a)i(simple)f
-(AST)g(program)g(that)h(do)s(esn't)f(use)g(graphics,)h(use:)p
-0 5607 1512 4 v 104 5661 a Fs(4)138 5693 y Fr(The)26
-b(Starlink)g(Soft)n(w)n(are)g(Collection)i(can)e(b)r(e)f(do)n(wnloaded)
-i(from)f(h)n(ttp://www.starlink.ac.uk/Do)n(wnload/.)p
-eop end
-%%Page: 16 26
-TeXDict begin 16 25 bop 0 52 a FF(16)3035 b Fy(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)227 351 y Ft(cc)43 b(program.c)d(-L/star/lib)f
-(-I/star/include)e(`ast_link`)j(-o)j(program)0 658 y
-FF(T)-8 b(o)31 b(build)e(a)i(program)f(whic)m(h)g(uses)g(PGPLOT)g(for)g
-(graphics,)g(use:)227 952 y Ft(cc)43 b(program.c)d(-L/star/lib)f
-(`ast_link)h(-pgplot`)g(-o)j(program)0 1259 y FF(F)-8
-b(or)23 b(more)g(details)h(ab)s(out)e(accessing)j(the)e(\\ast.h")g
-(header)g(\014le,)i(see)e Fu(x)p FF(22.1.)40 b(F)-8 b(or)23
-b(more)g(details)h(ab)s(out)e(linking)0 1372 y(programs,)30
-b(see)h Fu(x)p FF(22.2)i(and)c(the)i(description)f(of)h(the)f(\\ast)p
-Fq(_)p FF(link")i(command)e(in)g(App)s(endix)f(E.)0 1715
-y Fw(3.4)112 b(.)19 b(.)g(.)g(Read)38 b(a)f(W)m(CS)h(Calibration)g
-(from)g(a)g(Dataset)0 1959 y FF(Precisely)27 b(ho)m(w)e(y)m(ou)h
-(extract)h(w)m(orld)f(co)s(ordinate)g(system)g(\(W)m(CS\))h
-(information)f(from)f(a)h(dataset)h(ob)m(viously)0 2072
-y(dep)s(ends)36 b(on)i(what)h(t)m(yp)s(e)f(of)g(dataset)i(it)e(is.)65
-b(Usually)-8 b(,)41 b(ho)m(w)m(ev)m(er,)h(y)m(ou)c(should)f(b)s(e)h
-(able)h(to)g(obtain)f(a)h(set)0 2185 y(of)33 b(FITS)f(header)h(cards)g
-(whic)m(h)f(con)m(tain)j(the)e(W)m(CS)g(information)g(\(and)f(probably)
-h(m)m(uc)m(h)g(more)g(b)s(esides\).)0 2298 y(Supp)s(ose)g(that)i
-(\\cards")h(is)e(a)i(p)s(oin)m(ter)e(to)i(a)f(string)g(con)m(taining)h
-(a)f(complete)h(set)f(of)g(concatenated)i(FITS)0 2410
-y(header)23 b(cards)h(\(suc)m(h)f(as)h(pro)s(duced)e(b)m(y)h(the)h
-(CFITSIO)d(function)j(\014ts)p Fq(_)p FF(hdr2str\).)37
-b(Then)22 b(pro)s(ceed)h(as)h(follo)m(ws:)227 2704 y
-Ft(fitsfile)41 b(*fptr;)227 2804 y(AstFitsChan)e(*fitschan;)227
-2903 y(AstFrameSet)g(*wcsinfo;)227 3003 y(char)j(*header;)227
-3103 y(int)h(nkeys,)e(status;)227 3302 y(...)227 3501
-y(/*)i(Obtain)e(all)h(the)h(cards)e(in)i(the)f(header)g(concatenated)c
-(into)k(a)h(single)e(dynamically)358 3601 y(allocated)f
-(null-terminated)d(character)j(string.)h(Note,)g(we)i(do)g(not)f
-(exclude)358 3700 y(any)g(cards)g(since)f(we)i(may)g(later)e(modify)g
-(the)h(WCS)h(information)c(within)i(the)358 3800 y(header)g(and)h
-(consequently)d(want)j(to)h(write)e(the)i(entire)e(header)g(out)h
-(again.)f(*/)358 3900 y(if\()h(fits_hdr2str\()d(fptr,)i(0,)i(NULL,)e
-(0,)i(&header,)d(&nkeys,)h(&status)g(\))i(\))663 3999
-y(printf\(")d(Error)i(getting)f(header\\n"\);)358 4099
-y(...)227 4298 y(/*)i(Header)e(obtained)f(succesfully...)e(*/)358
-4398 y(})43 b(else)f({)227 4597 y(/*)h(Create)e(a)i(FitsChan)e(and)h
-(fill)g(it)h(with)f(FITS)f(header)h(cards.)f(*/)489 4697
-y(fitschan)f(=)j(astFitsChan\()c(NULL,)i(NULL,)h("")h(\);)489
-4796 y(astPutCards\()38 b(fitschan,)i(header)h(\);)227
-4996 y(/*)i(Free)f(the)g(memory)f(holding)g(the)h(concatenated)d
-(header)i(cards.)g(*/)489 5095 y(header)g(=)i(free\()f(header)f(\);)227
-5295 y(/*)i(Read)f(WCS)g(information)d(from)j(the)h(FitsChan.)c(*/)489
-5394 y(wcsinfo)h(=)k(astRead\()c(fitschan)g(\);)489 5593
-y(...)p eop end
-%%Page: 17 27
-TeXDict begin 17 26 bop 0 52 a Fy(3.5)92 b(.)15 b(.)h(.)f(V)-8
-b(alidate)33 b(W)m(CS)d(Information)2295 b FF(17)0 351
-y(The)29 b(result)g(should)g(b)s(e)g(a)g(p)s(oin)m(ter,)h(\\w)m
-(csinfo",)h(to)g(a)e(F)-8 b(rameSet)31 b(whic)m(h)e(con)m(tains)i(the)e
-(W)m(CS)h(information.)0 464 y(This)c(p)s(oin)m(ter)h(can)g(no)m(w)g(b)
-s(e)f(used)g(to)i(p)s(erform)d(man)m(y)i(useful)g(tasks,)h(some)f(of)g
-(whic)m(h)g(are)g(illustrated)h(in)e(the)0 577 y(follo)m(wing)32
-b(recip)s(es.)0 741 y(Some)j(datasets)i(whic)m(h)e(do)g(not)h(easily)h
-(yield)e(FITS)g(header)g(cards)g(ma)m(y)h(require)f(a)h(di\013eren)m(t)
-g(approac)m(h,)0 854 y(p)s(ossibly)d(in)m(v)m(olving)i(use)f(of)f(a)i
-(Channel)d(or)i(XmlChan)f(\()p Fu(x)p FF(15\))j(rather)d(than)h(a)g
-(FitsChan.)51 b(In)33 b(the)h(case)g(of)0 967 y(the)26
-b(Starlink)g(NDF)h(data)f(format,)i(for)d(example,)j(all)f(the)f(ab)s
-(o)m(v)m(e)h(ma)m(y)g(b)s(e)e(replaced)i(b)m(y)e(a)i(single)f(call)i
-(to)e(the)0 1080 y(function)k(ndfGt)m(w)m(cs|see)h(SUN/33.)42
-b(The)30 b(whole)h(pro)s(cess)e(can)i(probably)f(b)s(e)f(encapsulated)i
-(in)f(a)h(similar)0 1192 y(w)m(a)m(y)g(for)f(most)h(data)g(systems,)g
-(whether)f(they)g(use)g(FITS)g(header)g(cards)g(or)h(not.)0
-1356 y(F)-8 b(or)26 b(more)g(details)h(ab)s(out)e(reading)h(W)m(CS)f
-(information)h(from)f(datasets,)j(see)e Fu(x)p FF(17.3)i(and)d
-Fu(x)p FF(17.4.)41 b(F)-8 b(or)26 b(a)g(more)0 1469 y(general)37
-b(description)f(of)g(FitsChans)f(and)h(their)f(use)h(with)g(FITS)f
-(header)g(cards,)j(see)e Fu(x)p FF(16)h(and)e Fu(x)p
-FF(17.)59 b(F)-8 b(or)0 1582 y(more)31 b(details)g(ab)s(out)f(F)-8
-b(rameSets,)32 b(see)f Fu(x)p FF(13)g(and)f Fu(x)p FF(14.)0
-1879 y Fw(3.5)112 b(.)19 b(.)g(.)g(V)-9 b(alidate)38
-b(W)m(CS)f(Information)0 2102 y FF(Once)d(y)m(ou)h(ha)m(v)m(e)h(read)e
-(W)m(CS)g(information)h(from)f(a)h(dataset,)i(as)d(in)g
-Fu(x)p FF(3.4,)j(y)m(ou)e(ma)m(y)g(wish)f(to)h(c)m(hec)m(k)h(that)0
-2215 y(y)m(ou)c(ha)m(v)m(e)h(b)s(een)e(successful.)45
-b(The)31 b(follo)m(wing)j(will)e(detect)h(and)e(classify)i(the)f
-(things)f(that)i(migh)m(t)f(p)s(ossibly)0 2327 y(go)f(wrong:)227
-2580 y Ft(#include)41 b(<string.h>)227 2779 y(...)227
-2978 y(if)i(\()g(!astOK)e(\))i({)358 3078 y(<an)f(error)g(occurred)e
-(\(a)j(message)e(will)h(have)f(been)h(issued\)>)227 3177
-y(})h(else)f(if)h(\()g(wcsinfo)e(==)i(AST__NULL)d(\))j({)358
-3277 y(<there)e(was)h(no)h(WCS)g(information)c(present>)227
-3377 y(})k(else)f(if)h(\()g(strcmp\()e(astGetC\()f(wcsinfo,)h("Class")f
-(\),)j("FrameSet")c(\))44 b(\))f({)358 3476 y(<something)c(unexpected)h
-(was)i(read)g(\(i.e.)g(not)g(a)h(FrameSet\)>)227 3576
-y(})g(else)f({)358 3675 y(<WCS)g(information)d(was)j(read)g(OK>)227
-3775 y(})0 4040 y FF(F)-8 b(or)31 b(more)g(information)g(ab)s(out)g
-(detecting)h(errors)e(in)h(AST)e(functions,)i(see)g Fu(x)p
-FF(4.15.)44 b(F)-8 b(or)31 b(details)h(of)f(ho)m(w)g(to)0
-4153 y(v)-5 b(alidate)32 b(input)d(data)i(read)g(b)m(y)f(AST,)g(see)h
-Fu(x)p FF(15.6)h(and)e Fu(x)p FF(17.4.)0 4450 y Fw(3.6)112
-b(.)19 b(.)g(.)g(Displa)m(y)38 b(AST)f(Data)0 4673 y
-FF(If)g(y)m(ou)h(ha)m(v)m(e)h(a)f(p)s(oin)m(ter)f(to)i(an)m(y)f(AST)e
-(Ob)5 b(ject,)40 b(y)m(ou)e(can)g(displa)m(y)g(the)g(data)g(stored)g
-(in)f(that)h(Ob)5 b(ject)38 b(in)0 4786 y(textual)32
-b(form)e(as)g(follo)m(ws:)227 5038 y Ft(astShow\()41
-b(wcsinfo)f(\);)0 5303 y FF(Here,)28 b(w)m(e)f(ha)m(v)m(e)h(used)e(a)h
-(p)s(oin)m(ter)f(to)i(the)e(F)-8 b(rameSet)28 b(whic)m(h)f(w)m(e)g
-(read)f(earlier)i(\()p Fu(x)p FF(3.4\).)41 b(The)26 b(result)h(is)f
-(written)0 5416 y(to)31 b(the)g(program's)f(standard)f(output)h
-(stream.)42 b(This)29 b(can)i(b)s(e)f(v)m(ery)g(useful)g(during)f
-(debugging.)0 5580 y(F)-8 b(or)30 b(more)g(details)g(ab)s(out)f(using)g
-(astSho)m(w,)h(see)g Fu(x)p FF(4.4.)42 b(F)-8 b(or)30
-b(information)g(ab)s(out)f(in)m(terpreting)h(the)g(output,)0
-5693 y(also)h(see)g Fu(x)p FF(15.8.)p eop end
-%%Page: 18 28
-TeXDict begin 18 27 bop 0 52 a FF(18)3035 b Fy(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)0 351 y Fw(3.7)112 b(.)19 b(.)g(.)g(Con)m(v)m(ert)37
-b(Bet)m(w)m(een)g(Pixel)g(and)i(W)-9 b(orld)37 b(Co)s(ordinates)0
-568 y FF(Y)-8 b(ou)39 b(ma)m(y)h(use)f(a)g(p)s(oin)m(ter)g(to)h(a)f(F)
--8 b(rameSet,)43 b(suc)m(h)38 b(as)i(w)m(e)f(read)g(in)g
-Fu(x)p FF(3.4,)k(to)c(transform)g(a)g(set)g(of)h(p)s(oin)m(ts)0
-681 y(b)s(et)m(w)m(een)h(the)f(pixel)h(co)s(ordinates)g(of)f(an)g
-(image)i(and)d(the)i(asso)s(ciated)h(w)m(orld)e(co)s(ordinates.)71
-b(If)39 b(y)m(ou)i(are)0 794 y(w)m(orking)31 b(in)f(t)m(w)m(o)h
-(dimensions,)f(pro)s(ceed)g(as)h(follo)m(ws:)227 1023
-y Ft(double)41 b(xpixel[)g(N)i(],)g(ypixel[)e(N)i(];)227
-1123 y(double)e(xworld[)g(N)i(],)g(yworld[)e(N)i(];)227
-1322 y(...)227 1521 y(astTran2\()d(wcsinfo,)g(N,)j(xpixel,)e(ypixel,)g
-(1,)h(xworld,)f(yworld)g(\);)0 1764 y FF(Here,)30 b(N)e(is)g(the)h(n)m
-(um)m(b)s(er)e(of)i(p)s(oin)m(ts)f(to)h(b)s(e)f(transformed,)g
-(\\xpixel")h(and)f(\\ypixel")i(hold)e(the)g(pixel)h(co)s(ordi-)0
-1877 y(nates,)g(and)e(\\xw)m(orld")i(and)e(\\yw)m(orld")i(receiv)m(e)g
-(the)f(returned)f(w)m(orld)g(co)s(ordinates.)2923 1844
-y Fv(5)3003 1877 y FF(T)-8 b(o)29 b(transform)e(in)g(the)0
-1990 y(opp)s(osite)k(direction,)h(in)m(terc)m(hange)h(the)e(t)m(w)m(o)h
-(pairs)e(of)i(arra)m(ys)f(\(so)g(that)h(the)f(w)m(orld)g(co)s
-(ordinates)g(are)g(giv)m(en)0 2103 y(as)g(input\))e(and)h(c)m(hange)i
-(the)e(\014fth)g(argumen)m(t)g(of)h(astT)-8 b(ran2)31
-b(to)g(zero.)0 2260 y(T)-8 b(o)33 b(transform)e(p)s(oin)m(ts)h(in)g
-(one)g(dimension,)g(use)g(astT)-8 b(ran1.)47 b(In)31
-b(an)m(y)h(other)h(n)m(um)m(b)s(er)d(of)j(dimensions)e(\(or)h(if)0
-2373 y(the)d(n)m(um)m(b)s(er)f(of)g(dimensions)h(is)f(initially)j
-(unkno)m(wn\),)d(use)g(astT)-8 b(ranN)30 b(or)f(astT)-8
-b(ranP)g(.)29 b(These)g(functions)f(are)0 2486 y(describ)s(ed)h(in)h
-(App)s(endix)f(B.)0 2644 y(F)-8 b(or)30 b(more)f(information)h(ab)s
-(out)f(transforming)g(co)s(ordinates,)h(see)g Fu(x)p
-FF(4.8)h(and)d Fu(x)p FF(13.6.)43 b(F)-8 b(or)30 b(details)g(of)f(ho)m
-(w)h(to)0 2757 y(handle)g(missing)g(co)s(ordinates,)i(see)e
-Fu(x)p FF(5.8.)0 3043 y Fw(3.8)112 b(.)19 b(.)g(.)g(T)-9
-b(est)37 b(if)g(a)h(W)m(CS)f(is)h(a)g(Celestial)g(Co)s(ordinate)g
-(System)0 3260 y FF(The)25 b(w)m(orld)g(co)s(ordinate)h(system)f(\(W)m
-(CS\))h(curren)m(tly)f(asso)s(ciated)i(with)e(an)g(image)h(ma)m(y)g
-(often)g(b)s(e)e(a)i(celestial)0 3372 y(co)s(ordinate)42
-b(system,)i(but)d(this)g(need)f(not)i(necessarily)g(b)s(e)e(the)i
-(case.)74 b(F)-8 b(or)42 b(instance,)i(instead)e(of)f(righ)m(t)0
-3485 y(ascension)31 b(and)f(declination,)j(an)d(image)i(migh)m(t)g(ha)m
-(v)m(e)g(a)f(W)m(CS)f(with)h(axes)g(represen)m(ting)g(w)m(a)m(v)m
-(elength)i(and)0 3598 y(slit)e(p)s(osition,)g(or)f(ma)m(yb)s(e)h(just)e
-(plain)i(old)f(pixels.)0 3756 y(If)43 b(y)m(ou)h(ha)m(v)m(e)h(obtained)
-e(a)h(W)m(CS)g(calibration)h(for)e(an)g(image,)49 b(as)43
-b(in)h Fu(x)p FF(3.4,)k(in)43 b(the)h(form)f(of)h(a)f(p)s(oin)m(ter)0
-3869 y(\\w)m(csinfo")29 b(to)g(a)g(F)-8 b(rameSet,)30
-b(then)d(y)m(ou)i(ma)m(y)g(determine)f(if)g(the)g(curren)m(t)g(co)s
-(ordinate)h(system)f(is)g(a)h(celestial)0 3982 y(one)i(or)f(not,)h(as)g
-(follo)m(ws:)227 4211 y Ft(AstFrame)41 b(*frame;)227
-4311 y(int)i(issky;)227 4510 y(...)227 4709 y(/*)g(Obtain)e(a)i
-(pointer)e(to)i(the)f(current)f(Frame)g(and)i(determine)d(if)i(it)h(is)
-g(a)358 4809 y(SkyFrame.)d(*/)227 4909 y(frame)i(=)h(astGetFrame\()c
-(wcsinfo,)h(AST__CURRENT)e(\);)227 5008 y(issky)k(=)h(astIsASkyFrame\()
-37 b(frame)42 b(\);)227 5108 y(frame)g(=)h(astAnnul\()d(frame)h(\);)0
-5351 y FF(This)30 b(will)g(set)h(\\issky")g(to)g(1)g(if)g(the)f(W)m(CS)
-g(is)h(a)g(celestial)i(co)s(ordinate)e(system,)g(and)e(to)i(zero)h
-(otherwise.)p 0 5425 1512 4 v 104 5479 a Fs(5)138 5510
-y Fr(By)c(pixel)g(co)r(ordinates,)j(w)n(e)e(mean)f(a)h(co)r(ordinate)g
-(system)f(in)g(whic)n(h)h(the)e(\014rst)h(pixel)h(in)f(the)g(image)h
-(is)g(cen)n(tred)e(on)i(\(1,1\))0 5602 y(and)c(eac)n(h)g(pixel)g(is)g
-(a)h(unit)e(square.)35 b(Note)25 b(that)f(the)h(w)n(orld)h(co)r
-(ordinates)g(will)g(not)f(necessarily)i(b)r(e)e(celestial)h(co)r
-(ordinates,)h(but)0 5693 y(if)f(they)f(are,)i(then)e(they)g(will)i(b)r
-(e)e(in)h(radians.)p eop end
-%%Page: 19 29
-TeXDict begin 19 28 bop 0 52 a Fy(3.9)92 b(.)15 b(.)h(.)f(T)-8
-b(est)31 b(if)g(a)f(W)m(CS)h(is)f(a)h(Sp)s(ectral)f(Co)s(ordinate)h
-(System)1482 b FF(19)0 351 y Fw(3.9)112 b(.)19 b(.)g(.)g(T)-9
-b(est)37 b(if)g(a)h(W)m(CS)f(is)h(a)g(Sp)s(ectral)g(Co)s(ordinate)g
-(System)0 576 y FF(T)-8 b(esting)26 b(for)f(a)g(sp)s(ectral)g(co)s
-(ordinate)h(system)f(is)g(basically)i(the)e(same)g(as)h(testing)g(for)f
-(a)g(celestial)j(co)s(ordinate)0 689 y(system)43 b(\(see)g(the)g
-(previous)f(section\).)78 b(The)42 b(one)h(di\013erence)g(is)g(that)g
-(y)m(ou)g(use)f(the)h(astIsASp)s(ecF)-8 b(rame)0 802
-y(function)30 b(in)g(place)h(of)g(the)g(astIsASkyF)-8
-b(rame)31 b(function.)0 1102 y Fw(3.10)112 b(.)19 b(.)g(.)g(F)-9
-b(ormat)38 b(Co)s(ordinates)g(for)f(Displa)m(y)0 1326
-y FF(Once)44 b(y)m(ou)g(ha)m(v)m(e)h(con)m(v)m(erted)h(pixel)e(co)s
-(ordinates)g(in)m(to)h(w)m(orld)f(co)s(ordinates)h(\()p
-Fu(x)p FF(3.7\),)k(y)m(ou)c(ma)m(y)f(w)m(an)m(t)h(to)0
-1439 y(format)35 b(them)g(as)g(text)g(b)s(efore)g(displa)m(ying)g
-(them.)54 b(T)m(ypically)-8 b(,)37 b(this)e(w)m(ould)f(con)m(v)m(ert)j
-(from)d(\(sa)m(y\))i(radians)0 1552 y(in)m(to)i(something)f(more)g
-(comprehensible.)60 b(Using)37 b(the)g(F)-8 b(rameSet)38
-b(p)s(oin)m(ter)e(\\w)m(csinfo")i(obtained)f(in)g Fu(x)p
-FF(3.4)0 1665 y(and)30 b(a)h(pair)f(of)g(w)m(orld)g(co)s(ordinates)i
-(\\xw")e(and)g(\\yw")h(\()p Fx(e.g.)f FF(see)h Fu(x)p
-FF(3.7\),)h(y)m(ou)f(could)g(pro)s(ceed)f(as)g(follo)m(ws:)227
-1921 y Ft(#include)41 b(<stdio.h>)227 2020 y(const)h(char)g(*xtext,)e
-(*ytext;)227 2120 y(double)h(xw,)i(yw;)227 2319 y(...)227
-2518 y(xtext)f(=)h(astFormat\()c(wcsinfo,)i(1,)h(xw)h(\);)227
-2618 y(ytext)f(=)h(astFormat\()c(wcsinfo,)i(2,)h(yw)h(\);)227
-2817 y(\(void\))e(printf\()g("Position)f(=)j(\045s,)f(\045s\\n",)g
-(xtext,)f(ytext)g(\);)0 3086 y FF(Here,)31 b(the)g(second)f(argumen)m
-(t)h(to)g(astF)-8 b(ormat)32 b(is)f(the)f(axis)h(n)m(um)m(b)s(er.)0
-3251 y(With)d(celestial)i(co)s(ordinates,)e(this)g(will)f(usually)g
-(result)g(in)g(sexagesimal)j(notation,)f(suc)m(h)e(as)g(\\12:34:56.7".)
-0 3364 y(Ho)m(w)m(ev)m(er,)e(the)c(same)h(metho)s(d)e(ma)m(y)i(b)s(e)e
-(applied)h(to)h(an)m(y)f(t)m(yp)s(e)g(of)g(co)s(ordinates)h(and)f
-(appropriate)g(formatting)0 3476 y(will)31 b(b)s(e)e(emplo)m(y)m(ed.)0
-3641 y(F)-8 b(or)36 b(more)g(information)g(ab)s(out)f(formatting)h(co)s
-(ordinate)g(v)-5 b(alues)36 b(and)f(ho)m(w)g(to)i(con)m(trol)f(the)g
-(st)m(yle)h(of)e(for-)0 3754 y(matting)27 b(used,)f(see)h
-Fu(x)p FF(7.6)g(and)e Fu(x)p FF(8.6.)41 b(If)25 b(necessary)-8
-b(,)28 b(also)f(see)f Fu(x)p FF(7.7)i(for)d(details)i(of)f(ho)m(w)g(to)
-g(\\normalise")i(a)e(set)0 3867 y(of)31 b(co)s(ordinates)g(so)g(that)g
-(they)f(lie)i(within)e(the)g(standard)g(range)h(\()p
-Fx(e.g.)f FF(0)h(to)g(24)g(hours)f(for)g(righ)m(t)h(ascension)0
-3980 y(and)f Fu(\006)p FF(90)338 3947 y Fp(\016)408 3980
-y FF(for)g(declination\).)0 4280 y Fw(3.11)112 b(.)19
-b(.)g(.)g(Displa)m(y)38 b(Co)s(ordinates)h(as)f(they)f(are)h(T)-9
-b(ransformed)0 4505 y FF(In)41 b(addition)h(to)g(formatting)g(co)s
-(ordinates)g(as)g(part)g(of)f(a)h(program's)g(output,)i(y)m(ou)e(ma)m
-(y)g(also)g(w)m(an)m(t)h(to)0 4618 y(examine)35 b(co)s(ordinate)f(v)-5
-b(alues)34 b(while)g(debugging)g(y)m(our)g(program.)51
-b(T)-8 b(o)34 b(sa)m(v)m(e)i(time,)f(y)m(ou)f(can)g(\\ea)m(v)m(esdrop")
-0 4731 y(on)e(the)g(co)s(ordinate)h(v)-5 b(alues)33 b(b)s(eing)f(pro)s
-(cessed)f(ev)m(ery)i(time)g(they)f(are)h(transformed.)45
-b(F)-8 b(or)33 b(example,)g(when)0 4844 y(using)23 b(the)h(F)-8
-b(rameSet)24 b(p)s(oin)m(ter)g(\\w)m(csinfo")g(obtained)g(in)f
-Fu(x)p FF(3.4)i(to)f(transform)f(co)s(ordinates)h(\()p
-Fu(x)p FF(3.7\),)k(y)m(ou)23 b(could)0 4956 y(insp)s(ect)30
-b(the)h(co)s(ordinate)g(v)-5 b(alues)31 b(as)f(follo)m(ws:)227
-5212 y Ft(astSet\()41 b(wcsinfo,)f("Report=1")g(\);)227
-5311 y(astTran2\()g(wcsinfo,)g(N,)j(xpixel,)e(ypixel,)g(1,)h(xworld,)f
-(yworld)g(\);)0 5580 y FF(By)32 b(setting)h(the)f(F)-8
-b(rameSet's)33 b(Rep)s(ort)e(attribute)h(to)h(1,)f(co)s(ordinate)h
-(transformations)f(are)g(automatically)0 5693 y(displa)m(y)m(ed)f(on)f
-(the)h(program's)f(standard)g(output)g(stream,)h(appropriately)f
-(formatted,)h(for)g(example:)p eop end
-%%Page: 20 30
-TeXDict begin 20 29 bop 0 52 a FF(20)3035 b Fy(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)227 351 y Fq(\(42.1087,)46 b(20.2717\))f(-->)i
-(\(2:06:03.0,)e(34:22:39\))227 464 y(\(43.0197,)h(21.1705\))f(-->)i
-(\(2:08:20.6,)e(35:31:24\))227 577 y(\(43.9295,)h(22.0716\))f(-->)i
-(\(2:10:38.1,)e(36:40:09\))227 690 y(\(44.8382,)h(22.9753\))f(-->)i
-(\(2:12:55.6,)e(37:48:55\))227 803 y(\(45.7459,)h(23.8814\))f(-->)i
-(\(2:15:13.1,)e(38:57:40\))227 916 y(\(46.6528,)h(24.7901\))f(-->)i
-(\(2:17:30.6,)e(40:06:25\))227 1029 y(\(47.5589,)h(25.7013\))f(-->)i
-(\(2:19:48.1,)e(41:15:11\))227 1142 y(\(48.4644,)h(26.6149\))f(-->)i
-(\(2:22:05.6,)e(42:23:56\))227 1255 y(\(49.3695,)h(27.5311\))f(-->)i
-(\(2:24:23.1,)e(43:32:41\))227 1367 y(\(50.2742,)h(28.4499\))f(-->)i
-(\(2:26:40.6,)e(44:41:27\))0 1619 y FF(F)-8 b(or)38 b(a)f(complete)h
-(description)f(of)g(the)g(Rep)s(ort)f(attribute,)k(see)d(its)g(en)m
-(try)g(in)g(App)s(endix)e(C.)59 b(F)-8 b(or)38 b(further)0
-1732 y(details)31 b(of)g(ho)m(w)f(to)h(set)g(and)f(enquire)g(attribute)
-h(v)-5 b(alues,)31 b(see)g Fu(x)p FF(4.6)h(and)e Fu(x)p
-FF(4.5.)0 2021 y Fw(3.12)112 b(.)19 b(.)g(.)g(Read)38
-b(Co)s(ordinates)g(En)m(tered)f(b)m(y)h(a)f(User)0 2240
-y FF(In)c(addition)g(to)h(writing)g(out)f(co)s(ordinate)h(v)-5
-b(alues)34 b(generated)g(b)m(y)g(y)m(our)f(program)g(\()p
-Fu(x)p FF(3.10\),)k(y)m(ou)d(ma)m(y)g(also)0 2353 y(need)c(to)h(accept)
-h(co)s(ordinates)f(en)m(tered)g(b)m(y)f(a)h(user,)f(or)g(p)s(erhaps)f
-(read)h(from)g(a)h(\014le.)41 b(In)29 b(this)i(case,)g(y)m(ou)g(will)0
-2466 y(probably)g(w)m(an)m(t)i(to)g(allo)m(w)g(\\free-format")h(input,)
-d(so)h(that)h(the)f(user)f(has)h(some)g(\015exibilit)m(y)h(in)f(the)g
-(format)0 2578 y(that)f(can)g(b)s(e)e(used.)40 b(Y)-8
-b(ou)31 b(will)g(probably)e(also)j(w)m(an)m(t)f(to)g(detect)h(an)m(y)f
-(t)m(yping)f(errors.)0 2738 y(Let's)f(assume)g(that)g(y)m(ou)g(w)m(an)m
-(t)h(to)f(read)g(a)g(n)m(um)m(b)s(er)e(of)i(lines)g(of)g(text,)h(eac)m
-(h)g(con)m(taining)h(the)d(w)m(orld)h(co)s(ordi-)0 2851
-y(nates)g(of)g(a)g(single)g(p)s(oin)m(t,)g(and)f(to)h(split)g(eac)m(h)g
-(line)g(in)m(to)h(individual)d(n)m(umerical)i(co)s(ordinate)h(v)-5
-b(alues.)40 b(Using)0 2964 y(the)31 b(F)-8 b(rameSet)31
-b(p)s(oin)m(ter)g(\\w)m(csinfo")g(obtained)g(earlier)g(\()p
-Fu(x)p FF(3.4\),)i(y)m(ou)e(could)f(pro)s(ceed)g(as)h(follo)m(ws:)227
-3202 y Ft(#include)41 b(<stdio.h>)227 3302 y(char)h(*t;)227
-3402 y(char)g(text[)g(MAXCHARS)e(+)j(2)g(];)227 3501
-y(double)e(coord[)g(10)i(];)227 3601 y(int)g(iaxis,)e(n,)h(naxes;)227
-3800 y(...)227 3999 y(/*)h(Obtain)e(the)h(number)g(of)g(coordinate)e
-(axes)i(\(if)g(not)g(already)f(known\).)g(*/)227 4099
-y(naxes)h(=)h(astGetI\()d(wcsinfo,)h("Naxes")f(\);)227
-4298 y(/*)j(Loop)f(to)h(read)f(each)g(line)g(of)g(input)g(text,)f(in)i
-(this)f(case)g(from)g(the)358 4398 y(standard)e(input)i(stream)f
-(\(your)g(programming)e(environment)h(will)h(probably)358
-4497 y(provide)g(a)i(better)e(way)h(of)h(reading)e(text)h(than)g
-(this\).)f(Set)h(the)g(pointer)358 4597 y("t")g(to)h(the)f(start)g(of)h
-(each)f(line)g(read.)f(*/)227 4697 y(while)h(\()h(t)g(=)g(fgets\()e
-(text,)h(MAXCHARS)e(+)j(2,)g(stdin)f(\))h(\))g({)227
-4896 y(/*)g(Attempt)e(to)h(read)g(a)i(coordinate)39 b(for)j(each)g
-(axis.)g(*/)358 4996 y(for)g(\()i(iaxis)d(=)i(1;)g(iaxis)f(<=)g(naxes;)
-f(iaxis++)g(\))i({)489 5095 y(n)g(=)g(astUnformat\()c(wcsinfo,)h
-(iaxis,)h(t,)i(&coord[)e(iaxis)g(-)i(1)g(])h(\);)227
-5295 y(/*)f(If)g(nothing)d(was)j(read)f(and)g(this)g(is)h(not)f(the)g
-(first)g(axis)g(or)h(the)358 5394 y(end-of-string,)38
-b(try)k(stepping)e(over)i(a)i(separator)39 b(and)k(reading)d(again.)i
-(*/)358 5494 y(if)h(\()g(!n)g(&&)f(\()i(iaxis)d(>)i(1)h(\))f(&&)f(*t)h
-(\))489 5593 y(n)g(=)g(astUnformat\()c(wcsinfo,)h(iaxis,)h(++t,)h
-(&coord[)f(iaxis)g(-)i(1)h(])f(\);)p eop end
-%%Page: 21 31
-TeXDict begin 21 30 bop 0 52 a Fy(3.13)93 b(.)15 b(.)g(.)h(Create)31
-b(a)g(New)f(W)m(CS)h(Calibration)2055 b FF(21)227 351
-y Ft(/*)43 b(Quit)f(if)h(nothing)d(was)j(read,)e(otherwise)f(move)i(on)
-h(to)g(the)f(next)g(coordinate.)d(*/)489 451 y(if)k(\()g(!n)f(\))i
-(break;)489 551 y(t)f(+=)g(n;)358 650 y(})227 849 y(/*)g(Test)f(for)g
-(the)h(possible)d(errors)h(that)h(may)g(occur...)f(*/)227
-1049 y(/*)i(Error)f(detected)e(by)j(AST)f(\(a)h(message)d(will)i(have)g
-(been)g(issued\).)e(*/)358 1148 y(if)j(\()g(!astOK)e(\))i({)489
-1248 y(break;)227 1447 y(/*)g(Error)f(in)g(input)g(data)g(at)h
-(character)c(t[n].)j(*/)358 1547 y(})h(else)f(if)h(\()g(*t)g(||)g(!n)f
-(\))i({)489 1646 y(<handle)c(the)j(error,)e(or)i(report)e(your)h(own)g
-(message)f(here>)489 1746 y(break;)358 1945 y(})i(else)f({)489
-2045 y(<coordinates)c(were)k(read)g(OK>)358 2145 y(})227
-2244 y(})0 2486 y FF(This)24 b(algorithm)i(has)f(the)g(adv)-5
-b(an)m(tage)27 b(of)e(accepting)i(free-format)f(input)e(in)g(whatev)m
-(er)i(st)m(yle)g(is)f(appropriate)0 2599 y(for)i(the)h(w)m(orld)g(co)s
-(ordinates)g(in)f(use)h(\(under)e(the)i(con)m(trol)h(of)f(the)g(F)-8
-b(rameSet)29 b(whose)e(p)s(oin)m(ter)h(y)m(ou)g(pro)m(vide\).)0
-2712 y(F)-8 b(or)23 b(example,)i(w)m(a)m(v)m(elength)f(v)-5
-b(alues)23 b(migh)m(t)f(b)s(e)g(read)g(as)g(\015oating)h(p)s(oin)m(t)g
-(n)m(um)m(b)s(ers)d(\()p Fx(e.g.)i FF(\\1.047")j(or)d(\\4787"\),)0
-2825 y(whereas)33 b(celestial)j(p)s(ositions)e(could)f(b)s(e)g(giv)m
-(en)i(in)e(sexagesimal)i(format)f(\()p Fx(e.g.)f FF(\\12:34:56")38
-b(or)33 b(\\12)i(34.5"\))0 2938 y(and)d(w)m(ould)h(b)s(e)f(con)m(v)m
-(erted)i(in)m(to)g(radians.)48 b(Individual)32 b(co)s(ordinate)h(v)-5
-b(alues)34 b(ma)m(y)f(b)s(e)f(separated)i(b)m(y)e(white)0
-3051 y(space)f(and/or)f(an)m(y)h(non-am)m(biguous)f(separator)h(c)m
-(haracter,)h(suc)m(h)e(as)h(a)g(comma.)0 3209 y(F)-8
-b(or)39 b(more)f(information)g(on)g(reading)g(co)s(ordinate)h(v)-5
-b(alues)38 b(using)g(the)g(astUnformat)g(function,)i(see)f
-Fu(x)p FF(7.8.)0 3322 y(F)-8 b(or)35 b(details)g(of)g(ho)m(w)f
-(sexagesimal)j(formats)d(are)h(handled,)g(and)e(the)i(forms)f(of)g
-(input)g(that)h(ma)m(y)g(b)s(e)e(used)0 3434 y(for)d(celestial)j(co)s
-(ordinates,)e(see)g Fu(x)p FF(8.7.)0 3720 y Fw(3.13)112
-b(.)19 b(.)g(.)g(Create)37 b(a)h(New)f(W)m(CS)g(Calibration)0
-3937 y FF(This)29 b(section)h(describ)s(es)f(ho)m(w)g(to)h(add)f(a)h(W)
-m(CS)f(calibration)i(to)f(a)g(data)g(set)g(whic)m(h)f(y)m(ou)g(are)h
-(creating)h(from)0 4050 y(scratc)m(h,)h(rather)e(than)g(mo)s(difying)g
-(an)g(existing)h(data)g(set.)0 4207 y(In)d(most)g(common)h(cases,)h
-(the)e(simplest)g(w)m(a)m(y)i(to)f(create)g(a)g(new)f(W)m(CS)g
-(calibration)i(from)e(scratc)m(h)h(is)f(prob-)0 4320
-y(ably)i(to)h(create)h(a)e(set)h(of)f(strings)g(describing)g(the)g
-(required)g(calibration)h(in)f(terms)g(of)g(the)h(k)m(eyw)m(ords)f
-(used)0 4433 y(b)m(y)k(the)g(FITS)g(W)m(CS)g(standard,)g(and)g(then)g
-(con)m(v)m(ert)h(these)g(strings)f(in)m(to)h(an)f(AST)f(F)-8
-b(rameSet)36 b(describing)0 4546 y(the)d(calibration.)48
-b(This)32 b(F)-8 b(rameSet)33 b(can)g(then)f(b)s(e)g(used)g(for)g(man)m
-(y)h(other)f(purp)s(oses,)g(or)g(simply)g(stored)h(in)0
-4659 y(the)e(data)g(set.)0 4817 y(The)h(full)h(FITS-W)m(CS)g(standard)f
-(is)h(quite)g(in)m(v)m(olv)m(ed,)j(curren)m(tly)d(running)e(to)i(four)g
-(separate)h(pap)s(ers,)e(but)0 4929 y(the)42 b(basic)g(k)m(ernel)g(is)g
-(quite)g(simple,)j(in)m(v)m(olving)e(the)f(follo)m(wing)i(k)m(eyw)m
-(ords)e(\(all)h(of)f(whic)m(h)f(end)g(with)h(an)0 5042
-y(in)m(teger)32 b(axis)f(index,)f(indicated)h(b)s(elo)m(w)f(b)m(y)h
-Fo(<)25 b(i)g(>)p FF(\):)0 5285 y FD(CRPIX<i>)227 5398
-y FF(hold)30 b(the)h(pixel)g(co)s(ordinates)g(at)g(a)g(reference)f(p)s
-(oin)m(t)0 5580 y FD(CR)-12 b(V)g(AL<i>)227 5693 y FF(hold)30
-b(the)h(corresp)s(onding)e(W)m(CS)i(co)s(ordinates)g(at)g(the)f
-(reference)h(p)s(oin)m(t)p eop end
-%%Page: 22 32
-TeXDict begin 22 31 bop 0 52 a FF(22)3035 b Fy(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)0 351 y FD(CTYPE<i>)227 464 y FF(name)33
-b(the)f(quan)m(tit)m(y)h(represen)m(ted)f(b)m(y)h(the)f(W)m(CS)g(axes,)
-i(together)f(with)f(the)h(pro)5 b(jection)32 b(algorithm)227
-577 y(used)e(to)h(con)m(v)m(ert)h(the)e(scaled)i(and)d(rotated)j(pixel)
-f(co)s(ordinates)g(to)g(W)m(CS)f(co)s(ordinates.)0 774
-y FD(CD<i>)p Fq(_)p FD(<j>)227 887 y FF(a)i(set)g(of)f(k)m(eyw)m(ords)h
-(whic)m(h)e(sp)s(ecify)h(the)h(elemen)m(ts)g(of)g(a)f(matrix.)44
-b(This)30 b(matrix)i(scales)g(pixel)g(o\013sets)227 1000
-y(from)41 b(the)f(reference)i(p)s(oin)m(t)e(in)m(to)i(the)f(o\013sets)h
-(required)e(as)h(input)e(b)m(y)i(the)g(pro)5 b(jection)41
-b(algorithm)227 1113 y(sp)s(eci\014ed)e(b)m(y)g(the)h(CTYPE)e(k)m(eyw)m
-(ords.)68 b(This)39 b(matrix)g(sp)s(eci\014es)g(the)h(scale)g(and)f
-(rotation)i(of)e(the)227 1226 y(image.)63 b(If)36 b(there)i(is)f(no)g
-(rotation)h(the)g(o\013-diagonal)h(elemen)m(ts)g(of)e(the)g(matrix)h
-(\()p Fx(e.g.)60 b FF(CD1)p Fq(_)p FF(2)38 b(and)227
-1339 y(CD2)p Fq(_)p FF(1\))32 b(can)e(b)s(e)g(omitted.)0
-1616 y(As)37 b(an)h(example)g(consider)f(the)h(common)g(case)g(of)g(a)g
-(simple)f(2D)i(image)g(of)e(the)h(sky)f(in)g(whic)m(h)h(north)e(is)0
-1729 y(parallel)f(to)f(the)g(second)g(pixel)g(axis)g(and)f(east)i
-(parallel)f(to)h(the)f(\(negativ)m(e\))i(\014rst)d(pixel)h(axis.)51
-b(The)33 b(image)0 1841 y(scale)27 b(is)f(1.2)h(arc-seconds)f(p)s(er)f
-(pixel)h(on)f(b)s(oth)g(axes,)j(and)d(the)h(image)h(is)f(presumed)e(to)
-i(ha)m(v)m(e)h(b)s(een)e(obtained)0 1954 y(with)35 b(a)h(tangen)m(t)g
-(plane)f(pro)5 b(jection.)56 b(F)-8 b(urthermore,)37
-b(it)f(is)f(kno)m(wn)g(that)g(pixel)h(co)s(ordinates)g(\(100.5,98.4\))0
-2067 y(corresp)s(ond)31 b(to)j(an)e(RA)h(of)f(11:00:10)k(and)c(a)h
-(Dec.)48 b(of)33 b(-23:26:02.)51 b(A)33 b(suitable)g(set)g(of)f(FITS-W)
-m(CS)h(header)0 2180 y(cards)d(could)h(b)s(e:)227 2444
-y Ft(CTYPE1)85 b(=)43 b('RA---TAN')301 b(/)43 b(Axis)f(1)h(represents)d
-(RA)j(with)f(a)h(tan)f(projection)227 2543 y(CTYPE2)85
-b(=)43 b('DEC--TAN')301 b(/)43 b(Axis)f(2)h(represents)d(Dec)i(with)g
-(a)h(tan)g(projection)227 2643 y(CRPIX1)85 b(=)43 b(100.5)521
-b(/)43 b(Pixel)f(coordinates)d(of)k(reference)c(point)227
-2743 y(CRPIX2)85 b(=)43 b(98.4)565 b(/)43 b(Pixel)f(coordinates)d(of)k
-(reference)c(point)227 2842 y(CRVAL1)85 b(=)43 b(165.04167)345
-b(/)43 b(Degrees)e(equivalent)e(of)k("11:00:10")d(hours)227
-2942 y(CRVAL2)85 b(=)43 b(-23.433889)301 b(/)43 b(Decimal)e(equivalent)
-e(of)k("-23:26:02")c(degrees)227 3041 y(CD1_1)129 b(=)43
-b(-0.0003333333)169 b(/)43 b(Decimal)e(degrees)g(equivalent)e(of)k
-(-1.2)f(arc-seconds)227 3141 y(CD2_2)129 b(=)43 b(0.0003333333)213
-b(/)43 b(Decimal)e(degrees)g(equivalent)e(of)k(1.2)f(arc-seconds)0
-3418 y FF(Notes:)136 3667 y Fu(\017)k FF(a)37 b(FITS)f(header)g(card)h
-(b)s(egins)f(with)g(the)g(k)m(eyw)m(ord)h(name)g(starting)g(at)g
-(column)g(1,)h(has)f(an)f(equals)227 3780 y(sign)31 b(in)f(column)g(9,)
-h(and)f(the)g(k)m(eyw)m(ord)h(v)-5 b(alue)31 b(in)f(columns)g(11)h(to)g
-(80.)136 3978 y Fu(\017)46 b FF(string)31 b(v)-5 b(alues)30
-b(m)m(ust)h(b)s(e)e(enclosed)i(in)f(single)h(quotes.)136
-4175 y Fu(\017)46 b FF(celestial)33 b(longitude)e(and)f(latitude)h(m)m
-(ust)g(b)s(oth)e(b)s(e)h(sp)s(eci\014ed)g(in)g(decimal)h(degrees.)136
-4372 y Fu(\017)46 b FF(the)28 b(CD1)p Fq(_)p FF(1)g(v)-5
-b(alue)29 b(is)e(negativ)m(e)j(to)f(indicate)f(that)h(RA)e(increases)i
-(as)e(the)h(\014rst)f(pixel)h(axis)g(decreases.)136 4569
-y Fu(\017)46 b FF(the)31 b(\(RA,Dec\))h(co)s(ordinates)g(will)e(b)s(e)g
-(tak)m(en)h(as)g(ICRS)e(co)s(ordinates.)42 b(F)-8 b(or)31
-b(FK5)g(y)m(ou)f(should)g(add:)427 4781 y Ft(RADESYS)41
-b(=)i('FK5')427 4880 y(EQUINOX)e(=)i(2005.6)227 5105
-y FF(The)38 b(EQUINO)m(X)f(v)-5 b(alue)39 b(defaults)e(to)i(J2000.0)h
-(if)d(omitted.)64 b(FK4)38 b(can)g(also)h(b)s(e)e(used)g(in)h(place)g
-(of)227 5218 y(FK5,)31 b(in)f(whic)m(h)g(case)i(EQUINO)m(X)e(defaults)h
-(to)g(B1950.0.)0 5467 y(Once)21 b(y)m(ou)g(ha)m(v)m(e)h(created)g
-(these)f(FITS-W)m(CS)g(header)f(card)h(strings,)i(y)m(ou)e(should)f
-(store)h(them)g(in)f(a)i(FitsChan)0 5580 y(and)33 b(then)g(read)g(the)h
-(corresp)s(onding)e(F)-8 b(rameSet)34 b(from)f(the)h(FitsChan.)49
-b(Ho)m(w)35 b(to)f(do)f(this)g(is)h(describ)s(ed)e(in)0
-5693 y Fu(x)p FF(3.4.)p eop end
-%%Page: 23 33
-TeXDict begin 23 32 bop 0 52 a Fy(3.14)93 b(.)15 b(.)g(.)h(Mo)s(dify)30
-b(a)h(W)m(CS)f(Calibration)2240 b FF(23)0 351 y(Ha)m(ving)32
-b(created)g(the)f(W)m(CS)f(calibration,)j(y)m(ou)e(ma)m(y)g(w)m(an)m(t)
-h(to)f(store)g(it)h(in)e(a)h(data)h(\014le.)41 b(Ho)m(w)32
-b(to)f(do)g(this)f(is)0 464 y(describ)s(ed)f(in)h Fu(x)p
-FF(3.15\).)768 431 y Fv(6)0 627 y FF(If)39 b(the)h(required)f(W)m(CS)h
-(calibration)h(cannot)g(b)s(e)e(describ)s(ed)g(as)h(a)g(set)g(of)g
-(FITS-W)m(CS)g(headers,)i(then)d(a)0 740 y(di\013eren)m(t)f(approac)m
-(h)f(is)g(necessary)-8 b(.)61 b(In)37 b(this)g(case,)j(y)m(ou)d(should)
-f(\014rst)g(create)j(a)e(F)-8 b(rame)38 b(describing)f(pixel)0
-853 y(co)s(ordinates,)42 b(and)c(store)h(this)g(F)-8
-b(rame)39 b(in)g(a)g(new)f(F)-8 b(rameSet.)67 b(Y)-8
-b(ou)39 b(should)f(then)g(create)i(a)f(new)g(F)-8 b(rame)0
-966 y(describing)33 b(the)h(w)m(orld)f(co)s(ordinate)h(system.)50
-b(This)33 b(F)-8 b(rame)34 b(ma)m(y)g(b)s(e)f(a)h(sp)s(eci\014c)f(sub)s
-(class)g(of)g(F)-8 b(rame)35 b(suc)m(h)0 1079 y(as)c(a)f(SkyF)-8
-b(rame)31 b(for)f(celestial)j(co)s(ordinates,)e(a)g(Sp)s(ecF)-8
-b(rame)31 b(for)f(sp)s(ectral)g(co)s(ordinates,)i(a)e(Timeframe)h(for)0
-1192 y(time)40 b(co)s(ordinates,)j(or)d(a)g(CmpF)-8 b(rame)39
-b(for)h(a)g(com)m(bination)h(of)f(di\013eren)m(t)g(co)s(ordinates.)69
-b(Y)-8 b(ou)40 b(also)h(need)0 1305 y(to)35 b(create)g(a)g(suitable)f
-(Mapping)g(whic)m(h)g(transforms)f(pixel)h(co)s(ordinates)h(in)m(to)g
-(w)m(orld)f(co)s(ordinates.)52 b(AST)0 1418 y(pro)m(vides)32
-b(man)m(y)f(di\013eren)m(t)i(t)m(yp)s(es)e(of)h(Mappings,)g(all)h(of)f
-(whic)m(h)f(can)h(b)s(e)f(com)m(bined)h(together)h(in)f(arbitrary)0
-1531 y(fashions)c(to)g(create)i(more)e(complicated)h(Mappings.)40
-b(The)27 b(W)m(CS)h(F)-8 b(rame)29 b(should)e(then)h(b)s(e)f(added)g
-(in)m(to)i(the)0 1643 y(F)-8 b(rameSet,)32 b(using)e(the)g(Mapping)h
-(to)g(connect)g(the)g(W)m(CS)f(F)-8 b(rame)31 b(with)f(the)h(pixel)g(F)
--8 b(rame.)0 1938 y Fw(3.14)112 b(.)19 b(.)g(.)g(Mo)s(dify)38
-b(a)g(W)m(CS)f(Calibration)0 2160 y FF(The)c(usual)g(reason)g(for)h
-(wishing)e(to)j(mo)s(dify)d(the)i(W)m(CS)f(calibration)i(asso)s(ciated)
-g(with)e(a)h(dataset)g(is)g(that)0 2273 y(the)24 b(data)g(ha)m(v)m(e)h
-(b)s(een)e(geometrically)k(transformed)22 b(in)i(some)g(w)m(a)m(y)h
-(\(here,)g(w)m(e)f(will)g(assume)g(a)g(2-dimensional)0
-2386 y(image)36 b(dataset\).)54 b(This)33 b(causes)i(the)f(image)i
-(features)e(\(stars,)i(galaxies,)i Fx(etc.)p FF(\))52
-b(to)35 b(mo)m(v)m(e)h(with)d(resp)s(ect)i(to)0 2499
-y(the)29 b(grid)g(of)g(pixels)g(whic)m(h)f(they)h(o)s(ccup)m(y)-8
-b(,)30 b(so)g(that)f(an)m(y)g(co)s(ordinate)h(systems)f(previously)f
-(asso)s(ciated)j(with)0 2611 y(the)g(image)g(b)s(ecome)g(in)m(v)-5
-b(alid.)0 2775 y(T)d(o)34 b(correct)g(for)f(this,)g(it)h(is)f
-(necessary)g(to)h(set)g(up)e(a)h(Mapping)g(whic)m(h)g(expresses)g(the)g
-(p)s(ositions)g(of)g(image)0 2887 y(features)e(in)f(the)g(new)g(data)h
-(grid)f(in)g(terms)h(of)f(their)h(p)s(ositions)f(in)g(the)g(old)h
-(grid.)40 b(In)30 b(b)s(oth)g(cases,)h(the)g(grid)0 3000
-y(co)s(ordinates)f(w)m(e)g(use)g(will)f(ha)m(v)m(e)i(the)f(\014rst)f
-(pixel)h(cen)m(tred)g(at)g(\(1,1\))h(with)f(eac)m(h)g(pixel)g(b)s(eing)
-f(a)h(unit)f(square.)0 3163 y(AST)j(allo)m(ws)h(y)m(ou)g(to)g(correct)g
-(for)f(an)m(y)h(t)m(yp)s(e)f(of)h(geometrical)i(transformation)e(in)f
-(this)g(w)m(a)m(y)-8 b(,)34 b(so)f(long)g(as)f(a)0 3276
-y(suitable)c(Mapping)g(to)g(describ)s(e)f(it)i(can)f(b)s(e)f
-(constructed.)40 b(F)-8 b(or)28 b(purp)s(oses)e(of)i(illustration,)h(w)
-m(e)g(will)f(assume)0 3389 y(here)k(that)h(the)f(new)g(image)h(co)s
-(ordinates)g(\\xnew")g(and)e(\\ynew")i(can)f(b)s(e)g(expressed)g(in)f
-(terms)i(of)f(the)g(old)0 3502 y(co)s(ordinates)f(\\xold")g(and)f(\\y)m
-(old")i(as)f(follo)m(ws:)227 3752 y Ft(double)41 b(xnew,)h(xold,)f
-(ynew,)h(yold;)227 3852 y(double)f(m[)i(4)g(],)g(z[)g(2)g(];)227
-4051 y(...)227 4250 y(xnew)f(=)h(xold)f(*)h(m[)g(0)g(])h(+)f(yold)f(*)h
-(m[)g(1)g(])g(+)g(z[)g(0)g(];)227 4350 y(ynew)f(=)h(xold)f(*)h(m[)g(2)g
-(])h(+)f(yold)f(*)h(m[)g(3)g(])g(+)g(z[)g(1)g(];)0 4613
-y FF(where)27 b(\\m")g(is)h(a)f(2)p Fu(\002)p FF(2)h(transformation)f
-(matrix)h(and)e(\\z")j(represen)m(ts)e(a)g(shift)g(of)g(origin.)40
-b(This)27 b(is)g(therefore)0 4726 y(a)i(general)h(linear)f(co)s
-(ordinate)h(transformation)f(whic)m(h)g(can)g(represen)m(t)g
-(displacemen)m(t,)i(rotation,)f(magni\014-)0 4839 y(cation)i(and)d
-(shear.)0 5002 y(In)d(AST,)h(it)g(can)g(b)s(e)f(represen)m(ted)h(b)m(y)
-g(concatenating)i(t)m(w)m(o)g(Mappings.)39 b(The)26 b(\014rst)g(is)h(a)
-h(MatrixMap,)h(whic)m(h)0 5115 y(implemen)m(ts)i(the)f(matrix)h(m)m
-(ultiplication.)42 b(The)30 b(second)g(is)g(a)h(WinMap,)g(whic)m(h)f
-(linearly)h(transforms)e(one)0 5228 y(co)s(ordinate)i(windo)m(w)f(on)g
-(to)h(another,)f(but)g(will)g(b)s(e)g(used)f(here)h(simply)g(to)h
-(implemen)m(t)f(the)h(shift)f(of)g(origin)0 5341 y(\(alternativ)m(ely)
--8 b(,)37 b(a)c(ShiftMap)f(could)g(ha)m(v)m(e)i(b)s(een)e(used)g(in)g
-(place)i(of)e(a)h(WinMap\).)48 b(These)33 b(Mappings)f(ma)m(y)0
-5454 y(b)s(e)e(constructed)g(and)g(concatenated)j(as)d(follo)m(ws:)p
-0 5516 1512 4 v 104 5570 a Fs(6)138 5602 y Fr(If)23 b(y)n(ou)g(are)h
-(writing)g(the)e(W)n(CS)h(calibration)i(to)e(a)h(FITS)f(\014le)g(y)n
-(ou)f(ob)n(viously)h(ha)n(v)n(e)g(the)g(c)n(hoice)g(of)h(storing)g(the)
-f(FITS-W)n(CS)0 5693 y(cards)j(directly)-6 b(.)p eop
-end
-%%Page: 24 34
-TeXDict begin 24 33 bop 0 52 a FF(24)3035 b Fy(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)227 351 y Ft(AstCmpMap)40 b(*newmap;)227
-451 y(AstMatrixMap)f(*matrixmap;)227 551 y(AstWinMap)h(*winmap;)227
-750 y(...)227 949 y(/*)j(The)f(MatrixMap)e(may)j(be)f(constructed)d
-(directly)i(from)h(the)g(matrix)f("m".)h(*/)227 1049
-y(matrixmap)e(=)j(astMatrixMap\()c(2,)j(2,)h(0,)g(m,)g("")f(\);)227
-1248 y(/*)h(For)f(the)h(WinMap,)d(we)j(set)g(up)f(the)h(coordinates)c
-(of)j(the)h(corners)d(of)j(a)g(unit)358 1348 y(square)e(\(window\))f
-(and)j(then)f(the)g(same)g(square)f(shifted)g(by)i(the)f(required)358
-1447 y(amount.)f(*/)227 1547 y({)358 1646 y(double)g(ina[])h(=)h({)g
-(0.0,)f(0.0)g(};)358 1746 y(double)f(inb[])h(=)h({)g(1.0,)f(1.0)g(};)
-358 1846 y(double)f(outa[])g(=)i({)305 b(z[)43 b(0)g(],)304
-b(z[)43 b(1)g(])g(};)358 1945 y(double)e(outb[])g(=)i({)h(1.0)e(+)h(z[)
-g(0)g(],)g(1.0)f(+)h(z[)g(1)g(])g(};)227 2145 y(/*)g(The)f(WinMap)f
-(will)h(then)g(implement)e(this)i(shift.)f(*/)358 2244
-y(winmap)g(=)i(astWinMap\()d(2,)j(ina,)e(inb,)h(outa,)g(outb,)f("")i
-(\);)227 2344 y(})227 2543 y(/*)g(Join)f(the)g(two)h(Mappings)d
-(together,)g(so)j(that)e(they)h(are)h(applied)d(one)j(after)358
-2643 y(the)f(other.)f(*/)227 2742 y(newmap)g(=)j(astCmpMap\()39
-b(matrixmap,)g(winmap,)i(1,)i("")g(\);)0 2959 y FF(Y)-8
-b(ou)33 b(migh)m(t,)i(of)e(course,)h(create)h(an)m(y)e(other)g(form)g
-(of)g(Mapping)g(dep)s(ending)e(on)i(the)g(t)m(yp)s(e)h(of)f
-(geometrical)0 3072 y(transformation)g(in)m(v)m(olv)m(ed.)51
-b(F)-8 b(or)33 b(an)g(o)m(v)m(erview)i(of)e(the)g(Mappings)g(pro)m
-(vided)g(b)m(y)g(AST,)f(see)i Fu(x)p FF(2.2,)h(and)e(for)0
-3184 y(a)g(description)g(of)f(the)h(capabilities)i(of)e(eac)m(h)g
-(class)h(of)f(Mapping,)g(see)g(its)g(en)m(try)g(in)f(App)s(endix)f(D.)
-48 b(F)-8 b(or)34 b(an)0 3297 y(o)m(v)m(erview)e(of)f(ho)m(w)f
-(individual)g(Mappings)g(ma)m(y)h(b)s(e)f(com)m(bined,)g(see)h
-Fu(x)p FF(2.3)h(\()p Fu(x)p FF(6)g(giv)m(es)f(more)g(details\).)0
-3449 y(Assuming)21 b(y)m(ou)h(ha)m(v)m(e)h(obtained)e(a)h(W)m(CS)g
-(calibration)h(for)e(y)m(our)h(original)h(image)f(in)g(the)f(form)g(of)
-h(a)g(p)s(oin)m(ter)g(to)0 3562 y(a)k(F)-8 b(rameSet,)28
-b(\\w)m(csinfo1")f(\()p Fu(x)p FF(3.4\),)i(the)d(Mapping)g(created)g
-(ab)s(o)m(v)m(e)h(ma)m(y)f(b)s(e)f(used)g(to)i(pro)s(duce)d(a)i
-(calibration)0 3674 y(for)k(the)h(new)f(image)h(as)g(follo)m(ws:)227
-3878 y Ft(AstFrameSet)39 b(*wcsinfo1,)h(*wcsinfo2;)227
-4077 y(...)227 4276 y(/*)j(If)g(necessary,)c(make)j(a)h(copy)f(of)h
-(the)f(WCS)h(calibration,)38 b(since)k(we)h(are)358 4376
-y(about)f(to)g(alter)g(it.)g(*/)227 4475 y(wcsinfo2)f(=)i(astCopy\()d
-(wcsinfo1)g(\);)227 4675 y(/*)j(Re-map)e(the)h(base)g(Frame)g(so)h
-(that)f(it)g(refers)f(to)i(the)g(new)f(data)g(grid)358
-4774 y(instead)f(of)h(the)h(old)f(one.)g(*/)227 4874
-y(astRemapFrame\()c(wcsinfo2,)i(AST__BASE,)f(newmap)i(\);)0
-5090 y FF(This)28 b(will)h(pro)s(duce)f(a)h(p)s(oin)m(ter,)g(\\w)m
-(csinfo2",)i(to)f(a)f(new)f(F)-8 b(rameSet)30 b(in)f(whic)m(h)f(all)i
-(the)f(co)s(ordinate)g(systems)0 5203 y(asso)s(ciated)34
-b(with)e(y)m(our)g(original)i(image)f(are)g(mo)s(di\014ed)e(so)i(that)g
-(they)g(are)f(correctly)i(registered)f(with)f(the)0 5316
-y(new)e(image)h(instead.)0 5467 y(F)-8 b(or)26 b(more)e(information)h
-(ab)s(out)g(re-mapping)f(the)h(F)-8 b(rames)26 b(within)e(a)h(F)-8
-b(rameSet,)28 b(see)d Fu(x)p FF(14.4.)41 b(Also)25 b(see)h
-Fu(x)p FF(14.5)0 5580 y(for)35 b(a)g(similar)g(example)g(to)h(the)f(ab)
-s(o)m(v)m(e,)i(applicable)f(to)f(the)g(case)h(of)f(reducing)f(the)h
-(size)h(of)f(an)g(image)h(b)m(y)0 5693 y(binning.)p eop
-end
-%%Page: 25 35
-TeXDict begin 25 34 bop 0 52 a Fy(3.15)93 b(.)15 b(.)g(.)h(W)-8
-b(rite)32 b(a)e(Mo)s(di\014ed)g(W)m(CS)g(Calibration)h(to)h(a)e
-(Dataset)1399 b FF(25)0 351 y Fw(3.15)112 b(.)19 b(.)g(.)g(W)-9
-b(rite)36 b(a)i(Mo)s(di\014ed)h(W)m(CS)e(Calibration)i(to)e(a)h
-(Dataset)0 576 y FF(If)g(y)m(ou)h(ha)m(v)m(e)g(mo)s(di\014ed)f(the)g(W)
-m(CS)h(calibration)g(asso)s(ciated)h(with)e(a)h(dataset,)j(suc)m(h)c
-(as)h(in)f(the)h(example)0 688 y(ab)s(o)m(v)m(e)32 b(\()p
-Fu(x)p FF(3.14\),)h(then)d(y)m(ou)h(will)f(need)g(to)i(write)e(the)h
-(mo)s(di\014ed)e(v)m(ersion)i(out)f(along)i(with)e(an)m(y)h(new)e
-(data.)0 853 y(In)c(the)h(same)g(w)m(a)m(y)h(as)f(when)f(reading)h(a)g
-(W)m(CS)g(calibration)h(\()p Fu(x)p FF(3.4\),)i(ho)m(w)d(y)m(ou)g(do)g
-(this)g(will)g(dep)s(end)e(on)i(y)m(our)0 966 y(data)k(system,)g(but)f
-(w)m(e)h(will)g(assume)f(that)h(y)m(ou)g(wish)e(to)j(generate)f(a)g
-(set)g(of)g(FITS)f(header)g(cards)g(that)h(can)0 1079
-y(b)s(e)35 b(stored)i(with)e(the)h(data.)59 b(Y)-8 b(ou)36
-b(should)f(usually)h(mak)m(e)h(preparations)f(for)g(doing)g(this)g
-(when)f(y)m(ou)h(\014rst)0 1192 y(read)f(the)g(W)m(CS)g(calibration)h
-(from)f(y)m(our)f(input)g(dataset)j(b)m(y)d(mo)s(difying)h(the)g
-(example)g(giv)m(en)h(in)f Fu(x)p FF(3.4)h(as)0 1305
-y(follo)m(ws:)227 1560 y Ft(AstFitsChan)j(*fitschan1;)227
-1659 y(AstFrameSet)g(*wcsinfo1;)227 1759 y(const)j(char)g(*encode;)227
-1958 y(...)227 2157 y(/*)h(Create)e(an)i(input)e(FitsChan)g(and)h(fill)
-g(it)h(with)f(FITS)g(header)f(cards.)g(Note,)358 2257
-y(if)i(you)f(have)g(all)g(the)h(header)e(cards)g(in)i(a)g(single)e
-(string,)g(use)h(astPutCards)d(in)358 2357 y(place)j(of)g(astPutFits.)d
-(*/)227 2456 y(fitschan1)h(=)j(astFitsChan\()c(NULL,)i(NULL,)h("")h
-(\);)227 2556 y(for)g(\()g(icard)e(=)i(0;)g(icard)f(<)h(ncard;)e
-(icard++)g(\))i(astPutFits\()c(fitschan1,)g(cards[)i(icard)h(],)h(0)g
-(\);)227 2755 y(/*)g(Note)f(which)f(encoding)g(has)h(been)g(used)g(for)
-g(the)h(WCS)f(information.)d(*/)227 2855 y(encode)i(=)j(astGetC\()c
-(fitschan1,)f("Encoding")h(\);)227 3054 y(/*)j(Rewind)e(the)h(input)g
-(FitsChan)e(and)j(read)f(the)g(WCS)g(information)d(from)j(it.)h(*/)227
-3154 y(astClear\()d(fitschan1,)g("Card")h(\);)227 3253
-y(wcsinfo1)g(=)i(astRead\()d(fitschan1)g(\);)0 3521 y
-FF(Note)33 b(ho)m(w)e(w)m(e)h(ha)m(v)m(e)h(added)e(an)g(enquiry)g(to)h
-(determine)g(ho)m(w)f(the)h(W)m(CS)g(information)f(is)h(enco)s(ded)f
-(in)g(the)0 3634 y(input)f(FITS)g(cards,)h(storing)g(a)h(p)s(oin)m(ter)
-e(to)i(the)f(resulting)g(string)g(in)g(the)g(\\enco)s(de")h(v)-5
-b(ariable.)43 b(This)30 b(m)m(ust)0 3747 y(b)s(e)g(done)g
-FD(b)s(efore)g FF(actually)i(reading)f(the)f(W)m(CS)h(calibration.)0
-3912 y Fx(\()p FD(N.B.)g Fx(If)f(you)h(wil)5 b(l)31 b(b)-5
-b(e)31 b(making)g(extensive)f(use)h(of)g(astGetC)g(in)g(your)g(pr)-5
-b(o)g(gr)g(am,)34 b(then)d(you)g(should)h(al)5 b(lo)-5
-b(c)g(ate)0 4025 y(a)28 b(bu\013er)f(and)i(make)f(a)g(c)-5
-b(opy)29 b(of)f(this)g(string,)h(b)-5 b(e)g(c)g(ause)29
-b(the)f(p)-5 b(ointer)29 b(r)-5 b(eturne)g(d)29 b(by)f(astGetC)h(wil)5
-b(l)28 b(only)g(r)-5 b(emain)0 4138 y(valid)32 b(for)g(50)g(invo)-5
-b(c)g(ations)33 b(of)f(the)f(function,)h(and)g(you)g(wil)5
-b(l)31 b(ne)-5 b(e)g(d)33 b(to)e(use)g(the)h(Enc)-5 b(o)g(ding)32
-b(value)g(again)f(later)0 4251 y(on.\))0 4415 y FF(Once)40
-b(y)m(ou)h(ha)m(v)m(e)h(pro)s(duced)d(a)i(mo)s(di\014ed)e(W)m(CS)h
-(calibration)i(for)f(the)f(output)g(dataset)i(\()p Fx(e.g.)e
-Fu(x)p FF(3.14\),)46 b(in)0 4528 y(the)33 b(form)f(of)h(a)g(F)-8
-b(rameSet)34 b(iden)m(ti\014ed)f(b)m(y)f(the)h(p)s(oin)m(ter)g(\\w)m
-(csinfo2",)i(y)m(ou)e(can)g(pro)s(duce)e(a)i(new)g(FitsChan)0
-4641 y(con)m(taining)f(the)e(output)g(FITS)g(header)g(cards)g(as)h
-(follo)m(ws:)227 4896 y Ft(AstFitsChan)39 b(*fitschan2;)227
-4996 y(AstFrameSet)g(*wcsinfo2;)227 5195 y(...)227 5394
-y(/*)k(Make)f(a)h(copy)f(of)h(the)f(input)g(FitsChan,)e(AFTER)h(the)h
-(WCS)h(information)c(has)358 5494 y(been)j(read)g(from)g(it.)g(This)g
-(will)g(propagate)e(all)i(the)h(input)e(FITS)h(header)358
-5593 y(cards,)f(apart)h(from)g(those)f(describing)f(the)i(input)f(WCS)i
-(calibration.)38 b(*/)227 5693 y(fitschan2)i(=)j(astCopy\()e(fitschan1)
-e(\);)p eop end
-%%Page: 26 36
-TeXDict begin 26 35 bop 0 52 a FF(26)3035 b Fy(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)227 451 y Ft(/*)43 b(If)g(necessary,)c(make)j
-(modifications)c(to)43 b(the)f(cards)g(in)h("fitschan2")358
-551 y(\(e.g.)f(you)g(might)f(need)h(to)h(change)e(NAXIS1,)g(NAXIS2,)g
-(etc.,)g(to)i(account)e(for)358 650 y(a)i(change)e(in)i(image)f
-(size\).)f(You)h(probably)e(only)i(need)g(to)h(do)g(this)f(if)g(your)
-358 750 y(data)g(system)f(does)h(not)g(provide)f(these)h(facilities)d
-(itself.)i(*/)227 849 y(<details)g(not)h(shown)f(-)j(see)e(below>)227
-1049 y(/*)h(Alternatively,)38 b(if)43 b(your)f(data)f(system)h(handles)
-e(the)j(propagation)c(of)j(FITS)358 1148 y(header)f(cards)h(to)g(the)h
-(output)e(dataset)g(for)h(you,)g(then)g(simply)f(create)g(an)358
-1248 y(empty)h(FitsChan)e(to)j(contain)d(the)j(output)e(WCS)h
-(information)d(alone.)227 1348 y(fitschan2)h(=)j(astFitsChan\()c(NULL,)
-i(NULL,)h("")h(\);)227 1447 y(*/)227 1646 y(/*)g(Rewind)e(the)h(new)h
-(FitsChan)d(\(if)i(necessary\))e(and)i(attempt)f(to)i(write)e(the)358
-1746 y(output)g(WCS)h(information)e(to)i(it)h(using)f(the)g(same)g
-(encoding)e(method)h(as)i(the)358 1846 y(input)f(dataset.)e(*/)227
-1945 y(astSet\()h(fitschan2,)e("Card=1,)i(Encoding=\045s",)d(encode)j
-(\);)227 2045 y(if)i(\()g(!astWrite\()d(fitschan2,)f(wcsinfo2)h(\))k
-(\))f({)227 2244 y(/*)g(If)g(this)f(didn't)f(work)h(\(the)g(WCS)g
-(FrameSet)e(has)j(become)e(too)h(complex\),)e(then)358
-2344 y(use)i(the)h(native)e(AST)h(encoding)e(instead.)h(*/)358
-2443 y(astSet\()g(fitschan2,)e("Encoding=NATIVE")e(\);)358
-2543 y(\(void\))k(astWrite\()f(fitschan2,)f(wcsinfo2)i(\);)227
-2643 y(})0 2891 y FF(F)-8 b(or)40 b(details)f(of)g(ho)m(w)g(to)g(mo)s
-(dify)f(the)h(con)m(ten)m(ts)i(of)e(the)g(output)f(FitsChan)h(in)f
-(other)h(w)m(a)m(ys,)j(suc)m(h)d(as)g(b)m(y)0 3004 y(adding,)30
-b(o)m(v)m(er-writing)i(or)f(deleting)g(header)f(cards,)h(see)g
-Fu(x)p FF(16.4,)h Fu(x)p FF(16.9,)h Fu(x)p FF(16.8)f(and)e
-Fu(x)p FF(16.13.)0 3164 y(Once)38 b(y)m(ou)h(ha)m(v)m(e)g(assem)m(bled)
-g(the)f(output)g(FITS)g(cards,)i(y)m(ou)f(ma)m(y)f(retriev)m(e)i(them)e
-(from)g(the)h(FitsChan)0 3276 y(that)31 b(con)m(tains)h(them)e(as)g
-(follo)m(ws:)227 3512 y Ft(#include)41 b(<stdio.h>)227
-3611 y(char)h(card[)g(81)g(];)227 3811 y(...)227 4010
-y(astClear\()e(fitschan2,)g("Card")h(\);)227 4110 y(while)h(\()h
-(astFindFits\()c(fitschan2,)g("\045f",)j(card,)f(1)i(\))g(\))h
-(\(void\))d(printf\()f("\045s\\n",)h(card)h(\);)0 4358
-y FF(Here,)28 b(w)m(e)e(ha)m(v)m(e)h(simply)f(written)g(eac)m(h)h(card)
-f(to)g(the)g(standard)g(output)f(stream,)j(but)d(y)m(ou)h(w)m(ould)g
-(ob)m(viously)0 4471 y(replace)31 b(this)g(with)f(a)g(function)g(in)m
-(v)m(o)s(cation)j(to)e(store)g(the)g(cards)f(in)g(y)m(our)g(output)g
-(dataset.)0 4630 y(F)-8 b(or)44 b(data)f(systems)g(that)g(do)g(not)g
-(use)g(FITS)f(header)g(cards,)k(a)e(di\013eren)m(t)f(approac)m(h)g(ma)m
-(y)g(b)s(e)g(needed,)0 4743 y(p)s(ossibly)33 b(in)m(v)m(olving)i(use)f
-(of)f(a)i(Channel)d(or)i(XmlChan)f(\()p Fu(x)p FF(15\))j(rather)d(than)
-h(a)g(FitsChan.)51 b(In)33 b(the)h(case)g(of)0 4856 y(the)h(Starlink)h
-(NDF)g(data)g(format,)h(for)e(example,)i(all)g(of)e(the)h(ab)s(o)m(v)m
-(e)g(ma)m(y)g(b)s(e)f(replaced)g(b)m(y)h(a)f(single)h(call)0
-4969 y(to)e(the)f(function)g(ndfPt)m(w)m(cs|see)g(SUN/33.)50
-b(The)33 b(whole)g(pro)s(cess)g(can)g(probably)f(b)s(e)h(encapsulated)g
-(in)g(a)0 5082 y(similar)e(w)m(a)m(y)g(for)f(most)h(data)g(systems,)g
-(whether)e(they)i(use)f(FITS)g(header)g(cards)g(or)g(not.)0
-5241 y(F)-8 b(or)46 b(an)f(o)m(v)m(erview)i(of)f(ho)m(w)f(to)h
-(propagate)h(W)m(CS)e(information)h(through)e(data)i(pro)s(cessing)g
-(steps,)j(see)0 5354 y Fu(x)p FF(17.6.)42 b(F)-8 b(or)29
-b(more)f(information)g(ab)s(out)g(writing)g(W)m(CS)g(information)g(to)h
-(FitsChans,)f(see)h Fu(x)p FF(16.5)h(and)d Fu(x)p FF(17.7.)0
-5467 y(F)-8 b(or)40 b(information)g(ab)s(out)f(the)h(options)f(for)h
-(enco)s(ding)f(W)m(CS)g(information)h(in)f(FITS)g(header)g(cards,)j
-(see)0 5580 y Fu(x)p FF(16.1,)k Fu(x)p FF(17.1,)f(and)40
-b(the)h(description)g(of)g(the)g(Enco)s(ding)f(attribute)i(in)f(App)s
-(endix)e(C.)71 b(F)-8 b(or)42 b(a)f(complete)0 5693 y(understanding)24
-b(of)i(FitsChans)g(and)f(their)h(use)g(with)g(FITS)f(header)h(cards,)g
-(y)m(ou)h(should)e(read)g Fu(x)p FF(16)j(and)d Fu(x)p
-FF(17.)p eop end
-%%Page: 27 37
-TeXDict begin 27 36 bop 0 52 a Fy(3.16)93 b(.)15 b(.)g(.)h(Displa)m(y)
-31 b(a)g(Graphical)g(Co)s(ordinate)g(Grid)1836 b FF(27)507
-3235 y @beginspecial 15 @llx 138 @lly 489 @urx 648 @ury
-3318 @rwi @setspecial
-%%BeginDocument: sun211_figures/overgrid_bw.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 15 138 489 648
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1998/06/15 11:01:49
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-543.14 1777.49 4343.48 4343.48 re
-Y
-q[10 0 0 10 0 0]concat
-51 51 8[0.117417 0 0 0.117417 -6.377 -20.871]@85 image
-ai*)CcFL:2^:pAF
-UQ^:nNA^b:+92BA!!!!W='%;#B9T+/eC<sPjPU!ZlH]G0s8W,5Z`_$V`5KC(Z`&\DZZfIX-3/'Jz
-!!$8[Je2a7NO-R\n':4eqWe+1g&M*Ps8TEmY+;N*W3`7oZ]gB4>X8>n!(Hqg$3150!,%:8'k4,4R*!Y'
-jQ,CTn))XJs8W-!s+lkeSZ&<SZ\Xg$I:o)N$9Jt&'`\46zB8CaNK!VeYg!n^4cL9iOeDJdUs8W-!NIlA1LnfQR
-ChurK"Y1,a"Vh";!!!0&"TSOYCk<UX^:CtgeF2\`p#"H[eFikAs8W+iI9^5dB1urC7K<TR5l_Grz
-"TSN&$=[h'I8Pg,Y0#SCcL9iZs7Pj<lMpnas8S:!;*d9*4#SSh!#nTi+=dF'&-)\1!'=7)I@,5&Jsb'@
-lH/,Ep#P2plK[['s8W-!s"Qti.iSHg'`\469KPp;4%<:0!!!a'9MA,b&9<3*Y/J'-cHbM9lIkY!hq@;ps8W-!.gc7V
-z!!!!rEbn3B9O`DM&6F:#Eeo-0Ed+jmaj/ehalMOOlJM'Ug#W25s8W*!zz+@^0P2F1f3
-G at tP^Lja)kW/Z4bNL790\^]odhtlWkcLp8OjT#8[s8N'!z!!#;i at U*/(@WII!W+W8hY'lMENH1T#
-ZcTc=n'p%ZlLjH8qVTffs8W-!rr>,i2?3^W=)<(nJmrPEJs3OOS\Cl;\UC#hI<*HOeCip_cLpJ`p%@DBp#"'ps8W-!
-0kY<=4#%(O;+>"lI<UmBUTV>6^:CduB6&uUS^+CPqUt>jhq@;flK['k`7b1js8W+(Jp1[?Eah+NGAMkT
-I>t#4Z`^X0\[-mI>b/%#\]Naos6A\6hs/n`n*fPplMpnas8T$bJpiVk;/CGs>\o4*NMF4j`3-GrW3_kI
-R%q4+g"Gijn+HA2cK+iejR:d?s8W-!s,DGdR$3nsI<UK`7\bQpR)IL\^<+m8W0=0Y`4itNjQc$kjT#8Kn*93'lH0)+
-s8W-!Z]1?IR'V3WJs1"eLjc5?\[/HQ\\u%]Z^mJte at si:n)X0&lK[I1n)*3`g&M*Ps8W+tSUtmAQrfZR
-UPOo.Y+<+uUV=:\e at El-UTVPgcJS<kjQ-16jT#8VlK[j!s8W-!s8T7)JoZ[!@[!aMR&I@%PI%g1ft#DX
-`3Z"jY--('`8pUPn+u>1p$2SMn(He%s8W-!s-SdiEa4EaW3`XoUQ_(4URfNVlIj[^Y+qAOajf"s^=;W:lLjGqqXrqB
-lL4cQs8W-!USsBDSZ],_ZamE0W0=!_\_5liZam$aUSt-0g!o<Jhs]Y+p##62s8UC5s8W-!s8W+o^;Rsm
-PJkDRaksh=W2$o0cIBeXaj/SXUYj#>n*9c7jOrGep$2SBeDK?es8W-!s8UTZUVt*]cICP.eDJcteDJBi
-hp1]9adp_`hr!MfjR;C,p%n.Gs8)TgalNL%s8W-!s2<F/alLS$cIp^sai)l^eC<!tlK$IEcIC@^lMB31jR;1&qWdAB
-jQ-?ohuE`Vs8W-!^<+[RjQ,CTfu2RsalM@)cK*L#jQ,"Tajf5*lLjW7qX<_GlL3fpg&L-9s8W-!s8W,@
-eEZ>VlJK/0hs]X`e?7KSjM]a/n(HUpg$e"jqWdq<n*frLlK%X7lK&!Fs8W-!s8VBAeFhn`am.R?hpg05
-ZfLT.akuRPhpg`JlJLmllK\'=s8)ERn+tr1g&M*Ps8W-!s4P-3n':de`6RZ:jQb$sn+Gu,g!mb9hrNk`lK&!As7P(<
-n)*U,qVUtks8W-!s8W-!p%@5'htl6`g$dhZs6nIjp!3$`jQ,dun)Wd1ak>tEp#"j'qYK+,n'qC;s8W-!
-s8W,PlK%F,p!hman(I0_lH\;*g%sdjn+GSqhs/_alK[j2p%A"Hs7Q6Rp&G'ls8W-!s8UC5cK`^#hp1-P
-n*f_jhs//5hrOIkp$1i2lMC2HqX=:\p$1i2n,M\&s8W-!s8W-!s52_keDJsEcJRp[eF1]$jNd&OlMC2MjQc4,s8)cq
-p#PT1qX<nAp&G'ls8W-!s8W-!g%FX[hr":[n'ph+ft#5in)Wd&lK\67n(I"+lK[["n*9!&lMp/!n,NFf
-s8W-!s8W,[lI>+Khph>aqZ#jGai*YteC<sPht>mqp##'"jRrB<n+Gu!g&L?es8W-!s8W-!s8V05hs0[`
-n+H/Bn)WBJjOr5OlK\6=p$25Hn*f`+qWdAGs6oXRjOsS5s8W-!s8W-!s6B(+jQc4&s8)Ebn*eBDht?(,qX<,+jPTh!
-lLjH-eFi+qlL3F+p&G'ls8W-!s8W-!n(I0plK[I,qX=+McK+'Tg#))kp%mt=jSJQGlK[HqlK%X<hrNk`
-s8W-!s8W-!s8W,an*g,+qYKLBlMBt`cMHVup$_SHlK[[2lL4E!lLk#Rs6A\AjOsS5s8W-!s8W-!s8Vcl
-jRrQLs8W,qg!nO/p$^T!p%n at Ss5`8;lL4T7hp1-ZlMo/pjT#8[s8W-!s8W-!s6oFAqWdb7n*f`1eC<d*htl71jR;R6
-qWdqMs7Q'Mp&FL\ouZ:ps8W-!s8W-!s8W-!lMpPWs8(FKs6ALklL4E=jRq4+lL4$,qXs^Mp&F=Rp%A1]
-jR<-Ks8W-!s8W-!s8W,qn,N(Wp$_ALs4$N+n)X0<s53\GqYL6gs8)3Fp&F=Gn+HABs8W-!s8W-!s8W-!
-s8VBFs8VQ\s7Q'GlJM(!jPTh!s6An,lL4cLp%n.<n*9rLn)Ws;s8W-!s8W-!s8W-!s4Q]+qYK[RlK%$`p%@D=qXsmL
-aoCYks6B:RqXsm]lK\'BlI>k6s8W-!s8W-!s8W-!lL4TLg%G47lLji8p#PE!n*f06lMp>Gp&FmWp&F^R
-lL3fUs8W-!s8W-!s8W-!s8W,fn+HPMp%n at SjNd5oeGoC<p%@5"n*g;Vp$25HlMp>Ahs17As8W-!s8W-!
-s8W-!s8VQQqVV/1g!9'Tn*g;Vn+u>Ghs0LflK\'Bp&G'glK\'=lMpnas8W-!s8W-!s8W-!s5_l%g$edpqYKm]hr"Ip
-s6p!Kp%mA<p#PT<s6p!fqXs=Ws8W-!s8W-!s8W-!s8W-!g#))fp$2DRp"B3&n+H/Lg&LO0s6oXGs6oXR
-n*g,1p!3U;s8W-!s8W-!s8W-!s8W,qn+Gc7jT"N<n,Mk6jR<-Khs0n7qYKmXp#PfBcMICus8W-!s8W-!
-s8W-!s8W-!s8Vcbht?[Bs6AnGp&F+Ln*fr!qX<M6hs^7,p%@eHhs\M`s8W-!s8W-!s8W-!s8W-!rr~>
-Q
-5.04 w
-1 J
-1 j
-0 g
-2283 1777 m
-2286 1812 l
-2290 1870 l
-2293 1927 l
-2296 1985 l
-2299 2042 l
-2301 2100 l
-2302 2158 l
-2303 2216 l
-2303 2274 l
-2302 2332 l
-2301 2390 l
-2299 2448 l
-2297 2506 l
-2294 2564 l
-2291 2622 l
-2287 2680 l
-2282 2738 l
-2277 2796 l
-2271 2854 l
-2265 2913 l
-2258 2971 l
-2250 3029 l
-2242 3087 l
-2233 3145 l
-2223 3202 l
-2213 3260 l
-2203 3318 l
-2192 3376 l
-2180 3433 l
-2167 3491 l
-2154 3548 l
-2141 3606 l
-2126 3663 l
-2112 3720 l
-2096 3777 l
-2080 3834 l
-2063 3891 l
-2046 3948 l
-2028 4004 l
-2010 4061 l
-1991 4117 l
-1971 4173 l
-1951 4229 l
-1930 4284 l
-1909 4340 l
-1887 4395 l
-1865 4451 l
-1841 4505 l
-1818 4560 l
-1816 4564 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1813 4570 l
-1813 4570 l
-S
-1911 1777 m
-1913 1784 l
-1924 1834 l
-1935 1885 l
-1945 1936 l
-1955 1987 l
-1964 2038 l
-1973 2089 l
-1981 2141 l
-1989 2193 l
-1997 2244 l
-2004 2296 l
-2010 2349 l
-2016 2401 l
-2021 2453 l
-2026 2506 l
-2031 2559 l
-2035 2611 l
-2038 2664 l
-2041 2717 l
-2044 2770 l
-2045 2824 l
-2047 2877 l
-2048 2931 l
-2048 2984 l
-2048 3038 l
-2047 3092 l
-2046 3145 l
-2044 3199 l
-2042 3253 l
-2039 3307 l
-2035 3362 l
-2031 3416 l
-2027 3470 l
-2022 3524 l
-2016 3579 l
-2010 3633 l
-2003 3688 l
-1996 3742 l
-1988 3797 l
-1979 3851 l
-1970 3906 l
-1961 3960 l
-1950 4015 l
-1940 4070 l
-1928 4124 l
-1916 4179 l
-1904 4233 l
-1891 4288 l
-1877 4342 l
-1863 4397 l
-1848 4451 l
-1832 4506 l
-1816 4560 l
-1815 4564 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1813 4570 l
-1813 4570 l
-S
-1433 1777 m
-1446 1809 l
-1464 1851 l
-1482 1893 l
-1499 1935 l
-1516 1978 l
-1532 2020 l
-1549 2063 l
-1564 2106 l
-1580 2149 l
-1595 2193 l
-1610 2236 l
-1624 2280 l
-1638 2324 l
-1651 2368 l
-1665 2413 l
-1677 2457 l
-1690 2502 l
-1702 2547 l
-1714 2592 l
-1725 2637 l
-1736 2682 l
-1746 2728 l
-1756 2773 l
-1766 2819 l
-1775 2865 l
-1784 2911 l
-1793 2958 l
-1801 3004 l
-1808 3051 l
-1816 3097 l
-1822 3144 l
-1829 3191 l
-1835 3239 l
-1840 3286 l
-1845 3333 l
-1850 3381 l
-1854 3429 l
-1857 3477 l
-1861 3525 l
-1863 3573 l
-1866 3621 l
-1867 3670 l
-1869 3718 l
-1870 3767 l
-1870 3816 l
-1870 3865 l
-1869 3914 l
-1868 3963 l
-1866 4012 l
-1864 4062 l
-1862 4111 l
-1859 4161 l
-1855 4210 l
-1851 4260 l
-1846 4310 l
-1841 4360 l
-1835 4410 l
-1829 4460 l
-1822 4511 l
-1815 4561 l
-1814 4565 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-732 1777 m
-733 1778 l
-758 1811 l
-782 1843 l
-807 1876 l
-831 1908 l
-855 1941 l
-878 1974 l
-902 2007 l
-925 2041 l
-948 2074 l
-971 2108 l
-993 2141 l
-1015 2175 l
-1037 2209 l
-1059 2243 l
-1081 2278 l
-1102 2312 l
-1123 2347 l
-1143 2382 l
-1164 2417 l
-1184 2452 l
-1204 2487 l
-1224 2522 l
-1243 2558 l
-1262 2593 l
-1281 2629 l
-1300 2665 l
-1318 2701 l
-1336 2738 l
-1354 2774 l
-1371 2811 l
-1388 2847 l
-1405 2884 l
-1422 2921 l
-1438 2958 l
-1454 2995 l
-1470 3033 l
-1485 3070 l
-1500 3108 l
-1515 3146 l
-1530 3184 l
-1544 3222 l
-1558 3260 l
-1571 3299 l
-1584 3338 l
-1597 3376 l
-1610 3415 l
-1622 3454 l
-1634 3493 l
-1645 3533 l
-1657 3572 l
-1667 3612 l
-1678 3651 l
-1688 3691 l
-1698 3731 l
-1707 3772 l
-1716 3812 l
-1725 3852 l
-1733 3893 l
-1741 3934 l
-1749 3975 l
-1756 4016 l
-1763 4057 l
-1769 4098 l
-1775 4140 l
-1781 4181 l
-1786 4223 l
-1791 4265 l
-1795 4307 l
-1799 4349 l
-1803 4392 l
-1806 4434 l
-1809 4477 l
-1811 4519 l
-1813 4562 l
-1813 4565 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 2622 m
-551 2630 l
-577 2656 l
-602 2682 l
-628 2709 l
-653 2736 l
-678 2762 l
-703 2789 l
-728 2816 l
-753 2843 l
-777 2870 l
-801 2897 l
-825 2925 l
-849 2952 l
-873 2979 l
-896 3007 l
-920 3034 l
-943 3062 l
-966 3090 l
-988 3118 l
-1011 3146 l
-1033 3174 l
-1055 3202 l
-1077 3230 l
-1099 3258 l
-1120 3287 l
-1142 3315 l
-1163 3344 l
-1184 3372 l
-1204 3401 l
-1225 3430 l
-1245 3459 l
-1265 3488 l
-1285 3517 l
-1304 3546 l
-1324 3575 l
-1343 3605 l
-1362 3634 l
-1381 3664 l
-1399 3693 l
-1417 3723 l
-1435 3753 l
-1453 3783 l
-1470 3813 l
-1488 3843 l
-1505 3873 l
-1521 3903 l
-1538 3934 l
-1554 3964 l
-1570 3995 l
-1586 4026 l
-1601 4056 l
-1616 4087 l
-1631 4118 l
-1646 4150 l
-1661 4181 l
-1675 4212 l
-1689 4244 l
-1702 4275 l
-1715 4307 l
-1728 4339 l
-1741 4370 l
-1754 4402 l
-1766 4435 l
-1778 4467 l
-1789 4499 l
-1800 4532 l
-1811 4564 l
-1812 4567 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 3506 m
-561 3518 l
-588 3538 l
-615 3558 l
-642 3577 l
-669 3597 l
-696 3616 l
-723 3636 l
-749 3656 l
-776 3675 l
-802 3695 l
-828 3714 l
-854 3734 l
-880 3754 l
-906 3773 l
-932 3793 l
-957 3813 l
-982 3832 l
-1008 3852 l
-1033 3872 l
-1057 3891 l
-1082 3911 l
-1107 3931 l
-1131 3950 l
-1156 3970 l
-1180 3990 l
-1204 4010 l
-1228 4029 l
-1251 4049 l
-1275 4069 l
-1298 4089 l
-1321 4108 l
-1344 4128 l
-1367 4148 l
-1390 4168 l
-1413 4188 l
-1435 4207 l
-1457 4227 l
-1480 4247 l
-1501 4267 l
-1523 4287 l
-1545 4307 l
-1566 4327 l
-1588 4346 l
-1609 4366 l
-1630 4386 l
-1650 4406 l
-1671 4426 l
-1691 4446 l
-1711 4466 l
-1731 4486 l
-1751 4506 l
-1771 4526 l
-1791 4546 l
-1810 4567 l
-1811 4568 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 4183 m
-554 4186 l
-584 4197 l
-615 4208 l
-645 4219 l
-675 4229 l
-705 4240 l
-735 4250 l
-765 4260 l
-795 4271 l
-825 4281 l
-855 4291 l
-884 4301 l
-914 4311 l
-943 4320 l
-973 4330 l
-1002 4340 l
-1031 4349 l
-1060 4358 l
-1089 4368 l
-1118 4377 l
-1147 4386 l
-1176 4395 l
-1204 4403 l
-1233 4412 l
-1261 4421 l
-1290 4429 l
-1318 4438 l
-1346 4446 l
-1374 4454 l
-1402 4462 l
-1430 4470 l
-1457 4478 l
-1485 4486 l
-1513 4493 l
-1540 4501 l
-1567 4508 l
-1595 4515 l
-1622 4523 l
-1649 4530 l
-1676 4536 l
-1702 4543 l
-1729 4550 l
-1756 4556 l
-1782 4563 l
-1809 4569 l
-1810 4570 l
-1812 4570 l
-1812 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 4696 m
-548 4696 l
-582 4697 l
-617 4698 l
-651 4698 l
-685 4699 l
-719 4699 l
-753 4699 l
-788 4698 l
-822 4698 l
-855 4697 l
-889 4696 l
-923 4695 l
-957 4693 l
-990 4692 l
-1024 4690 l
-1058 4688 l
-1091 4685 l
-1124 4683 l
-1158 4680 l
-1191 4677 l
-1224 4674 l
-1257 4670 l
-1290 4666 l
-1323 4663 l
-1356 4658 l
-1389 4654 l
-1421 4649 l
-1454 4644 l
-1487 4639 l
-1519 4633 l
-1551 4628 l
-1584 4622 l
-1616 4615 l
-1648 4609 l
-1680 4602 l
-1712 4595 l
-1744 4587 l
-1776 4580 l
-1808 4572 l
-1810 4571 l
-1812 4571 l
-1812 4570 l
-1812 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 5102 m
-557 5098 l
-596 5089 l
-634 5079 l
-672 5068 l
-710 5058 l
-748 5047 l
-786 5035 l
-823 5024 l
-861 5012 l
-899 4999 l
-936 4987 l
-974 4974 l
-1011 4960 l
-1048 4947 l
-1085 4933 l
-1122 4918 l
-1159 4904 l
-1196 4889 l
-1233 4873 l
-1270 4857 l
-1306 4841 l
-1343 4825 l
-1379 4808 l
-1416 4790 l
-1452 4773 l
-1488 4755 l
-1524 4736 l
-1560 4717 l
-1595 4698 l
-1631 4678 l
-1666 4658 l
-1702 4638 l
-1737 4617 l
-1772 4596 l
-1807 4574 l
-1809 4573 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 5444 m
-564 5435 l
-605 5414 l
-646 5394 l
-687 5373 l
-728 5352 l
-769 5330 l
-810 5308 l
-850 5285 l
-890 5262 l
-931 5239 l
-971 5215 l
-1011 5191 l
-1050 5166 l
-1090 5141 l
-1129 5115 l
-1169 5089 l
-1208 5063 l
-1247 5036 l
-1285 5008 l
-1324 4981 l
-1362 4952 l
-1400 4923 l
-1438 4894 l
-1476 4865 l
-1514 4834 l
-1551 4804 l
-1588 4773 l
-1625 4741 l
-1662 4709 l
-1699 4677 l
-1735 4644 l
-1771 4610 l
-1807 4576 l
-1809 4574 l
-1812 4572 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-S
-543 5757 m
-554 5749 l
-597 5720 l
-640 5690 l
-683 5660 l
-726 5629 l
-768 5598 l
-810 5567 l
-852 5535 l
-893 5502 l
-935 5469 l
-976 5435 l
-1017 5401 l
-1057 5367 l
-1098 5332 l
-1138 5297 l
-1178 5261 l
-1217 5224 l
-1256 5187 l
-1295 5150 l
-1334 5112 l
-1372 5074 l
-1410 5035 l
-1448 4996 l
-1486 4956 l
-1523 4916 l
-1559 4876 l
-1596 4835 l
-1632 4793 l
-1668 4751 l
-1703 4709 l
-1738 4666 l
-1773 4622 l
-1807 4578 l
-1810 4575 l
-1812 4572 l
-1812 4572 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-543 6064 m
-569 6042 l
-613 6005 l
-656 5967 l
-700 5929 l
-742 5890 l
-785 5851 l
-827 5812 l
-868 5772 l
-910 5731 l
-951 5691 l
-991 5649 l
-1031 5607 l
-1071 5565 l
-1110 5522 l
-1149 5479 l
-1188 5436 l
-1226 5392 l
-1264 5347 l
-1301 5302 l
-1338 5257 l
-1375 5211 l
-1411 5165 l
-1446 5118 l
-1482 5071 l
-1516 5024 l
-1551 4976 l
-1584 4928 l
-1618 4879 l
-1651 4830 l
-1683 4781 l
-1715 4731 l
-1746 4681 l
-1777 4630 l
-1808 4579 l
-1810 4576 l
-1812 4572 l
-1812 4572 l
-1812 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-804 6121 m
-831 6091 l
-871 6046 l
-911 6000 l
-950 5954 l
-989 5907 l
-1027 5860 l
-1065 5813 l
-1102 5765 l
-1139 5717 l
-1175 5669 l
-1211 5620 l
-1246 5571 l
-1280 5521 l
-1315 5471 l
-1348 5421 l
-1381 5371 l
-1414 5320 l
-1445 5269 l
-1477 5218 l
-1508 5166 l
-1538 5114 l
-1567 5062 l
-1597 5009 l
-1625 4957 l
-1653 4903 l
-1681 4850 l
-1707 4797 l
-1734 4743 l
-1759 4689 l
-1784 4635 l
-1809 4580 l
-1811 4576 l
-1812 4572 l
-1812 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1061 6121 m
-1070 6107 l
-1104 6057 l
-1138 6007 l
-1171 5956 l
-1203 5905 l
-1235 5854 l
-1266 5803 l
-1297 5751 l
-1327 5700 l
-1356 5648 l
-1384 5596 l
-1412 5544 l
-1440 5491 l
-1467 5439 l
-1493 5386 l
-1518 5333 l
-1543 5280 l
-1567 5227 l
-1591 5173 l
-1614 5120 l
-1636 5066 l
-1658 5013 l
-1679 4959 l
-1700 4905 l
-1720 4851 l
-1739 4797 l
-1758 4743 l
-1776 4689 l
-1793 4634 l
-1810 4580 l
-1811 4576 l
-1813 4572 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1301 6121 m
-1308 6108 l
-1334 6057 l
-1360 6006 l
-1384 5955 l
-1408 5904 l
-1432 5853 l
-1455 5802 l
-1477 5751 l
-1498 5700 l
-1519 5649 l
-1539 5598 l
-1558 5547 l
-1577 5495 l
-1595 5444 l
-1613 5393 l
-1630 5342 l
-1646 5291 l
-1662 5240 l
-1677 5189 l
-1691 5138 l
-1705 5087 l
-1718 5036 l
-1731 4985 l
-1743 4934 l
-1755 4883 l
-1766 4832 l
-1776 4782 l
-1786 4731 l
-1795 4680 l
-1804 4630 l
-1812 4579 l
-1812 4576 l
-1813 4572 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1567 6121 m
-1568 6117 l
-1585 6070 l
-1601 6023 l
-1617 5976 l
-1632 5929 l
-1646 5882 l
-1659 5835 l
-1672 5789 l
-1685 5742 l
-1697 5696 l
-1708 5650 l
-1718 5603 l
-1728 5557 l
-1738 5512 l
-1747 5466 l
-1755 5420 l
-1763 5375 l
-1770 5329 l
-1776 5284 l
-1783 5239 l
-1788 5194 l
-1793 5149 l
-1798 5104 l
-1802 5060 l
-1805 5015 l
-1808 4971 l
-1811 4927 l
-1813 4883 l
-1814 4839 l
-1815 4795 l
-1816 4751 l
-1816 4708 l
-1816 4664 l
-1815 4621 l
-1814 4578 l
-1813 4575 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1922 6121 m
-1923 6116 l
-1930 6076 l
-1937 6037 l
-1943 5998 l
-1949 5959 l
-1954 5921 l
-1958 5882 l
-1962 5844 l
-1966 5806 l
-1969 5768 l
-1971 5730 l
-1973 5693 l
-1975 5655 l
-1976 5618 l
-1976 5581 l
-1976 5544 l
-1976 5508 l
-1975 5471 l
-1974 5435 l
-1972 5399 l
-1970 5363 l
-1967 5327 l
-1964 5292 l
-1961 5256 l
-1957 5221 l
-1953 5186 l
-1948 5150 l
-1943 5116 l
-1938 5081 l
-1932 5046 l
-1926 5012 l
-1920 4978 l
-1913 4943 l
-1906 4909 l
-1898 4875 l
-1890 4842 l
-1882 4808 l
-1874 4774 l
-1865 4741 l
-1855 4708 l
-1846 4675 l
-1836 4642 l
-1826 4609 l
-1815 4576 l
-1814 4574 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-S
-2562 6121 m
-2562 6116 l
-2562 6089 l
-2562 6062 l
-2562 6035 l
-2561 6009 l
-2560 5983 l
-2558 5957 l
-2556 5931 l
-2553 5906 l
-2550 5880 l
-2546 5855 l
-2543 5830 l
-2538 5806 l
-2534 5781 l
-2529 5757 l
-2523 5733 l
-2517 5709 l
-2511 5685 l
-2505 5661 l
-2498 5638 l
-2491 5615 l
-2483 5591 l
-2476 5568 l
-2468 5545 l
-2459 5523 l
-2451 5500 l
-2442 5477 l
-2432 5455 l
-2423 5432 l
-2413 5410 l
-2403 5388 l
-2392 5366 l
-2381 5344 l
-2370 5322 l
-2359 5300 l
-2348 5279 l
-2336 5257 l
-2324 5236 l
-2311 5214 l
-2299 5193 l
-2286 5171 l
-2273 5150 l
-2260 5129 l
-2246 5108 l
-2232 5087 l
-2218 5066 l
-2204 5045 l
-2190 5024 l
-2175 5003 l
-2160 4982 l
-2145 4961 l
-2129 4941 l
-2114 4920 l
-2098 4899 l
-2082 4879 l
-2066 4858 l
-2049 4838 l
-2033 4817 l
-2016 4797 l
-1999 4776 l
-1981 4756 l
-1964 4736 l
-1946 4715 l
-1928 4695 l
-1910 4675 l
-1892 4655 l
-1873 4634 l
-1855 4614 l
-1836 4594 l
-1817 4574 l
-1815 4572 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4570 l
-1813 4570 l
-1813 4570 l
-S
-4454 1777 m
-4454 1785 l
-4454 1798 l
-4454 1810 l
-4454 1822 l
-4453 1834 l
-4453 1847 l
-4453 1859 l
-4453 1871 l
-4452 1882 l
-4452 1894 l
-4452 1906 l
-4451 1918 l
-4451 1929 l
-4451 1941 l
-4450 1952 l
-4450 1964 l
-4449 1975 l
-4449 1986 l
-4448 1998 l
-4448 2009 l
-4447 2020 l
-4447 2031 l
-4446 2042 l
-4446 2053 l
-4445 2064 l
-4445 2075 l
-4444 2086 l
-4443 2096 l
-4443 2107 l
-4442 2118 l
-4442 2128 l
-4441 2139 l
-4440 2149 l
-4440 2159 l
-4439 2170 l
-4428 2309 l
-4415 2438 l
-4401 2558 l
-4385 2670 l
-4369 2775 l
-4352 2874 l
-4334 2966 l
-4316 3052 l
-4297 3134 l
-4278 3210 l
-4259 3283 l
-4240 3351 l
-4221 3416 l
-4201 3477 l
-4182 3534 l
-4163 3589 l
-4143 3641 l
-4124 3691 l
-4105 3738 l
-4085 3783 l
-4066 3825 l
-4047 3866 l
-4028 3905 l
-4009 3942 l
-3990 3977 l
-3971 4011 l
-3952 4043 l
-3933 4074 l
-3914 4104 l
-3895 4132 l
-3876 4159 l
-3858 4185 l
-3839 4210 l
-3820 4234 l
-3801 4257 l
-3783 4279 l
-3764 4300 l
-3745 4320 l
-3726 4340 l
-3708 4358 l
-3689 4376 l
-3670 4393 l
-3651 4410 l
-3633 4425 l
-3614 4441 l
-3595 4455 l
-3576 4469 l
-3557 4482 l
-3538 4495 l
-3519 4507 l
-3500 4519 l
-3481 4531 l
-3462 4541 l
-3442 4552 l
-3423 4561 l
-3404 4571 l
-3384 4580 l
-3365 4589 l
-3345 4597 l
-3325 4605 l
-3306 4612 l
-3286 4619 l
-3266 4626 l
-3246 4632 l
-3226 4638 l
-3206 4644 l
-3186 4649 l
-3165 4654 l
-3145 4659 l
-3125 4663 l
-3104 4668 l
-3083 4671 l
-3063 4675 l
-3042 4678 l
-3021 4681 l
-3000 4684 l
-2979 4687 l
-2958 4689 l
-2936 4691 l
-2915 4693 l
-2894 4694 l
-2872 4696 l
-2850 4697 l
-2828 4698 l
-2807 4698 l
-2785 4699 l
-2762 4699 l
-2740 4699 l
-2718 4699 l
-2696 4699 l
-2673 4698 l
-2650 4697 l
-2628 4696 l
-2605 4695 l
-2582 4694 l
-2559 4692 l
-2536 4690 l
-2513 4689 l
-2489 4686 l
-2466 4684 l
-2442 4682 l
-2418 4679 l
-2395 4676 l
-2371 4674 l
-2347 4670 l
-2323 4667 l
-2298 4664 l
-2274 4660 l
-2250 4657 l
-2225 4653 l
-2201 4649 l
-2176 4644 l
-2151 4640 l
-2126 4636 l
-2101 4631 l
-2076 4626 l
-2050 4621 l
-2025 4616 l
-2000 4611 l
-1974 4606 l
-1948 4601 l
-1922 4595 l
-1896 4589 l
-1870 4583 l
-1844 4577 l
-1818 4571 l
-1816 4571 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-4071 1777 m
-4067 1810 l
-4057 1881 l
-4046 1950 l
-4034 2018 l
-4021 2084 l
-4007 2148 l
-3993 2211 l
-3979 2273 l
-3963 2333 l
-3947 2392 l
-3931 2450 l
-3914 2506 l
-3897 2561 l
-3879 2615 l
-3860 2667 l
-3842 2719 l
-3822 2769 l
-3803 2818 l
-3783 2866 l
-3762 2913 l
-3742 2959 l
-3721 3004 l
-3699 3048 l
-3678 3091 l
-3656 3134 l
-3633 3175 l
-3611 3215 l
-3588 3255 l
-3565 3293 l
-3542 3331 l
-3518 3368 l
-3494 3404 l
-3470 3440 l
-3446 3474 l
-3421 3508 l
-3397 3541 l
-3372 3574 l
-3347 3606 l
-3321 3637 l
-3296 3667 l
-3270 3697 l
-3245 3726 l
-3219 3754 l
-3192 3782 l
-3166 3810 l
-3140 3836 l
-3113 3863 l
-3086 3888 l
-3059 3913 l
-3032 3938 l
-3005 3962 l
-2978 3985 l
-2950 4008 l
-2922 4030 l
-2895 4052 l
-2867 4074 l
-2839 4094 l
-2811 4115 l
-2782 4135 l
-2754 4154 l
-2725 4174 l
-2697 4192 l
-2668 4210 l
-2639 4228 l
-2610 4246 l
-2581 4263 l
-2552 4279 l
-2522 4295 l
-2493 4311 l
-2463 4326 l
-2433 4341 l
-2404 4356 l
-2374 4370 l
-2344 4384 l
-2314 4398 l
-2283 4411 l
-2253 4424 l
-2223 4436 l
-2192 4448 l
-2162 4460 l
-2131 4472 l
-2100 4483 l
-2069 4493 l
-2038 4504 l
-2007 4514 l
-1976 4524 l
-1945 4534 l
-1914 4543 l
-1882 4552 l
-1851 4560 l
-1819 4569 l
-1817 4569 l
-1815 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-3631 1777 m
-3622 1824 l
-3610 1887 l
-3597 1950 l
-3583 2011 l
-3568 2072 l
-3553 2132 l
-3537 2191 l
-3521 2249 l
-3504 2307 l
-3486 2363 l
-3468 2419 l
-3450 2474 l
-3431 2528 l
-3411 2582 l
-3391 2635 l
-3370 2687 l
-3349 2738 l
-3328 2789 l
-3306 2839 l
-3283 2888 l
-3260 2936 l
-3237 2984 l
-3213 3031 l
-3189 3078 l
-3165 3123 l
-3140 3168 l
-3115 3213 l
-3089 3256 l
-3063 3300 l
-3037 3342 l
-3010 3384 l
-2984 3425 l
-2956 3466 l
-2929 3506 l
-2901 3545 l
-2873 3584 l
-2845 3622 l
-2816 3659 l
-2787 3696 l
-2758 3733 l
-2728 3769 l
-2699 3804 l
-2669 3839 l
-2639 3873 l
-2608 3907 l
-2578 3940 l
-2547 3972 l
-2516 4004 l
-2484 4036 l
-2453 4067 l
-2421 4098 l
-2389 4128 l
-2357 4157 l
-2325 4186 l
-2292 4215 l
-2260 4243 l
-2227 4270 l
-2194 4298 l
-2160 4324 l
-2127 4350 l
-2094 4376 l
-2060 4401 l
-2026 4426 l
-1992 4451 l
-1958 4475 l
-1923 4498 l
-1889 4521 l
-1854 4544 l
-1820 4566 l
-1817 4568 l
-1815 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-3251 1777 m
-3241 1834 l
-3230 1898 l
-3218 1960 l
-3205 2023 l
-3192 2084 l
-3178 2146 l
-3164 2206 l
-3149 2266 l
-3133 2326 l
-3116 2385 l
-3099 2444 l
-3082 2502 l
-3063 2559 l
-3045 2616 l
-3025 2673 l
-3005 2728 l
-2985 2784 l
-2964 2839 l
-2942 2893 l
-2920 2947 l
-2898 3000 l
-2875 3052 l
-2851 3105 l
-2827 3156 l
-2803 3207 l
-2778 3258 l
-2753 3308 l
-2727 3357 l
-2700 3406 l
-2674 3454 l
-2647 3502 l
-2619 3549 l
-2591 3596 l
-2563 3642 l
-2534 3688 l
-2505 3733 l
-2476 3778 l
-2446 3822 l
-2416 3866 l
-2386 3909 l
-2355 3951 l
-2324 3993 l
-2292 4035 l
-2260 4076 l
-2228 4117 l
-2196 4157 l
-2163 4196 l
-2130 4235 l
-2096 4274 l
-2063 4312 l
-2029 4349 l
-1995 4386 l
-1960 4423 l
-1926 4459 l
-1891 4494 l
-1855 4529 l
-1820 4564 l
-1817 4566 l
-1815 4569 l
-1815 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2919 1777 m
-2914 1822 l
-2907 1885 l
-2898 1949 l
-2890 2012 l
-2880 2074 l
-2870 2137 l
-2859 2199 l
-2848 2261 l
-2836 2322 l
-2823 2383 l
-2809 2444 l
-2795 2505 l
-2781 2565 l
-2765 2625 l
-2749 2685 l
-2733 2744 l
-2715 2803 l
-2698 2861 l
-2679 2919 l
-2660 2977 l
-2641 3034 l
-2621 3091 l
-2600 3148 l
-2579 3204 l
-2557 3260 l
-2535 3315 l
-2512 3370 l
-2489 3425 l
-2465 3479 l
-2440 3533 l
-2415 3586 l
-2390 3639 l
-2364 3692 l
-2338 3744 l
-2311 3795 l
-2283 3847 l
-2255 3898 l
-2227 3948 l
-2198 3998 l
-2169 4047 l
-2139 4096 l
-2109 4145 l
-2079 4193 l
-2048 4241 l
-2016 4288 l
-1985 4335 l
-1952 4381 l
-1920 4427 l
-1887 4473 l
-1853 4518 l
-1819 4562 l
-1817 4565 l
-1815 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2606 1777 m
-2606 1788 l
-2604 1850 l
-2602 1912 l
-2599 1973 l
-2595 2035 l
-2590 2096 l
-2585 2158 l
-2579 2219 l
-2573 2280 l
-2566 2341 l
-2558 2402 l
-2550 2463 l
-2541 2524 l
-2531 2584 l
-2521 2645 l
-2510 2705 l
-2499 2765 l
-2487 2825 l
-2474 2885 l
-2461 2944 l
-2447 3004 l
-2432 3063 l
-2417 3122 l
-2401 3181 l
-2385 3239 l
-2367 3297 l
-2350 3355 l
-2332 3413 l
-2313 3471 l
-2293 3528 l
-2273 3585 l
-2253 3642 l
-2232 3698 l
-2210 3755 l
-2188 3810 l
-2165 3866 l
-2142 3922 l
-2118 3977 l
-2093 4031 l
-2068 4086 l
-2042 4140 l
-2016 4194 l
-1990 4247 l
-1963 4300 l
-1935 4353 l
-1907 4406 l
-1878 4458 l
-1849 4509 l
-1819 4561 l
-1817 4565 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2890 6121 m
-2892 6118 l
-2906 6096 l
-2920 6075 l
-2934 6054 l
-2948 6032 l
-2962 6011 l
-2976 5989 l
-2990 5968 l
-3003 5946 l
-3017 5924 l
-3031 5902 l
-3044 5880 l
-3058 5858 l
-3071 5836 l
-3084 5814 l
-3097 5792 l
-3111 5770 l
-3124 5748 l
-3137 5725 l
-3150 5703 l
-3162 5681 l
-3175 5658 l
-3188 5635 l
-3200 5613 l
-3213 5590 l
-3225 5567 l
-3238 5545 l
-3250 5522 l
-3262 5499 l
-3274 5476 l
-3286 5453 l
-3298 5430 l
-3310 5407 l
-3322 5384 l
-3334 5360 l
-3345 5337 l
-3357 5314 l
-3368 5291 l
-3380 5267 l
-3391 5244 l
-3402 5220 l
-3413 5197 l
-3424 5173 l
-3435 5150 l
-3446 5126 l
-3457 5103 l
-3468 5079 l
-3478 5055 l
-3489 5032 l
-3499 5008 l
-3509 4984 l
-3519 4961 l
-3530 4937 l
-3540 4913 l
-3549 4889 l
-3559 4865 l
-3569 4841 l
-3579 4817 l
-3588 4793 l
-3598 4769 l
-3607 4745 l
-3616 4721 l
-3625 4697 l
-3634 4673 l
-3643 4649 l
-3652 4625 l
-3661 4601 l
-3670 4577 l
-3678 4553 l
-3687 4529 l
-3695 4505 l
-3704 4481 l
-3712 4457 l
-3720 4433 l
-3728 4409 l
-3736 4385 l
-3744 4361 l
-3751 4337 l
-3759 4312 l
-3766 4288 l
-3774 4264 l
-3781 4240 l
-3788 4216 l
-3796 4192 l
-3803 4168 l
-3810 4144 l
-3816 4120 l
-3823 4096 l
-3830 4072 l
-3836 4048 l
-3843 4024 l
-3849 4000 l
-3855 3976 l
-3861 3953 l
-3868 3929 l
-3874 3905 l
-3879 3881 l
-3885 3857 l
-3891 3833 l
-3896 3810 l
-3902 3786 l
-3907 3762 l
-3913 3738 l
-3918 3715 l
-3923 3691 l
-3928 3668 l
-3933 3644 l
-3938 3621 l
-3942 3597 l
-3947 3574 l
-3952 3550 l
-3956 3527 l
-3960 3504 l
-3965 3480 l
-3969 3457 l
-3973 3434 l
-3977 3411 l
-3981 3387 l
-3985 3364 l
-3989 3341 l
-3992 3318 l
-3996 3295 l
-3999 3272 l
-4003 3249 l
-4006 3227 l
-4009 3204 l
-4012 3181 l
-4015 3158 l
-4018 3136 l
-4021 3113 l
-4024 3091 l
-4026 3068 l
-4029 3046 l
-4032 3023 l
-4034 3001 l
-4036 2979 l
-4039 2957 l
-4041 2934 l
-4043 2912 l
-4045 2890 l
-4047 2868 l
-4049 2846 l
-4051 2825 l
-4052 2803 l
-4054 2781 l
-4055 2759 l
-4057 2738 l
-4058 2716 l
-4060 2695 l
-4061 2673 l
-4062 2652 l
-4063 2631 l
-4064 2609 l
-4065 2588 l
-4066 2567 l
-4067 2546 l
-4068 2525 l
-4068 2504 l
-4069 2483 l
-4069 2462 l
-4070 2442 l
-4070 2421 l
-4070 2401 l
-4071 2380 l
-4071 2360 l
-4071 2339 l
-4071 2319 l
-4071 2299 l
-4071 2279 l
-4071 2259 l
-4071 2239 l
-4070 2219 l
-4070 2199 l
-4069 2179 l
-4069 2159 l
-4068 2140 l
-4068 2120 l
-4067 2100 l
-4066 2081 l
-4066 2062 l
-4065 2042 l
-4064 2023 l
-4063 2004 l
-4062 1985 l
-4061 1966 l
-4060 1947 l
-4059 1928 l
-4057 1910 l
-4056 1891 l
-4055 1872 l
-4053 1854 l
-4052 1835 l
-4050 1817 l
-4049 1799 l
-4047 1781 l
-4047 1777 l
-S
-868 1777 m
-823 1845 l
-772 1921 l
-722 1998 l
-672 2076 l
-623 2155 l
-573 2235 l
-543 2285 l
-S
-2598 6121 m
-2601 6118 l
-2611 6104 l
-2620 6091 l
-2630 6078 l
-2639 6064 l
-2649 6051 l
-2658 6038 l
-2668 6024 l
-2677 6011 l
-2686 5997 l
-2696 5984 l
-2705 5970 l
-2714 5956 l
-2724 5943 l
-2733 5929 l
-2742 5915 l
-2751 5901 l
-2761 5887 l
-2770 5874 l
-2779 5860 l
-2788 5846 l
-2797 5832 l
-2806 5818 l
-2815 5804 l
-2824 5790 l
-2833 5775 l
-2842 5761 l
-2850 5747 l
-2859 5733 l
-2868 5719 l
-2877 5704 l
-2886 5690 l
-2894 5676 l
-2903 5661 l
-2912 5647 l
-2920 5633 l
-2929 5618 l
-2937 5604 l
-2946 5589 l
-2954 5574 l
-2963 5560 l
-2971 5545 l
-2979 5531 l
-2988 5516 l
-2996 5501 l
-3004 5487 l
-3012 5472 l
-3020 5457 l
-3028 5442 l
-3037 5427 l
-3045 5412 l
-3053 5398 l
-3061 5383 l
-3068 5368 l
-3076 5353 l
-3084 5338 l
-3092 5323 l
-3100 5308 l
-3108 5293 l
-3115 5278 l
-3123 5263 l
-3130 5247 l
-3138 5232 l
-3146 5217 l
-3153 5202 l
-3160 5187 l
-3168 5172 l
-3175 5156 l
-3183 5141 l
-3190 5126 l
-3197 5111 l
-3204 5095 l
-3211 5080 l
-3218 5065 l
-3225 5049 l
-3233 5034 l
-3239 5018 l
-3246 5003 l
-3253 4988 l
-3260 4972 l
-3267 4957 l
-3274 4941 l
-3280 4926 l
-3287 4910 l
-3294 4895 l
-3300 4879 l
-3307 4864 l
-3313 4848 l
-3320 4833 l
-3326 4817 l
-3332 4802 l
-3339 4786 l
-3345 4771 l
-3351 4755 l
-3357 4739 l
-3364 4724 l
-3370 4708 l
-3376 4693 l
-3382 4677 l
-3388 4661 l
-3393 4646 l
-3399 4630 l
-3405 4614 l
-3411 4599 l
-3417 4583 l
-3422 4567 l
-3428 4552 l
-3433 4536 l
-3439 4521 l
-3444 4505 l
-3450 4489 l
-3455 4474 l
-3461 4458 l
-3466 4442 l
-3471 4427 l
-3476 4411 l
-3481 4395 l
-3487 4380 l
-3492 4364 l
-3497 4348 l
-3502 4333 l
-3506 4317 l
-3511 4301 l
-3516 4286 l
-3521 4270 l
-3526 4254 l
-3530 4239 l
-3535 4223 l
-3540 4208 l
-3544 4192 l
-3549 4176 l
-3553 4161 l
-3557 4145 l
-3562 4130 l
-3566 4114 l
-3570 4098 l
-3574 4083 l
-3579 4067 l
-3583 4052 l
-3587 4036 l
-3591 4021 l
-3595 4005 l
-3599 3990 l
-3603 3974 l
-3606 3959 l
-3610 3943 l
-3614 3928 l
-3618 3912 l
-3621 3897 l
-3625 3882 l
-3628 3866 l
-3632 3851 l
-3635 3836 l
-3639 3820 l
-3642 3805 l
-3645 3790 l
-3649 3774 l
-3652 3759 l
-3655 3744 l
-3658 3728 l
-3661 3713 l
-3664 3698 l
-3667 3683 l
-3670 3668 l
-3673 3653 l
-3676 3637 l
-3679 3622 l
-3682 3607 l
-3684 3592 l
-3687 3577 l
-3690 3562 l
-3692 3547 l
-3695 3532 l
-3697 3517 l
-3700 3502 l
-3702 3487 l
-3705 3472 l
-3707 3457 l
-3709 3443 l
-3711 3428 l
-3714 3413 l
-3716 3398 l
-3718 3383 l
-3720 3369 l
-3722 3354 l
-3724 3339 l
-3726 3325 l
-3728 3310 l
-3730 3295 l
-3731 3281 l
-3733 3266 l
-3735 3252 l
-3737 3237 l
-3738 3223 l
-3740 3208 l
-3741 3194 l
-3743 3180 l
-3744 3165 l
-3746 3151 l
-S
-3746 3151 m
-3747 3137 l
-3749 3122 l
-3750 3108 l
-3751 3094 l
-3752 3080 l
-3754 3065 l
-3755 3051 l
-3756 3037 l
-3757 3023 l
-3758 3009 l
-3759 2995 l
-3760 2981 l
-3761 2967 l
-3762 2953 l
-3763 2940 l
-3763 2926 l
-3764 2912 l
-3765 2898 l
-3765 2884 l
-3766 2871 l
-3767 2857 l
-3767 2843 l
-3768 2830 l
-3768 2816 l
-3769 2803 l
-3769 2789 l
-3770 2776 l
-3770 2762 l
-3770 2749 l
-3771 2736 l
-3771 2722 l
-3771 2709 l
-3771 2696 l
-3771 2682 l
-3771 2669 l
-3772 2656 l
-3772 2643 l
-3772 2630 l
-3772 2617 l
-3771 2604 l
-3771 2591 l
-3771 2578 l
-3771 2565 l
-3771 2552 l
-3771 2539 l
-3770 2527 l
-3770 2514 l
-3770 2501 l
-3769 2488 l
-3769 2476 l
-3769 2463 l
-3768 2451 l
-3768 2438 l
-3767 2426 l
-3766 2413 l
-3766 2401 l
-3765 2389 l
-3765 2376 l
-3764 2364 l
-3763 2352 l
-3762 2339 l
-3762 2327 l
-3761 2315 l
-3760 2303 l
-3759 2291 l
-3758 2279 l
-3757 2267 l
-3756 2255 l
-3756 2243 l
-3755 2231 l
-3753 2220 l
-3752 2208 l
-3751 2196 l
-3750 2184 l
-3749 2173 l
-3748 2161 l
-3747 2150 l
-3745 2138 l
-3744 2127 l
-3743 2115 l
-3742 2104 l
-3740 2092 l
-3739 2081 l
-3738 2070 l
-3736 2058 l
-3735 2047 l
-3733 2036 l
-3732 2025 l
-3730 2014 l
-3729 2003 l
-3727 1992 l
-3726 1981 l
-3724 1970 l
-3722 1959 l
-3721 1948 l
-3719 1937 l
-3717 1927 l
-3716 1916 l
-3714 1905 l
-3712 1895 l
-3710 1884 l
-3709 1874 l
-3707 1863 l
-3705 1853 l
-3703 1842 l
-3701 1832 l
-3699 1821 l
-3697 1811 l
-3695 1801 l
-3693 1791 l
-3691 1780 l
-3691 1777 l
-S
-1826 1777 m
-1793 1806 l
-1747 1847 l
-1702 1889 l
-1657 1933 l
-1612 1979 l
-1567 2026 l
-1523 2075 l
-1478 2125 l
-1434 2177 l
-1389 2230 l
-1345 2285 l
-1301 2341 l
-1258 2398 l
-1214 2456 l
-1171 2515 l
-1128 2576 l
-1085 2637 l
-1042 2700 l
-1000 2763 l
-958 2827 l
-916 2893 l
-875 2959 l
-834 3025 l
-793 3093 l
-752 3161 l
-712 3230 l
-672 3299 l
-633 3369 l
-594 3439 l
-555 3510 l
-543 3532 l
-S
-2210 6121 m
-2215 6114 l
-2222 6106 l
-2228 6099 l
-2235 6091 l
-2241 6083 l
-2248 6076 l
-2254 6068 l
-2261 6060 l
-2267 6052 l
-2273 6044 l
-2280 6036 l
-2286 6029 l
-2293 6021 l
-2299 6013 l
-2305 6005 l
-2312 5997 l
-2318 5989 l
-2324 5981 l
-2331 5973 l
-2337 5965 l
-2343 5957 l
-2349 5948 l
-2356 5940 l
-2362 5932 l
-2368 5924 l
-2375 5916 l
-2381 5908 l
-2387 5899 l
-2393 5891 l
-2399 5883 l
-2406 5874 l
-2412 5866 l
-2418 5858 l
-2424 5849 l
-2430 5841 l
-2436 5833 l
-2442 5824 l
-2449 5816 l
-2455 5807 l
-2461 5799 l
-2467 5790 l
-2473 5782 l
-2479 5773 l
-2485 5764 l
-2491 5756 l
-2497 5747 l
-2503 5739 l
-2509 5730 l
-2515 5721 l
-2521 5713 l
-2527 5704 l
-2533 5695 l
-2539 5686 l
-2545 5678 l
-2550 5669 l
-2556 5660 l
-2562 5651 l
-2568 5642 l
-2574 5633 l
-2580 5625 l
-2586 5616 l
-2591 5607 l
-2597 5598 l
-2603 5589 l
-2609 5580 l
-2614 5571 l
-2620 5562 l
-2626 5553 l
-2631 5544 l
-2637 5535 l
-2643 5526 l
-2648 5517 l
-2654 5508 l
-2660 5498 l
-2665 5489 l
-2671 5480 l
-2676 5471 l
-2682 5462 l
-2687 5453 l
-2693 5443 l
-2698 5434 l
-2704 5425 l
-2709 5416 l
-2715 5406 l
-2720 5397 l
-2725 5388 l
-2731 5378 l
-2736 5369 l
-2742 5360 l
-2747 5350 l
-2752 5341 l
-2757 5332 l
-2763 5322 l
-2768 5313 l
-2773 5303 l
-2778 5294 l
-2784 5284 l
-2789 5275 l
-2794 5265 l
-2799 5256 l
-2804 5246 l
-2809 5237 l
-2814 5227 l
-2820 5218 l
-2825 5208 l
-2830 5199 l
-2835 5189 l
-2840 5179 l
-2845 5170 l
-2850 5160 l
-2854 5151 l
-2859 5141 l
-2864 5131 l
-2869 5122 l
-2874 5112 l
-2879 5102 l
-2884 5093 l
-2888 5083 l
-2893 5073 l
-2898 5063 l
-2903 5054 l
-2907 5044 l
-2912 5034 l
-2917 5024 l
-2921 5015 l
-2926 5005 l
-2931 4995 l
-2935 4985 l
-2940 4976 l
-2944 4966 l
-2949 4956 l
-2953 4946 l
-2958 4936 l
-2962 4926 l
-2967 4917 l
-2971 4907 l
-2976 4897 l
-2980 4887 l
-2984 4877 l
-2989 4867 l
-2993 4857 l
-2997 4847 l
-3001 4838 l
-3006 4828 l
-3010 4818 l
-3014 4808 l
-3018 4798 l
-3022 4788 l
-3027 4778 l
-3031 4768 l
-3035 4758 l
-3039 4748 l
-3043 4738 l
-3047 4728 l
-3051 4718 l
-3055 4708 l
-3059 4698 l
-3063 4688 l
-3067 4678 l
-3071 4669 l
-3074 4659 l
-3078 4649 l
-3082 4639 l
-3086 4629 l
-3090 4619 l
-3093 4609 l
-3097 4599 l
-3101 4589 l
-3104 4579 l
-3108 4569 l
-3112 4559 l
-3115 4549 l
-3119 4539 l
-3123 4529 l
-3126 4519 l
-3130 4509 l
-3133 4499 l
-3137 4489 l
-3140 4479 l
-3143 4469 l
-3147 4459 l
-3150 4449 l
-3153 4439 l
-3157 4429 l
-3160 4419 l
-3163 4409 l
-3167 4399 l
-3170 4389 l
-3173 4379 l
-3176 4369 l
-3179 4359 l
-3183 4349 l
-3186 4339 l
-3189 4329 l
-3192 4319 l
-3195 4309 l
-3198 4299 l
-3201 4289 l
-3204 4279 l
-S
-3204 4279 m
-3207 4269 l
-3210 4259 l
-3213 4249 l
-3216 4239 l
-3218 4229 l
-3221 4219 l
-3224 4209 l
-3227 4199 l
-3230 4189 l
-3232 4180 l
-3235 4170 l
-3238 4160 l
-3240 4150 l
-3243 4140 l
-3246 4130 l
-3248 4120 l
-3251 4110 l
-3253 4100 l
-3256 4091 l
-3258 4081 l
-3261 4071 l
-3263 4061 l
-3266 4051 l
-3268 4041 l
-3270 4031 l
-3273 4022 l
-3275 4012 l
-3277 4002 l
-3280 3992 l
-3282 3982 l
-3284 3973 l
-3286 3963 l
-3289 3953 l
-3291 3943 l
-3293 3934 l
-3295 3924 l
-3297 3914 l
-3299 3904 l
-3301 3895 l
-3303 3885 l
-3305 3875 l
-3307 3866 l
-3309 3856 l
-3311 3846 l
-3313 3837 l
-3315 3827 l
-3317 3817 l
-3319 3808 l
-3320 3798 l
-3322 3788 l
-3324 3779 l
-3326 3769 l
-3328 3760 l
-3329 3750 l
-3331 3741 l
-3333 3731 l
-3334 3722 l
-3336 3712 l
-3337 3702 l
-3339 3693 l
-3340 3684 l
-3342 3674 l
-3343 3665 l
-3345 3655 l
-3346 3646 l
-3348 3636 l
-3349 3627 l
-3351 3618 l
-3352 3608 l
-3353 3599 l
-3355 3589 l
-3356 3580 l
-3357 3571 l
-3358 3561 l
-3360 3552 l
-3361 3543 l
-3362 3534 l
-3363 3524 l
-3364 3515 l
-3365 3506 l
-3367 3497 l
-3368 3488 l
-3369 3478 l
-3370 3469 l
-3371 3460 l
-3372 3451 l
-3373 3442 l
-3374 3433 l
-3375 3424 l
-3375 3415 l
-3376 3405 l
-3377 3396 l
-3378 3387 l
-3379 3378 l
-3380 3369 l
-3380 3360 l
-3381 3351 l
-3382 3342 l
-3383 3334 l
-3383 3325 l
-3384 3316 l
-3385 3307 l
-3385 3298 l
-3386 3289 l
-3386 3280 l
-3387 3272 l
-3387 3263 l
-3388 3254 l
-3389 3245 l
-3389 3236 l
-3389 3228 l
-3390 3219 l
-3390 3210 l
-3391 3202 l
-3391 3193 l
-3391 3184 l
-3392 3176 l
-3392 3167 l
-3392 3159 l
-3393 3150 l
-3393 3141 l
-3393 3133 l
-3393 3124 l
-3394 3116 l
-3394 3107 l
-3394 3099 l
-3394 3091 l
-3394 3082 l
-3394 3074 l
-3394 3065 l
-3394 3057 l
-3395 3049 l
-3395 3040 l
-3395 3032 l
-3395 3024 l
-3395 3016 l
-3394 3007 l
-3394 2999 l
-3394 2991 l
-3394 2983 l
-3394 2975 l
-3394 2966 l
-3394 2958 l
-3394 2950 l
-3393 2942 l
-3393 2934 l
-3393 2926 l
-3393 2918 l
-3393 2910 l
-3392 2902 l
-3392 2894 l
-3392 2886 l
-3391 2878 l
-3391 2870 l
-3391 2862 l
-3390 2855 l
-3390 2847 l
-3389 2839 l
-3389 2831 l
-3388 2823 l
-3388 2816 l
-3387 2808 l
-3387 2800 l
-3386 2793 l
-3386 2785 l
-3385 2777 l
-3385 2770 l
-3384 2762 l
-3384 2754 l
-3383 2747 l
-3382 2739 l
-3382 2732 l
-3381 2724 l
-3380 2717 l
-3380 2709 l
-3379 2702 l
-3378 2695 l
-3377 2687 l
-3377 2680 l
-3376 2672 l
-3375 2665 l
-3374 2658 l
-3373 2651 l
-3373 2643 l
-3372 2636 l
-3371 2629 l
-3370 2622 l
-3369 2615 l
-3368 2607 l
-3367 2600 l
-3366 2593 l
-3365 2586 l
-3364 2579 l
-3363 2572 l
-3362 2565 l
-3361 2558 l
-3360 2551 l
-3359 2544 l
-3358 2537 l
-S
-3358 2537 m
-3357 2530 l
-3356 2523 l
-3355 2517 l
-3354 2510 l
-3352 2503 l
-3351 2496 l
-3350 2489 l
-3349 2483 l
-3348 2476 l
-3347 2469 l
-3345 2463 l
-3344 2456 l
-3343 2449 l
-3342 2443 l
-3340 2436 l
-3339 2430 l
-3338 2423 l
-3336 2417 l
-3335 2410 l
-3334 2404 l
-3332 2397 l
-3331 2391 l
-3330 2384 l
-3328 2378 l
-3327 2372 l
-3325 2365 l
-3324 2359 l
-3322 2353 l
-3321 2347 l
-3319 2340 l
-3318 2334 l
-3316 2328 l
-3315 2322 l
-3313 2316 l
-3312 2310 l
-3310 2303 l
-3309 2297 l
-3307 2291 l
-3306 2285 l
-3304 2279 l
-3302 2273 l
-3301 2267 l
-3299 2261 l
-3298 2256 l
-3296 2250 l
-3294 2244 l
-3293 2238 l
-3291 2232 l
-3289 2226 l
-3287 2221 l
-3286 2215 l
-3284 2209 l
-3282 2203 l
-3281 2198 l
-3279 2192 l
-3277 2187 l
-3275 2181 l
-3273 2175 l
-3272 2170 l
-3270 2164 l
-3268 2159 l
-3266 2153 l
-3264 2148 l
-3262 2142 l
-3261 2137 l
-3259 2132 l
-3257 2126 l
-3255 2121 l
-3253 2116 l
-3251 2110 l
-3249 2105 l
-3247 2100 l
-3245 2094 l
-3243 2089 l
-3241 2084 l
-3239 2079 l
-3237 2074 l
-3235 2069 l
-3233 2064 l
-3231 2059 l
-3229 2053 l
-3227 2048 l
-3225 2043 l
-3223 2038 l
-3221 2034 l
-3219 2029 l
-3217 2024 l
-3215 2019 l
-3213 2014 l
-3211 2009 l
-3208 2004 l
-3206 1999 l
-3204 1995 l
-3202 1990 l
-3200 1985 l
-3198 1981 l
-3196 1976 l
-3193 1971 l
-3191 1967 l
-3189 1962 l
-3187 1957 l
-3185 1953 l
-3182 1948 l
-3180 1944 l
-3178 1939 l
-3176 1935 l
-3173 1930 l
-3171 1926 l
-3169 1922 l
-3167 1917 l
-3164 1913 l
-3162 1908 l
-3160 1904 l
-3157 1900 l
-3155 1896 l
-3153 1891 l
-3150 1887 l
-3148 1883 l
-3146 1879 l
-3143 1875 l
-3141 1870 l
-3139 1866 l
-3136 1862 l
-3134 1858 l
-3131 1854 l
-3129 1850 l
-3127 1846 l
-3124 1842 l
-3122 1838 l
-3119 1834 l
-3117 1830 l
-3114 1827 l
-3112 1823 l
-3110 1819 l
-3107 1815 l
-3105 1811 l
-3102 1807 l
-3100 1804 l
-3097 1800 l
-3095 1796 l
-3092 1793 l
-3090 1789 l
-3087 1785 l
-3085 1782 l
-3082 1778 l
-3082 1777 l
-S
-2296 2538 m
-2295 2538 l
-2295 2538 l
-2295 2538 l
-2293 2538 l
-2290 2538 l
-2258 2546 l
-2226 2555 l
-2193 2565 l
-2160 2578 l
-2126 2593 l
-2093 2609 l
-2060 2627 l
-2026 2647 l
-1992 2668 l
-1958 2691 l
-1925 2715 l
-1891 2741 l
-1857 2769 l
-1823 2798 l
-1789 2828 l
-1755 2859 l
-1721 2892 l
-1687 2926 l
-1654 2962 l
-1620 2998 l
-1587 3036 l
-1554 3074 l
-1520 3114 l
-1487 3155 l
-1455 3197 l
-1422 3239 l
-1390 3283 l
-1357 3327 l
-1325 3372 l
-1294 3418 l
-1262 3465 l
-1231 3512 l
-1200 3560 l
-1170 3609 l
-1140 3658 l
-1110 3708 l
-1080 3759 l
-1051 3809 l
-1022 3861 l
-994 3912 l
-966 3964 l
-939 4017 l
-912 4070 l
-885 4122 l
-859 4176 l
-834 4229 l
-809 4283 l
-784 4336 l
-760 4390 l
-737 4444 l
-714 4498 l
-692 4552 l
-671 4606 l
-650 4659 l
-630 4713 l
-610 4767 l
-592 4820 l
-574 4873 l
-557 4926 l
-543 4969 l
-S
-1633 6121 m
-1679 6086 l
-1733 6042 l
-1787 5995 l
-1841 5945 l
-1895 5893 l
-1949 5839 l
-2003 5782 l
-2056 5722 l
-2109 5660 l
-2161 5596 l
-2212 5530 l
-2262 5461 l
-2311 5391 l
-2359 5319 l
-2405 5245 l
-2450 5170 l
-2494 5093 l
-2536 5015 l
-2576 4936 l
-2614 4857 l
-2650 4776 l
-2685 4695 l
-2717 4614 l
-2747 4532 l
-2775 4450 l
-2801 4369 l
-2825 4288 l
-2846 4207 l
-2866 4127 l
-2883 4048 l
-2897 3970 l
-2910 3893 l
-2920 3818 l
-2929 3743 l
-2935 3671 l
-2939 3600 l
-2941 3531 l
-2941 3463 l
-2939 3398 l
-2936 3335 l
-2930 3274 l
-2923 3215 l
-2914 3159 l
-2904 3104 l
-2892 3053 l
-2878 3003 l
-2863 2956 l
-2847 2912 l
-2829 2870 l
-2811 2830 l
-2791 2793 l
-2770 2759 l
-2748 2727 l
-2724 2697 l
-2701 2670 l
-2676 2645 l
-2650 2623 l
-2624 2604 l
-2597 2586 l
-2569 2571 l
-2540 2559 l
-2511 2548 l
-2482 2540 l
-2452 2535 l
-2421 2531 l
-2391 2529 l
-2359 2530 l
-2328 2533 l
-2296 2538 l
-S
-2149 3569 m
-2149 3569 l
-2149 3569 l
-2149 3569 l
-2148 3569 l
-2147 3569 l
-2130 3570 l
-2114 3571 l
-2096 3573 l
-2079 3577 l
-2062 3581 l
-2044 3587 l
-2026 3594 l
-2008 3601 l
-1990 3610 l
-1971 3619 l
-1953 3629 l
-1934 3641 l
-1915 3653 l
-1897 3666 l
-1878 3680 l
-1859 3695 l
-1840 3710 l
-1821 3726 l
-1802 3744 l
-1783 3761 l
-1764 3780 l
-1745 3799 l
-1726 3819 l
-1708 3840 l
-1689 3861 l
-1670 3883 l
-1652 3906 l
-1633 3929 l
-1615 3952 l
-1597 3976 l
-1579 4001 l
-1562 4026 l
-1544 4052 l
-1527 4078 l
-1510 4104 l
-1493 4131 l
-1476 4158 l
-1460 4186 l
-1444 4213 l
-1428 4242 l
-1413 4270 l
-1397 4299 l
-1383 4327 l
-1368 4356 l
-1354 4385 l
-1340 4415 l
-1326 4444 l
-1313 4474 l
-1301 4503 l
-1288 4533 l
-1276 4563 l
-1265 4592 l
-1254 4622 l
-1243 4651 l
-1233 4681 l
-1224 4710 l
-1215 4739 l
-1206 4768 l
-1198 4797 l
-1190 4826 l
-1183 4854 l
-1176 4883 l
-1170 4910 l
-1165 4938 l
-1160 4965 l
-1156 4992 l
-1152 5019 l
-1149 5045 l
-1146 5071 l
-1144 5096 l
-1143 5121 l
-1142 5145 l
-1142 5169 l
-1143 5192 l
-1144 5215 l
-1146 5237 l
-1148 5258 l
-1151 5279 l
-1155 5299 l
-1160 5318 l
-1165 5337 l
-1171 5355 l
-1178 5372 l
-1185 5388 l
-1193 5404 l
-1201 5419 l
-1211 5432 l
-1220 5445 l
-1231 5458 l
-1242 5469 l
-1254 5479 l
-1267 5488 l
-1280 5496 l
-1294 5504 l
-1309 5510 l
-1324 5515 l
-1340 5519 l
-1356 5523 l
-1373 5525 l
-1390 5526 l
-1408 5525 l
-1427 5524 l
-1446 5522 l
-1466 5518 l
-1486 5513 l
-1506 5508 l
-1527 5501 l
-1549 5492 l
-1571 5483 l
-1593 5473 l
-1615 5461 l
-1638 5448 l
-1661 5434 l
-1684 5419 l
-1708 5403 l
-1731 5385 l
-1755 5367 l
-1779 5347 l
-1803 5326 l
-1826 5304 l
-1850 5282 l
-1874 5258 l
-1898 5233 l
-1921 5207 l
-1945 5180 l
-1968 5153 l
-1991 5124 l
-2014 5095 l
-2036 5065 l
-2058 5034 l
-2079 5002 l
-2101 4970 l
-2121 4937 l
-2141 4904 l
-2161 4870 l
-2180 4835 l
-2199 4800 l
-2216 4765 l
-2234 4729 l
-2250 4694 l
-2266 4657 l
-2281 4621 l
-2295 4585 l
-2309 4549 l
-2322 4512 l
-2334 4476 l
-2345 4440 l
-2355 4404 l
-2365 4368 l
-2373 4333 l
-2381 4298 l
-2388 4263 l
-2394 4229 l
-2400 4195 l
-2404 4162 l
-2408 4129 l
-2410 4097 l
-2412 4066 l
-2413 4035 l
-2414 4005 l
-2413 3976 l
-2412 3948 l
-2410 3920 l
-2407 3894 l
-2403 3868 l
-2399 3844 l
-2393 3820 l
-2388 3797 l
-2381 3775 l
-2374 3755 l
-2366 3735 l
-2357 3716 l
-2348 3699 l
-2338 3682 l
-2328 3667 l
-2317 3653 l
-2306 3640 l
-2294 3628 l
-2281 3617 l
-2268 3607 l
-2255 3599 l
-2241 3591 l
-2227 3585 l
-2212 3579 l
-2197 3575 l
-2181 3572 l
-2166 3570 l
-2149 3569 l
-S
-543 1777 m
-853 1777 l
-1164 1777 l
-1474 1777 l
-1784 1777 l
-2094 1777 l
-2405 1777 l
-2715 1777 l
-3025 1777 l
-3335 1777 l
-3646 1777 l
-3956 1777 l
-4266 1777 l
-4288 1777 l
-4310 1777 l
-4333 1777 l
-4355 1777 l
-4377 1777 l
-4399 1777 l
-4421 1777 l
-4443 1777 l
-4466 1777 l
-4488 1777 l
-4489 1777 l
-4491 1777 l
-4492 1777 l
-4494 1777 l
-4496 1777 l
-4497 1777 l
-4499 1777 l
-4500 1777 l
-4502 1777 l
-4502 1777 l
-4502 1777 l
-4502 1777 l
-S
-3299 6121 m
-3299 6121 l
-3299 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3297 6121 l
-3296 6121 l
-3294 6121 l
-3293 6121 l
-3291 6121 l
-3269 6121 l
-3247 6121 l
-3225 6121 l
-3202 6121 l
-3180 6121 l
-3158 6121 l
-3136 6121 l
-3114 6121 l
-3092 6121 l
-3069 6121 l
-3047 6121 l
-3025 6121 l
-2715 6121 l
-2405 6121 l
-2094 6121 l
-1784 6121 l
-1474 6121 l
-1164 6121 l
-853 6121 l
-543 6121 l
-S
-543 6121 m
-543 5811 l
-543 5500 l
-543 5190 l
-543 4880 l
-543 4570 l
-543 4259 l
-543 3949 l
-543 3639 l
-543 3329 l
-543 3018 l
-543 2708 l
-543 2398 l
-543 2088 l
-543 1777 l
-S
-4505 1818 m
-4505 1813 l
-4505 1809 l
-4505 1804 l
-4505 1800 l
-4505 1795 l
-4505 1791 l
-4505 1786 l
-4505 1782 l
-4505 1777 l
-S
-4505 1858 m
-4505 1853 l
-4505 1849 l
-4505 1845 l
-4505 1840 l
-4505 1836 l
-4505 1831 l
-4505 1827 l
-4505 1822 l
-4505 1818 l
-S
-4505 1898 m
-4505 1894 l
-4505 1889 l
-4505 1885 l
-4505 1880 l
-4505 1876 l
-4505 1871 l
-4505 1867 l
-4505 1862 l
-4505 1858 l
-S
-4505 1938 m
-4505 1934 l
-4505 1929 l
-4505 1925 l
-4505 1920 l
-4505 1916 l
-4505 1912 l
-4505 1907 l
-4505 1903 l
-4505 1898 l
-S
-4500 1979 m
-4500 1974 l
-4500 1970 l
-4500 1965 l
-4500 1961 l
-4500 1956 l
-4500 1952 l
-4502 1950 l
-4505 1947 l
-4505 1943 l
-4505 1938 l
-S
-4500 2019 m
-4500 2014 l
-4500 2010 l
-4500 2005 l
-4500 2001 l
-4500 1996 l
-4500 1992 l
-4500 1988 l
-4500 1983 l
-4500 1979 l
-S
-4500 2059 m
-4500 2055 l
-4500 2050 l
-4500 2046 l
-4500 2041 l
-4500 2037 l
-4500 2032 l
-4500 2028 l
-4500 2023 l
-4500 2019 l
-S
-4500 2099 m
-4500 2095 l
-4500 2090 l
-4500 2086 l
-4500 2081 l
-4500 2077 l
-4500 2072 l
-4500 2068 l
-4500 2063 l
-4500 2059 l
-S
-4500 2139 m
-4500 2135 l
-4500 2131 l
-4500 2126 l
-4500 2122 l
-4500 2117 l
-4500 2113 l
-4500 2108 l
-4500 2104 l
-4500 2099 l
-S
-4496 2180 m
-4496 2175 l
-4496 2171 l
-4496 2166 l
-4496 2162 l
-4496 2157 l
-4496 2153 l
-4496 2148 l
-4498 2146 l
-4500 2144 l
-4500 2139 l
-S
-4496 2220 m
-4496 2215 l
-4496 2211 l
-4496 2206 l
-4496 2202 l
-4496 2198 l
-4496 2193 l
-4496 2189 l
-4496 2184 l
-4496 2180 l
-S
-4491 2260 m
-4491 2256 l
-4493 2253 l
-4496 2251 l
-4496 2247 l
-4496 2242 l
-4496 2238 l
-4496 2233 l
-4496 2229 l
-4496 2224 l
-4496 2220 l
-S
-4491 2300 m
-4491 2296 l
-4491 2291 l
-4491 2287 l
-4491 2282 l
-4491 2278 l
-4491 2274 l
-4491 2269 l
-4491 2265 l
-4491 2260 l
-S
-4487 2341 m
-4489 2338 l
-4491 2336 l
-4491 2332 l
-4491 2327 l
-4491 2323 l
-4491 2318 l
-4491 2314 l
-4491 2309 l
-4491 2305 l
-4491 2300 l
-S
-4487 2341 m
-4487 2345 l
-4487 2349 l
-4487 2354 l
-4487 2358 l
-4487 2363 l
-4487 2367 l
-4487 2372 l
-4487 2376 l
-4487 2381 l
-S
-4482 2421 m
-4482 2416 l
-4482 2412 l
-4484 2410 l
-S
-4487 2381 m
-4487 2385 l
-4487 2390 l
-4487 2394 l
-4487 2399 l
-4487 2403 l
-4487 2408 l
-4484 2410 l
-S
-4482 2461 m
-4482 2457 l
-4482 2452 l
-4482 2448 l
-4482 2443 l
-4482 2439 l
-4482 2434 l
-4482 2430 l
-4482 2425 l
-4482 2421 l
-S
-4478 2501 m
-4478 2497 l
-4478 2492 l
-4478 2488 l
-4478 2484 l
-4478 2479 l
-4478 2475 l
-4480 2472 l
-4482 2470 l
-4482 2466 l
-4482 2461 l
-S
-4473 2542 m
-4473 2537 l
-4473 2533 l
-4473 2528 l
-4476 2526 l
-4478 2524 l
-4478 2519 l
-4478 2515 l
-4478 2510 l
-4478 2506 l
-4478 2501 l
-S
-4469 2582 m
-4471 2580 l
-4473 2577 l
-4473 2573 l
-4473 2568 l
-4473 2564 l
-4473 2559 l
-4473 2555 l
-4473 2551 l
-4473 2546 l
-4473 2542 l
-S
-4469 2622 m
-4469 2618 l
-4469 2613 l
-4469 2609 l
-4469 2604 l
-4469 2600 l
-4469 2595 l
-4469 2591 l
-4469 2586 l
-4469 2582 l
-S
-4464 2662 m
-4464 2658 l
-4464 2653 l
-4464 2649 l
-4464 2644 l
-4464 2640 l
-4464 2635 l
-4464 2631 l
-4467 2629 l
-4469 2627 l
-4469 2622 l
-S
-4460 2702 m
-4460 2698 l
-4460 2694 l
-4460 2689 l
-4460 2685 l
-4460 2680 l
-4460 2676 l
-4462 2673 l
-4464 2671 l
-4464 2667 l
-4464 2662 l
-S
-4455 2743 m
-4455 2738 l
-4455 2734 l
-4455 2729 l
-4455 2725 l
-4455 2720 l
-4458 2718 l
-4460 2716 l
-4460 2711 l
-4460 2707 l
-4460 2702 l
-S
-4451 2783 m
-4451 2778 l
-4451 2774 l
-4451 2770 l
-4451 2765 l
-4451 2761 l
-4453 2758 l
-4455 2756 l
-4455 2752 l
-4455 2747 l
-4455 2743 l
-S
-4446 2823 m
-4446 2819 l
-4446 2814 l
-4446 2810 l
-4446 2805 l
-4446 2801 l
-4449 2799 l
-4451 2796 l
-4451 2792 l
-4451 2787 l
-4451 2783 l
-S
-4442 2863 m
-4442 2859 l
-4442 2854 l
-4442 2850 l
-4442 2845 l
-4442 2841 l
-4444 2839 l
-S
-4446 2823 m
-4446 2828 l
-4446 2832 l
-4446 2837 l
-4444 2839 l
-S
-4438 2904 m
-4438 2899 l
-4438 2895 l
-4438 2890 l
-4438 2886 l
-4438 2881 l
-4438 2877 l
-4440 2875 l
-4442 2872 l
-4442 2868 l
-4442 2863 l
-S
-4429 2944 m
-4431 2942 l
-4433 2939 l
-4433 2935 l
-4433 2930 l
-4433 2926 l
-4433 2921 l
-4433 2917 l
-4433 2913 l
-4435 2910 l
-4438 2908 l
-4438 2904 l
-S
-4424 2984 m
-4424 2980 l
-4424 2975 l
-4426 2973 l
-4429 2971 l
-4429 2966 l
-4429 2962 l
-4429 2957 l
-4429 2953 l
-4429 2948 l
-4429 2944 l
-S
-4420 3024 m
-4420 3020 l
-4420 3015 l
-4420 3011 l
-4422 3009 l
-4424 3006 l
-4424 3002 l
-4424 2997 l
-4424 2993 l
-4424 2988 l
-4424 2984 l
-S
-4415 3064 m
-4415 3060 l
-4415 3056 l
-4415 3051 l
-4415 3047 l
-4415 3042 l
-4417 3040 l
-4420 3038 l
-4420 3033 l
-4420 3029 l
-4420 3024 l
-S
-4406 3105 m
-4406 3100 l
-4408 3098 l
-4411 3096 l
-4411 3091 l
-4411 3087 l
-4411 3082 l
-4411 3078 l
-4411 3073 l
-4411 3069 l
-4413 3067 l
-4415 3064 l
-S
-4402 3145 m
-4402 3140 l
-4402 3136 l
-4402 3131 l
-4402 3127 l
-4404 3125 l
-S
-4406 3105 m
-4406 3109 l
-4406 3114 l
-4406 3118 l
-4406 3123 l
-4404 3125 l
-S
-4393 3185 m
-4395 3183 l
-4397 3181 l
-4397 3176 l
-4397 3172 l
-4397 3167 l
-4397 3163 l
-4397 3158 l
-4400 3156 l
-4402 3154 l
-4402 3149 l
-4402 3145 l
-S
-4388 3225 m
-4388 3221 l
-4388 3216 l
-4388 3212 l
-4391 3210 l
-4393 3207 l
-4393 3203 l
-4393 3199 l
-4393 3194 l
-4393 3190 l
-4393 3185 l
-S
-4379 3266 m
-4379 3261 l
-4382 3259 l
-4384 3257 l
-4384 3252 l
-4384 3248 l
-4384 3243 l
-4384 3239 l
-4386 3236 l
-4388 3234 l
-4388 3230 l
-4388 3225 l
-S
-4375 3306 m
-4375 3301 l
-4375 3297 l
-4375 3292 l
-4375 3288 l
-4377 3286 l
-4379 3283 l
-4379 3279 l
-4379 3274 l
-4379 3270 l
-4379 3266 l
-S
-4366 3346 m
-4366 3341 l
-4366 3337 l
-4368 3335 l
-4370 3333 l
-4370 3328 l
-4370 3324 l
-4370 3319 l
-4370 3315 l
-4373 3312 l
-4375 3310 l
-4375 3306 l
-S
-4357 3386 m
-4359 3384 l
-4362 3382 l
-4362 3377 l
-4362 3373 l
-4362 3368 l
-4362 3364 l
-4364 3362 l
-S
-4366 3346 m
-4366 3350 l
-4366 3355 l
-4366 3359 l
-4364 3362 l
-S
-4353 3426 m
-4353 3422 l
-4353 3417 l
-4353 3413 l
-4353 3409 l
-4355 3406 l
-4357 3404 l
-4357 3400 l
-4357 3395 l
-4357 3391 l
-4357 3386 l
-S
-4344 3467 m
-4344 3462 l
-4344 3458 l
-4344 3453 l
-4346 3451 l
-4348 3449 l
-4348 3444 l
-4348 3440 l
-4348 3435 l
-4348 3431 l
-4350 3429 l
-4353 3426 l
-S
-4335 3507 m
-4335 3502 l
-4335 3498 l
-4337 3496 l
-4339 3493 l
-4339 3489 l
-4339 3484 l
-4339 3480 l
-4339 3476 l
-4341 3473 l
-4344 3471 l
-4344 3467 l
-S
-4326 3547 m
-4326 3543 l
-4328 3540 l
-4330 3538 l
-4330 3534 l
-4330 3529 l
-4330 3525 l
-4330 3520 l
-4333 3518 l
-4335 3516 l
-4335 3511 l
-4335 3507 l
-S
-4317 3587 m
-4317 3583 l
-4319 3581 l
-4321 3578 l
-4321 3574 l
-4321 3569 l
-4321 3565 l
-4324 3563 l
-S
-4326 3547 m
-4326 3552 l
-4326 3556 l
-4326 3560 l
-4324 3563 l
-S
-4308 3627 m
-4308 3623 l
-4310 3621 l
-4312 3619 l
-4312 3614 l
-4312 3610 l
-4312 3605 l
-4315 3603 l
-4317 3601 l
-4317 3596 l
-4317 3592 l
-4317 3587 l
-S
-4299 3668 m
-4299 3663 l
-4301 3661 l
-4303 3659 l
-4303 3654 l
-4303 3650 l
-4303 3645 l
-4306 3643 l
-4308 3641 l
-4308 3636 l
-4308 3632 l
-4308 3627 l
-S
-4290 3708 m
-4290 3703 l
-4292 3701 l
-4295 3699 l
-4295 3695 l
-4295 3690 l
-4295 3686 l
-4297 3683 l
-4299 3681 l
-4299 3677 l
-4299 3672 l
-4299 3668 l
-S
-4281 3748 m
-4281 3744 l
-4281 3739 l
-4283 3737 l
-S
-4283 3737 m
-4286 3735 l
-4286 3730 l
-4286 3726 l
-4286 3721 l
-4288 3719 l
-4290 3717 l
-4290 3712 l
-4290 3708 l
-S
-4272 3788 m
-4272 3784 l
-4272 3779 l
-4274 3777 l
-4277 3775 l
-4277 3770 l
-4277 3766 l
-4277 3762 l
-4279 3759 l
-4281 3757 l
-4281 3753 l
-4281 3748 l
-S
-4263 3829 m
-4263 3824 l
-4263 3820 l
-4263 3815 l
-4265 3813 l
-4268 3811 l
-4268 3806 l
-4268 3802 l
-4268 3797 l
-4270 3795 l
-4272 3793 l
-4272 3788 l
-S
-4250 3869 m
-4252 3867 l
-4254 3864 l
-4254 3860 l
-4254 3855 l
-4254 3851 l
-4257 3849 l
-4259 3846 l
-4259 3842 l
-4259 3838 l
-4259 3833 l
-4261 3831 l
-4263 3829 l
-S
-4241 3909 m
-4241 3905 l
-4243 3902 l
-S
-4243 3902 m
-4245 3900 l
-4245 3896 l
-4245 3891 l
-4245 3887 l
-4248 3884 l
-4250 3882 l
-4250 3878 l
-4250 3873 l
-4250 3869 l
-S
-4232 3949 m
-4232 3945 l
-4232 3940 l
-4232 3936 l
-4234 3934 l
-4236 3931 l
-4236 3927 l
-4236 3922 l
-4239 3920 l
-4241 3918 l
-4241 3913 l
-4241 3909 l
-S
-4219 3989 m
-4221 3987 l
-4223 3985 l
-4223 3981 l
-4223 3976 l
-4223 3972 l
-4225 3969 l
-4228 3967 l
-4228 3963 l
-4228 3958 l
-4228 3954 l
-4230 3951 l
-4232 3949 l
-S
-4210 4030 m
-4210 4025 l
-4210 4021 l
-4212 4018 l
-4214 4016 l
-4214 4012 l
-4214 4007 l
-4214 4003 l
-4216 4001 l
-4219 3998 l
-4219 3994 l
-4219 3989 l
-S
-4196 4070 m
-4198 4068 l
-4201 4065 l
-4201 4061 l
-4201 4056 l
-4201 4052 l
-4203 4050 l
-S
-4203 4050 m
-4205 4048 l
-4205 4043 l
-4205 4039 l
-4207 4036 l
-4210 4034 l
-4210 4030 l
-S
-4187 4110 m
-4187 4106 l
-4187 4101 l
-4190 4099 l
-4192 4097 l
-4192 4092 l
-4192 4088 l
-4192 4083 l
-4194 4081 l
-4196 4079 l
-4196 4074 l
-4196 4070 l
-S
-4174 4150 m
-4174 4146 l
-4176 4144 l
-4178 4141 l
-4178 4137 l
-4178 4132 l
-4181 4130 l
-4183 4128 l
-4183 4124 l
-4183 4119 l
-4183 4115 l
-4185 4112 l
-4187 4110 l
-S
-4160 4191 m
-4163 4188 l
-S
-4163 4188 m
-4165 4186 l
-4165 4182 l
-4165 4177 l
-4167 4175 l
-4169 4173 l
-4169 4168 l
-4169 4164 l
-4172 4161 l
-4174 4159 l
-4174 4155 l
-4174 4150 l
-S
-4152 4231 m
-4152 4226 l
-4152 4222 l
-4154 4220 l
-4156 4217 l
-4156 4213 l
-4156 4208 l
-4158 4206 l
-4160 4204 l
-4160 4199 l
-4160 4195 l
-4160 4191 l
-S
-4138 4271 m
-4138 4266 l
-4140 4264 l
-4143 4262 l
-4143 4258 l
-4143 4253 l
-4145 4251 l
-4147 4249 l
-4147 4244 l
-4147 4240 l
-4147 4235 l
-4149 4233 l
-4152 4231 l
-S
-4125 4311 m
-4125 4307 l
-4127 4304 l
-4129 4302 l
-4129 4298 l
-4129 4293 l
-4131 4291 l
-4134 4289 l
-4134 4284 l
-4134 4280 l
-4136 4278 l
-4138 4275 l
-4138 4271 l
-S
-4111 4351 m
-4114 4349 l
-4116 4347 l
-4116 4342 l
-4116 4338 l
-4118 4336 l
-4120 4334 l
-4120 4329 l
-4120 4325 l
-4122 4322 l
-S
-4125 4311 m
-4125 4316 l
-4125 4320 l
-4122 4322 l
-S
-4098 4392 m
-4100 4389 l
-4102 4387 l
-4102 4383 l
-4102 4378 l
-4105 4376 l
-4107 4374 l
-4107 4369 l
-4107 4365 l
-4109 4363 l
-4111 4360 l
-4111 4356 l
-4111 4351 l
-S
-4085 4432 m
-4087 4430 l
-4089 4427 l
-4089 4423 l
-4089 4418 l
-4091 4416 l
-4093 4414 l
-4093 4409 l
-4093 4405 l
-4096 4403 l
-4098 4401 l
-4098 4396 l
-4098 4392 l
-S
-4071 4472 m
-4073 4470 l
-4076 4468 l
-4076 4463 l
-4076 4459 l
-4078 4456 l
-4080 4454 l
-4080 4450 l
-4080 4445 l
-4082 4443 l
-S
-4085 4432 m
-4085 4436 l
-4085 4441 l
-4082 4443 l
-S
-4058 4512 m
-4060 4510 l
-4062 4508 l
-4062 4503 l
-4062 4499 l
-4064 4497 l
-4067 4494 l
-4067 4490 l
-4067 4485 l
-4069 4483 l
-4071 4481 l
-4071 4477 l
-4071 4472 l
-S
-4044 4552 m
-4047 4550 l
-4049 4548 l
-4049 4544 l
-4049 4539 l
-4051 4537 l
-4053 4535 l
-4053 4530 l
-4053 4526 l
-4055 4523 l
-4058 4521 l
-4058 4517 l
-4058 4512 l
-S
-4031 4593 m
-4031 4588 l
-4033 4586 l
-4035 4584 l
-4035 4579 l
-4035 4575 l
-4038 4573 l
-4040 4570 l
-4040 4566 l
-4040 4561 l
-4042 4559 l
-S
-4044 4552 m
-4044 4557 l
-4042 4559 l
-S
-4017 4633 m
-4017 4628 l
-4017 4624 l
-4020 4622 l
-4022 4620 l
-4022 4615 l
-4024 4613 l
-4026 4611 l
-4026 4606 l
-4026 4602 l
-4029 4599 l
-4031 4597 l
-4031 4593 l
-S
-4000 4673 m
-4002 4671 l
-S
-4002 4671 m
-4004 4669 l
-4004 4664 l
-4006 4662 l
-4009 4660 l
-4009 4655 l
-4009 4651 l
-4011 4649 l
-4013 4646 l
-4013 4642 l
-4013 4637 l
-4015 4635 l
-4017 4633 l
-S
-3986 4713 m
-3988 4711 l
-3991 4709 l
-3991 4704 l
-3991 4700 l
-3993 4698 l
-3995 4695 l
-3995 4691 l
-3995 4687 l
-3997 4684 l
-4000 4682 l
-4000 4678 l
-4000 4673 l
-S
-3973 4754 m
-3973 4749 l
-3973 4745 l
-3975 4742 l
-3977 4740 l
-3977 4736 l
-3979 4733 l
-3982 4731 l
-3982 4727 l
-3982 4722 l
-3984 4720 l
-3986 4718 l
-3986 4713 l
-S
-3955 4794 m
-3957 4792 l
-3959 4789 l
-3959 4785 l
-3959 4780 l
-3962 4778 l
-S
-3962 4778 m
-3964 4776 l
-3964 4771 l
-3966 4769 l
-3968 4767 l
-3968 4763 l
-3968 4758 l
-3971 4756 l
-3973 4754 l
-S
-3942 4834 m
-3942 4830 l
-3944 4827 l
-3946 4825 l
-3946 4821 l
-3946 4816 l
-3948 4814 l
-3950 4812 l
-3950 4807 l
-3953 4805 l
-3955 4803 l
-3955 4798 l
-3955 4794 l
-S
-3924 4874 m
-3926 4872 l
-3928 4870 l
-3928 4865 l
-3928 4861 l
-3930 4859 l
-3933 4856 l
-3933 4852 l
-3935 4850 l
-3937 4847 l
-3937 4843 l
-3937 4838 l
-3939 4836 l
-3942 4834 l
-S
-3910 4914 m
-3910 4910 l
-3910 4906 l
-3912 4903 l
-3915 4901 l
-3915 4897 l
-3917 4894 l
-3919 4892 l
-3919 4888 l
-3919 4883 l
-3921 4881 l
-S
-3924 4874 m
-3924 4879 l
-3921 4881 l
-S
-3892 4955 m
-3892 4950 l
-3895 4948 l
-3897 4946 l
-3897 4941 l
-3899 4939 l
-3901 4937 l
-3901 4932 l
-3901 4928 l
-3904 4926 l
-3906 4923 l
-3906 4919 l
-3908 4917 l
-3910 4914 l
-S
-3874 4995 m
-3877 4993 l
-3879 4990 l
-3879 4986 l
-3879 4981 l
-3881 4979 l
-S
-3881 4979 m
-3883 4977 l
-3883 4973 l
-3886 4970 l
-3888 4968 l
-3888 4964 l
-3890 4961 l
-3892 4959 l
-3892 4955 l
-S
-3857 5035 m
-3859 5033 l
-3861 5031 l
-3861 5026 l
-3863 5024 l
-3866 5022 l
-3866 5017 l
-3868 5015 l
-3870 5013 l
-3870 5008 l
-3870 5004 l
-3872 5002 l
-3874 4999 l
-3874 4995 l
-S
-3843 5075 m
-3843 5071 l
-3843 5066 l
-3845 5064 l
-3848 5062 l
-3848 5057 l
-3850 5055 l
-3852 5053 l
-3852 5049 l
-3854 5046 l
-3857 5044 l
-3857 5040 l
-3857 5035 l
-S
-3825 5116 m
-3825 5111 l
-3828 5109 l
-3830 5107 l
-3830 5102 l
-3830 5098 l
-3832 5095 l
-3834 5093 l
-3834 5089 l
-3836 5086 l
-3839 5084 l
-3839 5080 l
-3841 5078 l
-S
-3843 5075 m
-3841 5078 l
-S
-3807 5156 m
-3807 5151 l
-3810 5149 l
-3812 5147 l
-3812 5142 l
-3812 5138 l
-3814 5136 l
-3816 5133 l
-3816 5129 l
-3819 5127 l
-3821 5124 l
-3821 5120 l
-3823 5118 l
-3825 5116 l
-S
-3790 5196 m
-3790 5191 l
-3792 5189 l
-3794 5187 l
-3794 5183 l
-3796 5180 l
-3799 5178 l
-3799 5174 l
-3799 5169 l
-3801 5167 l
-S
-3801 5167 m
-3803 5165 l
-3803 5160 l
-3805 5158 l
-3807 5156 l
-S
-3772 5236 m
-3772 5232 l
-3774 5229 l
-3776 5227 l
-3776 5223 l
-3776 5218 l
-3778 5216 l
-3781 5214 l
-3781 5209 l
-3783 5207 l
-3785 5205 l
-3785 5200 l
-3787 5198 l
-3790 5196 l
-S
-3754 5276 m
-3754 5272 l
-3754 5267 l
-3756 5265 l
-3758 5263 l
-3758 5259 l
-3761 5256 l
-S
-3761 5256 m
-3763 5254 l
-3763 5250 l
-3765 5247 l
-3767 5245 l
-3767 5241 l
-3769 5238 l
-3772 5236 l
-S
-3731 5317 m
-3734 5314 l
-3736 5312 l
-3736 5308 l
-3738 5305 l
-3740 5303 l
-3740 5299 l
-3743 5297 l
-3745 5294 l
-3745 5290 l
-3747 5288 l
-3749 5285 l
-3749 5281 l
-3752 5279 l
-3754 5276 l
-S
-3714 5357 m
-3716 5355 l
-3718 5352 l
-3718 5348 l
-3718 5343 l
-3720 5341 l
-S
-3720 5341 m
-3723 5339 l
-3723 5334 l
-3725 5332 l
-3727 5330 l
-3727 5326 l
-3729 5323 l
-3731 5321 l
-3731 5317 l
-S
-3696 5397 m
-3696 5393 l
-3698 5390 l
-3700 5388 l
-3700 5384 l
-3702 5381 l
-3705 5379 l
-3705 5375 l
-3707 5372 l
-3709 5370 l
-3709 5366 l
-3711 5364 l
-3714 5361 l
-3714 5357 l
-S
-3673 5437 m
-3676 5435 l
-3678 5433 l
-3678 5428 l
-3680 5426 l
-S
-3680 5426 m
-3682 5424 l
-3682 5419 l
-3685 5417 l
-3687 5415 l
-3687 5410 l
-3689 5408 l
-3691 5406 l
-3691 5402 l
-3694 5399 l
-3696 5397 l
-S
-3656 5477 m
-3656 5473 l
-3658 5471 l
-3660 5469 l
-3660 5464 l
-3662 5462 l
-3664 5460 l
-3664 5455 l
-3667 5453 l
-3669 5451 l
-3669 5446 l
-3671 5444 l
-3673 5442 l
-3673 5437 l
-S
-3633 5518 m
-3635 5515 l
-3638 5513 l
-3638 5509 l
-3640 5507 l
-S
-3640 5507 m
-3642 5504 l
-3642 5500 l
-3644 5498 l
-3647 5495 l
-3647 5491 l
-3649 5489 l
-3651 5486 l
-3651 5482 l
-3653 5480 l
-3656 5477 l
-S
-3615 5558 m
-3615 5553 l
-3618 5551 l
-3620 5549 l
-3620 5545 l
-3622 5542 l
-3624 5540 l
-3624 5536 l
-3626 5533 l
-3629 5531 l
-3629 5527 l
-3631 5524 l
-3633 5522 l
-3633 5518 l
-S
-3593 5598 m
-3595 5596 l
-3597 5594 l
-3597 5589 l
-3600 5587 l
-S
-3600 5587 m
-3602 5585 l
-3602 5580 l
-3604 5578 l
-3606 5576 l
-3606 5571 l
-3609 5569 l
-3611 5567 l
-3611 5562 l
-3613 5560 l
-3615 5558 l
-S
-3575 5638 m
-3575 5634 l
-3577 5632 l
-3580 5629 l
-3580 5625 l
-3582 5623 l
-3584 5620 l
-3584 5616 l
-3586 5614 l
-3588 5612 l
-3588 5607 l
-3591 5605 l
-3593 5603 l
-3593 5598 l
-S
-3553 5679 m
-3553 5674 l
-3555 5672 l
-3557 5670 l
-3557 5665 l
-3559 5663 l
-S
-3559 5663 m
-3562 5661 l
-3562 5656 l
-3564 5654 l
-3566 5652 l
-3568 5650 l
-3571 5647 l
-3571 5643 l
-3573 5641 l
-3575 5638 l
-S
-3530 5719 m
-3533 5717 l
-3535 5714 l
-3535 5710 l
-3537 5708 l
-3539 5705 l
-3539 5701 l
-3542 5699 l
-3544 5696 l
-3544 5692 l
-3546 5690 l
-3548 5688 l
-3548 5683 l
-3551 5681 l
-3553 5679 l
-S
-3508 5759 m
-3510 5757 l
-3513 5755 l
-3513 5750 l
-3515 5748 l
-3517 5746 l
-3517 5741 l
-3519 5739 l
-S
-3519 5739 m
-3521 5737 l
-3521 5732 l
-3524 5730 l
-3526 5728 l
-3526 5723 l
-3528 5721 l
-3530 5719 l
-S
-3486 5799 m
-3488 5797 l
-3490 5795 l
-3490 5790 l
-3492 5788 l
-3495 5786 l
-3495 5781 l
-3497 5779 l
-3499 5777 l
-3499 5772 l
-3501 5770 l
-3504 5768 l
-3506 5766 l
-3508 5763 l
-3508 5759 l
-S
-3463 5839 m
-3466 5837 l
-3468 5835 l
-3468 5831 l
-3470 5828 l
-3472 5826 l
-3472 5822 l
-3475 5819 l
-3477 5817 l
-3479 5815 l
-S
-3479 5815 m
-3481 5813 l
-3481 5808 l
-3483 5806 l
-3486 5804 l
-3486 5799 l
-S
-3441 5880 m
-3443 5877 l
-3445 5875 l
-3445 5871 l
-3448 5868 l
-3450 5866 l
-3450 5862 l
-3452 5860 l
-3454 5857 l
-3454 5853 l
-3457 5851 l
-3459 5848 l
-3461 5846 l
-3463 5844 l
-3463 5839 l
-S
-3419 5920 m
-3421 5918 l
-3423 5915 l
-3423 5911 l
-3425 5909 l
-3428 5906 l
-3428 5902 l
-3430 5900 l
-3432 5898 l
-3432 5893 l
-3434 5891 l
-3437 5889 l
-3439 5886 l
-S
-3441 5880 m
-3441 5884 l
-3439 5886 l
-S
-3396 5960 m
-3396 5956 l
-3399 5953 l
-S
-3399 5953 m
-3401 5951 l
-3401 5947 l
-3403 5944 l
-3405 5942 l
-3408 5940 l
-3410 5938 l
-3410 5933 l
-3412 5931 l
-3414 5929 l
-3414 5924 l
-3416 5922 l
-3419 5920 l
-S
-3370 6000 m
-3372 5998 l
-3374 5996 l
-3376 5994 l
-3378 5991 l
-3378 5987 l
-3381 5985 l
-3383 5982 l
-3383 5978 l
-3385 5976 l
-3387 5974 l
-3390 5971 l
-3392 5969 l
-3392 5965 l
-3394 5962 l
-3396 5960 l
-S
-3347 6041 m
-3349 6038 l
-3352 6036 l
-3352 6032 l
-3354 6029 l
-3356 6027 l
-3356 6023 l
-3358 6020 l
-S
-3358 6020 m
-3361 6018 l
-3363 6016 l
-3365 6014 l
-3365 6009 l
-3367 6007 l
-3370 6005 l
-3370 6000 l
-S
-3325 6081 m
-3325 6076 l
-3327 6074 l
-3329 6072 l
-3329 6067 l
-3332 6065 l
-3334 6063 l
-3336 6061 l
-3338 6058 l
-3338 6054 l
-3340 6052 l
-3343 6049 l
-3345 6047 l
-3347 6045 l
-3347 6041 l
-S
-3298 6121 m
-3300 6119 l
-3303 6116 l
-3303 6112 l
-3305 6110 l
-3307 6108 l
-3309 6105 l
-3311 6103 l
-3311 6099 l
-3314 6096 l
-3316 6094 l
-3316 6090 l
-3318 6087 l
-S
-3318 6087 m
-3320 6085 l
-3323 6083 l
-3325 6081 l
-S
-1 g
-Y
-2232.6 1612.9 m
-2233 1734 l
-2333 1734 l
-2333 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2279 1717 m
-2266 1713 l
-2258 1701 l
-2253 1680 l
-2253 1667 l
-2258 1646 l
-2266 1634 l
-2279 1630 l
-2287 1630 l
-2299 1634 l
-2308 1646 l
-2312 1667 l
-2312 1680 l
-2308 1701 l
-2299 1713 l
-2287 1717 l
-2279 1717 l
-S
-1 g
-Y
-1873.8 1612.9 m
-1874 1734 l
-1936 1734 l
-1936 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-1895 1701 m
-1903 1705 l
-1916 1717 l
-1916 1630 l
-S
-1 g
-Y
-1382.7 1612.9 m
-1383 1734 l
-1483 1734 l
-1483 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-1408 1696 m
-1408 1701 l
-1412 1709 l
-1416 1713 l
-1424 1717 l
-1441 1717 l
-1450 1713 l
-1454 1709 l
-1458 1701 l
-1458 1692 l
-1454 1684 l
-1445 1671 l
-1404 1630 l
-1462 1630 l
-S
-1 g
-Y
-682.1 1612.9 m
-682 1734 l
-782 1734 l
-782 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-711 1717 m
-757 1717 l
-732 1684 l
-745 1684 l
-753 1680 l
-757 1676 l
-761 1663 l
-761 1655 l
-757 1642 l
-749 1634 l
-736 1630 l
-724 1630 l
-711 1634 l
-707 1638 l
-703 1646 l
-S
-1 g
-Y
-2514.3 1612.9 m
-2514 1734 l
-2698 1734 l
-2698 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2539 1696 m
-2539 1701 l
-2544 1709 l
-2548 1713 l
-2556 1717 l
-2573 1717 l
-2581 1713 l
-2585 1709 l
-2589 1701 l
-2589 1692 l
-2585 1684 l
-2577 1671 l
-2535 1630 l
-2594 1630 l
-S
-2627 1717 m
-2673 1717 l
-2648 1684 l
-2660 1684 l
-2669 1680 l
-2673 1676 l
-2677 1663 l
-2677 1655 l
-2673 1642 l
-2665 1634 l
-2652 1630 l
-2640 1630 l
-2627 1634 l
-2623 1638 l
-2619 1646 l
-S
-1 g
-Y
-2826.8 1612.9 m
-2827 1734 l
-3011 1734 l
-3011 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2852 1696 m
-2852 1701 l
-2856 1709 l
-2860 1713 l
-2869 1717 l
-2885 1717 l
-2894 1713 l
-2898 1709 l
-2902 1701 l
-2902 1692 l
-2898 1684 l
-2889 1671 l
-2848 1630 l
-2906 1630 l
-S
-2935 1696 m
-2935 1701 l
-2940 1709 l
-2944 1713 l
-2952 1717 l
-2969 1717 l
-2977 1713 l
-2981 1709 l
-2985 1701 l
-2985 1692 l
-2981 1684 l
-2973 1671 l
-2931 1630 l
-2990 1630 l
-S
-1 g
-Y
-3158.7 1612.9 m
-3159 1734 l
-3317 1734 l
-3317 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-3184 1696 m
-3184 1701 l
-3188 1709 l
-3192 1713 l
-3200 1717 l
-3217 1717 l
-3226 1713 l
-3230 1709 l
-3234 1701 l
-3234 1692 l
-3230 1684 l
-3221 1671 l
-3180 1630 l
-3238 1630 l
-S
-3276 1701 m
-3284 1705 l
-3297 1717 l
-3297 1630 l
-S
-1 g
-Y
-3539 1612.9 m
-3539 1734 l
-3723 1734 l
-3723 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-3564 1696 m
-3564 1701 l
-3568 1709 l
-3572 1713 l
-3581 1717 l
-3597 1717 l
-3606 1713 l
-3610 1709 l
-3614 1701 l
-3614 1692 l
-3610 1684 l
-3602 1671 l
-3560 1630 l
-3618 1630 l
-S
-3668 1717 m
-3656 1713 l
-3648 1701 l
-3643 1680 l
-3643 1667 l
-3648 1646 l
-3656 1634 l
-3668 1630 l
-3677 1630 l
-3689 1634 l
-3698 1646 l
-3702 1667 l
-3702 1680 l
-3698 1701 l
-3689 1713 l
-3677 1717 l
-3668 1717 l
-S
-1 g
-Y
-3992.1 1612.9 m
-3992 1734 l
-4159 1734 l
-4159 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-4013 1701 m
-4021 1705 l
-4034 1717 l
-4034 1630 l
-S
-4138 1688 m
-4134 1676 l
-4126 1667 l
-4113 1663 l
-4109 1663 l
-4097 1667 l
-4088 1676 l
-4084 1688 l
-4084 1692 l
-4088 1705 l
-4097 1713 l
-4109 1717 l
-4113 1717 l
-4126 1713 l
-4134 1705 l
-4138 1688 l
-4138 1667 l
-4134 1646 l
-4126 1634 l
-4113 1630 l
-4105 1630 l
-4092 1634 l
-4088 1642 l
-S
-1 g
-Y
-4375 1612.9 m
-4375 1734 l
-4546 1734 l
-4546 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-4396 1701 m
-4404 1705 l
-4417 1717 l
-4417 1630 l
-S
-4488 1717 m
-4475 1713 l
-4471 1705 l
-4471 1696 l
-4475 1688 l
-4484 1684 l
-4500 1680 l
-4513 1676 l
-4521 1667 l
-4525 1659 l
-4525 1646 l
-4521 1638 l
-4517 1634 l
-4504 1630 l
-4488 1630 l
-4475 1634 l
-4471 1638 l
-4467 1646 l
-4467 1659 l
-4471 1667 l
-4479 1676 l
-4492 1680 l
-4509 1684 l
-4517 1688 l
-4521 1696 l
-4521 1705 l
-4517 1713 l
-4504 1717 l
-4488 1717 l
-S
-1 g
-Y
-324.3 2215.9 m
-324 2337 l
-508 2337 l
-508 2216 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-395 2320 m
-354 2320 l
-349 2283 l
-354 2287 l
-366 2291 l
-379 2291 l
-391 2287 l
-399 2279 l
-404 2266 l
-404 2258 l
-399 2245 l
-391 2237 l
-379 2233 l
-366 2233 l
-354 2237 l
-349 2241 l
-345 2249 l
-S
-454 2320 m
-441 2316 l
-433 2304 l
-429 2283 l
-429 2270 l
-433 2249 l
-441 2237 l
-454 2233 l
-462 2233 l
-475 2237 l
-483 2249 l
-487 2270 l
-487 2283 l
-483 2304 l
-475 2316 l
-462 2320 l
-454 2320 l
-S
-1 g
-Y
-328.5 3463.3 m
-328 3584 l
-508 3584 l
-508 3463 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-399 3555 m
-395 3564 l
-383 3568 l
-374 3568 l
-362 3564 l
-354 3551 l
-349 3530 l
-349 3509 l
-354 3493 l
-362 3484 l
-374 3480 l
-379 3480 l
-391 3484 l
-399 3493 l
-404 3505 l
-404 3509 l
-399 3522 l
-391 3530 l
-379 3534 l
-374 3534 l
-362 3530 l
-354 3522 l
-349 3509 l
-S
-454 3568 m
-441 3564 l
-433 3551 l
-429 3530 l
-429 3518 l
-433 3497 l
-441 3484 l
-454 3480 l
-462 3480 l
-475 3484 l
-483 3497 l
-487 3518 l
-487 3530 l
-483 3551 l
-475 3564 l
-462 3568 l
-454 3568 l
-S
-1 g
-Y
-324.3 4900 m
-324 5021 l
-508 5021 l
-508 4900 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-404 5004 m
-362 4917 l
-S
-345 5004 m
-404 5004 l
-S
-454 5004 m
-441 5000 l
-433 4988 l
-429 4967 l
-429 4954 l
-433 4933 l
-441 4921 l
-454 4917 l
-462 4917 l
-475 4921 l
-483 4933 l
-487 4954 l
-487 4967 l
-483 4988 l
-475 5000 l
-462 5004 l
-454 5004 l
-S
-1 g
-Y
-2021.5 1398.2 m
-2022 1553 l
-3070 1553 l
-3070 1398 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2042 1532 m
-2042 1444 l
-S
-2042 1532 m
-2080 1532 l
-2093 1528 l
-2097 1524 l
-2101 1515 l
-2101 1507 l
-2097 1498 l
-2093 1494 l
-2080 1490 l
-2042 1490 l
-S
-2072 1490 m
-2101 1444 l
-S
-2126 1532 m
-2130 1528 l
-2134 1532 l
-2130 1536 l
-2126 1532 l
-S
-2130 1503 m
-2130 1444 l
-S
-2209 1503 m
-2209 1436 l
-2205 1423 l
-2201 1419 l
-2193 1415 l
-2180 1415 l
-2172 1419 l
-S
-2209 1490 m
-2201 1498 l
-2193 1503 l
-2180 1503 l
-2172 1498 l
-2164 1490 l
-2159 1478 l
-2159 1469 l
-2164 1457 l
-2172 1448 l
-2180 1444 l
-2193 1444 l
-2201 1448 l
-2209 1457 l
-S
-2243 1532 m
-2243 1444 l
-S
-2243 1486 m
-2255 1498 l
-2264 1503 l
-2276 1503 l
-2285 1498 l
-2289 1486 l
-2289 1444 l
-S
-2326 1532 m
-2326 1461 l
-2331 1448 l
-2339 1444 l
-2347 1444 l
-S
-2314 1503 m
-2343 1503 l
-S
-2485 1503 m
-2485 1444 l
-S
-2485 1490 m
-2477 1498 l
-2468 1503 l
-2456 1503 l
-2448 1498 l
-2439 1490 l
-2435 1478 l
-2435 1469 l
-2439 1457 l
-2448 1448 l
-2456 1444 l
-2468 1444 l
-2477 1448 l
-2485 1457 l
-S
-2560 1490 m
-2556 1498 l
-2544 1503 l
-2531 1503 l
-2519 1498 l
-2514 1490 l
-2519 1482 l
-2527 1478 l
-2548 1473 l
-2556 1469 l
-2560 1461 l
-2560 1457 l
-2556 1448 l
-2544 1444 l
-2531 1444 l
-2519 1448 l
-2514 1457 l
-S
-2636 1490 m
-2627 1498 l
-2619 1503 l
-2606 1503 l
-2598 1498 l
-2590 1490 l
-2585 1478 l
-2585 1469 l
-2590 1457 l
-2598 1448 l
-2606 1444 l
-2619 1444 l
-2627 1448 l
-2636 1457 l
-S
-2661 1478 m
-2711 1478 l
-2711 1486 l
-2707 1494 l
-2702 1498 l
-2694 1503 l
-2681 1503 l
-2673 1498 l
-2665 1490 l
-2661 1478 l
-2661 1469 l
-2665 1457 l
-2673 1448 l
-2681 1444 l
-2694 1444 l
-2702 1448 l
-2711 1457 l
-S
-2740 1503 m
-2740 1444 l
-S
-2740 1486 m
-2752 1498 l
-2761 1503 l
-2773 1503 l
-2782 1498 l
-2786 1486 l
-2786 1444 l
-S
-2861 1490 m
-2857 1498 l
-2844 1503 l
-2832 1503 l
-2819 1498 l
-2815 1490 l
-2819 1482 l
-2828 1478 l
-2849 1473 l
-2857 1469 l
-2861 1461 l
-2861 1457 l
-2857 1448 l
-2844 1444 l
-2832 1444 l
-2819 1448 l
-2815 1457 l
-S
-2886 1532 m
-2890 1528 l
-2894 1532 l
-2890 1536 l
-2886 1532 l
-S
-2890 1503 m
-2890 1444 l
-S
-2940 1503 m
-2932 1498 l
-2924 1490 l
-2920 1478 l
-2920 1469 l
-2924 1457 l
-2932 1448 l
-2940 1444 l
-2953 1444 l
-2961 1448 l
-2970 1457 l
-2974 1469 l
-2974 1478 l
-2970 1490 l
-2961 1498 l
-2953 1503 l
-2940 1503 l
-S
-3003 1503 m
-3003 1444 l
-S
-3003 1486 m
-3016 1498 l
-3024 1503 l
-3036 1503 l
-3045 1498 l
-3049 1486 l
-3049 1444 l
-S
-1 g
-Y
-285 3592.2 m
-160 3592 l
-160 4306 l
-285 4306 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-181 3613 m
-268 3613 l
-S
-181 3613 m
-181 3642 l
-185 3655 l
-193 3663 l
-201 3667 l
-214 3672 l
-235 3672 l
-247 3667 l
-256 3663 l
-264 3655 l
-268 3642 l
-268 3613 l
-S
-235 3697 m
-235 3747 l
-227 3747 l
-218 3743 l
-214 3738 l
-210 3730 l
-210 3718 l
-214 3709 l
-222 3701 l
-235 3697 l
-243 3697 l
-256 3701 l
-264 3709 l
-268 3718 l
-268 3730 l
-264 3738 l
-256 3747 l
-S
-222 3822 m
-214 3814 l
-210 3805 l
-210 3793 l
-214 3784 l
-222 3776 l
-235 3772 l
-243 3772 l
-256 3776 l
-264 3784 l
-268 3793 l
-268 3805 l
-264 3814 l
-256 3822 l
-S
-181 3851 m
-268 3851 l
-S
-181 3880 m
-185 3885 l
-181 3889 l
-176 3885 l
-181 3880 l
-S
-210 3885 m
-268 3885 l
-S
-210 3918 m
-268 3918 l
-S
-227 3918 m
-214 3931 l
-210 3939 l
-210 3951 l
-214 3960 l
-227 3964 l
-268 3964 l
-S
-210 4043 m
-268 4043 l
-S
-222 4043 m
-214 4035 l
-210 4027 l
-210 4014 l
-214 4006 l
-222 3997 l
-235 3993 l
-243 3993 l
-256 3997 l
-264 4006 l
-268 4014 l
-268 4027 l
-264 4035 l
-256 4043 l
-S
-181 4081 m
-252 4081 l
-264 4085 l
-268 4093 l
-268 4102 l
-S
-210 4068 m
-210 4098 l
-S
-181 4123 m
-185 4127 l
-181 4131 l
-176 4127 l
-181 4123 l
-S
-210 4127 m
-268 4127 l
-S
-210 4177 m
-214 4169 l
-222 4160 l
-235 4156 l
-243 4156 l
-256 4160 l
-264 4169 l
-268 4177 l
-268 4189 l
-264 4198 l
-256 4206 l
-243 4210 l
-235 4210 l
-222 4206 l
-214 4198 l
-210 4189 l
-210 4177 l
-S
-210 4240 m
-268 4240 l
-S
-227 4240 m
-214 4252 l
-210 4261 l
-210 4273 l
-214 4281 l
-227 4286 l
-268 4286 l
-S
-1 g
-Y
-924.3 6283 m
-924 6468 l
-4172 6468 l
-4172 6283 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-949 6443 m
-949 6338 l
-S
-949 6443 m
-1015 6443 l
-S
-949 6393 m
-989 6393 l
-S
-1040 6443 m
-1040 6338 l
-S
-1110 6443 m
-1040 6373 l
-S
-1065 6398 m
-1110 6338 l
-S
-1200 6443 m
-1150 6443 l
-1145 6398 l
-1150 6403 l
-1165 6408 l
-1180 6408 l
-1195 6403 l
-1205 6393 l
-1210 6378 l
-1210 6368 l
-1205 6353 l
-1195 6343 l
-1180 6338 l
-1165 6338 l
-1150 6343 l
-1145 6348 l
-1140 6358 l
-S
-1380 6393 m
-1370 6403 l
-1360 6408 l
-1345 6408 l
-1335 6403 l
-1325 6393 l
-1320 6378 l
-1320 6368 l
-1325 6353 l
-1335 6343 l
-1345 6338 l
-1360 6338 l
-1370 6343 l
-1380 6353 l
-S
-1436 6408 m
-1426 6403 l
-1415 6393 l
-1410 6378 l
-1410 6368 l
-1415 6353 l
-1426 6343 l
-1436 6338 l
-1451 6338 l
-1461 6343 l
-1471 6353 l
-1476 6368 l
-1476 6378 l
-1471 6393 l
-1461 6403 l
-1451 6408 l
-1436 6408 l
-S
-1531 6408 m
-1521 6403 l
-1511 6393 l
-1506 6378 l
-1506 6368 l
-1511 6353 l
-1521 6343 l
-1531 6338 l
-1546 6338 l
-1556 6343 l
-1566 6353 l
-1571 6368 l
-1571 6378 l
-1566 6393 l
-1556 6403 l
-1546 6408 l
-1531 6408 l
-S
-1606 6408 m
-1606 6338 l
-S
-1606 6378 m
-1611 6393 l
-1621 6403 l
-1631 6408 l
-1646 6408 l
-S
-1726 6443 m
-1726 6338 l
-S
-1726 6393 m
-1716 6403 l
-1706 6408 l
-1691 6408 l
-1681 6403 l
-1671 6393 l
-1666 6378 l
-1666 6368 l
-1671 6353 l
-1681 6343 l
-1691 6338 l
-1706 6338 l
-1716 6343 l
-1726 6353 l
-S
-1761 6443 m
-1766 6438 l
-1771 6443 l
-1766 6448 l
-1761 6443 l
-S
-1766 6408 m
-1766 6338 l
-S
-1806 6408 m
-1806 6338 l
-S
-1806 6388 m
-1821 6403 l
-1831 6408 l
-1847 6408 l
-1857 6403 l
-1862 6388 l
-1862 6338 l
-S
-1957 6408 m
-1957 6338 l
-S
-1957 6393 m
-1947 6403 l
-1937 6408 l
-1922 6408 l
-1912 6403 l
-1902 6393 l
-1897 6378 l
-1897 6368 l
-1902 6353 l
-1912 6343 l
-1922 6338 l
-1937 6338 l
-1947 6343 l
-1957 6353 l
-S
-2002 6443 m
-2002 6358 l
-2007 6343 l
-2017 6338 l
-2027 6338 l
-S
-1987 6408 m
-2022 6408 l
-S
-2052 6378 m
-2112 6378 l
-2112 6388 l
-2107 6398 l
-2102 6403 l
-2092 6408 l
-2077 6408 l
-2067 6403 l
-2057 6393 l
-2052 6378 l
-2052 6368 l
-2057 6353 l
-2067 6343 l
-2077 6338 l
-2092 6338 l
-2102 6343 l
-2112 6353 l
-S
-2197 6393 m
-2192 6403 l
-2177 6408 l
-2162 6408 l
-2147 6403 l
-2142 6393 l
-2147 6383 l
-2157 6378 l
-2182 6373 l
-2192 6368 l
-2197 6358 l
-2197 6353 l
-2192 6343 l
-2177 6338 l
-2162 6338 l
-2147 6343 l
-2142 6353 l
-S
-2237 6408 m
-2232 6403 l
-2237 6398 l
-2242 6403 l
-2237 6408 l
-S
-2242 6343 m
-2237 6338 l
-2232 6343 l
-2237 6348 l
-2242 6343 l
-2242 6333 l
-2237 6323 l
-2232 6318 l
-S
-2363 6408 m
-2363 6338 l
-S
-2363 6388 m
-2378 6403 l
-2388 6408 l
-2403 6408 l
-2413 6403 l
-2418 6388 l
-2418 6338 l
-S
-2418 6388 m
-2433 6403 l
-2443 6408 l
-2458 6408 l
-2468 6403 l
-2473 6388 l
-2473 6338 l
-S
-2508 6378 m
-2568 6378 l
-2568 6388 l
-2563 6398 l
-2558 6403 l
-2548 6408 l
-2533 6408 l
-2523 6403 l
-2513 6393 l
-2508 6378 l
-2508 6368 l
-2513 6353 l
-2523 6343 l
-2533 6338 l
-2548 6338 l
-2558 6343 l
-2568 6353 l
-S
-2658 6408 m
-2658 6338 l
-S
-2658 6393 m
-2648 6403 l
-2638 6408 l
-2623 6408 l
-2613 6403 l
-2603 6393 l
-2598 6378 l
-2598 6368 l
-2603 6353 l
-2613 6343 l
-2623 6338 l
-2638 6338 l
-2648 6343 l
-2658 6353 l
-S
-2699 6408 m
-2699 6338 l
-S
-2699 6388 m
-2714 6403 l
-2724 6408 l
-2739 6408 l
-2749 6403 l
-2754 6388 l
-2754 6338 l
-S
-2869 6378 m
-2929 6378 l
-2929 6388 l
-2924 6398 l
-2919 6403 l
-2909 6408 l
-2894 6408 l
-2884 6403 l
-2874 6393 l
-2869 6378 l
-2869 6368 l
-2874 6353 l
-2884 6343 l
-2894 6338 l
-2909 6338 l
-2919 6343 l
-2929 6353 l
-S
-3019 6408 m
-3019 6303 l
-S
-3019 6393 m
-3009 6403 l
-2999 6408 l
-2984 6408 l
-2974 6403 l
-2964 6393 l
-2959 6378 l
-2959 6368 l
-2964 6353 l
-2974 6343 l
-2984 6338 l
-2999 6338 l
-3009 6343 l
-3019 6353 l
-S
-3059 6408 m
-3059 6358 l
-3064 6343 l
-3074 6338 l
-3090 6338 l
-3100 6343 l
-3115 6358 l
-S
-3115 6408 m
-3115 6338 l
-S
-3150 6443 m
-3155 6438 l
-3160 6443 l
-3155 6448 l
-3150 6443 l
-S
-3155 6408 m
-3155 6338 l
-S
-3195 6408 m
-3195 6338 l
-S
-3195 6388 m
-3210 6403 l
-3220 6408 l
-3235 6408 l
-3245 6403 l
-3250 6388 l
-3250 6338 l
-S
-3310 6408 m
-3300 6403 l
-3290 6393 l
-3285 6378 l
-3285 6368 l
-3290 6353 l
-3300 6343 l
-3310 6338 l
-3325 6338 l
-3335 6343 l
-3345 6353 l
-3350 6368 l
-3350 6378 l
-3345 6393 l
-3335 6403 l
-3325 6408 l
-3310 6408 l
-S
-3380 6408 m
-3435 6338 l
-S
-3435 6408 m
-3380 6338 l
-S
-3591 6443 m
-3591 6363 l
-3586 6348 l
-3581 6343 l
-3571 6338 l
-3561 6338 l
-3551 6343 l
-3546 6348 l
-3541 6363 l
-3541 6373 l
-S
-3631 6418 m
-3631 6423 l
-3636 6433 l
-3641 6438 l
-3651 6443 l
-3671 6443 l
-3681 6438 l
-3686 6433 l
-3691 6423 l
-3691 6413 l
-3686 6403 l
-3676 6388 l
-3626 6338 l
-3696 6338 l
-S
-3756 6443 m
-3741 6438 l
-3731 6423 l
-3726 6398 l
-3726 6383 l
-3731 6358 l
-3741 6343 l
-3756 6338 l
-3766 6338 l
-3781 6343 l
-3791 6358 l
-3796 6383 l
-3796 6398 l
-3791 6423 l
-3781 6438 l
-3766 6443 l
-3756 6443 l
-S
-3856 6443 m
-3841 6438 l
-3831 6423 l
-3826 6398 l
-3826 6383 l
-3831 6358 l
-3841 6343 l
-3856 6338 l
-3866 6338 l
-3881 6343 l
-3891 6358 l
-3896 6383 l
-3896 6398 l
-3891 6423 l
-3881 6438 l
-3866 6443 l
-3856 6443 l
-S
-3957 6443 m
-3942 6438 l
-3932 6423 l
-3927 6398 l
-3927 6383 l
-3932 6358 l
-3942 6343 l
-3957 6338 l
-3967 6338 l
-3982 6343 l
-3992 6358 l
-3997 6383 l
-3997 6398 l
-3992 6423 l
-3982 6438 l
-3967 6443 l
-3957 6443 l
-S
-4037 6348 m
-4032 6343 l
-4037 6338 l
-4042 6343 l
-4037 6348 l
-S
-4107 6443 m
-4092 6438 l
-4082 6423 l
-4077 6398 l
-4077 6383 l
-4082 6358 l
-4092 6343 l
-4107 6338 l
-4117 6338 l
-4132 6343 l
-4142 6358 l
-4147 6383 l
-4147 6398 l
-4142 6423 l
-4132 6438 l
-4117 6443 l
-4107 6443 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 263 3431 a(Figure)31 b(9:)41 b(An)30 b(example)h(of)g(a)g
-(displa)m(y)m(ed)g(image)g(with)f(a)h(co)s(ordinate)g(grid)f(plotted)i
-(o)m(v)m(er)f(it.)0 3789 y Fw(3.16)112 b(.)19 b(.)g(.)g(Displa)m(y)38
-b(a)g(Graphical)h(Co)s(ordinate)f(Grid)0 4002 y FF(A)i(common)g
-(requiremen)m(t)g(when)f(displa)m(ying)h(image)h(data)f(is)g(to)h(plot)
-f(an)g(asso)s(ciated)h(co)s(ordinate)g(grid)0 4115 y(\()p
-Fx(e.g.)27 b FF(Figure)h(9\))h(o)m(v)m(er)f(the)g(displa)m(y)m(ed)g
-(image.)81 b(The)27 b(use)g(of)h(AST)e(in)i(suc)m(h)f(circumstances)h
-(is)g(indep)s(enden)m(t)0 4228 y(of)33 b(the)g(underlying)e(graphics)i
-(system,)h(so)f(starting)g(up)f(the)h(graphics)f(system,)i(setting)g
-(up)e(a)h(co)s(ordinate)0 4341 y(system,)j(displa)m(ying)f(the)g
-(image,)i(and)d(closing)h(do)m(wn)g(afterw)m(ards)f(can)h(all)g(b)s(e)f
-(done)h(using)f(the)g(graphics)0 4454 y(functions)c(y)m(ou)h(w)m(ould)f
-(normally)g(use.)0 4608 y(Ho)m(w)m(ev)m(er,)44 b(displa)m(ying)39
-b(an)h(image)g(at)g(a)g(precise)f(lo)s(cation)i(can)f(b)s(e)e(a)i
-(little)h(\014ddly)d(with)h(some)g(graphics)0 4721 y(systems,)29
-b(and)f(ob)m(viously)h(the)g(grid)f(dra)m(wn)g(b)m(y)g(AST)g(will)h
-(not)g(b)s(e)f(accurately)i(registered)f(with)f(the)h(image)0
-4834 y(unless)c(this)h(is)g(done)f(correctly)-8 b(.)41
-b(In)25 b(the)h(follo)m(wing)i(template,)g(w)m(e)e(therefore)h
-(illustrate)g(b)s(oth)e(steps,)h(basing)0 4947 y(the)k(image)i(displa)m
-(y)e(on)g(the)h(C)f(in)m(terface)h(to)g(the)g(PGPLOT)e(graphics)h(pac)m
-(k)-5 b(age.)2850 4914 y Fv(7)2932 4947 y FF(Plotting)32
-b(a)f(co)s(ordinate)0 5060 y(grid)41 b(with)g(AST)g(then)g(b)s(ecomes)h
-(a)f(relativ)m(ely)j(minor)d(part)g(of)h(what)f(is)g(almost)i(a)f
-(complete)g(graphics)0 5173 y(program.)0 5327 y(Once)36
-b(again,)j(w)m(e)e(assume)f(that)h(a)g(p)s(oin)m(ter,)h(\\w)m(csinfo",)
-h(to)e(a)g(suitable)g(F)-8 b(rameSet)37 b(asso)s(ciated)h(with)e(the)0
-5440 y(image)c(has)e(already)h(b)s(een)e(obtained)i(\()p
-Fu(x)p FF(3.4\).)p 0 5516 1512 4 v 104 5570 a Fs(7)138
-5602 y Fr(An)37 b(in)n(terface)i(is)g(pro)n(vided)e(with)h(AST)g(that)g
-(allo)n(ws)i(it)e(to)g(use)g(PGPLOT)h(\(SUN/15\))f(for)g(its)h
-(graphics,)j(although)0 5693 y(in)n(terfaces)27 b(to)f(other)g
-(graphics)g(systems)g(ma)n(y)f(also)i(b)r(e)f(written.)p
-eop end
-%%Page: 28 38
-TeXDict begin 28 37 bop 0 52 a FF(28)3035 b Fy(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)227 351 y Ft(#include)41 b("cpgplot.h")227
-451 y(AstPlot)g(*plot;)227 551 y(const)h(float)f(*data;)227
-650 y(float)h(hi,)g(lo,)g(scale,)g(x1,)g(x2,)g(xleft,)f(xright,)g
-(xscale;)227 750 y(float)h(y1,)g(y2,)g(ybottom,)f(yscale,)f(ytop;)227
-849 y(int)j(nx,)f(ny;)227 1049 y(...)227 1248 y(/*)h(Access)e(the)h
-(image)g(data,)g(which)f(we)i(assume)e(has)h(dimension)e(sizes)i("nx")g
-(and)358 1348 y("ny",)g(and)g(will)g(be)h(accessed)d(via)i(the)h
-("data")e(pointer.)84 b(Also)41 b(derive)358 1447 y(limits)g(for)h
-(scaling)f(it,)i(which)e(we)i(assign)e(to)i(the)f(variables)e("hi")i
-(and)358 1547 y("lo".)g(*/)227 1646 y(<this)g(stage)f(depends)g(on)i
-(your)f(data)g(system,)e(so)j(is)g(not)f(shown>)227 1846
-y(/*)h(Open)f(PGPLOT)f(using)h(the)g(device)f(given)h(by)g(environment)
-d(variable)358 1945 y(PGPLOT_DEV)g(and)k(check)e(for)i(success.)d(*/)
-227 2045 y(if\()j(cpgbeg\()d(0,)j(")g(",)g(1,)g(1)g(\))g(==)g(1)g(\))g
-({)227 2244 y(/*)g(Clear)f(the)g(screen)f(and)h(ensure)f(equal)h
-(scales)f(on)i(both)f(axes.)f(*/)358 2344 y(cpgpage\(\);)358
-2443 y(cpgwnad\()f(0.0f,)i(1.0f,)f(0.0f,)h(1.0f)g(\);)227
-2643 y(/*)h(Obtain)e(the)h(extent)g(of)g(the)h(plotting)d(area)i(\(not)
-g(strictly)e(necessary)g(for)358 2742 y(PGPLOT,)h(but)h(possibly)e(for)
-j(other)e(graphics)f(systems\).)g(From)i(this,)g(derive)358
-2842 y(the)g(display)f(scale)h(in)g(graphics)f(units)g(per)h(pixel)g
-(so)h(that)f(the)g(image)358 2942 y(will)g(fit)g(within)f(the)i
-(display)d(area.)i(*/)358 3041 y(cpgqwin\()e(&x1,)i(&x2,)g(&y1,)g(&y2)g
-(\);)358 3141 y(xscale)f(=)i(\()g(x2)g(-)g(x1)g(\))g(/)h(nx;)358
-3240 y(yscale)d(=)i(\()g(y2)g(-)g(y1)g(\))g(/)h(ny;)358
-3340 y(scale)e(=)h(\()g(xscale)e(<)i(yscale)e(\))i(?)h(xscale)d(:)i
-(yscale;)227 3539 y(/*)g(Calculate)d(the)i(extent)f(of)i(the)f(area)g
-(in)h(graphics)d(units)i(that)g(the)g(image)358 3639
-y(will)g(occupy,)f(so)h(as)h(to)g(centre)e(it)i(within)e(the)h(display)
-f(area.)g(*/)358 3739 y(xleft)129 b(=)43 b(0.5f)f(*)h(\()g(x1)g(+)g(x2)
-g(-)g(nx)g(*)g(scale)e(\);)358 3838 y(xright)85 b(=)43
-b(0.5f)f(*)h(\()g(x1)g(+)g(x2)g(+)g(nx)g(*)g(scale)e(\);)358
-3938 y(ybottom)g(=)i(0.5f)f(*)h(\()g(y1)g(+)g(y2)g(-)g(ny)g(*)g(scale)e
-(\);)358 4037 y(ytop)173 b(=)43 b(0.5f)f(*)h(\()g(y1)g(+)g(y2)g(+)g(ny)
-g(*)g(scale)e(\);)227 4237 y(/*)i(Set)f(up)h(a)g(PGPLOT)e(coordinate)f
-(transformation)e(matrix)j(and)h(display)f(the)358 4336
-y(image)h(data)f(as)i(a)g(grey)f(scale)g(map)g(\(these)f(details)g(are)
-h(specific)f(to)358 4436 y(PGPLOT\).)f(*/)358 4536 y({)489
-4635 y(float)h(tr[])h(=)h({)h(xleft)d(-)i(0.5f)f(*)h(scale,)e(scale,)h
-(0.0f,)1143 4735 y(ybottom)e(-)j(0.5f)f(*)i(scale,)d(0.0f,)g(scale)h
-(};)489 4834 y(cpggray\()e(data,)i(nx,)g(ny,)g(1,)h(nx,)f(1,)h(ny,)f
-(hi,)h(lo,)f(tr)h(\);)358 4934 y(})227 5133 y(/*)g(BEGINNING)d(OF)j
-(AST)f(BIT)g(*/)227 5233 y(/*)h(================)o(===)o(=)37
-b(*/)227 5333 y(/*)43 b(Store)f(the)g(locations)e(of)j(the)f(bottom)f
-(left)h(and)g(top)h(right)e(corners)g(of)i(the)358 5432
-y(region)e(used)h(to)h(display)e(the)h(image,)f(in)i(graphics)d
-(coordinates.)f(*/)358 5532 y({)489 5631 y(float)i(gbox[])g(=)j({)f
-(xleft,)e(ybottom,)f(xright,)h(ytop)h(};)p eop end
-%%Page: 29 39
-TeXDict begin 29 38 bop 0 52 a Fy(3.17)93 b(.)15 b(.)g(.)h(Switc)m(h)30
-b(to)h(Plot)h(a)e(Di\013eren)m(t)i(Celestial)g(Co)s(ordinate)f(Grid)
-1232 b FF(29)227 451 y Ft(/*)43 b(Similarly,)c(store)j(the)g(locations)
-e(of)j(the)f(image's)f(bottom)g(left)h(and)g(top)358
-551 y(right)g(corners,)e(in)j(pixel)e(coordinates)e(--)k(with)f(the)g
-(first)g(pixel)f(centred)358 650 y(at)i(\(1,1\).)e(*/)489
-750 y(double)g(pbox[])g(=)i({)g(0.5,)f(0.5,)g(nx)h(+)g(0.5,)f(ny)h(+)g
-(0.5)f(};)227 949 y(/*)h(Create)e(a)i(Plot,)f(based)f(on)i(the)f
-(FrameSet)f(associated)e(with)j(the)358 1049 y(image.)f(This)h
-(attaches)e(the)j(Plot)f(to)g(the)h(graphics)d(surface)h(so)h(that)g
-(it)358 1148 y(matches)f(the)h(displayed)e(image.)h(Specify)g(that)h(a)
-h(complete)d(set)i(of)h(grid)358 1248 y(lines)f(should)f(be)h(drawn)g
-(\(rather)f(than)h(just)f(coordinate)f(axes\).)h(*/)489
-1348 y(plot)h(=)h(astPlot\()d(wcsinfo,)g(gbox,)i(pbox,)f("Grid=1")g
-(\);)358 1447 y(})227 1646 y(/*)i(Optionally,)c(we)k(can)f(now)h(set)f
-(other)f(Plot)h(attributes)e(to)j(control)d(the)358 1746
-y(appearance)f(of)k(the)g(grid.)e(The)h(values)g(assigned)e(here)i(use)
-g(the)358 1846 y(colour/font)d(indices)i(defined)f(by)j(the)g
-(underlying)c(graphics)h(system.)h(*/)358 1945 y(astSet\()g(plot,)g
-("Colour\(grid\)=2,)c(Font\(textlab\)=3")g(\);)227 2145
-y(/*)43 b(Use)f(the)h(Plot)f(to)g(draw)g(the)h(coordinate)c(grid.)j(*/)
-358 2244 y(astGrid\()e(plot)i(\);)358 2443 y(<maybe)f(some)h(more)g
-(AST)g(graphics)f(here>)227 2643 y(/*)i(Annul)f(the)g(Plot)g(when)g
-(finished)e(\(or)i(use)h(the)f(astBegin/astEnd)37 b(technique)358
-2742 y(shown)42 b(earlier\).)d(*/)358 2842 y(plot)j(=)h(astAnnul\()d
-(plot)i(\);)227 3041 y(/*)h(END)f(OF)h(AST)f(BIT)h(*/)227
-3141 y(/*)g(==============)38 b(*/)227 3340 y(/*)43 b(Close)f(down)f
-(the)i(graphics)d(system.)h(*/)358 3440 y(cpgend\(\);)227
-3539 y(})0 3779 y FF(Note)27 b(that)g(once)g(y)m(ou)f(ha)m(v)m(e)h(set)
-g(up)d(a)j(Plot)g(whic)m(h)e(is)h(aligned)h(with)f(a)g(displa)m(y)m(ed)
-h(image,)h(y)m(ou)e(ma)m(y)h(also)g(use)0 3892 y(it)36
-b(to)g(generate)h(further)d(graphical)i(output)e(of)i(y)m(our)f(o)m
-(wn,)i(sp)s(eci\014ed)d(in)h(the)h(image's)g(w)m(orld)g(co)s(ordinate)0
-4005 y(system)h(\(suc)m(h)f(as)h(mark)m(ers)g(to)g(represen)m(t)g
-(astronomical)h(ob)5 b(jects,)39 b(annotation,)h Fx(etc.)p
-FF(\).)59 b(There)36 b(is)h(also)g(a)0 4118 y(range)32
-b(of)g(Plot)h(attributes)f(whic)m(h)g(giv)m(es)h(con)m(trol)g(o)m(v)m
-(er)g(most)f(asp)s(ects)g(of)g(the)g(output's)g(app)s(earance.)45
-b(F)-8 b(or)0 4231 y(details)31 b(of)g(the)f(facilities)j(a)m(v)-5
-b(ailable,)33 b(see)e Fu(x)p FF(21)h(and)d(the)i(description)f(of)h
-(the)f(Plot)i(class)f(in)f(App)s(endix)f(D.)0 4388 y(F)-8
-b(or)24 b(details)h(of)f(ho)m(w)g(to)g(build)f(a)h(graphics)g(program)f
-(whic)m(h)h(uses)f(PGPLOT,)g(see)h Fu(x)p FF(3.3)h(and)f(the)f
-(description)0 4501 y(of)31 b(the)f(ast)p Fq(_)p FF(link)h(command)f
-(in)g(App)s(endix)f(E.)0 4785 y Fw(3.17)112 b(.)19 b(.)g(.)g(Switc)m(h)
-37 b(to)g(Plot)g(a)h(Di\013eren)m(t)f(Celestial)h(Co)s(ordinate)h(Grid)
-0 5001 y FF(Once)32 b(y)m(ou)f(ha)m(v)m(e)i(set)f(up)f(a)h(Plot)g(to)h
-(dra)m(w)e(a)h(co)s(ordinate)g(grid)g(\()p Fu(x)p FF(3.16\),)i(it)e(is)
-g(a)g(simple)g(matter)g(to)g(c)m(hange)0 5114 y(things)39
-b(so)g(that)h(the)g(grid)e(represen)m(ts)i(a)f(di\013eren)m(t)h
-(celestial)h(co)s(ordinate)f(system.)68 b(F)-8 b(or)40
-b(example,)i(after)0 5227 y(creating)32 b(the)e(Plot)i(with)e(astPlot,)
-i(y)m(ou)e(could)h(use:)227 5453 y Ft(astSet\()41 b(plot,)g
-("System=Galactic")c(\);)0 5693 y FF(or:)p eop end
-%%Page: 30 40
-TeXDict begin 30 39 bop 0 52 a FF(30)3035 b Fy(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)227 351 y Ft(astSet\()41 b(plot,)g("System=FK5,)e
-(Equinox=J2010")f(\);)0 616 y FF(and)43 b(an)m(y)i(axes)g(and/or)f
-(grid)f(dra)m(wn)h(subsequen)m(tly)f(w)m(ould)h(represen)m(t)g(the)g
-(new)g(celestial)j(co)s(ordinate)0 729 y(system)37 b(y)m(ou)g(sp)s
-(eci\014ed.)60 b(Note,)40 b(ho)m(w)m(ev)m(er,)h(that)c(this)g(will)g
-(only)g(w)m(ork)h(if)e(the)i(original)g(grid)e(represen)m(ted)0
-842 y(celestial)g(co)s(ordinates)e(of)g(some)g(kind)f(\(see)h
-Fu(x)p FF(3.8)h(for)f(ho)m(w)f(to)i(determine)e(if)h(this)f(is)h(the)g
-(case)3314 809 y Fv(8)3354 842 y FF(\).)51 b(If)33 b(it)h(did)0
-955 y(not,)d(y)m(ou)g(will)f(get)i(an)e(error)g(message.)0
-1128 y(F)-8 b(or)37 b(more)g(information)f(ab)s(out)h(the)f(celestial)j
-(co)s(ordinate)e(systems)g(a)m(v)-5 b(ailable,)40 b(see)d(the)g
-(descriptions)f(of)0 1241 y(the)31 b(System,)f(Equino)m(x)g(and)g(Ep)s
-(o)s(c)m(h)g(attributes)h(in)f(App)s(endix)e(C.)0 1571
-y Fw(3.18)112 b(.)19 b(.)g(.)g(Giv)m(e)38 b(a)f(User)h(Con)m(trol)f(Ov)
-m(er)h(the)f(App)s(earance)i(of)e(a)h(Plot)0 1809 y FF(The)21
-b(idea)h(of)g(using)f(a)h(Plot's)g(attributes)g(to)h(con)m(trol)f(the)g
-(app)s(earance)g(of)g(the)f(graphical)i(output)e(it)h(pro)s(duces)0
-1922 y(\()p Fu(x)p FF(3.16)36 b(and)c Fu(x)p FF(3.17\))k(can)e(easily)g
-(b)s(e)f(extended)g(to)h(allo)m(w)h(the)f(user)e(of)i(a)f(program)h
-(complete)g(con)m(trol)h(o)m(v)m(er)0 2035 y(suc)m(h)30
-b(matters.)0 2208 y(F)-8 b(or)39 b(instance,)i(if)d(the)g(\014le)g
-(\\plot.con\014g")i(con)m(tains)f(a)g(series)f(of)g(plotting)h(options)
-g(in)f(the)g(form)f(of)i(Plot)0 2321 y(attribute)c(assignmen)m(ts)f
-(\(see)h(b)s(elo)m(w)f(for)g(an)g(example\),)i(then)e(w)m(e)g(could)g
-(create)h(a)g(Plot)g(and)e(implemen)m(t)0 2434 y(these)e(assignmen)m
-(ts)g(b)s(efore)f(pro)s(ducing)f(the)h(graphical)i(output)e(as)g(follo)
-m(ws:)227 2716 y Ft(#include)41 b(<stdio.h>)227 2816
-y(#define)g(MAXCHARS)f(120)227 2915 y(FILE)i(*stream;)227
-3015 y(char)g(line[)g(MAXCHARS)e(+)j(2)g(];)227 3115
-y(int)g(base;)227 3314 y(...)227 3513 y(/*)g(Create)e(a)i(Plot)f(and)h
-(define)e(the)h(default)f(appearance)e(of)k(the)f(graphical)358
-3613 y(output)f(it)i(will)f(produce.)e(*/)227 3712 y(plot)i(=)h
-(astPlot\()e(wcsinfo,)f(gbox,)h(pbox,)925 3812 y("Grid=1,)f
-(Colour\(grid\)=2,)d(Font\(textlab\)=3")g(\);)227 4011
-y(/*)43 b(Obtain)e(the)h(value)g(of)h(any)f(Plot)g(attributes)d(we)k
-(want)f(to)h(preserve.)d(*/)227 4111 y(base)i(=)h(astGetI\()e(plot,)g
-("Base")g(\);)227 4310 y(/*)i(Open)f(the)g(plot)g(configuration)c
-(file,)k(if)h(it)f(exists.)f(Read)h(each)g(line)g(of)358
-4410 y(text)g(and)g(use)h(it)f(to)h(set)g(new)f(Plot)g(attribute)e
-(values.)g(Close)i(the)g(file)358 4509 y(when)g(done.)f(*/)227
-4609 y(if)i(\()g(stream)e(=)i(fopen\()f("plot.config",)37
-b("r")43 b(\))g(\))g({)358 4709 y(while)f(\()h(fgets\()e(line,)g
-(MAXCHARS)g(+)i(2,)g(stream)e(\))i(\))g(astSet\()e(plot,)g("\045s",)h
-(line)g(\);)358 4808 y(close\()f(stream)g(\);)227 4908
-y(})227 5107 y(/*)i(Restore)e(any)h(attribute)e(values)h(we)i(are)f
-(preserving.)d(*/)227 5207 y(astSetI\()i(plot,)g("Base",)g(base)h(\);)
-227 5406 y(/*)h(Produce)e(the)h(graphical)e(output)h(\(e.g.\).)g(*/)227
-5506 y(astGrid\()g(plot)g(\);)p 0 5607 1512 4 v 104 5661
-a Fs(8)138 5693 y Fr(Note)26 b(that)f(the)h(metho)r(ds)f(applied)h(to)g
-(a)g(F)-6 b(rameSet)26 b(ma)n(y)f(b)r(e)g(used)h(equally)f(w)n(ell)i
-(with)f(a)g(Plot.)p eop end
-%%Page: 31 41
-TeXDict begin 31 40 bop 0 52 a Fy(3.18)93 b(.)15 b(.)g(.)h(Giv)m(e)31
-b(a)g(User)g(Con)m(trol)g(Ov)m(er)f(the)h(App)s(earance)f(of)g(a)h
-(Plot)1260 b FF(31)0 351 y(Notice)41 b(that)f(w)m(e)f(tak)m(e)i(care)f
-(that)f(the)h(Plot's)g(Base)g(attribute)f(is)h(preserv)m(ed)e(so)i
-(that)f(the)g(user)g(cannot)0 464 y(c)m(hange)31 b(it.)41
-b(This)29 b(is)h(b)s(ecause)g(graphical)h(output)e(will)i(not)f(b)s(e)f
-(pro)s(duced)g(successfully)g(if)h(the)g(base)h(F)-8
-b(rame)0 577 y(do)s(es)30 b(not)h(describ)s(e)e(the)i(plotting)g
-(surface)g(to)g(whic)m(h)f(w)m(e)h(attac)m(hed)h(the)f(Plot)g(when)e(w)
-m(e)i(created)g(it.)0 740 y(The)21 b(arrangemen)m(t)i(sho)m(wn)d(ab)s
-(o)m(v)m(e)j(allo)m(ws)g(the)f(con)m(ten)m(ts)h(of)f(the)g
-(\\plot.con\014g")h(\014le)f(to)g(con)m(trol)h(most)f(asp)s(ects)0
-853 y(of)33 b(the)f(graphical)i(output)e(pro)s(duced)f(\(including)h
-(the)h(co)s(ordinate)g(system)g(used;)g(the)f(colour,)i(line)f(st)m
-(yle,)0 966 y(thic)m(kness)22 b(and)f(fon)m(t)i(used)e(for)g(eac)m(h)i
-(comp)s(onen)m(t;)i(the)d(p)s(ositioning)g(of)g(axes)g(and)g(tic)m(k)h
-(marks;)h(the)e(precision,)0 1079 y(format)31 b(and)e(p)s(ositioning)i
-(of)g(lab)s(els;)f Fx(etc.)p FF(\))41 b Fx(via)30 b FF(assignmen)m(ts)h
-(of)g(the)g(form:)227 1328 y Ft(System=Galactic,)37 b(Equinox)k(=)i
-(2001)227 1427 y(Border)e(=)j(1,)e(Colour\()f(border)g(\))i(=)g(1)227
-1527 y(Colour\()e(grid)h(\))h(=)g(2)227 1626 y(DrawAxes)e(=)i(1)227
-1726 y(Colour\()e(axes)h(\))h(=)g(3)227 1826 y(Digits)e(=)j(8)227
-1925 y(Labelling)c(=)j(Interior)0 2188 y FF(F)-8 b(or)32
-b(a)g(more)f(sophisticated)h(in)m(terface,)i(y)m(ou)d(could)h(ob)m
-(viously)g(p)s(erform)d(pre-pro)s(cessing)i(on)g(this)g(input|)0
-2301 y(for)38 b(example,)j(to)d(translate)h(w)m(ords)f(lik)m(e)h
-(\\red",)i(\\green")e(and)e(\\blue")i(in)m(to)g(colour)f(indices,)i(to)
-f(p)s(ermit)0 2414 y(commen)m(ts)31 b(and)f(blank)g(lines,)h
-Fx(etc.)0 2576 y FF(F)-8 b(or)30 b(a)g(full)f(list)h(of)f(the)h
-(attributes)g(that)g(ma)m(y)g(b)s(e)e(used)h(to)h(con)m(trol)h(the)e
-(app)s(earance)h(of)f(graphical)i(output,)0 2689 y(see)24
-b(the)f(description)g(of)g(the)h(Plot)g(class)g(in)e(App)s(endix)g(D.)
-38 b(F)-8 b(or)24 b(a)g(complete)g(description)g(of)f(eac)m(h)h
-(individual)0 2802 y(attribute)31 b(\()p Fx(e.g.)f FF(those)h(ab)s(o)m
-(v)m(e\),)h(see)f(the)g(attribute's)g(en)m(try)g(in)f(App)s(endix)e(C.)
-p eop end
-%%Page: 32 42
-TeXDict begin 32 41 bop 0 52 a FF(32)3035 b Fy(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)p eop end
-%%Page: 33 43
-TeXDict begin 33 42 bop 3689 52 a FF(33)0 351 y Fz(4)135
-b(An)44 b(AST)g(Ob)7 b(ject)45 b(Primer)0 599 y FF(The)38
-b(AST)h(library)f(deals)i(throughout)e(with)h(en)m(tities)i(called)f
-(Ob)5 b(jects)39 b(and)f(a)i(basic)f(understanding)e(of)0
-712 y(ho)m(w)j(to)i(handle)e(these)g(is)h(needed)f(b)s(efore)g(y)m(ou)h
-(can)f(use)h(the)f(library)g(e\013ectiv)m(ely)-8 b(.)74
-b(If)40 b(y)m(ou)h(are)g(already)0 825 y(familiar)26
-b(with)f(an)h(ob)5 b(ject-orien)m(ted)27 b(language,)h(suc)m(h)d(as)h
-(C++,)g(few)f(of)h(the)f(concepts)i(should)d(seem)i(new)f(to)0
-938 y(y)m(ou.)41 b(Be)30 b(a)m(w)m(are,)h(ho)m(w)m(ev)m(er,)g(that)f
-(AST)f(is)g(designed)g(to)h(b)s(e)f(used)f Fx(via)i FF(fairly)f(con)m
-(v)m(en)m(tional)j(C)d(and)g(F)-8 b(ortran)0 1051 y(in)m(terfaces,)32
-b(so)f(some)f(things)h(ha)m(v)m(e)g(to)g(b)s(e)f(done)g(a)h(little)h
-(di\013eren)m(tly)-8 b(.)0 1209 y(If)24 b(y)m(ou)h(are)g(not)g(already)
-g(familiar)h(with)e(ob)5 b(ject-orien)m(ted)27 b(programming,)e(then)g
-(don't)f(w)m(orry|w)m(e)h(will)g(not)0 1322 y(emphasise)33
-b(this)g(asp)s(ect)h(more)f(than)g(is)g(necessary)h(and)f(will)g(not)h
-(assume)f(an)m(y)g(bac)m(kground)g(kno)m(wledge.)0 1435
-y(Instead,)f(this)f(section)i(concen)m(trates)g(on)f(presen)m(ting)g
-(all)g(the)g(fundamen)m(tal)f(information)h(y)m(ou)g(will)f(need,)0
-1548 y(explaining)22 b(ho)m(w)f(AST)g(Ob)5 b(jects)22
-b(b)s(eha)m(v)m(e)g(and)e(ho)m(w)i(to)g(manipulate)g(them)f(from)g(con)
-m(v)m(en)m(tional)k(C)c(programs.)0 1706 y(If)40 b(y)m(ou)h(lik)m(e)g
-(to)g(read)g(do)s(cumen)m(ts)f(from)g(co)m(v)m(er)i(to)f(co)m(v)m(er,)k
-(then)40 b(y)m(ou)g(can)h(consider)f(this)g(section)i(as)f(an)0
-1819 y(in)m(tro)s(duction)32 b(to)h(the)f(programming)g(tec)m(hniques)h
-(used)e(in)h(the)g(rest)g(of)h(the)f(do)s(cumen)m(t.)46
-b(Otherwise,)32 b(y)m(ou)0 1931 y(ma)m(y)f(prefer)f(to)h(skim)f
-(through)g(it)g(on)h(a)f(\014rst)g(reading)h(and)e(return)h(to)h(it)g
-(later)g(as)g(reference)f(material.)0 2218 y Fw(4.1)112
-b(AST)38 b(Ob)6 b(jects)0 2434 y FF(An)37 b(AST)h(Ob)5
-b(ject)37 b(is)h(an)g(en)m(tit)m(y)i(whic)m(h)d(is)h(used)f(to)i(store)
-f(information)g(and)f(Ob)5 b(jects)38 b(come)h(in)e(v)-5
-b(arious)0 2547 y(kinds,)34 b(called)h Fx(classes,)h
-FF(according)e(to)h(the)f(sort)g(of)g(information)g(they)h(hold.)50
-b(Throughout)33 b(this)h(section,)0 2660 y(w)m(e)i(will)g(mak)m(e)g
-(use)g(of)f(a)h(simple)g(Ob)5 b(ject)35 b(b)s(elonging)h(to)g(the)g
-(\\Zo)s(omMap")g(class)h(to)f(illustrate)h(man)m(y)e(of)0
-2773 y(the)c(basic)f(concepts.)0 2931 y(A)i(Zo)s(omMap)g(is)g(an)g(Ob)5
-b(ject)32 b(that)g(con)m(tains)i(a)e(recip)s(e)g(for)g(con)m(v)m
-(erting)h(co)s(ordinates)g(b)s(et)m(w)m(een)f(t)m(w)m(o)i(h)m(yp)s(o-)0
-3044 y(thetical)e(co)s(ordinate)g(systems.)40 b(It)31
-b(do)s(es)f(this)g(b)m(y)g(m)m(ultiplying)h(all)h(the)e(co)s(ordinate)h
-(v)-5 b(alues)31 b(b)m(y)f(a)h(constan)m(t)0 3157 y(called)40
-b(the)f Fx(Zo)-5 b(om)41 b(factor.)66 b FF(A)39 b(Zo)s(omMap)g(is)f(a)h
-(v)m(ery)g(simple)g(Ob)5 b(ject)39 b(whic)m(h)f(exists)h(mainly)g(for)f
-(use)h(in)0 3270 y(examples.)h(It)27 b(allo)m(ws)i(us)d(to)i
-(illustrate)g(the)f(w)m(a)m(ys)h(in)f(whic)m(h)g(Ob)5
-b(jects)27 b(are)g(manipulated)g(and)g(to)h(in)m(tro)s(duce)0
-3383 y(the)38 b(concept)h(of)e(a)i(Mapping|a)f(recip)s(e)f(for)h(con)m
-(v)m(erting)h(co)s(ordinates|whic)m(h)f(is)g(fundamen)m(tal)g(to)g(the)
-0 3496 y(w)m(a)m(y)31 b(the)g(AST)f(library)g(w)m(orks.)0
-3782 y Fw(4.2)112 b(Ob)6 b(ject)38 b(Creation)g(and)g(P)m(oin)m(ters)0
-3999 y FF(Let)31 b(us)f(\014rst)f(consider)h(ho)m(w)h(to)g(create)h(a)f
-(Zo)s(omMap.)40 b(This)30 b(is)g(done)h(v)m(ery)f(simply)g(as)h(follo)m
-(ws:)227 4229 y Ft(#include)41 b("ast.h")227 4329 y(AstZoomMap)f
-(*zoommap;)227 4528 y(...)227 4727 y(zoommap)h(=)i(astZoomMap\()c(2,)k
-(5.0,)f("")h(\))0 4970 y FF(The)g(\014rst)f(step)h(is)h(to)g(include)f
-(the)g(header)g(\014le)g(\\ast.h")i(whic)m(h)e(declares)h(the)f(in)m
-(terface)i(to)f(the)f(AST)0 5083 y(library)-8 b(.)52
-b(W)-8 b(e)36 b(then)d(declare)j(a)e(p)s(oin)m(ter)g(of)h(t)m(yp)s(e)f
-(AstZo)s(omMap)p Fu(\003)h FF(to)g(receiv)m(e)h(the)e(result)h(and)e
-(in)m(v)m(ok)m(e)j(the)0 5196 y(function)31 b(astZo)s(omMap)h(to)g
-(create)h(the)e(Zo)s(omMap.)44 b(The)30 b(pattern)i(is)f(the)h(same)f
-(for)g(all)h(other)g(classes)g(of)0 5309 y(AST)d(Ob)5
-b(ject|y)m(ou)30 b(simply)g(pre\014x)e(\\ast")k(to)e(the)g(class)h
-(name)e(to)i(obtain)f(the)g(function)g(that)g(creates)h(the)0
-5422 y(Ob)5 b(ject)31 b(and)e(pre\014x)h(\\Ast")h(to)g(obtain)g(the)g
-(t)m(yp)s(e)f(of)h(the)f(returned)g(p)s(oin)m(ter.)0
-5580 y(These)23 b(functions)g(are)h(called)h Fx(c)-5
-b(onstructor)28 b(functions,)d FF(or)f(simply)f Fx(c)-5
-b(onstructors)26 b FF(\(y)m(ou)e(can)g(\014nd)e(an)h(individ-)0
-5693 y(ual)g(description)g(of)h(all)f(AST)g(functions)f(in)h(App)s
-(endix)f(B\))h(and)g(the)g(argumen)m(ts)g(passed)g(to)h(the)f
-(constructor)p eop end
-%%Page: 34 44
-TeXDict begin 34 43 bop 0 52 a FF(34)2393 b Fy(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)0 351 y FF(are)25 b(used)f(to)h(initialise)h
-(the)f(new)f(Ob)5 b(ject.)39 b(In)24 b(this)g(case,)j(w)m(e)e(sp)s
-(ecify)f(2)h(as)g(the)g(n)m(um)m(b)s(er)e(of)h(co)s(ordinates)i(\()p
-Fx(i.e.)0 464 y FF(w)m(e)31 b(are)f(going)i(to)e(w)m(ork)h(in)f(a)g
-(2-dimensional)h(space\))g(and)f(5.0)h(as)g(the)f(Zo)s(om)g(factor)h
-(to)g(b)s(e)f(applied.)40 b(Note)0 577 y(that)c(this)g(is)g(a)g(C)g
-(double)f(v)-5 b(alue.)58 b(W)-8 b(e)37 b(will)f(return)f(to)i(the)f
-(\014nal)f(argumen)m(t,)j(an)e(empt)m(y)g(string,)i(shortly)0
-690 y(\()p Fu(x)p FF(4.6\).)0 847 y(The)30 b(v)-5 b(alue)31
-b(returned)f(b)m(y)g(the)h(constructor)g(is)g(termed)f(an)h
-Fx(Obje)-5 b(ct)32 b(p)-5 b(ointer)32 b FF(or,)f(in)f(this)h(case,)h(a)
-f Fx(Zo)-5 b(omMap)0 960 y(p)g(ointer)29 b FF(and)e(is)g(used)f(to)i
-(refer)f(to)h(the)g(Ob)5 b(ject.)40 b(Y)-8 b(ou)27 b(p)s(erform)f(all)j
-(subsequen)m(t)d(op)s(erations)i(on)f(the)g(Ob)5 b(ject)0
-1073 y(b)m(y)30 b(passing)g(this)h(p)s(oin)m(ter)f(to)h(other)g(AST)e
-(functions.)0 1357 y Fw(4.3)112 b(The)38 b(Ob)6 b(ject)38
-b(Hierarc)m(h)m(y)0 1573 y FF(No)m(w)d(that)g(w)m(e)g(ha)m(v)m(e)h
-(created)f(our)f(\014rst)f(Zo)s(omMap,)j(let)f(us)f(examine)h(ho)m(w)g
-(it)f(relates)i(to)f(other)g(kinds)e(of)0 1686 y(Ob)5
-b(ject)31 b(b)s(efore)e(in)m(v)m(estigating)34 b(what)c(w)m(e)h(can)g
-(do)f(with)g(it.)0 1843 y(W)-8 b(e)28 b(ha)m(v)m(e)f(so)g(far)f
-(indicated)h(that)h(a)e(Zo)s(omMap)h(is)f(a)h(kind)f(of)h(Ob)5
-b(ject)26 b(and)g(ha)m(v)m(e)i(also)f(men)m(tioned)g(that)g(it)g(is)0
-1956 y(a)g(kind)f(of)h(Mapping)g(as)g(w)m(ell.)41 b(These)26
-b(statemen)m(ts)j(can)e(b)s(e)f(represen)m(ted)h(v)m(ery)g(simply)g
-(using)f(the)h(follo)m(wing)0 2068 y(hierarc)m(h)m(y:)227
-2294 y Ft(Object)358 2394 y(Mapping)489 2493 y(ZoomMap)0
-2732 y FF(whic)m(h)34 b(is)g(a)h(w)m(a)m(y)g(of)g(stating)g(that)g(a)g
-(Zo)s(omMap)f(is)g(a)h(sp)s(ecial)g(class)g(of)f(Mapping,)h(while)g(a)f
-(Mapping,)i(in)0 2845 y(turn,)g(is)g(a)g(sp)s(ecial)g(class)g(of)g(Ob)5
-b(ject.)56 b(This)35 b(is)h(exactly)h(lik)m(e)g(sa)m(ying)f(that)g(an)g
-(Oak)f(is)h(a)g(sp)s(ecial)g(form)f(of)0 2958 y(T)-8
-b(ree,)30 b(while)g(a)f(T)-8 b(ree,)31 b(in)e(turn,)g(is)g(a)h(sp)s
-(ecial)g(form)f(of)g(Plan)m(t.)41 b(This)29 b(ma)m(y)h(seem)g(almost)g
-(trivial,)h(but)e(b)s(efore)0 3071 y(y)m(ou)e(turn)f(to)h(read)g
-(something)g(less)g(dull,)g(b)s(e)f(assured)g(that)i(it)f(is)g(a)g(v)m
-(ery)g(imp)s(ortan)m(t)g(idea)g(to)h(k)m(eep)f(in)g(mind)0
-3184 y(in)j(what)g(follo)m(ws.)0 3341 y(If)i(w)m(e)i(lo)s(ok)f(at)g
-(some)h(of)f(the)g(other)g(Ob)5 b(jects)32 b(used)g(b)m(y)h(the)g(AST)f
-(library)-8 b(,)34 b(w)m(e)f(can)g(see)g(ho)m(w)g(these)g(are)h(all)0
-3454 y(related)d(in)f(a)h(similar)g(w)m(a)m(y)g(\(don't)g(w)m(orry)f
-(ab)s(out)g(what)g(they)h(do)f(at)h(this)g(stage\):)227
-3679 y Ft(Object)358 3779 y(Mapping)489 3878 y(Frame)620
-3978 y(FrameSet)750 4078 y(Plot)489 4177 y(UnitMap)489
-4277 y(ZoomMap)358 4377 y(Channel)489 4476 y(FitsChan)489
-4576 y(XmlChan)0 4815 y FF(Notice)c(that)e(there)g(are)h(sev)m(eral)g
-(di\013eren)m(t)f(t)m(yp)s(es)g(of)g(Mapping)g(a)m(v)-5
-b(ailable)27 b(\()p Fx(i.e.)e FF(there)g(are)g(classes)h(of)f(Ob)5
-b(ject)0 4928 y(inden)m(ted)26 b(b)s(eneath)g(the)g(\\Mapping")h
-(heading\))g(and,)f(in)g(addition,)i(other)e(t)m(yp)s(es)g(of)g(Ob)5
-b(ject)27 b(whic)m(h)f(are)g(not)0 5041 y(Mappings|Channels)j(for)h
-(instance)h(\(whic)m(h)g(are)g(at)g(the)f(same)h(hierarc)m(hical)h(lev)
-m(el)g(as)f(Mappings\).)0 5197 y(The)d(most)g(sp)s(ecialised)h(Ob)5
-b(ject)28 b(w)m(e)h(ha)m(v)m(e)h(sho)m(wn)d(here)h(is)h(the)f(Plot)h
-(\(whic)m(h)f(w)m(e)h(will)g(not)f(discuss)f(in)h(detail)0
-5310 y(un)m(til)h Fu(x)p FF(21\).)42 b(As)29 b(y)m(ou)g(can)g(see,)h(a)
-f(Plot)h(is)e(a)i(F)-8 b(rameSet.)16 b(.)g(.)44 b(and)28
-b(a)h(F)-8 b(rame.)17 b(.)e(.)44 b(and)28 b(a)h(Mapping.)16
-b(.)f(.)44 b(and,)29 b(lik)m(e)0 5423 y(ev)m(erything)i(else,)h
-(ultimately)g(an)e(Ob)5 b(ject.)0 5580 y(What)30 b(this)f(means)g(is)h
-(that)g(y)m(ou)f(can)h(use)f(a)g(Plot)i(not)e(only)h(for)f(its)g(o)m
-(wn)h(sp)s(ecialised)g(b)s(eha)m(viour,)f(but)g(also)0
-5693 y(whenev)m(er)34 b(an)m(y)g(of)g(these)g(other)g(less-sp)s
-(ecialised)h(classes)g(of)f(Ob)5 b(ject)34 b(is)g(called)h(for.)51
-b(The)33 b(general)i(rule)e(is)p eop end
-%%Page: 35 45
-TeXDict begin 35 44 bop 0 52 a Fy(4.4)92 b(Displa)m(ying)32
-b(Ob)5 b(jects)2727 b FF(35)0 351 y(that)32 b(an)f(Ob)5
-b(ject)31 b(of)h(a)f(particular)h(class)g(ma)m(y)g(substitute)f(for)g
-(an)m(y)h(of)f(the)g(classes)i(app)s(earing)e(ab)s(o)m(v)m(e)h(it)g(in)
-0 464 y(this)d(hierarc)m(h)m(y)-8 b(.)42 b(The)29 b(Ob)5
-b(ject)30 b(is)f(then)h(said)f(to)i Fx(inherit)f FF(the)g(b)s(eha)m
-(viour)f(of)h(these)g(higher)f(classes.)41 b(W)-8 b(e)31
-b(can)0 577 y(therefore)g(use)f(our)g(Zo)s(omMap)g(whenev)m(er)g(a)h
-(Zo)s(omMap,)g(a)f(Mapping)h(or)f(an)g(Ob)5 b(ject)31
-b(is)f(called)i(for.)0 744 y(Sometimes,)41 b(this)d(can)h(lead)f(to)h
-(some)g(sp)s(ectacular)g(short-cuts)f(b)m(y)g(a)m(v)m(oiding)i(the)e
-(need)g(to)h(break)f(large)0 856 y(Ob)5 b(jects)43 b(do)m(wn)f(in)g
-(order)h(to)g(access)h(their)f(comp)s(onen)m(ts.)78 b(With)43
-b(some)g(practice)h(and)e(a)h(little)i(lateral)0 969
-y(thinking)30 b(y)m(ou)h(should)e(so)s(on)h(b)s(e)g(able)h(to)g(sp)s
-(ot)f(opp)s(ortunities)g(for)g(this.)0 1136 y(Y)-8 b(ou)34
-b(can)g(\014nd)d(the)j(full)f Fx(class)j(hier)-5 b(ar)g(chy)p
-FF(,)37 b(as)c(this)h(is)f(called,)j(for)d(the)g(AST)g(library)g(in)g
-(App)s(endix)f(A)h(and)0 1249 y(y)m(ou)d(ma)m(y)h(need)f(to)h(refer)f
-(to)h(it)f(o)s(ccasionally)j(un)m(til)d(y)m(ou)h(are)f(familiar)h(with)
-f(the)g(classes)h(y)m(ou)g(need)f(to)h(use.)0 1554 y
-Fw(4.4)112 b(Displa)m(ying)39 b(Ob)6 b(jects)0 1781 y
-FF(Let)32 b(us)f(no)m(w)h(return)e(to)j(the)f(Zo)s(omMap)f(that)i(w)m
-(e)f(created)h(earlier)f(\()p Fu(x)p FF(4.2\))i(and)d(examine)h(what)g
-(it's)g(made)0 1894 y(of.)51 b(There)33 b(is)h(a)g(function)f(for)h
-(doing)g(this,)g(called)h(astSho)m(w,)g(whic)m(h)f(is)g(pro)m(vided)f
-(mainly)h(for)f(lo)s(oking)i(at)0 2007 y(Ob)5 b(jects)30
-b(while)h(y)m(ou)f(are)h(debugging)g(programs.)0 2173
-y(If)d(y)m(ou)g(consult)h(the)f(description)h(of)f(astSho)m(w)h(in)f
-(App)s(endix)e(B,)j(y)m(ou)g(will)g(\014nd)d(that)j(it)g(tak)m(es)h(a)e
-(p)s(oin)m(ter)h(to)0 2286 y(an)35 b(Ob)5 b(ject)35 b(\(of)g(t)m(yp)s
-(e)g(AstOb)5 b(ject)p Fu(\003)p FF(\))36 b(as)f(its)g(argumen)m(t.)54
-b(Although)35 b(w)m(e)h(ha)m(v)m(e)g(only)f(a)g(Zo)s(omMap)f(p)s(oin)m
-(ter)0 2399 y(a)m(v)-5 b(ailable,)34 b(this)d(is)g(not)g(a)h(problem.)
-42 b(If)30 b(y)m(ou)i(refer)f(to)g(the)h(brief)e(class)i(hierarc)m(h)m
-(y)g(describ)s(ed)e(ab)s(o)m(v)m(e)i(\()p Fu(x)p FF(4.3\),)0
-2512 y(y)m(ou)e(will)f(see)h(that)g(a)g(Zo)s(omMap)f(is)g(an)h(Ob)5
-b(ject,)30 b(alb)s(eit)g(a)f(sp)s(ecialised)h(one,)g(so)g(it)g
-(inherits)f(the)g(prop)s(erties)0 2625 y(of)e(all)g(Ob)5
-b(jects)27 b(and)f(can)g(b)s(e)g(substituted)g(wherev)m(er)h(an)f(Ob)5
-b(ject)27 b(is)g(required.)38 b(W)-8 b(e)28 b(can)f(therefore)g(pass)f
-(our)0 2738 y(Zo)s(omMap)k(p)s(oin)m(ter)h(directly)g(to)g(astSho)m(w,)
-g(as)f(follo)m(ws:)227 2998 y Ft(astShow\()41 b(zoommap)f(\);)0
-3272 y FF(The)k(output)h(from)f(this)h(will)g(app)s(ear)f(on)h(the)f
-(standard)g(output)h(stream)g(and)f(should)g(lo)s(ok)h(lik)m(e)h(the)0
-3384 y(follo)m(wing:)227 3645 y Ft(Begin)c(ZoomMap)358
-3744 y(Nin)g(=)i(2)227 3844 y(IsA)f(Mapping)358 3944
-y(Zoom)f(=)h(5)227 4043 y(End)g(ZoomMap)0 4317 y FF(Here,)e(the)e
-(\\Begin")i(and)d(\\End")g(lines)h(mark)f(the)h(b)s(eginning)e(and)h
-(end)g(of)h(the)g(Zo)s(omMap,)i(while)d(the)0 4429 y(v)-5
-b(alues)34 b(2)g(and)f(5)h(are)h(simply)e(the)h(v)-5
-b(alues)34 b(w)m(e)g(supplied)f(to)h(initialise)i(it)e(\()p
-Fu(x)p FF(4.2\).)53 b(These)33 b(ha)m(v)m(e)i(b)s(een)e(giv)m(en)0
-4542 y(simple)d(names)h(to)g(mak)m(e)g(them)f(easy)h(to)h(refer)e(to.)0
-4709 y(The)38 b(line)h(in)g(the)f(middle)h(whic)m(h)f(sa)m(ys)h(\\IsA)g
-(Mapping")g(is)g(a)g(dividing)g(line)g(b)s(et)m(w)m(een)g(the)g(t)m(w)m
-(o)h(v)-5 b(alues.)0 4822 y(It)36 b(indicates)h(that)g(the)f(\\Nin")h
-(v)-5 b(alue)36 b(is)g(a)g(prop)s(ert)m(y)g(shared)f(b)m(y)h(all)h
-(Mappings,)g(so)g(the)f(Zo)s(omMap)g(has)0 4935 y(inherited)k(this)g
-(from)g(its)h Fx(p)-5 b(ar)g(ent)44 b(class)d FF(\(Mapping\).)71
-b(The)40 b(\\Zo)s(om")h(v)-5 b(alue,)44 b(ho)m(w)m(ev)m(er,)g(is)d(sp)s
-(eci\014c)f(to)h(a)0 5048 y(Zo)s(omMap)30 b(and)g(isn't)h(shared)e(b)m
-(y)i(other)f(kinds)g(of)g(Mappings.)0 5353 y Fw(4.5)112
-b(Getting)37 b(A)m(ttribute)g(V)-9 b(alues)0 5580 y FF(W)h(e)31
-b(sa)m(w)f(ab)s(o)m(v)m(e)h(\()p Fu(x)p FF(4.4\))h(ho)m(w)e(to)h
-(displa)m(y)f(the)g(in)m(ternal)g(v)-5 b(alues)30 b(of)g(an)g(Ob)5
-b(ject,)31 b(but)e(what)g(ab)s(out)h(accessing)0 5693
-y(these)c(v)-5 b(alues)26 b(from)e(a)i(program?)39 b(Not)26
-b(all)g(in)m(ternal)g(Ob)5 b(ject)26 b(v)-5 b(alues)26
-b(are)f(accessible)i(in)e(this)h(w)m(a)m(y)-8 b(,)28
-b(but)c(man)m(y)p eop end
-%%Page: 36 46
-TeXDict begin 36 45 bop 0 52 a FF(36)2393 b Fy(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)0 351 y FF(are.)50 b(Those)33
-b(that)g(are,)i(are)f(called)g Fx(attributes)p FF(.)50
-b(A)33 b(description)h(of)f(all)h(the)f(attributes)h(used)f(b)m(y)g
-(the)g(AST)0 464 y(library)d(can)h(b)s(e)e(found)g(in)h(App)s(endix)f
-(C.)0 624 y(A)m(ttributes)e(come)h(in)e(sev)m(eral)h(data)h(t)m(yp)s
-(es)e(\(c)m(haracter)i(string,)g(in)m(teger,)h(b)s(o)s(olean)d(and)g
-(\015oating)h(p)s(oin)m(t\))g(and)0 737 y(there)32 b(is)g(a)g(standard)
-f(w)m(a)m(y)h(of)g(obtaining)h(their)f(v)-5 b(alues.)45
-b(As)31 b(an)h(example,)h(consider)f(obtaining)g(the)g(v)-5
-b(alue)0 850 y(of)31 b(the)f(Nin)g(attribute)h(for)g(the)f(Zo)s(omMap)g
-(created)i(earlier.)42 b(This)29 b(could)i(b)s(e)e(done)h(as)h(follo)m
-(ws:)227 1090 y Ft(int)43 b(nin;)227 1289 y(...)227 1488
-y(nin)g(=)g(astGetI\()d(zoommap,)g("Nin")i(\);)0 1741
-y FF(Here,)23 b(the)e(function)f(astGetI)i(is)e(used)g(to)h(extract)h
-(the)e(attribute)h(v)-5 b(alue)21 b(b)m(y)f(giving)i(it)f(the)f(Zo)s
-(omMap)g(p)s(oin)m(ter)0 1854 y(and)38 b(the)h(attribute)g(name)f
-(\(attribute)i(names)e(are)h(not)g(case)h(sensitiv)m(e,)i(but)c(w)m(e)h
-(ha)m(v)m(e)g(used)f(consisten)m(t)0 1966 y(capitalisation)31
-b(in)d(this)g(do)s(cumen)m(t)g(in)f(order)h(to)h(iden)m(tify)f(them\).)
-41 b(Remem)m(b)s(er)27 b(to)i(use)f(the)g(\\ast.h")i(header)0
-2079 y(\014le)g(to)i(include)e(the)g(function)g(protot)m(yp)s(e.)0
-2240 y(If)22 b(w)m(e)h(had)g(w)m(an)m(ted)g(the)g(v)-5
-b(alue)23 b(of)g(the)g(Zo)s(om)f(attribute,)k(w)m(e)d(w)m(ould)f
-(probably)g(ha)m(v)m(e)i(used)e(astGetD)j(instead,)0
-2353 y(this)30 b(b)s(eing)g(a)h(double)f(v)m(ersion)h(of)f(the)h(same)g
-(function,)f(for)g(example:)227 2592 y Ft(double)41 b(zoom;)227
-2791 y(...)227 2990 y(zoom)h(=)h(astGetD\()e(zoommap,)f("Zoom")h(\);)0
-3243 y FF(Ho)m(w)m(ev)m(er,)i(w)m(e)c(could)f(equally)h(w)m(ell)h(ha)m
-(v)m(e)f(read)g(the)f(Nin)h(v)-5 b(alue)39 b(as)f(double,)j(or)d(the)h
-(Zo)s(om)f(v)-5 b(alue)39 b(as)g(an)0 3356 y(in)m(teger,)32
-b(or)e(whatev)m(er)i(w)m(e)e(w)m(an)m(ted.)0 3516 y(The)41
-b(data)h(t)m(yp)s(e)g(y)m(ou)g(w)m(an)m(t)g(returned)f(is)h(sp)s
-(eci\014ed)e(simply)i(b)m(y)f(replacing)h(the)g(\014nal)f(c)m(haracter)
-j(of)d(the)0 3629 y(astGetX)h(function)d(name)h(with)g(C)f(\(c)m
-(haracter)j(string\),)h(D)d(\(double\),)j(F)d(\(\015oat\),)k(I)39
-b(\(in)m(t\))i(or)f(L)g(\(long\).)0 3742 y(If)d(p)s(ossible,)h(the)f(v)
--5 b(alue)38 b(is)f(con)m(v)m(erted)h(to)g(the)f(t)m(yp)s(e)g(y)m(ou)g
-(w)m(an)m(t.)62 b(If)36 b(not,)j(an)e(error)g(message)h(will)f(result.)
-0 3855 y(Note)c(that)f(all)g(\015oating)g(p)s(oin)m(t)f(v)-5
-b(alues)32 b(are)g(stored)f(in)m(ternally)i(as)e(double,)h(and)e(all)j
-(in)m(teger)f(v)-5 b(alues)32 b(as)g(in)m(t.)0 3968 y(Bo)s(olean)g(v)-5
-b(alues)30 b(are)h(also)h(stored)e(as)h(in)m(tegers,)h(but)d(only)i
-(tak)m(e)h(the)e(v)-5 b(alues)31 b(1)g(and)e(0)i(\(for)g(true/false\).)
-0 4257 y Fw(4.6)112 b(Setting)38 b(A)m(ttribute)e(V)-9
-b(alues)0 4476 y FF(Some)37 b(attribute)h(v)-5 b(alues)38
-b(are)f(read-only)h(and)e(cannot)i(b)s(e)f(altered)h(after)f(an)g(Ob)5
-b(ject)38 b(has)f(b)s(een)f(created.)0 4589 y(The)23
-b(Nin)h(attribute)h(of)f(a)h(Zo)s(omMap)f(\(describing)g(the)g(n)m(um)m
-(b)s(er)e(of)j(co)s(ordinates\))g(is)f(lik)m(e)h(this.)39
-b(It)24 b(is)g(de\014ned)0 4702 y(when)29 b(the)i(Zo)s(omMap)f(is)h
-(created,)g(but)f(cannot)h(then)f(b)s(e)g(altered.)0
-4862 y(Other)g(attributes,)i(ho)m(w)m(ev)m(er,)g(can)f(b)s(e)f(mo)s
-(di\014ed)g(whenev)m(er)g(y)m(ou)h(w)m(an)m(t.)43 b(A)31
-b(Zo)s(omMap's)f(Zo)s(om)h(attribute)0 4975 y(is)f(lik)m(e)i(this.)41
-b(If)30 b(w)m(e)g(w)m(an)m(ted)i(to)f(c)m(hange)g(it,)g(this)g(could)f
-(b)s(e)g(done)g(simply)g(as)g(follo)m(ws:)227 5215 y
-Ft(astSetD\()41 b(zoommap,)f("Zoom",)h(99.6)g(\);)0 5467
-y FF(whic)m(h)35 b(sets)i(the)f(v)-5 b(alue)36 b(to)g(99.6.)59
-b(As)35 b(when)g(getting)j(an)d(attribute)i(v)-5 b(alue)36
-b(\()p Fu(x)p FF(4.5\),)k(y)m(ou)c(ha)m(v)m(e)h(a)f(c)m(hoice)h(of)0
-5580 y(whic)m(h)d(data)i(t)m(yp)s(e)e(y)m(ou)h(will)g(use)g(to)g
-(supply)e(the)i(new)f(v)-5 b(alue.)54 b(F)-8 b(or)35
-b(instance,)i(y)m(ou)e(could)f(use)h(an)f(in)m(teger)0
-5693 y(v)-5 b(alue,)31 b(as)g(in:)p eop end
-%%Page: 37 47
-TeXDict begin 37 46 bop 0 52 a Fy(4.6)92 b(Setting)31
-b(A)m(ttribute)g(V)-8 b(alues)2508 b FF(37)227 351 y
-Ft(astSetI\()41 b(zoommap,)f("Zoom",)h(99)h(\);)0 609
-y FF(and)31 b(the)h(necessary)h(data)f(con)m(v)m(ersion)i(w)m(ould)d(o)
-s(ccur.)45 b(Y)-8 b(ou)33 b(sp)s(ecify)e(the)i(data)f(t)m(yp)s(e)g(y)m
-(ou)h(w)m(an)m(t)f(to)h(supply)0 722 y(simply)c(b)m(y)h(replacing)h
-(the)f(\014nal)g(c)m(haracter)h(of)f(the)g(astSetX)h(function)f(name)g
-(with)g(C)f(\(c)m(haracter)j(string\),)0 835 y(D)k(\(double\),)h(F)e
-(\(\015oat\),)j(I)d(\(in)m(t\))i(or)e(L)g(\(long\).)57
-b(Setting)36 b(a)f(b)s(o)s(olean)h(attribute)g(to)g(an)m(y)f(non-zero)h
-(in)m(teger)0 948 y(causes)31 b(it)g(to)g(tak)m(e)h(the)e(v)-5
-b(alue)31 b(1.)0 1110 y(An)40 b(alternativ)m(e)j(w)m(a)m(y)f(of)e
-(setting)i(attribute)f(v)-5 b(alues)41 b(for)g(Ob)5 b(jects)40
-b(is)h(to)g(use)f(the)h(astSet)g(function)g(\()p Fx(i.e.)0
-1222 y FF(with)31 b(no)f(\014nal)h(c)m(haracter)h(sp)s(ecifying)f(a)g
-(data)h(t)m(yp)s(e\).)42 b(In)30 b(this)h(case,)h(y)m(ou)g(supply)d
-(the)i(attribute)h(v)-5 b(alues)31 b(in)0 1335 y(a)36
-b(c)m(haracter)h(string.)55 b(The)35 b(big)g(adv)-5 b(an)m(tage)37
-b(of)f(this)f(metho)s(d)g(is)g(that)h(y)m(ou)f(can)h(assign)f(v)-5
-b(alues)36 b(to)g(sev)m(eral)0 1448 y(attributes)31 b(at)h(once,)f
-(separating)h(them)e(with)h(commas.)42 b(This)30 b(also)h(reads)g(more)
-f(naturally)h(in)g(programs.)0 1561 y(F)-8 b(or)31 b(example:)227
-1806 y Ft(astSet\()41 b(zoommap,)f("Zoom=99.6,)f(Report=1")h(\);)0
-2064 y FF(w)m(ould)j(set)g(v)-5 b(alues)43 b(for)g(b)s(oth)f(the)h(Zo)s
-(om)g(attribute)g(and)g(the)g(Rep)s(ort)f(attribute)i(\(ab)s(out)f
-(whic)m(h)f(more)0 2177 y(shortly|)p Fu(x)p FF(4.8\).)80
-b(Y)-8 b(ou)43 b(don't)g(really)g(ha)m(v)m(e)h(to)g(w)m(orry)e(ab)s
-(out)g(data)i(t)m(yp)s(es)f(with)f(this)h(metho)s(d,)i(as)e(an)m(y)0
-2290 y(c)m(haracter)32 b(represen)m(tation)f(will)g(do.)0
-2451 y(Another)k(attractiv)m(e)k(feature)c(of)h(astSet)g(is)f(that)h(y)
-m(ou)g(can)f(build)g(the)g(c)m(haracter)i(string)e(whic)m(h)g(con)m
-(tains)0 2564 y(the)d(attribute)g(settings)h(in)e(the)g(same)h(w)m(a)m
-(y)h(as)f(when)e(using)h(the)h(C)f(run)f(time)i(library)g(\\prin)m(tf)7
-b(")32 b(function.)0 2677 y(This)e(is)g(most)h(useful)e(when)h(the)g(v)
--5 b(alues)31 b(y)m(ou)g(w)m(an)m(t)g(to)g(set)g(are)g(held)f(in)g
-(other)g(v)-5 b(ariables.)42 b(F)-8 b(or)31 b(example:)227
-2922 y Ft(double)41 b(zoom)h(=)h(99.6;)227 3021 y(int)g(report)e(=)i
-(1;)227 3221 y(...)227 3420 y(astSet\()e(zoommap,)f("Zoom=\045g,)g
-(Report=\045d",)f(zoom,)j(report)f(\);)0 3678 y FF(w)m(ould)27
-b(replace)i(the)e(\\\045")h(con)m(v)m(ersion)h(sp)s(eci\014cations)f(b)
-m(y)f(the)h(v)-5 b(alues)28 b(supplied)e(as)i(additional)g(argumen)m
-(ts.)0 3791 y(An)m(y)j(n)m(um)m(b)s(er)e(of)i(additional)g(argumen)m
-(ts)g(ma)m(y)h(b)s(e)e(supplied)f(and)h(the)h(formatting)h(rules)e(are)
-h(exactly)h(the)0 3904 y(same)25 b(as)g(for)f(the)h(C)f(\\prin)m(tf)7
-b(")25 b(family)g(of)g(functions.)39 b(This)23 b(is)i(a)g(v)m(ery)g
-(\015exible)g(tec)m(hnique,)i(but)d(do)s(es)g(con)m(tain)0
-4016 y(one)31 b(pitfall:)227 4274 y FD(Pitfall.)39 b
-FF(The)26 b(default)g(precision)g(used)g(b)m(y)f(\\prin)m(tf)7
-b(")27 b(\(and)f(astSet\))h(for)f(\015oating)h(p)s(oin)m(t)f(v)-5
-b(alues)227 4387 y(is)41 b(only)g(6)g(decimal)g(digits,)j(corresp)s
-(onding)c(appro)m(ximately)h(to)h(\015oat)f(on)f(most)h(mac)m(hines,)
-227 4500 y(whereas)e(the)h(AST)f(library)f(stores)i(suc)m(h)f(v)-5
-b(alues)40 b(in)m(ternally)g(as)g(doubles.)67 b(Y)-8
-b(ou)39 b(should)g(b)s(e)227 4613 y(careful)i(to)h(sp)s(ecify)e(a)h
-(larger)h(precision)f(\(suc)m(h)f(as)h(DBL)p Fq(_)p FF(DIG,)h(as)f
-(de\014ned)f(in)g Fo(<)p FF(\015oat.h)p Fo(>)p FF(\))227
-4726 y(when)30 b(necessary)-8 b(.)41 b(F)-8 b(or)31 b(example:)427
-4924 y Ft(#include)41 b(<float.h>)427 5123 y(...)427
-5322 y(astSet\()g(zoommap,)f("Zoom=\045.*g",)f(DBL_DIG,)h(double_value)
-f(\);)0 5580 y FF(Substituted)c(strings)h(ma)m(y)h(con)m(tain)h(commas)
-f(and)e(this)h(is)h(a)f(useful)g(w)m(a)m(y)h(of)f(assigning)h(suc)m(h)f
-(strings)g(as)0 5693 y(attribute)30 b(v)-5 b(alues)29
-b(without)g(the)g(comma)g(b)s(eing)g(in)m(terpreted)g(as)g(an)g
-(assignmen)m(t)h(separator,)g(for)f(example:)p eop end
-%%Page: 38 48
-TeXDict begin 38 47 bop 0 52 a FF(38)2393 b Fy(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)227 351 y Ft(astSet\()41 b(object,)g
-("Attribute=\045s",)c("A)43 b(string,)d(containing)g(a)j(comma")e(\);)0
-591 y FF(This)31 b(is)h(equiv)-5 b(alen)m(t)33 b(to)g(using)f(astSetC)g
-(and)f(one)i(of)f(these)g(t)m(w)m(o)h(metho)s(ds)f(should)f(alw)m(a)m
-(ys)i(b)s(e)e(used)g(when)0 704 y(assigning)26 b(string)g(attribute)h
-(v)-5 b(alues)26 b(whic)m(h)g(migh)m(t)h(p)s(oten)m(tially)g(con)m
-(tain)h(a)e(comma)h(\()p Fx(e.g.)e FF(strings)h(obtained)0
-817 y(from)32 b(an)g(external)i(source\).)47 b(Ho)m(w)m(ev)m(er,)36
-b(y)m(ou)c(should)g(not)h(attempt)g(to)h(use)e(astSet)h(to)g
-(substitute)g(strings)0 930 y(that)g(con)m(tain)g(newline)f(c)m
-(haracters,)i(since)e(these)h(are)f(used)f(in)m(ternally)i(as)f
-(separators)h(b)s(et)m(w)m(een)f(adjacen)m(t)0 1043 y(attribute)f
-(assignmen)m(ts.)0 1200 y(Finally)-8 b(,)38 b(a)e(v)m(ery)g(con)m(v)m
-(enien)m(t)h(w)m(a)m(y)f(of)g(setting)g(attribute)g(v)-5
-b(alues)36 b(is)f(to)h(do)g(so)f(at)h(the)g(same)g(time)g(as)f(y)m(ou)0
-1313 y(create)25 b(an)f(Ob)5 b(ject.)39 b(Ev)m(ery)24
-b(Ob)5 b(ject)24 b(constructor)g(function)f(has)h(a)g(\014nal)f(c)m
-(haracter)j(string)e(argumen)m(t)g(whic)m(h)0 1426 y(allo)m(ws)g(y)m
-(ou)f(to)h(do)f(this.)38 b(Although)23 b(y)m(ou)g(can)h(simply)e
-(supply)f(an)i(empt)m(y)h(string,)g(it)g(is)f(an)f(ideal)i(opp)s
-(ortunit)m(y)0 1539 y(to)h(initialise)h(the)e(Ob)5 b(ject)24
-b(to)h(ha)m(v)m(e)g(just)f(the)g(attributes)h(y)m(ou)f(w)m(an)m(t.)40
-b(F)-8 b(or)24 b(example,)j(w)m(e)d(migh)m(t)h(ha)m(v)m(e)g(created)0
-1652 y(our)30 b(original)h(Zo)s(omMap)g(with:)227 1879
-y Ft(zoommap)41 b(=)i(astZoomMap\()c(2,)k(5.0,)f("Report=1")d(\);)0
-2119 y FF(and)33 b(it)h(w)m(ould)g(then)f(start)i(life)f(with)g(its)g
-(Rep)s(ort)f(attribute)i(set)f(to)g(1.)52 b(The)33 b(\\prin)m(tf)7
-b("-st)m(yle)36 b(substitution)0 2232 y(describ)s(ed)29
-b(ab)s(o)m(v)m(e)j(ma)m(y)f(also)g(b)s(e)f(used)f(here.)0
-2517 y Fw(4.7)112 b(T)-9 b(esting,)38 b(Clearing)g(and)g(Defaulting)h
-(A)m(ttributes)0 2733 y FF(Y)-8 b(ou)35 b(can)g(use)f(the)h(astGetX)h
-(family)f(of)f(functions)g(\()p Fu(x)p FF(4.5\))j(to)e(get)h(a)f(v)-5
-b(alue)35 b(for)f(an)m(y)h(Ob)5 b(ject)35 b(attribute)g(at)0
-2846 y(an)m(y)c(time,)h(regardless)f(of)g(whether)f(a)h(v)-5
-b(alue)31 b(has)g(previously)f(b)s(een)g(set)h(for)g(it.)42
-b(If)30 b(no)h(v)-5 b(alue)31 b(has)g(b)s(een)f(set,)0
-2959 y(the)h(AST)e(library)h(will)h(generate)h(a)f(suitable)f(default)h
-(v)-5 b(alue.)0 3116 y(Often,)47 b(the)c(default)h(v)-5
-b(alue)44 b(of)f(an)h(attribute)g(will)g(not)f(simply)g(b)s(e)g
-(trivial)i(\(zero)f(or)g(blank\))f(but)g(ma)m(y)0 3229
-y(in)m(v)m(olv)m(e)h(considerable)e(pro)s(cessing)f(to)i(calculate.)76
-b(Wherev)m(er)43 b(p)s(ossible,)h(defaults)d(are)h(designed)g(to)g(b)s
-(e)0 3342 y(real-life,)c(sensible)d(v)-5 b(alues)36 b(that)f(con)m(v)m
-(ey)i(information)e(ab)s(out)g(the)h(state)g(of)f(the)h(Ob)5
-b(ject.)55 b(In)34 b(particular,)0 3455 y(they)24 b(ma)m(y)h(often)f(b)
-s(e)f(based)h(on)f(the)i(v)-5 b(alues)24 b(of)g(other)g(attributes,)i
-(so)e(their)g(v)-5 b(alues)24 b(ma)m(y)h(c)m(hange)g(in)e(resp)s(onse)0
-3568 y(to)31 b(c)m(hanges)h(in)e(these)h(other)g(attributes.)41
-b(The)30 b(Zo)s(omMap)h(class)g(that)g(w)m(e)g(ha)m(v)m(e)h(studied)d
-(so)i(far)f(is)h(a)g(little)0 3681 y(to)s(o)g(simple)f(to)i(sho)m(w)e
-(this)g(b)s(eha)m(viour,)g(but)g(w)m(e)h(will)g(meet)g(it)g(later)g
-(on.)0 3838 y(An)h(attribute)i(that)f(returns)f(a)h(default)g(v)-5
-b(alue)33 b(in)g(this)g(w)m(a)m(y)g(is)g(said)g(to)h(b)s(e)e
-Fx(un-set.)47 b FF(Con)m(v)m(ersely)-8 b(,)35 b(once)f(an)0
-3951 y(explicit)d(v)-5 b(alue)30 b(has)g(b)s(een)e(assigned)i(to)h(an)e
-(attribute,)i(it)f(b)s(ecomes)g Fx(set)g FF(and)f(will)h(alw)m(a)m(ys)h
-(return)e(precisely)0 4064 y(that)i(v)-5 b(alue,)31 b(nev)m(er)g(a)g
-(default.)0 4221 y(The)41 b(distinction)i(b)s(et)m(w)m(een)f(set)h(and)
-e(un-set)h(attributes)g(is)g(imp)s(ortan)m(t)g(and)f(a\013ects)j(the)e
-(b)s(eha)m(viour)f(of)0 4334 y(sev)m(eral)36 b(k)m(ey)g(routines)f(in)g
-(the)g(AST)f(library)-8 b(.)55 b(Y)-8 b(ou)36 b(can)f(test)h(if)f(an)g
-(attribute)g(is)g(set)h(using)f(the)g(function)0 4447
-y(astT)-8 b(est,)32 b(whic)m(h)e(returns)f(a)i(b)s(o)s(olean)f(\(in)m
-(teger\))j(result,)d(as)h(in:)227 4673 y Ft(if)43 b(\()g(astTest\()d
-(zoommap,)h("Report")f(\))j(\))g({)358 4773 y(<the)f(Report)f
-(attribute)f(is)j(set>)227 4873 y(})0 5113 y FF(Once)31
-b(an)h(attribute)g(is)f(set,)i(y)m(ou)e(can)h(return)e(it)i(to)g(its)g
-(un-set)f(state)i(using)e(astClear.)45 b(The)31 b(e\013ect)h(is)g(as)f
-(if)0 5226 y(it)g(had)f(nev)m(er)g(b)s(een)g(set)h(in)f(the)h(\014rst)e
-(place.)42 b(F)-8 b(or)31 b(example:)227 5453 y Ft(astClear\()40
-b(zoommap,)g("Report")h(\);)0 5693 y FF(w)m(ould)30 b(ensure)g(that)h
-(the)f(default)h(v)-5 b(alue)31 b(of)f(the)h(Rep)s(ort)f(attribute)h
-(is)f(used)g(subsequen)m(tly)-8 b(.)p eop end
-%%Page: 39 49
-TeXDict begin 39 48 bop 0 52 a Fy(4.8)92 b(T)-8 b(ransforming)30
-b(Co)s(ordinates)2442 b FF(39)0 351 y Fw(4.8)112 b(T)-9
-b(ransforming)39 b(Co)s(ordinates)0 567 y FF(W)-8 b(e)28
-b(no)m(w)g(ha)m(v)m(e)g(the)f(necessary)h(apparatus)f(to)h(start)g
-(using)e(our)h(Zo)s(omMap)g(to)h(sho)m(w)f(what)g(it)h(is)f(really)h
-(for.)0 679 y(Here,)h(w)m(e)e(will)g(also)h(encoun)m(ter)g(a)g(routine)
-f(that)g(is)g(a)h(little)h(more)e(fussy)f(ab)s(out)h(the)g(t)m(yp)s(e)g
-(of)g(p)s(oin)m(ter)h(it)f(will)0 792 y(accept.)0 949
-y(The)33 b(purp)s(ose)g(of)h(a)g(Zo)s(omMap)g(is)g(to)h(m)m(ultiply)f
-(co)s(ordinates)h(b)m(y)f(a)g(constan)m(t)h(zo)s(om)g(factor.)52
-b(T)-8 b(o)35 b(witness)0 1062 y(this)30 b(in)g(action,)i(w)m(e)f(will)
-g(\014rst)e(set)i(the)g(Rep)s(ort)f(attribute)h(for)f(our)g(Zo)s(omMap)
-g(to)i(a)e(non-zero)h(v)-5 b(alue:)227 1286 y Ft(astSet\()41
-b(zoommap,)f("Report=1")g(\);)0 1524 y FF(This)32 b(b)s(o)s(olean)h
-(\(in)m(teger\))i(attribute,)f(whic)m(h)e(is)h(presen)m(t)g(in)f(all)i
-(Mappings)f(\(and)f(a)h(Zo)s(omMap)g(is)g(a)g(Map-)0
-1637 y(ping\),)28 b(causes)f(the)g(automatic)h(displa)m(y)f(of)g(all)g
-(co)s(ordinate)h(v)-5 b(alues)27 b(that)g(the)g(Mapping)g(con)m(v)m
-(erts.)41 b(It)27 b(is)f(not)0 1750 y(a)32 b(go)s(o)s(d)f(idea)h(to)g
-(lea)m(v)m(e)h(this)f(feature)f(turned)g(on)g(in)g(a)h(\014nished)d
-(program,)j(but)e(it)i(can)g(sa)m(v)m(e)h(a)f(lot)g(of)f(w)m(ork)0
-1863 y(during)e(debugging.)0 2019 y(Our)37 b(next)i(step)g(is)f(to)h
-(set)g(up)f(some)h(co)s(ordinates)g(for)f(the)h(Zo)s(omMap)g(to)g(w)m
-(ork)f(on,)j(using)d(t)m(w)m(o)i(arra)m(ys)0 2132 y(\\xin")f(and)f
-(\\yin",)k(and)c(t)m(w)m(o)i(arra)m(ys)f(to)h(receiv)m(e)g(the)f
-(transformed)f(co)s(ordinates,)k(\\xout")e(and)e(\\y)m(out".)0
-2245 y(Note)32 b(that)f(these)f(are)h(arra)m(ys)g(of)g(double,)f(as)g
-(are)h(all)g(co)s(ordinate)h(data)f(pro)s(cessed)e(b)m(y)i(the)f(AST)g
-(library:)227 2470 y Ft(double)41 b(xin[)h(10)h(])g(=)g({)h(0.0,)e
-(1.0,)f(2.0,)h(3.0,)g(4.0,)g(5.0,)g(6.0,)g(7.0,)g(8.0,)g(9.0)g(};)227
-2569 y(double)f(yin[)h(10)h(])g(=)g({)h(0.0,)e(2.0,)f(4.0,)h(6.0,)g
-(8.0,)g(10.0,)g(12.0,)f(14.0,)h(16.0,)f(18.0)h(};)227
-2669 y(double)f(xout[)h(10)h(];)227 2768 y(double)e(yout[)h(10)h(];)0
-3006 y FF(W)-8 b(e)38 b(will)g(no)m(w)f(use)g(the)g(function)g(astT)-8
-b(ran2)38 b(to)g(transform)f(the)g(input)f(co)s(ordinates.)62
-b(This)36 b(is)i(the)f(most)0 3119 y(commonly-used)32
-b(\(2-dimensional\))i(co)s(ordinate)g(transformation)e(function.)46
-b(If)32 b(y)m(ou)h(lo)s(ok)g(at)g(its)g(descrip-)0 3232
-y(tion)g(in)g(App)s(endix)e(B,)i(y)m(ou)h(will)f(see)g(that)g(it)g
-(requires)g(a)g(p)s(oin)m(ter)f(to)i(a)f(Mapping,)g(so)g(w)m(e)h
-(cannot)f(supply)0 3345 y(just)g(an)m(y)h(old)f(Ob)5
-b(ject)34 b(p)s(oin)m(ter,)g(as)g(w)m(e)g(could)f(with)g(the)h
-(functions)f(discussed)f(previously)-8 b(.)50 b(If)33
-b(w)m(e)h(passed)0 3458 y(it)d(a)g(p)s(oin)m(ter)f(to)h(an)f
-(inappropriate)h(Ob)5 b(ject,)30 b(an)h(error)f(message)h(w)m(ould)f
-(result.)0 3614 y(F)-8 b(ortunately)g(,)25 b(a)c(Zo)s(omMap)g(is)g(a)g
-(Mapping)g(\(App)s(endix)e(A\),)k(so)f(w)m(e)f(can)g(use)f(it)i(with)e
-(astT)-8 b(ran2)22 b(to)f(transform)0 3727 y(our)30 b(co)s(ordinates,)h
-(as)g(follo)m(ws:)227 3952 y Ft(astTran2\()40 b(zoommap,)g(10,)j(xin,)f
-(yin,)g(1,)g(xout,)g(yout)g(\);)0 4190 y FF(Here,)26
-b(10)e(is)g(the)g(n)m(um)m(b)s(er)e(of)i(p)s(oin)m(ts)f(w)m(e)h(w)m(an)
-m(t)h(to)f(transform)f(and)g(the)h(\014fth)f(argumen)m(t)h(v)-5
-b(alue)24 b(of)g(1)g(indicates)0 4302 y(that)31 b(w)m(e)g(w)m(an)m(t)g
-(to)g(transform)f(in)g(the)g Fx(forwar)-5 b(d)33 b FF(direction)e
-(\(from)g(input)e(to)i(output\).)0 4459 y(Because)e(our)d(Zo)s(omMap's)
-h(Rep)s(ort)g(attribute)h(is)f(set)h(to)g(1,)h(this)e(will)g(cause)h
-(the)f(e\013ects)i(of)e(the)g(Zo)s(omMap)0 4572 y(on)j(the)h(co)s
-(ordinates)g(to)g(b)s(e)f(displa)m(y)m(ed)h(on)f(the)h(standard)e
-(output)h(stream:)227 4796 y Ft(\(0,)43 b(0\))f(-->)h(\(0,)f(0\))227
-4896 y(\(1,)h(2\))f(-->)h(\(5,)f(10\))227 4996 y(\(2,)h(4\))f(-->)h
-(\(10,)f(20\))227 5095 y(\(3,)h(6\))f(-->)h(\(15,)f(30\))227
-5195 y(\(4,)h(8\))f(-->)h(\(20,)f(40\))227 5295 y(\(5,)h(10\))f(-->)g
-(\(25,)g(50\))227 5394 y(\(6,)h(12\))f(-->)g(\(30,)g(60\))227
-5494 y(\(7,)h(14\))f(-->)g(\(35,)g(70\))227 5593 y(\(8,)h(16\))f(-->)g
-(\(40,)g(80\))227 5693 y(\(9,)h(18\))f(-->)g(\(45,)g(90\))p
-eop end
-%%Page: 40 50
-TeXDict begin 40 49 bop 0 52 a FF(40)2393 b Fy(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)0 351 y FF(This)h(sho)m(ws)g(the)g(co)s
-(ordinate)i(v)-5 b(alues)32 b(of)f(eac)m(h)i(p)s(oin)m(t)e(b)s(oth)g(b)
-s(efore)g(and)g(after)h(the)f(Zo)s(omMap)h(is)f(applied.)0
-464 y(Y)-8 b(ou)33 b(can)h(see)f(that)h(eac)m(h)g(co)s(ordinate)f(v)-5
-b(alue)34 b(has)e(b)s(een)h(m)m(ultiplied)g(b)m(y)g(the)g(factor)h(5)f
-(determined)f(b)m(y)h(the)0 577 y(Zo)s(om)i(attribute)g(v)-5
-b(alue.)55 b(The)35 b(transformed)f(co)s(ordinates)i(are)f(no)m(w)g
-(stored)g(in)g(the)g(\\xout")h(and)f(\\y)m(out")0 690
-y(arra)m(ys.)0 852 y(If)c(w)m(e)h(w)m(an)m(ted)h(to)f(transform)f(in)g
-(the)h(opp)s(osite)g(direction,)h(w)m(e)f(need)f(simply)h(c)m(hange)g
-(the)g(\014fth)f(argumen)m(t)0 965 y(of)f(astT)-8 b(ran2)31
-b(from)f(1)h(to)f(0.)41 b(W)-8 b(e)32 b(can)e(also)h(feed)g(the)f
-(output)g(co)s(ordinates)h(from)e(the)i(ab)s(o)m(v)m(e)g(bac)m(k)g(in)m
-(to)g(the)0 1078 y(function:)227 1326 y Ft(astTran2\()40
-b(zoommap,)g(10,)j(xout,)e(yout,)h(0,)h(xin,)e(yin)i(\);)0
-1586 y FF(The)30 b(output)g(w)m(ould)g(then)g(lo)s(ok)h(lik)m(e:)227
-1834 y Ft(\(0,)43 b(0\))f(-->)h(\(0,)f(0\))227 1934 y(\(5,)h(10\))f
-(-->)g(\(1,)h(2\))227 2033 y(\(10,)f(20\))h(-->)f(\(2,)g(4\))227
-2133 y(\(15,)g(30\))h(-->)f(\(3,)g(6\))227 2232 y(\(20,)g(40\))h(-->)f
-(\(4,)g(8\))227 2332 y(\(25,)g(50\))h(-->)f(\(5,)g(10\))227
-2432 y(\(30,)g(60\))h(-->)f(\(6,)g(12\))227 2531 y(\(35,)g(70\))h(-->)f
-(\(7,)g(14\))227 2631 y(\(40,)g(80\))h(-->)f(\(8,)g(16\))227
-2731 y(\(45,)g(90\))h(-->)f(\(9,)g(18\))0 2991 y FF(This)35
-b(is)h(termed)f(the)h Fx(inverse)g FF(transformation)g(\(w)m(e)h(ha)m
-(v)m(e)g(con)m(v)m(erted)g(from)e(output)g(to)i(input\))e(and)g(y)m(ou)
-0 3104 y(can)c(see)g(that)g(the)f(original)i(co)s(ordinates)f(ha)m(v)m
-(e)g(b)s(een)f(reco)m(v)m(ered)i(b)m(y)e(dividing)g(b)m(y)h(the)f(Zo)s
-(om)g(factor.)0 3397 y Fw(4.9)112 b(Managing)40 b(Ob)6
-b(ject)37 b(P)m(oin)m(ters)0 3618 y FF(So)30 b(far,)f(w)m(e)i(ha)m(v)m
-(e)f(lo)s(ok)m(ed)h(at)g(creating)g(Ob)5 b(jects)29 b(and)g(using)h
-(them)f(in)h(v)-5 b(arious)29 b(simple)h(w)m(a)m(ys)g(but)f(ha)m(v)m(e)
-i(not)0 3731 y(y)m(et)h(considered)e(ho)m(w)g(to)h(get)h(rid)d(of)i
-(them)f(again.)0 3893 y(Ev)m(ery)22 b(Ob)5 b(ject)22
-b(consumes)g(v)-5 b(arious)21 b(computer)h(resources)g(\(principally)g
-(memory\))g(and)g(should)e(b)s(e)i(disp)s(osed)0 4006
-y(of)35 b(when)g(it)h(is)f(no)g(longer)h(required,)g(so)g(as)f(to)h
-(free)g(up)e(these)i(resources.)56 b(One)34 b(w)m(a)m(y)j(of)e(doing)h
-(this)f(\(not)0 4119 y(necessarily)26 b(the)f(b)s(est|)p
-Fu(x)p FF(4.10\))i(is)e(to)h Fx(annul)g FF(eac)m(h)g(Ob)5
-b(ject)25 b(p)s(oin)m(ter)g(once)h(y)m(ou)f(ha)m(v)m(e)i(\014nished)c
-(with)i(it,)i(using)0 4232 y(astAnn)m(ul.)41 b(F)-8 b(or)31
-b(example:)227 4480 y Ft(zoommap)41 b(=)i(astAnnul\()d(zoommap)h(\);)0
-4740 y FF(This)32 b(indicates)h(that)g(y)m(ou)f(ha)m(v)m(e)i
-(\014nished)d(with)h(the)g(p)s(oin)m(ter.)47 b(Since)32
-b(astAnn)m(ul)g(alw)m(a)m(ys)i(returns)d(the)i(n)m(ull)0
-4853 y(v)-5 b(alue)41 b(AST)p Fq(__)p FF(NULL)f(\(as)h(de\014ned)f(in)g
-(\\ast.h"\),)45 b(the)c(recommended)f(w)m(a)m(y)i(of)f(using)f(it,)45
-b(as)40 b(here,)k(is)d(to)0 4966 y(assign)33 b(the)g(returned)f(v)-5
-b(alue)33 b(to)g(the)g(p)s(oin)m(ter)g(b)s(eing)f(ann)m(ulled.)48
-b(This)32 b(ensures)g(that)h(an)m(y)g(attempt)h(to)g(use)0
-5079 y(the)d(p)s(oin)m(ter)f(again)h(will)g(generate)h(an)e(error)g
-(message.)0 5241 y(In)36 b(general,)41 b(this)c(pro)s(cess)g(ma)m(y)g
-(not)h(delete)g(the)g(Ob)5 b(ject,)39 b(b)s(ecause)e(there)h(ma)m(y)f
-(still)i(b)s(e)d(other)i(p)s(oin)m(ters)0 5354 y(asso)s(ciated)26
-b(with)f(it.)39 b(Ho)m(w)m(ev)m(er,)28 b(eac)m(h)e(Ob)5
-b(ject)25 b(main)m(tains)h(a)f(coun)m(t)h(of)f(the)g(n)m(um)m(b)s(er)e
-(of)i(p)s(oin)m(ters)g(asso)s(ciated)0 5467 y(with)42
-b(it)h(and)e(will)i(b)s(e)e(deleted)i(if)g(y)m(ou)f(ann)m(ul)g(the)g
-(\014nal)g(p)s(oin)m(ter.)77 b(Using)42 b(astAnn)m(ul)g(consisten)m
-(tly)i(will)0 5580 y(therefore)36 b(ensure)e(that)i(all)g(Ob)5
-b(jects)35 b(are)g(disp)s(osed)f(of)i(at)g(the)f(correct)h(time.)56
-b(Y)-8 b(ou)36 b(can)f(determine)g(ho)m(w)0 5693 y(man)m(y)30
-b(p)s(oin)m(ters)h(are)f(asso)s(ciated)i(with)e(an)h(Ob)5
-b(ject)30 b(b)m(y)g(examining)h(its)g(\(read-only\))h(RefCoun)m(t)e
-(attribute.)p eop end
-%%Page: 41 51
-TeXDict begin 41 50 bop 0 52 a Fy(4.10)93 b(AST)29 b(P)m(oin)m(ter)j
-(Con)m(texts|Begin)g(and)e(End)1860 b FF(41)0 351 y Fw(4.10)112
-b(AST)38 b(P)m(oin)m(ter)e(Con)m(texts|Begin)i(and)g(End)0
-568 y FF(The)30 b(use)g(of)g(astAnn)m(ul)h(\()p Fu(x)p
-FF(4.9\))h(is)f(not)f(completely)j(fo)s(olpro)s(of,)d(ho)m(w)m(ev)m
-(er.)42 b(Consider)30 b(the)g(follo)m(wing:)227 798 y
-Ft(astShow\()41 b(astZoomMap\()e(2,)j(5.0,)g("")h(\))g(\);)0
-1041 y FF(This)29 b(creates)i(a)f(Zo)s(omMap)g(and)f(displa)m(ys)h(it)g
-(on)g(standard)f(output)g(\()p Fu(x)p FF(4.4\).)43 b(Using)30
-b(function)g(in)m(v)m(o)s(cations)0 1154 y(as)37 b(argumen)m(ts)f(to)h
-(other)g(functions)f(in)g(this)g(w)m(a)m(y)h(is)g(v)m(ery)g(con)m(v)m
-(enien)m(t)h(b)s(ecause)e(it)h(a)m(v)m(oids)h(the)f(need)f(for)0
-1267 y(in)m(termediate)g(p)s(oin)m(ter)d(v)-5 b(ariables.)52
-b(Ho)m(w)m(ev)m(er,)37 b(the)d(p)s(oin)m(ter)g(generated)h(b)m(y)f
-(astZo)s(omMap)g(is)g(still)h(activ)m(e,)0 1380 y(and)29
-b(since)h(w)m(e)g(ha)m(v)m(e)h(not)e(stored)h(its)g(v)-5
-b(alue,)30 b(w)m(e)g(cannot)g(use)g(astAnn)m(ul)f(to)h(ann)m(ul)g(it.)
-41 b(The)29 b(Zo)s(omMap)g(will)0 1493 y(therefore)i(sta)m(y)g(around)f
-(un)m(til)g(the)h(end)f(of)g(the)h(program.)0 1651 y(A)h(simple)h(w)m
-(a)m(y)g(to)g(a)m(v)m(oid)h(this)e(problem)g(is)g(to)h(enclose)h(all)f
-(use)f(of)g(AST)g(functions)g(b)s(et)m(w)m(een)h(in)m(v)m(o)s(cations)0
-1764 y(of)e(astBegin)h(and)d(astEnd,)h(for)h(example:)227
-1994 y Ft(astBegin;)227 2093 y(astShow\()41 b(astZoomMap\()e(2,)j(5.0,)
-g("")h(\))g(\);)227 2193 y(astEnd;)0 2436 y FF(When)30
-b(the)h(expansion)f(of)g(astEnd)g(\(whic)m(h)h(is)f(a)h(macro\))g
-(executes,)h(ev)m(ery)f(Ob)5 b(ject)30 b(p)s(oin)m(ter)h(created)g
-(since)0 2549 y(the)44 b(previous)e(use)h(of)h(astBegin)h(\(also)f(a)g
-(macro\))g(is)g(automatically)i(ann)m(ulled)d(and)g(an)m(y)g(Ob)5
-b(jects)44 b(left)0 2662 y(without)37 b(p)s(oin)m(ters)f(are)i
-(deleted.)60 b(This)36 b(pro)m(vides)h(a)g(simple)g(solution)g(to)h
-(managing)f(Ob)5 b(jects)37 b(and)f(their)0 2775 y(p)s(oin)m(ters,)30
-b(and)e(allo)m(ws)j(y)m(ou)f(to)g(create)g(Ob)5 b(jects)30
-b(v)m(ery)f(freely)h(without)f(needing)g(to)h(k)m(eep)g(detailed)h
-(trac)m(k)f(of)0 2888 y(eac)m(h)d(one.)39 b(Because)27
-b(this)e(is)h(so)f(con)m(v)m(enien)m(t,)k(w)m(e)d(implicitly)g(assume)g
-(that)g(astBegin)h(and)e(astEnd)f(are)i(used)0 3001 y(in)35
-b(most)i(of)e(the)h(examples)h(giv)m(en)f(in)g(this)f(do)s(cumen)m(t.)
-57 b(P)m(oin)m(ter)37 b(managemen)m(t)g(is)f(not)g(generally)h(sho)m
-(wn)0 3114 y(explicitly)32 b(unless)e(it)h(is)f(particularly)h(relev)-5
-b(an)m(t)32 b(to)f(the)f(p)s(oin)m(t)h(b)s(eing)f(illustrated.)0
-3272 y(If)24 b(necessary)-8 b(,)27 b(astBegin)f(and)e(astEnd)g(ma)m(y)h
-(b)s(e)e(nested,)j(lik)m(e)g(blo)s(c)m(ks)f(delimited)g(b)m(y)f(\\)p
-Fu(f)p FF(.)17 b(.)e(.)g Fu(g)p FF(")26 b(in)e(C,)g(to)h(de\014ne)0
-3385 y(a)j(series)f(of)h(AST)e(p)s(oin)m(ter)h(con)m(texts.)42
-b(Eac)m(h)28 b(use)f(of)g(astEnd)g(will)g(then)g(ann)m(ul)g(only)g
-(those)h(Ob)5 b(ject)28 b(p)s(oin)m(ters)0 3498 y(created)j(since)g
-(the)g(matc)m(hing)g(use)f(of)h(astBegin.)0 3784 y Fw(4.11)112
-b(Exp)s(orting,)38 b(Imp)s(orting)f(and)i(Exempting)f(AST)f(P)m(oin)m
-(ters)0 4000 y FF(The)30 b(astExp)s(ort)h(function)g(allo)m(ws)h(y)m
-(ou)g(to)f(exp)s(ort)g(particular)g(p)s(oin)m(ters)g(from)g(one)g(AST)f
-(con)m(text)j(\()p Fu(x)p FF(4.10\))0 4113 y(to)e(the)g(next)f(outer)h
-(one,)g(as)f(follo)m(ws:)227 4343 y Ft(astExport\()40
-b(zoommap)g(\);)0 4587 y FF(This)f(w)m(ould)g(iden)m(tify)h(the)g(p)s
-(oin)m(ter)f(stored)h(in)f(\\zo)s(ommap")i(as)f(b)s(eing)f(required)g
-(after)h(the)g(end)f(of)g(the)0 4700 y(curren)m(t)34
-b(AST)f(con)m(text.)52 b(It)34 b(causes)g(an)m(y)g(p)s(oin)m(ters)g
-(nominated)g(in)f(this)h(w)m(a)m(y)h(to)f(surviv)m(e)g(the)g(next)g
-(use)f(of)0 4813 y(astEnd)c(\(but)g(only)g(one)h(suc)m(h)e(use\))i
-(unscathed,)f(so)g(that)h(they)g(are)f(a)m(v)-5 b(ailable)32
-b(to)e(the)f(next)h(outer)f(con)m(text.)0 4925 y(This)f(facilit)m(y)k
-(is)d(not)g(needed)g(often,)h(but)f(is)g(in)m(v)-5 b(aluable)30
-b(when)e(the)h(purp)s(ose)f(of)h(y)m(our)g(astBegin.)17
-b(.)f(.)f(astEnd)0 5038 y(blo)s(c)m(k)33 b(is)g(basically)h(to)g
-(generate)g(an)f(Ob)5 b(ject)33 b(p)s(oin)m(ter.)48 b(Without)33
-b(this,)h(there)f(is)g(no)g(w)m(a)m(y)g(of)g(getting)i(that)0
-5151 y(p)s(oin)m(ter)30 b(out.)0 5309 y(The)37 b(astImp)s(ort)h
-(routine)g(can)g(b)s(e)f(used)g(in)h(a)g(similar)g(manner)f(to)i(imp)s
-(ort)e(a)h(p)s(oin)m(ter)g(in)m(to)h(the)f(curren)m(t)0
-5422 y(con)m(text,)32 b(so)f(that)g(it)g(is)f(deleted)i(when)d(the)h
-(curren)m(t)h(con)m(text)h(is)e(closed)h(using)f(astEnd.)0
-5580 y(Sometimes,)36 b(y)m(ou)e(ma)m(y)g(also)h(w)m(an)m(t)f(to)h
-(exempt)f(a)g(p)s(oin)m(ter)g(from)f(all)i(the)f(e\013ects)h(of)f(AST)f
-(con)m(texts.)53 b(Y)-8 b(ou)0 5693 y(should)33 b(not)h(need)g(to)g(do)
-g(this)g(often,)h(but)e(it)h(will)h(pro)m(v)m(e)f(essen)m(tial)i(if)e
-(y)m(ou)g(ev)m(er)g(need)g(to)h(write)f(a)g(library)p
-eop end
-%%Page: 42 52
-TeXDict begin 42 51 bop 0 52 a FF(42)2393 b Fy(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)0 351 y FF(of)35 b(functions)f(that)h(stores)g
-(AST)f(p)s(oin)m(ters)g(as)h(part)f(of)h(its)g(o)m(wn)g(in)m(ternal)g
-(data.)54 b(Without)35 b(some)g(form)f(of)0 464 y(exemption,)28
-b(the)f(caller)h(of)f(y)m(our)g(routines)f(could)h(cause)g(the)g(p)s
-(oin)m(ters)g(y)m(ou)g(ha)m(v)m(e)g(stored)g(to)h(b)s(e)e(ann)m(ulled|)
-0 577 y(th)m(us)40 b(corrupting)h(y)m(our)g(in)m(ternal)g(data|simply)g
-(b)m(y)g(using)g(astEnd.)71 b(T)-8 b(o)42 b(a)m(v)m(oid)g(this,)i(y)m
-(ou)d(should)f(use)0 690 y(astExempt)31 b(on)f(eac)m(h)i(p)s(oin)m(ter)
-e(that)h(y)m(ou)g(store,)g(for)f(example:)227 926 y Ft(astExempt\()40
-b(zoommap)g(\);)0 1176 y FF(This)27 b(will)g(prev)m(en)m(t)h(the)g(p)s
-(oin)m(ter)f(b)s(eing)g(a\013ected)i(b)m(y)e(an)m(y)h(subsequen)m(t)e
-(use)h(of)h(astEnd.)39 b(Of)27 b(course,)h(it)g(then)0
-1288 y(b)s(ecomes)e(y)m(our)f(resp)s(onsibilit)m(y)h(to)g(ann)m(ul)f
-(this)g(p)s(oin)m(ter)h(\(using)f(astAnn)m(ul\))h(when)e(it)i(is)g(no)f
-(longer)h(required.)0 1577 y Fw(4.12)112 b(AST)38 b(Ob)6
-b(jects)38 b(within)f(Multi-threaded)i(Applications)0
-1795 y FF(When)26 b(the)g(AST)f(library)h(is)g(built)g(from)f(source,)j
-(the)e(build)f(pro)s(cess)h(c)m(hec)m(ks)h(to)g(see)g(if)f(the)g(POSIX)
-f(threads)0 1908 y(library)34 b(\(\\)p Fq(pthreads)p
-FF("\))f(is)h(a)m(v)-5 b(ailable.)54 b(If)33 b(so,)j(appropriate)e
-Fq(pthreads)e FF(calls)j(are)f(inserted)g(in)m(to)h(the)f(AST)0
-2021 y(source)f(co)s(de)f(to)i(ensure)d(that)i(AST)f(is)h(thread-safe,)
-g(and)f(the)h(AST)p Fq(__)p FF(THREADSAFE)e(macro)i(\(de\014ned)0
-2134 y(in)f(the)g(\\ast.h")h(header)f(\014le\))h(is)f(set)h(to)f(\\)p
-Fq(1)p FF(".)47 b(If)31 b(the)i Fq(pthreads)c FF(library)j(cannot)h(b)s
-(e)e(found)g(when)g(AST)g(is)0 2247 y(built,)c(a)f(w)m(orking)g(v)m
-(ersion)g(of)g(the)g(AST)f(library)g(will)h(still)g(b)s(e)f(created,)j
-(but)d(it)i(will)f(not)f(b)s(e)g(thread-safe.)40 b(In)0
-2360 y(this)32 b(case)h(the)f(AST)p Fq(__)p FF(THREADSAFE)f(macro)i
-(will)f(b)s(e)g(set)g(to)h(\\)p Fq(0)p FF(")g(in)e(ast.h.)46
-b(The)32 b(rest)g(of)g(this)g(section)0 2473 y(assumes)e(that)h(the)g
-(thread-safe)f(v)m(ersion)h(of)g(AST)e(is)i(b)s(eing)f(used.)0
-2632 y(Note,)g(some)f(AST)e(functions)h(call)h(externally)g(sp)s
-(eci\014ed)e(functions)h(\()p Fx(e.g.)39 b FF(the)29
-b(source)f(and)f(sink)h(functions)0 2745 y(used)36 b(b)m(y)i(the)f
-(Channel)f(class)i(or)g(the)f(graphics)g(primitiv)m(es)h(functions)f
-(used)f(b)m(y)h(the)h(Plot)g(class\).)62 b(AST)0 2858
-y(do)s(es)36 b(not)h(kno)m(w)g(whether)f(suc)m(h)h(functions)f(are)h
-(thread-safe)h(or)e(not.)61 b(F)-8 b(or)37 b(this)g(reason,)i(in)m(v)m
-(o)s(cations)f(of)0 2971 y(these)g(functions)g(within)f(a)h(m)m
-(ulti-threaded)g(en)m(vironmen)m(t)h(are)f(serialised)g(using)g(a)g(m)m
-(utex)g(in)f(order)h(to)0 3084 y(a)m(v)m(oid)32 b(t)m(w)m(o)g(or)e
-(more)h(threads)e(executing)j(an)e(external)i(function)e(sim)m
-(ultaneously)-8 b(.)0 3243 y(If)37 b(an)g(application)h(uses)f(more)g
-(than)g(one)h(thread,)h(the)e(p)s(ossibilit)m(y)h(arises)f(that)h(an)f
-(Ob)5 b(ject)37 b(created)i(b)m(y)0 3356 y(one)27 b(thread)g(ma)m(y)g
-(b)s(e)f(accessed)i(b)m(y)f(another)g(thread,)g(p)s(oten)m(tially)i
-(sim)m(ultaneously)-8 b(.)41 b(If)26 b(an)m(y)h(of)g(the)g(threads)0
-3469 y(mo)s(di\014es)h(an)m(y)h(asp)s(ect)g(of)g(the)g(Ob)5
-b(ject,)30 b(this)f(could)g(lead)g(to)g(serious)g(problems)f(within)h
-(the)g(other)g(threads.)0 3582 y(F)-8 b(or)36 b(this)f(reason,)i(some)f
-(restrictions)g(are)g(placed)g(on)f(ho)m(w)h(Ob)5 b(jects)35
-b(can)h(b)s(e)e(used)h(in)g(a)h(m)m(ulti-threaded)0 3695
-y(application.)0 3980 y FD(4.12.1)106 b(Lo)s(c)m(king)36
-b(AST)e(Ob)6 b(jects)35 b(for)g(Exclusiv)m(e)h(Use)0
-4198 y FF(The)c(basic)h(restriction)g(is)g(that)g(a)g(thread)f(can)h
-(only)g(access)h(Ob)5 b(jects)32 b(that)h(it)g(has)g(previously)f(lo)s
-(c)m(k)m(ed)i(for)0 4311 y(its)29 b(o)m(wn)f(exclusiv)m(e)i(use.)39
-b(If)28 b(a)h(thread)f(attempts)h(to)g(access)h(an)m(y)f(Ob)5
-b(ject)28 b(that)h(it)g(has)f(not)g(lo)s(c)m(k)m(ed,)j(an)d(error)0
-4424 y(is)i(rep)s(orted.)0 4584 y(The)24 b(astAnn)m(ul)g(function)f(is)
-h(the)g(one)h(exception)g(to)g(this)f(restriction.)39
-b(P)m(oin)m(ters)25 b(for)f(Ob)5 b(jects)24 b(not)g(curren)m(tly)0
-4697 y(lo)s(c)m(k)m(ed)41 b(b)m(y)e(the)h(calling)h(thread)e(can)h(b)s
-(e)e(ann)m(ulled)i(succesfully)f(using)g(astAnn)m(ul.)68
-b(This)39 b(means)g(that)h(a)0 4809 y(thread)26 b(that)i(has)e
-(\014nished)f(with)i(an)f(Ob)5 b(ject)27 b(p)s(oin)m(ter)g(can)g(unlo)s
-(c)m(k)f(the)h(Ob)5 b(ject)27 b(b)m(y)g(passing)f(the)h(p)s(oin)m(ter)g
-(to)0 4922 y(astUnlo)s(c)m(k)e(\(so)g(that)g(other)f(threads)g(can)g
-(use)g(the)g(Ob)5 b(ject)24 b(via)h(their)f(o)m(wn)g(cloned)g(p)s(oin)m
-(ters\),)i(and)d(can)i(then)0 5035 y(ann)m(ul)30 b(the)h(p)s(oin)m(ter)
-f(using)g(astAnn)m(ul.)41 b(Note,)32 b(ho)m(w)m(ev)m(er,)g(that)f(an)f
-(error)g(will)h(b)s(e)f(rep)s(orted)g(b)m(y)g(astAnn)m(ul)g(if)0
-5148 y(the)h(supplied)e(p)s(oin)m(ter)h(has)g(b)s(een)g(lo)s(c)m(k)m
-(ed)i(b)m(y)e(another)g(thread)h(using)e(astLo)s(c)m(k.)0
-5308 y(When)i(an)g(Ob)5 b(ject)31 b(is)g(created,)h(it)g(is)f
-(initially)h(lo)s(c)m(k)m(ed)h(b)m(y)e(the)g(calling)h(thread.)43
-b(Therefore)31 b(a)g(thread)g(do)s(es)0 5421 y(not)g(need)f(to)h(lo)s
-(c)m(k)g(an)g(Ob)5 b(ject)30 b(explicitly)i(if)e(it)h(w)m(as)g(created)
-g(in)f(the)h(same)g(thread.)0 5580 y(If)f(the)g(Ob)5
-b(ject)31 b(p)s(oin)m(ter)f(is)g(then)g(passed)g(to)h(another)f
-(thread,)h(the)f(\014rst)f(thread)h(m)m(ust)h(unlo)s(c)m(k)f(the)g(Ob)5
-b(ject)0 5693 y(using)30 b(astUnlo)s(c)m(k)i(and)d(the)i(second)f
-(thread)h(m)m(ust)f(then)g(lo)s(c)m(k)h(it)g(using)f(astLo)s(c)m(k.)p
-eop end
-%%Page: 43 53
-TeXDict begin 43 52 bop 0 52 a Fy(4.13)93 b(Cop)m(ying)30
-b(Ob)5 b(jects)2772 b FF(43)0 351 y(If)32 b(a)h(thread)f(attempts)i(to)
-f(lo)s(c)m(k)h(an)e(Ob)5 b(ject)33 b(that)g(is)f(already)h(lo)s(c)m(k)m
-(ed)h(b)m(y)f(another)f(thread,)i(it)f(can)f(c)m(ho)s(ose)0
-464 y(to)f(rep)s(ort)f(an)g(error)g(immediately)i(or)e(to)h(w)m(ait)h
-(un)m(til)e(the)h(Ob)5 b(ject)30 b(is)h(a)m(v)-5 b(ailable.)0
-649 y(The)32 b(astThread)g(function)g(can)h(b)s(e)f(used)g(to)h
-(determine)g(whether)f(an)g(Ob)5 b(ject)33 b(is)f(lo)s(c)m(k)m(ed)i(b)m
-(y)e(the)h(running)0 761 y(thread,)d(lo)s(c)m(k)m(ed)i(b)m(y)e(another)
-h(thread,)f(or)h(unlo)s(c)m(k)m(ed.)0 946 y(If)c(t)m(w)m(o)h(or)g(more)
-f(threads)g(need)g(sim)m(ultaneous)h(access)g(to)g(an)f(Ob)5
-b(ject,)29 b(a)e(deep)g(cop)m(y)h(of)g(the)f(Ob)5 b(ject)27
-b(should)0 1059 y(b)s(e)37 b(tak)m(en)h(for)f(eac)m(h)h(thread,)h
-(using)e(astCop)m(y)-8 b(,)41 b(and)36 b(then)h(the)h(copies)g(should)e
-(b)s(e)h(unlo)s(c)m(k)m(ed)g(and)g(passed)0 1172 y(to)f(the)f(othe)h
-(threads,)g(whic)m(h)f(should)g(then)g(lo)s(c)m(k)h(them.)55
-b(Note,)38 b(if)d(a)h(thread)f(mo)s(di\014es)f(the)h(Ob)5
-b(ject,)37 b(the)0 1285 y(mo)s(di\014cation)26 b(will)h(ha)m(v)m(e)g
-(no)f(e\013ect)i(on)e(the)g(other)h(threads,)g(b)s(ecause)f(the)g(Ob)5
-b(ject)26 b(copies)h(are)g(indep)s(enden)m(t)0 1397 y(of)k(eac)m(h)g
-(other.)0 1760 y FD(4.12.2)106 b(AST)34 b(P)m(oin)m(ter)i(Con)m(texts)0
-2013 y FF(Eac)m(h)22 b(thread)g(main)m(tains)g(its)h(o)m(wn)e(set)i(of)
-f(nested)f(AST)g(con)m(texts,)26 b(so)c(when)f(astEnd)g(is)h(called,)j
-(only)c(Ob)5 b(jects)0 2126 y(that)31 b(are)g(lo)s(c)m(k)m(ed)h(b)m(y)e
-(the)g(curren)m(t)h(thread)f(will)g(b)s(e)g(ann)m(ulled.)0
-2311 y(If)i(an)f(Ob)5 b(ject)33 b(is)f(unlo)s(c)m(k)m(ed)g(b)m(y)g(a)g
-(thread)g(using)g(astUnlo)s(c)m(k,)i(it)e(is)g(exempted)g(from)g(con)m
-(text)i(handling)d(so)0 2423 y(that)i(subsequen)m(t)f(in)m(v)m(o)s
-(cations)j(of)e(astEnd)f(will)h(not)g(cause)h(it)f(to)h(b)s(e)e(ann)m
-(ulled)g(\(this)h(is)g(similar)g(to)h(using)0 2536 y(astExempt)i(on)g
-(the)g(Ob)5 b(ject\).)57 b(When)36 b(the)g(Ob)5 b(ject)36
-b(is)f(subsequen)m(tly)h(lo)s(c)m(k)m(ed)h(b)m(y)e(another)h(thread)g
-(using)0 2649 y(astLo)s(c)m(k,)c(it)f(will)g(b)s(e)e(imp)s(orted)h(in)m
-(to)h(the)g(con)m(text)h(that)f(w)m(as)g(activ)m(e)h(when)e(astLo)s(c)m
-(k)h(w)m(as)g(called.)0 3015 y Fw(4.13)112 b(Cop)m(ying)38
-b(Ob)6 b(jects)0 3268 y FF(The)22 b(AST)g(library)g(mak)m(es)i
-(extensiv)m(e)g(use)f(of)f(p)s(oin)m(ters,)j(not)e(only)g(for)f
-(accessing)i(Ob)5 b(jects)23 b(directly)-8 b(,)26 b(but)c(also)0
-3381 y(as)31 b(a)g(means)g(of)g(storing)h(Ob)5 b(jects)30
-b(inside)h(other)g(Ob)5 b(jects)31 b(\(a)h(n)m(um)m(b)s(er)d(of)i
-(classes)h(of)f(Ob)5 b(ject)31 b(are)h(designed)0 3494
-y(to)j(hold)e(collections)k(of)d(other)g(Ob)5 b(jects\).)52
-b(Rather)34 b(than)g(cop)m(y)h(an)f(Ob)5 b(ject)34 b(in)g(its)g(en)m
-(tiret)m(y)-8 b(,)37 b(a)e(p)s(oin)m(ter)f(to)0 3607
-y(the)d(in)m(terior)g(Ob)5 b(ject)30 b(is)h(simply)f(stored)g(in)g(the)
-h(enclosing)g(Ob)5 b(ject.)0 3791 y(This)30 b(means)g(that)h(Ob)5
-b(jects)30 b(ma)m(y)h(frequen)m(tly)f(not)h(b)s(e)f(completely)i(indep)
-s(enden)m(t)d(of)h(eac)m(h)i(other)e(b)s(ecause,)0 3904
-y(for)d(instance,)i(they)e(b)s(oth)g(con)m(tain)i(p)s(oin)m(ters)e(to)h
-(the)f(same)h(sub-Ob)5 b(ject.)39 b(In)27 b(this)g(situation,)i(c)m
-(hanging)f(one)0 4017 y(Ob)5 b(ject)31 b(\(sa)m(y)g(assigning)g(an)f
-(attribute)h(v)-5 b(alue\))31 b(ma)m(y)g(a\013ect)h(the)f(other)f(one)h
-Fx(via)g FF(the)f(common)h(Ob)5 b(ject.)0 4202 y(It)32
-b(is)f(di\016cult)g(to)i(describ)s(e)e(all)h(cases)g(where)f(this)h(ma)
-m(y)g(happ)s(en,)e(so)i(y)m(ou)f(should)g(alw)m(a)m(ys)i(b)s(e)e(alert)
-h(to)g(the)0 4315 y(p)s(ossibilit)m(y)-8 b(.)40 b(F)-8
-b(ortunately)g(,)27 b(there)e(is)f(a)h(simple)f(solution.)39
-b(If)24 b(y)m(ou)g(require)g(t)m(w)m(o)i(Ob)5 b(jects)24
-b(to)h(b)s(e)e(indep)s(enden)m(t,)0 4427 y(then)30 b(simply)g(use)g
-(astCop)m(y)h(to)g(mak)m(e)h(a)e(cop)m(y)h(of)g(one,)g
-Fx(e.g:)227 4741 y Ft(AstZoomMap)40 b(*zoommap1,)f(*zoommap2;)227
-4941 y(...)227 5140 y(zoommap2)i(=)i(astCopy\()d(zoommap1)g(\);)0
-5467 y FF(This)30 b(pro)s(cess)h(will)h(create)h(a)f(true)f(cop)m(y)h
-(of)f(an)m(y)h(Ob)5 b(ject)31 b(and)g(return)f(a)i(p)s(oin)m(ter)f(to)h
-(the)g(cop)m(y)-8 b(.)44 b(This)31 b(cop)m(y)0 5580 y(will)25
-b(not)g(con)m(tain)h(an)m(y)f(p)s(oin)m(ters)f(to)h(an)m(y)g(comp)s
-(onen)m(t)g(of)g(the)g(original)h(Ob)5 b(ject)24 b(\(ev)m(erything)i
-(is)f(duplicated\),)0 5693 y(so)g(y)m(ou)g(can)h(then)e(mo)s(dify)g(it)
-i(safely)-8 b(,)27 b(without)e(fear)g(of)g(a\013ecting)i(either)e(the)h
-(original)g(or)f(an)m(y)g(other)g(Ob)5 b(ject.)p eop
-end
-%%Page: 44 54
-TeXDict begin 44 53 bop 0 52 a FF(44)2393 b Fy(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)0 351 y Fw(4.14)112 b(C)38 b(P)m(oin)m(ter)e(T)
-m(yp)s(es)0 580 y FF(A)m(t)h(this)e(p)s(oin)m(t)h(it)g(is)g(necessary)g
-(to)h(confess)f(to)g(a)g(small)h(amoun)m(t)f(of)g(deception.)57
-b(So)36 b(far,)h(w)m(e)f(ha)m(v)m(e)h(b)s(een)0 693 y(passing)32
-b(Ob)5 b(ject)33 b(p)s(oin)m(ters)f(to)h(AST)f(functions)g(in)g(order)g
-(to)h(p)s(erform)e(op)s(erations)h(on)h(those)f(Ob)5
-b(jects.)47 b(In)0 806 y(fact,)37 b(ho)m(w)m(ev)m(er,)h(what)d(w)m(e)g
-(w)m(ere)h(using)e(w)m(ere)i(not)f(true)g(C)f(functions)h(at)g(all,)j
-(but)c(merely)h(macros)h(whic)m(h)0 919 y(in)m(v)m(ok)m(e)28
-b(a)f(related)g(set)g(of)f(hidden)f(functions)g(with)h(essen)m(tially)i
-(the)f(same)f(argumen)m(ts.)40 b(In)25 b(practical)j(terms,)0
-1032 y(this)h(mak)m(es)h(v)m(ery)f(little)i(di\013erence)e(to)h(ho)m(w)
-f(y)m(ou)g(use)g(the)g(functions,)g(as)h(w)m(e)f(will)h(con)m(tin)m(ue)
-g(to)g(call)g(them.)3740 999 y Fv(9)0 1200 y FF(The)k(reason)i(for)e
-(this)h(deception)h(has)f(to)g(do)g(with)g(the)g(rules)g(for)f(data)i
-(t)m(yping)f(in)g(C.)g(Recall)i(that)e(most)0 1313 y(AST)26
-b(functions)h(can)g(b)s(e)g(used)f(to)i(pro)s(cess)e(Ob)5
-b(jects)27 b(from)g(a)g(range)h(of)f(di\013eren)m(t)g(classes)i(\()p
-Fu(x)p FF(4.3\).)41 b(In)27 b(C,)g(this)0 1426 y(means)e(passing)g
-(di\013eren)m(t)g(p)s(oin)m(ter)g(t)m(yp)s(es)g(to)h(the)f(same)g
-(function)g(and)f(most)i(C)e(compilers)i(will)f(not)g(p)s(ermit)0
-1539 y(this)f(\(at)h(least,)h(not)e(without)g(grum)m(bling\))g(b)s
-(ecause)g(it)g(usually)g(indicates)h(a)f(programming)g(error.)38
-b(In)23 b(AST,)0 1651 y(ho)m(w)m(ev)m(er,)29 b(it)f(is)g(p)s(erfectly)f
-(safe)h(if)f(done)g(prop)s(erly)-8 b(.)39 b(Some)27 b(w)m(a)m(y)h(is)f
-(therefore)h(needed)f(of)g(circum)m(v)m(en)m(ting)i(the)0
-1764 y(normal)h(compiler)h(c)m(hec)m(king.)0 1932 y(The)e(normal)g(w)m
-(a)m(y)h(of)g(doing)f(this)g(in)g(C)g(is)g(with)g(a)h(cast.)41
-b(This)29 b(approac)m(h)g(quic)m(kly)h(b)s(ecomes)g(cum)m(b)s(ersome,)0
-2045 y(ho)m(w)m(ev)m(er,)35 b(so)f(w)m(e)f(ha)m(v)m(e)i(adopted)e(the)g
-(strategy)i(of)e(wrapping)f(eac)m(h)j(function)d(in)h(a)h(macro)f(whic)
-m(h)g(applies)0 2158 y(the)i(appropriate)g(cast)h(for)e(y)m(ou.)54
-b(This)34 b(means)h(that)g(y)m(ou)g(can)h(pass)e(p)s(oin)m(ters)h(of)f
-(an)m(y)i(t)m(yp)s(e)f(to)g(an)m(y)g(AST)0 2271 y(function.)40
-b(F)-8 b(or)32 b(example,)f(in)f(passing)g(a)h(Zo)s(omMap)f(p)s(oin)m
-(ter)h(to)g(astSho)m(w:)227 2535 y Ft(AstZoomMap)40 b(*zoommap;)227
-2735 y(...)227 2934 y(zoommap)h(=)i(astZoomMap\()c(2,)k(5.0,)f("")h
-(\);)227 3034 y(astShow\()e(zoommap)f(\);)0 3311 y FF(w)m(e)g(are)h
-(exploiting)g(this)f(mec)m(hanism)g(to)h(a)m(v)m(oid)g(a)f(compiler)h
-(w)m(arning,)h(b)s(ecause)e(the)g(notional)h(t)m(yp)s(e)f(of)0
-3424 y(astSho)m(w's)31 b(parameter)g(is)f(AstOb)5 b(ject)p
-Fu(\003)31 b FF(\(not)g(AstZo)s(omMap)p Fu(\003)p FF(\).)0
-3592 y(W)-8 b(e)30 b(m)m(ust)f(still)g(guard)g(against)h(programming)e
-(errors,)h(ho)m(w)m(ev)m(er,)i(so)e(ev)m(ery)g(p)s(oin)m(ter's)g(t)m
-(yp)s(e)g(is)g(c)m(hec)m(k)m(ed)i(b)m(y)0 3705 y(the)36
-b(enclosing)g(macro)g(immediately)h(b)s(efore)e(an)m(y)h(AST)f
-(function)g(executes.)57 b(This)35 b(allo)m(ws)i(p)s(oin)m(ter)e(mis-)0
-3818 y(matc)m(hes)c(\(in)g(the)f(more)h(lib)s(eral)f(AST)g(sense|)p
-Fx(i.e.)f FF(taking)i(accoun)m(t)h(of)f(the)f(class)h(hierarc)m(h)m(y)
--8 b(,)32 b(rather)e(than)0 3931 y(the)j(stricter)h(C)e(sense\))h(to)h
-(b)s(e)e(detected)i(at)g(run-time)e(and)g(a)i(suitable)f(error)g
-(message)h(will)f(b)s(e)f(rep)s(orted.)0 4044 y(This)e(message)h
-(should)e(also)j(iden)m(tify)f(the)f(line)h(where)f(the)g(error)g(o)s
-(ccurs.)0 4212 y(A)38 b(similar)f(strategy)i(is)f(used)e(when)h(p)s
-(oin)m(ters)g(are)h(returned)e(b)m(y)i(AST)e(functions)h(\()p
-Fx(i.e.)g FF(as)h(the)g(function)0 4325 y(result\).)i(In)28
-b(this)g(case)h(the)g(p)s(oin)m(ter)f(is)g(cast)h(to)g(v)m(oid)p
-Fu(\003)p FF(,)h(although)f(w)m(e)g(retain)f(the)h(notional)g(p)s(oin)m
-(ter)f(t)m(yp)s(e)h(in)0 4438 y(the)k(function's)g(do)s(cumen)m(tation)
-h(\()p Fx(e.g.)f FF(App)s(endix)f(B\).)49 b(This)33 b(allo)m(ws)h(y)m
-(ou)g(to)g(assign)f(function)g(results)g(to)0 4550 y(p)s(oin)m(ter)f(v)
--5 b(ariables)33 b(without)f(using)f(an)h(explicit)i(cast.)47
-b(F)-8 b(or)32 b(example,)i(the)e(astRead)h(function)f(returns)f(an)0
-4663 y(Ob)5 b(ject)31 b(p)s(oin)m(ter,)f(but)g(migh)m(t)h(b)s(e)f(used)
-f(to)i(read)g(\(sa)m(y\))g(a)g(Zo)s(omMap)f(as)h(follo)m(ws:)227
-4928 y Ft(AstChannel)40 b(*channel;)227 5027 y(AstZoomMap)g(*zoommap;)
-227 5227 y(...)227 5426 y(zoommap)h(=)i(astRead\()d(channel)h(\);)p
-0 5516 1512 4 v 104 5570 a Fs(9)138 5602 y Fr(Ab)r(out)26
-b(the)f(only)i(di\013erence)f(is)h(that)e(y)n(ou)h(cannot)g(store)h(a)g
-(p)r(oin)n(ter)f(to)g(an)g(AST)g(\\function")h(in)g(a)f(v)l(ariable)h
-(and)f(use)g(the)0 5693 y(v)l(ariable's)h(v)l(alue)e(to)h(in)n(v)n(ok)n
-(e)f(that)g(function)h(again)h(later.)p eop end
-%%Page: 45 55
-TeXDict begin 45 54 bop 0 52 a Fy(4.15)93 b(Error)29
-b(Detection)2812 b FF(45)0 351 y(Strictly)-8 b(,)44 b(there)c(is)f(a)i
-(C)e(p)s(oin)m(ter)h(mis-matc)m(h)h(here,)h(but)d(it)i(is)f(ignored)f
-(b)s(ecause)h(the)g(op)s(eration)h(mak)m(es)0 464 y(p)s(erfect)30
-b(sense)h(to)g(AST.)0 625 y FD(There)47 b(is)h(an)f(imp)s(ortan)m(t)h
-(exception)g(to)f(this,)k(ho)m(w)m(ev)m(er,)g(in)c(that)g(constructor)i
-(functions)0 738 y(alw)m(a)m(ys)30 b(return)g(strongly-t)m(yp)s(ed)h(p)
-s(oin)m(ters.)39 b FF(What)27 b(w)m(e)g(mean)g(b)m(y)f(this)g(is)h
-(that)g(the)f(returned)f(p)s(oin)m(ter)0 850 y(is)38
-b(nev)m(er)h(implicitly)g(cast)g(to)g(v)m(oid)p Fu(\003)p
-FF(.)65 b(Y)-8 b(ou)39 b(m)m(ust)f(therefore)h(matc)m(h)g(p)s(oin)m
-(ter)f(t)m(yp)s(es)g(when)f(y)m(ou)i(initially)0 963
-y(create)32 b(an)e(Ob)5 b(ject)31 b(using)f(its)g(constructor,)h(suc)m
-(h)f(as)h(in)f(the)h(follo)m(wing:)227 1204 y Ft(AstZoomMap)40
-b(*zoommap;)227 1403 y(...)227 1602 y(zoommap)h(=)i(astZoomMap\()c(2,)k
-(5.0,)f("")h(\);)0 1855 y FF(If)34 b(the)g(v)-5 b(ariable)35
-b(receiving)g(the)g(p)s(oin)m(ter)f(is)g(of)g(a)h(di\013eren)m(t)f(t)m
-(yp)s(e,)i(an)e(appropriate)g(cast)h(should)e(b)s(e)h(used,)0
-1968 y(as)d(in:)227 2209 y Ft(AstMapping)40 b(*mapping;)227
-2408 y(...)227 2607 y(mapping)h(=)i(\(AstMapping)c(*\))k(astZoomMap\()c
-(2,)k(5.0,)f("")g(\);)0 2860 y FF(This)25 b(is)h(an)g(encouragemen)m(t)
-h(for)f(y)m(ou)g(to)g(declare)h(y)m(our)f(p)s(oin)m(ter)g(t)m(yp)s(es)g
-(consisten)m(tly)-8 b(,)29 b(since)d(this)f(is)h(of)g(great)0
-2973 y(b)s(ene\014t)k(to)h(an)m(y)m(one)g(trying)g(to)g(understand)d(y)
-m(our)j(soft)m(w)m(are.)0 3134 y(Finally)-8 b(,)36 b(w)m(e)e(should)f
-(also)i(mak)m(e)f(one)g(more)g(small)g(confession|AST)g(p)s(oin)m(ters)
-f(are)h(not)g(really)h(p)s(oin)m(ters)0 3247 y(at)28
-b(all.)41 b(Although)27 b(they)g(b)s(eha)m(v)m(e)h(lik)m(e)h(p)s(oin)m
-(ters,)f(the)f(actual)i(\\v)-5 b(alues")28 b(stored)f(are)h(not)f(the)h
-(addresses)e(of)i(C)0 3360 y(data)j(structures.)40 b(This)30
-b(means)g(that)h(y)m(ou)g(cannot)g(de-reference)g(an)g(AST)e(p)s(oin)m
-(ter)i(to)g(examine)g(the)g(data)0 3473 y(within)i(\(although)i(y)m(ou)
-g(can)f(use)g(astSho)m(w)g(instead|)p Fu(x)p FF(4.4\).)54
-b(This)33 b(is)h(necessary)g(so)h(that)f(AST)g(p)s(oin)m(ters)0
-3585 y(can)d(b)s(e)e(made)i(unique)e(ev)m(en)i(although)g(sev)m(eral)h
-(of)e(them)h(migh)m(t)g(reference)g(the)f(same)h(Ob)5
-b(ject.)0 3875 y Fw(4.15)112 b(Error)37 b(Detection)0
-4095 y FF(If)31 b(an)g(error)g(o)s(ccurs)g(in)g(an)g(AST)g(function)g
-(\(for)g(example,)h(if)g(y)m(ou)f(supply)f(an)h(in)m(v)-5
-b(alid)32 b(argumen)m(t,)g(suc)m(h)f(as)0 4208 y(a)h(p)s(oin)m(ter)f
-(to)i(the)e(wrong)g(class)i(of)e(Ob)5 b(ject\),)33 b(an)e(error)g
-(message)i(will)f(b)s(e)f(written)g(to)h(the)g(standard)f(error)0
-4320 y(stream)g(and)f(the)g(function)g(will)h(immediately)h(return.)0
-4481 y(T)-8 b(o)35 b(indicate)g(than)f(an)f(error)h(has)g(o)s(ccurred,)
-h(an)f(AST)f Fx(err)-5 b(or)37 b(status)f FF(v)-5 b(alue)34
-b(is)g(used.)51 b(This)34 b(in)m(teger)h(v)-5 b(alue)0
-4594 y(is)34 b(stored)g(in)m(ternally)h(b)m(y)f(AST)f(and)g(is)h
-(initially)h(clear)g(\()p Fx(i.e.)f FF(set)g(to)h(zero)2584
-4561 y Fv(10)2693 4594 y FF(to)g(indicate)g(no)f(error\).)51
-b(If)34 b(an)0 4707 y(error)f(o)s(ccurs,)h(it)f(b)s(ecomes)h(set)f(to)h
-(a)g(di\013eren)m(t)f Fx(err)-5 b(or)37 b(value)p FF(,)d(whic)m(h)f
-(allo)m(ws)h(y)m(ou)g(to)g(detect)g(the)g(error,)f(as)0
-4820 y(follo)m(ws:)227 5060 y Ft(zoommap)41 b(=)i(astZoomMap\()c(2,)k
-(5.0,)f("Title=My)e(ZoomMap")g(\);)227 5159 y(if)j(\()g(!astOK)e(\))i
-({)358 5259 y(<an)f(error)g(has)g(occurred>)227 5359
-y(})p 0 5425 1512 4 v 73 5479 a Fs(10)138 5510 y Fr(W)-6
-b(e)26 b(will)i(assume)f(throughout)f(that)g(the)g(\\OK")g(v)l(alue)g
-(is)h(zero,)h(as)f(it)f(curren)n(tly)g(is.)37 b(Ho)n(w)n(ev)n(er,)26
-b(a)h(di\013eren)n(t)f(v)l(alue)g(could,)0 5602 y(in)k(principle,)i(b)r
-(e)e(used)f(if)i(the)f(en)n(vironmen)n(t)f(in)h(whic)n(h)g(AST)g(is)g
-(running)g(requires)g(it.)48 b(This)31 b(is)f(wh)n(y)g(a)g(simple)h(in)
-n(terface)g(is)0 5693 y(pro)n(vided)25 b(to)h(isolate)h(y)n(ou)e(from)i
-(the)e(actual)h(v)l(alue)g(of)g(the)g(error)g(status.)p
-eop end
-%%Page: 46 56
-TeXDict begin 46 55 bop 0 52 a FF(46)2393 b Fy(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)0 351 y FF(The)j(macro)h(astOK)g(is)g(used)f
-(to)h(test)h(whether)e(the)g(AST)g(error)h(status)g(is)f(still)i(OK.)e
-(In)g(this)h(example)g(it)0 464 y(w)m(ould)e(not)h(b)s(e,)f(b)s(ecause)
-h(w)m(e)g(ha)m(v)m(e)g(attempted)h(to)f(set)g(a)g(v)-5
-b(alue)33 b(for)f(the)h(Title)g(attribute)g(of)g(a)f(Zo)s(omMap)0
-577 y(and)c(a)h(Zo)s(omMap)f(do)s(es)g(not)h(ha)m(v)m(e)h(suc)m(h)e(an)
-g(attribute.)41 b(The)28 b(actual)i(v)-5 b(alue)28 b(of)h(the)g(AST)e
-(error)h(status)h(can)0 690 y(b)s(e)h(obtained)g(using)g(the)h
-(astStatus)g(macro,)g(as)g(follo)m(ws:)227 948 y Ft(int)43
-b(status;)227 1148 y(...)227 1446 y(status)e(=)j(astStatus;)0
-1718 y FF(A)36 b(consequence)g(of)g(the)g(AST)f(error)g(status)h(b)s
-(eing)f(set)i(is)e(that)i(almost)f(all)h(AST)e(functions)g(will)h
-(subse-)0 1831 y(quen)m(tly)e(cease)h(to)f(function)g(and)f(will)h
-(instead)g(simply)f(return)f(without)i(action.)52 b(This)32
-b(means)i(that)g(y)m(ou)0 1944 y(do)f(not)h(need)f(to)h(use)f(astOK)h
-(to)g(c)m(hec)m(k)h(for)e(errors)g(v)m(ery)h(frequen)m(tly)-8
-b(.)50 b(Instead,)34 b(y)m(ou)g(can)g(usually)f(simply)0
-2057 y(in)m(v)m(ok)m(e)f(a)f(succession)g(of)g(AST)f(functions.)40
-b(If)31 b(an)f(error)g(o)s(ccurs)g(in)g(an)m(y)h(of)g(them,)g(the)f
-(follo)m(wing)i(ones)f(will)0 2170 y(do)f(nothing)h(and)e(y)m(ou)i(can)
-g(c)m(hec)m(k)h(for)e(the)g(error)g(at)h(the)g(end,)f(for)g(example:)
-227 2428 y Ft(astFunctionA\()38 b(...)43 b(\);)227 2527
-y(astFunctionB\()38 b(...)43 b(\);)227 2627 y(astFunctionC\()38
-b(...)43 b(\);)227 2727 y(if)g(\()g(!astOK)e(\))i({)358
-2826 y(<an)f(error)g(has)g(occurred>)227 2926 y(})0 3198
-y FF(There)c(are,)j(ho)m(w)m(ev)m(er,)h(a)c(few)g(functions)g(whic)m(h)
-g(do)g(not)h(adhere)f(to)h(this)f(general)h(rule)f(and)g(whic)m(h)g
-(will)0 3310 y(attempt)46 b(to)f(execute)h(if)e(the)h(AST)e(error)h
-(status)h(is)g(set.)83 b(These)44 b(functions,)k(suc)m(h)c(as)h(astAnn)
-m(ul,)j(are)0 3423 y(concerned)30 b(with)h(cleaning)g(up)e(and)h(reco)m
-(v)m(ering)j(resources.)40 b(F)-8 b(or)31 b(example,)h(in)e(the)g
-(follo)m(wing:)227 3682 y Ft(zoommap)41 b(=)i(astZoomMap\()c(2,)k(5.0,)
-f("")h(\);)227 3881 y(astFunctionX\()38 b(...)43 b(\);)227
-3980 y(astFunctionY\()38 b(...)43 b(\);)227 4080 y(astFunctionZ\()38
-b(...)43 b(\);)227 4279 y(zoommap)e(=)i(astAnnul\()d(zoommap)h(\);)227
-4379 y(if)i(\()g(!astOK)e(\))i({)358 4479 y(<an)f(error)g(has)g
-(occurred>)227 4578 y(})0 4850 y FF(astAnn)m(ul)30 b(will)h(execute)g
-(normally)g(in)f(order)f(to)i(reco)m(v)m(er)h(the)e(resources)h(asso)s
-(ciated)g(with)f(the)g(Zo)s(omMap)0 4963 y(that)37 b(w)m(as)f(created)h
-(earlier,)h(regardless)f(of)f(whether)f(an)h(error)g(has)f(o)s(ccurred)
-h(in)f(an)m(y)h(of)h(the)f(in)m(termedi-)0 5076 y(ate)42
-b(functions.)71 b(F)-8 b(unctions)42 b(whic)m(h)e(b)s(eha)m(v)m(e)i(in)
-e(this)h(w)m(a)m(y)h(are)f(noted)g(in)f(the)h(relev)-5
-b(an)m(t)42 b(descriptions)f(in)0 5188 y(App)s(endix)29
-b(B.)0 5354 y(If)39 b(a)g(serious)g(error)g(o)s(ccurs,)i(y)m(ou)f(will)
-f(probably)f(w)m(an)m(t)i(to)g(ab)s(ort)f(y)m(our)g(program,)j(but)c
-(sometimes)i(y)m(ou)0 5467 y(ma)m(y)31 b(w)m(an)m(t)g(to)g(reco)m(v)m
-(er)i(and)c(carry)i(on.)41 b(Because)31 b(v)m(ery)g(few)f(AST)g
-(functions)g(will)h(execute)g(once)h(the)e(AST)0 5580
-y(error)f(status)h(has)f(b)s(een)f(set,)i(y)m(ou)g(m)m(ust)f(\014rst)g
-(clear)h(this)f(status)h(b)m(y)f(using)g(the)h(astClearStatus)g(macro,)
-g(as)0 5693 y(follo)m(ws:)p eop end
-%%Page: 47 57
-TeXDict begin 47 56 bop 0 52 a Fy(4.16)93 b(Sharing)29
-b(the)i(Error)e(Status)2449 b FF(47)227 351 y Ft(astClearStatus;)0
-614 y FF(This)28 b(will)h(restore)h(the)f(AST)f(error)h(status)g(to)g
-(its)h(OK)e(v)-5 b(alue,)30 b(so)f(that)g(AST)g(functions)f(execute)i
-(normally)0 727 y(again.)0 889 y(Occasionally)-8 b(,)29
-b(y)m(ou)c(ma)m(y)g(also)h(need)f(to)h(set)f(the)g(AST)g(error)f
-(status)h(to)h(an)f(explicit)h(error)f(v)-5 b(alue)25
-b(\(see)h Fu(x)p FF(15.14)0 1002 y(for)j(an)f(example\).)41
-b(This)28 b(is)h(done)g(using)f(astSetStatus)i(and)e(can)h(b)s(e)f
-(used)g(to)i(comm)m(unicate)g(to)g(AST)e(that)0 1115
-y(an)i(error)g(has)g(o)s(ccurred)g(in)g(some)h(other)g(item)g(of)f
-(soft)m(w)m(are,)i(for)e(example:)227 1364 y Ft(int)43
-b(new_status;)227 1563 y(...)227 1763 y(astSetStatus\()38
-b(new_status)i(\);)0 2025 y FF(The)27 b(e\013ect)j(is)d(that)i(most)f
-(AST)f(routines)h(will)g(subsequen)m(tly)f(return)g(without)g(action,)j
-(just)d(as)h(if)g(an)g(error)0 2138 y(had)i(o)s(ccurred)f(within)h(the)
-h(AST)f(library)f(itself.)0 2431 y Fw(4.16)112 b(Sharing)39
-b(the)e(Error)g(Status)0 2653 y FF(In)30 b(some)g(soft)m(w)m(are,)j(it)
-d(is)h(usual)f(to)h(main)m(tain)g(a)g(single)g(in)m(teger)h(error)e
-(status)h(v)-5 b(ariable)31 b(whic)m(h)f(is)g(accessed)0
-2765 y(b)m(y)d(eac)m(h)i(function)e(as)g(it)h(executes.)41
-b(If)27 b(an)g(error)g(o)s(ccurs,)h(this)f(status)g(v)-5
-b(ariable)29 b(is)e(set)h(and)e(other)i(functions)0 2878
-y(can)j(detect)g(this)g(and)e(tak)m(e)j(appropriate)f(action.)0
-3041 y(If)h(y)m(ou)h(use)f(AST)g(in)g(suc)m(h)g(a)h(situation,)h(it)f
-(can)f(b)s(e)g(a)m(wkw)m(ard)h(to)g(ha)m(v)m(e)h(a)f(separate)g(in)m
-(ternal)g(error)f(status)0 3154 y(used)23 b(b)m(y)g(AST)f(functions)h
-(alone.)40 b(T)-8 b(o)23 b(remedy)g(this,)i(AST)e(is)g(capable)h(of)g
-(sharing)f(the)g(error)g(status)h(v)-5 b(ariable)0 3267
-y(used)26 b(b)m(y)h(an)m(y)g(other)g(soft)m(w)m(are,)j(so)d(long)g(as)g
-(they)h(use)e(the)h(same)h(con)m(v)m(en)m(tions)g(\()p
-Fx(i.e.)f FF(a)g(C)g(in)m(t)g(with)g(the)g(same)0 3380
-y(\\OK")40 b(v)-5 b(alue\).)69 b(T)-8 b(o)40 b(enable)g(this)f(facilit)
-m(y)-8 b(,)45 b(y)m(ou)40 b(should)f(pass)g(the)h(address)e(of)i(y)m
-(our)f(status)h(v)-5 b(ariable)41 b(to)0 3493 y(astW)-8
-b(atc)m(h,)33 b(as)e(follo)m(ws:)227 3742 y Ft(int)43
-b(my_status;)227 3841 y(int)g(*old_address;)227 4041
-y(...)227 4240 y(old_address)c(=)k(astWatch\()d(&my_status)g(\);)0
-4502 y FF(Henceforth,)g(instead)f(of)f(using)f(its)h(o)m(wn)g(in)m
-(ternal)h(error)e(status)h(v)-5 b(ariable,)41 b(AST)c(will)h(use)g(the)
-g(one)g(y)m(ou)0 4615 y(supply)-8 b(,)31 b(so)h(that)g(it)g(can)g
-(detect)h(errors)e(\015agged)i(b)m(y)e(other)h(parts)f(of)h(y)m(our)g
-(soft)m(w)m(are.)46 b(The)31 b(address)f(of)i(the)0 4728
-y(original)e(error)e(status)h(v)-5 b(ariable)30 b(is)f(returned)f(b)m
-(y)g(astW)-8 b(atc)m(h,)32 b(so)d(y)m(ou)g(can)g(restore)h(the)f
-(original)h(b)s(eha)m(viour)0 4841 y(later)h(if)g(necessary)-8
-b(.)0 5004 y(Note)32 b(that)f(this)f(facilit)m(y)i(is)f(not)f(a)m(v)-5
-b(ailable)33 b Fx(via)e FF(the)f(F)-8 b(ortran)31 b(in)m(terface)h(to)f
-(the)g(AST)f(library)-8 b(.)p eop end
-%%Page: 48 58
-TeXDict begin 48 57 bop 0 52 a FF(48)2393 b Fy(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)p eop end
-%%Page: 49 59
-TeXDict begin 49 58 bop 3689 52 a FF(49)0 351 y Fz(5)135
-b(In)l(ter-Relating)47 b(Co)t(ordinate)f(Systems)g(\(Mappings\))0
-627 y FF(In)37 b Fu(x)p FF(4)i(w)m(e)g(used)e(the)h(Zo)s(omMap)g(as)h
-(an)e(example)i(of)f(a)h(Mapping.)64 b(W)-8 b(e)39 b(sa)m(w)f(ho)m(w)g
-(it)h(could)f(b)s(e)f(used)h(to)0 740 y(transform)32
-b(co)s(ordinates)h(from)f(its)g(input)g(to)h(its)f(output)g(and)g(bac)m
-(k)h(again)g(\()p Fu(x)p FF(4.8\).)49 b(W)-8 b(e)34 b(also)f(sa)m(w)g
-(ho)m(w)f(its)0 853 y(b)s(eha)m(viour)37 b(could)g(b)s(e)f(con)m
-(trolled)j(b)m(y)e(setting)h(v)-5 b(arious)38 b(attributes,)h(suc)m(h)e
-(as)g(the)h(Zo)s(om)f(factor)h(and)e(the)0 966 y(Rep)s(ort)30
-b(attribute)h(that)g(made)g(it)f(displa)m(y)h(co)s(ordinate)g(v)-5
-b(alues)31 b(as)g(it)g(transformed)e(them.)0 1144 y(In)c(this)g
-(section,)j(w)m(e)e(will)f(lo)s(ok)h(at)g(Mappings)f(a)h(bit)g(more)f
-(thoroughly)h(and)e(explore)i(the)g(b)s(eha)m(viour)f(whic)m(h)0
-1257 y(is)37 b(common)h(to)g(all)g(the)f(Mappings)g(pro)m(vided)g(b)m
-(y)g(AST.)g(This)f(is)h(go)s(o)s(d)g(bac)m(kground)g(for)g(what)g
-(follo)m(ws,)0 1370 y(b)s(ecause)42 b(man)m(y)h(of)f(the)h(Ob)5
-b(jects)42 b(w)m(e)h(discuss)e(later)j(will)e(also)i(turn)d(out)i(to)g
-(b)s(e)e(Mappings)h(in)g(v)-5 b(arious)0 1483 y(disguises.)0
-1829 y Fw(5.1)112 b(The)38 b(Mapping)h(Class)0 2073 y
-FF(Before)28 b(w)m(e)g(start,)h(it)f(is)f(w)m(orth)h(taking)g(a)g(quic)
-m(k)g(lo)s(ok)g(at)g(the)g(Mapping)f(class)h(as)g(a)f(whole)h(and)f
-(some)h(of)f(the)0 2186 y(sub-classes)k(it)f(con)m(tains:)370
-2495 y Fq(Mapping)514 2608 y(CmpMap)514 2721 y(DssMap)514
-2834 y(GrismMap)514 2947 y(IntraMap)514 3060 y(LutMap)514
-3173 y(MathMap)514 3286 y(MatrixMap)514 3399 y(PermMap)514
-3512 y(PolyMap)514 3625 y(SlaMap)514 3737 y(SpecMap)514
-3850 y(TimeMap)514 3963 y(UnitMap)514 4076 y(WcsMap)514
-4189 y(ZoomMap)514 4415 y(Frame)657 4528 y(<various)45
-b(types)i(of)g(Frame>)0 4837 y FF(The)29 b(F)-8 b(rame)30
-b(sub-class)f(has)g(b)s(een)g(separated)h(out)f(here)g(b)s(ecause)h(it)
-g(is)f(co)m(v)m(ered)i(in)e(detail)h(in)f Fu(x)p FF(7.)41
-b(W)-8 b(e)31 b(start)0 4950 y(b)m(y)f(lo)s(oking)h(at)h(the)e(paren)m
-(t)h(class,)g(Mapping.)0 5128 y(AST)21 b(do)s(es)h(not)h(pro)m(vide)f
-(a)h(function)f(to)h(create)g(a)g(basic)g(Mapping)f(\()p
-Fx(i.e.)g FF(the)g(astMapping)h(constructor)g(do)s(es)0
-5241 y(not)j(exist\).)40 b(This)24 b(is)i(b)s(ecause)f(the)g(Mapping)h
-(class)g(itself)g(is)f(\\virtual")i(and)e(basic)g(Mappings)g(are)h(of)g
-(no)f(use)0 5354 y(in)e(themselv)m(es.)40 b(The)23 b(Mapping)g(class)h
-(serv)m(es)g(simply)f(to)i(con)m(tain)f(the)g(v)-5 b(arious)24
-b(sp)s(ecialised)g(Mappings)f(that)0 5467 y(exist.)41
-b(Ho)m(w)m(ev)m(er,)31 b(it)e(pro)m(vides)f(more)g(than)g(just)g(a)g
-(con)m(v)m(enien)m(t)j(heading)d(for)g(them)g(b)s(ecause)h(it)f(b)s
-(esto)m(ws)h(all)0 5580 y(classes)j(of)f(Mapping)g(with)f(common)h
-(prop)s(erties)g(\()p Fx(e.g.)f FF(attributes\))i(and)e(b)s(eha)m
-(viour.)42 b(By)31 b(examining)g(the)0 5693 y(Mapping)d(class,)i(w)m(e)
-f(are)g(therefore)g(examining)g(the)f(things)h(that)g(all)g(other)g
-(Mappings)f(ha)m(v)m(e)i(in)e(common.)p eop end
-%%Page: 50 60
-TeXDict begin 50 59 bop 0 52 a FF(50)1020 b Fy(5)92 b(INTER-RELA)-8
-b(TING)30 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(MAPPINGS\))0
-351 y Fw(5.2)112 b(The)38 b(Mapping)h(Mo)s(del)0 578
-y FF(The)32 b(concept)i(of)f(a)g(Mapping)g(w)m(as)g(illustrated)h(in)e
-(Figure)h(1.)49 b(It)33 b(is)g(a)g(blac)m(k)h(b)s(o)m(x)e(whic)m(h)h(y)
-m(ou)g(can)g(supply)0 691 y(with)d(a)h(set)g(of)g(co)s(ordinate)g(v)-5
-b(alues)31 b(in)g(return)e(for)h(a)h(set)h(of)e(transformed)g(co)s
-(ordinates.)42 b(The)30 b(t)m(w)m(o)i(sets)f(are)0 804
-y(termed)c Fx(input)g FF(and)f Fx(output)i FF(co)s(ordinates.)40
-b(Y)-8 b(ou)28 b(can)f(also)h(go)g(bac)m(k)f(the)g(other)g(w)m(a)m(y)h
-(and)f(transform)f(output)0 917 y(co)s(ordinates)31 b(bac)m(k)g(in)m
-(to)h(input)d(co)s(ordinates,)i(as)g(w)m(e)g(sa)m(w)g(in)f
-Fu(x)p FF(4.8.)0 1224 y Fw(5.3)112 b(Input)38 b(and)g(Output)g(Co)s
-(ordinate)g(Num)m(b)s(ers)0 1451 y FF(In)30 b(general,)h(the)g(n)m(um)m
-(b)s(er)e(of)h(co)s(ordinates)h(y)m(ou)g(feed)f(in)m(to)h(a)g(Mapping)f
-(to)h(represen)m(t)g(a)f(single)h(p)s(oin)m(t)g(need)0
-1564 y(not)38 b(b)s(e)f(the)h(same)g(as)g(the)g(n)m(um)m(b)s(er)f(that)
-h(comes)h(out.)63 b(Often)37 b(these)h(n)m(um)m(b)s(ers)f(will)h(b)s(e)
-f(the)h(same,)i(and)0 1677 y(often)32 b(they)h(will)f(b)s(oth)f(equal)i
-(2)f(\(b)s(ecause)g(2-dimensional)h(co)s(ordinate)g(systems)f(are)g
-(common\),)h(but)f(this)0 1790 y(needn't)e(necessarily)i(b)s(e)d(the)i
-(case.)0 1956 y(The)42 b(n)m(um)m(b)s(er)g(of)g(co)s(ordinates)i
-(required)e(to)h(sp)s(ecify)f(an)h(input)f(p)s(oin)m(t)g(is)h(represen)
-m(ted)g(b)m(y)f(the)h(in)m(teger)0 2069 y(attribute)26
-b(Nin)f(and)g(the)g(n)m(um)m(b)s(er)f(required)h(to)h(sp)s(ecify)f(an)g
-(output)g(p)s(oin)m(t)g(is)h(represen)m(ted)f(b)m(y)g(Nout.)40
-b(These)0 2182 y(are)j(read-only)f(attributes)h(common)f(to)h(all)g
-(Mappings.)76 b(Generally)-8 b(,)47 b(their)42 b(v)-5
-b(alues)43 b(are)f(\014xed)g(when)f(a)0 2295 y(Mapping)30
-b(is)h(created.)0 2462 y(In)20 b Fu(x)p FF(4.2,)25 b(w)m(e)d(sa)m(w)f
-(ho)m(w)g(the)g(Nin)g(attribute)h(for)f(a)g(Zo)s(omMap)h(w)m(as)f
-(initialised)h(b)m(y)f(the)h(call)g(to)g(the)f(constructor)0
-2575 y(function)36 b(astZo)s(omMap)i(whic)m(h)e(created)i(it.)60
-b(In)36 b(this)h(case,)i(the)e(Nout)g(attribute)h(w)m(as)f(not)g
-(needed)f(and)0 2687 y(it)i(implicitly)g(to)s(ok)g(the)g(same)f(v)-5
-b(alue)38 b(as)g(Nin,)h(but)d(w)m(e)i(could)f(ha)m(v)m(e)i(enquired)d
-(ab)s(out)h(its)h(v)-5 b(alue)37 b(had)g(w)m(e)0 2800
-y(w)m(an)m(ted,)31 b(as)g(follo)m(ws:)227 3061 y Ft(#include)41
-b("ast.h")227 3161 y(AstZoomMap)f(*zoommap;)227 3260
-y(int)j(nout;)227 3460 y(...)227 3659 y(nout)f(=)h(astGetI\()e
-(zoommap,)f("Nout")h(\);)0 3965 y Fw(5.4)112 b(F)-9 b(orw)m(ard)38
-b(and)g(In)m(v)m(erse)g(T)-9 b(ransformations)0 4193
-y FF(W)h(e)37 b(stated)g(earlier)f(that)h(a)f(Mapping)g(ma)m(y)g(b)s(e)
-f(used)g(to)i(transform)e(co)s(ordinates)h(either)h(from)e(input)g(to)0
-4306 y(output,)30 b(or)h Fx(vic)-5 b(e)32 b(versa.)41
-b FF(These)30 b(are)h(termed)f(its)h Fx(forwar)-5 b(d)33
-b FF(and)c Fx(inverse)i FF(transformations.)0 4472 y(This)f(statemen)m
-(t)i(w)m(as)f(not)g(quite)f(accurate,)j(ho)m(w)m(ev)m(er,)f(b)s(ecause)
-e(in)h(general)g(Mappings)f(are)h(only)g FD(p)s(oten-)0
-4585 y(tially)j FF(capable)h(of)f(w)m(orking)h(in)e(b)s(oth)h
-(directions.)52 b(In)34 b(practice,)i(co)s(ordinate)f(transformation)g
-(ma)m(y)f(only)0 4698 y(b)s(e)i(feasible)i(in)e(one)h(direction)h(or)f
-(the)g(other)g(b)s(ecause)g(some)g(functions)f(are)h(not)g(easily)h(in)
-m(v)m(erted)g(\(they)0 4811 y(ma)m(y)29 b(b)s(e)g(m)m(ulti-v)-5
-b(alued,)30 b(for)e(instance\).)42 b(Allo)m(w)m(ance)31
-b(m)m(ust)e(b)s(e)f(made)h(for)f(this,)i(so)f(eac)m(h)h(Mapping)f(has)f
-(t)m(w)m(o)0 4924 y(read-only)36 b(b)s(o)s(olean)g(\(in)m(teger\))i
-(attributes,)g(T)-8 b(ranF)g(orw)m(ard)36 b(and)g(T)-8
-b(ranIn)m(v)m(erse,)37 b(whic)m(h)f(indicate)h(whether)0
-5037 y(eac)m(h)32 b(transformation)e(is)h(a)m(v)-5 b(ailable.)0
-5203 y(A)29 b(transformation)h(is)f(a)m(v)-5 b(ailable)31
-b(if)e(the)g(corresp)s(onding)f(attribute)i(is)f(non-zero,)h(otherwise)
-g(it)g(is)f(not.)3604 5170 y Fv(11)3719 5203 y FF(If)0
-5316 y(y)m(ou)f(enquire)f(ab)s(out)h(the)f(v)-5 b(alue)28
-b(of)g(these)g(attributes,)h(a)f(v)-5 b(alue)28 b(of)g(0)g(or)g(1)g(is)
-g(returned.)38 b(A)m(ttempting)29 b(to)g(use)0 5429 y(a)i(Mapping)f(to)
-h(apply)f(a)h(transformation)g(whic)m(h)f(is)g(not)h(a)m(v)-5
-b(ailable)33 b(will)d(result)h(in)f(an)g(error.)p 0 5516
-1512 4 v 73 5570 a Fs(11)138 5602 y Fr(Most)23 b(of)g(the)e(Mappings)i
-(pro)n(vided)e(b)n(y)g(the)g(AST)h(library)g(w)n(ork)g(in)g(b)r(oth)g
-(directions,)i(although)e(the)f(LutMap)h(can)g(b)r(eha)n(v)n(e)0
-5693 y(otherwise.)p eop end
-%%Page: 51 61
-TeXDict begin 51 60 bop 0 52 a Fy(5.5)92 b(In)m(v)m(erting)31
-b(Mappings)2706 b FF(51)0 351 y Fw(5.5)112 b(In)m(v)m(erting)38
-b(Mappings)0 580 y FF(An)28 b(imp)s(ortan)m(t)g(attribute,)i(common)f
-(to)g(all)g(Mappings,)g(is)f(the)g(In)m(v)m(ert)h(\015ag.)41
-b(This)27 b(is)h(a)h(b)s(o)s(olean)f(\(in)m(teger\))0
-693 y(attribute)37 b(that)h(can)f(b)s(e)f(assigned)h(a)g(new)f(v)-5
-b(alue)38 b(at)f(an)m(y)g(time.)61 b(If)36 b(it)h(is)g(non-zero,)i(it)f
-(has)e(the)h(e\013ect)h(of)0 806 y(in)m(terc)m(hanging)33
-b(the)e(Mapping's)g(input)f(and)g(output)h(co)s(ordinates)h(and)e(the)h
-(Mapping)g(is)h(then)e(said)h(to)h(b)s(e)0 918 y Fx(inverte)-5
-b(d.)41 b FF(By)31 b(default,)g(the)f(In)m(v)m(ert)h(attribute)g(is)g
-(zero.)0 1086 y(There)41 b(is)g(no)g(magic)h(in)f(this.)72
-b(There)41 b(is)g(no)g(fancy)g(arithmetic)h(in)m(v)m(olv)m(ed)h(in)e
-(in)m(v)m(erting)h(mathematical)0 1199 y(functions,)32
-b(for)f(instance.)45 b(The)31 b(In)m(v)m(ert)i(\015ag)e(is)h(simply)f
-(a)h(switc)m(h)g(that)h(in)m(terc)m(hanges)g(a)f(Mapping's)f(input)0
-1312 y(and)37 b(output)g(p)s(orts.)61 b(If)37 b(it)h(is)g(non-zero,)i
-(the)d(Mapping's)h(Nin)f(and)g(Nout)h(attributes)g(are)g(sw)m(app)s
-(ed,)g(its)0 1425 y(T)-8 b(ranF)g(orw)m(ard)28 b(and)g(T)-8
-b(ranIn)m(v)m(erse)28 b(attributes)h(are)g(sw)m(app)s(ed,)f(and)f(when)
-g(y)m(ou)i(ask)g(for)f(what)g(w)m(as)g(once)h(the)0 1538
-y(forw)m(ard)h(transformation)h(y)m(ou)g(get)h(the)f(in)m(v)m(erse)h
-(transformation)f(instead)g(\(and)f Fx(vic)-5 b(e)33
-b(versa)p FF(\).)43 b(When)30 b(y)m(ou)0 1650 y(return)f(the)i(In)m(v)m
-(ert)g(attribute)g(to)g(zero,)g(or)g(clear)g(it,)g(the)g(Mapping)f
-(returns)f(to)i(its)g(original)h(b)s(eha)m(viour.)0 1818
-y(Often,)e(the)f(actual)i(v)-5 b(alue)30 b(of)g(the)f(In)m(v)m(ert)h
-(attribute)h(is)e(unimp)s(ortan)m(t)g(and)g(y)m(ou)h(simply)f(wish)f
-(to)j(in)m(v)m(ert)f(its)0 1931 y(b)s(o)s(olean)i(sense,)i(so)e(that)h
-(what)g(w)m(as)f(the)h(Mapping's)f(input)g(b)s(ecomes)h(its)f(output)g
-(and)g Fx(vic)-5 b(e)34 b(versa.)47 b FF(This)0 2044
-y(is)30 b(most)h(easily)h(accomplished)f(using)f(astIn)m(v)m(ert,)h(as)
-g(follo)m(ws:)227 2307 y Ft(AstMapping)40 b(*mapping;)227
-2506 y(...)227 2706 y(astInvert\()g(mapping)g(\);)0 2982
-y FF(If)31 b(the)h(Mapping)f(y)m(ou)h(ha)m(v)m(e)h(happ)s(ens)d(to)i(b)
-s(e)f(the)h(wrong)f(w)m(a)m(y)h(around,)f(astIn)m(v)m(ert)i(allo)m(ws)g
-(y)m(ou)f(to)g(correct)0 3095 y(the)f(problem.)0 3404
-y Fw(5.6)112 b(Finding)39 b(the)f(Rate)f(of)g(Change)i(of)f(a)f
-(Mapping)i(Output)0 3633 y FF(The)25 b(astRate)j(function)d(can)h(b)s
-(e)f(used)g(to)h(\014nd)e(the)i(rate)h(of)f(c)m(hange)g(of)g(an)m(y)g
-(Mapping)g(output)f(with)g(resp)s(ect)0 3746 y(to)39
-b(an)m(y)f(Mapping)g(input,)h(at)g(a)f(giv)m(en)h(input)e(p)s(osition.)
-64 b(The)37 b(metho)s(d)h(used)f(pro)s(duces)f(go)s(o)s(d)i(accuracy)0
-3859 y(\(t)m(ypically)d(a)f(relativ)m(e)h(error)e(of)g(10E-10)i(or)e
-(less\))h(but)e(ma)m(y)i(require)e(the)i(Mapping)f(to)g(b)s(e)g(ev)-5
-b(aluated)34 b(100)0 3972 y(or)c(more)h(times.)41 b(An)30
-b(estimate)i(of)f(the)f(second)h(deriv)-5 b(ativ)m(e)32
-b(is)e(also)h(pro)s(duced)e(b)m(y)h(this)h(function.)0
-4281 y Fw(5.7)112 b(Rep)s(orting)38 b(Co)s(ordinate)g(T)-9
-b(ransformations)0 4509 y FF(W)h(e)24 b(ha)m(v)m(e)g(already)g(seen)e
-(\()p Fu(x)p FF(4.8\))k(ho)m(w)c(the)h(b)s(o)s(olean)g(\(in)m(teger\))i
-(Rep)s(ort)e(attribute)g(of)g(a)h(Mapping)e(w)m(orks.)39
-b(If)22 b(it)0 4622 y(is)g(non-zero,)j(the)d(op)s(eration)g(of)g
-(transforming)g(a)g(set)h(of)f(co)s(ordinates)h(will)f(result)g(in)g(a)
-g(rep)s(ort)g(b)s(eing)f(written)0 4735 y(to)31 b(standard)f(output.)42
-b(This)29 b(will)i(displa)m(y)g(the)g(co)s(ordinate)h(v)-5
-b(alues)31 b(b)s(efore)f(and)g(after)h(transformation.)42
-b(It)0 4848 y(can)35 b(sa)m(v)m(e)h(considerable)f(time)g(during)e
-(program)h(dev)m(elopmen)m(t)i(b)m(y)e(eliminating)i(the)e(need)h(to)g
-(add)e(lo)s(ops)0 4961 y(and)d(output)g(statemen)m(ts)i(to)f(y)m(our)f
-(program.)0 5128 y(In)35 b(a)i(\014nished)d(program,)k(ho)m(w)m(ev)m
-(er,)h(y)m(ou)d(should)f(b)s(e)g(careful)i(that)f(the)g(Rep)s(ort)g
-(attribute)h(is)f(not)g(set)h(to)0 5241 y(a)e(non-zero)h(v)-5
-b(alue)36 b(unless)e(y)m(ou)h(w)m(an)m(t)h(to)g(see)g(the)f(output)g
-(\(there)g(ma)m(y)h(often)g(b)s(e)e(rather)h(a)g(lot)h(of)g(this!\).)0
-5354 y(T)-8 b(o)32 b(help)g(prev)m(en)m(t)g(un)m(w)m(an)m(ted)g(output)
-f(b)s(eing)h(pro)s(duced)e(b)m(y)i(acciden)m(t,)i(the)e(Rep)s(ort)f
-(attribute)i(is)e(un)m(usual)0 5467 y(in)i(that)h(its)f(v)-5
-b(alue)34 b(is)f(not)g(preserv)m(ed)g(when)f(a)i(Mapping)f(is)g(copied)
-h(using)e(astCop)m(y)i(\()p Fu(x)p FF(4.13\).)52 b(Instead,)34
-b(it)0 5580 y(rev)m(erts)d(to)g(its)g(default)g(of)f(zero)h(\()p
-Fx(i.e.)f FF(un-set\))h(in)f(the)h(cop)m(y)-8 b(.)42
-b(It)30 b(also)i(rev)m(erts)f(to)g(zero)g(when)e(a)i(Mapping)f(is)0
-5693 y(written)g(out,)h Fx(e.g.)f FF(to)h(a)g(\014le)f(using)g(a)h
-(Channel)f(\()p Fu(x)p FF(15\).)p eop end
-%%Page: 52 62
-TeXDict begin 52 61 bop 0 52 a FF(52)1020 b Fy(5)92 b(INTER-RELA)-8
-b(TING)30 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(MAPPINGS\))0
-351 y Fw(5.8)112 b(Handling)39 b(Missing)g(\(Bad\))e(Co)s(ordinate)h(V)
--9 b(alues)0 589 y FF(Ev)m(en)27 b(when)e(co)s(ordinates)i(can,)h(in)e
-(principle,)h(b)s(e)f(transformed)g(in)g(either)h(direction)g(b)m(y)f
-(a)h(Mapping,)g(there)0 701 y(ma)m(y)39 b(still)g(b)s(e)f(instances)h
-(where)f(sp)s(eci\014c)g(co)s(ordinate)i(v)-5 b(alues)39
-b(cannot)g(b)s(e)f(handled.)64 b(F)-8 b(or)39 b(example,)i(the)0
-814 y(Mapping)33 b(ma)m(y)h(b)s(e)f(mathematically)j(in)m(tractable)f
-(\()p Fx(e.g.)e FF(singular\))h(in)f(certain)h(places,)h(or)e(it)h(ma)m
-(y)g(map)f(a)0 927 y(subset)f(of)g(one)h(space)g(on)f(to)h(another,)h
-(so)f(that)g(some)f(p)s(oin)m(ts)h(in)f(one)g(space)h(are)g(not)g
-(represen)m(ted)f(in)g(the)0 1040 y(other.)43 b(Sky)31
-b(pro)5 b(jections)32 b(often)f(sho)m(w)g(this)g(b)s(eha)m(viour,)g
-(since)h(it)g(is)f(quite)g(common)h(to)g(pro)5 b(ject)31
-b(only)h(half)0 1153 y(of)38 b(the)f(celestial)j(sphere)d(on)g(to)h(t)m
-(w)m(o)h(dimensions,)f(omitting)h(p)s(oin)m(ts)e(on)g(the)h(opp)s
-(osite)g(side)f(of)g(the)h(sky)-8 b(.)0 1266 y(There)30
-b(are)h(man)m(y)f(other)h(examples.)0 1439 y(T)-8 b(o)36
-b(indicate)h(when)e(co)s(ordinates)h(cannot)h(b)s(e)e(transformed,)i
-(for)e(whatev)m(er)i(reason,)g(AST)f(substitutes)f(a)0
-1552 y(sp)s(ecial)24 b(output)f(co)s(ordinate)h(v)-5
-b(alue)23 b(giv)m(en)h(b)m(y)f(the)h(macro)f(AST)p Fq(__)p
-FF(BAD)g(\(as)h(de\014ned)e(in)h(the)g(\\ast.h")i(header)0
-1665 y(\014le\).)45 b(Before)33 b(making)f(use)f(of)h(co)s(ordinates)h
-(generated)f(b)m(y)g(an)m(y)g(of)g(the)g(AST)f(transformation)h
-(functions,)0 1778 y(therefore,)f(y)m(ou)g(ma)m(y)g(need)f(to)h(c)m
-(hec)m(k)h(for)e(the)h(presence)f(of)h(this)f(v)-5 b(alue.)0
-1952 y(Because)39 b(co)s(ordinates)f(with)f(the)g(v)-5
-b(alue)38 b(AST)p Fq(__)p FF(BAD)f(can)h(b)s(e)f(generated)h(in)f(this)
-h(w)m(a)m(y)-8 b(,)40 b(all)f(other)e(AST)0 2065 y(functions)c(are)h
-(also)g(capable)g(of)f(recognising)i(this)e(v)-5 b(alue)34
-b(and)f(handling)f(it)i(appropriately)-8 b(.)50 b(The)33
-b(co)s(ordi-)0 2178 y(nate)c(transformation)h(functions)e(do)h(this)f
-(b)m(y)h(propagating)h(an)m(y)f(missing)g(input)e(co)s(ordinate)j
-(information)0 2290 y(through)c(to)i(their)f(output.)40
-b(This)26 b(means)h(that)h(if)f(y)m(ou)g(supply)f(co)s(ordinates)i
-(with)f(the)g(v)-5 b(alue)27 b(AST)p Fq(__)p FF(BAD,)0
-2403 y(the)d(returned)f(co)s(ordinates)i(are)f(also)h(lik)m(ely)h(to)f
-(con)m(tain)g(this)f(v)-5 b(alue.)39 b(Here,)26 b(for)e(example,)i(is)e
-(what)g(happ)s(ens)0 2516 y(if)30 b(y)m(ou)h(use)f(a)h(Zo)s(omMap)f
-(\(with)h(Zo)s(om)f(factor)h(5\))g(to)g(transform)f(suc)m(h)g(a)h(set)g
-(of)f(co)s(ordinates:)227 2798 y Ft(\(0,)43 b(0\))f(-->)h(\(0,)f(0\))
-227 2897 y(\(<bad>,)f(2\))i(-->)f(\(<bad>,)f(10\))227
-2997 y(\(2,)i(4\))f(-->)h(\(10,)f(20\))227 3097 y(\(3,)h(6\))f(-->)h
-(\(15,)f(30\))227 3196 y(\(4,)h(<bad>\))e(-->)h(\(20,)g(<bad>\))227
-3296 y(\(5,)h(10\))f(-->)g(\(25,)g(50\))227 3395 y(\(<bad>,)f(<bad>\))g
-(-->)h(\(<bad>,)f(<bad>\))227 3495 y(\(7,)i(14\))f(-->)g(\(35,)g(70\))
-227 3595 y(\(8,)h(16\))f(-->)g(\(40,)g(80\))227 3694
-y(\(9,)h(18\))f(-->)g(\(45,)g(90\))0 3989 y FF(The)37
-b(AST)p Fq(__)p FF(BAD)h(v)-5 b(alue)39 b(is)f(represen)m(ted)g(b)m(y)g
-(the)g(string)g(\\)p Fo(<)p FF(bad)p Fo(>)p FF(".)63
-b(This)37 b(is)h(a)h(case)g(of)f(\\garbage)i(in,)0 4102
-y(garbage)32 b(out")f(but)e(at)i(least)h(it's)f(consisten)m(t)h
-(garbage)f(that)g(y)m(ou)g(can)g(recognise!)0 4275 y(Note)22
-b(ho)m(w)f(the)g(presence)f(of)h(the)g(AST)p Fq(__)p
-FF(BAD)f(v)-5 b(alue)22 b(in)e(one)h(input)f(dimension)g(do)s(es)g(not)
-h(necessarily)h(result)0 4388 y(in)32 b(the)h(loss)f(of)h(information)g
-(for)f(all)h(output)f(dimensions.)46 b(Sometimes,)34
-b(suc)m(h)e(loss)h(will)f(b)s(e)g(una)m(v)m(oidable,)0
-4501 y(but)21 b(in)h(general)g(an)g(attempt)h(is)f(made)g(to)g(preserv)
-m(e)g(information)g(as)g(far)g(as)g(p)s(ossible.)37 b(The)22
-b(exact)h(b)s(eha)m(viour)0 4614 y(will)31 b(dep)s(end)d(on)j(the)f
-(Mapping)h(in)m(v)m(olv)m(ed.)0 4944 y Fw(5.9)112 b(Example|the)39
-b(UnitMap)0 5181 y FF(The)31 b(UnitMap)i(is)f(the)g(simplest)g(of)g
-(Mappings.)45 b(It)32 b(is)g(a)g(n)m(ull)g(Mapping.)46
-b(Its)31 b(purp)s(ose)g(is)h(simply)f(to)i(cop)m(y)0
-5294 y(co)s(ordinate)e(v)-5 b(alues,)31 b(unaltered,)g(from)f(its)g
-(input)g(to)h(its)g(output)f(and)f Fx(vic)-5 b(e)33 b(versa.)0
-5467 y FF(A)j(UnitMap)g(has)g(no)f(additional)i(attributes)g(b)s(ey)m
-(ond)e(those)h(of)g(a)g(basic)g(Mapping.)57 b(Its)36
-b(Nin)g(and)f(Nout)0 5580 y(attributes)e(are)g(alw)m(a)m(ys)h(equal)g
-(and)e(are)h(sp)s(eci\014ed)f(b)m(y)g(the)h(\014rst)f(argumen)m(t)h
-(supplied)e(to)j(its)f(constructor.)0 5693 y(F)-8 b(or)31
-b(example:)p eop end
-%%Page: 53 63
-TeXDict begin 53 62 bop 0 52 a Fy(5.10)93 b(Example|the)30
-b(P)m(ermMap)2452 b FF(53)227 351 y Ft(AstUnitMap)40
-b(*unitmap;)227 551 y(...)227 750 y(unitmap)h(=)i(astUnitMap\()c(2,)k
-("")g(\);)0 1002 y FF(will)28 b(create)h(a)f(UnitMap)f(that)i(copies)f
-(2-dimensional)g(co)s(ordinates.)41 b(In)m(v)m(erting)28
-b(a)g(UnitMap)f(has)h(no)f(e\013ect)0 1115 y(b)s(ey)m(ond)j(c)m
-(hanging)h(the)g(v)-5 b(alue)30 b(of)h(its)g(In)m(v)m(ert)g(attribute.)
-0 1276 y(The)i(main)g(use)g(of)h(a)f(UnitMap)h(is)g(to)g(allo)m(w)h(a)e
-(Mapping)h(to)g(b)s(e)f(supplied)f(when)g(one)i(is)f(required)g(\(as)h
-(an)0 1388 y(argumen)m(t)d(to)g(a)g(function,)f(for)g(example\))i(but)d
-(y)m(ou)i(wish)f(it)g(to)i(lea)m(v)m(e)g(co)s(ordinate)g(v)-5
-b(alues)30 b(unc)m(hanged.)0 1678 y Fw(5.10)112 b(Example|the)39
-b(P)m(ermMap)0 1897 y FF(The)28 b(P)m(ermMap)g(is)h(a)f(rather)g(more)h
-(complicated)h(Mapping)e(than)g(w)m(e)h(ha)m(v)m(e)g(met)g(previously)
--8 b(.)40 b(Its)28 b(purp)s(ose)0 2010 y(is)34 b(to)g(c)m(hange)h(the)f
-(order,)h(or)f(n)m(um)m(b)s(er,)f(of)h(co)s(ordinates.)52
-b(It)34 b(is)g(also)h(able)f(to)h(substitute)e(\014xed)h(v)-5
-b(alues)34 b(for)0 2123 y(co)s(ordinates.)0 2283 y(T)-8
-b(o)41 b(illustrate)g(its)g(action,)j(supp)s(ose)39 b(our)g(input)h(co)
-s(ordinates)h(are)f(denoted)h(b)m(y)f(\()p Fo(x)2992
-2297 y Fv(1)3031 2283 y Fo(;)15 b(x)3123 2297 y Fv(2)3163
-2283 y Fo(;)g(x)3255 2297 y Fv(3)3295 2283 y Fo(;)g(x)3387
-2297 y Fv(4)3427 2283 y FF(\))40 b(in)g(a)h(4-)0 2396
-y(dimensional)27 b(space)h(and)e(supp)s(ose)g(our)g(output)h(co)s
-(ordinates)h(are)f(to)h(b)s(e)e(\()p Fo(x)2645 2410 y
-Fv(4)2685 2396 y Fo(;)15 b(x)2777 2410 y Fv(1)2817 2396
-y Fo(;)g(x)2909 2410 y Fv(2)2948 2396 y Fo(;)g(x)3040
-2410 y Fv(3)3080 2396 y FF(\).)40 b(Our)26 b(P)m(ermMap,)0
-2509 y(therefore,)31 b(should)e(rotate)j(the)f(co)s(ordinate)g(v)-5
-b(alues)31 b(b)m(y)f(one)h(p)s(osition.)0 2669 y(T)-8
-b(o)26 b(create)h(suc)m(h)e(a)h(P)m(ermMap,)h(w)m(e)f(\014rst)e(set)i
-(up)f(t)m(w)m(o)i(in)m(teger)f(arra)m(ys.)40 b(One)25
-b(of)g(these,)j(\\outp)s(erm",)e(con)m(trols)0 2782 y(the)21
-b(selection)i(of)e(input)f(co)s(ordinates)i(for)f(use)g(in)g(the)g
-(output)g(and)f(the)h(other,)j(\\inp)s(erm",)e(con)m(trols)h(selection)
-0 2895 y(of)31 b(output)f(co)s(ordinates)h(for)f(use)g(in)g(the)g
-(input:)227 3134 y Ft(int)43 b(outperm[)d(4)j(])g(=)g({)h(4,)e(1,)h(2,)
-g(3)g(};)227 3234 y(int)g(inperm[)d(4)j(])h(=)f({)g(2,)g(3,)g(4,)f(1)h
-(};)0 3487 y FF(Note)32 b(that)e(the)h(n)m(um)m(b)s(ers)d(w)m(e)j
-(store)g(in)f(these)h(arra)m(ys)f(are)h(the)f(indices)g(of)h(the)f(co)s
-(ordinates)h(that)g(w)m(e)g(w)m(an)m(t)0 3599 y(to)36
-b(select.)57 b(W)-8 b(e)36 b(ha)m(v)m(e)h(c)m(hosen)e(these)h(so)f
-(that)h(the)g(forw)m(ard)e(and)h(in)m(v)m(erse)h(transformations)f
-(will)h(p)s(erform)0 3712 y(complemen)m(tary)c(p)s(erm)m(utations)e(on)
-g(the)h(co)s(ordinates.)0 3873 y(The)f(P)m(ermMap)h(is)f(then)g
-(created)h(b)m(y)g(passing)f(these)h(arra)m(ys)g(to)g(its)f
-(constructor,)h(as)g(follo)m(ws:)227 4112 y Ft(AstPermMap)40
-b(*permmap;)227 4311 y(...)227 4510 y(permmap)h(=)i(astPermMap\()c(4,)k
-(inperm,)e(4,)h(outperm,)f(NULL,)g("")i(\);)0 4763 y
-FF(Note)32 b(that)f(w)m(e)h(sp)s(ecify)e(the)h(n)m(um)m(b)s(er)f(of)g
-(input)g(and)g(output)h(co)s(ordinates)g(separately)-8
-b(,)33 b(but)d(set)i(b)s(oth)e(to)h(4)0 4876 y(in)24
-b(this)h(example.)39 b(The)25 b(resulting)f(P)m(ermMap)i(w)m(ould)e(ha)
-m(v)m(e)i(the)f(follo)m(wing)h(e\013ect)g(when)e(used)g(to)h(transform)
-0 4989 y(co)s(ordinates:)227 5241 y Fq(Forward:)370 5354
-y(\(1,)47 b(2,)h(3,)f(4\))g(-->)g(\(4,)g(1,)g(2,)g(3\))370
-5467 y(\(2,)g(4,)h(6,)f(8\))g(-->)g(\(8,)g(2,)g(4,)g(6\))370
-5580 y(\(3,)g(6,)h(9,)f(12\))g(-->)g(\(12,)f(3,)h(6,)h(9\))370
-5693 y(\(4,)f(8,)h(12,)e(16\))h(-->)g(\(16,)g(4,)g(8,)g(12\))p
-eop end
-%%Page: 54 64
-TeXDict begin 54 63 bop 0 52 a FF(54)1020 b Fy(5)92 b(INTER-RELA)-8
-b(TING)30 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(MAPPINGS\))370
-351 y Fq(\(5,)47 b(10,)g(15,)g(20\))g(-->)g(\(20,)g(5,)g(10,)g(15\))227
-577 y(Inverse:)370 690 y(\(4,)g(1,)h(2,)f(3\))g(-->)g(\(1,)g(2,)g(3,)g
-(4\))370 803 y(\(8,)g(2,)h(4,)f(6\))g(-->)g(\(2,)g(4,)g(6,)g(8\))370
-916 y(\(12,)g(3,)g(6,)g(9\))h(-->)f(\(3,)f(6,)i(9,)f(12\))370
-1029 y(\(16,)g(4,)g(8,)g(12\))g(-->)g(\(4,)g(8,)g(12,)g(16\))370
-1142 y(\(20,)g(5,)g(10,)g(15\))g(-->)g(\(5,)g(10,)g(15,)g(20\))0
-1437 y FF(If)42 b(the)g(n)m(um)m(b)s(er)f(of)h(input)f(and)h(output)g
-(co)s(ordinates)h(are)f(unequal)g(so,)j(also,)i(will)42
-b(b)s(e)g(the)g(size)h(of)f(the)0 1550 y(\\outp)s(erm")25
-b(and)f(\\inp)s(erm")g(arra)m(ys.)39 b(This)24 b(means,)i(ho)m(w)m(ev)m
-(er,)i(that)d(w)m(e)g(cannot)h(\014ll)e(them)h(with)g(co)s(ordinate)0
-1663 y(indices)i(so)h(that)f(they)g(p)s(erform)f(complemen)m(tary)i(p)s
-(erm)m(utations,)g(b)s(ecause)f(one)h(transformation)f(will)h(lose)0
-1776 y(information)i(\(discard)g(a)g(co)s(ordinate\))g(that)h(the)f
-(other)f(cannot)i(reco)m(v)m(er.)42 b(T)-8 b(o)30 b(giv)m(e)h(an)f
-(example,)h(consider)0 1889 y(the)g(follo)m(wing:)227
-2171 y Ft(int)43 b(outperm[)d(3)j(])g(=)g({)h(4,)e(3,)h(2)g(};)227
-2271 y(int)g(inperm[)d(4)j(])h(=)f({)g(-1,)f(3,)h(2,)g(1)g(};)227
-2370 y(double)e(con[)h(1)h(])h(=)f({)g(99.004)e(};)0
-2666 y FF(In)g(this)h(case,)k(the)d(forw)m(ard)e(transformation)h(will)
-h(c)m(hange)g(\()p Fo(x)2274 2680 y Fv(1)2313 2666 y
-Fo(;)15 b(x)2405 2680 y Fv(2)2445 2666 y Fo(;)g(x)2537
-2680 y Fv(3)2577 2666 y Fo(;)g(x)2669 2680 y Fv(4)2709
-2666 y FF(\))42 b(in)m(to)h(\()p Fo(x)3069 2680 y Fv(4)3109
-2666 y Fo(;)15 b(x)3201 2680 y Fv(3)3241 2666 y Fo(;)g(x)3333
-2680 y Fv(2)3372 2666 y FF(\))43 b(and)e(will)0 2779
-y(discard)31 b Fo(x)367 2793 y Fv(1)406 2779 y FF(.)43
-b(The)30 b(in)m(v)m(erse)i(transformation)g(restores)f(the)h(original)g
-(co)s(ordinate)g(order,)f(but)f(has)h(no)g(v)-5 b(alue)0
-2892 y(to)31 b(assign)g(to)g(the)f(\014rst)g(co)s(ordinate.)42
-b(In)29 b(this)i(case,)g(the)g(n)m(um)m(b)s(er)e(en)m(tered)i(in)f(the)
-g(\\inp)s(erm")g(arra)m(y)h(is)g Fu(\000)p FF(1.)0 3065
-y(This)36 b(negativ)m(e)i(v)-5 b(alue)37 b(indicates)h(that)f(the)g(co)
-s(ordinate)g(v)-5 b(alue)37 b(should)e(b)s(e)h(obtained)h(b)m(y)f
-(addressing)g(the)0 3178 y(\014rst)26 b(elemen)m(t)i(of)f(the)g(\\con")
-h(arra)m(y)f(\()p Fx(i.e.)g FF(elemen)m(t)h(zero\).)41
-b(This)25 b(arra)m(y)-8 b(,)29 b(ignored)e(in)f(the)h(previous)g
-(example,)0 3291 y(ma)m(y)k(then)f(b)s(e)g(used)f(to)i(supply)e(a)i(v)
--5 b(alue)31 b(for)f(the)h(missing)f(co)s(ordinate.)0
-3465 y(The)g(constructor)h(function:)227 3747 y Ft(permmap)41
-b(=)i(astPermMap\()c(4,)k(inperm,)e(3,)h(outperm,)f(con,)h("")g(\);)0
-4043 y FF(will)31 b(then)f(create)i(a)e(P)m(ermMap)h(with)f(the)h
-(follo)m(wing)h(e\013ect)g(when)d(used)h(to)h(transform)e(co)s
-(ordinates:)227 4338 y Fq(Forward:)370 4451 y(\(1,)47
-b(2,)h(3,)f(4\))g(-->)g(\(4,)g(3,)g(2\))370 4564 y(\(2,)g(4,)h(6,)f
-(8\))g(-->)g(\(8,)g(6,)g(4\))370 4677 y(\(3,)g(6,)h(9,)f(12\))g(-->)g
-(\(12,)f(9,)h(6\))370 4790 y(\(4,)g(8,)h(12,)e(16\))h(-->)g(\(16,)g
-(12,)g(8\))370 4903 y(\(5,)g(10,)g(15,)g(20\))g(-->)g(\(20,)g(15,)g
-(10\))227 5128 y(Inverse:)370 5241 y(\(4,)g(3,)h(2\))f(-->)g(\(99.004,)
-e(2,)i(3,)h(4\))370 5354 y(\(8,)f(6,)h(4\))f(-->)g(\(99.004,)e(4,)i(6,)
-h(8\))370 5467 y(\(12,)f(9,)g(6\))g(-->)g(\(99.004,)f(6,)h(9,)g(12\))
-370 5580 y(\(16,)g(12,)g(8\))g(-->)g(\(99.004,)f(8,)h(12,)g(16\))370
-5693 y(\(20,)g(15,)g(10\))g(-->)g(\(99.004,)e(10,)i(15,)g(20\))p
-eop end
-%%Page: 55 65
-TeXDict begin 55 64 bop 0 52 a Fy(5.10)93 b(Example|the)30
-b(P)m(ermMap)2452 b FF(55)0 351 y(The)32 b(\\con")h(arra)m(y)g(ma)m(y)f
-(con)m(tain)i(more)e(than)g(one)h(v)-5 b(alue)32 b(if)g(necessary)h
-(and)f(ma)m(y)g(b)s(e)g(addressed)f(b)m(y)h(b)s(oth)0
-464 y(the)k(\\inp)s(erm")f(and)g(\\outp)s(erm")h(arra)m(ys)g(using)g
-(co)s(ordinate)g(indices)g Fu(\000)p FF(1,)i Fu(\000)p
-FF(2,)f Fu(\000)p FF(3,)f Fx(etc.)g FF(to)g(refer)g(to)g(the)0
-577 y(\014rst,)30 b(second,)h(third,)e Fx(etc.)h FF(elemen)m(ts.)0
-740 y(If)25 b(there)h(is)g(no)g(suitable)g(replacemen)m(t)h(v)-5
-b(alue)27 b(that)f(can)g(b)s(e)f(supplied)g Fx(via)g
-FF(the)h(\\con")h(arra)m(y)-8 b(,)28 b(a)e(v)-5 b(alue)27
-b(of)f(zero)0 853 y(ma)m(y)i(b)s(e)f(en)m(tered)h(in)m(to)h(the)f
-(\\outp)s(erm")f(and/or)h(\\inp)s(erm")f(arra)m(ys.)40
-b(This)27 b(causes)h(the)g(v)-5 b(alue)28 b(AST)p Fq(__)p
-FF(BAD)0 966 y(to)34 b(b)s(e)f(used)g(for)g(the)h(a\013ected)h(co)s
-(ordinate)g(\(as)f(de\014ned)e(in)h(the)h(\\ast.h")h(header)e
-(\014le\),)i(th)m(us)f(indicating)g(a)0 1079 y(missing)c(co)s(ordinate)
-h(v)-5 b(alue)31 b(\()p Fu(x)p FF(5.8\).)0 1241 y(The)k(principle)g
-(use)f(for)h(a)h(P)m(ermMap)g(lies)g(in)e(matc)m(hing)j(a)e(co)s
-(ordinate)h(system)g(to)g(a)f(data)h(arra)m(y)g(where)0
-1354 y(there)25 b(is)f(a)h(c)m(hoice)h(of)f(storage)h(order)e(for)g
-(the)h(data.)39 b(P)m(ermMaps)25 b(are)g(also)g(useful)f(for)g
-(discarding)g(un)m(w)m(an)m(ted)0 1467 y(co)s(ordinates)34
-b(so)f(as)g(to)h(reduce)f(the)g(n)m(um)m(b)s(er)f(of)h(dimensions,)h
-(suc)m(h)f(as)g(when)f(selecting)j(a)e(\\slice")i(from)e(a)0
-1580 y(m)m(ulti-dimensional)e(arra)m(y)-8 b(.)p eop end
-%%Page: 56 66
-TeXDict begin 56 65 bop 0 52 a FF(56)1020 b Fy(5)92 b(INTER-RELA)-8
-b(TING)30 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(MAPPINGS\))p
-eop end
-%%Page: 57 67
-TeXDict begin 57 66 bop 3689 52 a FF(57)0 351 y Fz(6)135
-b(Comp)t(ound)44 b(Mappings)h(\(CmpMaps\))0 602 y FF(W)-8
-b(e)45 b(no)m(w)g(turn)e(to)i(a)g(rather)f(sp)s(ecial)h(form)e(of)i
-(Mapping,)j(the)c(CmpMap.)82 b(The)43 b(Mappings)i(w)m(e)f(ha)m(v)m(e)0
-715 y(considered)h(so)g(far)f(ha)m(v)m(e)i(b)s(een)e(atomic,)50
-b(in)45 b(the)f(sense)h(that)g(they)g(p)s(erform)f(pre-de\014ned)f
-(elemen)m(tary)0 828 y(transformations.)k(A)32 b(CmpMap,)h(ho)m(w)m(ev)
-m(er,)h(is)e(a)h(comp)s(ound)e(Mapping.)47 b(In)31 b(essence,)j(it)f
-(is)g(a)f(framew)m(ork)0 941 y(for)h(con)m(taining)h(other)f(Mappings)g
-(and)f(its)i(purp)s(ose)d(is)i(to)g(allo)m(w)i(those)e(Mappings)g(to)g
-(w)m(ork)g(together)i(in)0 1053 y(v)-5 b(arious)34 b(com)m(binations)h
-(while)g(app)s(earing)e(as)i(a)f(single)h(Ob)5 b(ject.)52
-b(A)35 b(CmpMap's)e(b)s(eha)m(viour)h(is)g(therefore)0
-1166 y(not)d(pre-de\014ned,)e(but)g(is)i(determined)f(b)m(y)g(the)h
-(other)f(Mappings)h(it)f(con)m(tains.)0 1456 y Fw(6.1)112
-b(Com)m(bining)39 b(Mappings)g(in)f(Series)0 1676 y FF(Consider)f(a)h
-(simple)g(example)g(based)g(on)f(t)m(w)m(o)i(2-dimensional)g(co)s
-(ordinate)g(systems.)62 b(Supp)s(ose)36 b(that)j(to)0
-1789 y(con)m(v)m(ert)28 b(from)e(one)g(to)h(the)f(other)h(w)m(e)g(m)m
-(ust)f(sw)m(ap)g(the)g(co)s(ordinate)h(order)f(and)g(m)m(ultiply)g(b)s
-(oth)g(co)s(ordinates)0 1902 y(b)m(y)i(5,)i(so)e(that)i(the)e(co)s
-(ordinates)h(\()p Fo(x)1251 1916 y Fv(1)1291 1902 y Fo(;)15
-b(x)1383 1916 y Fv(2)1423 1902 y FF(\))29 b(transform)e(in)m(to)j(\(5)p
-Fo(x)2217 1916 y Fv(2)2257 1902 y Fo(;)15 b FF(5)p Fo(x)2394
-1916 y Fv(1)2434 1902 y FF(\).)41 b(This)27 b(can)i(b)s(e)f(done)g(in)g
-(t)m(w)m(o)i(stages:)111 2155 y(1.)46 b(Apply)30 b(a)h(P)m(ermMap)f(\()
-p Fu(x)p FF(5.10\))j(to)f(sw)m(ap)e(the)g(co)s(ordinate)i(order.)111
-2341 y(2.)46 b(Apply)30 b(a)h(Zo)s(omMap)f(\()p Fu(x)p
-FF(4.8\))j(to)e(m)m(ultiply)f(b)s(oth)g(co)s(ordinate)h(v)-5
-b(alues)31 b(b)m(y)f(the)h(constan)m(t)g(5.)0 2594 y(The)44
-b(P)m(ermMap)h(and)f(Zo)s(omMap)h(are)g(then)g(said)f(to)i(op)s(erate)f
-Fx(in)h(series,)i FF(b)s(ecause)d(they)g(are)g(applied)0
-2707 y(sequen)m(tially)32 b(\()p Fx(c.f.)f FF(Figure)g(2\).)43
-b(W)-8 b(e)32 b(can)f(create)h(a)g(CmpMap)d(that)j(applies)f(these)g
-(Mappings)g(in)f(series)h(as)0 2820 y(follo)m(ws:)227
-3060 y Ft(#include)41 b("ast.h")227 3160 y(AstCmpMap)f(*cmpmap;)227
-3260 y(AstPermMap)g(*permmap;)227 3359 y(AstZoomMap)g(*zoommap;)227
-3559 y(...)227 3758 y(/*)j(Create)e(the)h(individual)e(Mappings.)g(*/)
-227 3857 y({)358 3957 y(int)i(inperm[)f(2)i(])g(=)h({)f(2,)g(1)g(};)358
-4057 y(int)f(outperm[)f(2)i(])g(=)g({)g(2,)g(1)g(};)358
-4156 y(permmap)e(=)i(astPermMap\()c(2,)k(inperm,)d(2,)j(outperm,)d
-(NULL,)i("")h(\);)227 4256 y(})227 4356 y(zoommap)e(=)i(astZoomMap\()c
-(2,)k(5.0,)f("")h(\))227 4555 y(/*)g(Combine)e(them)h(in)g(series.)f
-(*/)227 4654 y(cmpmap)g(=)j(astCmpMap\()39 b(permmap,)h(zoommap,)h(1,)h
-("")h(\);)227 4854 y(/*)g(Annul)f(the)g(individual)d(Mapping)i
-(pointers.)f(*/)227 4953 y(permmap)h(=)i(astAnnul\()d(permmap)h(\);)227
-5053 y(zoommap)g(=)i(astAnnul\()d(zoommap)h(\);)0 5307
-y FF(Here,)31 b(the)g(third)e(argumen)m(t)i(\(1\))h(of)e(the)h
-(constructor)f(function)g(astCmpMap)h(indicates)g(\\in)f(series".)0
-5467 y(When)e(used)f(to)i(transform)e(co)s(ordinates)i(in)f(the)g(forw)
-m(ard)f(direction,)j(the)e(resulting)g(CmpMap)f(will)i(apply)0
-5580 y(the)i(\014rst)f(comp)s(onen)m(t)i(Mapping)f(\(the)g(P)m
-(ermMap\))h(and)e(then)h(the)g(second)g(one)g(\(the)h(Zo)s(omMap\).)43
-b(When)0 5693 y(transforming)29 b(in)g(the)g(in)m(v)m(erse)h
-(direction,)h(it)e(will)h(apply)f(the)g(second)g(one)h(\(in)f(the)h(in)
-m(v)m(erse)g(direction\))g(and)p eop end
-%%Page: 58 68
-TeXDict begin 58 67 bop 0 52 a FF(58)1891 b Fy(6)91 b(COMPOUND)31
-b(MAPPINGS)f(\(CMPMAPS\))0 351 y FF(then)40 b(the)g(\014rst)f(one)h
-(\(also)h(in)f(the)g(in)m(v)m(erse)h(direction\).)70
-b(In)40 b(general,)j(although)e(not)f(in)f(this)h(particular)0
-464 y(example,)c(the)e(order)f(in)h(whic)m(h)g(the)g(t)m(w)m(o)h(comp)s
-(onen)m(t)f(Mappings)g(are)g(supplied)f(is)h(signi\014can)m(t.)52
-b(Clearly)-8 b(,)0 577 y(also,)37 b(the)d(Nout)h(attribute)h(\(n)m(um)m
-(b)s(er)d(of)i(output)f(co)s(ordinates\))i(for)e(the)h(\014rst)e
-(Mapping)i(m)m(ust)f(equal)h(the)0 690 y(Nin)30 b(attribute)h(\(n)m(um)
-m(b)s(er)f(of)g(input)g(co)s(ordinates\))h(for)f(the)h(second)f(one.)0
-984 y Fw(6.2)112 b(Com)m(bining)39 b(Mappings)g(in)f(P)m(arallel)0
-1205 y FF(Connecting)21 b(t)m(w)m(o)i(Mappings)e(in)f(series)h(\()p
-Fu(x)p FF(6.1\))j(is)d(not)g(the)g(only)g(w)m(a)m(y)h(of)f(com)m
-(bining)h(them.)37 b(The)21 b(alternativ)m(e,)0 1318
-y Fx(in)27 b(p)-5 b(ar)g(al)5 b(lel,)27 b FF(in)m(v)m(olv)m(es)f
-(applying)e(the)g(t)m(w)m(o)h(Mappings)f(at)h(once)g(but)e(on)h
-(di\013eren)m(t)g(subsets)f(of)h(the)h(co)s(ordinate)0
-1431 y(v)-5 b(alues.)0 1594 y(Consider,)40 b(for)f(example,)j(a)d(set)h
-(of)f(3-dimensional)h(co)s(ordinates)f(and)g(supp)s(ose)e(w)m(e)i(wish)
-g(to)g(transform)0 1707 y(them)d(b)m(y)h(sw)m(apping)f(the)g(\014rst)g
-(t)m(w)m(o)i(co)s(ordinate)f(v)-5 b(alues)36 b(and)g(m)m(ultiplying)h
-(the)g(\014nal)f(one)g(b)m(y)h(5,)h(so)f(that)0 1820
-y(\()p Fo(x)87 1834 y Fv(1)127 1820 y Fo(;)15 b(x)219
-1834 y Fv(2)259 1820 y Fo(;)g(x)351 1834 y Fv(3)390 1820
-y FF(\))29 b(transforms)e(in)m(to)i(\()p Fo(x)1174 1834
-y Fv(2)1214 1820 y Fo(;)15 b(x)1306 1834 y Fv(1)1346
-1820 y Fo(;)g FF(5)p Fo(x)1483 1834 y Fv(3)1523 1820
-y FF(\).)40 b(Again,)30 b(w)m(e)e(can)h(p)s(erform)e(eac)m(h)i(of)f
-(these)h(steps)f(individually)0 1932 y(using)34 b(exactly)j(the)d(same)
-i(P)m(ermMap)f(and)f(Zo)s(omMap)g(as)h(used)f(earlier)i(\()p
-Fu(x)p FF(6.1\).)55 b(In)34 b(this)h(case,)i(ho)m(w)m(ev)m(er,)0
-2045 y(these)31 b(individual)f(Mappings)g(are)h(applied)f(in)g
-(parallel)h(\()p Fx(c.f.)f FF(Figure)h(3\).)0 2208 y(Creating)g(a)g
-(CmpMap)e(for)h(this)h(purp)s(ose)d(is)j(also)g(v)m(ery)g(simple:)227
-2457 y Ft(cmpmap)41 b(=)j(astCmpMap\()39 b(permmap,)h(zoommap,)h(0,)h
-("")h(\);)0 2720 y FF(The)24 b(only)g(di\013erence)h(is)f(that)h(the)f
-(third)f(argumen)m(t)i(of)f(astCmpMap)g(is)g(no)m(w)g(zero,)j(meaning)d
-(\\in)h(parallel".)0 2883 y(As)j(b)s(efore,)g(the)g(order)f(in)g(whic)m
-(h)h(the)g(t)m(w)m(o)h(comp)s(onen)m(t)f(Mappings)f(are)h(supplied)f
-(is)g(signi\014can)m(t.)41 b(The)27 b(\014rst)0 2996
-y(one)j(acts)g(on)g(the)f(lo)m(w)m(er-n)m(um)m(b)s(ered)h(input)f(co)s
-(ordinate)h(v)-5 b(alues)30 b(\(ho)m(w)m(ev)m(er)h(man)m(y)e(it)h
-(needs\))g(and)f(pro)s(duces)0 3109 y(the)d(lo)m(w)m(er-n)m(um)m(b)s
-(ered)g(output)f(co)s(ordinates,)i(while)f(the)g(second)f(Mapping)h
-(acts)h(on)e(the)h(higher-n)m(um)m(b)s(ered)0 3222 y(input)f(co)s
-(ordinates)i(\(ho)m(w)m(ev)m(er)h(man)m(y)e(remain\))h(and)f(generates)
-h(the)g(remaining)f(higher-n)m(um)m(b)s(ered)f(output)0
-3335 y(co)s(ordinates.)48 b(When)32 b(the)h(CmpMap)e(transforms)h(co)s
-(ordinates)h(in)f(the)h(in)m(v)m(erse)g(direction,)h(b)s(oth)e(comp)s
-(o-)0 3447 y(nen)m(t)f(Mappings)f(are)g(applied)h(to)g(the)f(same)h(co)
-s(ordinates,)g(but)f(in)g(the)h(in)m(v)m(erse)g(direction.)0
-3610 y(Note)j(that)f(the)g(Nin)f(and)g(Nout)h(attributes)h(of)e(the)h
-(comp)s(onen)m(t)g(Mappings)f(\()p Fx(i.e.)h FF(the)g(n)m(um)m(b)s(ers)
-e(of)h(input)0 3723 y(and)e(output)g(co)s(ordinates\))h(will)g(sum)e
-(to)i(giv)m(e)h(the)f(Nin)f(and)g(Nout)h(attributes)g(of)f(the)h(o)m(v)
-m(erall)h(CmpMap.)0 4017 y Fw(6.3)112 b(The)38 b(Comp)s(onen)m(t)g
-(Mappings)0 4238 y FF(A)24 b(CmpMap)f(do)s(es)g(not)h(store)g(copies)h
-(of)f(its)g(comp)s(onen)m(t)g(Mappings,)h(but)e(simply)g(holds)g(p)s
-(oin)m(ters)h(to)g(them.)0 4351 y(In)e(the)h(example)g(ab)s(o)m(v)m(e)h
-(\()p Fu(x)p FF(6.1\),)j(w)m(e)c(w)m(ere)g(free)g(to)g(ann)m(ul)g(the)g
-(individual)f(Mapping)g(p)s(oin)m(ters)h(after)g(creating)0
-4464 y(the)j(CmpMap)e(b)s(ecause)i(the)f(p)s(oin)m(ters)h(held)f(in)m
-(ternally)h(b)m(y)f(the)h(CmpMap)f(increased)g(the)h(reference)g(coun)m
-(t)0 4577 y(\(RefCoun)m(t)46 b(attribute\))g(of)g(eac)m(h)h(comp)s
-(onen)m(t)e(Mapping)h(b)m(y)f(one.)87 b(The)45 b(individual)f(comp)s
-(onen)m(ts)i(are)0 4690 y(therefore)33 b(not)g(deleted)g(b)m(y)g
-(astAnn)m(ul,)g(but)f(retained)h(un)m(til)g(the)g(CmpMap)f(itself)h(is)
-g(deleted)g(and)f(ann)m(uls)0 4803 y(the)39 b(p)s(oin)m(ters)h(it)f
-(holds.)67 b(Consisten)m(t)40 b(use)f(of)h(astAnn)m(ul)f(\()p
-Fu(x)p FF(4.9\))j(and/or)d(p)s(oin)m(ter)g(con)m(texts)i(\()p
-Fu(x)p FF(4.10\))h(will)0 4916 y(therefore)31 b(ensure)e(that)i(all)h
-(Ob)5 b(jects)30 b(are)h(deleted)g(at)g(the)g(appropriate)f(time.)0
-5079 y(Note)f(that)f(access)h(to)f(a)g(CmpMap's)e(comp)s(onen)m(t)i
-(Mappings)f(is)h(not)f(generally)i(a)m(v)-5 b(ailable)30
-b(unless)d(p)s(oin)m(ters)0 5191 y(to)22 b(them)f(are)h(retained)g
-(when)e(the)h(CmpMap)g(is)g(created.)39 b(If)21 b(suc)m(h)g(p)s(oin)m
-(ters)g(are)g(retained,)j(then)d(subsequen)m(t)0 5304
-y(mo)s(di\014cations)35 b(to)g(the)f(individual)g(comp)s(onen)m(ts)h
-(can)g(b)s(e)e(used)h(to)h(indirectly)g(mo)s(dify)f(the)g(b)s(eha)m
-(viour)g(of)0 5417 y(the)d(o)m(v)m(erall)h(CmpMap.)0
-5580 y(There)22 b(is)h(an)g(imp)s(ortan)m(t)g(exception)h(to)g(this,)g
-(ho)m(w)m(ev)m(er,)i(b)s(ecause)d(a)g(CmpMap)f(retains)h(a)h(cop)m(y)f
-(of)g(the)g(initial)0 5693 y(In)m(v)m(ert)33 b(\015ag)f(settings)h(of)g
-(eac)m(h)g(of)f(its)h(comp)s(onen)m(ts)f(and)g(uses)g(these)g(in)g
-(order)g(to)h(ignore)g(an)m(y)f(subsequen)m(t)p eop end
-%%Page: 59 69
-TeXDict begin 59 68 bop 0 52 a Fy(6.4)92 b(Creating)31
-b(More)g(Complex)f(Mappings)2105 b FF(59)0 351 y(external)33
-b(c)m(hanges.)47 b(This)31 b(means)h(that)h(y)m(ou)f(ma)m(y)h(in)m(v)m
-(ert)g(either)f(comp)s(onen)m(t)h(Mapping)f(b)s(efore)f(inserting)0
-464 y(it)d(in)m(to)g(a)f(CmpMap)f(and)h(need)g(not)g(w)m(orry)g(if)g(y)
-m(ou)g(un-in)m(v)m(ert)h(it)f(again)h(later.)41 b(The)27
-b(CmpMap's)f(b)s(eha)m(viour)0 577 y(will)31 b(not)f(b)s(e)g
-(a\013ected)i(b)m(y)e(the)h(later)g(action.)0 866 y Fw(6.4)112
-b(Creating)38 b(More)g(Complex)g(Mappings)0 1084 y FF(Because)33
-b(a)f(CmpMap)f(is)h(itself)h(a)f(Mapping,)g(an)m(y)h(existing)f(CmpMap)
-f(can)i(substitute)e(\()p Fu(x)p FF(4.3\))j(as)e(a)h(com-)0
-1197 y(p)s(onen)m(t)40 b(Mapping)h(when)f(constructing)h(a)g(new)g
-(CmpMap)f(using)g(astCmpMap.)72 b(This)39 b(has)i(the)g(e\013ect)0
-1310 y(of)h(nesting)f(one)h(CmpMap)f(inside)g(another)g(and)g(op)s(ens)
-g(up)f(man)m(y)i(new)f(p)s(ossibilities.)74 b(F)-8 b(or)43
-b(example,)0 1423 y(com)m(bining)31 b(three)f(Mappings)h(in)f(series)g
-(can)h(b)s(e)f(accomplished)h(as)f(follo)m(ws:)227 1659
-y Ft(AstMapping)40 b(*map1,)h(*map2,)g(*map3;)227 1858
-y(...)227 2057 y(cmpmap)g(=)j(astCmpMap\()39 b(map1,)j(astCmpMap\()d
-(map2,)i(map3,)h(1,)h("")g(\),)f(1,)h("")g(\);)0 2307
-y FF(The)26 b(w)m(a)m(y)h(in)e(whic)m(h)h(the)g(individual)g(comp)s
-(onen)m(t)g(Mappings)g(are)h(group)s(ed)e(within)g(the)h(nested)g
-(CmpMaps)0 2419 y(is)k(not)h(usually)f(imp)s(ortan)m(t.)0
-2579 y(A)d(similar)h(tec)m(hnique)g(can)g(b)s(e)f(used)f(to)i(com)m
-(bine)g(m)m(ultiple)g(Mappings)g(in)f(parallel)h(and,)g(of)f(course,)i
-(mixed)0 2692 y(series)k(and)g(parallel)h(com)m(binations)g(are)g(also)
-g(p)s(ossible)f(\(Figure)g(4\).)50 b(There)33 b(is)g(no)g(built-in)g
-(limit)h(to)f(ho)m(w)0 2805 y(man)m(y)23 b(CmpMaps)f(ma)m(y)i(b)s(e)e
-(nested)h(in)g(this)g(w)m(a)m(y)-8 b(,)26 b(so)d(this)g(mec)m(hanism)h
-(pro)m(vides)f(an)g(inde\014nitely)g(extensible)0 2918
-y(metho)s(d)30 b(of)g(building)g(complex)h(Mappings)f(out)h(of)f(the)h
-(elemen)m(tal)h(building)e(blo)s(c)m(ks)h(pro)m(vided)f(b)m(y)g(AST.)0
-3077 y(In)i(practice,)i(y)m(ou)f(migh)m(t)h(not)e(need)h(to)g
-(construct)g(suc)m(h)f(complex)h(CmpMaps)f(y)m(ourself)h(v)m(ery)g
-(frequen)m(tly)-8 b(,)0 3190 y(but)27 b(they)h(will)g(often)g(b)s(e)e
-(returned)h(b)m(y)g(AST)g(routines.)40 b(Nested)28 b(CmpMaps)f
-(underlie)f(the)i(library's)g(en)m(tire)0 3303 y(abilit)m(y)k(to)f
-(represen)m(t)f(a)h(wide)f(range)h(of)g(di\013eren)m(t)f(co)s(ordinate)
-i(transformations.)0 3591 y Fw(6.5)112 b(Example|T)-9
-b(ransforming)40 b(Bet)m(w)m(een)d(Tw)m(o)g(Calibrated)i(Images)0
-3810 y FF(Consider,)27 b(as)f(a)h(practical)i(example)e(of)f(CmpMaps,)h
-(t)m(w)m(o)h(images)f(of)g(the)g(sky)-8 b(.)39 b(Supp)s(ose)25
-b(that)i(for)g(eac)m(h)g(im-)0 3923 y(age)h(w)m(e)g(ha)m(v)m(e)h(a)e
-(Mapping)g(whic)m(h)g(con)m(v)m(erts)i(from)e(pixel)g(co)s(ordinates)h
-(to)g(a)f(standard)g(celestial)j(co)s(ordinate)0 4035
-y(system,)38 b(sa)m(y)e(FK5)h(\(J2000.0\).)60 b(If)36
-b(w)m(e)g(wish)f(to)i(in)m(ter-compare)g(these)g(images,)h(w)m(e)f(can)
-f(do)g(so)g(b)m(y)g(using)0 4148 y(this)c(celestial)j(co)s(ordinate)f
-(system)f(to)g(align)g(them.)47 b(That)33 b(is,)g(w)m(e)g(\014rst)f
-(con)m(v)m(ert)i(from)e(pixel)h(co)s(ordinates)0 4261
-y(in)i(the)h(\014rst)f(image)h(in)m(to)h(FK5)f(co)s(ordinates)g(and)f
-(w)m(e)h(then)f(con)m(v)m(ert)i(from)e(FK5)h(co)s(ordinates)h(in)m(to)f
-(pixel)0 4374 y(co)s(ordinates)31 b(in)f(the)h(second)f(image.)0
-4534 y(If)35 b(\\mapa")h(and)f(\\mapb")g(are)h(p)s(oin)m(ters)f(to)h
-(our)f(t)m(w)m(o)i(original)f(Mappings,)h(w)m(e)e(could)h(form)f(a)g
-(CmpMap)0 4647 y(whic)m(h)29 b(transforms)g(directly)i(b)s(et)m(w)m
-(een)f(the)g(pixel)g(co)s(ordinates)g(of)g(the)g(\014rst)f(and)g
-(second)g(images)i(b)m(y)f(com-)0 4760 y(bining)g(these)h(Mappings,)f
-(as)h(follo)m(ws:)227 4996 y Ft(AstCmpMap)40 b(*alignmap;)227
-5095 y(AstMapping)g(*mapa,)h(*mapb;)227 5295 y(...)227
-5494 y(astInvert\()f(mapb)i(\);)227 5593 y(alignmap)f(=)i(astCmpMap\()c
-(mapa,)j(mapb,)f(1,)i("")g(\);)227 5693 y(astInvert\()d(mapb)i(\);)p
-eop end
-%%Page: 60 70
-TeXDict begin 60 69 bop 0 52 a FF(60)1891 b Fy(6)91 b(COMPOUND)31
-b(MAPPINGS)f(\(CMPMAPS\))0 351 y FF(Here,)47 b(w)m(e)d(ha)m(v)m(e)g
-(used)e(astIn)m(v)m(ert)i(\()p Fu(x)p FF(5.5\))i(to)d(in)m(v)m(ert)h
-(\\mapb")g(b)s(efore)e(inserting)h(it)h(in)m(to)g(the)f(CmpMap)0
-464 y(b)s(ecause,)g(as)e(supplied,)h(it)e(con)m(v)m(erted)i(in)e(the)h
-(wrong)f(direction.)71 b(Afterw)m(ards,)43 b(w)m(e)e(in)m(v)m(ert)g(it)
-g(again)h(to)0 577 y(return)26 b(it)i(to)f(its)h(original)g(state.)41
-b(The)27 b(CmpMap,)g(ho)m(w)m(ev)m(er,)i(will)f(ignore)f(this)g
-(subsequen)m(t)g(c)m(hange)h(\()p Fu(x)p FF(6.3\).)0
-744 y(The)d(forw)m(ard)f(transformation)i(of)f(the)g(resulting)g
-(CmpMap)g(will)g(no)m(w)g(transform)g(from)f(pixel)i(co)s(ordinates)0
-857 y(in)j(the)g(\014rst)g(image)h(to)g(pixel)g(co)s(ordinates)f(in)g
-(the)h(second)f(image,)i(while)e(its)h(in)m(v)m(erse)g(transformation)f
-(will)0 970 y(con)m(v)m(ert)j(in)e(the)h(opp)s(osite)f(direction.)0
-1276 y Fw(6.6)112 b(Ov)m(er-Complex)39 b(Comp)s(ound)g(Mappings)0
-1503 y FF(While)h(a)f(CmpMap)f(pro)m(vides)h(a)g(v)m(ery)g(\015exible)h
-(w)m(a)m(y)f(of)g(constructing)h(arbitrarily)f(complex)h(Mappings)0
-1616 y(\()p Fu(x)p FF(6.4\),)34 b(it)e(unfortunately)f(also)h(pro)m
-(vides)g(an)f(opp)s(ortunit)m(y)g(for)g(represen)m(ting)h(simple)f
-(Mappings)g(in)h(com-)0 1729 y(plex)d(w)m(a)m(ys.)41
-b(Sometimes,)30 b(unnecessary)e(complexit)m(y)j(can)e(b)s(e)f
-(di\016cult)h(to)g(a)m(v)m(oid)h(but)f(can)g(obscure)f(imp)s(or-)0
-1842 y(tan)m(t)j(simpli\014cations.)0 2009 y(Consider)46
-b(the)g(example)h(ab)s(o)m(v)m(e)h(\()p Fu(x)p FF(6.5\),)53
-b(in)46 b(whic)m(h)g(w)m(e)h(in)m(ter-related)h(t)m(w)m(o)g(images)f
-(of)g(the)f(sky)h Fx(via)f FF(a)0 2122 y(CmpMap.)38 b(If)26
-b(the)g(t)m(w)m(o)h(images)g(turned)e(out)h(to)h(b)s(e)e(simply)h
-(o\013set)h(from)e(eac)m(h)i(other)g(b)m(y)e(a)i(shift)e(along)i(eac)m
-(h)0 2234 y(pixel)g(axis,)h(then)e(this)h(approac)m(h)g(w)m(ould)f
-(align)h(them)g(correctly)-8 b(,)29 b(but)d(it)h(w)m(ould)g(b)s(e)f
-(ine\016cien)m(t.)40 b(This)26 b(is)h(b)s(e-)0 2347 y(cause)c(it)g(w)m
-(ould)f(in)m(tro)s(duce)g(unnecessary)g(and)g(exp)s(ensiv)m(e)g
-(transformations)h(to)g(and)f(from)g(an)g(in)m(termediate)0
-2460 y(celestial)33 b(co)s(ordinate)e(system,)g(whereas)f(a)h(simple)f
-(shift)g(of)h(pixel)f(origin)h(w)m(ould)f(su\016ce.)0
-2627 y(Recognising)41 b(that)f(a)f(simpler)g(and)g(more)h(e\016cien)m
-(t)h(solution)e(exists)h(ob)m(viously)g(requires)f(a)h(little)h(more)0
-2740 y(than)34 b(simply)g(joining)h(t)m(w)m(o)h(Mappings)f(end-to-end.)
-53 b(W)-8 b(e)36 b(m)m(ust)e(also)i(determine)f(whether)f(the)g
-(resulting)0 2853 y(CmpMap)c(is)h(more)g(complex)h(than)f(it)h(needs)e
-(to)i(b)s(e,)f Fx(i.e.)f FF(con)m(tains)i(redundan)m(t)e(information.)
-43 b(If)31 b(it)g(is,)h(w)m(e)0 2966 y(then)e(need)g(a)h(w)m(a)m(y)g
-(to)g(simplify)f(it.)0 3132 y(The)41 b(problem)g(is)g(not)h(alw)m(a)m
-(ys)h(just)e(one)g(of)h(e\016ciency)-8 b(,)46 b(ho)m(w)m(ev)m(er.)75
-b(Sometimes)42 b(w)m(e)g(ma)m(y)g(also)h(need)e(to)0
-3245 y(kno)m(w)c(something)g(ab)s(out)f(the)h(actual)h(form)f(a)g
-(Mapping)f(tak)m(es|)p Fx(i.e.)i FF(the)f(nature)f(of)h(the)g(op)s
-(erations)g(it)0 3358 y(p)s(erforms.)i(Unnecessary)29
-b(complexit)m(y)h(can)f(obscure)g(this,)g(but)f(suc)m(h)h(complexit)m
-(y)h(can)g(easily)g(accum)m(ulate)0 3471 y(during)f(normal)h(data)i
-(pro)s(cessing.)0 3638 y(F)-8 b(or)35 b(example,)i(a)e(Mapping)f(that)h
-(transforms)f(pixel)h(co)s(ordinates)g(in)m(to)h(p)s(ositions)e(on)h
-(the)g(sky)f(migh)m(t)h(b)s(e)0 3751 y(rep)s(eatedly)29
-b(mo)s(di\014ed)e(as)i(c)m(hanges)g(are)g(made)g(to)g(the)g(shap)s(e)e
-(and)h(size)i(of)e(the)h(image.)41 b(T)m(ypically)-8
-b(,)31 b(on)d(eac)m(h)0 3864 y(o)s(ccasion,)e(another)d(Mapping)g(will)
-h(b)s(e)e(concatenated)j(to)f(re\015ect)g(what)f(has)f(happ)s(ened)g
-(to)h(the)h(image.)39 b(This)0 3976 y(could)26 b(so)s(on)g(mak)m(e)h
-(it)f(di\016cult)g(to)g(discern)g(the)g(o)m(v)m(erall)i(nature)e(of)g
-(the)g(transformation)g(from)g(the)g(complex)0 4089 y(CmpMap)37
-b(that)h(accum)m(ulates.)65 b(If)37 b(only)h(shifts)f(of)h(origin)g(w)m
-(ere)h(in)m(v)m(olv)m(ed)g(on)f(eac)m(h)h(o)s(ccasion,)i(ho)m(w)m(ev)m
-(er,)0 4202 y(they)31 b(could)f(b)s(e)g(com)m(bined)g(in)m(to)i(a)e
-(single)h(shift)f(whic)m(h)h(could)f(b)s(e)g(represen)m(ted)g(m)m(uc)m
-(h)g(more)h(simply)-8 b(.)0 4369 y(Supp)s(ose)37 b(w)m(e)j(no)m(w)f(w)m
-(an)m(ted)h(to)g(represen)m(t)f(our)g(image's)h(celestial)i(co)s
-(ordinate)e(calibration)h(using)d(FITS)0 4482 y(con)m(v)m(en)m(tions)h
-(\()p Fu(x)p FF(17\).)64 b(This)36 b(requires)h(AST)g(to)h(determine)f
-(whether)g(the)g(Mapping)h(whic)m(h)f(relates)h(pixel)0
-4595 y(co)s(ordinate)33 b(to)g(sky)f(p)s(ositions)g(conforms)g(to)g
-(the)h(FITS)e(mo)s(del)h(\(for)g(example,)i(whether)d(it)i(is)f(equiv)
--5 b(alen)m(t)0 4708 y(to)31 b(applying)f(a)h(single)g(set)f(of)h
-(shifts)e(and)h(scale)i(factors)f(follo)m(w)m(ed)g(b)m(y)g(a)f(map)g
-(pro)5 b(jection\).)42 b(Clearly)-8 b(,)31 b(there)0
-4821 y(is)f(an)h(imp)s(ortan)m(t)f(use)g(here)h(for)f(some)g(means)h
-(of)f(simplifying)g(the)h(in)m(ternal)g(structure)f(of)h(a)f(CmpMap.)0
-5127 y Fw(6.7)112 b(Simplifying)40 b(Comp)s(ound)f(Mappings)0
-5354 y FF(The)28 b(abilit)m(y)h(to)g(simplify)f(comp)s(ound)f(Mappings)
-h(is)g(pro)m(vided)g(b)m(y)g(the)h(astSimplify)f(function.)40
-b(This)27 b(func-)0 5467 y(tion)h(encapsulates)h(a)g(n)m(um)m(b)s(er)d
-(of)i(heuristics)g(for)g(con)m(v)m(erting)i(Mappings,)e(or)g(com)m
-(binations)i(of)e(Mappings)0 5580 y(within)e(a)g(CmpMap,)h(in)m(to)g
-(simpler,)g(equiv)-5 b(alen)m(t)27 b(ones.)40 b(When)26
-b(applied)g(to)h(a)g(CmpMap,)f(astSimplify)g(tries)0
-5693 y(to)41 b(reduce)f(the)g(n)m(um)m(b)s(er)f(of)h(individual)f
-(Mappings)h(within)g(it)g(b)m(y)g(merging)h(neigh)m(b)s(ouring)e(comp)s
-(onen)m(t)p eop end
-%%Page: 61 71
-TeXDict begin 61 70 bop 0 52 a Fy(6.7)92 b(Simplifying)30
-b(Comp)s(ound)e(Mappings)2148 b FF(61)592 1403 y @beginspecial
-43 @llx 353 @lly 522 @urx 564 @ury 3113 @rwi @setspecial
-%%BeginDocument: sun211_figures/simpexamp.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 43 353 522 564
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/19 15:31:00
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-3233.75 5340.95 m
-3233.75 5373.35 3206.15 5400.95 3173.75 5400.95 c
-2452.55 5400.95 l
-2420.15 5400.95 2392.55 5373.35 2392.55 5340.95 c
-2392.55 4979.75 l
-2392.55 4947.35 2420.15 4919.75 2452.55 4919.75 c
-3173.75 4919.75 l
-3206.15 4919.75 3233.75 4947.35 3233.75 4979.75 c
-f*
-1 g
-3168.95 5396.15 m
-3168.95 5428.55 3142.55 5454.95 3110.15 5454.95 c
-2397.35 5454.95 l
-2364.95 5454.95 2338.55 5428.55 2338.55 5396.15 c
-2338.55 5043.35 l
-2338.55 5010.95 2364.95 4984.55 2397.35 4984.55 c
-3110.15 4984.55 l
-3142.55 4984.55 3168.95 5010.95 3168.95 5043.35 c
-f*
-8 w
-1 J
-1 j
-0 g
-3168.95 5396.15 m
-3168.95 5428.55 3142.55 5454.95 3110.15 5454.95 c
-2397.35 5454.95 l
-2364.95 5454.95 2338.55 5428.55 2338.55 5396.15 c
-2338.55 5043.35 l
-2338.55 5010.95 2364.95 4984.55 2397.35 4984.55 c
-3110.15 4984.55 l
-3142.55 4984.55 3168.95 5010.95 3168.95 5043.35 c
-h
-S
-0.564706 g
-2693.75 4320.95 m
-2693.75 4353.35 2667.35 4380.95 2633.75 4380.95 c
-2272.55 4380.95 l
-2240.15 4380.95 2212.55 4353.35 2212.55 4320.95 c
-2212.55 3719.75 l
-2212.55 3687.35 2240.15 3659.75 2272.55 3659.75 c
-2633.75 3659.75 l
-2667.35 3659.75 2693.75 3687.35 2693.75 3719.75 c
-f*
-1 g
-2628.95 4376.15 m
-2628.95 4408.55 2603.75 4434.95 2570.15 4434.95 c
-2217.35 4434.95 l
-2184.95 4434.95 2158.55 4408.55 2158.55 4376.15 c
-2158.55 3783.35 l
-2158.55 3750.95 2184.95 3724.55 2217.35 3724.55 c
-2570.15 3724.55 l
-2602.55 3724.55 2628.95 3750.95 2628.95 3783.35 c
-f*
-0 g
-2628.95 4376.15 m
-2628.95 4408.55 2603.75 4434.95 2570.15 4434.95 c
-2217.35 4434.95 l
-2184.95 4434.95 2158.55 4408.55 2158.55 4376.15 c
-2158.55 3783.35 l
-2158.55 3750.95 2184.95 3724.55 2217.35 3724.55 c
-2570.15 3724.55 l
-2602.55 3724.55 2628.95 3750.95 2628.95 3783.35 c
-h
-S
-0.564706 g
-3473.75 4320.95 m
-3473.75 4353.35 3447.35 4380.95 3413.75 4380.95 c
-3052.55 4380.95 l
-3020.15 4380.95 2992.55 4353.35 2992.55 4320.95 c
-2992.55 3719.75 l
-2992.55 3687.35 3020.15 3659.75 3052.55 3659.75 c
-3413.75 3659.75 l
-3447.35 3659.75 3473.75 3687.35 3473.75 3719.75 c
-f*
-1 g
-3408.95 4376.15 m
-3408.95 4408.55 3383.75 4434.95 3350.15 4434.95 c
-2997.35 4434.95 l
-2964.95 4434.95 2938.55 4408.55 2938.55 4376.15 c
-2938.55 3783.35 l
-2938.55 3750.95 2964.95 3724.55 2997.35 3724.55 c
-3350.15 3724.55 l
-3382.55 3724.55 3408.95 3750.95 3408.95 3783.35 c
-f*
-0 g
-3408.95 4376.15 m
-3408.95 4408.55 3383.75 4434.95 3350.15 4434.95 c
-2997.35 4434.95 l
-2964.95 4434.95 2938.55 4408.55 2938.55 4376.15 c
-2938.55 3783.35 l
-2938.55 3750.95 2964.95 3724.55 2997.35 3724.55 c
-3350.15 3724.55 l
-3382.55 3724.55 3408.95 3750.95 3408.95 3783.35 c
-h
-S
-0.564706 g
-1793.75 5468.15 m
-1793.75 5530.55 1743.35 5580.95 1680.95 5580.95 c
-1005.35 5580.95 l
-942.95 5580.95 892.55 5530.55 892.55 5468.15 c
-892.55 3652.55 l
-892.55 3590.15 942.95 3539.75 1005.35 3539.75 c
-1680.95 3539.75 l
-1743.35 3539.75 1793.75 3590.15 1793.75 3652.55 c
-f*
-1 g
-1728.95 5523.35 m
-1728.95 5584.55 1679.75 5634.95 1618.55 5634.95 c
-948.95 5634.95 l
-887.75 5634.95 838.55 5584.55 838.55 5523.35 c
-838.55 3716.15 l
-838.55 3653.75 887.75 3604.55 948.95 3604.55 c
-1618.55 3604.55 l
-1679.75 3604.55 1728.95 3653.75 1728.95 3716.15 c
-f*
-0 g
-1728.95 5523.35 m
-1728.95 5584.55 1679.75 5634.95 1618.55 5634.95 c
-948.95 5634.95 l
-887.75 5634.95 838.55 5584.55 838.55 5523.35 c
-838.55 3716.15 l
-838.55 3653.75 887.75 3604.55 948.95 3604.55 c
-1618.55 3604.55 l
-1679.75 3604.55 1728.95 3653.75 1728.95 3716.15 c
-h
-S
-473.75 5151.35 254.4 15.5999 re
-Y
-471.35 5159.75 m
-720.95 5159.75 l
-S
-0 0 6120 7920 re
-Y
-512.15 5160.95 m
-512.15 5182.55 494.15 5200.55 472.55 5200.55 c
-450.95 5200.55 432.95 5182.55 432.95 5160.95 c
-432.95 5139.35 450.95 5121.35 472.55 5121.35 c
-494.15 5121.35 512.15 5139.35 512.15 5160.95 c
-f*
-681.35 5111.75 m
-699.35 5159.75 l
-681.35 5207.75 l
-833.75 5159.75 l
-f*
-473.75 4611.35 254.4 15.5999 re
-Y
-471.35 4619.75 m
-720.95 4619.75 l
-S
-0 0 6120 7920 re
-Y
-512.15 4620.95 m
-512.15 4642.55 494.15 4660.55 472.55 4660.55 c
-450.95 4660.55 432.95 4642.55 432.95 4620.95 c
-432.95 4599.35 450.95 4581.35 472.55 4581.35 c
-494.15 4581.35 512.15 4599.35 512.15 4620.95 c
-f*
-681.35 4571.75 m
-699.35 4619.75 l
-681.35 4667.75 l
-833.75 4619.75 l
-f*
-473.75 4071.35 254.4 15.5999 re
-Y
-471.35 4079.75 m
-720.95 4079.75 l
-S
-0 0 6120 7920 re
-Y
-512.15 4080.95 m
-512.15 4102.55 494.15 4120.55 472.55 4120.55 c
-450.95 4120.55 432.95 4102.55 432.95 4080.95 c
-432.95 4059.35 450.95 4041.35 472.55 4041.35 c
-494.15 4041.35 512.15 4059.35 512.15 4080.95 c
-f*
-681.35 4031.75 m
-699.35 4079.75 l
-681.35 4127.75 l
-833.75 4079.75 l
-f*
-1733.75 5151.35 495.6 64.7996 re
-Y
-1733.75 5159.75 m
-2220.95 5208.95 l
-S
-0 0 6120 7920 re
-Y
-1772.15 5160.95 m
-1772.15 5182.55 1754.15 5200.55 1732.55 5200.55 c
-1710.95 5200.55 1692.95 5182.55 1692.95 5160.95 c
-1692.95 5139.35 1710.95 5121.35 1732.55 5121.35 c
-1754.15 5121.35 1772.15 5139.35 1772.15 5160.95 c
-f*
-2186.15 5157.35 m
-2200.55 5206.55 l
-2177.75 5252.15 l
-2333.75 5219.75 l
-f*
-1733.75 4325.75 342 294 re
-Y
-1733.75 4619.75 m
-2067.35 4334.15 l
-S
-0 0 6120 7920 re
-Y
-1772.15 4620.95 m
-1772.15 4642.55 1754.15 4660.55 1732.55 4660.55 c
-1710.95 4660.55 1692.95 4642.55 1692.95 4620.95 c
-1692.95 4599.35 1710.95 4581.35 1732.55 4581.35 c
-1754.15 4581.35 1772.15 4599.35 1772.15 4620.95 c
-f*
-2007.35 4323.35 m
-2051.75 4347.35 l
-2068.55 4394.15 l
-2153.75 4259.75 l
-f*
-1733.75 3935.75 322.8 151.2 re
-Y
-1733.75 4079.75 m
-2048.15 3944.15 l
-S
-0 0 6120 7920 re
-Y
-1772.15 4080.95 m
-1772.15 4102.55 1754.15 4120.55 1732.55 4120.55 c
-1710.95 4120.55 1692.95 4102.55 1692.95 4080.95 c
-1692.95 4059.35 1710.95 4041.35 1732.55 4041.35 c
-1754.15 4041.35 1772.15 4059.35 1772.15 4080.95 c
-f*
-1995.35 3916.55 m
-2031.35 3952.55 l
-2032.55 4002.95 l
-2153.75 3899.75 l
-f*
-833.75 4670.15 811.2 489.6 re
-Y
-833.75 5159.75 m
-1636.55 4678.55 l
-S
-0 0 6120 7920 re
-Y
-872.15 5160.95 m
-872.15 5182.55 854.15 5200.55 832.55 5200.55 c
-810.95 5200.55 792.95 5182.55 792.95 5160.95 c
-792.95 5139.35 810.95 5121.35 832.55 5121.35 c
-854.15 5121.35 872.15 5139.35 872.15 5160.95 c
-f*
-1578.95 4656.95 m
-1618.55 4688.15 l
-1626.95 4738.55 l
-1733.75 4619.75 l
-f*
-833.75 4611.35 811.2 490.8 re
-Y
-833.75 4619.75 m
-1636.55 5102.15 l
-S
-0 0 6120 7920 re
-Y
-872.15 4620.95 m
-872.15 4642.55 854.15 4660.55 832.55 4660.55 c
-810.95 4660.55 792.95 4642.55 792.95 4620.95 c
-792.95 4599.35 810.95 4581.35 832.55 4581.35 c
-854.15 4581.35 872.15 4599.35 872.15 4620.95 c
-f*
-1626.95 5040.95 m
-1618.55 5091.35 l
-1578.95 5122.55 l
-1733.75 5159.75 l
-f*
-833.75 4071.35 795.6 15.5999 re
-Y
-831.35 4079.75 m
-1622.15 4079.75 l
-S
-0 0 6120 7920 re
-Y
-1581.35 4031.75 m
-1599.35 4079.75 l
-1581.35 4127.75 l
-1733.75 4079.75 l
-f*
-0.564706 g
-4853.75 5468.15 m
-4853.75 5530.55 4803.35 5580.95 4740.95 5580.95 c
-4065.35 5580.95 l
-4002.95 5580.95 3952.55 5530.55 3952.55 5468.15 c
-3952.55 3652.55 l
-3952.55 3590.15 4002.95 3539.75 4065.35 3539.75 c
-4740.95 3539.75 l
-4803.35 3539.75 4853.75 3590.15 4853.75 3652.55 c
-f*
-1 g
-4788.95 5523.35 m
-4788.95 5584.55 4739.75 5634.95 4678.55 5634.95 c
-4008.95 5634.95 l
-3947.75 5634.95 3898.55 5584.55 3898.55 5523.35 c
-3898.55 3716.15 l
-3898.55 3653.75 3947.75 3604.55 4008.95 3604.55 c
-4678.55 3604.55 l
-4739.75 3604.55 4788.95 3653.75 4788.95 3716.15 c
-f*
-0 g
-4788.95 5523.35 m
-4788.95 5584.55 4739.75 5634.95 4678.55 5634.95 c
-4008.95 5634.95 l
-3947.75 5634.95 3898.55 5584.55 3898.55 5523.35 c
-3898.55 3716.15 l
-3898.55 3653.75 3947.75 3604.55 4008.95 3604.55 c
-4678.55 3604.55 l
-4739.75 3604.55 4788.95 3653.75 4788.95 3716.15 c
-h
-S
-3173.75 5160.95 613.2 65.9998 re
-Y
-3173.75 5219.75 m
-3778.55 5169.35 l
-S
-0 0 6120 7920 re
-Y
-3212.15 5220.95 m
-3212.15 5242.55 3194.15 5260.55 3172.55 5260.55 c
-3150.95 5260.55 3132.95 5242.55 3132.95 5220.95 c
-3132.95 5199.35 3150.95 5181.35 3172.55 5181.35 c
-3194.15 5181.35 3212.15 5199.35 3212.15 5220.95 c
-f*
-3737.75 5124.95 m
-3759.35 5170.55 l
-3746.15 5219.75 l
-3893.75 5159.75 l
-f*
-3413.75 4251.35 396 301.2 re
-Y
-3413.75 4259.75 m
-3801.35 4552.55 l
-S
-0 0 6120 7920 re
-Y
-3452.15 4260.95 m
-3452.15 4282.55 3434.15 4300.55 3412.55 4300.55 c
-3390.95 4300.55 3372.95 4282.55 3372.95 4260.95 c
-3372.95 4239.35 3390.95 4221.35 3412.55 4221.35 c
-3434.15 4221.35 3452.15 4239.35 3452.15 4260.95 c
-f*
-3800.15 4491.35 m
-3785.75 4539.35 l
-3742.55 4566.95 l
-3893.75 4619.75 l
-f*
-3413.75 3891.35 380.4 156 re
-Y
-3413.75 3899.75 m
-3785.75 4040.15 l
-S
-0 0 6120 7920 re
-Y
-3452.15 3900.95 m
-3452.15 3922.55 3434.15 3940.55 3412.55 3940.55 c
-3390.95 3940.55 3372.95 3922.55 3372.95 3900.95 c
-3372.95 3879.35 3390.95 3861.35 3412.55 3861.35 c
-3434.15 3861.35 3452.15 3879.35 3452.15 3900.95 c
-f*
-3767.75 3981.35 m
-3768.95 4031.75 l
-3734.15 4070.15 l
-3893.75 4079.75 l
-f*
-4793.75 5151.35 315.6 15.5999 re
-Y
-4791.35 5159.75 m
-5102.15 5159.75 l
-S
-0 0 6120 7920 re
-Y
-4832.15 5160.95 m
-4832.15 5182.55 4814.15 5200.55 4792.55 5200.55 c
-4770.95 5200.55 4752.95 5182.55 4752.95 5160.95 c
-4752.95 5139.35 4770.95 5121.35 4792.55 5121.35 c
-4814.15 5121.35 4832.15 5139.35 4832.15 5160.95 c
-f*
-5061.35 5111.75 m
-5079.35 5159.75 l
-5061.35 5207.75 l
-5213.75 5159.75 l
-f*
-4793.75 4611.35 315.6 15.5999 re
-Y
-4791.35 4619.75 m
-5102.15 4619.75 l
-S
-0 0 6120 7920 re
-Y
-4832.15 4620.95 m
-4832.15 4642.55 4814.15 4660.55 4792.55 4660.55 c
-4770.95 4660.55 4752.95 4642.55 4752.95 4620.95 c
-4752.95 4599.35 4770.95 4581.35 4792.55 4581.35 c
-4814.15 4581.35 4832.15 4599.35 4832.15 4620.95 c
-f*
-5061.35 4571.75 m
-5079.35 4619.75 l
-5061.35 4667.75 l
-5213.75 4619.75 l
-f*
-4793.75 4071.35 315.6 15.5999 re
-Y
-4791.35 4079.75 m
-5102.15 4079.75 l
-S
-0 0 6120 7920 re
-Y
-4832.15 4080.95 m
-4832.15 4102.55 4814.15 4120.55 4792.55 4120.55 c
-4770.95 4120.55 4752.95 4102.55 4752.95 4080.95 c
-4752.95 4059.35 4770.95 4041.35 4792.55 4041.35 c
-4814.15 4041.35 4832.15 4059.35 4832.15 4080.95 c
-f*
-5061.35 4031.75 m
-5079.35 4079.75 l
-5061.35 4127.75 l
-5213.75 4079.75 l
-f*
-3893.75 4670.15 811.2 489.6 re
-Y
-3893.75 5159.75 m
-4696.55 4678.55 l
-S
-0 0 6120 7920 re
-Y
-3932.15 5160.95 m
-3932.15 5182.55 3914.15 5200.55 3892.55 5200.55 c
-3870.95 5200.55 3852.95 5182.55 3852.95 5160.95 c
-3852.95 5139.35 3870.95 5121.35 3892.55 5121.35 c
-3914.15 5121.35 3932.15 5139.35 3932.15 5160.95 c
-f*
-4638.95 4656.95 m
-4678.55 4688.15 l
-4686.95 4738.55 l
-4793.75 4619.75 l
-f*
-3893.75 4611.35 811.2 490.8 re
-Y
-3893.75 4619.75 m
-4696.55 5102.15 l
-S
-0 0 6120 7920 re
-Y
-3932.15 4620.95 m
-3932.15 4642.55 3914.15 4660.55 3892.55 4660.55 c
-3870.95 4660.55 3852.95 4642.55 3852.95 4620.95 c
-3852.95 4599.35 3870.95 4581.35 3892.55 4581.35 c
-3914.15 4581.35 3932.15 4599.35 3932.15 4620.95 c
-f*
-4686.95 5040.95 m
-4678.55 5091.35 l
-4638.95 5122.55 l
-4793.75 5159.75 l
-f*
-3893.75 4071.35 795.6 15.5999 re
-Y
-3891.35 4079.75 m
-4682.15 4079.75 l
-S
-0 0 6120 7920 re
-Y
-4641.35 4031.75 m
-4659.35 4079.75 l
-4641.35 4127.75 l
-4793.75 4079.75 l
-f*
-2633.75 4251.35 194.4 15.5999 re
-Y
-2631.35 4259.75 m
-2820.95 4259.75 l
-S
-0 0 6120 7920 re
-Y
-2672.15 4260.95 m
-2672.15 4282.55 2654.15 4300.55 2632.55 4300.55 c
-2610.95 4300.55 2592.95 4282.55 2592.95 4260.95 c
-2592.95 4239.35 2610.95 4221.35 2632.55 4221.35 c
-2654.15 4221.35 2672.15 4239.35 2672.15 4260.95 c
-f*
-2781.35 4211.75 m
-2799.35 4259.75 l
-2781.35 4307.75 l
-2933.75 4259.75 l
-f*
-2633.75 3891.35 194.4 15.5999 re
-Y
-2631.35 3899.75 m
-2820.95 3899.75 l
-S
-0 0 6120 7920 re
-Y
-2672.15 3900.95 m
-2672.15 3922.55 2654.15 3940.55 2632.55 3940.55 c
-2610.95 3940.55 2592.95 3922.55 2592.95 3900.95 c
-2592.95 3879.35 2610.95 3861.35 2632.55 3861.35 c
-2654.15 3861.35 2672.15 3879.35 2672.15 3900.95 c
-f*
-2781.35 3851.75 m
-2799.35 3899.75 l
-2781.35 3947.75 l
-2933.75 3899.75 l
-f*
-q[1 0 0 1 0 0]concat
-89 106 true[1 0 0 1 -939 -5340]@85 imagemask
-"98E$s8Tk7z
-"98E$s8Tk7z"98E$s8Tk7z!'gM`s6p!gz!!E9$rr<$!z!!*'!rVuouz!!%NK
-p](9oz!!#7`p](9oz!!#7`n,NFgz!!#7`n,NFgz!!#7`n,NFgz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at n,NE<z!!", at s8W,uz!!", at s8W-!huE`W!!", at s8W-!qu?]s!!", at s8W-!rr<$!
-!!", at s8W-!s1eU7!!", at qu@9-s6p!g!!", at huEcWs82is!!", at huEa!s8Duu!!", at huE`^s8N'!!!",@
-huE`Xs8RTL!!", at huE`Ws8Tk7!!", at huE`WJ,eF,!!", at huE`W5QC3Q!!", at huE`W+91g1!!", at huE`W
-&-)D)!!", at huE`W#QOQ!!!", at huE`W#QO]%!!", at huE`W"989!!!", at huE`W"98?#!!", at huE`W!WW-!!!", at huE`W
-!WW0"!!", at huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W!<<'!!!", at huE`W!<<(L!!", at huE`W!<<(L
-!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!",@
-huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!WW1M!!", at huE`W!WW0"!!",@
-huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W"98B$!!", at huE`W"98?#!!", at huE`W#QOc'!!", at huE`W
-#QO]%!!", at huE`W&-)P-!!", at huE`W+92*9!!", at huE`W5QCKY!!", at huE`WJ,f!<!!", at huE`Ws8V!W
-!!", at huE`Xs8Tk7!!#7`huE`^s8RTL!!#7`huEaAs8N'!!!%NKn,NLhs82is!!%NKp],gDs6p!g!!*'!s8W-!s53kW
-!!iQ(s8W-!rr<$!!.Y%Ks8W-!qu?]s"98E$s8W-!huE`W"98E$s8W,uz"98E$s8W*!z~>
-Q
-q[1 0 0 1 0 0]concat
-71 76 true[1 0 0 1 -1028 -5338]@85 imagemask
-z56(Z`z
-&-)P-z!.Y%KJ,fQL!!3-"s53kW!!!9(s8Vio!!!!0s8W,uz+92B at rr<$!!.Y%Ks8RTL!!*'!
-s8W,W!!!$!s8W-!n,NFhs8W-!s7cQo"98E$KE(iL!!iQ(n,OR.!!!9(s1eU:rVup/s8N'!!<3$!+926=
-!!%M!!$D79!!!!@J,g\kn,NFg&&800s53kW!!hE^5QAM!!!!,Z!.Y$a!!!!"n,Rt<J,fQL!Up)=rr<$!!!)cos8N'!
-!!!"D!<<#uz495E\z!'C8]qu?]s!!"&?s82is!!!!-!<;foz!!3,pz!!!'"p](9o
-!!!!"s6p!gz!WVWhz!!3,hz!!!'"n,NFg!!!!"s53kWz!WV'Xz!!3,Xz
-!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!<:sWz!!*&Wz
-!!!$!s8W-!s8VQgs8W-!s8W,g!<<*!s8W-!huJ9,s8W-!s53m,s8W-!s8V!WJ)C;,!$D7!!'fBA!!",@
-huH""!!!!@s53lAhuE`W+90+V+7K71!$D6V!$C\1!!#7`^]4o7!!!!`s1eUFp](9o5Q?66#P\9!!'gL6
-!!i9!!!%NKJ,f]L!!!"Krr<$"qu?]ss8N'!!WE'!!<<#u!!*$!!!3,t!!!"KJ,fWMqu?]s5JR7$s7cQo!$C,!&-),!!!!Q)!$D7!!!!!(
-s24m:^]4?7!WW3"s*t(L!!*'!s8Duu!!!!`s8Vioz#QOh^z!!*'!z!!!!$huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-57 74 true[1 0 0 1 -1100 -5340]@85 imagemask
-&-)\0s1eU7&-)\0
-s1eU7&-)\0p](9o!.Y%K^]4?7!"],0z!!iQ'z!!E9!z!!E9!z!!3,tz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,tz!!3,tz!!3-!z!!3-!z!!3-"z!!3-"
-!!)co!!E8uJ-5cN!!E8u^^'i=!!iQ"i",hf#S6t1pcncY&-)\)IfKEJ&-)\)J,fP!"98Dr5QCb6!.Y%D
-+92 at k!"],)&-)Y0!!3,p#QOf(!!%ND"98B$!!!Q)!WW-!!!!,r!<;rs!!!"D!'g5Yz!!@`O~>
-Q
-q[1 0 0 1 0 0]concat
-127 74 true[1 0 0 1 -1154 -5340]@85 imagemask
-#QOi(s+(.Ls8VR!
-s8W,u#QOi(s+(.Ls8VR!s8W,u!WW3"n,P]Qs8E!/s8W,o!"],0J,fWMs7cQoJ,fKJ!!E9$!!!"Ks53kW
-+926=!!E9#!!!"Ks53kW#QOQ!!!3-!!!!!`s1eU7#QOQ!!!3,t!!!!`s1eU7#QO8n!!*&s!!!!@s1eU7
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"979Z!!*&s!!!!`s*t(L"979Z!!*&s!!!!`s1eU7#QN]^!!*&u!!!!`s1eU7#QN]^!!*'!!!!!`s53kW
-#QN]^!!*'!J,fS!s6p!g#QMR>!!3-"^]4 at as7cQo&-'EF!!3,sn,NIgrql`r&-'EF!!3,qp](<or-n\H+9-ik!!E8rrr<*"r',]35Q?66"98Dr5JRO(p`JDos8N'!"98Dr+9"M)p]pg0s8N'!"98Dr
-&-)\0n,r^js8Duu!'gMY"98E$huWlXs82is!!iQ!!WW3"huJ9,s82is!!*&o!.Y%K^]6V!s7cQo!!",9
-!$D7@!!!Q0s53kW!!!,r!"],/!!!-$s1eU7!!!"D!!3,p!!!"Krr<$!z!!!N0!!!!"huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -1277 -5340]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -1427 -5338]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -1491 -5305]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-89 106 true[1 0 0 1 -3999 -5340]@85 imagemask
-"98E$s8Tk7z
-"98E$s8Tk7z"98E$s8Tk7z!'gM`s6p!gz!!E9$rr<$!z!!*'!rVuouz!!%NK
-p](9oz!!#7`p](9oz!!#7`n,NFgz!!#7`n,NFgz!!#7`n,NFgz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at n,NE<z!!", at s8W,uz!!", at s8W-!huE`W!!", at s8W-!qu?]s!!", at s8W-!rr<$!
-!!", at s8W-!s1eU7!!", at qu@9-s6p!g!!", at huEcWs82is!!", at huEa!s8Duu!!", at huE`^s8N'!!!",@
-huE`Xs8RTL!!", at huE`Ws8Tk7!!", at huE`WJ,eF,!!", at huE`W5QC3Q!!", at huE`W+91g1!!", at huE`W
-&-)D)!!", at huE`W#QOQ!!!", at huE`W#QO]%!!", at huE`W"989!!!", at huE`W"98?#!!", at huE`W!WW-!!!", at huE`W
-!WW0"!!", at huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W!<<'!!!", at huE`W!<<(L!!", at huE`W!<<(L
-!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!",@
-huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!WW1M!!", at huE`W!WW0"!!",@
-huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W"98B$!!", at huE`W"98?#!!", at huE`W#QOc'!!", at huE`W
-#QO]%!!", at huE`W&-)P-!!", at huE`W+92*9!!", at huE`W5QCKY!!", at huE`WJ,f!<!!", at huE`Ws8V!W
-!!", at huE`Xs8Tk7!!#7`huE`^s8RTL!!#7`huEaAs8N'!!!%NKn,NLhs82is!!%NKp],gDs6p!g!!*'!s8W-!s53kW
-!!iQ(s8W-!rr<$!!.Y%Ks8W-!qu?]s"98E$s8W-!huE`W"98E$s8W,uz"98E$s8W*!z~>
-Q
-q[1 0 0 1 0 0]concat
-71 76 true[1 0 0 1 -4088 -5338]@85 imagemask
-z56(Z`z
-&-)P-z!.Y%KJ,fQL!!3-"s53kW!!!9(s8Vio!!!!0s8W,uz+92B at rr<$!!.Y%Ks8RTL!!*'!
-s8W,W!!!$!s8W-!n,NFhs8W-!s7cQo"98E$KE(iL!!iQ(n,OR.!!!9(s1eU:rVup/s8N'!!<3$!+926=
-!!%M!!$D79!!!!@J,g\kn,NFg&&800s53kW!!hE^5QAM!!!!,Z!.Y$a!!!!"n,Rt<J,fQL!Up)=rr<$!!!)cos8N'!
-!!!"D!<<#uz495E\z!'C8]qu?]s!!"&?s82is!!!!-!<;foz!!3,pz!!!'"p](9o
-!!!!"s6p!gz!WVWhz!!3,hz!!!'"n,NFg!!!!"s53kWz!WV'Xz!!3,Xz
-!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!<:sWz!!*&Wz
-!!!$!s8W-!s8VQgs8W-!s8W,g!<<*!s8W-!huJ9,s8W-!s53m,s8W-!s8V!WJ)C;,!$D7!!'fBA!!",@
-huH""!!!!@s53lAhuE`W+90+V+7K71!$D6V!$C\1!!#7`^]4o7!!!!`s1eUFp](9o5Q?66#P\9!!'gL6
-!!i9!!!%NKJ,f]L!!!"Krr<$"qu?]ss8N'!!WE'!!<<#u!!*$!!!3,t!!!"KJ,fWMqu?]s5JR7$s7cQo!$C,!&-),!!!!Q)!$D7!!!!!(
-s24m:^]4?7!WW3"s*t(L!!*'!s8Duu!!!!`s8Vioz#QOh^z!!*'!z!!!!$huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-57 74 true[1 0 0 1 -4160 -5340]@85 imagemask
-&-)\0s1eU7&-)\0
-s1eU7&-)\0p](9o!.Y%K^]4?7!"],0z!!iQ'z!!E9!z!!E9!z!!3,tz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,tz!!3,tz!!3-!z!!3-!z!!3-"z!!3-"
-!!)co!!E8uJ-5cN!!E8u^^'i=!!iQ"i",hf#S6t1pcncY&-)\)IfKEJ&-)\)J,fP!"98Dr5QCb6!.Y%D
-+92 at k!"],)&-)Y0!!3,p#QOf(!!%ND"98B$!!!Q)!WW-!!!!,r!<;rs!!!"D!'g5Yz!!@`O~>
-Q
-q[1 0 0 1 0 0]concat
-127 74 true[1 0 0 1 -4214 -5340]@85 imagemask
-#QOi(s+(.Ls8VR!
-s8W,u#QOi(s+(.Ls8VR!s8W,u!WW3"n,P]Qs8E!/s8W,o!"],0J,fWMs7cQoJ,fKJ!!E9$!!!"Ks53kW
-+926=!!E9#!!!"Ks53kW#QOQ!!!3-!!!!!`s1eU7#QOQ!!!3,t!!!!`s1eU7#QO8n!!*&s!!!!@s1eU7
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"979Z!!*&s!!!!`s*t(L"979Z!!*&s!!!!`s1eU7#QN]^!!*&u!!!!`s1eU7#QN]^!!*'!!!!!`s53kW
-#QN]^!!*'!J,fS!s6p!g#QMR>!!3-"^]4 at as7cQo&-'EF!!3,sn,NIgrql`r&-'EF!!3,qp](<or-n\H+9-ik!!E8rrr<*"r',]35Q?66"98Dr5JRO(p`JDos8N'!"98Dr+9"M)p]pg0s8N'!"98Dr
-&-)\0n,r^js8Duu!'gMY"98E$huWlXs82is!!iQ!!WW3"huJ9,s82is!!*&o!.Y%K^]6V!s7cQo!!",9
-!$D7@!!!Q0s53kW!!!,r!"],/!!!-$s1eU7!!!"D!!3,p!!!"Krr<$!z!!!N0!!!!"huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -4337 -5340]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -4487 -5338]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -4551 -5305]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-116 108 true[1 0 0 1 -2464 -5158]@85 imagemask
-z!!#7`qu?]s
-zz#QOi(huE`Wz!!!"Ks8W,szz!!3-"s8W+Lzz#QOi(s8V!Wz
-!!!!@s8W-!s7cQoz!!#7`s8W-!qu?]sz!<<*!!!3-"z!!!!"s8VQg!$D5kz!!!-$
-s*t(L"96.:z!!iQ'zs53kWz&-)P-!!!!`n,NFg!!!!@s7cQo!!!Q)z!!", at n,NFg!!iE%z
-!'gMAz"8i-!zJ,d:a!!!!"rVuou!!!"Ks*t(L!!!$!z!!*'!z!!%KKz!<<'!
-z!.TM!zs8Duuz5C`_6!!!'"rVuou!!!!@^]4?7!!3,tz!!"+Vz"989!z
-!"ZjF!!!!$s82isz&)[Ef!!!-$p](9o!!!!0huE`W!!E8rz!!!Pfz#QOQ!z!!hE^!!!!(s7cQo
-z#Oh]n!!!9(p](9o!!!!(n,NFg!!iPnz!!!8nz#QO8nz!!hun!!!!(s6p!gz
-"7Q9j!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir
-!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$
-p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o
-!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!
-z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz
-&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!
-z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z
-!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!g
-z"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz
-"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir
-!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$
-p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o
-!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!
-z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!9!z
-&-),!z!!iE%!!!!0s6p!gz#Q+Q%!!!Q0n,NFg!!!!(qu?]s!$D71z!!!9%z+92*9
-z!"]&/!!!!@s7cQoz&,lP/!!#7`qu?]s!!!!@rr<$!!'gM]z!!#7`J,fQLs8W*!z
-!.Y$a!!!-$s8Tk7!!!!$s8Vio!.Y%Ks8Duu!!#7`s8RTSs8W-!s53kW!WW3"s6p9ns8W-!huE`Xs8W-!n-B!ns8W,W!!!'"s8W,g~>
-Q
-q[1 0 0 1 0 0]concat
-81 74 true[1 0 0 1 -2579 -5160]@85 imagemask
-"98E$rrN0"s8RTO
-s8W-!!WW3"s*t.Ms8W&us8W-!!!!Q0s1eUFs8V!W!!iQ(!!!-$s*t(L"98?#!!3-"!!!!"s8Duu!<<'!
-!!!'"qu?]ss8N'!!!*&s!!!$!rVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"K
-rVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!
-qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou
-!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ
-!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs
-!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!
-qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou
-!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]s
-s8Duu!!*&u!!!$!qu?]s!<<'!!!*&szs8RTL!<;rs!!!$!s1eU8s82is!!3-"huEfXp](9o!WW2p
-!!E8r!!!!$s8Diq#QOQ!!!!9(r-n\gs6p!g"98E!5Oe^Qn,NFjs8W!=s8W,W!!!-$s83E-s8V!W!!%NK
-r!39%s1eU7!!iQ%"98E$J,fQL!<;rss8W*!z+8c+gs8Duu!!!!$qu at i=p](9o!!!"H!!iP^z!!!Q1!'C5]!!!~>
-Q
-q[1 0 0 1 0 0]concat
-43 109 true[1 0 0 1 -2660 -5160]@85 imagemask
-"98E$s54"Zs8W,W
-!WW3"s1eU>s8Vio!!3-"huE`Ws8Tk7!!%NKJ,fQLJ,b$!!!%NKz5Q:]`!!#7`z5Q:]`!!#7`
-z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z
-5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z
-5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`
-!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`
-z5Q:]`!!#7`z5Q:]`!!%NKzJ,]KK!W`9#!!!,ms8N'!"98E$!!!$!s8N'!!$D7@!!!!$s8N'!!!%NK
-z+9)<@!!!-$z!.OtK!!!!0zzzzzzzzzz
-zzzzzzzzzzzzzzzz
-zzzzz"+U at O!!",1z5PP3Y!!%NHzJ,TEJ!!*'!zs8N'!!!*'!zs8N'!!!*'!zs8N'!!!%NJzJ,TEJ!!#7]z+8>g9!!!Pf!!!~>
-Q
-q[1 0 0 1 0 0]concat
-48 95 true[1 0 0 1 -2704 -5158]@85 imagemask
-!!!!]z"979Z
-!!!9(p](9o+92<?!!#7`s*t(L5QCc!!!%NKs53kWs8W,g!!*'!kP,#Ws8N)s!!3-!!'C5^s82j<!!3,p
-!"T&1s7cQu!!E8r!!!!$s7cQo!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$
-s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$
-s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g
-!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j
-!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!9(s8W,g#QOi(s6p-js8W,g!WW3"s6p#<s8W,g
-!'gMQ!!!!@s6p!g!"],!!!!!(s6p!g!!E8j!!!!"s6p!g!!*&gzJ+*F<!!#7Qz+7K71!!",1
-z&+BQ!!!!8nz#Oh]n!!!,jz!Up'h!!!#gz!:Tsg!!!"<z!&+BQ!!!!A!!!~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -2750 -5160]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -2898 -5158]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -2962 -5125]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-98 106 true[1 0 0 1 -2385 -4560]@85 imagemask
-&-)\0s8W-!s8W,u
-!"],0s8W-!s8W-!rW!3's8W-!s8W-!s8E!'s8W-!s8W-!s8W&u"98E$s8W-!s8W,u!!3-"s8W-!s8W-!
-rW!!!s53kW!!!!`s8N'!s8V!Wz!WW0"!.Y%<z!!#7`!!#7`p](9o!!!!0rr<$`s7cQoz
-#QFc(+926=z!!E6$!"],/z!!!'"!!!Q0rr<$!zs*t(Ss8N'!z!.TM!"98COz!!#66!!3-"
-^]4?7!!!!`J,fWMs1eU7z++O=ks8V!Wz!$?^k!.Y%<z!!!O[!!%NKn,NFg!!!!0J,fR6
-s7cQoz#J^<>+926=z!!g:>!"],/z!!!8>!!!Q0rVuou!!!!$^]4?>s8N'!z"2Fm:
-"98COz!!C":!!E9$J,fQL!!!&8!!!'"s1eU7zzs8V!Wzz!.Y%<zz!!%NKn,NFg
-z!!!!`s7cQozz+926=zz!$D7=zz!!!Q0rVuouz!!!!(s8N'!
-zz"98COzz!!E9$J,fQLz!!!'"s1eU7zzs8V!Wzz!<<)W
-zz!!%NKn,NFgz!!!!`s7cQozz+92*9zz!$D7=zz!!!Q0rVuouz
-!!!!(s8N'!zz#QOf(zz!!E9$J,fQLz!!!'"s1eU7zzs8Tk7z
-z!<<)Wzz!!%NKn,NFgz!!!!`s7cQozz5QCKYzz!$D7=z
-z!!!Q0rVuouz!!!!(s8Duuzz#QOf(zz!!E9$J,fQLz!!!'"s1eU7z!!!!"
-s8Tk7zz!<<)Wzz!!%NKn,NFgz!!!!`s6p!gzz5QCKYzz
-!$D7=zz!!!Q0qu?]sz!!!!(s8Duuzz#QOf(zz!!E9$J,fQLz
-!!!'"s*t(Lz!!!!"s8Tk7zz!<<)Wzz!!%NKhuE`Wz!!!!`s6p!gzz5QCKY
-zz!$D7=zn,NFg!!!Q0qu?]s!:Tsg!!!!0s8Duu!!)coz#QOf(!!!#oz!!E9$
-zGQ7^D!!!'"s*t(L!-eJD!!!!"s8Tk7!!%BHz!<<)W!!!"Hz!!%NKhuE`WHiO-H!!!"K
-s6p!g!.FnJz5QCKY!!%HJz!$D79!!!"Kz!!!Q0qu?]sIfKHK!!!!0s8Duu!'bu6z#QOf(!!#7!z!!E9$!!!!`huE`W!!!-$s*t(L5O\XQ!!!!"s8Tk7!'gA]
-z!<<)7!!#7`z!!%NKhuEaAs53kW!!!"Ks6p!g5QC]_z5QC3Q!$D7 at s8W-!s8W,o!!",@
-s8W-!s8W-!qu?^=s8W-!s8W-!s8Duu+92B at s8W-!s8W&u!$D7 at s8W-!s8W,u!!", at s8W-!s8W-!rVu~>
-Q
-q[1 0 0 1 0 0]concat
-70 76 true[1 0 0 1 -2490 -4558]@85 imagemask
-zp](9oz
-5QBXAz!WW3!z!"],0s*t(L!!#7`s8V!W!!!"Ks5F"Q!!!!"s8E!?qu?]s"98,r#QFc(!!iP^
-!!3+M!!",@^]4B7^]4@!s*t(LJ)C;,J,]KK!'frQ!.XtJ!!",9!!*&s!!!!@qu?ctp](9o&,ZD0s7cQo
-!"]&/"97ij!!!9(!!iPn!!!!(rr<<(huE`W"93l^s53kW!!E7O&-(Pf!!!-$^`WTl!!!!"s1f`V^]4?7!WV(Bs1eU7
-!!3,X5Q?66!!!'"n3?r'!!!!"s6tO<J,fQL!<;P<rr<$!!!*&gJ,]KK!!!$!pj`;Dzs7h*Dz
-!<;iorVuou!!*&os8Duu!!!$!q#C<nzs8;orz!<;usrVuou!!*&ss8Duu!!!$!r;ZZpz
-s8;opz!<;usqu?]s!!*&ss82is!!!$!r;ZZpzs8;opz!WW)tqu?]s!!3,ts82is!!!'"r."VE!!!!"
-s87BEz!WVqEqu?]s!!E8rJ,B9H!!!-$pj`2A!!!!$s7ehVz"98-\qu?]s!!iPn5Q1W_!!!9(
-n/qW0!!!!(s6q-0z&-(Q0rVuou!"]+f&,lP/!!!Q0^^pGF!!!!@s1em>z+9-irs*t(L!'gL6
-"93lO!!#7`!!3,8!!!"KrW!!!^]4?7s8Duus53kW!<;rs!.XJ<!!3,p!!#7Q!!!-$n,NG1qu?^%s53kW&,lP/+90+V!!iN(!'gL6!!!'"
-^]FK7zs8F,?qu?]s!'gM`s6p!g!!!Q0s8Tk7!!!!$s8W*!z!'gMQz!!!#sz~>
-Q
-q[1 0 0 1 0 0]concat
-70 76 true[1 0 0 1 -2570 -4558]@85 imagemask
-zp](9oz
-5QBXAz!WW3!z!"],0s*t(L!!#7`s8V!W!!!"Ks5F"Q!!!!"s8E!?qu?]s"98,r#QFc(!!iP^
-!!3+M!!",@^]4B7^]4@!s*t(LJ)C;,J,]KK!'frQ!.XtJ!!",9!!*&s!!!!@qu?ctp](9o&,ZD0s7cQo
-!"]&/"97ij!!!9(!!iPn!!!!(rr<<(huE`W"93l^s53kW!!E7O&-(Pf!!!-$^`WTl!!!!"s1f`V^]4?7!WV(Bs1eU7
-!!3,X5Q?66!!!'"n3?r'!!!!"s6tO<J,fQL!<;P<rr<$!!!*&gJ,]KK!!!$!pj`;Dzs7h*Dz
-!<;iorVuou!!*&os8Duu!!!$!q#C<nzs8;orz!<;usrVuou!!*&ss8Duu!!!$!r;ZZpz
-s8;opz!<;usqu?]s!!*&ss82is!!!$!r;ZZpzs8;opz!WW)tqu?]s!!3,ts82is!!!'"r."VE!!!!"
-s87BEz!WVqEqu?]s!!E8rJ,B9H!!!-$pj`2A!!!!$s7ehVz"98-\qu?]s!!iPn5Q1W_!!!9(
-n/qW0!!!!(s6q-0z&-(Q0rVuou!"]+f&,lP/!!!Q0^^pGF!!!!@s1em>z+9-irs*t(L!'gL6
-"93lO!!#7`!!3,8!!!"KrW!!!^]4?7s8Duus53kW!<;rs!.XJ<!!3,p!!#7Q!!!-$n,NG1qu?^%s53kW&,lP/+90+V!!iN(!'gL6!!!'"
-^]FK7zs8F,?qu?]s!'gM`s6p!g!!!Q0s8Tk7!!!!$s8W*!z!'gMQz!!!#sz~>
-Q
-q[1 0 0 1 0 0]concat
-127 74 true[1 0 0 1 -2642 -4560]@85 imagemask
-#QOi(s+(.Ls8VR!
-s8W,u#QOi(s+(.Ls8VR!s8W,u!WW3"n,P]Qs8E!/s8W,o!"],0J,fWMs7cQoJ,fKJ!!E9$!!!"Ks53kW
-+926=!!E9#!!!"Ks53kW#QOQ!!!3-!!!!!`s1eU7#QOQ!!!3,t!!!!`s1eU7#QO8n!!*&s!!!!@s1eU7
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"979Z!!*&s!!!!`s*t(L"979Z!!*&s!!!!`s1eU7#QN]^!!*&u!!!!`s1eU7#QN]^!!*'!!!!!`s53kW
-#QN]^!!*'!J,fS!s6p!g#QMR>!!3-"^]4 at as7cQo&-'EF!!3,sn,NIgrql`r&-'EF!!3,qp](<or-n\H+9-ik!!E8rrr<*"r',]35Q?66"98Dr5JRO(p`JDos8N'!"98Dr+9"M)p]pg0s8N'!"98Dr
-&-)\0n,r^js8Duu!'gMY"98E$huWlXs82is!!iQ!!WW3"huJ9,s82is!!*&o!.Y%K^]6V!s7cQo!!",9
-!$D7@!!!Q0s53kW!!!,r!"],/!!!-$s1eU7!!!"D!!3,p!!!"Krr<$!z!!!N0!!!!"huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -2766 -4560]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -2917 -4558]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -2979 -4525]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-51 75 true[1 0 0 1 -3067 -4558]@85 imagemask
-!!!!]!!!!=!$D7!
-!!!u at s8Vus!$D7 at s8N'!+92?Os1eUVs53m,huFl!J,g\\!$D1?!!i9!+8c*="8i- at p](9rrW"&0!!!'"
-!$C\1!!3*"+5d,!!<7Qk^]4?7s*u3,!!!$!^`S(,!!*&7++O=k!<9hVJ,fQLs54t!!!!$!i#_q!!!3,X
-*WQ0?!WV(!!!!!$s54pu!!!9(i#Vju!"]+f)uos=+917=!!!!`s1eU7!!%NK^]4?7!WW28!!!!(s8RTL!!!Q0s*t(L
-!'gM`zs8W*!!!!-$s8Duu!!iQ(qu?]s+92B9!!!"Ks8VQg!!*'!s53kW"98E$J,fQSs8W*!!!!Q0
-s82is!$D7 at n,NFgJ,fQ,!!!$!s8RTL!!*'!rVuou!WW2t!!!!$s8VQg!!!9(s1eU7!!iQ(z&-)V/
-!!!!0s7cQo!!!Q0huE`W!$D6Vz+9-ik!#tt\rr<$!)uq)[!!!!]!$D+=!!#+]+8c*=!'C6'qu?]sHiP8`!!!"H!$Ct9!!%BH&,6,)!;HO)p](9op](j"!!!&p!!i9!!!2ip#Q+Q%"8Diuqu?^!p](Eo
-!!!9!!!3'!!"\i)!<3$!+8>g9J%u&6p](:Yn,`Ra!!", at s8Vio!!iQ(rceDC!WW2h2uipY5Q?66!!~>
-Q
-q[1 0 0 1 0 0]concat
-82 67 true[1 0 0 1 -2313 -4020]@85 imagemask
-&-)\-!!!-$s8N'@
-s8W*!!!iQ(s+!?6s8N'!&-)\0^d%l!rr<$0s8W,75QCc`!!!Q0s8TkVs8W&u!!iQ(s*tX[s82is"98E$
-!!*%Lz!'frQ!.VcazJ)C;,+7K71!!!$!J,fQ[p](9o!!3*"!!!9%z"9&9#!!E3#!!!!(
-qu?]s!WN-"!!!Q)zs*t(L!$C\1!!!"K^]4?75MuMA!!#7A!!!"K^]4?7!$C\1!!*%Lz&,6,)!WN-"!!!!(
-qu?^!rVuou!!!-#!!!Q-z!!3*"!$Ct9z!<9h75O\XQzJ)C<VhuE`W!!!!`n,WL(z
-!!",9!WRZMz!"\u0rr<$!z#Q=u-z!!!!$rt##-z!!!$!TC;g\z!!%NKhuE`W
-z!'gM!zz+9-ikz!!!!0rr<$!z!!!9'zz!!iK'zz&,uV0z!!!!@
-s*t(Lz!!#7`^]4?7z!.Y%,zzs.Ac\z!!!'"&,6,)z!!E3*qu?]sz
-#Q+]'z!!!!@p]:DFz!!#7Q!.Vcaz!.Wo,5MuMAzs1eUVn,NFg!!!'"J,g,Tz
-!!E3#!!iE%z#Q+Q%"9&9#!!!!0p](9prr<$!!!",1!!!$!J,fQL!'fBA!!%MazJ%u$a!'fBA!!!$!J,fQL
-+7K71!!3*"!!!!0p](9o"9&9#!!!9%!!!!(qu?]s!!E3#!!!Q)z!WN-"!<<)u!!!-$s6p!js8W*!
-!"],0qu?j!s8N'!&-)\-!!E9$rr<$0s8Vus"98E$!!!Q0s82j!s8W*!!"],0qu?cts8Duu"98Dj!!~>
-Q
-q[1 0 0 1 0 0]concat
-65 112 true[1 0 0 1 -2408 -4018]@85 imagemask
-!$D79z!!3-"
-s*t(L!!!9(s8Vio!!!!0s8W,uz5QCc`s1eU7!'gM`s8VQg!!%NKs1f`O!!!$!s8N'$rVuous8Vus
-!<3$!!<<)g!!%Ma!!*'!huEa!huEcWs*t(L&+BQ!J,]KK!!i9!!.XnH!!!9%!!#7Q!!!!$rVup'z
-!WE'!z!!*$!z!!!$!J,fQLzJ%u$az!.Vcaz!!#7Az!!!!`huE`Wz5O\XQz
-!$C\1z!!",1z!!!!@p](9oz+8>g9z!"\i)z!!!Q-z!!!!0qu?]sz
-&,ZD-z!"\u-z!!!Q-z!!!!0rVuouz&,lP/z!"]&/z!!!Q/z!!!!0
-rVuouz&,lP/z!$D1?z!!",?z!!!!@rVuouz+8u6?z!$D1?z!!#7_z!!!!`
-rVuouzJ,TEJz!.XtJz!!*&sz!!!$!qu?]s!!!!"s82isz"989!z!!E9!
-z!!!9(p](9o!!!!0s7cQoz+92*9z!.Y%<z!!*'!n,NFg!!!'"s53kW!!!!(s8V!W
-z+92AVz!.Y%KJ,fQL!!3-"s*t(L!!!9(s8N'!!!!!`s8W&u!!!!$s8W,sz5QCc`p](9o#QOi(s6p!g
-#QOi(s8V!W!!iQ(s8W,7!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s82is!!3-"s8Vio!!!'"s8W,Wz
-s8W-!J,fQL!<<*!qu?]s!!%NKs53kW!!!"Ks8N'!z5QC3Qz!'gG_z!!"+Vz!!!!@
-^]4?7z&&8/Fz!"[ufz!!!8^z!!!!(n,NFgz#Oh]nz!!Durz!!!,rz!!!!"
-qu?]sz!W2otz!!)uuz!!!#uzzIfKHKz!.Y%Ks8Tk7!!#7`s8W,W!!!!`
-s8W-!huE`W5QCc`s6p!g!$D7 at s8VQg!!", at s8W,o!!!!0s8W-!p](9o&-)\0s7cQo!!iQ(s8Vus!!!9(
-s8W,s!!!!$s8W-!rVuou"98E$s8Duu!!3-"s8W*!z!!!!0zz#64`(z!!@`Oz!!!$"~>
-Q
-q[1 0 0 1 0 0]concat
-82 67 true[1 0 0 1 -3033 -4020]@85 imagemask
-&-)\-!!!-$s8N'@
-s8W*!!!iQ(s+!?6s8N'!&-)\0^d%l!rr<$0s8W,75QCc`!!!Q0s8TkVs8W&u!!iQ(s*tX[s82is"98E$
-!!*%Lz!'frQ!.VcazJ)C;,+7K71!!!$!J,fQ[p](9o!!3*"!!!9%z"9&9#!!E3#!!!!(
-qu?]s!WN-"!!!Q)zs*t(L!$C\1!!!"K^]4?75MuMA!!#7A!!!"K^]4?7!$C\1!!*%Lz&,6,)!WN-"!!!!(
-qu?^!rVuou!!!-#!!!Q-z!!3*"!$Ct9z!<9h75O\XQzJ)C<VhuE`W!!!!`n,WL(z
-!!",9!WRZMz!"\u0rr<$!z#Q=u-z!!!!$rt##-z!!!$!TC;g\z!!%NKhuE`W
-z!'gM!zz+9-ikz!!!!0rr<$!z!!!9'zz!!iK'zz&,uV0z!!!!@
-s*t(Lz!!#7`^]4?7z!.Y%,zzs.Ac\z!!!'"&,6,)z!!E3*qu?]sz
-#Q+]'z!!!!@p]:DFz!!#7Q!.Vcaz!.Wo,5MuMAzs1eUVn,NFg!!!'"J,g,Tz
-!!E3#!!iE%z#Q+Q%"9&9#!!!!0p](9prr<$!!!",1!!!$!J,fQL!'fBA!!%MazJ%u$a!'fBA!!!$!J,fQL
-+7K71!!3*"!!!!0p](9o"9&9#!!!9%!!!!(qu?]s!!E3#!!!Q)z!WN-"!<<)u!!!-$s6p!js8W*!
-!"],0qu?j!s8N'!&-)\-!!E9$rr<$0s8Vus"98E$!!!Q0s82j!s8W*!!"],0qu?cts8Duu"98Dj!!~>
-Q
-q[1 0 0 1 0 0]concat
-79 110 true[1 0 0 1 -3120 -4018]@85 imagemask
-z&-'EFz
-!!%NKqu?]s!!!!$s8W*!z!"],0s1eU7!!!!`quHcTz!.XJ<5PP3Y!!!$!huFksz!WRZM
-#Q=]'!!!-$!!!-$z#Q=]'!WRZM!!!Q/!!!'"^]4?7+8c*=!<:sW!!#7Y!!!"Kn,NFg5PP3Y!.XJ<
-!!%N<!!!!`p](9os6p!g!'gA]!!*&W!!!!@qu?]ts53kW!$D1?!!3,X!!!!@rVup#s1eU7!"])0!!E8:!!!!0rr<$(
-s1eU7!"]*[!!iOS!!!!(s*t(Ss*t(L!!iOS!"]*[!!!!(s1eUFs*t(L!!iP>!"])0!!!!$s53l!rr<$!
-!!E8Z!$D4@!!!!$s53l!rr<$!!!E8j!'gJ`!!!!$s6p"QrVuou!!3,h!'gG_!!!!"s6p"QrVuou!!3,p
-!.XtJ!!!!"s7cSDrVuou!!3,p!.XtJ!!!!"s7cSDrVuou!!3,p!.XtJ!!!!"s82lsrVuou!!3,t!<;rszs82ls
-qu?]s!!*&s!<;rszs82lsqu?]s!!*&s!<;rszs82lsqu?]s!!*&u!WW&tzs8E'!qu?]s
-!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u
-!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!
-qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E#uqu?]s!!*&s!<;rszs82lsqu?]s
-!!*&s!<;rszs82lsrVuou!!3,t!<<#u!!!!"s82lsrVuou!!3,t!.XtJ!!!!"s7cSDrVuou!!3,p
-!.XtJ!!!!"s7cSDrVuou!!3,p!.XtJ!!!!"s7cRYrVuou!!3,h!'gJ`!!!!$s6p"Qrr<$!!!E8j!$D4@!!!!$s6p"1
-rr<$!!!E8Z!$D4@!!!!$s53l!s*t(L!!iP^!"]*[!!!!(s1eUFs*t(L!!iP>!!iOS!!!!(s*t(Ss1eU7
-!!iOS!!iP>!!!!0s*t(Os1eU7!"])0!!E8:!!!!0rr<$"s53kW!$D1?!!3,X!!!!@rVuous6p!g!'gA]
-!!%N<!!!!`p](9oJ+*F<!'g5Y!!#7Y!!!"Kn,NFg+8c*=!<:sW!!",=!!!$!huE`W&,lP/!WTq8!!!9(!!!-$J,fQL"9/?$#QFc(!!!'"J,g,Zz!<:sW+8c*=
-!!!"Kn,P]Bz!$D+>s53kW!!!!0s8W+Lz!!E9$rr<$!zJ,f9Dz!!!Q0^]4?7~>
-Q
-q[1 0 0 1 0 0]concat
-24 18 true[1 0 0 1 -3209 -4018]@85 imagemask
-!"ZjF5O\Z&p]1?l!WW-"s8E-#rr`<$"98B's8N3$rr`<$!WW-"s8E#uquD6A!'frQ&&8~>
-Q
-q[1 0 0 1 0 0]concat
-71 108 true[1 0 0 1 -3248 -4020]@85 imagemask
-s8W-!s8W,s!<<*!
-s8W-!rW)uus8W-!s8E"Js8W-!s8W*!5QCc`s8W-!!$D7 at s8W-!rr<T0s8W-!s8RTSs8W-!s8W+L"98E$
-s8W-!^]FK8s8W-!s1eX7s8W-!s8Tk7J,fQKs8W,W!'^G`!!!!@huFjLz#Oh^(^]4?7!!2Qh#N,R^
-!!!#g!!D]jzp](Ekz!-eJEqu?]s!!#+]!<)ru!!!!=!!%KKz)uot'z!"Ju/++O=kz!"ZjF
-z!!!8^z!!!!$n,NFgz!VcWpz!!)osz!!!"Jzz56(Z`z!$?^k
-z!!!PFz!!!!(huE`Wz"7Q9jz!!Durz!!!&tzzrVuouz!.OtK
-z!!#66z!!!!@^]4?7z+5d,!z!"[ufz!!!8nz!!!!$p](9oz"8i-!z!!3'!
-z!!!$!zzs*t(Lz!.Vcaz!!%Maz!!!!`huE`Wz+7K71z!$Ct9
-z!!!Q)z!!!!0qu?]sz#Q=]'z!!iK'z!!!9(z!!!!$s*t(Lz"93lO
-z!!3,8z!!!'"^]4?7!!!!"s53kWz!<:sWz!!*&gz!!!$!n,NFgzs6p!gz!<;fo
-z!!%NDz!!!"Kp](9ozJ,B9Hz!.XnHz!!%NHz!!!"Kqu?]szJ,TEJ
-z!.XtJn,NFg!!%NJ!:Tsg!!!"KrW)]nzJ,TFmz!<<#uGQ7^D!!*&u!.4bH!!!$!rW#%\
-zs8E!^z!WW-!56(Z`!!3-!!$;1@!!!-$qu at gh!!!!$s82j=J,fQL#QO]%&&8/F!"],-!"[uf!!", at p](Qg!!!!`s7cR!p](9oJ,f9D"8i-!!<<)g!!E3#!!E9$n,NLh
-J,g,[s53kWs6p#<s8Tk7!.Y%Ks8W,7!!#7`s8W-!J,fR6s8W-!rr<$!+92B at s8Duu!!iQ(s8Vus!!!-$
-s8W,o!!!!"s8W-!huE`W!.Y%Ks1eU7!!#7`s8N'!!!!!0s8Vusz!WW2hz!!#7`z~>
-Q
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 1599 a(Figure)38 b(10:)56 b(An)37 b(o)m(v)m(er-complex)j
-(comp)s(ound)c(Mapping,)k(consisting)e(of)g(P)m(ermMaps,)i(Zo)s(omMaps)
-d(and)g(a)0 1712 y(UnitMap,)28 b(whic)m(h)e(can)g(b)s(e)g(simpli\014ed)
-f(to)i(b)s(ecome)f(a)h(single)g(UnitMap.)40 b(The)25
-b(enclosing)i(nested)f(CmpMaps)0 1825 y(ha)m(v)m(e)32
-b(b)s(een)d(omitted)j(for)e(clarit)m(y)-8 b(.)0 2188
-y(Mappings)33 b(together.)51 b(It)34 b(will)f(do)h(this)f(with)g(b)s
-(oth)f(series)i(and)f(parallel)h(com)m(binations)h(of)e(Mappings,)h(or)
-0 2301 y(b)s(oth,)c(and)g(will)g(handle)g(CmpMaps)g(nested)g(to)h(an)m
-(y)g(depth)e(\()p Fu(x)p FF(6.4\).)0 2458 y(T)-8 b(o)29
-b(illustrate)h(ho)m(w)f(astSimplify)f(w)m(orks,)i(consider)e(the)h(com)
-m(bination)h(of)f(Mappings)g(sho)m(wn)f(in)g(Figure)h(10.)40
-2570 y(If)h(this)h(w)m(ere)f(con)m(tained)i(in)e(a)h(CmpMap,)f(it)h
-(could)f(b)s(e)g(simpli\014ed)f(as)i(follo)m(ws:)227
-2796 y Ft(AstMapping)40 b(*simpler;)227 2996 y(...)227
-3195 y(simpler)h(=)i(astSimplify\()c(cmpmap)i(\);)0 3434
-y FF(In)34 b(this)g(case,)j(the)d(result)g(w)m(ould)g(b)s(e)g(a)h
-(simple)f(3-dimensional)h(UnitMap)g(\(the)g(iden)m(tit)m(y)h
-(Mapping\).)53 b(T)-8 b(o)0 3547 y(reac)m(h)31 b(this)f(conclusion,)i
-(astSimplify)e(will)h(ha)m(v)m(e)g(made)g(a)f(n)m(um)m(b)s(er)f(of)i
-(deductions,)f(roughly)g(as)h(follo)m(ws:)111 3786 y(1.)46
-b(The)37 b(t)m(w)m(o)h(2-dimensional)g(Zo)s(omMaps)f(in)g(series)g(are)
-h(equiv)-5 b(alen)m(t)38 b(to)g(a)g(single)f(Zo)s(omMap)g(with)g(a)227
-3899 y(com)m(bined)31 b(Zo)s(om)f(factor)h(of)g(unit)m(y)-8
-b(.)41 b(This,)30 b(in)g(turn,)f(is)i(equiv)-5 b(alen)m(t)32
-b(to)f(a)f(2-dimensional)i(UnitMap.)111 4081 y(2.)46
-b(This)32 b(UnitMap)h(in)f(parallel)i(with)e(the)g(other)h
-(1-dimensional)g(UnitMap)g(is)g(equiv)-5 b(alen)m(t)34
-b(to)f(a)g(single)227 4194 y(3-dimensional)d(UnitMap.)40
-b(This)28 b(UnitMap,)i(sandwic)m(hed)e(b)s(et)m(w)m(een)h(an)m(y)g
-(other)g(pair)g(of)f(Mappings,)227 4307 y(can)j(then)f(b)s(e)g
-(eliminated.)111 4489 y(3.)46 b(The)h(remaining)g(t)m(w)m(o)h(P)m
-(ermMaps)f(in)f(series)h(are)h(equiv)-5 b(alen)m(t)48
-b(to)f(a)h(single)f(3-dimensional)h(P)m(er-)227 4602
-y(mMap.)e(When)32 b(these)h(are)f(com)m(bined,)h(the)g(resulting)f(P)m
-(ermMap)g(is)g(found)f(to)i(b)s(e)f(equiv)-5 b(alen)m(t)33
-b(to)g(a)227 4715 y(3-dimensional)f(UnitMap.)0 4954 y(This)27
-b(example)i(is)f(a)g(little)i(con)m(triv)m(ed,)g(but)d(illustrates)i
-(ho)m(w)f(astSimplify)f(can)i(deal)f(with)g(ev)m(en)g(quite)h(com-)0
-5067 y(plicated)36 b(comp)s(ound)e(Mappings)h(through)f(a)i(series)g
-(of)f(incremen)m(tal)h(simpli\014cations.)56 b(Where)36
-b(p)s(ossible,)0 5180 y(this)26 b(will)h(result)f(in)g(either)h(a)g
-(simpler)f(comp)s(ound)f(Mapping)h(or,)i(if)e(feasible,)i(an)e(atomic)i
-(\(non-comp)s(ound\))0 5293 y(Mapping,)35 b(as)f(here.)51
-b(If)33 b(no)h(simpli\014cation)g(is)g(p)s(ossible,)h(astSimplify)f
-(will)g(just)f(return)g(a)h(p)s(oin)m(ter)g(to)g(the)0
-5405 y(original)e(Mapping.)0 5562 y(Although)25 b(astSimplify)f(cannot)
-h(iden)m(tify)g(ev)m(ery)g(simpli\014cation)h(that)f(is)f
-(theoretically)k(p)s(ossible,)d(su\016cien)m(t)0 5675
-y(rules)30 b(are)h(included)e(to)i(deal)g(with)f(the)h(most)g(common)f
-(and)g(imp)s(ortan)m(t)h(cases.)p eop end
-%%Page: 62 72
-TeXDict begin 62 71 bop 0 52 a FF(62)1891 b Fy(6)91 b(COMPOUND)31
-b(MAPPINGS)f(\(CMPMAPS\))p eop end
-%%Page: 63 73
-TeXDict begin 63 72 bop 3689 52 a FF(63)0 351 y Fz(7)135
-b(Represen)l(ting)46 b(Co)t(ordinate)g(Systems)g(\(F)-11
-b(rames\))0 591 y FF(An)32 b(AST)f(F)-8 b(rame)33 b(is)f(an)f(Ob)5
-b(ject)32 b(that)h(is)f(used)f(to)i(represen)m(t)f(a)g(co)s(ordinate)h
-(system.)45 b(Con)m(trast)33 b(this)f(with)0 704 y(a)c(Mapping)g(\()p
-Fu(x)p FF(5\),)j(whic)m(h)d(is)g(used)f(to)i(describ)s(e)e(ho)m(w)h(to)
-h(con)m(v)m(ert)h(b)s(et)m(w)m(een)f(co)s(ordinate)g(systems.)40
-b(The)27 b(t)m(w)m(o)0 817 y(concepts)k(are)g(complemen)m(tary)h(and)d
-(w)m(e)i(will)g(see)g(ho)m(w)f(they)h(w)m(ork)f(together)i(in)e
-Fu(x)p FF(13.)0 967 y(In)d(this)h(section)g(w)m(e)g(will)g(discuss)f
-(only)h(basic)g(F)-8 b(rames,)29 b(whic)m(h)f(represen)m(t)g(Cartesian)
-g(co)s(ordinate)g(systems.)0 1080 y(More)34 b(sp)s(ecialised)f(t)m(yp)s
-(es)g(of)g(F)-8 b(rame)34 b(\()p Fx(e.g.)f FF(the)g(SkyF)-8
-b(rame,)34 b(whic)m(h)e(represen)m(ts)h(celestial)j(co)s(ordinate)e
-(sys-)0 1193 y(tems,)i(and)e(the)h(Sp)s(ecF)-8 b(rame,)36
-b(whic)m(h)f(represen)m(ts)f(sp)s(ectral)h(co)s(ordinate)g(systems\))g
-(are)g(co)m(v)m(ered)i(later)e(\()p Fu(x)p FF(8)0 1306
-y(and)24 b Fu(x)p FF(9\))h(and,)g(naturally)-8 b(,)27
-b(inherit)d(the)g(prop)s(erties)g(and)g(b)s(eha)m(viour)g(of)g(the)h
-(simple)f(F)-8 b(rames)25 b(discussed)e(here.)0 1580
-y Fw(7.1)112 b(The)38 b(F)-9 b(rame)38 b(Mo)s(del)0 1789
-y FF(The)30 b(b)s(est)f(w)m(a)m(y)i(to)g(think)f(ab)s(out)g(a)g(F)-8
-b(rame)32 b(is)e(lik)m(e)h(the)g(frame)f(that)g(y)m(ou)h(w)m(ould)f
-(plot)g(around)g(a)g(graph.)40 b(In)0 1902 y(t)m(w)m(o)34
-b(dimensions,)f(y)m(ou)g(w)m(ould)g(ha)m(v)m(e)h(an)e(\\)p
-Fo(x)p FF(")i(and)e(a)h(\\)p Fo(y)s FF(")g(axis,)h(a)g(title)g(on)e
-(the)h(graph)g(and)f(lab)s(els)h(on)f(the)0 2015 y(axes,)g(together)h
-(with)e(an)g(indication)h(of)g(the)f(ph)m(ysical)h(units)f(b)s(eing)g
-(plotted.)44 b(The)30 b(v)-5 b(alues)32 b(mark)m(ed)f(along)0
-2128 y(eac)m(h)37 b(axis)f(w)m(ould)g(b)s(e)f(formatted)h(in)f(a)h(h)m
-(uman-readable)g(w)m(a)m(y)-8 b(.)58 b(The)35 b(frame)h(around)f(a)h
-(graph)f(therefore)0 2240 y(de\014nes)e(a)h(co)s(ordinate)h(space)g
-(within)e(whic)m(h)h(y)m(ou)g(can)h(lo)s(cate)g(p)s(oin)m(ts,)g(dra)m
-(w)f(lines,)h(calculate)i(distances,)0 2353 y Fx(etc.)0
-2503 y FF(An)30 b(AST)h(F)-8 b(rame)31 b(w)m(orks)g(in)g(m)m(uc)m(h)f
-(the)h(same)h(w)m(a)m(y)-8 b(,)32 b(em)m(b)s(o)s(dying)e(all)i(of)f
-(these)g(concepts)h(and)e(a)h(few)g(more.)0 2616 y(It)f(also)h(allo)m
-(ws)g(an)m(y)f(n)m(um)m(b)s(er)f(of)h(axes,)h(whic)m(h)e(means)h(that)h
-(a)f(F)-8 b(rame)31 b(can)f(represen)m(t)g(co)s(ordinate)g(systems)0
-2729 y(with)g(an)m(y)h(n)m(um)m(b)s(er)e(of)h(dimensions.)40
-b(Y)-8 b(ou)31 b(sp)s(ecify)f(ho)m(w)h(man)m(y)f(when)g(y)m(ou)g
-(create)i(it.)0 2879 y(Remem)m(b)s(er)25 b(that)h(the)f(basic)h(F)-8
-b(rame)26 b(w)m(e)g(are)g(considering)f(here)g(is)h(completely)h
-(general.)40 b(It)25 b(kno)m(ws)g(nothing)0 2992 y(of)e(celestial)i(co)
-s(ordinates,)g(for)e(example,)i(and)d(all)h(its)g(axes)h(are)f(equiv)-5
-b(alen)m(t.)39 b(It)23 b(can)g(b)s(e)f(adapted)h(to)g(describ)s(e)0
-3105 y(an)m(y)30 b(general)g(purp)s(ose)e(Cartesian)h(co)s(ordinate)i
-(system)e(b)m(y)g(setting)i(its)e(attributes,)i(suc)m(h)e(as)g(its)h
-(Title)g(and)0 3218 y(axis)h(Lab)s(els,)f Fx(etc.)g FF(to)h
-(appropriate)g(v)-5 b(alues.)0 3492 y Fw(7.2)112 b(Creating)38
-b(a)g(F)-9 b(rame)0 3701 y FF(Creating)31 b(a)g(F)-8
-b(rame)31 b(is)f(straigh)m(tforw)m(ard)i(and)d(follo)m(ws)j(the)e
-(usual)g(pattern:)227 3899 y Ft(#include)41 b("ast.h")227
-3999 y(astFrame)g(*frame;)227 4198 y(...)227 4397 y(frame)h(=)h
-(astFrame\()d(2,)j("")f(\);)0 4608 y FF(The)28 b(\014rst)g(argumen)m(t)
-h(of)g(the)g(astF)-8 b(rame)30 b(constructor)f(function)f(sp)s
-(eci\014es)h(the)f(n)m(um)m(b)s(er)g(of)h(axes)g(whic)m(h)f(the)0
-4721 y(F)-8 b(rame)31 b(should)f(ha)m(v)m(e.)0 4996 y
-Fw(7.3)112 b(Using)38 b(a)g(F)-9 b(rame)39 b(as)f(a)f(Mapping)0
-5204 y FF(W)-8 b(e)38 b(should)d(brie\015y)h(p)s(oin)m(t)g(out)h(that)g
-(the)f(F)-8 b(rame)38 b(w)m(e)f(created)g(ab)s(o)m(v)m(e)h(\()p
-Fu(x)p FF(7.2\))g(is)f(also)g(a)g(Mapping)f(\()p Fu(x)p
-FF(5.1\))0 5317 y(and)30 b(therefore)h(inherits)f(the)g(prop)s(erties)g
-(and)g(b)s(eha)m(viour)g(common)g(to)h(other)g(Mappings.)0
-5467 y(One)i(w)m(a)m(y)h(to)g(see)g(this)f(is)g(to)h(set)g(the)f(F)-8
-b(rame's)34 b(Rep)s(ort)f(attribute)h(\(inherited)f(from)g(the)g
-(Mapping)g(class\))0 5580 y(to)i(a)g(non-zero)f(v)-5
-b(alue)35 b(and)f(pass)g(the)g(F)-8 b(rame)35 b(p)s(oin)m(ter)f(to)h(a)
-g(co)s(ordinate)g(transformation)g(function,)g(suc)m(h)0
-5693 y(as)c(astT)-8 b(ran2.)p eop end
-%%Page: 64 74
-TeXDict begin 64 73 bop 0 52 a FF(64)1200 b Fy(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))227 351
-y Ft(double)41 b(xin[)h(5)h(])h(=)f({)g(0.0,)f(1.0,)g(2.0,)g(3.0,)g
-(4.0,)g(5.0)g(};)227 451 y(double)f(yin[)h(5)h(])h(=)f({)g(0.0,)f(2.0,)
-g(4.0,)g(6.0,)g(8.0,)g(10.0)g(};)227 551 y(double)f(xout[)h(5)h(];)227
-650 y(double)e(yout[)h(5)h(];)227 849 y(...)227 1049
-y(astSet\()e(frame,)g("Report=1")f(\);)227 1148 y(astTran2\()g(frame,)h
-(5,)i(xin,)f(yin,)g(1,)h(xout,)e(yout)h(\);)0 1445 y
-FF(The)30 b(resulting)g(output)g(migh)m(t)h(then)g(lo)s(ok)f(lik)m(e)i
-(this:)227 1742 y Fq(\(1,)47 b(2\))g(-->)g(\(1,)g(2\))227
-1855 y(\(2,)g(4\))g(-->)g(\(2,)g(4\))227 1968 y(\(3,)g(6\))g(-->)g
-(\(3,)g(6\))227 2081 y(\(4,)g(8\))g(-->)g(\(4,)g(8\))227
-2194 y(\(5,)g(10\))g(-->)g(\(5,)g(10\))0 2491 y FF(This)39
-b(is)h(not)g(v)m(ery)g(exciting)h(b)s(ecause)e(a)i(F)-8
-b(rame)40 b(implemen)m(ts)g(an)g(iden)m(tit)m(y)h(transformation)f
-(just)f(lik)m(e)i(a)0 2604 y(UnitMap)c(\()p Fu(x)p FF(5.9\).)60
-b(Ho)m(w)m(ev)m(er,)40 b(it)d(illustrates)g(that)g(a)f(F)-8
-b(rame)37 b(can)g(b)s(e)e(used)h(as)g(a)h(Mapping)f(and)f(that)i(its)0
-2717 y(Nin)30 b(and)g(Nout)h(attributes)g(are)g(b)s(oth)e(equal)i(to)g
-(the)g(n)m(um)m(b)s(er)e(of)h(F)-8 b(rame)32 b(axes.)0
-2891 y(When)d(w)m(e)i(consider)e(more)h(sp)s(ecialised)g(F)-8
-b(rames)31 b(\()p Fx(e.g.)e Fu(x)p FF(13\),)j(w)m(e)e(will)g(see)h
-(that)f(using)f(them)h(as)g(Mappings)0 3004 y(can)h(b)s(e)e(v)m(ery)i
-(useful)f(indeed.)0 3336 y Fw(7.4)112 b(F)-9 b(rame)39
-b(Axis)e(A)m(ttributes)0 3575 y FF(F)-8 b(rames)36 b(ha)m(v)m(e)h(a)e
-(n)m(um)m(b)s(er)f(of)i(attributes)g(whic)m(h)f(can)g(tak)m(e)i(m)m
-(ultiple)f(v)-5 b(alues,)37 b(one)f(for)f(eac)m(h)i(axis.)56
-b(These)0 3688 y(separate)42 b(v)-5 b(alues)42 b(are)g(iden)m(ti\014ed)
-g(b)m(y)f(app)s(ending)f(the)i(axis)g(n)m(um)m(b)s(er)e(in)h(paren)m
-(theses)h(to)g(the)g(attribute)0 3801 y(name.)76 b(F)-8
-b(or)43 b(example,)j(the)c(Lab)s(el\(1\))h(attribute)g(is)f(a)h(c)m
-(haracter)g(string)f(con)m(taining)i(the)e(lab)s(el)h(whic)m(h)0
-3913 y(app)s(ears)30 b(on)g(the)g(\014rst)g(axis.)0 4088
-y(Axis)k(attributes)h(are)g(accessed)g(in)f(the)g(same)h(w)m(a)m(y)g
-(as)f(all)h(other)g(attributes)f(\()p Fu(x)p FF(4.5,)k
-Fu(x)p FF(4.6)d(and)f Fu(x)p FF(4.7\).)54 b(F)-8 b(or)0
-4201 y(example,)31 b(the)g(Lab)s(el)f(on)g(the)h(second)f(axis)h(migh)m
-(t)g(b)s(e)f(obtained)h(as)f(follo)m(ws:)227 4484 y Ft(const)42
-b(char)g(*label;)227 4684 y(...)227 4883 y(label)g(=)h(astGetC\()d
-(frame,)h("Label\(2\)")f(\);)0 5180 y FF(Other)d(attribute)i(access)g
-(functions)e(\(astSetX,)i(astT)-8 b(est)39 b(and)e(astClear\))i(ma)m(y)
-f(also)h(b)s(e)e(applied)h(to)g(axis)0 5293 y(attributes)31
-b(in)f(the)h(same)f(w)m(a)m(y)-8 b(.)0 5467 y(If)27 b(the)h(axis)g(n)m
-(um)m(b)s(er)f(is)g(stored)h(in)f(a)h(program)g(v)-5
-b(ariable,)29 b(then)e(its)i(v)-5 b(alue)28 b(m)m(ust)f(b)s(e)g
-(formatted)i(to)f(generate)0 5580 y(a)43 b(suitable)h(attribute)f(name)
-g(b)s(efore)g(using)f(this)h(to)h(access)g(the)f(attribute)h(itself.)79
-b(F)-8 b(or)43 b(example,)k(the)0 5693 y(follo)m(wing)32
-b(will)f(prin)m(t)f(out)g(the)h(Lab)s(el)f(v)-5 b(alue)31
-b(for)f(eac)m(h)i(axis)e(of)h(a)g(F)-8 b(rame:)p eop
-end
-%%Page: 65 75
-TeXDict begin 65 74 bop 0 52 a Fy(7.5)92 b(F)-8 b(rame)31
-b(A)m(ttributes)2794 b FF(65)227 351 y Ft(#include)41
-b(<stdio.h>)227 451 y(char)h(name[)g(18)g(];)227 551
-y(int)h(iaxis,)e(naxes;)227 750 y(...)227 949 y(naxes)h(=)h(astGetI\()d
-(frame,)h("Naxes")g(\);)227 1049 y(for)i(\()g(iaxis)e(=)i(1;)g(iaxis)f
-(<=)h(naxes;)e(iaxis++)f(\))j({)358 1148 y(\(void\))e(sprintf\()f
-(name,)i("Label\(\045d\)",)d(iaxis)i(\);)358 1248 y(label)h(=)h
-(astGetC\()d(frame,)h(name)h(\);)358 1348 y(\(void\))f(printf\()g
-("Label)g(\0452d:)h(\045s\\n",)f(iaxis,)g(label)h(\);)227
-1447 y(})0 1730 y FF(Note)32 b(the)e(use)g(of)h(the)f(Naxes)i
-(attribute)f(to)g(determine)f(the)h(n)m(um)m(b)s(er)e(of)h(F)-8
-b(rame)32 b(axes.)0 1899 y(The)e(output)g(from)g(this)g(migh)m(t)h(lo)s
-(ok)g(lik)m(e)h(the)e(follo)m(wing:)227 2182 y Fq(Label)94
-b(1:)48 b(Axis)e(1)227 2295 y(Label)94 b(2:)48 b(Axis)e(2)0
-2577 y FF(In)25 b(this)h(case,)i(the)e(F)-8 b(rame's)26
-b(default)g(axis)h(Lab)s(els)e(ha)m(v)m(e)i(b)s(een)e(rev)m(ealed)i(as)
-f(rather)g(un-exciting.)40 b(Normally)-8 b(,)0 2690 y(y)m(ou)22
-b(w)m(ould)f(set)g(m)m(uc)m(h)h(more)f(useful)g(v)-5
-b(alues,)23 b(t)m(ypically)g(when)e(y)m(ou)g(create)i(the)f(F)-8
-b(rame|p)s(erhaps)20 b(something)0 2803 y(lik)m(e:)227
-3073 y Ft(frame)42 b(=)h(astFrame\()d(2,)j("Label\(1\)=Offse)o(t)38
-b(from)j(centre)h(of)g(field,")1143 3172 y("Unit\(1\))e(=mm,")1143
-3272 y("Label\(2\)=Trans)o(mis)o(si)o(on)d(coefficient,")1143
-3371 y("Unit\(2\))j(=\045")i(\);)0 3654 y FF(Here,)28
-b(w)m(e)e(ha)m(v)m(e)h(also)g(set)f(the)g(\(c)m(haracter)i(string\))e
-(Unit)g(attribute)h(for)f(eac)m(h)h(axis)f(to)h(describ)s(e)e(the)h(ph)
-m(ysical)0 3767 y(units)31 b(represen)m(ted)g(on)h(that)g(axis.)44
-b(All)32 b(the)g(attribute)g(assignmen)m(ts)g(ha)m(v)m(e)h(b)s(een)e
-(com)m(bined)g(in)m(to)i(a)f(single)0 3880 y(string,)f(separated)f(b)m
-(y)h(commas.)0 4196 y Fw(7.5)112 b(F)-9 b(rame)39 b(A)m(ttributes)0
-4427 y FF(W)-8 b(e)37 b(will)g(no)m(w)f(brie\015y)g(outline)g(the)h(v)
--5 b(arious)36 b(attributes)h(asso)s(ciated)h(with)d(a)i(F)-8
-b(rame)37 b(\(this)g(is,)h(of)e(course,)0 4540 y(in)e(addition)g(to)h
-(those)g(inherited)f(from)f(the)i(Mapping)f(class\).)53
-b(W)-8 b(e)35 b(will)g(not)f(delv)m(e)h(to)s(o)g(deeply)f(in)m(to)h
-(the)0 4653 y(details)22 b(of)g(eac)m(h)g(attribute,)i(for)d(whic)m(h)g
-(y)m(ou)h(should)e(consult)i(the)f(appropriate)h(description)f(in)g
-(App)s(endix)f(C.)0 4766 y(Instead,)30 b(w)m(e)h(aim)g(simply)f(to)h
-(sk)m(etc)m(h)h(the)e(range)h(of)g(facilities)h(a)m(v)-5
-b(ailable:)227 5049 y FD(Naxes)427 5161 y FF(A)31 b(read-only)g(in)m
-(teger)g(giving)g(the)g(n)m(um)m(b)s(er)e(of)i(F)-8 b(rame)31
-b(axes.)227 5314 y FD(Title)427 5427 y FF(A)g(string)f(describing)g
-(the)h(co)s(ordinate)g(system)f(whic)m(h)h(the)f(F)-8
-b(rame)31 b(represen)m(ts.)227 5580 y FD(Lab)s(el\(axis\))427
-5693 y FF(A)g(lab)s(el)f(string)h(for)f(eac)m(h)h(axis.)p
-eop end
-%%Page: 66 76
-TeXDict begin 66 75 bop 0 52 a FF(66)1200 b Fy(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))227 351
-y FD(Unit\(axis\))427 464 y FF(A)g(string)g(describing)g(the)g(ph)m
-(ysical)h(units)e(on)h(eac)m(h)h(axis.)41 b(Y)-8 b(ou)29
-b(can)g(c)m(ho)s(ose)h(whether)e(to)427 577 y(mak)m(e)34
-b(this)f(attribute)h(\\activ)m(e")i(or)d(\\passiv)m(e")h(\(using)f
-(astSetActiv)m(eUnit)j(\).)49 b(If)33 b(activ)m(e,)427
-690 y(its)42 b(v)-5 b(alue)41 b(will)h(b)s(e)f(tak)m(en)h(in)m(to)g
-(accoun)m(t)h(when)d(\014nding)g(the)h(Mapping)g(b)s(et)m(w)m(een)h(t)m
-(w)m(o)427 803 y(F)-8 b(rames)36 b(\()p Fx(e.g.)55 b
-FF(a)36 b(scaling)g(of)f(0.001)i(w)m(ould)e(b)s(e)g(used)f(to)i
-(connect)h(t)m(w)m(o)f(axis)g(with)f(units)427 916 y(of)c(\\km")g(and)g
-(\\m"\).)42 b(If)30 b(passiv)m(e,)i(its)f(v)-5 b(alue)32
-b(is)e(ignored.)42 b(Its)31 b(use)f(is)h(describ)s(ed)f(in)g(more)427
-1029 y(detail)i(in)e Fu(x)p FF(7.14.)227 1160 y FD(Sym)m(b)s
-(ol\(axis\))427 1273 y FF(A)j(string)f(con)m(taining)i(a)f(\\short)f
-(form")h(sym)m(b)s(ol)f(\()p Fx(e.g.)g FF(lik)m(e)h(\\X")h(or)e(\\Y"\))
-i(used)d(to)i(rep-)427 1386 y(resen)m(t)e(the)g(quan)m(tit)m(y)g
-(plotted)h(on)e(eac)m(h)h(axis.)227 1517 y FD(Digits/Digits\(axis\))427
-1630 y FF(The)g(preferred)f(n)m(um)m(b)s(er)h(of)g(digits)h(of)g
-(precision)f(to)i(b)s(e)d(used)h(when)g(formatting)h(v)-5
-b(alues)427 1743 y(for)30 b(displa)m(y)h(on)f(eac)m(h)i(axis.)227
-1875 y FD(F)-9 b(ormat\(axis\))427 1987 y FF(A)45 b(string)g(con)m
-(taining)h(a)g Fx(format)h(sp)-5 b(e)g(ci\014er)46 b
-FF(whic)m(h)f(determines)f(exactly)j(ho)m(w)e(v)-5 b(alues)427
-2100 y(should)40 b(b)s(e)h(formatted)g(for)g(displa)m(y)g(on)g(eac)m(h)
-h(axis)g(\()p Fu(x)p FF(7.6\).)75 b(If)40 b(this)h(attribute)h(is)f
-(un-)427 2213 y(set,)f(the)d(formatting)i(is)e(based)g(on)g(the)g
-(Digits)i(v)-5 b(alue,)40 b(otherwise)d(the)h(F)-8 b(ormat)38
-b(string)427 2326 y(o)m(v)m(er-rides)32 b(the)e(Digits)i(v)-5
-b(alue.)227 2458 y FD(Direction\(axis\))427 2570 y FF(A)35
-b(b)s(o)s(olean)g(\(in)m(teger\))i(v)-5 b(alue)36 b(whic)m(h)e
-(indicates)i(in)f(whic)m(h)f(direction)i(eac)m(h)g(axis)f(should)427
-2683 y(b)s(e)27 b(plotted.)40 b(If)27 b(it)h(is)f(non-zero)h(\(the)g
-(default\),)h(the)e(axis)h(should)e(b)s(e)h(plotted)h(in)f(the)h(con-)
-427 2796 y(v)m(en)m(tional)34 b(direction|)p Fx(i.e.)e
-FF(increasing)g(to)h(the)e(righ)m(t)i(for)e(the)h(abscissa)g(and)g
-(increasing)427 2909 y(up)m(w)m(ards)37 b(for)g(the)g(ordinate.)62
-b(If)37 b(it)h(is)g(zero,)i(the)d(axis)h(should)e(b)s(e)h(plotted)h(in)
-f(rev)m(erse.)427 3022 y(This)d(attribute)h(is)f(pro)m(vided)h(as)f(a)h
-(hin)m(t)f(only)h(and)f(programs)g(are)h(free)f(to)h(ignore)g(it)g(if)
-427 3135 y(they)c(wish.)227 3266 y FD(Domain)427 3379
-y FF(A)37 b(c)m(haracter)i(string)d(whic)m(h)h(iden)m(ti\014es)g(the)g
-Fx(physic)-5 b(al)41 b(domain)d FF(to)g(whic)m(h)e(the)h(F)-8
-b(rame's)427 3492 y(co)s(ordinate)31 b(system)g(applies.)41
-b(The)30 b(primary)f(purp)s(ose)f(of)j(this)f(attribute)h(is)g(to)g
-(prev)m(en)m(t)427 3605 y(un)m(w)m(an)m(ted)24 b(con)m(v)m(ersions)h
-(from)e(o)s(ccurring)g(b)s(et)m(w)m(een)i(co)s(ordinate)f(systems)g
-(whic)m(h)f(are)h(not)427 3718 y(related.)42 b(Its)30
-b(use)g(is)h(describ)s(ed)e(in)h(more)h(detail)g(in)f
-Fu(x)p FF(7.12.)227 3849 y FD(System)427 3962 y FF(A)37
-b(c)m(haracter)h(string)f(whic)m(h)f(iden)m(ti\014es)h(the)g(sp)s
-(eci\014c)f(co)s(ordinate)h(system)g(used)f(to)h(de-)427
-4075 y(scrib)s(e)f(p)s(ositions)h(within)f(the)h(ph)m(ysical)g(domain)f
-(represen)m(ted)h(b)m(y)f(the)h(F)-8 b(rame.)60 b(F)-8
-b(or)38 b(a)427 4188 y(simple)21 b(F)-8 b(rame,)23 b(this)e(attribute)g
-(curren)m(tly)g(has)f(a)h(\014xed)f(v)-5 b(alue)21 b(of)f
-(\\Cartesian",)k(but)c(could)427 4301 y(in)30 b(principle)f(b)s(e)h
-(extended)g(to)g(include)g(options)g(suc)m(h)g(as)g(\\P)m(olar",)i
-(\\Cylindrical",)f Fx(etc)p FF(.)427 4414 y(More)26 b(sp)s(ecialised)f
-(F)-8 b(rames)25 b(suc)m(h)f(as)h(the)g(SkyF)-8 b(rame,)26
-b(TimeF)-8 b(rame)26 b(and)e(Sp)s(ecF)-8 b(rame,)26 b(re-)427
-4527 y(de\014ne)j(the)g(allo)m(w)m(ed)i(v)-5 b(alues)29
-b(to)h(b)s(e)e(appropriate)i(to)f(the)h(domain)f(whic)m(h)f(they)i
-(describ)s(e.)427 4640 y(F)-8 b(or)35 b(instance,)i(the)d(SkyF)-8
-b(rame)35 b(allo)m(ws)h(v)-5 b(alues)35 b(suc)m(h)f(as)h(\\FK4")g(and)f
-(\\Galactic",)40 b(and)427 4753 y(the)31 b(Sp)s(ecF)-8
-b(rame)30 b(allo)m(ws)i(v)-5 b(alues)31 b(suc)m(h)f(as)h(\\frequency")f
-(and)g(\\w)m(a)m(v)m(elength".)227 4884 y FD(Ep)s(o)s(c)m(h)427
-4997 y FF(This)d(v)-5 b(alue)28 b(is)g(used)e(to)j(qualify)e(a)h(co)s
-(ordinate)h(system)e(b)m(y)h(giving)g(the)g(momen)m(t)g(in)f(time)427
-5110 y(when)i(the)i(co)s(ordinates)g(are)f(correct.)42
-b(Usually)-8 b(,)31 b(this)g(will)f(b)s(e)g(the)g(date)h(of)f(observ)-5
-b(ation.)427 5223 y(The)37 b(Ep)s(o)s(c)m(h)f(v)-5 b(alue)37
-b(is)g(imp)s(ortan)m(t)g(in)g(cases)g(where)g(co)s(ordinates)g(systems)
-g(mo)m(v)m(e)h(with)427 5336 y(resp)s(ect)f(to)g(eac)m(h)g(other)g(o)m
-(v)m(er)g(time.)60 b(An)36 b(example)h(of)f(t)m(w)m(o)i(suc)m(h)e(co)s
-(ordinate)h(systems)427 5449 y(are)31 b(the)g(FK4)f(and)g(FK5)h
-(celestial)i(co)s(ordinate)e(systems.)227 5580 y FD(ObsLon)427
-5693 y FF(Sp)s(eci\014es)40 b(the)g(longitude)h(of)g(the)f(observ)m(er)
-h(\(assumed)f(to)h(b)s(e)f(on)g(the)g(surface)h(of)f(the)p
-eop end
-%%Page: 67 77
-TeXDict begin 67 76 bop 0 52 a Fy(7.6)92 b(F)-8 b(ormatting)32
-b(Axis)f(V)-8 b(alues)2541 b FF(67)427 351 y(earth\).)77
-b(The)41 b(basic)i(F)-8 b(rame)43 b(class)g(do)s(es)e(not)i(use)e(this)
-h(v)-5 b(alue,)46 b(but)41 b(sp)s(ecialised)i(sub-)427
-464 y(classes)32 b(ma)m(y)-8 b(.)45 b(F)-8 b(or)32 b(instance,)g(the)f
-(Sp)s(ecF)-8 b(rame)32 b(class)g(uses)e(it)i(to)g(calculate)i(the)d
-(relativ)m(e)427 577 y(v)m(elo)s(cit)m(y)26 b(of)e(the)f(observ)m(er)h
-(and)f(the)g(cen)m(tre)i(of)f(the)f(earth)h(for)f(use)g(in)g(con)m(v)m
-(erting)j(b)s(et)m(w)m(een)427 690 y(standards)k(of)g(rest.)227
-837 y FD(ObsLat)427 950 y FF(Sp)s(eci\014es)g(the)h(latitude)g(of)f
-(the)h(observ)m(er.)41 b(Use)31 b(in)f(conjunction)g(with)g(ObsLon.)0
-1215 y(There)i(are)h(also)g(some)g(further)f(F)-8 b(rame)33
-b(attributes,)h(not)f(describ)s(ed)e(ab)s(o)m(v)m(e,)k(whic)m(h)d(are)h
-(imp)s(ortan)m(t)f(when)0 1328 y(F)-8 b(rames)37 b(are)g(used)e(as)i
-(templates)h(to)f(searc)m(h)g(for)f(other)g(F)-8 b(rames.)60
-b(Their)35 b(use)h(go)s(es)h(b)s(ey)m(ond)f(the)g(presen)m(t)0
-1441 y(discussion.)0 1737 y Fw(7.6)112 b(F)-9 b(ormatting)38
-b(Axis)g(V)-9 b(alues)0 1960 y FF(The)23 b(co)s(ordinate)h(v)-5
-b(alues)24 b(asso)s(ciated)h(with)e(eac)m(h)i(axis)f(of)g(a)g(F)-8
-b(rame)24 b(are)g(stored)g(\()p Fx(e.g.)f FF(within)g(y)m(our)g
-(program\))0 2072 y(as)37 b(double)f(v)-5 b(alues.)59
-b(The)36 b(F)-8 b(rame)38 b(class)f(therefore)g(pro)m(vides)f(a)h
-(function,)h(astF)-8 b(ormat,)41 b(to)c(con)m(v)m(ert)h(these)0
-2185 y(v)-5 b(alues)31 b(in)m(to)g(formatted)g(strings)f(for)g(displa)m
-(y:)227 2437 y Ft(const)42 b(char)g(*string)227 2537
-y(double)f(value;)227 2736 y(...)227 2935 y(string)g(=)j(astFormat\()39
-b(frame,)i(iaxis,)g(value)h(\);)0 3200 y FF(Here,)33
-b(the)e(astF)-8 b(ormat)34 b(function)d(is)h(passed)f(a)h(F)-8
-b(rame)33 b(p)s(oin)m(ter,)f(the)g(n)m(um)m(b)s(er)e(of)i(an)f(axis)h
-(\(\\iaxis"\))i(and)d(a)0 3313 y(double)j(precision)g(v)-5
-b(alue)34 b(to)h(format)f(\(\\v)-5 b(alue"\).)54 b(It)34
-b(returns)e(a)j(p)s(oin)m(ter)f(to)g(c)m(haracter)i(string)e(con)m
-(taining)0 3426 y(the)d(formatted)g(v)-5 b(alue.)0 3590
-y(By)32 b(default,)g(the)g(formatting)g(applied)f(will)h(b)s(e)f
-(determined)g(b)m(y)h(the)f(F)-8 b(rame's)33 b(Digits)g(attribute)f
-(and)f(will)0 3703 y(normally)36 b(displa)m(y)g(results)g(with)g(sev)m
-(en)g(digits)h(of)f(precision)g(\(corresp)s(onding)g(appro)m(ximately)h
-(to)g(the)f(C)0 3815 y(\\\015oat")g(data)f(t)m(yp)s(e)f(on)g(man)m(y)g
-(mac)m(hines\).)53 b(Setting)35 b(a)f(di\013eren)m(t)h(Digits)g(v)-5
-b(alue,)36 b(ho)m(w)m(ev)m(er,)h(allo)m(ws)e(y)m(ou)g(to)0
-3928 y(adjust)27 b(the)h(precision)g(as)g(necessary)g(to)h(suit)e(the)h
-(accuracy)h(of)f(the)g(co)s(ordinate)h(data)f(y)m(ou)g(are)g(pro)s
-(cessing.)0 4041 y(If)39 b(\014ner)g(con)m(trol)i(is)e(needed,)j(it)e
-(is)g(also)g(p)s(ossible)f(to)h(set)h(a)e(Digits)j(v)-5
-b(alue)40 b(for)f(eac)m(h)i(individual)e(axis)h(b)m(y)0
-4154 y(app)s(ending)27 b(an)i(axis)g(n)m(um)m(b)s(er)e(to)j(the)f
-(attribute)g(name)g(\()p Fx(e.g.)f FF(\\Digits\(2\)"\).)44
-b(If)29 b(this)f(is)h(done,)g(it)g(o)m(v)m(er-rides)0
-4267 y(the)i(e\013ect)g(of)g(the)g(F)-8 b(rame's)31 b(main)f(Digits)i
-(v)-5 b(alue)31 b(for)f(that)h(axis.)0 4431 y(Ev)m(en)25
-b(\014ner)f(con)m(trol)j(is)e(p)s(ossible)f(b)m(y)h(setting)h(the)f
-(\(c)m(haracter)i(string\))f(F)-8 b(ormat)26 b(attribute)g(for)e(a)i(F)
--8 b(rame)26 b(axis.)0 4544 y(The)i(string)g(giv)m(en)h(should)f(con)m
-(tain)i(a)e(C)g Fx(format)33 b(sp)-5 b(e)g(ci\014er)29
-b FF(whic)m(h)f(explicitly)i(determines)e(ho)m(w)h(the)f(v)-5
-b(alues)0 4656 y(on)26 b(that)h(axis)g(should)f(b)s(e)g(formatted.)40
-b(This)25 b(will)i(o)m(v)m(er-ride)h(the)f(e\013ects)h(of)e(an)m(y)h
-(Digits)h(v)-5 b(alue)3260 4623 y Fv(12)3335 4656 y FF(.)40
-b(An)m(y)26 b(v)-5 b(alid)0 4769 y(\\prin)m(tf)7 b(")31
-b(format)f(sp)s(eci\014er)g(ma)m(y)h(b)s(e)f(used)g(so)g(long)h(as)g
-(it)g(consumes)f(exactly)i(one)e(double)g(v)-5 b(alue.)0
-4933 y(When)27 b(setting)h(F)-8 b(ormat)28 b(v)-5 b(alues,)28
-b(remem)m(b)s(er)e(that)i(the)f(\\\045")g(whic)m(h)g(app)s(ears)f(in)g
-(the)h(format)h(sp)s(eci\014er)e(ma)m(y)0 5046 y(need)d(to)h(b)s(e)e
-(doubled)g(to)i(\\\045\045")f(if)g(y)m(ou)g(are)h(using)e(a)i(function)
-f(\(suc)m(h)g(as)g(astSet\))h(whic)m(h)f(in)m(terprets)g(\\prin)m(tf)7
-b(")0 5159 y(format)31 b(sp)s(eci\014ers)e(itself.)0
-5322 y(It)34 b(is)f(recommended)g(that)h(y)m(ou)g(use)f(astF)-8
-b(ormat)36 b(whenev)m(er)d(y)m(ou)h(displa)m(y)f(formatted)i(co)s
-(ordinate)f(v)-5 b(alues,)0 5435 y(ev)m(en)26 b(although)f(y)m(ou)g
-(could)g(format)g(them)g(y)m(ourself)g(using)f(\\sprin)m(tf)7
-b(".)39 b(This)24 b(is)h(b)s(ecause)g(it)h(puts)e(the)h(F)-8
-b(rame)p 0 5516 1512 4 v 73 5570 a Fs(12)138 5602 y Fr(The)25
-b(exception)g(to)g(this)g(rule)g(is)h(that)e(if)i(the)e(F)-6
-b(ormat)26 b(v)l(alue)e(includes)h(a)g(precision)h(of)g(\\)p
-Fn(:)p Fm(\003)p Fr(",)h(then)d(Digits)i(will)g(b)r(e)f(used)f(to)0
-5693 y(determine)i(the)f(actual)h(precision)h(used.)p
-eop end
-%%Page: 68 78
-TeXDict begin 68 77 bop 0 52 a FF(68)1200 b Fy(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))0 351 y
-FF(in)34 b(con)m(trol)i(of)e(formatting.)53 b(When)35
-b(y)m(ou)f(start)h(to)g(handle)f(more)g(elab)s(orate)i(F)-8
-b(rames)35 b(\(represen)m(ting,)h(sa)m(y)-8 b(,)0 464
-y(celestial)32 b(co)s(ordinates\),)f(y)m(ou)f(will)g(need)g(di\013eren)
-m(t)g(formatting)h(metho)s(ds.)39 b(This)29 b(approac)m(h)h(deliv)m
-(ers)h(them)0 577 y(without)f(an)m(y)h(c)m(hange)h(to)f(y)m(our)f(soft)
-m(w)m(are.)0 742 y(Y)-8 b(ou)32 b(should)e(also)j(consider)e(regularly)
-h(using)f(the)h(astNorm)g(function,)g(describ)s(ed)e(b)s(elo)m(w)i(\()p
-Fu(x)p FF(7.7\),)i(for)d(an)m(y)0 855 y(v)-5 b(alues)31
-b(that)g(will)f(b)s(e)g(made)h(visible)f(to)h(the)g(user)f(of)g(y)m
-(our)h(soft)m(w)m(are.)0 1155 y Fw(7.7)112 b(Normalising)39
-b(F)-9 b(rame)38 b(Co)s(ordinates)0 1380 y FF(The)c(function)h(astNorm)
-h(is)f(pro)m(vided)f(to)i(cop)s(e)f(with)g(the)g(fact)h(that)f(some)h
-(co)s(ordinate)f(systems)g(do)g(not)0 1493 y(extend)43
-b(inde\014nitely)g(in)f(all)i(directions.)79 b(Some)43
-b(ma)m(y)g(ha)m(v)m(e)h(b)s(oundaries,)h(outside)e(whic)m(h)g(co)s
-(ordinates)0 1606 y(are)34 b(meaningless,)i(while)e(others)f(wrap)g
-(around)g(on)h(themselv)m(es,)i(so)e(that)g(after)h(a)f(certain)h
-(distance)f(y)m(ou)0 1719 y(return)25 b(to)j(the)e(b)s(eginning)g
-(again)h(\(co)s(ordinate)h(systems)e(based)g(on)h(circles)g(and)f
-(spheres,)h(for)f(instance\).)40 b(A)0 1831 y(basic)29
-b(F)-8 b(rame)30 b(has)e(no)h(suc)m(h)f(complications,)j(but)d(other)h
-(more)g(sp)s(ecialised)h(F)-8 b(rames)29 b(\(suc)m(h)g(as)g(SkyF)-8
-b(rames,)0 1944 y(represen)m(ting)31 b(the)f(celestial)j(sphere|)p
-Fu(x)p FF(8\))e(do.)0 2109 y(The)43 b(role)i(pla)m(y)m(ed)f(b)m(y)g
-(astNorm)g(is)g(to)g Fx(normalise)i FF(an)m(y)e(arbitrary)f(set)i(of)f
-(co)s(ordinates)g(b)m(y)g(con)m(v)m(erting)0 2222 y(them)d(in)m(to)i(a)
-f(set)g(whic)m(h)f(is)h(\\within)f(b)s(ounds",)i(in)m(terpreted)f
-(according)g(to)h(the)e(particular)h(F)-8 b(rame)43 b(in)0
-2335 y(question.)74 b(F)-8 b(or)42 b(example,)j(on)c(the)g(celestial)j
-(sphere,)f(a)f(righ)m(t)g(ascension)g(v)-5 b(alue)41
-b(of)h(24)g(hours)e(or)h(more)0 2448 y(can)30 b(ha)m(v)m(e)i(a)e
-(suitable)h(m)m(ultiple)g(of)f(24)h(hours)e(subtracted)h(without)g
-(a\013ecting)i(its)e(meaning)g(and)g(astNorm)0 2561 y(w)m(ould)i(p)s
-(erform)e(this)i(task.)46 b(Similarly)-8 b(,)34 b(negativ)m(e)g(v)-5
-b(alues)32 b(of)g(righ)m(t)h(ascension)f(w)m(ould)g(ha)m(v)m(e)h(a)g(m)
-m(ultiple)f(of)0 2674 y(24)26 b(hours)f(added,)h(so)f(that)h(the)g
-(result)f(lies)i(in)e(the)g(range)h(zero)g(to)h(24)f(hours.)38
-b(The)25 b(co)s(ordinates)h(in)f(question)0 2787 y(are)31
-b(mo)s(di\014ed)e(in)h(place)h(b)m(y)g(astNorm,)g(as)f(follo)m(ws:)227
-3042 y Ft(double)41 b(point[)g(2)j(];)227 3241 y(...)227
-3441 y(astNorm\()d(frame,)g(point)g(\);)0 3709 y FF(If)31
-b(the)h(co)s(ordinates)g(supplied)e(are)i(initially)h(OK,)e(as)g(they)h
-(w)m(ould)f(alw)m(a)m(ys)i(b)s(e)e(with)g(a)h(basic)g(F)-8
-b(rame,)33 b(then)0 3822 y(they)e(are)f(returned)g(unc)m(hanged.)0
-3987 y(Because)42 b(the)e(main)g(purp)s(ose)f(of)i(astNorm)g(is)f(to)h
-(con)m(v)m(ert)h(co)s(ordinates)f(in)m(to)g(the)g(preferred)e(range)i
-(for)0 4100 y(h)m(uman)32 b(consumption,)h(its)g(use)f(is)h(almost)g
-(alw)m(a)m(ys)h(appropriate)f(immediately)h(b)s(efore)e(formatting)i
-(co)s(or-)0 4213 y(dinate)27 b(v)-5 b(alues)28 b(for)e(displa)m(y)h
-(using)g(astF)-8 b(ormat)29 b(\()p Fu(x)p FF(7.6\).)41
-b(Ev)m(en)27 b(if)g(the)g(F)-8 b(rame)28 b(in)f(question)g(do)s(es)g
-(not)g(restrict)0 4326 y(the)i(range)g(of)g(co)s(ordinates,)h(so)g
-(that)f(astNorm)h(do)s(es)e(nothing,)i(using)e(it)h(will)h(allo)m(w)g
-(y)m(ou)f(to)h(pro)s(cess)e(other)0 4439 y(more)j(sp)s(ecialised)g(F)-8
-b(rames,)31 b(where)f(normalisation)h(is)g(imp)s(ortan)m(t,)f(without)h
-(c)m(hanging)g(y)m(our)f(soft)m(w)m(are.)0 4739 y Fw(7.8)112
-b(Reading)39 b(F)-9 b(ormatted)37 b(Axis)h(V)-9 b(alues)0
-4964 y FF(The)41 b(pro)s(cess)h(of)g(con)m(v)m(erting)i(a)e(formatted)g
-(co)s(ordinate)h(v)-5 b(alue)42 b(for)g(a)g(F)-8 b(rame)43
-b(axis,)j(suc)m(h)41 b(as)h(migh)m(t)h(b)s(e)0 5077 y(pro)s(duced)e(b)m
-(y)h(astF)-8 b(ormat)45 b(\()p Fu(x)p FF(7.6\),)j(bac)m(k)43
-b(in)m(to)h(a)f(n)m(umerical)g(\(double\))f(v)-5 b(alue)43
-b(ready)g(for)f(pro)s(cessing)g(is)0 5189 y(p)s(erformed)c(b)m(y)i
-(astUnformat.)69 b(Ho)m(w)m(ev)m(er,)44 b(although)c(this)g(pro)s(cess)
-f(is)h(essen)m(tially)i(the)d(in)m(v)m(erse)i(of)f(that)0
-5302 y(p)s(erformed)26 b(b)m(y)h(astF)-8 b(ormat,)31
-b(there)d(are)f(a)h(n)m(um)m(b)s(er)f(of)g(additional)i(di\016culties)f
-(that)g(m)m(ust)f(b)s(e)g(addressed)g(in)0 5415 y(practice.)0
-5580 y(The)c(main)g(use)g(for)g(astUnformat)i(is)e(in)g(reading)h
-(formatted)g(co)s(ordinate)g(v)-5 b(alues)23 b(whic)m(h)h(ha)m(v)m(e)g
-(b)s(een)f(en)m(tered)0 5693 y(b)m(y)28 b(the)h(user)f(of)g(a)h
-(program,)g(or)f(read)h(from)f(a)h(\014le.)40 b(As)28
-b(suc)m(h,)h(w)m(e)g(can)g(rarely)f(assume)h(that)g(the)f(v)-5
-b(alues)29 b(are)p eop end
-%%Page: 69 79
-TeXDict begin 69 78 bop 0 52 a Fy(7.8)92 b(Reading)31
-b(F)-8 b(ormatted)32 b(Axis)e(V)-8 b(alues)2217 b FF(69)0
-351 y(neatly)35 b(formatted)f(in)f(the)h(w)m(a)m(y)h(that)f(astF)-8
-b(ormat)36 b(w)m(ould)e(pro)s(duce.)49 b(Instead,)35
-b(it)f(is)g(usually)g(desirable)g(to)0 464 y(allo)m(w)i(considerable)g
-(\015exibilit)m(y)g(in)e(the)h(form)f(of)h(input)f(that)i(can)f(b)s(e)f
-(accommo)s(dated,)j(so)f(as)f(to)g(p)s(ermit)0 577 y(\\free-format")28
-b(data)g(input)e(b)m(y)g(the)h(user.)39 b(In)26 b(addition,)i(w)m(e)f
-(ma)m(y)g(need)g(to)g(extract)h(individual)f(co)s(ordinate)0
-690 y(v)-5 b(alues)31 b(em)m(b)s(edded)e(in)h(other)h(textual)g(data.)0
-866 y(Underlying)f(these)g(requiremen)m(ts)h(is)f(the)g(ro)s(ot)h
-(di\016cult)m(y)f(that)h(the)g(textual)g(format)g(used)e(to)i(represen)
-m(t)f(a)0 979 y(co)s(ordinate)g(v)-5 b(alue)29 b(will)g(dep)s(end)f(on)
-g(the)i(class)f(of)g(F)-8 b(rame)30 b(w)m(e)g(are)f(considering.)40
-b(F)-8 b(or)30 b(example,)g(for)f(a)g(basic)0 1091 y(F)-8
-b(rame,)42 b(astUnformat)d(ma)m(y)g(ha)m(v)m(e)h(to)f(read)f(a)h(v)-5
-b(alue)39 b(lik)m(e)h(\\1.25e-6",)45 b(whereas)38 b(for)g(a)h(more)g
-(sp)s(ecialised)0 1204 y(F)-8 b(rame)31 b(represen)m(ting)g(celestial)i
-(co)s(ordinates)e(it)g(ma)m(y)g(ha)m(v)m(e)g(to)h(handle)d(a)i(v)-5
-b(alue)31 b(lik)m(e)h(\\-07d)f(49m)g(13s".)42 b(Of)0
-1317 y(course,)31 b(the)f(format)h(migh)m(t)g(also)g(dep)s(end)e(on)h
-(whic)m(h)h(axis)f(is)h(b)s(eing)f(considered.)0 1493
-y(Ideally)-8 b(,)47 b(w)m(e)42 b(w)m(ould)g(lik)m(e)i(to)f(write)f
-(soft)m(w)m(are)i(that)f(can)f(handle)g(an)m(y)h(kind)e(of)i(F)-8
-b(rame.)77 b(Ho)m(w)m(ev)m(er,)48 b(this)0 1606 y(mak)m(es)39
-b(it)f(a)g(little)i(more)e(di\016cult)f(to)i(analyse)f(textual)h(input)
-e(data)i(to)f(extract)h(individual)f(co)s(ordinate)0
-1719 y(v)-5 b(alues,)29 b(since)g(w)m(e)g(cannot)g(mak)m(e)g
-(assumptions)e(ab)s(out)h(ho)m(w)h(the)f(v)-5 b(alues)29
-b(are)f(formatted.)41 b(It)29 b(w)m(ould)f(not)g(b)s(e)0
-1832 y(safe,)39 b(for)d(example,)j(simply)c(to)j(assume)e(that)h(the)f
-(v)-5 b(alues)37 b(b)s(eing)f(read)g(are)h(separated)g(b)m(y)f(white)h
-(space.)0 1945 y(This)h(is)i(not)f(just)g(b)s(ecause)g(they)h(migh)m(t)
-g(b)s(e)e(separated)i(b)m(y)f(some)h(other)f(c)m(haracter,)44
-b(but)38 b(also)i(b)s(ecause)0 2058 y(celestial)c(co)s(ordinate)e(v)-5
-b(alues)34 b(migh)m(t)g(themselv)m(es)h(con)m(tain)g(spaces.)51
-b(In)32 b(fact,)k(to)e(b)s(e)f(completely)i(safe,)g(w)m(e)0
-2170 y(cannot)i(mak)m(e)h(an)m(y)f(assumptions)g(ab)s(out)f(ho)m(w)h(a)
-g(formatted)h(co)s(ordinate)f(v)-5 b(alue)38 b(is)f(separated)g(from)f
-(the)0 2283 y(surrounding)28 b(text,)k(except)f(that)g(it)g(should)e(b)
-s(e)h(separated)h(in)f(some)h(w)m(a)m(y)g(whic)m(h)f(is)h(not)f(am)m
-(biguous.)0 2459 y(This)g(is)g(the)h(v)m(ery)f(basic)h(assumption)f(up)
-s(on)f(whic)m(h)h(astUnformat)h(w)m(orks.)41 b(It)30
-b(is)g(in)m(v)m(ok)m(ed)i(as)f(follo)m(ws:)227 2747 y
-Ft(int)43 b(n;)227 2946 y(...)227 3145 y(n)g(=)h(astUnformat\()38
-b(frame,)j(iaxis,)g(string,)g(&value)g(\);)0 3447 y FF(It)32
-b(is)f(supplied)g(with)g(a)h(F)-8 b(rame)32 b(p)s(oin)m(ter)g
-(\(\\frame"\),)i(the)d(n)m(um)m(b)s(er)g(of)g(an)h(axis)g(\(\\iaxis"\))
-i(and)d(a)h(c)m(haracter)0 3559 y(string)c(to)h(b)s(e)f(read)g
-(\(\\string"\).)42 b(If)28 b(it)h(succeeds)f(in)g(reading)h(a)f(v)-5
-b(alue,)30 b(astUnformat)f(returns)e(the)h(resulting)0
-3672 y(co)s(ordinate)37 b(to)g(the)g(address)f(supplied)f
-Fx(via)h FF(the)h(\014nal)f(argumen)m(t)h(\(\\&v)-5 b(alue"\).)61
-b(The)36 b(returned)f(function)0 3785 y(v)-5 b(alue)31
-b(indicates)g(ho)m(w)g(man)m(y)f(c)m(haracters)i(w)m(ere)f(read)f(from)
-g(the)g(string)h(in)f(order)g(to)h(obtain)g(this)f(result.)0
-3961 y(The)g(string)g(is)h(read)f(as)h(follo)m(ws:)111
-4262 y(1.)46 b(An)m(y)31 b(white)f(space)h(at)g(the)g(start)g(is)f
-(skipp)s(ed)f(o)m(v)m(er.)111 4476 y(2.)46 b(F)-8 b(urther)22
-b(c)m(haracters)i(are)e(considered,)i(one)f(at)f(a)h(time,)i(un)m(til)d
-(the)g(next)h(c)m(haracter)h(no)e(longer)g(matc)m(hes)227
-4589 y(an)m(y)35 b(of)g(the)f(acceptable)j(forms)d(of)g(input)g(\(giv)m
-(en)h(the)g(c)m(haracters)h(that)f(precede)g(it\).)53
-b(The)34 b(longest)227 4701 y(sequence)d(of)g(c)m(haracters)g(whic)m(h)
-g(matc)m(hes)g(is)f(then)h(considered)f(\\read".)111
-4915 y(3.)46 b(If)29 b(a)g(suitable)h(sequence)f(of)g(c)m(haracters)i
-(w)m(as)e(read)g(successfully)-8 b(,)30 b(it)g(is)f(con)m(v)m(erted)h
-(in)m(to)g(a)g(co)s(ordinate)227 5028 y(v)-5 b(alue)29
-b(whic)m(h)e(is)h(returned.)38 b(An)m(y)28 b(white)g(space)g(follo)m
-(wing)i(this)d(sequence)i(is)e(then)h(skipp)s(ed)e(o)m(v)m(er)j(and)227
-5141 y(the)i(total)h(n)m(um)m(b)s(er)d(of)i(c)m(haracters)g(consumed)f
-(is)h(returned)e(as)h(the)h(function)f(v)-5 b(alue.)111
-5354 y(4.)46 b(If)38 b(the)g(sequence)g(of)g(c)m(haracters)h(read)f(is)
-g(empt)m(y)-8 b(,)41 b(or)d(insu\016cien)m(t)g(to)h(de\014ne)e(a)h(co)s
-(ordinate)h(v)-5 b(alue,)227 5467 y(then)38 b(the)g(string)f(do)s(es)h
-(not)g(con)m(tain)h(a)f(v)-5 b(alue)38 b(to)h(read.)63
-b(In)37 b(this)g(case,)k(the)d(read)g(is)g(ab)s(orted)f(and)227
-5580 y(astUnformat)28 b(returns)e(a)h(function)f(v)-5
-b(alue)28 b(of)f(zero)h(and)e(no)h(co)s(ordinate)g(v)-5
-b(alue.)40 b(Ho)m(w)m(ev)m(er,)30 b(it)e(returns)227
-5693 y(without)j(error.)p eop end
-%%Page: 70 80
-TeXDict begin 70 79 bop 0 52 a FF(70)1200 b Fy(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))0 351 y
-FF(Note)43 b(that)f(failing)h(to)f(read)g(a)g(co)s(ordinate)g(v)-5
-b(alue)42 b(do)s(es)g(not)g(constitute)h(an)e(error,)k(at)d(least)h(so)
-f(far)f(as)0 464 y(astUnformat)22 b(is)g(concerned.)38
-b(Ho)m(w)m(ev)m(er,)25 b(an)c(error)g(can)h(o)s(ccur)f(if)h(the)g
-(sequence)f(of)h(c)m(haracters)h(read)e(app)s(ears)0
-577 y(to)32 b(ha)m(v)m(e)h(the)f(correct)g(form)g(but)e(cannot)j(b)s(e)
-d(con)m(v)m(erted)j(in)m(to)g(a)f(v)-5 b(alid)32 b(co)s(ordinate)g(v)-5
-b(alue.)45 b(T)m(ypically)-8 b(,)34 b(this)0 690 y(will)c(b)s(e)g(b)s
-(ecause)g(it)g(violates)i(some)e(constrain)m(t,)i(suc)m(h)d(as)i(a)f
-(limit)h(on)f(the)g(v)-5 b(alue)30 b(of)g(one)g(of)h(its)f(\014elds.)40
-b(The)0 803 y(resulting)30 b(error)g(message)i(will)f(giv)m(e)h
-(details.)0 962 y(F)-8 b(or)32 b(an)m(y)f(giv)m(en)i(F)-8
-b(rame)32 b(axis,)g(astUnformat)g(do)s(es)e(not)i(necessarily)g(alw)m
-(a)m(ys)h(use)e(the)g(same)g(algorithm)i(for)0 1075 y(con)m(v)m(erting)
-40 b(the)f(sequence)g(of)f(c)m(haracters)i(it)f(reads)f(in)m(to)h(a)g
-(co)s(ordinate)g(v)-5 b(alue.)66 b(This)37 b(is)i(b)s(ecause)f(some)0
-1187 y(forms)c(of)h(input)f(\(particularly)i(free-format)g(input\))e
-(can)i(b)s(e)e(am)m(biguous)h(and)g(migh)m(t)g(b)s(e)g(in)m(terpreted)g
-(in)0 1300 y(sev)m(eral)e(w)m(a)m(ys)e(dep)s(ending)f(on)h(the)h(con)m
-(text.)44 b(F)-8 b(or)32 b(example,)h(the)e(celestial)j(longitude)d
-(\\12:34:56.7")36 b(could)0 1413 y(represen)m(t)26 b(an)g(angle)h(in)f
-(degrees)h(or)f(a)h(righ)m(t)f(ascension)h(in)f(hours.)38
-b(T)-8 b(o)27 b(decide)f(whic)m(h)g(to)h(use,)g(astUnformat)0
-1526 y(ma)m(y)43 b(examine)g(the)f(F)-8 b(rame's)44 b(attributes)e
-(and,)j(in)d(particular,)k(the)c(appropriate)h(F)-8 b(ormat\(axis\))44
-b(string)0 1639 y(whic)m(h)38 b(is)g(used)g(b)m(y)g(astF)-8
-b(ormat)41 b(when)c(formatting)i(co)s(ordinate)g(v)-5
-b(alues)39 b(\()p Fu(x)p FF(7.6\).)67 b(This)37 b(is)i(done)f(in)g
-(order)0 1752 y(that)i(astF)-8 b(ormat)41 b(and)e(astUnformat)h(should)
-e(complemen)m(t)j(eac)m(h)f(other|so)g(that)g(formatting)g(a)g(v)-5
-b(alue)0 1865 y(and)30 b(then)g(un-formatting)g(it)h(will)g(yield)g
-(the)f(original)i(v)-5 b(alue,)31 b(sub)5 b(ject)30 b(to)h(an)m(y)g
-(rounding)e(error.)0 2024 y(T)-8 b(o)31 b(giv)m(e)h(a)f(simple)f(\(but)
-g(crucially)i(incomplete!\))42 b(example,)32 b(consider)e(reading)h(a)g
-(v)-5 b(alue)31 b(for)f(the)g(axis)h(of)g(a)0 2137 y(basic)g(F)-8
-b(rame,)31 b(as)g(follo)m(ws:)227 2370 y Ft(n)43 b(=)h(astUnformat\()38
-b(frame,)j(iaxis,)g(")j(1.5e6)128 b(-99.0",)41 b(&value)g(\);)0
-2616 y FF(astUnformat)27 b(will)f(skip)f(o)m(v)m(er)i(the)f(initial)h
-(space)g(in)e(the)h(string)g(supplied)f(and)g(then)g(examine)i(eac)m(h)
-g(succes-)0 2729 y(siv)m(e)33 b(c)m(haracter.)49 b(It)33
-b(will)f(accept)i(the)f(sequence)g(\\1.5e6")i(as)e(input,)f(but)g
-(reject)h(the)g(space)g(whic)m(h)f(follo)m(ws)0 2842
-y(b)s(ecause)d(it)h(do)s(es)f(not)h(form)f(part)g(of)g(the)h(format)f
-(of)h(a)g(\015oating)g(p)s(oin)m(t)f(n)m(um)m(b)s(er.)39
-b(It)30 b(will)f(then)g(con)m(v)m(ert)i(the)0 2955 y(c)m(haracters)25
-b(\\1.5e6")i(in)m(to)e(a)f(co)s(ordinate)g(v)-5 b(alue)24
-b(and)g(skip)f(o)m(v)m(er)i(the)f(three)g(spaces)g(whic)m(h)f(follo)m
-(w)i(them.)39 b(The)0 3068 y(returned)32 b(function)g(v)-5
-b(alue)33 b(will)g(therefore)h(b)s(e)e(9,)i(equal)f(to)h(the)f(total)h
-(n)m(um)m(b)s(er)e(of)h(c)m(haracters)h(consumed.)0 3181
-y(This)k(result)h(ma)m(y)h(b)s(e)e(used)g(to)i(address)e(the)h(string)g
-(during)f(a)h(subsequen)m(t)f(read,)j(so)f(as)f(to)g(commence)0
-3293 y(reading)30 b(at)i(the)e(start)h(of)g(\\-99.0".)0
-3452 y(Most)43 b(imp)s(ortan)m(tly)-8 b(,)46 b(ho)m(w)m(ev)m(er,)h
-(note)c(that)g(if)f(the)g(user)g(of)g(a)h(program)f(mistak)m(enly)h(en)
-m(ters)g(the)f(string)0 3565 y(\\)34 b(1.5r6.)17 b(.)e(.)h(")51
-b(instead)34 b(of)f(\\)i(1.5e6.)17 b(.)e(.)h(",)35 b(a)f(co)s(ordinate)
-h(v)-5 b(alue)34 b(of)g(1.5)h(and)e(a)h(function)f(result)h(of)g(4)g
-(will)g(b)s(e)0 3678 y(returned,)28 b(b)s(ecause)h(the)g(\\r")g(w)m
-(ould)f(prematurely)h(terminate)h(the)f(attempt)g(to)h(read)f(the)f(v)
--5 b(alue.)41 b(Because)0 3791 y(this)30 b(sort)g(of)g(mistak)m(e)h(do)
-s(es)e(not)h(automatically)j(result)d(in)f(an)h(error)f(but)g(can)h
-(pro)s(duce)f(incorrect)h(results,)0 3904 y(it)c(is)g
-FD(vital)f FF(to)i(c)m(hec)m(k)g(the)f(returned)e(function)i(v)-5
-b(alue)26 b(to)h(ensure)d(that)j(the)f(exp)s(ected)g(n)m(um)m(b)s(er)e
-(of)i(c)m(haracters)0 4017 y(ha)m(v)m(e)44 b(b)s(een)d(read.)645
-3984 y Fv(13)797 4017 y FF(F)-8 b(or)43 b(example,)k(if)42
-b(the)h(string)f(is)h(exp)s(ected)g(to)g(con)m(tain)h(exactly)g(one)f
-(v)-5 b(alue,)46 b(and)0 4130 y(nothing)30 b(else,)i(then)e(the)g
-(follo)m(wing)i(w)m(ould)e(su\016ce:)227 4363 y Ft(n)43
-b(=)h(astUnformat\()38 b(frame,)j(iaxis,)g(string,)g(&value)g(\);)227
-4462 y(if)i(\()g(astOK)f(\))h({)358 4562 y(if)g(\()g(string[)e(n)i(])g
-(||)g(!n)g(\))g({)489 4662 y(<error)e(in)i(input)e(data>)358
-4761 y(})i(else)f({)489 4861 y(<value)f(read)h(correctly>)358
-4961 y(})227 5060 y(})0 5307 y FF(If)37 b(astUnformat)i(do)s(es)e(not)i
-(detect)g(an)e(error)h(itself,)j(w)m(e)d(c)m(hec)m(k)h(that)g(it)f(has)
-g(read)g(to)g(the)g(end-of-string)0 5419 y(and)27 b(consumed)g(at)i
-(least)g(one)f(c)m(haracter)h(\(whic)m(h)f(traps)f(the)h(case)h(of)f(a)
-g(zero-length)h(input)e(string\).)40 b(If)28 b(this)0
-5532 y(rev)m(eals)k(an)e(error,)g(the)h(v)-5 b(alue)31
-b(of)f(\\n")h(indicates)g(where)f(it)h(o)s(ccurred.)p
-0 5607 1512 4 v 73 5661 a Fs(13)138 5693 y Fr(An)n(y)n(one)25
-b(who)h(seriously)g(uses)g(the)g(C)g(run)f(time)h(library)g(\\scanf)6
-b(")27 b(function)e(will)j(kno)n(w)d(ab)r(out)h(the)f(need)g(for)i
-(this)f(c)n(hec)n(k!)p eop end
-%%Page: 71 81
-TeXDict begin 71 80 bop 0 52 a Fy(7.8)92 b(Reading)31
-b(F)-8 b(ormatted)32 b(Axis)e(V)-8 b(alues)2217 b FF(71)0
-351 y(Another)22 b(common)g(requiremen)m(t)g(is)g(to)g(obtain)h(a)f(p)s
-(osition)g(b)m(y)g(reading)g(a)g(list)g(of)g(co)s(ordinates)h(from)e(a)
-h(string)0 464 y(whic)m(h)30 b(con)m(tains)i(one)f(v)-5
-b(alue)32 b(for)e(eac)m(h)i(axis)f(of)g(a)g(F)-8 b(rame.)43
-b(W)-8 b(e)32 b(assume)e(that)i(the)e(v)-5 b(alues)31
-b(are)h(separated)f(in)0 577 y(some)26 b(unam)m(biguous)f(manner,)i(p)s
-(erhaps)d(using)h(white)h(space)h(and/or)e(some)i(unsp)s(eci\014ed)d
-(single-c)m(haracter)0 690 y(separator.)49 b(The)33 b(c)m(hoice)i(of)e
-(separator)h(is)f(up)f(to)i(the)f(data)h(supplier,)f(who)f(m)m(ust)h(c)
-m(ho)s(ose)h(it)g(so)f(as)g(not)h(to)0 803 y(con\015ict)c(with)g(the)g
-(format)g(of)g(the)f(co)s(ordinate)i(v)-5 b(alues,)30
-b(but)f(our)h(soft)m(w)m(are)h(do)s(es)e(not)h(need)f(to)i(kno)m(w)f
-(what)0 916 y(it)h(is.)41 b(The)30 b(follo)m(wing)h(is)g(a)g(template)g
-(algorithm)h(for)e(reading)g(data)h(in)f(this)h(form:)227
-1143 y Ft(const)42 b(char)g(*s;)227 1243 y(double)f(values[)g(10)i(];)
-227 1442 y(...)227 1642 y(/*)g(Initialise)c(a)44 b(string)d(pointer.)f
-(*/)227 1741 y(s)j(=)h(string;)227 1940 y(/*)f(Obtain)e(the)h(number)g
-(of)g(Frame)g(axes)g(and)g(loop)g(through)f(them.)g(*/)227
-2040 y(naxes)h(=)h(astGetI\()d(frame,)h("Naxes")g(\);)227
-2140 y(for)i(\()g(iaxis)e(=)i(1;)g(iaxis)f(<=)h(naxes;)e(iaxis++)f(\))j
-({)227 2339 y(/*)g(Attempt)e(to)h(read)g(a)i(value)d(for)h(this)g
-(axis.)g(*/)358 2439 y(n)h(=)g(astUnformat\()c(frame,)i(iaxis,)g(s,)i
-(&values[)d(iaxis)i(-)h(1)g(])g(\);)227 2638 y(/*)g(If)g(nothing)d(was)
-j(read)f(and)g(this)g(is)h(not)f(the)g(first)g(axis)g(or)h(the)358
-2738 y(end-of-string,)38 b(try)k(stepping)e(over)i(a)i(separator)39
-b(and)k(reading)d(again.)i(*/)358 2837 y(if)h(\()g(!n)g(&&)f(\()i
-(iaxis)d(>)i(1)h(\))f(&&)f(*s)h(\))489 2937 y(n)g(=)g(astUnformat\()c
-(frame,)i(iaxis,)g(++s,)h(&values[)e(iaxis)i(-)h(1)g(])g(\);)227
-3136 y(/*)g(Quit)f(if)h(nothing)d(was)j(read,)e(otherwise)f(move)i(on)h
-(to)g(the)f(next)g(value.)f(*/)358 3236 y(if)i(\()g(!n)g(\))g(break;)
-358 3335 y(s)g(+=)g(n;)227 3435 y(})227 3634 y(/*)g(Check)f(for)g
-(possible)e(errors.)h(*/)227 3734 y(if)i(\()g(astOK)f(\))h({)358
-3833 y(if)g(\()g(*s)g(||)f(!n)h(\))g({)489 3933 y(<error)e(in)i(input)e
-(data>)358 4033 y(})i(else)f({)489 4132 y(<values)e(read)i(correctly>)
-358 4232 y(})227 4332 y(})0 4572 y FF(In)30 b(this)g(case,)i(\\s")f
-(will)f(p)s(oin)m(t)h(to)g(the)f(lo)s(cation)i(of)f(an)m(y)g(input)e
-(error.)0 4730 y(Note)i(that)f(this)g(algorithm)g(is)g(insensitiv)m(e)h
-(to)f(the)g(precise)g(format)g(of)f(the)h(data)g(and)f(will)h
-(therefore)g(w)m(ork)0 4843 y(with)35 b(an)m(y)h(class)g(of)g(F)-8
-b(rame)36 b(and)f(an)m(y)g(reasonably)h(unam)m(biguous)f(input)f(data.)
-57 b(F)-8 b(or)36 b(example,)h(here)f(is)f(a)0 4956 y(range)c(of)f
-(suitable)h(input)f(data)h(for)f(a)h(3-dimensional)g(basic)g(F)-8
-b(rame:)227 5183 y Ft(1)43 b(2.5)g(3)227 5283 y(3.1,3.2,3.3)227
-5383 y(1.5,)f(2.6,)g(-9.9e2)227 5482 y(-1.1+0.4-1.8)402
-5582 y(.1/.2/.3)271 5681 y(44.0)g(;)h(55.1)f(-14)p eop
-end
-%%Page: 72 82
-TeXDict begin 72 81 bop 0 52 a FF(72)1200 b Fy(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))0 351 y
-Fw(7.9)112 b(P)m(erm)m(uting)38 b(F)-9 b(rame)38 b(Axes)0
-573 y FF(Once)29 b(a)g(F)-8 b(rame)30 b(has)f(b)s(een)f(created,)i(it)g
-(is)f(not)g(p)s(ossible)f(to)i(c)m(hange)g(the)f(n)m(um)m(b)s(er)f(of)h
-(axes)g(it)h(con)m(tains,)g(but)0 686 y(it)k(is)g(p)s(ossible)g(to)h(c)
-m(hange)g(the)f(order)f(in)h(whic)m(h)f(these)i(axes)f(o)s(ccur.)51
-b(T)-8 b(o)35 b(do)f(so,)h(an)f(in)m(teger)h Fx(p)-5
-b(ermutation)0 799 y(arr)g(ay)32 b FF(is)f(\014lled)f(with)g(the)h(n)m
-(um)m(b)s(ers)e(of)h(the)h(axes)g(so)f(as)h(to)g(sp)s(ecify)f(the)h
-(new)e(order,)i Fx(e.g:)227 1048 y Ft(int)43 b(perm[)e(2)i(])g(=)h({)f
-(2,)g(1)g(};)0 1311 y FF(In)21 b(this)g(case,)j(the)d(axes)h(of)g(a)f
-(2-dimensional)h(F)-8 b(rame)23 b(could)e(b)s(e)g(in)m(terc)m(hanged)h
-(b)m(y)f(passing)g(this)g(p)s(erm)m(utation)0 1424 y(arra)m(y)36
-b(to)g(the)g(astP)m(ermAxes)h(function.)56 b(That)35
-b(is,)j(an)d(\()p Fo(x)2058 1438 y Fv(1)2098 1424 y Fo(;)15
-b(x)2190 1438 y Fv(2)2230 1424 y FF(\))35 b(co)s(ordinate)i(system)f(w)
-m(ould)f(b)s(e)g(c)m(hanged)0 1537 y(in)m(to)c(an)g(\()p
-Fo(x)398 1551 y Fv(2)437 1537 y Fo(;)15 b(x)529 1551
-y Fv(1)569 1537 y FF(\))31 b(co)s(ordinate)g(system)g(b)m(y:)227
-1786 y Ft(astPermAxes\()39 b(frame,)i(perm)h(\);)0 2049
-y FF(If)36 b(the)h(axes)g(are)g(p)s(erm)m(uted)e(more)i(than)f(once,)j
-(the)e(e\013ects)h(are)f(cum)m(ulativ)m(e.)60 b(Y)-8
-b(ou)37 b(are,)i(of)e(course,)h(not)0 2162 y(restricted)31
-b(to)g(F)-8 b(rames)31 b(with)f(only)h(t)m(w)m(o)h(axes.)0
-2455 y Fw(7.10)112 b(Selecting)38 b(F)-9 b(rame)38 b(Axes)0
-2677 y FF(An)31 b(alternativ)m(e)j(to)f(c)m(hanging)g(the)e(n)m(um)m(b)
-s(er)g(of)h(F)-8 b(rame)32 b(axes,)h(whic)m(h)f(is)f(not)h(allo)m(w)m
-(ed,)i(is)e(to)h(create)g(a)f(new)0 2790 y(F)-8 b(rame)34
-b(b)m(y)f(selecting)i(axes)f(from)e(an)h(existing)h(one.)50
-b(The)32 b(metho)s(d)h(of)g(doing)g(this)g(is)g(v)m(ery)h(similar)f(to)
-h(the)0 2903 y(w)m(a)m(y)g(astP)m(ermAxes)g(is)f(used)g(\()p
-Fu(x)p FF(7.9\),)j(in)d(that)g(w)m(e)h(supply)e(an)h(in)m(teger)h(arra)
-m(y)g(\014lled)f(with)f(the)i(n)m(um)m(b)s(ers)d(of)0
-3016 y(the)f(axes)h(w)m(e)f(w)m(an)m(t,)h(in)f(their)g(new)f(order.)40
-b(In)29 b(this)h(case,)i(ho)m(w)m(ev)m(er,)f(the)f(n)m(um)m(b)s(er)f
-(of)h(arra)m(y)g(elemen)m(ts)i(need)0 3128 y(not)f(equal)g(the)f(n)m
-(um)m(b)s(er)f(of)i(F)-8 b(rame)31 b(axes.)0 3291 y(F)-8
-b(or)26 b(example,)i(w)m(e)e(could)g(select)h(axes)f(3)g(and)f(2)h
-(\(in)g(that)g(order\))f(from)g(a)h(3-dimensional)h(F)-8
-b(rame)26 b(as)g(follo)m(ws:)227 3541 y Ft(astFrame)41
-b(*frame1,)f(*frame2;)227 3640 y(astMapping)g(*mapping;)227
-3740 y(int)j(pick[)e(2)i(])g(=)h({)f(3,)g(2)g(};)227
-3939 y(...)227 4138 y(frame2)e(=)j(astPickAxes\()38 b(frame1,)j(2,)i
-(pick,)e(&mapping)f(\);)0 4401 y FF(This)22 b(w)m(ould)g(return)g(a)h
-(p)s(oin)m(ter)f(to)i(a)f(2-dimensional)g(F)-8 b(rame)24
-b(\(\\frame2"\))g(whic)m(h)f(con)m(tains)g(the)g(information)0
-4514 y(asso)s(ciated)35 b(with)f(axes)g(3)g(and)f(2,)i(in)e(that)i
-(order,)f(from)f(the)h(original)h(F)-8 b(rame)34 b(\(\\frame1"\).)53
-b(The)33 b(original)0 4627 y(F)-8 b(rame)35 b(is)g(not)f(altered)i(b)m
-(y)e(this)g(pro)s(cess.)53 b(Bew)m(are,)37 b(ho)m(w)m(ev)m(er,)g(that)e
-(the)f(axis)h(information)g(ma)m(y)g(still)g(b)s(e)0
-4740 y(shared)29 b(b)m(y)h(b)s(oth)f(F)-8 b(rames,)31
-b(so)f(if)g(y)m(ou)g(wish)f(to)i(alter)g(either)f(of)g(them)g(indep)s
-(enden)m(tly)f(y)m(ou)h(ma)m(y)h(\014rst)e(need)0 4853
-y(to)i(use)f(astCop)m(y)h(\()p Fu(x)p FF(4.13\))i(to)e(mak)m(e)h(an)e
-(indep)s(enden)m(t)f(cop)m(y)-8 b(.)0 5016 y(In)28 b(addition)h(to)h
-(the)f(new)f(F)-8 b(rame)30 b(p)s(oin)m(ter,)f(astPic)m(kAxes)i(will)f
-(also)f(return)f(a)h(p)s(oin)m(ter)g(to)h(a)f(new)g(Mapping)0
-5128 y Fx(via)35 b FF(its)h(fourth)e(argumen)m(t)h(\(y)m(ou)h(ma)m(y)g
-(supply)d(a)j(NULL)f(p)s(oin)m(ter)g(as)g(an)g(argumen)m(t)h(if)f(y)m
-(ou)g(do)g(not)h(w)m(an)m(t)0 5241 y(this)44 b(Mapping\).)84
-b(This)43 b(Mapping)i(will)f(in)m(ter-relate)j(the)e(t)m(w)m(o)h(F)-8
-b(rames.)83 b(By)45 b(this)g(w)m(e)f(mean)h(that)g(its)0
-5354 y(forw)m(ard)28 b(transformation)h(will)g(con)m(v)m(ert)i(co)s
-(ordinates)e(originally)i(in)d(the)h(co)s(ordinate)h(system)e(represen)
-m(ted)0 5467 y(b)m(y)i(\\frame1")i(in)m(to)f(that)g(represen)m(ted)g(b)
-m(y)f(\\frame2",)i(while)e(its)h(in)m(v)m(erse)g(transformation)g(will)
-g(con)m(v)m(ert)h(in)0 5580 y(the)h(opp)s(osite)h(direction.)50
-b(In)32 b(this)h(particular)h(case,)h(the)e(Mapping)h(w)m(ould)f(b)s(e)
-f(a)i(P)m(ermMap)f(\()p Fu(x)p FF(5.10\))j(and)0 5693
-y(w)m(ould)30 b(implemen)m(t)h(the)g(follo)m(wing)h(transformations:)p
-eop end
-%%Page: 73 83
-TeXDict begin 73 82 bop 0 52 a Fy(7.11)93 b(Calculating)31
-b(Distances,)h(Angles)f(and)f(O\013sets)1774 b FF(73)227
-351 y Fq(Forward:)370 464 y(\(1,)47 b(2,)h(3\))f(-->)g(\(3,)g(2\))370
-577 y(\(2,)g(4,)h(6\))f(-->)g(\(6,)g(4\))370 690 y(\(3,)g(6,)h(9\))f
-(-->)g(\(9,)g(6\))370 803 y(\(4,)g(8,)h(12\))e(-->)h(\(12,)g(8\))370
-916 y(\(5,)g(10,)g(15\))g(-->)g(\(15,)g(10\))227 1142
-y(Inverse:)370 1255 y(\(3,)g(2\))h(-->)e(\(<bad>,)g(2,)h(3\))370
-1367 y(\(6,)g(4\))h(-->)e(\(<bad>,)g(4,)h(6\))370 1480
-y(\(9,)g(6\))h(-->)e(\(<bad>,)g(6,)h(9\))370 1593 y(\(12,)g(8\))g(-->)g
-(\(<bad>,)f(8,)h(12\))370 1706 y(\(15,)g(10\))g(-->)g(\(<bad>,)f(10,)h
-(15\))0 1968 y FF(This)35 b(is)h(our)g(\014rst)f(in)m(tro)s(duction)h
-(to)h(the)f(idea)h(of)f(in)m(ter-relating)i(pairs)e(of)g(F)-8
-b(rames)37 b Fx(via)f FF(a)h(Mapping,)g(but)0 2081 y(this)30
-b(will)h(assume)f(a)h(cen)m(tral)h(role)f(later)g(on.)0
-2243 y(Note)k(that)g(when)e(using)g(astPic)m(kAxes,)k(it)e(is)f(also)h
-(p)s(ossible)e(to)i(request)f(more)g(axes)h(than)e(there)h(w)m(ere)h
-(in)0 2356 y(the)f(original)g(F)-8 b(rame.)51 b(This)32
-b(will)i(in)m(v)m(olv)m(e)i(selecting)f(axes)f(from)f(the)h(original)g
-(F)-8 b(rame)34 b(that)g(do)g(not)f(exist.)0 2469 y(T)-8
-b(o)33 b(do)g(this,)h(the)f(corresp)s(onding)f(axis)i(n)m(um)m(b)s(er)e
-(\(in)h(the)g(\\pic)m(k")h(arra)m(y\))g(should)e(b)s(e)h(set)g(to)h
-(zero)g(and)e(the)0 2582 y(e\013ect)f(is)e(to)h(in)m(tro)s(duce)f(an)g
-(additional)h(new)f(axis)h(whic)m(h)f(is)g(not)g(deriv)m(ed)h(from)e
-(the)i(original)g(F)-8 b(rame.)41 b(This)0 2695 y(axis)30
-b(will)g(ha)m(v)m(e)g(default)g(v)-5 b(alues)30 b(for)f(all)h(its)g
-(attributes.)41 b(Y)-8 b(ou)30 b(will)g(need)f(to)h(do)g(this)f(b)s
-(ecause)g(astPic)m(kAxes)0 2808 y(do)s(es)h(not)h(allo)m(w)h(y)m(ou)e
-(to)h(select)h(an)m(y)f(of)g(the)f(original)i(axes)f(more)f(than)g
-(once.)2733 2775 y Fv(14)0 3101 y Fw(7.11)112 b(Calculating)39
-b(Distances,)f(Angles)g(and)g(O\013sets)0 3322 y FF(Some)33
-b(complemen)m(tary)g(functions)f(are)h(pro)m(vided)f(for)h(use)f(with)g
-(F)-8 b(rames)33 b(to)h(allo)m(w)g(y)m(ou)f(to)g(p)s(erform)e(geo-)0
-3435 y(metric)g(op)s(erations)g(without)f(needing)h(to)g(kno)m(w)f(the)
-h(nature)f(of)h(the)f(co)s(ordinate)i(system)e(represen)m(ted)h(b)m(y)0
-3548 y(the)g(F)-8 b(rame.)0 3710 y(F)g(unctions)28 b(can)f(b)s(e)f
-(used)g(to)i(\014nd)d(the)j(distance)f(b)s(et)m(w)m(een)h(t)m(w)m(o)g
-(p)s(oin)m(ts,)g(and)e(to)i(o\013set)g(a)g(sp)s(eci\014ed)e(distance)0
-3823 y(along)33 b(a)f(line)h(joining)f(t)m(w)m(o)h(p)s(oin)m(ts,)f
-Fx(etc.)45 b FF(In)31 b(essence,)j(these)e(de\014ne)f(the)h(metric)h
-(of)f(the)g(co)s(ordinate)h(space)0 3936 y(whic)m(h)d(the)h(F)-8
-b(rame)31 b(represen)m(ts.)41 b(In)29 b(the)i(case)g(of)g(a)g(basic)f
-(F)-8 b(rame,)32 b(this)e(is)h(a)f(Cartesian)h(metric.)0
-4099 y(The)37 b(\014rst)f(of)h(these)h(functions,)h(astDistance,)i
-(returns)36 b(a)i(double)e(distance)i(v)-5 b(alue)38
-b(when)e(supplied)g(with)0 4212 y(the)31 b(F)-8 b(rame)31
-b(co)s(ordinates)g(of)f(t)m(w)m(o)i(p)s(oin)m(ts.)41
-b(F)-8 b(or)31 b(example:)227 4460 y Ft(double)41 b(dist;)227
-4560 y(double)g(point1[)g(2)i(])g(=)h({)f(0.0,)f(0.0)g(};)227
-4659 y(double)f(point2[)g(2)i(])g(=)h({)f(1.0,)f(1.0)g(};)227
-4858 y(...)227 5058 y(dist)g(=)h(astDistance\()c(frame,)i(point1,)g
-(point2)g(\);)0 5319 y FF(This)29 b(calculates)i(the)f(distance)g(b)s
-(et)m(w)m(een)g(the)g(origin)g(\(0,0\))h(and)e(a)h(p)s(oin)m(t)f(at)h
-(p)s(osition)g(\(1,1\).)42 b(In)29 b(this)g(case,)0 5432
-y(the)j(result,)h(as)f(y)m(ou)g(w)m(ould)g(exp)s(ect,)h(is)1400
-5368 y Fu(p)1476 5432 y FF(2.)46 b(Ho)m(w)m(ev)m(er,)34
-b(this)e(is)g(only)g(true)g(for)g(the)g(Cartesian)h(co)s(ordinate)p
-0 5516 1512 4 v 73 5570 a Fs(14)138 5602 y Fr(It)g(will)i(probably)e
-(not)h(b)r(e)f(ob)n(vious)h(wh)n(y)f(this)g(restriction)i(is)f
-(necessary)-6 b(,)36 b(but)c(consider)j(creating)f(a)g(F)-6
-b(rame)34 b(with)f(one)0 5693 y(longitude)26 b(axis)g(and)g(t)n(w)n(o)g
-(latitude)f(axes.)35 b(Whic)n(h)25 b(latitude)h(axis)h(should)e(b)r(e)h
-(asso)r(ciated)h(with)f(the)g(longitude)g(axis?)p eop
-end
-%%Page: 74 84
-TeXDict begin 74 83 bop 0 52 a FF(74)1200 b Fy(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))0 351 y
-FF(system)44 b(whic)m(h)g(a)h(basic)f(F)-8 b(rame)45
-b(represen)m(ts.)82 b(In)44 b(general,)k(astDistance)f(will)d
-(calculate)j(the)d(geo)s(desic)0 464 y(distance)35 b(b)s(et)m(w)m(een)f
-(the)g(t)m(w)m(o)h(p)s(oin)m(ts,)g(so)f(that)h(with)e(a)h(more)g(sp)s
-(ecialised)h(F)-8 b(rame)35 b(\(suc)m(h)e(as)i(a)f(SkyF)-8
-b(rame,)0 577 y(represen)m(ting)31 b(the)f(celestial)j(sphere\))d(a)h
-(great-circle)i(distance)e(migh)m(t)g(b)s(e)f(returned.)0
-747 y(The)40 b(astO\013set)h(function)f(is)g(really)i(the)e(in)m(v)m
-(erse)h(of)g(astDistance.)72 b(Giv)m(en)42 b(t)m(w)m(o)f(p)s(oin)m(ts)f
-(in)g(a)h(F)-8 b(rame,)44 b(it)0 860 y(calculates)29
-b(the)d(co)s(ordinates)h(of)g(a)g(third)e(p)s(oin)m(t)i(whic)m(h)f(is)g
-(o\013set)i(a)f(sp)s(eci\014ed)e(distance)i(a)m(w)m(a)m(y)i(from)d(the)
-g(\014rst)0 973 y(p)s(oin)m(t)k(along)i(the)e(geo)s(desic)i(joining)e
-(it)h(to)g(the)g(second)f(one.)41 b(F)-8 b(or)32 b(example:)227
-1243 y Ft(double)41 b(point1[)g(2)i(])g(=)h({)f(0.0,)f(0.0)g(};)227
-1343 y(double)f(point2[)g(2)i(])g(=)h({)f(1.0,)f(1.0)g(};)227
-1443 y(double)f(point3[)g(2)i(];)227 1642 y(...)227 1841
-y(astOffset\()d(frame,)h(point1.)g(point2,)f(0.5,)i(point3)f(\);)0
-2125 y FF(This)28 b(w)m(ould)h(\014ll)h(the)f(\\p)s(oin)m(t3")i(arra)m
-(y)e(with)g(the)h(co)s(ordinates)g(of)f(a)h(p)s(oin)m(t)f(whic)m(h)g
-(is)g(o\013set)i(0.5)f(units)f(a)m(w)m(a)m(y)0 2238 y(from)35
-b(the)h(origin)g(\(0,0\))i(in)e(the)f(direction)i(of)f(the)g(p)s
-(osition)g(\(1,1\).)58 b(Again,)39 b(this)c(is)h(a)g(simple)g(result)g
-(in)f(a)0 2351 y(Cartesian)j(F)-8 b(rame,)40 b(as)e(v)-5
-b(arying)38 b(the)f(o\013set)i(will)f(trace)g(out)g(a)g(straigh)m(t)g
-(line.)63 b(On)36 b(the)i(celestial)i(sphere,)0 2464
-y(ho)m(w)m(ev)m(er)32 b(\()p Fx(e.g.)e FF(using)g(a)g(SkyF)-8
-b(rame\),)32 b(it)f(w)m(ould)f(trace)h(out)g(a)g(great)g(circle.)0
-2633 y(The)h(functions)h(astAxDistance)i(and)e(astAxO\013set)h(are)f
-(similar)g(to)h(astDistance)h(and)e(astO\013set,)h(except)0
-2746 y(that)39 b(the)f(curv)m(es)g(whic)m(h)f(they)h(use)g(as)g
-(\\straigh)m(t)i(lines")e(are)h(not)f(geo)s(desics,)j(but)c(curv)m(es)h
-(parallel)h(to)g(a)0 2859 y(sp)s(eci\014ed)e(axis)528
-2826 y Fv(15)604 2859 y FF(.)64 b(One)38 b(reason)g(for)g(using)g
-(these)g(functions)g(is)g(to)h(deal)g(with)f(the)g(cyclic)i(am)m
-(biguit)m(y)f(of)0 2972 y(longitude)31 b(and)f(latitude)h(axes.)0
-3142 y(The)j(astO\013set2)i(function)f(is)f(similar)h(to)h
-(astO\013set,)h(but)d(instead)h(of)f(using)g(the)h(geo)s(desic)h(whic)m
-(h)f(passes)0 3255 y(through)e(t)m(w)m(o)i(p)s(ositions,)f(it)g(uses)f
-(the)h(geo)s(desic)g(whic)m(h)g(passes)f(at)h(a)g(giv)m(en)g(p)s
-(osition)g(angle)g(through)f(the)0 3368 y(starting)e(p)s(osition.)0
-3538 y(P)m(osition)40 b(angles)g(are)g(alw)m(a)m(ys)g(measured)f(from)f
-(the)h(p)s(ositiv)m(e)h(direction)g(of)f(the)g(second)g(F)-8
-b(rame)40 b(axis)g(to)0 3651 y(the)g(required)f(line,)k(with)d(p)s
-(ositiv)m(e)h(angles)g(b)s(eing)e(in)h(the)g(same)g(sense)g(as)h
-(rotation)g(from)e(the)h(p)s(ositiv)m(e)0 3763 y(direction)g(of)f(the)h
-(second)f(axis)h(to)g(the)f(p)s(ositiv)m(e)h(direction)g(of)g(the)f
-(\014rst)f(F)-8 b(rame)41 b(axis.)67 b(This)39 b(de\014nition)0
-3876 y(applies)27 b(to)h(all)g(classes)g(of)f(F)-8 b(rame,)29
-b(including)e(SkyF)-8 b(rame.)40 b(The)27 b(default)g(ordering)g(of)g
-(axes)h(in)f(a)g(SkyF)-8 b(rame)0 3989 y(mak)m(es)35
-b(the)f(second)g(axis)g(equiv)-5 b(alen)m(t)36 b(to)e(north,)h(and)e
-(so)h(the)h(de\014nition)e(of)h(p)s(osition)g(angle)h(giv)m(en)g(ab)s
-(o)m(v)m(e)0 4102 y(corresp)s(onds)30 b(to)h(the)h(normal)f
-(astronomical)h(usage,)g(\\from)f(north,)g(through)f(east".)44
-b(Ho)m(w)m(ev)m(er,)34 b(it)d(should)0 4215 y(b)s(e)j(remem)m(b)s(ered)
-g(that)i(it)f(is)g(p)s(ossible)f(to)i(p)s(erm)m(ute)e(the)h(axes)h(of)f
-(a)g(SkyF)-8 b(rame)35 b(\(or)g(indeed)g(an)m(y)g(F)-8
-b(rame\),)0 4328 y(so)32 b(that)h(north)e(b)s(ecomes)h(axis)g(1.)46
-b(In)31 b(this)h(case,)h(an)f(AST)f(\\p)s(osition)h(angle")i(w)m(ould)d
-(b)s(e)h(the)g(angle)g(\\from)0 4441 y(east,)c(through)d(north".)39
-b(Alw)m(a)m(ys)27 b(tak)m(e)g(the)f(axis)g(ordering)f(in)m(to)i(accoun)
-m(t)g(when)e(deriving)g(an)h(astronomical)0 4554 y(p)s(osition)k(angle)
-i(from)e(an)g(AST)g(p)s(osition)g(angle.)0 4724 y(Within)35
-b(a)f(Cartesian)h(co)s(ordinate)h(system,)f(the)g(p)s(osition)f(angle)i
-(of)e(a)h(geo)s(desic)h(\()p Fx(i.e.)e FF(a)h(straigh)m(t)g(line\))g
-(is)0 4837 y(constan)m(t)40 b(along)g(its)g(en)m(tire)f(length,)j(but)c
-(this)h(is)g(not)g(necessarily)h(true)f(of)g(other)g(co)s(ordinate)h
-(systems.)0 4950 y(Within)e(a)f(spherical)h(co)s(ordinate)g(system,)i
-(for)d(instance,)j(the)d(p)s(osition)h(angle)g(of)g(a)f(geo)s(desic)i
-(will)f(v)-5 b(ary)0 5062 y(along)40 b(its)e(length)h(\(except)h(for)e
-(the)h(sp)s(ecial)g(cases)g(of)g(a)g(meridian)f(and)g(the)g(equator\).)
-66 b(In)38 b(addition)h(to)0 5175 y(returning)32 b(the)h(required)e
-(o\013set)j(p)s(osition,)g(the)e(astO\013set2)j(function)d(returns)f
-(the)i(p)s(osition)g(angle)g(of)g(the)0 5288 y(geo)s(desic)39
-b(at)f(the)g(o\013set)g(p)s(osition.)63 b(This)37 b(is)g(useful)g(if)h
-(y)m(ou)g(w)m(an)m(t)g(to)g(trace)h(out)f(a)g(path)f(whic)m(h)g(in)m(v)
-m(olv)m(es)0 5401 y(turning)h(through)h(sp)s(eci\014ed)g(angles.)68
-b(F)-8 b(or)40 b(instance,)j(tracing)d(out)g(a)f(rectangle)j(in)d(whic)
-m(h)g(eac)m(h)h(side)f(is)0 5514 y(a)h(geo)s(desic)g(in)m(v)m(olv)m(es)
-h(turning)e(through)f(90)i(degrees)g(at)g(the)g(corners.)67
-b(T)-8 b(o)39 b(do)h(this,)h(use)e(astO\013set2)i(to)p
-0 5607 1512 4 v 73 5661 a Fs(15)138 5693 y Fr(F)-6 b(or)26
-b(instance,)g(a)g(line)h(of)f(constan)n(t)g(Declination)g(is)g(not)g(a)
-g(geo)r(desic)p eop end
-%%Page: 75 85
-TeXDict begin 75 84 bop 0 52 a Fy(7.12)93 b(The)29 b(Domain)j(A)m
-(ttribute)2534 b FF(75)0 351 y(calculate)36 b(the)f(p)s(osition)f(of)g
-(eac)m(h)h(corner,)h(and)d(then)h(add)f(\(or)i(subtract\))f(90)h
-(degrees)g(from)e(the)h(p)s(osition)0 464 y(angle)d(returned)f(b)m(y)g
-(astO\013set2.)0 627 y(The)20 b(astAngle)j(function)d(calculates)k(the)
-d(angle)h(subtended)d(b)m(y)i(t)m(w)m(o)h(p)s(oin)m(ts,)h(at)f(a)f
-(third)g(p)s(oin)m(t.)37 b(If)21 b(used)f(with)0 740
-y(a)32 b(2-dimensional)g(F)-8 b(rame)33 b(the)f(returned)e(angle)j(is)e
-(signed)h(to)g(indicate)h(the)e(sense)h(of)g(rotation)h(\(clo)s(c)m
-(kwise)0 853 y(or)27 b(an)m(ti-clo)s(c)m(kwise\))j(in)d(taking)g(the)g
-(\\shortest)h(route")g(from)e(the)h(\014rst)f(p)s(oin)m(t)h(to)g(the)h
-(second.)39 b(If)26 b(the)i(F)-8 b(rame)0 966 y(has)30
-b(more)h(than)f(2)h(axes,)g(the)f(result)h(is)f(un-signed)g(and)f(is)i
-(alw)m(a)m(ys)h(in)e(the)g(range)h(zero)g(to)g Fo(\031)s
-FF(.)0 1129 y(The)24 b(astAxAngle)h(function)f(is)h(similar)f(to)h
-(astAngle,)i(but)d(the)g(\\reference)h(direction",)i(from)d(whic)m(h)g
-(angles)0 1242 y(are)31 b(measured,)f(is)g(a)h(sp)s(eci\014ed)f(axis.)0
-1404 y(The)39 b(astResolv)m(e)j(function)d(resolv)m(es)i(a)f(giv)m(en)g
-(displacemen)m(t)h(within)e(a)g(F)-8 b(rame)41 b(in)m(to)f(t)m(w)m(o)h
-(comp)s(onen)m(ts,)0 1517 y(parallel)31 b(and)f(p)s(erp)s(endicular)f
-(to)i(a)f(giv)m(en)i(reference)f(direction.)0 1680 y(The)k(displacemen)
-m(t)h(is)g(sp)s(eci\014ed)e(b)m(y)i(t)m(w)m(o)g(p)s(ositions)g(within)f
-(the)g(F)-8 b(rame;)39 b(the)d(starting)g(and)f(ending)g(p)s(o-)0
-1793 y(sitions.)61 b(The)36 b(reference)h(direction)h(is)f(de\014ned)f
-(b)m(y)g(the)h(geo)s(desic)i(curv)m(e)e(passing)f(through)h(the)g
-(starting)0 1906 y(p)s(osition)23 b(and)f(a)g(third)g(sp)s(eci\014ed)g
-(p)s(osition.)38 b(The)22 b(lengths)h(of)g(the)f(t)m(w)m(o)i(comp)s
-(onen)m(ts)f(are)g(returned,)g(together)0 2019 y(with)30
-b(the)h(p)s(osition)f(on)g(the)h(reference)g(geo)s(desic)g(whic)m(h)f
-(is)h(closest)h(to)f(the)f(third)g(supplied)f(p)s(oin)m(t.)0
-2313 y Fw(7.12)112 b(The)38 b(Domain)h(A)m(ttribute)0
-2534 y FF(The)26 b(Domain)i(attribute)f(is)g(one)g(of)g(the)g(most)g
-(imp)s(ortan)m(t)g(prop)s(erties)f(of)h(a)g(F)-8 b(rame,)28
-b(although)g(the)e(concept)0 2647 y(it)j(expresses)e(can)i(sometimes)g
-(seem)f(a)g(little)i(subtle.)40 b(W)-8 b(e)29 b(will)f(in)m(tro)s(duce)
-g(it)h(here,)f(but)g(its)g(true)g(v)-5 b(alue)28 b(will)0
-2760 y(probably)i(not)g(b)s(ecome)h(apparen)m(t)g(un)m(til)f(later)i
-(\()p Fu(x)p FF(14.2\).)0 2923 y(T)-8 b(o)32 b(understand)e(the)h(need)
-h(for)f(the)g(Domain)i(attribute,)g(consider)e(using)g(di\013eren)m(t)h
-(F)-8 b(rames)32 b(to)g(represen)m(t)0 3036 y(the)f(follo)m(wing)g
-(di\013eren)m(t)g(co)s(ordinate)g(systems)g(asso)s(ciated)h(with)e(a)g
-(CCD)h(image:)111 3299 y(1.)46 b(A)31 b(co)s(ordinate)g(system)f(based)
-h(on)f(pixel)g(n)m(um)m(b)s(ers.)111 3487 y(2.)46 b(P)m(ositions)32
-b(on)e(the)h(CCD)f(c)m(hip,)g(measured)g(in)g Fo(\026)p
-FF(m.)111 3675 y(3.)46 b(P)m(ositions)32 b(in)e(the)h(fo)s(cal)g(plane)
-f(of)h(the)f(telescop)s(e,)i(measured)e(in)g(mm.)111
-3862 y(4.)46 b(A)31 b(celestial)i(co)s(ordinate)e(system,)g(measured)e
-(in)i(radians.)0 4125 y(If)h(w)m(e)g(had)g(t)m(w)m(o)i(suc)m(h)d(CCD)h
-(images,)i(w)m(e)f(migh)m(t)g(legitimately)i(w)m(an)m(t)e(to)g(align)g
-(them)f(pixel-for-pixel)i(\()p Fx(i.e.)0 4238 y FF(using)41
-b(the)i(co)s(ordinate)f(system)h(based)e(on)h(pixel)g(n)m(um)m(b)s
-(ers\))f(in)h(order)f(to,)46 b(sa)m(y)-8 b(,)46 b(divide)c(b)m(y)g(a)g
-(\015at-\014eld)0 4351 y(exp)s(osure.)d(W)-8 b(e)31 b(migh)m(t)f
-(similarly)f(consider)g(aligning)h(them)g(using)e(an)m(y)i(of)f(the)g
-(other)h(co)s(ordinate)f(systems)0 4464 y(so)f(as)f(to)i(ac)m(hiev)m(e)
-h(di\013eren)m(t)e(results.)39 b(F)-8 b(or)28 b(example,)h(w)m(e)f
-(migh)m(t)h(consider)e(merging)h(separate)g(images)h(from)0
-4577 y(a)i(CCD)f(mosaic)h(b)m(y)g(using)e(fo)s(cal)j(plane)e(p)s
-(ositions.)0 4740 y(It)g(w)m(ould)f(ob)m(viously)h(not)g(b)s(e)f
-(legitimate,)k(ho)m(w)m(ev)m(er,)e(to)g(directly)f(compare)g(p)s
-(ositions)g(in)f(one)h(image)h(mea-)0 4853 y(sured)e(in)g(pixels)h
-(with)g(p)s(ositions)f(in)h(the)g(other)g(measured)f(in)h(mm,)f(nor)h
-(to)g(equate)h(c)m(hip)f(p)s(ositions)g(in)f Fo(\026)p
-FF(m)0 4966 y(with)39 b(sky)f(co)s(ordinates)i(in)e(radians.)66
-b(If)38 b(w)m(e)i(w)m(an)m(ted)f(to)h(in)m(ter-compare)g(these)f(co)s
-(ordinates,)j(w)m(e)e(w)m(ould)0 5078 y(need)26 b(to)h(do)f(it)h
-(indirectly)-8 b(,)28 b(using)e(other)h(information)f(based)g(on)h(the)
-f(exp)s(erimen)m(tal)h(set-up.)39 b(F)-8 b(or)28 b(instance,)0
-5191 y(w)m(e)k(migh)m(t)h(need)f(to)g(kno)m(w)g(the)h(size)f(of)g(the)h
-(pixels)f(expressed)f(in)h(mm)f(and)g(the)i(orien)m(tation)h(of)e(the)g
-(CCD)0 5304 y(c)m(hip)e(in)h(the)f(fo)s(cal)h(plane.)0
-5467 y(Note)24 b(that)g(it)f(is)g(not)h(simply)e(the)h(di\013erence)h
-(in)e(ph)m(ysical)i(units)e(whic)m(h)h(prev)m(en)m(ts)g(certain)h(co)s
-(ordinates)g(from)0 5580 y(b)s(eing)36 b(directly)i(in)m(ter-compared)f
-(\(b)s(ecause)g(the)g(appropriate)g(unit)f(scaling)i(factors)f(could)g
-(b)s(e)f(included)0 5693 y(without)28 b(an)m(y)g(additional)h
-(information\).)41 b(Neither)28 b(is)h(it)f(the)g(fact)h(that)g
-(di\013eren)m(t)f(co)s(ordinate)h(systems)f(are)p eop
-end
-%%Page: 76 86
-TeXDict begin 76 85 bop 0 52 a FF(76)1200 b Fy(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))0 351 y
-FF(in)36 b(use)g(\(b)s(ecause)g(w)m(e)h(could)f(legitimately)j(in)m
-(ter-compare)f(t)m(w)m(o)f(di\013eren)m(t)g(celestial)h(co)s(ordinate)f
-(systems)0 464 y(without)e(an)m(y)g(extra)g(information\).)55
-b(Instead,)36 b(it)f(is)g(the)g(di\013eren)m(t)g(nature)g(of)g(the)g
-(co)s(ordinate)h(spaces)f(to)0 577 y(whic)m(h)30 b(these)h(co)s
-(ordinate)g(systems)g(ha)m(v)m(e)g(b)s(een)f(applied.)0
-733 y(W)-8 b(e)45 b(normally)f(express)g(this)f(b)m(y)h(sa)m(ying)h
-(that)f(the)g(co)s(ordinate)h(systems)f(apply)g(to)g(di\013eren)m(t)h
-Fx(physic)-5 b(al)0 846 y(domains)p FF(.)87 b(Although)45
-b(w)m(e)h(ma)m(y)f(establish)h Fx(ad)h(ho)-5 b(c)46 b
-FF(relationships)g(b)s(et)m(w)m(een)f(co)s(ordinates)h(in)f(di\013eren)
-m(t)0 959 y(ph)m(ysical)34 b(domains,)g(they)g(are)g(not)f(in)m
-(trinsically)i(related)f(to)g(eac)m(h)h(other)f(and)f(w)m(e)g(need)h
-(to)g(supply)e(extra)0 1072 y(information)f(b)s(efore)f(w)m(e)g(can)h
-(con)m(v)m(ert)h(co)s(ordinates)f(b)s(et)m(w)m(een)g(them.)0
-1227 y(In)22 b(AST,)g(the)g(role)h(of)g(the)g(\(c)m(haracter)h
-(string\))f(Domain)g(attribute)g(is)g(to)g(assign)f(F)-8
-b(rames)24 b(to)f(their)f(resp)s(ectiv)m(e)0 1340 y(ph)m(ysical)31
-b(domains.)40 b(The)30 b(w)m(a)m(y)i(it)f(op)s(erates)f(is)h(as)f
-(follo)m(ws:)136 1574 y Fu(\017)46 b FF(Co)s(ordinate)27
-b(systems)g(whic)m(h)g(apply)f(to)i(the)f(same)g(ph)m(ysical)h(domain)e
-(\()p Fx(i.e.)h FF(whose)g(F)-8 b(rames)27 b(ha)m(v)m(e)h(the)227
-1687 y(same)j(Domain)g(v)-5 b(alue\))31 b(can)g(b)s(e)f(directly)h(in)m
-(ter-compared.)227 1834 y(If)e(the)h(domain)f(has)g(sev)m(eral)h(co)s
-(ordinate)h(systems)e(asso)s(ciated)i(with)e(it)g(\()p
-Fx(e.g.)g FF(the)h(celestial)i(sphere\),)227 1947 y(then)h(a)h(co)s
-(ordinate)g(con)m(v)m(ersion)g(ma)m(y)g(b)s(e)e(in)m(v)m(olv)m(ed.)51
-b(Otherwise,)34 b(co)s(ordinate)g(v)-5 b(alues)33 b(ma)m(y)h(simply)227
-2060 y(b)s(e)c(equated.)136 2241 y Fu(\017)46 b FF(Co)s(ordinate)40
-b(systems)f(whic)m(h)h(apply)f(to)h(di\013eren)m(t)g(ph)m(ysical)g
-(domains)f(\()p Fx(i.e.)h FF(whose)f(F)-8 b(rames)40
-b(ha)m(v)m(e)227 2353 y(di\013eren)m(t)31 b(Domain)g(v)-5
-b(alues\))31 b(cannot)g(b)s(e)f(directly)h(in)m(ter-compared.)227
-2500 y(If)39 b(an)m(y)g(relationship)g(do)s(es)g(exist)g(b)s(et)m(w)m
-(een)h(suc)m(h)e(co)s(ordinate)i(systems|and)e(it)i(need)f(not|then)227
-2613 y(additional)j(information)g(m)m(ust)f(b)s(e)g(supplied)f(in)h
-(order)f(to)i(establish)g(the)f(relationship)h(b)s(et)m(w)m(een)227
-2726 y(them)36 b(in)g(an)m(y)h(particular)f(case.)60
-b(W)-8 b(e)37 b(will)g(see)f(later)i(\()p Fu(x)p FF(13\))g(ho)m(w)e(to)
-h(establish)f(suc)m(h)g(relationships)227 2839 y(b)s(et)m(w)m(een)31
-b(F)-8 b(rames)31 b(in)f(di\013eren)m(t)h(domains.)0
-3073 y(With)g(the)g(basic)g(F)-8 b(rames)32 b(w)m(e)f(are)g
-(considering)g(here,)g(eac)m(h)h(ph)m(ysical)g(domain)e(only)h(has)g(a)
-g(single)g(\(Carte-)0 3186 y(sian\))k(co)s(ordinate)g(system)g(asso)s
-(ciated)h(with)e(it,)i(so)f(that)g(if)f(t)m(w)m(o)i(suc)m(h)e(F)-8
-b(rames)35 b(ha)m(v)m(e)h(the)f(same)g(Domain)0 3299
-y(v)-5 b(alue,)36 b(their)f(co)s(ordinate)h(systems)e(will)h(b)s(e)f
-(iden)m(tical)j(and)d(ma)m(y)h(simply)f(b)s(e)g(equated.)54
-b(With)35 b(more)g(sp)s(e-)0 3412 y(cialised)30 b(F)-8
-b(rames,)31 b(ho)m(w)m(ev)m(er,)f(more)g(than)e(one)i(co)s(ordinate)f
-(system)g(ma)m(y)h(apply)f(to)g(eac)m(h)h(domain.)41
-b(In)28 b(suc)m(h)0 3525 y(cases,)k(a)e(co)s(ordinate)i(con)m(v)m
-(ersion)f(ma)m(y)g(need)f(to)h(b)s(e)f(p)s(erformed.)0
-3681 y(When)i(a)h(basic)g(F)-8 b(rame)34 b(is)e(created,)j(its)e
-(Domain)g(attribute)g(defaults)g(to)g(an)g(empt)m(y)g(string.)47
-b(This)32 b(means)0 3793 y(that)38 b(all)h(suc)m(h)e(F)-8
-b(rames)38 b(b)s(elong)g(to)g(the)g(same)g(\(n)m(ull\))g(domain)g(b)m
-(y)f(default)h(and)f(therefore)h(describ)s(e)f(the)0
-3906 y(same)d(unsp)s(eci\014ed)f(ph)m(ysical)i(co)s(ordinate)f(space.)
-53 b(In)33 b(order)h(to)h(assign)f(a)h(F)-8 b(rame)35
-b(to)f(a)h(di\013eren)m(t)f(domain,)0 4019 y(y)m(ou)h(simply)g(need)f
-(to)i(set)f(its)g(Domain)h(v)-5 b(alue.)54 b(This)34
-b(is)h(normally)g(most)g(con)m(v)m(enien)m(tly)j(done)c(when)g(it)h(is)
-0 4132 y(created,)d(as)e(follo)m(ws:)227 4353 y Ft(frame1)41
-b(=)j(astFrame\()39 b(2,)k("Domain=CCD_CHIP,)o(")1186
-4453 y("Unit\(1\)=micron,")1186 4552 y("Unit\(2\)=micron")37
-b(\);)227 4652 y(frame2)k(=)j(astFrame\()39 b(2,)k("Domain=FOCAL_PLA)o
-(NE)o(,")1186 4752 y("Unit\(1\)=mm,")1186 4851 y("Unit\(2\)=mm")c(\);)0
-5086 y FF(Here,)44 b(w)m(e)d(ha)m(v)m(e)h(created)g(t)m(w)m(o)g(F)-8
-b(rames)41 b(in)f(di\013eren)m(t)i(ph)m(ysical)f(domains.)71
-b(Although)41 b(their)g(co)s(ordinate)0 5199 y(v)-5 b(alues)30
-b(all)h(ha)m(v)m(e)h(units)d(of)h(length,)h(they)g(cannot)f(b)s(e)g
-(directly)h(in)m(ter-compared)g(\(b)s(ecause)f(their)g(axes)h(ma)m(y)0
-5311 y(b)s(e)f(rotated)h(with)f(resp)s(ect)h(to)g(eac)m(h)g(other,)g
-(for)f(instance\).)0 5467 y(All)j(Domain)h(v)-5 b(alues)33
-b(are)h(automatically)h(con)m(v)m(erted)g(to)e(upp)s(er)e(case)j(and)e
-(white)h(space)h(is)e(remo)m(v)m(ed,)j(but)0 5580 y(there)h(are)g(no)g
-(other)g(restrictions)g(on)g(the)g(names)g(y)m(ou)g(ma)m(y)g(use)f(to)i
-(lab)s(el)f(di\013eren)m(t)g(ph)m(ysical)g(domains.)0
-5693 y(F)-8 b(rom)31 b(a)g(practical)h(p)s(oin)m(t)e(of)h(view,)f(ho)m
-(w)m(ev)m(er,)i(it)f(is)g(w)m(orth)f(follo)m(wing)i(a)f(few)f(con)m(v)m
-(en)m(tions)i(\()p Fu(x)p FF(7.13\).)p eop end
-%%Page: 77 87
-TeXDict begin 77 86 bop 0 52 a Fy(7.13)93 b(Con)m(v)m(en)m(tions)31
-b(for)f(Domain)h(Names)2175 b FF(77)0 351 y Fw(7.13)112
-b(Con)m(v)m(en)m(tions)38 b(for)g(Domain)g(Names)0 583
-y FF(When)31 b(c)m(ho)s(osing)g(a)h(v)-5 b(alue)31 b(for)g(the)g
-(Domain)h(attribute)f(of)g(a)g(F)-8 b(rame,)33 b(it)e(ob)m(viously)h
-(mak)m(es)f(sense)g(to)h(a)m(v)m(oid)0 696 y(generic)d(names)g(whic)m
-(h)f(migh)m(t)h(clash)g(with)f(those)h(used)e(for)i(similar)f(\(but)g
-(subtly)g(di\013eren)m(t!\))41 b(purp)s(oses)27 b(b)m(y)0
-809 y(other)i(programmers.)40 b(If)28 b(y)m(ou)h(are)h(dev)m(eloping)g
-(soft)m(w)m(are)g(for)e(an)h(instrumen)m(t,)g(for)g(example,)h(and)e(w)
-m(an)m(t)i(to)0 922 y(iden)m(tify)25 b(an)f(instrumen)m(tal)h(co)s
-(ordinate)g(system,)h(then)e(it)h(is)g(sensible)f(to)h(add)f(a)h
-(distinguishing)f(pre\014x.)38 b(F)-8 b(or)0 1035 y(instance,)25
-b(y)m(ou)f(migh)m(t)f(use)g Fo(<)p FF(INST)p Fo(>)p Fq(_)p
-FF(F)m(OCAL)p Fq(_)p FF(PLANE,)e(where)i Fo(<)p FF(INST)p
-Fo(>)f FF(\()p Fx(e.g.)g FF(an)h(acron)m(ym\))h(iden)m(ti\014es)0
-1148 y(y)m(our)30 b(instrumen)m(t.)0 1317 y(F)-8 b(or)37
-b(some)g(purp)s(oses,)g(ho)m(w)m(ev)m(er,)j(a)d(standard)e(c)m(hoice)k
-(of)e(Domain)g(name)g(is)f(desirable)h(so)g(that)g(di\013eren)m(t)0
-1430 y(items)29 b(of)g(soft)m(w)m(are)h(can)e(comm)m(unicate.)42
-b(F)-8 b(or)29 b(this)g(purp)s(ose,)e(the)i(follo)m(wing)h(Domain)f
-(names)f(are)h(reserv)m(ed)0 1543 y(b)m(y)h(AST)g(and)g(the)g(use)g
-(recommended)g(b)s(elo)m(w)h(should)e(b)s(e)h(carefully)h(observ)m(ed:)
-227 1826 y FD(GRAPHICS)427 1939 y FF(Iden)m(ti\014es)25
-b(the)g(co)s(ordinate)g(space)g(used)f(b)m(y)g(an)h(underlying)e
-(computer)i(graphics)f(system)427 2052 y(to)f(sp)s(ecify)e(plotting)i
-(op)s(erations.)38 b(T)m(ypically)-8 b(,)25 b(when)c(p)s(erforming)f
-(graphical)j(op)s(erations,)427 2165 y(AST)29 b(is)h(used)g(to)g
-(de\014ne)g(additional)g(co)s(ordinate)h(systems)f(whic)m(h)g(are)g
-(related)h(to)g(these)427 2278 y(\\nativ)m(e")g(graphical)e(co)s
-(ordinates.)41 b(Plotting)30 b(ma)m(y)f(b)s(e)f(carried)g(out)h(in)f
-(an)m(y)h(of)f(these)h(co-)427 2391 y(ordinate)g(systems,)f(but)f(the)h
-(GRAPHICS)f(domain)h(iden)m(ti\014es)g(the)g(nativ)m(e)h(co)s
-(ordinates)427 2504 y(through)h(whic)m(h)g(AST)g(comm)m(unicates)i
-(with)e(the)g(underlying)g(graphics)g(system.)227 2657
-y FD(GRID)427 2770 y FF(Iden)m(ti\014es)35 b(the)f(instan)m(taneous)i
-Fx(data)i(grid)c FF(used)g(to)h(store)g(and)f(handle)g(data,)j
-(together)427 2883 y(with)f(an)f(asso)s(ciated)i(co)s(ordinate)g
-(system.)56 b(In)35 b(this)h(co)s(ordinate)g(system,)i(the)d(\014rst)g
-(el-)427 2996 y(emen)m(t)f(stored)f(in)g(an)g(arra)m(y)h(of)f(data)h
-(alw)m(a)m(ys)h(has)d(a)i(co)s(ordinate)g(v)-5 b(alue)34
-b(of)f(unit)m(y)g(at)h(its)427 3109 y(cen)m(tre)e(and)d(all)j(elemen)m
-(ts)f(ha)m(v)m(e)h(unit)e(exten)m(t.)42 b(This)30 b(applies)g(to)h(all)
-h(dimensions.)427 3242 y(If)h(data)g(are)g(copied)g(or)g(transformed)f
-(to)i(a)f(new)f(data)h(grid)g(\(b)m(y)g(whatev)m(er)g(means\),)h(or)427
-3354 y(a)29 b(subset)e(of)i(the)f(original)h(grid)f(is)h(extracted,)h
-(then)e(the)g(same)h(rules)e(apply)h(to)h(the)f(cop)m(y)427
-3467 y(or)f(subset.)40 b(Its)27 b(\014rst)f(elemen)m(t)j(therefore)e
-(has)g(GRID)h(co)s(ordinate)g(v)-5 b(alues)27 b(of)h(unit)m(y)f(at)h
-(its)427 3580 y(cen)m(tre.)62 b(Note)38 b(that)f(this)g(means)g(that)g
-(GRID)g(co)s(ordinates)h(remain)f(attac)m(hed)h(to)g(the)427
-3693 y(\014rst)c(elemen)m(t)i(of)f(the)f(data)h(grid)g(and)f(not)g(to)i
-(its)e(data)i(con)m(ten)m(t)g(\()p Fx(e.g.)e FF(the)h(features)f(in)427
-3806 y(an)d(image\).)227 3959 y FD(PIXEL)427 4072 y FF(Iden)m(ti\014es)
-42 b(an)f(arra)m(y)h(of)f(pixels)h(and)e(an)h(asso)s(ciated)i
-Fx(pixel-b)-5 b(ase)g(d)43 b FF(co)s(ordinate)f(system)427
-4185 y(whic)m(h)37 b(is)g(related)g(to)h(the)f(GRID)g(co)s(ordinate)h
-(system)f(\(ab)s(o)m(v)m(e\))h(simply)f(b)m(y)f(a)i(shift)e(of)427
-4298 y(origin)30 b(along)g(eac)m(h)g(axis.)41 b(This)29
-b(shift)g(ma)m(y)g(b)s(e)g(in)m(tegral,)i(fractional,)g(p)s(ositiv)m
-(e,)g(negativ)m(e)427 4411 y(or)g(zero.)41 b(The)30 b(data)h(elemen)m
-(ts)h(retain)f(their)f(unit)g(exten)m(t)i(along)f(eac)m(h)h(axis.)427
-4544 y(Because)g(the)f(amoun)m(t)f(of)h(shift)f(is)h(unsp)s(eci\014ed,)
-e(the)h(PIXEL)g(domain)g(is)h(distinct)g(from)427 4657
-y(the)g(GRID)h(domain.)42 b(The)30 b(relationship)h(b)s(et)m(w)m(een)h
-(them)f(con)m(tains)h(a)f(degree)g(of)h(uncer-)427 4770
-y(tain)m(t)m(y)-8 b(,)36 b(suc)m(h)c(as)g(t)m(ypically)i(arises)f(from)
-f(the)h(di\013eren)m(t)f(con)m(v)m(en)m(tions)j(used)c(b)m(y)i
-(di\013eren)m(t)427 4883 y(soft)m(w)m(are)j(systems.)51
-b(F)-8 b(or)35 b(instance,)h(in)e(some)g(soft)m(w)m(are)h(the)g
-(\014rst)e(pixel)h(is)g(regarded)g(as)427 4995 y(b)s(eing)21
-b(cen)m(tred)h(at)h(\(1,1\),)i(while)d(in)f(other)g(soft)m(w)m(are)i
-(it)f(is)g(at)g(\(0.5,0.5\).)41 b(In)21 b(addition,)j(some)427
-5108 y(soft)m(w)m(are)31 b(pac)m(k)-5 b(ages)31 b(implemen)m(t)f(a)f
-(\\pixel)h(origin")h(whic)m(h)d(allo)m(ws)j(pixel)f(co)s(ordinates)f
-(to)427 5221 y(start)i(at)g(an)g(arbitrary)f(v)-5 b(alue.)427
-5354 y(The)41 b(GRID)h(domain)g(\(whic)m(h)g(corresp)s(onds)e(with)h
-(the)h(pixel-n)m(um)m(b)s(ering)f(con)m(v)m(en)m(tion)427
-5467 y(used)20 b(b)m(y)h(FITS\))g(is)f(a)i(sp)s(ecial)f(case)h(of)f
-(the)g(PIXEL)f(domain)h(and)f(a)m(v)m(oids)j(this)d(uncertain)m(t)m(y)
--8 b(.)427 5580 y(In)35 b(general,)j(additional)f(information)f(is)g
-(required)e(in)i(order)f(to)h(con)m(v)m(ert)h(from)f(one)f(to)427
-5693 y(the)c(other.)p eop end
-%%Page: 78 88
-TeXDict begin 78 87 bop 0 52 a FF(78)1200 b Fy(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))227 351
-y FD(SKY)427 464 y FF(Iden)m(ti\014es)d(the)g(domain)f(whic)m(h)h(con)m
-(tains)h(all)f(equiv)-5 b(alen)m(t)27 b(celestial)h(co)s(ordinate)f
-(systems.)427 577 y(Because)33 b(these)e(are)g(represen)m(ted)g(in)g
-(AST)f(b)m(y)h(SkyF)-8 b(rames)31 b(\()p Fu(x)p FF(8\),)i(it)e(should)f
-(b)s(e)g(no)h(sur-)427 690 y(prise)d(that)g(the)g(default)g(Domain)g(v)
--5 b(alue)29 b(for)e(a)h(SkyF)-8 b(rame)28 b(is)g(SKY.)g(Since)f(there)
-h(is)g(only)427 803 y(one)j(sky)-8 b(,)31 b(y)m(ou)f(probably)g(w)m
-(on't)h(need)f(to)h(c)m(hange)h(this)e(v)m(ery)h(often.)227
-954 y FD(SPECTR)m(UM)427 1066 y FF(Iden)m(ti\014es)22
-b(the)g(domain)f(used)g(to)h(describ)s(e)f(p)s(ositions)h(within)f(an)g
-(electro-magnetic)k(sp)s(ec-)427 1179 y(trum.)52 b(The)34
-b(AST)g(Sp)s(ecF)-8 b(rame)35 b(\()p Fu(x)p FF(9\))h(class)f(describ)s
-(es)e(p)s(ositions)i(within)f(this)g(domain,)427 1292
-y(allo)m(wing)42 b(a)f(wide)f(range)h(of)f(di\013eren)m(t)h(co)s
-(ordinate)g(systems)f(to)h(b)s(e)f(used)g(\(frequency)-8
-b(,)427 1405 y(w)m(a)m(v)m(elength,)33 b Fx(etc)p FF(\).)41
-b(The)30 b(default)g(Domain)i(v)-5 b(alue)31 b(for)f(a)g(Sp)s(ecF)-8
-b(rame)31 b(is)f(SPECTR)m(UM.)227 1556 y FD(TIME)427
-1669 y FF(Iden)m(ti\014es)g(the)g(domain)f(used)g(to)h(describ)s(e)g
-(momen)m(ts)g(in)f(time.)41 b(The)29 b(AST)g(TimeF)-8
-b(rame)427 1782 y(class)32 b(describ)s(es)f(p)s(ositions)g(within)g
-(this)g(domain,)g(allo)m(wing)i(a)f(wide)f(range)g(of)h(di\013eren)m(t)
-427 1895 y(co)s(ordinate)g(systems)e(and)g(timescales)i(to)g(b)s(e)d
-(used.)41 b(The)30 b(default)g(Domain)i(v)-5 b(alue)31
-b(for)f(a)427 2008 y(TimeF)-8 b(rame)32 b(is)e(TIME.)0
-2283 y(Although)h(w)m(e)h(ha)m(v)m(e)h(dra)m(wn)d(a)i(necessary)g
-(distinction)g(here)f(b)s(et)m(w)m(een)h(the)f(GRID)h(and)f(PIXEL)f
-(domains,)0 2396 y(w)m(e)35 b(will)g(con)m(tin)m(ue)g(to)h(refer)e(in)g
-(general)h(terms)g(to)g(image)g(\\pixels")h(and)e(\\pixel)h(co)s
-(ordinates")h(whenev)m(er)0 2509 y(this)30 b(distinction)g(is)g(not)g
-(imp)s(ortan)m(t.)40 b(This)29 b(should)g(not)h(b)s(e)f(tak)m(en)i(to)f
-(imply)g(that)g(the)g(GRID)g(con)m(v)m(en)m(tion)0 2622
-y(for)42 b(n)m(um)m(b)s(ering)f(pixels)h(is)g(excluded|in)f(fact,)46
-b(it)d(is)f(usually)f(to)i(b)s(e)e(preferred)g(\(at)i(the)f(lev)m(el)i
-(of)e(data)0 2735 y(handling)30 b(b)s(eing)g(discussed)f(in)h(this)g
-(do)s(cumen)m(t\))h(and)f(w)m(e)h(recommend)f(it.)0 3044
-y Fw(7.14)112 b(The)38 b(Unit)g(A)m(ttribute)0 3272 y
-FF(Eac)m(h)44 b(axis)g(of)f(a)h(F)-8 b(rame)44 b(has)f(a)h(Unit)f
-(attribute)h(whic)m(h)g(holds)e(the)i(ph)m(ysical)g(units)e(used)h(to)h
-(describ)s(e)0 3385 y(p)s(ositions)36 b(on)f(the)h(axis.)57
-b(The)36 b(index)f(of)h(the)g(axis)g(to)g(whic)m(h)g(the)g(attribute)g
-(refers)f(should)g(normally)h(b)s(e)0 3498 y(placed)j(in)f(paren)m
-(theses)h(follo)m(wing)h(the)f(attribute)h(name)e(\(\\Unit\(2\)")k(for)
-c(instance\).)67 b(Ho)m(w)m(ev)m(er,)43 b(if)38 b(the)0
-3610 y(F)-8 b(rame)31 b(has)f(only)h(a)g(single)g(axis,)g(then)f(the)g
-(axis)h(index)f(can)h(b)s(e)f(omitted.)0 3778 y(In)f(v)m(ersions)h(of)g
-(AST)f(prior)g(to)i(v)m(ersion)f(2.0,)h(the)f(Unit)g(attribute)g(w)m
-(as)g(nothing)g(more)g(than)f(a)i(descriptiv)m(e)0 3891
-y(string)g(in)m(tended)g(purely)g(for)g(h)m(uman)g(readers|no)g(part)g
-(of)g(the)h(AST)e(system)i(used)e(the)i(Unit)f(string)h(for)0
-4004 y(an)m(y)h(purp)s(ose)e(\(other)i(than)g(inclusion)f(in)g(axis)i
-(lab)s(els)e(pro)s(duced)f(b)m(y)i(the)g(Plot)g(class\).)49
-b(In)32 b(particular,)i(no)0 4116 y(accoun)m(t)f(w)m(as)f(tak)m(en)g
-(of)g(the)f(Unit)h(attribute)g(when)e(\014nding)g(the)i(Mapping)f(b)s
-(et)m(w)m(een)h(t)m(w)m(o)h(F)-8 b(rames.)45 b(Th)m(us)0
-4229 y(if)28 b(the)g(con)m(v)m(ersion)h(b)s(et)m(w)m(een)f(a)g(pair)g
-(of)g(1-dimensional)g(F)-8 b(rames)29 b(represen)m(ting)f(v)m(elo)s
-(cit)m(y)i(w)m(as)e(found)f(\(using)0 4342 y(astCon)m(v)m(ert)33
-b(\))g(the)f(returned)f(Mapping)h(w)m(ould)f(alw)m(a)m(ys)j(b)s(e)d(a)i
-(UnitMap,)g(ev)m(en)f(if)g(the)h(Unit)f(attributes)g(of)0
-4455 y(the)e(t)m(w)m(o)h(F)-8 b(rames)31 b(w)m(ere)f(\\km/h")g(and)f
-(\\m/s".)42 b(This)29 b(b)s(eha)m(viour)g(is)h(referred)f(to)h(b)s(elo)
-m(w)g(as)g(a)h Fx(p)-5 b(assive)37 b FF(Unit)0 4568 y(attribute.)0
-4735 y(As)h(of)f(AST)g(v)m(ersion)h(2.0,)j(a)d(facilit)m(y)h(exists)g
-(whic)m(h)e(allo)m(ws)i(the)f(Unit)f(attribute)i(to)f(b)s(e)f
-Fx(active)7 b FF(;)41 b(that)d(is,)0 4848 y(di\013erences)30
-b(in)g(the)g(Unit)g(attribute)h(ma)m(y)f(b)s(e)f(tak)m(en)i(in)m(to)g
-(accoun)m(t)g(when)e(\014nding)g(the)h(Mapping)g(b)s(et)m(w)m(een)0
-4961 y(t)m(w)m(o)40 b(F)-8 b(rames.)68 b(In)39 b(order)f(to)i(minimise)
-f(the)g(risk)g(of)h(breaking)f(older)g(soft)m(w)m(are,)k(the)c
-Fx(default)49 b FF(b)s(eha)m(viour)0 5074 y(of)36 b(simple)g(F)-8
-b(rames)36 b(and)f(SkyF)-8 b(rames)36 b(is)g(unc)m(hanged)f(from)g
-(previous)h(v)m(ersions)g(\()p Fx(i.e.)56 b FF(they)36
-b(ha)m(v)m(e)h(passiv)m(e)0 5187 y(Unit)26 b(attributes\).)40
-b(Ho)m(w)m(ev)m(er,)29 b(the)d(new)f(functions)g(astSetActiv)m(eUnit)k
-(and)d(astGetActiv)m(eUnit)j(allo)m(w)f(this)0 5300 y(default)g(b)s
-(eha)m(viour)f(to)h(b)s(e)f(c)m(hanged.)40 b(The)27 b(Sp)s(ecF)-8
-b(rame)28 b(and)f(TimeF)-8 b(rame)28 b(classes)g Fx(always)37
-b FF(ha)m(v)m(e)29 b(an)e(activ)m(e)0 5413 y(Unit)k(attribute)g
-(\(attempts)g(to)g(c)m(hange)h(this)e(are)h(ignored\).)0
-5580 y(F)-8 b(or)24 b(instance,)h(consider)e(the)h(ab)s(o)m(v)m(e)g
-(example)g(of)f(t)m(w)m(o)i(1-dimensional)f(F)-8 b(rames)24
-b(describing)e(v)m(elo)s(cit)m(y)-8 b(.)42 b(These)0
-5693 y(F)-8 b(rames)31 b(can)g(b)s(e)f(created)h(as)g(follo)m(ws:)p
-eop end
-%%Page: 79 89
-TeXDict begin 79 88 bop 0 52 a Fy(7.14)93 b(The)29 b(Unit)i(A)m
-(ttribute)2667 b FF(79)227 351 y Ft(AstFrame)41 b(*frame1,)f(*frame2;)
-227 451 y(frame1)h(=)j(astFrame\()39 b(1,)k("Domain=VELOCITY,)o(Un)o
-(it)o(=km)o(/h)o(")38 b(\);)227 551 y(frame2)j(=)j(astFrame\()39
-b(1,)k("Domain=VELOCITY,)o(Un)o(it)o(=m/)o(s")37 b(\);)0
-760 y FF(By)g(default,)i(these)f(F)-8 b(rames)37 b(ha)m(v)m(e)i(passiv)
-m(e)e(Unit)g(attributes,)j(and)c(so)h(an)g(attempt)h(to)g(\014nd)d(a)j
-(Mapping)0 873 y(b)s(et)m(w)m(een)c(them)f(w)m(ould)h(ignore)g(the)f
-(di\013erence)h(in)f(their)h(Unit)f(attributes)h(and)f(return)f(a)i
-(unit)f(Mapping.)0 986 y(T)-8 b(o)29 b(a)m(v)m(oid)i(this,)e(w)m(e)h
-(indicate)g(that)f(w)m(e)g(w)m(an)m(t)h(these)g(F)-8
-b(rames)29 b(to)h(ha)m(v)m(e)g Fx(active)36 b FF(Unit)29
-b(attributes,)h(as)f(follo)m(ws:)227 1182 y Ft(astSetActiveUnit\()37
-b(frame1,)k(1)i(\);)227 1282 y(astSetActiveUnit\()37
-b(frame2,)k(1)i(\);)0 1491 y FF(If)30 b(w)m(e)h(then)f(\014nd)f(the)h
-(Mapping)h(b)s(et)m(w)m(een)g(them)f(as)g(follo)m(ws:)227
-1687 y Ft(AstFrameSet)39 b(*cvt;)227 1787 y(...)227 1886
-y(cvt)k(=)g(astConvert\()c(frame1,)i(frame2,)f("")j(\);)0
-2096 y FF(the)32 b(Mapping)g(con)m(tained)h(within)f(the)g(F)-8
-b(rameSet)33 b(returned)e(b)m(y)g(astCon)m(v)m(ert)j(will)e(b)s(e)f(a)i
-(one-dimensional)0 2209 y(Zo)s(omMap)g(whic)m(h)g(simply)f(scales)j
-(its)e(input)f(\(a)i(v)m(elo)s(cit)m(y)i(in)d Fo(k)s(m=h)p
-FF(\))h(b)m(y)f(a)g(factor)h(of)g(0.278)h(to)e(create)i(its)0
-2322 y(output)30 b(\(a)h(v)m(elo)s(cit)m(y)i(in)d Fo(m=s)p
-FF(\).)0 2471 y(In)45 b(fact)h(w)m(e)g(need)f(not)h(ha)m(v)m(e)h(set)f
-(the)g(Unit)g(attribute)g(activ)m(e)i(in)d(\\frame1")i(since)e(the)h(b)
-s(eha)m(viour)f(of)0 2584 y(astCon)m(v)m(ert)32 b(is)e(determined)g(b)m
-(y)h(its)f(\\to")i(F)-8 b(rame)32 b(\(the)f(second)f(F)-8
-b(rame)31 b(parameter\).)0 2854 y FD(7.14.1)106 b(The)34
-b(Syn)m(tax)h(for)g(Unit)g(Strings)0 3063 y FF(Con)m(v)m(ersion)28
-b(b)s(et)m(w)m(een)g(units)e(systems)h(relies)h(on)f(the)h(use)e(of)i
-(a)f(sp)s(eci\014c)g(syn)m(tax)h(for)f(the)g(Unit)h(attribute.)40
-b(If)0 3176 y(the)32 b(v)-5 b(alue)32 b(of)g(the)g(Unit)g(attribute)g
-(do)s(es)g(not)g(conform)g(to)g(this)g(syn)m(tax,)h(then)e(an)h(error)f
-(will)h(b)s(e)f(rep)s(orted)0 3288 y(if)k(an)g(attempt)h(is)f(made)g
-(to)g(use)g(it)h(to)f(determine)g(an)g(in)m(ter-unit)h(Mapping)e
-(\(this)i(will)f(nev)m(er)g(happ)s(en)e(if)0 3401 y(the)e(Unit)f
-(attribute)h(is)g Fx(p)-5 b(assive)7 b FF(\).)0 3551
-y(The)20 b(adopted)h(syn)m(tax)g(is)f(that)i(describ)s(ed)d(in)h
-(FITS-W)m(CS)g(pap)s(er)g(I)g("Represen)m(tation)i(of)f(W)-8
-b(orld)21 b(Co)s(ordinate)0 3664 y(in)35 b(FITS")g(b)m(y)g(Greisen)h(&)
-f(Calabretta.)57 b(W)-8 b(e)37 b(distinguish)d(here)h(b)s(et)m(w)m(een)
-h(\\basic")h(units)e(and)f(\\deriv)m(ed")0 3777 y(units:)43
-b(deriv)m(ed)32 b(units)f(are)h(de\014ned)f(in)h(terms)f(of)h(other)g
-(units)g(\(either)g(deriv)m(ed)g(or)g(basic\),)h(whereas)f(basic)0
-3890 y(units)40 b(ha)m(v)m(e)h(no)f(suc)m(h)g(de\014nitions.)69
-b(Deriv)m(ed)41 b(units)f(ma)m(y)h(b)s(e)e(represen)m(ted)h(b)m(y)g
-(their)h(o)m(wn)f Fx(symb)-5 b(ol)51 b FF(\()p Fx(e.g.)0
-4003 y FF(\\Jy"|the)23 b(Jansky\))g(or)f(b)m(y)h(a)f
-Fx(mathematic)-5 b(al)29 b(expr)-5 b(ession)31 b FF(whic)m(h)22
-b(com)m(bines)h(other)g(sym)m(b)s(ols)f(and)g(constan)m(ts)0
-4115 y(to)37 b(form)f(a)h(de\014nition)g(of)f(the)h(unit)f(\()p
-Fx(e.g.)59 b FF(\\km/s"|kilometres)39 b(p)s(er)c(second\).)60
-b(Unit)37 b(sym)m(b)s(ols)f(ma)m(y)h(b)s(e)0 4228 y(pre\014xed)29
-b(b)m(y)h(a)h(string)g(represen)m(ting)f(a)h(standard)f(m)m(ultiple)h
-(or)f(sub-m)m(ultiple.)0 4378 y(In)j(addition)h(to)h(the)f(unit)g(sym)m
-(b)s(ols)f(listed)i(in)f(FITS-W)m(CS)f(P)m(ap)s(er)h(I,)g(an)m(y)g
-(other)g(arbitrary)g(unit)g(sym)m(b)s(ol)0 4491 y(ma)m(y)41
-b(b)s(e)e(used,)j(with)d(the)i(pro)m(viso)f(that)h(it)f(will)g(not)h(b)
-s(e)e(p)s(ossible)g(to)i(con)m(v)m(ert)h(b)s(et)m(w)m(een)e(F)-8
-b(rames)41 b(using)0 4604 y(suc)m(h)31 b(units.)41 b(The)31
-b(exception)h(to)g(this)f(is)g(if)g(b)s(oth)f(F)-8 b(rames)31
-b(refer)g(to)h(the)f(same)g(unkno)m(wn)f(unit)g(string.)43
-b(F)-8 b(or)0 4717 y(instance,)44 b(an)c(axis)h(with)f(unkno)m(wn)f
-(unit)h(sym)m(b)s(ol)h("\015op")f Fx(c)-5 b(ould)51 b
-FF(b)s(e)40 b(con)m(v)m(erted)i(to)f(an)g(axis)g(with)f(unit)0
-4829 y("M\015op")31 b(\(Mega-\015op\).)0 4979 y(Unit)37
-b(sym)m(b)s(ols)g(\(optionally)i(pre\014xed)d(with)g(a)i(m)m(ultiple)g
-(or)f(sub-m)m(ultiple\))g(can)g(b)s(e)g(com)m(bined)g(together)0
-5092 y(using)i(a)h(limited)h(range)f(of)g(mathematical)i(op)s(erators)e
-(and)f(functions,)j(to)e(pro)s(duce)f(new)g(units.)68
-b(Suc)m(h)0 5205 y(expressions)39 b(ma)m(y)i(also)f(con)m(tain)h(paren)
-m(theses)f(and)f(n)m(umerical)h(constan)m(ts)h(\(these)f(ma)m(y)h
-(optionally)g(use)0 5318 y(\\scien)m(ti\014c")33 b(notation)e
-(including)f(an)g(\\E")i(c)m(haracter)g(to)f(represen)m(t)f(the)h(p)s
-(o)m(w)m(er)f(of)h(10\).)0 5467 y(The)g(follo)m(wing)j(tables)e(list)h
-(the)f(sym)m(b)s(ols)f(for)h(the)g(basic)g(and)f(deriv)m(ed)h(units)f
-(whic)m(h)h(ma)m(y)g(b)s(e)g(included)f(in)0 5580 y(a)e(units)f
-(string,)i(the)f(standard)f(pre\014xes)g(for)g(m)m(ultiples)h(and)g
-(sub-m)m(ultiples,)g(and)f(the)h(strings)f(whic)m(h)h(ma)m(y)0
-5693 y(b)s(e)h(used)f(to)i(represen)m(t)g(mathematical)i(op)s(erators)d
-(and)g(functions.)p eop end
-%%Page: 80 90
-TeXDict begin 80 89 bop 0 52 a FF(80)1200 b Fy(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))p 977 263
-1827 4 v 975 376 4 113 v 1654 342 a FC(Basic)k(units)p
-2801 376 V 977 379 1827 4 v 975 492 4 113 v 1258 459
-a FF(Quan)m(tit)m(y)p 1894 492 V 1894 492 V 332 w(Sym)m(b)s(ol)p
-2289 492 V 99 w(F)-8 b(ull)31 b(Name)p 2801 492 V 977
-496 1827 4 v 975 609 4 113 v 1026 575 a(length)p 1894
-609 V 672 w(m)p 2289 609 V 319 w(metre)p 2801 609 V 975
-722 V 1026 688 a(mass)p 1894 722 V 726 w(g)p 2289 722
-V 350 w(gram)p 2801 722 V 975 834 V 1026 801 a(time)p
-1894 834 V 743 w(s)p 2289 834 V 359 w(second)p 2801 834
-V 975 947 V 1026 913 a(plane)g(angle)p 1894 947 V 470
-w(rad)p 2289 947 V 263 w(radian)p 2801 947 V 975 1060
-V 1026 1026 a(solid)g(angle)p 1894 1060 V 500 w(sr)p
-2289 1060 V 323 w(steradian)p 2801 1060 V 975 1173 V
-1026 1139 a(temp)s(erature)p 1894 1173 V 431 w(K)p 2289
-1173 V 324 w(Kelvin)p 2801 1173 V 975 1286 V 1026 1252
-a(electric)i(curren)m(t)p 1894 1286 V 319 w(A)p 2289
-1286 V 327 w(Amp)s(ere)p 2801 1286 V 975 1399 V 1026
-1365 a(amoun)m(t)e(of)g(substance)p 1894 1399 V 99 w(mol)p
-2289 1399 V 249 w(mole)p 2801 1399 V 975 1512 V 1026
-1478 a(luminous)f(in)m(tensit)m(y)p 1894 1512 V 189 w(cd)p
-2289 1512 V 304 w(candela)p 2801 1512 V 977 1515 1827
-4 v 0 1872 a FD(7.14.2)106 b(Side-e\013ects)35 b(of)g(Changing)g(the)f
-(Unit)h(attribute)0 2094 y FF(If)c(an)g(Axis)h(has)f(an)g(activ)m(e)j
-(Unit)e(attribute,)g(c)m(hanging)h(its)f(v)-5 b(alue)31
-b(\(either)i(b)m(y)e(setting)i(a)e(new)g(v)-5 b(alue)32
-b(or)g(b)m(y)0 2207 y(clearing)h(it)g(so)f(that)g(the)g(default)g(v)-5
-b(alue)33 b(is)e(re-instated\))j(ma)m(y)e(cause)h(the)f(Lab)s(el)f(and)
-h(Sym)m(b)s(ol)f(attributes)0 2319 y(to)45 b(b)s(e)f(c)m(hanged)h
-(accordingly)-8 b(.)84 b(F)-8 b(or)45 b(instance,)k(if)44
-b(an)h(Axis)f(has)g(Unit,)49 b(Lab)s(el)44 b(and)g(Sym)m(b)s(ol)f(of)i
-(\\Hz",)0 2432 y(\\F)-8 b(requency")31 b(and)d(\\n)m(u",)i(then)f(c)m
-(hanging)h(its)g(Unit)f(attribute)h(to)g(\\log\(Hz\)")j(will)c(cause)h
-(AST)e(to)i(c)m(hange)0 2545 y(its)i(Lab)s(el)g(and)f(Sym)m(b)s(ol)g
-(to)h(\\log\(F)-8 b(requency\)")35 b(and)c(\\Log\(n)m(u\)".)47
-b(These)31 b(c)m(hanges)i(are)f(only)g(made)g(if)f(the)0
-2658 y(Unit)h(attribute)h(is)g(activ)m(e,)i(and)c(a)i(Mapping)f(can)h
-(b)s(e)e(found)g(from)h(the)g(old)h(units)e(to)i(the)g(new)f(units.)45
-b(On)0 2771 y(the)39 b(other)g(hand,)h(c)m(hanging)g(the)f(Unit)g(from)
-f(\\Hz")i(to)g(\\MHz")h(w)m(ould)d(not)h(cause)h(an)m(y)f(c)m(hange)h
-(to)f(the)0 2884 y(Lab)s(el)30 b(or)h(Sym)m(b)s(ol)e(attributes.)p
-eop end
-%%Page: 81 91
-TeXDict begin 81 90 bop 0 52 a Fy(7.14)93 b(The)29 b(Unit)i(A)m
-(ttribute)2667 b FF(81)p 0 272 3999 4 v -2 384 4 113
-v 1712 351 a FC(Deriv)m(ed)34 b(units)p 3996 384 V 0
-388 3999 4 v -2 501 4 113 v 298 467 a FF(Quan)m(tit)m(y)p
-949 501 V 949 501 V 396 w(Sym)m(b)s(ol)p 1441 501 V 432
-w(F)-8 b(ull)31 b(Name)p 2522 501 V 875 w(De\014nition)p
-3996 501 V 0 504 3999 4 v -2 617 4 113 v 50 583 a(area)p
-949 617 V 785 w(barn)p 1441 617 V 309 w(barn)p 2522 617
-V 897 w(1.0E-28)i(m**2)p 3996 617 V -2 730 V 50 696 a(area)p
-949 730 V 785 w(pix)p 1441 730 V 368 w(pixel)p 2522 730
-V 3996 730 V -2 843 V 50 809 a(area)p 949 843 V 785 w(pixel)p
-1441 843 V 303 w(pixel)p 2522 843 V 3996 843 V -2 956
-V 50 922 a(electric)f(capacitance)p 949 956 V 181 w(F)p
-1441 956 V 433 w(F)-8 b(arad)p 2522 956 V 852 w(C/V)p
-3996 956 V -2 1069 V 50 1035 a(electric)32 b(c)m(harge)p
-949 1069 V 384 w(C)p 1441 1069 V 426 w(Coulom)m(b)p 2522
-1069 V 724 w(A)f(s)p 3996 1069 V -2 1181 V 50 1148 a(electric)h
-(conductance)p 949 1181 V 149 w(S)p 1441 1181 V 441 w(Siemens)p
-2522 1181 V 761 w(A/V)p 3996 1181 V -2 1294 V 50 1261
-a(electric)g(p)s(oten)m(tial)p 949 1294 V 286 w(V)p 1441
-1294 V 424 w(V)-8 b(olt)p 2522 1294 V 915 w(J/C)p 3996
-1294 V -2 1407 V 50 1373 a(electric)32 b(resistance)p
-949 1407 V 254 w(Ohm)p 1441 1407 V 294 w(Ohm)p 2522 1407
-V 882 w(V/A)p 3996 1407 V -2 1520 V 50 1486 a(energy)p
-949 1520 V 691 w(J)p 1441 1520 V 445 w(Joule)p 2522 1520
-V 872 w(N)f(m)p 3996 1520 V -2 1633 V 50 1599 a(energy)p
-949 1633 V 691 w(Ry)p 1441 1633 V 377 w(Rydb)s(erg)p
-2522 1633 V 739 w(13.605692)j(eV)p 3996 1633 V -2 1746
-V 50 1712 a(energy)p 949 1746 V 691 w(eV)p 1441 1746
-V 384 w(electron-V)-8 b(olt)p 2522 1746 V 573 w(1.60217733E-19)36
-b(J)p 3996 1746 V -2 1859 V 50 1825 a(energy)p 949 1859
-V 691 w(erg)p 1441 1859 V 371 w(erg)p 2522 1859 V 959
-w(1.0E-7)c(J)p 3996 1859 V -2 1972 V 50 1938 a(ev)m(en)m(ts)p
-949 1972 V 707 w(coun)m(t)p 1441 1972 V 273 w(coun)m(t)p
-2522 1972 V 3996 1972 V -2 2085 V 50 2051 a(ev)m(en)m(ts)p
-949 2085 V 707 w(ct)p 1441 2085 V 417 w(coun)m(t)p 2522
-2085 V 3996 2085 V -2 2198 V 50 2164 a(ev)m(en)m(ts)p
-949 2198 V 707 w(ph)p 1441 2198 V 390 w(photon)p 2522
-2198 V 3996 2198 V -2 2311 V 50 2277 a(ev)m(en)m(ts)p
-949 2311 V 707 w(photon)p 1441 2311 V 214 w(photon)p
-2522 2311 V 3996 2311 V -2 2423 V 50 2390 a(\015ux)d(densit)m(y)p
-949 2423 V 489 w(Jy)p 1441 2423 V 397 w(Jansky)p 2522
-2423 V 805 w(1.0E-26)k(W)d(/m**2)i(/Hz)p 3996 2423 V
--2 2536 V 50 2503 a(\015ux)d(densit)m(y)p 949 2536 V
-489 w(R)p 1441 2536 V 425 w(Ra)m(yleigh)p 2522 2536 V
-737 w(1.0E10/\(4*PI\))34 b(photon.m**-2)e(/s/sr)p 3996
-2536 V -2 2649 V 50 2615 a(\015ux)d(densit)m(y)p 949
-2649 V 489 w(mag)p 1441 2649 V 326 w(magnitude)p 2522
-2649 V 3996 2649 V -2 2762 V 50 2728 a(force)p 949 2762
-V 762 w(N)p 1441 2762 V 424 w(Newton)p 2522 2762 V 775
-w(kg)i(m/s**2)p 3996 2762 V -2 2875 V 50 2841 a(frequency)p
-949 2875 V 569 w(Hz)p 1441 2875 V 384 w(Hertz)p 2522
-2875 V 861 w(1/s)p 3996 2875 V -2 2988 V 50 2954 a(illuminance)p
-949 2988 V 497 w(lx)p 1441 2988 V 419 w(lux)p 2522 2988
-V 956 w(lm/m**2)p 3996 2988 V -2 3101 V 50 3067 a(inductance)p
-949 3101 V 522 w(H)p 1441 3101 V 424 w(Henry)p 2522 3101
-V 837 w(Wb/A)p 3996 3101 V -2 3214 V 50 3180 a(length)p
-949 3214 V 704 w(A)m(U)p 1441 3214 V 359 w(astronomical)h(unit)p
-2522 3214 V 382 w(1.49598E11)i(m)p 3996 3214 V -2 3327
-V 50 3293 a(length)p 949 3327 V 704 w(Angstrom)p 1441
-3327 V 100 w(Angstrom)p 2522 3327 V 688 w(1.0E-10)f(m)p
-3996 3327 V -2 3440 V 50 3406 a(length)p 949 3440 V 704
-w(lyr)p 1441 3440 V 383 w(ligh)m(t)e(y)m(ear)p 2522 3440
-V 705 w(9.460730E15)k(m)p 3996 3440 V -2 3553 V 50 3519
-a(length)p 949 3553 V 704 w(p)s(c)p 1441 3553 V 398 w(parsec)p
-2522 3553 V 832 w(3.0867E16)f(m)p 3996 3553 V -2 3665
-V 50 3632 a(length)p 949 3665 V 704 w(solRad)p 1441 3665
-V 223 w(solar)d(radius)p 2522 3665 V 618 w(6.9599E8)i(m)p
-3996 3665 V -2 3778 V 50 3745 a(luminosit)m(y)p 949 3778
-V 537 w(solLum)p 1441 3778 V 202 w(solar)e(luminosit)m(y)p
-2522 3778 V 448 w(3.8268E26)j(W)p 3996 3778 V -2 3891
-V 50 3857 a(luminous)29 b(\015ux)p 949 3891 V 412 w(lm)p
-1441 3891 V 391 w(lumen)p 2522 3891 V 837 w(cd)h(sr)p
-3996 3891 V -2 4004 V 50 3970 a(magnetic)i(\014eld)p
-949 4004 V 395 w(G)p 1441 4004 V 421 w(Gauss)p 2522 4004
-V 841 w(1.0E-4)g(T)p 3996 4004 V -2 4117 V 50 4083 a(magnetic)g(\015ux)
-p 949 4117 V 412 w(Wb)p 1441 4117 V 348 w(W)-8 b(eb)s(er)p
-2522 4117 V 825 w(V)31 b(s)p 3996 4117 V -2 4230 V 50
-4196 a(mass)p 949 4230 V 758 w(solMass)p 1441 4230 V
-186 w(solar)g(mass)p 2522 4230 V 669 w(1.9891E30)j(kg)p
-3996 4230 V -2 4343 V 50 4309 a(mass)p 949 4343 V 758
-w(u)p 1441 4343 V 441 w(uni\014ed)29 b(atomic)j(mass)e(unit)p
-2522 4343 V 99 w(1.6605387E-27)35 b(kg)p 3996 4343 V
--2 4456 V 50 4422 a(magnetic)d(\015ux)d(densit)m(y)p
-949 4456 V 100 w(T)p 1441 4456 V 426 w(T)-8 b(esla)p
-2522 4456 V 876 w(Wb/m**2)p 3996 4456 V -2 4569 V 50
-4535 a(plane)30 b(angle)p 949 4569 V 503 w(arcmin)p 1441
-4569 V 219 w(arc-min)m(ute)p 2522 4569 V 654 w(1/60)i(deg)p
-3996 4569 V -2 4682 V 50 4648 a(plane)e(angle)p 949 4682
-V 503 w(arcsec)p 1441 4682 V 255 w(arc-second)p 2522
-4682 V 666 w(1/3600)j(deg)p 3996 4682 V -2 4795 V 50
-4761 a(plane)d(angle)p 949 4795 V 503 w(mas)p 1441 4795
-V 335 w(milli-arcsecond)p 2522 4795 V 490 w(1/3600000)35
-b(deg)p 3996 4795 V -2 4908 V 50 4874 a(plane)30 b(angle)p
-949 4908 V 503 w(deg)p 1441 4908 V 356 w(degree)p 2522
-4908 V 828 w(pi/180)i(rad)p 3996 4908 V -2 5020 V 50
-4987 a(p)s(o)m(w)m(er)p 949 5020 V 716 w(W)p 1441 5020
-V 399 w(W)-8 b(att)p 2522 5020 V 880 w(J/s)p 3996 5020
-V -2 5133 V 50 5099 a(pressure,)29 b(stress)p 949 5133
-V 352 w(P)m(a)p 1441 5133 V 388 w(P)m(ascal)p 2522 5133
-V 830 w(N/m**2)p 3996 5133 V -2 5246 V 50 5212 a(time)p
-949 5246 V 775 w(a)p 1441 5246 V 447 w(y)m(ear)p 2522
-5246 V 914 w(31557600)34 b(s)p 3996 5246 V -2 5359 V
-50 5325 a(time)p 949 5359 V 775 w(d)p 1441 5359 V 441
-w(da)m(y)p 2522 5359 V 939 w(86400)f(s)p 3996 5359 V
--2 5472 V 50 5438 a(time)p 949 5472 V 775 w(h)p 1441
-5472 V 441 w(hour)p 2522 5472 V 897 w(3600)f(s)p 3996
-5472 V -2 5585 V 50 5551 a(time)p 949 5585 V 775 w(yr)p
-1441 5585 V 408 w(y)m(ear)p 2522 5585 V 914 w(31557600)i(s)p
-3996 5585 V -2 5698 V 50 5664 a(time)p 949 5698 V 775
-w(min)p 1441 5698 V 340 w(min)m(ute)p 2522 5698 V 805
-w(60)d(s)p 3996 5698 V -2 5811 V 949 5811 V 1001 5777
-a(D)p 1441 5811 V 423 w(Deb)m(y)m(e)p 2522 5811 V 838
-w(1.0E-29/3)j(C.m)p 3996 5811 V 0 5814 3999 4 v eop end
-%%Page: 82 92
-TeXDict begin 82 91 bop 0 52 a FF(82)1200 b Fy(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))p 617 871
-2546 4 v 615 984 4 113 v 1083 950 a FC(Pre\014xes)35
-b(for)d(m)m(ultiples)i(&)f(sub-m)m(ultiples)p 3161 984
-V 617 987 2546 4 v 615 1100 4 113 v 667 1066 a FF(Sub-m)m(ultiple)99
-b(Name)i(Pre\014x)p 1888 1100 V 1888 1100 V 99 w(Sub-m)m(ultiple)e
-(Name)h(Pre\014x)p 3161 1100 V 617 1103 2546 4 v 615
-1216 4 113 v 667 1183 a(10)757 1150 y Fp(\000)p Fv(1)1274
-1183 y FF(deci)174 b(d)p 1888 1216 V 285 w(10)517 b(deca)153
-b(da)p 3161 1216 V 615 1329 V 667 1295 a(10)757 1262
-y Fp(\000)p Fv(2)1274 1295 y FF(cen)m(ti)142 b(c)p 1888
-1329 V 296 w(10)2030 1262 y Fv(2)2547 1295 y FF(hecto)118
-b(h)p 3161 1329 V 615 1442 V 667 1408 a(10)757 1375 y
-Fp(\000)p Fv(3)1274 1408 y FF(milli)154 b(m)p 1888 1442
-V 260 w(10)2030 1375 y Fv(3)2547 1408 y FF(kilo)186 b(k)p
-3161 1442 V 615 1555 V 667 1521 a(10)757 1488 y Fp(\000)p
-Fv(6)1274 1521 y FF(micro)108 b(u)p 1888 1555 V 285 w(10)2030
-1488 y Fv(6)2547 1521 y FF(mega)123 b(M)p 3161 1555 V
-615 1668 V 667 1634 a(10)757 1601 y Fp(\000)p Fv(9)1274
-1634 y FF(nano)138 b(n)p 1888 1668 V 285 w(10)2030 1601
-y Fv(9)2547 1634 y FF(giga)169 b(G)p 3161 1668 V 615
-1781 V 667 1747 a(10)757 1714 y Fp(\000)p Fv(12)1274
-1747 y FF(pico)g(p)p 1888 1781 V 285 w(10)2030 1714 y
-Fv(12)2547 1747 y FF(tera)k(T)p 3161 1781 V 615 1894
-V 667 1860 a(10)757 1827 y Fp(\000)p Fv(15)1274 1860
-y FF(fem)m(to)109 b(f)p 1888 1894 V 308 w(10)2030 1827
-y Fv(15)2547 1860 y FF(p)s(eta)155 b(P)p 3161 1894 V
-615 2007 V 667 1973 a(10)757 1940 y Fp(\000)p Fv(18)1274
-1973 y FF(atto)170 b(a)p 1888 2007 V 291 w(10)2030 1940
-y Fv(18)2547 1973 y FF(exa)196 b(E)p 3161 2007 V 615
-2120 V 667 2086 a(10)757 2053 y Fp(\000)p Fv(21)1274
-2086 y FF(zepto)119 b(z)p 1888 2120 V 296 w(10)2030 2053
-y Fv(21)2547 2086 y FF(zetta)134 b(Z)p 3161 2120 V 615
-2233 V 667 2199 a(10)757 2166 y Fp(\000)p Fv(24)1274
-2199 y FF(y)m(o)s(cto)117 b(y)p 1888 2233 V 288 w(10)2030
-2166 y Fv(24)2547 2199 y FF(y)m(otta)124 b(Y)p 3161 2233
-V 617 2236 2546 4 v 590 3621 2601 4 v 588 3734 4 113
-v 1116 3700 a FC(Mathematical)33 b(op)s(erators)f(&)h(functions)p
-3188 3734 V 590 3737 2601 4 v 588 3850 4 113 v 746 3816
-a FF(String)p 1143 3850 V 1143 3850 V 1008 w(Meaning)p
-3188 3850 V 590 3853 2601 4 v 588 3966 4 113 v 639 3932
-a(sym1)e(sym2)p 1143 3966 V 115 w(m)m(ultiplication)h(\(a)f(space\))p
-3188 3966 V 588 4079 V 639 4045 a(sym1*sym2)p 1143 4079
-V 101 w(m)m(ultiplication)h(\(an)f(asterisk\))p 3188
-4079 V 588 4192 V 639 4158 a(sym1.sym2)p 1143 4192 V
-121 w(m)m(ultiplication)h(\(a)f(dot\))p 3188 4192 V 588
-4305 V 639 4271 a(sym1/sym2)p 1143 4305 V 101 w(division)p
-3188 4305 V 588 4418 V 639 4384 a(sym1**y)p 1143 4418
-V 213 w(exp)s(onen)m(tiation)g(\()p Fo(y)j FF(m)m(ust)c(b)s(e)g(a)g(n)m
-(umerical)h(constan)m(t\))p 3188 4418 V 588 4531 V 639
-4497 a(sym1)p Fq(^)p FF(y)p 1143 4531 V 255 w(exp)s(onen)m(tiation)g
-(\()p Fo(y)j FF(m)m(ust)c(b)s(e)g(a)g(n)m(umerical)h(constan)m(t\))p
-3188 4531 V 588 4644 V 639 4610 a(log\(sym1\))p 1143
-4644 V 166 w(common)f(logarithm)p 3188 4644 V 588 4756
-V 639 4723 a(ln\(sym1\))p 1143 4756 V 205 w(natural)g(logarithm)p
-3188 4756 V 588 4869 V 639 4836 a(exp\(sym1\))p 1143
-4869 V 142 w(exp)s(onen)m(tial)p 3188 4869 V 588 4982
-V 639 4948 a(sqrt\(sym1\))p 1143 4982 V 126 w(square)g(ro)s(ot)p
-3188 4982 V 590 4986 2601 4 v eop end
-%%Page: 83 93
-TeXDict begin 83 92 bop 3689 52 a FF(83)0 351 y Fz(8)135
-b(Celestial)47 b(Co)t(ordinate)f(Systems)g(\(SkyF)-11
-b(rames\))0 593 y FF(A)45 b(F)-8 b(rame)47 b(whic)m(h)e(is)g(sp)s
-(ecialised)h(for)f(represen)m(ting)g(co)s(ordinate)h(systems)g(on)f
-(the)g(celestial)j(sphere)c(is)0 706 y(ob)m(viously)30
-b(of)g(great)g(imp)s(ortance)g(in)f(astronom)m(y)-8 b(.)42
-b(The)29 b(SkyF)-8 b(rame)30 b(is)f(suc)m(h)g(a)h(F)-8
-b(rame.)41 b(In)29 b(this)g(section)i(w)m(e)0 819 y(examine)e(the)f
-(additional)h(prop)s(erties)f(and)g(b)s(eha)m(viour)f(of)i(a)f(SkyF)-8
-b(rame)29 b(that)g(distinguish)e(it)i(from)e(a)i(basic)0
-932 y(F)-8 b(rame)31 b(\()p Fu(x)p FF(7\).)0 1209 y Fw(8.1)112
-b(The)38 b(SkyF)-9 b(rame)39 b(Mo)s(del)0 1420 y FF(A)28
-b(SkyF)-8 b(rame)27 b(is,)i(of)e(course,)i(a)f(F)-8 b(rame)28
-b(\()p Fu(x)p FF(7\))h(and)e(also)h(a)g(Mapping)f(\()p
-Fu(x)p FF(5\),)j(so)e(it)g(inherits)f(all)h(the)g(prop)s(erties)0
-1533 y(and)d(b)s(eha)m(viour)h(of)g(these)h(t)m(w)m(o)g(ancestral)g
-(classes.)41 b(When)25 b(used)h(as)g(a)g(Mapping,)h(a)g(SkyF)-8
-b(rame)26 b(implemen)m(ts)0 1646 y(a)41 b(unit)g(transformation,)j
-(exactly)f(lik)m(e)f(a)g(basic)f(F)-8 b(rame)42 b(\()p
-Fu(x)p FF(7.3\))h(or)e(a)h(UnitMap,)i(so)d(this)g(asp)s(ect)h(of)f(its)
-0 1758 y(b)s(eha)m(viour)30 b(is)g(not)h(of)g(great)g(imp)s(ortance.)0
-1910 y(When)k(used)g(as)h(a)g(F)-8 b(rame,)39 b(ho)m(w)m(ev)m(er,)f(a)f
-(SkyF)-8 b(rame)36 b(represen)m(ts)f(a)h(2-dimensional)h
-Fx(spheric)-5 b(al)38 b FF(co)s(ordinate)0 2023 y(system,)31
-b(in)g(whic)m(h)f(the)h(shortest)g(distance)g(b)s(et)m(w)m(een)h(t)m(w)
-m(o)g(p)s(oin)m(ts)e(is)h(a)g(great)h(circle.)43 b(A)31
-b(SkyF)-8 b(rame)31 b(there-)0 2136 y(fore)41 b(alw)m(a)m(ys)h(has)e
-(exactly)i(t)m(w)m(o)g(axes)g(whic)m(h)e(represen)m(t)g(the)h
-(longitude)g(and)f(latitude)i(of)f(a)g(co)s(ordinate)0
-2249 y(system)31 b(residing)f(on)g(the)h(celestial)i(sphere.)41
-b(Man)m(y)31 b(suc)m(h)f(co)s(ordinate)i(systems)e(can)h(b)s(e)f
-(represen)m(ted)h(b)m(y)f(a)0 2362 y(SkyF)-8 b(rame,)31
-b(as)g(w)m(e)f(will)h(see)g(shortly)-8 b(.)0 2514 y(A)32
-b(SkyF)-8 b(rame)32 b(can)f(represen)m(t)h(an)m(y)g(of)g(the)f
-(commonly)i(used)d(celestial)k(co)s(ordinate)f(systems.)44
-b(Optionally)-8 b(,)0 2627 y(the)29 b(origin)g(of)g(the)g
-(longitude/latitude)i(system)e(can)g(b)s(e)f(mo)m(v)m(ed)i(to)g(an)m(y)
-f(sp)s(eci\014ed)f(p)s(oin)m(t)h(in)f(the)h(standard)0
-2740 y(celestial)k(system,)e(allo)m(wing)h(a)f(SkyF)-8
-b(rame)30 b(to)h(represen)m(t)g(o\013sets)g(from)f(a)h(sp)s(eci\014ed)e
-(sky)i(p)s(osition.)0 2891 y(When)c(it)g(is)h(\014rst)e(created,)j(a)e
-(SkyF)-8 b(rame's)28 b(axes)g(are)f(alw)m(a)m(ys)i(in)e(the)g(order)f
-(\(longitude,)j(latitude\))f(but)f(this)0 3004 y(can)d(b)s(e)g(c)m
-(hanged,)i(if)e(required,)h(b)m(y)f(using)g(the)g(astP)m(ermAxes)h
-(function)f(\()p Fu(x)p FF(7.9\).)41 b(The)23 b(order)h(of)g(the)g
-(axes)h(can)0 3117 y(b)s(e)h(determined)h(at)g(an)m(y)g(time)h(using)e
-(the)h(LatAxis)h(and)e(LonAxis)h(attributes.)40 b(A)27
-b(SkyF)-8 b(rame's)28 b(co)s(ordinate)0 3230 y(v)-5 b(alues)31
-b(are)g(alw)m(a)m(ys)h(stored)f(as)g(angles)h(in)e(\(double)h
-(precision\))g(radians,)g(regardless)g(of)g(the)g(setting)g(of)g(the)0
-3343 y(Unit)g(attribute.)0 3620 y Fw(8.2)112 b(Creating)38
-b(a)g(SkyF)-9 b(rame)0 3831 y FF(The)20 b(SkyF)-8 b(rame)21
-b(constructor)g(function)f(is)h(particularly)g(simple)f(and)g(a)h(SkyF)
--8 b(rame)21 b(with)f(default)h(attributes)0 3944 y(is)30
-b(created)i(as)e(follo)m(ws:)227 4149 y Ft(#include)41
-b("ast.h")227 4249 y(AstSkyFrame)e(*skyframe;)227 4448
-y(...)227 4648 y(skyframe)i(=)i(astSkyFrame\()38 b("")43
-b(\);)0 4866 y FF(Suc)m(h)33 b(a)h(SkyF)-8 b(rame)35
-b(w)m(ould)e(represen)m(t)h(the)g(default)g(celestial)j(co)s(ordinate)d
-(system)g(whic)m(h,)h(at)f(presen)m(t,)h(is)0 4979 y(the)c(ICRS)e
-(system)h(\(the)h(default)g(w)m(as)g("FK5\(J2000\)")i(in)e(v)m(ersions)
-f(of)h(AST)e(prior)h(to)h(3.0\).)0 5257 y Fw(8.3)112
-b(Sp)s(ecifying)39 b(a)f(P)m(articular)f(Celestial)i(Co)s(ordinate)f
-(System)0 5467 y FF(F)-8 b(or)41 b(man)m(y)g(purp)s(oses,)h(the)e(ICRS)
-g(co)s(ordinate)h(system)g(is)g(p)s(erfectly)f(adequate.)73
-b(In)40 b(order)g(to)h(supp)s(ort)0 5580 y(con)m(v)m(ersion)27
-b(b)s(et)m(w)m(een)e(a)h(v)-5 b(ariet)m(y)27 b(of)e(celestial)j(co)s
-(ordinate)e(systems,)g(ho)m(w)m(ev)m(er,)i(y)m(ou)e(can)f(create)i
-(SkyF)-8 b(rames)0 5693 y(that)31 b(represen)m(t)f(an)m(y)h(of)g
-(these.)p eop end
-%%Page: 84 94
-TeXDict begin 84 93 bop 0 52 a FF(84)1229 b Fy(8)91 b(CELESTIAL)29
-b(COORDINA)-8 b(TE)29 b(SYSTEMS)g(\(SKYFRAMES\))0 351
-y FF(Selection)48 b(of)f(a)g(particular)h(co)s(ordinate)f(system)g(is)g
-(p)s(erformed)e(simply)i(b)m(y)f(setting)i(a)f(v)-5 b(alue)48
-b(for)e(the)0 464 y(SkyF)-8 b(rame's)23 b(\(c)m(haracter)h(string\))e
-(System)g(attribute.)39 b(This)21 b(setting)j(is)e(most)h(con)m(v)m
-(enien)m(tly)h(done)e(when)f(the)0 577 y(SkyF)-8 b(rame)31
-b(is)f(created.)42 b(F)-8 b(or)31 b(example,)h(a)e(SkyF)-8
-b(rame)31 b(represen)m(ting)g(the)f(old)h(FK4)g(\(B1950.0\))j(co)s
-(ordinate)0 690 y(system)d(w)m(ould)f(b)s(e)f(created)j(b)m(y:)227
-935 y Ft(skyframe)41 b(=)i(astSkyFrame\()38 b("System=FK4")h(\);)0
-1194 y FF(Note)48 b(that)g(sp)s(ecifying)f(\\System=FK4")h(also)g(c)m
-(hanges)g(the)f(asso)s(ciated)h(equino)m(x)g(\(from)f(J2000.0)i(to)0
-1307 y(B1950.0\).)76 b(This)41 b(is)g(b)s(ecause)g(the)g(default)h(v)-5
-b(alue)42 b(of)f(the)g(SkyF)-8 b(rame's)42 b(Equino)m(x)f(attribute)h
-(\()p Fu(x)p FF(8.4\))h(de-)0 1420 y(p)s(ends)29 b(on)h(the)g(System)h
-(attribute)g(setting.)0 1582 y(Y)-8 b(ou)30 b(ma)m(y)g(c)m(hange)h(the)
-e(System)h(v)-5 b(alue)30 b(at)g(an)m(y)g(time,)g(although)g(this)g(is)
-f(not)h(usually)f(needed.)40 b(The)29 b(v)-5 b(alues)0
-1694 y(supp)s(orted)40 b(are)h(set)h(out)g(in)f(the)h(attribute's)g
-(description)f(in)g(App)s(endix)f(C)h(and)g(include)g(a)h(v)-5
-b(ariet)m(y)42 b(of)0 1807 y(equatorial)32 b(co)s(ordinate)f(systems,)g
-(together)h(with)e(ecliptic)i(and)e(galactic)j(co)s(ordinates.)0
-1969 y(General)43 b(spherical)g(co)s(ordinates)g(are)g(supp)s(orted)e
-(b)m(y)h(sp)s(ecifying)g(\\System=unkno)m(wn".)76 b(Y)-8
-b(ou)43 b(should)0 2082 y(note,)32 b(though,)g(that)g(no)f(Mapping)g
-(can)h(b)s(e)f(created)h(to)g(con)m(v)m(ert)h(b)s(et)m(w)m(een)f
-(\\unkno)m(wn")f(co)s(ordinates)h(and)0 2195 y(an)m(y)f(of)f(the)h
-(other)f(celestial)j(co)s(ordinate)f(systems)e(\(see)h
-Fu(x)p FF(12)h(\).)0 2487 y Fw(8.4)112 b(A)m(ttributes)37
-b(whic)m(h)g(Qualify)i(Celestial)g(Co)s(ordinate)f(Systems)0
-2707 y FF(Man)m(y)30 b(celestial)h(co)s(ordinate)f(systems)f(ha)m(v)m
-(e)i(some)e(additional)h(free)f(parameters)h(whic)m(h)e(serv)m(e)i(to)g
-(iden)m(tify)0 2820 y(a)f(particular)f(co)s(ordinate)h(system)g(from)f
-(amongst)h(a)f(broader)g(class)h(of)f(related)i(co)s(ordinate)f
-(systems.)40 b(F)-8 b(or)0 2933 y(example,)24 b(the)e(FK5)h
-(\(J2010.0\))h(system)e(is)g(distinguished)f(from)g(the)h(FK5)h
-(\(J2000.0\))h(system)e(b)m(y)g(a)g(di\013eren)m(t)0
-3046 y(equino)m(x|and)34 b(the)g(co)s(ordinates)g(of)g(a)h(\014xed)e
-(astronomical)i(source)f(w)m(ould)g(ha)m(v)m(e)h(di\013eren)m(t)f(v)-5
-b(alues)34 b(when)0 3159 y(expressed)c(in)g(these)h(t)m(w)m(o)g
-(systems.)0 3321 y(In)26 b(AST,)f(these)i(free)g(parameters)f(are)h
-(represen)m(ted)f(b)m(y)h(additional)g(SkyF)-8 b(rame)27
-b(attributes,)h(eac)m(h)f(of)g(whic)m(h)0 3434 y(has)j(a)g(default)g
-(appropriate)g(to)g(\()p Fx(i.e.)g FF(de\014ned)e(b)m(y\))i(the)g
-(setting)h(of)f(the)g(main)g(System)g(attribute.)41 b(Eac)m(h)30
-b(of)0 3547 y(these)c Fx(qualifying)i(attributes)e FF(ma)m(y)-8
-b(,)28 b(ho)m(w)m(ev)m(er,)g(b)s(e)d(assigned)h(an)f(explicit)i(v)-5
-b(alue)26 b(so)f(as)h(to)g(select)h(a)f(particular)0
-3660 y(co)s(ordinate)38 b(system.)62 b(Note,)41 b(it)d(is)f(usually)g
-(b)s(est)g(to)h(assign)g(explicit)h(v)-5 b(alues)37 b(whenev)m(er)h(p)s
-(ossible)f(rather)0 3772 y(than)28 b(relying)i(on)e(defaults.)40
-b(A)m(ttribute)30 b(should)e(only)h(b)s(e)f(left)h(at)g(their)g
-(default)g(v)-5 b(alue)29 b(if)g(y)m(ou)g(\\don't)g(care")0
-3885 y(what)e(v)-5 b(alue)27 b(is)g(used.)39 b(In)26
-b(certain)i(circumstances)g(\(particularly)-8 b(,)29
-b(when)d(aligning)i(t)m(w)m(o)g(F)-8 b(rames\),)29 b(a)e(default)0
-3998 y(v)-5 b(alue)37 b(for)g(an)g(attribute)h(ma)m(y)f(b)s(e)g
-(replaced)g(b)m(y)g(the)g(v)-5 b(alue)37 b(from)g(another)g(similar)g
-(F)-8 b(rame.)62 b(Suc)m(h)36 b(v)-5 b(alue)0 4111 y(replacemen)m(t)28
-b(can)e(b)s(e)g(prev)m(en)m(ted)h(b)m(y)f(assigning)h(an)f(explicit)h
-(v)-5 b(alue)27 b(to)g(the)g(attribute,)h(rather)e(than)g(simply)0
-4224 y(relying)31 b(on)f(the)h(default.)0 4386 y(The)f(main)g(SkyF)-8
-b(rame)31 b(attributes)g(whic)m(h)f(qualify)g(the)h(System)f(attribute)
-h(are:)227 4645 y FD(Ep)s(o)s(c)m(h)427 4757 y FF(This)i(attribute)h
-(is)g(inherited)f(from)g(the)h(F)-8 b(rame)34 b(class.)51
-b(It)34 b(giv)m(es)g(the)g(momen)m(t)g(in)f(time)427
-4870 y(when)27 b(the)h(co)s(ordinates)h(are)f(correct)h(for)e(the)h
-(astronomical)i(source)e(under)e(study)h(\(usu-)427 4983
-y(ally)32 b(the)e(date)h(of)g(observ)-5 b(ation\).)227
-5128 y FD(Equino)m(x)427 5241 y FF(This)39 b(v)-5 b(alue)40
-b(is)f(used)f(to)i(qualify)g(celestial)i(co)s(ordinate)e(systems)f
-(that)h(are)g(notionally)427 5354 y(based)27 b(on)g(the)g(Earth's)g
-(equator)h(and/or)f(the)h(ecliptic)h(\(the)e(plane)g(of)h(the)f
-(Earth's)g(orbit)427 5467 y(around)36 b(the)g(Sun\).)58
-b(The)36 b(p)s(osition)h(of)f(either)h(of)g(these)g(planes)f(is)h
-(di\016cult)f(to)i(sp)s(ecify)427 5580 y(precisely)-8
-b(,)30 b(so)e(in)g(practice)i(a)e(mo)s(del)g Fx(me)-5
-b(an)29 b FF(equator)g(and/or)f(ecliptic)i(are)e(used)g(instead.)427
-5693 y(These,)41 b(together)g(with)d(the)i(p)s(oin)m(t)f(on)f(the)h
-(sky)g(that)h(de\014nes)e(the)h(co)s(ordinate)h(origin)p
-eop end
-%%Page: 85 95
-TeXDict begin 85 94 bop 0 52 a Fy(8.5)92 b(Using)31 b(Default)g(SkyF)-8
-b(rame)31 b(A)m(ttributes)2067 b FF(85)427 351 y(\(termed)42
-b(the)g Fx(me)-5 b(an)45 b(e)-5 b(quinox)p FF(\))42 b(mo)m(v)m(e)h
-(with)f(time)g(according)h(to)g(some)f(mo)s(del)f(whic)m(h)427
-464 y(smo)s(othes)33 b(out)g(the)h(more)f(rapid)f(\015uctuations.)48
-b(The)33 b(SkyF)-8 b(rame)33 b(class)h(supp)s(orts)d(b)s(oth)427
-577 y(the)g(old)f(FK4)h(mo)s(del)f(and)g(the)h(new)m(er)f(FK5)h(one.)
-427 706 y(Co)s(ordinates)c(expressed)f(in)g(an)m(y)h(of)g(these)g
-(systems)f(v)-5 b(ary)27 b(with)f(time)h(due)f(to)h(mo)m(v)m(emen)m(t)
-427 819 y(\(b)m(y)33 b(de\014nition\))g(of)g(the)g(co)s(ordinate)g
-(system)g(itself,)h(and)f(m)m(ust)f(therefore)h(b)s(e)f(quali\014ed)427
-932 y(b)m(y)i(a)h(momen)m(t)g(in)e(time)i(\(the)g Fx(ep)-5
-b(o)g(ch)38 b(of)e(the)g(me)-5 b(an)37 b(e)-5 b(quinox,)36
-b FF(or)e(\\equino)m(x")h(for)f(short\))427 1045 y(whic)m(h)c(sp)s
-(eci\014es)f(the)g(p)s(osition)h(of)g(the)f(mo)s(del)h(co)s(ordinate)g
-(system)g(on)f(the)h(sky)-8 b(.)40 b(This)29 b(is)427
-1158 y(the)i(role)g(of)f(the)h(Equino)m(x)f(attribute.)427
-1287 y(Note)i(that)f(it)h(is)e(quite)h(v)-5 b(alid)31
-b(and)f(common)h(to)h(relate)g(the)f(p)s(osition)f(of)h(a)g(source)g
-(to)g(an)427 1400 y(equino)m(x)36 b(other)g(than)f(the)g(date)h(of)g
-(observ)-5 b(ation.)56 b(Usually)36 b(a)f(standard)g(equino)m(x)h(suc)m
-(h)427 1513 y(as)27 b(J2000.0)i(is)d(used,)h(meaning)g(that)g(the)g(co)
-s(ordinates)g(are)g(referred)f(to)h(axes)g(de\014ned)e(b)m(y)427
-1626 y(where)32 b(the)h(mo)s(del)f(mean)h(equator)g(and)f(ecliptic)i(w)
-m(ould)e(lie)h(on)g(the)f(sky)h(at)g(the)g(Julian)427
-1739 y(ep)s(o)s(c)m(h)d(J2000.0.)0 1999 y(F)-8 b(or)32
-b(further)d(details)j(of)f(these)h(attributes)f(y)m(ou)h(should)e
-(consult)h(their)g(descriptions)g(in)f(App)s(endix)g(C)g(and)0
-2112 y(for)g(details)i(of)e(the)h(System)f(settings)i(for)e(whic)m(h)g
-(they)h(are)g(relev)-5 b(an)m(t,)32 b(see)f(the)g(description)f(of)h
-(the)g(System)0 2225 y(attribute)41 b(\(also)h(in)f(App)s(endix)e(C\).)
-71 b(F)-8 b(or)41 b(the)g(in)m(terested)h(reader,)h(an)e(excellen)m(t)i
-(o)m(v)m(erview)f(of)f(celestial)0 2338 y(co)s(ordinate)31
-b(systems)g(can)f(also)i(b)s(e)d(found)g(in)h(the)h(do)s(cumen)m
-(tation)g(for)f(the)h(SLALIB)f(library)g(\(SUN/67\).)0
-2500 y(The)c(v)-5 b(alue)28 b(of)f(these)g(qualifying)g(attributes)h
-(is)f(most)g(con)m(v)m(enien)m(tly)i(set)f(at)f(the)h(same)f(time)g(as)
-h(the)f(System)0 2613 y(v)-5 b(alue,)31 b Fx(e.g.)f FF(when)f(a)i(SkyF)
--8 b(rame)31 b(is)f(created.)42 b(F)-8 b(or)31 b(instance:)227
-2860 y Ft(skyframe)41 b(=)i(astSkyFrame\()38 b("System=Ecliptic,)f
-(Equinox=J2005.5")g(\);)0 3120 y FF(w)m(ould)22 b(create)h(a)g(SkyF)-8
-b(rame)22 b(represen)m(ting)g(an)g(ecliptic)i(co)s(ordinate)f(system)f
-(referred)f(to)i(the)f(mean)g(equino)m(x)0 3233 y(and)30
-b(ecliptic)i(of)e(Julian)g(ep)s(o)s(c)m(h)h(J2005.5.)0
-3396 y(Note)38 b(that)f(it)h(do)s(es)e(no)h(harm)f(to)h(assign)g(v)-5
-b(alues)37 b(to)h(qualifying)f(attributes)g(whic)m(h)g(are)g(not)g
-(relev)-5 b(an)m(t)38 b(to)0 3509 y(the)28 b(main)g(System)g(v)-5
-b(alue.)41 b(An)m(y)28 b(suc)m(h)g(v)-5 b(alues)28 b(are)h(stored,)g
-(but)e(are)h(not)h(used)e(unless)h(the)g(System)g(v)-5
-b(alue)28 b(is)0 3621 y(later)j(set)g(so)g(that)g(they)f(b)s(ecome)h
-(relev)-5 b(an)m(t.)0 3914 y Fw(8.5)112 b(Using)38 b(Default)h(SkyF)-9
-b(rame)38 b(A)m(ttributes)0 4135 y FF(The)43 b(default)i(v)-5
-b(alues)44 b(supplied)f(for)g(man)m(y)h(SkyF)-8 b(rame)45
-b(attributes)f(will)g(dep)s(end)f(on)h(the)g(v)-5 b(alue)44
-b(of)g(the)0 4248 y(SkyF)-8 b(rame's)29 b(System)f(attribute.)41
-b(In)28 b(practice,)i(this)f(means)f(that)h(there)g(is)g(usually)f
-(little)i(need)f(to)g(sp)s(ecify)0 4361 y(man)m(y)44
-b(of)g(these)g(attributes)g(explicitly)h(unless)e(y)m(ou)h(ha)m(v)m(e)h
-(some)f(sp)s(ecial)g(requiremen)m(t.)81 b(This)43 b(can)h(b)s(e)0
-4474 y(illustrated)31 b(b)m(y)f(using)g(astSho)m(w)h(to)g(examine)g(a)g
-(SkyF)-8 b(rame,)31 b(as)f(follo)m(ws:)227 4721 y Ft(astShow\()41
-b(astSkyFrame\()d("System=FK4-NO-E,)f(Epoch=1958")i(\))k(\);)0
-4981 y FF(The)30 b(output)g(from)g(this)g(migh)m(t)h(lo)s(ok)g(lik)m(e)
-h(the)e(follo)m(wing:)275 5241 y Fq(Begin)46 b(SkyFrame)428
-b(#)47 b(Description)e(of)i(celestial)e(coordinate)g(system)227
-5354 y(#)143 b(Title)47 b(=)g("FK4)g(equatorial)e(coordinates;)f(no)j
-(E-terms;)f(mean)g(equinox)g(B1950.0;)227 5467 y(epoch)h(B1958.0")141
-b(#)47 b(Title)f(of)i(coordinate)d(system)418 5580 y(Naxes)i(=)g(2)143
-b(#)47 b(Number)f(of)i(coordinate)d(axes)227 5693 y(#)143
-b(Domain)46 b(=)i("SKY")285 b(#)47 b(Coordinate)e(system)h(domain)p
-eop end
-%%Page: 86 96
-TeXDict begin 86 95 bop 0 52 a FF(86)1229 b Fy(8)91 b(CELESTIAL)29
-b(COORDINA)-8 b(TE)29 b(SYSTEMS)g(\(SKYFRAMES\))418 351
-y Fq(Epoch)47 b(=)g(1958)381 b(#)47 b(Besselian)e(epoch)i(of)g
-(observation)227 464 y(#)143 b(Lbl1)47 b(=)g("Right)f(ascension")189
-b(#)47 b(Label)f(for)h(axis)g(1)227 577 y(#)143 b(Lbl2)47
-b(=)g("Declination")379 b(#)47 b(Label)f(for)h(axis)g(2)418
-690 y(System)f(=)i("FK4-NO-E")427 b(#)47 b(Coordinate)e(system)h(type)
-227 803 y(#)143 b(Uni1)47 b(=)g("hh:mm:ss.s")427 b(#)47
-b(Units)f(for)h(axis)g(1)227 916 y(#)143 b(Uni2)47 b(=)g("ddd:mm:ss")93
-b(#)47 b(Units)g(for)f(axis)h(2)227 1029 y(#)143 b(Dir1)47
-b(=)g(0)191 b(#)47 b(Plot)g(axis)g(1)g(in)g(reverse)f(direction)227
-1142 y(#)143 b(Bot2)47 b(=)g(-1.5707963267949)235 b(#)47
-b(Lowest)f(legal)g(axis)h(value)227 1255 y(#)143 b(Top2)47
-b(=)g(1.5707963267949)283 b(#)47 b(Highest)f(legal)g(axis)h(value)418
-1367 y(Ax1)g(=)334 b(#)47 b(Axis)g(number)f(1)561 1480
-y(Begin)h(SkyAxis)189 b(#)47 b(Celestial)e(coordinate)g(axis)561
-1593 y(End)i(SkyAxis)418 1706 y(Ax2)g(=)334 b(#)47 b(Axis)g(number)f(2)
-561 1819 y(Begin)h(SkyAxis)189 b(#)47 b(Celestial)e(coordinate)g(axis)
-561 1932 y(End)i(SkyAxis)275 2045 y(IsA)g(Frame)285 b(#)47
-b(Coordinate)e(system)h(description)227 2158 y(#)143
-b(Eqnox)47 b(=)g(1950)381 b(#)47 b(Besselian)e(epoch)i(of)g(mean)g
-(equinox)275 2271 y(End)g(SkyFrame)0 2502 y FF(Note)40
-b(that)f(the)g(defaults)g(\(indicated)h(b)m(y)e(the)h(\\)p
-Fq(#)p FF(")h(commen)m(t)f(c)m(haracter)i(at)e(the)g(start)g(of)g(the)g
-(line\))h(for)0 2615 y(attributes)32 b(suc)m(h)g(as)g(the)g(Title,)h
-(axis)f(Lab)s(els)g(and)f(F)-8 b(ormat)33 b(sp)s(eci\014ers)e(are)h
-(all)h(set)f(to)g(v)-5 b(alues)32 b(appropriate)0 2728
-y(for)e(the)h(particular)f(equatorial)i(co)s(ordinate)g(system)e(that)h
-(the)g(SkyF)-8 b(rame)30 b(represen)m(ts.)0 2883 y(This)c(means,)i(for)
-f(example,)i(that)e(if)h(w)m(e)f(w)m(ere)h(to)g(use)e(this)h(SkyF)-8
-b(rame)28 b(to)g(format)f(a)h(righ)m(t)f(ascension)h(v)-5
-b(alue)0 2996 y(stored)26 b(in)f(radians)g(using)g(astF)-8
-b(ormat)27 b(\()p Fu(x)p FF(7.6\),)i(it)d(w)m(ould)f(automatically)k
-(result)c(in)g(a)h(string)f(in)g(sexagesimal)0 3109 y(notation)33
-b(\(suc)m(h)e(as)g(\\12:14:35.7"\))37 b(suitable)32 b(for)f(displa)m(y)
--8 b(.)44 b(If)31 b(w)m(e)h(c)m(hanged)g(the)f(v)-5 b(alue)32
-b(of)f(the)h(SkyF)-8 b(rame's)0 3222 y(Digits)27 b(attribute)g(\(whic)m
-(h)f(is)g(inherited)f(from)h(the)g(F)-8 b(rame)26 b(class\),)i(the)e(n)
-m(um)m(b)s(er)f(of)h(digits)g(app)s(earing)g(w)m(ould)0
-3335 y(also)31 b(c)m(hange)h(accordingly)-8 b(.)0 3490
-y(These)24 b(c)m(hoices)i(w)m(ould)e(b)s(e)f(appropriate)i(for)f(a)g
-(System)g(v)-5 b(alue)25 b(of)f(\\FK4-NO-E",)j(but)c(if)h(a)h
-(di\013eren)m(t)g(System)0 3603 y(v)-5 b(alue)31 b(w)m(ere)g(set,)g
-(the)g(defaults)g(w)m(ould)f(b)s(e)g(corresp)s(ondingly)g(di\013eren)m
-(t.)42 b(F)-8 b(or)31 b(example,)h(ecliptic)g(longitude)0
-3716 y(is)39 b(traditionally)h(expressed)f(in)f(degrees,)k(so)d
-(setting)h(\\System=ecliptic")h(w)m(ould)d(result)h(in)g(co)s(ordinate)
-0 3829 y(v)-5 b(alues)31 b(b)s(eing)f(formatted)h(as)f(degrees)h(b)m(y)
-f(default.)0 3984 y(Of)35 b(course,)j(if)e(y)m(ou)h(do)f(not)g(lik)m(e)
-h(an)m(y)g(of)f(these)h(defaults,)g(y)m(ou)g(ma)m(y)f(alw)m(a)m(ys)i(o)
-m(v)m(er-ride)f(them)f(b)m(y)g(setting)0 4097 y(explicit)c(attribute)f
-(v)-5 b(alues)31 b(y)m(ourself.)0 4379 y Fw(8.6)112 b(F)-9
-b(ormatting)38 b(Celestial)g(Co)s(ordinates)0 4593 y
-FF(SkyF)-8 b(rames)39 b(use)f(astF)-8 b(ormat)41 b(for)d(formatting)h
-(co)s(ordinate)h(v)-5 b(alues)39 b(in)f(the)h(same)g(w)m(a)m(y)g(as)g
-(other)g(F)-8 b(rames)0 4705 y(\()p Fu(x)p FF(7.6\).)61
-b(Ho)m(w)m(ev)m(er,)40 b(they)d(o\013er)g(a)f(di\013eren)m(t)h(set)g
-(of)g(formatting)g(options)g(more)f(appropriate)h(to)g(celestial)0
-4818 y(co)s(ordinates.)0 4973 y(The)e(Digits)i(attribute)g(of)e(a)i
-(SkyF)-8 b(rame)36 b(b)s(eha)m(v)m(es)g(in)f(essen)m(tially)j(the)e
-(same)g(w)m(a)m(y)g(as)g(for)f(a)h(basic)h(F)-8 b(rame)0
-5086 y(\()p Fu(x)p FF(7.6\),)28 b(so)d(the)g(precision)f(with)h(whic)m
-(h)f(celestial)j(co)s(ordinates)e(are)g(displa)m(y)m(ed)g(can)g(also)h
-(b)s(e)e(adjusted)f(in)i(this)0 5199 y(w)m(a)m(y)-8 b(.)50
-b(Ho)m(w)m(ev)m(er,)35 b(the)e(range)h(of)f(format)g(sp)s(eci\014ers)f
-(that)h(can)g(b)s(e)g(giv)m(en)g(for)g(the)g(F)-8 b(ormat\(axis\))35
-b(attribute,)0 5312 y(and)30 b(the)g(default)h(format)g(resulting)f
-(from)g(an)m(y)h(particular)f(Digits)i(v)-5 b(alue,)31
-b(is)g(di\013eren)m(t.)0 5467 y(The)f(syn)m(tax)h(of)f(SkyF)-8
-b(rame)31 b(format)g(sp)s(eci\014ers)e(is)i(detailed)g(under)e(the)h
-(description)h(of)f(the)h(F)-8 b(ormat\(axis\))0 5580
-y(attribute)31 b(in)f(App)s(endix)e(C.)40 b(Brie\015y)-8
-b(,)31 b(ho)m(w)m(ev)m(er,)h(it)e(allo)m(ws)i(celestial)g(co)s
-(ordinates)f(to)g(b)s(e)e(expressed)h(either)0 5693 y(as)h(angles)g(or)
-f(times)h(and)f(to)h(include)f(one)h(or)f(more)h(of)f(the)h(\014elds:)p
-eop end
-%%Page: 87 97
-TeXDict begin 87 96 bop 0 52 a Fy(8.6)92 b(F)-8 b(ormatting)32
-b(Celestial)h(Co)s(ordinates)2158 b FF(87)336 351 y Fu(\017)46
-b FF(degrees)31 b(or)g(hours)336 500 y Fu(\017)46 b FF(arc-min)m(utes)
-31 b(or)g(min)m(utes)336 649 y Fu(\017)46 b FF(arc-seconds)31
-b(or)g(seconds)0 920 y(with)h(a)h(sp)s(eci\014ed)e(n)m(um)m(b)s(er)h
-(of)g(decimal)h(places)h(for)e(the)g(\014nal)g(\014eld.)47
-b(A)32 b(range)h(of)f(\014eld)g(separators)h(is)g(also)0
-1033 y(a)m(v)-5 b(ailable,)33 b(as)e(the)f(follo)m(wing)i(examples)f
-(sho)m(w:)p 811 1221 2158 4 v 809 1334 4 113 v 861 1300
-a FD(F)-9 b(ormat)35 b(Sp)s(eci\014er)p 1667 1334 V 100
-w(Example)g(F)-9 b(ormatted)34 b(V)-9 b(alue)p 2967 1334
-V 811 1337 2158 4 v 811 1354 V 809 1467 4 113 v 861 1433
-a Fq(d)p 1667 1467 V 809 w(219)p 2967 1467 V 809 1579
-V 861 1546 a(d.3)p 1667 1579 V 713 w(219.123)p 2967 1579
-V 809 1692 V 861 1659 a(dm)p 1667 1692 V 761 w(219:05)p
-2967 1692 V 809 1805 V 861 1771 a(dm.2)p 1667 1805 V
-665 w(219:05.44)p 2967 1805 V 809 1918 V 861 1884 a(dms)p
-1667 1918 V 713 w(219:05:42)p 2967 1918 V 809 2031 V
-861 1997 a(hms.1)p 1667 2031 V 617 w(15:44:13.8)p 2967
-2031 V 809 2144 V 861 2110 a(bdms.2)p 1667 2144 V 569
-w(219)47 b(05)g(42.81)p 2967 2144 V 809 2257 V 861 2223
-a(lhms.3)p 1667 2257 V 569 w(15h44m13.88s)p 2967 2257
-V 809 2370 V 861 2336 a(+zlhms)p 1667 2370 V 569 w(+06h10m44s)p
-2967 2370 V 809 2483 V 861 2449 a(ms.1)p 1667 2483 V
-665 w(13145:42.8)p 2967 2483 V 809 2596 V 861 2562 a(lmst.3)p
-1667 2596 V 569 w(876m22.854s)p 2967 2596 V 809 2709
-V 861 2675 a(s.2)p 1667 2709 V 713 w(788742.81)p 2967
-2709 V 811 2712 2158 4 v 0 2942 a FF(Note)32 b(the)e(follo)m(wing)i(k)m
-(ey)f(p)s(oin)m(ts:)136 3213 y Fu(\017)46 b FF(The)f(required)f
-(\014elds)g(are)i(sp)s(eci\014ed)e(using)h(c)m(haracters)h(c)m(hosen)g
-(from)e(either)i(\\dms")f(or)f(\\hms")227 3326 y(according)36
-b(to)f(whether)e(the)i(v)-5 b(alue)35 b(is)f(to)h(b)s(e)f(formatted)h
-(as)f(an)g(angle)i(\(in)e(degrees\))h(or)g(a)f(time)h(\(in)227
-3438 y(hours\).)136 3632 y Fu(\017)46 b FF(If)38 b(no)g(degrees)g(or)g
-(hours)f(\014eld)h(is)g(required,)i(the)e(distinction)g(b)s(et)m(w)m
-(een)h(angle)g(and)f(time)g(ma)m(y)h(b)s(e)227 3745 y(made)31
-b(b)m(y)f(including)g(\\t")h(to)h(request)e(time.)136
-3938 y Fu(\017)46 b FF(The)35 b(n)m(um)m(b)s(er)g(of)g(decimal)i
-(places)f(\(for)g(the)g(\014nal)f(\014eld\))g(is)h(indicated)g(using)f
-(\\)p Fq(.)p FF(")57 b(follo)m(w)m(ed)37 b(b)m(y)f(an)227
-4051 y(in)m(teger.)k(An)23 b(asterisk)i(can)e(b)s(e)g(used)g(in)g
-(place)i(of)f(an)f(in)m(teger,)k(in)c(whic)m(h)g(case)i(the)f(n)m(um)m
-(b)s(er)e(of)h(decimal)227 4164 y(places)34 b(is)g(c)m(hosen)f(so)h
-(that)g(the)f(total)i(n)m(um)m(b)s(er)d(of)h(digits)h(in)f(the)h
-(formatted)g(v)-5 b(alue)33 b(is)h(equal)f(to)h(the)227
-4277 y(v)-5 b(alue)31 b(of)g(the)f(Digits)i(attribute.)136
-4470 y Fu(\017)46 b FF(\\b")31 b(causes)f(\014elds)g(to)g(b)s(e)g
-(separated)g(b)m(y)g(blanks,)g(while)g(\\l")h(causes)g(them)f(to)g(b)s
-(e)g(separated)g(b)m(y)g(the)227 4583 y(appropriate)h(letters)g(\(the)g
-(default)g(b)s(eing)f(a)g(colon\).)136 4777 y Fu(\017)46
-b FF(\\z")32 b(causes)f(padding)e(with)h(leading)h(zeros.)136
-4970 y Fu(\017)46 b FF(\\+")41 b(cause)g(a)g(plus)f(sign)g(to)i(b)s(e)d
-(pre\014xed)h(to)h(p)s(ositiv)m(e)h(v)-5 b(alues)40 b(\(negativ)m(e)j
-(v)-5 b(alues)41 b(alw)m(a)m(ys)h(ha)m(v)m(e)g(a)227
-5083 y(min)m(us)30 b(sign\).)0 5354 y(The)42 b(formatting)i(p)s
-(erformed)d(b)m(y)h(a)h(SkyF)-8 b(rame)43 b(is)f(also)i(in\015uenced)d
-(b)m(y)i(the)g(AsTime\(axis\))g(attribute,)0 5467 y(whic)m(h)31
-b(has)f(a)h(b)s(o)s(olean)g(\(in)m(teger\))i(v)-5 b(alue)32
-b(for)e(eac)m(h)i(SkyF)-8 b(rame)32 b(axis.)42 b(It)31
-b(determines)g(whether)f(the)h(default)0 5580 y(format)d(sp)s
-(eci\014er)g(for)f(an)h(axis)g(will)h(presen)m(t)f(v)-5
-b(alues)28 b(as)g(angles)h(\()p Fx(e.g.)f FF(in)f(degrees\))i(if)f(it)g
-(is)g(zero,)i(or)e(as)g(times)0 5693 y(\()p Fx(e.g.)i
-FF(in)g(hours\))g(if)g(it)h(is)f(non-zero.)p eop end
-%%Page: 88 98
-TeXDict begin 88 97 bop 0 52 a FF(88)1229 b Fy(8)91 b(CELESTIAL)29
-b(COORDINA)-8 b(TE)29 b(SYSTEMS)g(\(SKYFRAMES\))0 351
-y FF(The)44 b(default)h(AsTime)g(v)-5 b(alue)45 b(dep)s(ends)e(on)h
-(the)h(celestial)i(co)s(ordinate)f(system)f(whic)m(h)f(the)h(SkyF)-8
-b(rame)0 464 y(represen)m(ts)45 b(whic)m(h,)k(in)44 b(turn,)k(dep)s
-(ends)43 b(on)i(its)h(System)e(attribute)i(v)-5 b(alue.)85
-b(F)-8 b(or)46 b(example,)k(equatorial)0 577 y(longitude)34
-b(v)-5 b(alues)34 b(\(righ)m(t)h(ascension\))f(are)g(normally)g
-(expressed)f(in)h(hours,)f(whereas)h(ecliptic)h(longitudes)0
-690 y(are)c(normally)f(expressed)g(in)g(degrees,)h(so)g(their)f
-(default)h(AsTime)f(v)-5 b(alues)31 b(will)g(re\015ect)g(this)f
-(di\013erence.)0 847 y(The)h(v)-5 b(alue)32 b(of)g(the)g(AsTime)f
-(attribute)i(ma)m(y)f(b)s(e)f(set)h(explicitly)h(to)g(o)m(v)m(er-ride)g
-(these)f(defaults)f(if)h(required,)0 960 y(with)e(the)g(formatting)h
-(precision)g(b)s(eing)f(determined)g(b)m(y)g(the)g
-(Digits/Digits\(axis\))35 b(v)-5 b(alue.)41 b(Alternativ)m(ely)-8
-b(,)0 1073 y(the)37 b(F)-8 b(ormat\(axis\))40 b(attribute)e(ma)m(y)g(b)
-s(e)e(set)i(explicitly)h(to)f(sp)s(ecify)f(b)s(oth)f(the)i(format)f
-(and)g(precision)g(re-)0 1186 y(quired.)63 b(Setting)39
-b(an)f(explicit)i(F)-8 b(ormat)39 b(v)-5 b(alue)39 b(alw)m(a)m(ys)h(o)m
-(v)m(er-rides)f(the)g(e\013ects)g(of)f(b)s(oth)g(the)g(Digits)i(and)0
-1299 y(AsTime)d(attributes)g(\(unless)g(the)g(F)-8 b(ormat)38
-b(v)-5 b(alue)38 b(do)s(es)e(not)h(sp)s(ecify)g(the)g(required)f(n)m
-(um)m(b)s(er)f(of)i(decimal)0 1412 y(places,)31 b(in)f(whic)m(h)h(case)
-g(Digits)h(is)e(used)g(to)h(determine)g(the)f(default)h(n)m(um)m(b)s
-(er)e(of)h(decimal)i(places\))0 1697 y Fw(8.7)112 b(Reading)39
-b(F)-9 b(ormatted)37 b(Celestial)i(Co)s(ordinates)0 1913
-y FF(The)f(pro)s(cess)g(of)g(con)m(v)m(erting)j(formatted)d(celestial)j
-(co)s(ordinates,)h(suc)m(h)c(as)g(migh)m(t)i(b)s(e)d(pro)s(duced)g(b)m
-(y)h(the)0 2026 y(astF)-8 b(ormat)47 b(function)d(\()p
-Fu(x)p FF(8.6\),)51 b(in)m(to)46 b(n)m(umerical)f(\(double\))g(co)s
-(ordinate)g(v)-5 b(alues)45 b(is)g(p)s(erformed)e(b)m(y)i(using)0
-2139 y(astUnformat)29 b(\()p Fu(x)p FF(7.8\))i(and)d(passing)h(it)g(a)g
-(p)s(oin)m(ter)f(to)i(a)f(SkyF)-8 b(rame.)40 b(The)28
-b(use)h(of)f(a)h(SkyF)-8 b(rame)29 b(means)g(that)0 2252
-y(the)k(range)h(of)f(input)f(formats)i(accepted)g(is)f(appropriate)g
-(to)h(p)s(ositions)f(on)g(the)h(sky)f(expressed)f(as)i(angles)0
-2365 y(and/or)c(times,)h(while)g(the)f(returned)g(v)-5
-b(alue)30 b(is)h(in)f(radians.)0 2523 y(The)g(follo)m(wing)i(describ)s
-(es)d(the)i(forms)f(of)g(celestial)j(co)s(ordinate)e(whic)m(h)f(are)h
-(supp)s(orted:)136 2764 y Fu(\017)46 b FF(Y)-8 b(ou)36
-b(ma)m(y)g(supply)e(an)h(optional)h(sign,)h(follo)m(w)m(ed)g(b)m(y)e(b)
-s(et)m(w)m(een)h(one)f(and)g(three)g(\014elds)g(represen)m(ting)227
-2877 y(either)c(degrees,)g(arc-min)m(utes,)h(arc-seconds)f(or)f(hours,)
-g(min)m(utes,)g(seconds)h(\()p Fx(e.g.)f FF(\\)p Fu(\000)p
-FF(12)h(42)g(03"\).)136 3059 y Fu(\017)46 b FF(Eac)m(h)35
-b(\014eld)e(should)g(consist)h(of)g(a)g(sequence)g(of)g(one)g(or)f
-(more)h(digits,)i(whic)m(h)d(ma)m(y)h(include)g(leading)227
-3172 y(zeros.)46 b(A)m(t)33 b(most)g(one)f(\014eld)g(ma)m(y)g(con)m
-(tain)h(a)g(decimal)g(p)s(oin)m(t,)f(in)g(whic)m(h)g(case)h(it)f(is)g
-(tak)m(en)h(to)g(b)s(e)e(the)227 3285 y(\014nal)37 b(\014eld)f(\()p
-Fx(e.g.)g FF(decimal)i(degrees)f(migh)m(t)g(b)s(e)f(giv)m(en)i(as)e
-(\\124.707",)43 b(while)36 b(degrees)h(and)f(decimal)227
-3398 y(arc-min)m(utes)31 b(migh)m(t)h(b)s(e)d(giv)m(en)j(as)e(\\)p
-Fu(\000)p FF(13)i(33.8"\).)136 3580 y Fu(\017)46 b FF(The)23
-b(\014rst)g(\014eld)g(giv)m(en)h(ma)m(y)g(tak)m(e)h(an)m(y)f(v)-5
-b(alue,)25 b(allo)m(wing)g(angles)g(and)d(times)i(outside)g(the)g(con)m
-(v)m(en)m(tional)227 3693 y(ranges)i(to)h(b)s(e)e(represen)m(ted.)39
-b(Ho)m(w)m(ev)m(er,)29 b(subsequen)m(t)c(\014elds)h(m)m(ust)f(ha)m(v)m
-(e)i(v)-5 b(alues)26 b(of)g(less)h(than)e(60)i(\()p Fx(e.g.)227
-3806 y FF(\\720)32 b(45)g(31")f(is)g(v)-5 b(alid,)31
-b(whereas)f(\\11)h(45)h(61")f(is)g(not\).)136 3988 y
-Fu(\017)46 b FF(Fields)26 b(ma)m(y)g(b)s(e)e(separated)h(b)m(y)g(white)
-h(space)f(or)g(b)m(y)g(\\:")39 b(\(colon\),)28 b(but)d(the)g(c)m(hoice)
-i(of)e(separator)h(m)m(ust)227 4101 y(b)s(e)h(used)g(consisten)m(tly)h
-(throughout)f(the)h(v)-5 b(alue.)40 b(Additional)28 b(white)g(space)f
-(ma)m(y)h(b)s(e)f(presen)m(t)g(around)227 4214 y(\014elds)j(and)g
-(separators)h(\()p Fx(e.g.)f FF(\\)p Fu(\000)g FF(2:)h(04)g(:)g
-(7.1"\).)136 4396 y Fu(\017)46 b FF(The)39 b(follo)m(wing)h(\014eld)e
-(iden)m(ti\014cation)j(c)m(haracters)f(ma)m(y)f(b)s(e)f(used)g(as)h
-(separators)h(to)f(replace)h(those)227 4509 y(ab)s(o)m(v)m(e)32
-b(\(or)f(ma)m(y)g(b)s(e)f(app)s(ended)f(to)i(the)g(\014nal)f
-(\014eld\),)h(in)f(order)g(to)i(iden)m(tify)f(the)f(\014eld)h(to)g
-(whic)m(h)f(they)227 4622 y(are)h(app)s(ended:)477 4819
-y(d)124 b({)101 b(degrees)477 4932 y(h)124 b({)101 b(hours)477
-5044 y(m)e({)i(min)m(utes)30 b(\(of)h(arc)g(or)f(time\))477
-5157 y(s)139 b({)101 b(seconds)30 b(\(of)h(arc)g(or)f(time\))477
-5270 y Fq(')127 b FF({)101 b(arc-min)m(utes)477 5383
-y Fq(")127 b FF({)101 b(arc-seconds)227 5580 y(Either)42
-b(lo)m(w)m(er)h(or)f(upp)s(er)e(case)j(ma)m(y)g(b)s(e)e(used.)75
-b(Fields)42 b(m)m(ust)g(b)s(e)f(giv)m(en)i(in)f(order)g(of)g
-(decreasing)227 5693 y(signi\014cance)32 b(\()p Fx(e.g.)e
-FF(\\)p Fu(\000)p FF(11D)h(3)p Fq(')g FF(14.4)p Fq(")p
-FF(")h(or)e(\\22h14m11.2s"\).)p eop end
-%%Page: 89 99
-TeXDict begin 89 98 bop 0 52 a Fy(8.7)92 b(Reading)31
-b(F)-8 b(ormatted)32 b(Celestial)g(Co)s(ordinates)1834
-b FF(89)136 351 y Fu(\017)46 b FF(The)30 b(presence)h(of)f(certain)i
-(\014eld)e(iden)m(ti\014cation)i(c)m(haracters)g(indicates)f(whether)f
-(the)g(v)-5 b(alue)31 b(is)g(to)g(b)s(e)227 464 y(in)m(terpreted)d(as)g
-(an)f(angle)h(or)g(a)g(time)g(\(with)f(24)i(hours)d(corresp)s(onding)g
-(to)i(360)h(degrees\),)g(as)f(follo)m(ws:)477 679 y(d)99
-b({)h(angle)477 792 y Fq(')i FF({)e(angle)477 905 y Fq(")i
-FF({)e(angle)477 1018 y(h)f({)h(time)227 1233 y(Incompatible)36
-b(angle/time)i(iden)m(ti\014cation)f(c)m(haracters)g(ma)m(y)f(not)g(b)s
-(e)e(mixed)i(\()p Fx(e.g.)f FF(\\10h14)p Fq(')p FF(3)p
-Fq(")p FF(")i(is)227 1346 y(not)e(v)-5 b(alid\).)56 b(The)34
-b(remaining)h(\014eld)g(iden)m(ti\014cation)h(c)m(haracters)h(and)d
-(separators)h(do)g(not)g(sp)s(ecify)g(a)227 1459 y(preference)c(for)f
-(an)g(angle)h(or)g(a)f(time)i(and)d(ma)m(y)i(b)s(e)f(used)g(with)g
-(either.)136 1651 y Fu(\017)46 b FF(If)38 b(no)h(preference)g(for)f(an)
-h(angle)g(or)g(a)g(time)h(is)e(expressed)g(an)m(ywhere)h(within)f(the)h
-(v)-5 b(alue,)42 b(then)c(it)227 1764 y(is)i(in)m(terpreted)g(as)h(an)e
-(angle)i(if)f(the)g(F)-8 b(ormat)42 b(attribute)e(string)g(asso)s
-(ciated)h(with)f(the)g(SkyF)-8 b(rame)227 1877 y(axis)38
-b(generates)g(an)f(angle)h(and)e(as)h(a)h(time)f(otherwise.)61
-b(This)36 b(ensures)g(that)i(v)-5 b(alues)37 b(pro)s(duced)f(b)m(y)227
-1990 y(astF)-8 b(ormat)33 b(\()p Fu(x)p FF(8.6\))f(are)f(correctly)h
-(in)m(terpreted)e(b)m(y)h(astUnformat.)136 2181 y Fu(\017)46
-b FF(Fields)c(ma)m(y)h(b)s(e)e(omitted,)k(in)d(whic)m(h)f(case)i(they)e
-(default)h(to)h(zero.)75 b(The)41 b(remaining)h(\014elds)f(ma)m(y)227
-2294 y(b)s(e)g(iden)m(ti\014ed)h(b)m(y)g(using)f(appropriate)h(\014eld)
-f(iden)m(ti\014cation)j(c)m(haracters)f(\(see)g(ab)s(o)m(v)m(e\))g
-(and/or)f(b)m(y)227 2407 y(adding)36 b(extra)g(colon)h(separators)g
-(\(e.g.)59 b(\\)p Fu(\000)p FF(05m13s")37 b(is)f(equiv)-5
-b(alen)m(t)38 b(to)f(\\)p Fu(\000)p FF(:05:13"\).)60
-b(If)36 b(a)g(\014eld)f(is)227 2520 y(not)j(iden)m(ti\014ed)f
-(explicitly)-8 b(,)41 b(it)c(is)g(assumed)g(that)g(adjacen)m(t)i
-(\014elds)d(ha)m(v)m(e)j(b)s(een)d(giv)m(en,)k(after)e(taking)227
-2633 y(accoun)m(t)32 b(of)f(an)m(y)f(extra)h(separator)g(c)m
-(haracters.)43 b(F)-8 b(or)31 b(example:)477 2843 y(10d)242
-b({)100 b(degrees)477 2956 y(10d12)152 b({)100 b(degrees)31
-b(and)e(arc-min)m(utes)477 3069 y(11:14)p Fq(")130 b
-FF({)100 b(arc-min)m(utes)31 b(and)f(arc-seconds)477
-3182 y(9h13s)161 b({)100 b(hours)29 b(and)h(seconds)g(of)g(time)477
-3295 y(:45:33)153 b({)100 b(min)m(utes)30 b(and)g(seconds)g(\(of)h(arc)
-g(or)f(time\))477 3408 y(:55:)243 b({)100 b(min)m(utes)30
-b(\(of)h(arc)g(or)f(time\))477 3520 y(::13)243 b({)100
-b(seconds)30 b(\(of)h(arc)g(or)f(time\))477 3633 y Fu(\000)p
-FF(6::2.5)102 b({)e(degrees/hours)30 b(and)g(seconds)g(\(of)h(arc)g(or)
-f(time\))477 3746 y(07m14)127 b({)100 b(min)m(utes)30
-b(and)g(seconds)g(\(of)h(arc)g(or)f(time\))477 3859 y
-Fu(\000)p FF(8:14)p Fq(')104 b FF({)c(degrees)31 b(and)e(arc-min)m
-(utes)477 3972 y Fu(\000)p FF(h3:14)101 b({)f(min)m(utes)30
-b(and)g(seconds)g(of)h(time)477 4085 y(h:2.1)192 b({)100
-b(seconds)30 b(of)g(time)136 4295 y Fu(\017)46 b FF(If)32
-b(\014elds)g(are)h(omitted)g(in)f(suc)m(h)g(a)h(w)m(a)m(y)g(that)g(the)
-g(remaining)f(ones)h(cannot)g(b)s(e)f(iden)m(ti\014ed)g(uniquely)227
-4408 y(\(e.g.)56 b(\\01:02"\),)39 b(then)c(the)g(\014rst)f(\014eld)h
-(\(either)h(giv)m(en)f(explicitly)i(or)e(implied)g(b)m(y)f(an)h(extra)h
-(leading)227 4521 y(colon)i(separator\))g(is)f(tak)m(en)g(to)h(b)s(e)e
-(the)h(most)g(signi\014can)m(t)h(\014eld)e(that)h(astF)-8
-b(ormat)39 b(w)m(ould)e(pro)s(duce)227 4634 y(when)28
-b(formatting)i(a)f(v)-5 b(alue)29 b(\(using)g(the)g(F)-8
-b(ormat)30 b(attribute)f(asso)s(ciated)i(with)d(the)h(SkyF)-8
-b(rame)29 b(axis\).)227 4747 y(By)f(default,)g(this)g(means)f(that)h
-(the)f(\014rst)g(\014eld)g(will)h(normally)f(b)s(e)g(in)m(terpreted)g
-(as)h(degrees)g(or)f(hours.)227 4860 y(Ho)m(w)m(ev)m(er,)32
-b(if)d(this)h(do)s(es)e(not)i(result)f(in)g(consisten)m(t)i(\014eld)e
-(iden)m(ti\014cation,)i(then)e(the)h(last)g(\014eld)f(\(either)227
-4973 y(giv)m(en)i(explicitly)g(or)e(implied)g(b)m(y)g(an)h(extra)g
-(trailing)g(colon)h(separator\))f(is)f(tak)m(en)i(to)f(to)g(b)s(e)f
-(the)g(least)227 5086 y(signi\014can)m(t)j(\014eld)e(that)h(astF)-8
-b(ormat)32 b(w)m(ould)e(pro)s(duce.)0 5354 y(This)k(\014nal)g(con)m(v)m
-(en)m(tion)j(is)e(in)m(tended)f(to)h(ensure)f(that)h(v)-5
-b(alues)35 b(formatted)h(b)m(y)e(astF)-8 b(ormat)37 b(whic)m(h)d(con)m
-(tain)0 5467 y(less)f(than)g(three)g(\014elds)f(will)h(b)s(e)g
-(correctly)h(in)m(terpreted)f(if)g(read)g(bac)m(k)g(using)f
-(astUnformat,)j(ev)m(en)e(if)g(they)0 5580 y(do)42 b(not)h(con)m(tain)h
-(\014eld)e(iden)m(ti\014cation)h(c)m(haracters.)79 b(Ho)m(w)m(ev)m(er,)
-47 b(it)c(also)g(a\013ects)h(other)f(forms)f(of)g(input.)0
-5693 y(F)-8 b(or)34 b(example,)h(if)f(the)f(F)-8 b(ormat\(axis\))36
-b(string)d(w)m(ere)h(set)g(to)g(\\mst.1")h(\(pro)s(ducing)e(t)m(w)m(o)h
-(\014elds)f(represen)m(ting)p eop end
-%%Page: 90 100
-TeXDict begin 90 99 bop 0 52 a FF(90)1229 b Fy(8)91 b(CELESTIAL)29
-b(COORDINA)-8 b(TE)29 b(SYSTEMS)g(\(SKYFRAMES\))0 351
-y FF(min)m(utes)38 b(and)e(seconds)i(of)f(time\),)k(then)c(formatted)h
-(input)f(w)m(ould)g(b)s(e)g(in)m(terpreted)h(b)m(y)f(astUnformat)h(as)0
-464 y(follo)m(ws:)277 691 y(12)31 b(13)123 b({)100 b(min)m(utes)31
-b(and)f(seconds)277 804 y(12)244 b({)100 b(min)m(utes)277
-917 y(:13)219 b({)100 b(seconds)277 1030 y Fu(\000)p
-FF(18:)148 b({)100 b(min)m(utes)277 1142 y(12.8)174 b({)100
-b(min)m(utes)277 1255 y(1)31 b(2)g(3)137 b({)100 b(hours,)30
-b(min)m(utes)g(and)g(seconds)277 1481 y(4)p Fq(')241
-b FF({)100 b(arc-min)m(utes)277 1594 y(60::)p Fq(")146
-b FF({)100 b(degrees)277 1707 y Fu(\000)p FF(23:)p Fq(")g
-FF({)g(arc-min)m(utes)277 1820 y Fu(\000)p FF(33h)122
-b({)100 b(hours)0 2070 y(\(in)36 b(the)h(last)g(four)f(cases,)i
-(explicit)g(\014eld)e(iden)m(ti\014cation)i(has)e(b)s(een)f(giv)m(en)j
-(whic)m(h)e(o)m(v)m(errides)h(the)f(implicit)0 2183 y(iden)m
-(ti\014cation\).)0 2343 y(Alternativ)m(ely)-8 b(,)32
-b(if)d(the)g(F)-8 b(ormat\(axis\))32 b(string)c(w)m(ere)i(set)f(to)h
-(\\s.3")g(\(pro)s(ducing)e(only)h(an)g(arc-seconds)g(\014eld\),)0
-2456 y(then)h(formatted)h(input)e(w)m(ould)i(b)s(e)e(in)m(terpreted)i
-(b)m(y)f(astUnformat)h(as)g(follo)m(ws:)277 2700 y(12.8)152
-b({)100 b(arc-seconds)277 2813 y(12)31 b(13)101 b({)f(arc-min)m(utes)31
-b(and)f(arc-seconds)277 2926 y(:12)197 b({)100 b(arc-seconds)277
-3039 y(13:)197 b({)100 b(arc-min)m(utes)277 3152 y(1)31
-b(2)g(3)115 b({)100 b(degrees,)31 b(arc-min)m(utes)g(and)f(arc-seconds)
-0 3396 y(In)h(general,)i(if)f(y)m(ou)g(are)g(preparing)e(formatted)j
-(input)d(data)j(con)m(taining)g(celestial)h(co)s(ordinates)e(and)f
-(wish)0 3509 y(to)26 b(omit)g(certain)g(\014elds,)g(then)f(y)m(ou)h
-(are)g(advised)f(to)h(iden)m(tify)g(clearly)h(those)e(that)h(y)m(ou)g
-(do)f(pro)m(vide)h(b)m(y)f(using)0 3622 y(the)30 b(appropriate)g
-(\014eld)g(iden)m(ti\014cation)i(c)m(haracters)f(and/or)f(extra)h
-(colon)g(separators.)41 b(This)30 b(prev)m(en)m(ts)g(y)m(ou)0
-3735 y(dep)s(ending)38 b(on)i(the)g(implicit)h(\014eld)f(iden)m
-(ti\014cation)h(describ)s(ed)e(ab)s(o)m(v)m(e)i(whic)m(h,)i(in)c(turn,)
-j(dep)s(ends)c(on)i(an)0 3848 y(appropriate)30 b(F)-8
-b(ormat\(axis\))33 b(string)e(ha)m(ving)g(b)s(een)e(set.)0
-4008 y(When)j(writing)f(soft)m(w)m(are,)j(it)e(is)g(also)h(a)f(go)s(o)s
-(d)g(idea)g(to)g(set)h(the)f(F)-8 b(ormat\(axis\))34
-b(string)e(so)g(that)g(data)g(input)0 4121 y(will)37
-b(b)s(e)e(as)i(simple)f(as)h(p)s(ossible)e(for)h(the)h(user.)58
-b(Unless)36 b(some)h(sp)s(ecial)f(e\013ect)i(is)f(desired,)g(this)f
-(normally)0 4234 y(means)28 b(that)h(it)f(should)f(con)m(tain)i(\\d")g
-(or)f(\\h")g(to)h(ensure)e(that)i(the)f(\014rst)f(\014eld)h(en)m(tered)
-g(b)m(y)g(the)g(user)g(will)g(b)s(e)0 4347 y(in)m(terpreted)g(as)g
-(degrees)g(or)g(hours,)f(unless)g(otherwise)h(iden)m(ti\014ed.)40
-b(This)27 b(is)g(the)h(normal)g(b)s(eha)m(viour)f(unless)0
-4460 y(an)j(explicit)i(F)-8 b(ormat\(axis\))33 b(v)-5
-b(alue)31 b(has)f(b)s(een)g(set)g(to)i(o)m(v)m(erride)f(the)g(default.)
-0 4749 y Fw(8.8)112 b(Represen)m(ting)38 b(O\013sets)g(from)g(a)g(Sp)s
-(eci\014ed)h(Sky)f(P)m(osition)0 4968 y FF(A)e(SkyF)-8
-b(rame)37 b(can)f(b)s(e)f(mo)s(di\014ed)g(so)i(that)f(its)h(longitude)f
-(and)g(latitude)h(axes)g(are)f(referred)f(to)i(an)f(origin)0
-5081 y(at)c(an)m(y)g(sp)s(eci\014ed)e(sky)i(p)s(osition.)43
-b(Suc)m(h)31 b(a)h(co)s(ordinate)g(system)f(is)h(referred)e(to)i(as)g
-(an)f(\\o\013set")j(co)s(ordinate)0 5194 y(sy)m(etem.)54
-b(First,)36 b(the)e(System)g(attribute)h(should)f(b)s(e)f(set)i(to)g
-(represen)m(t)g(the)f(celestial)j(co)s(ordinate)e(system)0
-5307 y(in)40 b(whic)m(h)g(the)g(origin)h(is)f(to)h(b)s(e)f(sp)s
-(eci\014ed.)69 b(Then)40 b(the)g(SkyRef)g(attribute)h(should)e(b)s(e)h
-(set)g(to)h(hold)f(the)0 5420 y(co)s(ordinates)31 b(of)g(the)f(origin)h
-(within)f(the)g(selected)i(celestial)h(co)s(ordinate)e(system.)0
-5580 y(By)21 b(default,)i(\\north")f(in)e(the)h(new)g(o\013set)h(co)s
-(ordinate)f(system)g(is)g(parallel)h(to)g(north)e(in)h(the)g(original)h
-(celestial)0 5693 y(co)s(ordinate)38 b(system.)60 b(Ho)m(w)m(ev)m(er,)
-40 b(the)d(direction)h(of)f(north)f(in)g(the)h(o\013set)h(system)f(can)
-g(b)s(e)f(con)m(trolled)j(b)m(y)p eop end
-%%Page: 91 101
-TeXDict begin 91 100 bop 0 52 a Fy(8.8)92 b(Represen)m(ting)31
-b(O\013sets)g(from)e(a)i(Sp)s(eci\014ed)f(Sky)f(P)m(osition)1466
-b FF(91)0 351 y(assigning)43 b(a)g(v)-5 b(alue)43 b(to)h(the)f(SkyRefP)
-f(attribute.)78 b(This)42 b(attribute)h(should)f(b)s(e)g(assigned)h
-(the)g(celestial)0 464 y(co)s(ordinates)29 b(of)g(a)g(p)s(oin)m(t)g
-(whic)m(h)f(is)h(on)f(the)h(zero)h(longitude)f(meridian)f(and)g(whic)m
-(h)h(has)f(non-zero)h(latitude.)0 627 y(By)36 b(default,)i(the)e(p)s
-(osition)f(giv)m(en)i(b)m(y)f(the)g(SkyRef)f(attribute)h(is)g(used)f
-(as)h(the)g(origin)g(of)g(the)g(new)f(longi-)0 740 y(tude/latitude)26
-b(system,)g(but)e(an)h(option)g(exists)g(to)h(use)e(it)h(as)g(the)g
-(north)f(p)s(ole)h(of)f(the)h(system)g(instead.)39 b(This)0
-853 y(option)25 b(is)f(con)m(trolled)h(b)m(y)g(the)f(SkyRefIs)f
-(attribute.)40 b(The)23 b(c)m(hoice)j(of)e(v)-5 b(alue)25
-b(for)f(SkyRefIs)f(dep)s(ends)g(on)h(what)0 966 y(sort)31
-b(of)h(o\013set)g(co)s(ordinate)g(system)f(y)m(ou)h(w)m(an)m(t.)44
-b(Setting)31 b(SkyRefIs)g(to)h(\\Origin")f(\(the)h(default\))g(pro)s
-(duces)0 1079 y(an)39 b(o\013set)i(co)s(ordinate)g(system)e(whic)m(h)h
-(is)f(appro)m(ximately)i(Cartesian)f(close)h(to)f(the)g(sp)s(eci\014ed)
-f(p)s(osition.)0 1191 y(Setting)33 b(SkyRefIs)f(to)h(\\P)m(ole")i(pro)s
-(duces)c(an)h(o\013set)h(co)s(ordinate)h(system)e(whic)m(h)g(is)h
-(appro)m(ximately)g(P)m(olar)0 1304 y(close)f(to)f(the)f(sp)s
-(eci\014ed)g(p)s(osition.)p eop end
-%%Page: 92 102
-TeXDict begin 92 101 bop 0 52 a FF(92)1229 b Fy(8)91
-b(CELESTIAL)29 b(COORDINA)-8 b(TE)29 b(SYSTEMS)g(\(SKYFRAMES\))p
-eop end
-%%Page: 93 103
-TeXDict begin 93 102 bop 3689 52 a FF(93)0 351 y Fz(9)135
-b(Sp)t(ectral)45 b(Co)t(ordinate)h(Systems)f(\(Sp)t(ecF)-11
-b(rames\))0 596 y FF(The)35 b(Sp)s(ecF)-8 b(rame)35 b(is)h(a)f(F)-8
-b(rame)37 b(whic)m(h)e(is)g(sp)s(ecialised)h(for)f(represen)m(ting)h
-(co)s(ordinate)g(systems)f(whic)m(h)g(de-)0 709 y(scrib)s(e)24
-b(a)i(p)s(osition)f(within)f(an)h(electro-magnetic)k(sp)s(ectrum.)37
-b(In)25 b(this)f(section)i(w)m(e)g(examine)f(the)h(additional)0
-821 y(prop)s(erties)k(and)g(b)s(eha)m(viour)g(of)g(a)h(Sp)s(ecF)-8
-b(rame)30 b(that)h(distinguish)f(it)h(from)f(a)h(basic)f(F)-8
-b(rame)32 b(\()p Fu(x)p FF(7\).)0 1102 y Fw(9.1)112 b(The)38
-b(Sp)s(ecF)-9 b(rame)39 b(Mo)s(del)0 1315 y FF(As)30
-b(for)g(a)g(SkyF)-8 b(rame,)31 b(a)g(Sp)s(ecF)-8 b(rame)30
-b(is)g(a)g(F)-8 b(rame)31 b(\()p Fu(x)p FF(7\))h(and)d(also)i(a)g
-(Mapping)f(\()p Fu(x)p FF(5\),)i(so)e(it)h(inherits)e(all)i(the)0
-1428 y(prop)s(erties)c(and)f(b)s(eha)m(viour)h(of)h(these)g(t)m(w)m(o)g
-(ancestral)h(classes.)41 b(When)27 b(used)f(as)i(a)f(Mapping,)h(a)g(Sp)
-s(ecF)-8 b(rame)0 1541 y(implemen)m(ts)26 b(a)f(unit)g(transformation,)
-h(exactly)h(lik)m(e)g(a)e(basic)h(F)-8 b(rame)26 b(\()p
-Fu(x)p FF(7.3\))h(or)e(a)h(UnitMap,)h(so)e(this)g(asp)s(ect)0
-1654 y(of)31 b(its)f(b)s(eha)m(viour)g(is)h(not)f(of)h(great)g(imp)s
-(ortance.)0 1809 y(When)25 b(used)f(as)i(a)f(F)-8 b(rame,)28
-b(ho)m(w)m(ev)m(er,)g(a)d(Sp)s(ecF)-8 b(rame)26 b(represen)m(ts)f(a)g
-(wide)g(range)h(of)f(di\013eren)m(t)h(1-dimensional)0
-1921 y(co)s(ordinate)42 b(system)f(whic)m(h)g(can)g(b)s(e)g(used)f(to)i
-(describ)s(e)f(p)s(ositions)g(within)f(a)i(sp)s(ectrum.)72
-b(The)40 b(options)0 2034 y(a)m(v)-5 b(ailable)33 b(largely)f(mirror)e
-(those)h(describ)s(ed)e(in)i(the)f(FITS-W)m(CS)h(pap)s(er)e(I)s(I)s(I)g
-Fx(R)-5 b(epr)g(esentations)36 b(of)d(sp)-5 b(e)g(ctr)g(al)0
-2147 y(c)g(o)g(or)g(dinates)36 b(in)c(FITS)42 b FF(\(Greisen,)31
-b(V)-8 b(aldes,)32 b(Calabretta)g(&)e(Allen\).)0 2428
-y Fw(9.2)112 b(Creating)38 b(a)g(Sp)s(ecF)-9 b(rame)0
-2641 y FF(The)37 b(Sp)s(ecF)-8 b(rame)38 b(constructor)f(function)h(is)
-f(particularly)h(simple)f(and)g(a)h(Sp)s(ecF)-8 b(rame)38
-b(with)f(default)g(at-)0 2754 y(tributes)30 b(is)h(created)g(as)g
-(follo)m(ws:)227 2970 y Ft(#include)41 b("ast.h")227
-3069 y(AstSpecFrame)e(*specframe;)227 3269 y(...)227
-3468 y(specframe)h(=)j(astSpecFrame\()c("")j(\);)0 3697
-y FF(Suc)m(h)37 b(a)i(Sp)s(ecF)-8 b(rame)38 b(w)m(ould)g(represen)m(t)g
-(the)h(default)f(co)s(ordinate)h(system)f(whic)m(h)g(is)g(helio)s(cen)m
-(tric)i(w)m(a)m(v)m(e-)0 3810 y(length)28 b(in)g(metres)g(\(i.e.)41
-b(w)m(a)m(v)m(elength)30 b(corrected)f(to)f(tak)m(e)i(in)m(to)e(accoun)
-m(t)i(the)d(Doppler)h(shift)g(caused)g(b)m(y)f(the)0
-3923 y(v)m(elo)s(cit)m(y)33 b(of)d(the)h(observ)m(er)g(around)e(the)h
-(sun\).)0 4204 y Fw(9.3)112 b(Sp)s(ecifying)39 b(a)f(P)m(articular)f
-(Sp)s(ectral)h(Co)s(ordinate)g(System)0 4417 y FF(Selection)48
-b(of)f(a)g(particular)h(co)s(ordinate)f(system)g(is)g(p)s(erformed)e
-(simply)i(b)m(y)f(setting)i(a)f(v)-5 b(alue)48 b(for)e(the)0
-4530 y(Sp)s(ecF)-8 b(rame's)33 b(\(c)m(haracter)h(string\))f(System)f
-(attribute.)47 b(This)32 b(setting)h(is)g(most)g(con)m(v)m(enien)m(tly)
-h(done)e(when)0 4643 y(the)d(Sp)s(ecF)-8 b(rame)28 b(is)h(created.)41
-b(F)-8 b(or)29 b(example,)h(a)e(Sp)s(ecF)-8 b(rame)29
-b(represen)m(ting)g(Energy)f(w)m(ould)g(b)s(e)g(created)h(b)m(y:)227
-4858 y Ft(specframe)40 b(=)j(astSpecFrame\()c("System=Energy")e(\);)0
-5087 y FF(Note)24 b(that)f(sp)s(ecifying)f(\\System=Energy")g(also)i(c)
-m(hanges)f(the)f(asso)s(ciated)i(Unit)f(\(from)f(metres)h(to)g
-(Joules\).)0 5200 y(This)40 b(is)h(b)s(ecause)g(the)g(default)g(v)-5
-b(alue)42 b(of)f(the)g(Sp)s(ecF)-8 b(rame's)42 b(Unit)f(attribute)h
-(dep)s(ends)d(on)h(the)i(System)0 5313 y(attribute)31
-b(setting.)0 5467 y(Y)-8 b(ou)30 b(ma)m(y)g(c)m(hange)h(the)e(System)h
-(v)-5 b(alue)30 b(at)g(an)m(y)g(time,)g(although)g(this)g(is)f(not)h
-(usually)f(needed.)40 b(The)29 b(v)-5 b(alues)0 5580
-y(supp)s(orted)40 b(are)h(set)h(out)g(in)f(the)h(attribute's)g
-(description)f(in)g(App)s(endix)f(C)h(and)g(include)g(a)h(v)-5
-b(ariet)m(y)42 b(of)0 5693 y(v)m(elo)s(cit)m(y)33 b(systems,)d
-(together)i(with)e(frequency)-8 b(,)31 b(w)m(a)m(v)m(elength,)i(energy)
--8 b(,)31 b(w)m(a)m(v)m(e-n)m(um)m(b)s(er,)h Fx(etc)p
-FF(.)p eop end
-%%Page: 94 104
-TeXDict begin 94 103 bop 0 52 a FF(94)1201 b Fy(9)91
-b(SPECTRAL)29 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(SPECFRAMES\))0
-351 y Fw(9.4)112 b(A)m(ttributes)37 b(whic)m(h)g(Qualify)i(Sp)s(ectral)
-f(Co)s(ordinate)g(Systems)0 597 y FF(Man)m(y)30 b(sp)s(ectral)f(co)s
-(ordinate)i(systems)e(ha)m(v)m(e)h(some)g(additional)g(free)g
-(parameters)f(whic)m(h)g(serv)m(e)h(to)g(iden)m(tify)0
-710 y(a)f(particular)f(co)s(ordinate)h(system)g(from)f(amongst)h(a)f
-(broader)g(class)h(of)f(related)i(co)s(ordinate)f(systems.)40
-b(F)-8 b(or)0 823 y(example,)37 b(the)e(v)m(elo)s(cit)m(y)i(systems)e
-(are)g(all)g(parameterised)h(b)m(y)e(a)h(rest)g(frequency|the)g
-(frequency)f(whic)m(h)0 936 y(de\014nes)41 b(zero)i(v)m(elo)s(cit)m(y)
--8 b(,)48 b(and)42 b(all)h(co)s(ordinate)g(systems)f(are)g(quali\014ed)
-g(b)m(y)g(a)g(`standard)g(of)g(rest")h(whic)m(h)0 1049
-y(indicates)31 b(the)g(rest)f(frame)h(to)g(whic)m(h)f(the)g(v)-5
-b(alues)31 b(refer.)0 1228 y(In)23 b(AST,)g(these)g(free)h(parameters)g
-(are)f(represen)m(ted)h(b)m(y)f(additional)h(Sp)s(ecF)-8
-b(rame)24 b(attributes,)i(eac)m(h)e(of)g(whic)m(h)0 1341
-y(has)30 b(a)g(default)g(appropriate)g(to)g(\()p Fx(i.e.)g
-FF(de\014ned)e(b)m(y\))i(the)g(setting)h(of)f(the)g(main)g(System)g
-(attribute.)41 b(Eac)m(h)30 b(of)0 1454 y(these)c Fx(qualifying)i
-(attributes)e FF(ma)m(y)-8 b(,)28 b(ho)m(w)m(ev)m(er,)g(b)s(e)d
-(assigned)h(an)f(explicit)i(v)-5 b(alue)26 b(so)f(as)h(to)g(select)h(a)
-f(particular)0 1566 y(co)s(ordinate)38 b(system.)62 b(Note,)41
-b(it)d(is)f(usually)g(b)s(est)g(to)h(assign)g(explicit)h(v)-5
-b(alues)37 b(whenev)m(er)h(p)s(ossible)f(rather)0 1679
-y(than)28 b(relying)i(on)e(defaults.)40 b(A)m(ttribute)30
-b(should)e(only)h(b)s(e)f(left)h(at)g(their)g(default)g(v)-5
-b(alue)29 b(if)g(y)m(ou)g(\\don't)g(care")0 1792 y(what)e(v)-5
-b(alue)27 b(is)g(used.)39 b(In)26 b(certain)i(circumstances)g
-(\(particularly)-8 b(,)29 b(when)d(aligning)i(t)m(w)m(o)g(F)-8
-b(rames\),)29 b(a)e(default)0 1905 y(v)-5 b(alue)37 b(for)g(an)g
-(attribute)h(ma)m(y)f(b)s(e)g(replaced)g(b)m(y)g(the)g(v)-5
-b(alue)37 b(from)g(another)g(similar)g(F)-8 b(rame.)62
-b(Suc)m(h)36 b(v)-5 b(alue)0 2018 y(replacemen)m(t)28
-b(can)e(b)s(e)g(prev)m(en)m(ted)h(b)m(y)f(assigning)h(an)f(explicit)h
-(v)-5 b(alue)27 b(to)g(the)g(attribute,)h(rather)e(than)g(simply)0
-2131 y(relying)31 b(on)f(the)h(default.)0 2310 y(The)f(main)g(Sp)s(ecF)
--8 b(rame)31 b(attributes)g(whic)m(h)f(qualify)g(the)h(System)f
-(attribute)h(are:)227 2622 y FD(Ep)s(o)s(c)m(h)427 2735
-y FF(This)i(attribute)h(is)g(inherited)f(from)g(the)h(F)-8
-b(rame)34 b(class.)51 b(It)34 b(giv)m(es)g(the)g(momen)m(t)g(in)f(time)
-427 2848 y(when)27 b(the)h(co)s(ordinates)h(are)f(correct)h(for)e(the)h
-(astronomical)i(source)e(under)e(study)h(\(usu-)427 2961
-y(ally)f(the)f(date)h(of)f(observ)-5 b(ation\).)40 b(It)26
-b(is)f(needed)f(in)h(order)g(to)h(calculate)h(the)e(Doppler)h(shift)427
-3074 y(pro)s(duced)g(b)m(y)h(the)h(v)m(elo)s(cit)m(y)i(of)d(the)h
-(observ)m(er)f(relativ)m(e)j(to)e(the)g(cen)m(tre)g(of)g(the)f(earth,)i
-(and)427 3186 y(of)i(the)f(earth)h(relativ)m(e)h(to)g(the)e(sun.)227
-3349 y FD(StdOfRest)427 3462 y FF(This)25 b(sp)s(eci\014es)g(the)g
-(rest)h(frame)f(in)g(whic)m(h)g(the)h(co)s(ordinates)g(are)g(correct.)
-40 b(T)-8 b(ransforming)427 3575 y(b)s(et)m(w)m(een)29
-b(di\013eren)m(t)g(standards)f(of)g(rest)h(in)m(v)m(olv)m(es)h(taking)g
-(accoun)m(t)g(of)e(the)h(Doppler)g(shift)427 3688 y(in)m(tro)s(duced)h
-(b)m(y)g(the)h(relativ)m(e)h(motion)f(of)g(the)g(t)m(w)m(o)g(standards)
-f(of)g(rest.)227 3850 y FD(RestF)-9 b(req)427 3963 y
-FF(Sp)s(eci\014es)26 b(the)g(frequency)g(whic)m(h)f(corresp)s(ond)g(to)
-i(zero)g(v)m(elo)s(cit)m(y)-8 b(.)42 b(When)26 b(setting)h(a)g(v)-5
-b(alue)427 4076 y(for)42 b(this)g(attribute,)47 b(the)42
-b(v)-5 b(alue)43 b(ma)m(y)g(b)s(e)e(supplied)g(as)i(a)g(w)m(a)m(v)m
-(elength)h(\(including)e(an)427 4189 y(indication)34
-b(of)f(the)h(units)e(b)s(eing)h(used,)g(\\nm")g(\\Angstrom",)i
-Fx(etc.)p FF(\),)f(whic)m(h)f(will)h(b)s(e)e(au-)427
-4302 y(tomatically)i(b)s(e)29 b(con)m(v)m(erted)j(to)f(a)g(frequency)-8
-b(.)227 4465 y FD(RefRA)427 4577 y FF(Sp)s(eci\014es)42
-b(the)h(RA)g(\(FK5)g(J2000\))h(of)f(the)g(source.)78
-b(This)41 b(is)i(used)f(when)f(con)m(v)m(erting)427 4690
-y(b)s(et)m(w)m(een)28 b(standards)d(of)i(rest.)40 b(It)27
-b(sp)s(eci\014es)f(the)h(direction)h(along)f(whic)m(h)g(the)g(comp)s
-(onen)m(t)427 4803 y(of)k(the)f(relativ)m(e)j(v)m(elo)s(cit)m(y)g(of)d
-(the)h(t)m(w)m(o)h(standards)d(of)h(rest)h(is)f(tak)m(en.)227
-4966 y FD(RefDec)427 5079 y FF(Sp)s(eci\014es)24 b(the)h(Dec)g(\(FK5)g
-(J2000\))i(of)d(the)h(source.)39 b(Used)24 b(in)g(conjunction)h(with)f
-(REFRA.)227 5241 y FD(SourceV)-9 b(el)427 5354 y FF(This)32
-b(de\014nes)g(the)i(\\source")g(standard)e(of)h(rest.)48
-b(This)32 b(is)h(a)h(rest)f(frame)g(whic)m(h)f(is)h(mo)m(v-)427
-5467 y(ing)38 b(to)m(w)m(ards)g(the)g(p)s(osition)f(giv)m(en)i(b)m(y)e
-(RefRA)g(and)g(RefDec,)k(at)d(a)g(v)m(elo)s(cit)m(y)i(giv)m(en)e(b)m(y)
-427 5580 y(SourceV)-8 b(el.)52 b(The)33 b(v)m(elo)s(cit)m(y)j(is)e
-(stored)g(in)m(ternally)h(as)f(a)g(helio)s(cen)m(tric)h(v)m(elo)s(cit)m
-(y)-8 b(,)38 b(but)33 b(can)427 5693 y(b)s(e)d(giv)m(en)h(in)f(an)m(y)h
-(of)g(the)f(other)h(supp)s(orted)d(standards)i(of)g(rest.)p
-eop end
-%%Page: 95 105
-TeXDict begin 95 104 bop 0 52 a Fy(9.5)92 b(Using)31
-b(Default)g(Sp)s(ecF)-8 b(rame)31 b(A)m(ttributes)2029
-b FF(95)0 351 y(F)-8 b(or)32 b(further)d(details)j(of)f(these)h
-(attributes)f(y)m(ou)h(should)e(consult)h(their)g(descriptions)g(in)f
-(App)s(endix)g(C)g(and)0 464 y(for)g(details)i(of)e(the)h(System)f
-(settings)i(for)e(whic)m(h)g(they)h(are)g(relev)-5 b(an)m(t,)32
-b(see)f(the)g(description)f(of)h(the)g(System)0 577 y(attribute)g
-(\(also)h(in)e(App)s(endix)e(C\).)0 736 y(Note)38 b(that)f(it)h(do)s
-(es)e(no)h(harm)f(to)h(assign)g(v)-5 b(alues)37 b(to)h(qualifying)f
-(attributes)g(whic)m(h)g(are)g(not)g(relev)-5 b(an)m(t)38
-b(to)0 849 y(the)28 b(main)g(System)g(v)-5 b(alue.)41
-b(An)m(y)28 b(suc)m(h)g(v)-5 b(alues)28 b(are)h(stored,)g(but)e(are)h
-(not)h(used)e(unless)h(the)g(System)g(v)-5 b(alue)28
-b(is)0 962 y(later)j(set)g(so)g(that)g(they)f(b)s(ecome)h(relev)-5
-b(an)m(t.)0 1250 y Fw(9.5)112 b(Using)38 b(Default)h(Sp)s(ecF)-9
-b(rame)38 b(A)m(ttributes)0 1467 y FF(The)j(default)g(v)-5
-b(alues)42 b(supplied)e(for)h(man)m(y)g(Sp)s(ecF)-8 b(rame)42
-b(attributes)f(will)h(dep)s(end)e(on)h(the)g(v)-5 b(alue)42
-b(of)f(the)0 1580 y(Sp)s(ecF)-8 b(rame's)26 b(System)f(attribute.)40
-b(In)25 b(practice,)j(this)e(means)f(that)i(there)f(is)f(usually)h
-(little)h(need)e(to)i(sp)s(ecify)0 1693 y(man)m(y)44
-b(of)g(these)g(attributes)g(explicitly)h(unless)e(y)m(ou)h(ha)m(v)m(e)h
-(some)f(sp)s(ecial)g(requiremen)m(t.)81 b(This)43 b(can)h(b)s(e)0
-1806 y(illustrated)31 b(b)m(y)f(using)g(astSho)m(w)h(to)g(examine)g(a)g
-(Sp)s(ecF)-8 b(rame,)31 b(as)f(follo)m(ws:)227 2040 y
-Ft(astShow\()41 b(astSpecFrame\()d("System=Vopt,)g(RestFreq=250)h(GHz")
-j(\))h(\);)0 2287 y FF(The)30 b(output)g(from)g(this)g(migh)m(t)h(lo)s
-(ok)g(lik)m(e)h(the)e(follo)m(wing:)275 2534 y Fq(Begin)46
-b(SpecFrame)380 b(#)47 b(Description)e(of)i(spectral)f(coordinate)f
-(system)227 2647 y(#)143 b(Title)47 b(=)g("Optical)f(velocity,)f(rest)h
-(frequency)g(=)h(250)g(GHz")333 b(#)48 b(Title)227 2760
-y(of)f(coordinate)e(system)418 2873 y(Naxes)i(=)g(1)143
-b(#)47 b(Number)f(of)i(coordinate)d(axes)227 2986 y(#)143
-b(Domain)46 b(=)i("SPECTRUM")427 b(#)47 b(Coordinate)e(system)h(domain)
-227 3099 y(#)143 b(Epoch)47 b(=)g(2000)381 b(#)47 b(Julian)f(epoch)h
-(of)g(observation)227 3212 y(#)143 b(Lbl1)47 b(=)g("Optical)f
-(velocity")93 b(#)47 b(Label)g(for)g(axis)f(1)418 3325
-y(System)g(=)i("VOPT")237 b(#)47 b(Coordinate)e(system)h(type)227
-3438 y(#)143 b(Uni1)47 b(=)g("km/s")333 b(#)47 b(Units)g(for)f(axis)h
-(1)418 3550 y(Ax1)g(=)334 b(#)47 b(Axis)g(number)f(1)561
-3663 y(Begin)h(Axis)333 b(#)47 b(Coordinate)e(axis)561
-3776 y(End)i(Axis)275 3889 y(IsA)g(Frame)285 b(#)47 b(Coordinate)e
-(system)h(description)227 4002 y(#)143 b(SoR)47 b(=)h("Heliocentric")
-378 b(#)47 b(Standard)f(of)h(rest)418 4115 y(RstFrq)f(=)i(250000000000)
-331 b(#)47 b(Rest)g(frequency)e(\(Hz\))275 4228 y(End)i(SpecFrame)0
-4475 y FF(Note)40 b(that)f(the)g(defaults)g(\(indicated)h(b)m(y)e(the)h
-(\\)p Fq(#)p FF(")h(commen)m(t)f(c)m(haracter)i(at)e(the)g(start)g(of)g
-(the)g(line\))h(for)0 4588 y(attributes)30 b(suc)m(h)g(as)g(the)g
-(Title,)h(axis)g(Lab)s(els)e(and)g(Unit)h(sp)s(eci\014ers)g(are)g(all)h
-(set)f(to)h(v)-5 b(alues)30 b(appropriate)g(for)0 4701
-y(the)h(particular)f(v)m(elo)s(cit)m(y)j(system)e(that)g(the)f(Sp)s
-(ecF)-8 b(rame)31 b(represen)m(ts.)0 4860 y(These)25
-b(c)m(hoices)i(w)m(ould)e(b)s(e)f(appropriate)i(for)e(a)i(System)f(v)-5
-b(alue)26 b(of)f(\\V)-8 b(opt",)28 b(but)d(if)g(a)g(di\013eren)m(t)h
-(System)f(v)-5 b(alue)0 4973 y(w)m(ere)32 b(set,)g(the)g(defaults)f(w)m
-(ould)g(b)s(e)g(corresp)s(ondingly)f(di\013eren)m(t.)44
-b(F)-8 b(or)32 b(example,)h(b)m(y)e(default)h(frequency)e(is)0
-5086 y(measured)j(in)g(units)h(of)f(GHz,)j(not)e Fo(k)s(m=s)p
-FF(,)h(so)f(setting)g(\\System=freq")g(w)m(ould)g(c)m(hange)h(the)e
-(appropriate)0 5199 y(line)e(ab)s(o)m(v)m(e)g(from:)227
-5446 y Fq(#)143 b(Uni1)47 b(=)g("km/s")333 b(#)47 b(Units)g(for)f(axis)
-h(1)0 5693 y FF(to)p eop end
-%%Page: 96 106
-TeXDict begin 96 105 bop 0 52 a FF(96)1201 b Fy(9)91
-b(SPECTRAL)29 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(SPECFRAMES\))227
-351 y Fq(#)143 b(Uni1)47 b(=)g("GHz")381 b(#)47 b(Units)g(for)f(axis)h
-(1)0 617 y FF(Of)35 b(course,)j(if)e(y)m(ou)h(do)f(not)g(lik)m(e)h(an)m
-(y)g(of)f(these)h(defaults,)g(y)m(ou)g(ma)m(y)f(alw)m(a)m(ys)i(o)m(v)m
-(er-ride)f(them)f(b)m(y)g(setting)0 730 y(explicit)41
-b(attribute)f(v)-5 b(alues)40 b(y)m(ourself.)68 b(F)-8
-b(or)40 b(instance,)j(y)m(ou)c(ma)m(y)h(c)m(ho)s(ose)h(to)f(ha)m(v)m(e)
-h(y)m(our)e(frequency)g(axis)0 842 y(expressed)30 b(in)g(\\kHz")i
-(rather)e(than)g(\\GHz".)43 b(T)-8 b(o)30 b(do)h(this)f(simply)g(set)h
-(the)f(attribute)h(v)-5 b(alue)31 b(as)g(follo)m(ws:)227
-1094 y Ft(astSetC\()41 b(specframe,)e("Unit",)i("kHz")g(\);)0
-1360 y FF(No)26 b(error)g(will)g(b)s(e)f(rep)s(orted)g(if)g(y)m(ou)h
-(acciden)m(tally)j(set)d(an)g(inappropriate)f(Unit)h(v)-5
-b(alue)26 b(\(sa)m(y)h("J")f(-)g(Joules\)|)0 1473 y(after)e(all,)j(AST)
-c(cannot)i(tell)g(what)f(y)m(ou)g(are)g(ab)s(out)g(to)h(do,)g(and)f(y)m
-(ou)g Fx(may)33 b FF(b)s(e)23 b(ab)s(out)h(to)g(c)m(hange)i(the)e
-(System)0 1586 y(v)-5 b(alue)21 b(to)g(\\Energy".)38
-b(Ho)m(w)m(ev)m(er,)25 b(an)20 b(error)g Fx(wil)5 b(l)30
-b FF(b)s(e)20 b(rep)s(orted)g(if)g(y)m(ou)h(attempt)g(to)g(\014nd)e(a)i
-(con)m(v)m(ersion)h(b)s(et)m(w)m(een)0 1699 y(t)m(w)m(o)32
-b(Sp)s(ecF)-8 b(rames)31 b(\(for)g(instance)g(using)f(astCon)m(v)m(ert)
-j(\))e(if)f(either)h(Sp)s(ecF)-8 b(rame)31 b(has)g(a)g(Unit)g(v)-5
-b(alue)31 b(whic)m(h)f(is)0 1811 y(inappropriate)g(for)g(its)h(System)f
-(v)-5 b(alue.)0 1975 y(Sp)s(ecF)d(rame)33 b(attributes,)i(lik)m(e)f
-(all)g(other)g(attributes,)h(all)f(ha)m(v)m(e)g(default)f(v)-5
-b(alue.)50 b(Ho)m(w)m(ev)m(er,)36 b(b)s(e)c(a)m(w)m(are)j(that)0
-2088 y(for)d(some)h(attributes)h(these)f(default)g(v)-5
-b(alues)32 b(can)h(nev)m(er)g(b)s(e)f(more)h(than)f(\\a)i(legal)g(n)m
-(umerical)g(v)-5 b(alue")33 b(and)0 2201 y(ha)m(v)m(e)h(no)e
-(astronomical)i(signi\014cance.)47 b(F)-8 b(or)34 b(instance,)f(the)g
-(RefRA)f(and)g(RefDec)i(attributes)f(\(whic)m(h)f(giv)m(e)0
-2314 y(the)39 b(source)g(p)s(osition\))g(b)s(oth)f(ha)m(v)m(e)i(a)f
-(default)g(v)-5 b(alue)39 b(of)f(zero.)67 b(So)38 b(unless)g(y)m(our)h
-(source)g(happ)s(ens)e(to)i(b)s(e)0 2427 y(at)d(that)g(p)s(oin)m(t)f
-(\(highly)h(unlik)m(ely!\))57 b(y)m(ou)35 b(will)h(need)f(to)h(set)g
-(new)f(v)-5 b(alues.)56 b(Lik)m(ewise,)38 b(the)d(RestF)-8
-b(req)37 b(\(rest)0 2540 y(frequency\))k(attribute)h(has)f(an)g
-(arbitrary)g(default)g(v)-5 b(alue)41 b(of)h(1.0E5)g(GHz.)74
-b(Some)41 b(op)s(erations)h(are)f(not)0 2653 y(a\013ected)31
-b(b)m(y)e(inappropriate)f(v)-5 b(alues)30 b(for)f(these)g(attributes)h
-(\(for)f(instance,)i(con)m(v)m(erting)f(from)f(frequency)g(to)0
-2766 y(w)m(a)m(v)m(elength,)41 b(c)m(hanging)c(axis)g(units,)h
-Fx(etc)5 b FF(\),)39 b(but)c(some)i(are.)60 b(F)-8 b(or)37
-b(instance,)j(con)m(v)m(erting)e(from)e(frequency)0 2878
-y(to)29 b(v)m(elo)s(cit)m(y)h(requires)d(a)i(correct)g(rest)f
-(frequency)-8 b(,)28 b(mo)m(ving)h(b)s(et)m(w)m(een)g(di\013eren)m(t)f
-(standards)f(of)h(rest)g(requires)0 2991 y(a)40 b(correct)g(source)g(p)
-s(osition.)67 b(The)39 b(moral)h(is,)i(alw)m(a)m(ys)f(set)f(explicit)g
-(v)-5 b(alues)40 b(for)f(as)h(man)m(y)f(attributes)h(as)0
-3104 y(p)s(ossible.)0 3401 y Fw(9.6)112 b(Creating)38
-b(Sp)s(ectral)g(Cub)s(es)0 3624 y FF(Y)-8 b(ou)25 b(can)g(use)g(a)g(Sp)
-s(ecF)-8 b(rame)25 b(to)g(describ)s(e)f(the)h(sp)s(ectral)g(axis)g(in)f
-(a)h(data)h(cub)s(e)e(con)m(taining)i(t)m(w)m(o)g(spatial)g(axes)0
-3737 y(and)36 b(a)h(sp)s(ectral)g(axis.)59 b(T)-8 b(o)37
-b(do)g(this)f(y)m(ou)h(w)m(ould)f(create)i(an)f(appropriate)f(Sp)s(ecF)
--8 b(rame,)39 b(together)f(with)e(a)0 3850 y(2-dimensional)30
-b(F)-8 b(rame)31 b(\(often)f(a)g(SkyF)-8 b(rame\))30
-b(to)g(describ)s(e)f(the)h(spatial)g(axes.)41 b(Y)-8
-b(ou)30 b(w)m(ould)g(then)f(com)m(bine)0 3962 y(these)i(t)m(w)m(o)h(F)
--8 b(rames)31 b(together)h(in)m(to)f(a)g(single)g(CmpF)-8
-b(rame.)227 4215 y Ft(AstSkyFrame)39 b(*skyframe;)227
-4314 y(AstSpecFrame)g(*specframe;)227 4414 y(AstCmpFrame)g(*cmpframe;)
-227 4513 y(...)227 4613 y(skyframe)i(=)i(astSkyFrame\()38
-b("Epoch=J2002")h(\);)227 4713 y(specframe)h(=)j(astSpecFrame\()c
-("System=Freq,St)o(dO)o(fRe)o(st)o(=LS)o(RK)o(")f(\);)227
-4812 y(cmpframe)j(=)i(astCmpFrame\()38 b(skyframe,)i(specframe,)g("")i
-(\);)0 5078 y FF(In)30 b(the)g(resulting)h(CmpF)-8 b(rame,)30
-b(axis)h(1)f(will)h(b)s(e)f(RA,)g(axis)h(2)g(will)g(b)s(e)e(Dec)j(and)d
-(axis)i(3)g(will)g(b)s(e)e(F)-8 b(requency)g(.)0 5191
-y(If)30 b(this)g(is)h(not)f(the)h(order)f(y)m(ou)g(w)m(an)m(t,)i(y)m
-(ou)f(can)f(p)s(erm)m(ute)g(the)h(axes)g(using)f(astP)m(ermAxes.)0
-5354 y(There)36 b(is)g(one)g(p)s(oten)m(tial)i(problem)e(with)f(this)h
-(approac)m(h)h(if)f(y)m(ou)h(are)f(in)m(terested)h(in)f(un)m(usually)g
-(high)f(ac-)0 5467 y(curacy)-8 b(.)53 b(Con)m(v)m(ersion)34
-b(b)s(et)m(w)m(een)h(di\013eren)m(t)f(standards)g(of)g(rest)g(in)m(v)m
-(olv)m(es)i(taking)f(accoun)m(t)h(of)e(the)g(Doppler)0
-5580 y(shift)j(caused)g(b)m(y)f(the)i(relativ)m(e)h(motion)e(of)g(the)g
-(t)m(w)m(o)i(standards)d(of)h(rest.)60 b(A)m(t)38 b(some)g(p)s(oin)m(t)
-f(this)f(in)m(v)m(olv)m(es)0 5693 y(\014nding)26 b(the)h(comp)s(onen)m
-(t)g(of)h(the)f(relativ)m(e)i(v)m(elo)s(cit)m(y)h(in)d(the)g(direction)
-h(of)f(in)m(terest.)41 b(F)-8 b(or)28 b(a)f(Sp)s(ecF)-8
-b(rame,)29 b(this)p eop end
-%%Page: 97 107
-TeXDict begin 97 106 bop 0 52 a Fy(9.7)92 b(Handling)30
-b(Dual-Sideband)g(Sp)s(ectra)2175 b FF(97)0 351 y(direction)29
-b(is)f(alw)m(a)m(ys)i(giv)m(en)g(b)m(y)e(the)g(RefRA)h(and)f(RefDec)h
-(attributes,)h(ev)m(en)f(if)f(the)h(Sp)s(ecF)-8 b(rame)28
-b(is)h(em)m(b)s(ed-)0 464 y(ded)j(within)g(a)h(CmpF)-8
-b(rame)32 b(as)h(ab)s(o)m(v)m(e.)49 b(It)33 b(w)m(ould)f(b)s(e)g(more)h
-(appropriate)f(if)h(this)f(\\direction)i(of)f(in)m(terest")0
-577 y(w)m(as)c(sp)s(eci\014ed)f(b)m(y)h(the)g(v)-5 b(alues)29
-b(passed)g(in)m(to)g(the)g(CmpF)-8 b(rame)29 b(on)g(the)g(RA)g(and)f
-(DEC)h(axes,)h(allo)m(wing)g(eac)m(h)0 690 y(pixel)h(within)f(a)g(data)
-h(cub)s(e)f(to)h(ha)m(v)m(e)h(a)e(sligh)m(tly)i(di\013eren)m(t)f
-(correction)h(for)e(Doppler)g(shift.)0 866 y(Unfortunately)-8
-b(,)37 b(the)d(Sp)s(ecF)-8 b(rame)35 b(class)h(cannot)f(do)f(this)h
-(\(since)g(it)g(is)g(purely)e(a)i(1-dimensional)h(F)-8
-b(rame\),)0 979 y(and)26 b(so)h(some)g(small)g(degree)g(of)g(error)f
-(will)h(b)s(e)f(in)m(tro)s(duced)g(when)g(con)m(v)m(erting)i(b)s(et)m
-(w)m(een)g(standards)d(of)i(rest,)0 1092 y(the)32 b(size)h(of)f(the)g
-(error)f(v)-5 b(arying)32 b(from)f(pixel)h(to)h(pixel.)45
-b(It)32 b(is)g(hop)s(ed)f(that)h(at)h(some)f(p)s(oin)m(t)g(in)f(the)h
-(future)f(a)0 1204 y(sub-class)g(of)g(CmpF)-8 b(rame)30
-b(\(a)i(Sp)s(ecCub)s(eF)-8 b(rame\))30 b(will)h(b)s(e)f(added)g(to)i
-(AST)e(whic)m(h)g(allo)m(ws)i(for)f(this)f(spatial)0
-1317 y(v)-5 b(ariation)32 b(in)e(Doppler)g(shift.)0 1493
-y(The)40 b(maxim)m(um)g(v)m(elo)s(cit)m(y)j(error)d(in)m(tro)s(duced)f
-(b)m(y)i(this)f(problem)f(is)i(of)f(the)h(order)f(of)g
-Fo(V)47 b Fu(\003)27 b Fo(S)5 b(I)i(N)j FF(\()p Fo(F)j(O)s(V)21
-b FF(\),)0 1606 y(where)33 b Fo(F)13 b(O)s(V)53 b FF(is)33
-b(the)g(angular)h(\014eld)e(of)i(view,)g(and)e Fo(V)54
-b FF(is)33 b(the)g(relativ)m(e)i(v)m(elo)s(cit)m(y)h(of)d(the)h(t)m(w)m
-(o)g(standards)e(of)0 1719 y(rest.)56 b(As)35 b(an)g(example,)i(when)e
-(correcting)h(from)f(the)h(observ)m(ers)f(rest)h(frame)f(\(i.e.)56
-b(the)36 b(top)s(o)s(cen)m(tric)g(rest)0 1832 y(frame\))f(to)h(the)f
-(kinematic)h(lo)s(cal)h(standard)d(of)h(rest)g(the)g(maxim)m(um)g(v)-5
-b(alue)35 b(of)g Fo(V)55 b FF(is)35 b(ab)s(out)g(20)h
-Fo(k)s(m=s)p FF(,)g(so)0 1945 y(for)c(5)h(arc-min)m(ute)g(\014eld)f(of)
-h(view)f(the)h(maxim)m(um)f(v)m(elo)s(cit)m(y)j(error)d(in)m(tro)s
-(duced)g(b)m(y)g(the)h(correction)g(will)g(b)s(e)0 2058
-y(ab)s(out)c(0.03)j Fo(k)s(m=s)p FF(.)40 b(As)30 b(another)g(example,)h
-(the)f(maxim)m(um)f(error)g(when)g(correcting)i(from)e(the)h(observ)m
-(ers)0 2171 y(rest)h(frame)f(to)h(the)g(lo)s(cal)g(group)f(is)g(ab)s
-(out)g(5)h Fo(k)s(m=s)g FF(o)m(v)m(er)g(a)g(1)g(degree)g(\014eld)f(of)g
-(view.)0 2508 y Fw(9.7)112 b(Handling)39 b(Dual-Sideband)h(Sp)s(ectra)0
-2748 y FF(Dual)32 b(sideband)d(sup)s(er-hetero)s(dyne)h(receiv)m(ers)i
-(pro)s(duce)e(sp)s(ectra)h(in)f(whic)m(h)h(eac)m(h)h(c)m(hannel)g(con)m
-(tains)g(con-)0 2861 y(tributions)27 b(from)g(t)m(w)m(o)i(di\013eren)m
-(t)f(frequencies,)g(referred)f(to)h(as)f(the)h(\\upp)s(er)e(sideband)g
-(frequency")h(and)g(the)0 2974 y(\\lo)m(w)m(er)i(sideband)d
-(frequency".)40 b(In)26 b(the)i(rest)f(frame)h(of)f(the)h(observ)m(er)f
-(\(top)s(o)s(cen)m(tric\),)j(these)e(are)g(related)g(to)0
-3087 y(eac)m(h)k(other)e(as)h(follo)m(ws:)1544 3494 y
-Fl(f)1585 3506 y Fk(lsb)1694 3494 y Fj(=)23 b(2)p Fl(:f)1888
-3506 y Fk(LO)2007 3494 y Fi(\000)18 b Fl(f)2131 3506
-y Fk(usb)3446 3494 y Fj(\(1\))0 3796 y FF(where)34 b
-Fo(f)312 3810 y Fh(LO)454 3796 y FF(is)h(a)g(\014xed)e(frequency)i(kno)
-m(wn)f(as)h(the)f(\\lo)s(cal)j(oscillator)g(frequency".)53
-b(In)34 b(other)h(w)m(ords,)g(the)0 3909 y(lo)s(cal)30
-b(oscillator)g(frequency)e(is)g(alw)m(a)m(ys)i(mid-w)m(a)m(y)f(b)s(et)m
-(w)m(een)g(an)m(y)g(pair)f(of)g(corresp)s(onding)f(upp)s(er)g(and)g(lo)
-m(w)m(er)0 4022 y(sideband)37 b(frequencies)822 3989
-y Fv(16)897 4022 y FF(.)63 b(If)38 b(y)m(ou)g(w)m(an)m(t)h(to)f
-(describ)s(e)g(the)g(sp)s(ectral)g(axis)h(of)f(suc)m(h)f(a)i(sp)s
-(ectrum)e(using)g(a)0 4135 y(Sp)s(ecF)-8 b(rame)31 b(y)m(ou)h(m)m(ust)f
-(c)m(ho)s(ose)h(whether)f(y)m(ou)g(w)m(an)m(t)h(the)g(Sp)s(ecF)-8
-b(rame)31 b(to)h(describ)s(e)f Fo(f)3029 4150 y Fh(l)q(sb)3148
-4135 y FF(or)h Fo(f)3306 4150 y Fh(usb)3444 4135 y FF(-)f(a)h(basic)0
-4247 y(Sp)s(ecF)-8 b(rame)42 b(cannot)g(describ)s(e)f(b)s(oth)f
-(sidebands)g(sim)m(ultaneously)-8 b(.)76 b(Ho)m(w)m(ev)m(er,)46
-b(there)c(is)f(a)h(sub-class)f(of)0 4360 y(Sp)s(ecF)-8
-b(rame,)31 b(called)g(DSBSp)s(ecF)-8 b(rame,)32 b(whic)m(h)e(o)m(v)m
-(ercomes)i(this)f(di\016cult)m(y)-8 b(.)0 4536 y(A)33
-b(DSBSp)s(ecF)-8 b(rame)33 b(has)f(a)h(SideBand)f(attribute)h(whic)m(h)
-f(indicates)i(if)e(the)h(DSBSp)s(ecF)-8 b(rame)33 b(is)f(curren)m(tly)0
-4649 y(b)s(eing)26 b(used)f(to)i(describ)s(e)e(the)h(upp)s(er)f(or)h
-(lo)m(w)m(er)h(sideband)e(sp)s(ectral)h(axis.)40 b(The)26
-b(v)-5 b(alue)26 b(of)g(this)g(attribute)h(can)0 4762
-y(b)s(e)33 b(c)m(hanged)i(at)f(an)m(y)g(time.)52 b(If)33
-b(y)m(ou)h(use)g(the)g(astCon)m(v)m(ert)h(function)e(to)i(\014nd)d(the)
-i(Mapping)g(b)s(et)m(w)m(een)g(t)m(w)m(o)0 4875 y(DSBSp)s(ecF)-8
-b(rames,)31 b(the)f(setting)h(for)f(the)g(t)m(w)m(o)i(SideBand)d
-(attributes)i(will)f(b)s(e)g(tak)m(en)h(in)m(to)g(accoun)m(t.)42
-b(Th)m(us,)0 4988 y(if)30 b(y)m(ou)h(tak)m(e)h(a)f(cop)m(y)h(of)e(a)h
-(DSBSp)s(ecF)-8 b(rame,)31 b(toggle)i(its)e(SideBand)f(attribute,)i
-(and)e(then)g(use)g(astCon)m(v)m(ert)0 5101 y(to)i(\014nd)f(a)h
-(Mapping)f(from)h(the)g(original)g(to)h(the)f(mo)s(di\014ed)e(cop)m(y)
--8 b(,)34 b(the)e(resulting)g(Mapping)f(will)h(b)s(e)f(of)h(the)0
-5214 y(form)e(of)g(equation)i(1)e(\(if)h(the)g(DSBSp)s(ecF)-8
-b(rame)31 b(has)f(its)h(StdOfRest)e(attribute)i(set)g(to)g(\\T)-8
-b(op)s(o)s(cen)m(tric"\).)0 5389 y(In)28 b(general,)j(when)d(\014nding)
-g(a)i(Mapping)f(b)s(et)m(w)m(een)h(t)m(w)m(o)g(arbitrary)f(DSBSp)s(ecF)
--8 b(rames,)30 b(the)g(total)h(Mapping)0 5502 y(is)f(made)h(of)f(of)h
-(three)f(parts)h(in)f(series:)p 0 5607 1512 4 v 73 5661
-a Fs(16)138 5693 y Fr(Note,)c(this)g(simple)g(relationship)h(only)f
-(applies)g(if)g(all)h(frequencies)f(are)g(top)r(o)r(cen)n(tric.)p
-eop end
-%%Page: 98 108
-TeXDict begin 98 107 bop 0 52 a FF(98)1201 b Fy(9)91
-b(SPECTRAL)29 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(SPECFRAMES\))111
-351 y FF(1.)46 b(A)38 b(Mapping)f(whic)m(h)g(con)m(v)m(erts)h(the)g
-(\014rst)e(DSBSp)s(ecF)-8 b(rame)38 b(in)m(to)g(its)f(upp)s(er)f
-(sideband)g(represen)m(ta-)227 464 y(tion.)41 b(If)30
-b(the)g(DSBSp)s(ecF)-8 b(rame)30 b(already)h(represen)m(ts)f(its)g(upp)
-s(er)e(sideband,)h(this)h(Mapping)g(will)g(b)s(e)f(a)227
-577 y(UnitMap.)111 765 y(2.)46 b(A)25 b(Mapping)g(whic)m(h)f(con)m(v)m
-(erts)i(from)e(the)h(\014rst)f(to)i(the)f(second)f(DSBSp)s(ecF)-8
-b(rame,)27 b(treating)f(them)f(as)f(if)227 878 y(they)30
-b(w)m(ere)h(b)s(oth)e(basic)h(Sp)s(ecF)-8 b(rames.)41
-b(This)29 b(tak)m(es)i(accoun)m(t)h(of)e(an)m(y)g(di\013erence)g(in)g
-(units,)f(standard)227 991 y(of)i(rest,)g(system,)f Fx(etc)36
-b FF(b)s(et)m(w)m(een)31 b(the)f(t)m(w)m(o)i(DSBSp)s(ecF)-8
-b(rames.)111 1178 y(3.)46 b(A)25 b(Mapping)g(whic)m(h)f(con)m(v)m(erts)
-j(the)e(second)f(DSBSp)s(ecF)-8 b(rame)26 b(from)e(its)h(upp)s(er)e
-(sideband)h(represen)m(ta-)227 1291 y(tion)g(to)h(its)e(curren)m(t)h
-(sideband.)37 b(If)23 b(the)h(DSBSp)s(ecF)-8 b(rame)24
-b(curren)m(tly)f(represen)m(ts)h(its)g(upp)s(er)d(sideband,)227
-1404 y(this)31 b(Mapping)f(will)h(b)s(e)e(a)i(UnitMap.)0
-1666 y(If)h(an)h(attempt)h(is)f(made)f(to)i(\014nd)d(the)i(Mapping)g(b)
-s(et)m(w)m(een)g(a)g(DSBSp)s(ecF)-8 b(rame)34 b(and)e(a)h(basic)g(Sp)s
-(ecF)-8 b(rame,)0 1779 y(then)34 b(the)g(DSBSp)s(ecF)-8
-b(rame)34 b(will)g(b)s(e)g(treated)h(lik)m(e)g(a)f(basic)g(Sp)s(ecF)-8
-b(rame.)52 b(In)33 b(other)h(w)m(ords,)h(the)f(returned)0
-1892 y(Mapping)42 b(will)g(not)h(b)s(e)e(a\013ected)i(b)m(y)f(the)g
-(setting)i(of)e(the)g(SideBand)f(attribute)i(\(or)f(an)m(y)h(of)f(the)g
-(other)0 2005 y(attributes)31 b(sp)s(eci\014c)f(to)h(the)g(DSBSp)s(ecF)
--8 b(rame)31 b(class\).)0 2168 y(In)41 b(practice,)46
-b(the)c(lo)s(cal)h(oscillator)h(frequency)e(for)f(a)h(dual)g(sideband)e
-(instrumen)m(t)i(ma)m(y)g(not)g(b)s(e)f(easily)0 2281
-y(a)m(v)-5 b(ailable)31 b(to)f(an)f(observ)m(er.)40 b(Instead,)30
-b(it)f(is)g(common)g(practice)h(to)g(sp)s(ecify)f(the)g(sp)s(ectral)g
-(p)s(osition)g(of)g(some)0 2394 y(cen)m(tral)k(feature)g(in)f(the)g
-(observ)-5 b(ation)33 b(\(commonly)g(the)f(cen)m(tre)h(of)f(the)h
-(instrumen)m(t)e(passband\),)h(together)0 2507 y(with)23
-b(an)g(\\in)m(termediate)i(frequency".)39 b(T)-8 b(ogether,)26
-b(these)e(t)m(w)m(o)g(v)-5 b(alues)24 b(allo)m(w)g(the)g(lo)s(cal)g
-(oscillator)i(frequency)0 2619 y(to)21 b(b)s(e)f(determined.)37
-b(The)20 b(in)m(termediate)i(frequency)d(is)i(the)f(di\013erence)h(b)s
-(et)m(w)m(een)g(the)f(top)s(o)s(cen)m(tric)i(frequency)0
-2732 y(at)31 b(the)g(cen)m(tral)g(sp)s(ectral)g(p)s(osition)g(and)e
-(the)i(top)s(o)s(cen)m(tric)g(frequency)f(of)h(the)f(lo)s(cal)i
-(oscillator.)43 b(So:)1528 3081 y Fl(f)1569 3093 y Fk(LO)1693
-3081 y Fj(=)23 b Fl(f)1822 3093 y Fk(centr)r(al)2062
-3081 y Fj(+)18 b Fl(f)2186 3093 y Fk(if)3446 3081 y Fj(\(2\))0
-3343 y FF(The)29 b(DSBSp)s(ecF)-8 b(rame)30 b(class)h(uses)e(the)h
-(DSBCen)m(tre)g(attribute)g(to)g(sp)s(ecify)g(the)g(cen)m(tral)g(sp)s
-(ectral)g(p)s(osition)0 3456 y(\()p Fo(f)80 3471 y Fh(centr)r(al)309
-3456 y FF(\),)43 b(and)d(the)h(IF)g(attribute)g(to)g(sp)s(ecify)f(the)h
-(in)m(termediate)h(frequency)e(\()p Fo(f)2932 3471 y
-Fh(if)3001 3456 y FF(\).)72 b(The)40 b(DSBCen)m(tre)0
-3569 y(v)-5 b(alue)35 b(is)f(giv)m(en)h(and)f(returned)f(in)h(the)g(sp)
-s(ectral)h(system)f(describ)s(ed)f(b)m(y)i(the)f(DSBSp)s(ecF)-8
-b(rame)35 b(\(th)m(us)f(y)m(ou)0 3682 y(do)k(not)g(need)f(to)h
-(calculate)j(the)c(corresp)s(onding)g(top)s(o)s(cen)m(tric)i(frequency)
-e(y)m(ourself)h(-)g(this)g(will)g(b)s(e)f(done)0 3795
-y(automatically)28 b(b)m(y)e(the)g(DSBSp)s(ecF)-8 b(rame)26
-b(when)f(y)m(ou)h(assign)f(a)h(new)g(v)-5 b(alue)26 b(to)g(the)g
-(DSBCen)m(tre)g(attribute\).)0 3908 y(The)j(v)-5 b(alue)30
-b(assigned)f(to)i(the)e(IF)h(attribute)g(should)e(alw)m(a)m(ys)j(b)s(e)
-e(a)h(top)s(o)s(cen)m(tric)g(frequency)f(in)g(units)g(of)h(Hz,)0
-4021 y(ho)m(w)m(ev)m(er)38 b(a)f(negativ)m(e)h(v)-5 b(alue)37
-b(ma)m(y)g(b)s(e)f(giv)m(en)h(to)g(indicate)h(that)f(the)f(DSBCen)m
-(tre)h(v)-5 b(alue)37 b(is)g(in)f(the)g(upp)s(er)0 4134
-y(sideband)g(\(that)j(is,)h(if)d Fo(I)7 b(F)50 b(<)37
-b FF(0)h(then)f Fo(f)1447 4149 y Fh(centr)r(al)1713 4134
-y Fo(>)g(f)1866 4148 y Fh(LO)1973 4134 y FF(\).)63 b(A)37
-b(p)s(ositiv)m(e)i(v)-5 b(alue)38 b(for)f(IF)h(indicates)g(that)g(the)0
-4247 y(DSBCen)m(tre)31 b(v)-5 b(alue)31 b(is)f(in)g(the)h(lo)m(w)m(er)h
-(sideband)d(\(that)i(is,)g(if)f Fo(I)7 b(F)39 b(>)25
-b FF(0)30 b(then)g Fo(f)2685 4262 y Fh(centr)r(al)2939
-4247 y Fo(<)25 b(f)3080 4261 y Fh(LO)3187 4247 y FF(\).)p
-eop end
-%%Page: 99 109
-TeXDict begin 99 108 bop 3689 52 a FF(99)0 351 y Fz(10)135
-b(Time)45 b(Systems)h(\(TimeF)-11 b(rames\))0 608 y FF(The)23
-b(TimeF)-8 b(rame)25 b(is)f(a)h(F)-8 b(rame)25 b(whic)m(h)e(is)h(sp)s
-(ecialised)h(for)f(represen)m(ting)g(momen)m(ts)g(in)g(time.)39
-b(In)23 b(this)h(section)0 721 y(w)m(e)31 b(examine)g(the)g(additional)
-h(prop)s(erties)e(and)f(b)s(eha)m(viour)i(of)f(a)h(TimeF)-8
-b(rame)32 b(that)f(distinguish)f(it)h(from)f(a)0 834
-y(basic)h(F)-8 b(rame)31 b(\()p Fu(x)p FF(7\).)0 1136
-y Fw(10.1)112 b(The)38 b(TimeF)-9 b(rame)39 b(Mo)s(del)0
-1362 y FF(As)29 b(for)f(a)i(SkyF)-8 b(rame,)29 b(a)h(TimeF)-8
-b(rame)29 b(is)g(a)h(F)-8 b(rame)29 b(\()p Fu(x)p FF(7\))i(and)d(also)i
-(a)f(Mapping)g(\()p Fu(x)p FF(5\),)i(so)e(it)g(inherits)g(all)g(the)0
-1474 y(prop)s(erties)c(and)g(b)s(eha)m(viour)g(of)h(these)g(t)m(w)m(o)h
-(ancestral)g(classes.)40 b(When)25 b(used)g(as)h(a)g(Mapping,)g(a)g
-(TimeF)-8 b(rame)0 1587 y(implemen)m(ts)26 b(a)f(unit)g
-(transformation,)h(exactly)h(lik)m(e)g(a)e(basic)h(F)-8
-b(rame)26 b(\()p Fu(x)p FF(7.3\))h(or)e(a)h(UnitMap,)h(so)e(this)g(asp)
-s(ect)0 1700 y(of)31 b(its)f(b)s(eha)m(viour)g(is)h(not)f(of)h(great)g
-(imp)s(ortance.)0 1866 y(When)23 b(used)g(as)h(a)g(F)-8
-b(rame,)26 b(ho)m(w)m(ev)m(er,)g(a)e(TimeF)-8 b(rame)25
-b(represen)m(ts)e(a)h(wide)f(range)h(of)g(di\013eren)m(t)g
-(1-dimensional)0 1979 y(co)s(ordinate)30 b(system)f(whic)m(h)f(can)h(b)
-s(e)g(used)f(to)h(describ)s(e)g(momen)m(ts)g(in)f(time.)41
-b(Absolute)30 b(times)f(and)f(relativ)m(e)0 2091 y(\(i.e.)41
-b(elapsed\))28 b(times)g(are)g(supp)s(orted)e(\(attribute)i
-(TimeOrigin\),)g(as)g(are)g(a)g(range)g(of)f(di\013eren)m(t)h(time)g
-(scales)0 2204 y(\(attribute)39 b(TimeScale\).)65 b(An)37
-b(absolute)i(or)f(relativ)m(e)i(v)-5 b(alue)38 b(in)f(an)m(y)i(time)f
-(scale)h(can)g(b)s(e)e(represen)m(ted)h(in)0 2317 y(di\013eren)m(t)23
-b(forms)e(suc)m(h)h(as)g(Mo)s(di\014ed)g(Julian)g(Date,)k(Julian)21
-b(Ep)s(o)s(c)m(h,)j Fx(etc)j FF(\(attribute)c(System\).)38
-b(AST)22 b(extends)0 2430 y(the)30 b(de\014nition)f(of)g(these)h
-(systems)g(to)g(allo)m(w)h(them)e(to)h(b)s(e)f(used)g(with)g(an)m(y)g
-(unit)g(of)h(time)g(\(attribute)h(Unit\).)0 2543 y(The)i(TimeF)-8
-b(rame)35 b(class)g(also)g(allo)m(ws)g(times)g(to)g(formatted)f(as)g
-(either)h(a)f(simple)g(\015oating)h(p)s(oin)m(t)f(v)-5
-b(alue)34 b(or)0 2656 y(as)d(a)f(Gregorian)i(date)f(and)f(time)h(of)f
-(da)m(y)h(\(attribute)g(F)-8 b(ormat\).)0 2958 y Fw(10.2)112
-b(Creating)38 b(a)g(TimeF)-9 b(rame)0 3184 y FF(The)33
-b(TimeF)-8 b(rame)35 b(constructor)f(function)f(is)h(particularly)g
-(simple)g(and)f(a)h(TimeF)-8 b(rame)34 b(with)g(default)f(at-)0
-3297 y(tributes)d(is)h(created)g(as)g(follo)m(ws:)227
-3554 y Ft(#include)41 b("ast.h")227 3653 y(AstTimeFrame)e(*timeframe;)
-227 3853 y(...)227 4052 y(timeframe)h(=)j(astTimeFrame\()c("")j(\);)0
-4322 y FF(Suc)m(h)25 b(a)g(TimeF)-8 b(rame)27 b(w)m(ould)e(represen)m
-(t)g(the)h(default)f(co)s(ordinate)h(system)g(whic)m(h)f(is)g(Mo)s
-(di\014ed)g(Julian)g(Date)0 4435 y(\(with)30 b(the)h(usual)f(units)g
-(of)g(da)m(ys\))h(in)f(the)h(In)m(ternational)g(A)m(tomic)i(Time)d(\(T)
--8 b(AI\))31 b(time)g(scale.)0 4738 y Fw(10.3)112 b(Sp)s(ecifying)39
-b(a)f(P)m(articular)f(Time)h(System)0 4963 y FF(By)28
-b(setting)g(the)g(System)f(attribute)h(appropriately)-8
-b(,)29 b(the)f(TimeF)-8 b(rame)28 b(can)g(represen)m(t)f(Julian)h
-(Date,)h(Mo)s(d-)0 5076 y(i\014ed)37 b(Julian)h(Date,)k(Julian)37
-b(Ep)s(o)s(c)m(h)g(or)h(Besselian)h(Ep)s(o)s(c)m(h)e(\(the)i(time)f
-(scale)h(is)f(sp)s(eci\014ed)f(b)m(y)h(a)g(separate)0
-5189 y(attribute)31 b(called)h(TimeScale\).)0 5354 y(Selection)d(of)f
-(a)h(particular)f(co)s(ordinate)h(system)f(is)f(p)s(erformed)g(simply)g
-(b)m(y)h(setting)h(a)f(v)-5 b(alue)28 b(for)g(the)g(Time-)0
-5467 y(F)-8 b(rame's)35 b(\(c)m(haracter)h(string\))f(System)f
-(attribute.)53 b(This)33 b(setting)j(is)e(most)g(con)m(v)m(enien)m(tly)
-j(done)d(when)f(the)0 5580 y(TimeF)-8 b(rame)31 b(is)f(created.)42
-b(F)-8 b(or)30 b(example,)h(a)g(TimeF)-8 b(rame)30 b(represen)m(ting)h
-(Julian)e(Ep)s(o)s(c)m(h)g(w)m(ould)h(b)s(e)f(created)0
-5693 y(b)m(y:)p eop end
-%%Page: 100 110
-TeXDict begin 100 109 bop 0 52 a FF(100)2023 b Fy(10)92
-b(TIME)30 b(SYSTEMS)f(\(TIMEFRAMES\))227 351 y Ft(timeframe)40
-b(=)j(astTimeFrame\()c("System=JEPOCH")e(\);)0 614 y
-FF(Note)e(that)f(sp)s(ecifying)g(\\System=JEPOCH")f(also)i(c)m(hanges)g
-(the)f(asso)s(ciated)h(default)f(Unit)g(\(from)f(da)m(ys)0
-727 y(to)g(y)m(ears\).)46 b(This)31 b(is)h(b)s(ecause)g(the)h(default)f
-(v)-5 b(alue)32 b(of)g(the)g(TimeF)-8 b(rame's)33 b(Unit)g(attribute)f
-(dep)s(ends)e(on)i(the)0 839 y(System)e(attribute)h(setting.)0
-1002 y(Y)-8 b(ou)30 b(ma)m(y)g(c)m(hange)h(the)e(System)h(v)-5
-b(alue)30 b(at)g(an)m(y)g(time,)g(although)g(this)g(is)f(not)h(usually)
-f(needed.)40 b(The)29 b(v)-5 b(alues)0 1115 y(supp)s(orted)29
-b(are)h(set)h(out)g(in)f(the)g(attribute's)i(description)e(in)g(App)s
-(endix)f(C.)0 1408 y Fw(10.4)112 b(A)m(ttributes)37 b(whic)m(h)g
-(Qualify)i(Time)f(Co)s(ordinate)h(Systems)0 1630 y FF(Time)f(co)s
-(ordinate)i(systems)e(require)g(some)h(additional)g(free)f(parameters)h
-(to)g(iden)m(tify)g(a)g(particular)f(co-)0 1743 y(ordinate)c(system)g
-(from)f(amongst)i(a)f(broader)f(class)h(of)g(related)h(co)s(ordinate)f
-(systems.)51 b(F)-8 b(or)34 b(example,)i(all)0 1856 y(TimeF)-8
-b(rames)29 b(are)f(quali\014ed)g(b)m(y)g(the)g(time)h(scale)g(\(that)h
-(is,)e(the)h(ph)m(ysical)f(pro)s(cess)g(used)f(to)i(de\014ne)e(the)h
-(\015o)m(w)0 1968 y(of)j(time\),)g(and)f(some)h(require)f(the)g(p)s
-(osition)h(of)f(the)h(observ)m(er's)g(clo)s(c)m(k.)0
-2131 y(In)42 b(AST,)g(these)h(free)f(parameters)h(are)g(represen)m(ted)
-f(b)m(y)h(additional)g(TimeF)-8 b(rame)43 b(attributes,)k(eac)m(h)c(of)
-0 2244 y(whic)m(h)35 b(has)g(a)g(default)g(appropriate)h(to)f(\()p
-Fx(i.e.)g FF(de\014ned)f(b)m(y\))i(the)f(setting)h(of)f(the)h(main)f
-(System)f(attribute.)0 2357 y(Eac)m(h)e(of)g(these)g
-Fx(qualifying)h(attributes)g FF(ma)m(y)-8 b(,)33 b(ho)m(w)m(ev)m(er,)g
-(b)s(e)e(assigned)h(an)f(explicit)i(v)-5 b(alue)32 b(so)g(as)g(to)g
-(select)h(a)0 2470 y(particular)27 b(co)s(ordinate)h(system.)40
-b(Note,)29 b(it)f(is)f(usually)g(b)s(est)g(to)h(assign)f(explicit)h(v)
--5 b(alues)28 b(whenev)m(er)f(p)s(ossible)0 2583 y(rather)f(than)g
-(relying)h(on)f(defaults.)40 b(A)m(ttribute)27 b(should)f(only)g(b)s(e)
-g(left)h(at)g(their)f(default)h(v)-5 b(alue)27 b(if)f(y)m(ou)h(\\don't)
-0 2696 y(care")33 b(what)f(v)-5 b(alue)33 b(is)f(used.)45
-b(In)32 b(certain)h(circumstances)f(\(particularly)-8
-b(,)34 b(when)e(aligning)h(t)m(w)m(o)g(F)-8 b(rames\),)34
-b(a)0 2809 y(default)f(v)-5 b(alue)33 b(for)g(an)f(attribute)i(ma)m(y)f
-(b)s(e)g(replaced)g(b)m(y)f(the)h(v)-5 b(alue)34 b(from)e(another)h
-(similar)g(F)-8 b(rame.)49 b(Suc)m(h)0 2922 y(v)-5 b(alue)31
-b(replacemen)m(t)h(can)e(b)s(e)g(prev)m(en)m(ted)h(b)m(y)f(assigning)h
-(an)f(explicit)i(v)-5 b(alue)31 b(to)g(the)f(attribute,)i(rather)e
-(than)0 3034 y(simply)g(relying)h(on)f(the)g(default.)0
-3197 y(The)g(main)g(TimeF)-8 b(rame)32 b(attributes)e(whic)m(h)h
-(qualify)f(the)h(System)f(attribute)h(are:)227 3460 y
-FD(TimeScale)427 3572 y FF(This)f(sp)s(eci\014es)g(the)g(time)i(scale.)
-227 3719 y FD(L)-9 b(TO\013set)427 3831 y FF(This)32
-b(sp)s(eci\014es)g(the)h(o\013set)g(from)f(Lo)s(cal)h(Time)g(to)g(UTC)f
-(in)g(hours)f(\(time)j(zones)f(east)g(of)427 3944 y(Green)m(wic)m(h)c
-(ha)m(v)m(e)f(p)s(ositiv)m(e)h(v)-5 b(alues\).)40 b(Note,)30
-b(AST)c(uses)h(the)h(v)-5 b(alue)27 b(as)h(supplied)e(without)427
-4057 y(making)31 b(an)m(y)g(correction)g(for)g(da)m(yligh)m(t)h(sa)m
-(ving.)227 4203 y FD(TimeOrigin)427 4316 y FF(This)h(sp)s(eci\014es)g
-(the)g(zero)h(p)s(oin)m(t)g(from)e(whic)m(h)h(time)h(v)-5
-b(alues)34 b(are)g(measured,)f(within)g(the)427 4429
-y(system)39 b(sp)s(eci\014ed)e(b)m(y)h(the)h(System)f(attribute.)65
-b(Th)m(us,)39 b(a)g(v)-5 b(alue)39 b(ofzero)g(\(the)g(default\))427
-4542 y(indicates)g(that)g(time)g(v)-5 b(alues)38 b(represen)m(t)h
-(absolute)g(times.)64 b(Non-zero)40 b(v)-5 b(alues)38
-b(ma)m(y)h(b)s(e)427 4655 y(used)26 b(to)g(indicate)i(that)e(the)h
-(TimeF)-8 b(rame)27 b(represen)m(ts)f(elapsed)g(time)h(since)g(the)f
-(sp)s(eci\014ed)427 4768 y(origin.)0 5030 y(F)-8 b(or)32
-b(further)d(details)j(of)f(these)h(attributes)f(y)m(ou)h(should)e
-(consult)h(their)g(descriptions)g(in)f(App)s(endix)g(C)g(and)0
-5143 y(for)g(details)i(of)e(the)h(System)f(settings)i(for)e(whic)m(h)g
-(they)h(are)g(relev)-5 b(an)m(t,)32 b(see)f(the)g(description)f(of)h
-(the)g(System)0 5256 y(attribute)g(\(also)h(in)e(App)s(endix)e(C\).)0
-5419 y(Note)38 b(that)f(it)h(do)s(es)e(no)h(harm)f(to)h(assign)g(v)-5
-b(alues)37 b(to)h(qualifying)f(attributes)g(whic)m(h)g(are)g(not)g
-(relev)-5 b(an)m(t)38 b(to)0 5532 y(the)c(main)f(System)g(or)g
-(TimeScale)i(v)-5 b(alue.)50 b(An)m(y)34 b(suc)m(h)f(v)-5
-b(alues)33 b(are)h(stored,)h(but)e(are)g(not)h(used)f(unless)f(the)0
-5645 y(System)e(and/or)g(TimeScale)i(v)-5 b(alue)31 b(is)f(later)h(set)
-g(so)g(that)g(they)g(b)s(ecome)f(relev)-5 b(an)m(t.)p
-eop end
-%%Page: 101 111
-TeXDict begin 101 110 bop 3643 52 a FF(101)0 351 y Fz(11)135
-b(Comp)t(ound)44 b(F)-11 b(rames)45 b(\(CmpF)-11 b(rames\))0
-610 y FF(W)j(e)29 b(no)m(w)f(turn)f(to)i(a)f(rather)g(sp)s(ecial)g
-(form)g(of)g(Mapping,)h(the)f(CmpF)-8 b(rame.)39 b(The)28
-b(F)-8 b(rames)29 b(w)m(e)f(ha)m(v)m(e)h(consid-)0 723
-y(ered)k(so)h(far)f(ha)m(v)m(e)h(b)s(een)e(atomic,)k(in)d(the)h(sense)f
-(that)h(they)f(represen)m(t)g(pre-de\014ned)f(elemen)m(tary)j(ph)m
-(ysical)0 836 y(domains.)53 b(A)35 b(CmpF)-8 b(rame,)36
-b(ho)m(w)m(ev)m(er,)i(is)c(a)h(comp)s(ound)f(F)-8 b(rame.)54
-b(In)34 b(essence,)j(it)e(is)g(a)g(structure)f(for)h(con-)0
-949 y(taining)45 b(other)f(F)-8 b(rames)45 b(and)e(its)h(purp)s(ose)e
-(is)i(to)h(allo)m(w)h(those)e(F)-8 b(rames)45 b(to)f(w)m(ork)g
-(together)i(in)d(v)-5 b(arious)0 1062 y(com)m(binations)41
-b(while)f(app)s(earing)f(as)i(a)f(single)g(Ob)5 b(ject.)70
-b(A)40 b(CmpF)-8 b(rame's)39 b(b)s(eha)m(viour)h(is)g(therefore)g(not)0
-1175 y(pre-de\014ned,)29 b(but)h(is)g(determined)g(b)m(y)h(the)f(other)
-h(F)-8 b(rames)31 b(it)g(con)m(tains)g(\(its)g(\\comp)s(onen)m(t")h(F)
--8 b(rames\).)0 1342 y(As)44 b(with)f(comp)s(ound)f(Mappings,)48
-b(comp)s(ound)42 b(F)-8 b(rames)44 b(can)g(b)s(e)f(nested)h(within)f
-(eac)m(h)i(other,)j(forming)0 1455 y(arbitrarily)31 b(complex)g(F)-8
-b(rames.)0 1762 y Fw(11.1)112 b(Creating)38 b(a)g(CmpF)-9
-b(rame)0 1990 y FF(A)31 b(v)m(ery)h(common)g(use)f(for)g(a)g(CmpF)-8
-b(rame)32 b(within)e(astronom)m(y)i(is)g(to)g(represen)m(t)f(a)h(\\sp)s
-(ectral)g(cub)s(e".)43 b(This)0 2103 y(is)34 b(a)h(3-dimensional)h(F)-8
-b(rame)35 b(in)f(whic)m(h)g(one)h(of)f(the)h(axes)g(represen)m(ts)f(p)s
-(osition)h(within)f(a)h(sp)s(ectrum,)f(and)0 2216 y(the)40
-b(other)h(t)m(w)m(o)h(axes)e(represen)m(t)h(p)s(osition)f(on)g(the)h
-(sky)f(\(or)g(some)h(other)f(spatial)i(domain)e(suc)m(h)g(as)g(the)0
-2329 y(fo)s(cal)32 b(plane)g(of)g(a)f(telescop)s(e\).)46
-b(As)32 b(an)f(example,)i(w)m(e)f(create)h(suc)m(h)e(a)h(CmpF)-8
-b(rame)32 b(in)f(whic)m(h)g(axes)h(1)g(and)f(2)0 2442
-y(represen)m(t)e(Righ)m(t)h(Ascension)g(and)e(Declination)k(\(ICRS\),)d
-(and)f(axis)i(3)g(represen)m(ts)f(w)m(a)m(v)m(elength)i(\(these)f(are)0
-2555 y(the)h(default)f(co)s(ordinate)h(Systems)f(represen)m(ted)h(b)m
-(y)f(a)h(SkyF)-8 b(rame)30 b(and)g(a)h(Sp)s(ecF)-8 b(rame)31
-b(resp)s(ectiv)m(ely\):)227 2817 y Ft(AstSkyFrame)39
-b(*skyframe;)227 2916 y(AstSpecFrame)g(*specframe;)227
-3016 y(AstCmpFrame)g(*cmpframe;)227 3116 y(...)227 3215
-y(skyframe)i(=)i(astSkyFrame\()38 b("")43 b(\);)227 3315
-y(specframe)d(=)j(astSpecFrame\()c("")j(\);)227 3414
-y(cmpframe)f(=)i(astCmpFrame\()38 b(skyframe,)i(specframe,)g("")i(\);)0
-3690 y FF(If)27 b(it)g(w)m(as)h(desired)e(to)i(mak)m(e)g(RA)f(and)g
-(Dec)h(corresp)s(ond)e(to)i(axes)f(1)h(and)e(3,)i(with)f(axis)h(2)f(b)s
-(eing)g(the)g(sp)s(ectral)0 3803 y(axis,)k(then)f(the)h(axes)g(of)f
-(the)h(CmpF)-8 b(rame)30 b(created)h(ab)s(o)m(v)m(e)h(w)m(ould)e(need)g
-(to)h(b)s(e)f(p)s(erm)m(uted)g(as)g(follo)m(ws:)227 4064
-y Ft(int)43 b(perm[)e(3)i(];)227 4164 y(...)227 4363
-y(perm[)f(0)h(])g(=)g(0;)227 4463 y(perm[)f(1)h(])g(=)g(2;)227
-4563 y(perm[)f(2)h(])g(=)g(1;)227 4662 y(astPermAxes\()c(cmpframe,)h
-(perm)i(\);)0 4970 y Fw(11.2)112 b(The)38 b(A)m(ttributes)e(of)i(a)g
-(CmpF)-9 b(rame)0 5198 y FF(A)45 b(CmpF)-8 b(rame)44
-b Fx(is)h(a)52 b FF(F)-8 b(rame)45 b(and)f(so)h(has)f(all)h(the)g
-(attributes)g(of)g(a)f(F)-8 b(rame.)84 b(The)44 b(default)h(v)-5
-b(alue)45 b(for)0 5311 y(the)e(Domain)g(attribute)g(for)g(a)g(CmpF)-8
-b(rame)42 b(is)g(formed)g(b)m(y)h(concatenating)i(the)e(Domains)g(of)f
-(the)h(t)m(w)m(o)0 5423 y(comp)s(onen)m(t)25 b(F)-8 b(rames,)27
-b(separated)f(b)m(y)f(a)g(min)m(us)f(sign)h(\(\\-"\).)2048
-5390 y Fv(17)2164 5423 y FF(The)f(\(\014xed\))h(v)-5
-b(alue)26 b(for)f(its)g(System)g(attribute)p 0 5516 1512
-4 v 73 5570 a Fs(17)138 5602 y Fr(If)32 b(b)r(oth)f(comp)r(onen)n(t)g
-(F)-6 b(rames)32 b(ha)n(v)n(e)e(blank)h(Domains,)j(then)c(the)h
-(default)h(Domain)g(for)g(the)f(CmpF)-6 b(rame)31 b(is)h(the)f(string)0
-5693 y(\\CMP".)p eop end
-%%Page: 102 112
-TeXDict begin 102 111 bop 0 52 a FF(102)1782 b Fy(11)92
-b(COMPOUND)30 b(FRAMES)h(\(CMPFRAMES\))0 351 y FF(is)f(\\Comp)s(ound".)
-645 318 y Fv(18)759 351 y FF(A)h(CmpF)-8 b(rame)30 b(has)g(no)g
-(further)f(attributes)i(o)m(v)m(er)g(and)f(ab)s(o)m(v)m(e)h(those)g
-(common)g(to)g(all)0 464 y(F)-8 b(rames.)74 b(Ho)m(w)m(ev)m(er,)46
-b(attributes)c(of)g(the)f(t)m(w)m(o)i(comp)s(onen)m(t)e(F)-8
-b(rames)42 b(can)g(b)s(e)e(accessed)j(as)e(if)h(they)f(w)m(ere)0
-577 y(attributes)31 b(of)f(the)h(CmpF)-8 b(rame,)31 b(as)f(describ)s
-(ed)f(b)s(elo)m(w.)0 740 y(F)-8 b(rame)28 b(attributes)g(whic)m(h)g
-(are)f(sp)s(eci\014c)h(to)g(individual)f(axes)h(\(suc)m(h)f(as)h(Lab)s
-(el\(2\),)h(F)-8 b(ormat\(1\),)31 b Fx(etc)5 b FF(\))28
-b(simply)0 853 y(mirror)40 b(the)h(corresp)s(onding)f(axes)h(of)h(the)f
-(relev)-5 b(an)m(t)42 b(comp)s(onen)m(t)f(F)-8 b(rame.)73
-b(That)41 b(is,)j(if)c(the)h(\\Lab)s(el\(2\)")0 966 y(attribute)h(of)g
-(a)f(CmpF)-8 b(rame)41 b(is)h(accessed,)j(the)d(CmpF)-8
-b(rame)41 b(will)h(forw)m(ard)f(the)g(access)i(request)e(to)h(the)0
-1079 y(comp)s(onen)m(t)c(F)-8 b(rame)39 b(whic)m(h)f(con)m(tains)h
-(axis)g(2.)64 b(Th)m(us,)40 b(default)e(v)-5 b(alues)38
-b(for)g(axis)h(attributes)f(will)h(b)s(e)e(the)0 1191
-y(same)31 b(as)f(those)h(pro)m(vided)f(b)m(y)h(the)f(comp)s(onen)m(t)h
-(F)-8 b(rames.)0 1354 y(An)44 b(axis)g(index)g(can)g(optionally)i(b)s
-(e)d(app)s(ended)f(to)j(the)g(name)f(of)g(F)-8 b(rames)45
-b(attributes)f(whic)m(h)g(do)g(not)0 1467 y(normally)36
-b(ha)m(v)m(e)h(suc)m(h)e(an)h(index)f(\(System,)i(Domain,)h(Ep)s(o)s(c)
-m(h,)f(Title,)h Fx(etc)5 b FF(\).)57 b(If)35 b(this)h(is)f(done,)i(the)
-f(access)0 1580 y(request)e(is)f(forw)m(arded)g(to)h(the)g(comp)s(onen)
-m(t)g(F)-8 b(rame)34 b(con)m(taining)h(the)f(indicated)g(axis.)51
-b(F)-8 b(or)34 b(instance,)i(if)d(a)0 1693 y(CmpF)-8
-b(rame)35 b(con)m(tains)i(a)f(Sp)s(ecF)-8 b(rame)36 b(and)f(a)h(SkyF)-8
-b(rame)36 b(in)f(that)h(order,)h(and)e(the)g(axes)i(ha)m(v)m(e)f(not)g
-(b)s(een)0 1806 y(p)s(erm)m(uted,)31 b(then)g(getting)i(the)f(v)-5
-b(alue)31 b(of)h(attribute)g(\\System")g(will)g(return)e(\\Comp)s
-(ound")g(as)i(men)m(tioned)0 1919 y(ab)s(o)m(v)m(e)38
-b(\(that)g(is,)i(the)d(System)g(v)-5 b(alue)37 b(of)h(the)f(CmpF)-8
-b(rame)37 b(as)g(a)h(whole\),)i(whereas)d(getting)h(the)g(v)-5
-b(alue)37 b(of)0 2032 y(attribute)29 b(\\System\(1\)")h(will)f(return)e
-(\\Sp)s(ectral"\(that)j(is,)f(the)f(System)g(v)-5 b(alue)29
-b(of)g(the)f(comp)s(onen)m(t)h(F)-8 b(rame)0 2145 y(con)m(taining)32
-b(axis)f(1)g(|)f(the)g(Sp)s(ecF)-8 b(rame\).)0 2307 y(This)31
-b(tec)m(hnique)i(is)f(not)g(limited)g(to)h(attributes)f(common)h(to)f
-(all)h(F)-8 b(rames.)46 b(F)-8 b(or)33 b(instance,)g(the)f(SkyF)-8
-b(rame)0 2420 y(class)31 b(de\014nes)f(an)h(attribute)g(called)h
-(Equino)m(x)e(whic)m(h)g(is)h(not)g(held)f(b)m(y)h(other)f(classes)i
-(of)f(F)-8 b(rames.)42 b(T)-8 b(o)31 b(set)g(a)0 2533
-y(v)-5 b(alue)29 b(for)g(the)f(Equino)m(x)h(attribute)g(of)g(the)g
-(SkyF)-8 b(rame)29 b(con)m(tained)h(within)e(the)h(ab)s(o)m(v)m(e)h
-(CmpF)-8 b(rame,)29 b(assign)0 2646 y(the)37 b(v)-5 b(alue)38
-b(to)g(the)f(\\Equino)m(x\(2\)")j(attribute)e(of)f(the)g(CmpF)-8
-b(rame.)62 b(Since)37 b(the)g(SkyF)-8 b(rame)38 b(de\014nes)e(b)s(oth)0
-2759 y(axes)e(2)h(and)e(3)h(of)g(the)g(CmpF)-8 b(rame,)35
-b(w)m(e)f(could)g(equiv)-5 b(alen)m(tly)35 b(ha)m(v)m(e)g(set)f(a)h(v)
--5 b(alue)34 b(for)f(\\Equino)m(x\(3\)")j(since)0 2872
-y(this)30 b(w)m(ould)g(also)i(result)e(in)g(the)h(attribute)g(access)g
-(b)s(eing)f(forw)m(arded)g(to)h(the)g(SkyF)-8 b(rame.)0
-3035 y(Finally)g(,)48 b(if)43 b(an)f(attribute)i(is)f(not)g
-(quali\014ed)g(b)m(y)g(a)g(axis)h(index,)h(attempts)f(will)g(b)s(e)e
-(made)h(to)h(access)g(it)0 3147 y(using)31 b(eac)m(h)h(of)f(the)h(CmpF)
--8 b(rame)31 b(axes)h(in)e(turn.)42 b(Using)32 b(the)f(ab)s(o)m(v)m(e)i
-(example)e(of)h(the)f(sp)s(ectral)h(cub)s(e,)e(if)i(an)0
-3260 y(attempt)25 b(w)m(as)g(made)f(to)h(get)h(the)e(v)-5
-b(alue)25 b(of)f(attribute)h(\\Equino)m(x")h(\(with)e(no)g(axis)h
-(index\),)g(eac)m(h)h(axis)f(in)f(turn)0 3373 y(w)m(ould)30
-b(b)s(e)f(used.)40 b(Since)30 b(axis)h(1)f(is)g(con)m(tained)h(within)f
-(a)g(Sp)s(ecF)-8 b(rame,)31 b(the)f(\014rst)f(attempt)j(w)m(ould)d
-(fail)i(since)0 3486 y(the)i(Sp)s(ecF)-8 b(rame)34 b(class)g(do)s(es)e
-(not)i(ha)m(v)m(e)g(an)f(Equino)m(x)g(attribute.)50 b(Ho)m(w)m(ev)m
-(er,)36 b(the)d(second)g(attempt)i(w)m(ould)0 3599 y(succeed)e(b)s
-(ecause)f(axis)h(2)g(is)g(con)m(tained)g(within)f(a)h(SkyF)-8
-b(rame)33 b(whic)m(h)f Fx(do)-5 b(es)41 b FF(ha)m(v)m(e)34
-b(an)e(Equino)m(x)g(attribute.)0 3712 y(Th)m(us)h(the)i(returned)e
-(attribute)i(v)-5 b(alue)35 b(w)m(ould)f(b)s(e)f(that)i(obtained)g
-(from)f(the)g(SkyF)-8 b(rame)35 b(con)m(taining)h(axis)0
-3825 y(2.)k(When)27 b(getting)i(or)f(testing)g(an)g(attribute)g(v)-5
-b(alue,)28 b(the)g(returned)e(v)-5 b(alue)28 b(is)f(determined)g(b)m(y)
-h(the)f Fx(\014rst)37 b FF(axis)0 3938 y(whic)m(h)32
-b(recognises)i(the)f(attribute.)48 b(When)33 b(setting)g(an)g
-(attribute)g(v)-5 b(alue,)34 b Fx(al)5 b(l)43 b FF(axes)33
-b(whic)m(h)f(recognises)i(the)0 4051 y(attribute)g(ha)m(v)m(e)g(the)g
-(attribute)g(v)-5 b(alue)33 b(set)h(to)g(the)g(giv)m(en)g(v)-5
-b(alue.)50 b(Lik)m(ewise,)35 b(when)d(clearing)j(an)e(attribute)0
-4164 y(v)-5 b(alue,)31 b(all)g(axes)g(whic)m(h)f(recognises)i(the)f
-(attribute)g(ha)m(v)m(e)g(the)g(attribute)g(v)-5 b(alue)31
-b(cleared.)p 0 5607 1512 4 v 73 5661 a Fs(18)138 5693
-y Fr(An)n(y)24 b(attempt)i(to)g(c)n(hange)g(the)f(System)g(v)l(alue)g
-(of)i(a)f(CmpF)-6 b(rame)26 b(is)g(ignored.)p eop end
-%%Page: 103 113
-TeXDict begin 103 112 bop 3643 52 a FF(103)0 351 y Fz(12)135
-b(An)44 b(In)l(tro)t(duction)h(to)g(Co)t(ordinate)h(System)g(Con)l(v)l
-(ersions)0 616 y FF(In)20 b(this)i(section,)i(w)m(e)e(start)f(to)h(lo)s
-(ok)g(at)g(tec)m(hniques)g(for)f(con)m(v)m(erting)i(b)s(et)m(w)m(een)f
-(di\013eren)m(t)f(co)s(ordinate)h(systems.)0 729 y(A)m(t)37
-b(this)f(stage,)j(the)e(to)s(ols)g(w)m(e)f(ha)m(v)m(e)i(a)m(v)-5
-b(ailable)38 b(are)f(F)-8 b(rames)36 b(\()p Fu(x)p FF(7\),)k(SkyF)-8
-b(rames)36 b(\()p Fu(x)p FF(8\),)j(Sp)s(ecF)-8 b(rames)37
-b(\()p Fu(x)p FF(9\),)0 842 y(TimeF)-8 b(rames)22 b(\()p
-Fu(x)p FF(10\))h(and)d(v)-5 b(arious)21 b(Mappings)g(\()p
-Fu(x)p FF(5\).)39 b(These)21 b(are)g(su\016cien)m(t)h(to)g(allo)m(w)g
-(us)f(to)g(b)s(egin)g(examining)0 955 y(the)31 b(problem,)f(but)f(more)
-i(sophisticated)g(approac)m(hes)g(will)g(also)g(emerge)h(later)f(\()p
-Fu(x)p FF(14.2\).)0 1276 y Fw(12.1)112 b(Con)m(v)m(erting)38
-b(b)s(et)m(w)m(een)g(Celestial)g(Co)s(ordinate)g(Systems)0
-1510 y FF(W)-8 b(e)39 b(b)s(egin)e(b)m(y)h(examining)g(ho)m(w)g(to)h
-(con)m(v)m(ert)g(b)s(et)m(w)m(een)g(t)m(w)m(o)g(celestial)h(co)s
-(ordinate)f(systems)e(represen)m(ted)0 1623 y(b)m(y)32
-b(SkyF)-8 b(rames,)33 b(as)g(this)f(is)g(b)s(oth)g(an)g(illuminating)h
-(and)e(practical)j(example.)47 b(Consider)31 b(the)i(problem)e(of)0
-1736 y(con)m(v)m(erting)h(celestial)h(co)s(ordinates)e(b)s(et)m(w)m
-(een:)111 2023 y(1.)46 b(The)24 b(old)h(FK4)g(system,)h(with)e(no)h(E)f
-(terms,)i(a)f(Besselian)h(ep)s(o)s(c)m(h)e(of)h(1958.0)i(and)d(a)h
-(Besselian)h(equino)m(x)227 2136 y(of)31 b(1960.0.)111
-2340 y(2.)46 b(An)40 b(ecliptic)i(co)s(ordinate)g(system)e(based)g(on)g
-(the)h(mean)f(equino)m(x)h(and)f(ecliptic)i(of)f(Julian)f(ep)s(o)s(c)m
-(h)227 2453 y(2010.5.)0 2740 y(This)24 b(example)h(is)f(arbitrary)g
-(but)g(not)h(completely)h(unrealistic.)39 b(Unless)25
-b(y)m(ou)f(already)h(ha)m(v)m(e)h(exp)s(ertise)f(with)0
-2853 y(suc)m(h)30 b(con)m(v)m(ersions,)i(y)m(ou)f(are)f(unlik)m(ely)h
-(to)g(\014nd)e(it)i(straigh)m(tforw)m(ard.)0 3024 y(Using)43
-b(AST,)g(w)m(e)h(b)s(egin)e(b)m(y)h(creating)i(t)m(w)m(o)f(SkyF)-8
-b(rames)44 b(to)g(represen)m(t)f(these)h(co)s(ordinate)g(systems,)i(as)
-0 3137 y(follo)m(ws:)227 3411 y Ft(#include)41 b("ast.h")227
-3511 y(AstSkyFrame)e(*skyframe1,)g(*skyframe2;)227 3710
-y(...)227 3910 y(skyframe1)h(=)j(astSkyFrame\()c("System=FK4-NO-E)o(,)e
-(Epoch=B1958,)i(Equinox=B1960")f(\);)227 4009 y(skyframe2)i(=)j
-(astSkyFrame\()c("System=Ecliptic)o(,)e(Equinox=J2010.5")g(\);)0
-4297 y FF(Note)30 b(ho)m(w)f(sp)s(ecifying)f(the)h(co)s(ordinate)h
-(systems)f(consists)g(simply)f(of)h(initialising)h(the)f(attributes)g
-(of)g(eac)m(h)0 4409 y(SkyF)-8 b(rame)27 b(appropriately)-8
-b(.)40 b(The)26 b(next)h(step)f(is)h(to)g(\014nd)e(a)i(w)m(a)m(y)g(of)g
-(con)m(v)m(erting)h(b)s(et)m(w)m(een)f(these)g(SkyF)-8
-b(rames.)0 4522 y(This)30 b(is)g(done)g(using)g(astCon)m(v)m(ert,)i(as)
-f(follo)m(ws:)227 4796 y Ft(AstFrameSet)39 b(*cvt;)227
-4996 y(...)227 5195 y(cvt)k(=)g(astConvert\()c(skyframe1,)g(skyframe2,)
-h("")i(\);)227 5295 y(if)h(\()g(cvt)g(==)f(AST__NULL)e(\))j({)358
-5394 y(<conversion)c(is)k(not)f(possible>)227 5494 y(})h(else)f({)358
-5593 y(<conversion)d(is)k(possible>)227 5693 y(})p eop
-end
-%%Page: 104 114
-TeXDict begin 104 113 bop 0 52 a FF(104)609 b Fy(12)92
-b(AN)31 b(INTR)m(ODUCTION)e(TO)h(COORDINA)-8 b(TE)30
-b(SYSTEM)f(CONVERSIONS)0 351 y FF(The)h(third)f(argumen)m(t)i(of)g
-(astCon)m(v)m(ert)h(is)e(not)h(used)e(here)h(and)g(should)g(b)s(e)f(an)
-i(empt)m(y)f(string.)0 511 y(astCon)m(v)m(ert)45 b(will)e(return)f(a)h
-(n)m(ull)g(result,)j(AST)p Fq(__)p FF(NULL)c(\(as)i(de\014ned)e(in)g
-(the)i(\\ast.h")g(header)f(\014le\),)j(if)0 624 y(con)m(v)m(ersion)32
-b(is)f(not)g(p)s(ossible.)42 b(In)31 b(this)f(example,)i(con)m(v)m
-(ersion)h(is)e(p)s(ossible,)g(so)g(it)g(will)h(return)d(a)j(p)s(oin)m
-(ter)f(to)0 736 y(a)g(new)f(Ob)5 b(ject)30 b(that)h(describ)s(es)f(the)
-g(con)m(v)m(ersion.)0 896 y(The)g(Ob)5 b(ject)31 b(returned)f(is)h
-(called)h(a)f(F)-8 b(rameSet.)43 b(W)-8 b(e)32 b(ha)m(v)m(e)h(not)e
-(discussed)f(F)-8 b(rameSets)31 b(y)m(et)h(\()p Fu(x)p
-FF(13\),)i(but)c(for)0 1009 y(the)25 b(presen)m(t)h(purp)s(oses)d(w)m
-(e)j(can)f(consider)h(them)f(simply)g(as)g(Ob)5 b(jects)25
-b(that)h(can)g(b)s(eha)m(v)m(e)g(b)s(oth)e(as)i(Mappings)0
-1122 y(and)k(as)g(F)-8 b(rames.)42 b(It)30 b(is)g(the)g(F)-8
-b(rameSet's)32 b(b)s(eha)m(viour)e(as)g(a)h(Mapping)f(in)g(whic)m(h)g
-(w)m(e)g(are)h(mainly)f(in)m(terested)0 1235 y(here,)d(b)s(ecause)g
-(the)f(Mapping)h(it)g(implemen)m(ts)g(is)f(the)h(one)f(w)m(e)h
-(require|)p Fx(i.e.)f FF(it)h(con)m(v)m(erts)g(b)s(et)m(w)m(een)h(the)e
-(t)m(w)m(o)0 1347 y(celestial)33 b(co)s(ordinate)e(systems)g(\()p
-Fu(x)p FF(14.1\).)0 1507 y(F)-8 b(or)32 b(example,)h(if)f(\\alpha1")g
-(and)f(\\delta1")j(are)e(t)m(w)m(o)h(arra)m(ys)f(con)m(taining)h(the)f
-(longitude)g(and)f(latitude,)i(in)0 1620 y(radians,)24
-b(of)e(N)h(p)s(oin)m(ts)f(on)h(the)f(sky)h(in)f(the)g(original)i(co)s
-(ordinate)f(system)g(\(corresp)s(onding)f(to)h(\\skyframe1"\),)0
-1733 y(then)32 b(they)h(could)g(b)s(e)e(con)m(v)m(erted)k(in)m(to)e
-(the)g(new)f(co)s(ordinate)h(system)g(\(represen)m(ted)g(b)m(y)f
-(\\skyframe2"\))i(as)0 1846 y(follo)m(ws:)227 2081 y
-Ft(#define)41 b(N)i(10)227 2181 y(double)e(alpha1[)g(N)i(],)g(delta1[)e
-(N)i(];)227 2280 y(double)e(alpha2[)g(N)i(],)g(delta2[)e(N)i(];)227
-2480 y(...)227 2679 y(astTran2\()d(cvt,)i(N,)h(alpha1,)e(delta1,)f(1,)j
-(alpha2,)e(delta2)g(\);)0 2928 y FF(The)32 b(new)h(co)s(ordinates)g
-(are)h(returned)e Fx(via)h FF(the)g(\\alpha2")h(and)e(\\delta2")k(arra)
-m(ys.)48 b(T)-8 b(o)34 b(transform)e(co)s(ordi-)0 3041
-y(nates)c(in)f(the)g(opp)s(osite)h(direction,)h(w)m(e)e(simply)g(in)m
-(v)m(ert)i(the)e(5th)h(\(b)s(o)s(olean)f(in)m(t\))i(argumen)m(t)e(to)h
-(astT)-8 b(ran2,)29 b(as)0 3154 y(follo)m(ws:)227 3389
-y Ft(astTran2\()40 b(cvt,)i(N,)h(alpha2,)e(delta2,)f(0,)j(alpha1,)e
-(delta1)g(\);)0 3638 y FF(The)33 b(F)-8 b(rameSet)34
-b(returned)f(b)m(y)g(astCon)m(v)m(ert)i(also)f(con)m(tains)g
-(information)g(ab)s(out)f(the)h(SkyF)-8 b(rames)33 b(used)g(in)0
-3751 y(the)k(con)m(v)m(ersion)h(\()p Fu(x)p FF(14.1\).)64
-b(As)36 b(w)m(e)i(men)m(tioned)f(ab)s(o)m(v)m(e,)j(a)e(F)-8
-b(rameSet)38 b(ma)m(y)g(b)s(e)e(used)g(as)h(a)h(F)-8
-b(rame)37 b(and)g(in)0 3864 y(this)30 b(case)h(it)f(b)s(eha)m(v)m(es)g
-(lik)m(e)h(the)f(\\destination")i(F)-8 b(rame)31 b(used)e(in)g(the)h
-(con)m(v)m(ersion)h(\()p Fx(i.e.)f FF(lik)m(e)h(\\skyframe2"\).)0
-3977 y(W)-8 b(e)33 b(could)g(therefore)f(use)g(the)h(\\cvt")h(F)-8
-b(rameSet)33 b(to)g(calculate)i(the)d(distance)h(b)s(et)m(w)m(een)g(t)m
-(w)m(o)g(p)s(oin)m(ts)f(\(with)0 4090 y(co)s(ordinates)f(in)f
-(radians\))g(in)g(the)h(destination)g(co)s(ordinate)g(system,)g(using)f
-(astDistance:)227 4325 y Ft(double)41 b(distance,)f(point1[)h(2)i(],)g
-(point2[)e(2)i(];)227 4524 y(...)227 4724 y(distance)e(=)i
-(astDistance\()38 b(cvt,)k(point1,)f(point2)g(\);)0 4973
-y FF(and)30 b(the)g(result)h(w)m(ould)f(b)s(e)g(the)g(same)h(as)f(if)h
-(the)f(\\skyframe2")i(SkyF)-8 b(rame)31 b(had)e(b)s(een)h(used.)0
-5132 y(Another)35 b(w)m(a)m(y)i(to)f(see)g(ho)m(w)f(the)h(F)-8
-b(rameSet)37 b(pro)s(duced)c(b)m(y)j(astCon)m(v)m(ert)h(retains)e
-(information)h(ab)s(out)f(the)0 5245 y(co)s(ordinate)29
-b(systems)g(in)m(v)m(olv)m(ed)h(is)f(to)g(set)g(its)g(Rep)s(ort)f
-(attribute)i(\(inherited)e(from)g(the)h(Mapping)g(class\))g(so)0
-5358 y(that)i(it)g(displa)m(ys)f(the)h(co)s(ordinates)g(b)s(efore)f
-(and)g(after)h(con)m(v)m(ersion)g(\()p Fu(x)p FF(4.8\):)227
-5593 y Ft(astSet\()41 b(cvt,)h("Report=1")d(\);)227 5693
-y(astTran2\()h(cvt,)i(N,)h(alpha1,)e(delta1,)f(1,)j(alpha2,)e(delta2)g
-(\);)p eop end
-%%Page: 105 115
-TeXDict begin 105 114 bop 0 52 a Fy(12.2)93 b(Con)m(v)m(erting)31
-b(b)s(et)m(w)m(een)g(Sp)s(ectral)f(Co)s(ordinate)h(Systems)1421
-b FF(105)0 351 y(The)30 b(output)g(from)g(this)g(migh)m(t)h(lo)s(ok)g
-(lik)m(e)h(the)e(follo)m(wing:)227 618 y Fq(\(2:06:03.0,)45
-b(34:22:39\))g(-->)i(\(42.1087,)e(20.2717\))227 731 y(\(2:08:20.6,)g
-(35:31:24\))g(-->)i(\(43.0197,)e(21.1705\))227 844 y(\(2:10:38.1,)g
-(36:40:09\))g(-->)i(\(43.9295,)e(22.0716\))227 957 y(\(2:12:55.6,)g
-(37:48:55\))g(-->)i(\(44.8382,)e(22.9753\))227 1070 y(\(2:15:13.1,)g
-(38:57:40\))g(-->)i(\(45.7459,)e(23.8814\))227 1183 y(\(2:17:30.6,)g
-(40:06:25\))g(-->)i(\(46.6528,)e(24.7901\))227 1296 y(\(2:19:48.1,)g
-(41:15:11\))g(-->)i(\(47.5589,)e(25.7013\))227 1409 y(\(2:22:05.6,)g
-(42:23:56\))g(-->)i(\(48.4644,)e(26.6149\))227 1522 y(\(2:24:23.1,)g
-(43:32:41\))g(-->)i(\(49.3695,)e(27.5311\))227 1635 y(\(2:26:40.6,)g
-(44:41:27\))g(-->)i(\(50.2742,)e(28.4499\))0 1902 y FF(Here,)i(w)m(e)d
-(see)g(that)g(the)g(input)e(FK4)i(equatorial)h(co)s(ordinate)f(v)-5
-b(alues)44 b(\(giv)m(en)g(in)f(radians\))h(ha)m(v)m(e)g(b)s(een)0
-2015 y(formatted)24 b(automatically)i(in)e(sexagesimal)h(notation)g
-(using)e(the)h(con)m(v)m(en)m(tional)i(hours)c(for)i(righ)m(t)g
-(ascension)0 2128 y(and)35 b(degrees)i(for)f(declination.)58
-b(Con)m(v)m(ersely)-8 b(,)39 b(the)d(output)g(ecliptic)i(co)s
-(ordinates)e(are)h(sho)m(wn)e(in)g(decimal)0 2241 y(degrees,)25
-b(as)f(is)f(con)m(v)m(en)m(tional)j(for)d(ecliptic)i(co)s(ordinates.)39
-b(Both)24 b(are)f(displa)m(y)m(ed)h(using)f(the)g(default)g(precision)0
-2354 y(of)31 b(7)f(digits.)421 2321 y Fv(19)0 2518 y
-FF(In)j(fact,)j(the)e(\\cvt")i(F)-8 b(rameSet)35 b(has)f(access)h(to)g
-(all)f(the)g(information)h(in)e(the)h(original)i(SkyF)-8
-b(rames)34 b(whic)m(h)0 2631 y(w)m(ere)g(passed)f(to)h(astCon)m(v)m
-(ert.)51 b(If)33 b(y)m(ou)g(had)g(set)h(a)g(new)e(Digits)j(attribute)f
-(v)-5 b(alue)34 b(for)f(either)h(of)f(these,)i(the)0
-2744 y(formatting)f(ab)s(o)m(v)m(e)g(w)m(ould)f(re\015ect)h(the)f
-(di\013eren)m(t)h(precision)f(y)m(ou)h(requested)f(b)m(y)g(displa)m
-(ying)h(a)f(greater)h(or)0 2857 y(smaller)d(n)m(um)m(b)s(er)e(of)h
-(digits.)0 3155 y Fw(12.2)112 b(Con)m(v)m(erting)38 b(b)s(et)m(w)m(een)
-g(Sp)s(ectral)f(Co)s(ordinate)i(Systems)0 3379 y FF(The)44
-b(principles)h(describ)s(ed)e(in)i(the)g(previous)f(section)i(for)f
-(con)m(v)m(erting)i(b)s(et)m(w)m(een)e(celestial)j(co)s(ordinate)0
-3492 y(systems)21 b(also)h(apply)f(to)h(the)f(task)h(of)f(con)m(v)m
-(erting)i(b)s(et)m(w)m(een)f(sp)s(ectral)g(co)s(ordinate)g(systems.)37
-b(As)21 b(an)h(example,)0 3605 y(let's)28 b(lo)s(ok)f(at)h(ho)m(w)f(w)m
-(e)g(migh)m(t)h(con)m(v)m(ert)g(b)s(et)m(w)m(een)g(frequency)e
-(measured)g(in)h Fo(GH)7 b(z)31 b FF(as)c(measured)g(in)f(the)h(rest)0
-3718 y(frame)22 b(of)g(the)g(telescop)s(e,)j(and)c(radio)h(v)m(elo)s
-(cit)m(y)i(measured)d(in)h Fo(k)s(m=s)g FF(measured)f(with)g(resp)s
-(ect)h(the)g(kinematic)0 3831 y(Lo)s(cal)31 b(Standard)e(of)i(Rest.)0
-3995 y(First)i(w)m(e)g(create)h(a)f(default)g(Sp)s(ecF)-8
-b(rame,)34 b(and)e(then)h(set)g(its)g(attributes)g(to)g(describ)s(e)g
-(the)f(required)g(radio)0 4108 y(v)m(elo)s(cit)m(y)d(system)e(\(this)g
-(is)g(sligh)m(tly)h(more)f(con)m(v)m(enien)m(t,)j(giv)m(en)e(the)f
-(relativ)m(ely)i(large)f(n)m(um)m(b)s(er)e(of)h(attributes,)0
-4221 y(than)g(sp)s(ecifying)f(the)i(attribute)f(v)-5
-b(alues)28 b(in)e(a)i(single)f(string)g(suc)m(h)g(as)g(w)m(ould)g(b)s
-(e)f(passed)g(to)i(the)f(Sp)s(ecF)-8 b(rame)0 4334 y(constructor\).)49
-b(W)-8 b(e)34 b(then)f(tak)m(e)h(a)f(cop)m(y)h(of)f(this)g(Sp)s(ecF)-8
-b(rame,)34 b(and)e(c)m(hange)i(the)f(attribute)h(v)-5
-b(alues)33 b(so)g(that)0 4447 y(the)d(cop)m(y)g(describ)s(es)f(the)h
-(original)h(frequency)e(system)h(\(mo)s(difying)f(a)i(cop)m(y)-8
-b(,)31 b(rather)e(than)h(creating)h(a)f(new)0 4560 y(Sp)s(ecF)-8
-b(rame)32 b(from)g(scratc)m(h,)h(a)m(v)m(oids)h(the)e(need)g(to)h(sp)s
-(ecify)e(the)h(ep)s(o)s(c)m(h,)h(reference)f(p)s(osition,)h
-Fx(etc)k FF(a)32 b(second)0 4673 y(time)f(since)g(they)f(are)h(all)g
-(inherited)f(b)m(y)h(the)f(cop)m(y\):)227 4927 y Ft(#include)41
-b("ast.h")227 5026 y(AstSpecFrame)e(*specframe1,)g(*specframe2;)227
-5225 y(...)227 5425 y(specframe1)h(=)j(astSpecFrame\()38
-b("")43 b(\);)227 5524 y(astSet\()e(specframe1,)e("System=vradio")e
-(\);)p 0 5607 1512 4 v 73 5661 a Fs(19)138 5693 y Fr(The)26
-b(leading)h(digit)f(is)g(zero)g(and)g(is)g(therefore)g(not)g(seen)g(in)
-f(this)h(particular)h(example.)p eop end
-%%Page: 106 116
-TeXDict begin 106 115 bop 0 52 a FF(106)609 b Fy(12)92
-b(AN)31 b(INTR)m(ODUCTION)e(TO)h(COORDINA)-8 b(TE)30
-b(SYSTEM)f(CONVERSIONS)227 351 y Ft(astSet\()41 b(specframe1,)e
-("Unit=km/s")g(\);)227 451 y(astSet\()i(specframe1,)e("Epoch=1996-Oct-)
-o(2)f(12:13:56.985")g(\);)227 551 y(astSet\()j(specframe1,)e
-("ObsLon=W155:28:)o(18")e(\);)227 650 y(astSet\()k(specframe1,)e
-("ObsLat=N19:49:3)o(4")e(\);)227 750 y(astSet\()k(specframe1,)e
-("RefRA=18:14:50.)o(6")e(\);)227 849 y(astSet\()k(specframe1,)e
-("RefDec=-4:40:49)o(")f(\);)227 949 y(astSet\()j(specframe1,)e
-("RestFreq=230.53)o(8)f(GHz")j(\);)227 1049 y(astSet\()g(specframe1,)e
-("StdOfRest=LSRK")e(\);)227 1248 y(specframe2)j(=)j(astCopy\()d
-(specframe1)g(\);)227 1348 y(astSet\()h(specframe1,)e("System=freq")f
-(\);)227 1447 y(astSet\()j(specframe1,)e("Unit=GHz")g(\);)227
-1547 y(astSet\()i(specframe1,)e("StdOfRest=Topoc)o(ent)o(ri)o(c")e(\);)
-0 1854 y FF(Note,)44 b(the)c(fact)h(that)f(a)h(Sp)s(ecF)-8
-b(rame)40 b(has)g(only)g(a)g(single)g(axis)h(means)f(that)g(w)m(e)h(w)m
-(ere)f(able)g(to)h(refer)f(to)0 1967 y(the)33 b(Unit)g(attribute)h
-(without)f(an)f(axis)i(index.)47 b(The)33 b(other)g(attributes)g(are:)
-46 b(the)33 b(time)h(of)f(of)g(observ)-5 b(ation)0 2080
-y(\(Ep)s(o)s(c)m(h\),)43 b(the)d(geographical)i(p)s(osition)e(of)h(the)
-f(telescop)s(e)i(\(ObsLat)e(&)g(ObsLon\),)h(the)g(p)s(osition)f(of)g
-(the)0 2193 y(source)c(on)f(the)h(sky)f(\(RefRA)h(&)f(RefDec\),)k(the)c
-(rest)h(frequency)f(\(RestF)-8 b(req\))37 b(and)e(the)h(standard)f(of)g
-(rest)0 2306 y(\(StdOfRest\).)0 2455 y(The)24 b(next)h(step)g(is)f(to)i
-(\014nd)d(a)i(w)m(a)m(y)g(of)g(con)m(v)m(erting)h(b)s(et)m(w)m(een)g
-(these)f(Sp)s(ecF)-8 b(rames.)39 b(W)-8 b(e)26 b(use)e(exactly)i(the)f
-(same)0 2568 y(co)s(de)30 b(that)h(w)m(e)f(did)f(in)h(the)g(previous)f
-(section)j(where)d(w)m(e)h(w)m(ere)h(con)m(v)m(erting)h(b)s(et)m(w)m
-(een)e(celestial)j(co)s(ordinate)0 2681 y(systems:)227
-2875 y Ft(AstFrameSet)39 b(*cvt;)227 3074 y(...)227 3274
-y(cvt)k(=)g(astConvert\()c(specframe1,)g(specframe2,)g("")k(\);)227
-3373 y(if)g(\()g(cvt)g(==)f(AST__NULL)e(\))j({)358 3473
-y(<conversion)c(is)k(not)f(possible>)227 3572 y(})h(else)f({)358
-3672 y(<conversion)d(is)k(possible>)227 3772 y(})0 3979
-y FF(A)29 b(b)s(efore,)h(this)f(will)h(giv)m(e)h(us)d(a)i(F)-8
-b(rameSet)30 b(\(assuming)g(con)m(v)m(ersion)g(is)g(p)s(ossible,)f
-(whic)m(h)g(should)f(alw)m(a)m(ys)j(b)s(e)0 4092 y(the)36
-b(case)i(for)d(our)h(example\),)j(and)c(w)m(e)i(can)f(use)g(the)h(F)-8
-b(rameSet)37 b(to)g(con)m(v)m(ert)h(b)s(et)m(w)m(een)e(the)h(t)m(w)m(o)
-g(sp)s(ectral)0 4205 y(co)s(ordinate)31 b(systems.)40
-b(W)-8 b(e)32 b(use)d(astT)-8 b(ran1)31 b(in)f(place)h(of)f(astT)-8
-b(ran2)31 b(since)f(a)g(Sp)s(ecF)-8 b(rame)31 b(has)f(only)g(one)g
-(axis)0 4318 y(\(unlik)m(e)h(a)g(SkyF)-8 b(rame)31 b(whic)m(h)f(has)g
-(t)m(w)m(o\).)0 4467 y(F)-8 b(or)44 b(example,)k(if)43
-b(\\frq")h(is)f(an)h(arra)m(y)g(con)m(taining)h(the)e(observ)m(ed)h
-(frequency)-8 b(,)47 b(in)c(GHz,)48 b(of)c(N)f(sp)s(ectral)0
-4580 y(c)m(hannels)f(\(describ)s(e)g(b)m(y)g(\\sp)s(ecframe1"\),)47
-b(then)41 b(they)i(could)f(b)s(e)f(con)m(v)m(erted)j(in)m(to)f(the)f
-(new)g(co)s(ordinate)0 4693 y(system)31 b(\(represen)m(ted)f(b)m(y)g
-(\\sp)s(ecframe2"\))i(as)f(follo)m(ws:)227 4888 y Ft(#define)41
-b(N)i(10)227 4987 y(double)e(frq[)h(N)h(];)227 5087 y(double)e(vel[)h
-(N)h(];)227 5286 y(...)227 5485 y(astTran1\()d(cvt,)i(N,)h(frq,)f(1,)h
-(vel)f(\);)0 5693 y FF(The)30 b(radio)g(v)m(elo)s(cit)m(y)j(v)-5
-b(alues)31 b(are)g(returned)e(in)h(the)h(\\v)m(el")h(arra)m(y)-8
-b(.)p eop end
-%%Page: 107 117
-TeXDict begin 107 116 bop 0 52 a Fy(12.3)93 b(Con)m(v)m(erting)31
-b(b)s(et)m(w)m(een)g(Time)f(Co)s(ordinate)h(Systems)1540
-b FF(107)0 351 y Fw(12.3)112 b(Con)m(v)m(erting)38 b(b)s(et)m(w)m(een)g
-(Time)g(Co)s(ordinate)g(Systems)0 571 y FF(All)d(the)f(principles)f
-(outlined)h(in)g(the)g(previous)f(section)i(ab)s(out)f(aligning)h(sp)s
-(ectral)f(co)s(cordinate)h(systems)0 684 y(\(Sp)s(ecF)-8
-b(rames\))26 b(can)g(b)s(e)f(applied)g(directly)i(to)f(the)g(problem)e
-(of)i(aligning)h(time)f(co)s(ordinate)g(systems)g(\(Time-)0
-797 y(F)-8 b(rames\).)0 1088 y Fw(12.4)112 b(Handling)39
-b(SkyF)-9 b(rame)39 b(Axis)e(P)m(erm)m(utations)0 1307
-y FF(W)-8 b(e)25 b(can)e(illustrate)i(an)e(imp)s(ortan)m(t)h(p)s(oin)m
-(t)f(if)g(w)m(e)h(sw)m(ap)g(the)f(axis)h(order)f(of)g(either)h(SkyF)-8
-b(rame)24 b(in)f(the)h(example)0 1420 y(ab)s(o)m(v)m(e)33
-b(\()p Fu(x)p FF(12.1\))h(b)s(efore)d(iden)m(tifying)h(the)f(con)m(v)m
-(ersion.)45 b(Let's)32 b(assume)f(w)m(e)h(use)f(astP)m(ermAxes)i(\()p
-Fu(x)p FF(7.9\))g(to)g(do)0 1533 y(this)d(to)h(the)g(second)f(SkyF)-8
-b(rame,)31 b(b)s(efore)f(applying)h(astCon)m(v)m(ert,)h(as)e(follo)m
-(ws:)227 1776 y Ft(int)43 b(perm[)e(2)i(])g(=)h({)f(2,)g(1)g(};)227
-1975 y(...)227 2174 y(astPermAxes\()c(skyframe2,)g(perm)j(\);)227
-2274 y(cvt)h(=)g(astConvert\()c(skyframe1,)g(skyframe2,)h("")i(\);)0
-2530 y FF(No)m(w,)31 b(the)g(destination)g(SkyF)-8 b(rame)31
-b(system)f(no)h(longer)g(represen)m(ts)f(the)g(co)s(ordinate)i(system:)
-227 2785 y(\(ecliptic)h(longitude,)e(ecliptic)h(latitude\))0
-3041 y(but)e(instead)g(represen)m(ts)h(the)f(transp)s(osed)f(system:)
-227 3297 y(\(ecliptic)k(latitude,)e(ecliptic)i(longitude\))0
-3553 y(As)39 b(a)h(consequence,)j(when)38 b(w)m(e)i(use)f(the)h(F)-8
-b(rameSet)40 b(returned)f(b)m(y)g(astCon)m(v)m(ert)i(to)f(apply)f(a)h
-(co)s(ordinate)0 3666 y(transformation,)31 b(w)m(e)g(obtain)g
-(something)f(lik)m(e)i(the)f(follo)m(wing:)227 3921 y
-Fq(\(2:06:03.0,)45 b(34:22:39\))g(-->)i(\(20.2717,)e(42.1087\))227
-4034 y(\(2:08:20.6,)g(35:31:24\))g(-->)i(\(21.1705,)e(43.0197\))227
-4147 y(\(2:10:38.1,)g(36:40:09\))g(-->)i(\(22.0716,)e(43.9295\))227
-4260 y(\(2:12:55.6,)g(37:48:55\))g(-->)i(\(22.9753,)e(44.8382\))227
-4373 y(\(2:15:13.1,)g(38:57:40\))g(-->)i(\(23.8814,)e(45.7459\))227
-4486 y(\(2:17:30.6,)g(40:06:25\))g(-->)i(\(24.7901,)e(46.6528\))227
-4599 y(\(2:19:48.1,)g(41:15:11\))g(-->)i(\(25.7013,)e(47.5589\))227
-4712 y(\(2:22:05.6,)g(42:23:56\))g(-->)i(\(26.6149,)e(48.4644\))227
-4825 y(\(2:24:23.1,)g(43:32:41\))g(-->)i(\(27.5311,)e(49.3695\))227
-4937 y(\(2:26:40.6,)g(44:41:27\))g(-->)i(\(28.4499,)e(50.2742\))0
-5193 y FF(When)29 b(compared)h(to)g(the)f(original)i(\()p
-Fu(x)p FF(12.1\),)i(the)c(output)g(co)s(ordinate)h(order)f(has)h(b)s
-(een)e(sw)m(app)s(ed)g(to)j(com-)0 5306 y(p)s(ensate)f(for)g(the)h
-(di\013eren)m(t)g(destination)g(SkyF)-8 b(rame)31 b(axis)g(order.)0
-5467 y(In)j(all,)i(there)f(are)g(four)e(p)s(ossible)h(axis)h(com)m
-(binations,)i(corresp)s(onding)c(to)i(t)m(w)m(o)h(p)s(ossible)e(axis)h
-(orders)f(for)0 5580 y(eac)m(h)j(of)g(the)f(source)h(and)f(destination)
-h(SkyF)-8 b(rames,)38 b(and)e(astCon)m(v)m(ert)i(will)e(con)m(v)m(ert)i
-(correctly)g(b)s(et)m(w)m(een)0 5693 y(an)m(y)c(of)g(these.)52
-b(The)33 b(p)s(oin)m(t)h(to)g(note)h(is)e(that)i(a)f(SkyF)-8
-b(rame)34 b(con)m(tains)h(kno)m(wledge)g(ab)s(out)f(ho)m(w)f(to)i(con)m
-(v)m(ert)p eop end
-%%Page: 108 118
-TeXDict begin 108 117 bop 0 52 a FF(108)609 b Fy(12)92
-b(AN)31 b(INTR)m(ODUCTION)e(TO)h(COORDINA)-8 b(TE)30
-b(SYSTEM)f(CONVERSIONS)0 351 y FF(to)35 b(and)e(from)g(other)h(SkyF)-8
-b(rames.)52 b(Since)34 b(its)g(t)m(w)m(o)h(axes)g(\(longitude)g(and)e
-(latitude\))i(are)f(distinguishable,)0 464 y(the)d(con)m(v)m(ersion)g
-(is)g(able)g(to)g(tak)m(e)h(accoun)m(t)g(of)e(the)h(axis)f(order.)0
-629 y(If)j(y)m(ou)h(need)f(to)h(iden)m(tify)g(the)g(axes)g(of)f(a)h
-(SkyF)-8 b(rame)34 b(explicitly)-8 b(,)36 b(taking)f(in)m(to)f(accoun)m
-(t)h(an)m(y)f(axis)f(p)s(erm)m(u-)0 742 y(tations,)e(the)f(LatAxis)h
-(and)e(LonAxis)h(attributes)g(can)g(b)s(e)f(used.)40
-b(These)29 b(are)h(read-only)g(attributes)h(whic)m(h)0
-855 y(giv)m(e)h(the)e(indices)h(of)f(the)h(latitude)g(and)f(longitude)h
-(axes)g(resp)s(ectiv)m(ely)-8 b(.)0 1154 y Fw(12.5)112
-b(Con)m(v)m(erting)38 b(Bet)m(w)m(een)f(F)-9 b(rames)0
-1378 y FF(Ha)m(ving)39 b(seen)f(ho)m(w)h(clev)m(er)g(SkyF)-8
-b(rames)38 b(are)h(\()p Fu(x)p FF(12.1)h(and)e Fu(x)p
-FF(12.4\),)k(w)m(e)d(will)f(next)g(examine)h(ho)m(w)f(dum)m(b)f(a)0
-1491 y(basic)28 b(F)-8 b(rame)29 b(can)f(b)s(e)f(in)h(comparison.)40
-b(F)-8 b(or)28 b(example,)i(if)d(w)m(e)i(create)g(t)m(w)m(o)g
-(2-dimensional)g(F)-8 b(rames)29 b(and)e(use)0 1604 y(astCon)m(v)m(ert)
-32 b(to)f(deriv)m(e)g(a)g(con)m(v)m(ersion)g(b)s(et)m(w)m(een)g(them,)g
-(as)g(follo)m(ws:)227 1858 y Ft(AstFrame)41 b(*frame1,)f(*frame2;)227
-2058 y(...)227 2257 y(frame1)h(=)j(astFrame\()39 b(2,)k("")g(\);)227
-2357 y(frame2)e(=)j(astFrame\()39 b(2,)k("")g(\);)227
-2456 y(cvt)g(=)g(astConvert\()c(frame1,)i(frame2,)f("")j(\);)0
-2724 y FF(then)30 b(the)h(co)s(ordinate)g(transformation)g(whic)m(h)f
-(the)g(\\cvt")i(F)-8 b(rameSet)32 b(p)s(erforms)d(will)h(b)s(e)g(as)h
-(follo)m(ws:)227 2992 y Fq(\(1,)47 b(2\))g(-->)g(\(1,)g(2\))227
-3105 y(\(2,)g(4\))g(-->)g(\(2,)g(4\))227 3218 y(\(3,)g(6\))g(-->)g
-(\(3,)g(6\))227 3331 y(\(4,)g(8\))g(-->)g(\(4,)g(8\))227
-3443 y(\(5,)g(10\))g(-->)g(\(5,)g(10\))0 3711 y FF(This)31
-b(is)i(an)f(iden)m(tit)m(y)i(transformation,)f(exactly)h(the)e(same)h
-(as)g(a)f(UnitMap)h(\()p Fu(x)p FF(5.9\).)49 b(Ev)m(en)32
-b(if)g(w)m(e)h(p)s(erm)m(ute)0 3824 y(the)i(axis)h(order)e(of)h(our)g
-(F)-8 b(rames,)37 b(as)e(w)m(e)h(did)e(ab)s(o)m(v)m(e)i(\()p
-Fu(x)p FF(12.4\),)j(w)m(e)d(will)f(fare)g(no)g(b)s(etter.)55
-b(The)34 b(con)m(v)m(ersion)0 3937 y(b)s(et)m(w)m(een)d(our)f(t)m(w)m
-(o)i(basic)e(F)-8 b(rames)32 b(will)e(alw)m(a)m(ys)i(b)s(e)e(an)g(iden)
-m(tit)m(y)i(transformation.)0 4102 y(The)k(reason)h(for)f(this)h(is)f
-(that,)j(unlik)m(e)e(a)g(SkyF)-8 b(rame,)39 b(all)e(basic)g(F)-8
-b(rames)37 b(start)g(life)h(the)e(same)h(and)f(ha)m(v)m(e)0
-4215 y(axes)h(that)f(are)g(indistinguishable.)57 b(Therefore,)38
-b(p)s(erm)m(uting)d(their)h(axes)g(do)s(esn't)g(mak)m(e)h(them)f(lo)s
-(ok)g(an)m(y)0 4327 y(di\013eren)m(t|they)31 b(still)g(represen)m(t)g
-(the)f(same)h(co)s(ordinate)g(system.)0 4627 y Fw(12.6)112
-b(The)38 b(Choice)g(of)f(Alignmen)m(t)h(System)0 4851
-y FF(In)25 b(practice,)j(when)c(AST)h(is)g(ask)m(ed)h(to)g(\014nd)e(a)i
-(con)m(v)m(ersion)g(b)s(et)m(w)m(een)g(t)m(w)m(o)h(F)-8
-b(rames)26 b(describing)f(t)m(w)m(o)i(di\013eren)m(t)0
-4964 y(co)s(ordinate)40 b(systems)g(on)f(a)h(giv)m(en)g(ph)m(ysical)g
-(domain,)i(it)e(uses)f(an)g(in)m(termediate)i(\\alignmen)m(t")h
-(system.)0 5077 y(Th)m(us,)28 b(when)g(\014nding)g(a)h(con)m(v)m
-(ersion)h(from)e(system)h(A)g(to)h(system)f(B,)g(AST)f(\014rst)g
-(\014nds)f(the)i(Mapping)g(from)0 5190 y(system)g(A)f(to)i(some)e
-(alignmen)m(t)i(system,)g(system)e(C,)h(and)f(then)g(\014nds)f(the)h
-(Mapping)h(from)f(this)g(system)h(C)0 5303 y(to)j(the)g(required)f
-(system)g(B.)i(It)e(\014nally)h(concatenates)i(these)e(t)m(w)m(o)g
-(Mappings)g(to)g(get)h(the)e(Mapping)h(from)0 5416 y(system)f(A)f(to)h
-(system)g(B.)0 5580 y(One)23 b(adv)-5 b(an)m(tage)26
-b(of)e(this)f(is)h(that)g(it)g(cuts)g(do)m(wn)f(the)h(n)m(um)m(b)s(er)e
-(of)i(con)m(v)m(ersion)h(algorithms)f(required.)38 b(If)23
-b(there)0 5693 y(are)31 b Fo(N)41 b FF(di\013eren)m(t)32
-b(Systems)e(whic)m(h)h(ma)m(y)h(b)s(e)e(used)g(to)i(describ)s(e)e(p)s
-(ositions)h(within)g(the)g(Domain,)h(then)f(this)p eop
-end
-%%Page: 109 119
-TeXDict begin 109 118 bop 0 52 a Fy(12.6)93 b(The)29
-b(Choice)i(of)g(Alignmen)m(t)g(System)2072 b FF(109)0
-351 y(approac)m(h)35 b(requires)e(ab)s(out)i(2)23 b Fu(\003)g
-Fo(N)44 b FF(con)m(v)m(ersion)36 b(algorithms)f(to)g(b)s(e)f(written.)
-53 b(The)33 b(alternativ)m(e)k(approac)m(h)0 464 y(of)29
-b(going)i(directly)f(from)e(system)i(A)f(to)h(system)f(B)h(w)m(ould)f
-(require)g(ab)s(out)g Fo(N)e Fu(\003)19 b Fo(N)39 b FF(con)m(v)m
-(ersion)30 b(algorithms.)0 627 y(In)c(addition,)i(the)g(use)e(of)h(an)g
-(in)m(termediate)i(alignmen)m(t)f(system)f(highligh)m(ts)h(the)f
-(nature)g(of)g(the)g(con)m(v)m(ersion)0 740 y(pro)s(cess.)57
-b(What)37 b(do)f(w)m(e)h(mean)f(b)m(y)g(sa)m(ying)h(that)f(a)h(Mapping)
-f(\\con)m(v)m(erts)i(a)e(p)s(osition)g(in)g(one)h(co)s(ordinate)0
-853 y(system)e(in)m(to)h(the)f(corresp)s(onding)f(p)s(osition)h(in)g
-(another"?)54 b(In)35 b(practice,)i(it)f(means)e(that)i(the)f(input)f
-(and)0 966 y(output)h(co)s(ordinates)i(corresp)s(ond)d(to)j(the)f(same)
-g(co)s(ordinates)g Fx(in)i(some)g(thir)-5 b(d)39 b(c)-5
-b(o)g(or)g(dinate)40 b(system)p FF(.)58 b(The)0 1079
-y(c)m(hoice)31 b(of)e(this)f(third)g(co)s(ordinate)i(system,)g(the)f
-(\\alignmen)m(t")i(system,)e(can)g(completely)i(alter)f(the)f(nature)0
-1191 y(of)38 b(the)g(Mapping.)62 b(The)37 b(F)-8 b(rame)39
-b(class)f(has)g(an)f(attribute)i(called)f(AlignSystem)h(whic)m(h)e(can)
-h(b)s(e)f(used)g(to)0 1304 y(sp)s(ecify)30 b(the)h(alignmen)m(t)g
-(system.)0 1467 y(As)i(an)g(example,)i(consider)e(the)g(case)h(of)f
-(aligning)h(t)m(w)m(o)h(sp)s(ectra)e(calibrated)h(in)f(radio)g(v)m(elo)
-s(cit)m(y)-8 b(,)37 b(but)32 b(eac)m(h)0 1580 y(with)26
-b(a)g(di\013eren)m(t)g(rest)g(frequency)g(\(eac)m(h)h(sp)s(ectrum)e
-(will)h(b)s(e)g(describ)s(ed)e(b)m(y)i(a)g(Sp)s(ecF)-8
-b(rame\).)40 b(Since)26 b(the)g(rest)0 1693 y(frequencies)h(di\013er,)g
-(a)g(giv)m(en)h(v)m(elo)s(cit)m(y)h(will)e(corresp)s(ond)f(to)i
-(di\013eren)m(t)f(frequencies)g(in)f(the)h(t)m(w)m(o)h(sp)s(ectra.)40
-b(So)0 1806 y(when)34 b(w)m(e)i(come)g(to)g(\\align")h(these)f(t)m(w)m
-(o)g(sp)s(ectra)g(\(that)g(is,)g(\014nd)e(a)i(Mapping)f(whic)m(h)g(con)
-m(v)m(erts)i(p)s(ositions)0 1919 y(in)d(one)h(Sp)s(ecF)-8
-b(rame)34 b(to)h(the)g(corresp)s(onding)e(p)s(ositions)i(in)f(the)g
-(other\),)j(w)m(e)d(ha)m(v)m(e)i(the)f(c)m(hoice)h(of)e(aligning)0
-2032 y(the)d(frequencies)g(or)g(aligning)h(the)f(v)m(elo)s(cities.)44
-b(Di\013eren)m(t)32 b(Mappings)f(will)g(b)s(e)f(required)g(to)i
-(describ)s(e)e(these)0 2145 y(t)m(w)m(o)i(forms)f(of)g(alignmen)m(t.)45
-b(If)30 b(w)m(e)i(set)g(AlignSystem)f(to)h(\\F)-8 b(req")33
-b(then)e(the)g(returned)f(Mapping)h(will)h(align)0 2257
-y(the)e(frequencies)h(describ)s(ed)e(b)m(y)h(the)g(t)m(w)m(o)h(Sp)s
-(ecF)-8 b(rames.)41 b(On)30 b(the)g(other)g(hand,)g(if)g(w)m(e)g(set)h
-(AlignSystem)g(to)0 2370 y(\\V)-8 b(radio")32 b(then)e(the)h(returned)e
-(Mapping)h(will)h(align)g(the)g(v)m(elo)s(cities.)0 2533
-y(Some)e(c)m(hoices)i(of)e(alignmen)m(t)i(system)e(are)h(redundan)m(t.)
-39 b(F)-8 b(or)29 b(instance,)i(in)e(the)g(ab)s(o)m(v)m(e)h(example,)h
-(c)m(hanging)0 2646 y(the)i(alignmen)m(t)i(system)e(from)g(frequency)g
-(to)h(w)m(a)m(v)m(elength)h(has)e(no)g(e\013ect)i(on)e(the)g(returned)f
-(Mapping:)46 b(if)0 2759 y(t)m(w)m(o)27 b(sp)s(ectra)f(are)g(aligned)g
-(in)g(frequency)f(they)h(will)g(also)h(b)s(e)e(aligned)h(in)g(w)m(a)m
-(v)m(elength)i(\(assuming)d(the)h(sp)s(eed)0 2872 y(of)31
-b(ligh)m(t)g(do)s(esn't)f(c)m(hange\).)0 3035 y(The)d(default)g(v)-5
-b(alue)28 b(for)f(AlignSystem)h(dep)s(ends)e(on)h(the)g(class)h(of)g(F)
--8 b(rame.)40 b(F)-8 b(or)29 b(a)e(Sp)s(ecF)-8 b(rame,)29
-b(the)e(default)0 3147 y(is)41 b(w)m(a)m(v)m(elength)j(\(or)e(equiv)-5
-b(alen)m(tly)d(,)46 b(frequency\))c(since)f(this)g(is)h(the)f(system)h
-(in)f(whic)m(h)g(observ)-5 b(ations)42 b(are)0 3260 y(usually)34
-b(made.)53 b(The)34 b(Sp)s(ecF)-8 b(rame)34 b(class)h(also)h(has)e(an)g
-(attribute)h(called)h(AlignStdOfRest)e(whic)m(h)g(allo)m(ws)0
-3373 y(the)j(standard)g(of)g(rest)h(of)f(the)h(alignmen)m(t)g(system)g
-(to)g(b)s(e)e(sp)s(eci\014ed.)61 b(Similarly)-8 b(,)40
-b(the)d(TimeF)-8 b(rame)39 b(class)0 3486 y(has)31 b(an)h(attribute)h
-(called)g(AlignTimeScale)g(whic)m(h)e(allo)m(ws)i(the)f(time)h(scale)g
-(of)f(the)g(alignmen)m(t)h(system)f(to)0 3599 y(b)s(e)d(sp)s
-(eci\014ed.)40 b(Curren)m(tly)-8 b(,)30 b(the)g(SkyF)-8
-b(rame)31 b(uses)e(ICRS)g(as)h(the)g(default)g(for)g(AlignSystem,)h
-(since)f(this)g(is)g(a)0 3712 y(close)i(appro)m(ximation)f(to)g(an)f
-(inertial)i(frame)e(of)h(rest.)p eop end
-%%Page: 110 120
-TeXDict begin 110 119 bop 0 52 a FF(110)609 b Fy(12)92
-b(AN)31 b(INTR)m(ODUCTION)e(TO)h(COORDINA)-8 b(TE)30
-b(SYSTEM)f(CONVERSIONS)p eop end
-%%Page: 111 121
-TeXDict begin 111 120 bop 3643 52 a FF(111)0 351 y Fz(13)135
-b(Co)t(ordinate)46 b(System)f(Net)l(w)l(orks)i(\(F)-11
-b(rameSets\))0 591 y FF(W)j(e)41 b(sa)m(w)g(in)f Fu(x)p
-FF(12)h(ho)m(w)g(astCon)m(v)m(ert)h(could)e(b)s(e)f(used)h(to)h(\014nd)
-e(a)h(Mapping)g(that)h(in)m(ter-relates)i(a)d(pair)g(of)0
-704 y(co)s(ordinate)f(systems)g(represen)m(ted)f(b)m(y)h(F)-8
-b(rames.)66 b(There)38 b(is)g(a)h(limitation)h(to)g(this,)g(ho)m(w)m
-(ev)m(er,)j(in)38 b(that)h(it)0 817 y(can)h(only)f(b)s(e)g(applied)g
-(to)h(co)s(ordinate)g(systems)g(that)g(are)f(in)m(ter-related)i(b)m(y)f
-(suitable)g(con)m(v)m(en)m(tions.)69 b(In)0 930 y(the)38
-b(case)h(of)f(celestial)j(co)s(ordinates,)g(the)d(relev)-5
-b(an)m(t)39 b(con)m(v)m(en)m(tions)h(are)e(standards)f(set)i(out)f(b)m
-(y)g(the)g(In)m(ter-)0 1043 y(national)c(Astronomical)g(Union,)f(and)f
-(others,)h(that)g(de\014ne)f(what)g(these)h(co)s(ordinate)h(systems)e
-(mean.)47 b(In)0 1156 y(practice,)28 b(ho)m(w)m(ev)m(er,)h(the)c
-(relationships)h(b)s(et)m(w)m(een)h(man)m(y)f(other)g(co)s(ordinate)g
-(systems)g(are)g(also)h(of)f(practical)0 1269 y(imp)s(ortance.)0
-1418 y(Consider,)k(for)h(example,)h(the)f(fo)s(cal)h(plane)f(of)g(a)g
-(telescop)s(e)i(up)s(on)c(whic)m(h)i(an)f(image)j(of)e(the)g(sky)f(is)h
-(falling.)0 1531 y(W)-8 b(e)29 b(could)f(measure)g(p)s(ositions)g(in)f
-(this)h(fo)s(cal)h(plane)f(in)g(millimetres)h(or,)f(if)g(there)g(w)m
-(ere)h(a)f(detector)h(system)0 1644 y(suc)m(h)i(as)g(a)g(CCD)g(presen)m
-(t,)g(w)m(e)h(could)f(coun)m(t)g(pixels.)43 b(W)-8 b(e)32
-b(could)f(also)h(use)f(celestial)j(co)s(ordinates)d(of)g(man)m(y)0
-1757 y(di\013eren)m(t)h(kinds.)43 b(All)32 b(of)g(these)f(systems)h
-(are)g(equiv)-5 b(alen)m(t)33 b(in)e(their)g(e\013ectiv)m(eness)j(at)e
-(sp)s(ecifying)g(p)s(ositions)0 1870 y(in)e(the)h(fo)s(cal)g(plane,)f
-(but)g(some)h(are)g(more)f(con)m(v)m(enien)m(t)j(than)d(others)g(for)g
-(particular)h(purp)s(oses.)0 2020 y(Although)38 b(w)m(e)g(could,)h(in)f
-(principle,)h(con)m(v)m(ert)g(b)s(et)m(w)m(een)f(all)h(of)f(these)g(fo)
-s(cal)g(plane)g(co)s(ordinate)g(systems,)0 2133 y(there)27
-b(is)h(no)f(pre-de\014ned)f(con)m(v)m(en)m(tion)j(for)e(doing)h(so.)40
-b(This)26 b(is)h(b)s(ecause)h(the)f(con)m(v)m(ersions)i(required)d(dep)
-s(end)0 2246 y(on)37 b(where)f(the)h(telescop)s(e)h(is)f(p)s(oin)m
-(ting)g(and)f(ho)m(w)h(the)g(CCD)f(is)h(moun)m(ted)f(in)h(the)g(fo)s
-(cal)g(plane.)60 b(Clearly)-8 b(,)0 2358 y(kno)m(wledge)31
-b(ab)s(out)e(this)g(cannot)h(b)s(e)f(built)h(in)m(to)g(the)g(AST)f
-(library)g(and)g(m)m(ust)g(b)s(e)g(supplied)f(in)h(some)h(other)0
-2471 y(w)m(a)m(y)-8 b(.)41 b(Note)27 b(that)g(this)g(is)f(exactly)i
-(the)e(same)h(problem)f(as)g(w)m(e)h(met)g(in)f Fu(x)p
-FF(7.12)i(when)d(discussing)h(the)h(Domain)0 2584 y(attribute|)p
-Fx(i.e.)36 b FF(co)s(ordinate)h(systems)f(that)g(apply)g(to)h
-(di\013eren)m(t)f(ph)m(ysical)h(domains)e(require)h(that)h(extra)0
-2697 y(information)31 b(b)s(e)e(supplied)h(b)s(efore)f(w)m(e)i(can)g
-(con)m(v)m(ert)h(b)s(et)m(w)m(een)f(them.)0 2847 y(What)f(w)m(e)f
-(need,)g(therefore,)h(is)f(a)g(general)h(w)m(a)m(y)g(to)f(describ)s(e)g
-(ho)m(w)g(co)s(ordinate)g(systems)g(are)g(in)m(ter-related,)0
-2960 y(so)h(that)h(when)f(there)g(is)g(no)g(con)m(v)m(en)m(tion)j
-(already)e(in)e(place,)j(w)m(e)f(can)f(de\014ne)g(our)f(o)m(wn.)41
-b(W)-8 b(e)31 b(can)g(then)f(lo)s(ok)0 3073 y(forw)m(ard)37
-b(to)g(con)m(v)m(erting,)k(sa)m(y)-8 b(,)40 b(from)d(pixels)g(in)m(to)h
-(galactic)i(co)s(ordinates)e(and)e Fx(vic)-5 b(e)38 b(versa.)61
-b FF(In)37 b(AST,)f(the)0 3186 y(F)-8 b(rameSet)32 b(class)f(pro)m
-(vides)f(this)g(capabilit)m(y)-8 b(.)0 3460 y Fw(13.1)112
-b(The)38 b(F)-9 b(rameSet)38 b(Mo)s(del)0 3668 y FF(Consider)29
-b(a)h(co)s(ordinate)h(system)f(\(call)i(it)f(n)m(um)m(b)s(er)d(1\))j
-(whic)m(h)f(is)g(represen)m(ted)f(b)m(y)h(a)h(F)-8 b(rame)31
-b(of)f(some)g(kind.)0 3781 y(No)m(w)f(consider)g(a)g(Mapping)g(whic)m
-(h,)g(when)f(applied)g(to)i(the)f(co)s(ordinates)g(in)g(system)g(1)g
-(yields)g(co)s(ordinates)0 3894 y(in)h(another)h(system,)f(n)m(um)m(b)s
-(er)f(2.)42 b(The)29 b(Mapping)i(therefore)g(in)m(ter-relates)h(co)s
-(ordinate)f(systems)g(1)f(and)g(2.)0 4044 y(No)m(w)j(consider)f(a)h
-(second)f(Mapping)g(whic)m(h)g(in)m(ter-relates)j(system)d(1)h(and)e(a)
-i(further)e(co)s(ordinate)i(system,)0 4157 y(n)m(um)m(b)s(er)c(3.)41
-b(If)30 b(w)m(e)h(w)m(an)m(ted)g(to)g(con)m(v)m(ert)h(co)s(ordinates)f
-(b)s(et)m(w)m(een)g(systems)g(2)f(and)g(3,)h(w)m(e)g(could)f(do)h(so)f
-(b)m(y:)111 4368 y(1.)46 b(Applying)30 b(our)g(\014rst)g(Mapping)g(in)g
-(rev)m(erse,)h(so)g(as)g(to)g(con)m(v)m(ert)h(b)s(et)m(w)m(een)f
-(systems)f(2)h(and)f(1.)111 4542 y(2.)46 b(Applying)30
-b(the)h(second)f(Mapping,)h(as)f(giv)m(en,)i(to)f(con)m(v)m(ert)h(b)s
-(et)m(w)m(een)f(systems)f(1)h(and)f(3.)0 4753 y(W)-8
-b(e)24 b(are)f(not)g(limited)h(to)f(three)g(co)s(ordinate)h(systems,)h
-(of)e(course.)38 b(In)22 b(fact,)k(w)m(e)d(could)g(con)m(tin)m(ue)h(to)
-g(in)m(tro)s(duce)0 4866 y(an)m(y)32 b(n)m(um)m(b)s(er)e(of)i(further)e
-(co)s(ordinate)i(systems,)g(so)g(long)g(as)f(w)m(e)h(ha)m(v)m(e)h(a)f
-(suitable)g(Mapping)f(for)h(eac)m(h)g(one)0 4979 y(whic)m(h)f(relates)i
-(it)g(to)f(one)g(of)g(the)g(F)-8 b(rames)32 b(already)g(presen)m(t.)45
-b(Con)m(tin)m(uing)32 b(in)g(this)f(w)m(a)m(y)-8 b(,)34
-b(w)m(e)e(can)g(build)f(up)0 5092 y(a)i(net)m(w)m(ork)g(in)f(whic)m(h)g
-(F)-8 b(rames)33 b(are)g(in)m(ter-related)h(b)m(y)f(Mappings)f(in)g
-(suc)m(h)g(a)h(w)m(a)m(y)g(that)g(there)g(is)f(alw)m(a)m(ys)i(a)0
-5204 y(w)m(a)m(y)d(of)g(con)m(v)m(erting)h(b)s(et)m(w)m(een)f(an)m(y)g
-(pair)f(of)g(co)s(ordinate)i(systems.)0 5354 y(The)38
-b(F)-8 b(rameSet)41 b(\(Figure)e(7\))h(encapsulates)g(these)f(ideas.)67
-b(It)39 b(is)g(a)h(net)m(w)m(ork)f(comp)s(osed)g(of)g(F)-8
-b(rames)40 b(and)0 5467 y(asso)s(ciated)27 b(Mappings,)g(in)e(whic)m(h)
-h(there)g(is)f(alw)m(a)m(ys)j(exactly)f(one)f(path,)h
-Fx(via)f FF(Mappings,)g(b)s(et)m(w)m(een)h(an)m(y)f(pair)0
-5580 y(of)f(F)-8 b(rames.)40 b(Since)25 b(w)m(e)h(assem)m(ble)g(F)-8
-b(rameSets)26 b(ourselv)m(es,)h(they)e(can)g(b)s(e)g(used)f(to)i
-(represen)m(t)f(an)m(y)h(co)s(ordinate)0 5693 y(systems)k(w)m(e)h(c)m
-(ho)s(ose)h(and)d(to)i(set)g(up)f(the)g(particular)h(relationships)g(b)
-s(et)m(w)m(een)g(them)f(that)h(w)m(e)g(w)m(an)m(t.)p
-eop end
-%%Page: 112 122
-TeXDict begin 112 121 bop 0 52 a FF(112)1175 b Fy(13)92
-b(COORDINA)-8 b(TE)30 b(SYSTEM)f(NETW)m(ORKS)h(\(FRAMESETS\))0
-351 y Fw(13.2)112 b(Creating)38 b(a)g(F)-9 b(rameSet)0
-581 y FF(Before)37 b(w)m(e)f(can)h(create)g(a)f(F)-8
-b(rameSet,)39 b(w)m(e)e(m)m(ust)e(ha)m(v)m(e)j(a)e(F)-8
-b(rame)37 b(of)f(some)g(kind)f(to)i(put)e(in)m(to)i(it,)h(so)e(let's)0
-693 y(create)c(a)f(simple)f(one:)227 959 y Ft(#include)41
-b("ast.h")227 1058 y(AstFrame)g(*frame1;)227 1258 y(...)227
-1457 y(frame1)g(=)j(astFrame\()39 b(2,)k("Domain=A")d(\);)0
-1735 y FF(W)-8 b(e)25 b(ha)m(v)m(e)f(set)g(this)g(F)-8
-b(rame's)24 b(Domain)h(attribute)f(\()p Fu(x)p FF(7.12\))i(to)e(A)g(so)
-g(that)g(it)g(will)g(b)s(e)f(distinct)h(from)f(the)g(others)0
-1848 y(w)m(e)31 b(will)g(b)s(e)e(using.)41 b(W)-8 b(e)31
-b(can)g(no)m(w)f(create)i(a)f(new)f(F)-8 b(rameSet)31
-b(con)m(taining)h(just)e(this)g(F)-8 b(rame,)32 b(as)e(follo)m(ws:)227
-2113 y Ft(AstFrameSet)39 b(*frameset;)227 2312 y(...)227
-2512 y(frameset)i(=)i(astFrameSet\()38 b(frame1,)j("")i(\);)0
-2790 y FF(So)30 b(far,)h(ho)m(w)m(ev)m(er,)h(this)e(F)-8
-b(rame)31 b(isn't)g(related)g(to)g(an)m(y)g(others.)0
-3101 y Fw(13.3)112 b(Adding)38 b(New)f(F)-9 b(rames)39
-b(to)e(a)h(F)-9 b(rameSet)0 3331 y FF(W)h(e)40 b(can)f(no)m(w)g(add)f
-(further)g(F)-8 b(rames)40 b(to)f(the)g(F)-8 b(rameSet)41
-b(created)e(ab)s(o)m(v)m(e)i(\()p Fu(x)p FF(13.2\).)69
-b(T)-8 b(o)39 b(do)g(so,)i(w)m(e)f(m)m(ust)0 3444 y(supply)33
-b(a)j(new)e(F)-8 b(rame)36 b(and)e(an)h(asso)s(ciated)h(Mapping)f(that)
-g(relates)i(it)e(to)h(an)m(y)f(of)g(the)g(F)-8 b(rames)36
-b(that)f(are)0 3557 y(already)c(presen)m(t)g(\(there)g(is)g(only)f(one)
-h(presen)m(t)g(so)g(far\).)41 b(T)-8 b(o)31 b(k)m(eep)h(the)f(example)g
-(simple,)g(w)m(e)g(will)g(just)f(use)0 3669 y(a)h(Zo)s(omMap)f(that)h
-(m)m(ultiplies)g(co)s(ordinates)g(b)m(y)g(10.)41 b(The)30
-b(required)g(Ob)5 b(jects)30 b(are)h(created)g(as)g(follo)m(ws:)227
-3935 y Ft(AstFrame)41 b(*frame2;)227 4034 y(AstMapping)f(*mapping12;)
-227 4233 y(...)227 4433 y(frame2)h(=)j(astFrame\()39
-b(2,)k("Domain=B")d(\);)227 4532 y(mapping12)g(=)j(astZoomMap\()c(2,)k
-(10.0,)f("")g(\);)0 4811 y FF(T)-8 b(o)31 b(add)f(the)g(new)g(F)-8
-b(rame)31 b(in)m(to)h(our)e(F)-8 b(rameSet,)31 b(w)m(e)g(use)f(the)h
-(astAddF)-8 b(rame)31 b(function:)227 5076 y Ft(astAddFrame\()39
-b(frameset,)h(1,)j(mapping12,)c(frame2)i(\);)0 5354 y
-FF(Whenev)m(er)36 b(a)g(F)-8 b(rame)37 b(is)e(added)g(to)i(a)f(F)-8
-b(rameSet,)38 b(it)e(is)g(assigned)g(an)f(in)m(teger)i(index.)56
-b(This)35 b(index)g(starts)0 5467 y(with)f(1)i(for)e(the)h(initial)h(F)
--8 b(rame)36 b(used)e(to)h(create)h(the)f(F)-8 b(rameSet)36
-b(\()p Fu(x)p FF(13.2\))i(and)c(incremen)m(ts)h(b)m(y)g(one)g(ev)m(ery)
-0 5580 y(time)f(a)f(new)f(F)-8 b(rame)34 b(is)f(added.)48
-b(This)32 b(index)h(is)g(the)g(primary)f(w)m(a)m(y)i(of)f(iden)m
-(tifying)h(the)f(F)-8 b(rames)34 b(within)e(a)0 5693
-y(F)-8 b(rameSet.)p eop end
-%%Page: 113 123
-TeXDict begin 113 122 bop 0 52 a Fy(13.4)93 b(The)29
-b(Base)j(and)e(Curren)m(t)f(F)-8 b(rames)2185 b FF(113)917
-1810 y @beginspecial 114 @llx 303 @lly 503 @urx 613 @ury
-2334 @rwi @setspecial
-%%BeginDocument: sun211_figures/fsexample.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 114 303 503 613
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/11 14:23:38
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5024.15 5691.35 m
-5024.15 5900.15 4854.95 6070.55 4644.95 6070.55 c
-1581.35 6070.55 l
-1372.55 6070.55 1202.15 5900.15 1202.15 5691.35 c
-1202.15 3418.55 l
-1202.15 3208.55 1372.55 3039.35 1581.35 3039.35 c
-4644.95 3039.35 l
-4854.95 3039.35 5024.15 3208.55 5024.15 3418.55 c
-f*
-1 g
-4959.35 5747.75 m
-4959.35 5955.35 4790.15 6124.55 4582.55 6124.55 c
-1526.15 6124.55 l
-1317.35 6124.55 1148.15 5955.35 1148.15 5747.75 c
-1148.15 3480.95 l
-1148.15 3273.35 1317.35 3104.15 1526.15 3104.15 c
-4581.35 3104.15 l
-4790.15 3104.15 4959.35 3273.35 4959.35 3480.95 c
-f*
-8 w
-1 J
-1 j
-0 g
-4959.35 5747.75 m
-4959.35 5955.35 4790.15 6124.55 4582.55 6124.55 c
-1526.15 6124.55 l
-1317.35 6124.55 1148.15 5955.35 1148.15 5747.75 c
-1148.15 3480.95 l
-1148.15 3273.35 1317.35 3104.15 1526.15 3104.15 c
-4581.35 3104.15 l
-4790.15 3104.15 4959.35 3273.35 4959.35 3480.95 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1563.35 5256.95 l
-1451.75 5256.95 1360.55 5165.75 1360.55 5055.35 c
-1360.55 4917.35 l
-1360.55 4806.95 1451.75 4715.75 1563.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1509.35 5306.15 l
-1400.15 5306.15 1311.35 5218.55 1311.35 5111.75 c
-1311.35 4979.75 l
-1311.35 4872.95 1400.15 4785.35 1509.35 4785.35 c
-1995.35 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-f*
-16 w
-0 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1509.35 5306.15 l
-1400.15 5306.15 1311.35 5218.55 1311.35 5111.75 c
-1311.35 4979.75 l
-1311.35 4872.95 1400.15 4785.35 1509.35 4785.35 c
-1995.35 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-h
-S
-0.201248 i
-1539.33 5152 m
-1425.22 5152 l
-1425.22 5147 l
-1439.11 5146.2 1443 5143.18 1443 5132.72 c
-1443 5035.32 l
-1443 5024.85 1440.17 5022.64 1425.22 5021.03 c
-1425.22 5016 l
-1497.67 5016 l
-1497.67 5021 l
-1479.15 5021.81 1476 5024.23 1476 5035.32 c
-1476 5082.21 l
-1496.22 5081.81 1503.55 5074.36 1506.32 5051.02 c
-1511.35 5051.02 l
-1511.35 5119.04 l
-1506.32 5119.04 l
-1502.76 5096.1 1495.82 5089.05 1476 5089.05 c
-1476 5135.74 l
-1476 5143.19 1478.52 5145 1488.41 5145 c
-1507.13 5145 1518.8 5141.64 1525.04 5134.74 c
-1529.47 5129.71 1531.68 5124.27 1534.5 5111.59 c
-1539.33 5111.59 l
-h
-1544.96 5016 m
-f*
-1589.19 5109 m
-1550.84 5109 l
-1550.84 5103.95 l
-1559.49 5102.74 1562 5100.12 1562 5092.07 c
-1562 5032.9 l
-1562 5024.65 1559.93 5022.44 1550.84 5020.83 c
-1550.84 5016 l
-1604.37 5016 l
-1604.37 5020.83 l
-1592.09 5021.63 1590 5024.25 1590 5036.73 c
-1590 5074.76 l
-1590 5085.23 1595.49 5093.88 1601.95 5093.88 c
-1603.56 5093.88 1605.37 5092.47 1607.59 5089.25 c
-1611.41 5083.82 1614.43 5082.01 1619.66 5082.01 c
-1627.11 5082.01 1632.34 5087.64 1632.34 5095.29 c
-1632.34 5104.55 1625.5 5111.41 1616.04 5111.41 c
-1606.1 5111.41 1598.54 5106.12 1589.19 5092.27 c
-h
-1634.35 5016 m
-f*
-1729.19 5028.88 m
-1727.18 5026.87 l
-1726.57 5026.26 1725.97 5026.06 1724.96 5026.06 c
-1722.15 5026.06 1721 5027.67 1721 5031.09 c
-1721 5083.62 l
-1721 5100.73 1705.6 5111.42 1680.89 5111.42 c
-1658.15 5111.42 1642.85 5101.06 1642.85 5085.83 c
-1642.85 5077.38 1647.69 5072.55 1655.94 5072.55 c
-1663.99 5072.55 1669.62 5077.38 1669.62 5084.22 c
-1669.62 5087.04 1668.61 5089.66 1666 5092.88 c
-1664.19 5094.89 1663.58 5096.1 1663.58 5097.3 c
-1663.58 5101.53 1669.02 5104.42 1676.26 5104.42 c
-1688.14 5104.42 1693.86 5099.08 1693.86 5087.04 c
-1693.86 5072.35 l
-1669.91 5065.1 1660.29 5061.48 1652.51 5056.45 c
-1643.46 5050.41 1639 5043.37 1639 5034.52 c
-1639 5022.24 1648.27 5013.18 1661.17 5013.18 c
-1672.84 5013.18 1682.1 5017.21 1693.17 5027.27 c
-1695.38 5017.01 1699.81 5013.18 1709.67 5013.18 c
-1718.32 5013.18 1724.56 5016.4 1732.21 5024.65 c
-h
-1693 5036.13 m
-1687.55 5029.89 1683.52 5027.47 1678.68 5027.47 c
-1672.64 5027.47 1668 5032.91 1668 5040.96 c
-1668 5052.63 1676.61 5060.88 1693 5065.31 c
-h
-1734.62 5016 m
-f*
-1776.4 5109 m
-1737.7 5109 l
-1737.7 5103.95 l
-1746.55 5102.74 1749 5100.32 1749 5092.07 c
-1749 5032.9 l
-1749 5024.65 1746.74 5022.44 1737.7 5020.83 c
-1737.7 5016 l
-1786 5016 l
-1786 5020.83 l
-1778.95 5021.84 1777 5024.65 1777 5032.3 c
-1777 5086.03 l
-1777 5087.04 1779.87 5090.66 1782.18 5092.88 c
-1786.4 5096.1 1790.02 5098.42 1793.65 5098.42 c
-1801.5 5098.42 1805 5093.59 1805 5081 c
-1805 5032.3 l
-1805 5024.05 1802.68 5021.43 1794.85 5020.83 c
-1794.85 5016 l
-1841.95 5016 l
-1841.95 5020.83 l
-1834.9 5021.64 1833 5024.65 1833 5032.3 c
-1833 5086.03 l
-1833 5087.04 1835.73 5090.46 1837.92 5092.68 c
-1842.35 5096.1 1845.97 5098.42 1849.59 5098.42 c
-1857.24 5098.42 1860 5093.38 1860 5081 c
-1860 5032.3 l
-1860 5023.85 1857.85 5021.43 1850.4 5020.83 c
-1850.4 5016 l
-1898.3 5016 l
-1898.3 5021 l
-1890.45 5021.4 1888 5023.78 1888 5032.3 c
-1888 5082.81 l
-1888 5100.12 1877.43 5111.42 1861.07 5111.42 c
-1849.59 5111.42 1841.95 5106.73 1831.48 5093.68 c
-1825.44 5106.36 1818.4 5111.42 1805.72 5111.42 c
-1792.95 5111.42 1783.98 5105.91 1776.4 5093.68 c
-h
-1901.64 5016 m
-f*
-1979.9 5041.16 m
-1971.65 5031.29 1965.61 5027.18 1956.96 5027.18 c
-1949.31 5027.18 1943.27 5030.77 1939.25 5037.94 c
-1935.43 5044.54 1933.82 5051.56 1933.01 5066 c
-1983.73 5066 l
-1982.52 5082.36 1979.5 5091.43 1973.26 5099.12 c
-1966.82 5106.96 1957.36 5111.42 1946.09 5111.42 c
-1920.94 5111.42 1904.03 5091.4 1904.03 5061.88 c
-1904.03 5032.5 1920.53 5013.18 1945.49 5013.18 c
-1961.79 5013.18 1971.65 5019.42 1984.73 5038.34 c
-h
-1932 5073 m
-1932.61 5096.96 1936.23 5104.42 1946.09 5104.42 c
-1951.93 5104.42 1955.55 5101.38 1957.16 5095.49 c
-1958.17 5091.67 1958.57 5086.03 1958.97 5075.77 c
-1958.97 5073 l
-h
-1988.35 5016 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -5016]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4722.95 4254.95 m
-4722.95 4366.55 4631.75 4457.75 4520.15 4457.75 c
-4023.35 4457.75 l
-3911.75 4457.75 3820.55 4366.55 3820.55 4254.95 c
-3820.55 4118.15 l
-3820.55 4006.55 3911.75 3915.35 4023.35 3915.35 c
-4520.15 3915.35 l
-4631.75 3915.35 4722.95 4006.55 4722.95 4118.15 c
-f*
-1 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-f*
-0 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-h
-S
-0.201248 i
-3999.33 4353 m
-3885.22 4353 l
-3885.22 4348 l
-3899.11 4347.2 3903 4344.18 3903 4333.72 c
-3903 4236.32 l
-3903 4225.85 3900.17 4223.64 3885.22 4222.03 c
-3885.22 4217 l
-3957.67 4217 l
-3957.67 4222 l
-3939.15 4222.81 3936 4225.23 3936 4236.32 c
-3936 4283.21 l
-3956.22 4282.81 3963.55 4275.36 3966.32 4252.02 c
-3971.35 4252.02 l
-3971.35 4320.04 l
-3966.32 4320.04 l
-3962.76 4297.1 3955.82 4290.05 3936 4290.05 c
-3936 4336.74 l
-3936 4344.19 3938.52 4346 3948.41 4346 c
-3967.13 4346 3978.8 4342.64 3985.04 4335.74 c
-3989.47 4330.71 3991.68 4325.27 3994.5 4312.59 c
-3999.33 4312.59 l
-h
-4004.96 4217 m
-f*
-4049.19 4310 m
-4010.84 4310 l
-4010.84 4304.95 l
-4019.49 4303.74 4022 4301.12 4022 4293.07 c
-4022 4233.9 l
-4022 4225.65 4019.93 4223.44 4010.84 4221.83 c
-4010.84 4217 l
-4064.37 4217 l
-4064.37 4221.83 l
-4052.09 4222.63 4050 4225.25 4050 4237.73 c
-4050 4275.76 l
-4050 4286.23 4055.49 4294.88 4061.95 4294.88 c
-4063.56 4294.88 4065.37 4293.47 4067.59 4290.25 c
-4071.41 4284.82 4074.43 4283.01 4079.66 4283.01 c
-4087.11 4283.01 4092.34 4288.64 4092.34 4296.29 c
-4092.34 4305.55 4085.5 4312.41 4076.04 4312.41 c
-4066.1 4312.41 4058.54 4307.12 4049.19 4293.27 c
-h
-4094.35 4217 m
-f*
-4189.19 4229.88 m
-4187.18 4227.87 l
-4186.57 4227.26 4185.97 4227.06 4184.96 4227.06 c
-4182.15 4227.06 4181 4228.67 4181 4232.09 c
-4181 4284.62 l
-4181 4301.73 4165.6 4312.42 4140.89 4312.42 c
-4118.15 4312.42 4102.85 4302.06 4102.85 4286.83 c
-4102.85 4278.38 4107.69 4273.55 4115.94 4273.55 c
-4123.99 4273.55 4129.62 4278.38 4129.62 4285.22 c
-4129.62 4288.04 4128.61 4290.66 4126 4293.88 c
-4124.19 4295.89 4123.58 4297.1 4123.58 4298.3 c
-4123.58 4302.53 4129.02 4305.42 4136.26 4305.42 c
-4148.14 4305.42 4153.86 4300.08 4153.86 4288.04 c
-4153.86 4273.35 l
-4129.91 4266.1 4120.29 4262.48 4112.51 4257.45 c
-4103.46 4251.41 4099 4244.37 4099 4235.52 c
-4099 4223.24 4108.27 4214.18 4121.17 4214.18 c
-4132.84 4214.18 4142.1 4218.21 4153.17 4228.27 c
-4155.38 4218.01 4159.81 4214.18 4169.67 4214.18 c
-4178.32 4214.18 4184.56 4217.4 4192.21 4225.65 c
-h
-4153 4237.13 m
-4147.55 4230.89 4143.52 4228.47 4138.68 4228.47 c
-4132.64 4228.47 4128 4233.91 4128 4241.96 c
-4128 4253.63 4136.61 4261.88 4153 4266.31 c
-h
-4194.62 4217 m
-f*
-4236.4 4310 m
-4197.7 4310 l
-4197.7 4304.95 l
-4206.55 4303.74 4209 4301.32 4209 4293.07 c
-4209 4233.9 l
-4209 4225.65 4206.74 4223.44 4197.7 4221.83 c
-4197.7 4217 l
-4246 4217 l
-4246 4221.83 l
-4238.95 4222.84 4237 4225.65 4237 4233.3 c
-4237 4287.03 l
-4237 4288.04 4239.87 4291.66 4242.18 4293.88 c
-4246.4 4297.1 4250.02 4299.42 4253.65 4299.42 c
-4261.5 4299.42 4265 4294.59 4265 4282 c
-4265 4233.3 l
-4265 4225.05 4262.68 4222.43 4254.85 4221.83 c
-4254.85 4217 l
-4301.95 4217 l
-4301.95 4221.83 l
-4294.9 4222.64 4293 4225.65 4293 4233.3 c
-4293 4287.03 l
-4293 4288.04 4295.73 4291.46 4297.92 4293.68 c
-4302.35 4297.1 4305.97 4299.42 4309.59 4299.42 c
-4317.24 4299.42 4320 4294.38 4320 4282 c
-4320 4233.3 l
-4320 4224.85 4317.85 4222.43 4310.4 4221.83 c
-4310.4 4217 l
-4358.3 4217 l
-4358.3 4222 l
-4350.45 4222.4 4348 4224.78 4348 4233.3 c
-4348 4283.81 l
-4348 4301.12 4337.43 4312.42 4321.07 4312.42 c
-4309.59 4312.42 4301.95 4307.73 4291.48 4294.68 c
-4285.44 4307.36 4278.4 4312.42 4265.72 4312.42 c
-4252.95 4312.42 4243.98 4306.91 4236.4 4294.68 c
-h
-4361.64 4217 m
-f*
-4439.9 4242.16 m
-4431.65 4232.29 4425.61 4228.18 4416.96 4228.18 c
-4409.31 4228.18 4403.27 4231.77 4399.25 4238.94 c
-4395.43 4245.54 4393.82 4252.56 4393.01 4267 c
-4443.73 4267 l
-4442.52 4283.36 4439.5 4292.43 4433.26 4300.12 c
-4426.82 4307.96 4417.36 4312.42 4406.09 4312.42 c
-4380.94 4312.42 4364.03 4292.4 4364.03 4262.88 c
-4364.03 4233.5 4380.53 4214.18 4405.49 4214.18 c
-4421.79 4214.18 4431.65 4220.42 4444.73 4239.34 c
-h
-4392 4274 m
-4392.61 4297.96 4396.23 4305.42 4406.09 4305.42 c
-4411.93 4305.42 4415.55 4302.38 4417.16 4296.49 c
-4418.17 4292.67 4418.57 4287.03 4418.97 4276.77 c
-4418.97 4274 l
-h
-4448.35 4217 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4484 -4215]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3804.95 3548.15 m
-3804.95 3658.55 3713.75 3749.75 3602.15 3749.75 c
-3106.55 3749.75 l
-2994.95 3749.75 2903.75 3658.55 2903.75 3548.15 c
-2903.75 3410.15 l
-2903.75 3299.75 2994.95 3208.55 3106.55 3208.55 c
-3602.15 3208.55 l
-3713.75 3208.55 3804.95 3299.75 3804.95 3410.15 c
-f*
-1 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-f*
-8 w
-0 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-h
-S
-0.201248 i
-3082.33 3645 m
-2968.22 3645 l
-2968.22 3640 l
-2982.11 3639.2 2986 3636.18 2986 3625.72 c
-2986 3528.32 l
-2986 3517.85 2983.17 3515.64 2968.22 3514.03 c
-2968.22 3509 l
-3040.67 3509 l
-3040.67 3514 l
-3022.15 3514.81 3019 3517.23 3019 3528.32 c
-3019 3575.21 l
-3039.22 3574.81 3046.55 3567.36 3049.32 3544.02 c
-3054.35 3544.02 l
-3054.35 3612.04 l
-3049.32 3612.04 l
-3045.76 3589.1 3038.82 3582.05 3019 3582.05 c
-3019 3628.74 l
-3019 3636.19 3021.52 3638 3031.41 3638 c
-3050.13 3638 3061.8 3634.64 3068.04 3627.74 c
-3072.47 3622.71 3074.68 3617.27 3077.5 3604.59 c
-3082.33 3604.59 l
-h
-3087.96 3509 m
-f*
-3131.19 3602 m
-3092.84 3602 l
-3092.84 3596.95 l
-3101.49 3595.74 3104 3593.12 3104 3585.07 c
-3104 3525.9 l
-3104 3517.65 3101.93 3515.44 3092.84 3513.83 c
-3092.84 3509 l
-3146.37 3509 l
-3146.37 3513.83 l
-3134.09 3514.63 3132 3517.25 3132 3529.73 c
-3132 3567.76 l
-3132 3578.23 3137.49 3586.88 3143.95 3586.88 c
-3145.56 3586.88 3147.37 3585.47 3149.59 3582.25 c
-3153.41 3576.82 3156.43 3575.01 3161.66 3575.01 c
-3169.11 3575.01 3174.34 3580.64 3174.34 3588.29 c
-3174.34 3597.55 3167.5 3604.41 3158.04 3604.41 c
-3148.1 3604.41 3140.54 3599.12 3131.19 3585.27 c
-h
-3176.35 3509 m
-f*
-3271.19 3521.88 m
-3269.18 3519.87 l
-3268.57 3519.26 3267.97 3519.06 3266.96 3519.06 c
-3264.15 3519.06 3263 3520.67 3263 3524.09 c
-3263 3576.62 l
-3263 3593.73 3247.6 3604.42 3222.89 3604.42 c
-3200.15 3604.42 3184.85 3594.06 3184.85 3578.83 c
-3184.85 3570.38 3189.69 3565.55 3197.94 3565.55 c
-3205.99 3565.55 3211.62 3570.38 3211.62 3577.22 c
-3211.62 3580.04 3210.61 3582.66 3208 3585.88 c
-3206.19 3587.89 3205.58 3589.1 3205.58 3590.3 c
-3205.58 3594.53 3211.02 3597.42 3218.26 3597.42 c
-3230.14 3597.42 3235.86 3592.08 3235.86 3580.04 c
-3235.86 3565.35 l
-3211.91 3558.1 3202.29 3554.48 3194.51 3549.45 c
-3185.46 3543.41 3181 3536.37 3181 3527.52 c
-3181 3515.24 3190.27 3506.18 3203.17 3506.18 c
-3214.84 3506.18 3224.1 3510.21 3235.17 3520.27 c
-3237.38 3510.01 3241.81 3506.18 3251.67 3506.18 c
-3260.32 3506.18 3266.56 3509.4 3274.21 3517.65 c
-h
-3235 3529.13 m
-3229.55 3522.89 3225.52 3520.47 3220.68 3520.47 c
-3214.64 3520.47 3210 3525.91 3210 3533.96 c
-3210 3545.63 3218.61 3553.88 3235 3558.31 c
-h
-3276.62 3509 m
-f*
-3318.4 3602 m
-3279.7 3602 l
-3279.7 3596.95 l
-3288.55 3595.74 3291 3593.32 3291 3585.07 c
-3291 3525.9 l
-3291 3517.65 3288.74 3515.44 3279.7 3513.83 c
-3279.7 3509 l
-3328 3509 l
-3328 3513.83 l
-3320.95 3514.84 3319 3517.65 3319 3525.3 c
-3319 3579.03 l
-3319 3580.04 3321.87 3583.66 3324.18 3585.88 c
-3328.4 3589.1 3332.02 3591.42 3335.65 3591.42 c
-3343.5 3591.42 3347 3586.59 3347 3574 c
-3347 3525.3 l
-3347 3517.05 3344.68 3514.43 3336.85 3513.83 c
-3336.85 3509 l
-3383.95 3509 l
-3383.95 3513.83 l
-3376.9 3514.64 3375 3517.65 3375 3525.3 c
-3375 3579.03 l
-3375 3580.04 3377.73 3583.46 3379.92 3585.68 c
-3384.35 3589.1 3387.97 3591.42 3391.59 3591.42 c
-3399.24 3591.42 3402 3586.38 3402 3574 c
-3402 3525.3 l
-3402 3516.85 3399.85 3514.43 3392.4 3513.83 c
-3392.4 3509 l
-3440.3 3509 l
-3440.3 3514 l
-3432.45 3514.4 3430 3516.78 3430 3525.3 c
-3430 3575.81 l
-3430 3593.12 3419.43 3604.42 3403.07 3604.42 c
-3391.59 3604.42 3383.95 3599.73 3373.48 3586.68 c
-3367.44 3599.36 3360.4 3604.42 3347.72 3604.42 c
-3334.95 3604.42 3325.98 3598.91 3318.4 3586.68 c
-h
-3443.64 3509 m
-f*
-3523.9 3534.16 m
-3515.65 3524.29 3509.61 3520.18 3500.96 3520.18 c
-3493.31 3520.18 3487.27 3523.77 3483.25 3530.94 c
-3479.43 3537.54 3477.82 3544.56 3477.01 3559 c
-3527.73 3559 l
-3526.52 3575.36 3523.5 3584.43 3517.26 3592.12 c
-3510.82 3599.96 3501.36 3604.42 3490.09 3604.42 c
-3464.94 3604.42 3448.03 3584.4 3448.03 3554.88 c
-3448.03 3525.5 3464.53 3506.18 3489.49 3506.18 c
-3505.79 3506.18 3515.65 3512.42 3528.73 3531.34 c
-h
-3476 3566 m
-3476.61 3589.96 3480.23 3597.42 3490.09 3597.42 c
-3495.93 3597.42 3499.55 3594.38 3501.16 3588.49 c
-3502.17 3584.67 3502.57 3579.03 3502.97 3568.77 c
-3502.97 3566 l
-h
-3532.35 3509 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -3509]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-1751.75 4758.95 m
-1754.15 4599.35 1794.95 4446.95 1865.75 4338.95 c
-S
-1809.35 4346.15 m
-1858.55 4359.35 l
-1884.95 4403.75 l
-1940.15 4253.75 l
-f*
-32 w
-2733.35 5222.15 m
-2644.55 5277.35 2538.95 5307.35 2430.95 5307.35 c
-2345.75 5307.35 2260.55 5288.15 2184.95 5253.35 c
-S
-2630.15 5194.55 m
-2703.35 5234.15 l
-2729.75 5314.55 l
-2870.15 5096.15 l
-f*
-0.564706 g
-2708.15 3969.35 m
-2573.75 4006.55 l
-2669.75 4061.75 l
-2516.15 4071.35 l
-2558.15 4140.95 l
-2410.55 4120.55 l
-2393.75 4192.55 l
-2273.75 4146.95 l
-2198.15 4210.55 l
-2122.55 4146.95 l
-2002.55 4192.55 l
-1984.55 4120.55 l
-1835.75 4140.95 l
-1880.15 4071.35 l
-1726.55 4061.75 l
-1822.55 4006.55 l
-1686.95 3969.35 l
-1822.55 3934.55 l
-1726.55 3878.15 l
-1880.15 3869.75 l
-1835.75 3800.15 l
-1984.55 3819.35 l
-2002.55 3748.55 l
-2122.55 3792.95 l
-2198.15 3729.35 l
-2273.75 3792.95 l
-2393.75 3748.55 l
-2410.55 3819.35 l
-2558.15 3800.15 l
-2516.15 3869.75 l
-2669.75 3878.15 l
-2573.75 3934.55 l
-f*
-1 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-f*
-0 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-2648.15 4029.35 l
-2609.75 4029.35 l
-2487.35 3998.15 l
-2576.15 3946.55 l
-2438.15 3938.15 l
-2478.95 3872.15 l
-2343.35 3891.35 l
-2326.55 3821.75 l
-2211.35 3864.95 l
-2138.15 3802.55 l
-2064.95 3864.95 l
-1949.75 3821.75 l
-1931.75 3891.35 l
-1796.15 3872.15 l
-1836.95 3938.15 l
-1700.15 3946.55 l
-1788.95 3998.15 l
-1666.55 4029.35 l
-1787.75 4061.75 l
-1700.15 4114.55 l
-1836.95 4121.75 l
-1796.15 4188.95 l
-1931.75 4169.75 l
-1949.75 4238.15 l
-2064.95 4196.15 l
-2138.15 4258.55 l
-2211.35 4196.15 l
-2326.55 4238.15 l
-2343.35 4169.75 l
-2478.95 4188.95 l
-2438.15 4121.75 l
-2576.15 4114.55 l
-2487.35 4061.75 l
-2609.75 4029.35 l
-2648.15 4029.35 l
-f*
-q[1 0 0 1 0 0]concat
-105 70 true[1 0 0 1 -1998 -3991]@85 imagemask
-!$D7 at rVup's8W+L
-!!!"Ks8W+L!$D7 at s53kW!<<*!s53lAs8W,o!!!'"s8W,g!.Y%Ks82is!WW3"s6p#<s8W,u!!!'"s8W,o
-!.Y%Ks8Duu!WW3"s7cSDs8W-!!!!'"s8W,s!.Y%Ks8N'!!WW3"s82kHs8W-!!!!'"s8W,s!.Y%Ks8N'!
-!<<*!s82j]s8W-!!!!"Ks8W,s!$D7 at s8N'!!.Y%Ks82j=s8W-!!!!!`s8W,o!"],0s8Duu!"],0s6p!js8W,s!!!!$
-s8W,7!!*'!s6p!g!!#7`s1eU7J,fP!z+92B1!!*'!rr<$!!!!9(s7cQps8W&uz"98E!!!E9$
-qu?]s!!!'"s8N'(s8Vioz!.Y%KJ.M\[n,NFg!!!!`s8V"!s8V!Wz!$D7 at n3?sQ^]4?7!!!!(
-s8VkDs8RTLz!!E9$rr<#uz!!!!"s8W-!s8Duuz!!%NKs8W,szz5QCc`s7cQoz!!!Q0
-s8W,gzz#QOi(s53kWz!!!-$s8W,7zz!<<*!s*t(Lz!!!"Ks8W*!z
-z!'gM`rVuouz!!!!0s8Vuszz!!iQ(qu?]sz!!!!0s8W&uzz!$D7@
-rr<$!z!!!!`s8W,7zz!.Y%Ks53kWz!!!$!s8W,ozz!WW3"s82isz!!!-$s8W,u
-zz#QOi(s8RTLz!!!Q0s8W-!^]4?7z+92B at s8VQgz!!#7`s6'F^p](9oz
-J,fPds8W&uz!!*'!s+14Mrr<$!!!!!"s8W*!J,fP!z!!E9$rW#1_s53kW!!!!(s8Vus&-)\!
-z!"],0p](R!s82is!!!"Ks8VQg!WW3"J,fQL!WW3"p](Ers8VQg!!!-$s8Vus"98E$p](9o"98E$rW!3's8Vus!!!-$s8W*!&-)\0rVuou#QOi(rr<T0s8W*!!!!9(s8W+L&-)\0rr<$!
-#QOi(s*tX[s8W*!!!!-$s8W+L#QOi(rr<$!"98E$s1em>s8W+L!!!'"s8W+L#QOi(s*t(L!WW3"s*t4O
-s8W*!!!!$!s8W+L!WW3"rr<$!!.Y%Krr<'!s8W&u!!!!`s8W&u!.Y%Kqu?]s!"],0p](:9s8VQg~>
-Q
-0.2 i
-2136 3991 m
-f*
-2159.52 4088.28 m
-2163.68 4088.92 2166.56 4089.08 2169.6 4089.08 c
-2174.56 4089.08 2176.96 4087.32 2176.96 4083.8 c
-2176.96 4082.84 2176.64 4081.4 2176.32 4079.96 c
-2155.84 4006.52 l
-2153.12 3997.72 2148.32 3995 2136.8 3995 c
-2136.8 3991 l
-2192 3991 l
-2192 3995 l
-2179.36 3995.15 2176.48 3996.38 2176.48 4002.04 c
-2176.48 4003.64 2176.64 4004.12 2178.4 4010.68 c
-2203.04 4100.28 l
-2188.48 4096.76 2178.24 4094.68 2159.84 4091.96 c
-h
-2216 3991 m
-f*
-2268.32 4100.24 m
-2259.52 4100.24 2250.72 4096.09 2243.52 4088.76 c
-2228.64 4073.4 2219 4047.64 2219 4023.96 c
-2219 4002.68 2229.13 3988.76 2244.32 3988.76 c
-2250.88 3988.76 2257.12 3990.84 2263.04 3995.16 c
-2279.52 4007 2292 4036.28 2292 4061.72 c
-2292 4085.08 2282.69 4100.24 2268.32 4100.24 c
-h
-2268 4095.24 m
-2272.96 4095.24 2276 4091.07 2276 4084.12 c
-2276 4080.92 2275.13 4075.48 2273.92 4069.24 c
-2271.2 4056.28 2263.52 4026.68 2260.16 4016.44 c
-2254.56 3999.8 2249.92 3993.76 2243.2 3993.76 c
-2238.4 3993.76 2235 3997.78 2235 4003.96 c
-2235 4013.88 2243.42 4049.4 2251.04 4070.84 c
-2257.12 4088.76 2261.92 4095.24 2268 4095.24 c
-h
-2296 3991 m
-f*
-1 i
-1 g
-4058.15 4720.55 m
-4139.75 4720.55 l
-4139.75 4569.35 l
-4306.55 4569.35 l
-4306.55 4720.55 l
-4388.15 4720.55 l
-4222.55 4874.15 l
-f*
-0 g
-4058.15 4720.55 m
-4139.75 4720.55 l
-4139.75 4569.35 l
-4306.55 4569.35 l
-4306.55 4720.55 l
-4388.15 4720.55 l
-4222.55 4874.15 l
-4058.15 4720.55 l
-4083.35 4731.35 l
-4222.55 4860.95 l
-4364.15 4731.35 l
-4295.75 4731.35 l
-4295.75 4580.15 l
-4149.35 4580.15 l
-4149.35 4731.35 l
-4083.35 4731.35 l
-4058.15 4720.55 l
-f*
-0.2 i
-3755.26 5012.36 m
-3744.64 5001.2 3738.88 4996.88 3730.06 4993.46 c
-3724.84 4991.3 3718.9 4990.58 3713.86 4990.58 c
-3701.98 4990.58 3690.64 4996.74 3685.42 5005.88 c
-3680.2 5015.42 3678 5028.2 3678 5046.38 c
-3678 5083.64 3689.23 5103.7 3710.8 5103.7 c
-3719.26 5103.7 3727 5100.38 3734.74 5093.36 c
-3742.48 5086.52 3746.62 5080.4 3752.92 5066.72 c
-3757.42 5066.72 l
-3757.42 5109.16 l
-3752.56 5109.16 l
-3749.86 5102.43 3748.06 5100.56 3744.64 5100.56 c
-3742.84 5100.56 3740.5 5101.28 3736.36 5103.08 c
-3725.92 5107.4 3717.1 5109.7 3708.46 5109.7 c
-3672.64 5109.7 3646 5081.84 3646 5044.76 c
-3646 5007.68 3672.21 4981.58 3709.54 4981.58 c
-3730.24 4981.58 3742.48 4987.88 3760.66 5007.86 c
-h
-3766.96 4985 m
-f*
-3830.18 4982.66 m
-3837.78 4985.36 3842.02 4986.08 3853.5 4987.34 c
-3864.66 4988.6 l
-3864.66 4993 l
-3856.74 4993.35 3855 4995.63 3855 5003.18 c
-3855 5068 l
-3818.4 5068 l
-3818.4 5063.66 l
-3827.4 5062.94 3830 5060.78 3830 5053.04 c
-3830 5002.1 l
-3823.88 4996.16 3820.18 4994.48 3814.8 4994.48 c
-3807.42 4994.48 3805 4998 3805 5006.96 c
-3805 5068 l
-3770.88 5068 l
-3770.88 5063.66 l
-3778.26 5062.22 3780 5060.6 3780 5053.04 c
-3780 5007.68 l
-3780 4991.84 3788.89 4982.48 3803.64 4982.48 c
-3813.16 4982.48 3819.56 4985.36 3830.18 4994.36 c
-h
-3868.08 4985 m
-f*
-3906.28 5068 m
-3872.22 5068 l
-3872.22 5063.66 l
-3879.96 5062.58 3882 5060.24 3882 5053.04 c
-3882 5000.12 l
-3882 4992.74 3880.19 4990.76 3872.22 4989.32 c
-3872.22 4985 l
-3920.1 4985 l
-3920.1 4989.32 l
-3909.12 4990.04 3907 4992.38 3907 5003.54 c
-3907 5037.56 l
-3907 5046.92 3912.02 5054.66 3917.94 5054.66 c
-3919.38 5054.66 3921 5053.4 3922.98 5050.52 c
-3926.4 5045.66 3929.1 5044.04 3933.78 5044.04 c
-3940.44 5044.04 3945.12 5049.08 3945.12 5055.92 c
-3945.12 5064.2 3939 5070.16 3930.54 5070.16 c
-3921.55 5070.16 3914.73 5065.47 3906.28 5053.22 c
-h
-3946.92 4985 m
-f*
-3987.28 5068 m
-3953.22 5068 l
-3953.22 5063.66 l
-3960.96 5062.58 3963 5060.24 3963 5053.04 c
-3963 5000.12 l
-3963 4992.74 3961.19 4990.76 3953.22 4989.32 c
-3953.22 4985 l
-4001.1 4985 l
-4001.1 4989.32 l
-3990.12 4990.04 3988 4992.38 3988 5003.54 c
-3988 5037.56 l
-3988 5046.92 3993.02 5054.66 3998.94 5054.66 c
-4000.38 5054.66 4002 5053.4 4003.98 5050.52 c
-4007.4 5045.66 4010.1 5044.04 4014.78 5044.04 c
-4021.44 5044.04 4026.12 5049.08 4026.12 5055.92 c
-4026.12 5064.2 4020 5070.16 4011.54 5070.16 c
-4002.55 5070.16 3995.73 5065.47 3987.28 5053.22 c
-h
-4027.92 4985 m
-f*
-4099.36 5007.5 m
-4091.98 4998.68 4086.58 4995.48 4078.84 4995.48 c
-4072 4995.48 4066.6 4998.53 4063 5004.62 c
-4059.58 5010.36 4058.14 5016.45 4057.42 5029 c
-4102.78 5029 l
-4101.7 5043.99 4099 5052.3 4093.42 5059.34 c
-4087.66 5066.36 4079.2 5070.16 4069.12 5070.16 c
-4046.62 5070.16 4031.5 5052.33 4031.5 5026.04 c
-4031.5 4999.76 4046.26 4982.48 4068.58 4982.48 c
-4083.16 4982.48 4091.98 4988.06 4103.68 5004.98 c
-h
-4056.52 5036 m
-4057.06 5057.42 4060.3 5064.16 4069.12 5064.16 c
-4074.34 5064.16 4077.58 5061.42 4079.02 5056.1 c
-4079.92 5052.68 4080.28 5047.64 4080.64 5038.46 c
-4080.64 5036 l
-h
-4106.92 4985 m
-f*
-4144.82 5068 m
-4110.78 5068 l
-4110.78 5063.66 l
-4118.7 5062.4 4120 5060.6 4120 5053.04 c
-4120 5000.12 l
-4120 4992.56 4118.61 4990.94 4110.78 4989.32 c
-4110.78 4985 l
-4154.16 4985 l
-4154.16 4989.32 l
-4147.5 4990.22 4145 4992.92 4145 4999.58 c
-4145 5047.64 l
-4145 5048.36 4146.4 5050.16 4148.4 5051.96 c
-4152.36 5055.92 4156.68 5058.16 4161 5058.16 c
-4167.12 5058.16 4170 5053.27 4170 5043.14 c
-4170 4999.58 l
-4170 4992.92 4167.71 4990.04 4161.72 4989.32 c
-4161.72 4985 l
-4204.02 4985 l
-4204.02 4989.32 l
-4197 4989.86 4195 4992.02 4195 4999.58 c
-4195 5044.76 l
-4195 5060.24 4185.54 5070.16 4170.9 5070.16 c
-4159.96 5070.16 4151.57 5065.11 4144.82 5054.48 c
-h
-4207.08 4985 m
-f*
-4261.9 5068 m
-4245 5068 l
-4245 5098.4 l
-4240.48 5098.4 l
-4229.5 5082.92 4222.3 5074.82 4210.6 5064.92 c
-4210.6 5060 l
-4220 5060 l
-4220 5001.74 l
-4220 4990.04 4227.73 4982.84 4240.12 4982.84 c
-4252.18 4982.84 4259.38 4988.24 4266.76 5003 c
-4262.26 5004.98 l
-4258.66 4998.14 4255.78 4995.84 4252 4995.84 c
-4246.96 4995.84 4245 4998.83 4245 5005.88 c
-4245 5060 l
-4261.9 5060 l
-h
-4266.94 4985 m
-f*
-4312 4985 m
-f*
-4417.94 5107 m
-4315.88 5107 l
-4315.88 5102 l
-4328.3 5101.29 4332 5098.63 4332 5089.4 c
-4332 5002.28 l
-4332 4992.92 4329.44 4990.94 4315.88 4989.5 c
-4315.88 4985 l
-4380.68 4985 l
-4380.68 4990 l
-4364.12 4990.69 4361 4992.77 4361 5002.28 c
-4361 5044.22 l
-4379.28 5043.86 4385.91 5037.2 4388.42 5016.32 c
-4392.92 5016.32 l
-4392.92 5077.16 l
-4388.42 5077.16 l
-4385.19 5056.64 4378.92 5050.34 4361 5050.34 c
-4361 5092.1 l
-4361 5098.76 4363.32 5101 4372.4 5101 c
-4389.14 5101 4399.58 5097.8 4405.16 5091.2 c
-4409.12 5086.7 4411.1 5081.84 4413.62 5070.5 c
-4417.94 5070.5 l
-h
-4422.98 4985 m
-f*
-4461.28 5068 m
-4427.22 5068 l
-4427.22 5063.66 l
-4434.96 5062.58 4437 5060.24 4437 5053.04 c
-4437 5000.12 l
-4437 4992.74 4435.19 4990.76 4427.22 4989.32 c
-4427.22 4985 l
-4475.1 4985 l
-4475.1 4989.32 l
-4464.12 4990.04 4462 4992.38 4462 5003.54 c
-4462 5037.56 l
-4462 5046.92 4467.02 5054.66 4472.94 5054.66 c
-4474.38 5054.66 4476 5053.4 4477.98 5050.52 c
-4481.4 5045.66 4484.1 5044.04 4488.78 5044.04 c
-4495.44 5044.04 4500.12 5049.08 4500.12 5055.92 c
-4500.12 5064.2 4494 5070.16 4485.54 5070.16 c
-4476.55 5070.16 4469.73 5065.47 4461.28 5053.22 c
-h
-4501.92 4985 m
-f*
-4587.14 4996.52 m
-4585.34 4994.72 l
-4584.8 4994.18 4584.26 4994 4583.36 4994 c
-4580.84 4994 4580 4995.44 4580 4998.5 c
-4580 5045.48 l
-4580 5060.78 4566.16 5070.16 4543.94 5070.16 c
-4523.6 5070.16 4509.92 5060.97 4509.92 5047.46 c
-4509.92 5039.9 4514.24 5035.58 4521.62 5035.58 c
-4528.82 5035.58 4533.86 5039.9 4533.86 5046.02 c
-4533.86 5048.54 4532.96 5050.88 4530.62 5053.76 c
-4529 5055.56 4528.46 5056.64 4528.46 5057.72 c
-4528.46 5061.5 4533.32 5064.16 4539.8 5064.16 c
-4550.42 5064.16 4555 5059.37 4555 5048.54 c
-4555 5035.4 l
-4533.89 5028.92 4525.41 5025.68 4518.56 5021.18 c
-4510.46 5015.78 4507 5009.48 4507 5001.56 c
-4507 4990.58 4515.07 4982.48 4526.3 4982.48 c
-4536.74 4982.48 4545.02 4986.08 4554.92 4995.08 c
-4556.9 4985.9 4560.86 4982.48 4569.68 4982.48 c
-4577.42 4982.48 4583 4985.36 4589.84 4992.74 c
-h
-4555 5003 m
-4550.04 4997.42 4546.37 4995.26 4541.96 4995.26 c
-4536.56 4995.26 4533 5000.12 4533 5007.32 c
-4533 5017.76 4540.57 5025.14 4555 5029.1 c
-h
-4592 4985 m
-f*
-4629.46 5068 m
-4594.73 5068 l
-4594.73 5063.66 l
-4602.65 5062.58 4605 5060.42 4605 5053.04 c
-4605 5000.12 l
-4605 4992.74 4602.95 4990.76 4594.73 4989.32 c
-4594.73 4985 l
-4637.93 4985 l
-4637.93 4989.32 l
-4631.63 4990.22 4630 4992.74 4630 4999.58 c
-4630 5047.64 l
-4630 5048.54 4632.51 5051.78 4634.51 5053.76 c
-4638.29 5056.64 4641.53 5058.16 4644.77 5058.16 c
-4651.79 5058.16 4655 5054 4655 5043.14 c
-4655 4999.58 l
-4655 4992.2 4652.9 4989.86 4645.85 4989.32 c
-4645.85 4985 l
-4687.97 4985 l
-4687.97 4989.32 l
-4681.67 4990.04 4680 4992.74 4680 4999.58 c
-4680 5047.64 l
-4680 5048.54 4682.43 5051.6 4684.37 5053.58 c
-4688.33 5056.64 4691.57 5058.16 4694.81 5058.16 c
-4701.65 5058.16 4704 5053.82 4704 5043.14 c
-4704 4999.58 l
-4704 4992.02 4702.1 4989.86 4695.53 4989.32 c
-4695.53 4985 l
-4738.37 4985 l
-4738.37 4989 l
-4731.35 4989.37 4729 4991.6 4729 4999.58 c
-4729 5044.76 l
-4729 5060.24 4719.6 5070.16 4705.07 5070.16 c
-4694.81 5070.16 4687.97 5066.01 4678.61 5054.48 c
-4673.21 5065.82 4666.91 5070.16 4655.57 5070.16 c
-4644.2 5070.16 4636.21 5065.29 4629.46 5054.48 c
-h
-4741.94 4985 m
-f*
-4814.36 5007.5 m
-4806.98 4998.68 4801.58 4995.48 4793.84 4995.48 c
-4787 4995.48 4781.6 4998.53 4778 5004.62 c
-4774.58 5010.36 4773.14 5016.45 4772.42 5029 c
-4817.78 5029 l
-4816.7 5043.99 4814 5052.3 4808.42 5059.34 c
-4802.66 5066.36 4794.2 5070.16 4784.12 5070.16 c
-4761.62 5070.16 4746.5 5052.33 4746.5 5026.04 c
-4746.5 4999.76 4761.26 4982.48 4783.58 4982.48 c
-4798.16 4982.48 4806.98 4988.06 4818.68 5004.98 c
-h
-4771.52 5036 m
-4772.06 5057.42 4775.3 5064.16 4784.12 5064.16 c
-4789.34 5064.16 4792.58 5061.42 4794.02 5056.1 c
-4794.92 5052.68 4795.28 5047.64 4795.64 5038.46 c
-4795.64 5036 l
-h
-4821.92 4985 m
-f*
-1 i
-3636.95 4949.75 1184.4 15.5999 re
-f
-0.2 i
-1323.88 5932 m
-1323.88 5927 l
-1336.3 5926.29 1340 5923.45 1340 5914.4 c
-1340 5827.28 l
-1340 5818.1 1337.25 5815.94 1323.88 5814.5 c
-1323.88 5810 l
-1381.84 5810 l
-1412.26 5810 1432 5823.5 1432 5843.84 c
-1432 5852.12 1428.73 5859.32 1422.7 5864.9 c
-1416.4 5870.48 1410.28 5873 1397.68 5875.7 c
-1418.56 5881.82 1426 5889.2 1426 5902.88 c
-1426 5921.42 1409.55 5932 1379.5 5932 c
-h
-1369 5871.74 m
-1373.92 5871.74 l
-1392.46 5871.74 1401 5862.2 1401 5842.22 c
-1401 5824.76 1393.77 5816 1379.5 5816 c
-1371.58 5816 1369 5818.99 1369 5826.74 c
-h
-1369 5917.46 m
-1369 5923.94 1371.39 5927 1378.24 5927 c
-1390.84 5927 1397 5919.03 1397 5901.62 c
-1397 5882.72 1391.08 5877.68 1369 5877.14 c
-h
-1441.06 5810 m
-f*
-1526.14 5821.52 m
-1524.34 5819.72 l
-1523.8 5819.18 1523.26 5819 1522.36 5819 c
-1519.84 5819 1519 5820.44 1519 5823.5 c
-1519 5870.48 l
-1519 5885.78 1505.16 5895.16 1482.94 5895.16 c
-1462.6 5895.16 1448.92 5885.97 1448.92 5872.46 c
-1448.92 5864.9 1453.24 5860.58 1460.62 5860.58 c
-1467.82 5860.58 1472.86 5864.9 1472.86 5871.02 c
-1472.86 5873.54 1471.96 5875.88 1469.62 5878.76 c
-1468 5880.56 1467.46 5881.64 1467.46 5882.72 c
-1467.46 5886.5 1472.32 5889.16 1478.8 5889.16 c
-1489.42 5889.16 1494 5884.37 1494 5873.54 c
-1494 5860.4 l
-1472.89 5853.92 1464.41 5850.68 1457.56 5846.18 c
-1449.46 5840.78 1446 5834.48 1446 5826.56 c
-1446 5815.58 1454.07 5807.48 1465.3 5807.48 c
-1475.74 5807.48 1484.02 5811.08 1493.92 5820.08 c
-1495.9 5810.9 1499.86 5807.48 1508.68 5807.48 c
-1516.42 5807.48 1522 5810.36 1528.84 5817.74 c
-h
-1494 5828 m
-1489.04 5822.42 1485.37 5820.26 1480.96 5820.26 c
-1475.56 5820.26 1472 5825.12 1472 5832.32 c
-1472 5842.76 1479.57 5850.14 1494 5854.1 c
-h
-1531 5810 m
-f*
-1592.22 5868.68 m
-1592.22 5894.8 l
-1588.24 5894.8 l
-1587.16 5892.08 1586.08 5891.2 1583.74 5891.2 c
-1582.66 5891.2 1581.04 5891.55 1578.16 5892.44 c
-1572.4 5894.42 1568.26 5895.16 1564.12 5895.16 c
-1547.74 5895.16 1536 5883.99 1536 5868.86 c
-1536 5856.98 1543.34 5848.7 1561.42 5840.96 c
-1573.84 5835.56 1579 5831.06 1579 5825.3 c
-1579 5818.28 1573.48 5813.48 1565.2 5813.48 c
-1552.6 5813.48 1544.32 5821.62 1540.54 5837.36 c
-1535.5 5837.36 l
-1535.5 5807.66 l
-1540 5807.66 l
-1541.98 5811.44 1543.06 5812.7 1544.68 5812.7 c
-1545.58 5812.7 1547.02 5812.34 1548.82 5811.62 c
-1554.04 5809.46 1563.22 5807.48 1568.26 5807.48 c
-1584.64 5807.48 1596 5818.64 1596 5834.84 c
-1596 5847.62 1589.15 5855.54 1571.14 5862.92 c
-1558.9 5868.14 1554 5872.64 1554 5878.76 c
-1554 5884.7 1558.98 5889.16 1565.74 5889.16 c
-1570.6 5889.16 1575.28 5887.19 1579.24 5883.44 c
-1583.02 5879.84 1585 5876.42 1587.7 5868.68 c
-h
-1601.02 5810 m
-f*
-1673.36 5832.5 m
-1665.98 5823.68 1660.58 5820.48 1652.84 5820.48 c
-1646 5820.48 1640.6 5823.53 1637 5829.62 c
-1633.58 5835.36 1632.14 5841.45 1631.42 5854 c
-1676.78 5854 l
-1675.7 5868.99 1673 5877.3 1667.42 5884.34 c
-1661.66 5891.36 1653.2 5895.16 1643.12 5895.16 c
-1620.62 5895.16 1605.5 5877.33 1605.5 5851.04 c
-1605.5 5824.76 1620.26 5807.48 1642.58 5807.48 c
-1657.16 5807.48 1665.98 5813.06 1677.68 5829.98 c
-h
-1630.52 5861 m
-1631.06 5882.42 1634.3 5889.16 1643.12 5889.16 c
-1648.34 5889.16 1651.58 5886.42 1653.02 5881.1 c
-1653.92 5877.68 1654.28 5872.64 1654.64 5863.46 c
-1654.64 5861 l
-h
-1680.92 5810 m
-f*
-1726 5810 m
-f*
-1831.94 5932 m
-1729.88 5932 l
-1729.88 5927 l
-1742.3 5926.29 1746 5923.63 1746 5914.4 c
-1746 5827.28 l
-1746 5817.92 1743.44 5815.94 1729.88 5814.5 c
-1729.88 5810 l
-1794.68 5810 l
-1794.68 5815 l
-1778.12 5815.69 1775 5817.77 1775 5827.28 c
-1775 5869.22 l
-1793.28 5868.86 1799.91 5862.2 1802.42 5841.32 c
-1806.92 5841.32 l
-1806.92 5902.16 l
-1802.42 5902.16 l
-1799.19 5881.64 1792.92 5875.34 1775 5875.34 c
-1775 5917.1 l
-1775 5923.76 1777.32 5926 1786.4 5926 c
-1803.14 5926 1813.58 5922.8 1819.16 5916.2 c
-1823.12 5911.7 1825.1 5906.84 1827.62 5895.5 c
-1831.94 5895.5 l
-h
-1836.98 5810 m
-f*
-1875.28 5893 m
-1841.22 5893 l
-1841.22 5888.66 l
-1848.96 5887.58 1851 5885.24 1851 5878.04 c
-1851 5825.12 l
-1851 5817.74 1849.19 5815.76 1841.22 5814.32 c
-1841.22 5810 l
-1889.1 5810 l
-1889.1 5814.32 l
-1878.12 5815.04 1876 5817.38 1876 5828.54 c
-1876 5862.56 l
-1876 5871.92 1881.02 5879.66 1886.94 5879.66 c
-1888.38 5879.66 1890 5878.4 1891.98 5875.52 c
-1895.4 5870.66 1898.1 5869.04 1902.78 5869.04 c
-1909.44 5869.04 1914.12 5874.08 1914.12 5880.92 c
-1914.12 5889.2 1908 5895.16 1899.54 5895.16 c
-1890.55 5895.16 1883.73 5890.47 1875.28 5878.22 c
-h
-1915.92 5810 m
-f*
-2001.14 5821.52 m
-1999.34 5819.72 l
-1998.8 5819.18 1998.26 5819 1997.36 5819 c
-1994.84 5819 1994 5820.44 1994 5823.5 c
-1994 5870.48 l
-1994 5885.78 1980.16 5895.16 1957.94 5895.16 c
-1937.6 5895.16 1923.92 5885.97 1923.92 5872.46 c
-1923.92 5864.9 1928.24 5860.58 1935.62 5860.58 c
-1942.82 5860.58 1947.86 5864.9 1947.86 5871.02 c
-1947.86 5873.54 1946.96 5875.88 1944.62 5878.76 c
-1943 5880.56 1942.46 5881.64 1942.46 5882.72 c
-1942.46 5886.5 1947.32 5889.16 1953.8 5889.16 c
-1964.42 5889.16 1969 5884.37 1969 5873.54 c
-1969 5860.4 l
-1947.89 5853.92 1939.41 5850.68 1932.56 5846.18 c
-1924.46 5840.78 1921 5834.48 1921 5826.56 c
-1921 5815.58 1929.07 5807.48 1940.3 5807.48 c
-1950.74 5807.48 1959.02 5811.08 1968.92 5820.08 c
-1970.9 5810.9 1974.86 5807.48 1983.68 5807.48 c
-1991.42 5807.48 1997 5810.36 2003.84 5817.74 c
-h
-1969 5828 m
-1964.04 5822.42 1960.37 5820.26 1955.96 5820.26 c
-1950.56 5820.26 1947 5825.12 1947 5832.32 c
-1947 5842.76 1954.57 5850.14 1969 5854.1 c
-h
-2006 5810 m
-f*
-2043.46 5893 m
-2008.73 5893 l
-2008.73 5888.66 l
-2016.65 5887.58 2019 5885.42 2019 5878.04 c
-2019 5825.12 l
-2019 5817.74 2016.95 5815.76 2008.73 5814.32 c
-2008.73 5810 l
-2051.93 5810 l
-2051.93 5814.32 l
-2045.63 5815.22 2044 5817.74 2044 5824.58 c
-2044 5872.64 l
-2044 5873.54 2046.51 5876.78 2048.51 5878.76 c
-2052.29 5881.64 2055.53 5883.16 2058.77 5883.16 c
-2065.79 5883.16 2069 5879 2069 5868.14 c
-2069 5824.58 l
-2069 5817.2 2066.9 5814.86 2059.85 5814.32 c
-2059.85 5810 l
-2101.97 5810 l
-2101.97 5814.32 l
-2095.67 5815.04 2094 5817.74 2094 5824.58 c
-2094 5872.64 l
-2094 5873.54 2096.43 5876.6 2098.37 5878.58 c
-2102.33 5881.64 2105.57 5883.16 2108.81 5883.16 c
-2115.65 5883.16 2118 5878.82 2118 5868.14 c
-2118 5824.58 l
-2118 5817.02 2116.1 5814.86 2109.53 5814.32 c
-2109.53 5810 l
-2152.37 5810 l
-2152.37 5814 l
-2145.35 5814.37 2143 5816.6 2143 5824.58 c
-2143 5869.76 l
-2143 5885.24 2133.6 5895.16 2119.07 5895.16 c
-2108.81 5895.16 2101.97 5891.01 2092.61 5879.48 c
-2087.21 5890.82 2080.91 5895.16 2069.57 5895.16 c
-2058.2 5895.16 2050.21 5890.29 2043.46 5879.48 c
-h
-2155.94 5810 m
-f*
-2228.36 5832.5 m
-2220.98 5823.68 2215.58 5820.48 2207.84 5820.48 c
-2201 5820.48 2195.6 5823.53 2192 5829.62 c
-2188.58 5835.36 2187.14 5841.45 2186.42 5854 c
-2231.78 5854 l
-2230.7 5868.99 2228 5877.3 2222.42 5884.34 c
-2216.66 5891.36 2208.2 5895.16 2198.12 5895.16 c
-2175.62 5895.16 2160.5 5877.33 2160.5 5851.04 c
-2160.5 5824.76 2175.26 5807.48 2197.58 5807.48 c
-2212.16 5807.48 2220.98 5813.06 2232.68 5829.98 c
-h
-2185.52 5861 m
-2186.06 5882.42 2189.3 5889.16 2198.12 5889.16 c
-2203.34 5889.16 2206.58 5886.42 2208.02 5881.1 c
-2208.92 5877.68 2209.28 5872.64 2209.64 5863.46 c
-2209.64 5861 l
-h
-2235.92 5810 m
-f*
-1 i
-1320.95 5775.35 914.4 15.5999 re
-f
-1 g
-1773.35 5370.95 m
-1937.75 5522.15 l
-1856.15 5522.15 l
-1856.15 5675.75 l
-1689.35 5675.75 l
-1689.35 5522.15 l
-1607.75 5522.15 l
-f*
-0 g
-1773.35 5370.95 m
-1937.75 5522.15 l
-1856.15 5522.15 l
-1856.15 5675.75 l
-1689.35 5675.75 l
-1689.35 5522.15 l
-1607.75 5522.15 l
-1773.35 5370.95 l
-1773.35 5384.15 l
-1634.15 5512.55 l
-1700.15 5512.55 l
-1700.15 5666.15 l
-1846.55 5666.15 l
-1846.55 5512.55 l
-1912.55 5512.55 l
-1773.35 5384.15 l
-1773.35 5370.95 l
-f*
-0.201248 i
-3939.33 5883 m
-3825.22 5883 l
-3825.22 5878 l
-3839.11 5877.2 3843 5874.18 3843 5863.72 c
-3843 5766.32 l
-3843 5755.85 3840.17 5753.64 3825.22 5752.03 c
-3825.22 5747 l
-3897.67 5747 l
-3897.67 5752 l
-3879.15 5752.81 3876 5755.23 3876 5766.32 c
-3876 5813.21 l
-3896.22 5812.81 3903.55 5805.36 3906.32 5782.02 c
-3911.35 5782.02 l
-3911.35 5850.04 l
-3906.32 5850.04 l
-3902.76 5827.1 3895.82 5820.05 3876 5820.05 c
-3876 5866.74 l
-3876 5874.19 3878.52 5876 3888.41 5876 c
-3907.13 5876 3918.8 5872.64 3925.04 5865.74 c
-3929.47 5860.71 3931.68 5855.27 3934.5 5842.59 c
-3939.33 5842.59 l
-h
-3944.96 5747 m
-f*
-3989.19 5840 m
-3950.84 5840 l
-3950.84 5834.95 l
-3959.49 5833.74 3962 5831.12 3962 5823.07 c
-3962 5763.9 l
-3962 5755.65 3959.93 5753.44 3950.84 5751.83 c
-3950.84 5747 l
-4004.37 5747 l
-4004.37 5751.83 l
-3992.09 5752.63 3990 5755.25 3990 5767.73 c
-3990 5805.76 l
-3990 5816.23 3995.49 5824.88 4001.95 5824.88 c
-4003.56 5824.88 4005.37 5823.47 4007.59 5820.25 c
-4011.41 5814.82 4014.43 5813.01 4019.66 5813.01 c
-4027.11 5813.01 4032.34 5818.64 4032.34 5826.29 c
-4032.34 5835.55 4025.5 5842.41 4016.04 5842.41 c
-4006.1 5842.41 3998.54 5837.12 3989.19 5823.27 c
-h
-4034.35 5747 m
-f*
-4129.19 5759.88 m
-4127.18 5757.87 l
-4126.57 5757.26 4125.97 5757.06 4124.96 5757.06 c
-4122.15 5757.06 4121 5758.67 4121 5762.09 c
-4121 5814.62 l
-4121 5831.73 4105.6 5842.42 4080.89 5842.42 c
-4058.15 5842.42 4042.85 5832.06 4042.85 5816.83 c
-4042.85 5808.38 4047.69 5803.55 4055.94 5803.55 c
-4063.99 5803.55 4069.62 5808.38 4069.62 5815.22 c
-4069.62 5818.04 4068.61 5820.66 4066 5823.88 c
-4064.19 5825.89 4063.58 5827.1 4063.58 5828.3 c
-4063.58 5832.53 4069.02 5835.42 4076.26 5835.42 c
-4088.14 5835.42 4093.86 5830.08 4093.86 5818.04 c
-4093.86 5803.35 l
-4069.91 5796.1 4060.29 5792.48 4052.51 5787.45 c
-4043.46 5781.41 4039 5774.37 4039 5765.52 c
-4039 5753.24 4048.27 5744.18 4061.17 5744.18 c
-4072.84 5744.18 4082.1 5748.21 4093.17 5758.27 c
-4095.38 5748.01 4099.81 5744.18 4109.67 5744.18 c
-4118.32 5744.18 4124.56 5747.4 4132.21 5755.65 c
-h
-4093 5767.13 m
-4087.55 5760.89 4083.52 5758.47 4078.68 5758.47 c
-4072.64 5758.47 4068 5763.91 4068 5771.96 c
-4068 5783.63 4076.61 5791.88 4093 5796.31 c
-h
-4134.62 5747 m
-f*
-4176.4 5840 m
-4137.7 5840 l
-4137.7 5834.95 l
-4146.55 5833.74 4149 5831.32 4149 5823.07 c
-4149 5763.9 l
-4149 5755.65 4146.74 5753.44 4137.7 5751.83 c
-4137.7 5747 l
-4186 5747 l
-4186 5751.83 l
-4178.95 5752.84 4177 5755.65 4177 5763.3 c
-4177 5817.03 l
-4177 5818.04 4179.87 5821.66 4182.18 5823.88 c
-4186.4 5827.1 4190.02 5829.42 4193.65 5829.42 c
-4201.5 5829.42 4205 5824.59 4205 5812 c
-4205 5763.3 l
-4205 5755.05 4202.68 5752.43 4194.85 5751.83 c
-4194.85 5747 l
-4241.95 5747 l
-4241.95 5751.83 l
-4234.9 5752.64 4233 5755.65 4233 5763.3 c
-4233 5817.03 l
-4233 5818.04 4235.73 5821.46 4237.92 5823.68 c
-4242.35 5827.1 4245.97 5829.42 4249.59 5829.42 c
-4257.24 5829.42 4260 5824.38 4260 5812 c
-4260 5763.3 l
-4260 5754.85 4257.85 5752.43 4250.4 5751.83 c
-4250.4 5747 l
-4298.3 5747 l
-4298.3 5752 l
-4290.45 5752.4 4288 5754.78 4288 5763.3 c
-4288 5813.81 l
-4288 5831.12 4277.43 5842.42 4261.07 5842.42 c
-4249.59 5842.42 4241.95 5837.73 4231.48 5824.68 c
-4225.44 5837.36 4218.4 5842.42 4205.72 5842.42 c
-4192.95 5842.42 4183.98 5836.91 4176.4 5824.68 c
-h
-4301.64 5747 m
-f*
-4379.9 5772.16 m
-4371.65 5762.29 4365.61 5758.18 4356.96 5758.18 c
-4349.31 5758.18 4343.27 5761.77 4339.25 5768.94 c
-4335.43 5775.54 4333.82 5782.56 4333.01 5797 c
-4383.73 5797 l
-4382.52 5813.36 4379.5 5822.43 4373.26 5830.12 c
-4366.82 5837.96 4357.36 5842.42 4346.09 5842.42 c
-4320.94 5842.42 4304.03 5822.4 4304.03 5792.88 c
-4304.03 5763.5 4320.53 5744.18 4345.49 5744.18 c
-4361.79 5744.18 4371.65 5750.42 4384.73 5769.34 c
-h
-4332 5804 m
-4332.61 5827.96 4336.23 5835.42 4346.09 5835.42 c
-4351.93 5835.42 4355.55 5832.38 4357.16 5826.49 c
-4358.17 5822.67 4358.57 5817.03 4358.97 5806.77 c
-4358.97 5804 l
-h
-4388.35 5747 m
-f*
-4485.16 5842.59 m
-4485.16 5886.22 l
-4479.37 5886.22 l
-4477.96 5880.82 4476.55 5879.42 4472.93 5879.42 c
-4471.12 5879.42 4468.7 5880.03 4464.47 5881.43 c
-4455.22 5884.86 4448.78 5886.02 4440.93 5886.02 c
-4413.56 5886.02 4397 5870.54 4397 5845.01 c
-4397 5839.98 4397.75 5835.75 4399.07 5831.73 c
-4403.29 5821.06 4414.16 5811.6 4431.27 5803.35 c
-4444.75 5796.91 l
-4462.46 5788.46 4467 5783.22 4467 5772.56 c
-4467 5758.67 4457.25 5750.18 4441.94 5750.18 c
-4430.26 5750.18 4420.6 5754.89 4412.96 5764.31 c
-4407.12 5771.75 4404.3 5778.6 4400.88 5792.88 c
-4395.04 5792.88 l
-4395.04 5743.18 l
-4400.88 5743.18 l
-4402.09 5748.41 4403.7 5750.02 4406.92 5750.02 c
-4408.53 5750.02 4410.74 5749.42 4415.17 5748.01 c
-4425.03 5744.59 4432.48 5743.18 4441.33 5743.18 c
-4471.12 5743.18 4491 5760.28 4491 5785.64 c
-4491 5800.73 4482.04 5815.83 4469.1 5822.27 c
-4439.52 5836.96 l
-4423.22 5845.01 4419 5849.84 4419 5859.7 c
-4419 5872.18 4427.37 5879.02 4440.93 5879.02 c
-4449.99 5879.02 4458.44 5875.47 4465.68 5868.55 c
-4472.53 5861.51 4475.75 5855.67 4479.77 5842.59 c
-h
-4499.89 5747 m
-f*
-4580.9 5772.16 m
-4572.65 5762.29 4566.61 5758.18 4557.96 5758.18 c
-4550.31 5758.18 4544.27 5761.77 4540.25 5768.94 c
-4536.43 5775.54 4534.82 5782.56 4534.01 5797 c
-4584.73 5797 l
-4583.52 5813.36 4580.5 5822.43 4574.26 5830.12 c
-4567.82 5837.96 4558.36 5842.42 4547.09 5842.42 c
-4521.94 5842.42 4505.03 5822.4 4505.03 5792.88 c
-4505.03 5763.5 4521.53 5744.18 4546.49 5744.18 c
-4562.79 5744.18 4572.65 5750.42 4585.73 5769.34 c
-h
-4533 5804 m
-4533.61 5827.96 4537.23 5835.42 4547.09 5835.42 c
-4552.93 5835.42 4556.55 5832.38 4558.16 5826.49 c
-4559.17 5822.67 4559.57 5817.03 4559.97 5806.77 c
-4559.97 5804 l
-h
-4589.35 5747 m
-f*
-4650.38 5840 m
-4631 5840 l
-4631 5873.79 l
-4626.43 5873.79 l
-4614.16 5856.48 4606.11 5847.42 4593.02 5836.35 c
-4593.02 5831 l
-4603 5831 l
-4603 5765.72 l
-4603 5752.64 4611.84 5744.59 4626.03 5744.59 c
-4639.51 5744.59 4647.56 5750.62 4655.81 5767.12 c
-4650.78 5769.34 l
-4646.76 5761.69 4643.54 5758.59 4639.31 5758.59 c
-4633.68 5758.59 4631 5762.09 4631 5770.34 c
-4631 5831 l
-4650.38 5831 l
-h
-4656.02 5747 m
-f*
-1 i
-8 w
-2213.75 3834.95 m
-2280.95 3696.95 2475.35 3592.55 2718.95 3562.55 c
-S
-2678.15 3520.55 m
-2700.95 3567.35 l
-2687.75 3616.55 l
-2835.35 3556.55 l
-f*
-0.564706 g
-3686.15 4768.55 m
-3542.15 4810.55 l
-3645.35 4877.75 l
-3480.95 4887.35 l
-3527.75 4968.95 l
-3369.35 4946.15 l
-3351.35 5030.15 l
-3221.75 4977.35 l
-3143.75 5050.55 l
-3062.15 4977.35 l
-2933.75 5030.15 l
-2914.55 4946.15 l
-2757.35 4968.95 l
-2804.15 4887.35 l
-2639.75 4877.75 l
-2741.75 4810.55 l
-2598.95 4768.55 l
-2741.75 4728.95 l
-2639.75 4661.75 l
-2804.15 4652.15 l
-2757.35 4570.55 l
-2914.55 4594.55 l
-2933.75 4509.35 l
-3062.15 4562.15 l
-3143.75 4488.95 l
-3221.75 4562.15 l
-3351.35 4509.35 l
-3369.35 4594.55 l
-3527.75 4570.55 l
-3480.95 4652.15 l
-3645.35 4661.75 l
-3542.15 4728.95 l
-f*
-1 g
-3626.15 4828.55 m
-3482.15 4870.55 l
-3585.35 4937.75 l
-3420.95 4947.35 l
-3467.75 5028.95 l
-3309.35 5006.15 l
-3291.35 5090.15 l
-3161.75 5037.35 l
-3083.75 5110.55 l
-3002.15 5037.35 l
-2873.75 5090.15 l
-2854.55 5006.15 l
-2697.35 5028.95 l
-2744.15 4947.35 l
-2579.75 4937.75 l
-2681.75 4870.55 l
-2538.95 4828.55 l
-2681.75 4788.95 l
-2579.75 4721.75 l
-2744.15 4712.15 l
-2697.35 4630.55 l
-2854.55 4654.55 l
-2873.75 4569.35 l
-3002.15 4622.15 l
-3083.75 4548.95 l
-3161.75 4622.15 l
-3291.35 4569.35 l
-3309.35 4654.55 l
-3467.75 4630.55 l
-3420.95 4712.15 l
-3585.35 4721.75 l
-3482.15 4788.95 l
-f*
-0 g
-3626.15 4828.55 m
-3482.15 4870.55 l
-3585.35 4937.75 l
-3420.95 4947.35 l
-3467.75 5028.95 l
-3309.35 5006.15 l
-3291.35 5090.15 l
-3161.75 5037.35 l
-3083.75 5110.55 l
-3002.15 5037.35 l
-2873.75 5090.15 l
-2854.55 5006.15 l
-2697.35 5028.95 l
-2744.15 4947.35 l
-2579.75 4937.75 l
-2681.75 4870.55 l
-2538.95 4828.55 l
-2681.75 4788.95 l
-2579.75 4721.75 l
-2744.15 4712.15 l
-2697.35 4630.55 l
-2854.55 4654.55 l
-2873.75 4569.35 l
-3002.15 4622.15 l
-3083.75 4548.95 l
-3161.75 4622.15 l
-3291.35 4569.35 l
-3309.35 4654.55 l
-3467.75 4630.55 l
-3420.95 4712.15 l
-3585.35 4721.75 l
-3482.15 4788.95 l
-3626.15 4828.55 l
-3480.95 4829.75 l
-3386.15 4803.35 l
-3460.55 4754.15 l
-3354.95 4748.15 l
-3392.15 4682.15 l
-3278.15 4700.15 l
-3262.55 4624.55 l
-3153.35 4668.95 l
-3083.75 4601.75 l
-3010.55 4668.95 l
-2902.55 4624.55 l
-2885.75 4700.15 l
-2771.75 4682.15 l
-2810.15 4748.15 l
-2703.35 4754.15 l
-2778.95 4803.35 l
-2684.15 4829.75 l
-2777.75 4857.35 l
-2703.35 4904.15 l
-2810.15 4911.35 l
-2771.75 4977.35 l
-2885.75 4960.55 l
-2902.55 5034.95 l
-3010.55 4990.55 l
-3083.75 5057.75 l
-3153.35 4990.55 l
-3262.55 5034.95 l
-3278.15 4960.55 l
-3392.15 4977.35 l
-3354.95 4911.35 l
-3460.55 4904.15 l
-3387.35 4857.35 l
-3480.95 4829.75 l
-3626.15 4828.55 l
-f*
-q[1 0 0 1 0 0]concat
-105 70 true[1 0 0 1 -2961 -4787]@85 imagemask
-!$D7 at rVup's8W+L
-!!!"Ks8W+L!$D7 at s53kW!<<*!s53lAs8W,o!!!'"s8W,g!.Y%Ks82is!WW3"s6p#<s8W,u!!!'"s8W,o
-!.Y%Ks8Duu!WW3"s7cSDs8W-!!!!'"s8W,s!.Y%Ks8N'!!WW3"s82kHs8W-!!!!'"s8W,s!.Y%Ks8N'!
-!<<*!s82j]s8W-!!!!"Ks8W,s!$D7 at s8N'!!.Y%Ks82j=s8W-!!!!!`s8W,o!"],0s8Duu!"],0s6p!js8W,s!!!!$
-s8W,7!!*'!s6p!g!!#7`s1eU7J,fP!z+92B1!!*'!rr<$!!!!9(s7cQps8W&uz"98E!!!E9$
-qu?]s!!!'"s8N'(s8Vioz!.Y%KJ.M\[n,NFg!!!!`s8V"!s8V!Wz!$D7 at n3?sQ^]4?7!!!!(
-s8VkDs8RTLz!!E9$rr<#uz!!!!"s8W-!s8Duuz!!%NKs8W,szz5QCc`s7cQoz!!!Q0
-s8W,gzz#QOi(s53kWz!!!-$s8W,7zz!<<*!s*t(Lz!!!"Ks8W*!z
-z!'gM`rVuouz!!!!0s8Vuszz!!iQ(qu?]sz!!!!0s8W&uzz!$D7@
-rr<$!z!!!!`s8W,7zz!.Y%Ks53kWz!!!$!s8W,ozz!WW3"s82isz!!!-$s8W,u
-zz#QOi(s8RTLz!!!Q0s8W-!^]4?7z+92B at s8VQgz!!#7`s6'F^p](9oz
-J,fPds8W&uz!!*'!s+14Mrr<$!!!!!"s8W*!J,fP!z!!E9$rW#1_s53kW!!!!(s8Vus&-)\!
-z!"],0p](R!s82is!!!"Ks8VQg!WW3"J,fQL!WW3"p](Ers8VQg!!!-$s8Vus"98E$p](9o"98E$rW!3's8Vus!!!-$s8W*!&-)\0rVuou#QOi(rr<T0s8W*!!!!9(s8W+L&-)\0rr<$!
-#QOi(s*tX[s8W*!!!!-$s8W+L#QOi(rr<$!"98E$s1em>s8W+L!!!'"s8W+L#QOi(s*t(L!WW3"s*t4O
-s8W*!!!!$!s8W+L!WW3"rr<$!!.Y%Krr<'!s8W&u!!!!`s8W&u!.Y%Kqu?]s!"],0p](:9s8VQg~>
-Q
-0.2 i
-3099 4787 m
-f*
-3129.52 4877 m
-3170.16 4877 l
-3175.92 4894 l
-3130.64 4894 l
-3109.68 4846.52 l
-3120.08 4846.04 3125.04 4845.08 3130.96 4842.04 c
-3141.2 4836.92 3147 4827.64 3147 4817.24 c
-3147 4803.48 3136.98 4790.92 3125.68 4790.92 c
-3122.16 4790.92 3120.4 4792.44 3117.04 4798.2 c
-3113.2 4804.6 3110.48 4806.68 3105.68 4806.68 c
-3100.08 4806.68 3096.24 4803 3096.24 4797.56 c
-3096.24 4789.88 3104.56 4784.92 3117.2 4784.92 c
-3143.6 4784.92 3164 4803.32 3164 4827.16 c
-3164 4839.32 3158.69 4849.56 3149.04 4855.96 c
-3143.44 4859.8 3139.12 4861.24 3124.08 4864.44 c
-h
-3178 4787 m
-f*
-1 i
-32 w
-3191.75 4581.35 m
-3269.75 4442.15 3400.55 4336.55 3557.75 4284.95 c
-S
-3483.35 4228.55 m
-3531.35 4298.15 l
-3516.95 4380.95 l
-3742.55 4252.55 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 2006 a(Figure)24 b(11:)38 b(An)23 b(example)i(F)-8
-b(rameSet,)26 b(in)d(whic)m(h)g(F)-8 b(rames)25 b(2)f(and)f(3)h(are)f
-(related)i(to)f(F)-8 b(rame)25 b(1)f(b)m(y)f(m)m(ultiplying)0
-2119 y(its)29 b(co)s(ordinates)g(b)m(y)f(factors)h(of)f(10)h(and)f(5)g
-(resp)s(ectiv)m(ely)-8 b(.)42 b(The)28 b(F)-8 b(rameSet's)29
-b(Base)h(attribute)f(has)f(the)g(v)-5 b(alue)0 2232 y(1)31
-b(and)e(its)i(Curren)m(t)f(attribute)h(has)f(the)g(v)-5
-b(alue)31 b(3.)41 b(The)30 b(transformation)h(p)s(erformed)d(when)i
-(the)g(F)-8 b(rameSet)0 2345 y(is)30 b(used)g(as)h(a)f(Mapping)h(\()p
-Fx(i.e.)f FF(from)g(its)g(base)h(to)g(its)g(curren)m(t)f(F)-8
-b(rame\))32 b(is)e(sho)m(wn)g(in)g(b)s(old.)0 2731 y(When)35
-b(a)h(F)-8 b(rame)37 b(is)e(added,)i(w)m(e)f(also)g(ha)m(v)m(e)h(to)f
-(sp)s(ecify)f(whic)m(h)h(of)f(the)h(existing)h(ones)e(the)h(new)f(F)-8
-b(rame)36 b(is)0 2844 y(related)h(to.)57 b(Here,)38 b(w)m(e)e(c)m(hose)
-h(n)m(um)m(b)s(er)d(1,)k(the)d(only)h(one)g(presen)m(t)g(so)g(far,)h
-(and)e(the)h(new)f(one)h(w)m(e)g(added)0 2957 y(b)s(ecame)31
-b(n)m(um)m(b)s(er)e(2.)0 3126 y(Note)g(that)f(a)f(F)-8
-b(rameSet)29 b(do)s(es)e(not)g(mak)m(e)i(copies)f(of)f(the)h(F)-8
-b(rames)28 b(and)e(Mappings)i(that)g(y)m(ou)f(insert)g(in)m(to)i(it.)0
-3239 y(Instead,)j(it)h(holds)e(p)s(oin)m(ters)h(to)h(them.)45
-b(This)31 b(means)h(that)g(if)g(y)m(ou)g(retain)h(the)f(original)h(p)s
-(oin)m(ters)e(to)i(these)0 3352 y(Ob)5 b(jects)38 b(and)f(alter)h
-(them,)i(y)m(ou)e(will)g(indirectly)g(b)s(e)f(altering)h(the)g(F)-8
-b(rameSet's)39 b(con)m(ten)m(ts.)64 b(Y)-8 b(ou)38 b(can,)i(of)0
-3465 y(course,)29 b(alw)m(a)m(ys)h(use)e(astCop)m(y)h(\()p
-Fu(x)p FF(4.13\))j(to)d(mak)m(e)g(a)g(separate)g(cop)m(y)h(of)e(an)m(y)
-h(Ob)5 b(ject)29 b(if)f(y)m(ou)h(need)f(to)h(ensure)0
-3578 y(its)i(indep)s(endence.)0 3747 y(W)-8 b(e)41 b(could)e(also)i
-(add)e(a)h(third)e(F)-8 b(rame)41 b(in)m(to)f(our)f(F)-8
-b(rameSet,)44 b(this)39 b(time)h(de\014ning)f(a)h(co)s(ordinate)g
-(system)0 3860 y(whic)m(h)30 b(is)h(reac)m(hed)g(b)m(y)f(m)m
-(ultiplying)h(the)f(original)i(co)s(ordinates)f(\(of)g(\\frame1"\))h(b)
-m(y)e(5:)227 4129 y Ft(astAddFrame\()39 b(frameset,)h(1,)j
-(astZoomMap\()c(2,)j(5.0,)g("")h(\),)g(astFrame\()d(2,)i("Domain=C")e
-(\))j(\);)0 4412 y FF(Here,)30 b(w)m(e)f(ha)m(v)m(e)g(a)m(v)m(oided)h
-(storing)f(unnecessary)f(p)s(oin)m(ter)g(v)-5 b(alues)29
-b(b)m(y)f(using)g(function)g(in)m(v)m(o)s(cations)j(directly)0
-4525 y(as)d(argumen)m(ts)g(for)f(astAddF)-8 b(rame.)41
-b(This)27 b(assumes)g(that)h(w)m(e)h(are)f(using)f(astBegin)i(and)e
-(astEnd)g(\()p Fu(x)p FF(4.10\))k(to)0 4638 y(ensure)f(that)h(Ob)5
-b(jects)30 b(are)h(correctly)g(deleted)h(when)d(no)h(longer)h
-(required.)0 4807 y(Our)38 b(example)i(F)-8 b(rameSet)41
-b(no)m(w)f(con)m(tains)g(three)g(F)-8 b(rames)40 b(and)f(t)m(w)m(o)i
-(Mappings)f(with)f(the)h(arrangemen)m(t)0 4920 y(sho)m(wn)30
-b(in)g(Figure)h(11.)41 b(The)30 b(total)i(n)m(um)m(b)s(er)d(of)i(F)-8
-b(rames)31 b(is)f(giv)m(en)i(b)m(y)e(its)h(read-only)g(Nframe)f
-(attribute.)0 5236 y Fw(13.4)112 b(The)38 b(Base)g(and)g(Curren)m(t)f
-(F)-9 b(rames)0 5467 y FF(A)m(t)31 b(all)h(times,)f(one)g(of)f(the)h(F)
--8 b(rames)31 b(in)f(a)h(F)-8 b(rameSet)32 b(is)e(designated)h(to)g(b)s
-(e)f(its)h Fx(b)-5 b(ase)31 b FF(F)-8 b(rame)31 b(and)f(one)h(to)g(b)s
-(e)0 5580 y(its)g Fx(curr)-5 b(ent)30 b FF(F)-8 b(rame)32
-b(\(Figure)f(11\).)41 b(These)30 b(F)-8 b(rames)31 b(are)g(iden)m
-(ti\014ed)f(b)m(y)g(t)m(w)m(o)i(in)m(teger)f(F)-8 b(rameSet)32
-b(attributes,)0 5693 y(Base)f(and)f(Curren)m(t,)g(whic)m(h)g(hold)g
-(the)h(indices)f(of)h(the)f(nominated)h(F)-8 b(rames)31
-b(within)f(the)g(F)-8 b(rameSet.)p eop end
-%%Page: 114 124
-TeXDict begin 114 123 bop 0 52 a FF(114)1175 b Fy(13)92
-b(COORDINA)-8 b(TE)30 b(SYSTEM)f(NETW)m(ORKS)h(\(FRAMESETS\))0
-351 y FF(The)35 b(existence)h(of)f(the)h(base)f(and)f(curren)m(t)h(F)-8
-b(rames)36 b(re\015ects)f(an)g(imp)s(ortan)m(t)h(application)g(of)f(F)
--8 b(rameSets,)0 464 y(whic)m(h)25 b(is)h(to)h(attac)m(h)g(co)s
-(ordinate)g(systems)f(to)g(en)m(tities)i(suc)m(h)d(as)h(data)g(arra)m
-(ys,)i(data)e(\014les,)h(plotting)g(surfaces)0 577 y(\(for)g
-(graphics\),)h Fx(etc.)39 b FF(In)26 b(this)h(con)m(text,)j(the)d(base)
-g(F)-8 b(rame)28 b(represen)m(ts)e(the)h(\\nativ)m(e")j(co)s(ordinate)d
-(system)g(of)0 690 y(the)i(attac)m(hed)j(en)m(tit)m(y|for)e(example,)h
-(the)e(pixel)h(co)s(ordinates)g(of)f(an)h(image)g(or)g(the)f(in)m
-(trinsic)h(co)s(ordinates)0 803 y(of)35 b(a)h(plotting)g(surface.)55
-b(The)34 b(other)i(F)-8 b(rames)36 b(within)e(the)i(F)-8
-b(rameSet)36 b(represen)m(t)f(alternativ)m(e)j(co)s(ordinate)0
-916 y(systems)g(whic)m(h)h(ma)m(y)g(also)g(b)s(e)f(used)f(to)j(refer)e
-(to)h(p)s(ositions)f(within)g(that)h(en)m(tit)m(y)-8
-b(.)67 b(The)38 b(curren)m(t)h(F)-8 b(rame)0 1029 y(represen)m(ts)32
-b(the)f(particular)h(co)s(ordinate)h(system)f(whic)m(h)f(is)h(curren)m
-(tly)f(selected)j(for)d(use.)44 b(F)-8 b(or)33 b(instance,)f(if)0
-1142 y(an)c(image)h(w)m(ere)g(b)s(eing)f(displa)m(y)m(ed,)h(y)m(ou)f(w)
-m(ould)g(aim)h(to)g(lab)s(el)f(it)h(with)f(co)s(ordinates)g(corresp)s
-(onding)f(to)i(the)0 1255 y(curren)m(t)h(F)-8 b(rame.)42
-b(In)30 b(order)g(to)h(see)h(a)e(di\013eren)m(t)h(co)s(ordinate)h
-(system,)f(a)g(soft)m(w)m(are)h(user)d(w)m(ould)i(arrange)g(for)0
-1367 y(a)g(di\013eren)m(t)g(F)-8 b(rame)31 b(to)g(b)s(e)f(made)g
-(curren)m(t.)0 1548 y(The)j(c)m(hoice)j(of)e(base)g(and)g(curren)m(t)f
-(F)-8 b(rames)35 b(ma)m(y)g(b)s(e)e(c)m(hanged)i(at)f(an)m(y)g(time,)i
-(simply)e(b)m(y)g(assigning)g(new)0 1661 y(v)-5 b(alues)36
-b(to)g(the)f(F)-8 b(rameSet's)37 b(Base)f(and)e(Curren)m(t)h
-(attributes.)56 b(F)-8 b(or)36 b(example,)h(to)f(mak)m(e)g(the)g(F)-8
-b(rame)36 b(with)0 1774 y(index)30 b(3)h(b)s(ecome)f(the)h(curren)m(t)f
-(F)-8 b(rame,)32 b(y)m(ou)e(could)h(use:)227 2077 y Ft(astSetI\()41
-b(frameset,)e("Current",)h(3)j(\);)0 2394 y FF(Y)-8 b(ou)31
-b(can)g(nominate)g(the)f(same)h(F)-8 b(rame)31 b(to)g(b)s(e)f(b)s(oth)g
-(the)g(base)h(and)f(curren)m(t)g(F)-8 b(rame)31 b(if)f(y)m(ou)h(wish.)0
-2575 y(By)e(default)f(\()p Fx(i.e.)h FF(if)f(the)h(Base)g(or)g(Curren)m
-(t)e(attribute)j(is)e(un-set\),)i(the)e(\014rst)g(F)-8
-b(rame)29 b(added)f(to)h(a)g(F)-8 b(rameSet)0 2688 y(b)s(ecomes)32
-b(its)f(base)h(F)-8 b(rame)32 b(and)f(the)g(last)h(one)g(added)f(b)s
-(ecomes)g(its)h(curren)m(t)f(F)-8 b(rame.)2999 2655 y
-Fv(20)3118 2688 y FF(Whenev)m(er)32 b(a)g(new)0 2801
-y(F)-8 b(rame)26 b(is)f(added)f(to)i(a)g(F)-8 b(rameSet,)27
-b(the)f(Curren)m(t)e(attribute)h(is)h(mo)s(di\014ed)d(so)j(that)f(the)h
-(new)e(F)-8 b(rame)26 b(b)s(ecomes)0 2914 y(the)31 b(curren)m(t)f(one.)
-41 b(This)29 b(b)s(eha)m(viour)h(is)h(re\015ected)g(in)f(the)g(state)i
-(of)e(the)h(example)g(F)-8 b(rameSet)32 b(in)e(Figure)h(11.)0
-3268 y Fw(13.5)112 b(Referring)38 b(to)f(the)g(Base)h(and)g(Curren)m(t)
-f(F)-9 b(rames)0 3516 y FF(It)33 b(is)f(often)h(necessary)g(to)h(refer)
-e(to)h(the)g(base)g(and)f(curren)m(t)g(F)-8 b(rames)33
-b(\()p Fu(x)p FF(13.4\))j(within)c(a)h(F)-8 b(rameSet,)34
-b(but)e(it)0 3629 y(can)27 b(b)s(e)e(cum)m(b)s(ersome)h(ha)m(ving)h(to)
-g(obtain)g(their)f(indices)h(from)e(the)i(Base)g(and)f(Curren)m(t)f
-(attributes)i(on)f(eac)m(h)0 3742 y(o)s(ccasion.)41 b(T)-8
-b(o)29 b(mak)m(e)h(this)e(easier,)i(t)m(w)m(o)g(macros,)f(AST)p
-Fq(__)p FF(BASE)e(and)h(AST)p Fq(__)p FF(CURRENT,)f(are)i(de\014ned)e
-(in)0 3854 y(the)i(\\ast.h")g(header)f(\014le)h(and)f(ma)m(y)g(b)s(e)g
-(used)g(to)h(represen)m(t)f(the)h(indices)f(of)h(the)f(base)h(and)f
-(curren)m(t)g(F)-8 b(rames)0 3967 y(resp)s(ectiv)m(ely)g(.)42
-b(They)30 b(ma)m(y)h(b)s(e)f(used)g(whenev)m(er)g(a)h(F)-8
-b(rame)31 b(index)f(is)g(required.)0 4148 y(F)-8 b(or)34
-b(example,)h(when)d(adding)g(a)i(new)e(F)-8 b(rame)34
-b(to)g(a)g(F)-8 b(rameSet)34 b(\()p Fu(x)p FF(13.3\),)j(y)m(ou)c(could)
-g(use)g(the)g(follo)m(wing)i(to)0 4261 y(indicate)25
-b(that)g(the)g(new)e(F)-8 b(rame)26 b(is)e(related)h(to)g(the)g
-(existing)g(curren)m(t)f(F)-8 b(rame,)27 b(whatev)m(er)e(its)f(index)g
-(happ)s(ens)0 4374 y(to)31 b(b)s(e:)227 4677 y Ft(AstFrame)41
-b(*frame;)227 4777 y(AstMapping)f(*mapping;)227 4976
-y(...)227 5176 y(astAddFrame\()f(frameset,)h(AST__CURRENT,)e(mapping,)i
-(frame)i(\);)0 5492 y FF(Of)30 b(course,)h(the)f(F)-8
-b(rame)31 b(y)m(ou)g(added)f(w)m(ould)g(then)g(b)s(ecome)h(the)f(new)g
-(curren)m(t)g(F)-8 b(rame.)p 0 5607 1512 4 v 73 5661
-a Fs(20)138 5693 y Fr(Although)25 b(this)h(is)g(rev)n(ersed)g(if)g(the)
-g(F)-6 b(rameSet's)26 b(In)n(v)n(ert)e(attribute)i(is)g(non-zero.)p
-eop end
-%%Page: 115 125
-TeXDict begin 115 124 bop 0 52 a Fy(13.6)93 b(Using)30
-b(a)h(F)-8 b(rameSet)31 b(as)g(a)g(Mapping)2115 b FF(115)0
-351 y Fw(13.6)112 b(Using)38 b(a)g(F)-9 b(rameSet)39
-b(as)f(a)f(Mapping)0 584 y FF(The)d(F)-8 b(rameSet)36
-b(class)g(inherits)e(prop)s(erties)g(and)g(b)s(eha)m(viour)h(from)f
-(the)h(F)-8 b(rame)36 b(class)f(\()p Fu(x)p FF(7\))h(and,)g(in)e(turn,)
-0 697 y(from)c(the)g(Mapping)h(class)g(\()p Fu(x)p FF(5\).)42
-b(Its)30 b(b)s(eha)m(viour)g(when)g(used)f(as)i(a)g(Mapping)f(is)g
-(particularly)h(imp)s(ortan)m(t.)0 868 y(Consider,)c(for)f(instance,)j
-(passing)d(a)h(F)-8 b(rameSet)28 b(p)s(oin)m(ter)f(to)h(a)f(co)s
-(ordinate)g(transformation)g(function)g(suc)m(h)0 981
-y(as)k(astT)-8 b(ran2:)227 1254 y Ft(#define)41 b(N)i(10)227
-1354 y(double)e(xin[)h(N)h(],)g(yin[)f(N)h(],)g(xout[)f(N)h(],)g(yout[)
-e(N)i(];)227 1553 y(...)227 1752 y(astTran2\()d(frameset,)g(N,)j(xin,)f
-(yin,)g(1,)g(xout,)g(yout)g(\);)0 2039 y FF(The)33 b(co)s(ordinate)i
-(transformation)f(applied)g(b)m(y)g(this)g(F)-8 b(rameSet)35
-b(w)m(ould)e(b)s(e)h(the)g(one)g(whic)m(h)f(con)m(v)m(erts)j(b)s(e-)0
-2151 y(t)m(w)m(een)22 b(its)f(base)f(and)g(curren)m(t)g(F)-8
-b(rames.)39 b(Using)20 b(the)h(F)-8 b(rameSet)22 b(in)e(Figure)h(11,)i
-(for)e(example,)i(the)e(co)s(ordinates)0 2264 y(w)m(ould)34
-b(b)s(e)g(m)m(ultiplied)h(b)m(y)f(a)h(factor)h(of)e(5.)54
-b(If)34 b(w)m(e)h(instead)f(requested)h(the)f(F)-8 b(rameSet's)36
-b(in)m(v)m(erse)g(transfor-)0 2377 y(mation,)k(w)m(e)d(w)m(ould)g(b)s
-(e)f(transforming)h(from)f(its)i(curren)m(t)f(F)-8 b(rame)38
-b(to)f(its)h(base)f(F)-8 b(rame,)40 b(so)d(our)g(example)0
-2490 y(F)-8 b(rameSet)32 b(w)m(ould)e(then)g(m)m(ultiply)g(b)m(y)h(a)f
-(factor)i(of)e(0.2.)0 2661 y(Whenev)m(er)25 b(the)g(c)m(hoice)i(of)d
-(base)h(and)f(curren)m(t)h(F)-8 b(rames)25 b(c)m(hanges,)i(the)e
-(transformations)g(whic)m(h)f(a)h(F)-8 b(rameSet)0 2774
-y(p)s(erforms)38 b(when)g(used)g(as)h(a)h(Mapping)f(also)h(c)m(hange)g
-(to)g(re\015ect)g(this.)67 b(The)39 b(Nin)g(and)f(Nout)i(attributes)0
-2887 y(ma)m(y)e(also)g(c)m(hange)g(in)f(consequence,)i(b)s(ecause)e
-(they)h(are)f(determined)g(b)m(y)g(the)g(n)m(um)m(b)s(ers)f(of)h(axes)h
-(in)e(the)0 3000 y(F)-8 b(rameSet's)28 b(base)g(and)e(curren)m(t)h(F)-8
-b(rames)28 b(resp)s(ectiv)m(ely)-8 b(.)41 b(These)27
-b(n)m(um)m(b)s(ers)f(need)h(not)g(necessarily)h(b)s(e)f(equal,)0
-3113 y(of)k(course.)0 3283 y(Lik)m(e)e(an)m(y)f(Mapping,)h(a)g(F)-8
-b(rameSet)29 b(ma)m(y)f(also)h(b)s(e)f(in)m(v)m(erted)h(b)m(y)f(c)m
-(hanging)h(the)f(b)s(o)s(olean)g(sense)g(of)g(its)h(In)m(v)m(ert)0
-3396 y(attribute,)k Fx(e.g.)e FF(using)h(astIn)m(v)m(ert)h(\()p
-Fu(x)p FF(5.5\).)48 b(If)31 b(this)h(is)g(happ)s(ens,)e(the)j(v)-5
-b(alues)32 b(of)g(the)g(F)-8 b(rameSet's)33 b(Base)g(and)0
-3509 y(Curren)m(t)j(attributes)i(are)f(in)m(terc)m(hanged,)j(along)e
-(with)f(its)g(Nin)g(and)f(Nout)i(attributes,)h(so)e(that)h(its)f(base)0
-3622 y(and)26 b(curren)m(t)g(F)-8 b(rames)27 b(sw)m(ap)f(places.)40
-b(When)26 b(used)g(as)g(a)h(Mapping,)g(the)g(F)-8 b(rameSet)27
-b(will)g(therefore)g(p)s(erform)0 3735 y(the)k(in)m(v)m(erse)g
-(transformation)g(to)g(that)g(whic)m(h)f(it)h(p)s(erformed)d
-(previously)-8 b(.)0 3906 y(T)g(o)31 b(summarise,)f(a)h(F)-8
-b(rameSet)31 b(ma)m(y)g(b)s(e)f(used)f(exactly)j(lik)m(e)g(an)m(y)f
-(other)f(Mapping)h(whic)m(h)f(in)m(ter-relates)i(the)0
-4018 y(co)s(ordinate)f(systems)g(describ)s(ed)e(b)m(y)h(its)h(base)f
-(and)g(curren)m(t)g(F)-8 b(rames.)0 4339 y Fw(13.7)112
-b(Extracting)37 b(a)h(Mapping)h(from)f(a)g(F)-9 b(rameSet)0
-4572 y FF(Although)29 b(it)g(is)f(v)m(ery)h(con)m(v)m(enien)m(t)i(to)e
-(use)g(a)f(F)-8 b(rameSet)30 b(when)e(a)h(Mapping)f(is)h(required)e(\()
-p Fu(x)p FF(13.6\),)32 b(a)d(F)-8 b(rame-)0 4685 y(Set)35
-b(necessarily)g(con)m(tains)h(additional)f(information)g(and)f
-(sometimes)h(this)g(migh)m(t)g(cause)g(ine\016ciency)g(or)0
-4798 y(confusion.)43 b(F)-8 b(or)32 b(example,)g(if)f(y)m(ou)h(w)m(an)m
-(ted)g(to)g(use)f(a)g(Mapping)h(con)m(tained)g(in)f(one)h(F)-8
-b(rameSet)32 b(and)f(insert)0 4911 y(it)g(in)m(to)g(another,)g(it)g(w)m
-(ould)f(probably)g(not)h(b)s(e)e(e\016cien)m(t)j(to)f(insert)g(the)f
-(whole)h(of)g(the)f(\014rst)g(F)-8 b(rameSet)31 b(in)m(to)0
-5023 y(the)g(second)f(one,)h(although)g(it)g(w)m(ould)f(w)m(ork.)0
-5194 y(In)25 b(suc)m(h)g(a)i(situation,)g(the)f(astGetMapping)i
-(function)d(allo)m(ws)i(y)m(ou)f(to)h(extract)g(a)f(Mapping)g(from)f(a)
-h(F)-8 b(rame-)0 5307 y(Set.)39 b(Y)-8 b(ou)26 b(do)f(this)g(b)m(y)g
-(sp)s(ecifying)g(the)h(t)m(w)m(o)g(F)-8 b(rames)26 b(whic)m(h)f(the)h
-(Mapping)f(should)f(in)m(ter-relate)k(using)c(their)0
-5420 y(indices)30 b(within)g(the)h(F)-8 b(rameSet.)42
-b(F)-8 b(or)31 b(example:)227 5693 y Ft(map)43 b(=)g(astGetMapping\()38
-b(frameset,)h(2,)k(3)g(\);)p eop end
-%%Page: 116 126
-TeXDict begin 116 125 bop 0 52 a FF(116)1175 b Fy(13)92
-b(COORDINA)-8 b(TE)30 b(SYSTEM)f(NETW)m(ORKS)h(\(FRAMESETS\))0
-351 y FF(w)m(ould)h(return)f(a)i(p)s(oin)m(ter)f(to)h(a)f(Mapping)g
-(that)h(con)m(v)m(erted)h(b)s(et)m(w)m(een)e(F)-8 b(rames)32
-b(2)g(and)e(3)i(in)f(the)g(F)-8 b(rameSet.)0 464 y(Its)33
-b(in)m(v)m(erse)h(transformation)f(w)m(ould)g(then)g(con)m(v)m(ert)h
-(in)f(the)g(opp)s(osite)h(direction,)g Fx(i.e.)f FF(b)s(et)m(w)m(een)g
-(F)-8 b(rames)34 b(3)0 577 y(and)27 b(2.)40 b(Note)29
-b(that)f(this)f(Mapping)g(migh)m(t)i(not)e(b)s(e)g(indep)s(enden)m(t)f
-(of)i(the)f(Mappings)h(con)m(tained)g(within)f(the)0
-690 y(F)-8 b(rameSet|)p Fx(i.e.)31 b FF(they)h(ma)m(y)f(share)g(sub-Ob)
-5 b(jects|so)30 b(astCop)m(y)i(should)d(b)s(e)i(used)f(to)h(mak)m(e)h
-(a)g(cop)m(y)f(if)g(y)m(ou)0 803 y(need)f(to)h(guaran)m(tee)h(indep)s
-(endence)d(\()p Fu(x)p FF(4.13\).)0 957 y(V)-8 b(ery)25
-b(often,)i(the)e(Mapping)f(returned)g(b)m(y)h(astGetMapping)h(will)f(b)
-s(e)f(a)h(comp)s(ound)f(Mapping,)i(or)e(CmpMap)0 1070
-y(\()p Fu(x)p FF(6\).)42 b(This)27 b(re\015ects)i(the)g(fact)g(that)g
-(con)m(v)m(ersion)h(b)s(et)m(w)m(een)f(the)f(t)m(w)m(o)i(F)-8
-b(rames)29 b(ma)m(y)g(need)f(to)h(b)s(e)f(done)g Fx(via)h
-FF(an)0 1183 y(in)m(termediate)e(co)s(ordinate)f(system)g(so)g(that)g
-(sev)m(eral)h(stages)g(ma)m(y)f(b)s(e)e(in)m(v)m(olv)m(ed.)41
-b(Y)-8 b(ou)26 b(can,)h(ho)m(w)m(ev)m(er,)h(easily)0
-1296 y(simplify)i(this)g(Mapping)g(\(where)h(this)f(is)g(p)s(ossible\))
-g(b)m(y)h(using)f(the)g(astSimplify)g(function)g(\()p
-Fu(x)p FF(6.7\))j(and)d(this)0 1409 y(is)g(recommended)g(if)h(y)m(ou)f
-(plan)g(to)i(use)e(it)h(for)f(transforming)g(a)g(large)i(amoun)m(t)f
-(of)f(data.)0 1689 y Fw(13.8)112 b(Using)38 b(a)g(F)-9
-b(rameSet)39 b(as)f(a)f(F)-9 b(rame)0 1902 y FF(A)42
-b(F)-8 b(rameSet)43 b(can)f(also)h(b)s(e)f(used)f(as)h(a)g(F)-8
-b(rame,)46 b(in)c(whic)m(h)g(capacit)m(y)i(it)e(almost)h(alw)m(a)m(ys)h
-(b)s(eha)m(v)m(es)e(as)g(if)0 2015 y(its)35 b(curren)m(t)g(F)-8
-b(rame)36 b(had)e(b)s(een)g(used)g(instead.)54 b(F)-8
-b(or)36 b(example,)h(if)e(y)m(ou)g(request)g(the)g(Title)h(attribute)f
-(of)g(a)0 2128 y(F)-8 b(rameSet)32 b(using:)227 2343
-y Ft(const)42 b(char)g(*title;)227 2542 y(...)227 2741
-y(title)g(=)h(astGetC\()d(frameset,)g("Title")h(\);)0
-2969 y FF(the)25 b(result)f(will)h(b)s(e)f(the)g(Title)i(of)e(the)h
-(curren)m(t)f(F)-8 b(rame,)27 b(or)d(a)h(suitable)g(default)g(if)f(the)
-h(curren)m(t)f(F)-8 b(rame's)26 b(Title)0 3082 y(attribute)36
-b(is)f(un-set.)56 b(The)35 b(same)h(also)g(applies)f(to)i(other)e
-(attribute)h(op)s(erations|)p Fx(i.e.)f FF(setting,)j(clearing)0
-3195 y(and)d(testing)i(attributes.)57 b(Most)37 b(attributes)f(shared)f
-(b)m(y)h(b)s(oth)f(F)-8 b(rames)36 b(and)f(F)-8 b(rameSets)37
-b(b)s(eha)m(v)m(e)f(in)g(this)0 3308 y(w)m(a)m(y)-8 b(,)32
-b(suc)m(h)e(as)h(Naxes,)g(Lab)s(el\(axis\),)h(F)-8 b(ormat\(axis\),)33
-b Fx(etc.)40 b FF(There)30 b(are,)h(ho)m(w)m(ev)m(er,)h(a)f(few)f
-(exceptions:)227 3536 y FD(Class)427 3648 y FF(Has)h(the)g(v)-5
-b(alue)30 b(\\F)-8 b(rameSet".)227 3786 y FD(ID)427 3899
-y FF(Iden)m(ti\014es)31 b(the)f(particular)h(F)-8 b(rameSet)31
-b(\(not)g(its)g(curren)m(t)f(F)-8 b(rame\).)227 4036
-y FD(Nin)427 4149 y FF(Equals)30 b(the)h(n)m(um)m(b)s(er)e(of)i(axes)g
-(in)f(the)g(F)-8 b(rameSet's)32 b(base)e(F)-8 b(rame.)227
-4287 y FD(In)m(v)m(ert)427 4400 y FF(Is)30 b(indep)s(enden)m(t)f(of)i
-(an)m(y)g(of)f(the)h(Ob)5 b(jects)30 b(within)g(the)h(F)-8
-b(rameSet.)227 4537 y FD(Nob)6 b(ject)427 4650 y FF(Coun)m(ts)30
-b(the)h(n)m(um)m(b)s(er)e(of)i(activ)m(e)h(F)-8 b(rameSets.)227
-4788 y FD(RefCoun)m(t)427 4901 y FF(Coun)m(ts)21 b(the)g(n)m(um)m(b)s
-(er)f(of)h(activ)m(e)i(p)s(oin)m(ters)e(to)g(the)g(F)-8
-b(rameSet)22 b(\(not)g(to)g(its)f(curren)m(t)g(F)-8 b(rame\).)0
-5128 y(Note)28 b(that)f(the)g(set)g(of)f(attributes)i(p)s(ossessed)d(b)
-m(y)i(a)g(F)-8 b(rameSet)27 b(can)g(v)-5 b(ary)d(,)28
-b(dep)s(ending)d(on)h(the)h(nature)f(of)h(its)0 5241
-y(curren)m(t)33 b(F)-8 b(rame.)51 b(F)-8 b(or)34 b(example,)h(if)f(the)
-f(curren)m(t)g(F)-8 b(rame)35 b(is)e(a)h(SkyF)-8 b(rame)34
-b(\()p Fu(x)p FF(8\),)i(then)d(the)h(F)-8 b(rameSet)34
-b(will)0 5354 y(acquire)h(an)g(Equino)m(x)f(attribute)i(from)e(it)h
-(whic)m(h)g(can)g(b)s(e)f(set,)i(enquired,)f Fx(etc.)53
-b FF(Ho)m(w)m(ev)m(er,)38 b(if)d(the)g(curren)m(t)0 5467
-y(F)-8 b(rame)39 b(is)g(c)m(hanged)g(to)g(b)s(e)e(a)i(basic)g(F)-8
-b(rame,)41 b(whic)m(h)d(do)s(es)h(not)f(ha)m(v)m(e)i(an)e(Equino)m(x)g
-(attribute,)k(then)c(this)0 5580 y(attribute)30 b(will)f(b)s(e)f(absen)
-m(t)h(from)g(the)g(F)-8 b(rameSet)30 b(as)f(w)m(ell.)41
-b(An)m(y)29 b(attempt)h(to)g(reference)f(it)h(will)f(then)g(result)0
-5693 y(in)h(an)g(error.)p eop end
-%%Page: 117 127
-TeXDict begin 117 126 bop 0 52 a Fy(13.9)93 b(Extracting)31
-b(a)g(F)-8 b(rame)31 b(from)f(a)h(F)-8 b(rameSet)1917
-b FF(117)0 351 y Fw(13.9)112 b(Extracting)37 b(a)h(F)-9
-b(rame)38 b(from)g(a)g(F)-9 b(rameSet)0 573 y FF(Although)21
-b(a)h(F)-8 b(rameSet)22 b(ma)m(y)f(b)s(e)g(used)f(in)h(place)h(of)f
-(its)g(curren)m(t)g(F)-8 b(rame)22 b(in)f(most)g(situations,)j(it)d(is)
-g(sometimes)0 686 y(con)m(v)m(enien)m(t)31 b(to)e(ha)m(v)m(e)h(direct)f
-(access)h(to)g(a)f(sp)s(eci\014ed)f(F)-8 b(rame)30 b(within)e(it.)41
-b(This)28 b(ma)m(y)h(b)s(e)f(obtained)h(using)f(the)0
-799 y(astGetF)-8 b(rame)33 b(function,)d(as)h(follo)m(ws:)227
-1048 y Ft(frame)42 b(=)h(astGetFrame\()c(frameset,)g(AST__BASE)h(\);)0
-1310 y FF(This)29 b(w)m(ould)g(return)g(a)g(p)s(oin)m(ter)h(\(not)g(a)g
-(cop)m(y\))h(to)f(the)g(base)f(F)-8 b(rame)31 b(within)e(the)h(F)-8
-b(rameSet.)41 b(Note)31 b(the)f(use)0 1423 y(of)c(AST)p
-Fq(__)p FF(BASE)f(\()p Fu(x)p FF(13.5\))k(as)d(shorthand)f(for)h(the)g
-(v)-5 b(alue)26 b(of)h(the)f(F)-8 b(rameSet's)27 b(Base)g(attribute,)h
-(whic)m(h)e(giv)m(es)0 1536 y(the)31 b(base)f(F)-8 b(rame's)31
-b(index.)0 1829 y Fw(13.10)112 b(Remo)m(ving)38 b(a)g(F)-9
-b(rame)39 b(from)e(a)h(F)-9 b(rameSet)0 2050 y FF(Remo)m(ving)33
-b(a)f(F)-8 b(rame)32 b(from)f(a)h(F)-8 b(rameSet)33 b(is)e(straigh)m
-(tforw)m(ard)h(and)f(is)h(p)s(erformed)e(using)h(the)h(astRemo)m(v)m
-(e-)0 2163 y(F)-8 b(rame)26 b(function.)39 b(Y)-8 b(ou)25
-b(iden)m(tify)h(the)f(F)-8 b(rame)26 b(y)m(ou)f(wish)f(to)i(remo)m(v)m
-(e)h(in)d(the)h(usual)g(w)m(a)m(y)-8 b(,)28 b(b)m(y)d(giving)g(its)h
-(index)0 2276 y(within)k(the)g(F)-8 b(rameSet.)42 b(F)-8
-b(or)31 b(example,)h(the)e(follo)m(wing)i(w)m(ould)e(remo)m(v)m(e)i
-(the)f(F)-8 b(rame)31 b(with)f(index)g(1:)227 2525 y
-Ft(astRemoveFrame\()38 b(frameset,)i(1)j(\);)0 2788 y
-FF(The)35 b(only)g(restriction)h(is)g(that)g(y)m(ou)f(cannot)h(remo)m
-(v)m(e)h(the)f(last)g(remaining)f(F)-8 b(rame)36 b(b)s(ecause)g(a)f(F)
--8 b(rameSet)0 2901 y(m)m(ust)35 b(alw)m(a)m(ys)h(con)m(tain)g(at)f
-(least)h(one)f(F)-8 b(rame.)55 b(When)35 b(a)g(F)-8 b(rame)35
-b(is)g(remo)m(v)m(ed,)i(the)e(F)-8 b(rames)36 b(whic)m(h)e(follo)m(w)0
-3013 y(it)43 b(are)f(re-n)m(um)m(b)s(ered)f(\()p Fx(i.e.)h
-FF(their)g(indices)g(are)h(reduced)e(b)m(y)h(one\))h(so)f(as)g(to)h
-(preserv)m(e)g(the)f(sequence)g(of)0 3126 y(consecutiv)m(e)32
-b(F)-8 b(rame)32 b(indices.)40 b(The)30 b(F)-8 b(rameSet's)32
-b(Nframe)e(attribute)i(is)e(also)h(decremen)m(ted.)0
-3289 y(If)f(appropriate,)h(astRemo)m(v)m(eF)-8 b(rame)34
-b(will)d(mo)s(dify)f(the)g(F)-8 b(rameSet's)32 b(Base)g(and/or)e
-(Curren)m(t)g(attributes)h(so)0 3402 y(that)25 b(they)g(con)m(tin)m(ue)
-h(to)g(iden)m(tify)f(the)g(same)g(F)-8 b(rames)26 b(as)f(previously)-8
-b(.)39 b(If)24 b(either)h(the)g(base)g(or)g(curren)m(t)g(F)-8
-b(rame)0 3515 y(is)37 b(remo)m(v)m(ed,)j(ho)m(w)m(ev)m(er,)h(the)c
-(corresp)s(onding)f(attribute)i(will)g(b)s(ecome)f(un-set,)i(so)f(that)
-g(it)f(rev)m(erts)h(to)g(its)0 3628 y(default)31 b(v)-5
-b(alue)30 b(\()p Fu(x)p FF(13.4\))j(and)d(therefore)h(iden)m(ti\014es)g
-(an)f(alternativ)m(e)j(F)-8 b(rame.)0 3791 y(Note)38
-b(that)e(it)h(is)f(quite)h(p)s(ermissible)f(to)h(remo)m(v)m(e)g(an)m(y)
-g(F)-8 b(rame)37 b(from)f(a)g(F)-8 b(rameSet,)40 b(ev)m(en)d(although)f
-(other)0 3903 y(F)-8 b(rames)33 b(ma)m(y)g(app)s(ear)f(to)i(dep)s(end)c
-(on)j(it.)47 b(F)-8 b(or)34 b(example,)g(in)e(Figure)h(11,)h(if)f(F)-8
-b(rame)33 b(1)g(w)m(ere)g(remo)m(v)m(ed,)h(the)0 4016
-y(correct)h(relationship)f(b)s(et)m(w)m(een)g(F)-8 b(rames)35
-b(2)f(and)f(3)h(w)m(ould)f(still)i(b)s(e)e(preserv)m(ed,)i(although)f
-(they)g(w)m(ould)f(b)s(e)0 4129 y(re-n)m(um)m(b)s(ered)c(as)i(F)-8
-b(rames)31 b(1)g(and)f(2.)p eop end
-%%Page: 118 128
-TeXDict begin 118 127 bop 0 52 a FF(118)1175 b Fy(13)92
-b(COORDINA)-8 b(TE)30 b(SYSTEM)f(NETW)m(ORKS)h(\(FRAMESETS\))p
-eop end
-%%Page: 119 129
-TeXDict begin 119 128 bop 3643 52 a FF(119)0 351 y Fz(14)135
-b(Higher)46 b(Lev)l(el)g(Op)t(erations)f(on)g(F)-11 b(rameSets)0
-610 y Fw(14.1)112 b(Creating)38 b(F)-9 b(rameSets)39
-b(with)e(astCon)m(v)m(ert)0 834 y FF(Before)44 b(considering)e(the)h
-(imp)s(ortan)m(t)g(sub)5 b(ject)42 b(of)h(using)f(F)-8
-b(rameSets)44 b(to)f(con)m(v)m(ert)h(b)s(et)m(w)m(een)g(co)s(ordinate)0
-947 y(systems)c(\()p Fu(x)p FF(14.2\),)45 b(let)c(us)e(return)g
-(brie\015y)g(to)i(reconsider)f(the)g(output)g(generated)g(b)m(y)g
-(astCon)m(v)m(ert.)71 b(W)-8 b(e)0 1060 y(used)37 b(this)g(function)g
-(earlier)h(\()p Fu(x)p FF(12\),)j(when)36 b(con)m(v)m(erting)k(b)s(et)m
-(w)m(een)e(the)f(co)s(ordinate)h(systems)f(represen)m(ted)0
-1173 y(b)m(y)28 b(v)-5 b(arious)28 b(kinds)e(of)i(F)-8
-b(rame,)30 b(and)d(indicated)i(that)f(it)g(returns)f(a)h(F)-8
-b(rameSet)29 b(to)g(represen)m(t)f(the)g(co)s(ordinate)0
-1286 y(con)m(v)m(ersion)k(it)f(iden)m(ti\014es.)41 b(W)-8
-b(e)31 b(are)g(no)m(w)f(in)h(a)f(p)s(osition)h(to)g(examine)g(the)g
-(structure)e(of)i(this)f(F)-8 b(rameSet.)0 1451 y(T)g(ak)m(e)36
-b(our)d(earlier)i(example)g(\()p Fu(x)p FF(12.1\))i(of)d(con)m(v)m
-(erting)i(b)s(et)m(w)m(een)f(the)g(celestial)h(co)s(ordinate)f(systems)
-g(repre-)0 1564 y(sen)m(ted)c(b)m(y)f(t)m(w)m(o)i(SkyF)-8
-b(rames:)227 1818 y Ft(#include)41 b("ast.h")227 1918
-y(AstFrameSet)e(*cvt;)227 2018 y(AstSkyFrame)g(*skyframe1,)g
-(*skyframe2;)227 2217 y(...)227 2416 y(skyframe1)h(=)j(astSkyFrame\()c
-("System=FK4-NO-E)o(,)e(Epoch=B1958,)i(Equinox=B1960")f(\);)227
-2516 y(skyframe2)i(=)j(astSkyFrame\()c("System=Ecliptic)o(,)e
-(Equinox=J2010.5")g(\);)227 2715 y(cvt)43 b(=)g(astConvert\()c
-(skyframe1,)g(skyframe2,)h("")i(\);)0 2983 y FF(This)d(will)i(pro)s
-(duce)e(a)i(p)s(oin)m(ter,)i(\\cvt",)i(to)c(the)f(F)-8
-b(rameSet)42 b(sho)m(wn)d(in)h(Figure)h(12.)142 b(As)40
-b(can)g(b)s(e)g(seen,)717 4115 y @beginspecial 95 @llx
-389 @lly 528 @urx 576 @ury 2814 @rwi @setspecial
-%%BeginDocument: sun211_figures/fsconvert.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 95 389 528 576
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/23 14:34:13
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5273.75 5475.35 m
-5273.75 5600.15 5172.95 5700.95 5048.15 5700.95 c
-1238.15 5700.95 l
-1113.35 5700.95 1012.55 5600.15 1012.55 5475.35 c
-1012.55 4125.35 l
-1012.55 4000.55 1113.35 3899.75 1238.15 3899.75 c
-5048.15 3899.75 l
-5172.95 3899.75 5273.75 4000.55 5273.75 4125.35 c
-f*
-1 g
-5208.95 5531.75 m
-5208.95 5655.35 5109.35 5754.95 4984.55 5754.95 c
-1182.95 5754.95 l
-1058.15 5754.95 958.55 5655.35 958.55 5531.75 c
-958.55 4187.75 l
-958.55 4064.15 1058.15 3964.55 1182.95 3964.55 c
-4984.55 3964.55 l
-5109.35 3964.55 5208.95 4064.15 5208.95 4187.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5208.95 5531.75 m
-5208.95 5655.35 5109.35 5754.95 4984.55 5754.95 c
-1182.95 5754.95 l
-1058.15 5754.95 958.55 5655.35 958.55 5531.75 c
-958.55 4187.75 l
-958.55 4064.15 1058.15 3964.55 1182.95 3964.55 c
-4984.55 3964.55 l
-5109.35 3964.55 5208.95 4064.15 5208.95 4187.75 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1395.35 5256.95 l
-1283.75 5256.95 1192.55 5165.75 1192.55 5055.35 c
-1192.55 4917.35 l
-1192.55 4806.95 1283.75 4715.75 1395.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1342.55 5306.15 l
-1232.15 5306.15 1143.35 5218.55 1143.35 5111.75 c
-1143.35 4979.75 l
-1143.35 4872.95 1232.15 4785.35 1342.55 4785.35 c
-1994.15 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-f*
-16 w
-0 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1342.55 5306.15 l
-1232.15 5306.15 1143.35 5218.55 1143.35 5111.75 c
-1143.35 4979.75 l
-1143.35 4872.95 1232.15 4785.35 1342.55 4785.35 c
-1994.15 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-h
-S
-0.201248 i
-1339.16 5171.59 m
-1339.16 5215.22 l
-1333.37 5215.22 l
-1331.96 5209.82 1330.55 5208.42 1326.93 5208.42 c
-1325.12 5208.42 1322.7 5209.03 1318.47 5210.43 c
-1309.22 5213.86 1302.78 5215.02 1294.93 5215.02 c
-1267.56 5215.02 1251 5199.54 1251 5174.01 c
-1251 5168.98 1251.75 5164.75 1253.07 5160.73 c
-1257.29 5150.06 1268.16 5140.6 1285.27 5132.35 c
-1298.75 5125.91 l
-1316.46 5117.46 1321 5112.22 1321 5101.56 c
-1321 5087.67 1311.25 5079.18 1295.94 5079.18 c
-1284.26 5079.18 1274.6 5083.89 1266.96 5093.31 c
-1261.12 5100.75 1258.3 5107.6 1254.88 5121.88 c
-1249.04 5121.88 l
-1249.04 5072.18 l
-1254.88 5072.18 l
-1256.09 5077.41 1257.7 5079.02 1260.92 5079.02 c
-1262.53 5079.02 1264.74 5078.42 1269.17 5077.01 c
-1279.03 5073.59 1286.48 5072.18 1295.33 5072.18 c
-1325.12 5072.18 1345 5089.28 1345 5114.64 c
-1345 5129.73 1336.04 5144.83 1323.1 5151.27 c
-1293.52 5165.96 l
-1277.22 5174.01 1273 5178.84 1273 5188.7 c
-1273 5201.18 1281.37 5208.02 1294.93 5208.02 c
-1303.99 5208.02 1312.44 5204.47 1319.68 5197.55 c
-1326.53 5190.51 1329.75 5184.67 1333.77 5171.59 c
-h
-1353.89 5076 m
-f*
-1456.24 5168.78 m
-1413.17 5168.78 l
-1413.17 5164.15 l
-1418 5163.34 l
-1423.03 5162.74 1425.05 5161.33 1425.05 5158.71 c
-1425.05 5156.9 1423.03 5153.28 1420.82 5151.07 c
-1395 5125.31 l
-1395 5212 l
-1357.43 5212 l
-1357.43 5207.21 l
-1364.27 5206.61 1367 5203.19 1367 5195.54 c
-1367 5092.91 l
-1367 5085.06 1364.01 5081.43 1357.43 5080.83 c
-1357.43 5076 l
-1405.53 5076 l
-1405.53 5080.83 l
-1396.07 5082.24 1395 5083.45 1395 5092.91 c
-1395 5115.85 l
-1399.69 5120.68 l
-1418.81 5093.71 l
-1422.43 5088.68 1423.64 5086.26 1423.64 5084.65 c
-1423.64 5082.24 1420.82 5081.03 1415.19 5080.83 c
-1415.19 5076 l
-1462.28 5076 l
-1462.28 5081 l
-1460.06 5081 1459.06 5081.57 1457.25 5083.85 c
-1418.2 5137.78 l
-1438.33 5158.91 1443.56 5162.54 1456.24 5164.15 c
-h
-1464.89 5076 m
-f*
-1561.6 5169 m
-1531.21 5169 l
-1531.21 5163.95 l
-1539.86 5163.54 1542.28 5162.13 1542.28 5157.3 c
-1542.28 5154.89 1541.88 5153.48 1540.07 5148.25 c
-1526.38 5109.61 l
-1511.89 5146.84 l
-1507.87 5157.1 1507.87 5157.1 1507.87 5158.71 c
-1507.87 5161.73 1510.28 5163.34 1515.31 5163.74 c
-1518.53 5163.95 l
-1518.53 5169 l
-1468 5169 l
-1468 5163.95 l
-1472.57 5163.34 1473.82 5162.74 1475.06 5161.13 c
-1476.87 5158.71 1484.32 5142.81 1488.34 5132.75 c
-1512.49 5073.38 l
-1508.87 5062.72 l
-1505.45 5052.66 1500.42 5046 1495.59 5046 c
-1493.78 5046 1492 5047.71 1492 5049.64 c
-1492 5049.84 1492 5050.24 1492.37 5050.84 c
-1492.57 5051.85 1492.77 5052.86 1492.77 5053.66 c
-1492.77 5059.5 1487.94 5063.52 1481.1 5063.52 c
-1473.45 5063.52 1468 5058.29 1468 5050.64 c
-1468 5041.18 1476.14 5035 1487.74 5035 c
-1494.58 5035 1500.42 5037.13 1504.65 5041.39 c
-1508.87 5046.01 1512.9 5054.06 1519.94 5072.98 c
-1549.93 5152.88 l
-1553.35 5161.33 1555.36 5163.14 1561.6 5163.95 c
-h
-1565.62 5076 m
-f*
-1682.33 5212 m
-1568.22 5212 l
-1568.22 5207 l
-1582.11 5206.2 1586 5203.18 1586 5192.72 c
-1586 5095.32 l
-1586 5084.85 1583.17 5082.64 1568.22 5081.03 c
-1568.22 5076 l
-1640.67 5076 l
-1640.67 5081 l
-1622.15 5081.81 1619 5084.23 1619 5095.32 c
-1619 5142.21 l
-1639.22 5141.81 1646.55 5134.36 1649.32 5111.02 c
-1654.35 5111.02 l
-1654.35 5179.04 l
-1649.32 5179.04 l
-1645.76 5156.1 1638.82 5149.05 1619 5149.05 c
-1619 5195.74 l
-1619 5203.19 1621.52 5205 1631.41 5205 c
-1650.13 5205 1661.8 5201.64 1668.04 5194.74 c
-1672.47 5189.71 1674.68 5184.27 1677.5 5171.59 c
-1682.33 5171.59 l
-h
-1687.96 5076 m
-f*
-1731.19 5169 m
-1692.84 5169 l
-1692.84 5163.95 l
-1701.49 5162.74 1704 5160.12 1704 5152.07 c
-1704 5092.9 l
-1704 5084.65 1701.93 5082.44 1692.84 5080.83 c
-1692.84 5076 l
-1746.37 5076 l
-1746.37 5080.83 l
-1734.09 5081.63 1732 5084.25 1732 5096.73 c
-1732 5134.76 l
-1732 5145.23 1737.49 5153.88 1743.95 5153.88 c
-1745.56 5153.88 1747.37 5152.47 1749.59 5149.25 c
-1753.41 5143.82 1756.43 5142.01 1761.66 5142.01 c
-1769.11 5142.01 1774.34 5147.64 1774.34 5155.29 c
-1774.34 5164.55 1767.5 5171.41 1758.04 5171.41 c
-1748.1 5171.41 1740.54 5166.12 1731.19 5152.27 c
-h
-1776.35 5076 m
-f*
-1871.19 5088.88 m
-1869.18 5086.87 l
-1868.57 5086.26 1867.97 5086.06 1866.96 5086.06 c
-1864.15 5086.06 1863 5087.67 1863 5091.09 c
-1863 5143.62 l
-1863 5160.73 1847.6 5171.42 1822.89 5171.42 c
-1800.15 5171.42 1784.85 5161.06 1784.85 5145.83 c
-1784.85 5137.38 1789.69 5132.55 1797.94 5132.55 c
-1805.99 5132.55 1811.62 5137.38 1811.62 5144.22 c
-1811.62 5147.04 1810.61 5149.66 1808 5152.88 c
-1806.19 5154.89 1805.58 5156.1 1805.58 5157.3 c
-1805.58 5161.53 1811.02 5164.42 1818.26 5164.42 c
-1830.14 5164.42 1835.86 5159.08 1835.86 5147.04 c
-1835.86 5132.35 l
-1811.91 5125.1 1802.29 5121.48 1794.51 5116.45 c
-1785.46 5110.41 1781 5103.37 1781 5094.52 c
-1781 5082.24 1790.27 5073.18 1803.17 5073.18 c
-1814.84 5073.18 1824.1 5077.21 1835.17 5087.27 c
-1837.38 5077.01 1841.81 5073.18 1851.67 5073.18 c
-1860.32 5073.18 1866.56 5076.4 1874.21 5084.65 c
-h
-1835 5096.13 m
-1829.55 5089.89 1825.52 5087.47 1820.68 5087.47 c
-1814.64 5087.47 1810 5092.91 1810 5100.96 c
-1810 5112.63 1818.61 5120.88 1835 5125.31 c
-h
-1876.62 5076 m
-f*
-1919.4 5169 m
-1880.7 5169 l
-1880.7 5163.95 l
-1889.55 5162.74 1892 5160.32 1892 5152.07 c
-1892 5092.9 l
-1892 5084.65 1889.74 5082.44 1880.7 5080.83 c
-1880.7 5076 l
-1929 5076 l
-1929 5080.83 l
-1921.95 5081.84 1920 5084.65 1920 5092.3 c
-1920 5146.03 l
-1920 5147.04 1922.87 5150.66 1925.18 5152.88 c
-1929.4 5156.1 1933.02 5158.42 1936.65 5158.42 c
-1944.5 5158.42 1948 5153.59 1948 5141 c
-1948 5092.3 l
-1948 5084.05 1945.68 5081.43 1937.85 5080.83 c
-1937.85 5076 l
-1984.95 5076 l
-1984.95 5080.83 l
-1977.9 5081.64 1976 5084.65 1976 5092.3 c
-1976 5146.03 l
-1976 5147.04 1978.73 5150.46 1980.92 5152.68 c
-1985.35 5156.1 1988.97 5158.42 1992.59 5158.42 c
-2000.24 5158.42 2003 5153.38 2003 5141 c
-2003 5092.3 l
-2003 5083.85 2000.85 5081.43 1993.4 5080.83 c
-1993.4 5076 l
-2041.3 5076 l
-2041.3 5081 l
-2033.45 5081.4 2031 5083.78 2031 5092.3 c
-2031 5142.81 l
-2031 5160.12 2020.43 5171.42 2004.07 5171.42 c
-1992.59 5171.42 1984.95 5166.73 1974.48 5153.68 c
-1968.44 5166.36 1961.4 5171.42 1948.72 5171.42 c
-1935.95 5171.42 1926.98 5165.91 1919.4 5153.68 c
-h
-2044.64 5076 m
-f*
-2122.9 5101.16 m
-2114.65 5091.29 2108.61 5087.18 2099.96 5087.18 c
-2092.31 5087.18 2086.27 5090.77 2082.25 5097.94 c
-2078.43 5104.54 2076.82 5111.56 2076.01 5126 c
-2126.73 5126 l
-2125.52 5142.36 2122.5 5151.43 2116.26 5159.12 c
-2109.82 5166.96 2100.36 5171.42 2089.09 5171.42 c
-2063.94 5171.42 2047.03 5151.4 2047.03 5121.88 c
-2047.03 5092.5 2063.53 5073.18 2088.49 5073.18 c
-2104.79 5073.18 2114.65 5079.42 2127.73 5098.34 c
-h
-2075 5133 m
-2075.61 5156.96 2079.23 5164.42 2089.09 5164.42 c
-2094.93 5164.42 2098.55 5161.38 2100.16 5155.49 c
-2101.17 5151.67 2101.57 5146.03 2101.97 5135.77 c
-2101.97 5133 l
-h
-2131.35 5076 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -1659 -4890]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-5033.75 5048.15 m
-5033.75 5158.55 4942.55 5249.75 4830.95 5249.75 c
-4126.55 5249.75 l
-4014.95 5249.75 3923.75 5158.55 3923.75 5048.15 c
-3923.75 4910.15 l
-3923.75 4799.75 4014.95 4708.55 4126.55 4708.55 c
-4830.95 4708.55 l
-4942.55 4708.55 5033.75 4799.75 5033.75 4910.15 c
-f*
-1 g
-4964.15 5104.55 m
-4964.15 5211.35 4875.35 5298.95 4766.15 5298.95 c
-4073.75 5298.95 l
-3963.35 5298.95 3874.55 5211.35 3874.55 5104.55 c
-3874.55 4972.55 l
-3874.55 4865.75 3963.35 4778.15 4073.75 4778.15 c
-4764.95 4778.15 l
-4875.35 4778.15 4964.15 4865.75 4964.15 4972.55 c
-f*
-0 g
-4964.15 5104.55 m
-4964.15 5211.35 4875.35 5298.95 4766.15 5298.95 c
-4073.75 5298.95 l
-3963.35 5298.95 3874.55 5211.35 3874.55 5104.55 c
-3874.55 4972.55 l
-3874.55 4865.75 3963.35 4778.15 4073.75 4778.15 c
-4764.95 4778.15 l
-4875.35 4778.15 4964.15 4865.75 4964.15 4972.55 c
-h
-S
-0.201248 i
-4082.16 5164.59 m
-4082.16 5208.22 l
-4076.37 5208.22 l
-4074.96 5202.82 4073.55 5201.42 4069.93 5201.42 c
-4068.12 5201.42 4065.7 5202.03 4061.47 5203.43 c
-4052.22 5206.86 4045.78 5208.02 4037.93 5208.02 c
-4010.56 5208.02 3994 5192.54 3994 5167.01 c
-3994 5161.98 3994.75 5157.75 3996.07 5153.73 c
-4000.29 5143.06 4011.16 5133.6 4028.27 5125.35 c
-4041.75 5118.91 l
-4059.46 5110.46 4064 5105.22 4064 5094.56 c
-4064 5080.67 4054.25 5072.18 4038.94 5072.18 c
-4027.26 5072.18 4017.6 5076.89 4009.96 5086.31 c
-4004.12 5093.75 4001.3 5100.6 3997.88 5114.88 c
-3992.04 5114.88 l
-3992.04 5065.18 l
-3997.88 5065.18 l
-3999.09 5070.41 4000.7 5072.02 4003.92 5072.02 c
-4005.53 5072.02 4007.74 5071.42 4012.17 5070.01 c
-4022.03 5066.59 4029.48 5065.18 4038.33 5065.18 c
-4068.12 5065.18 4088 5082.28 4088 5107.64 c
-4088 5122.73 4079.04 5137.83 4066.1 5144.27 c
-4036.52 5158.96 l
-4020.22 5167.01 4016 5171.84 4016 5181.7 c
-4016 5194.18 4024.37 5201.02 4037.93 5201.02 c
-4046.99 5201.02 4055.44 5197.47 4062.68 5190.55 c
-4069.53 5183.51 4072.75 5177.67 4076.77 5164.59 c
-h
-4096.89 5069 m
-f*
-4200.24 5161.78 m
-4157.17 5161.78 l
-4157.17 5157.15 l
-4162 5156.34 l
-4167.03 5155.74 4169.05 5154.33 4169.05 5151.71 c
-4169.05 5149.9 4167.03 5146.28 4164.82 5144.07 c
-4139 5118.31 l
-4139 5205 l
-4101.43 5205 l
-4101.43 5200.21 l
-4108.27 5199.61 4111 5196.19 4111 5188.54 c
-4111 5085.91 l
-4111 5078.06 4108.01 5074.43 4101.43 5073.83 c
-4101.43 5069 l
-4149.53 5069 l
-4149.53 5073.83 l
-4140.07 5075.24 4139 5076.45 4139 5085.91 c
-4139 5108.85 l
-4143.69 5113.68 l
-4162.81 5086.71 l
-4166.43 5081.68 4167.64 5079.26 4167.64 5077.65 c
-4167.64 5075.24 4164.82 5074.03 4159.19 5073.83 c
-4159.19 5069 l
-4206.28 5069 l
-4206.28 5074 l
-4204.06 5074 4203.06 5074.57 4201.25 5076.85 c
-4162.2 5130.78 l
-4182.33 5151.91 4187.56 5155.54 4200.24 5157.15 c
-h
-4208.89 5069 m
-f*
-4303.6 5162 m
-4273.21 5162 l
-4273.21 5156.95 l
-4281.86 5156.54 4284.28 5155.13 4284.28 5150.3 c
-4284.28 5147.89 4283.88 5146.48 4282.07 5141.25 c
-4268.38 5102.61 l
-4253.89 5139.84 l
-4249.87 5150.1 4249.87 5150.1 4249.87 5151.71 c
-4249.87 5154.73 4252.28 5156.34 4257.31 5156.74 c
-4260.53 5156.95 l
-4260.53 5162 l
-4210 5162 l
-4210 5156.95 l
-4214.57 5156.34 4215.82 5155.74 4217.06 5154.13 c
-4218.87 5151.71 4226.32 5135.81 4230.34 5125.75 c
-4254.49 5066.38 l
-4250.87 5055.72 l
-4247.45 5045.66 4242.42 5039 4237.59 5039 c
-4235.78 5039 4234 5040.71 4234 5042.64 c
-4234 5042.84 4234 5043.24 4234.37 5043.84 c
-4234.57 5044.85 4234.77 5045.86 4234.77 5046.66 c
-4234.77 5052.5 4229.94 5056.52 4223.1 5056.52 c
-4215.45 5056.52 4210 5051.29 4210 5043.64 c
-4210 5034.18 4218.14 5028 4229.74 5028 c
-4236.58 5028 4242.42 5030.13 4246.65 5034.39 c
-4250.87 5039.01 4254.9 5047.06 4261.94 5065.98 c
-4291.93 5145.88 l
-4295.35 5154.33 4297.36 5156.14 4303.6 5156.95 c
-h
-4307.62 5069 m
-f*
-4425.33 5205 m
-4311.22 5205 l
-4311.22 5200 l
-4325.11 5199.2 4329 5196.18 4329 5185.72 c
-4329 5088.32 l
-4329 5077.85 4326.17 5075.64 4311.22 5074.03 c
-4311.22 5069 l
-4383.67 5069 l
-4383.67 5074 l
-4365.15 5074.81 4362 5077.23 4362 5088.32 c
-4362 5135.21 l
-4382.22 5134.81 4389.55 5127.36 4392.32 5104.02 c
-4397.35 5104.02 l
-4397.35 5172.04 l
-4392.32 5172.04 l
-4388.76 5149.1 4381.82 5142.05 4362 5142.05 c
-4362 5188.74 l
-4362 5196.19 4364.52 5198 4374.41 5198 c
-4393.13 5198 4404.8 5194.64 4411.04 5187.74 c
-4415.47 5182.71 4417.68 5177.27 4420.5 5164.59 c
-4425.33 5164.59 l
-h
-4430.96 5069 m
-f*
-4474.19 5162 m
-4435.84 5162 l
-4435.84 5156.95 l
-4444.49 5155.74 4447 5153.12 4447 5145.07 c
-4447 5085.9 l
-4447 5077.65 4444.93 5075.44 4435.84 5073.83 c
-4435.84 5069 l
-4489.37 5069 l
-4489.37 5073.83 l
-4477.09 5074.63 4475 5077.25 4475 5089.73 c
-4475 5127.76 l
-4475 5138.23 4480.49 5146.88 4486.95 5146.88 c
-4488.56 5146.88 4490.37 5145.47 4492.59 5142.25 c
-4496.41 5136.82 4499.43 5135.01 4504.66 5135.01 c
-4512.11 5135.01 4517.34 5140.64 4517.34 5148.29 c
-4517.34 5157.55 4510.5 5164.41 4501.04 5164.41 c
-4491.1 5164.41 4483.54 5159.12 4474.19 5145.27 c
-h
-4519.35 5069 m
-f*
-4614.19 5081.88 m
-4612.18 5079.87 l
-4611.57 5079.26 4610.97 5079.06 4609.96 5079.06 c
-4607.15 5079.06 4606 5080.67 4606 5084.09 c
-4606 5136.62 l
-4606 5153.73 4590.6 5164.42 4565.89 5164.42 c
-4543.15 5164.42 4527.85 5154.06 4527.85 5138.83 c
-4527.85 5130.38 4532.69 5125.55 4540.94 5125.55 c
-4548.99 5125.55 4554.62 5130.38 4554.62 5137.22 c
-4554.62 5140.04 4553.61 5142.66 4551 5145.88 c
-4549.19 5147.89 4548.58 5149.1 4548.58 5150.3 c
-4548.58 5154.53 4554.02 5157.42 4561.26 5157.42 c
-4573.14 5157.42 4578.86 5152.08 4578.86 5140.04 c
-4578.86 5125.35 l
-4554.91 5118.1 4545.29 5114.48 4537.51 5109.45 c
-4528.46 5103.41 4524 5096.37 4524 5087.52 c
-4524 5075.24 4533.27 5066.18 4546.17 5066.18 c
-4557.84 5066.18 4567.1 5070.21 4578.17 5080.27 c
-4580.38 5070.01 4584.81 5066.18 4594.67 5066.18 c
-4603.32 5066.18 4609.56 5069.4 4617.21 5077.65 c
-h
-4578 5089.13 m
-4572.55 5082.89 4568.52 5080.47 4563.68 5080.47 c
-4557.64 5080.47 4553 5085.91 4553 5093.96 c
-4553 5105.63 4561.61 5113.88 4578 5118.31 c
-h
-4619.62 5069 m
-f*
-4661.4 5162 m
-4622.7 5162 l
-4622.7 5156.95 l
-4631.55 5155.74 4634 5153.32 4634 5145.07 c
-4634 5085.9 l
-4634 5077.65 4631.74 5075.44 4622.7 5073.83 c
-4622.7 5069 l
-4671 5069 l
-4671 5073.83 l
-4663.95 5074.84 4662 5077.65 4662 5085.3 c
-4662 5139.03 l
-4662 5140.04 4664.87 5143.66 4667.18 5145.88 c
-4671.4 5149.1 4675.02 5151.42 4678.65 5151.42 c
-4686.5 5151.42 4690 5146.59 4690 5134 c
-4690 5085.3 l
-4690 5077.05 4687.68 5074.43 4679.85 5073.83 c
-4679.85 5069 l
-4726.95 5069 l
-4726.95 5073.83 l
-4719.9 5074.64 4718 5077.65 4718 5085.3 c
-4718 5139.03 l
-4718 5140.04 4720.73 5143.46 4722.92 5145.68 c
-4727.35 5149.1 4730.97 5151.42 4734.59 5151.42 c
-4742.24 5151.42 4745 5146.38 4745 5134 c
-4745 5085.3 l
-4745 5076.85 4742.85 5074.43 4735.4 5073.83 c
-4735.4 5069 l
-4783.3 5069 l
-4783.3 5074 l
-4775.45 5074.4 4773 5076.78 4773 5085.3 c
-4773 5135.81 l
-4773 5153.12 4762.43 5164.42 4746.07 5164.42 c
-4734.59 5164.42 4726.95 5159.73 4716.48 5146.68 c
-4710.44 5159.36 4703.4 5164.42 4690.72 5164.42 c
-4677.95 5164.42 4668.98 5158.91 4661.4 5146.68 c
-h
-4786.64 5069 m
-f*
-4865.9 5094.16 m
-4857.65 5084.29 4851.61 5080.18 4842.96 5080.18 c
-4835.31 5080.18 4829.27 5083.77 4825.25 5090.94 c
-4821.43 5097.54 4819.82 5104.56 4819.01 5119 c
-4869.73 5119 l
-4868.52 5135.36 4865.5 5144.43 4859.26 5152.12 c
-4852.82 5159.96 4843.36 5164.42 4832.09 5164.42 c
-4806.94 5164.42 4790.03 5144.4 4790.03 5114.88 c
-4790.03 5085.5 4806.53 5066.18 4831.49 5066.18 c
-4847.79 5066.18 4857.65 5072.42 4870.73 5091.34 c
-h
-4818 5126 m
-4818.61 5149.96 4822.23 5157.42 4832.09 5157.42 c
-4837.93 5157.42 4841.55 5154.38 4843.16 5148.49 c
-4844.17 5144.67 4844.57 5139.03 4844.97 5128.77 c
-4844.97 5126 l
-h
-4874.35 5069 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -4394 -4883]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-8 w
-2175.35 4842.95 m
-2222.15 4748.15 2351.75 4684.55 2496.95 4684.55 c
-2577.35 4684.55 2655.35 4703.75 2717.75 4740.95 c
-S
-2709.35 4683.35 m
-2694.95 4733.75 l
-2650.55 4758.95 l
-2799.35 4816.55 l
-f*
-0.564706 g
-3668.15 4929.35 m
-3533.75 4966.55 l
-3629.75 5021.75 l
-3476.15 5031.35 l
-3518.15 5100.95 l
-3370.55 5080.55 l
-3353.75 5152.55 l
-3233.75 5106.95 l
-3158.15 5170.55 l
-3082.55 5106.95 l
-2962.55 5152.55 l
-2944.55 5080.55 l
-2795.75 5100.95 l
-2840.15 5031.35 l
-2686.55 5021.75 l
-2782.55 4966.55 l
-2646.95 4929.35 l
-2782.55 4894.55 l
-2686.55 4838.15 l
-2840.15 4829.75 l
-2795.75 4760.15 l
-2944.55 4779.35 l
-2962.55 4708.55 l
-3082.55 4752.95 l
-3158.15 4689.35 l
-3233.75 4752.95 l
-3353.75 4708.55 l
-3370.55 4779.35 l
-3518.15 4760.15 l
-3476.15 4829.75 l
-3629.75 4838.15 l
-3533.75 4894.55 l
-f*
-1 g
-3608.15 4989.35 m
-3473.75 5026.55 l
-3569.75 5081.75 l
-3416.15 5091.35 l
-3458.15 5160.95 l
-3310.55 5140.55 l
-3293.75 5212.55 l
-3173.75 5166.95 l
-3098.15 5230.55 l
-3022.55 5166.95 l
-2902.55 5212.55 l
-2884.55 5140.55 l
-2735.75 5160.95 l
-2780.15 5091.35 l
-2626.55 5081.75 l
-2722.55 5026.55 l
-2586.95 4989.35 l
-2722.55 4954.55 l
-2626.55 4898.15 l
-2780.15 4889.75 l
-2735.75 4820.15 l
-2884.55 4839.35 l
-2902.55 4768.55 l
-3022.55 4812.95 l
-3098.15 4749.35 l
-3173.75 4812.95 l
-3293.75 4768.55 l
-3310.55 4839.35 l
-3458.15 4820.15 l
-3416.15 4889.75 l
-3569.75 4898.15 l
-3473.75 4954.55 l
-f*
-0 g
-3608.15 4989.35 m
-3473.75 5026.55 l
-3569.75 5081.75 l
-3416.15 5091.35 l
-3458.15 5160.95 l
-3310.55 5140.55 l
-3293.75 5212.55 l
-3173.75 5166.95 l
-3098.15 5230.55 l
-3022.55 5166.95 l
-2902.55 5212.55 l
-2884.55 5140.55 l
-2735.75 5160.95 l
-2780.15 5091.35 l
-2626.55 5081.75 l
-2722.55 5026.55 l
-2586.95 4989.35 l
-2722.55 4954.55 l
-2626.55 4898.15 l
-2780.15 4889.75 l
-2735.75 4820.15 l
-2884.55 4839.35 l
-2902.55 4768.55 l
-3022.55 4812.95 l
-3098.15 4749.35 l
-3173.75 4812.95 l
-3293.75 4768.55 l
-3310.55 4839.35 l
-3458.15 4820.15 l
-3416.15 4889.75 l
-3569.75 4898.15 l
-3473.75 4954.55 l
-3608.15 4989.35 l
-3569.75 4989.35 l
-3447.35 4958.15 l
-3536.15 4906.55 l
-3398.15 4898.15 l
-3438.95 4832.15 l
-3303.35 4851.35 l
-3286.55 4781.75 l
-3171.35 4824.95 l
-3098.15 4762.55 l
-3024.95 4824.95 l
-2909.75 4781.75 l
-2891.75 4851.35 l
-2756.15 4832.15 l
-2796.95 4898.15 l
-2660.15 4906.55 l
-2748.95 4958.15 l
-2626.55 4989.35 l
-2747.75 5021.75 l
-2660.15 5074.55 l
-2796.95 5081.75 l
-2756.15 5148.95 l
-2891.75 5129.75 l
-2909.75 5198.15 l
-3024.95 5156.15 l
-3098.15 5218.55 l
-3171.35 5156.15 l
-3286.55 5198.15 l
-3303.35 5129.75 l
-3438.95 5148.95 l
-3398.15 5081.75 l
-3536.15 5074.55 l
-3447.35 5021.75 l
-3569.75 4989.35 l
-3608.15 4989.35 l
-f*
-0.2 i
-2920.08 5040.76 m
-2900.08 4966.52 l
-2897.52 4957.88 2894.48 4955.64 2884.08 4955 c
-2884.08 4951 l
-2934 4951 l
-2934 4955 l
-2924.72 4955.48 2922.48 4956.76 2922.48 4961.88 c
-2922.48 4963.64 2922.8 4965.4 2923.76 4969.08 c
-2923.92 4969.88 l
-2924.08 4970.68 l
-2943.76 5042.52 l
-2946.16 5050.84 2948.56 5053.08 2956.72 5054.04 c
-2956.72 5058 l
-2922.8 5058 l
-2873.2 4981.24 l
-2864.56 5058 l
-2829.2 5058 l
-2829.2 5054 l
-2839.28 5053.52 2840.72 5052.89 2840.72 5048.44 c
-2840.72 5046.2 2840.08 5043.32 2838.96 5039.16 c
-2821.52 4979.48 l
-2815.12 4958.68 2814 4956.92 2805.36 4955 c
-2805.36 4951 l
-2838.48 4951 l
-2838.48 4955 l
-2828.24 4956.28 2825.68 4958.2 2825.68 4964.76 c
-2825.68 4967.48 2826.48 4971.48 2828.72 4979.48 c
-2844.88 5038.52 l
-2855.6 4949.08 l
-2860.08 4949.08 l
-h
-2952.24 4951 m
-f*
-3021.44 4971.32 m
-3014.88 4962.52 3012.48 4959.76 3009.92 4959.76 c
-3008.64 4959.76 3008 4960.86 3008 4962.52 c
-3008 4966.52 3009.44 4973.08 3013.44 4986.2 c
-3024.8 5023.96 l
-3007.04 5022.84 l
-3004.16 5013.4 l
-3002.72 5021.56 2999.2 5025.08 2992.32 5025.08 c
-2972.64 5025.08 2949 4994.27 2949 4969.24 c
-2949 4957.08 2955.74 4948.92 2965.92 4948.92 c
-2975.68 4948.92 2983.04 4954.68 2992.16 4970.04 c
-2990.24 4963.48 2990 4961.56 2990 4959.32 c
-2990 4953.4 2994.76 4948.76 3000.64 4948.76 c
-3008.16 4948.76 3015.52 4955 3024.8 4968.92 c
-h
-2994.56 5018.2 m
-2998.08 5017.88 3000.56 5015 3000.56 5010.68 c
-3000.56 5001.08 2995.24 4983.32 2988.96 4972.28 c
-2984.64 4964.44 2979.84 4959.92 2975.52 4959.92 c
-2971.36 4959.92 2968 4963.75 2968 4968.92 c
-2968 4977.24 2973.42 4993.24 2980.16 5005.08 c
-2984.96 5013.56 2990.24 5018.52 2994.56 5018.2 c
-h
-3032 4951 m
-f*
-3066.56 5024.92 m
-3050.24 5022.36 3044 5021.4 3035.68 5020.44 c
-3035.68 5016 l
-3042.88 5015.69 3044.32 5015.07 3044.32 5012.12 c
-3044.32 5010.52 3043.04 5004.76 3040.8 4996.44 c
-3024.8 4934.36 l
-3021.76 4923.8 3020.48 4922.84 3012.8 4923 c
-3012.8 4918 l
-3052.64 4918 l
-3052.64 4923 l
-3044.64 4923.14 3042.24 4924.16 3042.24 4927.64 c
-3042.24 4929.88 3043.36 4934.68 3046.4 4945.88 c
-3047.52 4949.72 3047.52 4950.04 3048.16 4952.44 c
-3053.76 4949.56 3055.68 4948.92 3059.04 4948.92 c
-3080.8 4948.92 3103.36 4977.88 3103.36 5005.56 c
-3103.36 5017.4 3096.64 5025.08 3086.08 5025.08 c
-3076.96 5025.08 3069.92 5019.92 3060.48 5006.52 c
-h
-3077.12 5013.56 m
-3081.28 5013.24 3083.68 5009.56 3083.36 5004.44 c
-3082.72 4993.88 3077.6 4978.04 3071.84 4967.64 c
-3066.88 4959 3061.76 4953.92 3056.32 4953.92 c
-3052.8 4953.92 3050.08 4956.75 3050.08 4960.28 c
-3050.08 4963 3051.84 4969.56 3056.16 4984.12 c
-3059.68 4995.8 3061.12 4999.8 3063.52 5003.48 c
-3067.52 5009.72 3072.96 5013.88 3077.12 5013.56 c
-h
-3112 4951 m
-f*
-3147.56 5024.92 m
-3131.24 5022.36 3125 5021.4 3116.68 5020.44 c
-3116.68 5016 l
-3123.88 5015.69 3125.32 5015.07 3125.32 5012.12 c
-3125.32 5010.52 3124.04 5004.76 3121.8 4996.44 c
-3105.8 4934.36 l
-3102.76 4923.8 3101.48 4922.84 3093.8 4923 c
-3093.8 4918 l
-3133.64 4918 l
-3133.64 4923 l
-3125.64 4923.14 3123.24 4924.16 3123.24 4927.64 c
-3123.24 4929.88 3124.36 4934.68 3127.4 4945.88 c
-3128.52 4949.72 3128.52 4950.04 3129.16 4952.44 c
-3134.76 4949.56 3136.68 4948.92 3140.04 4948.92 c
-3161.8 4948.92 3184.36 4977.88 3184.36 5005.56 c
-3184.36 5017.4 3177.64 5025.08 3167.08 5025.08 c
-3157.96 5025.08 3150.92 5019.92 3141.48 5006.52 c
-h
-3158.12 5013.56 m
-3162.28 5013.24 3164.68 5009.56 3164.36 5004.44 c
-3163.72 4993.88 3158.6 4978.04 3152.84 4967.64 c
-3147.88 4959 3142.76 4953.92 3137.32 4953.92 c
-3133.8 4953.92 3131.08 4956.75 3131.08 4960.28 c
-3131.08 4963 3132.84 4969.56 3137.16 4984.12 c
-3140.68 4995.8 3142.12 4999.8 3144.52 5003.48 c
-3148.52 5009.72 3153.96 5013.88 3158.12 5013.56 c
-h
-3193 4951 m
-f*
-3226.56 4973.56 m
-3224.32 4970.36 l
-3220.16 4964.12 3216.48 4960.56 3214.08 4960.56 c
-3212.8 4960.56 3212 4961.77 3212 4963.16 c
-3212 4964.6 3212.62 4968.76 3213.12 4971.48 c
-3227.68 5024.92 l
-3219.22 5023 3208.26 5021.4 3196.04 5020.44 c
-3196.04 5016 l
-3197.44 5016 l
-3202.24 5016 3205.48 5014.44 3205.48 5011.48 c
-3205.48 5010.2 3204.71 5007.8 3203.68 5005.08 c
-3194.4 4970.68 l
-3193.12 4966.04 3193 4961.88 3193 4959.64 c
-3193 4953.56 3197.2 4949.56 3203.36 4949.56 c
-3212.96 4949.56 3218.88 4954.36 3230.08 4971.32 c
-h
-3222.88 5060.4 m
-3217.44 5060.4 3213 5055.46 3213 5050.04 c
-3213 5043.8 3217.26 5039.4 3223.04 5039.4 c
-3229.12 5039.4 3234 5043.86 3234 5049.56 c
-3234 5055.48 3229 5060.4 3222.88 5060.4 c
-h
-3236.48 4951 m
-f*
-3311.36 4972.6 m
-3304.96 4962.68 3302.88 4960.56 3300.16 4960.56 c
-3298.88 4960.56 3298 4961.63 3298 4963.16 c
-3298 4964.76 3298.94 4968.12 3301.92 4977.08 c
-3307.68 4994.52 l
-3310.24 5002.04 3312 5009.08 3312 5012.92 c
-3312 5020.76 3307.78 5025.08 3300.16 5025.08 c
-3294.24 5025.08 3288.48 5022.62 3284.16 5018.36 c
-3278.24 5012.76 3275.2 5008.92 3264.48 4993.08 c
-3274.72 5024.76 l
-3264.48 5022.52 3251.68 5020.92 3242.72 5020.6 c
-3242.72 5015.8 l
-3249.44 5015.65 3251.36 5014.92 3251.36 5012.12 c
-3251.36 5010.2 3249.12 5001.72 3244 4983.64 c
-3240.32 4970.68 3239.2 4966.52 3235.04 4951 c
-3254.4 4951 l
-3261.92 4978.68 3267.68 4992.6 3277.6 5005.56 c
-3280.8 5009.88 3285.76 5013.08 3288.64 5013.08 c
-3290.72 5013.08 3293 5011.63 3293 5010.04 c
-3293 5009.56 3292.54 5008.28 3291.84 5006.68 c
-3283.04 4980.12 l
-3280.48 4972.44 3279 4963.32 3279 4959.16 c
-3279 4953.08 3282.84 4949.56 3289.44 4949.56 c
-3299.04 4949.56 3305.6 4955 3314.88 4970.52 c
-h
-3324.96 4951 m
-f*
-3402.48 5020 m
-3384.72 5020 l
-3379.28 5023.58 3374.48 5025.08 3367.12 5025.08 c
-3347.44 5025.08 3331 5012.05 3331 4995.8 c
-3331 4987.64 3335.35 4981.88 3344.4 4978.2 c
-3331.28 4970.84 3329 4968.6 3329 4962.68 c
-3329 4957.56 3331.89 4954.52 3338.96 4952.12 c
-3329.04 4949.72 3325.84 4948.44 3322 4945.4 c
-3319.44 4943.16 3318 4939.32 3318 4935.48 c
-3318 4925.08 3329.56 4919 3347.76 4919 c
-3370.32 4919 3386 4928.72 3386 4942.52 c
-3386 4952.28 3379.6 4957.56 3362.16 4962.52 c
-3353.68 4964.92 l
-3348.56 4966.36 3345 4968.6 3345 4971 c
-3345 4973.56 3347.68 4976.28 3350 4976.28 c
-3350.8 4976.28 3351.92 4976.24 3353.2 4976.12 c
-3354.96 4975.64 3356.24 4975 3358.16 4975 c
-3365.2 4975 3372.4 4977.09 3378.48 4980.92 c
-3387.76 4986.2 3393 4994.36 3393 5003.96 c
-3393 5006.64 3392.59 5008.32 3391.76 5011 c
-3402.48 5011 l
-h
-3344.4 4950.04 m
-3346.32 4949.88 3358.48 4945.72 3362 4944.12 c
-3366.48 4941.88 3369 4939.16 3369 4935 c
-3369 4927.96 3361.8 4924 3349.36 4924 c
-3338.96 4924 3332 4929.1 3332 4936.44 c
-3332 4939.48 3333.32 4942.2 3336.24 4945.24 c
-3338.32 4947.32 3343.12 4950.2 3344.4 4950.04 c
-h
-3366.8 5020.08 m
-3370.96 5020.08 3374 5016.19 3374 5010.52 c
-3374 5005.08 3372.08 4997.4 3369.36 4991.48 c
-3366 4984.12 3361.84 4980 3356.88 4980 c
-3352.56 4980 3350 4983.52 3350 4989.88 c
-3350 4996.28 3352.79 5006.04 3356.24 5012.12 c
-3359.28 5017.4 3362.64 5020.08 3366.8 5020.08 c
-h
-3406 4951 m
-f*
-1 i
-1 g
-1515.35 4526.15 m
-1596.95 4526.15 l
-1596.95 4374.95 l
-1763.75 4374.95 l
-1763.75 4526.15 l
-1845.35 4526.15 l
-1680.95 4679.75 l
-f*
-0 g
-1515.35 4526.15 m
-1596.95 4526.15 l
-1596.95 4374.95 l
-1763.75 4374.95 l
-1763.75 4526.15 l
-1845.35 4526.15 l
-1680.95 4679.75 l
-1515.35 4526.15 l
-1539.35 4535.75 l
-1680.95 4666.55 l
-1820.15 4535.75 l
-1754.15 4535.75 l
-1754.15 4384.55 l
-1607.75 4384.55 l
-1607.75 4535.75 l
-1539.35 4535.75 l
-1515.35 4526.15 l
-f*
-0.2 i
-1255.88 4259 m
-1255.88 4254 l
-1268.3 4253.29 1272 4250.45 1272 4241.4 c
-1272 4154.28 l
-1272 4145.1 1269.25 4142.94 1255.88 4141.5 c
-1255.88 4137 l
-1313.84 4137 l
-1344.26 4137 1364 4150.5 1364 4170.84 c
-1364 4179.12 1360.73 4186.32 1354.7 4191.9 c
-1348.4 4197.48 1342.28 4200 1329.68 4202.7 c
-1350.56 4208.82 1358 4216.2 1358 4229.88 c
-1358 4248.42 1341.55 4259 1311.5 4259 c
-h
-1301 4198.74 m
-1305.92 4198.74 l
-1324.46 4198.74 1333 4189.2 1333 4169.22 c
-1333 4151.76 1325.77 4143 1311.5 4143 c
-1303.58 4143 1301 4145.99 1301 4153.74 c
-h
-1301 4244.46 m
-1301 4250.94 1303.39 4254 1310.24 4254 c
-1322.84 4254 1329 4246.03 1329 4228.62 c
-1329 4209.72 1323.08 4204.68 1301 4204.14 c
-h
-1373.06 4137 m
-f*
-1458.14 4148.52 m
-1456.34 4146.72 l
-1455.8 4146.18 1455.26 4146 1454.36 4146 c
-1451.84 4146 1451 4147.44 1451 4150.5 c
-1451 4197.48 l
-1451 4212.78 1437.16 4222.16 1414.94 4222.16 c
-1394.6 4222.16 1380.92 4212.97 1380.92 4199.46 c
-1380.92 4191.9 1385.24 4187.58 1392.62 4187.58 c
-1399.82 4187.58 1404.86 4191.9 1404.86 4198.02 c
-1404.86 4200.54 1403.96 4202.88 1401.62 4205.76 c
-1400 4207.56 1399.46 4208.64 1399.46 4209.72 c
-1399.46 4213.5 1404.32 4216.16 1410.8 4216.16 c
-1421.42 4216.16 1426 4211.37 1426 4200.54 c
-1426 4187.4 l
-1404.89 4180.92 1396.41 4177.68 1389.56 4173.18 c
-1381.46 4167.78 1378 4161.48 1378 4153.56 c
-1378 4142.58 1386.07 4134.48 1397.3 4134.48 c
-1407.74 4134.48 1416.02 4138.08 1425.92 4147.08 c
-1427.9 4137.9 1431.86 4134.48 1440.68 4134.48 c
-1448.42 4134.48 1454 4137.36 1460.84 4144.74 c
-h
-1426 4155 m
-1421.04 4149.42 1417.37 4147.26 1412.96 4147.26 c
-1407.56 4147.26 1404 4152.12 1404 4159.32 c
-1404 4169.76 1411.57 4177.14 1426 4181.1 c
-h
-1463 4137 m
-f*
-1524.22 4195.68 m
-1524.22 4221.8 l
-1520.24 4221.8 l
-1519.16 4219.08 1518.08 4218.2 1515.74 4218.2 c
-1514.66 4218.2 1513.04 4218.55 1510.16 4219.44 c
-1504.4 4221.42 1500.26 4222.16 1496.12 4222.16 c
-1479.74 4222.16 1468 4210.99 1468 4195.86 c
-1468 4183.98 1475.34 4175.7 1493.42 4167.96 c
-1505.84 4162.56 1511 4158.06 1511 4152.3 c
-1511 4145.28 1505.48 4140.48 1497.2 4140.48 c
-1484.6 4140.48 1476.32 4148.62 1472.54 4164.36 c
-1467.5 4164.36 l
-1467.5 4134.66 l
-1472 4134.66 l
-1473.98 4138.44 1475.06 4139.7 1476.68 4139.7 c
-1477.58 4139.7 1479.02 4139.34 1480.82 4138.62 c
-1486.04 4136.46 1495.22 4134.48 1500.26 4134.48 c
-1516.64 4134.48 1528 4145.64 1528 4161.84 c
-1528 4174.62 1521.15 4182.54 1503.14 4189.92 c
-1490.9 4195.14 1486 4199.64 1486 4205.76 c
-1486 4211.7 1490.98 4216.16 1497.74 4216.16 c
-1502.6 4216.16 1507.28 4214.19 1511.24 4210.44 c
-1515.02 4206.84 1517 4203.42 1519.7 4195.68 c
-h
-1533.02 4137 m
-f*
-1604.36 4159.5 m
-1596.98 4150.68 1591.58 4147.48 1583.84 4147.48 c
-1577 4147.48 1571.6 4150.53 1568 4156.62 c
-1564.58 4162.36 1563.14 4168.45 1562.42 4181 c
-1607.78 4181 l
-1606.7 4195.99 1604 4204.3 1598.42 4211.34 c
-1592.66 4218.36 1584.2 4222.16 1574.12 4222.16 c
-1551.62 4222.16 1536.5 4204.33 1536.5 4178.04 c
-1536.5 4151.76 1551.26 4134.48 1573.58 4134.48 c
-1588.16 4134.48 1596.98 4140.06 1608.68 4156.98 c
-h
-1561.52 4188 m
-1562.06 4209.42 1565.3 4216.16 1574.12 4216.16 c
-1579.34 4216.16 1582.58 4213.42 1584.02 4208.1 c
-1584.92 4204.68 1585.28 4199.64 1585.64 4190.46 c
-1585.64 4188 l
-h
-1611.92 4137 m
-f*
-1658 4137 m
-f*
-1761.94 4259 m
-1659.88 4259 l
-1659.88 4254 l
-1672.3 4253.29 1676 4250.63 1676 4241.4 c
-1676 4154.28 l
-1676 4144.92 1673.44 4142.94 1659.88 4141.5 c
-1659.88 4137 l
-1724.68 4137 l
-1724.68 4142 l
-1708.12 4142.69 1705 4144.77 1705 4154.28 c
-1705 4196.22 l
-1723.28 4195.86 1729.91 4189.2 1732.42 4168.32 c
-1736.92 4168.32 l
-1736.92 4229.16 l
-1732.42 4229.16 l
-1729.19 4208.64 1722.92 4202.34 1705 4202.34 c
-1705 4244.1 l
-1705 4250.76 1707.32 4253 1716.4 4253 c
-1733.14 4253 1743.58 4249.8 1749.16 4243.2 c
-1753.12 4238.7 1755.1 4233.84 1757.62 4222.5 c
-1761.94 4222.5 l
-h
-1766.98 4137 m
-f*
-1806.28 4220 m
-1772.22 4220 l
-1772.22 4215.66 l
-1779.96 4214.58 1782 4212.24 1782 4205.04 c
-1782 4152.12 l
-1782 4144.74 1780.19 4142.76 1772.22 4141.32 c
-1772.22 4137 l
-1820.1 4137 l
-1820.1 4141.32 l
-1809.12 4142.04 1807 4144.38 1807 4155.54 c
-1807 4189.56 l
-1807 4198.92 1812.02 4206.66 1817.94 4206.66 c
-1819.38 4206.66 1821 4205.4 1822.98 4202.52 c
-1826.4 4197.66 1829.1 4196.04 1833.78 4196.04 c
-1840.44 4196.04 1845.12 4201.08 1845.12 4207.92 c
-1845.12 4216.2 1839 4222.16 1830.54 4222.16 c
-1821.55 4222.16 1814.73 4217.47 1806.28 4205.22 c
-h
-1846.92 4137 m
-f*
-1933.14 4148.52 m
-1931.34 4146.72 l
-1930.8 4146.18 1930.26 4146 1929.36 4146 c
-1926.84 4146 1926 4147.44 1926 4150.5 c
-1926 4197.48 l
-1926 4212.78 1912.16 4222.16 1889.94 4222.16 c
-1869.6 4222.16 1855.92 4212.97 1855.92 4199.46 c
-1855.92 4191.9 1860.24 4187.58 1867.62 4187.58 c
-1874.82 4187.58 1879.86 4191.9 1879.86 4198.02 c
-1879.86 4200.54 1878.96 4202.88 1876.62 4205.76 c
-1875 4207.56 1874.46 4208.64 1874.46 4209.72 c
-1874.46 4213.5 1879.32 4216.16 1885.8 4216.16 c
-1896.42 4216.16 1901 4211.37 1901 4200.54 c
-1901 4187.4 l
-1879.89 4180.92 1871.41 4177.68 1864.56 4173.18 c
-1856.46 4167.78 1853 4161.48 1853 4153.56 c
-1853 4142.58 1861.07 4134.48 1872.3 4134.48 c
-1882.74 4134.48 1891.02 4138.08 1900.92 4147.08 c
-1902.9 4137.9 1906.86 4134.48 1915.68 4134.48 c
-1923.42 4134.48 1929 4137.36 1935.84 4144.74 c
-h
-1901 4155 m
-1896.04 4149.42 1892.37 4147.26 1887.96 4147.26 c
-1882.56 4147.26 1879 4152.12 1879 4159.32 c
-1879 4169.76 1886.57 4177.14 1901 4181.1 c
-h
-1938 4137 m
-f*
-1975.46 4220 m
-1940.73 4220 l
-1940.73 4215.66 l
-1948.65 4214.58 1951 4212.42 1951 4205.04 c
-1951 4152.12 l
-1951 4144.74 1948.95 4142.76 1940.73 4141.32 c
-1940.73 4137 l
-1983.93 4137 l
-1983.93 4141.32 l
-1977.63 4142.22 1976 4144.74 1976 4151.58 c
-1976 4199.64 l
-1976 4200.54 1978.51 4203.78 1980.51 4205.76 c
-1984.29 4208.64 1987.53 4210.16 1990.77 4210.16 c
-1997.79 4210.16 2001 4206 2001 4195.14 c
-2001 4151.58 l
-2001 4144.2 1998.9 4141.86 1991.85 4141.32 c
-1991.85 4137 l
-2033.97 4137 l
-2033.97 4141.32 l
-2027.67 4142.04 2026 4144.74 2026 4151.58 c
-2026 4199.64 l
-2026 4200.54 2028.43 4203.6 2030.37 4205.58 c
-2034.33 4208.64 2037.57 4210.16 2040.81 4210.16 c
-2047.65 4210.16 2050 4205.82 2050 4195.14 c
-2050 4151.58 l
-2050 4144.02 2048.1 4141.86 2041.53 4141.32 c
-2041.53 4137 l
-2084.37 4137 l
-2084.37 4141 l
-2077.35 4141.37 2075 4143.6 2075 4151.58 c
-2075 4196.76 l
-2075 4212.24 2065.6 4222.16 2051.07 4222.16 c
-2040.81 4222.16 2033.97 4218.01 2024.61 4206.48 c
-2019.21 4217.82 2012.91 4222.16 2001.57 4222.16 c
-1990.2 4222.16 1982.21 4217.29 1975.46 4206.48 c
-h
-2087.94 4137 m
-f*
-2160.36 4159.5 m
-2152.98 4150.68 2147.58 4147.48 2139.84 4147.48 c
-2133 4147.48 2127.6 4150.53 2124 4156.62 c
-2120.58 4162.36 2119.14 4168.45 2118.42 4181 c
-2163.78 4181 l
-2162.7 4195.99 2160 4204.3 2154.42 4211.34 c
-2148.66 4218.36 2140.2 4222.16 2130.12 4222.16 c
-2107.62 4222.16 2092.5 4204.33 2092.5 4178.04 c
-2092.5 4151.76 2107.26 4134.48 2129.58 4134.48 c
-2144.16 4134.48 2152.98 4140.06 2164.68 4156.98 c
-h
-2117.52 4188 m
-2118.06 4209.42 2121.3 4216.16 2130.12 4216.16 c
-2135.34 4216.16 2138.58 4213.42 2140.02 4208.1 c
-2140.92 4204.68 2141.28 4199.64 2141.64 4190.46 c
-2141.64 4188 l
-h
-2167.92 4137 m
-f*
-1 i
-1252.55 4102.55 914.4 15.5999 re
-f
-0.2 i
-3964.26 4176.36 m
-3953.64 4165.2 3947.88 4160.88 3939.06 4157.46 c
-3933.84 4155.3 3927.9 4154.58 3922.86 4154.58 c
-3910.98 4154.58 3899.64 4160.74 3894.42 4169.88 c
-3889.2 4179.42 3887 4192.2 3887 4210.38 c
-3887 4247.64 3898.23 4267.7 3919.8 4267.7 c
-3928.26 4267.7 3936 4264.38 3943.74 4257.36 c
-3951.48 4250.52 3955.62 4244.4 3961.92 4230.72 c
-3966.42 4230.72 l
-3966.42 4273.16 l
-3961.56 4273.16 l
-3958.86 4266.43 3957.06 4264.56 3953.64 4264.56 c
-3951.84 4264.56 3949.5 4265.28 3945.36 4267.08 c
-3934.92 4271.4 3926.1 4273.7 3917.46 4273.7 c
-3881.64 4273.7 3855 4245.84 3855 4208.76 c
-3855 4171.68 3881.21 4145.58 3918.54 4145.58 c
-3939.24 4145.58 3951.48 4151.88 3969.66 4171.86 c
-h
-3975.96 4149 m
-f*
-4039.18 4146.66 m
-4046.78 4149.36 4051.02 4150.08 4062.5 4151.34 c
-4073.66 4152.6 l
-4073.66 4157 l
-4065.74 4157.35 4064 4159.63 4064 4167.18 c
-4064 4232 l
-4027.4 4232 l
-4027.4 4227.66 l
-4036.4 4226.94 4039 4224.78 4039 4217.04 c
-4039 4166.1 l
-4032.88 4160.16 4029.18 4158.48 4023.8 4158.48 c
-4016.42 4158.48 4014 4162 4014 4170.96 c
-4014 4232 l
-3979.88 4232 l
-3979.88 4227.66 l
-3987.26 4226.22 3989 4224.6 3989 4217.04 c
-3989 4171.68 l
-3989 4155.84 3997.89 4146.48 4012.64 4146.48 c
-4022.16 4146.48 4028.56 4149.36 4039.18 4158.36 c
-h
-4077.08 4149 m
-f*
-4115.28 4232 m
-4081.22 4232 l
-4081.22 4227.66 l
-4088.96 4226.58 4091 4224.24 4091 4217.04 c
-4091 4164.12 l
-4091 4156.74 4089.19 4154.76 4081.22 4153.32 c
-4081.22 4149 l
-4129.1 4149 l
-4129.1 4153.32 l
-4118.12 4154.04 4116 4156.38 4116 4167.54 c
-4116 4201.56 l
-4116 4210.92 4121.02 4218.66 4126.94 4218.66 c
-4128.38 4218.66 4130 4217.4 4131.98 4214.52 c
-4135.4 4209.66 4138.1 4208.04 4142.78 4208.04 c
-4149.44 4208.04 4154.12 4213.08 4154.12 4219.92 c
-4154.12 4228.2 4148 4234.16 4139.54 4234.16 c
-4130.55 4234.16 4123.73 4229.47 4115.28 4217.22 c
-h
-4155.92 4149 m
-f*
-4196.28 4232 m
-4162.22 4232 l
-4162.22 4227.66 l
-4169.96 4226.58 4172 4224.24 4172 4217.04 c
-4172 4164.12 l
-4172 4156.74 4170.19 4154.76 4162.22 4153.32 c
-4162.22 4149 l
-4210.1 4149 l
-4210.1 4153.32 l
-4199.12 4154.04 4197 4156.38 4197 4167.54 c
-4197 4201.56 l
-4197 4210.92 4202.02 4218.66 4207.94 4218.66 c
-4209.38 4218.66 4211 4217.4 4212.98 4214.52 c
-4216.4 4209.66 4219.1 4208.04 4223.78 4208.04 c
-4230.44 4208.04 4235.12 4213.08 4235.12 4219.92 c
-4235.12 4228.2 4229 4234.16 4220.54 4234.16 c
-4211.55 4234.16 4204.73 4229.47 4196.28 4217.22 c
-h
-4236.92 4149 m
-f*
-4308.36 4171.5 m
-4300.98 4162.68 4295.58 4159.48 4287.84 4159.48 c
-4281 4159.48 4275.6 4162.53 4272 4168.62 c
-4268.58 4174.36 4267.14 4180.45 4266.42 4193 c
-4311.78 4193 l
-4310.7 4207.99 4308 4216.3 4302.42 4223.34 c
-4296.66 4230.36 4288.2 4234.16 4278.12 4234.16 c
-4255.62 4234.16 4240.5 4216.33 4240.5 4190.04 c
-4240.5 4163.76 4255.26 4146.48 4277.58 4146.48 c
-4292.16 4146.48 4300.98 4152.06 4312.68 4168.98 c
-h
-4265.52 4200 m
-4266.06 4221.42 4269.3 4228.16 4278.12 4228.16 c
-4283.34 4228.16 4286.58 4225.42 4288.02 4220.1 c
-4288.92 4216.68 4289.28 4211.64 4289.64 4202.46 c
-4289.64 4200 l
-h
-4315.92 4149 m
-f*
-4353.82 4232 m
-4319.78 4232 l
-4319.78 4227.66 l
-4327.7 4226.4 4329 4224.6 4329 4217.04 c
-4329 4164.12 l
-4329 4156.56 4327.61 4154.94 4319.78 4153.32 c
-4319.78 4149 l
-4363.16 4149 l
-4363.16 4153.32 l
-4356.5 4154.22 4354 4156.92 4354 4163.58 c
-4354 4211.64 l
-4354 4212.36 4355.4 4214.16 4357.4 4215.96 c
-4361.36 4219.92 4365.68 4222.16 4370 4222.16 c
-4376.12 4222.16 4379 4217.27 4379 4207.14 c
-4379 4163.58 l
-4379 4156.92 4376.71 4154.04 4370.72 4153.32 c
-4370.72 4149 l
-4413.02 4149 l
-4413.02 4153.32 l
-4406 4153.86 4404 4156.02 4404 4163.58 c
-4404 4208.76 l
-4404 4224.24 4394.54 4234.16 4379.9 4234.16 c
-4368.96 4234.16 4360.57 4229.11 4353.82 4218.48 c
-h
-4416.08 4149 m
-f*
-4470.9 4232 m
-4454 4232 l
-4454 4262.4 l
-4449.48 4262.4 l
-4438.5 4246.92 4431.3 4238.82 4419.6 4228.92 c
-4419.6 4224 l
-4429 4224 l
-4429 4165.74 l
-4429 4154.04 4436.73 4146.84 4449.12 4146.84 c
-4461.18 4146.84 4468.38 4152.24 4475.76 4167 c
-4471.26 4168.98 l
-4467.66 4162.14 4464.78 4159.84 4461 4159.84 c
-4455.96 4159.84 4454 4162.83 4454 4169.88 c
-4454 4224 l
-4470.9 4224 l
-h
-4475.94 4149 m
-f*
-4521 4149 m
-f*
-4625.94 4271 m
-4523.88 4271 l
-4523.88 4266 l
-4536.3 4265.29 4540 4262.63 4540 4253.4 c
-4540 4166.28 l
-4540 4156.92 4537.44 4154.94 4523.88 4153.5 c
-4523.88 4149 l
-4588.68 4149 l
-4588.68 4154 l
-4572.12 4154.69 4569 4156.77 4569 4166.28 c
-4569 4208.22 l
-4587.28 4207.86 4593.91 4201.2 4596.42 4180.32 c
-4600.92 4180.32 l
-4600.92 4241.16 l
-4596.42 4241.16 l
-4593.19 4220.64 4586.92 4214.34 4569 4214.34 c
-4569 4256.1 l
-4569 4262.76 4571.32 4265 4580.4 4265 c
-4597.14 4265 4607.58 4261.8 4613.16 4255.2 c
-4617.12 4250.7 4619.1 4245.84 4621.62 4234.5 c
-4625.94 4234.5 l
-h
-4630.98 4149 m
-f*
-4670.28 4232 m
-4636.22 4232 l
-4636.22 4227.66 l
-4643.96 4226.58 4646 4224.24 4646 4217.04 c
-4646 4164.12 l
-4646 4156.74 4644.19 4154.76 4636.22 4153.32 c
-4636.22 4149 l
-4684.1 4149 l
-4684.1 4153.32 l
-4673.12 4154.04 4671 4156.38 4671 4167.54 c
-4671 4201.56 l
-4671 4210.92 4676.02 4218.66 4681.94 4218.66 c
-4683.38 4218.66 4685 4217.4 4686.98 4214.52 c
-4690.4 4209.66 4693.1 4208.04 4697.78 4208.04 c
-4704.44 4208.04 4709.12 4213.08 4709.12 4219.92 c
-4709.12 4228.2 4703 4234.16 4694.54 4234.16 c
-4685.55 4234.16 4678.73 4229.47 4670.28 4217.22 c
-h
-4710.92 4149 m
-f*
-4796.14 4160.52 m
-4794.34 4158.72 l
-4793.8 4158.18 4793.26 4158 4792.36 4158 c
-4789.84 4158 4789 4159.44 4789 4162.5 c
-4789 4209.48 l
-4789 4224.78 4775.16 4234.16 4752.94 4234.16 c
-4732.6 4234.16 4718.92 4224.97 4718.92 4211.46 c
-4718.92 4203.9 4723.24 4199.58 4730.62 4199.58 c
-4737.82 4199.58 4742.86 4203.9 4742.86 4210.02 c
-4742.86 4212.54 4741.96 4214.88 4739.62 4217.76 c
-4738 4219.56 4737.46 4220.64 4737.46 4221.72 c
-4737.46 4225.5 4742.32 4228.16 4748.8 4228.16 c
-4759.42 4228.16 4764 4223.37 4764 4212.54 c
-4764 4199.4 l
-4742.89 4192.92 4734.41 4189.68 4727.56 4185.18 c
-4719.46 4179.78 4716 4173.48 4716 4165.56 c
-4716 4154.58 4724.07 4146.48 4735.3 4146.48 c
-4745.74 4146.48 4754.02 4150.08 4763.92 4159.08 c
-4765.9 4149.9 4769.86 4146.48 4778.68 4146.48 c
-4786.42 4146.48 4792 4149.36 4798.84 4156.74 c
-h
-4764 4167 m
-4759.04 4161.42 4755.37 4159.26 4750.96 4159.26 c
-4745.56 4159.26 4742 4164.12 4742 4171.32 c
-4742 4181.76 4749.57 4189.14 4764 4193.1 c
-h
-4801 4149 m
-f*
-4838.46 4232 m
-4803.73 4232 l
-4803.73 4227.66 l
-4811.65 4226.58 4814 4224.42 4814 4217.04 c
-4814 4164.12 l
-4814 4156.74 4811.95 4154.76 4803.73 4153.32 c
-4803.73 4149 l
-4846.93 4149 l
-4846.93 4153.32 l
-4840.63 4154.22 4839 4156.74 4839 4163.58 c
-4839 4211.64 l
-4839 4212.54 4841.51 4215.78 4843.51 4217.76 c
-4847.29 4220.64 4850.53 4222.16 4853.77 4222.16 c
-4860.79 4222.16 4864 4218 4864 4207.14 c
-4864 4163.58 l
-4864 4156.2 4861.9 4153.86 4854.85 4153.32 c
-4854.85 4149 l
-4896.97 4149 l
-4896.97 4153.32 l
-4890.67 4154.04 4889 4156.74 4889 4163.58 c
-4889 4211.64 l
-4889 4212.54 4891.43 4215.6 4893.37 4217.58 c
-4897.33 4220.64 4900.57 4222.16 4903.81 4222.16 c
-4910.65 4222.16 4913 4217.82 4913 4207.14 c
-4913 4163.58 l
-4913 4156.02 4911.1 4153.86 4904.53 4153.32 c
-4904.53 4149 l
-4947.37 4149 l
-4947.37 4153 l
-4940.35 4153.37 4938 4155.6 4938 4163.58 c
-4938 4208.76 l
-4938 4224.24 4928.6 4234.16 4914.07 4234.16 c
-4903.81 4234.16 4896.97 4230.01 4887.61 4218.48 c
-4882.21 4229.82 4875.91 4234.16 4864.57 4234.16 c
-4853.2 4234.16 4845.21 4229.29 4838.46 4218.48 c
-h
-4950.94 4149 m
-f*
-5023.36 4171.5 m
-5015.98 4162.68 5010.58 4159.48 5002.84 4159.48 c
-4996 4159.48 4990.6 4162.53 4987 4168.62 c
-4983.58 4174.36 4982.14 4180.45 4981.42 4193 c
-5026.78 4193 l
-5025.7 4207.99 5023 4216.3 5017.42 4223.34 c
-5011.66 4230.36 5003.2 4234.16 4993.12 4234.16 c
-4970.62 4234.16 4955.5 4216.33 4955.5 4190.04 c
-4955.5 4163.76 4970.26 4146.48 4992.58 4146.48 c
-5007.16 4146.48 5015.98 4152.06 5027.68 4168.98 c
-h
-4980.52 4200 m
-4981.06 4221.42 4984.3 4228.16 4993.12 4228.16 c
-4998.34 4228.16 5001.58 4225.42 5003.02 4220.1 c
-5003.92 4216.68 5004.28 4211.64 5004.64 4202.46 c
-5004.64 4200 l
-h
-5030.92 4149 m
-f*
-1 i
-3845.75 4114.55 1184.4 15.5999 re
-f
-1 g
-4451.75 4341.35 m
-4618.55 4492.55 l
-4535.75 4492.55 l
-4535.75 4646.15 l
-4370.15 4646.15 l
-4370.15 4492.55 l
-4288.55 4492.55 l
-f*
-0 g
-4451.75 4341.35 m
-4618.55 4492.55 l
-4535.75 4492.55 l
-4535.75 4646.15 l
-4370.15 4646.15 l
-4370.15 4492.55 l
-4288.55 4492.55 l
-4451.75 4341.35 l
-4451.75 4354.55 l
-4313.75 4481.75 l
-4379.75 4481.75 l
-4379.75 4636.55 l
-4526.15 4636.55 l
-4526.15 4481.75 l
-4592.15 4481.75 l
-4451.75 4354.55 l
-4451.75 4341.35 l
-f*
-0.201248 i
-1299.33 5632 m
-1185.22 5632 l
-1185.22 5627 l
-1199.11 5626.2 1203 5623.18 1203 5612.72 c
-1203 5515.32 l
-1203 5504.85 1200.17 5502.64 1185.22 5501.03 c
-1185.22 5496 l
-1257.67 5496 l
-1257.67 5501 l
-1239.15 5501.81 1236 5504.23 1236 5515.32 c
-1236 5562.21 l
-1256.22 5561.81 1263.55 5554.36 1266.32 5531.02 c
-1271.35 5531.02 l
-1271.35 5599.04 l
-1266.32 5599.04 l
-1262.76 5576.1 1255.82 5569.05 1236 5569.05 c
-1236 5615.74 l
-1236 5623.19 1238.52 5625 1248.41 5625 c
-1267.13 5625 1278.8 5621.64 1285.04 5614.74 c
-1289.47 5609.71 1291.68 5604.27 1294.5 5591.59 c
-1299.33 5591.59 l
-h
-1304.96 5496 m
-f*
-1349.19 5589 m
-1310.84 5589 l
-1310.84 5583.95 l
-1319.49 5582.74 1322 5580.12 1322 5572.07 c
-1322 5512.9 l
-1322 5504.65 1319.93 5502.44 1310.84 5500.83 c
-1310.84 5496 l
-1364.37 5496 l
-1364.37 5500.83 l
-1352.09 5501.63 1350 5504.25 1350 5516.73 c
-1350 5554.76 l
-1350 5565.23 1355.49 5573.88 1361.95 5573.88 c
-1363.56 5573.88 1365.37 5572.47 1367.59 5569.25 c
-1371.41 5563.82 1374.43 5562.01 1379.66 5562.01 c
-1387.11 5562.01 1392.34 5567.64 1392.34 5575.29 c
-1392.34 5584.55 1385.5 5591.41 1376.04 5591.41 c
-1366.1 5591.41 1358.54 5586.12 1349.19 5572.27 c
-h
-1394.35 5496 m
-f*
-1489.19 5508.88 m
-1487.18 5506.87 l
-1486.57 5506.26 1485.97 5506.06 1484.96 5506.06 c
-1482.15 5506.06 1481 5507.67 1481 5511.09 c
-1481 5563.62 l
-1481 5580.73 1465.6 5591.42 1440.89 5591.42 c
-1418.15 5591.42 1402.85 5581.06 1402.85 5565.83 c
-1402.85 5557.38 1407.69 5552.55 1415.94 5552.55 c
-1423.99 5552.55 1429.62 5557.38 1429.62 5564.22 c
-1429.62 5567.04 1428.61 5569.66 1426 5572.88 c
-1424.19 5574.89 1423.58 5576.1 1423.58 5577.3 c
-1423.58 5581.53 1429.02 5584.42 1436.26 5584.42 c
-1448.14 5584.42 1453.86 5579.08 1453.86 5567.04 c
-1453.86 5552.35 l
-1429.91 5545.1 1420.29 5541.48 1412.51 5536.45 c
-1403.46 5530.41 1399 5523.37 1399 5514.52 c
-1399 5502.24 1408.27 5493.18 1421.17 5493.18 c
-1432.84 5493.18 1442.1 5497.21 1453.17 5507.27 c
-1455.38 5497.01 1459.81 5493.18 1469.67 5493.18 c
-1478.32 5493.18 1484.56 5496.4 1492.21 5504.65 c
-h
-1453 5516.13 m
-1447.55 5509.89 1443.52 5507.47 1438.68 5507.47 c
-1432.64 5507.47 1428 5512.91 1428 5520.96 c
-1428 5532.63 1436.61 5540.88 1453 5545.31 c
-h
-1494.62 5496 m
-f*
-1536.4 5589 m
-1497.7 5589 l
-1497.7 5583.95 l
-1506.55 5582.74 1509 5580.32 1509 5572.07 c
-1509 5512.9 l
-1509 5504.65 1506.74 5502.44 1497.7 5500.83 c
-1497.7 5496 l
-1546 5496 l
-1546 5500.83 l
-1538.95 5501.84 1537 5504.65 1537 5512.3 c
-1537 5566.03 l
-1537 5567.04 1539.87 5570.66 1542.18 5572.88 c
-1546.4 5576.1 1550.02 5578.42 1553.65 5578.42 c
-1561.5 5578.42 1565 5573.59 1565 5561 c
-1565 5512.3 l
-1565 5504.05 1562.68 5501.43 1554.85 5500.83 c
-1554.85 5496 l
-1601.95 5496 l
-1601.95 5500.83 l
-1594.9 5501.64 1593 5504.65 1593 5512.3 c
-1593 5566.03 l
-1593 5567.04 1595.73 5570.46 1597.92 5572.68 c
-1602.35 5576.1 1605.97 5578.42 1609.59 5578.42 c
-1617.24 5578.42 1620 5573.38 1620 5561 c
-1620 5512.3 l
-1620 5503.85 1617.85 5501.43 1610.4 5500.83 c
-1610.4 5496 l
-1658.3 5496 l
-1658.3 5501 l
-1650.45 5501.4 1648 5503.78 1648 5512.3 c
-1648 5562.81 l
-1648 5580.12 1637.43 5591.42 1621.07 5591.42 c
-1609.59 5591.42 1601.95 5586.73 1591.48 5573.68 c
-1585.44 5586.36 1578.4 5591.42 1565.72 5591.42 c
-1552.95 5591.42 1543.98 5585.91 1536.4 5573.68 c
-h
-1661.64 5496 m
-f*
-1739.9 5521.16 m
-1731.65 5511.29 1725.61 5507.18 1716.96 5507.18 c
-1709.31 5507.18 1703.27 5510.77 1699.25 5517.94 c
-1695.43 5524.54 1693.82 5531.56 1693.01 5546 c
-1743.73 5546 l
-1742.52 5562.36 1739.5 5571.43 1733.26 5579.12 c
-1726.82 5586.96 1717.36 5591.42 1706.09 5591.42 c
-1680.94 5591.42 1664.03 5571.4 1664.03 5541.88 c
-1664.03 5512.5 1680.53 5493.18 1705.49 5493.18 c
-1721.79 5493.18 1731.65 5499.42 1744.73 5518.34 c
-h
-1692 5553 m
-1692.61 5576.96 1696.23 5584.42 1706.09 5584.42 c
-1711.93 5584.42 1715.55 5581.38 1717.16 5575.49 c
-1718.17 5571.67 1718.57 5566.03 1718.97 5555.77 c
-1718.97 5553 l
-h
-1748.35 5496 m
-f*
-1845.16 5591.59 m
-1845.16 5635.22 l
-1839.37 5635.22 l
-1837.96 5629.82 1836.55 5628.42 1832.93 5628.42 c
-1831.12 5628.42 1828.7 5629.03 1824.47 5630.43 c
-1815.22 5633.86 1808.78 5635.02 1800.93 5635.02 c
-1773.56 5635.02 1757 5619.54 1757 5594.01 c
-1757 5588.98 1757.75 5584.75 1759.07 5580.73 c
-1763.29 5570.06 1774.16 5560.6 1791.27 5552.35 c
-1804.75 5545.91 l
-1822.46 5537.46 1827 5532.22 1827 5521.56 c
-1827 5507.67 1817.25 5499.18 1801.94 5499.18 c
-1790.26 5499.18 1780.6 5503.89 1772.96 5513.31 c
-1767.12 5520.75 1764.3 5527.6 1760.88 5541.88 c
-1755.04 5541.88 l
-1755.04 5492.18 l
-1760.88 5492.18 l
-1762.09 5497.41 1763.7 5499.02 1766.92 5499.02 c
-1768.53 5499.02 1770.74 5498.42 1775.17 5497.01 c
-1785.03 5493.59 1792.48 5492.18 1801.33 5492.18 c
-1831.12 5492.18 1851 5509.28 1851 5534.64 c
-1851 5549.73 1842.04 5564.83 1829.1 5571.27 c
-1799.52 5585.96 l
-1783.22 5594.01 1779 5598.84 1779 5608.7 c
-1779 5621.18 1787.37 5628.02 1800.93 5628.02 c
-1809.99 5628.02 1818.44 5624.47 1825.68 5617.55 c
-1832.53 5610.51 1835.75 5604.67 1839.77 5591.59 c
-h
-1859.89 5496 m
-f*
-1940.9 5521.16 m
-1932.65 5511.29 1926.61 5507.18 1917.96 5507.18 c
-1910.31 5507.18 1904.27 5510.77 1900.25 5517.94 c
-1896.43 5524.54 1894.82 5531.56 1894.01 5546 c
-1944.73 5546 l
-1943.52 5562.36 1940.5 5571.43 1934.26 5579.12 c
-1927.82 5586.96 1918.36 5591.42 1907.09 5591.42 c
-1881.94 5591.42 1865.03 5571.4 1865.03 5541.88 c
-1865.03 5512.5 1881.53 5493.18 1906.49 5493.18 c
-1922.79 5493.18 1932.65 5499.42 1945.73 5518.34 c
-h
-1893 5553 m
-1893.61 5576.96 1897.23 5584.42 1907.09 5584.42 c
-1912.93 5584.42 1916.55 5581.38 1918.16 5575.49 c
-1919.17 5571.67 1919.57 5566.03 1919.97 5555.77 c
-1919.97 5553 l
-h
-1949.35 5496 m
-f*
-2010.38 5589 m
-1991 5589 l
-1991 5622.79 l
-1986.43 5622.79 l
-1974.16 5605.48 1966.11 5596.42 1953.02 5585.35 c
-1953.02 5580 l
-1963 5580 l
-1963 5514.72 l
-1963 5501.64 1971.84 5493.59 1986.03 5493.59 c
-1999.51 5493.59 2007.56 5499.62 2015.81 5516.12 c
-2010.78 5518.34 l
-2006.76 5510.69 2003.54 5507.59 1999.31 5507.59 c
-1993.68 5507.59 1991 5511.09 1991 5519.34 c
-1991 5580 l
-2010.38 5580 l
-h
-2016.02 5496 m
-f*
-1 i
-3845.75 5319.35 m
-3800.15 5330.15 3752.15 5336.15 3702.95 5336.15 c
-3534.95 5336.15 3387.35 5266.55 3341.75 5164.55 c
-S
-3790.55 5280.95 m
-3825.35 5319.35 l
-3821.75 5370.95 l
-3951.35 5276.15 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 4311 a(Figure)30 b(12:)41 b(The)30 b(F)-8
-b(rameSet)30 b(pro)s(duced)e(when)h(astCon)m(v)m(ert)i(is)f(used)f(to)h
-(con)m(v)m(ert)h(b)s(et)m(w)m(een)g(the)f(co)s(ordinate)0
-4424 y(systems)j(represen)m(ted)g(b)m(y)g(t)m(w)m(o)i(SkyF)-8
-b(rames.)49 b(The)33 b(source)h(SkyF)-8 b(rame)33 b(b)s(ecomes)h(the)f
-(base)g(F)-8 b(rame,)35 b(while)0 4537 y(the)28 b(destination)h(SkyF)-8
-b(rame)28 b(b)s(ecomes)g(the)g(curren)m(t)g(F)-8 b(rame.)41
-b(The)27 b(Mapping)h(b)s(et)m(w)m(een)g(them)g(implemen)m(ts)0
-4650 y(the)j(required)e(con)m(v)m(ersion.)0 4964 y(this)h(F)-8
-b(rameSet)32 b(con)m(tains)g(just)e(t)m(w)m(o)i(F)-8
-b(rames.)42 b(The)30 b(source)g(F)-8 b(rame)32 b(supplied)d(to)i
-(astCon)m(v)m(ert)h(b)s(ecomes)f(its)0 5077 y(base)e(F)-8
-b(rame,)30 b(while)f(the)g(destination)g(F)-8 b(rame)30
-b(b)s(ecomes)f(its)g(curren)m(t)f(F)-8 b(rame.)41 b(\(The)29
-b(F)-8 b(rameSet,)30 b(of)f(course,)0 5190 y(simply)g(holds)f(p)s(oin)m
-(ters)h(to)h(these)g(F)-8 b(rames,)30 b(rather)g(than)e(making)i
-(copies.\))41 b(The)29 b(Mapping)g(whic)m(h)g(relates)0
-5303 y(the)i(base)f(F)-8 b(rame)31 b(to)g(the)g(curren)m(t)f(F)-8
-b(rame)32 b(is)e(the)g(one)h(whic)m(h)f(implemen)m(ts)h(the)g(required)
-e(con)m(v)m(ersion.)0 5467 y(As)21 b(w)m(e)g(noted)g(earlier)h(\()p
-Fu(x)p FF(12.1\),)k(the)21 b(F)-8 b(rameSet)22 b(returned)e(b)m(y)h
-(astCon)m(v)m(ert)h(ma)m(y)f(b)s(e)g(used)f(b)s(oth)g(as)h(a)h(Mapping)
-0 5580 y(and)29 b(as)h(a)f(F)-8 b(rame)31 b(to)f(p)s(erform)e(most)i
-(of)f(the)h(functions)f(y)m(ou)h(are)g(lik)m(ely)h(to)f(need.)40
-b(Ho)m(w)m(ev)m(er,)32 b(the)e(Mapping)0 5693 y(ma)m(y)h(b)s(e)f
-(extracted)h(for)g(use)f(on)g(its)h(o)m(wn)f(if)g(necessary)-8
-b(,)32 b(using)e(astGetMapping)i(\()p Fu(x)p FF(13.7\),)h(for)d
-(example:)p eop end
-%%Page: 120 130
-TeXDict begin 120 129 bop 0 52 a FF(120)1350 b Fy(14)92
-b(HIGHER)30 b(LEVEL)g(OPERA)-8 b(TIONS)29 b(ON)h(FRAMESETS)227
-351 y Ft(AstMapping)40 b(*mapping;)227 551 y(...)227
-750 y(mapping)h(=)i(astGetMapping\()38 b(cvt,)k(AST__BASE,)d
-(AST__CURRENT)g(\);)0 1036 y Fw(14.2)112 b(Con)m(v)m(erting)38
-b(b)s(et)m(w)m(een)g(F)-9 b(rameSet)38 b(Co)s(ordinate)g(Systems)0
-1253 y FF(W)-8 b(e)33 b(no)m(w)f(consider)f(the)h(pro)s(cess)f(of)h
-(con)m(v)m(erting)i(b)s(et)m(w)m(een)e(the)g(co)s(ordinate)g(systems)g
-(represen)m(ted)g(b)m(y)f(t)m(w)m(o)0 1366 y(F)-8 b(rameSets.)41
-b(This)27 b(is)g(a)h(most)g(imp)s(ortan)m(t)f(op)s(eration,)i(as)f(a)g
-(subsequen)m(t)f(example)h(\()p Fu(x)p FF(14.3\))i(will)e(sho)m(w,)g
-(and)0 1479 y(is)f(illustrated)h(in)f(Figure)h(13.)80
-b(Recalling)29 b(\()p Fu(x)p FF(13.8\))g(that)f(a)g(F)-8
-b(rameSet)28 b(will)g(b)s(eha)m(v)m(e)g(lik)m(e)g(its)g(curren)m(t)f(F)
--8 b(rame)0 1592 y(when)31 b(necessary)-8 b(,)34 b(con)m(v)m(ersion)g
-(b)s(et)m(w)m(een)f(t)m(w)m(o)h(F)-8 b(rameSets)33 b(is)g(p)s(erformed)
-e(using)g(astCon)m(v)m(ert)j(\()p Fu(x)p FF(12.1\),)i(but)0
-1705 y(supplying)28 b(p)s(oin)m(ters)i(to)g(F)-8 b(rameSets)31
-b(instead)f(of)g(F)-8 b(rames.)41 b(The)29 b(e\013ect)i(of)f(this)g(is)
-f(to)i(con)m(v)m(ert)g(b)s(et)m(w)m(een)f(the)0 1818
-y(co)s(ordinate)h(systems)g(represen)m(ted)f(b)m(y)g(the)h(curren)m(t)f
-(F)-8 b(rames)31 b(of)g(eac)m(h)g(F)-8 b(rameSet:)227
-2049 y Ft(AstFrameSet)39 b(*frameseta,)g(*framesetb;)227
-2248 y(...)227 2447 y(cvt)k(=)g(astConvert\()c(frameseta,)g(framesetb,)
-h("SKY")h(\);)0 2691 y FF(When)28 b(using)g(F)-8 b(rameSets,)31
-b(w)m(e)e(are)f(presen)m(ted)h(with)f(considerably)h(more)f(con)m(v)m
-(ersion)i(options)f(than)f(when)0 2804 y(using)36 b(F)-8
-b(rames)36 b(alone.)59 b(This)35 b(is)h(b)s(ecause)g(eac)m(h)h(curren)m
-(t)f(F)-8 b(rame)37 b(is)f(related)h(to)g(all)g(the)f(other)g(F)-8
-b(rames)37 b(in)0 2917 y(its)d(resp)s(ectiv)m(e)g(F)-8
-b(rameSet.)50 b(Therefore,)34 b(if)f(w)m(e)g(can)h(establish)f(a)h
-(link)f(b)s(et)m(w)m(een)h(an)m(y)f(pair)g(of)g(F)-8
-b(rames,)35 b(one)0 3030 y(from)c(eac)m(h)i(F)-8 b(rameSet,)34
-b(w)m(e)e(can)g(form)f(a)h(complete)h(con)m(v)m(ersion)g(path)f(b)s(et)
-m(w)m(een)g(the)g(t)m(w)m(o)h(curren)m(t)f(F)-8 b(rames)0
-3143 y(\(Figure)31 b(13\).)0 3301 y(This)39 b(expanded)f(range)i(of)g
-(options)g(is,)i(of)e(course,)i(precisely)e(the)g(in)m(ten)m(tion.)69
-b(By)40 b(connecting)h(F)-8 b(rames)0 3414 y(together)43
-b(within)d(a)h(F)-8 b(rameSet,)46 b(w)m(e)41 b(ha)m(v)m(e)h(extended)f
-(the)h(range)f(of)g(co)s(ordinate)h(systems)f(that)h(can)f(b)s(e)0
-3527 y(reac)m(hed)g(from)e(an)m(y)i(one)f(of)g(them.)70
-b(W)-8 b(e)42 b(are)e(therefore)h(no)f(longer)g(restricted)h(to)g(con)m
-(v)m(erting)h(b)s(et)m(w)m(een)0 3640 y(F)-8 b(rames)31
-b(with)f(the)g(same)g(Domain)h(v)-5 b(alue)30 b(\()p
-Fu(x)p FF(7.12\),)j(but)d(can)g(go)h Fx(via)f FF(a)g(range)h(of)f(in)m
-(termediate)i(co)s(ordinate)0 3753 y(systems)d(in)f(order)h(to)g(mak)m
-(e)h(the)f(connection)h(w)m(e)f(require.)40 b(T)-8 b(ransformation)29
-b(b)s(et)m(w)m(een)g(di\013eren)m(t)h(domains)0 3866
-y(has)c(therefore)h(b)s(ecome)g(p)s(ossible)f(b)s(ecause,)i(in)e(assem)
-m(bling)h(the)g(F)-8 b(rameSets,)29 b(w)m(e)e(pro)m(vided)f(the)h
-(additional)0 3979 y(information)k(needed)f(to)h(in)m(ter-relate)h
-(them.)0 4137 y(It)25 b(is)g(imp)s(ortan)m(t)h(to)f(appreciate,)j(ho)m
-(w)m(ev)m(er,)g(that)d(the)h(c)m(hoice)h(of)e(\\missing)g(link")h(is)f
-(crucial)h(in)f(determining)0 4250 y(the)j(con)m(v)m(ersion)h(that)f
-(results.)39 b(Although)28 b(eac)m(h)h(F)-8 b(rameSet)29
-b(ma)m(y)f(b)s(e)f(p)s(erfectly)g(self-consisten)m(t)j(in)m(ternally)-8
-b(,)0 4363 y(this)36 b(do)s(es)g(not)h(mean)f(that)h(all)h(con)m(v)m
-(ersion)f(paths)f(through)g(the)h(com)m(bined)f(net)m(w)m(ork)h(of)g
-(Mappings)f(are)0 4475 y(equiv)-5 b(alen)m(t.)53 b(Quite)35
-b(the)f(con)m(trary)h(in)e(fact:)49 b(ev)m(erything)35
-b(dep)s(ends)e(on)h(where)f(the)h(in)m(ter-connecting)j(link)0
-4588 y(b)s(et)m(w)m(een)43 b(the)g(t)m(w)m(o)h(F)-8 b(rameSets)43
-b(is)g(made.)77 b(In)42 b(practice,)47 b(there)c(ma)m(y)g(b)s(e)f(a)g
-(large)i(n)m(um)m(b)s(er)d(of)i(p)s(ossible)0 4701 y(pairings)30
-b(of)h(F)-8 b(rames)31 b(and)e(hence)i(of)f(p)s(ossible)g(links.)41
-b(Other)29 b(factors)j(m)m(ust)e(therefore)g(b)s(e)g(used)g(to)h
-(restrict)0 4814 y(the)g(c)m(hoice.)42 b(These)30 b(are:)111
-5058 y(1.)46 b(Not)g(ev)m(ery)g(p)s(ossible)e(pairing)h(of)h(F)-8
-b(rames)45 b(is)g(legitimate.)88 b(F)-8 b(or)45 b(example,)50
-b(y)m(ou)45 b(cannot)h(con)m(v)m(ert)227 5171 y(directly)30
-b(b)s(et)m(w)m(een)h(a)e(basic)h(F)-8 b(rame)31 b(and)e(a)g(SkyF)-8
-b(rame)30 b(whic)m(h)f(b)s(elong)h(to)g(di\013eren)m(t)g(classes,)h(so)
-f(suc)m(h)227 5284 y(pairings)g(will)h(b)s(e)f(ignored.)111
-5467 y(2.)46 b(In)24 b(a)h(similar)g(w)m(a)m(y)-8 b(,)27
-b(y)m(ou)e(cannot)g(con)m(v)m(ert)i(directly)e(b)s(et)m(w)m(een)g(F)-8
-b(rames)25 b(with)g(di\013eren)m(t)g(Domain)g(v)-5 b(alues)227
-5580 y(\()p Fu(x)p FF(7.12\).)66 b(If)38 b(the)g(Domain)g(attribute)h
-(is)f(used)f(consisten)m(tly)j(\(t)m(ypically)g(only)e(one)g(F)-8
-b(rame)39 b(in)e(eac)m(h)227 5693 y(F)-8 b(rameSet)32
-b(will)f(ha)m(v)m(e)g(a)g(particular)g(Domain)g(v)-5
-b(alue\),)31 b(then)f(this)h(further)e(restricts)i(the)f(c)m(hoice.)p
-eop end
-%%Page: 121 131
-TeXDict begin 121 130 bop 0 52 a Fy(14.2)93 b(Con)m(v)m(erting)31
-b(b)s(et)m(w)m(een)g(F)-8 b(rameSet)32 b(Co)s(ordinate)e(Systems)1372
-b FF(121)565 4227 y @beginspecial 36 @llx 91 @lly 566
- at urx 744 @ury 3180 @rwi @setspecial
-%%BeginDocument: sun211_figures/fsalign.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 36 91 566 744
-%..................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/23 16:33:47
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5654.15 3802.55 m
-5654.15 4022.15 5475.35 4200.95 5255.75 4200.95 c
-2070.95 4200.95 l
-1851.35 4200.95 1672.55 4022.15 1672.55 3802.55 c
-1672.55 1598.15 l
-1672.55 1378.55 1851.35 1199.75 2070.95 1199.75 c
-5255.75 1199.75 l
-5475.35 1199.75 5654.15 1378.55 5654.15 1598.15 c
-f*
-1 g
-5589.35 3857.75 m
-5589.35 4077.35 5411.75 4254.95 5192.15 4254.95 c
-2015.75 4254.95 l
-1796.15 4254.95 1618.55 4077.35 1618.55 3857.75 c
-1618.55 1661.75 l
-1618.55 1442.15 1796.15 1264.55 2015.75 1264.55 c
-5192.15 1264.55 l
-5411.75 1264.55 5589.35 1442.15 5589.35 1661.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5589.35 3857.75 m
-5589.35 4077.35 5411.75 4254.95 5192.15 4254.95 c
-2015.75 4254.95 l
-1796.15 4254.95 1618.55 4077.35 1618.55 3857.75 c
-1618.55 1661.75 l
-1618.55 1442.15 1796.15 1264.55 2015.75 1264.55 c
-5192.15 1264.55 l
-5411.75 1264.55 5589.35 1442.15 5589.35 1661.75 c
-h
-S
-0.564706 g
-4634.15 7005.35 m
-4634.15 7212.95 4466.15 7380.95 4258.55 7380.95 c
-1157.75 7380.95 l
-950.15 7380.95 782.15 7212.95 782.15 7005.35 c
-782.15 4755.35 l
-782.15 4547.75 950.15 4379.75 1157.75 4379.75 c
-4258.55 4379.75 l
-4466.15 4379.75 4634.15 4547.75 4634.15 4755.35 c
-f*
-1 g
-4569.35 7061.75 m
-4569.35 7268.15 4402.55 7434.95 4196.15 7434.95 c
-1101.35 7434.95 l
-894.95 7434.95 728.15 7268.15 728.15 7061.75 c
-728.15 4817.75 l
-728.15 4611.35 894.95 4444.55 1101.35 4444.55 c
-4196.15 4444.55 l
-4402.55 4444.55 4569.35 4611.35 4569.35 4817.75 c
-f*
-0 g
-4569.35 7061.75 m
-4569.35 7268.15 4402.55 7434.95 4196.15 7434.95 c
-1101.35 7434.95 l
-894.95 7434.95 728.15 7268.15 728.15 7061.75 c
-728.15 4817.75 l
-728.15 4611.35 894.95 4444.55 1101.35 4444.55 c
-4196.15 4444.55 l
-4402.55 4444.55 4569.35 4611.35 4569.35 4817.75 c
-h
-S
-0.564706 g
-1962.95 7095.35 m
-1962.95 7205.75 1871.75 7296.95 1760.15 7296.95 c
-1263.35 7296.95 l
-1151.75 7296.95 1060.55 7205.75 1060.55 7095.35 c
-1060.55 6957.35 l
-1060.55 6846.95 1151.75 6755.75 1263.35 6755.75 c
-1760.15 6755.75 l
-1871.75 6755.75 1962.95 6846.95 1962.95 6957.35 c
-f*
-1 g
-1898.15 7152.95 m
-1898.15 7262.15 1809.35 7350.95 1697.75 7350.95 c
-1206.95 7350.95 l
-1096.55 7350.95 1006.55 7262.15 1006.55 7152.95 c
-1006.55 7018.55 l
-1006.55 6909.35 1095.35 6820.55 1206.95 6820.55 c
-1697.75 6820.55 l
-1809.35 6820.55 1898.15 6909.35 1898.15 7018.55 c
-f*
-0 g
-1898.15 7152.95 m
-1898.15 7262.15 1809.35 7350.95 1697.75 7350.95 c
-1206.95 7350.95 l
-1096.55 7350.95 1006.55 7262.15 1006.55 7152.95 c
-1006.55 7018.55 l
-1006.55 6909.35 1095.35 6820.55 1206.95 6820.55 c
-1697.75 6820.55 l
-1809.35 6820.55 1898.15 6909.35 1898.15 7018.55 c
-h
-S
-0.201248 i
-1239.33 7192 m
-1125.22 7192 l
-1125.22 7187 l
-1139.11 7186.2 1143 7183.18 1143 7172.72 c
-1143 7075.32 l
-1143 7064.85 1140.17 7062.64 1125.22 7061.03 c
-1125.22 7056 l
-1197.67 7056 l
-1197.67 7061 l
-1179.15 7061.81 1176 7064.23 1176 7075.32 c
-1176 7122.21 l
-1196.22 7121.81 1203.55 7114.36 1206.32 7091.02 c
-1211.35 7091.02 l
-1211.35 7159.04 l
-1206.32 7159.04 l
-1202.76 7136.1 1195.82 7129.05 1176 7129.05 c
-1176 7175.74 l
-1176 7183.19 1178.52 7185 1188.41 7185 c
-1207.13 7185 1218.8 7181.64 1225.04 7174.74 c
-1229.47 7169.71 1231.68 7164.27 1234.5 7151.59 c
-1239.33 7151.59 l
-h
-1244.96 7056 m
-f*
-1289.19 7149 m
-1250.84 7149 l
-1250.84 7143.95 l
-1259.49 7142.74 1262 7140.12 1262 7132.07 c
-1262 7072.9 l
-1262 7064.65 1259.93 7062.44 1250.84 7060.83 c
-1250.84 7056 l
-1304.37 7056 l
-1304.37 7060.83 l
-1292.09 7061.63 1290 7064.25 1290 7076.73 c
-1290 7114.76 l
-1290 7125.23 1295.49 7133.88 1301.95 7133.88 c
-1303.56 7133.88 1305.37 7132.47 1307.59 7129.25 c
-1311.41 7123.82 1314.43 7122.01 1319.66 7122.01 c
-1327.11 7122.01 1332.34 7127.64 1332.34 7135.29 c
-1332.34 7144.55 1325.5 7151.41 1316.04 7151.41 c
-1306.1 7151.41 1298.54 7146.12 1289.19 7132.27 c
-h
-1334.35 7056 m
-f*
-1429.19 7068.88 m
-1427.18 7066.87 l
-1426.57 7066.26 1425.97 7066.06 1424.96 7066.06 c
-1422.15 7066.06 1421 7067.67 1421 7071.09 c
-1421 7123.62 l
-1421 7140.73 1405.6 7151.42 1380.89 7151.42 c
-1358.15 7151.42 1342.85 7141.06 1342.85 7125.83 c
-1342.85 7117.38 1347.69 7112.55 1355.94 7112.55 c
-1363.99 7112.55 1369.62 7117.38 1369.62 7124.22 c
-1369.62 7127.04 1368.61 7129.66 1366 7132.88 c
-1364.19 7134.89 1363.58 7136.1 1363.58 7137.3 c
-1363.58 7141.53 1369.02 7144.42 1376.26 7144.42 c
-1388.14 7144.42 1393.86 7139.08 1393.86 7127.04 c
-1393.86 7112.35 l
-1369.91 7105.1 1360.29 7101.48 1352.51 7096.45 c
-1343.46 7090.41 1339 7083.37 1339 7074.52 c
-1339 7062.24 1348.27 7053.18 1361.17 7053.18 c
-1372.84 7053.18 1382.1 7057.21 1393.17 7067.27 c
-1395.38 7057.01 1399.81 7053.18 1409.67 7053.18 c
-1418.32 7053.18 1424.56 7056.4 1432.21 7064.65 c
-h
-1393 7076.13 m
-1387.55 7069.89 1383.52 7067.47 1378.68 7067.47 c
-1372.64 7067.47 1368 7072.91 1368 7080.96 c
-1368 7092.63 1376.61 7100.88 1393 7105.31 c
-h
-1434.62 7056 m
-f*
-1476.4 7149 m
-1437.7 7149 l
-1437.7 7143.95 l
-1446.55 7142.74 1449 7140.32 1449 7132.07 c
-1449 7072.9 l
-1449 7064.65 1446.74 7062.44 1437.7 7060.83 c
-1437.7 7056 l
-1486 7056 l
-1486 7060.83 l
-1478.95 7061.84 1477 7064.65 1477 7072.3 c
-1477 7126.03 l
-1477 7127.04 1479.87 7130.66 1482.18 7132.88 c
-1486.4 7136.1 1490.02 7138.42 1493.65 7138.42 c
-1501.5 7138.42 1505 7133.59 1505 7121 c
-1505 7072.3 l
-1505 7064.05 1502.68 7061.43 1494.85 7060.83 c
-1494.85 7056 l
-1541.95 7056 l
-1541.95 7060.83 l
-1534.9 7061.64 1533 7064.65 1533 7072.3 c
-1533 7126.03 l
-1533 7127.04 1535.73 7130.46 1537.92 7132.68 c
-1542.35 7136.1 1545.97 7138.42 1549.59 7138.42 c
-1557.24 7138.42 1560 7133.38 1560 7121 c
-1560 7072.3 l
-1560 7063.85 1557.85 7061.43 1550.4 7060.83 c
-1550.4 7056 l
-1598.3 7056 l
-1598.3 7061 l
-1590.45 7061.4 1588 7063.78 1588 7072.3 c
-1588 7122.81 l
-1588 7140.12 1577.43 7151.42 1561.07 7151.42 c
-1549.59 7151.42 1541.95 7146.73 1531.48 7133.68 c
-1525.44 7146.36 1518.4 7151.42 1505.72 7151.42 c
-1492.95 7151.42 1483.98 7145.91 1476.4 7133.68 c
-h
-1601.64 7056 m
-f*
-1679.9 7081.16 m
-1671.65 7071.29 1665.61 7067.18 1656.96 7067.18 c
-1649.31 7067.18 1643.27 7070.77 1639.25 7077.94 c
-1635.43 7084.54 1633.82 7091.56 1633.01 7106 c
-1683.73 7106 l
-1682.52 7122.36 1679.5 7131.43 1673.26 7139.12 c
-1666.82 7146.96 1657.36 7151.42 1646.09 7151.42 c
-1620.94 7151.42 1604.03 7131.4 1604.03 7101.88 c
-1604.03 7072.5 1620.53 7053.18 1645.49 7053.18 c
-1661.79 7053.18 1671.65 7059.42 1684.73 7078.34 c
-h
-1632 7113 m
-1632.61 7136.96 1636.23 7144.42 1646.09 7144.42 c
-1651.93 7144.42 1655.55 7141.38 1657.16 7135.49 c
-1658.17 7131.67 1658.57 7126.03 1658.97 7115.77 c
-1658.97 7113 l
-h
-1688.35 7056 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -1732 -7056]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4422.95 6294.95 m
-4422.95 6406.55 4331.75 6497.75 4220.15 6497.75 c
-3723.35 6497.75 l
-3611.75 6497.75 3520.55 6406.55 3520.55 6294.95 c
-3520.55 6158.15 l
-3520.55 6046.55 3611.75 5955.35 3723.35 5955.35 c
-4220.15 5955.35 l
-4331.75 5955.35 4422.95 6046.55 4422.95 6158.15 c
-f*
-1 g
-4353.35 6351.35 m
-4353.35 6459.35 4264.55 6546.95 4155.35 6546.95 c
-3669.35 6546.95 l
-3560.15 6546.95 3471.35 6459.35 3471.35 6351.35 c
-3471.35 6220.55 l
-3471.35 6112.55 3560.15 6024.95 3669.35 6024.95 c
-4155.35 6024.95 l
-4264.55 6024.95 4353.35 6112.55 4353.35 6220.55 c
-f*
-16 w
-0 g
-4353.35 6351.35 m
-4353.35 6459.35 4264.55 6546.95 4155.35 6546.95 c
-3669.35 6546.95 l
-3560.15 6546.95 3471.35 6459.35 3471.35 6351.35 c
-3471.35 6220.55 l
-3471.35 6112.55 3560.15 6024.95 3669.35 6024.95 c
-4155.35 6024.95 l
-4264.55 6024.95 4353.35 6112.55 4353.35 6220.55 c
-h
-S
-0.201248 i
-3699.33 6393 m
-3585.22 6393 l
-3585.22 6388 l
-3599.11 6387.2 3603 6384.18 3603 6373.72 c
-3603 6276.32 l
-3603 6265.85 3600.17 6263.64 3585.22 6262.03 c
-3585.22 6257 l
-3657.67 6257 l
-3657.67 6262 l
-3639.15 6262.81 3636 6265.23 3636 6276.32 c
-3636 6323.21 l
-3656.22 6322.81 3663.55 6315.36 3666.32 6292.02 c
-3671.35 6292.02 l
-3671.35 6360.04 l
-3666.32 6360.04 l
-3662.76 6337.1 3655.82 6330.05 3636 6330.05 c
-3636 6376.74 l
-3636 6384.19 3638.52 6386 3648.41 6386 c
-3667.13 6386 3678.8 6382.64 3685.04 6375.74 c
-3689.47 6370.71 3691.68 6365.27 3694.5 6352.59 c
-3699.33 6352.59 l
-h
-3704.96 6257 m
-f*
-3749.19 6350 m
-3710.84 6350 l
-3710.84 6344.95 l
-3719.49 6343.74 3722 6341.12 3722 6333.07 c
-3722 6273.9 l
-3722 6265.65 3719.93 6263.44 3710.84 6261.83 c
-3710.84 6257 l
-3764.37 6257 l
-3764.37 6261.83 l
-3752.09 6262.63 3750 6265.25 3750 6277.73 c
-3750 6315.76 l
-3750 6326.23 3755.49 6334.88 3761.95 6334.88 c
-3763.56 6334.88 3765.37 6333.47 3767.59 6330.25 c
-3771.41 6324.82 3774.43 6323.01 3779.66 6323.01 c
-3787.11 6323.01 3792.34 6328.64 3792.34 6336.29 c
-3792.34 6345.55 3785.5 6352.41 3776.04 6352.41 c
-3766.1 6352.41 3758.54 6347.12 3749.19 6333.27 c
-h
-3794.35 6257 m
-f*
-3889.19 6269.88 m
-3887.18 6267.87 l
-3886.57 6267.26 3885.97 6267.06 3884.96 6267.06 c
-3882.15 6267.06 3881 6268.67 3881 6272.09 c
-3881 6324.62 l
-3881 6341.73 3865.6 6352.42 3840.89 6352.42 c
-3818.15 6352.42 3802.85 6342.06 3802.85 6326.83 c
-3802.85 6318.38 3807.69 6313.55 3815.94 6313.55 c
-3823.99 6313.55 3829.62 6318.38 3829.62 6325.22 c
-3829.62 6328.04 3828.61 6330.66 3826 6333.88 c
-3824.19 6335.89 3823.58 6337.1 3823.58 6338.3 c
-3823.58 6342.53 3829.02 6345.42 3836.26 6345.42 c
-3848.14 6345.42 3853.86 6340.08 3853.86 6328.04 c
-3853.86 6313.35 l
-3829.91 6306.1 3820.29 6302.48 3812.51 6297.45 c
-3803.46 6291.41 3799 6284.37 3799 6275.52 c
-3799 6263.24 3808.27 6254.18 3821.17 6254.18 c
-3832.84 6254.18 3842.1 6258.21 3853.17 6268.27 c
-3855.38 6258.01 3859.81 6254.18 3869.67 6254.18 c
-3878.32 6254.18 3884.56 6257.4 3892.21 6265.65 c
-h
-3853 6277.13 m
-3847.55 6270.89 3843.52 6268.47 3838.68 6268.47 c
-3832.64 6268.47 3828 6273.91 3828 6281.96 c
-3828 6293.63 3836.61 6301.88 3853 6306.31 c
-h
-3894.62 6257 m
-f*
-3936.4 6350 m
-3897.7 6350 l
-3897.7 6344.95 l
-3906.55 6343.74 3909 6341.32 3909 6333.07 c
-3909 6273.9 l
-3909 6265.65 3906.74 6263.44 3897.7 6261.83 c
-3897.7 6257 l
-3946 6257 l
-3946 6261.83 l
-3938.95 6262.84 3937 6265.65 3937 6273.3 c
-3937 6327.03 l
-3937 6328.04 3939.87 6331.66 3942.18 6333.88 c
-3946.4 6337.1 3950.02 6339.42 3953.65 6339.42 c
-3961.5 6339.42 3965 6334.59 3965 6322 c
-3965 6273.3 l
-3965 6265.05 3962.68 6262.43 3954.85 6261.83 c
-3954.85 6257 l
-4001.95 6257 l
-4001.95 6261.83 l
-3994.9 6262.64 3993 6265.65 3993 6273.3 c
-3993 6327.03 l
-3993 6328.04 3995.73 6331.46 3997.92 6333.68 c
-4002.35 6337.1 4005.97 6339.42 4009.59 6339.42 c
-4017.24 6339.42 4020 6334.38 4020 6322 c
-4020 6273.3 l
-4020 6264.85 4017.85 6262.43 4010.4 6261.83 c
-4010.4 6257 l
-4058.3 6257 l
-4058.3 6262 l
-4050.45 6262.4 4048 6264.78 4048 6273.3 c
-4048 6323.81 l
-4048 6341.12 4037.43 6352.42 4021.07 6352.42 c
-4009.59 6352.42 4001.95 6347.73 3991.48 6334.68 c
-3985.44 6347.36 3978.4 6352.42 3965.72 6352.42 c
-3952.95 6352.42 3943.98 6346.91 3936.4 6334.68 c
-h
-4061.64 6257 m
-f*
-4139.9 6282.16 m
-4131.65 6272.29 4125.61 6268.18 4116.96 6268.18 c
-4109.31 6268.18 4103.27 6271.77 4099.25 6278.94 c
-4095.43 6285.54 4093.82 6292.56 4093.01 6307 c
-4143.73 6307 l
-4142.52 6323.36 4139.5 6332.43 4133.26 6340.12 c
-4126.82 6347.96 4117.36 6352.42 4106.09 6352.42 c
-4080.94 6352.42 4064.03 6332.4 4064.03 6302.88 c
-4064.03 6273.5 4080.53 6254.18 4105.49 6254.18 c
-4121.79 6254.18 4131.65 6260.42 4144.73 6279.34 c
-h
-4092 6314 m
-4092.61 6337.96 4096.23 6345.42 4106.09 6345.42 c
-4111.93 6345.42 4115.55 6342.38 4117.16 6336.49 c
-4118.17 6332.67 4118.57 6327.03 4118.97 6316.77 c
-4118.97 6314 l
-h
-4148.35 6257 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4184 -6255]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3494.15 5588.15 m
-3494.15 5698.55 3402.95 5789.75 3291.35 5789.75 c
-2795.75 5789.75 l
-2684.15 5789.75 2592.95 5698.55 2592.95 5588.15 c
-2592.95 5450.15 l
-2592.95 5339.75 2684.15 5248.55 2795.75 5248.55 c
-3291.35 5248.55 l
-3402.95 5248.55 3494.15 5339.75 3494.15 5450.15 c
-f*
-1 g
-3414.95 5642.15 m
-3414.95 5745.35 3328.55 5829.35 3221.75 5829.35 c
-2746.55 5829.35 l
-2639.75 5829.35 2553.35 5745.35 2553.35 5642.15 c
-2553.35 5514.95 l
-2553.35 5411.75 2639.75 5327.75 2746.55 5327.75 c
-3221.75 5327.75 l
-3328.55 5327.75 3414.95 5411.75 3414.95 5514.95 c
-f*
-32 w
-0 g
-3414.95 5642.15 m
-3414.95 5745.35 3328.55 5829.35 3221.75 5829.35 c
-2746.55 5829.35 l
-2639.75 5829.35 2553.35 5745.35 2553.35 5642.15 c
-2553.35 5514.95 l
-2553.35 5411.75 2639.75 5327.75 2746.55 5327.75 c
-3221.75 5327.75 l
-3328.55 5327.75 3414.95 5411.75 3414.95 5514.95 c
-h
-S
-0.201248 i
-2782.33 5685 m
-2668.22 5685 l
-2668.22 5680 l
-2682.11 5679.2 2686 5676.18 2686 5665.72 c
-2686 5568.32 l
-2686 5557.85 2683.17 5555.64 2668.22 5554.03 c
-2668.22 5549 l
-2740.67 5549 l
-2740.67 5554 l
-2722.15 5554.81 2719 5557.23 2719 5568.32 c
-2719 5615.21 l
-2739.22 5614.81 2746.55 5607.36 2749.32 5584.02 c
-2754.35 5584.02 l
-2754.35 5652.04 l
-2749.32 5652.04 l
-2745.76 5629.1 2738.82 5622.05 2719 5622.05 c
-2719 5668.74 l
-2719 5676.19 2721.52 5678 2731.41 5678 c
-2750.13 5678 2761.8 5674.64 2768.04 5667.74 c
-2772.47 5662.71 2774.68 5657.27 2777.5 5644.59 c
-2782.33 5644.59 l
-h
-2787.96 5549 m
-f*
-2831.19 5642 m
-2792.84 5642 l
-2792.84 5636.95 l
-2801.49 5635.74 2804 5633.12 2804 5625.07 c
-2804 5565.9 l
-2804 5557.65 2801.93 5555.44 2792.84 5553.83 c
-2792.84 5549 l
-2846.37 5549 l
-2846.37 5553.83 l
-2834.09 5554.63 2832 5557.25 2832 5569.73 c
-2832 5607.76 l
-2832 5618.23 2837.49 5626.88 2843.95 5626.88 c
-2845.56 5626.88 2847.37 5625.47 2849.59 5622.25 c
-2853.41 5616.82 2856.43 5615.01 2861.66 5615.01 c
-2869.11 5615.01 2874.34 5620.64 2874.34 5628.29 c
-2874.34 5637.55 2867.5 5644.41 2858.04 5644.41 c
-2848.1 5644.41 2840.54 5639.12 2831.19 5625.27 c
-h
-2876.35 5549 m
-f*
-2971.19 5561.88 m
-2969.18 5559.87 l
-2968.57 5559.26 2967.97 5559.06 2966.96 5559.06 c
-2964.15 5559.06 2963 5560.67 2963 5564.09 c
-2963 5616.62 l
-2963 5633.73 2947.6 5644.42 2922.89 5644.42 c
-2900.15 5644.42 2884.85 5634.06 2884.85 5618.83 c
-2884.85 5610.38 2889.69 5605.55 2897.94 5605.55 c
-2905.99 5605.55 2911.62 5610.38 2911.62 5617.22 c
-2911.62 5620.04 2910.61 5622.66 2908 5625.88 c
-2906.19 5627.89 2905.58 5629.1 2905.58 5630.3 c
-2905.58 5634.53 2911.02 5637.42 2918.26 5637.42 c
-2930.14 5637.42 2935.86 5632.08 2935.86 5620.04 c
-2935.86 5605.35 l
-2911.91 5598.1 2902.29 5594.48 2894.51 5589.45 c
-2885.46 5583.41 2881 5576.37 2881 5567.52 c
-2881 5555.24 2890.27 5546.18 2903.17 5546.18 c
-2914.84 5546.18 2924.1 5550.21 2935.17 5560.27 c
-2937.38 5550.01 2941.81 5546.18 2951.67 5546.18 c
-2960.32 5546.18 2966.56 5549.4 2974.21 5557.65 c
-h
-2935 5569.13 m
-2929.55 5562.89 2925.52 5560.47 2920.68 5560.47 c
-2914.64 5560.47 2910 5565.91 2910 5573.96 c
-2910 5585.63 2918.61 5593.88 2935 5598.31 c
-h
-2976.62 5549 m
-f*
-3018.4 5642 m
-2979.7 5642 l
-2979.7 5636.95 l
-2988.55 5635.74 2991 5633.32 2991 5625.07 c
-2991 5565.9 l
-2991 5557.65 2988.74 5555.44 2979.7 5553.83 c
-2979.7 5549 l
-3028 5549 l
-3028 5553.83 l
-3020.95 5554.84 3019 5557.65 3019 5565.3 c
-3019 5619.03 l
-3019 5620.04 3021.87 5623.66 3024.18 5625.88 c
-3028.4 5629.1 3032.02 5631.42 3035.65 5631.42 c
-3043.5 5631.42 3047 5626.59 3047 5614 c
-3047 5565.3 l
-3047 5557.05 3044.68 5554.43 3036.85 5553.83 c
-3036.85 5549 l
-3083.95 5549 l
-3083.95 5553.83 l
-3076.9 5554.64 3075 5557.65 3075 5565.3 c
-3075 5619.03 l
-3075 5620.04 3077.73 5623.46 3079.92 5625.68 c
-3084.35 5629.1 3087.97 5631.42 3091.59 5631.42 c
-3099.24 5631.42 3102 5626.38 3102 5614 c
-3102 5565.3 l
-3102 5556.85 3099.85 5554.43 3092.4 5553.83 c
-3092.4 5549 l
-3140.3 5549 l
-3140.3 5554 l
-3132.45 5554.4 3130 5556.78 3130 5565.3 c
-3130 5615.81 l
-3130 5633.12 3119.43 5644.42 3103.07 5644.42 c
-3091.59 5644.42 3083.95 5639.73 3073.48 5626.68 c
-3067.44 5639.36 3060.4 5644.42 3047.72 5644.42 c
-3034.95 5644.42 3025.98 5638.91 3018.4 5626.68 c
-h
-3143.64 5549 m
-f*
-3223.9 5574.16 m
-3215.65 5564.29 3209.61 5560.18 3200.96 5560.18 c
-3193.31 5560.18 3187.27 5563.77 3183.25 5570.94 c
-3179.43 5577.54 3177.82 5584.56 3177.01 5599 c
-3227.73 5599 l
-3226.52 5615.36 3223.5 5624.43 3217.26 5632.12 c
-3210.82 5639.96 3201.36 5644.42 3190.09 5644.42 c
-3164.94 5644.42 3148.03 5624.4 3148.03 5594.88 c
-3148.03 5565.5 3164.53 5546.18 3189.49 5546.18 c
-3205.79 5546.18 3215.65 5552.42 3228.73 5571.34 c
-h
-3176 5606 m
-3176.61 5629.96 3180.23 5637.42 3190.09 5637.42 c
-3195.93 5637.42 3199.55 5634.38 3201.16 5628.49 c
-3202.17 5624.67 3202.57 5619.03 3202.97 5608.77 c
-3202.97 5606 l
-h
-3232.35 5549 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3266 -5549]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-16 w
-1456.55 6790.55 m
-1456.55 6798.95 1456.55 6798.95 1456.55 6790.55 c
-1456.55 6654.95 1490.15 6524.15 1552.55 6426.95 c
-S
-1481.75 6436.55 m
-1541.75 6453.35 l
-1574.15 6506.15 l
-1641.35 6324.95 l
-f*
-1949.75 5826.95 m
-2034.95 5715.35 2206.55 5634.95 2412.95 5608.55 c
-S
-2366.15 5556.95 m
-2392.55 5613.35 l
-2374.55 5672.15 l
-2554.55 5601.35 l
-f*
-8 w
-2531.75 7204.55 m
-2429.75 7304.15 2284.55 7361.75 2130.95 7361.75 c
-2026.55 7361.75 1924.55 7335.35 1836.95 7284.95 c
-S
-2466.95 7198.55 m
-2514.95 7214.15 l
-2538.95 7259.75 l
-2602.55 7113.35 l
-f*
-2886.95 6628.55 m
-2975.75 6454.55 3140.15 6329.75 3335.75 6290.15 c
-S
-3291.35 6250.55 m
-3316.55 6296.15 l
-3304.55 6346.55 l
-3448.55 6275.75 l
-f*
-0.564706 g
-3338.15 6804.95 m
-3203.75 6840.95 l
-3299.75 6897.35 l
-3146.15 6905.75 l
-3188.15 6976.55 l
-3040.55 6956.15 l
-3023.75 7026.95 l
-2903.75 6982.55 l
-2828.15 7046.15 l
-2752.55 6982.55 l
-2632.55 7026.95 l
-2614.55 6956.15 l
-2465.75 6976.55 l
-2510.15 6905.75 l
-2356.55 6897.35 l
-2452.55 6840.95 l
-2316.95 6804.95 l
-2452.55 6770.15 l
-2356.55 6713.75 l
-2510.15 6704.15 l
-2465.75 6634.55 l
-2614.55 6654.95 l
-2632.55 6582.95 l
-2752.55 6628.55 l
-2828.15 6564.95 l
-2903.75 6628.55 l
-3023.75 6582.95 l
-3040.55 6654.95 l
-3188.15 6634.55 l
-3146.15 6704.15 l
-3299.75 6713.75 l
-3203.75 6770.15 l
-f*
-1 g
-3278.15 6864.95 m
-3143.75 6900.95 l
-3239.75 6957.35 l
-3086.15 6965.75 l
-3128.15 7036.55 l
-2980.55 7016.15 l
-2963.75 7086.95 l
-2843.75 7042.55 l
-2768.15 7106.15 l
-2692.55 7042.55 l
-2572.55 7086.95 l
-2554.55 7016.15 l
-2405.75 7036.55 l
-2450.15 6965.75 l
-2296.55 6957.35 l
-2392.55 6900.95 l
-2256.95 6864.95 l
-2392.55 6830.15 l
-2296.55 6773.75 l
-2450.15 6764.15 l
-2405.75 6694.55 l
-2554.55 6714.95 l
-2572.55 6642.95 l
-2692.55 6688.55 l
-2768.15 6624.95 l
-2843.75 6688.55 l
-2963.75 6642.95 l
-2980.55 6714.95 l
-3128.15 6694.55 l
-3086.15 6764.15 l
-3239.75 6773.75 l
-3143.75 6830.15 l
-f*
-0 g
-3278.15 6864.95 m
-3143.75 6900.95 l
-3239.75 6957.35 l
-3086.15 6965.75 l
-3128.15 7036.55 l
-2980.55 7016.15 l
-2963.75 7086.95 l
-2843.75 7042.55 l
-2768.15 7106.15 l
-2692.55 7042.55 l
-2572.55 7086.95 l
-2554.55 7016.15 l
-2405.75 7036.55 l
-2450.15 6965.75 l
-2296.55 6957.35 l
-2392.55 6900.95 l
-2256.95 6864.95 l
-2392.55 6830.15 l
-2296.55 6773.75 l
-2450.15 6764.15 l
-2405.75 6694.55 l
-2554.55 6714.95 l
-2572.55 6642.95 l
-2692.55 6688.55 l
-2768.15 6624.95 l
-2843.75 6688.55 l
-2963.75 6642.95 l
-2980.55 6714.95 l
-3128.15 6694.55 l
-3086.15 6764.15 l
-3239.75 6773.75 l
-3143.75 6830.15 l
-3278.15 6864.95 l
-3239.75 6864.95 l
-3117.35 6833.75 l
-3206.15 6780.95 l
-3068.15 6773.75 l
-3108.95 6707.75 l
-2973.35 6725.75 l
-2956.55 6657.35 l
-2841.35 6699.35 l
-2768.15 6636.95 l
-2694.95 6699.35 l
-2579.75 6657.35 l
-2561.75 6725.75 l
-2426.15 6707.75 l
-2466.95 6773.75 l
-2330.15 6780.95 l
-2418.95 6833.75 l
-2296.55 6864.95 l
-2417.75 6897.35 l
-2330.15 6950.15 l
-2466.95 6957.35 l
-2426.15 7023.35 l
-2561.75 7004.15 l
-2579.75 7073.75 l
-2694.95 7030.55 l
-2768.15 7092.95 l
-2841.35 7030.55 l
-2956.55 7073.75 l
-2973.35 7004.15 l
-3108.95 7023.35 l
-3068.15 6957.35 l
-3206.15 6950.15 l
-3117.35 6897.35 l
-3239.75 6864.95 l
-3278.15 6864.95 l
-f*
-0.2 i
-2590.08 6916.76 m
-2570.08 6842.52 l
-2567.52 6833.88 2564.48 6831.64 2554.08 6831 c
-2554.08 6827 l
-2604 6827 l
-2604 6831 l
-2594.72 6831.48 2592.48 6832.76 2592.48 6837.88 c
-2592.48 6839.64 2592.8 6841.4 2593.76 6845.08 c
-2593.92 6845.88 l
-2594.08 6846.68 l
-2613.76 6918.52 l
-2616.16 6926.84 2618.56 6929.08 2626.72 6930.04 c
-2626.72 6934 l
-2592.8 6934 l
-2543.2 6857.24 l
-2534.56 6934 l
-2499.2 6934 l
-2499.2 6930 l
-2509.28 6929.52 2510.72 6928.89 2510.72 6924.44 c
-2510.72 6922.2 2510.08 6919.32 2508.96 6915.16 c
-2491.52 6855.48 l
-2485.12 6834.68 2484 6832.92 2475.36 6831 c
-2475.36 6827 l
-2508.48 6827 l
-2508.48 6831 l
-2498.24 6832.28 2495.68 6834.2 2495.68 6840.76 c
-2495.68 6843.48 2496.48 6847.48 2498.72 6855.48 c
-2514.88 6914.52 l
-2525.6 6825.08 l
-2530.08 6825.08 l
-h
-2622.24 6827 m
-f*
-2691.44 6847.32 m
-2684.88 6838.52 2682.48 6835.76 2679.92 6835.76 c
-2678.64 6835.76 2678 6836.86 2678 6838.52 c
-2678 6842.52 2679.44 6849.08 2683.44 6862.2 c
-2694.8 6899.96 l
-2677.04 6898.84 l
-2674.16 6889.4 l
-2672.72 6897.56 2669.2 6901.08 2662.32 6901.08 c
-2642.64 6901.08 2619 6870.27 2619 6845.24 c
-2619 6833.08 2625.74 6824.92 2635.92 6824.92 c
-2645.68 6824.92 2653.04 6830.68 2662.16 6846.04 c
-2660.24 6839.48 2660 6837.56 2660 6835.32 c
-2660 6829.4 2664.76 6824.76 2670.64 6824.76 c
-2678.16 6824.76 2685.52 6831 2694.8 6844.92 c
-h
-2664.56 6894.2 m
-2668.08 6893.88 2670.56 6891 2670.56 6886.68 c
-2670.56 6877.08 2665.24 6859.32 2658.96 6848.28 c
-2654.64 6840.44 2649.84 6835.92 2645.52 6835.92 c
-2641.36 6835.92 2638 6839.75 2638 6844.92 c
-2638 6853.24 2643.42 6869.24 2650.16 6881.08 c
-2654.96 6889.56 2660.24 6894.52 2664.56 6894.2 c
-h
-2702 6827 m
-f*
-2736.56 6900.92 m
-2720.24 6898.36 2714 6897.4 2705.68 6896.44 c
-2705.68 6892 l
-2712.88 6891.69 2714.32 6891.07 2714.32 6888.12 c
-2714.32 6886.52 2713.04 6880.76 2710.8 6872.44 c
-2694.8 6810.36 l
-2691.76 6799.8 2690.48 6798.84 2682.8 6799 c
-2682.8 6794 l
-2722.64 6794 l
-2722.64 6799 l
-2714.64 6799.14 2712.24 6800.16 2712.24 6803.64 c
-2712.24 6805.88 2713.36 6810.68 2716.4 6821.88 c
-2717.52 6825.72 2717.52 6826.04 2718.16 6828.44 c
-2723.76 6825.56 2725.68 6824.92 2729.04 6824.92 c
-2750.8 6824.92 2773.36 6853.88 2773.36 6881.56 c
-2773.36 6893.4 2766.64 6901.08 2756.08 6901.08 c
-2746.96 6901.08 2739.92 6895.92 2730.48 6882.52 c
-h
-2747.12 6889.56 m
-2751.28 6889.24 2753.68 6885.56 2753.36 6880.44 c
-2752.72 6869.88 2747.6 6854.04 2741.84 6843.64 c
-2736.88 6835 2731.76 6829.92 2726.32 6829.92 c
-2722.8 6829.92 2720.08 6832.75 2720.08 6836.28 c
-2720.08 6839 2721.84 6845.56 2726.16 6860.12 c
-2729.68 6871.8 2731.12 6875.8 2733.52 6879.48 c
-2737.52 6885.72 2742.96 6889.88 2747.12 6889.56 c
-h
-2782 6827 m
-f*
-2817.56 6900.92 m
-2801.24 6898.36 2795 6897.4 2786.68 6896.44 c
-2786.68 6892 l
-2793.88 6891.69 2795.32 6891.07 2795.32 6888.12 c
-2795.32 6886.52 2794.04 6880.76 2791.8 6872.44 c
-2775.8 6810.36 l
-2772.76 6799.8 2771.48 6798.84 2763.8 6799 c
-2763.8 6794 l
-2803.64 6794 l
-2803.64 6799 l
-2795.64 6799.14 2793.24 6800.16 2793.24 6803.64 c
-2793.24 6805.88 2794.36 6810.68 2797.4 6821.88 c
-2798.52 6825.72 2798.52 6826.04 2799.16 6828.44 c
-2804.76 6825.56 2806.68 6824.92 2810.04 6824.92 c
-2831.8 6824.92 2854.36 6853.88 2854.36 6881.56 c
-2854.36 6893.4 2847.64 6901.08 2837.08 6901.08 c
-2827.96 6901.08 2820.92 6895.92 2811.48 6882.52 c
-h
-2828.12 6889.56 m
-2832.28 6889.24 2834.68 6885.56 2834.36 6880.44 c
-2833.72 6869.88 2828.6 6854.04 2822.84 6843.64 c
-2817.88 6835 2812.76 6829.92 2807.32 6829.92 c
-2803.8 6829.92 2801.08 6832.75 2801.08 6836.28 c
-2801.08 6839 2802.84 6845.56 2807.16 6860.12 c
-2810.68 6871.8 2812.12 6875.8 2814.52 6879.48 c
-2818.52 6885.72 2823.96 6889.88 2828.12 6889.56 c
-h
-2863 6827 m
-f*
-2896.56 6849.56 m
-2894.32 6846.36 l
-2890.16 6840.12 2886.48 6836.56 2884.08 6836.56 c
-2882.8 6836.56 2882 6837.77 2882 6839.16 c
-2882 6840.6 2882.62 6844.76 2883.12 6847.48 c
-2897.68 6900.92 l
-2889.22 6899 2878.26 6897.4 2866.04 6896.44 c
-2866.04 6892 l
-2867.44 6892 l
-2872.24 6892 2875.48 6890.44 2875.48 6887.48 c
-2875.48 6886.2 2874.71 6883.8 2873.68 6881.08 c
-2864.4 6846.68 l
-2863.12 6842.04 2863 6837.88 2863 6835.64 c
-2863 6829.56 2867.2 6825.56 2873.36 6825.56 c
-2882.96 6825.56 2888.88 6830.36 2900.08 6847.32 c
-h
-2892.88 6936.4 m
-2887.44 6936.4 2883 6931.46 2883 6926.04 c
-2883 6919.8 2887.26 6915.4 2893.04 6915.4 c
-2899.12 6915.4 2904 6919.86 2904 6925.56 c
-2904 6931.48 2899 6936.4 2892.88 6936.4 c
-h
-2906.48 6827 m
-f*
-2981.36 6848.6 m
-2974.96 6838.68 2972.88 6836.56 2970.16 6836.56 c
-2968.88 6836.56 2968 6837.63 2968 6839.16 c
-2968 6840.76 2968.94 6844.12 2971.92 6853.08 c
-2977.68 6870.52 l
-2980.24 6878.04 2982 6885.08 2982 6888.92 c
-2982 6896.76 2977.78 6901.08 2970.16 6901.08 c
-2964.24 6901.08 2958.48 6898.62 2954.16 6894.36 c
-2948.24 6888.76 2945.2 6884.92 2934.48 6869.08 c
-2944.72 6900.76 l
-2934.48 6898.52 2921.68 6896.92 2912.72 6896.6 c
-2912.72 6891.8 l
-2919.44 6891.65 2921.36 6890.92 2921.36 6888.12 c
-2921.36 6886.2 2919.12 6877.72 2914 6859.64 c
-2910.32 6846.68 2909.2 6842.52 2905.04 6827 c
-2924.4 6827 l
-2931.92 6854.68 2937.68 6868.6 2947.6 6881.56 c
-2950.8 6885.88 2955.76 6889.08 2958.64 6889.08 c
-2960.72 6889.08 2963 6887.63 2963 6886.04 c
-2963 6885.56 2962.54 6884.28 2961.84 6882.68 c
-2953.04 6856.12 l
-2950.48 6848.44 2949 6839.32 2949 6835.16 c
-2949 6829.08 2952.84 6825.56 2959.44 6825.56 c
-2969.04 6825.56 2975.6 6831 2984.88 6846.52 c
-h
-2994.96 6827 m
-f*
-3072.48 6896 m
-3054.72 6896 l
-3049.28 6899.58 3044.48 6901.08 3037.12 6901.08 c
-3017.44 6901.08 3001 6888.05 3001 6871.8 c
-3001 6863.64 3005.35 6857.88 3014.4 6854.2 c
-3001.28 6846.84 2999 6844.6 2999 6838.68 c
-2999 6833.56 3001.89 6830.52 3008.96 6828.12 c
-2999.04 6825.72 2995.84 6824.44 2992 6821.4 c
-2989.44 6819.16 2988 6815.32 2988 6811.48 c
-2988 6801.08 2999.56 6795 3017.76 6795 c
-3040.32 6795 3056 6804.72 3056 6818.52 c
-3056 6828.28 3049.6 6833.56 3032.16 6838.52 c
-3023.68 6840.92 l
-3018.56 6842.36 3015 6844.6 3015 6847 c
-3015 6849.56 3017.68 6852.28 3020 6852.28 c
-3020.8 6852.28 3021.92 6852.24 3023.2 6852.12 c
-3024.96 6851.64 3026.24 6851 3028.16 6851 c
-3035.2 6851 3042.4 6853.09 3048.48 6856.92 c
-3057.76 6862.2 3063 6870.36 3063 6879.96 c
-3063 6882.64 3062.59 6884.32 3061.76 6887 c
-3072.48 6887 l
-h
-3014.4 6826.04 m
-3016.32 6825.88 3028.48 6821.72 3032 6820.12 c
-3036.48 6817.88 3039 6815.16 3039 6811 c
-3039 6803.96 3031.8 6800 3019.36 6800 c
-3008.96 6800 3002 6805.1 3002 6812.44 c
-3002 6815.48 3003.32 6818.2 3006.24 6821.24 c
-3008.32 6823.32 3013.12 6826.2 3014.4 6826.04 c
-h
-3036.8 6896.08 m
-3040.96 6896.08 3044 6892.19 3044 6886.52 c
-3044 6881.08 3042.08 6873.4 3039.36 6867.48 c
-3036 6860.12 3031.84 6856 3026.88 6856 c
-3022.56 6856 3020 6859.52 3020 6865.88 c
-3020 6872.28 3022.79 6882.04 3026.24 6888.12 c
-3029.28 6893.4 3032.64 6896.08 3036.8 6896.08 c
-h
-3076 6827 m
-f*
-1 i
-0.564706 g
-2408.15 6009.35 m
-2273.75 6046.55 l
-2369.75 6101.75 l
-2216.15 6111.35 l
-2258.15 6180.95 l
-2110.55 6160.55 l
-2093.75 6232.55 l
-1973.75 6186.95 l
-1898.15 6250.55 l
-1822.55 6186.95 l
-1702.55 6232.55 l
-1684.55 6160.55 l
-1535.75 6180.95 l
-1580.15 6111.35 l
-1426.55 6101.75 l
-1522.55 6046.55 l
-1386.95 6009.35 l
-1522.55 5974.55 l
-1426.55 5918.15 l
-1580.15 5909.75 l
-1535.75 5840.15 l
-1684.55 5859.35 l
-1702.55 5788.55 l
-1822.55 5832.95 l
-1898.15 5769.35 l
-1973.75 5832.95 l
-2093.75 5788.55 l
-2110.55 5859.35 l
-2258.15 5840.15 l
-2216.15 5909.75 l
-2369.75 5918.15 l
-2273.75 5974.55 l
-f*
-1 g
-2348.15 6069.35 m
-2213.75 6106.55 l
-2309.75 6161.75 l
-2156.15 6171.35 l
-2198.15 6240.95 l
-2050.55 6220.55 l
-2033.75 6292.55 l
-1913.75 6246.95 l
-1838.15 6310.55 l
-1762.55 6246.95 l
-1642.55 6292.55 l
-1624.55 6220.55 l
-1475.75 6240.95 l
-1520.15 6171.35 l
-1366.55 6161.75 l
-1462.55 6106.55 l
-1326.95 6069.35 l
-1462.55 6034.55 l
-1366.55 5978.15 l
-1520.15 5969.75 l
-1475.75 5900.15 l
-1624.55 5919.35 l
-1642.55 5848.55 l
-1762.55 5892.95 l
-1838.15 5829.35 l
-1913.75 5892.95 l
-2033.75 5848.55 l
-2050.55 5919.35 l
-2198.15 5900.15 l
-2156.15 5969.75 l
-2309.75 5978.15 l
-2213.75 6034.55 l
-f*
-0 g
-2348.15 6069.35 m
-2213.75 6106.55 l
-2309.75 6161.75 l
-2156.15 6171.35 l
-2198.15 6240.95 l
-2050.55 6220.55 l
-2033.75 6292.55 l
-1913.75 6246.95 l
-1838.15 6310.55 l
-1762.55 6246.95 l
-1642.55 6292.55 l
-1624.55 6220.55 l
-1475.75 6240.95 l
-1520.15 6171.35 l
-1366.55 6161.75 l
-1462.55 6106.55 l
-1326.95 6069.35 l
-1462.55 6034.55 l
-1366.55 5978.15 l
-1520.15 5969.75 l
-1475.75 5900.15 l
-1624.55 5919.35 l
-1642.55 5848.55 l
-1762.55 5892.95 l
-1838.15 5829.35 l
-1913.75 5892.95 l
-2033.75 5848.55 l
-2050.55 5919.35 l
-2198.15 5900.15 l
-2156.15 5969.75 l
-2309.75 5978.15 l
-2213.75 6034.55 l
-2348.15 6069.35 l
-2271.35 6069.35 l
-2162.15 6041.75 l
-2242.55 5994.95 l
-2122.55 5987.75 l
-2159.75 5924.15 l
-2036.15 5942.15 l
-2019.35 5874.95 l
-1910.15 5915.75 l
-1838.15 5855.75 l
-1766.15 5915.75 l
-1655.75 5874.95 l
-1640.15 5942.15 l
-1516.55 5924.15 l
-1554.95 5987.75 l
-1433.75 5994.95 l
-1514.15 6041.75 l
-1404.95 6069.35 l
-1514.15 6098.15 l
-1433.75 6146.15 l
-1554.95 6153.35 l
-1516.55 6215.75 l
-1640.15 6198.95 l
-1655.75 6266.15 l
-1766.15 6224.15 l
-1838.15 6284.15 l
-1910.15 6224.15 l
-2019.35 6266.15 l
-2036.15 6198.95 l
-2159.75 6215.75 l
-2122.55 6153.35 l
-2242.55 6146.15 l
-2162.15 6098.15 l
-2271.35 6069.35 l
-2348.15 6069.35 l
-f*
-0.2 i
-1660.08 6120.76 m
-1640.08 6046.52 l
-1637.52 6037.88 1634.48 6035.64 1624.08 6035 c
-1624.08 6031 l
-1674 6031 l
-1674 6035 l
-1664.72 6035.48 1662.48 6036.76 1662.48 6041.88 c
-1662.48 6043.64 1662.8 6045.4 1663.76 6049.08 c
-1663.92 6049.88 l
-1664.08 6050.68 l
-1683.76 6122.52 l
-1686.16 6130.84 1688.56 6133.08 1696.72 6134.04 c
-1696.72 6138 l
-1662.8 6138 l
-1613.2 6061.24 l
-1604.56 6138 l
-1569.2 6138 l
-1569.2 6134 l
-1579.28 6133.52 1580.72 6132.89 1580.72 6128.44 c
-1580.72 6126.2 1580.08 6123.32 1578.96 6119.16 c
-1561.52 6059.48 l
-1555.12 6038.68 1554 6036.92 1545.36 6035 c
-1545.36 6031 l
-1578.48 6031 l
-1578.48 6035 l
-1568.24 6036.28 1565.68 6038.2 1565.68 6044.76 c
-1565.68 6047.48 1566.48 6051.48 1568.72 6059.48 c
-1584.88 6118.52 l
-1595.6 6029.08 l
-1600.08 6029.08 l
-h
-1692.24 6031 m
-f*
-1761.44 6051.32 m
-1754.88 6042.52 1752.48 6039.76 1749.92 6039.76 c
-1748.64 6039.76 1748 6040.86 1748 6042.52 c
-1748 6046.52 1749.44 6053.08 1753.44 6066.2 c
-1764.8 6103.96 l
-1747.04 6102.84 l
-1744.16 6093.4 l
-1742.72 6101.56 1739.2 6105.08 1732.32 6105.08 c
-1712.64 6105.08 1689 6074.27 1689 6049.24 c
-1689 6037.08 1695.74 6028.92 1705.92 6028.92 c
-1715.68 6028.92 1723.04 6034.68 1732.16 6050.04 c
-1730.24 6043.48 1730 6041.56 1730 6039.32 c
-1730 6033.4 1734.76 6028.76 1740.64 6028.76 c
-1748.16 6028.76 1755.52 6035 1764.8 6048.92 c
-h
-1734.56 6098.2 m
-1738.08 6097.88 1740.56 6095 1740.56 6090.68 c
-1740.56 6081.08 1735.24 6063.32 1728.96 6052.28 c
-1724.64 6044.44 1719.84 6039.92 1715.52 6039.92 c
-1711.36 6039.92 1708 6043.75 1708 6048.92 c
-1708 6057.24 1713.42 6073.24 1720.16 6085.08 c
-1724.96 6093.56 1730.24 6098.52 1734.56 6098.2 c
-h
-1772 6031 m
-f*
-1806.56 6104.92 m
-1790.24 6102.36 1784 6101.4 1775.68 6100.44 c
-1775.68 6096 l
-1782.88 6095.69 1784.32 6095.07 1784.32 6092.12 c
-1784.32 6090.52 1783.04 6084.76 1780.8 6076.44 c
-1764.8 6014.36 l
-1761.76 6003.8 1760.48 6002.84 1752.8 6003 c
-1752.8 5998 l
-1792.64 5998 l
-1792.64 6003 l
-1784.64 6003.14 1782.24 6004.16 1782.24 6007.64 c
-1782.24 6009.88 1783.36 6014.68 1786.4 6025.88 c
-1787.52 6029.72 1787.52 6030.04 1788.16 6032.44 c
-1793.76 6029.56 1795.68 6028.92 1799.04 6028.92 c
-1820.8 6028.92 1843.36 6057.88 1843.36 6085.56 c
-1843.36 6097.4 1836.64 6105.08 1826.08 6105.08 c
-1816.96 6105.08 1809.92 6099.92 1800.48 6086.52 c
-h
-1817.12 6093.56 m
-1821.28 6093.24 1823.68 6089.56 1823.36 6084.44 c
-1822.72 6073.88 1817.6 6058.04 1811.84 6047.64 c
-1806.88 6039 1801.76 6033.92 1796.32 6033.92 c
-1792.8 6033.92 1790.08 6036.75 1790.08 6040.28 c
-1790.08 6043 1791.84 6049.56 1796.16 6064.12 c
-1799.68 6075.8 1801.12 6079.8 1803.52 6083.48 c
-1807.52 6089.72 1812.96 6093.88 1817.12 6093.56 c
-h
-1852 6031 m
-f*
-1887.56 6104.92 m
-1871.24 6102.36 1865 6101.4 1856.68 6100.44 c
-1856.68 6096 l
-1863.88 6095.69 1865.32 6095.07 1865.32 6092.12 c
-1865.32 6090.52 1864.04 6084.76 1861.8 6076.44 c
-1845.8 6014.36 l
-1842.76 6003.8 1841.48 6002.84 1833.8 6003 c
-1833.8 5998 l
-1873.64 5998 l
-1873.64 6003 l
-1865.64 6003.14 1863.24 6004.16 1863.24 6007.64 c
-1863.24 6009.88 1864.36 6014.68 1867.4 6025.88 c
-1868.52 6029.72 1868.52 6030.04 1869.16 6032.44 c
-1874.76 6029.56 1876.68 6028.92 1880.04 6028.92 c
-1901.8 6028.92 1924.36 6057.88 1924.36 6085.56 c
-1924.36 6097.4 1917.64 6105.08 1907.08 6105.08 c
-1897.96 6105.08 1890.92 6099.92 1881.48 6086.52 c
-h
-1898.12 6093.56 m
-1902.28 6093.24 1904.68 6089.56 1904.36 6084.44 c
-1903.72 6073.88 1898.6 6058.04 1892.84 6047.64 c
-1887.88 6039 1882.76 6033.92 1877.32 6033.92 c
-1873.8 6033.92 1871.08 6036.75 1871.08 6040.28 c
-1871.08 6043 1872.84 6049.56 1877.16 6064.12 c
-1880.68 6075.8 1882.12 6079.8 1884.52 6083.48 c
-1888.52 6089.72 1893.96 6093.88 1898.12 6093.56 c
-h
-1933 6031 m
-f*
-1966.56 6053.56 m
-1964.32 6050.36 l
-1960.16 6044.12 1956.48 6040.56 1954.08 6040.56 c
-1952.8 6040.56 1952 6041.77 1952 6043.16 c
-1952 6044.6 1952.62 6048.76 1953.12 6051.48 c
-1967.68 6104.92 l
-1959.22 6103 1948.26 6101.4 1936.04 6100.44 c
-1936.04 6096 l
-1937.44 6096 l
-1942.24 6096 1945.48 6094.44 1945.48 6091.48 c
-1945.48 6090.2 1944.71 6087.8 1943.68 6085.08 c
-1934.4 6050.68 l
-1933.12 6046.04 1933 6041.88 1933 6039.64 c
-1933 6033.56 1937.2 6029.56 1943.36 6029.56 c
-1952.96 6029.56 1958.88 6034.36 1970.08 6051.32 c
-h
-1962.88 6140.4 m
-1957.44 6140.4 1953 6135.46 1953 6130.04 c
-1953 6123.8 1957.26 6119.4 1963.04 6119.4 c
-1969.12 6119.4 1974 6123.86 1974 6129.56 c
-1974 6135.48 1969 6140.4 1962.88 6140.4 c
-h
-1976.48 6031 m
-f*
-2051.36 6052.6 m
-2044.96 6042.68 2042.88 6040.56 2040.16 6040.56 c
-2038.88 6040.56 2038 6041.63 2038 6043.16 c
-2038 6044.76 2038.94 6048.12 2041.92 6057.08 c
-2047.68 6074.52 l
-2050.24 6082.04 2052 6089.08 2052 6092.92 c
-2052 6100.76 2047.78 6105.08 2040.16 6105.08 c
-2034.24 6105.08 2028.48 6102.62 2024.16 6098.36 c
-2018.24 6092.76 2015.2 6088.92 2004.48 6073.08 c
-2014.72 6104.76 l
-2004.48 6102.52 1991.68 6100.92 1982.72 6100.6 c
-1982.72 6095.8 l
-1989.44 6095.65 1991.36 6094.92 1991.36 6092.12 c
-1991.36 6090.2 1989.12 6081.72 1984 6063.64 c
-1980.32 6050.68 1979.2 6046.52 1975.04 6031 c
-1994.4 6031 l
-2001.92 6058.68 2007.68 6072.6 2017.6 6085.56 c
-2020.8 6089.88 2025.76 6093.08 2028.64 6093.08 c
-2030.72 6093.08 2033 6091.63 2033 6090.04 c
-2033 6089.56 2032.54 6088.28 2031.84 6086.68 c
-2023.04 6060.12 l
-2020.48 6052.44 2019 6043.32 2019 6039.16 c
-2019 6033.08 2022.84 6029.56 2029.44 6029.56 c
-2039.04 6029.56 2045.6 6035 2054.88 6050.52 c
-h
-2064.96 6031 m
-f*
-2142.48 6100 m
-2124.72 6100 l
-2119.28 6103.58 2114.48 6105.08 2107.12 6105.08 c
-2087.44 6105.08 2071 6092.05 2071 6075.8 c
-2071 6067.64 2075.35 6061.88 2084.4 6058.2 c
-2071.28 6050.84 2069 6048.6 2069 6042.68 c
-2069 6037.56 2071.89 6034.52 2078.96 6032.12 c
-2069.04 6029.72 2065.84 6028.44 2062 6025.4 c
-2059.44 6023.16 2058 6019.32 2058 6015.48 c
-2058 6005.08 2069.56 5999 2087.76 5999 c
-2110.32 5999 2126 6008.72 2126 6022.52 c
-2126 6032.28 2119.6 6037.56 2102.16 6042.52 c
-2093.68 6044.92 l
-2088.56 6046.36 2085 6048.6 2085 6051 c
-2085 6053.56 2087.68 6056.28 2090 6056.28 c
-2090.8 6056.28 2091.92 6056.24 2093.2 6056.12 c
-2094.96 6055.64 2096.24 6055 2098.16 6055 c
-2105.2 6055 2112.4 6057.09 2118.48 6060.92 c
-2127.76 6066.2 2133 6074.36 2133 6083.96 c
-2133 6086.64 2132.59 6088.32 2131.76 6091 c
-2142.48 6091 l
-h
-2084.4 6030.04 m
-2086.32 6029.88 2098.48 6025.72 2102 6024.12 c
-2106.48 6021.88 2109 6019.16 2109 6015 c
-2109 6007.96 2101.8 6004 2089.36 6004 c
-2078.96 6004 2072 6009.1 2072 6016.44 c
-2072 6019.48 2073.32 6022.2 2076.24 6025.24 c
-2078.32 6027.32 2083.12 6030.2 2084.4 6030.04 c
-h
-2106.8 6100.08 m
-2110.96 6100.08 2114 6096.19 2114 6090.52 c
-2114 6085.08 2112.08 6077.4 2109.36 6071.48 c
-2106 6064.12 2101.84 6060 2096.88 6060 c
-2092.56 6060 2090 6063.52 2090 6069.88 c
-2090 6076.28 2092.79 6086.04 2096.24 6092.12 c
-2099.28 6097.4 2102.64 6100.08 2106.8 6100.08 c
-h
-2146 6031 m
-f*
-1 i
-1 g
-3922.55 6609.35 m
-4088.15 6760.55 l
-4006.55 6760.55 l
-4006.55 6914.15 l
-3839.75 6914.15 l
-3839.75 6760.55 l
-3758.15 6760.55 l
-f*
-0 g
-3922.55 6609.35 m
-4088.15 6760.55 l
-4006.55 6760.55 l
-4006.55 6914.15 l
-3839.75 6914.15 l
-3839.75 6760.55 l
-3758.15 6760.55 l
-3922.55 6609.35 l
-3922.55 6623.75 l
-3783.35 6750.95 l
-3849.35 6750.95 l
-3849.35 6904.55 l
-3995.75 6904.55 l
-3995.75 6750.95 l
-4061.75 6750.95 l
-3922.55 6623.75 l
-3922.55 6609.35 l
-f*
-0.2 i
-3475.88 7147 m
-3475.88 7142 l
-3488.3 7141.29 3492 7138.45 3492 7129.4 c
-3492 7042.28 l
-3492 7033.1 3489.25 7030.94 3475.88 7029.5 c
-3475.88 7025 l
-3533.84 7025 l
-3564.26 7025 3584 7038.5 3584 7058.84 c
-3584 7067.12 3580.73 7074.32 3574.7 7079.9 c
-3568.4 7085.48 3562.28 7088 3549.68 7090.7 c
-3570.56 7096.82 3578 7104.2 3578 7117.88 c
-3578 7136.42 3561.55 7147 3531.5 7147 c
-h
-3521 7086.74 m
-3525.92 7086.74 l
-3544.46 7086.74 3553 7077.2 3553 7057.22 c
-3553 7039.76 3545.77 7031 3531.5 7031 c
-3523.58 7031 3521 7033.99 3521 7041.74 c
-h
-3521 7132.46 m
-3521 7138.94 3523.39 7142 3530.24 7142 c
-3542.84 7142 3549 7134.03 3549 7116.62 c
-3549 7097.72 3543.08 7092.68 3521 7092.14 c
-h
-3593.06 7025 m
-f*
-3678.14 7036.52 m
-3676.34 7034.72 l
-3675.8 7034.18 3675.26 7034 3674.36 7034 c
-3671.84 7034 3671 7035.44 3671 7038.5 c
-3671 7085.48 l
-3671 7100.78 3657.16 7110.16 3634.94 7110.16 c
-3614.6 7110.16 3600.92 7100.97 3600.92 7087.46 c
-3600.92 7079.9 3605.24 7075.58 3612.62 7075.58 c
-3619.82 7075.58 3624.86 7079.9 3624.86 7086.02 c
-3624.86 7088.54 3623.96 7090.88 3621.62 7093.76 c
-3620 7095.56 3619.46 7096.64 3619.46 7097.72 c
-3619.46 7101.5 3624.32 7104.16 3630.8 7104.16 c
-3641.42 7104.16 3646 7099.37 3646 7088.54 c
-3646 7075.4 l
-3624.89 7068.92 3616.41 7065.68 3609.56 7061.18 c
-3601.46 7055.78 3598 7049.48 3598 7041.56 c
-3598 7030.58 3606.07 7022.48 3617.3 7022.48 c
-3627.74 7022.48 3636.02 7026.08 3645.92 7035.08 c
-3647.9 7025.9 3651.86 7022.48 3660.68 7022.48 c
-3668.42 7022.48 3674 7025.36 3680.84 7032.74 c
-h
-3646 7043 m
-3641.04 7037.42 3637.37 7035.26 3632.96 7035.26 c
-3627.56 7035.26 3624 7040.12 3624 7047.32 c
-3624 7057.76 3631.57 7065.14 3646 7069.1 c
-h
-3683 7025 m
-f*
-3744.22 7083.68 m
-3744.22 7109.8 l
-3740.24 7109.8 l
-3739.16 7107.08 3738.08 7106.2 3735.74 7106.2 c
-3734.66 7106.2 3733.04 7106.55 3730.16 7107.44 c
-3724.4 7109.42 3720.26 7110.16 3716.12 7110.16 c
-3699.74 7110.16 3688 7098.99 3688 7083.86 c
-3688 7071.98 3695.34 7063.7 3713.42 7055.96 c
-3725.84 7050.56 3731 7046.06 3731 7040.3 c
-3731 7033.28 3725.48 7028.48 3717.2 7028.48 c
-3704.6 7028.48 3696.32 7036.62 3692.54 7052.36 c
-3687.5 7052.36 l
-3687.5 7022.66 l
-3692 7022.66 l
-3693.98 7026.44 3695.06 7027.7 3696.68 7027.7 c
-3697.58 7027.7 3699.02 7027.34 3700.82 7026.62 c
-3706.04 7024.46 3715.22 7022.48 3720.26 7022.48 c
-3736.64 7022.48 3748 7033.64 3748 7049.84 c
-3748 7062.62 3741.15 7070.54 3723.14 7077.92 c
-3710.9 7083.14 3706 7087.64 3706 7093.76 c
-3706 7099.7 3710.98 7104.16 3717.74 7104.16 c
-3722.6 7104.16 3727.28 7102.19 3731.24 7098.44 c
-3735.02 7094.84 3737 7091.42 3739.7 7083.68 c
-h
-3753.02 7025 m
-f*
-3824.36 7047.5 m
-3816.98 7038.68 3811.58 7035.48 3803.84 7035.48 c
-3797 7035.48 3791.6 7038.53 3788 7044.62 c
-3784.58 7050.36 3783.14 7056.45 3782.42 7069 c
-3827.78 7069 l
-3826.7 7083.99 3824 7092.3 3818.42 7099.34 c
-3812.66 7106.36 3804.2 7110.16 3794.12 7110.16 c
-3771.62 7110.16 3756.5 7092.33 3756.5 7066.04 c
-3756.5 7039.76 3771.26 7022.48 3793.58 7022.48 c
-3808.16 7022.48 3816.98 7028.06 3828.68 7044.98 c
-h
-3781.52 7076 m
-3782.06 7097.42 3785.3 7104.16 3794.12 7104.16 c
-3799.34 7104.16 3802.58 7101.42 3804.02 7096.1 c
-3804.92 7092.68 3805.28 7087.64 3805.64 7078.46 c
-3805.64 7076 l
-h
-3831.92 7025 m
-f*
-3878 7025 m
-f*
-3981.94 7147 m
-3879.88 7147 l
-3879.88 7142 l
-3892.3 7141.29 3896 7138.63 3896 7129.4 c
-3896 7042.28 l
-3896 7032.92 3893.44 7030.94 3879.88 7029.5 c
-3879.88 7025 l
-3944.68 7025 l
-3944.68 7030 l
-3928.12 7030.69 3925 7032.77 3925 7042.28 c
-3925 7084.22 l
-3943.28 7083.86 3949.91 7077.2 3952.42 7056.32 c
-3956.92 7056.32 l
-3956.92 7117.16 l
-3952.42 7117.16 l
-3949.19 7096.64 3942.92 7090.34 3925 7090.34 c
-3925 7132.1 l
-3925 7138.76 3927.32 7141 3936.4 7141 c
-3953.14 7141 3963.58 7137.8 3969.16 7131.2 c
-3973.12 7126.7 3975.1 7121.84 3977.62 7110.5 c
-3981.94 7110.5 l
-h
-3986.98 7025 m
-f*
-4026.28 7108 m
-3992.22 7108 l
-3992.22 7103.66 l
-3999.96 7102.58 4002 7100.24 4002 7093.04 c
-4002 7040.12 l
-4002 7032.74 4000.19 7030.76 3992.22 7029.32 c
-3992.22 7025 l
-4040.1 7025 l
-4040.1 7029.32 l
-4029.12 7030.04 4027 7032.38 4027 7043.54 c
-4027 7077.56 l
-4027 7086.92 4032.02 7094.66 4037.94 7094.66 c
-4039.38 7094.66 4041 7093.4 4042.98 7090.52 c
-4046.4 7085.66 4049.1 7084.04 4053.78 7084.04 c
-4060.44 7084.04 4065.12 7089.08 4065.12 7095.92 c
-4065.12 7104.2 4059 7110.16 4050.54 7110.16 c
-4041.55 7110.16 4034.73 7105.47 4026.28 7093.22 c
-h
-4066.92 7025 m
-f*
-4153.14 7036.52 m
-4151.34 7034.72 l
-4150.8 7034.18 4150.26 7034 4149.36 7034 c
-4146.84 7034 4146 7035.44 4146 7038.5 c
-4146 7085.48 l
-4146 7100.78 4132.16 7110.16 4109.94 7110.16 c
-4089.6 7110.16 4075.92 7100.97 4075.92 7087.46 c
-4075.92 7079.9 4080.24 7075.58 4087.62 7075.58 c
-4094.82 7075.58 4099.86 7079.9 4099.86 7086.02 c
-4099.86 7088.54 4098.96 7090.88 4096.62 7093.76 c
-4095 7095.56 4094.46 7096.64 4094.46 7097.72 c
-4094.46 7101.5 4099.32 7104.16 4105.8 7104.16 c
-4116.42 7104.16 4121 7099.37 4121 7088.54 c
-4121 7075.4 l
-4099.89 7068.92 4091.41 7065.68 4084.56 7061.18 c
-4076.46 7055.78 4073 7049.48 4073 7041.56 c
-4073 7030.58 4081.07 7022.48 4092.3 7022.48 c
-4102.74 7022.48 4111.02 7026.08 4120.92 7035.08 c
-4122.9 7025.9 4126.86 7022.48 4135.68 7022.48 c
-4143.42 7022.48 4149 7025.36 4155.84 7032.74 c
-h
-4121 7043 m
-4116.04 7037.42 4112.37 7035.26 4107.96 7035.26 c
-4102.56 7035.26 4099 7040.12 4099 7047.32 c
-4099 7057.76 4106.57 7065.14 4121 7069.1 c
-h
-4158 7025 m
-f*
-4195.46 7108 m
-4160.73 7108 l
-4160.73 7103.66 l
-4168.65 7102.58 4171 7100.42 4171 7093.04 c
-4171 7040.12 l
-4171 7032.74 4168.95 7030.76 4160.73 7029.32 c
-4160.73 7025 l
-4203.93 7025 l
-4203.93 7029.32 l
-4197.63 7030.22 4196 7032.74 4196 7039.58 c
-4196 7087.64 l
-4196 7088.54 4198.51 7091.78 4200.51 7093.76 c
-4204.29 7096.64 4207.53 7098.16 4210.77 7098.16 c
-4217.79 7098.16 4221 7094 4221 7083.14 c
-4221 7039.58 l
-4221 7032.2 4218.9 7029.86 4211.85 7029.32 c
-4211.85 7025 l
-4253.97 7025 l
-4253.97 7029.32 l
-4247.67 7030.04 4246 7032.74 4246 7039.58 c
-4246 7087.64 l
-4246 7088.54 4248.43 7091.6 4250.37 7093.58 c
-4254.33 7096.64 4257.57 7098.16 4260.81 7098.16 c
-4267.65 7098.16 4270 7093.82 4270 7083.14 c
-4270 7039.58 l
-4270 7032.02 4268.1 7029.86 4261.53 7029.32 c
-4261.53 7025 l
-4304.37 7025 l
-4304.37 7029 l
-4297.35 7029.37 4295 7031.6 4295 7039.58 c
-4295 7084.76 l
-4295 7100.24 4285.6 7110.16 4271.07 7110.16 c
-4260.81 7110.16 4253.97 7106.01 4244.61 7094.48 c
-4239.21 7105.82 4232.91 7110.16 4221.57 7110.16 c
-4210.2 7110.16 4202.21 7105.29 4195.46 7094.48 c
-h
-4307.94 7025 m
-f*
-4380.36 7047.5 m
-4372.98 7038.68 4367.58 7035.48 4359.84 7035.48 c
-4353 7035.48 4347.6 7038.53 4344 7044.62 c
-4340.58 7050.36 4339.14 7056.45 4338.42 7069 c
-4383.78 7069 l
-4382.7 7083.99 4380 7092.3 4374.42 7099.34 c
-4368.66 7106.36 4360.2 7110.16 4350.12 7110.16 c
-4327.62 7110.16 4312.5 7092.33 4312.5 7066.04 c
-4312.5 7039.76 4327.26 7022.48 4349.58 7022.48 c
-4364.16 7022.48 4372.98 7028.06 4384.68 7044.98 c
-h
-4337.52 7076 m
-4338.06 7097.42 4341.3 7104.16 4350.12 7104.16 c
-4355.34 7104.16 4358.58 7101.42 4360.02 7096.1 c
-4360.92 7092.68 4361.28 7087.64 4361.64 7078.46 c
-4361.64 7076 l
-h
-4387.92 7025 m
-f*
-1 i
-3472.55 6989.75 914.4 15.5999 re
-f
-0.2 i
-2524.26 4716.36 m
-2513.64 4705.2 2507.88 4700.88 2499.06 4697.46 c
-2493.84 4695.3 2487.9 4694.58 2482.86 4694.58 c
-2470.98 4694.58 2459.64 4700.74 2454.42 4709.88 c
-2449.2 4719.42 2447 4732.2 2447 4750.38 c
-2447 4787.64 2458.23 4807.7 2479.8 4807.7 c
-2488.26 4807.7 2496 4804.38 2503.74 4797.36 c
-2511.48 4790.52 2515.62 4784.4 2521.92 4770.72 c
-2526.42 4770.72 l
-2526.42 4813.16 l
-2521.56 4813.16 l
-2518.86 4806.43 2517.06 4804.56 2513.64 4804.56 c
-2511.84 4804.56 2509.5 4805.28 2505.36 4807.08 c
-2494.92 4811.4 2486.1 4813.7 2477.46 4813.7 c
-2441.64 4813.7 2415 4785.84 2415 4748.76 c
-2415 4711.68 2441.21 4685.58 2478.54 4685.58 c
-2499.24 4685.58 2511.48 4691.88 2529.66 4711.86 c
-h
-2535.96 4689 m
-f*
-2599.18 4686.66 m
-2606.78 4689.36 2611.02 4690.08 2622.5 4691.34 c
-2633.66 4692.6 l
-2633.66 4697 l
-2625.74 4697.35 2624 4699.63 2624 4707.18 c
-2624 4772 l
-2587.4 4772 l
-2587.4 4767.66 l
-2596.4 4766.94 2599 4764.78 2599 4757.04 c
-2599 4706.1 l
-2592.88 4700.16 2589.18 4698.48 2583.8 4698.48 c
-2576.42 4698.48 2574 4702 2574 4710.96 c
-2574 4772 l
-2539.88 4772 l
-2539.88 4767.66 l
-2547.26 4766.22 2549 4764.6 2549 4757.04 c
-2549 4711.68 l
-2549 4695.84 2557.89 4686.48 2572.64 4686.48 c
-2582.16 4686.48 2588.56 4689.36 2599.18 4698.36 c
-h
-2637.08 4689 m
-f*
-2675.28 4772 m
-2641.22 4772 l
-2641.22 4767.66 l
-2648.96 4766.58 2651 4764.24 2651 4757.04 c
-2651 4704.12 l
-2651 4696.74 2649.19 4694.76 2641.22 4693.32 c
-2641.22 4689 l
-2689.1 4689 l
-2689.1 4693.32 l
-2678.12 4694.04 2676 4696.38 2676 4707.54 c
-2676 4741.56 l
-2676 4750.92 2681.02 4758.66 2686.94 4758.66 c
-2688.38 4758.66 2690 4757.4 2691.98 4754.52 c
-2695.4 4749.66 2698.1 4748.04 2702.78 4748.04 c
-2709.44 4748.04 2714.12 4753.08 2714.12 4759.92 c
-2714.12 4768.2 2708 4774.16 2699.54 4774.16 c
-2690.55 4774.16 2683.73 4769.47 2675.28 4757.22 c
-h
-2715.92 4689 m
-f*
-2756.28 4772 m
-2722.22 4772 l
-2722.22 4767.66 l
-2729.96 4766.58 2732 4764.24 2732 4757.04 c
-2732 4704.12 l
-2732 4696.74 2730.19 4694.76 2722.22 4693.32 c
-2722.22 4689 l
-2770.1 4689 l
-2770.1 4693.32 l
-2759.12 4694.04 2757 4696.38 2757 4707.54 c
-2757 4741.56 l
-2757 4750.92 2762.02 4758.66 2767.94 4758.66 c
-2769.38 4758.66 2771 4757.4 2772.98 4754.52 c
-2776.4 4749.66 2779.1 4748.04 2783.78 4748.04 c
-2790.44 4748.04 2795.12 4753.08 2795.12 4759.92 c
-2795.12 4768.2 2789 4774.16 2780.54 4774.16 c
-2771.55 4774.16 2764.73 4769.47 2756.28 4757.22 c
-h
-2796.92 4689 m
-f*
-2868.36 4711.5 m
-2860.98 4702.68 2855.58 4699.48 2847.84 4699.48 c
-2841 4699.48 2835.6 4702.53 2832 4708.62 c
-2828.58 4714.36 2827.14 4720.45 2826.42 4733 c
-2871.78 4733 l
-2870.7 4747.99 2868 4756.3 2862.42 4763.34 c
-2856.66 4770.36 2848.2 4774.16 2838.12 4774.16 c
-2815.62 4774.16 2800.5 4756.33 2800.5 4730.04 c
-2800.5 4703.76 2815.26 4686.48 2837.58 4686.48 c
-2852.16 4686.48 2860.98 4692.06 2872.68 4708.98 c
-h
-2825.52 4740 m
-2826.06 4761.42 2829.3 4768.16 2838.12 4768.16 c
-2843.34 4768.16 2846.58 4765.42 2848.02 4760.1 c
-2848.92 4756.68 2849.28 4751.64 2849.64 4742.46 c
-2849.64 4740 l
-h
-2875.92 4689 m
-f*
-2913.82 4772 m
-2879.78 4772 l
-2879.78 4767.66 l
-2887.7 4766.4 2889 4764.6 2889 4757.04 c
-2889 4704.12 l
-2889 4696.56 2887.61 4694.94 2879.78 4693.32 c
-2879.78 4689 l
-2923.16 4689 l
-2923.16 4693.32 l
-2916.5 4694.22 2914 4696.92 2914 4703.58 c
-2914 4751.64 l
-2914 4752.36 2915.4 4754.16 2917.4 4755.96 c
-2921.36 4759.92 2925.68 4762.16 2930 4762.16 c
-2936.12 4762.16 2939 4757.27 2939 4747.14 c
-2939 4703.58 l
-2939 4696.92 2936.71 4694.04 2930.72 4693.32 c
-2930.72 4689 l
-2973.02 4689 l
-2973.02 4693.32 l
-2966 4693.86 2964 4696.02 2964 4703.58 c
-2964 4748.76 l
-2964 4764.24 2954.54 4774.16 2939.9 4774.16 c
-2928.96 4774.16 2920.57 4769.11 2913.82 4758.48 c
-h
-2976.08 4689 m
-f*
-3030.9 4772 m
-3014 4772 l
-3014 4802.4 l
-3009.48 4802.4 l
-2998.5 4786.92 2991.3 4778.82 2979.6 4768.92 c
-2979.6 4764 l
-2989 4764 l
-2989 4705.74 l
-2989 4694.04 2996.73 4686.84 3009.12 4686.84 c
-3021.18 4686.84 3028.38 4692.24 3035.76 4707 c
-3031.26 4708.98 l
-3027.66 4702.14 3024.78 4699.84 3021 4699.84 c
-3015.96 4699.84 3014 4702.83 3014 4709.88 c
-3014 4764 l
-3030.9 4764 l
-h
-3035.94 4689 m
-f*
-3081 4689 m
-f*
-3185.94 4811 m
-3083.88 4811 l
-3083.88 4806 l
-3096.3 4805.29 3100 4802.63 3100 4793.4 c
-3100 4706.28 l
-3100 4696.92 3097.44 4694.94 3083.88 4693.5 c
-3083.88 4689 l
-3148.68 4689 l
-3148.68 4694 l
-3132.12 4694.69 3129 4696.77 3129 4706.28 c
-3129 4748.22 l
-3147.28 4747.86 3153.91 4741.2 3156.42 4720.32 c
-3160.92 4720.32 l
-3160.92 4781.16 l
-3156.42 4781.16 l
-3153.19 4760.64 3146.92 4754.34 3129 4754.34 c
-3129 4796.1 l
-3129 4802.76 3131.32 4805 3140.4 4805 c
-3157.14 4805 3167.58 4801.8 3173.16 4795.2 c
-3177.12 4790.7 3179.1 4785.84 3181.62 4774.5 c
-3185.94 4774.5 l
-h
-3190.98 4689 m
-f*
-3230.28 4772 m
-3196.22 4772 l
-3196.22 4767.66 l
-3203.96 4766.58 3206 4764.24 3206 4757.04 c
-3206 4704.12 l
-3206 4696.74 3204.19 4694.76 3196.22 4693.32 c
-3196.22 4689 l
-3244.1 4689 l
-3244.1 4693.32 l
-3233.12 4694.04 3231 4696.38 3231 4707.54 c
-3231 4741.56 l
-3231 4750.92 3236.02 4758.66 3241.94 4758.66 c
-3243.38 4758.66 3245 4757.4 3246.98 4754.52 c
-3250.4 4749.66 3253.1 4748.04 3257.78 4748.04 c
-3264.44 4748.04 3269.12 4753.08 3269.12 4759.92 c
-3269.12 4768.2 3263 4774.16 3254.54 4774.16 c
-3245.55 4774.16 3238.73 4769.47 3230.28 4757.22 c
-h
-3270.92 4689 m
-f*
-3356.14 4700.52 m
-3354.34 4698.72 l
-3353.8 4698.18 3353.26 4698 3352.36 4698 c
-3349.84 4698 3349 4699.44 3349 4702.5 c
-3349 4749.48 l
-3349 4764.78 3335.16 4774.16 3312.94 4774.16 c
-3292.6 4774.16 3278.92 4764.97 3278.92 4751.46 c
-3278.92 4743.9 3283.24 4739.58 3290.62 4739.58 c
-3297.82 4739.58 3302.86 4743.9 3302.86 4750.02 c
-3302.86 4752.54 3301.96 4754.88 3299.62 4757.76 c
-3298 4759.56 3297.46 4760.64 3297.46 4761.72 c
-3297.46 4765.5 3302.32 4768.16 3308.8 4768.16 c
-3319.42 4768.16 3324 4763.37 3324 4752.54 c
-3324 4739.4 l
-3302.89 4732.92 3294.41 4729.68 3287.56 4725.18 c
-3279.46 4719.78 3276 4713.48 3276 4705.56 c
-3276 4694.58 3284.07 4686.48 3295.3 4686.48 c
-3305.74 4686.48 3314.02 4690.08 3323.92 4699.08 c
-3325.9 4689.9 3329.86 4686.48 3338.68 4686.48 c
-3346.42 4686.48 3352 4689.36 3358.84 4696.74 c
-h
-3324 4707 m
-3319.04 4701.42 3315.37 4699.26 3310.96 4699.26 c
-3305.56 4699.26 3302 4704.12 3302 4711.32 c
-3302 4721.76 3309.57 4729.14 3324 4733.1 c
-h
-3361 4689 m
-f*
-3398.46 4772 m
-3363.73 4772 l
-3363.73 4767.66 l
-3371.65 4766.58 3374 4764.42 3374 4757.04 c
-3374 4704.12 l
-3374 4696.74 3371.95 4694.76 3363.73 4693.32 c
-3363.73 4689 l
-3406.93 4689 l
-3406.93 4693.32 l
-3400.63 4694.22 3399 4696.74 3399 4703.58 c
-3399 4751.64 l
-3399 4752.54 3401.51 4755.78 3403.51 4757.76 c
-3407.29 4760.64 3410.53 4762.16 3413.77 4762.16 c
-3420.79 4762.16 3424 4758 3424 4747.14 c
-3424 4703.58 l
-3424 4696.2 3421.9 4693.86 3414.85 4693.32 c
-3414.85 4689 l
-3456.97 4689 l
-3456.97 4693.32 l
-3450.67 4694.04 3449 4696.74 3449 4703.58 c
-3449 4751.64 l
-3449 4752.54 3451.43 4755.6 3453.37 4757.58 c
-3457.33 4760.64 3460.57 4762.16 3463.81 4762.16 c
-3470.65 4762.16 3473 4757.82 3473 4747.14 c
-3473 4703.58 l
-3473 4696.02 3471.1 4693.86 3464.53 4693.32 c
-3464.53 4689 l
-3507.37 4689 l
-3507.37 4693 l
-3500.35 4693.37 3498 4695.6 3498 4703.58 c
-3498 4748.76 l
-3498 4764.24 3488.6 4774.16 3474.07 4774.16 c
-3463.81 4774.16 3456.97 4770.01 3447.61 4758.48 c
-3442.21 4769.82 3435.91 4774.16 3424.57 4774.16 c
-3413.2 4774.16 3405.21 4769.29 3398.46 4758.48 c
-h
-3510.94 4689 m
-f*
-3583.36 4711.5 m
-3575.98 4702.68 3570.58 4699.48 3562.84 4699.48 c
-3556 4699.48 3550.6 4702.53 3547 4708.62 c
-3543.58 4714.36 3542.14 4720.45 3541.42 4733 c
-3586.78 4733 l
-3585.7 4747.99 3583 4756.3 3577.42 4763.34 c
-3571.66 4770.36 3563.2 4774.16 3553.12 4774.16 c
-3530.62 4774.16 3515.5 4756.33 3515.5 4730.04 c
-3515.5 4703.76 3530.26 4686.48 3552.58 4686.48 c
-3567.16 4686.48 3575.98 4692.06 3587.68 4708.98 c
-h
-3540.52 4740 m
-3541.06 4761.42 3544.3 4768.16 3553.12 4768.16 c
-3558.34 4768.16 3561.58 4765.42 3563.02 4760.1 c
-3563.92 4756.68 3564.28 4751.64 3564.64 4742.46 c
-3564.64 4740 l
-h
-3590.92 4689 m
-f*
-1 i
-2405.75 4654.55 1184.4 15.5999 re
-f
-1 g
-3014.15 4881.35 m
-3178.55 5032.55 l
-3095.75 5032.55 l
-3095.75 5186.15 l
-2930.15 5186.15 l
-2930.15 5032.55 l
-2847.35 5032.55 l
-f*
-0 g
-3014.15 4881.35 m
-3178.55 5032.55 l
-3095.75 5032.55 l
-3095.75 5186.15 l
-2930.15 5186.15 l
-2930.15 5032.55 l
-2847.35 5032.55 l
-3014.15 4881.35 l
-3014.15 4894.55 l
-2873.75 5021.75 l
-2939.75 5021.75 l
-2939.75 5176.55 l
-3086.15 5176.55 l
-3086.15 5021.75 l
-3152.15 5021.75 l
-3014.15 4894.55 l
-3014.15 4881.35 l
-f*
-0.564706 g
-2922.95 3375.35 m
-2922.95 3485.75 2831.75 3576.95 2720.15 3576.95 c
-2223.35 3576.95 l
-2111.75 3576.95 2020.55 3485.75 2020.55 3375.35 c
-2020.55 3237.35 l
-2020.55 3126.95 2111.75 3035.75 2223.35 3035.75 c
-2720.15 3035.75 l
-2831.75 3035.75 2922.95 3126.95 2922.95 3237.35 c
-f*
-1 g
-2858.15 3432.95 m
-2858.15 3542.15 2769.35 3630.95 2657.75 3630.95 c
-2166.95 3630.95 l
-2056.55 3630.95 1966.55 3542.15 1966.55 3432.95 c
-1966.55 3298.55 l
-1966.55 3189.35 2055.35 3100.55 2166.95 3100.55 c
-2657.75 3100.55 l
-2769.35 3100.55 2858.15 3189.35 2858.15 3298.55 c
-f*
-0 g
-2858.15 3432.95 m
-2858.15 3542.15 2769.35 3630.95 2657.75 3630.95 c
-2166.95 3630.95 l
-2056.55 3630.95 1966.55 3542.15 1966.55 3432.95 c
-1966.55 3298.55 l
-1966.55 3189.35 2055.35 3100.55 2166.95 3100.55 c
-2657.75 3100.55 l
-2769.35 3100.55 2858.15 3189.35 2858.15 3298.55 c
-h
-S
-0.201248 i
-2199.33 3472 m
-2085.22 3472 l
-2085.22 3467 l
-2099.11 3466.2 2103 3463.18 2103 3452.72 c
-2103 3355.32 l
-2103 3344.85 2100.17 3342.64 2085.22 3341.03 c
-2085.22 3336 l
-2157.67 3336 l
-2157.67 3341 l
-2139.15 3341.81 2136 3344.23 2136 3355.32 c
-2136 3402.21 l
-2156.22 3401.81 2163.55 3394.36 2166.32 3371.02 c
-2171.35 3371.02 l
-2171.35 3439.04 l
-2166.32 3439.04 l
-2162.76 3416.1 2155.82 3409.05 2136 3409.05 c
-2136 3455.74 l
-2136 3463.19 2138.52 3465 2148.41 3465 c
-2167.13 3465 2178.8 3461.64 2185.04 3454.74 c
-2189.47 3449.71 2191.68 3444.27 2194.5 3431.59 c
-2199.33 3431.59 l
-h
-2204.96 3336 m
-f*
-2249.19 3429 m
-2210.84 3429 l
-2210.84 3423.95 l
-2219.49 3422.74 2222 3420.12 2222 3412.07 c
-2222 3352.9 l
-2222 3344.65 2219.93 3342.44 2210.84 3340.83 c
-2210.84 3336 l
-2264.37 3336 l
-2264.37 3340.83 l
-2252.09 3341.63 2250 3344.25 2250 3356.73 c
-2250 3394.76 l
-2250 3405.23 2255.49 3413.88 2261.95 3413.88 c
-2263.56 3413.88 2265.37 3412.47 2267.59 3409.25 c
-2271.41 3403.82 2274.43 3402.01 2279.66 3402.01 c
-2287.11 3402.01 2292.34 3407.64 2292.34 3415.29 c
-2292.34 3424.55 2285.5 3431.41 2276.04 3431.41 c
-2266.1 3431.41 2258.54 3426.12 2249.19 3412.27 c
-h
-2294.35 3336 m
-f*
-2389.19 3348.88 m
-2387.18 3346.87 l
-2386.57 3346.26 2385.97 3346.06 2384.96 3346.06 c
-2382.15 3346.06 2381 3347.67 2381 3351.09 c
-2381 3403.62 l
-2381 3420.73 2365.6 3431.42 2340.89 3431.42 c
-2318.15 3431.42 2302.85 3421.06 2302.85 3405.83 c
-2302.85 3397.38 2307.69 3392.55 2315.94 3392.55 c
-2323.99 3392.55 2329.62 3397.38 2329.62 3404.22 c
-2329.62 3407.04 2328.61 3409.66 2326 3412.88 c
-2324.19 3414.89 2323.58 3416.1 2323.58 3417.3 c
-2323.58 3421.53 2329.02 3424.42 2336.26 3424.42 c
-2348.14 3424.42 2353.86 3419.08 2353.86 3407.04 c
-2353.86 3392.35 l
-2329.91 3385.1 2320.29 3381.48 2312.51 3376.45 c
-2303.46 3370.41 2299 3363.37 2299 3354.52 c
-2299 3342.24 2308.27 3333.18 2321.17 3333.18 c
-2332.84 3333.18 2342.1 3337.21 2353.17 3347.27 c
-2355.38 3337.01 2359.81 3333.18 2369.67 3333.18 c
-2378.32 3333.18 2384.56 3336.4 2392.21 3344.65 c
-h
-2353 3356.13 m
-2347.55 3349.89 2343.52 3347.47 2338.68 3347.47 c
-2332.64 3347.47 2328 3352.91 2328 3360.96 c
-2328 3372.63 2336.61 3380.88 2353 3385.31 c
-h
-2394.62 3336 m
-f*
-2436.4 3429 m
-2397.7 3429 l
-2397.7 3423.95 l
-2406.55 3422.74 2409 3420.32 2409 3412.07 c
-2409 3352.9 l
-2409 3344.65 2406.74 3342.44 2397.7 3340.83 c
-2397.7 3336 l
-2446 3336 l
-2446 3340.83 l
-2438.95 3341.84 2437 3344.65 2437 3352.3 c
-2437 3406.03 l
-2437 3407.04 2439.87 3410.66 2442.18 3412.88 c
-2446.4 3416.1 2450.02 3418.42 2453.65 3418.42 c
-2461.5 3418.42 2465 3413.59 2465 3401 c
-2465 3352.3 l
-2465 3344.05 2462.68 3341.43 2454.85 3340.83 c
-2454.85 3336 l
-2501.95 3336 l
-2501.95 3340.83 l
-2494.9 3341.64 2493 3344.65 2493 3352.3 c
-2493 3406.03 l
-2493 3407.04 2495.73 3410.46 2497.92 3412.68 c
-2502.35 3416.1 2505.97 3418.42 2509.59 3418.42 c
-2517.24 3418.42 2520 3413.38 2520 3401 c
-2520 3352.3 l
-2520 3343.85 2517.85 3341.43 2510.4 3340.83 c
-2510.4 3336 l
-2558.3 3336 l
-2558.3 3341 l
-2550.45 3341.4 2548 3343.78 2548 3352.3 c
-2548 3402.81 l
-2548 3420.12 2537.43 3431.42 2521.07 3431.42 c
-2509.59 3431.42 2501.95 3426.73 2491.48 3413.68 c
-2485.44 3426.36 2478.4 3431.42 2465.72 3431.42 c
-2452.95 3431.42 2443.98 3425.91 2436.4 3413.68 c
-h
-2561.64 3336 m
-f*
-2639.9 3361.16 m
-2631.65 3351.29 2625.61 3347.18 2616.96 3347.18 c
-2609.31 3347.18 2603.27 3350.77 2599.25 3357.94 c
-2595.43 3364.54 2593.82 3371.56 2593.01 3386 c
-2643.73 3386 l
-2642.52 3402.36 2639.5 3411.43 2633.26 3419.12 c
-2626.82 3426.96 2617.36 3431.42 2606.09 3431.42 c
-2580.94 3431.42 2564.03 3411.4 2564.03 3381.88 c
-2564.03 3352.5 2580.53 3333.18 2605.49 3333.18 c
-2621.79 3333.18 2631.65 3339.42 2644.73 3358.34 c
-h
-2592 3393 m
-2592.61 3416.96 2596.23 3424.42 2606.09 3424.42 c
-2611.93 3424.42 2615.55 3421.38 2617.16 3415.49 c
-2618.17 3411.67 2618.57 3406.03 2618.97 3395.77 c
-2618.97 3393 l
-h
-2648.35 3336 m
-f*
-q[1 0 0 1 0 0]concat
-66 97 true[1 0 0 1 -2684 -3336]@85 imagemask
-z"98D:z
-!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z
-"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$
-s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!
-s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!
-s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7++O=k"98D:!"XS[!!E9$
-^]4n\!!!-$s1eU>huE`Zs8Tk7"7Q9j"98D:!!D]j!!E9$^]4E1!!!-$s1eU7qu?^!s8Tk7!;lfs"98D:!!%HJ!!E9$
-^]4@!!!!-$s1eU75C`_9s8Tk7!$?^k"98D:!!!PF!!E9$^]4?FhuElZs1eU7#Oh]qs8Tk7!!D]j"98D:
-!!!,r!!E9$^]4?8qu?j!s1eU7!;lg!s8Tk7!!%HJ"98D:!!!"K!!E9$^]4?75C`k9s1eU7!$?^ns8Tk7
-!!"+V"98D:!!!!0huj#Z^]4?7#N,^as1eU7!!D]ms8Tk7!!!,r"98D:!!!!"qud!!^]4?7!;ls!s1eU7!!%HMs8Tk7
-!!!"K"98D:z56Lrc^]4?7!$?jns1eU7!!!PIs8Tk7!!!!0j8].pz#NPja^]4?7!!Dims1eU7
-!!!&ss8Tk7!!!!"qu?]3z!<<*!^]4?7!!%NKs1eU7!!!!`s8Tk7z5QCc!z!$D7@^]4?7
-!!!Q0s1eU7!!!!(s8Tk7z#QOh>z!!E9$^]4?7!!!'"s1eU7zs8Tk7z!<<)7z!!%NK^]4?7
-!!!!`s1eU7z+90+Vz!$D6Vz!!!Q0^]4?7!!!!(s1eU7z"96.:z!!E8:!!~>
-Q
-1 i
-0.564706 g
-5322.95 3054.95 m
-5322.95 3166.55 5231.75 3257.75 5120.15 3257.75 c
-4623.35 3257.75 l
-4511.75 3257.75 4420.55 3166.55 4420.55 3054.95 c
-4420.55 2918.15 l
-4420.55 2806.55 4511.75 2715.35 4623.35 2715.35 c
-5120.15 2715.35 l
-5231.75 2715.35 5322.95 2806.55 5322.95 2918.15 c
-f*
-1 g
-5253.35 3111.35 m
-5253.35 3219.35 5164.55 3306.95 5055.35 3306.95 c
-4569.35 3306.95 l
-4460.15 3306.95 4371.35 3219.35 4371.35 3111.35 c
-4371.35 2980.55 l
-4371.35 2872.55 4460.15 2784.95 4569.35 2784.95 c
-5055.35 2784.95 l
-5164.55 2784.95 5253.35 2872.55 5253.35 2980.55 c
-f*
-16 w
-0 g
-5253.35 3111.35 m
-5253.35 3219.35 5164.55 3306.95 5055.35 3306.95 c
-4569.35 3306.95 l
-4460.15 3306.95 4371.35 3219.35 4371.35 3111.35 c
-4371.35 2980.55 l
-4371.35 2872.55 4460.15 2784.95 4569.35 2784.95 c
-5055.35 2784.95 l
-5164.55 2784.95 5253.35 2872.55 5253.35 2980.55 c
-h
-S
-0.201248 i
-4599.33 3153 m
-4485.22 3153 l
-4485.22 3148 l
-4499.11 3147.2 4503 3144.18 4503 3133.72 c
-4503 3036.32 l
-4503 3025.85 4500.17 3023.64 4485.22 3022.03 c
-4485.22 3017 l
-4557.67 3017 l
-4557.67 3022 l
-4539.15 3022.81 4536 3025.23 4536 3036.32 c
-4536 3083.21 l
-4556.22 3082.81 4563.55 3075.36 4566.32 3052.02 c
-4571.35 3052.02 l
-4571.35 3120.04 l
-4566.32 3120.04 l
-4562.76 3097.1 4555.82 3090.05 4536 3090.05 c
-4536 3136.74 l
-4536 3144.19 4538.52 3146 4548.41 3146 c
-4567.13 3146 4578.8 3142.64 4585.04 3135.74 c
-4589.47 3130.71 4591.68 3125.27 4594.5 3112.59 c
-4599.33 3112.59 l
-h
-4604.96 3017 m
-f*
-4649.19 3110 m
-4610.84 3110 l
-4610.84 3104.95 l
-4619.49 3103.74 4622 3101.12 4622 3093.07 c
-4622 3033.9 l
-4622 3025.65 4619.93 3023.44 4610.84 3021.83 c
-4610.84 3017 l
-4664.37 3017 l
-4664.37 3021.83 l
-4652.09 3022.63 4650 3025.25 4650 3037.73 c
-4650 3075.76 l
-4650 3086.23 4655.49 3094.88 4661.95 3094.88 c
-4663.56 3094.88 4665.37 3093.47 4667.59 3090.25 c
-4671.41 3084.82 4674.43 3083.01 4679.66 3083.01 c
-4687.11 3083.01 4692.34 3088.64 4692.34 3096.29 c
-4692.34 3105.55 4685.5 3112.41 4676.04 3112.41 c
-4666.1 3112.41 4658.54 3107.12 4649.19 3093.27 c
-h
-4694.35 3017 m
-f*
-4789.19 3029.88 m
-4787.18 3027.87 l
-4786.57 3027.26 4785.97 3027.06 4784.96 3027.06 c
-4782.15 3027.06 4781 3028.67 4781 3032.09 c
-4781 3084.62 l
-4781 3101.73 4765.6 3112.42 4740.89 3112.42 c
-4718.15 3112.42 4702.85 3102.06 4702.85 3086.83 c
-4702.85 3078.38 4707.69 3073.55 4715.94 3073.55 c
-4723.99 3073.55 4729.62 3078.38 4729.62 3085.22 c
-4729.62 3088.04 4728.61 3090.66 4726 3093.88 c
-4724.19 3095.89 4723.58 3097.1 4723.58 3098.3 c
-4723.58 3102.53 4729.02 3105.42 4736.26 3105.42 c
-4748.14 3105.42 4753.86 3100.08 4753.86 3088.04 c
-4753.86 3073.35 l
-4729.91 3066.1 4720.29 3062.48 4712.51 3057.45 c
-4703.46 3051.41 4699 3044.37 4699 3035.52 c
-4699 3023.24 4708.27 3014.18 4721.17 3014.18 c
-4732.84 3014.18 4742.1 3018.21 4753.17 3028.27 c
-4755.38 3018.01 4759.81 3014.18 4769.67 3014.18 c
-4778.32 3014.18 4784.56 3017.4 4792.21 3025.65 c
-h
-4753 3037.13 m
-4747.55 3030.89 4743.52 3028.47 4738.68 3028.47 c
-4732.64 3028.47 4728 3033.91 4728 3041.96 c
-4728 3053.63 4736.61 3061.88 4753 3066.31 c
-h
-4794.62 3017 m
-f*
-4836.4 3110 m
-4797.7 3110 l
-4797.7 3104.95 l
-4806.55 3103.74 4809 3101.32 4809 3093.07 c
-4809 3033.9 l
-4809 3025.65 4806.74 3023.44 4797.7 3021.83 c
-4797.7 3017 l
-4846 3017 l
-4846 3021.83 l
-4838.95 3022.84 4837 3025.65 4837 3033.3 c
-4837 3087.03 l
-4837 3088.04 4839.87 3091.66 4842.18 3093.88 c
-4846.4 3097.1 4850.02 3099.42 4853.65 3099.42 c
-4861.5 3099.42 4865 3094.59 4865 3082 c
-4865 3033.3 l
-4865 3025.05 4862.68 3022.43 4854.85 3021.83 c
-4854.85 3017 l
-4901.95 3017 l
-4901.95 3021.83 l
-4894.9 3022.64 4893 3025.65 4893 3033.3 c
-4893 3087.03 l
-4893 3088.04 4895.73 3091.46 4897.92 3093.68 c
-4902.35 3097.1 4905.97 3099.42 4909.59 3099.42 c
-4917.24 3099.42 4920 3094.38 4920 3082 c
-4920 3033.3 l
-4920 3024.85 4917.85 3022.43 4910.4 3021.83 c
-4910.4 3017 l
-4958.3 3017 l
-4958.3 3022 l
-4950.45 3022.4 4948 3024.78 4948 3033.3 c
-4948 3083.81 l
-4948 3101.12 4937.43 3112.42 4921.07 3112.42 c
-4909.59 3112.42 4901.95 3107.73 4891.48 3094.68 c
-4885.44 3107.36 4878.4 3112.42 4865.72 3112.42 c
-4852.95 3112.42 4843.98 3106.91 4836.4 3094.68 c
-h
-4961.64 3017 m
-f*
-5039.9 3042.16 m
-5031.65 3032.29 5025.61 3028.18 5016.96 3028.18 c
-5009.31 3028.18 5003.27 3031.77 4999.25 3038.94 c
-4995.43 3045.54 4993.82 3052.56 4993.01 3067 c
-5043.73 3067 l
-5042.52 3083.36 5039.5 3092.43 5033.26 3100.12 c
-5026.82 3107.96 5017.36 3112.42 5006.09 3112.42 c
-4980.94 3112.42 4964.03 3092.4 4964.03 3062.88 c
-4964.03 3033.5 4980.53 3014.18 5005.49 3014.18 c
-5021.79 3014.18 5031.65 3020.42 5044.73 3039.34 c
-h
-4992 3074 m
-4992.61 3097.96 4996.23 3105.42 5006.09 3105.42 c
-5011.93 3105.42 5015.55 3102.38 5017.16 3096.49 c
-5018.17 3092.67 5018.57 3087.03 5018.97 3076.77 c
-5018.97 3074 l
-h
-5048.35 3017 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -5092 -3017]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-2904.95 2348.15 m
-2904.95 2458.55 2813.75 2549.75 2702.15 2549.75 c
-2206.55 2549.75 l
-2094.95 2549.75 2003.75 2458.55 2003.75 2348.15 c
-2003.75 2210.15 l
-2003.75 2099.75 2094.95 2008.55 2206.55 2008.55 c
-2702.15 2008.55 l
-2813.75 2008.55 2904.95 2099.75 2904.95 2210.15 c
-f*
-1 g
-2825.75 2402.15 m
-2825.75 2505.35 2739.35 2589.35 2632.55 2589.35 c
-2157.35 2589.35 l
-2050.55 2589.35 1964.15 2505.35 1964.15 2402.15 c
-1964.15 2274.95 l
-1964.15 2171.75 2050.55 2087.75 2157.35 2087.75 c
-2632.55 2087.75 l
-2739.35 2087.75 2825.75 2171.75 2825.75 2274.95 c
-f*
-32 w
-0 g
-2825.75 2402.15 m
-2825.75 2505.35 2739.35 2589.35 2632.55 2589.35 c
-2157.35 2589.35 l
-2050.55 2589.35 1964.15 2505.35 1964.15 2402.15 c
-1964.15 2274.95 l
-1964.15 2171.75 2050.55 2087.75 2157.35 2087.75 c
-2632.55 2087.75 l
-2739.35 2087.75 2825.75 2171.75 2825.75 2274.95 c
-h
-S
-0.201248 i
-2182.33 2445 m
-2068.22 2445 l
-2068.22 2440 l
-2082.11 2439.2 2086 2436.18 2086 2425.72 c
-2086 2328.32 l
-2086 2317.85 2083.17 2315.64 2068.22 2314.03 c
-2068.22 2309 l
-2140.67 2309 l
-2140.67 2314 l
-2122.15 2314.81 2119 2317.23 2119 2328.32 c
-2119 2375.21 l
-2139.22 2374.81 2146.55 2367.36 2149.32 2344.02 c
-2154.35 2344.02 l
-2154.35 2412.04 l
-2149.32 2412.04 l
-2145.76 2389.1 2138.82 2382.05 2119 2382.05 c
-2119 2428.74 l
-2119 2436.19 2121.52 2438 2131.41 2438 c
-2150.13 2438 2161.8 2434.64 2168.04 2427.74 c
-2172.47 2422.71 2174.68 2417.27 2177.5 2404.59 c
-2182.33 2404.59 l
-h
-2187.96 2309 m
-f*
-2231.19 2402 m
-2192.84 2402 l
-2192.84 2396.95 l
-2201.49 2395.74 2204 2393.12 2204 2385.07 c
-2204 2325.9 l
-2204 2317.65 2201.93 2315.44 2192.84 2313.83 c
-2192.84 2309 l
-2246.37 2309 l
-2246.37 2313.83 l
-2234.09 2314.63 2232 2317.25 2232 2329.73 c
-2232 2367.76 l
-2232 2378.23 2237.49 2386.88 2243.95 2386.88 c
-2245.56 2386.88 2247.37 2385.47 2249.59 2382.25 c
-2253.41 2376.82 2256.43 2375.01 2261.66 2375.01 c
-2269.11 2375.01 2274.34 2380.64 2274.34 2388.29 c
-2274.34 2397.55 2267.5 2404.41 2258.04 2404.41 c
-2248.1 2404.41 2240.54 2399.12 2231.19 2385.27 c
-h
-2276.35 2309 m
-f*
-2371.19 2321.88 m
-2369.18 2319.87 l
-2368.57 2319.26 2367.97 2319.06 2366.96 2319.06 c
-2364.15 2319.06 2363 2320.67 2363 2324.09 c
-2363 2376.62 l
-2363 2393.73 2347.6 2404.42 2322.89 2404.42 c
-2300.15 2404.42 2284.85 2394.06 2284.85 2378.83 c
-2284.85 2370.38 2289.69 2365.55 2297.94 2365.55 c
-2305.99 2365.55 2311.62 2370.38 2311.62 2377.22 c
-2311.62 2380.04 2310.61 2382.66 2308 2385.88 c
-2306.19 2387.89 2305.58 2389.1 2305.58 2390.3 c
-2305.58 2394.53 2311.02 2397.42 2318.26 2397.42 c
-2330.14 2397.42 2335.86 2392.08 2335.86 2380.04 c
-2335.86 2365.35 l
-2311.91 2358.1 2302.29 2354.48 2294.51 2349.45 c
-2285.46 2343.41 2281 2336.37 2281 2327.52 c
-2281 2315.24 2290.27 2306.18 2303.17 2306.18 c
-2314.84 2306.18 2324.1 2310.21 2335.17 2320.27 c
-2337.38 2310.01 2341.81 2306.18 2351.67 2306.18 c
-2360.32 2306.18 2366.56 2309.4 2374.21 2317.65 c
-h
-2335 2329.13 m
-2329.55 2322.89 2325.52 2320.47 2320.68 2320.47 c
-2314.64 2320.47 2310 2325.91 2310 2333.96 c
-2310 2345.63 2318.61 2353.88 2335 2358.31 c
-h
-2376.62 2309 m
-f*
-2418.4 2402 m
-2379.7 2402 l
-2379.7 2396.95 l
-2388.55 2395.74 2391 2393.32 2391 2385.07 c
-2391 2325.9 l
-2391 2317.65 2388.74 2315.44 2379.7 2313.83 c
-2379.7 2309 l
-2428 2309 l
-2428 2313.83 l
-2420.95 2314.84 2419 2317.65 2419 2325.3 c
-2419 2379.03 l
-2419 2380.04 2421.87 2383.66 2424.18 2385.88 c
-2428.4 2389.1 2432.02 2391.42 2435.65 2391.42 c
-2443.5 2391.42 2447 2386.59 2447 2374 c
-2447 2325.3 l
-2447 2317.05 2444.68 2314.43 2436.85 2313.83 c
-2436.85 2309 l
-2483.95 2309 l
-2483.95 2313.83 l
-2476.9 2314.64 2475 2317.65 2475 2325.3 c
-2475 2379.03 l
-2475 2380.04 2477.73 2383.46 2479.92 2385.68 c
-2484.35 2389.1 2487.97 2391.42 2491.59 2391.42 c
-2499.24 2391.42 2502 2386.38 2502 2374 c
-2502 2325.3 l
-2502 2316.85 2499.85 2314.43 2492.4 2313.83 c
-2492.4 2309 l
-2540.3 2309 l
-2540.3 2314 l
-2532.45 2314.4 2530 2316.78 2530 2325.3 c
-2530 2375.81 l
-2530 2393.12 2519.43 2404.42 2503.07 2404.42 c
-2491.59 2404.42 2483.95 2399.73 2473.48 2386.68 c
-2467.44 2399.36 2460.4 2404.42 2447.72 2404.42 c
-2434.95 2404.42 2425.98 2398.91 2418.4 2386.68 c
-h
-2543.64 2309 m
-f*
-2623.9 2334.16 m
-2615.65 2324.29 2609.61 2320.18 2600.96 2320.18 c
-2593.31 2320.18 2587.27 2323.77 2583.25 2330.94 c
-2579.43 2337.54 2577.82 2344.56 2577.01 2359 c
-2627.73 2359 l
-2626.52 2375.36 2623.5 2384.43 2617.26 2392.12 c
-2610.82 2399.96 2601.36 2404.42 2590.09 2404.42 c
-2564.94 2404.42 2548.03 2384.4 2548.03 2354.88 c
-2548.03 2325.5 2564.53 2306.18 2589.49 2306.18 c
-2605.79 2306.18 2615.65 2312.42 2628.73 2331.34 c
-h
-2576 2366 m
-2576.61 2389.96 2580.23 2397.42 2590.09 2397.42 c
-2595.93 2397.42 2599.55 2394.38 2601.16 2388.49 c
-2602.17 2384.67 2602.57 2379.03 2602.97 2368.77 c
-2602.97 2366 l
-h
-2632.35 2309 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -2666 -2307]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-16 w
-3375.35 2243.75 m
-3324.95 2510.15 3179.75 2691.35 3016.55 2691.35 c
-2968.55 2691.35 2920.55 2675.75 2876.15 2645.75 c
-S
-2870.15 2711.75 m
-2894.15 2654.15 l
-2949.35 2628.95 l
-2776.55 2542.55 l
-f*
-0.564706 g
-4298.15 2844.95 m
-4163.75 2880.95 l
-4259.75 2937.35 l
-4106.15 2945.75 l
-4148.15 3016.55 l
-4000.55 2996.15 l
-3983.75 3066.95 l
-3863.75 3022.55 l
-3788.15 3086.15 l
-3712.55 3022.55 l
-3592.55 3066.95 l
-3574.55 2996.15 l
-3425.75 3016.55 l
-3470.15 2945.75 l
-3316.55 2937.35 l
-3412.55 2880.95 l
-3276.95 2844.95 l
-3412.55 2810.15 l
-3316.55 2753.75 l
-3470.15 2744.15 l
-3425.75 2674.55 l
-3574.55 2694.95 l
-3592.55 2622.95 l
-3712.55 2668.55 l
-3788.15 2604.95 l
-3863.75 2668.55 l
-3983.75 2622.95 l
-4000.55 2694.95 l
-4148.15 2674.55 l
-4106.15 2744.15 l
-4259.75 2753.75 l
-4163.75 2810.15 l
-f*
-1 g
-4238.15 2904.95 m
-4103.75 2940.95 l
-4199.75 2997.35 l
-4046.15 3005.75 l
-4088.15 3076.55 l
-3940.55 3056.15 l
-3923.75 3126.95 l
-3803.75 3082.55 l
-3728.15 3146.15 l
-3652.55 3082.55 l
-3532.55 3126.95 l
-3514.55 3056.15 l
-3365.75 3076.55 l
-3410.15 3005.75 l
-3256.55 2997.35 l
-3352.55 2940.95 l
-3216.95 2904.95 l
-3352.55 2870.15 l
-3256.55 2813.75 l
-3410.15 2804.15 l
-3365.75 2734.55 l
-3514.55 2754.95 l
-3532.55 2682.95 l
-3652.55 2728.55 l
-3728.15 2664.95 l
-3803.75 2728.55 l
-3923.75 2682.95 l
-3940.55 2754.95 l
-4088.15 2734.55 l
-4046.15 2804.15 l
-4199.75 2813.75 l
-4103.75 2870.15 l
-f*
-0 g
-4238.15 2904.95 m
-4103.75 2940.95 l
-4199.75 2997.35 l
-4046.15 3005.75 l
-4088.15 3076.55 l
-3940.55 3056.15 l
-3923.75 3126.95 l
-3803.75 3082.55 l
-3728.15 3146.15 l
-3652.55 3082.55 l
-3532.55 3126.95 l
-3514.55 3056.15 l
-3365.75 3076.55 l
-3410.15 3005.75 l
-3256.55 2997.35 l
-3352.55 2940.95 l
-3216.95 2904.95 l
-3352.55 2870.15 l
-3256.55 2813.75 l
-3410.15 2804.15 l
-3365.75 2734.55 l
-3514.55 2754.95 l
-3532.55 2682.95 l
-3652.55 2728.55 l
-3728.15 2664.95 l
-3803.75 2728.55 l
-3923.75 2682.95 l
-3940.55 2754.95 l
-4088.15 2734.55 l
-4046.15 2804.15 l
-4199.75 2813.75 l
-4103.75 2870.15 l
-4238.15 2904.95 l
-4161.35 2904.95 l
-4052.15 2877.35 l
-4132.55 2829.35 l
-4012.55 2822.15 l
-4049.75 2759.75 l
-3926.15 2777.75 l
-3909.35 2709.35 l
-3800.15 2751.35 l
-3728.15 2691.35 l
-3656.15 2751.35 l
-3545.75 2709.35 l
-3530.15 2777.75 l
-3406.55 2759.75 l
-3444.95 2822.15 l
-3323.75 2829.35 l
-3404.15 2877.35 l
-3294.95 2904.95 l
-3404.15 2933.75 l
-3323.75 2980.55 l
-3444.95 2988.95 l
-3406.55 3051.35 l
-3530.15 3033.35 l
-3545.75 3100.55 l
-3656.15 3059.75 l
-3728.15 3119.75 l
-3800.15 3059.75 l
-3909.35 3100.55 l
-3926.15 3033.35 l
-4049.75 3051.35 l
-4012.55 2988.95 l
-4132.55 2980.55 l
-4052.15 2933.75 l
-4161.35 2904.95 l
-4238.15 2904.95 l
-f*
-0.2 i
-3550.08 2956.76 m
-3530.08 2882.52 l
-3527.52 2873.88 3524.48 2871.64 3514.08 2871 c
-3514.08 2867 l
-3564 2867 l
-3564 2871 l
-3554.72 2871.48 3552.48 2872.76 3552.48 2877.88 c
-3552.48 2879.64 3552.8 2881.4 3553.76 2885.08 c
-3553.92 2885.88 l
-3554.08 2886.68 l
-3573.76 2958.52 l
-3576.16 2966.84 3578.56 2969.08 3586.72 2970.04 c
-3586.72 2974 l
-3552.8 2974 l
-3503.2 2897.24 l
-3494.56 2974 l
-3459.2 2974 l
-3459.2 2970 l
-3469.28 2969.52 3470.72 2968.89 3470.72 2964.44 c
-3470.72 2962.2 3470.08 2959.32 3468.96 2955.16 c
-3451.52 2895.48 l
-3445.12 2874.68 3444 2872.92 3435.36 2871 c
-3435.36 2867 l
-3468.48 2867 l
-3468.48 2871 l
-3458.24 2872.28 3455.68 2874.2 3455.68 2880.76 c
-3455.68 2883.48 3456.48 2887.48 3458.72 2895.48 c
-3474.88 2954.52 l
-3485.6 2865.08 l
-3490.08 2865.08 l
-h
-3582.24 2867 m
-f*
-3651.44 2887.32 m
-3644.88 2878.52 3642.48 2875.76 3639.92 2875.76 c
-3638.64 2875.76 3638 2876.86 3638 2878.52 c
-3638 2882.52 3639.44 2889.08 3643.44 2902.2 c
-3654.8 2939.96 l
-3637.04 2938.84 l
-3634.16 2929.4 l
-3632.72 2937.56 3629.2 2941.08 3622.32 2941.08 c
-3602.64 2941.08 3579 2910.27 3579 2885.24 c
-3579 2873.08 3585.74 2864.92 3595.92 2864.92 c
-3605.68 2864.92 3613.04 2870.68 3622.16 2886.04 c
-3620.24 2879.48 3620 2877.56 3620 2875.32 c
-3620 2869.4 3624.76 2864.76 3630.64 2864.76 c
-3638.16 2864.76 3645.52 2871 3654.8 2884.92 c
-h
-3624.56 2934.2 m
-3628.08 2933.88 3630.56 2931 3630.56 2926.68 c
-3630.56 2917.08 3625.24 2899.32 3618.96 2888.28 c
-3614.64 2880.44 3609.84 2875.92 3605.52 2875.92 c
-3601.36 2875.92 3598 2879.75 3598 2884.92 c
-3598 2893.24 3603.42 2909.24 3610.16 2921.08 c
-3614.96 2929.56 3620.24 2934.52 3624.56 2934.2 c
-h
-3662 2867 m
-f*
-3696.56 2940.92 m
-3680.24 2938.36 3674 2937.4 3665.68 2936.44 c
-3665.68 2932 l
-3672.88 2931.69 3674.32 2931.07 3674.32 2928.12 c
-3674.32 2926.52 3673.04 2920.76 3670.8 2912.44 c
-3654.8 2850.36 l
-3651.76 2839.8 3650.48 2838.84 3642.8 2839 c
-3642.8 2834 l
-3682.64 2834 l
-3682.64 2839 l
-3674.64 2839.14 3672.24 2840.16 3672.24 2843.64 c
-3672.24 2845.88 3673.36 2850.68 3676.4 2861.88 c
-3677.52 2865.72 3677.52 2866.04 3678.16 2868.44 c
-3683.76 2865.56 3685.68 2864.92 3689.04 2864.92 c
-3710.8 2864.92 3733.36 2893.88 3733.36 2921.56 c
-3733.36 2933.4 3726.64 2941.08 3716.08 2941.08 c
-3706.96 2941.08 3699.92 2935.92 3690.48 2922.52 c
-h
-3707.12 2929.56 m
-3711.28 2929.24 3713.68 2925.56 3713.36 2920.44 c
-3712.72 2909.88 3707.6 2894.04 3701.84 2883.64 c
-3696.88 2875 3691.76 2869.92 3686.32 2869.92 c
-3682.8 2869.92 3680.08 2872.75 3680.08 2876.28 c
-3680.08 2879 3681.84 2885.56 3686.16 2900.12 c
-3689.68 2911.8 3691.12 2915.8 3693.52 2919.48 c
-3697.52 2925.72 3702.96 2929.88 3707.12 2929.56 c
-h
-3742 2867 m
-f*
-3777.56 2940.92 m
-3761.24 2938.36 3755 2937.4 3746.68 2936.44 c
-3746.68 2932 l
-3753.88 2931.69 3755.32 2931.07 3755.32 2928.12 c
-3755.32 2926.52 3754.04 2920.76 3751.8 2912.44 c
-3735.8 2850.36 l
-3732.76 2839.8 3731.48 2838.84 3723.8 2839 c
-3723.8 2834 l
-3763.64 2834 l
-3763.64 2839 l
-3755.64 2839.14 3753.24 2840.16 3753.24 2843.64 c
-3753.24 2845.88 3754.36 2850.68 3757.4 2861.88 c
-3758.52 2865.72 3758.52 2866.04 3759.16 2868.44 c
-3764.76 2865.56 3766.68 2864.92 3770.04 2864.92 c
-3791.8 2864.92 3814.36 2893.88 3814.36 2921.56 c
-3814.36 2933.4 3807.64 2941.08 3797.08 2941.08 c
-3787.96 2941.08 3780.92 2935.92 3771.48 2922.52 c
-h
-3788.12 2929.56 m
-3792.28 2929.24 3794.68 2925.56 3794.36 2920.44 c
-3793.72 2909.88 3788.6 2894.04 3782.84 2883.64 c
-3777.88 2875 3772.76 2869.92 3767.32 2869.92 c
-3763.8 2869.92 3761.08 2872.75 3761.08 2876.28 c
-3761.08 2879 3762.84 2885.56 3767.16 2900.12 c
-3770.68 2911.8 3772.12 2915.8 3774.52 2919.48 c
-3778.52 2925.72 3783.96 2929.88 3788.12 2929.56 c
-h
-3823 2867 m
-f*
-3856.56 2889.56 m
-3854.32 2886.36 l
-3850.16 2880.12 3846.48 2876.56 3844.08 2876.56 c
-3842.8 2876.56 3842 2877.77 3842 2879.16 c
-3842 2880.6 3842.62 2884.76 3843.12 2887.48 c
-3857.68 2940.92 l
-3849.22 2939 3838.26 2937.4 3826.04 2936.44 c
-3826.04 2932 l
-3827.44 2932 l
-3832.24 2932 3835.48 2930.44 3835.48 2927.48 c
-3835.48 2926.2 3834.71 2923.8 3833.68 2921.08 c
-3824.4 2886.68 l
-3823.12 2882.04 3823 2877.88 3823 2875.64 c
-3823 2869.56 3827.2 2865.56 3833.36 2865.56 c
-3842.96 2865.56 3848.88 2870.36 3860.08 2887.32 c
-h
-3852.88 2976.4 m
-3847.44 2976.4 3843 2971.46 3843 2966.04 c
-3843 2959.8 3847.26 2955.4 3853.04 2955.4 c
-3859.12 2955.4 3864 2959.86 3864 2965.56 c
-3864 2971.48 3859 2976.4 3852.88 2976.4 c
-h
-3866.48 2867 m
-f*
-3941.36 2888.6 m
-3934.96 2878.68 3932.88 2876.56 3930.16 2876.56 c
-3928.88 2876.56 3928 2877.63 3928 2879.16 c
-3928 2880.76 3928.94 2884.12 3931.92 2893.08 c
-3937.68 2910.52 l
-3940.24 2918.04 3942 2925.08 3942 2928.92 c
-3942 2936.76 3937.78 2941.08 3930.16 2941.08 c
-3924.24 2941.08 3918.48 2938.62 3914.16 2934.36 c
-3908.24 2928.76 3905.2 2924.92 3894.48 2909.08 c
-3904.72 2940.76 l
-3894.48 2938.52 3881.68 2936.92 3872.72 2936.6 c
-3872.72 2931.8 l
-3879.44 2931.65 3881.36 2930.92 3881.36 2928.12 c
-3881.36 2926.2 3879.12 2917.72 3874 2899.64 c
-3870.32 2886.68 3869.2 2882.52 3865.04 2867 c
-3884.4 2867 l
-3891.92 2894.68 3897.68 2908.6 3907.6 2921.56 c
-3910.8 2925.88 3915.76 2929.08 3918.64 2929.08 c
-3920.72 2929.08 3923 2927.63 3923 2926.04 c
-3923 2925.56 3922.54 2924.28 3921.84 2922.68 c
-3913.04 2896.12 l
-3910.48 2888.44 3909 2879.32 3909 2875.16 c
-3909 2869.08 3912.84 2865.56 3919.44 2865.56 c
-3929.04 2865.56 3935.6 2871 3944.88 2886.52 c
-h
-3954.96 2867 m
-f*
-4032.48 2936 m
-4014.72 2936 l
-4009.28 2939.58 4004.48 2941.08 3997.12 2941.08 c
-3977.44 2941.08 3961 2928.05 3961 2911.8 c
-3961 2903.64 3965.35 2897.88 3974.4 2894.2 c
-3961.28 2886.84 3959 2884.6 3959 2878.68 c
-3959 2873.56 3961.89 2870.52 3968.96 2868.12 c
-3959.04 2865.72 3955.84 2864.44 3952 2861.4 c
-3949.44 2859.16 3948 2855.32 3948 2851.48 c
-3948 2841.08 3959.56 2835 3977.76 2835 c
-4000.32 2835 4016 2844.72 4016 2858.52 c
-4016 2868.28 4009.6 2873.56 3992.16 2878.52 c
-3983.68 2880.92 l
-3978.56 2882.36 3975 2884.6 3975 2887 c
-3975 2889.56 3977.68 2892.28 3980 2892.28 c
-3980.8 2892.28 3981.92 2892.24 3983.2 2892.12 c
-3984.96 2891.64 3986.24 2891 3988.16 2891 c
-3995.2 2891 4002.4 2893.09 4008.48 2896.92 c
-4017.76 2902.2 4023 2910.36 4023 2919.96 c
-4023 2922.64 4022.59 2924.32 4021.76 2927 c
-4032.48 2927 l
-h
-3974.4 2866.04 m
-3976.32 2865.88 3988.48 2861.72 3992 2860.12 c
-3996.48 2857.88 3999 2855.16 3999 2851 c
-3999 2843.96 3991.8 2840 3979.36 2840 c
-3968.96 2840 3962 2845.1 3962 2852.44 c
-3962 2855.48 3963.32 2858.2 3966.24 2861.24 c
-3968.32 2863.32 3973.12 2866.2 3974.4 2866.04 c
-h
-3996.8 2936.08 m
-4000.96 2936.08 4004 2932.19 4004 2926.52 c
-4004 2921.08 4002.08 2913.4 3999.36 2907.48 c
-3996 2900.12 3991.84 2896 3986.88 2896 c
-3982.56 2896 3980 2899.52 3980 2905.88 c
-3980 2912.28 3982.79 2922.04 3986.24 2928.12 c
-3989.28 2933.4 3992.64 2936.08 3996.8 2936.08 c
-h
-4036 2867 m
-f*
-1 i
-0.564706 g
-4088.15 3789.35 m
-3953.75 3826.55 l
-4049.75 3881.75 l
-3896.15 3891.35 l
-3938.15 3960.95 l
-3790.55 3940.55 l
-3773.75 4012.55 l
-3653.75 3966.95 l
-3578.15 4030.55 l
-3502.55 3966.95 l
-3382.55 4012.55 l
-3364.55 3940.55 l
-3215.75 3960.95 l
-3260.15 3891.35 l
-3106.55 3881.75 l
-3202.55 3826.55 l
-3066.95 3789.35 l
-3202.55 3754.55 l
-3106.55 3698.15 l
-3260.15 3689.75 l
-3215.75 3620.15 l
-3364.55 3639.35 l
-3382.55 3568.55 l
-3502.55 3612.95 l
-3578.15 3549.35 l
-3653.75 3612.95 l
-3773.75 3568.55 l
-3790.55 3639.35 l
-3938.15 3620.15 l
-3896.15 3689.75 l
-4049.75 3698.15 l
-3953.75 3754.55 l
-f*
-1 g
-4028.15 3849.35 m
-3893.75 3886.55 l
-3989.75 3941.75 l
-3836.15 3951.35 l
-3878.15 4020.95 l
-3730.55 4000.55 l
-3713.75 4072.55 l
-3593.75 4026.95 l
-3518.15 4090.55 l
-3442.55 4026.95 l
-3322.55 4072.55 l
-3304.55 4000.55 l
-3155.75 4020.95 l
-3200.15 3951.35 l
-3046.55 3941.75 l
-3142.55 3886.55 l
-3006.95 3849.35 l
-3142.55 3814.55 l
-3046.55 3758.15 l
-3200.15 3749.75 l
-3155.75 3680.15 l
-3304.55 3699.35 l
-3322.55 3628.55 l
-3442.55 3672.95 l
-3518.15 3609.35 l
-3593.75 3672.95 l
-3713.75 3628.55 l
-3730.55 3699.35 l
-3878.15 3680.15 l
-3836.15 3749.75 l
-3989.75 3758.15 l
-3893.75 3814.55 l
-f*
-0 g
-4028.15 3849.35 m
-3893.75 3886.55 l
-3989.75 3941.75 l
-3836.15 3951.35 l
-3878.15 4020.95 l
-3730.55 4000.55 l
-3713.75 4072.55 l
-3593.75 4026.95 l
-3518.15 4090.55 l
-3442.55 4026.95 l
-3322.55 4072.55 l
-3304.55 4000.55 l
-3155.75 4020.95 l
-3200.15 3951.35 l
-3046.55 3941.75 l
-3142.55 3886.55 l
-3006.95 3849.35 l
-3142.55 3814.55 l
-3046.55 3758.15 l
-3200.15 3749.75 l
-3155.75 3680.15 l
-3304.55 3699.35 l
-3322.55 3628.55 l
-3442.55 3672.95 l
-3518.15 3609.35 l
-3593.75 3672.95 l
-3713.75 3628.55 l
-3730.55 3699.35 l
-3878.15 3680.15 l
-3836.15 3749.75 l
-3989.75 3758.15 l
-3893.75 3814.55 l
-4028.15 3849.35 l
-3951.35 3849.35 l
-3842.15 3821.75 l
-3922.55 3774.95 l
-3802.55 3767.75 l
-3839.75 3704.15 l
-3716.15 3722.15 l
-3699.35 3654.95 l
-3590.15 3695.75 l
-3518.15 3635.75 l
-3446.15 3695.75 l
-3335.75 3654.95 l
-3320.15 3722.15 l
-3196.55 3704.15 l
-3234.95 3767.75 l
-3113.75 3774.95 l
-3194.15 3821.75 l
-3084.95 3849.35 l
-3194.15 3878.15 l
-3113.75 3926.15 l
-3234.95 3933.35 l
-3196.55 3995.75 l
-3320.15 3978.95 l
-3335.75 4046.15 l
-3446.15 4004.15 l
-3518.15 4064.15 l
-3590.15 4004.15 l
-3699.35 4046.15 l
-3716.15 3978.95 l
-3839.75 3995.75 l
-3802.55 3933.35 l
-3922.55 3926.15 l
-3842.15 3878.15 l
-3951.35 3849.35 l
-4028.15 3849.35 l
-f*
-0.2 i
-3340.08 3900.76 m
-3320.08 3826.52 l
-3317.52 3817.88 3314.48 3815.64 3304.08 3815 c
-3304.08 3811 l
-3354 3811 l
-3354 3815 l
-3344.72 3815.48 3342.48 3816.76 3342.48 3821.88 c
-3342.48 3823.64 3342.8 3825.4 3343.76 3829.08 c
-3343.92 3829.88 l
-3344.08 3830.68 l
-3363.76 3902.52 l
-3366.16 3910.84 3368.56 3913.08 3376.72 3914.04 c
-3376.72 3918 l
-3342.8 3918 l
-3293.2 3841.24 l
-3284.56 3918 l
-3249.2 3918 l
-3249.2 3914 l
-3259.28 3913.52 3260.72 3912.89 3260.72 3908.44 c
-3260.72 3906.2 3260.08 3903.32 3258.96 3899.16 c
-3241.52 3839.48 l
-3235.12 3818.68 3234 3816.92 3225.36 3815 c
-3225.36 3811 l
-3258.48 3811 l
-3258.48 3815 l
-3248.24 3816.28 3245.68 3818.2 3245.68 3824.76 c
-3245.68 3827.48 3246.48 3831.48 3248.72 3839.48 c
-3264.88 3898.52 l
-3275.6 3809.08 l
-3280.08 3809.08 l
-h
-3372.24 3811 m
-f*
-3441.44 3831.32 m
-3434.88 3822.52 3432.48 3819.76 3429.92 3819.76 c
-3428.64 3819.76 3428 3820.86 3428 3822.52 c
-3428 3826.52 3429.44 3833.08 3433.44 3846.2 c
-3444.8 3883.96 l
-3427.04 3882.84 l
-3424.16 3873.4 l
-3422.72 3881.56 3419.2 3885.08 3412.32 3885.08 c
-3392.64 3885.08 3369 3854.27 3369 3829.24 c
-3369 3817.08 3375.74 3808.92 3385.92 3808.92 c
-3395.68 3808.92 3403.04 3814.68 3412.16 3830.04 c
-3410.24 3823.48 3410 3821.56 3410 3819.32 c
-3410 3813.4 3414.76 3808.76 3420.64 3808.76 c
-3428.16 3808.76 3435.52 3815 3444.8 3828.92 c
-h
-3414.56 3878.2 m
-3418.08 3877.88 3420.56 3875 3420.56 3870.68 c
-3420.56 3861.08 3415.24 3843.32 3408.96 3832.28 c
-3404.64 3824.44 3399.84 3819.92 3395.52 3819.92 c
-3391.36 3819.92 3388 3823.75 3388 3828.92 c
-3388 3837.24 3393.42 3853.24 3400.16 3865.08 c
-3404.96 3873.56 3410.24 3878.52 3414.56 3878.2 c
-h
-3452 3811 m
-f*
-3486.56 3884.92 m
-3470.24 3882.36 3464 3881.4 3455.68 3880.44 c
-3455.68 3876 l
-3462.88 3875.69 3464.32 3875.07 3464.32 3872.12 c
-3464.32 3870.52 3463.04 3864.76 3460.8 3856.44 c
-3444.8 3794.36 l
-3441.76 3783.8 3440.48 3782.84 3432.8 3783 c
-3432.8 3778 l
-3472.64 3778 l
-3472.64 3783 l
-3464.64 3783.14 3462.24 3784.16 3462.24 3787.64 c
-3462.24 3789.88 3463.36 3794.68 3466.4 3805.88 c
-3467.52 3809.72 3467.52 3810.04 3468.16 3812.44 c
-3473.76 3809.56 3475.68 3808.92 3479.04 3808.92 c
-3500.8 3808.92 3523.36 3837.88 3523.36 3865.56 c
-3523.36 3877.4 3516.64 3885.08 3506.08 3885.08 c
-3496.96 3885.08 3489.92 3879.92 3480.48 3866.52 c
-h
-3497.12 3873.56 m
-3501.28 3873.24 3503.68 3869.56 3503.36 3864.44 c
-3502.72 3853.88 3497.6 3838.04 3491.84 3827.64 c
-3486.88 3819 3481.76 3813.92 3476.32 3813.92 c
-3472.8 3813.92 3470.08 3816.75 3470.08 3820.28 c
-3470.08 3823 3471.84 3829.56 3476.16 3844.12 c
-3479.68 3855.8 3481.12 3859.8 3483.52 3863.48 c
-3487.52 3869.72 3492.96 3873.88 3497.12 3873.56 c
-h
-3532 3811 m
-f*
-3567.56 3884.92 m
-3551.24 3882.36 3545 3881.4 3536.68 3880.44 c
-3536.68 3876 l
-3543.88 3875.69 3545.32 3875.07 3545.32 3872.12 c
-3545.32 3870.52 3544.04 3864.76 3541.8 3856.44 c
-3525.8 3794.36 l
-3522.76 3783.8 3521.48 3782.84 3513.8 3783 c
-3513.8 3778 l
-3553.64 3778 l
-3553.64 3783 l
-3545.64 3783.14 3543.24 3784.16 3543.24 3787.64 c
-3543.24 3789.88 3544.36 3794.68 3547.4 3805.88 c
-3548.52 3809.72 3548.52 3810.04 3549.16 3812.44 c
-3554.76 3809.56 3556.68 3808.92 3560.04 3808.92 c
-3581.8 3808.92 3604.36 3837.88 3604.36 3865.56 c
-3604.36 3877.4 3597.64 3885.08 3587.08 3885.08 c
-3577.96 3885.08 3570.92 3879.92 3561.48 3866.52 c
-h
-3578.12 3873.56 m
-3582.28 3873.24 3584.68 3869.56 3584.36 3864.44 c
-3583.72 3853.88 3578.6 3838.04 3572.84 3827.64 c
-3567.88 3819 3562.76 3813.92 3557.32 3813.92 c
-3553.8 3813.92 3551.08 3816.75 3551.08 3820.28 c
-3551.08 3823 3552.84 3829.56 3557.16 3844.12 c
-3560.68 3855.8 3562.12 3859.8 3564.52 3863.48 c
-3568.52 3869.72 3573.96 3873.88 3578.12 3873.56 c
-h
-3613 3811 m
-f*
-3646.56 3833.56 m
-3644.32 3830.36 l
-3640.16 3824.12 3636.48 3820.56 3634.08 3820.56 c
-3632.8 3820.56 3632 3821.77 3632 3823.16 c
-3632 3824.6 3632.62 3828.76 3633.12 3831.48 c
-3647.68 3884.92 l
-3639.22 3883 3628.26 3881.4 3616.04 3880.44 c
-3616.04 3876 l
-3617.44 3876 l
-3622.24 3876 3625.48 3874.44 3625.48 3871.48 c
-3625.48 3870.2 3624.71 3867.8 3623.68 3865.08 c
-3614.4 3830.68 l
-3613.12 3826.04 3613 3821.88 3613 3819.64 c
-3613 3813.56 3617.2 3809.56 3623.36 3809.56 c
-3632.96 3809.56 3638.88 3814.36 3650.08 3831.32 c
-h
-3642.88 3920.4 m
-3637.44 3920.4 3633 3915.46 3633 3910.04 c
-3633 3903.8 3637.26 3899.4 3643.04 3899.4 c
-3649.12 3899.4 3654 3903.86 3654 3909.56 c
-3654 3915.48 3649 3920.4 3642.88 3920.4 c
-h
-3656.48 3811 m
-f*
-3731.36 3832.6 m
-3724.96 3822.68 3722.88 3820.56 3720.16 3820.56 c
-3718.88 3820.56 3718 3821.63 3718 3823.16 c
-3718 3824.76 3718.94 3828.12 3721.92 3837.08 c
-3727.68 3854.52 l
-3730.24 3862.04 3732 3869.08 3732 3872.92 c
-3732 3880.76 3727.78 3885.08 3720.16 3885.08 c
-3714.24 3885.08 3708.48 3882.62 3704.16 3878.36 c
-3698.24 3872.76 3695.2 3868.92 3684.48 3853.08 c
-3694.72 3884.76 l
-3684.48 3882.52 3671.68 3880.92 3662.72 3880.6 c
-3662.72 3875.8 l
-3669.44 3875.65 3671.36 3874.92 3671.36 3872.12 c
-3671.36 3870.2 3669.12 3861.72 3664 3843.64 c
-3660.32 3830.68 3659.2 3826.52 3655.04 3811 c
-3674.4 3811 l
-3681.92 3838.68 3687.68 3852.6 3697.6 3865.56 c
-3700.8 3869.88 3705.76 3873.08 3708.64 3873.08 c
-3710.72 3873.08 3713 3871.63 3713 3870.04 c
-3713 3869.56 3712.54 3868.28 3711.84 3866.68 c
-3703.04 3840.12 l
-3700.48 3832.44 3699 3823.32 3699 3819.16 c
-3699 3813.08 3702.84 3809.56 3709.44 3809.56 c
-3719.04 3809.56 3725.6 3815 3734.88 3830.52 c
-h
-3744.96 3811 m
-f*
-3822.48 3880 m
-3804.72 3880 l
-3799.28 3883.58 3794.48 3885.08 3787.12 3885.08 c
-3767.44 3885.08 3751 3872.05 3751 3855.8 c
-3751 3847.64 3755.35 3841.88 3764.4 3838.2 c
-3751.28 3830.84 3749 3828.6 3749 3822.68 c
-3749 3817.56 3751.89 3814.52 3758.96 3812.12 c
-3749.04 3809.72 3745.84 3808.44 3742 3805.4 c
-3739.44 3803.16 3738 3799.32 3738 3795.48 c
-3738 3785.08 3749.56 3779 3767.76 3779 c
-3790.32 3779 3806 3788.72 3806 3802.52 c
-3806 3812.28 3799.6 3817.56 3782.16 3822.52 c
-3773.68 3824.92 l
-3768.56 3826.36 3765 3828.6 3765 3831 c
-3765 3833.56 3767.68 3836.28 3770 3836.28 c
-3770.8 3836.28 3771.92 3836.24 3773.2 3836.12 c
-3774.96 3835.64 3776.24 3835 3778.16 3835 c
-3785.2 3835 3792.4 3837.09 3798.48 3840.92 c
-3807.76 3846.2 3813 3854.36 3813 3863.96 c
-3813 3866.64 3812.59 3868.32 3811.76 3871 c
-3822.48 3871 l
-h
-3764.4 3810.04 m
-3766.32 3809.88 3778.48 3805.72 3782 3804.12 c
-3786.48 3801.88 3789 3799.16 3789 3795 c
-3789 3787.96 3781.8 3784 3769.36 3784 c
-3758.96 3784 3752 3789.1 3752 3796.44 c
-3752 3799.48 3753.32 3802.2 3756.24 3805.24 c
-3758.32 3807.32 3763.12 3810.2 3764.4 3810.04 c
-h
-3786.8 3880.08 m
-3790.96 3880.08 3794 3876.19 3794 3870.52 c
-3794 3865.08 3792.08 3857.4 3789.36 3851.48 c
-3786 3844.12 3781.84 3840 3776.88 3840 c
-3772.56 3840 3770 3843.52 3770 3849.88 c
-3770 3856.28 3772.79 3866.04 3776.24 3872.12 c
-3779.28 3877.4 3782.64 3880.08 3786.8 3880.08 c
-h
-3826 3811 m
-f*
-1 i
-1 g
-4822.55 3368.15 m
-4988.15 3521.75 l
-4906.55 3521.75 l
-4906.55 3672.95 l
-4739.75 3672.95 l
-4739.75 3521.75 l
-4658.15 3521.75 l
-f*
-0 g
-4822.55 3368.15 m
-4988.15 3521.75 l
-4906.55 3521.75 l
-4906.55 3672.95 l
-4739.75 3672.95 l
-4739.75 3521.75 l
-4658.15 3521.75 l
-4822.55 3368.15 l
-4822.55 3382.55 l
-4683.35 3512.15 l
-4749.35 3512.15 l
-4749.35 3663.35 l
-4895.75 3663.35 l
-4895.75 3512.15 l
-4964.15 3512.15 l
-4822.55 3382.55 l
-4822.55 3368.15 l
-f*
-0.2 i
-4375.88 3907 m
-4375.88 3902 l
-4388.3 3901.29 4392 3898.45 4392 3889.4 c
-4392 3802.28 l
-4392 3793.1 4389.25 3790.94 4375.88 3789.5 c
-4375.88 3785 l
-4433.84 3785 l
-4464.26 3785 4484 3798.5 4484 3818.84 c
-4484 3827.12 4480.73 3834.32 4474.7 3839.9 c
-4468.4 3845.48 4462.28 3848 4449.68 3850.7 c
-4470.56 3856.82 4478 3864.2 4478 3877.88 c
-4478 3896.42 4461.55 3907 4431.5 3907 c
-h
-4421 3846.74 m
-4425.92 3846.74 l
-4444.46 3846.74 4453 3837.2 4453 3817.22 c
-4453 3799.76 4445.77 3791 4431.5 3791 c
-4423.58 3791 4421 3793.99 4421 3801.74 c
-h
-4421 3892.46 m
-4421 3898.94 4423.39 3902 4430.24 3902 c
-4442.84 3902 4449 3894.03 4449 3876.62 c
-4449 3857.72 4443.08 3852.68 4421 3852.14 c
-h
-4493.06 3785 m
-f*
-4578.14 3796.52 m
-4576.34 3794.72 l
-4575.8 3794.18 4575.26 3794 4574.36 3794 c
-4571.84 3794 4571 3795.44 4571 3798.5 c
-4571 3845.48 l
-4571 3860.78 4557.16 3870.16 4534.94 3870.16 c
-4514.6 3870.16 4500.92 3860.97 4500.92 3847.46 c
-4500.92 3839.9 4505.24 3835.58 4512.62 3835.58 c
-4519.82 3835.58 4524.86 3839.9 4524.86 3846.02 c
-4524.86 3848.54 4523.96 3850.88 4521.62 3853.76 c
-4520 3855.56 4519.46 3856.64 4519.46 3857.72 c
-4519.46 3861.5 4524.32 3864.16 4530.8 3864.16 c
-4541.42 3864.16 4546 3859.37 4546 3848.54 c
-4546 3835.4 l
-4524.89 3828.92 4516.41 3825.68 4509.56 3821.18 c
-4501.46 3815.78 4498 3809.48 4498 3801.56 c
-4498 3790.58 4506.07 3782.48 4517.3 3782.48 c
-4527.74 3782.48 4536.02 3786.08 4545.92 3795.08 c
-4547.9 3785.9 4551.86 3782.48 4560.68 3782.48 c
-4568.42 3782.48 4574 3785.36 4580.84 3792.74 c
-h
-4546 3803 m
-4541.04 3797.42 4537.37 3795.26 4532.96 3795.26 c
-4527.56 3795.26 4524 3800.12 4524 3807.32 c
-4524 3817.76 4531.57 3825.14 4546 3829.1 c
-h
-4583 3785 m
-f*
-4644.22 3843.68 m
-4644.22 3869.8 l
-4640.24 3869.8 l
-4639.16 3867.08 4638.08 3866.2 4635.74 3866.2 c
-4634.66 3866.2 4633.04 3866.55 4630.16 3867.44 c
-4624.4 3869.42 4620.26 3870.16 4616.12 3870.16 c
-4599.74 3870.16 4588 3858.99 4588 3843.86 c
-4588 3831.98 4595.34 3823.7 4613.42 3815.96 c
-4625.84 3810.56 4631 3806.06 4631 3800.3 c
-4631 3793.28 4625.48 3788.48 4617.2 3788.48 c
-4604.6 3788.48 4596.32 3796.62 4592.54 3812.36 c
-4587.5 3812.36 l
-4587.5 3782.66 l
-4592 3782.66 l
-4593.98 3786.44 4595.06 3787.7 4596.68 3787.7 c
-4597.58 3787.7 4599.02 3787.34 4600.82 3786.62 c
-4606.04 3784.46 4615.22 3782.48 4620.26 3782.48 c
-4636.64 3782.48 4648 3793.64 4648 3809.84 c
-4648 3822.62 4641.15 3830.54 4623.14 3837.92 c
-4610.9 3843.14 4606 3847.64 4606 3853.76 c
-4606 3859.7 4610.98 3864.16 4617.74 3864.16 c
-4622.6 3864.16 4627.28 3862.19 4631.24 3858.44 c
-4635.02 3854.84 4637 3851.42 4639.7 3843.68 c
-h
-4653.02 3785 m
-f*
-4724.36 3807.5 m
-4716.98 3798.68 4711.58 3795.48 4703.84 3795.48 c
-4697 3795.48 4691.6 3798.53 4688 3804.62 c
-4684.58 3810.36 4683.14 3816.45 4682.42 3829 c
-4727.78 3829 l
-4726.7 3843.99 4724 3852.3 4718.42 3859.34 c
-4712.66 3866.36 4704.2 3870.16 4694.12 3870.16 c
-4671.62 3870.16 4656.5 3852.33 4656.5 3826.04 c
-4656.5 3799.76 4671.26 3782.48 4693.58 3782.48 c
-4708.16 3782.48 4716.98 3788.06 4728.68 3804.98 c
-h
-4681.52 3836 m
-4682.06 3857.42 4685.3 3864.16 4694.12 3864.16 c
-4699.34 3864.16 4702.58 3861.42 4704.02 3856.1 c
-4704.92 3852.68 4705.28 3847.64 4705.64 3838.46 c
-4705.64 3836 l
-h
-4731.92 3785 m
-f*
-4778 3785 m
-f*
-4881.94 3907 m
-4779.88 3907 l
-4779.88 3902 l
-4792.3 3901.29 4796 3898.63 4796 3889.4 c
-4796 3802.28 l
-4796 3792.92 4793.44 3790.94 4779.88 3789.5 c
-4779.88 3785 l
-4844.68 3785 l
-4844.68 3790 l
-4828.12 3790.69 4825 3792.77 4825 3802.28 c
-4825 3844.22 l
-4843.28 3843.86 4849.91 3837.2 4852.42 3816.32 c
-4856.92 3816.32 l
-4856.92 3877.16 l
-4852.42 3877.16 l
-4849.19 3856.64 4842.92 3850.34 4825 3850.34 c
-4825 3892.1 l
-4825 3898.76 4827.32 3901 4836.4 3901 c
-4853.14 3901 4863.58 3897.8 4869.16 3891.2 c
-4873.12 3886.7 4875.1 3881.84 4877.62 3870.5 c
-4881.94 3870.5 l
-h
-4886.98 3785 m
-f*
-4926.28 3868 m
-4892.22 3868 l
-4892.22 3863.66 l
-4899.96 3862.58 4902 3860.24 4902 3853.04 c
-4902 3800.12 l
-4902 3792.74 4900.19 3790.76 4892.22 3789.32 c
-4892.22 3785 l
-4940.1 3785 l
-4940.1 3789.32 l
-4929.12 3790.04 4927 3792.38 4927 3803.54 c
-4927 3837.56 l
-4927 3846.92 4932.02 3854.66 4937.94 3854.66 c
-4939.38 3854.66 4941 3853.4 4942.98 3850.52 c
-4946.4 3845.66 4949.1 3844.04 4953.78 3844.04 c
-4960.44 3844.04 4965.12 3849.08 4965.12 3855.92 c
-4965.12 3864.2 4959 3870.16 4950.54 3870.16 c
-4941.55 3870.16 4934.73 3865.47 4926.28 3853.22 c
-h
-4966.92 3785 m
-f*
-5053.14 3796.52 m
-5051.34 3794.72 l
-5050.8 3794.18 5050.26 3794 5049.36 3794 c
-5046.84 3794 5046 3795.44 5046 3798.5 c
-5046 3845.48 l
-5046 3860.78 5032.16 3870.16 5009.94 3870.16 c
-4989.6 3870.16 4975.92 3860.97 4975.92 3847.46 c
-4975.92 3839.9 4980.24 3835.58 4987.62 3835.58 c
-4994.82 3835.58 4999.86 3839.9 4999.86 3846.02 c
-4999.86 3848.54 4998.96 3850.88 4996.62 3853.76 c
-4995 3855.56 4994.46 3856.64 4994.46 3857.72 c
-4994.46 3861.5 4999.32 3864.16 5005.8 3864.16 c
-5016.42 3864.16 5021 3859.37 5021 3848.54 c
-5021 3835.4 l
-4999.89 3828.92 4991.41 3825.68 4984.56 3821.18 c
-4976.46 3815.78 4973 3809.48 4973 3801.56 c
-4973 3790.58 4981.07 3782.48 4992.3 3782.48 c
-5002.74 3782.48 5011.02 3786.08 5020.92 3795.08 c
-5022.9 3785.9 5026.86 3782.48 5035.68 3782.48 c
-5043.42 3782.48 5049 3785.36 5055.84 3792.74 c
-h
-5021 3803 m
-5016.04 3797.42 5012.37 3795.26 5007.96 3795.26 c
-5002.56 3795.26 4999 3800.12 4999 3807.32 c
-4999 3817.76 5006.57 3825.14 5021 3829.1 c
-h
-5058 3785 m
-f*
-5095.46 3868 m
-5060.73 3868 l
-5060.73 3863.66 l
-5068.65 3862.58 5071 3860.42 5071 3853.04 c
-5071 3800.12 l
-5071 3792.74 5068.95 3790.76 5060.73 3789.32 c
-5060.73 3785 l
-5103.93 3785 l
-5103.93 3789.32 l
-5097.63 3790.22 5096 3792.74 5096 3799.58 c
-5096 3847.64 l
-5096 3848.54 5098.51 3851.78 5100.51 3853.76 c
-5104.29 3856.64 5107.53 3858.16 5110.77 3858.16 c
-5117.79 3858.16 5121 3854 5121 3843.14 c
-5121 3799.58 l
-5121 3792.2 5118.9 3789.86 5111.85 3789.32 c
-5111.85 3785 l
-5153.97 3785 l
-5153.97 3789.32 l
-5147.67 3790.04 5146 3792.74 5146 3799.58 c
-5146 3847.64 l
-5146 3848.54 5148.43 3851.6 5150.37 3853.58 c
-5154.33 3856.64 5157.57 3858.16 5160.81 3858.16 c
-5167.65 3858.16 5170 3853.82 5170 3843.14 c
-5170 3799.58 l
-5170 3792.02 5168.1 3789.86 5161.53 3789.32 c
-5161.53 3785 l
-5204.37 3785 l
-5204.37 3789 l
-5197.35 3789.37 5195 3791.6 5195 3799.58 c
-5195 3844.76 l
-5195 3860.24 5185.6 3870.16 5171.07 3870.16 c
-5160.81 3870.16 5153.97 3866.01 5144.61 3854.48 c
-5139.21 3865.82 5132.91 3870.16 5121.57 3870.16 c
-5110.2 3870.16 5102.21 3865.29 5095.46 3854.48 c
-h
-5207.94 3785 m
-f*
-5280.36 3807.5 m
-5272.98 3798.68 5267.58 3795.48 5259.84 3795.48 c
-5253 3795.48 5247.6 3798.53 5244 3804.62 c
-5240.58 3810.36 5239.14 3816.45 5238.42 3829 c
-5283.78 3829 l
-5282.7 3843.99 5280 3852.3 5274.42 3859.34 c
-5268.66 3866.36 5260.2 3870.16 5250.12 3870.16 c
-5227.62 3870.16 5212.5 3852.33 5212.5 3826.04 c
-5212.5 3799.76 5227.26 3782.48 5249.58 3782.48 c
-5264.16 3782.48 5272.98 3788.06 5284.68 3804.98 c
-h
-5237.52 3836 m
-5238.06 3857.42 5241.3 3864.16 5250.12 3864.16 c
-5255.34 3864.16 5258.58 3861.42 5260.02 3856.1 c
-5260.92 3852.68 5261.28 3847.64 5261.64 3838.46 c
-5261.64 3836 l
-h
-5287.92 3785 m
-f*
-1 i
-4372.55 3749.75 914.4 15.5999 re
-f
-0.2 i
-1924.26 1536.36 m
-1913.64 1525.2 1907.88 1520.88 1899.06 1517.46 c
-1893.84 1515.3 1887.9 1514.58 1882.86 1514.58 c
-1870.98 1514.58 1859.64 1520.74 1854.42 1529.88 c
-1849.2 1539.42 1847 1552.2 1847 1570.38 c
-1847 1607.64 1858.23 1627.7 1879.8 1627.7 c
-1888.26 1627.7 1896 1624.38 1903.74 1617.36 c
-1911.48 1610.52 1915.62 1604.4 1921.92 1590.72 c
-1926.42 1590.72 l
-1926.42 1633.16 l
-1921.56 1633.16 l
-1918.86 1626.43 1917.06 1624.56 1913.64 1624.56 c
-1911.84 1624.56 1909.5 1625.28 1905.36 1627.08 c
-1894.92 1631.4 1886.1 1633.7 1877.46 1633.7 c
-1841.64 1633.7 1815 1605.84 1815 1568.76 c
-1815 1531.68 1841.21 1505.58 1878.54 1505.58 c
-1899.24 1505.58 1911.48 1511.88 1929.66 1531.86 c
-h
-1935.96 1509 m
-f*
-1999.18 1506.66 m
-2006.78 1509.36 2011.02 1510.08 2022.5 1511.34 c
-2033.66 1512.6 l
-2033.66 1517 l
-2025.74 1517.35 2024 1519.63 2024 1527.18 c
-2024 1592 l
-1987.4 1592 l
-1987.4 1587.66 l
-1996.4 1586.94 1999 1584.78 1999 1577.04 c
-1999 1526.1 l
-1992.88 1520.16 1989.18 1518.48 1983.8 1518.48 c
-1976.42 1518.48 1974 1522 1974 1530.96 c
-1974 1592 l
-1939.88 1592 l
-1939.88 1587.66 l
-1947.26 1586.22 1949 1584.6 1949 1577.04 c
-1949 1531.68 l
-1949 1515.84 1957.89 1506.48 1972.64 1506.48 c
-1982.16 1506.48 1988.56 1509.36 1999.18 1518.36 c
-h
-2037.08 1509 m
-f*
-2075.28 1592 m
-2041.22 1592 l
-2041.22 1587.66 l
-2048.96 1586.58 2051 1584.24 2051 1577.04 c
-2051 1524.12 l
-2051 1516.74 2049.19 1514.76 2041.22 1513.32 c
-2041.22 1509 l
-2089.1 1509 l
-2089.1 1513.32 l
-2078.12 1514.04 2076 1516.38 2076 1527.54 c
-2076 1561.56 l
-2076 1570.92 2081.02 1578.66 2086.94 1578.66 c
-2088.38 1578.66 2090 1577.4 2091.98 1574.52 c
-2095.4 1569.66 2098.1 1568.04 2102.78 1568.04 c
-2109.44 1568.04 2114.12 1573.08 2114.12 1579.92 c
-2114.12 1588.2 2108 1594.16 2099.54 1594.16 c
-2090.55 1594.16 2083.73 1589.47 2075.28 1577.22 c
-h
-2115.92 1509 m
-f*
-2156.28 1592 m
-2122.22 1592 l
-2122.22 1587.66 l
-2129.96 1586.58 2132 1584.24 2132 1577.04 c
-2132 1524.12 l
-2132 1516.74 2130.19 1514.76 2122.22 1513.32 c
-2122.22 1509 l
-2170.1 1509 l
-2170.1 1513.32 l
-2159.12 1514.04 2157 1516.38 2157 1527.54 c
-2157 1561.56 l
-2157 1570.92 2162.02 1578.66 2167.94 1578.66 c
-2169.38 1578.66 2171 1577.4 2172.98 1574.52 c
-2176.4 1569.66 2179.1 1568.04 2183.78 1568.04 c
-2190.44 1568.04 2195.12 1573.08 2195.12 1579.92 c
-2195.12 1588.2 2189 1594.16 2180.54 1594.16 c
-2171.55 1594.16 2164.73 1589.47 2156.28 1577.22 c
-h
-2196.92 1509 m
-f*
-2268.36 1531.5 m
-2260.98 1522.68 2255.58 1519.48 2247.84 1519.48 c
-2241 1519.48 2235.6 1522.53 2232 1528.62 c
-2228.58 1534.36 2227.14 1540.45 2226.42 1553 c
-2271.78 1553 l
-2270.7 1567.99 2268 1576.3 2262.42 1583.34 c
-2256.66 1590.36 2248.2 1594.16 2238.12 1594.16 c
-2215.62 1594.16 2200.5 1576.33 2200.5 1550.04 c
-2200.5 1523.76 2215.26 1506.48 2237.58 1506.48 c
-2252.16 1506.48 2260.98 1512.06 2272.68 1528.98 c
-h
-2225.52 1560 m
-2226.06 1581.42 2229.3 1588.16 2238.12 1588.16 c
-2243.34 1588.16 2246.58 1585.42 2248.02 1580.1 c
-2248.92 1576.68 2249.28 1571.64 2249.64 1562.46 c
-2249.64 1560 l
-h
-2275.92 1509 m
-f*
-2313.82 1592 m
-2279.78 1592 l
-2279.78 1587.66 l
-2287.7 1586.4 2289 1584.6 2289 1577.04 c
-2289 1524.12 l
-2289 1516.56 2287.61 1514.94 2279.78 1513.32 c
-2279.78 1509 l
-2323.16 1509 l
-2323.16 1513.32 l
-2316.5 1514.22 2314 1516.92 2314 1523.58 c
-2314 1571.64 l
-2314 1572.36 2315.4 1574.16 2317.4 1575.96 c
-2321.36 1579.92 2325.68 1582.16 2330 1582.16 c
-2336.12 1582.16 2339 1577.27 2339 1567.14 c
-2339 1523.58 l
-2339 1516.92 2336.71 1514.04 2330.72 1513.32 c
-2330.72 1509 l
-2373.02 1509 l
-2373.02 1513.32 l
-2366 1513.86 2364 1516.02 2364 1523.58 c
-2364 1568.76 l
-2364 1584.24 2354.54 1594.16 2339.9 1594.16 c
-2328.96 1594.16 2320.57 1589.11 2313.82 1578.48 c
-h
-2376.08 1509 m
-f*
-2430.9 1592 m
-2414 1592 l
-2414 1622.4 l
-2409.48 1622.4 l
-2398.5 1606.92 2391.3 1598.82 2379.6 1588.92 c
-2379.6 1584 l
-2389 1584 l
-2389 1525.74 l
-2389 1514.04 2396.73 1506.84 2409.12 1506.84 c
-2421.18 1506.84 2428.38 1512.24 2435.76 1527 c
-2431.26 1528.98 l
-2427.66 1522.14 2424.78 1519.84 2421 1519.84 c
-2415.96 1519.84 2414 1522.83 2414 1529.88 c
-2414 1584 l
-2430.9 1584 l
-h
-2435.94 1509 m
-f*
-2481 1509 m
-f*
-2585.94 1631 m
-2483.88 1631 l
-2483.88 1626 l
-2496.3 1625.29 2500 1622.63 2500 1613.4 c
-2500 1526.28 l
-2500 1516.92 2497.44 1514.94 2483.88 1513.5 c
-2483.88 1509 l
-2548.68 1509 l
-2548.68 1514 l
-2532.12 1514.69 2529 1516.77 2529 1526.28 c
-2529 1568.22 l
-2547.28 1567.86 2553.91 1561.2 2556.42 1540.32 c
-2560.92 1540.32 l
-2560.92 1601.16 l
-2556.42 1601.16 l
-2553.19 1580.64 2546.92 1574.34 2529 1574.34 c
-2529 1616.1 l
-2529 1622.76 2531.32 1625 2540.4 1625 c
-2557.14 1625 2567.58 1621.8 2573.16 1615.2 c
-2577.12 1610.7 2579.1 1605.84 2581.62 1594.5 c
-2585.94 1594.5 l
-h
-2590.98 1509 m
-f*
-2630.28 1592 m
-2596.22 1592 l
-2596.22 1587.66 l
-2603.96 1586.58 2606 1584.24 2606 1577.04 c
-2606 1524.12 l
-2606 1516.74 2604.19 1514.76 2596.22 1513.32 c
-2596.22 1509 l
-2644.1 1509 l
-2644.1 1513.32 l
-2633.12 1514.04 2631 1516.38 2631 1527.54 c
-2631 1561.56 l
-2631 1570.92 2636.02 1578.66 2641.94 1578.66 c
-2643.38 1578.66 2645 1577.4 2646.98 1574.52 c
-2650.4 1569.66 2653.1 1568.04 2657.78 1568.04 c
-2664.44 1568.04 2669.12 1573.08 2669.12 1579.92 c
-2669.12 1588.2 2663 1594.16 2654.54 1594.16 c
-2645.55 1594.16 2638.73 1589.47 2630.28 1577.22 c
-h
-2670.92 1509 m
-f*
-2756.14 1520.52 m
-2754.34 1518.72 l
-2753.8 1518.18 2753.26 1518 2752.36 1518 c
-2749.84 1518 2749 1519.44 2749 1522.5 c
-2749 1569.48 l
-2749 1584.78 2735.16 1594.16 2712.94 1594.16 c
-2692.6 1594.16 2678.92 1584.97 2678.92 1571.46 c
-2678.92 1563.9 2683.24 1559.58 2690.62 1559.58 c
-2697.82 1559.58 2702.86 1563.9 2702.86 1570.02 c
-2702.86 1572.54 2701.96 1574.88 2699.62 1577.76 c
-2698 1579.56 2697.46 1580.64 2697.46 1581.72 c
-2697.46 1585.5 2702.32 1588.16 2708.8 1588.16 c
-2719.42 1588.16 2724 1583.37 2724 1572.54 c
-2724 1559.4 l
-2702.89 1552.92 2694.41 1549.68 2687.56 1545.18 c
-2679.46 1539.78 2676 1533.48 2676 1525.56 c
-2676 1514.58 2684.07 1506.48 2695.3 1506.48 c
-2705.74 1506.48 2714.02 1510.08 2723.92 1519.08 c
-2725.9 1509.9 2729.86 1506.48 2738.68 1506.48 c
-2746.42 1506.48 2752 1509.36 2758.84 1516.74 c
-h
-2724 1527 m
-2719.04 1521.42 2715.37 1519.26 2710.96 1519.26 c
-2705.56 1519.26 2702 1524.12 2702 1531.32 c
-2702 1541.76 2709.57 1549.14 2724 1553.1 c
-h
-2761 1509 m
-f*
-2798.46 1592 m
-2763.73 1592 l
-2763.73 1587.66 l
-2771.65 1586.58 2774 1584.42 2774 1577.04 c
-2774 1524.12 l
-2774 1516.74 2771.95 1514.76 2763.73 1513.32 c
-2763.73 1509 l
-2806.93 1509 l
-2806.93 1513.32 l
-2800.63 1514.22 2799 1516.74 2799 1523.58 c
-2799 1571.64 l
-2799 1572.54 2801.51 1575.78 2803.51 1577.76 c
-2807.29 1580.64 2810.53 1582.16 2813.77 1582.16 c
-2820.79 1582.16 2824 1578 2824 1567.14 c
-2824 1523.58 l
-2824 1516.2 2821.9 1513.86 2814.85 1513.32 c
-2814.85 1509 l
-2856.97 1509 l
-2856.97 1513.32 l
-2850.67 1514.04 2849 1516.74 2849 1523.58 c
-2849 1571.64 l
-2849 1572.54 2851.43 1575.6 2853.37 1577.58 c
-2857.33 1580.64 2860.57 1582.16 2863.81 1582.16 c
-2870.65 1582.16 2873 1577.82 2873 1567.14 c
-2873 1523.58 l
-2873 1516.02 2871.1 1513.86 2864.53 1513.32 c
-2864.53 1509 l
-2907.37 1509 l
-2907.37 1513 l
-2900.35 1513.37 2898 1515.6 2898 1523.58 c
-2898 1568.76 l
-2898 1584.24 2888.6 1594.16 2874.07 1594.16 c
-2863.81 1594.16 2856.97 1590.01 2847.61 1578.48 c
-2842.21 1589.82 2835.91 1594.16 2824.57 1594.16 c
-2813.2 1594.16 2805.21 1589.29 2798.46 1578.48 c
-h
-2910.94 1509 m
-f*
-2983.36 1531.5 m
-2975.98 1522.68 2970.58 1519.48 2962.84 1519.48 c
-2956 1519.48 2950.6 1522.53 2947 1528.62 c
-2943.58 1534.36 2942.14 1540.45 2941.42 1553 c
-2986.78 1553 l
-2985.7 1567.99 2983 1576.3 2977.42 1583.34 c
-2971.66 1590.36 2963.2 1594.16 2953.12 1594.16 c
-2930.62 1594.16 2915.5 1576.33 2915.5 1550.04 c
-2915.5 1523.76 2930.26 1506.48 2952.58 1506.48 c
-2967.16 1506.48 2975.98 1512.06 2987.68 1528.98 c
-h
-2940.52 1560 m
-2941.06 1581.42 2944.3 1588.16 2953.12 1588.16 c
-2958.34 1588.16 2961.58 1585.42 2963.02 1580.1 c
-2963.92 1576.68 2964.28 1571.64 2964.64 1562.46 c
-2964.64 1560 l
-h
-2990.92 1509 m
-f*
-1 i
-1805.75 1474.55 1184.4 15.5999 re
-f
-1 g
-2414.15 1700.15 m
-2577.35 1853.75 l
-2495.75 1853.75 l
-2495.75 2004.95 l
-2330.15 2004.95 l
-2330.15 1853.75 l
-2247.35 1853.75 l
-f*
-0 g
-2414.15 1700.15 m
-2577.35 1853.75 l
-2495.75 1853.75 l
-2495.75 2004.95 l
-2330.15 2004.95 l
-2330.15 1853.75 l
-2247.35 1853.75 l
-2414.15 1700.15 l
-2414.15 1713.35 l
-2272.55 1842.95 l
-2339.75 1842.95 l
-2339.75 1994.15 l
-2486.15 1994.15 l
-2486.15 1842.95 l
-2552.15 1842.95 l
-2414.15 1713.35 l
-2414.15 1700.15 l
-f*
-0.201248 i
-4490.33 1642 m
-4376.22 1642 l
-4376.22 1637 l
-4390.11 1636.2 4394 1633.18 4394 1622.72 c
-4394 1525.32 l
-4394 1514.85 4391.17 1512.64 4376.22 1511.03 c
-4376.22 1506 l
-4448.67 1506 l
-4448.67 1511 l
-4430.15 1511.81 4427 1514.23 4427 1525.32 c
-4427 1572.21 l
-4447.22 1571.81 4454.55 1564.36 4457.32 1541.02 c
-4462.35 1541.02 l
-4462.35 1609.04 l
-4457.32 1609.04 l
-4453.76 1586.1 4446.82 1579.05 4427 1579.05 c
-4427 1625.74 l
-4427 1633.19 4429.52 1635 4439.41 1635 c
-4458.13 1635 4469.8 1631.64 4476.04 1624.74 c
-4480.47 1619.71 4482.68 1614.27 4485.5 1601.59 c
-4490.33 1601.59 l
-h
-4495.96 1506 m
-f*
-4539.19 1599 m
-4500.84 1599 l
-4500.84 1593.95 l
-4509.49 1592.74 4512 1590.12 4512 1582.07 c
-4512 1522.9 l
-4512 1514.65 4509.93 1512.44 4500.84 1510.83 c
-4500.84 1506 l
-4554.37 1506 l
-4554.37 1510.83 l
-4542.09 1511.63 4540 1514.25 4540 1526.73 c
-4540 1564.76 l
-4540 1575.23 4545.49 1583.88 4551.95 1583.88 c
-4553.56 1583.88 4555.37 1582.47 4557.59 1579.25 c
-4561.41 1573.82 4564.43 1572.01 4569.66 1572.01 c
-4577.11 1572.01 4582.34 1577.64 4582.34 1585.29 c
-4582.34 1594.55 4575.5 1601.41 4566.04 1601.41 c
-4556.1 1601.41 4548.54 1596.12 4539.19 1582.27 c
-h
-4584.35 1506 m
-f*
-4679.19 1518.88 m
-4677.18 1516.87 l
-4676.57 1516.26 4675.97 1516.06 4674.96 1516.06 c
-4672.15 1516.06 4671 1517.67 4671 1521.09 c
-4671 1573.62 l
-4671 1590.73 4655.6 1601.42 4630.89 1601.42 c
-4608.15 1601.42 4592.85 1591.06 4592.85 1575.83 c
-4592.85 1567.38 4597.69 1562.55 4605.94 1562.55 c
-4613.99 1562.55 4619.62 1567.38 4619.62 1574.22 c
-4619.62 1577.04 4618.61 1579.66 4616 1582.88 c
-4614.19 1584.89 4613.58 1586.1 4613.58 1587.3 c
-4613.58 1591.53 4619.02 1594.42 4626.26 1594.42 c
-4638.14 1594.42 4643.86 1589.08 4643.86 1577.04 c
-4643.86 1562.35 l
-4619.91 1555.1 4610.29 1551.48 4602.51 1546.45 c
-4593.46 1540.41 4589 1533.37 4589 1524.52 c
-4589 1512.24 4598.27 1503.18 4611.17 1503.18 c
-4622.84 1503.18 4632.1 1507.21 4643.17 1517.27 c
-4645.38 1507.01 4649.81 1503.18 4659.67 1503.18 c
-4668.32 1503.18 4674.56 1506.4 4682.21 1514.65 c
-h
-4643 1526.13 m
-4637.55 1519.89 4633.52 1517.47 4628.68 1517.47 c
-4622.64 1517.47 4618 1522.91 4618 1530.96 c
-4618 1542.63 4626.61 1550.88 4643 1555.31 c
-h
-4684.62 1506 m
-f*
-4725.4 1599 m
-4686.7 1599 l
-4686.7 1593.95 l
-4695.55 1592.74 4698 1590.32 4698 1582.07 c
-4698 1522.9 l
-4698 1514.65 4695.74 1512.44 4686.7 1510.83 c
-4686.7 1506 l
-4735 1506 l
-4735 1510.83 l
-4727.95 1511.84 4726 1514.65 4726 1522.3 c
-4726 1576.03 l
-4726 1577.04 4728.87 1580.66 4731.18 1582.88 c
-4735.4 1586.1 4739.02 1588.42 4742.65 1588.42 c
-4750.5 1588.42 4754 1583.59 4754 1571 c
-4754 1522.3 l
-4754 1514.05 4751.68 1511.43 4743.85 1510.83 c
-4743.85 1506 l
-4790.95 1506 l
-4790.95 1510.83 l
-4783.9 1511.64 4782 1514.65 4782 1522.3 c
-4782 1576.03 l
-4782 1577.04 4784.73 1580.46 4786.92 1582.68 c
-4791.35 1586.1 4794.97 1588.42 4798.59 1588.42 c
-4806.24 1588.42 4809 1583.38 4809 1571 c
-4809 1522.3 l
-4809 1513.85 4806.85 1511.43 4799.4 1510.83 c
-4799.4 1506 l
-4847.3 1506 l
-4847.3 1511 l
-4839.45 1511.4 4837 1513.78 4837 1522.3 c
-4837 1572.81 l
-4837 1590.12 4826.43 1601.42 4810.07 1601.42 c
-4798.59 1601.42 4790.95 1596.73 4780.48 1583.68 c
-4774.44 1596.36 4767.4 1601.42 4754.72 1601.42 c
-4741.95 1601.42 4732.98 1595.91 4725.4 1583.68 c
-h
-4850.64 1506 m
-f*
-4930.9 1531.16 m
-4922.65 1521.29 4916.61 1517.18 4907.96 1517.18 c
-4900.31 1517.18 4894.27 1520.77 4890.25 1527.94 c
-4886.43 1534.54 4884.82 1541.56 4884.01 1556 c
-4934.73 1556 l
-4933.52 1572.36 4930.5 1581.43 4924.26 1589.12 c
-4917.82 1596.96 4908.36 1601.42 4897.09 1601.42 c
-4871.94 1601.42 4855.03 1581.4 4855.03 1551.88 c
-4855.03 1522.5 4871.53 1503.18 4896.49 1503.18 c
-4912.79 1503.18 4922.65 1509.42 4935.73 1528.34 c
-h
-4883 1563 m
-4883.61 1586.96 4887.23 1594.42 4897.09 1594.42 c
-4902.93 1594.42 4906.55 1591.38 4908.16 1585.49 c
-4909.17 1581.67 4909.57 1576.03 4909.97 1565.77 c
-4909.97 1563 l
-h
-4939.35 1506 m
-f*
-5036.16 1601.59 m
-5036.16 1645.22 l
-5030.37 1645.22 l
-5028.96 1639.82 5027.55 1638.42 5023.93 1638.42 c
-5022.12 1638.42 5019.7 1639.03 5015.47 1640.43 c
-5006.22 1643.86 4999.78 1645.02 4991.93 1645.02 c
-4964.56 1645.02 4948 1629.54 4948 1604.01 c
-4948 1598.98 4948.75 1594.75 4950.07 1590.73 c
-4954.29 1580.06 4965.16 1570.6 4982.27 1562.35 c
-4995.75 1555.91 l
-5013.46 1547.46 5018 1542.22 5018 1531.56 c
-5018 1517.67 5008.25 1509.18 4992.94 1509.18 c
-4981.26 1509.18 4971.6 1513.89 4963.96 1523.31 c
-4958.12 1530.75 4955.3 1537.6 4951.88 1551.88 c
-4946.04 1551.88 l
-4946.04 1502.18 l
-4951.88 1502.18 l
-4953.09 1507.41 4954.7 1509.02 4957.92 1509.02 c
-4959.53 1509.02 4961.74 1508.42 4966.17 1507.01 c
-4976.03 1503.59 4983.48 1502.18 4992.33 1502.18 c
-5022.12 1502.18 5042 1519.28 5042 1544.64 c
-5042 1559.73 5033.04 1574.83 5020.1 1581.27 c
-4990.52 1595.96 l
-4974.22 1604.01 4970 1608.84 4970 1618.7 c
-4970 1631.18 4978.37 1638.02 4991.93 1638.02 c
-5000.99 1638.02 5009.44 1634.47 5016.68 1627.55 c
-5023.53 1620.51 5026.75 1614.67 5030.77 1601.59 c
-h
-5050.89 1506 m
-f*
-5129.9 1531.16 m
-5121.65 1521.29 5115.61 1517.18 5106.96 1517.18 c
-5099.31 1517.18 5093.27 1520.77 5089.25 1527.94 c
-5085.43 1534.54 5083.82 1541.56 5083.01 1556 c
-5133.73 1556 l
-5132.52 1572.36 5129.5 1581.43 5123.26 1589.12 c
-5116.82 1596.96 5107.36 1601.42 5096.09 1601.42 c
-5070.94 1601.42 5054.03 1581.4 5054.03 1551.88 c
-5054.03 1522.5 5070.53 1503.18 5095.49 1503.18 c
-5111.79 1503.18 5121.65 1509.42 5134.73 1528.34 c
-h
-5082 1563 m
-5082.61 1586.96 5086.23 1594.42 5096.09 1594.42 c
-5101.93 1594.42 5105.55 1591.38 5107.16 1585.49 c
-5108.17 1581.67 5108.57 1576.03 5108.97 1565.77 c
-5108.97 1563 l
-h
-5138.35 1506 m
-f*
-5199.38 1599 m
-5180 1599 l
-5180 1632.79 l
-5175.43 1632.79 l
-5163.16 1615.48 5155.11 1606.42 5142.02 1595.35 c
-5142.02 1590 l
-5152 1590 l
-5152 1524.72 l
-5152 1511.64 5160.84 1503.59 5175.03 1503.59 c
-5188.51 1503.59 5196.56 1509.62 5204.81 1526.12 c
-5199.78 1528.34 l
-5195.76 1520.69 5192.54 1517.59 5188.31 1517.59 c
-5182.68 1517.59 5180 1521.09 5180 1529.34 c
-5180 1590 l
-5199.38 1590 l
-h
-5205.02 1506 m
-f*
-5255.31 1506 m
-f*
-5258.22 1642 m
-5258.22 1637 l
-5272.11 1636.2 5276 1632.98 5276 1622.72 c
-5276 1525.32 l
-5276 1515.06 5272.97 1512.64 5258.22 1511.03 c
-5258.22 1506 l
-5323.02 1506 l
-5357.03 1506 5380 1521.09 5380 1543.83 c
-5380 1553.09 5376.03 1561.14 5368.71 1567.38 c
-5361.66 1573.62 5354.82 1576.44 5340.73 1579.46 c
-5364.08 1586.3 5373 1594.55 5373 1609.84 c
-5373 1630.57 5354.39 1642 5320.41 1642 c
-h
-5308 1575.03 m
-5314.17 1575.03 l
-5334.9 1575.03 5345 1564.36 5345 1542.02 c
-5345 1522.5 5336.73 1513 5320.41 1513 c
-5311.55 1513 5308 1516.26 5308 1524.72 c
-h
-5308 1626.15 m
-5308 1633.39 5310.85 1636 5319 1636 c
-5333.08 1636 5340 1627.35 5340 1608.44 c
-5340 1587.3 5333.23 1581.67 5308 1581.07 c
-h
-5389.23 1506 m
-f*
-1041.33 4883 m
-927.22 4883 l
-927.22 4878 l
-941.106 4877.2 945 4874.18 945 4863.72 c
-945 4766.32 l
-945 4755.85 942.171 4753.64 927.22 4752.03 c
-927.22 4747 l
-999.67 4747 l
-999.67 4752 l
-981.155 4752.81 978 4755.23 978 4766.32 c
-978 4813.21 l
-998.215 4812.81 1005.55 4805.36 1008.32 4782.02 c
-1013.35 4782.02 l
-1013.35 4850.04 l
-1008.32 4850.04 l
-1004.76 4827.1 997.819 4820.05 978 4820.05 c
-978 4866.74 l
-978 4874.19 980.521 4876 990.412 4876 c
-1009.13 4876 1020.8 4872.64 1027.04 4865.74 c
-1031.47 4860.71 1033.68 4855.27 1036.5 4842.59 c
-1041.33 4842.59 l
-h
-1046.96 4747 m
-f*
-1090.19 4840 m
-1051.84 4840 l
-1051.84 4834.95 l
-1060.49 4833.74 1063 4831.12 1063 4823.07 c
-1063 4763.9 l
-1063 4755.65 1060.93 4753.44 1051.84 4751.83 c
-1051.84 4747 l
-1105.37 4747 l
-1105.37 4751.83 l
-1093.09 4752.63 1091 4755.25 1091 4767.73 c
-1091 4805.76 l
-1091 4816.23 1096.49 4824.88 1102.95 4824.88 c
-1104.56 4824.88 1106.37 4823.47 1108.59 4820.25 c
-1112.41 4814.82 1115.43 4813.01 1120.66 4813.01 c
-1128.11 4813.01 1133.34 4818.64 1133.34 4826.29 c
-1133.34 4835.55 1126.5 4842.41 1117.04 4842.41 c
-1107.1 4842.41 1099.54 4837.12 1090.19 4823.27 c
-h
-1135.35 4747 m
-f*
-1230.19 4759.88 m
-1228.18 4757.87 l
-1227.57 4757.26 1226.97 4757.06 1225.96 4757.06 c
-1223.15 4757.06 1222 4758.67 1222 4762.09 c
-1222 4814.62 l
-1222 4831.73 1206.6 4842.42 1181.89 4842.42 c
-1159.15 4842.42 1143.85 4832.06 1143.85 4816.83 c
-1143.85 4808.38 1148.69 4803.55 1156.94 4803.55 c
-1164.99 4803.55 1170.62 4808.38 1170.62 4815.22 c
-1170.62 4818.04 1169.61 4820.66 1167 4823.88 c
-1165.19 4825.89 1164.58 4827.1 1164.58 4828.3 c
-1164.58 4832.53 1170.02 4835.42 1177.26 4835.42 c
-1189.14 4835.42 1194.86 4830.08 1194.86 4818.04 c
-1194.86 4803.35 l
-1170.91 4796.1 1161.29 4792.48 1153.51 4787.45 c
-1144.46 4781.41 1140 4774.37 1140 4765.52 c
-1140 4753.24 1149.27 4744.18 1162.17 4744.18 c
-1173.84 4744.18 1183.1 4748.21 1194.17 4758.27 c
-1196.38 4748.01 1200.81 4744.18 1210.67 4744.18 c
-1219.32 4744.18 1225.56 4747.4 1233.21 4755.65 c
-h
-1194 4767.13 m
-1188.55 4760.89 1184.52 4758.47 1179.68 4758.47 c
-1173.64 4758.47 1169 4763.91 1169 4771.96 c
-1169 4783.63 1177.61 4791.88 1194 4796.31 c
-h
-1235.62 4747 m
-f*
-1277.4 4840 m
-1238.7 4840 l
-1238.7 4834.95 l
-1247.55 4833.74 1250 4831.32 1250 4823.07 c
-1250 4763.9 l
-1250 4755.65 1247.74 4753.44 1238.7 4751.83 c
-1238.7 4747 l
-1287 4747 l
-1287 4751.83 l
-1279.95 4752.84 1278 4755.65 1278 4763.3 c
-1278 4817.03 l
-1278 4818.04 1280.87 4821.66 1283.18 4823.88 c
-1287.4 4827.1 1291.02 4829.42 1294.65 4829.42 c
-1302.5 4829.42 1306 4824.59 1306 4812 c
-1306 4763.3 l
-1306 4755.05 1303.68 4752.43 1295.85 4751.83 c
-1295.85 4747 l
-1342.95 4747 l
-1342.95 4751.83 l
-1335.9 4752.64 1334 4755.65 1334 4763.3 c
-1334 4817.03 l
-1334 4818.04 1336.73 4821.46 1338.92 4823.68 c
-1343.35 4827.1 1346.97 4829.42 1350.59 4829.42 c
-1358.24 4829.42 1361 4824.38 1361 4812 c
-1361 4763.3 l
-1361 4754.85 1358.85 4752.43 1351.4 4751.83 c
-1351.4 4747 l
-1399.3 4747 l
-1399.3 4752 l
-1391.45 4752.4 1389 4754.78 1389 4763.3 c
-1389 4813.81 l
-1389 4831.12 1378.43 4842.42 1362.07 4842.42 c
-1350.59 4842.42 1342.95 4837.73 1332.48 4824.68 c
-1326.44 4837.36 1319.4 4842.42 1306.72 4842.42 c
-1293.95 4842.42 1284.98 4836.91 1277.4 4824.68 c
-h
-1402.64 4747 m
-f*
-1481.9 4772.16 m
-1473.65 4762.29 1467.61 4758.18 1458.96 4758.18 c
-1451.31 4758.18 1445.27 4761.77 1441.25 4768.94 c
-1437.43 4775.54 1435.82 4782.56 1435.01 4797 c
-1485.73 4797 l
-1484.52 4813.36 1481.5 4822.43 1475.26 4830.12 c
-1468.82 4837.96 1459.36 4842.42 1448.09 4842.42 c
-1422.94 4842.42 1406.03 4822.4 1406.03 4792.88 c
-1406.03 4763.5 1422.53 4744.18 1447.49 4744.18 c
-1463.79 4744.18 1473.65 4750.42 1486.73 4769.34 c
-h
-1434 4804 m
-1434.61 4827.96 1438.23 4835.42 1448.09 4835.42 c
-1453.93 4835.42 1457.55 4832.38 1459.16 4826.49 c
-1460.17 4822.67 1460.57 4817.03 1460.97 4806.77 c
-1460.97 4804 l
-h
-1490.35 4747 m
-f*
-1587.16 4842.59 m
-1587.16 4886.22 l
-1581.37 4886.22 l
-1579.96 4880.82 1578.55 4879.42 1574.93 4879.42 c
-1573.12 4879.42 1570.7 4880.03 1566.47 4881.43 c
-1557.22 4884.86 1550.78 4886.02 1542.93 4886.02 c
-1515.56 4886.02 1499 4870.54 1499 4845.01 c
-1499 4839.98 1499.75 4835.75 1501.07 4831.73 c
-1505.29 4821.06 1516.16 4811.6 1533.27 4803.35 c
-1546.75 4796.91 l
-1564.46 4788.46 1569 4783.22 1569 4772.56 c
-1569 4758.67 1559.25 4750.18 1543.94 4750.18 c
-1532.26 4750.18 1522.6 4754.89 1514.96 4764.31 c
-1509.12 4771.75 1506.3 4778.6 1502.88 4792.88 c
-1497.04 4792.88 l
-1497.04 4743.18 l
-1502.88 4743.18 l
-1504.09 4748.41 1505.7 4750.02 1508.92 4750.02 c
-1510.53 4750.02 1512.74 4749.42 1517.17 4748.01 c
-1527.03 4744.59 1534.48 4743.18 1543.33 4743.18 c
-1573.12 4743.18 1593 4760.28 1593 4785.64 c
-1593 4800.73 1584.04 4815.83 1571.1 4822.27 c
-1541.52 4836.96 l
-1525.22 4845.01 1521 4849.84 1521 4859.7 c
-1521 4872.18 1529.37 4879.02 1542.93 4879.02 c
-1551.99 4879.02 1560.44 4875.47 1567.68 4868.55 c
-1574.53 4861.51 1577.75 4855.67 1581.77 4842.59 c
-h
-1601.89 4747 m
-f*
-1681.9 4772.16 m
-1673.65 4762.29 1667.61 4758.18 1658.96 4758.18 c
-1651.31 4758.18 1645.27 4761.77 1641.25 4768.94 c
-1637.43 4775.54 1635.82 4782.56 1635.01 4797 c
-1685.73 4797 l
-1684.52 4813.36 1681.5 4822.43 1675.26 4830.12 c
-1668.82 4837.96 1659.36 4842.42 1648.09 4842.42 c
-1622.94 4842.42 1606.03 4822.4 1606.03 4792.88 c
-1606.03 4763.5 1622.53 4744.18 1647.49 4744.18 c
-1663.79 4744.18 1673.65 4750.42 1686.73 4769.34 c
-h
-1634 4804 m
-1634.61 4827.96 1638.23 4835.42 1648.09 4835.42 c
-1653.93 4835.42 1657.55 4832.38 1659.16 4826.49 c
-1660.17 4822.67 1660.57 4817.03 1660.97 4806.77 c
-1660.97 4804 l
-h
-1690.35 4747 m
-f*
-1750.38 4840 m
-1731 4840 l
-1731 4873.79 l
-1726.43 4873.79 l
-1714.16 4856.48 1706.11 4847.42 1693.02 4836.35 c
-1693.02 4831 l
-1703 4831 l
-1703 4765.72 l
-1703 4752.64 1711.84 4744.59 1726.03 4744.59 c
-1739.51 4744.59 1747.56 4750.62 1755.81 4767.12 c
-1750.78 4769.34 l
-1746.76 4761.69 1743.54 4758.59 1739.31 4758.59 c
-1733.68 4758.59 1731 4762.09 1731 4770.34 c
-1731 4831 l
-1750.38 4831 l
-h
-1756.02 4747 m
-f*
-1807.31 4747 m
-f*
-1944.66 4752.03 m
-1935.81 4752.03 1933.59 4754.85 1922.72 4780 c
-1877.85 4885.82 l
-1872.21 4885.82 l
-1827.53 4775.58 l
-1819.89 4756.66 1817.47 4753.84 1807.81 4752.03 c
-1807.81 4747 l
-1848.66 4747 l
-1848.66 4752.03 l
-1836.79 4752.84 1832.16 4755.05 1832.16 4760.28 c
-1832.16 4762.9 1833.57 4767.53 1838 4778.6 c
-1841.02 4787 l
-1886.3 4787 l
-1893.14 4770.9 1895.56 4763.76 1895.56 4759.28 c
-1895.56 4754.85 1892.94 4753.04 1885.9 4752.63 c
-1879.46 4752.03 l
-1879.46 4747 l
-1944.66 4747 l
-h
-1844.04 4795 m
-1862.95 4843.4 l
-1883.28 4795 l
-h
-1951.3 4747 m
-f*
-1 i
-32 w
-942.95 6694.55 m
-618.95 6336.95 432.95 5816.15 432.95 5268.95 c
-432.95 4305.35 1001.75 3495.35 1751.75 3390.95 c
-S
-954.95 6592.55 m
-921.35 6668.15 l
-844.55 6699.35 l
-1072.55 6822.95 l
-f*
-1682.15 3323.75 m
-1720.55 3398.15 l
-1697.75 3478.55 l
-1936.55 3378.95 l
-f*
-0.564706 g
-4962.95 2235.35 m
-4962.95 2345.75 4871.75 2436.95 4760.15 2436.95 c
-4263.35 2436.95 l
-4151.75 2436.95 4060.55 2345.75 4060.55 2235.35 c
-4060.55 2097.35 l
-4060.55 1986.95 4151.75 1895.75 4263.35 1895.75 c
-4760.15 1895.75 l
-4871.75 1895.75 4962.95 1986.95 4962.95 2097.35 c
-f*
-1 g
-4898.15 2292.95 m
-4898.15 2402.15 4809.35 2490.95 4697.75 2490.95 c
-4206.95 2490.95 l
-4096.55 2490.95 4006.55 2402.15 4006.55 2292.95 c
-4006.55 2158.55 l
-4006.55 2049.35 4095.35 1960.55 4206.95 1960.55 c
-4697.75 1960.55 l
-4809.35 1960.55 4898.15 2049.35 4898.15 2158.55 c
-f*
-8 w
-0 g
-4898.15 2292.95 m
-4898.15 2402.15 4809.35 2490.95 4697.75 2490.95 c
-4206.95 2490.95 l
-4096.55 2490.95 4006.55 2402.15 4006.55 2292.95 c
-4006.55 2158.55 l
-4006.55 2049.35 4095.35 1960.55 4206.95 1960.55 c
-4697.75 1960.55 l
-4809.35 1960.55 4898.15 2049.35 4898.15 2158.55 c
-h
-S
-0.201248 i
-4239.33 2332 m
-4125.22 2332 l
-4125.22 2327 l
-4139.11 2326.2 4143 2323.18 4143 2312.72 c
-4143 2215.32 l
-4143 2204.85 4140.17 2202.64 4125.22 2201.03 c
-4125.22 2196 l
-4197.67 2196 l
-4197.67 2201 l
-4179.15 2201.81 4176 2204.23 4176 2215.32 c
-4176 2262.21 l
-4196.22 2261.81 4203.55 2254.36 4206.32 2231.02 c
-4211.35 2231.02 l
-4211.35 2299.04 l
-4206.32 2299.04 l
-4202.76 2276.1 4195.82 2269.05 4176 2269.05 c
-4176 2315.74 l
-4176 2323.19 4178.52 2325 4188.41 2325 c
-4207.13 2325 4218.8 2321.64 4225.04 2314.74 c
-4229.47 2309.71 4231.68 2304.27 4234.5 2291.59 c
-4239.33 2291.59 l
-h
-4244.96 2196 m
-f*
-4289.19 2289 m
-4250.84 2289 l
-4250.84 2283.95 l
-4259.49 2282.74 4262 2280.12 4262 2272.07 c
-4262 2212.9 l
-4262 2204.65 4259.93 2202.44 4250.84 2200.83 c
-4250.84 2196 l
-4304.37 2196 l
-4304.37 2200.83 l
-4292.09 2201.63 4290 2204.25 4290 2216.73 c
-4290 2254.76 l
-4290 2265.23 4295.49 2273.88 4301.95 2273.88 c
-4303.56 2273.88 4305.37 2272.47 4307.59 2269.25 c
-4311.41 2263.82 4314.43 2262.01 4319.66 2262.01 c
-4327.11 2262.01 4332.34 2267.64 4332.34 2275.29 c
-4332.34 2284.55 4325.5 2291.41 4316.04 2291.41 c
-4306.1 2291.41 4298.54 2286.12 4289.19 2272.27 c
-h
-4334.35 2196 m
-f*
-4429.19 2208.88 m
-4427.18 2206.87 l
-4426.57 2206.26 4425.97 2206.06 4424.96 2206.06 c
-4422.15 2206.06 4421 2207.67 4421 2211.09 c
-4421 2263.62 l
-4421 2280.73 4405.6 2291.42 4380.89 2291.42 c
-4358.15 2291.42 4342.85 2281.06 4342.85 2265.83 c
-4342.85 2257.38 4347.69 2252.55 4355.94 2252.55 c
-4363.99 2252.55 4369.62 2257.38 4369.62 2264.22 c
-4369.62 2267.04 4368.61 2269.66 4366 2272.88 c
-4364.19 2274.89 4363.58 2276.1 4363.58 2277.3 c
-4363.58 2281.53 4369.02 2284.42 4376.26 2284.42 c
-4388.14 2284.42 4393.86 2279.08 4393.86 2267.04 c
-4393.86 2252.35 l
-4369.91 2245.1 4360.29 2241.48 4352.51 2236.45 c
-4343.46 2230.41 4339 2223.37 4339 2214.52 c
-4339 2202.24 4348.27 2193.18 4361.17 2193.18 c
-4372.84 2193.18 4382.1 2197.21 4393.17 2207.27 c
-4395.38 2197.01 4399.81 2193.18 4409.67 2193.18 c
-4418.32 2193.18 4424.56 2196.4 4432.21 2204.65 c
-h
-4393 2216.13 m
-4387.55 2209.89 4383.52 2207.47 4378.68 2207.47 c
-4372.64 2207.47 4368 2212.91 4368 2220.96 c
-4368 2232.63 4376.61 2240.88 4393 2245.31 c
-h
-4434.62 2196 m
-f*
-4476.4 2289 m
-4437.7 2289 l
-4437.7 2283.95 l
-4446.55 2282.74 4449 2280.32 4449 2272.07 c
-4449 2212.9 l
-4449 2204.65 4446.74 2202.44 4437.7 2200.83 c
-4437.7 2196 l
-4486 2196 l
-4486 2200.83 l
-4478.95 2201.84 4477 2204.65 4477 2212.3 c
-4477 2266.03 l
-4477 2267.04 4479.87 2270.66 4482.18 2272.88 c
-4486.4 2276.1 4490.02 2278.42 4493.65 2278.42 c
-4501.5 2278.42 4505 2273.59 4505 2261 c
-4505 2212.3 l
-4505 2204.05 4502.68 2201.43 4494.85 2200.83 c
-4494.85 2196 l
-4541.95 2196 l
-4541.95 2200.83 l
-4534.9 2201.64 4533 2204.65 4533 2212.3 c
-4533 2266.03 l
-4533 2267.04 4535.73 2270.46 4537.92 2272.68 c
-4542.35 2276.1 4545.97 2278.42 4549.59 2278.42 c
-4557.24 2278.42 4560 2273.38 4560 2261 c
-4560 2212.3 l
-4560 2203.85 4557.85 2201.43 4550.4 2200.83 c
-4550.4 2196 l
-4598.3 2196 l
-4598.3 2201 l
-4590.45 2201.4 4588 2203.78 4588 2212.3 c
-4588 2262.81 l
-4588 2280.12 4577.43 2291.42 4561.07 2291.42 c
-4549.59 2291.42 4541.95 2286.73 4531.48 2273.68 c
-4525.44 2286.36 4518.4 2291.42 4505.72 2291.42 c
-4492.95 2291.42 4483.98 2285.91 4476.4 2273.68 c
-h
-4601.64 2196 m
-f*
-4679.9 2221.16 m
-4671.65 2211.29 4665.61 2207.18 4656.96 2207.18 c
-4649.31 2207.18 4643.27 2210.77 4639.25 2217.94 c
-4635.43 2224.54 4633.82 2231.56 4633.01 2246 c
-4683.73 2246 l
-4682.52 2262.36 4679.5 2271.43 4673.26 2279.12 c
-4666.82 2286.96 4657.36 2291.42 4646.09 2291.42 c
-4620.94 2291.42 4604.03 2271.4 4604.03 2241.88 c
-4604.03 2212.5 4620.53 2193.18 4645.49 2193.18 c
-4661.79 2193.18 4671.65 2199.42 4684.73 2218.34 c
-h
-4632 2253 m
-4632.61 2276.96 4636.23 2284.42 4646.09 2284.42 c
-4651.93 2284.42 4655.55 2281.38 4657.16 2275.49 c
-4658.17 2271.67 4658.57 2266.03 4658.97 2255.77 c
-4658.97 2253 l
-h
-4688.35 2196 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -4724 -2196]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-0.564706 g
-3968.15 1929.35 m
-3833.75 1966.55 l
-3929.75 2021.75 l
-3776.15 2031.35 l
-3818.15 2100.95 l
-3670.55 2080.55 l
-3653.75 2152.55 l
-3533.75 2106.95 l
-3458.15 2170.55 l
-3382.55 2106.95 l
-3262.55 2152.55 l
-3244.55 2080.55 l
-3095.75 2100.95 l
-3140.15 2031.35 l
-2986.55 2021.75 l
-3082.55 1966.55 l
-2946.95 1929.35 l
-3082.55 1894.55 l
-2986.55 1838.15 l
-3140.15 1829.75 l
-3095.75 1760.15 l
-3244.55 1779.35 l
-3262.55 1708.55 l
-3382.55 1752.95 l
-3458.15 1689.35 l
-3533.75 1752.95 l
-3653.75 1708.55 l
-3670.55 1779.35 l
-3818.15 1760.15 l
-3776.15 1829.75 l
-3929.75 1838.15 l
-3833.75 1894.55 l
-f*
-1 g
-3908.15 1989.35 m
-3773.75 2026.55 l
-3869.75 2081.75 l
-3716.15 2091.35 l
-3758.15 2160.95 l
-3610.55 2140.55 l
-3593.75 2212.55 l
-3473.75 2166.95 l
-3398.15 2230.55 l
-3322.55 2166.95 l
-3202.55 2212.55 l
-3184.55 2140.55 l
-3035.75 2160.95 l
-3080.15 2091.35 l
-2926.55 2081.75 l
-3022.55 2026.55 l
-2886.95 1989.35 l
-3022.55 1954.55 l
-2926.55 1898.15 l
-3080.15 1889.75 l
-3035.75 1820.15 l
-3184.55 1839.35 l
-3202.55 1768.55 l
-3322.55 1812.95 l
-3398.15 1749.35 l
-3473.75 1812.95 l
-3593.75 1768.55 l
-3610.55 1839.35 l
-3758.15 1820.15 l
-3716.15 1889.75 l
-3869.75 1898.15 l
-3773.75 1954.55 l
-f*
-0 g
-3908.15 1989.35 m
-3773.75 2026.55 l
-3869.75 2081.75 l
-3716.15 2091.35 l
-3758.15 2160.95 l
-3610.55 2140.55 l
-3593.75 2212.55 l
-3473.75 2166.95 l
-3398.15 2230.55 l
-3322.55 2166.95 l
-3202.55 2212.55 l
-3184.55 2140.55 l
-3035.75 2160.95 l
-3080.15 2091.35 l
-2926.55 2081.75 l
-3022.55 2026.55 l
-2886.95 1989.35 l
-3022.55 1954.55 l
-2926.55 1898.15 l
-3080.15 1889.75 l
-3035.75 1820.15 l
-3184.55 1839.35 l
-3202.55 1768.55 l
-3322.55 1812.95 l
-3398.15 1749.35 l
-3473.75 1812.95 l
-3593.75 1768.55 l
-3610.55 1839.35 l
-3758.15 1820.15 l
-3716.15 1889.75 l
-3869.75 1898.15 l
-3773.75 1954.55 l
-3908.15 1989.35 l
-3831.35 1989.35 l
-3722.15 1961.75 l
-3802.55 1914.95 l
-3682.55 1907.75 l
-3719.75 1844.15 l
-3596.15 1862.15 l
-3579.35 1794.95 l
-3470.15 1835.75 l
-3398.15 1775.75 l
-3326.15 1835.75 l
-3215.75 1794.95 l
-3200.15 1862.15 l
-3076.55 1844.15 l
-3114.95 1907.75 l
-2993.75 1914.95 l
-3074.15 1961.75 l
-2964.95 1989.35 l
-3074.15 2018.15 l
-2993.75 2066.15 l
-3114.95 2073.35 l
-3076.55 2135.75 l
-3200.15 2118.95 l
-3215.75 2186.15 l
-3326.15 2144.15 l
-3398.15 2204.15 l
-3470.15 2144.15 l
-3579.35 2186.15 l
-3596.15 2118.95 l
-3719.75 2135.75 l
-3682.55 2073.35 l
-3802.55 2066.15 l
-3722.15 2018.15 l
-3831.35 1989.35 l
-3908.15 1989.35 l
-f*
-0.2 i
-3220.08 2040.76 m
-3200.08 1966.52 l
-3197.52 1957.88 3194.48 1955.64 3184.08 1955 c
-3184.08 1951 l
-3234 1951 l
-3234 1955 l
-3224.72 1955.48 3222.48 1956.76 3222.48 1961.88 c
-3222.48 1963.64 3222.8 1965.4 3223.76 1969.08 c
-3223.92 1969.88 l
-3224.08 1970.68 l
-3243.76 2042.52 l
-3246.16 2050.84 3248.56 2053.08 3256.72 2054.04 c
-3256.72 2058 l
-3222.8 2058 l
-3173.2 1981.24 l
-3164.56 2058 l
-3129.2 2058 l
-3129.2 2054 l
-3139.28 2053.52 3140.72 2052.89 3140.72 2048.44 c
-3140.72 2046.2 3140.08 2043.32 3138.96 2039.16 c
-3121.52 1979.48 l
-3115.12 1958.68 3114 1956.92 3105.36 1955 c
-3105.36 1951 l
-3138.48 1951 l
-3138.48 1955 l
-3128.24 1956.28 3125.68 1958.2 3125.68 1964.76 c
-3125.68 1967.48 3126.48 1971.48 3128.72 1979.48 c
-3144.88 2038.52 l
-3155.6 1949.08 l
-3160.08 1949.08 l
-h
-3252.24 1951 m
-f*
-3321.44 1971.32 m
-3314.88 1962.52 3312.48 1959.76 3309.92 1959.76 c
-3308.64 1959.76 3308 1960.86 3308 1962.52 c
-3308 1966.52 3309.44 1973.08 3313.44 1986.2 c
-3324.8 2023.96 l
-3307.04 2022.84 l
-3304.16 2013.4 l
-3302.72 2021.56 3299.2 2025.08 3292.32 2025.08 c
-3272.64 2025.08 3249 1994.27 3249 1969.24 c
-3249 1957.08 3255.74 1948.92 3265.92 1948.92 c
-3275.68 1948.92 3283.04 1954.68 3292.16 1970.04 c
-3290.24 1963.48 3290 1961.56 3290 1959.32 c
-3290 1953.4 3294.76 1948.76 3300.64 1948.76 c
-3308.16 1948.76 3315.52 1955 3324.8 1968.92 c
-h
-3294.56 2018.2 m
-3298.08 2017.88 3300.56 2015 3300.56 2010.68 c
-3300.56 2001.08 3295.24 1983.32 3288.96 1972.28 c
-3284.64 1964.44 3279.84 1959.92 3275.52 1959.92 c
-3271.36 1959.92 3268 1963.75 3268 1968.92 c
-3268 1977.24 3273.42 1993.24 3280.16 2005.08 c
-3284.96 2013.56 3290.24 2018.52 3294.56 2018.2 c
-h
-3332 1951 m
-f*
-3366.56 2024.92 m
-3350.24 2022.36 3344 2021.4 3335.68 2020.44 c
-3335.68 2016 l
-3342.88 2015.69 3344.32 2015.07 3344.32 2012.12 c
-3344.32 2010.52 3343.04 2004.76 3340.8 1996.44 c
-3324.8 1934.36 l
-3321.76 1923.8 3320.48 1922.84 3312.8 1923 c
-3312.8 1918 l
-3352.64 1918 l
-3352.64 1923 l
-3344.64 1923.14 3342.24 1924.16 3342.24 1927.64 c
-3342.24 1929.88 3343.36 1934.68 3346.4 1945.88 c
-3347.52 1949.72 3347.52 1950.04 3348.16 1952.44 c
-3353.76 1949.56 3355.68 1948.92 3359.04 1948.92 c
-3380.8 1948.92 3403.36 1977.88 3403.36 2005.56 c
-3403.36 2017.4 3396.64 2025.08 3386.08 2025.08 c
-3376.96 2025.08 3369.92 2019.92 3360.48 2006.52 c
-h
-3377.12 2013.56 m
-3381.28 2013.24 3383.68 2009.56 3383.36 2004.44 c
-3382.72 1993.88 3377.6 1978.04 3371.84 1967.64 c
-3366.88 1959 3361.76 1953.92 3356.32 1953.92 c
-3352.8 1953.92 3350.08 1956.75 3350.08 1960.28 c
-3350.08 1963 3351.84 1969.56 3356.16 1984.12 c
-3359.68 1995.8 3361.12 1999.8 3363.52 2003.48 c
-3367.52 2009.72 3372.96 2013.88 3377.12 2013.56 c
-h
-3412 1951 m
-f*
-3447.56 2024.92 m
-3431.24 2022.36 3425 2021.4 3416.68 2020.44 c
-3416.68 2016 l
-3423.88 2015.69 3425.32 2015.07 3425.32 2012.12 c
-3425.32 2010.52 3424.04 2004.76 3421.8 1996.44 c
-3405.8 1934.36 l
-3402.76 1923.8 3401.48 1922.84 3393.8 1923 c
-3393.8 1918 l
-3433.64 1918 l
-3433.64 1923 l
-3425.64 1923.14 3423.24 1924.16 3423.24 1927.64 c
-3423.24 1929.88 3424.36 1934.68 3427.4 1945.88 c
-3428.52 1949.72 3428.52 1950.04 3429.16 1952.44 c
-3434.76 1949.56 3436.68 1948.92 3440.04 1948.92 c
-3461.8 1948.92 3484.36 1977.88 3484.36 2005.56 c
-3484.36 2017.4 3477.64 2025.08 3467.08 2025.08 c
-3457.96 2025.08 3450.92 2019.92 3441.48 2006.52 c
-h
-3458.12 2013.56 m
-3462.28 2013.24 3464.68 2009.56 3464.36 2004.44 c
-3463.72 1993.88 3458.6 1978.04 3452.84 1967.64 c
-3447.88 1959 3442.76 1953.92 3437.32 1953.92 c
-3433.8 1953.92 3431.08 1956.75 3431.08 1960.28 c
-3431.08 1963 3432.84 1969.56 3437.16 1984.12 c
-3440.68 1995.8 3442.12 1999.8 3444.52 2003.48 c
-3448.52 2009.72 3453.96 2013.88 3458.12 2013.56 c
-h
-3493 1951 m
-f*
-3526.56 1973.56 m
-3524.32 1970.36 l
-3520.16 1964.12 3516.48 1960.56 3514.08 1960.56 c
-3512.8 1960.56 3512 1961.77 3512 1963.16 c
-3512 1964.6 3512.62 1968.76 3513.12 1971.48 c
-3527.68 2024.92 l
-3519.22 2023 3508.26 2021.4 3496.04 2020.44 c
-3496.04 2016 l
-3497.44 2016 l
-3502.24 2016 3505.48 2014.44 3505.48 2011.48 c
-3505.48 2010.2 3504.71 2007.8 3503.68 2005.08 c
-3494.4 1970.68 l
-3493.12 1966.04 3493 1961.88 3493 1959.64 c
-3493 1953.56 3497.2 1949.56 3503.36 1949.56 c
-3512.96 1949.56 3518.88 1954.36 3530.08 1971.32 c
-h
-3522.88 2060.4 m
-3517.44 2060.4 3513 2055.46 3513 2050.04 c
-3513 2043.8 3517.26 2039.4 3523.04 2039.4 c
-3529.12 2039.4 3534 2043.86 3534 2049.56 c
-3534 2055.48 3529 2060.4 3522.88 2060.4 c
-h
-3536.48 1951 m
-f*
-3611.36 1972.6 m
-3604.96 1962.68 3602.88 1960.56 3600.16 1960.56 c
-3598.88 1960.56 3598 1961.63 3598 1963.16 c
-3598 1964.76 3598.94 1968.12 3601.92 1977.08 c
-3607.68 1994.52 l
-3610.24 2002.04 3612 2009.08 3612 2012.92 c
-3612 2020.76 3607.78 2025.08 3600.16 2025.08 c
-3594.24 2025.08 3588.48 2022.62 3584.16 2018.36 c
-3578.24 2012.76 3575.2 2008.92 3564.48 1993.08 c
-3574.72 2024.76 l
-3564.48 2022.52 3551.68 2020.92 3542.72 2020.6 c
-3542.72 2015.8 l
-3549.44 2015.65 3551.36 2014.92 3551.36 2012.12 c
-3551.36 2010.2 3549.12 2001.72 3544 1983.64 c
-3540.32 1970.68 3539.2 1966.52 3535.04 1951 c
-3554.4 1951 l
-3561.92 1978.68 3567.68 1992.6 3577.6 2005.56 c
-3580.8 2009.88 3585.76 2013.08 3588.64 2013.08 c
-3590.72 2013.08 3593 2011.63 3593 2010.04 c
-3593 2009.56 3592.54 2008.28 3591.84 2006.68 c
-3583.04 1980.12 l
-3580.48 1972.44 3579 1963.32 3579 1959.16 c
-3579 1953.08 3582.84 1949.56 3589.44 1949.56 c
-3599.04 1949.56 3605.6 1955 3614.88 1970.52 c
-h
-3624.96 1951 m
-f*
-3702.48 2020 m
-3684.72 2020 l
-3679.28 2023.58 3674.48 2025.08 3667.12 2025.08 c
-3647.44 2025.08 3631 2012.05 3631 1995.8 c
-3631 1987.64 3635.35 1981.88 3644.4 1978.2 c
-3631.28 1970.84 3629 1968.6 3629 1962.68 c
-3629 1957.56 3631.89 1954.52 3638.96 1952.12 c
-3629.04 1949.72 3625.84 1948.44 3622 1945.4 c
-3619.44 1943.16 3618 1939.32 3618 1935.48 c
-3618 1925.08 3629.56 1919 3647.76 1919 c
-3670.32 1919 3686 1928.72 3686 1942.52 c
-3686 1952.28 3679.6 1957.56 3662.16 1962.52 c
-3653.68 1964.92 l
-3648.56 1966.36 3645 1968.6 3645 1971 c
-3645 1973.56 3647.68 1976.28 3650 1976.28 c
-3650.8 1976.28 3651.92 1976.24 3653.2 1976.12 c
-3654.96 1975.64 3656.24 1975 3658.16 1975 c
-3665.2 1975 3672.4 1977.09 3678.48 1980.92 c
-3687.76 1986.2 3693 1994.36 3693 2003.96 c
-3693 2006.64 3692.59 2008.32 3691.76 2011 c
-3702.48 2011 l
-h
-3644.4 1950.04 m
-3646.32 1949.88 3658.48 1945.72 3662 1944.12 c
-3666.48 1941.88 3669 1939.16 3669 1935 c
-3669 1927.96 3661.8 1924 3649.36 1924 c
-3638.96 1924 3632 1929.1 3632 1936.44 c
-3632 1939.48 3633.32 1942.2 3636.24 1945.24 c
-3638.32 1947.32 3643.12 1950.2 3644.4 1950.04 c
-h
-3666.8 2020.08 m
-3670.96 2020.08 3674 2016.19 3674 2010.52 c
-3674 2005.08 3672.08 1997.4 3669.36 1991.48 c
-3666 1984.12 3661.84 1980 3656.88 1980 c
-3652.56 1980 3650 1983.52 3650 1989.88 c
-3650 1996.28 3652.79 2006.04 3656.24 2012.12 c
-3659.28 2017.4 3662.64 2020.08 3666.8 2020.08 c
-h
-3706 1951 m
-f*
-1 i
-16 w
-3681.35 1641.35 m
-3749.75 1571.75 3842.15 1533.35 3938.15 1533.35 c
-4139.75 1533.35 4304.15 1702.55 4304.15 1911.35 c
-4304.15 1926.95 4304.15 1942.55 4301.75 1956.95 c
-S
-3759.35 1642.55 m
-3700.55 1625.75 l
-3668.15 1572.95 l
-3603.35 1756.55 l
-f*
-4449.35 3286.55 m
-4382.15 3365.75 4295.75 3410.15 4204.55 3410.15 c
-4095.35 3410.15 3990.95 3345.35 3922.55 3233.75 c
-S
-3892.55 3297.35 m
-3935.75 3251.75 l
-3996.95 3248.15 l
-3867.35 3104.15 l
-f*
-3825.35 2710.55 m
-3833.75 2628.95 3864.95 2553.35 3911.75 2494.55 c
-S
-3844.55 2488.55 m
-3899.75 2516.15 l
-3921.35 2574.95 l
-4019.75 2406.95 l
-f*
-2993.75 3830.15 m
-2837.75 3830.15 2690.15 3794.15 2579.75 3729.35 c
-S
-2595.35 3800.15 m
-2609.75 3740.15 l
-2661.35 3706.55 l
-2476.55 3647.75 l
-f*
-4568.15 3344.15 m
-4443.35 3527.75 4288.55 3671.75 4116.95 3762.95 c
-S
-4185.35 3790.55 m
-4139.75 3748.55 l
-4134.95 3687.35 l
-3993.35 3819.35 l
-f*
-0.279998 i
-550 3530.52 m
-550 3388 l
-550 3372.32 546.055 3368.96 524.919 3367 c
-524.919 3360 l
-617.878 3360 l
-617.878 3367 l
-596.039 3369.8 593 3372.88 593 3392.76 c
-593 3516.52 l
-593 3536.68 597.24 3540.88 617.878 3542.28 c
-617.878 3549 l
-547.319 3549 l
-491.319 3417.12 l
-435.319 3549 l
-364.48 3549 l
-364.48 3542.28 l
-384.92 3540.6 389 3536.96 389 3522.4 c
-389 3389.4 l
-389 3372.6 385.417 3369.24 363.92 3367 c
-363.92 3360 l
-429.439 3360 l
-429.439 3367 l
-406.479 3368.68 400.999 3374 400.999 3394.72 c
-400.999 3526.32 l
-471.719 3360 l
-479.279 3360 l
-h
-624.318 3360 m
-f*
-682 3489 m
-628.48 3489 l
-628.48 3482.36 l
-640.8 3479.84 643 3477.32 643 3465.84 c
-643 3383.52 l
-643 3372.04 641.082 3369.8 628.48 3366.72 c
-628.48 3360 l
-695.4 3360 l
-695.4 3366.72 l
-685.6 3368.12 682 3372.04 682 3382.68 c
-h
-662.92 3553.2 m
-650.32 3553.2 641 3543.8 641 3531.64 c
-641 3519.32 650.154 3510.2 662.36 3510.2 c
-674.68 3510.2 684 3519.39 684 3531.64 c
-684 3543.68 674.569 3553.2 662.92 3553.2 c
-h
-701.839 3360 m
-f*
-797.12 3451.28 m
-797.12 3491.8 l
-791.04 3491.8 l
-789.36 3487.66 787.68 3486.2 784.04 3486.2 c
-782.36 3486.2 779.84 3486.78 775.36 3488.24 c
-766.4 3491.32 759.96 3492.36 753.52 3492.36 c
-728.04 3492.36 710 3475.03 710 3451.56 c
-710 3433.08 721.353 3420.2 749.32 3408.16 c
-768.64 3399.76 776 3392.76 776 3383.8 c
-776 3372.88 767.68 3365.08 755.2 3365.08 c
-735.6 3365.08 722.72 3377.86 716.841 3402.56 c
-709.001 3402.56 l
-709.001 3356.36 l
-716.001 3356.36 l
-719.081 3362.24 720.761 3364.2 723.281 3364.2 c
-724.681 3364.2 726.921 3363.64 729.721 3362.52 c
-737.841 3359.16 752.121 3356.08 759.96 3356.08 c
-785.44 3356.08 803.001 3373.44 803.001 3398.64 c
-803.001 3418.52 792.383 3430.84 764.44 3442.32 c
-745.401 3450.44 738.001 3457.44 738.001 3466.96 c
-738.001 3476.2 745.654 3483.36 756.041 3483.36 c
-763.601 3483.36 770.881 3480.22 777.041 3474.24 c
-782.92 3468.64 786 3463.32 790.2 3451.28 c
-h
-810.919 3360 m
-f*
-906.12 3451.28 m
-906.12 3491.8 l
-900.04 3491.8 l
-898.36 3487.66 896.68 3486.2 893.04 3486.2 c
-891.36 3486.2 888.84 3486.78 884.36 3488.24 c
-875.4 3491.32 868.96 3492.36 862.52 3492.36 c
-837.04 3492.36 819 3475.03 819 3451.56 c
-819 3433.08 830.353 3420.2 858.32 3408.16 c
-877.64 3399.76 885 3392.76 885 3383.8 c
-885 3372.88 876.68 3365.08 864.2 3365.08 c
-844.6 3365.08 831.72 3377.86 825.841 3402.56 c
-818.001 3402.56 l
-818.001 3356.36 l
-825.001 3356.36 l
-828.081 3362.24 829.761 3364.2 832.281 3364.2 c
-833.681 3364.2 835.921 3363.64 838.721 3362.52 c
-846.841 3359.16 861.121 3356.08 868.96 3356.08 c
-894.44 3356.08 912.001 3373.44 912.001 3398.64 c
-912.001 3418.52 901.383 3430.84 873.44 3442.32 c
-854.401 3450.44 847.001 3457.44 847.001 3466.96 c
-847.001 3476.2 854.654 3483.36 865.041 3483.36 c
-872.601 3483.36 879.881 3480.22 886.041 3474.24 c
-891.92 3468.64 895 3463.32 899.2 3451.28 c
-h
-919.919 3360 m
-f*
-978 3489 m
-924.48 3489 l
-924.48 3482.36 l
-936.8 3479.84 939 3477.32 939 3465.84 c
-939 3383.52 l
-939 3372.04 937.082 3369.8 924.48 3366.72 c
-924.48 3360 l
-991.4 3360 l
-991.4 3366.72 l
-981.6 3368.12 978 3372.04 978 3382.68 c
-h
-958.92 3553.2 m
-946.32 3553.2 937 3543.8 937 3531.64 c
-937 3519.32 946.154 3510.2 958.36 3510.2 c
-970.68 3510.2 980 3519.39 980 3531.64 c
-980 3543.68 970.569 3553.2 958.92 3553.2 c
-h
-997.839 3360 m
-f*
-1056.72 3489 m
-1002.88 3489 l
-1002.88 3482.36 l
-1015.2 3480.4 1018 3477.6 1018 3465.84 c
-1018 3383.52 l
-1018 3371.76 1015.72 3369.24 1002.88 3366.72 c
-1002.88 3360 l
-1070.36 3360 l
-1070.36 3366.72 l
-1060 3368.12 1057 3372.32 1057 3382.68 c
-1057 3457.44 l
-1057 3458.56 1058.81 3461.36 1061.4 3464.16 c
-1067.56 3470.32 1074.28 3474.36 1081 3474.36 c
-1090.52 3474.36 1095 3466.58 1095 3450.44 c
-1095 3382.68 l
-1095 3372.32 1091.44 3367.84 1082.12 3366.72 c
-1082.12 3360 l
-1147.92 3360 l
-1147.92 3366.72 l
-1137 3367.56 1134 3370.92 1134 3382.68 c
-1134 3452.96 l
-1134 3477.04 1119.24 3492.36 1096.4 3492.36 c
-1079.75 3492.36 1066.99 3484.55 1056.72 3468.08 c
-h
-1152.68 3360 m
-f*
-1287.96 3471 m
-1287.96 3486 l
-1251.56 3486 l
-1239.24 3490.68 1231.4 3492.36 1220.2 3492.36 c
-1186.88 3492.36 1164 3473.91 1164 3447.36 c
-1164 3437.84 1167.15 3428.6 1173.44 3420.76 c
-1179.6 3414.04 1184.92 3410.4 1198.08 3404.8 c
-1175.96 3397.52 1165.4 3386.6 1165.4 3372.04 c
-1165.4 3360.56 1170.3 3355.52 1187.72 3349.08 c
-1170.08 3346.56 1161 3339.56 1161 3328.08 c
-1161 3311.84 1181.94 3302 1217.12 3302 c
-1263.88 3302 1288 3316.67 1288 3344.6 c
-1288 3366.16 1270.73 3379 1242.32 3379 c
-1224.12 3379 l
-1201.72 3379 1196.12 3380.97 1196.12 3388.84 c
-1196.12 3397.24 1204.24 3403.12 1215.16 3403.12 c
-1240.64 3403.12 1241.48 3403.12 1250.72 3407.04 c
-1267.8 3414.04 1277 3426.36 1277 3444 c
-1277 3455.02 1273.48 3463.28 1265.28 3471 c
-h
-1243.72 3345 m
-1258.84 3345 1266 3340.66 1266 3331.44 c
-1266 3318.56 1250.64 3311 1223 3311 c
-1198.36 3311 1186 3317.53 1186 3330.04 c
-1186 3335.75 1187.86 3338.74 1195.28 3345 c
-h
-1219.92 3483.36 m
-1233.36 3483.36 1239 3473.11 1239 3447.36 c
-1239 3421.04 1233.87 3410.96 1220.2 3410.96 c
-1206.76 3410.96 1202 3421.04 1202 3447.08 c
-1202 3473.4 1206.96 3483.36 1219.92 3483.36 c
-h
-1293 3360 m
-f*
-717.639 3087.56 m
-709.519 3087.56 l
-699.999 3065.72 694.679 3057.04 684.879 3048.08 c
-673.399 3037.72 657.719 3033 635.879 3033 c
-618.8 3033 614 3036.57 614 3048.36 c
-614 3180.52 l
-614 3201.52 617.886 3205.16 642.039 3206.28 c
-642.039 3213 l
-544.32 3213 l
-544.32 3206 l
-563.36 3204.9 568 3200.48 568 3186.4 c
-568 3050.88 l
-568 3036.6 564.42 3033.52 544.32 3031 c
-544.32 3024 l
-706.159 3024 l
-h
-725.759 3024 m
-f*
-783 3153 m
-729.48 3153 l
-729.48 3146.36 l
-741.8 3143.84 744 3141.32 744 3129.84 c
-744 3047.52 l
-744 3036.04 742.082 3033.8 729.48 3030.72 c
-729.48 3024 l
-796.4 3024 l
-796.4 3030.72 l
-786.6 3032.12 783 3036.04 783 3046.68 c
-h
-763.92 3217.2 m
-751.32 3217.2 742 3207.8 742 3195.64 c
-742 3183.32 751.154 3174.2 763.36 3174.2 c
-775.68 3174.2 785 3183.39 785 3195.64 c
-785 3207.68 775.569 3217.2 763.92 3217.2 c
-h
-802.839 3024 m
-f*
-863.72 3153 m
-809.88 3153 l
-809.88 3146.36 l
-822.2 3144.4 825 3141.6 825 3129.84 c
-825 3047.52 l
-825 3035.76 822.717 3033.24 809.88 3030.72 c
-809.88 3024 l
-877.359 3024 l
-877.359 3030.72 l
-867 3032.12 864 3036.32 864 3046.68 c
-864 3121.44 l
-864 3122.56 865.811 3125.36 868.4 3128.16 c
-874.56 3134.32 881.28 3138.36 888 3138.36 c
-897.52 3138.36 902 3130.58 902 3114.44 c
-902 3046.68 l
-902 3036.32 898.437 3031.84 889.12 3030.72 c
-889.12 3024 l
-954.919 3024 l
-954.919 3030.72 l
-943.999 3031.56 941 3034.92 941 3046.68 c
-941 3116.96 l
-941 3141.04 926.238 3156.36 903.399 3156.36 c
-886.75 3156.36 873.987 3148.55 863.72 3132.08 c
-h
-959.679 3024 m
-f*
-1102.64 3153.08 m
-1042.72 3153.08 l
-1042.72 3146.64 l
-1049.44 3145.52 l
-1056.44 3144.68 1059.24 3142.72 1059.24 3139.08 c
-1059.24 3136.56 1056.44 3131.52 1053.36 3128.44 c
-1018 3092.6 l
-1018 3213 l
-965.16 3213 l
-965.16 3206.56 l
-974.68 3205.72 979 3200.96 979 3190.32 c
-979 3047.52 l
-979 3036.6 974.675 3031.56 965.16 3030.72 c
-965.16 3024 l
-1032.08 3024 l
-1032.08 3030.72 l
-1018.92 3032.68 1018 3034.36 1018 3047.52 c
-1018 3079.44 l
-1023.96 3086.16 l
-1050.56 3048.64 l
-1055.6 3041.64 1057.28 3038.28 1057.28 3036.04 c
-1057.28 3032.68 1053.36 3031 1045.52 3030.72 c
-1045.52 3024 l
-1111.04 3024 l
-1111.04 3031 l
-1107.96 3031 1106.56 3031.78 1104.04 3034.92 c
-1049.72 3109.96 l
-1077.72 3139.36 1085 3144.4 1102.64 3146.64 c
-h
-1114.68 3024 m
-f*
-0.24 i
-4919.04 4974 m
-4919.04 5025.84 l
-4911.96 5025.84 l
-4910.28 5019.55 4908.6 5017.92 4904.28 5017.92 c
-4902.12 5017.92 4899.24 5018.64 4894.2 5020.32 c
-4883.16 5024.4 4875.48 5025.6 4866.12 5025.6 c
-4833.48 5025.6 4814 5007.21 4814 4976.88 c
-4814 4970.88 4814.8 4965.84 4816.2 4961.04 c
-4821.24 4948.32 4834.2 4937.04 4854.6 4927.2 c
-4870.68 4919.52 l
-4891.8 4909.44 4897 4903.2 4897 4890.48 c
-4897 4873.92 4885.46 4863.44 4867.32 4863.44 c
-4853.4 4863.44 4841.88 4869.17 4832.76 4880.64 c
-4825.8 4889.52 4822.44 4897.68 4818.36 4914.72 c
-4811.4 4914.72 l
-4811.4 4855.44 l
-4818.36 4855.44 l
-4819.8 4861.68 4821.72 4863.6 4825.56 4863.6 c
-4827.48 4863.6 4830.12 4862.88 4835.4 4861.2 c
-4847.16 4857.12 4856.04 4855.44 4866.6 4855.44 c
-4902.12 4855.44 4926 4875.84 4926 4906.08 c
-4926 4924.08 4915.25 4942.08 4899.72 4949.76 c
-4864.44 4967.28 l
-4845 4976.88 4840 4982.64 4840 4994.4 c
-4840 5009.28 4849.97 5017.6 4866.12 5017.6 c
-4876.92 5017.6 4887 5013.31 4895.64 5004.96 c
-4903.8 4996.56 4907.64 4989.6 4912.44 4974 c
-h
-4936.44 4860 m
-f*
-4998.96 4973.88 m
-4967.28 4973.88 4944 4949.01 4944 4914.72 c
-4944 4881.36 4967.04 4856.64 4998 4856.64 c
-5029.44 4856.64 5052 4881.36 5052 4914.96 c
-5052 4948.32 5029.06 4973.88 4998.96 4973.88 c
-h
-4998.24 4965.88 m
-5012.4 4965.88 5017 4953.21 5017 4912.32 c
-5017 4876.56 5012.19 4864.64 4998.24 4864.64 c
-4984.32 4864.64 4979 4876.73 4979 4911.12 c
-4979 4937.28 4980.27 4948.08 4984.08 4956.24 c
-4986.72 4962.72 4991.76 4965.88 4998.24 4965.88 c
-h
-5058 4860 m
-f*
-5140.24 4856.88 m
-5150.59 4860.48 5156.36 4861.44 5172 4863.12 c
-5186.88 4864.8 l
-5186.88 4871 l
-5176.32 4871.46 5174 4874.42 5174 4884.24 c
-5174 4971 l
-5125.2 4971 l
-5125.2 4964.88 l
-5137.2 4963.92 5140 4961.04 5140 4950.72 c
-5140 4882.8 l
-5132.11 4874.88 5127.33 4872.64 5120.4 4872.64 c
-5110.56 4872.64 5107 4877.33 5107 4889.28 c
-5107 4971 l
-5061.84 4971 l
-5061.84 4964.88 l
-5071.68 4962.96 5073 4960.8 5073 4950.72 c
-5073 4890.24 l
-5073 4869.12 5085.23 4856.64 5105.52 4856.64 c
-5117.97 4856.64 5126.35 4860.48 5140.24 4872.48 c
-h
-5191.44 4860 m
-f*
-5244.04 4971 m
-5197.96 4971 l
-5197.96 4964.88 l
-5208.28 4963.44 5211 4960.32 5211 4950.72 c
-5211 4880.16 l
-5211 4870.32 5208.59 4867.68 5197.96 4865.76 c
-5197.96 4860 l
-5261.8 4860 l
-5261.8 4865.76 l
-5247.16 4866.72 5245 4869.84 5245 4884.72 c
-5245 4930.08 l
-5245 4942.56 5251.39 4952.88 5258.92 4952.88 c
-5260.84 4952.88 5263 4951.2 5265.64 4947.36 c
-5270.2 4940.88 5273.8 4938.72 5280.04 4938.72 c
-5288.92 4938.72 5295.16 4945.44 5295.16 4954.56 c
-5295.16 4965.6 5287 4973.88 5275.72 4973.88 c
-5263.99 4973.88 5255.07 4967.54 5244.04 4950.96 c
-h
-5297.56 4860 m
-f*
-5396.88 4886.16 m
-5388 4876.08 5381.76 4872.64 5371.92 4872.64 c
-5351.04 4872.64 5338 4893.55 5338 4926.24 c
-5338 4950.96 5345.62 4965.88 5358 4965.88 c
-5361.84 4965.88 5365.44 4964.04 5366.88 4961.52 c
-5368.08 4959.36 5368.08 4959.36 5368.08 4949.28 c
-5368.32 4937.28 5372.4 4932 5381.52 4932 c
-5391.6 4932 5397.84 4937.76 5397.84 4947.12 c
-5397.84 4962 5381.76 4973.88 5360.88 4973.88 c
-5328 4973.88 5304 4948.53 5304 4913.52 c
-5304 4880.16 5325.36 4856.64 5355.36 4856.64 c
-5373.84 4856.64 5387.28 4864.08 5401.2 4881.84 c
-h
-5404.56 4860 m
-f*
-5499.48 4890 m
-5489.64 4878.24 5482.44 4873.64 5472.12 4873.64 c
-5463 4873.64 5455.8 4877.81 5451 4886.16 c
-5446.44 4893.89 5444.52 4902.1 5443.56 4919 c
-5504.04 4919 l
-5502.6 4938.82 5499 4949.81 5491.56 4959.12 c
-5483.88 4968.48 5472.6 4973.88 5459.16 4973.88 c
-5429.16 4973.88 5409 4949.97 5409 4914.72 c
-5409 4879.68 5428.68 4856.64 5458.44 4856.64 c
-5477.88 4856.64 5489.64 4864.08 5505.24 4886.64 c
-h
-5442.36 4928 m
-5443.08 4956.56 5447.4 4965.88 5459.16 4965.88 c
-5466.12 4965.88 5470.44 4962.11 5472.36 4954.8 c
-5473.56 4950.24 5474.04 4943.52 5474.52 4931.28 c
-5474.52 4928 l
-h
-5509.56 4860 m
-f*
-1 i
-4803.35 4811.75 705.6 21.5999 re
-f
-32 w
-3701.75 4956.95 1041.6 457.2 re
-Y
-3701.75 5392.55 m
-4733.75 4979.75 l
-S
-0 0 6120 7920 re
-Y
-3791.75 5439.35 m
-3735.35 5379.35 l
-3735.35 5296.55 l
-3533.75 5459.75 l
-f*
-0.24 i
-449 981.84 m
-449 971.28 443.084 966.48 429.36 966 c
-429.36 960 l
-505.2 960 l
-530.88 960 554.88 969.12 570 984.96 c
-583.92 999.12 592 1019.76 592 1042.8 c
-592 1092.24 558.49 1122 502.56 1122 c
-429.36 1122 l
-429.36 1116.24 l
-444.72 1114.8 449 1111.2 449 1100.16 c
-h
-488 1105.68 m
-488 1111.2 492.854 1114 502.32 1114 c
-519.36 1114 531.36 1106.35 539.76 1090.08 c
-546.48 1077.36 550 1059.84 550 1039.2 c
-550 1016.88 545.379 996.48 537.84 985.68 c
-529.68 974.16 517.92 968 502.08 968 c
-491.28 968 488 971.21 488 982.32 c
-h
-599.28 960 m
-f*
-696.48 990 m
-686.64 978.24 679.44 973.64 669.12 973.64 c
-660 973.64 652.8 977.813 648 986.16 c
-643.44 993.887 641.52 1002.1 640.56 1019 c
-701.04 1019 l
-699.6 1038.82 696 1049.81 688.56 1059.12 c
-680.88 1068.48 669.6 1073.88 656.16 1073.88 c
-626.16 1073.88 606 1049.97 606 1014.72 c
-606 979.68 625.68 956.64 655.44 956.64 c
-674.88 956.64 686.64 964.08 702.24 986.64 c
-h
-639.36 1028 m
-640.08 1056.56 644.4 1065.88 656.16 1065.88 c
-663.12 1065.88 667.44 1062.11 669.36 1054.8 c
-670.56 1050.24 671.04 1043.52 671.52 1031.28 c
-671.52 1028 l
-h
-706.56 960 m
-f*
-788.96 1038.24 m
-788.96 1073.4 l
-783.32 1073.4 l
-781.88 1069.53 780.44 1068.6 777.32 1068.6 c
-775.88 1068.6 773.72 1068.98 769.88 1069.92 c
-762.2 1072.56 756.68 1073.88 751.16 1073.88 c
-729.32 1073.88 713 1058.85 713 1038.48 c
-713 1022.64 722.979 1011.6 747.56 1001.28 c
-764.12 994.08 771 988.08 771 980.4 c
-771 971.04 763.64 964.64 752.6 964.64 c
-735.8 964.64 724.76 975.494 719.72 996.48 c
-713 996.48 l
-713 956.88 l
-719 956.88 l
-721.64 961.92 723.08 963.6 725.24 963.6 c
-726.44 963.6 728.36 963.12 730.76 962.16 c
-737.719 959.28 749.959 956.64 756.679 956.64 c
-778.52 956.64 794 971.52 794 993.12 c
-794 1010.16 784.78 1020.72 760.52 1030.56 c
-744.199 1037.52 737 1043.52 737 1051.68 c
-737 1059.6 743.923 1065.88 753.32 1065.88 c
-759.8 1065.88 766.04 1063.14 771.32 1057.92 c
-776.36 1053.12 779 1048.56 782.6 1038.24 c
-h
-800.36 960 m
-f*
-873.2 1071 m
-851 1071 l
-851 1111.2 l
-844.64 1111.2 l
-830 1090.56 820.4 1079.76 804.8 1066.56 c
-804.8 1060 l
-817 1060 l
-817 982.32 l
-817 966.72 827.427 957.12 844.16 957.12 c
-860.24 957.12 869.84 964.32 879.68 984 c
-873.68 986.64 l
-868.88 977.52 865.04 974.119 860 974.119 c
-853.28 974.119 851 978.211 851 987.84 c
-851 1060 l
-873.2 1060 l
-h
-879.92 960 m
-f*
-929 1071 m
-882.84 1071 l
-882.84 1064.88 l
-893.4 1062.72 895 1060.56 895 1050.72 c
-895 980.16 l
-895 970.32 893.394 968.4 882.84 965.76 c
-882.84 960 l
-940.2 960 l
-940.2 965.76 l
-931.8 966.96 929 970.32 929 979.44 c
-h
-912.36 1125.6 m
-901.56 1125.6 894 1117.54 894 1107.12 c
-894 1096.56 901.663 1088.6 911.88 1088.6 c
-922.44 1088.6 931 1096.54 931 1107.12 c
-931 1117.44 922.661 1125.6 912.36 1125.6 c
-h
-945.72 960 m
-f*
-997.76 1071 m
-952.04 1071 l
-952.04 1064.88 l
-962.6 1063.2 964 1060.8 964 1050.72 c
-964 980.16 l
-964 970.08 962.195 967.92 952.04 965.76 c
-952.04 960 l
-1009.88 960 l
-1009.88 965.76 l
-1001 966.96 998 970.56 998 979.44 c
-998 1043.52 l
-998 1044.48 999.729 1046.88 1002.2 1049.28 c
-1007.48 1054.56 1013.24 1057.88 1019 1057.88 c
-1027.16 1057.88 1031 1051.26 1031 1037.52 c
-1031 979.44 l
-1031 970.56 1027.95 966.72 1019.96 965.76 c
-1019.96 960 l
-1076.36 960 l
-1076.36 965.76 l
-1067 966.48 1065 969.36 1065 979.44 c
-1065 1039.68 l
-1065 1060.32 1052.12 1073.88 1032.2 1073.88 c
-1017.75 1073.88 1006.67 1067.04 997.76 1052.64 c
-h
-1080.44 960 m
-f*
-1193.52 975.36 m
-1191.12 972.96 l
-1190.4 972.24 1189.68 972 1188.48 972 c
-1185.12 972 1184 973.92 1184 978 c
-1184 1040.64 l
-1184 1061.04 1165.54 1073.88 1135.92 1073.88 c
-1108.8 1073.88 1090.56 1061.49 1090.56 1043.28 c
-1090.56 1033.2 1096.32 1027.44 1106.16 1027.44 c
-1115.76 1027.44 1122.48 1033.2 1122.48 1041.36 c
-1122.48 1044.72 1121.28 1047.84 1118.16 1051.68 c
-1116 1054.08 1115.28 1055.52 1115.28 1056.96 c
-1115.28 1062 1121.76 1065.88 1130.4 1065.88 c
-1144.56 1065.88 1151 1059.39 1151 1044.72 c
-1151 1027.2 l
-1122.67 1018.56 1111.28 1014.24 1102.08 1008.24 c
-1091.28 1001.04 1086 992.64 1086 982.08 c
-1086 967.44 1097.04 956.64 1112.4 956.64 c
-1126.32 956.64 1137.36 961.44 1150.56 973.44 c
-1153.2 961.2 1158.48 956.64 1170.24 956.64 c
-1180.56 956.64 1188 960.48 1197.12 970.321 c
-h
-1150 984 m
-1143.64 976.561 1138.93 973.681 1133.28 973.681 c
-1126.08 973.681 1121 980.161 1121 989.761 c
-1121 1003.68 1130.98 1013.52 1150 1018.8 c
-h
-1200 960 m
-f*
-1273.2 1071 m
-1251 1071 l
-1251 1111.2 l
-1244.64 1111.2 l
-1230 1090.56 1220.4 1079.76 1204.8 1066.56 c
-1204.8 1060 l
-1217 1060 l
-1217 982.32 l
-1217 966.72 1227.43 957.12 1244.16 957.12 c
-1260.24 957.12 1269.84 964.32 1279.68 984 c
-1273.68 986.64 l
-1268.88 977.52 1265.04 974.119 1260 974.119 c
-1253.28 974.119 1251 978.211 1251 987.84 c
-1251 1060 l
-1273.2 1060 l
-h
-1279.92 960 m
-f*
-1330 1071 m
-1283.84 1071 l
-1283.84 1064.88 l
-1294.4 1062.72 1296 1060.56 1296 1050.72 c
-1296 980.16 l
-1296 970.32 1294.39 968.4 1283.84 965.76 c
-1283.84 960 l
-1341.2 960 l
-1341.2 965.76 l
-1332.8 966.96 1330 970.32 1330 979.44 c
-h
-1313.36 1125.6 m
-1302.56 1125.6 1295 1117.54 1295 1107.12 c
-1295 1096.56 1302.66 1088.6 1312.88 1088.6 c
-1323.44 1088.6 1332 1096.54 1332 1107.12 c
-1332 1117.44 1323.66 1125.6 1313.36 1125.6 c
-h
-1346.72 960 m
-f*
-1406.96 1073.88 m
-1375.28 1073.88 1352 1049.01 1352 1014.72 c
-1352 981.36 1375.04 956.64 1406 956.64 c
-1437.44 956.64 1460 981.36 1460 1014.96 c
-1460 1048.32 1437.06 1073.88 1406.96 1073.88 c
-h
-1406.24 1065.88 m
-1420.4 1065.88 1425 1053.21 1425 1012.32 c
-1425 976.56 1420.19 964.64 1406.24 964.64 c
-1392.32 964.64 1387 976.734 1387 1011.12 c
-1387 1037.28 1388.27 1048.08 1392.08 1056.24 c
-1394.72 1062.72 1399.76 1065.88 1406.24 1065.88 c
-h
-1466 960 m
-f*
-1516.76 1071 m
-1471.04 1071 l
-1471.04 1064.88 l
-1481.6 1063.2 1483 1060.8 1483 1050.72 c
-1483 980.16 l
-1483 970.08 1481.19 967.92 1471.04 965.76 c
-1471.04 960 l
-1528.88 960 l
-1528.88 965.76 l
-1520 966.96 1517 970.56 1517 979.44 c
-1517 1043.52 l
-1517 1044.48 1518.73 1046.88 1521.2 1049.28 c
-1526.48 1054.56 1532.24 1057.88 1538 1057.88 c
-1546.16 1057.88 1550 1051.26 1550 1037.52 c
-1550 979.44 l
-1550 970.56 1546.95 966.72 1538.96 965.76 c
-1538.96 960 l
-1595.36 960 l
-1595.36 965.76 l
-1586 966.48 1584 969.36 1584 979.44 c
-1584 1039.68 l
-1584 1060.32 1571.12 1073.88 1551.2 1073.88 c
-1536.75 1073.88 1525.67 1067.04 1516.76 1052.64 c
-h
-1599.44 960 m
-f*
-1 i
-425.75 911.751 1172.4 21.5999 re
-f
-1133.75 1190.15 669.6 772.8 re
-Y
-1133.75 1199.75 m
-1793.75 1962.95 l
-S
-0 0 6120 7920 re
-Y
-1809.35 1862.15 m
-1772.15 1936.55 l
-1691.75 1962.95 l
-1913.75 2099.75 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 4422 a(Figure)38 b(13:)57 b(Con)m(v)m(ersion)38
-b(b)s(et)m(w)m(een)h(t)m(w)m(o)g(F)-8 b(rameSets)39 b(is)e(p)s
-(erformed)g(b)m(y)g(establishing)i(a)f(link)g(b)s(et)m(w)m(een)g(a)0
-4535 y(pair)e(of)g(F)-8 b(rames,)38 b(one)e(from)f(eac)m(h)i(F)-8
-b(rameSet.)59 b(If)35 b(con)m(v)m(ersion)i(b)s(et)m(w)m(een)g(these)f
-(t)m(w)m(o)h(F)-8 b(rames)37 b(is)f(p)s(ossible,)0 4648
-y(then)26 b(a)g(route)g(for)g(con)m(v)m(erting)i(b)s(et)m(w)m(een)e
-(the)h(curren)m(t)e(F)-8 b(rames)27 b(of)f(b)s(oth)g(F)-8
-b(rameSets)27 b(can)f(also)h(b)s(e)e(found.)38 b(In)0
-4761 y(practice,)33 b(there)f(ma)m(y)f(b)s(e)g(man)m(y)h(w)m(a)m(ys)g
-(of)f(pairing)g(F)-8 b(rames)32 b(to)g(\014nd)e(the)i(\\missing)f
-(link",)h(so)g(the)f(F)-8 b(rames')0 4874 y(Domain)31
-b(attribute)g(ma)m(y)g(b)s(e)f(used)g(to)h(narro)m(w)f(the)g(c)m
-(hoice.)p eop end
-%%Page: 122 132
-TeXDict begin 122 131 bop 0 52 a FF(122)1350 b Fy(14)92
-b(HIGHER)30 b(LEVEL)g(OPERA)-8 b(TIONS)29 b(ON)h(FRAMESETS)111
-351 y FF(3.)46 b(The)34 b(third)g(argumen)m(t)g(of)h(astCon)m(v)m(ert)h
-(ma)m(y)f(then)f(b)s(e)f(used)h(to)h(sp)s(ecify)f(explicitly)i(whic)m
-(h)e(Domain)227 464 y(v)-5 b(alue)41 b(the)g(paired)f(F)-8
-b(rames)42 b(should)d(ha)m(v)m(e.)73 b(Y)-8 b(ou)41 b(ma)m(y)g(also)h
-(supply)d(a)i(comma-separated)h(list)f(of)227 577 y(preferences)30
-b(here)h(\(see)g(b)s(elo)m(w\).)111 769 y(4.)46 b(If)24
-b(the)h(ab)s(o)m(v)m(e)h(steps)e(fail)h(to)g(uniquely)f(iden)m(tify)h
-(the)f(link,)i(then)e(the)h(\014rst)f(suitable)h(pairing)f(of)h(F)-8
-b(rames)227 882 y(is)29 b(used,)f(so)h(that)g(an)m(y)g(am)m(biguit)m(y)
-h(is)f(resolv)m(ed)h(b)m(y)e(the)h(order)f(in)g(whic)m(h)h(F)-8
-b(rames)29 b(are)g(considered)g(for)227 995 y(pairing)37
-b(\(see)g(the)g(description)f(of)h(the)g(astCon)m(v)m(ert)h(function)e
-(in)g(App)s(endix)f(B)i(for)f(details)i(of)e(the)227
-1108 y(searc)m(h)31 b(order\).)771 1075 y Fv(21)0 1376
-y FF(In)e(the)i(example)f(ab)s(o)m(v)m(e)i(w)m(e)e(supplied)f(the)h
-(string)g(\\SKY")h(as)f(the)g(third)f(argumen)m(t)i(of)f(astCon)m(v)m
-(ert.)42 b(This)0 1489 y(constitutes)23 b(a)f(request)g(that)g(a)g
-(pair)f(of)h(F)-8 b(rames)23 b(with)e(the)h(Domain)g(v)-5
-b(alue)23 b(SKY)e(\()p Fx(i.e.)g FF(represen)m(ting)h(celestial)0
-1602 y(co)s(ordinate)33 b(systems\))f(should)f(b)s(e)h(used)f(to)h(in)m
-(ter-relate)j(the)d(t)m(w)m(o)h(F)-8 b(rameSets.)47 b(Note)33
-b(that)g(this)f(do)s(es)f(not)0 1715 y(sp)s(ecify)25
-b(whic)m(h)h(celestial)i(co)s(ordinate)f(system)f(to)g(use,)h(but)e(is)
-h(a)g(general)h(request)f(that)g(the)g(t)m(w)m(o)h(F)-8
-b(rameSets)0 1828 y(b)s(e)30 b(in)m(ter-related)i(using)e(co)s
-(ordinates)h(on)f(the)h(celestial)i(sphere.)0 1992 y(Of)28
-b(course,)i(it)f(ma)m(y)g(b)s(e)f(that)i(this)e(request)h(cannot)g(b)s
-(e)f(met)h(b)s(ecause)g(there)g(ma)m(y)g(not)g(b)s(e)f(a)i(celestial)h
-(co)s(or-)0 2105 y(dinate)d(system)g(in)g(b)s(oth)f(F)-8
-b(rameSets.)41 b(If)28 b(this)f(is)h(lik)m(ely)i(to)e(happ)s(en,)f(w)m
-(e)i(can)f(supply)e(a)j(list)f(of)g(preferences,)0 2218
-y(or)i(a)h Fx(domain)j(se)-5 b(ar)g(ch)35 b(p)-5 b(ath,)32
-b FF(as)e(the)h(third)f(argumen)m(t)g(to)h(astCon)m(v)m(ert,)i(suc)m(h)
-d(as)g(the)h(follo)m(wing:)227 2473 y Ft(cvt)43 b(=)g(astConvert\()c
-(frameseta,)g(framesetb,)h("SKY,PIXEL,GRID,)o(")d(\);)0
-2742 y FF(No)m(w,)49 b(if)44 b(the)g(t)m(w)m(o)i(F)-8
-b(rameSets)45 b(cannot)g(b)s(e)f(in)m(ter-related)i(using)e(the)g(SKY)g
-(domain,)j(astCon)m(v)m(ert)f(will)0 2855 y(attempt)36
-b(to)f(use)f(the)h(PIXEL)f(domain)h(instead.)54 b(If)34
-b(this)g(also)i(fails,)g(it)g(will)f(try)f(the)h(GRID)g(domain.)53
-b(A)0 2968 y(blank)33 b(\014eld)g(in)g(the)g(domain)h(searc)m(h)g(path)
-f(\(here)g(indicated)h(b)m(y)f(the)h(\014nal)f(comma\))h(allo)m(ws)h
-(an)m(y)f(Domain)0 3081 y(v)-5 b(alue)31 b(to)g(b)s(e)f(used.)40
-b(This)29 b(can)i(b)s(e)f(emplo)m(y)m(ed)h(as)g(a)f(last)i(resort)e
-(when)g(all)h(else)g(has)f(failed.)0 3245 y(If)d(astCon)m(v)m(ert)j
-(succeeds)e(in)g(iden)m(tifying)g(a)h(con)m(v)m(ersion,)h(it)e(will)g
-(return)f(a)i(p)s(oin)m(ter)f(to)g(a)h(F)-8 b(rameSet)29
-b(\()p Fu(x)p FF(14.1\))0 3358 y(in)36 b(whic)m(h)g(the)g(source)g(and)
-g(destination)h(F)-8 b(rames)36 b(are)h(in)m(ter-connected)h(b)m(y)e
-(the)g(required)f(Mapping.)58 b(In)0 3471 y(this)35 b(case,)i(of)e
-(course,)h(these)g(F)-8 b(rames)35 b(will)g(b)s(e)f(the)h(curren)m(t)g
-(F)-8 b(rames)36 b(of)f(the)g(t)m(w)m(o)h(F)-8 b(rameSets,)37
-b(but)d(in)h(all)0 3584 y(other)c(resp)s(ects)f(the)g(returned)g(F)-8
-b(rameSet)31 b(is)g(the)f(same)h(as)g(when)e(con)m(v)m(erting)j(b)s(et)
-m(w)m(een)f(F)-8 b(rames.)0 3749 y(V)g(ery)30 b(imp)s(ortan)m(tly)-8
-b(,)32 b(ho)m(w)m(ev)m(er,)f(astCon)m(v)m(ert)h(ma)m(y)e(mo)s(dify)f
-(the)h(F)-8 b(rameSets)31 b(y)m(ou)g(are)f(con)m(v)m(erting)i(b)s(et)m
-(w)m(een.)0 3862 y(It)41 b(do)s(es)g(this,)i(in)e(order)f(to)i
-(indicate)g(whic)m(h)e(pairing)h(of)g(F)-8 b(rames)42
-b(w)m(as)f(used)f(to)i(in)m(ter-relate)h(them,)h(b)m(y)0
-3975 y(c)m(hanging)34 b(the)f(Base)h(attribute)f(for)g(eac)m(h)h(F)-8
-b(rameSet)34 b(so)f(that)h(the)f(F)-8 b(rame)34 b(used)e(in)g(the)h
-(pairing)g(b)s(ecomes)0 4088 y(its)e(base)f(F)-8 b(rame)32
-b(\()p Fu(x)p FF(13.4\).)0 4252 y(Finally)-8 b(,)31 b(note)e(that)h
-(astCon)m(v)m(ert)g(ma)m(y)g(also)g(b)s(e)e(used)g(to)i(con)m(v)m(ert)g
-(b)s(et)m(w)m(een)g(a)f(F)-8 b(rameSet)30 b(and)f(a)g(F)-8
-b(rame,)30 b(or)0 4365 y Fx(vic)-5 b(e)38 b(versa.)58
-b FF(If)36 b(a)g(p)s(oin)m(ter)g(to)h(a)g(F)-8 b(rame)37
-b(is)f(supplied)f(for)h(either)h(the)f(\014rst)g(or)g(second)g(argumen)
-m(t,)i(it)f(will)0 4478 y(b)s(eha)m(v)m(e)31 b(lik)m(e)h(a)e(F)-8
-b(rameSet)32 b(con)m(taining)g(only)e(a)h(single)g(F)-8
-b(rame.)0 4778 y Fw(14.3)112 b(Example|Registering)39
-b(Tw)m(o)e(Images)0 5003 y FF(Consider)26 b(t)m(w)m(o)j(images)f(whic)m
-(h)f(ha)m(v)m(e)h(b)s(een)e(calibrated)j(b)m(y)e(attac)m(hing)i(F)-8
-b(rameSets)28 b(to)g(them,)g(suc)m(h)f(that)g(the)0 5116
-y(base)33 b(F)-8 b(rame)33 b(of)g(eac)m(h)h(F)-8 b(rameSet)34
-b(corresp)s(onds)d(to)i(the)g(ra)m(w)g(data)g(grid)f(co)s(ordinates)i
-(of)e(eac)m(h)i(image)g(\(the)0 5229 y(GRID)i(domain)f(of)h
-Fu(x)p FF(7.13\).)58 b(Supp)s(ose,)35 b(also,)j(that)e(these)g(F)-8
-b(rameSets)36 b(con)m(tain)h(an)e(unkno)m(wn)f(n)m(um)m(b)s(er)g(of)0
-5342 y(other)26 b(F)-8 b(rames,)28 b(represen)m(ting)e(alternativ)m(e)i
-(w)m(orld)d(co)s(ordinate)i(systems.)39 b(What)27 b(w)m(e)f(wish)f(to)h
-(do)g(is)g(register)p 0 5425 1512 4 v 73 5479 a Fs(21)138
-5510 y Fr(If)d(y)n(ou)f(\014nd)f(that)i(ho)n(w)g(this)f(am)n(biguit)n
-(y)h(is)g(resolv)n(ed)g(actually)g(mak)n(es)g(a)f(di\013erence)h(to)g
-(the)f(con)n(v)n(ersion)h(that)f(results,)i(then)0 5602
-y(y)n(ou)30 b(ha)n(v)n(e)g(probably)h(constructed)f(a)i(F)-6
-b(rameSet)30 b(whic)n(h)h(lac)n(ks)h(in)n(ternal)f(self-consistency)-6
-b(.)50 b(F)-6 b(or)31 b(example,)i(y)n(ou)d(migh)n(t)h(ha)n(v)n(e)0
-5693 y(t)n(w)n(o)26 b(F)-6 b(rames)26 b(represen)n(ting)g
-(indistinguishable)h(co)r(ordinate)g(systems)f(but)e(in)n(ter-related)i
-(b)n(y)f(a)h(non-n)n(ull)f(Mapping.)p eop end
-%%Page: 123 133
-TeXDict begin 123 132 bop 0 52 a Fy(14.3)93 b(Example|Registering)31
-b(Tw)m(o)g(Images)1996 b FF(123)0 351 y(these)34 b(t)m(w)m(o)h(images,)
-g(suc)m(h)e(that)h(w)m(e)g(can)g(transform)f(from)g(a)h(p)s(osition)f
-(in)g(the)h(data)g(grid)f(of)h(one)g(in)m(to)g(the)0
-464 y(corresp)s(onding)e(p)s(osition)h(in)g(the)h(data)g(grid)f(of)g
-(the)g(other.)50 b(This)32 b(is)i(a)f(v)m(ery)h(practical)h(example)e
-(b)s(ecause)0 577 y(images)e(will)g(t)m(ypically)h(b)s(e)e(calibrated)i
-(using)e(F)-8 b(rameSets)31 b(in)f(precisely)h(this)f(w)m(a)m(y)-8
-b(.)0 730 y(The)33 b(\014rst)f(step)h(will)g(probably)g(in)m(v)m(olv)m
-(e)i(making)e(a)h(cop)m(y)g(of)f(b)s(oth)f(F)-8 b(rameSets)34
-b(\(using)f(astCop)m(y|)p Fu(x)p FF(4.13\),)0 843 y(since)e(w)m(e)g
-(will)g(b)s(e)e(mo)s(difying)h(them.)41 b(Let)31 b(\\frameseta")i(and)d
-(\\framesetb")h(b)s(e)f(p)s(oin)m(ters)g(to)h(these)g(copies.)0
-956 y(Since)42 b(w)m(e)h(w)m(an)m(t)g(to)g(con)m(v)m(ert)h(b)s(et)m(w)m
-(een)f(the)f(base)h(F)-8 b(rames)43 b(of)f(these)h(F)-8
-b(rameSets)43 b(\()p Fx(i.e.)f FF(their)h(data)g(grid)0
-1069 y(co)s(ordinates\),)36 b(the)e(next)g(step)g(is)f(to)i(mak)m(e)g
-(these)f(F)-8 b(rames)34 b(curren)m(t.)51 b(This)33 b(is)h(simply)f
-(done)h(b)m(y)f(in)m(v)m(erting)0 1181 y(b)s(oth)d(F)-8
-b(rameSets,)32 b(whic)m(h)f(in)m(terc)m(hanges)h(their)f(base)g(and)f
-(curren)m(t)h(F)-8 b(rames.)43 b(astIn)m(v)m(ert)32 b(will)f(p)s
-(erform)f(this)0 1294 y(task:)227 1504 y Ft(astInvert\()40
-b(frameseta)g(\);)227 1603 y(astInvert\()g(framesetb)g(\);)0
-1826 y FF(T)-8 b(o)28 b(iden)m(tify)h(the)f(required)f(con)m(v)m
-(ersion,)j(w)m(e)f(no)m(w)f(use)f(astCon)m(v)m(ert,)j(supplying)d(a)i
-(suitable)f(domain)g(searc)m(h)0 1939 y(path)i(with)g(whic)m(h)g(w)m(e)
-h(w)m(ould)f(lik)m(e)i(our)e(t)m(w)m(o)i(images)f(to)g(b)s(e)f
-(registered:)227 2148 y Ft(cvt)43 b(=)g(astConvert\()c(frameseta,)g
-(framesetb,)h("SKY,PIXEL,GRID")d(\);)227 2248 y(if)43
-b(\()g(cvt)g(==)f(AST__NULL)e(\))j({)358 2347 y(<no)f(conversion)e(was)
-i(possible>)227 2447 y(})h(else)f({)358 2546 y(<conversion)d(was)j
-(possible>)227 2646 y(})0 2869 y FF(The)30 b(e\013ects)i(of)e(this)g
-(are:)111 3091 y(1.)46 b(astCon)m(v)m(ert)d(\014rst)e(attempts)i(to)f
-(register)h(the)f(t)m(w)m(o)h(images)f(on)g(the)g(celestial)i(sphere)d
-(\()p Fx(i.e.)g FF(using)227 3204 y(the)33 b(SKY)f(domain\).)47
-b(T)-8 b(o)32 b(do)h(this,)g(it)g(searc)m(hes)g(for)f(a)h(celestial)i
-(co)s(ordinate)e(system,)g(although)g(not)227 3317 y(necessarily)f(the)
-g(same)g(one,)g(attac)m(hed)h(to)f(eac)m(h)g(image.)45
-b(If)31 b(it)h(\014nds)e(a)h(suitable)h(pair)f(of)h(co)s(ordinate)227
-3430 y(systems,)f(it)g(then)f(registers)h(the)g(images)g(b)m(y)f(matc)m
-(hing)i(corresp)s(onding)d(p)s(ositions)h(on)h(the)f(sky)-8
-b(.)111 3607 y(2.)46 b(If)33 b(this)f(fails,)j(astCon)m(v)m(ert)f(next)
-f(tries)g(to)h(matc)m(h)f(p)s(ositions)g(in)g(the)g(PIXEL)f(domain)h
-(\()p Fu(x)p FF(7.12\).)51 b(If)32 b(it)227 3720 y(succeeds,)27
-b(the)f(t)m(w)m(o)g(images)h(will)f(then)f(b)s(e)f(registered)j(so)e
-(that)h(their)f(corresp)s(onding)g(pixel)h(p)s(ositions)227
-3833 y(corresp)s(ond.)38 b(If)24 b(the)h(PIXEL)f(domain)g(is)h
-(o\013set)g(from)f(the)h(data)g(grid)f(\(as)h(t)m(ypically)i(happ)s
-(ens)c(in)h(data)227 3946 y(reduction)i(systems)g(whic)m(h)f(implemen)m
-(t)i(a)f(\\pixel)g(origin"\),)j(then)c(this)h(will)g(b)s(e)f(correctly)
-i(accoun)m(ted)227 4059 y(for.)111 4237 y(3.)46 b(If)26
-b(this)h(also)h(fails,)g(the)f(GRID)g(domain)f(is)h(\014nally)f(used.)
-39 b(This)26 b(will)h(result)f(in)h(image)g(registration)i(b)m(y)227
-4350 y(matc)m(hing)36 b(corresp)s(onding)d(p)s(oin)m(ts)i(in)f(the)h
-(data)g(grids)f(used)g(b)m(y)h(b)s(oth)f(images.)54 b(This)34
-b(means)g(they)227 4463 y(will)d(b)s(e)f(aligned)h(so)f(that)h(the)g
-(\014rst)f(elemen)m(t)h(their)g(data)g(arra)m(ys)g(corresp)s(ond.)111
-4640 y(4.)46 b(If)27 b(all)i(of)e(the)h(ab)s(o)m(v)m(e)g(fail,)h
-(astCon)m(v)m(ert)g(will)f(return)f(the)g(v)-5 b(alue)28
-b(AST)p Fq(__)p FF(NULL.)e(Otherwise)i(a)f(p)s(oin)m(ter)227
-4753 y(to)k(a)g(F)-8 b(rameSet)32 b(will)e(b)s(e)g(returned.)0
-4976 y(The)35 b(resulting)g(\\cvt")i(F)-8 b(rameSet)36
-b(ma)m(y)g(then)f(b)s(e)g(used)f(directly)i(\()p Fu(x)p
-FF(12.1\))i(to)e(con)m(v)m(ert)h(b)s(et)m(w)m(een)f(p)s(ositions)0
-5089 y(in)f(the)h(data)g(grid)g(of)f(the)h(\014rst)f(image)i(and)e
-(corresp)s(onding)g(p)s(ositions)g(in)g(the)h(data)g(grid)g(of)g(the)f
-(second)0 5202 y(image.)0 5354 y(T)-8 b(o)30 b(determine)f(whic)m(h)h
-(domain)f(w)m(as)h(used)e(to)i(ac)m(hiev)m(e)i(registration,)f(w)m(e)f
-(can)g(use)f(the)h(fact)g(that)g(the)f(Base)0 5467 y(attribute)40
-b(of)g(eac)m(h)h(F)-8 b(rameSet)41 b(is)f(set)g(b)m(y)g(astCon)m(v)m
-(ert)h(to)g(indicate)g(whic)m(h)e(in)m(termediate)i(F)-8
-b(rames)41 b(w)m(ere)0 5580 y(used.)72 b(W)-8 b(e)43
-b(can)e(therefore)h(simply)e(in)m(v)m(ert)i(either)g(F)-8
-b(rameSet)42 b(\(to)h(mak)m(e)f(its)f(base)h(F)-8 b(rame)42
-b(b)s(ecome)f(the)0 5693 y(curren)m(t)30 b(one\))h(and)f(then)g
-(enquire)g(the)h(Domain)g(v)-5 b(alue:)p eop end
-%%Page: 124 134
-TeXDict begin 124 133 bop 0 52 a FF(124)1350 b Fy(14)92
-b(HIGHER)30 b(LEVEL)g(OPERA)-8 b(TIONS)29 b(ON)h(FRAMESETS)227
-351 y Ft(const)42 b(char)g(*domain;)227 551 y(...)227
-750 y(astInvert\()e(frameseta)g(\);)227 849 y(domain)h(=)j(astGetC\()c
-(frameseta,)f("Domain")i(\);)0 1073 y FF(If)30 b(con)m(v)m(ersion)i(w)m
-(as)e(successful,)h(the)f(result)h(will)f(b)s(e)g(one)h(of)f(the)h
-(strings)f(\\SKY",)h(\\PIXEL")f(or)h(\\GRID".)0 1352
-y Fw(14.4)112 b(Re-De\014ning)39 b(a)f(F)-9 b(rameSet)38
-b(Co)s(ordinate)g(System)0 1564 y FF(As)44 b(discussed)f(earlier)h(\()p
-Fu(x)p FF(13.4\),)51 b(an)43 b(imp)s(ortan)m(t)h(application)i(of)e(a)g
-(F)-8 b(rameSet)45 b(is)f(to)g(allo)m(w)i(co)s(ordinate)0
-1677 y(system)40 b(information)g(to)g(b)s(e)f(attac)m(hed)i(to)g(en)m
-(tities)g(suc)m(h)e(as)h(images)h(in)e(order)g(to)i(calibrate)g(them.)
-68 b(In)0 1790 y(addition,)33 b(one)f(of)g(the)g(main)f(ob)5
-b(jectiv)m(es)34 b(of)e(AST)f(is)h(to)h(simplify)e(the)h(propagation)h
-(of)f(suc)m(h)f(information)0 1903 y(through)i(successiv)m(e)i(stages)g
-(of)f(data)h(pro)s(cessing,)f(so)g(that)h(it)f(remains)f(consisten)m(t)
-j(with)d(the)h(asso)s(ciated)0 2016 y(image)e(data.)0
-2169 y(In)k(suc)m(h)h(a)h(situation,)i(the)d(F)-8 b(rameSet's)38
-b(base)g(F)-8 b(rame)38 b(w)m(ould)e(corresp)s(ond)g(with)h(the)g
-(image's)i(data)f(grid)0 2282 y(co)s(ordinates)k(and)e(its)h(other)g(F)
--8 b(rames)42 b(\(if)f(an)m(y\))h(with)f(the)g(v)-5 b(arious)41
-b(alternativ)m(e)i(w)m(orld)e(co)s(ordinate)h(sys-)0
-2395 y(tems)37 b(asso)s(ciated)h(with)f(the)g(image.)61
-b(If)36 b(the)h(data)g(pro)s(cessing)g(b)s(eing)f(p)s(erformed)f(do)s
-(es)h(not)h(c)m(hange)h(the)0 2508 y(relationship)31
-b(b)s(et)m(w)m(een)h(the)f(image's)i(data)e(grid)g(co)s(ordinates)h
-(and)e(an)m(y)h(of)h(the)f(asso)s(ciated)h(w)m(orld)f(co)s(ordi-)0
-2621 y(nate)g(systems,)g(then)f(propagation)i(of)e(the)h(W)m(CS)g
-(information)g(is)f(straigh)m(tforw)m(ard)h(and)f(simply)g(in)m(v)m
-(olv)m(es)0 2734 y(cop)m(ying)h(the)g(F)-8 b(rameSet)31
-b(asso)s(ciated)h(with)e(the)h(image.)0 2887 y(If)e(an)m(y)i(of)f
-(these)g(relationships)g(c)m(hange,)h(ho)m(w)m(ev)m(er,)h(then)d
-(corresp)s(onding)g(c)m(hanges)i(m)m(ust)f(b)s(e)f(made)h(to)g(the)0
-3000 y(w)m(a)m(y)j(F)-8 b(rames)33 b(within)e(the)h(F)-8
-b(rameSet)33 b(are)f(in)m(ter-related.)48 b(By)32 b(far)f(the)h(most)h
-(common)f(case)h(o)s(ccurs)e(when)0 3112 y(the)i(image)g(undergo)s(es)f
-(some)h(geometrical)i(transformation)e(resulting)f(in)h(\\re-gridding")
-g(on)f(to)h(another)0 3225 y(data)e(grid,)f(but)g(the)h(same)f
-(principles)g(can)h(b)s(e)f(applied)g(to)h(an)m(y)g(re-de\014nition)f
-(of)h(a)f(co)s(ordinate)i(system.)0 3378 y(T)-8 b(o)34
-b(pursue)d(the)i(re-gridding)g(example,)i(w)m(e)e(w)m(ould)g(need)g(to)
-h(mo)s(dify)e(our)h(F)-8 b(rameSet)34 b(to)g(accoun)m(t)g(for)f(the)0
-3491 y(fact)27 b(that)f(the)g(image's)h(data)f(grid)g(co)s(ordinate)g
-(system)g(\(corresp)s(onding)f(to)h(the)g(F)-8 b(rameSet's)27
-b(base)f(F)-8 b(rame\))0 3604 y(has)30 b(c)m(hanged.)41
-b(Lo)s(oking)31 b(at)g(the)g(steps)f(needed)g(in)g(detail,)i(w)m(e)f
-(migh)m(t)g(pro)s(ceed)f(as)h(follo)m(ws:)111 3828 y(1.)46
-b(Create)34 b(a)f(Mapping)g(whic)m(h)g(represen)m(ts)g(the)g
-(relationship)g(b)s(et)m(w)m(een)h(the)f(original)h(data)g(grid)f(co)s
-(or-)227 3941 y(dinate)e(system)g(and)e(the)i(new)f(one.)111
-4119 y(2.)46 b(Obtain)37 b(a)h(F)-8 b(rame)38 b(to)h(represen)m(t)e
-(the)g(new)g(data)h(grid)g(co)s(ordinate)g(system)f(\(w)m(e)h(could)g
-(re-use)f(the)227 4232 y(original)32 b(base)e(F)-8 b(rame)32
-b(here,)e(using)g(astGetF)-8 b(rame)33 b(to)e(obtain)g(a)g(p)s(oin)m
-(ter)f(to)h(it\).)111 4410 y(3.)46 b(Add)e(the)g(new)g(F)-8
-b(rame)45 b(to)g(the)f(F)-8 b(rameSet,)49 b(related)c(to)g(the)g
-(original)g(base)f(F)-8 b(rame)45 b(b)m(y)g(the)f(new)227
-4523 y(Mapping.)39 b(This)24 b(F)-8 b(rame)26 b(no)m(w)e(represen)m(ts)
-h(the)g(new)f(data)h(grid)g(co)s(ordinate)g(system)g(and)f(is)h
-(correctly)227 4636 y(related)32 b(to)f(all)g(the)f(other)h(F)-8
-b(rames)31 b(presen)m(t.)1788 4603 y Fv(22)111 4814 y
-FF(4.)46 b(Remo)m(v)m(e)32 b(the)f(original)h(base)e(F)-8
-b(rame)31 b(\(represen)m(ting)g(the)g(old)f(data)i(grid)e(co)s
-(ordinate)h(system\).)111 4992 y(5.)46 b(Mak)m(e)32 b(the)f(new)f(F)-8
-b(rame)31 b(the)g(base)f(F)-8 b(rame)31 b(and)f(restore)h(the)g
-(original)g(curren)m(t)f(F)-8 b(rame.)0 5216 y(The)28
-b(e\013ect)j(of)e(these)h(steps)f(is)g(to)g(c)m(hange)h(the)g
-(relationship)f(b)s(et)m(w)m(een)h(the)f(base)g(F)-8
-b(rame)30 b(and)e(all)i(the)f(other)0 5329 y(F)-8 b(rames)33
-b(presen)m(t.)48 b(It)33 b(is)f(as)h(if)g(a)g(new)f(Mapping)h(has)f(b)s
-(een)g(in)m(terp)s(osed)g(b)s(et)m(w)m(een)i(the)f(F)-8
-b(rame)33 b(w)m(e)g(w)m(an)m(t)h(to)0 5442 y(alter)d(and)f(all)h(the)g
-(other)g(F)-8 b(rames)31 b(within)f(the)g(F)-8 b(rameSet)32
-b(\(Figure)f(14\).)p 0 5516 1512 4 v 73 5570 a Fs(22)138
-5602 y Fr(This)d(is)g(b)r(ecause)f(an)n(y)g(transformation)i(to)e(or)h
-(from)g(this)f(new)g(F)-6 b(rame)28 b(m)n(ust)f(go)h
-Fg(via)f Fr(the)f(base)i(F)-6 b(rame)27 b(represen)n(ting)h(the)0
-5693 y(original)f(data)f(grid)g(co)r(ordinate)h(system,)f(whic)n(h)g(w)
-n(e)g(assume)g(w)n(as)h(correctly)f(related)h(to)e(all)i(the)e(other)h
-(F)-6 b(rames)26 b(presen)n(t.)p eop end
-%%Page: 125 135
-TeXDict begin 125 134 bop 0 52 a Fy(14.5)93 b(Example|Binning)30
-b(an)g(Image)2245 b FF(125)780 1770 y @beginspecial 107
- at llx 245 @lly 551 @urx 547 @ury 2664 @rwi @setspecial
-%%BeginDocument: sun211_figures/fsremap.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 107 245 551 547
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/10 17:51:58
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5506.55 5042.15 m
-5506.55 5244.95 5340.95 5410.55 5138.15 5410.55 c
-1500.95 5410.55 l
-1298.15 5410.55 1132.55 5244.95 1132.55 5042.15 c
-1132.55 2828.15 l
-1132.55 2625.35 1298.15 2459.75 1500.95 2459.75 c
-5138.15 2459.75 l
-5340.95 2459.75 5506.55 2625.35 5506.55 2828.15 c
-f*
-1 g
-5441.75 5097.35 m
-5441.75 5300.15 5277.35 5464.55 5074.55 5464.55 c
-1445.75 5464.55 l
-1242.95 5464.55 1078.55 5300.15 1078.55 5097.35 c
-1078.55 2891.75 l
-1078.55 2688.95 1242.95 2524.55 1445.75 2524.55 c
-5074.55 2524.55 l
-5277.35 2524.55 5441.75 2688.95 5441.75 2891.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5441.75 5097.35 m
-5441.75 5300.15 5277.35 5464.55 5074.55 5464.55 c
-1445.75 5464.55 l
-1242.95 5464.55 1078.55 5300.15 1078.55 5097.35 c
-1078.55 2891.75 l
-1078.55 2688.95 1242.95 2524.55 1445.75 2524.55 c
-5074.55 2524.55 l
-5277.35 2524.55 5441.75 2688.95 5441.75 2891.75 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1563.35 5256.95 l
-1451.75 5256.95 1360.55 5165.75 1360.55 5055.35 c
-1360.55 4917.35 l
-1360.55 4806.95 1451.75 4715.75 1563.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-f*
-0 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-h
-S
-0.201248 i
-1539.33 5152 m
-1425.22 5152 l
-1425.22 5147 l
-1439.11 5146.2 1443 5143.18 1443 5132.72 c
-1443 5035.32 l
-1443 5024.85 1440.17 5022.64 1425.22 5021.03 c
-1425.22 5016 l
-1497.67 5016 l
-1497.67 5021 l
-1479.15 5021.81 1476 5024.23 1476 5035.32 c
-1476 5082.21 l
-1496.22 5081.81 1503.55 5074.36 1506.32 5051.02 c
-1511.35 5051.02 l
-1511.35 5119.04 l
-1506.32 5119.04 l
-1502.76 5096.1 1495.82 5089.05 1476 5089.05 c
-1476 5135.74 l
-1476 5143.19 1478.52 5145 1488.41 5145 c
-1507.13 5145 1518.8 5141.64 1525.04 5134.74 c
-1529.47 5129.71 1531.68 5124.27 1534.5 5111.59 c
-1539.33 5111.59 l
-h
-1544.96 5016 m
-f*
-1589.19 5109 m
-1550.84 5109 l
-1550.84 5103.95 l
-1559.49 5102.74 1562 5100.12 1562 5092.07 c
-1562 5032.9 l
-1562 5024.65 1559.93 5022.44 1550.84 5020.83 c
-1550.84 5016 l
-1604.37 5016 l
-1604.37 5020.83 l
-1592.09 5021.63 1590 5024.25 1590 5036.73 c
-1590 5074.76 l
-1590 5085.23 1595.49 5093.88 1601.95 5093.88 c
-1603.56 5093.88 1605.37 5092.47 1607.59 5089.25 c
-1611.41 5083.82 1614.43 5082.01 1619.66 5082.01 c
-1627.11 5082.01 1632.34 5087.64 1632.34 5095.29 c
-1632.34 5104.55 1625.5 5111.41 1616.04 5111.41 c
-1606.1 5111.41 1598.54 5106.12 1589.19 5092.27 c
-h
-1634.35 5016 m
-f*
-1729.19 5028.88 m
-1727.18 5026.87 l
-1726.57 5026.26 1725.97 5026.06 1724.96 5026.06 c
-1722.15 5026.06 1721 5027.67 1721 5031.09 c
-1721 5083.62 l
-1721 5100.73 1705.6 5111.42 1680.89 5111.42 c
-1658.15 5111.42 1642.85 5101.06 1642.85 5085.83 c
-1642.85 5077.38 1647.69 5072.55 1655.94 5072.55 c
-1663.99 5072.55 1669.62 5077.38 1669.62 5084.22 c
-1669.62 5087.04 1668.61 5089.66 1666 5092.88 c
-1664.19 5094.89 1663.58 5096.1 1663.58 5097.3 c
-1663.58 5101.53 1669.02 5104.42 1676.26 5104.42 c
-1688.14 5104.42 1693.86 5099.08 1693.86 5087.04 c
-1693.86 5072.35 l
-1669.91 5065.1 1660.29 5061.48 1652.51 5056.45 c
-1643.46 5050.41 1639 5043.37 1639 5034.52 c
-1639 5022.24 1648.27 5013.18 1661.17 5013.18 c
-1672.84 5013.18 1682.1 5017.21 1693.17 5027.27 c
-1695.38 5017.01 1699.81 5013.18 1709.67 5013.18 c
-1718.32 5013.18 1724.56 5016.4 1732.21 5024.65 c
-h
-1693 5036.13 m
-1687.55 5029.89 1683.52 5027.47 1678.68 5027.47 c
-1672.64 5027.47 1668 5032.91 1668 5040.96 c
-1668 5052.63 1676.61 5060.88 1693 5065.31 c
-h
-1734.62 5016 m
-f*
-1776.4 5109 m
-1737.7 5109 l
-1737.7 5103.95 l
-1746.55 5102.74 1749 5100.32 1749 5092.07 c
-1749 5032.9 l
-1749 5024.65 1746.74 5022.44 1737.7 5020.83 c
-1737.7 5016 l
-1786 5016 l
-1786 5020.83 l
-1778.95 5021.84 1777 5024.65 1777 5032.3 c
-1777 5086.03 l
-1777 5087.04 1779.87 5090.66 1782.18 5092.88 c
-1786.4 5096.1 1790.02 5098.42 1793.65 5098.42 c
-1801.5 5098.42 1805 5093.59 1805 5081 c
-1805 5032.3 l
-1805 5024.05 1802.68 5021.43 1794.85 5020.83 c
-1794.85 5016 l
-1841.95 5016 l
-1841.95 5020.83 l
-1834.9 5021.64 1833 5024.65 1833 5032.3 c
-1833 5086.03 l
-1833 5087.04 1835.73 5090.46 1837.92 5092.68 c
-1842.35 5096.1 1845.97 5098.42 1849.59 5098.42 c
-1857.24 5098.42 1860 5093.38 1860 5081 c
-1860 5032.3 l
-1860 5023.85 1857.85 5021.43 1850.4 5020.83 c
-1850.4 5016 l
-1898.3 5016 l
-1898.3 5021 l
-1890.45 5021.4 1888 5023.78 1888 5032.3 c
-1888 5082.81 l
-1888 5100.12 1877.43 5111.42 1861.07 5111.42 c
-1849.59 5111.42 1841.95 5106.73 1831.48 5093.68 c
-1825.44 5106.36 1818.4 5111.42 1805.72 5111.42 c
-1792.95 5111.42 1783.98 5105.91 1776.4 5093.68 c
-h
-1901.64 5016 m
-f*
-1979.9 5041.16 m
-1971.65 5031.29 1965.61 5027.18 1956.96 5027.18 c
-1949.31 5027.18 1943.27 5030.77 1939.25 5037.94 c
-1935.43 5044.54 1933.82 5051.56 1933.01 5066 c
-1983.73 5066 l
-1982.52 5082.36 1979.5 5091.43 1973.26 5099.12 c
-1966.82 5106.96 1957.36 5111.42 1946.09 5111.42 c
-1920.94 5111.42 1904.03 5091.4 1904.03 5061.88 c
-1904.03 5032.5 1920.53 5013.18 1945.49 5013.18 c
-1961.79 5013.18 1971.65 5019.42 1984.73 5038.34 c
-h
-1932 5073 m
-1932.61 5096.96 1936.23 5104.42 1946.09 5104.42 c
-1951.93 5104.42 1955.55 5101.38 1957.16 5095.49 c
-1958.17 5091.67 1958.57 5086.03 1958.97 5075.77 c
-1958.97 5073 l
-h
-1988.35 5016 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -5016]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-5052.95 3933.35 m
-5052.95 4043.75 4961.75 4134.95 4850.15 4134.95 c
-4353.35 4134.95 l
-4241.75 4134.95 4150.55 4043.75 4150.55 3933.35 c
-4150.55 3795.35 l
-4150.55 3684.95 4241.75 3593.75 4353.35 3593.75 c
-4850.15 3593.75 l
-4961.75 3593.75 5052.95 3684.95 5052.95 3795.35 c
-f*
-1 g
-4983.35 3989.75 m
-4983.35 4096.55 4894.55 4184.15 4785.35 4184.15 c
-4299.35 4184.15 l
-4190.15 4184.15 4101.35 4096.55 4101.35 3989.75 c
-4101.35 3857.75 l
-4101.35 3750.95 4190.15 3663.35 4299.35 3663.35 c
-4785.35 3663.35 l
-4894.55 3663.35 4983.35 3750.95 4983.35 3857.75 c
-f*
-16 w
-0 g
-4983.35 3989.75 m
-4983.35 4096.55 4894.55 4184.15 4785.35 4184.15 c
-4299.35 4184.15 l
-4190.15 4184.15 4101.35 4096.55 4101.35 3989.75 c
-4101.35 3857.75 l
-4101.35 3750.95 4190.15 3663.35 4299.35 3663.35 c
-4785.35 3663.35 l
-4894.55 3663.35 4983.35 3750.95 4983.35 3857.75 c
-h
-S
-0.201248 i
-4329.33 4030 m
-4215.22 4030 l
-4215.22 4025 l
-4229.11 4024.2 4233 4021.18 4233 4010.72 c
-4233 3913.32 l
-4233 3902.85 4230.17 3900.64 4215.22 3899.03 c
-4215.22 3894 l
-4287.67 3894 l
-4287.67 3899 l
-4269.15 3899.81 4266 3902.23 4266 3913.32 c
-4266 3960.21 l
-4286.22 3959.81 4293.55 3952.36 4296.32 3929.02 c
-4301.35 3929.02 l
-4301.35 3997.04 l
-4296.32 3997.04 l
-4292.76 3974.1 4285.82 3967.05 4266 3967.05 c
-4266 4013.74 l
-4266 4021.19 4268.52 4023 4278.41 4023 c
-4297.13 4023 4308.8 4019.64 4315.04 4012.74 c
-4319.47 4007.71 4321.68 4002.27 4324.5 3989.59 c
-4329.33 3989.59 l
-h
-4334.96 3894 m
-f*
-4379.19 3987 m
-4340.84 3987 l
-4340.84 3981.95 l
-4349.49 3980.74 4352 3978.12 4352 3970.07 c
-4352 3910.9 l
-4352 3902.65 4349.93 3900.44 4340.84 3898.83 c
-4340.84 3894 l
-4394.37 3894 l
-4394.37 3898.83 l
-4382.09 3899.63 4380 3902.25 4380 3914.73 c
-4380 3952.76 l
-4380 3963.23 4385.49 3971.88 4391.95 3971.88 c
-4393.56 3971.88 4395.37 3970.47 4397.59 3967.25 c
-4401.41 3961.82 4404.43 3960.01 4409.66 3960.01 c
-4417.11 3960.01 4422.34 3965.64 4422.34 3973.29 c
-4422.34 3982.55 4415.5 3989.41 4406.04 3989.41 c
-4396.1 3989.41 4388.54 3984.12 4379.19 3970.27 c
-h
-4424.35 3894 m
-f*
-4519.19 3906.88 m
-4517.18 3904.87 l
-4516.57 3904.26 4515.97 3904.06 4514.96 3904.06 c
-4512.15 3904.06 4511 3905.67 4511 3909.09 c
-4511 3961.62 l
-4511 3978.73 4495.6 3989.42 4470.89 3989.42 c
-4448.15 3989.42 4432.85 3979.06 4432.85 3963.83 c
-4432.85 3955.38 4437.69 3950.55 4445.94 3950.55 c
-4453.99 3950.55 4459.62 3955.38 4459.62 3962.22 c
-4459.62 3965.04 4458.61 3967.66 4456 3970.88 c
-4454.19 3972.89 4453.58 3974.1 4453.58 3975.3 c
-4453.58 3979.53 4459.02 3982.42 4466.26 3982.42 c
-4478.14 3982.42 4483.86 3977.08 4483.86 3965.04 c
-4483.86 3950.35 l
-4459.91 3943.1 4450.29 3939.48 4442.51 3934.45 c
-4433.46 3928.41 4429 3921.37 4429 3912.52 c
-4429 3900.24 4438.27 3891.18 4451.17 3891.18 c
-4462.84 3891.18 4472.1 3895.21 4483.17 3905.27 c
-4485.38 3895.01 4489.81 3891.18 4499.67 3891.18 c
-4508.32 3891.18 4514.56 3894.4 4522.21 3902.65 c
-h
-4483 3914.13 m
-4477.55 3907.89 4473.52 3905.47 4468.68 3905.47 c
-4462.64 3905.47 4458 3910.91 4458 3918.96 c
-4458 3930.63 4466.61 3938.88 4483 3943.31 c
-h
-4524.62 3894 m
-f*
-4566.4 3987 m
-4527.7 3987 l
-4527.7 3981.95 l
-4536.55 3980.74 4539 3978.32 4539 3970.07 c
-4539 3910.9 l
-4539 3902.65 4536.74 3900.44 4527.7 3898.83 c
-4527.7 3894 l
-4576 3894 l
-4576 3898.83 l
-4568.95 3899.84 4567 3902.65 4567 3910.3 c
-4567 3964.03 l
-4567 3965.04 4569.87 3968.66 4572.18 3970.88 c
-4576.4 3974.1 4580.02 3976.42 4583.65 3976.42 c
-4591.5 3976.42 4595 3971.59 4595 3959 c
-4595 3910.3 l
-4595 3902.05 4592.68 3899.43 4584.85 3898.83 c
-4584.85 3894 l
-4631.95 3894 l
-4631.95 3898.83 l
-4624.9 3899.64 4623 3902.65 4623 3910.3 c
-4623 3964.03 l
-4623 3965.04 4625.73 3968.46 4627.92 3970.68 c
-4632.35 3974.1 4635.97 3976.42 4639.59 3976.42 c
-4647.24 3976.42 4650 3971.38 4650 3959 c
-4650 3910.3 l
-4650 3901.85 4647.85 3899.43 4640.4 3898.83 c
-4640.4 3894 l
-4688.3 3894 l
-4688.3 3899 l
-4680.45 3899.4 4678 3901.78 4678 3910.3 c
-4678 3960.81 l
-4678 3978.12 4667.43 3989.42 4651.07 3989.42 c
-4639.59 3989.42 4631.95 3984.73 4621.48 3971.68 c
-4615.44 3984.36 4608.4 3989.42 4595.72 3989.42 c
-4582.95 3989.42 4573.98 3983.91 4566.4 3971.68 c
-h
-4691.64 3894 m
-f*
-4769.9 3919.16 m
-4761.65 3909.29 4755.61 3905.18 4746.96 3905.18 c
-4739.31 3905.18 4733.27 3908.77 4729.25 3915.94 c
-4725.43 3922.54 4723.82 3929.56 4723.01 3944 c
-4773.73 3944 l
-4772.52 3960.36 4769.5 3969.43 4763.26 3977.12 c
-4756.82 3984.96 4747.36 3989.42 4736.09 3989.42 c
-4710.94 3989.42 4694.03 3969.4 4694.03 3939.88 c
-4694.03 3910.5 4710.53 3891.18 4735.49 3891.18 c
-4751.79 3891.18 4761.65 3897.42 4774.73 3916.34 c
-h
-4722 3951 m
-4722.61 3974.96 4726.23 3982.42 4736.09 3982.42 c
-4741.93 3982.42 4745.55 3979.38 4747.16 3973.49 c
-4748.17 3969.67 4748.57 3964.03 4748.97 3953.77 c
-4748.97 3951 l
-h
-4778.35 3894 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4814 -3892]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3804.95 3548.15 m
-3804.95 3658.55 3713.75 3749.75 3602.15 3749.75 c
-3106.55 3749.75 l
-2994.95 3749.75 2903.75 3658.55 2903.75 3548.15 c
-2903.75 3410.15 l
-2903.75 3299.75 2994.95 3208.55 3106.55 3208.55 c
-3602.15 3208.55 l
-3713.75 3208.55 3804.95 3299.75 3804.95 3410.15 c
-f*
-1 g
-3735.35 3604.55 m
-3735.35 3711.35 3646.55 3798.95 3537.35 3798.95 c
-3052.55 3798.95 l
-2943.35 3798.95 2854.55 3711.35 2854.55 3604.55 c
-2854.55 3472.55 l
-2854.55 3365.75 2943.35 3278.15 3052.55 3278.15 c
-3537.35 3278.15 l
-3646.55 3278.15 3735.35 3365.75 3735.35 3472.55 c
-f*
-0 g
-3735.35 3604.55 m
-3735.35 3711.35 3646.55 3798.95 3537.35 3798.95 c
-3052.55 3798.95 l
-2943.35 3798.95 2854.55 3711.35 2854.55 3604.55 c
-2854.55 3472.55 l
-2854.55 3365.75 2943.35 3278.15 3052.55 3278.15 c
-3537.35 3278.15 l
-3646.55 3278.15 3735.35 3365.75 3735.35 3472.55 c
-h
-S
-0.201248 i
-3082.33 3645 m
-2968.22 3645 l
-2968.22 3640 l
-2982.11 3639.2 2986 3636.18 2986 3625.72 c
-2986 3528.32 l
-2986 3517.85 2983.17 3515.64 2968.22 3514.03 c
-2968.22 3509 l
-3040.67 3509 l
-3040.67 3514 l
-3022.15 3514.81 3019 3517.23 3019 3528.32 c
-3019 3575.21 l
-3039.22 3574.81 3046.55 3567.36 3049.32 3544.02 c
-3054.35 3544.02 l
-3054.35 3612.04 l
-3049.32 3612.04 l
-3045.76 3589.1 3038.82 3582.05 3019 3582.05 c
-3019 3628.74 l
-3019 3636.19 3021.52 3638 3031.41 3638 c
-3050.13 3638 3061.8 3634.64 3068.04 3627.74 c
-3072.47 3622.71 3074.68 3617.27 3077.5 3604.59 c
-3082.33 3604.59 l
-h
-3087.96 3509 m
-f*
-3131.19 3602 m
-3092.84 3602 l
-3092.84 3596.95 l
-3101.49 3595.74 3104 3593.12 3104 3585.07 c
-3104 3525.9 l
-3104 3517.65 3101.93 3515.44 3092.84 3513.83 c
-3092.84 3509 l
-3146.37 3509 l
-3146.37 3513.83 l
-3134.09 3514.63 3132 3517.25 3132 3529.73 c
-3132 3567.76 l
-3132 3578.23 3137.49 3586.88 3143.95 3586.88 c
-3145.56 3586.88 3147.37 3585.47 3149.59 3582.25 c
-3153.41 3576.82 3156.43 3575.01 3161.66 3575.01 c
-3169.11 3575.01 3174.34 3580.64 3174.34 3588.29 c
-3174.34 3597.55 3167.5 3604.41 3158.04 3604.41 c
-3148.1 3604.41 3140.54 3599.12 3131.19 3585.27 c
-h
-3176.35 3509 m
-f*
-3271.19 3521.88 m
-3269.18 3519.87 l
-3268.57 3519.26 3267.97 3519.06 3266.96 3519.06 c
-3264.15 3519.06 3263 3520.67 3263 3524.09 c
-3263 3576.62 l
-3263 3593.73 3247.6 3604.42 3222.89 3604.42 c
-3200.15 3604.42 3184.85 3594.06 3184.85 3578.83 c
-3184.85 3570.38 3189.69 3565.55 3197.94 3565.55 c
-3205.99 3565.55 3211.62 3570.38 3211.62 3577.22 c
-3211.62 3580.04 3210.61 3582.66 3208 3585.88 c
-3206.19 3587.89 3205.58 3589.1 3205.58 3590.3 c
-3205.58 3594.53 3211.02 3597.42 3218.26 3597.42 c
-3230.14 3597.42 3235.86 3592.08 3235.86 3580.04 c
-3235.86 3565.35 l
-3211.91 3558.1 3202.29 3554.48 3194.51 3549.45 c
-3185.46 3543.41 3181 3536.37 3181 3527.52 c
-3181 3515.24 3190.27 3506.18 3203.17 3506.18 c
-3214.84 3506.18 3224.1 3510.21 3235.17 3520.27 c
-3237.38 3510.01 3241.81 3506.18 3251.67 3506.18 c
-3260.32 3506.18 3266.56 3509.4 3274.21 3517.65 c
-h
-3235 3529.13 m
-3229.55 3522.89 3225.52 3520.47 3220.68 3520.47 c
-3214.64 3520.47 3210 3525.91 3210 3533.96 c
-3210 3545.63 3218.61 3553.88 3235 3558.31 c
-h
-3276.62 3509 m
-f*
-3318.4 3602 m
-3279.7 3602 l
-3279.7 3596.95 l
-3288.55 3595.74 3291 3593.32 3291 3585.07 c
-3291 3525.9 l
-3291 3517.65 3288.74 3515.44 3279.7 3513.83 c
-3279.7 3509 l
-3328 3509 l
-3328 3513.83 l
-3320.95 3514.84 3319 3517.65 3319 3525.3 c
-3319 3579.03 l
-3319 3580.04 3321.87 3583.66 3324.18 3585.88 c
-3328.4 3589.1 3332.02 3591.42 3335.65 3591.42 c
-3343.5 3591.42 3347 3586.59 3347 3574 c
-3347 3525.3 l
-3347 3517.05 3344.68 3514.43 3336.85 3513.83 c
-3336.85 3509 l
-3383.95 3509 l
-3383.95 3513.83 l
-3376.9 3514.64 3375 3517.65 3375 3525.3 c
-3375 3579.03 l
-3375 3580.04 3377.73 3583.46 3379.92 3585.68 c
-3384.35 3589.1 3387.97 3591.42 3391.59 3591.42 c
-3399.24 3591.42 3402 3586.38 3402 3574 c
-3402 3525.3 l
-3402 3516.85 3399.85 3514.43 3392.4 3513.83 c
-3392.4 3509 l
-3440.3 3509 l
-3440.3 3514 l
-3432.45 3514.4 3430 3516.78 3430 3525.3 c
-3430 3575.81 l
-3430 3593.12 3419.43 3604.42 3403.07 3604.42 c
-3391.59 3604.42 3383.95 3599.73 3373.48 3586.68 c
-3367.44 3599.36 3360.4 3604.42 3347.72 3604.42 c
-3334.95 3604.42 3325.98 3598.91 3318.4 3586.68 c
-h
-3443.64 3509 m
-f*
-3523.9 3534.16 m
-3515.65 3524.29 3509.61 3520.18 3500.96 3520.18 c
-3493.31 3520.18 3487.27 3523.77 3483.25 3530.94 c
-3479.43 3537.54 3477.82 3544.56 3477.01 3559 c
-3527.73 3559 l
-3526.52 3575.36 3523.5 3584.43 3517.26 3592.12 c
-3510.82 3599.96 3501.36 3604.42 3490.09 3604.42 c
-3464.94 3604.42 3448.03 3584.4 3448.03 3554.88 c
-3448.03 3525.5 3464.53 3506.18 3489.49 3506.18 c
-3505.79 3506.18 3515.65 3512.42 3528.73 3531.34 c
-h
-3476 3566 m
-3476.61 3589.96 3480.23 3597.42 3490.09 3597.42 c
-3495.93 3597.42 3499.55 3594.38 3501.16 3588.49 c
-3502.17 3584.67 3502.57 3579.03 3502.97 3568.77 c
-3502.97 3566 l
-h
-3532.35 3509 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -3509]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-8 w
-1751.75 4750.55 m
-1751.75 4758.95 1751.75 4758.95 1751.75 4750.55 c
-1751.75 4602.95 1791.35 4461.35 1863.35 4360.55 c
-S
-1804.55 4366.55 m
-1853.75 4382.15 l
-1878.95 4427.75 l
-1940.15 4280.15 l
-f*
-2244.95 3784.55 m
-2334.95 3666.95 2519.75 3582.95 2740.55 3561.35 c
-S
-2699.75 3518.15 m
-2721.35 3564.95 l
-2705.75 3612.95 l
-2854.55 3556.55 l
-f*
-2831.75 5164.55 m
-2729.75 5264.15 2584.55 5321.75 2430.95 5321.75 c
-2326.55 5321.75 2224.55 5295.35 2136.95 5244.95 c
-S
-2766.95 5158.55 m
-2814.95 5174.15 l
-2838.95 5219.75 l
-2902.55 5073.35 l
-f*
-32 w
-3062.15 4598.15 m
-3158.15 4380.95 3362.15 4242.95 3585.35 4242.95 c
-3738.95 4242.95 3887.75 4310.15 3995.75 4427.75 c
-S
-4016.15 4337.75 m
-3971.75 4407.35 l
-3891.35 4428.95 l
-4100.15 4582.55 l
-f*
-0.564706 g
-3616.55 4779.35 m
-3480.95 4816.55 l
-3576.95 4871.75 l
-3423.35 4881.35 l
-3466.55 4950.95 l
-3318.95 4930.55 l
-3300.95 5002.55 l
-3180.95 4956.95 l
-3106.55 5020.55 l
-3029.75 4956.95 l
-2909.75 5002.55 l
-2891.75 4930.55 l
-2744.15 4950.95 l
-2787.35 4881.35 l
-2633.75 4871.75 l
-2729.75 4816.55 l
-2595.35 4779.35 l
-2729.75 4744.55 l
-2633.75 4688.15 l
-2787.35 4679.75 l
-2744.15 4610.15 l
-2891.75 4629.35 l
-2909.75 4558.55 l
-3029.75 4602.95 l
-3106.55 4539.35 l
-3180.95 4602.95 l
-3300.95 4558.55 l
-3318.95 4629.35 l
-3466.55 4610.15 l
-3423.35 4679.75 l
-3576.95 4688.15 l
-3480.95 4744.55 l
-f*
-1 g
-3556.55 4839.35 m
-3420.95 4876.55 l
-3516.95 4931.75 l
-3363.35 4941.35 l
-3406.55 5010.95 l
-3258.95 4990.55 l
-3240.95 5062.55 l
-3120.95 5016.95 l
-3046.55 5080.55 l
-2969.75 5016.95 l
-2849.75 5062.55 l
-2831.75 4990.55 l
-2684.15 5010.95 l
-2727.35 4941.35 l
-2573.75 4931.75 l
-2669.75 4876.55 l
-2535.35 4839.35 l
-2669.75 4804.55 l
-2573.75 4748.15 l
-2727.35 4739.75 l
-2684.15 4670.15 l
-2831.75 4689.35 l
-2849.75 4618.55 l
-2969.75 4662.95 l
-3046.55 4599.35 l
-3120.95 4662.95 l
-3240.95 4618.55 l
-3258.95 4689.35 l
-3406.55 4670.15 l
-3363.35 4739.75 l
-3516.95 4748.15 l
-3420.95 4804.55 l
-f*
-0 g
-3556.55 4839.35 m
-3420.95 4876.55 l
-3516.95 4931.75 l
-3363.35 4941.35 l
-3406.55 5010.95 l
-3258.95 4990.55 l
-3240.95 5062.55 l
-3120.95 5016.95 l
-3046.55 5080.55 l
-2969.75 5016.95 l
-2849.75 5062.55 l
-2831.75 4990.55 l
-2684.15 5010.95 l
-2727.35 4941.35 l
-2573.75 4931.75 l
-2669.75 4876.55 l
-2535.35 4839.35 l
-2669.75 4804.55 l
-2573.75 4748.15 l
-2727.35 4739.75 l
-2684.15 4670.15 l
-2831.75 4689.35 l
-2849.75 4618.55 l
-2969.75 4662.95 l
-3046.55 4599.35 l
-3120.95 4662.95 l
-3240.95 4618.55 l
-3258.95 4689.35 l
-3406.55 4670.15 l
-3363.35 4739.75 l
-3516.95 4748.15 l
-3420.95 4804.55 l
-3556.55 4839.35 l
-3516.95 4839.35 l
-3394.55 4808.15 l
-3483.35 4756.55 l
-3346.55 4748.15 l
-3386.15 4682.15 l
-3250.55 4701.35 l
-3233.75 4631.75 l
-3118.55 4674.95 l
-3046.55 4612.55 l
-2972.15 4674.95 l
-2856.95 4631.75 l
-2840.15 4701.35 l
-2703.35 4682.15 l
-2745.35 4748.15 l
-2607.35 4756.55 l
-2696.15 4808.15 l
-2573.75 4839.35 l
-2694.95 4871.75 l
-2607.35 4924.55 l
-2745.35 4931.75 l
-2703.35 4998.95 l
-2840.15 4979.75 l
-2856.95 5048.15 l
-2972.15 5006.15 l
-3046.55 5068.55 l
-3118.55 5006.15 l
-3233.75 5048.15 l
-3250.55 4979.75 l
-3386.15 4998.95 l
-3346.55 4931.75 l
-3483.35 4924.55 l
-3394.55 4871.75 l
-3516.95 4839.35 l
-3556.55 4839.35 l
-f*
-0.2 i
-2867.08 4890.76 m
-2847.08 4816.52 l
-2844.52 4807.88 2841.48 4805.64 2831.08 4805 c
-2831.08 4801 l
-2881 4801 l
-2881 4805 l
-2871.72 4805.48 2869.48 4806.76 2869.48 4811.88 c
-2869.48 4813.64 2869.8 4815.4 2870.76 4819.08 c
-2870.92 4819.88 l
-2871.08 4820.68 l
-2890.76 4892.52 l
-2893.16 4900.84 2895.56 4903.08 2903.72 4904.04 c
-2903.72 4908 l
-2869.8 4908 l
-2820.2 4831.24 l
-2811.56 4908 l
-2776.2 4908 l
-2776.2 4904 l
-2786.28 4903.52 2787.72 4902.89 2787.72 4898.44 c
-2787.72 4896.2 2787.08 4893.32 2785.96 4889.16 c
-2768.52 4829.48 l
-2762.12 4808.68 2761 4806.92 2752.36 4805 c
-2752.36 4801 l
-2785.48 4801 l
-2785.48 4805 l
-2775.24 4806.28 2772.68 4808.2 2772.68 4814.76 c
-2772.68 4817.48 2773.48 4821.48 2775.72 4829.48 c
-2791.88 4888.52 l
-2802.6 4799.08 l
-2807.08 4799.08 l
-h
-2899.24 4801 m
-f*
-2969.44 4821.32 m
-2962.88 4812.52 2960.48 4809.76 2957.92 4809.76 c
-2956.64 4809.76 2956 4810.86 2956 4812.52 c
-2956 4816.52 2957.44 4823.08 2961.44 4836.2 c
-2972.8 4873.96 l
-2955.04 4872.84 l
-2952.16 4863.4 l
-2950.72 4871.56 2947.2 4875.08 2940.32 4875.08 c
-2920.64 4875.08 2897 4844.27 2897 4819.24 c
-2897 4807.08 2903.74 4798.92 2913.92 4798.92 c
-2923.68 4798.92 2931.04 4804.68 2940.16 4820.04 c
-2938.24 4813.48 2938 4811.56 2938 4809.32 c
-2938 4803.4 2942.76 4798.76 2948.64 4798.76 c
-2956.16 4798.76 2963.52 4805 2972.8 4818.92 c
-h
-2942.56 4868.2 m
-2946.08 4867.88 2948.56 4865 2948.56 4860.68 c
-2948.56 4851.08 2943.24 4833.32 2936.96 4822.28 c
-2932.64 4814.44 2927.84 4809.92 2923.52 4809.92 c
-2919.36 4809.92 2916 4813.75 2916 4818.92 c
-2916 4827.24 2921.42 4843.24 2928.16 4855.08 c
-2932.96 4863.56 2938.24 4868.52 2942.56 4868.2 c
-h
-2980 4801 m
-f*
-3013.56 4874.92 m
-2997.24 4872.36 2991 4871.4 2982.68 4870.44 c
-2982.68 4866 l
-2989.88 4865.69 2991.32 4865.07 2991.32 4862.12 c
-2991.32 4860.52 2990.04 4854.76 2987.8 4846.44 c
-2971.8 4784.36 l
-2968.76 4773.8 2967.48 4772.84 2959.8 4773 c
-2959.8 4768 l
-2999.64 4768 l
-2999.64 4773 l
-2991.64 4773.14 2989.24 4774.16 2989.24 4777.64 c
-2989.24 4779.88 2990.36 4784.68 2993.4 4795.88 c
-2994.52 4799.72 2994.52 4800.04 2995.16 4802.44 c
-3000.76 4799.56 3002.68 4798.92 3006.04 4798.92 c
-3027.8 4798.92 3050.36 4827.88 3050.36 4855.56 c
-3050.36 4867.4 3043.64 4875.08 3033.08 4875.08 c
-3023.96 4875.08 3016.92 4869.92 3007.48 4856.52 c
-h
-3024.12 4863.56 m
-3028.28 4863.24 3030.68 4859.56 3030.36 4854.44 c
-3029.72 4843.88 3024.6 4828.04 3018.84 4817.64 c
-3013.88 4809 3008.76 4803.92 3003.32 4803.92 c
-2999.8 4803.92 2997.08 4806.75 2997.08 4810.28 c
-2997.08 4813 2998.84 4819.56 3003.16 4834.12 c
-3006.68 4845.8 3008.12 4849.8 3010.52 4853.48 c
-3014.52 4859.72 3019.96 4863.88 3024.12 4863.56 c
-h
-3059 4801 m
-f*
-3094.56 4874.92 m
-3078.24 4872.36 3072 4871.4 3063.68 4870.44 c
-3063.68 4866 l
-3070.88 4865.69 3072.32 4865.07 3072.32 4862.12 c
-3072.32 4860.52 3071.04 4854.76 3068.8 4846.44 c
-3052.8 4784.36 l
-3049.76 4773.8 3048.48 4772.84 3040.8 4773 c
-3040.8 4768 l
-3080.64 4768 l
-3080.64 4773 l
-3072.64 4773.14 3070.24 4774.16 3070.24 4777.64 c
-3070.24 4779.88 3071.36 4784.68 3074.4 4795.88 c
-3075.52 4799.72 3075.52 4800.04 3076.16 4802.44 c
-3081.76 4799.56 3083.68 4798.92 3087.04 4798.92 c
-3108.8 4798.92 3131.36 4827.88 3131.36 4855.56 c
-3131.36 4867.4 3124.64 4875.08 3114.08 4875.08 c
-3104.96 4875.08 3097.92 4869.92 3088.48 4856.52 c
-h
-3105.12 4863.56 m
-3109.28 4863.24 3111.68 4859.56 3111.36 4854.44 c
-3110.72 4843.88 3105.6 4828.04 3099.84 4817.64 c
-3094.88 4809 3089.76 4803.92 3084.32 4803.92 c
-3080.8 4803.92 3078.08 4806.75 3078.08 4810.28 c
-3078.08 4813 3079.84 4819.56 3084.16 4834.12 c
-3087.68 4845.8 3089.12 4849.8 3091.52 4853.48 c
-3095.52 4859.72 3100.96 4863.88 3105.12 4863.56 c
-h
-3140 4801 m
-f*
-3174.56 4823.56 m
-3172.32 4820.36 l
-3168.16 4814.12 3164.48 4810.56 3162.08 4810.56 c
-3160.8 4810.56 3160 4811.77 3160 4813.16 c
-3160 4814.6 3160.62 4818.76 3161.12 4821.48 c
-3175.68 4874.92 l
-3167.22 4873 3156.26 4871.4 3144.04 4870.44 c
-3144.04 4866 l
-3145.44 4866 l
-3150.24 4866 3153.48 4864.44 3153.48 4861.48 c
-3153.48 4860.2 3152.71 4857.8 3151.68 4855.08 c
-3142.4 4820.68 l
-3141.12 4816.04 3141 4811.88 3141 4809.64 c
-3141 4803.56 3145.2 4799.56 3151.36 4799.56 c
-3160.96 4799.56 3166.88 4804.36 3178.08 4821.32 c
-h
-3170.88 4910.4 m
-3165.44 4910.4 3161 4905.46 3161 4900.04 c
-3161 4893.8 3165.26 4889.4 3171.04 4889.4 c
-3177.12 4889.4 3182 4893.86 3182 4899.56 c
-3182 4905.48 3177 4910.4 3170.88 4910.4 c
-h
-3184.48 4801 m
-f*
-3258.36 4822.6 m
-3251.96 4812.68 3249.88 4810.56 3247.16 4810.56 c
-3245.88 4810.56 3245 4811.63 3245 4813.16 c
-3245 4814.76 3245.94 4818.12 3248.92 4827.08 c
-3254.68 4844.52 l
-3257.24 4852.04 3259 4859.08 3259 4862.92 c
-3259 4870.76 3254.78 4875.08 3247.16 4875.08 c
-3241.24 4875.08 3235.48 4872.62 3231.16 4868.36 c
-3225.24 4862.76 3222.2 4858.92 3211.48 4843.08 c
-3221.72 4874.76 l
-3211.48 4872.52 3198.68 4870.92 3189.72 4870.6 c
-3189.72 4865.8 l
-3196.44 4865.65 3198.36 4864.92 3198.36 4862.12 c
-3198.36 4860.2 3196.12 4851.72 3191 4833.64 c
-3187.32 4820.68 3186.2 4816.52 3182.04 4801 c
-3201.4 4801 l
-3208.92 4828.68 3214.68 4842.6 3224.6 4855.56 c
-3227.8 4859.88 3232.76 4863.08 3235.64 4863.08 c
-3237.72 4863.08 3240 4861.63 3240 4860.04 c
-3240 4859.56 3239.54 4858.28 3238.84 4856.68 c
-3230.04 4830.12 l
-3227.48 4822.44 3226 4813.32 3226 4809.16 c
-3226 4803.08 3229.84 4799.56 3236.44 4799.56 c
-3246.04 4799.56 3252.6 4805 3261.88 4820.52 c
-h
-3271.96 4801 m
-f*
-3349.48 4870 m
-3331.72 4870 l
-3326.28 4873.58 3321.48 4875.08 3314.12 4875.08 c
-3294.44 4875.08 3278 4862.05 3278 4845.8 c
-3278 4837.64 3282.35 4831.88 3291.4 4828.2 c
-3278.28 4820.84 3276 4818.6 3276 4812.68 c
-3276 4807.56 3278.89 4804.52 3285.96 4802.12 c
-3276.04 4799.72 3272.84 4798.44 3269 4795.4 c
-3266.44 4793.16 3265 4789.32 3265 4785.48 c
-3265 4775.08 3276.56 4769 3294.76 4769 c
-3317.32 4769 3333 4778.72 3333 4792.52 c
-3333 4802.28 3326.6 4807.56 3309.16 4812.52 c
-3300.68 4814.92 l
-3295.56 4816.36 3292 4818.6 3292 4821 c
-3292 4823.56 3294.68 4826.28 3297 4826.28 c
-3297.8 4826.28 3298.92 4826.24 3300.2 4826.12 c
-3301.96 4825.64 3303.24 4825 3305.16 4825 c
-3312.2 4825 3319.4 4827.09 3325.48 4830.92 c
-3334.76 4836.2 3340 4844.36 3340 4853.96 c
-3340 4856.64 3339.59 4858.32 3338.76 4861 c
-3349.48 4861 l
-h
-3291.4 4800.04 m
-3293.32 4799.88 3305.48 4795.72 3309 4794.12 c
-3313.48 4791.88 3316 4789.16 3316 4785 c
-3316 4777.96 3308.8 4774 3296.36 4774 c
-3285.96 4774 3279 4779.1 3279 4786.44 c
-3279 4789.48 3280.32 4792.2 3283.24 4795.24 c
-3285.32 4797.32 3290.12 4800.2 3291.4 4800.04 c
-h
-3313.8 4870.08 m
-3317.96 4870.08 3321 4866.19 3321 4860.52 c
-3321 4855.08 3319.08 4847.4 3316.36 4841.48 c
-3313 4834.12 3308.84 4830 3303.88 4830 c
-3299.56 4830 3297 4833.52 3297 4839.88 c
-3297 4846.28 3299.79 4856.04 3303.24 4862.12 c
-3306.28 4867.4 3309.64 4870.08 3313.8 4870.08 c
-h
-3353 4801 m
-f*
-1 i
-0.564706 g
-2708.15 3969.35 m
-2573.75 4006.55 l
-2669.75 4061.75 l
-2516.15 4071.35 l
-2558.15 4140.95 l
-2410.55 4120.55 l
-2393.75 4192.55 l
-2273.75 4146.95 l
-2198.15 4210.55 l
-2122.55 4146.95 l
-2002.55 4192.55 l
-1984.55 4120.55 l
-1835.75 4140.95 l
-1880.15 4071.35 l
-1726.55 4061.75 l
-1822.55 4006.55 l
-1686.95 3969.35 l
-1822.55 3934.55 l
-1726.55 3878.15 l
-1880.15 3869.75 l
-1835.75 3800.15 l
-1984.55 3819.35 l
-2002.55 3748.55 l
-2122.55 3792.95 l
-2198.15 3729.35 l
-2273.75 3792.95 l
-2393.75 3748.55 l
-2410.55 3819.35 l
-2558.15 3800.15 l
-2516.15 3869.75 l
-2669.75 3878.15 l
-2573.75 3934.55 l
-f*
-1 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-f*
-0 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-2648.15 4029.35 l
-2609.75 4029.35 l
-2487.35 3998.15 l
-2576.15 3946.55 l
-2438.15 3938.15 l
-2478.95 3872.15 l
-2343.35 3891.35 l
-2326.55 3821.75 l
-2211.35 3864.95 l
-2138.15 3802.55 l
-2064.95 3864.95 l
-1949.75 3821.75 l
-1931.75 3891.35 l
-1796.15 3872.15 l
-1836.95 3938.15 l
-1700.15 3946.55 l
-1788.95 3998.15 l
-1666.55 4029.35 l
-1787.75 4061.75 l
-1700.15 4114.55 l
-1836.95 4121.75 l
-1796.15 4188.95 l
-1931.75 4169.75 l
-1949.75 4238.15 l
-2064.95 4196.15 l
-2138.15 4258.55 l
-2211.35 4196.15 l
-2326.55 4238.15 l
-2343.35 4169.75 l
-2478.95 4188.95 l
-2438.15 4121.75 l
-2576.15 4114.55 l
-2487.35 4061.75 l
-2609.75 4029.35 l
-2648.15 4029.35 l
-f*
-0.2 i
-1960.08 4080.76 m
-1940.08 4006.52 l
-1937.52 3997.88 1934.48 3995.64 1924.08 3995 c
-1924.08 3991 l
-1974 3991 l
-1974 3995 l
-1964.72 3995.48 1962.48 3996.76 1962.48 4001.88 c
-1962.48 4003.64 1962.8 4005.4 1963.76 4009.08 c
-1963.92 4009.88 l
-1964.08 4010.68 l
-1983.76 4082.52 l
-1986.16 4090.84 1988.56 4093.08 1996.72 4094.04 c
-1996.72 4098 l
-1962.8 4098 l
-1913.2 4021.24 l
-1904.56 4098 l
-1869.2 4098 l
-1869.2 4094 l
-1879.28 4093.52 1880.72 4092.89 1880.72 4088.44 c
-1880.72 4086.2 1880.08 4083.32 1878.96 4079.16 c
-1861.52 4019.48 l
-1855.12 3998.68 1854 3996.92 1845.36 3995 c
-1845.36 3991 l
-1878.48 3991 l
-1878.48 3995 l
-1868.24 3996.28 1865.68 3998.2 1865.68 4004.76 c
-1865.68 4007.48 1866.48 4011.48 1868.72 4019.48 c
-1884.88 4078.52 l
-1895.6 3989.08 l
-1900.08 3989.08 l
-h
-1992.24 3991 m
-f*
-2061.44 4011.32 m
-2054.88 4002.52 2052.48 3999.76 2049.92 3999.76 c
-2048.64 3999.76 2048 4000.86 2048 4002.52 c
-2048 4006.52 2049.44 4013.08 2053.44 4026.2 c
-2064.8 4063.96 l
-2047.04 4062.84 l
-2044.16 4053.4 l
-2042.72 4061.56 2039.2 4065.08 2032.32 4065.08 c
-2012.64 4065.08 1989 4034.27 1989 4009.24 c
-1989 3997.08 1995.74 3988.92 2005.92 3988.92 c
-2015.68 3988.92 2023.04 3994.68 2032.16 4010.04 c
-2030.24 4003.48 2030 4001.56 2030 3999.32 c
-2030 3993.4 2034.76 3988.76 2040.64 3988.76 c
-2048.16 3988.76 2055.52 3995 2064.8 4008.92 c
-h
-2034.56 4058.2 m
-2038.08 4057.88 2040.56 4055 2040.56 4050.68 c
-2040.56 4041.08 2035.24 4023.32 2028.96 4012.28 c
-2024.64 4004.44 2019.84 3999.92 2015.52 3999.92 c
-2011.36 3999.92 2008 4003.75 2008 4008.92 c
-2008 4017.24 2013.42 4033.24 2020.16 4045.08 c
-2024.96 4053.56 2030.24 4058.52 2034.56 4058.2 c
-h
-2072 3991 m
-f*
-2106.56 4064.92 m
-2090.24 4062.36 2084 4061.4 2075.68 4060.44 c
-2075.68 4056 l
-2082.88 4055.69 2084.32 4055.07 2084.32 4052.12 c
-2084.32 4050.52 2083.04 4044.76 2080.8 4036.44 c
-2064.8 3974.36 l
-2061.76 3963.8 2060.48 3962.84 2052.8 3963 c
-2052.8 3958 l
-2092.64 3958 l
-2092.64 3963 l
-2084.64 3963.14 2082.24 3964.16 2082.24 3967.64 c
-2082.24 3969.88 2083.36 3974.68 2086.4 3985.88 c
-2087.52 3989.72 2087.52 3990.04 2088.16 3992.44 c
-2093.76 3989.56 2095.68 3988.92 2099.04 3988.92 c
-2120.8 3988.92 2143.36 4017.88 2143.36 4045.56 c
-2143.36 4057.4 2136.64 4065.08 2126.08 4065.08 c
-2116.96 4065.08 2109.92 4059.92 2100.48 4046.52 c
-h
-2117.12 4053.56 m
-2121.28 4053.24 2123.68 4049.56 2123.36 4044.44 c
-2122.72 4033.88 2117.6 4018.04 2111.84 4007.64 c
-2106.88 3999 2101.76 3993.92 2096.32 3993.92 c
-2092.8 3993.92 2090.08 3996.75 2090.08 4000.28 c
-2090.08 4003 2091.84 4009.56 2096.16 4024.12 c
-2099.68 4035.8 2101.12 4039.8 2103.52 4043.48 c
-2107.52 4049.72 2112.96 4053.88 2117.12 4053.56 c
-h
-2152 3991 m
-f*
-2187.56 4064.92 m
-2171.24 4062.36 2165 4061.4 2156.68 4060.44 c
-2156.68 4056 l
-2163.88 4055.69 2165.32 4055.07 2165.32 4052.12 c
-2165.32 4050.52 2164.04 4044.76 2161.8 4036.44 c
-2145.8 3974.36 l
-2142.76 3963.8 2141.48 3962.84 2133.8 3963 c
-2133.8 3958 l
-2173.64 3958 l
-2173.64 3963 l
-2165.64 3963.14 2163.24 3964.16 2163.24 3967.64 c
-2163.24 3969.88 2164.36 3974.68 2167.4 3985.88 c
-2168.52 3989.72 2168.52 3990.04 2169.16 3992.44 c
-2174.76 3989.56 2176.68 3988.92 2180.04 3988.92 c
-2201.8 3988.92 2224.36 4017.88 2224.36 4045.56 c
-2224.36 4057.4 2217.64 4065.08 2207.08 4065.08 c
-2197.96 4065.08 2190.92 4059.92 2181.48 4046.52 c
-h
-2198.12 4053.56 m
-2202.28 4053.24 2204.68 4049.56 2204.36 4044.44 c
-2203.72 4033.88 2198.6 4018.04 2192.84 4007.64 c
-2187.88 3999 2182.76 3993.92 2177.32 3993.92 c
-2173.8 3993.92 2171.08 3996.75 2171.08 4000.28 c
-2171.08 4003 2172.84 4009.56 2177.16 4024.12 c
-2180.68 4035.8 2182.12 4039.8 2184.52 4043.48 c
-2188.52 4049.72 2193.96 4053.88 2198.12 4053.56 c
-h
-2233 3991 m
-f*
-2266.56 4013.56 m
-2264.32 4010.36 l
-2260.16 4004.12 2256.48 4000.56 2254.08 4000.56 c
-2252.8 4000.56 2252 4001.77 2252 4003.16 c
-2252 4004.6 2252.62 4008.76 2253.12 4011.48 c
-2267.68 4064.92 l
-2259.22 4063 2248.26 4061.4 2236.04 4060.44 c
-2236.04 4056 l
-2237.44 4056 l
-2242.24 4056 2245.48 4054.44 2245.48 4051.48 c
-2245.48 4050.2 2244.71 4047.8 2243.68 4045.08 c
-2234.4 4010.68 l
-2233.12 4006.04 2233 4001.88 2233 3999.64 c
-2233 3993.56 2237.2 3989.56 2243.36 3989.56 c
-2252.96 3989.56 2258.88 3994.36 2270.08 4011.32 c
-h
-2262.88 4100.4 m
-2257.44 4100.4 2253 4095.46 2253 4090.04 c
-2253 4083.8 2257.26 4079.4 2263.04 4079.4 c
-2269.12 4079.4 2274 4083.86 2274 4089.56 c
-2274 4095.48 2269 4100.4 2262.88 4100.4 c
-h
-2276.48 3991 m
-f*
-2351.36 4012.6 m
-2344.96 4002.68 2342.88 4000.56 2340.16 4000.56 c
-2338.88 4000.56 2338 4001.63 2338 4003.16 c
-2338 4004.76 2338.94 4008.12 2341.92 4017.08 c
-2347.68 4034.52 l
-2350.24 4042.04 2352 4049.08 2352 4052.92 c
-2352 4060.76 2347.78 4065.08 2340.16 4065.08 c
-2334.24 4065.08 2328.48 4062.62 2324.16 4058.36 c
-2318.24 4052.76 2315.2 4048.92 2304.48 4033.08 c
-2314.72 4064.76 l
-2304.48 4062.52 2291.68 4060.92 2282.72 4060.6 c
-2282.72 4055.8 l
-2289.44 4055.65 2291.36 4054.92 2291.36 4052.12 c
-2291.36 4050.2 2289.12 4041.72 2284 4023.64 c
-2280.32 4010.68 2279.2 4006.52 2275.04 3991 c
-2294.4 3991 l
-2301.92 4018.68 2307.68 4032.6 2317.6 4045.56 c
-2320.8 4049.88 2325.76 4053.08 2328.64 4053.08 c
-2330.72 4053.08 2333 4051.63 2333 4050.04 c
-2333 4049.56 2332.54 4048.28 2331.84 4046.68 c
-2323.04 4020.12 l
-2320.48 4012.44 2319 4003.32 2319 3999.16 c
-2319 3993.08 2322.84 3989.56 2329.44 3989.56 c
-2339.04 3989.56 2345.6 3995 2354.88 4010.52 c
-h
-2364.96 3991 m
-f*
-2442.48 4060 m
-2424.72 4060 l
-2419.28 4063.58 2414.48 4065.08 2407.12 4065.08 c
-2387.44 4065.08 2371 4052.05 2371 4035.8 c
-2371 4027.64 2375.35 4021.88 2384.4 4018.2 c
-2371.28 4010.84 2369 4008.6 2369 4002.68 c
-2369 3997.56 2371.89 3994.52 2378.96 3992.12 c
-2369.04 3989.72 2365.84 3988.44 2362 3985.4 c
-2359.44 3983.16 2358 3979.32 2358 3975.48 c
-2358 3965.08 2369.56 3959 2387.76 3959 c
-2410.32 3959 2426 3968.72 2426 3982.52 c
-2426 3992.28 2419.6 3997.56 2402.16 4002.52 c
-2393.68 4004.92 l
-2388.56 4006.36 2385 4008.6 2385 4011 c
-2385 4013.56 2387.68 4016.28 2390 4016.28 c
-2390.8 4016.28 2391.92 4016.24 2393.2 4016.12 c
-2394.96 4015.64 2396.24 4015 2398.16 4015 c
-2405.2 4015 2412.4 4017.09 2418.48 4020.92 c
-2427.76 4026.2 2433 4034.36 2433 4043.96 c
-2433 4046.64 2432.59 4048.32 2431.76 4051 c
-2442.48 4051 l
-h
-2384.4 3990.04 m
-2386.32 3989.88 2398.48 3985.72 2402 3984.12 c
-2406.48 3981.88 2409 3979.16 2409 3975 c
-2409 3967.96 2401.8 3964 2389.36 3964 c
-2378.96 3964 2372 3969.1 2372 3976.44 c
-2372 3979.48 2373.32 3982.2 2376.24 3985.24 c
-2378.32 3987.32 2383.12 3990.2 2384.4 3990.04 c
-h
-2406.8 4060.08 m
-2410.96 4060.08 2414 4056.19 2414 4050.52 c
-2414 4045.08 2412.08 4037.4 2409.36 4031.48 c
-2406 4024.12 2401.84 4020 2396.88 4020 c
-2392.56 4020 2390 4023.52 2390 4029.88 c
-2390 4036.28 2392.79 4046.04 2396.24 4052.12 c
-2399.28 4057.4 2402.64 4060.08 2406.8 4060.08 c
-h
-2446 3991 m
-f*
-1 i
-1 g
-4396.55 3387.35 m
-4476.95 3387.35 l
-4476.95 3233.75 l
-4643.75 3233.75 l
-4643.75 3387.35 l
-4726.55 3387.35 l
-4559.75 3538.55 l
-f*
-0 g
-4396.55 3387.35 m
-4476.95 3387.35 l
-4476.95 3233.75 l
-4643.75 3233.75 l
-4643.75 3387.35 l
-4726.55 3387.35 l
-4559.75 3538.55 l
-4396.55 3387.35 l
-4420.55 3396.95 l
-4559.75 3524.15 l
-4700.15 3396.95 l
-4634.15 3396.95 l
-4634.15 3243.35 l
-4487.75 3243.35 l
-4487.75 3396.95 l
-4420.55 3396.95 l
-4396.55 3387.35 l
-f*
-0.2 i
-4135.88 3119 m
-4135.88 3114 l
-4148.3 3113.29 4152 3110.45 4152 3101.4 c
-4152 3014.28 l
-4152 3005.1 4149.25 3002.94 4135.88 3001.5 c
-4135.88 2997 l
-4193.84 2997 l
-4224.26 2997 4244 3010.5 4244 3030.84 c
-4244 3039.12 4240.73 3046.32 4234.7 3051.9 c
-4228.4 3057.48 4222.28 3060 4209.68 3062.7 c
-4230.56 3068.82 4238 3076.2 4238 3089.88 c
-4238 3108.42 4221.55 3119 4191.5 3119 c
-h
-4181 3058.74 m
-4185.92 3058.74 l
-4204.46 3058.74 4213 3049.2 4213 3029.22 c
-4213 3011.76 4205.77 3003 4191.5 3003 c
-4183.58 3003 4181 3005.99 4181 3013.74 c
-h
-4181 3104.46 m
-4181 3110.94 4183.39 3114 4190.24 3114 c
-4202.84 3114 4209 3106.03 4209 3088.62 c
-4209 3069.72 4203.08 3064.68 4181 3064.14 c
-h
-4253.06 2997 m
-f*
-4338.14 3008.52 m
-4336.34 3006.72 l
-4335.8 3006.18 4335.26 3006 4334.36 3006 c
-4331.84 3006 4331 3007.44 4331 3010.5 c
-4331 3057.48 l
-4331 3072.78 4317.16 3082.16 4294.94 3082.16 c
-4274.6 3082.16 4260.92 3072.97 4260.92 3059.46 c
-4260.92 3051.9 4265.24 3047.58 4272.62 3047.58 c
-4279.82 3047.58 4284.86 3051.9 4284.86 3058.02 c
-4284.86 3060.54 4283.96 3062.88 4281.62 3065.76 c
-4280 3067.56 4279.46 3068.64 4279.46 3069.72 c
-4279.46 3073.5 4284.32 3076.16 4290.8 3076.16 c
-4301.42 3076.16 4306 3071.37 4306 3060.54 c
-4306 3047.4 l
-4284.89 3040.92 4276.41 3037.68 4269.56 3033.18 c
-4261.46 3027.78 4258 3021.48 4258 3013.56 c
-4258 3002.58 4266.07 2994.48 4277.3 2994.48 c
-4287.74 2994.48 4296.02 2998.08 4305.92 3007.08 c
-4307.9 2997.9 4311.86 2994.48 4320.68 2994.48 c
-4328.42 2994.48 4334 2997.36 4340.84 3004.74 c
-h
-4306 3015 m
-4301.04 3009.42 4297.37 3007.26 4292.96 3007.26 c
-4287.56 3007.26 4284 3012.12 4284 3019.32 c
-4284 3029.76 4291.57 3037.14 4306 3041.1 c
-h
-4343 2997 m
-f*
-4404.22 3055.68 m
-4404.22 3081.8 l
-4400.24 3081.8 l
-4399.16 3079.08 4398.08 3078.2 4395.74 3078.2 c
-4394.66 3078.2 4393.04 3078.55 4390.16 3079.44 c
-4384.4 3081.42 4380.26 3082.16 4376.12 3082.16 c
-4359.74 3082.16 4348 3070.99 4348 3055.86 c
-4348 3043.98 4355.34 3035.7 4373.42 3027.96 c
-4385.84 3022.56 4391 3018.06 4391 3012.3 c
-4391 3005.28 4385.48 3000.48 4377.2 3000.48 c
-4364.6 3000.48 4356.32 3008.62 4352.54 3024.36 c
-4347.5 3024.36 l
-4347.5 2994.66 l
-4352 2994.66 l
-4353.98 2998.44 4355.06 2999.7 4356.68 2999.7 c
-4357.58 2999.7 4359.02 2999.34 4360.82 2998.62 c
-4366.04 2996.46 4375.22 2994.48 4380.26 2994.48 c
-4396.64 2994.48 4408 3005.64 4408 3021.84 c
-4408 3034.62 4401.15 3042.54 4383.14 3049.92 c
-4370.9 3055.14 4366 3059.64 4366 3065.76 c
-4366 3071.7 4370.98 3076.16 4377.74 3076.16 c
-4382.6 3076.16 4387.28 3074.19 4391.24 3070.44 c
-4395.02 3066.84 4397 3063.42 4399.7 3055.68 c
-h
-4413.02 2997 m
-f*
-4484.36 3019.5 m
-4476.98 3010.68 4471.58 3007.48 4463.84 3007.48 c
-4457 3007.48 4451.6 3010.53 4448 3016.62 c
-4444.58 3022.36 4443.14 3028.45 4442.42 3041 c
-4487.78 3041 l
-4486.7 3055.99 4484 3064.3 4478.42 3071.34 c
-4472.66 3078.36 4464.2 3082.16 4454.12 3082.16 c
-4431.62 3082.16 4416.5 3064.33 4416.5 3038.04 c
-4416.5 3011.76 4431.26 2994.48 4453.58 2994.48 c
-4468.16 2994.48 4476.98 3000.06 4488.68 3016.98 c
-h
-4441.52 3048 m
-4442.06 3069.42 4445.3 3076.16 4454.12 3076.16 c
-4459.34 3076.16 4462.58 3073.42 4464.02 3068.1 c
-4464.92 3064.68 4465.28 3059.64 4465.64 3050.46 c
-4465.64 3048 l
-h
-4491.92 2997 m
-f*
-4538 2997 m
-f*
-4641.94 3119 m
-4539.88 3119 l
-4539.88 3114 l
-4552.3 3113.29 4556 3110.63 4556 3101.4 c
-4556 3014.28 l
-4556 3004.92 4553.44 3002.94 4539.88 3001.5 c
-4539.88 2997 l
-4604.68 2997 l
-4604.68 3002 l
-4588.12 3002.69 4585 3004.77 4585 3014.28 c
-4585 3056.22 l
-4603.28 3055.86 4609.91 3049.2 4612.42 3028.32 c
-4616.92 3028.32 l
-4616.92 3089.16 l
-4612.42 3089.16 l
-4609.19 3068.64 4602.92 3062.34 4585 3062.34 c
-4585 3104.1 l
-4585 3110.76 4587.32 3113 4596.4 3113 c
-4613.14 3113 4623.58 3109.8 4629.16 3103.2 c
-4633.12 3098.7 4635.1 3093.84 4637.62 3082.5 c
-4641.94 3082.5 l
-h
-4646.98 2997 m
-f*
-4686.28 3080 m
-4652.22 3080 l
-4652.22 3075.66 l
-4659.96 3074.58 4662 3072.24 4662 3065.04 c
-4662 3012.12 l
-4662 3004.74 4660.19 3002.76 4652.22 3001.32 c
-4652.22 2997 l
-4700.1 2997 l
-4700.1 3001.32 l
-4689.12 3002.04 4687 3004.38 4687 3015.54 c
-4687 3049.56 l
-4687 3058.92 4692.02 3066.66 4697.94 3066.66 c
-4699.38 3066.66 4701 3065.4 4702.98 3062.52 c
-4706.4 3057.66 4709.1 3056.04 4713.78 3056.04 c
-4720.44 3056.04 4725.12 3061.08 4725.12 3067.92 c
-4725.12 3076.2 4719 3082.16 4710.54 3082.16 c
-4701.55 3082.16 4694.73 3077.47 4686.28 3065.22 c
-h
-4726.92 2997 m
-f*
-4813.14 3008.52 m
-4811.34 3006.72 l
-4810.8 3006.18 4810.26 3006 4809.36 3006 c
-4806.84 3006 4806 3007.44 4806 3010.5 c
-4806 3057.48 l
-4806 3072.78 4792.16 3082.16 4769.94 3082.16 c
-4749.6 3082.16 4735.92 3072.97 4735.92 3059.46 c
-4735.92 3051.9 4740.24 3047.58 4747.62 3047.58 c
-4754.82 3047.58 4759.86 3051.9 4759.86 3058.02 c
-4759.86 3060.54 4758.96 3062.88 4756.62 3065.76 c
-4755 3067.56 4754.46 3068.64 4754.46 3069.72 c
-4754.46 3073.5 4759.32 3076.16 4765.8 3076.16 c
-4776.42 3076.16 4781 3071.37 4781 3060.54 c
-4781 3047.4 l
-4759.89 3040.92 4751.41 3037.68 4744.56 3033.18 c
-4736.46 3027.78 4733 3021.48 4733 3013.56 c
-4733 3002.58 4741.07 2994.48 4752.3 2994.48 c
-4762.74 2994.48 4771.02 2998.08 4780.92 3007.08 c
-4782.9 2997.9 4786.86 2994.48 4795.68 2994.48 c
-4803.42 2994.48 4809 2997.36 4815.84 3004.74 c
-h
-4781 3015 m
-4776.04 3009.42 4772.37 3007.26 4767.96 3007.26 c
-4762.56 3007.26 4759 3012.12 4759 3019.32 c
-4759 3029.76 4766.57 3037.14 4781 3041.1 c
-h
-4818 2997 m
-f*
-4855.46 3080 m
-4820.73 3080 l
-4820.73 3075.66 l
-4828.65 3074.58 4831 3072.42 4831 3065.04 c
-4831 3012.12 l
-4831 3004.74 4828.95 3002.76 4820.73 3001.32 c
-4820.73 2997 l
-4863.93 2997 l
-4863.93 3001.32 l
-4857.63 3002.22 4856 3004.74 4856 3011.58 c
-4856 3059.64 l
-4856 3060.54 4858.51 3063.78 4860.51 3065.76 c
-4864.29 3068.64 4867.53 3070.16 4870.77 3070.16 c
-4877.79 3070.16 4881 3066 4881 3055.14 c
-4881 3011.58 l
-4881 3004.2 4878.9 3001.86 4871.85 3001.32 c
-4871.85 2997 l
-4913.97 2997 l
-4913.97 3001.32 l
-4907.67 3002.04 4906 3004.74 4906 3011.58 c
-4906 3059.64 l
-4906 3060.54 4908.43 3063.6 4910.37 3065.58 c
-4914.33 3068.64 4917.57 3070.16 4920.81 3070.16 c
-4927.65 3070.16 4930 3065.82 4930 3055.14 c
-4930 3011.58 l
-4930 3004.02 4928.1 3001.86 4921.53 3001.32 c
-4921.53 2997 l
-4964.37 2997 l
-4964.37 3001 l
-4957.35 3001.37 4955 3003.6 4955 3011.58 c
-4955 3056.76 l
-4955 3072.24 4945.6 3082.16 4931.07 3082.16 c
-4920.81 3082.16 4913.97 3078.01 4904.61 3066.48 c
-4899.21 3077.82 4892.91 3082.16 4881.57 3082.16 c
-4870.2 3082.16 4862.21 3077.29 4855.46 3066.48 c
-h
-4967.94 2997 m
-f*
-5040.36 3019.5 m
-5032.98 3010.68 5027.58 3007.48 5019.84 3007.48 c
-5013 3007.48 5007.6 3010.53 5004 3016.62 c
-5000.58 3022.36 4999.14 3028.45 4998.42 3041 c
-5043.78 3041 l
-5042.7 3055.99 5040 3064.3 5034.42 3071.34 c
-5028.66 3078.36 5020.2 3082.16 5010.12 3082.16 c
-4987.62 3082.16 4972.5 3064.33 4972.5 3038.04 c
-4972.5 3011.76 4987.26 2994.48 5009.58 2994.48 c
-5024.16 2994.48 5032.98 3000.06 5044.68 3016.98 c
-h
-4997.52 3048 m
-4998.06 3069.42 5001.3 3076.16 5010.12 3076.16 c
-5015.34 3076.16 5018.58 3073.42 5020.02 3068.1 c
-5020.92 3064.68 5021.28 3059.64 5021.64 3050.46 c
-5021.64 3048 l
-h
-5047.92 2997 m
-f*
-1 i
-4132.55 2962.55 914.4 15.5999 re
-f
-0.2 i
-2824.26 2676.36 m
-2813.64 2665.2 2807.88 2660.88 2799.06 2657.46 c
-2793.84 2655.3 2787.9 2654.58 2782.86 2654.58 c
-2770.98 2654.58 2759.64 2660.74 2754.42 2669.88 c
-2749.2 2679.42 2747 2692.2 2747 2710.38 c
-2747 2747.64 2758.23 2767.7 2779.8 2767.7 c
-2788.26 2767.7 2796 2764.38 2803.74 2757.36 c
-2811.48 2750.52 2815.62 2744.4 2821.92 2730.72 c
-2826.42 2730.72 l
-2826.42 2773.16 l
-2821.56 2773.16 l
-2818.86 2766.43 2817.06 2764.56 2813.64 2764.56 c
-2811.84 2764.56 2809.5 2765.28 2805.36 2767.08 c
-2794.92 2771.4 2786.1 2773.7 2777.46 2773.7 c
-2741.64 2773.7 2715 2745.84 2715 2708.76 c
-2715 2671.68 2741.21 2645.58 2778.54 2645.58 c
-2799.24 2645.58 2811.48 2651.88 2829.66 2671.86 c
-h
-2835.96 2649 m
-f*
-2899.18 2646.66 m
-2906.78 2649.36 2911.02 2650.08 2922.5 2651.34 c
-2933.66 2652.6 l
-2933.66 2657 l
-2925.74 2657.35 2924 2659.63 2924 2667.18 c
-2924 2732 l
-2887.4 2732 l
-2887.4 2727.66 l
-2896.4 2726.94 2899 2724.78 2899 2717.04 c
-2899 2666.1 l
-2892.88 2660.16 2889.18 2658.48 2883.8 2658.48 c
-2876.42 2658.48 2874 2662 2874 2670.96 c
-2874 2732 l
-2839.88 2732 l
-2839.88 2727.66 l
-2847.26 2726.22 2849 2724.6 2849 2717.04 c
-2849 2671.68 l
-2849 2655.84 2857.89 2646.48 2872.64 2646.48 c
-2882.16 2646.48 2888.56 2649.36 2899.18 2658.36 c
-h
-2937.08 2649 m
-f*
-2975.28 2732 m
-2941.22 2732 l
-2941.22 2727.66 l
-2948.96 2726.58 2951 2724.24 2951 2717.04 c
-2951 2664.12 l
-2951 2656.74 2949.19 2654.76 2941.22 2653.32 c
-2941.22 2649 l
-2989.1 2649 l
-2989.1 2653.32 l
-2978.12 2654.04 2976 2656.38 2976 2667.54 c
-2976 2701.56 l
-2976 2710.92 2981.02 2718.66 2986.94 2718.66 c
-2988.38 2718.66 2990 2717.4 2991.98 2714.52 c
-2995.4 2709.66 2998.1 2708.04 3002.78 2708.04 c
-3009.44 2708.04 3014.12 2713.08 3014.12 2719.92 c
-3014.12 2728.2 3008 2734.16 2999.54 2734.16 c
-2990.55 2734.16 2983.73 2729.47 2975.28 2717.22 c
-h
-3015.92 2649 m
-f*
-3056.28 2732 m
-3022.22 2732 l
-3022.22 2727.66 l
-3029.96 2726.58 3032 2724.24 3032 2717.04 c
-3032 2664.12 l
-3032 2656.74 3030.19 2654.76 3022.22 2653.32 c
-3022.22 2649 l
-3070.1 2649 l
-3070.1 2653.32 l
-3059.12 2654.04 3057 2656.38 3057 2667.54 c
-3057 2701.56 l
-3057 2710.92 3062.02 2718.66 3067.94 2718.66 c
-3069.38 2718.66 3071 2717.4 3072.98 2714.52 c
-3076.4 2709.66 3079.1 2708.04 3083.78 2708.04 c
-3090.44 2708.04 3095.12 2713.08 3095.12 2719.92 c
-3095.12 2728.2 3089 2734.16 3080.54 2734.16 c
-3071.55 2734.16 3064.73 2729.47 3056.28 2717.22 c
-h
-3096.92 2649 m
-f*
-3168.36 2671.5 m
-3160.98 2662.68 3155.58 2659.48 3147.84 2659.48 c
-3141 2659.48 3135.6 2662.53 3132 2668.62 c
-3128.58 2674.36 3127.14 2680.45 3126.42 2693 c
-3171.78 2693 l
-3170.7 2707.99 3168 2716.3 3162.42 2723.34 c
-3156.66 2730.36 3148.2 2734.16 3138.12 2734.16 c
-3115.62 2734.16 3100.5 2716.33 3100.5 2690.04 c
-3100.5 2663.76 3115.26 2646.48 3137.58 2646.48 c
-3152.16 2646.48 3160.98 2652.06 3172.68 2668.98 c
-h
-3125.52 2700 m
-3126.06 2721.42 3129.3 2728.16 3138.12 2728.16 c
-3143.34 2728.16 3146.58 2725.42 3148.02 2720.1 c
-3148.92 2716.68 3149.28 2711.64 3149.64 2702.46 c
-3149.64 2700 l
-h
-3175.92 2649 m
-f*
-3213.82 2732 m
-3179.78 2732 l
-3179.78 2727.66 l
-3187.7 2726.4 3189 2724.6 3189 2717.04 c
-3189 2664.12 l
-3189 2656.56 3187.61 2654.94 3179.78 2653.32 c
-3179.78 2649 l
-3223.16 2649 l
-3223.16 2653.32 l
-3216.5 2654.22 3214 2656.92 3214 2663.58 c
-3214 2711.64 l
-3214 2712.36 3215.4 2714.16 3217.4 2715.96 c
-3221.36 2719.92 3225.68 2722.16 3230 2722.16 c
-3236.12 2722.16 3239 2717.27 3239 2707.14 c
-3239 2663.58 l
-3239 2656.92 3236.71 2654.04 3230.72 2653.32 c
-3230.72 2649 l
-3273.02 2649 l
-3273.02 2653.32 l
-3266 2653.86 3264 2656.02 3264 2663.58 c
-3264 2708.76 l
-3264 2724.24 3254.54 2734.16 3239.9 2734.16 c
-3228.96 2734.16 3220.57 2729.11 3213.82 2718.48 c
-h
-3276.08 2649 m
-f*
-3330.9 2732 m
-3314 2732 l
-3314 2762.4 l
-3309.48 2762.4 l
-3298.5 2746.92 3291.3 2738.82 3279.6 2728.92 c
-3279.6 2724 l
-3289 2724 l
-3289 2665.74 l
-3289 2654.04 3296.73 2646.84 3309.12 2646.84 c
-3321.18 2646.84 3328.38 2652.24 3335.76 2667 c
-3331.26 2668.98 l
-3327.66 2662.14 3324.78 2659.84 3321 2659.84 c
-3315.96 2659.84 3314 2662.83 3314 2669.88 c
-3314 2724 l
-3330.9 2724 l
-h
-3335.94 2649 m
-f*
-3381 2649 m
-f*
-3485.94 2771 m
-3383.88 2771 l
-3383.88 2766 l
-3396.3 2765.29 3400 2762.63 3400 2753.4 c
-3400 2666.28 l
-3400 2656.92 3397.44 2654.94 3383.88 2653.5 c
-3383.88 2649 l
-3448.68 2649 l
-3448.68 2654 l
-3432.12 2654.69 3429 2656.77 3429 2666.28 c
-3429 2708.22 l
-3447.28 2707.86 3453.91 2701.2 3456.42 2680.32 c
-3460.92 2680.32 l
-3460.92 2741.16 l
-3456.42 2741.16 l
-3453.19 2720.64 3446.92 2714.34 3429 2714.34 c
-3429 2756.1 l
-3429 2762.76 3431.32 2765 3440.4 2765 c
-3457.14 2765 3467.58 2761.8 3473.16 2755.2 c
-3477.12 2750.7 3479.1 2745.84 3481.62 2734.5 c
-3485.94 2734.5 l
-h
-3490.98 2649 m
-f*
-3530.28 2732 m
-3496.22 2732 l
-3496.22 2727.66 l
-3503.96 2726.58 3506 2724.24 3506 2717.04 c
-3506 2664.12 l
-3506 2656.74 3504.19 2654.76 3496.22 2653.32 c
-3496.22 2649 l
-3544.1 2649 l
-3544.1 2653.32 l
-3533.12 2654.04 3531 2656.38 3531 2667.54 c
-3531 2701.56 l
-3531 2710.92 3536.02 2718.66 3541.94 2718.66 c
-3543.38 2718.66 3545 2717.4 3546.98 2714.52 c
-3550.4 2709.66 3553.1 2708.04 3557.78 2708.04 c
-3564.44 2708.04 3569.12 2713.08 3569.12 2719.92 c
-3569.12 2728.2 3563 2734.16 3554.54 2734.16 c
-3545.55 2734.16 3538.73 2729.47 3530.28 2717.22 c
-h
-3570.92 2649 m
-f*
-3656.14 2660.52 m
-3654.34 2658.72 l
-3653.8 2658.18 3653.26 2658 3652.36 2658 c
-3649.84 2658 3649 2659.44 3649 2662.5 c
-3649 2709.48 l
-3649 2724.78 3635.16 2734.16 3612.94 2734.16 c
-3592.6 2734.16 3578.92 2724.97 3578.92 2711.46 c
-3578.92 2703.9 3583.24 2699.58 3590.62 2699.58 c
-3597.82 2699.58 3602.86 2703.9 3602.86 2710.02 c
-3602.86 2712.54 3601.96 2714.88 3599.62 2717.76 c
-3598 2719.56 3597.46 2720.64 3597.46 2721.72 c
-3597.46 2725.5 3602.32 2728.16 3608.8 2728.16 c
-3619.42 2728.16 3624 2723.37 3624 2712.54 c
-3624 2699.4 l
-3602.89 2692.92 3594.41 2689.68 3587.56 2685.18 c
-3579.46 2679.78 3576 2673.48 3576 2665.56 c
-3576 2654.58 3584.07 2646.48 3595.3 2646.48 c
-3605.74 2646.48 3614.02 2650.08 3623.92 2659.08 c
-3625.9 2649.9 3629.86 2646.48 3638.68 2646.48 c
-3646.42 2646.48 3652 2649.36 3658.84 2656.74 c
-h
-3624 2667 m
-3619.04 2661.42 3615.37 2659.26 3610.96 2659.26 c
-3605.56 2659.26 3602 2664.12 3602 2671.32 c
-3602 2681.76 3609.57 2689.14 3624 2693.1 c
-h
-3661 2649 m
-f*
-3698.46 2732 m
-3663.73 2732 l
-3663.73 2727.66 l
-3671.65 2726.58 3674 2724.42 3674 2717.04 c
-3674 2664.12 l
-3674 2656.74 3671.95 2654.76 3663.73 2653.32 c
-3663.73 2649 l
-3706.93 2649 l
-3706.93 2653.32 l
-3700.63 2654.22 3699 2656.74 3699 2663.58 c
-3699 2711.64 l
-3699 2712.54 3701.51 2715.78 3703.51 2717.76 c
-3707.29 2720.64 3710.53 2722.16 3713.77 2722.16 c
-3720.79 2722.16 3724 2718 3724 2707.14 c
-3724 2663.58 l
-3724 2656.2 3721.9 2653.86 3714.85 2653.32 c
-3714.85 2649 l
-3756.97 2649 l
-3756.97 2653.32 l
-3750.67 2654.04 3749 2656.74 3749 2663.58 c
-3749 2711.64 l
-3749 2712.54 3751.43 2715.6 3753.37 2717.58 c
-3757.33 2720.64 3760.57 2722.16 3763.81 2722.16 c
-3770.65 2722.16 3773 2717.82 3773 2707.14 c
-3773 2663.58 l
-3773 2656.02 3771.1 2653.86 3764.53 2653.32 c
-3764.53 2649 l
-3807.37 2649 l
-3807.37 2653 l
-3800.35 2653.37 3798 2655.6 3798 2663.58 c
-3798 2708.76 l
-3798 2724.24 3788.6 2734.16 3774.07 2734.16 c
-3763.81 2734.16 3756.97 2730.01 3747.61 2718.48 c
-3742.21 2729.82 3735.91 2734.16 3724.57 2734.16 c
-3713.2 2734.16 3705.21 2729.29 3698.46 2718.48 c
-h
-3810.94 2649 m
-f*
-3883.36 2671.5 m
-3875.98 2662.68 3870.58 2659.48 3862.84 2659.48 c
-3856 2659.48 3850.6 2662.53 3847 2668.62 c
-3843.58 2674.36 3842.14 2680.45 3841.42 2693 c
-3886.78 2693 l
-3885.7 2707.99 3883 2716.3 3877.42 2723.34 c
-3871.66 2730.36 3863.2 2734.16 3853.12 2734.16 c
-3830.62 2734.16 3815.5 2716.33 3815.5 2690.04 c
-3815.5 2663.76 3830.26 2646.48 3852.58 2646.48 c
-3867.16 2646.48 3875.98 2652.06 3887.68 2668.98 c
-h
-3840.52 2700 m
-3841.06 2721.42 3844.3 2728.16 3853.12 2728.16 c
-3858.34 2728.16 3861.58 2725.42 3863.02 2720.1 c
-3863.92 2716.68 3864.28 2711.64 3864.64 2702.46 c
-3864.64 2700 l
-h
-3890.92 2649 m
-f*
-1 i
-2705.75 2614.55 1184.4 15.5999 re
-f
-1 g
-3311.75 2840.15 m
-3478.55 2993.75 l
-3395.75 2993.75 l
-3395.75 3144.95 l
-3230.15 3144.95 l
-3230.15 2993.75 l
-3148.55 2993.75 l
-f*
-0 g
-3311.75 2840.15 m
-3478.55 2993.75 l
-3395.75 2993.75 l
-3395.75 3144.95 l
-3230.15 3144.95 l
-3230.15 2993.75 l
-3148.55 2993.75 l
-3311.75 2840.15 l
-3311.75 2853.35 l
-3173.75 2982.95 l
-3239.75 2982.95 l
-3239.75 3134.15 l
-3386.15 3134.15 l
-3386.15 2982.95 l
-3453.35 2982.95 l
-3311.75 2853.35 l
-3311.75 2840.15 l
-f*
-0.201248 i
-1359.33 3052 m
-1245.22 3052 l
-1245.22 3047 l
-1259.11 3046.2 1263 3043.18 1263 3032.72 c
-1263 2935.32 l
-1263 2924.85 1260.17 2922.64 1245.22 2921.03 c
-1245.22 2916 l
-1317.67 2916 l
-1317.67 2921 l
-1299.15 2921.81 1296 2924.23 1296 2935.32 c
-1296 2982.21 l
-1316.22 2981.81 1323.55 2974.36 1326.32 2951.02 c
-1331.35 2951.02 l
-1331.35 3019.04 l
-1326.32 3019.04 l
-1322.76 2996.1 1315.82 2989.05 1296 2989.05 c
-1296 3035.74 l
-1296 3043.19 1298.52 3045 1308.41 3045 c
-1327.13 3045 1338.8 3041.64 1345.04 3034.74 c
-1349.47 3029.71 1351.68 3024.27 1354.5 3011.59 c
-1359.33 3011.59 l
-h
-1364.96 2916 m
-f*
-1409.19 3009 m
-1370.84 3009 l
-1370.84 3003.95 l
-1379.49 3002.74 1382 3000.12 1382 2992.07 c
-1382 2932.9 l
-1382 2924.65 1379.93 2922.44 1370.84 2920.83 c
-1370.84 2916 l
-1424.37 2916 l
-1424.37 2920.83 l
-1412.09 2921.63 1410 2924.25 1410 2936.73 c
-1410 2974.76 l
-1410 2985.23 1415.49 2993.88 1421.95 2993.88 c
-1423.56 2993.88 1425.37 2992.47 1427.59 2989.25 c
-1431.41 2983.82 1434.43 2982.01 1439.66 2982.01 c
-1447.11 2982.01 1452.34 2987.64 1452.34 2995.29 c
-1452.34 3004.55 1445.5 3011.41 1436.04 3011.41 c
-1426.1 3011.41 1418.54 3006.12 1409.19 2992.27 c
-h
-1454.35 2916 m
-f*
-1549.19 2928.88 m
-1547.18 2926.87 l
-1546.57 2926.26 1545.97 2926.06 1544.96 2926.06 c
-1542.15 2926.06 1541 2927.67 1541 2931.09 c
-1541 2983.62 l
-1541 3000.73 1525.6 3011.42 1500.89 3011.42 c
-1478.15 3011.42 1462.85 3001.06 1462.85 2985.83 c
-1462.85 2977.38 1467.69 2972.55 1475.94 2972.55 c
-1483.99 2972.55 1489.62 2977.38 1489.62 2984.22 c
-1489.62 2987.04 1488.61 2989.66 1486 2992.88 c
-1484.19 2994.89 1483.58 2996.1 1483.58 2997.3 c
-1483.58 3001.53 1489.02 3004.42 1496.26 3004.42 c
-1508.14 3004.42 1513.86 2999.08 1513.86 2987.04 c
-1513.86 2972.35 l
-1489.91 2965.1 1480.29 2961.48 1472.51 2956.45 c
-1463.46 2950.41 1459 2943.37 1459 2934.52 c
-1459 2922.24 1468.27 2913.18 1481.17 2913.18 c
-1492.84 2913.18 1502.1 2917.21 1513.17 2927.27 c
-1515.38 2917.01 1519.81 2913.18 1529.67 2913.18 c
-1538.32 2913.18 1544.56 2916.4 1552.21 2924.65 c
-h
-1513 2936.13 m
-1507.55 2929.89 1503.52 2927.47 1498.68 2927.47 c
-1492.64 2927.47 1488 2932.91 1488 2940.96 c
-1488 2952.63 1496.61 2960.88 1513 2965.31 c
-h
-1554.62 2916 m
-f*
-1596.4 3009 m
-1557.7 3009 l
-1557.7 3003.95 l
-1566.55 3002.74 1569 3000.32 1569 2992.07 c
-1569 2932.9 l
-1569 2924.65 1566.74 2922.44 1557.7 2920.83 c
-1557.7 2916 l
-1606 2916 l
-1606 2920.83 l
-1598.95 2921.84 1597 2924.65 1597 2932.3 c
-1597 2986.03 l
-1597 2987.04 1599.87 2990.66 1602.18 2992.88 c
-1606.4 2996.1 1610.02 2998.42 1613.65 2998.42 c
-1621.5 2998.42 1625 2993.59 1625 2981 c
-1625 2932.3 l
-1625 2924.05 1622.68 2921.43 1614.85 2920.83 c
-1614.85 2916 l
-1661.95 2916 l
-1661.95 2920.83 l
-1654.9 2921.64 1653 2924.65 1653 2932.3 c
-1653 2986.03 l
-1653 2987.04 1655.73 2990.46 1657.92 2992.68 c
-1662.35 2996.1 1665.97 2998.42 1669.59 2998.42 c
-1677.24 2998.42 1680 2993.38 1680 2981 c
-1680 2932.3 l
-1680 2923.85 1677.85 2921.43 1670.4 2920.83 c
-1670.4 2916 l
-1718.3 2916 l
-1718.3 2921 l
-1710.45 2921.4 1708 2923.78 1708 2932.3 c
-1708 2982.81 l
-1708 3000.12 1697.43 3011.42 1681.07 3011.42 c
-1669.59 3011.42 1661.95 3006.73 1651.48 2993.68 c
-1645.44 3006.36 1638.4 3011.42 1625.72 3011.42 c
-1612.95 3011.42 1603.98 3005.91 1596.4 2993.68 c
-h
-1721.64 2916 m
-f*
-1799.9 2941.16 m
-1791.65 2931.29 1785.61 2927.18 1776.96 2927.18 c
-1769.31 2927.18 1763.27 2930.77 1759.25 2937.94 c
-1755.43 2944.54 1753.82 2951.56 1753.01 2966 c
-1803.73 2966 l
-1802.52 2982.36 1799.5 2991.43 1793.26 2999.12 c
-1786.82 3006.96 1777.36 3011.42 1766.09 3011.42 c
-1740.94 3011.42 1724.03 2991.4 1724.03 2961.88 c
-1724.03 2932.5 1740.53 2913.18 1765.49 2913.18 c
-1781.79 2913.18 1791.65 2919.42 1804.73 2938.34 c
-h
-1752 2973 m
-1752.61 2996.96 1756.23 3004.42 1766.09 3004.42 c
-1771.93 3004.42 1775.55 3001.38 1777.16 2995.49 c
-1778.17 2991.67 1778.57 2986.03 1778.97 2975.77 c
-1778.97 2973 l
-h
-1808.35 2916 m
-f*
-1905.16 3011.59 m
-1905.16 3055.22 l
-1899.37 3055.22 l
-1897.96 3049.82 1896.55 3048.42 1892.93 3048.42 c
-1891.12 3048.42 1888.7 3049.03 1884.47 3050.43 c
-1875.22 3053.86 1868.78 3055.02 1860.93 3055.02 c
-1833.56 3055.02 1817 3039.54 1817 3014.01 c
-1817 3008.98 1817.75 3004.75 1819.07 3000.73 c
-1823.29 2990.06 1834.16 2980.6 1851.27 2972.35 c
-1864.75 2965.91 l
-1882.46 2957.46 1887 2952.22 1887 2941.56 c
-1887 2927.67 1877.25 2919.18 1861.94 2919.18 c
-1850.26 2919.18 1840.6 2923.89 1832.96 2933.31 c
-1827.12 2940.75 1824.3 2947.6 1820.88 2961.88 c
-1815.04 2961.88 l
-1815.04 2912.18 l
-1820.88 2912.18 l
-1822.09 2917.41 1823.7 2919.02 1826.92 2919.02 c
-1828.53 2919.02 1830.74 2918.42 1835.17 2917.01 c
-1845.03 2913.59 1852.48 2912.18 1861.33 2912.18 c
-1891.12 2912.18 1911 2929.28 1911 2954.64 c
-1911 2969.73 1902.04 2984.83 1889.1 2991.27 c
-1859.52 3005.96 l
-1843.22 3014.01 1839 3018.84 1839 3028.7 c
-1839 3041.18 1847.37 3048.02 1860.93 3048.02 c
-1869.99 3048.02 1878.44 3044.47 1885.68 3037.55 c
-1892.53 3030.51 1895.75 3024.67 1899.77 3011.59 c
-h
-1919.89 2916 m
-f*
-2000.9 2941.16 m
-1992.65 2931.29 1986.61 2927.18 1977.96 2927.18 c
-1970.31 2927.18 1964.27 2930.77 1960.25 2937.94 c
-1956.43 2944.54 1954.82 2951.56 1954.01 2966 c
-2004.73 2966 l
-2003.52 2982.36 2000.5 2991.43 1994.26 2999.12 c
-1987.82 3006.96 1978.36 3011.42 1967.09 3011.42 c
-1941.94 3011.42 1925.03 2991.4 1925.03 2961.88 c
-1925.03 2932.5 1941.53 2913.18 1966.49 2913.18 c
-1982.79 2913.18 1992.65 2919.42 2005.73 2938.34 c
-h
-1953 2973 m
-1953.61 2996.96 1957.23 3004.42 1967.09 3004.42 c
-1972.93 3004.42 1976.55 3001.38 1978.16 2995.49 c
-1979.17 2991.67 1979.57 2986.03 1979.97 2975.77 c
-1979.97 2973 l
-h
-2009.35 2916 m
-f*
-2070.38 3009 m
-2051 3009 l
-2051 3042.79 l
-2046.43 3042.79 l
-2034.16 3025.48 2026.11 3016.42 2013.02 3005.35 c
-2013.02 3000 l
-2023 3000 l
-2023 2934.72 l
-2023 2921.64 2031.84 2913.59 2046.03 2913.59 c
-2059.51 2913.59 2067.56 2919.62 2075.81 2936.12 c
-2070.78 2938.34 l
-2066.76 2930.69 2063.54 2927.59 2059.31 2927.59 c
-2053.68 2927.59 2051 2931.09 2051 2939.34 c
-2051 3000 l
-2070.38 3000 l
-h
-2076.02 2916 m
-f*
-1 i
-0.564706 g
-5033.75 4836.95 m
-4866.95 4894.55 l
-4985.75 4983.35 l
-4796.15 4996.55 l
-4848.95 5105.75 l
-4666.55 5074.55 l
-4644.95 5187.35 l
-4496.15 5116.55 l
-4404.95 5216.15 l
-4311.35 5116.55 l
-4162.55 5187.35 l
-4140.95 5074.55 l
-3957.35 5105.75 l
-4011.35 4996.55 l
-3820.55 4983.35 l
-3939.35 4894.55 l
-3773.75 4836.95 l
-3939.35 4781.75 l
-3820.55 4692.95 l
-4011.35 4680.95 l
-3957.35 4570.55 l
-4140.95 4602.95 l
-4162.55 4490.15 l
-4311.35 4560.95 l
-4404.95 4461.35 l
-4496.15 4560.95 l
-4644.95 4490.15 l
-4666.55 4602.95 l
-4848.95 4570.55 l
-4796.15 4680.95 l
-4985.75 4692.95 l
-4866.95 4781.75 l
-f*
-1 g
-4973.75 4896.95 m
-4806.95 4954.55 l
-4925.75 5043.35 l
-4736.15 5056.55 l
-4788.95 5165.75 l
-4606.55 5134.55 l
-4584.95 5247.35 l
-4436.15 5176.55 l
-4344.95 5276.15 l
-4251.35 5176.55 l
-4102.55 5247.35 l
-4080.95 5134.55 l
-3897.35 5165.75 l
-3951.35 5056.55 l
-3760.55 5043.35 l
-3879.35 4954.55 l
-3713.75 4896.95 l
-3879.35 4841.75 l
-3760.55 4752.95 l
-3951.35 4740.95 l
-3897.35 4630.55 l
-4080.95 4662.95 l
-4102.55 4550.15 l
-4251.35 4620.95 l
-4344.95 4521.35 l
-4436.15 4620.95 l
-4584.95 4550.15 l
-4606.55 4662.95 l
-4788.95 4630.55 l
-4736.15 4740.95 l
-4925.75 4752.95 l
-4806.95 4841.75 l
-f*
-0 g
-4973.75 4896.95 m
-4806.95 4954.55 l
-4925.75 5043.35 l
-4736.15 5056.55 l
-4788.95 5165.75 l
-4606.55 5134.55 l
-4584.95 5247.35 l
-4436.15 5176.55 l
-4344.95 5276.15 l
-4251.35 5176.55 l
-4102.55 5247.35 l
-4080.95 5134.55 l
-3897.35 5165.75 l
-3951.35 5056.55 l
-3760.55 5043.35 l
-3879.35 4954.55 l
-3713.75 4896.95 l
-3879.35 4841.75 l
-3760.55 4752.95 l
-3951.35 4740.95 l
-3897.35 4630.55 l
-4080.95 4662.95 l
-4102.55 4550.15 l
-4251.35 4620.95 l
-4344.95 4521.35 l
-4436.15 4620.95 l
-4584.95 4550.15 l
-4606.55 4662.95 l
-4788.95 4630.55 l
-4736.15 4740.95 l
-4925.75 4752.95 l
-4806.95 4841.75 l
-4973.75 4896.95 l
-4850.15 4898.15 l
-4721.75 4856.15 l
-4816.55 4786.55 l
-4674.95 4776.95 l
-4718.15 4683.35 l
-4575.35 4709.75 l
-4554.95 4608.95 l
-4426.55 4670.15 l
-4344.95 4580.15 l
-4259.75 4670.15 l
-4132.55 4608.95 l
-4113.35 4709.75 l
-3966.95 4683.35 l
-4013.75 4776.95 l
-3870.95 4786.55 l
-3964.55 4856.15 l
-3837.35 4898.15 l
-3963.35 4942.55 l
-3870.95 5010.95 l
-4013.75 5019.35 l
-3966.95 5112.95 l
-4113.35 5088.95 l
-4132.55 5188.55 l
-4259.75 5127.35 l
-4344.95 5217.35 l
-4426.55 5127.35 l
-4554.95 5188.55 l
-4575.35 5088.95 l
-4719.35 5112.95 l
-4674.95 5019.35 l
-4816.55 5010.95 l
-4724.15 4942.55 l
-4850.15 4898.15 l
-4973.75 4896.95 l
-f*
-0.2 i
-4251.96 5065 m
-4220.76 5065 l
-4220.76 5061.04 l
-4229.56 5060.24 4231 5059.28 4234.04 5052.24 c
-4214.84 4986.48 l
-4208.6 4965.52 4207.48 4963.76 4198.68 4962 c
-4198.68 4958 l
-4231.96 4958 l
-4231.96 4962 l
-4222.52 4962.8 4219.16 4965.2 4219.16 4971.44 c
-4219.16 4974.48 4220.12 4979.76 4222.04 4986.48 c
-4237.88 5043.44 l
-4279 4955.6 l
-4283.48 4955.6 l
-4306.36 5036.56 l
-4312.6 5057.68 4313.4 5058.96 4322.68 5061.04 c
-4322.68 5065 l
-4289.24 5065 l
-4289.24 5061.04 l
-4298.68 5060.24 4302.04 5057.68 4302.04 5051.6 c
-4302.04 5048.56 4300.92 5043.12 4299.16 5036.56 c
-4286.36 4990.64 l
-h
-4318.52 4958 m
-f*
-4369.72 4980.72 m
-4362.36 4969.68 4357.72 4965.92 4350.84 4965.92 c
-4344.12 4965.92 4341 4970.48 4341 4979.28 c
-4341 4981.84 4341.19 4983.92 4341.56 4987.12 c
-4358.2 4990.32 4366.04 4993.84 4374.04 5001.2 c
-4379.64 5006.32 4383 5012.24 4383 5018 c
-4383 5026.16 4375.83 5032.08 4365.88 5032.08 c
-4342.68 5032.08 4320 5005.92 4320 4979.44 c
-4320 4965.84 4330.15 4955.92 4343.96 4955.92 c
-4356.28 4955.92 4364.76 4962.16 4374.36 4978 c
-h
-4342.68 4992.24 m
-4348.44 5014.48 4355.8 5027.08 4363.48 5027.08 c
-4366.52 5027.08 4368 5025.18 4368 5021.2 c
-4368 5014.16 4365.27 5007.28 4360.12 5002 c
-4355.8 4997.36 4351.8 4995.12 4342.68 4992.24 c
-h
-4390.04 4958 m
-f*
-4391.56 5023.12 m
-4395.56 5023.12 4396.84 5022.96 4398.12 5021.84 c
-4401.48 5019.28 4403.72 5004.24 4404.2 4982 c
-4404.52 4969.52 l
-4404.52 4968.72 l
-4404.52 4968.56 4404.52 4966.16 4404.36 4963.12 c
-4404.2 4955.92 l
-4408.52 4955.92 l
-4417.64 4969.68 l
-4424.2 4980.72 4430.28 4991.44 4435.72 5001.52 c
-4439.4 4955.92 l
-4443.72 4955.92 l
-4473.32 4987.28 4487 5008.56 4487 5022 c
-4487 5027.28 4482.63 5032.08 4477.48 5032.08 c
-4472.68 5032.08 4468.52 5027.52 4468.52 5022.32 c
-4468.52 5019.92 4469.48 5017.84 4471.88 5014.48 c
-4474.12 5011.44 4475 5009.36 4475 5007.76 c
-4475 5002.96 4470.06 4995.28 4456.04 4978.8 c
-4450.92 5032.08 l
-4446.6 5032.08 l
-4433.16 5008.8 4430.6 5004.14 4421.64 4987.92 c
-4421.16 5007.76 4420.04 5018.16 4416.36 5031.92 c
-4409.8 5030.48 4404.84 5029.68 4391.56 5027.44 c
-h
-4495.72 4958 m
-f*
-4162.08 4855.76 m
-4142.08 4781.52 l
-4139.52 4772.88 4136.48 4770.64 4126.08 4770 c
-4126.08 4766 l
-4176 4766 l
-4176 4770 l
-4166.72 4770.48 4164.48 4771.76 4164.48 4776.88 c
-4164.48 4778.64 4164.8 4780.4 4165.76 4784.08 c
-4165.92 4784.88 l
-4166.08 4785.68 l
-4185.76 4857.52 l
-4188.16 4865.84 4190.56 4868.08 4198.72 4869.04 c
-4198.72 4873 l
-4164.8 4873 l
-4115.2 4796.24 l
-4106.56 4873 l
-4071.2 4873 l
-4071.2 4869 l
-4081.28 4868.52 4082.72 4867.89 4082.72 4863.44 c
-4082.72 4861.2 4082.08 4858.32 4080.96 4854.16 c
-4063.52 4794.48 l
-4057.12 4773.68 4056 4771.92 4047.36 4770 c
-4047.36 4766 l
-4080.48 4766 l
-4080.48 4770 l
-4070.24 4771.28 4067.68 4773.2 4067.68 4779.76 c
-4067.68 4782.48 4068.48 4786.48 4070.72 4794.48 c
-4086.88 4853.52 l
-4097.6 4764.08 l
-4102.08 4764.08 l
-h
-4194.24 4766 m
-f*
-4264.44 4786.32 m
-4257.88 4777.52 4255.48 4774.76 4252.92 4774.76 c
-4251.64 4774.76 4251 4775.86 4251 4777.52 c
-4251 4781.52 4252.44 4788.08 4256.44 4801.2 c
-4267.8 4838.96 l
-4250.04 4837.84 l
-4247.16 4828.4 l
-4245.72 4836.56 4242.2 4840.08 4235.32 4840.08 c
-4215.64 4840.08 4192 4809.27 4192 4784.24 c
-4192 4772.08 4198.74 4763.92 4208.92 4763.92 c
-4218.68 4763.92 4226.04 4769.68 4235.16 4785.04 c
-4233.24 4778.48 4233 4776.56 4233 4774.32 c
-4233 4768.4 4237.76 4763.76 4243.64 4763.76 c
-4251.16 4763.76 4258.52 4770 4267.8 4783.92 c
-h
-4237.56 4833.2 m
-4241.08 4832.88 4243.56 4830 4243.56 4825.68 c
-4243.56 4816.08 4238.24 4798.32 4231.96 4787.28 c
-4227.64 4779.44 4222.84 4774.92 4218.52 4774.92 c
-4214.36 4774.92 4211 4778.75 4211 4783.92 c
-4211 4792.24 4216.42 4808.24 4223.16 4820.08 c
-4227.96 4828.56 4233.24 4833.52 4237.56 4833.2 c
-h
-4275 4766 m
-f*
-4309.56 4839.92 m
-4293.24 4837.36 4287 4836.4 4278.68 4835.44 c
-4278.68 4831 l
-4285.88 4830.69 4287.32 4830.07 4287.32 4827.12 c
-4287.32 4825.52 4286.04 4819.76 4283.8 4811.44 c
-4267.8 4749.36 l
-4264.76 4738.8 4263.48 4737.84 4255.8 4738 c
-4255.8 4733 l
-4295.64 4733 l
-4295.64 4738 l
-4287.64 4738.14 4285.24 4739.16 4285.24 4742.64 c
-4285.24 4744.88 4286.36 4749.68 4289.4 4760.88 c
-4290.52 4764.72 4290.52 4765.04 4291.16 4767.44 c
-4296.76 4764.56 4298.68 4763.92 4302.04 4763.92 c
-4323.8 4763.92 4346.36 4792.88 4346.36 4820.56 c
-4346.36 4832.4 4339.64 4840.08 4329.08 4840.08 c
-4319.96 4840.08 4312.92 4834.92 4303.48 4821.52 c
-h
-4320.12 4828.56 m
-4324.28 4828.24 4326.68 4824.56 4326.36 4819.44 c
-4325.72 4808.88 4320.6 4793.04 4314.84 4782.64 c
-4309.88 4774 4304.76 4768.92 4299.32 4768.92 c
-4295.8 4768.92 4293.08 4771.75 4293.08 4775.28 c
-4293.08 4778 4294.84 4784.56 4299.16 4799.12 c
-4302.68 4810.8 4304.12 4814.8 4306.52 4818.48 c
-4310.52 4824.72 4315.96 4828.88 4320.12 4828.56 c
-h
-4355 4766 m
-f*
-4389.56 4839.92 m
-4373.24 4837.36 4367 4836.4 4358.68 4835.44 c
-4358.68 4831 l
-4365.88 4830.69 4367.32 4830.07 4367.32 4827.12 c
-4367.32 4825.52 4366.04 4819.76 4363.8 4811.44 c
-4347.8 4749.36 l
-4344.76 4738.8 4343.48 4737.84 4335.8 4738 c
-4335.8 4733 l
-4375.64 4733 l
-4375.64 4738 l
-4367.64 4738.14 4365.24 4739.16 4365.24 4742.64 c
-4365.24 4744.88 4366.36 4749.68 4369.4 4760.88 c
-4370.52 4764.72 4370.52 4765.04 4371.16 4767.44 c
-4376.76 4764.56 4378.68 4763.92 4382.04 4763.92 c
-4403.8 4763.92 4426.36 4792.88 4426.36 4820.56 c
-4426.36 4832.4 4419.64 4840.08 4409.08 4840.08 c
-4399.96 4840.08 4392.92 4834.92 4383.48 4821.52 c
-h
-4400.12 4828.56 m
-4404.28 4828.24 4406.68 4824.56 4406.36 4819.44 c
-4405.72 4808.88 4400.6 4793.04 4394.84 4782.64 c
-4389.88 4774 4384.76 4768.92 4379.32 4768.92 c
-4375.8 4768.92 4373.08 4771.75 4373.08 4775.28 c
-4373.08 4778 4374.84 4784.56 4379.16 4799.12 c
-4382.68 4810.8 4384.12 4814.8 4386.52 4818.48 c
-4390.52 4824.72 4395.96 4828.88 4400.12 4828.56 c
-h
-4435 4766 m
-f*
-4469.56 4788.56 m
-4467.32 4785.36 l
-4463.16 4779.12 4459.48 4775.56 4457.08 4775.56 c
-4455.8 4775.56 4455 4776.77 4455 4778.16 c
-4455 4779.6 4455.62 4783.76 4456.12 4786.48 c
-4470.68 4839.92 l
-4462.22 4838 4451.26 4836.4 4439.04 4835.44 c
-4439.04 4831 l
-4440.44 4831 l
-4445.24 4831 4448.48 4829.44 4448.48 4826.48 c
-4448.48 4825.2 4447.71 4822.8 4446.68 4820.08 c
-4437.4 4785.68 l
-4436.12 4781.04 4436 4776.88 4436 4774.64 c
-4436 4768.56 4440.2 4764.56 4446.36 4764.56 c
-4455.96 4764.56 4461.88 4769.36 4473.08 4786.32 c
-h
-4465.88 4875.4 m
-4460.44 4875.4 4456 4870.46 4456 4865.04 c
-4456 4858.8 4460.26 4854.4 4466.04 4854.4 c
-4472.12 4854.4 4477 4858.86 4477 4864.56 c
-4477 4870.48 4472 4875.4 4465.88 4875.4 c
-h
-4479.48 4766 m
-f*
-4553.36 4787.6 m
-4546.96 4777.68 4544.88 4775.56 4542.16 4775.56 c
-4540.88 4775.56 4540 4776.63 4540 4778.16 c
-4540 4779.76 4540.94 4783.12 4543.92 4792.08 c
-4549.68 4809.52 l
-4552.24 4817.04 4554 4824.08 4554 4827.92 c
-4554 4835.76 4549.78 4840.08 4542.16 4840.08 c
-4536.24 4840.08 4530.48 4837.62 4526.16 4833.36 c
-4520.24 4827.76 4517.2 4823.92 4506.48 4808.08 c
-4516.72 4839.76 l
-4506.48 4837.52 4493.68 4835.92 4484.72 4835.6 c
-4484.72 4830.8 l
-4491.44 4830.65 4493.36 4829.92 4493.36 4827.12 c
-4493.36 4825.2 4491.12 4816.72 4486 4798.64 c
-4482.32 4785.68 4481.2 4781.52 4477.04 4766 c
-4496.4 4766 l
-4503.92 4793.68 4509.68 4807.6 4519.6 4820.56 c
-4522.8 4824.88 4527.76 4828.08 4530.64 4828.08 c
-4532.72 4828.08 4535 4826.63 4535 4825.04 c
-4535 4824.56 4534.54 4823.28 4533.84 4821.68 c
-4525.04 4795.12 l
-4522.48 4787.44 4521 4778.32 4521 4774.16 c
-4521 4768.08 4524.84 4764.56 4531.44 4764.56 c
-4541.04 4764.56 4547.6 4770 4556.88 4785.52 c
-h
-4566.96 4766 m
-f*
-4644.48 4835 m
-4626.72 4835 l
-4621.28 4838.58 4616.48 4840.08 4609.12 4840.08 c
-4589.44 4840.08 4573 4827.05 4573 4810.8 c
-4573 4802.64 4577.35 4796.88 4586.4 4793.2 c
-4573.28 4785.84 4571 4783.6 4571 4777.68 c
-4571 4772.56 4573.89 4769.52 4580.96 4767.12 c
-4571.04 4764.72 4567.84 4763.44 4564 4760.4 c
-4561.44 4758.16 4560 4754.32 4560 4750.48 c
-4560 4740.08 4571.56 4734 4589.76 4734 c
-4612.32 4734 4628 4743.72 4628 4757.52 c
-4628 4767.28 4621.6 4772.56 4604.16 4777.52 c
-4595.68 4779.92 l
-4590.56 4781.36 4587 4783.6 4587 4786 c
-4587 4788.56 4589.68 4791.28 4592 4791.28 c
-4592.8 4791.28 4593.92 4791.24 4595.2 4791.12 c
-4596.96 4790.64 4598.24 4790 4600.16 4790 c
-4607.2 4790 4614.4 4792.09 4620.48 4795.92 c
-4629.76 4801.2 4635 4809.36 4635 4818.96 c
-4635 4821.64 4634.59 4823.32 4633.76 4826 c
-4644.48 4826 l
-h
-4586.4 4765.04 m
-4588.32 4764.88 4600.48 4760.72 4604 4759.12 c
-4608.48 4756.88 4611 4754.16 4611 4750 c
-4611 4742.96 4603.8 4739 4591.36 4739 c
-4580.96 4739 4574 4744.1 4574 4751.44 c
-4574 4754.48 4575.32 4757.2 4578.24 4760.24 c
-4580.32 4762.32 4585.12 4765.2 4586.4 4765.04 c
-h
-4608.8 4835.08 m
-4612.96 4835.08 4616 4831.19 4616 4825.52 c
-4616 4820.08 4614.08 4812.4 4611.36 4806.48 c
-4608 4799.12 4603.84 4795 4598.88 4795 c
-4594.56 4795 4592 4798.52 4592 4804.88 c
-4592 4811.28 4594.79 4821.04 4598.24 4827.12 c
-4601.28 4832.4 4604.64 4835.08 4608.8 4835.08 c
-h
-4648 4766 m
-f*
-1 i
-5048.15 4276.55 m
-5061.35 4314.95 5067.35 4354.55 5067.35 4395.35 c
-5067.35 4517.75 5010.95 4632.95 4913.75 4706.15 c
-S
-5002.55 4371.35 m
-5055.35 4306.55 l
-5138.15 4295.75 l
-4949.75 4116.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 1966 a(Figure)28 b(14:)40 b(The)26 b(e\013ect)j(of)e
-(astRemapF)-8 b(rame)29 b(is)e(to)h(in)m(terp)s(ose)f(a)h(Mapping)f(b)s
-(et)m(w)m(een)h(a)f(nominated)h(F)-8 b(rame)0 2079 y(within)25
-b(a)h(F)-8 b(rameSet)27 b(and)f(the)g(remaining)g(con)m(ten)m(ts)h(of)f
-(the)g(F)-8 b(rameSet.)40 b(This)25 b(e\013ectiv)m(ely)k
-(\\re-de\014nes")d(the)0 2192 y(co)s(ordinate)34 b(system)g(represen)m
-(ted)f(b)m(y)g(the)g(a\013ected)i(F)-8 b(rame.)51 b(It)33
-b(ma)m(y)h(b)s(e)f(used)f(to)i(comp)s(ensate)g(\(sa)m(y\))h(for)0
-2305 y(geometrical)c(c)m(hanges)e(made)f(to)g(an)g(asso)s(ciated)i
-(image.)41 b(The)27 b(in)m(ter-relationships)j(b)s(et)m(w)m(een)e(all)h
-(the)f(other)0 2418 y(F)-8 b(rames)31 b(within)f(the)h(F)-8
-b(rameSet)31 b(remain)f(unc)m(hanged.)0 2793 y(P)m(erforming)j(the)g
-(steps)g(ab)s(o)m(v)m(e)h(is)f(rather)f(length)m(y)-8
-b(,)35 b(ho)m(w)m(ev)m(er,)h(so)d(the)g(astRemapF)-8
-b(rame)34 b(function)f(is)g(pro-)0 2906 y(vided)28 b(to)i(p)s(erform)d
-(all)j(of)f(these)g(op)s(erations)g(in)g(one)g(go.)41
-b(A)29 b(practical)h(example)g(of)f(its)g(use)g(is)f(giv)m(en)i(b)s
-(elo)m(w)0 3019 y(\()p Fu(x)p FF(14.5\).)0 3315 y Fw(14.5)112
-b(Example|Binning)40 b(an)e(Image)0 3538 y FF(As)f(an)g(example)h(of)g
-(using)f(astRemapF)-8 b(rame,)41 b(consider)c(a)g(case)i(where)e(the)g
-(pixels)g(of)h(a)g(2-dimensional)0 3651 y(image)26 b(ha)m(v)m(e)g(b)s
-(een)d(binned)h(2)p Fu(\002)p FF(2,)i(so)f(as)g(to)g(reduce)f(the)h
-(image)h(size)f(b)m(y)g(a)g(factor)g(of)g(t)m(w)m(o)h(in)e(eac)m(h)i
-(dimension.)0 3764 y(W)-8 b(e)38 b(m)m(ust)e(no)m(w)g(mo)s(dify)g(the)g
-(asso)s(ciated)i(F)-8 b(rameSet)38 b(to)f(re\015ect)g(this)f(c)m(hange)
-h(to)g(the)g(image.)60 b(Muc)m(h)36 b(the)0 3877 y(same)31
-b(pro)s(cess)f(w)m(ould)g(b)s(e)g(needed)g(for)g(an)m(y)g(other)h
-(geometrical)i(c)m(hange)f(the)e(image)i(migh)m(t)f(undergo.)0
-4040 y(W)-8 b(e)34 b(\014rst)f(set)g(up)f(a)i(Mapping)f(\(a)g(WinMap)h
-(in)f(this)g(case\))h(whic)m(h)f(relates)h(the)f(data)h(grid)f(co)s
-(ordinates)h(in)0 4153 y(the)d(original)g(image)h(to)f(those)g(in)f
-(the)g(new)g(one:)227 4405 y Ft(AstWinMap)40 b(*winmap;)227
-4505 y(double)h(ina[)h(2)h(])h(=)f({)g(0.5,)f(0.5)g(};)227
-4604 y(double)f(inb[)h(2)h(])h(=)f({)g(2.5,)f(2.5)g(};)227
-4704 y(double)f(outa[)h(2)h(])g(=)g({)h(0.5,)e(0.5)g(};)227
-4804 y(double)f(outb[)h(2)h(])g(=)g({)h(1.5,)e(1.5)g(};)227
-5003 y(...)227 5202 y(winmap)f(=)j(astWinMap\()39 b(2,)k(ina,)f(inb,)g
-(outa,)f(outb,)h("")g(\);)0 5467 y FF(Here,)j(w)m(e)d(ha)m(v)m(e)h
-(simply)f(set)g(up)f(arra)m(ys)h(con)m(taining)h(the)f(data)g(grid)g
-(co)s(ordinates)g(of)g(the)g(b)s(ottom)g(left)0 5580
-y(and)d(top)h(righ)m(t)g(corners)g(of)f(the)h(\014rst)f(elemen)m(t)i
-(in)f(the)g(output)f(image)i(\(\\outa")g(and)f(\\outb"\))g(and)f(the)0
-5693 y(corresp)s(onding)f(co)s(ordinates)i(in)f(the)g(input)f(image)j
-(\(\\ina")f(and)f(\\in)m(b"\).)68 b(astWinMap)40 b(then)f(creates)h(a)p
-eop end
-%%Page: 126 136
-TeXDict begin 126 135 bop 0 52 a FF(126)1350 b Fy(14)92
-b(HIGHER)30 b(LEVEL)g(OPERA)-8 b(TIONS)29 b(ON)h(FRAMESETS)0
-351 y FF(WinMap)i(whic)m(h)g(p)s(erforms)f(the)h(required)f
-(transformation.)47 b(W)-8 b(e)33 b(do)f(not)g(need)g(to)h(kno)m(w)f
-(the)g(size)h(of)f(the)0 464 y(image.)0 619 y(W)-8 b(e)30
-b(can)e(then)g(pass)g(this)g(WinMap)h(to)g(astRemapF)-8
-b(rame.)42 b(This)27 b(mo)s(di\014es)h(the)g(relationship)h(b)s(et)m(w)
-m(een)g(our)0 732 y(F)-8 b(rameSet's)25 b(base)g(F)-8
-b(rame)25 b(and)e(the)h(other)h(F)-8 b(rames)24 b(in)g(the)g(F)-8
-b(rameSet,)27 b(so)d(that)h(the)f(base)h(F)-8 b(rame)25
-b(represen)m(ts)0 845 y(the)31 b(data)g(grid)f(co)s(ordinate)h(system)f
-(of)h(the)g(new)e(image)j(rather)e(than)g(the)h(old)g(one:)227
-1062 y Ft(AstFrameSet)39 b(*frameset;)227 1261 y(...)227
-1460 y(astRemapFrame\()f(frameset,)i(AST__BASE,)f(winmap)i(\);)0
-1690 y FF(An)m(y)34 b(other)g(co)s(ordinate)g(systems)g(describ)s(ed)e
-(b)m(y)i(the)g(F)-8 b(rameSet,)36 b(no)d(matter)i(ho)m(w)f(man)m(y)f
-(of)h(these)g(there)0 1803 y(migh)m(t)d(b)s(e,)f(are)h(no)m(w)f
-(correctly)i(asso)s(ciated)g(with)e(the)g(new)g(image.)0
-2085 y Fw(14.6)112 b(Main)m(taining)40 b(the)d(In)m(tegrit)m(y)g(of)g
-(F)-9 b(rameSets)0 2298 y FF(When)35 b(constructing)i(a)e(F)-8
-b(rameSet,)39 b(y)m(ou)d(are)g(pro)m(vided)f(with)g(a)h(framew)m(ork)g
-(in)m(to)g(whic)m(h)g(y)m(ou)g(can)g(place)0 2411 y(an)m(y)f(com)m
-(bination)g(of)f(F)-8 b(rames)35 b(and)f(Mappings)g(that)h(y)m(ou)f
-(wish.)52 b(There)33 b(are)i(relativ)m(ely)h(few)e(constrain)m(ts)0
-2524 y(on)d(this)f(pro)s(cess)h(and)f(no)g(c)m(hec)m(ks)i(are)g(p)s
-(erformed)d(to)i(see)h(whether)e(the)h(F)-8 b(rameSet)31
-b(y)m(ou)g(construct)h(mak)m(es)0 2637 y(ph)m(ysical)24
-b(sense.)39 b(It)23 b(is)h(quite)g(p)s(ossible,)h(for)e(example,)j(to)f
-(construct)f(a)g(F)-8 b(rameSet)25 b(con)m(taining)g(t)m(w)m(o)g(iden)m
-(tical)0 2750 y(SkyF)-8 b(rames)32 b(whic)m(h)g(are)g(in)m(ter-related)
-h(b)m(y)f(a)g(non-unit)f(Mapping.)45 b(AST)31 b(will)h(not)g(ob)5
-b(ject)33 b(if)f(y)m(ou)g(do)f(this,)0 2862 y(but)f(it)h(mak)m(es)h(no)
-f(sense,)g(b)s(ecause)f(applying)h(a)g(non-unit)f(Mapping)h(to)g(an)m
-(y)g(set)h(of)e(celestial)k(co)s(ordinates)0 2975 y(cannot)d(yield)f(p)
-s(ositions)h(that)g(are)f(still)h(in)f(the)h(original)g(co)s(ordinate)g
-(system.)41 b(If)30 b(y)m(ou)h(use)f(suc)m(h)g(a)g(F)-8
-b(rame-)0 3088 y(Set)36 b(to)g(p)s(erform)e(co)s(ordinate)i(con)m(v)m
-(ersions,)j(y)m(ou)c(are)h(lik)m(ely)h(to)g(get)f(unpredictable)f
-(results)h(b)s(ecause)f(the)0 3201 y(information)c(in)f(the)g(F)-8
-b(rameSet)32 b(is)e(corrupt.)0 3356 y(It)35 b(is,)i(of)e(course,)i(y)m
-(our)e(resp)s(onsibilit)m(y)g(as)g(a)g(programmer)g(to)h(ensure)e(the)h
-(v)-5 b(alidit)m(y)37 b(of)e(an)m(y)g(information)0 3469
-y(whic)m(h)43 b(y)m(ou)g(insert)g(in)m(to)h(a)f(F)-8
-b(rameSet.)80 b(Normally)-8 b(,)47 b(this)c(is)g(straigh)m(tforw)m(ard)
-h(and)e(simply)h(consists)g(of)0 3582 y(form)m(ulating)28
-b(y)m(our)f(problem)g(correctly)i(\(a)f(diagram)g(can)f(often)h(help)f
-(to)h(clarify)g(ho)m(w)f(co)s(ordinate)h(systems)0 3695
-y(are)23 b(in)m(ter-related\))h(and)d(writing)h(the)h(appropriate)f
-(bug-free)g(co)s(de)g(to)h(construct)g(the)f(F)-8 b(rameSet.)39
-b(Ho)m(w)m(ev)m(er,)0 3808 y(once)31 b(y)m(ou)g(start)g(to)g(mo)s(dify)
-e(an)i(existing)g(F)-8 b(rameSet,)32 b(there)e(are)h(new)f(opp)s
-(ortunities)g(for)g(corrupting)g(it!)0 3962 y(Consider,)d(for)g
-(example,)h(a)g(F)-8 b(rameSet)28 b(whose)f(curren)m(t)f(F)-8
-b(rame)28 b(is)f(a)g(SkyF)-8 b(rame.)40 b(W)-8 b(e)29
-b(can)e(set)g(a)h(new)e(v)-5 b(alue)0 4075 y(for)30 b(this)g(SkyF)-8
-b(rame's)31 b(Equino)m(x)g(attribute)g(simply)f(b)m(y)g(using)g(astSet)
-h(on)f(the)h(F)-8 b(rameSet,)32 b(as)e(follo)m(ws:)227
-4292 y Ft(astSet\()41 b(frameset,)f("Equinox=J2010")d(\);)0
-4522 y FF(The)i(e\013ect)i(of)e(this)g(will)h(b)s(e)f(to)h(c)m(hange)g
-(the)g(celestial)h(co)s(ordinate)g(system)e(whic)m(h)g(the)g(curren)m
-(t)h(F)-8 b(rame)0 4635 y(represen)m(ts.)65 b(Y)-8 b(ou)39
-b(can)g(see,)j(ho)m(w)m(ev)m(er,)g(that)d(this)g(has)f(the)h(p)s(oten)m
-(tial)h(to)f(mak)m(e)h(the)e(F)-8 b(rameSet)40 b(corrupt)0
-4748 y(unless)28 b(corresp)s(onding)g(c)m(hanges)h(are)g(also)h(made)e
-(to)i(the)f(Mapping)f(whic)m(h)g(relates)i(this)f(SkyF)-8
-b(rame)29 b(to)g(the)0 4861 y(other)k(F)-8 b(rames)33
-b(within)f(the)h(F)-8 b(rameSet.)49 b(In)32 b(fact,)i(it)f(is)g(a)g
-(general)h(rule)e(that)h(an)m(y)g(c)m(hange)h(to)f(a)g(F)-8
-b(rameSet)0 4974 y(whic)m(h)27 b(a\013ects)i(its)e(curren)m(t)g(F)-8
-b(rame)28 b(can)g(p)s(oten)m(tially)h(require)d(corresp)s(onding)h(c)m
-(hanges)h(to)g(the)f(F)-8 b(rameSet's)0 5087 y(Mappings)30
-b(in)g(order)g(to)h(main)m(tain)h(its)e(o)m(v)m(erall)j(in)m(tegrit)m
-(y)-8 b(.)0 5241 y(F)g(ortunately)g(,)40 b(once)c(y)m(ou)g(ha)m(v)m(e)i
-(stored)e(v)-5 b(alid)36 b(information)g(in)g(a)g(F)-8
-b(rameSet,)39 b(AST)c(will)h(lo)s(ok)h(after)f(these)0
-5354 y(details)i(for)e(y)m(ou)h(automatically)-8 b(,)42
-b(so)37 b(that)g(the)g(F)-8 b(rameSet's)38 b(in)m(tegrit)m(y)h(is)d
-(main)m(tained.)61 b(In)36 b(the)h(example)0 5467 y(ab)s(o)m(v)m(e,)f
-(it)e(w)m(ould)f(do)g(this)g(b)m(y)h(appropriately)f(re-mapping)g(the)h
-(curren)m(t)f(F)-8 b(rame)34 b(\(as)g(if)g(astRemapF)-8
-b(rame)0 5580 y(had)32 b(b)s(een)g(used|)p Fu(x)p FF(14.4\))i(in)f
-(resp)s(onse)e(to)j(the)f(use)f(of)h(astSet.)48 b(One)32
-b(w)m(a)m(y)i(of)f(illustrating)h(this)e(pro)s(cess)g(is)0
-5693 y(as)f(follo)m(ws:)p eop end
-%%Page: 127 137
-TeXDict begin 127 136 bop 0 52 a Fy(14.7)93 b(Merging)31
-b(F)-8 b(rameSets)2624 b FF(127)227 351 y Ft(AstSkyFrame)39
-b(*skyframe;)227 551 y(...)227 750 y(skyframe)i(=)i(astSkyFrame\()38
-b("")43 b(\);)227 849 y(frameSet)e(=)i(astFrameSet\()38
-b(skyframe)j(\);)227 949 y(astAddFrame\()e(frameset,)h(1,)j
-(astUnitMap\()c(2,)j("")h(\),)g(skyframe)d(\);)0 1172
-y FF(This)27 b(constructs)g(a)h(trivial)h(F)-8 b(rameSet)29
-b(whose)e(base)g(and)g(curren)m(t)h(F)-8 b(rames)28 b(are)g(b)s(oth)f
-(the)g(same)h(SkyF)-8 b(rame)0 1284 y(connected)29 b(b)m(y)f(a)h
-(UnitMap.)41 b(Y)-8 b(ou)29 b(can)f(think)g(of)h(this)f(as)h(a)f(\\pip)
-s(e")h(connecting)g(t)m(w)m(o)h(co)s(ordinate)f(systems.)0
-1397 y(A)m(t)c(presen)m(t,)g(these)g(t)m(w)m(o)g(systems)f(represen)m
-(t)g(iden)m(tical)i(ICRS)c(co)s(ordinates,)27 b(so)d(the)g(F)-8
-b(rameSet)25 b(implemen)m(ts)0 1510 y(a)g(unit)g(Mapping.)38
-b(W)-8 b(e)27 b(can)e(c)m(hange)h(the)f(co)s(ordinate)g(system)h(on)e
-(the)h(curren)m(t)g(end)f(of)h(this)g(pip)s(e)f(as)h(follo)m(ws:)227
-1719 y Ft(astSet\()41 b(frameset,)f("System=Ecliptic)o(,)d
-(Equinox=J2010")h(\);)0 1942 y FF(and)h(the)g(Mapping)g(whic)m(h)g(the)
-g(F)-8 b(rameSet)41 b(implemen)m(ts)e(w)m(ould)g(c)m(hange)i
-(accordingly)-8 b(.)68 b(T)-8 b(o)40 b(c)m(hange)g(the)0
-2055 y(co)s(ordinate)31 b(system)g(on)f(the)h(base)f(end)g(of)g(the)h
-(pip)s(e,)f(w)m(e)g(migh)m(t)i(use:)227 2264 y Ft(astInvert\()40
-b(frameset)g(\);)227 2364 y(astSet\()h(frameset,)f("System=Galactic)o
-(")d(\);)227 2463 y(astInvert\()j(frameset)g(\);)0 2686
-y FF(The)30 b(F)-8 b(rameSet)31 b(w)m(ould)g(then)f(con)m(v)m(ert)i(b)s
-(et)m(w)m(een)f(galactic)i(and)d(ecliptic)i(co)s(ordinates.)0
-2839 y(Note)37 b(that)f(astSet)g(is)f(not)h(the)f(only)h(function)f
-(whic)m(h)g(has)g(this)g(e\013ect:)52 b(astClear)37 b(b)s(eha)m(v)m(es)
-e(similarly)-8 b(,)38 b(as)0 2951 y(also)f(do)s(es)e(astP)m(ermAxes)i
-(\()p Fu(x)p FF(7.9\).)59 b(If)35 b(y)m(ou)h(need)f(to)i(circum)m(v)m
-(en)m(t)g(this)f(mec)m(hanism)g(for)f(an)m(y)h(reason,)i(this)0
-3064 y(can)29 b(b)s(e)g(done)f(b)m(y)h(going)h(b)s(ehind)d(the)i
-(scenes)h(and)e(obtaining)h(a)h(p)s(oin)m(ter)f(directly)g(to)h(the)f
-(F)-8 b(rame)30 b(y)m(ou)f(wish)0 3177 y(to)i(mo)s(dify)-8
-b(.)40 b(Consider)30 b(the)h(follo)m(wing,)h(for)e(example:)227
-3386 y Ft(skyframe)41 b(=)i(astGetFrame\()38 b(frameset,)i
-(AST__CURRENT)f(\);)227 3486 y(astSet\()i(skyframe,)f("Equinox=J2010")d
-(\);)227 3586 y(skyframe)k(=)i(astAnnul\()d(skyframe)g(\);)0
-3808 y FF(Here,)30 b(astSet)h(is)e(applied)h(to)g(the)g(SkyF)-8
-b(rame)30 b(p)s(oin)m(ter)f(rather)h(than)f(the)h(F)-8
-b(rameSet)30 b(p)s(oin)m(ter,)g(so)g(the)g(usual)0 3921
-y(c)m(hec)m(ks)f(on)f(F)-8 b(rameSet)29 b(in)m(tegrit)m(y)h(do)e(not)g
-(o)s(ccur.)40 b(The)27 b(SkyF)-8 b(rame's)29 b(Equino)m(x)f(attribute)g
-(will)h(therefore)f(b)s(e)0 4034 y(mo)s(di\014ed)f(without)i(an)m(y)g
-(corresp)s(onding)e(c)m(hange)j(to)f(the)f(F)-8 b(rameSet's)30
-b(Mappings.)40 b(In)28 b(this)g(case)i(y)m(ou)f(m)m(ust)0
-4147 y(tak)m(e)h(resp)s(onsibilit)m(y)f(y)m(ourself)g(for)f(main)m
-(taining)i(the)f(F)-8 b(rameSet's)30 b(in)m(tegrit)m(y)-8
-b(,)31 b(p)s(erhaps)c(through)h(appropri-)0 4260 y(ate)k(use)e(of)g
-(astRemapF)-8 b(rame.)0 4538 y Fw(14.7)112 b(Merging)38
-b(F)-9 b(rameSets)0 4750 y FF(As)33 b(w)m(ell)h(as)f(adding)f
-(individual)h(F)-8 b(rames)33 b(to)h(a)f(F)-8 b(rameSet)34
-b(\()p Fu(x)p FF(13.3\),)j(it)c(is)g(also)h(p)s(ossible)e(to)i(add)e
-(complete)0 4863 y(sets)43 b(of)g(in)m(ter-related)h(F)-8
-b(rames)44 b(whic)m(h)e(are)h(con)m(tained)h(within)e(another)h(F)-8
-b(rameSet.)78 b(This,)45 b(of)e(course,)0 4976 y(corresp)s(onds)29
-b(to)i(the)g(pro)s(cess)f(of)g(merging)h(t)m(w)m(o)h(F)-8
-b(rameSets)31 b(\(Figure)g(15\).)0 5128 y(This)40 b(pro)s(cess)h(is)g
-(p)s(erformed)e(b)m(y)i(adding)g(one)g(F)-8 b(rameSet)42
-b(to)g(another)f(using)g(astAddF)-8 b(rame,)45 b(in)40
-b(m)m(uc)m(h)0 5241 y(the)d(same)g(manner)e(as)i(when)e(adding)h(a)h
-(new)f(F)-8 b(rame)38 b(to)f(an)f(existing)i(F)-8 b(rameSet)37
-b(\()p Fu(x)p FF(13.3\).)62 b(It)36 b(is)h(simply)0 5354
-y(a)h(matter)g(of)f(pro)m(viding)h(a)f(F)-8 b(rameSet)39
-b(p)s(oin)m(ter,)g(instead)f(of)f(a)h(F)-8 b(rame)38
-b(p)s(oin)m(ter,)i(for)d(the)g(4th)h(argumen)m(t.)0 5467
-y(In)31 b(p)s(erforming)f(the)i(merger)g(y)m(ou)g(m)m(ust,)g(as)g
-(usual,)f(supply)f(a)i(Mapping,)g(but)f(in)h(this)f(case)i(the)f
-(Mapping)0 5580 y(should)40 b(relate)j(the)f(curren)m(t)f(F)-8
-b(rame)42 b(of)f(the)h(F)-8 b(rameSet)43 b(b)s(eing)d(added)h(to)h(one)
-g(of)f(the)h(F)-8 b(rames)42 b(already)0 5693 y(presen)m(t.)f(F)-8
-b(or)31 b(example,)g(y)m(ou)g(migh)m(t)g(p)s(erform)e(the)i(merger)f
-(sho)m(wn)g(in)g(Figure)h(15)g(as)g(follo)m(ws:)p eop
-end
-%%Page: 128 138
-TeXDict begin 128 137 bop 0 52 a FF(128)1350 b Fy(14)92
-b(HIGHER)30 b(LEVEL)g(OPERA)-8 b(TIONS)29 b(ON)h(FRAMESETS)695
-4148 y @beginspecial 57 @llx 88 @lly 535 @urx 732 @ury
-2868 @rwi @setspecial
-%%BeginDocument: sun211_figures/fsmerge.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 57 88 535 732
-%..................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/10 16:06:29
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5339.75 6665.75 m
-5339.75 6989.75 5075.75 7253.75 4751.75 7253.75 c
-1220.15 7253.75 l
-896.15 7253.75 632.15 6989.75 632.15 6665.75 c
-632.15 1478.15 l
-632.15 1154.15 896.15 890.151 1220.15 890.151 c
-4751.75 890.151 l
-5075.75 890.151 5339.75 1154.15 5339.75 1478.15 c
-f*
-1 g
-5274.95 6720.95 m
-5274.95 7044.95 5012.15 7307.75 4688.15 7307.75 c
-1164.95 7307.75 l
-840.95 7307.75 578.15 7044.95 578.15 6720.95 c
-578.15 1541.75 l
-578.15 1217.75 840.95 954.95 1164.95 954.95 c
-4688.15 954.95 l
-5012.15 954.95 5274.95 1217.75 5274.95 1541.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5274.95 6720.95 m
-5274.95 7044.95 5012.15 7307.75 4688.15 7307.75 c
-1164.95 7307.75 l
-840.95 7307.75 578.15 7044.95 578.15 6720.95 c
-578.15 1541.75 l
-578.15 1217.75 840.95 954.95 1164.95 954.95 c
-4688.15 954.95 l
-5012.15 954.95 5274.95 1217.75 5274.95 1541.75 c
-h
-S
-1 g
-5054.15 3765.35 m
-5054.15 3972.95 4886.15 4140.95 4678.55 4140.95 c
-1577.75 4140.95 l
-1370.15 4140.95 1202.15 3972.95 1202.15 3765.35 c
-1202.15 1515.35 l
-1202.15 1307.75 1370.15 1139.75 1577.75 1139.75 c
-4678.55 1139.75 l
-4886.15 1139.75 5054.15 1307.75 5054.15 1515.35 c
-f*
-0 g
-1580.15 4130.15 m
-1578.95 4139.75 l
-1514.15 4133.75 l
-1515.35 4122.95 l
-f*
-1515.35 4122.95 m
-1514.15 4133.75 l
-1514.15 4133.75 l
-1516.55 4122.95 l
-f*
-1516.55 4122.95 m
-1514.15 4133.75 l
-1498.55 4130.15 l
-1500.95 4119.35 l
-f*
-1445.75 4104.95 m
-1442.15 4113.35 l
-1390.55 4089.35 l
-1395.35 4080.95 l
-f*
-1395.35 4080.95 m
-1390.55 4089.35 l
-1390.55 4089.35 l
-1397.75 4080.95 l
-f*
-1397.75 4080.95 m
-1390.55 4089.35 l
-1371.35 4076.15 l
-1377.35 4068.95 l
-f*
-1331.75 4031.75 m
-1324.55 4040.15 l
-1290.95 4006.55 l
-1296.95 3998.15 l
-f*
-1296.95 3998.15 m
-1290.95 4006.55 l
-1290.95 4006.55 l
-1299.35 3999.35 l
-f*
-1299.35 3999.35 m
-1290.95 4006.55 l
-1274.15 3980.15 l
-1281.35 3974.15 l
-f*
-1252.55 3924.95 m
-1244.15 3929.75 l
-1226.15 3893.75 l
-1234.55 3890.15 l
-f*
-1234.55 3890.15 m
-1226.15 3893.75 l
-1226.15 3893.75 l
-1235.75 3891.35 l
-f*
-1235.75 3891.35 m
-1226.15 3893.75 l
-1216.55 3854.15 l
-1226.15 3851.75 l
-f*
-1216.55 3794.15 m
-1205.75 3796.55 l
-1203.35 3764.15 l
-1214.15 3762.95 l
-f*
-1214.15 3762.95 m
-1203.35 3764.15 l
-1203.35 3764.15 l
-1214.15 3764.15 l
-f*
-1203.35 3716.15 10.7996 47.9998 re
-f*
-1203.35 3575.75 10.7996 80.3999 re
-f*
-1203.35 3436.55 10.7996 79.2 re
-f*
-1203.35 3296.15 10.7996 80.3999 re
-f*
-1203.35 3155.75 10.7996 80.3999 re
-f*
-1203.35 3016.55 10.7996 79.2 re
-f*
-1203.35 2876.15 10.7996 80.3999 re
-f*
-1203.35 2735.75 10.7996 80.3999 re
-f*
-1203.35 2596.55 10.7996 79.2 re
-f*
-1203.35 2456.15 10.7996 80.3999 re
-f*
-1203.35 2315.75 10.7996 80.3999 re
-f*
-1203.35 2176.55 10.7996 79.2 re
-f*
-1203.35 2036.15 10.7996 80.3999 re
-f*
-1203.35 1895.75 10.7996 80.3999 re
-f*
-1203.35 1756.55 10.7996 79.2 re
-f*
-1203.35 1616.15 10.7996 80.3999 re
-f*
-1203.35 1512.95 10.7996 43.2 re
-f*
-1214.15 1512.95 m
-1203.35 1512.95 l
-1203.35 1512.95 l
-1214.15 1514.15 l
-f*
-1214.15 1514.15 m
-1203.35 1512.95 l
-1206.95 1475.75 l
-1217.75 1476.95 l
-f*
-1227.35 1419.35 m
-1217.75 1416.95 l
-1226.15 1384.55 l
-1235.75 1386.95 l
-f*
-1235.75 1386.95 m
-1226.15 1384.55 l
-1226.15 1384.55 l
-1234.55 1388.15 l
-f*
-1234.55 1388.15 m
-1226.15 1384.55 l
-1246.55 1342.55 l
-1254.95 1347.35 l
-f*
-1284.95 1298.15 m
-1277.75 1292.15 l
-1290.95 1271.75 l
-1299.35 1277.75 l
-f*
-1299.35 1277.75 m
-1290.95 1271.75 l
-1290.95 1271.75 l
-1298.15 1280.15 l
-f*
-1298.15 1280.15 m
-1290.95 1271.75 l
-1329.35 1233.35 l
-1337.75 1240.55 l
-f*
-1383.35 1205.75 m
-1377.35 1198.55 l
-1390.55 1188.95 l
-1397.75 1196.15 l
-f*
-1397.75 1196.15 m
-1390.55 1188.95 l
-1390.55 1188.95 l
-1395.35 1197.35 l
-f*
-1395.35 1197.35 m
-1390.55 1188.95 l
-1446.95 1162.55 l
-1451.75 1170.95 l
-f*
-1508.15 1156.55 m
-1505.75 1146.95 l
-1514.15 1144.55 l
-1516.55 1154.15 l
-f*
-1516.55 1154.15 m
-1514.15 1144.55 l
-1514.15 1144.55 l
-1515.35 1154.15 l
-f*
-1515.35 1154.15 m
-1514.15 1144.55 l
-1578.95 1138.55 l
-1580.15 1148.15 l
-f*
-1580.15 1148.15 m
-1578.95 1138.55 l
-1578.95 1138.55 l
-1578.95 1148.15 l
-f*
-1578.95 1138.55 6 9.6001 re
-f*
-1644.95 1138.55 80.3999 9.6001 re
-f*
-1785.35 1138.55 79.2 9.6001 re
-f*
-1924.55 1138.55 80.3999 9.6001 re
-f*
-2064.95 1138.55 80.3999 9.6001 re
-f*
-2205.35 1138.55 79.2 9.6001 re
-f*
-2344.55 1138.55 80.3999 9.6001 re
-f*
-2484.95 1138.55 80.3999 9.6001 re
-f*
-2625.35 1138.55 79.2002 9.6001 re
-f*
-2764.55 1138.55 80.3999 9.6001 re
-f*
-2904.95 1138.55 80.3999 9.6001 re
-f*
-3045.35 1138.55 79.2002 9.6001 re
-f*
-3184.55 1138.55 80.3999 9.6001 re
-f*
-3324.95 1138.55 80.3999 9.6001 re
-f*
-3465.35 1138.55 79.2 9.6001 re
-f*
-3604.55 1138.55 80.3999 9.6001 re
-f*
-3744.95 1138.55 80.3999 9.6001 re
-f*
-3885.35 1138.55 79.2 9.6001 re
-f*
-4024.55 1138.55 80.3999 9.6001 re
-f*
-4164.95 1138.55 80.3999 9.6001 re
-f*
-4305.35 1138.55 79.2 9.6001 re
-f*
-4444.55 1138.55 80.3999 9.6001 re
-f*
-4584.95 1138.55 80.3999 9.6001 re
-f*
-4724.15 1151.75 m
-4725.35 1142.15 l
-4744.55 1144.55 l
-4743.35 1154.15 l
-f*
-4743.35 1154.15 m
-4744.55 1144.55 l
-4744.55 1144.55 l
-4742.15 1154.15 l
-f*
-4742.15 1154.15 m
-4744.55 1144.55 l
-4803.35 1160.15 l
-4800.95 1169.75 l
-f*
-4853.75 1192.55 m
-4857.35 1182.95 l
-4866.95 1188.95 l
-4863.35 1197.35 l
-f*
-4863.35 1197.35 m
-4866.95 1188.95 l
-4866.95 1188.95 l
-4860.95 1197.35 l
-f*
-4860.95 1197.35 m
-4866.95 1188.95 l
-4920.95 1226.15 l
-4916.15 1234.55 l
-f*
-4916.15 1234.55 m
-4920.95 1226.15 l
-4920.95 1226.15 l
-4913.75 1233.35 l
-f*
-4913.75 1233.35 m
-4920.95 1226.15 l
-4922.15 1227.35 l
-4916.15 1234.55 l
-f*
-4958.15 1277.75 m
-4965.35 1269.35 l
-4967.75 1271.75 l
-4960.55 1280.15 l
-f*
-4960.55 1280.15 m
-4967.75 1271.75 l
-4967.75 1271.75 l
-4958.15 1278.95 l
-f*
-4958.15 1278.95 m
-4967.75 1271.75 l
-5004.95 1325.75 l
-4997.75 1331.75 l
-f*
-4997.75 1331.75 m
-5004.95 1325.75 l
-5004.95 1325.75 l
-4996.55 1329.35 l
-f*
-4996.55 1329.35 m
-5004.95 1325.75 l
-5008.55 1334.15 l
-5000.15 1340.15 l
-f*
-5024.15 1391.75 m
-5033.75 1389.35 l
-5048.15 1448.15 l
-5038.55 1450.55 l
-f*
-5038.55 1450.55 m
-5048.15 1448.15 l
-5048.15 1448.15 l
-5038.55 1449.35 l
-f*
-5038.55 1449.35 m
-5048.15 1448.15 l
-5049.35 1467.35 l
-5039.75 1468.55 l
-f*
-5044.55 1527.35 10.7996 80.3999 re
-f*
-5044.55 1667.75 10.7996 79.2 re
-f*
-5044.55 1806.95 10.7996 80.3999 re
-f*
-5044.55 1947.35 10.7996 80.3999 re
-f*
-5044.55 2087.75 10.7996 79.2 re
-f*
-5044.55 2226.95 10.7996 80.3999 re
-f*
-5044.55 2367.35 10.7996 80.3999 re
-f*
-5044.55 2507.75 10.7996 79.2 re
-f*
-5044.55 2646.95 10.7996 80.3999 re
-f*
-5044.55 2787.35 10.7996 80.3999 re
-f*
-5044.55 2927.75 10.7996 79.2 re
-f*
-5044.55 3066.95 10.7996 80.3999 re
-f*
-5044.55 3207.35 10.7996 80.3999 re
-f*
-5044.55 3347.75 10.7996 79.2 re
-f*
-5044.55 3486.95 10.7996 80.3999 re
-f*
-5044.55 3627.35 10.7996 80.3999 re
-f*
-5044.55 3766.55 m
-5055.35 3767.75 l
-5048.15 3830.15 l
-5038.55 3828.95 l
-f*
-5038.55 3828.95 m
-5048.15 3830.15 l
-5048.15 3830.15 l
-5038.55 3827.75 l
-f*
-5038.55 3827.75 m
-5048.15 3830.15 l
-5044.55 3846.95 l
-5034.95 3844.55 l
-f*
-5018.15 3899.75 m
-5027.75 3903.35 l
-5004.95 3952.55 l
-4996.55 3948.95 l
-f*
-4996.55 3948.95 m
-5004.95 3952.55 l
-5004.95 3952.55 l
-4996.55 3946.55 l
-f*
-4996.55 3946.55 m
-5004.95 3952.55 l
-4989.35 3972.95 l
-4980.95 3968.15 l
-f*
-4946.15 4013.75 m
-4953.35 4019.75 l
-4920.95 4052.15 l
-4913.75 4046.15 l
-f*
-4913.75 4046.15 m
-4920.95 4052.15 l
-4920.95 4052.15 l
-4914.95 4043.75 l
-f*
-4914.95 4043.75 m
-4920.95 4052.15 l
-4893.35 4071.35 l
-4887.35 4062.95 l
-f*
-4838.15 4091.75 m
-4841.75 4101.35 l
-4808.15 4116.95 l
-4804.55 4108.55 l
-f*
-4804.55 4108.55 m
-4808.15 4116.95 l
-4808.15 4116.95 l
-4805.75 4107.35 l
-f*
-4805.75 4107.35 m
-4808.15 4116.95 l
-4767.35 4127.75 l
-4764.95 4118.15 l
-f*
-4707.35 4127.75 m
-4708.55 4137.35 l
-4679.75 4139.75 l
-4678.55 4130.15 l
-f*
-4678.55 4130.15 m
-4679.75 4139.75 l
-4679.75 4139.75 l
-4679.75 4130.15 l
-f*
-4628.15 4130.15 51.5999 9.59961 re
-f*
-4488.95 4130.15 79.2 9.59961 re
-f*
-4348.55 4130.15 80.3999 9.59961 re
-f*
-4208.15 4130.15 80.3999 9.59961 re
-f*
-4068.95 4130.15 79.2 9.59961 re
-f*
-3928.55 4130.15 80.3999 9.59961 re
-f*
-3788.15 4130.15 80.3999 9.59961 re
-f*
-3648.95 4130.15 79.2 9.59961 re
-f*
-3508.55 4130.15 80.3999 9.59961 re
-f*
-3368.15 4130.15 80.3999 9.59961 re
-f*
-3228.95 4130.15 79.2 9.59961 re
-f*
-3088.55 4130.15 80.3999 9.59961 re
-f*
-2948.15 4130.15 80.3999 9.59961 re
-f*
-2808.95 4130.15 79.2 9.59961 re
-f*
-2668.55 4130.15 80.3999 9.59961 re
-f*
-2528.15 4130.15 80.3999 9.59961 re
-f*
-2388.95 4130.15 79.2 9.59961 re
-f*
-2248.55 4130.15 80.3999 9.59961 re
-f*
-2108.15 4130.15 80.3999 9.59961 re
-f*
-1968.95 4130.15 79.2 9.59961 re
-f*
-1828.55 4130.15 80.3999 9.59961 re
-f*
-1688.15 4130.15 80.3999 9.59961 re
-f*
-1578.95 4130.15 49.2002 9.59961 re
-f*
-0.564706 g
-2262.95 6855.35 m
-2262.95 6965.75 2171.75 7056.95 2060.15 7056.95 c
-1563.35 7056.95 l
-1451.75 7056.95 1360.55 6965.75 1360.55 6855.35 c
-1360.55 6717.35 l
-1360.55 6606.95 1451.75 6515.75 1563.35 6515.75 c
-2060.15 6515.75 l
-2171.75 6515.75 2262.95 6606.95 2262.95 6717.35 c
-f*
-1 g
-2198.15 6912.95 m
-2198.15 7022.15 2109.35 7110.95 1997.75 7110.95 c
-1506.95 7110.95 l
-1396.55 7110.95 1306.55 7022.15 1306.55 6912.95 c
-1306.55 6778.55 l
-1306.55 6669.35 1395.35 6580.55 1506.95 6580.55 c
-1997.75 6580.55 l
-2109.35 6580.55 2198.15 6669.35 2198.15 6778.55 c
-f*
-0 g
-2198.15 6912.95 m
-2198.15 7022.15 2109.35 7110.95 1997.75 7110.95 c
-1506.95 7110.95 l
-1396.55 7110.95 1306.55 7022.15 1306.55 6912.95 c
-1306.55 6778.55 l
-1306.55 6669.35 1395.35 6580.55 1506.95 6580.55 c
-1997.75 6580.55 l
-2109.35 6580.55 2198.15 6669.35 2198.15 6778.55 c
-h
-S
-0.201248 i
-1539.33 6952 m
-1425.22 6952 l
-1425.22 6947 l
-1439.11 6946.2 1443 6943.18 1443 6932.72 c
-1443 6835.32 l
-1443 6824.85 1440.17 6822.64 1425.22 6821.03 c
-1425.22 6816 l
-1497.67 6816 l
-1497.67 6821 l
-1479.15 6821.81 1476 6824.23 1476 6835.32 c
-1476 6882.21 l
-1496.22 6881.81 1503.55 6874.36 1506.32 6851.02 c
-1511.35 6851.02 l
-1511.35 6919.04 l
-1506.32 6919.04 l
-1502.76 6896.1 1495.82 6889.05 1476 6889.05 c
-1476 6935.74 l
-1476 6943.19 1478.52 6945 1488.41 6945 c
-1507.13 6945 1518.8 6941.64 1525.04 6934.74 c
-1529.47 6929.71 1531.68 6924.27 1534.5 6911.59 c
-1539.33 6911.59 l
-h
-1544.96 6816 m
-f*
-1589.19 6909 m
-1550.84 6909 l
-1550.84 6903.95 l
-1559.49 6902.74 1562 6900.12 1562 6892.07 c
-1562 6832.9 l
-1562 6824.65 1559.93 6822.44 1550.84 6820.83 c
-1550.84 6816 l
-1604.37 6816 l
-1604.37 6820.83 l
-1592.09 6821.63 1590 6824.25 1590 6836.73 c
-1590 6874.76 l
-1590 6885.23 1595.49 6893.88 1601.95 6893.88 c
-1603.56 6893.88 1605.37 6892.47 1607.59 6889.25 c
-1611.41 6883.82 1614.43 6882.01 1619.66 6882.01 c
-1627.11 6882.01 1632.34 6887.64 1632.34 6895.29 c
-1632.34 6904.55 1625.5 6911.41 1616.04 6911.41 c
-1606.1 6911.41 1598.54 6906.12 1589.19 6892.27 c
-h
-1634.35 6816 m
-f*
-1729.19 6828.88 m
-1727.18 6826.87 l
-1726.57 6826.26 1725.97 6826.06 1724.96 6826.06 c
-1722.15 6826.06 1721 6827.67 1721 6831.09 c
-1721 6883.62 l
-1721 6900.73 1705.6 6911.42 1680.89 6911.42 c
-1658.15 6911.42 1642.85 6901.06 1642.85 6885.83 c
-1642.85 6877.38 1647.69 6872.55 1655.94 6872.55 c
-1663.99 6872.55 1669.62 6877.38 1669.62 6884.22 c
-1669.62 6887.04 1668.61 6889.66 1666 6892.88 c
-1664.19 6894.89 1663.58 6896.1 1663.58 6897.3 c
-1663.58 6901.53 1669.02 6904.42 1676.26 6904.42 c
-1688.14 6904.42 1693.86 6899.08 1693.86 6887.04 c
-1693.86 6872.35 l
-1669.91 6865.1 1660.29 6861.48 1652.51 6856.45 c
-1643.46 6850.41 1639 6843.37 1639 6834.52 c
-1639 6822.24 1648.27 6813.18 1661.17 6813.18 c
-1672.84 6813.18 1682.1 6817.21 1693.17 6827.27 c
-1695.38 6817.01 1699.81 6813.18 1709.67 6813.18 c
-1718.32 6813.18 1724.56 6816.4 1732.21 6824.65 c
-h
-1693 6836.13 m
-1687.55 6829.89 1683.52 6827.47 1678.68 6827.47 c
-1672.64 6827.47 1668 6832.91 1668 6840.96 c
-1668 6852.63 1676.61 6860.88 1693 6865.31 c
-h
-1734.62 6816 m
-f*
-1776.4 6909 m
-1737.7 6909 l
-1737.7 6903.95 l
-1746.55 6902.74 1749 6900.32 1749 6892.07 c
-1749 6832.9 l
-1749 6824.65 1746.74 6822.44 1737.7 6820.83 c
-1737.7 6816 l
-1786 6816 l
-1786 6820.83 l
-1778.95 6821.84 1777 6824.65 1777 6832.3 c
-1777 6886.03 l
-1777 6887.04 1779.87 6890.66 1782.18 6892.88 c
-1786.4 6896.1 1790.02 6898.42 1793.65 6898.42 c
-1801.5 6898.42 1805 6893.59 1805 6881 c
-1805 6832.3 l
-1805 6824.05 1802.68 6821.43 1794.85 6820.83 c
-1794.85 6816 l
-1841.95 6816 l
-1841.95 6820.83 l
-1834.9 6821.64 1833 6824.65 1833 6832.3 c
-1833 6886.03 l
-1833 6887.04 1835.73 6890.46 1837.92 6892.68 c
-1842.35 6896.1 1845.97 6898.42 1849.59 6898.42 c
-1857.24 6898.42 1860 6893.38 1860 6881 c
-1860 6832.3 l
-1860 6823.85 1857.85 6821.43 1850.4 6820.83 c
-1850.4 6816 l
-1898.3 6816 l
-1898.3 6821 l
-1890.45 6821.4 1888 6823.78 1888 6832.3 c
-1888 6882.81 l
-1888 6900.12 1877.43 6911.42 1861.07 6911.42 c
-1849.59 6911.42 1841.95 6906.73 1831.48 6893.68 c
-1825.44 6906.36 1818.4 6911.42 1805.72 6911.42 c
-1792.95 6911.42 1783.98 6905.91 1776.4 6893.68 c
-h
-1901.64 6816 m
-f*
-1979.9 6841.16 m
-1971.65 6831.29 1965.61 6827.18 1956.96 6827.18 c
-1949.31 6827.18 1943.27 6830.77 1939.25 6837.94 c
-1935.43 6844.54 1933.82 6851.56 1933.01 6866 c
-1983.73 6866 l
-1982.52 6882.36 1979.5 6891.43 1973.26 6899.12 c
-1966.82 6906.96 1957.36 6911.42 1946.09 6911.42 c
-1920.94 6911.42 1904.03 6891.4 1904.03 6861.88 c
-1904.03 6832.5 1920.53 6813.18 1945.49 6813.18 c
-1961.79 6813.18 1971.65 6819.42 1984.73 6838.34 c
-h
-1932 6873 m
-1932.61 6896.96 1936.23 6904.42 1946.09 6904.42 c
-1951.93 6904.42 1955.55 6901.38 1957.16 6895.49 c
-1958.17 6891.67 1958.57 6886.03 1958.97 6875.77 c
-1958.97 6873 l
-h
-1988.35 6816 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -6816]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4722.95 6054.95 m
-4722.95 6166.55 4631.75 6257.75 4520.15 6257.75 c
-4023.35 6257.75 l
-3911.75 6257.75 3820.55 6166.55 3820.55 6054.95 c
-3820.55 5918.15 l
-3820.55 5806.55 3911.75 5715.35 4023.35 5715.35 c
-4520.15 5715.35 l
-4631.75 5715.35 4722.95 5806.55 4722.95 5918.15 c
-f*
-1 g
-4653.35 6111.35 m
-4653.35 6219.35 4564.55 6306.95 4455.35 6306.95 c
-3969.35 6306.95 l
-3860.15 6306.95 3771.35 6219.35 3771.35 6111.35 c
-3771.35 5980.55 l
-3771.35 5872.55 3860.15 5784.95 3969.35 5784.95 c
-4455.35 5784.95 l
-4564.55 5784.95 4653.35 5872.55 4653.35 5980.55 c
-f*
-16 w
-0 g
-4653.35 6111.35 m
-4653.35 6219.35 4564.55 6306.95 4455.35 6306.95 c
-3969.35 6306.95 l
-3860.15 6306.95 3771.35 6219.35 3771.35 6111.35 c
-3771.35 5980.55 l
-3771.35 5872.55 3860.15 5784.95 3969.35 5784.95 c
-4455.35 5784.95 l
-4564.55 5784.95 4653.35 5872.55 4653.35 5980.55 c
-h
-S
-0.201248 i
-3999.33 6153 m
-3885.22 6153 l
-3885.22 6148 l
-3899.11 6147.2 3903 6144.18 3903 6133.72 c
-3903 6036.32 l
-3903 6025.85 3900.17 6023.64 3885.22 6022.03 c
-3885.22 6017 l
-3957.67 6017 l
-3957.67 6022 l
-3939.15 6022.81 3936 6025.23 3936 6036.32 c
-3936 6083.21 l
-3956.22 6082.81 3963.55 6075.36 3966.32 6052.02 c
-3971.35 6052.02 l
-3971.35 6120.04 l
-3966.32 6120.04 l
-3962.76 6097.1 3955.82 6090.05 3936 6090.05 c
-3936 6136.74 l
-3936 6144.19 3938.52 6146 3948.41 6146 c
-3967.13 6146 3978.8 6142.64 3985.04 6135.74 c
-3989.47 6130.71 3991.68 6125.27 3994.5 6112.59 c
-3999.33 6112.59 l
-h
-4004.96 6017 m
-f*
-4049.19 6110 m
-4010.84 6110 l
-4010.84 6104.95 l
-4019.49 6103.74 4022 6101.12 4022 6093.07 c
-4022 6033.9 l
-4022 6025.65 4019.93 6023.44 4010.84 6021.83 c
-4010.84 6017 l
-4064.37 6017 l
-4064.37 6021.83 l
-4052.09 6022.63 4050 6025.25 4050 6037.73 c
-4050 6075.76 l
-4050 6086.23 4055.49 6094.88 4061.95 6094.88 c
-4063.56 6094.88 4065.37 6093.47 4067.59 6090.25 c
-4071.41 6084.82 4074.43 6083.01 4079.66 6083.01 c
-4087.11 6083.01 4092.34 6088.64 4092.34 6096.29 c
-4092.34 6105.55 4085.5 6112.41 4076.04 6112.41 c
-4066.1 6112.41 4058.54 6107.12 4049.19 6093.27 c
-h
-4094.35 6017 m
-f*
-4189.19 6029.88 m
-4187.18 6027.87 l
-4186.57 6027.26 4185.97 6027.06 4184.96 6027.06 c
-4182.15 6027.06 4181 6028.67 4181 6032.09 c
-4181 6084.62 l
-4181 6101.73 4165.6 6112.42 4140.89 6112.42 c
-4118.15 6112.42 4102.85 6102.06 4102.85 6086.83 c
-4102.85 6078.38 4107.69 6073.55 4115.94 6073.55 c
-4123.99 6073.55 4129.62 6078.38 4129.62 6085.22 c
-4129.62 6088.04 4128.61 6090.66 4126 6093.88 c
-4124.19 6095.89 4123.58 6097.1 4123.58 6098.3 c
-4123.58 6102.53 4129.02 6105.42 4136.26 6105.42 c
-4148.14 6105.42 4153.86 6100.08 4153.86 6088.04 c
-4153.86 6073.35 l
-4129.91 6066.1 4120.29 6062.48 4112.51 6057.45 c
-4103.46 6051.41 4099 6044.37 4099 6035.52 c
-4099 6023.24 4108.27 6014.18 4121.17 6014.18 c
-4132.84 6014.18 4142.1 6018.21 4153.17 6028.27 c
-4155.38 6018.01 4159.81 6014.18 4169.67 6014.18 c
-4178.32 6014.18 4184.56 6017.4 4192.21 6025.65 c
-h
-4153 6037.13 m
-4147.55 6030.89 4143.52 6028.47 4138.68 6028.47 c
-4132.64 6028.47 4128 6033.91 4128 6041.96 c
-4128 6053.63 4136.61 6061.88 4153 6066.31 c
-h
-4194.62 6017 m
-f*
-4236.4 6110 m
-4197.7 6110 l
-4197.7 6104.95 l
-4206.55 6103.74 4209 6101.32 4209 6093.07 c
-4209 6033.9 l
-4209 6025.65 4206.74 6023.44 4197.7 6021.83 c
-4197.7 6017 l
-4246 6017 l
-4246 6021.83 l
-4238.95 6022.84 4237 6025.65 4237 6033.3 c
-4237 6087.03 l
-4237 6088.04 4239.87 6091.66 4242.18 6093.88 c
-4246.4 6097.1 4250.02 6099.42 4253.65 6099.42 c
-4261.5 6099.42 4265 6094.59 4265 6082 c
-4265 6033.3 l
-4265 6025.05 4262.68 6022.43 4254.85 6021.83 c
-4254.85 6017 l
-4301.95 6017 l
-4301.95 6021.83 l
-4294.9 6022.64 4293 6025.65 4293 6033.3 c
-4293 6087.03 l
-4293 6088.04 4295.73 6091.46 4297.92 6093.68 c
-4302.35 6097.1 4305.97 6099.42 4309.59 6099.42 c
-4317.24 6099.42 4320 6094.38 4320 6082 c
-4320 6033.3 l
-4320 6024.85 4317.85 6022.43 4310.4 6021.83 c
-4310.4 6017 l
-4358.3 6017 l
-4358.3 6022 l
-4350.45 6022.4 4348 6024.78 4348 6033.3 c
-4348 6083.81 l
-4348 6101.12 4337.43 6112.42 4321.07 6112.42 c
-4309.59 6112.42 4301.95 6107.73 4291.48 6094.68 c
-4285.44 6107.36 4278.4 6112.42 4265.72 6112.42 c
-4252.95 6112.42 4243.98 6106.91 4236.4 6094.68 c
-h
-4361.64 6017 m
-f*
-4439.9 6042.16 m
-4431.65 6032.29 4425.61 6028.18 4416.96 6028.18 c
-4409.31 6028.18 4403.27 6031.77 4399.25 6038.94 c
-4395.43 6045.54 4393.82 6052.56 4393.01 6067 c
-4443.73 6067 l
-4442.52 6083.36 4439.5 6092.43 4433.26 6100.12 c
-4426.82 6107.96 4417.36 6112.42 4406.09 6112.42 c
-4380.94 6112.42 4364.03 6092.4 4364.03 6062.88 c
-4364.03 6033.5 4380.53 6014.18 4405.49 6014.18 c
-4421.79 6014.18 4431.65 6020.42 4444.73 6039.34 c
-h
-4392 6074 m
-4392.61 6097.96 4396.23 6105.42 4406.09 6105.42 c
-4411.93 6105.42 4415.55 6102.38 4417.16 6096.49 c
-4418.17 6092.67 4418.57 6087.03 4418.97 6076.77 c
-4418.97 6074 l
-h
-4448.35 6017 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4484 -6015]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3794.15 5348.15 m
-3794.15 5458.55 3702.95 5549.75 3591.35 5549.75 c
-3095.75 5549.75 l
-2984.15 5549.75 2892.95 5458.55 2892.95 5348.15 c
-2892.95 5210.15 l
-2892.95 5099.75 2984.15 5008.55 3095.75 5008.55 c
-3591.35 5008.55 l
-3702.95 5008.55 3794.15 5099.75 3794.15 5210.15 c
-f*
-1 g
-3729.35 5405.75 m
-3729.35 5514.95 3640.55 5603.75 3530.15 5603.75 c
-3039.35 5603.75 l
-2927.75 5603.75 2838.95 5514.95 2838.95 5405.75 c
-2838.95 5271.35 l
-2838.95 5162.15 2927.75 5073.35 3039.35 5073.35 c
-3528.95 5073.35 l
-3640.55 5073.35 3729.35 5162.15 3729.35 5271.35 c
-f*
-8 w
-0 g
-3729.35 5405.75 m
-3729.35 5514.95 3640.55 5603.75 3530.15 5603.75 c
-3039.35 5603.75 l
-2927.75 5603.75 2838.95 5514.95 2838.95 5405.75 c
-2838.95 5271.35 l
-2838.95 5162.15 2927.75 5073.35 3039.35 5073.35 c
-3528.95 5073.35 l
-3640.55 5073.35 3729.35 5162.15 3729.35 5271.35 c
-h
-S
-0.201248 i
-3082.33 5445 m
-2968.22 5445 l
-2968.22 5440 l
-2982.11 5439.2 2986 5436.18 2986 5425.72 c
-2986 5328.32 l
-2986 5317.85 2983.17 5315.64 2968.22 5314.03 c
-2968.22 5309 l
-3040.67 5309 l
-3040.67 5314 l
-3022.15 5314.81 3019 5317.23 3019 5328.32 c
-3019 5375.21 l
-3039.22 5374.81 3046.55 5367.36 3049.32 5344.02 c
-3054.35 5344.02 l
-3054.35 5412.04 l
-3049.32 5412.04 l
-3045.76 5389.1 3038.82 5382.05 3019 5382.05 c
-3019 5428.74 l
-3019 5436.19 3021.52 5438 3031.41 5438 c
-3050.13 5438 3061.8 5434.64 3068.04 5427.74 c
-3072.47 5422.71 3074.68 5417.27 3077.5 5404.59 c
-3082.33 5404.59 l
-h
-3087.96 5309 m
-f*
-3131.19 5402 m
-3092.84 5402 l
-3092.84 5396.95 l
-3101.49 5395.74 3104 5393.12 3104 5385.07 c
-3104 5325.9 l
-3104 5317.65 3101.93 5315.44 3092.84 5313.83 c
-3092.84 5309 l
-3146.37 5309 l
-3146.37 5313.83 l
-3134.09 5314.63 3132 5317.25 3132 5329.73 c
-3132 5367.76 l
-3132 5378.23 3137.49 5386.88 3143.95 5386.88 c
-3145.56 5386.88 3147.37 5385.47 3149.59 5382.25 c
-3153.41 5376.82 3156.43 5375.01 3161.66 5375.01 c
-3169.11 5375.01 3174.34 5380.64 3174.34 5388.29 c
-3174.34 5397.55 3167.5 5404.41 3158.04 5404.41 c
-3148.1 5404.41 3140.54 5399.12 3131.19 5385.27 c
-h
-3176.35 5309 m
-f*
-3271.19 5321.88 m
-3269.18 5319.87 l
-3268.57 5319.26 3267.97 5319.06 3266.96 5319.06 c
-3264.15 5319.06 3263 5320.67 3263 5324.09 c
-3263 5376.62 l
-3263 5393.73 3247.6 5404.42 3222.89 5404.42 c
-3200.15 5404.42 3184.85 5394.06 3184.85 5378.83 c
-3184.85 5370.38 3189.69 5365.55 3197.94 5365.55 c
-3205.99 5365.55 3211.62 5370.38 3211.62 5377.22 c
-3211.62 5380.04 3210.61 5382.66 3208 5385.88 c
-3206.19 5387.89 3205.58 5389.1 3205.58 5390.3 c
-3205.58 5394.53 3211.02 5397.42 3218.26 5397.42 c
-3230.14 5397.42 3235.86 5392.08 3235.86 5380.04 c
-3235.86 5365.35 l
-3211.91 5358.1 3202.29 5354.48 3194.51 5349.45 c
-3185.46 5343.41 3181 5336.37 3181 5327.52 c
-3181 5315.24 3190.27 5306.18 3203.17 5306.18 c
-3214.84 5306.18 3224.1 5310.21 3235.17 5320.27 c
-3237.38 5310.01 3241.81 5306.18 3251.67 5306.18 c
-3260.32 5306.18 3266.56 5309.4 3274.21 5317.65 c
-h
-3235 5329.13 m
-3229.55 5322.89 3225.52 5320.47 3220.68 5320.47 c
-3214.64 5320.47 3210 5325.91 3210 5333.96 c
-3210 5345.63 3218.61 5353.88 3235 5358.31 c
-h
-3276.62 5309 m
-f*
-3318.4 5402 m
-3279.7 5402 l
-3279.7 5396.95 l
-3288.55 5395.74 3291 5393.32 3291 5385.07 c
-3291 5325.9 l
-3291 5317.65 3288.74 5315.44 3279.7 5313.83 c
-3279.7 5309 l
-3328 5309 l
-3328 5313.83 l
-3320.95 5314.84 3319 5317.65 3319 5325.3 c
-3319 5379.03 l
-3319 5380.04 3321.87 5383.66 3324.18 5385.88 c
-3328.4 5389.1 3332.02 5391.42 3335.65 5391.42 c
-3343.5 5391.42 3347 5386.59 3347 5374 c
-3347 5325.3 l
-3347 5317.05 3344.68 5314.43 3336.85 5313.83 c
-3336.85 5309 l
-3383.95 5309 l
-3383.95 5313.83 l
-3376.9 5314.64 3375 5317.65 3375 5325.3 c
-3375 5379.03 l
-3375 5380.04 3377.73 5383.46 3379.92 5385.68 c
-3384.35 5389.1 3387.97 5391.42 3391.59 5391.42 c
-3399.24 5391.42 3402 5386.38 3402 5374 c
-3402 5325.3 l
-3402 5316.85 3399.85 5314.43 3392.4 5313.83 c
-3392.4 5309 l
-3440.3 5309 l
-3440.3 5314 l
-3432.45 5314.4 3430 5316.78 3430 5325.3 c
-3430 5375.81 l
-3430 5393.12 3419.43 5404.42 3403.07 5404.42 c
-3391.59 5404.42 3383.95 5399.73 3373.48 5386.68 c
-3367.44 5399.36 3360.4 5404.42 3347.72 5404.42 c
-3334.95 5404.42 3325.98 5398.91 3318.4 5386.68 c
-h
-3443.64 5309 m
-f*
-3523.9 5334.16 m
-3515.65 5324.29 3509.61 5320.18 3500.96 5320.18 c
-3493.31 5320.18 3487.27 5323.77 3483.25 5330.94 c
-3479.43 5337.54 3477.82 5344.56 3477.01 5359 c
-3527.73 5359 l
-3526.52 5375.36 3523.5 5384.43 3517.26 5392.12 c
-3510.82 5399.96 3501.36 5404.42 3490.09 5404.42 c
-3464.94 5404.42 3448.03 5384.4 3448.03 5354.88 c
-3448.03 5325.5 3464.53 5306.18 3489.49 5306.18 c
-3505.79 5306.18 3515.65 5312.42 3528.73 5331.34 c
-h
-3476 5366 m
-3476.61 5389.96 3480.23 5397.42 3490.09 5397.42 c
-3495.93 5397.42 3499.55 5394.38 3501.16 5388.49 c
-3502.17 5384.67 3502.57 5379.03 3502.97 5368.77 c
-3502.97 5366 l
-h
-3532.35 5309 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -5309]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-1751.75 6550.55 m
-1751.75 6558.95 1751.75 6558.95 1751.75 6550.55 c
-1751.75 6402.95 1791.35 6261.35 1863.35 6160.55 c
-S
-1804.55 6166.55 m
-1853.75 6182.15 l
-1878.95 6227.75 l
-1940.15 6080.15 l
-f*
-2244.95 5584.55 m
-2334.95 5466.95 2519.75 5382.95 2740.55 5361.35 c
-S
-2699.75 5318.15 m
-2721.35 5364.95 l
-2705.75 5412.95 l
-2854.55 5356.55 l
-f*
-2831.75 6964.55 m
-2729.75 7064.15 2584.55 7121.75 2430.95 7121.75 c
-2326.55 7121.75 2224.55 7095.35 2136.95 7044.95 c
-S
-2766.95 6958.55 m
-2814.95 6974.15 l
-2838.95 7019.75 l
-2902.55 6873.35 l
-f*
-3186.95 6388.55 m
-3275.75 6214.55 3440.15 6089.75 3635.75 6050.15 c
-S
-3591.35 6010.55 m
-3616.55 6056.15 l
-3604.55 6106.55 l
-3748.55 6035.75 l
-f*
-0.564706 g
-3638.15 6564.95 m
-3503.75 6600.95 l
-3599.75 6657.35 l
-3446.15 6665.75 l
-3488.15 6736.55 l
-3340.55 6716.15 l
-3323.75 6786.95 l
-3203.75 6742.55 l
-3128.15 6806.15 l
-3052.55 6742.55 l
-2932.55 6786.95 l
-2914.55 6716.15 l
-2765.75 6736.55 l
-2810.15 6665.75 l
-2656.55 6657.35 l
-2752.55 6600.95 l
-2616.95 6564.95 l
-2752.55 6530.15 l
-2656.55 6473.75 l
-2810.15 6464.15 l
-2765.75 6394.55 l
-2914.55 6414.95 l
-2932.55 6342.95 l
-3052.55 6388.55 l
-3128.15 6324.95 l
-3203.75 6388.55 l
-3323.75 6342.95 l
-3340.55 6414.95 l
-3488.15 6394.55 l
-3446.15 6464.15 l
-3599.75 6473.75 l
-3503.75 6530.15 l
-f*
-1 g
-3578.15 6624.95 m
-3443.75 6660.95 l
-3539.75 6717.35 l
-3386.15 6725.75 l
-3428.15 6796.55 l
-3280.55 6776.15 l
-3263.75 6846.95 l
-3143.75 6802.55 l
-3068.15 6866.15 l
-2992.55 6802.55 l
-2872.55 6846.95 l
-2854.55 6776.15 l
-2705.75 6796.55 l
-2750.15 6725.75 l
-2596.55 6717.35 l
-2692.55 6660.95 l
-2556.95 6624.95 l
-2692.55 6590.15 l
-2596.55 6533.75 l
-2750.15 6524.15 l
-2705.75 6454.55 l
-2854.55 6474.95 l
-2872.55 6402.95 l
-2992.55 6448.55 l
-3068.15 6384.95 l
-3143.75 6448.55 l
-3263.75 6402.95 l
-3280.55 6474.95 l
-3428.15 6454.55 l
-3386.15 6524.15 l
-3539.75 6533.75 l
-3443.75 6590.15 l
-f*
-0 g
-3578.15 6624.95 m
-3443.75 6660.95 l
-3539.75 6717.35 l
-3386.15 6725.75 l
-3428.15 6796.55 l
-3280.55 6776.15 l
-3263.75 6846.95 l
-3143.75 6802.55 l
-3068.15 6866.15 l
-2992.55 6802.55 l
-2872.55 6846.95 l
-2854.55 6776.15 l
-2705.75 6796.55 l
-2750.15 6725.75 l
-2596.55 6717.35 l
-2692.55 6660.95 l
-2556.95 6624.95 l
-2692.55 6590.15 l
-2596.55 6533.75 l
-2750.15 6524.15 l
-2705.75 6454.55 l
-2854.55 6474.95 l
-2872.55 6402.95 l
-2992.55 6448.55 l
-3068.15 6384.95 l
-3143.75 6448.55 l
-3263.75 6402.95 l
-3280.55 6474.95 l
-3428.15 6454.55 l
-3386.15 6524.15 l
-3539.75 6533.75 l
-3443.75 6590.15 l
-3578.15 6624.95 l
-3539.75 6624.95 l
-3417.35 6593.75 l
-3506.15 6540.95 l
-3368.15 6533.75 l
-3408.95 6467.75 l
-3273.35 6485.75 l
-3256.55 6417.35 l
-3141.35 6459.35 l
-3068.15 6396.95 l
-2994.95 6459.35 l
-2879.75 6417.35 l
-2861.75 6485.75 l
-2726.15 6467.75 l
-2766.95 6533.75 l
-2630.15 6540.95 l
-2718.95 6593.75 l
-2596.55 6624.95 l
-2717.75 6657.35 l
-2630.15 6710.15 l
-2766.95 6717.35 l
-2726.15 6783.35 l
-2861.75 6764.15 l
-2879.75 6833.75 l
-2994.95 6790.55 l
-3068.15 6852.95 l
-3141.35 6790.55 l
-3256.55 6833.75 l
-3273.35 6764.15 l
-3408.95 6783.35 l
-3368.15 6717.35 l
-3506.15 6710.15 l
-3417.35 6657.35 l
-3539.75 6624.95 l
-3578.15 6624.95 l
-f*
-0.2 i
-2890.08 6676.76 m
-2870.08 6602.52 l
-2867.52 6593.88 2864.48 6591.64 2854.08 6591 c
-2854.08 6587 l
-2904 6587 l
-2904 6591 l
-2894.72 6591.48 2892.48 6592.76 2892.48 6597.88 c
-2892.48 6599.64 2892.8 6601.4 2893.76 6605.08 c
-2893.92 6605.88 l
-2894.08 6606.68 l
-2913.76 6678.52 l
-2916.16 6686.84 2918.56 6689.08 2926.72 6690.04 c
-2926.72 6694 l
-2892.8 6694 l
-2843.2 6617.24 l
-2834.56 6694 l
-2799.2 6694 l
-2799.2 6690 l
-2809.28 6689.52 2810.72 6688.89 2810.72 6684.44 c
-2810.72 6682.2 2810.08 6679.32 2808.96 6675.16 c
-2791.52 6615.48 l
-2785.12 6594.68 2784 6592.92 2775.36 6591 c
-2775.36 6587 l
-2808.48 6587 l
-2808.48 6591 l
-2798.24 6592.28 2795.68 6594.2 2795.68 6600.76 c
-2795.68 6603.48 2796.48 6607.48 2798.72 6615.48 c
-2814.88 6674.52 l
-2825.6 6585.08 l
-2830.08 6585.08 l
-h
-2922.24 6587 m
-f*
-2991.44 6607.32 m
-2984.88 6598.52 2982.48 6595.76 2979.92 6595.76 c
-2978.64 6595.76 2978 6596.86 2978 6598.52 c
-2978 6602.52 2979.44 6609.08 2983.44 6622.2 c
-2994.8 6659.96 l
-2977.04 6658.84 l
-2974.16 6649.4 l
-2972.72 6657.56 2969.2 6661.08 2962.32 6661.08 c
-2942.64 6661.08 2919 6630.27 2919 6605.24 c
-2919 6593.08 2925.74 6584.92 2935.92 6584.92 c
-2945.68 6584.92 2953.04 6590.68 2962.16 6606.04 c
-2960.24 6599.48 2960 6597.56 2960 6595.32 c
-2960 6589.4 2964.76 6584.76 2970.64 6584.76 c
-2978.16 6584.76 2985.52 6591 2994.8 6604.92 c
-h
-2964.56 6654.2 m
-2968.08 6653.88 2970.56 6651 2970.56 6646.68 c
-2970.56 6637.08 2965.24 6619.32 2958.96 6608.28 c
-2954.64 6600.44 2949.84 6595.92 2945.52 6595.92 c
-2941.36 6595.92 2938 6599.75 2938 6604.92 c
-2938 6613.24 2943.42 6629.24 2950.16 6641.08 c
-2954.96 6649.56 2960.24 6654.52 2964.56 6654.2 c
-h
-3002 6587 m
-f*
-3036.56 6660.92 m
-3020.24 6658.36 3014 6657.4 3005.68 6656.44 c
-3005.68 6652 l
-3012.88 6651.69 3014.32 6651.07 3014.32 6648.12 c
-3014.32 6646.52 3013.04 6640.76 3010.8 6632.44 c
-2994.8 6570.36 l
-2991.76 6559.8 2990.48 6558.84 2982.8 6559 c
-2982.8 6554 l
-3022.64 6554 l
-3022.64 6559 l
-3014.64 6559.14 3012.24 6560.16 3012.24 6563.64 c
-3012.24 6565.88 3013.36 6570.68 3016.4 6581.88 c
-3017.52 6585.72 3017.52 6586.04 3018.16 6588.44 c
-3023.76 6585.56 3025.68 6584.92 3029.04 6584.92 c
-3050.8 6584.92 3073.36 6613.88 3073.36 6641.56 c
-3073.36 6653.4 3066.64 6661.08 3056.08 6661.08 c
-3046.96 6661.08 3039.92 6655.92 3030.48 6642.52 c
-h
-3047.12 6649.56 m
-3051.28 6649.24 3053.68 6645.56 3053.36 6640.44 c
-3052.72 6629.88 3047.6 6614.04 3041.84 6603.64 c
-3036.88 6595 3031.76 6589.92 3026.32 6589.92 c
-3022.8 6589.92 3020.08 6592.75 3020.08 6596.28 c
-3020.08 6599 3021.84 6605.56 3026.16 6620.12 c
-3029.68 6631.8 3031.12 6635.8 3033.52 6639.48 c
-3037.52 6645.72 3042.96 6649.88 3047.12 6649.56 c
-h
-3082 6587 m
-f*
-3117.56 6660.92 m
-3101.24 6658.36 3095 6657.4 3086.68 6656.44 c
-3086.68 6652 l
-3093.88 6651.69 3095.32 6651.07 3095.32 6648.12 c
-3095.32 6646.52 3094.04 6640.76 3091.8 6632.44 c
-3075.8 6570.36 l
-3072.76 6559.8 3071.48 6558.84 3063.8 6559 c
-3063.8 6554 l
-3103.64 6554 l
-3103.64 6559 l
-3095.64 6559.14 3093.24 6560.16 3093.24 6563.64 c
-3093.24 6565.88 3094.36 6570.68 3097.4 6581.88 c
-3098.52 6585.72 3098.52 6586.04 3099.16 6588.44 c
-3104.76 6585.56 3106.68 6584.92 3110.04 6584.92 c
-3131.8 6584.92 3154.36 6613.88 3154.36 6641.56 c
-3154.36 6653.4 3147.64 6661.08 3137.08 6661.08 c
-3127.96 6661.08 3120.92 6655.92 3111.48 6642.52 c
-h
-3128.12 6649.56 m
-3132.28 6649.24 3134.68 6645.56 3134.36 6640.44 c
-3133.72 6629.88 3128.6 6614.04 3122.84 6603.64 c
-3117.88 6595 3112.76 6589.92 3107.32 6589.92 c
-3103.8 6589.92 3101.08 6592.75 3101.08 6596.28 c
-3101.08 6599 3102.84 6605.56 3107.16 6620.12 c
-3110.68 6631.8 3112.12 6635.8 3114.52 6639.48 c
-3118.52 6645.72 3123.96 6649.88 3128.12 6649.56 c
-h
-3163 6587 m
-f*
-3196.56 6609.56 m
-3194.32 6606.36 l
-3190.16 6600.12 3186.48 6596.56 3184.08 6596.56 c
-3182.8 6596.56 3182 6597.77 3182 6599.16 c
-3182 6600.6 3182.62 6604.76 3183.12 6607.48 c
-3197.68 6660.92 l
-3189.22 6659 3178.26 6657.4 3166.04 6656.44 c
-3166.04 6652 l
-3167.44 6652 l
-3172.24 6652 3175.48 6650.44 3175.48 6647.48 c
-3175.48 6646.2 3174.71 6643.8 3173.68 6641.08 c
-3164.4 6606.68 l
-3163.12 6602.04 3163 6597.88 3163 6595.64 c
-3163 6589.56 3167.2 6585.56 3173.36 6585.56 c
-3182.96 6585.56 3188.88 6590.36 3200.08 6607.32 c
-h
-3192.88 6696.4 m
-3187.44 6696.4 3183 6691.46 3183 6686.04 c
-3183 6679.8 3187.26 6675.4 3193.04 6675.4 c
-3199.12 6675.4 3204 6679.86 3204 6685.56 c
-3204 6691.48 3199 6696.4 3192.88 6696.4 c
-h
-3206.48 6587 m
-f*
-3281.36 6608.6 m
-3274.96 6598.68 3272.88 6596.56 3270.16 6596.56 c
-3268.88 6596.56 3268 6597.63 3268 6599.16 c
-3268 6600.76 3268.94 6604.12 3271.92 6613.08 c
-3277.68 6630.52 l
-3280.24 6638.04 3282 6645.08 3282 6648.92 c
-3282 6656.76 3277.78 6661.08 3270.16 6661.08 c
-3264.24 6661.08 3258.48 6658.62 3254.16 6654.36 c
-3248.24 6648.76 3245.2 6644.92 3234.48 6629.08 c
-3244.72 6660.76 l
-3234.48 6658.52 3221.68 6656.92 3212.72 6656.6 c
-3212.72 6651.8 l
-3219.44 6651.65 3221.36 6650.92 3221.36 6648.12 c
-3221.36 6646.2 3219.12 6637.72 3214 6619.64 c
-3210.32 6606.68 3209.2 6602.52 3205.04 6587 c
-3224.4 6587 l
-3231.92 6614.68 3237.68 6628.6 3247.6 6641.56 c
-3250.8 6645.88 3255.76 6649.08 3258.64 6649.08 c
-3260.72 6649.08 3263 6647.63 3263 6646.04 c
-3263 6645.56 3262.54 6644.28 3261.84 6642.68 c
-3253.04 6616.12 l
-3250.48 6608.44 3249 6599.32 3249 6595.16 c
-3249 6589.08 3252.84 6585.56 3259.44 6585.56 c
-3269.04 6585.56 3275.6 6591 3284.88 6606.52 c
-h
-3294.96 6587 m
-f*
-3372.48 6656 m
-3354.72 6656 l
-3349.28 6659.58 3344.48 6661.08 3337.12 6661.08 c
-3317.44 6661.08 3301 6648.05 3301 6631.8 c
-3301 6623.64 3305.35 6617.88 3314.4 6614.2 c
-3301.28 6606.84 3299 6604.6 3299 6598.68 c
-3299 6593.56 3301.89 6590.52 3308.96 6588.12 c
-3299.04 6585.72 3295.84 6584.44 3292 6581.4 c
-3289.44 6579.16 3288 6575.32 3288 6571.48 c
-3288 6561.08 3299.56 6555 3317.76 6555 c
-3340.32 6555 3356 6564.72 3356 6578.52 c
-3356 6588.28 3349.6 6593.56 3332.16 6598.52 c
-3323.68 6600.92 l
-3318.56 6602.36 3315 6604.6 3315 6607 c
-3315 6609.56 3317.68 6612.28 3320 6612.28 c
-3320.8 6612.28 3321.92 6612.24 3323.2 6612.12 c
-3324.96 6611.64 3326.24 6611 3328.16 6611 c
-3335.2 6611 3342.4 6613.09 3348.48 6616.92 c
-3357.76 6622.2 3363 6630.36 3363 6639.96 c
-3363 6642.64 3362.59 6644.32 3361.76 6647 c
-3372.48 6647 l
-h
-3314.4 6586.04 m
-3316.32 6585.88 3328.48 6581.72 3332 6580.12 c
-3336.48 6577.88 3339 6575.16 3339 6571 c
-3339 6563.96 3331.8 6560 3319.36 6560 c
-3308.96 6560 3302 6565.1 3302 6572.44 c
-3302 6575.48 3303.32 6578.2 3306.24 6581.24 c
-3308.32 6583.32 3313.12 6586.2 3314.4 6586.04 c
-h
-3336.8 6656.08 m
-3340.96 6656.08 3344 6652.19 3344 6646.52 c
-3344 6641.08 3342.08 6633.4 3339.36 6627.48 c
-3336 6620.12 3331.84 6616 3326.88 6616 c
-3322.56 6616 3320 6619.52 3320 6625.88 c
-3320 6632.28 3322.79 6642.04 3326.24 6648.12 c
-3329.28 6653.4 3332.64 6656.08 3336.8 6656.08 c
-h
-3376 6587 m
-f*
-1 i
-0.564706 g
-2708.15 5769.35 m
-2573.75 5806.55 l
-2669.75 5861.75 l
-2516.15 5871.35 l
-2558.15 5940.95 l
-2410.55 5920.55 l
-2393.75 5992.55 l
-2273.75 5946.95 l
-2198.15 6010.55 l
-2122.55 5946.95 l
-2002.55 5992.55 l
-1984.55 5920.55 l
-1835.75 5940.95 l
-1880.15 5871.35 l
-1726.55 5861.75 l
-1822.55 5806.55 l
-1686.95 5769.35 l
-1822.55 5734.55 l
-1726.55 5678.15 l
-1880.15 5669.75 l
-1835.75 5600.15 l
-1984.55 5619.35 l
-2002.55 5548.55 l
-2122.55 5592.95 l
-2198.15 5529.35 l
-2273.75 5592.95 l
-2393.75 5548.55 l
-2410.55 5619.35 l
-2558.15 5600.15 l
-2516.15 5669.75 l
-2669.75 5678.15 l
-2573.75 5734.55 l
-f*
-1 g
-2648.15 5829.35 m
-2513.75 5866.55 l
-2609.75 5921.75 l
-2456.15 5931.35 l
-2498.15 6000.95 l
-2350.55 5980.55 l
-2333.75 6052.55 l
-2213.75 6006.95 l
-2138.15 6070.55 l
-2062.55 6006.95 l
-1942.55 6052.55 l
-1924.55 5980.55 l
-1775.75 6000.95 l
-1820.15 5931.35 l
-1666.55 5921.75 l
-1762.55 5866.55 l
-1626.95 5829.35 l
-1762.55 5794.55 l
-1666.55 5738.15 l
-1820.15 5729.75 l
-1775.75 5660.15 l
-1924.55 5679.35 l
-1942.55 5608.55 l
-2062.55 5652.95 l
-2138.15 5589.35 l
-2213.75 5652.95 l
-2333.75 5608.55 l
-2350.55 5679.35 l
-2498.15 5660.15 l
-2456.15 5729.75 l
-2609.75 5738.15 l
-2513.75 5794.55 l
-f*
-0 g
-2648.15 5829.35 m
-2513.75 5866.55 l
-2609.75 5921.75 l
-2456.15 5931.35 l
-2498.15 6000.95 l
-2350.55 5980.55 l
-2333.75 6052.55 l
-2213.75 6006.95 l
-2138.15 6070.55 l
-2062.55 6006.95 l
-1942.55 6052.55 l
-1924.55 5980.55 l
-1775.75 6000.95 l
-1820.15 5931.35 l
-1666.55 5921.75 l
-1762.55 5866.55 l
-1626.95 5829.35 l
-1762.55 5794.55 l
-1666.55 5738.15 l
-1820.15 5729.75 l
-1775.75 5660.15 l
-1924.55 5679.35 l
-1942.55 5608.55 l
-2062.55 5652.95 l
-2138.15 5589.35 l
-2213.75 5652.95 l
-2333.75 5608.55 l
-2350.55 5679.35 l
-2498.15 5660.15 l
-2456.15 5729.75 l
-2609.75 5738.15 l
-2513.75 5794.55 l
-2648.15 5829.35 l
-2609.75 5829.35 l
-2487.35 5798.15 l
-2576.15 5746.55 l
-2438.15 5738.15 l
-2478.95 5672.15 l
-2343.35 5691.35 l
-2326.55 5621.75 l
-2211.35 5664.95 l
-2138.15 5602.55 l
-2064.95 5664.95 l
-1949.75 5621.75 l
-1931.75 5691.35 l
-1796.15 5672.15 l
-1836.95 5738.15 l
-1700.15 5746.55 l
-1788.95 5798.15 l
-1666.55 5829.35 l
-1787.75 5861.75 l
-1700.15 5914.55 l
-1836.95 5921.75 l
-1796.15 5988.95 l
-1931.75 5969.75 l
-1949.75 6038.15 l
-2064.95 5996.15 l
-2138.15 6058.55 l
-2211.35 5996.15 l
-2326.55 6038.15 l
-2343.35 5969.75 l
-2478.95 5988.95 l
-2438.15 5921.75 l
-2576.15 5914.55 l
-2487.35 5861.75 l
-2609.75 5829.35 l
-2648.15 5829.35 l
-f*
-0.2 i
-1960.08 5880.76 m
-1940.08 5806.52 l
-1937.52 5797.88 1934.48 5795.64 1924.08 5795 c
-1924.08 5791 l
-1974 5791 l
-1974 5795 l
-1964.72 5795.48 1962.48 5796.76 1962.48 5801.88 c
-1962.48 5803.64 1962.8 5805.4 1963.76 5809.08 c
-1963.92 5809.88 l
-1964.08 5810.68 l
-1983.76 5882.52 l
-1986.16 5890.84 1988.56 5893.08 1996.72 5894.04 c
-1996.72 5898 l
-1962.8 5898 l
-1913.2 5821.24 l
-1904.56 5898 l
-1869.2 5898 l
-1869.2 5894 l
-1879.28 5893.52 1880.72 5892.89 1880.72 5888.44 c
-1880.72 5886.2 1880.08 5883.32 1878.96 5879.16 c
-1861.52 5819.48 l
-1855.12 5798.68 1854 5796.92 1845.36 5795 c
-1845.36 5791 l
-1878.48 5791 l
-1878.48 5795 l
-1868.24 5796.28 1865.68 5798.2 1865.68 5804.76 c
-1865.68 5807.48 1866.48 5811.48 1868.72 5819.48 c
-1884.88 5878.52 l
-1895.6 5789.08 l
-1900.08 5789.08 l
-h
-1992.24 5791 m
-f*
-2061.44 5811.32 m
-2054.88 5802.52 2052.48 5799.76 2049.92 5799.76 c
-2048.64 5799.76 2048 5800.86 2048 5802.52 c
-2048 5806.52 2049.44 5813.08 2053.44 5826.2 c
-2064.8 5863.96 l
-2047.04 5862.84 l
-2044.16 5853.4 l
-2042.72 5861.56 2039.2 5865.08 2032.32 5865.08 c
-2012.64 5865.08 1989 5834.27 1989 5809.24 c
-1989 5797.08 1995.74 5788.92 2005.92 5788.92 c
-2015.68 5788.92 2023.04 5794.68 2032.16 5810.04 c
-2030.24 5803.48 2030 5801.56 2030 5799.32 c
-2030 5793.4 2034.76 5788.76 2040.64 5788.76 c
-2048.16 5788.76 2055.52 5795 2064.8 5808.92 c
-h
-2034.56 5858.2 m
-2038.08 5857.88 2040.56 5855 2040.56 5850.68 c
-2040.56 5841.08 2035.24 5823.32 2028.96 5812.28 c
-2024.64 5804.44 2019.84 5799.92 2015.52 5799.92 c
-2011.36 5799.92 2008 5803.75 2008 5808.92 c
-2008 5817.24 2013.42 5833.24 2020.16 5845.08 c
-2024.96 5853.56 2030.24 5858.52 2034.56 5858.2 c
-h
-2072 5791 m
-f*
-2106.56 5864.92 m
-2090.24 5862.36 2084 5861.4 2075.68 5860.44 c
-2075.68 5856 l
-2082.88 5855.69 2084.32 5855.07 2084.32 5852.12 c
-2084.32 5850.52 2083.04 5844.76 2080.8 5836.44 c
-2064.8 5774.36 l
-2061.76 5763.8 2060.48 5762.84 2052.8 5763 c
-2052.8 5758 l
-2092.64 5758 l
-2092.64 5763 l
-2084.64 5763.14 2082.24 5764.16 2082.24 5767.64 c
-2082.24 5769.88 2083.36 5774.68 2086.4 5785.88 c
-2087.52 5789.72 2087.52 5790.04 2088.16 5792.44 c
-2093.76 5789.56 2095.68 5788.92 2099.04 5788.92 c
-2120.8 5788.92 2143.36 5817.88 2143.36 5845.56 c
-2143.36 5857.4 2136.64 5865.08 2126.08 5865.08 c
-2116.96 5865.08 2109.92 5859.92 2100.48 5846.52 c
-h
-2117.12 5853.56 m
-2121.28 5853.24 2123.68 5849.56 2123.36 5844.44 c
-2122.72 5833.88 2117.6 5818.04 2111.84 5807.64 c
-2106.88 5799 2101.76 5793.92 2096.32 5793.92 c
-2092.8 5793.92 2090.08 5796.75 2090.08 5800.28 c
-2090.08 5803 2091.84 5809.56 2096.16 5824.12 c
-2099.68 5835.8 2101.12 5839.8 2103.52 5843.48 c
-2107.52 5849.72 2112.96 5853.88 2117.12 5853.56 c
-h
-2152 5791 m
-f*
-2187.56 5864.92 m
-2171.24 5862.36 2165 5861.4 2156.68 5860.44 c
-2156.68 5856 l
-2163.88 5855.69 2165.32 5855.07 2165.32 5852.12 c
-2165.32 5850.52 2164.04 5844.76 2161.8 5836.44 c
-2145.8 5774.36 l
-2142.76 5763.8 2141.48 5762.84 2133.8 5763 c
-2133.8 5758 l
-2173.64 5758 l
-2173.64 5763 l
-2165.64 5763.14 2163.24 5764.16 2163.24 5767.64 c
-2163.24 5769.88 2164.36 5774.68 2167.4 5785.88 c
-2168.52 5789.72 2168.52 5790.04 2169.16 5792.44 c
-2174.76 5789.56 2176.68 5788.92 2180.04 5788.92 c
-2201.8 5788.92 2224.36 5817.88 2224.36 5845.56 c
-2224.36 5857.4 2217.64 5865.08 2207.08 5865.08 c
-2197.96 5865.08 2190.92 5859.92 2181.48 5846.52 c
-h
-2198.12 5853.56 m
-2202.28 5853.24 2204.68 5849.56 2204.36 5844.44 c
-2203.72 5833.88 2198.6 5818.04 2192.84 5807.64 c
-2187.88 5799 2182.76 5793.92 2177.32 5793.92 c
-2173.8 5793.92 2171.08 5796.75 2171.08 5800.28 c
-2171.08 5803 2172.84 5809.56 2177.16 5824.12 c
-2180.68 5835.8 2182.12 5839.8 2184.52 5843.48 c
-2188.52 5849.72 2193.96 5853.88 2198.12 5853.56 c
-h
-2233 5791 m
-f*
-2266.56 5813.56 m
-2264.32 5810.36 l
-2260.16 5804.12 2256.48 5800.56 2254.08 5800.56 c
-2252.8 5800.56 2252 5801.77 2252 5803.16 c
-2252 5804.6 2252.62 5808.76 2253.12 5811.48 c
-2267.68 5864.92 l
-2259.22 5863 2248.26 5861.4 2236.04 5860.44 c
-2236.04 5856 l
-2237.44 5856 l
-2242.24 5856 2245.48 5854.44 2245.48 5851.48 c
-2245.48 5850.2 2244.71 5847.8 2243.68 5845.08 c
-2234.4 5810.68 l
-2233.12 5806.04 2233 5801.88 2233 5799.64 c
-2233 5793.56 2237.2 5789.56 2243.36 5789.56 c
-2252.96 5789.56 2258.88 5794.36 2270.08 5811.32 c
-h
-2262.88 5900.4 m
-2257.44 5900.4 2253 5895.46 2253 5890.04 c
-2253 5883.8 2257.26 5879.4 2263.04 5879.4 c
-2269.12 5879.4 2274 5883.86 2274 5889.56 c
-2274 5895.48 2269 5900.4 2262.88 5900.4 c
-h
-2276.48 5791 m
-f*
-2351.36 5812.6 m
-2344.96 5802.68 2342.88 5800.56 2340.16 5800.56 c
-2338.88 5800.56 2338 5801.63 2338 5803.16 c
-2338 5804.76 2338.94 5808.12 2341.92 5817.08 c
-2347.68 5834.52 l
-2350.24 5842.04 2352 5849.08 2352 5852.92 c
-2352 5860.76 2347.78 5865.08 2340.16 5865.08 c
-2334.24 5865.08 2328.48 5862.62 2324.16 5858.36 c
-2318.24 5852.76 2315.2 5848.92 2304.48 5833.08 c
-2314.72 5864.76 l
-2304.48 5862.52 2291.68 5860.92 2282.72 5860.6 c
-2282.72 5855.8 l
-2289.44 5855.65 2291.36 5854.92 2291.36 5852.12 c
-2291.36 5850.2 2289.12 5841.72 2284 5823.64 c
-2280.32 5810.68 2279.2 5806.52 2275.04 5791 c
-2294.4 5791 l
-2301.92 5818.68 2307.68 5832.6 2317.6 5845.56 c
-2320.8 5849.88 2325.76 5853.08 2328.64 5853.08 c
-2330.72 5853.08 2333 5851.63 2333 5850.04 c
-2333 5849.56 2332.54 5848.28 2331.84 5846.68 c
-2323.04 5820.12 l
-2320.48 5812.44 2319 5803.32 2319 5799.16 c
-2319 5793.08 2322.84 5789.56 2329.44 5789.56 c
-2339.04 5789.56 2345.6 5795 2354.88 5810.52 c
-h
-2364.96 5791 m
-f*
-2442.48 5860 m
-2424.72 5860 l
-2419.28 5863.58 2414.48 5865.08 2407.12 5865.08 c
-2387.44 5865.08 2371 5852.05 2371 5835.8 c
-2371 5827.64 2375.35 5821.88 2384.4 5818.2 c
-2371.28 5810.84 2369 5808.6 2369 5802.68 c
-2369 5797.56 2371.89 5794.52 2378.96 5792.12 c
-2369.04 5789.72 2365.84 5788.44 2362 5785.4 c
-2359.44 5783.16 2358 5779.32 2358 5775.48 c
-2358 5765.08 2369.56 5759 2387.76 5759 c
-2410.32 5759 2426 5768.72 2426 5782.52 c
-2426 5792.28 2419.6 5797.56 2402.16 5802.52 c
-2393.68 5804.92 l
-2388.56 5806.36 2385 5808.6 2385 5811 c
-2385 5813.56 2387.68 5816.28 2390 5816.28 c
-2390.8 5816.28 2391.92 5816.24 2393.2 5816.12 c
-2394.96 5815.64 2396.24 5815 2398.16 5815 c
-2405.2 5815 2412.4 5817.09 2418.48 5820.92 c
-2427.76 5826.2 2433 5834.36 2433 5843.96 c
-2433 5846.64 2432.59 5848.32 2431.76 5851 c
-2442.48 5851 l
-h
-2384.4 5790.04 m
-2386.32 5789.88 2398.48 5785.72 2402 5784.12 c
-2406.48 5781.88 2409 5779.16 2409 5775 c
-2409 5767.96 2401.8 5764 2389.36 5764 c
-2378.96 5764 2372 5769.1 2372 5776.44 c
-2372 5779.48 2373.32 5782.2 2376.24 5785.24 c
-2378.32 5787.32 2383.12 5790.2 2384.4 5790.04 c
-h
-2406.8 5860.08 m
-2410.96 5860.08 2414 5856.19 2414 5850.52 c
-2414 5845.08 2412.08 5837.4 2409.36 5831.48 c
-2406 5824.12 2401.84 5820 2396.88 5820 c
-2392.56 5820 2390 5823.52 2390 5829.88 c
-2390 5836.28 2392.79 5846.04 2396.24 5852.12 c
-2399.28 5857.4 2402.64 5860.08 2406.8 5860.08 c
-h
-2446 5791 m
-f*
-1 i
-1 g
-4222.55 6369.35 m
-4388.15 6520.55 l
-4306.55 6520.55 l
-4306.55 6674.15 l
-4139.75 6674.15 l
-4139.75 6520.55 l
-4058.15 6520.55 l
-f*
-0 g
-4222.55 6369.35 m
-4388.15 6520.55 l
-4306.55 6520.55 l
-4306.55 6674.15 l
-4139.75 6674.15 l
-4139.75 6520.55 l
-4058.15 6520.55 l
-4222.55 6369.35 l
-4222.55 6383.75 l
-4083.35 6510.95 l
-4149.35 6510.95 l
-4149.35 6664.55 l
-4295.75 6664.55 l
-4295.75 6510.95 l
-4361.75 6510.95 l
-4222.55 6383.75 l
-4222.55 6369.35 l
-f*
-0.2 i
-3775.88 6907 m
-3775.88 6902 l
-3788.3 6901.29 3792 6898.45 3792 6889.4 c
-3792 6802.28 l
-3792 6793.1 3789.25 6790.94 3775.88 6789.5 c
-3775.88 6785 l
-3833.84 6785 l
-3864.26 6785 3884 6798.5 3884 6818.84 c
-3884 6827.12 3880.73 6834.32 3874.7 6839.9 c
-3868.4 6845.48 3862.28 6848 3849.68 6850.7 c
-3870.56 6856.82 3878 6864.2 3878 6877.88 c
-3878 6896.42 3861.55 6907 3831.5 6907 c
-h
-3821 6846.74 m
-3825.92 6846.74 l
-3844.46 6846.74 3853 6837.2 3853 6817.22 c
-3853 6799.76 3845.77 6791 3831.5 6791 c
-3823.58 6791 3821 6793.99 3821 6801.74 c
-h
-3821 6892.46 m
-3821 6898.94 3823.39 6902 3830.24 6902 c
-3842.84 6902 3849 6894.03 3849 6876.62 c
-3849 6857.72 3843.08 6852.68 3821 6852.14 c
-h
-3893.06 6785 m
-f*
-3978.14 6796.52 m
-3976.34 6794.72 l
-3975.8 6794.18 3975.26 6794 3974.36 6794 c
-3971.84 6794 3971 6795.44 3971 6798.5 c
-3971 6845.48 l
-3971 6860.78 3957.16 6870.16 3934.94 6870.16 c
-3914.6 6870.16 3900.92 6860.97 3900.92 6847.46 c
-3900.92 6839.9 3905.24 6835.58 3912.62 6835.58 c
-3919.82 6835.58 3924.86 6839.9 3924.86 6846.02 c
-3924.86 6848.54 3923.96 6850.88 3921.62 6853.76 c
-3920 6855.56 3919.46 6856.64 3919.46 6857.72 c
-3919.46 6861.5 3924.32 6864.16 3930.8 6864.16 c
-3941.42 6864.16 3946 6859.37 3946 6848.54 c
-3946 6835.4 l
-3924.89 6828.92 3916.41 6825.68 3909.56 6821.18 c
-3901.46 6815.78 3898 6809.48 3898 6801.56 c
-3898 6790.58 3906.07 6782.48 3917.3 6782.48 c
-3927.74 6782.48 3936.02 6786.08 3945.92 6795.08 c
-3947.9 6785.9 3951.86 6782.48 3960.68 6782.48 c
-3968.42 6782.48 3974 6785.36 3980.84 6792.74 c
-h
-3946 6803 m
-3941.04 6797.42 3937.37 6795.26 3932.96 6795.26 c
-3927.56 6795.26 3924 6800.12 3924 6807.32 c
-3924 6817.76 3931.57 6825.14 3946 6829.1 c
-h
-3983 6785 m
-f*
-4044.22 6843.68 m
-4044.22 6869.8 l
-4040.24 6869.8 l
-4039.16 6867.08 4038.08 6866.2 4035.74 6866.2 c
-4034.66 6866.2 4033.04 6866.55 4030.16 6867.44 c
-4024.4 6869.42 4020.26 6870.16 4016.12 6870.16 c
-3999.74 6870.16 3988 6858.99 3988 6843.86 c
-3988 6831.98 3995.34 6823.7 4013.42 6815.96 c
-4025.84 6810.56 4031 6806.06 4031 6800.3 c
-4031 6793.28 4025.48 6788.48 4017.2 6788.48 c
-4004.6 6788.48 3996.32 6796.62 3992.54 6812.36 c
-3987.5 6812.36 l
-3987.5 6782.66 l
-3992 6782.66 l
-3993.98 6786.44 3995.06 6787.7 3996.68 6787.7 c
-3997.58 6787.7 3999.02 6787.34 4000.82 6786.62 c
-4006.04 6784.46 4015.22 6782.48 4020.26 6782.48 c
-4036.64 6782.48 4048 6793.64 4048 6809.84 c
-4048 6822.62 4041.15 6830.54 4023.14 6837.92 c
-4010.9 6843.14 4006 6847.64 4006 6853.76 c
-4006 6859.7 4010.98 6864.16 4017.74 6864.16 c
-4022.6 6864.16 4027.28 6862.19 4031.24 6858.44 c
-4035.02 6854.84 4037 6851.42 4039.7 6843.68 c
-h
-4053.02 6785 m
-f*
-4124.36 6807.5 m
-4116.98 6798.68 4111.58 6795.48 4103.84 6795.48 c
-4097 6795.48 4091.6 6798.53 4088 6804.62 c
-4084.58 6810.36 4083.14 6816.45 4082.42 6829 c
-4127.78 6829 l
-4126.7 6843.99 4124 6852.3 4118.42 6859.34 c
-4112.66 6866.36 4104.2 6870.16 4094.12 6870.16 c
-4071.62 6870.16 4056.5 6852.33 4056.5 6826.04 c
-4056.5 6799.76 4071.26 6782.48 4093.58 6782.48 c
-4108.16 6782.48 4116.98 6788.06 4128.68 6804.98 c
-h
-4081.52 6836 m
-4082.06 6857.42 4085.3 6864.16 4094.12 6864.16 c
-4099.34 6864.16 4102.58 6861.42 4104.02 6856.1 c
-4104.92 6852.68 4105.28 6847.64 4105.64 6838.46 c
-4105.64 6836 l
-h
-4131.92 6785 m
-f*
-4178 6785 m
-f*
-4281.94 6907 m
-4179.88 6907 l
-4179.88 6902 l
-4192.3 6901.29 4196 6898.63 4196 6889.4 c
-4196 6802.28 l
-4196 6792.92 4193.44 6790.94 4179.88 6789.5 c
-4179.88 6785 l
-4244.68 6785 l
-4244.68 6790 l
-4228.12 6790.69 4225 6792.77 4225 6802.28 c
-4225 6844.22 l
-4243.28 6843.86 4249.91 6837.2 4252.42 6816.32 c
-4256.92 6816.32 l
-4256.92 6877.16 l
-4252.42 6877.16 l
-4249.19 6856.64 4242.92 6850.34 4225 6850.34 c
-4225 6892.1 l
-4225 6898.76 4227.32 6901 4236.4 6901 c
-4253.14 6901 4263.58 6897.8 4269.16 6891.2 c
-4273.12 6886.7 4275.1 6881.84 4277.62 6870.5 c
-4281.94 6870.5 l
-h
-4286.98 6785 m
-f*
-4326.28 6868 m
-4292.22 6868 l
-4292.22 6863.66 l
-4299.96 6862.58 4302 6860.24 4302 6853.04 c
-4302 6800.12 l
-4302 6792.74 4300.19 6790.76 4292.22 6789.32 c
-4292.22 6785 l
-4340.1 6785 l
-4340.1 6789.32 l
-4329.12 6790.04 4327 6792.38 4327 6803.54 c
-4327 6837.56 l
-4327 6846.92 4332.02 6854.66 4337.94 6854.66 c
-4339.38 6854.66 4341 6853.4 4342.98 6850.52 c
-4346.4 6845.66 4349.1 6844.04 4353.78 6844.04 c
-4360.44 6844.04 4365.12 6849.08 4365.12 6855.92 c
-4365.12 6864.2 4359 6870.16 4350.54 6870.16 c
-4341.55 6870.16 4334.73 6865.47 4326.28 6853.22 c
-h
-4366.92 6785 m
-f*
-4453.14 6796.52 m
-4451.34 6794.72 l
-4450.8 6794.18 4450.26 6794 4449.36 6794 c
-4446.84 6794 4446 6795.44 4446 6798.5 c
-4446 6845.48 l
-4446 6860.78 4432.16 6870.16 4409.94 6870.16 c
-4389.6 6870.16 4375.92 6860.97 4375.92 6847.46 c
-4375.92 6839.9 4380.24 6835.58 4387.62 6835.58 c
-4394.82 6835.58 4399.86 6839.9 4399.86 6846.02 c
-4399.86 6848.54 4398.96 6850.88 4396.62 6853.76 c
-4395 6855.56 4394.46 6856.64 4394.46 6857.72 c
-4394.46 6861.5 4399.32 6864.16 4405.8 6864.16 c
-4416.42 6864.16 4421 6859.37 4421 6848.54 c
-4421 6835.4 l
-4399.89 6828.92 4391.41 6825.68 4384.56 6821.18 c
-4376.46 6815.78 4373 6809.48 4373 6801.56 c
-4373 6790.58 4381.07 6782.48 4392.3 6782.48 c
-4402.74 6782.48 4411.02 6786.08 4420.92 6795.08 c
-4422.9 6785.9 4426.86 6782.48 4435.68 6782.48 c
-4443.42 6782.48 4449 6785.36 4455.84 6792.74 c
-h
-4421 6803 m
-4416.04 6797.42 4412.37 6795.26 4407.96 6795.26 c
-4402.56 6795.26 4399 6800.12 4399 6807.32 c
-4399 6817.76 4406.57 6825.14 4421 6829.1 c
-h
-4458 6785 m
-f*
-4495.46 6868 m
-4460.73 6868 l
-4460.73 6863.66 l
-4468.65 6862.58 4471 6860.42 4471 6853.04 c
-4471 6800.12 l
-4471 6792.74 4468.95 6790.76 4460.73 6789.32 c
-4460.73 6785 l
-4503.93 6785 l
-4503.93 6789.32 l
-4497.63 6790.22 4496 6792.74 4496 6799.58 c
-4496 6847.64 l
-4496 6848.54 4498.51 6851.78 4500.51 6853.76 c
-4504.29 6856.64 4507.53 6858.16 4510.77 6858.16 c
-4517.79 6858.16 4521 6854 4521 6843.14 c
-4521 6799.58 l
-4521 6792.2 4518.9 6789.86 4511.85 6789.32 c
-4511.85 6785 l
-4553.97 6785 l
-4553.97 6789.32 l
-4547.67 6790.04 4546 6792.74 4546 6799.58 c
-4546 6847.64 l
-4546 6848.54 4548.43 6851.6 4550.37 6853.58 c
-4554.33 6856.64 4557.57 6858.16 4560.81 6858.16 c
-4567.65 6858.16 4570 6853.82 4570 6843.14 c
-4570 6799.58 l
-4570 6792.02 4568.1 6789.86 4561.53 6789.32 c
-4561.53 6785 l
-4604.37 6785 l
-4604.37 6789 l
-4597.35 6789.37 4595 6791.6 4595 6799.58 c
-4595 6844.76 l
-4595 6860.24 4585.6 6870.16 4571.07 6870.16 c
-4560.81 6870.16 4553.97 6866.01 4544.61 6854.48 c
-4539.21 6865.82 4532.91 6870.16 4521.57 6870.16 c
-4510.2 6870.16 4502.21 6865.29 4495.46 6854.48 c
-h
-4607.94 6785 m
-f*
-4680.36 6807.5 m
-4672.98 6798.68 4667.58 6795.48 4659.84 6795.48 c
-4653 6795.48 4647.6 6798.53 4644 6804.62 c
-4640.58 6810.36 4639.14 6816.45 4638.42 6829 c
-4683.78 6829 l
-4682.7 6843.99 4680 6852.3 4674.42 6859.34 c
-4668.66 6866.36 4660.2 6870.16 4650.12 6870.16 c
-4627.62 6870.16 4612.5 6852.33 4612.5 6826.04 c
-4612.5 6799.76 4627.26 6782.48 4649.58 6782.48 c
-4664.16 6782.48 4672.98 6788.06 4684.68 6804.98 c
-h
-4637.52 6836 m
-4638.06 6857.42 4641.3 6864.16 4650.12 6864.16 c
-4655.34 6864.16 4658.58 6861.42 4660.02 6856.1 c
-4660.92 6852.68 4661.28 6847.64 4661.64 6838.46 c
-4661.64 6836 l
-h
-4687.92 6785 m
-f*
-1 i
-3772.55 6749.75 914.4 15.5999 re
-f
-0.2 i
-2678.88 4570.52 m
-2643.78 4570.52 2619 4545.21 2619 4509.12 c
-2619 4472.04 2642.99 4446.48 2677.98 4446.48 c
-2712.54 4446.48 2737 4472.04 2737 4508.58 c
-2737 4524.96 2731.9 4539.9 2722.98 4550.34 c
-2712.18 4563.12 2695.8 4570.52 2678.88 4570.52 c
-h
-2677.44 4563.52 m
-2685.9 4563.52 2693.46 4561.05 2699.94 4556.1 c
-2710.2 4547.46 2716 4530.18 2716 4509.66 c
-2716 4488.06 2711.25 4472.4 2701.56 4462.5 c
-2695.44 4456.38 2687.16 4453.48 2678.16 4453.48 c
-2669.88 4453.48 2662.14 4456.01 2655.84 4461.06 c
-2645.76 4469.34 2640 4487.34 2640 4508.76 c
-2640 4525.86 2644.54 4542.96 2651.34 4551.6 c
-2658 4559.52 2667.72 4563.52 2677.44 4563.52 c
-h
-2742.96 4449 m
-f*
-2746.42 4561.14 m
-2747.5 4561.14 l
-2749.48 4561.32 2751.64 4561.5 2753.08 4561.5 c
-2758.84 4561.5 2761 4558.98 2761 4550.52 c
-2761 4464.66 l
-2761 4454.94 2758.41 4452.6 2746.78 4451.7 c
-2746.78 4449 l
-2789.26 4449 l
-2789.26 4452 l
-2777.74 4452.7 2776 4454.46 2776 4464.12 c
-2776 4571.58 l
-2775.04 4571.94 l
-2765.68 4568.88 2758.84 4567.08 2746.42 4564.02 c
-h
-2793.04 4449 m
-f*
-2854.92 4447.2 m
-2881.38 4456.56 l
-2881.38 4460 l
-2878.32 4459.26 2878.14 4459.82 2877.24 4459.82 c
-2870.76 4459.82 2869 4461.69 2869 4469.52 c
-2869 4571.58 l
-2868.42 4571.94 l
-2859.78 4568.88 2853.48 4567.08 2841.96 4564.02 c
-2841.96 4561.14 l
-2843.4 4561.32 2844.48 4561.32 2845.92 4561.32 c
-2852.58 4561.32 2854 4559.52 2854 4552.14 c
-2854 4524.06 l
-2847.23 4529.82 2842.42 4531.8 2835.3 4531.8 c
-2814.6 4531.8 2798 4511.46 2798 4485.9 c
-2798 4462.86 2811.26 4447.2 2831.16 4447.2 c
-2841.15 4447.2 2847.93 4450.8 2854 4459.26 c
-2854 4447.74 l
-h
-2854 4467.36 m
-2854 4466.1 2853 4464.12 2851.5 4462.32 c
-2848.26 4458.54 2843.76 4456.2 2838.18 4456.2 c
-2823.06 4456.2 2813 4470.74 2813 4493.1 c
-2813 4513.44 2821.95 4526.8 2835.84 4526.8 c
-2845.56 4526.8 2854 4518.32 2854 4508.76 c
-h
-2883 4449 m
-f*
-2928 4449 m
-f*
-3040.6 4530 m
-3038.98 4570.52 l
-3035.2 4570.52 l
-3034.12 4566.84 3031.24 4564.58 3027.82 4564.58 c
-3026.02 4564.58 3023.5 4565.17 3020.62 4566.36 c
-3011.8 4569.24 3002.98 4570.52 2994.16 4570.52 c
-2980.3 4570.52 2966.08 4565.36 2955.1 4556.46 c
-2941.42 4545.12 2934 4528.02 2934 4507.5 c
-2934 4470.96 2957.96 4446.48 2993.8 4446.48 c
-3014.14 4446.48 3031.96 4454.76 3042.94 4469.34 c
-3039.7 4472.58 l
-3026.38 4459.8 3014.5 4454.48 2999.56 4454.48 c
-2988.76 4454.48 2979.04 4457.69 2971.48 4463.94 c
-2960.86 4472.76 2955 4488.96 2955 4509.84 c
-2955 4542.42 2971.71 4563.52 2997.76 4563.52 c
-3008.2 4563.52 3017.38 4559.73 3024.58 4552.5 c
-3030.34 4546.74 3033.04 4541.7 3036.46 4530 c
-h
-3049.06 4449 m
-f*
-3135.22 4458 m
-3134.32 4458 l
-3126.04 4458 3124 4459.98 3124 4468.26 c
-3124 4530 l
-3095.62 4530 l
-3095.62 4527 l
-3106.78 4526.46 3109 4524.65 3109 4515.6 c
-3109 4473.3 l
-3109 4468.44 3108.08 4465.74 3105.88 4464.12 c
-3100.84 4459.8 3095.26 4457.2 3089.68 4457.2 c
-3082.66 4457.2 3077 4463.52 3077 4471.32 c
-3077 4530 l
-3050.62 4530 l
-3050.62 4527.48 l
-3059.26 4526.94 3062 4524.24 3062 4515.96 c
-3062 4470.6 l
-3062 4456.38 3070.55 4447.2 3083.56 4447.2 c
-3090.22 4447.2 3097.24 4450.08 3102.1 4454.94 c
-3109.9 4462.68 l
-3109.9 4447.74 l
-3110.56 4447.38 l
-3119.56 4450.98 3126.04 4452.96 3135.22 4455.48 c
-h
-3139 4449 m
-f*
-3140.26 4519.2 m
-3142.78 4519.74 3144.4 4519.92 3146.56 4519.92 c
-3151.06 4519.92 3153 4517.04 3153 4509.12 c
-3153 4464.12 l
-3153 4455.12 3151.71 4453.86 3139.9 4451.7 c
-3139.9 4449 l
-3183.1 4449 l
-3183.1 4452 l
-3170.86 4452.53 3168 4455.17 3168 4465.2 c
-3168 4505.7 l
-3168 4511.46 3175.44 4520.46 3180.4 4520.46 c
-3181.48 4520.46 3183.1 4519.56 3185.08 4517.76 c
-3187.96 4515.06 3189.94 4514.16 3192.28 4514.16 c
-3196.6 4514.16 3199.3 4517.22 3199.3 4522.26 c
-3199.3 4528.2 3195.52 4531.8 3189.4 4531.8 c
-3181.91 4531.8 3176.92 4527.84 3168 4514.88 c
-3168 4531.44 l
-3166.9 4531.8 l
-3157.36 4528.02 3150.88 4525.5 3140.26 4522.08 c
-h
-3198.94 4449 m
-f*
-3200.26 4519.2 m
-3202.78 4519.74 3204.4 4519.92 3206.56 4519.92 c
-3211.06 4519.92 3213 4517.04 3213 4509.12 c
-3213 4464.12 l
-3213 4455.12 3211.71 4453.86 3199.9 4451.7 c
-3199.9 4449 l
-3243.1 4449 l
-3243.1 4452 l
-3230.86 4452.53 3228 4455.17 3228 4465.2 c
-3228 4505.7 l
-3228 4511.46 3235.44 4520.46 3240.4 4520.46 c
-3241.48 4520.46 3243.1 4519.56 3245.08 4517.76 c
-3247.96 4515.06 3249.94 4514.16 3252.28 4514.16 c
-3256.6 4514.16 3259.3 4517.22 3259.3 4522.26 c
-3259.3 4528.2 3255.52 4531.8 3249.4 4531.8 c
-3241.91 4531.8 3236.92 4527.84 3228 4514.88 c
-3228 4531.44 l
-3226.9 4531.8 l
-3217.36 4528.02 3210.88 4525.5 3200.26 4522.08 c
-h
-3258.94 4449 m
-f*
-3332.44 4478.52 m
-3323.8 4464.84 3316.06 4459.2 3304.54 4459.2 c
-3294.64 4459.2 3287.08 4464.02 3281.86 4474.02 c
-3278.26 4481.08 3276.82 4487.42 3276.46 4499 c
-3331.9 4499 l
-3330.46 4510.63 3328.66 4515.82 3324.16 4521.54 c
-3318.76 4528.02 3310.48 4531.8 3301.12 4531.8 c
-3278.8 4531.8 3263.5 4513.8 3263.5 4487.52 c
-3263.5 4462.68 3276.46 4447.2 3297.16 4447.2 c
-3314.44 4447.2 3327.76 4457.82 3335.32 4477.26 c
-h
-3276.82 4504 m
-3278.8 4518.66 3284.92 4524.8 3295.9 4524.8 c
-3306.88 4524.8 3311.2 4519.74 3313.54 4504 c
-h
-3338.92 4449 m
-f*
-3340.88 4520.64 m
-3342.14 4521.18 3343.76 4521.36 3345.74 4521.36 c
-3350.78 4521.36 3352 4518.66 3352 4509.84 c
-3352 4465.2 l
-3352 4454.94 3350.09 4452.42 3341.24 4451.7 c
-3341.24 4449 l
-3379.4 4449 l
-3379.4 4451.7 l
-3370.22 4452.42 3367 4454.58 3367 4461.06 c
-3367 4511.64 l
-3375.7 4519.74 3379.95 4521.8 3386.06 4521.8 c
-3394.88 4521.8 3399 4516.25 3399 4504.44 c
-3399 4466.82 l
-3399 4455.48 3396.7 4452.42 3387.86 4451.7 c
-3387.86 4449 l
-3425.3 4449 l
-3425.3 4451.7 l
-3416.48 4452.6 3414 4454.76 3414 4463.58 c
-3414 4504.8 l
-3414 4521.72 3406.2 4531.8 3393.08 4531.8 c
-3384.64 4531.8 3378.94 4528.74 3366.46 4517.22 c
-3366.46 4531.44 l
-3365.72 4531.8 l
-3356.9 4528.56 3350.78 4526.58 3340.88 4523.7 c
-h
-3428 4449 m
-f*
-3474 4530 m
-3456 4530 l
-3456 4550.88 l
-3456 4552.68 3455.56 4553.22 3454.46 4553.22 c
-3453.38 4551.42 3452.12 4549.8 3450.86 4548.18 c
-3444.2 4538.28 3438.08 4531.62 3433.4 4528.92 c
-3431.42 4527.66 3430 4526.58 3430 4525.5 c
-3430 4525.29 3430.26 4525.14 3431.06 4525 c
-3441 4525 l
-3441 4470.06 l
-3441 4454.94 3446.26 4447.2 3456.44 4447.2 c
-3465.44 4447.2 3472.28 4451.52 3478.22 4460.88 c
-3475.88 4462.86 l
-3471.92 4458.18 3469.04 4456.2 3465.08 4456.2 c
-3458.42 4456.2 3456 4460.98 3456 4472.76 c
-3456 4525 l
-3474 4525 l
-h
-3478.04 4449 m
-f*
-3524 4449 m
-f*
-3609.22 4490.58 m
-3609.22 4532.34 l
-3605.08 4532.34 l
-3602.92 4517.94 3599.68 4515 3585.28 4515 c
-3560 4515 l
-3560 4555.2 l
-3560 4560.24 3560.77 4561 3564.94 4561 c
-3589.42 4561 l
-3609.76 4561 3613.72 4558.35 3616.78 4542.42 c
-3621.28 4542.42 l
-3620.74 4568 l
-3525.16 4568 l
-3525.16 4564.74 l
-3538.48 4563.66 3541 4561.32 3541 4548.54 c
-3541 4470.6 l
-3541 4455.66 3539 4453.32 3525.16 4452.42 c
-3525.16 4449 l
-3575.56 4449 l
-3575.56 4452 l
-3561.7 4452.74 3560 4455.32 3560 4468.62 c
-3560 4508 l
-3585.28 4508 l
-3599.86 4508 3602.92 4505.28 3605.08 4490.58 c
-h
-3623.08 4449 m
-f*
-3625.26 4519.2 m
-3627.78 4519.74 3629.4 4519.92 3631.56 4519.92 c
-3636.06 4519.92 3638 4517.04 3638 4509.12 c
-3638 4464.12 l
-3638 4455.12 3636.71 4453.86 3624.9 4451.7 c
-3624.9 4449 l
-3668.1 4449 l
-3668.1 4452 l
-3655.86 4452.53 3653 4455.17 3653 4465.2 c
-3653 4505.7 l
-3653 4511.46 3660.44 4520.46 3665.4 4520.46 c
-3666.48 4520.46 3668.1 4519.56 3670.08 4517.76 c
-3672.96 4515.06 3674.94 4514.16 3677.28 4514.16 c
-3681.6 4514.16 3684.3 4517.22 3684.3 4522.26 c
-3684.3 4528.2 3680.52 4531.8 3674.4 4531.8 c
-3666.91 4531.8 3661.92 4527.84 3653 4514.88 c
-3653 4531.44 l
-3651.9 4531.8 l
-3642.36 4528.02 3635.88 4525.5 3625.26 4522.08 c
-h
-3683.94 4449 m
-f*
-3763.56 4460.88 m
-3760.5 4458.36 3758.34 4457.2 3755.64 4457.2 c
-3751.5 4457.2 3750 4459.78 3750 4467.9 c
-3750 4503 l
-3750 4512.18 3749.16 4517.22 3746.82 4521.36 c
-3743.04 4528.2 3735.3 4531.8 3724.32 4531.8 c
-3715.14 4531.8 3706.5 4529.28 3701.46 4525.14 c
-3696.96 4521.36 3694 4516.14 3694 4511.64 c
-3694 4507.5 3697.46 4503.9 3701.82 4503.9 c
-3706.14 4503.9 3709.92 4507.5 3709.92 4511.46 c
-3709.92 4512.18 3709.74 4513.08 3709.56 4514.34 c
-3709.2 4515.96 3709 4517.4 3709 4518.66 c
-3709 4523.52 3714.77 4527.8 3721.98 4527.8 c
-3730.8 4527.8 3735 4522.47 3735 4512.54 c
-3735 4501.56 l
-3707.76 4490.4 3704.75 4488.96 3697.14 4482.12 c
-3693.18 4478.52 3690.66 4472.4 3690.66 4466.46 c
-3690.66 4455.12 3698.4 4447.2 3709.56 4447.2 c
-3717.48 4447.2 3724.86 4450.98 3735.84 4460.34 c
-3736.74 4450.8 3739.98 4447.2 3747.36 4447.2 c
-3753.48 4447.2 3757.26 4449.36 3763.56 4456.2 c
-h
-3735 4471.14 m
-3735 4465.56 3734.23 4463.94 3730.98 4461.6 c
-3726.66 4459.08 3721.62 4457.2 3717.84 4457.2 c
-3711.54 4457.2 3706.48 4463.51 3706.48 4471.5 c
-3706.48 4472.22 l
-3706.48 4482.84 3713.7 4489.32 3735 4497.24 c
-h
-3763.92 4449 m
-f*
-3766.14 4520.64 m
-3768.48 4521.18 3769.92 4521.36 3771.9 4521.36 c
-3776.58 4521.36 3778 4518.48 3778 4509.84 c
-3778 4464.3 l
-3778 4454.58 3775.52 4451.88 3765.6 4451.7 c
-3765.6 4449 l
-3805.56 4449 l
-3805.56 4452 l
-3796.02 4452.35 3793 4454.27 3793 4461.06 c
-3793 4511.82 l
-3793 4512.18 3794.23 4513.44 3795.66 4514.88 c
-3799.98 4519.2 3808.08 4522.8 3814.74 4522.8 c
-3822.48 4522.8 3827 4516.2 3827 4503.54 c
-3827 4464.48 l
-3827 4454.4 3824.93 4452.42 3814.2 4451.7 c
-3814.2 4449 l
-3854.52 4449 l
-3854.52 4452 l
-3844.26 4452.18 3842 4455.17 3842 4466.1 c
-3842 4511.46 l
-3847.28 4519.2 3852.91 4522.8 3861.18 4522.8 c
-3871.44 4522.8 3875 4517.85 3875 4502.64 c
-3875 4464.66 l
-3875 4454.4 3873.52 4452.96 3862.8 4451.7 c
-3862.8 4449 l
-3902.22 4449 l
-3902.22 4451.7 l
-3897.54 4452.06 l
-3892.14 4452.42 3890 4455.66 3890 4462.68 c
-3890 4499.76 l
-3890 4521 3882.91 4531.8 3868.92 4531.8 c
-3858.48 4531.8 3849.3 4527.12 3839.58 4516.68 c
-3836.34 4526.94 3830.22 4531.8 3820.5 4531.8 c
-3812.31 4531.8 3807.57 4529.46 3792.28 4517.94 c
-3792.28 4531.44 l
-3791.34 4531.8 l
-3782.16 4528.38 3776.04 4526.4 3766.14 4523.7 c
-h
-3903.04 4449 m
-f*
-3976.44 4478.52 m
-3967.8 4464.84 3960.06 4459.2 3948.54 4459.2 c
-3938.64 4459.2 3931.08 4464.02 3925.86 4474.02 c
-3922.26 4481.08 3920.82 4487.42 3920.46 4499 c
-3975.9 4499 l
-3974.46 4510.63 3972.66 4515.82 3968.16 4521.54 c
-3962.76 4528.02 3954.48 4531.8 3945.12 4531.8 c
-3922.8 4531.8 3907.5 4513.8 3907.5 4487.52 c
-3907.5 4462.68 3920.46 4447.2 3941.16 4447.2 c
-3958.44 4447.2 3971.76 4457.82 3979.32 4477.26 c
-h
-3920.82 4504 m
-3922.8 4518.66 3928.92 4524.8 3939.9 4524.8 c
-3950.88 4524.8 3955.2 4519.74 3957.54 4504 c
-h
-3982.92 4449 m
-f*
-1 i
-1 g
-3311.75 4641.35 m
-3478.55 4792.55 l
-3395.75 4792.55 l
-3395.75 4946.15 l
-3230.15 4946.15 l
-3230.15 4792.55 l
-3148.55 4792.55 l
-f*
-0 g
-3311.75 4641.35 m
-3478.55 4792.55 l
-3395.75 4792.55 l
-3395.75 4946.15 l
-3230.15 4946.15 l
-3230.15 4792.55 l
-3148.55 4792.55 l
-3311.75 4641.35 l
-3311.75 4654.55 l
-3173.75 4781.75 l
-3239.75 4781.75 l
-3239.75 4936.55 l
-3386.15 4936.55 l
-3386.15 4781.75 l
-3452.15 4781.75 l
-3311.75 4654.55 l
-3311.75 4641.35 l
-f*
-0.564706 g
-2322.95 3735.35 m
-2322.95 3845.75 2231.75 3936.95 2120.15 3936.95 c
-1623.35 3936.95 l
-1511.75 3936.95 1420.55 3845.75 1420.55 3735.35 c
-1420.55 3597.35 l
-1420.55 3486.95 1511.75 3395.75 1623.35 3395.75 c
-2120.15 3395.75 l
-2231.75 3395.75 2322.95 3486.95 2322.95 3597.35 c
-f*
-1 g
-2258.15 3792.95 m
-2258.15 3902.15 2169.35 3990.95 2057.75 3990.95 c
-1566.95 3990.95 l
-1456.55 3990.95 1366.55 3902.15 1366.55 3792.95 c
-1366.55 3658.55 l
-1366.55 3549.35 1455.35 3460.55 1566.95 3460.55 c
-2057.75 3460.55 l
-2169.35 3460.55 2258.15 3549.35 2258.15 3658.55 c
-f*
-0 g
-2258.15 3792.95 m
-2258.15 3902.15 2169.35 3990.95 2057.75 3990.95 c
-1566.95 3990.95 l
-1456.55 3990.95 1366.55 3902.15 1366.55 3792.95 c
-1366.55 3658.55 l
-1366.55 3549.35 1455.35 3460.55 1566.95 3460.55 c
-2057.75 3460.55 l
-2169.35 3460.55 2258.15 3549.35 2258.15 3658.55 c
-h
-S
-0.201248 i
-1599.33 3832 m
-1485.22 3832 l
-1485.22 3827 l
-1499.11 3826.2 1503 3823.18 1503 3812.72 c
-1503 3715.32 l
-1503 3704.85 1500.17 3702.64 1485.22 3701.03 c
-1485.22 3696 l
-1557.67 3696 l
-1557.67 3701 l
-1539.15 3701.81 1536 3704.23 1536 3715.32 c
-1536 3762.21 l
-1556.22 3761.81 1563.55 3754.36 1566.32 3731.02 c
-1571.35 3731.02 l
-1571.35 3799.04 l
-1566.32 3799.04 l
-1562.76 3776.1 1555.82 3769.05 1536 3769.05 c
-1536 3815.74 l
-1536 3823.19 1538.52 3825 1548.41 3825 c
-1567.13 3825 1578.8 3821.64 1585.04 3814.74 c
-1589.47 3809.71 1591.68 3804.27 1594.5 3791.59 c
-1599.33 3791.59 l
-h
-1604.96 3696 m
-f*
-1649.19 3789 m
-1610.84 3789 l
-1610.84 3783.95 l
-1619.49 3782.74 1622 3780.12 1622 3772.07 c
-1622 3712.9 l
-1622 3704.65 1619.93 3702.44 1610.84 3700.83 c
-1610.84 3696 l
-1664.37 3696 l
-1664.37 3700.83 l
-1652.09 3701.63 1650 3704.25 1650 3716.73 c
-1650 3754.76 l
-1650 3765.23 1655.49 3773.88 1661.95 3773.88 c
-1663.56 3773.88 1665.37 3772.47 1667.59 3769.25 c
-1671.41 3763.82 1674.43 3762.01 1679.66 3762.01 c
-1687.11 3762.01 1692.34 3767.64 1692.34 3775.29 c
-1692.34 3784.55 1685.5 3791.41 1676.04 3791.41 c
-1666.1 3791.41 1658.54 3786.12 1649.19 3772.27 c
-h
-1694.35 3696 m
-f*
-1789.19 3708.88 m
-1787.18 3706.87 l
-1786.57 3706.26 1785.97 3706.06 1784.96 3706.06 c
-1782.15 3706.06 1781 3707.67 1781 3711.09 c
-1781 3763.62 l
-1781 3780.73 1765.6 3791.42 1740.89 3791.42 c
-1718.15 3791.42 1702.85 3781.06 1702.85 3765.83 c
-1702.85 3757.38 1707.69 3752.55 1715.94 3752.55 c
-1723.99 3752.55 1729.62 3757.38 1729.62 3764.22 c
-1729.62 3767.04 1728.61 3769.66 1726 3772.88 c
-1724.19 3774.89 1723.58 3776.1 1723.58 3777.3 c
-1723.58 3781.53 1729.02 3784.42 1736.26 3784.42 c
-1748.14 3784.42 1753.86 3779.08 1753.86 3767.04 c
-1753.86 3752.35 l
-1729.91 3745.1 1720.29 3741.48 1712.51 3736.45 c
-1703.46 3730.41 1699 3723.37 1699 3714.52 c
-1699 3702.24 1708.27 3693.18 1721.17 3693.18 c
-1732.84 3693.18 1742.1 3697.21 1753.17 3707.27 c
-1755.38 3697.01 1759.81 3693.18 1769.67 3693.18 c
-1778.32 3693.18 1784.56 3696.4 1792.21 3704.65 c
-h
-1753 3716.13 m
-1747.55 3709.89 1743.52 3707.47 1738.68 3707.47 c
-1732.64 3707.47 1728 3712.91 1728 3720.96 c
-1728 3732.63 1736.61 3740.88 1753 3745.31 c
-h
-1794.62 3696 m
-f*
-1836.4 3789 m
-1797.7 3789 l
-1797.7 3783.95 l
-1806.55 3782.74 1809 3780.32 1809 3772.07 c
-1809 3712.9 l
-1809 3704.65 1806.74 3702.44 1797.7 3700.83 c
-1797.7 3696 l
-1846 3696 l
-1846 3700.83 l
-1838.95 3701.84 1837 3704.65 1837 3712.3 c
-1837 3766.03 l
-1837 3767.04 1839.87 3770.66 1842.18 3772.88 c
-1846.4 3776.1 1850.02 3778.42 1853.65 3778.42 c
-1861.5 3778.42 1865 3773.59 1865 3761 c
-1865 3712.3 l
-1865 3704.05 1862.68 3701.43 1854.85 3700.83 c
-1854.85 3696 l
-1901.95 3696 l
-1901.95 3700.83 l
-1894.9 3701.64 1893 3704.65 1893 3712.3 c
-1893 3766.03 l
-1893 3767.04 1895.73 3770.46 1897.92 3772.68 c
-1902.35 3776.1 1905.97 3778.42 1909.59 3778.42 c
-1917.24 3778.42 1920 3773.38 1920 3761 c
-1920 3712.3 l
-1920 3703.85 1917.85 3701.43 1910.4 3700.83 c
-1910.4 3696 l
-1958.3 3696 l
-1958.3 3701 l
-1950.45 3701.4 1948 3703.78 1948 3712.3 c
-1948 3762.81 l
-1948 3780.12 1937.43 3791.42 1921.07 3791.42 c
-1909.59 3791.42 1901.95 3786.73 1891.48 3773.68 c
-1885.44 3786.36 1878.4 3791.42 1865.72 3791.42 c
-1852.95 3791.42 1843.98 3785.91 1836.4 3773.68 c
-h
-1961.64 3696 m
-f*
-2039.9 3721.16 m
-2031.65 3711.29 2025.61 3707.18 2016.96 3707.18 c
-2009.31 3707.18 2003.27 3710.77 1999.25 3717.94 c
-1995.43 3724.54 1993.82 3731.56 1993.01 3746 c
-2043.73 3746 l
-2042.52 3762.36 2039.5 3771.43 2033.26 3779.12 c
-2026.82 3786.96 2017.36 3791.42 2006.09 3791.42 c
-1980.94 3791.42 1964.03 3771.4 1964.03 3741.88 c
-1964.03 3712.5 1980.53 3693.18 2005.49 3693.18 c
-2021.79 3693.18 2031.65 3699.42 2044.73 3718.34 c
-h
-1992 3753 m
-1992.61 3776.96 1996.23 3784.42 2006.09 3784.42 c
-2011.93 3784.42 2015.55 3781.38 2017.16 3775.49 c
-2018.17 3771.67 2018.57 3766.03 2018.97 3755.77 c
-2018.97 3753 l
-h
-2048.35 3696 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2092 -3696]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4782.95 2934.95 m
-4782.95 3046.55 4691.75 3137.75 4580.15 3137.75 c
-4083.35 3137.75 l
-3971.75 3137.75 3880.55 3046.55 3880.55 2934.95 c
-3880.55 2798.15 l
-3880.55 2686.55 3971.75 2595.35 4083.35 2595.35 c
-4580.15 2595.35 l
-4691.75 2595.35 4782.95 2686.55 4782.95 2798.15 c
-f*
-1 g
-4718.15 2992.55 m
-4718.15 3102.95 4629.35 3191.75 4517.75 3191.75 c
-4026.95 3191.75 l
-3916.55 3191.75 3826.55 3102.95 3826.55 2992.55 c
-3826.55 2859.35 l
-3826.55 2748.95 3915.35 2660.15 4026.95 2660.15 c
-4517.75 2660.15 l
-4629.35 2660.15 4718.15 2748.95 4718.15 2859.35 c
-f*
-0 g
-4718.15 2992.55 m
-4718.15 3102.95 4629.35 3191.75 4517.75 3191.75 c
-4026.95 3191.75 l
-3916.55 3191.75 3826.55 3102.95 3826.55 2992.55 c
-3826.55 2859.35 l
-3826.55 2748.95 3915.35 2660.15 4026.95 2660.15 c
-4517.75 2660.15 l
-4629.35 2660.15 4718.15 2748.95 4718.15 2859.35 c
-h
-S
-0.201248 i
-4059.33 3033 m
-3945.22 3033 l
-3945.22 3028 l
-3959.11 3027.2 3963 3024.18 3963 3013.72 c
-3963 2916.32 l
-3963 2905.85 3960.17 2903.64 3945.22 2902.03 c
-3945.22 2897 l
-4017.67 2897 l
-4017.67 2902 l
-3999.15 2902.81 3996 2905.23 3996 2916.32 c
-3996 2963.21 l
-4016.22 2962.81 4023.55 2955.36 4026.32 2932.02 c
-4031.35 2932.02 l
-4031.35 3000.04 l
-4026.32 3000.04 l
-4022.76 2977.1 4015.82 2970.05 3996 2970.05 c
-3996 3016.74 l
-3996 3024.19 3998.52 3026 4008.41 3026 c
-4027.13 3026 4038.8 3022.64 4045.04 3015.74 c
-4049.47 3010.71 4051.68 3005.27 4054.5 2992.59 c
-4059.33 2992.59 l
-h
-4064.96 2897 m
-f*
-4109.19 2990 m
-4070.84 2990 l
-4070.84 2984.95 l
-4079.49 2983.74 4082 2981.12 4082 2973.07 c
-4082 2913.9 l
-4082 2905.65 4079.93 2903.44 4070.84 2901.83 c
-4070.84 2897 l
-4124.37 2897 l
-4124.37 2901.83 l
-4112.09 2902.63 4110 2905.25 4110 2917.73 c
-4110 2955.76 l
-4110 2966.23 4115.49 2974.88 4121.95 2974.88 c
-4123.56 2974.88 4125.37 2973.47 4127.59 2970.25 c
-4131.41 2964.82 4134.43 2963.01 4139.66 2963.01 c
-4147.11 2963.01 4152.34 2968.64 4152.34 2976.29 c
-4152.34 2985.55 4145.5 2992.41 4136.04 2992.41 c
-4126.1 2992.41 4118.54 2987.12 4109.19 2973.27 c
-h
-4154.35 2897 m
-f*
-4249.19 2909.88 m
-4247.18 2907.87 l
-4246.57 2907.26 4245.97 2907.06 4244.96 2907.06 c
-4242.15 2907.06 4241 2908.67 4241 2912.09 c
-4241 2964.62 l
-4241 2981.73 4225.6 2992.42 4200.89 2992.42 c
-4178.15 2992.42 4162.85 2982.06 4162.85 2966.83 c
-4162.85 2958.38 4167.69 2953.55 4175.94 2953.55 c
-4183.99 2953.55 4189.62 2958.38 4189.62 2965.22 c
-4189.62 2968.04 4188.61 2970.66 4186 2973.88 c
-4184.19 2975.89 4183.58 2977.1 4183.58 2978.3 c
-4183.58 2982.53 4189.02 2985.42 4196.26 2985.42 c
-4208.14 2985.42 4213.86 2980.08 4213.86 2968.04 c
-4213.86 2953.35 l
-4189.91 2946.1 4180.29 2942.48 4172.51 2937.45 c
-4163.46 2931.41 4159 2924.37 4159 2915.52 c
-4159 2903.24 4168.27 2894.18 4181.17 2894.18 c
-4192.84 2894.18 4202.1 2898.21 4213.17 2908.27 c
-4215.38 2898.01 4219.81 2894.18 4229.67 2894.18 c
-4238.32 2894.18 4244.56 2897.4 4252.21 2905.65 c
-h
-4213 2917.13 m
-4207.55 2910.89 4203.52 2908.47 4198.68 2908.47 c
-4192.64 2908.47 4188 2913.91 4188 2921.96 c
-4188 2933.63 4196.61 2941.88 4213 2946.31 c
-h
-4254.62 2897 m
-f*
-4296.4 2990 m
-4257.7 2990 l
-4257.7 2984.95 l
-4266.55 2983.74 4269 2981.32 4269 2973.07 c
-4269 2913.9 l
-4269 2905.65 4266.74 2903.44 4257.7 2901.83 c
-4257.7 2897 l
-4306 2897 l
-4306 2901.83 l
-4298.95 2902.84 4297 2905.65 4297 2913.3 c
-4297 2967.03 l
-4297 2968.04 4299.87 2971.66 4302.18 2973.88 c
-4306.4 2977.1 4310.02 2979.42 4313.65 2979.42 c
-4321.5 2979.42 4325 2974.59 4325 2962 c
-4325 2913.3 l
-4325 2905.05 4322.68 2902.43 4314.85 2901.83 c
-4314.85 2897 l
-4361.95 2897 l
-4361.95 2901.83 l
-4354.9 2902.64 4353 2905.65 4353 2913.3 c
-4353 2967.03 l
-4353 2968.04 4355.73 2971.46 4357.92 2973.68 c
-4362.35 2977.1 4365.97 2979.42 4369.59 2979.42 c
-4377.24 2979.42 4380 2974.38 4380 2962 c
-4380 2913.3 l
-4380 2904.85 4377.85 2902.43 4370.4 2901.83 c
-4370.4 2897 l
-4418.3 2897 l
-4418.3 2902 l
-4410.45 2902.4 4408 2904.78 4408 2913.3 c
-4408 2963.81 l
-4408 2981.12 4397.43 2992.42 4381.07 2992.42 c
-4369.59 2992.42 4361.95 2987.73 4351.48 2974.68 c
-4345.44 2987.36 4338.4 2992.42 4325.72 2992.42 c
-4312.95 2992.42 4303.98 2986.91 4296.4 2974.68 c
-h
-4421.64 2897 m
-f*
-4499.9 2922.16 m
-4491.65 2912.29 4485.61 2908.18 4476.96 2908.18 c
-4469.31 2908.18 4463.27 2911.77 4459.25 2918.94 c
-4455.43 2925.54 4453.82 2932.56 4453.01 2947 c
-4503.73 2947 l
-4502.52 2963.36 4499.5 2972.43 4493.26 2980.12 c
-4486.82 2987.96 4477.36 2992.42 4466.09 2992.42 c
-4440.94 2992.42 4424.03 2972.4 4424.03 2942.88 c
-4424.03 2913.5 4440.53 2894.18 4465.49 2894.18 c
-4481.79 2894.18 4491.65 2900.42 4504.73 2919.34 c
-h
-4452 2954 m
-4452.61 2977.96 4456.23 2985.42 4466.09 2985.42 c
-4471.93 2985.42 4475.55 2982.38 4477.16 2976.49 c
-4478.17 2972.67 4478.57 2967.03 4478.97 2956.77 c
-4478.97 2954 l
-h
-4508.35 2897 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4544 -2895]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3864.95 2228.15 m
-3864.95 2338.55 3773.75 2429.75 3662.15 2429.75 c
-3166.55 2429.75 l
-3054.95 2429.75 2963.75 2338.55 2963.75 2228.15 c
-2963.75 2090.15 l
-2963.75 1979.75 3054.95 1888.55 3166.55 1888.55 c
-3662.15 1888.55 l
-3773.75 1888.55 3864.95 1979.75 3864.95 2090.15 c
-f*
-1 g
-3795.35 2284.55 m
-3795.35 2391.35 3706.55 2478.95 3597.35 2478.95 c
-3112.55 2478.95 l
-3003.35 2478.95 2914.55 2391.35 2914.55 2284.55 c
-2914.55 2152.55 l
-2914.55 2045.75 3003.35 1958.15 3112.55 1958.15 c
-3597.35 1958.15 l
-3706.55 1958.15 3795.35 2045.75 3795.35 2152.55 c
-f*
-16 w
-0 g
-3795.35 2284.55 m
-3795.35 2391.35 3706.55 2478.95 3597.35 2478.95 c
-3112.55 2478.95 l
-3003.35 2478.95 2914.55 2391.35 2914.55 2284.55 c
-2914.55 2152.55 l
-2914.55 2045.75 3003.35 1958.15 3112.55 1958.15 c
-3597.35 1958.15 l
-3706.55 1958.15 3795.35 2045.75 3795.35 2152.55 c
-h
-S
-0.201248 i
-3142.33 2325 m
-3028.22 2325 l
-3028.22 2320 l
-3042.11 2319.2 3046 2316.18 3046 2305.72 c
-3046 2208.32 l
-3046 2197.85 3043.17 2195.64 3028.22 2194.03 c
-3028.22 2189 l
-3100.67 2189 l
-3100.67 2194 l
-3082.15 2194.81 3079 2197.23 3079 2208.32 c
-3079 2255.21 l
-3099.22 2254.81 3106.55 2247.36 3109.32 2224.02 c
-3114.35 2224.02 l
-3114.35 2292.04 l
-3109.32 2292.04 l
-3105.76 2269.1 3098.82 2262.05 3079 2262.05 c
-3079 2308.74 l
-3079 2316.19 3081.52 2318 3091.41 2318 c
-3110.13 2318 3121.8 2314.64 3128.04 2307.74 c
-3132.47 2302.71 3134.68 2297.27 3137.5 2284.59 c
-3142.33 2284.59 l
-h
-3147.96 2189 m
-f*
-3191.19 2282 m
-3152.84 2282 l
-3152.84 2276.95 l
-3161.49 2275.74 3164 2273.12 3164 2265.07 c
-3164 2205.9 l
-3164 2197.65 3161.93 2195.44 3152.84 2193.83 c
-3152.84 2189 l
-3206.37 2189 l
-3206.37 2193.83 l
-3194.09 2194.63 3192 2197.25 3192 2209.73 c
-3192 2247.76 l
-3192 2258.23 3197.49 2266.88 3203.95 2266.88 c
-3205.56 2266.88 3207.37 2265.47 3209.59 2262.25 c
-3213.41 2256.82 3216.43 2255.01 3221.66 2255.01 c
-3229.11 2255.01 3234.34 2260.64 3234.34 2268.29 c
-3234.34 2277.55 3227.5 2284.41 3218.04 2284.41 c
-3208.1 2284.41 3200.54 2279.12 3191.19 2265.27 c
-h
-3236.35 2189 m
-f*
-3331.19 2201.88 m
-3329.18 2199.87 l
-3328.57 2199.26 3327.97 2199.06 3326.96 2199.06 c
-3324.15 2199.06 3323 2200.67 3323 2204.09 c
-3323 2256.62 l
-3323 2273.73 3307.6 2284.42 3282.89 2284.42 c
-3260.15 2284.42 3244.85 2274.06 3244.85 2258.83 c
-3244.85 2250.38 3249.69 2245.55 3257.94 2245.55 c
-3265.99 2245.55 3271.62 2250.38 3271.62 2257.22 c
-3271.62 2260.04 3270.61 2262.66 3268 2265.88 c
-3266.19 2267.89 3265.58 2269.1 3265.58 2270.3 c
-3265.58 2274.53 3271.02 2277.42 3278.26 2277.42 c
-3290.14 2277.42 3295.86 2272.08 3295.86 2260.04 c
-3295.86 2245.35 l
-3271.91 2238.1 3262.29 2234.48 3254.51 2229.45 c
-3245.46 2223.41 3241 2216.37 3241 2207.52 c
-3241 2195.24 3250.27 2186.18 3263.17 2186.18 c
-3274.84 2186.18 3284.1 2190.21 3295.17 2200.27 c
-3297.38 2190.01 3301.81 2186.18 3311.67 2186.18 c
-3320.32 2186.18 3326.56 2189.4 3334.21 2197.65 c
-h
-3295 2209.13 m
-3289.55 2202.89 3285.52 2200.47 3280.68 2200.47 c
-3274.64 2200.47 3270 2205.91 3270 2213.96 c
-3270 2225.63 3278.61 2233.88 3295 2238.31 c
-h
-3336.62 2189 m
-f*
-3378.4 2282 m
-3339.7 2282 l
-3339.7 2276.95 l
-3348.55 2275.74 3351 2273.32 3351 2265.07 c
-3351 2205.9 l
-3351 2197.65 3348.74 2195.44 3339.7 2193.83 c
-3339.7 2189 l
-3388 2189 l
-3388 2193.83 l
-3380.95 2194.84 3379 2197.65 3379 2205.3 c
-3379 2259.03 l
-3379 2260.04 3381.87 2263.66 3384.18 2265.88 c
-3388.4 2269.1 3392.02 2271.42 3395.65 2271.42 c
-3403.5 2271.42 3407 2266.59 3407 2254 c
-3407 2205.3 l
-3407 2197.05 3404.68 2194.43 3396.85 2193.83 c
-3396.85 2189 l
-3443.95 2189 l
-3443.95 2193.83 l
-3436.9 2194.64 3435 2197.65 3435 2205.3 c
-3435 2259.03 l
-3435 2260.04 3437.73 2263.46 3439.92 2265.68 c
-3444.35 2269.1 3447.97 2271.42 3451.59 2271.42 c
-3459.24 2271.42 3462 2266.38 3462 2254 c
-3462 2205.3 l
-3462 2196.85 3459.85 2194.43 3452.4 2193.83 c
-3452.4 2189 l
-3500.3 2189 l
-3500.3 2194 l
-3492.45 2194.4 3490 2196.78 3490 2205.3 c
-3490 2255.81 l
-3490 2273.12 3479.43 2284.42 3463.07 2284.42 c
-3451.59 2284.42 3443.95 2279.73 3433.48 2266.68 c
-3427.44 2279.36 3420.4 2284.42 3407.72 2284.42 c
-3394.95 2284.42 3385.98 2278.91 3378.4 2266.68 c
-h
-3503.64 2189 m
-f*
-3583.9 2214.16 m
-3575.65 2204.29 3569.61 2200.18 3560.96 2200.18 c
-3553.31 2200.18 3547.27 2203.77 3543.25 2210.94 c
-3539.43 2217.54 3537.82 2224.56 3537.01 2239 c
-3587.73 2239 l
-3586.52 2255.36 3583.5 2264.43 3577.26 2272.12 c
-3570.82 2279.96 3561.36 2284.42 3550.09 2284.42 c
-3524.94 2284.42 3508.03 2264.4 3508.03 2234.88 c
-3508.03 2205.5 3524.53 2186.18 3549.49 2186.18 c
-3565.79 2186.18 3575.65 2192.42 3588.73 2211.34 c
-h
-3536 2246 m
-3536.61 2269.96 3540.23 2277.42 3550.09 2277.42 c
-3555.93 2277.42 3559.55 2274.38 3561.16 2268.49 c
-3562.17 2264.67 3562.57 2259.03 3562.97 2248.77 c
-3562.97 2246 l
-h
-3592.35 2189 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3626 -2189]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-8 w
-1811.75 3430.55 m
-1811.75 3438.95 1811.75 3438.95 1811.75 3430.55 c
-1811.75 3282.95 1851.35 3141.35 1923.35 3040.55 c
-S
-1864.55 3046.55 m
-1913.75 3062.15 l
-1938.95 3107.75 l
-2000.15 2960.15 l
-f*
-2304.95 2464.55 m
-2394.95 2346.95 2579.75 2262.95 2800.55 2241.35 c
-S
-2759.75 2198.15 m
-2781.35 2244.95 l
-2765.75 2292.95 l
-2914.55 2236.55 l
-f*
-2891.75 3844.55 m
-2789.75 3944.15 2644.55 4001.75 2490.95 4001.75 c
-2386.55 4001.75 2284.55 3975.35 2196.95 3924.95 c
-S
-2826.95 3838.55 m
-2874.95 3854.15 l
-2898.95 3899.75 l
-2962.55 3753.35 l
-f*
-3246.95 3268.55 m
-3335.75 3094.55 3500.15 2969.75 3695.75 2930.15 c
-S
-3651.35 2890.55 m
-3676.55 2936.15 l
-3664.55 2986.55 l
-3808.55 2915.75 l
-f*
-0.564706 g
-3698.15 3444.95 m
-3563.75 3480.95 l
-3659.75 3537.35 l
-3506.15 3545.75 l
-3548.15 3616.55 l
-3400.55 3596.15 l
-3383.75 3666.95 l
-3263.75 3622.55 l
-3188.15 3686.15 l
-3112.55 3622.55 l
-2992.55 3666.95 l
-2974.55 3596.15 l
-2825.75 3616.55 l
-2870.15 3545.75 l
-2716.55 3537.35 l
-2812.55 3480.95 l
-2676.95 3444.95 l
-2812.55 3410.15 l
-2716.55 3353.75 l
-2870.15 3344.15 l
-2825.75 3274.55 l
-2974.55 3294.95 l
-2992.55 3222.95 l
-3112.55 3268.55 l
-3188.15 3204.95 l
-3263.75 3268.55 l
-3383.75 3222.95 l
-3400.55 3294.95 l
-3548.15 3274.55 l
-3506.15 3344.15 l
-3659.75 3353.75 l
-3563.75 3410.15 l
-f*
-1 g
-3638.15 3504.95 m
-3503.75 3540.95 l
-3599.75 3597.35 l
-3446.15 3605.75 l
-3488.15 3676.55 l
-3340.55 3656.15 l
-3323.75 3726.95 l
-3203.75 3682.55 l
-3128.15 3746.15 l
-3052.55 3682.55 l
-2932.55 3726.95 l
-2914.55 3656.15 l
-2765.75 3676.55 l
-2810.15 3605.75 l
-2656.55 3597.35 l
-2752.55 3540.95 l
-2616.95 3504.95 l
-2752.55 3470.15 l
-2656.55 3413.75 l
-2810.15 3404.15 l
-2765.75 3334.55 l
-2914.55 3354.95 l
-2932.55 3282.95 l
-3052.55 3328.55 l
-3128.15 3264.95 l
-3203.75 3328.55 l
-3323.75 3282.95 l
-3340.55 3354.95 l
-3488.15 3334.55 l
-3446.15 3404.15 l
-3599.75 3413.75 l
-3503.75 3470.15 l
-f*
-0 g
-3638.15 3504.95 m
-3503.75 3540.95 l
-3599.75 3597.35 l
-3446.15 3605.75 l
-3488.15 3676.55 l
-3340.55 3656.15 l
-3323.75 3726.95 l
-3203.75 3682.55 l
-3128.15 3746.15 l
-3052.55 3682.55 l
-2932.55 3726.95 l
-2914.55 3656.15 l
-2765.75 3676.55 l
-2810.15 3605.75 l
-2656.55 3597.35 l
-2752.55 3540.95 l
-2616.95 3504.95 l
-2752.55 3470.15 l
-2656.55 3413.75 l
-2810.15 3404.15 l
-2765.75 3334.55 l
-2914.55 3354.95 l
-2932.55 3282.95 l
-3052.55 3328.55 l
-3128.15 3264.95 l
-3203.75 3328.55 l
-3323.75 3282.95 l
-3340.55 3354.95 l
-3488.15 3334.55 l
-3446.15 3404.15 l
-3599.75 3413.75 l
-3503.75 3470.15 l
-3638.15 3504.95 l
-3599.75 3504.95 l
-3477.35 3473.75 l
-3566.15 3420.95 l
-3428.15 3413.75 l
-3468.95 3347.75 l
-3333.35 3365.75 l
-3316.55 3297.35 l
-3201.35 3339.35 l
-3128.15 3276.95 l
-3054.95 3339.35 l
-2939.75 3297.35 l
-2921.75 3365.75 l
-2786.15 3347.75 l
-2826.95 3413.75 l
-2690.15 3420.95 l
-2778.95 3473.75 l
-2656.55 3504.95 l
-2777.75 3537.35 l
-2690.15 3590.15 l
-2826.95 3597.35 l
-2786.15 3663.35 l
-2921.75 3644.15 l
-2939.75 3713.75 l
-3054.95 3670.55 l
-3128.15 3732.95 l
-3201.35 3670.55 l
-3316.55 3713.75 l
-3333.35 3644.15 l
-3468.95 3663.35 l
-3428.15 3597.35 l
-3566.15 3590.15 l
-3477.35 3537.35 l
-3599.75 3504.95 l
-3638.15 3504.95 l
-f*
-0.2 i
-2950.08 3556.76 m
-2930.08 3482.52 l
-2927.52 3473.88 2924.48 3471.64 2914.08 3471 c
-2914.08 3467 l
-2964 3467 l
-2964 3471 l
-2954.72 3471.48 2952.48 3472.76 2952.48 3477.88 c
-2952.48 3479.64 2952.8 3481.4 2953.76 3485.08 c
-2953.92 3485.88 l
-2954.08 3486.68 l
-2973.76 3558.52 l
-2976.16 3566.84 2978.56 3569.08 2986.72 3570.04 c
-2986.72 3574 l
-2952.8 3574 l
-2903.2 3497.24 l
-2894.56 3574 l
-2859.2 3574 l
-2859.2 3570 l
-2869.28 3569.52 2870.72 3568.89 2870.72 3564.44 c
-2870.72 3562.2 2870.08 3559.32 2868.96 3555.16 c
-2851.52 3495.48 l
-2845.12 3474.68 2844 3472.92 2835.36 3471 c
-2835.36 3467 l
-2868.48 3467 l
-2868.48 3471 l
-2858.24 3472.28 2855.68 3474.2 2855.68 3480.76 c
-2855.68 3483.48 2856.48 3487.48 2858.72 3495.48 c
-2874.88 3554.52 l
-2885.6 3465.08 l
-2890.08 3465.08 l
-h
-2982.24 3467 m
-f*
-3051.44 3487.32 m
-3044.88 3478.52 3042.48 3475.76 3039.92 3475.76 c
-3038.64 3475.76 3038 3476.86 3038 3478.52 c
-3038 3482.52 3039.44 3489.08 3043.44 3502.2 c
-3054.8 3539.96 l
-3037.04 3538.84 l
-3034.16 3529.4 l
-3032.72 3537.56 3029.2 3541.08 3022.32 3541.08 c
-3002.64 3541.08 2979 3510.27 2979 3485.24 c
-2979 3473.08 2985.74 3464.92 2995.92 3464.92 c
-3005.68 3464.92 3013.04 3470.68 3022.16 3486.04 c
-3020.24 3479.48 3020 3477.56 3020 3475.32 c
-3020 3469.4 3024.76 3464.76 3030.64 3464.76 c
-3038.16 3464.76 3045.52 3471 3054.8 3484.92 c
-h
-3024.56 3534.2 m
-3028.08 3533.88 3030.56 3531 3030.56 3526.68 c
-3030.56 3517.08 3025.24 3499.32 3018.96 3488.28 c
-3014.64 3480.44 3009.84 3475.92 3005.52 3475.92 c
-3001.36 3475.92 2998 3479.75 2998 3484.92 c
-2998 3493.24 3003.42 3509.24 3010.16 3521.08 c
-3014.96 3529.56 3020.24 3534.52 3024.56 3534.2 c
-h
-3062 3467 m
-f*
-3096.56 3540.92 m
-3080.24 3538.36 3074 3537.4 3065.68 3536.44 c
-3065.68 3532 l
-3072.88 3531.69 3074.32 3531.07 3074.32 3528.12 c
-3074.32 3526.52 3073.04 3520.76 3070.8 3512.44 c
-3054.8 3450.36 l
-3051.76 3439.8 3050.48 3438.84 3042.8 3439 c
-3042.8 3434 l
-3082.64 3434 l
-3082.64 3439 l
-3074.64 3439.14 3072.24 3440.16 3072.24 3443.64 c
-3072.24 3445.88 3073.36 3450.68 3076.4 3461.88 c
-3077.52 3465.72 3077.52 3466.04 3078.16 3468.44 c
-3083.76 3465.56 3085.68 3464.92 3089.04 3464.92 c
-3110.8 3464.92 3133.36 3493.88 3133.36 3521.56 c
-3133.36 3533.4 3126.64 3541.08 3116.08 3541.08 c
-3106.96 3541.08 3099.92 3535.92 3090.48 3522.52 c
-h
-3107.12 3529.56 m
-3111.28 3529.24 3113.68 3525.56 3113.36 3520.44 c
-3112.72 3509.88 3107.6 3494.04 3101.84 3483.64 c
-3096.88 3475 3091.76 3469.92 3086.32 3469.92 c
-3082.8 3469.92 3080.08 3472.75 3080.08 3476.28 c
-3080.08 3479 3081.84 3485.56 3086.16 3500.12 c
-3089.68 3511.8 3091.12 3515.8 3093.52 3519.48 c
-3097.52 3525.72 3102.96 3529.88 3107.12 3529.56 c
-h
-3142 3467 m
-f*
-3177.56 3540.92 m
-3161.24 3538.36 3155 3537.4 3146.68 3536.44 c
-3146.68 3532 l
-3153.88 3531.69 3155.32 3531.07 3155.32 3528.12 c
-3155.32 3526.52 3154.04 3520.76 3151.8 3512.44 c
-3135.8 3450.36 l
-3132.76 3439.8 3131.48 3438.84 3123.8 3439 c
-3123.8 3434 l
-3163.64 3434 l
-3163.64 3439 l
-3155.64 3439.14 3153.24 3440.16 3153.24 3443.64 c
-3153.24 3445.88 3154.36 3450.68 3157.4 3461.88 c
-3158.52 3465.72 3158.52 3466.04 3159.16 3468.44 c
-3164.76 3465.56 3166.68 3464.92 3170.04 3464.92 c
-3191.8 3464.92 3214.36 3493.88 3214.36 3521.56 c
-3214.36 3533.4 3207.64 3541.08 3197.08 3541.08 c
-3187.96 3541.08 3180.92 3535.92 3171.48 3522.52 c
-h
-3188.12 3529.56 m
-3192.28 3529.24 3194.68 3525.56 3194.36 3520.44 c
-3193.72 3509.88 3188.6 3494.04 3182.84 3483.64 c
-3177.88 3475 3172.76 3469.92 3167.32 3469.92 c
-3163.8 3469.92 3161.08 3472.75 3161.08 3476.28 c
-3161.08 3479 3162.84 3485.56 3167.16 3500.12 c
-3170.68 3511.8 3172.12 3515.8 3174.52 3519.48 c
-3178.52 3525.72 3183.96 3529.88 3188.12 3529.56 c
-h
-3223 3467 m
-f*
-3256.56 3489.56 m
-3254.32 3486.36 l
-3250.16 3480.12 3246.48 3476.56 3244.08 3476.56 c
-3242.8 3476.56 3242 3477.77 3242 3479.16 c
-3242 3480.6 3242.62 3484.76 3243.12 3487.48 c
-3257.68 3540.92 l
-3249.22 3539 3238.26 3537.4 3226.04 3536.44 c
-3226.04 3532 l
-3227.44 3532 l
-3232.24 3532 3235.48 3530.44 3235.48 3527.48 c
-3235.48 3526.2 3234.71 3523.8 3233.68 3521.08 c
-3224.4 3486.68 l
-3223.12 3482.04 3223 3477.88 3223 3475.64 c
-3223 3469.56 3227.2 3465.56 3233.36 3465.56 c
-3242.96 3465.56 3248.88 3470.36 3260.08 3487.32 c
-h
-3252.88 3576.4 m
-3247.44 3576.4 3243 3571.46 3243 3566.04 c
-3243 3559.8 3247.26 3555.4 3253.04 3555.4 c
-3259.12 3555.4 3264 3559.86 3264 3565.56 c
-3264 3571.48 3259 3576.4 3252.88 3576.4 c
-h
-3266.48 3467 m
-f*
-3341.36 3488.6 m
-3334.96 3478.68 3332.88 3476.56 3330.16 3476.56 c
-3328.88 3476.56 3328 3477.63 3328 3479.16 c
-3328 3480.76 3328.94 3484.12 3331.92 3493.08 c
-3337.68 3510.52 l
-3340.24 3518.04 3342 3525.08 3342 3528.92 c
-3342 3536.76 3337.78 3541.08 3330.16 3541.08 c
-3324.24 3541.08 3318.48 3538.62 3314.16 3534.36 c
-3308.24 3528.76 3305.2 3524.92 3294.48 3509.08 c
-3304.72 3540.76 l
-3294.48 3538.52 3281.68 3536.92 3272.72 3536.6 c
-3272.72 3531.8 l
-3279.44 3531.65 3281.36 3530.92 3281.36 3528.12 c
-3281.36 3526.2 3279.12 3517.72 3274 3499.64 c
-3270.32 3486.68 3269.2 3482.52 3265.04 3467 c
-3284.4 3467 l
-3291.92 3494.68 3297.68 3508.6 3307.6 3521.56 c
-3310.8 3525.88 3315.76 3529.08 3318.64 3529.08 c
-3320.72 3529.08 3323 3527.63 3323 3526.04 c
-3323 3525.56 3322.54 3524.28 3321.84 3522.68 c
-3313.04 3496.12 l
-3310.48 3488.44 3309 3479.32 3309 3475.16 c
-3309 3469.08 3312.84 3465.56 3319.44 3465.56 c
-3329.04 3465.56 3335.6 3471 3344.88 3486.52 c
-h
-3354.96 3467 m
-f*
-3432.48 3536 m
-3414.72 3536 l
-3409.28 3539.58 3404.48 3541.08 3397.12 3541.08 c
-3377.44 3541.08 3361 3528.05 3361 3511.8 c
-3361 3503.64 3365.35 3497.88 3374.4 3494.2 c
-3361.28 3486.84 3359 3484.6 3359 3478.68 c
-3359 3473.56 3361.89 3470.52 3368.96 3468.12 c
-3359.04 3465.72 3355.84 3464.44 3352 3461.4 c
-3349.44 3459.16 3348 3455.32 3348 3451.48 c
-3348 3441.08 3359.56 3435 3377.76 3435 c
-3400.32 3435 3416 3444.72 3416 3458.52 c
-3416 3468.28 3409.6 3473.56 3392.16 3478.52 c
-3383.68 3480.92 l
-3378.56 3482.36 3375 3484.6 3375 3487 c
-3375 3489.56 3377.68 3492.28 3380 3492.28 c
-3380.8 3492.28 3381.92 3492.24 3383.2 3492.12 c
-3384.96 3491.64 3386.24 3491 3388.16 3491 c
-3395.2 3491 3402.4 3493.09 3408.48 3496.92 c
-3417.76 3502.2 3423 3510.36 3423 3519.96 c
-3423 3522.64 3422.59 3524.32 3421.76 3527 c
-3432.48 3527 l
-h
-3374.4 3466.04 m
-3376.32 3465.88 3388.48 3461.72 3392 3460.12 c
-3396.48 3457.88 3399 3455.16 3399 3451 c
-3399 3443.96 3391.8 3440 3379.36 3440 c
-3368.96 3440 3362 3445.1 3362 3452.44 c
-3362 3455.48 3363.32 3458.2 3366.24 3461.24 c
-3368.32 3463.32 3373.12 3466.2 3374.4 3466.04 c
-h
-3396.8 3536.08 m
-3400.96 3536.08 3404 3532.19 3404 3526.52 c
-3404 3521.08 3402.08 3513.4 3399.36 3507.48 c
-3396 3500.12 3391.84 3496 3386.88 3496 c
-3382.56 3496 3380 3499.52 3380 3505.88 c
-3380 3512.28 3382.79 3522.04 3386.24 3528.12 c
-3389.28 3533.4 3392.64 3536.08 3396.8 3536.08 c
-h
-3436 3467 m
-f*
-1 i
-0.564706 g
-2768.15 2649.35 m
-2633.75 2686.55 l
-2729.75 2741.75 l
-2576.15 2751.35 l
-2618.15 2820.95 l
-2470.55 2800.55 l
-2453.75 2872.55 l
-2333.75 2826.95 l
-2258.15 2890.55 l
-2182.55 2826.95 l
-2062.55 2872.55 l
-2044.55 2800.55 l
-1895.75 2820.95 l
-1940.15 2751.35 l
-1786.55 2741.75 l
-1882.55 2686.55 l
-1746.95 2649.35 l
-1882.55 2614.55 l
-1786.55 2558.15 l
-1940.15 2549.75 l
-1895.75 2480.15 l
-2044.55 2499.35 l
-2062.55 2428.55 l
-2182.55 2472.95 l
-2258.15 2409.35 l
-2333.75 2472.95 l
-2453.75 2428.55 l
-2470.55 2499.35 l
-2618.15 2480.15 l
-2576.15 2549.75 l
-2729.75 2558.15 l
-2633.75 2614.55 l
-f*
-1 g
-2708.15 2709.35 m
-2573.75 2746.55 l
-2669.75 2801.75 l
-2516.15 2811.35 l
-2558.15 2880.95 l
-2410.55 2860.55 l
-2393.75 2932.55 l
-2273.75 2886.95 l
-2198.15 2950.55 l
-2122.55 2886.95 l
-2002.55 2932.55 l
-1984.55 2860.55 l
-1835.75 2880.95 l
-1880.15 2811.35 l
-1726.55 2801.75 l
-1822.55 2746.55 l
-1686.95 2709.35 l
-1822.55 2674.55 l
-1726.55 2618.15 l
-1880.15 2609.75 l
-1835.75 2540.15 l
-1984.55 2559.35 l
-2002.55 2488.55 l
-2122.55 2532.95 l
-2198.15 2469.35 l
-2273.75 2532.95 l
-2393.75 2488.55 l
-2410.55 2559.35 l
-2558.15 2540.15 l
-2516.15 2609.75 l
-2669.75 2618.15 l
-2573.75 2674.55 l
-f*
-0 g
-2708.15 2709.35 m
-2573.75 2746.55 l
-2669.75 2801.75 l
-2516.15 2811.35 l
-2558.15 2880.95 l
-2410.55 2860.55 l
-2393.75 2932.55 l
-2273.75 2886.95 l
-2198.15 2950.55 l
-2122.55 2886.95 l
-2002.55 2932.55 l
-1984.55 2860.55 l
-1835.75 2880.95 l
-1880.15 2811.35 l
-1726.55 2801.75 l
-1822.55 2746.55 l
-1686.95 2709.35 l
-1822.55 2674.55 l
-1726.55 2618.15 l
-1880.15 2609.75 l
-1835.75 2540.15 l
-1984.55 2559.35 l
-2002.55 2488.55 l
-2122.55 2532.95 l
-2198.15 2469.35 l
-2273.75 2532.95 l
-2393.75 2488.55 l
-2410.55 2559.35 l
-2558.15 2540.15 l
-2516.15 2609.75 l
-2669.75 2618.15 l
-2573.75 2674.55 l
-2708.15 2709.35 l
-2669.75 2709.35 l
-2547.35 2678.15 l
-2636.15 2626.55 l
-2498.15 2618.15 l
-2538.95 2552.15 l
-2403.35 2571.35 l
-2386.55 2501.75 l
-2271.35 2544.95 l
-2198.15 2482.55 l
-2124.95 2544.95 l
-2009.75 2501.75 l
-1991.75 2571.35 l
-1856.15 2552.15 l
-1896.95 2618.15 l
-1760.15 2626.55 l
-1848.95 2678.15 l
-1726.55 2709.35 l
-1847.75 2741.75 l
-1760.15 2794.55 l
-1896.95 2801.75 l
-1856.15 2868.95 l
-1991.75 2849.75 l
-2009.75 2918.15 l
-2124.95 2876.15 l
-2198.15 2938.55 l
-2271.35 2876.15 l
-2386.55 2918.15 l
-2403.35 2849.75 l
-2538.95 2868.95 l
-2498.15 2801.75 l
-2636.15 2794.55 l
-2547.35 2741.75 l
-2669.75 2709.35 l
-2708.15 2709.35 l
-f*
-0.2 i
-2020.08 2760.76 m
-2000.08 2686.52 l
-1997.52 2677.88 1994.48 2675.64 1984.08 2675 c
-1984.08 2671 l
-2034 2671 l
-2034 2675 l
-2024.72 2675.48 2022.48 2676.76 2022.48 2681.88 c
-2022.48 2683.64 2022.8 2685.4 2023.76 2689.08 c
-2023.92 2689.88 l
-2024.08 2690.68 l
-2043.76 2762.52 l
-2046.16 2770.84 2048.56 2773.08 2056.72 2774.04 c
-2056.72 2778 l
-2022.8 2778 l
-1973.2 2701.24 l
-1964.56 2778 l
-1929.2 2778 l
-1929.2 2774 l
-1939.28 2773.52 1940.72 2772.89 1940.72 2768.44 c
-1940.72 2766.2 1940.08 2763.32 1938.96 2759.16 c
-1921.52 2699.48 l
-1915.12 2678.68 1914 2676.92 1905.36 2675 c
-1905.36 2671 l
-1938.48 2671 l
-1938.48 2675 l
-1928.24 2676.28 1925.68 2678.2 1925.68 2684.76 c
-1925.68 2687.48 1926.48 2691.48 1928.72 2699.48 c
-1944.88 2758.52 l
-1955.6 2669.08 l
-1960.08 2669.08 l
-h
-2052.24 2671 m
-f*
-2121.44 2691.32 m
-2114.88 2682.52 2112.48 2679.76 2109.92 2679.76 c
-2108.64 2679.76 2108 2680.86 2108 2682.52 c
-2108 2686.52 2109.44 2693.08 2113.44 2706.2 c
-2124.8 2743.96 l
-2107.04 2742.84 l
-2104.16 2733.4 l
-2102.72 2741.56 2099.2 2745.08 2092.32 2745.08 c
-2072.64 2745.08 2049 2714.27 2049 2689.24 c
-2049 2677.08 2055.74 2668.92 2065.92 2668.92 c
-2075.68 2668.92 2083.04 2674.68 2092.16 2690.04 c
-2090.24 2683.48 2090 2681.56 2090 2679.32 c
-2090 2673.4 2094.76 2668.76 2100.64 2668.76 c
-2108.16 2668.76 2115.52 2675 2124.8 2688.92 c
-h
-2094.56 2738.2 m
-2098.08 2737.88 2100.56 2735 2100.56 2730.68 c
-2100.56 2721.08 2095.24 2703.32 2088.96 2692.28 c
-2084.64 2684.44 2079.84 2679.92 2075.52 2679.92 c
-2071.36 2679.92 2068 2683.75 2068 2688.92 c
-2068 2697.24 2073.42 2713.24 2080.16 2725.08 c
-2084.96 2733.56 2090.24 2738.52 2094.56 2738.2 c
-h
-2132 2671 m
-f*
-2166.56 2744.92 m
-2150.24 2742.36 2144 2741.4 2135.68 2740.44 c
-2135.68 2736 l
-2142.88 2735.69 2144.32 2735.07 2144.32 2732.12 c
-2144.32 2730.52 2143.04 2724.76 2140.8 2716.44 c
-2124.8 2654.36 l
-2121.76 2643.8 2120.48 2642.84 2112.8 2643 c
-2112.8 2638 l
-2152.64 2638 l
-2152.64 2643 l
-2144.64 2643.14 2142.24 2644.16 2142.24 2647.64 c
-2142.24 2649.88 2143.36 2654.68 2146.4 2665.88 c
-2147.52 2669.72 2147.52 2670.04 2148.16 2672.44 c
-2153.76 2669.56 2155.68 2668.92 2159.04 2668.92 c
-2180.8 2668.92 2203.36 2697.88 2203.36 2725.56 c
-2203.36 2737.4 2196.64 2745.08 2186.08 2745.08 c
-2176.96 2745.08 2169.92 2739.92 2160.48 2726.52 c
-h
-2177.12 2733.56 m
-2181.28 2733.24 2183.68 2729.56 2183.36 2724.44 c
-2182.72 2713.88 2177.6 2698.04 2171.84 2687.64 c
-2166.88 2679 2161.76 2673.92 2156.32 2673.92 c
-2152.8 2673.92 2150.08 2676.75 2150.08 2680.28 c
-2150.08 2683 2151.84 2689.56 2156.16 2704.12 c
-2159.68 2715.8 2161.12 2719.8 2163.52 2723.48 c
-2167.52 2729.72 2172.96 2733.88 2177.12 2733.56 c
-h
-2212 2671 m
-f*
-2247.56 2744.92 m
-2231.24 2742.36 2225 2741.4 2216.68 2740.44 c
-2216.68 2736 l
-2223.88 2735.69 2225.32 2735.07 2225.32 2732.12 c
-2225.32 2730.52 2224.04 2724.76 2221.8 2716.44 c
-2205.8 2654.36 l
-2202.76 2643.8 2201.48 2642.84 2193.8 2643 c
-2193.8 2638 l
-2233.64 2638 l
-2233.64 2643 l
-2225.64 2643.14 2223.24 2644.16 2223.24 2647.64 c
-2223.24 2649.88 2224.36 2654.68 2227.4 2665.88 c
-2228.52 2669.72 2228.52 2670.04 2229.16 2672.44 c
-2234.76 2669.56 2236.68 2668.92 2240.04 2668.92 c
-2261.8 2668.92 2284.36 2697.88 2284.36 2725.56 c
-2284.36 2737.4 2277.64 2745.08 2267.08 2745.08 c
-2257.96 2745.08 2250.92 2739.92 2241.48 2726.52 c
-h
-2258.12 2733.56 m
-2262.28 2733.24 2264.68 2729.56 2264.36 2724.44 c
-2263.72 2713.88 2258.6 2698.04 2252.84 2687.64 c
-2247.88 2679 2242.76 2673.92 2237.32 2673.92 c
-2233.8 2673.92 2231.08 2676.75 2231.08 2680.28 c
-2231.08 2683 2232.84 2689.56 2237.16 2704.12 c
-2240.68 2715.8 2242.12 2719.8 2244.52 2723.48 c
-2248.52 2729.72 2253.96 2733.88 2258.12 2733.56 c
-h
-2293 2671 m
-f*
-2326.56 2693.56 m
-2324.32 2690.36 l
-2320.16 2684.12 2316.48 2680.56 2314.08 2680.56 c
-2312.8 2680.56 2312 2681.77 2312 2683.16 c
-2312 2684.6 2312.62 2688.76 2313.12 2691.48 c
-2327.68 2744.92 l
-2319.22 2743 2308.26 2741.4 2296.04 2740.44 c
-2296.04 2736 l
-2297.44 2736 l
-2302.24 2736 2305.48 2734.44 2305.48 2731.48 c
-2305.48 2730.2 2304.71 2727.8 2303.68 2725.08 c
-2294.4 2690.68 l
-2293.12 2686.04 2293 2681.88 2293 2679.64 c
-2293 2673.56 2297.2 2669.56 2303.36 2669.56 c
-2312.96 2669.56 2318.88 2674.36 2330.08 2691.32 c
-h
-2322.88 2780.4 m
-2317.44 2780.4 2313 2775.46 2313 2770.04 c
-2313 2763.8 2317.26 2759.4 2323.04 2759.4 c
-2329.12 2759.4 2334 2763.86 2334 2769.56 c
-2334 2775.48 2329 2780.4 2322.88 2780.4 c
-h
-2336.48 2671 m
-f*
-2411.36 2692.6 m
-2404.96 2682.68 2402.88 2680.56 2400.16 2680.56 c
-2398.88 2680.56 2398 2681.63 2398 2683.16 c
-2398 2684.76 2398.94 2688.12 2401.92 2697.08 c
-2407.68 2714.52 l
-2410.24 2722.04 2412 2729.08 2412 2732.92 c
-2412 2740.76 2407.78 2745.08 2400.16 2745.08 c
-2394.24 2745.08 2388.48 2742.62 2384.16 2738.36 c
-2378.24 2732.76 2375.2 2728.92 2364.48 2713.08 c
-2374.72 2744.76 l
-2364.48 2742.52 2351.68 2740.92 2342.72 2740.6 c
-2342.72 2735.8 l
-2349.44 2735.65 2351.36 2734.92 2351.36 2732.12 c
-2351.36 2730.2 2349.12 2721.72 2344 2703.64 c
-2340.32 2690.68 2339.2 2686.52 2335.04 2671 c
-2354.4 2671 l
-2361.92 2698.68 2367.68 2712.6 2377.6 2725.56 c
-2380.8 2729.88 2385.76 2733.08 2388.64 2733.08 c
-2390.72 2733.08 2393 2731.63 2393 2730.04 c
-2393 2729.56 2392.54 2728.28 2391.84 2726.68 c
-2383.04 2700.12 l
-2380.48 2692.44 2379 2683.32 2379 2679.16 c
-2379 2673.08 2382.84 2669.56 2389.44 2669.56 c
-2399.04 2669.56 2405.6 2675 2414.88 2690.52 c
-h
-2424.96 2671 m
-f*
-2502.48 2740 m
-2484.72 2740 l
-2479.28 2743.58 2474.48 2745.08 2467.12 2745.08 c
-2447.44 2745.08 2431 2732.05 2431 2715.8 c
-2431 2707.64 2435.35 2701.88 2444.4 2698.2 c
-2431.28 2690.84 2429 2688.6 2429 2682.68 c
-2429 2677.56 2431.89 2674.52 2438.96 2672.12 c
-2429.04 2669.72 2425.84 2668.44 2422 2665.4 c
-2419.44 2663.16 2418 2659.32 2418 2655.48 c
-2418 2645.08 2429.56 2639 2447.76 2639 c
-2470.32 2639 2486 2648.72 2486 2662.52 c
-2486 2672.28 2479.6 2677.56 2462.16 2682.52 c
-2453.68 2684.92 l
-2448.56 2686.36 2445 2688.6 2445 2691 c
-2445 2693.56 2447.68 2696.28 2450 2696.28 c
-2450.8 2696.28 2451.92 2696.24 2453.2 2696.12 c
-2454.96 2695.64 2456.24 2695 2458.16 2695 c
-2465.2 2695 2472.4 2697.09 2478.48 2700.92 c
-2487.76 2706.2 2493 2714.36 2493 2723.96 c
-2493 2726.64 2492.59 2728.32 2491.76 2731 c
-2502.48 2731 l
-h
-2444.4 2670.04 m
-2446.32 2669.88 2458.48 2665.72 2462 2664.12 c
-2466.48 2661.88 2469 2659.16 2469 2655 c
-2469 2647.96 2461.8 2644 2449.36 2644 c
-2438.96 2644 2432 2649.1 2432 2656.44 c
-2432 2659.48 2433.32 2662.2 2436.24 2665.24 c
-2438.32 2667.32 2443.12 2670.2 2444.4 2670.04 c
-h
-2466.8 2740.08 m
-2470.96 2740.08 2474 2736.19 2474 2730.52 c
-2474 2725.08 2472.08 2717.4 2469.36 2711.48 c
-2466 2704.12 2461.84 2700 2456.88 2700 c
-2452.56 2700 2450 2703.52 2450 2709.88 c
-2450 2716.28 2452.79 2726.04 2456.24 2732.12 c
-2459.28 2737.4 2462.64 2740.08 2466.8 2740.08 c
-h
-2506 2671 m
-f*
-1 i
-1 g
-4282.55 3248.15 m
-4448.15 3401.75 l
-4366.55 3401.75 l
-4366.55 3552.95 l
-4199.75 3552.95 l
-4199.75 3401.75 l
-4118.15 3401.75 l
-f*
-0 g
-4282.55 3248.15 m
-4448.15 3401.75 l
-4366.55 3401.75 l
-4366.55 3552.95 l
-4199.75 3552.95 l
-4199.75 3401.75 l
-4118.15 3401.75 l
-4282.55 3248.15 l
-4282.55 3262.55 l
-4143.35 3392.15 l
-4209.35 3392.15 l
-4209.35 3543.35 l
-4355.75 3543.35 l
-4355.75 3392.15 l
-4424.15 3392.15 l
-4282.55 3262.55 l
-4282.55 3248.15 l
-f*
-0.2 i
-3770.88 3786.52 m
-3735.78 3786.52 3711 3761.21 3711 3725.12 c
-3711 3688.04 3734.99 3662.48 3769.98 3662.48 c
-3804.54 3662.48 3829 3688.04 3829 3724.58 c
-3829 3740.96 3823.9 3755.9 3814.98 3766.34 c
-3804.18 3779.12 3787.8 3786.52 3770.88 3786.52 c
-h
-3769.44 3779.52 m
-3777.9 3779.52 3785.46 3777.05 3791.94 3772.1 c
-3802.2 3763.46 3808 3746.18 3808 3725.66 c
-3808 3704.06 3803.25 3688.4 3793.56 3678.5 c
-3787.44 3672.38 3779.16 3669.48 3770.16 3669.48 c
-3761.88 3669.48 3754.14 3672.01 3747.84 3677.06 c
-3737.76 3685.34 3732 3703.34 3732 3724.76 c
-3732 3741.86 3736.54 3758.96 3743.34 3767.6 c
-3750 3775.52 3759.72 3779.52 3769.44 3779.52 c
-h
-3834.96 3665 m
-f*
-3838.42 3777.14 m
-3839.5 3777.14 l
-3841.48 3777.32 3843.64 3777.5 3845.08 3777.5 c
-3850.84 3777.5 3853 3774.98 3853 3766.52 c
-3853 3680.66 l
-3853 3670.94 3850.41 3668.6 3838.78 3667.7 c
-3838.78 3665 l
-3881.26 3665 l
-3881.26 3668 l
-3869.74 3668.7 3868 3670.46 3868 3680.12 c
-3868 3787.58 l
-3867.04 3787.94 l
-3857.68 3784.88 3850.84 3783.08 3838.42 3780.02 c
-h
-3885.04 3665 m
-f*
-3946.92 3663.2 m
-3973.38 3672.56 l
-3973.38 3676 l
-3970.32 3675.26 3970.14 3675.82 3969.24 3675.82 c
-3962.76 3675.82 3961 3677.69 3961 3685.52 c
-3961 3787.58 l
-3960.42 3787.94 l
-3951.78 3784.88 3945.48 3783.08 3933.96 3780.02 c
-3933.96 3777.14 l
-3935.4 3777.32 3936.48 3777.32 3937.92 3777.32 c
-3944.58 3777.32 3946 3775.52 3946 3768.14 c
-3946 3740.06 l
-3939.23 3745.82 3934.42 3747.8 3927.3 3747.8 c
-3906.6 3747.8 3890 3727.46 3890 3701.9 c
-3890 3678.86 3903.26 3663.2 3923.16 3663.2 c
-3933.15 3663.2 3939.93 3666.8 3946 3675.26 c
-3946 3663.74 l
-h
-3946 3683.36 m
-3946 3682.1 3945 3680.12 3943.5 3678.32 c
-3940.26 3674.54 3935.76 3672.2 3930.18 3672.2 c
-3915.06 3672.2 3905 3686.74 3905 3709.1 c
-3905 3729.44 3913.95 3742.8 3927.84 3742.8 c
-3937.56 3742.8 3946 3734.32 3946 3724.76 c
-h
-3975 3665 m
-f*
-4020 3665 m
-f*
-4023.06 3784 m
-4023.06 3781 l
-4038.18 3780.09 4040 3778.07 4040 3764.54 c
-4040 3684.62 l
-4040 3671.3 4037.71 3668.96 4023.06 3668.42 c
-4023.06 3665 l
-4083.18 3665 l
-4110 3665 4127 3677.42 4127 3697.4 c
-4127 3705.32 4123.85 3712.52 4117.92 3717.74 c
-4112.52 3722.6 4107.66 3724.94 4095.96 3727.64 c
-4105.32 3729.98 4109.1 3731.78 4113.42 3735.56 c
-4117.92 3739.52 4121 3746.18 4121 3753.56 c
-4121 3773.72 4104.85 3784 4073.46 3784 c
-h
-4059 3723.68 m
-4075.94 3723.68 4083.78 3722.78 4090.56 3720.26 c
-4101 3716.12 4106 3708.74 4106 3697.22 c
-4106 3687.5 4102.23 3680.48 4095.06 3676.34 c
-4089.3 3672.92 4082.1 3672 4069.5 3672 c
-4061.22 3672 4059 3673.55 4059 3679.04 c
-h
-4059 3730.88 m
-4059 3772.1 l
-4059 3775.88 4060.16 3777 4062.66 3777 c
-4070.58 3777 l
-4091.28 3777 4102 3768.71 4102 3752.84 c
-4102 3738.8 4092.55 3730.88 4075.8 3730.88 c
-h
-4140.06 3665 m
-f*
-4219.56 3676.88 m
-4216.5 3674.36 4214.34 3673.2 4211.64 3673.2 c
-4207.5 3673.2 4206 3675.78 4206 3683.9 c
-4206 3719 l
-4206 3728.18 4205.16 3733.22 4202.82 3737.36 c
-4199.04 3744.2 4191.3 3747.8 4180.32 3747.8 c
-4171.14 3747.8 4162.5 3745.28 4157.46 3741.14 c
-4152.96 3737.36 4150 3732.14 4150 3727.64 c
-4150 3723.5 4153.46 3719.9 4157.82 3719.9 c
-4162.14 3719.9 4165.92 3723.5 4165.92 3727.46 c
-4165.92 3728.18 4165.74 3729.08 4165.56 3730.34 c
-4165.2 3731.96 4165 3733.4 4165 3734.66 c
-4165 3739.52 4170.77 3743.8 4177.98 3743.8 c
-4186.8 3743.8 4191 3738.47 4191 3728.54 c
-4191 3717.56 l
-4163.76 3706.4 4160.75 3704.96 4153.14 3698.12 c
-4149.18 3694.52 4146.66 3688.4 4146.66 3682.46 c
-4146.66 3671.12 4154.4 3663.2 4165.56 3663.2 c
-4173.48 3663.2 4180.86 3666.98 4191.84 3676.34 c
-4192.74 3666.8 4195.98 3663.2 4203.36 3663.2 c
-4209.48 3663.2 4213.26 3665.36 4219.56 3672.2 c
-h
-4191 3687.14 m
-4191 3681.56 4190.23 3679.94 4186.98 3677.6 c
-4182.66 3675.08 4177.62 3673.2 4173.84 3673.2 c
-4167.54 3673.2 4162.48 3679.51 4162.48 3687.5 c
-4162.48 3688.22 l
-4162.48 3698.84 4169.7 3705.32 4191 3713.24 c
-h
-4219.92 3665 m
-f*
-4277.06 3721.52 m
-4276.34 3746 l
-4274 3746 l
-4273.64 3745.64 l
-4272.02 3744.38 4271.84 3744.2 4271.12 3744.2 c
-4270.04 3744.2 4268.24 3744.56 4266.26 3745.46 c
-4262.48 3746.9 4258.34 3747.62 4254.02 3747.62 c
-4239.26 3747.62 4229 3738.62 4229 3725.48 c
-4229 3715.4 4234.81 3708.38 4250.24 3699.56 c
-4260.68 3693.62 l
-4266.98 3690.02 4270 3685.7 4270 3680.12 c
-4270 3672.2 4264.26 3667.2 4255.1 3667.2 c
-4242.68 3667.2 4236.38 3674.03 4232.24 3692.36 c
-4229.18 3692.36 l
-4229.18 3664.28 l
-4231.7 3664.28 l
-4232.96 3666.08 4233.68 3666.44 4235.84 3666.44 c
-4237.82 3666.44 4239.8 3666.08 4244.12 3665 c
-4249.16 3663.92 4253.66 3663.2 4257.44 3663.2 c
-4271.12 3663.2 4283 3673.64 4283 3686.24 c
-4283 3695.24 4278.76 3701.18 4267.52 3707.66 c
-4248.08 3719.18 l
-4243.04 3722.06 4240 3726.56 4240 3731.42 c
-4240 3738.8 4245.72 3743.62 4254.2 3743.62 c
-4264.46 3743.62 4269.86 3737.69 4274 3721.52 c
-h
-4290.02 3665 m
-f*
-4363.44 3694.52 m
-4354.8 3680.84 4347.06 3675.2 4335.54 3675.2 c
-4325.64 3675.2 4318.08 3680.02 4312.86 3690.02 c
-4309.26 3697.08 4307.82 3703.42 4307.46 3715 c
-4362.9 3715 l
-4361.46 3726.63 4359.66 3731.82 4355.16 3737.54 c
-4349.76 3744.02 4341.48 3747.8 4332.12 3747.8 c
-4309.8 3747.8 4294.5 3729.8 4294.5 3703.52 c
-4294.5 3678.68 4307.46 3663.2 4328.16 3663.2 c
-4345.44 3663.2 4358.76 3673.82 4366.32 3693.26 c
-h
-4307.82 3720 m
-4309.8 3734.66 4315.92 3740.8 4326.9 3740.8 c
-4337.88 3740.8 4342.2 3735.74 4344.54 3720 c
-h
-4369.92 3665 m
-f*
-4415 3665 m
-f*
-4501.22 3706.58 m
-4501.22 3748.34 l
-4497.08 3748.34 l
-4494.92 3733.94 4491.68 3731 4477.28 3731 c
-4452 3731 l
-4452 3771.2 l
-4452 3776.24 4452.77 3777 4456.94 3777 c
-4481.42 3777 l
-4501.76 3777 4505.72 3774.35 4508.78 3758.42 c
-4513.28 3758.42 l
-4512.74 3784 l
-4417.16 3784 l
-4417.16 3780.74 l
-4430.48 3779.66 4433 3777.32 4433 3764.54 c
-4433 3686.6 l
-4433 3671.66 4431 3669.32 4417.16 3668.42 c
-4417.16 3665 l
-4467.56 3665 l
-4467.56 3668 l
-4453.7 3668.74 4452 3671.32 4452 3684.62 c
-4452 3724 l
-4477.28 3724 l
-4491.86 3724 4494.92 3721.28 4497.08 3706.58 c
-h
-4515.08 3665 m
-f*
-4516.26 3735.2 m
-4518.78 3735.74 4520.4 3735.92 4522.56 3735.92 c
-4527.06 3735.92 4529 3733.04 4529 3725.12 c
-4529 3680.12 l
-4529 3671.12 4527.71 3669.86 4515.9 3667.7 c
-4515.9 3665 l
-4559.1 3665 l
-4559.1 3668 l
-4546.86 3668.53 4544 3671.17 4544 3681.2 c
-4544 3721.7 l
-4544 3727.46 4551.44 3736.46 4556.4 3736.46 c
-4557.48 3736.46 4559.1 3735.56 4561.08 3733.76 c
-4563.96 3731.06 4565.94 3730.16 4568.28 3730.16 c
-4572.6 3730.16 4575.3 3733.22 4575.3 3738.26 c
-4575.3 3744.2 4571.52 3747.8 4565.4 3747.8 c
-4557.91 3747.8 4552.92 3743.84 4544 3730.88 c
-4544 3747.44 l
-4542.9 3747.8 l
-4533.36 3744.02 4526.88 3741.5 4516.26 3738.08 c
-h
-4574.94 3665 m
-f*
-4654.56 3676.88 m
-4651.5 3674.36 4649.34 3673.2 4646.64 3673.2 c
-4642.5 3673.2 4641 3675.78 4641 3683.9 c
-4641 3719 l
-4641 3728.18 4640.16 3733.22 4637.82 3737.36 c
-4634.04 3744.2 4626.3 3747.8 4615.32 3747.8 c
-4606.14 3747.8 4597.5 3745.28 4592.46 3741.14 c
-4587.96 3737.36 4585 3732.14 4585 3727.64 c
-4585 3723.5 4588.46 3719.9 4592.82 3719.9 c
-4597.14 3719.9 4600.92 3723.5 4600.92 3727.46 c
-4600.92 3728.18 4600.74 3729.08 4600.56 3730.34 c
-4600.2 3731.96 4600 3733.4 4600 3734.66 c
-4600 3739.52 4605.77 3743.8 4612.98 3743.8 c
-4621.8 3743.8 4626 3738.47 4626 3728.54 c
-4626 3717.56 l
-4598.76 3706.4 4595.75 3704.96 4588.14 3698.12 c
-4584.18 3694.52 4581.66 3688.4 4581.66 3682.46 c
-4581.66 3671.12 4589.4 3663.2 4600.56 3663.2 c
-4608.48 3663.2 4615.86 3666.98 4626.84 3676.34 c
-4627.74 3666.8 4630.98 3663.2 4638.36 3663.2 c
-4644.48 3663.2 4648.26 3665.36 4654.56 3672.2 c
-h
-4626 3687.14 m
-4626 3681.56 4625.23 3679.94 4621.98 3677.6 c
-4617.66 3675.08 4612.62 3673.2 4608.84 3673.2 c
-4602.54 3673.2 4597.48 3679.51 4597.48 3687.5 c
-4597.48 3688.22 l
-4597.48 3698.84 4604.7 3705.32 4626 3713.24 c
-h
-4654.92 3665 m
-f*
-4658.14 3736.64 m
-4660.48 3737.18 4661.92 3737.36 4663.9 3737.36 c
-4668.58 3737.36 4670 3734.48 4670 3725.84 c
-4670 3680.3 l
-4670 3670.58 4667.52 3667.88 4657.6 3667.7 c
-4657.6 3665 l
-4697.56 3665 l
-4697.56 3668 l
-4688.02 3668.35 4685 3670.27 4685 3677.06 c
-4685 3727.82 l
-4685 3728.18 4686.23 3729.44 4687.66 3730.88 c
-4691.98 3735.2 4700.08 3738.8 4706.74 3738.8 c
-4714.48 3738.8 4719 3732.2 4719 3719.54 c
-4719 3680.48 l
-4719 3670.4 4716.93 3668.42 4706.2 3667.7 c
-4706.2 3665 l
-4746.52 3665 l
-4746.52 3668 l
-4736.26 3668.18 4734 3671.17 4734 3682.1 c
-4734 3727.46 l
-4739.28 3735.2 4744.91 3738.8 4753.18 3738.8 c
-4763.44 3738.8 4767 3733.85 4767 3718.64 c
-4767 3680.66 l
-4767 3670.4 4765.52 3668.96 4754.8 3667.7 c
-4754.8 3665 l
-4794.22 3665 l
-4794.22 3667.7 l
-4789.54 3668.06 l
-4784.14 3668.42 4782 3671.66 4782 3678.68 c
-4782 3715.76 l
-4782 3737 4774.91 3747.8 4760.92 3747.8 c
-4750.48 3747.8 4741.3 3743.12 4731.58 3732.68 c
-4728.34 3742.94 4722.22 3747.8 4712.5 3747.8 c
-4704.31 3747.8 4699.57 3745.46 4684.28 3733.94 c
-4684.28 3747.44 l
-4683.34 3747.8 l
-4674.16 3744.38 4668.04 3742.4 4658.14 3739.7 c
-h
-4795.04 3665 m
-f*
-4868.44 3694.52 m
-4859.8 3680.84 4852.06 3675.2 4840.54 3675.2 c
-4830.64 3675.2 4823.08 3680.02 4817.86 3690.02 c
-4814.26 3697.08 4812.82 3703.42 4812.46 3715 c
-4867.9 3715 l
-4866.46 3726.63 4864.66 3731.82 4860.16 3737.54 c
-4854.76 3744.02 4846.48 3747.8 4837.12 3747.8 c
-4814.8 3747.8 4799.5 3729.8 4799.5 3703.52 c
-4799.5 3678.68 4812.46 3663.2 4833.16 3663.2 c
-4850.44 3663.2 4863.76 3673.82 4871.32 3693.26 c
-h
-4812.82 3720 m
-4814.8 3734.66 4820.92 3740.8 4831.9 3740.8 c
-4842.88 3740.8 4847.2 3735.74 4849.54 3720 c
-h
-4874.92 3665 m
-f*
-2884.26 1356.36 m
-2873.64 1345.2 2867.88 1340.88 2859.06 1337.46 c
-2853.84 1335.3 2847.9 1334.58 2842.86 1334.58 c
-2830.98 1334.58 2819.64 1340.74 2814.42 1349.88 c
-2809.2 1359.42 2807 1372.2 2807 1390.38 c
-2807 1427.64 2818.23 1447.7 2839.8 1447.7 c
-2848.26 1447.7 2856 1444.38 2863.74 1437.36 c
-2871.48 1430.52 2875.62 1424.4 2881.92 1410.72 c
-2886.42 1410.72 l
-2886.42 1453.16 l
-2881.56 1453.16 l
-2878.86 1446.43 2877.06 1444.56 2873.64 1444.56 c
-2871.84 1444.56 2869.5 1445.28 2865.36 1447.08 c
-2854.92 1451.4 2846.1 1453.7 2837.46 1453.7 c
-2801.64 1453.7 2775 1425.84 2775 1388.76 c
-2775 1351.68 2801.21 1325.58 2838.54 1325.58 c
-2859.24 1325.58 2871.48 1331.88 2889.66 1351.86 c
-h
-2895.96 1329 m
-f*
-2959.18 1326.66 m
-2966.78 1329.36 2971.02 1330.08 2982.5 1331.34 c
-2993.66 1332.6 l
-2993.66 1337 l
-2985.74 1337.35 2984 1339.63 2984 1347.18 c
-2984 1412 l
-2947.4 1412 l
-2947.4 1407.66 l
-2956.4 1406.94 2959 1404.78 2959 1397.04 c
-2959 1346.1 l
-2952.88 1340.16 2949.18 1338.48 2943.8 1338.48 c
-2936.42 1338.48 2934 1342 2934 1350.96 c
-2934 1412 l
-2899.88 1412 l
-2899.88 1407.66 l
-2907.26 1406.22 2909 1404.6 2909 1397.04 c
-2909 1351.68 l
-2909 1335.84 2917.89 1326.48 2932.64 1326.48 c
-2942.16 1326.48 2948.56 1329.36 2959.18 1338.36 c
-h
-2997.08 1329 m
-f*
-3035.28 1412 m
-3001.22 1412 l
-3001.22 1407.66 l
-3008.96 1406.58 3011 1404.24 3011 1397.04 c
-3011 1344.12 l
-3011 1336.74 3009.19 1334.76 3001.22 1333.32 c
-3001.22 1329 l
-3049.1 1329 l
-3049.1 1333.32 l
-3038.12 1334.04 3036 1336.38 3036 1347.54 c
-3036 1381.56 l
-3036 1390.92 3041.02 1398.66 3046.94 1398.66 c
-3048.38 1398.66 3050 1397.4 3051.98 1394.52 c
-3055.4 1389.66 3058.1 1388.04 3062.78 1388.04 c
-3069.44 1388.04 3074.12 1393.08 3074.12 1399.92 c
-3074.12 1408.2 3068 1414.16 3059.54 1414.16 c
-3050.55 1414.16 3043.73 1409.47 3035.28 1397.22 c
-h
-3075.92 1329 m
-f*
-3116.28 1412 m
-3082.22 1412 l
-3082.22 1407.66 l
-3089.96 1406.58 3092 1404.24 3092 1397.04 c
-3092 1344.12 l
-3092 1336.74 3090.19 1334.76 3082.22 1333.32 c
-3082.22 1329 l
-3130.1 1329 l
-3130.1 1333.32 l
-3119.12 1334.04 3117 1336.38 3117 1347.54 c
-3117 1381.56 l
-3117 1390.92 3122.02 1398.66 3127.94 1398.66 c
-3129.38 1398.66 3131 1397.4 3132.98 1394.52 c
-3136.4 1389.66 3139.1 1388.04 3143.78 1388.04 c
-3150.44 1388.04 3155.12 1393.08 3155.12 1399.92 c
-3155.12 1408.2 3149 1414.16 3140.54 1414.16 c
-3131.55 1414.16 3124.73 1409.47 3116.28 1397.22 c
-h
-3156.92 1329 m
-f*
-3228.36 1351.5 m
-3220.98 1342.68 3215.58 1339.48 3207.84 1339.48 c
-3201 1339.48 3195.6 1342.53 3192 1348.62 c
-3188.58 1354.36 3187.14 1360.45 3186.42 1373 c
-3231.78 1373 l
-3230.7 1387.99 3228 1396.3 3222.42 1403.34 c
-3216.66 1410.36 3208.2 1414.16 3198.12 1414.16 c
-3175.62 1414.16 3160.5 1396.33 3160.5 1370.04 c
-3160.5 1343.76 3175.26 1326.48 3197.58 1326.48 c
-3212.16 1326.48 3220.98 1332.06 3232.68 1348.98 c
-h
-3185.52 1380 m
-3186.06 1401.42 3189.3 1408.16 3198.12 1408.16 c
-3203.34 1408.16 3206.58 1405.42 3208.02 1400.1 c
-3208.92 1396.68 3209.28 1391.64 3209.64 1382.46 c
-3209.64 1380 l
-h
-3235.92 1329 m
-f*
-3273.82 1412 m
-3239.78 1412 l
-3239.78 1407.66 l
-3247.7 1406.4 3249 1404.6 3249 1397.04 c
-3249 1344.12 l
-3249 1336.56 3247.61 1334.94 3239.78 1333.32 c
-3239.78 1329 l
-3283.16 1329 l
-3283.16 1333.32 l
-3276.5 1334.22 3274 1336.92 3274 1343.58 c
-3274 1391.64 l
-3274 1392.36 3275.4 1394.16 3277.4 1395.96 c
-3281.36 1399.92 3285.68 1402.16 3290 1402.16 c
-3296.12 1402.16 3299 1397.27 3299 1387.14 c
-3299 1343.58 l
-3299 1336.92 3296.71 1334.04 3290.72 1333.32 c
-3290.72 1329 l
-3333.02 1329 l
-3333.02 1333.32 l
-3326 1333.86 3324 1336.02 3324 1343.58 c
-3324 1388.76 l
-3324 1404.24 3314.54 1414.16 3299.9 1414.16 c
-3288.96 1414.16 3280.57 1409.11 3273.82 1398.48 c
-h
-3336.08 1329 m
-f*
-3390.9 1412 m
-3374 1412 l
-3374 1442.4 l
-3369.48 1442.4 l
-3358.5 1426.92 3351.3 1418.82 3339.6 1408.92 c
-3339.6 1404 l
-3349 1404 l
-3349 1345.74 l
-3349 1334.04 3356.73 1326.84 3369.12 1326.84 c
-3381.18 1326.84 3388.38 1332.24 3395.76 1347 c
-3391.26 1348.98 l
-3387.66 1342.14 3384.78 1339.84 3381 1339.84 c
-3375.96 1339.84 3374 1342.83 3374 1349.88 c
-3374 1404 l
-3390.9 1404 l
-h
-3395.94 1329 m
-f*
-3441 1329 m
-f*
-3545.94 1451 m
-3443.88 1451 l
-3443.88 1446 l
-3456.3 1445.29 3460 1442.63 3460 1433.4 c
-3460 1346.28 l
-3460 1336.92 3457.44 1334.94 3443.88 1333.5 c
-3443.88 1329 l
-3508.68 1329 l
-3508.68 1334 l
-3492.12 1334.69 3489 1336.77 3489 1346.28 c
-3489 1388.22 l
-3507.28 1387.86 3513.91 1381.2 3516.42 1360.32 c
-3520.92 1360.32 l
-3520.92 1421.16 l
-3516.42 1421.16 l
-3513.19 1400.64 3506.92 1394.34 3489 1394.34 c
-3489 1436.1 l
-3489 1442.76 3491.32 1445 3500.4 1445 c
-3517.14 1445 3527.58 1441.8 3533.16 1435.2 c
-3537.12 1430.7 3539.1 1425.84 3541.62 1414.5 c
-3545.94 1414.5 l
-h
-3550.98 1329 m
-f*
-3590.28 1412 m
-3556.22 1412 l
-3556.22 1407.66 l
-3563.96 1406.58 3566 1404.24 3566 1397.04 c
-3566 1344.12 l
-3566 1336.74 3564.19 1334.76 3556.22 1333.32 c
-3556.22 1329 l
-3604.1 1329 l
-3604.1 1333.32 l
-3593.12 1334.04 3591 1336.38 3591 1347.54 c
-3591 1381.56 l
-3591 1390.92 3596.02 1398.66 3601.94 1398.66 c
-3603.38 1398.66 3605 1397.4 3606.98 1394.52 c
-3610.4 1389.66 3613.1 1388.04 3617.78 1388.04 c
-3624.44 1388.04 3629.12 1393.08 3629.12 1399.92 c
-3629.12 1408.2 3623 1414.16 3614.54 1414.16 c
-3605.55 1414.16 3598.73 1409.47 3590.28 1397.22 c
-h
-3630.92 1329 m
-f*
-3716.14 1340.52 m
-3714.34 1338.72 l
-3713.8 1338.18 3713.26 1338 3712.36 1338 c
-3709.84 1338 3709 1339.44 3709 1342.5 c
-3709 1389.48 l
-3709 1404.78 3695.16 1414.16 3672.94 1414.16 c
-3652.6 1414.16 3638.92 1404.97 3638.92 1391.46 c
-3638.92 1383.9 3643.24 1379.58 3650.62 1379.58 c
-3657.82 1379.58 3662.86 1383.9 3662.86 1390.02 c
-3662.86 1392.54 3661.96 1394.88 3659.62 1397.76 c
-3658 1399.56 3657.46 1400.64 3657.46 1401.72 c
-3657.46 1405.5 3662.32 1408.16 3668.8 1408.16 c
-3679.42 1408.16 3684 1403.37 3684 1392.54 c
-3684 1379.4 l
-3662.89 1372.92 3654.41 1369.68 3647.56 1365.18 c
-3639.46 1359.78 3636 1353.48 3636 1345.56 c
-3636 1334.58 3644.07 1326.48 3655.3 1326.48 c
-3665.74 1326.48 3674.02 1330.08 3683.92 1339.08 c
-3685.9 1329.9 3689.86 1326.48 3698.68 1326.48 c
-3706.42 1326.48 3712 1329.36 3718.84 1336.74 c
-h
-3684 1347 m
-3679.04 1341.42 3675.37 1339.26 3670.96 1339.26 c
-3665.56 1339.26 3662 1344.12 3662 1351.32 c
-3662 1361.76 3669.57 1369.14 3684 1373.1 c
-h
-3721 1329 m
-f*
-3758.46 1412 m
-3723.73 1412 l
-3723.73 1407.66 l
-3731.65 1406.58 3734 1404.42 3734 1397.04 c
-3734 1344.12 l
-3734 1336.74 3731.95 1334.76 3723.73 1333.32 c
-3723.73 1329 l
-3766.93 1329 l
-3766.93 1333.32 l
-3760.63 1334.22 3759 1336.74 3759 1343.58 c
-3759 1391.64 l
-3759 1392.54 3761.51 1395.78 3763.51 1397.76 c
-3767.29 1400.64 3770.53 1402.16 3773.77 1402.16 c
-3780.79 1402.16 3784 1398 3784 1387.14 c
-3784 1343.58 l
-3784 1336.2 3781.9 1333.86 3774.85 1333.32 c
-3774.85 1329 l
-3816.97 1329 l
-3816.97 1333.32 l
-3810.67 1334.04 3809 1336.74 3809 1343.58 c
-3809 1391.64 l
-3809 1392.54 3811.43 1395.6 3813.37 1397.58 c
-3817.33 1400.64 3820.57 1402.16 3823.81 1402.16 c
-3830.65 1402.16 3833 1397.82 3833 1387.14 c
-3833 1343.58 l
-3833 1336.02 3831.1 1333.86 3824.53 1333.32 c
-3824.53 1329 l
-3867.37 1329 l
-3867.37 1333 l
-3860.35 1333.37 3858 1335.6 3858 1343.58 c
-3858 1388.76 l
-3858 1404.24 3848.6 1414.16 3834.07 1414.16 c
-3823.81 1414.16 3816.97 1410.01 3807.61 1398.48 c
-3802.21 1409.82 3795.91 1414.16 3784.57 1414.16 c
-3773.2 1414.16 3765.21 1409.29 3758.46 1398.48 c
-h
-3870.94 1329 m
-f*
-3943.36 1351.5 m
-3935.98 1342.68 3930.58 1339.48 3922.84 1339.48 c
-3916 1339.48 3910.6 1342.53 3907 1348.62 c
-3903.58 1354.36 3902.14 1360.45 3901.42 1373 c
-3946.78 1373 l
-3945.7 1387.99 3943 1396.3 3937.42 1403.34 c
-3931.66 1410.36 3923.2 1414.16 3913.12 1414.16 c
-3890.62 1414.16 3875.5 1396.33 3875.5 1370.04 c
-3875.5 1343.76 3890.26 1326.48 3912.58 1326.48 c
-3927.16 1326.48 3935.98 1332.06 3947.68 1348.98 c
-h
-3900.52 1380 m
-3901.06 1401.42 3904.3 1408.16 3913.12 1408.16 c
-3918.34 1408.16 3921.58 1405.42 3923.02 1400.1 c
-3923.92 1396.68 3924.28 1391.64 3924.64 1382.46 c
-3924.64 1380 l
-h
-3950.92 1329 m
-f*
-1 i
-2765.75 1294.55 1184.4 15.5999 re
-f
-1 g
-3371.75 1520.15 m
-3538.55 1673.75 l
-3455.75 1673.75 l
-3455.75 1824.95 l
-3290.15 1824.95 l
-3290.15 1673.75 l
-3208.55 1673.75 l
-f*
-0 g
-3371.75 1520.15 m
-3538.55 1673.75 l
-3455.75 1673.75 l
-3455.75 1824.95 l
-3290.15 1824.95 l
-3290.15 1673.75 l
-3208.55 1673.75 l
-3371.75 1520.15 l
-3371.75 1533.35 l
-3233.75 1662.95 l
-3299.75 1662.95 l
-3299.75 1814.15 l
-3446.15 1814.15 l
-3446.15 1662.95 l
-3513.35 1662.95 l
-3371.75 1533.35 l
-3371.75 1520.15 l
-f*
-0.201248 i
-1610.33 1522 m
-1496.22 1522 l
-1496.22 1517 l
-1510.11 1516.2 1514 1513.18 1514 1502.72 c
-1514 1405.32 l
-1514 1394.85 1511.17 1392.64 1496.22 1391.03 c
-1496.22 1386 l
-1568.67 1386 l
-1568.67 1391 l
-1550.15 1391.81 1547 1394.23 1547 1405.32 c
-1547 1452.21 l
-1567.22 1451.81 1574.55 1444.36 1577.32 1421.02 c
-1582.35 1421.02 l
-1582.35 1489.04 l
-1577.32 1489.04 l
-1573.76 1466.1 1566.82 1459.05 1547 1459.05 c
-1547 1505.74 l
-1547 1513.19 1549.52 1515 1559.41 1515 c
-1578.13 1515 1589.8 1511.64 1596.04 1504.74 c
-1600.47 1499.71 1602.68 1494.27 1605.5 1481.59 c
-1610.33 1481.59 l
-h
-1615.96 1386 m
-f*
-1659.19 1479 m
-1620.84 1479 l
-1620.84 1473.95 l
-1629.49 1472.74 1632 1470.12 1632 1462.07 c
-1632 1402.9 l
-1632 1394.65 1629.93 1392.44 1620.84 1390.83 c
-1620.84 1386 l
-1674.37 1386 l
-1674.37 1390.83 l
-1662.09 1391.63 1660 1394.25 1660 1406.73 c
-1660 1444.76 l
-1660 1455.23 1665.49 1463.88 1671.95 1463.88 c
-1673.56 1463.88 1675.37 1462.47 1677.59 1459.25 c
-1681.41 1453.82 1684.43 1452.01 1689.66 1452.01 c
-1697.11 1452.01 1702.34 1457.64 1702.34 1465.29 c
-1702.34 1474.55 1695.5 1481.41 1686.04 1481.41 c
-1676.1 1481.41 1668.54 1476.12 1659.19 1462.27 c
-h
-1704.35 1386 m
-f*
-1799.19 1398.88 m
-1797.18 1396.87 l
-1796.57 1396.26 1795.97 1396.06 1794.96 1396.06 c
-1792.15 1396.06 1791 1397.67 1791 1401.09 c
-1791 1453.62 l
-1791 1470.73 1775.6 1481.42 1750.89 1481.42 c
-1728.15 1481.42 1712.85 1471.06 1712.85 1455.83 c
-1712.85 1447.38 1717.69 1442.55 1725.94 1442.55 c
-1733.99 1442.55 1739.62 1447.38 1739.62 1454.22 c
-1739.62 1457.04 1738.61 1459.66 1736 1462.88 c
-1734.19 1464.89 1733.58 1466.1 1733.58 1467.3 c
-1733.58 1471.53 1739.02 1474.42 1746.26 1474.42 c
-1758.14 1474.42 1763.86 1469.08 1763.86 1457.04 c
-1763.86 1442.35 l
-1739.91 1435.1 1730.29 1431.48 1722.51 1426.45 c
-1713.46 1420.41 1709 1413.37 1709 1404.52 c
-1709 1392.24 1718.27 1383.18 1731.17 1383.18 c
-1742.84 1383.18 1752.1 1387.21 1763.17 1397.27 c
-1765.38 1387.01 1769.81 1383.18 1779.67 1383.18 c
-1788.32 1383.18 1794.56 1386.4 1802.21 1394.65 c
-h
-1763 1406.13 m
-1757.55 1399.89 1753.52 1397.47 1748.68 1397.47 c
-1742.64 1397.47 1738 1402.91 1738 1410.96 c
-1738 1422.63 1746.61 1430.88 1763 1435.31 c
-h
-1804.62 1386 m
-f*
-1845.4 1479 m
-1806.7 1479 l
-1806.7 1473.95 l
-1815.55 1472.74 1818 1470.32 1818 1462.07 c
-1818 1402.9 l
-1818 1394.65 1815.74 1392.44 1806.7 1390.83 c
-1806.7 1386 l
-1855 1386 l
-1855 1390.83 l
-1847.95 1391.84 1846 1394.65 1846 1402.3 c
-1846 1456.03 l
-1846 1457.04 1848.87 1460.66 1851.18 1462.88 c
-1855.4 1466.1 1859.02 1468.42 1862.65 1468.42 c
-1870.5 1468.42 1874 1463.59 1874 1451 c
-1874 1402.3 l
-1874 1394.05 1871.68 1391.43 1863.85 1390.83 c
-1863.85 1386 l
-1910.95 1386 l
-1910.95 1390.83 l
-1903.9 1391.64 1902 1394.65 1902 1402.3 c
-1902 1456.03 l
-1902 1457.04 1904.73 1460.46 1906.92 1462.68 c
-1911.35 1466.1 1914.97 1468.42 1918.59 1468.42 c
-1926.24 1468.42 1929 1463.38 1929 1451 c
-1929 1402.3 l
-1929 1393.85 1926.85 1391.43 1919.4 1390.83 c
-1919.4 1386 l
-1967.3 1386 l
-1967.3 1391 l
-1959.45 1391.4 1957 1393.78 1957 1402.3 c
-1957 1452.81 l
-1957 1470.12 1946.43 1481.42 1930.07 1481.42 c
-1918.59 1481.42 1910.95 1476.73 1900.48 1463.68 c
-1894.44 1476.36 1887.4 1481.42 1874.72 1481.42 c
-1861.95 1481.42 1852.98 1475.91 1845.4 1463.68 c
-h
-1970.64 1386 m
-f*
-2050.9 1411.16 m
-2042.65 1401.29 2036.61 1397.18 2027.96 1397.18 c
-2020.31 1397.18 2014.27 1400.77 2010.25 1407.94 c
-2006.43 1414.54 2004.82 1421.56 2004.01 1436 c
-2054.73 1436 l
-2053.52 1452.36 2050.5 1461.43 2044.26 1469.12 c
-2037.82 1476.96 2028.36 1481.42 2017.09 1481.42 c
-1991.94 1481.42 1975.03 1461.4 1975.03 1431.88 c
-1975.03 1402.5 1991.53 1383.18 2016.49 1383.18 c
-2032.79 1383.18 2042.65 1389.42 2055.73 1408.34 c
-h
-2003 1443 m
-2003.61 1466.96 2007.23 1474.42 2017.09 1474.42 c
-2022.93 1474.42 2026.55 1471.38 2028.16 1465.49 c
-2029.17 1461.67 2029.57 1456.03 2029.97 1445.77 c
-2029.97 1443 l
-h
-2059.35 1386 m
-f*
-2156.16 1481.59 m
-2156.16 1525.22 l
-2150.37 1525.22 l
-2148.96 1519.82 2147.55 1518.42 2143.93 1518.42 c
-2142.12 1518.42 2139.7 1519.03 2135.47 1520.43 c
-2126.22 1523.86 2119.78 1525.02 2111.93 1525.02 c
-2084.56 1525.02 2068 1509.54 2068 1484.01 c
-2068 1478.98 2068.75 1474.75 2070.07 1470.73 c
-2074.29 1460.06 2085.16 1450.6 2102.27 1442.35 c
-2115.75 1435.91 l
-2133.46 1427.46 2138 1422.22 2138 1411.56 c
-2138 1397.67 2128.25 1389.18 2112.94 1389.18 c
-2101.26 1389.18 2091.6 1393.89 2083.96 1403.31 c
-2078.12 1410.75 2075.3 1417.6 2071.88 1431.88 c
-2066.04 1431.88 l
-2066.04 1382.18 l
-2071.88 1382.18 l
-2073.09 1387.41 2074.7 1389.02 2077.92 1389.02 c
-2079.53 1389.02 2081.74 1388.42 2086.17 1387.01 c
-2096.03 1383.59 2103.48 1382.18 2112.33 1382.18 c
-2142.12 1382.18 2162 1399.28 2162 1424.64 c
-2162 1439.73 2153.04 1454.83 2140.1 1461.27 c
-2110.52 1475.96 l
-2094.22 1484.01 2090 1488.84 2090 1498.7 c
-2090 1511.18 2098.37 1518.02 2111.93 1518.02 c
-2120.99 1518.02 2129.44 1514.47 2136.68 1507.55 c
-2143.53 1500.51 2146.75 1494.67 2150.77 1481.59 c
-h
-2170.89 1386 m
-f*
-2249.9 1411.16 m
-2241.65 1401.29 2235.61 1397.18 2226.96 1397.18 c
-2219.31 1397.18 2213.27 1400.77 2209.25 1407.94 c
-2205.43 1414.54 2203.82 1421.56 2203.01 1436 c
-2253.73 1436 l
-2252.52 1452.36 2249.5 1461.43 2243.26 1469.12 c
-2236.82 1476.96 2227.36 1481.42 2216.09 1481.42 c
-2190.94 1481.42 2174.03 1461.4 2174.03 1431.88 c
-2174.03 1402.5 2190.53 1383.18 2215.49 1383.18 c
-2231.79 1383.18 2241.65 1389.42 2254.73 1408.34 c
-h
-2202 1443 m
-2202.61 1466.96 2206.23 1474.42 2216.09 1474.42 c
-2221.93 1474.42 2225.55 1471.38 2227.16 1465.49 c
-2228.17 1461.67 2228.57 1456.03 2228.97 1445.77 c
-2228.97 1443 l
-h
-2258.35 1386 m
-f*
-2319.38 1479 m
-2300 1479 l
-2300 1512.79 l
-2295.43 1512.79 l
-2283.16 1495.48 2275.11 1486.42 2262.02 1475.35 c
-2262.02 1470 l
-2272 1470 l
-2272 1404.72 l
-2272 1391.64 2280.84 1383.59 2295.03 1383.59 c
-2308.51 1383.59 2316.56 1389.62 2324.81 1406.12 c
-2319.78 1408.34 l
-2315.76 1400.69 2312.54 1397.59 2308.31 1397.59 c
-2302.68 1397.59 2300 1401.09 2300 1409.34 c
-2300 1470 l
-2319.38 1470 l
-h
-2325.02 1386 m
-f*
-2375.31 1386 m
-f*
-2378.22 1522 m
-2378.22 1517 l
-2392.11 1516.2 2396 1512.98 2396 1502.72 c
-2396 1405.32 l
-2396 1395.06 2392.97 1392.64 2378.22 1391.03 c
-2378.22 1386 l
-2443.02 1386 l
-2477.03 1386 2500 1401.09 2500 1423.83 c
-2500 1433.09 2496.03 1441.14 2488.71 1447.38 c
-2481.66 1453.62 2474.82 1456.44 2460.73 1459.46 c
-2484.08 1466.3 2493 1474.55 2493 1489.84 c
-2493 1510.57 2474.39 1522 2440.41 1522 c
-h
-2428 1455.03 m
-2434.17 1455.03 l
-2454.9 1455.03 2465 1444.36 2465 1422.02 c
-2465 1402.5 2456.73 1393 2440.41 1393 c
-2431.55 1393 2428 1396.26 2428 1404.72 c
-h
-2428 1506.15 m
-2428 1513.39 2430.85 1516 2439 1516 c
-2453.08 1516 2460 1507.35 2460 1488.44 c
-2460 1467.3 2453.23 1461.67 2428 1461.07 c
-h
-2509.23 1386 m
-f*
-1 i
-0.564706 g
-2228.15 4743.35 m
-2030.15 4823.75 l
-2170.55 4948.55 l
-1944.95 4966.55 l
-2007.35 5121.35 l
-1790.15 5075.75 l
-1763.75 5236.55 l
-1586.15 5135.75 l
-1475.75 5276.15 l
-1364.15 5135.75 l
-1186.55 5236.55 l
-1160.15 5075.75 l
-940.55 5121.35 l
-1005.35 4966.55 l
-778.55 4948.55 l
-920.15 4823.75 l
-720.95 4743.35 l
-920.15 4666.55 l
-778.55 4540.55 l
-1005.35 4523.75 l
-940.55 4368.95 l
-1160.15 4413.35 l
-1186.55 4253.75 l
-1364.15 4353.35 l
-1475.75 4212.95 l
-1586.15 4353.35 l
-1763.75 4253.75 l
-1790.15 4413.35 l
-2007.35 4368.95 l
-1944.95 4523.75 l
-2170.55 4540.55 l
-2030.15 4666.55 l
-f*
-1 g
-2168.15 4803.35 m
-1970.15 4883.75 l
-2110.55 5008.55 l
-1884.95 5026.55 l
-1947.35 5181.35 l
-1730.15 5135.75 l
-1703.75 5296.55 l
-1526.15 5195.75 l
-1415.75 5336.15 l
-1304.15 5195.75 l
-1126.55 5296.55 l
-1100.15 5135.75 l
-880.55 5181.35 l
-945.35 5026.55 l
-718.55 5008.55 l
-860.15 4883.75 l
-660.95 4803.35 l
-860.15 4726.55 l
-718.55 4600.55 l
-945.35 4583.75 l
-880.55 4428.95 l
-1100.15 4473.35 l
-1126.55 4313.75 l
-1304.15 4413.35 l
-1415.75 4272.95 l
-1526.15 4413.35 l
-1703.75 4313.75 l
-1730.15 4473.35 l
-1947.35 4428.95 l
-1884.95 4583.75 l
-2110.55 4600.55 l
-1970.15 4726.55 l
-f*
-0 g
-2168.15 4803.35 m
-1970.15 4883.75 l
-2110.55 5008.55 l
-1884.95 5026.55 l
-1947.35 5181.35 l
-1730.15 5135.75 l
-1703.75 5296.55 l
-1526.15 5195.75 l
-1415.75 5336.15 l
-1304.15 5195.75 l
-1126.55 5296.55 l
-1100.15 5135.75 l
-880.55 5181.35 l
-945.35 5026.55 l
-718.55 5008.55 l
-860.15 4883.75 l
-660.95 4803.35 l
-860.15 4726.55 l
-718.55 4600.55 l
-945.35 4583.75 l
-880.55 4428.95 l
-1100.15 4473.35 l
-1126.55 4313.75 l
-1304.15 4413.35 l
-1415.75 4272.95 l
-1526.15 4413.35 l
-1703.75 4313.75 l
-1730.15 4473.35 l
-1947.35 4428.95 l
-1884.95 4583.75 l
-2110.55 4600.55 l
-1970.15 4726.55 l
-2168.15 4803.35 l
-2060.15 4804.55 l
-1894.55 4739.75 l
-2014.55 4632.95 l
-1827.35 4618.55 l
-1882.55 4481.75 l
-1697.75 4521.35 l
-1673.75 4376.15 l
-1516.55 4464.95 l
-1415.75 4337.75 l
-1313.75 4464.95 l
-1156.55 4376.15 l
-1132.55 4521.35 l
-946.55 4481.75 l
-1001.75 4618.55 l
-814.55 4632.95 l
-934.55 4739.75 l
-770.15 4804.55 l
-934.55 4870.55 l
-814.55 4976.15 l
-1001.75 4990.55 l
-946.55 5127.35 l
-1132.55 5088.95 l
-1156.55 5232.95 l
-1313.75 5144.15 l
-1415.75 5272.55 l
-1516.55 5144.15 l
-1673.75 5232.95 l
-1697.75 5088.95 l
-1882.55 5127.35 l
-1827.35 4990.55 l
-2014.55 4976.15 l
-1894.55 4870.55 l
-2060.15 4804.55 l
-2168.15 4803.35 l
-f*
-0.201248 i
-1328.58 5044 m
-1289.34 5044 l
-1289.34 5038.6 l
-1300.41 5037.6 1302.22 5036.39 1306.04 5027.54 c
-1281.89 4944.82 l
-1274.04 4918.46 1272.64 4916.24 1261.57 4914.03 c
-1261.57 4909 l
-1303.43 4909 l
-1303.43 4914.03 l
-1291.55 4915.04 1287.33 4918.06 1287.33 4925.91 c
-1287.33 4929.73 1288.53 4936.37 1290.95 4944.82 c
-1310.87 5016.47 l
-1362.59 4905.98 l
-1368.23 4905.98 l
-1397.01 5007.81 l
-1404.86 5034.38 1405.86 5035.99 1417.53 5038.6 c
-1417.53 5044 l
-1375.47 5044 l
-1375.47 5038.6 l
-1387.35 5037.6 1391.57 5034.38 1391.57 5026.73 c
-1391.57 5022.91 1390.16 5016.06 1387.95 5007.81 c
-1371.85 4950.05 l
-h
-1412.3 4909 m
-f*
-1475.8 4937.58 m
-1466.54 4923.69 1460.7 4919.38 1452.05 4919.38 c
-1443.6 4919.38 1439 4924.98 1439 4935.77 c
-1439 4938.99 1439.46 4941.6 1440.38 4945.63 c
-1461.31 4949.65 1471.17 4954.08 1481.23 4963.34 c
-1488.27 4969.78 1492 4977.22 1492 4984.47 c
-1492 4994.73 1483.19 5001.62 1470.97 5001.62 c
-1441.79 5001.62 1413 4968.99 1413 4935.97 c
-1413 4918.86 1425.88 4906.38 1443.4 4906.38 c
-1458.89 4906.38 1469.56 4914.23 1481.63 4934.16 c
-h
-1441.79 4952.07 m
-1449.03 4980.04 1458.29 4994.62 1467.95 4994.62 c
-1471.77 4994.62 1473 4992.64 1473 4988.49 c
-1473 4979.64 1469.78 4970.98 1463.72 4964.34 c
-1458.29 4958.51 1453.26 4955.69 1441.79 4952.07 c
-h
-1501.35 4909 m
-f*
-1504.22 4990.91 m
-1509.25 4990.91 1510.86 4990.71 1512.47 4989.3 c
-1516.7 4986.08 1519.52 4967.16 1520.12 4939.19 c
-1520.52 4923.49 l
-1520.52 4922.48 l
-1520.52 4922.28 1520.52 4919.26 1520.32 4915.44 c
-1520.12 4906.38 l
-1525.55 4906.38 l
-1537.02 4923.69 l
-1545.28 4937.58 1552.92 4951.06 1559.77 4963.74 c
-1564.39 4906.38 l
-1569.83 4906.38 l
-1607.06 4945.83 1624 4972.59 1624 4989.5 c
-1624 4996.14 1618.63 5001.62 1612.29 5001.62 c
-1606.25 5001.62 1601.02 4996.15 1601.02 4989.9 c
-1601.02 4986.88 1602.23 4984.27 1605.25 4980.04 c
-1608.06 4976.22 1609 4973.6 1609 4971.59 c
-1609 4965.55 1602.83 4955.89 1585.32 4935.16 c
-1578.88 5001.62 l
-1573.45 5001.62 l
-1556.55 4972.63 1553.33 4966.83 1542.06 4946.63 c
-1541.45 4971.59 1540.04 4984.67 1535.41 5001.98 c
-1527.16 5000.17 1520.92 4999.16 1504.22 4996.34 c
-h
-1635.23 4909 m
-f*
-1215.46 4781.9 m
-1190.3 4688.52 l
-1187.08 4677.65 1183.26 4674.84 1170.18 4674.03 c
-1170.18 4669 l
-1232.97 4669 l
-1232.97 4674 l
-1221.3 4674.61 1218.48 4676.22 1218.48 4682.69 c
-1218.48 4684.9 1218.88 4687.11 1220.09 4691.74 c
-1220.29 4692.75 l
-1220.49 4693.75 l
-1245.24 4784.11 l
-1248.26 4794.58 1251.28 4797.4 1261.55 4798.6 c
-1261.55 4804 l
-1218.88 4804 l
-1156.49 4707.04 l
-1145.63 4804 l
-1101.15 4804 l
-1101.15 4799 l
-1113.83 4798.36 1115.64 4797.51 1115.64 4791.56 c
-1115.64 4788.74 1114.84 4785.12 1113.43 4779.89 c
-1091.49 4704.82 l
-1083.44 4678.66 1082.03 4676.45 1071.16 4674.03 c
-1071.16 4669 l
-1112.82 4669 l
-1112.82 4674.03 l
-1099.94 4675.64 1096.72 4678.06 1096.72 4686.31 c
-1096.72 4689.73 1097.73 4694.76 1100.55 4704.82 c
-1120.87 4779.08 l
-1134.36 4666.59 l
-1139.99 4666.59 l
-h
-1255.91 4669 m
-f*
-1342.34 4694.56 m
-1334.09 4683.49 1331.07 4680.18 1327.85 4680.18 c
-1326.24 4680.18 1326 4681.51 1326 4683.49 c
-1326 4688.52 1327.66 4696.77 1332.28 4713.27 c
-1346.57 4760.77 l
-1324.23 4759.36 l
-1320.61 4747.49 l
-1318.8 4757.75 1314.37 4761.62 1305.71 4761.62 c
-1280.96 4761.62 1251 4723.18 1251 4691.94 c
-1251 4676.65 1259.56 4666.38 1272.51 4666.38 c
-1284.78 4666.38 1294.04 4673.63 1305.51 4692.95 c
-1303.1 4684.7 1303 4682.28 1303 4679.47 c
-1303 4672.02 1308.9 4666.18 1316.18 4666.18 c
-1325.64 4666.18 1334.89 4674.03 1346.57 4691.54 c
-h
-1308.53 4753.52 m
-1312.96 4753.12 1316.28 4749.5 1316.28 4744.07 c
-1316.28 4731.99 1309.5 4709.65 1301.49 4695.77 c
-1296.05 4685.91 1290.02 4680.38 1284.58 4680.38 c
-1279.35 4680.38 1276 4685.14 1276 4691.54 c
-1276 4702 1282.43 4722.13 1290.42 4737.02 c
-1296.46 4747.69 1303.1 4753.93 1308.53 4753.52 c
-h
-1355.62 4669 m
-f*
-1398.47 4761.98 m
-1377.94 4758.76 1370.09 4757.55 1359.63 4756.34 c
-1359.63 4751 l
-1368.68 4750.59 1370.5 4749.77 1370.5 4745.88 c
-1370.5 4743.86 1368.89 4736.62 1366.07 4726.15 c
-1345.94 4648.07 l
-1342.12 4634.79 1340.51 4632.8 1330.85 4633 c
-1330.85 4627 l
-1380.96 4627 l
-1380.96 4633 l
-1370.9 4633.21 1367.88 4634.65 1367.88 4639.62 c
-1367.88 4642.44 1369.29 4648.47 1373.11 4662.56 c
-1374.52 4667.39 1374.52 4667.79 1375.33 4670.81 c
-1382.37 4667.19 1384.78 4666.38 1389.01 4666.38 c
-1416.38 4666.38 1444.76 4702.81 1444.76 4737.63 c
-1444.76 4752.52 1436.3 4761.62 1423.02 4761.62 c
-1411.55 4761.62 1402.7 4755.28 1390.82 4738.83 c
-h
-1411.75 4747.69 m
-1416.98 4747.29 1420 4742.66 1419.6 4736.22 c
-1418.8 4722.93 1412.36 4703.01 1405.11 4689.93 c
-1398.87 4679.06 1392.43 4673.38 1385.59 4673.38 c
-1381.16 4673.38 1377.74 4676.62 1377.74 4680.67 c
-1377.74 4684.09 1379.95 4692.34 1385.39 4710.66 c
-1389.82 4725.35 1391.63 4730.38 1394.65 4735.01 c
-1399.68 4742.86 1406.52 4748.09 1411.75 4747.69 c
-h
-1455.62 4669 m
-f*
-1498.47 4761.98 m
-1477.94 4758.76 1470.09 4757.55 1459.63 4756.34 c
-1459.63 4751 l
-1468.68 4750.59 1470.5 4749.77 1470.5 4745.88 c
-1470.5 4743.86 1468.89 4736.62 1466.07 4726.15 c
-1445.94 4648.07 l
-1442.12 4634.79 1440.51 4632.8 1430.85 4633 c
-1430.85 4627 l
-1480.96 4627 l
-1480.96 4633 l
-1470.9 4633.21 1467.88 4634.65 1467.88 4639.62 c
-1467.88 4642.44 1469.29 4648.47 1473.11 4662.56 c
-1474.52 4667.39 1474.52 4667.79 1475.33 4670.81 c
-1482.37 4667.19 1484.78 4666.38 1489.01 4666.38 c
-1516.38 4666.38 1544.76 4702.81 1544.76 4737.63 c
-1544.76 4752.52 1536.3 4761.62 1523.02 4761.62 c
-1511.55 4761.62 1502.7 4755.28 1490.82 4738.83 c
-h
-1511.75 4747.69 m
-1516.98 4747.29 1520 4742.66 1519.6 4736.22 c
-1518.8 4722.93 1512.36 4703.01 1505.11 4689.93 c
-1498.87 4679.06 1492.43 4673.38 1485.59 4673.38 c
-1481.16 4673.38 1477.74 4676.62 1477.74 4680.67 c
-1477.74 4684.09 1479.95 4692.34 1485.39 4710.66 c
-1489.82 4725.35 1491.63 4730.38 1494.65 4735.01 c
-1499.68 4742.86 1506.52 4748.09 1511.75 4747.69 c
-h
-1555.62 4669 m
-f*
-1598.47 4697.38 m
-1595.65 4693.35 l
-1590.42 4685.5 1585.79 4681.19 1582.77 4681.19 c
-1581.16 4681.19 1580 4682.64 1580 4684.29 c
-1580 4686.11 1580.87 4691.34 1581.56 4694.76 c
-1599.88 4761.98 l
-1589.17 4759.56 1575.29 4757.55 1559.82 4756.34 c
-1559.82 4751 l
-1561.84 4751 l
-1567.88 4751 1571.7 4748.96 1571.7 4745.07 c
-1571.7 4743.46 1570.84 4740.44 1569.69 4737.02 c
-1558.02 4693.75 l
-1556.41 4687.92 1556 4682.69 1556 4679.87 c
-1556 4672.22 1561.39 4667.19 1569.29 4667.19 c
-1581.36 4667.19 1588.81 4673.23 1602.9 4694.56 c
-h
-1593.84 4807.02 m
-1587 4807.02 1581 4800.61 1581 4793.57 c
-1581 4785.72 1586.53 4780.02 1594.04 4780.02 c
-1601.69 4780.02 1608 4785.71 1608 4792.97 c
-1608 4800.42 1601.64 4807.02 1593.84 4807.02 c
-h
-1610.95 4669 m
-f*
-1705.79 4696.17 m
-1697.74 4683.69 1695.12 4681.19 1691.7 4681.19 c
-1690.09 4681.19 1689 4682.47 1689 4684.29 c
-1689 4686.31 1690.18 4690.53 1693.91 4701.8 c
-1701.16 4723.74 l
-1704.38 4733.2 1706 4742.05 1706 4746.88 c
-1706 4756.74 1700.91 4761.62 1691.7 4761.62 c
-1684.25 4761.62 1677.01 4758.73 1671.58 4753.73 c
-1664.13 4746.68 1660.31 4741.85 1646.82 4721.93 c
-1659.7 4761.78 l
-1646.82 4758.96 1630.72 4756.38 1619.45 4755.98 c
-1619.45 4751.04 l
-1627.9 4750.83 1630.32 4749.8 1630.32 4745.88 c
-1630.32 4743.46 1627.5 4732.8 1621.06 4710.05 c
-1616.43 4693.75 1615.02 4688.52 1609.79 4669 c
-1634.14 4669 l
-1643.6 4703.82 1650.85 4721.32 1663.32 4737.63 c
-1667.35 4743.06 1673.59 4747.62 1677.21 4747.62 c
-1679.83 4747.62 1682 4745.54 1682 4743.26 c
-1682 4742.66 1681.69 4741.05 1681.24 4739.03 c
-1670.17 4705.63 l
-1666.95 4695.97 1665 4684.5 1665 4679.26 c
-1665 4671.62 1669.86 4667.19 1678.22 4667.19 c
-1690.29 4667.19 1698.54 4674.03 1710.22 4693.55 c
-h
-1722.89 4669 m
-f*
-1818.2 4755 m
-1795.86 4755 l
-1789.02 4760.07 1782.98 4761.62 1773.72 4761.62 c
-1748.97 4761.62 1729 4745.48 1729 4725.35 c
-1729 4715.09 1734.25 4707.84 1745.14 4703.21 c
-1728.64 4693.96 1726 4691.14 1726 4683.69 c
-1726 4677.25 1729.57 4673.43 1738.3 4670.41 c
-1725.82 4667.39 1721.8 4665.78 1716.97 4661.96 c
-1713.75 4659.14 1711 4654.31 1711 4649.48 c
-1711 4636.4 1725.9 4628 1749.37 4628 c
-1777.75 4628 1798 4640.54 1798 4658.33 c
-1798 4670.61 1789.81 4677.25 1767.48 4683.49 c
-1756.82 4686.51 l
-1750.38 4688.32 1747 4691.14 1747 4694.16 c
-1747 4697.38 1749.78 4700.61 1752.19 4700.61 c
-1753.19 4700.61 1754.6 4700.61 1756.21 4700.6 c
-1758.43 4699.99 1760.04 4699 1762.45 4699 c
-1771.31 4699 1780.36 4701.69 1788.01 4706.63 c
-1799.68 4713.27 1806 4723.54 1806 4735.61 c
-1806 4738.81 1805.57 4740.8 1804.71 4744 c
-1818.2 4744 l
-h
-1745.14 4667.79 m
-1747.56 4667.59 1762.85 4662.36 1767.28 4660.35 c
-1772.92 4657.53 1776 4654.11 1776 4648.88 c
-1776 4640.02 1766.97 4635 1751.38 4635 c
-1738.3 4635 1729 4641.44 1729 4650.69 c
-1729 4654.51 1730.83 4657.93 1734.88 4661.76 c
-1737.5 4664.37 1743.53 4667.99 1745.14 4667.79 c
-h
-1773.32 4754.62 m
-1778.55 4754.62 1782 4750.24 1782 4743.86 c
-1782 4737.02 1779.74 4727.36 1776.54 4719.92 c
-1772.31 4710.66 1767.08 4706 1760.84 4706 c
-1755.41 4706 1752 4710.24 1752 4717.9 c
-1752 4725.95 1755.6 4738.23 1760.04 4745.88 c
-1763.86 4752.52 1768.09 4754.62 1773.32 4754.62 c
-h
-1822.62 4669 m
-f*
-1 i
-32 w
-1580.15 6552.95 m
-1512.95 6454.55 1457.75 6062.15 1438.55 5537.75 c
-S
-1361.75 5567.75 m
-1438.55 5532.95 l
-1517.75 5561.75 l
-1432.55 5316.95 l
-f*
-1110.95 4252.55 m
-1026.95 4064.15 982.55 3862.55 982.55 3657.35 c
-982.55 2787.35 1758.95 2079.35 2723.75 2069.75 c
-S
-2663.75 1992.95 m
-2693.75 2070.95 l
-2661.35 2148.95 l
-2909.75 2075.75 l
-f*
-0.201248 i
-4161.33 5063 m
-4047.22 5063 l
-4047.22 5058 l
-4061.11 5057.2 4065 5054.18 4065 5043.72 c
-4065 4946.32 l
-4065 4935.85 4062.17 4933.64 4047.22 4932.03 c
-4047.22 4927 l
-4119.67 4927 l
-4119.67 4932 l
-4101.15 4932.81 4098 4935.23 4098 4946.32 c
-4098 4993.21 l
-4118.22 4992.81 4125.55 4985.36 4128.32 4962.02 c
-4133.35 4962.02 l
-4133.35 5030.04 l
-4128.32 5030.04 l
-4124.76 5007.1 4117.82 5000.05 4098 5000.05 c
-4098 5046.74 l
-4098 5054.19 4100.52 5056 4110.41 5056 c
-4129.13 5056 4140.8 5052.64 4147.04 5045.74 c
-4151.47 5040.71 4153.68 5035.27 4156.5 5022.59 c
-4161.33 5022.59 l
-h
-4166.96 4927 m
-f*
-4210.19 5020 m
-4171.84 5020 l
-4171.84 5014.95 l
-4180.49 5013.74 4183 5011.12 4183 5003.07 c
-4183 4943.9 l
-4183 4935.65 4180.93 4933.44 4171.84 4931.83 c
-4171.84 4927 l
-4225.37 4927 l
-4225.37 4931.83 l
-4213.09 4932.63 4211 4935.25 4211 4947.73 c
-4211 4985.76 l
-4211 4996.23 4216.49 5004.88 4222.95 5004.88 c
-4224.56 5004.88 4226.37 5003.47 4228.59 5000.25 c
-4232.41 4994.82 4235.43 4993.01 4240.66 4993.01 c
-4248.11 4993.01 4253.34 4998.64 4253.34 5006.29 c
-4253.34 5015.55 4246.5 5022.41 4237.04 5022.41 c
-4227.1 5022.41 4219.54 5017.12 4210.19 5003.27 c
-h
-4255.35 4927 m
-f*
-4350.19 4939.88 m
-4348.18 4937.87 l
-4347.57 4937.26 4346.97 4937.06 4345.96 4937.06 c
-4343.15 4937.06 4342 4938.67 4342 4942.09 c
-4342 4994.62 l
-4342 5011.73 4326.6 5022.42 4301.89 5022.42 c
-4279.15 5022.42 4263.85 5012.06 4263.85 4996.83 c
-4263.85 4988.38 4268.69 4983.55 4276.94 4983.55 c
-4284.99 4983.55 4290.62 4988.38 4290.62 4995.22 c
-4290.62 4998.04 4289.61 5000.66 4287 5003.88 c
-4285.19 5005.89 4284.58 5007.1 4284.58 5008.3 c
-4284.58 5012.53 4290.02 5015.42 4297.26 5015.42 c
-4309.14 5015.42 4314.86 5010.08 4314.86 4998.04 c
-4314.86 4983.35 l
-4290.91 4976.1 4281.29 4972.48 4273.51 4967.45 c
-4264.46 4961.41 4260 4954.37 4260 4945.52 c
-4260 4933.24 4269.27 4924.18 4282.17 4924.18 c
-4293.84 4924.18 4303.1 4928.21 4314.17 4938.27 c
-4316.38 4928.01 4320.81 4924.18 4330.67 4924.18 c
-4339.32 4924.18 4345.56 4927.4 4353.21 4935.65 c
-h
-4314 4947.13 m
-4308.55 4940.89 4304.52 4938.47 4299.68 4938.47 c
-4293.64 4938.47 4289 4943.91 4289 4951.96 c
-4289 4963.63 4297.61 4971.88 4314 4976.31 c
-h
-4355.62 4927 m
-f*
-4397.4 5020 m
-4358.7 5020 l
-4358.7 5014.95 l
-4367.55 5013.74 4370 5011.32 4370 5003.07 c
-4370 4943.9 l
-4370 4935.65 4367.74 4933.44 4358.7 4931.83 c
-4358.7 4927 l
-4407 4927 l
-4407 4931.83 l
-4399.95 4932.84 4398 4935.65 4398 4943.3 c
-4398 4997.03 l
-4398 4998.04 4400.87 5001.66 4403.18 5003.88 c
-4407.4 5007.1 4411.02 5009.42 4414.65 5009.42 c
-4422.5 5009.42 4426 5004.59 4426 4992 c
-4426 4943.3 l
-4426 4935.05 4423.68 4932.43 4415.85 4931.83 c
-4415.85 4927 l
-4462.95 4927 l
-4462.95 4931.83 l
-4455.9 4932.64 4454 4935.65 4454 4943.3 c
-4454 4997.03 l
-4454 4998.04 4456.73 5001.46 4458.92 5003.68 c
-4463.35 5007.1 4466.97 5009.42 4470.59 5009.42 c
-4478.24 5009.42 4481 5004.38 4481 4992 c
-4481 4943.3 l
-4481 4934.85 4478.85 4932.43 4471.4 4931.83 c
-4471.4 4927 l
-4519.3 4927 l
-4519.3 4932 l
-4511.45 4932.4 4509 4934.78 4509 4943.3 c
-4509 4993.81 l
-4509 5011.12 4498.43 5022.42 4482.07 5022.42 c
-4470.59 5022.42 4462.95 5017.73 4452.48 5004.68 c
-4446.44 5017.36 4439.4 5022.42 4426.72 5022.42 c
-4413.95 5022.42 4404.98 5016.91 4397.4 5004.68 c
-h
-4522.64 4927 m
-f*
-4601.9 4952.16 m
-4593.65 4942.29 4587.61 4938.18 4578.96 4938.18 c
-4571.31 4938.18 4565.27 4941.77 4561.25 4948.94 c
-4557.43 4955.54 4555.82 4962.56 4555.01 4977 c
-4605.73 4977 l
-4604.52 4993.36 4601.5 5002.43 4595.26 5010.12 c
-4588.82 5017.96 4579.36 5022.42 4568.09 5022.42 c
-4542.94 5022.42 4526.03 5002.4 4526.03 4972.88 c
-4526.03 4943.5 4542.53 4924.18 4567.49 4924.18 c
-4583.79 4924.18 4593.65 4930.42 4606.73 4949.34 c
-h
-4554 4984 m
-4554.61 5007.96 4558.23 5015.42 4568.09 5015.42 c
-4573.93 5015.42 4577.55 5012.38 4579.16 5006.49 c
-4580.17 5002.67 4580.57 4997.03 4580.97 4986.77 c
-4580.97 4984 l
-h
-4610.35 4927 m
-f*
-4707.16 5022.59 m
-4707.16 5066.22 l
-4701.37 5066.22 l
-4699.96 5060.82 4698.55 5059.42 4694.93 5059.42 c
-4693.12 5059.42 4690.7 5060.03 4686.47 5061.43 c
-4677.22 5064.86 4670.78 5066.02 4662.93 5066.02 c
-4635.56 5066.02 4619 5050.54 4619 5025.01 c
-4619 5019.98 4619.75 5015.75 4621.07 5011.73 c
-4625.29 5001.06 4636.16 4991.6 4653.27 4983.35 c
-4666.75 4976.91 l
-4684.46 4968.46 4689 4963.22 4689 4952.56 c
-4689 4938.67 4679.25 4930.18 4663.94 4930.18 c
-4652.26 4930.18 4642.6 4934.89 4634.96 4944.31 c
-4629.12 4951.75 4626.3 4958.6 4622.88 4972.88 c
-4617.04 4972.88 l
-4617.04 4923.18 l
-4622.88 4923.18 l
-4624.09 4928.41 4625.7 4930.02 4628.92 4930.02 c
-4630.53 4930.02 4632.74 4929.42 4637.17 4928.01 c
-4647.03 4924.59 4654.48 4923.18 4663.33 4923.18 c
-4693.12 4923.18 4713 4940.28 4713 4965.64 c
-4713 4980.73 4704.04 4995.83 4691.1 5002.27 c
-4661.52 5016.96 l
-4645.22 5025.01 4641 5029.84 4641 5039.7 c
-4641 5052.18 4649.37 5059.02 4662.93 5059.02 c
-4671.99 5059.02 4680.44 5055.47 4687.68 5048.55 c
-4694.53 5041.51 4697.75 5035.67 4701.77 5022.59 c
-h
-4721.89 4927 m
-f*
-4801.9 4952.16 m
-4793.65 4942.29 4787.61 4938.18 4778.96 4938.18 c
-4771.31 4938.18 4765.27 4941.77 4761.25 4948.94 c
-4757.43 4955.54 4755.82 4962.56 4755.01 4977 c
-4805.73 4977 l
-4804.52 4993.36 4801.5 5002.43 4795.26 5010.12 c
-4788.82 5017.96 4779.36 5022.42 4768.09 5022.42 c
-4742.94 5022.42 4726.03 5002.4 4726.03 4972.88 c
-4726.03 4943.5 4742.53 4924.18 4767.49 4924.18 c
-4783.79 4924.18 4793.65 4930.42 4806.73 4949.34 c
-h
-4754 4984 m
-4754.61 5007.96 4758.23 5015.42 4768.09 5015.42 c
-4773.93 5015.42 4777.55 5012.38 4779.16 5006.49 c
-4780.17 5002.67 4780.57 4997.03 4780.97 4986.77 c
-4780.97 4984 l
-h
-4810.35 4927 m
-f*
-4870.38 5020 m
-4851 5020 l
-4851 5053.79 l
-4846.43 5053.79 l
-4834.16 5036.48 4826.11 5027.42 4813.02 5016.35 c
-4813.02 5011 l
-4823 5011 l
-4823 4945.72 l
-4823 4932.64 4831.84 4924.59 4846.03 4924.59 c
-4859.51 4924.59 4867.56 4930.62 4875.81 4947.12 c
-4870.78 4949.34 l
-4866.76 4941.69 4863.54 4938.59 4859.31 4938.59 c
-4853.68 4938.59 4851 4942.09 4851 4950.34 c
-4851 5011 l
-4870.38 5011 l
-h
-4876.02 4927 m
-f*
-4927.31 4927 m
-f*
-5064.66 4932.03 m
-5055.81 4932.03 5053.59 4934.85 5042.72 4960 c
-4997.85 5065.82 l
-4992.21 5065.82 l
-4947.53 4955.58 l
-4939.89 4936.66 4937.47 4933.84 4927.81 4932.03 c
-4927.81 4927 l
-4968.66 4927 l
-4968.66 4932.03 l
-4956.79 4932.84 4952.16 4935.05 4952.16 4940.28 c
-4952.16 4942.9 4953.57 4947.53 4958 4958.6 c
-4961.02 4967 l
-5006.3 4967 l
-5013.14 4950.9 5015.56 4943.76 5015.56 4939.28 c
-5015.56 4934.85 5012.94 4933.04 5005.9 4932.63 c
-4999.46 4932.03 l
-4999.46 4927 l
-5064.66 4927 l
-h
-4964.04 4975 m
-4982.95 5023.4 l
-5003.28 4975 l
-h
-5071.3 4927 m
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 4344 a FF(Figure)39 b(15:)59 b(Tw)m(o)39
-b(F)-8 b(rameSets)40 b(in)e(the)h(pro)s(cess)g(of)g(b)s(eing)f(merged)h
-(using)f(astAddF)-8 b(rame.)67 b(F)-8 b(rameSet)40 b(B)0
-4456 y(is)f(b)s(eing)f(added)h(to)g(F)-8 b(rameSet)40
-b(A)f(b)m(y)g(supplying)f(a)h(new)g(Mapping)f(whic)m(h)h(in)m
-(ter-relates)i(a)e(nominated)0 4569 y(F)-8 b(rame)32
-b(in)e(A)h(\(here)g(n)m(um)m(b)s(er)f(1\))h(and)g(the)g(curren)m(t)f(F)
--8 b(rame)32 b(of)f(B.)g(In)f(the)h(merged)g(F)-8 b(rameSet,)33
-b(the)e(F)-8 b(rames)0 4682 y(con)m(tributed)25 b(b)m(y)h(B)f(will)h(b)
-s(e)e(re-n)m(um)m(b)s(ered)h(to)g(b)s(ecome)h(F)-8 b(rames)26
-b(4,)h(5)f(and)e(6.)40 b(The)24 b(base)i(F)-8 b(rame)26
-b(will)g(remain)0 4795 y(unc)m(hanged,)i(but)f(the)h(curren)m(t)g(F)-8
-b(rame)28 b(of)g(B)g(b)s(ecomes)g(the)g(new)f(curren)m(t)h(F)-8
-b(rame.)41 b(Note)29 b(that)f(F)-8 b(rameSet)29 b(B)0
-4908 y(itself)i(is)g(not)f(altered)i(b)m(y)e(this)g(pro)s(cess.)p
-eop end
-%%Page: 129 139
-TeXDict begin 129 138 bop 0 52 a Fy(14.7)93 b(Merging)31
-b(F)-8 b(rameSets)2624 b FF(129)227 351 y Ft(AstMapping)40
-b(*mapping;)227 551 y(...)227 750 y(astAddFrame\()f(frameseta,)g(1,)k
-(mapping,)d(framesetb)g(\);)0 1012 y FF(The)j(F)-8 b(rames)44
-b(acquired)f(b)m(y)g(\\frameseta")i(from)e(the)h(F)-8
-b(rameSet)44 b(b)s(eing)f(added)g(\(\\framesetb"\))i(are)e(re-)0
-1125 y(n)m(um)m(b)s(ered)31 b(so)h(that)g(they)g(retain)h(their)f
-(original)h(order)f(and)f(follo)m(w)i(on)f(consecutiv)m(ely)i(after)f
-(the)f(F)-8 b(rames)0 1238 y(that)39 b(w)m(ere)f(already)g(presen)m(t,)
-j(whose)c(indices)h(remain)g(unc)m(hanged.)63 b(The)38
-b(base)g(F)-8 b(rame)38 b(of)h(\\frameseta")0 1351 y(remains)31
-b(unc)m(hanged,)g(but)f(the)h(curren)m(t)f(F)-8 b(rame)32
-b(of)f(\\framesetb")h(b)s(ecomes)f(its)h(new)e(curren)m(t)h(F)-8
-b(rame.)43 b(All)0 1464 y(the)30 b(in)m(ter-relationships)i(b)s(et)m(w)
-m(een)e(F)-8 b(rames)31 b(in)f(b)s(oth)g(F)-8 b(rameSets)31
-b(remain)f(in)g(place)h(and)e(are)i(preserv)m(ed)f(in)0
-1577 y(the)h(merged)f(F)-8 b(rameSet.)0 1739 y(Note)41
-b(that)f(while)f(this)g(pro)s(cess)g(mo)s(di\014es)g(the)g(\014rst)g(F)
--8 b(rameSet)41 b(\(\\frameseta"\),)j(it)c(lea)m(v)m(es)i(the)d
-(original)0 1852 y(con)m(ten)m(ts)32 b(of)f(the)f(one)h(b)s(eing)f
-(added)f(\(\\framesetb"\))k(unc)m(hanged.)p eop end
-%%Page: 130 140
-TeXDict begin 130 139 bop 0 52 a FF(130)1350 b Fy(14)92
-b(HIGHER)30 b(LEVEL)g(OPERA)-8 b(TIONS)29 b(ON)h(FRAMESETS)p
-eop end
-%%Page: 131 141
-TeXDict begin 131 140 bop 3643 52 a FF(131)0 351 y Fz(15)135
-b(Sa)l(ving)45 b(and)g(Restoring)i(Ob)7 b(jects)45 b(\(Channels\))0
-593 y FF(F)-8 b(acilities)31 b(are)c(pro)m(vided)g(b)m(y)h(the)f(AST)g
-(library)g(for)g(p)s(erforming)f(input)h(and)f(output)h(\(I/O\))h(with)
-g(an)m(y)f(kind)0 706 y(of)35 b(Ob)5 b(ject.)53 b(This)34
-b(means)g(it)i(is)e(p)s(ossible)g(to)i(write)e(an)m(y)h(Ob)5
-b(ject)35 b(in)m(to)h(v)-5 b(arious)34 b(external)i(represen)m(tations)
-0 819 y(for)29 b(storage,)i(and)e(then)g(to)h(read)f(these)h(represen)m
-(tations)g(bac)m(k)g(in,)g(so)g(as)f(to)h(restore)g(the)g(original)g
-(Ob)5 b(ject.)0 932 y(T)m(ypically)-8 b(,)32 b(an)e(Ob)5
-b(ject)31 b(w)m(ould)f(b)s(e)g(written)g(b)m(y)h(one)f(program)g(and)g
-(read)g(bac)m(k)i(in)e(b)m(y)g(another.)0 1083 y(W)-8
-b(e)34 b(refer)e(to)h(\\external)g(represen)m(tations")h(in)e(the)h
-(plural)f(b)s(ecause)g(AST)g(is)g(designed)g(to)h(function)g(inde-)0
-1196 y(p)s(enden)m(tly)27 b(of)h(an)m(y)f(particular)h(data)g(storage)i
-(system.)39 b(This)27 b(means)h(that)g(Ob)5 b(jects)27
-b(ma)m(y)h(need)g(con)m(v)m(erting)0 1309 y(in)m(to)41
-b(a)g(n)m(um)m(b)s(er)e(of)i(di\013eren)m(t)f(external)i(represen)m
-(tations)f(in)f(order)g(to)h(b)s(e)f(compatible)h(with)f(\(sa)m(y\))i
-(the)0 1422 y(astronomical)32 b(data)f(storage)h(system)f(in)f(whic)m
-(h)g(they)g(will)h(reside.)0 1574 y(In)f(this)g(section,)i(w)m(e)f
-(discuss)e(the)i(basic)g(I/O)f(facilities)i(whic)m(h)f(supp)s(ort)d
-(external)j(represen)m(tations)h(based)0 1687 y(on)37
-b(a)g(textual)h(format)f(referred)f(to)i(as)f(the)g(AST)f(\\nativ)m(e)j
-(format".)61 b(These)36 b(are)h(implemen)m(ted)h(using)e(a)0
-1800 y(new)29 b(kind)f(of)h(Ob)5 b(ject|a)30 b(Channel.)39
-b(W)-8 b(e)31 b(will)e(examine)h(later)g(ho)m(w)f(to)h(use)f(other)g
-(represen)m(tations,)i(based)0 1913 y(on)g(an)f(XML)h(format)h(or)e(on)
-h(the)g(use)g(of)g(FITS)f(headers,)g(for)h(storing)g(Ob)5
-b(jects.)42 b(These)31 b(are)g(implemen)m(ted)0 2025
-y(using)f(more)g(sp)s(ecialised)h(forms)f(of)h(Channel)e(called)j
-(XmlChan)d(\()p Fu(x)p FF(18\))k(and)d(FitsChan)g(\()p
-Fu(x)p FF(16\).)0 2303 y Fw(15.1)112 b(The)38 b(Channel)h(Mo)s(del)0
-2513 y FF(The)22 b(b)s(est)h(w)m(a)m(y)h(to)g(start)f(thinking)g(ab)s
-(out)g(a)g(Channel)f(is)h(lik)m(e)i(a)e(C)g(\014le)g(stream,)i(and)d
-(to)i(think)f(of)g(the)g(pro)s(cess)0 2626 y(of)28 b(creating)h(a)f
-(Channel)f(as)h(that)g(of)g(op)s(ening)f(a)h(\014le)f(and)h(obtaining)g
-(a)g(FILE)f(p)s(oin)m(ter.)40 b(Subsequen)m(tly)-8 b(,)28
-b(y)m(ou)0 2739 y(can)j(read)f(and)g(write)g(Ob)5 b(jects)31
-b Fx(via)f FF(the)h(Channel.)0 2890 y(This)41 b(analogy)i(is)f(not)h
-(quite)f(p)s(erfect,)j(ho)m(w)m(ev)m(er,)h(b)s(ecause)c(a)g(Channel)f
-(has,)k(in)d(principle,)i(t)m(w)m(o)g(\\\014les")0 3003
-y(attac)m(hed)37 b(to)e(it.)54 b(One)34 b(is)h(used)f(when)g(reading,)i
-(and)e(the)h(other)g(when)e(writing.)54 b(These)35 b(are)g(termed)f
-(the)0 3116 y(Channel's)29 b Fx(sour)-5 b(c)g(e)32 b
-FF(and)d Fx(sink)h FF(resp)s(ectiv)m(ely)-8 b(.)43 b(In)29
-b(practice,)j(the)e(source)h(and)e(sink)h(ma)m(y)h(b)s(oth)e(b)s(e)g
-(the)i(same,)0 3229 y(in)d(whic)m(h)g(case)i(the)f(analogy)h(with)e
-(the)h(C)f(\014le)g(stream)h(is)g(correct,)h(but)e(this)g(need)h(not)f
-(alw)m(a)m(ys)j(b)s(e)c(so.)41 b(It)28 b(is)0 3342 y(not)j(necessarily)
-g(so)g(with)f(the)g(basic)h(Channel,)f(as)g(w)m(e)h(will)g(no)m(w)f
-(see)h(\()p Fu(x)p FF(15.2\).)0 3619 y Fw(15.2)112 b(Creating)38
-b(a)g(Channel)0 3830 y FF(The)25 b(pro)s(cess)h(of)g(creating)i(a)e
-(Channel)f(is)h(straigh)m(tforw)m(ard.)40 b(As)26 b(y)m(ou)h(migh)m(t)f
-(exp)s(ect,)i(it)e(uses)g(the)g(construc-)0 3942 y(tor)31
-b(function)f(astChannel:)227 4147 y Ft(#include)41 b("ast.h")227
-4247 y(AstChannel)f(*channel;)227 4446 y(...)227 4646
-y(channel)h(=)i(astChannel\()c(NULL,)j(NULL,)f("")i(\);)0
-4864 y FF(The)35 b(\014rst)f(t)m(w)m(o)j(argumen)m(ts)e(to)h
-(astChannel)g(sp)s(ecify)e(the)i(external)g(source)f(and)g(sink)g(that)
-h(the)f(Channel)0 4977 y(is)f(to)g(use.)50 b(There)34
-b(argumen)m(ts)g(are)g(p)s(oin)m(ters)f(to)i(C)e(functions)g(and)g(w)m
-(e)h(will)g(examine)h(their)f(use)f(in)g(more)0 5090
-y(detail)f(later)f(\()p Fu(x)p FF(15.13)i(and)d Fu(x)p
-FF(15.14\).)0 5241 y(In)42 b(this)i(v)m(ery)f(simple)g(example)h(w)m(e)
-g(ha)m(v)m(e)g(supplied)e(NULL)h(p)s(oin)m(ters)g(for)g(b)s(oth)g(the)g
-(source)g(and)g(sink)0 5354 y(functions.)65 b(This)38
-b(requests)h(the)g(default)g(b)s(eha)m(viour,)h(whic)m(h)f(means)f
-(that)i(textual)g(input)d(will)i(b)s(e)g(read)0 5467
-y(from)32 b(the)h(program's)g(standard)e(input)h(stream)h(\(t)m
-(ypically)-8 b(,)36 b(this)d(means)f(y)m(our)h(k)m(eyb)s(oard\))g
-(while)f(textual)0 5580 y(output)h(will)h(go)g(to)g(the)g(standard)f
-(output)g(stream)h(\(t)m(ypically)h(app)s(earing)e(on)h(y)m(our)f
-(screen\).)51 b(On)32 b(UNIX)0 5693 y(systems,)f(of)f(course,)h(either)
-g(of)f(these)h(streams)g(can)f(easily)i(b)s(e)e(redirected)g(to)i
-(\014les.)p eop end
-%%Page: 132 142
-TeXDict begin 132 141 bop 0 52 a FF(132)1228 b Fy(15)92
-b(SA)-10 b(VING)30 b(AND)h(RESTORING)e(OBJECTS)g(\(CHANNELS\))0
-351 y Fw(15.3)112 b(W)-9 b(riting)37 b(Ob)6 b(jects)38
-b(to)f(a)h(Channel)0 596 y FF(The)d(pro)s(cess)g(of)g(sa)m(ving)i(Ob)5
-b(jects)35 b(is)g(v)m(ery)h(straigh)m(tforw)m(ard.)57
-b(Y)-8 b(ou)36 b(can)f(simply)g(write)h(an)m(y)f(Ob)5
-b(ject)36 b(to)g(a)0 709 y(Channel)30 b(using)f(the)i(astW)-8
-b(rite)32 b(function,)f(as)f(follo)m(ws:)227 1006 y Ft(int)43
-b(nobj;)227 1105 y(AstObject)d(*object;)227 1305 y(...)227
-1504 y(nobj)i(=)h(astWrite\()d(channel,)h(object)g(\);)0
-1814 y FF(The)33 b(e\013ect)i(of)f(this)f(will)h(b)s(e)e(to)j(pro)s
-(duce)d(a)i(textual)g(description)g(of)g(the)f(Ob)5 b(ject)34
-b(whic)m(h)f(will)h(app)s(ear,)g(b)m(y)0 1927 y(default,)c(on)e(y)m
-(our)h(program's)g(standard)f(output)g(stream.)41 b(An)m(y)29
-b(class)g(of)g(Ob)5 b(ject)29 b(ma)m(y)h(b)s(e)e(con)m(v)m(erted)i(in)m
-(to)0 2040 y(text)h(in)f(this)h(w)m(a)m(y)-8 b(.)0 2218
-y(astW)g(rite)31 b(returns)d(a)h(coun)m(t)h(of)f(the)g(n)m(um)m(b)s(er)
-f(of)h(Ob)5 b(jects)29 b(written.)40 b(Usually)-8 b(,)31
-b(this)d(will)i(b)s(e)e(one,)i(unless)e(the)0 2331 y(Ob)5
-b(ject)34 b(supplied)e(cannot)j(b)s(e)e(represen)m(ted.)51
-b(With)34 b(a)g(basic)h(Channel)e(all)h(Ob)5 b(jects)34
-b(can)g(b)s(e)f(represen)m(ted,)0 2444 y(so)40 b(a)g(v)-5
-b(alue)40 b(of)g(one)g(will)g(alw)m(a)m(ys)h(b)s(e)e(returned)g(unless)
-g(there)h(has)f(b)s(een)g(an)h(error.)68 b(W)-8 b(e)41
-b(will)f(see)g(later,)0 2557 y(ho)m(w)m(ev)m(er,)31 b(that)f(more)f(sp)
-s(ecialised)h(forms)f(of)g(Channel)g(ma)m(y)h(imp)s(ose)f(restrictions)
-h(on)f(the)g(kind)g(of)g(Ob)5 b(ject)0 2670 y(y)m(ou)31
-b(can)g(write)g(\()p Fu(x)p FF(17.2\).)45 b(In)30 b(suc)m(h)h(cases,)h
-(astW)-8 b(rite)33 b(ma)m(y)e(return)f(zero)h(to)h(indicate)g(that)f
-(the)g(Ob)5 b(ject)31 b(w)m(as)0 2783 y(not)g(acceptable.)0
-3129 y Fw(15.4)112 b(Reading)39 b(Ob)6 b(jects)38 b(from)f(a)h(Channel)
-0 3374 y FF(Before)31 b(discussing)f(the)h(format)g(of)f(the)h(output)f
-(pro)s(duced)f(ab)s(o)m(v)m(e)j(\()p Fu(x)p FF(15.3\),)h(let)f(us)d
-(consider)i(ho)m(w)f(to)i(read)0 3487 y(it)40 b(bac)m(k,)i(so)d(as)h
-(to)g(reconstruct)f(the)g(original)i(Ob)5 b(ject.)67
-b(Naturally)-8 b(,)43 b(w)m(e)c(w)m(ould)g(\014rst)g(need)g(to)h(sa)m
-(v)m(e)g(the)0 3600 y(output)30 b(in)h(a)g(\014le.)41
-b(On)30 b(UNIX)h(systems,)g(w)m(e)g(can)g(do)g(that)g(simply)g(b)m(y)f
-(redirecting)h(standard)f(output)h(to)g(a)0 3713 y(\014le)f(using)g(a)h
-(shell)g(command)f(lik)m(e:)227 4010 y Ft(program1)41
-b(>file)0 4320 y FF(Within)32 b(a)g(subsequen)m(t)e(program,)i(w)m(e)g
-(can)g(read)f(this)h(Ob)5 b(ject)32 b(bac)m(k)g(in)f(b)m(y)g(using)g
-(the)h(astRead)h(function,)0 4432 y(ha)m(ving)e(\014rst)f(created)h(a)g
-(suitable)g(Channel:)227 4729 y Ft(object)41 b(=)j(astRead\()c(channel)
-h(\);)0 5039 y FF(By)25 b(default,)i(this)e(function)g(will)h(read)f
-(from)f(the)i(standard)e(input)g(stream)i(\(the)g(default)f(source)h
-(for)e(a)i(basic)0 5152 y(Channel\),)32 b(so)g(w)m(e)g(w)m(ould)g(need)
-g(to)g(ensure)f(that)i(our)e(second)h(program)g(reads)f(its)i(input)d
-(from)i(the)g(\014le)g(in)0 5265 y(whic)m(h)25 b(the)h(Ob)5
-b(ject)26 b(description)f(is)h(stored.)39 b(On)24 b(UNIX)i(systems,)h
-(w)m(e)f(could)f(again)i(use)e(a)h(shell)g(redirection)0
-5378 y(command)k(suc)m(h)g(as:)227 5675 y Ft(program2)41
-b(<file)p eop end
-%%Page: 133 143
-TeXDict begin 133 142 bop 0 52 a Fy(15.5)93 b(Sa)m(ving)30
-b(and)g(Restoring)h(Multiple)g(Ob)5 b(jects)1838 b FF(133)0
-351 y Fw(15.5)112 b(Sa)m(ving)39 b(and)f(Restoring)f(Multiple)i(Ob)6
-b(jects)0 564 y FF(I/O)27 b(op)s(erations)h(p)s(erformed)d(on)i(a)h
-(basic)g(Channel)e(are)i(sequen)m(tial.)41 b(This)26
-b(means)h(that)h(if)f(y)m(ou)h(write)f(more)0 677 y(than)h(one)h(Ob)5
-b(ject)28 b(to)h(a)g(Channel,)f(eac)m(h)h(new)f(Ob)5
-b(ject's)29 b(textual)g(description)g(is)f(simply)g(app)s(ended)e(to)j
-(the)0 790 y(previous)38 b(one.)64 b(Y)-8 b(ou)39 b(can)g(store)g(an)m
-(y)f(n)m(um)m(b)s(er)f(of)i(Ob)5 b(jects)38 b(in)g(this)g(w)m(a)m(y)-8
-b(,)42 b(sub)5 b(ject)38 b(only)g(to)h(the)g(storage)0
-903 y(space)31 b(y)m(ou)g(ha)m(v)m(e)g(a)m(v)-5 b(ailable.)0
-1057 y(After)29 b(y)m(ou)h(read)f(an)g(Ob)5 b(ject)29
-b(bac)m(k)h(from)f(a)g(basic)h(Channel,)f(the)g(Channel)f(is)i(\\p)s
-(ositioned")g(at)f(the)h(end)e(of)0 1170 y(that)h(Ob)5
-b(ject's)29 b(textual)h(description.)40 b(If)29 b(y)m(ou)g(then)f(p)s
-(erform)f(another)i(read,)h(y)m(ou)f(will)g(read)f(the)h(next)g(Ob-)0
-1283 y(ject's)i(textual)h(description)e(and)f(therefore)i(retriev)m(e)h
-(the)e(next)g(Ob)5 b(ject.)41 b(This)29 b(pro)s(cess)h(ma)m(y)h(b)s(e)e
-(rep)s(eated)0 1396 y(to)k(read)g(eac)m(h)h(Ob)5 b(ject)33
-b(in)f(turn.)47 b(When)33 b(there)f(are)i(no)e(more)h(Ob)5
-b(jects)33 b(to)g(b)s(e)f(read,)i(astRead)f(will)h(return)0
-1509 y(the)d(v)-5 b(alue)30 b(AST)p Fq(__)p FF(NULL)g(to)h(indicate)g
-(an)f Fx(end-of-\014le.)0 1790 y Fw(15.6)112 b(V)-9 b(alidating)39
-b(Input)0 2003 y FF(The)29 b(p)s(oin)m(ter)h(returned)f(b)m(y)h
-(astRead)h(\()p Fu(x)p FF(15.4\))h(could)e(iden)m(tify)h(an)m(y)f
-(class)h(of)f(Ob)5 b(ject|this)30 b(is)g(determined)0
-2116 y(en)m(tirely)35 b(b)m(y)g(the)f(external)h(data)g(b)s(eing)f
-(read.)52 b(If)34 b(it)h(is)f(necessary)g(to)h(test)h(for)e(a)g
-(particular)h(class)g(\(sa)m(y)g(a)0 2229 y(F)-8 b(rame\),)28
-b(this)e(ma)m(y)h(b)s(e)e(done)h(as)g(follo)m(ws)i(using)d(the)h
-(appropriate)g(mem)m(b)s(er)g(of)g(the)g(astIsA)p Fo(<)p
-FF(Class)p Fo(>)g FF(family)0 2342 y(of)31 b(functions:)227
-2558 y Ft(int)43 b(ok;)227 2757 y(...)227 2956 y(ok)g(=)g
-(astIsAFrame\()c(object)i(\);)0 3185 y FF(Note,)33 b(ho)m(w)m(ev)m(er,)
-f(that)g(this)f(will)g(accept)h(an)m(y)g(F)-8 b(rame,)32
-b(so)f(w)m(ould)g(b)s(e)f(equally)i(happ)m(y)e(with)h(a)g(basic)h(F)-8
-b(rame)0 3298 y(or)30 b(a)f(SkyF)-8 b(rame.)41 b(An)30
-b(alternativ)m(e)i(v)-5 b(alidation)30 b(strategy)h(w)m(ould)f(b)s(e)f
-(to)h(obtain)g(the)g(v)-5 b(alue)30 b(of)f(the)h(Ob)5
-b(ject's)0 3411 y(Class)30 b(attribute)h(and)f(then)g(test)i(this)e(c)m
-(haracter)i(string,)e(as)h(follo)m(ws:)227 3627 y Ft(#include)41
-b(<string.h>)227 3826 y(...)227 4025 y(ok)i(=)g(!strcmp\()d(astGetC\()h
-(object,)f("Class")h(\),)i("Frame")e(\);)0 4254 y FF(This)30
-b(w)m(ould)g(only)g(accept)i(a)f(basic)g(F)-8 b(rame)31
-b(and)f(w)m(ould)g(reject)h(a)g(SkyF)-8 b(rame.)0 4535
-y Fw(15.7)112 b(Storing)38 b(an)g(ID)f(String)g(with)h(an)g(Ob)6
-b(ject)0 4748 y FF(Occasionally)-8 b(,)33 b(y)m(ou)e(ma)m(y)g(w)m(an)m
-(t)h(to)f(store)g(a)g(n)m(um)m(b)s(er)f(of)g(Ob)5 b(jects)31
-b(and)f(later)h(retriev)m(e)h(them)f(and)f(use)g(eac)m(h)0
-4861 y(for)g(a)g(di\013eren)m(t)g(purp)s(ose.)39 b(If)29
-b(the)h(Ob)5 b(jects)30 b(are)g(of)g(the)g(same)h(class,)g(y)m(ou)f
-(cannot)g(use)g(the)g(Class)g(attribute)0 4974 y(to)39
-b(distinguish)e(them)g(when)g(y)m(ou)h(read)g(them)g(bac)m(k)h(\()p
-Fx(c.f.)e Fu(x)p FF(15.6\).)65 b(Although)38 b(relying)h(on)e(the)h
-(order)g(in)0 5087 y(whic)m(h)e(they)g(are)h(stored)g(is)f(a)h(p)s
-(ossible)e(solution,)k(this)d(b)s(ecomes)h(complicated)h(if)e(some)h
-(of)f(the)g(Ob)5 b(jects)0 5200 y(are)27 b(optional)h(and)e(ma)m(y)i
-(not)f(alw)m(a)m(ys)h(b)s(e)e(presen)m(t.)40 b(It)27
-b(also)h(mak)m(es)f(extending)g(y)m(our)g(data)h(format)f(in)f(future)0
-5313 y(more)31 b(di\016cult.)0 5467 y(T)-8 b(o)30 b(help)f(with)f
-(this,)i(ev)m(ery)g(AST)f(Ob)5 b(ject)29 b(has)g(an)g(ID)g(attribute)h
-(and)f(an)g(Iden)m(t)g(attribute,)i(b)s(oth)d(of)i(whic)m(h)0
-5580 y(allo)m(ws)e(y)m(ou,)f(in)f(e\013ect,)j(to)e(attac)m(h)h(a)f
-(textual)g(iden)m(ti\014cation)h(lab)s(el)f(to)g(it.)40
-b(Y)-8 b(ou)27 b(simply)e(set)i(the)g(ID)f(or)g(Iden)m(t)0
-5693 y(attribute)31 b(b)s(efore)f(writing)g(the)h(Ob)5
-b(ject:)p eop end
-%%Page: 134 144
-TeXDict begin 134 143 bop 0 52 a FF(134)1228 b Fy(15)92
-b(SA)-10 b(VING)30 b(AND)h(RESTORING)e(OBJECTS)g(\(CHANNELS\))227
-351 y Ft(astSet\()41 b(object,)g("ID=Calibration)o(")d(\);)227
-451 y(nobj)k(=)h(astWrite\()d(channel,)h(object)g(\);)0
-689 y FF(Y)-8 b(ou)31 b(can)g(then)f(test)h(its)g(v)-5
-b(alue)30 b(after)h(y)m(ou)g(read)f(the)h(Ob)5 b(ject)30
-b(bac)m(k:)227 914 y Ft(object)41 b(=)j(astRead\()c(channel)h(\);)227
-1013 y(if)i(\()g(!strcmp\()d(astGetC\()h(object,)f("ID")i(\),)h
-("Calibration")38 b(\))44 b(\))f({)358 1113 y(<the)f(Calibration)d
-(Object)i(has)h(been)g(read>)227 1213 y(})h(else)f({)358
-1312 y(<some)g(other)f(Object)g(has)i(been)e(read>)227
-1412 y(})0 1650 y FF(The)30 b(only)h(di\013erence)g(b)s(et)m(w)m(een)h
-(the)f(ID)g(and)f(Iden)m(t)h(attributes)g(is)g(that)g(the)g(ID)g
-(attribute)h(is)f(unique)f(to)h(a)0 1763 y(particular)22
-b(Ob)5 b(ject)23 b(and)e(is)h(lost)h(if,)h(for)e(example,)j(y)m(ou)d
-(mak)m(e)h(a)g(cop)m(y)g(of)f(the)g(Ob)5 b(ject.)39 b(The)21
-b(Iden)m(t)h(attrubute,)0 1876 y(on)34 b(the)g(other)g(hand,)g(is)g
-(transferred)f(to)i(the)f(new)f(Ob)5 b(ject)34 b(when)f(a)h(cop)m(y)h
-(is)f(made.)51 b(Consequen)m(tly)-8 b(,)36 b(it)e(is)0
-1989 y(safest)d(to)g(set)g(the)g(v)-5 b(alue)30 b(of)h(the)g(ID)f
-(attribute)h(immediately)h(b)s(efore)e(y)m(ou)h(p)s(erform)e(the)h
-(write.)0 2273 y Fw(15.8)112 b(The)38 b(T)-9 b(extual)38
-b(Output)f(F)-9 b(ormat)0 2488 y FF(Let)30 b(us)f(no)m(w)g(examine)i
-(the)e(format)h(of)g(the)g(textual)h(output)e(pro)s(duced)f(b)m(y)h
-(writing)h(an)f(Ob)5 b(ject)30 b(to)g(a)g(basic)0 2601
-y(Channel)35 b(\()p Fu(x)p FF(15.3\).)60 b(T)-8 b(o)37
-b(giv)m(e)g(a)g(concrete)g(example,)i(supp)s(ose)34 b(the)i(Ob)5
-b(ject)36 b(in)g(question)g(is)g(a)h(SkyF)-8 b(rame,)0
-2714 y(written)30 b(out)h(as)g(follo)m(ws:)227 2939 y
-Ft(AstSkyFrame)39 b(*skyframe;)227 3138 y(...)227 3337
-y(nobj)j(=)h(astWrite\()d(channel,)h(skyframe)f(\);)0
-3575 y FF(The)30 b(output)g(should)f(then)h(lo)s(ok)h(lik)m(e)h(the)f
-(follo)m(wing:)271 3800 y Ft(Begin)41 b(SkyFrame)84 b(#)43
-b(Description)c(of)k(celestial)d(coordinate)g(system)227
-3900 y(#)131 b(Title)41 b(=)i("FK4)f(Equatorial)e(Coordinates,)e(no)43
-b(E-terms,)d(Mean)i(Equinox)f(B1950.0,)f(Epoch)i(B1958.0")84
-b(#)43 b(Title)e(of)i(coordinate)d(system)402 3999 y(Naxes)h(=)i(2)87
-b(#)43 b(Number)e(of)i(coordinate)d(axes)227 4099 y(#)131
-b(Domain)41 b(=)i("SKY")85 b(#)43 b(Coordinate)d(system)h(domain)227
-4199 y(#)131 b(Lbl1)42 b(=)h("Right)e(Ascension")83 b(#)43
-b(Label)f(for)g(axis)g(1)227 4298 y(#)131 b(Lbl2)42 b(=)h
-("Declination")82 b(#)43 b(Label)e(for)i(axis)e(2)227
-4398 y(#)131 b(Uni1)42 b(=)h("hh:mm:ss.s")82 b(#)43 b(Units)f(for)g
-(axis)g(1)227 4497 y(#)131 b(Uni2)42 b(=)h("ddd:mm:ss")82
-b(#)44 b(Units)d(for)h(axis)g(2)227 4597 y(#)131 b(Dir1)42
-b(=)h(0)86 b(#)44 b(Plot)e(axis)g(1)h(in)f(reverse)f(direction)f
-(\(hint\))402 4697 y(Ax1)i(=)87 b(#)43 b(Axis)f(number)f(1)532
-4796 y(Begin)h(SkyAxis)84 b(#)43 b(Celestial)d(coordinate)g(axis)532
-4896 y(End)j(SkyAxis)402 4996 y(Ax2)f(=)87 b(#)43 b(Axis)f(number)f(2)
-532 5095 y(Begin)h(SkyAxis)84 b(#)43 b(Celestial)d(coordinate)g(axis)
-532 5195 y(End)j(SkyAxis)271 5295 y(IsA)f(Frame)85 b(#)43
-b(Coordinate)d(system)h(description)402 5394 y(System)g(=)i("FK4-NO-E")
-83 b(#)43 b(Celestial)d(coordinate)f(system)j(type)402
-5494 y(Epoch)f(=)i(1958)86 b(#)43 b(Besselian)d(epoch)h(of)i
-(observation)227 5593 y(#)131 b(Eqnox)41 b(=)i(1950)86
-b(#)43 b(Besselian)d(epoch)h(of)i(mean)f(equinox)271
-5693 y(End)g(SkyFrame)p eop end
-%%Page: 135 145
-TeXDict begin 135 144 bop 0 52 a Fy(15.9)93 b(Con)m(trolling)31
-b(the)g(Amoun)m(t)f(of)h(Output)2005 b FF(135)0 351 y(Y)-8
-b(ou)36 b(will)f(notice)i(that)f(this)f(output)g(is)g(designed)g(b)s
-(oth)g(for)g(a)h(h)m(uman)e(reader,)j(in)e(that)g(it)h(is)g(formatted,)
-0 464 y(and)i(also)h(to)g(b)s(e)e(read)h(bac)m(k)h(b)m(y)g(a)f
-(computer)g(in)g(order)g(to)h(reconstruct)g(the)f(SkyF)-8
-b(rame.)65 b(In)37 b(fact,)42 b(this)0 577 y(is)c(precisely)g(the)f(w)m
-(a)m(y)i(that)f(astSho)m(w)g(w)m(orks)f(\()p Fu(x)p FF(4.4\),)42
-b(this)37 b(function)h(b)s(eing)f(roughly)g(equiv)-5
-b(alen)m(t)39 b(to)f(the)0 690 y(follo)m(wing)32 b(use)e(of)g(a)h
-(Channel:)227 889 y Ft(channel)41 b(=)i(astChannel\()c(NULL,)j(NULL,)f
-("")i(\);)227 988 y(\(void\))e(astWrite\()f(channel,)h(object)g(\);)227
-1088 y(channel)g(=)i(astAnnul\()d(channel)h(\);)0 1300
-y FF(Some)34 b(lines)f(of)h(the)g(output)f(start)h(with)f(a)h(\\)p
-Fq(#)p FF(")g(commen)m(t)h(c)m(haracter,)h(whic)m(h)d(turns)f(the)i
-(rest)g(of)f(the)h(line)0 1413 y(in)m(to)40 b(a)f(commen)m(t.)66
-b(These)39 b(lines)g(will)g(b)s(e)f(ignored)g(when)g(read)h(bac)m(k)g
-(in)f(b)m(y)h(astRead.)66 b(They)39 b(t)m(ypically)0
-1526 y(con)m(tain)33 b(default)f(v)-5 b(alues,)33 b(or)f(v)-5
-b(alues)32 b(that)g(can)h(b)s(e)e(deriv)m(ed)h(in)f(some)h(w)m(a)m(y)h
-(from)f(the)g(other)g(data)g(presen)m(t,)0 1639 y(so)c(that)g(they)g
-(do)g(not)f(actually)j(need)d(to)i(b)s(e)e(stored)g(in)h(order)f(to)h
-(reconstruct)g(the)g(original)h(Ob)5 b(ject.)40 b(They)0
-1752 y(are)25 b(pro)m(vided)f(purely)f(for)h(h)m(uman)g(information.)39
-b(The)24 b(same)g(commen)m(t)i(c)m(haracter)g(is)e(also)h(used)f(to)h
-(app)s(end)0 1865 y(explanatory)31 b(commen)m(ts)h(to)f(most)f(output)g
-(lines.)0 2015 y(It)36 b(is)f(not)h(sensible)f(to)h(attempt)h(a)e
-(complete)i(description)f(of)f(this)g(output)g(format)h(b)s(ecause)g
-(ev)m(ery)g(class)0 2128 y(of)e(Ob)5 b(ject)34 b(is)g(p)s(oten)m
-(tially)i(di\013eren)m(t)f(and)e(eac)m(h)i(can)f(de\014ne)g(ho)m(w)g
-(its)g(o)m(wn)g(data)h(should)e(b)s(e)g(represen)m(ted.)0
-2241 y(Ho)m(w)m(ev)m(er,)27 b(there)d(are)g(some)g(basic)g(rules,)g
-(whic)m(h)g(mean)f(that)h(the)g(follo)m(wing)h(common)f(features)g
-(will)g(usually)0 2354 y(b)s(e)30 b(presen)m(t:)111 2566
-y(1.)46 b(Eac)m(h)37 b(Ob)5 b(ject)36 b(is)g(delimited)g(b)m(y)g(matc)m
-(hing)h(\\Begin")g(and)f(\\End")f(lines,)j(whic)m(h)d(also)i(iden)m
-(tify)f(the)227 2679 y(class)31 b(of)g(Ob)5 b(ject)30
-b(in)m(v)m(olv)m(ed.)111 2854 y(2.)46 b(Within)22 b(eac)m(h)i(Ob)5
-b(ject)22 b(description,)i(data)e(v)-5 b(alues)23 b(are)f(represen)m
-(ted)g(b)m(y)g(a)g(simple)g(\\k)m(eyw)m(ord)h(=)f(v)-5
-b(alue")227 2967 y(syn)m(tax,)31 b(with)g(one)f(v)-5
-b(alue)31 b(to)g(a)g(line.)111 3142 y(3.)46 b(Lines)30
-b(b)s(eginning)f(\\IsA")i(are)f(used)f(to)i(mark)f(the)g(divisions)g(b)
-s(et)m(w)m(een)g(data)h(b)s(elonging)f(to)h(di\013eren)m(t)227
-3255 y(lev)m(els)41 b(in)e(the)g(class)h(hierarc)m(h)m(y)g(\(App)s
-(endix)e(A\).)67 b(Th)m(us,)41 b(\\IsA)e(F)-8 b(rame")41
-b(marks)e(the)g(end)f(of)i(data)227 3368 y(asso)s(ciated)34
-b(with)f(the)g(F)-8 b(rame)33 b(class)h(and)e(the)h(start)g(of)g(data)g
-(asso)s(ciated)h(with)f(some)g(deriv)m(ed)g(class)227
-3481 y(\(a)d(SkyF)-8 b(rame)29 b(in)g(the)g(ab)s(o)m(v)m(e)h
-(example\).)41 b(\\IsA")30 b(lines)f(ma)m(y)g(b)s(e)f(omitted)i(if)f
-(asso)s(ciated)i(data)e(v)-5 b(alues)227 3594 y(are)31
-b(absen)m(t)g(and)f(no)g(confusion)g(arises.)111 3769
-y(4.)46 b(Ob)5 b(jects)27 b(ma)m(y)g(con)m(tain)h(other)e(Ob)5
-b(jects)27 b(as)g(data.)40 b(This)26 b(is)g(indicated)h(b)m(y)g(an)f
-(absen)m(t)h(v)-5 b(alue,)28 b(with)e(the)227 3882 y(description)31
-b(of)f(the)h(data)g(Ob)5 b(ject)30 b(follo)m(wing)i(on)e(subsequen)m(t)
-g(lines.)111 4057 y(5.)46 b(Inden)m(tation)31 b(is)g(used)e(to)i
-(clarify)g(the)g(o)m(v)m(erall)i(structure.)0 4269 y(Bey)m(ond)j(these)
-g(general)g(principles,)h(the)f(b)s(est)f(guide)g(to)h(what)g(a)f
-(particular)h(line)g(of)g(output)f(represen)m(ts)0 4382
-y(will)f(generally)h(b)s(e)e(the)h(commen)m(t)h(whic)m(h)f(accompanies)
-h(it)g(together)g(with)e(a)i(general)f(kno)m(wledge)h(of)f(the)0
-4495 y(class)d(of)g(Ob)5 b(ject)30 b(b)s(eing)g(describ)s(ed.)0
-4769 y Fw(15.9)112 b(Con)m(trolling)38 b(the)f(Amoun)m(t)h(of)f(Output)
-0 4978 y FF(It)42 b(is)f(not)h(alw)m(a)m(ys)h(necessary)f(for)g(the)g
-(output)f(from)g(astW)-8 b(rite)44 b(\()p Fu(x)p FF(15.3\))g(to)e(b)s
-(e)f(h)m(uman-readable,)k(so)d(a)0 5091 y(Channel)30
-b(has)g(attributes)h(that)g(allo)m(w)g(the)g(amoun)m(t)g(of)f(detail)i
-(in)e(the)h(output)f(to)h(b)s(e)e(con)m(trolled.)0 5241
-y(The)41 b(\014rst)g(of)h(these)g(is)g(the)f(in)m(teger)i(attribute)g
-(F)-8 b(ull,)45 b(whic)m(h)d(con)m(trols)g(the)g(exten)m(t)h(to)g(whic)
-m(h)e(optional,)0 5354 y(commen)m(ted)g(out,)j(output)c(lines)h(are)g
-(pro)s(duced.)69 b(By)41 b(default,)j(F)-8 b(ull)41 b(is)f(zero,)k(and)
-c(this)h(results)f(in)g(the)0 5467 y(standard)21 b(st)m(yle)i(of)e
-(output)g(\()p Fu(x)p FF(15.8\))k(where)c(default)g(v)-5
-b(alues)22 b(that)g(ma)m(y)h(b)s(e)d(helpful)h(to)h(h)m(umans)f(are)h
-(included.)0 5580 y(T)-8 b(o)28 b(suppress)e(these)j(optional)g(lines,)
-f(F)-8 b(ull)29 b(should)e(b)s(e)g(set)i(to)f Fu(\000)p
-FF(1.)40 b(This)27 b(is)h(most)h(con)m(v)m(enien)m(tly)h(done)d(when)0
-5693 y(the)k(Channel)e(is)i(created,)g(so)g(that:)p eop
-end
-%%Page: 136 146
-TeXDict begin 136 145 bop 0 52 a FF(136)1228 b Fy(15)92
-b(SA)-10 b(VING)30 b(AND)h(RESTORING)e(OBJECTS)g(\(CHANNELS\))227
-351 y Ft(channel)41 b(=)i(astChannel\()c(NULL,)j(NULL,)f("Full=-1")f
-(\);)227 451 y(\(void\))h(astWrite\()f(channel,)h(skyframe)f(\);)227
-551 y(channel)h(=)i(astAnnul\()d(channel)h(\);)0 812
-y FF(w)m(ould)30 b(result)g(in)g(output)g(con)m(taining)i(only)f(the)f
-(essen)m(tial)j(information,)e(suc)m(h)f(as:)271 1059
-y Ft(Begin)41 b(SkyFrame)84 b(#)43 b(Description)c(of)k(celestial)d
-(coordinate)g(system)402 1159 y(Naxes)h(=)i(2)87 b(#)43
-b(Number)e(of)i(coordinate)d(axes)402 1259 y(Ax1)i(=)87
-b(#)43 b(Axis)f(number)f(1)532 1358 y(Begin)h(SkyAxis)84
-b(#)43 b(Celestial)d(coordinate)g(axis)532 1458 y(End)j(SkyAxis)402
-1558 y(Ax2)f(=)87 b(#)43 b(Axis)f(number)f(2)532 1657
-y(Begin)h(SkyAxis)84 b(#)43 b(Celestial)d(coordinate)g(axis)532
-1757 y(End)j(SkyAxis)271 1857 y(IsA)f(Frame)85 b(#)43
-b(Coordinate)d(system)h(description)402 1956 y(System)g(=)i("FK4-NO-E")
-83 b(#)43 b(Celestial)d(coordinate)f(system)j(type)402
-2056 y(Epoch)f(=)i(1958)86 b(#)43 b(Besselian)d(epoch)h(of)i
-(observation)271 2155 y(End)f(SkyFrame)0 2417 y FF(In)30
-b(con)m(trast,)j(setting)f(F)-8 b(ull)31 b(to)h(+1)f(will)g(result)f
-(in)h(additional)h(output)e(lines)h(whic)m(h)g(will)g(rev)m(eal)h(ev)m
-(ery)g(last)0 2529 y(detail)38 b(of)g(the)f(Ob)5 b(ject's)37
-b(construction.)62 b(Often)37 b(this)g(will)g(b)s(e)g(rather)g(more)g
-(than)g(y)m(ou)g(w)m(an)m(t,)j(esp)s(ecially)0 2642 y(for)30
-b(more)g(complex)g(Ob)5 b(jects,)30 b(but)g(it)g(can)g(sometimes)h
-(help)e(when)g(debugging)h(programs.)40 b(This)29 b(is)h(ho)m(w)g(a)0
-2755 y(SkyF)-8 b(rame)31 b(app)s(ears)e(at)i(this)g(lev)m(el)h(of)e
-(detail:)271 3003 y Ft(Begin)41 b(SkyFrame)84 b(#)43
-b(Description)c(of)k(celestial)d(coordinate)g(system)227
-3103 y(#)131 b(RefCnt)41 b(=)i(1)87 b(#)43 b(Count)e(of)i(active)e
-(Object)g(pointers)227 3202 y(#)131 b(Nobj)42 b(=)h(1)86
-b(#)44 b(Count)d(of)i(active)e(Objects)g(in)h(same)g(class)271
-3302 y(IsA)g(Object)85 b(#)43 b(Astrometry)d(Object)227
-3402 y(#)131 b(Nin)42 b(=)h(2)87 b(#)43 b(Number)e(of)i(input)e
-(coordinates)227 3501 y(#)131 b(Nout)42 b(=)h(2)86 b(#)44
-b(Number)d(of)i(output)e(coordinates)227 3601 y(#)131
-b(Invert)41 b(=)i(0)87 b(#)43 b(Mapping)e(not)h(inverted)227
-3700 y(#)131 b(Fwd)42 b(=)h(1)87 b(#)43 b(Forward)e(transformation)d
-(defined)227 3800 y(#)131 b(Inv)42 b(=)h(1)87 b(#)43
-b(Inverse)e(transformation)d(defined)227 3900 y(#)131
-b(Report)41 b(=)i(0)87 b(#)43 b(Don't)e(report)g(coordinate)f
-(transformations)271 3999 y(IsA)i(Mapping)84 b(#)44 b(Mapping)c
-(between)h(coordinate)e(systems)227 4099 y(#)131 b(Title)41
-b(=)i("FK4)f(Equatorial)e(Coordinates,)e(no)43 b(E-terms,)d(Mean)i
-(Equinox)f(B1950.0,)f(Epoch)i(B1958.0")84 b(#)43 b(Title)e(of)i
-(coordinate)d(system)402 4199 y(Naxes)h(=)i(2)87 b(#)43
-b(Number)e(of)i(coordinate)d(axes)227 4298 y(#)131 b(Domain)41
-b(=)i("SKY")85 b(#)43 b(Coordinate)d(system)h(domain)227
-4398 y(#)131 b(Lbl1)42 b(=)h("Right)e(Ascension")83 b(#)43
-b(Label)f(for)g(axis)g(1)227 4497 y(#)131 b(Lbl2)42 b(=)h
-("Declination")82 b(#)43 b(Label)e(for)i(axis)e(2)227
-4597 y(#)131 b(Sym1)42 b(=)h("RA")85 b(#)43 b(Symbol)f(for)g(axis)g(1)
-227 4697 y(#)131 b(Sym2)42 b(=)h("Dec")85 b(#)43 b(Symbol)e(for)h(axis)
-g(2)227 4796 y(#)131 b(Uni1)42 b(=)h("hh:mm:ss.s")82
-b(#)43 b(Units)f(for)g(axis)g(1)227 4896 y(#)131 b(Uni2)42
-b(=)h("ddd:mm:ss")82 b(#)44 b(Units)d(for)h(axis)g(2)227
-4996 y(#)131 b(Dig1)42 b(=)h(7)86 b(#)44 b(Individual)39
-b(precision)h(for)i(axis)g(1)227 5095 y(#)131 b(Dig2)42
-b(=)h(7)86 b(#)44 b(Individual)39 b(precision)h(for)i(axis)g(2)227
-5195 y(#)131 b(Digits)41 b(=)i(7)87 b(#)43 b(Default)e(formatting)e
-(precision)227 5295 y(#)131 b(Fmt1)42 b(=)h("hms.1")84
-b(#)43 b(Format)e(specifier)f(for)i(axis)g(1)227 5394
-y(#)131 b(Fmt2)42 b(=)h("dms")85 b(#)43 b(Format)e(specifier)f(for)i
-(axis)g(2)227 5494 y(#)131 b(Dir1)42 b(=)h(0)86 b(#)44
-b(Plot)e(axis)g(1)h(in)f(reverse)f(direction)f(\(hint\))227
-5593 y(#)131 b(Dir2)42 b(=)h(1)86 b(#)44 b(Plot)e(axis)g(2)h(in)f
-(conventional)d(direction)h(\(hint\))227 5693 y(#)131
-b(Presrv)41 b(=)i(0)87 b(#)43 b(Don't)e(preserve)g(target)g(axes)p
-eop end
-%%Page: 137 147
-TeXDict begin 137 146 bop 0 52 a Fy(15.10)93 b(Con)m(trolling)32
-b(Commen)m(ting)2360 b FF(137)227 351 y Ft(#)131 b(Permut)41
-b(=)i(1)87 b(#)43 b(Axes)f(may)g(be)h(permuted)d(to)j(match)227
-451 y(#)131 b(MinAx)41 b(=)i(2)87 b(#)43 b(Minimum)e(number)g(of)i
-(axes)f(to)g(match)227 551 y(#)131 b(MaxAx)41 b(=)i(2)87
-b(#)43 b(Maximum)e(number)g(of)i(axes)f(to)g(match)227
-650 y(#)131 b(MchEnd)41 b(=)i(0)87 b(#)43 b(Match)e(initial)g(target)g
-(axes)227 750 y(#)131 b(Prm1)42 b(=)h(1)86 b(#)44 b(Axis)e(1)h(not)f
-(permuted)227 849 y(#)131 b(Prm2)42 b(=)h(2)86 b(#)44
-b(Axis)e(2)h(not)f(permuted)402 949 y(Ax1)g(=)87 b(#)43
-b(Axis)f(number)f(1)532 1049 y(Begin)h(SkyAxis)84 b(#)43
-b(Celestial)d(coordinate)g(axis)227 1148 y(#)392 b(RefCnt)41
-b(=)i(1)87 b(#)43 b(Count)f(of)h(active)e(Object)g(pointers)227
-1248 y(#)392 b(Nobj)42 b(=)h(2)87 b(#)43 b(Count)f(of)g(active)g
-(Objects)e(in)j(same)f(class)532 1348 y(IsA)h(Object)84
-b(#)44 b(Astrometry)39 b(Object)227 1447 y(#)392 b(Label)42
-b(=)h("Angle)e(on)i(Sky")85 b(#)43 b(Axis)f(Label)227
-1547 y(#)392 b(Symbol)41 b(=)i("delta")85 b(#)43 b(Axis)f(symbol)227
-1646 y(#)392 b(Unit)42 b(=)h("ddd:mm:ss")83 b(#)43 b(Axis)f(units)227
-1746 y(#)392 b(Digits)41 b(=)i(7)87 b(#)43 b(Default)e(formatting)e
-(precision)227 1846 y(#)392 b(Format)41 b(=)i("dms")86
-b(#)43 b(Format)e(specifier)227 1945 y(#)392 b(Dirn)42
-b(=)h(1)87 b(#)43 b(Plot)f(in)h(conventional)38 b(direction)532
-2045 y(IsA)43 b(Axis)85 b(#)43 b(Coordinate)d(axis)227
-2145 y(#)392 b(Format)41 b(=)i("dms")86 b(#)43 b(Format)e(specifier)227
-2244 y(#)392 b(IsLat)42 b(=)h(0)87 b(#)43 b(Longitude)d(axis)i(\(not)f
-(latitude\))227 2344 y(#)392 b(AsTime)41 b(=)i(0)87 b(#)43
-b(Display)e(values)g(as)i(angles)e(\(not)h(times\))532
-2443 y(End)h(SkyAxis)402 2543 y(Ax2)f(=)87 b(#)43 b(Axis)f(number)f(2)
-532 2643 y(Begin)h(SkyAxis)84 b(#)43 b(Celestial)d(coordinate)g(axis)
-227 2742 y(#)392 b(RefCnt)41 b(=)i(1)87 b(#)43 b(Count)f(of)h(active)e
-(Object)g(pointers)227 2842 y(#)392 b(Nobj)42 b(=)h(2)87
-b(#)43 b(Count)f(of)g(active)g(Objects)e(in)j(same)f(class)532
-2942 y(IsA)h(Object)84 b(#)44 b(Astrometry)39 b(Object)227
-3041 y(#)392 b(Label)42 b(=)h("Angle)e(on)i(Sky")85 b(#)43
-b(Axis)f(Label)227 3141 y(#)392 b(Symbol)41 b(=)i("delta")85
-b(#)43 b(Axis)f(symbol)227 3240 y(#)392 b(Unit)42 b(=)h("ddd:mm:ss")83
-b(#)43 b(Axis)f(units)227 3340 y(#)392 b(Digits)41 b(=)i(7)87
-b(#)43 b(Default)e(formatting)e(precision)227 3440 y(#)392
-b(Format)41 b(=)i("dms")86 b(#)43 b(Format)e(specifier)227
-3539 y(#)392 b(Dirn)42 b(=)h(1)87 b(#)43 b(Plot)f(in)h(conventional)38
-b(direction)532 3639 y(IsA)43 b(Axis)85 b(#)43 b(Coordinate)d(axis)227
-3739 y(#)392 b(Format)41 b(=)i("dms")86 b(#)43 b(Format)e(specifier)227
-3838 y(#)392 b(IsLat)42 b(=)h(0)87 b(#)43 b(Longitude)d(axis)i(\(not)f
-(latitude\))227 3938 y(#)392 b(AsTime)41 b(=)i(0)87 b(#)43
-b(Display)e(values)g(as)i(angles)e(\(not)h(times\))532
-4037 y(End)h(SkyAxis)271 4137 y(IsA)f(Frame)85 b(#)43
-b(Coordinate)d(system)h(description)402 4237 y(System)g(=)i("FK4-NO-E")
-83 b(#)43 b(Celestial)d(coordinate)f(system)j(type)402
-4336 y(Epoch)f(=)i(1958)86 b(#)43 b(Besselian)d(epoch)h(of)i
-(observation)227 4436 y(#)131 b(Eqnox)41 b(=)i(1950)86
-b(#)43 b(Besselian)d(epoch)h(of)i(mean)f(equinox)271
-4536 y(End)g(SkyFrame)0 4819 y Fw(15.10)112 b(Con)m(trolling)38
-b(Commen)m(ting)0 5033 y FF(Another)g(w)m(a)m(y)g(of)g(con)m(trolling)i
-(output)e(from)f(a)h(Channel)f(is)h Fx(via)g FF(the)g(b)s(o)s(olean)f
-(\(in)m(teger\))j(Commen)m(t)e(at-)0 5146 y(tribute,)32
-b(whic)m(h)e(con)m(trols)j(whether)e(commen)m(ts)h(are)f(app)s(ended)f
-(to)i(describ)s(e)e(the)i(purp)s(ose)d(of)i(eac)m(h)i(v)-5
-b(alue.)0 5259 y(Commen)m(t)33 b(has)g(the)h(v)-5 b(alue)33
-b(1)h(b)m(y)f(default)g(but,)h(if)f(set)h(to)g(zero,)h(will)e(suppress)
-e(these)j(commen)m(ts.)50 b(This)32 b(is)0 5372 y(normally)f
-(appropriate)f(only)g(if)h(y)m(ou)g(wish)e(to)i(minimise)g(the)f(amoun)
-m(t)h(of)f(output,)h(for)f(example:)227 5593 y Ft(astSet\()41
-b(channel,)f("Full=-1,)g(Comment=0")g(\);)227 5693 y(nobj)i(=)h
-(astWrite\()d(channel,)h(skyframe)f(\);)p eop end
-%%Page: 138 148
-TeXDict begin 138 147 bop 0 52 a FF(138)1228 b Fy(15)92
-b(SA)-10 b(VING)30 b(AND)h(RESTORING)e(OBJECTS)g(\(CHANNELS\))0
-351 y FF(migh)m(t)i(result)f(in)g(the)h(follo)m(wing)h(more)e(compact)i
-(output:)271 656 y Ft(Begin)41 b(SkyFrame)402 756 y(Naxes)g(=)i(2)402
-855 y(Ax1)f(=)532 955 y(Begin)g(SkyAxis)532 1055 y(End)h(SkyAxis)402
-1154 y(Ax2)f(=)532 1254 y(Begin)g(SkyAxis)532 1353 y(End)h(SkyAxis)271
-1453 y(IsA)f(Frame)402 1553 y(System)f(=)i("FK4-NO-E")402
-1652 y(Epoch)e(=)i(1958)271 1752 y(End)f(SkyFrame)0 2108
-y Fw(15.11)112 b(Editing)38 b(T)-9 b(extual)37 b(Output)0
-2356 y FF(The)h(safest)h(advice)g(ab)s(out)f(editing)i(the)e(textual)i
-(output)e(from)g(astW)-8 b(rite)40 b(\(or)f(astSho)m(w\))g(is)f
-(\\don't!"|)0 2469 y(unless)30 b(y)m(ou)g(kno)m(w)h(what)f(y)m(ou)h
-(are)g(doing.)0 2651 y(Ha)m(ving)36 b(giv)m(en)h(that)e(w)m(arning,)i
-(ho)m(w)m(ev)m(er,)h(it)e(is)f(sometimes)h(p)s(ossible)f(to)h(mak)m(e)g
-(c)m(hanges)g(to)g(the)g(text,)h(or)0 2763 y(ev)m(en)24
-b(to)g(write)f(en)m(tire)h(Ob)5 b(ject)23 b(descriptions)g(from)g
-(scratc)m(h,)j(and)c(to)i(read)f(the)h(results)f(bac)m(k)g(in)g(to)h
-(construct)0 2876 y(new)34 b(Ob)5 b(jects.)52 b(Normally)-8
-b(,)37 b(simple)e(c)m(hanges)g(to)g(n)m(umerical)g(v)-5
-b(alues)35 b(are)f(safest,)j(but)c(b)s(e)h(a)m(w)m(are)i(that)f(this)0
-2989 y(is)j(a)h(bac)m(k)g(do)s(or)e(metho)s(d)h(of)g(creating)i(Ob)5
-b(jects,)40 b(so)e(y)m(ou)h(are)f(on)h(y)m(our)f(o)m(wn!)64
-b(There)37 b(are)i(a)f(n)m(um)m(b)s(er)f(of)0 3102 y(p)s(oten)m(tial)32
-b(pitfalls.)41 b(In)30 b(particular:)136 3420 y Fu(\017)46
-b FF(astRead)28 b(is)e(in)m(tended)h(for)f(retrieving)h(data)h(written)
-e(b)m(y)h(astW)-8 b(rite)28 b(and)e(not)h(for)f(reading)h(data)g(input)
-227 3533 y(b)m(y)40 b(h)m(umans.)68 b(As)40 b(suc)m(h,)j(the)d(data)g
-(v)-5 b(alidation)42 b(pro)m(vided)d(is)h(v)m(ery)g(limited)h(and)e(is)
-h(certainly)h(not)227 3646 y(fo)s(olpro)s(of.)e(This)24
-b(mak)m(es)i(it)f(quite)g(easy)h(to)f(construct)g(Ob)5
-b(jects)25 b(that)h(are)f(in)m(ternally)h(inconsisten)m(t)g(b)m(y)227
-3759 y(this)k(means.)40 b(In)29 b(con)m(trast,)j(the)e(normal)f
-(programming)h(in)m(terface)h(incorp)s(orates)f(n)m(umerous)f(c)m(hec)m
-(ks)227 3872 y(designed)35 b(to)h(mak)m(e)g(it)g(imp)s(ossible)e(to)i
-(construct)f(in)m(v)-5 b(alid)36 b(Ob)5 b(jects.)55 b(Y)-8
-b(ou)35 b(should)f(not)i(necessarily)227 3985 y(think)43
-b(y)m(ou)g(ha)m(v)m(e)h(found)d(a)i(bug)g(if)f(y)m(our)h(c)m(hanges)h
-(to)g(an)e(Ob)5 b(ject's)43 b(textual)h(description)f(fail)h(to)227
-4098 y(pro)s(duce)29 b(the)i(results)f(y)m(ou)h(exp)s(ected!)136
-4322 y Fu(\017)46 b FF(In)24 b(man)m(y)i(instances)f(the)g(names)g
-(asso)s(ciated)h(with)f(v)-5 b(alues)25 b(in)g(textual)h(output)f(will)
-g(corresp)s(ond)f(with)227 4435 y(Ob)5 b(ject)31 b(attributes.)43
-b(Sometimes,)32 b(ho)m(w)m(ev)m(er,)g(these)g(names)e(ma)m(y)i
-(di\013er)e(from)h(the)g(attribute)g(name.)227 4548 y(This)f(is)h
-(mainly)f(b)s(ecause)h(of)g(length)f(restrictions)i(imp)s(osed)e(b)m(y)
-g(other)h(common)g(external)g(formats,)227 4661 y(suc)m(h)f(as)h(FITS)f
-(headers.)40 b(Some)30 b(of)h(the)f(names)h(used)e(do)i(not)f(corresp)s
-(ond)f(with)h(attributes)h(at)g(all.)136 4886 y Fu(\017)46
-b FF(It)39 b(is)g(safest)g(to)g(c)m(hange)h(single)f(n)m(umerical)g(or)
-g(string)f(v)-5 b(alues.)66 b(Bew)m(are)40 b(of)f(c)m(hanging)g(the)g
-(size)g(or)227 4999 y(shap)s(e)34 b(of)h(Ob)5 b(jects)35
-b(\()p Fx(e.g.)f FF(the)h(n)m(um)m(b)s(er)e(of)i(axes)h(in)e(a)h(F)-8
-b(rame\).)55 b(Often,)36 b(these)f(v)-5 b(alues)35 b(m)m(ust)g(matc)m
-(h)227 5112 y(others)30 b(stored)g(elsewhere)g(within)f(the)h(Ob)5
-b(ject)30 b(and)f(c)m(hanging)i(them)e(in)h(a)g(haphazard)f(fashion)g
-(will)227 5225 y(not)i(pro)s(duce)e(useful)h(results.)136
-5450 y Fu(\017)46 b FF(Be)33 b(w)m(ary)g(ab)s(out)f(un-commen)m(ting)h
-(default)f(v)-5 b(alues.)47 b(Sometimes)33 b(this)g(will)f(w)m(ork,)i
-(but)d(often)i(these)227 5562 y(v)-5 b(alues)30 b(are)g(deriv)m(ed)g
-(from)f(other)h(Ob)5 b(jects)30 b(stored)f(more)h(deeply)g(in)f(the)h
-(structure)f(and)g(the)h(prop)s(er)227 5675 y(place)i(to)f(insert)f(a)h
-(new)f(v)-5 b(alue)30 b(is)h(not)f(where)g(the)h(default)f(itself)i
-(app)s(ears.)p eop end
-%%Page: 139 149
-TeXDict begin 139 148 bop 0 52 a Fy(15.12)93 b(Mixing)31
-b(Ob)5 b(jects)30 b(with)g(other)h(T)-8 b(ext)2075 b
-FF(139)0 351 y Fw(15.12)112 b(Mixing)39 b(Ob)6 b(jects)38
-b(with)f(other)g(T)-9 b(ext)0 592 y FF(By)30 b(default,)g(when)e(y)m
-(ou)i(use)f(astRead)i(to)f(read)g(from)f(a)g(basic)h(Channel)f(\()p
-Fu(x)p FF(15.4\),)k(it)d(is)f(assumed)g(that)h(y)m(ou)0
-705 y(are)h(reading)g(a)g(stream)g(of)g(text)h(con)m(taining)g(only)f
-(AST)f(Ob)5 b(jects,)31 b(whic)m(h)f(follo)m(w)i(eac)m(h)g(other)f
-(end-to-end.)0 818 y(If)h(an)m(y)h(extraneous)h(input)d(data)j(are)f
-(encoun)m(tered)g(whic)m(h)f(do)h(not)g(app)s(ear)f(to)i(form)e(part)g
-(of)h(the)g(textual)0 931 y(description)24 b(of)f(an)h(Ob)5
-b(ject,)25 b(then)f(an)f(error)g(will)h(result.)39 b(In)23
-b(particular,)i(the)f(\014rst)f(input)g(line)h(m)m(ust)f(iden)m(tify)0
-1044 y(the)31 b(start)f(of)h(an)f(Ob)5 b(ject)31 b(description,)f(so)h
-(y)m(ou)g(cannot)g(start)g(reading)f(half)g(w)m(a)m(y)i(through)e(an)g
-(Ob)5 b(ject.)0 1220 y(Sometimes,)43 b(ho)m(w)m(ev)m(er,)g(y)m(ou)d(ma)
-m(y)g(w)m(an)m(t)h(to)f(store)g(AST)f(Ob)5 b(ject)40
-b(descriptions)f(in)m(termixed)h(with)f(other)0 1333
-y(textual)e(data.)57 b(Y)-8 b(ou)36 b(can)g(do)f(this)h(b)m(y)f
-(setting)i(the)e(Channel's)g(b)s(o)s(olean)h(\(in)m(teger\))i(Skip)c
-(attribute)j(to)f(1.)0 1446 y(This)g(will)i(cause)f(ev)m(ery)h(read)f
-(to)h(skip)f(o)m(v)m(er)h(extraneous)g(data)f(un)m(til)h(the)f(start)h
-(of)f(a)g(new)g(AST)f(Ob)5 b(ject)0 1558 y(description,)28
-b(if)e(an)m(y)-8 b(,)29 b(is)e(found.)38 b(So)27 b(long)g(as)g(y)m(our)
-g(other)g(data)g(do)g(not)g(mimic)g(the)g(app)s(earance)g(of)g(an)f
-(AST)0 1671 y(Ob)5 b(ject)31 b(description,)f(the)h(t)m(w)m(o)g(sets)g
-(of)g(data)g(can)f(co-exist.)0 1847 y(F)-8 b(or)41 b(example,)j(b)m(y)d
-(setting)h(Skip)d(to)j(1,)h(the)e(follo)m(wing)h(complete)g(C)e
-(program)h(will)g(read)f(all)h(the)g(AST)0 1960 y(Ob)5
-b(jects)44 b(whose)f(descriptions)g(app)s(ear)g(in)g(the)h(source)g(of)
-f(this)h(do)s(cumen)m(t,)j(ignoring)d(the)f(other)h(text.)0
-2073 y(astSho)m(w)31 b(is)f(used)g(to)h(displa)m(y)f(those)h(found:)227
-2362 y Ft(#include)41 b("ast.h")227 2461 y(main\(\))g({)358
-2561 y(AstChannel)e(*channel;)358 2661 y(AstObject)h(*object;)358
-2860 y(channel)h(=)i(astChannel\()c(NULL,)i(NULL,)h("Skip=1")e(\);)358
-2960 y(while)i(\()h(\()g(object)e(=)i(astRead\()d(channel)h(\))i(\))g
-(!=)g(AST__NULL)d(\))j({)489 3059 y(astShow\()d(object)h(\);)489
-3159 y(object)g(=)i(astAnnul\()d(object)h(\);)358 3258
-y(})358 3358 y(channel)g(=)i(astAnnul\()d(channel)g(\);)227
-3458 y(})0 3795 y Fw(15.13)112 b(Reading)39 b(Ob)6 b(jects)38
-b(from)g(Files)0 4036 y FF(Th)m(us)d(far,)i(w)m(e)g(ha)m(v)m(e)g(only)f
-(considered)g(the)g(default)g(b)s(eha)m(viour)g(of)g(a)g(Channel)f(in)h
-(reading)g(and)f(writing)0 4149 y(Ob)5 b(jects)30 b(through)e(a)i
-(program's)g(standard)f(input)f(and)h(output)h(streams.)40
-b(W)-8 b(e)31 b(will)f(no)m(w)g(consider)f(ho)m(w)h(to)0
-4262 y(access)i(Ob)5 b(jects)30 b(stored)h(in)f(\014les)g(more)g
-(directly)-8 b(.)0 4438 y(Because)37 b(the)g(AST)e(library)g(is)i
-(designed)e(to)i(b)s(e)f(used)f(from)g(more)h(than)g(one)h(language,)i
-(it)d(has)g(to)h(b)s(e)e(a)0 4551 y(little)g(careful)e(ab)s(out)f
-(reading)h(and)g(writing)f(to)i(\014les.)48 b(This)32
-b(is)h(due)f(to)i(the)f(incompatibilities)i(that)e(often)0
-4664 y(exist)27 b(b)s(et)m(w)m(een)g(the)g(\014le)g(I/O)f(facilities)j
-(pro)m(vided)d(b)m(y)g(di\013eren)m(t)h(languages.)41
-b(F)-8 b(ortunately)g(,)30 b(this)c(ties)h(in)f(w)m(ell)0
-4777 y(with)31 b(the)g(principle)f(that)i(AST)e(should)g(also)i(b)s(e)e
-(indep)s(enden)m(t)g(of)h(an)m(y)h(particular)f(data)h(storage)g
-(system,)0 4890 y(whic)m(h)e(w)m(e)h(men)m(tion)g(again)g(in)f
-Fu(x)p FF(15.15.)0 5065 y(What)38 b(this)f(means)g(in)g(practice)h(is)f
-(that)h(y)m(ou)f(m)m(ust)g(pro)m(vide)g(some)h(simple)f(C)g(functions)f
-(that)i(p)s(erform)0 5178 y(the)h(actual)h(transfer)e(of)h(data)g(to)h
-(and)e(from)g(\014les)h(and)f(similar)h(external)g(data)h(stores.)66
-b(The)38 b(functions)0 5291 y(y)m(ou)29 b(pro)m(vide)f(are)g(supplied)f
-(as)i(the)f(source)h(and/or)f(sink)f(function)h(argumen)m(ts)h(to)g
-(astChannel)f(when)f(y)m(ou)0 5404 y(create)32 b(a)f(Channel)e(\()p
-Fu(x)p FF(15.2\).)44 b(An)30 b(example)h(is)f(the)h(b)s(est)f(w)m(a)m
-(y)h(to)g(illustrate)h(this.)0 5580 y(Consider)38 b(the)h(follo)m(wing)
-h(simple)e(function)g(called)i(Source.)65 b(It)39 b(reads)f(a)h(single)
-h(line)e(of)h(text)h(from)e(a)h(C)0 5693 y(input)29 b(stream)i(and)f
-(returns)f(a)i(p)s(oin)m(ter)f(to)h(it,)g(or)g(NULL)f(if)g(there)h(is)f
-(no)h(more)f(input:)p eop end
-%%Page: 140 150
-TeXDict begin 140 149 bop 0 52 a FF(140)1228 b Fy(15)92
-b(SA)-10 b(VING)30 b(AND)h(RESTORING)e(OBJECTS)g(\(CHANNELS\))227
-351 y Ft(#include)41 b(<stdio.h>)227 451 y(#define)g(LEN)h(200)227
-551 y(static)f(FILE)h(*input_stream;)227 750 y(const)g(char)g
-(*Source\()e(void)i(\))h({)358 849 y(static)e(char)h(buffer[)f(LEN)h(+)
-h(2)g(];)358 949 y(return)e(fgets\()g(buffer,)g(LEN)h(+)h(2,)g
-(input_stream)c(\);)227 1049 y(})0 1304 y FF(Note)28
-b(that)e(the)h(input)e(stream)i(is)f(a)g(static)i(v)-5
-b(ariable)27 b(whic)m(h)f(w)m(e)h(will)f(also)h(access)h(from)e(our)f
-(main)h(program.)0 1416 y(This)k(migh)m(t)h(lo)s(ok)g(something)f(lik)m
-(e)i(this)e(\(omitting)i(error)e(c)m(hec)m(king)j(for)d(brevit)m(y\):)
-227 1658 y Ft(/*)43 b(Open)f(the)g(input)g(file.)f(*/)227
-1758 y(input_stream)e(=)k(fopen\()e("infile.ast",)d("r")43
-b(\);)227 1957 y(/*)g(Create)e(a)i(Channel)e(and)h(read)g(an)h(Object)e
-(from)h(it.)g(*/)227 2057 y(channel)f(=)i(astChannel\()c(Source,)i
-(NULL,)g("")i(\);)227 2156 y(object)e(=)j(astRead\()c(channel)h(\);)227
-2355 y(...)227 2555 y(/*)i(Annul)f(the)g(Channel)f(and)h(close)f(the)i
-(file)f(when)g(done.)f(*/)227 2654 y(channel)g(=)i(astAnnul\()d
-(channel)h(\);)227 2754 y(\(void\))g(fclose\()g(input_stream)e(\);)0
-3009 y FF(Here,)d(w)m(e)e(\014rst)f(op)s(en)g(the)h(required)f(input)g
-(\014le,)i(sa)m(ving)g(the)f(resulting)g(FILE)g(p)s(oin)m(ter.)51
-b(W)-8 b(e)35 b(then)f(pass)f(a)0 3122 y(p)s(oin)m(ter)23
-b(to)h(our)f(Source)g(function)g(as)g(the)h(\014rst)e(argumen)m(t)i(to)
-g(astChannel)f(when)f(creating)j(a)e(new)g(Channel.)0
-3235 y(When)29 b(w)m(e)g(read)g(an)g(Ob)5 b(ject)29 b(from)g(this)g
-(Channel)f(with)h(astRead,)h(the)f(Source)g(function)g(will)g(b)s(e)g
-(called)h(to)0 3348 y(obtain)j(the)h(textual)g(data)g(from)e(the)h
-(\014le,)i(the)e(end-of-\014le)g(b)s(eing)g(detected)h(when)e(this)h
-(function)g(returns)0 3460 y(NULL.)0 3751 y Fw(15.14)112
-b(W)-9 b(riting)37 b(Ob)6 b(jects)38 b(to)f(Files)0 3971
-y FF(W)-8 b(e)42 b(can)f(also)h(write)f(a)h(Sink)e(function,)j(that)f
-(writes)f(a)g(line)h(of)f(output)f(text)i(to)g(a)f(\014le,)j(and)d(use)
-f(it)i(in)0 4083 y(basically)32 b(the)e(same)h(w)m(a)m(y)g(as)g(the)g
-(Source)f(function)g(in)g(the)g(previous)g(section)i(\()p
-Fu(x)p FF(15.13\):)227 4325 y Ft(static)41 b(FILE)h(*output_stream;)227
-4524 y(void)g(Sink\()g(const)f(char)h(*line)g(\))h({)358
-4624 y(\(void\))e(fprintf\()f(output_stream,)e("\045s\\n",)j(line)h
-(\);)227 4724 y(})0 4978 y FF(Note)32 b(that)f(w)m(e)g(m)m(ust)f
-(supply)f(the)h(\014nal)g(newline)h(c)m(haracter)h(ourselv)m(es.)0
-5139 y(In)41 b(this)i(case,)j(our)c(main)g(program)g(w)m(ould)g(supply)
-e(a)j(p)s(oin)m(ter)f(to)h(this)f(Sink)g(function)g(as)g(the)g(second)0
-5252 y(argumen)m(t)31 b(to)g(astChannel,)f(as)h(follo)m(ws:)227
-5494 y Ft(/*)43 b(Open)f(the)g(output)f(file.)h(*/)227
-5593 y(output_stream)c(=)44 b(fopen\()d("outfile.ast",)d("w")k(\);)p
-eop end
-%%Page: 141 151
-TeXDict begin 141 150 bop 0 52 a Fy(15.15)93 b(Reading)31
-b(and)f(W)-8 b(riting)31 b(Ob)5 b(jects)30 b(to)i(other)e(Places)1547
-b FF(141)227 351 y Ft(/*)43 b(Create)e(a)i(Channel)e(and)h(write)g(an)h
-(Object)e(to)h(it.)h(*/)227 451 y(channel)e(=)i(astChannel\()c(Source,)
-i(Sink,)g("")i(\);)227 551 y(nobj)f(=)h(astWrite\()d(channel,)h(object)
-g(\);)358 750 y(...)227 949 y(/*)i(Annul)f(the)g(Channel)f(and)h(close)
-f(the)i(file)f(when)g(done.)f(*/)227 1049 y(channel)g(=)i(astAnnul\()d
-(channel)h(\);)227 1148 y(\(void\))g(fclose\()g(output_stream)d(\);)0
-1411 y FF(Note)33 b(that)g(w)m(e)g(can)f(sp)s(ecify)g(a)g(source)g
-(and/or)g(a)h(sink)e(function)h(for)g(the)g(Channel,)g(and)g(that)g
-(these)h(ma)m(y)0 1524 y(use)f(either)h(the)f(same)h(\014le,)g(or)f
-(di\013eren)m(t)g(\014les)h(according)g(to)g(whether)e(w)m(e)i(are)f
-(reading)h(or)f(writing.)46 b(AST)0 1636 y(has)31 b(no)h(kno)m(wledge)g
-(of)g(the)f(underlying)g(\014le)g(system,)h(nor)f(of)h(\014le)g(p)s
-(ositioning.)44 b(It)31 b(just)g(reads)h(and)e(writes)0
-1749 y(sequen)m(tially)-8 b(.)42 b(If)27 b(y)m(ou)h(wish,)f(for)g
-(example,)i(to)f(rep)s(osition)g(a)g(\014le)f(at)h(the)g(b)s(eginning)f
-(in)g(b)s(et)m(w)m(een)h(reads)f(and)0 1862 y(writes,)i(then)f(this)g
-(can)g(b)s(e)g(done)f(directly)i(\(and)f(completely)i(indep)s(enden)m
-(tly)d(of)h(AST\))g(using)g(standard)f(C)0 1975 y(functions.)0
-2138 y(If)h(an)g(error)g(o)s(ccurs)g(in)g(y)m(our)h(source)f(or)h(sink)
-f(function,)h(y)m(ou)f(can)h(comm)m(unicate)h(this)e(to)i(the)e(AST)g
-(library)0 2251 y(b)m(y)k(setting)h(its)f(error)g(status)g(to)h(an)m(y)
-g(error)e(v)-5 b(alue)33 b(using)e(astSetStatus)i(\()p
-Fu(x)p FF(4.15\).)49 b(This)31 b(will)h(immediately)0
-2364 y(terminate)f(the)g(read)f(or)h(write)f(op)s(eration.)0
-2657 y Fw(15.15)112 b(Reading)39 b(and)f(W)-9 b(riting)37
-b(Ob)6 b(jects)38 b(to)f(other)g(Places)0 2878 y FF(It)44
-b(should)f(b)s(e)g(ob)m(vious)h(from)f(the)h(ab)s(o)m(v)m(e)h(\()p
-Fu(x)p FF(15.13)i(and)c Fu(x)p FF(15.14\))j(that)f(a)f(Channel's)f
-(source)h(and)f(sink)0 2991 y(functions)28 b(pro)m(vide)g(a)g
-(\015exible)h(means)f(of)g(in)m(tercepting)h(textual)g(data)g(that)g
-(describ)s(es)e(AST)h(Ob)5 b(jects)28 b(as)g(it)0 3104
-y(\015o)m(ws)i(in)f(and)g(out)h(of)g(y)m(our)g(program.)40
-b(In)29 b(fact,)i(y)m(ou)f(migh)m(t)h(lik)m(e)g(to)f(regard)g(a)g
-(Channel)f(simply)g(as)h(a)g(\014lter)0 3217 y(for)g(con)m(v)m(erting)i
-(AST)d(Ob)5 b(jects)30 b(to)g(and)g(from)f(a)i(stream)f(of)g(text)h
-(whic)m(h)f(is)g(then)f(handled)h(b)m(y)f(y)m(our)h(source)0
-3330 y(and)g(sink)g(functions,)g(where)g(the)g(real)h(I/O)g(o)s(ccurs.)
-0 3493 y(This)36 b(giv)m(es)i(y)m(ou)f(the)g(abilit)m(y)i(to)e(store)g
-(AST)g(Ob)5 b(jects)36 b(in)h(virtually)g(an)m(y)g(data)h(system,)h(so)
-e(long)g(as)g(y)m(ou)0 3606 y(can)42 b(con)m(v)m(ert)h(a)f(stream)g(of)
-f(text)i(in)m(to)f(something)g(that)g(can)g(b)s(e)f(stored)g(\(it)i
-(need)e(no)g(longer)h(b)s(e)f(text\))0 3719 y(and)32
-b(retriev)m(e)i(it)f(again.)48 b(There)32 b(is)g(generally)i(no)e(need)
-g(to)h(retain)g(commen)m(ts.)48 b(Other)32 b(p)s(ossibilities,)i(suc)m
-(h)0 3831 y(as)39 b(in)m(ter-pro)s(cess)h(and)e(net)m(w)m(ork)i(comm)m
-(unication,)j(could)c(also)h(b)s(e)f(implemen)m(ted)g
-Fx(via)g FF(source)g(and)g(sink)0 3944 y(functions)30
-b(in)g(basically)i(the)e(same)h(w)m(a)m(y)-8 b(.)p eop
-end
-%%Page: 142 152
-TeXDict begin 142 151 bop 0 52 a FF(142)1228 b Fy(15)92
-b(SA)-10 b(VING)30 b(AND)h(RESTORING)e(OBJECTS)g(\(CHANNELS\))p
-eop end
-%%Page: 143 153
-TeXDict begin 143 152 bop 3643 52 a FF(143)0 351 y Fz(16)135
-b(Storing)45 b(AST)f(Ob)7 b(jects)46 b(in)f(FITS)e(Headers)j
-(\(FitsChans\))0 597 y FF(A)39 b(FITS)f(header)h(is)g(a)h(sequence)f
-(of)g(80-c)m(haracter)j(strings,)f(formatted)f(according)g(to)g
-(particular)f(rules)0 710 y(de\014ned)32 b(b)m(y)g(the)h(Flexible)h
-(Image)g(T)-8 b(ransp)s(ort)31 b(System)i(\(FITS\).)g(FITS)2515
-677 y Fv(23)2622 710 y FF(is)f(a)h(widely-used)g(standard)f(for)0
-823 y(data)g(in)m(terc)m(hange)i(in)d(astronom)m(y)i(and)e(has)g(also)i
-(b)s(een)e(adopted)h(as)g(a)g(data)g(pro)s(cessing)g(format)g(in)f
-(some)0 936 y(astronomical)h(data)f(reduction)f(systems.)41
-b(The)29 b(individual)h(80-c)m(haracter)j(strings)d(in)g(a)h(FITS)e
-(header)h(are)0 1049 y(usually)g(called)i Fx(c)-5 b(ar)g(ds)32
-b FF(or)e Fx(he)-5 b(ader)35 b(c)-5 b(ar)g(ds)32 b FF(\(for)e(en)m
-(tirely)i(anac)m(hronistic)g(reasons\).)0 1205 y(A)23
-b(sequence)h(of)f(FITS)g(cards)g(app)s(ears)f(as)i(a)g(header)f(at)h
-(the)f(start)h(of)f(ev)m(ery)h(FITS)f(data)h(\014le,)h(and)d(sometimes)
-0 1318 y(also)38 b(at)h(other)f(p)s(oin)m(ts)f(within)g(it,)j(and)d(is)
-g(used)g(to)h(pro)m(vide)g(ancillary)h(information)f(whic)m(h)f
-(quali\014es)g(or)0 1431 y(describ)s(es)c(the)h(main)g(arra)m(y)g(of)g
-(data)h(stored)f(in)f(the)h(\014le.)51 b(As)34 b(suc)m(h,)h(FITS)e
-(headers)g(are)i(prime)e(territory)0 1544 y(for)d(storing)h
-(information)g(ab)s(out)f(the)g(co)s(ordinate)h(systems)g(asso)s
-(ciated)h(with)e(data)h(held)f(in)g(FITS)g(\014les.)0
-1700 y(In)25 b(this)h(section,)i(w)m(e)f(will)f(examine)h(ho)m(w)f(to)h
-(store)f(information)h(in)e(FITS)h(headers)f(directly)i(in)f(the)g
-(form)f(of)0 1813 y(AST)h(Ob)5 b(jects|a)26 b(pro)s(cess)g(whic)m(h)h
-(is)f(supp)s(orted)f(b)m(y)h(a)h(sp)s(ecialised)g(class)g(of)f(Channel)
-g(called)i(a)e(FitsChan.)0 1926 y(Our)43 b(discussion)h(here)g(will)h
-(turn)e(out)h(to)h(b)s(e)f(a)h(transitional)g(step)g(that)f(emphasises)
-g(the)h(similarities)0 2038 y(b)s(et)m(w)m(een)39 b(a)f(FitsChan)g(and)
-g(a)g(Channel)g(\()p Fu(x)p FF(15\).)66 b(A)m(t)39 b(the)f(same)h
-(time,)i(it)e(will)f(prepare)g(us)f(for)h(the)g(next)0
-2151 y(section)30 b(\()p Fu(x)p FF(17\),)h(where)d(w)m(e)h(will)g
-(examine)g(ho)m(w)g(to)g(use)g(a)g(FitsChan)f(to)h(tac)m(kle)i(some)e
-(of)g(the)g(more)f(di\016cult)0 2264 y(problems)i(that)h(FITS)e
-(headers)h(can)h(presen)m(t.)0 2548 y Fw(16.1)112 b(The)38
-b(Nativ)m(e)f(FITS)h(Enco)s(ding)0 2762 y FF(As)43 b(it)h(turns)e(out,)
-48 b(w)m(e)43 b(are)h(not)g(the)f(\014rst)g(to)h(ha)m(v)m(e)h(though)m
-(t)f(of)f(storing)h(W)m(CS)f(information)h(in)f(FITS)0
-2875 y(headers.)59 b(In)36 b(fact,)j(the)e(original)h(FITS)d(standard)h
-(\(1981)j(vin)m(tage\))g(de\014ned)c(a)i(set)g(of)g(header)f(k)m(eyw)m
-(ords)0 2988 y(for)31 b(this)f(purp)s(ose)f(whic)m(h)i(ha)m(v)m(e)h(b)s
-(een)e(widely)h(used,)f(although)i(they)f(ha)m(v)m(e)h(pro)m(v)m(ed)f
-(to)s(o)g(limited)h(for)e(man)m(y)0 3101 y(practical)i(purp)s(oses.)0
-3257 y(A)m(t)43 b(the)g(time)g(of)f(writing,)k(a)c(n)m(um)m(b)s(er)f
-(of)i(di\013eren)m(t)g(w)m(a)m(ys)g(of)f(using)g(FITS)g(headers)g(for)g
-(storing)g(W)m(CS)0 3370 y(information)30 b(are)g(in)f(use,)h(most)g
-(\(although)g(not)g(all\))h(based)e(on)h(the)f(original)i(standard.)40
-b(W)-8 b(e)30 b(will)g(refer)g(to)0 3483 y(these)j(alternativ)m(e)h(w)m
-(a)m(ys)f(of)f(storing)h(the)f(information)g(as)h(FITS)e
-Fx(enc)-5 b(o)g(dings)33 b FF(but)f(will)g(defer)g(a)g(discussion)0
-3596 y(of)f(their)f(adv)-5 b(an)m(tages)32 b(and)e(limitations)i(un)m
-(til)f(the)f(next)h(section)g(\()p Fu(x)p FF(17\).)0
-3752 y(Here,)d(w)m(e)f(will)f(examine)h(ho)m(w)g(to)g(store)f(AST)g(Ob)
-5 b(jects)26 b(directly)h(in)f(FITS)g(headers.)39 b(In)25
-b(e\013ect,)k(this)d(de\014nes)0 3865 y(a)38 b(new)g(enco)s(ding,)i
-(whic)m(h)d(w)m(e)i(will)f(term)g(the)g Fx(native)h(enc)-5
-b(o)g(ding.)64 b FF(This)38 b(is)f(a)i(sp)s(ecial)f(kind)f(of)h(enco)s
-(ding,)0 3978 y(b)s(ecause)d(not)f(only)h(do)s(es)f(it)h(allo)m(w)h(us)
-e(to)h(asso)s(ciate)i(con)m(v)m(en)m(tional)g(W)m(CS)e(calibration)h
-(information)f(with)0 4091 y(FITS)k(data,)k(but)c(it)i(also)f(allo)m
-(ws)i(an)m(y)e(other)g(information)g(that)g(can)h(b)s(e)e(expressed)g
-(in)g(terms)h(of)g(AST)0 4204 y(Ob)5 b(jects)38 b(to)h(b)s(e)f(stored)g
-(as)g(w)m(ell.)65 b(In)38 b(fact,)j(the)d(nativ)m(e)i(enco)s(ding)e
-(pro)m(vides)g(us)g(with)f(facilities)k(roughly)0 4316
-y(analogous)35 b(to)f(those)f(of)h(the)f(Channel)g(\()p
-Fu(x)p FF(15\)|)p Fx(i.e.)h FF(a)g(lossless)g(w)m(a)m(y)g(of)g
-(transferring)e(AST)h(Ob)5 b(jects)33 b(from)0 4429 y(program)d(to)h
-(program|but)f(based)g(on)g(FITS)g(headers)g(instead)g(of)h
-(free-format)g(text.)0 4713 y Fw(16.2)112 b(The)38 b(FitsChan)h(Mo)s
-(del)0 4927 y FF(I/O)h(b)s(et)m(w)m(een)h(AST)f(Ob)5
-b(jects)40 b(and)f(FITS)h(headers)g(is)g(supp)s(orted)e(b)m(y)j(a)f(sp)
-s(ecialised)h(form)f(of)g(Channel)0 5040 y(called)28
-b(a)f(FitsChan.)40 b(A)27 b(FitsChan)g(con)m(tains)h(a)f(bu\013er)f
-(whic)m(h)g(ma)m(y)i(hold)e(an)m(y)i(n)m(um)m(b)s(er,)e(including)h
-(zero,)h(of)0 5153 y(FITS)k(header)g(cards.)48 b(This)32
-b(bu\013er)g(forms)g(a)h(w)m(orkspace)g(in)g(whic)m(h)f(y)m(ou)h(can)g
-(assem)m(ble)h(FITS)e(cards)g(and)0 5266 y(manipulate)f(them)f(b)s
-(efore)g(writing)g(them)h(out)f(to)h(a)g(FITS)f(\014le.)0
-5422 y(By)37 b(default,)i(when)d(a)i(FitsChan)f(is)g(\014rst)f
-(created,)k(it)d(con)m(tains)i(no)d(cards)h(and)g(there)g(are)g(four)f
-(w)m(a)m(ys)i(of)0 5535 y(inserting)30 b(cards)h(in)m(to)g(it:)p
-0 5607 1512 4 v 73 5661 a Fs(23)138 5693 y Fr(h)n
-(ttp://\014ts.gsfc.nasa.go)n(v/)p eop end
-%%Page: 144 154
-TeXDict begin 144 153 bop 0 52 a FF(144)889 b Fy(16)92
-b(STORING)29 b(AST)h(OBJECTS)f(IN)h(FITS)g(HEADERS)g(\(FITSCHANS\))111
-351 y FF(1.)46 b(Y)-8 b(ou)31 b(ma)m(y)g(add)f(cards)g(y)m(ourself,)h
-(one)g(at)g(a)f(time,)i(using)e(astPutFits)h(\()p Fu(x)p
-FF(16.8\).)111 531 y(2.)46 b(Y)-8 b(ou)36 b(ma)m(y)f(add)f(cards)h(y)m
-(ourself,)h(supplying)e(all)i(cards)e(concatenated)j(in)m(to)f(a)f
-(single)h(string,)g(using)227 644 y(astPutCards)30 b(\()p
-Fu(x)p FF(16.9\).)111 824 y(3.)46 b(Y)-8 b(ou)26 b(ma)m(y)f(write)g(an)
-g(AST)f(Ob)5 b(ject)25 b(to)g(the)g(FitsChan)g(\(using)g(astW)-8
-b(rite\),)28 b(whic)m(h)d(will)g(ha)m(v)m(e)h(the)f(e\013ect)227
-937 y(of)31 b(creating)h(new)d(cards)i(within)e(the)i(FitsChan)f(whic)m
-(h)g(describ)s(e)g(the)h(Ob)5 b(ject)30 b(\()p Fu(x)p
-FF(16.5\).)111 1117 y(4.)46 b(Y)-8 b(ou)40 b(ma)m(y)g(sp)s(ecify)e(a)i
-(source)f(function)g(whic)m(h)g(reads)g(data)h(from)f(some)g(external)h
-(store)g(of)f(FITS)227 1230 y(cards,)27 b(just)f(lik)m(e)i(the)f
-(source)f(asso)s(ciated)i(with)e(a)h(basic)g(Channel)e(\()p
-Fu(x)p FF(15.13\).)43 b(If)26 b(y)m(ou)h(supply)e(a)h(source)227
-1343 y(function,)37 b(it)e(will)h(b)s(e)e(called)i(when)f(the)g
-(FitsChan)g(is)g(created)h(in)f(order)g(to)h(\014ll)f(it)g(with)g(an)g
-(initial)227 1456 y(set)c(of)g(cards)f(\()p Fu(x)p FF(16.14\).)0
-1688 y(There)g(are)h(also)g(three)g(w)m(a)m(ys)g(of)f(remo)m(ving)h
-(cards)g(from)f(a)g(FitsChan:)111 1920 y(1.)46 b(Y)-8
-b(ou)31 b(ma)m(y)g(delete)h(cards)e(y)m(ourself,)h(one)f(at)i(a)e
-(time,)i(using)d(astDelFits)k(\()p Fu(x)p FF(16.13\).)111
-2100 y(2.)46 b(Y)-8 b(ou)38 b(ma)m(y)h(read)e(an)h(AST)f(Ob)5
-b(ject)37 b(from)g(the)h(FitsChan)g(\(using)f(astRead\),)k(whic)m(h)c
-(will)h(ha)m(v)m(e)h(the)227 2213 y(e\013ect)32 b(of)f(remo)m(ving)g
-(those)g(cards)f(from)g(the)g(FitsChan)h(whic)m(h)f(describ)s(e)f(the)i
-(Ob)5 b(ject)31 b(\()p Fu(x)p FF(16.10\).)111 2393 y(3.)46
-b(Y)-8 b(ou)33 b(ma)m(y)f(sp)s(ecify)f(a)i(sink)e(function)h(whic)m(h)f
-(writes)h(data)g(to)h(some)f(external)h(store)f(of)g(FITS)f(cards,)227
-2506 y(just)f(lik)m(e)i(the)f(sink)f(asso)s(ciated)i(with)e(a)h(basic)g
-(Channel)f(\()p Fu(x)p FF(15.14\).)44 b(If)30 b(y)m(ou)h(supply)e(a)i
-(sink)g(function,)227 2619 y(it)j(will)f(b)s(e)g(called)h(when)e(the)i
-(FitsChan)f(is)g(deleted)h(in)f(order)f(to)i(write)g(out)f(an)m(y)h
-(FITS)e(cards)h(that)227 2732 y(remain)e(in)f(it)h(\()p
-Fu(x)p FF(16.14\).)0 2964 y(Note,)42 b(in)c(particular,)j(that)e
-(reading)f(an)h(AST)e(Ob)5 b(ject)39 b(from)f(a)h(FitsChan)f(is)g
-Fx(destructive.)65 b FF(That)38 b(is,)j(it)0 3077 y(deletes)31
-b(the)g(FITS)f(cards)g(that)h(describ)s(e)f(the)g(Ob)5
-b(ject.)41 b(The)30 b(reason)g(for)h(this)f(is)g(explained)h(in)f
-Fu(x)p FF(17.5.)0 3232 y(In)25 b(addition)h(to)h(the)f(ab)s(o)m(v)m(e,)
-i(y)m(ou)f(ma)m(y)f(also)h(read)f(individual)f(cards)h(from)f(a)h
-(FitsChan)g(using)g(the)g(function)0 3345 y(astFindFits)j(\(whic)m(h)f
-(is)g(not)h(destructiv)m(e\).)41 b(This)28 b(is)g(the)g(main)g(means)g
-(of)g(writing)g(out)h(FITS)e(cards)h(if)g(y)m(ou)0 3458
-y(ha)m(v)m(e)i(not)f(supplied)f(a)h(sink)f(function.)40
-b(astFindFits)30 b(also)f(pro)m(vides)g(a)g(means)g(of)g(searc)m(hing)h
-(for)e(particular)0 3571 y(FITS)i(cards)h(\(b)m(y)g(k)m(eyw)m(ord,)h
-(for)f(example\))h(and)e(there)i(are)f(other)g(facilities)i(for)e(o)m
-(v)m(erwriting)i(cards)d(when)0 3684 y(required)g(\()p
-Fu(x)p FF(16.13\).)0 3966 y Fw(16.3)112 b(Creating)38
-b(a)g(FitsChan)0 4180 y FF(The)30 b(FitsChan)g(constructor)h(function,)
-f(astFitsChan,)h(is)g(straigh)m(tforw)m(ard)g(to)g(use:)227
-4398 y Ft(#include)41 b("ast.h")227 4498 y(AstFitsChan)e(*fitschan;)227
-4697 y(...)227 4896 y(fitschan)i(=)i(astFitsChan\()38
-b(NULL,)k(NULL,)f("Encoding=NATIVE")c(\);)0 5128 y FF(Here,)i(w)m(e)e
-(ha)m(v)m(e)g(omitted)h(an)m(y)f(source)f(or)h(sink)f(functions)g(b)m
-(y)g(supplying)g(NULL)g(p)s(oin)m(ters)g(for)h(the)f(\014rst)0
-5241 y(t)m(w)m(o)g(argumen)m(ts.)55 b(W)-8 b(e)36 b(ha)m(v)m(e)g(also)g
-(initialised)g(the)f(FitsChan's)g(Enco)s(ding)f(attribute)h(to)h(NA)-8
-b(TIVE.)35 b(This)0 5354 y(indicates)30 b(that)f(w)m(e)g(will)g(b)s(e)f
-(using)g(the)h(nativ)m(e)h(enco)s(ding)e(\()p Fu(x)p
-FF(16.1\))k(to)d(store)g(and)f(retriev)m(e)i(Ob)5 b(jects.)40
-b(If)29 b(this)0 5467 y(w)m(as)g(left)g(unsp)s(eci\014ed,)e(the)h
-(default)h(w)m(ould)f(dep)s(end)e(on)i(the)h(FitsChan's)f(con)m(ten)m
-(ts.)42 b(An)28 b(attempt)h(is)f(made)0 5580 y(to)36
-b(use)f(whatev)m(er)h(enco)s(ding)g(app)s(ears)e(to)i(ha)m(v)m(e)h(b)s
-(een)e(used)f(previously)-8 b(.)56 b(F)-8 b(or)36 b(an)g(empt)m(y)g
-(FitsChan,)g(the)0 5693 y(default)31 b(is)f(NA)-8 b(TIVE,)31
-b(but)f(it)g(do)s(es)g(no)h(harm)e(to)i(b)s(e)f(sure.)p
-eop end
-%%Page: 145 155
-TeXDict begin 145 154 bop 0 52 a Fy(16.4)93 b(Addressing)29
-b(Cards)g(in)h(a)h(FitsChan)2109 b FF(145)0 351 y Fw(16.4)112
-b(Addressing)39 b(Cards)f(in)f(a)h(FitsChan)0 601 y FF(Because)e(a)f
-(FitsChan)g(con)m(tains)h(an)f(ordered)f(sequence)h(of)g(header)f
-(cards,)i(a)f(mec)m(hanism)g(is)g(needed)g(for)0 714
-y(addressing)d(them.)46 b(This)31 b(allo)m(ws)j(y)m(ou)f(to)g(sp)s
-(ecify)f(where)f(new)h(cards)g(are)h(to)g(b)s(e)e(added,)i(for)f
-(example,)h(or)0 827 y(whic)m(h)d(card)g(is)h(to)g(b)s(e)f(deleted.)0
-1009 y(This)e(role)h(is)g(\014lled)f(b)m(y)g(the)h(FitsChan's)g(in)m
-(teger)h(Card)d(attribute,)j(whic)m(h)f(giv)m(es)g(the)g(index)f(of)h
-(the)g Fx(curr)-5 b(ent)0 1122 y(c)g(ar)g(d)37 b FF(in)d(the)h
-(FitsChan.)54 b(Y)-8 b(ou)36 b(can)f(nominate)g(an)m(y)h(card)f(y)m(ou)
-g(lik)m(e)h(to)g(b)s(e)e(curren)m(t,)i(simply)e(b)m(y)h(setting)h(a)0
-1235 y(new)30 b(v)-5 b(alue)31 b(for)f(the)g(Card)g(attribute,)h(for)f
-(example:)227 1542 y Ft(int)43 b(icard;)227 1741 y(...)227
-1940 y(astSetI\()e(fitschan,)e("Card",)i(icard)h(\))0
-2261 y FF(where)25 b(\\icard")i(con)m(tains)g(the)f(index)g(of)g(the)g
-(card)g(on)g(whic)m(h)f(y)m(ou)h(wish)f(to)i(op)s(erate)g(next.)39
-b(Some)26 b(functions)0 2374 y(will)36 b(up)s(date)g(the)g(Card)f
-(attribute)i(as)f(a)h(means)f(of)g(adv)-5 b(ancing)37
-b(through)e(the)h(sequence)h(of)f(cards,)h(when)0 2487
-y(reading)30 b(them)h(for)f(example,)h(or)g(to)g(indicate)g(whic)m(h)f
-(card)h(matc)m(hes)g(a)g(searc)m(h)g(criterion.)0 2669
-y(The)d(default)h(v)-5 b(alue)30 b(for)e(Card)g(is)h(one,)h(whic)m(h)f
-(is)g(the)g(index)f(of)h(the)g(\014rst)f(card.)41 b(This)28
-b(means)g(that)i(y)m(ou)f(can)0 2782 y(\\rewind")h(a)h(FitsChan)f(to)h
-(access)h(its)f(\014rst)e(card)i(b)m(y)f(clearing)h(the)g(Card)f
-(attribute:)227 3089 y Ft(astClear\()40 b(fitschan,)g("Card")h(\);)0
-3409 y FF(The)e(total)j(n)m(um)m(b)s(er)c(of)i(cards)f(in)g(a)h
-(FitsChan)g(is)g(giv)m(en)g(b)m(y)g(the)g(in)m(teger)h(Ncard)e
-(attribute.)70 b(This)38 b(is)i(a)0 3522 y(read-only)28
-b(attribute)h(whose)f(v)-5 b(alue)28 b(is)g(automatically)j(up)s(dated)
-c(as)h(y)m(ou)g(add)f(or)h(remo)m(v)m(e)i(cards.)39 b(It)29
-b(means)0 3635 y(y)m(ou)i(can)f(address)g(all)h(the)g(cards)f(in)g
-(sequence)h(using)f(a)g(lo)s(op)h(suc)m(h)f(as)g(the)h(follo)m(wing:)
-227 3942 y Ft(int)43 b(ncard;)227 4141 y(...)227 4340
-y(ncard)f(=)h(astGetI\()d(fitschan,)g("Ncard")h(\);)227
-4440 y(for)i(\()g(icard)e(=)i(1;)g(icard)f(<=)h(ncard;)e(icard++)f(\))j
-({)358 4540 y(astSetI\()d(fitschan,)g("Card",)h(icard)g(\);)358
-4639 y(<access)g(the)h(current)f(card>)227 4739 y(})0
-5059 y FF(Ho)m(w)m(ev)m(er,)d(it)d(is)g(usually)g(p)s(ossible)f(to)h
-(write)g(sligh)m(tly)h(tidier)f(lo)s(ops)g(based)f(on)h(the)g
-(astFindFits)h(function)0 5172 y(describ)s(ed)29 b(later)j(\()p
-Fu(x)p FF(16.6)g(and)e Fu(x)p FF(16.13\).)0 5354 y(If)k(y)m(ou)h(set)g
-(the)g(Card)f(attribute)h(to)g(a)g(v)-5 b(alue)35 b(larger)h(than)e
-(Ncard,)i(the)f(FitsChan)f(is)h(regarded)f(as)h(b)s(eing)0
-5467 y(p)s(ositioned)h(at)g(its)g Fx(end-of-\014le.)55
-b FF(In)35 b(this)h(case)g(there)g(is)g(no)f(curren)m(t)g(card)h(and)f
-(an)g(attempt)i(to)f(obtain)g(a)0 5580 y(v)-5 b(alue)26
-b(for)g(the)g(Card)f(attribute)i(will)f(alw)m(a)m(ys)h(return)e(the)h
-(v)-5 b(alue)27 b(Ncard)f(+)f(1.)40 b(When)25 b(a)i(FitsChan)e(is)h
-(empt)m(y)-8 b(,)0 5693 y(it)31 b(is)f(alw)m(a)m(ys)i(at)f(the)g
-(end-of-\014le.)p eop end
-%%Page: 146 156
-TeXDict begin 146 155 bop 0 52 a FF(146)889 b Fy(16)92
-b(STORING)29 b(AST)h(OBJECTS)f(IN)h(FITS)g(HEADERS)g(\(FITSCHANS\))0
-351 y Fw(16.5)112 b(W)-9 b(riting)37 b(Nativ)m(e)g(Ob)6
-b(jects)38 b(to)f(a)h(FitsChan)0 571 y FF(Ha)m(ving)d(created)g(an)e
-(empt)m(y)i(FitsChan)e(\()p Fu(x)p FF(16.3\),)38 b(y)m(ou)c(can)g
-(write)g(an)m(y)g(AST)f(Ob)5 b(ject)34 b(to)g(it)h(in)e(the)h(nativ)m
-(e)0 684 y(enco)s(ding)c(using)g(the)h(astW)-8 b(rite)32
-b(function.)41 b(Let)30 b(us)g(assume)g(w)m(e)h(are)g(writing)f(a)h
-(SkyF)-8 b(rame,)3225 651 y Fv(24)3331 684 y FF(as)30
-b(follo)m(ws:)227 927 y Ft(AstSkyFrame)39 b(*skyframe;)227
-1027 y(int)k(nobj;)227 1226 y(...)227 1426 y(nobj)f(=)h(astWrite\()d
-(fitschan,)g(skyframe)g(\);)0 1682 y FF(Since)22 b(w)m(e)h(ha)m(v)m(e)g
-(selected)h(the)e(nativ)m(e)h(enco)s(ding)f(\()p Fu(x)p
-FF(16.1\),)27 b(there)22 b(are)h(no)f(restrictions)h(on)f(the)g(class)h
-(of)f(Ob)5 b(ject)0 1795 y(w)m(e)30 b(ma)m(y)f(write,)h(so)g(astW)-8
-b(rite)31 b(should)d(alw)m(a)m(ys)j(return)d(a)i(v)-5
-b(alue)29 b(of)h(one,)g(unless)e(an)h(error)g(o)s(ccurs.)40
-b(Unlik)m(e)30 b(a)0 1908 y(basic)e(Channel)f(\()p Fu(x)p
-FF(15.3\),)k(this)d(write)g(op)s(eration)g(will)h(not)f(pro)s(duce)e
-(an)m(y)i(output)g(from)f(our)g(program.)40 b(The)0 2021
-y(FITS)30 b(headers)g(pro)s(duced)e(are)j(simply)f(stored)h(inside)f
-(the)g(FitsChan.)0 2182 y(After)38 b(this)f(write)g(op)s(eration,)j
-(the)d(Ncard)h(attribute)g(will)f(b)s(e)g(up)s(dated)f(to)i(re\015ect)g
-(the)g(n)m(um)m(b)s(er)e(of)h(new)0 2295 y(cards)f(added)f(to)h(the)g
-(FitsChan)g(and)f(the)h(Card)f(attribute)i(will)f(p)s(oin)m(t)g(at)g
-(the)g(card)g(immediately)h(after)0 2408 y(the)g(last)g(one)g(written.)
-59 b(Since)37 b(our)f(FitsChan)h(w)m(as)g(initially)h(empt)m(y)-8
-b(,)39 b(the)e(Card)e(attribute)j(will,)g(in)f(this)0
-2521 y(example,)31 b(p)s(oin)m(t)g(at)g(the)f(end-of-\014le)h(\()p
-Fu(x)p FF(16.4\).)0 2682 y(The)41 b(FITS)f(standard)h(imp)s(oses)f(a)i
-(limit)g(of)f(68)h(c)m(haracters)h(on)e(the)g(length)h(of)f(strings)g
-(whic)m(h)g(ma)m(y)h(b)s(e)0 2795 y(stored)33 b(in)g(a)g(single)g
-(header)g(card.)48 b(Sometimes,)35 b(a)e(description)g(of)g(an)g(AST)f
-(Ob)5 b(ject)33 b(in)m(v)m(olv)m(es)i(the)e(use)f(of)0
-2908 y(strings)c(whic)m(h)f(exceed)i(this)f(limit)g(\()p
-Fx(e.g.)g FF(a)g(F)-8 b(rame)28 b(title)i(can)e(b)s(e)f(of)h(arbitrary)
-f(length\).)41 b(If)27 b(this)h(o)s(ccurs,)g(the)0 3021
-y(long)j(string)g(will)f(b)s(e)g(split)h(o)m(v)m(er)h(t)m(w)m(o)g(or)e
-(more)h(header)f(cards.)41 b(Eac)m(h)31 b(\\con)m(tin)m(uation")i(card)
-e(will)g(ha)m(v)m(e)g(the)0 3134 y(k)m(eyw)m(ord)d Fq(CONTINUE)e
-FF(in)i(columns)f(1)h(to)h(8,)g(and)e(will)i(con)m(tain)g(a)f(space)h
-(in)e(column)h(9)g(\(instead)h(of)f(the)g(usual)0 3247
-y(equals)h(sign\).)40 b(An)29 b(amp)s(ersand)e(\(\\)p
-Fq(&)p FF("\))i(is)g(app)s(ended)e(to)i(the)g(end)f(of)g(eac)m(h)i(of)f
-(the)g(strings)f(\(except)i(the)f(last)0 3360 y(one\))i(to)g(indicate)h
-(that)f(the)f(string)g(is)h(con)m(tin)m(ued)g(on)f(the)h(next)f(card.)0
-3521 y(Note,)42 b(this)d(splitting)h(of)f(long)g(strings)g(o)m(v)m(er)h
-(sev)m(eral)g(cards)e(only)h(o)s(ccurs)g(when)f(writing)g(AST)g(Ob)5
-b(jects)0 3634 y(to)37 b(a)f(FitsChan)f(using)h(the)g(astW)-8
-b(rite)38 b(function)d(and)h(the)g Fx(native)g FF(enco)s(ding.)57
-b(If)35 b(a)h(long)h(string)e(is)h(stored)0 3747 y(in)j(a)g(FitsChan)g
-(using)g(\(for)g(instance\))h(the)f(astPutFits)h(or)f(astPutCards)f
-(function,)k(it)d(will)h(simply)e(b)s(e)0 3860 y(truncated.)0
-4151 y Fw(16.6)112 b(Extracting)37 b(Individual)i(Cards)f(from)g(a)g
-(FitsChan)0 4371 y FF(T)-8 b(o)37 b(examine)h(the)e(con)m(ten)m(ts)j
-(of)e(the)g(FitsChan)f(after)i(writing)e(the)h(SkyF)-8
-b(rame)37 b(ab)s(o)m(v)m(e)h(\()p Fu(x)p FF(16.5\),)j(w)m(e)d(m)m(ust)0
-4484 y(write)d(a)h(simple)e(lo)s(op)i(to)f(extract)i(eac)m(h)f(card)f
-(in)f(turn)g(and)h(prin)m(t)f(it)i(out.)54 b(W)-8 b(e)37
-b(m)m(ust)d(also)i(remem)m(b)s(er)f(to)0 4597 y(rewind)29
-b(the)i(FitsChan)f(\014rst,)g Fx(e.g.)g FF(using)f(astClear.)42
-b(The)30 b(follo)m(wing)i(lo)s(op)e(w)m(ould)h(do:)227
-4840 y Ft(#include)41 b(<stdio.h>)227 4940 y(char)h(card[)g(81)g(];)227
-5139 y(...)227 5338 y(astClear\()e(fitschan,)g("Card")h(\);)227
-5438 y(while)h(\()h(astFindFits\()c(fitschan,)g("\045f",)j(card,)f(1)j
-(\))f(\))g(\(void\))e(printf\()g("\045s\\n",)f(card)i(\);)p
-0 5516 1512 4 v 73 5570 a Fs(24)138 5602 y Fr(More)27
-b(probably)-6 b(,)26 b(y)n(ou)g(w)n(ould)g(w)n(an)n(t)h(to)f(write)h(a)
-g(F)-6 b(rameSet,)26 b(but)g(for)h(purp)r(oses)f(of)h(illustration)h(a)
-e(SkyF)-6 b(rame)25 b(con)n(tains)i(a)0 5693 y(more)f(manageable)h
-(amoun)n(t)f(of)g(data.)p eop end
-%%Page: 147 157
-TeXDict begin 147 156 bop 0 52 a Fy(16.7)93 b(The)29
-b(Nativ)m(e)k(FitsChan)d(Output)f(F)-8 b(ormat)1904 b
-FF(147)0 351 y(Here,)43 b(w)m(e)e(ha)m(v)m(e)g(used)e(the)h
-(astFindFits)h(function)f(to)g(\014nd)f(a)h(FITS)f(card)h(b)m(y)g(k)m
-(eyw)m(ord.)70 b(It)40 b(is)g(giv)m(en)h(a)0 464 y(k)m(eyw)m(ord)e
-(template)h(of)f(\\\045f)7 b(",)42 b(whic)m(h)c(matc)m(hes)i(an)m(y)f
-(FITS)f(k)m(eyw)m(ord,)k(so)d(it)g(alw)m(a)m(ys)i(\014nds)c(the)i
-(curren)m(t)0 577 y(card,)44 b(whic)m(h)d(it)h(returns.)72
-b(Its)41 b(fourth)f(argumen)m(t)i(is)f(set)h(to)g(1,)i(to)e(indicate)g
-(that)g(the)f(Card)g(attribute)0 690 y(should)27 b(b)s(e)g(incremen)m
-(ted)h(afterw)m(ards)g(so)g(that)g(the)g(follo)m(wing)i(card)d(will)h
-(b)s(e)g(found)e(the)i(next)g(time)g(around)0 803 y(the)j(lo)s(op.)40
-b(astFindFits)32 b(returns)d(zero)i(when)e(it)i(reac)m(hes)h(the)e
-(end-of-\014le)h(and)f(this)g(terminates)h(the)g(lo)s(op.)0
-961 y(If)37 b(w)m(e)g(w)m(ere)h(storing)f(the)g(FITS)g(headers)f(in)h
-(an)g(output)g(FITS)f(\014le)h(instead)h(of)f(prin)m(ting)g(them)g
-(out,)i(w)m(e)0 1074 y(migh)m(t)h(use)f(a)h(lo)s(op)g(lik)m(e)h(this)e
-(but)g(replace)h(\\prin)m(tf)7 b(")40 b(with)g(a)f(suitable)h(data)h
-(storage)g(op)s(eration.)68 b(This)0 1187 y(w)m(ould)30
-b(only)h(b)s(e)e(necessary)i(if)f(w)m(e)h(had)f(not)h(pro)m(vided)f(a)g
-(sink)g(function)g(for)h(the)f(FitsChan)g(\()p Fu(x)p
-FF(16.14\).)0 1474 y Fw(16.7)112 b(The)38 b(Nativ)m(e)f(FitsChan)i
-(Output)f(F)-9 b(ormat)0 1692 y FF(If)39 b(w)m(e)g(prin)m(t)g(out)g
-(the)g(FITS)g(header)g(cards)f(describing)h(the)g(SkyF)-8
-b(rame)40 b(w)m(e)f(wrote)h(earlier)g(\()p Fu(x)p FF(16.5\),)k(w)m(e)0
-1805 y(should)29 b(obtain)i(something)g(lik)m(e)h(the)e(follo)m(wing:)
-227 2037 y Ft(COMMENT)41 b(AST)h(+++++++++++++++++)o(++)o(+++)o(++)o
-(+++)o(++)o(++)o(+++)o(++)o(+++)o(++)o(+++)o(++)o(++)o(+++)o(++)o(+++)o
-(++)o(++)o(+++)o(+)37 b(AST)227 2137 y(COMMENT)k(AST)522
-b(Beginning)40 b(of)i(AST)h(data)f(for)g(SkyFrame)e(object)564
-b(AST)227 2236 y(COMMENT)41 b(AST)h(.................)o(..)o(...)o(..)o
-(...)o(..)o(..)o(...)o(..)o(...)o(..)o(...)o(..)o(..)o(...)o(..)o(...)o
-(..)o(..)o(...)o(.)37 b(AST)227 2336 y(BEGAST_A=)j('SkyFrame')475
-b(/)44 b(Description)39 b(of)j(celestial)e(coordinate)g(system)227
-2435 y(NAXES_A)h(=)871 b(2)43 b(/)h(Number)d(of)h(coordinate)e(axes)227
-2535 y(AX1_A)129 b(=)43 b(')348 b(')479 b(/)44 b(Axis)e(number)f(1)227
-2635 y(BEGAST_B=)f('SkyAxis)g(')479 b(/)44 b(Celestial)39
-b(coordinate)h(axis)227 2734 y(ENDAST_A=)g('SkyAxis)g(')479
-b(/)44 b(End)e(of)h(object)e(definition)227 2834 y(AX2_A)129
-b(=)43 b(')348 b(')479 b(/)44 b(Axis)e(number)f(2)227
-2934 y(BEGAST_C=)f('SkyAxis)g(')479 b(/)44 b(Celestial)39
-b(coordinate)h(axis)227 3033 y(ENDAST_B=)g('SkyAxis)g(')479
-b(/)44 b(End)e(of)h(object)e(definition)227 3133 y(ISA_A)129
-b(=)43 b('Frame)128 b(')479 b(/)44 b(Coordinate)39 b(system)i
-(description)227 3232 y(SYSTEM_A=)f('FK4-NO-E')475 b(/)44
-b(Celestial)39 b(coordinate)h(system)h(type)227 3332
-y(EPOCH_A)g(=)653 b(1958.0)41 b(/)j(Besselian)39 b(epoch)j(of)h
-(observation)227 3432 y(ENDAST_C=)d('SkyFrame')475 b(/)44
-b(End)e(of)h(object)e(definition)227 3531 y(COMMENT)g(AST)h
-(.................)o(..)o(...)o(..)o(...)o(..)o(..)o(...)o(..)o(...)o
-(..)o(...)o(..)o(..)o(...)o(..)o(...)o(..)o(..)o(...)o(.)37
-b(AST)227 3631 y(COMMENT)k(AST)653 b(End)42 b(of)h(AST)f(data)g(for)g
-(SkyFrame)f(object)694 b(AST)227 3731 y(COMMENT)41 b(AST)h
-(-----------------)o(--)o(---)o(--)o(---)o(--)o(--)o(---)o(--)o(---)o
-(--)o(---)o(--)o(--)o(---)o(--)o(---)o(--)o(--)o(---)o(-)37
-b(AST)0 3976 y FF(As)i(y)m(ou)h(can)f(see,)j(this)d(resem)m(bles)h(the)
-f(information)g(that)h(w)m(ould)f(b)s(e)f(written)i(to)f(a)h(basic)f
-(Channel)g(to)0 4089 y(describ)s(e)26 b(the)h(same)g(SkyF)-8
-b(rame)27 b(\()p Fu(x)p FF(15.8\),)j(except)e(that)f(it)g(has)g(b)s
-(een)e(formatted)j(in)m(to)f(80-c)m(haracter)j(header)0
-4202 y(cards)g(according)h(to)h(FITS)d(con)m(v)m(en)m(tions.)0
-4361 y(There)h(are)h(also)g(a)g(n)m(um)m(b)s(er)e(of)h(other)h
-(di\013erences)g(w)m(orth)f(noting:)111 4606 y(1.)46
-b(There)33 b(is)h(no)f(unnecessary)g(information)g(ab)s(out)g(default)h
-(v)-5 b(alues)34 b(pro)m(vided)f(for)g(the)g(b)s(ene\014t)g(of)g(the)
-227 4719 y(h)m(uman)40 b(reader.)73 b(This)40 b(is)h(b)s(ecause)g(the)g
-(F)-8 b(ull)42 b(attribute)f(for)g(a)g(FitsChan)g(defaults)g(to)h
-Fu(\000)p FF(1,)i(th)m(us)227 4832 y(suppressing)32 b(this)h
-(information)g(\()p Fx(c.f.)g Fu(x)p FF(15.9\).)51 b(Y)-8
-b(ou)34 b(can)f(restore)h(the)f(information)h(if)f(y)m(ou)g(wish)g(b)m
-(y)227 4945 y(setting)i(F)-8 b(ull)35 b(to)g(0)f(or)g(+1,)h(in)f(whic)m
-(h)g(case)h(additional)g(COMMENT)e(cards)h(will)g(b)s(e)g(generated)h
-(to)227 5058 y(hold)30 b(it.)111 5241 y(2.)46 b(The)24
-b(information)g(is)g(not)g(inden)m(ted,)i(b)s(ecause)e(FITS)f(do)s(es)g
-(not)i(allo)m(w)g(this.)39 b(Ho)m(w)m(ev)m(er,)27 b(if)d(y)m(ou)g(c)m
-(hange)227 5354 y(the)32 b(F)-8 b(ull)33 b(attribute)f(to)h(0)f(or)g
-(+1,)h(commen)m(ts)g(will)f(b)s(e)f(included)g(that)i(are)f(in)m
-(tended)g(to)g(help)g(break)227 5467 y(up)f(the)i(sequence)f(of)h
-(headers)e(and)h(highligh)m(t)h(its)g(structure.)45 b(This)32
-b(will)g(probably)g(only)g(b)s(e)f(of)i(use)227 5580
-y(if)d(y)m(ou)g(are)h(attempting)g(to)g(trac)m(k)g(do)m(wn)e(a)i
-(problem)e(b)m(y)h(examining)g(the)h(FITS)e(cards)g(pro)s(duced)g(in)
-227 5693 y(detail.)p eop end
-%%Page: 148 158
-TeXDict begin 148 157 bop 0 52 a FF(148)889 b Fy(16)92
-b(STORING)29 b(AST)h(OBJECTS)f(IN)h(FITS)g(HEADERS)g(\(FITSCHANS\))111
-351 y FF(3.)46 b(The)32 b(FITS)g(k)m(eyw)m(ords)g(whic)m(h)h(app)s(ear)
-e(to)i(the)g(left)g(of)f(the)h(\\=")g(signs)f(ha)m(v)m(e)i(additional)f
-(c)m(haracters)227 464 y(\(\\)p Fq(_)p FF(A",)27 b(\\)p
-Fq(_)p FF(B",)f Fx(etc.)p FF(\))38 b(app)s(ended)24 b(to)h(them.)39
-b(This)24 b(is)h(done)g(in)g(order)f(to)i(mak)m(e)g(eac)m(h)g(k)m(eyw)m
-(ord)f(unique.)0 759 y(This)d(last)i(p)s(oin)m(t)f(is)h(w)m(orth)f
-(further)e(commen)m(t)k(and)d(is)h(necessary)h(b)s(ecause)f(the)g(FITS)
-g(standard)f(only)h(allo)m(ws)0 872 y(for)28 b(certain)h(k)m(eyw)m
-(ords)f(\(suc)m(h)g(as)g(COMMENT)g(and)f(HISTOR)-8 b(Y\))28
-b(to)h(app)s(ear)e(more)h(than)g(once.)40 b(astW)-8 b(rite)0
-985 y(therefore)32 b(app)s(ends)e(an)h(arbitrary)g(sequence)h(of)g(t)m
-(w)m(o)g(c)m(haracters)h(to)f(eac)m(h)h(new)e(k)m(eyw)m(ord)h(it)g
-(generates)h(in)0 1098 y(order)d(to)h(ensure)f(that)h(it)f(do)s(es)h
-(not)f(duplicate)h(an)m(y)g(already)g(presen)m(t)f(in)g(the)h
-(FitsChan.)0 1272 y(The)24 b(main)g(risk)g(from)f(not)i(follo)m(wing)h
-(this)e(con)m(v)m(en)m(tion)i(is)e(that)h(some)g(soft)m(w)m(are)h(migh)
-m(t)f(ignore)f(\(sa)m(y\))i(all)f(but)0 1385 y(the)k(last)h(o)s
-(ccurrence)f(of)g(a)g(k)m(eyw)m(ord)g(b)s(efore)g(passing)f(the)h(FITS)
-f(headers)h(on.)40 b(Suc)m(h)28 b(an)h(ev)m(en)m(t)h(is)f(unlik)m(ely)
--8 b(,)0 1498 y(but)27 b(w)m(ould)g(ob)m(viously)h(destro)m(y)g(the)g
-(information)g(presen)m(t,)g(so)g(astW)-8 b(rite)30 b(enforces)e(the)f
-(uniqueness)g(of)g(the)0 1610 y(k)m(eyw)m(ords)k(it)g(uses.)40
-b(The)30 b(extra)h(c)m(haracters)h(added)d(are)i(ignored)g(when)e(the)i
-(information)f(is)h(read)f(bac)m(k.)0 1784 y(As)44 b(with)g(a)g(basic)h
-(Channel,)h(y)m(ou)f(can)f(also)h(suppress)d(the)i(commen)m(ts)h(pro)s
-(duced)e(in)g(a)i(FitsChan)f(b)m(y)0 1897 y(setting)35
-b(the)e(b)s(o)s(olean)h(\(in)m(teger\))i(Commen)m(t)e(attribute)g(to)g
-(zero)h(\()p Fu(x)p FF(15.10\).)53 b(Ho)m(w)m(ev)m(er,)37
-b(FITS)c(headers)g(are)0 2010 y(traditionally)f(generously)f(commen)m
-(ted,)g(so)g(this)f(is)h(not)f(recommended.)0 2340 y
-Fw(16.8)112 b(Adding)38 b(Individual)i(Cards)e(to)f(a)g(FitsChan)0
-2578 y FF(T)-8 b(o)31 b(insert)g(individual)f(cards)g(in)m(to)i(a)f
-(FitsChan,)g(prior)f(to)h(reading)g(them)f(bac)m(k)i(as)e(Ob)5
-b(jects)31 b(for)g(example,)0 2690 y(y)m(ou)37 b(should)f(use)h(the)g
-(astPutFits)h(function.)61 b(Y)-8 b(ou)37 b(can)h(insert)f(a)g(card)g
-(in)g(fron)m(t)g(of)g(the)g(curren)m(t)g(one)g(as)0 2803
-y(follo)m(ws:)227 3085 y Ft(astPutFits\()i(fitschan,)h(card,)i(0)h(\);)
-0 3380 y FF(where)c(the)h(third)e(argumen)m(t)i(of)g(zero)g(indicates)g
-(that)g(the)g(curren)m(t)f(card)h(should)e(not)i(b)s(e)f(o)m(v)m
-(erwritten.)0 3493 y(Note)32 b(that)f(facilities)h(are)f(not)g(pro)m
-(vided)f(b)m(y)g(AST)g(for)g(formatting)h(the)f(card)h(con)m(ten)m(ts.)
-0 3667 y(After)41 b(inserting)g(a)h(card,)i(the)d(FitsChan's)g(Card)f
-(attribute)i(p)s(oin)m(ts)f(at)h(the)f(original)h(Card,)h(or)e(at)h
-(the)0 3780 y(end-of-\014le)k(if)f(the)h(FitsChan)g(w)m(as)g
-(originally)g(empt)m(y)-8 b(.)88 b(En)m(tering)45 b(a)h(sequence)g(of)g
-(cards)f(is)h(therefore)0 3893 y(straigh)m(tforw)m(ard.)79
-b(If)43 b(\\cards")g(is)g(an)g(arra)m(y)h(of)f(p)s(oin)m(ters)g(to)g
-(strings)g(con)m(taining)i(FITS)d(header)h(cards)0 4006
-y(and)32 b(\\ncards")h(is)g(the)g(n)m(um)m(b)s(er)e(of)i(cards,)g(then)
-g(a)g(lo)s(op)f(suc)m(h)h(as)g(the)g(follo)m(wing)h(will)f(insert)f
-(the)h(cards)g(in)0 4119 y(sequence)e(in)m(to)g(a)g(FitsChan:)227
-4401 y Ft(#define)41 b(MAXCARD)g(100)227 4500 y(char)h(*cards[)f
-(MAXCARD)g(];)227 4600 y(int)i(ncard;)227 4799 y(...)227
-4998 y(for)g(\()g(icard)e(=)i(0;)g(icard)f(<)h(ncard;)e(icard++)g(\))i
-(astPutFits\()c(fitschan,)h(cards[)h(icard)g(],)i(0)g(\);)0
-5294 y FF(The)30 b(string)f(con)m(taining)j(a)e(card)g(need)g(not)g(b)s
-(e)g(n)m(ull)g(terminated)g(if)g(it)h(is)f(at)g(least)i(80)f(c)m
-(haracters)g(long)g(\(w)m(e)0 5406 y(ha)m(v)m(e)h(not)e(allo)s(cated)j
-(space)e(for)f(the)g(strings)g(themselv)m(es)i(in)e(this)g(brief)g
-(example\).)0 5580 y(Note)37 b(that)f(astPutFits)h(enforces)f(the)g(v)
--5 b(alidit)m(y)37 b(of)f(a)g(FitsChan)g(b)m(y)g(rejecting)h(an)m(y)f
-(cards)f(whic)m(h)h(do)f(not)0 5693 y(adhere)30 b(to)h(the)g(FITS)e
-(standard.)40 b(If)30 b(an)m(y)h(suc)m(h)f(cards)g(are)h(detected,)h
-(an)e(error)g(will)h(result.)p eop end
-%%Page: 149 159
-TeXDict begin 149 158 bop 0 52 a Fy(16.9)93 b(Adding)29
-b(Concatenated)j(Cards)d(to)i(a)g(FitsChan)1676 b FF(149)0
-351 y Fw(16.9)112 b(Adding)38 b(Concatenated)h(Cards)f(to)f(a)h
-(FitsChan)0 563 y FF(If)f(y)m(ou)h(ha)m(v)m(e)h(all)f(y)m(our)g(cards)f
-(concatenated)j(together)f(in)m(to)g(a)f(single)g(long)g(string,)i(eac)
-m(h)f(o)s(ccup)m(ying)f(80)0 676 y(c)m(haracters)45 b(\(with)f(no)g
-(delimiters\),)k(y)m(ou)d(can)f(insert)g(them)g(in)m(to)g(a)h(FitsChan)
-e(in)h(a)g(single)h(call)g(using)0 789 y(astPutCards.)53
-b(This)34 b(call)i(\014rst)e(empties)h(the)g(supplied)e(FitsChan)i(of)g
-(an)m(y)g(existing)h(cards,)f(then)g(inserts)0 902 y(the)30
-b(new)g(cards,)g(and)f(\014nally)h(rewinds)f(the)h(FitsChan)g(so)g
-(that)h(a)f(subsequen)m(t)g(call)h(to)g(astRead)g(will)f(start)0
-1014 y(reading)37 b(from)g(the)h(\014rst)e(supplied)g(card.)61
-b(The)37 b(astPutCards)f(function)h(uses)g(astPutFits)i(in)m(ternally)f
-(to)0 1127 y(in)m(terpret)31 b(and)f(store)h(eac)m(h)g(individual)f
-(card,)g(and)g(so)h(the)f(ca)m(v)m(eats)j(in)e Fu(x)p
-FF(16.8)h(should)d(b)s(e)h(read.)0 1280 y(F)-8 b(or)39
-b(instance,)j(if)d(y)m(ou)g(are)g(using)f(the)h(CFITSIO)e(library)h
-(for)h(access)h(to)f(FITS)f(\014les,)j(y)m(ou)e(can)g(use)f(the)0
-1393 y(CFITSIO)29 b(\014ts)p Fq(_)p FF(hdr2str)f(function)j(to)g
-(obtain)f(a)h(string)g(suitable)f(for)h(passing)f(to)h(astPutCards:)227
-1802 y Ft(if\()43 b(!fits_hdr2str\()37 b(fptr,)42 b(0,)h(NULL,)e(0,)i
-(&header,)d(&nkeys,)h(&status)g(\))i(\))358 1901 y(fitschan)d(=)j
-(astFitsChan\()c(NULL,)j(NULL,)f("")i(\);)358 2001 y(astPutCards\()c
-(fitschan,)h(header)h(\);)358 2101 y(header)g(=)i(free\()f(header)f
-(\);)358 2200 y(wcsinfo)g(=)i(astRead\()d(fitschan)g(\);)358
-2399 y(...)227 2499 y(})0 2778 y Fw(16.10)112 b(Reading)39
-b(Nativ)m(e)e(Ob)6 b(jects)38 b(F)-9 b(rom)38 b(a)g(FitsChan)0
-2989 y FF(Once)d(y)m(ou)g(ha)m(v)m(e)h(stored)f(a)g(FITS)g(header)f
-(description)h(of)g(an)g(Ob)5 b(ject)35 b(in)g(a)g(FitsChan)g(using)f
-(the)h(nativ)m(e)0 3102 y(enco)s(ding)j(\()p Fu(x)p FF(16.5\),)k(y)m
-(ou)d(can)f(read)g(it)g(bac)m(k)h(using)e(astRead)i(in)e(m)m(uc)m(h)h
-(the)g(same)g(w)m(a)m(y)h(as)f(with)g(a)g(basic)0 3215
-y(Channel)29 b(\()p Fu(x)p FF(15.4\).)44 b(Similar)30
-b(commen)m(ts)h(ab)s(out)f(v)-5 b(alidating)31 b(the)g(Ob)5
-b(ject)30 b(y)m(ou)h(read)f(also)h(apply)f(\()p Fu(x)p
-FF(15.6\).)43 b(If)0 3328 y(y)m(ou)31 b(ha)m(v)m(e)g(just)f(written)h
-(to)g(the)f(FitsChan,)h(y)m(ou)f(m)m(ust)h(remem)m(b)s(er)e(to)j
-(rewind)d(it)i(\014rst:)227 3537 y Ft(AstObject)40 b(*object;)227
-3737 y(...)227 3936 y(astClear\()g(fitschan,)g("Card")h(\);)227
-4036 y(object)g(=)j(astRead\()c(fitschan)g(\);)0 4258
-y FF(An)35 b(imp)s(ortan)m(t)g(feature)h(of)g(a)f(FitsChan)h(is)f(that)
-h(read)f(op)s(erations)h(are)f(destructiv)m(e.)57 b(This)35
-b(means)g(that)0 4371 y(if)40 b(an)g(Ob)5 b(ject)40 b(description)g(is)
-f(found,)j(it)e(will)g(b)s(e)g(consumed)f(b)m(y)h(astRead)g(whic)m(h)g
-(will)g(remo)m(v)m(e)h(all)g(the)0 4484 y(cards)32 b(in)m(v)m(olv)m
-(ed,)i(including)d(asso)s(ciated)j(COMMENT)d(cards,)i(from)e(the)h
-(FitsChan.)46 b(Th)m(us,)31 b(if)h(y)m(ou)g(write)0 4597
-y(an)f(Ob)5 b(ject)32 b(to)g(a)g(FitsChan,)g(rewind,)f(and)g(read)h
-(the)g(same)g(Ob)5 b(ject)31 b(bac)m(k,)i(y)m(ou)f(should)f(end)f(up)h
-(with)g(the)0 4710 y(original)41 b(FitsChan)e(con)m(ten)m(ts.)71
-b(If)39 b(y)m(ou)h(need)g(to)g(circum)m(v)m(en)m(t)h(this)f(b)s(eha)m
-(viour)f(for)h(an)m(y)g(reason,)i(it)e(is)g(a)0 4823
-y(simple)32 b(matter)i(to)f(mak)m(e)h(a)f(cop)m(y)g(of)f(a)h(FitsChan)g
-(using)f(astCop)m(y)h(\()p Fu(x)p FF(4.13\).)50 b(If)32
-b(y)m(ou)h(then)f(read)g(from)g(the)0 4936 y(cop)m(y)-8
-b(,)32 b(the)e(original)i(FitsChan)e(will)h(remain)f(un)m(touc)m(hed.)0
-5089 y(After)f(a)g(read)f(completes,)j(the)e(FitsChan's)f(Card)g
-(attribute)i(iden)m(ti\014es)f(the)g(card)f(immediately)i(follo)m(wing)
-0 5201 y(the)h(last)g(card)f(read,)h(or)f(the)h(end-of-\014le)f(of)h
-(there)f(are)h(no)f(more)h(cards.)0 5354 y(Since)f(the)h
-Fx(native)g FF(enco)s(ding)f(is)h(b)s(eing)f(used,)g(an)m(y)h(long)g
-(strings)f(in)m(v)m(olv)m(ed)i(in)f(the)f(ob)5 b(ject)32
-b(description)e(will)0 5467 y(ha)m(v)m(e)j(b)s(een)f(split)g(in)m(to)h
-(t)m(w)m(o)h(or)e(more)g(adjacen)m(t)i(con)m(tuation)g(cards)e(when)f
-(the)h(Ob)5 b(ject)33 b(w)m(as)f(stored)g(in)g(the)0
-5580 y(header)37 b(using)f(function)g(astW)-8 b(rite.)62
-b(The)37 b(astRead)g(function)g(rev)m(erses)g(this)g(pro)s(cess)f(b)m
-(y)h(concatenating)0 5693 y(an)m(y)31 b(suc)m(h)f(adjacen)m(t)h(con)m
-(tin)m(uation)i(cards)d(to)h(re-create)h(the)f(original)g(long)g
-(string.)p eop end
-%%Page: 150 160
-TeXDict begin 150 159 bop 0 52 a FF(150)889 b Fy(16)92
-b(STORING)29 b(AST)h(OBJECTS)f(IN)h(FITS)g(HEADERS)g(\(FITSCHANS\))0
-351 y Fw(16.11)112 b(Sa)m(ving)39 b(and)f(Restoring)f(Multiple)i(Ob)6
-b(jects)38 b(in)g(a)f(FitsChan)0 570 y FF(When)32 b(using)f(the)h
-(nativ)m(e)h(FITS)e(enco)s(ding,)i(m)m(ultiple)f(Ob)5
-b(jects)32 b(ma)m(y)g(b)s(e)g(stored)f(and)h(all)g(I/O)g(op)s(erations)
-0 683 y(are)40 b(sequen)m(tial.)68 b(This)39 b(means)g(that)h(y)m(ou)f
-(can)h(simply)f(write)g(a)h(sequence)f(of)h(Ob)5 b(jects)39
-b(to)h(a)f(FitsChan.)0 796 y(After)32 b(eac)m(h)h(write)g(op)s
-(eration,)g(the)f(Card)f(attribute)i(will)f(b)s(e)f(up)s(dated)g(so)h
-(that)h(the)f(next)g(write)g(app)s(ends)0 909 y(the)f(next)f(Ob)5
-b(ject)31 b(description)f(to)h(the)g(previous)f(one.)0
-1069 y(If)g(y)m(ou)g(then)g(rewind)f(the)h(FitsChan,)h(y)m(ou)f(can)h
-(read)f(the)g(Ob)5 b(jects)30 b(bac)m(k)h(in)f(the)h(original)g(order.)
-40 b(Reading)0 1182 y(them)21 b(bac)m(k)g(will,)i(of)e(course,)i(remo)m
-(v)m(e)f(their)f(descriptions)g(from)f(the)h(FitsChan)f(\()p
-Fu(x)p FF(16.10\))k(but)c(the)h(b)s(eha)m(viour)0 1295
-y(of)31 b(the)f(Card)g(attribute)h(is)f(suc)m(h)g(that)h(successiv)m(e)
-h(reads)e(will)h(simply)f(return)f(eac)m(h)i(Ob)5 b(ject)31
-b(in)f(sequence.)0 1454 y(The)d(only)h(thing)f(that)h(ma)m(y)g(require)
-f(care,)i(giv)m(en)g(that)f(a)g(FitsChan)f(can)h(alw)m(a)m(ys)h(b)s(e)e
-(addressed)f(randomly)0 1567 y(b)m(y)38 b(setting)i(its)f(Card)e
-(attribute,)k(is)e(to)g(a)m(v)m(oid)h(writing)e(one)h(Ob)5
-b(ject)38 b(on)h(top)f(of)h(another.)65 b(F)-8 b(or)39
-b(ob)m(vious)0 1680 y(reasons,)32 b(the)g(Ob)5 b(ject)31
-b(descriptions)h(in)f(a)h(FitsChan)f(m)m(ust)h(remain)f(separate)i(if)e
-(they)h(are)g(to)g(mak)m(e)g(sense)0 1793 y(when)d(read)i(bac)m(k.)0
-2082 y Fw(16.12)112 b(Mixing)39 b(Nativ)m(e)e(Ob)6 b(jects)38
-b(with)f(Other)h(FITS)g(Cards)0 2301 y FF(Of)f(course,)j(an)m(y)d(real)
-i(FITS)d(header)i(will)f(con)m(tain)i(other)f(information)g(b)s(esides)
-f(AST)f(Ob)5 b(jects,)40 b(if)d(only)0 2414 y(the)32
-b(mandatory)g(FITS)g(cards)g(that)g(m)m(ust)g(accompan)m(y)i(all)f
-(FITS)e(data.)47 b(When)32 b(FITS)f(headers)h(are)h(read)0
-2527 y(in)g(from)f(a)h(real)h(dataset,)h(therefore,)f(an)m(y)f(nativ)m
-(e)i(AST)d(Ob)5 b(ject)33 b(descriptions)g(will)g(b)s(e)f(in)m
-(ter-mixed)i(with)0 2640 y(man)m(y)c(other)h(cards.)0
-2800 y(Because)j(this)f(is)g(the)g(normal)g(state)h(of)f(a\013airs,)h
-(the)f(b)s(o)s(olean)g(\(in)m(teger\))i(Skip)d(attribute)i(for)e(a)i
-(FitsChan)0 2913 y(defaults)j(to)h(one.)62 b(This)37
-b(means)g(that)h(when)e(y)m(ou)i(read)f(an)g(Ob)5 b(ject)38
-b(F)-8 b(rom)38 b(a)f(FitsChan,)j(an)m(y)d(irrelev)-5
-b(an)m(t)0 3026 y(cards)28 b(will)h(simply)f(b)s(e)g(skipp)s(ed)f(o)m
-(v)m(er)i(un)m(til)g(the)g(start)g(of)f(the)h(next)f(Ob)5
-b(ject)29 b(description,)g(if)f(an)m(y)-8 b(,)30 b(is)f(found.)0
-3139 y(If)c(y)m(ou)i(start)f(reading)g(part)g(w)m(a)m(y)h(through)e(an)
-h(Ob)5 b(ject)26 b(description,)h(no)f(error)f(will)h(result.)40
-b(The)25 b(remainder)0 3252 y(of)31 b(the)f(description)h(will)f
-(simply)g(b)s(e)g(skipp)s(ed.)0 3412 y(Setting)38 b(Skip)e(to)h(zero)h
-(will)f(c)m(hange)h(this)f(b)s(eha)m(viour)g(to)g(resem)m(ble)h(that)f
-(of)g(a)h(basic)f(Channel)f(\()p Fu(x)p FF(15.12\),)0
-3524 y(where)30 b(extraneous)h(data)g(are)g(not)f(p)s(ermitted)g(b)m(y)
-g(default,)h(but)f(this)g(will)h(probably)e(rarely)i(b)s(e)f(useful.)0
-3814 y Fw(16.13)112 b(Finding)39 b(and)g(Changing)f(Cards)h(in)e(a)h
-(FitsChan)0 4032 y FF(Y)-8 b(ou)30 b(can)g(searc)m(h)g(for,)f(and)g
-(retriev)m(e,)i(particular)f(cards)f(in)g(a)h(FitsChan)g(b)m(y)f(k)m
-(eyw)m(ord,)h(using)f(the)h(function)0 4145 y(astFindFits.)59
-b(This)36 b(p)s(erforms)e(a)j(searc)m(h,)h(starting)f(at)g(the)g
-(curren)m(t)f(card,)h(un)m(til)g(it)f(\014nds)f(a)i(card)f(whose)0
-4258 y(k)m(eyw)m(ord)31 b(matc)m(hes)g(the)g(template)h(y)m(ou)e
-(supply)-8 b(,)30 b(or)g(the)h(end-of-\014le)g(is)f(reac)m(hed.)0
-4418 y(If)41 b(a)h(suitable)g(card)g(is)f(found,)j(astFindFits)f
-(optionally)g(returns)d(the)i(card's)f(con)m(ten)m(ts)j(and)d(then)g
-(sets)0 4531 y(the)c(FitsChan's)g(Card)f(attribute)h(either)h(to)f
-(iden)m(tify)h(the)f(card)f(found,)i(or)f(the)g(one)g(follo)m(wing)h
-(it.)61 b(The)0 4644 y(w)m(a)m(y)34 b(y)m(ou)g(w)m(an)m(t)g(the)g(Card)
-e(attribute)i(to)g(b)s(e)f(set)h(is)f(indicated)h(b)m(y)f(the)h
-(\014nal)f(b)s(o)s(olean)g(\(in)m(t\))i(argumen)m(t)f(to)0
-4757 y(astFindFits.)44 b(A)31 b(v)-5 b(alue)31 b(of)g(one)h(is)f
-(returned)f(to)h(indicate)h(success.)43 b(If)31 b(a)g(suitable)h(card)f
-(cannot)g(b)s(e)g(found,)0 4870 y(astFindFits)f(returns)d(a)i(v)-5
-b(alue)29 b(of)g(zero)g(to)g(indicate)h(failure)f(and)f(sets)g(the)h
-(FitsChan's)g(Card)e(attribute)j(to)0 4983 y(the)h(end-of-\014le.)0
-5143 y(Requesting)j(that)f(the)h(Card)e(attribute)i(b)s(e)e(set)i(to)g
-(indicate)g(the)g(card)f(that)g(astFindFits)i(\014nds)c(is)i(useful)0
-5256 y(if)d(y)m(ou)h(w)m(an)m(t)g(to)g(replace)h(that)f(card)f(with)g
-(a)h(new)f(one,)h(as)f(in)g(this)h(example:)227 5494
-y Ft(char)42 b(newcard[)e(81)j(];)227 5693 y(...)p eop
-end
-%%Page: 151 161
-TeXDict begin 151 160 bop 0 52 a Fy(16.14)93 b(Source)30
-b(and)g(Sink)f(F)-8 b(unctions)31 b(for)g(FitsChans)1711
-b FF(151)227 451 y Ft(\(void\))41 b(astFindFits\()e(fitschan,)h
-("AIRMASS",)f(NULL,)j(0)h(\);)227 551 y(astPutFits\()c(fitschan,)h
-(newcard,)g(1)k(\);)0 813 y FF(Here,)26 b(astFindFits)f(is)g(used)e(to)
-i(searc)m(h)g(for)f(a)h(card)f(with)g(the)g(k)m(eyw)m(ord)h(AIRMASS,)f
-(with)g(a)g(NULL)g(p)s(oin)m(ter)0 926 y(b)s(eing)31
-b(giv)m(en)i(to)g(indicate)g(that)f(w)m(e)g(do)g(not)g(w)m(an)m(t)h
-(the)f(card's)f(con)m(ten)m(ts)j(returned.)44 b(If)31
-b(the)h(card)g(is)g(found,)0 1039 y(astPutFits)g(then)e(o)m(v)m
-(erwrites)h(it)g(with)f(a)h(new)f(card.)41 b(Otherwise,)30
-b(the)h(Card)e(attribute)i(ends)f(up)f(p)s(oin)m(ting)0
-1152 y(at)i(the)g(end-of-\014le)f(and)g(the)h(new)f(card)g(is)g(simply)
-g(app)s(ended)f(to)i(the)f(end)g(of)h(the)f(FitsChan.)0
-1314 y(A)25 b(similar)h(approac)m(h)f(can)h(b)s(e)e(used)g(to)i(delete)
-h(selected)f(cards)f(from)g(a)g(FitsChan)g(using)g(astDelFits,)k(whic)m
-(h)0 1427 y(deletes)i(the)g(curren)m(t)f(card:)227 1676
-y Ft(if)43 b(\()g(astFindFits\()c(fitschan,)h("BSCALE",)g(NULL,)h(0)i
-(\))g(\))h(astDelFits\()39 b(fitschan)h(\);)0 1939 y
-FF(This)30 b(deletes)h(the)g(\014rst)e(card,)i(if)f(an)m(y)-8
-b(,)32 b(with)e(the)g(BSCALE)g(k)m(eyw)m(ord.)0 2101
-y(Requesting)38 b(that)h(astFindFits)f(incremen)m(ts)h(the)f(Card)e
-(attribute)j(to)f(iden)m(tify)g(the)g(card)g(follo)m(wing)h(the)0
-2214 y(one)27 b(found)f(is)g(more)h(useful)f(when)g(writing)h(lo)s
-(ops.)39 b(F)-8 b(or)28 b(example,)g(the)f(follo)m(wing)i(lo)s(op)d
-(extracts)j(eac)m(h)f(card)0 2327 y(whose)i(k)m(eyw)m(ord)h(matc)m(hes)
-h(the)e(template)i(\\CD\0456d")f(\(that)g(is,)g(\\CD")g(follo)m(w)m(ed)
-h(b)m(y)e(six)h(decimal)g(digits\):)227 2576 y Ft(while)42
-b(\()h(astFindFits\()c(fitschan,)g("CD\0456d",)i(card,)g(1)i(\))h({)358
-2676 y(<process)c(the)j(card's)e(contents>)227 2776 y(})0
-3038 y FF(F)-8 b(or)31 b(further)e(details)j(of)e(k)m(eyw)m(ord)h
-(templates,)h(see)f(the)f(description)h(of)f(astFindFits)i(in)e(App)s
-(endix)e(B.)0 3331 y Fw(16.14)112 b(Source)38 b(and)g(Sink)h(F)-9
-b(unctions)38 b(for)f(FitsChans)0 3553 y FF(The)24 b(use)g(of)g(source)
-g(and)g(sink)g(functions)f(with)h(a)h(FitsChan)f(is)g(optional.)40
-b(This)23 b(is)i(b)s(ecause)f(y)m(ou)g(can)h(alw)m(a)m(ys)0
-3665 y(arrange)k(to)g(explicitly)h(\014ll)e(a)g(FitsChan)h(with)f(FITS)
-f(cards)h(\()p Fu(x)p FF(16.8)j(and)c Fu(x)p FF(16.9\))k(and)d(y)m(ou)g
-(can)h(also)g(extract)0 3778 y(an)m(y)i(cards)f(that)h(remain)f(and)g
-(write)g(them)h(out)f(y)m(ourself)h(\()p Fu(x)p FF(16.6\))i(b)s(efore)d
-(y)m(ou)h(delete)g(the)g(FitsChan.)0 3941 y(If)24 b(y)m(ou)g(c)m(ho)s
-(ose)h(to)f(use)g(these)h(functions,)g(ho)m(w)m(ev)m(er,)h(they)f(b)s
-(eha)m(v)m(e)f(in)g(a)g(v)m(ery)h(similar)f(manner)f(to)i(those)f(used)
-0 4054 y(b)m(y)30 b(a)h(Channel)f(\()p Fu(x)p FF(15.13)j(and)d
-Fu(x)p FF(15.14\).)43 b(Y)-8 b(ou)31 b(supply)e(p)s(oin)m(ters)h(to)i
-(these)f(functions,)f(as)g(argumen)m(ts)h(to)g(the)0
-4167 y(constructor)e(function)e(astFitsChan)i(when)e(y)m(ou)i(create)h
-(the)e(FitsChan)g(\()p Fu(x)p FF(16.3\).)43 b(The)27
-b(source)i(function)e(is)0 4280 y(in)m(v)m(ok)m(ed)34
-b(implicitly)g(at)f(this)g(p)s(oin)m(t)f(to)i(\014ll)e(the)h(FitsChan)f
-(with)h(FITS)f(cards)g(and)g(the)h(FitsChan)f(is)h(then)0
-4393 y(rew)m(ound,)40 b(so)e(that)h(the)g(\014rst)e(card)i(b)s(ecomes)f
-(curren)m(t.)65 b(The)37 b(sink)h(function)g(is)h(automatically)i(in)m
-(v)m(ok)m(ed)0 4506 y(later,)32 b(when)d(the)i(FitsChan)f(is)g
-(deleted,)i(in)e(order)g(to)h(write)f(out)h(an)m(y)g(cards)f(that)h
-(remain)f(in)g(it.)0 4668 y(The)43 b(only)h(real)h(di\013erence)f(b)s
-(et)m(w)m(een)g(the)g(source)g(and)g(sink)f(functions)g(for)h(a)g
-(FitsChan)g(and)f(a)h(basic)0 4781 y(Channel)34 b(is)h(that)g(FITS)g
-(cards)f(are)h(limited)h(in)f(length)g(to)g(80)h(c)m(haracters,)i(so)d
-(the)g(c)m(hoice)i(of)e(bu\013er)f(size)0 4894 y(is)f(simpli\014ed.)48
-b(The)33 b(\\Source")h(and)f(\\Sink")g(functions)f(in)h
-Fu(x)p FF(15.13)j(and)c Fu(x)p FF(15.14)k(could)d(therefore)h(b)s(e)e
-(used)0 5007 y(to)j(access)g(FITS)e(headers)g(stored)h(in)g(text)h
-(\014les)f(simply)f(b)m(y)h(c)m(hanging)h(LEN)e(to)i(b)s(e)e(80.)52
-b(If)34 b(y)m(ou)g(w)m(ere)g(not)0 5120 y(accessing)29
-b(a)f(text)h(\014le,)f(ho)m(w)m(ev)m(er,)i(appropriate)e(c)m(hanges)g
-(to)h(the)f(I/O)f(statemen)m(ts)i(w)m(ould)f(b)s(e)f(needed)g(since)0
-5233 y(the)h(separating)h(newline)f(c)m(haracters)h(w)m(ould)f(b)s(e)f
-(absen)m(t.)41 b(The)27 b(details)i(ob)m(viously)g(dep)s(end)d(on)i
-(the)g(format)0 5346 y(of)j(the)f(\014le)h(y)m(ou)f(are)h(handling,)f
-(whic)m(h)g(need)g(not)h(necessarily)g(b)s(e)f(a)h(true)f(FITS)f
-(\014le.)p eop end
-%%Page: 152 162
-TeXDict begin 152 161 bop 0 52 a FF(152)889 b Fy(16)92
-b(STORING)29 b(AST)h(OBJECTS)f(IN)h(FITS)g(HEADERS)g(\(FITSCHANS\))p
-eop end
-%%Page: 153 163
-TeXDict begin 153 162 bop 3643 52 a FF(153)0 351 y Fz(17)135
-b(Using)46 b(F)-11 b(oreign)45 b(FITS)e(Enco)t(dings)0
-609 y FF(W)-8 b(e)38 b(sa)m(w)f(in)f(the)h(previous)f(section)i(\()p
-Fu(x)p FF(16\))g(ho)m(w)f(to)g(store)h(and)e(retriev)m(e)i(an)m(y)f
-(kind)e(of)i(AST)f(Ob)5 b(ject)37 b(in)f(a)0 722 y(FITS)27
-b(header)h(b)m(y)f(using)g(a)i(FitsChan.)39 b(T)-8 b(o)28
-b(ac)m(hiev)m(e)j(this,)d(w)m(e)g(set)g(the)g(FitsChan's)g(Enco)s(ding)
-f(attribute)i(to)0 835 y(NA)-8 b(TIVE.)29 b(Ho)m(w)m(ev)m(er,)j(the)d
-(Ob)5 b(jects)29 b(w)m(e)g(wrote)g(could)g(then)g(only)g(b)s(e)f(read)h
-(bac)m(k)g(b)m(y)g(other)g(programs)g(that)0 948 y(use)h(AST.)0
-1114 y(In)g(practice,)i(w)m(e)f(will)f(also)i(encoun)m(ter)f(FITS)e
-(headers)h(con)m(taining)i(W)m(CS)f(information)f(written)h(b)m(y)f
-(other)0 1227 y(soft)m(w)m(are)37 b(systems.)58 b(W)-8
-b(e)37 b(will)f(probably)f(also)i(need)f(to)g(write)g(FITS)g(headers)f
-(in)h(a)g(format)g(that)h(can)f(b)s(e)0 1340 y(understo)s(o)s(d)25
-b(b)m(y)i(these)g(systems.)40 b(Indeed,)27 b(this)g(in)m(terc)m(hange)h
-(of)g(data)f(is)g(one)g(of)h(the)f(main)g(reasons)g(for)f(the)0
-1452 y(existence)32 b(of)e(FITS,)g(so)h(in)f(this)g(section)i(w)m(e)f
-(will)f(examine)h(ho)m(w)g(to)g(accommo)s(date)h(these)f(requiremen)m
-(ts.)0 1757 y Fw(17.1)112 b(The)38 b(F)-9 b(oreign)38
-b(FITS)g(Enco)s(dings)0 1983 y FF(As)30 b(men)m(tioned)g(previously)f
-(\()p Fu(x)p FF(16.1\),)k(there)d(are)g(a)g(n)m(um)m(b)s(er)e(of)i(con)
-m(v)m(en)m(tions)h(curren)m(tly)f(in)f(use)h(for)f(storing)0
-2096 y(W)m(CS)g(information)g(in)g(FITS)f(headers,)h(whic)m(h)f(w)m(e)i
-(call)g Fx(enc)-5 b(o)g(dings.)41 b FF(Here,)30 b(w)m(e)f(are)g
-(concerned)g(with)g(those)0 2209 y(enco)s(dings)h(de\014ned)f(b)m(y)i
-(soft)m(w)m(are)g(systems)g(other)f(than)h(AST,)e(whic)m(h)i(w)m(e)f
-(term)h Fx(for)-5 b(eign)33 b(enc)-5 b(o)g(dings.)0 2375
-y FF(Curren)m(tly)d(,)31 b(AST)f(supp)s(orts)e(six)j(foreign)g(enco)s
-(dings,)g(whic)m(h)f(ma)m(y)i(b)s(e)e(selected)i(b)m(y)e(setting)i(the)
-f(Enco)s(ding)0 2488 y(attribute)g(of)g(a)f(FitsChan)h(to)g(one)f(of)h
-(the)f(follo)m(wing)i(\(c)m(haracter)h(string\))d(v)-5
-b(alues:)227 2761 y FD(DSS)427 2873 y FF(This)34 b(enco)s(ding)g
-(stores)h(W)m(CS)f(information)h(using)e(the)i(con)m(v)m(en)m(tion)h
-(dev)m(elop)s(ed)f(at)g(the)427 2986 y(Space)42 b(T)-8
-b(elescop)s(e)43 b(Science)f(Institute)g(for)g(the)f(Digitised)j(Sky)d
-(Surv)m(ey)g(\(DSS\))g(astro-)427 3099 y(metric)h(plate)h
-(calibrations.)75 b(DSS)41 b(images)i(whic)m(h)e(use)g(this)h(con)m(v)m
-(en)m(tion)h(are)f(widely)427 3212 y(a)m(v)-5 b(ailable)38
-b(and)d(it)g(is)h(understo)s(o)s(d)d(b)m(y)i(a)h(n)m(um)m(b)s(er)e(of)h
-(imp)s(ortan)m(t)h(and)f(w)m(ell-established)427 3325
-y(astronom)m(y)c(applications.)427 3456 y(Ho)m(w)m(ev)m(er,)46
-b(the)41 b(calibration)h(mo)s(del)f(used)f(\(based)h(on)f(a)h(p)s
-(olynomial)g(\014t\))g(is)g(not)g(eas-)427 3569 y(ily)e(applicable)g
-(to)g(other)f(t)m(yp)s(es)g(of)h(data)g(and)e(creating)j(the)e(p)s
-(olynomial)g(co)s(e\016cien)m(ts)427 3682 y(needed)e(to)h(calibrate)h
-(y)m(our)f(o)m(wn)f(images)i(can)e(pro)m(v)m(e)i(di\016cult.)58
-b(F)-8 b(or)37 b(this)g(reason,)h(the)427 3795 y(DSS)33
-b(enco)s(ding)g(is)g(probably)f(b)s(est)h(view)m(ed)h(as)f(a)h
-(\\read-only")g(format.)50 b(It)33 b(is)g(p)s(ossible,)427
-3908 y(ho)m(w)m(ev)m(er,)h(to)e(read)g(in)f(W)m(CS)h(information)g
-(using)f(this)g(enco)s(ding)h(and)f(then)g(to)i(write)f(it)427
-4021 y(bac)m(k)f(out)g(again,)h(so)e(long)h(as)g(only)f(minor)g(c)m
-(hanges)i(ha)m(v)m(e)f(b)s(een)f(made.)227 4170 y FD(FITS-W)m(CS)427
-4283 y FF(This)35 b(enco)s(ding)g(is)h(v)m(ery)g(imp)s(ortan)m(t)g(b)s
-(ecause)f(it)h(is)g(based)f(on)g(a)h(new)f(FITS)g(standard)427
-4396 y(whic)m(h)27 b(should,)f(for)h(the)f(\014rst)g(time,)i(address)e
-(the)h(problem)f(of)h(celestial)i(co)s(ordinate)e(sys-)427
-4509 y(tems)c(in)f(a)h(prop)s(er)f(manner,)h(b)m(y)g(considerably)f
-(extending)h(the)g(original)h(FITS)e(standard.)427 4640
-y(The)48 b(con)m(v)m(en)m(tions)i(used)d(are)h(describ)s(ed)f(in)h(a)g
-(series)h(of)f(pap)s(ers)f(b)m(y)h(E.W.)16 b(Greisen,)427
-4753 y(M.)g(Calabretta,)48 b Fx(et.)77 b(al.)p FF(,)47
-b(often)d(referred)e(to)i(as)g(the)f(\\FITS-W)m(CS)g(pap)s(ers".)79
-b(They)427 4866 y(are)30 b(describ)s(ed)f(at)h(h)m
-(ttp://\014ts.gsfc.nasa.go)m(v/\014ts)p Fq(_)p FF(w)m(cs.h)m(tml.)46
-b(No)m(w)30 b(that)g(the)g(\014rst)f(t)m(w)m(o)427 4979
-y(pap)s(ers)j(in)g(this)g(series)h(ha)m(v)m(e)h(b)s(een)e(agreed,)i
-(this)f(enco)s(ding)f(should)g(b)s(e)g(understo)s(o)s(d)e(b)m(y)427
-5092 y(an)m(y)41 b(FITS-W)m(CS)f(complian)m(t)i(soft)m(w)m(are)g(and)e
-(it)h(is)g(lik)m(ely)h(to)f(b)s(e)f(adopted)h(widely)f(for)427
-5205 y(FITS)31 b(data)i(in)e(future.)44 b(F)-8 b(or)32
-b(details)h(of)f(the)g(co)m(v)m(erage)j(of)d(these)g(con)m(v)m(en)m
-(tions)i(pro)m(vided)427 5318 y(b)m(y)d(the)f(FitsChan)g(class,)i(see)f
-(App)s(endix)d(F.)227 5467 y FD(FITS-IRAF)427 5580 y
-FF(This)34 b(enco)s(ding)h(is)f(based)g(on)h(the)g(con)m(v)m(en)m
-(tions)h(describ)s(ed)e(in)g(the)h(do)s(cumen)m(t)f(\\W)-8
-b(orld)427 5693 y(Co)s(ordinate)23 b(Systems)g(Represen)m(tations)h
-(Within)f(the)h(FITS)e(F)-8 b(ormat")25 b(b)m(y)e(R.J.)g(Hanisc)m(h)p
-eop end
-%%Page: 154 164
-TeXDict begin 154 163 bop 0 52 a FF(154)1885 b Fy(17)92
-b(USING)30 b(F)m(OREIGN)h(FITS)f(ENCODINGS)427 351 y
-FF(and)25 b(D.G.)h(W)-8 b(ells,)27 b(1988.)1283 318 y
-Fv(25)1399 351 y FF(It)e(is)g(emplo)m(y)m(ed)h(b)m(y)f(the)g(IRAF)g
-(data)g(analysis)h(facilit)m(y)-8 b(,)29 b(so)c(its)427
-464 y(use)i(will)g(facilitate)j(data)d(exc)m(hange)h(with)f(IRAF.)g
-(This)f(enco)s(ding)h(is)g(in)f(e\013ect)i(a)f(sub-set)427
-577 y(of)k(the)f(curren)m(t)h(FITS-W)m(CS)f(enco)s(ding.)227
-731 y FD(FITS-PC)427 844 y FF(This)j(enco)s(ding)g(is)h(based)f(on)g(a)
-h(previous)f(v)m(ersion)g(of)h(the)g(prop)s(osed)e(new)h(FITS)f(W)m(CS)
-427 957 y(standard)26 b(whic)m(h)h(used)f Fq(PCjjjjiii)e
-FF(and)i Fq(CDELTj)f FF(k)m(eyw)m(ords)i(to)g(describ)s(e)g(axis)g
-(rotation)427 1070 y(and)f(scaling.)41 b(V)-8 b(ersions)26
-b(of)h(AST)f(prior)f(to)i(V1.5)h(used)e(this)g(sc)m(heme)h(for)f(the)h
-(FITS-W)m(CS)427 1183 y(enco)s(ding.)51 b(As)34 b(of)g(V1.5,)i(FITS-W)m
-(CS)e(uses)f Fq(CDi_j)f FF(k)m(eyw)m(ords)i(instead.)2997
-1150 y Fv(26)3123 1183 y FF(The)g(FITS-)427 1296 y(PC)j(enco)s(ding)g
-(is)g(included)f(in)g(AST)h(V1.5)h(only)f(to)h(allo)m(w)g(FITS-W)m(CS)e
-(data)i(created)427 1408 y(with)33 b(previous)f(v)m(ersions)h(to)h(b)s
-(e)e(read.)48 b(It)33 b(should)f(not,)i(in)e(general,)j(b)s(e)d(used)g
-(to)i(create)427 1521 y(new)c(data)h(sets.)227 1675 y
-FD(FITS-AIPS)427 1788 y FF(This)38 b(enco)s(ding)h(is)g(based)g(on)g
-(the)g(con)m(v)m(en)m(tions)i(describ)s(ed)d(in)g(the)i(do)s(cumen)m(t)
-e(\\Non-)427 1901 y(linear)23 b(Co)s(ordinate)e(Systems)h(in)f(AIPS")h
-(b)m(y)g(Eric)g(W.)g(Greisen)g(\(revised)g(9th)h(Septem)m(b)s(er,)427
-2014 y(1994\).)667 1981 y Fv(27)790 2014 y FF(It)33 b(is)f(curren)m
-(tly)g(emplo)m(y)m(ed)h(b)m(y)f(the)h(AIPS)e(data)i(analysis)g(facilit)
-m(y)-8 b(,)35 b(so)e(its)f(use)427 2127 y(will)26 b(facilitate)i(data)e
-(exc)m(hange)h(with)e(AIPS.)f(This)h(enco)s(ding)g(uses)g
-Fq(CROTAi)e FF(and)i Fq(CDELTi)427 2240 y FF(k)m(eyw)m(ords)31
-b(to)g(describ)s(e)f(axis)h(rotation)g(and)f(scaling.)227
-2394 y FD(FITS-AIPS++)427 2507 y FF(Enco)s(des)c(co)s(ordinate)g
-(system)g(information)g(in)g(FITS)f(header)h(cards)f(using)h(the)g(con)
-m(v)m(en-)427 2620 y(tions)34 b(used)e(b)m(y)h(the)g(AIPS++)f(pro)5
-b(ject.)49 b(This)32 b(is)i(an)f(extension)g(of)g(FITS-AIPS)f(whic)m(h)
-427 2732 y(includes)e(some)h(of)g(the)f(features)h(of)f(FITS-PC)g(and)g
-(FITS-IRAF.)0 3018 y(F)-8 b(or)40 b(more)g(detail)g(ab)s(out)f(the)h
-(ab)s(o)m(v)m(e)g(enco)s(dings,)i(see)e(the)f(description)h(of)f(the)h
-(Enco)s(ding)f(attribute)h(in)0 3131 y(App)s(endix)29
-b(C.)0 3451 y Fw(17.2)112 b(Limitations)39 b(of)f(F)-9
-b(oreign)38 b(Enco)s(dings)0 3684 y FF(The)27 b(foreign)i(enco)s(dings)
-e(a)m(v)-5 b(ailable)30 b(for)e(storing)g(W)m(CS)g(information)g(in)g
-(FITS)f(headers)g(ha)m(v)m(e)j(a)e(n)m(um)m(b)s(er)e(of)0
-3796 y(limitations)k(when)d(compared)h(with)g(the)g(nativ)m(e)h(enco)s
-(ding)f(of)h(AST)e(Ob)5 b(jects)28 b(\()p Fu(x)p FF(16\).)42
-b(The)28 b(main)g(ones)g(are:)111 4082 y(1.)46 b(Only)36
-b(one)h(class)g(of)g(AST)f(Ob)5 b(ject,)38 b(the)f(F)-8
-b(rameSet,)40 b(ma)m(y)d(b)s(e)f(represen)m(ted)g(using)g(a)h(foreign)g
-(FITS)227 4195 y(enco)s(ding.)k(This)29 b(should)h(not)g(come)h(as)g(a)
-g(surprise,)e(b)s(ecause)h(the)h(purp)s(ose)d(of)j(storing)f(W)m(CS)h
-(infor-)227 4308 y(mation)38 b(in)e(FITS)g(headers)h(is)f(to)i(attac)m
-(h)h(co)s(ordinate)e(systems)g(to)g(an)g(asso)s(ciated)h(arra)m(y)g(of)
-f(data.)227 4421 y(Since)d(the)h(F)-8 b(rameSet)35 b(is)f(the)h(AST)e
-(Ob)5 b(ject)34 b(designed)g(for)g(the)h(same)f(purp)s(ose)f(\()p
-Fu(x)p FF(13.4\),)38 b(there)c(is)g(a)227 4534 y(natural)d(corresp)s
-(ondence.)227 4692 y(The)g(w)m(a)m(y)i(in)f(whic)m(h)f(a)h(F)-8
-b(rameSet)33 b(is)f(translated)g(to)h(and)e(from)g(the)h(foreign)g
-(enco)s(ding)g(also)g(follo)m(ws)227 4805 y(from)27 b(this)g(corresp)s
-(ondence.)40 b(The)27 b(F)-8 b(rameSet's)28 b(base)g(F)-8
-b(rame)28 b(iden)m(ti\014es)g(the)g(data)g(grid)f(co)s(ordinates)227
-4918 y(of)41 b(the)g(asso)s(ciated)h(FITS)d(data.)72
-b(These)41 b(are)f(the)h(same)g(as)g(FITS)f(pixel)h(co)s(ordinates,)j
-(in)c(whic)m(h)227 5031 y(the)32 b(\014rst)f(pixel)g(\(in)h(2)g
-(dimensions\))f(has)g(co)s(ordinates)h(\(1,1\))h(at)g(its)e(cen)m(tre.)
-45 b(Similarly)-8 b(,)33 b(the)f(curren)m(t)227 5144
-y(F)-8 b(rame)37 b(of)f(the)g(F)-8 b(rameSet)37 b(iden)m(ti\014es)f
-(the)g(FITS)f(w)m(orld)h(co)s(ordinate)h(system)f(asso)s(ciated)h(with)
-e(the)227 5256 y(data.)p 0 5334 1512 4 v 73 5387 a Fs(25)138
-5419 y Fr(Av)l(ailable)26 b(b)n(y)f(ftp)h(from)g(\014ts.cv.nrao.edu)g
-(/\014ts/do)r(cumen)n(ts/w)n(cs/w)n(cs88.ps.Z)73 5479
-y Fs(26)138 5510 y Fr(There)e(are)h(man)n(y)e(other)g(di\013erences)i
-(b)r(et)n(w)n(een)e(the)h(previous)f(and)h(the)f(curren)n(t)g(FITS-W)n
-(CS)g(enco)r(dings.)35 b(The)24 b(k)n(eyw)n(ords)0 5602
-y(to)i(describ)r(e)g(axis)g(rotation)h(and)e(scaling)i(is)f(used)g
-(purely)f(as)h(a)g(lab)r(el)h(to)f(iden)n(tify)f(the)g(sc)n(heme.)73
-5661 y Fs(27)138 5693 y Fr(Av)l(ailable)h(b)n(y)f(ftp)h(from)g
-(\014ts.cv.nrao.edu)g(/\014ts/do)r(cumen)n(ts/w)n(cs/aips27.ps.Z)p
-eop end
-%%Page: 155 165
-TeXDict begin 155 164 bop 0 52 a Fy(17.3)93 b(Iden)m(tifying)30
-b(F)-8 b(oreign)32 b(Enco)s(dings)e(on)g(Input)1820 b
-FF(155)111 351 y(2.)46 b(Y)-8 b(ou)36 b(ma)m(y)h(store)f(a)g(represen)m
-(tation)h(of)f(only)f(a)h(single)h(F)-8 b(rameSet)37
-b(in)e(an)m(y)h(individual)f(set)h(of)g(FITS)227 464
-y(header)f(cards)g(\()p Fx(i.e.)g FF(in)g(a)h(single)f(FitsChan\))h(at)
-g(one)f(time.)56 b(If)35 b(y)m(ou)g(attempt)i(to)f(store)f(more)h(than)
-227 577 y(one,)42 b(y)m(ou)d(ma)m(y)g(o)m(v)m(er-write)h(the)f
-(previous)f(one)h(or)g(generate)h(an)f(in)m(v)-5 b(alid)39
-b(represen)m(tation)h(of)f(y)m(our)227 690 y(W)m(CS)31
-b(information.)227 843 y(This)f(is)g(mainly)h(a)f(consequence)h(of)g
-(the)g(use)f(of)g(\014xed)g(FITS)f(k)m(eyw)m(ords)i(b)m(y)f(foreign)h
-(enco)s(dings)f(and)227 956 y(the)h(fact)g(that)g(y)m(ou)g(cannot,)g
-(in)f(general,)i(ha)m(v)m(e)f(m)m(ultiple)g(FITS)f(cards)g(with)g(the)h
-(same)g(k)m(eyw)m(ord.)111 1148 y(3.)46 b(In)36 b(general,)j(it)e(will)
-g(not)g(b)s(e)f(p)s(ossible)g(to)h(store)g(ev)m(ery)g(p)s(ossible)f(F)
--8 b(rameSet)38 b(that)f(y)m(ou)g(migh)m(t)g(con-)227
-1261 y(struct.)67 b(Dep)s(ending)39 b(on)g(the)g(enco)s(ding,)i(only)f
-(certain)g(F)-8 b(rameSets)40 b(that)f(conform)g(to)h(particular)227
-1374 y(restrictions)i(can)e(b)s(e)g(represen)m(ted)h(and,)h(ev)m(en)g
-(then,)h(some)d(of)h(their)g(information)f(ma)m(y)h(b)s(e)f(lost.)227
-1487 y(See)h(the)g(description)f(of)h(the)g(Enco)s(ding)f(attribute)h
-(in)f(App)s(endix)f(C)h(for)g(more)h(details)g(of)g(these)227
-1600 y(limitations.)0 1869 y(It)26 b(should)g(b)s(e)f(understo)s(o)s(d)
-g(that)h(using)g(foreign)h(enco)s(dings)f(to)h(read)f(and)f(write)i
-(information)f(held)g(in)g(AST)0 1982 y(Ob)5 b(jects)24
-b(is)f(essen)m(tially)j(a)e(pro)s(cess)f(of)h(con)m(v)m(erting)h(the)f
-(data)g(format.)39 b(As)24 b(suc)m(h,)h(it)f(p)s(oten)m(tially)h
-(su\013ers)e(from)0 2095 y(the)k(same)h(problems)e(faced)h(b)m(y)g(all)
-h(suc)m(h)f(pro)s(cesses,)h Fx(i.e.)e FF(di\013erences)h(b)s(et)m(w)m
-(een)h(the)f(AST)g(data)g(mo)s(del)g(and)0 2208 y(that)j(of)g(the)g
-(foreign)g(enco)s(ding)f(ma)m(y)h(cause)g(some)g(information)g(to)g(b)s
-(e)f(lost.)42 b(Because)30 b(the)g(AST)f(mo)s(del)g(is)0
-2321 y(extremely)h(\015exible,)f(ho)m(w)m(ev)m(er,)i(an)m(y)d(data)i
-(loss)f(can)f(largely)i(b)s(e)e(eliminated)i(when)d(reading.)41
-b(Instead,)29 b(this)0 2434 y(e\013ect)37 b(manifests)e(itself)h(in)f
-(the)h(form)f(of)g(the)h(ab)s(o)m(v)m(e)g(enco)s(ding-dep)s(enden)m(t)f
-(restrictions)h(on)f(the)h(kind)e(of)0 2547 y(AST)c(Ob)5
-b(jects)30 b(whic)m(h)g(ma)m(y)h(b)s(e)f(written.)0 2712
-y(One)d(of)g(the)g(aims)h(of)f(the)g(AST)g(library)-8
-b(,)28 b(of)f(course,)h(is)f(to)h(insulate)g(y)m(ou)f(from)g(the)g
-(details)h(of)g(these)f(foreign)0 2825 y(enco)s(dings)35
-b(and)f(the)i(restrictions)f(they)h(imp)s(ose.)54 b(W)-8
-b(e)36 b(will)g(see)f(shortly)-8 b(,)37 b(therefore,)g(ho)m(w)e(AST)f
-(pro)m(vides)0 2938 y(a)d(mec)m(hanism)h(for)e(determining)h(whether)g
-(y)m(our)g(W)m(CS)g(information)g(satis\014es)g(the)h(necessary)f
-(conditions)0 3051 y(and)f(allo)m(ws)h(y)m(ou)g(to)g(mak)m(e)h(an)e
-(automatic)i(c)m(hoice)g(of)f(whic)m(h)f(enco)s(ding)g(to)h(use.)0
-3352 y Fw(17.3)112 b(Iden)m(tifying)39 b(F)-9 b(oreign)37
-b(Enco)s(dings)h(on)g(Input)0 3577 y FF(Let)28 b(us)f(no)m(w)h(examine)
-g(the)g(practicalities)i(of)e(extracting)h(W)m(CS)f(information)g(from)
-f(a)h(set)g(of)g(FITS)f(header)0 3690 y(cards)c(whic)m(h)g(ha)m(v)m(e)i
-(b)s(een)d(written)i(b)m(y)f(some)g(other)h(soft)m(w)m(are)h(system.)38
-b(W)-8 b(e)25 b(will)e(pretend)g(that)h(our)f(program)0
-3803 y(do)s(es)32 b(not)g(kno)m(w)h(whic)m(h)f(enco)s(ding)g(has)g(b)s
-(een)f(used)h(for)g(the)g(W)m(CS)h(information)f(and)g(m)m(ust)g(disco)
-m(v)m(er)i(this)0 3916 y(for)e(itself.)48 b(In)32 b(order)g(to)h(ha)m
-(v)m(e)h(a)f(concrete)h(example,)g(ho)m(w)m(ev)m(er,)g(w)m(e)f(will)g
-(use)f(the)h(follo)m(wing)h(set)f(of)f(cards.)0 4029
-y(These)k(use)g(the)h(FITS-AIPS)e(enco)s(ding)h(and)g(con)m(tain)h(a)g
-(t)m(ypical)h(mix)e(of)h(other)f(FITS)g(cards)g(whic)m(h)g(are)0
-4142 y(irrelev)-5 b(an)m(t)32 b(to)f(the)f(W)m(CS)h(information)f(in)g
-(whic)m(h)g(w)m(e)h(are)g(in)m(terested:)227 4398 y Ft(SIMPLE)85
-b(=)871 b(T)43 b(/)h(Written)c(by)j(IDL:)86 b(30-Jul-1997)39
-b(05:35:42.00)227 4497 y(BITPIX)85 b(=)784 b(-32)42 b(/)i(Bits)e(per)g
-(pixel.)227 4597 y(NAXIS)129 b(=)871 b(2)43 b(/)h(Number)d(of)h
-(dimensions)227 4697 y(NAXIS1)85 b(=)784 b(300)42 b(/)i(Length)d(of)h
-(x)i(axis.)227 4796 y(NAXIS2)85 b(=)784 b(300)42 b(/)i(Length)d(of)h(y)
-i(axis.)227 4896 y(CTYPE1)85 b(=)43 b('GLON-ZEA')475
-b(/)44 b(X-axis)d(type)227 4996 y(CTYPE2)85 b(=)43 b('GLAT-ZEA')475
-b(/)44 b(Y-axis)d(type)227 5095 y(CRVAL1)85 b(=)479 b(-149.56866)39
-b(/)44 b(Reference)39 b(pixel)j(value)227 5195 y(CRVAL2)85
-b(=)479 b(-19.758201)39 b(/)44 b(Reference)39 b(pixel)j(value)227
-5295 y(CRPIX1)85 b(=)610 b(150.500)40 b(/)k(Reference)39
-b(pixel)227 5394 y(CRPIX2)85 b(=)610 b(150.500)40 b(/)k(Reference)39
-b(pixel)227 5494 y(CDELT1)85 b(=)566 b(-1.20000)40 b(/)k(Degrees/pixel)
-227 5593 y(CDELT2)85 b(=)610 b(1.20000)40 b(/)k(Degrees/pixel)227
-5693 y(CROTA1)85 b(=)610 b(0.00000)40 b(/)k(Rotation)c(in)j(degrees.)p
-eop end
-%%Page: 156 166
-TeXDict begin 156 165 bop 0 52 a FF(156)1885 b Fy(17)92
-b(USING)30 b(F)m(OREIGN)h(FITS)f(ENCODINGS)227 351 y
-Ft(SURVEY)85 b(=)43 b('COBE)f(DIRBE')227 451 y(BUNITS)85
-b(=)43 b('MJy/sr)84 b(')479 b(/)227 551 y(ORIGIN)85 b(=)43
-b('CDAC)172 b(')479 b(/)44 b(Cosmology)39 b(Data)j(Analysis)f(Center)
-227 650 y(TELESCOP=)f('COBE)172 b(')479 b(/)44 b(COsmic)d(Background)e
-(Explorer)h(satellite)227 750 y(INSTRUME=)g('DIRBE)128
-b(')479 b(/)44 b(COBE)e(instrument)d([DIRBE,)i(DMR,)h(FIRAS])227
-849 y(PIXRESOL=)868 b(9)43 b(/)h(Quad)e(tree)f(pixel)h(resolution)d
-([6,)k(9])227 949 y(DATE)173 b(=)43 b('27/09/94')475
-b(/)44 b(FITS)e(file)f(creation)g(date)h(\(dd/mm/yy\))227
-1049 y(DATE-MAP=)e('16/09/94')475 b(/)44 b(Date)e(of)g(original)f(file)
-h(creation)e(\(dd/mm/yy\))227 1148 y(COMMENT)215 b(COBE)42
-b(specific)f(keywords)227 1248 y(DATE-BEG=)f('08/12/89')475
-b(/)44 b(date)e(of)g(initial)f(data)h(represented)d(\(dd/mm/yy\))227
-1348 y(DATE-END=)h('25/09/90')475 b(/)44 b(date)e(of)g(final)g(data)g
-(represented)126 b(\(dd/mm/yy\))0 1607 y FF(The)35 b(\014rst)g(step)g
-(is)h(to)g(create)h(a)f(FitsChan)f(and)g(insert)h(these)g(cards)f(in)m
-(to)h(it.)57 b(If)35 b(\\cards")h(is)g(an)f(arra)m(y)h(of)0
-1720 y(p)s(oin)m(ters)28 b(to)h(c)m(haracter)h(strings)e(holding)g(the)
-g(header)g(cards)g(and)g(\\ncards")g(is)g(the)h(n)m(um)m(b)s(er)e(of)h
-(cards,)h(this)0 1833 y(could)h(b)s(e)g(done)g(as)h(follo)m(ws:)227
-2079 y Ft(#include)41 b("ast.h")227 2179 y(#define)g(MAXCARD)g(100)227
-2279 y(AstFitsChan)e(*fitschan;)227 2378 y(char)j(*cards[)f(MAXCARD)g
-(];)227 2478 y(int)i(icard,)e(ncard;)227 2677 y(...)227
-2876 y(fitschan)g(=)i(astFitsChan\()38 b(NULL,)k(NULL,)f("")i(\);)227
-2976 y(for)g(\()g(icard)e(=)i(0;)g(icard)f(<)h(ncard;)e(icard++)g(\))i
-(astPutFits\()c(fitschan,)h(cards[)h(icard)g(],)i(0)g(\);)0
-3236 y FF(Note)25 b(that)g(w)m(e)g(ha)m(v)m(e)g(not)g(initialised)g
-(the)f(Enco)s(ding)g(attribute)h(of)f(the)g(FitsChan)g(as)h(w)m(e)f
-(did)g(in)f Fu(x)p FF(16.3)j(when)0 3349 y(w)m(e)37 b(w)m(an)m(ted)f
-(to)h(use)f(the)g(nativ)m(e)i(enco)s(ding.)57 b(This)36
-b(is)g(b)s(ecause)g(w)m(e)h(are)f(pretending)g(not)g(to)h(kno)m(w)f
-(whic)m(h)0 3461 y(enco)s(ding)29 b(to)i(use)e(and)g(w)m(an)m(t)h(AST)f
-(to)h(determine)g(this)f(for)h(us.)39 b(By)30 b(lea)m(ving)h(the)f
-(Enco)s(ding)f(attribute)h(un-)0 3574 y(set,)k(its)g(default)f(v)-5
-b(alue)33 b(will)g(adjust)f(to)i(whic)m(hev)m(er)g(enco)s(ding)e(AST)g
-(considers)h(to)h(b)s(e)e(most)h(appropriate,)0 3687
-y(according)40 b(to)g(the)f(FITS)f(header)h(cards)f(presen)m(t.)67
-b(F)-8 b(or)40 b(details)g(of)f(ho)m(w)g(this)g(c)m(hoice)h(is)f(made,)
-j(see)d(the)0 3800 y(description)30 b(of)h(the)g(Enco)s(ding)e
-(attribute)i(in)f(App)s(endix)f(C.)0 3962 y(This)38 b(approac)m(h)i
-(has)f(the)g(ob)m(vious)h(adv)-5 b(an)m(tages)40 b(of)g(making)f(our)g
-(program)g(simpler)f(and)h(more)g(\015exible)0 4075 y(and)34
-b(of)g(freeing)g(us)g(from)g(ha)m(ving)g(to)h(kno)m(w)g(ab)s(out)e(the)
-i(di\013eren)m(t)f(enco)s(dings)g(a)m(v)-5 b(ailable.)55
-b(As)34 b(a)h(b)s(on)m(us,)f(it)0 4188 y(also)e(means)e(that)h(the)g
-(program)f(will)h(b)s(e)f(able)h(to)h(read)e(an)m(y)h(new)f(enco)s
-(dings)h(that)g(AST)f(ma)m(y)h(supp)s(ort)e(in)0 4301
-y(future,)h(without)g(needing)g(to)i(b)s(e)d(c)m(hanged.)0
-4463 y(A)m(t)40 b(this)g(p)s(oin)m(t,)i(w)m(e)e(could)g(enquire)f(the)g
-(default)h(v)-5 b(alue)40 b(of)g(the)g(Enco)s(ding)e(attribute,)43
-b(whic)m(h)d(indicates)0 4576 y(whic)m(h)30 b(enco)s(ding)g(AST)g(in)m
-(tends)g(to)h(use,)g(as)f(follo)m(ws:)227 4822 y Ft(const)42
-b(char)g(*encode;)227 5022 y(...)227 5320 y(encode)f(=)j(astGetC\()c
-(fitschan,)g("Encoding")f(\);)0 5580 y FF(The)32 b(result)g(of)h(this)f
-(enquiry)f(w)m(ould)h(b)s(e)g(the)h(string)f(\\FITS-AIPS".)g(Note)i
-(that)f(w)m(e)g(could)f(also)h(ha)m(v)m(e)h(set)0 5693
-y(the)d(FitsChan's)f(Enco)s(ding)g(attribute)h(explicitly)-8
-b(,)32 b(suc)m(h)e(as)h(when)e(creating)j(it:)p eop end
-%%Page: 157 167
-TeXDict begin 157 166 bop 0 52 a Fy(17.4)93 b(Reading)30
-b(F)-8 b(oreign)32 b(W)m(CS)e(Information)h(from)f(a)g(FITS)g(Header)
-1164 b FF(157)227 351 y Ft(fitschan)41 b(=)i(astFitsChan\()38
-b(NULL,)k(NULL,)f("Encoding=FITS-AI)o(PS")c(\);)0 615
-y FF(If)g(w)m(e)i(tried)f(to)g(read)g(information)g(using)g(this)f
-(enco)s(ding)h(\()p Fu(x)p FF(17.4\),)43 b(but)37 b(failed,)k(w)m(e)d
-(could)g(then)f(c)m(hange)0 728 y(the)30 b(enco)s(ding)f(and)g(try)g
-(again.)41 b(This)29 b(w)m(ould)g(allo)m(w)i(our)e(program)g(to)h(tak)m
-(e)h(con)m(trol)g(of)e(ho)m(w)h(the)f(optim)m(um)0 841
-y(c)m(hoice)k(of)e(enco)s(ding)h(is)f(arriv)m(ed)g(at.)44
-b(Ho)m(w)m(ev)m(er,)34 b(it)e(w)m(ould)f(also)h(in)m(v)m(olv)m(e)h
-(using)e(explicit)i(kno)m(wledge)f(of)f(the)0 954 y(enco)s(dings)f(a)m
-(v)-5 b(ailable)33 b(and)d(this)g(is)g(b)s(est)g(a)m(v)m(oided)i(if)e
-(p)s(ossible.)0 1249 y Fw(17.4)112 b(Reading)39 b(F)-9
-b(oreign)37 b(W)m(CS)h(Information)g(from)g(a)g(FITS)f(Header)0
-1471 y FF(Ha)m(ving)f(stored)f(a)h(set)f(of)h(FITS)e(header)h(cards)f
-(in)h(a)g(FitsChan)g(and)g(determined)f(ho)m(w)h(the)h(W)m(CS)f(infor-)
-0 1584 y(mation)k(is)f(enco)s(ded)f(\()p Fu(x)p FF(17.3\),)43
-b(the)38 b(next)g(step)h(is)f(to)g(read)g(an)g(AST)f(Ob)5
-b(ject)38 b(from)g(the)g(FitsChan)g(using)0 1697 y(astRead.)j(W)-8
-b(e)30 b(m)m(ust)e(also)h(remem)m(b)s(er)f(to)h(rewind)f(the)g
-(FitsChan)g(\014rst,)h(if)f(necessary)-8 b(,)30 b(suc)m(h)e(as)h(b)m(y)
-f(clearing)0 1810 y(its)j(Card)e(attribute,)j(whic)m(h)e(defaults)g(to)
-h(1:)227 2060 y Ft(AstObject)40 b(*wcsinfo;)227 2260
-y(...)227 2459 y(astClear\()g(fitschan,)g("Card")h(\);)227
-2559 y(wcsinfo)g(=)i(astRead\()d(fitschan)h(\);)0 2822
-y FF(If)30 b(the)h(p)s(oin)m(ter)f(returned)f(b)m(y)i(astRead)g(is)f
-(not)h(equal)g(to)g(AST)p Fq(__)p FF(NULL,)f(then)g(an)g(Ob)5
-b(ject)31 b(has)f(b)s(een)g(read)0 2935 y(successfully)-8
-b(.)41 b(Otherwise,)29 b(there)g(w)m(as)g(either)h(no)f(information)g
-(to)g(read)g(or)g(the)g(c)m(hoice)i(of)e(FITS)g(enco)s(ding)0
-3048 y(\()p Fu(x)p FF(17.3\))k(w)m(as)e(inappropriate.)0
-3212 y(A)m(t)37 b(this)f(p)s(oin)m(t)f(y)m(ou)i(migh)m(t)f(lik)m(e)h
-(to)g(indulge)f(in)f(a)i(little)g(data)g(v)-5 b(alidation)37
-b(along)g(the)f(lines)g(describ)s(ed)f(in)0 3324 y Fu(x)p
-FF(15.6,)e(for)d(example:)227 3575 y Ft(if)43 b(\()g(!strcmp\()d
-(astGetC\()h(wcsinfo,)f("Class")h(\),)h("FrameSet")e(\))j(\))g({)358
-3675 y(<the)f(Object)f(is)i(a)g(FrameSet,)d(so)j(use)f(it>)227
-3774 y(})h(else)f({)358 3874 y(<something)d(unexpected)h(was)i(read>)
-227 3974 y(})0 4237 y FF(If)26 b(a)h(foreign)f(enco)s(ding)h(has)f
-(de\014nitely)g(b)s(een)g(used,)h(then)f(the)g(Ob)5 b(ject)27
-b(will)g(automatically)i(b)s(e)d(a)g(F)-8 b(rameSet)0
-4350 y(\()p Fu(x)p FF(17.2\),)35 b(so)d(this)f(stage)j(can)d(b)s(e)h
-(omitted.)45 b(Ho)m(w)m(ev)m(er,)34 b(if)e(the)g(nativ)m(e)h(enco)s
-(ding)f(\()p Fu(x)p FF(16.1\))i(migh)m(t)e(ha)m(v)m(e)h(b)s(een)0
-4463 y(emplo)m(y)m(ed,)h(whic)m(h)d(is)h(a)g(p)s(ossibilit)m(y)h(if)f
-(y)m(ou)g(accept)h(the)f(FitsChan's)g(default)g(Enco)s(ding)g(v)-5
-b(alue,)33 b(then)e(an)m(y)0 4576 y(class)g(of)g(Ob)5
-b(ject)30 b(migh)m(t)h(ha)m(v)m(e)h(b)s(een)e(read)g(and)g(a)g(quic)m
-(k)h(c)m(hec)m(k)h(w)m(ould)e(b)s(e)g(w)m(orth)m(while.)0
-4739 y(If)36 b(y)m(ou)i(used)e(astSho)m(w)h(\()p Fu(x)p
-FF(4.4\))i(to)e(examine)h(the)f(F)-8 b(rameSet)38 b(whic)m(h)e(results)
-h(from)f(reading)h(our)g(example)0 4852 y(FITS)29 b(header)g(\()p
-Fu(x)p FF(17.3\),)k(y)m(ou)d(w)m(ould)g(\014nd)e(that)i(its)g(base)g(F)
--8 b(rame)31 b(describ)s(es)e(the)h(image's)h(pixel)f(co)s(ordinate)0
-4965 y(system)i(and)f(that)h(its)g(curren)m(t)g(F)-8
-b(rame)32 b(is)g(a)g(SkyF)-8 b(rame)32 b(represen)m(ting)g(galactic)i
-(co)s(ordinates.)46 b(These)31 b(t)m(w)m(o)0 5078 y(F)-8
-b(rames)34 b(are)f(in)m(ter-related)i(b)m(y)d(a)i(Mapping)f(\(actually)
-h(a)g(CmpMap\))e(whic)m(h)h(incorp)s(orates)g(the)g(e\013ects)h(of)0
-5191 y(v)-5 b(arious)32 b(rotations,)h(scalings)f(and)f(a)h(\\zenithal)
-h(equal)f(area")h(sky)e(pro)5 b(jection,)33 b(so)f(that)g(eac)m(h)h
-(pixel)f(of)f(the)0 5304 y(FITS)f(image)h(is)g(mapp)s(ed)e(on)h(to)h(a)
-g(corresp)s(onding)e(sky)h(p)s(osition)h(in)f(galactic)j(co)s
-(ordinates.)0 5467 y(Because)f(this)f(F)-8 b(rameSet)31
-b(ma)m(y)h(b)s(e)e(used)g(b)s(oth)g(as)g(a)h(Mapping)g(\()p
-Fu(x)p FF(13.6\))i(and)d(as)h(a)g(F)-8 b(rame)32 b(\()p
-Fu(x)p FF(13.8\),)i(it)d(ma)m(y)0 5580 y(b)s(e)d(emplo)m(y)m(ed)j
-(directly)e(to)h(p)s(erform)e(man)m(y)h(useful)f(op)s(erations)i
-(without)f(an)m(y)g(need)g(to)h(decomp)s(ose)f(it)g(in)m(to)0
-5693 y(its)i(comp)s(onen)m(t)f(parts.)41 b(These)30 b(include:)p
-eop end
-%%Page: 158 168
-TeXDict begin 158 167 bop 0 52 a FF(158)1885 b Fy(17)92
-b(USING)30 b(F)m(OREIGN)h(FITS)f(ENCODINGS)136 351 y
-Fu(\017)46 b FF(T)-8 b(ransforming)32 b(data)h(grid)f(\(FITS)f(pixel\))
-i(co)s(ordinates)g(in)m(to)g(galactic)j(co)s(ordinates)c(and)g
-Fx(vic)-5 b(e)34 b(versa)227 464 y FF(\()p Fu(x)p FF(13.6\).)136
-641 y Fu(\017)46 b FF(F)-8 b(ormatting)35 b(co)s(ordinate)e(v)-5
-b(alues)33 b(\(either)h(pixel)f(or)f(galactic)k(co)s(ordinates\))e
-(ready)e(for)h(displa)m(y)g(to)g(a)227 754 y(user)d(\()p
-Fu(x)p FF(7.6)i(and)e Fu(x)p FF(7.7\).)136 932 y Fu(\017)46
-b FF(Enquiring)38 b(ab)s(out)g(axis)h(lab)s(els)f(\(or)h(other)f(axis)h
-(information|)p Fu(x)p FF(7.5\))i(whic)m(h)d(migh)m(t)h(b)s(e)f(used,)i
-(for)227 1045 y(example,)32 b(to)f(lab)s(el)f(columns)g(of)h(co)s
-(ordinates)g(in)f(a)h(table)g(\()p Fu(x)p FF(7.4\).)136
-1222 y Fu(\017)46 b FF(Aligning)31 b(the)e(image)i(with)e(another)h
-(image)h(from)e(whic)m(h)g(a)h(similar)f(F)-8 b(rameSet)31
-b(has)e(b)s(een)g(obtained)227 1335 y(\()p Fu(x)p FF(14.3\).)136
-1512 y Fu(\017)46 b FF(Creating)40 b(a)g(Plot)h(\()p
-Fu(x)p FF(21\),)j(whic)m(h)39 b(can)h(b)s(e)e(used)h(to)h(o)m(v)m(erla)
-m(y)i(a)e(v)-5 b(ariet)m(y)41 b(of)f(graphical)g(information)227
-1625 y(\(including)31 b(a)f(co)s(ordinate)i(grid|Figure)e(8\))h(on)g
-(the)f(displa)m(y)m(ed)h(image.)136 1802 y Fu(\017)46
-b FF(Generating)30 b(a)g(new)e(F)-8 b(rameSet)30 b(whic)m(h)e
-(re\015ects)i(an)m(y)f(geometrical)i(pro)s(cessing)e(y)m(ou)g(p)s
-(erform)f(on)g(the)227 1915 y(asso)s(ciated)41 b(image)g(data)f(\()p
-Fu(x)p FF(14.5\).)71 b(This)39 b(new)g(F)-8 b(rameSet)41
-b(could)f(then)f(b)s(e)g(written)h(out)f(as)h(FITS)227
-2028 y(headers)30 b(to)h(describ)s(e)f(the)h(mo)s(di\014ed)e(image)j
-(\()p Fu(x)p FF(17.7\).)0 2249 y(If)22 b(the)h(F)-8 b(rameSet)23
-b(con)m(tains)h(other)f(F)-8 b(rames)23 b(\(apart)g(from)f(the)h(base)f
-(and)g(curren)m(t)g(F)-8 b(rames\),)26 b(then)c(y)m(ou)h(w)m(ould)0
-2362 y(also)31 b(ha)m(v)m(e)h(access)g(to)f(information)f(ab)s(out)g
-(other)h(co)s(ordinate)g(systems)g(asso)s(ciated)h(with)e(the)g(image.)
-0 2640 y Fw(17.5)112 b(Remo)m(ving)26 b(W)m(CS)g(Information)g(from)g
-(FITS)g(Headers|the)g(Destructiv)m(e)f(Read)0 2851 y
-FF(It)d(is)f(instructiv)m(e)i(at)f(this)g(p)s(oin)m(t)f(to)h(examine)h
-(the)e(con)m(ten)m(ts)j(of)e(a)f(FitsChan)h(after)g(w)m(e)g(ha)m(v)m(e)
-h(read)e(a)h(F)-8 b(rameSet)0 2964 y(from)30 b(it)h(\()p
-Fu(x)p FF(17.4\).)43 b(The)30 b(follo)m(wing)i(w)m(ould)e(rewind)f(our)
-h(FitsChan)g(and)g(displa)m(y)h(its)g(con)m(ten)m(ts:)227
-3172 y Ft(#include)41 b(<stdio.h>)227 3272 y(char)h(card[)g(81)g(];)227
-3471 y(...)227 3670 y(astClear\()e(fitschan,)g("Card")h(\);)227
-3770 y(while)h(\()h(astFindFits\()c(fitschan,)g("\045f",)j(card,)f(1)j
-(\))f(\))g(\(void\))e(printf\()g("\045s\\n",)f(card)i(\);)0
-3991 y FF(The)30 b(output,)g(if)g(w)m(e)h(started)g(with)f(the)h
-(example)g(FITS)e(header)i(in)f Fu(x)p FF(17.3,)i(migh)m(t)f(lo)s(ok)g
-(lik)m(e)h(this:)227 4199 y Ft(SIMPLE)85 b(=)871 b(T)43
-b(/)87 b(Written)41 b(by)i(IDL:)85 b(30-Jul-1997)39 b(05:35:42.00)227
-4298 y(BITPIX)85 b(=)784 b(-32)42 b(/)87 b(Bits)42 b(per)g(pixel.)227
-4398 y(NAXIS)129 b(=)871 b(2)43 b(/)87 b(Number)41 b(of)i(dimensions)
-227 4497 y(NAXIS1)85 b(=)784 b(300)42 b(/)87 b(Length)41
-b(of)i(x)g(axis.)227 4597 y(NAXIS2)85 b(=)784 b(300)42
-b(/)87 b(Length)41 b(of)i(y)g(axis.)227 4697 y(SURVEY)85
-b(=)43 b('COBE)f(DIRBE')227 4796 y(BUNITS)85 b(=)43 b('MJy/sr)84
-b(')227 4896 y(ORIGIN)h(=)43 b('CDAC)172 b(')479 b(/)87
-b(Cosmology)40 b(Data)i(Analysis)e(Center)227 4996 y(TELESCOP=)g('COBE)
-172 b(')479 b(/)87 b(COsmic)41 b(Background)f(Explorer)g(satellite)227
-5095 y(INSTRUME=)g('DIRBE)128 b(')479 b(/)87 b(COBE)42
-b(instrument)e([DIRBE,)g(DMR,)i(FIRAS])227 5195 y(PIXRESOL=)868
-b(9)43 b(/)87 b(Quad)42 b(tree)g(pixel)g(resolution)d([6,)j(9])227
-5295 y(DATE)173 b(=)43 b('27/09/94')475 b(/)87 b(FITS)42
-b(file)g(creation)e(date)i(\(dd/mm/yy\))227 5394 y(DATE-MAP=)e
-('16/09/94')475 b(/)87 b(Date)42 b(of)h(original)d(file)i(creation)e
-(\(dd/mm/yy\))227 5494 y(COMMENT)215 b(COBE)42 b(specific)f(keywords)
-227 5593 y(DATE-BEG=)f('08/12/89')475 b(/)87 b(date)42
-b(of)h(initial)e(data)h(represented)d(\(dd/mm/yy\))227
-5693 y(DATE-END=)h('25/09/90')475 b(/)87 b(date)42 b(of)h(final)e(data)
-h(represented)127 b(\(dd/mm/yy\))p eop end
-%%Page: 159 169
-TeXDict begin 159 168 bop 0 52 a Fy(17.6)93 b(Propagating)31
-b(W)m(CS)g(Information)f(through)g(Data)i(Pro)s(cessing)e(Steps)904
-b FF(159)0 351 y(Comparing)42 b(this)f(with)h(the)g(original,)k(y)m(ou)
-d(can)f(see)g(that)h(all)g(the)f(FITS)f(cards)h(that)g(represen)m(t)g
-(W)m(CS)0 464 y(information)36 b(ha)m(v)m(e)i(b)s(een)d(remo)m(v)m(ed.)
-59 b(They)35 b(ha)m(v)m(e)i(e\013ectiv)m(ely)i(b)s(een)d(\\suc)m(k)m
-(ed)h(out")f(of)g(the)h(FitsChan)f(b)m(y)0 577 y(the)g(destructiv)m(e)g
-(read)g(that)g(astRead)g(p)s(erforms)e(and)h(con)m(v)m(erted)i(in)m(to)
-f(an)g(equiv)-5 b(alen)m(t)37 b(F)-8 b(rameSet.)57 b(AST)0
-690 y(remem)m(b)s(ers)36 b(where)f(they)i(w)m(ere)g(stored,)h(ho)m(w)m
-(ev)m(er,)h(so)e(that)g(if)f(w)m(e)h(later)g(write)g(W)m(CS)f
-(information)h(bac)m(k)0 803 y(in)m(to)28 b(the)f(FitsChan)g(\()p
-Fu(x)p FF(17.7\))i(they)e(will,)i(as)e(far)f(as)i(p)s(ossible,)f(go)h
-(bac)m(k)f(in)m(to)h(their)f(original)h(lo)s(cations.)41
-b(This)0 916 y(helps)30 b(to)h(preserv)m(e)f(the)h(o)m(v)m(erall)i(la)m
-(y)m(out)f(of)e(the)h(FITS)f(header.)0 1081 y(Y)-8 b(ou)28
-b(can)f(no)m(w)h(see)f(wh)m(y)g(astRead)h(p)s(erforms)e(destructiv)m(e)
-i(reads.)40 b(It)27 b(is)g(a)h(mec)m(hanism)f(for)g(remo)m(ving)h(W)m
-(CS)0 1194 y(information)i(from)g(a)g(FITS)f(header)g(while)h
-(insulating)g(y)m(ou,)h(as)f(a)g(programmer,)g(from)f(the)h(details)h
-(of)f(the)0 1306 y(enco)s(ding)c(b)s(eing)f(used.)38
-b(It)26 b(means)g(y)m(ou)g(can)g(ensure)f(that)h(all)g(relev)-5
-b(an)m(t)27 b(header)f(cards)f(ha)m(v)m(e)i(b)s(een)e(remo)m(v)m(ed,)0
-1419 y(giving)k(y)m(ou)g(a)g(clean)h(slate,)h(without)d(ha)m(ving)h(to)
-h(kno)m(w)e(whic)m(h)h(FITS)f(k)m(eyw)m(ords)h(an)m(y)g(particular)g
-(enco)s(ding)0 1532 y(uses.)0 1697 y(Clearing)d(this)g(W)m(CS)f
-(information)h(out)g(of)g(a)g(FITS)f(header)h(is)g(particularly)g(imp)s
-(ortan)m(t)g(when)e(considering)0 1810 y(ho)m(w)35 b(to)h(write)f(new)f
-(W)m(CS)h(information)g(bac)m(k)h(after)g(pro)s(cessing)e(\()p
-Fu(x)p FF(17.7\).)57 b(If)35 b(an)m(y)g(relev)-5 b(an)m(t)36
-b(FITS)f(cards)0 1923 y(are)25 b(left)h(o)m(v)m(er)h(from)d(the)h
-(input)f(dataset)j(and)d(\014nd)g(their)h(w)m(a)m(y)h(in)m(to)g(the)f
-(new)g(pro)s(cessed)f(header,)i(they)f(could)0 2036 y(in)m(terfere)38
-b(with)f(the)h(new)f(information)h(b)s(eing)f(written.)2003
-2003 y Fv(28)2140 2036 y FF(The)g(destructiv)m(e)h(read)g(mec)m(hanism)
-f(ensures)0 2149 y(that)31 b(this)f(do)s(esn't)g(happ)s(en.)0
-2449 y Fw(17.6)112 b(Propagating)38 b(W)m(CS)g(Information)g(through)g
-(Data)f(Pro)s(cessing)h(Steps)0 2673 y FF(One)43 b(of)h(the)g(purp)s
-(oses)e(of)i(AST)f(is)h(to)g(mak)m(e)h(it)f(feasible)h(to)f(propagate)h
-(W)m(CS)f(information)g(through)0 2786 y(successiv)m(e)d(stages)g(of)f
-(data)h(pro)s(cessing,)h(so)e(that)h(it)f(remains)g(consisten)m(t)h
-(with)f(the)g(asso)s(ciated)h(image)0 2899 y(data.)46
-b(As)32 b(far)g(as)g(p)s(ossible,)h(this)e(should)g(happ)s(en)g
-(regardless)h(of)g(the)g(FITS)g(enco)s(ding)g(used)f(to)i(store)f(the)0
-3012 y(original)g(W)m(CS)e(information.)0 3177 y(If)36
-b(the)h(data)h(pro)s(cessing)f(b)s(eing)f(p)s(erformed)g(do)s(es)g(not)
-h(c)m(hange)h(the)f(relationship)g(b)s(et)m(w)m(een)h(image)g(pixel)0
-3290 y(and)d(w)m(orld)g(co)s(ordinates)h(\(whatev)m(er)h(these)f(ma)m
-(y)g(b)s(e\),)g(then)g(propagation)g(of)g(the)f(W)m(CS)h(information)f
-(is)0 3403 y(straigh)m(tforw)m(ard.)42 b(Y)-8 b(ou)30
-b(can)h(simply)f(cop)m(y)h(the)g(FITS)e(header)h(from)g(input)g(to)h
-(output.)0 3567 y(If)k(this)h(relationship)g(c)m(hanges,)i(ho)m(w)m(ev)
-m(er,)g(then)e(the)f(W)m(CS)h(information)g(m)m(ust)f(b)s(e)g(pro)s
-(cessed)g(alongside)0 3680 y(the)d(image)h(data)f(and)f(a)h(new)f(FITS)
-g(header)g(generated)h(to)h(represen)m(t)e(it.)45 b(In)31
-b(this)g(case,)j(the)d(sequence)h(of)0 3793 y(op)s(erations)f(within)f
-(y)m(our)g(program)g(w)m(ould)g(probably)g(b)s(e)f(as)i(follo)m(ws:)111
-4062 y(1.)46 b(Read)c(the)f(image)i(data)e(and)g(asso)s(ciated)i(FITS)d
-(header)h(from)g(the)g(input)g(dataset,)k(putting)c(the)227
-4175 y(header)30 b(cards)h(in)m(to)g(a)g(FitsChan)f(\()p
-Fu(x)p FF(17.3\).)111 4366 y(2.)46 b(Read)c(an)f(AST)f(Ob)5
-b(ject,)45 b(a)c(F)-8 b(rameSet,)46 b(from)40 b(the)i(FitsChan)f(\(t)m
-(ypically)i(using)e(a)h(foreign)f(FITS)227 4479 y(enco)s(ding|)p
-Fu(x)p FF(17.4\).)111 4671 y(3.)46 b(Pro)s(cess)31 b(the)f(image)i
-(data)f(and)f(mo)s(dify)f(the)i(F)-8 b(rameSet)31 b(accordingly)h(\()p
-Fx(e.g.)e Fu(x)p FF(14.5\).)111 4863 y(4.)46 b(W)-8 b(rite)32
-b(the)f(F)-8 b(rameSet)31 b(bac)m(k)g(in)m(to)h(the)e(FitsChan)g(\()p
-Fu(x)p FF(17.7\).)111 5055 y(5.)46 b(P)m(erform)31 b(an)m(y)f(other)h
-(mo)s(di\014cation)g(of)f(FITS)g(header)g(cards)g(y)m(our)g(program)h
-(ma)m(y)g(require.)111 5246 y(6.)46 b(W)-8 b(rite)35
-b(the)e(FitsChan)h(con)m(ten)m(ts)h(\()p Fx(i.e.)e FF(pro)s(cessed)f
-(header)i(cards\))f(and)g(image)h(data)g(to)g(the)g(output)227
-5359 y(dataset.)p 0 5425 1512 4 v 73 5479 a Fs(28)138
-5510 y Fr(This)27 b(can)g(happ)r(en)f(if)h(a)g(particular)g(k)n(eyw)n
-(ord)f(is)i(presen)n(t)e(in)g(the)g(input)g(header)h(but)e(is)j(not)e
-(used)g(in)h(the)f(output)f(header)0 5602 y(\(whether)30
-b(particular)g(k)n(eyw)n(ords)g(are)g(used)f(can)h(dep)r(end)f(on)h
-(the)f(W)n(CS)h(information)h(b)r(eing)f(stored\).)47
-b(In)29 b(suc)n(h)h(a)g(case,)i(the)0 5693 y(original)27
-b(v)l(alue)f(w)n(ould)g(not)f(b)r(e)h(o)n(v)n(er-written)f(b)n(y)g(a)h
-(new)g(output)f(v)l(alue,)g(so)i(w)n(ould)f(remain)g(erroneously)g
-(presen)n(t.)p eop end
-%%Page: 160 170
-TeXDict begin 160 169 bop 0 52 a FF(160)1885 b Fy(17)92
-b(USING)30 b(F)m(OREIGN)h(FITS)f(ENCODINGS)0 351 y FF(In)e(stage)j
-(\(2\),)g(the)e(original)i(W)m(CS)e(information)g(will)h(b)s(e)e(remo)m
-(v)m(ed)j(from)d(the)i(FitsChan)f(b)m(y)g(a)g(destructiv)m(e)0
-464 y(read.)62 b(Later,)40 b(in)e(stage)h(\(4\),)h(new)d(W)m(CS)h
-(information)g(is)f(written)h(to)g(replace)h(it.)63 b(This)37
-b(is)g(the)h(pro)s(cess)0 577 y(whic)m(h)30 b(w)m(e)h(consider)f(next)h
-(\()p Fu(x)p FF(17.7\).)0 875 y Fw(17.7)112 b(W)-9 b(riting)37
-b(F)-9 b(oreign)38 b(W)m(CS)f(Information)h(to)f(a)h(FITS)g(Header)0
-1099 y FF(Before)g(w)m(e)f(can)g(write)f(pro)s(cessed)g(W)m(CS)h
-(information)g(held)f(in)h(a)g(F)-8 b(rameSet)37 b(bac)m(k)h(in)m(to)f
-(a)g(FitsChan)g(in)0 1212 y(preparation)i(for)g(output,)h(w)m(e)g(m)m
-(ust)f(select)h(the)f(FITS)f(enco)s(ding)h(to)h(use.)66
-b(Unfortunately)-8 b(,)42 b(w)m(e)d(cannot)0 1325 y(simply)26
-b(dep)s(end)g(on)h(the)g(default)g(v)-5 b(alue)27 b(of)g(the)h(Enco)s
-(ding)e(attribute,)i(as)g(w)m(e)f(did)f(when)g(reading)h(the)g(input)0
-1438 y(information)34 b(\()p Fu(x)p FF(17.3\),)k(b)s(ecause)33
-b(the)h(destructiv)m(e)h(action)g(of)f(reading)g(the)g(W)m(CS)g(data)h
-(\()p Fu(x)p FF(17.5\))h(will)e(ha)m(v)m(e)0 1551 y(altered)28
-b(the)f(FitsChan's)g(con)m(ten)m(ts.)41 b(This,)27 b(in)g(turn,)f(will)
-i(ha)m(v)m(e)g(c)m(hanged)f(the)g(c)m(hoice)i(of)e(default)g(enco)s
-(ding,)0 1664 y(probably)j(causing)g(it)h(to)g(rev)m(ert)g(to)h(NA)-8
-b(TIVE.)0 1828 y(W)g(e)31 b(will)g(return)e(to)h(the)h(question)f(of)g
-(the)g(optim)m(um)g(c)m(hoice)i(of)f(enco)s(ding)f(b)s(elo)m(w.)40
-b(F)-8 b(or)31 b(no)m(w,)g(let's)g(assume)0 1941 y(that)40
-b(w)m(e)g(w)m(an)m(t)g(to)h(use)e(the)g(same)h(enco)s(ding)g(for)f
-(output)g(as)h(w)m(e)g(used)f(for)g(input.)67 b(Since)39
-b(w)m(e)h(enquired)0 2054 y(what)32 b(that)h(w)m(as)f(b)s(efore)g(w)m
-(e)g(read)g(the)g(input)f(W)m(CS)h(data)h(from)f(the)g(FitsChan)g(\()p
-Fu(x)p FF(17.3\),)j(w)m(e)e(can)f(no)m(w)g(set)0 2166
-y(that)e(v)-5 b(alue)29 b(explicitly)-8 b(.)43 b(W)-8
-b(e)30 b(can)f(also)h(set)g(the)f(FitsChan's)h(Card)e(attribute)i(bac)m
-(k)g(to)f(1)h(at)g(the)f(same)h(time)0 2279 y(\(b)s(ecause)f(the)g
-(write)h(will)f(fail)g(if)g(the)h(FitsChan)e(is)h(not)h(rew)m(ound\).)
-39 b(astW)-8 b(rite)31 b(can)e(then)g(b)s(e)f(used)h(to)g(write)0
-2392 y(the)i(output)f(W)m(CS)g(information)h(in)m(to)g(the)g(FitsChan:)
-227 2646 y Ft(int)43 b(nobj;)227 2845 y(...)227 3044
-y(astSet\()e(fitschan,)f("Card=1,)g(Encoding=\045s",)e(encode)j(\);)227
-3144 y(nobj)h(=)h(astWrite\()d(fitschan,)g(wcsinfo)h(\);)0
-3411 y FF(The)28 b(v)-5 b(alue)29 b(returned)e(b)m(y)i(astW)-8
-b(rite)30 b(\(assigned)f(to)g(\\nob)5 b(j"\))29 b(indicates)h(ho)m(w)e
-(man)m(y)h(Ob)5 b(jects)28 b(w)m(ere)h(written.)0 3524
-y(This)h(will)g(either)h(b)s(e)f(1)h(or)f(zero.)42 b(A)31
-b(v)-5 b(alue)31 b(of)f(zero)h(is)g(used)f(to)h(indicate)g(that)g(the)g
-(information)g(could)f(not)0 3637 y(b)s(e)g(enco)s(ded)g(in)g(the)g
-(form)g(y)m(ou)h(requested.)41 b(If)30 b(this)g(happ)s(ens,)f(nothing)h
-(will)h(ha)m(v)m(e)g(b)s(een)f(written.)0 3801 y(If)h(y)m(our)g(c)m
-(hoice)i(of)e(enco)s(ding)g(pro)m(v)m(es)h(inadequate,)g(the)f
-(probable)g(reason)g(is)h(that)f(the)h(c)m(hanges)g(y)m(ou)f(ha)m(v)m
-(e)0 3914 y(made)23 b(to)g(the)g(F)-8 b(rameSet)24 b(ha)m(v)m(e)g
-(caused)f(it)h(to)f(depart)g(from)f(the)h(data)h(mo)s(del)e(whic)m(h)h
-(the)g(enco)s(ding)g(assumes.)0 4027 y(AST)43 b(kno)m(ws)g(ab)s(out)h
-(the)g(data)g(mo)s(del)g(used)f(b)m(y)g(eac)m(h)i(enco)s(ding)f(and)f
-(will)h(attempt)h(to)f(simplify)f(the)0 4140 y(F)-8 b(rameSet)31
-b(y)m(ou)e(pro)m(vide)h(so)g(as)f(to)i(\014t)e(in)m(to)h(that)g(mo)s
-(del,)g(th)m(us)f(relieving)i(y)m(ou)f(of)f(the)h(need)f(to)h
-(understand)0 4252 y(the)38 b(details)h(and)f(limitations)i(of)e(eac)m
-(h)h(enco)s(ding)f(y)m(ourself.)65 b(When)37 b(this)h(attempt)i(fails,)
-g(ho)m(w)m(ev)m(er,)i(y)m(ou)0 4365 y(m)m(ust)30 b(consider)h(what)f
-(alternativ)m(e)j(enco)s(ding)d(to)h(use.)0 4530 y(Ideally)-8
-b(,)31 b(y)m(ou)e(w)m(ould)g(probably)g(w)m(an)m(t)h(to)g(try)f(a)g
-(sequence)h(of)f(alternativ)m(e)j(enco)s(dings,)d(using)g(an)g(approac)
-m(h)0 4642 y(suc)m(h)h(as)h(the)f(follo)m(wing:)227 4896
-y Ft(/*)43 b(1.)g(*/)227 4996 y(astSet\()e(fitschan,)f("Card=1,)g
-(Encoding=FITS-IR)o(AF")d(\);)227 5095 y(if)43 b(\()g(!astWrite\()d
-(fitschan,)g(wcsinfo)g(\))j(\))h({)227 5295 y(/*)f(2.)g(*/)358
-5394 y(astSetC\()d(fitschan,)g("Encoding",)f(encode)i(\);)358
-5494 y(if)i(\()g(!astWrite\()c(fitschan,)h(wcsinfo)h(\))i(\))g({)227
-5693 y(/*)g(3.)g(*/)p eop end
-%%Page: 161 171
-TeXDict begin 161 170 bop 0 52 a Fy(17.7)93 b(W)-8 b(riting)31
-b(F)-8 b(oreign)32 b(W)m(CS)e(Information)g(to)i(a)e(FITS)g(Header)1289
-b FF(161)489 351 y Ft(astSet\()40 b(fitschan,)g("Encoding=NATIVE")d
-(\);)489 451 y(\(void\))k(astWrite\()f(fitschan,)g(wcsinfo)g(\);)358
-551 y(})227 650 y(})0 912 y FF(That)30 b(is:)111 1175
-y(1.)46 b(Start)29 b(b)m(y)g(trying)g(the)f(FITS-W)m(CS)h(enco)s(ding,)
-g(on)g(the)g(grounds)e(that)i(FITS)f(should)g(pro)m(vide)h(a)g(uni-)227
-1288 y(v)m(ersal)g(in)m(terc)m(hange)g(standard)e(in)g(whic)m(h)h(all)g
-(W)m(CS)g(information)f(should)g(b)s(e)g(expressed)g(if)h(p)s(ossible.)
-111 1475 y(2.)46 b(If)35 b(that)h(fails,)h(then)d(try)h(the)h(original)
-g(enco)s(ding)f(used)f(for)h(the)g(input)f(W)m(CS)h(information,)i(on)e
-(the)227 1588 y(grounds)g(that)h(y)m(ou)f(are)h(at)h(least)f(not)g
-(making)g(the)f(information)h(an)m(y)g(harder)f(for)g(others)g(to)i
-(read)227 1701 y(than)30 b(it)h(originally)h(w)m(as.)111
-1889 y(3.)46 b(If)23 b(that)h(also)g(fails,)i(then)d(y)m(ou)g(are)h
-(probably)e(trying)i(to)g(store)g(fairly)f(complex)h(information)g(for)
-f(whic)m(h)227 2002 y(y)m(ou)36 b(need)g(the)g(nativ)m(e)h(enco)s
-(ding.)56 b(Only)35 b(other)h(AST)f(programs)h(will)g(then)f(b)s(e)g
-(able)i(to)f(read)g(this)227 2115 y(information,)i(but)d(these)h(are)g
-(probably)f(the)h(only)f(programs)h(that)g(will)g(b)s(e)f(able)h(to)g
-(do)g(an)m(ything)227 2228 y(sensible)31 b(with)f(it)h(an)m(yw)m(a)m(y)
--8 b(.)0 2490 y(An)36 b(alternativ)m(e)i(approac)m(h)f(migh)m(t)g(b)s
-(e)e(to)i(enco)s(de)f(the)h(W)m(CS)f(information)g(in)g(sev)m(eral)h(w)
-m(a)m(ys,)i(since)e(this)0 2603 y(giv)m(es)g(the)g(maxim)m(um)f(c)m
-(hance)h(that)f(other)h(soft)m(w)m(are)g(will)g(b)s(e)e(able)i(to)f
-(read)g(it.)59 b(This)35 b(approac)m(h)h(is)g(only)0
-2716 y(p)s(ossible)44 b(if)g(there)g(is)h(no)f(signi\014can)m(t)h
-(con\015ict)g(b)s(et)m(w)m(een)g(the)f(FITS)g(k)m(eyw)m(ords)g(used)f
-(b)m(y)i(the)f(di\013eren)m(t)0 2829 y(enco)s(dings)387
-2796 y Fv(29)462 2829 y FF(.)39 b(Adopting)27 b(this)g(approac)m(h)h(w)
-m(ould)e(simply)h(require)g(m)m(ultiple)g(calls)i(to)e(astW)-8
-b(rite,)30 b(rewinding)0 2942 y(the)h(FitsChan)f(and)g(c)m(hanging)h
-(its)g(Enco)s(ding)e(v)-5 b(alue)31 b(b)s(efore)f(eac)m(h)i(one.)0
-3104 y(Unfortunately)-8 b(,)26 b(ho)m(w)m(ev)m(er,)g(there)e(is)f(a)h
-(dra)m(wbac)m(k)g(to)g(duplicating)g(W)m(CS)f(information)h(in)f(the)h
-(FITS)f(header)0 3217 y(in)38 b(this)h(w)m(a)m(y)-8 b(,)42
-b(b)s(ecause)d(an)m(y)g(program)g(whic)m(h)f(mo)s(di\014es)g(one)h(v)m
-(ersion)g(of)g(this)g(information)g(and)f(simply)0 3330
-y(copies)27 b(the)f(remainder)f(of)h(the)h(header)e(will)i(risk)e(pro)s
-(ducing)g(t)m(w)m(o)i(inconsisten)m(t)g(sets)g(of)f(information.)39
-b(This)0 3443 y(could)34 b(ob)m(viously)h(b)s(e)e(confusing)h(to)g
-(subsequen)m(t)f(soft)m(w)m(are.)53 b(Whether)35 b(y)m(ou)f(consider)g
-(this)g(a)g(w)m(orth)m(while)0 3556 y(risk)c(probably)g(dep)s(ends)e
-(on)i(the)h(use)f(to)h(whic)m(h)f(y)m(ou)h(exp)s(ect)g(y)m(our)f(data)h
-(to)g(b)s(e)f(put.)p 0 5516 1512 4 v 73 5570 a Fs(29)138
-5602 y Fr(In)g(practice,)j(this)e(means)g(y)n(ou)f(should)g(a)n(v)n
-(oid)h(mixing)g(FITS-IRAF,)e(FITS-W)n(CS,)h(FITS-AIPS,)g(FITS-AIPS++)f
-(and)0 5693 y(FITS-PC)d(enco)r(dings)g(since)g(they)f(share)h(man)n(y)g
-(k)n(eyw)n(ords.)p eop end
-%%Page: 162 172
-TeXDict begin 162 171 bop 0 52 a FF(162)1885 b Fy(17)92
-b(USING)30 b(F)m(OREIGN)h(FITS)f(ENCODINGS)p eop end
-%%Page: 163 173
-TeXDict begin 163 172 bop 3643 52 a FF(163)0 351 y Fz(18)135
-b(Storing)45 b(AST)f(Ob)7 b(jects)46 b(as)f(XML)f(\(XmlChan\))0
-603 y FF(XML)208 570 y Fv(30)347 603 y FF(is)32 b(fast)h(b)s(ecoming)f
-(the)g(standard)g(format)g(for)g(passing)g(structured)f(data)i(around)e
-(the)h(in)m(ternet,)0 716 y(and)20 b(m)m(uc)m(h)h(general)h(purp)s(ose)
-d(soft)m(w)m(are)j(has)e(b)s(een)g(written)h(for)g(tasks)g(suc)m(h)f
-(as)h(the)g(parsing,)i(editing,)g(displa)m(y)0 829 y(and)29
-b(transformation)g(of)h(XML)f(data.)41 b(The)29 b(XmlChan)g(class)h
-(\(a)g(sp)s(ecialised)f(form)g(of)h(Channel\))e(pro)m(vides)0
-941 y(facilities)k(for)f(storing)f(AST)g(ob)5 b(jects)31
-b(externally)g(in)f(the)h(form)f(of)g(XML)h(do)s(cumen)m(ts,)f(th)m(us)
-g(allo)m(wing)i(suc)m(h)0 1054 y(soft)m(w)m(are)g(to)f(b)s(e)f(used.)0
-1216 y(The)40 b(primary)f(XML)h(format)h(used)e(b)m(y)h(the)h(XmlChan)e
-(class)i(is)g(a)f(fairly)h(close)g(transliteration)h(of)e(the)0
-1329 y(AST)27 b(nativ)m(e)j(format)e(pro)s(duced)f(b)m(y)h(the)g(basic)
-g(Channel)g(class.)40 b(Curren)m(tly)-8 b(,)29 b(there)f(is)g(no)g(DTD)
-h(or)f(sc)m(hema)0 1442 y(de\014ning)c(the)i(structure)f(of)g(data)i
-(pro)s(duced)c(in)i(this)h(format)f(b)m(y)h(an)f(XmlChan.)38
-b(The)25 b(follo)m(wing)i(is)e(a)h(nativ)m(e)0 1554 y(AST)i(represen)m
-(tation)i(of)f(a)g(simple)g(1-D)g(F)-8 b(rame)30 b(\(including)f
-(commen)m(ts)g(and)g(with)f(the)h(F)-8 b(ull)29 b(attribute)h(set)0
-1667 y(to)h(zero)g(so)g(that)g(some)g(default)f(attribute)h(v)-5
-b(alues)31 b(are)g(included)e(as)i(extra)g(commen)m(ts\):)271
-1911 y Ft(Begin)41 b(Frame)173 b(#)43 b(Coordinate)c(system)i
-(description)227 2011 y(#)131 b(Title)41 b(=)i("1-d)f(coordinate)e
-(system")215 b(#)43 b(Title)e(of)i(coordinate)d(system)402
-2110 y(Naxes)h(=)i(1)131 b(#)43 b(Number)e(of)i(coordinate)c(axes)402
-2210 y(Domain)i(=)i("SCREEN")127 b(#)44 b(Coordinate)39
-b(system)i(domain)227 2310 y(#)131 b(Lbl1)42 b(=)h("Axis)e(1")217
-b(#)44 b(Label)d(for)h(axis)g(1)227 2409 y(#)131 b(Uni1)42
-b(=)h("cm")390 b(#)44 b(Units)d(for)h(axis)g(1)402 2509
-y(Ax1)g(=)305 b(#)43 b(Axis)f(number)f(1)532 2609 y(Begin)h(Axis)303
-b(#)44 b(Coordinate)39 b(axis)663 2708 y(Unit)j(=)h("cm")129
-b(#)44 b(Axis)d(units)532 2808 y(End)i(Axis)271 2907
-y(End)f(Frame)0 3164 y FF(The)30 b(corresp)s(onding)f(XmlChan)h(output)
-g(w)m(ould)g(lo)s(ok)h(lik)m(e:)271 3408 y Ft(<Frame)41
-b(xmlns="http://ww)o(w.s)o(ta)o(rl)o(ink)o(.a)o(c.u)o(k/)o(as)o(t/x)o
-(ml)o(/")576 3508 y(desc="Coordinate)c(system)k(description">)402
-3608 y(<_attribute)e(name="Title")f(quoted="true")g(value="1-d)i
-(coordinate)f(system")925 3707 y(desc="Title)g(of)j(coordinate)e
-(system")h(default="true"/)o(>)402 3807 y(<_attribute)e(name="Naxes")f
-(value="1")i(desc="Number)f(of)k(coordinate)c(axes"/>)402
-3906 y(<_attribute)g(name="Domain")f(quoted="true")g(value="SCREEN")925
-4006 y(desc="Coordinat)o(e)g(system)j(domain"/>)402 4106
-y(<_attribute)e(name="Lbl1")g(quoted="true")f(value="Axis)h(1")925
-4205 y(desc="Label)g(for)j(axis)g(1")h(default="true"/>)402
-4305 y(<_attribute)c(name="Uni1")g(quoted="true")f(value="cm")925
-4405 y(desc="Units)h(for)j(axis)g(1")h(default="true"/>)402
-4504 y(<Axis)e(label="Ax1")e(desc="Coordinate)e(axis">)532
-4604 y(<!--Axis)k(number)g(1-->)532 4703 y(<_attribute)e(name="Unit")g
-(quoted="true")g(value="cm")g(desc="Axis)h(units"/>)402
-4803 y(</Axis>)271 4903 y(</Frame>)0 5160 y FF(Notes:)111
-5417 y(1.)46 b(The)27 b(AST)g(class)h(name)g(is)f(used)g(as)h(the)g
-(name)f(for)g(an)h(XML)f(elemen)m(t)i(whic)m(h)f(con)m(tain)h(a)e
-(description)227 5530 y(of)k(an)f(AST)g(ob)5 b(ject.)p
-0 5607 1512 4 v 73 5661 a Fs(30)138 5693 y Fr(h)n
-(ttp://www.w3.org/XML/)p eop end
-%%Page: 164 174
-TeXDict begin 164 173 bop 0 52 a FF(164)1399 b Fy(18)92
-b(STORING)29 b(AST)h(OBJECTS)f(AS)h(XML)g(\(XMLCHAN\))111
-351 y FF(2.)46 b(AST)39 b(attributes)h(are)g(describ)s(ed)f(b)m(y)g
-(XML)h(elemen)m(ts)h(with)e(the)h(name)f(\\)p Fq(_)p
-FF(attribute".)70 b(Unfortu-)227 464 y(nately)-8 b(,)32
-b(the)f(w)m(ord)f(\\attribute")i(is)e(also)i(used)d(b)m(y)h(XML)h(to)g
-(refer)f(to)h(a)g(\\name=v)-5 b(alue")32 b(pair)e(within)227
-577 y(an)36 b(elemen)m(t)h(start)f(tag.)58 b(So)36 b(for)f(instance,)j
-(the)e(\\Title")h(attribute)g(of)e(the)h(AST)f(F)-8 b(rame)37
-b(ob)5 b(ject)36 b(is)227 690 y(describ)s(ed)g(within)h(an)f(XML)i
-(elemen)m(t)g(with)f(name)g(\\)p Fq(_)p FF(attribute")h(in)f(whic)m(h)f
-(the)i(XML)f(attribute)227 803 y(\\name")c(has)e(the)g(v)-5
-b(alue)32 b(\\Title",)i(and)c(the)i(XML)g(attribute)g(\\v)-5
-b(alue")33 b(has)e(the)g(v)-5 b(alue)32 b(\\1-d)g(co)s(ordi-)227
-916 y(nate)g(system".)45 b(The)31 b(moral)h(is)g(alw)m(a)m(ys)h(to)f(b)
-s(e)f(clear)h(clear)h(ab)s(out)e(the)h(con)m(text)h(\(AST)e(or)h(XML\))
-g(in)227 1029 y(whic)m(h)e(the)h(w)m(ord)f Fx(attribute)38
-b FF(is)30 b(b)s(eing)g(used!)111 1215 y(3.)46 b(The)e(XML)h(includes)f
-(commen)m(ts)i(b)s(oth)e(as)g(XML)h(attributes)g(with)g(the)f(name)h
-(\\desc",)k(and)44 b(as)227 1328 y(separate)32 b(commen)m(t)f(tags.)111
-1514 y(4.)46 b(Elemen)m(ts)33 b(whic)m(h)e(describ)s(e)g(default)g(v)-5
-b(alues)32 b(are)g(iden)m(ti\014ed)f(b)m(y)h(the)f(fact)i(that)f(they)f
-(ha)m(v)m(e)i(an)e(XML)227 1627 y(attribute)f(called)h(\\default")g
-(set)f(to)g(the)g(v)-5 b(alue)30 b(\\true".)41 b(These)29
-b(elemen)m(ts)i(are)f(ignored)f(when)g(b)s(eing)227 1740
-y(read)i(bac)m(k)g(in)m(to)g(an)f(XmlChan.)111 1926 y(5.)46
-b(The)20 b(outer-most)h(XML)g(elemen)m(t)h(of)e(an)g(AST)g(ob)5
-b(ject)21 b(will)f(set)h(the)g(default)f(namespace)h(to)g
-Fq(http://www.starlink.ac.uk)o(/ast)o(/xm)o(l/)227 2039
-y FF(whic)m(h)30 b(will)h(b)s(e)f(inherited)g(b)m(y)g(all)h(nested)g
-(elemen)m(ts.)0 2295 y(The)j(XmlChan)g(class)h(c)m(hanges)g(the)g
-(default)g(v)-5 b(alue)35 b(for)f(the)h(Commen)m(t)f(and)g(F)-8
-b(ull)35 b(attributes)g(\(inherited)0 2408 y(from)k(the)g(base)h
-(Channel)e(class\))j(to)f(zero)g(and)e(-1,)43 b(resulting)c(in)g(terse)
-h(output)f(b)m(y)g(default.)68 b(With)39 b(the)0 2521
-y(default)31 b(v)-5 b(alues)30 b(for)g(these)h(attributes,)g(the)g(ab)s
-(o)m(v)m(e)h(XML)e(is)h(reduced)e(to)i(the)g(follo)m(wing:)271
-2764 y Ft(<Frame)41 b(xmlns="http://ww)o(w.s)o(ta)o(rl)o(ink)o(.a)o
-(c.u)o(k/)o(as)o(t/x)o(ml)o(/">)402 2863 y(<_attribute)e(name="Naxes")f
-(value="1"/>)402 2963 y(<_attribute)h(name="Domain")f(quoted="true")g
-(value="SCREEN"/>)402 3063 y(<Axis)j(label="Ax1">)532
-3162 y(<_attribute)e(name="Unit")g(quoted="true")g(value="cm"/>)402
-3262 y(</Axis>)271 3361 y(</Frame>)0 3618 y FF(The)30
-b(XmlChan)f(class)i(uses)f(the)h(Skip)e(attributes)i(v)m(ery)g
-(similarly)g(to)g(the)f(Channel)g(class.)41 b(If)30 b(Skip)f(is)i(zero)
-0 3731 y(\(the)f(default\))g(then)f(an)h(error)f(will)h(b)s(e)f(rep)s
-(orted)g(if)g(the)h(text)h(supplied)d(b)m(y)h(the)h(source)g(function)f
-(do)s(es)g(not)0 3844 y(b)s(egin)k(with)h(an)f(AST)g(Ob)5
-b(ject.)51 b(If)33 b(Skip)g(is)g(non-zero,)j(then)d(initial)i(text)f
-(is)g(skipp)s(ed)e(o)m(v)m(er)j(without)f(error)0 3956
-y(un)m(til)k(the)g(start)g(of)g(an)f(AST)g(ob)5 b(ject)39
-b(is)f(found.)61 b(this)37 b(allo)m(ws)j(an)d(AST)g(ob)5
-b(ject)39 b(to)f(b)s(e)f(lo)s(cated)i(within)e(a)0 4069
-y(larger)31 b(XML)g(do)s(cumen)m(t.)0 4360 y Fw(18.1)112
-b(Reading)39 b(IV)m(O)m(A)d(Space-Time-Co)s(ordinates)41
-b(XML)c(\(STC-X\))g(Descriptions)0 4580 y FF(The)29 b(XmlChan)g(class)i
-(also)f(pro)m(vides)g(supp)s(ort)e(for)h(reading)h(\(but)f(not)h
-(writing\))g(XML)g(do)s(cumen)m(ts)g(whic)m(h)0 4693
-y(use)39 b(a)h(restricted)g(subset)e(of)i(an)f(early)h(draft)e
-(\(V1.20\))k(of)e(the)f(IV)m(O)m(A)h(Space-Time-Co)s(ordinates)g(XML)0
-4806 y(\(STC-X\))23 b(system.)38 b(The)23 b(v)m(ersion)g(of)h(STC-X)e
-(\014nally)h(adopted)g(b)m(y)g(the)g(IV)m(O)m(A)h(di\013ers)e(in)h(sev)
-m(eral)i(signi\014can)m(t)0 4919 y(resp)s(ects)d(from)f(V1.20,)26
-b(and)21 b(so)i(the)f(STC-X)f(supp)s(ort)f(curren)m(tly)i(pro)m(vided)g
-(b)m(y)g(AST)f(is)h(mainly)g(of)g(historical)0 5032 y(in)m(terest.)42
-b(Note,)31 b(AST)e(also)h(supp)s(orts)e(the)h(alternativ)m(e)j
-(\\STC-S")d(linear)h(string)g(description)f(of)h(the)g(STC)0
-5145 y(mo)s(del)g(\(see)i Fu(x)p FF(19\).)0 5306 y(STC-X)19
-b(V1.20)j(is)f(do)s(cumen)m(ted)f(at)41 b(h)m(ttp://www.iv)m(oa.net/Do)
-s(cumen)m(ts/WD/STC/STC-200502)q(25)q(.h)m(tml,)0 5419
-y(and)23 b(the)h(curren)m(t)f(v)m(ersion)h(is)f(do)s(cumen)m(ted)g(at)
-48 b(h)m(ttp://www.iv)m(oa.net/Do)s(cumen)m(ts/latest/STC-X.h)m(tml.)0
-5580 y(When)38 b(an)f(STC-X)g(do)s(cumen)m(t)h(is)g(read)f(using)g(an)h
-(XmlChan,)h(the)f(read)g(op)s(eration)g(pro)s(duces)f(an)g(AST)0
-5693 y(Ob)5 b(ject)25 b(of)g(the)g(Stc)g(class,)i(whic)m(h)e(is)g
-(itself)h(a)f(sub)s(class)f(of)h(Region.)40 b(Sp)s(eci\014cally)-8
-b(,)27 b(eac)m(h)f(suc)m(h)f(Ob)5 b(ject)25 b(will)g(b)s(e)p
-eop end
-%%Page: 165 175
-TeXDict begin 165 174 bop 0 52 a Fy(18.1)93 b(Reading)30
-b(IV)m(O)m(A)h(Space-Time-Co)s(ordinates)h(XML)e(\(STC-X\))h
-(Descriptions)658 b FF(165)0 351 y(an)29 b(instance)h(of)g(StcSearc)m
-(hLo)s(cation,)i(StcResourcePro\014le,)e(StcCatalogEn)m(tryLo)s(cation)
-j(or)d(StcObsDat-)0 464 y(aLo)s(cation.)49 b(See)32 b(the)h
-(description)g(of)f(the)h(XmlChan)f(class)h(and)f(the)g(XmlF)-8
-b(ormat)34 b(attribute)g(for)e(further)0 577 y(details.)p
-eop end
-%%Page: 166 176
-TeXDict begin 166 175 bop 0 52 a FF(166)1399 b Fy(18)92
-b(STORING)29 b(AST)h(OBJECTS)f(AS)h(XML)g(\(XMLCHAN\))p
-eop end
-%%Page: 167 177
-TeXDict begin 167 176 bop 3643 52 a FF(167)0 351 y Fz(19)135
-b(Reading)46 b(and)f(writing)g(STC-S)f(descriptions)i(\(StcsChans\))0
-604 y FF(The)22 b(StcsChan)f(class)i(pro)m(vides)g(facilities)h(for)e
-(reading)h(and)e(writing)i(IV)m(O)m(A)g(\\STC-S")e(descriptions.)38
-b(STC-)0 717 y(S)22 b(\(see)46 b(h)m(ttp://www.iv)m(oa.net/Do)s(cumen)m
-(ts/latest/)q(STC-S.h)m(tml\))28 b(is)23 b(a)g(linear)g(string)g(syn)m
-(tax)g(that)g(allo)m(ws)0 830 y(simple)42 b(sp)s(eci\014cation)g(of)g
-(the)g(STC)f(metadata)j(describing)d(a)h(region)h(in)e(an)h
-(astronomical)i(co)s(ordinate)0 943 y(system.)82 b(AST)43
-b(supp)s(orts)f(a)j(subset)e(of)h(the)g(STC-S)f(sp)s(eci\014cation,)48
-b(allo)m(wing)e(an)e(STC-S)e(description)0 1056 y(of)35
-b(a)h(region)g(within)f(an)g(AST-supp)s(orted)e(astronomical)k(co)s
-(ordinate)f(system)g(to)g(b)s(e)e(con)m(v)m(erted)j(in)m(to)g(an)0
-1169 y(equiv)-5 b(alen)m(t)29 b(AST)d(Region)i(ob)5 b(ject,)29
-b(and)d(vice-v)m(ersa.)42 b(F)-8 b(or)28 b(further)e(details,)j(see)f
-(the)f(full)g(description)g(of)g(the)0 1281 y(StcsChan)j(class)h(in)f
-(App)s(endix)e(D.)p eop end
-%%Page: 168 178
-TeXDict begin 168 177 bop 0 52 a FF(168)652 b Fy(19)92
-b(READING)31 b(AND)g(WRITING)g(STC-S)e(DESCRIPTIONS)f(\(STCSCHANS\))p
-eop end
-%%Page: 169 179
-TeXDict begin 169 178 bop 3643 52 a FF(169)0 351 y Fz(20)135
-b(Creating)46 b(Y)-11 b(our)44 b(Own)h(Priv)-7 b(ate)46
-b(Mappings)e(\(In)l(traMaps\))0 614 y Fw(20.1)112 b(The)38
-b(Need)g(for)f(Extensibilit)m(y)0 843 y FF(Ho)m(w)m(ev)m(er)28
-b(man)m(y)d(Mapping)h(classes)h(are)f(pro)m(vided)f(b)m(y)g(AST,)h(so)s
-(oner)f(or)h(later)g(y)m(ou)g(will)g(w)m(an)m(t)h(to)f(transform)0
-956 y(co)s(ordinates)34 b(in)f(some)h(w)m(a)m(y)g(that)g(has)f(not)h(b)
-s(een)e(foreseen.)50 b(Y)-8 b(ou)34 b(migh)m(t)g(w)m(an)m(t)h(to)f
-(plot)f(a)h(graph)f(in)g(some)0 1069 y(no)m(v)m(el)g(curvilinear)e(co)s
-(ordinate)h(system)f(\(p)s(erhaps)f(y)m(ou)h(already)h(ha)m(v)m(e)g(a)g
-(W)m(CS)f(system)g(in)g(y)m(our)g(soft)m(w)m(are)0 1182
-y(and)g(just)g(w)m(an)m(t)i(to)f(use)f(AST)g(for)h(its)g(graphical)g
-(capabilities\).)47 b(Alternativ)m(ely)-8 b(,)35 b(y)m(ou)d(migh)m(t)g
-(need)f(to)i(cali-)0 1295 y(brate)24 b(a)h(complex)g(dataset)g(\(lik)m
-(e)h(an)e(ob)5 b(jectiv)m(e)26 b(prism)d(plate\))i(where)e(eac)m(h)j(p)
-s(osition)e(m)m(ust)g(b)s(e)f(con)m(v)m(erted)j(to)0
-1408 y(w)m(orld)f(co)s(ordinates)g(with)g(reference)g(to)h(calibration)
-g(data)g(under)d(the)i(con)m(trol)h(of)f(an)g(elab)s(orate)h
-(algorithm.)0 1575 y(In)35 b(suc)m(h)h(cases,)j(it)d(is)g(clear)h(that)
-g(the)f(basic)g(pre-formed)g(comp)s(onen)m(ts)g(pro)m(vided)f(b)m(y)h
-(AST)g(for)f(building)0 1688 y(Mappings)30 b(are)h(just)e(not)i
-(enough.)40 b(What)31 b(y)m(ou)g(need)f(is)g(access)i(to)e(a)h
-(programming)f(language.)42 b(Ho)m(w)m(ev)m(er,)0 1801
-y(if)33 b(y)m(ou)f(write)h(y)m(our)g(o)m(wn)f(soft)m(w)m(are)i(to)g
-(transform)e(co)s(ordinate)h(v)-5 b(alues,)34 b(then)e(it)h(m)m(ust)g
-(b)s(e)e(made)i(a)m(v)-5 b(ailable)0 1914 y(in)42 b(the)h(form)f(of)h
-(an)f(AST)g(class)h(\(from)f(whic)m(h)h(y)m(ou)g(can)f(create)i(Ob)5
-b(jects\))43 b(b)s(efore)f(it)h(can)g(b)s(e)f(used)g(in)0
-2027 y(conjunction)30 b(with)g(other)h(AST)f(facilities.)0
-2194 y(A)m(t)39 b(this)f(p)s(oin)m(t)g(y)m(ou)g(migh)m(t)h(consider)f
-(writing)g(y)m(our)g(o)m(wn)g(AST)f(class,)k(but)c(this)h(is)g(not)h
-(recommended.)0 2307 y(Not)29 b(only)g(w)m(ould)f(the)h(in)m(ternal)g
-(con)m(v)m(en)m(tions)h(used)e(b)m(y)g(AST)g(tak)m(e)i(some)f(time)g
-(to)g(master,)g(but)f(y)m(ou)h(migh)m(t)0 2420 y(also)j(\014nd)d(y)m
-(ourself)i(ha)m(ving)h(to)f(c)m(hange)h(y)m(our)f(soft)m(w)m(are)h
-(whenev)m(er)f(a)g(new)g(v)m(ersion)g(of)g(AST)f(w)m(as)h(released.)0
-2533 y(F)-8 b(ortunately)g(,)33 b(there)d(is)h(a)f(m)m(uc)m(h)h(easier)
-g(route)g(pro)m(vided)f(b)m(y)g(the)h(In)m(traMap)f(class.)0
-2843 y Fw(20.2)112 b(The)38 b(In)m(traMap)g(Mo)s(del)0
-3071 y FF(T)-8 b(o)35 b(allo)m(w)h(y)m(ou)f(to)g(write)g(y)m(our)f(o)m
-(wn)h(Mappings,)h(AST)d(pro)m(vides)i(a)g(sp)s(ecial)g(kind)f(of)g
-(Mapping)h(called)h(an)0 3184 y(In)m(traMap.)k(An)26
-b(In)m(traMap)h(is)g(a)g(sort)g(of)g(\\wrapp)s(er")f(for)g(a)h(co)s
-(ordinate)h(transformation)f(function)f(written)0 3297
-y(in)34 b(C.)g(Y)-8 b(ou)34 b(write)g(this)g(function)g(y)m(ourself)g
-(and)g(then)f(register)i(it)g(with)e(AST.)h(This,)g(in)g(e\013ect,)j
-(creates)e(a)0 3410 y(new)23 b(class)h(from)f(whic)m(h)g(y)m(ou)h(can)g
-(create)h(Mappings)e(\()p Fx(i.e.)g FF(In)m(traMaps\))h(whic)m(h)f
-(will)h(transform)f(co)s(ordinates)0 3523 y(in)30 b(whatev)m(er)h(w)m
-(a)m(y)h(y)m(our)e(transformation)h(function)f(sp)s(eci\014es.)0
-3691 y(Because)38 b(In)m(traMaps)e(are)h(Mappings,)h(they)e(ma)m(y)h(b)
-s(e)f(used)f(in)h(the)h(same)f(w)m(a)m(y)i(as)e(an)m(y)h(other)f
-(Mapping.)0 3803 y(F)-8 b(or)29 b(instance,)h(they)f(ma)m(y)g(b)s(e)f
-(com)m(bined)h(in)f(series)h(or)g(parallel)h(with)e(other)h(Mappings)f
-(using)g(a)h(CmpMap)0 3916 y(\()p Fu(x)p FF(6\),)36 b(they)d(ma)m(y)h
-(b)s(e)e(in)m(v)m(erted)i(\()p Fu(x)p FF(5.5\),)i(y)m(ou)e(ma)m(y)f
-(enquire)g(ab)s(out)g(their)g(attributes)h(\()p Fu(x)p
-FF(4.5\),)i(they)d(ma)m(y)h(b)s(e)0 4029 y(inserted)26
-b(in)m(to)i(F)-8 b(rameSets)27 b(\()p Fu(x)p FF(13\),)j
-Fx(etc.)39 b FF(They)25 b(do,)j(ho)m(w)m(ev)m(er,)h(ha)m(v)m(e)e(some)g
-(imp)s(ortan)m(t)g(limitations)h(of)f(whic)m(h)0 4142
-y(y)m(ou)k(should)e(b)s(e)h(a)m(w)m(are)i(b)s(efore)e(w)m(e)g(go)i(on)e
-(to)h(consider)f(ho)m(w)h(to)g(create)h(them.)0 4452
-y Fw(20.3)112 b(Limitations)39 b(of)f(In)m(traMaps)0
-4680 y FF(By)c(no)m(w,)g(y)m(ou)g(migh)m(t)g(b)s(e)f(w)m(ondering)g(wh)
-m(y)g(an)m(y)h(other)g(kind)e(of)i(Mapping)f(is)h(required)f(at)h(all.)
-51 b(After)33 b(all,)0 4793 y(wh)m(y)41 b(not)g(simply)g(write)h(y)m
-(our)f(o)m(wn)g(co)s(ordinate)h(transformation)g(functions)f(in)g(C,)g
-(wrap)f(them)i(up)e(in)0 4906 y(In)m(traMaps)31 b(and)e(do)i(a)m(w)m(a)
-m(y)h(with)e(all)h(the)g(other)g(Mapping)f(classes)h(in)f(AST?)0
-5074 y(The)h(reason)h(is)g(not)g(to)s(o)h(hard)d(to)j(\014nd.)43
-b(An)m(y)32 b(transformation)g(function)g(y)m(ou)g(write)g(is)g
-(created)h(solely)g(b)m(y)0 5187 y(y)m(ou,)e(so)g(it)g(is)f(a)h(priv)-5
-b(ate)31 b(extension)g(whic)m(h)f(do)s(es)g(not)h(form)f(a)g(p)s
-(ermanen)m(t)g(part)g(of)h(AST.)f(If)g(y)m(ou)h(use)f(it)h(to)0
-5300 y(calibrate)d(some)g(data)f(and)f(then)h(pass)f(that)i(data)f(to)h
-(someone)f(else,)i(who)d(has)h(only)g(the)g(standard)f(v)m(ersion)0
-5413 y(of)31 b(AST,)e(then)i(they)f(will)h(not)f(b)s(e)g(able)h(to)g
-(in)m(terpret)g(it.)0 5580 y(Th)m(us,)38 b(while)g(an)f(In)m(traMap)h
-(is)f(\014ne)g(for)g(use)g(b)m(y)g(y)m(ou)h(and)f(y)m(our)g(collab)s
-(orators)i(\(who)e(w)m(e)h(assume)f(ha)m(v)m(e)0 5693
-y(access)h(to)g(the)f(same)g(transformation)g(functions\),)i(it)e(do)s
-(es)g(not)g(address)f(the)h(need)f(for)h(univ)m(ersal)g(data)p
-eop end
-%%Page: 170 180
-TeXDict begin 170 179 bop 0 52 a FF(170)772 b Fy(20)92
-b(CREA)-8 b(TING)30 b(YOUR)h(O)m(WN)g(PRIV)-10 b(A)i(TE)30
-b(MAPPINGS)g(\(INTRAMAPS\))0 351 y FF(exc)m(hange)g(lik)m(e)f(other)g
-(AST)f(Mappings)g(do.)40 b(This)27 b(is)h(where)g(the)h(\\In)m(tra")g
-(in)f(the)h(class)g(name)f(\\In)m(traMap")0 464 y(comes)j(from,)f
-(implying)h(priv)-5 b(ate)30 b(or)h(in)m(ternal)g(usage.)0
-626 y(F)-8 b(or)34 b(this)g(reason,)g(it)g(is)g(un)m(wise)f(to)h(store)
-g(In)m(traMaps)g(in)f(datasets,)i(unless)e(they)h(will)g(b)s(e)e(used)h
-(solely)i(for)0 739 y(comm)m(unication)25 b(b)s(et)m(w)m(een)f(collab)s
-(orating)i(items)e(of)f(soft)m(w)m(are)i(whic)m(h)f(share)f(con)m(v)m
-(en)m(tions)j(ab)s(out)d(their)h(use.)0 852 y(A)39 b(priv)-5
-b(ate)39 b(database)h(describing)e(co)s(ordinate)i(systems)e(on)h(a)g
-(graphics)g(device)h(migh)m(t)f(b)s(e)f(an)h(example)0
-965 y(where)i(In)m(traMaps)i(w)m(ould)e(b)s(e)g(suitable,)46
-b(b)s(ecause)c(the)g(data)g(w)m(ould)g(probably)f(nev)m(er)h(b)s(e)f
-(accessed)j(b)m(y)0 1078 y(an)m(y)m(one)i(else's)f(soft)m(w)m(are.)85
-b(Restricting)46 b(In)m(traMap)f(usage)g(to)g(within)f(a)h(single)g
-(program)f(\()p Fx(i.e.)83 b FF(nev)m(er)0 1191 y(writing)30
-b(it)h(out\))g(is,)g(of)f(course,)h(completely)h(safe.)0
-1353 y(If,)25 b(b)m(y)g(acciden)m(t,)i(an)d(In)m(traMap)h(should)e
-(happ)s(en)g(to)i(escap)s(e)g(as)g(part)f(of)g(a)h(dataset,)i(then)d
-(the)h(unsusp)s(ecting)0 1466 y(recipien)m(t)f(is)f(lik)m(ely)i(to)f
-(receiv)m(e)h(an)e(error)f(message)j(when)d(they)h(attempt)h(to)g(read)
-f(the)g(data.)39 b(Ho)m(w)m(ev)m(er,)27 b(AST)0 1579
-y(will)e(asso)s(ciate)j(details)e(of)f(the)g(In)m(traMap's)h
-(transformation)f(function)g(and)g(its)g(author)g(\(if)h(pro)m(vided\))
-f(with)0 1692 y(the)30 b(data,)h(so)f(that)g(the)g(recipien)m(t)h(can)f
-(mak)m(e)h(an)f(in)m(telligen)m(t)i(enquiry)d(to)i(obtain)f(the)g
-(necessary)g(soft)m(w)m(are)0 1805 y(if)g(this)h(pro)m(v)m(es)g(essen)m
-(tial.)0 2097 y Fw(20.4)112 b(W)-9 b(riting)37 b(a)h(T)-9
-b(ransformation)39 b(F)-9 b(unction)0 2318 y FF(The)27
-b(\014rst)f(stage)j(in)d(creating)j(an)e(In)m(traMap)h(is)f(to)h(write)
-f(the)g(co)s(ordinate)h(transformation)g(function.)39
-b(This)0 2431 y(should)e(ha)m(v)m(e)i(a)f(calling)i(in)m(terface)f(lik)
-m(e)h(the)e(astT)-8 b(ranP)38 b(function)g(pro)m(vided)f(b)m(y)h(AST)f
-(\()p Fx(q.v.)p FF(\).)64 b(Here)38 b(is)g(a)0 2544 y(simple)29
-b(example)h(of)f(a)h(suitable)f(transformation)h(function)f(whic)m(h)g
-(transforms)f(co)s(ordinates)i(b)m(y)f(squaring)0 2657
-y(them:)227 2903 y Ft(#include)41 b("ast.h")227 3003
-y(#include)g(<math.h>)227 3202 y(void)h(SqrTran\()e(AstMapping)g
-(*this,)h(int)h(npoint,)f(int)h(ncoord_in,)837 3302 y(const)g(double)f
-(*ptr_in[],)f(int)i(forward,)e(int)j(ncoord_out,)837
-3402 y(double)f(*ptr_out[])d(\))k({)358 3501 y(int)f(point,)f(coord;)
-358 3601 y(double)g(x;)227 3800 y(/*)i(Forward)e(transformation.)c(*/)
-358 3900 y(if)43 b(\()g(forward)e(\))i({)489 3999 y(for)f(\()h(point)f
-(=)h(0;)g(point)e(<)i(npoint;)e(point++)g(\))i({)620
-4099 y(for)f(\()h(coord)f(=)h(0;)g(coord)e(<)i(ncoord_in;)d(coord++)g
-(\))k({)750 4199 y(x)f(=)h(ptr_in[)c(coord)i(][)h(point)e(];)750
-4298 y(ptr_out[)g(coord)g(][)i(point)e(])j(=)f(\()g(x)g(==)g(AST__BAD)d
-(\))j(?)g(AST__BAD)e(:)i(x)g(*)g(x;)620 4398 y(})489
-4497 y(})227 4697 y(/*)g(Inverse)e(transformation.)c(*/)358
-4796 y(})43 b(else)f({)489 4896 y(for)g(\()h(point)f(=)h(0;)g(point)e
-(<)i(npoint;)e(point++)g(\))i({)620 4996 y(for)f(\()h(coord)f(=)h(0;)g
-(coord)e(<)i(ncoord_in;)d(coord++)g(\))k({)750 5095 y(x)f(=)h(ptr_in[)c
-(coord)i(][)h(point)e(];)750 5195 y(ptr_out[)g(coord)g(][)i(point)e(])j
-(=)881 5295 y(\()f(x)g(<)h(0.0)e(||)h(x)g(==)g(AST__BAD)d(\))j(?)g
-(AST__BAD)e(:)i(sqrt\()e(x)i(\);)620 5394 y(})489 5494
-y(})358 5593 y(})227 5693 y(})p eop end
-%%Page: 171 181
-TeXDict begin 171 180 bop 0 52 a Fy(20.5)93 b(Registering)31
-b(a)g(T)-8 b(ransformation)30 b(F)-8 b(unction)1847 b
-FF(171)0 351 y(As)31 b(y)m(ou)g(can)h(see,)g(the)f(function)g(comes)h
-(in)e(t)m(w)m(o)j(halv)m(es)f(whic)m(h)f(implemen)m(t)g(the)g(forw)m
-(ard)g(and)f(in)m(v)m(erse)i(co-)0 464 y(ordinate)c(transformations.)40
-b(The)28 b(n)m(um)m(b)s(er)f(of)h(p)s(oin)m(ts)f(to)i(b)s(e)e
-(transformed)g(\(\\np)s(oin)m(t"\))i(and)f(the)g(n)m(um)m(b)s(ers)0
-577 y(of)36 b(input)e(and)h(output)g(co)s(ordinates)h(p)s(er)e(p)s(oin)
-m(t)i(\(\\nco)s(ord)p Fq(_)p FF(in")f(and)g(\\nco)s(ord)p
-Fq(_)p FF(out"|in)g(this)h(case)g(b)s(oth)0 690 y(are)31
-b(assumed)g(equal\))h(are)f(passed)g(to)g(the)h(function.)42
-b(A)31 b(pair)g(of)g(lo)s(ops)g(then)g(accesses)h(all)g(the)g(co)s
-(ordinate)0 803 y(v)-5 b(alues.)55 b(Note)37 b(that)e(it)h(is)f
-(legitimate)j(to)e(omit)g(one)f(or)g(other)h(of)f(the)g(forw)m(ard/in)m
-(v)m(erse)h(transformations)0 916 y(and)31 b(simply)g(not)h(to)g
-(implemen)m(t)g(it,)h(if)e(it)h(will)g(not)g(b)s(e)f(required.)43
-b(It)32 b(is)f(also)i(p)s(ermissible)d(to)j(require)e(that)0
-1029 y(the)37 b(n)m(um)m(b)s(ers)e(of)i(input)e(and)h(output)h(co)s
-(ordinates)g(b)s(e)f(\014xed)g(\()p Fx(e.g.)g FF(at)h(2\),)i(or)e(to)g
-(write)g(the)g(function)f(so)0 1142 y(that)31 b(it)g(can)g(handle)e
-(arbitrary)i(dimensionalit)m(y)-8 b(,)32 b(as)e(here.)0
-1301 y(Before)e(using)f(an)g(incoming)g(co)s(ordinate,)i(the)e
-(function)g(m)m(ust)g(\014rst)f(c)m(hec)m(k)j(that)e(it)h(is)f(not)g
-(set)h(to)g(the)f(v)-5 b(alue)0 1414 y(AST)p Fq(__)p
-FF(BAD,)29 b(whic)m(h)f(indicates)i(missing)e(data)i(\()p
-Fu(x)p FF(5.8\).)42 b(If)28 b(it)i(is,)f(the)g(same)g(v)-5
-b(alue)29 b(is)g(also)h(assigned)f(to)g(an)m(y)0 1527
-y(a\013ected)j(output)e(co)s(ordinates.)41 b(The)30 b(v)-5
-b(alue)31 b(AST)p Fq(__)p FF(BAD)f(is)g(also)i(generated)f(if)f(an)m(y)
-h(co)s(ordinates)g(cannot)0 1640 y(b)s(e)k(transformed.)55
-b(In)35 b(this)h(example,)h(this)f(can)g(happ)s(en)d(with)j(the)f(in)m
-(v)m(erse)i(transformation)f(if)f(negativ)m(e)0 1753
-y(v)-5 b(alues)31 b(are)f(encoun)m(tered,)i(so)e(that)h(the)g(square)f
-(ro)s(ot)h(cannot)f(b)s(e)g(tak)m(en.)0 1913 y(There)i(are)h(v)m(ery)g
-(few)g(restrictions)g(on)g(what)g(a)g(co)s(ordinate)g(transformation)g
-(function)g(ma)m(y)g(do.)47 b(F)-8 b(or)34 b(ex-)0 2026
-y(ample,)d(it)g(ma)m(y)g(freely)f(p)s(erform)f(I/O)i(to)g(access)g(an)m
-(y)g(external)g(data)g(needed,)g(it)f(ma)m(y)h(in)m(v)m(ok)m(e)i(other)
-d(AST)0 2139 y(facilities)d(\(but)d(b)s(ew)m(are)h(of)g(un)m(w)m(an)m
-(ted)g(recursion\),)h Fx(etc.)38 b FF(T)m(ypically)-8
-b(,)28 b(y)m(ou)d(ma)m(y)g(also)h(w)m(an)m(t)g(to)f(pass)f(informa-)0
-2252 y(tion)32 b(to)h(it)f Fx(via)g FF(global)h(v)-5
-b(ariables.)46 b(Remem)m(b)s(er,)32 b(ho)m(w)m(ev)m(er,)h(that)g
-(whatev)m(er)f(facilities)i(the)e(transformation)0 2365
-y(function)e(requires)g(m)m(ust)g(b)s(e)g(a)m(v)-5 b(ailable)33
-b(in)d(ev)m(ery)h(program)f(whic)m(h)g(uses)g(it.)0 2525
-y(Generally)-8 b(,)32 b(it)f(is)f(not)g(a)h(go)s(o)s(d)f(idea)g(to)h
-(retain)g(con)m(text)h(information)e(within)g(a)g(transformation)h
-(function.)0 2637 y(That)39 b(is,)i(it)f(should)e(transform)g(eac)m(h)j
-(set)e(of)g(co)s(ordinates)h(as)f(a)h(single)g(p)s(oin)m(t)f(and)f
-(retain)i(no)f(memory)0 2750 y(of)34 b(the)g(p)s(oin)m(ts)g(it)h(has)f
-(transformed)f(b)s(efore.)51 b(This)34 b(is)g(in)f(order)h(to)h
-(conform)f(with)f(the)i(AST)e(mo)s(del)h(of)g(a)0 2863
-y(Mapping.)0 3023 y(If)42 b(an)f(error)h(o)s(ccurs)g(within)f(a)h
-(transformation)h(function,)i(it)d(should)f(use)h(the)g(astSetStatus)h
-(function)0 3136 y(\()p Fu(x)p FF(4.15\))d(to)f(set)f(the)f(AST)g
-(status)h(to)g(an)g(error)f(v)-5 b(alue)38 b(b)s(efore)f(returning.)62
-b(This)37 b(will)h(alert)g(AST)f(to)h(the)0 3249 y(error,)33
-b(causing)f(it)h(to)g(ab)s(ort)f(the)g(curren)m(t)g(op)s(eration.)47
-b(The)32 b(error)g(v)-5 b(alue)32 b(AST)p Fq(__)p FF(ITFER)f(is)h(a)m
-(v)-5 b(ailable)35 b(for)0 3362 y(this)e(purp)s(ose,)f(but)g(other)h(v)
--5 b(alues)34 b(ma)m(y)f(also)h(b)s(e)e(used)g(\()p Fx(e.g.)h
-FF(if)g(y)m(ou)g(wish)f(to)i(distinguish)e(di\013eren)m(t)h(t)m(yp)s
-(es)0 3475 y(of)e(error\).)0 3764 y Fw(20.5)112 b(Registering)38
-b(a)g(T)-9 b(ransformation)38 b(F)-9 b(unction)0 3982
-y FF(Ha)m(ving)25 b(written)f(y)m(our)f(co)s(ordinate)i(transformation)
-f(function,)h(the)e(next)h(step)g(is)g(to)g(register)g(it)h(with)e
-(AST.)0 4095 y(Registration)32 b(is)f(p)s(erformed)d(using)i(astIn)m
-(traReg,)j(as)d(follo)m(ws:)227 4333 y Ft(void)42 b(SqrTran\()e
-(AstMapping)g(*,)j(int,)f(int,)g(const)f(double)g(*[],)h(int,)g(int,)g
-(double)f(*[])h(\);)227 4532 y(const)g(char)g(*author,)e(*contact,)g
-(*purpose;)227 4731 y(...)227 4931 y(purpose)h(=)i("Square)e(each)h
-(coordinate)d(value";)227 5030 y(author)i(=)87 b("R.F.)42
-b(Warren-Smith)c(&)43 b(D.S.)f(Berry";)227 5130 y(contact)f(=)i
-("http://www.starl)o(in)o(k.)o(rl.)o(ac)o(.uk)o(/c)o(gi)o(-bi)o(n/)o
-(htx)o(se)o(rve)o(r/)o(su)o(n21)o(1.)o(htx)o(/?)o(xr)o(ef_)o(Sq)o(rTr)o
-(an)o(";)227 5329 y(astIntraReg\()c("SqrTran",)g(2,)k(2,)g(SqrTran,)d
-(0,)j(purpose,)d(author,)h(contact)g(\);)0 5580 y FF(Note)30
-b(that)g(y)m(ou)g(should)e(also)i(pro)m(vide)f(a)g(function)g(protot)m
-(yp)s(e)h(to)g(describ)s(e)e(the)h(transformation)h(function)0
-5693 y(\(the)h(implemen)m(tation)h(of)e(the)h(function)f(itself)h(w)m
-(ould)f(su\016ce,)h(of)f(course\).)p eop end
-%%Page: 172 182
-TeXDict begin 172 181 bop 0 52 a FF(172)772 b Fy(20)92
-b(CREA)-8 b(TING)30 b(YOUR)h(O)m(WN)g(PRIV)-10 b(A)i(TE)30
-b(MAPPINGS)g(\(INTRAMAPS\))0 351 y FF(The)22 b(\014rst)g(argumen)m(t)h
-(to)g(astIn)m(traReg)i(is)d(a)h(name)g(b)m(y)f(whic)m(h)h(the)g
-(transformation)f(function)h(will)g(b)s(e)f(kno)m(wn.)0
-464 y(This)34 b(will)h(b)s(e)g(used)f(when)g(w)m(e)h(come)h(to)f
-(create)i(an)e(In)m(traMap)g(and)f(is)h(case)h(sensitiv)m(e.)56
-b(W)-8 b(e)36 b(recommend)0 577 y(that)28 b(y)m(ou)g(use)g(the)f
-(actual)i(function)f(name)f(here)h(and)f(mak)m(e)h(this)g(su\016cien)m
-(tly)g(un)m(usual)f(that)h(it)g(is)g(unlik)m(ely)0 690
-y(to)j(clash)g(with)f(an)m(y)h(other)f(functions)g(in)g(most)h(p)s
-(eople's)f(soft)m(w)m(are.)0 853 y(The)i(next)h(t)m(w)m(o)h(argumen)m
-(ts)f(sp)s(ecify)f(the)h(n)m(um)m(b)s(er)e(of)i(input)f(and)g(output)g
-(co)s(ordinates)h(whic)m(h)g(the)f(trans-)0 965 y(formation)43
-b(function)g(will)g(handle.)77 b(These)43 b(corresp)s(ond)e(with)i(the)
-g(Nin)g(and)f(Nout)h(attributes)g(of)g(the)0 1078 y(In)m(traMap)c(w)m
-(e)h(will)f(create.)69 b(Here,)42 b(w)m(e)d(ha)m(v)m(e)h(set)g(them)f
-(b)s(oth)f(to)i(2,)i(whic)m(h)d(means)g(that)g(w)m(e)h(will)f(only)0
-1191 y(b)s(e)c(able)h(to)g(create)h(In)m(traMaps)e(with)h(2)f(input)g
-(and)g(2)g(output)g(co)s(ordinates)h(\(despite)g(the)g(fact)g(that)g
-(the)0 1304 y(transformation)g(function)f(can)h(actually)h(handle)e
-(other)h(dimensionalities\).)58 b(W)-8 b(e)36 b(will)g(see)g(later)h
-(\()p Fu(x)p FF(20.8\))0 1417 y(ho)m(w)30 b(to)i(remo)m(v)m(e)f(this)g
-(restriction.)0 1580 y(The)j(fourth)g(argumen)m(t)i(should)e(con)m
-(tain)i(a)f(set)g(of)h(\015ags)f(whic)m(h)f(describ)s(e)g(the)i
-(transformation)f(function)0 1693 y(in)f(a)i(little)g(more)f(detail.)55
-b(W)-8 b(e)36 b(will)g(return)d(to)j(this)f(shortly)f(\()p
-Fu(x)p FF(20.7)j(&)e Fu(x)p FF(20.10\).)57 b(F)-8 b(or)35
-b(no)m(w,)h(w)m(e)g(supply)d(a)0 1805 y(v)-5 b(alue)31
-b(of)f(zero.)0 1968 y(The)37 b(remaining)i(argumen)m(ts)f(are)g(c)m
-(haracter)i(strings)e(whic)m(h)f(do)s(cumen)m(t)h(the)g(transformation)
-h(function,)0 2081 y(mainly)f(for)f(the)h(b)s(ene\014t)f(of)h(an)m(y)m
-(one)g(who)g(is)f(unfortunate)g(enough)h(to)g(encoun)m(ter)g(a)g
-(reference)g(to)h(it)f(in)0 2194 y(their)c(data)h(whic)m(h)e(they)h
-(cannot)h(in)m(terpret.)52 b(As)34 b(explained)g(ab)s(o)m(v)m(e)h(\()p
-Fu(x)p FF(20.3\),)j(y)m(ou)c(should)f(try)h(and)f(a)m(v)m(oid)0
-2307 y(this,)e(but)e(acciden)m(ts)j(will)f(happ)s(en,)e(so)h(y)m(ou)h
-(should)f(alw)m(a)m(ys)h(pro)m(vide)g(strings)f(con)m(taining)i(the)f
-(follo)m(wing:)111 2568 y(1.)46 b(A)31 b(short)f(description)g(of)h
-(what)f(the)h(transformation)f(function)g(is)h(for.)111
-2756 y(2.)46 b(The)30 b(name)h(of)f(the)h(author.)111
-2943 y(3.)46 b(Con)m(tact)32 b(details,)g(suc)m(h)e(as)h(an)f(e-mail)i
-(or)e(WWW)h(address.)0 3205 y(The)h(idea)i(is)f(that)g(an)m(y)m(one)h
-(\014nding)e(an)h(In)m(traMap)g(in)g(their)g(data,)h(but)f(lac)m(king)h
-(the)f(necessary)h(transfor-)0 3318 y(mation)f(function,)f(should)f(b)s
-(e)h(able)g(to)h(con)m(tact)h(the)f(author)e(and)h(mak)m(e)h(a)f
-(sensible)g(enquiry)f(in)h(order)g(to)0 3430 y(obtain)j(it.)55
-b(If)35 b(y)m(ou)g(exp)s(ect)g(man)m(y)g(enquiries,)h(y)m(ou)f(ma)m(y)h
-(lik)m(e)g(to)f(set)h(up)e(a)h(W)-8 b(orld)35 b(Wide)h(W)-8
-b(eb)35 b(page)h(and)0 3543 y(use)c(that)i(instead)f(\(in)g(the)g
-(example)g(ab)s(o)m(v)m(e,)i(w)m(e)e(use)f(the)h(WWW)h(address)e(of)h
-(the)g(relev)-5 b(an)m(t)34 b(part)f(of)g(this)0 3656
-y(do)s(cumen)m(t\).)0 3949 y Fw(20.6)112 b(Creating)38
-b(an)g(In)m(traMap)0 4170 y FF(Once)30 b(a)h(transformation)g(function)
-f(has)g(b)s(een)g(registered,)h(creating)h(an)e(In)m(traMap)h(from)f
-(it)h(is)f(simple:)227 4419 y Ft(AstIntraMap)39 b(*intramap;)227
-4618 y(...)227 4817 y(intramap)i(=)i(astIntraMap\()38
-b("SqrTran",)i(2,)j(2,)f("")h(\);)0 5079 y FF(W)-8 b(e)28
-b(simply)d(use)i(the)f(astIn)m(traMap)i(constructor)e(function)g(and)g
-(pass)g(it)h(the)g(name)f(of)h(the)f(transformation)0
-5192 y(function)h(to)g(use.)39 b(This)27 b(name)g(is)f(the)i(same)f
-(\(case)h(sensitiv)m(e\))h(one)e(that)g(w)m(e)h(asso)s(ciated)g(with)f
-(the)g(function)0 5305 y(when)i(w)m(e)i(registered)g(it)g(using)f
-(astIn)m(traReg)i(\()p Fu(x)p FF(20.5\).)0 5467 y(Y)-8
-b(ou)28 b(can,)h(of)f(course,)h(register)f(an)m(y)g(n)m(um)m(b)s(er)f
-(of)h(transformation)g(functions)f(and)g(select)j(whic)m(h)d(one)h(to)h
-(use)0 5580 y(whenev)m(er)k(y)m(ou)g(create)h(an)e(In)m(traMap.)48
-b(Y)-8 b(ou)34 b(can)f(also)g(create)h(an)m(y)f(n)m(um)m(b)s(er)f(of)h
-(indep)s(enden)m(t)e(In)m(traMaps)0 5693 y(using)40 b(eac)m(h)h
-(transformation)g(function.)70 b(In)39 b(this)h(sense,)j(eac)m(h)f
-(transformation)e(function)g(y)m(ou)h(register)p eop
-end
-%%Page: 173 183
-TeXDict begin 173 182 bop 0 52 a Fy(20.7)93 b(Restricted)31
-b(Implemen)m(tations)g(of)g(T)-8 b(ransformation)30 b(F)-8
-b(unctions)1131 b FF(173)0 351 y(e\013ectiv)m(ely)37
-b(creates)e(a)f(new)f(\\sub-class")i(of)f(In)m(traMap,)h(from)e(whic)m
-(h)h(y)m(ou)g(can)g(create)h(Ob)5 b(jects)34 b(just)f(lik)m(e)0
-464 y(an)m(y)i(other)g(class.)53 b(Ho)m(w)m(ev)m(er,)38
-b(an)d(error)f(will)g(o)s(ccur)h(if)f(y)m(ou)h(attempt)h(to)f(use)f(a)h
-(transformation)g(function)0 577 y(that)c(has)f(not)h(y)m(et)g(b)s(een)
-f(registered.)0 736 y(The)j(second)h(and)f(third)g(argumen)m(ts)h(to)g
-(astIn)m(traMap)h(are)f(the)g(n)m(um)m(b)s(ers)e(of)i(input)f(and)g
-(output)g(co)s(ordi-)0 849 y(nates.)40 b(These)26 b(de\014ne)f(the)i
-(Nin)f(and)g(Nout)h(attributes)f(for)h(the)f(In)m(traMap)h(that)g(is)f
-(created)h(and)f(they)h(m)m(ust)0 962 y(matc)m(h)k(the)g(corresp)s
-(onding)e(n)m(um)m(b)s(ers)g(giv)m(en)i(when)f(the)g(transformation)h
-(function)f(w)m(as)h(registered.)0 1121 y(The)f(\014nal)h(argumen)m(t)g
-(is)f(the)h(usual)f(attribute)i(initialisation)h(string.)42
-b(Y)-8 b(ou)31 b(ma)m(y)g(set)g(attribute)h(v)-5 b(alues)31
-b(for)0 1234 y(an)f(In)m(traMap)h(in)f(exactly)i(the)f(same)g(w)m(a)m
-(y)g(as)g(for)f(an)m(y)g(other)h(Mapping)f(\()p Fu(x)p
-FF(4.6,)j(and)d(also)h(see)g Fu(x)p FF(20.9\).)0 1522
-y Fw(20.7)112 b(Restricted)37 b(Implemen)m(tations)i(of)f(T)-9
-b(ransformation)38 b(F)-9 b(unctions)0 1739 y FF(Y)h(ou)29
-b(ma)m(y)f(not)h(alw)m(a)m(ys)h(w)m(an)m(t)f(to)g(use)f(b)s(oth)f(the)h
-(forw)m(ard)g(and)g(in)m(v)m(erse)h(transformations)f(when)f(y)m(ou)i
-(create)0 1852 y(an)41 b(In)m(traMap,)k(so)c(it)h(is)f(p)s(ossible)g
-(to)h(omit)g(either)g(from)e(the)i(underlying)e(co)s(ordinate)i
-(transformation)0 1965 y(function.)e(Consider)30 b(the)h(follo)m(wing,)
-h(for)e(example:)227 2200 y Ft(void)42 b(Poly3Tran\()e(AstMapping)f
-(*this,)i(int)i(npoint,)d(int)j(ncoord_in,)925 2299 y(const)e(double)g
-(*ptr_in[],)f(int)i(forward,)e(int)j(ncoord_out,)925
-2399 y(double)e(*ptr_out[])e(\))k({)358 2499 y(double)e(x;)358
-2598 y(int)h(point;)227 2797 y(/*)h(Forward)e(transformation.)c(*/)358
-2897 y(for)42 b(\()i(point)d(=)i(0;)g(point)f(<)h(npoint;)d(point++)h
-(\))i({)489 2997 y(x)g(=)g(ptr_in[)e(0)i(][)g(point)e(];)489
-3096 y(ptr_out[)f(0)j(][)g(point)f(])h(=)g(\()g(x)g(==)g(AST__BAD)d(\))
-j(?)h(AST__BAD)c(:)620 3196 y(6.18)h(+)j(x)f(*)g(\()g(0.12)f(+)h(x)g(*)
-h(\()f(-0.003)e(+)i(x)g(*)g(0.0000101)d(\))j(\);)358
-3296 y(})227 3395 y(})0 3643 y FF(This)h(implemen)m(ts)h(a)h
-(1-dimensional)g(cubic)e(p)s(olynomial)i(transformation.)84
-b(Since)45 b(this)g(is)g(somewhat)0 3756 y(a)m(wkw)m(ard)e(to)g(in)m(v)
-m(ert,)k(ho)m(w)m(ev)m(er,)h(w)m(e)43 b(ha)m(v)m(e)h(only)f(implemen)m
-(ted)g(the)g(forw)m(ard)f(transformation.)78 b(When)0
-3869 y(registering)31 b(the)g(function,)f(this)h(is)f(indicated)h(via)g
-(the)g(\\\015ags")g(argumen)m(t)g(to)g(astIn)m(traReg,)h(as)f(follo)m
-(ws:)227 4103 y Ft(void)42 b(Poly3Tran\()e(AstMapping)f(*,)k(int,)f
-(int,)g(const)f(double)g(*[],)h(int,)g(int,)g(double)f(*[])i(\);)227
-4302 y(...)227 4501 y(astIntraReg\()c("Poly3Tran",)g(1,)j(1,)h
-(Poly3Tran,)c(AST__NOINV,)794 4601 y(purpose,)h(author,)h(contact)g
-(\);)0 4849 y FF(Here,)30 b(the)f(\014fth)f(argumen)m(t)h(has)f(b)s
-(een)g(set)i(to)f(the)g(\015ag)g(v)-5 b(alue)30 b(AST)p
-Fq(__)p FF(NOINV)d(to)j(indicate)f(the)g(lac)m(k)i(of)e(an)0
-4962 y(in)m(v)m(erse.)42 b(If)29 b(the)h(forw)m(ard)g(transformation)g
-(w)m(ere)h(absen)m(t,)g(w)m(e)f(w)m(ould)g(use)g(AST)p
-Fq(__)p FF(NOF)m(OR)f(instead.)41 b(Flag)0 5075 y(v)-5
-b(alues)31 b(for)f(this)g(argumen)m(t)h(ma)m(y)g(b)s(e)f(com)m(bined)g
-(using)g(a)h(bit)m(wise)g(OR)f(if)g(necessary)-8 b(.)0
-5362 y Fw(20.8)112 b(V)-9 b(ariable)38 b(Num)m(b)s(ers)g(of)g(Co)s
-(ordinates)0 5580 y FF(In)g(our)f(earlier)i(examples,)i(w)m(e)e(ha)m(v)
-m(e)h(used)d(a)i(\014xed)e(n)m(um)m(b)s(er)g(of)i(input)e(and)h(output)
-f(co)s(ordinates)i(when)0 5693 y(registering)33 b(a)f(co)s(ordinate)h
-(transformation)f(function.)45 b(It)32 b(is)g(not)g(necessary)g(to)h
-(imp)s(ose)e(this)h(restriction,)p eop end
-%%Page: 174 184
-TeXDict begin 174 183 bop 0 52 a FF(174)772 b Fy(20)92
-b(CREA)-8 b(TING)30 b(YOUR)h(O)m(WN)g(PRIV)-10 b(A)i(TE)30
-b(MAPPINGS)g(\(INTRAMAPS\))0 351 y FF(ho)m(w)m(ev)m(er,)f(if)e(the)f
-(transformation)h(function)g(can)g(cop)s(e)f(with)h(a)g(v)-5
-b(ariable)27 b(n)m(um)m(b)s(er)e(of)i(co)s(ordinates)h(\(as)f(with)0
-464 y(the)k(example)g(in)g Fu(x)p FF(20.4\).)44 b(W)-8
-b(e)32 b(indicate)f(the)g(acceptabilit)m(y)j(of)d(a)g(v)-5
-b(ariable)31 b(n)m(um)m(b)s(er)f(when)f(registering)j(the)0
-577 y(transformation)40 b(function)g(b)m(y)f(supplying)g(the)h(v)-5
-b(alue)40 b(AST)p Fq(__)p FF(ANY)f(for)h(the)g(n)m(um)m(b)s(er)f(of)h
-(input)f(and/or)0 690 y(output)30 b(co)s(ordinates,)h(as)g(follo)m(ws:)
-227 943 y Ft(astIntraReg\()39 b("SqrTran",)g(AST__ANY,)h(AST__ANY,)g
-(SqrTran,)g(0,)794 1043 y(purpose,)g(author,)h(contact)g(\);)0
-1310 y FF(The)h(result)g(is)g(that)h(an)f(In)m(traMap)h(ma)m(y)f(no)m
-(w)h(b)s(e)e(created)i(with)f(an)m(y)h(n)m(um)m(b)s(er)e(of)h(input)f
-(and)h(output)0 1423 y(co)s(ordinates.)f(F)-8 b(or)32
-b(example:)227 1676 y Ft(AstIntraMap)39 b(*intramap1,)g(*intramap2;)227
-1875 y(...)227 2074 y(intramap1)h(=)j(astIntraMap\()c("SqrTran",)g(1,)k
-(1,)g("")g(\);)227 2174 y(intramap2)d(=)j(astIntraMap\()c("SqrTran",)g
-(3,)k(3,)g("Invert=1")c(\);)0 2441 y FF(It)33 b(is)f(p)s(ossible)g(to)h
-(\014x)f(either)h(the)g(n)m(um)m(b)s(er)e(of)i(input)e(or)i(output)f
-(co)s(ordinates)h(\(b)m(y)g(supplying)e(an)h(explicit)0
-2554 y(n)m(um)m(b)s(er)39 b(to)i(astIn)m(traReg\),)k(but)40
-b(more)g(subtle)g(restrictions)h(on)g(the)f(n)m(um)m(b)s(er)f(of)h(co)s
-(ordinates,)k(suc)m(h)c(as)0 2666 y(requiring)30 b(that)h(Nin)f(and)g
-(Nout)h(b)s(e)e(equal,)j(are)e(not)h(supp)s(orted.)39
-b(This)29 b(means)i(that:)227 2920 y Ft(intramap)41 b(=)i
-(astIntraMap\()38 b("SqrTran",)i(1,)j(2,)f("")h(\);)0
-3186 y FF(will)d(b)s(e)f(accepted)i(without)f(error,)i(although)f(the)e
-(transformation)i(function)e(cannot)i(actually)g(handle)0
-3299 y(suc)m(h)32 b(a)g(com)m(bination)h(sensibly)-8
-b(.)46 b(If)31 b(this)h(is)g(imp)s(ortan)m(t,)h(it)f(w)m(ould)g(b)s(e)f
-(w)m(orth)h(adding)g(a)g(c)m(hec)m(k)i(within)d(the)0
-3412 y(transformation)g(function)f(itself,)h(so)g(that)g(the)f(error)g
-(w)m(ould)g(b)s(e)g(detected)i(when)d(it)i(came)g(to)h(b)s(e)d(used.)0
-3710 y Fw(20.9)112 b(Adapting)38 b(a)g(T)-9 b(ransformation)39
-b(F)-9 b(unction)38 b(to)f(Individual)i(In)m(traMaps)0
-3934 y FF(In)g(the)i(examples)f(giv)m(en)i(so)e(far,)j(our)c(co)s
-(ordinate)i(transformation)g(functions)e(ha)m(v)m(e)j(not)e(made)g(use)
-g(of)0 4047 y(the)33 b(\\this")g(p)s(oin)m(ter)f(passed)g(to)h(them)f
-(\(whic)m(h)g(iden)m(ti\014es)h(the)g(In)m(traMap)g(whose)f
-(transformation)g(w)m(e)h(are)0 4160 y(implemen)m(ting\).)68
-b(In)38 b(practice,)43 b(this)c(will)g(often)h(b)s(e)e(the)i(case.)67
-b(Ho)m(w)m(ev)m(er,)44 b(the)39 b(presence)g(of)g(the)h(\\this")0
-4273 y(p)s(oin)m(ter)31 b(allo)m(ws)h(the)f(transformation)h(function)e
-(to)i(in)m(v)m(ok)m(e)h(an)m(y)e(other)g(AST)f(function)h(on)g(the)g
-(In)m(traMap,)0 4386 y(and)37 b(this)g(p)s(ermits)f(enquiries)h(ab)s
-(out)f(its)i(attributes.)61 b(The)37 b(transformation)h(function's)e(b)
-s(eha)m(viour)h(can)0 4498 y(therefore)e(b)s(e)f(mo)s(di\014ed)g
-(according)i(to)f(an)m(y)g(attribute)h(v)-5 b(alues)35
-b(whic)m(h)f(are)i(set.)54 b(This)34 b(turns)f(out)i(to)h(b)s(e)e(a)0
-4611 y(useful)d(thing)h(to)g(do,)h(so)f(eac)m(h)g(In)m(traMap)h(has)e
-(a)h(sp)s(ecial)h(In)m(traFlag)g(attribute)g(reserv)m(ed)f(for)f
-(exactly)j(this)0 4724 y(purp)s(ose.)0 4888 y(Consider,)h(for)g
-(instance,)i(the)d(case)i(where)f(the)f(transformation)i(function)e
-(has)g(access)j(to)e(sev)m(eral)h(alter-)0 5001 y(nativ)m(e)d(sets)g
-(of)f(in)m(ternally-stored)i(data)f(whic)m(h)f(it)g(ma)m(y)h(apply)f
-(to)h(p)s(erform)d(its)j(transformation.)46 b(Rather)0
-5114 y(than)25 b(implemen)m(t)h(man)m(y)f(di\013eren)m(t)g(v)m(ersions)
-h(of)f(the)g(transformation)h(function,)g(y)m(ou)g(ma)m(y)f(switc)m(h)h
-(b)s(et)m(w)m(een)0 5227 y(them)h(b)m(y)f(setting)i(a)f(v)-5
-b(alue)27 b(for)f(the)h(In)m(traFlag)h(attribute)g(when)d(y)m(ou)i
-(create)i(an)d(instance)h(of)g(an)g(In)m(traMap,)0 5340
-y(for)j(example:)227 5593 y Ft(intramap1)40 b(=)j(astIntraMap\()c
-("MyTran",)h(2,)j(2,)f("IntraFlag=A")d(\);)227 5693 y(intramap2)h(=)j
-(astIntraMap\()c("MyTran",)h(2,)j(2,)f("IntraFlag=B")d(\);)p
-eop end
-%%Page: 175 185
-TeXDict begin 175 184 bop 0 52 a Fy(20.10)93 b(Simplifying)30
-b(In)m(traMaps)2453 b FF(175)0 351 y(The)40 b(transformation)h
-(function)f(ma)m(y)h(then)f(enquire)g(the)h(v)-5 b(alue)41
-b(of)g(the)f(In)m(traFlag)i(attribute)g(\()p Fx(e.g.)e
-FF(us-)0 464 y(ing)c(astGetC)h(and)e(passing)g(it)i(the)f(\\this")g(p)s
-(oin)m(ter\))g(and)f(use)h(whic)m(hev)m(er)g(dataset)h(is)f(required)e
-(for)i(that)0 577 y(particular)31 b(In)m(traMap.)0 736
-y(This)d(approac)m(h)h(is)f(particularly)h(useful)f(when)g(the)h(n)m
-(um)m(b)s(er)e(of)i(p)s(ossible)f(transformations)h(is)f(un)m(b)s
-(ounded)0 849 y(or)j(not)g(kno)m(wn)g(in)g(adv)-5 b(ance,)32
-b(in)e(whic)m(h)h(case)h(the)g(In)m(traFlag)g(attribute)g(ma)m(y)g(b)s
-(e)e(used)g(to)i(hold)f(n)m(umerical)0 962 y(v)-5 b(alues)33
-b(enco)s(ded)f(as)h(part)f(of)h(a)g(c)m(haracter)h(string)f
-(\(e\013ectiv)m(ely)j(using)c(them)g(as)h(data)g(for)g(the)f(In)m
-(traMap\).)0 1075 y(It)41 b(is)f(also)i(sup)s(erior)d(to)j(the)e(use)h
-(of)g(a)g(global)g(switc)m(h)h(for)e(comm)m(unication)i(\()p
-Fx(e.g.)e FF(setting)i(an)f(index)f(to)0 1188 y(select)29
-b(the)f(\\curren)m(t")g(data)g(b)s(efore)f(using)g(the)h(In)m
-(traMap\),)h(b)s(ecause)e(it)h(con)m(tin)m(ues)h(to)f(w)m(ork)g(when)e
-(sev)m(eral)0 1301 y(In)m(traMaps)35 b(are)g(em)m(b)s(edded)e(within)h
-(a)h(more)f(complex)h(comp)s(ound)e(Mapping,)j(when)d(y)m(ou)i(ma)m(y)g
-(ha)m(v)m(e)h(no)0 1414 y(con)m(trol)c(o)m(v)m(er)g(the)e(order)g(in)g
-(whic)m(h)g(they)h(are)f(used.)0 1701 y Fw(20.10)112
-b(Simplifying)40 b(In)m(traMaps)0 1919 y FF(A)28 b(notable)h(disadv)-5
-b(an)m(tage)29 b(of)f(In)m(traMaps)g(is)g(that)g(they)g(are)h(\\blac)m
-(k)g(b)s(o)m(xes")f(as)g(far)g(as)g(AST)f(is)h(concerned.)0
-2032 y(This)44 b(means)g(that)h(they)f(ha)m(v)m(e)i(limited)f(abilit)m
-(y)h(to)f(participate)h(in)e(the)g(simpli\014cation)h(of)g(comp)s(ound)
-0 2145 y(Mappings)33 b(p)s(erformed,)g Fx(e.g.)p FF(,)g(b)m(y)g
-(astSimplify)h(\()p Fu(x)p FF(6.7\),)i(b)s(ecause)d(AST)g(cannot)h(kno)
-m(w)f(ho)m(w)g(they)h(in)m(teract)0 2258 y(with)25 b(other)g(Mappings.)
-39 b(In)24 b(realit)m(y)-8 b(,)29 b(of)c(course,)i(they)e(will)h(often)
-f(implemen)m(t)h(suc)m(h)f(sp)s(ecialised)h(co)s(ordinate)0
-2371 y(transformations)31 b(that)g(the)f(simpli\014cation)h(p)s
-(ossibilities)g(will)g(b)s(e)f(rather)g(limited)h(an)m(yw)m(a)m(y)-8
-b(.)0 2530 y(One)25 b(imp)s(ortan)m(t)h(simpli\014cation,)h(ho)m(w)m
-(ev)m(er,)h(is)e(the)f(abilit)m(y)i(of)f(a)g(Mapping)f(to)h(cancel)h
-(with)e(its)h(o)m(wn)g(in)m(v)m(erse)0 2643 y(to)k(yield)g(a)g(unit)f
-(Mapping)g(\(a)i(UnitMap\).)41 b(This)29 b(is)g(imp)s(ortan)m(t)h(b)s
-(ecause)f(Mappings)h(are)g(frequen)m(tly)f(used)0 2756
-y(to)c(relate)h(a)f(dataset)g(to)h(some)e(external)i(standard)d(\(a)i
-(celestial)i(co)s(ordinate)f(system,)g(for)e(example\).)40
-b(When)0 2869 y(in)m(ter-relating)26 b(t)m(w)m(o)f(similar)f(datasets)h
-(calibrated)g(using)f(the)g(same)g(standard,)h(part)e(of)h(the)g
-(Mapping)g(often)0 2982 y(cancels,)29 b(b)s(ecause)d(it)h(is)f(applied)
-g(\014rst)g(in)g(one)g(direction)h(and)f(then)g(the)h(other,)g
-(e\013ectiv)m(ely)j(eliminating)d(the)0 3094 y(reference)h(to)g(the)f
-(standard.)39 b(This)26 b(is)i(often)f(a)h(useful)e(simpli\014cation)i
-(and)f(can)h(lead)f(to)h(greater)h(e\016ciency)-8 b(.)0
-3254 y(Man)m(y)23 b(transformations)f(ha)m(v)m(e)i(this)e(prop)s(ert)m
-(y)g(of)g(cancelling)i(with)e(their)g(o)m(wn)h(in)m(v)m(erse,)i(but)c
-(not)i(necessarily)0 3366 y(all.)42 b(Consider)29 b(the)i(follo)m(wing)
-h(transformation)e(function,)h(for)f(example:)227 3601
-y Ft(void)42 b(MaxTran\()e(AstMapping)g(*this,)h(int)h(npoint,)f(int)h
-(ncoord_in,)837 3700 y(const)g(double)f(*ptr_in[],)f(int)i(forward,)e
-(int)j(ncoord_out,)837 3800 y(double)f(*ptr_out[])d(\))k({)358
-3900 y(double)e(hi,)h(x;)358 3999 y(int)g(coord,)f(point;)227
-4199 y(/*)i(Forward)e(transformation.)c(*/)358 4298 y(if)43
-b(\()g(forward)e(\))i({)489 4398 y(for)f(\()h(point)f(=)h(0;)g(point)e
-(<)i(npoint;)e(point++)g(\))i({)620 4497 y(hi)f(=)h(AST__BAD;)620
-4597 y(for)f(\()h(coord)f(=)h(0;)g(coord)e(<)i(ncoord_in;)d(coord++)g
-(\))k({)750 4697 y(x)f(=)h(ptr_in[)c(coord)i(][)h(point)e(];)750
-4796 y(if)i(\()g(x)g(!=)g(AST__BAD)d(\))k({)881 4896
-y(if)f(\()g(x)g(>)g(hi)g(||)g(hi)g(==)f(AST__BAD)f(\))i(hi)g(=)g(x;)750
-4996 y(})620 5095 y(})620 5195 y(ptr_out[)d(0)j(][)g(point)e(])i(=)h
-(hi;)489 5295 y(})227 5494 y(/*)f(Inverse)e(transformation.)c(*/)358
-5593 y(})43 b(else)f({)489 5693 y(for)g(\()h(coord)f(=)h(0;)g(coord)e
-(<)i(ncoord_out;)c(coord++)i(\))i({)p eop end
-%%Page: 176 186
-TeXDict begin 176 185 bop 0 52 a FF(176)772 b Fy(20)92
-b(CREA)-8 b(TING)30 b(YOUR)h(O)m(WN)g(PRIV)-10 b(A)i(TE)30
-b(MAPPINGS)g(\(INTRAMAPS\))620 351 y Ft(for)42 b(\()h(point)f(=)h(0;)g
-(point)e(<)i(npoint;)e(point++)g(\))i({)750 451 y(ptr_out[)e(coord)g
-(][)i(point)e(])j(=)f(ptr_in[)d(0)k(][)e(point)g(];)620
-551 y(})489 650 y(})358 750 y(})227 849 y(})0 1090 y
-FF(This)d(function)g(tak)m(es)h(an)m(y)g(n)m(um)m(b)s(er)e(of)i(input)e
-(co)s(ordinates)i(and)f(returns)f(a)i(single)g(output)f(co)s(ordinate)0
-1202 y(whic)m(h)30 b(is)g(the)h(maxim)m(um)f(v)-5 b(alue)30
-b(of)h(the)f(input)f(co)s(ordinates.)42 b(Its)30 b(in)m(v)m(erse)h
-(\(actually)h(a)f(\\pseudo-in)m(v)m(erse"\))0 1315 y(sets)g(all)g(the)g
-(input)e(co)s(ordinates)i(to)g(the)g(v)-5 b(alue)31 b(of)f(the)h
-(output)f(co)s(ordinate.)2688 1282 y Fv(31)0 1473 y FF(If)e(this)h
-(function)f(is)h(applied)f(in)h(the)f(forw)m(ard)h(direction)g(and)f
-(then)g(in)h(the)g(in)m(v)m(erse)g(direction,)h(it)f(do)s(es)g
-FD(not)0 1585 y FF(in)38 b(general)h(restore)f(the)h(original)g(co)s
-(ordinate)g(v)-5 b(alues.)64 b(Ho)m(w)m(ev)m(er,)42 b(if)c(applied)g
-(in)g(the)g(in)m(v)m(erse)h(direction)0 1698 y(and)d(then)g(the)h(forw)
-m(ard)f(direction,)j(it)e(do)s(es.)59 b(Hence,)40 b(replacing)d(the)g
-(sequence)g(of)f(op)s(erations)h(with)g(an)0 1811 y(equiv)-5
-b(alen)m(t)32 b(UnitMap)f(is)f(p)s(ossible)g(in)g(the)h(latter)g(case,)
-h(but)e(not)g(in)g(the)h(former.)0 1968 y(T)-8 b(o)22
-b(distinguish)e(these)i(p)s(ossibilities,)i(t)m(w)m(o)e(\015ag)g(v)-5
-b(alues)21 b(are)h(pro)m(vided)f(for)g(use)g(with)g(astIn)m(traReg)h
-(to)g(indicate)0 2081 y(what)45 b(simpli\014cation)h(\(if)g(an)m(y\))g
-(is)f(p)s(ossible.)86 b(F)-8 b(or)46 b(example,)k(to)c(register)g(the)g
-(ab)s(o)m(v)m(e)g(transformation)0 2194 y(function,)30
-b(w)m(e)h(migh)m(t)g(use:)227 2421 y Ft(void)42 b(MaxTran\()e
-(AstMapping)g(*,)j(int,)f(int,)g(const)f(double)g(*[],)h(int,)g(int,)g
-(double)f(*[])h(\);)227 2620 y(...)227 2820 y(astIntraReg\()d
-("MaxTran",)g(AST__ANY,)h(1,)j(MaxTran,)d(AST__SIMPIF,)794
-2919 y(purpose,)g(author,)h(contact)g(\);)0 3159 y FF(Here,)30
-b(the)f(\015ag)g(v)-5 b(alue)30 b(AST)p Fq(__)p FF(SIMPIF)d(supplied)g
-(for)i(the)g(\014fth)f(argumen)m(t)h(indicates)h(that)g
-(simpli\014cation)0 3272 y(is)44 b(p)s(ossible)g(if)h(the)f
-(transformation)h(is)g(applied)f(in)g(the)h(in)m(v)m(erse)g(direction)g
-(follo)m(w)m(ed)h(b)m(y)e(the)h(forw)m(ard)0 3385 y(direction.)f(T)-8
-b(o)32 b(indicate)g(the)g(complemen)m(tary)g(case,)h(the)e(\015ag)h
-(AST)p Fq(__)p FF(SIMPFI)e(w)m(ould)h(b)s(e)f(used)h(instead.)0
-3498 y(If)h(b)s(oth)g(simpli\014cations)h(are)f(p)s(ossible)g(\(as)h
-(with)f(the)h(SqrT)-8 b(ran)31 b(function)h(in)g Fu(x)p
-FF(20.4\),)k(then)c(w)m(e)h(w)m(ould)f(use)0 3611 y(the)f(bit)m(wise)g
-(OR)f(of)g(b)s(oth)g(v)-5 b(alues.)0 3768 y(In)27 b(practice,)j(some)f
-(judgemen)m(t)f(is)g(usually)g(necessary)g(when)f(deciding)i(whether)e
-(to)i(allo)m(w)g(simpli\014cation.)0 3881 y(F)-8 b(or)26
-b(example,)h(seen)f(in)f(one)h(ligh)m(t)g(our)f(SqrT)-8
-b(ran)24 b(function)h(\()p Fu(x)p FF(20.4\))k(do)s(es)c(not)g(cancel)i
-(with)e(its)h(o)m(wn)f(in)m(v)m(erse,)0 3994 y(b)s(ecause)39
-b(squaring)g(a)h(co)s(ordinate)g(v)-5 b(alue)40 b(and)e(then)h(taking)i
-(its)e(square)g(ro)s(ot)h(can)f(c)m(hange)i(the)e(original)0
-4107 y(v)-5 b(alue,)36 b(if)d(this)h(w)m(as)h(negativ)m(e.)53
-b(Therefore,)35 b(replacing)g(this)e(com)m(bination)j(with)d(a)i
-(UnitMap)f(will)g(c)m(hange)0 4220 y(the)45 b(b)s(eha)m(viour)g(of)g(a)
-g(comp)s(ound)f(Mapping)g(and)h(should)f(not)h(b)s(e)f(allo)m(w)m(ed.)
-87 b(Seen)44 b(in)h(another)g(ligh)m(t,)0 4333 y(ho)m(w)m(ev)m(er,)33
-b(where)e(the)h(co)s(ordinates)g(b)s(eing)f(pro)s(cessed)g(are)g(in)m
-(trinsically)i(all)f(p)s(ositiv)m(e,)h(it)f(is)g(a)f(p)s(ermissible)0
-4446 y(and)f(probably)f(useful)h(simpli\014cation.)0
-4603 y(If)21 b(suc)m(h)h(distinctions)g(are)h(ev)m(er)f(imp)s(ortan)m
-(t)g(in)g(practice,)j(it)e(is)f(simple)f(to)i(register)g(the)f(same)g
-(transformation)0 4716 y(function)30 b(t)m(wice)i(with)e(di\013eren)m
-(t)g(\015ag)h(v)-5 b(alues)31 b(\(use)f(a)h(separate)g(name)f(for)g
-(eac)m(h\))i(and)e(then)g(use)g(whic)m(hev)m(er)0 4829
-y(is)g(appropriate)h(when)e(creating)j(an)e(In)m(traMap.)0
-5114 y Fw(20.11)112 b(W)-9 b(riting)37 b(and)h(Reading)h(In)m(traMaps)0
-5330 y FF(It)i(is)h(most)f(imp)s(ortan)m(t)g(to)h(realise)h(that)f
-(when)e(y)m(ou)h(write)h(an)f(In)m(traMap)g(to)h(a)g(Channel)e(\()p
-Fu(x)p FF(15.3\),)47 b(the)0 5443 y(transformation)31
-b(function)f(whic)m(h)h(it)g(uses)f(is)h(not)g(stored)g(with)f(it.)43
-b(T)-8 b(o)31 b(do)f(so)h(is)g(imp)s(ossible,)g(b)s(ecause)f(the)p
-0 5516 1512 4 v 73 5570 a Fs(31)138 5602 y Fr(Remem)n(b)r(er)18
-b(that)h(\\ptr)p Ff(_)p Fr(in")g(iden)n(ti\014es)f(the)g(original)i
-(\\output")f(co)r(ordinates)h(when)e(applying)g(the)g(in)n(v)n(erse)h
-(transformation)0 5693 y(and)25 b(\\ptr)p Ff(_)p Fr(out")h(iden)n
-(ti\014es)g(the)f(original)j(\\input")d(co)r(ordinates.)p
-eop end
-%%Page: 177 187
-TeXDict begin 177 186 bop 0 52 a Fy(20.12)93 b(Managing)32
-b(T)-8 b(ransformation)30 b(F)-8 b(unctions)31 b(in)f(Libraries)1408
-b FF(177)0 351 y(function)28 b(has)f(b)s(een)h(compiled)g(and)f(loaded)
-i(in)m(to)g(memory)f(ready)f(for)h(execution)h(b)s(efore)f(AST)f(gets)i
-(to)g(see)0 464 y(it.)41 b(Ho)m(w)m(ev)m(er,)32 b(AST)d(do)s(es)g
-(store)h(the)g(name)f(asso)s(ciated)i(with)f(the)f(transformation)h
-(function)g(and)e(v)-5 b(arious)0 577 y(details)31 b(ab)s(out)f(the)h
-(In)m(traMap)g(itself.)0 743 y(This)i(means)h(that)h(an)m(y)f(program)g
-(attempting)h(to)g(read)f(the)g(In)m(traMap)h(\()p Fu(x)p
-FF(15.4\))h(cannot)f(mak)m(e)g(use)f(of)g(it)0 856 y(unless)27
-b(it)h(also)g(has)f(indep)s(enden)m(t)f(access)j(to)f(the)f(original)i
-(transformation)e(function.)40 b(If)27 b(it)h(do)s(es)f(not)g(ha)m(v)m
-(e)0 969 y(access)40 b(to)g(this)f(function,)i(an)d(error)h(will)g(o)s
-(ccur)g(at)g(the)h(p)s(oin)m(t)e(where)h(the)g(In)m(traMap)g(is)g(read)
-g(and)f(the)0 1081 y(asso)s(ciated)g(error)f(message)h(will)f(direct)g
-(the)g(user)f(to)i(the)f(author)f(of)h(the)g(transformation)g(function)
-g(for)0 1194 y(more)31 b(information.)0 1360 y(Ho)m(w)m(ev)m(er,)39
-b(if)d(the)g(necessary)g(transformation)g(function)g(is)g(a)m(v)-5
-b(ailable,)40 b(and)35 b(has)g(b)s(een)g(registered)i(b)s(efore)0
-1473 y(the)30 b(read)g(op)s(eration)h(tak)m(es)h(place,)f(then)f(AST)f
-(is)i(able)f(to)h(re-create)h(the)f(original)g(In)m(traMap)g(and)e
-(will)i(do)0 1586 y(so.)63 b(Registration)40 b(of)e(the)g
-(transformation)g(function)g(m)m(ust,)h(of)f(course,)i(use)e(the)g
-(same)g(name)g(\(and,)i(in)0 1699 y(fact,)29 b(b)s(e)d(iden)m(tical)j
-(in)d(most)h(particulars\))h(as)f(w)m(as)g(used)f(in)h(the)g(original)h
-(program)f(whic)m(h)f(wrote)h(the)h(data.)0 1865 y(This)i(means)h(that)
-h(a)g(set)g(of)f(co-op)s(erating)i(programs)e(whic)m(h)f(all)j(ha)m(v)m
-(e)f(access)g(to)g(the)g(same)f(set)h(of)f(trans-)0 1977
-y(formation)i(functions)f(and)g(register)i(them)e(in)g(iden)m(tical)j
-(fashion)d(\(see)i Fu(x)p FF(20.12)h(for)d(ho)m(w)h(this)f(can)h(b)s
-(est)f(b)s(e)0 2090 y(ac)m(hiev)m(ed\))j(can)e(freely)g(exc)m(hange)i
-(data)e(that)h(con)m(tain)g(In)m(traMaps.)49 b(The)32
-b(need)h(to)g(a)m(v)m(oid)i(exp)s(orting)e(suc)m(h)0
-2203 y(data)e(to)g(unsusp)s(ecting)e(third)h(parties)g(\()p
-Fu(x)p FF(20.3\))j(m)m(ust,)e(ho)m(w)m(ev)m(er,)h(b)s(e)e(re-iterated.)
-0 2506 y Fw(20.12)112 b(Managing)40 b(T)-9 b(ransformation)38
-b(F)-9 b(unctions)38 b(in)g(Libraries)0 2732 y FF(If)j(y)m(ou)i(are)f
-(dev)m(eloping)h(a)f(large)h(suite)f(of)g(data)h(reduction)f(soft)m(w)m
-(are,)k(y)m(ou)d(ma)m(y)f(ha)m(v)m(e)h(a)f(need)g(to)h(use)0
-2845 y(In)m(traMaps)27 b(at)f(v)-5 b(arious)27 b(p)s(oin)m(ts)f(within)
-f(it.)40 b(V)-8 b(ery)27 b(probably)f(this)g(will)g(o)s(ccur)g(in)g
-(unrelated)g(mo)s(dules)g(whic)m(h)0 2958 y(are)e(compiled)g
-(separately)h(and)e(then)g(stored)h(in)f(a)h(library)-8
-b(.)39 b(Since)23 b(the)h(transformation)g(functions)f(required)0
-3071 y(m)m(ust)34 b(b)s(e)g(registered)h(b)s(efore)f(they)g(can)h(b)s
-(e)e(used,)i(this)f(mak)m(es)h(it)g(di\016cult)f(to)h(decide)g(where)f
-(to)h(p)s(erform)0 3184 y(this)g(registration,)i(esp)s(ecially)g(since)
-e(an)m(y)g(particular)g(data)h(reduction)e(program)h(ma)m(y)g(use)g(an)
-g(arbitrary)0 3297 y(subset)30 b(of)g(the)h(mo)s(dules)e(in)i(y)m(our)f
-(library)-8 b(.)0 3462 y(T)g(o)32 b(assist)g(with)f(this)g(problem,)g
-(AST)f(allo)m(ws)j(y)m(ou)f(to)g(p)s(erform)d(the)j(same)g
-(registration)g(of)g(a)f(transforma-)0 3575 y(tion)36
-b(function)f(an)m(y)h(n)m(um)m(b)s(er)e(of)h(times,)j(so)e(long)g(as)f
-(it)h(is)g(p)s(erformed)d(using)i(an)h(iden)m(tical)h(in)m(v)m(o)s
-(cation)g(of)0 3688 y(astIn)m(traReg)f(on)d(eac)m(h)i(o)s(ccasion)h(\()
-p Fx(i.e.)d FF(all)i(of)f(its)g(argumen)m(ts)h(m)m(ust)f(b)s(e)f(iden)m
-(tical\).)53 b(This)33 b(means)h(y)m(ou)h(do)0 3801 y(not)e(ha)m(v)m(e)
-h(to)g(k)m(eep)f(trac)m(k)h(of)f(whether)f(a)i(particular)f(function)f
-(has)h(already)g(b)s(een)f(registered)i(but)e(could,)0
-3914 y(in)i(fact,)j(register)f(it)f(on)f(eac)m(h)i(o)s(ccasion)g
-(immediately)g(b)s(efore)e(it)h(is)f(required)g(\(wherev)m(er)h(that)g
-(ma)m(y)g(b)s(e\).)0 4027 y(In)26 b(order)h(that)h(all)g(registrations)
-g(are)g(iden)m(tical,)i(ho)m(w)m(ev)m(er,)f(it)f(is)f(recommended)g
-(that)g(y)m(ou)h(group)e(them)i(all)0 4140 y(together)k(in)m(to)f(a)g
-(single)g(function,)f(p)s(erhaps)f(as)i(follo)m(ws:)227
-4398 y Ft(void)42 b(MyTrans\()e(void)i(\))i({)358 4597
-y(...)358 4796 y(astIntraReg\()39 b("MaxTran",)g(AST__ANY,)h(1,)j
-(MaxTran,)d(AST__SIMPIF,)925 4896 y(purpose,)g(author,)h(contact)f(\);)
-358 5095 y(...)358 5295 y(astIntraReg\()f("Poly3Tran",)f(1,)43
-b(1,)g(Poly3Tran,)c(AST__NOINV,)925 5394 y(purpose,)h(author,)h
-(contact)f(\);)358 5593 y(...)p eop end
-%%Page: 178 188
-TeXDict begin 178 187 bop 0 52 a FF(178)772 b Fy(20)92
-b(CREA)-8 b(TING)30 b(YOUR)h(O)m(WN)g(PRIV)-10 b(A)i(TE)30
-b(MAPPINGS)g(\(INTRAMAPS\))358 351 y Ft(astIntraReg\()39
-b("SqrTran",)g(2,)k(2,)g(SqrTran,)d(0,)925 451 y(purpose,)g(author,)h
-(contact)f(\);)227 551 y(})0 813 y FF(Y)-8 b(ou)22 b(can)f(then)g
-(simply)g(in)m(v)m(ok)m(e)i(this)e(function)g(wherev)m(er)g(necessary)
--8 b(.)39 b(It)21 b(is,)i(in)e(fact,)k(particularly)c(imp)s(ortan)m(t)0
-926 y(to)j(register)g(all)g(relev)-5 b(an)m(t)24 b(transformation)g
-(functions)f(in)g(this)g(w)m(a)m(y)h(b)s(efore)f(y)m(ou)g(attempt)h(to)
-g(read)f(an)g(Ob)5 b(ject)0 1039 y(that)28 b(migh)m(t)g(b)s(e)f(\(or)h
-(con)m(tain\))h(an)e(In)m(traMap)h(\()p Fu(x)p FF(20.11\).)43
-b(This)26 b(is)i(b)s(ecause)f(y)m(ou)h(ma)m(y)g(not)f(kno)m(w)h(in)f
-(adv)-5 b(ance)0 1152 y(whic)m(h)31 b(of)g(these)h(transformation)g
-(functions)e(the)i(In)m(traMap)f(will)h(use,)f(so)h(they)f(m)m(ust)g
-(all)i(b)s(e)d(a)m(v)-5 b(ailable)34 b(in)0 1265 y(order)c(to)h(a)m(v)m
-(oid)h(an)e(error.)p eop end
-%%Page: 179 189
-TeXDict begin 179 188 bop 3643 52 a FF(179)0 351 y Fz(21)135
-b(Pro)t(ducing)44 b(Graphical)h(Output)g(\(Plots\))0
-605 y FF(Graphical)29 b(output)f(from)g(AST)f(is)i(p)s(erformed)d
-(though)i(an)g(Ob)5 b(ject)29 b(called)g(a)g(Plot,)h(whic)m(h)e(is)g(a)
-h(sp)s(ecialised)0 718 y(form)e(of)h(F)-8 b(rameSet.)41
-b(A)28 b(Plot)h(do)s(es)e(not)h(represen)m(t)g(the)g(graphical)g(con)m
-(ten)m(t)i(itself,)f(but)e(is)h(a)g(route)g(through)0
-831 y(whic)m(h)22 b(plotting)i(op)s(erations,)h(suc)m(h)d(as)h(dra)m
-(wing)f(lines)h(and)f(curv)m(es,)j(are)e(con)m(v)m(ey)m(ed)h(on)f(to)g
-(a)g(plotting)h(surface)0 944 y(to)31 b(app)s(ear)f(as)g(visible)h
-(graphics.)0 1239 y Fw(21.1)112 b(The)38 b(Plot)f(Mo)s(del)0
-1462 y FF(When)20 b(a)h(Plot)h(is)f(created,)j(it)d(is)g(initialised)g
-(b)m(y)g(pro)m(viding)g(a)g(F)-8 b(rameSet)21 b(whose)g(base)g(F)-8
-b(rame)21 b(\(as)h(sp)s(eci\014ed)e(b)m(y)0 1575 y(its)30
-b(Base)g(attribute\))g(is)g(mapp)s(ed)e(linearly)i(or)f
-(logarithmically)j(\(as)e(sp)s(eci\014ed)e(b)m(y)h(the)h(LogPlot)h
-(attribues\))0 1688 y(on)41 b(to)i(a)f Fx(plotting)i(ar)-5
-b(e)g(a.)75 b FF(This)41 b(is)g(a)h(rectangular)h(region)f(in)f(the)h
-(graphical)g(co)s(ordinate)h(space)f(of)f(the)0 1801
-y(underlying)35 b(graphics)i(system)g(and)e(b)s(ecomes)i(the)g(new)f
-(base)h(F)-8 b(rame)37 b(of)g(the)f(Plot.)60 b(In)36
-b(e\013ect,)k(the)d(Plot)0 1913 y(b)s(ecomes)32 b(attac)m(hed)h(to)g
-(the)f(plotting)h(surface,)f(in)f(rather)h(the)g(same)g(w)m(a)m(y)g
-(that)h(a)f(basic)g(F)-8 b(rameSet)33 b(migh)m(t)0 2026
-y(b)s(e)d(attac)m(hed)i(to)f(\(sa)m(y\))h(an)e(image.)0
-2190 y(The)23 b(curren)m(t)g(F)-8 b(rame)25 b(of)e(the)h(Plot)g
-(\(deriv)m(ed)g(from)f(the)h(curren)m(t)f(F)-8 b(rame)24
-b(of)g(the)g(F)-8 b(rameSet)24 b(supplied\))f(is)g(used)0
-2303 y(to)35 b(represen)m(t)f(a)h Fx(physic)-5 b(al)37
-b(c)-5 b(o)g(or)g(dinate)39 b(system.)53 b FF(This)33
-b(is)h(the)h(system)f(in)g(whic)m(h)f(plotting)j(op)s(erations)e(are)0
-2416 y(p)s(erformed)24 b(b)m(y)h(y)m(our)g(program.)39
-b(Ev)m(ery)25 b(plotting)h(op)s(eration)g(is)f(then)g(transformed)g
-(through)f(the)i(Mapping)0 2529 y(whic)m(h)e(in)m(ter-relates)i(the)e
-(Plot's)h(curren)m(t)f(and)g(base)g(F)-8 b(rames)25 b(in)f(order)f(to)i
-(app)s(ear)f(on)g(the)g(plotting)h(surface.)0 2692 y(An)39
-b(example)h(ma)m(y)g(help)f(here.)68 b(Supp)s(ose)37
-b(w)m(e)j(start)g(with)f(a)h(F)-8 b(rameSet)40 b(whose)f(base)h(F)-8
-b(rame)40 b(describ)s(es)0 2805 y(the)f(pixel)h(co)s(ordinates)f(of)h
-(an)e(image)j(and)d(whose)h(curren)m(t)g(F)-8 b(rame)40
-b(describ)s(es)e(a)i(celestial)h(\(equatorial\))0 2918
-y(co)s(ordinate)30 b(system.)40 b(Let)29 b(us)f(assume)h(that)g(these)h
-(t)m(w)m(o)g(F)-8 b(rames)29 b(are)h(in)m(ter-related)g(b)m(y)f(a)g
-(Mapping)g(within)0 3031 y(the)i(F)-8 b(rameSet)31 b(whic)m(h)f
-(represen)m(ts)h(a)f(particular)h(sky)f(pro)5 b(jection.)0
-3194 y(When)41 b(a)g(Plot)h(is)e(created)i(from)f(this)g(F)-8
-b(rameSet,)44 b(w)m(e)e(sp)s(ecify)e(ho)m(w)h(the)g(pixel)g(co)s
-(ordinates)h(\(the)f(base)0 3307 y(F)-8 b(rame\))34 b(maps)e(on)h(to)g
-(the)g(plotting)h(surface.)48 b(This)32 b(simply)g(corresp)s(onds)g(to)
-h(telling)h(the)f(Plot)h(where)e(w)m(e)0 3420 y(ha)m(v)m(e)f
-(previously)e(plotted)h(the)f(image)i(data.)41 b(If)29
-b(w)m(e)g(no)m(w)h(use)f(the)g(Plot)h(to)g(plot)g(a)g(line)f(with)g
-(latitude)i(zero)0 3533 y(in)j(our)g(ph)m(ysical)h(co)s(ordinate)g
-(system,)g(as)g(giv)m(en)g(b)m(y)f(the)h(curren)m(t)f(F)-8
-b(rame,)36 b(this)e(line)h(w)m(ould)f(app)s(ear)g(as)g(a)0
-3646 y(curv)m(e)d(\(the)g(equator\))g(on)f(the)h(plotting)g(surface,)g
-(correctly)h(registered)f(with)f(the)g(image.)0 3809
-y(There)35 b(are)i(a)f(n)m(um)m(b)s(er)e(of)i(plotting)h(functions)e
-(pro)m(vided,)j(whic)m(h)d(all)i(w)m(ork)f(in)f(a)h(similar)h(w)m(a)m
-(y)-8 b(.)58 b(Plotting)0 3922 y(op)s(erations)31 b(are)g(transformed)f
-(through)g(the)h(Mapping)f(whic)m(h)h(the)g(Plot)g(represen)m(ts)g(b)s
-(efore)f(they)h(app)s(ear)0 4035 y(on)k(the)f(plotting)i(surface.)940
-4002 y Fv(32)1068 4035 y FF(It)f(is)g(p)s(ossible)f(to)h(dra)m(w)g(sym)
-m(b)s(ols,)g(lines,)h(axes,)h(en)m(tire)f(grids)e(and)g(more)h(in)0
-4148 y(this)30 b(w)m(a)m(y)-8 b(.)0 4443 y Fw(21.2)112
-b(Plotting)37 b(Sym)m(b)s(ols)0 4666 y FF(The)c(simplest)h(form)g(of)f
-(plotting)i(is)f(to)h(dra)m(w)e(sym)m(b)s(ols)g(\(termed)h
-Fx(markers)p FF(\))i(at)e(a)g(set)h(of)f(p)s(oin)m(ts.)50
-b(This)33 b(is)0 4779 y(p)s(erformed)h(b)m(y)h(astMark,)j(whic)m(h)e
-(is)f(supplied)f(with)i(a)g(set)g(of)f(ph)m(ysical)i(co)s(ordinates)f
-(at)g(whic)m(h)f(to)i(place)0 4892 y(the)31 b(mark)m(ers:)227
-5143 y Ft(#include)41 b("ast.h")227 5243 y(#define)g(NCOORD)g(2)227
-5342 y(#define)g(NMARK)g(10)227 5442 y(double)g(in[)i(NCOORD)e(][)i
-(NMARK)e(];)p 0 5516 1512 4 v 73 5570 a Fs(32)138 5602
-y Fr(Lik)n(e)28 b(an)n(y)g(F)-6 b(rameSet,)29 b(a)g(Plot)g(can)f(b)r(e)
-h(used)f(as)g(a)h(Mapping.)43 b(In)28 b(this)g(case)h(it)g(is)f(the)g
-(in)n(v)n(erse)h(transformation)h(whic)n(h)e(is)0 5693
-y(used)d(when)h(plotting)g(\()p Fg(i.e.)e Fr(that)i(whic)n(h)f
-(transforms)j(b)r(et)n(w)n(een)d(the)g(curren)n(t)g(and)h(base)g(F)-6
-b(rames\).)p eop end
-%%Page: 180 190
-TeXDict begin 180 189 bop 0 52 a FF(180)1463 b Fy(21)92
-b(PR)m(ODUCING)30 b(GRAPHICAL)h(OUTPUT)e(\(PLOTS\))227
-351 y Ft(int)43 b(type;)227 551 y(...)227 750 y(astMark\()e(plot,)g
-(NMARK,)g(NCOORD,)g(NMARK,)g(in,)h(type)g(\);)0 1008
-y FF(Here,)g(NMARK)d(sp)s(eci\014es)g(ho)m(w)f(man)m(y)h(mark)m(ers)g
-(to)h(plot)g(and)e(NCOORD)g(sp)s(eci\014es)h(ho)m(w)g(man)m(y)g(co)s
-(or-)0 1121 y(dinates)f(are)f(b)s(eing)g(supplied)f(for)h(eac)m(h)h(p)s
-(oin)m(t.)1686 1088 y Fv(33)1823 1121 y FF(The)e(arra)m(y)i(\\in")g
-(supplies)e(the)i(co)s(ordinates)g(and)e(the)0 1233 y(in)m(teger)c(\\t)
-m(yp)s(e")f(sp)s(eci\014es)f(whic)m(h)g(t)m(yp)s(e)h(of)f(mark)m(er)h
-(to)g(plot.)0 1525 y Fw(21.3)112 b(Plotting)37 b(Geo)s(desic)h(Curv)m
-(es)0 1745 y FF(There)25 b(is)g(no)g(Plot)h(routine)f(to)h(dra)m(w)f(a)
-g(straigh)m(t)i(line,)g(b)s(ecause)e(an)m(y)g(straigh)m(t)i(line)e(in)g
-(ph)m(ysical)h(co)s(ordinates)0 1858 y(can)38 b(p)s(oten)m(tially)h
-(turn)d(in)m(to)i(a)g(curv)m(e)f(in)h(graphical)g(co)s(ordinates.)62
-b(W)-8 b(e)38 b(therefore)g(start)g(b)m(y)f(considering)0
-1971 y(ho)m(w)24 b(to)h(dra)m(w)f(geo)s(desic)h(curv)m(es.)39
-b(These)24 b(are)g(curv)m(es)h(whic)m(h)f(trace)h(the)f(path)g(of)h
-(shortest)f(distance)h(b)s(et)m(w)m(een)0 2084 y(t)m(w)m(o)32
-b(p)s(oin)m(ts)e(in)g(ph)m(ysical)h(co)s(ordinates)g(and)f(are)h(the)f
-(basic)h(dra)m(wing)f(elemen)m(t)i(in)e(a)h(Plot.)0 2246
-y(In)h(man)m(y)h(instances,)h(the)f(geo)s(desic)h(will,)g(in)e(fact,)i
-(b)s(e)f(a)g(straigh)m(t)h(line,)f(but)g(this)f(dep)s(ends)f(on)i(the)f
-(Plot's)0 2359 y(curren)m(t)i(F)-8 b(rame.)55 b(If)34
-b(this)h(represen)m(ts)g(a)g(celestial)i(co)s(ordinate)e(system,)i(for)
-d(instance,)j(it)e(will)g(b)s(e)f(a)h(great)0 2472 y(circle)i
-(\(corresp)s(onding)e(with)g(the)h(b)s(eha)m(viour)f(of)h(the)g
-(astDistance)i(function)d(whic)m(h)g(de\014nes)g(the)h(metric)0
-2585 y(of)i(the)g(ph)m(ysical)h(co)s(ordinate)f(space\).)64
-b(The)38 b(geo)s(desic)h(will,)h(of)e(course,)i(b)s(e)e(transformed)f
-(in)m(to)h(graphics)0 2697 y(co)s(ordinates)31 b(b)s(efore)f(b)s(eing)g
-(plotted.)41 b(A)31 b(geo)s(desic)h(curv)m(e)e(is)h(plotted)g(using)f
-(astCurv)m(e)g(as)h(follo)m(ws:)227 2942 y Ft(double)41
-b(start[)g(NCOORD)h(],)g(finish[)f(NCOORD)g(];)227 3141
-y(...)227 3341 y(astCurve\()f(plot,)i(start,)f(finish)g(\);)0
-3598 y FF(Here,)g(\\start")e(and)f(\\\014nish")g(are)g(arra)m(ys)h(con)
-m(taining)g(the)g(starting)g(and)e(\014nishing)g(co)s(ordinates)i(of)f
-(the)0 3711 y(curv)m(e.)i(The)28 b(astO\013set)h(and)f(astDistance)i
-(functions)e(can)h(often)f(b)s(e)g(useful)f(for)h(computing)h(these)g
-(\()p Fu(x)p FF(7.11\).)0 3873 y(If)34 b(y)m(ou)h(need)f(to)h(dra)m(w)f
-(a)g(series)h(of)g(curv)m(es)f(end-to-end)h(\(when)e(dra)m(wing)h(a)h
-(con)m(tour)g(line,)h(for)e(example\),)0 3986 y(then)23
-b(a)h(more)g(e\016cien)m(t)h(alternativ)m(e)h(is)e(to)g(use)g(astP)m
-(olyCurv)m(e.)39 b(This)23 b(has)g(the)h(same)g(e\013ect)h(as)f(a)g
-(sequence)g(of)0 4099 y(in)m(v)m(o)s(cations)g(of)e(astCurv)m(e,)j(but)
-c(allo)m(ws)i(y)m(ou)g(to)g(supply)d(a)j(whole)f(set)h(of)f(p)s(oin)m
-(ts)g(at)h(one)g(time.)38 b(astP)m(olyCurv)m(e)0 4212
-y(then)30 b(joins)g(them,)h(in)f(sequence,)h(using)f(geo)s(desic)h
-(curv)m(es:)227 4456 y Ft(#define)41 b(NPOINT)g(100)227
-4556 y(double)g(coords[)g(NCOORD)g(][)i(NPOINT)e(];)227
-4755 y(...)227 4954 y(astPolyCurve\()d(plot,)k(NPOINT,)f(NCOORD,)f
-(NPOINT,)h(coords)g(\);)0 5212 y FF(Here,)35 b(NPOINT)e(sp)s(eci\014es)
-g(ho)m(w)h(man)m(y)g(p)s(oin)m(ts)f(are)h(to)g(b)s(e)f(joined)h(and)e
-(NCOORD)i(sp)s(eci\014es)f(ho)m(w)g(man)m(y)0 5325 y(co)s(ordinates)i
-(are)h(b)s(eing)e(supplied)f(for)i(eac)m(h)h(p)s(oin)m(t.)53
-b(The)35 b(arra)m(y)g(\\co)s(ords")g(supplies)f(the)h(co)s(ordinates)g
-(of)0 5438 y(the)c(p)s(oin)m(ts)f(in)g(the)g(Plot's)i(ph)m(ysical)f(co)
-s(ordinate)g(system.)p 0 5516 1512 4 v 73 5570 a Fs(33)138
-5602 y Fr(Remem)n(b)r(er,)c(the)f(ph)n(ysical)h(co)r(ordinate)g(space)g
-(need)f(not)h(necessarily)h(b)r(e)e(2-dimensional,)i(ev)n(en)e(if)h
-(the)f(plotting)h(surface)0 5693 y(is.)p eop end
-%%Page: 181 191
-TeXDict begin 181 190 bop 0 52 a Fy(21.4)93 b(Plotting)31
-b(Curv)m(es)f(P)m(arallel)i(to)g(Axes)2096 b FF(181)0
-351 y Fw(21.4)112 b(Plotting)37 b(Curv)m(es)h(P)m(arallel)g(to)f(Axes)0
-578 y FF(As)31 b(there)g(is)h(no)f(Plot)h(function)f(to)g(dra)m(w)g(a)h
-(\\straigh)m(t)h(line",)f(dra)m(wing)f(axes)h(and)e(grid)h(lines)h(to)f
-(represen)m(t)0 691 y(co)s(ordinate)g(systems)g(requires)f(a)h(sligh)m
-(tly)g(di\013eren)m(t)g(approac)m(h.)42 b(The)30 b(problem)f(is)i(that)
-g(for)f(some)h(co)s(ordi-)0 804 y(nate)24 b(systems,)h(these)f(grid)f
-(lines)h(will)g(not)g(b)s(e)e(geo)s(desics,)27 b(so)c(astCurv)m(e)h
-(and)f(astP)m(olyCurv)m(e)i(\()p Fu(x)p FF(21.3\))h(cannot)0
-917 y(easily)33 b(b)s(e)e(used)g(\(y)m(ou)h(w)m(ould)g(ha)m(v)m(e)h(to)
-f(resort)g(to)h(appro)m(ximating)f(grid)g(lines)g(b)m(y)f(man)m(y)h
-(small)h(elemen)m(ts\).)0 1030 y(Lines)26 b(of)h(constan)m(t)h
-(celestial)h(latitude)f(pro)m(vide)f(an)f(example)i(of)f(this,)g(with)f
-(the)h(exception)h(of)f(the)g(equator)0 1143 y(whic)m(h)j(is)h(a)f(geo)
-s(desic.)0 1309 y(The)g(astGridLine)h(function)f(allo)m(ws)h(these)g
-(curv)m(es)g(to)g(b)s(e)f(dra)m(wn,)f(as)i(follo)m(ws:)227
-1569 y Ft(int)43 b(axis;)227 1668 y(double)e(length;)227
-1867 y(...)227 2067 y(astGridLine\()e(plot,)i(axis,)h(start,)f(length)g
-(\);)0 2340 y FF(Here,)36 b(\\axis")f(sp)s(eci\014es)e(whic)m(h)h(ph)m
-(ysical)h(co)s(ordinate)f(axis)h(w)m(e)f(wish)f(to)i(dra)m(w)e
-(parallel)i(to.)53 b(The)33 b(\\start")0 2453 y(arra)m(y)j(con)m(tains)
-h(the)e(co)s(ordinates)h(of)g(the)f(start)h(of)g(the)g(curv)m(e)f(and)g
-(\\length")i(sp)s(eci\014es)e(the)h(distance)g(to)0 2566
-y(dra)m(w)30 b(along)h(the)g(axis)g(in)f(ph)m(ysical)h(co)s(ordinate)g
-(space.)0 2871 y Fw(21.5)112 b(Plotting)37 b(Generalized)i(Curv)m(es)0
-3098 y FF(W)-8 b(e)29 b(ha)m(v)m(e)h(seen)e(ho)m(w)h(geo)s(desic)g
-(curv)m(es)g(and)e(grid)h(lines)h(can)f(b)s(e)g(dra)m(wn.)39
-b(The)28 b(Plot)h(class)g(includes)f(another)0 3210 y(metho)s(d,)44
-b(astGenCurv)m(e,)h(whic)m(h)d(allo)m(ws)h(curv)m(es)f(of)f
-Fx(any)i FF(form)e(to)h(b)s(e)f(dra)m(wn.)74 b(The)41
-b(caller)i(supplies)e(a)0 3323 y(Mapping)f(whic)m(h)f(maps)h(o\013set)h
-(along)g(the)f(curv)m(e)1788 3290 y Fv(34)1902 3323 y
-FF(in)m(to)h(the)f(corresp)s(onding)f(p)s(osition)h(in)g(the)g(curren)m
-(t)0 3436 y(F)-8 b(rame)44 b(of)f(the)g(Plot.)78 b(astGenCurv)m(e,)47
-b(then)42 b(tak)m(es)j(care)e(of)g(Mapping)g(these)g(p)s(ositions)g(in)
-m(to)g(graphics)0 3549 y(co)s(ordinates.)71 b(The)39
-b(c)m(hoice)j(of)f(exactly)g(whic)m(h)f(p)s(ositions)g(along)h(the)g
-(curv)m(e)f(are)h(to)g(b)s(e)e(used)g(to)i(de\014ne)0
-3662 y(the)30 b(curv)m(e)g(is)g(also)g(made)g(b)m(y)g(astGenCurv)m(e,)h
-(using)e(an)g(adaptiv)m(e)i(algorithm)g(whic)m(h)f(concen)m(trates)i(p)
-s(oin)m(ts)0 3775 y(around)d(areas)i(where)f(the)h(curv)m(e)g(is)f(b)s
-(ending)f(sharply)g(or)i(is)f(discon)m(tin)m(uous)h(in)f(graphics)g(co)
-s(ordinates.)0 3941 y(The)c(In)m(traMap)g(class)h(ma)m(y)f(b)s(e)g(of)g
-(particular)g(use)g(in)g(this)g(con)m(text)i(since)e(it)h(allo)m(ws)g
-(y)m(ou)f(to)h(co)s(de)f(y)m(our)g(o)m(wn)0 4054 y(Mappings)k(to)h(do)g
-(an)m(y)f(transformation)h(y)m(ou)g(c)m(ho)s(ose.)0 4359
-y Fw(21.6)112 b(Clipping)0 4586 y FF(Lik)m(e)24 b(man)m(y)g(graphics)f
-(systems,)i(a)e(Plot)i(allo)m(ws)f(y)m(ou)g(to)g Fx(clip)g
-FF(the)f(graphics)g(y)m(ou)h(pro)s(duce.)37 b(This)23
-b(means)g(that)0 4699 y(plotting)36 b(is)e(restricted)i(to)f(certain)h
-(regions)f(of)g(the)g(plotting)g(surface)g(so)g(that)g(an)m(ything)g
-(dra)m(wn)f(outside)0 4812 y(these)40 b(regions)g(will)g(not)g(app)s
-(ear.)69 b(All)40 b(Plots)h(automatically)h(clip)e(at)h(the)f(edges)g
-(of)g(the)g(plotting)h(area)0 4925 y(sp)s(eci\014ed)36
-b(when)g(the)h(Plot)g(is)g(created.)61 b(This)36 b(means)h(that)g
-(graphics)g(are)g(ultimately)h(restricted)g(to)f(the)0
-5038 y(rectangular)31 b(region)g(of)g(plotting)g(space)g(to)g(whic)m(h)
-f(y)m(ou)h(ha)m(v)m(e)h(attac)m(hed)g(the)e(Plot.)0 5204
-y(In)g(addition)i(to)g(this,)f(y)m(ou)h(ma)m(y)g(also)g(sp)s(ecify)f
-(lo)m(w)m(er)h(and)f(upp)s(er)e(limits)j(on)f(eac)m(h)h(axis)g(at)f
-(whic)m(h)g(clipping)0 5317 y(should)23 b(o)s(ccur.)38
-b(This)23 b(p)s(ermits)g(y)m(ou)h(to)g(further)f(restrict)h(the)g
-(plotting)h(region.)39 b(Moreo)m(v)m(er,)27 b(y)m(ou)d(ma)m(y)h(attac)m
-(h)0 5430 y(these)33 b(clipping)f(limits)h(to)g Fx(any)g
-FF(of)f(the)g(F)-8 b(rames)33 b(in)f(the)h(Plot.)47 b(This)31
-b(allo)m(ws)j(y)m(ou)e(to)h(place)h(restrictions)f(on)p
-0 5516 1512 4 v 73 5570 a Fs(34)138 5602 y Fr(normalized)27
-b(so)f(that)f(the)g(start)g(of)h(the)f(curv)n(e)g(is)h(at)f(o\013set)h
-(0.0)g(and)f(the)g(end)g(of)h(the)f(curv)n(e)g(is)h(at)f(o\013set)h
-(1.0)g(-)f(o\013set)h(need)0 5693 y(not)g(b)r(e)f(linearly)h(related)h
-(to)f(distance.)p eop end
-%%Page: 182 192
-TeXDict begin 182 191 bop 0 52 a FF(182)1463 b Fy(21)92
-b(PR)m(ODUCING)30 b(GRAPHICAL)h(OUTPUT)e(\(PLOTS\))0
-351 y FF(where)e(plotting)h(will)g(tak)m(e)h(place)f(in)f(either)h(the)
-f(ph)m(ysical)h(co)s(ordinate)h(system,)f(the)f(graphical)i(co)s
-(ordinate)0 464 y(system,)i(or)f(in)g(an)m(y)h(other)g(co)s(ordinate)g
-(system)f(whic)m(h)g(is)h(describ)s(ed)e(b)m(y)h(a)h(F)-8
-b(rame)31 b(within)f(the)h(Plot.)0 625 y(F)-8 b(or)33
-b(example,)h(y)m(ou)f(could)g(plot)g(using)f(equatorial)i(co)s
-(ordinates)f(and)f(set)h(up)f(clipping)g(limits)h(in)f(galactic)0
-737 y(co)s(ordinates.)48 b(In)31 b(general,)j(y)m(ou)f(could)g(set)g
-(up)e(arbitrary)h(clipping)h(regions)f(b)m(y)h(adding)f(a)g(new)g(F)-8
-b(rame)34 b(to)0 850 y(a)k(Plot)h(\(in)f(whic)m(h)g(clipping)g(will)g
-(b)s(e)f(p)s(erformed\))g(and)g(in)m(ter-relating)j(this)e(to)h(the)f
-(other)g(F)-8 b(rames)38 b(in)g(a)0 963 y(suitable)31
-b(w)m(a)m(y)-8 b(.)0 1124 y(Clipping)30 b(limits)h(are)f(de\014ned)g
-(using)f(the)i(astClip)g(function,)f(as)h(follo)m(ws:)227
-1363 y Ft(#define)41 b(NAXES)g(2)227 1463 y(int)i(iframe;)227
-1563 y(double)e(lbnd[)h(NAXES)f(],)i(ubnd[)f(NAXES)f(];)227
-1762 y(...)227 1861 y(astClip\()g(plot,)g(iframe,)g(lbnd,)g(ubnd\);)0
-2114 y FF(Here,)30 b(the)e(\\iframe")i(v)-5 b(alue)28
-b(giv)m(es)i(the)f(index)f(of)g(the)h(F)-8 b(rame)29
-b(within)f(the)h(Plot)g(to)g(whic)m(h)f(clipping)h(is)f(to)h(b)s(e)0
-2227 y(applied,)g(while)f(\\lbnd")g(and)g(\\ubnd")f(giv)m(e)i(the)g
-(limits)g(on)f(eac)m(h)h(axis)g(of)g(the)f(selected)i(F)-8
-b(rame)29 b(\(NAXES)f(is)0 2340 y(the)j(n)m(um)m(b)s(er)e(of)h(axes)h
-(in)f(this)g(F)-8 b(rame\).)0 2501 y(Y)g(ou)31 b(can)g(remo)m(v)m(e)g
-(clipping)g(b)m(y)f(giving)h(a)g(v)-5 b(alue)31 b(of)f(AST)p
-Fq(__)p FF(NOFRAME)g(for)g(\\iframe".)0 2790 y Fw(21.7)112
-b(Using)38 b(a)g(Plot)f(as)h(a)g(Mapping)0 3009 y FF(All)e(Plots)g(are)
-g(also)h(Mappings)e(\(just)g(lik)m(e)i(the)f(F)-8 b(rameSets)36
-b(from)f(whic)m(h)h(they)f(are)h(deriv)m(ed\),)i(so)d(can)h(b)s(e)0
-3122 y(used)30 b(to)h(transform)e(co)s(ordinates.)0 3283
-y(Lik)m(e)g(F)-8 b(rameSets,)30 b(the)e(forw)m(ard)g(transformation)g
-(of)h(a)f(Plot)h(will)g(con)m(v)m(ert)g(co)s(ordinates)g(b)s(et)m(w)m
-(een)g(the)f(base)0 3396 y(and)33 b(curren)m(t)g(F)-8
-b(rames)34 b(\()p Fx(i.e.)f FF(b)s(et)m(w)m(een)h(graphical)h(and)d(ph)
-m(ysical)i(co)s(ordinates\).)51 b(This)33 b(w)m(ould)g(b)s(e)g(useful)f
-(if)0 3508 y(y)m(ou)26 b(w)m(ere)f(\(sa)m(y\))i(reading)f(a)f(cursor)g
-(p)s(osition)g(in)g(graphical)i(co)s(ordinates)f(and)e(needed)h(to)h
-(con)m(v)m(ert)h(this)e(in)m(to)0 3621 y(ph)m(ysical)31
-b(co)s(ordinates)g(for)f(displa)m(y)-8 b(.)0 3782 y(Con)m(v)m(ersely)g
-(,)36 b(a)e(Plot's)h(in)m(v)m(erse)f(transformation)g(con)m(v)m(erts)h
-(b)s(et)m(w)m(een)f(its)g(curren)m(t)g(and)f(base)g(F)-8
-b(rames)35 b(\()p Fx(i.e.)0 3895 y FF(from)h(ph)m(ysical)h(co)s
-(ordinates)g(to)g(graphical)h(co)s(ordinates\).)60 b(This)35
-b(transformation)i(is)g(applied)f(automat-)0 4008 y(ically)k(whenev)m
-(er)f(plotting)h(op)s(erations)g(are)f(carried)g(out)g(b)m(y)g(AST)f
-(functions.)66 b(It)39 b(ma)m(y)h(also)g(b)s(e)e(useful)0
-4120 y(to)d(apply)f(it)h(directly)-8 b(,)37 b(ho)m(w)m(ev)m(er,)g(if)e
-(y)m(ou)f(wish)g(to)h(p)s(erform)e(additional)j(plotting)f(op)s
-(erations)g(\()p Fx(e.g.)f FF(those)0 4233 y(pro)m(vided)c(b)m(y)g(the)
-h(nativ)m(e)h(graphics)e(system\))h(at)g(p)s(ositions)f(sp)s(eci\014ed)
-g(in)g(ph)m(ysical)h(co)s(ordinates.)0 4394 y(There)f(is,)h(ho)m(w)m
-(ev)m(er,)h(one)f(imp)s(ortan)m(t)g(di\013erence)g(b)s(et)m(w)m(een)g
-(using)g(a)g(F)-8 b(rameSet)31 b(and)f(a)h(Plot)h(to)f(transform)0
-4507 y(co)s(ordinates,)40 b(and)d(this)g(is)g(that)h(clipping)f(ma)m(y)
-h(b)s(e)f(applied)g(b)m(y)g(a)h(Plot)g(\(if)f(it)h(has)f(b)s(een)g
-(enabled)g(using)0 4620 y(astClip|)p Fu(x)p FF(21.6\).)k(An)m(y)24
-b(p)s(oin)m(t)f(whic)m(h)g(lies)i(within)d(the)i(clipp)s(ed)f(region)h
-(of)g(a)g(Plot)g(will,)h(when)e(transformed,)0 4733 y(yield)41
-b(co)s(ordinates)g(with)f(the)h(v)-5 b(alue)41 b(AST)p
-Fq(__)p FF(BAD.)f(If)g(y)m(ou)h(wish)f(to)h(a)m(v)m(oid)h(this)e
-(clipping,)k(y)m(ou)c(should)0 4845 y(extract)31 b(the)e(relev)-5
-b(an)m(t)31 b(Mapping)e(from)g(the)g(Plot)h(\(using)f(astGetMapping\))i
-(and)e(use)g(this,)g(instead)h(of)f(the)0 4958 y(Plot,)i(to)h
-(transform)d(the)i(co)s(ordinates.)0 5248 y Fw(21.8)112
-b(Using)38 b(a)g(Plot)f(as)h(a)g(F)-9 b(rame)0 5467 y
-FF(Ev)m(ery)39 b(Plot)g(is)f(also)i(a)e(F)-8 b(rame,)42
-b(so)c(can)h(b)s(e)f(used)f(to)i(obtain)g(the)g(v)-5
-b(alues)38 b(of)h(F)-8 b(rame)39 b(attributes)g(suc)m(h)f(as)0
-5580 y(a)k(Title,)j(axis)d(Lab)s(els,)i(axis)e(Units,)j
-Fx(etc.,)e FF(whic)m(h)e(are)h(t)m(ypically)i(used)c(when)h(displa)m
-(ying)g(data)i(and/or)0 5693 y(co)s(ordinates.)k(These)32
-b(attributes)h(are,)h(as)e(for)h(an)m(y)f(F)-8 b(rameSet,)35
-b(deriv)m(ed)d(from)g(the)g(curren)m(t)g(F)-8 b(rame)34
-b(of)e(the)p eop end
-%%Page: 183 193
-TeXDict begin 183 192 bop 0 52 a Fy(21.9)93 b(Regions)31
-b(of)f(V)-8 b(alid)32 b(Ph)m(ysical)f(Co)s(ordinates)1871
-b FF(183)0 351 y(Plot)29 b(\()p Fu(x)p FF(13.8\).)43
-b(They)28 b(are)h(also)g(used)f(automatically)j(when)c(using)h(the)h
-(Plot)g(to)g(plot)g(co)s(ordinate)g(axes)g(and)0 464
-y(co)s(ordinate)i(grids)f(\()p Fx(e.g.)g FF(for)g(lab)s(elling)i(them|)
-p Fu(x)p FF(21.12\).)0 641 y(Because)22 b(the)e(curren)m(t)g(F)-8
-b(rame)21 b(of)g(a)g(Plot)g(represen)m(ts)f(ph)m(ysical)h(co)s
-(ordinates,)i(an)m(y)e(F)-8 b(rame)21 b(op)s(eration)g(applied)0
-753 y(to)32 b(the)g(Plot)h(will)f(e\013ectiv)m(ely)j(b)s(e)c(w)m
-(orking)h(in)f(this)h(co)s(ordinate)h(system.)45 b(F)-8
-b(or)32 b(example,)h(the)f(astDistance)0 866 y(and)j(astO\013set)i
-(functions)f(will)g(compute)g(distances)g(and)g(o\013sets)h(in)e(ph)m
-(ysical)i(co)s(ordinate)f(space,)i(while)0 979 y(astF)-8
-b(ormat)32 b(and)e(astNorm)h(will)g(format)g(ph)m(ysical)g(co)s
-(ordinates)g(in)f(an)g(appropriate)g(w)m(a)m(y)i(for)e(displa)m(y)-8
-b(.)0 1318 y Fw(21.9)112 b(Regions)38 b(of)g(V)-9 b(alid)37
-b(Ph)m(ysical)h(Co)s(ordinates)0 1560 y FF(When)23 b(p)s(oin)m(ts)g(in)
-g(ph)m(ysical)h(co)s(ordinate)g(space)g(are)f(transformed)g(b)m(y)g(a)g
-(Plot)h(in)m(to)h(graphics)e(co)s(ordinates)h(for)0 1673
-y(plotting,)30 b(they)f(ma)m(y)f(not)h(alw)m(a)m(ys)h(yield)f(v)-5
-b(alid)28 b(co)s(ordinates,)i(irresp)s(ectiv)m(e)f(of)g(an)m(y)f
-(clipping)h(b)s(eing)f(applied)0 1785 y(\()p Fu(x)p FF(21.6\).)60
-b(T)-8 b(o)37 b(indicate)g(this,)g(the)f(resulting)g(co)s(ordinate)h(v)
--5 b(alues)36 b(will)h(b)s(e)e(set)h(to)h(the)f(v)-5
-b(alue)37 b(AST)p Fq(__)p FF(BAD)0 1898 y(\()p Fu(x)p
-FF(5.8\).)0 2075 y(There)g(are)h(a)g(n)m(um)m(b)s(er)f(of)h(reasons)f
-(wh)m(y)h(this)f(ma)m(y)i(o)s(ccur,)g(but)e(t)m(ypically)j(it)e(will)g
-(b)s(e)f(b)s(ecause)h(ph)m(ysical)0 2188 y(co)s(ordinates)22
-b(only)g(map)f(on)g(to)i(a)f(subset)f(of)g(the)h(graphics)g(co)s
-(ordinate)g(space.)38 b(This)21 b(situation)h(is)g(commonly)0
-2301 y(encoun)m(tered)j(with)f(all-sky)i(pro)5 b(jections)25
-b(where,)h(t)m(ypically)-8 b(,)28 b(the)d(celestial)i(sphere)d(app)s
-(ears,)h(when)e(plotted,)0 2413 y(as)37 b(a)h(distorted)f(shap)s(e)f
-(\()p Fx(e.g.)h FF(an)g(ellipse\))h(whic)m(h)f(do)s(es)g(not)g(en)m
-(tirely)h(\014ll)f(the)g(graphics)g(space.)62 b(In)36
-b(some)0 2526 y(cases,)c(there)e(ma)m(y)h(ev)m(en)g(b)s(e)f(m)m
-(ultiple)h(regions)g(of)f(v)-5 b(alid)31 b(and)f(in)m(v)-5
-b(alid)31 b(ph)m(ysical)g(co)s(ordinates.)0 2703 y(When)43
-b(plotting)h(is)e(p)s(erformed)g Fx(via)h FF(a)g(Plot,)k(graphical)d
-(output)e(will)h(only)g(app)s(ear)f(in)h(the)g(regions)g(of)0
-2816 y(v)-5 b(alid)28 b(ph)m(ysical)g(co)s(ordinates.)41
-b(Nothing)28 b(will)g(app)s(ear)f(where)g(in)m(v)-5 b(alid)28
-b(co)s(ordinates)h(o)s(ccur.)39 b(Suc)m(h)27 b(output)g(is)0
-2928 y(e\013ectiv)m(ely)36 b(clipp)s(ed.)48 b(If)33 b(y)m(ou)g(wish)f
-(to)i(plot)g(in)e(these)i(areas,)g(y)m(ou)g(m)m(ust)f(c)m(hange)h(co)s
-(ordinate)g(system)f(and)0 3041 y(use,)d(sa)m(y)-8 b(,)32
-b(graphical)f(co)s(ordinates)g(to)g(address)f(the)h(plotting)g(surface)
-f(directly)-8 b(.)0 3380 y Fw(21.10)112 b(Plotting)37
-b(Borders)0 3622 y FF(The)27 b(astBorder)h(function)f(is)g(pro)m(vided)
-g(to)h(dra)m(w)f(a)h(\(line\))g(b)s(order)e(around)g(y)m(our)i
-(graphical)g(output.)39 b(With)0 3735 y(most)26 b(graphics)f(systems,)h
-(this)f(w)m(ould)g(simply)g(b)s(e)f(a)i(rectangular)g(b)s(o)m(x)f
-(around)f(the)h(plotting)i(area.)39 b(With)26 b(a)0 3848
-y(Plot,)h(ho)m(w)m(ev)m(er,)g(this)e(b)s(oundary)e(follo)m(ws)j(the)f
-(edge)g(of)g(eac)m(h)h(region)f(con)m(taining)h(v)-5
-b(alid,)27 b(unclipp)s(ed)c(ph)m(ysical)0 3961 y(co)s(ordinates)31
-b(\()p Fu(x)p FF(21.9\).)0 4137 y(This)i(means,)i(for)e(example,)j
-(that)e(if)g(y)m(ou)g(w)m(ere)g(plotting)h(an)e(all-sky)i(pro)5
-b(jection,)35 b(this)f(b)s(oundary)e(w)m(ould)0 4250
-y(outline)41 b(the)f(p)s(erimeter)f(of)h(the)h(celestial)h(sphere)d
-(when)g(pro)5 b(jected)40 b(on)g(to)h(y)m(our)f(plotting)h(surface.)69
-b(Of)0 4363 y(course,)49 b(if)c(there)g(is)g(no)f(clipping)h(and)f(all)
-i(ph)m(ysical)g(co)s(ordinates)f(are)g(v)-5 b(alid,)49
-b(then)c(y)m(ou)g(will)g(get)h(the)0 4476 y(traditional)32
-b(rectangular)f(b)s(o)m(x.)41 b(astBorder)31 b(requires)f(only)g(a)h(p)
-s(oin)m(ter)f(to)h(the)g(Plot:)227 4766 y Ft(int)43 b(holes;)227
-4965 y(...)227 5164 y(holes)f(=)h(astBorder\()c(plot)j(\);)0
-5467 y FF(It)24 b(returns)f(a)h(b)s(o)s(olean)h(\(in)m(teger\))h(v)-5
-b(alue)24 b(to)h(indicate)g(if)f(an)m(y)h(in)m(v)-5 b(alid)24
-b(or)g(clipp)s(ed)g(ph)m(ysical)g(co)s(ordinates)h(w)m(ere)0
-5580 y(found)g(within)g(the)h(plotting)i(area.)40 b(If)25
-b(they)h(w)m(ere,)i(it)f(will)f(dra)m(w)g(around)f(the)h(v)-5
-b(alid)26 b(unclipp)s(ed)f(regions)h(and)0 5693 y(return)j(a)i(v)-5
-b(alue)31 b(of)f(one.)41 b(Otherwise,)31 b(it)g(will)f(dra)m(w)g(a)h
-(simple)f(rectangular)i(b)s(order)d(and)g(return)h(zero.)p
-eop end
-%%Page: 184 194
-TeXDict begin 184 193 bop 0 52 a FF(184)1463 b Fy(21)92
-b(PR)m(ODUCING)30 b(GRAPHICAL)h(OUTPUT)e(\(PLOTS\))0
-351 y Fw(21.11)112 b(Plotting)37 b(T)-9 b(ext)0 573 y
-FF(Using)33 b(a)f(Plot)i(to)f(dra)m(w)f(text)i(in)m(v)m(olv)m(es)g
-(supplying)d(a)i(string)f(of)h(text)h(to)f(b)s(e)f(displa)m(y)m(ed)h
-(and)e(a)i(p)s(osition)g(in)0 686 y(ph)m(ysical)39 b(co)s(ordinates)g
-(where)f(the)g(text)h(is)g(to)g(app)s(ear.)63 b(The)38
-b(p)s(osition)h(is)f(transformed)f(in)m(to)j(graphical)0
-799 y(co)s(ordinates)45 b(to)h(determine)e(where)g(the)h(text)h(should)
-d(app)s(ear)h(on)h(the)g(plotting)g(surface.)84 b(Y)-8
-b(ou)45 b(m)m(ust)0 911 y(also)33 b(pro)m(vide)g(a)g(2-elemen)m(t)h
-(\\up")e(v)m(ector)i(whic)m(h)e(giv)m(es)i(the)f(up)m(w)m(ard)e
-(direction)i(of)g(the)f(text)i(in)e(graphical)0 1024
-y(co)s(ordinates.)41 b(This)30 b(allo)m(ws)i(text)f(to)g(b)s(e)f(dra)m
-(wn)f(at)j(an)m(y)e(angle.)0 1187 y(Plotting)i(is)e(p)s(erformed)f(b)m
-(y)h(astT)-8 b(ext,)32 b(for)f(example:)227 1436 y Ft(char)42
-b(text[)g(21)g(];)227 1536 y(double)f(pos[)h(NCOORD)f(];)227
-1635 y(float)h(up[)g(2)h(])g(=)h({)f(0.0f,)e(1.0f)h(};)227
-1835 y(...)227 2034 y(astText\()f(plot,)g(text,)h(pos,)g(up,)g("TL")g
-(\);)0 2296 y FF(Here,)28 b(\\text")g(con)m(tains)g(the)e(string)g(to)h
-(b)s(e)f(dra)m(wn,)h(\\p)s(os")f(is)g(an)h(arra)m(y)f(of)h(ph)m(ysical)
-g(co)s(ordinates)g(and)f(\\up")0 2409 y(sp)s(eci\014es)e(the)h(up)m(w)m
-(ard)e(v)m(ector.)41 b(In)23 b(this)i(case,)i(the)d(text)i(will)f(b)s
-(e)e(dra)m(wn)h(horizon)m(tally)-8 b(.)41 b(The)24 b(\014nal)g(argumen)
-m(t)0 2522 y(sp)s(eci\014es)k(the)h(text)h(justi\014cation,)g(here)f
-(indicating)g(that)h(the)f(top)g(left)g(corner)g(of)g(the)g(text)g
-(should)f(app)s(ear)0 2635 y(at)j(the)g(p)s(osition)f(giv)m(en.)0
-2798 y(F)-8 b(urther)38 b(con)m(trol)i(o)m(v)m(er)f(the)g(app)s
-(earance)f(of)g(the)h(text)g(is)f(p)s(ossible)g(b)m(y)g(setting)i(v)-5
-b(alues)38 b(for)g(v)-5 b(arious)39 b(Plot)0 2910 y(attributes,)k(for)c
-(example)i(Colour,)h(F)-8 b(on)m(t)41 b(and)e(Size.)69
-b(Sub-strings)38 b(within)h(the)h(displa)m(y)m(ed)g(text)h(can)f(b)s(e)
-0 3023 y(giv)m(en)24 b(di\013eren)m(t)f(app)s(earances,)i(or)e(turned)f
-(in)m(to)i(sup)s(er-scripts)d(or)i(sub-scripts,)h(b)m(y)f(the)g
-(inclusion)g(of)g(escap)s(e)0 3136 y(sequences)31 b(\(see)g(section)g
-Fu(x)p FF(21.13\))j(within)29 b(the)i(supplied)e(text)i(string.)0
-3429 y Fw(21.12)112 b(Plotting)37 b(a)h(Grid)0 3651 y
-FF(The)33 b(most)h(comprehensiv)m(e)h(plotting)f(function)g(a)m(v)-5
-b(ailable)36 b(is)e(astGrid,)h(whic)m(h)e(can)i(b)s(e)e(used)g(to)h
-(dra)m(w)g(la-)0 3764 y(b)s(elled)21 b(co)s(ordinate)h(axes)g(and,)h
-(optionally)-8 b(,)25 b(to)d(o)m(v)m(erla)m(y)i(co)s(ordinate)e(grids)f
-(on)g(the)h(plotting)g(area)g(\(Figure)g(8\).)0 3877
-y(The)30 b(routine)g(is)h(straigh)m(tforw)m(ard)g(to)g(use,)f(simply)g
-(requiring)g(a)h(p)s(oin)m(ter)f(to)h(the)g(Plot:)227
-4126 y Ft(astGrid\()41 b(plot)g(\);)0 4388 y FF(It)31
-b(will)f(dra)m(w)g(b)s(oth)g(linear)h(and)f(curvilinear)h(axes)g(and)f
-(grids,)g(as)h(required)e(b)m(y)i(the)f(particular)h(Plot.)42
-b(The)0 4501 y(app)s(earance)f(of)f(the)h(output)f(can)g(b)s(e)g(mo)s
-(di\014ed)f(in)h(a)h(wide)f(v)-5 b(ariet)m(y)42 b(of)e(w)m(a)m(ys)i(b)m
-(y)e(setting)h(v)-5 b(arious)41 b(Plot)0 4614 y(attributes.)63
-b(The)37 b(Lab)s(el)g(attributes)h(of)g(the)f(curren)m(t)h(F)-8
-b(rame)38 b(are)g(displa)m(y)m(ed)g(as)g(the)f(axis)h(lab)s(els)g(in)f
-(the)0 4727 y(grid,)42 b(and)d(the)h(Title)h(attribute)f(as)g(the)g
-(plot)g(title.)71 b(Sub-strings)38 b(within)i(these)g(strings)f(can)h
-(b)s(e)f(giv)m(en)0 4840 y(di\013eren)m(t)j(app)s(earances,)j(or)d
-(turned)f(in)m(to)i(sup)s(er-scripts)d(or)i(sub-scripts,)i(b)m(y)e(the)
-g(inclusion)g(of)g(escap)s(e)0 4953 y(sequences)31 b(\(see)g(section)g
-Fu(x)p FF(21.13\))j(within)29 b(the)i(Lab)s(el)f(attributes.)0
-5246 y Fw(21.13)112 b(Con)m(trolling)38 b(the)f(App)s(earance)i(of)f
-(Sub-strings)0 5467 y FF(Normally)-8 b(,)33 b(eac)m(h)f(string)f(of)g
-(c)m(haracters)h(displa)m(y)m(ed)g(using)e(a)h(Plot)h(will)f(b)s(e)g
-(plotted)g(so)h(that)f(all)h(c)m(haracters)0 5580 y(in)40
-b(the)g(string)f(ha)m(v)m(e)i(the)f(same)h(fon)m(t)f(size,)j(colour,)g
-Fx(etc.,)f FF(sp)s(eci\014ed)d(b)m(y)h(the)g(appropriate)g(attributes)g
-(of)0 5693 y(the)h(Plot.)75 b(Ho)m(w)m(ev)m(er,)46 b(it)c(is)f(p)s
-(ossible)g(to)h(include)f Fx(esc)-5 b(ap)g(e)44 b(se)-5
-b(quenc)g(es)48 b FF(within)41 b(the)h(text)g(to)g(mo)s(dify)e(the)p
-eop end
-%%Page: 185 195
-TeXDict begin 185 194 bop 0 52 a Fy(21.14)93 b(Pro)s(ducing)29
-b(Logarithmic)j(Axes)2203 b FF(185)0 351 y(app)s(earance)29
-b(of)f(sub-strings.)39 b(Escap)s(e)28 b(sequences)h(can)g(b)s(e)f(used)
-f(to)i(c)m(hange,)h(colour,)g(fon)m(t,)g(size,)f(width,)g(to)0
-464 y(in)m(tro)s(duce)k(extra)h(horizon)m(tal)h(space)e(b)s(et)m(w)m
-(een)h(c)m(haracters,)h(and)e(to)h(c)m(hange)g(the)f(base)g(line)h(of)f
-(c)m(haracters)0 577 y(\(th)m(us)22 b(allo)m(wing)h(sup)s(er-scripts)d
-(and)h(sub-scripts)g(to)h(b)s(e)f(created\).)39 b(See)22
-b(the)g(en)m(try)g(for)f(the)h(Escap)s(e)g(attribute)0
-690 y(in)30 b(App)s(endix)f(C)h(for)g(details.)0 855
-y(As)j(an)f(example,)i(if)f(the)g(c)m(haracter)h(string)e(\\)p
-Fq(10\\\045^50)p FF(\045s70+0.5+")h(is)g(plotted,)h(it)f(will)g(b)s(e)f
-(displa)m(y)m(ed)h(as)0 968 y(\\10)135 935 y Fv(0)p Fh(:)p
-Fv(5)231 968 y FF(")f(-)h(that)f(is,)h(with)f(a)g(sup)s(er-scripted)f
-(exp)s(onen)m(t.)46 b(The)32 b(exp)s(onen)m(t)g(text)h(will)g(b)s(e)e
-(70\045)i(of)f(the)g(size)h(of)0 1081 y(normal)d(text)g(\(as)g
-(determined)f(b)m(y)h(the)g(Size)g(attribute\),)h(and)e(its)h(baseline)
-g(will)g(b)s(e)e(raised)i(b)m(y)f(50\045)i(of)e(the)0
-1194 y(heigh)m(t)i(of)g(a)g(normal)f(c)m(haracter.)0
-1359 y(Suc)m(h)c(escap)s(e)h(sequences)f(can)h(b)s(e)f(used)f(in)i(the)
-f(strings)g(assigned)h(to)g(textual)h(attributes)f(of)g(the)f(Plot)h
-(\(suc)m(h)0 1472 y(as)k(the)f(axis)h(Lab)s(els\),)g(and)f(ma)m(y)g
-(also)i(b)s(e)e(included)f(in)h(strings)g(plotted)i(using)d(astT)-8
-b(ext.)0 1637 y(The)40 b(F)-8 b(ormat)42 b(attribute)f(for)f(the)h
-(SkyAxis)f(class)h(includes)f(the)h(\\g")g(option)g(whic)m(h)f(will)h
-(cause)g(escap)s(e)0 1750 y(sequences)30 b(to)g(b)s(e)f(included)g
-(when)g(formatting)h(celestial)i(p)s(ositions)e(so)g(that)g(sup)s
-(er-script)e(c)m(haracters)j(are)0 1863 y(used)f(as)g(delimiters)h(for)
-f(the)h(v)-5 b(arious)30 b(\014elds)g(\(a)h(sup)s(er-script)e(\\h")i
-(for)f(hours,)f(\\m")i(for)g(min)m(utes,)f Fx(etc)5 b
-FF(\).)0 2028 y(Note,)46 b(the)c(facilit)m(y)i(for)e(in)m(terpreting)g
-(escap)s(e)h(sequences)f(is)g(only)f(a)m(v)-5 b(ailable)45
-b(if)c(the)h(graphics)g(wrapp)s(er)0 2141 y(functions)24
-b(whic)m(h)f(pro)m(vide)h(the)g(in)m(terface)i(to)f(the)f(underlying)f
-(graphics)h(system)g(supp)s(ort)e(all)j(the)f(functions)0
-2254 y(included)k(in)h(the)h Fq(grf.h)d FF(\014le)i(as)h(of)f(AST)g
-(V3.2.)41 b(Older)29 b(grf)g(in)m(terfaces)h(ma)m(y)g(need)f(to)h(b)s
-(e)e(extended)h(b)m(y)g(the)0 2367 y(addition)i(of)f(new)g(functions)g
-(b)s(efore)g(escap)s(e)h(sequences)f(can)h(b)s(e)f(in)m(terpretted.)0
-2668 y Fw(21.14)112 b(Pro)s(ducing)38 b(Logarithmic)g(Axes)0
-2893 y FF(In)23 b(certain)j(situations)e(y)m(ou)h(ma)m(y)g(wish)e(for)h
-(one)h(or)f(b)s(oth)f(of)i(the)f(plotted)h(axes)g(to)g(b)s(e)e(displa)m
-(y)m(ed)i(logarithmi-)0 3006 y(cally)30 b(rather)e(than)g(linearly)-8
-b(.)42 b(F)-8 b(or)29 b(instance,)h(y)m(ou)e(ma)m(y)i(wish)d(to)j(do)e
-(this)g(when)g(using)g(a)h(Plot)g(to)g(represen)m(t)0
-3119 y(a)j(sp)s(ectrum)e(of,)j(sa)m(y)-8 b(,)33 b(\015ux)d(against)j
-(frequency)-8 b(.)44 b(In)31 b(this)g(case,)i(y)m(ou)f(can)g(cause)g
-(the)g(frequency)f(axis)h(to)g(b)s(e)0 3232 y(dra)m(wn)27
-b(logarithmically)j(simply)e(b)m(y)f(setting)i(the)f(b)s(o)s(olean)g
-(LogPlot)h(attribute)g(for)e(the)h(frequency)f(axis)i(to)0
-3345 y(a)i(non-zero)g(v)-5 b(alue.)41 b(This)29 b(causes)i(sev)m(eral)h
-(things)e(to)h(happ)s(en:)111 3614 y(1.)46 b(The)21 b(Mapping)f(b)s(et)
-m(w)m(een)i(the)e(base)h(F)-8 b(rame)22 b(of)f(the)g(Plot)g(\(whic)m(h)
-g(represen)m(ts)g(the)g(underlying)e(graphics)227 3727
-y(w)m(orld)26 b(co)s(ordinate)h(system\))g(and)f(the)g(base)g(F)-8
-b(rame)27 b(of)g(the)f(F)-8 b(rameSet)28 b(supplied)c(when)i(the)g
-(Plot)h(w)m(as)227 3840 y(created,)32 b(is)e(mo)s(di\014ed.)39
-b(By)30 b(default,)h(this)f(mapping)f(is)h(linear)g(on)g(b)s(oth)g
-(axes,)h(but)e(setting)i(LogPlot)227 3953 y(non-zero)37
-b(for)e(an)h(axis)g(causes)g(the)g(Mapping)g(to)h(b)s(e)e(mo)s
-(di\014ed)f(so)j(that)f(it)g(is)g(logarithmic)i(on)d(the)227
-4066 y(sp)s(eci\014ed)26 b(axis.)39 b(This)26 b(is)g(only)g(p)s
-(ossible)f(if)h(the)h(displa)m(y)m(ed)f(section)i(of)e(the)g(axis)g(do)
-s(es)g(not)g(include)g(the)227 4179 y(v)-5 b(alue)31
-b(zero)g(\(otherwise)g(the)g(attempt)g(to)g(set)g(a)f(new)g(v)-5
-b(alue)31 b(for)f(LogPlot)i(is)e(ignored,and)g(it)h(retains)227
-4292 y(its)g(default)g(v)-5 b(alue)30 b(of)h(zero\).)111
-4484 y(2.)46 b(The)38 b(ma)5 b(jor)38 b(tic)m(k)h(marks)f(dra)m(wn)f
-(as)h(part)g(of)g(the)h(annotated)f(co)s(ordinate)h(grid)f(are)h
-(spaced)f(loga-)227 4597 y(rithmically)d(rather)f(than)g(linearly)-8
-b(.)53 b(That)34 b(is,)i(ma)5 b(jor)34 b(axis)h(v)-5
-b(alues)34 b(are)h(c)m(hosen)f(so)h(that)g(there)f(is)g(a)227
-4710 y(constan)m(t)d(ratio)g(b)s(et)m(w)m(een)f(adjacen)m(t)g(tic)m(k)h
-(mark)e(v)-5 b(alues.)41 b(This)29 b(ratio)h(is)g(constrained)g(to)g(b)
-s(e)f(a)g(p)s(o)m(w)m(er)227 4823 y(of)g(ten.)40 b(The)28
-b(minor)g(tic)m(k)i(marks)e(are)g(dra)m(wn)g(at)h(linearly)g
-(distributed)e(p)s(oin)m(ts)i(b)s(et)m(w)m(een)g(the)f(adjoin-)227
-4936 y(ing)f(ma)5 b(jor)26 b(tic)m(k)i(v)-5 b(alues.)39
-b(Th)m(us)25 b(if)i(a)f(pair)g(of)h(adjacen)m(t)g(ma)5
-b(jor)26 b(tic)m(k)i(v)-5 b(alues)26 b(are)h(dra)m(wn)e(at)i(axis)g(v)
--5 b(alues)227 5049 y(10.0)39 b(and)d(100.0,)41 b(minor)36
-b(tic)m(ks)i(will)f(b)s(e)f(placed)i(at)f(20.0,)j(30.0,)h(40.0,)f
-(50.0,)g(60.0,)g(70.0,)h(80.0)d(and)227 5162 y(90.0)32
-b(\(note)g(only)e(8)h(minor)f(tic)m(k)h(marks)f(are)h(dra)m(wn\).)111
-5354 y(3.)46 b(If)25 b(p)s(ossible,)i(n)m(umerical)f(axis)g(lab)s(els)g
-(are)g(sho)m(wn)f(as)h(p)s(o)m(w)m(ers)f(of)h(ten.)39
-b(This)25 b(dep)s(ends)f(on)h(the)h(facilities)227 5467
-y(implemen)m(ted)38 b(b)m(y)f(the)g(graphics)g(wrapp)s(er)f(functions)g
-(\(see)i(the)g(next)f(section\).)63 b(Extra)37 b(functions)227
-5580 y(w)m(ere)32 b(in)m(tro)s(duced)g(to)g(this)g(set)g(of)g(wrapp)s
-(er)e(functions)h(at)h(AST)f(V3.2)i(whic)m(h)f(enable)g(sup)s
-(er-scripts)227 5693 y(and)42 b(sub-scripts)f(to)h(b)s(e)g(pro)s
-(duced.)74 b(Some)42 b(older)g(wrapp)s(ers)e(ma)m(y)i(not)h(y)m(et)g
-(ha)m(v)m(e)g(implemen)m(ted)p eop end
-%%Page: 186 196
-TeXDict begin 186 195 bop 0 52 a FF(186)1463 b Fy(21)92
-b(PR)m(ODUCING)30 b(GRAPHICAL)h(OUTPUT)e(\(PLOTS\))227
-351 y FF(these)f(functiosn)f(and)f(this)h(will)h(result)f(in)f(axis)i
-(lab)s(els)f(b)s(eing)g(dra)m(wn)f(in)h(usual)g(scien)m(ti\014c)h(or)f
-(decimal)227 464 y(notation.)0 727 y(Whilst)35 b(the)g(LogPlot)i
-(attribute)e(can)g(b)s(e)g(used)f(to)h(con)m(trol)i(all)e(three)g(of)g
-(the)g(ab)s(o)m(v)m(e)h(facilities,)j(it)c(is)g(p)s(os-)0
-839 y(sible)h(to)h(con)m(trol)h(them)e(individually)g(as)g(w)m(ell.)59
-b(The)35 b(LogTic)m(ks)j(and)d(LogLab)s(el)i(attributes)g(con)m(trol)g
-(the)0 952 y(b)s(eha)m(viour)d(sp)s(eci\014ed)f(in)g(items)i(2)f(and)f
-(3)i(ab)s(o)m(v)m(e,)h(but)d(the)h(default)g(v)-5 b(alues)35
-b(for)e(these)i(attributes)f(dep)s(end)0 1065 y(on)f(the)h(setting)h
-(of)f(the)g(LogPlot)h(attribute.)51 b(This)33 b(means)g(that)h(setting)
-h(LogPlot)g(non-zero)g(will)e(swicth)0 1178 y(all)39
-b(three)g(facilites)i(on,)f(so)f(long)g(as)g(zero)g(v)-5
-b(alues)39 b(ha)m(v)m(e)h(not)f(b)s(een)f(assigned)g(explicitly)i(to)g
-(LogTic)m(ks)f(or)0 1291 y(LogLab)s(el.)0 1584 y Fw(21.15)112
-b(Cho)s(osing)39 b(a)f(Graphics)g(P)m(ac)m(k)-6 b(age)0
-1806 y FF(The)34 b(Plot)i(class)g(itself)g(do)s(es)f(not)g(include)g
-(an)m(y)g(co)s(de)g(for)g(actually)h(dra)m(wing)f(on)g(a)g(graphics)g
-(device.)56 b(In-)0 1919 y(stead,)32 b(it)g(requires)f(a)g(set)h(of)f
-(functions)g(to)h(b)s(e)f(pro)m(vided)f(whic)m(h)h(it)h(uses)f(to)h
-(dra)m(w)e(the)i(required)e(graphics.)0 2032 y(These)39
-b(include)g(functions)f(to)i(dra)m(w)e(a)i(straigh)m(t)g(line,)i(dra)m
-(w)c(a)i(text)g(string,)h Fx(etc)p FF(.)67 b(Y)-8 b(ou)39
-b(ma)m(y)h(c)m(ho)s(ose)g(to)0 2144 y(pro)m(vide)h(functions)f(from)g
-(y)m(our)g(fa)m(v)m(orite)j(graphics)e(pac)m(k)-5 b(age,)45
-b(or)40 b(y)m(ou)h(can)g(ev)m(en)g(write)g(y)m(our)g(o)m(wn!)71
-b(T)-8 b(o)0 2257 y(accomo)s(date)43 b(v)-5 b(ariations)42
-b(in)f(the)g(calling)h(in)m(terfaces)h(of)e(di\013eren)m(t)g(graphics)g
-(pac)m(k)-5 b(ages,)46 b(AST)40 b(de\014nes)g(a)0 2370
-y(standard)g(in)m(terface)i(for)f(these)g(routines.)72
-b(If)40 b(this)h(in)m(terface)h(di\013ers)f(from)f(the)h(in)m(terface)h
-(pro)m(vided)f(b)m(y)0 2483 y(y)m(our)27 b(graphics)g(pac)m(k)-5
-b(age)29 b(\(whic)m(h)f(in)e(general)j(it)e(will\),)i(then)e(y)m(ou)g
-(m)m(ust)g(write)h(a)f(set)h(of)f Fx(wr)-5 b(app)g(er)33
-b(functions)p FF(,)0 2596 y(whic)m(h)e(pro)m(vide)g(the)g(in)m(terface)
-h(exp)s(ected)f(b)m(y)g(AST)f(but)g(whic)m(h)h(then)g(call)h(functions)
-e(from)h(y)m(our)f(graphics)0 2709 y(pac)m(k)-5 b(age)36
-b(to)e(pro)m(vide)g(the)g(required)f(functionalit)m(y)-8
-b(.)52 b(AST)33 b(comes)i(with)e(wrapp)s(er)f(functions)h(suitable)i
-(for)0 2822 y(the)c(PGPLOT)e(graphics)h(pac)m(k)-5 b(age)33
-b(\(see)e(SUN/15\).)0 2985 y(There)f(are)h(t)m(w)m(o)g(w)m(a)m(ys)h(of)
-e(indicating)h(whic)m(h)f(wrapp)s(er)f(functions)h(are)h(to)g(b)s(e)f
-(used)f(b)m(y)h(the)h(Plot)g(class:)111 3222 y(1.)46
-b(A)33 b(\014le)g(con)m(taining)i(C)d(functions)h(with)f(pre-de\014ned)
-g(names)h(can)g(b)s(e)f(written)h(and)f(link)m(ed)i(with)e(the)227
-3335 y(application)42 b(using)e(options)h(of)g(the)g(ast)p
-Fq(_)p FF(link)f(command.)71 b(\(see)42 b Fu(x)p FF(3.3)g(and)e(App)s
-(endix)f(E\).)71 b(AST)227 3448 y(is)37 b(distributed)f(with)g(suc)m(h)
-h(a)g(\014le)f(\(called)j Fq(grf_pgplot.c)p FF(\))33
-b(whic)m(h)k(calls)h(PGPLOT)d(functions)i(to)227 3561
-y(implemen)m(t)30 b(the)f(required)g(functionalit)m(y)-8
-b(.)42 b(This)28 b(\014le)i(can)f(b)s(e)g(used)f(as)h(a)h(template)g
-(for)f(writing)h(y)m(our)227 3674 y(o)m(wn.)111 3861
-y(2.)46 b(The)24 b(astGrfSet)g(metho)s(d)g(of)g(the)g(Plot)h(class)g
-(can)f(b)s(e)f(used)h(to)g(\\register")i(wrapp)s(er)c(functions)i(at)h
-(run-)227 3974 y(time.)41 b(This)26 b(allo)m(ws)i(an)g(application)g
-(to)g(switc)m(h)g(b)s(et)m(w)m(een)f(graphics)g(systems)h(if)f
-(required.)39 b(Graphics)227 4087 y(functions)f(registered)g(in)g(this)
-g(w)m(a)m(y)g(do)g(not)g(need)g(to)g(ha)m(v)m(e)h(the)g(pre-de\014ned)d
-(names)i(used)f(in)g(the)227 4200 y(link-time)32 b(metho)s(d)d(describ)
-s(ed)h(ab)s(o)m(v)m(e.)0 4438 y(F)-8 b(or)33 b(details)g(of)g(the)f(in)
-m(terfaces)i(of)f(the)f(wrapp)s(er)f(routines,)i(see)g(either)f(the)h
-Fq(grf_pgplot.c)c FF(\014le)j(included)0 4550 y(in)e(the)h(AST)e
-(source)i(distribution,)f(or)g(the)h(reference)g(do)s(cumen)m(tation)g
-(for)f(the)g(astGrfSet)h(metho)s(d.)p eop end
-%%Page: 187 197
-TeXDict begin 187 196 bop 3643 52 a FF(187)0 351 y Fz(22)135
-b(Compiling)46 b(and)f(Linking)g(Soft)l(w)l(are)h(that)g(Uses)f(AST)0
-603 y FF(A)28 b(small)h(n)m(um)m(b)s(er)d(of)i(UNIX)h(commands)e(are)i
-(pro)m(vided)e(b)m(y)h(AST)f(to)i(assist)g(with)e(the)i(pro)s(cess)e
-(of)h(building)0 716 y(soft)m(w)m(are.)58 b(A)36 b(description)g(of)g
-(these)g(can)g(b)s(e)f(found)f(in)i(App)s(endix)e(E)h(and)h(their)f
-(use)h(is)g(discussed)e(here.)0 828 y(Note)c(that)g(in)f(order)f(to)i
-(access)h(these)e(commands,)g(the)h(appropriate)f(directory)g
-(\(normally)h(\\/star/bin"\))0 941 y(should)f(b)s(e)h(on)g(y)m(our)h(P)
--8 b(A)g(TH.)1019 908 y Fv(35)0 1233 y Fw(22.1)112 b(Accessing)38
-b(the)f(\\ast.h")h(Header)g(File)0 1453 y FF(The)26 b(\\ast.h")i
-(header)f(\014le)g(de\014nes)f(the)h(external)g(in)m(terface)i(to)e
-(the)g(AST)f(library)-8 b(,)28 b(including)e(all)i(constan)m(ts,)0
-1566 y(function)k(protot)m(yp)s(es,)i(macros,)g Fx(etc.)p
-FF(.)46 b(This)32 b(\014le)g(should)g(b)s(e)g(lo)s(cated)h(using)f(the)
-h(usual)f(compiler)h(options)0 1678 y(for)d(\014nding)f(C)h(include)g
-(\014les,)h(for)f(instance:)227 1922 y Ft(cc)43 b(prog.c)e
-(-I/star/include)d(-o)k(prog)0 2179 y FF(This)30 b(is)g(preferable)g
-(to)h(sp)s(ecifying)g(the)f(\014le's)h(absolute)g(name)f(within)g(y)m
-(our)g(soft)m(w)m(are.)0 2470 y Fw(22.2)112 b(Linking)39
-b(with)e(AST)h(F)-9 b(acilities)0 2690 y FF(C)40 b(programs)f(whic)m(h)
-h(use)g(AST)f(facilities)k(ma)m(y)d(b)s(e)g(link)m(ed)g(b)m(y)g
-(including)g(execution)h(of)f(the)h(command)0 2803 y(\\ast)p
-Fq(_)p FF(link")33 b(on)f(the)g(compiler)h(command)e(line.)46
-b(Th)m(us,)31 b(to)i(compile)g(and)e(link)h(a)h(program)e(called)i
-(\\prog",)0 2916 y(the)e(follo)m(wing)g(migh)m(t)h(b)s(e)d(used:)227
-3160 y Ft(cc)43 b(prog.c)e(-L/star/lib)e(`ast_link`)h(-o)i(prog)0
-3416 y FF(Note)27 b(the)f(use)g(of)g(bac)m(kw)m(ard)g(quote)h(c)m
-(haracters,)i(whic)m(h)c(cause)i(the)f(\\ast)p Fq(_)p
-FF(link")h(command)f(to)g(b)s(e)g(executed)0 3529 y(and)g(its)h(result)
-g(substituted)f(in)m(to)i(the)e(compiler)i(command.)39
-b(An)26 b(alternativ)m(e)j(is)e(to)g(sa)m(v)m(e)i(the)e(output)f(from)0
-3642 y(\\ast)p Fq(_)p FF(link")32 b(in)f(\(sa)m(y\))i(a)e(shell)h(v)-5
-b(ariable)31 b(and)g(use)g(this)g(instead.)43 b(Y)-8
-b(ou)32 b(ma)m(y)f(\014nd)f(this)h(a)h(little)h(faster)e(if)g(y)m(ou)0
-3755 y(are)g(building)e(soft)m(w)m(are)j(rep)s(eatedly)f(during)e(dev)m
-(elopmen)m(t.)0 3917 y(Programs)43 b(whic)m(h)g(use)g(AST)f(can)i(also)
-g(b)s(e)e(link)m(ed)i(in)e(a)i(n)m(um)m(b)s(er)e(of)h(other)g(w)m(a)m
-(ys,)48 b(dep)s(ending)41 b(on)i(the)0 4029 y(facilities)35
-b(they)f(require.)48 b(In)32 b(the)i(example)g(ab)s(o)m(v)m(e,)h(w)m(e)
-e(ha)m(v)m(e)i(used)d(the)h(default)g(metho)s(d)g(whic)m(h)g(assumes)0
-4142 y(that)39 b(the)g(program)f(will)h(not)g(b)s(e)f(generating)i
-(graphical)f(output,)i(so)e(that)g(no)f(graphics)h(libraries)g(need)0
-4255 y(b)s(e)d(link)m(ed.)59 b(If)35 b(y)m(ou)i(need)f(other)h
-(facilities,)j(then)c(v)-5 b(arious)36 b(switc)m(hes)h(can)g(b)s(e)f
-(applied)g(to)h(the)f(\\ast)p Fq(_)p FF(link")0 4368
-y(command)30 b(in)g(order)g(to)h(con)m(trol)h(the)f(linking)f(pro)s
-(cess.)0 4530 y(F)-8 b(or)29 b(example,)h(if)e(y)m(ou)h(w)m(ere)f(pro)s
-(ducing)f(graphical)i(output)f(using)g(the)g(PGPLOT)g(graphics)g(pac)m
-(k)-5 b(age,)31 b(y)m(ou)0 4642 y(could)e(link)g(with)g(the)g
-(AST/PGPLOT)f(in)m(terface)j(b)m(y)d(using)h(the)g(\\)p
-Fu(\000)p FF(pgplot")h(switc)m(h)g(with)e(\\ast)p Fq(_)p
-FF(link",)j(as)0 4755 y(follo)m(ws:)292 4722 y Fv(36)227
-4999 y Ft(cc)43 b(prog.c)e(-L/star/lib)e(`ast_link)h(-pgplot`)g(-o)j
-(prog)0 5256 y FF(See)31 b(the)f(\\ast)p Fq(_)p FF(link")i(command)e
-(description)g(in)g(App)s(endix)f(E)h(for)g(details)i(of)e(the)h
-(options)g(a)m(v)-5 b(ailable.)p 0 5334 1512 4 v 73 5387
-a Fs(35)138 5419 y Fr(If)33 b(y)n(ou)g(ha)n(v)n(e)f(not)h(installed)h
-(AST)e(in)h(the)g(usual)g(lo)r(cation,)j(then)d(substitute)f(the)h
-(appropriate)g(directory)g(in)g(place)h(of)0 5510 y(\\/star")27
-b(wherev)n(er)f(it)g(o)r(ccurs.)73 5570 y Fs(36)138 5602
-y Fr(Use)20 b(the)f(\\)p Fm(\000)p Fr(pgp")g(option)h(instead)g(if)g(y)
-n(ou)f(wish)h(to)f(use)h(the)f(Starlink)g(v)n(ersion)g(of)i(PGPLOT)f
-(whic)n(h)f(uses)h(GKS)f(to)h(generate)0 5693 y(its)26
-b(output.)p eop end
-%%Page: 188 198
-TeXDict begin 188 197 bop 0 52 a FF(188)929 b Fy(22)91
-b(COMPILING)30 b(AND)h(LINKING)g(SOFTW)-10 b(ARE)29 b(THA)-8
-b(T)31 b(USES)e(AST)0 351 y Fw(22.3)112 b(Building)39
-b(AD)m(AM)d(Applications)j(that)e(Use)h(AST)0 573 y FF(Users)32
-b(of)h(Starlink's)g(AD)m(AM)h(programming)e(en)m(vironmen)m(t)h
-(\(SG/4\))h(on)f(UNIX)g(should)e(use)h(the)h(\\alink")0
-686 y(command)j(\(SUN/144\))i(to)f(compile)g(and)e(link)h(applications)
-h(and)e(can)h(access)i(the)e(AST)f(library)h(b)m(y)f(in-)0
-799 y(cluding)30 b(execution)i(of)e(the)h(command)f(\\ast)p
-Fq(_)p FF(link)p Fq(_)p FF(adam")h(on)g(the)f(command)g(line,)h(as)g
-(follo)m(ws:)227 1048 y Ft(alink)42 b(adamprog.c)d(`ast_link_adam`)0
-1310 y FF(Note)32 b(the)e(use)g(of)h(bac)m(kw)m(ard)g(quote)g(c)m
-(haracters.)0 1473 y(By)e(default,)g(AST)f(error)g(messages)i(pro)s
-(duced)d(b)m(y)h(applications)i(built)f(in)f(this)h(w)m(a)m(y)g(will)g
-(b)s(e)f(deliv)m(ered)h Fx(via)0 1586 y FF(the)34 b(Starlink)g(EMS)f
-(Error)g(Message)i(Service)f(\(SSN/4\))h(so)f(that)g(error)g(handling)f
-(b)m(y)g(AST)g(is)h(consisten)m(t)0 1698 y(with)c(the)h
-Fx(inherite)-5 b(d)33 b(status)f FF(error)e(handling)g(normally)g(used)
-g(in)g(Starlink)g(soft)m(w)m(are.)0 1861 y(Switc)m(hes)43
-b(ma)m(y)h(b)s(e)e(giv)m(en)i(to)f(the)g(\\ast)p Fq(_)p
-FF(link)p Fq(_)p FF(adam")h(command)f(\(in)g(a)g(similar)g(w)m(a)m(y)h
-(to)f(\\ast)p Fq(_)p FF(link"|)0 1974 y Fu(x)p FF(22.2\))36
-b(in)d(order)h(to)g(link)g(with)f(additional)i(AST-related)f
-(facilities,)j(suc)m(h)c(as)h(a)g(graphics)g(in)m(terface.)52
-b(See)0 2087 y(the)31 b(\\ast)p Fq(_)p FF(link)p Fq(_)p
-FF(adam")g(command)f(description)h(in)f(App)s(endix)e(E)j(for)f
-(details)h(of)g(the)f(options)h(a)m(v)-5 b(ailable.)p
-eop end
-%%Page: 189 199
-TeXDict begin 189 198 bop 3643 52 a FF(189)0 351 y Fz(A)134
-b(The)45 b(AST)e(Class)j(Hierarc)l(h)l(y)0 619 y FF(The)29
-b(follo)m(wing)j(table)e(sho)m(ws)g(the)g(hierarc)m(h)m(y)g(of)g
-(classes)h(in)e(the)h(AST)f(library)-8 b(.)41 b(F)-8
-b(or)30 b(a)h(description)e(of)h(eac)m(h)0 732 y(class,)h(y)m(ou)g
-(should)e(consult)i(App)s(endix)e(D.)0 1011 y Ft(Object)564
-b(-)43 b(Base)f(class)g(for)g(all)g(AST)h(Objects)131
-1110 y(Axis)521 b(-)43 b(Store)f(axis)g(information)262
-1210 y(SkyAxis)258 b(-)43 b(Store)f(celestial)e(axis)i(information)131
-1309 y(Channel)389 b(-)43 b(Basic)f(\(textual\))e(I/O)i(channel)262
-1409 y(FitsChan)214 b(-)43 b(I/O)g(Channel)d(using)i(FITS)g(header)f
-(cards)262 1509 y(XmlChan)258 b(-)43 b(I/O)g(Channel)d(using)i(XML)262
-1608 y(StcsChan)214 b(-)43 b(I/O)g(Channel)d(using)i(IVOA)g(STC-S)f
-(descriptions)131 1708 y(KeyMap)433 b(-)43 b(Store)f(a)h(set)f(of)h
-(key/value)d(pairs)131 1808 y(Mapping)389 b(-)43 b(Inter-relate)c(two)j
-(coordinate)e(systems)262 1907 y(CmpMap)302 b(-)43 b(Compound)e
-(Mapping)262 2007 y(DssMap)302 b(-)43 b(Map)g(points)e(using)g
-(Digitised)f(Sky)i(Survey)g(plate)f(solution)262 2106
-y(Frame)346 b(-)43 b(Coordinate)d(system)h(description)392
-2206 y(CmpFrame)84 b(-)43 b(Compound)e(Frame)523 2306
-y(SpecFluxFrame)d(-)43 b(Observed)e(value)g(versus)g(spectral)g
-(position)392 2405 y(FluxFrame)f(-)j(Observed)e(value)g(at)i(a)g(given)
-f(fixed)f(spectral)f(position)392 2505 y(FrameSet)84
-b(-)43 b(Set)g(of)f(inter-related)d(coordinate)g(systems)523
-2605 y(Plot)129 b(-)43 b(Provide)e(facilities)e(for)k(graphical)d
-(output)392 2704 y(Region)172 b(-)43 b(Specify)e(areas)h(within)f(a)i
-(coordinate)c(system)523 2804 y(Box)173 b(-)43 b(A)g(box)g(region)e
-(with)h(sides)f(parallel)g(to)h(the)h(axes)f(of)g(a)i(Frame)523
-2903 y(Circle)d(-)i(A)g(circular)e(or)i(spherical)c(region)i(within)h
-(a)h(Frame)523 3003 y(CmpRegion)83 b(-)44 b(A)f(combination)c(of)k(two)
-f(regions)f(within)g(a)i(single)e(Frame)523 3103 y(Ellipse)171
-b(-)44 b(An)e(elliptical)e(region)h(within)g(a)i(2-dimensional)38
-b(Frame)523 3202 y(Interval)127 b(-)44 b(Intervals)c(on)i(one)h(or)f
-(more)g(axes)g(of)h(a)g(Frame.)523 3302 y(NullRegion)c(-)44
-b(A)f(boundless)d(region)h(within)g(a)i(Frame)523 3402
-y(PointList)83 b(-)44 b(A)f(collection)c(of)k(points)e(in)i(a)g(Frame)
-523 3501 y(Polygon)171 b(-)44 b(A)f(polygonal)d(region)h(within)g(a)i
-(2-dimensional)38 b(Frame)523 3601 y(Prism)85 b(-)43
-b(An)g(extrusion)d(of)j(a)g(Region)e(into)h(orthogonal)d(dimensions)523
-3700 y(Stc)173 b(-)43 b(Represents)d(an)j(generic)d(instance)g(of)j(an)
-g(IVOA)f(STC-X)f(description)654 3800 y(StcResourceProfi)o(le)c(-)43
-b(Represents)d(an)i(an)h(IVOA)f(STC-X)g(ResourceProfile)654
-3900 y(StcSearchLocatio)o(n)81 b(-)43 b(Represents)d(an)i(an)h(IVOA)f
-(STC-X)g(SearchLocation)654 3999 y(StcCatalogEntryL)o(oc)o(ati)o(on)37
-b(-)43 b(Represents)c(an)k(an)g(IVOA)f(STC-X)f(CatalogEntryLocat)o(ion)
-654 4099 y(StcObsDataLocati)o(on)c(-)43 b(Represents)d(an)i(an)h(IVOA)f
-(STC-X)g(ObsDataLocation)392 4199 y(SkyFrame)84 b(-)43
-b(Celestial)d(coordinate)g(system)h(description)392 4298
-y(SpecFrame)f(-)j(Spectral)e(coordinate)e(system)i(description)523
-4398 y(DSBSpecFrame)e(-)k(Dual)f(sideband)e(spectral)g(coordinate)g
-(system)h(description)392 4497 y(TimeFrame)f(-)j(Time)f(coordinate)e
-(system)h(description)262 4597 y(GrismMap)214 b(-)43
-b(Models)e(the)i(spectral)d(dispersion)f(produced)i(by)i(a)g(grism)262
-4697 y(IntraMap)214 b(-)43 b(Map)g(points)e(using)g(a)i(private)e
-(transformation)d(function)262 4796 y(LutMap)302 b(-)43
-b(Transform)d(1-dimensional)e(coordinates)h(using)j(a)h(lookup)e(table)
-262 4896 y(MathMap)258 b(-)43 b(Transform)d(coordinates)f(using)j
-(mathematical)c(expressions)262 4996 y(MatrixMap)170
-b(-)43 b(Map)g(positions)d(by)i(multiplying)d(them)j(by)h(a)g(matrix)
-262 5095 y(NormMap)258 b(-)43 b(Normalise)d(coordinates)f(using)j(a)h
-(supplied)d(Frame)262 5195 y(PcdMap)302 b(-)43 b(Apply)f(2-dimensional)
-c(pincushion/barre)o(l)g(distortion)262 5295 y(PermMap)258
-b(-)43 b(Coordinate)d(permutation)f(Mapping)262 5394
-y(PolyMap)258 b(-)43 b(General)e(N-dimensional)d(polynomial)i(Mapping)
-262 5494 y(RateMap)258 b(-)43 b(Calculates)d(an)j(element)d(of)j(a)g
-(Mapping's)d(Jacobian)g(matrix)262 5593 y(SelectorMap)82
-b(-)43 b(Locates)e(positions)f(within)h(a)i(set)f(of)h(Regions)262
-5693 y(ShiftMap)214 b(-)43 b(Shifts)e(each)h(axis)g(by)h(a)g(constant)d
-(amount)p eop end
-%%Page: 190 200
-TeXDict begin 190 199 bop 0 52 a FF(190)2158 b Fy(A)92
-b(THE)30 b(AST)f(CLASS)g(HIERAR)m(CHY)262 351 y Ft(SlaMap)302
-b(-)43 b(Sequence)e(of)h(celestial)e(coordinate)g(conversions)262
-451 y(SpecMap)258 b(-)43 b(Sequence)e(of)h(spectral)f(coordinate)e
-(conversions)262 551 y(SphMap)302 b(-)43 b(Map)g(3-d)f(Cartesian)e(to)j
-(2-d)f(spherical)e(coordinates)262 650 y(SwitchMap)170
-b(-)43 b(Encapuslates)c(a)k(set)f(of)h(alternate)d(Mappings)262
-750 y(TimeMap)258 b(-)43 b(Sequence)e(of)h(time)g(coordinate)e
-(conversions)262 849 y(TranMap)258 b(-)43 b(Combine)e(fwd.)h(and)g
-(inv.)g(transformations)c(from)k(two)g(Mappings)262 949
-y(UnitMap)258 b(-)43 b(Unit)f(\(null\))f(Mapping)262
-1049 y(WcsMap)302 b(-)43 b(Implement)d(a)j(FITS-WCS)e(sky)h(projection)
-262 1148 y(WinMap)302 b(-)43 b(Match)f(windows)f(by)h(scaling)f(and)h
-(shifting)f(each)h(axis)262 1248 y(ZoomMap)258 b(-)43
-b(Zoom)f(coordinates)d(about)j(the)g(origin)p eop end
-%%Page: 191 201
-TeXDict begin 191 200 bop 3643 52 a FF(191)0 351 y Fz(B)134
-b(AST)44 b(F)-11 b(unction)44 b(Descriptions)p 0 578
-3780 12 v 0 709 a(astSet)1023 710 y Fe(Set)38 b(attribute)f(v)-7
-b(alues)38 b(for)g(an)h(Ob)7 b(ject)3420 709 y Fz(astSet)0
-873 y Fd(Description:)44 b Fj(This)39 b(function)h(assigns)d(a)i(set)g
-(of)g(attribute)g(v)-5 b(alues)39 b(to)g(an)f(Ob)5 b(ject,)42
-b(o)n(v)n(er-riding)36 b(an)n(y)j(previous)227 972 y(v)-5
-b(alues.)68 b(The)38 b(attributes)f(and)h(their)g(new)g(v)-5
-b(alues)37 b(are)g(sp)r(eci\014ed)i(via)e(a)g(c)n(haracter)f(string,)k
-(whic)n(h)e(should)227 1072 y(con)n(tain)27 b(a)g(comma-separated)f
-(list)h(of)h(the)g(form:)227 1190 y Ft(")p Fj(attribute)p
-Ft(_)p Fj(1)f(=)g(v)-5 b(alue)p Ft(_)p Fj(1,)27 b(attribute)p
-Ft(_)p Fj(2)f(=)i(v)-5 b(alue)p Ft(_)p Fj(2,)26 b(...)37
-b Ft(")227 1308 y Fj(where)22 b Ft(")p Fj(attribute)p
-Ft(_)p Fj(n)p Ft(")g Fj(sp)r(eci\014es)g(an)h(attribute)f(name,)i(and)e
-(the)h(v)-5 b(alue)23 b(to)f(the)h(righ)n(t)f(of)h(eac)n(h)e
-Ft(")p Fj(=)p Ft(")h Fj(sign)g(should)227 1408 y(b)r(e)36
-b(a)f(suitable)h(textual)f(represen)n(tation)f(of)h(the)h(v)-5
-b(alue)35 b(to)h(b)r(e)g(assigned.)59 b(This)35 b(v)-5
-b(alue)36 b(will)f(b)r(e)h(in)n(terpreted)227 1507 y(according)26
-b(to)i(the)g(attribute's)f(data)g(t)n(yp)r(e.)227 1626
-y(The)d(string)e(supplied)i(ma)n(y)f(also)f(con)n(tain)h
-Ft(")p Fj(prin)n(tf)p Ft(")p Fj(-st)n(yle)f(format)h(sp)r(eci\014ers,)g
-(iden)n(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(signs)g(in)g(the)
-227 1725 y(usual)g(w)n(a)n(y)-7 b(.)35 b(If)24 b(presen)n(t,)f(these)h
-(will)f(b)r(e)h(substituted)h(b)n(y)e(v)-5 b(alues)23
-b(supplied)h(as)e(additional)h(optional)g(argumen)n(ts)227
-1825 y(\(using)28 b(the)g(normal)e Ft(")p Fj(prin)n(tf)p
-Ft(")h Fj(rules\))h(b)r(efore)f(the)h(string)f(is)g(used.)0
-1961 y Fd(Synopsis:)121 b Ft(void)42 b(astSet\()e(AstObject)g
-Fi(\003)p Ft(this,)h(const)h(char)g Fi(\003)p Ft(settings,)d(...)86
-b(\))0 2098 y Fd(P)m(arameters:)259 2222 y(this)427 2321
-y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject.)259 2441
-y Fd(settings)427 2541 y Fj(P)n(oin)n(ter)27 b(to)i(a)g(n)n
-(ull-terminated)f(c)n(haracter)f(string)h(con)n(taining)g(a)g
-(comma-separated)f(list)i(of)f(attribute)427 2640 y(settings)g(in)f
-(the)h(form)g(describ)r(ed)f(ab)r(o)n(v)n(e.)259 2760
-y Fd(...)427 2860 y Fj(Optional)k(additional)g(argumen)n(ts)f(whic)n(h)
-h(supply)h(v)-5 b(alues)31 b(to)g(b)r(e)h(substituted)g(for)f(an)n(y)g
-Ft(")p Fj(prin)n(tf)p Ft(")p Fj(-st)n(yle)427 2960 y(format)c(sp)r
-(eci\014ers)g(that)h(app)r(ear)f(in)h(the)g Ft(")p Fj(settings)p
-Ft(")e Fj(string.)0 3109 y Fd(Class)31 b(Applicabilit)m(y:)259
-3232 y(Ob)5 b(ject)427 3332 y Fj(This)28 b(function)g(applies)f(to)h
-(all)f(Ob)5 b(jects.)0 3481 y Fd(Examples:)227 3606 y
-Fq(astSet\()46 b(map,)h Ft(")p Fq(Report)e(=)j(1,)f(Zoom)g(=)g(25.0)p
-Ft(")f Fq(\);)427 3704 y Fj(Sets)28 b(the)g(Rep)r(ort)f(attribute)h
-(for)f(Ob)5 b(ject)28 b Ft(")p Fj(map)p Ft(")e Fj(to)i(the)g(v)-5
-b(alue)27 b(1)g(and)h(the)g(Zo)r(om)f(attribute)h(to)f(25.0.)227
-3825 y Fq(astSet\()46 b(frame,)g Ft(")p Fq(Label\()g(\045d)h(\))g
-(=Offset)f(along)h(axis)f(\045d)p Ft(")p Fq(,)h(axis,)f(axis)h(\);)427
-3924 y Fj(Sets)25 b(the)g(Lab)r(el\(axis\))f(attribute)h(for)g(Ob)5
-b(ject)24 b Ft(")p Fj(frame)p Ft(")g Fj(to)g(a)g(suitable)h(string,)g
-(where)f(the)h(axis)f(n)n(um)n(b)r(er)427 4023 y(is)k(obtained)f(from)g
-Ft(")p Fj(axis)p Ft(")p Fj(,)f(a)i(v)-5 b(ariable)26
-b(of)i(t)n(yp)r(e)f(in)n(t.)227 4144 y Fq(astSet\()46
-b(frame,)g Ft(")p Fq(Title)g(=\045s)p Ft(")p Fq(,)g(mystring)g(\);)427
-4243 y Fj(Sets)28 b(the)g(Title)g(attribute)g(for)f(Ob)5
-b(ject)27 b Ft(")p Fj(frame)p Ft(")g Fj(to)g(the)h(con)n(ten)n(ts)f(of)
-g(the)h(string)f Ft(")p Fj(m)n(ystring)p Ft(")p Fj(.)0
-4392 y Fd(Notes:)340 4662 y Fi(\017)45 b Fj(A)n(ttribute)28
-b(names)g(are)e(not)i(case)f(sensitiv)n(e)g(and)g(ma)n(y)g(b)r(e)h
-(surrounded)e(b)n(y)i(white)g(space.)340 4782 y Fi(\017)45
-b Fj(White)33 b(space)e(ma)n(y)f(also)h(surround)g(attribute)g(v)-5
-b(alues,)33 b(where)e(it)h(will)g(generally)e(b)r(e)i(ignored)e
-(\(except)427 4881 y(for)24 b(string-v)-5 b(alued)23
-b(attributes)i(where)e(it)i(is)f(signi\014can)n(t)g(and)g(forms)g(part)
-f(of)i(the)f(v)-5 b(alue)25 b(to)f(b)r(e)g(assigned\).)340
-5001 y Fi(\017)45 b Fj(It)32 b(is)g(not)g(p)r(ossible)g(to)f(include)i
-(a)e(comma)g(directly)h(in)g(the)g(v)-5 b(alue)32 b(assigned)f(to)g(an)
-h(attribute)g(via)f(the)427 5101 y Ft(")p Fj(settings)p
-Ft(")j Fj(string.)56 b(T)-7 b(o)34 b(ac)n(hiev)n(e)f(this,)k(y)n(ou)d
-(should)g(use)g Ft(")p Fj(\045s)p Ft(")g Fj(format)f(and)i(supply)f
-(the)h(v)-5 b(alue)34 b(as)g(a)427 5201 y(separate)26
-b(additional)h(argumen)n(t)g(to)g(astSet)h(\(or)f(use)g(the)h(astSetC)g
-(function)g(instead\).)340 5321 y Fi(\017)45 b Fj(The)39
-b(same)g(pro)r(cedure)f(ma)n(y)g(b)r(e)h(adopted)g(if)g
-Ft(")p Fj(\045)p Ft(")g Fj(signs)f(are)g(to)h(b)r(e)g(included)h(and)e
-(are)g(not)h(to)g(b)r(e)427 5420 y(in)n(terpreted)28
-b(as)f(format)h(sp)r(eci\014ers)g(\(alternativ)n(ely)-7
-b(,)27 b(the)h Ft(")p Fj(prin)n(tf)p Ft(")g Fj(con)n(v)n(en)n(tion)f
-(of)h(writing)g Ft(")p Fj(\045\045)p Ft(")f Fj(ma)n(y)427
-5520 y(b)r(e)h(used\).)340 5640 y Fi(\017)45 b Fj(An)28
-b(error)e(will)i(result)f(if)h(an)g(attempt)g(is)f(made)h(to)f(set)h(a)
-f(v)-5 b(alue)27 b(for)g(a)h(read-only)e(attribute.)p
-eop end
-%%Page: 192 202
-TeXDict begin 192 201 bop 0 52 a FF(192)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astAddF)-11 b(rame)311 b Fe(Add)38 b(a)h(F)-10
-b(rame)38 b(to)g(a)h(F)-10 b(rameSet)38 b(to)1089 583
-y(de\014ne)h(a)g(new)g(co)s(ordinate)d(system)2991 483
-y Fz(astAddF)-11 b(rame)0 773 y Fd(Description:)44 b
-Fj(This)24 b(function)h(adds)f(a)g(new)g(F)-7 b(rame)23
-b(and)h(an)g(asso)r(ciated)f(Mapping)h(to)g(a)g(F)-7
-b(rameSet)23 b(so)h(as)f(to)h(de\014ne)227 873 y(a)33
-b(new)g(co)r(ordinate)f(system,)i(deriv)n(ed)e(from)h(one)g(whic)n(h)g
-(already)e(exists)i(within)h(the)f(F)-7 b(rameSet.)53
-b(The)34 b(new)227 972 y(F)-7 b(rame)27 b(then)h(b)r(ecomes)g(the)g(F)
--7 b(rameSet's)27 b(curren)n(t)g(F)-7 b(rame.)227 1098
-y(This)29 b(function)g(ma)n(y)f(also)g(b)r(e)h(used)f(to)h(merge)e(t)n
-(w)n(o)h(F)-7 b(rameSets,)29 b(or)e(to)i(app)r(end)g(extra)f(axes)f(to)
-i(ev)n(ery)e(F)-7 b(rame)227 1197 y(in)28 b(a)f(F)-7
-b(rameSet.)0 1348 y Fd(Synopsis:)121 b Ft(void)42 b(astAddFrame\()c
-(AstFrameSet)h Fi(\003)p Ft(this,)i(int)i(iframe,)e(AstMapping)e
-Fi(\003)p Ft(map,)i(AstFrame)g Fi(\003)p Ft(frame)227
-1448 y(\))0 1599 y Fd(P)m(arameters:)259 1737 y(this)427
-1836 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(F)-7 b(rameSet.)259
-1970 y Fd(iframe)427 2070 y Fj(The)35 b(index)g(of)g(the)g(F)-7
-b(rame)34 b(within)i(the)f(F)-7 b(rameSet)34 b(whic)n(h)h(describ)r(es)
-f(the)h(co)r(ordinate)f(system)g(up)r(on)427 2169 y(whic)n(h)d(the)f
-(new)h(one)f(is)g(to)g(b)r(e)h(based.)45 b(This)30 b(v)-5
-b(alue)31 b(should)f(lie)g(in)h(the)g(range)e(from)h(1)g(to)g(the)h(n)n
-(um)n(b)r(er)427 2269 y(of)36 b(F)-7 b(rames)35 b(already)g(in)h(the)g
-(F)-7 b(rameSet)36 b(\(as)f(giv)n(en)g(b)n(y)h(its)g(Nframe)f
-(attribute\).)62 b(As)36 b(a)g(sp)r(ecial)f(case,)427
-2369 y(AST)p Ft(__)p Fj(ALLFRAMES)25 b(ma)n(y)g(b)r(e)g(supplied,)h(in)
-f(whic)n(h)g(case)g(the)g(axes)f(de\014ned)i(b)n(y)e(the)i(supplied)f
-(F)-7 b(rame)427 2468 y(are)27 b(app)r(ended)h(to)f(ev)n(ery)g(F)-7
-b(rame)27 b(in)g(the)h(F)-7 b(rameSet)28 b(\(see)f(the)h(Notes)g
-(section)f(for)g(details\).)259 2602 y Fd(map)427 2701
-y Fj(P)n(oin)n(ter)33 b(to)g(a)h(Mapping)g(whic)n(h)g(describ)r(es)f
-(ho)n(w)g(to)h(con)n(v)n(ert)f(co)r(ordinates)f(from)i(the)g(old)g(co)r
-(ordinate)427 2801 y(system)20 b(\(describ)r(ed)h(b)n(y)f(the)h(F)-7
-b(rame)20 b(with)h(index)f Ft(")p Fj(iframe)p Ft(")p
-Fj(\))g(in)n(to)g(co)r(ordinates)f(in)i(the)g(new)f(system.)35
-b(The)427 2901 y(Mapping's)21 b(forw)n(ard)e(transformation)g(should)i
-(p)r(erform)g(this)g(con)n(v)n(ersion,)f(and)h(its)g(in)n(v)n(erse)f
-(transforma-)427 3000 y(tion)28 b(should)g(con)n(v)n(ert)e(in)j(the)f
-(opp)r(osite)g(direction.)37 b(The)28 b(supplied)g(Mapping)g(is)g
-(ignored)f(if)h(parameter)427 3100 y Ft(")p Fj(iframe)p
-Ft(")p Fj(is)e(equal)i(to)f(AST)p Ft(__)p Fj(ALLFRAMES.)259
-3234 y Fd(frame)427 3333 y Fj(P)n(oin)n(ter)k(to)i(a)f(F)-7
-b(rame)32 b(that)h(describ)r(es)e(the)i(new)g(co)r(ordinate)e(system.)
-52 b(An)n(y)32 b(class)g(of)g(F)-7 b(rame)32 b(ma)n(y)g(b)r(e)427
-3433 y(supplied)c(\(including)g(Regions)f(and)g(F)-7
-b(rameSets\).)427 3549 y(This)29 b(function)h(ma)n(y)e(also)h(b)r(e)g
-(used)g(to)g(merge)f(t)n(w)n(o)h(F)-7 b(rameSets)28 b(b)n(y)h
-(supplying)g(a)g(p)r(oin)n(ter)g(to)g(a)f(second)427
-3649 y(F)-7 b(rameSet)28 b(for)f(this)h(parameter)e(\(see)h(the)h
-(Notes)g(section)f(for)g(details\).)0 3813 y Fd(Notes:)340
-4097 y Fi(\017)45 b Fj(A)32 b(v)-5 b(alue)30 b(of)h(AST)p
-Ft(__)p Fj(BASE)g(or)f(AST)p Ft(__)p Fj(CURRENT)h(ma)n(y)f(b)r(e)h(giv)
-n(en)g(for)f(the)h Ft(")p Fj(iframe)p Ft(")f Fj(parameter)g(to)427
-4196 y(sp)r(ecify)e(the)g(base)f(F)-7 b(rame)27 b(or)g(the)h(curren)n
-(t)f(F)-7 b(rame)27 b(resp)r(ectiv)n(ely)-7 b(.)340 4330
-y Fi(\017)45 b Fj(This)25 b(function)g(sets)g(the)g(v)-5
-b(alue)25 b(of)f(the)h(Curren)n(t)f(attribute)h(for)f(the)i(F)-7
-b(rameSet)24 b(so)g(that)h(the)g(new)g(F)-7 b(rame)427
-4429 y(subsequen)n(tly)27 b(b)r(ecomes)h(the)g(curren)n(t)e(F)-7
-b(rame.)340 4563 y Fi(\017)45 b Fj(The)26 b(n)n(um)n(b)r(er)f(of)g
-(input)h(co)r(ordinate)e(v)-5 b(alues)25 b(accepted)g(b)n(y)g(the)g
-(supplied)h(Mapping)f(\(its)g(Nin)h(attribute\))427 4663
-y(m)n(ust)e(matc)n(h)f(the)h(n)n(um)n(b)r(er)f(of)g(axes)f(in)i(the)g
-(F)-7 b(rame)22 b(iden)n(ti\014ed)i(b)n(y)f(the)h Ft(")p
-Fj(iframe)p Ft(")e Fj(parameter.)34 b(Similarly)-7 b(,)427
-4762 y(the)25 b(n)n(um)n(b)r(er)g(of)f(output)h(co)r(ordinate)f(v)-5
-b(alues)24 b(generated)g(b)n(y)g(this)h(Mapping)f(\(its)h(Nout)g
-(attribute\))g(m)n(ust)427 4862 y(matc)n(h)j(the)g(n)n(um)n(b)r(er)f
-(of)h(axes)e(in)i(the)g(new)g(F)-7 b(rame.)340 4996 y
-Fi(\017)45 b Fj(As)23 b(a)e(sp)r(ecial)h(case,)h(if)f(a)g(p)r(oin)n
-(ter)g(to)g(a)f(F)-7 b(rameSet)22 b(is)g(giv)n(en)g(for)f(the)i
-Ft(")p Fj(frame)p Ft(")e Fj(parameter,)h(this)g(is)g(treated)427
-5095 y(as)j(a)h(request)f(to)g(merge)g(a)g(pair)g(of)h(F)-7
-b(rameSets.)36 b(This)26 b(is)f(done)h(b)n(y)f(app)r(ending)h(all)f
-(the)h(new)g(F)-7 b(rames)25 b(\(in)427 5195 y(the)31
-b Ft(")p Fj(frame)p Ft(")e Fj(F)-7 b(rameSet\))30 b(to)g(the)g
-(original)f(F)-7 b(rameSet,)31 b(while)f(preserving)f(their)h(order)e
-(and)i(retaining)427 5295 y(all)h(the)g(in)n(ter-relationships)d
-(\(i.e.)47 b(Mappings\))30 b(b)r(et)n(w)n(een)h(them.)46
-b(The)31 b(t)n(w)n(o)f(sets)g(of)h(F)-7 b(rames)30 b(are)f(in)n(ter-)
-427 5394 y(related)35 b(within)h(the)g(merged)f(F)-7
-b(rameSet)35 b(b)n(y)g(using)g(the)h(Mapping)f(supplied.)61
-b(This)36 b(should)f(con)n(v)n(ert)427 5494 y(b)r(et)n(w)n(een)29
-b(the)h(F)-7 b(rame)29 b(iden)n(ti\014ed)g(b)n(y)g(the)h
-Ft(")p Fj(iframe)p Ft(")e Fj(parameter)g(\(in)i(the)f(original)f(F)-7
-b(rameSet\))29 b(and)g(the)427 5593 y(curren)n(t)23 b(F)-7
-b(rame)23 b(of)h(the)g Ft(")p Fj(frame)p Ft(")e Fj(F)-7
-b(rameSet.)36 b(This)23 b(latter)h(F)-7 b(rame)23 b(b)r(ecomes)g(the)h
-(curren)n(t)f(F)-7 b(rame)23 b(in)h(the)427 5693 y(merged)j(F)-7
-b(rameSet.)p eop end
-%%Page: 193 203
-TeXDict begin 193 202 bop 3643 52 a FF(193)340 351 y
-Fi(\017)45 b Fj(As)22 b(another)e(sp)r(ecial)i(case,)f(if)h(a)f(v)-5
-b(alue)22 b(of)f(AST)p Ft(__)p Fj(ALLFRAMES)h(is)f(supplied)h(for)f
-(parameter)f Ft(")p Fj(iframe)p Ft(")p Fj(,)427 451 y(then)33
-b(the)g(supplied)g(Mapping)f(is)g(ignored,)h(and)f(the)h(axes)e
-(de\014ned)i(b)n(y)f(the)h(supplied)g(F)-7 b(rame)32
-b(are)f(ap-)427 551 y(p)r(ended)c(to)e(eac)n(h)g(F)-7
-b(rame)25 b(in)h(the)g(F)-7 b(rameSet.)36 b(In)26 b(detail,)g(eac)n(h)e
-(F)-7 b(rame)25 b(in)h(the)g(F)-7 b(rameSet)26 b(is)f(replaced)g(b)n(y)
-427 650 y(a)30 b(CmpF)-7 b(rame)30 b(con)n(taining)f(the)h(original)e
-(F)-7 b(rame)30 b(and)g(the)g(F)-7 b(rame)29 b(sp)r(eci\014ed)i(b)n(y)e
-(parameter)g Ft(")p Fj(frame)p Ft(")p Fj(.)427 750 y(In)d(addition,)g
-(eac)n(h)f(Mapping)g(in)h(the)f(F)-7 b(rameSet)26 b(is)f(replaced)g(b)n
-(y)g(a)g(CmpMap)h(con)n(taining)e(the)i(original)427
-849 y(Mapping)32 b(and)g(a)g(UnitMap)g(in)g(parallel.)50
-b(The)32 b(Nin)g(and)g(Nout)g(attributes)g(of)g(the)h(UnitMap)g(are)e
-(set)427 949 y(equal)g(to)g(the)h(n)n(um)n(b)r(er)f(of)g(axes)g(in)g
-(the)h(supplied)g(F)-7 b(rame.)47 b(Eac)n(h)30 b(new)i(CmpMap)f(is)g
-(simpli\014ed)h(using)427 1049 y(astSimplify)c(b)r(efore)g(b)r(eing)f
-(stored)g(in)h(the)g(F)-7 b(rameSet.)p 0 1304 3780 12
-v 0 1435 a Fz(astAngle)164 b Fe(Calculate)37 b(the)h(angle)g(subtended)
-h(b)m(y)f(t)m(w)m(o)f(p)s(oin)m(ts)h(at)1561 1550 y(a)h(third)f(p)s
-(oin)m(t)3267 1435 y Fz(astAngle)0 1794 y Fd(Description:)44
-b Fj(This)26 b(function)g(\014nds)g(the)g(angle)f(at)h(p)r(oin)n(t)f(B)
-h(b)r(et)n(w)n(een)g(the)g(line)f(joining)h(p)r(oin)n(ts)g(A)g(and)f
-(B,)h(and)f(the)227 1894 y(line)31 b(joining)g(p)r(oin)n(ts)f(C)h(and)g
-(B.)f(These)h(lines)f(will)h(in)g(fact)g(b)r(e)g(geo)r(desic)f(curv)n
-(es)f(appropriate)g(to)i(the)g(F)-7 b(rame)227 1994 y(in)28
-b(use.)37 b(F)-7 b(or)27 b(instance,)g(in)h(SkyF)-7 b(rame,)27
-b(they)h(will)g(b)r(e)g(great)e(circles.)0 2199 y Fd(Synopsis:)121
-b Ft(double)41 b(astAngle\()f(AstFrame)g Fi(\003)p Ft(this,)h(const)h
-(double)f(a[],)h(const)f(double)g(b[],)h(const)g(double)227
-2298 y(c[])h(\))0 2504 y Fd(P)m(arameters:)259 2696 y(this)427
-2795 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(F)-7 b(rame.)259
-2956 y Fd(a)427 3056 y Fj(An)32 b(arra)n(y)c(of)j(double,)h(with)g(one)
-e(elemen)n(t)i(for)e(eac)n(h)g(F)-7 b(rame)31 b(axis)f(\(Naxes)h
-(attribute\))g(con)n(taining)f(the)427 3155 y(co)r(ordinates)c(of)i
-(the)g(\014rst)f(p)r(oin)n(t.)259 3316 y Fd(b)427 3416
-y Fj(An)32 b(arra)n(y)c(of)j(double,)h(with)g(one)e(elemen)n(t)i(for)e
-(eac)n(h)g(F)-7 b(rame)31 b(axis)f(\(Naxes)h(attribute\))g(con)n
-(taining)f(the)427 3515 y(co)r(ordinates)c(of)i(the)g(second)f(p)r(oin)
-n(t.)259 3676 y Fd(c)427 3776 y Fj(An)32 b(arra)n(y)c(of)j(double,)h
-(with)g(one)e(elemen)n(t)i(for)e(eac)n(h)g(F)-7 b(rame)31
-b(axis)f(\(Naxes)h(attribute\))g(con)n(taining)f(the)427
-3875 y(co)r(ordinates)c(of)i(the)g(third)g(p)r(oin)n(t.)0
-4093 y Fd(Returned)k(V)-8 b(alue:)259 4285 y(astAngle)427
-4385 y Fj(The)29 b(angle)e(in)i(radians,)e(from)h(the)g(line)h(AB)f(to)
-g(the)h(line)f(CB.)g(If)h(the)g(F)-7 b(rame)27 b(is)i(2-dimensional,)e
-(it)h(will)427 4484 y(b)r(e)33 b(in)f(the)h(range)e($)p
-Fi(n)p Fj(pm)h Fi(n)p Fj(pi$,)h(and)f(p)r(ositiv)n(e)g(rotation)f(is)h
-(in)g(the)h(same)f(sense)g(as)f(rotation)g(from)h(the)427
-4584 y(p)r(ositiv)n(e)d(direction)g(of)g(axis)f(2)h(to)g(the)h(p)r
-(ositiv)n(e)e(direction)h(of)g(axis)g(1.)41 b(If)30 b(the)f(F)-7
-b(rame)29 b(has)f(more)h(than)g(2)427 4683 y(axes,)e(a)g(p)r(ositiv)n
-(e)g(v)-5 b(alue)28 b(will)g(alw)n(a)n(ys)d(b)r(e)j(returned)f(in)h
-(the)g(range)f(zero)f(to)i($)p Fi(n)p Fj(pi$.)0 4901
-y Fd(Notes:)340 5239 y Fi(\017)45 b Fj(A)27 b(v)-5 b(alue)26
-b(of)h(AST)p Ft(__)p Fj(BAD)f(will)h(also)e(b)r(e)i(returned)f(if)h(p)r
-(oin)n(ts)f(A)h(and)f(B)g(are)g(co-inciden)n(t,)g(or)f(if)i(p)r(oin)n
-(ts)g(B)427 5339 y(and)h(C)f(are)g(co-inciden)n(t.)340
-5500 y Fi(\017)45 b Fj(A)32 b(v)-5 b(alue)31 b(of)g(AST)p
-Ft(__)p Fj(BAD)h(will)f(also)f(b)r(e)i(returned)f(if)h(this)f(function)
-h(is)g(in)n(v)n(ok)n(ed)d(with)j(the)g(AST)g(error)427
-5599 y(status)c(set,)f(or)g(if)h(it)g(should)g(fail)f(for)g(an)n(y)g
-(reason.)p eop end
-%%Page: 194 204
-TeXDict begin 194 203 bop 0 52 a FF(194)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astAnn)l(ul)607 b Fe(Ann)m(ul)38 b(a)h(p)s(oin)m(ter)e(to)h
-(an)h(Ob)7 b(ject)605 b Fz(astAnn)l(ul)0 665 y Fd(Description:)44
-b Fj(This)31 b(function)f(ann)n(uls)g(a)g(p)r(oin)n(ter)g(to)g(an)g(Ob)
-5 b(ject)30 b(so)g(that)h(it)f(is)g(no)g(longer)f(recognised)g(as)h(a)g
-(v)-5 b(alid)227 765 y(p)r(oin)n(ter)37 b(b)n(y)h(the)g(AST)g(library)
--7 b(.)66 b(An)n(y)37 b(resources)f(asso)r(ciated)g(with)i(the)g(p)r
-(oin)n(ter)f(are)g(released)f(and)i(made)227 864 y(a)n(v)-5
-b(ailable)27 b(for)g(re-use.)227 987 y(This)33 b(function)h(also)e
-(decremen)n(ts)h(the)g(Ob)5 b(ject's)33 b(RefCoun)n(t)g(attribute)h(b)n
-(y)f(one.)53 b(If)33 b(this)h(attribute)f(reac)n(hes)227
-1087 y(zero)27 b(\(whic)n(h)h(happ)r(ens)f(when)h(the)g(last)f(p)r(oin)
-n(ter)g(to)h(the)g(Ob)5 b(ject)27 b(is)h(ann)n(ulled\),)g(then)g(the)g
-(Ob)5 b(ject)27 b(is)h(deleted.)0 1233 y Fd(Synopsis:)121
-b Ft(AstObject)40 b Fi(\003)p Ft(astAnnul\()f(AstObject)h
-Fi(\003)p Ft(this)h(\))0 1379 y Fd(P)m(arameters:)259
-1513 y(this)427 1612 y Fj(The)28 b(Ob)5 b(ject)27 b(p)r(oin)n(ter)h(to)
-f(b)r(e)h(ann)n(ulled.)0 1771 y Fd(Class)j(Applicabilit)m(y:)259
-1904 y(Ob)5 b(ject)427 2004 y Fj(This)28 b(function)g(applies)f(to)h
-(all)f(Ob)5 b(jects.)0 2162 y Fd(Returned)32 b(V)-8 b(alue:)259
-2295 y(astAnn)m(ul\(\))427 2395 y Fj(A)28 b(n)n(ull)g(Ob)5
-b(ject)27 b(p)r(oin)n(ter)h(\(AST)p Ft(__)p Fj(NULL\))g(is)f(alw)n(a)n
-(ys)f(returned.)0 2554 y Fd(Notes:)340 2833 y Fi(\017)45
-b Fj(This)27 b(function)h(will)f(attempt)h(to)f(ann)n(ul)g(the)h(p)r
-(oin)n(ter)e(ev)n(en)h(if)h(the)f(Ob)5 b(ject)27 b(is)g(not)g(curren)n
-(tly)g(lo)r(c)n(k)n(ed)f(b)n(y)427 2932 y(the)i(calling)f(thread)g
-(\(see)h(astLo)r(c)n(k\).)340 3062 y Fi(\017)45 b Fj(This)38
-b(function)g(attempts)g(to)g(execute)g(ev)n(en)f(if)h(the)g(AST)g
-(error)e(status)i(is)f(set)h(on)f(en)n(try)-7 b(,)40
-b(although)427 3162 y(no)34 b(further)f(error)f(rep)r(ort)h(will)h(b)r
-(e)g(made)g(if)g(it)g(subsequen)n(tly)f(fails)h(under)f(these)h
-(circumstances.)54 b(In)427 3261 y(particular,)27 b(it)i(will)f(fail)g
-(if)h(the)f(p)r(oin)n(ter)g(suppled)g(is)g(not)g(v)-5
-b(alid,)28 b(but)h(this)f(will)g(only)g(b)r(e)g(rep)r(orted)g(if)g(the)
-427 3361 y(error)e(status)h(is)h(clear)e(on)i(en)n(try)-7
-b(.)p 0 3554 V 0 3685 a Fz(astAxAngle)163 b Fe(Returns)38
-b(the)h(angle)f(from)f(an)h(axis,)g(to)g(a)h(line)1402
-3800 y(through)e(t)m(w)m(o)g(p)s(oin)m(ts)3094 3685 y
-Fz(astAxAngle)0 3982 y Fd(Description:)44 b Fj(This)32
-b(function)h(\014nds)g(the)f(angle,)h(as)e(seen)h(from)g(p)r(oin)n(t)g
-(A,)h(b)r(et)n(w)n(een)f(the)g(p)r(ositiv)n(e)g(direction)g(of)g(a)227
-4082 y(sp)r(eci\014ed)c(axis,)f(and)g(the)h(geo)r(desic)f(curv)n(e)g
-(joining)g(p)r(oin)n(t)h(A)g(to)f(p)r(oin)n(t)h(B.)0
-4228 y Fd(Synopsis:)121 b Ft(double)41 b(astAxAngle\()e(AstFrame)h
-Fi(\003)p Ft(this,)h(const)h(double)f(a[],)h(const)f(double)g(b[],)h
-(int)h(axis)227 4328 y(\))0 4474 y Fd(P)m(arameters:)259
-4607 y(this)427 4707 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)259 4836 y Fd(a)427 4936 y Fj(An)32 b(arra)n(y)c(of)j(double,)h
-(with)g(one)e(elemen)n(t)i(for)e(eac)n(h)g(F)-7 b(rame)31
-b(axis)f(\(Naxes)h(attribute\))g(con)n(taining)f(the)427
-5035 y(co)r(ordinates)c(of)i(the)g(\014rst)f(p)r(oin)n(t.)259
-5165 y Fd(b)427 5265 y Fj(An)32 b(arra)n(y)c(of)j(double,)h(with)g(one)
-e(elemen)n(t)i(for)e(eac)n(h)g(F)-7 b(rame)31 b(axis)f(\(Naxes)h
-(attribute\))g(con)n(taining)f(the)427 5364 y(co)r(ordinates)c(of)i
-(the)g(second)f(p)r(oin)n(t.)259 5494 y Fd(axis)427 5593
-y Fj(The)d(n)n(um)n(b)r(er)g(of)f(the)h(F)-7 b(rame)24
-b(axis)f(from)g(whic)n(h)h(the)g(angle)f(is)g(to)h(b)r(e)g(measured)f
-(\(axis)g(n)n(um)n(b)r(ering)g(starts)427 5693 y(at)28
-b(1)f(for)g(the)h(\014rst)f(axis\).)p eop end
-%%Page: 195 205
-TeXDict begin 195 204 bop 3643 52 a FF(195)0 351 y Fd(Returned)32
-b(V)-8 b(alue:)259 522 y(astAxAngle)427 622 y Fj(The)29
-b(angle)g(in)g(radians,)f(from)h(the)g(p)r(ositiv)n(e)g(direction)f(of)
-h(the)h(sp)r(eci\014ed)f(axis,)g(to)g(the)g(line)g(AB.)h(If)f(the)427
-722 y(F)-7 b(rame)28 b(is)g(2-dimensional,)g(it)g(will)h(b)r(e)g(in)f
-(the)h(range)e([-PI/2,+PI/2],)e(and)j(p)r(ositiv)n(e)g(rotation)f(is)i
-(in)f(the)427 821 y(same)j(sense)f(as)g(rotation)g(from)g(the)i(p)r
-(ositiv)n(e)e(direction)g(of)h(axis)f(2)h(to)f(the)i(p)r(ositiv)n(e)e
-(direction)h(of)f(axis)427 921 y(1.)43 b(If)30 b(the)g(F)-7
-b(rame)30 b(has)f(more)g(than)h(2)f(axes,)g(a)h(p)r(ositiv)n(e)f(v)-5
-b(alue)30 b(will)g(alw)n(a)n(ys)d(b)r(e)k(returned)e(in)h(the)g(range)
-427 1021 y(zero)d(to)g(PI.)0 1217 y Fd(Notes:)340 1534
-y Fi(\017)45 b Fj(The)26 b(geo)r(desic)e(curv)n(e)h(used)g(b)n(y)g
-(this)h(function)g(is)f(the)h(path)f(of)h(shortest)e(distance)i(b)r(et)
-n(w)n(een)f(t)n(w)n(o)g(p)r(oin)n(ts,)427 1634 y(as)i(de\014ned)h(b)n
-(y)f(the)h(astDistance)g(function.)340 1784 y Fi(\017)45
-b Fj(This)19 b(function)g(will)g(return)f Ft(")p Fj(bad)p
-Ft(")g Fj(co)r(ordinate)g(v)-5 b(alues)18 b(\(AST)p Ft(__)p
-Fj(BAD\))i(if)f(an)n(y)f(of)g(the)i(input)f(co)r(ordinates)427
-1884 y(has)27 b(this)h(v)-5 b(alue,)28 b(or)e(if)j(the)f(require)e(p)r
-(osition)h(angle)g(is)h(unde\014ned.)p 0 2118 3780 12
-v 0 2249 a Fz(astAxDistance)256 b Fe(Find)39 b(the)g(distance)e(b)s(et)
-m(w)m(een)h(t)m(w)m(o)1616 2349 y(axis)g(v)-7 b(alues)2929
-2249 y Fz(astAxDistance)0 2549 y Fd(Description:)44 b
-Fj(This)32 b(function)h(returns)e(a)h(signed)f(v)-5 b(alue)32
-b(represen)n(ting)e(the)j(axis)e(incremen)n(t)h(from)f(axis)g(v)-5
-b(alue)32 b(v1)227 2649 y(to)c(axis)f(v)-5 b(alue)27
-b(v2.)227 2791 y(F)-7 b(or)24 b(a)g(simple)h(F)-7 b(rame,)25
-b(this)g(is)f(a)h(trivial)f(op)r(eration)f(returning)h(the)h
-(di\013erence)g(b)r(et)n(w)n(een)f(the)h(t)n(w)n(o)f(axis)g(v)-5
-b(alues.)227 2891 y(But)28 b(for)f(other)g(deriv)n(ed)g(classes)f(of)i
-(F)-7 b(rame)27 b(\(suc)n(h)h(as)e(a)i(SkyF)-7 b(rame\))27
-b(this)h(is)f(not)h(the)g(case.)0 3075 y Fd(Synopsis:)121
-b Ft(double)41 b(astAxDistance\()d(AstFrame)i Fi(\003)p
-Ft(this,)h(int)h(axis,)g(double)f(v1,)h(double)f(v2)i(\))0
-3259 y Fd(P)m(arameters:)259 3430 y(this)427 3530 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rame.)259 3680 y Fd(axis)427 3779
-y Fj(The)28 b(index)g(of)f(the)h(axis)f(to)g(whic)n(h)h(the)g(supplied)
-g(v)-5 b(alues)27 b(refer.)36 b(The)28 b(\014rst)f(axis)g(has)g(index)h
-(1.)259 3930 y Fd(v1)427 4029 y Fj(The)g(\014rst)f(axis)g(v)-5
-b(alue.)259 4179 y Fd(v2)427 4279 y Fj(The)28 b(second)f(axis)g(v)-5
-b(alue.)0 4476 y Fd(Returned)32 b(V)-8 b(alue:)259 4647
-y(astAxDistance)427 4746 y Fj(The)28 b(distance)f(from)h(the)f(\014rst)
-h(to)f(the)h(second)f(axis)g(v)-5 b(alue.)0 4943 y Fd(Notes:)340
-5260 y Fi(\017)45 b Fj(This)33 b(function)g(will)f(return)g(a)g
-Ft(")p Fj(bad)p Ft(")f Fj(result)h(v)-5 b(alue)33 b(\(AST)p
-Ft(__)p Fj(BAD\))g(if)f(an)n(y)g(of)g(the)h(input)g(v)-5
-b(alues)32 b(has)427 5360 y(this)c(v)-5 b(alue.)340 5510
-y Fi(\017)45 b Fj(A)27 b Ft(")p Fj(bad)p Ft(")e Fj(v)-5
-b(alue)26 b(will)g(also)f(b)r(e)i(returned)e(if)i(this)f(function)h(is)
-f(in)n(v)n(ok)n(ed)f(with)h(the)h(AST)f(error)f(status)h(set,)427
-5610 y(or)h(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-eop end
-%%Page: 196 206
-TeXDict begin 196 205 bop 0 52 a FF(196)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astAxO\013set)209 b Fe(Add)39 b(an)g(incremen)m(t)e(on)m(to)
-g(a)i(supplied)f(axis)1758 598 y(v)-7 b(alue)3090 483
-y Fz(astAxO\013set)0 769 y Fd(Description:)44 b Fj(This)39
-b(function)g(returns)f(an)g(axis)g(v)-5 b(alue)39 b(formed)f(b)n(y)g
-(adding)h(a)f(signed)g(axis)g(incremen)n(t)g(on)n(to)g(a)227
-868 y(supplied)28 b(axis)f(v)-5 b(alue.)227 996 y(F)e(or)29
-b(a)h(simple)g(F)-7 b(rame,)29 b(this)i(is)e(a)h(trivial)f(op)r
-(eration)f(returning)h(the)i(sum)e(of)h(the)g(t)n(w)n(o)f(supplied)h(v)
--5 b(alues.)43 b(But)227 1095 y(for)27 b(other)g(deriv)n(ed)g(classes)f
-(of)i(F)-7 b(rame)27 b(\(suc)n(h)h(as)f(a)g(SkyF)-7 b(rame\))27
-b(this)h(is)f(not)h(the)g(case.)0 1250 y Fd(Synopsis:)121
-b Ft(double)41 b(astAxOffset\()e(AstFrame)h Fi(\003)p
-Ft(this,)h(int)h(axis,)g(double)f(v1,)h(double)f(dist)h(\))0
-1405 y Fd(P)m(arameters:)259 1547 y(this)427 1647 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rame.)259 1782 y Fd(axis)427 1882
-y Fj(The)28 b(index)g(of)f(the)h(axis)f(to)g(whic)n(h)h(the)g(supplied)
-g(v)-5 b(alues)27 b(refer.)36 b(The)28 b(\014rst)f(axis)g(has)g(index)h
-(1.)259 2018 y Fd(v1)427 2117 y Fj(The)g(original)e(axis)h(v)-5
-b(alue.)259 2253 y Fd(dist)427 2353 y Fj(The)28 b(axis)f(incremen)n(t)g
-(to)h(add)f(to)g(the)h(original)e(axis)h(v)-5 b(alue.)0
-2520 y Fd(Returned)32 b(V)-8 b(alue:)259 2662 y(astAxO\013set)427
-2762 y Fj(The)28 b(incremen)n(ted)f(axis)g(v)-5 b(alue.)0
-2929 y Fd(Notes:)340 3217 y Fi(\017)45 b Fj(This)33 b(function)g(will)f
-(return)g(a)g Ft(")p Fj(bad)p Ft(")f Fj(result)h(v)-5
-b(alue)33 b(\(AST)p Ft(__)p Fj(BAD\))g(if)f(an)n(y)g(of)g(the)h(input)g
-(v)-5 b(alues)32 b(has)427 3317 y(this)c(v)-5 b(alue.)340
-3452 y Fi(\017)45 b Fj(A)27 b Ft(")p Fj(bad)p Ft(")e
-Fj(v)-5 b(alue)26 b(will)g(also)f(b)r(e)i(returned)e(if)i(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)f(with)h(the)h(AST)f(error)f(status)h
-(set,)427 3552 y(or)h(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)
-p 0 3757 V 0 3889 a Fz(astBegin)1229 3887 y Fe(Begin)38
-b(a)g(new)h(AST)f(con)m(text)3272 3889 y Fz(astBegin)0
-4083 y Fd(Description:)44 b Fj(This)27 b(macro)e(in)n(v)n(ok)n(es)f(a)i
-(function)h(to)f(b)r(egin)g(a)g(new)h(AST)f(con)n(text.)36
-b(An)n(y)27 b(Ob)5 b(ject)26 b(p)r(oin)n(ters)f(created)227
-4183 y(within)32 b(this)f(con)n(text)f(will)h(b)r(e)g(ann)n(ulled)f
-(when)h(it)g(is)f(later)g(ended)h(using)g(astEnd)f(\(just)h(as)f(if)h
-(astAnn)n(ul)g(had)227 4282 y(b)r(een)38 b(in)n(v)n(ok)n(ed\),)h
-(unless)e(they)g(ha)n(v)n(e)g(\014rst)g(b)r(een)g(exp)r(orted)g(using)g
-(astExp)r(ort)f(or)h(rendered)f(exempt)i(using)227 4382
-y(astExempt.)58 b(If)35 b(ann)n(ulling)f(a)g(p)r(oin)n(ter)h(causes)e
-(an)i(Ob)5 b(ject's)34 b(RefCoun)n(t)h(attribute)g(to)f(fall)h(to)g
-(zero)e(\(whic)n(h)227 4481 y(happ)r(ens)28 b(when)g(the)g(last)f(p)r
-(oin)n(ter)g(to)h(it)g(is)f(ann)n(ulled\),)h(then)g(the)g(Ob)5
-b(ject)27 b(will)h(b)r(e)g(deleted.)0 4636 y Fd(Synopsis:)121
-b Ft(void)42 b(astBegin)0 4792 y Fd(Class)31 b(Applicabilit)m(y:)259
-4933 y(Ob)5 b(ject)427 5033 y Fj(This)28 b(macro)e(applies)h(to)h(all)f
-(Ob)5 b(jects.)0 5201 y Fd(Notes:)340 5489 y Fi(\017)45
-b Fj(astBegin)27 b(attempts)h(to)f(execute)h(ev)n(en)f(if)h(the)g(AST)g
-(error)e(status)h(is)h(set)f(on)g(en)n(try)-7 b(.)340
-5624 y Fi(\017)45 b Fj(Con)n(texts)27 b(delimited)i(b)n(y)e(astBegin)g
-(and)g(astEnd)g(ma)n(y)g(b)r(e)h(nested)g(to)f(an)n(y)g(depth.)p
-eop end
-%%Page: 197 207
-TeXDict begin 197 206 bop 3643 52 a FF(197)p 0 351 3780
-12 v 0 483 a Fz(astBorder)156 b Fe(Dra)m(w)38 b(a)g(b)s(order)g(around)
-g(v)-7 b(alid)38 b(regions)f(of)i(a)f(Plot)154 b Fz(astBorder)0
-678 y Fd(Description:)44 b Fj(This)32 b(function)h(dra)n(ws)e(a)h
-(\(line\))h(b)r(order)e(around)g(regions)g(of)h(the)g(plotting)h(area)d
-(of)i(a)g(Plot)g(whic)n(h)227 778 y(corresp)r(ond)d(to)h(v)-5
-b(alid,)30 b(unclipp)r(ed)h(ph)n(ysical)f(co)r(ordinates.)42
-b(F)-7 b(or)30 b(example,)g(when)g(plotting)g(using)g(an)g(all-sky)227
-878 y(map)g(pro)5 b(jection,)29 b(this)h(function)g(could)f(b)r(e)h
-(used)g(to)f(dra)n(w)g(the)h(b)r(oundary)f(of)g(the)h(celestial)f
-(sphere)g(when)h(it)227 977 y(is)e(pro)5 b(jected)27
-b(on)g(to)g(the)h(plotting)g(surface.)227 1103 y(If)k(the)g(en)n(tire)f
-(plotting)g(area)f(con)n(tains)h(v)-5 b(alid,)32 b(unclipp)r(ed)g(ph)n
-(ysical)f(co)r(ordinates,)g(then)h(the)g(b)r(oundary)e(will)227
-1202 y(just)e(b)r(e)g(a)g(rectangular)d(b)r(o)n(x)i(around)g(the)h
-(edges)f(of)g(the)h(plotting)g(area.)227 1328 y(If)19
-b(the)g(Plot)f(is)h(a)f(Plot3D,)g(this)h(metho)r(d)g(is)f(applied)h
-(individually)g(to)f(eac)n(h)g(of)g(the)h(three)g(2D)f(Plots)g
-(encapsulated)227 1427 y(within)23 b(the)g(Plot3D)f(\(eac)n(h)f(of)i
-(these)f(Plots)f(corresp)r(onds)g(to)h(a)g(single)g(2D)g(plane)g(in)h
-(the)f(3D)h(graphics)d(system\).)227 1527 y(In)36 b(addition,)i(if)e
-(the)g(en)n(tire)f(plotting)h(v)n(olume)e(has)i(v)-5
-b(alid)35 b(co)r(ordinates)f(in)i(the)g(3D)g(curren)n(t)f(F)-7
-b(rame)35 b(of)g(the)227 1627 y(Plot3D,)g(then)i(additional)e(lines)g
-(are)g(dra)n(wn)g(along)f(the)i(edges)f(of)h(the)g(3D)f(plotting)h(v)n
-(olume)f(so)g(that)h(the)227 1726 y(en)n(tire)27 b(plotting)h(v)n
-(olume)f(is)h(enclosed)e(within)j(a)e(cub)r(oid)h(grid.)0
-1878 y Fd(Synopsis:)121 b Ft(int)42 b(astBorder\()e(AstPlot)g
-Fi(\003)p Ft(this)i(\))0 2029 y Fd(P)m(arameters:)259
-2167 y(this)427 2267 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)0
-2431 y Fd(Returned)k(V)-8 b(alue:)259 2569 y(astBorder\(\))427
-2669 y Fj(Zero)36 b(is)i(returned)f(if)h(the)f(plotting)h(space)e(is)i
-(completely)f(\014lled)h(b)n(y)f(v)-5 b(alid,)40 b(unclipp)r(ed)e(ph)n
-(ysical)e(co-)427 2768 y(ordinates)e(\(so)g(that)h(only)f(a)h
-(rectangular)d(b)r(o)n(x)j(w)n(as)e(dra)n(wn)h(around)g(the)h(edge\).)
-58 b(Otherwise,)35 b(one)g(is)427 2868 y(returned.)0
-3032 y Fd(Notes:)340 3316 y Fi(\017)45 b Fj(A)29 b(v)-5
-b(alue)29 b(of)f(zero)g(will)h(b)r(e)g(returned)f(if)h(this)g(function)
-g(is)f(in)n(v)n(ok)n(ed)f(with)j(the)f(AST)g(error)d(status)j(set,)f
-(or)427 3416 y(if)g(it)g(should)g(fail)f(for)h(an)n(y)e(reason.)340
-3549 y Fi(\017)45 b Fj(An)23 b(error)e(results)h(if)i(either)e(the)h
-(curren)n(t)f(F)-7 b(rame)22 b(or)g(the)h(base)f(F)-7
-b(rame)23 b(of)f(the)h(Plot)g(is)f(not)h(2-dimensional)427
-3649 y(or)k(\(for)g(a)h(Plot3D\))f(3-dimensional.)340
-3783 y Fi(\017)45 b Fj(An)30 b(error)d(also)g(results)i(if)g(the)g
-(transformation)f(b)r(et)n(w)n(een)h(the)g(base)f(and)h(curren)n(t)f(F)
--7 b(rames)28 b(of)h(the)g(Plot)427 3882 y(is)f(not)f(de\014ned)h
-(\(i.e.)38 b(the)28 b(Plot's)e(T)-7 b(ranF)g(orw)n(ard)25
-b(attribute)j(is)g(zero\).)p 0 4084 V 0 4215 a Fz(astBoundingBo)l(x)234
-b Fe(Return)39 b(a)f(b)s(ounding)g(b)s(o)m(x)g(for)1221
-4330 y(previously)f(dra)m(wn)g(graphics)2812 4215 y Fz(astBoundingBo)l
-(x)0 4521 y Fd(Description:)44 b Fj(This)27 b(function)f(returns)g(the)
-h(b)r(ounds)f(of)g(a)g(b)r(o)n(x)g(whic)n(h)g(just)h(encompasess)d(the)
-j(graphics)e(pro)r(duced)227 4620 y(b)n(y)c(the)g(previous)f(call)h(to)
-g(an)n(y)f(of)h(the)h(Plot)e(metho)r(ds)h(whic)n(h)g(pro)r(duce)g
-(graphical)f(output.)35 b(If)21 b(no)g(suc)n(h)g(previous)227
-4720 y(call)26 b(has)f(y)n(et)g(b)r(een)i(made,)f(or)e(if)j(the)f(call)
-f(failed)h(for)f(an)n(y)g(reason,)g(then)h(the)g(b)r(ounding)g(b)r(o)n
-(x)g(returned)f(b)n(y)g(this)227 4819 y(function)j(is)g(unde\014ned.)0
-4971 y Fd(Synopsis:)121 b Ft(void)42 b(astBoundingBox\()37
-b(AstPlot)k Fi(\003)p Ft(this,)g(float)g(lbnd[2],)g(float)g(ubnd[2])g
-(\))0 5122 y Fd(P)m(arameters:)259 5260 y(this)427 5360
-y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259 5494 y Fd(lbnd)427
-5593 y Fj(A)e(t)n(w)n(o)f(elemen)n(t)g(arra)n(y)e(in)j(whic)n(h)f(is)g
-(returned)g(the)h(lo)n(w)n(er)e(limits)i(of)f(the)h(b)r(ounding)f(b)r
-(o)n(x)g(on)g(eac)n(h)g(of)g(the)427 5693 y(t)n(w)n(o)i(axes)g(of)g
-(the)h(graphics)e(co)r(ordinate)h(system)g(\(the)h(base)f(F)-7
-b(rame)28 b(of)f(the)h(Plot\).)p eop end
-%%Page: 198 208
-TeXDict begin 198 207 bop 0 52 a FF(198)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(ubnd)427
-451 y Fj(A)j(t)n(w)n(o)f(elemen)n(t)g(arra)n(y)e(in)j(whic)n(h)f(is)h
-(returned)f(the)h(upp)r(er)f(limits)h(of)g(the)f(b)r(ounding)h(b)r(o)n
-(x)f(on)g(eac)n(h)g(of)427 551 y(the)c(t)n(w)n(o)f(axes)g(of)g(the)h
-(graphics)e(co)r(ordinate)h(system)g(\(the)h(base)f(F)-7
-b(rame)27 b(of)h(the)g(Plot\).)0 723 y Fd(Notes:)340
-1017 y Fi(\017)45 b Fj(An)28 b(error)e(results)h(if)h(the)g(base)f(F)-7
-b(rame)27 b(of)h(the)g(Plot)f(is)g(not)h(2-dimensional.)p
-0 1227 3780 12 v 0 1357 a Fz(astBo)l(x)1152 b Fe(Create)38
-b(a)g(Bo)m(x)1151 b Fz(astBo)l(x)0 1534 y Fd(Description:)44
-b Fj(This)28 b(function)g(creates)f(a)g(new)g(Bo)n(x)g(and)g
-(optionally)g(initialises)g(its)h(attributes.)227 1664
-y(The)35 b(Bo)n(x)f(class)g(implemen)n(ts)i(a)e(Region)g(whic)n(h)h
-(represen)n(ts)f(a)g(b)r(o)n(x)h(with)g(sides)g(parallel)f(to)h(the)g
-(axes)f(of)h(a)227 1764 y(F)-7 b(rame)36 b(\(i.e.)64
-b(an)36 b(area)f(whic)n(h)i(encloses)e(a)h(giv)n(en)g(range)f(of)h(v)-5
-b(alues)37 b(on)f(eac)n(h)f(axis\).)63 b(A)37 b(Bo)n(x)f(is)g(similar)g
-(to)227 1863 y(an)h(In)n(terv)-5 b(al,)40 b(the)d(only)g(real)g
-(di\013erence)g(b)r(eing)g(that)h(the)g(In)n(terv)-5
-b(al)36 b(class)h(allo)n(ws)f(some)h(axis)f(limits)i(to)f(b)r(e)227
-1963 y(unsp)r(eci\014ed.)g(Note,)26 b(a)e(Bo)n(x)h(will)g(only)g(lo)r
-(ok)f(lik)n(e)h(a)g(b)r(o)n(x)g(if)g(the)h(F)-7 b(rame)25
-b(geometry)f(is)h(appro)n(ximately)e(\015at.)36 b(F)-7
-b(or)227 2062 y(instance,)34 b(a)e(Bo)n(x)f(cen)n(tred)h(close)f(to)h
-(a)g(p)r(ole)h(in)f(a)g(SkyF)-7 b(rame)32 b(will)g(lo)r(ok)g(more)f
-(lik)n(e)h(a)g(fan)h(than)f(a)g(b)r(o)n(x)g(\(the)227
-2162 y(P)n(olygon)26 b(class)g(can)i(b)r(e)g(used)f(to)h(create)e(a)h
-(b)r(o)n(x-lik)n(e)g(region)f(close)h(to)g(a)h(p)r(ole\).)0
-2322 y Fd(Synopsis:)121 b Ft(AstBox)41 b Fi(\003)p Ft(astBox\()f
-(AstFrame)g Fi(\003)p Ft(frame,)h(int)h(form,)g(const)f(double)h
-(point1[],)d(const)j(double)227 2422 y(point2[],)e(AstRegion)g
-Fi(\003)p Ft(unc,)h(const)h(char)g Fi(\003)p Ft(options,)e(...)86
-b(\))0 2582 y Fd(P)m(arameters:)259 2730 y(frame)427
-2829 y Fj(A)29 b(p)r(oin)n(ter)g(to)f(the)i(F)-7 b(rame)28
-b(in)h(whic)n(h)g(the)g(region)e(is)i(de\014ned.)41 b(A)29
-b(deep)g(cop)n(y)f(is)g(tak)n(en)g(of)h(the)g(supplied)427
-2929 y(F)-7 b(rame.)71 b(This)39 b(means)f(that)h(an)n(y)g(subsequen)n
-(t)f(c)n(hanges)g(made)h(to)f(the)i(F)-7 b(rame)38 b(using)h(the)g
-(supplied)427 3028 y(p)r(oin)n(ter)27 b(will)h(ha)n(v)n(e)f(no)g
-(e\013ect)h(the)g(Region.)259 3167 y Fd(form)427 3266
-y Fj(Indicates)k(ho)n(w)g(the)g(b)r(o)n(x)g(is)g(describ)r(ed)f(b)n(y)h
-(the)h(remaining)e(parameters.)48 b(A)33 b(v)-5 b(alue)32
-b(of)g(zero)f(indicates)427 3366 y(that)d(the)g(b)r(o)n(x)f(is)h(sp)r
-(eci\014ed)g(b)n(y)f(a)g(cen)n(tre)g(p)r(osition)h(and)f(a)h(corner)e
-(p)r(osition.)36 b(A)28 b(v)-5 b(alue)28 b(of)g(one)f(indicates)427
-3466 y(that)h(the)g(b)r(o)n(x)f(is)h(sp)r(eci\014ed)g(b)n(y)f(a)g(t)n
-(w)n(o)g(opp)r(osite)g(corner)f(p)r(ositions.)259 3604
-y Fd(p)s(oin)m(t1)427 3703 y Fj(An)35 b(arra)n(y)d(of)i(double,)i(with)
-e(one)g(elemen)n(t)g(for)g(eac)n(h)f(F)-7 b(rame)34 b(axis)f(\(Naxes)h
-(attribute\).)57 b(If)35 b Ft(")p Fj(form)p Ft(")e Fj(is)427
-3803 y(zero,)i(this)f(arra)n(y)e(should)h(con)n(tain)h(the)g(co)r
-(ordinates)f(at)g(the)i(cen)n(tre)e(of)h(the)g(b)r(o)n(x.)56
-b(If)34 b Ft(")p Fj(form)p Ft(")f Fj(is)h(one,)427 3903
-y(it)f(should)f(con)n(tain)f(the)i(co)r(ordinates)d(at)i(the)h(corner)e
-(of)h(the)g(b)r(o)n(x)g(whic)n(h)g(is)g(diagonally)e(opp)r(osite)i(the)
-427 4002 y(corner)26 b(sp)r(eci\014ed)i(b)n(y)g Ft(")p
-Fj(p)r(oin)n(t2)p Ft(")p Fj(.)259 4141 y Fd(p)s(oin)m(t2)427
-4240 y Fj(An)k(arra)n(y)c(of)j(double,)h(with)g(one)e(elemen)n(t)i(for)
-e(eac)n(h)g(F)-7 b(rame)31 b(axis)f(\(Naxes)h(attribute\))g(con)n
-(taining)f(the)427 4340 y(co)r(ordinates)c(at)i(an)n(y)f(corner)f(of)h
-(the)h(b)r(o)n(x.)259 4478 y Fd(unc)427 4578 y Fj(An)33
-b(optional)e(p)r(oin)n(ter)h(to)g(an)g(existing)g(Region)f(whic)n(h)h
-(sp)r(eci\014es)g(the)h(uncertain)n(ties)e(asso)r(ciated)g(with)427
-4677 y(the)j(b)r(oundary)f(of)g(the)h(Bo)n(x)f(b)r(eing)g(created.)54
-b(The)34 b(uncertain)n(t)n(y)e(in)i(an)n(y)f(p)r(oin)n(t)h(on)f(the)h
-(b)r(oundary)f(of)427 4777 y(the)g(Bo)n(x)e(is)h(found)h(b)n(y)f
-(shifting)h(the)f(supplied)h Ft(")p Fj(uncertain)n(t)n(y)p
-Ft(")e Fj(Region)g(so)h(that)g(it)h(is)f(cen)n(tred)g(at)g(the)427
-4877 y(b)r(oundary)e(p)r(oin)n(t)h(b)r(eing)g(considered.)44
-b(The)31 b(area)e(co)n(v)n(ered)g(b)n(y)h(the)h(shifted)g(uncertain)n
-(t)n(y)f(Region)g(then)427 4976 y(represen)n(ts)g(the)i(uncertain)n(t)n
-(y)f(in)g(the)h(b)r(oundary)f(p)r(osition.)48 b(The)31
-b(uncertain)n(t)n(y)g(is)g(assumed)g(to)g(b)r(e)h(the)427
-5076 y(same)27 b(for)g(all)h(p)r(oin)n(ts.)427 5195 y(If)38
-b(supplied,)j(the)d(uncertain)n(t)n(y)f(Region)g(m)n(ust)g(b)r(e)i(of)e
-(a)g(class)g(for)g(whic)n(h)h(all)f(instances)g(are)g(cen)n(tro-)427
-5295 y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24 b(Circle,)g(Ellipse,)h
-(etc.\))36 b(or)23 b(b)r(e)i(a)e(Prism)h(con)n(taining)f(cen)n
-(tro-symetric)f(comp)r(onen)n(t)427 5394 y(Regions.)57
-b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f(will)g(b)r(e)h
-(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)427
-5494 y(uncertain)n(t)n(y)28 b(Region)f(using)h(the)h(supplied)f(p)r
-(oin)n(ter)g(will)h(ha)n(v)n(e)e(no)h(e\013ect)h(on)f(the)g(created)g
-(Bo)n(x.)38 b(Alter-)427 5593 y(nativ)n(ely)-7 b(,)24
-b(a)g(NULL)g(Ob)5 b(ject)24 b(p)r(oin)n(ter)f(ma)n(y)h(b)r(e)g
-(supplied,)h(in)f(whic)n(h)g(case)f(a)g(default)i(uncertain)n(t)n(y)e
-(is)h(used)427 5693 y(equiv)-5 b(alen)n(t)28 b(to)f(a)g(b)r(o)n(x)g
-(1.0E-6)f(of)h(the)h(size)g(of)f(the)h(Bo)n(x)f(b)r(eing)g(created.)p
-eop end
-%%Page: 199 209
-TeXDict begin 199 208 bop 3643 52 a FF(199)427 351 y
-Fj(The)23 b(uncertain)n(t)n(y)f(Region)g(has)g(t)n(w)n(o)g(uses:)34
-b(1\))22 b(when)h(the)g(astOv)n(erlap)d(function)k(compares)d(t)n(w)n
-(o)h(Regions)427 451 y(for)g(equalit)n(y)h(the)g(uncertain)n(t)n(y)f
-(Region)g(is)g(used)h(to)g(determine)f(the)i(tolerance)d(on)i(the)g
-(comparison,)f(and)427 551 y(2\))31 b(when)f(a)h(Region)e(is)i(mapp)r
-(ed)g(in)n(to)f(a)g(di\013eren)n(t)h(co)r(ordinate)e(system)i(and)f
-(subsequen)n(tly)g(simpli\014ed)427 650 y(\(using)c(astSimplify\),)h
-(the)f(uncertain)n(ties)f(are)g(used)h(to)g(determine)g(if)g(the)g
-(transformed)f(b)r(oundary)g(can)427 750 y(b)r(e)j(accurately)e
-(represen)n(ted)h(b)n(y)g(a)g(sp)r(eci\014c)h(shap)r(e)f(of)h(Region.)
-259 892 y Fd(options)427 992 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 1092 y(assignmen)n(ts)f
-(to)i(b)r(e)f(used)h(for)f(initialising)g(the)h(new)f(Bo)n(x.)38
-b(The)29 b(syn)n(tax)e(used)i(is)f(iden)n(tical)g(to)g(that)h(for)427
-1191 y(the)h(astSet)f(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")g Fj(format)f(sp)r(eci\014ers)h(iden)n
-(ti\014ed)g(b)n(y)g Ft(")p Fj(\045)p Ft(")f Fj(sym)n(b)r(ols)g(in)427
-1291 y(the)g(normal)f(w)n(a)n(y)-7 b(.)259 1433 y Fd(...)427
-1533 y Fj(If)38 b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n
-(tains)f Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f
-(an)f(optional)g(list)h(of)f(additional)427 1633 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 1732 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 1832 y Fj(function\).)0
-2013 y Fd(Returned)32 b(V)-8 b(alue:)259 2169 y(astBo)m(x\(\))427
-2269 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Bo)n(x.)0
-2450 y Fd(Notes:)340 2752 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 2851 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 3033 y Fd(Status)33
-b(Handling)n(:)227 3179 y Fj(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 3278 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fj(in)n(t)227 3378 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p
-0 3597 3780 12 v 0 3728 a Fz(astChannel)786 b Fe(Create)37
-b(a)i(Channel)783 b Fz(astChannel)0 3913 y Fd(Description:)44
-b Fj(This)28 b(function)g(creates)f(a)g(new)g(Channel)h(and)f
-(optionally)g(initialises)g(its)h(attributes.)227 4048
-y(A)22 b(Channel)g(implemen)n(ts)g(lo)n(w-lev)n(el)e(input/output)i
-(for)f(the)i(AST)f(library)-7 b(.)33 b(W)-7 b(riting)22
-b(an)f(Ob)5 b(ject)22 b(to)f(a)h(Channel)227 4147 y(\(using)i(astW)-7
-b(rite\))25 b(will)f(generate)f(a)h(textual)h(represen)n(tation)d(of)i
-(that)h(Ob)5 b(ject,)25 b(and)f(reading)f(from)h(a)g(Channel)227
-4247 y(\(using)k(astRead\))f(will)h(create)e(a)i(new)f(Ob)5
-b(ject)28 b(from)f(its)h(textual)f(represen)n(tation.)227
-4381 y(Normally)-7 b(,)20 b(when)f(y)n(ou)g(use)f(a)h(Channel,)i(y)n
-(ou)d(should)h(pro)n(vide)f Ft(")p Fj(source)p Ft(")f
-Fj(and)h Ft(")p Fj(sink)p Ft(")g Fj(functions)i(whic)n(h)f(connect)227
-4481 y(it)38 b(to)f(an)f(external)h(data)f(store)g(b)n(y)h(reading)f
-(and)h(writing)f(the)i(resulting)e(text.)66 b(By)37 b(default,)j(ho)n
-(w)n(ev)n(er,)d(a)227 4580 y(Channel)28 b(will)g(read)e(from)i
-(standard)e(input)j(and)e(write)g(to)h(standard)e(output.)0
-4749 y Fd(Synopsis:)121 b Ft(AstChannel)39 b Fi(\003)p
-Ft(astChannel\()g(const)i(char)h Fi(\003)p Ft(\()p Fi(\003)g
-Ft(source\)\()f(void)h(\),)g(void)g(\()p Fi(\003)h Ft(sink\)\()e(const)
-227 4849 y(char)h Fi(\003)h Ft(\),)g(const)f(char)g Fi(\003)p
-Ft(options,)d(...)86 b(\))0 5018 y Fd(P)m(arameters:)259
-5173 y(source)427 5273 y Fj(P)n(oin)n(ter)17 b(to)h(a)g(source)g
-(function)h(that)g(tak)n(es)e(no)h(argumen)n(ts)f(and)i(returns)e(a)h
-(p)r(oin)n(ter)h(to)f(a)g(n)n(ull-terminated)427 5373
-y(string.)60 b(This)35 b(function)h(will)g(b)r(e)g(used)f(b)n(y)g(the)h
-(Channel)f(to)h(obtain)f(lines)g(of)g(input)i(text.)60
-b(On)35 b(eac)n(h)427 5472 y(in)n(v)n(o)r(cation,)f(it)g(should)f
-(return)h(a)f(p)r(oin)n(ter)g(to)g(the)h(next)g(input)h(line)e(read)g
-(from)g(some)g(external)g(data)427 5572 y(store,)27 b(and)g(a)h(NULL)g
-(p)r(oin)n(ter)f(when)h(there)f(are)g(no)g(more)g(lines)g(to)h(read.)
-427 5693 y(If)g Ft(")p Fj(source)p Ft(")e Fj(is)h(NULL,)h(the)g
-(Channel)g(will)g(read)e(from)i(standard)e(input)j(instead.)p
-eop end
-%%Page: 200 210
-TeXDict begin 200 209 bop 0 52 a FF(200)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(sink)427
-451 y Fj(P)n(oin)n(ter)22 b(to)g(a)h(sink)g(function)g(that)h(tak)n(es)
-e(a)g(p)r(oin)n(ter)h(to)f(a)h(n)n(ull-terminated)g(string)f(as)g(an)h
-(argumen)n(t)f(and)427 551 y(returns)30 b(v)n(oid.)44
-b(This)30 b(function)h(will)f(b)r(e)h(used)f(b)n(y)g(the)g(Channel)g
-(to)g(deliv)n(er)g(lines)g(of)g(output)h(text.)45 b(On)427
-650 y(eac)n(h)31 b(in)n(v)n(o)r(cation,)h(it)h(should)f(deliv)n(er)f
-(the)h(con)n(ten)n(ts)f(of)h(the)h(string)e(supplied)i(to)e(some)h
-(external)f(data)427 750 y(store.)427 861 y(If)d Ft(")p
-Fj(sink)p Ft(")f Fj(is)g(NULL,)h(the)g(Channel)g(will)g(write)f(to)h
-(standard)e(output)i(instead.)259 984 y Fd(options)427
-1083 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-1183 y(assignmen)n(ts)d(to)i(b)r(e)g(used)f(for)g(initialising)g(the)h
-(new)g(Channel.)36 b(The)26 b(syn)n(tax)g(used)g(is)h(iden)n(tical)f
-(to)g(that)427 1283 y(for)g(the)h(astSet)g(function)g(and)g(ma)n(y)f
-(include)h Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g
-(iden)n(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-1382 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 1505
-y Fd(...)427 1605 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 1704 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 1804 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 1904 y Fj(function\).)0 2056
-y Fd(Returned)32 b(V)-8 b(alue:)259 2182 y(astChannel\(\))427
-2282 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Channel.)0
-2433 y Fd(Notes:)340 2706 y Fi(\017)45 b Fj(Application)35
-b(co)r(de)g(can)g(pass)f(arbitrary)f(data)i(\(suc)n(h)g(as)g(\014le)g
-(descriptors,)g(etc\))h(to)f(source)f(and)h(sink)427
-2806 y(functions)27 b(using)e(the)i(astPutChannelData)e(function.)36
-b(The)27 b(source)d(or)h(sink)h(function)h(should)e(use)h(the)427
-2905 y(astChannelData)h(macro)f(to)i(retriev)n(e)e(this)i(data.)340
-3028 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35
-b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g
-(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427
-3128 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)p 0 3307 3780 12 v 0 3439 a Fz(astChannelData)
-1388 3437 y Fe(Return)39 b(a)f(p)s(oin)m(ter)f(to)1112
-3552 y(user-supplied)h(data)f(stored)h(with)1630 3666
-y(a)g(Channel)2837 3439 y Fz(astChannelData)0 3812 y
-Fd(Description:)44 b Fj(This)31 b(macro)f(is)g(in)n(tended)h(to)g(b)r
-(e)g(used)g(within)g(the)g(source)f(or)g(sink)g(functions)h(asso)r
-(ciated)f(with)h(a)227 3912 y(Channel.)49 b(It)32 b(returns)f(an)n(y)g
-(p)r(oin)n(ter)g(previously)f(stored)h(in)h(the)g(Channel)f(\(that)h
-(is,)h(the)f(Channel)f(that)h(has)227 4011 y(in)n(v)n(ok)n(ed)26
-b(the)i(source)f(or)f(sink)i(function\))g(using)g(astPutChannelData.)
-227 4131 y(This)j(mec)n(hanism)f(is)g(a)g(thread-safe)f(alternativ)n(e)
-g(to)i(passing)e(\014le)i(descriptors,)f(etc,)h(via)f(static)g(global)g
-(v)-5 b(ari-)227 4230 y(ables.)0 4370 y Fd(Synopsis:)121
-b Ft(void)42 b Fi(\003)p Ft(astChannelData)0 4509 y Fd(Class)31
-b(Applicabilit)m(y:)259 4636 y(Channel)427 4735 y Fj(This)d(macro)e
-(applies)h(to)h(all)f(Channels.)0 4887 y Fd(Returned)32
-b(V)-8 b(alue:)259 5013 y(astChannelData)427 5113 y Fj(The)27
-b(p)r(oin)n(ter)f(previously)f(stored)g(with)i(the)g(Channel)f(using)g
-(astPutChannelData.)36 b(A)26 b(NULL)h(p)r(oin)n(ter)427
-5213 y(will)h(b)r(e)g(returned)f(if)h(no)g(suc)n(h)f(p)r(oin)n(ter)g
-(has)g(b)r(een)h(stored)f(with)h(the)g(Channel.)0 5365
-y Fd(Notes:)340 5637 y Fi(\017)45 b Fj(This)28 b(routine)f(is)h(not)f
-(a)n(v)-5 b(ailable)26 b(in)i(the)g(F)-7 b(ortran)27
-b(77)f(in)n(terface)h(to)h(the)g(AST)g(library)-7 b(.)p
-eop end
-%%Page: 201 211
-TeXDict begin 201 210 bop 3643 52 a FF(201)p 0 351 3780
-12 v 0 483 a Fz(astCircle)986 b Fe(Create)37 b(a)i(Circle)982
-b Fz(astCircle)0 643 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(Circle)g(and)h(optionally)f
-(initialises)g(its)h(attributes.)227 767 y(A)g(Circle)f(is)h(a)f
-(Region)g(whic)n(h)g(represen)n(ts)g(a)g(circle)g(or)f(sphere)h(within)
-i(the)f(supplied)g(F)-7 b(rame.)0 914 y Fd(Synopsis:)121
-b Ft(AstCircle)40 b Fi(\003)p Ft(astCircle\()f(AstFrame)h
-Fi(\003)p Ft(frame,)h(int)h(form,)f(const)h(double)f(centre[],)f(const)
-227 1013 y(double)h(point[],)g(AstRegion)f Fi(\003)p
-Ft(unc,)h(const)g(char)h Fi(\003)p Ft(options,)e(...)86
-b(\))0 1160 y Fd(P)m(arameters:)259 1294 y(frame)427
-1394 y Fj(A)29 b(p)r(oin)n(ter)g(to)f(the)i(F)-7 b(rame)28
-b(in)h(whic)n(h)g(the)g(region)e(is)i(de\014ned.)41 b(A)29
-b(deep)g(cop)n(y)f(is)g(tak)n(en)g(of)h(the)g(supplied)427
-1493 y(F)-7 b(rame.)71 b(This)39 b(means)f(that)h(an)n(y)g(subsequen)n
-(t)f(c)n(hanges)g(made)h(to)f(the)i(F)-7 b(rame)38 b(using)h(the)g
-(supplied)427 1593 y(p)r(oin)n(ter)27 b(will)h(ha)n(v)n(e)f(no)g
-(e\013ect)h(the)g(Region.)259 1723 y Fd(form)427 1823
-y Fj(Indicates)g(ho)n(w)g(the)h(circle)f(is)g(describ)r(ed)h(b)n(y)f
-(the)h(remaining)e(parameters.)38 b(A)29 b(v)-5 b(alue)28
-b(of)g(zero)g(indicates)427 1922 y(that)h(the)f(circle)f(is)h(sp)r
-(eci\014ed)h(b)n(y)e(a)h(cen)n(tre)f(p)r(osition)h(and)g(a)g(p)r
-(osition)g(on)f(the)i(circumference.)37 b(A)29 b(v)-5
-b(alue)427 2022 y(of)28 b(one)f(indicates)g(that)h(the)g(circle)f(is)h
-(sp)r(eci\014ed)g(b)n(y)f(a)g(cen)n(tre)g(p)r(osition)h(and)f(a)g
-(scalar)f(radius.)259 2152 y Fd(cen)m(tre)427 2252 y
-Fj(An)32 b(arra)n(y)c(of)j(double,)h(with)g(one)e(elemen)n(t)i(for)e
-(eac)n(h)g(F)-7 b(rame)31 b(axis)f(\(Naxes)h(attribute\))g(con)n
-(taining)f(the)427 2352 y(co)r(ordinates)c(at)i(the)g(cen)n(tre)f(of)g
-(the)h(circle)f(or)g(sphere.)259 2482 y Fd(p)s(oin)m(t)427
-2582 y Fj(If)35 b Ft(")p Fj(form)p Ft(")e Fj(is)h(zero,)g(then)h(this)f
-(arra)n(y)e(should)i(ha)n(v)n(e)f(one)g(elemen)n(t)i(for)e(eac)n(h)h(F)
--7 b(rame)33 b(axis)g(\(Naxes)h(at-)427 2681 y(tribute\),)e(and)e
-(should)g(b)r(e)h(supplied)f(holding)g(the)h(co)r(ordinates)e(at)h(a)g
-(p)r(oin)n(t)g(on)g(the)h(circumference)f(of)427 2781
-y(the)k(circle)e(or)g(sphere.)53 b(If)34 b Ft(")p Fj(form)p
-Ft(")e Fj(is)h(one,)h(then)f(this)h(arra)n(y)c(should)j(ha)n(v)n(e)f
-(one)h(elemen)n(t)g(only)g(whic)n(h)427 2880 y(should)h(b)r(e)g
-(supplied)g(holding)f(the)h(scalar)e(radius)h(of)h(the)g(circle)f(or)g
-(sphere,)i(as)e(a)g(geo)r(desic)g(distance)427 2980 y(within)c(the)f(F)
--7 b(rame.)259 3110 y Fd(unc)427 3210 y Fj(An)33 b(optional)e(p)r(oin)n
-(ter)h(to)g(an)g(existing)g(Region)f(whic)n(h)h(sp)r(eci\014es)g(the)h
-(uncertain)n(ties)e(asso)r(ciated)g(with)427 3310 y(the)f(b)r(oundary)f
-(of)g(the)h(Circle)f(b)r(eing)g(created.)41 b(The)30
-b(uncertain)n(t)n(y)e(in)i(an)n(y)f(p)r(oin)n(t)g(on)g(the)h(b)r
-(oundary)f(of)427 3409 y(the)g(Circle)e(is)h(found)g(b)n(y)f(shifting)i
-(the)f(supplied)g Ft(")p Fj(uncertain)n(t)n(y)p Ft(")e
-Fj(Region)i(so)f(that)h(it)g(is)g(cen)n(tred)f(at)h(the)427
-3509 y(b)r(oundary)i(p)r(oin)n(t)h(b)r(eing)g(considered.)44
-b(The)31 b(area)e(co)n(v)n(ered)g(b)n(y)h(the)h(shifted)g(uncertain)n
-(t)n(y)f(Region)g(then)427 3608 y(represen)n(ts)g(the)i(uncertain)n(t)n
-(y)f(in)g(the)h(b)r(oundary)f(p)r(osition.)48 b(The)31
-b(uncertain)n(t)n(y)g(is)g(assumed)g(to)g(b)r(e)h(the)427
-3708 y(same)27 b(for)g(all)h(p)r(oin)n(ts.)427 3823 y(If)38
-b(supplied,)j(the)d(uncertain)n(t)n(y)f(Region)g(m)n(ust)g(b)r(e)i(of)e
-(a)g(class)g(for)g(whic)n(h)h(all)f(instances)g(are)g(cen)n(tro-)427
-3923 y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24 b(Circle,)g(Ellipse,)h
-(etc.\))36 b(or)23 b(b)r(e)i(a)e(Prism)h(con)n(taining)f(cen)n
-(tro-symetric)f(comp)r(onen)n(t)427 4022 y(Regions.)57
-b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f(will)g(b)r(e)h
-(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)427
-4122 y(uncertain)n(t)n(y)c(Region)f(using)h(the)h(supplied)f(p)r(oin)n
-(ter)g(will)h(ha)n(v)n(e)e(no)h(e\013ect)g(on)g(the)h(created)e
-(Circle.)45 b(Al-)427 4222 y(ternativ)n(ely)-7 b(,)30
-b(a)g(NULL)g(Ob)5 b(ject)30 b(p)r(oin)n(ter)f(ma)n(y)g(b)r(e)i
-(supplied,)g(in)f(whic)n(h)g(case)f(a)g(default)i(uncertain)n(t)n(y)e
-(is)427 4321 y(used)f(equiv)-5 b(alen)n(t)27 b(to)h(a)f(b)r(o)n(x)g
-(1.0E-6)e(of)j(the)g(size)f(of)h(the)g(Circle)f(b)r(eing)h(created.)427
-4436 y(The)23 b(uncertain)n(t)n(y)f(Region)g(has)g(t)n(w)n(o)g(uses:)34
-b(1\))22 b(when)h(the)g(astOv)n(erlap)d(function)k(compares)d(t)n(w)n
-(o)h(Regions)427 4536 y(for)g(equalit)n(y)h(the)g(uncertain)n(t)n(y)f
-(Region)g(is)g(used)h(to)g(determine)f(the)i(tolerance)d(on)i(the)g
-(comparison,)f(and)427 4635 y(2\))31 b(when)f(a)h(Region)e(is)i(mapp)r
-(ed)g(in)n(to)f(a)g(di\013eren)n(t)h(co)r(ordinate)e(system)i(and)f
-(subsequen)n(tly)g(simpli\014ed)427 4735 y(\(using)c(astSimplify\),)h
-(the)f(uncertain)n(ties)f(are)g(used)h(to)g(determine)g(if)g(the)g
-(transformed)f(b)r(oundary)g(can)427 4835 y(b)r(e)j(accurately)e
-(represen)n(ted)h(b)n(y)g(a)g(sp)r(eci\014c)h(shap)r(e)f(of)h(Region.)
-259 4965 y Fd(options)427 5065 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 5164 y(assignmen)n(ts)j
-(to)g(b)r(e)i(used)e(for)h(initialising)f(the)h(new)g(Circle.)49
-b(The)32 b(syn)n(tax)f(used)g(is)h(iden)n(tical)g(to)f(that)427
-5264 y(for)26 b(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-5363 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 5494
-y Fd(...)427 5593 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 5693 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)p eop end
-%%Page: 202 212
-TeXDict begin 202 211 bop 0 52 a FF(202)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)427 351 y Fj(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 451 y Fj(function\).)0 616 y
-Fd(Returned)32 b(V)-8 b(alue:)259 755 y(astCircle\(\))427
-855 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Circle.)0
-1020 y Fd(Notes:)340 1306 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 1405 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 1608 3780 12 v 0 1739
-a Fz(astCircleP)l(ars)172 b Fe(Returns)39 b(the)f(geometric)f
-(parameters)f(of)1659 1854 y(an)i(Circle)2999 1739 y
-Fz(astCircleP)l(ars)0 2023 y Fd(Description:)44 b Fj(This)28
-b(function)g(returns)f(the)h(geometric)e(parameters)g(describing)h(the)
-h(supplied)g(Circle.)0 2175 y Fd(Synopsis:)121 b Ft(void)42
-b(astCirclePars\()c(AstCircle)h Fi(\003)p Ft(this,)i(double)h
-Fi(\003)p Ft(centre,)e(double)h Fi(\003)p Ft(radius,)f(double)h
-Fi(\003)p Ft(p1)227 2275 y(\))0 2427 y Fd(P)m(arameters:)259
-2567 y(this)427 2666 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259
-2801 y Fd(cen)m(tre)427 2900 y Fj(P)n(oin)n(ter)23 b(to)h(an)f(arra)n
-(y)f(in)i(whic)n(h)g(to)g(return)g(the)g(co)r(ordinates)f(of)h(the)g
-(Circle)g(cen)n(tre.)35 b(The)24 b(length)g(of)g(this)427
-3000 y(arra)n(y)i(should)h(b)r(e)h(no)f(less)g(than)h(the)g(n)n(um)n(b)
-r(er)f(of)h(axes)f(in)g(the)h(asso)r(ciated)f(co)r(ordinate)f(system.)
-259 3134 y Fd(radius)427 3234 y Fj(Returned)c(holding)f(the)h(radius)f
-(of)g(the)h(Circle,)g(as)f(an)g(geo)r(desic)g(distance)g(in)h(the)g
-(asso)r(ciated)e(co)r(ordinate)427 3334 y(system.)259
-3468 y Fd(p1)427 3568 y Fj(P)n(oin)n(ter)25 b(to)h(an)g(arra)n(y)e(in)j
-(whic)n(h)f(to)h(return)f(the)g(co)r(ordinates)f(of)i(a)f(p)r(oin)n(t)g
-(on)g(the)h(circumference)f(of)g(the)427 3667 y(Circle.)39
-b(The)28 b(length)g(of)h(this)f(arra)n(y)e(should)i(b)r(e)h(no)f(less)g
-(than)g(the)h(n)n(um)n(b)r(er)f(of)g(axes)g(in)g(the)h(asso)r(ciated)
-427 3767 y(co)r(ordinate)37 b(system.)66 b(A)38 b(NULL)f(p)r(oin)n(ter)
-h(can)f(b)r(e)g(supplied)h(if)g(the)g(circumference)f(p)r(osition)g(is)
-h(not)427 3867 y(needed.)0 4032 y Fd(Notes:)340 4317
-y Fi(\017)45 b Fj(If)24 b(the)g(co)r(ordinate)e(system)h(represen)n
-(ted)f(b)n(y)h(the)g(Circle)g(has)g(b)r(een)g(c)n(hanged)f(since)h(it)h
-(w)n(as)e(\014rst)h(created,)427 4417 y(the)c(returned)f(parameters)f
-(refer)h(to)h(the)g(new)f(\(c)n(hanged\))g(co)r(ordinate)g(system,)i
-(rather)d(than)i(the)g(original)427 4516 y(co)r(ordinate)27
-b(system.)37 b(Note)28 b(ho)n(w)n(ev)n(er)e(that)i(if)g(the)g
-(transformation)f(from)g(original)f(to)i(new)g(co)r(ordinate)427
-4616 y(system)38 b(is)h(non-linear,)h(the)f(shap)r(e)f(represen)n(ted)f
-(b)n(y)h(the)h(supplied)g(Circle)f(ob)5 b(ject)38 b(ma)n(y)g(not)g(b)r
-(e)h(an)427 4716 y(accurate)27 b(circle.)p 0 4918 V 0
-5050 a Fz(astClear)483 b Fe(Clear)37 b(attribute)f(v)-7
-b(alues)39 b(for)e(an)i(Ob)7 b(ject)480 b Fz(astClear)0
-5242 y Fd(Description:)44 b Fj(This)36 b(function)g(clears)f(the)h(v)-5
-b(alues)36 b(of)f(a)h(sp)r(eci\014ed)g(set)f(of)h(attributes)g(for)f
-(an)h(Ob)5 b(ject.)61 b(Clearing)227 5341 y(an)30 b(attribute)h
-(cancels)f(an)n(y)f(v)-5 b(alue)30 b(that)h(has)f(previously)f(b)r(een)
-i(explicitly)g(set)f(for)g(it,)h(so)f(that)h(the)g(standard)227
-5441 y(default)d(attribute)f(v)-5 b(alue)28 b(will)f(subsequen)n(tly)g
-(b)r(e)h(used)f(instead.)37 b(This)27 b(also)f(causes)g(the)i(astT)-7
-b(est)27 b(function)h(to)227 5540 y(return)f(the)h(v)-5
-b(alue)28 b(zero)e(for)h(the)h(attribute,)g(indicating)g(that)g(no)f(v)
--5 b(alue)27 b(has)g(b)r(een)h(set.)0 5693 y Fd(Synopsis:)121
-b Ft(void)42 b(astClear\()e(AstObject)g Fi(\003)p Ft(this,)h(const)g
-(char)h Fi(\003)p Ft(attrib)f(\))p eop end
-%%Page: 203 213
-TeXDict begin 203 212 bop 3643 52 a FF(203)0 351 y Fd(P)m(arameters:)
-259 483 y(this)427 583 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5
-b(ject.)259 711 y Fd(attrib)427 810 y Fj(P)n(oin)n(ter)23
-b(to)i(a)g(n)n(ull-terminated)f(c)n(haracter)f(string)h(con)n(taining)g
-(a)g(comma-separated)f(list)i(of)g(the)g(names)427 910
-y(of)j(the)g(attributes)f(to)h(b)r(e)g(cleared.)0 1067
-y Fd(Class)j(Applicabilit)m(y:)259 1199 y(Ob)5 b(ject)427
-1298 y Fj(This)28 b(function)g(applies)f(to)h(all)f(Ob)5
-b(jects.)0 1456 y Fd(Notes:)340 1733 y Fi(\017)45 b Fj(A)n(ttribute)28
-b(names)g(are)e(not)i(case)f(sensitiv)n(e)g(and)g(ma)n(y)g(b)r(e)h
-(surrounded)e(b)n(y)i(white)g(space.)340 1862 y Fi(\017)45
-b Fj(It)28 b(do)r(es)f(no)h(harm)f(to)g(clear)g(an)g(attribute)h(whose)
-f(v)-5 b(alue)27 b(has)g(not)h(b)r(een)g(set.)340 1990
-y Fi(\017)45 b Fj(An)28 b(error)e(will)i(result)f(if)h(an)g(attempt)g
-(is)f(made)h(to)f(clear)g(the)h(v)-5 b(alue)27 b(of)h(a)f(read-only)f
-(attribute.)p 0 2179 3780 12 v 0 2311 a Fz(astClearStatus)341
-b Fe(Clear)37 b(the)i(AST)f(error)f(status)338 b Fz(astClearStatus)0
-2467 y Fd(Description:)44 b Fj(This)23 b(macro)f(resets)h(the)g(AST)h
-(error)d(status)i(to)g(an)g(OK)f(v)-5 b(alue,)24 b(indicating)f(that)h
-(an)f(error)e(condition)227 2567 y(\(if)29 b(an)n(y\))e(has)g(b)r(een)h
-(cleared.)0 2712 y Fd(Synopsis:)121 b Ft(void)42 b(astClearStatus)0
-2856 y Fd(Notes:)340 3134 y Fi(\017)j Fj(If)37 b(the)f(AST)g(error)e
-(status)i(is)g(set)g(to)g(an)f(error)f(v)-5 b(alue)36
-b(\(after)g(an)g(error\),)g(most)g(AST)g(functions)g(will)427
-3234 y(not)28 b(execute)g(and)f(will)h(simply)g(return)f(without)i
-(action.)36 b(Using)28 b(astClearStatus)e(will)i(restore)f(normal)427
-3333 y(b)r(eha)n(viour.)p 0 3523 V 0 3655 a Fz(astClip)549
-b Fe(Set)39 b(up)g(or)f(remo)m(v)m(e)f(clipping)g(for)h(a)h(Plot)546
-b Fz(astClip)0 3834 y Fd(Description:)44 b Fj(This)25
-b(function)h(de\014nes)f(regions)f(of)h(a)f(Plot)h(whic)n(h)g(are)f(to)
-h(b)r(e)h(clipp)r(ed.)36 b(An)n(y)25 b(subsequen)n(t)g(graphical)227
-3934 y(output)h(created)f(using)g(the)g(Plot)g(will)g(then)h(b)r(e)g
-(visible)f(only)g(within)h(the)g(unclipp)r(ed)g(regions)e(of)h(the)h
-(plotting)227 4034 y(area.)36 b(See)27 b(also)g(the)h(Clip)g
-(attribute.)0 4178 y Fd(Synopsis:)121 b Ft(void)42 b(astClip\()e
-(AstPlot)h Fi(\003)p Ft(this,)g(int)h(iframe,)f(const)g(double)g
-(lbnd[],)g(const)h(double)f(ubnd[])227 4278 y(\))0 4423
-y Fd(P)m(arameters:)259 4554 y(this)427 4654 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Plot.)259 4782 y Fd(iframe)427 4882 y Fj(The)h(index)g(of)
-g(the)h(F)-7 b(rame)28 b(within)i(the)f(Plot)f(to)h(whic)n(h)g(the)g
-(clipping)g(limits)h(supplied)f(in)g Ft(")p Fj(lbnd)p
-Ft(")g Fj(and)427 4981 y Ft(")p Fj(ubnd)p Ft(")h Fj(\(b)r(elo)n(w\))f
-(refer.)42 b(Clipping)30 b(ma)n(y)f(b)r(e)h(applied)f(to)g(an)n(y)g(of)
-h(the)g(co)r(ordinate)e(systems)h(asso)r(ciated)427 5081
-y(with)24 b(a)g(Plot)f(\(as)g(de\014ned)h(b)n(y)f(the)h(F)-7
-b(rames)23 b(it)h(con)n(tains\),)g(so)f(this)h(index)f(ma)n(y)g(tak)n
-(e)g(an)n(y)g(v)-5 b(alue)23 b(from)h(1)f(to)427 5181
-y(the)31 b(n)n(um)n(b)r(er)e(of)h(F)-7 b(rames)30 b(in)g(the)g(Plot)g
-(\(Nframe)g(attribute\).)45 b(In)30 b(addition,)g(the)h(v)-5
-b(alues)29 b(AST)p Ft(__)p Fj(BASE)427 5280 y(and)f(AST)p
-Ft(__)p Fj(CURRENT)f(ma)n(y)g(b)r(e)h(used)g(to)f(sp)r(ecify)h(the)g
-(base)f(and)g(curren)n(t)g(F)-7 b(rames)27 b(resp)r(ectiv)n(ely)-7
-b(.)427 5394 y(F)g(or)32 b(example,)i(a)f(v)-5 b(alue)32
-b(of)h(AST)p Ft(__)p Fj(CURRENT)g(causes)e(clipping)i(to)g(b)r(e)g(p)r
-(erformed)f(in)i(ph)n(ysical)d(co-)427 5494 y(ordinates,)g(while)g(a)g
-(v)-5 b(alue)31 b(of)g(AST)p Ft(__)p Fj(BASE)f(w)n(ould)h(clip)g(in)g
-(graphical)f(co)r(ordinates.)45 b(Clipping)31 b(ma)n(y)427
-5593 y(also)24 b(b)r(e)h(remo)n(v)n(ed)e(completely)h(b)n(y)g(giving)g
-(a)g(v)-5 b(alue)25 b(of)f(AST)p Ft(__)p Fj(NOFRAME.)g(In)h(this)g
-(case)f(an)n(y)g(clipping)427 5693 y(b)r(ounds)k(supplied)g(\(b)r(elo)n
-(w\))g(are)e(ignored.)p eop end
-%%Page: 204 214
-TeXDict begin 204 213 bop 0 52 a FF(204)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(lbnd)427
-451 y Fj(An)43 b(arra)n(y)c(with)j(one)g(elemen)n(t)g(for)f(eac)n(h)g
-(axis)g(of)h(the)g(clipping)g(F)-7 b(rame)41 b(\(iden)n(ti\014ed)i(b)n
-(y)e(the)i(index)427 551 y Ft(")p Fj(iframe)p Ft(")p
-Fj(\).)68 b(This)38 b(should)g(con)n(tain)f(the)i(lo)n(w)n(er)d(b)r
-(ound,)41 b(on)d(eac)n(h)f(axis,)j(of)e(the)h(region)e(whic)n(h)h(is)g
-(to)427 650 y(remain)27 b(visible)h(\(unclipp)r(ed\).)259
-781 y Fd(ubnd)427 880 y Fj(An)43 b(arra)n(y)c(with)j(one)g(elemen)n(t)g
-(for)f(eac)n(h)g(axis)g(of)h(the)g(clipping)g(F)-7 b(rame)41
-b(\(iden)n(ti\014ed)i(b)n(y)e(the)i(index)427 980 y Ft(")p
-Fj(iframe)p Ft(")p Fj(\).)64 b(This)37 b(should)g(con)n(tain)f(the)h
-(upp)r(er)g(b)r(ound,)j(on)d(eac)n(h)f(axis,)i(of)f(the)g(region)f
-(whic)n(h)h(is)g(to)427 1079 y(remain)27 b(visible)h(\(unclipp)r(ed\).)
-0 1239 y Fd(Notes:)340 1519 y Fi(\017)45 b Fj(Only)19
-b(one)g(clipping)h(F)-7 b(rame)18 b(ma)n(y)h(b)r(e)h(activ)n(e)e(at)h
-(a)g(time.)35 b(This)19 b(function)h(will)g(deactiv)-5
-b(ate)19 b(an)n(y)f(previously-)427 1619 y(established)28
-b(clipping)f(F)-7 b(rame)27 b(b)r(efore)h(setting)f(up)h(new)g
-(clipping)f(limits.)340 1749 y Fi(\017)45 b Fj(The)29
-b(clipping)g(pro)r(duced)f(b)n(y)h(this)g(function)g(is)g(in)g
-(addition)g(to)g(that)g(sp)r(eci\014ed)g(b)n(y)f(the)h(Clip)g
-(attribute)427 1849 y(whic)n(h)40 b(o)r(ccurs)f(at)g(the)h(edges)f(of)h
-(the)g(plotting)g(area)e(established)h(when)h(the)g(Plot)f(is)h
-(created)f(\(see)427 1948 y(astPlot\).)d(The)28 b(underlying)f
-(graphics)f(system)i(ma)n(y)f(also)f(imp)r(ose)i(further)f(clipping.)
-340 2079 y Fi(\017)45 b Fj(When)25 b(testing)f(a)f(graphical)g(p)r
-(osition)h(for)f(clipping,)i(it)f(is)g(\014rst)g(transformed)f(in)n(to)
-h(the)g(clipping)g(F)-7 b(rame.)427 2178 y(The)33 b(resulting)f(co)r
-(ordinate)g(on)g(eac)n(h)g(axis)g(is)h(then)g(c)n(hec)n(k)n(ed)f
-(against)f(the)j(clipping)e(limits)i(\(giv)n(en)e(b)n(y)427
-2278 y Ft(")p Fj(lbnd)p Ft(")i Fj(and)g Ft(")p Fj(ubnd)p
-Ft(")p Fj(\).)56 b(By)34 b(default,)i(a)e(p)r(osition)f(is)h(clipp)r
-(ed)h(if)g(an)n(y)e(co)r(ordinate)g(lies)h(outside)g(these)427
-2378 y(limits.)i(Ho)n(w)n(ev)n(er,)22 b(if)h(a)f(non-zero)f(v)-5
-b(alue)22 b(is)h(assigned)e(to)h(the)h(Plot's)f(ClipOp)h(attribute,)h
-(then)f(a)f(p)r(osition)427 2477 y(is)28 b(only)f(clipp)r(ed)h(if)g
-(the)g(co)r(ordinates)e(on)i(all)f(axes)g(lie)g(outside)h(their)f
-(clipping)h(limits.)340 2608 y Fi(\017)45 b Fj(If)28
-b(the)f(lo)n(w)n(er)f(clipping)h(limit)h(exceeds)e(the)i(upp)r(er)f
-(limit)h(for)e(an)n(y)h(axis,)f(then)i(the)f(sense)g(of)g(clipping)g
-(for)427 2707 y(that)k(axis)f(is)g(rev)n(ersed)f(\(so)h(that)h(co)r
-(ordinate)e(v)-5 b(alues)30 b(lying)h(b)r(et)n(w)n(een)f(the)h(limits)g
-(are)f(clipp)r(ed)h(instead)427 2807 y(of)k(those)g(lying)g(outside)g
-(the)g(limits\).)61 b(T)-7 b(o)34 b(pro)r(duce)h(a)g
-Ft(")p Fj(hole)p Ft(")f Fj(in)h(a)g(co)r(ordinate)f(space)g(\(that)i
-(is,)h(an)427 2907 y(in)n(ternal)24 b(region)g(where)g(nothing)h(is)f
-(plotted\),)i(y)n(ou)e(should)h(supply)g(all)f(the)h(b)r(ounds)g(in)g
-(rev)n(ersed)e(order,)427 3006 y(and)28 b(set)f(the)h(ClipOp)g
-(attribute)g(for)f(the)h(Plot)f(to)g(a)g(non-zero)f(v)-5
-b(alue.)340 3137 y Fi(\017)45 b Fj(Either)25 b(clipping)h(limit)g(ma)n
-(y)f(b)r(e)h(set)f(to)h(the)g(v)-5 b(alue)25 b(AST)p
-Ft(__)p Fj(BAD,)h(whic)n(h)f(is)h(equiv)-5 b(alen)n(t)25
-b(to)g(setting)h(it)g(to)427 3236 y(in\014nit)n(y)i(\(or)f(min)n(us)h
-(in\014nit)n(y)g(for)f(a)g(lo)n(w)n(er)f(b)r(ound\))i(so)f(that)h(it)g
-(is)g(not)f(used.)340 3367 y Fi(\017)45 b Fj(If)29 b(a)e(graphical)f(p)
-r(osition)i(results)f(in)h(an)n(y)f(bad)h(co)r(ordinate)f(v)-5
-b(alues)27 b(\(AST)p Ft(__)p Fj(BAD\))i(when)f(transformed)427
-3466 y(in)n(to)i(the)h(clipping)f(F)-7 b(rame,)31 b(then)g(it)g(is)f
-(treated)g(\(for)g(the)h(purp)r(oses)e(of)h(pro)r(ducing)g(graphical)f
-(output\))427 3566 y(as)e(if)h(it)g(w)n(ere)f(clipp)r(ed.)340
-3696 y Fi(\017)45 b Fj(When)34 b(a)f(Plot)g(is)h(used)f(as)g(a)g
-(Mapping)h(to)f(transform)f(p)r(oin)n(ts)i(\(e.g.)54
-b(using)33 b(astT)-7 b(ran2\),)34 b(an)n(y)f(clipp)r(ed)427
-3796 y(output)28 b(p)r(oin)n(ts)g(are)f(assigned)f(co)r(ordinate)g(v)-5
-b(alues)28 b(of)f(AST)p Ft(__)p Fj(BAD.)340 3926 y Fi(\017)45
-b Fj(An)28 b(error)e(results)h(if)h(the)g(base)f(F)-7
-b(rame)27 b(of)h(the)g(Plot)f(is)g(not)h(2-dimensional.)p
-0 4121 3780 12 v 0 4252 a Fz(astClone)968 4259 y Fe(Clone)38
-b(\(duplicate\))e(an)i(Ob)7 b(ject)38 b(p)s(oin)m(ter)3271
-4252 y Fz(astClone)0 4450 y Fd(Description:)44 b Fj(This)34
-b(function)g(returns)f(a)g(duplicate)h(p)r(oin)n(ter)f(to)h(an)f
-(existing)g(Ob)5 b(ject.)55 b(It)34 b(also)e(incremen)n(ts)h(the)227
-4549 y(Ob)5 b(ject's)28 b(RefCoun)n(t)f(attribute)h(to)g(k)n(eep)f
-(trac)n(k)f(of)i(ho)n(w)f(man)n(y)g(p)r(oin)n(ters)f(ha)n(v)n(e)h(b)r
-(een)h(issued.)227 4673 y(Note)40 b(that)g(this)g(function)g(is)f(NOT)h
-(equiv)-5 b(alen)n(t)39 b(to)g(an)g(assignmen)n(t)g(statemen)n(t,)k(as)
-38 b(in)i(general)e(the)i(t)n(w)n(o)227 4772 y(p)r(oin)n(ters)27
-b(will)h(not)g(ha)n(v)n(e)e(the)i(same)f(v)-5 b(alue.)0
-4919 y Fd(Synopsis:)121 b Ft(AstObject)40 b Fi(\003)p
-Ft(astClone\()f(AstObject)h Fi(\003)p Ft(this)h(\))0
-5066 y Fd(P)m(arameters:)259 5200 y(this)427 5300 y Fj(Original)26
-b(p)r(oin)n(ter)i(to)f(the)h(Ob)5 b(ject.)0 5459 y Fd(Class)31
-b(Applicabilit)m(y:)259 5593 y(Ob)5 b(ject)427 5693 y
-Fj(This)28 b(function)g(applies)f(to)h(all)f(Ob)5 b(jects.)p
-eop end
-%%Page: 205 215
-TeXDict begin 205 214 bop 3643 52 a FF(205)0 351 y Fd(Returned)32
-b(V)-8 b(alue:)259 487 y(astClone\(\))427 586 y Fj(A)28
-b(duplicate)g(p)r(oin)n(ter)f(to)h(the)g(same)f(Ob)5
-b(ject.)0 748 y Fd(Notes:)340 1029 y Fi(\017)45 b Fj(A)35
-b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 1129 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p 0 1326 3780 12 v 0 1457 a Fz(astCmpF)-11 b(rame)548
-b Fe(Create)37 b(a)h(CmpF)-10 b(rame)546 b Fz(astCmpF)-11
-b(rame)0 1644 y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f
-(a)g(new)g(CmpF)-7 b(rame)28 b(and)f(optionally)g(initialises)g(its)h
-(attributes.)227 1768 y(A)40 b(CmpF)-7 b(rame)38 b(is)h(a)f(comp)r
-(ound)h(F)-7 b(rame)39 b(whic)n(h)g(allo)n(ws)e(t)n(w)n(o)h(comp)r
-(onen)n(t)h(F)-7 b(rames)38 b(\(of)h(an)n(y)f(class\))g(to)h(b)r(e)227
-1868 y(merged)34 b(together)h(to)f(form)h(a)g(more)f(complex)g(F)-7
-b(rame.)59 b(The)35 b(axes)f(of)h(the)g(t)n(w)n(o)f(comp)r(onen)n(t)h
-(F)-7 b(rames)34 b(then)227 1968 y(app)r(ear)i(together)g(in)h(the)g
-(resulting)f(CmpF)-7 b(rame)36 b(\(those)h(of)f(the)h(\014rst)g(F)-7
-b(rame,)38 b(follo)n(w)n(ed)e(b)n(y)g(those)h(of)f(the)227
-2067 y(second)27 b(F)-7 b(rame\).)227 2191 y(Since)24
-b(a)f(CmpF)-7 b(rame)23 b(is)g(itself)h(a)f(F)-7 b(rame,)24
-b(it)g(can)f(b)r(e)g(used)h(as)e(a)h(comp)r(onen)n(t)g(in)h(forming)f
-(further)g(CmpF)-7 b(rames.)227 2291 y(F)g(rames)27 b(of)h(arbitrary)d
-(complexit)n(y)i(ma)n(y)g(b)r(e)h(built)g(from)g(simple)f(individual)h
-(F)-7 b(rames)27 b(in)h(this)g(w)n(a)n(y)-7 b(.)227 2415
-y(Also)39 b(since)f(a)h(F)-7 b(rame)38 b(is)h(a)f(Mapping,)j(a)e(CmpF)
--7 b(rame)38 b(can)h(also)f(b)r(e)h(used)g(as)f(a)g(Mapping.)70
-b(Normally)-7 b(,)41 b(a)227 2515 y(CmpF)-7 b(rame)35
-b(is)g(simply)h(equiv)-5 b(alen)n(t)35 b(to)g(a)g(UnitMap,)i(but)f(if)g
-(either)f(of)g(the)h(comp)r(onen)n(t)f(F)-7 b(rames)34
-b(within)i(a)227 2614 y(CmpF)-7 b(rame)41 b(is)f(a)g(Region)g(\(a)g
-(sub-class)g(of)g(F)-7 b(rame\),)44 b(then)d(the)g(CmpF)-7
-b(rame)40 b(will)h(use)f(the)h(Region)f(as)g(a)227 2714
-y(Mapping)g(when)g(transforming)e(v)-5 b(alues)39 b(for)g(axes)g
-(describ)r(ed)h(b)n(y)f(the)h(Region.)73 b(Th)n(us)39
-b(input)i(axis)e(v)-5 b(alues)227 2814 y(corresp)r(onding)26
-b(to)h(p)r(ositions)h(whic)n(h)f(are)g(outside)g(the)h(Region)f(will)h
-(result)f(in)h(bad)f(output)i(axis)d(v)-5 b(alues.)0
-2962 y Fd(Synopsis:)121 b Ft(AstCmpFrame)39 b Fi(\003)p
-Ft(astCmpFrame\()f(AstFrame)i Fi(\003)p Ft(frame1,)h(AstFrame)f
-Fi(\003)p Ft(frame2,)g(const)h(char)h Fi(\003)p Ft(options,)227
-3062 y(...)86 b(\))0 3210 y Fd(P)m(arameters:)259 3346
-y(frame1)427 3446 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(\014rst)f(comp)r
-(onen)n(t)g(F)-7 b(rame.)259 3578 y Fd(frame2)427 3677
-y Fj(P)n(oin)n(ter)26 b(to)i(the)g(second)f(comp)r(onen)n(t)g(F)-7
-b(rame.)259 3809 y Fd(options)427 3909 y Fj(P)n(oin)n(ter)27
-b(to)h(a)g(n)n(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)
-g(comma-separated)e(list)i(of)g(attribute)427 4008 y(assignmen)n(ts)i
-(to)i(b)r(e)f(used)h(for)f(initialising)g(the)h(new)f(CmpF)-7
-b(rame.)48 b(The)31 b(syn)n(tax)g(used)g(is)h(iden)n(tical)f(to)427
-4108 y(that)38 b(for)e(the)i(astSet)f(function)h(and)f(ma)n(y)f
-(include)i Ft(")p Fj(prin)n(tf)p Ft(")e Fj(format)h(sp)r(eci\014ers)g
-(iden)n(ti\014ed)g(b)n(y)g Ft(")p Fj(\045)p Ft(")427
-4208 y Fj(sym)n(b)r(ols)27 b(in)h(the)g(normal)f(w)n(a)n(y)-7
-b(.)259 4340 y Fd(...)427 4439 y Fj(If)38 b(the)g Ft(")p
-Fj(options)p Ft(")e Fj(string)h(con)n(tains)f Ft(")p
-Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g
-(list)h(of)f(additional)427 4539 y(argumen)n(ts)26 b(ma)n(y)h(follo)n
-(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5 b(alues)27
-b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)37
-b(The)427 4639 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 4738 y Fj(function\).)0
-4899 y Fd(Returned)32 b(V)-8 b(alue:)259 5035 y(astCmpF)g(rame\(\))427
-5135 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(CmpF)-7
-b(rame.)0 5296 y Fd(Notes:)340 5577 y Fi(\017)45 b Fj(A)35
-b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 5677 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p eop end
-%%Page: 206 216
-TeXDict begin 206 215 bop 0 52 a FF(206)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)-2 351 y Fd(Status)j(Handling)n(:)
-227 497 y Fj(The)d(protected)g(in)n(terface)f(to)g(this)h(function)h
-(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g(the)g
-(parameter)227 597 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62
-b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)
-e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fj(in)n(t)227
-697 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p 0 895 3780
-12 v 0 1026 a Fz(astCmpMap)691 b Fe(Create)38 b(a)g(CmpMap)690
-b Fz(astCmpMap)0 1214 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(CmpMap)h(and)f(optionally)g
-(initialises)h(its)f(attributes.)227 1339 y(A)k(CmpMap)g(is)g(a)f(comp)
-r(ound)h(Mapping)f(whic)n(h)h(allo)n(ws)e(t)n(w)n(o)h(comp)r(onen)n(t)h
-(Mappings)f(\(of)h(an)n(y)f(class\))g(to)g(b)r(e)227
-1438 y(connected)h(together)e(to)h(form)g(a)g(more)g(complex)g
-(Mapping.)45 b(This)30 b(connection)g(ma)n(y)g(either)g(b)r(e)h
-Ft(")p Fj(in)f(series)p Ft(")227 1538 y Fj(\(where)21
-b(the)g(\014rst)g(Mapping)f(is)h(used)g(to)g(transform)f(the)h(co)r
-(ordinates)e(of)i(eac)n(h)f(p)r(oin)n(t)i(and)e(the)i(second)e(mapping)
-227 1638 y(is)g(then)g(applied)f(to)g(the)h(result\),)h(or)e
-Ft(")p Fj(in)g(parallel)p Ft(")f Fj(\(where)h(one)g(Mapping)g
-(transforms)f(the)i(earlier)e(co)r(ordinates)227 1737
-y(for)27 b(eac)n(h)g(p)r(oin)n(t)h(and)f(the)h(second)f(Mapping)h(sim)n
-(ultaneously)e(transforms)g(the)i(later)f(co)r(ordinates\).)227
-1862 y(Since)f(a)f(CmpMap)g(is)h(itself)g(a)f(Mapping,)g(it)h(can)f(b)r
-(e)h(used)f(as)g(a)g(comp)r(onen)n(t)g(in)h(forming)e(further)i
-(CmpMaps.)227 1961 y(Mappings)h(of)h(arbitrary)d(complexit)n(y)i(ma)n
-(y)g(b)r(e)h(built)h(from)e(simple)h(individual)f(Mappings)g(in)h(this)
-g(w)n(a)n(y)-7 b(.)0 2110 y Fd(Synopsis:)121 b Ft(AstCmpMap)40
-b Fi(\003)p Ft(astCmpMap\()f(AstMapping)g Fi(\003)p Ft(map1,)i
-(AstMapping)f Fi(\003)p Ft(map2,)h(int)h(series,)f(const)g(char)227
-2210 y Fi(\003)p Ft(options,)f(...)86 b(\))0 2359 y Fd(P)m(arameters:)
-259 2495 y(map1)427 2595 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(\014rst)f
-(comp)r(onen)n(t)g(Mapping.)259 2727 y Fd(map2)427 2827
-y Fj(P)n(oin)n(ter)f(to)i(the)g(second)f(comp)r(onen)n(t)g(Mapping.)259
-2960 y Fd(series)427 3059 y Fj(If)22 b(a)f(non-zero)e(v)-5
-b(alue)21 b(is)g(giv)n(en)f(for)h(this)h(parameter,)f(the)g(t)n(w)n(o)f
-(comp)r(onen)n(t)h(Mappings)g(will)g(b)r(e)h(connected)427
-3159 y(in)28 b(series.)36 b(A)28 b(zero)e(v)-5 b(alue)28
-b(requests)f(that)g(they)h(are)f(connected)g(in)h(parallel.)259
-3292 y Fd(options)427 3391 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 3491 y(assignmen)n(ts)23
-b(to)g(b)r(e)h(used)g(for)f(initialising)h(the)g(new)g(CmpMap.)35
-b(The)24 b(syn)n(tax)f(used)h(is)f(iden)n(tical)h(to)f(that)427
-3590 y(for)j(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-3690 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 3823
-y Fd(...)427 3922 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 4022 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 4121 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 4221 y Fj(function\).)0 4383
-y Fd(Returned)32 b(V)-8 b(alue:)259 4519 y(astCmpMap\(\))427
-4618 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(CmpMap.)0
-4780 y Fd(Notes:)340 5062 y Fi(\017)45 b Fj(If)37 b(the)g(comp)r(onen)n
-(t)g(Mappings)f(are)g(connected)g(in)h(series,)h(then)f(using)g(the)g
-(resulting)f(CmpMap)h(to)427 5162 y(transform)g(co)r(ordinates)g(will)i
-(cause)e(the)i(\014rst)f(Mapping)g(to)g(b)r(e)g(applied,)j(follo)n(w)n
-(ed)d(b)n(y)g(the)g(second)427 5262 y(Mapping.)e(If)26
-b(the)h(in)n(v)n(erse)d(CmpMap)i(transformation)e(is)i(requested,)f
-(the)i(t)n(w)n(o)e(comp)r(onen)n(t)g(Mappings)427 5361
-y(will)j(b)r(e)g(applied)g(in)g(b)r(oth)g(the)g(rev)n(erse)d(order)h
-(and)i(the)g(rev)n(erse)e(direction.)340 5494 y Fi(\017)45
-b Fj(When)27 b(connecting)f(t)n(w)n(o)g(comp)r(onen)n(t)g(Mappings)f
-(in)i(series,)e(the)i(n)n(um)n(b)r(er)f(of)h(output)f(co)r(ordinates)f
-(gen-)427 5593 y(erated)h(b)n(y)g(the)g(\014rst)g(Mapping)g(\(its)h
-(Nout)f(attribute\))h(m)n(ust)f(equal)f(the)i(n)n(um)n(b)r(er)f(of)g
-(input)h(co)r(ordinates)427 5693 y(accepted)h(b)n(y)f(the)h(second)f
-(Mapping)g(\(its)h(Nin)g(attribute\).)p eop end
-%%Page: 207 217
-TeXDict begin 207 216 bop 3643 52 a FF(207)340 351 y
-Fi(\017)45 b Fj(If)19 b(the)g(comp)r(onen)n(t)g(Mappings)f(of)h(a)f
-(CmpMap)h(are)e(connected)i(in)g(parallel,)g(then)h(the)f(\014rst)f
-(Mapping)g(will)427 451 y(b)r(e)28 b(used)f(to)g(transform)g(the)g
-(earlier)f(input)i(co)r(ordinates)e(for)h(eac)n(h)f(p)r(oin)n(t)i
-(\(and)f(to)g(pro)r(duce)g(the)h(earlier)427 551 y(output)34
-b(co)r(ordinates\))e(and)g(the)i(second)e(Mapping)h(will)g(b)r(e)h
-(used)e(sim)n(ultaneously)h(to)f(transform)g(the)427
-650 y(remaining)f(input)i(co)r(ordinates)e(\(to)h(pro)r(duce)g(the)h
-(remaining)e(output)h(co)r(ordinates)f(for)h(eac)n(h)f(p)r(oin)n(t\).)
-427 750 y(If)37 b(the)g(in)n(v)n(erse)e(transformation)f(is)j
-(requested,)g(eac)n(h)f(Mapping)g(will)h(still)f(b)r(e)h(applied)f(to)g
-(the)h(same)427 849 y(co)r(ordinates,)27 b(but)h(in)g(the)g(rev)n(erse)
-d(direction.)340 991 y Fi(\017)45 b Fj(When)27 b(connecting)e(t)n(w)n
-(o)g(comp)r(onen)n(t)g(Mappings)g(in)h(parallel,)f(there)h(is)f(no)h
-(restriction)e(on)i(the)g(n)n(um)n(b)r(er)427 1091 y(of)i(input)g(and)g
-(output)g(co)r(ordinates)e(for)h(eac)n(h)g(Mapping.)340
-1233 y Fi(\017)45 b Fj(Note)19 b(that)f(the)h(comp)r(onen)n(t)f
-(Mappings)g(supplied)h(are)e(not)h(copied)g(b)n(y)h(astCmpMap)f(\(the)h
-(new)f(CmpMap)427 1332 y(simply)31 b(retains)f(a)g(reference)f(to)i
-(them\).)46 b(They)31 b(ma)n(y)f(con)n(tin)n(ue)g(to)g(b)r(e)h(used)g
-(for)f(other)f(purp)r(oses,)i(but)427 1432 y(should)21
-b(not)g(b)r(e)g(deleted.)35 b(If)22 b(a)e(CmpMap)h(con)n(taining)f(a)h
-(cop)n(y)f(of)h(its)g(comp)r(onen)n(t)f(Mappings)h(is)g(required,)427
-1531 y(then)28 b(a)g(cop)n(y)e(of)i(the)g(CmpMap)f(should)h(b)r(e)g
-(made)f(using)h(astCop)n(y)-7 b(.)340 1673 y Fi(\017)45
-b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 1773 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p 0 1990 3780 12 v 0 2122 a Fz(astCmpRegion)1352
-2120 y Fe(Create)38 b(a)g(CmpRegion)2917 2122 y Fz(astCmpRegion)0
-2328 y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(CmpRegion)h(and)f(optionally)g(initialises)g(its)h(attributes.)227
-2462 y(A)i(CmpRegion)f(is)h(a)f(Region)g(whic)n(h)g(allo)n(ws)g(t)n(w)n
-(o)f(comp)r(onen)n(t)i(Regions)e(\(of)i(an)n(y)f(class\))g(to)g(b)r(e)h
-(com)n(bined)g(to)227 2561 y(form)g(a)f(more)f(complex)i(Region.)42
-b(This)29 b(com)n(bination)g(ma)n(y)g(b)r(e)h(p)r(erformed)f(a)g(b)r(o)
-r(olean)g(AND,)i(OR)e(or)g(X)n(OR)227 2661 y(\(exclusiv)n(e)j(OR\))h
-(op)r(erator.)49 b(If)33 b(the)g(AND)g(op)r(erator)e(is)h(used,)i(then)
-f(a)f(p)r(osition)g(is)h(inside)f(the)h(CmpRegion)227
-2761 y(only)28 b(if)g(it)g(is)g(inside)g(b)r(oth)g(of)g(its)g(t)n(w)n
-(o)f(comp)r(onen)n(t)g(Regions.)37 b(If)28 b(the)g(OR)g(op)r(erator)e
-(is)h(used,)h(then)g(a)g(p)r(osition)227 2860 y(is)g(inside)h(the)g
-(CmpRegion)f(if)g(it)h(is)f(inside)h(either)f(\(or)g(b)r(oth\))h(of)f
-(its)h(t)n(w)n(o)e(comp)r(onen)n(t)h(Regions.)38 b(If)29
-b(the)g(X)n(OR)227 2960 y(op)r(erator)24 b(is)i(used,)g(then)h(a)e(p)r
-(osition)h(is)g(inside)g(the)g(CmpRegion)f(if)i(it)f(is)g(inside)f(one)
-h(but)g(not)g(b)r(oth)h(of)e(its)h(t)n(w)n(o)227 3060
-y(comp)r(onen)n(t)j(Regions.)41 b(Other)28 b(op)r(erators)g(can)g(b)r
-(e)i(formed)f(b)n(y)g(negating)f(one)h(or)f(b)r(oth)i(comp)r(onen)n(t)f
-(Regions)227 3159 y(b)r(efore)f(using)f(them)h(to)f(construct)h(a)f
-(new)g(CmpRegion.)227 3293 y(The)i(t)n(w)n(o)e(comp)r(onen)n(t)h
-(Region)g(need)g(not)h(refer)e(to)h(the)h(same)f(co)r(ordinate)f(F)-7
-b(rame,)28 b(but)h(it)g(m)n(ust)f(b)r(e)h(p)r(ossible)227
-3392 y(for)39 b(the)h(astCon)n(v)n(ert)e(function)i(to)f(determine)h(a)
-f(Mapping)g(b)r(et)n(w)n(een)h(them)g(\(an)f(error)f(will)h(b)r(e)h
-(rep)r(orted)227 3492 y(otherwise)33 b(when)g(the)h(CmpRegion)f(is)g
-(created\).)54 b(F)-7 b(or)33 b(instance,)i(a)e(CmpRegion)g(ma)n(y)f
-(com)n(bine)h(a)g(Region)227 3592 y(de\014ned)k(within)f(an)g(ICRS)g
-(SkyF)-7 b(rame)36 b(with)g(a)g(Region)f(de\014ned)i(within)f(a)g
-(Galactic)f(SkyF)-7 b(rame.)62 b(This)36 b(is)227 3691
-y(acceptable)i(b)r(ecause)g(the)g(SkyF)-7 b(rame)38 b(class)f(kno)n(ws)
-g(ho)n(w)h(to)g(con)n(v)n(ert)e(b)r(et)n(w)n(een)j(these)f(t)n(w)n(o)f
-(systems,)k(and)227 3791 y(consequen)n(tly)33 b(the)i(astCon)n(v)n(ert)
-d(function)j(will)f(also)f(b)r(e)h(able)g(to)g(con)n(v)n(ert)f(b)r(et)n
-(w)n(een)h(them.)57 b(In)34 b(suc)n(h)g(cases,)227 3890
-y(the)f(second)g(comp)r(onen)n(t)f(Region)g(will)h(b)r(e)h(mapp)r(ed)f
-(in)n(to)f(the)h(co)r(ordinate)f(F)-7 b(rame)32 b(of)h(the)g(\014rst)g
-(comp)r(onen)n(t)227 3990 y(Region,)g(and)g(the)f(F)-7
-b(rame)32 b(represen)n(ted)g(b)n(y)g(the)h(CmpRegion)f(as)f(a)h(whole)g
-(will)h(b)r(e)g(the)g(F)-7 b(rame)32 b(of)g(the)h(\014rst)227
-4090 y(comp)r(onen)n(t)28 b(Region.)227 4223 y(Since)20
-b(a)f(CmpRegion)f(is)i(itself)f(a)g(Region,)i(it)e(can)g(b)r(e)h(used)f
-(as)g(a)g(comp)r(onen)n(t)g(in)g(forming)g(further)g(CmpRegions.)227
-4323 y(Regions)27 b(of)g(arbitrary)f(complexit)n(y)h(ma)n(y)g(b)r(e)h
-(built)g(from)g(simple)f(individual)h(Regions)f(in)g(this)h(w)n(a)n(y)
--7 b(.)0 4490 y Fd(Synopsis:)121 b Ft(AstCmpRegion)38
-b Fi(\003)p Ft(astCmpRegion\()g(AstRegion)i Fi(\003)p
-Ft(region1,)g(AstRegion)g Fi(\003)p Ft(region2,)f(int)k(oper,)227
-4590 y(const)f(char)g Fi(\003)p Ft(options,)e(...)85
-b(\))0 4757 y Fd(P)m(arameters:)259 4911 y(region1)427
-5011 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(\014rst)f(comp)r(onen)n(t)g
-(Region.)259 5153 y Fd(region2)427 5252 y Fj(P)n(oin)n(ter)20
-b(to)h(the)g(second)g(comp)r(onen)n(t)f(Region.)34 b(This)21
-b(Region)g(will)g(b)r(e)h(transformed)d(in)n(to)i(the)h(co)r(ordinate)
-427 5352 y(F)-7 b(rame)27 b(of)h(the)g(\014rst)f(region)g(b)r(efore)g
-(use.)37 b(An)28 b(error)d(will)j(b)r(e)g(rep)r(orted)f(if)h(this)g(is)
-f(not)h(p)r(ossible.)259 5494 y Fd(op)s(er)427 5593 y
-Fj(The)38 b(b)r(o)r(olean)f(op)r(erator)f(with)i(whic)n(h)g(to)f(com)n
-(bine)h(the)g(t)n(w)n(o)f(Regions.)66 b(This)37 b(m)n(ust)h(b)r(e)g
-(one)g(of)f(the)427 5693 y(sym)n(b)r(olic)27 b(constan)n(ts)g(AST)p
-Ft(__)p Fj(AND,)h(AST)p Ft(__)p Fj(OR)f(or)g(AST)p Ft(__)p
-Fj(X)n(OR.)p eop end
-%%Page: 208 218
-TeXDict begin 208 217 bop 0 52 a FF(208)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(options)427
-451 y Fj(P)n(oin)n(ter)d(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-551 y(assignmen)n(ts)36 b(to)h(b)r(e)g(used)g(for)f(initialising)h(the)
-g(new)g(CmpRegion.)64 b(The)37 b(syn)n(tax)f(used)h(is)g(iden)n(tical)
-427 650 y(to)29 b(that)h(for)f(the)g(astSet)g(function)h(and)f(ma)n(y)g
-(include)g Ft(")p Fj(prin)n(tf)p Ft(")g Fj(format)g(sp)r(eci\014ers)f
-(iden)n(ti\014ed)i(b)n(y)f Ft(")p Fj(\045)p Ft(")427
-750 y Fj(sym)n(b)r(ols)e(in)h(the)g(normal)f(w)n(a)n(y)-7
-b(.)259 895 y Fd(...)427 995 y Fj(If)38 b(the)g Ft(")p
-Fj(options)p Ft(")e Fj(string)h(con)n(tains)f Ft(")p
-Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g
-(list)h(of)f(additional)427 1095 y(argumen)n(ts)26 b(ma)n(y)h(follo)n
-(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5 b(alues)27
-b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)37
-b(The)427 1194 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 1294 y Fj(function\).)0
-1481 y Fd(Returned)32 b(V)-8 b(alue:)259 1643 y(astCmpRegion\(\))427
-1743 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(CmpRegion.)0
-1931 y Fd(Notes:)340 2239 y Fi(\017)45 b Fj(If)35 b(one)f(of)g(the)h
-(supplied)g(Regions)e(has)h(an)g(asso)r(ciated)f(uncertain)n(t)n(y)-7
-b(,)35 b(that)g(uncertain)n(t)n(y)e(will)i(also)e(b)r(e)427
-2338 y(used)h(for)f(the)h(returned)f(CmpRegion.)55 b(If)34
-b(b)r(oth)g(supplied)g(Regions)e(ha)n(v)n(e)h(asso)r(ciated)f
-(uncertain)n(ties,)427 2438 y(the)c(uncertain)n(t)n(y)f(asso)r(ciated)f
-(with)i(the)g(\014rst)g(Region)f(will)g(b)r(e)h(used)g(for)f(the)h
-(returned)f(CmpRegion.)340 2584 y Fi(\017)45 b Fj(Deep)22
-b(copies)f(are)f(tak)n(en)h(of)g(the)h(supplied)g(Regions.)33
-b(This)22 b(means)f(that)g(an)n(y)g(subsequen)n(t)g(c)n(hanges)f(made)
-427 2683 y(to)26 b(the)g(comp)r(onen)n(t)g(Regions)f(using)g(the)i
-(supplied)f(p)r(oin)n(ters)f(will)h(ha)n(v)n(e)f(no)h(e\013ect)g(on)g
-(the)g(CmpRegion.)340 2829 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 2929 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 3153 3780 12 v 0 3284
-a Fz(astCon)l(v)l(ert)887 3285 y Fe(Determine)38 b(ho)m(w)g(to)g(con)m
-(v)m(ert)f(b)s(et)m(w)m(een)h(t)m(w)m(o)1404 3385 y(co)s(ordinate)f
-(systems)3138 3284 y Fz(astCon)l(v)l(ert)0 3599 y Fd(Description:)44
-b Fj(This)29 b(function)h(compares)d(t)n(w)n(o)h(F)-7
-b(rames)28 b(and)h(determines)f(whether)h(it)g(is)g(p)r(ossible)f(to)h
-(con)n(v)n(ert)f(b)r(e-)227 3699 y(t)n(w)n(een)c(the)h(co)r(ordinate)e
-(systems)g(whic)n(h)h(they)h(represen)n(t.)34 b(If)25
-b(con)n(v)n(ersion)d(is)i(p)r(ossible,)g(it)h(returns)e(a)h(F)-7
-b(rameSet)227 3799 y(whic)n(h)34 b(describ)r(es)f(the)h(con)n(v)n
-(ersion)d(and)j(whic)n(h)f(ma)n(y)g(b)r(e)h(used)g(\(as)f(a)g
-(Mapping\))h(to)f(transform)g(co)r(ordinate)227 3898
-y(v)-5 b(alues)27 b(in)h(either)g(direction.)227 4035
-y(The)38 b(same)g(function)g(ma)n(y)g(also)e(b)r(e)j(used)f(to)g
-(determine)g(ho)n(w)f(to)h(con)n(v)n(ert)f(b)r(et)n(w)n(een)g(t)n(w)n
-(o)h(F)-7 b(rameSets)37 b(\(or)227 4135 y(b)r(et)n(w)n(een)23
-b(a)g(F)-7 b(rame)22 b(and)h(a)f(F)-7 b(rameSet,)24 b(or)e(vice)g(v)n
-(ersa\).)34 b(This)23 b(mo)r(de)g(is)g(in)n(tended)g(for)f(use)h(when)g
-(\(for)g(example\))227 4235 y(t)n(w)n(o)j(images)f(ha)n(v)n(e)g(b)r
-(een)i(calibrated)e(b)n(y)h(attac)n(hing)g(a)g(F)-7 b(rameSet)26
-b(to)g(eac)n(h.)35 b(astCon)n(v)n(ert)25 b(migh)n(t)h(then)h(b)r(e)g
-(used)227 4334 y(to)g(searc)n(h)e(for)h(a)g(celestial)g(co)r(ordinate)f
-(system)i(that)f(b)r(oth)h(images)f(ha)n(v)n(e)f(in)i(common,)f(and)h
-(the)g(result)f(could)227 4434 y(then)36 b(b)r(e)f(used)g(to)g(con)n(v)
-n(ert)f(b)r(et)n(w)n(een)h(the)g(pixel)g(co)r(ordinates)f(of)h(b)r(oth)
-g(images)f({)h(ha)n(ving)f(e\013ectiv)n(ely)h(used)227
-4534 y(their)28 b(celestial)f(co)r(ordinate)f(systems)h(to)h(align)f
-(them.)227 4671 y(When)33 b(using)f(F)-7 b(rameSets,)33
-b(there)f(ma)n(y)f(b)r(e)i(more)e(than)h(one)g(p)r(ossible)g(in)n
-(termediate)f(co)r(ordinate)g(system)h(in)227 4771 y(whic)n(h)j(to)g(p)
-r(erform)f(the)h(con)n(v)n(ersion)e(\(for)h(instance,)j(t)n(w)n(o)d(F)
--7 b(rameSets)34 b(migh)n(t)h(b)r(oth)g(ha)n(v)n(e)f(celestial)g(co)r
-(ordi-)227 4870 y(nates,)27 b(detector)g(co)r(ordinates,)g(pixel)g(co)r
-(ordinates,)f(etc.\).)38 b(A)27 b(comma-separated)e(list)j(of)g(co)r
-(ordinate)e(system)227 4970 y(domains)e(ma)n(y)g(therefore)g(b)r(e)h
-(giv)n(en)f(whic)n(h)g(de\014nes)h(a)f(priorit)n(y)g(order)f(to)h(use)h
-(when)g(selecting)f(the)h(in)n(termedi-)227 5069 y(ate)c(co)r(ordinate)
-e(system.)34 b(The)21 b(path)g(used)f(for)g(con)n(v)n(ersion)f(m)n(ust)
-h(go)g(via)g(an)g(in)n(termediate)g(co)r(ordinate)g(system)227
-5169 y(whose)k(Domain)h(attribute)f(matc)n(hes)g(one)h(of)f(the)h
-(domains)f(giv)n(en.)35 b(If)25 b(con)n(v)n(ersion)d(cannot)j(b)r(e)g
-(ac)n(hiev)n(ed)e(using)227 5269 y(the)28 b(\014rst)g(domain,)f(the)h
-(next)g(one)f(is)g(considered,)g(and)g(so)g(on,)h(un)n(til)g(success)e
-(is)i(ac)n(hiev)n(ed.)0 5444 y Fd(Synopsis:)121 b Ft(AstFrameSet)39
-b Fi(\003)p Ft(astConvert\()f(AstFrame)j Fi(\003)p Ft(from,)g(AstFrame)
-f Fi(\003)p Ft(to,)i(const)f(char)h Fi(\003)p Ft(domainlist)227
-5543 y(\))0 5718 y Fd(P)m(arameters:)p eop end
-%%Page: 209 219
-TeXDict begin 209 218 bop 3643 52 a FF(209)259 351 y
-Fd(from)427 451 y Fj(P)n(oin)n(ter)27 b(to)h(a)g(F)-7
-b(rame)27 b(whic)n(h)h(represen)n(ts)f(the)i Ft(")p Fj(source)p
-Ft(")d Fj(co)r(ordinate)h(system.)38 b(This)28 b(is)g(the)h(co)r
-(ordinate)427 551 y(system)f(in)f(whic)n(h)h(y)n(ou)f(already)f(ha)n(v)
-n(e)g(co)r(ordinates)h(a)n(v)-5 b(ailable.)427 668 y(If)26
-b(a)g(F)-7 b(rameSet)25 b(is)h(giv)n(en,)f(its)h(curren)n(t)f(F)-7
-b(rame)25 b(\(as)g(determined)h(b)n(y)f(its)h(Curren)n(t)f(attribute\))
-h(is)g(tak)n(en)f(to)427 767 y(describ)r(e)32 b(the)g(source)f(co)r
-(ordinate)g(system.)50 b(Note)32 b(that)g(the)h(Base)e(attribute)h(of)g
-(this)h(F)-7 b(rameSet)31 b(ma)n(y)427 867 y(b)r(e)d(mo)r(di\014ed)f(b)
-n(y)g(this)g(function)g(to)g(indicate)g(whic)n(h)g(in)n(termediate)f
-(co)r(ordinate)g(system)h(w)n(as)f(used)h(\(see)427 967
-y(under)h Ft(")p Fj(F)-7 b(rameSets)p Ft(")26 b Fj(in)i(the)g
-Ft(")p Fj(Applicabilit)n(y)p Ft(")f Fj(section)g(for)g(details\).)259
-1101 y Fd(to)427 1201 y Fj(P)n(oin)n(ter)h(to)i(a)f(F)-7
-b(rame)29 b(whic)n(h)h(represen)n(ts)e(the)i Ft(")p Fj(destination)p
-Ft(")f Fj(co)r(ordinate)g(system.)43 b(This)29 b(is)h(the)g(co)r(or-)
-427 1300 y(dinate)e(system)f(in)n(to)h(whic)n(h)f(y)n(ou)g(wish)h(to)f
-(con)n(v)n(ert)f(y)n(our)h(co)r(ordinates.)427 1417 y(If)33
-b(a)f(F)-7 b(rameSet)32 b(is)g(giv)n(en,)h(its)f(curren)n(t)f(F)-7
-b(rame)32 b(\(as)g(determined)g(b)n(y)g(its)h(Curren)n(t)e(attribute\))
-i(is)f(tak)n(en)427 1517 y(to)25 b(describ)r(e)g(the)h(destination)f
-(co)r(ordinate)f(system.)35 b(Note)26 b(that)f(the)h(Base)e(attribute)h
-(of)g(this)h(F)-7 b(rameSet)427 1617 y(ma)n(y)25 b(b)r(e)i(mo)r
-(di\014ed)f(b)n(y)g(this)g(function)g(to)g(indicate)g(whic)n(h)g(in)n
-(termediate)f(co)r(ordinate)g(system)h(w)n(as)f(used)427
-1716 y(\(see)j(under)f Ft(")p Fj(F)-7 b(rameSets)p Ft(")27
-b Fj(in)g(the)h Ft(")p Fj(Applicabilit)n(y)p Ft(")f Fj(section)h(for)f
-(details\).)259 1851 y Fd(domainlist)427 1951 y Fj(P)n(oin)n(ter)36
-b(to)i(a)f(n)n(ull-terminated)g(c)n(haracter)e(string)i(con)n(taining)g
-(a)g(comma-separated)e(list)j(of)f(F)-7 b(rame)427 2050
-y(domains.)35 b(This)22 b(ma)n(y)g(b)r(e)h(used)f(to)g(de\014ne)h(a)f
-(priorit)n(y)f(order)g(for)h(the)h(di\013eren)n(t)g(in)n(termediate)f
-(co)r(ordinate)427 2150 y(systems)27 b(that)h(migh)n(t)g(b)r(e)g(used)f
-(to)h(p)r(erform)f(the)h(con)n(v)n(ersion.)427 2267 y(The)39
-b(function)g(will)f(\014rst)g(try)g(to)g(obtain)g(a)g(con)n(v)n(ersion)
-e(b)n(y)i(making)g(use)g(only)g(of)g(an)g(in)n(termediate)427
-2367 y(co)r(ordinate)h(system)g(whose)g(Domain)h(attribute)g(matc)n
-(hes)f(the)h(\014rst)g(domain)f(in)h(this)g(list.)74
-b(If)40 b(this)427 2466 y(fails,)32 b(the)g(second)f(domain)g(in)g(the)
-h(list)g(will)f(b)r(e)h(used,)g(and)g(so)e(on,)i(un)n(til)g(con)n(v)n
-(ersion)d(is)i(ac)n(hiev)n(ed.)47 b(A)427 2566 y(blank)26
-b(domain)g(\(e.g.)36 b(t)n(w)n(o)25 b(consecutiv)n(e)g(commas\))g
-(indicates)h(that)g(all)g(co)r(ordinate)f(systems)g(should)h(b)r(e)427
-2665 y(considered,)h(regardless)e(of)j(their)f(domains.)427
-2783 y(This)37 b(list)h(is)f(case-insensitiv)n(e)f(and)h(all)g(white)g
-(space)g(is)g(ignored.)65 b(If)37 b(y)n(ou)g(do)g(not)g(wish)g(to)g
-(restrict)427 2882 y(the)30 b(domain)f(in)h(this)f(w)n(a)n(y)-7
-b(,)29 b(y)n(ou)f(should)h(supply)h(an)f(empt)n(y)g(string.)42
-b(This)29 b(is)g(normally)g(appropriate)e(if)427 2982
-y(either)i(of)g(the)h(source)e(or)g(destination)h(co)r(ordinate)f
-(systems)h(are)f(describ)r(ed)h(b)n(y)g(F)-7 b(rames)28
-b(\(rather)g(than)427 3081 y(F)-7 b(rameSets\),)35 b(since)e(there)g
-(is)g(then)h(usually)f(only)g(one)g(p)r(ossible)g(c)n(hoice)g(of)g(in)n
-(termediate)g(co)r(ordinate)427 3181 y(system.)0 3346
-y Fd(Class)e(Applicabilit)m(y:)259 3486 y(DSBSp)s(ecF)-8
-b(rame)427 3586 y Fj(If)24 b(the)g(AlignSideBand)g(attribute)g(is)f
-(non-zero,)g(alignmen)n(t)g(o)r(ccurs)g(in)h(the)g(upp)r(er)f(sideband)
-h(expressed)427 3686 y(within)30 b(the)f(sp)r(ectral)f(system)g(and)h
-(standard)e(of)i(rest)f(giv)n(en)g(b)n(y)g(attributes)h(AlignSystem)f
-(and)h(Align-)427 3785 y(StdOfRest.)58 b(If)35 b(AlignSideBand)f(is)g
-(zero,)i(the)e(t)n(w)n(o)g(DSBSp)r(ecF)-7 b(rames)34
-b(are)g(aligned)f(as)h(if)h(they)g(w)n(ere)427 3885 y(simple)28
-b(Sp)r(ecF)-7 b(rames)27 b(\(i.e.)37 b(the)28 b(SideBand)g(is)f
-(ignored\).)259 4020 y Fd(F)-8 b(rame)427 4119 y Fj(This)26
-b(function)f(applies)g(to)g(all)g(F)-7 b(rames.)36 b(Alignmen)n(t)25
-b(o)r(ccurs)g(within)h(the)f(co)r(ordinate)f(system)h(giv)n(en)g(b)n(y)
-427 4219 y(attribute)j(AlignSystem.)259 4353 y Fd(F)-8
-b(rameSet)427 4453 y Fj(If)31 b(either)g(of)f(the)h Ft(")p
-Fj(from)p Ft(")f Fj(or)f Ft(")p Fj(to)p Ft(")h Fj(parameters)f(is)h(a)h
-(p)r(oin)n(ter)f(to)g(a)g(F)-7 b(rameSet,)32 b(then)f(astCon)n(v)n(ert)
-d(will)427 4553 y(attempt)d(to)f(con)n(v)n(ert)f(from)h(the)h(co)r
-(ordinate)e(system)h(describ)r(ed)g(b)n(y)g(the)h(curren)n(t)e(F)-7
-b(rame)24 b(of)g(the)h Ft(")p Fj(from)p Ft(")427 4652
-y Fj(F)-7 b(rameSet)28 b(to)f(that)h(describ)r(ed)f(b)n(y)h(the)g
-(curren)n(t)e(F)-7 b(rame)27 b(of)h(the)g Ft(")p Fj(to)p
-Ft(")f Fj(F)-7 b(rameSet.)427 4769 y(T)g(o)34 b(ac)n(hiev)n(e)g(this,)i
-(it)f(will)g(consider)f(all)g(of)g(the)h(F)-7 b(rames)34
-b(within)h(eac)n(h)f(F)-7 b(rameSet)35 b(as)e(a)i(p)r(ossible)f(w)n(a)n
-(y)427 4869 y(of)g(reac)n(hing)e(an)i(in)n(termediate)f(co)r(ordinate)g
-(system)g(that)h(can)g(b)r(e)g(used)g(for)f(the)h(con)n(v)n(ersion.)53
-b(There)427 4969 y(is)30 b(then)h(the)g(p)r(ossibilit)n(y)f(that)h
-(more)e(than)i(one)e(con)n(v)n(ersion)f(path)j(ma)n(y)f(exist)g(and,)h
-(unless)f(the)g(c)n(hoice)427 5068 y(is)36 b(su\016cien)n(tly)g
-(restricted)f(b)n(y)h(the)g Ft(")p Fj(domainlist)p Ft(")f
-Fj(string,)i(the)f(sequence)f(in)i(whic)n(h)e(the)i(F)-7
-b(rames)35 b(are)427 5168 y(considered)j(can)h(b)r(e)h(imp)r(ortan)n
-(t.)71 b(In)39 b(this)h(case,)h(the)f(searc)n(h)d(for)i(a)g(con)n(v)n
-(ersion)e(path)i(pro)r(ceeds)f(as)427 5268 y(follo)n(ws:)510
-5376 y Fi(\017)45 b Fj(Eac)n(h)27 b(\014eld)h(in)f(the)h
-Ft(")p Fj(domainlist)p Ft(")f Fj(string)g(is)g(considered)g(in)h(turn.)
-510 5494 y Fi(\017)45 b Fj(The)26 b(F)-7 b(rames)24 b(within)i(eac)n(h)
-f(F)-7 b(rameSet)25 b(are)f(considered)h(in)g(a)g(sp)r(eci\014c)h
-(order:)34 b(\(1\))26 b(the)f(base)g(F)-7 b(rame)597
-5593 y(is)28 b(alw)n(a)n(ys)d(considered)i(\014rst,)g(\(2\))h(after)f
-(this)h(come)f(all)h(the)g(other)f(F)-7 b(rames)26 b(in)i(F)-7
-b(rame-index)27 b(order)597 5693 y(\(but)h(omitting)f(the)g(base)g(and)
-f(curren)n(t)g(F)-7 b(rames\),)27 b(\(3\))g(the)g(curren)n(t)f(F)-7
-b(rame)27 b(is)g(alw)n(a)n(ys)e(considered)p eop end
-%%Page: 210 220
-TeXDict begin 210 219 bop 0 52 a FF(210)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)597 351 y Fj(last.)35
-b(Ho)n(w)n(ev)n(er,)22 b(if)i(either)f(F)-7 b(rameSet's)23
-b(In)n(v)n(ert)f(attribute)h(is)h(set)f(to)g(a)f(non-zero)g(v)-5
-b(alue)23 b(\(so)g(that)g(the)597 451 y(F)-7 b(rameSet)30
-b(is)h(in)n(v)n(erted\),)f(then)h(its)g(F)-7 b(rames)30
-b(are)f(considered)h(in)g(rev)n(erse)f(order.)44 b(\(Note)31
-b(that)f(this)597 551 y(still)h(means)e(that)h(the)h(base)e(F)-7
-b(rame)29 b(is)h(considered)f(\014rst)h(and)g(the)g(curren)n(t)f(F)-7
-b(rame)30 b(last,)g(b)r(ecause)597 650 y(the)e(In)n(v)n(ert)f(v)-5
-b(alue)27 b(will)h(also)f(cause)g(these)g(F)-7 b(rames)27
-b(to)h(sw)n(ap)e(places.\))510 772 y Fi(\017)45 b Fj(All)34
-b(source)d(F)-7 b(rames)33 b(are)f(\014rst)g(considered)g(\(in)i(the)f
-(appropriate)e(order\))h(for)h(con)n(v)n(ersion)d(to)j(the)597
-872 y(\014rst)26 b(destination)g(F)-7 b(rame.)36 b(If)27
-b(no)e(suitable)h(in)n(termediate)g(co)r(ordinate)f(system)h(emerges,)f
-(they)i(are)597 971 y(then)d(considered)e(again)g(for)g(con)n(v)n
-(ersion)f(to)h(the)i(second)e(destination)h(F)-7 b(rame)22
-b(\(in)i(the)f(appropriate)597 1071 y(order\),)k(and)g(so)g(on.)510
-1193 y Fi(\017)45 b Fj(Generally)-7 b(,)26 b(the)h(\014rst)f(suitable)g
-(in)n(termediate)h(co)r(ordinate)e(system)h(found)h(is)f(used.)36
-b(Ho)n(w)n(ev)n(er,)25 b(the)597 1293 y(o)n(v)n(erall)32
-b(Mapping)i(b)r(et)n(w)n(een)h(the)f(source)g(and)g(destination)g(co)r
-(ordinate)f(systems)h(is)g(also)f(exam-)597 1392 y(ined.)51
-b(Preference)31 b(is)h(giv)n(en)f(to)h(cases)f(where)h(b)r(oth)g(the)h
-(forw)n(ard)d(and)i(in)n(v)n(erse)f(transformations)597
-1492 y(are)g(de\014ned)g(\(as)g(indicated)g(b)n(y)g(the)h(T)-7
-b(ranF)g(orw)n(ard)29 b(and)i(T)-7 b(ranIn)n(v)n(erse)29
-b(attributes\).)48 b(If)31 b(only)g(one)597 1592 y(transformation)26
-b(is)i(de\014ned,)g(the)g(forw)n(ard)e(one)h(is)g(preferred.)510
-1714 y Fi(\017)45 b Fj(If)32 b(the)f(domain)g(of)g(the)h(in)n
-(termediate)e(co)r(ordinate)g(system)h(matc)n(hes)g(the)g(curren)n(t)g
-Ft(")p Fj(domainlist)p Ft(")597 1813 y Fj(\014eld,)21
-b(the)e(con)n(v)n(ersion)d(path)i(is)h(accepted.)33 b(Otherwise,)20
-b(the)f(next)f Ft(")p Fj(domainlist)p Ft(")g Fj(\014eld)g(is)h
-(considered)597 1913 y(and)28 b(the)g(pro)r(cess)e(rep)r(eated.)427
-2057 y(If)33 b(con)n(v)n(ersion)c(is)j(p)r(ossible,)g(the)h(Base)d
-(attributes)i(of)g(the)g(t)n(w)n(o)f(F)-7 b(rameSets)31
-b(will)h(b)r(e)h(mo)r(di\014ed)f(on)f(exit)427 2157 y(to)h(iden)n(tify)
-g(the)g(F)-7 b(rames)31 b(used)g(to)h(access)e(the)i(in)n(termediate)f
-(co)r(ordinate)f(system)i(whic)n(h)f(w)n(as)g(\014nally)427
-2257 y(accepted.)427 2379 y(Note)26 b(that)f(it)h(is)f(p)r(ossible)g
-(to)h(force)e(a)h(particular)f(F)-7 b(rame)25 b(within)h(a)f(F)-7
-b(rameSet)25 b(to)h(b)r(e)g(used)f(as)g(the)g(basis)427
-2478 y(for)32 b(the)g(in)n(termediate)g(co)r(ordinate)f(system,)i(if)f
-(it)h(is)f(suitable,)h(b)n(y)f(\(a\))g(fo)r(cussing)g(atten)n(tion)g
-(on)f(it)i(b)n(y)427 2578 y(sp)r(ecifying)28 b(its)g(domain)g(in)g(the)
-g Ft(")p Fj(domainlist)p Ft(")f Fj(string,)g(or)g(\(b\))h(making)g(it)g
-(the)g(base)f(F)-7 b(rame,)28 b(since)f(this)427 2677
-y(is)h(alw)n(a)n(ys)d(considered)i(\014rst.)259 2822
-y Fd(Sp)s(ecF)-8 b(rame)427 2922 y Fj(Alignmen)n(t)28
-b(o)r(ccurs)e(within)i(the)g(sp)r(ectral)f(system)g(and)g(standard)g
-(of)g(rest)g(giv)n(en)f(b)n(y)i(attributes)f(Align-)427
-3021 y(System)h(and)f(AlignStdOfRest.)259 3166 y Fd(TimeF)-8
-b(rame)427 3265 y Fj(Alignmen)n(t)24 b(o)r(ccurs)e(within)h(the)h(time)
-f(system)g(and)g(time)g(scale)g(giv)n(en)f(b)n(y)h(attributes)g
-(AlignSystem)g(and)427 3365 y(AlignTimeScale.)0 3550
-y Fd(Returned)32 b(V)-8 b(alue:)259 3710 y(astCon)m(v)m(ert\(\))427
-3809 y Fj(If)21 b(the)g(requested)e(co)r(ordinate)g(con)n(v)n(ersion)f
-(is)j(p)r(ossible,)g(the)g(function)g(returns)e(a)h(p)r(oin)n(ter)g(to)
-g(a)g(F)-7 b(rameSet)427 3909 y(whic)n(h)28 b(describ)r(es)f(the)h(con)
-n(v)n(ersion.)36 b(Otherwise,)27 b(a)g(n)n(ull)h(Ob)5
-b(ject)28 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fj(NULL\))h(is)g(returned)
-427 4008 y(without)g(error.)427 4130 y(If)37 b(a)g(F)-7
-b(rameSet)36 b(is)h(returned,)h(it)f(will)g(con)n(tain)f(t)n(w)n(o)g(F)
--7 b(rames.)64 b(F)-7 b(rame)36 b(n)n(um)n(b)r(er)g(1)h(\(its)g(base)f
-(F)-7 b(rame\))427 4230 y(will)32 b(describ)r(e)f(the)h(source)e(co)r
-(ordinate)h(system,)h(corresp)r(onding)d(to)j(the)g Ft(")p
-Fj(from)p Ft(")e Fj(parameter.)47 b(F)-7 b(rame)427 4330
-y(n)n(um)n(b)r(er)27 b(2)g(\(its)g(curren)n(t)f(F)-7
-b(rame\))27 b(will)g(describ)r(e)g(the)g(destination)g(co)r(ordinate)f
-(system,)h(corresp)r(onding)427 4429 y(to)j(the)g Ft(")p
-Fj(to)p Ft(")e Fj(parameter.)42 b(The)29 b(Mapping)h(whic)n(h)f(in)n
-(ter-relates)f(these)i(t)n(w)n(o)e(F)-7 b(rames)29 b(will)h(p)r(erform)
-f(the)427 4529 y(required)e(con)n(v)n(ersion)e(b)r(et)n(w)n(een)j
-(their)f(resp)r(ectiv)n(e)g(co)r(ordinate)g(systems.)427
-4651 y(Note)h(that)h(a)f(F)-7 b(rameSet)28 b(ma)n(y)f(b)r(e)i(used)f(b)
-r(oth)g(as)g(a)g(Mapping)f(and)h(as)g(a)g(F)-7 b(rame.)38
-b(If)28 b(the)h(result)f(is)g(used)427 4751 y(as)g(a)g(Mapping)g
-(\(e.g.)40 b(with)29 b(astT)-7 b(ran2\),)27 b(then)i(it)g(pro)n(vides)e
-(a)h(means)g(of)g(con)n(v)n(erting)f(co)r(ordinates)g(from)427
-4850 y(the)34 b(source)e(to)i(the)g(destination)f(co)r(ordinate)f
-(system)i(\(or)f(vice)g(v)n(ersa)f(if)i(its)f(in)n(v)n(erse)f
-(transformation)427 4950 y(is)g(selected\).)50 b(If)33
-b(it)f(is)g(used)g(as)f(a)h(F)-7 b(rame,)33 b(its)f(attributes)g(will)g
-(describ)r(e)g(the)g(destination)g(co)r(ordinate)427
-5049 y(system.)0 5235 y Fd(Examples:)227 5398 y Fq(cvt)47
-b(=)h(astConvert\()c(a,)k(b,)f Ft("")g Fq(\);)427 5494
-y Fj(A)n(ttempts)32 b(to)e(con)n(v)n(ert)f(b)r(et)n(w)n(een)i(the)f(co)
-r(ordinate)g(systems)g(represen)n(ted)f(b)n(y)h Ft(")p
-Fj(a)p Ft(")g Fj(and)g Ft(")p Fj(b)p Ft(")g Fj(\(assumed)427
-5593 y(to)25 b(b)r(e)g(F)-7 b(rames\).)35 b(If)26 b(successful,)f(a)f
-(F)-7 b(rameSet)24 b(is)h(returned)f(via)g(the)i Ft(")p
-Fj(cvt)p Ft(")e Fj(p)r(oin)n(ter)g(whic)n(h)h(ma)n(y)f(b)r(e)h(used)427
-5693 y(to)j(apply)f(the)h(con)n(v)n(ersion)d(to)j(sets)f(of)h(co)r
-(ordinates)e(\(e.g.)37 b(using)27 b(astT)-7 b(ran2\).)p
-eop end
-%%Page: 211 221
-TeXDict begin 211 220 bop 3643 52 a FF(211)227 352 y
-Fq(cvt)47 b(=)h(astConvert\()c(astSkyFrame\()p Ft("")p
-Fq(\),)f(astSkyFrame\()p Ft(")p Fq(Equinox=2005)o Ft(")p
-Fq(\),)e Ft("")47 b Fq(\);)427 451 y Fj(Creates)23 b(a)g(F)-7
-b(rameSet)23 b(whic)n(h)g(describ)r(es)g(precession)f(in)i(the)g
-(default)g(FK5)f(celestial)g(co)r(ordinate)f(system)427
-551 y(b)r(et)n(w)n(een)k(equino)n(xes)e(J2000)f(\(also)h(the)i
-(default\))g(and)g(J2005.)33 b(The)26 b(returned)f Ft(")p
-Fj(cvt)p Ft(")f Fj(p)r(oin)n(ter)h(ma)n(y)g(then)427
-650 y(b)r(e)h(passed)f(to)g(astT)-7 b(ran2)24 b(to)h(apply)g(this)h
-(precession)e(correction)f(to)j(an)n(y)e(n)n(um)n(b)r(er)h(of)h(co)r
-(ordinate)e(v)-5 b(alues)427 750 y(giv)n(en)27 b(in)h(radians.)427
-867 y(Note)h(that)h(the)f(returned)f(F)-7 b(rameSet)29
-b(also)f(con)n(tains)g(information)g(ab)r(out)h(ho)n(w)g(to)f(format)h
-(co)r(ordinate)427 967 y(v)-5 b(alues.)47 b(This)30 b(means)h(that)g
-(setting)g(its)g(Rep)r(ort)f(attribute)h(to)g(1)g(is)f(a)h(simple)g(w)n
-(a)n(y)e(to)i(obtain)g(prin)n(ted)427 1067 y(output)j(\(formatted)f(in)
-g(sexagesimal)e(notation\))i(to)g(sho)n(w)f(the)i(co)r(ordinate)e(v)-5
-b(alues)32 b(b)r(efore)h(and)g(after)427 1166 y(con)n(v)n(ersion.)227
-1303 y Fq(cvt)47 b(=)h(astConvert\()c(a,)k(b,)f Ft(")p
-Fq(sky,detector,)p Ft(")c Fq(\);)427 1401 y Fj(A)n(ttempts)34
-b(to)f(con)n(v)n(ert)f(b)r(et)n(w)n(een)h(the)g(co)r(ordinate)f
-(systems)g(represen)n(ted)g(b)n(y)h(the)g(curren)n(t)f(F)-7
-b(rames)33 b(of)427 1501 y Ft(")p Fj(a)p Ft(")21 b Fj(and)i
-Ft(")p Fj(b)p Ft(")f Fj(\(no)n(w)g(assumed)g(to)g(b)r(e)h(F)-7
-b(rameSets\),)23 b(via)f(the)h(in)n(termediate)f Ft(")p
-Fj(SKY)p Ft(")g Fj(co)r(ordinate)f(system.)427 1600 y(This,)28
-b(b)n(y)g(default,)g(is)g(the)g(Domain)g(asso)r(ciated)e(with)i(a)g
-(celestial)f(co)r(ordinate)g(system)g(represen)n(ted)g(b)n(y)427
-1700 y(a)g(SkyF)-7 b(rame.)427 1818 y(If)21 b(this)h(fails)e(\(for)h
-(example,)g(b)r(ecause)g(either)f(F)-7 b(rameSet)21 b(lac)n(ks)e
-(celestial)i(co)r(ordinate)e(information\),)j(then)427
-1917 y(the)27 b(user-de\014ned)g Ft(")p Fj(DETECTOR)p
-Ft(")e Fj(co)r(ordinate)g(system)i(is)f(used)h(instead.)37
-b(If)27 b(this)g(also)f(fails,)h(then)g(all)427 2017
-y(other)g(p)r(ossible)h(w)n(a)n(ys)e(of)h(ac)n(hieving)g(con)n(v)n
-(ersion)e(are)h(considered)h(b)r(efore)g(giving)g(up.)427
-2134 y(The)d(returned)f(p)r(oin)n(ter)h Ft(")p Fj(cvt)p
-Ft(")f Fj(indicates)g(whether)h(con)n(v)n(ersion)d(w)n(as)i(p)r
-(ossible)g(and)h(will)g(ha)n(v)n(e)f(the)h(v)-5 b(alue)427
-2234 y(AST)p Ft(__)p Fj(NULL)32 b(if)h(it)f(w)n(as)f(not.)50
-b(If)32 b(con)n(v)n(ersion)e(w)n(as)g(p)r(ossible,)j
-Ft(")p Fj(cvt)p Ft(")e Fj(will)h(p)r(oin)n(t)h(at)e(a)h(new)g(F)-7
-b(rameSet)427 2334 y(describing)27 b(the)h(con)n(v)n(ersion.)427
-2451 y(The)38 b(Base)e(attributes)h(of)h(the)f(t)n(w)n(o)g(F)-7
-b(rameSets)37 b(will)g(b)r(e)h(set)f(b)n(y)g(astCon)n(v)n(ert)f(to)h
-(indicate)g(whic)n(h)h(of)427 2551 y(their)f(F)-7 b(rames)37
-b(w)n(as)f(used)h(for)g(the)g(in)n(termediate)g(co)r(ordinate)f
-(system.)65 b(This)37 b(means)g(that)h(y)n(ou)e(can)427
-2650 y(subsequen)n(tly)22 b(determine)g(whic)n(h)h(co)r(ordinate)e
-(system)h(w)n(as)f(used)h(b)n(y)g(enquiring)g(the)g(Domain)g(attribute)
-427 2750 y(of)28 b(either)f(base)g(F)-7 b(rame.)0 2917
-y Fd(Notes:)340 3204 y Fi(\017)45 b Fj(The)40 b(Mapping)f(represen)n
-(ted)f(b)n(y)h(the)h(returned)f(F)-7 b(rameSet)40 b(results)f(in)g
-(alignmen)n(t)g(taking)g(place)g(in)427 3304 y(the)d(co)r(ordinate)f
-(system)g(sp)r(eci\014ed)h(b)n(y)f(the)h(AlignSystem)g(attribute)g(of)f
-(the)i Ft(")p Fj(to)p Ft(")d Fj(F)-7 b(rame.)61 b(See)35
-b(the)427 3404 y(description)27 b(of)h(the)g(AlignSystem)g(attribute)f
-(for)g(further)h(details.)340 3539 y Fi(\017)45 b Fj(When)d(aligning)e
-(\(sa)n(y\))g(t)n(w)n(o)h(images,)i(whic)n(h)e(ha)n(v)n(e)f(b)r(een)h
-(calibrated)f(b)n(y)h(attac)n(hing)f(F)-7 b(rameSets)41
-b(to)427 3639 y(them,)26 b(it)e(is)h(usually)e(necessary)g(to)h(con)n
-(v)n(ert)f(b)r(et)n(w)n(een)h(the)h(base)e(F)-7 b(rames)24
-b(\(represen)n(ting)f Ft(")p Fj(nativ)n(e)p Ft(")g Fj(pixel)427
-3738 y(co)r(ordinates\))f(of)g(b)r(oth)i(F)-7 b(rameSets.)34
-b(This)23 b(ma)n(y)f(b)r(e)h(ac)n(hiev)n(ed)f(b)n(y)g(in)n(v)n(erting)g
-(the)h(F)-7 b(rameSets)22 b(\(e.g.)35 b(using)427 3838
-y(astIn)n(v)n(ert\))27 b(so)g(as)g(to)g(in)n(terc)n(hange)f(their)i
-(base)f(and)g(curren)n(t)g(F)-7 b(rames)27 b(b)r(efore)g(using)g
-(astCon)n(v)n(ert.)340 3973 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 4073 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 4277 3780 12 v 0 4408
-a Fz(astCop)l(y)1482 4409 y Fe(Cop)m(y)37 b(an)i(Ob)7
-b(ject)3302 4408 y Fz(astCop)l(y)0 4603 y Fd(Description:)44
-b Fj(This)38 b(function)h(creates)d(a)i(cop)n(y)f(of)h(an)f(Ob)5
-b(ject)38 b(and)g(returns)f(a)h(p)r(oin)n(ter)f(to)h(the)g(resulting)g
-(new)227 4703 y(Ob)5 b(ject.)62 b(It)36 b(mak)n(es)f(a)h
-Ft(")p Fj(deep)p Ft(")f Fj(cop)n(y)-7 b(,)38 b(whic)n(h)d(con)n(tains)h
-(no)f(references)g(to)h(an)n(y)f(other)g(Ob)5 b(ject)36
-b(\(i.e.)63 b(if)36 b(the)227 4802 y(original)29 b(Ob)5
-b(ject)31 b(con)n(tains)f(references)g(to)g(other)g(Ob)5
-b(jects,)32 b(then)f(the)g(actual)f(data)h(are)e(copied,)j(not)f
-(simply)227 4902 y(the)d(references\).)36 b(This)27 b(means)f(that)i
-(mo)r(di\014cations)e(ma)n(y)h(safely)f(b)r(e)i(made)f(to)f(the)i(cop)n
-(y)e(without)i(indirectly)227 5001 y(a\013ecting)g(an)n(y)e(other)h(Ob)
-5 b(ject.)0 5156 y Fd(Synopsis:)121 b Ft(AstObject)40
-b Fi(\003)p Ft(astCopy\()g(const)h(AstObject)f Fi(\003)p
-Ft(this)h(\))0 5310 y Fd(P)m(arameters:)259 5452 y(this)427
-5552 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject)27
-b(to)h(b)r(e)g(copied.)0 5718 y Fd(Class)j(Applicabilit)m(y:)p
-eop end
-%%Page: 212 222
-TeXDict begin 212 221 bop 0 52 a FF(212)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(Ob)5
-b(ject)427 451 y Fj(This)28 b(function)g(applies)f(to)h(all)f(Ob)5
-b(jects.)0 613 y Fd(Returned)32 b(V)-8 b(alue:)259 749
-y(astCop)m(y\(\))427 849 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(new)f(Ob)5
-b(ject.)0 1011 y Fd(Notes:)340 1294 y Fi(\017)45 b Fj(A)35
-b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 1393 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p 0 1593 3780 12 v 0 1725 a Fz(astCurren)l(tTime)272
-b Fe(Return)38 b(the)h(curren)m(t)e(system)1776 1835
-y(time)2838 1725 y Fz(astCurren)l(tTime)0 2001 y Fd(Description:)44
-b Fj(This)33 b(function)g(returns)e(the)i(curren)n(t)f(system)g(time,)i
-(represen)n(ted)d(in)i(the)f(form)g(sp)r(eci\014ed)h(b)n(y)f(the)227
-2101 y(supplied)i(TimeF)-7 b(rame.)53 b(That)34 b(is,)g(the)g(returned)
-f(\015oating)f(p)r(oin)n(t)i(v)-5 b(alue)33 b(should)g(b)r(e)h(in)n
-(terpreted)e(using)h(the)227 2200 y(attribute)d(v)-5
-b(alues)28 b(of)h(the)h(TimeF)-7 b(rame.)41 b(This)29
-b(includes)g(System,)h(TimeOrigin,)e(L)-7 b(TO\013set,)30
-b(TimeScale,)f(and)227 2300 y(Unit.)0 2450 y Fd(Synopsis:)121
-b Ft(double)41 b(astCurrentTime\()c(AstTimeFrame)i Fi(\003)p
-Ft(this)i(\))0 2599 y Fd(P)m(arameters:)259 2736 y(this)427
-2835 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(TimeF)-7 b(rame.)0
-2997 y Fd(Returned)32 b(V)-8 b(alue:)259 3134 y(astCurren)m(tTime\(\))
-427 3234 y Fj(A)28 b(TimeF)-7 b(rame)27 b(axis)g(v)-5
-b(alue)28 b(represen)n(ting)e(the)i(curren)n(t)e(system)i(time.)0
-3396 y Fd(Notes:)340 3678 y Fi(\017)45 b Fj(V)-7 b(alues)29
-b(of)g(AST)p Ft(__)p Fj(BAD)g(will)g(b)r(e)h(returned)e(if)i(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(the)f(AST)h(error)d(status)
-427 3778 y(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)340 3911 y Fi(\017)45 b Fj(It)33 b(is)f(assumes)f(that)i(the)g
-(system)f(time)g(\(returned)h(b)n(y)f(the)g(C)h(time\(\))g(function\))g
-(follo)n(ws)e(the)i(POSIX)427 4010 y(standard,)24 b(represen)n(ting)e
-(a)h(con)n(tin)n(uous)f(monotonic)h(increasing)f(coun)n(t)h(of)g(SI)h
-(seconds)f(since)g(the)h(ep)r(o)r(c)n(h)427 4110 y(00:00:00)j(UTC)k(1)e
-(Jan)n(uary)f(1970)g(AD)j(\(equiv)-5 b(alen)n(t)30 b(to)g(T)-7
-b(AI)30 b(with)g(a)g(constan)n(t)f(o\013set\).)44 b(Resolution)30
-b(is)427 4210 y(one)d(second.)340 4343 y Fi(\017)45 b
-Fj(An)24 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)h(the)g(TimeF)-7
-b(rame)23 b(has)g(a)g(TimeScale)h(v)-5 b(alue)23 b(whic)n(h)h(cannot)f
-(b)r(e)h(con)n(v)n(erted)427 4442 y(to)k(T)-7 b(AI)28
-b(\(e.g.)36 b Ft(")p Fj(angular)p Ft(")26 b Fj(systems)h(suc)n(h)g(as)g
-(UT1,)g(GMST,)h(LMST)g(and)g(LAST\).)340 4575 y Fi(\017)45
-b Fj(An)n(y)28 b(inaccuracy)e(in)i(the)g(system)f(clo)r(c)n(k)g(will)h
-(b)r(e)g(re\015ected)f(in)h(the)g(v)-5 b(alue)27 b(returned)h(b)n(y)f
-(this)h(function.)p 0 4775 V 0 4905 a Fz(astCurv)l(e)1318
-4906 y Fe(Dra)m(w)38 b(a)g(geo)s(desic)g(curv)m(e)3253
-4905 y Fz(astCurv)l(e)0 5095 y Fd(Description:)44 b Fj(This)21
-b(function)h(dra)n(ws)e(a)h(geo)r(desic)f(curv)n(e)g(b)r(et)n(w)n(een)h
-(t)n(w)n(o)g(p)r(oin)n(ts)g(in)g(the)h(ph)n(ysical)e(co)r(ordinate)g
-(system)227 5195 y(of)30 b(a)g(Plot.)43 b(The)30 b(curv)n(e)f(dra)n(wn)
-g(is)h(the)g(path)g(of)g(shortest)f(distance)h(joining)g(the)g(t)n(w)n
-(o)f(p)r(oin)n(ts)h(\(as)g(de\014ned)g(b)n(y)227 5295
-y(the)g(astDistance)e(function)i(for)e(the)h(curren)n(t)f(F)-7
-b(rame)29 b(of)g(the)g(Plot\).)40 b(F)-7 b(or)29 b(example,)g(if)g(the)
-g(curren)n(t)f(F)-7 b(rame)29 b(is)227 5394 y(a)g(basic)f(F)-7
-b(rame,)28 b(then)i(the)f(curv)n(e)f(joining)g(the)h(t)n(w)n(o)f(p)r
-(oin)n(ts)h(will)g(b)r(e)g(a)f(straigh)n(t)g(line)h(in)g(ph)n(ysical)f
-(co)r(ordinate)227 5494 y(space.)34 b(If)23 b(the)f(curren)n(t)f(F)-7
-b(rame)21 b(is)h(more)f(sp)r(ecialised)g(and)h(describ)r(es,)g(for)g
-(instance,)g(a)g(sky)f(co)r(ordinate)g(system,)227 5593
-y(then)32 b(the)f(geo)r(desic)g(curv)n(e)f(w)n(ould)g(b)r(e)i(a)f
-(great)e(circle)i(in)g(ph)n(ysical)g(co)r(ordinate)e(space)i(passing)f
-(through)g(the)227 5693 y(t)n(w)n(o)d(sky)g(p)r(ositions)g(giv)n(en.)p
-eop end
-%%Page: 213 223
-TeXDict begin 213 222 bop 3643 52 a FF(213)227 351 y
-Fj(Note)27 b(that)g(the)g(geo)r(desic)f(curv)n(e)g(is)h(transformed)e
-(in)n(to)i(graphical)e(co)r(ordinate)h(space)g(for)g(plotting,)h(so)f
-(that)h(a)227 451 y(straigh)n(t)20 b(line)h(in)g(ph)n(ysical)e(co)r
-(ordinates)h(ma)n(y)g(result)g(in)h(a)f(curv)n(ed)g(line)h(b)r(eing)g
-(dra)n(wn)e(if)j(the)f(Mapping)f(in)n(v)n(olv)n(ed)227
-551 y(is)29 b(non-linear.)40 b(An)n(y)29 b(discon)n(tin)n(uities)g(in)g
-(the)h(Mapping)e(b)r(et)n(w)n(een)h(ph)n(ysical)g(and)f(graphical)g(co)
-r(ordinates)g(are)227 650 y(catered)f(for,)g(as)g(is)h(an)n(y)e
-(clipping)i(established)f(using)h(astClip.)227 783 y(If)c(y)n(ou)f
-(need)h(to)g(dra)n(w)e(man)n(y)h(geo)r(desic)g(curv)n(es)g(end-to-end,)
-h(then)g(the)g(astP)n(olyCurv)n(e)d(function)j(is)g(equiv)-5
-b(alen)n(t)227 883 y(to)28 b(rep)r(eatedly)f(using)g(astCurv)n(e,)f
-(but)j(will)e(usually)h(b)r(e)g(more)e(e\016cien)n(t.)227
-1015 y(If)i(y)n(ou)f(need)h(to)f(dra)n(w)g(curv)n(es)f(whic)n(h)i(are)e
-(not)i(geo)r(desics,)e(see)i(astGenCurv)n(e)e(or)h(astGridLine.)0
-1182 y Fd(Synopsis:)121 b Ft(void)42 b(astCurve\()e(AstPlot)g
-Fi(\003)p Ft(this,)h(const)h(double)f(start[],)f(const)i(double)f
-(finish[])f(\))0 1348 y Fd(P)m(arameters:)259 1501 y(this)427
-1600 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259 1741
-y Fd(start)427 1841 y Fj(An)j(arra)n(y)-7 b(,)30 b(with)h(one)f(elemen)
-n(t)h(for)f(eac)n(h)g(axis)g(of)h(the)g(Plot,)g(giving)e(the)j(ph)n
-(ysical)d(co)r(ordinates)h(of)g(the)427 1941 y(\014rst)e(p)r(oin)n(t)f
-(on)h(the)g(geo)r(desic)e(curv)n(e.)259 2082 y Fd(\014nish)427
-2181 y Fj(An)31 b(arra)n(y)-7 b(,)30 b(with)h(one)f(elemen)n(t)h(for)f
-(eac)n(h)g(axis)g(of)h(the)g(Plot,)g(giving)e(the)j(ph)n(ysical)d(co)r
-(ordinates)h(of)g(the)427 2281 y(second)d(p)r(oin)n(t)h(on)f(the)h(geo)
-r(desic)f(curv)n(e.)0 2460 y Fd(Notes:)340 2759 y Fi(\017)45
-b Fj(No)33 b(curv)n(e)f(is)h(dra)n(wn)g(if)g(either)g(of)g(the)h
-Ft(")p Fj(start)p Ft(")e Fj(or)g Ft(")p Fj(\014nish)p
-Ft(")g Fj(arra)n(ys)f(con)n(tains)h(an)n(y)g(co)r(ordinates)g(with)427
-2858 y(the)c(v)-5 b(alue)28 b(AST)p Ft(__)p Fj(BAD.)340
-2999 y Fi(\017)45 b Fj(An)28 b(error)e(results)h(if)h(the)g(base)f(F)-7
-b(rame)27 b(of)h(the)g(Plot)f(is)g(not)h(2-dimensional.)340
-3141 y Fi(\017)45 b Fj(An)30 b(error)d(also)g(results)i(if)g(the)g
-(transformation)f(b)r(et)n(w)n(een)h(the)g(curren)n(t)f(and)h(base)f(F)
--7 b(rames)28 b(of)h(the)g(Plot)427 3240 y(is)f(not)f(de\014ned)h
-(\(i.e.)38 b(the)28 b(Plot's)e(T)-7 b(ranIn)n(v)n(erse)26
-b(attribute)h(is)h(zero\).)p 0 3456 3780 12 v 0 3587
-a Fz(astDSBSp)t(ecF)-11 b(rame)169 b Fe(Create)37 b(a)i(DSBSp)s(ecF)-10
-b(rame)169 b Fz(astDSBSp)t(ecF)-11 b(rame)0 3792 y Fd(Description:)44
-b Fj(This)28 b(function)g(creates)f(a)g(new)g(DSBSp)r(ecF)-7
-b(rame)28 b(and)g(optionally)e(initialises)i(its)f(attributes.)227
-3925 y(A)37 b(DSBSp)r(ecF)-7 b(rame)37 b(is)f(a)g(sp)r(ecialised)g
-(form)g(of)h(Sp)r(ecF)-7 b(rame)36 b(whic)n(h)h(represen)n(ts)e(p)r
-(ositions)h(in)g(a)g(sp)r(ectrum)227 4025 y(obtained)f(using)g(a)f
-(dual)h(sideband)g(instrumen)n(t.)60 b(Suc)n(h)35 b(an)g(instrumen)n(t)
-g(pro)r(duces)f(a)h(sp)r(ectrum)g(in)h(whic)n(h)227 4124
-y(eac)n(h)f(p)r(oin)n(t)h(con)n(tains)e(con)n(tributions)h(from)g(t)n
-(w)n(o)g(distinctly)h(di\013eren)n(t)f(frequencies,)i(one)f(from)f(the)
-h Ft(")p Fj(lo)n(w)n(er)227 4224 y(side)41 b(band)p Ft(")f
-Fj(\(LSB\))h(and)f(one)g(from)h(the)g Ft(")p Fj(upp)r(er)f(side)g(band)
-p Ft(")g Fj(\(USB\).)i(Corresp)r(onding)d(LSB)h(and)g(USB)227
-4324 y(frequencies)d(are)f(connected)h(b)n(y)g(the)g(fact)h(that)f
-(they)g(are)g(an)f(equal)h(distance)g(on)g(either)g(side)g(of)g(a)g
-(\014xed)227 4423 y(cen)n(tral)27 b(frequency)g(kno)n(wn)g(as)g(the)h
-Ft(")p Fj(Lo)r(cal)e(Oscillator)p Ft(")g Fj(\(LO\))i(frequency)-7
-b(.)227 4556 y(When)33 b(quoting)e(a)g(p)r(osition)h(within)g(suc)n(h)g
-(a)f(sp)r(ectrum,)i(it)g(is)e(necessary)f(to)i(indicate)g(whether)g
-(the)g(quoted)227 4656 y(p)r(osition)27 b(is)g(the)g(USB)g(p)r(osition)
-g(or)f(the)i(corresp)r(onding)d(LSB)i(p)r(osition.)36
-b(The)27 b(SideBand)g(attribute)g(pro)n(vides)227 4755
-y(this)36 b(indication.)60 b(Another)35 b(option)g(that)h(the)f
-(SideBand)g(attribute)h(pro)n(vides)e(is)h(to)g(represen)n(t)f(a)h(sp)r
-(ectral)227 4855 y(p)r(osition)28 b(b)n(y)f(its)h(top)r(o)r(cen)n(tric)
-f(o\013set)g(from)h(the)g(LO)f(frequency)-7 b(.)227 4988
-y(In)32 b(practice,)f(the)h(LO)f(frequency)g(is)g(sp)r(eci\014ed)g(b)n
-(y)g(giving)g(the)h(distance)f(from)g(the)g(LO)g(frequency)g(to)g(some)
-227 5087 y Ft(")p Fj(cen)n(tral)p Ft(")37 b Fj(sp)r(ectral)h(p)r
-(osition.)69 b(T)n(ypically)37 b(this)i(cen)n(tral)e(p)r(osition)h(is)h
-(that)f(of)h(some)f(in)n(teresting)f(sp)r(ectral)227
-5187 y(feature.)f(The)23 b(distance)h(from)f(this)h(cen)n(tral)f(p)r
-(osition)g(to)h(the)g(LO)f(frequency)g(is)g(kno)n(wn)g(as)g(the)h
-Ft(")p Fj(in)n(termediate)227 5287 y(frequency)p Ft(")k
-Fj(\(IF\).)h(The)g(v)-5 b(alue)28 b(supplied)h(for)f(IF)h(can)f(b)r(e)h
-(a)f(signed)g(v)-5 b(alue)28 b(in)h(order)e(to)h(indicate)h(whether)f
-(the)227 5386 y(LO)f(frequency)h(is)f(ab)r(o)n(v)n(e)f(or)h(b)r(elo)n
-(w)g(the)h(cen)n(tral)f(p)r(osition.)0 5552 y Fd(Synopsis:)121
-b Ft(AstDSBSpecFrame)37 b Fi(\003)p Ft(astDSBSpecFrame\()g(const)k
-(char)h Fi(\003)p Ft(options,)e(...)86 b(\))0 5718 y
-Fd(P)m(arameters:)p eop end
-%%Page: 214 224
-TeXDict begin 214 223 bop 0 52 a FF(214)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(options)427
-451 y Fj(P)n(oin)n(ter)d(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-551 y(assignmen)n(ts)f(to)g(b)r(e)h(used)g(for)f(initialising)g(the)h
-(new)g(DSBSp)r(ecF)-7 b(rame.)37 b(The)28 b(syn)n(tax)f(used)g(is)h
-(iden)n(tical)427 650 y(to)h(that)h(for)f(the)g(astSet)g(function)h
-(and)f(ma)n(y)g(include)g Ft(")p Fj(prin)n(tf)p Ft(")g
-Fj(format)g(sp)r(eci\014ers)f(iden)n(ti\014ed)i(b)n(y)f
-Ft(")p Fj(\045)p Ft(")427 750 y Fj(sym)n(b)r(ols)e(in)h(the)g(normal)f
-(w)n(a)n(y)-7 b(.)259 889 y Fd(...)427 989 y Fj(If)38
-b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 1089 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 1188 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 1288 y Fj(function\).)0
-1463 y Fd(Returned)32 b(V)-8 b(alue:)259 1613 y(astDSBSp)s(ecF)g
-(rame\(\))427 1713 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(DSBSp)r
-(ecF)-7 b(rame.)0 1888 y Fd(Notes:)340 2184 y Fi(\017)45
-b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 2284 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p 0 2497 3780 12 v 0 2627 a Fz(astDecomp)t(ose)246
-b Fe(Decomp)s(ose)39 b(a)f(Mapping)g(in)m(to)f(t)m(w)m(o)1342
-2740 y(comp)s(onen)m(t)g(Mappings)2945 2627 y Fz(astDecomp)t(ose)0
-2943 y Fd(Description:)44 b Fj(This)33 b(function)h(returns)e(p)r(oin)n
-(ters)g(to)h(t)n(w)n(o)f(Mappings)g(whic)n(h,)j(when)e(applied)g
-(either)f(in)i(series)d(or)227 3042 y(parallel,)c(are)f(equiv)-5
-b(alen)n(t)28 b(to)f(the)h(supplied)g(Mapping.)227 3174
-y(Since)h(the)g(F)-7 b(rame)28 b(class)f(inherits)i(from)f(the)h
-(Mapping)f(class,)g(F)-7 b(rames)27 b(can)h(b)r(e)h(considered)f(as)f
-(sp)r(ecial)i(t)n(yp)r(es)227 3273 y(of)f(Mappings)f(and)g(so)g(this)h
-(metho)r(d)g(can)f(b)r(e)h(used)g(to)f(decomp)r(ose)g(either)h(CmpMaps)
-f(or)g(CmpF)-7 b(rames.)0 3436 y Fd(Synopsis:)121 b Ft(void)42
-b(astDecompose\()c(AstMapping)h Fi(\003)p Ft(this,)i(AstMapping)f
-Fi(\003\003)p Ft(map1,)g(AstMapping)g Fi(\003\003)p Ft(map2,)g(int)227
-3536 y Fi(\003)p Ft(series,)g(int)j Fi(\003)p Ft(invert1,)d(int)i
-Fi(\003)p Ft(invert2)e(\))0 3699 y Fd(P)m(arameters:)259
-3849 y(this)427 3948 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Mapping.)259
-4088 y Fd(map1)427 4188 y Fj(Address)f(of)h(a)f(lo)r(cation)g(to)h
-(receiv)n(e)e(a)h(p)r(oin)n(ter)g(to)h(\014rst)f(comp)r(onen)n(t)g
-(Mapping.)259 4327 y Fd(map2)427 4427 y Fj(Address)g(of)h(a)f(lo)r
-(cation)g(to)h(receiv)n(e)e(a)h(p)r(oin)n(ter)g(to)h(second)f(comp)r
-(onen)n(t)g(Mapping.)259 4566 y Fd(series)427 4666 y
-Fj(Address)33 b(of)h(a)f(lo)r(cation)g(to)h(receiv)n(e)e(a)h(v)-5
-b(alue)34 b(indicating)f(if)i(the)f(comp)r(onen)n(t)f(Mappings)g(are)g
-(applied)427 4766 y(in)38 b(series)e(or)h(parallel.)65
-b(A)38 b(non-zero)e(v)-5 b(alue)37 b(means)g(that)h(the)f(supplied)h
-(Mapping)f(is)h(equiv)-5 b(alen)n(t)37 b(to)427 4865
-y(applying)26 b(map1)g(follo)n(w)n(ed)g(b)n(y)g(map2)g(in)h(series.)35
-b(A)27 b(zero)e(v)-5 b(alue)27 b(means)f(that)h(the)g(supplied)g
-(Mapping)f(is)427 4965 y(equiv)-5 b(alen)n(t)29 b(to)g(applying)f(map1)
-g(to)h(the)g(lo)n(w)n(er)f(n)n(um)n(b)r(ered)g(axes)g(and)h(map2)g(to)f
-(the)i(higher)e(n)n(um)n(b)r(ered)427 5065 y(axes,)f(in)h(parallel.)259
-5204 y Fd(in)m(v)m(ert1)427 5304 y Fj(The)g(v)-5 b(alue)27
-b(of)h(the)g(In)n(v)n(ert)f(attribute)g(to)h(b)r(e)g(used)f(with)i
-(map1.)259 5443 y Fd(in)m(v)m(ert2)427 5543 y Fj(The)f(v)-5
-b(alue)27 b(of)h(the)g(In)n(v)n(ert)f(attribute)g(to)h(b)r(e)g(used)f
-(with)i(map2.)0 5718 y Fd(Class)i(Applicabilit)m(y:)p
-eop end
-%%Page: 215 225
-TeXDict begin 215 224 bop 3643 52 a FF(215)259 351 y
-Fd(CmpMap)427 451 y Fj(If)22 b(the)g(supplied)g(Mapping)g(is)f(a)g
-(CmpMap,)i(then)f(map1)f(and)h(map2)f(will)h(b)r(e)g(returned)f
-(holding)g(p)r(oin)n(ters)427 551 y(to)31 b(the)g(comp)r(onen)n(t)g
-(Mappings)f(used)h(to)g(create)f(the)h(CmpMap,)h(either)f(in)g(series)f
-(or)g(parallel.)46 b(Note,)427 650 y(c)n(hanging)19 b(the)i(In)n(v)n
-(ert)e(attribute)h(of)h(either)f(of)g(the)g(comp)r(onen)n(t)g(Mappings)
-g(using)g(the)g(returned)g(p)r(oin)n(ters)427 750 y(will)31
-b(ha)n(v)n(e)e(no)g(e\013ect)i(on)f(the)g(supplied)h(CmpMap.)44
-b(This)30 b(is)g(b)r(ecause)g(the)g(CmpMap)h(remem)n(b)r(ers)e(and)427
-849 y(uses)f(the)h(original)e(settings)i(of)f(the)h(In)n(v)n(ert)f
-(attributes)g(\(that)i(is,)e(the)h(v)-5 b(alues)29 b(of)f(the)h(In)n(v)
-n(ert)f(attributes)427 949 y(when)37 b(the)g(CmpMap)g(w)n(as)e(\014rst)
-h(created\).)64 b(These)36 b(are)f(the)i(In)n(v)n(ert)f(v)-5
-b(alues)36 b(whic)n(h)h(are)e(returned)h(in)427 1049
-y(in)n(v)n(ert1)27 b(and)g(in)n(v)n(ert2.)259 1182 y
-Fd(T)-8 b(ranMap)427 1281 y Fj(If)22 b(the)h(supplied)f(Mapping)f(is)h
-(a)f(T)-7 b(ranMap,)22 b(then)g(map1)g(and)f(map2)g(will)h(b)r(e)h
-(returned)e(holding)g(p)r(oin)n(ters)427 1381 y(to)28
-b(the)h(forw)n(ard)d(and)i(in)n(v)n(erse)f(Mappings)g(represen)n(ted)g
-(b)n(y)h(the)g(T)-7 b(ranMap)27 b(\(zero)h(will)g(b)r(e)g(returned)g
-(for)427 1481 y(series\).)46 b(Note,)32 b(c)n(hanging)d(the)j(In)n(v)n
-(ert)d(attribute)i(of)g(either)g(of)g(the)g(comp)r(onen)n(t)g(Mappings)
-f(using)g(the)427 1580 y(returned)25 b(p)r(oin)n(ters)g(will)h(ha)n(v)n
-(e)e(no)h(e\013ect)h(on)f(the)g(supplied)h(T)-7 b(ranMap.)35
-b(This)26 b(is)f(b)r(ecause)g(the)h(T)-7 b(ranMap)427
-1680 y(remem)n(b)r(ers)31 b(and)g(uses)h(the)g(original)e(settings)h
-(of)h(the)f(In)n(v)n(ert)g(attributes)h(\(that)g(is,)g(the)g(v)-5
-b(alues)32 b(of)f(the)427 1779 y(In)n(v)n(ert)23 b(attributes)h(when)g
-(the)h(T)-7 b(ranMap)23 b(w)n(as)f(\014rst)i(created\).)35
-b(These)24 b(are)f(the)h(In)n(v)n(ert)f(v)-5 b(alues)24
-b(whic)n(h)g(are)427 1879 y(returned)j(in)h(in)n(v)n(ert1)f(and)g(in)n
-(v)n(ert2.)259 2012 y Fd(Mapping)427 2112 y Fj(F)-7 b(or)31
-b(an)n(y)g(class)f(of)i(Mapping)f(other)g(than)g(a)g(CmpMap,)i(map1)e
-(will)h(b)r(e)f(returned)g(holding)h(a)f(clone)g(of)427
-2211 y(the)f(supplied)g(Mapping)g(p)r(oin)n(ter,)g(and)f(map2)g(will)h
-(b)r(e)g(returned)g(holding)f(a)g(NULL)h(p)r(oin)n(ter.)43
-b(In)n(v)n(ert1)427 2311 y(will)30 b(b)r(e)g(returned)g(holding)f(the)h
-(curren)n(t)f(v)-5 b(alue)29 b(of)h(the)g(In)n(v)n(ert)f(attribute)h
-(for)f(the)h(supplied)g(Mapping,)427 2411 y(and)e(in)n(v)n(ert2)e(will)
-i(b)r(e)g(returned)f(holding)g(zero.)259 2544 y Fd(CmpF)-8
-b(rame)427 2643 y Fj(If)40 b(the)g(supplied)f(Mapping)g(is)h(a)e(CmpF)
--7 b(rame,)42 b(then)e(map1)f(and)g(map2)g(will)g(b)r(e)h(returned)f
-(holding)427 2743 y(p)r(oin)n(ters)33 b(to)g(the)h(comp)r(onen)n(t)f(F)
--7 b(rames)32 b(used)i(to)f(create)f(the)i(CmpF)-7 b(rame.)54
-b(The)33 b(comp)r(onen)n(t)g(F)-7 b(rames)427 2843 y(are)27
-b(considered)f(to)i(b)r(e)g(in)g(applied)f(in)h(parallel.)259
-2976 y Fd(F)-8 b(rame)427 3075 y Fj(F)h(or)24 b(an)n(y)g(class)g(of)g
-(F)-7 b(rame)24 b(other)g(than)h(a)f(CmpF)-7 b(rame,)25
-b(map1)f(will)h(b)r(e)g(returned)f(holding)g(a)h(clone)f(of)g(the)427
-3175 y(supplied)k(F)-7 b(rame)27 b(p)r(oin)n(ter,)h(and)f(map2)g(will)h
-(b)r(e)g(returned)f(holding)g(a)g(NULL)h(p)r(oin)n(ter.)0
-3337 y Fd(Notes:)340 3620 y Fi(\017)45 b Fj(The)32 b(returned)f(In)n(v)
-n(ert)g(v)-5 b(alues)31 b(should)g(b)r(e)h(used)g(in)g(preference)f(to)
-g(the)h(curren)n(t)f(v)-5 b(alues)31 b(of)h(the)g(In)n(v)n(ert)427
-3720 y(attribute)g(in)h(map1)e(and)h(map2.)49 b(This)32
-b(is)g(b)r(ecause)g(the)g(attributes)g(ma)n(y)f(ha)n(v)n(e)g(c)n
-(hanged)g(v)-5 b(alue)32 b(since)427 3820 y(the)c(Mappings)f(w)n(ere)g
-(com)n(bined.)340 3953 y Fi(\017)45 b Fj(An)n(y)28 b(c)n(hanges)f(made)
-h(to)g(the)g(comp)r(onen)n(t)g(Mappings)f(using)h(the)g(returned)g(p)r
-(oin)n(ters)f(will)h(b)r(e)h(re\015ected)427 4052 y(in)f(the)g
-(supplied)g(Mapping.)p 0 4252 3780 12 v 0 4384 a Fz(astDelFits)169
-b Fe(Delete)38 b(the)h(curren)m(t)e(FITS)j(card)e(in)g(a)h(FitsChan)166
-b Fz(astDelFits)0 4550 y Fd(Description:)44 b Fj(This)30
-b(function)g(deletes)g(the)g(curren)n(t)f(FITS)h(card)f(from)h(a)f
-(FitsChan.)44 b(The)29 b(curren)n(t)g(card)g(ma)n(y)g(b)r(e)227
-4649 y(selected)e(using)g(the)h(Card)e(attribute)i(\(if)g(its)f(index)g
-(is)g(kno)n(wn\))g(or)f(b)n(y)h(using)g(astFindFits)h(\(if)g(only)f
-(the)g(FITS)227 4749 y(k)n(eyw)n(ord)f(is)h(kno)n(wn\).)227
-4874 y(After)h(deletion,)g(the)g(follo)n(wing)f(card)f(b)r(ecomes)h
-(the)h(curren)n(t)f(card.)0 5024 y Fd(Synopsis:)121 b
-Ft(void)42 b(astDelFits\()d(AstFitsChan)g Fi(\003)p Ft(this)i(\))0
-5174 y Fd(P)m(arameters:)259 5310 y(this)427 5410 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(FitsChan.)0 5572 y Fd(Notes:)p eop end
-%%Page: 216 226
-TeXDict begin 216 225 bop 0 52 a FF(216)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(This)23 b(function)f(returns)g(without)h(action)e(if)i(the)g
-(FitsChan)f(is)h(initially)f(p)r(ositioned)g(at)g(the)h
-Ft(")p Fj(end-of-\014le)p Ft(")427 451 y Fj(\(i.e.)38
-b(if)28 b(the)g(Card)e(attribute)i(exceeds)f(the)h(n)n(um)n(b)r(er)f
-(of)h(cards)e(in)i(the)g(FitsChan\).)340 586 y Fi(\017)45
-b Fj(If)36 b(there)f(are)f(no)h(subsequen)n(t)f(cards)g(in)i(the)f
-(FitsChan,)i(then)f(the)f(Card)g(attribute)g(is)g(left)h(p)r(oin)n
-(ting)427 686 y(at)e(the)g Ft(")p Fj(end-of-\014le)p
-Ft(")e Fj(after)h(deletion)h(\(i.e.)55 b(is)33 b(set)h(to)f(one)g(more)
-g(than)g(the)h(n)n(um)n(b)r(er)g(of)f(cards)f(in)i(the)427
-785 y(FitsChan\).)p 0 989 3780 12 v 0 1121 a Fz(astDelete)908
-b Fe(Delete)39 b(an)f(Ob)7 b(ject)905 b Fz(astDelete)0
-1314 y Fd(Description:)44 b Fj(This)25 b(function)f(deletes)h(an)f(Ob)5
-b(ject,)25 b(freeing)e(all)h(resources)f(asso)r(ciated)g(with)h(it)h
-(and)f(rendering)f(an)n(y)227 1414 y(remaining)k(p)r(oin)n(ters)g(to)g
-(the)h(Ob)5 b(ject)28 b(in)n(v)-5 b(alid.)227 1541 y(Note)28
-b(that)h(deletion)f(is)g(unconditional,)g(regardless)e(of)i(whether)g
-(other)g(p)r(oin)n(ters)f(to)h(the)h(Ob)5 b(ject)28 b(are)f(still)h(in)
-227 1640 y(use)d(\(p)r(ossibly)f(within)i(other)e(Ob)5
-b(jects\).)36 b(A)25 b(safer)f(approac)n(h)f(is)h(to)h(defer)g
-(deletion,)g(un)n(til)g(all)g(references)e(to)i(an)227
-1740 y(Ob)5 b(ject)21 b(ha)n(v)n(e)f(expired,)h(b)n(y)g(using)g
-(astBegin/astEnd)d(\(together)j(with)g(astClone)f(and)h(astAnn)n(ul)g
-(if)g(necessary\).)0 1894 y Fd(Synopsis:)121 b Ft(AstObject)40
-b Fi(\003)p Ft(astDelete\()f(AstObject)h Fi(\003)p Ft(this)h(\))0
-2048 y Fd(P)m(arameters:)259 2189 y(this)427 2289 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Ob)5 b(ject)27 b(to)h(b)r(e)g(deleted.)0
-2455 y Fd(Class)j(Applicabilit)m(y:)259 2596 y(Ob)5 b(ject)427
-2696 y Fj(This)28 b(function)g(applies)f(to)h(all)f(Ob)5
-b(jects.)0 2862 y Fd(Returned)32 b(V)-8 b(alue:)259 3003
-y(astDelete\(\))427 3103 y Fj(A)28 b(n)n(ull)g(Ob)5 b(ject)27
-b(p)r(oin)n(ter)h(\(AST)p Ft(__)p Fj(NULL\))g(is)f(alw)n(a)n(ys)f
-(returned.)0 3269 y Fd(Notes:)340 3556 y Fi(\017)45 b
-Fj(This)30 b(function)h(attempts)f(to)g(execute)g(ev)n(en)g(if)g(the)g
-(AST)h(error)d(status)i(is)g(set)g(on)f(en)n(try)-7 b(,)31
-b(although)e(no)427 3656 y(further)f(error)d(rep)r(ort)i(will)h(b)r(e)g
-(made)f(if)i(it)f(subsequen)n(tly)f(fails)g(under)h(these)f
-(circumstances.)p 0 3860 V 0 3992 a Fz(astDistance)308
-b Fe(Calculate)36 b(the)j(distance)f(b)s(et)m(w)m(een)g(t)m(w)m(o)1437
-4091 y(p)s(oin)m(ts)f(in)i(a)g(F)-10 b(rame)3102 3992
-y Fz(astDistance)0 4285 y Fd(Description:)44 b Fj(This)30
-b(function)h(\014nds)f(the)g(distance)g(b)r(et)n(w)n(een)g(t)n(w)n(o)f
-(p)r(oin)n(ts)h(whose)f(F)-7 b(rame)30 b(co)r(ordinates)e(are)h(giv)n
-(en.)227 4384 y(The)f(distance)f(calculated)g(is)h(that)g(along)e(the)i
-(geo)r(desic)f(curv)n(e)f(that)i(joins)g(the)g(t)n(w)n(o)e(p)r(oin)n
-(ts.)227 4511 y(F)-7 b(or)34 b(example,)h(in)f(a)f(basic)h(F)-7
-b(rame,)35 b(the)f(distance)f(calculated)h(will)g(b)r(e)g(the)g
-(Cartesian)f(distance)h(along)e(the)227 4611 y(straigh)n(t)k(line)h
-(joining)g(the)h(t)n(w)n(o)e(p)r(oin)n(ts.)65 b(F)-7
-b(or)37 b(a)f(more)g(sp)r(ecialised)h(F)-7 b(rame)36
-b(describing)h(a)f(sky)h(co)r(ordinate)227 4710 y(system,)25
-b(ho)n(w)n(ev)n(er,)f(it)h(w)n(ould)f(b)r(e)i(the)f(distance)f(along)g
-(the)h(great)f(circle)g(passing)g(through)g(t)n(w)n(o)g(sky)g(p)r
-(ositions.)0 4864 y Fd(Synopsis:)121 b Ft(double)41 b(astDistance\()e
-(AstFrame)h Fi(\003)p Ft(this,)h(const)g(double)h(point1[],)d(const)j
-(double)f(point2[])227 4964 y(\))0 5118 y Fd(P)m(arameters:)259
-5259 y(this)427 5359 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)259 5494 y Fd(p)s(oin)m(t1)427 5593 y Fj(An)32
-b(arra)n(y)c(of)j(double,)h(with)g(one)e(elemen)n(t)i(for)e(eac)n(h)g
-(F)-7 b(rame)31 b(axis)f(\(Naxes)h(attribute\))g(con)n(taining)f(the)
-427 5693 y(co)r(ordinates)c(of)i(the)g(\014rst)f(p)r(oin)n(t.)p
-eop end
-%%Page: 217 227
-TeXDict begin 217 226 bop 3643 52 a FF(217)259 351 y
-Fd(p)s(oin)m(t2)427 451 y Fj(An)30 b(arra)n(y)e(of)h(double,)h(with)g
-(one)g(elemen)n(t)f(for)g(eac)n(h)g(F)-7 b(rame)29 b(axis)g(con)n
-(taining)g(the)h(co)r(ordinates)e(of)h(the)427 551 y(second)e(p)r(oin)n
-(t.)0 749 y Fd(Returned)32 b(V)-8 b(alue:)259 921 y(astDistance)427
-1021 y Fj(The)28 b(distance)f(b)r(et)n(w)n(een)h(the)g(t)n(w)n(o)f(p)r
-(oin)n(ts.)0 1219 y Fd(Notes:)340 1538 y Fi(\017)45 b
-Fj(This)30 b(function)g(will)f(return)g(a)g Ft(")p Fj(bad)p
-Ft(")g Fj(result)g(v)-5 b(alue)29 b(\(AST)p Ft(__)p Fj(BAD\))h(if)g(an)
-n(y)f(of)g(the)h(input)g(co)r(ordinates)427 1638 y(has)d(this)h(v)-5
-b(alue.)340 1788 y Fi(\017)45 b Fj(A)27 b Ft(")p Fj(bad)p
-Ft(")e Fj(v)-5 b(alue)26 b(will)g(also)f(b)r(e)i(returned)e(if)i(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)f(with)h(the)h(AST)f(error)f(status)h
-(set,)427 1888 y(or)h(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)
-p 0 2124 3780 12 v 0 2255 a Fz(astDo)l(wnsize)275 b Fe(Reduce)40
-b(the)e(n)m(um)m(b)s(er)g(of)h(v)m(ertices)e(in)i(a)1684
-2355 y(P)m(olygon)3059 2255 y Fz(astDo)l(wnsize)0 2580
-y Fd(Description:)44 b Fj(This)26 b(function)h(returns)e(a)g(p)r(oin)n
-(ter)h(to)g(a)f(new)h(P)n(olygon)e(that)i(con)n(tains)f(a)g(subset)h
-(of)g(the)h(v)n(ertices)d(in)227 2680 y(the)k(supplied)f(P)n(olygon.)35
-b(The)27 b(subset)g(is)g(c)n(hosen)f(so)g(that)i(the)f(returned)g(P)n
-(olygon)e(is)h(a)h(go)r(o)r(d)f(appro)n(ximation)227
-2779 y(to)g(the)h(supplied)f(P)n(olygon,)e(within)j(the)f(limits)h(sp)r
-(eci\014ed)f(b)n(y)g(the)g(supplied)g(parameter)f(v)-5
-b(alues.)36 b(That)26 b(is,)g(the)227 2879 y(densit)n(y)g(of)g(p)r(oin)
-n(ts)f(in)h(the)g(returned)g(P)n(olygon)d(is)j(greater)e(at)i(p)r(oin)n
-(ts)f(where)g(the)i(curv)-5 b(ature)25 b(of)g(the)h(b)r(oundary)227
-2979 y(of)i(the)g(supplied)g(P)n(olygon)d(is)j(greater.)0
-3164 y Fd(Synopsis:)121 b Ft(AstPolygon)39 b Fi(\003)p
-Ft(astDownsize\()f(AstPolygon)i Fi(\003)p Ft(this,)h(double)g(maxerr,)g
-(int)h(maxvert)f(\))0 3350 y Fd(P)m(arameters:)259 3523
-y(this)427 3622 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(P)n(olygon.)259
-3773 y Fd(maxerr)427 3873 y Fj(The)22 b(maxim)n(um)g(allo)n(w)n(ed)e
-(discrepancy)g(b)r(et)n(w)n(een)i(the)g(supplied)g(and)g(returned)f(P)n
-(olygons,)g(expressed)f(as)427 3972 y(a)k(geo)r(desic)f(distance)h
-(within)g(the)h(P)n(olygon's)c(co)r(ordinate)i(frame.)36
-b(If)24 b(this)g(is)g(zero)f(or)g(less,)i(the)f(returned)427
-4072 y(P)n(olygon)i(will)h(ha)n(v)n(e)g(the)h(n)n(um)n(b)r(er)f(of)h(v)
-n(ertices)e(sp)r(eci\014ed)i(b)n(y)f(maxv)n(ert.)259
-4223 y Fd(maxv)m(ert)427 4323 y Fj(The)36 b(maxim)n(um)f(allo)n(w)n(ed)
-f(n)n(um)n(b)r(er)h(of)h(v)n(ertices)e(in)i(the)f(returned)g(P)n
-(olygon.)59 b(If)35 b(this)h(is)f(less)g(than)h(3,)427
-4422 y(the)c(n)n(um)n(b)r(er)e(of)h(v)n(ertices)f(in)h(the)g(returned)g
-(P)n(olygon)d(will)k(b)r(e)f(the)g(minim)n(um)h(needed)f(to)g(ac)n
-(hiev)n(e)e(the)427 4522 y(maxim)n(um)f(discrepancy)e(sp)r(eci\014ed)i
-(b)n(y)f(maxerr.)0 4720 y Fd(Returned)32 b(V)-8 b(alue:)259
-4893 y(astDo)m(wnsize\(\))427 4992 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(new)f(P)n(olygon.)0 5191 y Fd(Notes:)340
-5509 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35
-b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g
-(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427
-5609 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)p eop end
-%%Page: 218 228
-TeXDict begin 218 227 bop 0 52 a FF(218)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astEllipse)924 b Fe(Create)37 b(a)i(Ellipse)920
-b Fz(astEllipse)0 668 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(Ellipse)g(and)h(optionally)f
-(initialises)g(its)h(attributes.)227 792 y(A)g(Ellipse)f(is)h(a)f
-(Region)g(whic)n(h)g(represen)n(ts)g(a)g(elliptical)g(area)g(within)h
-(the)g(supplied)g(2-dimensional)e(F)-7 b(rame.)0 939
-y Fd(Synopsis:)121 b Ft(AstEllipse)39 b Fi(\003)p Ft(astEllipse\()g
-(AstFrame)h Fi(\003)p Ft(frame,)h(int)h(form,)g(const)f(double)g
-(centre[2],)f(const)227 1039 y(double)h(point1[2],)f(const)h(double)g
-(point2[2],)f(AstRegion)g Fi(\003)p Ft(unc,)h(const)h(char)g
-Fi(\003)p Ft(options,)d(...)227 1138 y(\))0 1286 y Fd(P)m(arameters:)
-259 1420 y(frame)427 1520 y Fj(A)30 b(p)r(oin)n(ter)f(to)g(the)g(F)-7
-b(rame)29 b(in)g(whic)n(h)g(the)h(region)e(is)h(de\014ned.)42
-b(It)30 b(m)n(ust)f(ha)n(v)n(e)f(exactly)g(2)h(axes.)41
-b(A)29 b(deep)427 1620 y(cop)n(y)h(is)g(tak)n(en)f(of)i(the)f(supplied)
-h(F)-7 b(rame.)44 b(This)30 b(means)g(that)h(an)n(y)e(subsequen)n(t)h
-(c)n(hanges)f(made)h(to)g(the)427 1719 y(F)-7 b(rame)27
-b(using)h(the)g(supplied)f(p)r(oin)n(ter)h(will)g(ha)n(v)n(e)e(no)h
-(e\013ect)h(the)g(Region.)259 1850 y Fd(form)427 1950
-y Fj(Indicates)e(ho)n(w)g(the)g(ellipse)g(is)h(describ)r(ed)f(b)n(y)f
-(the)i(remaining)e(parameters.)35 b(A)26 b(v)-5 b(alue)27
-b(of)f(zero)f(indicates)427 2050 y(that)32 b(the)g(ellipse)g(is)f(sp)r
-(eci\014ed)h(b)n(y)g(a)f(cen)n(tre)g(p)r(osition)h(and)f(t)n(w)n(o)g(p)
-r(ositions)g(on)h(the)g(circumference.)48 b(A)427 2149
-y(v)-5 b(alue)25 b(of)g(one)g(indicates)g(that)g(the)h(ellipse)f(is)g
-(sp)r(eci\014ed)g(b)n(y)g(its)g(cen)n(tre)g(p)r(osition,)g(the)h
-(half-lengths)e(of)h(its)427 2249 y(t)n(w)n(o)i(axes,)g(and)g(the)h
-(orien)n(tation)e(of)i(its)g(\014rst)f(axis.)259 2380
-y Fd(cen)m(tre)427 2479 y Fj(An)h(arra)n(y)e(of)h(2)g(doubles,)h(con)n
-(taining)e(the)i(co)r(ordinates)e(at)i(the)g(cen)n(tre)f(of)g(the)h
-(ellipse.)259 2610 y Fd(p)s(oin)m(t1)427 2710 y Fj(An)h(arra)n(y)e(of)h
-(2)h(doubles.)39 b(If)30 b Ft(")p Fj(form)p Ft(")d Fj(is)i(zero,)f
-(this)h(arra)n(y)d(should)i(con)n(tain)g(the)h(co)r(ordinates)f(of)g
-(one)h(of)427 2810 y(the)e(four)e(p)r(oin)n(ts)h(where)g(an)g(axis)f
-(of)h(the)g(ellipse)g(crosses)f(the)h(circumference)g(of)g(the)g
-(ellipse.)36 b(If)27 b Ft(")p Fj(form)p Ft(")427 2909
-y Fj(is)i(one,)h(it)f(should)g(con)n(tain)g(the)h(lengths)f(of)g
-(semi-ma)5 b(jor)27 b(and)i(semi-minor)g(axes)f(of)h(the)h(ellipse,)f
-(giv)n(en)427 3009 y(as)e(geo)r(desic)g(distances)g(within)h(the)g(F)-7
-b(rame.)259 3140 y Fd(p)s(oin)m(t2)427 3239 y Fj(An)25
-b(arra)n(y)c(of)j(2)f(doubles.)35 b(If)24 b Ft(")p Fj(form)p
-Ft(")f Fj(is)h(zero,)f(this)h(arra)n(y)e(should)h(con)n(taining)g(the)h
-(co)r(ordinates)f(at)g(some)427 3339 y(other)28 b(p)r(oin)n(t)g(on)g
-(the)h(circumference)f(of)g(the)g(ellipse,)h(distinct)g(from)f
-Ft(")p Fj(p)r(oin)n(t1)p Ft(")p Fj(.)37 b(If)29 b Ft(")p
-Fj(form)p Ft(")e Fj(is)h(one,)g(the)427 3439 y(\014rst)23
-b(elemen)n(t)g(of)g(this)h(arra)n(y)c(should)j(hold)g(the)h(angle)e(b)r
-(et)n(w)n(een)h(the)h(second)e(axis)g(of)h(the)h(F)-7
-b(rame)22 b(and)h(the)427 3538 y(\014rst)31 b(ellipse)g(axis)g(\(i.e.)
-47 b(the)32 b(ellipse)f(axis)f(whic)n(h)h(is)g(sp)r(eci\014ed)h
-(\014rst)e(in)i(the)f Ft(")p Fj(p)r(oin)n(t1)p Ft(")f
-Fj(arra)n(y\),)g(and)h(the)427 3638 y(second)f(elemen)n(t)g(will)h(b)r
-(e)f(ignored.)44 b(The)30 b(angle)f(should)h(b)r(e)h(giv)n(en)e(in)i
-(radians,)e(measured)h(p)r(ositiv)n(e)f(in)427 3737 y(the)23
-b(same)g(sense)f(as)g(rotation)f(from)i(the)g(p)r(ositiv)n(e)f
-(direction)g(of)h(the)g(second)f(F)-7 b(rame)22 b(axis)g(to)h(the)g(p)r
-(ositiv)n(e)427 3837 y(direction)k(of)h(the)g(\014rst)f(F)-7
-b(rame)27 b(axis.)259 3968 y Fd(unc)427 4068 y Fj(An)33
-b(optional)e(p)r(oin)n(ter)h(to)g(an)g(existing)g(Region)f(whic)n(h)h
-(sp)r(eci\014es)g(the)h(uncertain)n(ties)e(asso)r(ciated)g(with)427
-4167 y(the)j(b)r(oundary)f(of)g(the)h(Bo)n(x)f(b)r(eing)g(created.)54
-b(The)34 b(uncertain)n(t)n(y)e(in)i(an)n(y)f(p)r(oin)n(t)h(on)f(the)h
-(b)r(oundary)f(of)427 4267 y(the)g(Bo)n(x)e(is)h(found)h(b)n(y)f
-(shifting)h(the)f(supplied)h Ft(")p Fj(uncertain)n(t)n(y)p
-Ft(")e Fj(Region)g(so)h(that)g(it)h(is)f(cen)n(tred)g(at)g(the)427
-4367 y(b)r(oundary)e(p)r(oin)n(t)h(b)r(eing)g(considered.)44
-b(The)31 b(area)e(co)n(v)n(ered)g(b)n(y)h(the)h(shifted)g(uncertain)n
-(t)n(y)f(Region)g(then)427 4466 y(represen)n(ts)g(the)i(uncertain)n(t)n
-(y)f(in)g(the)h(b)r(oundary)f(p)r(osition.)48 b(The)31
-b(uncertain)n(t)n(y)g(is)g(assumed)g(to)g(b)r(e)h(the)427
-4566 y(same)27 b(for)g(all)h(p)r(oin)n(ts.)427 4681 y(If)38
-b(supplied,)j(the)d(uncertain)n(t)n(y)f(Region)g(m)n(ust)g(b)r(e)i(of)e
-(a)g(class)g(for)g(whic)n(h)h(all)f(instances)g(are)g(cen)n(tro-)427
-4781 y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24 b(Circle,)g(Ellipse,)h
-(etc.\))36 b(or)23 b(b)r(e)i(a)e(Prism)h(con)n(taining)f(cen)n
-(tro-symetric)f(comp)r(onen)n(t)427 4880 y(Regions.)57
-b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f(will)g(b)r(e)h
-(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)427
-4980 y(uncertain)n(t)n(y)28 b(Region)f(using)h(the)h(supplied)f(p)r
-(oin)n(ter)g(will)h(ha)n(v)n(e)e(no)h(e\013ect)h(on)f(the)g(created)g
-(Bo)n(x.)38 b(Alter-)427 5080 y(nativ)n(ely)-7 b(,)24
-b(a)g(NULL)g(Ob)5 b(ject)24 b(p)r(oin)n(ter)f(ma)n(y)h(b)r(e)g
-(supplied,)h(in)f(whic)n(h)g(case)f(a)g(default)i(uncertain)n(t)n(y)e
-(is)h(used)427 5179 y(equiv)-5 b(alen)n(t)28 b(to)f(a)g(b)r(o)n(x)g
-(1.0E-6)f(of)h(the)h(size)g(of)f(the)h(Bo)n(x)f(b)r(eing)g(created.)427
-5295 y(The)c(uncertain)n(t)n(y)f(Region)g(has)g(t)n(w)n(o)g(uses:)34
-b(1\))22 b(when)h(the)g(astOv)n(erlap)d(function)k(compares)d(t)n(w)n
-(o)h(Regions)427 5394 y(for)g(equalit)n(y)h(the)g(uncertain)n(t)n(y)f
-(Region)g(is)g(used)h(to)g(determine)f(the)i(tolerance)d(on)i(the)g
-(comparison,)f(and)427 5494 y(2\))31 b(when)f(a)h(Region)e(is)i(mapp)r
-(ed)g(in)n(to)f(a)g(di\013eren)n(t)h(co)r(ordinate)e(system)i(and)f
-(subsequen)n(tly)g(simpli\014ed)427 5593 y(\(using)c(astSimplify\),)h
-(the)f(uncertain)n(ties)f(are)g(used)h(to)g(determine)g(if)g(the)g
-(transformed)f(b)r(oundary)g(can)427 5693 y(b)r(e)j(accurately)e
-(represen)n(ted)h(b)n(y)g(a)g(sp)r(eci\014c)h(shap)r(e)f(of)h(Region.)p
-eop end
-%%Page: 219 229
-TeXDict begin 219 228 bop 3643 52 a FF(219)259 351 y
-Fd(options)427 451 y Fj(P)n(oin)n(ter)27 b(to)h(a)g(n)n(ull-terminated)
-g(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)
-g(attribute)427 551 y(assignmen)n(ts)h(to)h(b)r(e)g(used)h(for)e
-(initialising)h(the)g(new)g(Ellipse.)44 b(The)30 b(syn)n(tax)g(used)g
-(is)g(iden)n(tical)f(to)h(that)427 650 y(for)c(the)h(astSet)g(function)
-g(and)g(ma)n(y)f(include)h Ft(")p Fj(prin)n(tf)p Ft(")f
-Fj(format)g(sp)r(eci\014ers)g(iden)n(ti\014ed)h(b)n(y)f
-Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427 750 y(in)i(the)g(normal)f
-(w)n(a)n(y)-7 b(.)259 884 y Fd(...)427 983 y Fj(If)38
-b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 1083 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 1182 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 1282 y Fj(function\).)0
-1446 y Fd(Returned)32 b(V)-8 b(alue:)259 1584 y(astEllipse\(\))427
-1684 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Ellipse.)0
-1848 y Fd(Notes:)340 2132 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 2232 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 2433 3780 12 v 0 2564
-a Fz(astEllipseP)l(ars)198 b Fe(Returns)38 b(the)h(geometric)d
-(parameters)1572 2679 y(of)i(an)h(Ellipse)2958 2564 y
-Fz(astEllipseP)l(ars)0 2870 y Fd(Description:)44 b Fj(This)28
-b(function)g(returns)f(the)h(geometric)e(parameters)g(describing)h(the)
-h(supplied)g(ellipse.)0 3021 y Fd(Synopsis:)121 b Ft(void)42
-b(astEllipsePars\()37 b(AstEllipse)j Fi(\003)p Ft(this,)h(double)g
-(centre[2],)e(double)i Fi(\003)p Ft(a,)i(double)e Fi(\003)p
-Ft(b,)227 3121 y(double)g Fi(\003)p Ft(angle,)g(double)g(p1[2],)g
-(double)g(p2[2])h(\))0 3272 y Fd(P)m(arameters:)259 3410
-y(this)427 3510 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259
-3644 y Fd(cen)m(tre)427 3743 y Fj(The)g(co)r(ordinates)e(of)i(the)g
-(Ellipse)f(cen)n(tre)g(are)f(returned)i(in)f(this)h(arra)n(ys.)259
-3877 y Fd(a)427 3977 y Fj(Returned)g(holding)f(the)h(half-length)g(of)f
-(the)h(\014rst)g(axis)e(of)i(the)g(ellipse.)259 4111
-y Fd(b)427 4210 y Fj(Returned)g(holding)f(the)h(half-length)g(of)f(the)
-h(second)f(axis)g(of)g(the)h(ellipse.)259 4344 y Fd(angle)427
-4444 y Fj(If)38 b(the)f(co)r(ordinate)f(system)h(in)g(whic)n(h)g(the)h
-(Ellipse)f(is)g(de\014ned)g(has)g(axes)f(\(X,Y\),)i(then)g
-Ft(")p Fi(\003)p Fj(angle)p Ft(")d Fj(is)427 4543 y(returned)d(holding)
-g(the)g(angle)f(from)h(the)h(p)r(ositiv)n(e)e(direction)h(of)g(the)h(Y)
-f(axis)f(to)h(the)h(\014rst)f(axis)f(of)h(the)427 4643
-y(ellipse,)22 b(in)f(radians.)33 b(P)n(ositiv)n(e)19
-b(rotation)g(is)h(in)h(the)g(same)e(sense)h(as)g(rotation)f(from)h(the)
-h(p)r(ositiv)n(e)f(direction)427 4743 y(of)28 b(Y)g(to)f(the)h(p)r
-(ositiv)n(e)f(direction)h(of)f(X.)259 4876 y Fd(p1)427
-4976 y Fj(An)34 b(arra)n(y)c(in)j(whic)n(h)g(to)g(return)f(the)h(co)r
-(ordinates)f(at)g(one)h(of)g(the)g(t)n(w)n(o)f(ends)h(of)g(the)g
-(\014rst)f(axis)g(of)h(the)427 5076 y(ellipse.)k(A)28
-b(NULL)g(p)r(oin)n(ter)f(can)g(b)r(e)h(supplied)g(if)g(these)g(co)r
-(ordinates)e(are)h(not)g(needed.)259 5209 y Fd(p2)427
-5309 y Fj(An)h(arra)n(y)e(in)i(whic)n(h)g(to)f(return)h(the)g(co)r
-(ordinates)e(at)i(one)f(of)h(the)g(t)n(w)n(o)f(ends)h(of)f(the)h
-(second)g(axis)f(of)g(the)427 5409 y(ellipse.)37 b(A)28
-b(NULL)g(p)r(oin)n(ter)f(can)g(b)r(e)h(supplied)g(if)g(these)g(co)r
-(ordinates)e(are)h(not)g(needed.)0 5572 y Fd(Notes:)p
-eop end
-%%Page: 220 230
-TeXDict begin 220 229 bop 0 52 a FF(220)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(If)22 b(the)g(co)r(ordinate)e(system)h(represen)n(ted)f(b)n(y)h
-(the)h(Ellipse)e(has)h(b)r(een)h(c)n(hanged)e(since)h(it)h(w)n(as)e
-(\014rst)h(created,)427 451 y(the)e(returned)f(parameters)f(refer)h(to)
-h(the)g(new)f(\(c)n(hanged\))g(co)r(ordinate)g(system,)i(rather)d(than)
-i(the)g(original)427 551 y(co)r(ordinate)27 b(system.)37
-b(Note)28 b(ho)n(w)n(ev)n(er)e(that)i(if)g(the)g(transformation)f(from)
-g(original)f(to)i(new)g(co)r(ordinate)427 650 y(system)36
-b(is)h(non-linear,)g(the)g(shap)r(e)f(represen)n(ted)f(b)n(y)h(the)h
-(supplied)g(Ellipse)f(ob)5 b(ject)36 b(ma)n(y)g(not)g(b)r(e)h(an)427
-750 y(accurate)27 b(ellipse.)340 883 y Fi(\017)45 b Fj(V)-7
-b(alues)20 b(of)h(AST)p Ft(__)p Fj(BAD)f(are)f(returned)h(for)g(the)h
-(parameters)e(without)h(error)f(if)i(the)f(ellipse)h(is)f(degenerate)
-427 983 y(or)27 b(unde\014ned.)p 0 1184 3780 12 v 0 1316
-a Fz(astEnd)949 b Fe(End)39 b(an)g(AST)f(con)m(text)947
-b Fz(astEnd)0 1483 y Fd(Description:)44 b Fj(This)28
-b(macro)f(in)n(v)n(ok)n(es)f(a)h(function)i(to)e(end)h(an)g(AST)g(con)n
-(text)g(whic)n(h)f(w)n(as)g(b)r(egun)h(with)h(a)e(matc)n(hing)227
-1582 y(in)n(v)n(o)r(cation)c(of)i(astBegin.)35 b(An)n(y)24
-b(Ob)5 b(ject)25 b(p)r(oin)n(ters)e(created)h(within)h(this)g(con)n
-(text)f(will)h(b)r(e)g(ann)n(ulled)f(\(just)h(as)f(if)227
-1682 y(astAnn)n(ul)g(had)f(b)r(een)h(in)n(v)n(ok)n(ed\))e(and)i(will)g
-(cease)e(to)h(b)r(e)h(v)-5 b(alid)24 b(afterw)n(ards,)f(unless)g(they)h
-(ha)n(v)n(e)e(previously)g(b)r(een)227 1782 y(exp)r(orted)31
-b(using)g(astExp)r(ort)e(or)i(rendered)f(exempt)h(using)g(astExempt.)47
-b(If)31 b(ann)n(ulling)g(a)f(p)r(oin)n(ter)h(causes)f(an)227
-1881 y(Ob)5 b(ject's)24 b(RefCoun)n(t)h(attribute)f(to)h(fall)f(to)g
-(zero)g(\(whic)n(h)g(happ)r(ens)h(when)f(the)h(last)f(p)r(oin)n(ter)g
-(to)g(it)h(is)f(ann)n(ulled\),)227 1981 y(then)k(the)g(Ob)5
-b(ject)28 b(will)g(b)r(e)g(deleted.)0 2132 y Fd(Synopsis:)121
-b Ft(void)42 b(astEnd)0 2283 y Fd(Class)31 b(Applicabilit)m(y:)259
-2421 y(Ob)5 b(ject)427 2521 y Fj(This)28 b(macro)e(applies)h(to)h(all)f
-(Ob)5 b(jects.)0 2684 y Fd(Notes:)340 2968 y Fi(\017)45
-b Fj(astEnd)27 b(attempts)h(to)g(execute)f(ev)n(en)g(if)h(the)g(AST)g
-(error)e(status)h(is)h(set.)340 3102 y Fi(\017)45 b Fj(Con)n(texts)27
-b(delimited)i(b)n(y)e(astBegin)g(and)g(astEnd)g(ma)n(y)g(b)r(e)h
-(nested)g(to)f(an)n(y)g(depth.)p 0 3303 V 0 3434 a Fz(astEscap)t(es)
-1034 3435 y Fe(Con)m(trol)36 b(whether)i(graphical)e(escap)s(e)1054
-3549 y(sequences)k(are)e(included)g(in)h(strings)3149
-3434 y Fz(astEscap)t(es)0 3740 y Fd(Description:)44 b
-Fj(The)39 b(Plot)g(class)f(de\014nes)g(a)h(set)g(of)g(escap)r(e)f
-(sequences)g(whic)n(h)h(can)f(b)r(e)i(included)f(within)h(a)e(text)227
-3839 y(string)29 b(in)g(order)f(to)h(con)n(trol)f(the)h(app)r(earance)f
-(of)h(sub-strings)f(within)h(the)h(text.)42 b(See)29
-b(the)g(Escap)r(e)f(attribute)227 3939 y(for)j(a)g(description)f(of)h
-(these)g(escap)r(e)g(sequences.)46 b(It)32 b(is)f(usually)f
-(inappropriate)g(for)g(AST)i(to)f(return)g(strings)227
-4039 y(con)n(taining)i(suc)n(h)h(escap)r(e)f(sequences)h(when)g(called)
-g(b)n(y)f(application)h(co)r(de.)56 b(F)-7 b(or)33 b(instance,)j(an)d
-(application)227 4138 y(whic)n(h)22 b(displa)n(ys)e(the)i(v)-5
-b(alue)22 b(of)f(the)h(Title)g(attribute)g(of)f(a)g(F)-7
-b(rame)21 b(usually)g(do)r(es)g(not)h(w)n(an)n(t)f(the)h(displa)n(y)n
-(ed)e(string)227 4238 y(to)25 b(include)g(p)r(oten)n(tially)g(long)f
-(escap)r(e)g(sequences)g(whic)n(h)h(a)g(h)n(uman)f(read)g(w)n(ould)h
-(ha)n(v)n(e)e(di\016culy)i(in)n(terpreting.)227 4337
-y(Therefore)37 b(the)h(default)g(b)r(eha)n(viour)f(is)h(for)f(AST)h(to)
-g(strip)g(out)g(suc)n(h)f(escap)r(e)g(sequences)g(when)h(called)g(b)n
-(y)227 4437 y(application)27 b(co)r(de.)37 b(This)27
-b(default)i(b)r(eha)n(viour)d(can)h(b)r(e)h(c)n(hanged)f(using)g(this)h
-(function.)0 4588 y Fd(Synopsis:)121 b Ft(int)42 b(astEscapes\()d(int)k
-(new_value)c(\))0 4739 y Fd(P)m(arameters:)259 4877 y(new)p
-Ft(_)p Fd(v)-5 b(alue)427 4977 y Fj(A)29 b(\015ag)f(whic)n(h)h
-(indicates)f(if)h(escap)r(es)f(sequences)g(should)g(b)r(e)h(included)g
-(in)g(returned)f(strings.)39 b(If)29 b(zero)f(is)427
-5076 y(supplied,)c(escap)r(e)e(sequences)f(will)h(b)r(e)h(stripp)r(ed)f
-(out)h(of)f(all)g(strings)f(returned)h(b)n(y)g(an)n(y)f(AST)i
-(function.)35 b(If)427 5176 y(a)20 b(p)r(ositiv)n(e)g(v)-5
-b(alue)20 b(is)g(supplied,)j(then)d(an)n(y)g(escap)r(e)g(sequences)f
-(will)i(b)r(e)g(retained)e(in)i(the)g(v)-5 b(alue)20
-b(returned)g(to)427 5276 y(the)k(caller.)34 b(If)24 b(a)e(negativ)n(e)g
-(v)-5 b(alue)23 b(is)g(supplied,)i(the)e(curren)n(t)f(v)-5
-b(alue)23 b(of)g(the)h(\015ag)e(will)i(b)r(e)f(left)h(unc)n(hanged.)0
-5439 y Fd(Class)31 b(Applicabilit)m(y:)259 5577 y(Ob)5
-b(ject)427 5677 y Fj(This)28 b(macro)e(applies)h(to)h(all)f(Ob)5
-b(jects.)p eop end
-%%Page: 221 231
-TeXDict begin 221 230 bop 3643 52 a FF(221)0 351 y Fd(Returned)32
-b(V)-8 b(alue:)259 487 y(astEscap)s(es)427 586 y Fj(The)28
-b(v)-5 b(alue)27 b(of)h(the)g(\015ag)f(on)g(en)n(try)g(to)h(this)f
-(function.)0 747 y Fd(Notes:)340 1029 y Fi(\017)45 b
-Fj(This)32 b(function)h(also)e(con)n(trols)g(whether)h(the)g
-(astStripEscap)r(es)f(function)i(remo)n(v)n(es)d(escap)r(e)h(sequences)
-427 1129 y(from)d(the)g(supplied)f(string,)g(or)g(returns)g(the)h
-(supplied)g(string)f(without)h(c)n(hange.)340 1261 y
-Fi(\017)45 b Fj(This)28 b(function)g(attempts)g(to)f(execute)h(ev)n(en)
-f(if)h(an)f(error)f(has)h(already)f(o)r(ccurred.)p 0
-1458 3780 12 v 0 1589 a Fz(astExempt)936 1590 y Fe(Exempt)38
-b(an)g(Ob)7 b(ject)38 b(p)s(oin)m(ter)g(from)f(AST)1461
-1704 y(con)m(text)g(handling)3149 1589 y Fz(astExempt)0
-1891 y Fd(Description:)44 b Fj(This)26 b(function)g(exempts)g(an)g(Ob)5
-b(ject)25 b(p)r(oin)n(ter)h(from)f(AST)h(con)n(text)g(handling,)f(as)h
-(implemen)n(ted)g(b)n(y)227 1991 y(astBegin)d(and)g(astEnd.)35
-b(This)24 b(means)f(that)h(the)g(p)r(oin)n(ter)f(will)h(not)g(b)r(e)g
-(a\013ected)f(when)h(astEnd)f(is)h(in)n(v)n(ok)n(ed)e(and)227
-2091 y(will)28 b(remain)f(activ)n(e)g(un)n(til)h(the)g(end)g(of)f(the)h
-(program,)e(or)h(un)n(til)h(explicitly)f(ann)n(ulled)h(using)f(astAnn)n
-(ul.)227 2215 y(If)j(p)r(ossible,)g(y)n(ou)f(should)g(a)n(v)n(oid)f
-(using)h(this)h(function)g(when)g(writing)f(applications.)42
-b(It)30 b(is)f(pro)n(vided)g(mainly)227 2314 y(for)23
-b(dev)n(elop)r(ers)f(of)h(other)f(libraries,)h(who)g(ma)n(y)f(wish)h
-(to)g(retain)g(references)f(to)h(AST)g(Ob)5 b(jects)23
-b(in)h(in)n(ternal)e(data)227 2414 y(structures,)27 b(and)h(who)f
-(therefore)g(need)g(to)h(a)n(v)n(oid)e(the)i(e\013ects)g(of)f(astBegin)
-g(and)g(astEnd.)0 2562 y Fd(Synopsis:)121 b Ft(void)42
-b(astExempt\()d(AstObject)h Fi(\003)p Ft(this)i(\))0
-2711 y Fd(P)m(arameters:)259 2847 y(this)427 2946 y Fj(Ob)5
-b(ject)28 b(p)r(oin)n(ter)f(to)g(b)r(e)h(exempted)g(from)g(con)n(text)f
-(handling.)0 3107 y Fd(Class)k(Applicabilit)m(y:)259
-3243 y(Ob)5 b(ject)427 3342 y Fj(This)28 b(function)g(applies)f(to)h
-(all)f(Ob)5 b(jects.)p 0 3540 V 0 3670 a Fz(astExp)t(ort)735
-3671 y Fe(Exp)s(ort)33 b(an)h(Ob)7 b(ject)34 b(p)s(oin)m(ter)f(to)h(an)
-g(outer)f(con)m(text)3197 3670 y Fz(astExp)t(ort)0 3858
-y Fd(Description:)44 b Fj(This)31 b(function)h(exp)r(orts)e(an)g(Ob)5
-b(ject)31 b(p)r(oin)n(ter)g(from)f(the)h(curren)n(t)f(AST)i(con)n(text)
-e(in)n(to)h(the)g(con)n(text)227 3958 y(that)i(encloses)e(the)i(curren)
-n(t)f(one.)51 b(This)33 b(means)f(that)g(the)h(p)r(oin)n(ter)f(will)h
-(no)f(longer)f(b)r(e)i(ann)n(ulled)g(when)f(the)227 4058
-y(curren)n(t)27 b(con)n(text)g(is)h(ended)g(\(with)g(astEnd\),)f(but)h
-(only)g(when)f(the)h(next)g(outer)f(con)n(text)g(\(if)i(an)n(y\))e
-(ends.)0 4206 y Fd(Synopsis:)121 b Ft(void)42 b(astExport\()d
-(AstObject)h Fi(\003)p Ft(this)i(\))0 4355 y Fd(P)m(arameters:)259
-4490 y(this)427 4590 y Fj(Ob)5 b(ject)28 b(p)r(oin)n(ter)f(to)g(b)r(e)h
-(exp)r(orted.)0 4751 y Fd(Class)j(Applicabilit)m(y:)259
-4886 y(Ob)5 b(ject)427 4986 y Fj(This)28 b(function)g(applies)f(to)h
-(all)f(Ob)5 b(jects.)0 5147 y Fd(Notes:)340 5429 y Fi(\017)45
-b Fj(It)21 b(is)f(only)g(sensible)h(to)f(apply)g(this)h(function)g(to)f
-(p)r(oin)n(ters)g(that)g(ha)n(v)n(e)g(b)r(een)g(created)g(within)h
-(\(or)f(exp)r(orted)427 5528 y(to\))26 b(the)g(curren)n(t)f(con)n(text)
-h(and)f(ha)n(v)n(e)g(not)g(b)r(een)i(rendered)e(exempt)h(using)f
-(astExempt.)36 b(Applying)26 b(it)g(to)427 5628 y(an)i(unsuitable)f(Ob)
-5 b(ject)28 b(p)r(oin)n(ter)f(has)g(no)g(e\013ect.)p
-eop end
-%%Page: 222 232
-TeXDict begin 222 231 bop 0 52 a FF(222)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astFindFits)314 b Fe(Find)39 b(a)g(FITS)g(card)f(in)h(a)f
-(FitsChan)g(b)m(y)1678 598 y(k)m(eyw)m(ord)3110 483 y
-Fz(astFindFits)0 769 y Fd(Description:)44 b Fj(This)33
-b(function)f(searc)n(hes)f(for)g(a)h(card)g(in)g(a)g(FitsChan)g(b)n(y)g
-(k)n(eyw)n(ord.)49 b(The)32 b(searc)n(h)f(commences)h(at)227
-869 y(the)k(curren)n(t)e(card)g(\(iden)n(ti\014ed)i(b)n(y)f(the)g(Card)
-f(attribute\))i(and)f(ends)g(when)g(a)f(card)h(is)g(found)g(whose)f
-(FITS)227 968 y(k)n(eyw)n(ord)25 b(matc)n(hes)h(the)g(template)h
-(supplied,)g(or)f(when)g(the)h(last)f(card)g(in)g(the)h(FitsChan)f(has)
-g(b)r(een)h(searc)n(hed.)227 1088 y(If)33 b(the)f(searc)n(h)e(is)i
-(successful)g(\(i.e.)50 b(a)32 b(card)f(is)h(found)g(whic)n(h)g(matc)n
-(hes)g(the)g(template\),)i(the)e(con)n(ten)n(ts)f(of)h(the)227
-1188 y(card)h(are)g(\(optionally\))h(returned)f(and)h(the)g(Card)g
-(attribute)g(is)f(adjusted)i(to)e(iden)n(tify)i(the)f(card)f(found)h
-(or,)227 1288 y(if)d(required,)f(the)g(one)g(follo)n(wing)f(it.)45
-b(If)31 b(the)f(searc)n(h)f(is)h(not)g(successful,)h(the)f(function)h
-(returns)e(zero)g(and)h(the)227 1387 y(Card)d(attribute)h(is)f(set)h
-(to)f(the)h Ft(")p Fj(end-of-\014le)p Ft(")p Fj(.)0 1528
-y Fd(Synopsis:)121 b Ft(int)42 b(astFindFits\()d(AstFitsChan)g
-Fi(\003)p Ft(this,)i(const)g(char)h Fi(\003)p Ft(name,)f(char)h(card[)g
-(81)h(],)f(int)h(inc)227 1628 y(\))0 1768 y Fd(P)m(arameters:)259
-1896 y(this)427 1996 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259
-2120 y Fd(name)427 2219 y Fj(P)n(oin)n(ter)34 b(to)h(a)g(n)n
-(ull-terminated)g(c)n(haracter)e(string)i(con)n(taining)f(a)h(template)
-g(for)g(the)h(k)n(eyw)n(ord)d(to)i(b)r(e)427 2319 y(found.)66
-b(In)37 b(the)g(simplest)h(case,)g(this)g(should)e(simply)h(b)r(e)h
-(the)f(k)n(eyw)n(ord)f(name)g(\(the)i(searc)n(h)e(is)g(case)427
-2419 y(insensitiv)n(e)31 b(and)f(trailing)g(spaces)g(are)f(ignored\).)
-46 b(Ho)n(w)n(ev)n(er,)29 b(this)i(template)g(ma)n(y)f(also)g(con)n
-(tain)g Ft(")p Fj(\014eld)427 2518 y(sp)r(eci\014ers)p
-Ft(")21 b Fj(whic)n(h)g(are)f(capable)g(of)i(matc)n(hing)e(a)h(range)f
-(of)h(c)n(haracters)e(\(see)j(the)f Ft(")p Fj(Keyw)n(ord)e(T)-7
-b(emplates)p Ft(")427 2618 y Fj(section)30 b(for)g(details\).)46
-b(In)31 b(this)g(case,)f(the)h(\014rst)f(card)g(with)h(a)f(k)n(eyw)n
-(ord)f(whic)n(h)h(matc)n(hes)g(the)h(template)427 2717
-y(will)38 b(b)r(e)f(found.)66 b(T)-7 b(o)36 b(\014nd)i(the)f(next)g
-(FITS)h(card)e(regardless)e(of)j(its)h(k)n(eyw)n(ord,)f(y)n(ou)g
-(should)f(use)h(the)427 2817 y(template)28 b Ft(")p Fj(\045f)p
-Ft(")p Fj(.)259 2941 y Fd(card)427 3041 y Fj(An)i(arra)n(y)d(of)i(at)g
-(least)g(81)f(c)n(haracters)f(\(to)j(allo)n(w)e(ro)r(om)g(for)h(a)f
-(terminating)h(n)n(ull\))h(in)f(whic)n(h)h(the)f(FITS)427
-3140 y(card)j(whic)n(h)g(is)g(found)g(will)h(b)r(e)f(returned.)50
-b(If)33 b(the)f(searc)n(h)f(is)h(not)g(successful)g(\(or)g(a)f(NULL)i
-(p)r(oin)n(ter)f(is)427 3240 y(giv)n(en\),)27 b(a)h(card)e(will)i(not)g
-(b)r(e)g(returned.)259 3364 y Fd(inc)427 3464 y Fj(If)j(this)f(v)-5
-b(alue)29 b(is)h(zero)f(\(and)h(the)g(searc)n(h)e(is)i(successful\),)g
-(the)h(FitsChan's)e(Card)g(attribute)h(will)g(b)r(e)h(set)427
-3563 y(to)26 b(the)f(index)h(of)f(the)h(card)e(that)i(w)n(as)e(found.)
-37 b(If)26 b(it)f(is)h(non-zero,)e(ho)n(w)n(ev)n(er,)g(the)h(Card)g
-(attribute)h(will)f(b)r(e)427 3663 y(incremen)n(ted)j(to)f(iden)n(tify)
-h(the)g(card)f(whic)n(h)g(follo)n(ws)g(the)h(one)f(found.)0
-3816 y Fd(Returned)32 b(V)-8 b(alue:)259 3944 y(astFindFits\(\))427
-4044 y Fj(One)28 b(if)g(the)g(searc)n(h)e(w)n(as)g(successful,)i
-(otherwise)e(zero.)0 4197 y Fd(Examples:)227 4328 y Fq(result)46
-b(=)i(astFindFits\()c(fitschan,)i Ft(")p Fq(\045f)p Ft(")p
-Fq(,)g(card,)g(1)h(\);)427 4424 y Fj(Returns)26 b(the)g(curren)n(t)g
-(card)f(in)h(a)f(FitsChan)h(and)g(adv)-5 b(ances)25 b(the)i(Card)e
-(attribute)h(to)g(iden)n(tify)g(the)g(card)427 4524 y(that)i(follo)n
-(ws)f(\(the)h Ft(")p Fj(\045f)p Ft(")f Fj(template)h(matc)n(hes)f(an)n
-(y)g(k)n(eyw)n(ord\).)227 4652 y Fq(result)46 b(=)i(astFindFits\()c
-(fitschan,)i Ft(")p Fq(BITPIX)p Ft(")p Fq(,)f(card,)h(1)h(\);)427
-4747 y Fj(Searc)n(hes)34 b(a)h(FitsChan)g(for)f(a)h(FITS)g(card)g(with)
-g(the)h Ft(")p Fj(BITPIX)p Ft(")e Fj(k)n(eyw)n(ord)f(and)i(returns)f
-(that)h(card.)427 4847 y(The)28 b(Card)f(attribute)g(is)h(then)g
-(incremen)n(ted)f(to)h(iden)n(tify)g(the)g(card)f(that)h(follo)n(ws)e
-(it.)227 4975 y Fq(result)46 b(=)i(astFindFits\()c(fitschan,)i
-Ft(")p Fq(COMMENT)p Ft(")p Fq(,)e(NULL,)j(0)g(\);)427
-5071 y Fj(Sets)32 b(the)h(Card)e(attribute)h(of)g(a)f(FitsChan)h(to)g
-(iden)n(tify)g(the)h(next)f(COMMENT)f(card)g(\(if)i(an)n(y\).)50
-b(The)427 5170 y(card)27 b(itself)h(is)g(not)f(returned.)227
-5299 y Fq(result)46 b(=)i(astFindFits\()c(fitschan,)i
-Ft(")p Fq(CRVAL\0451d)p Ft(")p Fq(,)e(card,)i(1)i(\);)427
-5394 y Fj(Searc)n(hes)28 b(a)h(FitsChan)g(for)g(the)h(next)g(card)e
-(with)i(a)f(k)n(eyw)n(ord)e(of)i(the)h(form)f Ft(")p
-Fj(CR)-9 b(V)g(ALi)p Ft(")29 b Fj(\(for)g(example,)427
-5494 y(an)n(y)k(of)h(the)f(k)n(eyw)n(ords)f Ft(")p Fj(CR)-9
-b(V)g(AL1)p Ft(")p Fj(,)34 b Ft(")p Fj(CR)-9 b(V)g(AL2)p
-Ft(")32 b Fj(or)h Ft(")p Fj(CR)-9 b(V)g(AL3)p Ft(")32
-b Fj(w)n(ould)h(b)r(e)h(matc)n(hed\).)55 b(The)33 b(card)427
-5593 y(found)22 b(\(if)g(an)n(y\))e(is)h(returned,)i(and)e(the)g(Card)f
-(attribute)i(is)f(then)g(incremen)n(ted)g(to)g(iden)n(tify)h(the)g
-(follo)n(wing)427 5693 y(card)27 b(\(ready)g(to)g(searc)n(h)f(for)h
-(another)g(k)n(eyw)n(ord)f(with)i(the)g(same)f(form,)g(p)r(erhaps\).)p
-eop end
-%%Page: 223 233
-TeXDict begin 223 232 bop 3643 52 a FF(223)0 351 y Fd(Notes:)340
-681 y Fi(\017)45 b Fj(The)23 b(searc)n(h)f(alw)n(a)n(ys)f(starts)i
-(with)g(the)h(curren)n(t)e(card,)h(as)g(iden)n(ti\014ed)g(b)n(y)g(the)h
-(Card)e(attribute.)35 b(T)-7 b(o)23 b(ensure)427 781
-y(y)n(ou)i(searc)n(h)g(the)h(en)n(tire)g(con)n(ten)n(ts)f(of)h(a)f
-(FitsChan,)i(y)n(ou)e(should)h(\014rst)f(clear)g(the)h(Card)g
-(attribute)g(\(using)427 880 y(astClear\).)36 b(This)28
-b(e\013ectiv)n(ely)f Ft(")p Fj(rewinds)p Ft(")f Fj(the)i(FitsChan.)340
-1037 y Fi(\017)45 b Fj(If)24 b(a)g(searc)n(h)e(is)i(unsuccessful,)g
-(the)g(Card)f(attribute)h(is)g(set)f(to)h(the)g Ft(")p
-Fj(end-of-\014le)p Ft(")f Fj(\(i.e.)36 b(to)23 b(one)h(more)e(than)427
-1136 y(the)28 b(n)n(um)n(b)r(er)g(of)f(cards)g(in)g(the)h(FitsChan\).)
-38 b(No)27 b(error)f(o)r(ccurs.)340 1293 y Fi(\017)45
-b Fj(A)29 b(v)-5 b(alue)29 b(of)f(zero)g(will)h(b)r(e)g(returned)f(if)h
-(this)g(function)g(is)f(in)n(v)n(ok)n(ed)f(with)j(the)f(AST)g(error)d
-(status)j(set,)f(or)427 1392 y(if)g(it)g(should)g(fail)f(for)h(an)n(y)e
-(reason.)-2 1601 y Fd(Keyw)m(ord)33 b(T)-8 b(emplates)n(:)227
-1747 y Fj(The)32 b(templates)f(used)h(to)f(matc)n(h)g(FITS)h(k)n(eyw)n
-(ords)d(are)i(normally)f(comp)r(osed)h(of)h(literal)e(c)n(haracters,)h
-(whic)n(h)227 1847 y(m)n(ust)f(matc)n(h)g(the)h(k)n(eyw)n(ord)d
-(exactly)h(\(apart)h(from)f(case\).)44 b(Ho)n(w)n(ev)n(er,)29
-b(a)h(template)g(ma)n(y)f(also)g(con)n(tain)h Ft(")p
-Fj(\014eld)227 1947 y(sp)r(eci\014ers)p Ft(")25 b Fj(whic)n(h)h(can)g
-(matc)n(h)f(a)h(range)f(of)h(p)r(ossible)f(c)n(haracters.)34
-b(This)26 b(allo)n(ws)f(y)n(ou)g(to)h(searc)n(h)e(for)i(k)n(eyw)n(ords)
-227 2046 y(that)36 b(con)n(tain)f(\(for)g(example\))g(n)n(um)n(b)r
-(ers,)i(where)e(the)h(digits)f(comprising)f(the)i(n)n(um)n(b)r(er)f
-(are)f(not)i(kno)n(wn)e(in)227 2146 y(adv)-5 b(ance.)227
-2294 y(A)30 b(\014eld)g(sp)r(eci\014er)g(starts)f(with)h(a)f
-Ft(")p Fj(\045)p Ft(")h Fj(c)n(haracter.)41 b(This)30
-b(is)f(follo)n(w)n(ed)g(b)n(y)h(an)f(optional)g(single)h(digit)f(\(0)h
-(to)g(9\))227 2394 y(sp)r(ecifying)c(a)f(\014eld)i(width.)37
-b(Finally)-7 b(,)26 b(there)f(is)h(a)f(single)h(c)n(haracter)e(whic)n
-(h)h(sp)r(eci\014es)h(the)g(t)n(yp)r(e)g(of)g(c)n(haracter)e(to)227
-2493 y(b)r(e)k(matc)n(hed,)g(as)f(follo)n(ws:)340 2825
-y Fi(\017)45 b Ft(")p Fj(c)p Ft(")p Fj(:)36 b(matc)n(hes)27
-b(all)h(upp)r(er)f(case)g(letters,)340 2981 y Fi(\017)45
-b Ft(")p Fj(d)p Ft(")p Fj(:)37 b(matc)n(hes)27 b(all)g(decimal)g
-(digits,)340 3138 y Fi(\017)45 b Ft(")p Fj(f)p Ft(")p
-Fj(:)39 b(matc)n(hes)29 b(all)f(c)n(haracters)f(whic)n(h)i(are)f(p)r
-(ermitted)h(within)h(a)e(FITS)h(k)n(eyw)n(ord)e(\(upp)r(er)j(case)e
-(letters,)427 3237 y(digits,)g(underscores)e(and)h(h)n(yphens\).)227
-3446 y(If)e(the)g(\014eld)f(width)h(is)g(omitted,)g(the)g(\014eld)f(sp)
-r(eci\014er)g(matc)n(hes)g(one)g(or)g(more)f(c)n(haracters.)34
-b(If)24 b(the)h(\014eld)g(width)g(is)227 3546 y(zero,)k(it)g(matc)n
-(hes)g(zero)f(or)g(more)g(c)n(haracters.)39 b(Otherwise,)28
-b(it)i(matc)n(hes)e(exactly)h(the)g(n)n(um)n(b)r(er)g(of)g(c)n
-(haracters)227 3646 y(sp)r(eci\014ed.)37 b(In)28 b(addition)g(to)f
-(this:)340 3977 y Fi(\017)45 b Fj(The)c(template)g Ft(")p
-Fj(\045f)p Ft(")f Fj(will)h(matc)n(h)g(a)f(blank)g(FITS)h(k)n(eyw)n
-(ord)e(consisting)h(of)h(8)f(spaces)g(\(as)g(w)n(ell)g(as)427
-4077 y(matc)n(hing)27 b(all)h(other)f(k)n(eyw)n(ords\).)340
-4233 y Fi(\017)45 b Fj(A)28 b(template)g(consisting)f(of)g(8)h(spaces)e
-(will)i(matc)n(h)f(a)h(blank)f(k)n(eyw)n(ord)f(\(only\).)227
-4442 y(F)-7 b(or)27 b(example:)340 4774 y Fi(\017)45
-b Fj(The)28 b(template)g Ft(")p Fj(BitPix)p Ft(")e Fj(will)i(matc)n(h)f
-(the)h(k)n(eyw)n(ord)e Ft(")p Fj(BITPIX)p Ft(")g Fj(only)-7
-b(.)340 4930 y Fi(\017)45 b Fj(The)27 b(template)g Ft(")p
-Fj(crpix\0451d)p Ft(")f Fj(will)h(matc)n(h)f(k)n(eyw)n(ords)f
-(consisting)h(of)h Ft(")p Fj(CRPIX)p Ft(")f Fj(follo)n(w)n(ed)g(b)n(y)g
-(one)h(deci-)427 5030 y(mal)h(digit.)340 5186 y Fi(\017)45
-b Fj(The)26 b(template)f Ft(")p Fj(P\045c)p Ft(")f Fj(will)i(matc)n(h)e
-(an)n(y)h(k)n(eyw)n(ord)e(starting)i(with)g Ft(")p Fj(P)p
-Ft(")f Fj(and)h(follo)n(w)n(ed)f(b)n(y)h(one)g(or)f(more)427
-5286 y(letters.)340 5442 y Fi(\017)45 b Fj(The)28 b(template)g
-Ft(")p Fj(E\0450f)p Ft(")e Fj(will)i(matc)n(h)f(an)n(y)g(k)n(eyw)n(ord)
-f(b)r(eginning)i(with)g Ft(")p Fj(E)p Ft(")p Fj(.)340
-5599 y Fi(\017)45 b Fj(The)28 b(template)g Ft(")p Fj(\045f)p
-Ft(")f Fj(will)h(matc)n(h)f(an)n(y)g(k)n(eyw)n(ord)f(at)h(all)h
-(\(including)g(a)f(blank)g(one\).)p eop end
-%%Page: 224 234
-TeXDict begin 224 233 bop 0 52 a FF(224)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astFindF)-11 b(rame)297 b Fe(Find)39 b(a)g(co)s(ordinate)d
-(system)j(with)1290 598 y(sp)s(eci\014ed)h(c)m(haracteristics)2970
-483 y Fz(astFindF)-11 b(rame)0 795 y Fd(Description:)44
-b Fj(This)24 b(function)h(uses)e(a)h Ft(")p Fj(template)p
-Ft(")g Fj(F)-7 b(rame)23 b(to)h(searc)n(h)e(another)h(F)-7
-b(rame)24 b(\(or)f(F)-7 b(rameSet\))24 b(to)g(iden)n(tify)227
-895 y(a)33 b(co)r(ordinate)f(system)i(whic)n(h)f(has)g(a)g(sp)r
-(eci\014ed)g(set)h(of)f(c)n(haracteristics.)52 b(If)33
-b(a)g(suitable)h(co)r(ordinate)e(system)227 994 y(can)23
-b(b)r(e)h(found,)h(the)f(function)g(returns)e(a)i(p)r(oin)n(ter)f(to)g
-(a)g(F)-7 b(rameSet)23 b(whic)n(h)h(describ)r(es)e(the)i(required)f(co)
-r(ordinate)227 1094 y(system)28 b(and)f(ho)n(w)g(to)g(con)n(v)n(ert)g
-(co)r(ordinates)f(to)h(and)h(from)f(it.)227 1221 y(This)41
-b(function)f(is)h(pro)n(vided)e(to)h(help)h(answ)n(er)d(general)h
-(questions)h(ab)r(out)g(co)r(ordinate)f(systems,)k(suc)n(h)d(as)227
-1320 y(t)n(ypically)f(arise)f(when)h(co)r(ordinate)f(information)h(is)g
-(imp)r(orted)g(in)n(to)g(a)f(program)f(as)i(part)g(of)g(an)f(initially)
-227 1420 y(unkno)n(wn)27 b(dataset.)37 b(F)-7 b(or)27
-b(example:)340 1560 y Fi(\017)45 b Fj(Is)28 b(there)f(a)g(w)n(a)n(v)n
-(elength)f(scale?)340 1695 y Fi(\017)45 b Fj(Is)28 b(there)f(a)g
-(2-dimensional)g(co)r(ordinate)f(system?)340 1830 y Fi(\017)45
-b Fj(Is)28 b(there)f(a)g(celestial)g(co)r(ordinate)g(system?)340
-1965 y Fi(\017)45 b Fj(Can)28 b(I)f(plot)h(the)g(data)f(in)h(ecliptic)g
-(co)r(ordinates?)227 2131 y(Y)-7 b(ou)30 b(can)g(also)f(use)g(this)i
-(function)f(as)f(a)h(means)f(of)h(reconciling)f(a)g(user's)g
-(preference)h(for)f(a)h(particular)e(co)r(or-)227 2231
-y(dinate)k(system)f(\(for)h(example,)g(what)f(t)n(yp)r(e)h(of)g(axes)e
-(to)i(dra)n(w\))e(with)i(what)g(is)f(actually)g(p)r(ossible)g(giv)n(en)
-g(the)227 2330 y(co)r(ordinate)c(information)g(a)n(v)-5
-b(ailable.)227 2457 y(T)e(o)40 b(p)r(erform)f(a)h(searc)n(h,)h(y)n(ou)f
-(supply)g(a)f Ft(")p Fj(target)p Ft(")f Fj(F)-7 b(rame)40
-b(\(or)f(F)-7 b(rameSet\))40 b(whic)n(h)g(represen)n(ts)e(the)j(set)f
-(of)227 2557 y(co)r(ordinate)30 b(systems)g(to)g(b)r(e)i(searc)n(hed.)
-44 b(If)31 b(a)f(basic)g(F)-7 b(rame)31 b(is)f(giv)n(en)g(as)g(the)h
-(target,)g(this)g(set)f(of)h(co)r(ordinate)227 2656 y(systems)h
-(consists)g(of)h(the)g(one)f(describ)r(ed)h(b)n(y)f(this)h(F)-7
-b(rame,)33 b(plus)g(all)f(other)g Ft(")p Fj(virtual)p
-Ft(")g Fj(co)r(ordinate)f(systems)227 2756 y(whic)n(h)c(can)g(p)r(oten)
-n(tially)f(b)r(e)i(reac)n(hed)d(from)i(it)g(b)n(y)g(applying)f
-(built-in)i(con)n(v)n(ersions)c(\(for)j(example,)f(an)n(y)g(of)h(the)
-227 2855 y(celestial)19 b(co)r(ordinate)g(con)n(v)n(ersions)e(kno)n(wn)
-i(to)h(the)g(AST)g(library)e(w)n(ould)i(constitute)g(a)f
-Ft(")p Fj(built-in)p Ft(")h Fj(con)n(v)n(ersion\).)227
-2955 y(If)32 b(a)f(F)-7 b(rameSet)31 b(is)g(giv)n(en)g(as)f(the)i
-(target,)f(the)h(set)f(of)h(co)r(ordinate)e(systems)h(to)g(b)r(e)h
-(searc)n(hed)d(consists)i(of)g(the)227 3055 y(union)d(of)f(those)h
-(represen)n(ted)e(b)n(y)h(all)h(the)g(individual)f(F)-7
-b(rames)27 b(within)i(it.)227 3181 y(T)-7 b(o)26 b(select)g(from)f
-(this)i(large)d(set)i(of)g(p)r(ossible)g(co)r(ordinate)f(systems,)h(y)n
-(ou)f(supply)h(a)g Ft(")p Fj(template)p Ft(")f Fj(F)-7
-b(rame)26 b(whic)n(h)227 3281 y(is)k(an)g(instance)g(of)h(the)f(t)n(yp)
-r(e)h(of)f(F)-7 b(rame)30 b(y)n(ou)f(are)g(lo)r(oking)h(for.)44
-b(E\013ectiv)n(ely)-7 b(,)31 b(y)n(ou)e(then)i(ask)e(the)i(function)g
-(to)227 3381 y Ft(")p Fj(\014nd)d(a)f(co)r(ordinate)g(system)g(that)h
-(lo)r(oks)e(lik)n(e)i(this)p Ft(")p Fj(.)227 3507 y(Y)-7
-b(ou)24 b(can)e(mak)n(e)h(y)n(our)f(request)h(more)f(or)g(less)h(sp)r
-(eci\014c)h(b)n(y)f(setting)g(attribute)g(v)-5 b(alues)23
-b(for)g(the)g(template)h(F)-7 b(rame.)227 3607 y(If)28
-b(a)f(particular)e(attribute)j(is)f(set)g(in)g(the)h(template,)g(then)f
-(the)h(function)f(will)h(only)f(\014nd)g(co)r(ordinate)f(systems)227
-3706 y(whic)n(h)35 b(ha)n(v)n(e)f(exactly)g(the)i(same)e(v)-5
-b(alue)35 b(for)g(that)g(attribute.)59 b(If)36 b(y)n(ou)e(lea)n(v)n(e)g
-(a)g(template)h(attribute)h(un-set,)227 3806 y(ho)n(w)n(ev)n(er,)30
-b(then)h(the)g(function)g(has)f(discretion)g(ab)r(out)h(the)g(v)-5
-b(alue)30 b(the)i(attribute)e(should)h(ha)n(v)n(e)e(in)i(an)n(y)f(co)r
-(or-)227 3906 y(dinate)h(system)e(it)i(\014nds.)45 b(The)30
-b(attribute)g(will)h(then)f(tak)n(e)g(its)g(v)-5 b(alue)30
-b(from)g(one)g(of)g(the)g(actual)g(\(rather)f(than)227
-4005 y(virtual\))d(co)r(ordinate)f(systems)h(in)h(the)f(target.)36
-b(If)26 b(the)h(target)e(is)h(a)g(F)-7 b(rameSet,)27
-b(its)f(Curren)n(t)f(attribute)i(will)f(b)r(e)227 4105
-y(mo)r(di\014ed)i(to)g(indicate)f(whic)n(h)h(of)f(its)h(F)-7
-b(rames)27 b(w)n(as)g(used)g(for)g(this)h(purp)r(ose.)227
-4231 y(The)34 b(result)g(of)f(this)h(pro)r(cess)f(is)h(a)f(co)r
-(ordinate)g(system)g(represen)n(ted)g(b)n(y)g(a)h(h)n(ybrid)f(F)-7
-b(rame)33 b(whic)n(h)h(acquires)227 4331 y(some)28 b(attributes)h(from)
-f(the)h(template)g(\(but)h(only)e(if)h(they)g(w)n(ere)e(set\))i(and)g
-(the)g(remainder)e(from)h(the)h(target.)227 4431 y(This)34
-b(represen)n(ts)f(the)h Ft(")p Fj(b)r(est)g(compromise)p
-Ft(")f Fj(b)r(et)n(w)n(een)h(what)g(y)n(ou)f(ask)n(ed)g(for)g(and)h
-(what)g(w)n(as)f(a)n(v)-5 b(ailable.)55 b(A)227 4530
-y(Mapping)31 b(is)g(then)g(generated)f(whic)n(h)h(con)n(v)n(erts)e
-(from)i(the)g(target)g(co)r(ordinate)e(system)i(to)g(this)g(h)n(ybrid)g
-(one,)227 4630 y(and)d(the)g(returned)f(F)-7 b(rameSet)27
-b(encapsulates)g(all)g(of)h(this)g(information.)0 4784
-y Fd(Synopsis:)121 b Ft(AstFrameSet)39 b Fi(\003)p Ft(astFindFrame\()f
-(AstFrame)i Fi(\003)p Ft(target,)g(AstFrame)g Fi(\003)p
-Ft(template,)g(const)h(char)h Fi(\003)p Ft(domainlist)227
-4883 y(\))0 5037 y Fd(P)m(arameters:)259 5177 y(target)427
-5277 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(target)e(F)-7
-b(rame)27 b(\(or)g(F)-7 b(rameSet\).)427 5394 y(Note)37
-b(that)g(if)g(a)g(F)-7 b(rameSet)36 b(is)h(supplied)g(\(and)g(a)f
-(suitable)h(co)r(ordinate)e(system)i(is)f(found\),)k(then)d(its)427
-5494 y(Curren)n(t)h(attribute)h(will)f(b)r(e)h(mo)r(di\014ed)g(to)f
-(indicate)h(whic)n(h)f(F)-7 b(rame)38 b(w)n(as)g(used)g(to)g(obtain)g
-(attribute)427 5593 y(v)-5 b(alues)31 b(whic)n(h)g(w)n(ere)g(not)g(sp)r
-(eci\014ed)h(b)n(y)e(the)i(template.)48 b(This)32 b(F)-7
-b(rame)30 b(will,)j(in)e(some)g(sense,)h(represen)n(t)427
-5693 y(the)c Ft(")p Fj(closest)p Ft(")e Fj(non-virtual)h(co)r(ordinate)
-f(system)i(to)f(the)h(one)f(y)n(ou)g(requested.)p eop
-end
-%%Page: 225 235
-TeXDict begin 225 234 bop 3643 52 a FF(225)259 351 y
-Fd(template)427 451 y Fj(P)n(oin)n(ter)29 b(to)h(the)h(template)g(F)-7
-b(rame,)31 b(whic)n(h)f(should)g(b)r(e)h(an)f(instance)h(of)f(the)h(t)n
-(yp)r(e)g(of)f(F)-7 b(rame)30 b(y)n(ou)g(wish)427 551
-y(to)e(\014nd.)38 b(If)28 b(y)n(ou)f(w)n(an)n(ted)h(to)f(\014nd)i(a)e
-(F)-7 b(rame)27 b(describing)g(a)h(celestial)f(co)r(ordinate)g(system,)
-h(for)f(example,)427 650 y(then)h(y)n(ou)f(migh)n(t)h(use)f(a)g(SkyF)-7
-b(rame)27 b(here.)37 b(See)27 b(the)h Ft(")p Fj(Examples)p
-Ft(")e Fj(section)h(for)g(more)g(ideas.)259 778 y Fd(domainlist)427
-877 y Fj(P)n(oin)n(ter)36 b(to)i(a)f(n)n(ull-terminated)g(c)n(haracter)
-e(string)i(con)n(taining)g(a)g(comma-separated)e(list)j(of)f(F)-7
-b(rame)427 977 y(domains.)36 b(This)28 b(ma)n(y)e(b)r(e)i(used)g(to)f
-(establish)g(a)g(priorit)n(y)f(order)g(for)h(the)h(di\013eren)n(t)f(t)n
-(yp)r(es)g(of)h(co)r(ordinate)427 1077 y(system)g(that)g(migh)n(t)f(b)r
-(e)h(found.)427 1190 y(The)23 b(function)g(will)g(\014rst)f(try)g(to)h
-(\014nd)g(a)f(suitable)h(co)r(ordinate)e(system)h(whose)g(Domain)h
-(attribute)f(equals)427 1290 y(the)31 b(\014rst)g(domain)f(in)h(this)g
-(list.)47 b(If)31 b(this)g(fails,)h(the)f(second)f(domain)h(in)g(the)g
-(list)g(will)g(b)r(e)g(used,)h(and)e(so)427 1389 y(on,)e(un)n(til)h(a)e
-(result)h(is)g(obtained.)38 b(A)28 b(blank)g(domain)g(\(e.g.)38
-b(t)n(w)n(o)27 b(consecutiv)n(e)g(commas\))g(indicates)h(that)427
-1489 y(an)n(y)f(co)r(ordinate)g(system)g(is)g(acceptable)g(\(sub)5
-b(ject)28 b(to)g(the)g(template\))g(regardless)d(of)j(its)f(domain.)427
-1603 y(This)i(list)h(is)f(case-insensitiv)n(e)f(and)h(all)g(white)g
-(space)g(is)g(ignored.)40 b(If)30 b(y)n(ou)e(do)h(not)g(wish)h(to)f
-(restrict)f(the)427 1702 y(domain)f(in)h(this)g(w)n(a)n(y)-7
-b(,)27 b(y)n(ou)g(should)g(supply)h(an)f(empt)n(y)h(string.)0
-1859 y Fd(Class)j(Applicabilit)m(y:)259 1990 y(F)-8 b(rame)427
-2089 y Fj(This)28 b(function)g(applies)f(to)h(all)f(F)-7
-b(rames.)259 2217 y Fd(F)f(rameSet)427 2317 y Fj(If)31
-b(the)f(target)f(is)h(a)g(F)-7 b(rameSet,)30 b(the)g(p)r(ossibilit)n(y)
-g(exists)g(that)g(sev)n(eral)e(of)i(the)g(F)-7 b(rames)30
-b(within)g(it)h(migh)n(t)427 2416 y(b)r(e)f(matc)n(hed)f(b)n(y)g(the)g
-(template.)42 b(Unless)29 b(the)h(c)n(hoice)e(is)i(su\016cien)n(tly)f
-(restricted)f(b)n(y)h(the)h Ft(")p Fj(domainlist)p Ft(")427
-2516 y Fj(string,)e(the)h(sequence)e(in)i(whic)n(h)f(F)-7
-b(rames)27 b(are)h(searc)n(hed)e(can)i(then)h(b)r(ecome)f(imp)r(ortan)n
-(t.)38 b(In)29 b(this)f(case,)427 2615 y(the)g(searc)n(h)e(pro)r(ceeds)
-h(as)g(follo)n(ws:)510 2717 y Fi(\017)45 b Fj(Eac)n(h)27
-b(\014eld)h(in)f(the)h Ft(")p Fj(domainlist)p Ft(")f
-Fj(string)g(is)g(considered)g(in)h(turn.)510 2831 y Fi(\017)45
-b Fj(An)29 b(attempt)g(is)g(made)f(to)h(matc)n(h)f(the)h(template)g(to)
-f(eac)n(h)g(of)g(the)h(target's)e(F)-7 b(rames)28 b(in)h(the)g(order:)
-597 2931 y(\(1\))35 b(the)g(curren)n(t)f(F)-7 b(rame,)36
-b(\(2\))f(the)h(base)e(F)-7 b(rame,)36 b(\(3\))f(eac)n(h)f(remaining)g
-(F)-7 b(rame)34 b(in)h(the)g(order)f(of)597 3030 y(b)r(eing)28
-b(added)f(to)h(the)g(target)f(F)-7 b(rameSet.)510 3144
-y Fi(\017)45 b Fj(Generally)-7 b(,)41 b(the)d(\014rst)g(matc)n(h)h
-(found)f(is)g(used.)70 b(Ho)n(w)n(ev)n(er,)39 b(the)f(Mapping)g(b)r(et)
-n(w)n(een)h(the)g(target)597 3243 y(co)r(ordinate)23
-b(system)h(and)g(the)g(resulting)g(F)-7 b(rame)23 b(is)h(also)f
-(examined.)35 b(Preference)23 b(is)h(giv)n(en)f(to)h(cases)597
-3343 y(where)37 b(b)r(oth)g(the)h(forw)n(ard)d(and)i(in)n(v)n(erse)f
-(transformations)f(are)h(de\014ned)h(\(as)g(indicated)g(b)n(y)g(the)597
-3443 y(T)-7 b(ranF)g(orw)n(ard)36 b(and)h(T)-7 b(ranIn)n(v)n(erse)36
-b(attributes\).)68 b(If)38 b(only)g(one)f(transformation)g(is)g
-(de\014ned,)k(the)597 3542 y(forw)n(ard)26 b(one)h(is)h(preferred.)510
-3656 y Fi(\017)45 b Fj(If)37 b(a)g(matc)n(h)f(is)h(found)g(and)f(the)h
-(domain)g(of)f(the)h(resulting)g(F)-7 b(rame)36 b(also)f(matc)n(hes)h
-(the)h(curren)n(t)597 3756 y Ft(")p Fj(domainlist)p Ft(")32
-b Fj(\014eld,)h(it)g(is)f(accepted.)51 b(Otherwise,)33
-b(the)g(next)f Ft(")p Fj(domainlist)p Ft(")g Fj(\014eld)g(is)h
-(considered)597 3855 y(and)28 b(the)g(pro)r(cess)e(rep)r(eated.)427
-3983 y(If)g(a)f(suitable)g(co)r(ordinate)f(system)i(is)f(found,)h(the)g
-(Curren)n(t)e(attribute)i(of)f(the)h(target)e(F)-7 b(rameSet)26
-b(will)f(b)r(e)427 4082 y(mo)r(di\014ed)e(on)g(exit)g(to)f(iden)n(tify)
-h(the)g(F)-7 b(rame)23 b(whose)f(matc)n(h)g(with)h(the)g(target)f(w)n
-(as)g(ev)n(en)n(tually)g(accepted.)0 4239 y Fd(Returned)32
-b(V)-8 b(alue:)259 4370 y(astFindF)g(rame\(\))427 4470
-y Fj(If)32 b(the)g(searc)n(h)e(is)i(successful,)g(the)g(function)g
-(returns)f(a)g(p)r(oin)n(ter)g(to)h(a)f(F)-7 b(rameSet)31
-b(whic)n(h)h(con)n(tains)e(the)427 4569 y(F)-7 b(rame)37
-b(found)g(and)g(a)f(description)h(of)g(ho)n(w)f(to)h(con)n(v)n(ert)e
-(to)i(\(and)g(from\))g(the)h(co)r(ordinate)d(system)i(it)427
-4669 y(represen)n(ts.)f(Otherwise,)26 b(a)i(n)n(ull)f(Ob)5
-b(ject)28 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fj(NULL\))h(is)g(returned)f
-(without)h(error.)427 4782 y(If)37 b(a)g(F)-7 b(rameSet)36
-b(is)h(returned,)h(it)f(will)g(con)n(tain)f(t)n(w)n(o)g(F)-7
-b(rames.)64 b(F)-7 b(rame)36 b(n)n(um)n(b)r(er)g(1)h(\(its)g(base)f(F)
--7 b(rame\))427 4882 y(represen)n(ts)36 b(the)i(target)f(co)r(ordinate)
-f(system)h(and)h(will)f(b)r(e)h(the)g(same)f(as)g(the)g(\(base)h(F)-7
-b(rame)37 b(of)g(the\))427 4982 y(target.)64 b(F)-7 b(rame)36
-b(n)n(um)n(b)r(er)h(2)f(\(its)h(curren)n(t)f(F)-7 b(rame\))37
-b(will)g(b)r(e)g(a)f(F)-7 b(rame)36 b(represen)n(ting)g(the)h(co)r
-(ordinate)427 5081 y(system)e(whic)n(h)g(the)g(function)h(found.)59
-b(The)35 b(Mapping)g(whic)n(h)g(in)n(ter-relates)e(these)i(t)n(w)n(o)f
-(F)-7 b(rames)34 b(will)427 5181 y(describ)r(e)28 b(ho)n(w)e(to)i(con)n
-(v)n(ert)e(b)r(et)n(w)n(een)i(their)f(resp)r(ectiv)n(e)g(co)r(ordinate)
-f(systems.)427 5295 y(Note)i(that)h(a)f(F)-7 b(rameSet)28
-b(ma)n(y)f(b)r(e)i(used)f(b)r(oth)g(as)g(a)g(Mapping)f(and)h(as)g(a)g
-(F)-7 b(rame.)38 b(If)28 b(the)h(result)f(is)g(used)427
-5394 y(as)g(a)g(Mapping)g(\(e.g.)40 b(with)29 b(astT)-7
-b(ran2\),)27 b(then)i(it)g(pro)n(vides)e(a)h(means)g(of)g(con)n(v)n
-(erting)f(co)r(ordinates)g(from)427 5494 y(the)h(target)e(co)r
-(ordinate)g(system)h(in)n(to)g(the)h(new)f(co)r(ordinate)f(system)i
-(that)f(w)n(as)f(found)i(\(and)f(vice)g(v)n(ersa)427
-5593 y(if)j(its)f(in)n(v)n(erse)e(transformation)g(is)i(selected\).)41
-b(If)29 b(it)h(is)f(used)f(as)h(a)f(F)-7 b(rame,)29 b(its)g(attributes)
-g(will)g(describ)r(e)427 5693 y(the)f(new)g(co)r(ordinate)e(system.)p
-eop end
-%%Page: 226 236
-TeXDict begin 226 235 bop 0 52 a FF(226)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Examples:)227
-489 y Fq(result)46 b(=)i(astFindFrame\()c(target,)i(astFrame\()f(3,)i
-Ft("")g Fq(\),)g Ft("")g Fq(\);)427 588 y Fj(Searc)n(hes)31
-b(for)h(a)f(3-dimensional)g(co)r(ordinate)g(system)h(in)h(the)g(target)
-e(F)-7 b(rame)32 b(\(or)f(F)-7 b(rameSet\).)51 b(No)32
-b(at-)427 688 y(tributes)j(ha)n(v)n(e)e(b)r(een)h(set)g(in)h(the)f
-(template)h(F)-7 b(rame)34 b(\(created)f(b)n(y)h(astF)-7
-b(rame\),)36 b(so)d(no)h(restriction)f(has)427 787 y(b)r(een)27
-b(placed)g(on)f(the)i(required)e(co)r(ordinate)f(system,)i(other)f
-(than)h(that)g(it)g(should)g(ha)n(v)n(e)e(3)i(dimensions.)427
-887 y(The)h(\014rst)f(suitable)h(F)-7 b(rame)27 b(found)h(will)g(b)r(e)
-g(returned)f(as)g(part)g(of)g(the)h Ft(")p Fj(result)p
-Ft(")f Fj(F)-7 b(rameSet.)227 1021 y Fq(result)46 b(=)i(astFindFrame\()
-c(target,)i(astSkyFrame\()e Ft("")j Fq(\),)g Ft("")g
-Fq(\);)427 1120 y Fj(Searc)n(hes)32 b(for)h(a)g(celestial)f(co)r
-(ordinate)g(system)h(in)h(the)f(target)g(F)-7 b(rame)32
-b(\(or)h(F)-7 b(rameSet\).)54 b(The)33 b(t)n(yp)r(e)h(of)427
-1219 y(celestial)28 b(co)r(ordinate)e(system)i(is)g(unsp)r(eci\014ed,)g
-(so)f(astFindF)-7 b(rame)27 b(will)i(return)e(the)h(\014rst)g(one)f
-(found)h(as)427 1319 y(part)f(of)f(the)h Ft(")p Fj(result)p
-Ft(")f Fj(F)-7 b(rameSet.)36 b(If)28 b(the)f(target)e(is)i(a)f(F)-7
-b(rameSet,)27 b(then)g(its)g(Curren)n(t)f(attribute)h(will)g(b)r(e)427
-1418 y(up)r(dated)h(to)g(iden)n(tify)g(the)g(F)-7 b(rame)27
-b(that)h(w)n(as)f(used.)427 1535 y(If)40 b(no)f(celestial)g(co)r
-(ordinate)f(system)h(can)g(b)r(e)g(found,)k(a)c(v)-5
-b(alue)39 b(of)g(AST)p Ft(__)p Fj(NULL)g(will)g(b)r(e)h(returned)427
-1635 y(without)28 b(error.)227 1769 y Fq(result)46 b(=)i
-(astFindFrame\()c(target,)i(astSkyFrame\()e Ft(")p Fq(MaxAxes=100)p
-Ft(")g Fq(\),)j Ft("")g Fq(\);)427 1867 y Fj(This)39
-b(is)f(lik)n(e)g(the)h(last)g(example,)i(except)d(that)h(in)g(the)g(ev)
-n(en)n(t)f(of)g(the)h(target)f(b)r(eing)h(a)f(CmpF)-7
-b(rame,)427 1967 y(the)31 b(comp)r(onen)n(t)f(F)-7 b(rames)29
-b(encapsulated)g(b)n(y)h(the)g(CmpF)-7 b(rame)30 b(will)h(b)r(e)f
-(searc)n(hed)f(for)g(a)h(SkyF)-7 b(rame.)43 b(If)427
-2067 y(found,)29 b(the)g(returned)f(Mapping)g(will)g(included)h(a)f(P)n
-(ermMap)f(whic)n(h)h(selects)g(the)g(required)g(axes)f(from)427
-2166 y(the)h(target)f(CmpF)-7 b(rame.)427 2283 y(This)31
-b(is)g(acomplished)f(b)n(y)g(setting)h(the)g(MaxAxes)f(attribute)h(of)f
-(the)h(template)g(SkyF)-7 b(rame)30 b(to)h(a)f(large)427
-2382 y(n)n(um)n(b)r(er)h(\(larger)e(than)i(or)f(equal)g(to)h(the)g(n)n
-(um)n(b)r(er)g(of)g(axes)e(in)i(the)h(target)e(CmpF)-7
-b(rame\).)46 b(This)31 b(allo)n(ws)427 2482 y(the)d(SkyF)-7
-b(rame)27 b(to)h(b)r(e)g(used)f(as)g(a)g(matc)n(h)h(for)f(F)-7
-b(rames)26 b(con)n(taining)h(from)g(2)h(to)f(100)f(axes.)227
-2616 y Fq(result)46 b(=)i(astFindFrame\()c(target,)i(astSkyFrame\()e
-Ft(")p Fq(System=FK5)p Ft(")g Fq(\),)k Ft("")e Fq(\);)427
-2715 y Fj(Searc)n(hes)25 b(for)g(an)h(equatorial)e(\(FK5\))i(co)r
-(ordinate)f(system)g(in)i(the)f(target.)35 b(The)26 b(Equino)n(x)f(v)-5
-b(alue)26 b(for)f(the)427 2814 y(co)r(ordinate)k(system)h(has)g(not)h
-(b)r(een)f(sp)r(eci\014ed,)i(so)d(will)i(b)r(e)f(obtained)g(from)g(the)
-h(target.)44 b(If)31 b(the)g(target)427 2914 y(is)26
-b(a)f(F)-7 b(rameSet,)25 b(its)h(Curren)n(t)f(attribute)g(will)h(b)r(e)
-g(up)r(dated)g(to)f(indicate)h(whic)n(h)f(SkyF)-7 b(rame)25
-b(w)n(as)f(used)i(to)427 3013 y(obtain)i(this)f(v)-5
-b(alue.)227 3148 y Fq(result)46 b(=)i(astFindFrame\()c(target,)i
-(astFrame\()f(2,)i Ft("")g Fq(\),)g Ft(")p Fq(sky,pixel,)p
-Ft(")d Fq(\);)427 3246 y Fj(Searc)n(hes)29 b(for)g(a)h(2-dimensional)e
-(co)r(ordinate)h(system)h(in)g(the)h(target.)43 b(Initially)-7
-b(,)30 b(a)g(searc)n(h)e(is)i(made)g(for)427 3346 y(a)j(suitable)h(co)r
-(ordinate)e(system)h(whose)g(Domain)g(attribute)g(has)g(the)h(v)-5
-b(alue)33 b Ft(")p Fj(SKY)p Ft(")p Fj(.)54 b(If)33 b(this)h(searc)n(h)
-427 3446 y(fails,)g(a)f(searc)n(h)e(is)i(then)g(made)g(for)g(one)f
-(with)h(the)h(domain)e Ft(")p Fj(PIXEL)p Ft(")p Fj(.)51
-b(If)34 b(this)f(also)f(fails,)i(then)f(an)n(y)427 3545
-y(2-dimensional)27 b(co)r(ordinate)f(system)h(is)h(returned)f(as)g
-(part)g(of)h(the)g Ft(")p Fj(result)p Ft(")e Fj(F)-7
-b(rameSet.)427 3662 y(Only)26 b(if)h(no)g(2-dimensional)e(co)r
-(ordinate)g(systems)h(can)g(b)r(e)h(reac)n(hed)e(b)n(y)h(applying)g
-(built-in)h(con)n(v)n(ersions)427 3761 y(to)h(an)n(y)f(of)g(the)h(F)-7
-b(rames)27 b(in)h(the)g(target)e(will)i(a)f(v)-5 b(alue)28
-b(of)f(AST)p Ft(__)p Fj(NULL)h(b)r(e)g(returned.)227
-3882 y Fq(result)46 b(=)i(astFindFrame\()c(target,)i(astFrame\()f(1,)i
-Ft(")p Fq(Domain=WAVELENGTH)p Ft(")c Fq(\),)k Ft("")227
-3982 y Fq(\);)427 4060 y Fj(Searc)n(hes)18 b(for)h(an)n(y)g
-(1-dimensional)f(co)r(ordinate)h(system)g(in)h(the)g(target)f(whic)n(h)
-g(has)g(the)h(domain)f Ft(")p Fj(W)-9 b(A)g(VE-)427 4160
-y(LENGTH)p Ft(")p Fj(.)227 4294 y Fq(result)46 b(=)i(astFindFrame\()c
-(target,)i(astFrame\()f(1,)i Ft("")g Fq(\),)g Ft(")p
-Fq(wavelength)p Ft(")d Fq(\);)427 4393 y Fj(This)29 b(example)f(has)g
-(exactly)h(the)g(same)f(e\013ect)h(as)f(that)h(ab)r(o)n(v)n(e.)39
-b(It)29 b(illustrates)f(the)h(equiv)-5 b(alence)29 b(of)f(the)427
-4493 y(template's)g(Domain)f(attribute)h(and)g(the)g(\014elds)f(in)h
-(the)g Ft(")p Fj(domainlist)p Ft(")f Fj(string.)227 4627
-y Fq(result)46 b(=)i(astFindFrame\()c(target,)i(astFrame\()f(1,)i
-Ft(")p Fq(MaxAxes=3)p Ft(")e Fq(\),)i Ft("")g Fq(\);)427
-4725 y Fj(This)31 b(is)f(a)g(more)g(adv)-5 b(anced)30
-b(example)g(whic)n(h)h(will)f(searc)n(h)f(for)h(an)n(y)g(co)r(ordinate)
-g(system)g(in)h(the)g(target)427 4825 y(ha)n(ving)j(1,)j(2)e(or)f(3)h
-(dimensions.)59 b(The)35 b(F)-7 b(rame)35 b(returned)f(\(as)h(part)g
-(of)g(the)g Ft(")p Fj(result)p Ft(")f Fj(F)-7 b(rameSet\))35
-b(will)427 4925 y(alw)n(a)n(ys)30 b(b)r(e)j(1-dimensional,)f(but)g
-(will)h(b)r(e)f(related)g(to)f(the)i(co)r(ordinate)e(system)h(that)g(w)
-n(as)f(found)h(b)n(y)g(a)427 5024 y(suitable)c(Mapping)f(\(e.g.)37
-b(a)27 b(P)n(ermMap\))f(whic)n(h)i(simply)g(extracts)e(the)i(\014rst)g
-(axis.)427 5141 y(If)h(w)n(e)e(had)h(w)n(an)n(ted)f(a)h(F)-7
-b(rame)27 b(represen)n(ting)f(the)j(actual)e(\(1,)h(2)f(or)g
-(3-dimensional\))g(co)r(ordinate)g(system)427 5240 y(found,)h(w)n(e)f
-(could)h(set)f(the)h(Preserv)n(eAxes)d(attribute)j(to)g(a)f(non-zero)f
-(v)-5 b(alue)27 b(in)h(the)g(template.)227 5374 y Fq(result)46
-b(=)i(astFindFrame\()c(target,)i(astSkyFrame\()e Ft(")p
-Fq(Permute=0)p Ft(")h Fq(\),)i Ft("")g Fq(\);)427 5473
-y Fj(Searc)n(hes)39 b(for)h(an)n(y)g(celestial)g(co)r(ordinate)f
-(system)h(in)h(the)g(target,)h(but)f(only)f(\014nds)h(one)f(if)h(its)g
-(axes)427 5573 y(are)35 b(in)i(the)f(con)n(v)n(en)n(tional)e
-(\(longitude,latitude\))j(order)e(and)g(ha)n(v)n(e)g(not)h(b)r(een)h(p)
-r(erm)n(uted)f(\(e.g.)62 b(with)427 5672 y(astP)n(ermAxes\).)p
-eop end
-%%Page: 227 237
-TeXDict begin 227 236 bop 3643 52 a FF(227)0 351 y Fd(Notes:)340
-634 y Fi(\017)45 b Fj(The)28 b(Mapping)f(represen)n(ted)g(b)n(y)g(the)h
-(returned)f(F)-7 b(rameSet)27 b(results)g(in)h(alignmen)n(t)f(taking)g
-(place)g(in)h(the)427 733 y(co)r(ordinate)g(system)h(sp)r(eci\014ed)g
-(b)n(y)g(the)g(AlignSystem)g(attribute)g(of)g(the)g Ft(")p
-Fj(template)p Ft(")g Fj(F)-7 b(rame.)40 b(See)29 b(the)427
-833 y(description)e(of)h(the)g(AlignSystem)g(attribute)f(for)g(further)
-h(details.)340 966 y Fi(\017)45 b Fj(Bew)n(are)24 b(of)h(setting)g(the)
-g(Domain)g(attribute)g(of)h(the)f(template)g(and)g(then)h(using)f(a)f
-Ft(")p Fj(domainlist)p Ft(")g Fj(string)427 1065 y(whic)n(h)k(do)r(es)f
-(not)h(include)g(the)g(template's)g(domain)f(\(or)g(a)h(blank)f
-(\014eld\).)38 b(If)28 b(y)n(ou)f(do)g(so,)g(no)h(co)r(ordinate)427
-1165 y(system)g(will)f(b)r(e)h(found.)340 1298 y Fi(\017)45
-b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 1397 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)-2 1559 y Fd(More)32 b(on)f(Using)h(T)-8 b(emplates)n(:)227
-1705 y Fj(A)29 b(F)-7 b(rame)27 b(\(describing)g(a)h(co)r(ordinate)f
-(system\))h(will)g(b)r(e)g(found)h(b)n(y)e(this)i(function)f(if)h
-(\(a\))f(it)g(is)g Ft(")p Fj(matc)n(hed)p Ft(")f Fj(b)n(y)227
-1805 y(the)34 b(template)f(y)n(ou)f(supply)-7 b(,)34
-b(and)f(\(b\))h(the)f(v)-5 b(alue)33 b(of)g(its)g(Domain)f(attribute)i
-(app)r(ears)d(in)i(the)h Ft(")p Fj(domainlist)p Ft(")227
-1904 y Fj(string)f(\(except)h(that)f(a)g(blank)g(\014eld)h(in)f(this)h
-(string)e(p)r(ermits)i(an)n(y)f(domain\).)53 b(A)34 b(successful)f
-(matc)n(h)g(b)n(y)g(the)227 2004 y(template)28 b(dep)r(ends)g(on)g(a)f
-(n)n(um)n(b)r(er)g(of)h(criteria,)e(as)h(outlined)h(b)r(elo)n(w:)340
-2140 y Fi(\017)45 b Fj(In)26 b(general,)f(a)h(template)g(will)g(only)g
-(matc)n(h)g(another)f(F)-7 b(rame)25 b(whic)n(h)h(b)r(elongs)f(to)h
-(the)h(same)e(class)g(as)g(the)427 2240 y(template,)35
-b(or)d(to)h(a)f(deriv)n(ed)g(\(more)g(sp)r(ecialised\))h(class.)52
-b(F)-7 b(or)32 b(example,)i(a)e(SkyF)-7 b(rame)32 b(template)h(will)427
-2340 y(matc)n(h)h(an)n(y)f(other)g(SkyF)-7 b(rame,)34
-b(but)h(will)f(not)g(matc)n(h)f(a)g(basic)h(F)-7 b(rame.)54
-b(Con)n(v)n(ersely)-7 b(,)34 b(a)f(basic)g(F)-7 b(rame)427
-2439 y(template)28 b(will)g(matc)n(h)f(an)n(y)g(class)g(of)g(F)-7
-b(rame.)340 2572 y Fi(\017)45 b Fj(The)26 b(exception)e(to)h(this)h(is)
-f(that)h(a)e(F)-7 b(rame)25 b(of)g(an)n(y)g(class)f(can)h(b)r(e)g(used)
-g(to)g(matc)n(h)g(a)g(CmpF)-7 b(rame,)26 b(if)f(that)427
-2671 y(CmpF)-7 b(rame)27 b(con)n(tains)e(a)h(F)-7 b(rame)26
-b(of)h(the)g(same)f(class)f(as)h(the)h(template.)37 b(Note)27
-b(ho)n(w)n(ev)n(er,)d(the)j(MaxAxes)427 2771 y(and)j(MinAxes)h
-(attributes)f(of)h(the)f(template)h(m)n(ust)g(b)r(e)f(set)h(to)f
-(suitable)g(v)-5 b(alues)30 b(to)h(allo)n(w)e(it)i(to)f(matc)n(h)427
-2871 y(the)e(CmpF)-7 b(rame.)36 b(That)27 b(is,)g(the)g(MinAxes)g
-(attribute)g(m)n(ust)g(b)r(e)h(less)e(than)h(or)f(equal)h(to)g(the)g(n)
-n(um)n(b)r(er)g(of)427 2970 y(axes)g(in)i(the)f(target,)g(and)f(the)i
-(MaxAxes)e(attribute)i(m)n(ust)f(b)r(e)g(greater)e(than)j(or)e(equal)g
-(to)h(the)h(n)n(um)n(b)r(er)427 3070 y(of)f(axes)e(in)i(the)g(target.)
-340 3203 y Fi(\017)45 b Fj(If)40 b(using)g(a)f(CmpF)-7
-b(rame)40 b(as)f(a)g(template)h(frame,)i(the)f(MinAxes)e(and)h(MaxAxes)
-f(for)g(the)h(template)427 3302 y(are)33 b(determined)g(b)n(y)h(the)f
-(MinAxes)h(and)f(MaxAxes)g(v)-5 b(alues)33 b(of)g(the)h(comp)r(onen)n
-(t)f(F)-7 b(rames)33 b(within)h(the)427 3402 y(template.)48
-b(So)30 b(if)i(y)n(ou)e(w)n(an)n(t)g(a)h(template)g(CmpF)-7
-b(rame)31 b(to)g(b)r(e)g(able)g(to)g(matc)n(h)g(F)-7
-b(rames)30 b(with)h(di\013eren)n(t)427 3502 y(n)n(um)n(b)r(ers)19
-b(of)g(axes,)h(then)f(y)n(ou)g(m)n(ust)g(set)g(the)g(MaxAxes)g(and/or)e
-(MinAxes)i(attributes)g(in)g(the)h(comp)r(onen)n(t)427
-3601 y(template)28 b(F)-7 b(rames,)27 b(b)r(efore)g(com)n(bining)g
-(them)i(together)d(in)n(to)i(the)g(template)f(CmpF)-7
-b(rame.)340 3734 y Fi(\017)45 b Fj(If)32 b(a)e(template)i(has)e(a)h(v)
--5 b(alue)30 b(set)h(for)g(an)n(y)f(of)h(its)g(main)g(attributes,)h
-(then)f(it)h(will)f(only)g(matc)n(h)f(F)-7 b(rames)427
-3834 y(whic)n(h)23 b(ha)n(v)n(e)e(an)h(iden)n(tical)g(v)-5
-b(alue)22 b(for)g(that)h(attribute)g(\(or)e(whic)n(h)i(can)f(b)r(e)h
-(transformed,)f(using)g(a)g(built-in)427 3933 y(con)n(v)n(ersion,)30
-b(so)g(that)h(they)g(ha)n(v)n(e)f(the)h(required)f(v)-5
-b(alue)31 b(for)f(that)h(attribute\).)48 b(If)31 b(an)n(y)f(attribute)h
-(in)g(the)427 4033 y(template)d(is)f(un-set,)g(ho)n(w)n(ev)n(er,)e
-(then)i(F)-7 b(rames)27 b(are)f(matc)n(hed)g(regardless)f(of)i(the)g(v)
--5 b(alue)27 b(they)g(ma)n(y)g(ha)n(v)n(e)427 4132 y(for)37
-b(that)h(attribute.)66 b(Y)-7 b(ou)37 b(ma)n(y)g(therefore)f(mak)n(e)g
-(a)h(template)h(more)e(or)h(less)g(sp)r(eci\014c)g(b)n(y)g(c)n(ho)r
-(osing)427 4232 y(the)h(attributes)f(for)g(whic)n(h)g(y)n(ou)g(set)g(v)
--5 b(alues.)65 b(This)38 b(requiremen)n(t)e(do)r(es)h(not)g(apply)g(to)
-g('descriptiv)n(e')427 4332 y(attributes)28 b(suc)n(h)f(as)g(titles,)h
-(lab)r(els,)g(sym)n(b)r(ols,)e(etc.)340 4464 y Fi(\017)45
-b Fj(An)22 b(imp)r(ortan)n(t)g(application)f(of)g(this)h(principle)g
-(in)n(v)n(olv)n(es)e(the)i(Domain)g(attribute.)35 b(Setting)22
-b(the)g(Domain)427 4564 y(attribute)j(of)g(the)h(template)f(has)f(the)i
-(e\013ect)f(of)g(restricting)f(the)i(searc)n(h)d(to)i(a)f(particular)g
-(t)n(yp)r(e)h(of)g(F)-7 b(rame)427 4664 y(\(with)24 b(the)g(domain)e(y)
-n(ou)g(sp)r(ecify\).)36 b(Con)n(v)n(ersely)-7 b(,)22
-b(if)i(the)f(Domain)g(attribute)g(is)g(not)g(set)g(in)h(the)f
-(template,)427 4763 y(then)h(the)f(domain)g(of)f(the)i(F)-7
-b(rame)22 b(found)h(is)g(not)g(relev)-5 b(an)n(t,)23
-b(so)g(all)f(F)-7 b(rames)22 b(are)g(searc)n(hed.)34
-b(Note)23 b(that)g(the)427 4863 y Ft(")p Fj(domainlist)p
-Ft(")h Fj(string)g(pro)n(vides)g(an)g(alternativ)n(e)g(w)n(a)n(y)g(of)h
-(restricting)f(the)h(searc)n(h)e(in)i(the)h(same)e(manner,)427
-4963 y(but)30 b(is)e(a)h(more)f(con)n(v)n(enien)n(t)f(in)n(terface)h
-(if)i(y)n(ou)e(wish)g(to)h(searc)n(h)e(automatically)h(for)g(another)g
-(domain)g(if)427 5062 y(the)g(\014rst)g(searc)n(h)e(fails.)340
-5195 y Fi(\017)45 b Fj(Normally)-7 b(,)29 b(a)g(template)h(will)f(only)
-g(matc)n(h)g(a)g(F)-7 b(rame)29 b(whic)n(h)g(has)g(the)g(same)g(n)n(um)
-n(b)r(er)g(of)g(axes)f(as)h(itself.)427 5295 y(Ho)n(w)n(ev)n(er,)i(for)
-g(some)g(classes)f(of)h(template,)i(this)f(default)f(b)r(eha)n(viour)g
-(ma)n(y)f(b)r(e)i(c)n(hanged)f(b)n(y)g(means)g(of)427
-5394 y(the)f(MinAxes,)g(MaxAxes)e(and)h(Matc)n(hEnd)g(attributes.)42
-b(In)29 b(addition,)h(the)f(b)r(eha)n(viour)f(of)h(a)g(template)427
-5494 y(ma)n(y)38 b(b)r(e)h(in\015uenced)g(b)n(y)f(its)h(P)n(erm)n(ute)e
-(and)i(Preserv)n(eAxes)d(attributes,)41 b(whic)n(h)e(con)n(trol)e
-(whether)h(it)427 5593 y(matc)n(hes)30 b(F)-7 b(rames)30
-b(whose)g(axes)f(ha)n(v)n(e)h(b)r(een)g(p)r(erm)n(uted,)i(and)e
-(whether)h(this)g(p)r(erm)n(utation)f(is)g(retained)427
-5693 y(in)k(the)f(F)-7 b(rame)33 b(whic)n(h)g(is)h(returned)e(\(as)h
-(opp)r(osed)g(to)g(returning)g(the)g(axes)g(in)g(the)h(order)e(sp)r
-(eci\014ed)h(in)p eop end
-%%Page: 228 238
-TeXDict begin 228 237 bop 0 52 a FF(228)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)427 351 y Fj(the)h(template,)h(whic)
-n(h)f(is)f(the)h(default)g(b)r(eha)n(viour\).)45 b(Y)-7
-b(ou)31 b(should)g(consult)f(the)h(descriptions)f(of)h(these)427
-451 y(attributes)d(for)f(details)g(of)h(this)g(more)e(adv)-5
-b(anced)28 b(use)f(of)h(templates.)p 0 656 3780 12 v
-0 788 a Fz(astFitsChan)707 b Fe(Create)37 b(a)h(FitsChan)705
-b Fz(astFitsChan)0 959 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(FitsChan)h(and)f(optionally)g
-(initialises)h(its)f(attributes.)227 1087 y(A)33 b(FitsChan)e(is)h(a)g
-(sp)r(ecialised)f(form)h(of)g(Channel)f(whic)n(h)h(supp)r(orts)g(I/O)f
-(op)r(erations)f(in)n(v)n(olving)h(the)h(use)g(of)227
-1186 y(FITS)g(\(Flexible)h(Image)e(T)-7 b(ransp)r(ort)30
-b(System\))i(header)f(cards.)49 b(W)-7 b(riting)32 b(an)f(Ob)5
-b(ject)32 b(to)f(a)h(FitsChan)g(\(using)227 1286 y(astW)-7
-b(rite\))31 b(will,)h(if)g(the)f(Ob)5 b(ject)31 b(is)g(suitable,)h
-(generate)d(a)i(description)f(of)h(that)g(Ob)5 b(ject)31
-b(comp)r(osed)f(of)h(FITS)227 1386 y(header)h(cards,)i(and)e(reading)g
-(from)h(a)f(FitsChan)i(will)f(create)f(a)g(new)h(Ob)5
-b(ject)33 b(from)g(its)g(FITS)g(header)f(card)227 1485
-y(description.)227 1613 y(While)k(a)e(FitsChan)h(is)f(activ)n(e,)i(it)f
-(represen)n(ts)f(a)g(bu\013er)h(whic)n(h)g(ma)n(y)f(con)n(tain)g(zero)f
-(or)h(more)g(80-c)n(haracter)227 1712 y Ft(")p Fj(header)29
-b(cards)p Ft(")f Fj(conforming)g(to)i(FITS)f(con)n(v)n(en)n(tions.)41
-b(An)n(y)30 b(sequence)f(of)h(FITS-conforming)e(header)h(cards)227
-1812 y(ma)n(y)f(b)r(e)g(stored,)g(apart)f(from)h(the)h
-Ft(")p Fj(END)p Ft(")e Fj(card)h(whose)f(existence)h(is)g(merely)g
-(implied.)39 b(The)29 b(cards)e(ma)n(y)g(b)r(e)227 1912
-y(accessed)g(in)g(an)n(y)g(order)f(b)n(y)h(using)g(the)h(FitsChan's)f
-(in)n(teger)g(Card)g(attribute,)g(whic)n(h)h(iden)n(ti\014es)f(a)g
-Ft(")p Fj(curren)n(t)p Ft(")227 2011 y Fj(card,)g(to)h(whic)n(h)f
-(subsequen)n(t)h(op)r(erations)e(apply)-7 b(.)37 b(Searc)n(hes)26
-b(based)h(on)h(k)n(eyw)n(ord)d(ma)n(y)i(b)r(e)h(p)r(erformed)g(\(using)
-227 2111 y(astFindFits\),)k(new)e(cards)f(ma)n(y)g(b)r(e)i(inserted)f
-(\(astPutFits,)h(astPutCards,)e(astSetFits)p Fl(<)p Fj(X)p
-Fl(>)p Fj(\))h(and)g(existing)227 2210 y(ones)d(ma)n(y)g(b)r(e)h
-(deleted)g(\(astDelFits\))h(or)d(c)n(hanged)h(\(astSetFits)p
-Fl(<)p Fj(X)p Fl(>)p Fj(\).)227 2338 y(When)37 b(y)n(ou)f(create)g(a)g
-(FitsChan,)j(y)n(ou)d(ha)n(v)n(e)g(the)h(option)f(of)h(sp)r(ecifying)g
-Ft(")p Fj(source)p Ft(")d Fj(and)j Ft(")p Fj(sink)p Ft(")e
-Fj(functions)227 2437 y(whic)n(h)26 b(connect)g(it)h(to)f(external)f
-(data)h(stores)f(b)n(y)h(reading)f(and)h(writing)g(FITS)g(header)g
-(cards.)35 b(If)26 b(y)n(ou)g(pro)n(vide)227 2537 y(a)h(source)f
-(function,)j(it)e(is)h(used)f(to)g(\014ll)h(the)g(FitsChan)f(with)h
-(header)f(cards)f(when)i(it)g(is)f(accessed)f(for)h(the)h(\014rst)227
-2637 y(time.)56 b(If)34 b(y)n(ou)f(do)h(not)f(pro)n(vide)g(a)g(source)g
-(function,)j(the)e(FitsChan)g(remains)e(empt)n(y)i(un)n(til)g(y)n(ou)f
-(explicitly)227 2736 y(en)n(ter)25 b(data)g(in)n(to)h(it)g(\(e.g.)36
-b(using)25 b(astPutCards,)f(astPutFits)i(or)e(astW)-7
-b(rite\).)36 b(If)26 b(y)n(ou)f(pro)n(vide)f(a)i(sink)f(function,)227
-2836 y(it)38 b(is)f(used)g(to)h(deliv)n(er)e(an)n(y)h(remaining)f(con)n
-(ten)n(ts)h(of)g(a)g(FitsChan)g(to)g(an)g(external)g(data)f(store)h
-(when)g(the)227 2936 y(FitsChan)30 b(is)f(deleted.)44
-b(If)30 b(y)n(ou)e(do)i(not)f(pro)n(vide)g(a)g(sink)g(function,)i(an)n
-(y)e(header)f(cards)h(remaining)f(when)i(the)227 3035
-y(FitsChan)25 b(is)f(deleted)h(will)g(b)r(e)g(lost,)g(so)f(y)n(ou)f
-(should)i(arrange)d(to)i(extract)g(them)h(\014rst)f(if)i(necessary)c
-(\(e.g.)36 b(using)227 3135 y(astFindFits)28 b(or)f(astRead\).)227
-3262 y(Co)r(ordinate)i(system)g(information)g(ma)n(y)g(b)r(e)h(describ)
-r(ed)g(using)f(FITS)h(header)f(cards)f(using)i(sev)n(eral)d(di\013eren)
-n(t)227 3362 y(con)n(v)n(en)n(tions,)h(termed)h Ft(")p
-Fj(enco)r(dings)p Ft(")p Fj(.)39 b(When)29 b(an)g(AST)g(Ob)5
-b(ject)29 b(is)f(written)h(to)g(\(or)f(read)g(from\))h(a)f(FitsChan,)
-227 3462 y(the)22 b(v)-5 b(alue)22 b(of)g(the)g(FitsChan's)g(Enco)r
-(ding)f(attribute)g(determines)h(ho)n(w)f(the)h(Ob)5
-b(ject)22 b(is)g(con)n(v)n(erted)e(to)i(\(or)f(from\))227
-3561 y(a)31 b(description)g(in)n(v)n(olving)g(FITS)g(header)g(cards.)48
-b(In)32 b(general,)f(di\013eren)n(t)h(enco)r(dings)f(will)g(result)h
-(in)f(di\013eren)n(t)227 3661 y(sets)24 b(of)f(header)g(cards)g(to)g
-(describ)r(e)h(the)g(same)f(Ob)5 b(ject.)35 b(Examples)23
-b(of)g(enco)r(dings)g(include)h(the)h(DSS)f(enco)r(ding)227
-3760 y(\(based)35 b(on)g(con)n(v)n(en)n(tions)f(used)h(b)n(y)g(the)h
-(STScI)g(Digitised)f(Sky)g(Surv)n(ey)g(data\),)i(the)f(FITS-W)n(CS)f
-(enco)r(ding)227 3860 y(\(based)30 b(on)g(a)g(prop)r(osed)f(FITS)h
-(standard\))g(and)g(the)g(NA)-7 b(TIVE)31 b(enco)r(ding)e(\(a)h(near)f
-(loss-less)g(w)n(a)n(y)g(of)h(storing)227 3960 y(AST)e(Ob)5
-b(jects)27 b(in)h(FITS)g(headers\).)227 4087 y(The)e(a)n(v)-5
-b(ailable)25 b(enco)r(dings)g(di\013er)h(in)g(the)g(range)f(of)h(Ob)5
-b(jects)25 b(they)h(can)g(represen)n(t,)f(in)h(the)g(n)n(um)n(b)r(er)g
-(of)g(Ob)5 b(ject)227 4187 y(descriptions)31 b(that)h(can)g(co)r(exist)
-f(in)h(the)g(same)g(FitsChan,)h(and)e(in)h(their)g(accessibilit)n(y)f
-(to)h(other)f(\(external\))227 4286 y(astronom)n(y)36
-b(applications)g(\(see)i(the)f(Enco)r(ding)g(attribute)h(for)f
-(details\).)66 b(Enco)r(dings)36 b(are)h(not)g(necessarily)227
-4386 y(m)n(utually)28 b(exclusiv)n(e)g(and)g(it)h(ma)n(y)e(sometimes)h
-(b)r(e)h(p)r(ossible)f(to)g(describ)r(e)g(the)g(same)g(Ob)5
-b(ject)28 b(in)h(sev)n(eral)d(w)n(a)n(ys)227 4486 y(within)j(a)e
-(particular)f(set)i(of)f(FITS)h(header)f(cards)f(b)n(y)i(using)f(sev)n
-(eral)f(di\013eren)n(t)h(enco)r(dings.)227 4613 y(The)38
-b(detailed)f(b)r(eha)n(viour)g(of)g(astRead)g(and)g(astW)-7
-b(rite,)40 b(when)e(used)f(with)h(a)f(FitsChan,)j(dep)r(ends)e(on)f
-(the)227 4713 y(enco)r(ding)28 b(in)h(use.)39 b(In)29
-b(general,)e(ho)n(w)n(ev)n(er,)f(all)i(use)h(of)f(astRead)g(is)g
-(destructiv)n(e,)g(so)g(that)g(FITS)h(header)f(cards)227
-4812 y(are)20 b(consumed)g(in)g(the)h(pro)r(cess)e(of)h(reading)g(an)g
-(Ob)5 b(ject,)21 b(and)f(are)g(remo)n(v)n(ed)f(from)h(the)g(FitsChan)h
-(\(this)g(deletion)227 4912 y(can)27 b(b)r(e)h(prev)n(en)n(ted)f(for)g
-(sp)r(eci\014c)h(cards)f(b)n(y)g(calling)g(the)h(astRetainFits)f
-(function\).)227 5040 y(If)i(the)f(enco)r(ding)f(in)h(use)g(allo)n(ws)f
-(only)g(a)h(single)f(Ob)5 b(ject)28 b(description)f(to)h(b)r(e)g
-(stored)f(in)h(a)g(FitsChan)g(\(e.g.)37 b(the)227 5139
-y(DSS,)27 b(FITS-W)n(CS)f(and)f(FITS-IRAF)i(enco)r(dings\),)f(then)g
-(write)g(op)r(erations)e(using)h(astW)-7 b(rite)26 b(will)g(o)n(v)n
-(er-write)227 5239 y(an)n(y)37 b(existing)h(Ob)5 b(ject)37
-b(description)g(using)h(that)g(enco)r(ding.)66 b(Otherwise)37
-b(\(e.g.)67 b(the)39 b(NA)-7 b(TIVE)38 b(enco)r(ding\),)227
-5338 y(m)n(ultiple)i(Ob)5 b(ject)39 b(descriptions)g(are)f(written)i
-(sequen)n(tially)e(and)h(ma)n(y)g(later)f(b)r(e)i(read)f(bac)n(k)f(in)i
-(the)f(same)227 5438 y(sequence.)0 5593 y Fd(Synopsis:)121
-b Ft(AstFitsChan)39 b Fi(\003)p Ft(astFitsChan\()f(const)k(char)f
-Fi(\003)p Ft(\()p Fi(\003)i Ft(source\)\()d(void)i(\),)h(void)f(\()p
-Fi(\003)g Ft(sink\)\()f(const)227 5693 y(char)h Fi(\003)h
-Ft(\),)g(const)f(char)g Fi(\003)p Ft(options,)d(...)86
-b(\))p eop end
-%%Page: 229 239
-TeXDict begin 229 238 bop 3643 52 a FF(229)0 351 y Fd(P)m(arameters:)
-259 479 y(source)427 578 y Fj(P)n(oin)n(ter)40 b(to)h(a)f(source)g
-(function)i(whic)n(h)f(tak)n(es)f(no)h(argumen)n(ts)f(and)g(returns)h
-(a)f(p)r(oin)n(ter)h(to)g(a)g(n)n(ull-)427 678 y(terminated)29
-b(string.)41 b(This)29 b(function)h(will)f(b)r(e)h(used)f(b)n(y)g(the)g
-(FitsChan)g(to)g(obtain)g(input)h(FITS)f(header)427 778
-y(cards.)61 b(On)35 b(eac)n(h)h(in)n(v)n(o)r(cation,)g(it)g(should)g
-(read)f(the)h(next)g(input)h(card)e(from)h(some)f(external)g(source)427
-877 y(\(suc)n(h)30 b(as)f(a)h(FITS)g(\014le\),)h(and)f(return)f(a)h(p)r
-(oin)n(ter)f(to)h(the)g(\(n)n(ull-terminated\))g(con)n(ten)n(ts)f(of)h
-(the)g(card.)43 b(It)427 977 y(should)28 b(return)f(a)g(NULL)h(p)r(oin)
-n(ter)f(when)h(there)f(are)g(no)g(more)g(cards)f(to)i(b)r(e)g(read.)427
-1089 y(If)k Ft(")p Fj(source)p Ft(")d Fj(is)j(NULL,)g(the)f(FitsChan)h
-(will)g(remain)e(empt)n(y)i(un)n(til)g(cards)e(are)g(explicitly)i
-(stored)f(in)g(it)427 1188 y(\(e.g.)37 b(using)27 b(astPutCards)f(or)h
-(astPutFits\).)259 1312 y Fd(sink)427 1412 y Fj(P)n(oin)n(ter)32
-b(to)h(a)g(sink)h(function)g(that)f(tak)n(es)g(a)g(p)r(oin)n(ter)g(to)g
-(a)g(n)n(ull-terminated)g(string)g(as)g(an)g(argumen)n(t)427
-1511 y(and)h(returns)g(v)n(oid.)56 b(This)34 b(function)g(will)h(b)r(e)
-f(used)h(b)n(y)e(the)i(FitsChan)f(to)g(deliv)n(er)g(an)n(y)f(FITS)h
-(header)427 1611 y(cards)24 b(it)i(con)n(tains)e(when)i(it)f(is)g
-(\014nally)g(deleted.)37 b(On)25 b(eac)n(h)f(in)n(v)n(o)r(cation,)h(it)
-g(should)g(deliv)n(er)g(the)g(con)n(ten)n(ts)427 1710
-y(of)k(the)f(c)n(haracter)e(string)i(passed)f(to)i(it)f(as)g(a)g(FITS)g
-(header)g(card)f(to)h(some)g(external)g(data)f(store)h(\(suc)n(h)427
-1810 y(as)f(a)g(FITS)h(\014le\).)427 1922 y(If)g Ft(")p
-Fj(sink)p Ft(")f Fj(is)g(NULL,)h(the)g(con)n(ten)n(ts)f(of)h(the)g
-(FitsChan)g(will)f(not)h(b)r(e)g(written)g(out)f(when)h(it)g(is)g
-(deleted.)259 2046 y Fd(options)427 2145 y Fj(P)n(oin)n(ter)f(to)h(a)g
-(n)n(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 2245 y(assignmen)n(ts)23
-b(to)h(b)r(e)g(used)g(for)f(initialising)h(the)g(new)g(FitsChan.)36
-b(The)24 b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)f(that)427
-2345 y(for)j(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-2444 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 2568
-y Fd(...)427 2668 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 2767 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 2867 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 2966 y Fj(function\).)0 3119
-y Fd(Returned)32 b(V)-8 b(alue:)259 3247 y(astFitsChan\(\))427
-3346 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(FitsChan.)0
-3499 y Fd(Notes:)340 3773 y Fi(\017)45 b Fj(No)23 b(FITS)g
-Ft(")p Fj(END)p Ft(")g Fj(card)f(will)h(b)r(e)g(written)h(via)e(the)h
-(sink)g(function.)36 b(Y)-7 b(ou)23 b(should)g(add)f(this)i(card)e(y)n
-(ourself)427 3872 y(after)28 b(the)g(FitsChan)f(has)g(b)r(een)h
-(deleted.)340 3996 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 4096 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 4249 y Fd(Status)33
-b(Handling)n(:)227 4395 y Fj(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 4494 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fj(in)n(t)227 4594 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p
-0 4775 3780 12 v 0 4907 a Fz(astFluxF)-11 b(rame)569
-b Fe(Create)38 b(a)g(FluxF)-10 b(rame)568 b Fz(astFluxF)-11
-b(rame)0 5054 y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f
-(a)g(new)g(FluxF)-7 b(rame)28 b(and)f(optionally)g(initialises)g(its)h
-(attributes.)227 5174 y(A)c(FluxF)-7 b(rame)22 b(is)h(a)g(sp)r
-(ecialised)f(form)h(of)g(one-dimensional)e(F)-7 b(rame)23
-b(whic)n(h)g(represen)n(ts)e(v)-5 b(arious)22 b(systems)h(used)227
-5274 y(to)36 b(represen)n(t)f(the)h(signal)f(lev)n(el)g(in)i(an)e
-(observ)-5 b(ation.)61 b(The)36 b(particular)e(co)r(ordinate)h(system)h
-(to)g(b)r(e)g(used)g(is)227 5374 y(sp)r(eci\014ed)31
-b(b)n(y)f(setting)h(the)g(FluxF)-7 b(rame's)30 b(System)h(attribute)g
-(quali\014ed,)g(as)f(necessary)-7 b(,)29 b(b)n(y)i(other)f(attributes)
-227 5473 y(suc)n(h)e(as)e(the)i(units,)h(etc)e(\(see)h(the)g
-(description)f(of)g(the)h(System)g(attribute)g(for)f(details\).)227
-5593 y(All)i(\015ux)f(v)-5 b(alues)28 b(are)f(assumed)g(to)h(b)r(e)h
-(measured)e(at)h(the)h(same)e(frequency)h(or)f(w)n(a)n(v)n(elength)f
-(\(as)i(giv)n(en)f(b)n(y)h(the)227 5693 y(Sp)r(ecV)-7
-b(al)28 b(attribute\).)38 b(Th)n(us)27 b(this)h(class)e(is)i(more)f
-(appropriate)f(for)h(use)g(with)h(images)f(rather)f(than)i(sp)r(ectra.)
-p eop end
-%%Page: 230 240
-TeXDict begin 230 239 bop 0 52 a FF(230)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Synopsis:)121
-b Ft(AstFluxFrame)38 b Fi(\003)p Ft(astFluxFrame\()g(double)j(specval,)
-g(AstSpecFrame)d Fi(\003)p Ft(specfrm,)i(const)i(char)227
-451 y Fi(\003)p Ft(options,)e(...)86 b(\))0 598 y Fd(P)m(arameters:)259
-732 y(sp)s(ecv)-5 b(al)427 831 y Fj(The)37 b(sp)r(ectral)e(v)-5
-b(alue)36 b(to)g(whic)n(h)g(the)h(\015ux)f(v)-5 b(alues)36
-b(refer,)i(giv)n(en)d(in)i(the)f(sp)r(ectral)g(co)r(ordinate)f(system)
-427 931 y(sp)r(eci\014ed)28 b(b)n(y)e Ft(")p Fj(sp)r(ecfrm)p
-Ft(")p Fj(.)36 b(The)28 b(v)-5 b(alue)27 b(supplied)g(for)g(the)g
-Ft(")p Fj(sp)r(ecv)-5 b(al)p Ft(")26 b Fj(parameter)g(b)r(ecomes)h(the)
-g(default)427 1030 y(v)-5 b(alue)39 b(for)f(the)h(Sp)r(ecV)-7
-b(al)39 b(attribute.)71 b(A)39 b(v)-5 b(alue)38 b(of)h(AST)p
-Ft(__)p Fj(BAD)g(ma)n(y)f(b)r(e)h(supplied)g(if)g(the)g(sp)r(ectral)427
-1130 y(p)r(osition)27 b(is)h(unkno)n(wn,)e(but)i(this)g(ma)n(y)e
-(result)h(in)h(it)g(not)f(b)r(eing)g(p)r(ossible)g(for)g(the)h(astCon)n
-(v)n(ert)d(function)427 1230 y(to)j(determine)f(a)h(Mapping)f(b)r(et)n
-(w)n(een)g(the)h(new)g(FluxF)-7 b(rame)27 b(and)h(some)f(other)g(FluxF)
--7 b(rame.)259 1360 y Fd(sp)s(ecfrm)427 1460 y Fj(A)30
-b(p)r(oin)n(ter)g(to)f(a)g(Sp)r(ecF)-7 b(rame)30 b(describing)f(the)h
-(sp)r(ectral)f(co)r(ordinate)f(system)i(in)g(whic)n(h)g(the)g
-Ft(")p Fj(sp)r(ecv)-5 b(al)p Ft(")427 1559 y Fj(parameter)32
-b(is)g(giv)n(en.)52 b(A)34 b(deep)f(cop)n(y)f(of)h(this)g(ob)5
-b(ject)33 b(is)f(tak)n(en,)i(so)e(an)n(y)g(subsequen)n(t)h(c)n(hanges)e
-(to)i(the)427 1659 y(Sp)r(ecF)-7 b(rame)32 b(using)g(the)g(supplied)g
-(p)r(oin)n(ter)g(will)g(ha)n(v)n(e)f(no)h(e\013ect)g(on)g(the)g(new)g
-(FluxF)-7 b(rame.)50 b(A)32 b(NULL)427 1758 y(p)r(oin)n(ter)27
-b(can)h(b)r(e)g(supplied)g(if)g(AST)p Ft(__)p Fj(BAD)f(is)h(supplied)g
-(for)f Ft(")p Fj(sp)r(ecv)-5 b(al)p Ft(")p Fj(.)259 1889
-y Fd(options)427 1988 y Fj(P)n(oin)n(ter)27 b(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 2088 y(assignmen)n(ts)19
-b(to)h(b)r(e)g(used)g(for)f(initialising)h(the)g(new)g(FluxF)-7
-b(rame.)34 b(The)20 b(syn)n(tax)e(used)i(is)g(iden)n(tical)g(to)f(that)
-427 2188 y(for)26 b(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-2287 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)35 b(If)28
-b(no)g(initialisation)f(is)g(required,)g(a)g(zero-length)f(string)h(ma)
-n(y)g(b)r(e)h(supplied.)259 2418 y Fd(...)427 2517 y
-Fj(If)38 b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 2617 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 2716 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 2816 y Fj(function\).)0
-2975 y Fd(Returned)32 b(V)-8 b(alue:)259 3109 y(astFluxF)g(rame\(\))427
-3209 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(FluxF)-7
-b(rame.)0 3368 y Fd(Notes:)340 3648 y Fi(\017)45 b Fj(When)34
-b(con)n(v)n(ersion)d(b)r(et)n(w)n(een)i(t)n(w)n(o)g(FluxF)-7
-b(rames)32 b(is)h(requested)g(\(as)g(when)g(supplying)g(FluxF)-7
-b(rames)33 b(to)427 3748 y(astCon)n(v)n(ert\),)21 b(accoun)n(t)g(will)g
-(b)r(e)h(tak)n(en)e(of)i(the)f(nature)g(of)g(the)h(\015ux)f(co)r
-(ordinate)g(systems)f(they)i(represen)n(t,)427 3847 y(together)40
-b(with)h(an)n(y)f(qualifying)g(attribute)h(v)-5 b(alues,)43
-b(including)e(the)g(AlignSystem)g(attribute.)76 b(The)427
-3947 y(results)39 b(will)h(therefore)e(fully)i(re\015ect)f(the)g
-(relationship)g(b)r(et)n(w)n(een)g(p)r(ositions)g(measured)f(in)i(the)f
-(t)n(w)n(o)427 4047 y(systems.)55 b(In)33 b(addition,)i(an)n(y)e
-(di\013erence)h(in)g(the)g(Unit)g(attributes)f(of)h(the)g(t)n(w)n(o)f
-(systems)g(will)h(also)e(b)r(e)427 4146 y(tak)n(en)27
-b(in)n(to)h(accoun)n(t.)340 4276 y Fi(\017)45 b Fj(A)35
-b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 4376 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p 0 4570 3780 12 v 0 4701 a Fz(astF)-11 b(ormat)779
-4702 y Fe(F)h(ormat)37 b(a)i(co)s(ordinate)d(v)-7 b(alue)39
-b(for)f(a)g(F)-10 b(rame)39 b(axis)3184 4701 y Fz(astF)-11
-b(ormat)0 4867 y Fd(Description:)44 b Fj(This)32 b(function)g(returns)g
-(a)f(p)r(oin)n(ter)g(to)h(a)f(string)g(con)n(taining)g(the)h(formatted)
-g(\(c)n(haracter\))e(v)n(ersion)227 4967 y(of)38 b(a)g(co)r(ordinate)f
-(v)-5 b(alue)38 b(for)g(a)g(F)-7 b(rame)37 b(axis.)68
-b(The)39 b(formatting)e(applied)h(is)g(determined)h(b)n(y)f(the)g(F)-7
-b(rame's)227 5066 y(attributes)36 b(and,)h(in)e(particular,)h(b)n(y)f
-(an)n(y)g(F)-7 b(ormat)35 b(attribute)g(string)g(that)g(has)g(b)r(een)h
-(set)f(for)g(the)h(axis.)59 b(A)227 5166 y(suitable)28
-b(default)g(format)f(\(based)g(on)h(the)g(Digits)f(attribute)h(v)-5
-b(alue\))28 b(will)g(b)r(e)g(applied)f(if)h(necessary)-7
-b(.)0 5313 y Fd(Synopsis:)121 b Ft(const)41 b(char)h
-Fi(\003)p Ft(astFormat\()d(AstFrame)i Fi(\003)p Ft(this,)g(int)h(axis,)
-f(double)h(value)f(\))0 5460 y Fd(P)m(arameters:)259
-5593 y(this)427 5693 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)p eop end
-%%Page: 231 241
-TeXDict begin 231 240 bop 3643 52 a FF(231)259 351 y
-Fd(axis)427 451 y Fj(The)23 b(n)n(um)n(b)r(er)g(of)f(the)h(F)-7
-b(rame)22 b(axis)g(for)h(whic)n(h)f(formatting)g(is)h(to)g(b)r(e)g(p)r
-(erformed)f(\(axis)g(n)n(um)n(b)r(ering)g(starts)427
-551 y(at)28 b(1)f(for)g(the)h(\014rst)f(axis\).)259 680
-y Fd(v)-5 b(alue)427 779 y Fj(The)28 b(co)r(ordinate)e(v)-5
-b(alue)28 b(to)f(b)r(e)h(formatted.)0 937 y Fd(Returned)k(V)-8
-b(alue:)259 1070 y(astF)g(ormat\(\))427 1169 y Fj(A)28
-b(p)r(oin)n(ter)f(to)h(a)f(n)n(ull-terminated)g(string)g(con)n(taining)
-g(the)h(formatted)f(v)-5 b(alue.)0 1327 y Fd(Notes:)340
-1606 y Fi(\017)45 b Fj(The)36 b(returned)g(p)r(oin)n(ter)g(is)g(guaran)
-n(teed)e(to)i(remain)g(v)-5 b(alid)36 b(and)g(the)g(string)g(to)g(whic)
-n(h)g(it)g(p)r(oin)n(ts)g(will)427 1706 y(not)c(b)r(e)g(o)n(v)n
-(er-written)e(for)i(a)f(total)h(of)g(50)f(successiv)n(e)f(in)n(v)n(o)r
-(cations)g(of)i(this)g(function.)51 b(After)32 b(this,)h(the)427
-1805 y(memory)27 b(con)n(taining)f(the)i(string)f(ma)n(y)f(b)r(e)i
-(re-used,)e(so)h(a)g(cop)n(y)f(of)i(the)f(string)g(should)g(b)r(e)h
-(made)f(if)h(it)g(is)427 1905 y(needed)g(for)f(longer)f(than)i(this.)
-340 2034 y Fi(\017)45 b Fj(A)23 b(formatted)g(v)-5 b(alue)23
-b(ma)n(y)f(b)r(e)h(con)n(v)n(erted)e(bac)n(k)h(in)n(to)h(a)f(n)n
-(umerical)g(\(double\))h(v)-5 b(alue)23 b(using)f(astUnformat.)340
-2163 y Fi(\017)45 b Fj(A)26 b(NULL)g(p)r(oin)n(ter)e(will)i(b)r(e)f
-(returned)g(if)h(this)g(function)f(is)h(in)n(v)n(ok)n(ed)d(with)j(the)g
-(AST)f(error)f(status)h(set,)g(or)427 2263 y(if)j(it)g(should)g(fail)f
-(for)h(an)n(y)e(reason.)p 0 2454 3780 12 v 0 2585 a Fz(astF)-11
-b(rame)1492 2584 y Fe(Create)37 b(a)i(F)-10 b(rame)3242
-2585 y Fz(astF)f(rame)0 2743 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(F)-7 b(rame)27 b(and)h(optionally)f
-(initialises)g(its)h(attributes.)227 2865 y(A)c(F)-7
-b(rame)24 b(is)f(used)h(to)g(represen)n(t)e(a)i(co)r(ordinate)e
-(system.)35 b(It)25 b(do)r(es)e(this)h(in)g(rather)f(the)h(same)f(w)n
-(a)n(y)g(that)h(a)f(frame)227 2965 y(around)29 b(a)g(graph)f(describ)r
-(es)h(the)h(co)r(ordinate)e(space)h(in)h(whic)n(h)f(data)g(are)g
-(plotted.)43 b(Consequen)n(tly)-7 b(,)29 b(a)g(F)-7 b(rame)227
-3065 y(has)34 b(a)f(Title)i(\(string\))f(attribute,)i(whic)n(h)e
-(describ)r(es)f(the)h(co)r(ordinate)f(space,)i(and)f(con)n(tains)f
-(axes)g(whic)n(h)h(in)227 3164 y(turn)26 b(hold)g(information)f(suc)n
-(h)h(as)f(Lab)r(el)g(and)h(Units)h(strings)d(whic)n(h)i(are)f(used)h
-(for)f(lab)r(elling)h(\(e.g.\))36 b(graphical)227 3264
-y(output.)i(In)27 b(general,)g(ho)n(w)n(ev)n(er,)e(the)j(n)n(um)n(b)r
-(er)g(of)f(axes)g(is)g(not)h(restricted)f(to)g(t)n(w)n(o.)227
-3386 y(F)-7 b(unctions)24 b(are)f(a)n(v)-5 b(ailable)23
-b(for)g(con)n(v)n(erting)f(F)-7 b(rame)24 b(co)r(ordinate)e(v)-5
-b(alues)24 b(in)n(to)g(a)f(form)h(suitable)f(for)h(displa)n(y)-7
-b(,)24 b(and)227 3486 y(also)j(for)g(calculating)g(distances)g(and)g
-(o\013sets)g(b)r(et)n(w)n(een)h(p)r(ositions)f(within)h(the)g(F)-7
-b(rame.)227 3609 y(F)g(rames)27 b(ma)n(y)g(also)f(con)n(tain)h(kno)n
-(wledge)g(of)g(ho)n(w)g(to)h(transform)e(to)i(and)f(from)g(related)g
-(co)r(ordinate)g(systems.)0 3754 y Fd(Synopsis:)121 b
-Ft(AstFrame)40 b Fi(\003)p Ft(astFrame\()g(int)i(naxes,)f(const)g(char)
-h Fi(\003)p Ft(options,)e(...)86 b(\))0 3900 y Fd(P)m(arameters:)259
-4032 y(naxes)427 4132 y Fj(The)27 b(n)n(um)n(b)r(er)f(of)h(F)-7
-b(rame)26 b(axes)g(\(i.e.)37 b(the)27 b(n)n(um)n(b)r(er)f(of)h
-(dimensions)f(of)g(the)h(co)r(ordinate)f(space)g(whic)n(h)g(the)427
-4232 y(F)-7 b(rame)27 b(describ)r(es\).)259 4361 y Fd(options)427
-4460 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-4560 y(assignmen)n(ts)i(to)h(b)r(e)g(used)g(for)f(initialising)h(the)g
-(new)g(F)-7 b(rame.)46 b(The)31 b(syn)n(tax)f(used)h(is)g(iden)n(tical)
-g(to)f(that)427 4660 y(for)c(the)h(astSet)g(function)g(and)g(ma)n(y)f
-(include)h Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g
-(iden)n(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-4759 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)35 b(If)28
-b(no)g(initialisation)f(is)g(required,)g(a)g(zero-length)f(string)h(ma)
-n(y)g(b)r(e)h(supplied.)259 4888 y Fd(...)427 4988 y
-Fj(If)38 b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 5087 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 5187 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 5287 y Fj(function\).)0
-5445 y Fd(Returned)32 b(V)-8 b(alue:)259 5577 y(astF)g(rame\(\))427
-5677 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(F)-7
-b(rame.)p eop end
-%%Page: 232 242
-TeXDict begin 232 241 bop 0 52 a FF(232)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Examples:)227
-494 y Fq(frame)47 b(=)g(astFrame\()e(2,)j Ft(")p Fq(Title=Energy)c
-(Spectrum:)93 b(Plot)46 b(\045d)p Ft(")p Fq(,)h(n)g(\);)427
-593 y Fj(Creates)31 b(a)g(new)h(2-dimensional)e(F)-7
-b(rame)31 b(and)h(initialises)f(its)h(Title)g(attribute)g(to)g(the)g
-(string)f Ft(")p Fj(Energy)427 692 y(Sp)r(ectrum:)38
-b(Plot)27 b Fl(<)p Fj(n)p Fl(>)p Ft(")p Fj(,)f(where)h
-Fl(<)p Fj(n)p Fl(>)g Fj(tak)n(es)g(the)h(v)-5 b(alue)27
-b(of)h(the)g(in)n(t)g(v)-5 b(ariable)26 b Ft(")p Fj(n)p
-Ft(")p Fj(.)227 829 y Fq(frame)47 b(=)g(astFrame\()e(2,)j
-Ft(")p Fq(Label\(1\)=Energy,)42 b(Label\(2\)=Response)p
-Ft(")h Fq(\);)427 927 y Fj(Creates)26 b(a)g(new)h(2-dimensional)e(F)-7
-b(rame)26 b(and)g(initialises)h(its)f(axis)g(Lab)r(el)h(attributes)f
-(to)h(suitable)f(string)427 1027 y(v)-5 b(alues.)0 1194
-y Fd(Notes:)340 1482 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 1582 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 1786 3780 12 v 0 1917
-a Fz(astF)-11 b(rameSet)1411 1916 y Fe(Create)37 b(a)i(F)-10
-b(rameSet)3053 1917 y Fz(astF)f(rameSet)0 2088 y Fd(Description:)44
-b Fj(This)28 b(function)g(creates)f(a)g(new)g(F)-7 b(rameSet)28
-b(and)f(optionally)g(initialises)g(its)h(attributes.)227
-2215 y(A)23 b(F)-7 b(rameSet)23 b(consists)e(of)i(a)f(set)h(of)f(one)h
-(or)e(more)h(F)-7 b(rames)22 b(\(whic)n(h)h(describ)r(e)f(co)r
-(ordinate)f(systems\),)j(connected)227 2315 y(together)j(b)n(y)g
-(Mappings)f(\(whic)n(h)i(describ)r(e)e(ho)n(w)h(the)h(co)r(ordinate)e
-(systems)g(are)h(in)n(ter-related\).)35 b(A)28 b(F)-7
-b(rameSet)227 2414 y(mak)n(es)28 b(it)i(p)r(ossible)e(to)h(obtain)g(a)f
-(Mapping)h(b)r(et)n(w)n(een)g(an)n(y)f(pair)g(of)h(these)g(F)-7
-b(rames)28 b(\(i.e.)41 b(to)29 b(con)n(v)n(ert)f(b)r(et)n(w)n(een)227
-2514 y(an)n(y)e(of)g(the)g(co)r(ordinate)f(systems)h(whic)n(h)g(it)g
-(describ)r(es\).)36 b(The)26 b(individual)h(F)-7 b(rames)25
-b(are)g(iden)n(ti\014ed)h(within)h(the)227 2613 y(F)-7
-b(rameSet)34 b(b)n(y)g(an)f(in)n(teger)g(index,)j(with)e(F)-7
-b(rames)34 b(b)r(eing)g(n)n(um)n(b)r(ered)f(consecutiv)n(ely)g(from)h
-(one)f(as)g(they)i(are)227 2713 y(added)28 b(to)f(the)h(F)-7
-b(rameSet.)227 2840 y(Ev)n(ery)29 b(F)-7 b(rameSet)30
-b(has)f(a)h Ft(")p Fj(base)p Ft(")e Fj(F)-7 b(rame)30
-b(and)g(a)g Ft(")p Fj(curren)n(t)p Ft(")e Fj(F)-7 b(rame)30
-b(\(whic)n(h)g(are)f(allo)n(w)n(ed)g(to)h(b)r(e)g(the)h(same\).)227
-2940 y(An)n(y)k(of)g(the)g(F)-7 b(rames)35 b(ma)n(y)f(b)r(e)h
-(nominated)g(to)g(hold)f(these)h(p)r(ositions,)i(and)e(the)g(c)n(hoice)
-f(is)h(determined)g(b)n(y)227 3039 y(the)d(v)-5 b(alues)31
-b(of)h(the)g(F)-7 b(rameSet's)31 b(Base)f(and)i(Curren)n(t)e
-(attributes,)j(whic)n(h)e(hold)h(the)f(indices)h(of)f(the)h(relev)-5
-b(an)n(t)227 3139 y(F)e(rames.)35 b(By)25 b(default,)h(the)f(\014rst)f
-(F)-7 b(rame)25 b(added)f(to)h(a)f(F)-7 b(rameSet)25
-b(is)f(its)h(base)f(F)-7 b(rame,)25 b(and)g(the)g(last)f(one)h(added)
-227 3239 y(is)j(its)g(curren)n(t)e(F)-7 b(rame.)227 3366
-y(The)36 b(base)f(F)-7 b(rame)35 b(describ)r(es)h(the)g
-Ft(")p Fj(nativ)n(e)p Ft(")e Fj(co)r(ordinate)h(system)g(of)h(whatev)n
-(er)f(the)h(F)-7 b(rameSet)35 b(is)h(used)g(to)227 3466
-y(calibrate)27 b(\(e.g.)36 b(the)28 b(pixel)f(co)r(ordinates)f(of)i(an)
-f(image\))g(and)g(the)h(curren)n(t)e(F)-7 b(rame)27 b(describ)r(es)g
-(the)h Ft(")p Fj(apparen)n(t)p Ft(")227 3565 y Fj(co)r(ordinate)21
-b(system)g(in)h(whic)n(h)g(it)g(should)f(b)r(e)h(view)n(ed)g(\(e.g.)34
-b(displa)n(y)n(ed,)22 b(etc.\).)36 b(An)n(y)21 b(further)h(F)-7
-b(rames)21 b(represen)n(t)227 3665 y(a)27 b(library)g(of)g(alternativ)n
-(e)g(co)r(ordinate)f(systems,)h(whic)n(h)h(ma)n(y)f(b)r(e)h(selected)f
-(b)n(y)g(making)g(them)h(curren)n(t.)227 3792 y(When)34
-b(a)e(F)-7 b(rameSet)33 b(is)g(used)g(in)g(a)f(con)n(text)h(that)g
-(requires)f(a)g(F)-7 b(rame,)34 b(\(e.g.)53 b(obtaining)32
-b(its)h(Title)g(v)-5 b(alue,)34 b(or)227 3892 y(n)n(um)n(b)r(er)h(of)g
-(axes\),)h(the)g(curren)n(t)e(F)-7 b(rame)34 b(is)h(used.)59
-b(A)35 b(F)-7 b(rameSet)35 b(ma)n(y)f(therefore)g(b)r(e)i(used)f(in)g
-(place)f(of)h(its)227 3991 y(curren)n(t)27 b(F)-7 b(rame)27
-b(in)h(most)f(situations.)227 4118 y(When)38 b(a)g(F)-7
-b(rameSet)37 b(is)g(used)h(in)g(a)f(con)n(text)g(that)h(requires)e(a)h
-(Mapping,)j(the)e(Mapping)f(used)h(is)f(the)h(one)227
-4218 y(b)r(et)n(w)n(een)25 b(its)h(base)e(F)-7 b(rame)25
-b(and)g(its)h(curren)n(t)e(F)-7 b(rame.)35 b(Th)n(us,)26
-b(a)f(F)-7 b(rameSet)25 b(ma)n(y)f(b)r(e)i(used)f(to)g(con)n(v)n(ert)f
-Ft(")p Fj(nativ)n(e)p Ft(")227 4318 y Fj(co)r(ordinates)35
-b(in)n(to)h Ft(")p Fj(apparen)n(t)p Ft(")f Fj(ones,)i(and)g(vice)f(v)n
-(ersa.)61 b(Lik)n(e)36 b(an)n(y)f(Mapping,)j(a)e(F)-7
-b(rameSet)36 b(ma)n(y)g(also)f(b)r(e)227 4417 y(in)n(v)n(erted)h(\(see)
-g(astIn)n(v)n(ert\),)i(whic)n(h)f(has)e(the)i(e\013ect)g(of)g(in)n
-(terc)n(hanging)e(its)h(base)g(and)g(curren)n(t)g(F)-7
-b(rames)36 b(and)227 4517 y(hence)28 b(of)f(rev)n(ersing)f(the)i
-(Mapping)f(b)r(et)n(w)n(een)h(them.)227 4644 y(Regions)33
-b(ma)n(y)f(b)r(e)i(added)f(in)n(to)h(a)f(F)-7 b(rameSet)33
-b(\(since)g(a)g(Region)g(is)g(a)g(t)n(yp)r(e)h(of)f(F)-7
-b(rame\),)35 b(either)e(explicitly)g(or)227 4744 y(as)e(comp)r(onen)n
-(ts)g(within)h(CmpF)-7 b(rames.)48 b(In)31 b(this)h(case)e(the)i
-(Mapping)f(b)r(et)n(w)n(een)g(a)g(pair)g(of)g(F)-7 b(rames)31
-b(within)h(a)227 4843 y(F)-7 b(rameSet)35 b(will)g(include)g(the)h
-(e\013ects)f(of)g(the)g(clipping)g(pro)r(duced)g(b)n(y)f(an)n(y)h
-(Regions)f(included)h(in)g(the)g(path)227 4943 y(b)r(et)n(w)n(een)28
-b(the)g(F)-7 b(rames.)0 5098 y Fd(Synopsis:)121 b Ft(AstFrameSet)39
-b Fi(\003)p Ft(astFrameSet\()f(AstFrame)i Fi(\003)p Ft(frame,)h(const)g
-(char)h Fi(\003)p Ft(options,)e(...)86 b(\))0 5252 y
-Fd(P)m(arameters:)259 5394 y(frame)427 5494 y Fj(P)n(oin)n(ter)36
-b(to)h(the)g(\014rst)g(F)-7 b(rame)37 b(to)f(b)r(e)i(inserted)f(in)n
-(to)g(the)g(F)-7 b(rameSet.)65 b(This)37 b(initially)g(b)r(ecomes)g(b)r
-(oth)427 5593 y(the)g(base)f(and)h(the)g(curren)n(t)f(F)-7
-b(rame.)63 b(\(F)-7 b(urther)37 b(F)-7 b(rames)36 b(ma)n(y)g(b)r(e)h
-(added)g(using)f(the)h(astAddF)-7 b(rame)427 5693 y(function.\))p
-eop end
-%%Page: 233 243
-TeXDict begin 233 242 bop 3643 52 a FF(233)259 351 y
-Fd(options)427 451 y Fj(P)n(oin)n(ter)27 b(to)h(a)g(n)n(ull-terminated)
-g(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)
-g(attribute)427 551 y(assignmen)n(ts)22 b(to)i(b)r(e)g(used)f(for)g
-(initialising)g(the)h(new)g(F)-7 b(rameSet.)35 b(The)23
-b(syn)n(tax)g(used)g(is)h(iden)n(tical)f(to)g(that)427
-650 y(for)j(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-750 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)35 b(If)28
-b(no)g(initialisation)f(is)g(required,)g(a)g(zero-length)f(string)h(ma)
-n(y)g(b)r(e)h(supplied.)259 882 y Fd(...)427 981 y Fj(If)38
-b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 1081 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 1181 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 1280 y Fj(function\).)0
-1441 y Fd(Returned)32 b(V)-8 b(alue:)259 1577 y(astF)g(rameSet\(\))427
-1677 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(F)-7
-b(rameSet.)0 1838 y Fd(Notes:)340 2119 y Fi(\017)45 b
-Fj(If)20 b(a)e(p)r(oin)n(ter)h(to)g(an)f(existing)h(F)-7
-b(rameSet)18 b(is)h(giv)n(en)f(for)h(the)g Ft(")p Fj(frame)p
-Ft(")f Fj(parameter,)h(then)h(the)f(new)g(F)-7 b(rameSet)427
-2219 y(will)28 b(\(as)f(a)g(sp)r(ecial)g(case\))g(b)r(e)h(initialised)f
-(to)g(con)n(tain)g(the)h(same)f(F)-7 b(rames)26 b(and)h(Mappings,)g
-(and)h(to)f(ha)n(v)n(e)427 2319 y(the)h(same)f(attribute)g(v)-5
-b(alues,)27 b(as)g(the)g(one)g(supplied.)37 b(This)27
-b(pro)r(cess)f(is)i(similar)e(to)h(making)g(a)f(cop)n(y)h(of)g(a)427
-2418 y(F)-7 b(rameSet)27 b(\(see)h(astCop)n(y\),)e(except)h(that)h(the)
-g(F)-7 b(rames)26 b(and)h(Mappings)g(con)n(tained)g(in)g(the)h
-(original)e(are)427 2518 y(not)i(themselv)n(es)f(copied,)g(but)h(are)f
-(shared)g(b)n(y)g(b)r(oth)h(F)-7 b(rameSets.)340 2650
-y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g
-(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g
-(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 2750
-y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f
-(an)n(y)g(reason.)p 0 2947 3780 12 v 0 3078 a Fz(astGenCurv)l(e)1245
-3079 y Fe(Dra)m(w)38 b(a)g(generalized)f(curv)m(e)3012
-3078 y Fz(astGenCurv)l(e)0 3266 y Fd(Description:)44
-b Fj(This)29 b(function)f(dra)n(ws)f(a)h(general)f(user-de\014ned)h
-(curv)n(e)f(de\014ned)i(b)n(y)f(the)g(supplied)h(Mapping.)39
-b(Note)227 3366 y(that)25 b(the)g(curv)n(e)f(is)g(transformed)g(in)n
-(to)g(graphical)f(co)r(ordinate)h(space)g(for)g(plotting,)h(so)f(that)h
-(a)f(straigh)n(t)f(line)i(in)227 3465 y(ph)n(ysical)f(co)r(ordinates)f
-(ma)n(y)g(result)h(in)h(a)f(curv)n(ed)g(line)g(b)r(eing)h(dra)n(wn)e
-(if)i(the)g(Mapping)f(in)n(v)n(olv)n(ed)f(is)h(non-linear.)227
-3565 y(An)n(y)j(discon)n(tin)n(uities)f(in)h(the)f(Mapping)h(b)r(et)n
-(w)n(een)f(ph)n(ysical)g(and)g(graphical)f(co)r(ordinates)g(are)g
-(catered)h(for,)g(as)227 3665 y(is)i(an)n(y)f(clipping)g(established)g
-(using)h(astClip.)227 3789 y(If)37 b(y)n(ou)e(need)g(to)h(dra)n(w)f
-(simple)h(straigh)n(t)e(lines)i(\(geo)r(desics\),)h(astCurv)n(e)e(or)g
-(astP)n(olyCurv)n(e)e(will)j(usually)f(b)r(e)227 3888
-y(easier)27 b(to)g(use)g(and)h(faster.)0 4037 y Fd(Synopsis:)121
-b Ft(void)42 b(astGenCurve\()c(AstPlot)j Fi(\003)p Ft(this,)g
-(astMapping)f Fi(\003)p Ft(map)h(\))0 4186 y Fd(P)m(arameters:)259
-4321 y(this)427 4421 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259
-4553 y Fd(map)427 4652 y Fj(P)n(oin)n(ter)21 b(to)h(a)g(Mapping.)35
-b(This)22 b(Mapping)g(should)g(ha)n(v)n(e)f(1)h(input)i(co)r(ordinate)d
-(represen)n(ting)g(o\013set)h(along)427 4752 y(the)31
-b(required)d(curv)n(e,)i(normalized)f(so)g(that)h(the)g(start)g(of)f
-(the)i(curv)n(e)e(is)g(at)h(o\013set)g(0.0,)g(and)f(the)i(end)f(of)427
-4852 y(the)j(curv)n(e)f(is)g(at)h(o\013set)g(1.0.)51
-b(Note,)34 b(this)f(o\013set)f(do)r(es)h(not)f(need)h(to)g(b)r(e)g
-(linearly)e(related)h(to)h(distance)427 4951 y(along)c(the)h(curv)n(e.)
-42 b(The)30 b(n)n(um)n(b)r(er)f(of)h(output)g(co)r(ordinates)f(should)g
-(equal)g(the)h(n)n(um)n(b)r(er)g(of)f(axes)g(in)h(the)427
-5051 y(curren)n(t)e(F)-7 b(rame)28 b(of)h(the)g(Plot.)39
-b(The)29 b(Mapping)f(should)g(map)h(a)f(sp)r(eci\014ed)h(o\013set)f
-(along)g(the)h(curv)n(e,)f(in)n(to)427 5151 y(the)h(corresp)r(onding)e
-(co)r(ordinates)g(in)i(the)h(curren)n(t)d(F)-7 b(rame)29
-b(of)f(the)h(Plot.)40 b(The)29 b(in)n(v)n(erse)e(transformation)427
-5250 y(need)h(not)g(b)r(e)g(de\014ned.)0 5411 y Fd(Notes:)340
-5693 y Fi(\017)45 b Fj(An)28 b(error)e(results)h(if)h(the)g(base)f(F)-7
-b(rame)27 b(of)h(the)g(Plot)f(is)g(not)h(2-dimensional.)p
-eop end
-%%Page: 234 244
-TeXDict begin 234 243 bop 0 52 a FF(234)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(An)30 b(error)d(also)g(results)i(if)g(the)g(transformation)f(b)r
-(et)n(w)n(een)h(the)g(curren)n(t)f(and)h(base)f(F)-7
-b(rames)28 b(of)h(the)g(Plot)427 451 y(is)f(not)f(de\014ned)h(\(i.e.)38
-b(the)28 b(Plot's)e(T)-7 b(ranIn)n(v)n(erse)26 b(attribute)h(is)h
-(zero\).)p 0 677 3780 12 v 0 808 a Fz(astGet)p Fc(<)p
-Fz(X)p Fc(>)951 809 y Fe(Get)39 b(an)f(attribute)f(v)-7
-b(alue)38 b(for)g(an)g(Ob)7 b(ject)3106 808 y Fz(astGet)p
-Fc(<)p Fz(X)p Fc(>)0 1025 y Fd(Description:)44 b Fj(This)29
-b(is)f(a)g(family)g(of)h(functions)f(whic)n(h)h(return)f(a)f(sp)r
-(eci\014ed)i(attribute)g(v)-5 b(alue)28 b(for)g(an)g(Ob)5
-b(ject)28 b(using)227 1124 y(one)j(of)g(sev)n(eral)f(di\013eren)n(t)h
-(data)g(t)n(yp)r(es.)47 b(The)32 b(t)n(yp)r(e)f(is)g(selected)g(b)n(y)g
-(replacing)f Fl(<)p Fj(X)p Fl(>)h Fj(in)g(the)h(function)g(name)227
-1224 y(b)n(y)27 b(C,)f(D,)h(F,)g(I)g(or)f(L,)g(to)h(obtain)f(a)g
-(result)h(in)g(const)f(c)n(har)p Fi(\003)f Fj(\(i.e.)37
-b(string\),)26 b(double,)h(\015oat,)f(in)n(t,)h(or)f(long)g(format,)227
-1324 y(resp)r(ectiv)n(ely)-7 b(.)227 1462 y(If)30 b(p)r(ossible,)f(the)
-h(attribute)g(v)-5 b(alue)29 b(is)g(con)n(v)n(erted)f(to)h(the)g(t)n
-(yp)r(e)h(y)n(ou)e(request.)42 b(If)29 b(con)n(v)n(ersion)e(is)j(not)f
-(p)r(ossible,)227 1561 y(an)f(error)d(will)j(result.)0
-1738 y Fd(Synopsis:)121 b Fl(<)p Ft(X)p Fl(>)p Ft(type)41
-b(astGet)p Fl(<)p Ft(X)p Fl(>)p Ft(\()e(AstObject)h Fi(\003)p
-Ft(this,)h(const)g(char)h Fi(\003)p Ft(attrib)f(\))0
-1914 y Fd(P)m(arameters:)259 2078 y(this)427 2177 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Ob)5 b(ject.)259 2324 y Fd(attrib)427 2423
-y Fj(P)n(oin)n(ter)31 b(to)i(a)f(n)n(ull-terminated)g(string)g(con)n
-(taining)f(the)i(name)g(of)f(the)h(attribute)g(whose)f(v)-5
-b(alue)32 b(is)g(re-)427 2523 y(quired.)0 2712 y Fd(Class)f
-(Applicabilit)m(y:)259 2875 y(Ob)5 b(ject)427 2975 y
-Fj(These)28 b(functions)f(apply)h(to)f(all)h(Ob)5 b(jects.)0
-3164 y Fd(Returned)32 b(V)-8 b(alue:)259 3327 y(astGet)p
-Fl(<)p Fd(X)p Fl(>)p Fd(\(\))427 3427 y Fj(The)32 b(attribute)f(v)-5
-b(alue,)33 b(in)e(the)h(data)f(t)n(yp)r(e)h(corresp)r(onding)d(to)i
-Fl(<)p Fj(X)p Fl(>)g Fj(\(or,)h(in)g(the)g(case)e(of)i(astGetC,)f(a)427
-3527 y(p)r(oin)n(ter)c(to)h(a)f(constan)n(t)g(n)n(ull-terminated)g(c)n
-(haracter)f(string)h(con)n(taining)f(this)i(v)-5 b(alue\).)0
-3716 y Fd(Examples:)227 3879 y Fq(printf\()46 b Ft(")p
-Fq(RefCount)f(=)j(\045d)p Fi(n)p Fq(n)p Ft(")p Fq(,)d(astGetI\()h(z,)h
-Ft(")p Fq(RefCount)p Ft(")e Fq(\))i(\);)427 3979 y Fj(Prin)n(ts)27
-b(the)h(RefCoun)n(t)g(attribute)f(v)-5 b(alue)28 b(for)f(Ob)5
-b(ject)27 b Ft(")p Fj(z)p Ft(")g Fj(as)g(an)g(in)n(t.)227
-4129 y Fq(title)47 b(=)g(astGetC\()f(axis,)g Ft(")p Fq(Title)p
-Ft(")g Fq(\);)427 4225 y Fj(Obtains)41 b(a)f(p)r(oin)n(ter)g(to)h(a)f
-(n)n(ull-terminated)h(c)n(haracter)e(string)h(con)n(taining)f(the)j
-(Title)f(attribute)g(of)427 4324 y(Ob)5 b(ject)28 b Ft(")p
-Fj(axis)p Ft(")p Fj(.)0 4513 y Fd(Notes:)340 4823 y Fi(\017)45
-b Fj(A)n(ttribute)28 b(names)g(are)e(not)i(case)f(sensitiv)n(e)g(and)g
-(ma)n(y)g(b)r(e)h(surrounded)e(b)n(y)i(white)g(space.)340
-4969 y Fi(\017)45 b Fj(An)31 b(appropriate)e Ft(")p Fj(n)n(ull)p
-Ft(")h Fj(v)-5 b(alue)30 b(will)h(b)r(e)g(returned)f(if)h(this)f
-(function)h(is)g(in)n(v)n(ok)n(ed)e(with)i(the)g(AST)g(error)427
-5069 y(status)g(set,)g(or)f(if)h(it)h(should)e(fail)h(for)f(an)n(y)g
-(reason.)45 b(This)30 b(n)n(ull)h(v)-5 b(alue)31 b(is)f(zero)g(for)g(n)
-n(umeric)g(v)-5 b(alues)31 b(and)427 5168 y(NULL)d(for)f(p)r(oin)n(ter)
-h(v)-5 b(alues.)340 5315 y Fi(\017)45 b Fj(The)34 b(p)r(oin)n(ter)f
-(returned)g(b)n(y)h(astGetC)f(is)h(guaran)n(teed)e(to)h(remain)g(v)-5
-b(alid)34 b(and)f(the)h(string)f(to)h(whic)n(h)f(it)427
-5414 y(p)r(oin)n(ts)27 b(will)h(not)f(b)r(e)h(o)n(v)n(er-written)d(for)
-i(a)g(total)g(of)g(50)f(successiv)n(e)g(in)n(v)n(o)r(cations)g(of)h
-(this)h(function.)37 b(After)427 5514 y(this,)h(the)e(memory)f(con)n
-(taining)f(the)i(string)f(ma)n(y)g(b)r(e)h(re-used,)h(so)e(a)g(cop)n(y)
-g(of)g(the)h(string)f(should)g(b)r(e)427 5614 y(made)28
-b(if)g(it)g(is)f(needed)h(for)f(longer)f(than)i(this.)p
-eop end
-%%Page: 235 245
-TeXDict begin 235 244 bop 3643 52 a FF(235)p 0 351 3780
-12 v 0 483 a Fz(astGetActiv)l(eUnit)208 b Fe(Determines)38
-b(ho)m(w)g(the)g(Unit)1338 583 y(attribute)f(will)g(b)s(e)i(used)2742
-483 y Fz(astGetActiv)l(eUnit)0 743 y Fd(Description:)44
-b Fj(This)d(function)h(returns)e(the)i(curren)n(t)e(v)-5
-b(alue)40 b(of)h(the)h(Activ)n(eUnit)g(\015ag)e(for)g(a)h(F)-7
-b(rame.)76 b(See)41 b(the)227 842 y(description)27 b(of)h(the)g
-(astSetActiv)n(eUnit)g(function)g(for)f(a)g(description)g(of)h(the)g
-(Activ)n(eUnit)g(\015ag.)0 989 y Fd(Synopsis:)121 b Ft(int)42
-b(astGetActiveUnit\()37 b(AstFrame)j Fi(\003)p Ft(this)h(\))0
-1135 y Fd(P)m(arameters:)259 1269 y(this)427 1369 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rame.)0 1528 y Fd(Returned)32 b(V)-8
-b(alue:)259 1661 y(astGetActiv)m(eUnit)427 1761 y Fj(The)28
-b(curren)n(t)f(v)-5 b(alue)27 b(of)h(the)g(Activ)n(eUnit)g(\015ag.)0
-1920 y Fd(Notes:)340 2200 y Fi(\017)45 b Fj(A)30 b(zero)f(v)-5
-b(alue)29 b(will)h(b)r(e)g(returned)f(if)h(this)g(function)g(is)g(in)n
-(v)n(ok)n(ed)e(with)i(the)g(AST)g(error)e(status)h(set,)h(or)f(if)427
-2300 y(it)f(should)g(fail)f(for)g(an)n(y)g(reason.)p
-0 2493 V 0 2625 a Fz(astGetFits)p Fc(<)p Fz(X)p Fc(>)276
-b Fe(Get)38 b(a)h(named)f(k)m(eyw)m(ord)f(v)-7 b(alue)1466
-2739 y(from)37 b(a)i(FitsChan)2878 2625 y Fz(astGetFits)p
-Fc(<)p Fz(X)p Fc(>)0 2899 y Fd(Description:)44 b Fj(This)21
-b(is)f(a)g(family)g(of)g(functions)h(whic)n(h)f(gets)g(a)g(v)-5
-b(alue)20 b(for)g(a)g(named)g(k)n(eyw)n(ord)f(from)h(a)g(FitsChan)g
-(using)227 2999 y(one)33 b(of)f(sev)n(eral)f(di\013eren)n(t)i(data)f(t)
-n(yp)r(es.)53 b(The)32 b(data)h(t)n(yp)r(e)f(of)h(the)g(returned)g(v)-5
-b(alue)32 b(is)h(selected)f(b)n(y)h(replacing)227 3099
-y Fl(<)p Fj(X)p Fl(>)c Fj(in)h(the)g(function)g(name)f(b)n(y)h(one)f
-(of)g(the)h(follo)n(wing)f(strings)f(represen)n(ting)g(the)i
-(recognised)e(FITS)i(data)227 3198 y(t)n(yp)r(es:)227
-3321 y(The)f(data)e(t)n(yp)r(e)i(of)f(the)h(returned)f(v)-5
-b(alue)28 b(is)g(selected)g(b)n(y)g(replacing)g Fl(<)p
-Fj(X)p Fl(>)f Fj(in)i(the)g(function)g(name)f(b)n(y)g(one)g(of)227
-3421 y(the)g(follo)n(wing)f(strings)f(represen)n(ting)h(the)h
-(recognised)d(FITS)j(data)g(t)n(yp)r(es:)340 3678 y Fi(\017)45
-b Fj(CF)28 b(-)f(Complex)h(\015oating)e(p)r(oin)n(t)i(v)-5
-b(alues.)340 3808 y Fi(\017)45 b Fj(CI)28 b(-)f(Complex)g(in)n(teger)g
-(v)-5 b(alues.)340 3938 y Fi(\017)45 b Fj(F)28 b(-)f(Floating)g(p)r
-(oin)n(t)h(v)-5 b(alues.)340 4068 y Fi(\017)45 b Fj(I)28
-b(-)f(In)n(teger)g(v)-5 b(alues.)340 4198 y Fi(\017)45
-b Fj(L)28 b(-)f(Logical)f(\(i.e.)38 b(b)r(o)r(olean\))27
-b(v)-5 b(alues.)340 4328 y Fi(\017)45 b Fj(S)28 b(-)f(String)h(v)-5
-b(alues.)340 4458 y Fi(\017)45 b Fj(CN)32 b(-)g(A)g Ft(")p
-Fj(CONTINUE)p Ft(")e Fj(v)-5 b(alue,)33 b(these)e(are)g(treated)g(lik)n
-(e)g(string)g(v)-5 b(alues,)33 b(but)f(are)f(enco)r(ded)g(without)427
-4558 y(an)d(equals)e(sign.)227 4717 y(The)i(data)f(t)n(yp)r(e)h(of)f
-(the)h Ft(")p Fj(v)-5 b(alue)p Ft(")27 b Fj(parameter)f(dep)r(ends)i
-(on)f Fl(<)p Fj(X)p Fl(>)h Fj(as)e(follo)n(ws:)340 4974
-y Fi(\017)45 b Fj(CF)29 b(-)f Ft(")p Fj(double)g Fi(\003)p
-Ft(")f Fj(\(a)i(p)r(oin)n(ter)f(to)g(a)g(2)g(elemen)n(t)g(arra)n(y)e
-(to)j(hold)f(the)h(real)e(and)h(imaginary)f(parts)h(of)g(the)427
-5073 y(complex)f(v)-5 b(alue\).)340 5203 y Fi(\017)45
-b Fj(CI)37 b(-)g Ft(")p Fj(in)n(t)g Fi(\003)p Ft(")f
-Fj(\(a)h(p)r(oin)n(ter)g(to)g(a)f(2)h(elemen)n(t)g(arra)n(y)e(to)i
-(hold)g(the)g(real)g(and)f(imaginary)g(parts)g(of)h(the)427
-5303 y(complex)27 b(v)-5 b(alue\).)340 5433 y Fi(\017)45
-b Fj(F)28 b(-)f Ft(")p Fj(double)h Fi(\003)p Ft(")p Fj(.)340
-5563 y Fi(\017)45 b Fj(I)28 b(-)f Ft(")p Fj(in)n(t)h
-Fi(\003)p Ft(")p Fj(.)340 5693 y Fi(\017)45 b Fj(L)28
-b(-)f Ft(")p Fj(in)n(t)h Fi(\003)p Ft(")p Fj(.)p eop
-end
-%%Page: 236 246
-TeXDict begin 236 245 bop 0 52 a FF(236)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(S)20 b(-)f Ft(")p Fj(c)n(har)e Fi(\003\003)p Ft(")h
-Fj(\(a)h(p)r(oin)n(ter)g(to)g(a)g(static)g Ft(")p Fj(c)n(har)p
-Ft(")e Fj(arra)n(y)g(is)i(returned)g(at)g(the)h(lo)r(cation)f(giv)n(en)
-f(b)n(y)h(the)h Ft(")p Fj(v)-5 b(alue)p Ft(")427 451
-y Fj(parameter,)29 b(Note,)h(the)g(stored)f(string)g(ma)n(y)g(c)n
-(hange)f(on)h(subsequen)n(t)h(in)n(v)n(o)r(cations)e(of)h(astGetFitsS)h
-(so)427 551 y(a)d(p)r(ermanen)n(t)h(cop)n(y)f(should)g(b)r(e)h(tak)n
-(en)f(of)g(the)h(string)f(if)h(necessary\).)340 710 y
-Fi(\017)45 b Fj(CN)28 b(-)g(Lik)n(e)p Ft(")p Fj(S)p Ft(")p
-Fj(.)0 925 y Fd(Synopsis:)121 b Ft(int)42 b(astGetFits)p
-Fl(<)p Ft(X)p Fl(>)p Ft(\()c(AstFitsChan)h Fi(\003)p
-Ft(this,)i(const)h(char)f Fi(\003)p Ft(name,)h Fl(<)p
-Ft(X)p Fl(>)p Ft(type)e Fi(\003)p Ft(value)h(\))0 1128
-y Fd(P)m(arameters:)259 1317 y(this)427 1417 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(FitsChan.)259 1576 y Fd(name)427 1676 y
-Fj(P)n(oin)n(ter)f(to)i(a)f(n)n(ull-terminated)h(c)n(haracter)d(string)
-i(con)n(taining)g(the)h(FITS)g(k)n(eyw)n(ord)e(name.)40
-b(This)28 b(ma)n(y)427 1776 y(b)r(e)i(a)f(complete)g(FITS)h(header)f
-(card,)g(in)g(whic)n(h)h(case)e(the)i(k)n(eyw)n(ord)d(to)j(use)f(is)g
-(extracted)g(from)g(it.)43 b(No)427 1875 y(more)27 b(than)h(80)e(c)n
-(haracters)g(are)g(read)h(from)g(this)h(string.)259 2035
-y Fd(v)-5 b(alue)427 2134 y Fj(A)39 b(p)r(oin)n(ter)g(to)f(a)h
-(bu\013er)f(to)h(receiv)n(e)f(the)h(k)n(eyw)n(ord)d(v)-5
-b(alue.)71 b(The)38 b(data)h(t)n(yp)r(e)f(dep)r(ends)i(on)e
-Fl(<)p Fj(X)p Fl(>)g Fj(as)427 2234 y(describ)r(ed)28
-b(ab)r(o)n(v)n(e.)0 2449 y Fd(Returned)k(V)-8 b(alue:)259
-2639 y(astGetFits)p Fl(<)p Fd(X)p Fl(><)p Fd(X)p Fl(>)p
-Fd(\(\))427 2738 y Fj(A)21 b(v)-5 b(alue)20 b(of)g(zero)g(is)g
-(returned)g(if)h(the)f(k)n(eyw)n(ord)f(w)n(as)g(not)i(found)f(in)h(the)
-g(FitsChan)f(\(no)g(error)f(is)h(rep)r(orted\).)427 2838
-y(Otherwise,)27 b(a)g(v)-5 b(alue)28 b(of)f(one)g(is)h(returned.)0
-3053 y Fd(Notes:)340 3389 y Fi(\017)45 b Fj(The)27 b(card)e(follo)n
-(wing)h(the)h(curren)n(t)e(card)h(is)g(c)n(hec)n(k)n(ed)f(\014rst.)37
-b(If)27 b(this)f(is)h(not)f(the)h(required)e(card,)h(then)h(the)427
-3488 y(rest)21 b(of)h(the)g(FitsChan)g(is)f(searc)n(hed,)h(starting)e
-(with)j(the)f(\014rst)f(card)g(added)g(to)h(the)g(FitsChan.)35
-b(Therefore)427 3588 y(cards)24 b(should)g(b)r(e)h(accessed)e(in)i(the)
-g(order)e(they)i(are)f(stored)f(in)i(the)g(FitsChan)g(\(if)g(p)r
-(ossible\))g(as)f(this)g(will)427 3687 y(minimise)k(the)g(time)g(sp)r
-(en)n(t)g(searc)n(hing)e(for)h(cards.)340 3847 y Fi(\017)45
-b Fj(If)28 b(the)f(requested)f(card)g(is)h(found,)h(it)f(b)r(ecomes)g
-(the)g(curren)n(t)f(card,)g(otherwise)h(the)g(curren)n(t)f(card)g(is)h
-(left)427 3947 y(p)r(oin)n(ting)h(at)f(the)h Ft(")p Fj(end-of-\014le)p
-Ft(")p Fj(.)340 4106 y Fi(\017)45 b Fj(If)34 b(the)f(stored)f(k)n(eyw)n
-(ord)f(v)-5 b(alue)33 b(is)f(not)h(of)g(the)g(requested)f(t)n(yp)r(e,)j
-(it)e(is)g(con)n(v)n(erted)e(in)n(to)i(the)g(requested)427
-4206 y(t)n(yp)r(e.)340 4365 y Fi(\017)45 b Fj(If)33 b(the)f(k)n(eyw)n
-(ord)f(is)h(found)g(in)g(the)h(FitsChan,)g(but)g(has)f(no)f(asso)r
-(ciated)g(v)-5 b(alue,)33 b(an)f(error)e(is)i(rep)r(orted.)427
-4465 y(If)e(necessary)-7 b(,)27 b(the)i(astT)-7 b(estFits)29
-b(function)h(can)e(b)r(e)h(used)g(to)g(determine)g(if)g(the)g(k)n(eyw)n
-(ord)e(has)i(a)f(de\014ned)427 4564 y(v)-5 b(alue)28
-b(in)g(the)g(FitsChan)f(prior)g(to)g(calling)g(this)h(function.)340
-4724 y Fi(\017)45 b Fj(An)28 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)
-h(the)g(k)n(eyw)n(ord)d(name)j(do)r(es)f(not)h(conform)e(to)i(FITS)g
-(requiremen)n(ts.)340 4883 y Fi(\017)45 b Fj(Zero)340
-5043 y Fi(\017)g Fj(.F)-9 b(ALSE.)26 b(is)g(returned)g(as)f(the)i
-(function)f(v)-5 b(alue)26 b(if)h(an)f(error)e(has)h(already)g(o)r
-(ccurred,)g(or)g(if)i(this)f(function)427 5142 y(should)i(fail)f(for)g
-(an)n(y)g(reason.)340 5302 y Fi(\017)45 b Fj(The)34 b(FITS)g(standard)e
-(sa)n(ys)g(that)i(string)f(k)n(eyw)n(ord)e(v)-5 b(alues)33
-b(should)h(b)r(e)f(padded)h(with)g(trailing)f(spaces)427
-5401 y(if)f(they)f(are)f(shorter)g(than)h(8)g(c)n(haracters.)45
-b(F)-7 b(or)30 b(this)h(reason,)g(trailing)f(spaces)g(are)g(remo)n(v)n
-(ed)g(from)g(the)427 5501 y(string)f(returned)h(b)n(y)f(astGetFitsS)i
-(if)f(the)g(original)f(string)g(\(including)h(an)n(y)f(trailing)g
-(spaces\))h(con)n(tains)427 5600 y(8)d(or)g(few)n(er)g(c)n(haracters.)
-35 b(T)-7 b(railing)26 b(spaces)h(are)g(not)g(remo)n(v)n(ed)f(from)h
-(longer)g(strings.)p eop end
-%%Page: 237 247
-TeXDict begin 237 246 bop 3643 52 a FF(237)p 0 351 3780
-12 v 0 482 a Fz(astGetF)-11 b(rame)925 483 y Fe(Obtain)37
-b(a)i(p)s(oin)m(ter)e(to)h(a)h(sp)s(eci\014ed)g(F)-10
-b(rame)1531 596 y(in)39 b(a)f(F)-10 b(rameSet)3022 482
-y Fz(astGetF)f(rame)0 800 y Fd(Description:)44 b Fj(This)28
-b(function)g(returns)f(a)g(p)r(oin)n(ter)g(to)h(a)f(sp)r(eci\014ed)h(F)
--7 b(rame)27 b(in)h(a)f(F)-7 b(rameSet.)0 988 y Fd(Synopsis:)121
-b Ft(AstFrame)40 b Fi(\003)p Ft(astGetFrame\()e(AstFrameSet)h
-Fi(\003)p Ft(this,)i(int)i(iframe)e(\))0 1175 y Fd(P)m(arameters:)259
-1350 y(this)427 1449 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rameSet.)259 1601 y Fd(iframe)427 1701 y Fj(The)35
-b(index)g(of)f(the)h(required)f(F)-7 b(rame)34 b(within)h(the)g(F)-7
-b(rameSet.)58 b(This)35 b(v)-5 b(alue)34 b(should)g(lie)h(in)g(the)g
-(range)427 1801 y(from)28 b(1)f(to)g(the)h(n)n(um)n(b)r(er)g(of)f(F)-7
-b(rames)27 b(in)h(the)g(F)-7 b(rameSet)27 b(\(as)g(giv)n(en)g(b)n(y)g
-(its)h(Nframe)g(attribute\).)0 2001 y Fd(Returned)k(V)-8
-b(alue:)259 2175 y(astGetF)g(rame\(\))427 2275 y Fj(A)28
-b(p)r(oin)n(ter)f(to)h(the)g(requested)f(F)-7 b(rame.)0
-2475 y Fd(Notes:)340 2796 y Fi(\017)45 b Fj(A)32 b(v)-5
-b(alue)30 b(of)h(AST)p Ft(__)p Fj(BASE)g(or)f(AST)p Ft(__)p
-Fj(CURRENT)h(ma)n(y)f(b)r(e)h(giv)n(en)g(for)f(the)h
-Ft(")p Fj(iframe)p Ft(")f Fj(parameter)g(to)427 2895
-y(sp)r(ecify)e(the)g(base)f(F)-7 b(rame)27 b(or)g(the)h(curren)n(t)f(F)
--7 b(rame)27 b(resp)r(ectiv)n(ely)-7 b(.)340 3047 y Fi(\017)45
-b Fj(This)28 b(function)g(incremen)n(ts)f(the)h(RefCoun)n(t)g
-(attribute)g(of)f(the)h(selected)g(F)-7 b(rame)27 b(b)n(y)g(one.)340
-3199 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35
-b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g
-(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427
-3299 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)p 0 3536 V 0 3668 a Fz(astGetGrfCon)l(text)183
-b Fe(Return)38 b(the)h(KeyMap)g(that)1216 3782 y(describ)s(es)e(a)f
-(Plot's)f(graphics)1701 3882 y(con)m(text)2715 3668 y
-Fz(astGetGrfCon)l(text)0 4086 y Fd(Description:)44 b
-Fj(This)20 b(function)g(returns)f(a)h(reference)f(to)g(a)g(KeyMap)g
-(that)h(will)g(b)r(e)g(passed)f(to)h(an)n(y)f(dra)n(wing)f(functions)
-227 4185 y(registered)24 b(using)g(astGrfSet.)36 b(This)25
-b(KeyMap)f(can)h(b)r(e)g(used)g(b)n(y)f(an)h(application)f(to)h(pass)f
-(information)g(to)h(the)227 4285 y(dra)n(wing)i(functions)h(ab)r(out)g
-(the)g(con)n(text)g(in)g(whic)n(h)g(they)g(are)f(b)r(eing)h(called.)38
-b(The)28 b(con)n(ten)n(ts)f(of)h(the)h(KeyMap)227 4385
-y(are)e(nev)n(er)f(accessed)h(b)n(yt)g(the)h(Plot)g(class)e(itself.)0
-4572 y Fd(Synopsis:)121 b Ft(AstKeyMap)40 b Fi(\003)p
-Ft(astGetGrfConte)o(xt\()d(AstPlot)j Fi(\003)p Ft(this)i(\))0
-4760 y Fd(P)m(arameters:)259 4934 y(this)427 5034 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Plot.)0 5234 y Fd(Returned)k(V)-8 b(alue:)259
-5409 y(astGetGrfCon)m(text\(\))427 5508 y Fj(A)31 b(p)r(oin)n(ter)f(to)
-h(the)g(graphics)e(con)n(text)h(KeyMap.)45 b(The)31 b(returned)f(p)r
-(oin)n(ter)h(should)f(b)r(e)h(ann)n(ulled)f(when)427
-5608 y(it)e(is)g(no)f(longer)f(needed.)p eop end
-%%Page: 238 248
-TeXDict begin 238 247 bop 0 52 a FF(238)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astGetMapping)153 b Fe(Obtain)36 b(a)h(Mapping)f(that)g(con)
-m(v)m(erts)1253 598 y(b)s(et)m(w)m(een)i(t)m(w)m(o)f(F)-10
-b(rames)38 b(in)h(a)1648 697 y(F)-10 b(rameSet)2868 483
-y Fz(astGetMapping)0 861 y Fd(Description:)44 b Fj(This)31
-b(function)h(returns)e(a)h(p)r(oin)n(ter)f(to)h(a)g(Mapping)g(that)g
-(will)g(con)n(v)n(ert)f(co)r(ordinates)f(b)r(et)n(w)n(een)i(the)227
-961 y(co)r(ordinate)c(systems)g(represen)n(ted)f(b)n(y)i(t)n(w)n(o)e(F)
--7 b(rames)27 b(in)h(a)f(F)-7 b(rameSet.)0 1109 y Fd(Synopsis:)121
-b Ft(AstMapping)39 b Fi(\003)p Ft(astGetMapping\()f(AstFrameSet)h
-Fi(\003)p Ft(this,)i(int)h(iframe1,)e(int)j(iframe2)d(\))0
-1258 y Fd(P)m(arameters:)259 1394 y(this)427 1493 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rameSet.)259 1625 y Fd(iframe1)427
-1725 y Fj(The)31 b(index)g(of)g(the)h(\014rst)e(F)-7
-b(rame)31 b(in)g(the)g(F)-7 b(rameSet.)47 b(This)31 b(F)-7
-b(rame)30 b(describ)r(es)h(the)g(co)r(ordinate)f(system)427
-1824 y(for)d(the)h Ft(")p Fj(input)p Ft(")g Fj(end)g(of)f(the)h
-(Mapping.)259 1956 y Fd(iframe2)427 2056 y Fj(The)d(index)f(of)h(the)f
-(second)g(F)-7 b(rame)24 b(in)h(the)f(F)-7 b(rameSet.)36
-b(This)24 b(F)-7 b(rame)24 b(describ)r(es)g(the)h(co)r(ordinate)e
-(system)427 2156 y(for)k(the)h Ft(")p Fj(output)p Ft(")g
-Fj(end)f(of)h(the)g(Mapping.)0 2317 y Fd(Returned)k(V)-8
-b(alue:)259 2452 y(astGetMapping\(\))427 2552 y Fj(P)n(oin)n(ter)30
-b(to)h(a)f(Mapping)h(whose)g(forw)n(ard)e(transformation)g(con)n(v)n
-(erts)h(co)r(ordinates)f(from)i(the)h(\014rst)e(co-)427
-2652 y(ordinate)25 b(system)h(to)f(the)h(second)f(one,)h(and)g(whose)f
-(in)n(v)n(erse)f(transformation)g(con)n(v)n(erts)g(co)r(ordinates)g(in)
-427 2751 y(the)k(opp)r(osite)f(direction.)0 2912 y Fd(Notes:)340
-3194 y Fi(\017)45 b Fj(The)23 b(returned)g(Mapping)f(will)h(include)h
-(the)f(clipping)g(e\013ect)g(of)g(an)n(y)f(Regions)g(whic)n(h)h(o)r
-(ccur)g(on)f(the)h(path)427 3294 y(b)r(et)n(w)n(een)28
-b(the)g(t)n(w)n(o)f(supplied)h(F)-7 b(rames)26 b(\(this)j(includes)e
-(the)h(t)n(w)n(o)f(supplied)h(F)-7 b(rames)27 b(themselv)n(es\).)340
-3426 y Fi(\017)45 b Fj(The)33 b(v)-5 b(alues)33 b(giv)n(en)g(for)f(the)
-i Ft(")p Fj(iframe1)p Ft(")d Fj(and)i Ft(")p Fj(iframe2)p
-Ft(")f Fj(parameters)f(should)i(lie)g(in)h(the)f(range)f(from)427
-3525 y(1)g(to)f(the)h(n)n(um)n(b)r(er)g(of)g(F)-7 b(rames)31
-b(in)h(the)g(F)-7 b(rameSet)32 b(\(as)f(giv)n(en)g(b)n(y)g(its)h
-(Nframe)g(attribute\).)50 b(A)32 b(v)-5 b(alue)32 b(of)427
-3625 y(AST)p Ft(__)p Fj(BASE)25 b(or)g(AST)p Ft(__)p
-Fj(CURRENT)g(ma)n(y)g(also)g(b)r(e)h(giv)n(en)e(to)i(iden)n(tify)g(the)
-g(F)-7 b(rameSet's)25 b(base)g(F)-7 b(rame)427 3725 y(or)30
-b(curren)n(t)f(F)-7 b(rame)29 b(resp)r(ectiv)n(ely)-7
-b(.)44 b(It)31 b(is)f(p)r(ermissible)g(for)f(b)r(oth)i(these)f
-(parameters)f(to)h(ha)n(v)n(e)f(the)h(same)427 3824 y(v)-5
-b(alue,)28 b(in)g(whic)n(h)f(case)g(a)g(unit)h(Mapping)g(\(UnitMap\))g
-(is)g(returned.)340 3956 y Fi(\017)45 b Fj(It)36 b(should)f(alw)n(a)n
-(ys)e(b)r(e)j(p)r(ossible)e(to)h(generate)f(the)i(Mapping)f(requested,)
-h(but)g(this)f(do)r(es)g(necessarily)427 4056 y(guaran)n(tee)d(that)j
-(it)f(will)g(b)r(e)g(able)g(to)g(p)r(erform)f(the)i(required)e(co)r
-(ordinate)f(con)n(v)n(ersion.)54 b(If)34 b(necessary)-7
-b(,)427 4155 y(the)26 b(T)-7 b(ranF)g(orw)n(ard)22 b(and)j(T)-7
-b(ranIn)n(v)n(erse)23 b(attributes)h(of)h(the)h(returned)e(Mapping)h
-(should)g(b)r(e)g(insp)r(ected)h(to)427 4255 y(determine)i(if)g(the)g
-(required)f(transformation)f(is)h(a)n(v)-5 b(ailable.)340
-4387 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35
-b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g
-(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427
-4487 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)p 0 4684 V 0 4816 a Fz(astGetRefP)l(os)225
-b Fe(Return)38 b(the)h(reference)f(p)s(osition)f(in)h(a)970
-4931 y(sp)s(eci\014ed)h(celestial)e(co)s(ordinate)f(system)2978
-4816 y Fz(astGetRefP)l(os)0 5122 y Fd(Description:)44
-b Fj(This)30 b(function)g(returns)f(the)h(reference)f(p)r(osition)g
-(\(sp)r(eci\014ed)i(b)n(y)e(attributes)h(RefRA)g(and)g(RefDec\))227
-5222 y(con)n(v)n(erted)k(to)g(the)i(celestial)e(co)r(ordinate)g(system)
-g(represen)n(ted)g(b)n(y)h(a)f(supplied)h(SkyF)-7 b(rame.)58
-b(The)35 b(celestial)227 5322 y(longitude)28 b(and)f(latitude)h(v)-5
-b(alues)27 b(are)g(returned)g(in)h(radians.)0 5470 y
-Fd(Synopsis:)121 b Ft(void)42 b(astGetRefPos\()c(AstSpecFrame)h
-Fi(\003)p Ft(this,)i(AstSkyFrame)e Fi(\003)p Ft(frm,)i(double)g
-Fi(\003)p Ft(lon,)h(double)227 5570 y Fi(\003)p Ft(lat)g(\))0
-5718 y Fd(P)m(arameters:)p eop end
-%%Page: 239 249
-TeXDict begin 239 248 bop 3643 52 a FF(239)259 351 y
-Fd(this)427 451 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Sp)r(ecF)-7
-b(rame.)259 593 y Fd(frm)427 692 y Fj(P)n(oin)n(ter)34
-b(to)h(the)h(SkyF)-7 b(rame)34 b(whic)n(h)h(de\014nes)g(the)h(required)
-e(celestial)h(co)r(ordinate)f(system.)60 b(If)35 b(NULL)427
-792 y(is)c(supplied,)h(then)g(the)f(longitude)g(and)g(latitude)g(v)-5
-b(alues)31 b(are)f(returned)h(as)f(FK5)g(J2000)f(RA)i(and)g(Dec)427
-892 y(v)-5 b(alues.)259 1033 y Fd(lon)427 1133 y Fj(A)25
-b(p)r(oin)n(ter)f(to)g(a)g(double)g(in)h(whic)n(h)f(to)g(store)f(the)i
-(longitude)f(of)g(the)h(reference)e(p)r(oin)n(t,)j(in)e(the)h(co)r
-(ordinate)427 1233 y(system)j(represen)n(ted)e(b)n(y)h(the)h(supplied)g
-(SkyF)-7 b(rame)27 b(\(radians\).)259 1375 y Fd(lat)427
-1474 y Fj(A)h(p)r(oin)n(ter)f(to)h(a)f(double)h(in)f(whic)n(h)h(to)f
-(store)g(the)h(latitude)g(of)f(the)h(reference)f(p)r(oin)n(t,)h(in)g
-(the)g(co)r(ordinate)427 1574 y(system)g(represen)n(ted)e(b)n(y)h(the)h
-(supplied)g(SkyF)-7 b(rame)27 b(\(radians\).)0 1754 y
-Fd(Notes:)340 2054 y Fi(\017)45 b Fj(V)-7 b(alues)29
-b(of)g(AST)p Ft(__)p Fj(BAD)g(will)g(b)r(e)h(returned)e(if)i(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(the)f(AST)h(error)d(status)
-427 2154 y(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p 0 2371 3780 12 v 0 2503 a Fz(astGetRegionBounds)349
-b Fe(Returns)39 b(the)1472 2603 y(b)s(ounding)f(b)s(o)m(x)g(of)1713
-2716 y(Region)2541 2503 y Fz(astGetRegionBounds)0 2923
-y Fd(Description:)44 b Fj(This)36 b(function)g(returns)f(the)i(upp)r
-(er)f(and)f(lo)n(w)n(er)f(limits)j(of)e(a)h(b)r(o)n(x)f(whic)n(h)h
-(just)g(encompasses)e(the)227 3022 y(supplied)40 b(Region.)72
-b(The)40 b(limits)f(are)g(returned)g(as)g(axis)g(v)-5
-b(alues)39 b(within)h(the)g(F)-7 b(rame)39 b(represen)n(ted)f(b)n(y)h
-(the)227 3122 y(Region.)g(The)29 b(v)-5 b(alue)29 b(of)f(the)h(Negated)
-f(attribute)h(is)g(ignored)e(\(i.e.)40 b(it)29 b(is)g(assumed)f(that)h
-(the)g(Region)f(has)g(not)227 3222 y(b)r(een)g(negated\).)0
-3389 y Fd(Synopsis:)121 b Ft(void)42 b(astGetRegionBoun)o(ds)o(\()c
-(AstRegion)h Fi(\003)p Ft(this,)i(double)h Fi(\003)p
-Ft(lbnd,)f(double)g Fi(\003)p Ft(ubnd)g(\))0 3557 y Fd(P)m(arameters:)
-259 3711 y(this)427 3811 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259
-3953 y Fd(lbnd)427 4052 y Fj(P)n(oin)n(ter)22 b(to)h(an)g(arra)n(y)d
-(in)k(whic)n(h)f(to)g(return)f(the)i(lo)n(w)n(er)d(axis)i(b)r(ounds)g
-(co)n(v)n(ered)e(b)n(y)i(the)h(Region.)34 b(It)24 b(should)427
-4152 y(ha)n(v)n(e)h(at)h(least)g(as)f(man)n(y)g(elemen)n(ts)h(as)g
-(there)f(are)g(axes)g(in)i(the)f(Region.)36 b(If)26 b(an)g(axis)f(has)h
-(no)f(lo)n(w)n(er)g(limit,)427 4251 y(the)j(returned)f(v)-5
-b(alue)28 b(will)g(b)r(e)g(the)g(largest)e(p)r(ossible)h(negativ)n(e)g
-(v)-5 b(alue.)259 4393 y Fd(ubnd)427 4493 y Fj(P)n(oin)n(ter)20
-b(to)i(an)g(arra)n(y)d(in)j(whic)n(h)g(to)g(return)f(the)i(upp)r(er)f
-(axis)f(b)r(ounds)h(co)n(v)n(ered)e(b)n(y)h(the)h(Region.)35
-b(It)22 b(should)427 4593 y(ha)n(v)n(e)i(at)h(least)f(as)g(man)n(y)h
-(elemen)n(ts)f(as)h(there)f(are)g(axes)g(in)h(the)h(Region.)35
-b(If)25 b(an)g(axis)f(has)g(no)h(upp)r(er)g(limit,)427
-4692 y(the)j(returned)f(v)-5 b(alue)28 b(will)g(b)r(e)g(the)g(largest)e
-(p)r(ossible)h(p)r(ositiv)n(e)g(v)-5 b(alue.)0 4872 y
-Fd(Notes:)340 5173 y Fi(\017)45 b Fj(The)24 b(v)-5 b(alue)23
-b(of)h(the)g(Negated)f(attribute)h(is)g(ignored)e(\(i.e.)36
-b(it)24 b(is)g(assumed)f(that)h(the)g(Region)e(has)i(not)f(b)r(een)427
-5272 y(negated\).)340 5414 y Fi(\017)45 b Fj(If)25 b(an)e(axis)h(has)f
-(no)h(exten)n(t)g(on)g(an)f(axis)h(then)g(the)g(lo)n(w)n(er)f(limit)i
-(will)f(b)r(e)g(returned)g(larger)e(than)i(the)g(upp)r(er)427
-5514 y(limit.)39 b(Note,)28 b(this)g(is)g(di\013eren)n(t)g(to)g(an)g
-(axis)f(whic)n(h)h(has)g(a)f(constan)n(t)g(v)-5 b(alue)28
-b(\(in)h(whic)n(h)f(case)f(b)r(oth)h(lo)n(w)n(er)427
-5613 y(and)g(upp)r(er)f(limit)i(will)f(b)r(e)g(returned)f(set)g(to)h
-(the)g(constan)n(t)f(v)-5 b(alue\).)p eop end
-%%Page: 240 250
-TeXDict begin 240 249 bop 0 52 a FF(240)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astGetRegionF)-11 b(rame)226 b Fe(Obtain)38
-b(a)g(p)s(oin)m(ter)f(to)1460 598 y(the)i(encapsulated)1499
-712 y(F)-10 b(rame)38 b(within)f(a)1713 812 y(Region)2614
-483 y Fz(astGetRegionF)-11 b(rame)0 981 y Fd(Description:)44
-b Fj(This)28 b(function)g(returns)f(a)g(p)r(oin)n(ter)g(to)h(the)g(F)-7
-b(rame)27 b(represen)n(ted)f(b)n(y)i(a)f(Region.)0 1121
-y Fd(Synopsis:)121 b Ft(AstFrame)40 b Fi(\003)p Ft(astGetRegionFra)o
-(me\()d(AstRegion)j Fi(\003)p Ft(this)h(\))0 1261 y Fd(P)m(arameters:)
-259 1388 y(this)427 1487 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Region.)0
-1640 y Fd(Returned)k(V)-8 b(alue:)259 1766 y(astGetRegionF)g(rame\(\))
-427 1866 y Fj(A)37 b(p)r(oin)n(ter)f(to)h(a)f(deep)g(cop)n(y)g(of)g
-(the)h(F)-7 b(rame)36 b(represen)n(ted)g(b)n(y)g(the)h(Region.)63
-b(Using)36 b(this)h(p)r(oin)n(ter)f(to)427 1966 y(mo)r(dify)31
-b(the)f(F)-7 b(rame)29 b(will)h(ha)n(v)n(e)f(no)h(e\013ect)g(on)g(the)g
-(Region.)43 b(T)-7 b(o)30 b(mo)r(dify)g(the)g(Region,)g(use)g(the)g
-(Region)427 2065 y(p)r(oin)n(ter)d(directly)-7 b(.)0
-2218 y Fd(Notes:)340 2491 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 2590 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 2770 V 0 2902 a Fz(astGetRegionP)l
-(oin)l(ts)176 b Fe(Returns)39 b(the)f(p)s(ositions)1360
-3016 y(that)f(de\014ne)j(the)e(giv)m(en)1713 3130 y(Region)2612
-2902 y Fz(astGetRegionP)l(oin)l(ts)0 3299 y Fd(Description:)44
-b Fj(This)30 b(function)g(returns)e(the)i(axis)f(v)-5
-b(alues)29 b(at)g(the)h(p)r(oin)n(ts)f(that)h(de\014ne)f(the)h
-(supplied)g(Region.)42 b(The)227 3399 y(particular)25
-b(meaning)h(of)h(these)g(p)r(oin)n(ts)f(will)h(dep)r(end)g(on)f(the)h
-(t)n(yp)r(e)g(of)f(class)g(supplied,)h(as)f(listed)h(b)r(elo)n(w)f
-(under)227 3499 y Ft(")p Fj(Applicabilit)n(y:)p Ft(")p
-Fj(.)0 3638 y Fd(Synopsis:)121 b Ft(void)42 b(astGetRegionPoin)o(ts)o
-(\()c(AstRegion)h Fi(\003)p Ft(this,)i(int)i(maxpoint,)d(int)i
-(maxcoord,)e(int)i Fi(\003)p Ft(npoint,)227 3738 y(double)f
-Fi(\003)p Ft(points)g(\))0 3878 y Fd(P)m(arameters:)259
-4005 y(this)427 4104 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259
-4227 y Fd(maxp)s(oin)m(t)427 4327 y Fj(If)33 b(zero,)e(the)i(n)n(um)n
-(b)r(er)e(of)h(p)r(oin)n(ts)g(needed)g(to)g(de\014ne)g(the)g(Region)f
-(is)h(returned)f(in)h Ft(")p Fi(\003)p Fj(np)r(oin)n(t)p
-Ft(")p Fj(,)g(but)h(no)427 4427 y(axis)26 b(v)-5 b(alues)26
-b(are)f(returned)h(and)h(all)f(other)g(parameters)e(are)i(ignored.)35
-b(If)27 b(not)f(zero,)g(the)h(supplied)g(v)-5 b(alue)427
-4526 y(should)31 b(b)r(e)g(the)g(length)g(of)g(the)g(second)f
-(dimension)h(of)g(the)g Ft(")p Fj(p)r(oin)n(ts)p Ft(")f
-Fj(arra)n(y)-7 b(.)44 b(An)31 b(error)e(is)i(rep)r(orted)f(if)427
-4626 y(the)e(n)n(um)n(b)r(er)g(of)f(p)r(oin)n(ts)h(needed)f(to)h
-(de\014ne)g(the)g(Region)f(exceeds)g(this)g(n)n(um)n(b)r(er.)259
-4749 y Fd(maxco)s(ord)427 4849 y Fj(The)f(length)f(of)g(the)h(\014rst)f
-(dimension)h(of)f(the)h Ft(")p Fj(p)r(oin)n(ts)p Ft(")e
-Fj(arra)n(y)-7 b(.)34 b(An)26 b(error)d(is)i(rep)r(orted)g(if)h(the)g
-(n)n(um)n(b)r(er)f(of)427 4948 y(axes)i(in)h(the)g(supplied)g(Region)f
-(exceeds)g(this)g(n)n(um)n(b)r(er.)259 5072 y Fd(np)s(oin)m(t)427
-5171 y Fj(A)h(p)r(oin)n(ter)f(to)h(an)f(in)n(teger)g(in)h(whic)n(h)f
-(to)h(return)f(the)h(n)n(um)n(b)r(er)f(of)h(p)r(oin)n(ts)f(de\014ning)h
-(the)g(Region.)259 5295 y Fd(p)s(oin)m(ts)427 5394 y
-Fj(The)i(address)f(of)h(the)h(\014rst)f(elemen)n(t)g(in)h(a)e
-(2-dimensional)g(arra)n(y)f(of)i(shap)r(e)g Ft(")p Fj([maxco)r
-(ord][maxp)r(oin)n(t])p Ft(")p Fj(,)427 5494 y(in)h(whic)n(h)f(to)g
-(return)g(the)h(co)r(ordinate)e(v)-5 b(alues)30 b(at)g(the)h(p)r
-(ositions)f(that)g(de\014ne)h(the)f(Region.)45 b(These)30
-b(are)427 5593 y(stored)e(suc)n(h)h(that)g(the)g(v)-5
-b(alue)29 b(of)g(co)r(ordinate)f(n)n(um)n(b)r(er)g Ft(")p
-Fj(co)r(ord)p Ft(")f Fj(for)i(p)r(oin)n(t)g(n)n(um)n(b)r(er)f
-Ft(")p Fj(p)r(oin)n(t)p Ft(")h Fj(is)f(found)427 5693
-y(in)g(elemen)n(t)g Ft(")p Fj(p)r(oin)n(ts[co)r(ord][p)r(oin)n(t])p
-Ft(")p Fj(.)p eop end
-%%Page: 241 251
-TeXDict begin 241 250 bop 3643 52 a FF(241)0 351 y Fd(Class)31
-b(Applicabilit)m(y:)259 486 y(Region)427 586 y Fj(All)d(Regions)f(ha)n
-(v)n(e)f(this)i(attribute.)259 718 y Fd(Bo)m(x)427 817
-y Fj(The)g(\014rst)f(returned)g(p)r(osition)h(is)f(the)h(Bo)n(x)f(cen)n
-(tre,)g(and)g(the)h(second)f(is)h(a)f(Bo)n(x)f(corner.)259
-949 y Fd(Circle)427 1049 y Fj(The)c(\014rst)f(returned)g(p)r(osition)g
-(is)g(the)h(Circle)e(cen)n(tre,)i(and)g(the)f(second)g(is)g(a)g(p)r
-(oin)n(t)g(on)g(the)h(circumference.)259 1180 y Fd(CmpRegion)427
-1280 y Fj(Returns)28 b(a)g(v)-5 b(alue)28 b(of)g(zero)f(for)h
-Ft(")p Fi(\003)p Fj(np)r(oin)n(t)p Ft(")f Fj(and)h(lea)n(v)n(es)f(the)h
-(supplied)h(arra)n(y)d(con)n(ten)n(ts)h(unc)n(hanged.)38
-b(T)-7 b(o)427 1379 y(\014nd)25 b(the)f(p)r(oin)n(ts)g(de\014ning)f(a)h
-(CmpRegion,)g(use)g(this)g(metho)r(d)g(on)g(the)g(comp)r(onen)n(t)g
-(Regions,)f(whic)n(h)h(can)427 1479 y(b)r(e)k(accessed)f(b)n(y)g(in)n
-(v)n(oking)f(astDecomp)r(ose)h(on)g(the)h(CmpRegion.)259
-1611 y Fd(Ellipse)427 1710 y Fj(The)h(\014rst)g(returned)f(p)r(osition)
-h(is)g(the)g(Ellipse)g(cen)n(tre.)40 b(The)29 b(second)f(is)h(the)g
-(end)g(of)g(one)g(of)f(the)i(axes)e(of)427 1810 y(the)k(ellipse.)48
-b(The)31 b(third)g(is)g(some)g(other)g(p)r(oin)n(t)g(on)g(the)h
-(circumference)e(of)h(the)h(ellipse,)g(distinct)g(from)427
-1910 y(the)c(second)f(p)r(oin)n(t.)259 2041 y Fd(In)m(terv)-5
-b(al)427 2141 y Fj(The)30 b(\014rst)g(p)r(oin)n(t)g(corresp)r(onds)e
-(to)i(the)g(lo)n(w)n(er)f(b)r(ounds)h(p)r(osition,)g(and)g(the)g
-(second)f(p)r(oin)n(t)i(corresp)r(onds)427 2240 y(to)k(the)f(upp)r(er)h
-(b)r(ounds)f(p)r(osition.)57 b(These)34 b(are)g(rev)n(ersed)e(to)j
-(indicate)f(an)g(extcluded)h(in)n(terv)-5 b(al)34 b(rather)427
-2340 y(than)28 b(an)f(included)h(in)n(terv)-5 b(al.)37
-b(See)27 b(the)h(In)n(terv)-5 b(al)27 b(constructor)f(for)h(more)g
-(information.)259 2472 y Fd(NullRegion)427 2571 y Fj(Returns)h(a)f(v)-5
-b(alue)27 b(of)h(zero)e(for)i Ft(")p Fi(\003)p Fj(np)r(oin)n(t)p
-Ft(")e Fj(and)i(lea)n(v)n(es)e(the)i(supplied)f(arra)n(y)f(con)n(ten)n
-(ts)h(unc)n(hanged.)259 2703 y Fd(P)m(oin)m(tList)427
-2803 y Fj(The)h(p)r(ositions)f(returned)g(are)g(those)g(that)h(w)n(ere)
-f(supplied)h(when)f(the)h(P)n(oin)n(tList)f(w)n(as)f(constructed.)259
-2934 y Fd(P)m(olygon)427 3034 y Fj(The)36 b(p)r(ositions)f(returned)g
-(are)f(the)i(v)n(ertex)f(p)r(ositions)g(that)g(w)n(ere)g(supplied)h
-(when)f(the)h(P)n(olygon)e(w)n(as)427 3133 y(constructed.)259
-3265 y Fd(Prism)427 3365 y Fj(Returns)28 b(a)g(v)-5 b(alue)28
-b(of)g(zero)f(for)h Ft(")p Fi(\003)p Fj(np)r(oin)n(t)p
-Ft(")f Fj(and)h(lea)n(v)n(es)f(the)h(supplied)h(arra)n(y)d(con)n(ten)n
-(ts)h(unc)n(hanged.)38 b(T)-7 b(o)427 3464 y(\014nd)31
-b(the)g(p)r(oin)n(ts)g(de\014ning)g(a)f(Prism,)g(use)h(this)g(metho)r
-(d)g(on)f(the)h(comp)r(onen)n(t)g(Regions,)f(whic)n(h)h(can)f(b)r(e)427
-3564 y(accessed)d(b)n(y)g(in)n(v)n(oking)f(astDecomp)r(ose)h(on)g(the)h
-(CmpRegion.)0 3725 y Fd(Notes:)340 4006 y Fi(\017)45
-b Fj(If)21 b(the)h(co)r(ordinate)d(system)i(represen)n(ted)e(b)n(y)h
-(the)i(Region)e(has)g(b)r(een)h(c)n(hanged)f(since)g(it)h(w)n(as)f
-(\014rst)g(created,)427 4105 y(the)h(returned)f(axis)f(v)-5
-b(alues)20 b(refer)g(to)g(the)g(new)h(\(c)n(hanged\))e(co)r(ordinate)g
-(system,)j(rather)d(than)i(the)f(original)427 4205 y(co)r(ordinate)27
-b(system.)37 b(Note)28 b(ho)n(w)n(ev)n(er)e(that)i(if)g(the)g
-(transformation)f(from)g(original)f(to)i(new)g(co)r(ordinate)427
-4305 y(system)j(is)f(non-linear,)g(the)h(shap)r(e)f(within)i(the)f(new)
-f(co)r(ordinate)g(system)g(ma)n(y)g(b)r(e)h(distorted,)g(and)f(so)427
-4404 y(ma)n(y)d(not)h(matc)n(h)f(that)h(implied)g(b)n(y)g(the)f(name)h
-(of)f(the)h(Region)f(sub)r(class)g(\(Circle,)h(Bo)n(x,)e(etc\).)p
-0 4601 3780 12 v 0 4733 a Fz(astGetStcCo)t(ord)203 b
-Fe(Return)39 b(information)c(ab)s(out)j(an)1107 4832
-y(AstroCo)s(ords)e(elemen)m(t)h(stored)h(in)1727 4932
-y(an)h(Stc)2838 4733 y Fz(astGetStcCo)t(ord)0 5095 y
-Fd(Description:)44 b Fj(When)29 b(an)n(y)d(sub-class)h(of)g(Stc)h(is)g
-(created,)f(the)h(constructor)e(function)i(allo)n(ws)f(one)g(or)g(more)
-g(Astro-)227 5195 y(Co)r(ords)j(elemen)n(ts)g(to)h(b)r(e)g(stored)e
-(within)j(the)f(Stc.)46 b(This)31 b(function)g(allo)n(ws)e(an)n(y)h
-(one)g(of)h(these)g(AstroCo)r(ords)227 5295 y(elemen)n(ts)37
-b(to)h(b)r(e)f(retriev)n(ed.)65 b(The)37 b(format)g(of)g(the)h
-(returned)f(information)g(is)g(the)h(same)e(as)h(that)g(used)h(to)227
-5394 y(pass)e(the)h(original)e(information)h(to)g(the)h(Stc)g
-(constructor.)62 b(That)36 b(is,)j(the)e(information)f(is)g(returned)g
-(in)h(a)227 5494 y(KeyMap)29 b(structure)g(con)n(taining)g(elemen)n(ts)
-g(with)i(one)e(or)g(more)g(of)g(the)h(k)n(eys)f(giv)n(en)g(b)n(y)g(sym)
-n(b)r(olic)h(constan)n(ts)227 5593 y(AST)p Ft(__)p Fj(STCNAME,)40
-b(AST)p Ft(__)p Fj(STCV)-9 b(ALUE,)40 b(AST)p Ft(__)p
-Fj(STCERR)n(OR,)e(AST)p Ft(__)p Fj(STCRES,)i(AST)p Ft(__)p
-Fj(STCSIZE)227 5693 y(and)28 b(AST)p Ft(__)p Fj(STCPIXSZ.)p
-eop end
-%%Page: 242 252
-TeXDict begin 242 251 bop 0 52 a FF(242)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)227 351 y Fj(If)23
-b(the)g(co)r(ordinate)f(system)g(represen)n(ted)g(b)n(y)g(the)h(Stc)g
-(has)f(b)r(een)h(c)n(hanged)f(since)g(it)h(w)n(as)f(created)f(\(for)i
-(instance,)227 451 y(b)n(y)h(c)n(hanging)f(its)i(System)g(attribute\),)
-g(then)g(the)g(sizes)f(and)g(p)r(ositions)g(in)h(the)g(returned)f
-(KeyMap)f(will)i(re\015ect)227 551 y(the)j(c)n(hange)f(in)h(co)r
-(ordinate)e(system.)0 703 y Fd(Synopsis:)121 b Ft(AstKeyMap)40
-b Fi(\003)p Ft(astGetStcCoord)o(\()e(AstStc)j Fi(\003)p
-Ft(this,)g(int)h(icoord)f(\))0 856 y Fd(P)m(arameters:)259
-995 y(this)427 1095 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Stc.)259
-1229 y Fd(ico)s(ord)427 1329 y Fj(The)35 b(index)g(of)g(the)g(AstroCo)r
-(ords)e(elemen)n(t)j(required.)57 b(The)35 b(\014rst)g(has)f(index)i
-(one.)58 b(The)35 b(n)n(um)n(b)r(er)g(of)427 1428 y(AstroCo)r(ords)26
-b(elemen)n(ts)h(in)h(the)g(Stc)g(can)f(b)r(e)h(found)g(using)g
-(function)g(astGetStcNco)r(ord.)0 1593 y Fd(Returned)k(V)-8
-b(alue:)259 1733 y(astGetStcCo)s(ord\(\))427 1832 y Fj(A)28
-b(p)r(oin)n(ter)f(to)h(a)f(new)h(KeyMap)e(con)n(taining)h(the)h
-(required)f(information.)0 1997 y Fd(Notes:)340 2283
-y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g
-(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g
-(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 2383
-y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f
-(an)n(y)g(reason.)p 0 2585 3780 12 v 0 2717 a Fz(astGetStcNCo)t(ord)284
-b Fe(Return)38 b(the)h(n)m(um)m(b)s(er)f(of)1328 2816
-y(AstroCo)s(ords)e(elemen)m(ts)1483 2916 y(stored)i(in)g(an)h(Stc)2732
-2717 y Fz(astGetStcNCo)t(ord)0 3085 y Fd(Description:)44
-b Fj(This)28 b(function)g(returns)f(the)h(n)n(um)n(b)r(er)f(of)h
-(AstroCo)r(ords)e(elemen)n(ts)h(stored)g(in)h(an)f(Stc.)0
-3237 y Fd(Synopsis:)121 b Ft(int)42 b(astGetStcNCoord\()37
-b(AstStc)k Fi(\003)p Ft(this)h(\))0 3390 y Fd(P)m(arameters:)259
-3529 y(this)427 3629 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Stc.)0
-3794 y Fd(Returned)k(V)-8 b(alue:)259 3933 y(astGetStcNCo)s(ord\(\))427
-4033 y Fj(The)28 b(n)n(um)n(b)r(er)f(of)h(AstroCo)r(ords)e(elemen)n(ts)
-h(stored)g(in)h(the)g(Stc.)0 4198 y Fd(Notes:)340 4484
-y Fi(\017)45 b Fj(Zero)26 b(will)g(b)r(e)h(returned)f(if)h(this)g
-(function)g(is)g(in)n(v)n(ok)n(ed)e(with)i(the)g(AST)g(error)d(status)i
-(set,)h(or)f(if)h(it)g(should)427 4583 y(fail)h(for)f(an)n(y)g(reason.)
-p 0 4786 V 0 4917 a Fz(astGetStcRegion)375 b Fe(Obtain)38
-b(a)g(cop)m(y)h(of)f(the)1137 5032 y(encapsulated)e(Region)g(within)f
-(a)1808 5145 y(Stc)2794 4917 y Fz(astGetStcRegion)0 5314
-y Fd(Description:)44 b Fj(This)30 b(function)g(returns)f(a)h(p)r(oin)n
-(ter)f(to)h(a)f(deep)h(cop)n(y)f(of)g(the)h(Region)f(supplied)h(when)g
-(the)h(Stc)f(w)n(as)227 5413 y(created.)0 5566 y Fd(Synopsis:)121
-b Ft(AstRegion)40 b Fi(\003)p Ft(astGetStcRegio)o(n\()d(AstStc)k
-Fi(\003)p Ft(this)h(\))0 5718 y Fd(P)m(arameters:)p eop
-end
-%%Page: 243 253
-TeXDict begin 243 252 bop 3643 52 a FF(243)259 351 y
-Fd(this)427 451 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Stc.)0
-611 y Fd(Returned)k(V)-8 b(alue:)259 745 y(astGetStcRegion\(\))427
-845 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(a)f(deep)h(cop)n(y)f(of)g(the)h
-(Region)f(encapsulated)g(within)h(the)g(supplied)g(Stc.)0
-1005 y Fd(Notes:)340 1285 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 1385 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 1580 3780 12 v 0 1711
-a Fz(astGetUnc)896 1712 y Fe(Obtain)38 b(uncertain)m(t)m(y)e
-(information)f(from)j(a)1713 1825 y(Region)3152 1711
-y Fz(astGetUnc)0 2010 y Fd(Description:)44 b Fj(This)24
-b(function)h(returns)e(a)h(Region)f(whic)n(h)h(represen)n(ts)e(the)j
-(uncertain)n(t)n(y)e(asso)r(ciated)g(with)h(p)r(ositions)227
-2109 y(within)32 b(the)f(supplied)g(Region.)46 b(See)31
-b(astSetUnc)g(for)f(more)g(information)g(ab)r(out)h(Region)f(uncertain)
-n(ties)g(and)227 2209 y(their)e(use.)0 2356 y Fd(Synopsis:)121
-b Ft(AstRegion)40 b Fi(\003)p Ft(astGetUnc\()f(AstRegion)h
-Fi(\003)p Ft(this,)h(int)h(def)g(\))0 2504 y Fd(P)m(arameters:)259
-2638 y(this)427 2738 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259
-2869 y Fd(def)427 2968 y Fj(Con)n(trols)i(what)i(is)f(returned)g(if)h
-(no)f(uncertain)n(t)n(y)g(information)g(has)f(b)r(een)i(asso)r(ciated)e
-(explicitly)i(with)427 3068 y(the)24 b(supplied)f(Region.)35
-b(If)24 b(a)e(non-zero)g(v)-5 b(alue)23 b(is)g(supplied,)h(then)g(the)f
-(default)h(uncertain)n(t)n(y)e(Region)h(used)427 3168
-y(in)n(ternally)f(within)i(AST)g(is)e(returned)h(\(see)g
-Ft(")p Fj(Applicabilit)n(y)p Ft(")f Fj(b)r(elo)n(w\).)35
-b(If)24 b(zero)e(is)g(supplied,)j(then)e(NULL)427 3267
-y(will)28 b(b)r(e)g(returned)f(\(without)i(error\).)0
-3427 y Fd(Class)i(Applicabilit)m(y:)259 3561 y(CmpRegion)427
-3661 y Fj(The)f(default)g(uncertain)n(t)n(y)f(for)g(a)h(CmpRegion)f(is)
-g(tak)n(en)h(from)f(one)g(of)h(the)g(t)n(w)n(o)f(comp)r(onen)n(t)g
-(Regions.)427 3761 y(If)35 b(the)f(\014rst)g(comp)r(onen)n(t)f(Region)h
-(has)f(a)g(non-default)h(uncertain)n(t)n(y)-7 b(,)35
-b(then)f(it)h(is)f(used)g(as)f(the)h(default)427 3860
-y(uncertain)n(t)n(y)g(for)g(the)h(paren)n(t)f(CmpRegion.)58
-b(Otherwise,)35 b(if)g(the)h(second)e(comp)r(onen)n(t)g(Region)g(has)g
-(a)427 3960 y(non-default)25 b(uncertain)n(t)n(y)-7 b(,)25
-b(then)g(it)h(is)e(used)h(as)f(the)i(default)f(uncertain)n(t)n(y)f(for)
-h(the)g(paren)n(t)f(CmpRegion.)427 4060 y(If)g(neither)f(of)g(the)g
-(comp)r(onen)n(t)g(Regions)f(has)g(non-default)h(uncertain)n(t)n(y)-7
-b(,)23 b(then)h(the)f(default)g(uncertain)n(t)n(y)427
-4159 y(for)k(the)h(CmpRegion)f(is)h(1.0E-6)d(of)j(the)g(b)r(ounding)g
-(b)r(o)n(x)f(of)g(the)h(CmpRegion.)259 4290 y Fd(Prism)427
-4390 y Fj(The)j(default)g(uncertain)n(t)n(y)f(for)g(a)h(Prism)e(is)i
-(formed)f(b)n(y)h(com)n(bining)f(the)h(uncertain)n(ties)f(from)g(the)h
-(t)n(w)n(o)427 4489 y(comp)r(onen)n(t)24 b(Regions.)35
-b(If)25 b(a)f(comp)r(onen)n(t)g(Region)g(do)r(es)g(not)g(ha)n(v)n(e)f
-(a)h(non-default)g(uncertain)n(t)n(y)-7 b(,)25 b(then)f(its)427
-4589 y(default)k(uncertain)n(t)n(y)f(will)h(b)r(e)g(used)f(to)h(form)f
-(the)h(default)g(uncertain)n(t)n(y)f(of)g(the)h(paren)n(t)f(Prism.)259
-4720 y Fd(Region)427 4819 y Fj(F)-7 b(or)37 b(other)g(classes)f(of)h
-(Region,)i(the)f(default)f(uncertain)n(t)n(y)g(is)g(1.0E-6)e(of)i(the)h
-(b)r(ounding)f(b)r(o)n(x)g(of)g(the)427 4919 y(Region.)f(If)28
-b(the)f(b)r(ounding)h(b)r(o)n(x)e(has)h(zero)f(width)i(on)f(an)n(y)f
-(axis,)g(then)i(the)g(uncertain)n(t)n(y)e(will)h(b)r(e)h(1.0E-6)427
-5019 y(of)g(the)g(axis)f(v)-5 b(alue.)0 5178 y Fd(Returned)32
-b(V)-8 b(alue:)259 5313 y(astGetUnc\(\))427 5413 y Fj(A)28
-b(p)r(oin)n(ter)f(to)h(a)f(Region)g(describing)g(the)h(uncertain)n(t)n
-(y)e(in)i(the)g(supplied)g(Region.)0 5572 y Fd(Notes:)p
-eop end
-%%Page: 244 254
-TeXDict begin 244 253 bop 0 52 a FF(244)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(If)29 b(uncertain)n(t)n(y)f(information)g(is)h(asso)r(ciated)e
-(with)i(a)f(Region,)g(and)h(the)g(co)r(ordinate)e(system)i(describ)r
-(ed)427 451 y(b)n(y)c(the)g(Region)f(is)g(subsequen)n(tly)g(c)n(hanged)
-g(\(e.g.)36 b(b)n(y)24 b(c)n(hanging)f(the)i(v)-5 b(alue)25
-b(of)f(its)h(System)g(attribute,)g(or)427 551 y(using)c(the)g
-(astMapRegion)f(function\),)j(then)f(the)f(uncertain)n(t)n(y)f
-(information)g(returned)h(b)n(y)g(this)g(function)427
-650 y(will)j(b)r(e)h(mo)r(di\014ed)f(so)f(that)h(it)h(refers)e(to)g
-(the)i(co)r(ordinate)d(system)i(curren)n(tly)f(describ)r(ed)g(b)n(y)h
-(the)g(supplied)427 750 y(Region.)340 895 y Fi(\017)45
-b Fj(A)26 b(n)n(ull)f(Ob)5 b(ject)24 b(p)r(oin)n(ter)h(\(NULL\))h(will)
-f(b)r(e)g(returned)g(if)g(this)h(function)f(is)g(in)n(v)n(ok)n(ed)e
-(with)j(the)f(AST)h(error)427 994 y(status)i(set,)f(or)g(if)h(it)g
-(should)g(fail)f(for)g(an)n(y)g(reason.)p 0 1217 3780
-12 v 0 1349 a Fz(astGrfP)l(op)173 b Fe(Restore)38 b(previously)f(sa)m
-(v)m(ed)h(graphics)g(functions)1518 1464 y(used)h(b)m(y)g(a)f(Plot)3177
-1349 y Fz(astGrfP)l(op)0 1676 y Fd(Description:)44 b
-Fj(This)34 b(function)g(restores)d(a)i(snapshot)g(of)g(the)h(graphics)e
-(functions)i(stored)e(previously)g(b)n(y)h(calling)227
-1776 y(astGrfPush.)51 b(The)33 b(restored)e(graphics)g(functions)i(b)r
-(ecome)g(the)g(curren)n(t)e(graphics)g(functions)i(used)g(b)n(y)f(the)
-227 1875 y(Plot.)227 2012 y(The)26 b(astGrfPush)f(and)h(astGrfP)n(op)e
-(functions)i(are)f(in)n(tended)i(for)e(situations)g(where)h(it)g(is)g
-(necessary)e(to)h(mak)n(e)227 2112 y(temp)r(orary)j(c)n(hanges)g(to)h
-(the)g(graphics)f(functions)h(used)g(b)n(y)g(the)g(Plot.)41
-b(The)29 b(curren)n(t)f(functions)h(should)g(\014rst)227
-2211 y(b)r(e)35 b(sa)n(v)n(ed)e(b)n(y)g(calling)h(astGrfPush.)56
-b(New)34 b(functions)g(should)g(then)h(b)r(e)g(registered)d(using)i
-(astGrfSet.)57 b(The)227 2311 y(required)36 b(graphics)f(should)i(then)
-g(b)r(e)g(pro)r(duced.)64 b(Finally)-7 b(,)39 b(astGrfP)n(op)c(should)i
-(b)r(e)g(called)f(to)h(restore)e(the)227 2410 y(original)26
-b(graphics)g(functions.)0 2584 y Fd(Synopsis:)121 b Ft(void)42
-b(astGrfPop\()d(AstPlot)i Fi(\003)p Ft(this)g(\))0 2757
-y Fd(P)m(arameters:)259 2917 y(this)427 3017 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Plot.)0 3203 y Fd(Notes:)340 3509 y Fi(\017)45
-b Fj(This)24 b(function)f(returns)g(without)h(action)e(if)i(there)f
-(are)f(no)h(snapshots)g(to)g(restore.)34 b(No)23 b(error)e(is)i(rep)r
-(orted)427 3609 y(in)28 b(this)g(case.)p 0 3832 V 0 3963
-a Fz(astGrfPush)186 b Fe(Sa)m(v)m(e)38 b(the)h(curren)m(t)e(graphics)g
-(functions)h(used)1652 4078 y(b)m(y)g(a)h(Plot)3113 3963
-y Fz(astGrfPush)0 4291 y Fd(Description:)44 b Fj(This)34
-b(function)h(tak)n(es)e(a)h(snapshot)f(of)h(the)g(graphics)f(functions)
-h(whic)n(h)g(are)f(curren)n(tly)g(registered)227 4390
-y(with)h(the)g(supplied)f(Plot,)i(and)e(sa)n(v)n(es)e(the)j(snapshot)e
-(on)h(a)g(\014rst-in-last-out)f(stac)n(k)g(within)i(the)g(Plot.)54
-b(The)227 4490 y(snapshot)27 b(can)g(b)r(e)h(restored)f(later)f(using)i
-(function)g(astGrfP)n(op.)227 4626 y(The)e(astGrfPush)f(and)h(astGrfP)n
-(op)e(functions)i(are)f(in)n(tended)i(for)e(situations)g(where)h(it)g
-(is)g(necessary)e(to)h(mak)n(e)227 4726 y(temp)r(orary)j(c)n(hanges)g
-(to)h(the)g(graphics)f(functions)h(used)g(b)n(y)g(the)g(Plot.)41
-b(The)29 b(curren)n(t)f(functions)h(should)g(\014rst)227
-4826 y(b)r(e)35 b(sa)n(v)n(ed)e(b)n(y)g(calling)h(astGrfPush.)56
-b(New)34 b(functions)g(should)g(then)h(b)r(e)g(registered)d(using)i
-(astGrfSet.)57 b(The)227 4925 y(required)36 b(graphics)f(should)i(then)
-g(b)r(e)g(pro)r(duced.)64 b(Finally)-7 b(,)39 b(astGrfP)n(op)c(should)i
-(b)r(e)g(called)f(to)h(restore)e(the)227 5025 y(original)26
-b(graphics)g(functions.)0 5198 y Fd(Synopsis:)121 b Ft(void)42
-b(astGrfPush\()d(AstPlot)i Fi(\003)p Ft(this)g(\))0 5371
-y Fd(P)m(arameters:)259 5532 y(this)427 5631 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Plot.)p eop end
-%%Page: 245 255
-TeXDict begin 245 254 bop 3643 52 a FF(245)p 0 351 3780
-12 v 0 483 a Fz(astGrfSet)163 b Fe(Register)38 b(a)g(graphics)g
-(function)f(for)h(use)h(b)m(y)g(a)f(Plot)161 b Fz(astGrfSet)0
-681 y Fd(Description:)44 b Fj(This)25 b(function)g(can)f(b)r(e)g(used)h
-(to)f(select)g(the)h(underlying)f(graphics)f(functions)h(to)h(b)r(e)f
-(used)h(when)f(the)227 781 y(supplied)i(Plot)e(pro)r(duces)h(graphical)
-e(output.)37 b(If)25 b(this)h(function)f(is)g(not)g(called)g(prior)f
-(to)h(pro)r(ducing)f(graphical)227 880 y(output,)j(then)e(the)h
-(underlying)f(graphics)f(functions)h(selected)h(at)f(link-time)g
-(\(using)g(the)h(ast)p Ft(_)p Fj(link)f(command\))227
-980 y(will)30 b(b)r(e)g(used.)44 b(T)-7 b(o)29 b(use)g(alternativ)n(e)g
-(graphics)f(functions,)j(call)e(this)h(function)g(b)r(efore)g(the)g
-(graphical)e(output)227 1080 y(is)i(created,)h(sp)r(ecifying)f(the)h
-(graphics)e(functions)h(to)g(b)r(e)h(used.)45 b(This)30
-b(will)h(register)e(the)i(function)f(for)g(future)227
-1179 y(use,)e(but)g(the)g(function)g(will)g(not)g(actually)e(b)r(e)j
-(used)e(un)n(til)h(the)g(Grf)g(attribute)g(is)f(giv)n(en)g(a)g
-(non-zero)f(v)-5 b(alue.)0 1338 y Fd(Synopsis:)121 b
-Ft(void)42 b(astGrfSet\()d(AstPlot)i Fi(\003)p Ft(this,)g(const)g(char)
-h Fi(\003)p Ft(name,)f(AstGrfFun)f(fun)j(\))0 1497 y
-Fd(P)m(arameters:)259 1643 y(this)427 1743 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Plot.)259 1880 y Fd(name)427 1980 y Fj(A)g(name)f
-(indicating)g(the)h(graphics)d(function)j(to)f(b)r(e)h(replaced.)36
-b(V)-7 b(arious)26 b(graphics)g(functions)h(are)g(used)427
-2079 y(b)n(y)d(the)h(Plot)f(class,)g(and)h(an)n(y)e(com)n(bination)h
-(of)g(them)h(ma)n(y)f(b)r(e)h(supplied)f(b)n(y)h(calling)e(this)i
-(function)g(once)427 2179 y(for)f(eac)n(h)g(function)g(to)h(b)r(e)f
-(replaced.)35 b(If)25 b(an)n(y)e(of)i(the)f(graphics)f(functions)i(are)
-e(not)h(replaced)g(in)g(this)h(w)n(a)n(y)-7 b(,)427 2279
-y(the)26 b(corresp)r(onding)d(functions)i(in)h(the)f(graphics)f(in)n
-(terface)g(selected)h(at)g(link-time)h(\(using)f(the)g(ast)p
-Ft(_)p Fj(link)427 2378 y(command\))j(are)e(used.)37
-b(The)28 b(allo)n(w)n(ed)e(names)h(are:)510 2608 y Fi(\017)45
-b Fj(A)n(ttr)28 b(-)f(Enquire)g(or)g(set)g(a)h(graphics)e(attribute)h
-(v)-5 b(alue)510 2727 y Fi(\017)45 b Fj(Cap)28 b(-)f(Inquire)g(a)g
-(capabilit)n(y)510 2846 y Fi(\017)45 b Fj(Flush)28 b(-)g(Flush)f(all)h
-(p)r(ending)g(graphics)e(to)h(the)h(output)g(device)510
-2965 y Fi(\017)45 b Fj(Line)28 b(-)f(Dra)n(w)g(a)g(p)r(olyline)h
-(\(i.e.)37 b(a)27 b(set)h(of)f(connected)h(lines\))510
-3083 y Fi(\017)45 b Fj(Mark)27 b(-)g(Dra)n(w)g(a)g(set)h(of)f(mark)n
-(ers)510 3202 y Fi(\017)45 b Fj(Qc)n(h)27 b(-)h(Return)f(the)h(c)n
-(haracter)e(heigh)n(t)h(in)h(w)n(orld)f(co)r(ordinates)510
-3320 y Fi(\017)45 b Fj(Scales)27 b(-)h(Get)g(the)g(axis)e(scales)510
-3439 y Fi(\017)45 b Fj(T)-7 b(ext)28 b(-)f(Dra)n(w)g(a)g(c)n(haracter)f
-(string)510 3558 y Fi(\017)45 b Fj(TxExt)27 b(-)h(Get)g(the)g(exten)n
-(t)f(of)h(a)f(c)n(haracter)f(string)427 3695 y(The)k(string)g(is)g
-(case)f(insensitiv)n(e.)44 b(F)-7 b(or)30 b(details)f(of)h(the)h(in)n
-(terface)e(required)g(for)h(eac)n(h,)g(see)g(the)g(sections)427
-3795 y(b)r(elo)n(w.)259 3932 y Fd(fun)427 4032 y Fj(A)37
-b(P)n(oin)n(ter)e(to)i(the)g(function)g(to)f(b)r(e)h(used)g(to)f(pro)n
-(vide)g(the)g(functionalit)n(y)h(indicated)g(b)n(y)f(parameter)427
-4132 y(name.)h(The)26 b(in)n(terface)g(for)g(eac)n(h)g(function)i(is)e
-(describ)r(ed)g(b)r(elo)n(w,)h(but)g(the)g(function)h(p)r(oin)n(ter)e
-(should)g(b)r(e)427 4231 y(cast)h(to)h(a)f(t)n(yp)r(e)h(of)f(AstGrfF)-7
-b(un)29 b(when)f(calling)f(astGrfSet.)427 4350 y(Once)34
-b(a)g(function)h(has)e(b)r(een)i(pro)n(vided,)g(a)f(n)n(ull)g(p)r(oin)n
-(ter)g(can)g(b)r(e)g(supplied)h(in)f(a)g(subsequen)n(t)g(call)g(to)427
-4449 y(astGrfSet)22 b(to)f(reset)g(the)h(function)g(to)g(the)f(corresp)
-r(onding)f(function)i(in)g(the)g(graphics)e(in)n(terface)h(selected)427
-4549 y(at)28 b(link-time.)-2 4720 y Fd(F)-8 b(unction)32
-b(In)m(terfaces)n(:)227 4866 y Fj(All)i(the)f(functions)g(listed)g(b)r
-(elo)n(w)g(\(except)g(for)g Ft(")p Fj(Cap)p Ft(")p Fj(\))f(should)g
-(return)h(an)f(in)n(teger)g(v)-5 b(alue)33 b(of)g(0)g(if)g(an)g(error)
-227 4966 y(o)r(ccurs,)43 b(and)d(1)f(otherwise.)74 b(All)40
-b(x)g(and)g(y)g(v)-5 b(alues)40 b(refer)f(to)h Ft(")p
-Fj(graphics)e(cordinates)p Ft(")h Fj(as)g(de\014ned)h(b)n(y)g(the)227
-5066 y(graph)n(b)r(o)n(x)26 b(parameter)g(of)i(the)g(astPlot)e(call)h
-(whic)n(h)h(created)f(the)h(Plot.)227 5195 y(The)i(\014rst)f(parameter)
-f(\()p Ft(")p Fj(grfcon)p Ft(")p Fj(\))g(for)h(eac)n(h)g(function)h(is)
-g(an)f(AST)h(KeyMap)e(p)r(oin)n(ter)i(that)f(can)g(b)r(e)h(used)g(b)n
-(y)227 5295 y(the)24 b(called)f(function)h(to)f(establish)g(the)h(con)n
-(text)e(in)i(whic)n(h)f(it)h(is)f(b)r(eing)h(called.)35
-b(The)23 b(con)n(ten)n(ts)g(of)g(the)h(KeyMap)227 5394
-y(are)h(determined)i(b)n(y)f(the)g(calling)g(application,)f(whic)n(h)h
-(should)g(obtain)g(a)g(p)r(oin)n(ter)g(to)g(the)g(KeyMap)f(using)h(the)
-227 5494 y(astGetGrfCon)n(text)34 b(function,)j(and)d(then)h(store)f
-(an)n(y)g(necessary)e(information)i(in)h(the)g(KeyMap)e(using)h(the)227
-5593 y(metho)r(ds)e(of)f(the)h(KeyMap)e(class.)47 b(Note,)33
-b(the)f(functions)f(listed)h(b)r(elo)n(w)f(should)g(nev)n(er)f(ann)n
-(ul)h(or)g(delete)g(the)227 5693 y(supplied)d(KeyMap)f(p)r(oin)n(ter.)p
-eop end
-%%Page: 246 256
-TeXDict begin 246 255 bop 0 52 a FF(246)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)-2 351 y Fd(A)m(ttr)n(:)227
-497 y Fj(The)38 b Ft(")p Fj(A)n(ttr)p Ft(")e Fj(function)i(returns)e
-(the)i(curren)n(t)e(v)-5 b(alue)37 b(of)h(a)e(sp)r(eci\014ed)i
-(graphics)e(attribute,)j(and)e(optionally)227 597 y(establishes)23
-b(a)h(new)g(v)-5 b(alue.)35 b(The)24 b(supplied)h(v)-5
-b(alue)23 b(is)h(con)n(v)n(erted)f(to)g(an)h(in)n(teger)f(v)-5
-b(alue)24 b(if)g(necessary)e(b)r(efore)i(use.)227 697
-y(It)k(requires)e(the)i(follo)n(wing)f(in)n(terface:)227
-827 y(in)n(t)h(A)n(ttr\()g(AstOb)5 b(ject)28 b Fi(\003)p
-Fj(grfcon,)e(in)n(t)i(attr,)f(double)h(v)-5 b(alue,)27
-b(double)h Fi(\003)p Fj(old)p Ft(_)p Fj(v)-5 b(alue,)26
-b(in)n(t)i(prim)g(\))340 1107 y Fi(\017)45 b Fj(grfcon)27
-b(-)g(A)h(KeyMap)f(con)n(taining)f(information)h(passed)g(from)g(the)h
-(calling)f(application.)340 1246 y Fi(\017)45 b Fj(attr)39
-b(-)f(An)h(in)n(teger)f(v)-5 b(alue)39 b(iden)n(tifying)g(the)g
-(required)f(attribute.)70 b(The)39 b(follo)n(wing)f(sym)n(b)r(olic)g(v)
--5 b(alues)427 1345 y(are)27 b(de\014ned)i(in)g(grf.h:)37
-b(GRF)p Ft(__)p Fj(STYLE)28 b(\(Line)h(st)n(yle\),)f(GRF)p
-Ft(__)p Fj(WIDTH)h(\(Line)f(width\),)i(GRF)p Ft(__)p
-Fj(SIZE)427 1445 y(\(Character)f(and)i(mark)n(er)d(size)j(scale)e
-(factor\),)i(GRF)p Ft(__)p Fj(F)n(ONT)f(\(Character)f(fon)n(t\),)j(GRF)
-p Ft(__)p Fj(COLOUR)427 1544 y(\(Colour)27 b(index\).)340
-1683 y Fi(\017)45 b Fj(v)-5 b(alue)28 b(-)f(A)h(new)g(v)-5
-b(alue)27 b(to)h(store)e(for)h(the)h(attribute.)37 b(If)28
-b(this)g(is)g(AST)p Ft(__)p Fj(BAD)f(no)h(v)-5 b(alue)27
-b(is)h(stored.)340 1822 y Fi(\017)45 b Fj(old)p Ft(_)p
-Fj(v)-5 b(alue)26 b(-)h(A)g(p)r(oin)n(ter)g(to)g(a)f(double)h(in)g
-(whic)n(h)g(to)g(return)f(the)i(attribute)f(v)-5 b(alue.)36
-b(If)28 b(this)f(is)g(NULL,)g(no)427 1922 y(v)-5 b(alue)28
-b(is)f(returned.)340 2061 y Fi(\017)45 b Fj(prim)30 b(-)f(The)g(sort)g
-(of)g(graphics)f(primitiv)n(e)h(to)g(b)r(e)h(dra)n(wn)e(with)i(the)g
-(new)f(attribute.)42 b(Iden)n(ti\014ed)30 b(b)n(y)f(the)427
-2161 y(follo)n(wing)e(v)-5 b(alues)27 b(de\014ned)h(in)g(grf.h:)36
-b(GRF)p Ft(__)p Fj(LINE,)27 b(GRF)p Ft(__)p Fj(MARK,)h(GRF)p
-Ft(__)p Fj(TEXT.)-2 2335 y Fd(Cap)n(:)227 2481 y Fj(The)e
-Ft(")p Fj(Cap)p Ft(")e Fj(function)i(is)g(called)f(to)g(determine)h(if)
-g(the)g(grf)f(mo)r(dule)g(has)g(a)g(giv)n(en)g(capabilit)n(y)-7
-b(,)25 b(as)g(indicated)h(b)n(y)227 2580 y(the)i Ft(")p
-Fj(cap)p Ft(")f Fj(argumen)n(t:)227 2711 y(in)n(t)h(Cap\()g(AstOb)5
-b(ject)27 b Fi(\003)p Fj(grfcon,)g(in)n(t)g(cap,)h(in)n(t)g(v)-5
-b(alue)27 b(\))340 2990 y Fi(\017)45 b Fj(grfcon)27 b(-)g(A)h(KeyMap)f
-(con)n(taining)f(information)h(passed)g(from)g(the)h(calling)f
-(application.)340 3129 y Fi(\017)45 b Fj(cap)24 b(-)f(The)h(capabilit)n
-(y)f(b)r(eing)h(inquired)g(ab)r(out.)36 b(This)24 b(will)g(b)r(e)g(one)
-f(of)h(the)h(follo)n(wing)d(constan)n(ts)h(de\014ned)427
-3229 y(in)28 b(grf.h:)227 3403 y(GRF)p Ft(__)p Fj(SCALES:)33
-b(This)g(function)h(should)f(return)g(a)f(non-zero)g(v)-5
-b(alue)33 b(if)h(the)f Ft(")p Fj(Scales)p Ft(")f Fj(function)h(is)h
-(imple-)227 3503 y(men)n(ted,)28 b(and)g(zero)e(otherwise.)36
-b(The)28 b(supplied)g Ft(")p Fj(v)-5 b(alue)p Ft(")26
-b Fj(argumen)n(t)h(should)g(b)r(e)h(ignored.)227 3634
-y(GRF)p Ft(__)p Fj(MJUST:)c(This)g(function)g(should)g(return)f(a)h
-(non-zero)e(v)-5 b(alue)23 b(if)i(the)f Ft(")p Fj(T)-7
-b(ext)p Ft(")23 b Fj(and)h Ft(")p Fj(TxExt)p Ft(")e Fj(functions)227
-3733 y(recognise)35 b Ft(")p Fj(M)p Ft(")i Fj(as)f(a)g(c)n(haracter)f
-(in)i(the)h(justi\014cation)f(string.)64 b(If)37 b(the)h(\014rst)e(c)n
-(haracter)f(of)i(a)f(justi\014cation)227 3833 y(string)d(is)h
-Ft(")p Fj(M)p Ft(")p Fj(,)g(then)g(the)g(text)g(should)f(b)r(e)h
-(justi\014ed)g(with)g(the)g(giv)n(en)f(reference)g(p)r(oin)n(t)g(at)h
-(the)g(b)r(ottom)g(of)227 3932 y(the)f(b)r(ounding)f(b)r(o)n(x.)51
-b(This)33 b(is)f(di\013eren)n(t)g(to)h Ft(")p Fj(B)p
-Ft(")e Fj(justi\014cation,)j(whic)n(h)e(requests)g(that)g(the)h
-(reference)e(p)r(oin)n(t)227 4032 y(b)r(e)k(put)g(on)f(the)h(baseline)e
-(of)i(the)f(text,)j(since)d(some)g(c)n(haracters)e(hang)h(do)n(wn)h(b)r
-(elo)n(w)g(the)h(baseline.)56 b(If)35 b(the)227 4132
-y Ft(")p Fj(T)-7 b(ext)p Ft(")25 b Fj(or)g Ft(")p Fj(TxExt)p
-Ft(")g Fj(function)h(cannot)g(di\013eren)n(tiate)g(b)r(et)n(w)n(een)f
-Ft(")p Fj(M)p Ft(")h Fj(and)f Ft(")p Fj(B)p Ft(")p Fj(,)h(then)g(this)g
-(function)h(should)227 4231 y(return)f(zero,)f(in)i(whic)n(h)f(case)f
-Ft(")p Fj(M)p Ft(")g Fj(justi\014cation)i(will)f(nev)n(er)f(b)r(e)i
-(requested)e(b)n(y)h(Plot.)36 b(The)26 b(supplied)h Ft(")p
-Fj(v)-5 b(alue)p Ft(")227 4331 y Fj(argumen)n(t)27 b(should)g(b)r(e)h
-(ignored.)227 4462 y(GRF)p Ft(__)p Fj(ESC:)22 b(This)g(function)h
-(should)e(return)h(a)g(non-zero)e(v)-5 b(alue)22 b(if)h(the)f
-Ft(")p Fj(T)-7 b(ext)p Ft(")22 b Fj(and)g Ft(")p Fj(TxExt)p
-Ft(")f Fj(functions)h(can)227 4561 y(recognise)f(and)h(in)n(terpret)f
-(graphics)g(escap)r(e)g(sequences)h(within)h(the)f(supplied)g(string)g
-(\(see)g(attribute)g(Escap)r(e\).)227 4661 y(Zero)g(should)i(b)r(e)f
-(returned)g(if)h(escap)r(e)f(sequences)g(cannot)g(b)r(e)h(in)n
-(terpreted)e(\(in)i(whic)n(h)g(case)e(the)i(Plot)f(class)f(will)227
-4760 y(in)n(terpret)30 b(them)h(itself)g(if)f(needed\).)46
-b(The)30 b(supplied)g Ft(")p Fj(v)-5 b(alue)p Ft(")30
-b Fj(argumen)n(t)f(should)h(b)r(e)h(ignored)e(only)g(if)i(escap)r(e)227
-4860 y(sequences)h(cannot)g(b)r(e)h(in)n(terpreted)g(b)n(y)f
-Ft(")p Fj(T)-7 b(ext)p Ft(")32 b Fj(and)h Ft(")p Fj(TxExt)p
-Ft(")p Fj(.)50 b(Otherwise,)34 b Ft(")p Fj(v)-5 b(alue)p
-Ft(")31 b Fj(indicates)i(whether)227 4960 y Ft(")p Fj(T)-7
-b(ext)p Ft(")27 b Fj(and)g Ft(")p Fj(TxExt)p Ft(")f Fj(should)h(in)n
-(terpret)g(escap)r(e)g(sequences)f(in)i(subsequen)n(t)f(calls.)36
-b(If)28 b Ft(")p Fj(v)-5 b(alue)p Ft(")26 b Fj(is)h(non-zero)227
-5059 y(then)j(escap)r(e)f(sequences)g(should)g(b)r(e)h(in)n(terpreted)f
-(b)n(y)h Ft(")p Fj(T)-7 b(ext)p Ft(")28 b Fj(and)i Ft(")p
-Fj(TxExt)p Ft(")p Fj(.)41 b(Otherwise,)29 b(they)h(should)f(b)r(e)227
-5159 y(dra)n(wn)e(as)g(literal)g(text.)340 5438 y Fi(\017)45
-b Fj(v)-5 b(alue)28 b(-)f(The)h(use)f(of)h(this)g(parameter)e(dep)r
-(ends)i(on)f(the)h(v)-5 b(alue)28 b(of)f Ft(")p Fj(cap)p
-Ft(")f Fj(as)h(describ)r(ed)h(ab)r(o)n(v)n(e.)340 5577
-y Fi(\017)45 b Fj(Returned)26 b(F)-7 b(unction)26 b(V)-7
-b(alue:)36 b(The)25 b(v)-5 b(alue)25 b(returned)g(b)n(y)h(the)f
-(function)h(dep)r(ends)g(on)f(the)h(v)-5 b(alue)25 b(of)h
-Ft(")p Fj(cap)p Ft(")427 5677 y Fj(as)h(describ)r(ed)h(ab)r(o)n(v)n(e.)
-35 b(Zero)26 b(should)i(b)r(e)g(returned)f(if)h(the)g(supplied)g
-(capabilit)n(y)f(is)g(not)h(recognised.)p eop end
-%%Page: 247 257
-TeXDict begin 247 256 bop 3643 52 a FF(247)-2 351 y Fd(Flush)n(:)227
-497 y Fj(The)19 b Ft(")p Fj(Flush)p Ft(")g Fj(function)g(ensures)f
-(that)i(the)f(displa)n(y)f(device)h(is)g(up-to-date,)h(b)n(y)f
-(\015ushing)g(an)n(y)f(p)r(ending)h(graphics)227 597
-y(to)28 b(the)g(output)g(device.)37 b(It)27 b(requires)g(the)h(follo)n
-(wing)e(in)n(terface:)227 720 y(in)n(t)i(Flush\()g(AstOb)5
-b(ject)28 b Fi(\003)p Fj(grfcon)e(\))340 975 y Fi(\017)45
-b Fj(grfcon)27 b(-)g(A)h(KeyMap)f(con)n(taining)f(information)h(passed)
-g(from)g(the)h(calling)f(application.)-2 1133 y Fd(Line)n(:)227
-1279 y Fj(The)h Ft(")p Fj(Line)p Ft(")e Fj(function)i(displa)n(ys)e
-(lines)i(joining)f(the)h(giv)n(en)e(p)r(ositions)h(and)g(requires)f
-(the)i(follo)n(wing)e(in)n(terface:)227 1402 y(in)n(t)i(Line\()g(AstOb)
-5 b(ject)28 b Fi(\003)p Fj(grfcon,)e(in)n(t)i(n,)g(const)f(\015oat)g
-Fi(\003)p Fj(x,)g(const)g(\015oat)g Fi(\003)p Fj(y)g(\))340
-1657 y Fi(\017)45 b Fj(grfcon)27 b(-)g(A)h(KeyMap)f(con)n(taining)f
-(information)h(passed)g(from)g(the)h(calling)f(application.)340
-1786 y Fi(\017)45 b Fj(n)28 b(-)f(The)h(n)n(um)n(b)r(er)f(of)h(p)r
-(ositions)f(to)h(b)r(e)g(joined)f(together.)340 1916
-y Fi(\017)45 b Fj(x)28 b(-)f(A)h(p)r(oin)n(ter)f(to)h(an)f(arra)n(y)e
-(holding)i(the)h Ft(")p Fj(n)p Ft(")f Fj(x)h(v)-5 b(alues.)340
-2045 y Fi(\017)45 b Fj(y)28 b(-)f(A)h(p)r(oin)n(ter)f(to)h(an)f(arra)n
-(y)e(holding)i(the)h Ft(")p Fj(n)p Ft(")f Fj(y)h(v)-5
-b(alues.)-2 2203 y Fd(Mark)n(:)227 2349 y Fj(The)28 b
-Ft(")p Fj(Mark)p Ft(")e Fj(function)i(displa)n(ys)e(mark)n(ers)g(at)h
-(the)h(giv)n(en)f(p)r(ositions.)37 b(It)28 b(requires)e(the)i(follo)n
-(wing)e(in)n(terface:)227 2472 y(in)n(t)i(Mark\()f(AstOb)5
-b(ject)28 b Fi(\003)p Fj(grfcon,)e(in)n(t)i(n,)g(const)f(\015oat)g
-Fi(\003)p Fj(x,)g(const)g(\015oat)g Fi(\003)p Fj(y)-7
-b(,)28 b(in)n(t)f(t)n(yp)r(e)h(\))340 2727 y Fi(\017)45
-b Fj(grfcon)27 b(-)g(A)h(KeyMap)f(con)n(taining)f(information)h(passed)
-g(from)g(the)h(calling)f(application.)340 2856 y Fi(\017)45
-b Fj(n)28 b(-)f(The)h(n)n(um)n(b)r(er)f(of)h(p)r(ositions)f(to)h(b)r(e)
-g(mark)n(ed.)340 2985 y Fi(\017)45 b Fj(x)28 b(-)f(A)h(p)r(oin)n(ter)f
-(to)h(an)f(arra)n(y)e(holding)i(the)h Ft(")p Fj(n)p Ft(")f
-Fj(x)h(v)-5 b(alues.)340 3114 y Fi(\017)45 b Fj(y)28
-b(-)f(A)h(p)r(oin)n(ter)f(to)h(an)f(arra)n(y)e(holding)i(the)h
-Ft(")p Fj(n)p Ft(")f Fj(y)h(v)-5 b(alues.)340 3244 y
-Fi(\017)45 b Fj(t)n(yp)r(e)28 b(-)f(An)h(in)n(teger)f(whic)n(h)h(can)f
-(b)r(e)h(used)f(to)h(indicate)g(the)g(t)n(yp)r(e)f(of)h(mark)n(er)e
-(sym)n(b)r(ol)h(required.)-2 3402 y Fd(Qc)m(h)n(:)227
-3548 y Fj(The)e Ft(")p Fj(Qc)n(h)p Ft(")e Fj(function)j(returns)e(the)h
-(heigh)n(ts)f(of)h(c)n(haracters)d(dra)n(wn)i(v)n(ertically)f(and)i
-(horizon)n(tally)e(in)i(graphics)227 3647 y(co)r(ordinates.)36
-b(It)28 b(requires)e(the)i(follo)n(wing)e(in)n(terface:)227
-3770 y(in)n(t)i(Qc)n(h\()f(AstOb)5 b(ject)28 b Fi(\003)p
-Fj(grfcon,)e(\015oat)h Fi(\003)p Fj(c)n(h)n(v,)g(\015oat)g
-Fi(\003)p Fj(c)n(hh)g(\))340 4026 y Fi(\017)45 b Fj(grfcon)27
-b(-)g(A)h(KeyMap)f(con)n(taining)f(information)h(passed)g(from)g(the)h
-(calling)f(application.)340 4155 y Fi(\017)45 b Fj(c)n(h)n(v)26
-b(-)g(A)h(p)r(oin)n(ter)f(to)h(the)g(\015oat)f(whic)n(h)g(is)h(to)f
-(receiv)n(e)f(the)i(heigh)n(t)f(of)h(c)n(haracters)d(dra)n(wn)i(with)h
-(a)f(v)n(ertical)427 4254 y(baseline.)37 b(This)27 b(will)h(b)r(e)g(an)
-f(incremen)n(t)h(in)g(the)g(X)g(axis.)340 4383 y Fi(\017)45
-b Fj(c)n(hh)21 b(-)g(A)g(p)r(oin)n(ter)g(to)g(the)g(\015oat)g(whic)n(h)
-g(is)g(to)f(receiv)n(e)g(the)i(heigh)n(t)e(of)h(c)n(haracters)e(dra)n
-(wn)h(with)i(a)e(horizon)n(tal)427 4483 y(baseline.)37
-b(This)27 b(will)h(b)r(e)g(an)f(incremen)n(t)h(in)g(the)g(Y)g(axis.)-2
-4641 y Fd(Scales)n(:)227 4787 y Fj(The)h Ft(")p Fj(Scales)p
-Ft(")e Fj(function)i(returns)f(t)n(w)n(o)f(v)-5 b(alues)28
-b(\(one)h(for)f(eac)n(h)f(axis\))h(whic)n(h)h(scale)e(incremen)n(ts)h
-(on)h(the)g(corre-)227 4887 y(sp)r(onding)h(axis)f(in)n(to)g(a)h
-Ft(")p Fj(normal)p Ft(")d Fj(co)r(ordinate)i(system)g(in)h(whic)n(h:)42
-b(1\))29 b(the)h(axes)f(ha)n(v)n(e)g(equal)g(scale)g(in)h(terms)227
-4987 y(of)k(\(for)f(instance\))g(millimetres)g(p)r(er)h(unit)g
-(distance,)g(2\))g(X)f(v)-5 b(alues)33 b(increase)f(from)h(left)h(to)g
-(righ)n(t,)g(and)f(3\))g(Y)227 5086 y(v)-5 b(alues)27
-b(increase)g(from)g(b)r(ottom)h(to)f(top.)37 b(It)28
-b(requires)f(the)g(follo)n(wing)g(in)n(terface:)227 5209
-y(in)n(t)h(Scales\()f(AstOb)5 b(ject)28 b Fi(\003)p Fj(grfcon,)e
-(\015oat)h Fi(\003)p Fj(alpha,)g(\015oat)g Fi(\003)p
-Fj(b)r(eta)g(\))340 5464 y Fi(\017)45 b Fj(grfcon)27
-b(-)g(A)h(KeyMap)f(con)n(taining)f(information)h(passed)g(from)g(the)h
-(calling)f(application.)340 5593 y Fi(\017)45 b Fj(alpha)36
-b(-)f(A)i(p)r(oin)n(ter)e(to)h(the)h(\015oat)e(whic)n(h)h(is)g(to)g
-(receiv)n(e)f(the)h(scale)f(for)h(the)g(X)h(axis)e(\(i.e.)62
-b(Xnorm)36 b(=)427 5693 y(alpha)p Fi(\003)p Fj(Xw)n(orld\).)p
-eop end
-%%Page: 248 258
-TeXDict begin 248 257 bop 0 52 a FF(248)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(b)r(eta)38 b(-)g(A)g(p)r(oin)n(ter)g(to)f(the)i(\015oat)e(whic)n
-(h)h(is)g(to)f(receiv)n(e)g(the)h(scale)f(for)h(the)g(Y)g(axis)f
-(\(i.e.)68 b(Ynorm)38 b(=)427 451 y(b)r(eta)p Fi(\003)p
-Fj(Yw)n(orld\).)-2 624 y Fd(T)-8 b(ext)n(:)227 770 y
-Fj(The)31 b Ft(")p Fj(T)-7 b(ext)p Ft(")30 b Fj(function)h(displa)n(ys)
-e(a)h(c)n(haracter)f(string)h(at)g(a)g(giv)n(en)g(p)r(osition)g(using)h
-(a)f(sp)r(eci\014ed)g(justi\014cation)227 870 y(and)e(up-v)n(ector.)35
-b(It)28 b(requires)e(the)i(follo)n(wing)f(in)n(terface:)227
-1000 y(in)n(t)f(T)-7 b(ext\()25 b(AstOb)5 b(ject)25 b
-Fi(\003)p Fj(grfcon,)f(const)h(c)n(har)f Fi(\003)p Fj(text,)h(\015oat)g
-(x,)g(\015oat)g(y)-7 b(,)25 b(const)g(c)n(har)f Fi(\003)p
-Fj(just,)h(\015oat)g(up)n(x,)g(\015oat)g(up)n(y)227 1100
-y(\))340 1377 y Fi(\017)45 b Fj(grfcon)27 b(-)g(A)h(KeyMap)f(con)n
-(taining)f(information)h(passed)g(from)g(the)h(calling)f(application.)
-340 1516 y Fi(\017)45 b Fj(text)28 b(-)g(P)n(oin)n(ter)e(to)h(a)g(n)n
-(ull-terminated)h(c)n(haracter)d(string)i(to)g(b)r(e)h(displa)n(y)n
-(ed.)340 1654 y Fi(\017)45 b Fj(x)28 b(-)f(The)h(reference)e(x)i(co)r
-(ordinate.)340 1793 y Fi(\017)45 b Fj(y)28 b(-)f(The)h(reference)e(y)i
-(co)r(ordinate.)340 1931 y Fi(\017)45 b Fj(just)35 b(-)f(A)h(c)n
-(haracter)d(string)i(whic)n(h)g(sp)r(eci\014es)h(the)f(lo)r(cation)g
-(within)h(the)g(text)g(string)e(whic)n(h)i(is)f(to)g(b)r(e)427
-2031 y(placed)22 b(at)f(the)i(reference)d(p)r(osition)i(giv)n(en)f(b)n
-(y)h(x)f(and)h(y)-7 b(.)35 b(The)22 b(\014rst)f(c)n(haracter)f(ma)n(y)h
-(b)r(e)h('T')g(for)f Ft(")p Fj(top)p Ft(")p Fj(,)h('C')427
-2131 y(for)j Ft(")p Fj(cen)n(tre)p Ft(")p Fj(,)f(or)h('B')g(for)g
-Ft(")p Fj(b)r(ottom)p Ft(")p Fj(,)g(and)g(sp)r(eci\014es)g(the)h(v)n
-(ertical)e(lo)r(cation)h(of)g(the)g(reference)g(p)r(osition.)427
-2230 y(Note,)31 b Ft(")p Fj(b)r(ottom)p Ft(")e Fj(corresp)r(onds)f(to)i
-(the)h(base-line)e(of)h(normal)f(text.)44 b(Some)30 b(c)n(haracters)d
-(\(eg)j Ft(")p Fj(y)p Ft(")p Fj(,)g Ft(")p Fj(g)p Ft(")p
-Fj(,)427 2330 y Ft(")p Fj(p)p Ft(")p Fj(,)35 b(etc\))f(descend)f(b)r
-(elo)n(w)h(the)g(base-line.)54 b(The)33 b(second)g(c)n(haracter)f(ma)n
-(y)h(b)r(e)h('L')f(for)g Ft(")p Fj(left)p Ft(")p Fj(,)i('C')f(for)427
-2430 y Ft(")p Fj(cen)n(tre)p Ft(")p Fj(,)26 b(or)h('R')h(for)f
-Ft(")p Fj(righ)n(t)p Ft(")p Fj(,)f(and)h(sp)r(eci\014es)g(the)h
-(horizon)n(tal)e(lo)r(cation)h(of)g(the)h(reference)f(p)r(osition.)36
-b(If)427 2529 y(the)28 b(string)f(has)g(less)g(than)h(2)f(c)n
-(haracters)f(then)i('C')f(is)h(used)f(for)h(the)g(missing)f(c)n
-(haracters.)340 2668 y Fi(\017)45 b Fj(up)n(x)29 b(-)f(The)g(x)h(comp)r
-(onen)n(t)f(of)g(the)h(up-v)n(ector)e(for)h(the)h(text.)39
-b(If)29 b(necessary)e(the)i(supplied)g(v)-5 b(alue)28
-b(should)427 2767 y(b)r(e)h(negated)f(to)h(ensure)f(that)h(p)r(ositiv)n
-(e)f(v)-5 b(alues)28 b(alw)n(a)n(ys)f(refer)h(to)h(displacemen)n(ts)f
-(from)g(left)h(to)g(righ)n(t)f(on)427 2867 y(the)g(screen.)340
-3005 y Fi(\017)45 b Fj(up)n(y)29 b(-)f(The)g(y)h(comp)r(onen)n(t)f(of)g
-(the)h(up-v)n(ector)e(for)h(the)h(text.)39 b(If)29 b(necessary)e(the)i
-(supplied)g(v)-5 b(alue)28 b(should)427 3105 y(b)r(e)j(negated)f(to)g
-(ensure)f(that)i(p)r(ositiv)n(e)f(v)-5 b(alues)29 b(alw)n(a)n(ys)g
-(refer)g(to)h(displacemen)n(ts)g(from)g(b)r(ottom)g(to)h(top)427
-3205 y(on)d(the)g(screen.)-2 3378 y Fd(TxExt)n(:)227
-3524 y Fj(The)35 b Ft(")p Fj(TxExt)p Ft(")e Fj(function)i(returns)f
-(the)h(corners)e(of)i(a)f(b)r(o)n(x)g(whic)n(h)h(w)n(ould)f(enclose)g
-(the)h(supplied)g(c)n(haracter)227 3624 y(string)25 b(if)i(it)f(w)n
-(ere)f(displa)n(y)n(ed)g(using)g(the)h(T)-7 b(ext)26
-b(function)g(describ)r(ed)g(ab)r(o)n(v)n(e.)35 b(The)26
-b(returned)f(b)r(o)n(x)g(includes)h(an)n(y)227 3723 y(leading)h(or)g
-(trailing)g(spaces.)36 b(It)28 b(requires)e(the)i(follo)n(wing)e(in)n
-(terface:)227 3853 y(in)n(t)31 b(TxExt\()f(AstOb)5 b(ject)31
-b Fi(\003)p Fj(grfcon,)f(const)g(c)n(har)f Fi(\003)p
-Fj(text,)i(\015oat)f(x,)h(\015oat)f(y)-7 b(,)31 b(const)f(c)n(har)g
-Fi(\003)p Fj(just,)h(\015oat)f(up)n(x,)h(\015oat)227
-3953 y(up)n(y)-7 b(,)28 b(\015oat)f Fi(\003)p Fj(xb,)g(\015oat)g
-Fi(\003)p Fj(yb)g(\))340 4231 y Fi(\017)45 b Fj(grfcon)27
-b(-)g(A)h(KeyMap)f(con)n(taining)f(information)h(passed)g(from)g(the)h
-(calling)f(application.)340 4369 y Fi(\017)45 b Fj(text)28
-b(-)g(P)n(oin)n(ter)e(to)h(a)g(n)n(ull-terminated)h(c)n(haracter)d
-(string)i(to)g(b)r(e)h(displa)n(y)n(ed.)340 4508 y Fi(\017)45
-b Fj(x)28 b(-)f(The)h(reference)e(x)i(co)r(ordinate.)340
-4646 y Fi(\017)45 b Fj(y)28 b(-)f(The)h(reference)e(y)i(co)r(ordinate.)
-340 4785 y Fi(\017)45 b Fj(just)35 b(-)f(A)h(c)n(haracter)d(string)i
-(whic)n(h)g(sp)r(eci\014es)h(the)f(lo)r(cation)g(within)h(the)g(text)g
-(string)e(whic)n(h)i(is)f(to)g(b)r(e)427 4884 y(placed)28
-b(at)f(the)h(reference)f(p)r(osition)g(giv)n(en)g(b)n(y)g(x)h(and)f(y)
--7 b(.)37 b(See)28 b Ft(")p Fj(T)-7 b(ext)p Ft(")26 b
-Fj(ab)r(o)n(v)n(e.)340 5023 y Fi(\017)45 b Fj(up)n(x)28
-b(-)f(The)h(x)f(comp)r(onen)n(t)h(of)f(the)h(up-v)n(ector)e(for)h(the)h
-(text.)38 b(See)27 b Ft(")p Fj(T)-7 b(ext)p Ft(")27 b
-Fj(ab)r(o)n(v)n(e.)340 5161 y Fi(\017)45 b Fj(up)n(y)28
-b(-)f(The)h(y)f(comp)r(onen)n(t)h(of)f(the)h(up-v)n(ector)e(for)h(the)h
-(text.)38 b(See)27 b Ft(")p Fj(T)-7 b(ext)p Ft(")27 b
-Fj(ab)r(o)n(v)n(e.)340 5300 y Fi(\017)45 b Fj(xb)23 b(-)e(An)i(arra)n
-(y)d(of)i(4)g(elemen)n(ts)g(in)h(whic)n(h)f(to)g(return)g(the)g(x)g(co)
-r(ordinate)f(of)i(eac)n(h)e(corner)g(of)h(the)h(b)r(ounding)427
-5399 y(b)r(o)n(x.)340 5538 y Fi(\017)45 b Fj(yb)23 b(-)e(An)i(arra)n(y)
-d(of)i(4)g(elemen)n(ts)g(in)h(whic)n(h)f(to)g(return)g(the)g(y)g(co)r
-(ordinate)f(of)i(eac)n(h)e(corner)g(of)h(the)h(b)r(ounding)427
-5638 y(b)r(o)n(x.)p eop end
-%%Page: 249 259
-TeXDict begin 249 258 bop 3643 52 a FF(249)p 0 351 3780
-12 v 0 483 a Fz(astGrid)470 b Fe(Dra)m(w)38 b(a)g(set)h(of)f(lab)s
-(elled)g(co)s(ordinate)e(axes)469 b Fz(astGrid)0 660
-y Fd(Description:)44 b Fj(This)27 b(function)h(dra)n(ws)d(a)i(complete)
-g(annotated)f(set)h(of)g(co)r(ordinate)e(axes)h(for)h(a)f(Plot)h(with)g
-(\(option-)227 760 y(ally\))34 b(a)g(co)r(ordinate)f(grid)h(sup)r
-(erimp)r(osed.)57 b(Details)34 b(of)g(the)h(axes)e(and)h(grid)g(can)g
-(b)r(e)h(con)n(trolled)e(b)n(y)h(setting)227 859 y(v)-5
-b(alues)27 b(for)h(the)g(v)-5 b(arious)26 b(attributes)h(de\014ned)h(b)
-n(y)g(the)g(Plot)f(class)f(\(q.v.\).)0 1015 y Fd(Synopsis:)121
-b Ft(void)42 b(astGrid\()e(AstPlot)h Fi(\003)p Ft(this)g(\))0
-1172 y Fd(P)m(arameters:)259 1315 y(this)427 1415 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Plot.)0 1583 y Fd(Notes:)340 1873 y Fi(\017)45
-b Fj(If)28 b(the)h(supplied)f(Plot)f(is)h(a)f(Plot3D,)g(the)i(axes)d
-(will)i(b)r(e)h(annotated)e(using)g(three)h(2-dimensional)e(Plots,)427
-1972 y(one)i(for)f(eac)n(h)g(2D)g(plane)h(in)g(the)g(3D)f(curren)n(t)g
-(co)r(ordinate)g(system.)37 b(The)27 b(plots)h(will)g(b)r(e)g
-Ft(")p Fj(pasted)p Ft(")e Fj(on)n(to)427 2072 y(3)h(faces)g(of)g(the)h
-(cub)r(oid)f(graphics)f(v)n(olume)h(sp)r(eci\014ed)g(when)h(the)g
-(Plot3D)e(w)n(as)g(constructed.)37 b(The)27 b(faces)427
-2172 y(to)h(b)r(e)g(used)f(can)h(b)r(e)g(con)n(trolled)e(b)n(y)h(the)h
-Ft(")p Fj(Ro)r(otCorner)p Ft(")d Fj(attribute.)340 2308
-y Fi(\017)45 b Fj(An)23 b(error)e(results)h(if)i(either)e(the)h(curren)
-n(t)f(F)-7 b(rame)22 b(or)g(the)h(base)f(F)-7 b(rame)23
-b(of)f(the)h(Plot)g(is)f(not)h(2-dimensional)427 2407
-y(or)k(\(for)g(a)h(Plot3D\))f(3-dimensional.)340 2544
-y Fi(\017)45 b Fj(An)24 b(error)e(also)h(results)g(if)h(the)g
-(transformation)e(b)r(et)n(w)n(een)h(the)h(base)f(and)h(curren)n(t)e(F)
--7 b(rames)23 b(of)h(the)g(Plot)f(is)427 2643 y(not)k(de\014ned)g(in)g
-(either)g(direction)g(\(i.e.)37 b(the)27 b(Plot's)f(T)-7
-b(ranF)g(orw)n(ard)24 b(or)i(T)-7 b(ranIn)n(v)n(erse)25
-b(attribute)i(is)f(zero\).)p 0 2849 V 0 2981 a Fz(astGridLine)971
-2988 y Fe(Dra)m(w)38 b(a)g(grid)g(line)g(\(or)g(axis\))f(for)h(a)g
-(Plot)3082 2981 y Fz(astGridLine)0 3190 y Fd(Description:)44
-b Fj(This)30 b(function)g(dra)n(ws)f(a)g(curv)n(e)f(in)i(the)g(ph)n
-(ysical)f(co)r(ordinate)g(system)g(of)h(a)f(Plot)g(b)n(y)h(v)-5
-b(arying)28 b(only)227 3290 y(one)j(of)h(the)g(co)r(ordinates)e(along)g
-(the)i(length)f(of)h(the)g(curv)n(e.)47 b(It)32 b(is)f(in)n(tended)h
-(for)f(dra)n(wing)f(co)r(ordinate)g(axes,)227 3389 y(co)r(ordinate)38
-b(grids,)j(and)d(tic)n(k)h(marks)e(on)i(axes)f(\(but)h(note)g(that)g
-(these)g(are)f(also)f(a)n(v)-5 b(ailable)38 b(via)g(the)h(more)227
-3489 y(comprehensiv)n(e)26 b(astGrid)i(function\).)227
-3617 y(The)35 b(curv)n(e)e(is)i(transformed)e(in)n(to)h(graphical)f(co)
-r(ordinate)h(space)f(for)h(plotting,)j(so)c(that)i(a)f(straigh)n(t)g
-(line)g(in)227 3716 y(ph)n(ysical)24 b(co)r(ordinates)f(ma)n(y)g
-(result)h(in)h(a)f(curv)n(ed)g(line)g(b)r(eing)h(dra)n(wn)e(if)i(the)g
-(Mapping)f(in)n(v)n(olv)n(ed)f(is)h(non-linear.)227 3816
-y(An)n(y)j(discon)n(tin)n(uities)f(in)h(the)f(Mapping)h(b)r(et)n(w)n
-(een)f(ph)n(ysical)g(and)g(graphical)f(co)r(ordinates)g(are)g(catered)h
-(for,)g(as)227 3916 y(is)i(an)n(y)f(clipping)g(established)g(using)h
-(astClip.)0 4072 y Fd(Synopsis:)121 b Ft(void)42 b(astGridLine\()c
-(AstPlot)j Fi(\003)p Ft(this,)g(int)h(axis,)g(const)g(double)f
-(start[],)f(double)h(length)227 4172 y(\))0 4328 y Fd(P)m(arameters:)
-259 4471 y(this)427 4571 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259
-4707 y Fd(axis)427 4807 y Fj(The)j(index)g(of)f(the)h(Plot)f(axis)g
-(whose)g(ph)n(ysical)g(co)r(ordinate)f(v)-5 b(alue)31
-b(is)f(to)h(b)r(e)g(v)-5 b(aried)30 b(along)f(the)j(length)427
-4906 y(of)26 b(the)h(curv)n(e)e(\(all)h(other)f(co)r(ordinates)g(will)h
-(remain)f(\014xed\).)37 b(This)26 b(v)-5 b(alue)26 b(should)g(lie)g(in)
-g(the)g(range)f(from)427 5006 y(1)i(to)h(the)g(n)n(um)n(b)r(er)f(of)h
-(Plot)f(axes)f(\(Naxes)i(attribute\).)259 5142 y Fd(start)427
-5242 y Fj(An)j(arra)n(y)-7 b(,)30 b(with)h(one)f(elemen)n(t)h(for)f
-(eac)n(h)g(axis)g(of)h(the)g(Plot,)g(giving)e(the)j(ph)n(ysical)d(co)r
-(ordinates)h(of)g(the)427 5341 y(start)d(of)h(the)g(curv)n(e.)259
-5478 y Fd(length)427 5577 y Fj(The)c(length)h(of)f(curv)n(e)f(to)h(b)r
-(e)h(dra)n(wn,)e(giv)n(en)h(as)f(an)h(incremen)n(t)g(along)f(the)h
-(selected)g(ph)n(ysical)g(axis.)35 b(This)427 5677 y(ma)n(y)27
-b(b)r(e)h(p)r(ositiv)n(e)f(or)g(negativ)n(e.)p eop end
-%%Page: 250 260
-TeXDict begin 250 259 bop 0 52 a FF(250)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Notes:)340
-684 y Fi(\017)45 b Fj(No)28 b(curv)n(e)g(is)g(dra)n(wn)f(if)i(the)f
-Ft(")p Fj(start)p Ft(")f Fj(arra)n(y)f(con)n(tains)h(an)n(y)g(co)r
-(ordinates)g(with)i(the)f(v)-5 b(alue)28 b(AST)p Ft(__)p
-Fj(BAD,)427 784 y(nor)f(if)h Ft(")p Fj(length)p Ft(")f
-Fj(has)g(this)h(v)-5 b(alue.)340 942 y Fi(\017)45 b Fj(An)28
-b(error)e(results)h(if)h(the)g(base)f(F)-7 b(rame)27
-b(of)h(the)g(Plot)f(is)g(not)h(2-dimensional.)340 1100
-y Fi(\017)45 b Fj(An)30 b(error)d(also)g(results)i(if)g(the)g
-(transformation)f(b)r(et)n(w)n(een)h(the)g(curren)n(t)f(and)h(base)f(F)
--7 b(rames)28 b(of)h(the)g(Plot)427 1200 y(is)f(not)f(de\014ned)h
-(\(i.e.)38 b(the)28 b(Plot's)e(T)-7 b(ranIn)n(v)n(erse)26
-b(attribute)h(is)h(zero\).)p 0 1449 3780 12 v 0 1581
-a Fz(astGrismMap)1380 1580 y Fe(Create)37 b(a)i(GrismMap)2978
-1581 y Fz(astGrismMap)0 1820 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(GrismMap)g(and)h(optionally)f
-(initialises)g(its)h(attributes.)227 1970 y(A)j(GrismMap)g(is)f(a)h(sp)
-r(ecialised)f(form)h(of)f(Mapping)h(whic)n(h)g(transforms)e
-(1-dimensional)h(co)r(ordinates)f(using)227 2069 y(the)39
-b(sp)r(ectral)f(disp)r(ersion)g(equation)f(describ)r(ed)i(in)f(FITS-W)n
-(CS)h(pap)r(er)f(I)r(I)r(I)h Ft(")p Fj(Represen)n(tation)e(of)h(sp)r
-(ectral)227 2169 y(co)r(ordinates)26 b(in)i(FITS)p Ft(")p
-Fj(.)37 b(This)28 b(describ)r(es)f(the)h(disp)r(ersion)f(pro)r(duced)g
-(b)n(y)g(gratings,)f(prisms)h(and)h(grisms.)227 2319
-y(When)23 b(initially)f(created,)g(the)h(forw)n(ard)d(transformation)g
-(of)i(a)g(GrismMap)f(transforms)g(input)h Ft(")p Fj(grism)f(param-)227
-2418 y(eter)p Ft(")k Fj(v)-5 b(alues)24 b(in)n(to)h(output)h(w)n(a)n(v)
-n(elength)d(v)-5 b(alues.)36 b(The)25 b Ft(")p Fj(grism)f(parameter)p
-Ft(")f Fj(is)i(a)g(dimensionless)g(v)-5 b(alue)25 b(whic)n(h)227
-2518 y(is)30 b(linearly)e(related)h(to)g(p)r(osition)h(on)f(the)h
-(detector.)42 b(It)30 b(is)f(de\014ned)h(in)g(FITS-W)n(CS)f(pap)r(er)g
-(I)r(I)r(I)h(as)f Ft(")p Fj(the)h(o\013set)227 2618 y(on)25
-b(the)g(detector)f(from)h(the)g(p)r(oin)n(t)g(of)g(in)n(tersection)f
-(of)h(the)g(camera)f(axis,)g(measured)g(in)h(units)h(of)e(the)i
-(e\013ectiv)n(e)227 2717 y(lo)r(cal)f(length)p Ft(")p
-Fj(.)36 b(The)25 b(units)h(in)f(whic)n(h)g(w)n(a)n(v)n(elength)f(v)-5
-b(alues)25 b(are)f(exp)r(ected)i(or)e(returned)h(is)g(determined)g(b)n
-(y)g(the)227 2817 y(v)-5 b(alues)29 b(supplied)h(for)f(the)g(GrismW)-7
-b(a)n(v)n(eR,)29 b(GrismNRP)g(and)g(GrismG)g(attribute:)40
-b(whatev)n(er)29 b(units)g(are)g(used)227 2917 y(for)e(these)h
-(attributes)f(will)h(also)f(b)r(e)h(used)f(for)g(the)h(w)n(a)n(v)n
-(elength)e(v)-5 b(alues.)0 3116 y Fd(Synopsis:)121 b
-Ft(AstGrismMap)39 b Fi(\003)p Ft(astGrismMap\()f(const)k(char)f
-Fi(\003)p Ft(options,)f(...)86 b(\))0 3316 y Fd(P)m(arameters:)259
-3503 y(options)427 3603 y Fj(P)n(oin)n(ter)27 b(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 3702 y(assignmen)n(ts)j
-(to)i(b)r(e)f(used)h(for)f(initialising)g(the)h(new)f(GrismMap.)51
-b(The)32 b(syn)n(tax)g(used)g(is)h(iden)n(tical)f(to)427
-3802 y(that)38 b(for)e(the)i(astSet)f(function)h(and)f(ma)n(y)f
-(include)i Ft(")p Fj(prin)n(tf)p Ft(")e Fj(format)h(sp)r(eci\014ers)g
-(iden)n(ti\014ed)g(b)n(y)g Ft(")p Fj(\045)p Ft(")427
-3902 y Fj(sym)n(b)r(ols)27 b(in)h(the)g(normal)f(w)n(a)n(y)-7
-b(.)259 4060 y Fd(...)427 4159 y Fj(If)38 b(the)g Ft(")p
-Fj(options)p Ft(")e Fj(string)h(con)n(tains)f Ft(")p
-Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g
-(list)h(of)f(additional)427 4259 y(argumen)n(ts)26 b(ma)n(y)h(follo)n
-(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5 b(alues)27
-b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)37
-b(The)427 4359 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 4458 y Fj(function\).)0
-4671 y Fd(Returned)32 b(V)-8 b(alue:)259 4857 y(astGrismMap\(\))427
-4957 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(GrismMap.)0
-5169 y Fd(Notes:)340 5502 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 5602 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p eop end
-%%Page: 251 261
-TeXDict begin 251 260 bop 3643 52 a FF(251)p 0 351 3780
-12 v 0 482 a Fz(astImp)t(ort)859 483 y Fe(Imp)s(ort)38
-b(an)g(Ob)7 b(ject)38 b(p)s(oin)m(ter)f(to)h(the)h(curren)m(t)1701
-583 y(con)m(text)3194 482 y Fz(astImp)t(ort)0 746 y Fd(Description:)44
-b Fj(This)20 b(function)g(imp)r(orts)g(an)f(Ob)5 b(ject)19
-b(p)r(oin)n(ter)h(that)g(w)n(as)e(created)h(in)h(a)f(higher)g(or)g(lo)n
-(w)n(er)f(lev)n(el)h(con)n(text,)227 846 y(in)n(to)36
-b(the)h(curren)n(t)f(AST)h(con)n(text.)63 b(This)36 b(means)g(that)h
-(the)g(p)r(oin)n(ter)f(will)h(b)r(e)g(ann)n(ulled)f(when)h(the)f
-(curren)n(t)227 945 y(con)n(text)27 b(is)h(ended)g(\(with)g(astEnd\).)0
-1094 y Fd(Synopsis:)121 b Ft(void)42 b(astImport\()d(AstObject)h
-Fi(\003)p Ft(this)i(\))0 1242 y Fd(P)m(arameters:)259
-1377 y(this)427 1477 y Fj(Ob)5 b(ject)28 b(p)r(oin)n(ter)f(to)g(b)r(e)h
-(imp)r(orted.)0 1638 y Fd(Class)j(Applicabilit)m(y:)259
-1773 y(Ob)5 b(ject)427 1873 y Fj(This)28 b(function)g(applies)f(to)h
-(all)f(Ob)5 b(jects.)p 0 2070 V 0 2201 a Fz(astIn)l(tersect)910
-2202 y Fe(Find)39 b(the)f(p)s(oin)m(t)g(of)g(in)m(tersection)f(b)s(et)m
-(w)m(een)1390 2316 y(t)m(w)m(o)g(geo)s(desic)h(curv)m(es)3093
-2201 y Fz(astIn)l(tersect)0 2503 y Fd(Description:)44
-b Fj(This)23 b(function)h(\014nds)f(the)g(co)r(ordinate)e(v)-5
-b(alues)23 b(at)g(the)g(p)r(oin)n(t)g(of)g(in)n(tersection)f(b)r(et)n
-(w)n(een)h(t)n(w)n(o)f(geo)r(desic)227 2603 y(curv)n(es.)35
-b(Eac)n(h)25 b(curv)n(e)g(is)g(sp)r(eci\014ed)h(b)n(y)g(t)n(w)n(o)f(p)r
-(oin)n(ts)g(on)h(the)g(curv)n(e.)35 b(It)26 b(can)g(only)f(b)r(e)h
-(used)g(with)g(2-dimensional)227 2702 y(F)-7 b(rames.)227
-2826 y(F)g(or)24 b(example,)h(in)g(a)f(basic)g(F)-7 b(rame,)25
-b(it)g(will)g(\014nd)g(the)g(p)r(oin)n(t)g(of)g(in)n(tersection)e(b)r
-(et)n(w)n(een)i(t)n(w)n(o)f(straigh)n(t)f(lines.)36 b(But)227
-2926 y(for)27 b(a)h(SkyF)-7 b(rame)26 b(it)i(will)g(\014nd)g(an)g(in)n
-(tersection)e(of)i(t)n(w)n(o)f(great)f(circles.)0 3074
-y Fd(Synopsis:)121 b Ft(void)42 b(astIntersect\()c(AstFrame)i
-Fi(\003)p Ft(this,)h(const)h(double)f(a1[2],)g(const)h(double)f(a2[2],)
-g(const)227 3174 y(double)g(b1[2],)g(const)h(double)f(b2[2],)g(double)g
-(cross[2])g(\))0 3322 y Fd(P)m(arameters:)259 3458 y(this)427
-3557 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(F)-7 b(rame.)259
-3689 y Fd(a1)427 3789 y Fj(An)35 b(arra)n(y)d(of)i(double,)j(with)d
-(one)g(elemen)n(t)h(for)f(eac)n(h)f(F)-7 b(rame)34 b(axis)g(\(Naxes)g
-(attribute\).)57 b(This)35 b(should)427 3888 y(con)n(tain)27
-b(the)h(co)r(ordinates)e(of)i(the)g(\014rst)f(p)r(oin)n(t)h(on)f(the)h
-(\014rst)g(geo)r(desic)e(curv)n(e.)259 4020 y Fd(a2)427
-4120 y Fj(An)35 b(arra)n(y)d(of)i(double,)j(with)d(one)g(elemen)n(t)h
-(for)f(eac)n(h)f(F)-7 b(rame)34 b(axis)g(\(Naxes)g(attribute\).)57
-b(This)35 b(should)427 4219 y(con)n(tain)e(the)g(co)r(ordinates)f(of)h
-(a)f(second)h(p)r(oin)n(t)g(on)f(the)i(\014rst)f(geo)r(desic)f(curv)n
-(e.)52 b(It)33 b(should)g(not)g(b)r(e)g(co-)427 4319
-y(inciden)n(t)28 b(with)g(the)g(\014rst)g(p)r(oin)n(t.)259
-4451 y Fd(b1)427 4550 y Fj(An)35 b(arra)n(y)d(of)i(double,)j(with)d
-(one)g(elemen)n(t)h(for)f(eac)n(h)f(F)-7 b(rame)34 b(axis)g(\(Naxes)g
-(attribute\).)57 b(This)35 b(should)427 4650 y(con)n(tain)27
-b(the)h(co)r(ordinates)e(of)i(the)g(\014rst)f(p)r(oin)n(t)h(on)f(the)h
-(second)f(geo)r(desic)g(curv)n(e.)259 4782 y Fd(b2)427
-4881 y Fj(An)35 b(arra)n(y)d(of)i(double,)j(with)d(one)g(elemen)n(t)h
-(for)f(eac)n(h)f(F)-7 b(rame)34 b(axis)g(\(Naxes)g(attribute\).)57
-b(This)35 b(should)427 4981 y(con)n(tain)g(the)h(co)r(ordinates)e(of)i
-(a)f(second)g(p)r(oin)n(t)g(on)g(the)h(second)f(geo)r(desic)g(curv)n
-(e.)60 b(It)35 b(should)h(not)f(b)r(e)427 5081 y(co-inciden)n(t)27
-b(with)h(the)g(\014rst)g(p)r(oin)n(t.)259 5212 y Fd(cross)427
-5312 y Fj(An)34 b(arra)n(y)e(of)i(double,)h(with)f(one)f(elemen)n(t)h
-(for)f(eac)n(h)g(F)-7 b(rame)34 b(axis)e(in)i(whic)n(h)g(the)g(co)r
-(ordinates)f(of)g(the)427 5412 y(required)27 b(in)n(tersection)g(will)h
-(b)r(e)g(returned.)0 5572 y Fd(Notes:)p eop end
-%%Page: 252 262
-TeXDict begin 252 261 bop 0 52 a FF(252)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(F)-7 b(or)19 b(SkyF)-7 b(rames)19 b(eac)n(h)g(curv)n(e)f(will)i(b)
-r(e)g(a)g(great)e(circle,)j(and)e(in)h(general)e(eac)n(h)h(pair)g(of)h
-(curv)n(es)e(will)i(in)n(tersect)427 451 y(at)33 b(t)n(w)n(o)f
-(diametrically)f(opp)r(osite)i(p)r(oin)n(ts)f(on)h(the)g(sky)-7
-b(.)51 b(The)33 b(returned)f(p)r(osition)g(is)h(the)g(one)f(whic)n(h)h
-(is)427 551 y(closest)27 b(to)h(p)r(oin)n(t)f Ft(")p
-Fj(a1)p Ft(")p Fj(.)340 690 y Fi(\017)45 b Fj(This)19
-b(function)g(will)g(return)f Ft(")p Fj(bad)p Ft(")g Fj(co)r(ordinate)g
-(v)-5 b(alues)18 b(\(AST)p Ft(__)p Fj(BAD\))i(if)f(an)n(y)f(of)g(the)i
-(input)f(co)r(ordinates)427 790 y(has)j(this)h(v)-5 b(alue,)23
-b(or)f(if)h(the)g(t)n(w)n(o)f(p)r(oin)n(ts)g(de\014ning)g(either)h(geo)
-r(desic)e(are)h(co-inciden)n(t,)h(or)e(if)i(the)g(t)n(w)n(o)f(curv)n
-(es)427 889 y(do)28 b(not)f(in)n(tersect.)340 1029 y
-Fi(\017)45 b Fj(The)26 b(geo)r(desic)e(curv)n(e)h(used)g(b)n(y)g(this)h
-(function)g(is)f(the)h(path)f(of)h(shortest)e(distance)i(b)r(et)n(w)n
-(een)f(t)n(w)n(o)g(p)r(oin)n(ts,)427 1129 y(as)i(de\014ned)h(b)n(y)f
-(the)h(astDistance)g(function.)340 1269 y Fi(\017)45
-b Fj(An)28 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)h(the)g(F)-7
-b(rame)27 b(is)g(not)h(2-dimensional.)p 0 1482 3780 12
-v 0 1613 a Fz(astIn)l(terv)-7 b(al)831 b Fe(Create)37
-b(a)h(In)m(terv)-7 b(al)828 b Fz(astIn)l(terv)-7 b(al)0
-1793 y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(In)n(terv)-5 b(al)27 b(and)h(optionally)e(initialises)i(its)g
-(attributes.)227 1924 y(A)e(In)n(terv)-5 b(al)25 b(is)g(a)g(Region)f
-(whic)n(h)i(represen)n(ts)e(upp)r(er)h(and/or)f(lo)n(w)n(er)g(limits)h
-(on)h(one)e(or)h(more)f(axes)h(of)g(a)g(F)-7 b(rame.)227
-2024 y(F)g(or)37 b(a)g(p)r(oin)n(t)g(to)g(b)r(e)h(within)g(the)g
-(region)e(represen)n(ted)g(b)n(y)h(the)h(In)n(terv)-5
-b(al,)39 b(the)e(p)r(oin)n(t)h(m)n(ust)f(satisfy)g(all)g(the)227
-2123 y(restrictions)29 b(placed)h(on)g(all)g(the)h(axes.)44
-b(The)30 b(p)r(oin)n(t)h(is)f(outside)g(the)h(region)e(if)h(it)h(fails)
-f(to)g(satisfy)g(an)n(y)g(one)g(of)227 2223 y(the)f(restrictions.)39
-b(Eac)n(h)27 b(axis)h(ma)n(y)f(ha)n(v)n(e)h(either)g(an)g(upp)r(er)h
-(limit,)h(a)e(lo)n(w)n(er)f(limit,)i(b)r(oth)g(or)f(neither.)39
-b(If)29 b(b)r(oth)227 2323 y(limits)c(are)e(supplied)h(but)g(are)f(in)i
-(rev)n(erse)d(order)g(\(so)i(that)g(the)g(lo)n(w)n(er)e(limit)j(is)f
-(greater)e(than)i(the)g(upp)r(er)h(limit\),)227 2422
-y(then)j(the)g(in)n(terv)-5 b(al)27 b(is)h(an)f(excluded)h(in)n(terv)-5
-b(al,)27 b(rather)f(than)i(an)f(included)i(in)n(terv)-5
-b(al.)227 2554 y(A)n(t)28 b(least)f(one)h(axis)e(limit)j(m)n(ust)e(b)r
-(e)h(supplied.)227 2685 y(Note,)33 b(The)e(In)n(terv)-5
-b(al)31 b(class)g(mak)n(es)f(no)h(allo)n(w)n(ances)f(for)h(cyclic)g
-(nature)g(of)g(some)g(co)r(ordinate)g(systems)g(\(suc)n(h)227
-2785 y(as)25 b(SkyF)-7 b(rame)24 b(co)r(ordinates\).)35
-b(A)25 b(Bo)n(x)f(should)g(usually)h(b)r(e)g(used)g(in)g(these)g(cases)
-f(since)h(this)g(requires)f(the)h(user)227 2884 y(to)j(think)g(ab)r
-(out)f(suitable)h(upp)r(er)g(and)f(lo)n(w)n(er)f(limits,)0
-3047 y Fd(Synopsis:)121 b Ft(AstInterval)39 b Fi(\003)p
-Ft(astInterval\()f(AstFrame)i Fi(\003)p Ft(frame,)h(const)g(double)h
-(lbnd[],)e(const)i(double)227 3147 y(ubnd[],)f(AstRegion)f
-Fi(\003)p Ft(unc,)h(const)h(char)g Fi(\003)p Ft(options,)e(...)85
-b(\))0 3310 y Fd(P)m(arameters:)259 3461 y(frame)427
-3560 y Fj(A)29 b(p)r(oin)n(ter)g(to)f(the)i(F)-7 b(rame)28
-b(in)h(whic)n(h)g(the)g(region)e(is)i(de\014ned.)41 b(A)29
-b(deep)g(cop)n(y)f(is)g(tak)n(en)g(of)h(the)g(supplied)427
-3660 y(F)-7 b(rame.)71 b(This)39 b(means)f(that)h(an)n(y)g(subsequen)n
-(t)f(c)n(hanges)g(made)h(to)f(the)i(F)-7 b(rame)38 b(using)h(the)g
-(supplied)427 3759 y(p)r(oin)n(ter)27 b(will)h(ha)n(v)n(e)f(no)g
-(e\013ect)h(the)g(Region.)259 3899 y Fd(lbnd)427 3999
-y Fj(An)k(arra)n(y)c(of)j(double,)h(with)g(one)e(elemen)n(t)i(for)e
-(eac)n(h)g(F)-7 b(rame)31 b(axis)f(\(Naxes)h(attribute\))g(con)n
-(taining)f(the)427 4098 y(lo)n(w)n(er)f(limits)h(on)g(eac)n(h)f(axis.)
-43 b(Set)31 b(a)e(v)-5 b(alue)30 b(to)g(AST)p Ft(__)p
-Fj(BAD)g(to)g(indicate)g(that)g(the)h(axis)e(has)g(no)h(lo)n(w)n(er)427
-4198 y(limit.)259 4338 y Fd(ubnd)427 4437 y Fj(An)i(arra)n(y)c(of)j
-(double,)h(with)g(one)e(elemen)n(t)i(for)e(eac)n(h)g(F)-7
-b(rame)31 b(axis)f(\(Naxes)h(attribute\))g(con)n(taining)f(the)427
-4537 y(upp)r(er)e(limits)h(on)e(eac)n(h)g(axis.)37 b(Set)28
-b(a)f(v)-5 b(alue)28 b(to)g(AST)p Ft(__)p Fj(BAD)g(to)f(indicate)h
-(that)g(the)h(axis)e(has)g(no)g(upp)r(er)427 4637 y(limit.)259
-4776 y Fd(unc)427 4876 y Fj(An)33 b(optional)e(p)r(oin)n(ter)h(to)g(an)
-g(existing)g(Region)f(whic)n(h)h(sp)r(eci\014es)g(the)h(uncertain)n
-(ties)e(asso)r(ciated)g(with)427 4976 y(the)j(b)r(oundary)f(of)g(the)h
-(Bo)n(x)f(b)r(eing)g(created.)54 b(The)34 b(uncertain)n(t)n(y)e(in)i
-(an)n(y)f(p)r(oin)n(t)h(on)f(the)h(b)r(oundary)f(of)427
-5075 y(the)g(Bo)n(x)e(is)h(found)h(b)n(y)f(shifting)h(the)f(supplied)h
-Ft(")p Fj(uncertain)n(t)n(y)p Ft(")e Fj(Region)g(so)h(that)g(it)h(is)f
-(cen)n(tred)g(at)g(the)427 5175 y(b)r(oundary)e(p)r(oin)n(t)h(b)r(eing)
-g(considered.)44 b(The)31 b(area)e(co)n(v)n(ered)g(b)n(y)h(the)h
-(shifted)g(uncertain)n(t)n(y)f(Region)g(then)427 5274
-y(represen)n(ts)g(the)i(uncertain)n(t)n(y)f(in)g(the)h(b)r(oundary)f(p)
-r(osition.)48 b(The)31 b(uncertain)n(t)n(y)g(is)g(assumed)g(to)g(b)r(e)
-h(the)427 5374 y(same)27 b(for)g(all)h(p)r(oin)n(ts.)427
-5494 y(If)38 b(supplied,)j(the)d(uncertain)n(t)n(y)f(Region)g(m)n(ust)g
-(b)r(e)i(of)e(a)g(class)g(for)g(whic)n(h)h(all)f(instances)g(are)g(cen)
-n(tro-)427 5593 y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24
-b(Circle,)g(Ellipse,)h(etc.\))36 b(or)23 b(b)r(e)i(a)e(Prism)h(con)n
-(taining)f(cen)n(tro-symetric)f(comp)r(onen)n(t)427 5693
-y(Regions.)57 b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f
-(will)g(b)r(e)h(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)
-p eop end
-%%Page: 253 263
-TeXDict begin 253 262 bop 3643 52 a FF(253)427 351 y
-Fj(uncertain)n(t)n(y)28 b(Region)f(using)h(the)h(supplied)f(p)r(oin)n
-(ter)g(will)h(ha)n(v)n(e)e(no)h(e\013ect)h(on)f(the)g(created)g(Bo)n
-(x.)38 b(Alter-)427 451 y(nativ)n(ely)-7 b(,)24 b(a)g(NULL)g(Ob)5
-b(ject)24 b(p)r(oin)n(ter)f(ma)n(y)h(b)r(e)g(supplied,)h(in)f(whic)n(h)
-g(case)f(a)g(default)i(uncertain)n(t)n(y)e(is)h(used)427
-551 y(equiv)-5 b(alen)n(t)28 b(to)f(a)g(b)r(o)n(x)g(1.0E-6)f(of)h(the)h
-(size)g(of)f(the)h(Bo)n(x)f(b)r(eing)g(created.)427 670
-y(The)c(uncertain)n(t)n(y)f(Region)g(has)g(t)n(w)n(o)g(uses:)34
-b(1\))22 b(when)h(the)g(astOv)n(erlap)d(function)k(compares)d(t)n(w)n
-(o)h(Regions)427 770 y(for)g(equalit)n(y)h(the)g(uncertain)n(t)n(y)f
-(Region)g(is)g(used)h(to)g(determine)f(the)i(tolerance)d(on)i(the)g
-(comparison,)f(and)427 869 y(2\))31 b(when)f(a)h(Region)e(is)i(mapp)r
-(ed)g(in)n(to)f(a)g(di\013eren)n(t)h(co)r(ordinate)e(system)i(and)f
-(subsequen)n(tly)g(simpli\014ed)427 969 y(\(using)c(astSimplify\),)h
-(the)f(uncertain)n(ties)f(are)g(used)h(to)g(determine)g(if)g(the)g
-(transformed)f(b)r(oundary)g(can)427 1069 y(b)r(e)j(accurately)e
-(represen)n(ted)h(b)n(y)g(a)g(sp)r(eci\014c)h(shap)r(e)f(of)h(Region.)
-259 1208 y Fd(options)427 1307 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 1407 y(assignmen)n(ts)f
-(to)h(b)r(e)g(used)g(for)f(initialising)h(the)g(new)g(In)n(terv)-5
-b(al.)37 b(The)28 b(syn)n(tax)e(used)i(is)g(iden)n(tical)g(to)f(that)
-427 1507 y(for)f(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-1606 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 1746
-y Fd(...)427 1845 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 1945 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 2045 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 2144 y Fj(function\).)0 2319
-y Fd(Returned)32 b(V)-8 b(alue:)259 2469 y(astIn)m(terv)j(al\(\))427
-2568 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(In)n(terv)-5
-b(al.)0 2743 y Fd(Notes:)340 3039 y Fi(\017)45 b Fj(A)35
-b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 3138 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)-2 3313 y Fd(Status)33 b(Handling)n(:)227 3459
-y Fj(The)d(protected)g(in)n(terface)f(to)g(this)h(function)h(includes)f
-(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g(the)g(parameter)227
-3559 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37
-b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)e
-(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fj(in)n(t)227
-3659 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p 0 3871 3780
-12 v 0 4002 a Fz(astIn)l(traMap)1378 4001 y Fe(Create)37
-b(an)h(In)m(traMap)3047 4002 y Fz(astIn)l(traMap)0 4203
-y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g(In)n
-(traMap)g(and)g(optionally)g(initialises)g(its)h(attributes.)227
-4334 y(An)k(In)n(traMap)e(is)h(a)g(sp)r(ecialised)g(form)g(of)g
-(Mapping)g(whic)n(h)g(encapsulates)f(a)h(priv)-5 b(ately-de\014ned)31
-b(co)r(ordinate)227 4434 y(transformation)e(function)i(\(e.g.)44
-b(written)31 b(in)f(C\))h(so)e(that)i(it)f(ma)n(y)g(b)r(e)g(used)g(lik)
-n(e)g(an)n(y)g(other)f(AST)i(Mapping.)227 4534 y(This)d(allo)n(ws)e(y)n
-(ou)h(to)g(create)g(Mappings)g(that)h(p)r(erform)f(an)n(y)g(conceiv)-5
-b(able)27 b(co)r(ordinate)f(transformation.)227 4665
-y(Ho)n(w)n(ev)n(er,)k(an)h(In)n(traMap)g(is)g(in)n(tended)g(for)g(use)g
-(within)h(a)f(single)f(program)g(or)g(a)h(priv)-5 b(ate)31
-b(suite)g(of)g(soft)n(w)n(are,)227 4764 y(where)24 b(all)g(programs)d
-(ha)n(v)n(e)i(access)g(to)h(the)g(same)g(co)r(ordinate)f
-(transformation)f(functions)j(\(i.e.)36 b(can)23 b(b)r(e)i(link)n(ed)
-227 4864 y(against)40 b(them\).)76 b(In)n(traMaps)39
-b(should)h(not)h(normally)e(b)r(e)i(stored)f(in)g(datasets)g(whic)n(h)g
-(ma)n(y)g(b)r(e)h(exp)r(orted)227 4964 y(for)34 b(pro)r(cessing)f(b)n
-(y)h(other)g(soft)n(w)n(are,)g(since)g(that)h(soft)n(w)n(are)e(will)h
-(not)h(ha)n(v)n(e)e(the)i(necessary)d(transformation)227
-5063 y(functions)c(a)n(v)-5 b(ailable,)27 b(resulting)g(in)g(an)h
-(error.)227 5194 y(Y)-7 b(ou)36 b(m)n(ust)f(register)f(an)n(y)h(co)r
-(ordinate)f(transformation)g(functions)i(to)f(b)r(e)h(used)f(using)g
-(astIn)n(traReg)f(b)r(efore)227 5294 y(creating)27 b(an)g(In)n(traMap.)
-0 5456 y Fd(Synopsis:)121 b Ft(AstIntraMap)39 b Fi(\003)p
-Ft(astIntraMap\()f(const)k(char)f Fi(\003)p Ft(name,)h(int)g(nin,)g
-(int)g(nout,)g(const)f(char)h Fi(\003)p Ft(options,)227
-5556 y(...)86 b(\))0 5718 y Fd(P)m(arameters:)p eop end
-%%Page: 254 264
-TeXDict begin 254 263 bop 0 52 a FF(254)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(name)427
-451 y Fj(P)n(oin)n(ter)k(to)i(a)f(n)n(ull-terminated)g(string)g(con)n
-(taining)f(the)i(name)f(of)h(the)g(transformation)e(function)i(to)427
-551 y(use)h(\(whic)n(h)h(should)f(previously)e(ha)n(v)n(e)h(b)r(een)i
-(registered)e(using)g(astIn)n(traReg\).)64 b(This)38
-b(name)e(is)h(case)427 650 y(sensitiv)n(e.)g(All)28 b(white)g(space)e
-(will)i(b)r(e)g(remo)n(v)n(ed)e(b)r(efore)i(use.)259
-782 y Fd(nin)427 882 y Fj(The)d(n)n(um)n(b)r(er)f(of)g(input)h(co)r
-(ordinates.)34 b(This)24 b(m)n(ust)h(b)r(e)f(compatible)g(with)h(the)g
-(n)n(um)n(b)r(er)f(of)g(input)h(co)r(ordi-)427 981 y(nates)f(accepted)g
-(b)n(y)g(the)h(transformation)e(function)h(\(as)g(sp)r(eci\014ed)h
-(when)f(this)h(function)g(w)n(as)e(registered)427 1081
-y(using)28 b(astIn)n(traReg\).)259 1213 y Fd(nout)427
-1312 y Fj(The)37 b(n)n(um)n(b)r(er)f(of)g(output)h(co)r(ordinates.)63
-b(This)36 b(m)n(ust)h(b)r(e)f(compatible)h(with)g(the)f(n)n(um)n(b)r
-(er)h(of)f(output)427 1412 y(co)r(ordinates)f(pro)r(duced)h(b)n(y)g
-(the)g(transformation)f(function)i(\(as)f(sp)r(eci\014ed)g(when)g(this)
-h(function)g(w)n(as)427 1512 y(registered)26 b(using)i(astIn)n
-(traReg\).)259 1643 y Fd(options)427 1743 y Fj(P)n(oin)n(ter)f(to)h(a)g
-(n)n(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 1843 y(assignmen)n(ts)22
-b(to)i(b)r(e)f(used)h(for)f(initialising)g(the)h(new)f(In)n(traMap.)34
-b(The)24 b(syn)n(tax)e(used)i(is)f(iden)n(tical)g(to)g(that)427
-1942 y(for)j(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-2042 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 2174
-y Fd(...)427 2273 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 2373 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 2473 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 2572 y Fj(function\).)0 2733
-y Fd(Returned)32 b(V)-8 b(alue:)259 2869 y(astIn)m(traMap\(\))427
-2968 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(In)n(traMap.)0
-3129 y Fd(Notes:)340 3411 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 3510 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 3707 3780 12 v 0 3838
-a Fz(astIn)l(traReg)914 3839 y Fe(Register)38 b(a)g(transformation)d
-(function)i(for)1384 3954 y(use)i(b)m(y)g(an)f(In)m(traMap)3086
-3838 y Fz(astIn)l(traReg)0 4140 y Fd(Description:)44
-b Fj(This)30 b(function)h(registers)e(a)g(priv)-5 b(ately-de\014ned)30
-b(co)r(ordinate)f(transformation)f(function)j(written)f(in)227
-4240 y(C)h(so)g(that)g(it)h(ma)n(y)e(b)r(e)i(used)f(to)g(create)f(an)h
-(In)n(traMap.)47 b(An)31 b(In)n(traMap)g(is)g(a)f(sp)r(ecialised)h
-(form)g(of)g(Mapping)227 4340 y(whic)n(h)23 b(encapsulates)f(the)h(C)f
-(function)i(so)e(that)g(it)i(ma)n(y)d(b)r(e)j(used)e(lik)n(e)g(an)n(y)g
-(other)g(AST)h(Mapping.)35 b(This)23 b(allo)n(ws)227
-4439 y(y)n(ou)k(to)h(create)e(Mappings)h(that)h(p)r(erform)f(an)n(y)g
-(conceiv)-5 b(able)27 b(co)r(ordinate)f(transformation.)227
-4563 y(Registration)36 b(of)g(relev)-5 b(an)n(t)36 b(transformation)f
-(functions)i(is)f(required)g(b)r(efore)g(using)g(the)h(astIn)n(traMap)e
-(con-)227 4663 y(structor)24 b(function)g(to)h(create)e(an)h(In)n
-(traMap)f(or)g(reading)h(an)g(external)f(represen)n(tation)g(of)h(an)g
-(In)n(traMap)f(from)227 4763 y(a)k(Channel.)0 4911 y
-Fd(Synopsis:)121 b Ft(astIntraReg\()38 b(const)k(char)g
-Fi(\003)p Ft(name,)f(int)h(nin,)g(int)h(nout,)e(void)h(\()p
-Fi(\003)h Ft(tran\)\()e(AstMapping)e Fi(\003)p Ft(,)227
-5011 y(int,)j(int,)g(const)g(double)f Fi(\003)p Ft([],)h(int,)g(int,)f
-(double)h Fi(\003)p Ft([])g(\),)h(unsigned)d(int)i(flags,)f(const)h
-(char)227 5110 y Fi(\003)p Ft(purpose,)e(const)i(char)g
-Fi(\003)p Ft(author,)e(const)h(char)h Fi(\003)p Ft(contact)e(\))0
-5259 y Fd(P)m(arameters:)259 5394 y(name)427 5494 y Fj(P)n(oin)n(ter)22
-b(to)i(a)f(n)n(ull-terminated)h(string)f(con)n(taining)g(a)g(unique)h
-(name)g(to)g(b)r(e)g(asso)r(ciated)e(with)i(the)h(trans-)427
-5593 y(formation)30 b(function)i(in)f(order)f(to)h(iden)n(tify)g(it.)48
-b(This)31 b(name)g(is)g(case)f(sensitiv)n(e.)46 b(All)32
-b(white)f(space)f(will)427 5693 y(b)r(e)e(remo)n(v)n(ed)e(b)r(efore)i
-(use.)p eop end
-%%Page: 255 265
-TeXDict begin 255 264 bop 3643 52 a FF(255)259 351 y
-Fd(nin)427 451 y Fj(The)31 b(n)n(um)n(b)r(er)f(of)g(input)h(co)r
-(ordinates)e(accepted)h(b)n(y)g(the)h(transformation)e(function)i
-(\(i.e.)45 b(the)31 b(n)n(um)n(b)r(er)427 551 y(of)c(dimensions)g(of)g
-(the)g(space)f(in)h(whic)n(h)g(the)h(input)f(p)r(oin)n(ts)g(reside\).)
-37 b(A)27 b(v)-5 b(alue)27 b(of)g(AST)p Ft(__)p Fj(ANY)g(ma)n(y)f(b)r
-(e)427 650 y(giv)n(en)h(if)h(the)g(function)g(is)g(able)f(to)h(accommo)
-r(date)e(a)h(v)-5 b(ariable)27 b(n)n(um)n(b)r(er)g(of)h(input)g(co)r
-(ordinates.)259 794 y Fd(nout)427 893 y Fj(The)d(n)n(um)n(b)r(er)f(of)h
-(output)g(co)r(ordinates)e(pro)r(duced)i(b)n(y)f(the)h(transformation)e
-(function)j(\(i.e.)36 b(the)25 b(n)n(um)n(b)r(er)427
-993 y(of)31 b(dimensions)f(of)h(the)g(space)f(in)h(whic)n(h)f(the)h
-(output)h(p)r(oin)n(ts)e(reside\).)46 b(A)31 b(v)-5 b(alue)31
-b(of)f(AST)p Ft(__)p Fj(ANY)h(ma)n(y)427 1092 y(b)r(e)d(giv)n(en)f(if)h
-(the)g(function)g(is)g(able)f(to)h(pro)r(duce)f(a)g(v)-5
-b(ariable)26 b(n)n(um)n(b)r(er)i(of)f(output)h(co)r(ordinates.)259
-1236 y Fd(tran)427 1336 y Fj(P)n(oin)n(ter)e(to)i(the)f(transformation)
-f(function)i(to)g(b)r(e)g(registered.)35 b(This)28 b(function)g(should)
-f(p)r(erform)g(what-)427 1435 y(ev)n(er)40 b(co)r(ordinate)g
-(transformations)f(are)h(required)h(and)g(should)f(ha)n(v)n(e)g(an)h
-(in)n(terface)g(lik)n(e)f(astT)-7 b(ranP)427 1535 y(\(q.v.\).)259
-1678 y Fd(\015ags)427 1778 y Fj(This)31 b(v)-5 b(alue)31
-b(ma)n(y)f(b)r(e)i(used)f(to)f(supply)h(a)g(set)g(of)g(\015ags)f(whic)n
-(h)h(describ)r(e)f(the)i(transformation)d(function)427
-1878 y(and)j(whic)n(h)h(ma)n(y)e(a\013ect)i(the)g(b)r(eha)n(viour)e(of)
-h(an)n(y)g(In)n(traMap)f(whic)n(h)h(uses)g(it.)52 b(Often,)34
-b(a)e(v)-5 b(alue)32 b(of)h(zero)427 1977 y(will)e(b)r(e)f(giv)n(en)g
-(here,)g(but)h(y)n(ou)e(ma)n(y)h(also)f(supply)h(the)h(bit)n(wise)f(OR)
-g(of)g(a)f(set)i(of)f(\015ags)f(as)g(describ)r(ed)h(in)427
-2077 y(the)e Ft(")p Fj(T)-7 b(ransformation)26 b(Flags)p
-Ft(")g Fj(section)h(\(b)r(elo)n(w\).)259 2220 y Fd(purp)s(ose)427
-2320 y Fj(P)n(oin)n(ter)d(to)h(a)g(n)n(ull-terminated)g(string)g(con)n
-(taining)f(a)h(short)f(\(one)h(line\))h(textual)g(commen)n(t)f(to)g
-(describ)r(e)427 2420 y(the)j(purp)r(ose)f(of)h(the)g(transformation)e
-(function.)259 2563 y Fd(author)427 2663 y Fj(P)n(oin)n(ter)h(to)i(a)g
-(n)n(ull-terminated)f(string)g(con)n(taining)g(the)h(name)g(of)g(the)g
-(author)f(of)h(the)g(transformation)427 2762 y(function.)259
-2906 y Fd(con)m(tact)427 3005 y Fj(P)n(oin)n(ter)35 b(to)i(a)f(n)n
-(ull-terminated)g(string)g(con)n(taining)g(con)n(tact)g(details)g(for)g
-(the)h(author)f(of)h(the)g(trans-)427 3105 y(formation)h(function)h
-(\(e.g.)69 b(an)38 b(e-mail)g(or)f(WWW)i(address\).)68
-b(If)39 b(an)n(y)f(In)n(traMap)f(whic)n(h)h(uses)g(this)427
-3205 y(transformation)33 b(function)i(is)f(exp)r(orted)f(as)h(part)g
-(of)g(a)f(dataset)h(to)g(an)g(external)f(user)h(who)g(do)r(es)g(not)427
-3304 y(ha)n(v)n(e)28 b(access)g(to)h(the)h(function,)g(then)g(these)f
-(con)n(tact)g(details)g(should)g(allo)n(w)f(them)h(to)g(obtain)g(the)h
-(nec-)427 3404 y(essary)c(co)r(de.)0 3587 y Fd(Notes:)340
-3891 y Fi(\017)45 b Fj(Bew)n(are)27 b(that)i(an)f(external)f(represen)n
-(tation)g(of)h(an)g(In)n(traMap)f(\(created)h(b)n(y)g(writing)g(it)g
-(to)h(a)e(Channel\))427 3991 y(will)e(not)f(include)h(the)f(co)r
-(ordinate)f(transformation)g(function)h(whic)n(h)h(it)f(uses,)h(so)e
-(will)i(only)f(refer)f(to)h(the)427 4090 y(function)j(b)n(y)e(its)h
-(name)g(\(as)f(assigned)g(using)g(astIn)n(traReg\).)35
-b(Consequen)n(tly)-7 b(,)25 b(the)i(external)e(represen)n(ta-)427
-4190 y(tion)h(cannot)g(b)r(e)g(utilised)h(b)n(y)f(another)f(program)f
-(unless)h(that)i(program)d(has)h(also)g(registered)g(the)h(same)427
-4289 y(transformation)g(function)i(with)f(the)h(same)e(name)h(using)g
-(an)g(iden)n(tical)g(in)n(v)n(o)r(cation)f(of)h(astIn)n(traReg.)35
-b(If)427 4389 y(no)24 b(suc)n(h)g(registration)e(has)i(b)r(een)g(p)r
-(erformed,)g(then)h(attempting)f(to)g(read)g(the)g(external)f(represen)
-n(tation)427 4489 y(will)28 b(result)f(in)h(an)g(error.)340
-4632 y Fi(\017)45 b Fj(Y)-7 b(ou)36 b(ma)n(y)f(use)g(astIn)n(traReg)f
-(to)i(register)e(a)h(transformation)f(function)j(with)f(the)g(same)f
-(name)g(more)427 4732 y(than)30 b(once,)f(but)h(only)f(if)h(the)g
-(argumen)n(ts)e(supplied)h(are)g(iden)n(tical)g(on)g(eac)n(h)g(o)r
-(ccasion)f(\(i.e)h(there)h(is)f(no)427 4831 y(w)n(a)n(y)e(of)h(c)n
-(hanging)e(things)i(once)f(a)g(function)i(has)e(b)r(een)h(successfully)
-f(registered)g(under)g(a)h(giv)n(en)f(name,)427 4931
-y(and)32 b(attempting)h(to)e(do)h(so)g(will)g(result)g(in)g(an)g
-(error\).)48 b(This)32 b(feature)g(simply)g(allo)n(ws)f(registration)f
-(to)427 5031 y(b)r(e)25 b(p)r(erformed)e(indep)r(enden)n(tly)-7
-b(,)26 b(but)f(consisten)n(tly)-7 b(,)24 b(at)g(sev)n(eral)e(places)i
-(within)h(y)n(our)d(program,)h(without)427 5130 y(ha)n(ving)k(to)g(c)n
-(hec)n(k)g(whether)g(it)h(has)g(already)e(b)r(een)i(done.)340
-5274 y Fi(\017)45 b Fj(If)30 b(an)f(error)e(o)r(ccurs)i(in)g(the)h
-(transformation)e(function,)i(this)f(ma)n(y)g(b)r(e)h(indicated)f(b)n
-(y)g(setting)h(the)f(AST)427 5373 y(error)h(status)i(to)f(an)h(error)e
-(v)-5 b(alue)31 b(\(using)h(astSetStatus\))g(b)r(efore)g(it)g(returns.)
-49 b(This)31 b(will)h(immediately)427 5473 y(terminate)k(the)h(curren)n
-(t)f(AST)g(op)r(eration.)62 b(The)37 b(error)d(v)-5 b(alue)37
-b(AST)p Ft(__)p Fj(ITFER)e(is)h(a)n(v)-5 b(ailable)35
-b(for)h(this)427 5573 y(purp)r(ose,)27 b(but)h(other)f(v)-5
-b(alues)28 b(ma)n(y)e(also)h(b)r(e)h(used)f(\(e.g.)37
-b(if)28 b(y)n(ou)f(wish)g(to)h(distinguish)f(di\013eren)n(t)h(t)n(yp)r
-(es)g(of)427 5672 y(error\).)p eop end
-%%Page: 256 266
-TeXDict begin 256 265 bop 0 52 a FF(256)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)-2 351 y Fd(T)-8 b(ransformation)33
-b(Flags)n(:)227 497 y Fj(The)19 b(follo)n(wing)f(\015ags)f(are)h
-(de\014ned)h(in)g(the)g(\\ast.h")f(header)g(\014le)g(and)h(allo)n(w)f
-(y)n(ou)g(to)g(pro)n(vide)g(further)g(information)227
-597 y(ab)r(out)27 b(the)g(nature)f(of)h(the)g(transformation)e
-(function.)37 b(Ha)n(ving)26 b(selected)g(the)h(set)g(of)f(\015ags)g
-(whic)n(h)h(apply)-7 b(,)26 b(y)n(ou)227 697 y(should)i(supply)f(the)h
-(bit)n(wise)g(OR)f(of)h(their)f(v)-5 b(alues)27 b(as)g(the)h
-(\\\015ags")e(argumen)n(t)h(to)g(astIn)n(traReg.)340
-968 y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(NOFWD:)38 b(If)g(this)f(\015ag)g
-(is)g(set,)i(it)f(indicates)f(that)h(the)f(transformation)f(function)i
-(do)r(es)f(not)427 1068 y(implemen)n(t)24 b(a)f(forw)n(ard)e(co)r
-(ordinate)h(transformation.)33 b(In)24 b(this)f(case,)g(an)n(y)f(In)n
-(traMap)g(whic)n(h)h(uses)g(it)g(will)427 1167 y(ha)n(v)n(e)i(a)g(T)-7
-b(ranF)g(orw)n(ard)22 b(attribute)k(v)-5 b(alue)25 b(of)h(zero)e(and)h
-(the)h(transformation)e(function)i(itself)g(will)g(not)f(b)r(e)427
-1267 y(in)n(v)n(ok)n(ed)i(with)j(its)e(\\forw)n(ard")e(argumen)n(t)i
-(set)g(to)h(a)f(non-zero)f(v)-5 b(alue.)40 b(By)28 b(default,)i(it)f
-(is)f(assumed)g(that)427 1367 y(a)f(forw)n(ard)f(transformation)g(is)i
-(pro)n(vided.)340 1503 y Fi(\017)45 b Fj(AST)p Ft(__)p
-Fj(NOINV:)c(If)h(this)f(\015ag)f(is)h(set,)j(it)d(indicates)g(that)g
-(the)g(transformation)f(function)h(do)r(es)g(not)427
-1603 y(implemen)n(t)34 b(an)g(in)n(v)n(erse)e(co)r(ordinate)g
-(transformation.)53 b(In)34 b(this)g(case,)g(an)n(y)f(In)n(traMap)g
-(whic)n(h)g(uses)g(it)427 1702 y(will)26 b(ha)n(v)n(e)e(a)h(T)-7
-b(ranIn)n(v)n(erse)24 b(attribute)h(v)-5 b(alue)26 b(of)f(zero)g(and)g
-(the)h(transformation)e(function)i(itself)g(will)g(not)427
-1802 y(b)r(e)g(in)n(v)n(ok)n(ed)d(with)i(its)h(\\forw)n(ard")c(argumen)
-n(t)i(set)h(to)f(zero.)35 b(By)25 b(default,)h(it)f(is)g(assumed)f
-(that)h(an)g(in)n(v)n(erse)427 1901 y(transformation)h(is)i(pro)n
-(vided.)340 2038 y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(SIMPFI:)24
-b(Y)-7 b(ou)25 b(ma)n(y)e(set)i(this)g(\015ag)e(if)i(applying)f(the)h
-(transformation)e(function's)h(forw)n(ard)f(co)r(or-)427
-2137 y(dinate)k(transformation,)f(follo)n(w)n(ed)g(immediately)i(b)n(y)
-e(the)i(matc)n(hing)f(in)n(v)n(erse)e(transformation,)h(should)427
-2237 y(alw)n(a)n(ys)j(restore)f(the)j(original)e(set)h(of)g(co)r
-(ordinates.)44 b(It)30 b(indicates)g(that)h(AST)g(ma)n(y)e(replace)g
-(suc)n(h)h(a)g(se-)427 2337 y(quence)19 b(of)h(op)r(erations)e(b)n(y)h
-(an)g(iden)n(tit)n(y)g(Mapping)g(\(a)g(UnitMap\))i(if)e(it)h(is)f
-(encoun)n(tered)g(while)g(simplifying)427 2436 y(a)26
-b(comp)r(ound)g(Mapping)g(\(e.g.)37 b(using)26 b(astSimplify\).)37
-b(It)26 b(is)g(not)h(necessary)d(that)j(b)r(oth)g(transformations)427
-2536 y(ha)n(v)n(e)g(actually)g(b)r(een)h(implemen)n(ted.)340
-2672 y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(SIMPIF:)27 b(Y)-7
-b(ou)27 b(ma)n(y)f(set)h(this)g(\015ag)f(if)i(applying)e(the)h
-(transformation)e(function's)j(in)n(v)n(erse)d(co)r(or-)427
-2772 y(dinate)f(transformation,)f(follo)n(w)n(ed)g(immediately)g(b)n(y)
-h(the)g(matc)n(hing)f(forw)n(ard)f(transformation,)h(should)427
-2872 y(alw)n(a)n(ys)29 b(restore)f(the)j(original)e(set)h(of)g(co)r
-(ordinates.)44 b(It)30 b(indicates)g(that)h(AST)g(ma)n(y)e(replace)g
-(suc)n(h)h(a)g(se-)427 2971 y(quence)19 b(of)h(op)r(erations)e(b)n(y)h
-(an)g(iden)n(tit)n(y)g(Mapping)g(\(a)g(UnitMap\))i(if)e(it)h(is)f
-(encoun)n(tered)g(while)g(simplifying)427 3071 y(a)26
-b(comp)r(ound)g(Mapping)g(\(e.g.)37 b(using)26 b(astSimplify\).)37
-b(It)26 b(is)g(not)h(necessary)d(that)j(b)r(oth)g(transformations)427
-3170 y(ha)n(v)n(e)g(actually)g(b)r(een)h(implemen)n(ted.)p
-0 3377 3780 12 v 0 3507 a Fz(astIn)l(v)l(ert)917 b Fe(In)m(v)m(ert)37
-b(a)i(Mapping)914 b Fz(astIn)l(v)l(ert)0 3703 y Fd(Description:)44
-b Fj(This)28 b(function)g(in)n(v)n(erts)e(a)i(Mapping)f(b)n(y)g(rev)n
-(ersing)e(the)j(b)r(o)r(olean)f(sense)g(of)h(its)g(In)n(v)n(ert)e
-(attribute.)37 b(If)227 3803 y(this)d(attribute)g(is)f(zero)g(\(the)h
-(default\),)i(the)e(Mapping)f(will)h(transform)e(co)r(ordinates)g(in)i
-(the)g(w)n(a)n(y)e(sp)r(eci\014ed)227 3902 y(when)f(it)h(w)n(as)e
-(created.)46 b(If)31 b(it)g(is)g(non-zero,)f(the)h(input)h(and)f
-(output)g(co)r(ordinates)f(will)h(b)r(e)g(in)n(ter-c)n(hanged)e(so)227
-4002 y(that)24 b(the)f(direction)g(of)g(the)g(Mapping)g(is)g(rev)n
-(ersed.)34 b(This)23 b(will)g(cause)g(it)g(to)g(displa)n(y)g(the)g(in)n
-(v)n(erse)f(of)h(its)g(original)227 4101 y(b)r(eha)n(viour.)0
-4258 y Fd(Synopsis:)121 b Ft(void)42 b(astInvert\()d(AstMapping)h
-Fi(\003)p Ft(this)h(\))0 4414 y Fd(P)m(arameters:)259
-4558 y(this)427 4657 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Mapping.)p
-0 4864 V 0 4995 a Fz(astIsA)p Fc(<)p Fz(Class)p Fc(>)175
-b Fe(T)-10 b(est)38 b(mem)m(b)s(ership)g(of)g(a)g(class)h(b)m(y)f(an)
-1716 5110 y(Ob)7 b(ject)2916 4995 y Fz(astIsA)p Fc(<)p
-Fz(Class)p Fc(>)0 5306 y Fd(Description:)44 b Fj(This)26
-b(is)f(a)g(family)g(of)g(functions)h(whic)n(h)f(test)g(whether)h(an)f
-(Ob)5 b(ject)25 b(is)g(a)g(mem)n(b)r(er)g(of)g(the)h(class)e(called)227
-5406 y Fl(<)p Fj(Class)p Fl(>)p Fj(,)i(or)h(of)g(an)n(y)g(class)g
-(deriv)n(ed)g(from)g(it.)0 5562 y Fd(Synopsis:)121 b
-Ft(int)42 b(astIsA)p Fl(<)p Ft(Class)p Fl(>)p Ft(\()c(const)j(Ast)p
-Fl(<)p Ft(Class)p Fl(>)f Fi(\003)p Ft(this)h(\))0 5718
-y Fd(P)m(arameters:)p eop end
-%%Page: 257 267
-TeXDict begin 257 266 bop 3643 52 a FF(257)259 351 y
-Fd(this)427 451 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5
-b(ject.)0 614 y Fd(Class)31 b(Applicabilit)m(y:)259 751
-y(Ob)5 b(ject)427 851 y Fj(These)28 b(functions)f(apply)h(to)f(all)h
-(Ob)5 b(jects.)0 1013 y Fd(Returned)32 b(V)-8 b(alue:)259
-1151 y(astIsA)p Fl(<)p Fd(Class)p Fl(>)p Fd(\(\))427
-1250 y Fj(One)21 b(if)h(the)g(Ob)5 b(ject)22 b(b)r(elongs)f(to)g(the)h
-(class)e(called)h Fl(<)p Fj(Class)p Fl(>)f Fj(\(or)h(to)h(a)f(class)f
-(deriv)n(ed)h(from)g(it\),)j(otherwise)427 1350 y(zero.)0
-1513 y Fd(Examples:)227 1651 y Fq(member)46 b(=)i(astIsAFrame\()c(obj)j
-(\);)427 1750 y Fj(T)-7 b(ests)31 b(whether)f(Ob)5 b(ject)31
-b Ft(")p Fj(ob)5 b(j)p Ft(")30 b Fj(is)g(a)g(mem)n(b)r(er)h(of)g(the)g
-(F)-7 b(rame)30 b(class,)h(or)e(of)i(an)n(y)f(class)g(deriv)n(ed)g
-(from)g(a)427 1850 y(F)-7 b(rame.)0 2012 y Fd(Notes:)340
-2296 y Fi(\017)45 b Fj(Ev)n(ery)31 b(AST)i(class)e(pro)n(vides)g(a)h
-(function)h(\(astIsA)p Fl(<)p Fj(Class)p Fl(>)p Fj(\))e(of)h(this)h
-(form,)g(where)f Fl(<)p Fj(Class)p Fl(>)f Fj(should)427
-2395 y(b)r(e)d(replaced)f(b)n(y)g(the)h(class)f(name.)340
-2529 y Fi(\017)45 b Fj(This)30 b(function)h(attempts)f(to)g(execute)g
-(ev)n(en)g(if)g(the)g(AST)h(error)d(status)i(is)g(set)g(on)f(en)n(try)
--7 b(,)31 b(although)e(no)427 2628 y(further)f(error)d(rep)r(ort)i
-(will)h(b)r(e)g(made)f(if)i(it)f(subsequen)n(tly)f(fails)g(under)h
-(these)f(circumstances.)340 2762 y Fi(\017)45 b Fj(A)31
-b(v)-5 b(alue)31 b(of)g(zero)f(will)h(b)r(e)g(returned)g(if)g(this)g
-(function)h(should)e(fail)h(for)g(an)n(y)f(reason.)45
-b(In)31 b(particular,)f(it)427 2861 y(will)e(fail)g(if)g(the)g(p)r(oin)
-n(ter)f(supplied)h(do)r(es)f(not)h(iden)n(tify)g(an)f(Ob)5
-b(ject)28 b(of)f(an)n(y)g(sort.)p 0 3061 3780 12 v 0
-3192 a Fz(astKeyMap)760 b Fe(Create)37 b(a)h(KeyMap)758
-b Fz(astKeyMap)0 3382 y Fd(Description:)44 b Fj(This)19
-b(function)g(creates)f(a)g(new)h(empt)n(y)g(KeyMap)e(and)i(optionally)f
-(initialises)g(its)h(attributes.)34 b(En)n(tries)227
-3481 y(can)27 b(then)i(b)r(e)f(added)f(to)h(the)f(KeyMap)g(using)g(the)
-h(astMapPut0)p Fl(<)p Fj(X)p Fl(>)e Fj(and)i(astMapPut1)p
-Fl(<)p Fj(X)p Fl(>)d Fj(functions.)227 3606 y(The)30
-b(KeyMap)f(class)g(is)h(used)g(to)g(store)f(a)g(set)h(of)g(v)-5
-b(alues)29 b(with)i(asso)r(ciated)d(k)n(eys)h(whic)n(h)h(iden)n(tify)h
-(the)f(v)-5 b(alues.)227 3706 y(The)32 b(k)n(eys)e(are)g(strings)g
-(\(case-sensitiv)n(e,)h(trailing)f(spaces)g(are)g(ignored\),)i(and)f
-(the)g(data)g(t)n(yp)r(e)g(of)g(the)h(v)-5 b(alues)227
-3806 y(can)27 b(b)r(e)h(in)n(teger,)f(\015oating)f(p)r(oin)n(t,)i(c)n
-(haracter)d(string)i(or)g(AST)g(Ob)5 b(ject)28 b(p)r(oin)n(ter.)36
-b(Eac)n(h)26 b(v)-5 b(alue)27 b(can)g(b)r(e)h(a)f(scalar)227
-3905 y(or)j(a)g(one-dimensional)g(v)n(ector.)44 b(A)31
-b(KeyMap)f(is)h(conceptually)f(similar)f(to)i(a)f(Mapping)g(in)h(that)g
-(a)g(KeyMap)227 4005 y(transforms)e(an)h(input)h(in)n(to)f(an)g(output)
-h(-)f(the)g(input)h(is)g(the)f(k)n(ey)-7 b(,)31 b(and)f(the)g(output)h
-(is)f(the)h(v)-5 b(alue)30 b(asso)r(ciated)227 4105 y(with)22
-b(the)h(k)n(ey)-7 b(.)34 b(Ho)n(w)n(ev)n(er,)21 b(this)h(is)f(only)h(a)
-f(conceptual)g(similarit)n(y)-7 b(,)22 b(and)g(it)g(should)g(b)r(e)g
-(noted)f(that)h(the)h(KeyMap)227 4204 y(class)28 b(inherits)h(from)g
-(the)g(Ob)5 b(ject)29 b(class)f(rather)g(than)h(the)h(Mapping)e(class.)
-40 b(The)29 b(metho)r(ds)h(of)f(the)g(Mapping)227 4304
-y(class)e(cannot)g(b)r(e)h(used)g(with)g(a)f(KeyMap.)0
-4454 y Fd(Synopsis:)121 b Ft(AstKeyMap)40 b Fi(\003)p
-Ft(astKeyMap\()f(const)i(char)h Fi(\003)p Ft(options,)e(...)86
-b(\))0 4605 y Fd(P)m(arameters:)259 4742 y(options)427
-4842 y Fj(P)n(oin)n(ter)27 b(to)h(a)g(n)n(ull-terminated)g(string)f
-(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g
-(attribute)427 4941 y(assignmen)n(ts)d(to)g(b)r(e)i(used)e(for)h
-(initialising)f(the)i(new)e(KeyMap.)36 b(The)26 b(syn)n(tax)f(used)g
-(is)h(iden)n(tical)g(to)f(that)427 5041 y(for)h(the)h(astSet)g
-(function)g(and)g(ma)n(y)f(include)h Ft(")p Fj(prin)n(tf)p
-Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n(ti\014ed)h(b)n(y)f
-Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427 5140 y(in)i(the)g(normal)f
-(w)n(a)n(y)-7 b(.)259 5274 y Fd(...)427 5373 y Fj(If)38
-b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 5473 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 5573 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 5672 y Fj(function\).)p
-eop end
-%%Page: 258 268
-TeXDict begin 258 267 bop 0 52 a FF(258)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Returned)i(V)-8
-b(alue:)259 482 y(astKeyMap\(\))427 582 y Fj(A)28 b(p)r(oin)n(ter)f(to)
-h(the)g(new)g(KeyMap.)0 739 y Fd(Notes:)340 1016 y Fi(\017)45
-b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 1116 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)-2 1272 y Fd(Status)33 b(Handling)n(:)227 1418
-y Fj(The)d(protected)g(in)n(terface)f(to)g(this)h(function)h(includes)f
-(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g(the)g(parameter)227
-1518 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37
-b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)e
-(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fj(in)n(t)227
-1617 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p 0 1806 3780
-12 v 0 1938 a Fz(astLinearAppro)l(x)515 b Fe(Obtain)37
-b(a)i(linear)1138 2037 y(appro)m(ximation)34 b(to)j(a)h(Mapping,)1540
-2152 y(if)h(appropriate)2794 1938 y Fz(astLinearAppro)l(x)0
-2330 y Fd(Description:)44 b Fj(This)38 b(function)g(tests)g(the)f(forw)
-n(ard)f(co)r(ordinate)h(transformation)e(implemen)n(ted)k(b)n(y)e(a)g
-(Mapping)227 2430 y(o)n(v)n(er)28 b(a)i(giv)n(en)f(range)f(of)i(input)g
-(co)r(ordinates.)42 b(If)30 b(the)h(transformation)d(is)h(found)h(to)g
-(b)r(e)g(linear)f(to)h(a)f(sp)r(eci\014ed)227 2530 y(lev)n(el)g(of)h
-(accuracy)-7 b(,)29 b(then)h(an)f(arra)n(y)e(of)j(\014t)g(co)r
-(e\016cien)n(ts)f(is)h(returned.)42 b(These)30 b(ma)n(y)f(b)r(e)h(used)
-f(to)h(implemen)n(t)g(a)227 2629 y(linear)23 b(appro)n(ximation)e(to)i
-(the)h(Mapping's)e(forw)n(ard)g(transformation)f(within)j(the)g(sp)r
-(eci\014ed)f(range)f(of)h(output)227 2729 y(co)r(ordinates.)36
-b(If)28 b(the)g(transformation)e(is)h(not)h(su\016cien)n(tly)f(linear,)
-g(no)h(co)r(e\016cien)n(ts)f(are)f(returned.)0 2873 y
-Fd(Synopsis:)121 b Ft(int)42 b(astLinearApprox\()37 b(AstMapping)j
-Fi(\003)p Ft(this,)h(const)g(double)g Fi(\003)p Ft(lbnd,)g(const)h
-(double)f Fi(\003)p Ft(ubnd,)227 2973 y(double)g(tol,)h(double)f
-Fi(\003)p Ft(fit)h(\))0 3117 y Fd(P)m(arameters:)259
-3248 y(this)427 3348 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Mapping.)259
-3475 y Fd(lbnd)427 3575 y Fj(P)n(oin)n(ter)d(to)h(an)f(arra)n(y)f(of)i
-(doubles)g(con)n(taining)f(the)h(lo)n(w)n(er)f(b)r(ounds)h(of)g(a)g(b)r
-(o)n(x)f(de\014ned)i(within)f(the)h(input)427 3674 y(co)r(ordinate)k
-(system)h(of)g(the)g(Mapping.)50 b(The)32 b(n)n(um)n(b)r(er)f(of)h
-(elemen)n(ts)g(in)g(this)g(arra)n(y)e(should)i(equal)f(the)427
-3774 y(v)-5 b(alue)25 b(of)f(the)h(Mapping's)f(Nin)h(attribute.)36
-b(This)25 b(b)r(o)n(x)f(should)g(sp)r(ecify)h(the)g(region)e(o)n(v)n
-(er)g(whic)n(h)h(linearit)n(y)427 3874 y(is)k(required.)259
-4001 y Fd(ubnd)427 4101 y Fj(P)n(oin)n(ter)f(to)h(an)g(arra)n(y)e(of)j
-(doubles)f(con)n(taining)f(the)i(upp)r(er)f(b)r(ounds)h(of)f(the)h(b)r
-(o)n(x)f(sp)r(ecifying)g(the)h(region)427 4200 y(o)n(v)n(er)d(whic)n(h)
-i(linearit)n(y)e(is)i(required.)259 4328 y Fd(tol)427
-4428 y Fj(The)d(maxim)n(um)f(p)r(ermitted)i(deviation)e(from)g
-(linearit)n(y)-7 b(,)24 b(expressed)g(as)g(a)g(p)r(ositiv)n(e)g
-(Cartesian)f(displace-)427 4527 y(men)n(t)30 b(in)f(the)h(output)g(co)r
-(ordinate)e(space)h(of)g(the)h(Mapping.)42 b(If)29 b(a)g(linear)g
-(\014t)h(to)f(the)h(forw)n(ard)d(transfor-)427 4627 y(mation)j(of)f
-(the)h(Mapping)g(deviates)f(from)g(the)h(true)g(transformation)e(b)n(y)
-h(more)g(than)h(this)g(amoun)n(t)f(at)427 4727 y(an)n(y)e(p)r(oin)n(t)h
-(whic)n(h)f(is)h(tested,)g(then)g(no)f(\014t)h(co)r(e\016cien)n(ts)g
-(will)f(b)r(e)h(returned.)259 4854 y Fd(\014t)427 4954
-y Fj(P)n(oin)n(ter)23 b(to)i(an)g(arra)n(y)d(of)j(doubles)f(in)i(whic)n
-(h)e(to)h(return)f(the)i(co-e\016cien)n(ts)d(of)i(the)g(linear)f(appro)
-n(ximation)427 5053 y(to)40 b(the)g(sp)r(eci\014ed)f(transformation.)72
-b(This)39 b(arra)n(y)e(should)j(ha)n(v)n(e)e(at)h(least)h
-Ft(")p Fj(\()f(Nin)h(+)f(1)h(\))g Fi(\003)f Fj(Nout)p
-Ft(")p Fj(,)427 5153 y(elemen)n(ts.)45 b(The)31 b(\014rst)f(Nout)g
-(elemen)n(ts)h(hold)f(the)g(constan)n(t)g(o\013sets)g(for)g(the)h
-(transformation)d(outputs.)427 5253 y(The)k(remaining)f(elemen)n(ts)h
-(hold)g(the)h(gradien)n(ts.)48 b(So)32 b(if)g(the)h(Mapping)e(has)h(2)f
-(inputs)i(and)f(3)f(outputs)427 5352 y(the)d(linear)f(appro)n(ximation)
-f(to)h(the)h(forw)n(ard)e(transformation)g(is:)427 5466
-y(X)p Ft(_)p Fj(out)i(=)f(\014t[0])h(+)f(\014t[3])p Fi(\003)p
-Fj(X)p Ft(_)p Fj(in)g(+)g(\014t[4])p Fi(\003)p Fj(Y)p
-Ft(_)p Fj(in)427 5579 y(Y)p Ft(_)p Fj(out)h(=)f(\014t[1])h(+)f
-(\014t[5])p Fi(\003)p Fj(X)p Ft(_)p Fj(in)g(+)g(\014t[6])p
-Fi(\003)p Fj(Y)p Ft(_)p Fj(in)427 5693 y(Z)p Ft(_)p Fj(out)g(=)g
-(\014t[2])h(+)f(\014t[7])p Fi(\003)p Fj(X)p Ft(_)p Fj(in)h(+)f
-(\014t[8])p Fi(\003)p Fj(Y)p Ft(_)p Fj(in)p eop end
-%%Page: 259 269
-TeXDict begin 259 268 bop 3643 52 a FF(259)0 351 y Fd(Returned)32
-b(V)-8 b(alue:)259 472 y(astLinearAppro)m(x\(\))427 572
-y Fj(If)33 b(the)f(forw)n(ard)f(transformation)f(is)i(su\016cien)n(tly)
-g(linear,)h(a)e(non-zero)g(v)-5 b(alue)32 b(is)g(returned.)49
-b(Otherwise)427 672 y(zero)27 b(is)g(returned)g(and)h(the)g(\014t)g
-(co-e\016cien)n(ts)e(are)h(set)h(to)f(AST)p Ft(__)p Fj(BAD.)0
-818 y Fd(Notes:)340 1085 y Fi(\017)45 b Fj(This)31 b(function)g(\014ts)
-g(the)g(Mapping's)g(forw)n(ard)e(transformation.)44 b(T)-7
-b(o)31 b(\014t)g(the)g(in)n(v)n(erse)e(transformation,)427
-1185 y(the)f(Mapping)f(should)h(b)r(e)g(in)n(v)n(erted)f(using)g(astIn)
-n(v)n(ert)f(b)r(efore)h(in)n(v)n(oking)g(this)g(function.)340
-1302 y Fi(\017)45 b Fj(A)27 b(v)-5 b(alue)25 b(of)h(zero)f(will)h(b)r
-(e)g(returned)g(if)g(this)g(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j
-(the)f(global)f(error)f(status)h(set,)h(or)427 1402 y(if)i(it)g(should)
-g(fail)f(for)h(an)n(y)e(reason.)p 0 1571 3780 12 v 0
-1702 a Fz(astLo)t(c)l(k)239 b Fe(Lo)s(c)m(k)39 b(an)g(Ob)7
-b(ject)37 b(for)h(exclusiv)m(e)g(use)h(b)m(y)g(the)f(calling)1724
-1817 y(thread)3330 1702 y Fz(astLo)t(c)l(k)0 1952 y Fd(Description:)44
-b Fj(The)35 b(thread-safe)e(public)i(in)n(terface)e(to)h(AST)h(is)f
-(designed)g(so)g(that)g(an)g(error)f(is)h(rep)r(orted)g(if)g(an)n(y)227
-2052 y(thread)27 b(attempts)h(to)f(use)g(an)h(Ob)5 b(ject)27
-b(that)g(it)h(has)f(not)g(previously)g(lo)r(c)n(k)n(ed)f(for)h(its)h(o)
-n(wn)e(exclusiv)n(e)h(use)g(using)227 2151 y(this)34
-b(function.)56 b(When)34 b(an)f(Ob)5 b(ject)34 b(is)f(created,)i(it)f
-(is)f(initially)h(lo)r(c)n(k)n(ed)f(b)n(y)g(the)h(thread)f(that)h
-(creates)f(it,)i(so)227 2251 y(newly)27 b(created)g(ob)5
-b(jects)26 b(do)h(not)h(need)f(to)g(b)r(e)g(explicitly)h(lo)r(c)n(k)n
-(ed.)36 b(Ho)n(w)n(ev)n(er,)25 b(if)j(an)f(Ob)5 b(ject)27
-b(p)r(oin)n(ter)f(is)h(passed)227 2350 y(to)k(another)f(thread,)h(the)g
-(original)e(thread)i(m)n(ust)f(\014rst)h(unlo)r(c)n(k)f(it)h(\(using)g
-(astUnlo)r(c)n(k\))g(and)f(the)h(new)g(thread)227 2450
-y(m)n(ust)d(then)g(lo)r(c)n(k)f(it)h(\(using)g(astLo)r(c)n(k\))e(b)r
-(efore)i(the)g(new)f(thread)g(can)h(use)f(the)h(Ob)5
-b(ject.)227 2567 y(The)20 b Ft(")p Fj(w)n(ait)p Ft(")e
-Fj(parameter)g(determines)i(what)f(happ)r(ens)h(if)g(the)g(supplied)g
-(Ob)5 b(ject)19 b(is)h(curen)n(tly)f(lo)r(c)n(k)n(ed)f(b)n(y)i(another)
-227 2667 y(thread)27 b(when)h(this)g(function)g(is)g(in)n(v)n(ok)n(ed.)
-0 2801 y Fd(Synopsis:)121 b Ft(void)42 b(astLock\()e(AstObject)g
-Fi(\003)p Ft(this,)h(int)h(wait)g(\))0 2935 y Fd(P)m(arameters:)259
-3056 y(this)427 3155 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5
-b(ject)27 b(to)h(b)r(e)g(lo)r(c)n(k)n(ed.)259 3273 y
-Fd(w)m(ait)427 3373 y Fj(If)35 b(the)g(Ob)5 b(ject)34
-b(is)g(curen)n(tly)g(lo)r(c)n(k)n(ed)f(b)n(y)h(another)g(thread)f(then)
-i(this)g(function)g(will)f(either)g(rep)r(ort)g(an)427
-3472 y(error)c(or)g(blo)r(c)n(k.)47 b(If)32 b(a)e(non-zero)g(v)-5
-b(alue)31 b(is)g(supplied)h(for)e Ft(")p Fj(w)n(ait)p
-Ft(")p Fj(,)h(the)h(calling)e(thread)h(w)n(aits)g(un)n(til)g(the)427
-3572 y(ob)5 b(ject)36 b(is)g(a)n(v)-5 b(ailable)35 b(for)h(it)g(to)g
-(use.)62 b(Otherwise,)38 b(an)e(error)e(is)i(rep)r(orted)f(and)h(the)h
-(function)f(returns)427 3671 y(immediately)28 b(without)g(lo)r(c)n
-(king)f(the)h(Ob)5 b(ject.)0 3818 y Fd(Class)31 b(Applicabilit)m(y:)259
-3939 y(Ob)5 b(ject)427 4039 y Fj(This)28 b(function)g(applies)f(to)h
-(all)f(Ob)5 b(jects.)0 4185 y Fd(Notes:)340 4452 y Fi(\017)45
-b Fj(The)28 b(astAnn)n(ul)g(function)h(is)f(exceptional)f(in)i(that)f
-(it)h(can)e(b)r(e)i(used)f(on)g(p)r(oin)n(ters)f(for)h(Ob)5
-b(jects)27 b(that)i(are)427 4552 y(not)f(curren)n(tly)e(lo)r(c)n(k)n
-(ed)h(b)n(y)g(the)h(calling)f(thread.)37 b(All)28 b(other)f(AST)h
-(functions)g(will)g(rep)r(ort)e(an)i(error.)340 4670
-y Fi(\017)45 b Fj(The)28 b(Lo)r(c)n(k)n(ed)e(ob)5 b(ject)28
-b(will)g(b)r(elong)f(to)g(the)h(curren)n(t)f(AST)h(con)n(text.)340
-4787 y Fi(\017)45 b Fj(This)28 b(function)g(returns)f(without)h(action)
-f(if)h(the)g(Ob)5 b(ject)28 b(is)f(already)f(lo)r(c)n(k)n(ed)h(b)n(y)g
-(the)h(calling)f(thread.)340 4905 y Fi(\017)45 b Fj(If)32
-b(sim)n(ultaneous)f(use)h(of)g(the)g(same)f(ob)5 b(ject)32
-b(is)f(required)g(b)n(y)g(t)n(w)n(o)g(or)g(more)g(threads,)h(astCop)n
-(y)f(should)427 5004 y(b)r(e)e(used)f(to)h(to)f(pro)r(duce)g(a)g(deep)g
-(cop)n(y)f(of)i(the)g(Ob)5 b(ject)28 b(for)f(eac)n(h)h(thread.)39
-b(Eac)n(h)27 b(cop)n(y)g(should)h(then)h(b)r(e)427 5104
-y(unlo)r(c)n(k)n(ed)j(b)n(y)h(the)g(paren)n(t)f(thread)g(\(i.e.)53
-b(the)33 b(thread)f(that)h(created)f(the)h(cop)n(y\),)g(and)g(then)g
-(lo)r(c)n(k)n(ed)f(b)n(y)427 5203 y(the)c(c)n(hild)g(thread)f(\(i.e.)37
-b(the)28 b(thread)f(that)h(w)n(an)n(ts)f(to)g(use)h(the)g(cop)n(y\).)
-340 5321 y Fi(\017)45 b Fj(This)28 b(function)g(is)f(only)h(a)n(v)-5
-b(ailable)26 b(in)i(the)g(C)f(in)n(terface.)340 5439
-y Fi(\017)45 b Fj(This)23 b(function)g(returns)g(without)g(action)f(if)
-h(the)h(AST)f(library)e(has)i(b)r(een)g(built)g(without)h(POSIX)e
-(thread)427 5538 y(supp)r(ort)35 b(\(i.e.)60 b(the)35
-b Ft(")p Fj(-with-pthreads)p Ft(")e Fj(option)i(w)n(as)f(not)h(sp)r
-(eci\014ed)g(when)h(running)e(the)i Ft(")p Fj(con\014gure)p
-Ft(")427 5638 y Fj(script\).)p eop end
-%%Page: 260 270
-TeXDict begin 260 269 bop 0 52 a FF(260)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 482 a Fz(astLutMap)799 b Fe(Create)37 b(a)i(LutMap)798
-b Fz(astLutMap)0 667 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(LutMap)h(and)g(optionally)e
-(initialises)i(its)f(attributes.)227 790 y(A)i(LutMap)g(is)g(a)f(sp)r
-(ecialised)h(form)f(of)h(Mapping)f(whic)n(h)h(transforms)f
-(1-dimensional)f(co)r(ordinates)g(b)n(y)i(using)227 890
-y(linear)d(in)n(terp)r(olation)g(in)h(a)g(lo)r(okup)f(table.)37
-b(Eac)n(h)25 b(input)j(co)r(ordinate)e(v)-5 b(alue)26
-b(is)h(\014rst)g(scaled)f(to)g(giv)n(e)g(the)i(index)227
-990 y(of)e(an)g(en)n(try)f(in)i(the)f(table)g(b)n(y)g(subtracting)f(a)h
-(starting)f(v)-5 b(alue)26 b(\(the)h(input)f(co)r(ordinate)f(corresp)r
-(onding)f(to)i(the)227 1089 y(\014rst)31 b(table)g(en)n(try\))f(and)h
-(dividing)g(b)n(y)f(an)h(incremen)n(t)f(\(the)i(di\013erence)f(in)g
-(input)g(co)r(ordinate)f(v)-5 b(alue)31 b(b)r(et)n(w)n(een)227
-1189 y(adjacen)n(t)c(table)h(en)n(tries\).)227 1312 y(The)j(resulting)g
-(index)g(will)g(usually)g(con)n(tain)f(a)h(fractional)f(part,)i(so)e
-(the)i(output)f(co)r(ordinate)f(v)-5 b(alue)31 b(is)g(then)227
-1412 y(generated)f(b)n(y)g(in)n(terp)r(olating)f(linearly)h(b)r(et)n(w)
-n(een)g(the)h(appropriate)d(en)n(tries)i(in)h(the)f(table.)46
-b(If)31 b(the)f(index)h(lies)227 1512 y(outside)h(the)h(range)e(of)h
-(the)h(table,)g(linear)e(extrap)r(olation)g(is)h(used)h(based)e(on)h
-(the)h(t)n(w)n(o)e(nearest)h(en)n(tries)f(\(i.e.)227
-1611 y(the)d(t)n(w)n(o)f(en)n(tries)g(at)g(the)h(start)f(or)g(end)h(of)
-g(the)g(table,)f(as)g(appropriate\).)227 1735 y(If)e(the)g(lo)r(okup)e
-(table)i(en)n(tries)e(increase)g(or)h(decrease)f(monotonically)-7
-b(,)23 b(then)i(the)g(in)n(v)n(erse)e(transformation)f(ma)n(y)227
-1835 y(also)27 b(b)r(e)h(p)r(erformed.)0 1982 y Fd(Synopsis:)121
-b Ft(AstLutMap)40 b Fi(\003)p Ft(astLutMap\()f(int)j(nlut,)g(const)f
-(double)g(lut[],)g(double)g(start,)g(double)h(inc,)227
-2082 y(const)g(char)g Fi(\003)p Ft(options,)e(...)85
-b(\))0 2229 y Fd(P)m(arameters:)259 2364 y(nlut)427 2463
-y Fj(The)28 b(n)n(um)n(b)r(er)f(of)h(en)n(tries)f(in)h(the)g(lo)r(okup)
-f(table.)37 b(This)27 b(v)-5 b(alue)28 b(m)n(ust)f(b)r(e)h(at)g(least)f
-(2.)259 2594 y Fd(lut)427 2694 y Fj(An)h(arra)n(y)e(con)n(taining)g
-(the)i Ft(")p Fj(nlut)p Ft(")g Fj(lo)r(okup)f(table)g(en)n(tries.)259
-2825 y Fd(start)427 2924 y Fj(The)h(input)g(co)r(ordinate)f(v)-5
-b(alue)27 b(whic)n(h)h(corresp)r(onds)d(to)j(the)g(\014rst)f(lo)r(okup)
-g(table)h(en)n(try)-7 b(.)259 3055 y Fd(inc)427 3155
-y Fj(The)24 b(lo)r(okup)g(table)f(spacing)g(\(the)i(incremen)n(t)f(in)g
-(input)g(co)r(ordinate)f(v)-5 b(alue)24 b(b)r(et)n(w)n(een)g(successiv)
-n(e)e(lo)r(okup)427 3254 y(table)28 b(en)n(tries\).)36
-b(This)28 b(v)-5 b(alue)27 b(ma)n(y)g(b)r(e)h(p)r(ositiv)n(e)f(or)g
-(negativ)n(e,)g(but)h(m)n(ust)g(not)f(b)r(e)h(zero.)259
-3385 y Fd(options)427 3485 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 3584 y(assignmen)n(ts)e
-(to)h(b)r(e)g(used)g(for)f(initialising)h(the)g(new)g(LutMap.)37
-b(The)26 b(syn)n(tax)g(used)h(is)g(iden)n(tical)g(to)f(that)427
-3684 y(for)g(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-3784 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 3915
-y Fd(...)427 4014 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 4114 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 4213 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 4313 y Fj(function\).)0 4473
-y Fd(Returned)32 b(V)-8 b(alue:)259 4607 y(astLutMap\(\))427
-4707 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(LutMap.)0
-4867 y Fd(Notes:)340 5147 y Fi(\017)45 b Fj(If)38 b(the)f(en)n(tries)f
-(in)h(the)h(lo)r(okup)e(table)h(either)g(increase)e(or)h(decrease)g
-(monotonically)-7 b(,)38 b(then)f(the)h(new)427 5247
-y(LutMap's)25 b(T)-7 b(ranIn)n(v)n(erse)23 b(attribute)j(will)f(ha)n(v)
-n(e)f(a)h(v)-5 b(alue)25 b(of)g(one,)g(indicating)g(that)h(the)g(in)n
-(v)n(erse)d(transfor-)427 5347 y(mation)j(can)g(b)r(e)h(p)r(erformed.)
-36 b(Otherwise,)25 b(it)i(will)g(ha)n(v)n(e)e(a)g(v)-5
-b(alue)27 b(of)f(zero,)f(so)h(that)g(an)n(y)g(attempt)h(to)f(use)427
-5446 y(the)i(in)n(v)n(erse)e(transformation)g(will)i(result)f(in)h(an)g
-(error.)340 5577 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 5677 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p eop end
-%%Page: 261 271
-TeXDict begin 261 270 bop 3643 52 a FF(261)-2 351 y Fd(Status)33
-b(Handling)n(:)227 497 y Fj(The)d(protected)g(in)n(terface)f(to)g(this)
-h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g
-(the)g(parameter)227 597 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62
-b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)
-e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fj(in)n(t)227
-697 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p 0 891 3780
-12 v 0 1022 a Fz(astMapBo)l(x)967 1023 y Fe(Find)39 b(a)g(b)s(ounding)f
-(b)s(o)m(x)g(for)g(a)g(Mapping)3111 1022 y Fz(astMapBo)l(x)0
-1207 y Fd(Description:)44 b Fj(This)23 b(function)h(allo)n(ws)e(y)n(ou)
-g(to)h(\014nd)g(the)h Ft(")p Fj(b)r(ounding)e(b)r(o)n(x)p
-Ft(")h Fj(whic)n(h)g(just)g(encloses)f(another)g(b)r(o)n(x)h(after)227
-1307 y(it)38 b(has)e(b)r(een)i(transformed)e(b)n(y)h(a)g(Mapping)f
-(\(using)h(either)g(its)h(forw)n(ard)d(or)h(in)n(v)n(erse)g
-(transformation\).)64 b(A)227 1407 y(t)n(ypical)27 b(use)h(migh)n(t)f
-(b)r(e)h(to)g(calculate)f(the)h(size)f(of)h(an)f(image)g(after)g(b)r
-(eing)h(transformed)e(b)n(y)h(a)h(Mapping.)227 1530 y(The)f(function)h
-(w)n(orks)d(on)h(one)h(dimension)g(at)f(a)h(time.)37
-b(When)28 b(supplied)f(with)g(the)g(lo)n(w)n(er)f(and)g(upp)r(er)h(b)r
-(ounds)227 1630 y(of)39 b(a)f(rectangular)e(region)h(\(b)r(o)n(x\))i
-(of)f(input)i(co)r(ordinate)d(space,)k(it)d(\014nds)h(the)g(lo)n(w)n
-(est)e(and)i(highest)f(v)-5 b(alues)227 1729 y(tak)n(en)29
-b(b)n(y)g(a)g(nominated)g(output)h(co)r(ordinate)e(within)j(that)e
-(region.)41 b(Optionally)-7 b(,)29 b(it)h(also)e(returns)h(the)h(input)
-227 1829 y(co)r(ordinates)d(where)h(these)g(b)r(ounding)g(v)-5
-b(alues)28 b(are)f(attained.)39 b(It)28 b(should)g(b)r(e)h(used)f(rep)r
-(eatedly)f(to)h(obtain)g(the)227 1928 y(exten)n(t)g(of)g(the)f(b)r
-(ounding)h(b)r(o)n(x)f(in)h(more)f(than)h(one)f(dimension.)0
-2076 y Fd(Synopsis:)121 b Ft(void)42 b(astMapBox\()d(AstMapping)h
-Fi(\003)p Ft(this,)h(const)g(double)g(lbnd_in[],)f(const)h(double)g
-(ubnd_in[],)227 2175 y(int)i(forward,)d(int)i(coord_out,)e(double)h
-Fi(\003)p Ft(lbnd_out,)e(double)i Fi(\003)p Ft(ubnd_out,)f(double)h
-(xl[],)g(double)227 2275 y(xu[])h(\);)0 2422 y Fd(P)m(arameters:)259
-2556 y(this)427 2656 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Mapping.)259
-2786 y Fd(lbnd)p Ft(_)p Fd(in)427 2886 y Fj(P)n(oin)n(ter)33
-b(to)h(an)g(arra)n(y)e(of)i(double,)i(with)e(one)g(elemen)n(t)g(for)g
-(eac)n(h)f(Mapping)h(input)h(co)r(ordinate.)56 b(This)427
-2986 y(should)28 b(con)n(tain)f(the)h(lo)n(w)n(er)e(b)r(ound)i(of)f
-(the)h(input)g(b)r(o)n(x)g(in)f(eac)n(h)g(input)i(dimension.)259
-3116 y Fd(ubnd)p Ft(_)p Fd(in)427 3216 y Fj(P)n(oin)n(ter)k(to)h(an)g
-(arra)n(y)e(of)i(double,)i(with)e(one)g(elemen)n(t)g(for)g(eac)n(h)f
-(Mapping)h(input)h(co)r(ordinate.)56 b(This)427 3316
-y(should)28 b(con)n(tain)f(the)h(upp)r(er)f(b)r(ound)h(of)g(the)g
-(input)g(b)r(o)n(x)f(in)h(eac)n(h)f(input)h(dimension.)427
-3431 y(Note)22 b(that)g(it)g(is)f(p)r(ermissible)g(for)g(the)h(upp)r
-(er)g(b)r(ound)g(to)f(b)r(e)h(less)f(than)h(the)g(corresp)r(onding)d
-(lo)n(w)n(er)h(b)r(ound,)427 3530 y(as)27 b(the)h(v)-5
-b(alues)27 b(will)h(simply)g(b)r(e)g(sw)n(app)r(ed)f(b)r(efore)g(use.)
-259 3661 y Fd(forw)m(ard)427 3760 y Fj(If)c(this)g(v)-5
-b(alue)22 b(is)g(non-zero,)g(then)h(the)g(Mapping's)e(forw)n(ard)g
-(transformation)g(will)h(b)r(e)h(used)g(to)f(transform)427
-3860 y(the)28 b(input)h(b)r(o)n(x.)36 b(Otherwise,)27
-b(its)h(in)n(v)n(erse)e(transformation)g(will)i(b)r(e)g(used.)427
-3975 y(\(If)35 b(the)g(in)n(v)n(erse)e(transformation)g(is)h(selected,)
-i(then)f(references)f(to)g Ft(")p Fj(input)p Ft(")g Fj(and)h
-Ft(")p Fj(output)p Ft(")f Fj(co)r(ordi-)427 4075 y(nates)e(in)g(this)f
-(description)h(should)f(b)r(e)h(transp)r(osed.)48 b(F)-7
-b(or)31 b(example,)i(the)f(size)f(of)h(the)g Ft(")p Fj(lbnd)p
-Ft(_)p Fj(in)p Ft(")f Fj(and)427 4174 y Ft(")p Fj(ubnd)p
-Ft(_)p Fj(in)p Ft(")23 b Fj(arra)n(ys)e(should)i(matc)n(h)g(the)h(n)n
-(um)n(b)r(er)f(of)g(output)h(co)r(ordinates,)f(as)g(giv)n(en)f(b)n(y)h
-(the)h(Mapping's)427 4274 y(Nout)35 b(attribute.)59 b(Similarly)-7
-b(,)36 b(the)g Ft(")p Fj(co)r(ord)p Ft(_)p Fj(out)p Ft(")c
-Fj(parameter,)j(b)r(elo)n(w,)i(should)d(nominate)h(one)f(of)h(the)427
-4374 y(Mapping's)27 b(input)i(co)r(ordinates.\))259 4504
-y Fd(co)s(ord)p Ft(_)p Fd(out)427 4604 y Fj(The)d(index)f(of)h(the)f
-(output)h(co)r(ordinate)f(for)g(whic)n(h)g(the)h(lo)n(w)n(er)e(and)h
-(upp)r(er)g(b)r(ounds)h(are)e(required.)36 b(This)427
-4704 y(v)-5 b(alue)27 b(should)f(b)r(e)i(at)e(least)h(one,)f(and)h(no)f
-(larger)f(than)i(the)g(n)n(um)n(b)r(er)g(of)f(Mapping)h(output)g(co)r
-(ordinates.)259 4834 y Fd(lbnd)p Ft(_)p Fd(out)427 4934
-y Fj(P)n(oin)n(ter)39 b(to)g(a)h(double)g(in)g(whic)n(h)g(to)g(return)g
-(the)g(lo)n(w)n(est)f(v)-5 b(alue)40 b(tak)n(en)f(b)n(y)h(the)g
-(nominated)g(output)427 5033 y(co)r(ordinate)27 b(within)h(the)g(sp)r
-(eci\014ed)g(region)e(of)i(input)g(co)r(ordinate)e(space.)259
-5164 y Fd(ubnd)p Ft(_)p Fd(out)427 5264 y Fj(P)n(oin)n(ter)36
-b(to)i(a)f(double)g(in)h(whic)n(h)f(to)h(return)f(the)h(highest)f(v)-5
-b(alue)38 b(tak)n(en)e(b)n(y)i(the)g(nominated)f(output)427
-5363 y(co)r(ordinate)27 b(within)h(the)g(sp)r(eci\014ed)g(region)e(of)i
-(input)g(co)r(ordinate)e(space.)259 5494 y Fd(xl)427
-5593 y Fj(An)j(optional)e(p)r(oin)n(ter)g(to)h(an)g(arra)n(y)d(of)j
-(double,)g(with)h(one)e(elemen)n(t)h(for)g(eac)n(h)f(Mapping)g(input)i
-(co)r(ordi-)427 5693 y(nate.)44 b(If)30 b(giv)n(en,)g(this)g(arra)n(y)d
-(will)k(b)r(e)f(\014lled)g(with)g(the)h(co)r(ordinates)d(of)i(an)f
-(input)i(p)r(oin)n(t)f(\(although)g(not)p eop end
-%%Page: 262 272
-TeXDict begin 262 271 bop 0 52 a FF(262)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)427 351 y Fj(necessarily)22
-b(a)i(unique)g(one\))g(for)f(whic)n(h)h(the)g(nominated)f(output)i(co)r
-(ordinate)d(attains)i(the)g(lo)n(w)n(er)e(b)r(ound)427
-451 y(v)-5 b(alue)28 b(returned)f(in)h Ft(")p Fi(\003)p
-Fj(lbnd)p Ft(_)p Fj(out)p Ft(")p Fj(.)427 570 y(If)g(these)g(co)r
-(ordinates)e(are)h(not)g(required,)g(a)g(NULL)h(p)r(oin)n(ter)f(ma)n(y)
-g(b)r(e)h(supplied.)259 709 y Fd(xu)427 808 y Fj(An)33
-b(optional)f(p)r(oin)n(ter)g(to)g(an)g(arra)n(y)f(of)h(double,)i(with)f
-(one)f(elemen)n(t)g(for)g(eac)n(h)g(Mapping)g(input)h(co)r(or-)427
-908 y(dinate.)58 b(If)35 b(giv)n(en,)h(this)e(arra)n(y)f(will)h(b)r(e)h
-(\014lled)g(with)g(the)g(co)r(ordinates)e(of)i(an)f(input)h(p)r(oin)n
-(t)g(\(although)427 1008 y(not)c(necessarily)e(a)h(unique)h(one\))f
-(for)g(whic)n(h)h(the)f(nominated)h(output)g(co)r(ordinate)e(attains)i
-(the)f(upp)r(er)427 1107 y(b)r(ound)e(v)-5 b(alue)28
-b(returned)f(in)h Ft(")p Fi(\003)p Fj(ubnd)p Ft(_)p Fj(out)p
-Ft(")p Fj(.)427 1226 y(If)g(these)g(co)r(ordinates)e(are)h(not)g
-(required,)g(a)g(NULL)h(p)r(oin)n(ter)f(ma)n(y)g(b)r(e)h(supplied.)0
-1400 y Fd(Notes:)340 1694 y Fi(\017)45 b Fj(An)n(y)20
-b(input)g(p)r(oin)n(ts)g(whic)n(h)f(are)g(transformed)f(b)n(y)h(the)h
-(Mapping)f(to)h(giv)n(e)e(output)j(co)r(ordinates)d(con)n(taining)427
-1794 y(the)j(v)-5 b(alue)20 b(AST)p Ft(__)p Fj(BAD)g(are)f(regarded)g
-(as)g(in)n(v)-5 b(alid)20 b(and)g(are)f(ignored.)34 b(They)20
-b(will)g(mak)n(e)f(no)h(con)n(tribution)427 1894 y(to)h(determining)g
-(the)g(output)h(b)r(ounds,)g(ev)n(en)f(although)f(the)h(nominated)g
-(output)h(co)r(ordinate)d(migh)n(t)i(still)427 1993 y(ha)n(v)n(e)27
-b(a)g(v)-5 b(alid)28 b(v)-5 b(alue)27 b(at)g(suc)n(h)h(p)r(oin)n(ts.)
-340 2132 y Fi(\017)45 b Fj(An)36 b(error)d(will)i(o)r(ccur)g(if)g(the)h
-(required)e(output)h(b)r(ounds)g(cannot)g(b)r(e)h(found.)59
-b(T)n(ypically)-7 b(,)36 b(this)g(migh)n(t)427 2232 y(happ)r(en)25
-b(if)g(all)f(the)h(input)g(p)r(oin)n(ts)f(whic)n(h)g(the)h(function)g
-(considers)e(turn)i(out)f(to)g(b)r(e)h(in)n(v)-5 b(alid)24
-b(\(see)h(ab)r(o)n(v)n(e\).)427 2331 y(The)36 b(n)n(um)n(b)r(er)g(of)g
-(p)r(oin)n(ts)g(considered)f(b)r(efore)g(generating)g(suc)n(h)h(an)f
-(error)f(is)i(quite)g(large,)h(so)e(this)i(is)427 2431
-y(unlik)n(ely)30 b(to)g(o)r(ccur)f(b)n(y)g(acciden)n(t)h(unless)f(v)-5
-b(alid)30 b(p)r(oin)n(ts)g(are)f(restricted)g(to)h(a)f(v)n(ery)g(small)
-h(subset)f(of)h(the)427 2530 y(input)f(co)r(ordinate)d(space.)340
-2669 y Fi(\017)45 b Fj(The)37 b(v)-5 b(alues)37 b(returned)f(via)g
-Ft(")p Fj(lbnd)p Ft(_)p Fj(out)p Ft(")p Fj(,)j Ft(")p
-Fj(ubnd)p Ft(_)p Fj(out)p Ft(")p Fj(,)f Ft(")p Fj(xl)p
-Ft(")e Fj(and)h Ft(")p Fj(xu)p Ft(")f Fj(will)h(b)r(e)g(set)g(to)g(the)
-g(v)-5 b(alue)427 2769 y(AST)p Ft(__)p Fj(BAD)29 b(if)g(this)g
-(function)h(should)e(fail)h(for)f(an)n(y)g(reason.)39
-b(Their)29 b(initial)g(v)-5 b(alues)28 b(on)g(en)n(try)h(will)g(not)427
-2868 y(b)r(e)f(altered)f(if)h(the)g(function)h(is)e(in)n(v)n(ok)n(ed)f
-(with)i(the)g(AST)g(error)e(status)h(set.)p 0 3079 3780
-12 v 0 3210 a Fz(astMapGet0)p Fc(<)p Fz(X)p Fc(>)1242
-3211 y Fe(Get)38 b(a)h(scalar)e(v)-7 b(alue)39 b(from)e(a)1672
-3311 y(KeyMap)2771 3210 y Fz(astMapGet0)p Fc(<)p Fz(X)p
-Fc(>)0 3511 y Fd(Description:)44 b Fj(This)25 b(is)g(a)f(set)h(of)g
-(functions)g(for)f(retrieving)g(a)g(scalar)f(v)-5 b(alue)25
-b(from)g(a)f(KeyMap.)35 b(Y)-7 b(ou)25 b(should)g(replace)227
-3611 y Fl(<)p Fj(X)p Fl(>)g Fj(in)h(the)g(generic)e(function)i(name)g
-(astMapGet0)p Fl(<)p Fj(X)p Fl(>)e Fj(b)n(y)h(an)g(appropriate)f(1-c)n
-(haracter)f(t)n(yp)r(e)i(co)r(de)h(\(see)227 3711 y(the)g
-Ft(")p Fj(Data)f(T)n(yp)r(e)g(Co)r(des)p Ft(")g Fj(section)g(b)r(elo)n
-(w)g(for)g(the)h(co)r(de)g(appropriate)d(to)j(eac)n(h)f(supp)r(orted)g
-(data)g(t)n(yp)r(e\).)37 b(The)227 3810 y(stored)h(v)-5
-b(alue)38 b(is)g(con)n(v)n(erted)f(to)h(the)h(data)e(t)n(yp)r(e)i
-(indiced)f(b)n(y)g Fl(<)p Fj(X)p Fl(>)g Fj(b)r(efore)g(b)r(eing)g
-(returned)g(\(an)g(error)f(is)227 3910 y(rep)r(orted)27
-b(if)h(it)g(is)g(not)f(p)r(ossible)h(to)f(con)n(v)n(ert)f(the)i(stored)
-f(v)-5 b(alue)27 b(to)h(the)g(requested)f(data)g(t)n(yp)r(e\).)0
-4071 y Fd(Synopsis:)121 b Ft(int)42 b(astMapGet0)p Fl(<)p
-Ft(X)p Fl(>)p Ft(\()c(AstKeyMap)i Fi(\003)p Ft(this,)h(const)g(char)h
-Fi(\003)p Ft(key,)g Fl(<)p Ft(X)p Fl(>)p Ft(type)e Fi(\003)p
-Ft(value)h(\);)0 4232 y Fd(P)m(arameters:)259 4380 y(this)427
-4480 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)259 4619
-y Fd(k)m(ey)427 4718 y Fj(The)g(c)n(haracter)d(string)i(iden)n(tifying)
-h(the)g(v)-5 b(alue)28 b(to)f(b)r(e)h(retriev)n(ed.)36
-b(T)-7 b(railing)26 b(spaces)h(are)g(ignored.)259 4857
-y Fd(v)-5 b(alue)427 4957 y Fj(A)37 b(p)r(oin)n(ter)f(to)g(a)g
-(bu\013er)g(in)h(whic)n(h)f(to)g(return)g(the)g(requested)g(v)-5
-b(alue.)63 b(If)37 b(the)f(requested)g(k)n(ey)f(is)i(not)427
-5056 y(found,)e(then)e(the)g(con)n(ten)n(ts)f(of)h(the)g(bu\013er)g(on)
-f(en)n(try)g(to)h(this)g(function)g(will)g(b)r(e)g(unc)n(hanged)f(on)g
-(exit.)427 5156 y(F)-7 b(or)26 b(p)r(oin)n(ter)g(t)n(yp)r(es)h(\()p
-Ft(")p Fj(A)p Ft(")f Fj(and)h Ft(")p Fj(C)p Ft(")p Fj(\),)f(the)h
-(bu\013er)g(should)f(b)r(e)h(a)f(suitable)h(p)r(oin)n(ter,)f(and)g(the)
-h(address)f(of)427 5255 y(this)i(p)r(oin)n(ter)f(should)h(b)r(e)g
-(supplied)g(as)f(the)h Ft(")p Fj(v)-5 b(alue)p Ft(")26
-b Fj(parameter.)0 5429 y Fd(Returned)32 b(V)-8 b(alue:)259
-5577 y(astMapGet0)p Fl(<)p Fd(X)p Fl(>)p Fd(\(\))427
-5677 y Fj(a)27 b(non-zero)f(v)-5 b(alue)28 b(if)g(the)g(requested)f(k)n
-(ey)g(name)g(w)n(as)g(found,)h(and)f(is)h(set)f(to)h(zero)e(otherwise.)
-p eop end
-%%Page: 263 273
-TeXDict begin 263 272 bop 3643 52 a FF(263)0 351 y Fd(Notes:)340
-639 y Fi(\017)45 b Fj(No)31 b(error)e(is)h(rep)r(orted)g(if)i(the)f
-(requested)f(k)n(ey)g(cannot)g(b)r(e)h(found)g(in)g(the)g(giv)n(en)f
-(KeyMap,)h(but)g(a)g(zero)427 739 y(v)-5 b(alue)25 b(will)g(b)r(e)g
-(returned)f(as)h(the)g(function)g(v)-5 b(alue.)36 b(The)25
-b(supplied)g(bu\013er)g(will)g(b)r(e)g(returned)f(unc)n(hanged.)340
-875 y Fi(\017)45 b Fj(Key)27 b(names)g(are)g(case)g(sensitiv)n(e,)g
-(and)g(white)h(space)f(is)h(considered)e(signi\014can)n(t.)340
-1010 y Fi(\017)45 b Fj(If)28 b(the)g(stored)f(v)-5 b(alue)28
-b(is)f(a)g(v)n(ector)f(v)-5 b(alue,)28 b(then)g(the)g(\014rst)f(v)-5
-b(alue)28 b(in)g(the)g(v)n(ector)e(will)i(b)r(e)g(returned.)340
-1146 y Fi(\017)45 b Fj(A)32 b(string)e(p)r(oin)n(ter)h(returned)g(b)n
-(y)g(astMapGet0C)f(is)h(guaran)n(teed)f(to)h(remain)f(v)-5
-b(alid)32 b(and)f(the)g(string)g(to)427 1245 y(whic)n(h)22
-b(it)f(p)r(oin)n(ts)h(will)f(not)h(b)r(e)g(o)n(v)n(er-written)d(for)i
-(a)g(total)g(of)h(50)e(successiv)n(e)g(in)n(v)n(o)r(cations)g(of)h
-(this)h(function.)427 1345 y(After)30 b(this,)g(the)g(memory)e(con)n
-(taining)g(the)i(string)f(ma)n(y)f(b)r(e)i(re-used,)f(so)f(a)h(cop)n(y)
-f(of)i(the)f(string)g(should)427 1445 y(b)r(e)f(made)g(if)g(it)g(is)f
-(needed)h(for)f(longer)f(than)i(this.)340 1580 y Fi(\017)45
-b Fj(If)30 b(the)f(returned)g(v)-5 b(alue)29 b(is)g(an)g(AST)g(Ob)5
-b(ject)29 b(p)r(oin)n(ter,)g(the)h(Ob)5 b(ject's)29 b(reference)f(coun)
-n(t)h(is)g(incremen)n(ted)427 1680 y(b)n(y)f(this)h(call.)39
-b(An)n(y)29 b(subsequen)n(t)f(c)n(hanges)f(made)h(to)g(the)h(Ob)5
-b(ject)29 b(using)f(the)g(returned)g(p)r(oin)n(ter)h(will)f(b)r(e)427
-1779 y(re\015ected)35 b(in)g(an)n(y)f(an)n(y)g(other)g(activ)n(e)g(p)r
-(oin)n(ters)g(for)g(the)h(Ob)5 b(ject.)58 b(The)35 b(returned)f(p)r
-(oin)n(ter)h(should)f(b)r(e)427 1879 y(ann)n(ulled)28
-b(using)f(astAnn)n(ul)h(when)f(it)h(is)g(no)f(longer)f(needed.)-2
-2046 y Fd(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)227 2193
-y Fj(T)-7 b(o)18 b(select)h(the)f(appropriate)f(function,)k(y)n(ou)c
-(should)h(replace)g Fl(<)p Fj(X)p Fl(>)g Fj(in)g(the)h(generic)e
-(function)i(name)g(astMapGet0)p Fl(<)p Fj(X)p Fl(>)227
-2292 y Fj(with)35 b(a)f(1-c)n(haracter)e(data)h(t)n(yp)r(e)i(co)r(de,)h
-(so)e(as)f(to)i(matc)n(h)f(the)h(data)e(t)n(yp)r(e)i
-Fl(<)p Fj(X)p Fl(>)p Fj(t)n(yp)r(e)f(of)g(the)h(data)f(y)n(ou)g(are)227
-2392 y(pro)r(cessing,)26 b(as)h(follo)n(ws:)340 2534
-y Fi(\017)45 b Fj(F:)28 b(\015oat)340 2669 y Fi(\017)45
-b Fj(D:)28 b(double)340 2805 y Fi(\017)45 b Fj(I:)28
-b(in)n(t)340 2941 y Fi(\017)45 b Fj(C:)28 b Ft(")p Fj(const)p
-Ft(")e Fj(p)r(oin)n(ter)i(to)f(n)n(ull)h(terminated)f(c)n(haracter)f
-(string)340 3076 y Fi(\017)45 b Fj(A:)28 b(P)n(oin)n(ter)e(to)i(AstOb)5
-b(ject)340 3212 y Fi(\017)45 b Fj(P:)28 b(Generic)f Ft(")p
-Fj(v)n(oid)f Fi(\003)p Ft(")h Fj(p)r(oin)n(ter)227 3379
-y(F)-7 b(or)29 b(example,)g(astMapGet0D)g(w)n(ould)g(b)r(e)g(used)h(to)
-f(get)g(a)g Ft(")p Fj(double)p Ft(")f Fj(v)-5 b(alue,)30
-b(while)f(astMapGet0I)f(w)n(ould)h(b)r(e)227 3479 y(used)f(to)f(get)h
-(an)f Ft(")p Fj(in)n(t)p Ft(")p Fj(,)g(etc.)p 0 3684
-3780 12 v 0 3814 a Fz(astMapGet1)p Fc(<)p Fz(X)p Fc(>)1233
-3815 y Fe(Get)38 b(a)g(v)m(ector)g(v)-7 b(alue)38 b(from)f(a)1672
-3915 y(KeyMap)2771 3814 y Fz(astMapGet1)p Fc(<)p Fz(X)p
-Fc(>)0 4109 y Fd(Description:)44 b Fj(This)24 b(is)g(a)g(set)g(of)g
-(functions)g(for)f(retrieving)g(a)g(v)n(ector)g(v)-5
-b(alue)24 b(from)g(a)f(KeyMap.)35 b(Y)-7 b(ou)24 b(should)g(replace)227
-4209 y Fl(<)p Fj(X)p Fl(>)h Fj(in)h(the)g(generic)e(function)i(name)g
-(astMapGet1)p Fl(<)p Fj(X)p Fl(>)e Fj(b)n(y)h(an)g(appropriate)f(1-c)n
-(haracter)f(t)n(yp)r(e)i(co)r(de)h(\(see)227 4309 y(the)39
-b Ft(")p Fj(Data)f(T)n(yp)r(e)g(Co)r(des)p Ft(")f Fj(section)h(b)r(elo)
-n(w)g(for)g(the)h(co)r(de)f(appropriate)e(to)j(eac)n(h)e(supp)r(orted)h
-(data)g(t)n(yp)r(e\).)227 4408 y(The)33 b(stored)f(v)-5
-b(alue)33 b(is)f(con)n(v)n(erted)g(to)g(the)i(data)e(t)n(yp)r(e)h
-(indiced)g(b)n(y)g Fl(<)p Fj(X)p Fl(>)f Fj(b)r(efore)g(b)r(eing)h
-(returned)g(\(an)g(error)227 4508 y(is)c(rep)r(orted)g(if)h(it)f(is)h
-(not)f(p)r(ossible)g(to)g(con)n(v)n(ert)f(the)h(stored)g(v)-5
-b(alue)29 b(to)g(the)h(requested)e(data)h(t)n(yp)r(e\).)42
-b(Note,)30 b(the)227 4607 y(astMapGet1C)j(function)i(has)f(an)f(extra)g
-(parameter)g Ft(")p Fj(l)p Ft(")g Fj(whic)n(h)h(sp)r(eci\014es)g(the)g
-(maxim)n(um)g(length)g(of)g(eac)n(h)227 4707 y(string)27
-b(to)h(b)r(e)g(stored)e(in)i(the)g Ft(")p Fj(v)-5 b(alue)p
-Ft(")27 b Fj(bu\013er)h(\(see)f(the)h Ft(")p Fj(astMapGet1C)p
-Ft(")e Fj(section)h(b)r(elo)n(w\).)0 4862 y Fd(Synopsis:)121
-b Ft(int)42 b(astMapGet1)p Fl(<)p Ft(X)p Fl(>)p Ft(\()c(AstKeyMap)i
-Fi(\003)p Ft(this,)h(const)g(char)h Fi(\003)p Ft(key,)g(int)g(mxval,)f
-(int)i Fi(\003)p Ft(nval,)e Fl(<)p Ft(X)p Fl(>)p Ft(type)227
-4962 y Fi(\003)p Ft(value)g(\))i(int)g(astMapGet1C\()38
-b(AstKeyMap)i Fi(\003)p Ft(this,)h(const)h(char)g Fi(\003)p
-Ft(key,)f(int)i(l,)f(int)h(mxval,)e(int)h Fi(\003)p Ft(nval,)227
-5061 y(const)g(char)g Fi(\003)p Ft(value)f(\))0 5216
-y Fd(P)m(arameters:)259 5358 y(this)427 5458 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(KeyMap.)259 5593 y Fd(k)m(ey)427 5693 y
-Fj(The)g(c)n(haracter)d(string)i(iden)n(tifying)h(the)g(v)-5
-b(alue)28 b(to)f(b)r(e)h(retriev)n(ed.)36 b(T)-7 b(railing)26
-b(spaces)h(are)g(ignored.)p eop end
-%%Page: 264 274
-TeXDict begin 264 273 bop 0 52 a FF(264)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(mxv)-5
-b(al)427 451 y Fj(The)28 b(n)n(um)n(b)r(er)f(of)h(elemen)n(ts)f(in)h
-(the)g Ft(")p Fj(v)-5 b(alue)p Ft(")27 b Fj(arra)n(y)-7
-b(.)259 591 y Fd(n)m(v)i(al)427 690 y Fj(The)24 b(address)f(of)h(an)f
-(in)n(teger)g(in)h(whic)n(h)g(to)g(put)g(the)g(n)n(um)n(b)r(er)g(of)g
-(elemen)n(ts)g(stored)f(in)h(the)g Ft(")p Fj(v)-5 b(alue)p
-Ft(")23 b Fj(arra)n(y)-7 b(.)427 790 y(An)n(y)28 b(un)n(used)f(elemen)n
-(ts)h(of)f(the)h(arra)n(y)e(are)g(left)i(unc)n(hanged.)259
-930 y Fd(v)-5 b(alue)427 1029 y Fj(A)34 b(p)r(oin)n(ter)f(to)g(an)g
-(arra)n(y)d(in)k(whic)n(h)f(to)g(return)g(the)g(requested)g(v)-5
-b(alues.)53 b(If)34 b(the)f(requested)g(k)n(ey)g(is)g(not)427
-1129 y(found,)28 b(then)g(the)g(con)n(ten)n(ts)f(of)h(the)g(bu\013er)g
-(on)f(en)n(try)g(to)g(this)h(function)g(will)g(b)r(e)g(unc)n(hanged)f
-(on)g(exit.)0 1304 y Fd(Returned)32 b(V)-8 b(alue:)259
-1455 y(astMapGet1)p Fl(<)p Fd(X)p Fl(>)p Fd(\(\))427
-1554 y Fj(a)27 b(non-zero)f(v)-5 b(alue)28 b(if)g(the)g(requested)f(k)n
-(ey)g(name)g(w)n(as)g(found,)h(and)f(is)h(set)f(to)h(zero)e(otherwise.)
-0 1730 y Fd(Notes:)340 2026 y Fi(\017)45 b Fj(No)31 b(error)e(is)h(rep)
-r(orted)g(if)i(the)f(requested)f(k)n(ey)g(cannot)g(b)r(e)h(found)g(in)g
-(the)g(giv)n(en)f(KeyMap,)h(but)g(a)g(zero)427 2126 y(v)-5
-b(alue)26 b(will)h(b)r(e)g(returned)f(as)f(the)i(function)g(v)-5
-b(alue.)36 b(The)27 b(supplied)f(arra)n(y)e(will)j(b)r(e)f(returned)g
-(unc)n(hanged.)340 2266 y Fi(\017)45 b Fj(Key)27 b(names)g(are)g(case)g
-(sensitiv)n(e,)g(and)g(white)h(space)f(is)h(considered)e(signi\014can)n
-(t.)340 2405 y Fi(\017)45 b Fj(If)26 b(the)f(stored)g(v)-5
-b(alue)25 b(is)g(a)g(scalar)e(v)-5 b(alue,)26 b(then)f(the)h(v)-5
-b(alue)25 b(will)h(b)r(e)f(returned)g(in)g(the)h(\014rst)f(elemen)n(t)g
-(of)g(the)427 2505 y(supplied)j(arra)n(y)-7 b(,)26 b(and)h
-Ft(")p Fj(n)n(v)-5 b(al)p Ft(")26 b Fj(will)i(b)r(e)g(returned)f(set)h
-(to)g(1.)-2 2681 y Fd(astMapGet1C)n(:)227 2827 y Fj(The)d
-Ft(")p Fj(v)-5 b(alue)p Ft(")24 b Fj(bu\013er)h(supplied)g(to)f(the)h
-(astMapGet1C)f(function)h(should)g(b)r(e)g(a)f(p)r(oin)n(ter)h(to)f(a)g
-(c)n(haracter)f(arra)n(y)227 2926 y(with)29 b Ft(")p
-Fj(mxv)-5 b(al)p Fi(\003)p Fj(l)p Ft(")28 b Fj(elemen)n(ts,)g(where)g
-Ft(")p Fj(l)p Ft(")g Fj(is)h(the)g(maxim)n(um)f(length)h(of)f(a)g
-(string)g(to)h(b)r(e)g(returned.)39 b(The)29 b(v)-5 b(alue)227
-3026 y(of)25 b Ft(")p Fj(l)p Ft(")f Fj(should)g(b)r(e)h(supplied)h(as)e
-(an)g(extra)g(parameter)f(follo)n(wing)h Ft(")p Fj(k)n(ey)p
-Ft(")f Fj(when)i(in)n(v)n(oking)e(astMapGet1C,)h(and)227
-3125 y(should)k(include)g(space)e(for)i(a)f(terminating)g(n)n(ull)h(c)n
-(haracter.)-2 3289 y Fd(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)227
-3435 y Fj(T)-7 b(o)18 b(select)h(the)f(appropriate)f(function,)k(y)n
-(ou)c(should)h(replace)g Fl(<)p Fj(X)p Fl(>)g Fj(in)g(the)h(generic)e
-(function)i(name)g(astMapGet1)p Fl(<)p Fj(X)p Fl(>)227
-3534 y Fj(with)35 b(a)f(1-c)n(haracter)e(data)h(t)n(yp)r(e)i(co)r(de,)h
-(so)e(as)f(to)i(matc)n(h)f(the)h(data)e(t)n(yp)r(e)i
-Fl(<)p Fj(X)p Fl(>)p Fj(t)n(yp)r(e)f(of)g(the)h(data)f(y)n(ou)g(are)227
-3634 y(pro)r(cessing,)26 b(as)h(follo)n(ws:)340 3784
-y Fi(\017)45 b Fj(D:)28 b(double)340 3924 y Fi(\017)45
-b Fj(F:)28 b(\015oat)340 4064 y Fi(\017)45 b Fj(I:)28
-b(in)n(t)340 4203 y Fi(\017)45 b Fj(C:)28 b Ft(")p Fj(const)p
-Ft(")e Fj(p)r(oin)n(ter)i(to)f(n)n(ull)h(terminated)f(c)n(haracter)f
-(string)340 4343 y Fi(\017)45 b Fj(A:)28 b(P)n(oin)n(ter)e(to)i(AstOb)5
-b(ject)340 4483 y Fi(\017)45 b Fj(P:)28 b(Generic)f Ft(")p
-Fj(v)n(oid)f Fi(\003)p Ft(")h Fj(p)r(oin)n(ter)227 4658
-y(F)-7 b(or)32 b(example,)h(astMapGet1D)e(w)n(ould)h(b)r(e)g(used)g(to)
-g(get)g Ft(")p Fj(double)p Ft(")f Fj(v)-5 b(alues,)33
-b(while)f(astMapGet1I)g(w)n(ould)f(b)r(e)227 4758 y(used)26
-b(to)f(get)g Ft(")p Fj(in)n(t)p Ft(")g Fj(v)-5 b(alues,)25
-b(etc.)37 b(F)-7 b(or)24 b(D)i(or)f(I,)g(the)h(supplied)g
-Ft(")p Fj(v)-5 b(alue)p Ft(")24 b Fj(parameter)g(should)h(b)r(e)h(a)f
-(p)r(oin)n(ter)g(to)g(an)227 4858 y(arra)n(y)f(of)j(doubles)f(or)g(in)n
-(ts,)h(with)g Ft(")p Fj(mxv)-5 b(al)p Ft(")25 b Fj(elemen)n(ts.)37
-b(F)-7 b(or)26 b(C,)g(the)h(supplied)g Ft(")p Fj(v)-5
-b(alue)p Ft(")26 b Fj(parameter)f(should)h(b)r(e)227
-4957 y(a)32 b(p)r(oin)n(ter)f(to)h(a)f(c)n(haracter)f(string)h(with)h
-Ft(")p Fj(mxv)-5 b(al)p Fi(\003)p Fj(l)p Ft(")30 b Fj(elemen)n(ts.)50
-b(F)-7 b(or)31 b(A,)h(the)g(supplied)g Ft(")p Fj(v)-5
-b(alue)p Ft(")31 b Fj(parameter)227 5057 y(should)d(b)r(e)g(a)f(p)r
-(oin)n(ter)g(to)g(an)h(arra)n(y)d(of)j(AstOb)5 b(ject)27
-b(p)r(oin)n(ters.)p 0 5270 3780 12 v 0 5402 a Fz(astMapGetElem)p
-Fc(<)p Fz(X)p Fc(>)344 b Fe(Get)39 b(a)f(single)1402
-5516 y(elemen)m(t)f(of)i(a)f(v)m(ector)1571 5616 y(v)-7
-b(alue)39 b(from)e(a)1672 5715 y(KeyMap)2539 5402 y Fz(astMapGetElem)p
-Fc(<)p Fz(X)p Fc(>)p eop end
-%%Page: 265 275
-TeXDict begin 265 274 bop 3643 52 a FF(265)0 351 y Fd(Description:)44
-b Fj(This)26 b(is)g(a)f(set)h(of)f(functions)h(for)f(retrieving)g(a)g
-(single)g(elemen)n(t)h(of)g(a)f(v)n(ector)f(v)-5 b(alue)26
-b(from)f(a)g(KeyMap.)227 451 y(Y)-7 b(ou)35 b(should)g(replace)f
-Fl(<)p Fj(X)p Fl(>)h Fj(in)g(the)h(generic)e(function)h(name)g
-(astMapGetElem)p Fl(<)p Fj(X)p Fl(>)f Fj(b)n(y)h(an)f(appropriate)227
-551 y(1-c)n(haracter)25 b(t)n(yp)r(e)i(co)r(de)g(\(see)g(the)h
-Ft(")p Fj(Data)f(T)n(yp)r(e)g(Co)r(des)p Ft(")f Fj(section)h(b)r(elo)n
-(w)g(for)g(the)h(co)r(de)f(appropriate)e(to)i(eac)n(h)227
-650 y(supp)r(orted)d(data)f(t)n(yp)r(e\).)36 b(The)24
-b(stored)f(v)-5 b(alue)23 b(is)h(con)n(v)n(erted)e(to)i(the)g(data)f(t)
-n(yp)r(e)h(indiced)g(b)n(y)g Fl(<)p Fj(X)p Fl(>)f Fj(b)r(efore)h(b)r
-(eing)227 750 y(returned)36 b(\(an)h(error)e(is)h(rep)r(orted)g(if)h
-(it)g(is)f(not)h(p)r(ossible)f(to)h(con)n(v)n(ert)e(the)i(stored)e(v)-5
-b(alue)37 b(to)f(the)h(requested)227 849 y(data)31 b(t)n(yp)r(e\).)48
-b(Note,)32 b(the)g(astMapGetElemC)e(function)i(has)f(an)g(extra)f
-(parameter)g Ft(")p Fj(l)p Ft(")g Fj(whic)n(h)h(sp)r(eci\014es)g(the)
-227 949 y(maxim)n(um)38 b(length)g(of)h(the)f(string)f(to)h(b)r(e)h
-(stored)e(in)i(the)f Ft(")p Fj(v)-5 b(alue)p Ft(")37
-b Fj(bu\013er)i(\(see)f(the)g Ft(")p Fj(astMapGetElemC)p
-Ft(")227 1049 y Fj(section)27 b(b)r(elo)n(w\).)0 1201
-y Fd(Synopsis:)121 b Ft(int)42 b(astMapGetElem)p Fl(<)p
-Ft(X)p Fl(>)p Ft(\()37 b(AstKeyMap)j Fi(\003)p Ft(this,)h(const)g(char)
-h Fi(\003)p Ft(key,)g(int)g(elem,)f Fl(<)p Ft(X)p Fl(>)p
-Ft(type)g Fi(\003)p Ft(value)227 1300 y(\))i(int)g(astMapGetElemC\()37
-b(AstKeyMap)j Fi(\003)p Ft(this,)h(const)h(char)g Fi(\003)p
-Ft(key,)f(int)h(l,)h(int)f(elem,)g(const)f(char)227 1400
-y Fi(\003)p Ft(value)g(\))0 1552 y Fd(P)m(arameters:)259
-1691 y(this)427 1790 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)259
-1924 y Fd(k)m(ey)427 2024 y Fj(The)g(c)n(haracter)d(string)i(iden)n
-(tifying)h(the)g(v)-5 b(alue)28 b(to)f(b)r(e)h(retriev)n(ed.)36
-b(T)-7 b(railing)26 b(spaces)h(are)g(ignored.)259 2158
-y Fd(elem)427 2258 y Fj(The)k(index)g(of)g(the)h(required)d(v)n(ector)h
-(elemen)n(t,)i(starting)e(at)h(zero.)46 b(An)31 b(error)e(will)i(b)r(e)
-h(rep)r(orted)e(if)h(the)427 2357 y(v)-5 b(alue)28 b(is)f(outside)h
-(the)g(range)e(of)h(the)h(v)n(ector.)259 2492 y Fd(v)-5
-b(alue)427 2591 y Fj(A)23 b(p)r(oin)n(ter)f(to)g(a)g(bu\013er)g(in)h
-(whic)n(h)f(to)h(return)e(the)i(requested)f(v)-5 b(alue.)35
-b(If)23 b(the)f(requested)g(k)n(ey)g(is)g(not)g(found,)427
-2691 y(then)28 b(the)g(con)n(ten)n(ts)f(of)h(the)g(bu\013er)g(on)f(en)n
-(try)g(to)g(this)h(function)g(will)g(b)r(e)g(unc)n(hanged)f(on)g(exit.)
-0 2855 y Fd(Returned)32 b(V)-8 b(alue:)259 2994 y(astMapGetElem)p
-Fl(<)p Fd(X)p Fl(>)p Fd(\(\))427 3094 y Fj(a)27 b(non-zero)f(v)-5
-b(alue)28 b(if)g(the)g(requested)f(k)n(ey)g(name)g(w)n(as)g(found,)h
-(and)f(is)h(set)f(to)h(zero)e(otherwise.)0 3258 y Fd(Notes:)340
-3543 y Fi(\017)45 b Fj(No)31 b(error)e(is)h(rep)r(orted)g(if)i(the)f
-(requested)f(k)n(ey)g(cannot)g(b)r(e)h(found)g(in)g(the)g(giv)n(en)f
-(KeyMap,)h(but)g(a)g(zero)427 3643 y(v)-5 b(alue)28 b(will)g(b)r(e)g
-(returned)f(as)g(the)h(function)g(v)-5 b(alue.)340 3777
-y Fi(\017)45 b Fj(Key)27 b(names)g(are)g(case)g(sensitiv)n(e,)g(and)g
-(white)h(space)f(is)h(considered)e(signi\014can)n(t.)-2
-3941 y Fd(astMapGetElemC)n(:)227 4087 y Fj(The)k Ft(")p
-Fj(v)-5 b(alue)p Ft(")29 b Fj(bu\013er)h(supplied)g(to)f(the)h
-(astMapGetElemC)f(function)i(should)e(b)r(e)h(a)g(p)r(oin)n(ter)f(to)g
-(a)h(c)n(haracter)227 4187 y(arra)n(y)25 b(with)i Ft(")p
-Fj(l)p Ft(")f Fj(elemen)n(ts,)h(where)f Ft(")p Fj(l)p
-Ft(")g Fj(is)g(the)h(maxim)n(um)g(length)g(of)f(the)h(string)f(to)h(b)r
-(e)g(returned.)36 b(The)27 b(v)-5 b(alue)227 4287 y(of)26
-b Ft(")p Fj(l)p Ft(")f Fj(should)h(b)r(e)g(supplied)g(as)f(an)h(extra)f
-(parameter)f(follo)n(wing)h Ft(")p Fj(k)n(ey)p Ft(")f
-Fj(when)i(in)n(v)n(oking)e(astMapGetElemC,)227 4386 y(and)k(should)f
-(include)h(space)f(for)g(a)g(terminating)g(n)n(ull)h(c)n(haracter.)-2
-4538 y Fd(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)227 4684
-y Fj(T)-7 b(o)18 b(select)h(the)f(appropriate)f(function,)k(y)n(ou)c
-(should)h(replace)g Fl(<)p Fj(X)p Fl(>)g Fj(in)g(the)h(generic)e
-(function)i(name)g(astMapGetElem)p Fl(<)p Fj(X)p Fl(>)227
-4784 y Fj(with)35 b(a)f(1-c)n(haracter)e(data)h(t)n(yp)r(e)i(co)r(de,)h
-(so)e(as)f(to)i(matc)n(h)f(the)h(data)e(t)n(yp)r(e)i
-Fl(<)p Fj(X)p Fl(>)p Fj(t)n(yp)r(e)f(of)g(the)h(data)f(y)n(ou)g(are)227
-4884 y(pro)r(cessing,)26 b(as)h(follo)n(ws:)340 5023
-y Fi(\017)45 b Fj(D:)28 b(double)340 5157 y Fi(\017)45
-b Fj(F:)28 b(\015oat)340 5291 y Fi(\017)45 b Fj(I:)28
-b(in)n(t)340 5425 y Fi(\017)45 b Fj(C:)28 b Ft(")p Fj(const)p
-Ft(")e Fj(p)r(oin)n(ter)i(to)f(n)n(ull)h(terminated)f(c)n(haracter)f
-(string)340 5559 y Fi(\017)45 b Fj(A:)28 b(P)n(oin)n(ter)e(to)i(AstOb)5
-b(ject)340 5693 y Fi(\017)45 b Fj(P:)28 b(Generic)f Ft(")p
-Fj(v)n(oid)f Fi(\003)p Ft(")h Fj(p)r(oin)n(ter)p eop
-end
-%%Page: 266 276
-TeXDict begin 266 275 bop 0 52 a FF(266)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)227 351 y Fj(F)-7
-b(or)35 b(example,)h(astMapGetElemD)e(w)n(ould)h(b)r(e)g(used)g(to)g
-(get)f(a)h Ft(")p Fj(double)p Ft(")f Fj(v)-5 b(alue,)36
-b(while)f(astMapGetElemI)227 451 y(w)n(ould)d(b)r(e)h(used)f(to)g(get)g
-(an)g Ft(")p Fj(in)n(t)p Ft(")g Fj(v)-5 b(alue,)33 b(etc.)51
-b(F)-7 b(or)32 b(D)g(or)g(I,)g(the)h(supplied)f Ft(")p
-Fj(v)-5 b(alue)p Ft(")31 b Fj(parameter)g(should)h(b)r(e)227
-551 y(a)37 b(p)r(oin)n(ter)g(to)g(a)g(double)g(or)g(in)n(t.)66
-b(F)-7 b(or)37 b(C,)g(the)h(supplied)f Ft(")p Fj(v)-5
-b(alue)p Ft(")37 b Fj(parameter)e(should)i(b)r(e)h(a)f(p)r(oin)n(ter)g
-(to)g(a)227 650 y(c)n(haracter)27 b(string)h(with)h Ft(")p
-Fj(l)p Ft(")f Fj(elemen)n(ts.)40 b(F)-7 b(or)28 b(A,)h(the)g(supplied)g
-Ft(")p Fj(v)-5 b(alue)p Ft(")28 b Fj(parameter)f(should)h(b)r(e)h(a)f
-(p)r(oin)n(ter)h(to)227 750 y(an)f(AstOb)5 b(ject)27
-b(p)r(oin)n(ter.)p 0 958 3780 12 v 0 1088 a Fz(astMapHasKey)1111
-1089 y Fe(Chec)m(k)38 b(if)g(an)h(en)m(try)f(with)f(a)i(giv)m(en)1288
-1204 y(k)m(ey)f(exists)g(in)h(a)f(KeyMap)2880 1088 y
-Fz(astMapHasKey)0 1401 y Fd(Description:)44 b Fj(This)33
-b(function)h(returns)f(a)f(\015ag)h(indicating)f(if)i(the)g(KeyMap)e
-(con)n(tains)g(an)h(en)n(try)f(with)i(the)f(giv)n(en)227
-1501 y(k)n(ey)-7 b(.)0 1659 y Fd(Synopsis:)121 b Ft(int)42
-b(astMapHasKey\()c(AstKeyMap)i Fi(\003)p Ft(this,)h(const)h(char)g
-Fi(\003)p Ft(key)g(\))0 1817 y Fd(P)m(arameters:)259
-1962 y(this)427 2061 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)259
-2199 y Fd(k)m(ey)427 2298 y Fj(The)g(c)n(haracter)d(string)i(iden)n
-(tifying)h(the)g(KeyMap)f(en)n(try)-7 b(.)36 b(T)-7 b(railing)27
-b(spaces)f(are)h(ignored.)0 2469 y Fd(Returned)32 b(V)-8
-b(alue:)259 2614 y(astMapHasKey\(\))427 2713 y Fj(Non-zero)26
-b(if)i(the)g(k)n(ey)f(w)n(as)g(found,)h(and)f(zero)g(otherwise.)0
-2884 y Fd(Notes:)340 3175 y Fi(\017)45 b Fj(A)29 b(function)g(v)-5
-b(alue)28 b(of)g(zero)f(will)h(b)r(e)h(returned)e(if)i(an)f(error)e
-(has)i(already)e(o)r(ccurred,)i(or)f(if)i(this)f(function)427
-3274 y(should)g(fail)f(for)g(an)n(y)g(reason.)p 0 3482
-V 0 3613 a Fz(astMapKey)875 3614 y Fe(Get)38 b(the)h(k)m(ey)f(at)g(a)h
-(giv)m(en)f(index)g(within)f(the)1672 3727 y(KeyMap)3103
-3613 y Fz(astMapKey)0 3925 y Fd(Description:)44 b Fj(This)31
-b(function)g(returns)e(a)h(string)g(holding)g(the)h(k)n(ey)f(for)g(the)
-g(en)n(try)g(with)h(the)g(giv)n(en)e(index)i(within)227
-4024 y(the)d(KeyMap.)227 4153 y(This)k(function)f(is)h(in)n(tended)f
-(primarily)g(as)f(a)h(means)g(of)g(iterating)g(round)g(all)g(the)h
-(elemen)n(ts)f(in)h(a)e(KeyMap.)227 4253 y(F)-7 b(or)24
-b(this)h(purp)r(ose,)g(the)g(n)n(um)n(b)r(er)f(of)g(en)n(tries)g(in)h
-(the)g(KeyMap)e(should)i(\014rst)f(b)r(e)h(found)g(using)f(astMapSize)g
-(and)227 4352 y(this)i(function)g(should)f(then)h(b)r(e)f(called)g(in)h
-(a)f(lo)r(op,)g(with)h(the)g(index)f(v)-5 b(alue)25 b(going)f(from)h
-(zero)g(to)g(one)g(less)f(than)227 4452 y(the)29 b(size)e(of)i(the)f
-(KeyMap.)37 b(The)29 b(index)f(asso)r(ciated)e(with)j(a)f(giv)n(en)f
-(en)n(try)g(is)h(not,)h(in)f(general,)f(related)g(to)h(the)227
-4551 y(order)d(in)h(whic)n(h)g(the)h(en)n(tries)e(are)g(added)h(to)g
-(the)h(KeyMap,)e(and)h(ma)n(y)f(c)n(hange)g(if)i(other)e(en)n(tries)h
-(are)f(added)h(to)227 4651 y(or)h(remo)n(v)n(ed)f(from)h(the)h(KeyMap.)
-0 4809 y Fd(Synopsis:)121 b Ft(const)41 b(char)h Fi(\003)p
-Ft(astMapKey\()d(AstKeyMap)h Fi(\003)p Ft(this,)h(int)i(index)e(\))0
-4967 y Fd(P)m(arameters:)259 5112 y(this)427 5212 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(KeyMap.)259 5349 y Fd(index)427 5448 y Fj(The)g(index)g
-(in)n(to)g(the)g(KeyMap.)37 b(The)28 b(\014rst)g(en)n(try)f(has)g
-(index)i(zero,)d(and)i(the)h(last)e(has)g(index)i Ft(")p
-Fj(size-1)p Ft(")p Fj(,)427 5548 y(where)e Ft(")p Fj(size)p
-Ft(")g Fj(is)g(the)h(v)-5 b(alue)28 b(returned)f(b)n(y)g(the)h
-(astMapSize)f(function.)0 5718 y Fd(Returned)32 b(V)-8
-b(alue:)p eop end
-%%Page: 267 277
-TeXDict begin 267 276 bop 3643 52 a FF(267)259 351 y
-Fd(astMapKey\(\))427 451 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(a)f(n)n
-(ull-terminated)g(string)g(con)n(taining)g(the)h(k)n(ey)-7
-b(.)0 609 y Fd(Notes:)340 887 y Fi(\017)45 b Fj(The)36
-b(returned)g(p)r(oin)n(ter)g(is)g(guaran)n(teed)e(to)i(remain)g(v)-5
-b(alid)36 b(and)g(the)g(string)g(to)g(whic)n(h)g(it)g(p)r(oin)n(ts)g
-(will)427 987 y(not)c(b)r(e)g(o)n(v)n(er-written)e(for)i(a)f(total)h
-(of)g(50)f(successiv)n(e)f(in)n(v)n(o)r(cations)g(of)i(this)g
-(function.)51 b(After)32 b(this,)h(the)427 1086 y(memory)27
-b(con)n(taining)f(the)i(string)f(ma)n(y)f(b)r(e)i(re-used,)e(so)h(a)g
-(cop)n(y)f(of)i(the)f(string)g(should)g(b)r(e)h(made)f(if)h(it)g(is)427
-1186 y(needed)g(for)f(longer)f(than)i(this.)340 1315
-y Fi(\017)45 b Fj(A)26 b(NULL)g(p)r(oin)n(ter)e(will)i(b)r(e)f
-(returned)g(if)h(this)g(function)f(is)h(in)n(v)n(ok)n(ed)d(with)j(the)g
-(AST)f(error)f(status)h(set,)g(or)427 1414 y(if)j(it)g(should)g(fail)f
-(for)h(an)n(y)e(reason.)p 0 1605 3780 12 v 0 1736 a Fz(astMapLenC)1019
-1737 y Fe(Get)39 b(the)f(n)m(um)m(b)s(er)g(of)h(c)m(haracters)d(in)j(a)
-1147 1837 y(c)m(haracter)d(en)m(try)i(in)h(a)f(KeyMap)3027
-1736 y Fz(astMapLenC)0 2017 y Fd(Description:)44 b Fj(This)26
-b(function)g(returns)f(the)h(minim)n(um)g(length)f(whic)n(h)h(a)f(c)n
-(haracter)e(v)-5 b(ariable)25 b(whic)n(h)g(m)n(ust)h(ha)n(v)n(e)e(in)
-227 2117 y(order)i(to)i(b)r(e)g(able)f(to)g(store)g(a)g(sp)r(eci\014ed)
-g(en)n(try)g(in)h(the)g(supplied)g(KeyMap.)36 b(If)27
-b(the)h(named)g(en)n(try)f(is)g(a)g(v)n(ector)227 2217
-y(en)n(try)-7 b(,)27 b(then)i(the)f(returned)f(v)-5 b(alue)27
-b(is)h(the)g(length)f(of)h(the)g(longest)f(elemen)n(t)g(of)h(the)g(v)n
-(ector)e(v)-5 b(alue.)0 2362 y Fd(Synopsis:)121 b Ft(int)42
-b(astMapLenC\()d(AstKeyMap)h Fi(\003)p Ft(this,)h(const)h(char)g
-Fi(\003)p Ft(key)f(\))0 2507 y Fd(P)m(arameters:)259
-2640 y(this)427 2739 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)259
-2868 y Fd(k)m(ey)427 2968 y Fj(The)g(c)n(haracter)d(string)i(iden)n
-(tifying)h(the)g(KeyMap)f(en)n(try)-7 b(.)36 b(T)-7 b(railing)27
-b(spaces)f(are)h(ignored.)0 3125 y Fd(Returned)32 b(V)-8
-b(alue:)259 3258 y(astMapLenC\(\))427 3357 y Fj(The)35
-b(length)g(\(i.e.)59 b(n)n(um)n(b)r(er)35 b(of)g(c)n(haracters\))e(of)h
-(the)i(longest)e(formatted)g(v)-5 b(alue)35 b(asso)r(ciated)f(with)h
-(the)427 3457 y(named)28 b(en)n(try)-7 b(.)36 b(This)28
-b(do)r(es)f(not)h(include)g(the)g(trailing)e(n)n(ull)i(c)n(haracter.)0
-3615 y Fd(Notes:)340 3893 y Fi(\017)45 b Fj(A)21 b(function)g(v)-5
-b(alue)21 b(of)f(zero)f(will)i(b)r(e)g(returned)f(without)h(error)e(if)
-i(the)g(named)f(en)n(try)g(cannot)g(b)r(e)h(formatted)427
-3993 y(as)27 b(a)g(c)n(haracter)f(string.)340 4122 y
-Fi(\017)45 b Fj(A)29 b(function)g(v)-5 b(alue)28 b(of)g(zero)f(will)h
-(b)r(e)h(returned)e(if)i(an)f(error)e(has)i(already)e(o)r(ccurred,)i
-(or)f(if)i(this)f(function)427 4221 y(should)g(fail)f(for)g(an)n(y)g
-(reason.)p 0 4412 V 0 4544 a Fz(astMapLength)190 b Fe(Get)38
-b(the)h(v)m(ector)e(length)h(of)g(an)h(en)m(try)1555
-4657 y(in)f(a)h(KeyMap)2930 4544 y Fz(astMapLength)0
-4842 y Fd(Description:)44 b Fj(This)23 b(function)f(returns)g(the)g(v)n
-(ector)f(length)h(of)h(a)e(named)h(en)n(try)g(in)g(a)g(KeyMap,)h
-(\(that)f(is,)i(ho)n(w)d(man)n(y)227 4942 y(v)-5 b(alues)27
-b(are)g(asso)r(ciated)f(with)i(the)g(en)n(try\).)0 5087
-y Fd(Synopsis:)121 b Ft(int)42 b(astMapLength\()c(AstKeyMap)i
-Fi(\003)p Ft(this,)h(const)h(char)g Fi(\003)p Ft(key)g(\))0
-5233 y Fd(P)m(arameters:)259 5365 y(this)427 5465 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(KeyMap.)259 5593 y Fd(k)m(ey)427 5693 y
-Fj(The)g(c)n(haracter)d(string)i(iden)n(tifying)h(the)g(KeyMap)f(en)n
-(try)-7 b(.)36 b(T)-7 b(railing)27 b(spaces)f(are)h(ignored.)p
-eop end
-%%Page: 268 278
-TeXDict begin 268 277 bop 0 52 a FF(268)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Returned)i(V)-8
-b(alue:)259 492 y(astMapLength\(\))427 592 y Fj(The)31
-b(length)h(of)f(the)g(en)n(try)-7 b(.)47 b(One)31 b(for)f(a)h(scalar,)g
-(greater)e(than)i(one)g(for)f(a)h(v)n(ector.)46 b(A)32
-b(v)-5 b(alue)31 b(of)g(zero)f(is)427 691 y(returned)d(if)i(the)f
-(KeyMap)e(do)r(es)h(not)h(con)n(tain)f(the)h(named)f(en)n(try)-7
-b(.)0 857 y Fd(Notes:)340 1144 y Fi(\017)45 b Fj(A)29
-b(function)g(v)-5 b(alue)28 b(of)g(zero)f(will)h(b)r(e)h(returned)e(if)
-i(an)f(error)e(has)i(already)e(o)r(ccurred,)i(or)f(if)i(this)f
-(function)427 1244 y(should)g(fail)f(for)g(an)n(y)g(reason.)p
-0 1447 3780 12 v 0 1578 a Fz(astMapPut0)p Fc(<)p Fz(X)p
-Fc(>)1294 1579 y Fe(Add)39 b(a)g(scalar)e(v)-7 b(alue)39
-b(to)f(a)1672 1678 y(KeyMap)2771 1578 y Fz(astMapPut0)p
-Fc(<)p Fz(X)p Fc(>)0 1871 y Fd(Description:)44 b Fj(This)24
-b(is)g(a)f(set)h(of)f(functions)h(for)g(adding)f(scalar)f(v)-5
-b(alues)23 b(to)h(a)f(KeyMap.)35 b(Y)-7 b(ou)24 b(should)f(use)h(a)f
-(function)227 1971 y(whic)n(h)i(matc)n(hes)g(the)h(data)f(t)n(yp)r(e)g
-(of)g(the)h(data)f(y)n(ou)f(wish)h(to)h(add)f(to)g(the)h(KeyMap)e(b)n
-(y)h(replacing)f Fl(<)p Fj(X)p Fl(>)h Fj(in)g(the)227
-2071 y(generic)30 b(function)h(name)g(astMapPut0)p Fl(<)p
-Fj(X)p Fl(>)e Fj(b)n(y)h(an)h(appropriate)e(1-c)n(haracter)f(t)n(yp)r
-(e)j(co)r(de)f(\(see)h(the)g Ft(")p Fj(Data)227 2170
-y(T)n(yp)r(e)d(Co)r(des)p Ft(")f Fj(section)g(b)r(elo)n(w)g(for)g(the)h
-(co)r(de)f(appropriate)f(to)i(eac)n(h)f(supp)r(orted)g(data)g(t)n(yp)r
-(e\).)0 2324 y Fd(Synopsis:)121 b Ft(void)42 b(astMapPut0)p
-Fl(<)p Ft(X)p Fl(>)p Ft(\()c(AstKeyMap)h Fi(\003)p Ft(this,)i(const)h
-(char)g Fi(\003)p Ft(key,)f Fl(<)p Ft(X)p Fl(>)p Ft(type)g(value,)g
-(const)227 2424 y(char)h Fi(\003)p Ft(comment)e(\);)0
-2577 y Fd(P)m(arameters:)259 2718 y(this)427 2817 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(KeyMap)e(in)i(whic)n(h)g(to)f(store)g(the)h(supplied)g(v)
--5 b(alue.)259 2952 y Fd(k)m(ey)427 3052 y Fj(A)27 b(c)n(haracter)e
-(string)h(to)h(b)r(e)g(stored)f(with)i(the)f(v)-5 b(alue,)27
-b(whic)n(h)g(can)f(later)g(b)r(e)i(used)e(to)h(iden)n(tify)g(the)h(v)-5
-b(alue.)427 3152 y(T)e(railing)27 b(spaces)f(are)h(ignored.)259
-3287 y Fd(v)-5 b(alue)427 3386 y Fj(The)29 b(v)-5 b(alue)28
-b(to)g(b)r(e)h(stored.)38 b(The)28 b(data)g(t)n(yp)r(e)h(of)f(this)h(v)
--5 b(alue)28 b(should)g(matc)n(h)g(the)h(1-c)n(haracter)c(t)n(yp)r(e)k
-(co)r(de)427 3486 y(app)r(ended)j(to)g(the)g(function)g(name)g(\(e.g.)
-49 b(if)32 b(y)n(ou)f(are)g(using)g(astMapPut0A,)g(the)h(t)n(yp)r(e)g
-(of)g(this)g(v)-5 b(alue)427 3586 y(should)28 b(b)r(e)g
-Ft(")p Fj(p)r(oin)n(ter)e(to)i(AstOb)5 b(ject)p Ft(")p
-Fj(\).)259 3720 y Fd(commen)m(t)427 3820 y Fj(A)27 b(p)r(oin)n(ter)e
-(to)h(a)f(n)n(ull-terminated)h(commen)n(t)g(string)f(to)h(b)r(e)g
-(stored)f(with)i(the)f(v)-5 b(alue.)36 b(A)27 b(NULL)f(p)r(oin)n(ter)
-427 3920 y(ma)n(y)h(b)r(e)h(supplied,)g(in)g(whic)n(h)g(case)e(no)i
-(commen)n(t)f(is)h(stored.)0 4086 y Fd(Notes:)340 4373
-y Fi(\017)45 b Fj(Key)27 b(names)g(are)g(case)g(sensitiv)n(e,)g(and)g
-(white)h(space)f(is)h(considered)e(signi\014can)n(t.)340
-4507 y Fi(\017)45 b Fj(If)27 b(the)f(supplied)h(k)n(ey)e(is)h(already)f
-(in)h(use)g(in)h(the)f(KeyMap,)g(the)g(new)h(v)-5 b(alue)26
-b(will)g(replace)f(the)i(old)f(v)-5 b(alue.)340 4642
-y Fi(\017)45 b Fj(If)36 b(the)g(stored)e(v)-5 b(alue)35
-b(is)g(an)g(AST)h(Ob)5 b(ject)35 b(p)r(oin)n(ter,)i(the)e(Ob)5
-b(ject's)35 b(reference)g(coun)n(t)g(is)g(incremen)n(ted)427
-4742 y(b)n(y)28 b(this)h(call.)39 b(An)n(y)29 b(subsequen)n(t)f(c)n
-(hanges)f(made)h(to)g(the)h(Ob)5 b(ject)29 b(using)f(the)g(returned)g
-(p)r(oin)n(ter)h(will)f(b)r(e)427 4842 y(re\015ected)h(in)h(an)n(y)e
-(an)n(y)h(other)g(activ)n(e)f(p)r(oin)n(ters)h(for)g(the)h(Ob)5
-b(ject,)29 b(including)h(an)n(y)e(obtained)h(later)g(using)427
-4941 y(astMapget0A.)f(The)i(reference)e(coun)n(t)h(for)f(the)i(Ob)5
-b(ject)29 b(will)g(b)r(e)h(decremen)n(ted)f(when)g(the)g(KeyMap)g(is)
-427 5041 y(destro)n(y)n(ed,)d(or)h(the)h(en)n(try)f(is)g(remo)n(v)n(ed)
-g(or)f(o)n(v)n(er-written)g(with)i(a)f(di\013eren)n(t)h(p)r(oin)n(ter.)
--2 5207 y Fd(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)227
-5353 y Fj(T)-7 b(o)18 b(select)h(the)f(appropriate)f(function,)k(y)n
-(ou)c(should)h(replace)g Fl(<)p Fj(X)p Fl(>)g Fj(in)g(the)h(generic)e
-(function)i(name)g(astMapPut0)p Fl(<)p Fj(X)p Fl(>)227
-5453 y Fj(with)35 b(a)f(1-c)n(haracter)e(data)h(t)n(yp)r(e)i(co)r(de,)h
-(so)e(as)f(to)i(matc)n(h)f(the)h(data)e(t)n(yp)r(e)i
-Fl(<)p Fj(X)p Fl(>)p Fj(t)n(yp)r(e)f(of)g(the)h(data)f(y)n(ou)g(are)227
-5552 y(pro)r(cessing,)26 b(as)h(follo)n(ws:)340 5693
-y Fi(\017)45 b Fj(D:)28 b(double)p eop end
-%%Page: 269 279
-TeXDict begin 269 278 bop 3643 52 a FF(269)340 351 y
-Fi(\017)45 b Fj(F:)28 b(\015oat)340 482 y Fi(\017)45
-b Fj(I:)28 b(in)n(t)340 613 y Fi(\017)45 b Fj(C:)28 b
-Ft(")p Fj(const)p Ft(")e Fj(p)r(oin)n(ter)i(to)f(n)n(ull)h(terminated)f
-(c)n(haracter)f(string)340 744 y Fi(\017)45 b Fj(A:)28
-b(P)n(oin)n(ter)e(to)i(AstOb)5 b(ject)340 875 y Fi(\017)45
-b Fj(P:)28 b(Generic)f Ft(")p Fj(v)n(oid)f Fi(\003)p
-Ft(")h Fj(p)r(oin)n(ter)227 1035 y(F)-7 b(or)24 b(example,)h
-(astMapPut0D)f(w)n(ould)g(b)r(e)g(used)h(to)f(store)g(a)g
-Ft(")p Fj(double)p Ft(")f Fj(v)-5 b(alue,)25 b(while)g(astMapPut0I)e(w)
-n(ould)h(b)r(e)227 1135 y(used)k(to)f(store)g(an)g Ft(")p
-Fj(in)n(t)p Ft(")p Fj(,)g(etc.)227 1259 y(Note)i(that)h(KeyMaps)e(con)n
-(taining)g(generic)g Ft(")p Fj(v)n(oid)g Fi(\003)p Ft(")g
-Fj(p)r(oin)n(ters)h(cannot)g(b)r(e)g(written)g(out)h(using)e(astSho)n
-(w)g(or)227 1358 y(astW)-7 b(rite.)37 b(An)28 b(error)e(will)h(b)r(e)h
-(rep)r(orted)f(if)h(this)g(is)g(attempted.)p 0 1554 3780
-12 v 0 1684 a Fz(astMapPut1)p Fc(<)p Fz(X)p Fc(>)1285
-1685 y Fe(Add)39 b(a)f(v)m(ector)g(v)-7 b(alue)38 b(to)g(a)1672
-1785 y(KeyMap)2771 1684 y Fz(astMapPut1)p Fc(<)p Fz(X)p
-Fc(>)0 1970 y Fd(Description:)44 b Fj(This)23 b(is)g(a)g(set)f(of)h
-(functions)h(for)e(adding)g(v)n(ector)g(v)-5 b(alues)22
-b(to)h(a)g(KeyMap.)34 b(Y)-7 b(ou)23 b(should)g(use)g(a)f(function)227
-2070 y(whic)n(h)j(matc)n(hes)g(the)h(data)f(t)n(yp)r(e)g(of)g(the)h
-(data)f(y)n(ou)f(wish)h(to)h(add)f(to)g(the)h(KeyMap)e(b)n(y)h
-(replacing)f Fl(<)p Fj(X)p Fl(>)h Fj(in)g(the)227 2170
-y(generic)30 b(function)h(name)g(astMapPut1)p Fl(<)p
-Fj(X)p Fl(>)e Fj(b)n(y)h(an)h(appropriate)e(1-c)n(haracter)f(t)n(yp)r
-(e)j(co)r(de)f(\(see)h(the)g Ft(")p Fj(Data)227 2269
-y(T)n(yp)r(e)d(Co)r(des)p Ft(")f Fj(section)g(b)r(elo)n(w)g(for)g(the)h
-(co)r(de)f(appropriate)f(to)i(eac)n(h)f(supp)r(orted)g(data)g(t)n(yp)r
-(e\).)0 2417 y Fd(Synopsis:)121 b Ft(void)42 b(astMapPut1)p
-Fl(<)p Ft(X)p Fl(>)p Ft(\()c(AstKeyMap)h Fi(\003)p Ft(this,)i(const)h
-(char)g Fi(\003)p Ft(key,)f(int)i(size,)e(const)h Fl(<)p
-Ft(X)p Fl(>)p Ft(type)227 2516 y(value[],)f(const)g(char)h
-Fi(\003)p Ft(comment)e(\);)0 2664 y Fd(P)m(arameters:)259
-2799 y(this)427 2898 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap)e(in)i
-(whic)n(h)g(to)f(store)g(the)h(supplied)g(v)-5 b(alues.)259
-3029 y Fd(k)m(ey)427 3129 y Fj(A)24 b(c)n(haracter)c(string)j(to)g(b)r
-(e)g(stored)f(with)h(the)h(v)-5 b(alues,)23 b(whic)n(h)g(can)g(later)f
-(b)r(e)h(used)g(to)g(iden)n(tify)h(the)f(v)-5 b(alues.)427
-3228 y(T)e(railing)27 b(spaces)f(are)h(ignored.)259 3359
-y Fd(size)427 3459 y Fj(The)h(n)n(um)n(b)r(er)f(of)h(elemen)n(ts)f(in)h
-(the)g(supplied)g(arra)n(y)d(of)j(v)-5 b(alues.)259 3590
-y Fd(v)g(alue)427 3690 y Fj(The)31 b(arra)n(y)c(of)k(v)-5
-b(alues)29 b(to)h(b)r(e)h(stored.)44 b(The)30 b(data)g(t)n(yp)r(e)g(of)
-g(this)h(v)-5 b(alue)30 b(should)g(matc)n(h)g(the)g(1-c)n(haracter)427
-3789 y(t)n(yp)r(e)i(co)r(de)g(app)r(ended)f(to)h(the)g(function)g(name)
-g(\(e.g.)48 b(if)32 b(y)n(ou)f(are)g(using)g(astMapPut1A,)g(the)h(t)n
-(yp)r(e)g(of)427 3889 y(this)c(v)-5 b(alue)28 b(should)f(b)r(e)h
-Ft(")p Fj(arra)n(y)d(of)i(p)r(oin)n(ters)g(to)h(AstOb)5
-b(ject)p Ft(")p Fj(\).)259 4020 y Fd(commen)m(t)427 4120
-y Fj(A)24 b(p)r(oin)n(ter)g(to)f(a)g(n)n(ull-terminated)h(commen)n(t)f
-(string)g(to)h(b)r(e)g(stored)f(with)h(the)g(v)-5 b(alues.)35
-b(A)24 b(NULL)g(p)r(oin)n(ter)427 4219 y(ma)n(y)j(b)r(e)h(supplied,)g
-(in)g(whic)n(h)g(case)e(no)i(commen)n(t)f(is)h(stored.)0
-4379 y Fd(Notes:)340 4660 y Fi(\017)45 b Fj(If)23 b(the)g(supplied)g(k)
-n(ey)f(is)g(already)f(in)i(use)f(in)h(the)g(KeyMap,)f(the)h(new)g(v)-5
-b(alues)22 b(will)g(replace)g(the)h(old)f(v)-5 b(alues.)340
-4791 y Fi(\017)45 b Fj(Key)27 b(names)g(are)g(case)g(sensitiv)n(e,)g
-(and)g(white)h(space)f(is)h(considered)e(signi\014can)n(t.)-2
-4951 y Fd(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)227 5097
-y Fj(T)-7 b(o)18 b(select)h(the)f(appropriate)f(function,)k(y)n(ou)c
-(should)h(replace)g Fl(<)p Fj(X)p Fl(>)g Fj(in)g(the)h(generic)e
-(function)i(name)g(astMapPut1)p Fl(<)p Fj(X)p Fl(>)227
-5197 y Fj(with)35 b(a)f(1-c)n(haracter)e(data)h(t)n(yp)r(e)i(co)r(de,)h
-(so)e(as)f(to)i(matc)n(h)f(the)h(data)e(t)n(yp)r(e)i
-Fl(<)p Fj(X)p Fl(>)p Fj(t)n(yp)r(e)f(of)g(the)h(data)f(y)n(ou)g(are)227
-5296 y(pro)r(cessing,)26 b(as)h(follo)n(ws:)340 5431
-y Fi(\017)45 b Fj(D:)28 b(double)340 5562 y Fi(\017)45
-b Fj(F:)28 b(\015oat)340 5693 y Fi(\017)45 b Fj(I:)28
-b(in)n(t)p eop end
-%%Page: 270 280
-TeXDict begin 270 279 bop 0 52 a FF(270)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(C:)28 b Ft(")p Fj(const)p Ft(")e Fj(p)r(oin)n(ter)i(to)f(n)n(ull)h
-(terminated)f(c)n(haracter)f(string)340 484 y Fi(\017)45
-b Fj(A:)28 b(P)n(oin)n(ter)e(to)i(AstOb)5 b(ject)340
-617 y Fi(\017)45 b Fj(P:)28 b(Generic)f Ft(")p Fj(v)n(oid)f
-Fi(\003)p Ft(")h Fj(p)r(oin)n(ter)227 779 y(F)-7 b(or)27
-b(example,)g(astMapPut1D)f(w)n(ould)h(b)r(e)g(used)g(to)g(store)f
-Ft(")p Fj(double)p Ft(")g Fj(v)-5 b(alues,)27 b(while)h(astMapPut1I)e
-(w)n(ould)g(b)r(e)227 879 y(used)i(to)f(store)g Ft(")p
-Fj(in)n(t)p Ft(")p Fj(,)g(etc.)227 1004 y(Note)i(that)h(KeyMaps)e(con)n
-(taining)g(generic)g Ft(")p Fj(v)n(oid)g Fi(\003)p Ft(")g
-Fj(p)r(oin)n(ters)h(cannot)g(b)r(e)g(written)g(out)h(using)e(astSho)n
-(w)g(or)227 1103 y(astW)-7 b(rite.)37 b(An)28 b(error)e(will)h(b)r(e)h
-(rep)r(orted)f(if)h(this)g(is)g(attempted.)p 0 1303 3780
-12 v 0 1435 a Fz(astMapRegion)249 b Fe(T)-10 b(ransform)36
-b(a)j(Region)e(in)m(to)h(a)g(new)1129 1548 y(F)-10 b(rame)39
-b(using)f(a)h(giv)m(en)e(Mapping)2933 1435 y Fz(astMapRegion)0
-1737 y Fd(Description:)44 b Fj(This)34 b(function)g(returns)f(a)g(p)r
-(oin)n(ter)g(to)h(a)f(new)h(Region)f(whic)n(h)g(corresp)r(onds)f(to)h
-(supplied)h(Region)227 1836 y(describ)r(ed)i(b)n(y)g(some)g(other)f(sp)
-r(eci\014ed)i(co)r(ordinate)e(system.)62 b(A)37 b(Mapping)e(is)h
-(supplied)h(whic)n(h)f(transforms)227 1936 y(p)r(ositions)30
-b(b)r(et)n(w)n(een)g(the)g(old)g(and)g(new)g(co)r(ordinate)e(systems.)
-44 b(The)30 b(new)g(Region)f(ma)n(y)h(not)g(b)r(e)g(of)g(the)g(same)227
-2036 y(class)d(as)g(the)h(original)e(region.)0 2185 y
-Fd(Synopsis:)121 b Ft(AstRegion)40 b Fi(\003)p Ft(astMapRegion\()d
-(AstRegion)j Fi(\003)p Ft(this,)h(AstMapping)f Fi(\003)p
-Ft(map,)h(AstFrame)f Fi(\003)p Ft(frame)i(\))0 2335 y
-Fd(P)m(arameters:)259 2472 y(this)427 2571 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Region.)259 2704 y Fd(map)427 2804 y Fj(P)n(oin)n(ter)d
-(to)i(a)f(Mapping)g(whic)n(h)h(transforms)e(p)r(ositions)h(from)h(the)g
-(co)r(ordinate)e(system)h(represen)n(ted)g(b)n(y)427
-2904 y(the)32 b(supplied)g(Region)f(to)g(the)h(co)r(ordinate)e(system)h
-(sp)r(eci\014ed)h(b)n(y)f Ft(")p Fj(frame)p Ft(")p Fj(.)47
-b(The)31 b(supplied)h(Mapping)427 3003 y(should)k(de\014ne)f(b)r(oth)h
-(forw)n(ard)e(and)i(in)n(v)n(erse)e(transformations,)h(and)h(these)f
-(transformations)f(should)427 3103 y(form)20 b(a)g(gen)n(uine)g(in)n(v)
-n(erse)f(pair.)33 b(That)21 b(is,)g(transforming)e(a)h(p)r(osition)g
-(using)g(the)h(forw)n(ard)d(transformation)427 3203 y(and)29
-b(then)g(using)f(the)h(in)n(v)n(erse)e(transformation)g(should)h(pro)r
-(duce)h(the)g(original)e(input)i(p)r(osition.)40 b(Some)427
-3302 y(Mapping)31 b(classes)e(\(suc)n(h)i(as)f(P)n(ermMap,)g(MathMap,)i
-(SphMap\))f(can)g(result)f(in)h(Mappings)f(for)h(whic)n(h)427
-3402 y(this)d(is)g(not)f(true.)259 3535 y Fd(frame)427
-3634 y Fj(P)n(oin)n(ter)f(to)i(a)f(F)-7 b(rame)27 b(describing)g(the)h
-(co)r(ordinate)e(system)h(in)h(whic)n(h)g(the)g(new)f(Region)g(is)h
-(required.)0 3797 y Fd(Returned)k(V)-8 b(alue:)259 3933
-y(astMapRegion\(\))427 4033 y Fj(A)26 b(p)r(oin)n(ter)e(to)h(a)f(new)h
-(Region.)36 b(This)24 b(Region)h(will)g(represen)n(t)e(the)j(area)d
-(within)j(the)f(co)r(ordinate)f(system)427 4133 y(sp)r(eci\014ed)k(b)n
-(y)f Ft(")p Fj(frame)p Ft(")g Fj(whic)n(h)g(corresp)r(onds)f(to)h(the)h
-(supplied)g(Region.)0 4295 y Fd(Notes:)340 4578 y Fi(\017)45
-b Fj(The)24 b(uncertain)n(t)n(y)f(asso)r(ciated)f(with)i(the)h
-(supplied)f(Region)f(is)g(mo)r(di\014ed)h(using)g(the)g(supplied)g
-(Mapping.)340 4710 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 4810 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 5010 V 0 5140 a Fz(astMapRemo)l(v)l
-(e)1079 5141 y Fe(Remo)m(v)m(ed)38 b(a)g(named)h(en)m(try)e(from)h(a)
-1672 5255 y(KeyMap)2875 5140 y Fz(astMapRemo)l(v)l(e)0
-5444 y Fd(Description:)44 b Fj(This)33 b(function)g(remo)n(v)n(es)e(a)h
-(named)h(en)n(try)f(from)g(a)h(KeyMap.)51 b(It)33 b(returns)f(without)h
-(action)f(if)h(the)227 5543 y(KeyMap)27 b(do)r(es)g(not)h(con)n(tain)f
-(the)h(sp)r(eci\014ed)g(k)n(ey)-7 b(.)0 5693 y Fd(Synopsis:)121
-b Ft(void)42 b(astMapRemove\()c(AstKeyMap)i Fi(\003)p
-Ft(this,)h(const)g(char)h Fi(\003)p Ft(key)g(\))p eop
-end
-%%Page: 271 281
-TeXDict begin 271 280 bop 3643 52 a FF(271)0 351 y Fd(P)m(arameters:)
-259 503 y(this)427 602 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)259
-743 y Fd(k)m(ey)427 842 y Fj(The)g(c)n(haracter)d(string)i(iden)n
-(tifying)h(the)g(v)-5 b(alue)28 b(to)f(b)r(e)h(retriev)n(ed.)36
-b(T)-7 b(railing)26 b(spaces)h(are)g(ignored.)p 0 1057
-3780 12 v 0 1188 a Fz(astMapSize)202 b Fe(Get)38 b(the)h(n)m(um)m(b)s
-(er)f(of)g(en)m(tries)g(in)g(a)h(KeyMap)201 b Fz(astMapSize)0
-1392 y Fd(Description:)44 b Fj(This)28 b(function)g(returns)f(the)h(n)n
-(um)n(b)r(er)f(of)h(en)n(tries)f(in)h(a)f(KeyMap.)0 1556
-y Fd(Synopsis:)121 b Ft(int)42 b(astMapSize\()d(AstKeyMap)h
-Fi(\003)p Ft(this)i(\))0 1721 y Fd(P)m(arameters:)259
-1872 y(this)427 1972 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)0
-2149 y Fd(Returned)k(V)-8 b(alue:)259 2300 y(astMapSize\(\))427
-2400 y Fj(The)28 b(n)n(um)n(b)r(er)f(of)h(en)n(tries)f(in)h(the)g
-(KeyMap.)0 2577 y Fd(Notes:)340 2874 y Fi(\017)45 b Fj(A)29
-b(function)g(v)-5 b(alue)28 b(of)g(zero)f(will)h(b)r(e)h(returned)e(if)
-i(an)f(error)e(has)i(already)e(o)r(ccurred,)i(or)f(if)i(this)f
-(function)427 2974 y(should)g(fail)f(for)g(an)n(y)g(reason.)p
-0 3188 V 0 3320 a Fz(astMapSplit)350 b Fe(Split)38 b(a)g(Mapping)g(up)h
-(in)m(to)e(parallel)1342 3433 y(comp)s(onen)m(t)g(Mappings)3065
-3320 y Fz(astMapSplit)0 3637 y Fd(Description:)44 b Fj(This)33
-b(function)f(creates)f(a)h(new)g(Mapping)g(whic)n(h)h(connects)e(sp)r
-(eci\014ed)i(inputs)g(within)f(a)g(supplied)227 3737
-y(Mapping)19 b(to)g(the)h(corresp)r(onding)d(outputs)j(of)f(the)h
-(supplied)g(Mapping.)33 b(This)20 b(is)f(only)g(p)r(ossible)g(if)h(the)
-f(sp)r(eci\014ed)227 3836 y(inputs)32 b(corresp)r(ond)e(to)h(some)g
-(subset)g(of)h(the)f(Mapping)g(outputs.)49 b(That)31
-b(is,)h(there)g(m)n(ust)f(exist)g(a)g(subset)h(of)227
-3936 y(the)25 b(Mapping)f(outputs)h(for)f(whic)n(h)h(eac)n(h)e(output)j
-(dep)r(ends)f(only)f(on)g(the)h(selected)f(Mapping)g(inputs,)i(and)f
-(not)227 4035 y(on)32 b(an)n(y)e(of)i(the)g(inputs)g(whic)n(h)f(ha)n(v)
-n(e)g(not)g(b)r(een)h(selected.)49 b(Also,)32 b(an)n(y)f(output)h(whic)
-n(h)g(is)f(not)h(in)g(this)g(subset)227 4135 y(m)n(ust)h(not)g(dep)r
-(end)h(on)f(an)n(y)f(of)h(the)g(selected)g(inputs.)53
-b(If)34 b(these)f(conditions)f(are)g(not)h(met)g(b)n(y)g(the)g
-(supplied)227 4235 y(Mapping,)28 b(then)g(a)f(NULL)h(Mapping)f(p)r(oin)
-n(ter)g(is)h(returned.)0 4399 y Fd(Synopsis:)121 b Ft(void)42
-b(astMapSplit\()c(AstMapping)i Fi(\003)p Ft(this,)h(int)h(nin,)g(const)
-g(int)g Fi(\003)p Ft(in,)g(int)g Fi(\003)p Ft(out,)g(AstMapping)227
-4499 y Fi(\003\003)p Ft(map)g(\))0 4663 y Fd(P)m(arameters:)259
-4815 y(this)427 4914 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Mapping)f(to)g
-(b)r(e)h(split.)259 5055 y Fd(nin)427 5154 y Fj(The)g(n)n(um)n(b)r(er)f
-(of)h(inputs)g(to)f(pic)n(k)h(from)f Ft(")p Fj(this)p
-Ft(")p Fj(.)259 5295 y Fd(in)427 5394 y Fj(P)n(oin)n(ter)20
-b(to)h(an)g(arra)n(y)d(holding)j(the)h(indices)f(within)h(the)f
-(supplied)h(Mapping)e(of)h(the)h(inputs)g(whic)n(h)f(are)f(to)427
-5494 y(b)r(e)26 b(pic)n(k)n(ed)f(from)g(the)h(Mapping.)35
-b(This)26 b(arra)n(y)d(should)i(ha)n(v)n(e)f Ft(")p Fj(nin)p
-Ft(")h Fj(elemen)n(ts.)36 b(If)26 b Ft(")p Fj(Nin)p Ft(")f
-Fj(is)g(the)h(n)n(um)n(b)r(er)427 5593 y(of)k(inputs)g(of)g(the)g
-(supplied)g(Mapping,)g(then)g(eac)n(h)f(elemen)n(t)h(should)g(ha)n(v)n
-(e)e(a)h(v)-5 b(alue)30 b(in)g(the)g(range)e(1)i(to)427
-5693 y(Nin.)p eop end
-%%Page: 272 282
-TeXDict begin 272 281 bop 0 52 a FF(272)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(out)427
-451 y Fj(P)n(oin)n(ter)i(to)h(an)g(arra)n(y)e(in)j(whic)n(h)f(to)g
-(return)g(the)h(indices)f(of)h(the)g(outputs)f(of)h(the)f(supplied)h
-(Mapping)427 551 y(whic)n(h)j(are)f(fed)h(b)n(y)g(the)g(pic)n(k)n(ed)f
-(inputs.)66 b(A)37 b(v)-5 b(alue)37 b(of)f(one)h(is)g(used)f(to)h
-(refer)f(to)h(the)g(\014rst)g(Mapping)427 650 y(output.)59
-b(The)35 b(supplied)g(arra)n(y)d(should)j(ha)n(v)n(e)e(a)i(length)f(at)
-h(least)f(equal)g(to)h(the)g(n)n(um)n(b)r(er)g(of)f(outputs)427
-750 y(in)g(the)h(supplied)f(Mapping.)55 b(The)34 b(n)n(um)n(b)r(er)f
-(of)h(v)-5 b(alues)34 b(stored)f(in)h(the)g(arra)n(y)d(on)j(exit)g
-(will)g(equal)f(the)427 849 y(n)n(um)n(b)r(er)g(of)f(outputs)h(in)g
-(the)g(returned)f(Mapping.)51 b(The)33 b(i'th)g(elemen)n(t)g(in)g(the)g
-(returned)f(arra)n(y)e(holds)427 949 y(the)e(index)g(within)g(the)g
-(supplied)g(Mapping)f(whic)n(h)g(corresp)r(onds)f(to)i(the)f(i'th)i
-(output)f(of)f(the)h(returned)427 1049 y(Mapping.)259
-1180 y Fd(map)427 1280 y Fj(Address)h(of)h(a)f(lo)r(cation)g(at)g(whic)
-n(h)h(to)f(return)g(a)g(p)r(oin)n(ter)h(to)f(the)h(returned)f(Mapping.)
-42 b(This)30 b(Mapping)427 1380 y(will)c(ha)n(v)n(e)f
-Ft(")p Fj(nin)p Ft(")h Fj(inputs)g(\(the)h(n)n(um)n(b)r(er)f(of)g
-(outputs)g(ma)n(y)f(b)r(e)i(di\013eren)n(t)f(to)g Ft(")p
-Fj(nin)p Ft(")p Fj(\).)36 b(NULL)26 b(is)g(returned)427
-1479 y(if)h(the)f(supplied)h(Mapping)f(has)f(no)h(subset)g(of)g
-(outputs)h(whic)n(h)f(dep)r(end)h(only)e(on)h(the)h(selected)f(inputs.)
-0 1640 y Fd(Notes:)340 1922 y Fi(\017)45 b Fj(If)29 b(this)g(function)g
-(is)f(in)n(v)n(ok)n(ed)f(with)i(the)g(global)e(error)g(status)h(set,)h
-(or)e(if)i(it)g(should)f(fail)h(for)f(an)n(y)f(reason,)427
-2021 y(then)h(a)g(NULL)g(v)-5 b(alue)27 b(will)h(b)r(e)g(returned)f
-(for)g(the)h Ft(")p Fj(map)p Ft(")f Fj(p)r(oin)n(ter.)p
-0 2218 3780 12 v 0 2349 a Fz(astMapT)l(yp)t(e)1011 2350
-y Fe(Get)39 b(the)f(data)g(t)m(yp)s(e)g(of)h(an)f(en)m(try)g(in)h(a)
-1672 2463 y(KeyMap)3041 2349 y Fz(astMapT)l(yp)t(e)0
-2650 y Fd(Description:)44 b Fj(This)34 b(function)g(returns)f(a)g(v)-5
-b(alue)33 b(indicating)h(the)g(data)f(t)n(yp)r(e)g(of)h(a)f(named)h(en)
-n(try)f(in)g(a)g(KeyMap.)227 2749 y(This)28 b(is)f(the)h(data)f(t)n(yp)
-r(e)h(whic)n(h)g(w)n(as)e(used)i(when)g(the)g(en)n(try)f(w)n(as)f
-(added)i(to)f(the)h(KeyMap.)0 2898 y Fd(Synopsis:)121
-b Ft(int)42 b(astMapType\()d(AstKeyMap)h Fi(\003)p Ft(this,)h(const)h
-(char)g Fi(\003)p Ft(key)f(\))0 3046 y Fd(P)m(arameters:)259
-3181 y(this)427 3281 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)259
-3413 y Fd(k)m(ey)427 3512 y Fj(The)g(c)n(haracter)d(string)i(iden)n
-(tifying)h(the)g(KeyMap)f(en)n(try)-7 b(.)36 b(T)-7 b(railing)27
-b(spaces)f(are)h(ignored.)0 3673 y Fd(Returned)32 b(V)-8
-b(alue:)259 3809 y(astMapT)m(yp)s(e\(\))427 3908 y Fj(One)28
-b(of)f(AST)p Ft(__)p Fj(INTTYPE)g(\(for)g(in)n(teger\),)h(AST)p
-Ft(__)p Fj(DOUBLETYPE)e(\(for)h(double)h(precision)e(\015oating)427
-4008 y(p)r(oin)n(t\),)i(AST)p Ft(__)p Fj(FLO)n(A)-7 b(TTYPE)25
-b(\(for)i(single)f(precision)g(\015oating)g(p)r(oin)n(t\),)i(AST)p
-Ft(__)p Fj(STRINGTYPE)e(\(for)427 4107 y(c)n(haracter)i(string\))h(or)f
-(AST)p Ft(__)p Fj(OBJECTTYPE)f(\(for)i(AST)h(Ob)5 b(ject)29
-b(p)r(oin)n(ter\).)42 b(AST)p Ft(__)p Fj(BADTYPE)29 b(is)427
-4207 y(returned)e(if)i(the)f(supplied)f(k)n(ey)g(is)h(not)f(found)h(in)
-g(the)g(KeyMap.)0 4368 y Fd(Notes:)340 4649 y Fi(\017)45
-b Fj(A)26 b(function)g(v)-5 b(alue)26 b(of)f(AST)p Ft(__)p
-Fj(BADTYPE)g(will)h(b)r(e)g(returned)f(if)h(an)f(error)f(has)h(already)
-f(o)r(ccurred,)g(or)h(if)427 4749 y(this)j(function)g(should)g(fail)f
-(for)g(an)n(y)g(reason.)p 0 4946 V 0 5078 a Fz(astMark)569
-b Fe(Dra)m(w)38 b(a)h(set)f(of)h(mark)m(ers)e(for)g(a)i(Plot)567
-b Fz(astMark)0 5246 y Fd(Description:)44 b Fj(This)d(function)g(dra)n
-(ws)e(a)h(set)h(of)f(mark)n(ers)f(\(sym)n(b)r(ols\))h(at)h(p)r
-(ositions)f(sp)r(eci\014ed)h(in)g(the)f(ph)n(ysical)227
-5345 y(co)r(ordinate)22 b(system)g(of)g(a)h(Plot.)34
-b(The)23 b(p)r(ositions)f(are)f(transformed)h(in)n(to)g(graphical)f(co)
-r(ordinates)g(to)i(determine)227 5445 y(where)k(the)h(mark)n(ers)e
-(should)h(app)r(ear)g(within)h(the)g(plotting)g(area.)0
-5593 y Fd(Synopsis:)121 b Ft(void)42 b(astMark\()e(AstPlot)h
-Fi(\003)p Ft(this,)g(int)h(nmark,)f(int)i(ncoord,)d(int)j(indim,)e
-(const)g(double)g Fi(\003)p Ft(in,)227 5693 y(int)i(type)f(\))p
-eop end
-%%Page: 273 283
-TeXDict begin 273 282 bop 3643 52 a FF(273)0 351 y Fd(P)m(arameters:)
-259 506 y(this)427 605 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259
-747 y Fd(nmark)427 847 y Fj(The)g(n)n(um)n(b)r(er)f(of)h(mark)n(ers)d
-(to)j(dra)n(w.)36 b(This)27 b(ma)n(y)g(b)r(e)h(zero,)f(in)g(whic)n(h)h
-(case)f(nothing)g(will)h(b)r(e)g(dra)n(wn.)259 988 y
-Fd(nco)s(ord)427 1088 y Fj(The)37 b(n)n(um)n(b)r(er)f(of)h(co)r
-(ordinates)e(b)r(eing)i(supplied)g(for)f(eac)n(h)g(mark)f(\(i.e.)65
-b(the)37 b(n)n(um)n(b)r(er)f(of)h(axes)e(in)i(the)427
-1188 y(curren)n(t)27 b(F)-7 b(rame)27 b(of)h(the)g(Plot,)f(as)g(giv)n
-(en)f(b)n(y)i(its)f(Naxes)g(attribute\).)259 1329 y Fd(indim)427
-1429 y Fj(The)33 b(n)n(um)n(b)r(er)f(of)h(elemen)n(ts)g(along)e(the)i
-(second)f(dimension)h(of)f(the)h Ft(")p Fj(in)p Ft(")f
-Fj(arra)n(y)f(\(whic)n(h)i(con)n(tains)e(the)427 1529
-y(mark)n(er)h(co)r(ordinates\).)54 b(This)33 b(v)-5 b(alue)34
-b(is)f(required)g(so)g(that)g(the)h(co)r(ordinate)f(v)-5
-b(alues)33 b(can)g(b)r(e)h(correctly)427 1628 y(lo)r(cated)21
-b(if)h(they)g(do)f(not)g(en)n(tirely)g(\014ll)g(this)h(arra)n(y)-7
-b(.)33 b(The)21 b(v)-5 b(alue)21 b(giv)n(en)g(should)g(not)g(b)r(e)h
-(less)f(than)g Ft(")p Fj(nmark)p Ft(")p Fj(.)259 1770
-y Fd(in)427 1870 y Fj(The)32 b(address)f(of)g(the)h(\014rst)g(elemen)n
-(t)g(of)f(a)h(2-dimensional)e(arra)n(y)f(of)j(shap)r(e)g
-Ft(")p Fj([nco)r(ord][indim])p Ft(")e Fj(giving)427 1969
-y(the)24 b(ph)n(ysical)d(co)r(ordinates)h(of)h(the)g(p)r(oin)n(ts)g
-(where)f(mark)n(ers)f(are)h(to)g(b)r(e)i(dra)n(wn.)34
-b(These)23 b(should)f(b)r(e)h(stored)427 2069 y(suc)n(h)31
-b(that)h(the)f(v)-5 b(alue)31 b(of)g(co)r(ordinate)f(n)n(um)n(b)r(er)h
-Ft(")p Fj(co)r(ord)p Ft(")f Fj(for)g(input)i(mark)f(n)n(um)n(b)r(er)g
-Ft(")p Fj(mark)p Ft(")e Fj(is)i(found)427 2168 y(in)d(elemen)n(t)g
-Ft(")p Fj(in[co)r(ord][mark])p Ft(")p Fj(.)259 2310 y
-Fd(t)m(yp)s(e)427 2410 y Fj(A)e(v)-5 b(alue)25 b(sp)r(ecifying)h(the)g
-(t)n(yp)r(e)f(\(e.g.)36 b(shap)r(e\))26 b(of)f(mark)n(er)f(to)h(b)r(e)h
-(dra)n(wn.)35 b(The)26 b(set)f(of)h(v)-5 b(alues)25 b(whic)n(h)g(ma)n
-(y)427 2509 y(b)r(e)j(used)g(\(and)g(the)g(shap)r(es)f(that)h(will)f
-(result\))h(is)f(determined)h(b)n(y)g(the)g(underlying)f(graphics)f
-(system.)0 2689 y Fd(Notes:)340 2990 y Fi(\017)45 b Fj(Mark)n(ers)21
-b(are)g(not)i(dra)n(wn)f(at)g(p)r(ositions)g(whic)n(h)h(ha)n(v)n(e)e
-(an)n(y)h(co)r(ordinate)f(equal)i(to)f(the)h(v)-5 b(alue)23
-b(AST)p Ft(__)p Fj(BAD)427 3089 y(\(or)38 b(where)g(the)g
-(transformation)f(in)n(to)h(graphical)e(co)r(ordinates)h(yields)h(co)r
-(ordinates)f(con)n(taining)g(the)427 3189 y(v)-5 b(alue)28
-b(AST)p Ft(__)p Fj(BAD\).)340 3331 y Fi(\017)45 b Fj(If)28
-b(an)n(y)f(mark)n(er)f(p)r(osition)h(is)h(clipp)r(ed)g(\(see)g
-(astClip\),)f(then)h(the)g(en)n(tire)g(mark)n(er)d(is)j(not)g(dra)n
-(wn.)340 3472 y Fi(\017)45 b Fj(An)28 b(error)e(results)h(if)h(the)g
-(base)f(F)-7 b(rame)27 b(of)h(the)g(Plot)f(is)g(not)h(2-dimensional.)
-340 3614 y Fi(\017)45 b Fj(An)30 b(error)d(also)g(results)i(if)g(the)g
-(transformation)f(b)r(et)n(w)n(een)h(the)g(curren)n(t)f(and)h(base)f(F)
--7 b(rames)28 b(of)h(the)g(Plot)427 3714 y(is)f(not)f(de\014ned)h
-(\(i.e.)38 b(the)28 b(Plot's)e(T)-7 b(ranIn)n(v)n(erse)26
-b(attribute)h(is)h(zero\).)p 0 3931 3780 12 v 0 4062
-a Fz(astMask)p Fc(<)p Fz(X)p Fc(>)388 b Fe(Mask)39 b(a)g(region)e(of)h
-(a)h(data)e(grid)387 b Fz(astMask)p Fc(<)p Fz(X)p Fc(>)0
-4274 y Fd(Description:)44 b Fj(This)34 b(is)f(a)g(set)g(of)g(functions)
-h(for)e(masking)h(out)g(regions)f(within)i(gridded)e(data)h(\(e.g.)54
-b(an)33 b(image\).)227 4373 y(The)g(functions)h(mo)r(di\014es)f(a)f
-(giv)n(en)h(data)f(grid)h(b)n(y)f(assigning)g(a)g(sp)r(eci\014ed)i(v)-5
-b(alue)33 b(to)f(all)h(samples)g(whic)n(h)g(are)227 4473
-y(inside)28 b(\(or)f(outside)g(if)h Ft(")p Fj(inside)p
-Ft(")f Fj(is)h(zero\))f(the)h(sp)r(eci\014ed)f(Region.)227
-4606 y(Y)-7 b(ou)21 b(should)g(use)f(a)h(masking)f(function)h(whic)n(h)
-g(matc)n(hes)f(the)h(n)n(umerical)f(t)n(yp)r(e)h(of)g(the)g(data)f(y)n
-(ou)g(are)g(pro)r(cessing)227 4706 y(b)n(y)27 b(replacing)f
-Fl(<)p Fj(X)p Fl(>)h Fj(in)g(the)h(generic)e(function)h(name)g(astMask)
-p Fl(<)p Fj(X)p Fl(>)f Fj(b)n(y)h(an)f(appropriate)g(1-)g(or)g(2-c)n
-(haracter)227 4806 y(t)n(yp)r(e)32 b(co)r(de.)50 b(F)-7
-b(or)31 b(example,)i(if)f(y)n(ou)f(are)g(masking)g(data)g(with)i(t)n
-(yp)r(e)f Ft(")p Fj(\015oat)p Ft(")p Fj(,)f(y)n(ou)g(should)h(use)g
-(the)g(function)227 4905 y(astMaskF)25 b(\(see)h(the)h
-Ft(")p Fj(Data)e(T)n(yp)r(e)h(Co)r(des)p Ft(")g Fj(section)f(b)r(elo)n
-(w)h(for)g(the)g(co)r(des)g(appropriate)e(to)i(other)f(n)n(umerical)227
-5005 y(t)n(yp)r(es\).)0 5172 y Fd(Synopsis:)121 b Ft(int)42
-b(astMask)p Fl(<)p Ft(X)p Fl(>)p Ft(\()d(AstRegion)h
-Fi(\003)p Ft(this,)h(AstMapping)f Fi(\003)p Ft(map,)h(int)h(inside,)f
-(int)h(ndim,)g(const)227 5272 y(int)h(lbnd[],)d(const)i(int)g(ubnd[],)f
-Fl(<)p Ft(Xtype)p Fl(>)g Ft(in[],)g Fl(<)p Ft(Xtype)p
-Fl(>)g Ft(val)h(\))0 5439 y Fd(P)m(arameters:)259 5593
-y(this)427 5693 y Fj(P)n(oin)n(ter)26 b(to)i(a)f(Region.)p
-eop end
-%%Page: 274 284
-TeXDict begin 274 283 bop 0 52 a FF(274)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(map)427
-451 y Fj(P)n(oin)n(ter)g(to)h(a)g(Mapping.)47 b(The)31
-b(forw)n(ard)f(transformation)f(should)i(map)g(p)r(ositions)g(in)g(the)
-h(co)r(ordinate)427 551 y(system)g(of)h(the)g(supplied)f(Region)g(in)n
-(to)g(pixel)h(co)r(ordinates)e(as)h(de\014ned)g(b)n(y)h(the)f
-Ft(")p Fj(lbnd)p Ft(")h Fj(and)f Ft(")p Fj(ubnd)p Ft(")427
-650 y Fj(parameters.)i(A)24 b(NULL)g(p)r(oin)n(ter)f(can)g(b)r(e)h
-(supplied)g(if)g(the)g(co)r(ordinate)f(system)g(of)g(the)h(supplied)g
-(Region)427 750 y(corresp)r(onds)i(to)h(pixel)h(co)r(ordinates.)36
-b(This)27 b(is)h(equiv)-5 b(alen)n(t)27 b(to)g(supplying)h(a)f
-(UnitMap.)427 869 y(The)37 b(n)n(um)n(b)r(er)g(of)g(inputs)g(for)f
-(this)i(Mapping)e(\(as)h(giv)n(en)f(b)n(y)g(its)h(Nin)h(attribute\))f
-(should)g(matc)n(h)f(the)427 968 y(n)n(um)n(b)r(er)28
-b(of)f(axes)g(in)g(the)h(supplied)g(Region)f(\(as)g(giv)n(en)g(b)n(y)g
-(the)h(Naxes)f(attribute)h(of)f(the)h(Region\).)37 b(The)427
-1068 y(n)n(um)n(b)r(er)23 b(of)f(outputs)h(for)f(the)h(Mapping)f(\(as)g
-(giv)n(en)g(b)n(y)h(its)f(Nout)h(attribute\))g(should)g(matc)n(h)f(the)
-h(n)n(um)n(b)r(er)427 1167 y(of)28 b(grid)f(dimensions)g(giv)n(en)g(b)n
-(y)g(the)h(v)-5 b(alue)28 b(of)f Ft(")p Fj(ndim)p Ft(")g
-Fj(b)r(elo)n(w.)259 1305 y Fd(inside)427 1405 y Fj(A)c(b)r(o)r(olean)f
-(v)-5 b(alue)23 b(whic)n(h)g(indicates)f(whic)n(h)h(pixel)g(are)e(to)i
-(b)r(e)g(mask)n(ed.)34 b(If)24 b(a)e(non-zero)f(v)-5
-b(alue)23 b(is)f(supplied,)427 1504 y(then)32 b(all)g(grid)f(pixels)g
-(with)i(cen)n(tres)d(inside)i(the)g(supplied)g(Region)f(are)g(assigned)
-f(the)i(v)-5 b(alue)32 b(giv)n(en)f(b)n(y)427 1604 y
-Ft(")p Fj(v)-5 b(al)p Ft(")p Fj(,)33 b(and)f(all)h(other)f(pixels)g
-(are)g(left)h(unc)n(hanged.)51 b(If)33 b(zero)e(is)h(supplied,)j(then)e
-(all)f(grid)g(pixels)g(with)427 1704 y(cen)n(tres)g(not)h(inside)f(the)
-h(supplied)g(Region)f(are)g(assigned)f(the)i(v)-5 b(alue)32
-b(giv)n(en)g(b)n(y)h Ft(")p Fj(v)-5 b(al)p Ft(")p Fj(,)32
-b(and)h(all)f(other)427 1803 y(pixels)i(are)e(left)j(unc)n(hanged.)54
-b(Note,)35 b(the)f(Negated)f(attribute)h(of)f(the)h(Region)f(is)h(used)
-f(to)h(determine)427 1903 y(whic)n(h)26 b(pixel)g(are)e(inside)i(the)g
-(Region)f(and)h(whic)n(h)f(are)g(outside.)36 b(So)26
-b(the)g(inside)g(of)f(a)g(Region)h(whic)n(h)f(has)427
-2003 y(not)j(b)r(een)g(negated)f(is)g(the)h(same)f(as)g(the)h(outside)g
-(of)f(the)h(corresp)r(onding)e(negated)h(Region.)427
-2121 y(F)-7 b(or)31 b(t)n(yp)r(es)g(of)h(Region)e(suc)n(h)h(as)g(P)n
-(oin)n(tList)g(whic)n(h)g(ha)n(v)n(e)f(zero)g(v)n(olume,)i(pixel)g(cen)
-n(tres)e(will)i(rarely)e(fall)427 2221 y(exactly)25 b(within)h(the)g
-(Region.)36 b(F)-7 b(or)25 b(this)h(reason,)e(the)i(inclusion)f
-(criterion)g(is)g(c)n(hanged)g(for)g(zero-v)n(olume)427
-2321 y(Regions)32 b(so)h(that)g(pixels)g(are)f(included)h(\(or)f
-(excluded\))i(if)f(an)n(y)f(part)h(of)g(the)g(Region)g(passes)e
-(through)427 2420 y(the)f(pixel.)43 b(F)-7 b(or)29 b(a)g(P)n(oin)n
-(tList,)g(this)h(means)g(that)f(pixels)h(are)e(included)i(\(or)f
-(excluded\))h(if)h(they)e(con)n(tain)427 2520 y(at)f(least)f(one)g(of)h
-(the)g(p)r(oin)n(ts)f(listed)h(in)g(the)g(P)n(oin)n(tList.)259
-2658 y Fd(ndim)427 2757 y Fj(The)g(n)n(um)n(b)r(er)f(of)h(dimensions)f
-(in)h(the)g(input)g(grid.)36 b(This)28 b(should)f(b)r(e)h(at)g(least)f
-(one.)259 2895 y Fd(lbnd)427 2995 y Fj(P)n(oin)n(ter)19
-b(to)i(an)f(arra)n(y)f(of)h(in)n(tegers,)h(with)g Ft(")p
-Fj(ndim)p Ft(")g Fj(elemen)n(ts,)h(con)n(taining)d(the)i(co)r
-(ordinates)f(of)g(the)h(cen)n(tre)427 3094 y(of)28 b(the)g(\014rst)f
-(pixel)h(in)g(the)g(input)g(grid)f(along)f(eac)n(h)h(dimension.)259
-3232 y Fd(ubnd)427 3332 y Fj(P)n(oin)n(ter)19 b(to)i(an)f(arra)n(y)f
-(of)h(in)n(tegers,)h(with)g Ft(")p Fj(ndim)p Ft(")g Fj(elemen)n(ts,)h
-(con)n(taining)d(the)i(co)r(ordinates)f(of)g(the)h(cen)n(tre)427
-3432 y(of)28 b(the)g(last)f(pixel)h(in)g(the)g(input)g(grid)f(along)f
-(eac)n(h)h(dimension.)427 3550 y(Note)f(that)h Ft(")p
-Fj(lbnd)p Ft(")f Fj(and)g Ft(")p Fj(ubnd)p Ft(")g Fj(together)f
-(de\014ne)h(the)h(shap)r(e)f(and)g(size)g(of)g(the)g(input)h(grid,)f
-(its)h(exten)n(t)427 3650 y(along)36 b(a)g(particular)f(\(j'th\))j
-(dimension)e(b)r(eing)g(ubnd[j]-lbnd[j]+1)i(\(assuming)d(the)i(index)g
-Ft(")p Fj(j)p Ft(")f Fj(to)g(b)r(e)427 3749 y(zero-based\).)69
-b(They)39 b(also)e(de\014ne)j(the)f(input)g(grid's)f(co)r(ordinate)g
-(system,)j(eac)n(h)d(pixel)h(ha)n(ving)f(unit)427 3849
-y(exten)n(t)28 b(along)e(eac)n(h)h(dimension)h(with)g(in)n(tegral)e(co)
-r(ordinate)h(v)-5 b(alues)27 b(at)g(its)h(cen)n(tre.)259
-3987 y Fd(in)427 4087 y Fj(P)n(oin)n(ter)j(to)i(an)f(arra)n(y)-7
-b(,)32 b(with)h(one)g(elemen)n(t)g(for)f(eac)n(h)g(pixel)g(in)h(the)g
-(input)h(grid,)f(con)n(taining)f(the)h(data)427 4186
-y(to)k(b)r(e)f(mask)n(ed.)63 b(The)37 b(n)n(umerical)e(t)n(yp)r(e)i(of)
-f(this)h(arra)n(y)d(should)i(matc)n(h)h(the)g(1-)e(or)h(2-c)n(haracter)
-d(t)n(yp)r(e)427 4286 y(co)r(de)28 b(app)r(ended)g(to)g(the)g(function)
-h(name)e(\(e.g.)38 b(if)28 b(y)n(ou)f(are)g(using)h(astMaskF,)f(the)h
-(t)n(yp)r(e)g(of)g(eac)n(h)f(arra)n(y)427 4385 y(elemen)n(t)h(should)f
-(b)r(e)h Ft(")p Fj(\015oat)p Ft(")p Fj(\).)427 4504 y(The)33
-b(storage)f(order)f(of)j(data)e(within)i(this)g(arra)n(y)c(should)j(b)r
-(e)h(suc)n(h)f(that)g(the)h(index)f(of)g(the)g(\014rst)g(grid)427
-4604 y(dimension)23 b(v)-5 b(aries)22 b(most)h(rapidly)f(and)h(that)g
-(of)g(the)h(\014nal)f(dimension)g(least)f(rapidly)g(\(i.e.)36
-b(F)-7 b(ortran)22 b(arra)n(y)427 4703 y(indexing)28
-b(is)f(used\).)427 4822 y(On)e(exit,)g(the)h(samples)e(sp)r(eci\014ed)h
-(b)n(y)f Ft(")p Fj(inside)p Ft(")g Fj(are)g(set)h(to)f(the)i(v)-5
-b(alue)24 b(of)h Ft(")p Fj(v)-5 b(al)p Ft(")p Fj(.)35
-b(All)25 b(other)f(samples)h(are)427 4922 y(left)k(unc)n(hanged.)259
-5060 y Fd(v)-5 b(al)427 5159 y Fj(This)29 b(argumen)n(t)f(should)h(ha)n
-(v)n(e)e(the)j(same)e(t)n(yp)r(e)h(as)f(the)i(elemen)n(ts)e(of)h(the)g
-Ft(")p Fj(in)p Ft(")g Fj(arra)n(y)-7 b(.)38 b(It)29 b(sp)r(eci\014es)g
-(the)427 5259 y(v)-5 b(alue)28 b(used)f(to)h(\015ag)f(the)h(mask)n(ed)e
-(data)h(\(see)h Ft(")p Fj(inside)p Ft(")p Fj(\).)0 5431
-y Fd(Returned)k(V)-8 b(alue:)259 5577 y(astMask)p Fl(<)p
-Fd(X)p Fl(>)p Fd(\(\))427 5677 y Fj(The)28 b(n)n(um)n(b)r(er)f(of)h
-(pixels)f(to)h(whic)n(h)f(a)g(v)-5 b(alue)28 b(of)f Ft(")p
-Fj(badv)-5 b(al)p Ft(")27 b Fj(has)g(b)r(een)h(assigned.)p
-eop end
-%%Page: 275 285
-TeXDict begin 275 284 bop 3643 52 a FF(275)0 351 y Fd(Notes:)340
-631 y Fi(\017)45 b Fj(A)27 b(v)-5 b(alue)25 b(of)h(zero)f(will)h(b)r(e)
-g(returned)g(if)g(this)g(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(the)
-f(global)f(error)f(status)h(set,)h(or)427 731 y(if)i(it)g(should)g
-(fail)f(for)h(an)n(y)e(reason.)-2 890 y Fd(Data)33 b(T)m(yp)s(e)g(Co)s
-(des)n(:)227 1036 y Fj(T)-7 b(o)26 b(select)g(the)g(appropriate)e
-(masking)h(function,)i(y)n(ou)e(should)h(replace)f Fl(<)p
-Fj(X)p Fl(>)h Fj(in)g(the)g(generic)f(function)i(name)227
-1136 y(astMask)p Fl(<)p Fj(X)p Fl(>)22 b Fj(with)i(a)f(1-)g(or)g(2-c)n
-(haracter)d(data)j(t)n(yp)r(e)h(co)r(de,)g(so)f(as)g(to)g(matc)n(h)h
-(the)g(n)n(umerical)e(t)n(yp)r(e)i Fl(<)p Fj(Xt)n(yp)r(e)p
-Fl(>)227 1236 y Fj(of)k(the)g(data)f(y)n(ou)g(are)f(pro)r(cessing,)h
-(as)f(follo)n(ws:)340 1369 y Fi(\017)45 b Fj(D:)28 b(double)340
-1500 y Fi(\017)45 b Fj(F:)28 b(\015oat)340 1630 y Fi(\017)45
-b Fj(L:)28 b(long)f(in)n(t)340 1760 y Fi(\017)45 b Fj(UL:)28
-b(unsigned)g(long)e(in)n(t)340 1891 y Fi(\017)45 b Fj(I:)28
-b(in)n(t)340 2021 y Fi(\017)45 b Fj(UI:)28 b(unsigned)g(in)n(t)340
-2151 y Fi(\017)45 b Fj(S:)28 b(short)f(in)n(t)340 2282
-y Fi(\017)45 b Fj(US:)28 b(unsigned)g(short)f(in)n(t)340
-2412 y Fi(\017)45 b Fj(B:)28 b(b)n(yte)f(\(signed)h(c)n(har\))340
-2542 y Fi(\017)45 b Fj(UB:)28 b(unsigned)f(b)n(yte)h(\(unsigned)g(c)n
-(har\))227 2702 y(F)-7 b(or)31 b(example,)h(astMaskD)e(w)n(ould)h(b)r
-(e)g(used)h(to)f(pro)r(cess)f Ft(")p Fj(double)p Ft(")g
-Fj(data,)i(while)f(astMaskS)f(w)n(ould)h(b)r(e)h(used)227
-2801 y(to)c(pro)r(cess)e Ft(")p Fj(short)h(in)n(t)p Ft(")g
-Fj(data,)g(etc.)p 0 2995 3780 12 v 0 3127 a Fz(astMatc)l(hAxes)254
-b Fe(Find)39 b(an)m(y)f(corresp)s(onding)f(axes)h(in)1596
-3240 y(t)m(w)m(o)f(F)-10 b(rames)2946 3127 y Fz(astMatc)l(hAxes)0
-3401 y Fd(Description:)44 b Fj(This)c(function)h(lo)r(oks)e(for)g
-(corresp)r(onding)f(axes)h(within)i(t)n(w)n(o)e(supplied)h(F)-7
-b(rames.)74 b(An)40 b(arra)n(y)e(of)227 3501 y(in)n(tegers)f(is)i
-(returned)f(that)g(con)n(tains)g(an)g(elemen)n(t)g(for)g(eac)n(h)f
-(axis)h(in)g(the)h(second)f(supplied)h(F)-7 b(rame.)68
-b(An)227 3600 y(elemen)n(t)36 b(in)h(this)f(arra)n(y)d(will)j(b)r(e)h
-(set)f(to)g(zero)e(if)j(the)f(asso)r(ciated)f(axis)g(within)h(the)h
-(second)e(F)-7 b(rame)36 b(has)f(no)227 3700 y(corresp)r(onding)j(axis)
-h(within)i(the)f(\014rst)g(F)-7 b(rame.)73 b(Otherwise,)43
-b(it)d(will)g(b)r(e)g(set)g(to)g(the)g(index)g(\(a)g(non-zero)227
-3799 y(p)r(ositiv)n(e)27 b(in)n(teger\))g(of)h(the)g(corresp)r(onding)e
-(axis)g(within)j(the)f(\014rst)f(supplied)h(F)-7 b(rame.)0
-3946 y Fd(Synopsis:)121 b Ft(void)42 b(astMatchAxes\()c(AstFrame)i
-Fi(\003)p Ft(frm1,)h(AstFrame)g Fi(\003)p Ft(frm2,)g(int)h
-Fi(\003)p Ft(axes)f(\))0 4093 y Fd(P)m(arameters:)259
-4227 y(frm1)427 4327 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(\014rst)f(F)-7
-b(rame.)259 4457 y Fd(frm2)427 4557 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(second)f(F)-7 b(rame.)259 4687 y Fd(axes)427
-4787 y Fj(P)n(oin)n(ter)24 b(to)h(an)g(in)n(teger)g(arra)n(y)e(in)i
-(whic)n(h)g(to)h(return)e(the)i(indices)f(of)h(the)f(axes)g(\(within)h
-(the)g(\014rst)f(F)-7 b(rame\))427 4886 y(that)38 b(corresp)r(ond)f(to)
-g(eac)n(h)g(axis)g(within)i(the)f(second)f(F)-7 b(rame.)68
-b(Axis)37 b(indices)h(start)g(at)f(1.)68 b(A)38 b(v)-5
-b(alue)427 4986 y(of)34 b(zero)e(will)i(b)r(e)g(stored)f(in)h(the)f
-(returned)h(arra)n(y)d(for)i(eac)n(h)g(axis)f(in)i(the)g(second)f(F)-7
-b(rame)33 b(that)h(has)f(no)427 5086 y(corresp)r(onding)26
-b(axis)h(in)h(the)g(\014rst)f(F)-7 b(rame.)427 5201 y(The)26
-b(n)n(um)n(b)r(er)f(of)g(elemen)n(ts)h(in)f(this)h(arra)n(y)d(m)n(ust)j
-(b)r(e)g(greater)d(than)j(or)e(equal)h(to)g(the)h(n)n(um)n(b)r(er)f(of)
-h(axes)e(in)427 5300 y(the)k(second)f(F)-7 b(rame.)0
-5459 y Fd(Class)31 b(Applicabilit)m(y:)259 5593 y(F)-8
-b(rame)427 5693 y Fj(This)28 b(function)g(applies)f(to)h(all)f(F)-7
-b(rames.)p eop end
-%%Page: 276 286
-TeXDict begin 276 285 bop 0 52 a FF(276)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Notes:)340
-654 y Fi(\017)45 b Fj(Corresp)r(onding)32 b(axes)h(are)g(iden)n
-(ti\014ed)i(b)n(y)f(the)g(fact)g(that)g(a)g(Mapping)g(can)f(b)r(e)i
-(found)f(b)r(et)n(w)n(een)g(them)427 754 y(using)25 b(astFindF)-7
-b(rame)25 b(or)g(astCon)n(v)n(ert.)34 b(Th)n(us,)26 b
-Ft(")p Fj(corresp)r(onding)d(axes)p Ft(")h Fj(are)g(not)i(necessarily)e
-(iden)n(tical.)427 853 y(F)-7 b(or)24 b(instance,)g(SkyF)-7
-b(rame)23 b(axes)g(in)h(t)n(w)n(o)f(F)-7 b(rames)23 b(will)h(matc)n(h)g
-(ev)n(en)f(if)i(they)f(describ)r(e)f(di\013eren)n(t)h(celestial)427
-953 y(co)r(ordinate)j(systems)p 0 1173 3780 12 v 0 1304
-a Fz(astMathMap)641 b Fe(Create)37 b(a)i(MathMap)639
-b Fz(astMathMap)0 1514 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(MathMap)h(and)f(optionally)g
-(initialises)g(its)h(attributes.)227 1648 y(A)f(MathMap)f(is)h(a)f
-(Mapping)g(whic)n(h)h(allo)n(ws)e(y)n(ou)h(to)g(sp)r(ecify)h(a)f(set)g
-(of)h(forw)n(ard)e(and/or)g(in)n(v)n(erse)g(transforma-)227
-1748 y(tion)33 b(functions)g(using)f(arithmetic)h(op)r(erations)e(and)h
-(mathematical)g(functions)h(similar)f(to)h(those)f(a)n(v)-5
-b(ailable)227 1848 y(in)28 b(C.)g(The)f(MathMap)g(in)n(terprets)g
-(these)h(functions)f(at)h(run-time,)f(whenev)n(er)g(its)g(forw)n(ard)f
-(or)h(in)n(v)n(erse)f(trans-)227 1947 y(formation)38
-b(is)h(required.)68 b(Because)38 b(the)h(functions)g(are)e(not)i
-(compiled)g(in)f(the)h(normal)f(sense)g(\(unlik)n(e)h(an)227
-2047 y(In)n(traMap\),)32 b(they)g(ma)n(y)f(b)r(e)h(used)g(to)f(describ)
-r(e)g(co)r(ordinate)g(transformations)f(in)i(a)f(transp)r(ortable)f
-(manner.)227 2146 y(A)25 b(MathMap)g(therefore)f(pro)n(vides)f(a)i
-(\015exible)f(w)n(a)n(y)g(of)h(de\014ning)g(new)f(t)n(yp)r(es)h(of)g
-(Mapping)f(whose)g(descriptions)227 2246 y(ma)n(y)j(b)r(e)h(stored)f
-(as)g(part)g(of)h(a)f(dataset)g(and)g(in)n(terpreted)g(b)n(y)h(other)f
-(programs.)0 2416 y Fd(Synopsis:)121 b Ft(AstMathMap)39
-b Fi(\003)p Ft(astMathMap\()g(int)j(nin,)g(int)g(nout,)g(int)g(nfwd,)g
-(const)f(char)h Fi(\003)p Ft(fwd[],)f(int)h(ninv,)227
-2516 y(const)g(char)g Fi(\003)p Ft(inv[],)e(const)i(char)g
-Fi(\003)p Ft(options,)e(...)86 b(\))0 2685 y Fd(P)m(arameters:)259
-2842 y(nin)427 2942 y Fj(Num)n(b)r(er)28 b(of)f(input)i(v)-5
-b(ariables)26 b(for)h(the)h(MathMap.)36 b(This)28 b(determines)f(the)h
-(v)-5 b(alue)27 b(of)h(its)f(Nin)h(attribute.)259 3085
-y Fd(nout)427 3185 y Fj(Num)n(b)r(er)20 b(of)g(output)h(v)-5
-b(ariables)18 b(for)h(the)i(MathMap.)34 b(This)20 b(determines)f(the)i
-(v)-5 b(alue)19 b(of)h(its)g(Nout)g(attribute.)259 3328
-y Fd(nfwd)427 3427 y Fj(The)26 b(n)n(um)n(b)r(er)f(of)h(forw)n(ard)e
-(transformation)g(functions)i(b)r(eing)g(supplied.)37
-b(This)25 b(m)n(ust)h(b)r(e)g(at)g(least)f(equal)427
-3527 y(to)35 b Ft(")p Fj(nout)p Ft(")p Fj(,)g(but)g(ma)n(y)f(b)r(e)h
-(increased)f(to)g(accommo)r(date)f(an)n(y)h(additional)g(expressions)f
-(whic)n(h)h(de\014ne)427 3626 y(in)n(termediate)23 b(v)-5
-b(ariables)21 b(for)i(the)g(forw)n(ard)e(transformation)g(\(see)i(the)g
-Ft(")p Fj(Calculating)f(In)n(termediate)g(V)-7 b(al-)427
-3726 y(ues)p Ft(")27 b Fj(section)h(b)r(elo)n(w\).)259
-3869 y Fd(fwd)427 3969 y Fj(An)36 b(arra)n(y)c(\(with)k
-Ft(")p Fj(nfwd)p Ft(")f Fj(elemen)n(ts\))g(of)g(p)r(oin)n(ters)f(to)h
-(n)n(ull)g(terminated)g(strings)f(whic)n(h)h(con)n(tain)f(the)427
-4068 y(expressions)22 b(de\014ning)i(the)g(forw)n(ard)e
-(transformation.)34 b(The)24 b(syn)n(tax)f(of)g(these)h(expressions)e
-(is)i(describ)r(ed)427 4168 y(b)r(elo)n(w.)259 4311 y
-Fd(nin)m(v)427 4411 y Fj(The)k(n)n(um)n(b)r(er)g(of)g(in)n(v)n(erse)f
-(transformation)f(functions)i(b)r(eing)h(supplied.)38
-b(This)28 b(m)n(ust)g(b)r(e)h(at)f(least)f(equal)427
-4510 y(to)21 b Ft(")p Fj(nin)p Ft(")p Fj(,)h(but)f(ma)n(y)f(b)r(e)h
-(increased)e(to)i(accommo)r(date)f(an)n(y)g(additional)g(expressions)f
-(whic)n(h)h(de\014ne)h(in)n(ter-)427 4610 y(mediate)30
-b(v)-5 b(ariables)28 b(for)h(the)h(in)n(v)n(erse)e(transformation)g
-(\(see)h(the)h Ft(")p Fj(Calculating)e(In)n(termediate)h(V)-7
-b(alues)p Ft(")427 4710 y Fj(section)27 b(b)r(elo)n(w\).)259
-4853 y Fd(in)m(v)427 4952 y Fj(An)37 b(arra)n(y)d(\(with)k
-Ft(")p Fj(nin)n(v)p Ft(")d Fj(elemen)n(ts\))i(of)g(p)r(oin)n(ters)f(to)
-g(n)n(ull)h(terminated)f(strings)g(whic)n(h)g(con)n(tain)g(the)427
-5052 y(expressions)25 b(de\014ning)i(the)g(in)n(v)n(erse)e
-(transformation.)35 b(The)27 b(syn)n(tax)e(of)i(these)f(expressions)f
-(is)i(describ)r(ed)427 5151 y(b)r(elo)n(w.)259 5295 y
-Fd(options)427 5394 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n(ull-terminated)g
-(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g
-(attribute)427 5494 y(assignmen)n(ts)21 b(to)h(b)r(e)h(used)f(for)g
-(initialising)g(the)h(new)f(MathMap.)35 b(The)22 b(syn)n(tax)g(used)g
-(is)g(iden)n(tical)g(to)g(that)427 5593 y(for)k(the)h(astSet)g
-(function)g(and)g(ma)n(y)f(include)h Ft(")p Fj(prin)n(tf)p
-Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n(ti\014ed)h(b)n(y)f
-Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427 5693 y(in)i(the)g(normal)f
-(w)n(a)n(y)-7 b(.)35 b(If)28 b(no)g(initialisation)f(is)g(required,)g
-(a)g(zero-length)f(string)h(ma)n(y)g(b)r(e)h(supplied.)p
-eop end
-%%Page: 277 287
-TeXDict begin 277 286 bop 3643 52 a FF(277)259 351 y
-Fd(...)427 451 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 551 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 650 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 750 y Fj(function\).)0 923 y
-Fd(Returned)32 b(V)-8 b(alue:)259 1071 y(astMathMap\(\))427
-1171 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(MathMap.)0
-1344 y Fd(Notes:)340 1638 y Fi(\017)45 b Fj(The)e(sequence)f(of)h(n)n
-(um)n(b)r(ers)f(pro)r(duced)g(b)n(y)h(the)g(random)f(n)n(um)n(b)r(er)g
-(functions)h(a)n(v)-5 b(ailable)42 b(within)h(a)427 1737
-y(MathMap)c(is)h(normally)e(unpredictable)h(and)g(di\013eren)n(t)h(for)
-f(eac)n(h)f(MathMap.)72 b(Ho)n(w)n(ev)n(er,)41 b(this)f(b)r(e-)427
-1837 y(ha)n(viour)26 b(ma)n(y)h(b)r(e)h(con)n(trolled)f(b)n(y)g(means)g
-(of)h(the)g(MathMap's)f(Seed)g(attribute.)340 1976 y
-Fi(\017)45 b Fj(Normally)-7 b(,)28 b(comp)r(ound)g(Mappings)f
-(\(CmpMaps\))i(whic)n(h)f(in)n(v)n(olv)n(e)f(MathMaps)g(will)i(not)f(b)
-r(e)g(sub)5 b(ject)29 b(to)427 2075 y(simpli\014cation)34
-b(\(e.g.)56 b(using)34 b(astSimplify\))h(b)r(ecause)e(AST)i(cannot)e
-(kno)n(w)g(ho)n(w)h(di\013eren)n(t)g(MathMaps)427 2175
-y(will)f(in)n(teract.)52 b(Ho)n(w)n(ev)n(er,)32 b(in)h(the)h(sp)r
-(ecial)e(case)g(where)g(a)h(MathMap)f(o)r(ccurs)g(in)h(series)f(with)h
-(its)g(o)n(wn)427 2274 y(in)n(v)n(erse,)21 b(then)h(simpli\014cation)g
-(ma)n(y)e(b)r(e)i(p)r(ossible.)34 b(Whether)22 b(simpli\014cation)f(do)
-r(es,)i(in)e(fact,)i(o)r(ccur)e(under)427 2374 y(these)28
-b(circumstances)e(is)i(con)n(trolled)e(b)n(y)i(the)g(MathMap's)f
-(SimpFI)h(and)g(SimpIF)g(attributes.)340 2513 y Fi(\017)45
-b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 2612 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)-2 2786 y Fd(De\014ning)32 b(T)-8 b(ransformation)32
-b(F)-8 b(unctions)n(:)227 2932 y Fj(A)24 b(MathMap's)g(transformation)e
-(functions)i(are)e(supplied)j(as)e(a)g(set)h(of)f(expressions)f(in)i
-(an)g(arra)n(y)d(of)j(c)n(haracter)227 3031 y(strings.)34
-b(Normally)19 b(y)n(ou)g(w)n(ould)g(supply)h(the)g(same)g(n)n(um)n(b)r
-(er)f(of)h(expressions)e(for)i(the)g(forw)n(ard)e(transformation,)227
-3131 y(via)27 b(the)h Ft(")p Fj(fwd)p Ft(")f Fj(parameter,)f(as)h
-(there)g(are)g(output)h(v)-5 b(ariables)26 b(\(giv)n(en)h(b)n(y)g(the)h
-(MathMap's)f(Nout)h(attribute\).)227 3231 y(F)-7 b(or)27
-b(instance,)h(if)g(Nout)g(is)f(2)g(y)n(ou)g(migh)n(t)h(use:)340
-3378 y Fi(\017)45 b Ft(")p Fj(r)27 b(=)g(sqrt\()h(x)f
-Fi(\003)g Fj(x)h(+)f(y)h Fi(\003)f Fj(y)g(\))p Ft(")340
-3517 y Fi(\017)45 b Ft(")p Fj(theta)28 b(=)f(atan2\()g(y)-7
-b(,)27 b(x)h(\))p Ft(")227 3690 y Fj(whic)n(h)21 b(de\014nes)f(a)g
-(transformation)f(from)h(Cartesian)f(to)i(p)r(olar)e(co)r(ordinates.)33
-b(Here,)22 b(the)f(v)-5 b(ariables)19 b(that)i(app)r(ear)227
-3790 y(on)28 b(the)g(left)g(of)g(eac)n(h)f(expression)f(\()p
-Ft(")p Fj(r)p Ft(")h Fj(and)h Ft(")p Fj(theta)p Ft(")p
-Fj(\))f(pro)n(vide)g(names)g(for)g(the)i(output)f(v)-5
-b(ariables)26 b(and)i(those)227 3889 y(that)g(app)r(ear)f(on)g(the)h
-(righ)n(t)f(\()p Ft(")p Fj(x)p Ft(")g Fj(and)g Ft(")p
-Fj(y)p Ft(")p Fj(\))g(are)g(references)f(to)i(input)g(v)-5
-b(ariables.)227 4020 y(T)e(o)25 b(complemen)n(t)g(this,)h(y)n(ou)e(m)n
-(ust)i(also)e(supply)h(expressions)e(for)i(the)g(in)n(v)n(erse)f
-(transformation)g(via)g(the)i Ft(")p Fj(in)n(v)p Ft(")227
-4119 y Fj(parameter.)57 b(In)35 b(this)g(case,)g(the)g(n)n(um)n(b)r(er)
-g(of)f(expressions)f(giv)n(en)h(w)n(ould)g(normally)g(matc)n(h)g(the)h
-(n)n(um)n(b)r(er)g(of)227 4219 y(MathMap)28 b(input)g(co)r(ordinates)e
-(\(giv)n(en)h(b)n(y)h(the)g(Nin)g(attribute\).)37 b(If)28
-b(Nin)g(is)g(2,)f(y)n(ou)g(migh)n(t)g(use:)340 4367 y
-Fi(\017)45 b Ft(")p Fj(x)27 b(=)h(r)f Fi(\003)g Fj(cos\()g(theta)h(\))p
-Ft(")340 4505 y Fi(\017)45 b Ft(")p Fj(y)27 b(=)h(r)f
-Fi(\003)g Fj(sin\()h(theta)g(\))p Ft(")227 4679 y Fj(whic)n(h)f
-(expresses)e(the)i(transformation)e(from)i(p)r(olar)f(to)g(Cartesian)g
-(co)r(ordinates.)35 b(Note)26 b(that)h(here)g(the)g(input)227
-4778 y(v)-5 b(ariables)31 b(\()p Ft(")p Fj(x)p Ft(")h
-Fj(and)g Ft(")p Fj(y)p Ft(")p Fj(\))g(are)f(named)i(on)f(the)h(left)g
-(of)f(eac)n(h)f(expression,)i(and)f(the)h(output)f(v)-5
-b(ariables)32 b(\()p Ft(")p Fj(r)p Ft(")227 4878 y Fj(and)c
-Ft(")p Fj(theta)p Ft(")p Fj(\))f(are)g(referenced)f(on)i(the)g(righ)n
-(t.)227 5008 y(Normally)-7 b(,)25 b(y)n(ou)e(cannot)i(refer)f(to)g(a)g
-(v)-5 b(ariable)24 b(on)g(the)h(righ)n(t)f(of)h(an)f(expression)f
-(unless)h(it)i(is)e(named)h(on)f(the)h(left)227 5108
-y(of)j(an)g(expression)f(in)i(the)f(complemen)n(tary)f(set)h(of)h
-(functions.)39 b(Therefore)27 b(b)r(oth)h(sets)g(of)g(functions)h
-(\(forw)n(ard)227 5207 y(and)d(in)n(v)n(erse\))e(m)n(ust)i(b)r(e)g
-(form)n(ulated)f(using)g(the)i(same)e(consisten)n(t)g(set)g(of)h(v)-5
-b(ariable)25 b(names.)35 b(This)26 b(means)f(that)227
-5307 y(if)35 b(y)n(ou)f(wish)h(to)f(lea)n(v)n(e)g(one)g(of)g(the)h
-(transformations)e(unde\014ned,)k(y)n(ou)d(m)n(ust)h(supply)g(dumm)n(y)
-f(expressions)227 5407 y(whic)n(h)28 b(simply)f(name)h(eac)n(h)f(of)g
-(the)h(output)g(\(or)f(input\))i(v)-5 b(ariables.)36
-b(F)-7 b(or)27 b(example,)g(y)n(ou)g(migh)n(t)g(use:)340
-5554 y Fi(\017)45 b Ft(")p Fj(x)p Ft(")340 5693 y Fi(\017)g
-Ft(")p Fj(y)p Ft(")p eop end
-%%Page: 278 288
-TeXDict begin 278 287 bop 0 52 a FF(278)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)227 351 y Fj(for)22
-b(the)h(in)n(v)n(erse)d(transformation)h(ab)r(o)n(v)n(e,)h(whic)n(h)g
-(serv)n(es)f(to)h(name)g(the)g(input)h(v)-5 b(ariables)21
-b(but)i(without)g(de\014ning)227 451 y(an)28 b(in)n(v)n(erse)e
-(transformation.)-2 612 y Fd(Calculating)32 b(In)m(termediate)g(V)-8
-b(alues)n(:)227 758 y Fj(It)23 b(is)g(sometimes)g(useful)g(to)g
-(calculate)f(in)n(termediate)g(v)-5 b(alues)23 b(and)g(then)g(to)g(use)
-f(these)h(in)g(the)h(\014nal)e(expressions)227 858 y(for)28
-b(the)g(output)h(\(or)e(input\))i(v)-5 b(ariables.)37
-b(This)27 b(ma)n(y)h(b)r(e)g(done)g(b)n(y)f(supplying)h(additional)g
-(expressions)e(for)h(the)227 957 y(forw)n(ard)e(\(or)i(in)n(v)n(erse\))
-e(transformation)h(functions.)36 b(F)-7 b(or)27 b(instance,)g(the)g
-(follo)n(wing)f(arra)n(y)e(of)j(\014v)n(e)f(expressions)227
-1057 y(describ)r(es)h(2-dimensional)g(pin-cushion)g(distortion:)340
-1205 y Fi(\017)45 b Ft(")p Fj(r)27 b(=)g(sqrt\()h(xin)f
-Fi(\003)g Fj(xin)h(+)f(yin)h Fi(\003)f Fj(yin)h(\))p
-Ft(")340 1344 y Fi(\017)45 b Ft(")p Fj(rout)27 b(=)g(r)g
-Fi(\003)h Fj(\()g(1)f(+)g(0.1)g Fi(\003)g Fj(r)g Fi(\003)g
-Fj(r)g(\))p Ft(")340 1483 y Fi(\017)45 b Ft(")p Fj(theta)28
-b(=)f(atan2\()g(yin,)h(xin)f(\))p Ft(")340 1621 y Fi(\017)45
-b Ft(")p Fj(xout)27 b(=)h(rout)f Fi(\003)g Fj(cos\()g(theta)h(\))p
-Ft(")340 1760 y Fi(\017)45 b Ft(")p Fj(y)n(out)27 b(=)g(rout)g
-Fi(\003)h Fj(sin\()f(theta)h(\))p Ft(")227 1934 y Fj(Here,)35
-b(w)n(e)e(\014rst)h(calculate)f(three)g(in)n(termediate)h(results)f(\()
-p Ft(")p Fj(r)p Ft(")p Fj(,)h Ft(")p Fj(rout)p Ft(")f
-Fj(and)g Ft(")p Fj(theta)p Ft(")p Fj(\))g(and)h(then)g(use)g(these)227
-2033 y(to)e(calculate)f(the)i(\014nal)f(results)f(\()p
-Ft(")p Fj(xout)p Ft(")g Fj(and)h Ft(")p Fj(y)n(out)p
-Ft(")p Fj(\).)49 b(The)32 b(MathMap)g(kno)n(ws)e(that)j(only)e(the)i
-(\014nal)e(t)n(w)n(o)227 2133 y(results)f(constitute)g(v)-5
-b(alues)30 b(for)f(the)i(output)f(v)-5 b(ariables)29
-b(b)r(ecause)h(its)g(Nout)g(attribute)g(is)g(set)g(to)g(2.)44
-b(Y)-7 b(ou)30 b(ma)n(y)227 2233 y(de\014ne)i(as)g(man)n(y)f(in)n
-(termediate)g(v)-5 b(ariables)31 b(in)h(this)g(w)n(a)n(y)f(as)g(y)n(ou)
-g(c)n(ho)r(ose.)49 b(Ha)n(ving)31 b(de\014ned)h(a)f(v)-5
-b(ariable,)32 b(y)n(ou)227 2332 y(ma)n(y)27 b(then)h(refer)f(to)h(it)g
-(on)f(the)h(righ)n(t)f(of)g(an)n(y)g(subsequen)n(t)g(expressions.)227
-2463 y(Note)36 b(that)g(when)g(de\014ning)g(the)g(in)n(v)n(erse)e
-(transformation)g(y)n(ou)h(ma)n(y)g(only)g(refer)g(to)h(the)g(output)g
-(v)-5 b(ariables)227 2562 y Ft(")p Fj(xout)p Ft(")34
-b Fj(and)h Ft(")p Fj(y)n(out)p Ft(")p Fj(.)58 b(The)35
-b(in)n(termediate)f(v)-5 b(ariables)34 b Ft(")p Fj(r)p
-Ft(")p Fj(,)h Ft(")p Fj(rout)p Ft(")f Fj(and)h Ft(")p
-Fj(theta)p Ft(")f Fj(\(ab)r(o)n(v)n(e\))g(are)g(priv)-5
-b(ate)35 b(to)227 2662 y(the)28 b(forw)n(ard)d(transformation)g(and)i
-(ma)n(y)f(not)h(b)r(e)g(referenced)g(b)n(y)f(the)i(in)n(v)n(erse)d
-(transformation.)35 b(The)27 b(in)n(v)n(erse)227 2762
-y(transformation)f(ma)n(y)-7 b(,)27 b(ho)n(w)n(ev)n(er,)f(de\014ne)i
-(its)f(o)n(wn)g(priv)-5 b(ate)28 b(in)n(termediate)f(v)-5
-b(ariables.)-2 2923 y Fd(Expression)31 b(Syn)m(tax)n(:)227
-3069 y Fj(The)39 b(expressions)d(giv)n(en)i(for)g(the)h(forw)n(ard)d
-(and)j(in)n(v)n(erse)e(transformations)f(closely)i(follo)n(w)f(the)i
-(syn)n(tax)f(of)227 3169 y(the)c(C)f(programming)e(language)g(\(with)j
-(some)f(extensions)f(for)h(compatibilit)n(y)g(with)h(F)-7
-b(ortran\).)52 b(They)33 b(ma)n(y)227 3268 y(con)n(tain)c(references)g
-(to)g(v)-5 b(ariables)29 b(and)g(literal)h(constan)n(ts,)f(together)g
-(with)h(arithmetic,)g(b)r(o)r(olean,)g(relational)227
-3368 y(and)23 b(bit)n(wise)g(op)r(erators,)e(and)i(function)g(in)n(v)n
-(o)r(cations.)34 b(A)23 b(set)g(of)g(sym)n(b)r(olic)f(constan)n(ts)g
-(is)g(also)g(a)n(v)-5 b(ailable.)34 b(Eac)n(h)227 3467
-y(of)g(these)f(is)h(describ)r(ed)f(in)h(detail)g(b)r(elo)n(w.)54
-b(P)n(aren)n(theses)32 b(ma)n(y)h(b)r(e)h(used)f(to)h(o)n(v)n(er-ride)d
-(the)j(normal)e(order)h(of)227 3567 y(ev)-5 b(aluation.)41
-b(There)28 b(is)h(no)g(built-in)g(limit)h(to)f(the)g(length)g(of)g
-(expressions)e(and)i(they)g(are)f(insensitiv)n(e)h(to)f(case)227
-3667 y(or)f(the)h(presence)f(of)g(additional)g(white)h(space.)-2
-3828 y Fd(V)-8 b(ariables)n(:)227 3974 y Fj(V)h(ariable)26
-b(names)h(m)n(ust)f(b)r(egin)h(with)h(an)e(alphab)r(etic)h(c)n
-(haracter)e(and)h(ma)n(y)g(con)n(tain)h(only)f(alphab)r(etic)h(c)n
-(harac-)227 4074 y(ters,)j(digits,)g(and)f(the)h(underscore)e(c)n
-(haracter)f Ft("_")p Fj(.)42 b(There)29 b(is)g(no)g(built-in)h(limit)g
-(to)g(the)g(length)f(of)h(v)-5 b(ariable)227 4173 y(names.)-2
-4335 y Fd(Literal)32 b(Constan)m(ts)n(:)227 4481 y Fj(Literal)g
-(constan)n(ts,)h(suc)n(h)g(as)e Ft(")p Fj(0)p Ft(")p
-Fj(,)i Ft(")p Fj(1)p Ft(")p Fj(,)g Ft(")p Fj(0.007)p
-Ft(")d Fj(or)i Ft(")p Fj(2.505e-16)p Ft(")c Fj(ma)n(y)k(app)r(ear)g(in)
-h(expressions,)f(with)h(the)227 4580 y(decimal)28 b(p)r(oin)n(t)g(and)f
-(exp)r(onen)n(t)g(b)r(eing)h(optional)f(\(a)h Ft(")p
-Fj(D)p Ft(")f Fj(ma)n(y)g(also)f(b)r(e)i(used)g(as)f(an)g(exp)r(onen)n
-(t)h(c)n(haracter)d(for)227 4680 y(compatibilit)n(y)j(with)g(F)-7
-b(ortran\).)36 b(A)28 b(unary)e(min)n(us)i Ft(")p Fj(-)p
-Ft(")f Fj(ma)n(y)f(b)r(e)i(used)g(as)f(a)g(pre\014x.)-2
-4841 y Fd(Arithmetic)32 b(Precision)n(:)227 4987 y Fj(All)c(arithmetic)
-g(is)f(\015oating)g(p)r(oin)n(t,)h(p)r(erformed)f(in)h(double)f
-(precision.)-2 5148 y Fd(Propagation)33 b(of)e(Missing)f(Data)n(:)227
-5295 y Fj(Unless)i(indicated)g(otherwise,)h(if)f(an)n(y)f(argumen)n(t)g
-(of)h(a)g(function)g(or)g(op)r(erator)e(has)h(the)i(v)-5
-b(alue)32 b(AST)p Ft(__)p Fj(BAD)227 5394 y(\(indicating)38
-b(missing)f(data\),)j(then)e(the)g(result)f(of)g(that)h(function)g(or)e
-(op)r(eration)h(is)g(also)g(AST)p Ft(__)p Fj(BAD,)g(so)227
-5494 y(that)k(suc)n(h)e(v)-5 b(alues)40 b(are)f(propagated)f
-(automatically)h(through)g(all)h(op)r(erations)f(p)r(erformed)g(b)n(y)h
-(MathMap)227 5593 y(transformations.)35 b(The)26 b(sp)r(ecial)h(v)-5
-b(alue)26 b(AST)p Ft(__)p Fj(BAD)g(can)h(b)r(e)f(represen)n(ted)g(in)g
-(expressions)f(b)n(y)h(the)h(sym)n(b)r(olic)227 5693
-y(constan)n(t)g Ft(")p Fl(<)p Fj(bad)p Fl(>)p Ft(")p
-Fj(.)p eop end
-%%Page: 279 289
-TeXDict begin 279 288 bop 3643 52 a FF(279)227 351 y
-Fj(A)33 b Fl(<)p Fj(bad)p Fl(>)f Fj(result)g(\(i.e.)52
-b(equal)32 b(to)h(AST)p Ft(__)p Fj(BAD\))g(is)f(also)g(pro)r(duced)g
-(in)h(resp)r(onse)f(to)g(an)n(y)g(n)n(umerical)g(error)227
-451 y(\(suc)n(h)f(as)f(division)h(b)n(y)g(zero)e(or)h(n)n(umerical)g(o)
-n(v)n(er\015o)n(w\),)g(or)g(if)h(an)g(in)n(v)-5 b(alid)31
-b(argumen)n(t)f(v)-5 b(alue)31 b(is)f(pro)n(vided)g(to)h(a)227
-551 y(function)d(or)f(op)r(erator.)-2 699 y Fd(Arithmetic)32
-b(Op)s(erators)n(:)227 845 y Fj(The)c(follo)n(wing)e(arithmetic)i(op)r
-(erators)e(are)g(a)n(v)-5 b(ailable:)340 981 y Fi(\017)45
-b Fj(x1)27 b(+)h(x2:)36 b(Sum)28 b(of)f Ft(")p Fj(x1)p
-Ft(")g Fj(and)g Ft(")p Fj(x2)p Ft(")p Fj(.)340 1113 y
-Fi(\017)45 b Fj(x1)27 b(-)h(x2:)36 b(Di\013erence)28
-b(of)f Ft(")p Fj(x1)p Ft(")f Fj(and)i Ft(")p Fj(x2)p
-Ft(")p Fj(.)340 1245 y Fi(\017)45 b Fj(x1)27 b Fi(\003)g
-Fj(x2:)37 b(Pro)r(duct)27 b(of)g Ft(")p Fj(x1)p Ft(")f
-Fj(and)i Ft(")p Fj(x1)p Ft(")p Fj(.)340 1377 y Fi(\017)45
-b Fj(x1)27 b(/)g(x2:)37 b(Ratio)27 b(of)g Ft(")p Fj(x1)p
-Ft(")g Fj(and)g Ft(")p Fj(x2)p Ft(")p Fj(.)340 1509 y
-Fi(\017)45 b Fj(x1)27 b Fi(\003\003)g Fj(x2:)36 b Ft(")p
-Fj(x1)p Ft(")26 b Fj(raised)h(to)g(the)h(p)r(o)n(w)n(er)f(of)g
-Ft(")p Fj(x2)p Ft(")p Fj(.)340 1642 y Fi(\017)45 b Fj(+)28
-b(x:)36 b(Unary)27 b(plus,)h(has)f(no)g(e\013ect)h(on)g(its)g(argumen)n
-(t.)340 1774 y Fi(\017)45 b Fj(-)28 b(x:)36 b(Unary)27
-b(min)n(us,)h(negates)f(its)g(argumen)n(t.)-2 1935 y
-Fd(Bo)s(olean)k(Op)s(erators)n(:)227 2081 y Fj(Bo)r(olean)c(v)-5
-b(alues)27 b(are)g(represen)n(ted)f(using)h(zero)g(to)h(indicate)f
-(false)h(and)f(non-zero)f(to)i(indicate)f(true.)37 b(In)28
-b(addi-)227 2181 y(tion,)22 b(the)f(v)-5 b(alue)21 b(AST)p
-Ft(__)p Fj(BAD)f(is)h(tak)n(en)f(to)g(mean)g Ft(")p Fj(unkno)n(wn)p
-Ft(")p Fj(.)34 b(The)20 b(v)-5 b(alues)20 b(returned)g(b)n(y)h(b)r(o)r
-(olean)f(op)r(erators)227 2280 y(ma)n(y)33 b(therefore)g(b)r(e)h(0,)g
-(1)g(or)e(AST)p Ft(__)p Fj(BAD.)i(Where)f(appropriate,)h
-Ft(")p Fj(tri-state)p Ft(")e Fj(logic)g(is)i(implemen)n(ted.)55
-b(F)-7 b(or)227 2380 y(example,)29 b Ft(")p Fj(a)p Fi(jj)p
-Fj(b)p Ft(")f Fj(ma)n(y)g(ev)-5 b(aluate)28 b(to)g(1)h(if)g
-Ft(")p Fj(a)p Ft(")e Fj(is)i(non-zero,)e(ev)n(en)i(if)g
-Ft(")p Fj(b)p Ft(")f Fj(has)g(the)h(v)-5 b(alue)29 b(AST)p
-Ft(__)p Fj(BAD.)g(This)227 2479 y(is)g(b)r(ecause)f(the)h(result)f(of)h
-(the)g(op)r(eration)f(w)n(ould)g(not)h(b)r(e)g(a\013ected)f(b)n(y)h
-(the)g(v)-5 b(alue)28 b(of)h Ft(")p Fj(b)p Ft(")p Fj(,)f(so)g(long)g
-(as)g Ft(")p Fj(a)p Ft(")g Fj(is)227 2579 y(non-zero.)227
-2703 y(The)g(follo)n(wing)e(b)r(o)r(olean)h(op)r(erators)f(are)h(a)n(v)
--5 b(ailable:)340 2839 y Fi(\017)45 b Fj(x1)34 b(&&)g(x2:)50
-b(Bo)r(olean)33 b(AND)i(b)r(et)n(w)n(een)g Ft(")p Fj(x1)p
-Ft(")e Fj(and)h Ft(")p Fj(x2)p Ft(")p Fj(,)h(returning)f(1)g(if)g(b)r
-(oth)h Ft(")p Fj(x1)p Ft(")e Fj(and)i Ft(")p Fj(x2)p
-Ft(")e Fj(are)427 2938 y(non-zero,)c(and)g(0)g(otherwise.)42
-b(This)30 b(op)r(erator)e(implemen)n(ts)i(tri-state)f(logic.)42
-b(\(The)30 b(synon)n(ym)e Ft(")p Fj(.and.)p Ft(")427
-3038 y Fj(is)g(also)e(pro)n(vided)h(for)g(compatibilit)n(y)g(with)h(F)
--7 b(ortran.\))340 3170 y Fi(\017)45 b Fj(x1)32 b Fi(jj)h
-Fj(x2:)47 b(Bo)r(olean)32 b(OR)g(b)r(et)n(w)n(een)h Ft(")p
-Fj(x1)p Ft(")e Fj(and)i Ft(")p Fj(x2)p Ft(")p Fj(,)g(returning)f(1)g
-(if)h(either)g Ft(")p Fj(x1)p Ft(")e Fj(or)h Ft(")p Fj(x2)p
-Ft(")f Fj(are)h(non-)427 3270 y(zero,)27 b(and)h(0)f(otherwise.)36
-b(This)28 b(op)r(erator)e(implemen)n(ts)i(tri-state)f(logic.)36
-b(\(The)28 b(synon)n(ym)f Ft(")p Fj(.or.)p Ft(")f Fj(is)i(also)427
-3369 y(pro)n(vided)f(for)g(compatibilit)n(y)g(with)h(F)-7
-b(ortran.\))340 3502 y Fi(\017)45 b Fj(x1)23 b Fi(^^)h
-Fj(x2:)34 b(Bo)r(olean)23 b(exclusiv)n(e)f(OR)h(\(X)n(OR\))h(b)r(et)n
-(w)n(een)f Ft(")p Fj(x1)p Ft(")f Fj(and)i Ft(")p Fj(x2)p
-Ft(")p Fj(,)e(returning)h(1)g(if)h(exactly)f(one)g(of)427
-3601 y Ft(")p Fj(x1)p Ft(")17 b Fj(and)h Ft(")p Fj(x2)p
-Ft(")f Fj(is)i(non-zero,)f(and)h(0)f(otherwise.)33 b(T)-7
-b(ri-state)17 b(logic)h(is)g(not)g(used)h(with)f(this)h(op)r(erator.)32
-b(\(The)427 3701 y(synon)n(yms)22 b Ft(")p Fj(.neqv.)p
-Ft(")g Fj(and)g Ft(")p Fj(.xor.)p Ft(")f Fj(are)h(also)g(pro)n(vided)f
-(for)i(compatibilit)n(y)f(with)i(F)-7 b(ortran,)22 b(although)g(the)427
-3800 y(second)27 b(of)h(these)f(is)h(not)g(standard.\))340
-3933 y Fi(\017)45 b Fj(x1)38 b(.eqv.)67 b(x2:)57 b(This)38
-b(is)f(pro)n(vided)g(only)h(for)f(compatibilit)n(y)h(with)g(F)-7
-b(ortran)37 b(and)h(tests)f(whether)h(the)427 4032 y(b)r(o)r(olean)26
-b(states)f(of)h Ft(")p Fj(x1)p Ft(")e Fj(and)i Ft(")p
-Fj(x2)p Ft(")e Fj(\(i.e.)37 b(true/false\))25 b(are)g(equal.)36
-b(It)26 b(is)g(the)g(negativ)n(e)e(of)i(the)h(exclusiv)n(e)427
-4132 y(OR)h(\(X)n(OR\))g(function.)37 b(T)-7 b(ri-state)27
-b(logic)f(is)i(not)f(used)h(with)g(this)g(op)r(erator.)340
-4264 y Fi(\017)45 b Fj(!)35 b(x:)f(Bo)r(olean)20 b(unary)h(NOT)g(op)r
-(eration,)h(returning)e(1)h(if)h Ft(")p Fj(x)p Ft(")f
-Fj(is)g(zero,)h(and)f(0)g(otherwise.)34 b(\(The)22 b(synon)n(ym)427
-4364 y Ft(")p Fj(.not.)p Ft(")27 b Fj(is)h(also)e(pro)n(vided)h(for)g
-(compatibilit)n(y)g(with)h(F)-7 b(ortran.\))-2 4525 y
-Fd(Relational)31 b(Op)s(erators)n(:)227 4671 y Fj(Relational)22
-b(op)r(erators)e(return)i(the)g(b)r(o)r(olean)g(result)g(\(0)g(or)f
-(1\))h(of)g(comparing)f(the)i(v)-5 b(alues)21 b(of)i(t)n(w)n(o)e
-(\015oating)g(p)r(oin)n(t)227 4770 y(v)-5 b(alues)30
-b(for)g(equalit)n(y)g(or)f(inequalit)n(y)-7 b(.)45 b(The)31
-b(v)-5 b(alue)30 b(AST)p Ft(__)p Fj(BAD)h(ma)n(y)e(also)h(b)r(e)h
-(returned)e(if)i(either)g(argumen)n(t)227 4870 y(is)d
-Fl(<)p Fj(bad)p Fl(>)p Fj(.)227 4994 y(The)g(follo)n(wing)e(relational)
-h(op)r(erators)e(are)i(a)n(v)-5 b(ailable:)340 5130 y
-Fi(\017)45 b Fj(x1)c(==)g(x2:)64 b(T)-7 b(ests)41 b(whether)g
-Ft(")p Fj(x1)p Ft(")f Fj(equals)h Ft(")p Fj(x1)p Ft(")p
-Fj(.)76 b(\(The)42 b(synon)n(ym)f Ft(")p Fj(.eq.)p Ft(")f
-Fj(is)h(also)g(pro)n(vided)f(for)427 5230 y(compatibilit)n(y)28
-b(with)g(F)-7 b(ortran.\))340 5362 y Fi(\017)45 b Fj(x1)29
-b(!=)g(x2:)39 b(T)-7 b(ests)29 b(whether)g Ft(")p Fj(x1)p
-Ft(")f Fj(is)h(unequal)g(to)g Ft(")p Fj(x2)p Ft(")p Fj(.)40
-b(\(The)29 b(synon)n(ym)f Ft(")p Fj(.ne.)p Ft(")h Fj(is)g(also)f(pro)n
-(vided)g(for)427 5461 y(compatibilit)n(y)g(with)g(F)-7
-b(ortran.\))340 5593 y Fi(\017)45 b Fj(x1)27 b Fl(>)g
-Fj(x2:)37 b(T)-7 b(ests)27 b(whether)g Ft(")p Fj(x1)p
-Ft(")f Fj(is)i(greater)e(than)h Ft(")p Fj(x2)p Ft(")p
-Fj(.)36 b(\(The)28 b(synon)n(ym)e Ft(")p Fj(.gt.)p Ft(")h
-Fj(is)g(also)g(pro)n(vided)f(for)427 5693 y(compatibilit)n(y)i(with)g
-(F)-7 b(ortran.\))p eop end
-%%Page: 280 290
-TeXDict begin 280 289 bop 0 52 a FF(280)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(x1)26 b Fl(>)p Fj(=)f(x2:)36 b(T)-7 b(ests)25 b(whether)h
-Ft(")p Fj(x1)p Ft(")f Fj(is)h(greater)e(than)j(or)e(equal)g(to)h
-Ft(")p Fj(x2)p Ft(")p Fj(.)35 b(\(The)27 b(synon)n(ym)e
-Ft(")p Fj(.ge.)p Ft(")g Fj(is)h(also)427 451 y(pro)n(vided)h(for)g
-(compatibilit)n(y)g(with)h(F)-7 b(ortran.\))340 586 y
-Fi(\017)45 b Fj(x1)35 b Fl(<)g Fj(x2:)52 b(T)-7 b(ests)35
-b(whether)g Ft(")p Fj(x1)p Ft(")f Fj(is)h(less)g(than)g
-Ft(")p Fj(x2)p Ft(")p Fj(.)59 b(\(The)35 b(synon)n(ym)g
-Ft(")p Fj(.lt.)p Ft(")g Fj(is)g(also)f(pro)n(vided)g(for)427
-685 y(compatibilit)n(y)28 b(with)g(F)-7 b(ortran.\))340
-820 y Fi(\017)45 b Fj(x1)33 b Fl(<)p Fj(=)g(x2:)49 b(T)-7
-b(ests)34 b(whether)f Ft(")p Fj(x1)p Ft(")g Fj(is)g(less)g(than)h(or)f
-(equal)g(to)h Ft(")p Fj(x2)p Ft(")p Fj(.)54 b(\(The)34
-b(synon)n(ym)f Ft(")p Fj(.le.)p Ft(")g Fj(is)h(also)427
-919 y(pro)n(vided)27 b(for)g(compatibilit)n(y)g(with)h(F)-7
-b(ortran.\))227 1085 y(Note)33 b(that)f(relational)f(op)r(erators)f
-(cannot)i(usefully)g(b)r(e)h(used)f(to)g(compare)f(v)-5
-b(alues)32 b(with)h(the)g Fl(<)p Fj(bad)p Fl(>)e Fj(v)-5
-b(alue)227 1184 y(\(represen)n(ting)29 b(missing)g(data\),)h(b)r
-(ecause)f(the)h(result)f(is)h(alw)n(a)n(ys)d Fl(<)p Fj(bad)p
-Fl(>)p Fj(.)42 b(The)30 b(isbad\(\))g(function)g(should)f(b)r(e)227
-1284 y(used)f(instead.)-2 1437 y Fd(Bit)m(wise)j(Op)s(erators)n(:)227
-1583 y Fj(The)39 b(bit)n(wise)g(op)r(erators)d(pro)n(vided)i(b)n(y)h(C)
-f(are)g(often)h(useful)g(when)g(op)r(erating)f(on)g(ra)n(w)g(data)g
-(\(e.g.)70 b(from)227 1683 y(instrumen)n(ts\),)36 b(so)e(they)g(are)f
-(also)g(pro)n(vided)g(for)h(use)g(in)g(MathMap)g(expressions.)55
-b(In)34 b(this)h(case,)g(ho)n(w)n(ev)n(er,)227 1782 y(the)c(v)-5
-b(alues)31 b(on)f(whic)n(h)h(they)f(op)r(erate)g(are)g(\015oating)g(p)r
-(oin)n(t)h(v)-5 b(alues)30 b(rather)f(than)i(pure)g(in)n(tegers.)45
-b(In)30 b(order)g(to)227 1882 y(pro)r(duce)24 b(results)f(whic)n(h)h
-(matc)n(h)g(the)h(pure)f(in)n(teger)f(case,)h(the)g(op)r(erands)f(are)g
-(regarded)g(as)g(\014xed)h(p)r(oin)n(t)g(binary)227 1982
-y(n)n(um)n(b)r(ers)32 b(\(i.e.)52 b(with)33 b(the)g(binary)e(equiv)-5
-b(alen)n(t)32 b(of)h(a)f(decimal)g(p)r(oin)n(t\))h(with)g(negativ)n(e)e
-(n)n(um)n(b)r(ers)h(represen)n(ted)227 2081 y(using)c(t)n(w)n
-(os-complemen)n(t)e(notation.)38 b(F)-7 b(or)27 b(in)n(teger)g(v)-5
-b(alues,)28 b(the)g(resulting)f(bit)i(pattern)e(corresp)r(onds)g(to)g
-(that)227 2181 y(of)e(the)g(equiv)-5 b(alen)n(t)24 b(signed)g(in)n
-(teger)g(\(digits)g(to)h(the)f(righ)n(t)g(of)h(the)g(p)r(oin)n(t)f(b)r
-(eing)h(zero\).)35 b(Op)r(erations)23 b(on)h(the)h(bits)227
-2281 y(represen)n(ting)h(the)i(fractional)f(part)g(are)g(also)f(p)r
-(ossible,)h(ho)n(w)n(ev)n(er.)227 2407 y(The)h(follo)n(wing)e(bit)n
-(wise)i(op)r(erators)e(are)g(a)n(v)-5 b(ailable:)340
-2547 y Fi(\017)45 b Fj(x1)30 b Fl(>>)f Fj(x2:)42 b(Righ)n(t)n(w)n(ard)
-28 b(bit)j(shift.)45 b(The)31 b(in)n(teger)e(v)-5 b(alue)30
-b(of)g Ft(")p Fj(x2)p Ft(")f Fj(is)h(tak)n(en)f(\(rounding)h(to)n(w)n
-(ards)e(zero\))427 2646 y(and)21 b(the)g(bits)g(represen)n(ting)e
-Ft(")p Fj(x1)p Ft(")g Fj(are)g(then)i(shifted)h(this)f(n)n(um)n(b)r(er)
-f(of)g(places)g(to)h(the)g(righ)n(t)f(\(or)f(to)i(the)g(left)427
-2746 y(if)26 b(the)f(n)n(um)n(b)r(er)g(of)g(places)f(is)h(negativ)n
-(e\).)35 b(This)25 b(is)g(equiv)-5 b(alen)n(t)24 b(to)h(dividing)g
-Ft(")p Fj(x1)p Ft(")f Fj(b)n(y)g(the)i(corresp)r(onding)427
-2846 y(p)r(o)n(w)n(er)h(of)g(2.)340 2980 y Fi(\017)45
-b Fj(x1)32 b Fl(<<)f Fj(x2:)45 b(Left)n(w)n(ard)31 b(bit)h(shift.)51
-b(The)32 b(in)n(teger)f(v)-5 b(alue)32 b(of)g Ft(")p
-Fj(x2)p Ft(")f Fj(is)g(tak)n(en)h(\(rounding)f(to)n(w)n(ards)f(zero\),)
-427 3080 y(and)i(the)g(bits)h(represen)n(ting)d Ft(")p
-Fj(x1)p Ft(")h Fj(are)g(then)h(shifted)h(this)f(n)n(um)n(b)r(er)g(of)g
-(places)f(to)h(the)g(left)h(\(or)e(to)h(the)427 3180
-y(righ)n(t)37 b(if)i(the)f(n)n(um)n(b)r(er)f(of)h(places)f(is)h
-(negativ)n(e\).)66 b(This)38 b(is)f(equiv)-5 b(alen)n(t)38
-b(to)g(m)n(ultiplying)f Ft(")p Fj(x1)p Ft(")g Fj(b)n(y)g(the)427
-3279 y(corresp)r(onding)26 b(p)r(o)n(w)n(er)g(of)i(2.)340
-3414 y Fi(\017)45 b Fj(x1)28 b(&)h(x2:)39 b(Bit)n(wise)28
-b(AND)i(b)r(et)n(w)n(een)f(the)g(bits)g(of)g Ft(")p Fj(x1)p
-Ft(")e Fj(and)i(those)f(of)h Ft(")p Fj(x2)p Ft(")e Fj(\(equiv)-5
-b(alen)n(t)29 b(to)g(a)f(b)r(o)r(olean)427 3513 y(AND)h(applied)e(at)h
-(eac)n(h)f(bit)h(p)r(osition)f(in)h(turn\).)340 3648
-y Fi(\017)45 b Fj(x1)26 b Fi(j)g Fj(x2:)35 b(Bit)n(wise)26
-b(OR)g(b)r(et)n(w)n(een)g(the)g(bits)g(of)g Ft(")p Fj(x1)p
-Ft(")f Fj(and)h(those)f(of)h Ft(")p Fj(x2)p Ft(")f Fj(\(equiv)-5
-b(alen)n(t)26 b(to)g(a)f(b)r(o)r(olean)h(OR)427 3748
-y(applied)i(at)f(eac)n(h)g(bit)h(p)r(osition)g(in)g(turn\).)340
-3882 y Fi(\017)45 b Fj(x1)24 b Fi(^)g Fj(x2:)35 b(Bit)n(wise)24
-b(exclusiv)n(e)f(OR)h(\(X)n(OR\))g(b)r(et)n(w)n(een)g(the)h(bits)f(of)g
-Ft(")p Fj(x1)p Ft(")f Fj(and)h(those)g(of)g Ft(")p Fj(x2)p
-Ft(")f Fj(\(equiv)-5 b(alen)n(t)427 3982 y(to)28 b(a)f(b)r(o)r(olean)g
-(X)n(OR)g(applied)h(at)f(eac)n(h)g(bit)h(p)r(osition)g(in)g(turn\).)227
-4147 y(Note)f(that)g(no)g(bit)g(in)n(v)n(ersion)f(op)r(erator)f(\()p
-Ft(")p Fi(\030)p Ft(")h Fj(in)h(C\))g(is)g(pro)n(vided.)36
-b(This)27 b(is)f(b)r(ecause)h(in)n(v)n(erting)f(the)h(bits)g(of)g(a)227
-4247 y(t)n(w)n(os-complemen)n(t)g(\014xed)i(p)r(oin)n(t)g(binary)f(n)n
-(um)n(b)r(er)g(is)h(equiv)-5 b(alen)n(t)28 b(to)h(simply)g(negating)e
-(it.)41 b(This)28 b(di\013ers)h(from)227 4347 y(the)d(pure)g(in)n
-(teger)f(case)f(b)r(ecause)i(bits)g(to)f(the)h(righ)n(t)f(of)h(the)g
-(binary)f(p)r(oin)n(t)h(are)f(also)f(in)n(v)n(erted.)36
-b(T)-7 b(o)25 b(in)n(v)n(ert)g(only)227 4446 y(those)e(bits)h(to)f(the)
-h(left)f(of)h(the)f(binary)g(p)r(oin)n(t,)h(use)f(a)g(bit)n(wise)g
-(exclusiv)n(e)g(OR)g(with)h(the)f(v)-5 b(alue)23 b(-1)g(\(i.e.)36
-b Ft(")p Fj(x)p Fi(^)p Fj(-1)p Ft(")p Fj(\).)-2 4599
-y Fd(F)-8 b(unctions)n(:)227 4745 y Fj(The)28 b(follo)n(wing)e
-(functions)i(are)f(a)n(v)-5 b(ailable:)340 4885 y Fi(\017)45
-b Fj(abs\(x\):)37 b(Absolute)28 b(v)-5 b(alue)27 b(of)h
-Ft(")p Fj(x)p Ft(")e Fj(\(sign)i(remo)n(v)-5 b(al\),)26
-b(same)h(as)g(fabs\(x\).)340 5020 y Fi(\017)45 b Fj(acos\(x\):)36
-b(In)n(v)n(erse)26 b(cosine)h(of)h Ft(")p Fj(x)p Ft(")p
-Fj(,)f(in)g(radians.)340 5155 y Fi(\017)45 b Fj(acosd\(x\):)36
-b(In)n(v)n(erse)26 b(cosine)h(of)h Ft(")p Fj(x)p Ft(")p
-Fj(,)f(in)h(degrees.)340 5289 y Fi(\017)45 b Fj(acosh\(x\):)36
-b(In)n(v)n(erse)26 b(h)n(yp)r(erb)r(olic)i(cosine)e(of)i
-Ft(")p Fj(x)p Ft(")p Fj(.)340 5424 y Fi(\017)45 b Fj(acoth\(x\):)37
-b(In)n(v)n(erse)26 b(h)n(yp)r(erb)r(olic)h(cotangen)n(t)g(of)g
-Ft(")p Fj(x)p Ft(")p Fj(.)340 5558 y Fi(\017)45 b Fj(acsc)n(h\(x\):)36
-b(In)n(v)n(erse)27 b(h)n(yp)r(erb)r(olic)g(cosecan)n(t)f(of)h
-Ft(")p Fj(x)p Ft(")p Fj(.)340 5693 y Fi(\017)45 b Fj(ain)n(t\(x\):)37
-b(In)n(teger)27 b(part)g(of)h Ft(")p Fj(x)p Ft(")e Fj(\(round)i(to)n(w)
-n(ards)d(zero\),)i(same)g(as)g(in)n(t\(x\).)p eop end
-%%Page: 281 291
-TeXDict begin 281 290 bop 3643 52 a FF(281)340 351 y
-Fi(\017)45 b Fj(asec)n(h\(x\):)36 b(In)n(v)n(erse)27
-b(h)n(yp)r(erb)r(olic)g(secan)n(t)f(of)i Ft(")p Fj(x)p
-Ft(")p Fj(.)340 482 y Fi(\017)45 b Fj(asin\(x\):)37 b(In)n(v)n(erse)26
-b(sine)i(of)f Ft(")p Fj(x)p Ft(")p Fj(,)g(in)h(radians.)340
-613 y Fi(\017)45 b Fj(asind\(x\):)37 b(In)n(v)n(erse)26
-b(sine)i(of)f Ft(")p Fj(x)p Ft(")p Fj(,)g(in)h(degrees.)340
-744 y Fi(\017)45 b Fj(asinh\(x\):)37 b(In)n(v)n(erse)26
-b(h)n(yp)r(erb)r(olic)h(sine)h(of)f Ft(")p Fj(x)p Ft(")p
-Fj(.)340 875 y Fi(\017)45 b Fj(atan\(x\):)37 b(In)n(v)n(erse)26
-b(tangen)n(t)h(of)h Ft(")p Fj(x)p Ft(")p Fj(,)e(in)i(radians.)340
-1007 y Fi(\017)45 b Fj(atand\(x\):)37 b(In)n(v)n(erse)26
-b(tangen)n(t)h(of)h Ft(")p Fj(x)p Ft(")p Fj(,)f(in)g(degrees.)340
-1138 y Fi(\017)45 b Fj(atanh\(x\):)37 b(In)n(v)n(erse)26
-b(h)n(yp)r(erb)r(olic)h(tangen)n(t)g(of)h Ft(")p Fj(x)p
-Ft(")p Fj(.)340 1269 y Fi(\017)45 b Fj(atan2\(x1,)27
-b(x2\):)36 b(In)n(v)n(erse)26 b(tangen)n(t)h(of)h Ft(")p
-Fj(x1/x2)p Ft(")p Fj(,)d(in)j(radians.)340 1400 y Fi(\017)45
-b Fj(atan2d\(x1,)27 b(x2\):)36 b(In)n(v)n(erse)26 b(tangen)n(t)h(of)h
-Ft(")p Fj(x1/x2)p Ft(")p Fj(,)d(in)j(degrees.)340 1531
-y Fi(\017)45 b Fj(ceil\(x\):)38 b(Smallest)27 b(in)n(teger)g(v)-5
-b(alue)27 b(not)h(less)f(then)h Ft(")p Fj(x)p Ft(")f
-Fj(\(round)g(to)n(w)n(ards)f(plus)i(in\014nit)n(y\).)340
-1662 y Fi(\017)45 b Fj(cos\(x\):)37 b(Cosine)27 b(of)g
-Ft(")p Fj(x)p Ft(")g Fj(in)h(radians.)340 1793 y Fi(\017)45
-b Fj(cosd\(x\):)37 b(Cosine)27 b(of)g Ft(")p Fj(x)p Ft(")g
-Fj(in)h(degrees.)340 1924 y Fi(\017)45 b Fj(cosh\(x\):)37
-b(Hyp)r(erb)r(olic)27 b(cosine)g(of)h Ft(")p Fj(x)p Ft(")p
-Fj(.)340 2055 y Fi(\017)45 b Fj(coth\(x\):)37 b(Hyp)r(erb)r(olic)28
-b(cotangen)n(t)f(of)g Ft(")p Fj(x)p Ft(")p Fj(.)340 2186
-y Fi(\017)45 b Fj(csc)n(h\(x\):)37 b(Hyp)r(erb)r(olic)28
-b(cosecan)n(t)e(of)h Ft(")p Fj(x)p Ft(")p Fj(.)340 2317
-y Fi(\017)45 b Fj(dim\(x1,)28 b(x2\):)37 b(Returns)27
-b Ft(")p Fj(x1-x2)p Ft(")e Fj(if)j Ft(")p Fj(x1)p Ft(")f
-Fj(is)g(greater)f(than)i Ft(")p Fj(x2)p Ft(")p Fj(,)e(otherwise)g(0.)
-340 2448 y Fi(\017)45 b Fj(exp\(x\):)37 b(Exp)r(onen)n(tial)27
-b(function)h(of)g Ft(")p Fj(x)p Ft(")p Fj(.)340 2579
-y Fi(\017)45 b Fj(fabs\(x\):)37 b(Absolute)28 b(v)-5
-b(alue)28 b(of)f Ft(")p Fj(x)p Ft(")g Fj(\(sign)g(remo)n(v)-5
-b(al\),)27 b(same)g(as)g(abs\(x\).)340 2710 y Fi(\017)45
-b Fj(\015o)r(or\(x\):)37 b(Largest)26 b(in)n(teger)g(not)i(greater)e
-(than)h Ft(")p Fj(x)p Ft(")g Fj(\(round)g(to)n(w)n(ards)f(min)n(us)i
-(in\014nit)n(y\).)340 2841 y Fi(\017)45 b Fj(fmo)r(d\(x1,)28
-b(x2\):)37 b(Remainder)27 b(when)h Ft(")p Fj(x1)p Ft(")e
-Fj(is)h(divided)h(b)n(y)f Ft(")p Fj(x2)p Ft(")p Fj(,)g(same)g(as)g(mo)r
-(d\(x1,)g(x2\).)340 2972 y Fi(\017)45 b Fj(gauss\(x1,)30
-b(x2\):)42 b(Random)29 b(sample)h(from)g(a)g(Gaussian)f(distribution)i
-(with)g(mean)f Ft(")p Fj(x1)p Ft(")e Fj(and)j(standard)427
-3072 y(deviation)c Ft(")p Fj(x2)p Ft(")p Fj(.)340 3203
-y Fi(\017)45 b Fj(in)n(t\(x\):)38 b(In)n(teger)26 b(part)h(of)h
-Ft(")p Fj(x)p Ft(")f Fj(\(round)g(to)n(w)n(ards)f(zero\),)h(same)g(as)g
-(ain)n(t\(x\).)340 3334 y Fi(\017)45 b Fj(isbad\(x\):)37
-b(Returns)28 b(1)f(if)h Ft(")p Fj(x)p Ft(")f Fj(has)g(the)h
-Fl(<)p Fj(bad)p Fl(>)e Fj(v)-5 b(alue)28 b(\(AST)p Ft(__)p
-Fj(BAD\),)g(otherwise)f(0.)340 3465 y Fi(\017)45 b Fj(log\(x\):)37
-b(Natural)27 b(logarithm)f(of)i Ft(")p Fj(x)p Ft(")p
-Fj(.)340 3596 y Fi(\017)45 b Fj(log10\(x\):)36 b(Logarithm)26
-b(of)i Ft(")p Fj(x)p Ft(")e Fj(to)i(base)f(10.)340 3727
-y Fi(\017)45 b Fj(max\(x1,)27 b(x2,)g(...\):)38 b(Maxim)n(um)27
-b(of)h(t)n(w)n(o)e(or)h(more)g(v)-5 b(alues.)340 3858
-y Fi(\017)45 b Fj(min\(x1,)28 b(x2,)f(...\):)37 b(Minim)n(um)29
-b(of)e(t)n(w)n(o)g(or)g(more)g(v)-5 b(alues.)340 3989
-y Fi(\017)45 b Fj(mo)r(d\(x1,)28 b(x2\):)36 b(Remainder)27
-b(when)h Ft(")p Fj(x1)p Ft(")e Fj(is)i(divided)g(b)n(y)f
-Ft(")p Fj(x2)p Ft(")p Fj(,)f(same)h(as)g(fmo)r(d\(x1,)h(x2\).)340
-4120 y Fi(\017)45 b Fj(nin)n(t\(x\):)38 b(Nearest)27
-b(in)n(teger)f(to)i Ft(")p Fj(x)p Ft(")f Fj(\(round)g(to)g(nearest\).)
-340 4251 y Fi(\017)45 b Fj(p)r(oisson\(x\):)37 b(Random)27
-b(in)n(teger-v)-5 b(alued)26 b(sample)h(from)h(a)f(P)n(oisson)e
-(distribution)j(with)g(mean)g Ft(")p Fj(x)p Ft(")p Fj(.)340
-4382 y Fi(\017)45 b Fj(p)r(o)n(w\(x1,)27 b(x2\):)37 b
-Ft(")p Fj(x1)p Ft(")26 b Fj(raised)h(to)g(the)h(p)r(o)n(w)n(er)e(of)i
-Ft(")p Fj(x2)p Ft(")p Fj(.)340 4514 y Fi(\017)45 b Fj(qif\(x1,)28
-b(x2,)f(x3\):)37 b(Returns)27 b Ft(")p Fj(x2)p Ft(")f
-Fj(if)i Ft(")p Fj(x1)p Ft(")e Fj(is)i(true,)f(and)h Ft(")p
-Fj(x3)p Ft(")e Fj(otherwise.)340 4645 y Fi(\017)45 b
-Fj(rand\(x1,)21 b(x2\):)33 b(Random)19 b(sample)h(from)g(a)f(uniform)h
-(distribution)g(in)h(the)f(range)f Ft(")p Fj(x1)p Ft(")f
-Fj(to)i Ft(")p Fj(x2)p Ft(")f Fj(inclusiv)n(e.)340 4776
-y Fi(\017)45 b Fj(sec)n(h\(x\):)37 b(Hyp)r(erb)r(olic)28
-b(secan)n(t)e(of)i Ft(")p Fj(x)p Ft(")p Fj(.)340 4907
-y Fi(\017)45 b Fj(sign\(x1,)27 b(x2\):)37 b(Absolute)27
-b(v)-5 b(alue)28 b(of)f Ft(")p Fj(x1)p Ft(")g Fj(with)h(the)g(sign)f
-(of)g Ft(")p Fj(x2)p Ft(")f Fj(\(transfer)h(of)h(sign\).)340
-5038 y Fi(\017)45 b Fj(sin\(x\):)38 b(Sine)27 b(of)h
-Ft(")p Fj(x)p Ft(")f Fj(in)h(radians.)340 5169 y Fi(\017)45
-b Fj(sinc\(x\):)37 b(Sinc)28 b(function)h(of)e Ft(")p
-Fj(x)p Ft(")g Fj([=)g Ft(")p Fj(sin\(x\)/x)p Ft(")p Fj(].)340
-5300 y Fi(\017)45 b Fj(sind\(x\):)38 b(Sine)28 b(of)f
-Ft(")p Fj(x)p Ft(")g Fj(in)h(degrees.)340 5431 y Fi(\017)45
-b Fj(sinh\(x\):)38 b(Hyp)r(erb)r(olic)27 b(sine)h(of)f
-Ft(")p Fj(x)p Ft(")p Fj(.)340 5562 y Fi(\017)45 b Fj(sqr\(x\):)37
-b(Square)26 b(of)i Ft(")p Fj(x)p Ft(")f Fj(\(=)g Ft(")p
-Fj(x)p Fi(\003)p Fj(x)p Ft(")p Fj(\).)340 5693 y Fi(\017)45
-b Fj(sqrt\(x\):)37 b(Square)27 b(ro)r(ot)f(of)i Ft(")p
-Fj(x)p Ft(")p Fj(.)p eop end
-%%Page: 282 292
-TeXDict begin 282 291 bop 0 52 a FF(282)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(tan\(x\):)38 b(T)-7 b(angen)n(t)26 b(of)i Ft(")p
-Fj(x)p Ft(")f Fj(in)g(radians.)340 485 y Fi(\017)45 b
-Fj(tand\(x\):)38 b(T)-7 b(angen)n(t)27 b(of)g Ft(")p
-Fj(x)p Ft(")g Fj(in)h(degrees.)340 619 y Fi(\017)45 b
-Fj(tanh\(x\):)38 b(Hyp)r(erb)r(olic)27 b(tangen)n(t)g(of)h
-Ft(")p Fj(x)p Ft(")p Fj(.)-2 783 y Fd(Sym)m(b)s(olic)j(Constan)m(ts)n
-(:)227 929 y Fj(The)c(follo)n(wing)e(sym)n(b)r(olic)h(constan)n(ts)g
-(are)g(a)n(v)-5 b(ailable)25 b(\(the)i(enclosing)f Ft(")p
-Fl(<>)p Ft(")f Fj(brac)n(k)n(ets)f(m)n(ust)j(b)r(e)g(included\):)340
-1068 y Fi(\017)45 b Fl(<)p Fj(bad)p Fl(>)p Fj(:)51 b(The)35
-b Ft(")p Fj(bad)p Ft(")e Fj(v)-5 b(alue)35 b(\(AST)p
-Ft(__)p Fj(BAD\))h(used)f(to)f(\015ag)g(missing)h(data.)58
-b(Note)35 b(that)g(y)n(ou)f(cannot)427 1168 y(usefully)28
-b(compare)f(v)-5 b(alues)27 b(with)i(this)f(constan)n(t)f(b)r(ecause)g
-(the)i(result)e(is)h(alw)n(a)n(ys)e Fl(<)p Fj(bad)p Fl(>)p
-Fj(.)36 b(The)28 b(isbad\(\))427 1267 y(function)g(should)g(b)r(e)g
-(used)f(instead.)340 1401 y Fi(\017)45 b Fl(<)p Fj(dig)p
-Fl(>)p Fj(:)36 b(Num)n(b)r(er)28 b(of)f(decimal)h(digits)f(of)h
-(precision)e(a)n(v)-5 b(ailable)27 b(in)h(a)f(\015oating)g(p)r(oin)n(t)
-g(\(double\))h(v)-5 b(alue.)340 1535 y Fi(\017)45 b Fl(<)p
-Fj(e)p Fl(>)p Fj(:)36 b(Base)27 b(of)g(natural)g(logarithms.)340
-1669 y Fi(\017)45 b Fl(<)p Fj(epsilon)p Fl(>)p Fj(:)35
-b(Smallest)24 b(p)r(ositiv)n(e)h(n)n(um)n(b)r(er)f(suc)n(h)h(that)g
-(1.0+)p Fl(<)p Fj(epsilon)p Fl(>)d Fj(is)j(distinguishable)g(from)f
-(unit)n(y)-7 b(.)340 1803 y Fi(\017)45 b Fl(<)p Fj(man)n(t)p
-Ft(_)p Fj(dig)p Fl(>)p Fj(:)37 b(The)29 b(n)n(um)n(b)r(er)f(of)g(base)g
-Fl(<)p Fj(radix)p Fl(>)f Fj(digits)h(stored)g(in)g(the)h(man)n(tissa)e
-(of)i(a)f(\015oating)f(p)r(oin)n(t)427 1903 y(\(double\))h(v)-5
-b(alue.)340 2036 y Fi(\017)45 b Fl(<)p Fj(max)p Fl(>)p
-Fj(:)36 b(Maxim)n(um)27 b(represen)n(table)f(\015oating)h(p)r(oin)n(t)h
-(\(double\))g(v)-5 b(alue.)340 2170 y Fi(\017)45 b Fl(<)p
-Fj(max)p Ft(_)p Fj(10)p Ft(_)p Fj(exp)p Fl(>)p Fj(:)37
-b(Maxim)n(um)28 b(in)n(teger)h(suc)n(h)f(that)h(10)g(raised)f(to)g
-(that)i(p)r(o)n(w)n(er)d(can)i(b)r(e)g(represen)n(ted)f(as)427
-2270 y(a)f(\015oating)g(p)r(oin)n(t)h(\(double\))g(v)-5
-b(alue.)340 2404 y Fi(\017)45 b Fl(<)p Fj(max)p Ft(_)p
-Fj(exp)p Fl(>)p Fj(:)56 b(Maxim)n(um)38 b(in)n(teger)f(suc)n(h)g(that)h
-Fl(<)p Fj(radix)p Fl(>)f Fj(raised)f(to)i(that)h(p)r(o)n(w)n(er)d(min)n
-(us)i(1)g(can)f(b)r(e)427 2504 y(represen)n(ted)27 b(as)g(a)g
-(\015oating)g(p)r(oin)n(t)g(\(double\))h(v)-5 b(alue.)340
-2637 y Fi(\017)45 b Fl(<)p Fj(min)p Fl(>)p Fj(:)h(Smallest)32
-b(p)r(ositiv)n(e)f(n)n(um)n(b)r(er)h(whic)n(h)g(can)g(b)r(e)g(represen)
-n(ted)f(as)h(a)f(normalised)g(\015oating)g(p)r(oin)n(t)427
-2737 y(\(double\))d(v)-5 b(alue.)340 2871 y Fi(\017)45
-b Fl(<)p Fj(min)p Ft(_)p Fj(10)p Ft(_)p Fj(exp)p Fl(>)p
-Fj(:)39 b(Minim)n(um)30 b(negativ)n(e)e(in)n(teger)h(suc)n(h)g(that)h
-(10)f(raised)f(to)i(that)f(p)r(o)n(w)n(er)g(can)g(b)r(e)h(repre-)427
-2971 y(sen)n(ted)e(as)f(a)g(normalised)f(\015oating)h(p)r(oin)n(t)h
-(\(double\))g(v)-5 b(alue.)340 3105 y Fi(\017)45 b Fl(<)p
-Fj(min)p Ft(_)p Fj(exp)p Fl(>)p Fj(:)35 b(Minim)n(um)25
-b(negativ)n(e)e(in)n(teger)h(suc)n(h)g(that)h Fl(<)p
-Fj(radix)p Fl(>)e Fj(raised)h(to)g(that)h(p)r(o)n(w)n(er)e(min)n(us)i
-(1)f(can)427 3204 y(b)r(e)k(represen)n(ted)f(as)g(a)g(normalised)f
-(\015oating)h(p)r(oin)n(t)h(\(double\))g(v)-5 b(alue.)340
-3338 y Fi(\017)45 b Fl(<)p Fj(pi)p Fl(>)p Fj(:)37 b(Ratio)27
-b(of)g(the)h(circumference)f(of)h(a)f(circle)g(to)g(its)h(diameter.)340
-3472 y Fi(\017)45 b Fl(<)p Fj(radix)p Fl(>)p Fj(:)35
-b(The)26 b(radix)g(\(n)n(um)n(b)r(er)h(base\))f(used)g(to)h(represen)n
-(t)e(the)i(man)n(tissa)e(of)i(\015oating)e(p)r(oin)n(t)i(\(double\))427
-3572 y(v)-5 b(alues.)340 3706 y Fi(\017)45 b Fl(<)p Fj(rounds)p
-Fl(>)p Fj(:)35 b(The)26 b(mo)r(de)g(used)g(for)f(rounding)g(\015oating)
-g(p)r(oin)n(t)h(results)g(after)f(addition.)37 b(P)n(ossible)24
-b(v)-5 b(alues)427 3805 y(include:)49 b(-1)32 b(\(indeterminate\),)k(0)
-d(\(to)n(w)n(ard)f(zero\),)h(1)g(\(to)h(nearest\),)g(2)f(\(to)n(w)n
-(ard)f(plus)h(in\014nit)n(y\))h(and)f(3)427 3905 y(\(to)n(w)n(ard)27
-b(min)n(us)g(in\014nit)n(y\).)38 b(Other)27 b(v)-5 b(alues)27
-b(indicate)h(mac)n(hine-dep)r(enden)n(t)f(b)r(eha)n(viour.)-2
-4069 y Fd(Ev)-5 b(aluation)32 b(Precedence)g(and)h(Asso)s(ciativit)m(y)
-n(:)227 4215 y Fj(Items)28 b(app)r(earing)e(in)i(expressions)e(are)h
-(ev)-5 b(aluated)27 b(in)h(the)g(follo)n(wing)e(order)h(\(highest)g
-(precedence)g(\014rst\):)340 4354 y Fi(\017)45 b Fj(Constan)n(ts)27
-b(and)g(v)-5 b(ariables)340 4488 y Fi(\017)45 b Fj(F)-7
-b(unction)28 b(argumen)n(ts)f(and)g(paren)n(thesised)f(expressions)340
-4622 y Fi(\017)45 b Fj(F)-7 b(unction)28 b(in)n(v)n(o)r(cations)340
-4755 y Fi(\017)45 b Fj(Unary)27 b(+)g(-)h(!)37 b(.not.)340
-4889 y Fi(\017)45 b(\003\003)340 5023 y(\017)g(\003)27
-b Fj(/)340 5157 y Fi(\017)45 b Fj(+)28 b(-)340 5291 y
-Fi(\017)45 b Fl(<<)27 b(>>)340 5425 y Fi(\017)45 b Fl(<)28
-b Fj(.lt.)37 b Fl(<)p Fj(=)27 b(.le.)37 b Fl(>)27 b Fj(.gt.)37
-b Fl(>)p Fj(=)27 b(.ge.)340 5559 y Fi(\017)45 b Fj(==)27
-b(.eq.)37 b(!=)27 b(.ne.)340 5693 y Fi(\017)45 b Fj(&)p
-eop end
-%%Page: 283 293
-TeXDict begin 283 292 bop 3643 52 a FF(283)340 351 y
-Fi(\017)45 b(^)340 484 y(\017)g(j)340 616 y(\017)g Fj(&&)27
-b(.and.)340 749 y Fi(\017)45 b(^^)340 882 y(\017)g(jj)28
-b Fj(.or)340 1014 y Fi(\017)45 b Fj(.eqv.)37 b(.neqv.)g(.xor.)227
-1176 y(All)j(op)r(erators)e(asso)r(ciate)g(from)i(left-to-righ)n(t,)h
-(except)f(for)f(unary)g(+,)j(unary)d(-,)k(!,)f(.not.)73
-b(and)40 b Fi(\003\003)f Fj(whic)n(h)227 1276 y(asso)r(ciate)26
-b(from)i(righ)n(t-to-left.)p 0 1474 3780 12 v 0 1606
-a Fz(astMatrixMap)1361 1605 y Fe(Create)38 b(a)g(MatrixMap)2933
-1606 y Fz(astMatrixMap)0 1795 y Fd(Description:)44 b
-Fj(This)28 b(function)g(creates)f(a)g(new)g(MatrixMap)g(and)h
-(optionally)e(initialises)i(its)f(attributes.)227 1919
-y(A)32 b(MatrixMap)e(is)h(a)f(form)h(of)g(Mapping)g(whic)n(h)g(p)r
-(erforms)f(a)g(general)g(linear)g(transformation.)46
-b(Eac)n(h)30 b(set)h(of)227 2019 y(input)j(co)r(ordinates,)g(regarded)d
-(as)i(a)g(column-v)n(ector,)g(are)f(pre-m)n(ultiplied)h(b)n(y)g(a)g
-(matrix)g(\(whose)g(elemen)n(ts)227 2118 y(are)c(sp)r(eci\014ed)h(when)
-g(the)g(MatrixMap)f(is)g(created\))g(to)h(giv)n(e)e(a)i(new)f(column-v)
-n(ector)f(con)n(taining)h(the)h(output)227 2218 y(co)r(ordinates.)36
-b(If)28 b(appropriate,)e(the)i(in)n(v)n(erse)e(transformation)g(ma)n(y)
-h(also)f(b)r(e)i(p)r(erformed.)0 2367 y Fd(Synopsis:)121
-b Ft(AstMatrixMap)38 b Fi(\003)p Ft(astMatrixMap\()g(int)43
-b(nin,)e(int)i(nout,)e(int)i(form,)e(const)h(double)f(matrix[],)227
-2467 y(const)h(char)g Fi(\003)p Ft(options,)e(...)85
-b(\))0 2616 y Fd(P)m(arameters:)259 2752 y(nin)427 2852
-y Fj(The)28 b(n)n(um)n(b)r(er)f(of)h(input)g(co)r(ordinates,)e(whic)n
-(h)i(determines)f(the)h(n)n(um)n(b)r(er)g(of)f(columns)h(in)f(the)h
-(matrix.)259 2984 y Fd(nout)427 3084 y Fj(The)g(n)n(um)n(b)r(er)f(of)h
-(output)g(co)r(ordinates,)e(whic)n(h)i(determines)f(the)h(n)n(um)n(b)r
-(er)f(of)h(ro)n(ws)e(in)i(the)g(matrix.)259 3217 y Fd(form)427
-3316 y Fj(An)g(in)n(teger)f(whic)n(h)h(indicates)f(the)h(form)f(in)h
-(whic)n(h)g(the)g(matrix)f(elemen)n(ts)g(will)h(b)r(e)g(supplied.)427
-3432 y(A)g(v)-5 b(alue)27 b(of)g(zero)f(indicates)h(that)h(a)f(full)h
-Ft(")p Fj(nout)p Ft(")e Fj(x)h Ft(")p Fj(nin)p Ft(")g
-Fj(matrix)g(of)g(v)-5 b(alues)27 b(will)g(b)r(e)h(supplied)g(via)e(the)
-427 3532 y Ft(")p Fj(matrix)p Ft(")33 b Fj(parameter)g(\(b)r(elo)n
-(w\).)56 b(In)34 b(this)g(case,)h(the)g(elemen)n(ts)f(should)f(b)r(e)i
-(giv)n(en)e(in)h(ro)n(w)f(order)g(\(the)427 3632 y(elemen)n(ts)28
-b(of)f(the)h(\014rst)g(ro)n(w,)e(follo)n(w)n(ed)h(b)n(y)g(the)h(elemen)
-n(ts)f(of)h(the)g(second)f(ro)n(w,)f(etc.\).)427 3748
-y(A)34 b(v)-5 b(alue)34 b(of)g(1)f(indicates)g(that)h(only)f(the)i
-(diagonal)d(elemen)n(ts)h(of)h(the)g(matrix)f(will)h(b)r(e)g(supplied,)
-i(and)427 3847 y(that)26 b(all)g(others)e(should)i(b)r(e)g(zero.)35
-b(In)26 b(this)g(case,)f(the)h(elemen)n(ts)g(of)f Ft(")p
-Fj(matrix)p Ft(")g Fj(should)g(con)n(tain)g(only)g(the)427
-3947 y(diagonal)h(elemen)n(ts,)i(stored)f(consecutiv)n(ely)-7
-b(.)427 4063 y(A)32 b(v)-5 b(alue)32 b(of)f(2)h(indicates)f(that)h(a)f
-Ft(")p Fj(unit)p Ft(")h Fj(matrix)f(is)g(required,)h(whose)f(diagonal)f
-(elemen)n(ts)h(are)g(set)h(to)427 4163 y(unit)n(y)f(\(with)h(all)f
-(other)f(elemen)n(ts)h(zero\).)46 b(In)32 b(this)f(case,)g(the)g
-Ft(")p Fj(matrix)p Ft(")f Fj(parameter)f(is)i(ignored)f(and)h(a)427
-4262 y(NULL)d(p)r(oin)n(ter)f(ma)n(y)g(b)r(e)h(supplied.)259
-4395 y Fd(matrix)427 4495 y Fj(The)g(arra)n(y)d(of)j(matrix)f(elemen)n
-(ts)g(to)h(b)r(e)g(used,)f(stored)g(according)f(to)h(the)h(v)-5
-b(alue)28 b(of)f Ft(")p Fj(form)p Ft(")p Fj(.)259 4627
-y Fd(options)427 4727 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n(ull-terminated)
-g(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)
-g(attribute)427 4826 y(assignmen)n(ts)i(to)g(b)r(e)h(used)g(for)f
-(initialising)h(the)g(new)g(MatrixMap.)45 b(The)31 b(syn)n(tax)f(used)h
-(is)f(iden)n(tical)h(to)427 4926 y(that)38 b(for)e(the)i(astSet)f
-(function)h(and)f(ma)n(y)f(include)i Ft(")p Fj(prin)n(tf)p
-Ft(")e Fj(format)h(sp)r(eci\014ers)g(iden)n(ti\014ed)g(b)n(y)g
-Ft(")p Fj(\045)p Ft(")427 5026 y Fj(sym)n(b)r(ols)27
-b(in)h(the)g(normal)f(w)n(a)n(y)-7 b(.)259 5158 y Fd(...)427
-5258 y Fj(If)38 b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n
-(tains)f Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f
-(an)f(optional)g(list)h(of)f(additional)427 5358 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 5457 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 5557 y Fj(function\).)0
-5718 y Fd(Returned)32 b(V)-8 b(alue:)p eop end
-%%Page: 284 294
-TeXDict begin 284 293 bop 0 52 a FF(284)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(astMatrixMap\(\))427
-451 y Fj(A)e(p)r(oin)n(ter)f(to)h(the)g(new)g(MatrixMap.)0
-628 y Fd(Notes:)340 925 y Fi(\017)45 b Fj(In)32 b(general,)e(a)h
-(MatrixMap's)f(forw)n(ard)g(transformation)f(will)j(alw)n(a)n(ys)d(b)r
-(e)j(a)n(v)-5 b(ailable)30 b(\(as)h(indicated)g(b)n(y)427
-1024 y(its)h(T)-7 b(ranF)g(orw)n(ard)29 b(attribute\),)k(but)f(its)f
-(in)n(v)n(erse)f(transformation)g(\(T)-7 b(ranIn)n(v)n(erse)29
-b(attribute\))j(will)g(only)427 1124 y(b)r(e)c(a)n(v)-5
-b(ailable)27 b(if)h(the)g(asso)r(ciated)e(matrix)h(is)g(square)g(and)g
-(non-singular.)340 1264 y Fi(\017)45 b Fj(As)32 b(an)f(exception)f(to)i
-(this,)g(the)g(in)n(v)n(erse)d(transformation)h(is)h(alw)n(a)n(ys)e(a)n
-(v)-5 b(ailable)30 b(if)i(a)f(unit)h(or)e(diagonal)427
-1364 y(matrix)19 b(is)g(sp)r(eci\014ed.)35 b(In)19 b(this)h(case,)g(if)
-g(the)g(matrix)f(is)g(not)h(square,)f(one)g(or)g(more)f(of)i(the)g
-(input)g(co)r(ordinate)427 1463 y(v)-5 b(alues)28 b(ma)n(y)f(not)h(b)r
-(e)g(reco)n(v)n(erable)d(from)i(a)g(set)h(of)g(output)g(co)r
-(ordinates.)36 b(An)n(y)28 b(co)r(ordinates)e(a\013ected)i(in)427
-1563 y(this)g(w)n(a)n(y)f(will)g(simply)h(b)r(e)g(set)g(to)f(the)h(v)-5
-b(alue)28 b(zero.)340 1703 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 1803 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 1980 y Fd(Status)33
-b(Handling)n(:)227 2126 y Fj(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 2225 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fj(in)n(t)227 2325 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p
-0 2539 3780 12 v 0 2670 a Fz(astNegate)848 2671 y Fe(Negate)38
-b(the)g(area)g(represen)m(ted)f(b)m(y)i(a)g(Region)3196
-2670 y Fz(astNegate)0 2874 y Fd(Description:)44 b Fj(This)d(function)f
-(negates)g(the)g(area)f(represen)n(ted)g(b)n(y)h(a)g(Region.)74
-b(That)40 b(is,)j(p)r(oin)n(ts)d(whic)n(h)h(w)n(ere)227
-2974 y(previously)22 b(inside)h(the)h(region)e(will)h(then)h(b)r(e)f
-(outside,)h(and)f(p)r(oin)n(ts)g(whic)n(h)g(w)n(ere)f(outside)h(will)h
-(b)r(e)f(inside.)36 b(This)227 3073 y(is)28 b(acomplished)f(b)n(y)g
-(toggling)f(the)i(state)g(of)f(the)h(Negated)f(attribute)h(for)f(the)h
-(supplied)g(region.)0 3237 y Fd(Synopsis:)121 b Ft(void)42
-b(astNegate\()d(AstRegion)h Fi(\003)p Ft(this)i(\))0
-3402 y Fd(P)m(arameters:)259 3553 y(this)427 3652 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Region.)p 0 3866 V 0 3997 a Fz(astNorm)937
-3998 y Fe(Normalise)36 b(a)j(set)f(of)h(F)-10 b(rame)38
-b(co)s(ordinates)3269 3997 y Fz(astNorm)0 4178 y Fd(Description:)44
-b Fj(This)29 b(function)g(normalises)e(a)h(set)h(of)f(F)-7
-b(rame)28 b(co)r(ordinate)f(v)-5 b(alues)29 b(whic)n(h)f(migh)n(t)h(b)r
-(e)f(unsuitable)h(for)227 4278 y(displa)n(y)23 b(\(e.g.)35
-b(ma)n(y)22 b(lie)h(outside)g(the)h(exp)r(ected)f(range\))f(in)n(to)h
-(a)g(set)g(of)g(acceptable)f(v)-5 b(alues)23 b(suitable)g(for)f(displa)
-n(y)-7 b(.)0 4442 y Fd(Synopsis:)121 b Ft(void)42 b(astNorm\()e
-(AstFrame)g Fi(\003)p Ft(this,)h(double)g(value[])g(\))0
-4606 y Fd(P)m(arameters:)259 4757 y(this)427 4857 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rame.)259 4997 y Fd(v)i(alue)427
-5097 y Fj(An)33 b(arra)n(y)c(of)j(double,)h(with)g(one)e(elemen)n(t)h
-(for)g(eac)n(h)f(F)-7 b(rame)31 b(axis)g(\(Naxes)h(attribute\).)50
-b(Initially)-7 b(,)33 b(this)427 5197 y(should)c(con)n(tain)g(a)f(set)h
-(of)g(co)r(ordinate)f(v)-5 b(alues)29 b(represen)n(ting)f(a)g(p)r(oin)n
-(t)h(in)h(the)f(space)g(whic)n(h)g(the)g(F)-7 b(rame)427
-5296 y(describ)r(es.)38 b(If)28 b(these)g(v)-5 b(alues)28
-b(lie)g(outside)f(the)i(exp)r(ected)f(range)f(for)g(the)h(F)-7
-b(rame,)28 b(they)g(will)g(b)r(e)g(replaced)427 5396
-y(with)g(more)f(acceptable)g(\(normalised\))g(v)-5 b(alues.)37
-b(Otherwise,)26 b(they)i(will)g(b)r(e)g(returned)f(unc)n(hanged.)0
-5572 y Fd(Notes:)p eop end
-%%Page: 285 295
-TeXDict begin 285 294 bop 3643 52 a FF(285)340 351 y
-Fi(\017)45 b Fj(F)-7 b(or)34 b(some)f(classes)g(of)h(F)-7
-b(rame,)36 b(whose)d(co)r(ordinate)g(v)-5 b(alues)34
-b(are)f(not)h(constrained,)h(this)g(function)f(will)427
-451 y(nev)n(er)d(mo)r(dify)h(the)g(v)-5 b(alues)31 b(supplied.)49
-b(Ho)n(w)n(ev)n(er,)31 b(for)g(F)-7 b(rames)30 b(whose)h(axes)g
-(represen)n(t)f(cyclic)h(quan)n(ti-)427 551 y(ties)i(\(suc)n(h)f(as)f
-(angles)h(or)f(p)r(ositions)h(on)g(the)g(sky\),)h(co)r(ordinates)e
-(will)i(t)n(ypically)e(b)r(e)i(wrapp)r(ed)f(in)n(to)g(an)427
-650 y(appropriate)26 b(standard)h(range,)f(suc)n(h)h(as)g(zero)g(to)g
-(2)p Fi(\003)p Fj(pi.)340 791 y Fi(\017)45 b Fj(The)31
-b(NormMap)e(class)h(is)g(a)g(Mapping)f(whic)n(h)i(can)f(b)r(e)g(used)h
-(to)f(normalise)f(a)h(set)g(of)g(p)r(oin)n(ts)g(using)g(the)427
-891 y(astNorm)d(function)h(of)g(a)f(sp)r(eci\014ed)h(F)-7
-b(rame.)340 1031 y Fi(\017)45 b Fj(It)28 b(is)f(in)n(tended)h(to)g(b)r
-(e)f(p)r(ossible)h(to)f(put)h(an)n(y)f(set)g(of)h(co)r(ordinates)e(in)n
-(to)h(a)g(form)g(suitable)g(for)g(displa)n(y)g(b)n(y)427
-1131 y(using)d(this)h(function)g(to)f(normalise)f(them,)i(follo)n(w)n
-(ed)f(b)n(y)g(appropriate)e(formatting)i(\(using)g(astF)-7
-b(ormat\).)p 0 1346 3780 12 v 0 1477 a Fz(astNormMap)615
-b Fe(Create)37 b(a)i(NormMap)613 b Fz(astNormMap)0 1682
-y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(NormMap)g(and)h(optionally)e(initialises)i(its)g(attributes.)227
-1814 y(A)i(NormMap)f(is)h(a)f(Mapping)g(whic)n(h)h(normalises)e(co)r
-(ordinate)h(v)-5 b(alues)29 b(using)g(the)i(astNorm)d(function)j(of)e
-(the)227 1914 y(supplied)g(F)-7 b(rame.)39 b(The)29 b(n)n(um)n(b)r(er)f
-(of)g(inputs)h(and)f(outputs)h(of)g(a)f(NormMap)f(are)h(b)r(oth)h
-(equal)f(to)g(the)h(n)n(um)n(b)r(er)227 2013 y(of)f(axes)e(in)i(the)g
-(supplied)g(F)-7 b(rame.)227 2146 y(The)34 b(forw)n(ard)e(and)h(in)n(v)
-n(erse)f(transformation)g(of)i(a)f(NormMap)g(are)f(b)r(oth)i(de\014ned)
-g(but)g(are)f(iden)n(tical)g(\(that)227 2246 y(is,)43
-b(they)c(do)g(not)h(form)f(a)g(real)g(in)n(v)n(erse)f(pair)g(in)i(that)
-g(the)g(in)n(v)n(erse)d(transformation)h(do)r(es)h(not)h(undo)f(the)227
-2345 y(normalisation,)24 b(instead)h(it)h(reapplies)e(it\).)36
-b(Ho)n(w)n(ev)n(er,)24 b(the)h(astSimplify)h(function)g(will)f(replace)
-f(neigh)n(b)r(ouring)227 2445 y(pairs)j(of)g(forw)n(ard)f(and)i(in)n(v)
-n(erse)e(NormMaps)h(b)n(y)g(a)g(single)g(UnitMap.)0 2610
-y Fd(Synopsis:)121 b Ft(AstNormMap)39 b Fi(\003)p Ft(astNormMap\()g
-(AstFrame)h Fi(\003)p Ft(frame,)h(const)g(char)h Fi(\003)p
-Ft(options,)e(...)86 b(\))0 2776 y Fd(P)m(arameters:)259
-2928 y(frame)427 3028 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(F)-7
-b(rame)27 b(whic)n(h)g(is)h(to)f(b)r(e)h(used)g(to)f(normalise)g(the)h
-(supplied)g(axis)e(v)-5 b(alues.)259 3168 y Fd(options)427
-3268 y Fj(P)n(oin)n(ter)27 b(to)h(a)g(n)n(ull-terminated)g(string)f
-(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g
-(attribute)427 3368 y(assignmen)n(ts)21 b(to)g(b)r(e)h(used)g(for)f
-(initialising)g(the)h(new)g(NormMap.)34 b(The)22 b(syn)n(tax)e(used)i
-(is)f(iden)n(tical)h(to)f(that)427 3467 y(for)26 b(the)h(astSet)g
-(function)g(and)g(ma)n(y)f(include)h Ft(")p Fj(prin)n(tf)p
-Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n(ti\014ed)h(b)n(y)f
-Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427 3567 y(in)i(the)g(normal)f
-(w)n(a)n(y)-7 b(.)259 3708 y Fd(...)427 3807 y Fj(If)38
-b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 3907 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 4007 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 4106 y Fj(function\).)0
-4284 y Fd(Returned)32 b(V)-8 b(alue:)259 4436 y(astNormMap\(\))427
-4536 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(NormMap.)0
-4714 y Fd(Notes:)340 5012 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 5112 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 5290 y Fd(Status)33
-b(Handling)n(:)227 5436 y Fj(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 5536 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fj(in)n(t)227 5635 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p
-eop end
-%%Page: 286 296
-TeXDict begin 286 295 bop 0 52 a FF(286)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astNullRegion)536 b Fe(Create)37 b(a)i(NullRegion)531
-b Fz(astNullRegion)0 713 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(NullRegion)h(and)f(optionally)g
-(initialises)g(its)h(attributes.)227 859 y(A)k(NullRegion)f(is)f(a)h
-(Region)g(with)g(no)g(b)r(ounds.)47 b(If)32 b(the)f(Negated)g
-(attribute)g(of)g(a)g(NullRegion)g(is)g(false,)g(the)227
-958 y(NullRegion)k(represen)n(ts)f(a)g(Region)g(con)n(taining)g(no)h(p)
-r(oin)n(ts.)59 b(If)35 b(the)h(Negated)e(attribute)h(of)g(a)g
-(NullRegion)227 1058 y(is)f(true,)h(the)f(NullRegion)f(represen)n(ts)f
-(an)h(in\014nite)i(Region)d(con)n(taining)h(all)g(p)r(oin)n(ts)h
-(within)g(the)g(co)r(ordinate)227 1158 y(system.)0 1349
-y Fd(Synopsis:)121 b Ft(AstNullRegion)38 b Fi(\003)p
-Ft(astNullRegion\()f(AstFrame)k Fi(\003)p Ft(frame,)f(AstRegion)g
-Fi(\003)p Ft(unc,)i(const)f(char)h Fi(\003)p Ft(options,)227
-1448 y(...)86 b(\))0 1640 y Fd(P)m(arameters:)259 1818
-y(frame)427 1917 y Fj(A)29 b(p)r(oin)n(ter)g(to)f(the)i(F)-7
-b(rame)28 b(in)h(whic)n(h)g(the)g(region)e(is)i(de\014ned.)41
-b(A)29 b(deep)g(cop)n(y)f(is)g(tak)n(en)g(of)h(the)g(supplied)427
-2017 y(F)-7 b(rame.)71 b(This)39 b(means)f(that)h(an)n(y)g(subsequen)n
-(t)f(c)n(hanges)g(made)h(to)f(the)i(F)-7 b(rame)38 b(using)h(the)g
-(supplied)427 2117 y(p)r(oin)n(ter)27 b(will)h(ha)n(v)n(e)f(no)g
-(e\013ect)h(the)g(Region.)259 2270 y Fd(unc)427 2370
-y Fj(An)33 b(optional)e(p)r(oin)n(ter)h(to)g(an)g(existing)g(Region)f
-(whic)n(h)h(sp)r(eci\014es)g(the)h(uncertain)n(ties)e(asso)r(ciated)g
-(with)427 2469 y(p)r(ositions)37 b(in)h(the)g(supplied)g(F)-7
-b(rame.)65 b(The)38 b(uncertain)n(t)n(y)e(in)i(an)n(y)f(p)r(oin)n(t)g
-(in)h(the)g(F)-7 b(rame)37 b(is)g(found)h(b)n(y)427 2569
-y(shifting)25 b(the)f(supplied)g Ft(")p Fj(uncertain)n(t)n(y)p
-Ft(")f Fj(Region)g(so)g(that)h(it)h(is)f(cen)n(tred)f(at)h(the)g(p)r
-(oin)n(t)g(b)r(eing)h(considered.)427 2669 y(The)34 b(area)e(co)n(v)n
-(ered)g(b)n(y)i(the)g(shifted)g(uncertain)n(t)n(y)f(Region)g(then)i
-(represen)n(ts)d(the)i(uncertain)n(t)n(y)f(in)h(the)427
-2768 y(p)r(osition.)j(The)28 b(uncertain)n(t)n(y)e(is)i(assumed)f(to)g
-(b)r(e)h(the)g(same)f(for)g(all)h(p)r(oin)n(ts.)427 2895
-y(If)38 b(supplied,)j(the)d(uncertain)n(t)n(y)f(Region)g(m)n(ust)g(b)r
-(e)i(of)e(a)g(class)g(for)g(whic)n(h)h(all)f(instances)g(are)g(cen)n
-(tro-)427 2995 y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24
-b(Circle,)g(Ellipse,)h(etc.\))36 b(or)23 b(b)r(e)i(a)e(Prism)h(con)n
-(taining)f(cen)n(tro-symetric)f(comp)r(onen)n(t)427 3094
-y(Regions.)57 b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f
-(will)g(b)r(e)h(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)
-427 3194 y(uncertain)n(t)n(y)28 b(Region)f(using)h(the)h(supplied)f(p)r
-(oin)n(ter)g(will)h(ha)n(v)n(e)e(no)h(e\013ect)h(on)f(the)g(created)g
-(Bo)n(x.)38 b(Alter-)427 3294 y(nativ)n(ely)-7 b(,)25
-b(a)e(NULL)i(Ob)5 b(ject)24 b(p)r(oin)n(ter)f(ma)n(y)h(b)r(e)g
-(supplied,)i(in)e(whic)n(h)g(case)f(a)h(default)g(uncertain)n(t)n(y)g
-(of)g(zero)427 3393 y(is)k(used.)259 3547 y Fd(options)427
-3646 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-3746 y(assignmen)n(ts)i(to)h(b)r(e)h(used)f(for)g(initialising)g(the)h
-(new)f(NullRegion.)48 b(The)31 b(syn)n(tax)f(used)i(is)f(iden)n(tical)g
-(to)427 3846 y(that)38 b(for)e(the)i(astSet)f(function)h(and)f(ma)n(y)f
-(include)i Ft(")p Fj(prin)n(tf)p Ft(")e Fj(format)h(sp)r(eci\014ers)g
-(iden)n(ti\014ed)g(b)n(y)g Ft(")p Fj(\045)p Ft(")427
-3945 y Fj(sym)n(b)r(ols)27 b(in)h(the)g(normal)f(w)n(a)n(y)-7
-b(.)259 4099 y Fd(...)427 4199 y Fj(If)38 b(the)g Ft(")p
-Fj(options)p Ft(")e Fj(string)h(con)n(tains)f Ft(")p
-Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g
-(list)h(of)f(additional)427 4298 y(argumen)n(ts)26 b(ma)n(y)h(follo)n
-(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5 b(alues)27
-b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)37
-b(The)427 4398 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 4498 y Fj(function\).)0
-4701 y Fd(Returned)32 b(V)-8 b(alue:)259 4879 y(astNullRegion\(\))427
-4979 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(NullRegion.)0
-5182 y Fd(Notes:)340 5507 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 5606 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p eop end
-%%Page: 287 297
-TeXDict begin 287 296 bop 3643 52 a FF(287)p 0 351 3780
-12 v 0 482 a Fz(astOK)627 483 y Fe(T)-10 b(est)38 b(whether)g(AST)g
-(functions)g(ha)m(v)m(e)g(b)s(een)h(successful)3402 482
-y Fz(astOK)0 654 y Fd(Description:)44 b Fj(This)29 b(macro)f(returns)g
-(a)h(b)r(o)r(olean)f(v)-5 b(alue)29 b(\(0)g(or)f(1\))h(to)g(indicate)g
-(if)h(preceding)e(AST)h(functions)h(ha)n(v)n(e)227 754
-y(completed)f(successfully)g(\(i.e.)41 b(without)29 b(setting)g(the)g
-(AST)g(error)e(status\).)41 b(If)29 b(the)g(error)e(status)i(is)f(set)h
-(to)g(an)227 853 y(error)d(v)-5 b(alue,)27 b(a)h(v)-5
-b(alue)27 b(of)h(zero)e(is)i(returned,)f(otherwise)g(the)h(result)f(is)
-g(one.)0 1003 y Fd(Synopsis:)121 b Ft(int)42 b(astOK)0
-1154 y Fd(Returned)32 b(V)-8 b(alue:)259 1291 y(astOK)427
-1391 y Fj(One)28 b(if)g(the)g(AST)g(error)d(status)j(is)f(OK,)g
-(otherwise)g(zero.)0 1553 y Fd(Notes:)340 1837 y Fi(\017)45
-b Fj(If)28 b(the)g(AST)g(error)d(status)i(is)h(set)f(to)g(an)g(error)f
-(v)-5 b(alue)27 b(\(after)g(an)g(error\),)f(most)h(AST)h(functions)g
-(will)g(not)427 1936 y(execute)h(and)g(will)h(simply)f(return)g
-(without)g(action.)41 b(T)-7 b(o)29 b(clear)f(the)i(error)d(status)i
-(and)g(restore)f(normal)427 2036 y(b)r(eha)n(viour,)f(use)g
-(astClearStatus.)p 0 2236 V 0 2368 a Fz(astO\013set)308
-b Fe(Calculate)36 b(an)i(o\013set)h(along)e(a)i(geo)s(desic)f(curv)m(e)
-305 b Fz(astO\013set)0 2557 y Fd(Description:)44 b Fj(This)c(function)f
-(\014nds)h(the)f(F)-7 b(rame)39 b(co)r(ordinate)f(v)-5
-b(alues)39 b(of)g(a)g(p)r(oin)n(t)g(whic)n(h)g(is)g(o\013set)h(a)e(sp)r
-(eci\014ed)227 2657 y(distance)28 b(along)e(the)i(geo)r(desic)f(curv)n
-(e)f(b)r(et)n(w)n(een)i(t)n(w)n(o)f(other)g(p)r(oin)n(ts.)227
-2782 y(F)-7 b(or)28 b(example,)h(in)f(a)h(basic)f(F)-7
-b(rame,)28 b(this)h(o\013set)f(will)h(b)r(e)g(along)e(the)i(straigh)n
-(t)f(line)g(joining)h(t)n(w)n(o)e(p)r(oin)n(ts.)40 b(F)-7
-b(or)28 b(a)227 2881 y(more)h(sp)r(ecialised)h(F)-7 b(rame)29
-b(describing)h(a)f(sky)h(co)r(ordinate)e(system,)j(ho)n(w)n(ev)n(er,)d
-(it)j(w)n(ould)e(b)r(e)i(along)d(the)j(great)227 2981
-y(circle)c(passing)g(through)g(t)n(w)n(o)f(sky)i(p)r(ositions.)0
-3131 y Fd(Synopsis:)121 b Ft(void)42 b(astOffset\()d(AstFrame)i
-Fi(\003)p Ft(this,)g(const)g(double)g(point1[],)f(const)i(double)f
-(point2[],)227 3231 y(double)g(offset,)g(double)g(point3[])f(\))0
-3381 y Fd(P)m(arameters:)259 3518 y(this)427 3618 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rame.)259 3751 y Fd(p)s(oin)m(t1)427
-3851 y Fj(An)35 b(arra)n(y)d(of)i(double,)j(with)d(one)g(elemen)n(t)h
-(for)f(eac)n(h)f(F)-7 b(rame)34 b(axis)g(\(Naxes)g(attribute\).)57
-b(This)35 b(should)427 3951 y(con)n(tain)27 b(the)h(co)r(ordinates)e
-(of)i(the)g(p)r(oin)n(t)g(marking)e(the)i(start)f(of)h(the)g(geo)r
-(desic)e(curv)n(e.)259 4084 y Fd(p)s(oin)m(t2)427 4183
-y Fj(An)d(arra)n(y)e(of)h(double,)i(with)f(one)f(elemen)n(t)h(for)f
-(eac)n(h)f(F)-7 b(rame)23 b(axis)e(This)i(should)f(con)n(tain)g(the)h
-(co)r(ordinates)427 4283 y(of)28 b(the)g(p)r(oin)n(t)g(marking)e(the)i
-(end)g(of)f(the)h(geo)r(desic)f(curv)n(e.)259 4416 y
-Fd(o\013set)427 4516 y Fj(The)g(required)e(o\013set)i(from)f(the)h
-(\014rst)f(p)r(oin)n(t)g(along)g(the)g(geo)r(desic)g(curv)n(e.)35
-b(If)27 b(this)g(is)f(p)r(ositiv)n(e,)h(it)g(will)f(b)r(e)427
-4616 y(to)n(w)n(ards)20 b(the)i(second)f(p)r(oin)n(t.)35
-b(If)22 b(it)g(is)f(negativ)n(e,)h(it)g(will)f(b)r(e)h(in)g(the)g(opp)r
-(osite)f(direction.)35 b(This)21 b(o\013set)g(need)427
-4715 y(not)28 b(imply)g(a)f(p)r(osition)h(lying)f(b)r(et)n(w)n(een)h
-(the)g(t)n(w)n(o)f(p)r(oin)n(ts)h(giv)n(en,)f(as)g(the)h(curv)n(e)e
-(will)i(b)r(e)g(extrap)r(olated)f(if)427 4815 y(necessary)-7
-b(.)259 4948 y Fd(p)s(oin)m(t3)427 5048 y Fj(An)34 b(arra)n(y)e(of)i
-(double,)h(with)f(one)f(elemen)n(t)h(for)f(eac)n(h)g(F)-7
-b(rame)34 b(axis)e(in)i(whic)n(h)g(the)g(co)r(ordinates)f(of)g(the)427
-5147 y(required)27 b(p)r(oin)n(t)h(will)g(b)r(e)g(returned.)0
-5310 y Fd(Notes:)340 5593 y Fi(\017)45 b Fj(The)26 b(geo)r(desic)e
-(curv)n(e)h(used)g(b)n(y)g(this)h(function)g(is)f(the)h(path)f(of)h
-(shortest)e(distance)i(b)r(et)n(w)n(een)f(t)n(w)n(o)g(p)r(oin)n(ts,)427
-5693 y(as)i(de\014ned)h(b)n(y)f(the)h(astDistance)g(function.)p
-eop end
-%%Page: 288 298
-TeXDict begin 288 297 bop 0 52 a FF(288)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(This)19 b(function)g(will)g(return)f Ft(")p Fj(bad)p
-Ft(")g Fj(co)r(ordinate)g(v)-5 b(alues)18 b(\(AST)p Ft(__)p
-Fj(BAD\))i(if)f(an)n(y)f(of)g(the)i(input)f(co)r(ordinates)427
-451 y(has)27 b(this)h(v)-5 b(alue.)340 590 y Fi(\017)45
-b Ft(")p Fj(Bad)p Ft(")32 b Fj(co)r(ordinate)f(v)-5 b(alues)32
-b(will)h(also)e(b)r(e)i(returned)f(if)h(the)g(t)n(w)n(o)f(p)r(oin)n(ts)
-g(supplied)h(are)f(coinciden)n(t)g(\(or)427 689 y(otherwise)27
-b(fail)h(to)f(uniquely)h(sp)r(ecify)g(a)f(geo)r(desic)g(curv)n(e\))f
-(but)j(the)f(requested)f(o\013set)g(is)h(non-zero.)p
-0 900 3780 12 v 0 1032 a Fz(astO\013set2)172 b Fe(Calculate)37
-b(an)h(o\013set)h(along)e(a)h(geo)s(desic)h(curv)m(e)f(in)1587
-1145 y(a)h(2D)g(F)-10 b(rame)3195 1032 y Fz(astO\013set2)0
-1322 y Fd(Description:)44 b Fj(This)c(function)f(\014nds)h(the)f(F)-7
-b(rame)39 b(co)r(ordinate)f(v)-5 b(alues)39 b(of)g(a)g(p)r(oin)n(t)g
-(whic)n(h)g(is)g(o\013set)h(a)e(sp)r(eci\014ed)227 1422
-y(distance)30 b(along)f(the)h(geo)r(desic)f(curv)n(e)g(at)h(a)f(giv)n
-(en)g(angle)g(from)h(a)g(sp)r(eci\014ed)g(starting)f(p)r(oin)n(t.)44
-b(It)30 b(can)g(only)f(b)r(e)227 1522 y(used)f(with)g(2-dimensional)e
-(F)-7 b(rames.)227 1652 y(F)g(or)28 b(example,)h(in)f(a)h(basic)f(F)-7
-b(rame,)28 b(this)h(o\013set)f(will)h(b)r(e)g(along)e(the)i(straigh)n
-(t)f(line)g(joining)h(t)n(w)n(o)e(p)r(oin)n(ts.)40 b(F)-7
-b(or)28 b(a)227 1752 y(more)h(sp)r(ecialised)h(F)-7 b(rame)29
-b(describing)h(a)f(sky)h(co)r(ordinate)e(system,)j(ho)n(w)n(ev)n(er,)d
-(it)j(w)n(ould)e(b)r(e)i(along)d(the)j(great)227 1851
-y(circle)c(passing)g(through)g(t)n(w)n(o)f(sky)i(p)r(ositions.)0
-2013 y Fd(Synopsis:)121 b Ft(double)41 b(astOffset2\()e(AstFrame)h
-Fi(\003)p Ft(this,)h(const)h(double)f(point1[2],)e(double)i(angle,)h
-(double)227 2112 y(offset,)f(double)g(point2[2])f(\);)0
-2273 y Fd(P)m(arameters:)259 2421 y(this)427 2521 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rame.)259 2660 y Fd(p)s(oin)m(t1)427
-2759 y Fj(An)35 b(arra)n(y)d(of)i(double,)j(with)d(one)g(elemen)n(t)h
-(for)f(eac)n(h)f(F)-7 b(rame)34 b(axis)g(\(Naxes)g(attribute\).)57
-b(This)35 b(should)427 2859 y(con)n(tain)27 b(the)h(co)r(ordinates)e
-(of)i(the)g(p)r(oin)n(t)g(marking)e(the)i(start)f(of)h(the)g(geo)r
-(desic)e(curv)n(e.)259 2998 y Fd(angle)427 3097 y Fj(The)j(angle)f
-(\(in)i(radians\))e(from)g(the)i(p)r(ositiv)n(e)e(direction)h(of)g(the)
-g(second)f(axis,)h(to)g(the)g(direction)f(of)h(the)427
-3197 y(required)38 b(p)r(osition,)i(as)e(seen)g(from)g(the)g(starting)g
-(p)r(osition.)68 b(P)n(ositiv)n(e)37 b(rotation)g(is)h(in)g(the)h
-(sense)f(of)427 3297 y(rotation)27 b(from)g(the)h(p)r(ositiv)n(e)f
-(direction)g(of)h(axis)f(2)g(to)g(the)h(p)r(ositiv)n(e)g(direction)f
-(of)g(axis)g(1.)259 3435 y Fd(o\013set)427 3535 y Fj(The)g(required)e
-(o\013set)i(from)f(the)h(\014rst)f(p)r(oin)n(t)g(along)g(the)g(geo)r
-(desic)g(curv)n(e.)35 b(If)27 b(this)g(is)f(p)r(ositiv)n(e,)h(it)g
-(will)f(b)r(e)427 3635 y(in)i(the)g(direction)f(of)h(the)g(giv)n(en)f
-(angle.)36 b(If)28 b(it)g(is)f(negativ)n(e,)g(it)h(will)g(b)r(e)g(in)f
-(the)h(opp)r(osite)g(direction.)259 3773 y Fd(p)s(oin)m(t2)427
-3873 y Fj(An)34 b(arra)n(y)e(of)i(double,)h(with)f(one)f(elemen)n(t)h
-(for)f(eac)n(h)g(F)-7 b(rame)34 b(axis)e(in)i(whic)n(h)g(the)g(co)r
-(ordinates)f(of)g(the)427 3973 y(required)27 b(p)r(oin)n(t)h(will)g(b)r
-(e)g(returned.)0 4146 y Fd(Returned)k(V)-8 b(alue:)259
-4294 y(astO\013set2)427 4394 y Fj(The)27 b(direction)f(of)g(the)h(geo)r
-(desic)e(curv)n(e)g(at)h(the)h(end)g(p)r(oin)n(t.)36
-b(That)27 b(is,)f(the)h(angle)e(\(in)i(radians\))f(b)r(et)n(w)n(een)427
-4494 y(the)35 b(p)r(ositiv)n(e)e(direction)h(of)g(the)g(second)f(axis)h
-(and)g(the)g(con)n(tin)n(uation)f(of)h(the)g(geo)r(desic)f(curv)n(e)g
-(at)h(the)427 4593 y(requested)29 b(end)h(p)r(oin)n(t.)42
-b(P)n(ositiv)n(e)28 b(rotation)g(is)h(in)h(the)g(sense)f(of)g(rotation)
-f(from)h(the)h(p)r(ositiv)n(e)f(direction)427 4693 y(of)f(axis)f(2)g
-(to)g(the)h(p)r(ositiv)n(e)f(direction)h(of)f(axis)g(1.)0
-4866 y Fd(Notes:)340 5161 y Fi(\017)45 b Fj(The)26 b(geo)r(desic)e
-(curv)n(e)h(used)g(b)n(y)g(this)h(function)g(is)f(the)h(path)f(of)h
-(shortest)e(distance)i(b)r(et)n(w)n(een)f(t)n(w)n(o)g(p)r(oin)n(ts,)427
-5260 y(as)i(de\014ned)h(b)n(y)f(the)h(astDistance)g(function.)340
-5399 y Fi(\017)45 b Fj(An)28 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)
-h(the)g(F)-7 b(rame)27 b(is)g(not)h(2-dimensional.)340
-5538 y Fi(\017)45 b Fj(This)19 b(function)g(will)g(return)f
-Ft(")p Fj(bad)p Ft(")g Fj(co)r(ordinate)g(v)-5 b(alues)18
-b(\(AST)p Ft(__)p Fj(BAD\))i(if)f(an)n(y)f(of)g(the)i(input)f(co)r
-(ordinates)427 5637 y(has)27 b(this)h(v)-5 b(alue.)p
-eop end
-%%Page: 289 299
-TeXDict begin 289 298 bop 3643 52 a FF(289)p 0 351 3780
-12 v 0 483 a Fz(astOutline)p Fc(<)p Fz(X)p Fc(>)236 b
-Fe(Create)37 b(a)i(new)f(P)m(olygon)f(outling)1271 598
-y(v)-7 b(alues)38 b(in)h(a)g(2D)f(data)g(grid)2886 483
-y Fz(astOutline)p Fc(<)p Fz(X)p Fc(>)0 780 y Fd(Description:)44
-b Fj(This)27 b(is)g(a)g(set)g(of)g(functions)g(that)g(create)g(a)f(P)n
-(olygon)f(enclosing)h(a)h(single)f(con)n(tiguous)g(set)h(of)g(pixels)
-227 880 y(that)h(ha)n(v)n(e)f(a)g(sp)r(eci\014ed)h(v)-5
-b(alue)27 b(within)h(a)g(gridded)f(2-dimensional)f(data)h(arra)n(y)e
-(\(e.g.)37 b(an)27 b(image\).)227 1003 y(A)40 b(basic)f(2-dimensional)e
-(F)-7 b(rame)39 b(is)g(used)h(to)f(represen)n(t)f(the)h(pixel)h(co)r
-(ordinate)e(system)h(in)g(the)h(returned)227 1103 y(P)n(olygon.)33
-b(The)21 b(Domain)g(attribute)h(is)f(set)g(to)h Ft(")p
-Fj(PIXEL)p Ft(")p Fj(,)f(the)g(Title)h(attribute)f(is)h(set)f(to)g
-Ft(")p Fj(Pixel)f(co)r(ordinates)p Ft(")p Fj(,)227 1202
-y(and)i(the)h(Unit)f(attribute)h(for)e(eac)n(h)g(axis)h(is)g(set)g(to)g
-Ft(")p Fj(pixel)p Ft(")p Fj(.)34 b(All)22 b(other)g(attributes)g(are)f
-(left)i(unset.)35 b(The)22 b(nature)227 1302 y(of)28
-b(the)g(pixel)f(co)r(ordinate)g(system)g(is)h(determined)f(b)n(y)h
-(parameter)e Ft(")p Fj(starpix)p Ft(")p Fj(.)227 1425
-y(The)39 b Ft(")p Fj(maxerr)p Ft(")e Fj(and)h Ft(")p
-Fj(maxv)n(ert)p Ft(")f Fj(parameters)g(can)i(b)r(e)g(used)g(to)g(con)n
-(trol)e(ho)n(w)h(accurately)g(the)h(returned)227 1525
-y(P)n(olygon)28 b(represen)n(ts)g(the)i(required)f(region)f(in)i(the)g
-(data)f(arra)n(y)-7 b(.)41 b(The)30 b(n)n(um)n(b)r(er)f(of)h(v)n
-(ertices)e(in)i(the)g(returned)227 1624 y(P)n(olygon)c(will)h(b)r(e)i
-(the)e(minim)n(um)i(needed)f(to)f(ac)n(hiev)n(e)f(the)i(required)f
-(accuracy)-7 b(.)227 1747 y(Y)g(ou)34 b(should)g(use)g(a)f(function)i
-(whic)n(h)f(matc)n(hes)f(the)h(n)n(umerical)f(t)n(yp)r(e)i(of)f(the)g
-(data)f(y)n(ou)g(are)g(pro)r(cessing)g(b)n(y)227 1847
-y(replacing)c Fl(<)p Fj(X)p Fl(>)h Fj(in)g(the)g(generic)f(function)i
-(name)e(astOutline)p Fl(<)p Fj(X)p Fl(>)h Fj(b)n(y)f(an)h(appropriate)e
-(1-)h(or)g(2-c)n(haracter)227 1947 y(t)n(yp)r(e)h(co)r(de.)43
-b(F)-7 b(or)29 b(example,)h(if)g(y)n(ou)e(are)h(pro)r(cesing)f(data)i
-(with)g(t)n(yp)r(e)g Ft(")p Fj(\015oat)p Ft(")p Fj(,)e(y)n(ou)h(should)
-h(use)f(the)h(function)227 2046 y(astOutlineF)21 b(\(see)f(the)h
-Ft(")p Fj(Data)f(T)n(yp)r(e)g(Co)r(des)p Ft(")g Fj(section)g(b)r(elo)n
-(w)g(for)g(the)h(co)r(des)f(appropriate)f(to)i(other)e(n)n(umerical)227
-2146 y(t)n(yp)r(es\).)0 2292 y Fd(Synopsis:)121 b Ft(AstPolygon)39
-b Fi(\003)p Ft(astOutline)p Fl(<)p Ft(X)p Fl(>)p Ft(\()f
-Fl(<)p Ft(Xtype)p Fl(>)i Ft(value,)h(int)i(oper,)e Fl(<)p
-Ft(Xtype)p Fl(>)g Ft(array[],)f(int)i(lbnd[2],)227 2392
-y(int)h(ubnd[2],)d(double)h(maxerr,)g(int)h(maxvert,)e(int)j
-(inside[2],)c(int)j(starpix)f(\))0 2538 y Fd(P)m(arameters:)259
-2672 y(v)-5 b(alue)427 2771 y Fj(A)28 b(data)f(v)-5 b(alue)28
-b(that)g(sp)r(eci\014es)f(the)h(pixels)g(to)f(b)r(e)h(outlined.)259
-2901 y Fd(op)s(er)427 3001 y Fj(Indicates)f(ho)n(w)g(the)g
-Ft(")p Fj(v)-5 b(alue)p Ft(")27 b Fj(parameter)e(is)j(used)f(to)g
-(select)g(the)h(outlined)f(pixels.)37 b(It)27 b(can)g(ha)n(v)n(e)f(an)n
-(y)h(of)427 3101 y(the)h(follo)n(wing)f(v)-5 b(alues:)510
-3205 y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(L)-7 b(T:)27
-b(outline)h(pixels)g(with)g(v)-5 b(alue)27 b(less)g(than)h
-Ft(")p Fj(v)-5 b(alue)p Ft(")p Fj(.)510 3320 y Fi(\017)45
-b Fj(AST)p Ft(__)p Fj(LE:)27 b(outline)h(pixels)f(with)h(v)-5
-b(alue)28 b(less)f(than)g(or)g(equal)g(to)h Ft(")p Fj(v)-5
-b(alue)p Ft(")p Fj(.)510 3435 y Fi(\017)45 b Fj(AST)p
-Ft(__)p Fj(EQ:)27 b(outline)g(pixels)h(with)g(v)-5 b(alue)27
-b(equal)g(to)h Ft(")p Fj(v)-5 b(alue)p Ft(")p Fj(.)510
-3549 y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(NE:)27 b(outline)h(pixels)f
-(with)i(v)-5 b(alue)27 b(not)h(equal)f(to)g Ft(")p Fj(v)-5
-b(alue)p Ft(")p Fj(.)510 3664 y Fi(\017)45 b Fj(AST)p
-Ft(__)p Fj(GE:)27 b(outline)h(pixels)f(with)h(v)-5 b(alue)28
-b(greater)e(than)h(or)g(equal)g(to)h Ft(")p Fj(v)-5 b(alue)p
-Ft(")p Fj(.)510 3779 y Fi(\017)45 b Fj(AST)p Ft(__)p
-Fj(GT:)28 b(outline)f(pixels)h(with)g(v)-5 b(alue)27
-b(greater)f(than)i Ft(")p Fj(v)-5 b(alue)p Ft(")p Fj(.)259
-3909 y Fd(arra)m(y)427 4008 y Fj(P)n(oin)n(ter)25 b(to)i(a)f
-(2-dimensional)f(arra)n(y)f(con)n(taining)i(the)h(data)f(to)g(b)r(e)h
-(pro)r(cessed.)36 b(The)26 b(n)n(umerical)g(t)n(yp)r(e)h(of)427
-4108 y(this)g(arra)n(y)d(should)i(matc)n(h)h(the)g(1-)e(or)h(2-c)n
-(haracter)d(t)n(yp)r(e)k(co)r(de)f(app)r(ended)h(to)g(the)f(function)h
-(name)g(\(e.g.)427 4208 y(if)h(y)n(ou)f(are)g(using)g(astOutlineF,)h
-(the)g(t)n(yp)r(e)f(of)h(eac)n(h)f(arra)n(y)e(elemen)n(t)j(should)f(b)r
-(e)h Ft(")p Fj(\015oat)p Ft(")p Fj(\).)427 4322 y(The)33
-b(storage)f(order)f(of)j(data)e(within)i(this)g(arra)n(y)c(should)j(b)r
-(e)h(suc)n(h)f(that)g(the)h(index)f(of)g(the)g(\014rst)g(grid)427
-4422 y(dimension)g(v)-5 b(aries)31 b(most)h(rapidly)g(and)g(that)h(of)f
-(the)h(second)f(dimension)g(least)g(rapidly)g(\(i.e.)52
-b(F)-7 b(ortran)427 4522 y(arra)n(y)26 b(indexing)h(is)g(used\).)259
-4651 y Fd(lbnd)427 4751 y Fj(P)n(oin)n(ter)g(to)h(an)h(arra)n(y)d(of)i
-(t)n(w)n(o)g(in)n(tegers)f(con)n(taining)g(the)i(co)r(ordinates)e(of)i
-(the)f(cen)n(tre)g(of)h(the)f(\014rst)h(pixel)427 4851
-y(in)f(the)g(input)h(grid)d(along)h(eac)n(h)g(dimension.)259
-4981 y Fd(ubnd)427 5080 y Fj(P)n(oin)n(ter)h(to)h(an)g(arra)n(y)e(of)i
-(t)n(w)n(o)g(in)n(tegers)f(con)n(taining)g(the)i(co)r(ordinates)e(of)h
-(the)h(cen)n(tre)f(of)g(the)h(last)f(pixel)427 5180 y(in)f(the)g(input)
-h(grid)d(along)h(eac)n(h)g(dimension.)427 5295 y(Note)f(that)h
-Ft(")p Fj(lbnd)p Ft(")f Fj(and)g Ft(")p Fj(ubnd)p Ft(")g
-Fj(together)f(de\014ne)h(the)h(shap)r(e)f(and)g(size)g(of)g(the)g
-(input)h(grid,)f(its)h(exten)n(t)427 5394 y(along)36
-b(a)g(particular)f(\(j'th\))j(dimension)e(b)r(eing)g(ubnd[j]-lbnd[j]+1)
-i(\(assuming)d(the)i(index)g Ft(")p Fj(j)p Ft(")f Fj(to)g(b)r(e)427
-5494 y(zero-based\).)69 b(They)39 b(also)e(de\014ne)j(the)f(input)g
-(grid's)f(co)r(ordinate)g(system,)j(eac)n(h)d(pixel)h(ha)n(ving)f(unit)
-427 5593 y(exten)n(t)28 b(along)e(eac)n(h)g(dimension)h(with)h(in)n
-(tegral)e(co)r(ordinate)g(v)-5 b(alues)27 b(at)g(its)h(cen)n(tre)e(or)h
-(upp)r(er)g(corner,)f(as)427 5693 y(selected)i(b)n(y)f(parameter)f
-Ft(")p Fj(starpix)p Ft(")p Fj(.)p eop end
-%%Page: 290 300
-TeXDict begin 290 299 bop 0 52 a FF(290)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(maxerr)427
-451 y Fj(T)-7 b(ogether)19 b(with)i Ft(")p Fj(maxv)n(ert)p
-Ft(")p Fj(,)e(this)i(determines)f(ho)n(w)f(accurately)g(the)h(returned)
-g(P)n(olygon)e(represen)n(ts)g(the)427 551 y(required)g(region)g(of)h
-(the)g(data)f(arra)n(y)-7 b(.)32 b(It)19 b(giv)n(es)f(the)h(target)f
-(discrepancy)g(b)r(et)n(w)n(een)h(the)g(returned)g(P)n(olygon)427
-650 y(and)36 b(the)f(accurate)f(outline)i(in)g(the)g(data)e(arra)n(y)-7
-b(,)36 b(expressed)e(as)h(a)g(n)n(um)n(b)r(er)g(of)g(pixels.)60
-b(Insigni\014can)n(t)427 750 y(v)n(ertices)38 b(are)f(remo)n(v)n(ed)h
-(from)g(the)h(accurate)e(outline,)42 b(one)c(b)n(y)h(one,)i(un)n(til)e
-(the)g(n)n(um)n(b)r(er)f(of)h(v)n(ertices)427 849 y(remaining)25
-b(in)i(the)f(returned)g(P)n(olygon)e(equals)h Ft(")p
-Fj(maxv)n(ert)p Ft(")p Fj(,)f(or)h(the)i(largest)d(discrepancy)h(b)r
-(et)n(w)n(een)h(the)427 949 y(accurate)j(outline)g(and)h(the)g
-(returned)f(P)n(olygon)e(is)j(greater)e(than)h Ft(")p
-Fj(maxerr)p Ft(")p Fj(.)41 b(If)30 b Ft(")p Fj(maxerr)p
-Ft(")d Fj(is)j(zero)e(or)427 1049 y(less,)g(its)h(v)-5
-b(alue)28 b(is)g(ignored)f(and)h(the)h(returned)f(P)n(olygon)e(will)i
-(ha)n(v)n(e)f(the)i(n)n(um)n(b)r(er)f(of)g(v)n(ertices)f(sp)r
-(eci\014ed)427 1148 y(b)n(y)h Ft(")p Fj(maxv)n(ert)p
-Ft(")p Fj(.)259 1285 y Fd(maxv)m(ert)427 1385 y Fj(T)-7
-b(ogether)23 b(with)h Ft(")p Fj(maxerr)p Ft(")p Fj(,)f(this)h
-(determines)g(ho)n(w)f(accurately)f(the)j(returned)e(P)n(olygon)f
-(represen)n(ts)g(the)427 1484 y(required)32 b(region)f(of)h(the)g(data)
-g(arra)n(y)-7 b(.)49 b(It)33 b(giv)n(es)e(the)h(maxim)n(um)g(allo)n(w)n
-(ed)f(n)n(um)n(b)r(er)h(of)h(v)n(ertices)e(in)h(the)427
-1584 y(returned)e(P)n(olygon.)42 b(Insigni\014can)n(t)30
-b(v)n(ertices)f(are)g(remo)n(v)n(ed)g(from)h(the)g(accurate)f(outline,)
-i(one)f(b)n(y)g(one,)427 1683 y(un)n(til)38 b(the)f(n)n(um)n(b)r(er)g
-(of)h(v)n(ertices)e(remaining)g(in)h(the)h(returned)f(P)n(olygon)e
-(equals)h Ft(")p Fj(maxv)n(ert)p Ft(")p Fj(,)i(or)e(the)427
-1783 y(largest)c(discrepancy)g(b)r(et)n(w)n(een)i(the)f(accurate)f
-(outline)i(and)f(the)h(returned)f(P)n(olygon)e(is)i(greater)e(than)427
-1883 y Ft(")p Fj(maxerr)p Ft(")p Fj(.)36 b(If)28 b Ft(")p
-Fj(maxv)n(ert)p Ft(")e Fj(is)i(less)g(than)g(3,)g(its)g(v)-5
-b(alue)28 b(is)f(ignored)g(and)h(the)g(n)n(um)n(b)r(er)g(of)g(v)n
-(ertices)f(in)h(the)427 1982 y(returned)k(P)n(olygon)f(will)i(b)r(e)g
-(the)g(minim)n(um)g(needed)g(to)f(ensure)g(that)h(the)g(discrepancy)f
-(b)r(et)n(w)n(een)g(the)427 2082 y(accurate)27 b(outline)g(and)h(the)g
-(returned)f(P)n(olygon)e(is)j(less)f(than)h Ft(")p Fj(maxerr)p
-Ft(")p Fj(.)259 2219 y Fd(inside)427 2318 y Fj(P)n(oin)n(ter)i(to)g(an)
-h(arra)n(y)d(of)j(t)n(w)n(o)f(in)n(tegers)g(con)n(taining)g(the)h
-(indices)g(of)g(a)f(pixel)h(kno)n(wn)f(to)h(b)r(e)g(inside)g(the)427
-2418 y(required)c(region.)35 b(This)28 b(is)f(needed)g(b)r(ecause)g
-(the)h(supplied)g(data)f(arra)n(y)e(ma)n(y)h(con)n(tain)h(sev)n(eral)f
-(disjoin)n(t)427 2517 y(areas)i(of)i(pixels)g(that)g(satisfy)g(the)g
-(criterion)f(sp)r(eci\014ed)h(b)n(y)f Ft(")p Fj(v)-5
-b(alue)p Ft(")29 b Fj(and)h Ft(")p Fj(op)r(er)p Ft(")p
-Fj(.)42 b(In)30 b(suc)n(h)g(cases,)f(the)427 2617 y(area)h(describ)r
-(ed)h(b)n(y)g(the)g(returned)g(P)n(olygon)e(will)i(b)r(e)h(the)f(one)g
-(that)h(con)n(tains)e(the)h(pixel)g(sp)r(eci\014ed)h(b)n(y)427
-2717 y Ft(")p Fj(inside)p Ft(")p Fj(.)45 b(If)31 b(the)f(sp)r
-(eci\014ed)h(pixel)f(is)h(outside)f(the)g(b)r(ounds)h(giv)n(en)f(b)n(y)
-g Ft(")p Fj(lbnd)p Ft(")g Fj(and)g Ft(")p Fj(ubnd)p Ft(")p
-Fj(,)h(or)e(has)h(a)427 2816 y(v)-5 b(alue)34 b(that)g(do)r(es)f(not)h
-(meet)f(the)h(criterion)f(sp)r(eci\014ed)h(b)n(y)f Ft(")p
-Fj(v)-5 b(alue)p Ft(")33 b Fj(and)g Ft(")p Fj(op)r(er)p
-Ft(")p Fj(,)h(then)g(this)g(function)427 2916 y(will)26
-b(searc)n(h)e(for)h(a)g(suitable)g(pixel.)36 b(The)26
-b(searc)n(h)d(starts)i(at)g(the)h(cen)n(tral)f(pixel)g(and)g(pro)r
-(ceeds)g(in)h(a)f(spiral)427 3016 y(manner)i(un)n(til)h(a)g(pixel)f(is)
-h(found)g(that)f(meets)h(the)g(sp)r(eci\014ed)g(crierion.)259
-3152 y Fd(starpix)427 3252 y Fj(A)19 b(\015ag)f(indicating)g(the)h
-(nature)e(of)i(the)g(pixel)f(co)r(ordinate)f(system)h(used)h(to)f
-(describ)r(e)g(the)h(v)n(ertex)e(p)r(ositions)427 3351
-y(in)31 b(the)g(returned)f(P)n(olygon.)44 b(If)31 b(non-zero,)f(the)h
-(standard)f(Starlink)g(de\014nition)h(of)g(pixel)f(co)r(ordinate)g(is)
-427 3451 y(used)i(in)f(whic)n(h)h(a)f(pixel)g(with)h(in)n(teger)e
-(index)i(I)f(spans)g(a)g(range)f(of)h(pixel)h(co)r(ordinate)e(from)h
-(\(I-1\))g(to)h(I)427 3551 y(\(i.e.)41 b(pixel)29 b(corners)e(ha)n(v)n
-(e)g(in)n(tegral)h(pixel)h(co)r(ordinates\).)39 b(If)29
-b(zero,)f(the)h(de\014nition)g(of)g(pixel)g(co)r(ordinate)427
-3650 y(used)24 b(b)n(y)f(other)g(AST)h(functions)g(suc)n(h)g(as)f
-(astResample,)g(astMask,)h(etc.,)g(is)g(used.)35 b(In)24
-b(this)g(de\014nition,)h(a)427 3750 y(pixel)i(with)g(in)n(teger)f
-(index)h(I)f(spans)g(a)h(range)e(of)i(pixel)f(co)r(ordinate)g(from)g
-(\(I-0.5\))g(to)h(\(I+0.5\))f(\(i.e.)37 b(pixel)427 3850
-y(cen)n(tres)27 b(ha)n(v)n(e)f(in)n(tegral)h(pixel)g(co)r(ordinates\).)
-259 3986 y Fd(b)s(o)m(xsize)427 4086 y Fj(The)38 b(full)g(width)g(in)g
-(pixels)f(of)h(a)f(smo)r(othing)g(b)r(o)n(x)g(to)g(b)r(e)h(applied)g
-(to)f(the)h(p)r(olygon)e(v)n(ertices)h(b)r(efore)427
-4185 y(do)n(wnsizing)29 b(the)i(p)r(olygon)e(to)i(a)f(smaller)f(n)n(um)
-n(b)r(er)h(of)g(v)n(ertices.)44 b(If)31 b(an)f(ev)n(en)g(n)n(um)n(b)r
-(er)g(is)g(supplied,)h(the)427 4285 y(next)d(larger)e(o)r(dd)i(n)n(um)n
-(b)r(er)f(is)g(used.)37 b(V)-7 b(alues)28 b(of)f(one)g(or)g(zero)g
-(result)g(in)h(no)f(smo)r(othing.)0 4455 y Fd(Returned)32
-b(V)-8 b(alue:)259 4599 y(astOutline)p Fl(<)p Fd(X)p
-Fl(>)p Fd(\(\))427 4698 y Fj(The)28 b(n)n(um)n(b)r(er)f(of)h(pixels)f
-(to)h(whic)n(h)f(a)g(v)-5 b(alue)28 b(of)f Ft(")p Fj(badv)-5
-b(al)p Ft(")27 b Fj(has)g(b)r(een)h(assigned.)0 4868
-y Fd(Notes:)340 5158 y Fi(\017)45 b Fj(This)27 b(function)h(pro)r
-(ceeds)e(b)n(y)h(\014rst)g(\014nding)g(a)g(v)n(ery)f(accurate)g(p)r
-(olygon,)g(and)h(then)h(remo)n(ving)d(insigni\014-)427
-5257 y(can)n(t)i(v)n(ertices)g(from)g(this)h(\014ne)g(p)r(olygon)f
-(using)g(astDo)n(wnsize.)340 5394 y Fi(\017)45 b Fj(The)27
-b(returned)g(P)n(olygon)d(is)j(the)h(outer)e(b)r(oundary)g(of)h(the)g
-(con)n(tiguous)f(set)h(of)f(pixels)h(that)g(includes)g(ths)427
-5494 y(sp)r(eci\014ed)k Ft(")p Fj(inside)p Ft(")f Fj(p)r(oin)n(t,)i
-(and)f(satisfy)f(the)h(sp)r(eci\014ed)g(v)-5 b(alue)31
-b(requiremen)n(t.)46 b(This)30 b(set)h(of)g(pixels)f(ma)n(y)427
-5593 y(p)r(oten)n(tially)22 b(include)h Ft(")p Fj(holes)p
-Ft(")d Fj(where)i(the)g(pixel)g(v)-5 b(alues)22 b(fail)g(to)g(meet)h
-(the)f(sp)r(eci\014ed)g(v)-5 b(alue)22 b(requiremen)n(t.)427
-5693 y(Suc)n(h)28 b(holes)f(will)h(b)r(e)g(ignored)e(b)n(y)h(this)h
-(function.)p eop end
-%%Page: 291 301
-TeXDict begin 291 300 bop 3643 52 a FF(291)340 351 y
-Fi(\017)45 b Fj(A)27 b(v)-5 b(alue)25 b(of)h(zero)f(will)h(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(the)f
-(global)f(error)f(status)h(set,)h(or)427 451 y(if)i(it)g(should)g(fail)
-f(for)h(an)n(y)e(reason.)-2 611 y Fd(Data)33 b(T)m(yp)s(e)g(Co)s(des)n
-(:)227 757 y Fj(T)-7 b(o)26 b(select)g(the)g(appropriate)e(masking)h
-(function,)i(y)n(ou)e(should)h(replace)f Fl(<)p Fj(X)p
-Fl(>)h Fj(in)g(the)g(generic)f(function)i(name)227 857
-y(astOutline)p Fl(<)p Fj(X)p Fl(>)18 b Fj(with)h(a)f(1-)g(or)g(2-c)n
-(haracter)e(data)i(t)n(yp)r(e)g(co)r(de,)j(so)d(as)g(to)g(matc)n(h)g
-(the)h(n)n(umerical)f(t)n(yp)r(e)h Fl(<)p Fj(Xt)n(yp)r(e)p
-Fl(>)227 957 y Fj(of)28 b(the)g(data)f(y)n(ou)g(are)f(pro)r(cessing,)h
-(as)f(follo)n(ws:)340 1092 y Fi(\017)45 b Fj(D:)28 b(double)340
-1223 y Fi(\017)45 b Fj(F:)28 b(\015oat)340 1354 y Fi(\017)45
-b Fj(L:)28 b(long)f(in)n(t)340 1486 y Fi(\017)45 b Fj(UL:)28
-b(unsigned)g(long)e(in)n(t)340 1617 y Fi(\017)45 b Fj(I:)28
-b(in)n(t)340 1749 y Fi(\017)45 b Fj(UI:)28 b(unsigned)g(in)n(t)340
-1880 y Fi(\017)45 b Fj(S:)28 b(short)f(in)n(t)340 2011
-y Fi(\017)45 b Fj(US:)28 b(unsigned)g(short)f(in)n(t)340
-2143 y Fi(\017)45 b Fj(B:)28 b(b)n(yte)f(\(signed)h(c)n(har\))340
-2274 y Fi(\017)45 b Fj(UB:)28 b(unsigned)f(b)n(yte)h(\(unsigned)g(c)n
-(har\))227 2435 y(F)-7 b(or)34 b(example,)h(astOutlineD)f(w)n(ould)f(b)
-r(e)i(used)f(to)g(pro)r(cess)e Ft(")p Fj(double)p Ft(")i
-Fj(data,)h(while)f(astOutlineS)g(w)n(ould)f(b)r(e)227
-2534 y(used)28 b(to)f(pro)r(cess)g Ft(")p Fj(short)f(in)n(t)p
-Ft(")i Fj(data,)f(etc.)p 0 2731 3780 12 v 0 2862 a Fz(astOv)l(erlap)299
-b Fe(T)-10 b(est)38 b(if)h(t)m(w)m(o)e(regions)g(o)m(v)m(erlap)g(eac)m
-(h)h(other)296 b Fz(astOv)l(erlap)0 3048 y Fd(Description:)44
-b Fj(This)39 b(function)h(returns)e(an)g(in)n(teger)g(v)-5
-b(alue)39 b(indicating)g(if)g(the)g(t)n(w)n(o)g(supplied)g(Regions)f(o)
-n(v)n(erlap.)227 3148 y(The)30 b(t)n(w)n(o)g(Regions)f(are)g(con)n(v)n
-(erted)f(to)i(a)g(commnon)f(co)r(ordinate)g(system)h(b)r(efore)f(p)r
-(erforming)h(the)g(c)n(hec)n(k.)43 b(If)227 3247 y(this)33
-b(con)n(v)n(ersion)e(is)i(not)g(p)r(ossible)f(\(for)h(instance)g(b)r
-(ecause)f(the)h(t)n(w)n(o)g(Regions)e(represen)n(t)h(areas)f(in)i
-(di\013eren)n(t)227 3347 y(domains\),)28 b(then)g(the)g(c)n(hec)n(k)e
-(cannot)h(b)r(e)h(p)r(erformed)g(and)f(a)g(zero)g(v)-5
-b(alue)27 b(is)h(returned)f(to)g(indicate)h(this.)0 3495
-y Fd(Synopsis:)121 b Ft(int)42 b(astOverlap\()d(AstRegion)h
-Fi(\003)p Ft(this,)h(AstRegion)f Fi(\003)p Ft(that)h(\))0
-3643 y Fd(P)m(arameters:)259 3778 y(this)427 3878 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(\014rst)f(Region.)259 4009 y Fd(that)427
-4109 y Fj(P)n(oin)n(ter)f(to)i(the)g(second)f(Region.)0
-4269 y Fd(Returned)32 b(V)-8 b(alue:)259 4404 y(astOv)m(erlap\(\))427
-4504 y Fj(A)28 b(v)-5 b(alue)28 b(indicating)f(if)h(there)g(is)f(an)n
-(y)g(o)n(v)n(erlap)e(b)r(et)n(w)n(een)j(the)g(t)n(w)n(o)f(Regions.)36
-b(P)n(ossible)26 b(v)-5 b(alues)27 b(are:)427 4619 y(0)i(-)f(The)h(c)n
-(hec)n(k)f(could)h(not)g(b)r(e)g(p)r(erformed)f(b)r(ecause)g(the)i
-(second)e(Region)g(could)h(not)f(b)r(e)i(mapp)r(ed)f(in)n(to)427
-4719 y(the)f(co)r(ordinate)f(system)g(of)h(the)g(\014rst)f(Region.)427
-4834 y(1)g(-)h(There)f(is)g(no)h(o)n(v)n(erlap)d(b)r(et)n(w)n(een)j
-(the)g(t)n(w)n(o)f(Regions.)427 4950 y(2)g(-)h(The)f(\014rst)h(Region)f
-(is)g(completely)h(inside)f(the)h(second)f(Region.)427
-5065 y(3)g(-)h(The)f(second)g(Region)g(is)h(completely)f(inside)h(the)g
-(\014rst)f(Region.)427 5181 y(4)g(-)h(There)f(is)g(partial)g(o)n(v)n
-(erlap)f(b)r(et)n(w)n(een)h(the)h(t)n(w)n(o)f(Regions.)427
-5296 y(5)g(-)h(The)f(Regions)g(are)g(iden)n(tical)g(to)h(within)g
-(their)f(uncertain)n(ties.)427 5412 y(6)e(-)g(The)g(second)g(Region)f
-(is)h(the)h(exact)e(negation)g(of)h(the)h(\014rst)f(Region)f(to)h
-(within)h(their)f(uncertain)n(ties.)0 5572 y Fd(Notes:)p
-eop end
-%%Page: 292 302
-TeXDict begin 292 301 bop 0 52 a FF(292)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(The)22 b(returned)f(v)-5 b(alues)22 b(5)f(and)h(6)f(do)g(not)h(c)n
-(hec)n(k)f(the)h(v)-5 b(alue)22 b(of)f(the)h(Closed)g(attribute)f(in)h
-(the)h(t)n(w)n(o)d(Regions.)340 480 y Fi(\017)45 b Fj(A)29
-b(v)-5 b(alue)29 b(of)f(zero)g(will)h(b)r(e)g(returned)f(if)h(this)g
-(function)g(is)f(in)n(v)n(ok)n(ed)f(with)j(the)f(AST)g(error)d(status)j
-(set,)f(or)427 580 y(if)g(it)g(should)g(fail)f(for)h(an)n(y)e(reason.)p
-0 772 3780 12 v 0 904 a Fz(astPcdMap)774 b Fe(Create)37
-b(a)h(PcdMap)774 b Fz(astPcdMap)0 1085 y Fd(Description:)44
-b Fj(This)28 b(function)g(creates)f(a)g(new)g(PcdMap)g(and)h
-(optionally)e(initialises)i(its)g(attributes.)227 1208
-y(A)35 b(PcdMap)f(is)g(a)h(non-linear)e(Mapping)h(whic)n(h)g
-(transforms)f(2-dimensional)h(p)r(ositions)g(to)g(correct)f(for)h(the)
-227 1307 y(radial)h(distortion)h(in)n(tro)r(duced)g(b)n(y)g(some)f
-(cameras)g(and)h(telescop)r(es.)62 b(This)36 b(can)g(tak)n(e)f(the)i
-(form)f(either)g(of)227 1407 y(pincushion)28 b(or)f(barrel)f
-(distortion,)h(and)g(is)h(c)n(haracterized)d(b)n(y)j(a)f(single)g
-(distortion)g(co)r(e\016cien)n(t.)227 1530 y(A)g(PcdMap)f(is)g(sp)r
-(eci\014ed)h(b)n(y)f(giving)g(this)h(distortion)f(co)r(e\016cien)n(t)g
-(and)g(the)h(co)r(ordinates)e(of)i(the)g(cen)n(tre)f(of)g(the)227
-1629 y(radial)h(distortion.)36 b(The)28 b(forw)n(ard)d(transformation)h
-(of)i(a)f(PcdMap)g(applies)g(the)h(distortion:)227 1752
-y(RD)g(=)g(R)g Fi(\003)f Fj(\()h(1)f(+)g(C)h Fi(\003)f
-Fj(R)h Fi(\003)f Fj(R)h(\))227 1875 y(where)h(R)h(is)g(the)g
-(undistorted)f(radial)g(distance)g(from)h(the)g(distortion)f(cen)n(tre)
-g(\(sp)r(eci\014ed)h(b)n(y)f(attribute)h(Pcd-)227 1974
-y(Cen\),)k(RD)e(is)g(the)g(radial)e(distance)i(from)f(the)i(same)e(cen)
-n(tre)g(in)h(the)g(presence)f(of)h(distortion,)g(and)g(C)g(is)f(the)227
-2074 y(distortion)c(co)r(e\016cien)n(t)h(\(giv)n(en)f(b)n(y)g
-(attribute)h(Disco\).)227 2197 y(The)33 b(in)n(v)n(erse)f
-(transformation)f(of)i(a)f(PcdMap)h(remo)n(v)n(es)d(the)k(distortion)e
-(pro)r(duced)h(b)n(y)f(the)h(forw)n(ard)f(trans-)227
-2296 y(formation.)42 b(The)29 b(expression)f(used)i(to)f(deriv)n(e)g(R)
-g(from)g(RD)i(is)e(an)g(appro)n(ximate)f(in)n(v)n(erse)g(of)h(the)h
-(expression)227 2396 y(ab)r(o)n(v)n(e,)f(obtained)g(from)g(t)n(w)n(o)g
-(iterations)f(of)h(the)h(Newton-Raphson)f(metho)r(d.)42
-b(The)30 b(mismatc)n(h)f(b)r(et)n(w)n(een)g(the)227 2495
-y(forw)n(ard)d(and)h(in)n(v)n(erse)f(expressions)f(is)i(negligible)g
-(for)f(astrometric)g(applications)g(\(to)i(reac)n(h)e(1)h(milliarcsec)f
-(at)227 2595 y(the)g(edge)g(of)g(the)g(Anglo-Australian)e(T)-7
-b(elescop)r(e)25 b(triplet)h(or)f(a)h(Sc)n(hmidt)g(\014eld)g(w)n(ould)f
-(require)g(\014eld)h(diameters)227 2695 y(of)i(2.4)f(and)g(42)g
-(degrees)f(resp)r(ectiv)n(ely\).)227 2817 y(If)37 b(a)e(PcdMap)h(is)g
-(in)n(v)n(erted)f(\(e.g.)62 b(using)36 b(astIn)n(v)n(ert\))f(then)h
-(the)h(roles)d(of)i(the)h(forw)n(ard)d(and)i(in)n(v)n(erse)f(trans-)227
-2917 y(formations)g(are)f(rev)n(ersed;)k(the)e(forw)n(ard)e
-(transformation)g(will)i(remo)n(v)n(e)e(the)i(distortion,)h(and)e(the)h
-(in)n(v)n(erse)227 3017 y(transformation)26 b(will)i(apply)f(it.)0
-3162 y Fd(Synopsis:)121 b Ft(AstPcdMap)40 b Fi(\003)p
-Ft(astPcdMap\()f(double)i(disco,)g(const)g(double)h(pcdcen[2],)d(const)
-i(char)h Fi(\003)p Ft(options,)227 3262 y(...)86 b(\))0
-3408 y Fd(P)m(arameters:)259 3540 y(disco)427 3640 y
-Fj(The)23 b(distortion)f(co)r(e\016cien)n(t.)35 b(Negativ)n(e)21
-b(v)-5 b(alues)23 b(giv)n(e)e(barrel)h(distortion,)h(p)r(ositiv)n(e)f
-(v)-5 b(alues)22 b(giv)n(e)g(pincush-)427 3740 y(ion)28
-b(distortion,)f(and)g(zero)g(giv)n(es)f(no)h(distortion.)259
-3869 y Fd(p)s(cdcen)427 3968 y Fj(A)h(2-elemen)n(t)f(arra)n(y)e(con)n
-(taining)i(the)h(co)r(ordinates)e(of)i(the)g(cen)n(tre)f(of)g(the)h
-(distortion.)259 4098 y Fd(options)427 4197 y Fj(P)n(oin)n(ter)f(to)h
-(a)g(n)n(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 4297 y(assignmen)n(ts)d
-(to)h(b)r(e)h(used)f(for)g(initialising)g(the)g(new)h(PcdMap.)35
-b(The)27 b(syn)n(tax)e(used)h(is)g(iden)n(tical)g(to)g(that)427
-4396 y(for)g(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-4496 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 4625
-y Fd(...)427 4725 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 4824 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 4924 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 5024 y Fj(function\).)0 5182
-y Fd(Returned)32 b(V)-8 b(alue:)259 5315 y(astPcdMap\(\))427
-5414 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(PcdMap.)0
-5572 y Fd(Notes:)p eop end
-%%Page: 293 303
-TeXDict begin 293 302 bop 3643 52 a FF(293)340 351 y
-Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g
-(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g
-(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 451
-y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f
-(an)n(y)g(reason.)-2 610 y Fd(Status)33 b(Handling)n(:)227
-756 y Fj(The)d(protected)g(in)n(terface)f(to)g(this)h(function)h
-(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g(the)g
-(parameter)227 855 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62
-b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)
-e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fj(in)n(t)227
-955 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p 0 1148 3780
-12 v 0 1279 a Fz(astP)l(ermAxes)1005 1280 y Fe(P)m(erm)m(ute)37
-b(the)h(axis)g(order)g(in)h(a)f(F)-10 b(rame)3005 1279
-y Fz(astP)l(ermAxes)0 1439 y Fd(Description:)44 b Fj(This)28
-b(function)g(p)r(erm)n(utes)g(the)g(order)e(in)i(whic)n(h)f(a)g(F)-7
-b(rame's)27 b(axes)g(o)r(ccur.)0 1585 y Fd(Synopsis:)121
-b Ft(void)42 b(astPermAxes\()c(AstFrame)j Fi(\003)p Ft(this,)g(const)g
-(int)i(perm[])e(\))0 1731 y Fd(P)m(arameters:)259 1865
-y(this)427 1964 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)259 2094 y Fd(p)s(erm)427 2194 y Fj(An)35 b(arra)n(y)e(with)i
-(one)f(elemen)n(t)h(for)f(eac)n(h)f(axis)h(of)h(the)g(F)-7
-b(rame)34 b(\(Naxes)g(attribute\).)58 b(This)35 b(should)f(list)427
-2293 y(the)28 b(axes)e(in)h(their)g(new)h(order,)e(using)g(the)i
-(original)d(axis)i(n)n(um)n(b)r(ering)f(\(whic)n(h)i(starts)e(at)h(1)g
-(for)f(the)i(\014rst)427 2393 y(axis\).)0 2552 y Fd(Notes:)340
-2831 y Fi(\017)45 b Fj(Only)29 b(gen)n(uine)g(p)r(erm)n(utations)f(of)i
-(the)f(axis)g(order)e(are)i(p)r(ermitted,)h(so)f(eac)n(h)f(axis)g(m)n
-(ust)i(b)r(e)f(referenced)427 2931 y(exactly)e(once)g(in)h(the)g
-Ft(")p Fj(p)r(erm)p Ft(")f Fj(arra)n(y)-7 b(.)340 3060
-y Fi(\017)45 b Fj(If)28 b(successiv)n(e)f(axis)f(p)r(erm)n(utations)h
-(are)g(applied)h(to)f(a)g(F)-7 b(rame,)27 b(then)h(the)g(e\013ects)g
-(are)f(cum)n(ulativ)n(e.)p 0 3253 V 0 3384 a Fz(astP)l(ermMap)647
-b Fe(Create)37 b(a)i(P)m(ermMap)645 b Fz(astP)l(ermMap)0
-3566 y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(P)n(ermMap)g(and)g(optionally)g(initialises)g(its)h(attributes.)227
-3689 y(A)g(P)n(ermMap)d(is)i(a)g(Mapping)f(whic)n(h)h(p)r(erm)n(utes)g
-(the)g(order)f(of)h(co)r(ordinates,)e(and)i(p)r(ossibly)g(also)f(c)n
-(hanges)f(the)227 3789 y(n)n(um)n(b)r(er)j(of)f(co)r(ordinates,)f(b)r
-(et)n(w)n(een)i(its)g(input)g(and)g(output.)227 3912
-y(In)37 b(addition)f(to)g(p)r(erm)n(uting)h(the)f(co)r(ordinate)g
-(order,)h(a)f(P)n(ermMap)f(ma)n(y)h(also)f(assign)g(constan)n(t)h(v)-5
-b(alues)36 b(to)227 4012 y(co)r(ordinates.)53 b(This)33
-b(is)g(useful)h(when)g(the)f(n)n(um)n(b)r(er)g(of)h(co)r(ordinates)d
-(is)j(b)r(eing)f(increased)f(as)h(it)h(allo)n(ws)e(\014xed)227
-4111 y(v)-5 b(alues)27 b(to)h(b)r(e)g(assigned)e(to)i(an)n(y)f(new)g
-(ones.)0 4257 y Fd(Synopsis:)121 b Ft(AstPermMap)39 b
-Fi(\003)p Ft(astPermMap\()g(int)j(nin,)g(const)g(int)g(inperm[],)e(int)
-i(nout,)g(const)f(int)i(outperm[],)227 4357 y(double)e(constant[],)e
-(const)j(char)g Fi(\003)p Ft(options,)e(...)86 b(\))0
-4503 y Fd(P)m(arameters:)259 4637 y(nin)427 4736 y Fj(The)28
-b(n)n(um)n(b)r(er)f(of)h(input)g(co)r(ordinates.)259
-4866 y Fd(inp)s(erm)427 4966 y Fj(An)i(optional)e(arra)n(y)f(with)i
-Ft(")p Fj(nin)p Ft(")g Fj(elemen)n(ts)f(whic)n(h,)i(for)e(eac)n(h)g
-(input)i(co)r(ordinate,)e(should)h(con)n(tain)f(the)427
-5065 y(n)n(um)n(b)r(er)33 b(of)h(the)g(output)g(co)r(ordinate)e(whose)h
-(v)-5 b(alue)33 b(is)h(to)f(b)r(e)h(used)f(\(note)h(that)g(this)f(arra)
-n(y)f(therefore)427 5165 y(de\014nes)c(the)g(in)n(v)n(erse)e(co)r
-(ordinate)g(transformation\).)36 b(Co)r(ordinates)26
-b(are)h(n)n(um)n(b)r(ered)g(starting)g(from)g(1.)427
-5279 y(F)-7 b(or)28 b(details)g(of)g(additional)g(sp)r(ecial)g(v)-5
-b(alues)28 b(that)h(ma)n(y)f(b)r(e)g(used)h(in)f(this)h(arra)n(y)-7
-b(,)26 b(see)i(the)h(description)f(of)427 5379 y(the)g
-Ft(")p Fj(constan)n(t)p Ft(")e Fj(parameter.)427 5494
-y(If)h(a)f(NULL)h(p)r(oin)n(ter)f(is)h(supplied)f(instead)h(of)f(an)g
-(arra)n(y)-7 b(,)25 b(eac)n(h)h(input)h(co)r(ordinate)e(will)i(obtain)f
-(its)h(v)-5 b(alue)427 5593 y(from)26 b(the)h(corresp)r(onding)d
-(output)i(co)r(ordinate)f(\(or)h(will)g(b)r(e)h(assigned)e(the)h(v)-5
-b(alue)26 b(AST)p Ft(__)p Fj(BAD)g(if)h(there)427 5693
-y(is)h(no)f(corresp)r(onding)f(output)i(co)r(ordinate\).)p
-eop end
-%%Page: 294 304
-TeXDict begin 294 303 bop 0 52 a FF(294)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(nout)427
-451 y Fj(The)e(n)n(um)n(b)r(er)f(of)h(output)g(co)r(ordinates.)259
-606 y Fd(outp)s(erm)427 706 y Fj(An)33 b(optional)f(arra)n(y)e(with)j
-Ft(")p Fj(nout)p Ft(")e Fj(elemen)n(ts)i(whic)n(h,)g(for)f(eac)n(h)g
-(output)h(co)r(ordinate,)f(should)g(con)n(tain)427 805
-y(the)c(n)n(um)n(b)r(er)f(of)g(the)h(input)g(co)r(ordinate)e(whose)h(v)
--5 b(alue)27 b(is)g(to)h(b)r(e)f(used)h(\(note)f(that)h(this)g(arra)n
-(y)d(therefore)427 905 y(de\014nes)j(the)g(forw)n(ard)e(co)r(ordinate)g
-(transformation\).)36 b(Co)r(ordinates)26 b(are)g(n)n(um)n(b)r(ered)i
-(starting)f(from)g(1.)427 1033 y(F)-7 b(or)28 b(details)g(of)g
-(additional)g(sp)r(ecial)g(v)-5 b(alues)28 b(that)h(ma)n(y)f(b)r(e)g
-(used)h(in)f(this)h(arra)n(y)-7 b(,)26 b(see)i(the)h(description)f(of)
-427 1132 y(the)g Ft(")p Fj(constan)n(t)p Ft(")e Fj(parameter.)427
-1260 y(If)e(a)f(NULL)h(p)r(oin)n(ter)e(is)i(supplied)f(instead)g(of)g
-(an)g(arra)n(y)-7 b(,)22 b(eac)n(h)h(output)h(co)r(ordinate)e(will)h
-(obtain)g(its)h(v)-5 b(alue)427 1359 y(from)30 b(the)g(corresp)r
-(onding)e(input)j(co)r(ordinate)e(\(or)g(will)i(b)r(e)f(assigned)f(the)
-h(v)-5 b(alue)30 b(AST)p Ft(__)p Fj(BAD)g(if)h(there)427
-1459 y(is)d(no)f(corresp)r(onding)f(input)i(co)r(ordinate\).)259
-1614 y Fd(constan)m(t)427 1714 y Fj(An)19 b(optional)f(arra)n(y)e(con)n
-(taining)h(v)-5 b(alues)18 b(whic)n(h)h(ma)n(y)f(b)r(e)g(assigned)g(to)
-g(input)h(and/or)e(output)i(co)r(ordinates)427 1813 y(instead)i(of)g
-(deriving)g(them)g(from)g(other)g(co)r(ordinate)f(v)-5
-b(alues.)34 b(If)22 b(either)f(of)g(the)h Ft(")p Fj(inp)r(erm)p
-Ft(")e Fj(or)g Ft(")p Fj(outp)r(erm)p Ft(")427 1913 y
-Fj(arra)n(ys)33 b(con)n(tains)h(a)h(negativ)n(e)g(v)-5
-b(alue,)37 b(it)f(is)f(used)g(to)h(address)e(this)h Ft(")p
-Fj(constan)n(t)p Ft(")f Fj(arra)n(y)f(\(suc)n(h)j(that)f(-1)427
-2013 y(addresses)28 b(the)h(\014rst)g(elemen)n(t,)h(-2)e(addresses)f
-(the)j(second)e(elemen)n(t,)i(etc.\))42 b(and)29 b(the)g(v)-5
-b(alue)29 b(obtained)g(is)427 2112 y(used)f(as)f(the)h(corresp)r
-(onding)d(co)r(ordinate)i(v)-5 b(alue.)427 2240 y(Care)29
-b(should)h(b)r(e)h(tak)n(en)f(to)g(ensure)f(that)i(lo)r(cations)e
-(lying)h(outside)g(the)h(exten)n(t)f(of)g(this)h(arra)n(y)c(are)j(not)
-427 2339 y(acciden)n(tally)e(addressed.)39 b(The)28 b(arra)n(y)f(is)h
-(not)h(used)g(if)g(the)g Ft(")p Fj(inp)r(erm)p Ft(")f
-Fj(and)g Ft(")p Fj(outp)r(erm)p Ft(")g Fj(arra)n(ys)e(do)j(not)427
-2439 y(con)n(tain)e(negativ)n(e)g(v)-5 b(alues.)427 2567
-y(If)34 b(a)f(NULL)h(p)r(oin)n(ter)f(is)h(supplied)g(instead)f(of)g(an)
-h(arra)n(y)-7 b(,)33 b(the)g(b)r(eha)n(viour)g(is)g(as)g(if)h(the)g
-(arra)n(y)d(w)n(ere)i(of)427 2666 y(in\014nite)c(length)e(and)h
-(\014lled)g(with)g(the)g(v)-5 b(alue)27 b(AST)p Ft(__)p
-Fj(BAD.)259 2821 y Fd(options)427 2921 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)
-n(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 3021 y(assignmen)n(ts)21
-b(to)i(b)r(e)g(used)f(for)g(initialising)g(the)h(new)g(P)n(ermMap.)34
-b(The)22 b(syn)n(tax)g(used)g(is)h(iden)n(tical)f(to)g(that)427
-3120 y(for)k(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-3220 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 3375
-y Fd(...)427 3475 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 3574 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 3674 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 3774 y Fj(function\).)0 3981
-y Fd(Returned)32 b(V)-8 b(alue:)259 4162 y(astP)m(ermMap\(\))427
-4262 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(P)n(ermMap.)0
-4468 y Fd(Notes:)340 4796 y Fi(\017)45 b Fj(If)24 b(either)f(of)h(the)f
-Ft(")p Fj(inp)r(erm)p Ft(")g Fj(or)g Ft(")p Fj(outp)r(erm)p
-Ft(")f Fj(arra)n(ys)f(con)n(tains)h(a)h(zero)g(v)-5 b(alue)23
-b(\(or)g(a)f(p)r(ositiv)n(e)h(v)-5 b(alue)24 b(whic)n(h)427
-4895 y(do)r(es)c(not)g(iden)n(tify)h(a)f(v)-5 b(alid)20
-b(output/input)h(co)r(ordinate,)g(as)f(appropriate\),)g(then)h(the)f(v)
--5 b(alue)21 b(AST)p Ft(__)p Fj(BAD)427 4995 y(is)28
-b(assigned)e(as)h(the)h(new)g(co)r(ordinate)e(v)-5 b(alue.)340
-5150 y Fi(\017)45 b Fj(This)29 b(function)g(do)r(es)g(not)g(attempt)g
-(to)g(ensure)f(that)h(the)g(forw)n(ard)e(and)i(in)n(v)n(erse)e
-(transformations)g(p)r(er-)427 5250 y(formed)37 b(b)n(y)g(the)h(P)n
-(ermMap)e(are)g(self-consisten)n(t)h(in)h(an)n(y)e(w)n(a)n(y)-7
-b(.)65 b(Y)-7 b(ou)37 b(are)g(therefore)f(free)h(to)h(supply)427
-5350 y(co)r(ordinate)27 b(p)r(erm)n(utation)g(arra)n(ys)e(that)j(ac)n
-(hiev)n(e)e(whatev)n(er)h(e\013ect)h(is)f(desired.)340
-5505 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35
-b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g
-(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427
-5605 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)p eop end
-%%Page: 295 305
-TeXDict begin 295 304 bop 3643 52 a FF(295)p 0 351 3780
-12 v 0 483 a Fz(astPic)l(kAxes)247 b Fe(Create)37 b(a)i(new)g(F)-10
-b(rame)38 b(b)m(y)h(pic)m(king)e(axes)1366 598 y(from)g(an)i(existing)e
-(one)3066 483 y Fz(astPic)l(kAxes)0 782 y Fd(Description:)44
-b Fj(This)31 b(function)h(creates)e(a)g(new)i(F)-7 b(rame)30
-b(whose)g(axes)g(are)h(copied)f(from)h(an)g(existing)f(F)-7
-b(rame)31 b(along)227 881 y(with)d(other)f(F)-7 b(rame)26
-b(attributes,)i(suc)n(h)e(as)h(its)g(Title.)37 b(An)n(y)28
-b(n)n(um)n(b)r(er)f(\(zero)f(or)g(more\))h(of)g(the)h(original)d(F)-7
-b(rame's)227 981 y(axes)24 b(ma)n(y)f(b)r(e)i(copied,)g(in)g(an)n(y)e
-(order,)h(and)g(additional)g(axes)f(with)i(default)g(attributes)f(ma)n
-(y)g(also)f(b)r(e)i(included)227 1081 y(in)j(the)g(new)g(F)-7
-b(rame.)227 1204 y(Optionally)g(,)26 b(a)f(Mapping)h(that)g(con)n(v)n
-(erts)e(b)r(et)n(w)n(een)i(the)g(co)r(ordinate)f(systems)g(describ)r
-(ed)h(b)n(y)f(the)h(t)n(w)n(o)f(F)-7 b(rames)227 1304
-y(will)28 b(also)f(b)r(e)h(returned.)0 1451 y Fd(Synopsis:)121
-b Ft(AstFrame)40 b Fi(\003)p Ft(astPickAxes\()e(AstFrame)j
-Fi(\003)p Ft(this,)g(int)h(naxes,)f(const)h(int)g(axes[],)f(AstMapping)
-227 1550 y Fi(\003\003)p Ft(map)h(\))0 1697 y Fd(P)m(arameters:)259
-1831 y(this)427 1931 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(original)e(F)-7
-b(rame.)259 2062 y Fd(naxes)427 2161 y Fj(The)28 b(n)n(um)n(b)r(er)f
-(of)h(axes)e(required)h(in)h(the)g(new)g(F)-7 b(rame.)259
-2292 y Fd(axes)427 2391 y Fj(An)27 b(arra)n(y)-7 b(,)23
-b(with)k Ft(")p Fj(naxes)p Ft(")d Fj(elemen)n(ts,)i(whic)n(h)g(lists)f
-(the)i(axes)d(to)i(b)r(e)g(copied.)36 b(These)26 b(should)f(b)r(e)h
-(giv)n(en)f(in)427 2491 y(the)j(order)e(required)h(in)h(the)g(new)f(F)
--7 b(rame,)27 b(using)g(the)h(axis)f(n)n(um)n(b)r(ering)g(in)h(the)f
-(original)f(F)-7 b(rame)27 b(\(whic)n(h)427 2591 y(starts)g(at)g(1)h
-(for)f(the)h(\014rst)f(axis\).)36 b(Axes)28 b(ma)n(y)e(b)r(e)i
-(selected)g(in)g(an)n(y)e(order,)h(but)h(eac)n(h)f(ma)n(y)g(only)g(b)r
-(e)h(used)427 2690 y(once.)38 b(If)29 b(additional)f(\(default\))h
-(axes)e(are)g(also)h(to)g(b)r(e)g(included,)h(the)g(corresp)r(onding)d
-(elemen)n(ts)i(of)g(this)427 2790 y(arra)n(y)e(should)h(b)r(e)h(set)f
-(to)h(zero.)259 2920 y Fd(map)427 3020 y Fj(Address)22
-b(of)g(a)f(lo)r(cation)h(in)g(whic)n(h)g(to)g(return)f(a)h(p)r(oin)n
-(ter)g(to)f(a)h(new)g(Mapping.)35 b(This)22 b(will)g(b)r(e)g(a)g(P)n
-(ermMap)427 3120 y(\(or)33 b(a)g(UnitMap)h(as)e(a)h(sp)r(ecial)g
-(case\))g(that)g(describ)r(es)g(the)h(axis)e(p)r(erm)n(utation)h(that)h
-(has)e(tak)n(en)h(place)427 3219 y(b)r(et)n(w)n(een)g(the)g(original)f
-(and)g(new)h(F)-7 b(rames.)52 b(The)33 b(Mapping's)g(forw)n(ard)e
-(transformation)g(will)i(con)n(v)n(ert)427 3319 y(co)r(ordinates)26
-b(from)i(the)g(original)e(F)-7 b(rame)27 b(in)n(to)g(the)h(new)g(one,)f
-(and)g(vice)h(v)n(ersa.)427 3434 y(If)g(this)g(Mapping)f(is)h(not)f
-(required,)g(a)g(NULL)h(v)-5 b(alue)28 b(ma)n(y)f(b)r(e)h(supplied)g
-(for)f(this)h(parameter.)0 3593 y Fd(Class)j(Applicabilit)m(y:)259
-3727 y(F)-8 b(rame)427 3827 y Fj(This)27 b(function)h(applies)e(to)h
-(all)g(F)-7 b(rames.)36 b(The)27 b(class)f(of)h(F)-7
-b(rame)26 b(returned)h(ma)n(y)f(di\013er)h(from)g(that)g(of)g(the)427
-3927 y(original)g(F)-7 b(rame,)27 b(dep)r(ending)h(on)g(whic)n(h)g
-(axes)f(are)g(selected.)37 b(F)-7 b(or)28 b(example,)f(if)h(a)g(single)
-f(axis)g(is)h(pic)n(k)n(ed)427 4026 y(from)i(a)g(SkyF)-7
-b(rame)29 b(\(whic)n(h)h(m)n(ust)h(alw)n(a)n(ys)d(ha)n(v)n(e)h(t)n(w)n
-(o)g(axes\))h(then)g(the)h(resulting)e(F)-7 b(rame)30
-b(cannot)f(b)r(e)i(a)427 4126 y(v)-5 b(alid)28 b(SkyF)-7
-b(rame,)27 b(so)g(will)h(rev)n(ert)e(to)h(the)h(paren)n(t)f(class)g
-(\(F)-7 b(rame\))27 b(instead.)259 4256 y Fd(F)-8 b(rameSet)427
-4356 y Fj(Using)19 b(this)g(function)g(on)g(a)f(F)-7
-b(rameSet)19 b(is)f(iden)n(tical)h(to)f(using)h(it)g(on)f(the)i(curren)
-n(t)d(F)-7 b(rame)19 b(in)g(the)g(F)-7 b(rameSet.)427
-4456 y(The)28 b(returned)f(F)-7 b(rame)27 b(will)h(not)g(b)r(e)g(a)f(F)
--7 b(rameSet.)259 4586 y Fd(Region)427 4686 y Fj(If)27
-b(this)f(function)h(is)f(used)g(on)g(a)f(Region,)h(an)g(attempt)g(is)g
-(made)g(to)g(retain)g(the)g(b)r(ounds)g(information)g(on)427
-4785 y(the)g(selected)e(axes.)36 b(If)25 b(succesful,)g(the)h(returned)
-e(F)-7 b(rame)25 b(will)g(b)r(e)g(a)g(Region)f(of)h(some)f(class.)35
-b(Otherwise,)427 4885 y(the)j(returned)g(F)-7 b(rame)37
-b(is)g(obtained)h(b)n(y)f(calling)g(this)h(function)h(on)e(the)h(F)-7
-b(rame)37 b(represen)n(ted)g(b)n(y)g(the)427 4985 y(supplied)c(Region)f
-(\(the)h(returned)g(F)-7 b(rame)32 b(will)h(then)g(not)f(b)r(e)h(a)g
-(Region\).)51 b(In)33 b(order)e(to)i(b)r(e)g(succesful,)427
-5084 y(the)d(selected)f(axes)g(in)g(the)h(Region)f(m)n(ust)g(b)r(e)h
-(indep)r(enden)n(t)g(of)f(the)h(others.)41 b(F)-7 b(or)29
-b(instance,)h(a)f(Bo)n(x)f(can)427 5184 y(b)r(e)i(split)g(in)g(this)g
-(w)n(a)n(y)e(but)i(a)f(Circle)g(cannot.)42 b(Another)30
-b(requiremen)n(t)e(for)h(success)g(is)g(that)h(no)f(default)427
-5284 y(axes)e(are)g(added)g(\(that)h(is,)g(the)g Ft(")p
-Fj(axes)p Ft(")d Fj(arra)n(y)h(m)n(ust)h(not)h(con)n(tain)f(an)n(y)g
-(zero)f(v)-5 b(alues.)0 5443 y Fd(Returned)32 b(V)-8
-b(alue:)259 5577 y(astPic)m(kAxes\(\))427 5677 y Fj(A)28
-b(p)r(oin)n(ter)f(to)h(the)g(new)g(F)-7 b(rame.)p eop
-end
-%%Page: 296 306
-TeXDict begin 296 305 bop 0 52 a FF(296)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Notes:)340
-659 y Fi(\017)45 b Fj(The)32 b(new)f(F)-7 b(rame)31 b(will)g(con)n
-(tain)g(a)g Ft(")p Fj(deep)p Ft(")f Fj(cop)n(y)h(\(c.f.)48
-b(astCop)n(y\))30 b(of)i(all)f(the)g(data)g(selected)g(from)g(the)427
-758 y(original)26 b(F)-7 b(rame.)37 b(Mo)r(difying)27
-b(an)n(y)g(asp)r(ect)g(of)h(the)g(new)g(F)-7 b(rame)27
-b(will)g(therefore)g(not)h(a\013ect)f(the)h(original)427
-858 y(one.)340 1003 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 1103 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 1327 3780 12 v 0 1458
-a Fz(astPlot)1126 b Fe(Create)37 b(a)i(Plot)1123 b Fz(astPlot)0
-1649 y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(Plot)g(and)h(optionally)f(initialises)g(its)h(attributes.)227
-1786 y(A)20 b(Plot)e(is)h(a)g(sp)r(ecialised)g(form)g(of)g(F)-7
-b(rameSet,)20 b(in)g(whic)n(h)f(the)h(base)e(F)-7 b(rame)19
-b(describ)r(es)f(a)h Ft(")p Fj(graphical)p Ft(")e Fj(co)r(ordinate)227
-1885 y(system)27 b(and)g(is)h(asso)r(ciated)d(with)j(a)f(rectangular)e
-(plotting)j(area)d(in)j(the)g(underlying)e(graphics)g(system.)37
-b(This)227 1985 y(plotting)28 b(area)e(is)i(where)f(graphical)f(output)
-i(app)r(ears.)35 b(It)28 b(is)g(de\014ned)g(when)g(the)g(Plot)f(is)g
-(created.)227 2122 y(The)36 b(curren)n(t)e(F)-7 b(rame)35
-b(of)h(a)f(Plot)g(describ)r(es)g(a)g Ft(")p Fj(ph)n(ysical)p
-Ft(")f Fj(co)r(ordinate)g(system,)j(whic)n(h)f(is)f(the)h(co)r
-(ordinate)227 2222 y(system)41 b(in)h(whic)n(h)f(plotting)h(op)r
-(erations)e(are)g(sp)r(eci\014ed.)79 b(The)41 b(results)g(of)g(eac)n(h)
-g(plotting)g(op)r(eration)g(are)227 2321 y(automatically)26
-b(transformed)f(in)n(to)i(graphical)e(co)r(ordinates)g(so)h(as)g(to)h
-(app)r(ear)e(in)i(the)g(plotting)g(area)e(\(sub)5 b(ject)227
-2421 y(to)28 b(an)n(y)f(clipping)g(whic)n(h)h(ma)n(y)f(b)r(e)h(in)f
-(e\013ect\).)227 2558 y(Because)d(the)h(Mapping)f(b)r(et)n(w)n(een)g
-(ph)n(ysical)g(and)g(graphical)f(co)r(ordinates)g(ma)n(y)h(often)h(b)r
-(e)g(non-linear,)e(or)h(ev)n(en)227 2657 y(discon)n(tin)n(uous,)i(most)
-h(plotting)f(do)r(es)h(not)g(result)f(in)h(simple)g(straigh)n(t)f
-(lines.)36 b(The)27 b(basic)f(plotting)h(elemen)n(t)g(is)227
-2757 y(therefore)32 b(not)g(a)h(straigh)n(t)e(line,)j(but)f(a)f(geo)r
-(desic)g(curv)n(e)f(\(see)i(astCurv)n(e\).)50 b(A)33
-b(Plot)f(also)f(pro)n(vides)h(facilities)227 2857 y(for)40
-b(dra)n(wing)g(mark)n(ers)e(or)i(sym)n(b)r(ols)g(\(astMark\),)j(text)e
-(\(astT)-7 b(ext\))41 b(and)f(grid)g(lines)h(\(astGridLine\).)76
-b(It)41 b(is)227 2956 y(also)32 b(p)r(ossible)h(to)f(dra)n(w)g
-(curvilinear)g(axes)g(with)h(optional)f(co)r(ordinate)g(grids)g
-(\(astGrid\).)53 b(A)33 b(range)e(of)i(Plot)227 3056
-y(attributes)f(is)g(a)n(v)-5 b(ailable)31 b(to)h(allo)n(w)f(precise)g
-(con)n(trol)g(o)n(v)n(er)f(the)i(app)r(earance)f(of)h(graphical)e
-(output)j(pro)r(duced)227 3156 y(b)n(y)28 b(these)f(functions.)227
-3293 y(Y)-7 b(ou)20 b(ma)n(y)f(select)h(di\013eren)n(t)f(ph)n(ysical)g
-(co)r(ordinate)g(systems)g(in)h(whic)n(h)f(to)h(plot)g(\(including)g
-(the)g(nativ)n(e)f(graphical)227 3392 y(co)r(ordinate)33
-b(system)h(itself)6 b(\))35 b(b)n(y)f(selecting)g(di\013eren)n(t)g(F)-7
-b(rames)33 b(as)h(the)g(curren)n(t)f(F)-7 b(rame)34 b(of)g(a)g(Plot,)h
-(using)e(its)227 3492 y(Curren)n(t)d(attribute.)47 b(Y)-7
-b(ou)31 b(ma)n(y)f(also)g(set)h(up)g(clipping)g(\(see)f(astClip\))h(to)
-g(limit)h(the)f(exten)n(t)g(of)g(an)n(y)f(plotting)227
-3591 y(y)n(ou)c(p)r(erform,)h(and)f(this)h(ma)n(y)f(b)r(e)h(done)f(in)h
-(an)n(y)f(of)h(the)g(co)r(ordinate)e(systems)i(asso)r(ciated)e(with)i
-(the)g(Plot,)g(not)227 3691 y(necessarily)f(the)i(one)f(y)n(ou)g(are)g
-(plotting)g(in.)227 3828 y(Lik)n(e)k(an)n(y)f(F)-7 b(rameSet,)32
-b(a)f(Plot)g(ma)n(y)f(also)g(b)r(e)i(used)f(as)g(a)f(F)-7
-b(rame.)47 b(In)32 b(this)f(case,)h(it)f(b)r(eha)n(v)n(es)f(lik)n(e)h
-(its)g(curren)n(t)227 3928 y(F)-7 b(rame,)27 b(whic)n(h)h(describ)r(es)
-f(the)h(ph)n(ysical)f(co)r(ordinate)f(system.)227 4065
-y(When)35 b(used)f(as)g(a)g(Mapping,)h(a)f(Plot)g(describ)r(es)f(the)i
-(in)n(ter-relation)e(b)r(et)n(w)n(een)h(graphical)e(co)r(ordinates)h
-(\(its)227 4164 y(base)k(F)-7 b(rame\))38 b(and)f(ph)n(ysical)g(co)r
-(ordinates)g(\(its)h(curren)n(t)f(F)-7 b(rame\).)67 b(It)38
-b(di\013ers)f(from)h(a)f(normal)g(F)-7 b(rameSet,)227
-4264 y(ho)n(w)n(ev)n(er,)29 b(in)h(that)h(an)e(attempt)i(to)f
-(transform)f(p)r(oin)n(ts)h(whic)n(h)g(lie)g(in)h(clipp)r(ed)f(areas)f
-(of)h(the)g(Plot)g(will)g(result)227 4363 y(in)e(bad)g(co)r(ordinate)e
-(v)-5 b(alues)27 b(\(AST)p Ft(__)p Fj(BAD\).)0 4538 y
-Fd(Synopsis:)121 b Ft(AstPlot)41 b Fi(\003)p Ft(astPlot\()e(AstFrame)i
-Fi(\003)p Ft(frame,)f(const)i(float)f(graphbox[)f(4)j(],)g(const)f
-(double)f(basebox[)227 4637 y(4)i(],)g(const)f(char)g
-Fi(\003)p Ft(options,)d(...)86 b(\))0 4812 y Fd(P)m(arameters:)259
-4973 y(frame)427 5072 y Fj(P)n(oin)n(ter)33 b(to)h(a)g(F)-7
-b(rame)34 b(describing)g(the)h(ph)n(ysical)e(co)r(ordinate)g(system)i
-(in)f(whic)n(h)h(to)f(plot.)57 b(A)35 b(p)r(oin)n(ter)427
-5172 y(to)29 b(a)g(F)-7 b(rameSet)29 b(ma)n(y)f(also)g(b)r(e)h(giv)n
-(en,)g(in)g(whic)n(h)g(case)f(its)i(curren)n(t)e(F)-7
-b(rame)28 b(will)i(b)r(e)f(used)g(to)g(de\014ne)g(the)427
-5272 y(ph)n(ysical)i(co)r(ordinate)g(system)h(and)g(its)g(base)f(F)-7
-b(rame)31 b(will)i(b)r(e)f(mapp)r(ed)g(on)g(to)g(graphical)e(co)r
-(ordinates)427 5371 y(\(see)e(b)r(elo)n(w\).)427 5494
-y(If)h(a)g(n)n(ull)f(Ob)5 b(ject)29 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fj(NULL\))h(is)g(giv)n(en,)f(a)g(default)h(2-dimensional)f(F)-7
-b(rame)28 b(will)h(b)r(e)g(used)427 5593 y(to)35 b(describ)r(e)f(the)h
-(ph)n(ysical)f(co)r(ordinate)f(system.)58 b(Lab)r(els,)36
-b(etc.)58 b(ma)n(y)34 b(then)h(b)r(e)g(attac)n(hed)f(to)h(this)g(b)n(y)
-427 5693 y(setting)28 b(the)g(appropriate)e(F)-7 b(rame)27
-b(attributes)g(\(e.g.)37 b(Lab)r(el\(axis\)\))27 b(for)h(the)g(Plot.)p
-eop end
-%%Page: 297 307
-TeXDict begin 297 306 bop 3643 52 a FF(297)259 351 y
-Fd(graph)m(b)s(o)m(x)427 451 y Fj(An)32 b(arra)n(y)c(giving)i(the)h(p)r
-(osition)g(and)g(exten)n(t)g(of)g(the)g(plotting)g(area)e(\(on)i(the)g
-(plotting)g(surface)f(of)h(the)427 551 y(underlying)e(graphics)f
-(system\))i(in)g(whic)n(h)f(graphical)f(output)i(is)g(to)f(app)r(ear.)
-42 b(This)30 b(m)n(ust)f(b)r(e)h(sp)r(eci\014ed)427 650
-y(using)e(graphical)e(co)r(ordinates)g(appropriate)g(to)h(the)h
-(underlying)f(graphics)f(system.)427 768 y(The)k(\014rst)f(pair)f(of)h
-(v)-5 b(alues)29 b(should)g(giv)n(e)f(the)i(co)r(ordinates)e(of)h(the)h
-(b)r(ottom)f(left)h(corner)e(of)h(the)h(plotting)427
-868 y(area)25 b(and)i(the)g(second)f(pair)g(should)h(giv)n(e)e(the)i
-(co)r(ordinates)f(of)g(the)h(top)g(righ)n(t)f(corner.)35
-b(The)27 b(co)r(ordinate)427 968 y(on)41 b(the)g(horizon)n(tal)e(axis)h
-(should)g(b)r(e)i(giv)n(en)d(\014rst)i(in)g(eac)n(h)f(pair.)75
-b(Note)41 b(that)g(the)g(order)f(in)h(whic)n(h)427 1067
-y(these)26 b(p)r(oin)n(ts)h(are)e(giv)n(en)g(is)h(imp)r(ortan)n(t)g(b)r
-(ecause)g(it)g(de\014nes)g(up,)h(do)n(wn,)f(left)h(and)f(righ)n(t)f
-(for)h(subsequen)n(t)427 1167 y(graphical)g(op)r(erations.)259
-1303 y Fd(baseb)s(o)m(x)427 1403 y Fj(An)h(arra)n(y)d(giving)i(the)h
-(co)r(ordinates)e(of)i(t)n(w)n(o)e(p)r(oin)n(ts)i(in)g(the)g(supplied)g
-(F)-7 b(rame)26 b(\(or)f(in)i(the)g(base)f(F)-7 b(rame)26
-b(if)427 1503 y(a)k(F)-7 b(rameSet)31 b(w)n(as)e(supplied\))i(whic)n(h)
-g(corresp)r(ond)d(to)j(the)g(b)r(ottom)f(left)i(and)e(top)g(righ)n(t)g
-(corners)f(of)h(the)427 1602 y(plotting)25 b(area,)g(as)f(sp)r
-(eci\014ed)h(ab)r(o)n(v)n(e.)35 b(This)25 b(range)f(of)h(co)r
-(ordinates)e(will)i(b)r(e)h(mapp)r(ed)f(linearly)g(on)f(to)h(the)427
-1702 y(plotting)j(area.)35 b(The)28 b(co)r(ordinates)e(should)i(b)r(e)g
-(giv)n(en)e(in)i(the)g(same)f(order)f(as)h(ab)r(o)n(v)n(e.)259
-1839 y Fd(options)427 1938 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 2038 y(assignmen)n(ts)f
-(to)g(b)r(e)i(used)e(for)h(initialising)f(the)h(new)g(Plot.)37
-b(The)28 b(syn)n(tax)e(used)i(is)g(iden)n(tical)f(to)h(that)g(for)427
-2137 y(the)i(astSet)f(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")g Fj(format)f(sp)r(eci\014ers)h(iden)n
-(ti\014ed)g(b)n(y)g Ft(")p Fj(\045)p Ft(")f Fj(sym)n(b)r(ols)g(in)427
-2237 y(the)g(normal)f(w)n(a)n(y)-7 b(.)36 b(If)28 b(no)f
-(initialisation)g(is)h(required,)e(a)h(zero-length)g(string)f(ma)n(y)h
-(b)r(e)h(supplied.)259 2374 y Fd(...)427 2473 y Fj(If)38
-b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 2573 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 2673 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 2772 y Fj(function\).)0
-2942 y Fd(Returned)32 b(V)-8 b(alue:)259 3086 y(astPlot\(\))427
-3185 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Plot.)0
-3355 y Fd(Notes:)340 3645 y Fi(\017)45 b Fj(The)24 b(base)f(F)-7
-b(rame)24 b(of)g(the)g(returned)f(Plot)h(will)g(b)r(e)g(a)g(new)f(F)-7
-b(rame)24 b(whic)n(h)g(is)f(created)h(b)n(y)f(this)h(function)h(to)427
-3745 y(represen)n(t)32 b(the)h(co)r(ordinate)f(system)g(of)h(the)g
-(underlying)f(graphics)g(system)g(\(graphical)g(co)r(ordinates\).)427
-3844 y(It)h(is)g(giv)n(en)f(a)g(F)-7 b(rame)33 b(index)g(of)f(1)h
-(within)g(the)g(Plot.)52 b(The)33 b(c)n(hoice)f(of)h(base)f(F)-7
-b(rame)32 b(\(Base)g(attribute\))427 3944 y(should)26
-b(not,)g(in)g(general,)f(b)r(e)h(c)n(hanged)e(once)h(a)h(Plot)f(has)g
-(b)r(een)h(created)f(\(although)g(y)n(ou)g(could)h(use)f(this)427
-4043 y(as)i(a)g(w)n(a)n(y)g(of)g(mo)n(ving)g(the)h(plotting)f(area)g
-(around)f(on)h(the)h(plotting)g(surface\).)340 4180 y
-Fi(\017)45 b Fj(If)32 b(a)f(F)-7 b(rame)31 b(is)g(supplied)h(\(via)f
-(the)h Ft(")p Fj(frame)p Ft(")e Fj(p)r(oin)n(ter\),)i(then)g(it)g(b)r
-(ecomes)f(the)h(curren)n(t)e(F)-7 b(rame)31 b(of)g(the)427
-4280 y(new)d(Plot)f(and)g(is)h(giv)n(en)f(a)g(F)-7 b(rame)27
-b(index)h(of)f(2.)340 4416 y Fi(\017)45 b Fj(If)31 b(a)e(F)-7
-b(rameSet)30 b(is)f(supplied)i(\(via)e(the)h Ft(")p Fj(frame)p
-Ft(")f Fj(p)r(oin)n(ter\),)h(then)h(all)e(the)i(F)-7
-b(rames)29 b(within)h(this)g(F)-7 b(rame-)427 4516 y(Set)34
-b(b)r(ecome)g(part)f(of)h(the)g(new)g(Plot)f(\(where)h(their)g(F)-7
-b(rame)33 b(indices)h(are)f(increased)f(b)n(y)i(1\),)h(with)f(the)427
-4616 y(F)-7 b(rameSet's)27 b(curren)n(t)g(F)-7 b(rame)27
-b(b)r(ecoming)h(the)g(curren)n(t)e(F)-7 b(rame)27 b(of)h(the)g(Plot.)
-340 4752 y Fi(\017)45 b Fj(If)19 b(a)f(n)n(ull)h(Ob)5
-b(ject)18 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))h(is)f(supplied)h
-(\(via)f(the)h Ft(")p Fj(frame)p Ft(")e Fj(p)r(oin)n(ter\),)j(then)f
-(the)g(returned)427 4852 y(Plot)32 b(will)g(con)n(tain)f(t)n(w)n(o)g(F)
--7 b(rames,)33 b(b)r(oth)f(created)f(b)n(y)h(this)g(function.)51
-b(The)32 b(base)f(F)-7 b(rame)32 b(will)g(describ)r(e)427
-4951 y(graphics)18 b(co)r(ordinates)f(\(as)i(ab)r(o)n(v)n(e\))f(and)h
-(the)g(curren)n(t)f(F)-7 b(rame)19 b(will)g(b)r(e)g(a)g(basic)f(F)-7
-b(rame)19 b(with)g(no)g(attributes)427 5051 y(set)29
-b(\(this)f(will)h(therefore)e(giv)n(e)h(default)g(v)-5
-b(alues)28 b(for)g(suc)n(h)g(things)g(as)g(the)h(Plot)e(Title)i(and)f
-(the)h(Lab)r(el)f(on)427 5151 y(eac)n(h)f(axis\).)36
-b(Ph)n(ysical)27 b(co)r(ordinates)f(will)i(b)r(e)g(mapp)r(ed)f
-(linearly)g(on)h(to)f(graphical)f(co)r(ordinates.)340
-5287 y Fi(\017)45 b Fj(An)29 b(error)e(will)h(result)g(if)h(the)g(F)-7
-b(rame)28 b(supplied)h(\(or)f(the)g(base)g(F)-7 b(rame)28
-b(if)h(a)f(F)-7 b(rameSet)28 b(w)n(as)g(supplied\))h(is)427
-5387 y(not)f(2-dimensional.)340 5524 y Fi(\017)45 b Fj(A)35
-b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 5623 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p eop end
-%%Page: 298 308
-TeXDict begin 298 307 bop 0 52 a FF(298)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astPlot3D)882 b Fe(Create)38 b(a)g(Plot3D)879
-b Fz(astPlot3D)0 633 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(Plot3D)g(and)h(optionally)f
-(initialises)g(its)h(attributes.)227 754 y(A)g(Plot3D)f(is)h(a)f(sp)r
-(ecialised)g(form)g(of)h(Plot)f(that)h(pro)n(vides)e(facilities)h(for)h
-(pro)r(ducing)f(3D)g(graphical)f(output.)0 896 y Fd(Synopsis:)121
-b Ft(AstPlot3D)40 b Fi(\003)p Ft(astPlot3D\()f(AstFrame)h
-Fi(\003)p Ft(frame,)h(const)g(float)h(graphbox[)d(6)44
-b(],)e(const)g(double)227 996 y(basebox[)f(6)i(],)f(const)g(char)g
-Fi(\003)p Ft(options,)e(...)86 b(\))0 1137 y Fd(P)m(arameters:)259
-1266 y(frame)427 1366 y Fj(P)n(oin)n(ter)33 b(to)h(a)g(F)-7
-b(rame)34 b(describing)g(the)h(ph)n(ysical)e(co)r(ordinate)g(system)i
-(in)f(whic)n(h)h(to)f(plot.)57 b(A)35 b(p)r(oin)n(ter)427
-1465 y(to)29 b(a)g(F)-7 b(rameSet)29 b(ma)n(y)f(also)g(b)r(e)h(giv)n
-(en,)g(in)g(whic)n(h)g(case)f(its)i(curren)n(t)e(F)-7
-b(rame)28 b(will)i(b)r(e)f(used)g(to)g(de\014ne)g(the)427
-1565 y(ph)n(ysical)i(co)r(ordinate)g(system)h(and)g(its)g(base)f(F)-7
-b(rame)31 b(will)i(b)r(e)f(mapp)r(ed)g(on)g(to)g(graphical)e(co)r
-(ordinates)427 1665 y(\(see)e(b)r(elo)n(w\).)427 1777
-y(If)h(a)g(n)n(ull)f(Ob)5 b(ject)29 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fj(NULL\))h(is)g(giv)n(en,)f(a)g(default)h(3-dimensional)f(F)-7
-b(rame)28 b(will)h(b)r(e)g(used)427 1877 y(to)35 b(describ)r(e)f(the)h
-(ph)n(ysical)f(co)r(ordinate)f(system.)58 b(Lab)r(els,)36
-b(etc.)58 b(ma)n(y)34 b(then)h(b)r(e)g(attac)n(hed)f(to)h(this)g(b)n(y)
-427 1976 y(setting)28 b(the)g(appropriate)e(F)-7 b(rame)27
-b(attributes)g(\(e.g.)37 b(Lab)r(el\(axis\)\))27 b(for)h(the)g(Plot.)
-259 2102 y Fd(graph)m(b)s(o)m(x)427 2201 y Fj(An)35 b(arra)n(y)e
-(giving)h(the)h(p)r(osition)f(and)h(exten)n(t)f(of)h(the)g(plotting)g
-(v)n(olume)f(\(within)i(the)f(plotting)f(space)427 2301
-y(of)i(the)g(underlying)f(graphics)f(system\))h(in)h(whic)n(h)g
-(graphical)d(output)k(is)e(to)g(app)r(ear.)60 b(This)36
-b(m)n(ust)f(b)r(e)427 2400 y(sp)r(eci\014ed)28 b(using)f(graphical)f
-(co)r(ordinates)h(appropriate)e(to)j(the)g(underlying)f(graphics)f
-(system.)427 2513 y(The)g(\014rst)g(triple)g(of)g(v)-5
-b(alues)26 b(should)g(giv)n(e)f(the)h(co)r(ordinates)f(of)h(the)g(b)r
-(ottom)h(left)g(corner)d(of)i(the)h(plotting)427 2613
-y(v)n(olume)i(and)g(the)h(second)e(triple)i(should)f(giv)n(e)f(the)i
-(co)r(ordinates)e(of)h(the)g(top)h(righ)n(t)e(corner.)41
-b(The)29 b(co)r(or-)427 2712 y(dinate)e(on)f(the)h(horizon)n(tal)e
-(axis)h(should)g(b)r(e)h(giv)n(en)f(\014rst)g(in)h(eac)n(h)f(pair.)35
-b(Note)27 b(that)g(the)g(order)e(in)i(whic)n(h)427 2812
-y(these)f(p)r(oin)n(ts)h(are)e(giv)n(en)g(is)h(imp)r(ortan)n(t)g(b)r
-(ecause)g(it)g(de\014nes)g(up,)h(do)n(wn,)f(left)h(and)f(righ)n(t)f
-(for)h(subsequen)n(t)427 2911 y(graphical)g(op)r(erations.)259
-3037 y Fd(baseb)s(o)m(x)427 3136 y Fj(An)h(arra)n(y)d(giving)i(the)h
-(co)r(ordinates)e(of)i(t)n(w)n(o)e(p)r(oin)n(ts)i(in)g(the)g(supplied)g
-(F)-7 b(rame)26 b(\(or)f(in)i(the)g(base)f(F)-7 b(rame)26
-b(if)427 3236 y(a)k(F)-7 b(rameSet)31 b(w)n(as)e(supplied\))i(whic)n(h)
-g(corresp)r(ond)d(to)j(the)g(b)r(ottom)f(left)i(and)e(top)g(righ)n(t)g
-(corners)f(of)h(the)427 3335 y(plotting)e(v)n(olume,)f(as)g(sp)r
-(eci\014ed)h(ab)r(o)n(v)n(e.)36 b(This)27 b(range)g(of)g(co)r
-(ordinates)g(will)g(b)r(e)i(mapp)r(ed)f(linearly)e(on)i(to)427
-3435 y(the)g(plotting)g(area.)35 b(The)28 b(co)r(ordinates)e(should)h
-(b)r(e)h(giv)n(en)f(in)h(the)g(same)f(order)f(as)h(ab)r(o)n(v)n(e.)259
-3560 y Fd(options)427 3660 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 3760 y(assignmen)n(ts)h
-(to)h(b)r(e)g(used)g(for)f(initialising)h(the)g(new)g(Plot3D.)f(The)h
-(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)f(that)427
-3859 y(for)d(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-3959 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)35 b(If)28
-b(no)g(initialisation)f(is)g(required,)g(a)g(zero-length)f(string)h(ma)
-n(y)g(b)r(e)h(supplied.)259 4084 y Fd(...)427 4184 y
-Fj(If)38 b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 4283 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 4383 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 4483 y Fj(function\).)0
-4637 y Fd(Returned)32 b(V)-8 b(alue:)259 4766 y(astPlot3D\(\))427
-4865 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Plot3D.)0
-5020 y Fd(Notes:)340 5295 y Fi(\017)45 b Fj(The)24 b(base)f(F)-7
-b(rame)23 b(of)g(the)h(returned)f(Plot3D)g(will)g(b)r(e)h(a)f(new)h(F)
--7 b(rame)23 b(whic)n(h)g(is)g(created)g(b)n(y)g(this)h(function)427
-5394 y(to)f(represen)n(t)f(the)i(co)r(ordinate)e(system)g(of)h(the)h
-(underlying)e(graphics)g(system)h(\(graphical)f(co)r(ordinates\).)427
-5494 y(It)28 b(is)g(giv)n(en)f(a)g(F)-7 b(rame)28 b(index)f(of)h(1)f
-(within)i(the)f(Plot3D.)f(The)h(c)n(hoice)f(of)h(base)f(F)-7
-b(rame)27 b(\(Base)g(attribute\))427 5593 y(should)i(not,)h(in)g
-(general,)e(b)r(e)i(c)n(hanged)e(once)h(a)g(Plot3D)g(has)g(b)r(een)h
-(created)e(\(although)h(y)n(ou)g(could)g(use)427 5693
-y(this)f(as)f(a)g(w)n(a)n(y)g(of)g(mo)n(ving)g(the)h(plotting)f(area)f
-(around)h(on)g(the)h(plotting)g(surface\).)p eop end
-%%Page: 299 309
-TeXDict begin 299 308 bop 3643 52 a FF(299)340 351 y
-Fi(\017)45 b Fj(If)32 b(a)f(F)-7 b(rame)31 b(is)g(supplied)h(\(via)f
-(the)h Ft(")p Fj(frame)p Ft(")e Fj(p)r(oin)n(ter\),)i(then)g(it)g(b)r
-(ecomes)f(the)h(curren)n(t)e(F)-7 b(rame)31 b(of)g(the)427
-451 y(new)d(Plot3D)f(and)g(is)h(giv)n(en)f(a)g(F)-7 b(rame)27
-b(index)h(of)f(2.)340 583 y Fi(\017)45 b Fj(If)25 b(a)e(F)-7
-b(rameSet)24 b(is)g(supplied)g(\(via)g(the)h Ft(")p Fj(frame)p
-Ft(")d Fj(p)r(oin)n(ter\),)j(then)f(all)g(the)h(F)-7
-b(rames)23 b(within)i(this)f(F)-7 b(rameSet)427 682 y(b)r(ecome)37
-b(part)f(of)h(the)g(new)g(Plot3D)f(\(where)g(their)h(F)-7
-b(rame)36 b(indices)g(are)g(increased)g(b)n(y)g(1\),)j(with)e(the)427
-782 y(F)-7 b(rameSet's)27 b(curren)n(t)g(F)-7 b(rame)27
-b(b)r(ecoming)h(the)g(curren)n(t)e(F)-7 b(rame)27 b(of)h(the)g(Plot3D.)
-340 914 y Fi(\017)45 b Fj(If)19 b(a)f(n)n(ull)h(Ob)5
-b(ject)18 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))h(is)f(supplied)h
-(\(via)f(the)h Ft(")p Fj(frame)p Ft(")e Fj(p)r(oin)n(ter\),)j(then)f
-(the)g(returned)427 1014 y(Plot3D)25 b(will)g(con)n(tain)f(t)n(w)n(o)h
-(F)-7 b(rames,)24 b(b)r(oth)i(created)e(b)n(y)h(this)g(function.)37
-b(The)25 b(base)f(F)-7 b(rame)25 b(will)g(describ)r(e)427
-1113 y(graphics)18 b(co)r(ordinates)f(\(as)i(ab)r(o)n(v)n(e\))f(and)h
-(the)g(curren)n(t)f(F)-7 b(rame)19 b(will)g(b)r(e)g(a)g(basic)f(F)-7
-b(rame)19 b(with)g(no)g(attributes)427 1213 y(set)29
-b(\(this)h(will)f(therefore)f(giv)n(e)g(default)i(v)-5
-b(alues)28 b(for)h(suc)n(h)f(things)h(as)g(the)g(Plot3D)f(Title)i(and)e
-(the)i(Lab)r(el)427 1313 y(on)e(eac)n(h)e(axis\).)37
-b(Ph)n(ysical)26 b(co)r(ordinates)g(will)i(b)r(e)g(mapp)r(ed)g
-(linearly)f(on)g(to)g(graphical)f(co)r(ordinates.)340
-1444 y Fi(\017)45 b Fj(An)29 b(error)e(will)h(result)g(if)h(the)g(F)-7
-b(rame)28 b(supplied)h(\(or)f(the)g(base)g(F)-7 b(rame)28
-b(if)h(a)f(F)-7 b(rameSet)28 b(w)n(as)g(supplied\))h(is)427
-1544 y(not)f(3-dimensional.)340 1676 y Fi(\017)45 b Fj(A)35
-b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 1776 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p 0 1973 3780 12 v 0 2105 a Fz(astP)l(oin)l(tList)1416
-2104 y Fe(Create)38 b(a)g(P)m(oin)m(tList)3069 2105 y
-Fz(astP)l(oin)l(tList)0 2269 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(P)n(oin)n(tList)g(ob)5
-b(ject)27 b(and)h(optionally)e(initialises)i(its)g(attributes.)227
-2393 y(A)39 b(P)n(oin)n(tList)f(ob)5 b(ject)39 b(is)f(a)g(sp)r
-(ecialised)h(t)n(yp)r(e)g(of)f(Region)g(whic)n(h)h(represen)n(ts)e(a)i
-(collection)f(of)g(p)r(oin)n(ts)h(in)g(a)227 2492 y(co)r(ordinate)27
-b(F)-7 b(rame.)0 2641 y Fd(Synopsis:)121 b Ft(AstPointList)38
-b Fi(\003)p Ft(astPointList\()g(AstFrame)i Fi(\003)p
-Ft(frame,)h(int)h(npnt,)g(int)g(ncoord,)f(int)h(dim,)g(const)227
-2741 y(double)f Fi(\003)p Ft(points,)g(AstRegion)e Fi(\003)p
-Ft(unc,)j(const)f(char)h Fi(\003)p Ft(options,)e(...)86
-b(\))0 2889 y Fd(P)m(arameters:)259 3025 y(frame)427
-3124 y Fj(A)29 b(p)r(oin)n(ter)g(to)f(the)i(F)-7 b(rame)28
-b(in)h(whic)n(h)g(the)g(region)e(is)i(de\014ned.)41 b(A)29
-b(deep)g(cop)n(y)f(is)g(tak)n(en)g(of)h(the)g(supplied)427
-3224 y(F)-7 b(rame.)71 b(This)39 b(means)f(that)h(an)n(y)g(subsequen)n
-(t)f(c)n(hanges)g(made)h(to)f(the)i(F)-7 b(rame)38 b(using)h(the)g
-(supplied)427 3323 y(p)r(oin)n(ter)27 b(will)h(ha)n(v)n(e)f(no)g
-(e\013ect)h(the)g(Region.)259 3455 y Fd(npn)m(t)427 3555
-y Fj(The)g(n)n(um)n(b)r(er)f(of)h(p)r(oin)n(ts)f(in)h(the)g(Region.)259
-3687 y Fd(nco)s(ord)427 3787 y Fj(The)34 b(n)n(um)n(b)r(er)g(of)g(co)r
-(ordinates)f(b)r(eing)h(supplied)g(for)f(eac)n(h)h(p)r(oin)n(t.)56
-b(This)34 b(m)n(ust)g(equal)g(the)g(n)n(um)n(b)r(er)g(of)427
-3886 y(axes)27 b(in)h(the)g(supplied)g(F)-7 b(rame,)27
-b(giv)n(en)g(b)n(y)g(its)h(Naxes)f(attribute.)259 4018
-y Fd(dim)427 4118 y Fj(The)33 b(n)n(um)n(b)r(er)f(of)g(elemen)n(ts)g
-(along)f(the)i(second)f(dimension)g(of)g(the)h Ft(")p
-Fj(p)r(oin)n(ts)p Ft(")e Fj(arra)n(y)f(\(whic)n(h)j(con)n(tains)427
-4217 y(the)c(p)r(oin)n(t)f(co)r(ordinates\).)38 b(This)29
-b(v)-5 b(alue)28 b(is)g(required)f(so)h(that)h(the)f(co)r(ordinate)g(v)
--5 b(alues)27 b(can)h(b)r(e)h(correctly)427 4317 y(lo)r(cated)c(if)h
-(they)g(do)f(not)g(en)n(tirely)g(\014ll)g(this)h(arra)n(y)-7
-b(.)34 b(The)25 b(v)-5 b(alue)25 b(giv)n(en)g(should)g(not)g(b)r(e)h
-(less)f(than)g Ft(")p Fj(npn)n(t)p Ft(")p Fj(.)259 4449
-y Fd(p)s(oin)m(ts)427 4549 y Fj(The)h(address)f(of)i(the)f(\014rst)g
-(elemen)n(t)g(of)g(a)g(2-dimensional)f(arra)n(y)f(of)i(shap)r(e)g
-Ft(")p Fj([nco)r(ord][dim])p Ft(")f Fj(giving)g(the)427
-4648 y(ph)n(ysical)i(co)r(ordinates)g(of)h(the)g(p)r(oin)n(ts.)38
-b(These)28 b(should)g(b)r(e)g(stored)g(suc)n(h)f(that)i(the)f(v)-5
-b(alue)28 b(of)g(co)r(ordinate)427 4748 y(n)n(um)n(b)r(er)g
-Ft(")p Fj(co)r(ord)p Ft(")d Fj(for)i(p)r(oin)n(t)h(n)n(um)n(b)r(er)g
-Ft(")p Fj(pn)n(t)p Ft(")f Fj(is)g(found)h(in)g(elemen)n(t)g
-Ft(")p Fj(in[co)r(ord][pn)n(t])p Ft(")p Fj(.)259 4880
-y Fd(unc)427 4979 y Fj(An)33 b(optional)e(p)r(oin)n(ter)h(to)g(an)g
-(existing)g(Region)f(whic)n(h)h(sp)r(eci\014es)g(the)h(uncertain)n
-(ties)e(asso)r(ciated)g(with)427 5079 y(eac)n(h)36 b(p)r(oin)n(t)g(in)h
-(the)f(P)n(oin)n(tList)f(b)r(eing)i(created.)62 b(The)36
-b(uncertain)n(t)n(y)g(at)g(an)n(y)f(p)r(oin)n(t)i(in)f(the)h(P)n(oin)n
-(tList)427 5179 y(is)i(found)g(b)n(y)g(shifting)h(the)f(supplied)g
-Ft(")p Fj(uncertain)n(t)n(y)p Ft(")e Fj(Region)i(so)f(that)h(it)h(is)f
-(cen)n(tred)f(at)h(the)g(p)r(oin)n(t)427 5278 y(b)r(eing)c(considered.)
-57 b(The)35 b(area)e(co)n(v)n(ered)g(b)n(y)h(the)h(shifted)g(uncertain)
-n(t)n(y)f(Region)g(then)h(represen)n(ts)e(the)427 5378
-y(uncertain)n(t)n(y)27 b(in)h(the)g(p)r(osition.)37 b(The)27
-b(uncertain)n(t)n(y)g(is)g(assumed)g(to)h(b)r(e)g(the)g(same)f(for)g
-(all)g(p)r(oin)n(ts.)427 5494 y(If)38 b(supplied,)j(the)d(uncertain)n
-(t)n(y)f(Region)g(m)n(ust)g(b)r(e)i(of)e(a)g(class)g(for)g(whic)n(h)h
-(all)f(instances)g(are)g(cen)n(tro-)427 5593 y(symetric)24
-b(\(e.g.)35 b(Bo)n(x,)24 b(Circle,)g(Ellipse,)h(etc.\))36
-b(or)23 b(b)r(e)i(a)e(Prism)h(con)n(taining)f(cen)n(tro-symetric)f
-(comp)r(onen)n(t)427 5693 y(Regions.)57 b(A)35 b(deep)f(cop)n(y)g(of)g
-(the)h(supplied)g(Region)f(will)g(b)r(e)h(tak)n(en,)h(so)e(subsequen)n
-(t)g(c)n(hanges)f(to)h(the)p eop end
-%%Page: 300 310
-TeXDict begin 300 309 bop 0 52 a FF(300)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)427 351 y Fj(uncertain)n(t)n(y)e
-(Region)f(using)h(the)h(supplied)f(p)r(oin)n(ter)g(will)h(ha)n(v)n(e)e
-(no)h(e\013ect)h(on)f(the)g(created)g(Bo)n(x.)38 b(Alter-)427
-451 y(nativ)n(ely)-7 b(,)24 b(a)g(NULL)g(Ob)5 b(ject)24
-b(p)r(oin)n(ter)f(ma)n(y)h(b)r(e)g(supplied,)h(in)f(whic)n(h)g(case)f
-(a)g(default)i(uncertain)n(t)n(y)e(is)h(used)427 551
-y(equiv)-5 b(alen)n(t)28 b(to)f(a)g(b)r(o)n(x)g(1.0E-6)f(of)h(the)h
-(size)g(of)f(the)h(b)r(ounding)g(b)r(o)n(x)f(of)h(the)g(P)n(oin)n
-(tList)e(b)r(eing)i(created.)427 669 y(The)23 b(uncertain)n(t)n(y)f
-(Region)g(has)g(t)n(w)n(o)g(uses:)34 b(1\))22 b(when)h(the)g(astOv)n
-(erlap)d(function)k(compares)d(t)n(w)n(o)h(Regions)427
-769 y(for)g(equalit)n(y)h(the)g(uncertain)n(t)n(y)f(Region)g(is)g(used)
-h(to)g(determine)f(the)i(tolerance)d(on)i(the)g(comparison,)f(and)427
-869 y(2\))31 b(when)f(a)h(Region)e(is)i(mapp)r(ed)g(in)n(to)f(a)g
-(di\013eren)n(t)h(co)r(ordinate)e(system)i(and)f(subsequen)n(tly)g
-(simpli\014ed)427 968 y(\(using)c(astSimplify\),)h(the)f(uncertain)n
-(ties)f(are)g(used)h(to)g(determine)g(if)g(the)g(transformed)f(b)r
-(oundary)g(can)427 1068 y(b)r(e)j(accurately)e(represen)n(ted)h(b)n(y)g
-(a)g(sp)r(eci\014c)h(shap)r(e)f(of)h(Region.)259 1206
-y Fd(options)427 1306 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n(ull-terminated)
-g(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)
-g(attribute)427 1405 y(assignmen)n(ts)23 b(to)h(b)r(e)g(used)g(for)g
-(initialising)g(the)g(new)g(P)n(oin)n(tList.)35 b(The)24
-b(syn)n(tax)f(used)h(is)g(iden)n(tical)f(to)h(that)427
-1505 y(for)i(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-1605 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 1743
-y Fd(...)427 1842 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 1942 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 2042 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 2141 y Fj(function\).)0 2314
-y Fd(Returned)32 b(V)-8 b(alue:)259 2461 y(astP)m(oin)m(tList\(\))427
-2560 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(P)n(oin)n(tList.)0
-2733 y Fd(Notes:)340 3026 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 3125 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 3298 y Fd(Status)33
-b(Handling)n(:)227 3444 y Fj(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 3544 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fj(in)n(t)227 3643 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p
-0 3853 3780 12 v 0 3985 a Fz(astP)l(olyCurv)l(e)190 b
-Fe(Dra)m(w)37 b(a)i(series)f(of)h(connected)f(geo)s(desic)1730
-4084 y(curv)m(es)2990 3985 y Fz(astP)l(olyCurv)l(e)0
-4261 y Fd(Description:)44 b Fj(This)c(function)g(joins)f(a)g(series)g
-(of)g(p)r(oin)n(ts)h(sp)r(eci\014ed)g(in)f(the)h(ph)n(ysical)f(co)r
-(ordinate)f(system)i(of)f(a)227 4360 y(Plot)d(b)n(y)h(dra)n(wing)e(a)i
-(sequence)f(of)h(geo)r(desic)e(curv)n(es.)64 b(It)37
-b(is)f(equiv)-5 b(alen)n(t)37 b(to)f(making)g(rep)r(eated)h(use)g(of)f
-(the)227 4460 y(astCurv)n(e)29 b(function)i(\(q.v.\),)g(except)f(that)g
-(astP)n(olyCurv)n(e)d(will)j(generally)f(b)r(e)h(more)g(e\016cien)n(t)g
-(when)g(dra)n(wing)227 4559 y(man)n(y)d(geo)r(desic)g(curv)n(es)f
-(end-to-end.)37 b(A)28 b(t)n(ypical)f(application)g(of)g(this)h(migh)n
-(t)g(b)r(e)g(in)g(dra)n(wing)e(con)n(tour)g(lines.)227
-4689 y(As)g(with)h(astCurv)n(e,)e(full)h(accoun)n(t)g(is)f(tak)n(en)h
-(of)g(the)g(Mapping)g(b)r(et)n(w)n(een)g(ph)n(ysical)f(and)g(graphical)
-g(co)r(ordinate)227 4789 y(systems.)37 b(This)27 b(includes)h(an)n(y)f
-(discon)n(tin)n(uities)g(and)g(clipping)h(established)f(using)h
-(astClip.)0 4949 y Fd(Synopsis:)121 b Ft(void)42 b(astPolyCurve\()c
-(AstPlot)j Fi(\003)p Ft(this,)g(int)h(npoint,)f(int)h(ncoord,)f(int)h
-(indim,)f(const)h(double)227 5049 y Fi(\003)p Ft(in)h(\))0
-5209 y Fd(P)m(arameters:)259 5356 y(this)427 5455 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Plot.)259 5593 y Fd(np)s(oin)m(t)427 5693
-y Fj(The)g(n)n(um)n(b)r(er)f(of)h(p)r(oin)n(ts)f(b)r(et)n(w)n(een)h
-(whic)n(h)f(geo)r(desic)g(curv)n(es)f(are)h(to)h(b)r(e)g(dra)n(wn.)p
-eop end
-%%Page: 301 311
-TeXDict begin 301 310 bop 3643 52 a FF(301)259 351 y
-Fd(nco)s(ord)427 451 y Fj(The)37 b(n)n(um)n(b)r(er)f(of)h(co)r
-(ordinates)e(b)r(eing)h(supplied)h(for)f(eac)n(h)g(p)r(oin)n(t)g
-(\(i.e.)64 b(the)37 b(n)n(um)n(b)r(er)f(of)h(axes)e(in)i(the)427
-551 y(curren)n(t)27 b(F)-7 b(rame)27 b(of)h(the)g(Plot,)f(as)g(giv)n
-(en)f(b)n(y)i(its)f(Naxes)g(attribute\).)259 682 y Fd(indim)427
-782 y Fj(The)33 b(n)n(um)n(b)r(er)f(of)h(elemen)n(ts)g(along)e(the)i
-(second)f(dimension)h(of)f(the)h Ft(")p Fj(in)p Ft(")f
-Fj(arra)n(y)f(\(whic)n(h)i(con)n(tains)e(the)427 882
-y(input)39 b(co)r(ordinates\).)65 b(This)38 b(v)-5 b(alue)37
-b(is)h(required)f(so)f(that)i(the)g(co)r(ordinate)f(v)-5
-b(alues)37 b(can)g(b)r(e)h(correctly)427 981 y(lo)r(cated)21
-b(if)h(they)f(do)g(not)g(en)n(tirely)g(\014ll)h(this)f(arra)n(y)-7
-b(.)33 b(The)21 b(v)-5 b(alue)21 b(giv)n(en)f(should)h(not)g(b)r(e)h
-(less)f(than)g Ft(")p Fj(np)r(oin)n(t)p Ft(")p Fj(.)259
-1113 y Fd(in)427 1213 y Fj(The)32 b(address)e(of)i(the)g(\014rst)f
-(elemen)n(t)h(in)f(a)h(2-dimensional)e(arra)n(y)f(of)j(shap)r(e)f
-Ft(")p Fj([nco)r(ord][indim])p Ft(")f Fj(giving)427 1312
-y(the)e(ph)n(ysical)e(co)r(ordinates)g(of)h(the)g(p)r(oin)n(ts)h(whic)n
-(h)f(are)f(to)h(b)r(e)g(joined)h(in)f(sequence)g(b)n(y)g(geo)r(desic)f
-(curv)n(es.)427 1412 y(These)j(should)g(b)r(e)h(stored)e(suc)n(h)h
-(that)g(the)h(v)-5 b(alue)29 b(of)g(co)r(ordinate)f(n)n(um)n(b)r(er)h
-Ft(")p Fj(co)r(ord)p Ft(")e Fj(for)i(p)r(oin)n(t)g(n)n(um)n(b)r(er)427
-1511 y Ft(")p Fj(p)r(oin)n(t)p Ft(")e Fj(is)h(found)g(in)f(elemen)n(t)h
-Ft(")p Fj(in[co)r(ord][p)r(oin)n(t])p Ft(")p Fj(.)0 1672
-y Fd(Notes:)340 1954 y Fi(\017)45 b Fj(No)32 b(curv)n(e)f(is)i(dra)n
-(wn)e(on)h(either)g(side)g(of)g(an)n(y)f(p)r(oin)n(t)h(whic)n(h)h(has)e
-(an)n(y)h(co)r(ordinate)f(equal)g(to)h(the)h(v)-5 b(alue)427
-2053 y(AST)p Ft(__)p Fj(BAD.)340 2185 y Fi(\017)45 b
-Fj(An)28 b(error)e(results)h(if)h(the)g(base)f(F)-7 b(rame)27
-b(of)h(the)g(Plot)f(is)g(not)h(2-dimensional.)340 2317
-y Fi(\017)45 b Fj(An)30 b(error)d(also)g(results)i(if)g(the)g
-(transformation)f(b)r(et)n(w)n(een)h(the)g(curren)n(t)f(and)h(base)f(F)
--7 b(rames)28 b(of)h(the)g(Plot)427 2417 y(is)f(not)f(de\014ned)h
-(\(i.e.)38 b(the)28 b(Plot's)e(T)-7 b(ranIn)n(v)n(erse)26
-b(attribute)h(is)h(zero\).)p 0 2614 3780 12 v 0 2745
-a Fz(astP)l(olyMap)721 b Fe(Create)38 b(a)g(P)m(olyMap)718
-b Fz(astP)l(olyMap)0 2932 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(P)n(olyMap)f(and)i(optionally)f
-(initialises)g(its)h(attributes.)227 3056 y(A)40 b(P)n(olyMap)d(is)i(a)
-f(form)h(of)g(Mapping)g(whic)n(h)g(p)r(erforms)f(a)g(general)g(p)r
-(olynomial)g(transformation.)70 b(Eac)n(h)227 3156 y(output)29
-b(co)r(ordinate)d(is)i(a)g(p)r(olynomial)f(function)i(of)e(all)h(the)g
-(input)h(co)r(ordinates.)36 b(The)28 b(co)r(e\016cien)n(ts)g(are)f(sp)r
-(ec-)227 3255 y(i\014ed)k(separately)e(for)h(eac)n(h)g(output)i(co)r
-(ordinate.)44 b(The)31 b(forw)n(ard)e(and)i(in)n(v)n(erse)e
-(transformations)g(are)g(de\014ned)227 3355 y(indep)r(endan)n(tly)f(b)n
-(y)g(separate)e(sets)h(of)h(co)r(e\016cien)n(ts.)0 3503
-y Fd(Synopsis:)121 b Ft(AstPolyMap)39 b Fi(\003)p Ft(astPolyMap\()g
-(int)j(nin,)g(int)g(nout,)g(int)g(ncoeff_f,)e(const)i(double)f
-(coeff_f[],)227 3603 y(int)i(ncoeff_i,)c(const)j(double)f(coeff_i[],)f
-(const)h(char)h Fi(\003)p Ft(options,)e(...)86 b(\))0
-3751 y Fd(P)m(arameters:)259 3887 y(nin)427 3986 y Fj(The)28
-b(n)n(um)n(b)r(er)f(of)h(input)g(co)r(ordinates.)259
-4118 y Fd(nout)427 4218 y Fj(The)g(n)n(um)n(b)r(er)f(of)h(output)g(co)r
-(ordinates.)259 4350 y Fd(nco)s(e\013)p Ft(_)p Fd(f)427
-4449 y Fj(The)36 b(n)n(um)n(b)r(er)f(of)h(non-zero)d(co)r(e\016cien)n
-(ts)i(necessary)f(to)i(de\014ne)f(the)h(forw)n(ard)e(transformation)g
-(of)h(the)427 4549 y(P)n(olyMap.)h(If)28 b(zero)e(is)i(supplied,)g(the)
-g(forw)n(ard)d(transformation)h(will)i(b)r(e)g(unde\014ned.)259
-4681 y Fd(co)s(e\013)p Ft(_)p Fd(f)427 4780 y Fj(An)38
-b(arra)n(y)c(con)n(taining)i Ft(")p Fj(nco)r(e\013)p
-Ft(_)p Fj(f)p Fi(\003)p Fj(\()g(2)h(+)f(nin)h(\))p Ft(")g
-Fj(elemen)n(ts.)65 b(Eac)n(h)35 b(group)h(of)h Ft(")p
-Fj(2)f(+)g(nin)p Ft(")h Fj(adjacen)n(t)427 4880 y(elemen)n(ts)26
-b(describ)r(e)f(a)f(single)h(co)r(e\016cien)n(t)h(of)f(the)h(forw)n
-(ard)d(transformation.)35 b(Within)26 b(eac)n(h)f(suc)n(h)g(group,)427
-4980 y(the)g(\014rst)g(elemen)n(t)g(is)f(the)h(co)r(e\016cien)n(t)g(v)
--5 b(alue;)25 b(the)h(next)e(elemen)n(t)h(is)g(the)g(in)n(teger)f
-(index)g(of)h(the)g(P)n(olyMap)427 5079 y(output)33 b(whic)n(h)f(uses)f
-(the)h(co)r(e\016cien)n(t)g(within)h(its)f(de\014ning)g(p)r(olynomial)f
-(\(the)i(\014rst)f(output)g(has)g(index)427 5179 y(1\);)48
-b(the)41 b(remaining)f(elemen)n(ts)h(of)g(the)g(group)f(giv)n(e)g(the)h
-(in)n(teger)f(p)r(o)n(w)n(ers)g(to)g(use)h(with)h(eac)n(h)e(input)427
-5278 y(co)r(ordinate)27 b(v)-5 b(alue)27 b(\(p)r(o)n(w)n(ers)g(m)n(ust)
-h(not)f(b)r(e)h(negativ)n(e,)f(and)h(\015oating)f(p)r(oin)n(t)g(v)-5
-b(alues)28 b(are)e(rounded)i(to)f(the)427 5378 y(nearest)g(in)n
-(teger\).)36 b(If)28 b Ft(")p Fj(nco)r(e\013)p Ft(_)p
-Fj(f)p Ft(")f Fj(is)h(zero,)e(a)h(NULL)h(p)r(oin)n(ter)g(ma)n(y)e(b)r
-(e)i(supplied)g(for)f Ft(")p Fj(co)r(e\013)p Ft(_)p Fj(f)p
-Ft(")p Fj(.)427 5494 y(F)-7 b(or)24 b(instance,)h(if)g(the)f(P)n
-(olyMap)f(has)h(3)g(inputs)h(and)f(2)g(outputs,)h(eac)n(h)f(group)f
-(consisting)g(of)i(5)f(elemen)n(ts,)427 5593 y(A)i(groups)e(suc)n(h)h
-(as)f Ft(")p Fj(\(1.2,)h(2.0,)g(1.0,)g(3.0,)g(0.0\))p
-Ft(")f Fj(describ)r(es)g(a)h(co)r(e\016cien)n(t)g(with)h(v)-5
-b(alue)25 b(1.2)f(whic)n(h)i(is)f(used)427 5693 y(within)36
-b(the)f(de\014nition)h(of)e(output)i(2.)59 b(The)35 b(output)g(v)-5
-b(alue)35 b(is)g(incremen)n(ted)f(b)n(y)h(the)g(pro)r(duct)g(of)g(the)p
-eop end
-%%Page: 302 312
-TeXDict begin 302 311 bop 0 52 a FF(302)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)427 351 y Fj(co)r(e\016cien)n(t)25
-b(v)-5 b(alue,)25 b(the)g(v)-5 b(alue)24 b(of)h(input)g(co)r(ordinate)e
-(1)i(raised)e(to)h(the)h(p)r(o)n(w)n(er)f(1,)h(and)f(the)h(v)-5
-b(alue)24 b(of)h(input)427 451 y(co)r(ordinate)g(2)g(raised)f(to)i(the)
-g(p)r(o)n(w)n(er)e(3.)36 b(Input)26 b(co)r(ordinate)f(3)g(is)g(not)h
-(used)f(since)h(its)g(p)r(o)n(w)n(er)e(is)h(sp)r(eci\014ed)427
-551 y(as)i(zero.)36 b(As)27 b(another)f(example,)h(the)h(group)e
-Ft(")p Fj(\(-1.0,)g(1.0,)h(0.0,)g(0.0,)f(0.0)h(\))p Ft(")g
-Fj(describ)r(es)g(adds)f(a)h(constan)n(t)427 650 y(v)-5
-b(alue)30 b(-1.0)e(on)n(to)g(output)i(1)f(\(it)i(is)e(a)g(constan)n(t)g
-(v)-5 b(alue)29 b(since)g(the)h(p)r(o)n(w)n(er)e(for)h(ev)n(ery)f
-(input)i(axis)f(is)g(giv)n(en)427 750 y(as)e(zero\).)427
-866 y(Eac)n(h)e(\014nal)h(output)h(co)r(ordinate)e(v)-5
-b(alue)26 b(is)g(the)g(sum)h(of)f(the)g Ft(")p Fj(nco)r(e\013)p
-Ft(_)p Fj(f)p Ft(")g Fj(terms)f(describ)r(ed)h(b)n(y)g(the)h
-Ft(")p Fj(nco-)427 965 y(e\013)p Ft(_)p Fj(f)p Ft(")h
-Fj(groups)e(within)i(the)g(supplied)g(arra)n(y)-7 b(.)259
-1098 y Fd(nco)s(e\013)p Ft(_)p Fd(i)427 1197 y Fj(The)38
-b(n)n(um)n(b)r(er)g(of)g(non-zero)e(co)r(e\016cien)n(ts)i(necessary)e
-(to)i(de\014ne)g(the)g(in)n(v)n(erse)f(transformation)f(of)i(the)427
-1297 y(P)n(olyMap.)e(If)28 b(zero)e(is)i(supplied,)g(the)g(in)n(v)n
-(erse)e(transformation)g(will)h(b)r(e)h(unde\014ned.)259
-1430 y Fd(co)s(e\013)p Ft(_)p Fd(i)427 1529 y Fj(An)k(arra)n(y)c(con)n
-(taining)i Ft(")p Fj(nco)r(e\013)p Ft(_)p Fj(i)p Fi(\003)p
-Fj(\()h(2)f(+)h(nout)g(\))p Ft(")g Fj(elemen)n(ts.)47
-b(Eac)n(h)30 b(group)g(of)h Ft(")p Fj(2)f(+)g(nout)p
-Ft(")h Fj(adjacen)n(t)427 1629 y(elemen)n(ts)25 b(describ)r(e)g(a)g
-(single)g(co)r(e\016cien)n(t)g(of)h(the)f(in)n(v)n(erse)f
-(transformation,)g(using)h(the)h(same)f(sc)n(hame)f(as)427
-1728 y Ft(")p Fj(co)r(e\013)p Ft(_)p Fj(f)p Ft(")p Fj(,)j(except)h
-(that)f Ft(")p Fj(inputs)p Ft(")g Fj(and)h Ft(")p Fj(outputs)p
-Ft(")f Fj(are)f(transp)r(osed.)36 b(If)28 b Ft(")p Fj(nco)r(e\013)p
-Ft(_)p Fj(i)p Ft(")e Fj(is)i(zero,)e(a)h(NULL)427 1828
-y(p)r(oin)n(ter)g(ma)n(y)g(b)r(e)h(supplied)g(for)f Ft(")p
-Fj(co)r(e\013)p Ft(_)p Fj(i)p Ft(")p Fj(.)259 1960 y
-Fd(options)427 2060 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n(ull-terminated)g
-(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g
-(attribute)427 2160 y(assignmen)n(ts)c(to)g(b)r(e)h(used)g(for)f
-(initialising)g(the)h(new)g(P)n(olyMap.)34 b(The)25 b(syn)n(tax)e(used)
-i(is)f(iden)n(tical)h(to)f(that)427 2259 y(for)i(the)h(astSet)g
-(function)g(and)g(ma)n(y)f(include)h Ft(")p Fj(prin)n(tf)p
-Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n(ti\014ed)h(b)n(y)f
-Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427 2359 y(in)i(the)g(normal)f
-(w)n(a)n(y)-7 b(.)259 2491 y Fd(...)427 2591 y Fj(If)38
-b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 2691 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 2790 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 2890 y Fj(function\).)0
-3051 y Fd(Returned)32 b(V)-8 b(alue:)259 3187 y(astP)m(olyMap\(\))427
-3287 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(P)n(olyMap.)0
-3449 y Fd(Notes:)340 3731 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 3830 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 4029 3780 12 v 0 4160
-a Fz(astP)l(olygon)805 b Fe(Create)37 b(a)h(P)m(olygon)801
-b Fz(astP)l(olygon)0 4348 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(P)n(olygon)f(ob)5 b(ject)27
-b(and)h(optionally)e(initialises)i(its)f(attributes.)227
-4473 y(The)36 b(P)n(olygon)d(class)i(implemen)n(ts)g(a)g(p)r(olygonal)f
-(area,)i(de\014ned)g(b)n(y)f(a)h(collection)e(of)i(v)n(ertices,)g
-(within)g(a)f(2-)227 4572 y(dimensional)20 b(F)-7 b(rame.)34
-b(The)21 b(v)n(ertices)e(are)h(connected)g(together)g(b)n(y)g(geo)r
-(desic)g(curv)n(es)f(within)i(the)g(encapsulated)227
-4672 y(F)-7 b(rame.)34 b(F)-7 b(or)20 b(instance,)i(if)f(the)g
-(encapsulated)f(F)-7 b(rame)21 b(is)f(a)g(simple)h(F)-7
-b(rame)20 b(then)h(the)g(geo)r(desics)f(will)h(b)r(e)g(straigh)n(t)227
-4772 y(lines,)33 b(but)f(if)g(the)g(F)-7 b(rame)31 b(is)h(a)f(SkyF)-7
-b(rame)31 b(then)h(the)g(geo)r(desics)e(will)i(b)r(e)g(great)e
-(circles.)48 b(Note,)33 b(the)f(v)n(ertices)227 4871
-y(m)n(ust)d(b)r(e)g(supplied)g(in)g(an)f(order)f(suc)n(h)i(that)g(the)g
-(inside)f(of)h(the)g(p)r(olygon)f(is)g(to)h(the)g(left)g(of)f(the)h(b)r
-(oundary)f(as)227 4971 y(the)f(v)n(ertices)e(are)h(tra)n(v)n(ersed.)34
-b(Supplying)26 b(them)h(in)g(the)g(rev)n(erse)d(order)h(will)i
-(e\013ectiv)n(ely)f(negate)g(the)h(p)r(olygon.)227 5095
-y(Within)33 b(a)e(SkyF)-7 b(rame,)32 b(neigh)n(b)r(ouring)e(v)n
-(ertices)g(are)h(alw)n(a)n(ys)e(joined)j(using)f(the)h(shortest)e
-(path.)49 b(Th)n(us)31 b(if)h(an)227 5195 y(edge)f(of)g(180)f(degrees)g
-(or)g(more)g(in)i(length)f(is)g(required,)g(it)h(should)e(b)r(e)i
-(split)g(in)n(to)e(section)h(eac)n(h)g(of)g(whic)n(h)g(is)227
-5295 y(less)k(than)h(180)e(degrees.)59 b(The)35 b(closed)g(path)g
-(joining)g(all)h(the)f(v)n(ertices)g(in)g(order)f(will)i(divide)f(the)h
-(celestial)227 5394 y(sphere)f(in)n(to)h(t)n(w)n(o)f(disjoin)n(t)h
-(regions.)60 b(The)36 b(inside)g(of)g(the)g(p)r(olygon)f(is)g(the)h
-(region)f(whic)n(h)h(is)f(circled)h(in)g(an)227 5494
-y(an)n(ti-clo)r(c)n(kwise)25 b(manner)h(\(when)i(view)n(ed)e(from)g
-(the)h(inside)g(of)g(the)g(celestial)f(sphere\))h(when)g(mo)n(ving)e
-(through)227 5593 y(the)h(list)f(of)g(v)n(ertices)f(in)i(the)f(order)f
-(in)h(whic)n(h)g(they)h(w)n(ere)e(supplied)h(when)h(the)f(P)n(olygon)e
-(w)n(as)h(created)h(\(i.e.)36 b(the)227 5693 y(inside)28
-b(is)f(to)h(the)g(left)g(of)g(the)g(b)r(oundary)f(when)g(mo)n(ving)g
-(through)g(the)h(v)n(ertices)e(in)i(the)g(order)e(supplied\).)p
-eop end
-%%Page: 303 313
-TeXDict begin 303 312 bop 3643 52 a FF(303)0 351 y Fd(Synopsis:)121
-b Ft(AstPolygon)39 b Fi(\003)p Ft(astPolygon\()g(AstFrame)h
-Fi(\003)p Ft(frame,)h(int)h(npnt,)g(int)g(dim,)g(const)f(double)h
-Fi(\003)p Ft(points,)227 451 y(AstRegion)e Fi(\003)p
-Ft(unc,)i(const)f(char)h Fi(\003)p Ft(options,)e(...)86
-b(\))0 597 y Fd(P)m(arameters:)259 730 y(frame)427 829
-y Fj(A)30 b(p)r(oin)n(ter)f(to)g(the)g(F)-7 b(rame)29
-b(in)g(whic)n(h)g(the)h(region)e(is)h(de\014ned.)42 b(It)30
-b(m)n(ust)f(ha)n(v)n(e)f(exactly)g(2)h(axes.)41 b(A)29
-b(deep)427 929 y(cop)n(y)h(is)g(tak)n(en)f(of)i(the)f(supplied)h(F)-7
-b(rame.)44 b(This)30 b(means)g(that)h(an)n(y)e(subsequen)n(t)h(c)n
-(hanges)f(made)h(to)g(the)427 1029 y(F)-7 b(rame)27 b(using)h(the)g
-(supplied)f(p)r(oin)n(ter)h(will)g(ha)n(v)n(e)e(no)h(e\013ect)h(the)g
-(Region.)259 1158 y Fd(npn)m(t)427 1258 y Fj(The)g(n)n(um)n(b)r(er)f
-(of)h(p)r(oin)n(ts)f(in)h(the)g(Region.)259 1387 y Fd(dim)427
-1487 y Fj(The)33 b(n)n(um)n(b)r(er)f(of)g(elemen)n(ts)g(along)f(the)i
-(second)f(dimension)g(of)g(the)h Ft(")p Fj(p)r(oin)n(ts)p
-Ft(")e Fj(arra)n(y)f(\(whic)n(h)j(con)n(tains)427 1586
-y(the)c(p)r(oin)n(t)f(co)r(ordinates\).)38 b(This)29
-b(v)-5 b(alue)28 b(is)g(required)f(so)h(that)h(the)f(co)r(ordinate)g(v)
--5 b(alues)27 b(can)h(b)r(e)h(correctly)427 1686 y(lo)r(cated)c(if)h
-(they)g(do)f(not)g(en)n(tirely)g(\014ll)g(this)h(arra)n(y)-7
-b(.)34 b(The)25 b(v)-5 b(alue)25 b(giv)n(en)g(should)g(not)g(b)r(e)h
-(less)f(than)g Ft(")p Fj(npn)n(t)p Ft(")p Fj(.)259 1815
-y Fd(p)s(oin)m(ts)427 1915 y Fj(The)41 b(address)f(of)h(the)g(\014rst)f
-(elemen)n(t)h(of)g(a)g(2-dimensional)e(arra)n(y)g(of)h(shap)r(e)h
-Ft(")p Fj([2][dim])p Ft(")f Fj(giving)g(the)427 2015
-y(ph)n(ysical)24 b(co)r(ordinates)f(of)h(the)g(v)n(ertices.)35
-b(These)24 b(should)g(b)r(e)h(stored)e(suc)n(h)h(that)h(the)f(v)-5
-b(alue)25 b(of)f(co)r(ordinate)427 2114 y(n)n(um)n(b)r(er)k
-Ft(")p Fj(co)r(ord)p Ft(")d Fj(for)i(p)r(oin)n(t)h(n)n(um)n(b)r(er)g
-Ft(")p Fj(pn)n(t)p Ft(")f Fj(is)g(found)h(in)g(elemen)n(t)g
-Ft(")p Fj(in[co)r(ord][pn)n(t])p Ft(")p Fj(.)259 2244
-y Fd(unc)427 2343 y Fj(An)33 b(optional)e(p)r(oin)n(ter)h(to)g(an)g
-(existing)g(Region)f(whic)n(h)h(sp)r(eci\014es)g(the)h(uncertain)n
-(ties)e(asso)r(ciated)g(with)427 2443 y(the)j(b)r(oundary)f(of)g(the)h
-(Bo)n(x)f(b)r(eing)g(created.)54 b(The)34 b(uncertain)n(t)n(y)e(in)i
-(an)n(y)f(p)r(oin)n(t)h(on)f(the)h(b)r(oundary)f(of)427
-2543 y(the)g(Bo)n(x)e(is)h(found)h(b)n(y)f(shifting)h(the)f(supplied)h
-Ft(")p Fj(uncertain)n(t)n(y)p Ft(")e Fj(Region)g(so)h(that)g(it)h(is)f
-(cen)n(tred)g(at)g(the)427 2642 y(b)r(oundary)e(p)r(oin)n(t)h(b)r(eing)
-g(considered.)44 b(The)31 b(area)e(co)n(v)n(ered)g(b)n(y)h(the)h
-(shifted)g(uncertain)n(t)n(y)f(Region)g(then)427 2742
-y(represen)n(ts)g(the)i(uncertain)n(t)n(y)f(in)g(the)h(b)r(oundary)f(p)
-r(osition.)48 b(The)31 b(uncertain)n(t)n(y)g(is)g(assumed)g(to)g(b)r(e)
-h(the)427 2841 y(same)27 b(for)g(all)h(p)r(oin)n(ts.)427
-2956 y(If)38 b(supplied,)j(the)d(uncertain)n(t)n(y)f(Region)g(m)n(ust)g
-(b)r(e)i(of)e(a)g(class)g(for)g(whic)n(h)h(all)f(instances)g(are)g(cen)
-n(tro-)427 3056 y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24
-b(Circle,)g(Ellipse,)h(etc.\))36 b(or)23 b(b)r(e)i(a)e(Prism)h(con)n
-(taining)f(cen)n(tro-symetric)f(comp)r(onen)n(t)427 3155
-y(Regions.)57 b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f
-(will)g(b)r(e)h(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)
-427 3255 y(uncertain)n(t)n(y)28 b(Region)f(using)h(the)h(supplied)f(p)r
-(oin)n(ter)g(will)h(ha)n(v)n(e)e(no)h(e\013ect)h(on)f(the)g(created)g
-(Bo)n(x.)38 b(Alter-)427 3354 y(nativ)n(ely)-7 b(,)24
-b(a)g(NULL)g(Ob)5 b(ject)24 b(p)r(oin)n(ter)f(ma)n(y)h(b)r(e)g
-(supplied,)h(in)f(whic)n(h)g(case)f(a)g(default)i(uncertain)n(t)n(y)e
-(is)h(used)427 3454 y(equiv)-5 b(alen)n(t)28 b(to)f(a)g(b)r(o)n(x)g
-(1.0E-6)f(of)h(the)h(size)g(of)f(the)h(Bo)n(x)f(b)r(eing)g(created.)427
-3569 y(The)c(uncertain)n(t)n(y)f(Region)g(has)g(t)n(w)n(o)g(uses:)34
-b(1\))22 b(when)h(the)g(astOv)n(erlap)d(function)k(compares)d(t)n(w)n
-(o)h(Regions)427 3668 y(for)g(equalit)n(y)h(the)g(uncertain)n(t)n(y)f
-(Region)g(is)g(used)h(to)g(determine)f(the)i(tolerance)d(on)i(the)g
-(comparison,)f(and)427 3768 y(2\))31 b(when)f(a)h(Region)e(is)i(mapp)r
-(ed)g(in)n(to)f(a)g(di\013eren)n(t)h(co)r(ordinate)e(system)i(and)f
-(subsequen)n(tly)g(simpli\014ed)427 3867 y(\(using)c(astSimplify\),)h
-(the)f(uncertain)n(ties)f(are)g(used)h(to)g(determine)g(if)g(the)g
-(transformed)f(b)r(oundary)g(can)427 3967 y(b)r(e)j(accurately)e
-(represen)n(ted)h(b)n(y)g(a)g(sp)r(eci\014c)h(shap)r(e)f(of)h(Region.)
-259 4096 y Fd(options)427 4196 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 4296 y(assignmen)n(ts)e
-(to)h(b)r(e)g(used)g(for)g(initialising)g(the)g(new)g(P)n(olygon.)35
-b(The)27 b(syn)n(tax)f(used)h(is)g(iden)n(tical)f(to)h(that)427
-4395 y(for)f(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-4495 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 4624
-y Fd(...)427 4724 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 4824 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 4923 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 5023 y Fj(function\).)0 5181
-y Fd(Returned)32 b(V)-8 b(alue:)259 5314 y(astP)m(olygon\(\))427
-5414 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(P)n(olygon.)0
-5572 y Fd(Notes:)p eop end
-%%Page: 304 314
-TeXDict begin 304 313 bop 0 52 a FF(304)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 451 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)-2 629 y Fd(Status)33 b(Handling)n(:)227 775
-y Fj(The)d(protected)g(in)n(terface)f(to)g(this)h(function)h(includes)f
-(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g(the)g(parameter)227
-875 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37
-b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)e
-(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fj(in)n(t)227
-975 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p 0 1190 3780
-12 v 0 1322 a Fz(astPrism)1502 1321 y Fe(Create)37 b(a)h(Prism)3259
-1322 y Fz(astPrism)0 1504 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(Prism)g(and)g(optionally)g
-(initialises)h(its)f(attributes.)227 1637 y(A)21 b(Prism)e(is)h(a)f
-(Region)g(whic)n(h)h(represen)n(ts)f(an)h(extrusion)f(of)h(an)f
-(existing)h(Region)f(in)n(to)h(one)g(or)f(more)g(orthogonal)227
-1736 y(dimensions)k(\(sp)r(eci\014ed)h(b)n(y)f(another)f(Region\).)35
-b(If)23 b(the)h(Region)e(to)h(b)r(e)h(extruded)f(has)f(N)i(axes,)f(and)
-g(the)g(Region)227 1836 y(de\014ning)36 b(the)f(extrusion)f(has)h(M)g
-(axes,)i(then)e(the)h(resulting)f(Prism)f(will)h(ha)n(v)n(e)f(\(M+N\))i
-(axes.)59 b(A)35 b(p)r(oin)n(t)h(is)227 1935 y(inside)28
-b(the)g(Prism)f(if)h(the)g(\014rst)f(N)h(axis)f(v)-5
-b(alues)28 b(corresp)r(ond)e(to)h(a)g(p)r(oin)n(t)h(inside)g(the)g
-(Region)f(b)r(eing)h(extruded,)227 2035 y(and)g(the)g(remaining)e(M)i
-(axis)f(v)-5 b(alues)27 b(corresp)r(ond)f(to)i(a)f(p)r(oin)n(t)h
-(inside)f(the)h(Region)f(de\014ning)h(the)g(extrusion.)227
-2168 y(As)33 b(an)g(example,)h(a)f(cylinder)g(can)f(b)r(e)i(represen)n
-(ted)e(b)n(y)h(extruding)f(an)h(existing)g(Circle,)h(using)e(an)h(In)n
-(terv)-5 b(al)227 2267 y(to)31 b(de\014ne)g(the)g(extrusion.)46
-b(Ih)31 b(this)g(case,)g(the)g(In)n(terv)-5 b(al)30 b(w)n(ould)h(ha)n
-(v)n(e)e(a)i(single)f(axis)g(and)h(w)n(ould)f(sp)r(ecify)h(the)227
-2367 y(upp)r(er)d(and)f(lo)n(w)n(er)f(limits)j(of)e(the)h(cylinder)f
-(along)g(its)g(length.)0 2533 y Fd(Synopsis:)121 b Ft(AstPrism)40
-b Fi(\003)p Ft(astPrism\()g(AstRegion)f Fi(\003)p Ft(region1,)h
-(AstRegion)g Fi(\003)p Ft(region2,)g(const)h(char)h Fi(\003)p
-Ft(options,)227 2633 y(...)86 b(\))0 2798 y Fd(P)m(arameters:)259
-2951 y(region1)427 3051 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Region)f(to)
-g(b)r(e)h(extruded.)259 3192 y Fd(region2)427 3292 y
-Fj(P)n(oin)n(ter)e(to)i(the)g(Region)f(de\014ning)g(the)h(exten)n(t)g
-(of)f(the)h(extrusion.)259 3433 y Fd(options)427 3532
-y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-3632 y(assignmen)n(ts)j(to)g(b)r(e)h(used)g(for)f(initialising)h(the)g
-(new)f(Prism.)49 b(The)31 b(syn)n(tax)g(used)h(is)f(iden)n(tical)h(to)f
-(that)427 3731 y(for)26 b(the)h(astSet)g(function)g(and)g(ma)n(y)f
-(include)h Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g
-(iden)n(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-3831 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 3972
-y Fd(...)427 4072 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 4171 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 4271 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 4371 y Fj(function\).)0 4549
-y Fd(Returned)32 b(V)-8 b(alue:)259 4702 y(astPrism\(\))427
-4801 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Prism.)0
-4980 y Fd(Notes:)340 5279 y Fi(\017)45 b Fj(Deep)37 b(copies)g(are)e
-(tak)n(en)i(of)f(the)i(supplied)f(Regions.)63 b(This)37
-b(means)f(that)i(an)n(y)e(subsequen)n(t)g(c)n(hanges)427
-5378 y(made)25 b(to)h(the)f(comp)r(onen)n(t)g(Regions)g(using)g(the)h
-(supplied)f(p)r(oin)n(ters)g(will)h(ha)n(v)n(e)e(no)h(e\013ect)h(on)f
-(the)g(Prism.)340 5519 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 5619 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p eop end
-%%Page: 305 315
-TeXDict begin 305 314 bop 3643 52 a FF(305)p 0 351 3780
-12 v 0 482 a Fz(astPurgeW)l(CS)1068 483 y Fe(Delete)39
-b(all)e(cards)i(in)f(the)h(FitsChan)1163 583 y(describing)e(W)m(CS)i
-(information)2952 482 y Fz(astPurgeW)l(CS)0 762 y Fd(Description:)44
-b Fj(This)33 b(function)h(deletes)f(all)f(cards)g(in)h(a)g(FitsChan)g
-(that)g(relate)f(to)h(an)n(y)f(of)h(the)g(recognised)e(W)n(CS)227
-861 y(enco)r(dings.)37 b(On)27 b(exit,)h(the)g(curren)n(t)e(card)h(is)h
-(the)g(\014rst)f(remaining)g(card)f(in)i(the)g(FitsChan.)0
-1006 y Fd(Synopsis:)121 b Ft(void)42 b(astPurgeWCS\()c(AstFitsChan)h
-Fi(\003)p Ft(this)j(\))0 1151 y Fd(P)m(arameters:)259
-1282 y(this)427 1382 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)p
-0 1572 V 0 1703 a Fz(astPutCards)203 b Fe(Store)38 b(a)g(set)h(of)f
-(FITS)i(header)e(cards)g(in)h(a)1653 1803 y(FitsChan)3045
-1703 y Fz(astPutCards)0 1959 y Fd(Description:)44 b Fj(This)33
-b(function)h(stores)d(a)i(set)g(of)g(FITS)g(header)f(cards)g(in)h(a)g
-(FitsChan.)53 b(The)33 b(cards)e(are)h(supplied)227 2059
-y(concatenated)41 b(together)f(in)n(to)h(a)g(single)g(c)n(haracter)e
-(string.)78 b(An)n(y)41 b(existing)g(cards)f(in)h(the)h(FitsChan)g(are)
-227 2158 y(remo)n(v)n(ed)24 b(b)r(efore)g(the)i(new)f(cards)f(are)g
-(added.)35 b(The)25 b(FitsChan)g(is)g Ft(")p Fj(re-w)n(ound)p
-Ft(")e Fj(on)i(exit)g(b)n(y)g(clearing)e(its)i(Card)227
-2258 y(attribute.)37 b(This)27 b(means)g(that)g(a)g(subsequen)n(t)g(in)
-n(v)n(o)r(cation)f(of)h(astRead)g(can)f(b)r(e)i(made)f(immediately)g
-(without)227 2358 y(the)h(need)g(to)f(re-wind)g(the)h(FitsChan)g
-(\014rst.)0 2502 y Fd(Synopsis:)121 b Ft(void)42 b(astPutCards\()c
-(AstFitsChan)h Fi(\003)p Ft(this,)i(const)h(char)g Fi(\003)p
-Ft(cards)f(\))0 2647 y Fd(P)m(arameters:)259 2779 y(this)427
-2878 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259
-3006 y Fd(cards)427 3106 y Fj(P)n(oin)n(ter)h(to)i(a)f(n)n
-(ull-terminated)g(c)n(haracter)f(string)h(con)n(taining)g(the)h(FITS)g
-(cards)e(to)i(b)r(e)g(stored.)45 b(Eac)n(h)427 3206 y(individual)26
-b(card)e(should)h(o)r(ccup)n(y)g(80)f(c)n(haracters)f(in)i(this)h
-(string,)f(and)g(there)g(should)g(b)r(e)h(no)f(delimiters,)427
-3305 y(new)31 b(lines,)g(etc,)g(b)r(et)n(w)n(een)g(adjacen)n(t)e
-(cards.)45 b(The)30 b(\014nal)g(card)g(ma)n(y)f(b)r(e)i(less)f(than)h
-(80)e(c)n(haracters)f(long.)427 3405 y(This)g(is)f(the)h(format)f(pro)r
-(duced)h(b)n(y)f(the)h(\014ts)p Ft(_)p Fj(hdr2str)e(function)i(in)g
-(the)g(CFITSIO)g(library)-7 b(.)0 3562 y Fd(Notes:)340
-3840 y Fi(\017)45 b Fj(An)28 b(error)e(will)i(result)f(if)h(the)g
-(supplied)g(string)f(con)n(tains)g(an)n(y)f(cards)h(whic)n(h)h(cannot)f
-(b)r(e)h(in)n(terpreted.)p 0 4029 V 0 4161 a Fz(astPutChannelData)215
-b Fe(Store)38 b(arbitrary)e(data)1452 4276 y(to)i(b)s(e)h(passed)g(to)f
-(a)1313 4390 y(source)c(or)g(sink)h(function)2618 4161
-y Fz(astPutChannelData)0 4546 y Fd(Description:)44 b
-Fj(This)30 b(function)f(stores)f(a)h(supplied)h(arbitrary)d(p)r(oin)n
-(ter)i(in)g(the)h(Channel.)42 b(When)30 b(a)e(source)g(or)h(sink)227
-4646 y(function)35 b(is)e(in)n(v)n(ok)n(ed)g(b)n(y)g(the)h(Channel,)h
-(the)g(in)n(v)n(ok)n(ed)d(function)i(can)g(use)f(the)h(astChannelData)f
-(macro)g(to)227 4745 y(retriev)n(e)i(the)h(p)r(oin)n(ter.)60
-b(This)36 b(pro)n(vides)e(a)h(thread-safe)g(alternativ)n(e)f(to)i
-(passing)e(\014le)i(descriptors,)g(etc,)i(via)227 4845
-y(global)27 b(static)g(v)-5 b(ariables.)0 4990 y Fd(Synopsis:)121
-b Ft(void)42 b(astPutChannelDat)o(a\()37 b(AstChannel)i
-Fi(\003)p Ft(this,)i(void)h Fi(\003)p Ft(data)g(\))0
-5134 y Fd(P)m(arameters:)259 5266 y(this)427 5366 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Channel.)259 5494 y Fd(data)427 5593 y Fj(A)38
-b(p)r(oin)n(ter)g(to)g(b)r(e)g(made)f(a)n(v)-5 b(ailable)37
-b(to)h(the)g(source)e(and)i(sink)g(functions)g(via)f(the)h
-(astChannelData)427 5693 y(macro.)e(Ma)n(y)27 b(b)r(e)h(NULL.)p
-eop end
-%%Page: 306 316
-TeXDict begin 306 315 bop 0 52 a FF(306)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Class)h(Applicabilit)m
-(y:)259 483 y(Channel)427 582 y Fj(All)d(Channels)g(ha)n(v)n(e)e(this)i
-(function.)0 739 y Fd(Notes:)340 1016 y Fi(\017)45 b
-Fj(This)28 b(routine)f(is)h(not)f(a)n(v)-5 b(ailable)26
-b(in)i(the)g(F)-7 b(ortran)27 b(77)f(in)n(terface)h(to)h(the)g(AST)g
-(library)-7 b(.)p 0 1206 3780 12 v 0 1337 a Fz(astPutFits)246
-b Fe(Store)38 b(a)g(FITS)h(header)g(card)f(in)g(a)h(FitsChan)244
-b Fz(astPutFits)0 1493 y Fd(Description:)44 b Fj(This)25
-b(function)h(stores)e(a)h(FITS)g(header)f(card)h(in)g(a)g(FitsChan.)36
-b(The)25 b(card)f(is)h(either)g(inserted)g(b)r(efore)227
-1592 y(the)j(curren)n(t)f(card)g(\(iden)n(ti\014ed)h(b)n(y)f(the)h
-(Card)f(attribute\),)h(or)f(o)n(v)n(er-writes)e(the)j(curren)n(t)f
-(card,)f(as)h(required.)0 1737 y Fd(Synopsis:)121 b Ft(void)42
-b(astPutFits\()d(AstFitsChan)g Fi(\003)p Ft(this,)i(const)g(char)h
-(card[)g(80)h(],)f(int)h(overwrite)d(\))0 1881 y Fd(P)m(arameters:)259
-2012 y(this)427 2112 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259
-2240 y Fd(card)427 2339 y Fj(P)n(oin)n(ter)c(to)i(a)f(p)r(ossibly)g(n)n
-(ull-terminated)h(c)n(haracter)d(string)i(con)n(taining)g(the)h(FITS)g
-(card)f(to)g(b)r(e)h(stored.)427 2439 y(No)i(more)f(than)g(80)g(c)n
-(haracters)e(will)j(b)r(e)g(used)g(from)f(this)h(string)f(\(or)g(few)n
-(er)g(if)h(a)f(n)n(ull)h(o)r(ccurs)e(earlier\).)259 2567
-y Fd(o)m(v)m(erwrite)427 2666 y Fj(If)i(this)g(v)-5 b(alue)27
-b(is)g(zero,)f(the)i(new)f(card)f(is)i(inserted)f(in)g(fron)n(t)g(of)g
-(the)h(curren)n(t)e(card)g(in)i(the)g(FitsChan)f(\(as)427
-2766 y(iden)n(ti\014ed)j(b)n(y)e(the)h(initial)g(v)-5
-b(alue)29 b(of)g(the)g(Card)f(attribute\).)41 b(If)29
-b(it)h(is)e(non-zero,)g(the)h(new)g(card)f(replaces)427
-2866 y(the)35 b(curren)n(t)e(card.)55 b(In)35 b(either)f(case,)h(the)f
-(Card)f(attribute)h(is)g(then)h(incremen)n(ted)f(b)n(y)g(one)f(so)h
-(that)g(it)427 2965 y(subsequen)n(tly)27 b(iden)n(ti\014es)h(the)g
-(card)f(follo)n(wing)f(the)i(one)g(stored.)0 3122 y Fd(Notes:)340
-3400 y Fi(\017)45 b Fj(If)28 b(the)g(Card)e(attribute)h(initially)h(p)r
-(oin)n(ts)f(at)g(the)h Ft(")p Fj(end-of-\014le)p Ft(")e
-Fj(\(i.e.)37 b(exceeds)26 b(the)i(n)n(um)n(b)r(er)f(of)g(cards)f(in)427
-3499 y(the)i(FitsChan\),)g(then)g(the)g(new)g(card)f(is)g(app)r(ended)h
-(as)f(the)h(last)f(card)g(in)h(the)g(FitsChan.)340 3627
-y Fi(\017)45 b Fj(An)28 b(error)e(will)i(result)f(if)h(the)g(supplied)g
-(string)f(cannot)g(b)r(e)h(in)n(terpreted)f(as)g(a)g(FITS)h(header)f
-(card.)p 0 3816 V 0 3947 a Fz(astRate)615 3948 y Fe(Calculate)36
-b(the)j(rate)f(of)g(c)m(hange)g(of)g(a)h(Mapping)f(output)3329
-3947 y Fz(astRate)0 4127 y Fd(Description:)44 b Fj(This)29
-b(function)g(ev)-5 b(aluates)28 b(the)h(rate)f(of)h(c)n(hange)e(of)i(a)
-f(sp)r(eci\014ed)h(output)g(of)g(the)g(supplied)g(Mapping)227
-4226 y(with)f(resp)r(ect)g(to)f(a)g(sp)r(eci\014ed)h(input,)h(at)e(a)g
-(sp)r(eci\014ed)h(input)h(p)r(osition.)227 4348 y(The)d(result)f(is)g
-(estimated)g(b)n(y)g(in)n(terp)r(olating)g(the)g(function)h(using)f(a)g
-(fourth)g(order)f(p)r(olynomial)h(in)g(the)h(neigh-)227
-4448 y(b)r(ourho)r(o)r(d)i(of)h(the)g(sp)r(eci\014ed)f(p)r(osition.)40
-b(The)28 b(size)h(of)f(the)h(neigh)n(b)r(ourho)r(o)r(d)e(used)i(is)f(c)
-n(hosen)g(to)g(minimise)h(the)227 4547 y(RMS)38 b(residual)f(p)r(er)g
-(unit)h(length)g(b)r(et)n(w)n(een)f(the)h(in)n(terp)r(olating)e(p)r
-(olynomial)h(and)g(the)h(supplied)g(Mapping)227 4647
-y(function.)59 b(This)35 b(metho)r(d)g(pro)r(duces)f(go)r(o)r(d)g
-(accuracy)f(but)j(can)e(in)n(v)n(olv)n(e)f(ev)-5 b(aluating)35
-b(the)g(Mapping)f(100)f(or)227 4747 y(more)27 b(times.)0
-4891 y Fd(Synopsis:)121 b Ft(double)41 b(astRate\()f(AstMapping)g
-Fi(\003)p Ft(this,)h(double)g Fi(\003)p Ft(at,)h(int)g(ax1,)g(int)g
-(ax2)h(\))0 5035 y Fd(P)m(arameters:)259 5167 y(this)427
-5266 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Mapping)f(to)g(b)r(e)h
-(applied.)259 5394 y Fd(at)427 5494 y Fj(The)e(address)e(of)i(an)f
-(arra)n(y)f(holding)h(the)h(axis)f(v)-5 b(alues)25 b(at)h(the)g(p)r
-(osition)f(at)h(whic)n(h)g(the)g(rate)f(of)g(c)n(hange)g(is)427
-5593 y(to)j(b)r(e)g(ev)-5 b(aluated.)37 b(The)27 b(n)n(um)n(b)r(er)h
-(of)f(elemen)n(ts)h(in)g(this)g(arra)n(y)d(should)i(equal)h(the)g(n)n
-(um)n(b)r(er)f(of)h(inputs)g(to)427 5693 y(the)g(Mapping.)p
-eop end
-%%Page: 307 317
-TeXDict begin 307 316 bop 3643 52 a FF(307)259 351 y
-Fd(ax1)427 451 y Fj(The)30 b(index)f(of)h(the)f(Mapping)g(output)h(for)
-f(whic)n(h)g(the)h(rate)f(of)g(c)n(hange)f(is)i(to)f(b)r(e)h(found)g
-(\(output)g(n)n(um-)427 551 y(b)r(ering)d(starts)g(at)h(1)f(for)g(the)h
-(\014rst)f(output\).)259 693 y Fd(ax2)427 793 y Fj(The)35
-b(index)g(of)g(the)g(Mapping)g(input)h(whic)n(h)e(is)h(to)g(b)r(e)g(v)
--5 b(aried)35 b(in)g(order)e(to)i(\014nd)g(the)h(rate)e(of)h(c)n(hange)
-427 893 y(\(input)29 b(n)n(um)n(b)r(ering)e(starts)g(at)g(1)g(for)g
-(the)h(\014rst)g(input\).)0 1074 y Fd(Returned)k(V)-8
-b(alue:)259 1231 y(astRate\(\))427 1330 y Fj(The)26 b(rate)e(of)i(c)n
-(hange)e(of)h(Mapping)g(output)h Ft(")p Fj(ax1)p Ft(")e
-Fj(with)i(resp)r(ect)f(to)g(input)h Ft(")p Fj(ax2)p Ft(")p
-Fj(,)e(ev)-5 b(aluated)25 b(at)g Ft(")p Fj(at)p Ft(")p
-Fj(,)427 1430 y(or)i(AST)p Ft(__)p Fj(BAD)h(if)g(the)g(v)-5
-b(alue)27 b(cannot)g(b)r(e)h(calculated.)0 1612 y Fd(Notes:)340
-1914 y Fi(\017)45 b Fj(A)24 b(v)-5 b(alue)23 b(of)g(AST)p
-Ft(__)p Fj(BAD)h(will)f(b)r(e)h(returned)f(if)h(this)g(function)g(is)f
-(in)n(v)n(ok)n(ed)f(with)i(the)f(global)f(error)g(status)427
-2014 y(set,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)
-p 0 2233 3780 12 v 0 2364 a Fz(astRateMap)700 b Fe(Create)37
-b(a)i(RateMap)697 b Fz(astRateMap)0 2573 y Fd(Description:)44
-b Fj(This)28 b(function)g(creates)f(a)g(new)g(RateMap)h(and)f
-(optionally)g(initialises)g(its)h(attributes.)227 2707
-y(A)37 b(RateMap)g(is)f(a)g(Mapping)h(whic)n(h)f(represen)n(ts)g(a)g
-(single)g(elemen)n(t)h(of)g(the)g(Jacobian)e(matrix)h(of)h(another)227
-2807 y(Mapping.)k(The)28 b(Mapping)h(for)f(whic)n(h)h(the)g(Jacobian)f
-(is)g(required)g(is)h(sp)r(eci\014ed)g(when)g(the)g(new)g(RateMap)g(is)
-227 2906 y(created,)e(and)h(is)f(referred)f(to)i(as)f(the)h
-Ft(")p Fj(encapsulated)e(Mapping)p Ft(")h Fj(b)r(elo)n(w.)227
-3041 y(The)39 b(n)n(um)n(b)r(er)f(of)g(inputs)h(to)f(a)g(RateMap)g(is)g
-(the)h(same)f(as)f(the)i(n)n(um)n(b)r(er)f(of)h(inputs)f(to)h(its)f
-(encapsulated)227 3141 y(Mapping.)e(The)27 b(n)n(um)n(b)r(er)f(of)h
-(outputs)g(from)f(a)g(RateMap)g(is)h(alw)n(a)n(ys)e(one.)36
-b(This)26 b(one)g(output)i(equals)d(the)i(rate)227 3240
-y(of)c(c)n(hange)f(of)h(a)g(sp)r(eci\014ed)g(output)h(of)f(the)g
-(encapsulated)g(Mapping)f(with)i(resp)r(ect)f(to)f(a)h(sp)r(eci\014ed)g
-(input)h(of)f(the)227 3340 y(encapsulated)k(Mapping)g(\(the)i(input)f
-(and)g(output)g(to)f(use)h(are)e(sp)r(eci\014ed)i(when)g(the)g(RateMap)
-f(is)h(created\).)227 3474 y(A)g(RateMap)f(whic)n(h)h(has)e(not)i(b)r
-(een)g(in)n(v)n(erted)e(do)r(es)i(not)f(de\014ne)h(an)f(in)n(v)n(erse)f
-(transformation.)35 b(If)28 b(a)f(RateMap)227 3574 y(has)g(b)r(een)h
-(in)n(v)n(erted)f(then)h(it)g(will)g(de\014ne)g(an)f(in)n(v)n(erse)f
-(transformation)g(but)j(not)e(a)g(forw)n(ard)f(transformation.)0
-3743 y Fd(Synopsis:)121 b Ft(AstRateMap)39 b Fi(\003)p
-Ft(astRateMap\()g(AstMapping)g Fi(\003)p Ft(map,)j(int)g(ax1,)g(int)g
-(ax2,)g(const)g(char)g Fi(\003)p Ft(options,)227 3843
-y(...)86 b(\))0 4012 y Fd(P)m(arameters:)259 4169 y(map)427
-4268 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(encapsulated)f(Mapping.)259
-4411 y Fd(ax1)427 4511 y Fj(Index)f(of)h(the)f(output)h(from)f(the)g
-(encapsulated)g(Mapping)g(for)f(whic)n(h)h(the)h(rate)e(of)h(c)n(hange)
-f(is)i(required.)427 4610 y(This)g(corresp)r(onds)e(to)i(the)g(delta)g
-(quan)n(tit)n(y)f(forming)g(the)h(n)n(umerator)f(of)g(the)i(required)d
-(elemen)n(t)i(of)g(the)427 4710 y(Jacobian)f(matrix.)37
-b(The)27 b(\014rst)h(axis)f(has)g(index)g(1.)259 4853
-y Fd(ax2)427 4952 y Fj(Index)j(of)g(the)h(input)g(to)f(the)g
-(encapsulated)g(Mapping)f(whic)n(h)h(is)g(to)g(b)r(e)h(v)-5
-b(aried.)43 b(This)31 b(corresp)r(onds)d(to)427 5052
-y(the)h(delta)g(quan)n(tit)n(y)f(forming)h(the)g(denominator)e(of)i
-(the)g(required)f(elemen)n(t)h(of)g(the)g(Jacobian)e(matrix.)427
-5152 y(The)h(\014rst)f(axis)g(has)g(index)h(1.)259 5295
-y Fd(options)427 5394 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n(ull-terminated)
-g(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)
-g(attribute)427 5494 y(assignmen)n(ts)23 b(to)h(b)r(e)g(used)g(for)g
-(initialising)f(the)i(new)f(RateMap.)35 b(The)24 b(syn)n(tax)f(used)h
-(is)g(iden)n(tical)f(to)h(that)427 5593 y(for)i(the)h(astSet)g
-(function)g(and)g(ma)n(y)f(include)h Ft(")p Fj(prin)n(tf)p
-Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n(ti\014ed)h(b)n(y)f
-Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427 5693 y(in)i(the)g(normal)f
-(w)n(a)n(y)-7 b(.)p eop end
-%%Page: 308 318
-TeXDict begin 308 317 bop 0 52 a FF(308)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(...)427
-451 y Fj(If)38 b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n
-(tains)f Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f
-(an)f(optional)g(list)h(of)f(additional)427 551 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 650 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 750 y Fj(function\).)0
-907 y Fd(Returned)32 b(V)-8 b(alue:)259 1039 y(astRateMap\(\))427
-1139 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(RateMap.)0
-1297 y Fd(Notes:)340 1575 y Fi(\017)45 b Fj(The)28 b(forw)n(ard)e
-(transformation)g(of)h(the)h(encapsulated)f(Mapping)g(m)n(ust)h(b)r(e)g
-(de\014ned.)340 1703 y Fi(\017)45 b Fj(Note)19 b(that)g(the)g(comp)r
-(onen)n(t)g(Mappings)f(supplied)h(are)e(not)i(copied)g(b)n(y)f
-(astRateMap)g(\(the)h(new)g(RateMap)427 1803 y(simply)31
-b(retains)f(a)g(reference)f(to)i(them\).)46 b(They)31
-b(ma)n(y)f(con)n(tin)n(ue)g(to)g(b)r(e)h(used)g(for)f(other)f(purp)r
-(oses,)i(but)427 1902 y(should)21 b(not)g(b)r(e)h(deleted.)35
-b(If)22 b(a)e(RateMap)h(con)n(taining)f(a)h(cop)n(y)f(of)i(its)f(comp)r
-(onen)n(t)g(Mappings)f(is)i(required,)427 2002 y(then)28
-b(a)g(cop)n(y)e(of)i(the)g(RateMap)f(should)g(b)r(e)h(made)g(using)f
-(astCop)n(y)-7 b(.)340 2131 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 2230 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 2421 3780 12 v 0 2552
-a Fz(astRead)595 b Fe(Read)39 b(an)g(Ob)7 b(ject)38 b(from)f(a)i
-(Channel)592 b Fz(astRead)0 2733 y Fd(Description:)44
-b Fj(This)35 b(function)g(reads)f(the)h(next)g(Ob)5 b(ject)34
-b(from)h(a)f(Channel)h(and)f(returns)g(a)h(p)r(oin)n(ter)f(to)g(the)i
-(new)227 2832 y(Ob)5 b(ject.)0 2977 y Fd(Synopsis:)121
-b Ft(AstObject)40 b Fi(\003)p Ft(astRead\()g(AstChannel)f
-Fi(\003)p Ft(this)i(\))0 3122 y Fd(P)m(arameters:)259
-3254 y(this)427 3354 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Channel.)0
-3512 y Fd(Class)j(Applicabilit)m(y:)259 3644 y(FitsChan)427
-3743 y Fj(All)k(successful)f(use)h(of)f(astRead)g(on)g(a)g(FitsChan)h
-(is)f(destructiv)n(e,)i(so)e(that)h(FITS)g(header)e(cards)h(are)427
-3843 y(consumed)j(in)h(the)f(pro)r(cess)f(of)i(reading)e(an)h(Ob)5
-b(ject,)39 b(and)e(are)g(remo)n(v)n(ed)e(from)i(the)h(FitsChan)f
-(\(this)427 3943 y(deletion)28 b(can)g(b)r(e)g(prev)n(en)n(ted)f(for)h
-(sp)r(eci\014c)g(cards)f(b)n(y)g(calling)g(the)i(FitsChan)f
-(astRetainFits)g(function\).)427 4042 y(An)37 b(unsuccessful)g(call)f
-(of)g(astRead)g(\(for)g(instance,)j(caused)d(b)n(y)g(the)h(FitsChan)f
-(not)h(con)n(taining)e(the)427 4142 y(necessary)j(FITS)h(headers)f
-(cards)g(needed)i(to)f(create)f(an)h(Ob)5 b(ject\))39
-b(results)g(in)g(the)h(con)n(ten)n(ts)e(of)h(the)427
-4241 y(FitsChan)28 b(b)r(eing)g(left)g(unc)n(hanged.)259
-4370 y Fd(StcsChan)427 4470 y Fj(The)33 b(AST)g(Ob)5
-b(ject)33 b(returned)f(b)n(y)h(a)f(successful)h(use)f(of)h(astRead)f
-(on)h(an)f(StcsChan,)i(will)f(b)r(e)g(either)g(a)427
-4569 y(Region)g(or)f(a)h(KeyMap,)i(dep)r(ending)e(on)g(the)h(v)-5
-b(alues)33 b(of)h(the)f(StcsArea,)i(StcsCo)r(ords)d(and)h(StcsProps)427
-4669 y(attributes.)k(See)28 b(the)g(do)r(cumen)n(tation)f(for)g(these)h
-(attributes)f(for)g(further)h(information.)0 4826 y Fd(Returned)k(V)-8
-b(alue:)259 4958 y(astRead\(\))427 5058 y Fj(A)28 b(p)r(oin)n(ter)f(to)
-g(the)h(new)g(Ob)5 b(ject.)36 b(The)28 b(class)e(to)h(whic)n(h)h(this)f
-(will)h(b)r(elong)f(is)g(determined)h(b)n(y)f(the)h(input)427
-5158 y(data,)f(so)g(is)h(not)f(kno)n(wn)g(in)h(adv)-5
-b(ance.)0 5315 y Fd(Notes:)340 5593 y Fi(\017)45 b Fj(A)24
-b(n)n(ull)g(Ob)5 b(ject)24 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fj(NULL\))h(will)g(b)r(e)h(returned,)f(without)g(error,)f(if)h
-(the)g(Channel)g(con)n(tains)427 5693 y(no)k(further)f(Ob)5
-b(jects)27 b(to)h(b)r(e)g(read.)p eop end
-%%Page: 309 319
-TeXDict begin 309 318 bop 3643 52 a FF(309)340 351 y
-Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)34 b(p)r(oin)n(ter)g(will)
-h(also)f(b)r(e)h(returned)f(if)h(this)g(function)g(is)f(in)n(v)n(ok)n
-(ed)g(with)h(the)g(AST)g(error)427 451 y(status)28 b(set,)f(or)g(if)h
-(it)g(should)g(fail)f(for)g(an)n(y)g(reason.)p 0 662
-3780 12 v 0 794 a Fz(astRebin)p Fc(<)p Fz(X)p Fc(>)344
-b Fe(Rebin)39 b(a)f(region)f(of)i(a)f(data)g(grid)342
-b Fz(astRebin)p Fc(<)p Fz(X)p Fc(>)0 1000 y Fd(Description:)44
-b Fj(This)29 b(is)f(a)g(set)g(of)g(functions)h(for)e(rebinning)h
-(gridded)g(data)g(\(e.g.)38 b(an)28 b(image\))g(under)g(the)h(con)n
-(trol)e(of)227 1099 y(a)f(geometrical)f(transformation,)g(whic)n(h)h
-(is)g(sp)r(eci\014ed)h(b)n(y)f(a)g(Mapping.)36 b(The)26
-b(functions)h(op)r(erate)e(on)h(a)g(pair)g(of)227 1199
-y(data)f(grids)f(\(input)i(and)f(output\),)i(eac)n(h)d(of)h(whic)n(h)g
-(ma)n(y)g(ha)n(v)n(e)f(an)n(y)g(n)n(um)n(b)r(er)h(of)g(dimensions.)36
-b(Rebinning)25 b(ma)n(y)227 1298 y(b)r(e)e(restricted)f(to)g(a)g(sp)r
-(eci\014ed)g(region)f(of)i(the)f(input)h(grid.)35 b(An)23
-b(asso)r(ciated)e(grid)g(of)i(error)d(estimates)i(asso)r(ciated)227
-1398 y(with)30 b(the)g(input)g(data)f(ma)n(y)g(also)f(b)r(e)i(supplied)
-g(\(in)g(the)g(form)f(of)g(v)-5 b(ariance)29 b(v)-5 b(alues\),)30
-b(so)e(as)h(to)h(pro)r(duce)f(error)227 1498 y(estimates)f(for)f(the)h
-(rebined)f(output)h(data.)37 b(Propagation)24 b(of)k(missing)f(data)g
-(\(bad)h(pixels\))g(is)f(supp)r(orted.)227 1628 y(Note,)d(if)f(y)n(ou)e
-(will)i(b)r(e)g(rebining)f(a)g(sequence)g(of)g(input)i(arra)n(ys)19
-b(and)k(then)g(co-adding)e(them)i(in)n(to)f(a)g(single)g(arra)n(y)-7
-b(,)227 1728 y(the)28 b(alternativ)n(e)f(astRebinSeq)p
-Fl(<)p Fj(X)p Fl(>)f Fj(functions)i(will)g(in)g(general)e(b)r(e)i(more)
-f(e\016cien)n(t.)227 1859 y(Y)-7 b(ou)32 b(should)g(use)g(a)g
-(rebinning)g(function)g(whic)n(h)g(matc)n(hes)g(the)g(n)n(umerical)g(t)
-n(yp)r(e)g(of)g(the)h(data)e(y)n(ou)h(are)f(pro-)227
-1958 y(cessing)36 b(b)n(y)h(replacing)e Fl(<)p Fj(X)p
-Fl(>)h Fj(in)h(the)h(generic)d(function)j(name)e(astRebin)p
-Fl(<)p Fj(X)p Fl(>)g Fj(b)n(y)h(an)f(appropriate)f(1-)h(or)227
-2058 y(2-c)n(haracter)29 b(t)n(yp)r(e)j(co)r(de.)49 b(F)-7
-b(or)31 b(example,)h(if)h(y)n(ou)e(are)f(rebinning)i(data)f(with)h(t)n
-(yp)r(e)g Ft(")p Fj(\015oat)p Ft(")p Fj(,)f(y)n(ou)g(should)h(use)227
-2157 y(the)j(function)f(astRebinF)g(\(see)g(the)h Ft(")p
-Fj(Data)e(T)n(yp)r(e)h(Co)r(des)p Ft(")f Fj(section)h(b)r(elo)n(w)f
-(for)h(the)g(co)r(des)f(appropriate)g(to)227 2257 y(other)27
-b(n)n(umerical)g(t)n(yp)r(es\).)227 2388 y(Rebinning)i(of)g(the)g(grid)
-f(of)g(input)i(data)e(is)h(p)r(erformed)f(b)n(y)g(transforming)g(the)h
-(co)r(ordinates)e(of)i(the)g(cen)n(tre)f(of)227 2487
-y(eac)n(h)h(input)g(grid)g(elemen)n(t)g(\(or)f(pixel\))i(in)n(to)f(the)
-g(co)r(ordinate)f(system)h(of)g(the)g(output)h(grid.)41
-b(The)29 b(input)h(pixel)227 2587 y(v)-5 b(alue)35 b(is)g(then)h
-(divided)f(up)h(and)f(assigned)f(to)h(the)g(output)h(pixels)f(in)g(the)
-h(neigh)n(b)r(ourho)r(o)r(d)e(of)h(the)h(cen)n(tral)227
-2687 y(output)30 b(co)r(ordinates.)39 b(A)29 b(c)n(hoice)g(of)f(sc)n
-(hemes)h(are)f(pro)n(vided)f(for)i(determining)g(ho)n(w)f(eac)n(h)g
-(input)i(pixel)f(v)-5 b(alue)227 2786 y(is)24 b(divided)g(up)h(b)r(et)n
-(w)n(een)f(the)g(output)g(pixels.)36 b(In)24 b(general,)f(eac)n(h)h
-(output)g(pixel)g(ma)n(y)f(b)r(e)i(assigned)d(v)-5 b(alues)24
-b(from)227 2886 y(more)18 b(than)h(one)g(input)h(pixel.)34
-b(All)19 b(con)n(tributions)f(to)h(a)f(giv)n(en)h(output)g(pixel)g(are)
-f(summed)h(to)g(pro)r(duce)f(the)i(\014nal)227 2985 y(output)25
-b(pixel)f(v)-5 b(alue.)36 b(Output)25 b(pixels)f(can)f(b)r(e)i(set)f
-(to)g(the)h(supplied)f(bad)g(v)-5 b(alue)24 b(if)h(they)g(receiv)n(e)d
-(con)n(tributions)227 3085 y(from)28 b(an)f(insu\016cien)n(t)h(n)n(um)n
-(b)r(er)f(of)h(input)g(pixels.)37 b(This)27 b(is)h(con)n(trolled)e(b)n
-(y)h(the)h Ft(")p Fj(wlim)p Ft(")f Fj(parameter.)227
-3216 y(Input)34 b(pixel)e(co)r(ordinates)g(are)f(transformed)h(in)n(to)
-g(the)h(co)r(ordinate)f(system)g(of)h(the)g(output)g(grid)f(using)g
-(the)227 3315 y(forw)n(ard)f(transformation)f(of)i(the)h(Mapping)f
-(whic)n(h)g(is)g(supplied.)50 b(This)33 b(means)e(that)i(geometrical)d
-(features)227 3415 y(in)i(the)f(input)h(data)f(are)f(sub)5
-b(jected)31 b(to)g(the)h(Mapping's)e(forw)n(ard)g(transformation)f(as)i
-(they)g(are)f(transferred)227 3515 y(from)e(the)g(input)g(to)f(the)h
-(output)g(grid.)227 3645 y(In)c(practice,)f(transforming)e(the)j(co)r
-(ordinates)e(of)h(ev)n(ery)e(pixel)j(of)f(a)f(large)g(data)h(grid)f
-(can)h(b)r(e)g(time-consuming,)227 3745 y(esp)r(ecially)38
-b(if)g(the)h(Mapping)f(in)n(v)n(olv)n(es)e(complicated)i(functions,)j
-(suc)n(h)c(as)h(sky)f(pro)5 b(jections.)67 b(T)-7 b(o)38
-b(impro)n(v)n(e)227 3844 y(p)r(erformance,)29 b(it)g(is)g(therefore)f
-(p)r(ossible)g(to)h(appro)n(ximate)e(non-linear)h(Mappings)g(b)n(y)h(a)
-g(set)g(of)f(linear)h(trans-)227 3944 y(formations)h(whic)n(h)h(are)f
-(applied)g(piece-wise)h(to)f(separate)g(sub-regions)f(of)h(the)i(data.)
-46 b(This)30 b(appro)n(ximation)227 4044 y(pro)r(cess)37
-b(is)h(applied)g(automatically)f(b)n(y)h(an)g(adaptiv)n(e)f(algorithm,)
-i(under)f(con)n(trol)f(of)h(an)g(accuracy)e(crite-)227
-4143 y(rion)25 b(whic)n(h)h(expresses)f(the)h(maxim)n(um)g(tolerable)f
-(geometrical)f(distortion)h(whic)n(h)h(ma)n(y)f(b)r(e)i(in)n(tro)r
-(duced,)f(as)f(a)227 4243 y(fraction)i(of)h(a)f(pixel.)227
-4374 y(This)34 b(algorithm)e(\014rst)h(attempts)h(to)g(appro)n(ximate)e
-(the)i(Mapping)f(with)h(a)f(linear)g(transformation)f(applied)227
-4473 y(o)n(v)n(er)j(the)j(whole)e(region)g(of)h(the)g(input)h(grid)e
-(whic)n(h)h(is)g(b)r(eing)g(used.)65 b(If)37 b(this)g(pro)n(v)n(es)e
-(to)i(b)r(e)g(insu\016cien)n(tly)227 4573 y(accurate,)c(the)h(input)f
-(region)f(is)h(sub-divided)g(in)n(to)f(t)n(w)n(o)h(along)e(its)i
-(largest)f(dimension)h(and)g(the)g(pro)r(cess)f(is)227
-4672 y(rep)r(eated)h(within)h(eac)n(h)f(of)g(the)h(resulting)e
-(sub-regions.)53 b(This)33 b(pro)r(cess)f(of)h(sub-division)g(con)n
-(tin)n(ues)f(un)n(til)i(a)227 4772 y(su\016cien)n(tly)27
-b(go)r(o)r(d)g(linear)f(appro)n(ximation)g(is)h(found,)g(or)f(the)i
-(region)e(to)h(whic)n(h)g(it)h(is)f(b)r(eing)g(applied)g(b)r(ecomes)227
-4872 y(to)r(o)h(small)f(\(in)h(whic)n(h)f(case)g(the)h(original)e
-(Mapping)h(is)h(used)g(directly\).)0 5033 y Fd(Synopsis:)121
-b Ft(void)42 b(astRebin)p Fl(<)p Ft(X)p Fl(>)p Ft(\()c(AstMapping)i
-Fi(\003)p Ft(this,)h(double)g(wlim,)g(int)i(ndim_in,)d(const)i(int)g
-(lbnd_in[],)227 5133 y(const)g(int)g(ubnd_in[],)e(const)h
-Fl(<)p Ft(Xtype)p Fl(>)g Ft(in[],)g(const)h Fl(<)p Ft(Xtype)p
-Fl(>)e Ft(in_var[],)g(int)j(spread,)d(const)227 5233
-y(double)h(params[],)f(int)j(flags,)e(double)g(tol,)h(int)g(maxpix,)f
-Fl(<)p Ft(Xtype)p Fl(>)f Ft(badval,)h(int)h(ndim_out,)227
-5332 y(const)g(int)g(lbnd_out[],)d(const)j(int)g(ubnd_out[],)d(const)j
-(int)g(lbnd[],)f(const)g(int)h(ubnd[],)f Fl(<)p Ft(Xtype)p
-Fl(>)227 5432 y Ft(out[],)g Fl(<)p Ft(Xtype)p Fl(>)g
-Ft(out_var[])f(\);)0 5593 y Fd(P)m(arameters:)p eop end
-%%Page: 310 320
-TeXDict begin 310 319 bop 0 52 a FF(310)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(this)427
-451 y Fj(P)n(oin)n(ter)19 b(to)h(a)f(Mapping,)j(whose)d(forw)n(ard)f
-(transformation)h(will)h(b)r(e)h(used)f(to)g(transform)f(the)h(co)r
-(ordinates)427 551 y(of)28 b(pixels)f(in)h(the)g(input)g(grid)f(in)n
-(to)h(the)g(co)r(ordinate)e(system)h(of)h(the)g(output)g(grid.)427
-667 y(The)c(n)n(um)n(b)r(er)g(of)g(input)h(co)r(ordinates)e(used)h(b)n
-(y)g(this)g(Mapping)g(\(as)f(giv)n(en)h(b)n(y)f(its)i(Nin)f
-(attribute\))h(should)427 767 y(matc)n(h)e(the)g(n)n(um)n(b)r(er)g(of)g
-(input)h(grid)e(dimensions)h(giv)n(en)f(b)n(y)g(the)i(v)-5
-b(alue)23 b(of)g Ft(")p Fj(ndim)p Ft(_)p Fj(in)p Ft(")f
-Fj(b)r(elo)n(w.)35 b(Similarly)-7 b(,)427 867 y(the)29
-b(n)n(um)n(b)r(er)e(of)h(output)g(co)r(ordinates)f(\(Nout)h
-(attribute\))h(should)e(matc)n(h)h(the)g(n)n(um)n(b)r(er)g(of)g(output)
-g(grid)427 966 y(dimensions)g(giv)n(en)e(b)n(y)i Ft(")p
-Fj(ndim)p Ft(_)p Fj(out)p Ft(")p Fj(.)259 1100 y Fd(wlim)427
-1200 y Fj(Giv)n(es)f(the)g(required)f(n)n(um)n(b)r(er)g(of)h(input)h
-(pixel)f(v)-5 b(alues)26 b(whic)n(h)h(m)n(ust)g(con)n(tribute)g(to)f
-(an)h(output)g(pixel)g(in)427 1299 y(order)f(for)h(the)h(output)f
-(pixel)h(v)-5 b(alue)27 b(to)g(b)r(e)h(considered)e(v)-5
-b(alid.)37 b(If)27 b(the)h(sum)f(of)h(the)f(input)h(pixel)g(w)n(eigh)n
-(ts)427 1399 y(con)n(tributing)e(to)h(an)f(output)h(pixel)f(is)h(less)f
-(than)g(the)h(supplied)g Ft(")p Fj(wlim)p Ft(")f Fj(v)-5
-b(alue,)27 b(then)g(the)g(output)g(pixel)427 1499 y(v)-5
-b(alue)28 b(is)f(returned)g(set)h(to)f(the)h(supplied)g(bad)g(v)-5
-b(alue.)259 1633 y Fd(ndim)p Ft(_)p Fd(in)427 1732 y
-Fj(The)28 b(n)n(um)n(b)r(er)f(of)h(dimensions)f(in)h(the)g(input)g
-(grid.)36 b(This)28 b(should)f(b)r(e)h(at)g(least)f(one.)259
-1866 y Fd(lbnd)p Ft(_)p Fd(in)427 1966 y Fj(P)n(oin)n(ter)i(to)i(an)f
-(arra)n(y)e(of)j(in)n(tegers,)f(with)h Ft(")p Fj(ndim)p
-Ft(_)p Fj(in)p Ft(")f Fj(elemen)n(ts,)h(con)n(taining)f(the)h(co)r
-(ordinates)e(of)h(the)427 2065 y(cen)n(tre)d(of)h(the)g(\014rst)f
-(pixel)h(in)g(the)g(input)g(grid)f(along)f(eac)n(h)h(dimension.)259
-2199 y Fd(ubnd)p Ft(_)p Fd(in)427 2299 y Fj(P)n(oin)n(ter)i(to)i(an)f
-(arra)n(y)e(of)j(in)n(tegers,)f(with)h Ft(")p Fj(ndim)p
-Ft(_)p Fj(in)p Ft(")f Fj(elemen)n(ts,)h(con)n(taining)f(the)h(co)r
-(ordinates)e(of)h(the)427 2399 y(cen)n(tre)d(of)h(the)g(last)f(pixel)h
-(in)g(the)g(input)g(grid)f(along)f(eac)n(h)h(dimension.)427
-2515 y(Note)h(that)h Ft(")p Fj(lbnd)p Ft(_)p Fj(in)p
-Ft(")e Fj(and)h Ft(")p Fj(ubnd)p Ft(_)p Fj(in)p Ft(")f
-Fj(together)g(de\014ne)h(the)h(shap)r(e)f(and)f(size)h(of)g(the)g
-(input)h(grid,)e(its)427 2615 y(exten)n(t)f(along)f(a)g(particular)f
-(\(j'th\))k(dimension)d(b)r(eing)h(ubnd)p Ft(_)p Fj(in[j]-lbnd)p
-Ft(_)p Fj(in[j]+1)g(\(assuming)f(the)i(index)427 2715
-y Ft(")p Fj(j)p Ft(")f Fj(to)g(b)r(e)g(zero-based\).)35
-b(They)26 b(also)f(de\014ne)h(the)h(input)g(grid's)e(co)r(ordinate)g
-(system,)h(eac)n(h)g(pixel)g(ha)n(ving)427 2814 y(unit)j(exten)n(t)e
-(along)g(eac)n(h)f(dimension)i(with)g(in)n(tegral)e(co)r(ordinate)h(v)
--5 b(alues)27 b(at)g(its)h(cen)n(tre.)259 2948 y Fd(in)427
-3048 y Fj(P)n(oin)n(ter)h(to)i(an)f(arra)n(y)-7 b(,)30
-b(with)h(one)f(elemen)n(t)h(for)g(eac)n(h)f(pixel)g(in)h(the)g(input)h
-(grid,)f(con)n(taining)f(the)h(input)427 3148 y(data)25
-b(to)g(b)r(e)g(rebined.)36 b(The)25 b(n)n(umerical)g(t)n(yp)r(e)g(of)g
-(this)h(arra)n(y)c(should)j(matc)n(h)g(the)h(1-)e(or)g(2-c)n(haracter)e
-(t)n(yp)r(e)427 3247 y(co)r(de)27 b(app)r(ended)g(to)f(the)h(function)h
-(name)e(\(e.g.)37 b(if)27 b(y)n(ou)f(are)f(using)i(astRebinF,)f(the)i
-(t)n(yp)r(e)e(of)h(eac)n(h)f(arra)n(y)427 3347 y(elemen)n(t)i(should)f
-(b)r(e)h Ft(")p Fj(\015oat)p Ft(")p Fj(\).)427 3464 y(The)33
-b(storage)f(order)f(of)j(data)e(within)i(this)g(arra)n(y)c(should)j(b)r
-(e)h(suc)n(h)f(that)g(the)h(index)f(of)g(the)g(\014rst)g(grid)427
-3563 y(dimension)23 b(v)-5 b(aries)22 b(most)h(rapidly)f(and)h(that)g
-(of)g(the)h(\014nal)f(dimension)g(least)f(rapidly)g(\(i.e.)36
-b(F)-7 b(ortran)22 b(arra)n(y)427 3663 y(indexing)28
-b(is)f(used\).)259 3797 y Fd(in)p Ft(_)p Fd(v)-5 b(ar)427
-3896 y Fj(An)25 b(optional)e(p)r(oin)n(ter)h(to)g(a)f(second)h(arra)n
-(y)e(with)i(the)h(same)e(size)h(and)g(t)n(yp)r(e)g(as)f(the)i
-Ft(")p Fj(in)p Ft(")e Fj(arra)n(y)-7 b(.)34 b(If)24 b(giv)n(en,)427
-3996 y(this)32 b(should)g(con)n(tain)f(a)g(set)h(of)g(non-negativ)n(e)e
-(v)-5 b(alues)31 b(whic)n(h)h(represen)n(t)f(estimates)g(of)h(the)g
-(statistical)427 4096 y(v)-5 b(ariance)32 b(asso)r(ciated)f(with)i(eac)
-n(h)f(elemen)n(t)g(of)h(the)g Ft(")p Fj(in)p Ft(")f Fj(arra)n(y)-7
-b(.)49 b(If)33 b(this)g(arra)n(y)d(is)i(supplied)h(\(together)427
-4195 y(with)23 b(the)f(corresp)r(onding)e Ft(")p Fj(out)p
-Ft(_)p Fj(v)-5 b(ar)p Ft(")20 b Fj(arra)n(y\),)h(then)h(estimates)g(of)
-g(the)g(v)-5 b(ariance)21 b(of)h(the)g(rebined)g(output)427
-4295 y(data)27 b(will)h(b)r(e)g(calculated.)427 4412
-y(If)g(no)g(input)g(v)-5 b(ariance)26 b(estimates)i(are)e(b)r(eing)i
-(pro)n(vided,)f(a)g(NULL)h(p)r(oin)n(ter)f(should)g(b)r(e)h(giv)n(en.)
-259 4546 y Fd(spread)427 4645 y Fj(This)23 b(parameter)e(sp)r
-(eci\014es)i(the)g(sc)n(heme)g(to)g(b)r(e)g(used)g(for)f(dividing)h
-(eac)n(h)f(input)h(data)g(v)-5 b(alue)22 b(up)i(amongst)427
-4745 y(the)30 b(corresp)r(onding)d(output)j(pixels.)42
-b(It)30 b(ma)n(y)e(b)r(e)i(used)f(to)h(select)f(from)g(a)g(set)g(of)g
-(pre-de\014ned)g(sc)n(hemes)427 4845 y(b)n(y)f(supplying)f(one)g(of)h
-(the)g(v)-5 b(alues)27 b(describ)r(ed)g(in)h(the)g Ft(")p
-Fj(Pixel)f(Spreading)g(Sc)n(hemes)p Ft(")f Fj(section)i(b)r(elo)n(w.)36
-b(If)427 4944 y(a)d(v)-5 b(alue)34 b(of)f(zero)g(is)g(supplied,)i(then)
-f(the)g(default)g(linear)f(spreading)f(sc)n(heme)h(is)h(used)f(\(equiv)
--5 b(alen)n(t)34 b(to)427 5044 y(supplying)28 b(the)g(v)-5
-b(alue)27 b(AST)p Ft(__)p Fj(LINEAR\).)259 5178 y Fd(params)427
-5277 y Fj(An)36 b(optional)e(p)r(oin)n(ter)h(to)g(an)g(arra)n(y)e(of)i
-(double)g(whic)n(h)h(should)e(con)n(tain)h(an)n(y)f(additional)h
-(parameter)427 5377 y(v)-5 b(alues)30 b(required)f(b)n(y)h(the)g(pixel)
-g(spreading)e(sc)n(heme.)44 b(If)30 b(suc)n(h)g(parameters)e(are)h
-(required,)h(this)g(will)g(b)r(e)427 5477 y(noted)e(in)g(the)g
-Ft(")p Fj(Pixel)e(Spreading)h(Sc)n(hemes)p Ft(")g Fj(section)g(b)r(elo)
-n(w.)427 5593 y(If)i(no)e(additional)h(parameters)e(are)h(required,)g
-(this)i(arra)n(y)c(is)j(not)g(used)g(and)g(a)g(NULL)g(p)r(oin)n(ter)g
-(ma)n(y)f(b)r(e)427 5693 y(giv)n(en.)p eop end
-%%Page: 311 321
-TeXDict begin 311 320 bop 3643 52 a FF(311)259 351 y
-Fd(\015ags)427 451 y Fj(The)21 b(bit)n(wise)g(OR)f(of)h(a)f(set)h(of)f
-(\015ag)g(v)-5 b(alues)20 b(whic)n(h)h(ma)n(y)f(b)r(e)h(used)g(to)f
-(pro)n(vide)g(additional)g(con)n(trol)f(o)n(v)n(er)g(the)427
-551 y(rebinning)30 b(op)r(eration.)45 b(See)31 b(the)f
-Ft(")p Fj(Con)n(trol)f(Flags)p Ft(")g Fj(section)i(b)r(elo)n(w)f(for)g
-(a)g(description)g(of)g(the)h(options)427 650 y(a)n(v)-5
-b(ailable.)36 b(If)28 b(no)f(\015ag)g(v)-5 b(alues)27
-b(are)g(to)g(b)r(e)h(set,)g(a)f(v)-5 b(alue)28 b(of)f(zero)g(should)g
-(b)r(e)h(giv)n(en.)259 796 y Fd(tol)427 895 y Fj(The)34
-b(maxim)n(um)f(tolerable)f(geometrical)f(distortion)i(whic)n(h)g(ma)n
-(y)f(b)r(e)i(in)n(tro)r(duced)f(as)f(a)h(result)g(of)g(ap-)427
-995 y(pro)n(ximating)c(non-linear)f(Mappings)h(b)n(y)h(a)f(set)h(of)g
-(piece-wise)f(linear)g(transformations.)42 b(This)30
-b(should)427 1095 y(b)r(e)e(expressed)f(as)g(a)g(displacemen)n(t)g(in)h
-(pixels)f(in)h(the)g(output)g(grid's)f(co)r(ordinate)f(system.)427
-1217 y(If)34 b(piece-wise)f(linear)g(appro)n(ximation)f(is)h(not)h
-(required,)g(a)f(v)-5 b(alue)33 b(of)h(zero)e(ma)n(y)h(b)r(e)h(giv)n
-(en.)54 b(This)33 b(will)427 1317 y(ensure)k(that)g(the)h(Mapping)e(is)
-h(used)g(without)h(an)n(y)e(appro)n(ximation,)i(but)g(ma)n(y)e
-(increase)g(execution)427 1417 y(time.)427 1539 y(If)d(the)f(v)-5
-b(alue)32 b(is)g(to)r(o)g(high,)h(discon)n(tin)n(uities)e(b)r(et)n(w)n
-(een)h(the)h(linear)e(appro)n(ximations)f(used)i(in)g(adjacen)n(t)427
-1639 y(panel)h(will)g(b)r(e)g(higher,)h(and)f(ma)n(y)f(cause)g(the)i
-(edges)e(of)h(the)g(panel)g(to)g(b)r(e)g(visible)g(when)g(viewing)f
-(the)427 1738 y(output)c(image)f(at)h(high)f(con)n(trast.)36
-b(If)28 b(this)g(is)f(a)g(problem,)g(reduce)h(the)g(tolerance)e(v)-5
-b(alue)27 b(used.)259 1884 y Fd(maxpix)427 1984 y Fj(A)42
-b(v)-5 b(alue)40 b(whic)n(h)h(sp)r(eci\014es)g(an)g(initial)g(scale)g
-(size)f(\(in)i(pixels\))f(for)f(the)i(adaptiv)n(e)e(algorithm)g(whic)n
-(h)427 2083 y(appro)n(ximates)d(non-linear)g(Mappings)h(with)h
-(piece-wise)f(linear)g(transformations.)68 b(Normally)-7
-b(,)40 b(this)427 2183 y(should)e(b)r(e)g(a)g(large)e(v)-5
-b(alue)38 b(\(larger)e(than)j(an)n(y)e(dimension)h(of)f(the)i(region)d
-(of)i(the)h(input)f(grid)g(b)r(eing)427 2283 y(used\).)46
-b(In)31 b(this)g(case,)g(a)f(\014rst)g(attempt)h(to)g(appro)n(ximate)e
-(the)i(Mapping)f(b)n(y)g(a)g(linear)g(transformation)427
-2382 y(will)e(b)r(e)g(made)f(o)n(v)n(er)f(the)i(en)n(tire)f(input)i
-(region.)427 2505 y(If)k(a)f(smaller)f(v)-5 b(alue)33
-b(is)f(used,)i(the)e(input)h(region)f(will)g(\014rst)g(b)r(e)h(divided)
-g(in)n(to)f(sub-regions)e(whose)i(size)427 2604 y(do)r(es)39
-b(not)h(exceed)f Ft(")p Fj(maxpix)p Ft(")f Fj(pixels)i(in)g(an)n(y)e
-(dimension.)73 b(Only)39 b(at)g(this)h(p)r(oin)n(t)g(will)g(attempts)g
-(at)427 2704 y(appro)n(ximation)26 b(commence.)427 2827
-y(This)38 b(v)-5 b(alue)38 b(ma)n(y)g(o)r(ccasionally)e(b)r(e)j(useful)
-f(in)h(prev)n(en)n(ting)e(false)h(con)n(v)n(ergence)d(of)j(the)h
-(adaptiv)n(e)e(al-)427 2926 y(gorithm)c(in)g(cases)f(where)g(the)h
-(Mapping)g(app)r(ears)f(appro)n(ximately)f(linear)h(on)h(large)e
-(scales,)j(but)f(has)427 3026 y(irregularities)27 b(\(e.g.)40
-b(holes\))28 b(on)g(smaller)g(scales.)39 b(A)29 b(v)-5
-b(alue)28 b(of,)h(sa)n(y)-7 b(,)28 b(50)g(to)g(100)g(pixels)g(can)g
-(also)g(b)r(e)h(em-)427 3126 y(plo)n(y)n(ed)23 b(as)f(a)h(safeguard)f
-(in)i(general-purp)r(ose)d(soft)n(w)n(are,)i(since)g(the)h(e\013ect)f
-(on)h(p)r(erformance)e(is)h(minimal.)427 3248 y(If)e(to)r(o)f(small)g
-(a)g(v)-5 b(alue)20 b(is)g(giv)n(en,)h(it)g(will)f(ha)n(v)n(e)f(the)i
-(e\013ect)g(of)f(inhibiting)h(linear)f(appro)n(ximation)e(altogether)
-427 3348 y(\(equiv)-5 b(alen)n(t)20 b(to)g(setting)g
-Ft(")p Fj(tol)p Ft(")f Fj(to)g(zero\).)34 b(Although)20
-b(this)g(ma)n(y)f(degrade)f(p)r(erformance,)j(accurate)d(results)427
-3447 y(will)28 b(still)g(b)r(e)g(obtained.)259 3593 y
-Fd(badv)-5 b(al)427 3693 y Fj(This)29 b(argumen)n(t)f(should)h(ha)n(v)n
-(e)e(the)j(same)e(t)n(yp)r(e)h(as)f(the)i(elemen)n(ts)e(of)h(the)g
-Ft(")p Fj(in)p Ft(")g Fj(arra)n(y)-7 b(.)38 b(It)29 b(sp)r(eci\014es)g
-(the)427 3792 y(v)-5 b(alue)28 b(used)f(to)h(\015ag)f(missing)g(data)g
-(\(bad)h(pixels\))f(in)h(the)g(input)g(and)g(output)g(arra)n(ys.)427
-3915 y(If)33 b(the)f(AST)p Ft(__)p Fj(USEBAD)g(\015ag)g(is)g(set)g(via)
-g(the)g Ft(")p Fj(\015ags)p Ft(")e Fj(parameter,)i(then)h(this)f(v)-5
-b(alue)32 b(is)g(used)g(to)g(test)427 4015 y(for)27 b(bad)h(pixels)f
-(in)h(the)g Ft(")p Fj(in)p Ft(")f Fj(\(and)h Ft(")p Fj(in)p
-Ft(_)p Fj(v)-5 b(ar)p Ft(")p Fj(\))26 b(arra)n(y\(s\).)427
-4137 y(In)i(all)f(cases,)f(this)i(v)-5 b(alue)27 b(is)g(also)f(used)h
-(to)g(\015ag)g(an)n(y)f(output)i(elemen)n(ts)f(in)h(the)g
-Ft(")p Fj(out)p Ft(")e Fj(\(and)h Ft(")p Fj(out)p Ft(_)p
-Fj(v)-5 b(ar)p Ft(")p Fj(\))427 4237 y(arra)n(y\(s\))34
-b(for)i(whic)n(h)g(rebined)g(v)-5 b(alues)36 b(could)g(not)h(b)r(e)f
-(obtained)g(\(see)g(the)h Ft(")p Fj(Propagation)c(of)j(Missing)427
-4336 y(Data)p Ft(")27 b Fj(section)g(b)r(elo)n(w)h(for)f(details)g(of)h
-(the)g(circumstances)e(under)i(whic)n(h)f(this)h(ma)n(y)f(o)r(ccur\).)
-259 4482 y Fd(ndim)p Ft(_)p Fd(out)427 4582 y Fj(The)38
-b(n)n(um)n(b)r(er)f(of)g(dimensions)g(in)h(the)f(output)h(grid.)66
-b(This)37 b(should)g(b)r(e)h(at)f(least)g(one.)65 b(It)38
-b(need)g(not)427 4681 y(necessarily)26 b(b)r(e)i(equal)f(to)h(the)g(n)n
-(um)n(b)r(er)f(of)h(dimensions)f(in)h(the)g(input)g(grid.)259
-4827 y Fd(lbnd)p Ft(_)p Fd(out)427 4927 y Fj(P)n(oin)n(ter)d(to)i(an)f
-(arra)n(y)f(of)i(in)n(tegers,)e(with)j Ft(")p Fj(ndim)p
-Ft(_)p Fj(out)p Ft(")e Fj(elemen)n(ts,)g(con)n(taining)g(the)h(co)r
-(ordinates)f(of)g(the)427 5026 y(cen)n(tre)h(of)h(the)g(\014rst)f
-(pixel)h(in)g(the)g(output)g(grid)f(along)f(eac)n(h)h(dimension.)259
-5172 y Fd(ubnd)p Ft(_)p Fd(out)427 5271 y Fj(P)n(oin)n(ter)e(to)i(an)f
-(arra)n(y)f(of)i(in)n(tegers,)e(with)j Ft(")p Fj(ndim)p
-Ft(_)p Fj(out)p Ft(")e Fj(elemen)n(ts,)g(con)n(taining)g(the)h(co)r
-(ordinates)f(of)g(the)427 5371 y(cen)n(tre)h(of)h(the)g(last)f(pixel)h
-(in)g(the)g(output)g(grid)f(along)f(eac)n(h)h(dimension.)427
-5494 y(Note)e(that)g Ft(")p Fj(lbnd)p Ft(_)p Fj(out)p
-Ft(")f Fj(and)g Ft(")p Fj(ubnd)p Ft(_)p Fj(out)p Ft(")g
-Fj(together)g(de\014ne)h(the)g(shap)r(e,)g(size)g(and)f(co)r(ordinate)g
-(system)427 5593 y(of)32 b(the)f(output)h(grid)f(in)g(the)h(same)f(w)n
-(a)n(y)f(as)h Ft(")p Fj(lbnd)p Ft(_)p Fj(in)p Ft(")f
-Fj(and)i Ft(")p Fj(ubnd)p Ft(_)p Fj(in)p Ft(")e Fj(de\014ne)i(the)g
-(shap)r(e,)g(size)f(and)427 5693 y(co)r(ordinate)c(system)g(of)h(the)g
-(input)g(grid.)p eop end
-%%Page: 312 322
-TeXDict begin 312 321 bop 0 52 a FF(312)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(lbnd)427
-451 y Fj(P)n(oin)n(ter)f(to)i(an)f(arra)n(y)e(of)j(in)n(tegers,)f(with)
-h Ft(")p Fj(ndim)p Ft(_)p Fj(in)p Ft(")f Fj(elemen)n(ts,)h(con)n
-(taining)f(the)h(co)r(ordinates)e(of)h(the)427 551 y(\014rst)d(pixel)f
-(in)h(the)g(region)e(of)h(the)h(input)h(grid)e(whic)n(h)g(is)g(to)h(b)r
-(e)g(included)g(in)g(the)f(rebined)h(output)g(arra)n(y)-7
-b(.)259 691 y Fd(ubnd)427 790 y Fj(P)n(oin)n(ter)29 b(to)i(an)f(arra)n
-(y)e(of)j(in)n(tegers,)f(with)h Ft(")p Fj(ndim)p Ft(_)p
-Fj(in)p Ft(")f Fj(elemen)n(ts,)h(con)n(taining)f(the)h(co)r(ordinates)e
-(of)h(the)427 890 y(last)d(pixel)h(in)f(the)h(region)e(of)h(the)h
-(input)g(grid)e(whic)n(h)i(is)f(to)g(b)r(e)h(included)g(in)f(the)h
-(rebined)f(output)h(arra)n(y)-7 b(.)427 1010 y(Note)23
-b(that)h Ft(")p Fj(lbnd)p Ft(")e Fj(and)h Ft(")p Fj(ubnd)p
-Ft(")g Fj(together)f(de\014ne)h(the)h(shap)r(e)f(and)f(p)r(osition)h
-(of)g(a)g(\(h)n(yp)r(er-\)rectangular)427 1110 y(region)c(of)i(the)f
-(input)h(grid)f(whic)n(h)g(is)g(to)h(b)r(e)f(included)h(in)g(the)f
-(rebined)h(output)f(arra)n(y)-7 b(.)33 b(This)20 b(region)f(should)427
-1209 y(lie)33 b(wholly)g(within)g(the)g(exten)n(t)g(of)g(the)g(input)h
-(grid)e(\(as)g(de\014ned)h(b)n(y)g(the)g Ft(")p Fj(lbnd)p
-Ft(_)p Fj(in)p Ft(")f Fj(and)h Ft(")p Fj(ubnd)p Ft(_)p
-Fj(in)p Ft(")427 1309 y Fj(arra)n(ys\).)i(Regions)26
-b(of)i(the)g(input)g(grid)f(lying)h(outside)f(this)h(region)e(will)i
-(not)g(b)r(e)g(used.)259 1449 y Fd(out)427 1549 y Fj(P)n(oin)n(ter)e
-(to)h(an)g(arra)n(y)-7 b(,)26 b(with)i(one)f(elemen)n(t)g(for)g(eac)n
-(h)f(pixel)i(in)g(the)f(output)h(grid,)f(in)h(whic)n(h)f(the)h(rebined)
-427 1648 y(data)e(v)-5 b(alues)26 b(will)g(b)r(e)g(returned.)36
-b(The)26 b(n)n(umerical)f(t)n(yp)r(e)i(of)f(this)g(arra)n(y)e(should)i
-(matc)n(h)f(that)i(of)f(the)g Ft(")p Fj(in)p Ft(")427
-1748 y Fj(arra)n(y)-7 b(,)31 b(and)g(the)h(data)g(storage)d(order)i
-(should)g(b)r(e)h(suc)n(h)g(that)g(the)g(index)g(of)f(the)h(\014rst)g
-(grid)f(dimension)427 1848 y(v)-5 b(aries)27 b(most)g(rapidly)f(and)i
-(that)f(of)h(the)f(\014nal)h(dimension)f(least)g(rapidly)f(\(i.e.)38
-b(F)-7 b(ortran)26 b(arra)n(y)f(indexing)427 1947 y(is)j(used\).)259
-2087 y Fd(out)p Ft(_)p Fd(v)-5 b(ar)427 2187 y Fj(An)25
-b(optional)f(p)r(oin)n(ter)g(to)h(an)f(arra)n(y)e(with)j(the)g(same)f
-(t)n(yp)r(e)h(and)f(size)h(as)f(the)h Ft(")p Fj(out)p
-Ft(")e Fj(arra)n(y)-7 b(.)34 b(If)25 b(giv)n(en,)f(this)427
-2287 y(arra)n(y)29 b(will)i(b)r(e)h(used)f(to)g(return)f(v)-5
-b(ariance)30 b(estimates)h(for)g(the)g(rebined)g(data)g(v)-5
-b(alues.)47 b(This)31 b(arra)n(y)d(will)427 2386 y(only)f(b)r(e)h(used)
-g(if)g(the)g Ft(")p Fj(in)p Ft(_)p Fj(v)-5 b(ar)p Ft(")26
-b Fj(arra)n(y)f(has)i(also)g(b)r(een)h(supplied.)427
-2506 y(The)23 b(output)f(v)-5 b(ariance)22 b(v)-5 b(alues)21
-b(will)i(b)r(e)g(calculated)e(on)h(the)h(assumption)f(that)g(errors)e
-(on)i(the)h(input)g(data)427 2606 y(v)-5 b(alues)24 b(are)g
-(statistically)f(indep)r(enden)n(t)i(and)g(that)f(their)g(v)-5
-b(ariance)24 b(estimates)g(ma)n(y)f(simply)i(b)r(e)f(summed)427
-2705 y(\(with)30 b(appropriate)d(w)n(eigh)n(ting)g(factors\))h(when)h
-(sev)n(eral)e(input)i(pixels)g(con)n(tribute)f(to)h(an)f(output)h(data)
-427 2805 y(v)-5 b(alue.)59 b(If)35 b(this)g(assumption)f(is)h(not)g(v)
--5 b(alid,)36 b(then)f(the)h(output)f(error)e(estimates)h(ma)n(y)g(b)r
-(e)h(biased.)58 b(In)427 2905 y(addition,)31 b(note)f(that)h(the)f
-(statistical)g(errors)e(on)i(neigh)n(b)r(ouring)f(output)h(data)g(v)-5
-b(alues)30 b(\(as)g(w)n(ell)g(as)f(the)427 3004 y(estimates)j(of)f
-(those)g(errors\))f(ma)n(y)h(often)h(b)r(e)g(correlated,)f(ev)n(en)g
-(if)h(the)g(ab)r(o)n(v)n(e)f(assumption)g(ab)r(out)g(the)427
-3104 y(input)e(data)e(is)g(correct,)g(b)r(ecause)g(of)g(the)h(pixel)g
-(spreading)e(sc)n(hemes)h(emplo)n(y)n(ed.)427 3224 y(If)h(no)g(output)g
-(v)-5 b(ariance)26 b(estimates)h(are)g(required,)g(a)g(NULL)h(p)r(oin)n
-(ter)f(should)g(b)r(e)h(giv)n(en.)-2 3401 y Fd(Data)33
-b(T)m(yp)s(e)g(Co)s(des)n(:)227 3547 y Fj(T)-7 b(o)23
-b(select)f(the)i(appropriate)d(rebinning)h(function,)j(y)n(ou)d(should)
-g(replace)g Fl(<)p Fj(X)p Fl(>)g Fj(in)h(the)h(generic)d(function)j
-(name)227 3646 y(astRebin)p Fl(<)p Fj(X)p Fl(>)e Fj(with)h(a)f(1-)f(or)
-h(2-c)n(haracter)d(data)j(t)n(yp)r(e)g(co)r(de,)i(so)d(as)h(to)g(matc)n
-(h)g(the)h(n)n(umerical)e(t)n(yp)r(e)i Fl(<)p Fj(Xt)n(yp)r(e)p
-Fl(>)227 3746 y Fj(of)28 b(the)g(data)f(y)n(ou)g(are)f(pro)r(cessing,)h
-(as)f(follo)n(ws:)340 3897 y Fi(\017)45 b Fj(D:)28 b(double)340
-4037 y Fi(\017)45 b Fj(F:)28 b(\015oat)340 4177 y Fi(\017)45
-b Fj(I:)28 b(in)n(t)227 4354 y(F)-7 b(or)29 b(example,)h(astRebinD)g(w)
-n(ould)f(b)r(e)i(used)e(to)h(pro)r(cess)e Ft(")p Fj(double)p
-Ft(")h Fj(data,)h(while)g(astRebinI)f(w)n(ould)h(b)r(e)g(used)227
-4454 y(to)e(pro)r(cess)e Ft(")p Fj(in)n(t)p Ft(")h Fj(data,)g(etc.)227
-4586 y(Note)k(that,)h(unlik)n(e)f(astResample)p Fl(<)p
-Fj(X)p Fl(>)p Fj(,)f(the)h(astRebin)p Fl(<)p Fj(X)p Fl(>)f
-Fj(set)h(of)g(functions)g(do)r(es)g(not)f(y)n(et)h(supp)r(ort)g(un-)227
-4685 y(signed)c(in)n(teger)g(data)g(t)n(yp)r(es)h(or)e(in)n(tegers)h
-(of)g(di\013eren)n(t)h(sizes.)-2 4850 y Fd(Pixel)k(Spreading)f(Sc)m
-(hemes)n(:)227 4996 y Fj(The)c(pixel)g(spreading)f(sc)n(heme)g(sp)r
-(eci\014es)h(the)g(P)n(oin)n(t)f(Spread)g(F)-7 b(unction)27
-b(\(PSF\))g(applied)g(to)g(eac)n(h)f(input)i(pixel)227
-5095 y(v)-5 b(alue)34 b(as)g(it)h(is)f(copied)g(in)n(to)g(the)h(output)
-g(arra)n(y)-7 b(.)54 b(It)35 b(can)f(b)r(e)h(though)n(t)f(of)g(as)f
-(the)i(in)n(v)n(erse)e(of)h(the)h(sub-pixel)227 5195
-y(in)n(terp)r(olation)e(sc)n(hemes)g(used)h(b)n(y)g(the)g(astResample)p
-Fl(<)p Fj(X)p Fl(>)e Fj(group)h(of)h(functions.)55 b(That)34
-b(is,)h(in)g(a)e(sub-pixel)227 5295 y(in)n(terp)r(olation)25
-b(sc)n(heme)f(the)i(k)n(ernel)e(sp)r(eci\014es)h(the)h(w)n(eigh)n(t)e
-(to)h(assign)f(to)h(eac)n(h)f(input)i(pixel)f(when)h(forming)e(the)227
-5394 y(w)n(eigh)n(ted)34 b(mean)g(of)h(the)g(input)g(pixels,)h(whereas)
-e(the)g(k)n(ernel)g(in)h(a)f(pixel)h(spreading)e(sc)n(heme)h(sp)r
-(eci\014es)g(the)227 5494 y(fraction)26 b(of)h(the)g(input)h(data)e(v)
--5 b(alue)27 b(whic)n(h)g(is)f(to)h(b)r(e)g(assigned)f(to)g(eac)n(h)g
-(output)i(pixel.)36 b(As)27 b(for)f(in)n(terp)r(olation,)227
-5593 y(the)31 b(c)n(hoice)e(of)h(suitable)h(pixel)f(spreading)f(sc)n
-(heme)g(in)n(v)n(olv)n(es)g(stric)n(king)g(a)h(balance)f(b)r(et)n(w)n
-(een)h(sc)n(hemes)g(whic)n(h)227 5693 y(tend)22 b(to)f(degrade)f(sharp)
-g(features)h(in)g(the)h(data)e(b)n(y)h(smo)r(othing)g(them,)i(and)e
-(those)f(whic)n(h)i(attempt)f(to)g(preserv)n(e)p eop
-end
-%%Page: 313 323
-TeXDict begin 313 322 bop 3643 52 a FF(313)227 351 y
-Fj(sharp)33 b(features)g(but)h(whic)n(h)g(often)g(tend)g(to)f(in)n(tro)
-r(duce)g(un)n(w)n(an)n(ted)g(artifacts.)54 b(See)34 b(the)g
-(astResample)p Fl(<)p Fj(X)p Fl(>)227 451 y Fj(do)r(cumen)n(tation)28
-b(for)f(further)g(discussion.)227 580 y(The)d(binning)g(algorithm)f
-(used)h(has)f(the)h(abilit)n(y)g(to)g(in)n(tro)r(duce)f(artifacts)g
-(not)h(seen)g(when)g(using)f(a)h(resampling)227 680 y(algorithm.)45
-b(P)n(articularly)-7 b(,)28 b(when)j(viewing)f(the)h(output)g(image)f
-(at)g(high)g(con)n(trast,)g(systems)g(of)g(curv)n(es)g(lines)227
-780 y(co)n(v)n(ering)d(the)i(en)n(tire)g(image)f(ma)n(y)g(b)r(e)i
-(visible.)40 b(These)29 b(are)f(caused)g(b)n(y)h(a)f(b)r(eating)h
-(e\013ect)h(b)r(et)n(w)n(een)e(the)i(input)227 879 y(pixel)38
-b(p)r(ositions)g(and)f(the)i(output)f(pixels)g(p)r(osition,)i(and)e
-(their)f(nature)h(and)f(strength)h(dep)r(end)g(critically)227
-979 y(up)r(on)33 b(the)g(nature)f(of)h(the)g(Mapping)f(and)g(the)h
-(spreading)f(function)h(b)r(eing)f(used.)52 b(In)33 b(general,)g(the)g
-(nearest)227 1078 y(neigh)n(b)r(our)d(spreading)f(function)i
-(demonstrates)e(this)i(e\013ect)g(more)e(clearly)g(than)i(the)g(other)e
-(functions,)j(and)227 1178 y(for)27 b(this)h(reason)e(should)i(b)r(e)g
-(used)f(with)h(caution.)227 1308 y(The)21 b(follo)n(wing)e(v)-5
-b(alues)20 b(\(de\014ned)h(in)g(the)g Ft(")p Fj(ast.h)p
-Ft(")e Fj(header)h(\014le\))h(ma)n(y)e(b)r(e)i(assigned)e(to)i(the)f
-Ft(")p Fj(spread)p Ft(")f Fj(parameter.)227 1407 y(See)39
-b(the)h(astResample)p Fl(<)p Fj(X)p Fl(>)e Fj(do)r(cumen)n(tation)h
-(for)f(details)h(of)g(these)h(sc)n(hemes)e(including)h(the)h(use)f(of)g
-(the)227 1507 y Ft(")p Fj(fspread)p Ft(")26 b Fj(and)i
-Ft(")p Fj(params)p Ft(")d Fj(parameters:)340 1783 y Fi(\017)45
-b Fj(AST)p Ft(__)p Fj(NEAREST)340 1920 y Fi(\017)g Fj(AST)p
-Ft(__)p Fj(LINEAR)340 2058 y Fi(\017)g Fj(AST)p Ft(__)p
-Fj(SINC)340 2196 y Fi(\017)g Fj(AST)p Ft(__)p Fj(SINCSINC)340
-2334 y Fi(\017)g Fj(AST)p Ft(__)p Fj(SINCCOS)340 2472
-y Fi(\017)g Fj(AST)p Ft(__)p Fj(SINCGA)n(USS)340 2609
-y Fi(\017)g Fj(AST)p Ft(__)p Fj(SOMBCOS)227 2781 y(In)24
-b(addition,)g(the)g(follo)n(wing)e(sc)n(hemes)h(can)g(b)r(e)h(used)g
-(with)g(astRebin)p Fl(<)p Fj(X)p Fl(>)e Fj(but)j(not)e(with)h
-(astResample)p Fl(<)p Fj(X)p Fl(>)p Fj(:)340 3057 y Fi(\017)45
-b Fj(AST)p Ft(__)p Fj(GA)n(USS:)24 b(This)f(sc)n(heme)g(uses)g(a)g(k)n
-(ernel)f(of)h(the)h(form)f(exp\(-k)p Fi(\003)p Fj(x)p
-Fi(\003)p Fj(x\),)g(with)g(k)h(a)e(p)r(ositiv)n(e)h(constan)n(t)427
-3156 y(determined)k(b)n(y)f(the)g(full-width)i(at)e(half-maxim)n(um)g
-(\(FWHM\).)h(The)g(FWHM)g(should)f(b)r(e)h(supplied)f(in)427
-3256 y(units)35 b(of)f(output)g(pixels)g(b)n(y)f(means)h(of)g(the)g
-Ft(")p Fj(params[1])p Ft(")d Fj(v)-5 b(alue)34 b(and)g(should)g(b)r(e)g
-(at)g(least)f(0.1.)56 b(The)427 3356 y Ft(")p Fj(params[0])p
-Ft(")23 b Fj(v)-5 b(alue)26 b(should)f(b)r(e)h(used)g(to)f(sp)r(ecify)h
-(at)f(what)h(p)r(oin)n(t)g(the)g(Gaussian)e(is)i(truncated)f(to)h
-(zero.)427 3455 y(This)i(should)g(b)r(e)g(giv)n(en)f(as)g(a)h(n)n(um)n
-(b)r(er)g(of)f(output)i(pixels)f(on)f(either)h(side)g(of)g(the)g(cen)n
-(tral)f(output)h(p)r(oin)n(t)427 3555 y(in)g(eac)n(h)f(dimension)g
-(\(the)i(nearest)d(in)n(teger)h(v)-5 b(alue)28 b(is)f(used\).)-2
-3727 y Fd(Con)m(trol)32 b(Flags)n(:)227 3873 y Fj(The)h(follo)n(wing)e
-(\015ags)h(are)g(de\014ned)h(in)f(the)h Ft(")p Fj(ast.h)p
-Ft(")f Fj(header)g(\014le)g(and)h(ma)n(y)f(b)r(e)h(used)f(to)h(pro)n
-(vide)e(additional)227 3972 y(con)n(trol)g(o)n(v)n(er)g(the)i
-(rebinning)e(pro)r(cess.)50 b(Ha)n(ving)32 b(selected)g(a)g(set)g(of)g
-(\015ags,)h(y)n(ou)f(should)g(supply)g(the)h(bit)n(wise)227
-4072 y(OR)28 b(of)f(their)h(v)-5 b(alues)27 b(via)g(the)h
-Ft(")p Fj(\015ags)p Ft(")e Fj(parameter:)340 4348 y Fi(\017)45
-b Fj(AST)p Ft(__)p Fj(USEBAD:)33 b(Indicates)g(that)h(there)f(ma)n(y)f
-(b)r(e)i(bad)f(pixels)f(in)i(the)f(input)h(arra)n(y\(s\))d(whic)n(h)i
-(m)n(ust)427 4448 y(b)r(e)27 b(recognised)f(b)n(y)g(comparing)g(with)h
-(the)g(v)-5 b(alue)27 b(giv)n(en)f(for)g Ft(")p Fj(badv)-5
-b(al)p Ft(")26 b Fj(and)g(propagated)f(to)i(the)g(output)427
-4547 y(arra)n(y\(s\).)35 b(If)26 b(this)h(\015ag)e(is)h(not)g(set,)h
-(all)f(input)h(v)-5 b(alues)26 b(are)f(treated)h(literally)f(and)h(the)
-h Ft(")p Fj(badv)-5 b(al)p Ft(")25 b Fj(v)-5 b(alue)26
-b(is)427 4647 y(only)h(used)h(for)f(\015agging)f(output)i(arra)n(y)d(v)
--5 b(alues.)-2 4819 y Fd(Propagation)33 b(of)e(Missing)f(Data)n(:)227
-4965 y Fj(Instances)40 b(of)h(missing)f(data)g(\(bad)h(pixels\))g(in)f
-(the)h(output)h(grid)e(are)f(iden)n(ti\014ed)i(b)n(y)g(o)r(ccurrences)e
-(of)h(the)227 5064 y Ft(")p Fj(badv)-5 b(al)p Ft(")22
-b Fj(v)-5 b(alue)22 b(in)h(the)f Ft(")p Fj(out)p Ft(")g
-Fj(arra)n(y)-7 b(.)33 b(These)22 b(are)g(pro)r(duced)g(if)h(the)g(sum)f
-(of)h(the)f(w)n(eigh)n(ts)g(of)g(the)h(con)n(tributing)227
-5164 y(input)29 b(pixels)e(is)h(less)f(than)g Ft(")p
-Fj(wlim)p Ft(")p Fj(.)227 5293 y(An)d(input)g(pixel)f(is)f(considered)g
-(bad)h(\(and)g(is)g(consequen)n(tly)f(ignored\))g(if)i(its)f(data)g(v)
--5 b(alue)23 b(is)f(equal)h(to)g Ft(")p Fj(badv)-5 b(al)p
-Ft(")227 5393 y Fj(and)28 b(the)g(AST)p Ft(__)p Fj(USEBAD)f(\015ag)g
-(is)h(set)f(via)g(the)h Ft(")p Fj(\015ags)p Ft(")e Fj(parameter.)227
-5522 y(In)j(addition,)f(asso)r(ciated)f(output)i(v)-5
-b(ariance)27 b(estimates)h(\(if)i(calculated\))e(ma)n(y)f(b)r(e)i
-(declared)e(bad)i(and)f(\015agged)227 5622 y(with)g(the)g
-Ft(")p Fj(badv)-5 b(al)p Ft(")27 b Fj(v)-5 b(alue)27
-b(in)h(the)g Ft(")p Fj(out)p Ft(_)p Fj(v)-5 b(ar)p Ft(")26
-b Fj(arra)n(y)f(for)i(similar)g(reasons.)p eop end
-%%Page: 314 324
-TeXDict begin 314 323 bop 0 52 a FF(314)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astRebinSeq)p Fc(<)p Fz(X)p Fc(>)153 b Fe(Rebin)37
-b(a)f(region)g(of)g(a)h(sequence)1566 598 y(of)h(data)g(grids)2770
-483 y Fz(astRebinSeq)p Fc(<)p Fz(X)p Fc(>)0 766 y Fd(Description:)44
-b Fj(This)28 b(set)g(of)g(functions)h(is)f(iden)n(tical)f(to)h
-(astRebin)p Fl(<)p Fj(X)p Fl(>)g Fj(except)g(that)g(the)g(rebinned)g
-(input)h(data)f(is)227 866 y(added)g(in)n(to)f(the)h(supplied)f(output)
-h(arra)n(ys,)d(rather)h(than)i(simply)g(o)n(v)n(er-writing)c(the)k(con)
-n(ten)n(ts)f(of)g(the)h(output)227 966 y(arra)n(ys.)40
-b(Th)n(us,)29 b(b)n(y)g(calling)g(this)g(function)h(rep)r(eatedly)-7
-b(,)29 b(a)g(sequence)g(of)g(input)h(arra)n(ys)d(can)i(b)r(e)h
-(rebinned)f(and)227 1065 y(accum)n(ulated)e(in)n(to)h(a)f(single)g
-(output)h(arra)n(y)-7 b(,)25 b(e\013ectiv)n(ely)j(forming)f(a)g(mosaic)
-g(of)g(the)h(input)g(data)g(arra)n(ys.)227 1185 y(In)h(addition,)g(the)
-g(w)n(eigh)n(ts)f(asso)r(ciated)f(with)j(eac)n(h)e(output)h(pixel)g
-(are)e(returned.)40 b(The)29 b(w)n(eigh)n(t)f(of)h(an)f(output)227
-1284 y(pixel)23 b(indicates)f(the)h(n)n(um)n(b)r(er)g(of)f(input)i
-(pixels)e(whic)n(h)h(ha)n(v)n(e)e(b)r(een)i(accum)n(ulated)f(in)h(that)
-g(output)g(pixel.)35 b(If)23 b(the)227 1384 y(en)n(tire)30
-b(v)-5 b(alue)30 b(of)h(an)f(input)h(pixel)f(is)g(assigned)f(to)i(a)e
-(single)h(output)h(pixel,)g(then)g(the)g(w)n(eigh)n(t)e(of)h(that)h
-(output)227 1484 y(pixel)25 b(is)f(incremen)n(ted)h(b)n(y)f(one.)36
-b(If)25 b(some)f(fraction)g(of)g(the)h(v)-5 b(alue)25
-b(of)f(an)g(input)i(pixel)e(is)h(assigned)e(to)i(an)f(output)227
-1583 y(pixel,)k(then)g(the)g(w)n(eigh)n(t)f(of)h(that)f(output)i(pixel)
-e(is)h(incremen)n(ted)f(b)n(y)g(the)h(fraction)f(used.)227
-1703 y(The)h(start)f(of)g(a)g(new)h(sequence)f(is)g(indicated)h(b)n(y)f
-(sp)r(ecifying)g(the)h(AST)p Ft(__)p Fj(REBININIT)f(\015ag)g(via)g(the)
-g Ft(")p Fj(\015ags)p Ft(")227 1802 y Fj(parameter.)76
-b(This)41 b(causes)f(the)i(supplied)f(arra)n(ys)d(to)j(b)r(e)h
-(\014lled)f(with)h(zeros)e(b)r(efore)g(the)i(rebinned)f(input)227
-1902 y(data)f(is)g(added)f(in)n(to)h(them.)74 b(Subsequenct)41
-b(in)n(v)n(o)r(cations)d(within)i(the)h(same)e(sequence)g(should)h
-(omit)g(the)227 2002 y(AST)p Ft(__)p Fj(REBININIT)27
-b(\015ag.)227 2121 y(The)36 b(last)g(call)g(in)g(a)g(sequence)f(is)h
-(indicated)g(b)n(y)g(sp)r(ecifying)g(the)h(AST)p Ft(__)p
-Fj(REBINEND)e(\015ag.)62 b(This)36 b(causes)227 2221
-y(the)c(output)f(data)g(and)f(v)-5 b(ariance)30 b(arra)n(ys)e(to)j(b)r
-(e)h(normalised)d(b)r(efore)i(b)r(eing)g(returned.)46
-b(This)31 b(normalisation)227 2321 y(consists)j(of)g(dividing)h(the)g
-(data)f(arra)n(y)e(b)n(y)i(the)h(w)n(eigh)n(ts)f(arra)n(y)-7
-b(,)34 b(and)g(can)g(eliminate)h(artifacts)f(whic)n(h)g(ma)n(y)227
-2420 y(b)r(e)e(in)n(tro)r(duced)f(in)n(to)g(the)h(rebinned)f(data)g(as)
-g(a)g(consequence)f(of)i(aliasing)e(b)r(et)n(w)n(een)h(the)h(input)g
-(and)f(output)227 2520 y(grids.)55 b(Ho)n(w)n(ev)n(er,)34
-b(it)g(can)g(also)f(result)g(in)i(small)e(c)n(hanges)g(to)h(the)g
-(total)g(pixel)g(v)-5 b(alue)34 b(in)g(an)n(y)f(giv)n(en)g(area)g(of)
-227 2619 y(the)26 b(output)h(arra)n(y)-7 b(.)34 b(In)25
-b(addition)h(to)f(normalisation)f(of)i(the)g(output)g(data)g(v)-5
-b(alues,)25 b(an)n(y)g(output)h(v)-5 b(ariances)25 b(are)227
-2719 y(also)g(appropriately)e(normalised,)i(and)h(an)n(y)e(output)j
-(data)e(v)-5 b(alues)25 b(with)h(w)n(eigh)n(t)f(less)g(than)h
-Ft(")p Fj(wlim)p Ft(")f Fj(are)f(set)i(to)227 2819 y
-Ft(")p Fj(badv)-5 b(al)p Ft(")p Fj(.)227 2938 y(Output)34
-b(v)-5 b(ariances)32 b(can)h(b)r(e)g(generated)f(in)i(t)n(w)n(o)e(w)n
-(a)n(ys;)j(b)n(y)d(rebinning)h(the)h(supplied)f(input)h(v)-5
-b(ariances)32 b(with)227 3038 y(appropriate)21 b(w)n(eigh)n(ts,)i(or)f
-(b)n(y)g(\014nding)h(the)g(spread)f(of)g(input)i(data)e(v)-5
-b(alues)22 b(con)n(tributing)g(to)h(eac)n(h)e(output)j(pixel)227
-3137 y(\(see)k(the)g(AST)p Ft(__)p Fj(GENV)-9 b(AR)27
-b(and)h(AST)p Ft(__)p Fj(USEV)-9 b(AR)27 b(\015ags\).)0
-3277 y Fd(Synopsis:)121 b Ft(void)42 b(astRebinSeq)p
-Fl(<)p Ft(X)p Fl(>)p Ft(\()37 b(AstMapping)j Fi(\003)p
-Ft(this,)h(double)g(wlim,)g(int)i(ndim_in,)d(const)h(int)i(lbnd_in[],)
-227 3377 y(const)f(int)g(ubnd_in[],)e(const)h Fl(<)p
-Ft(Xtype)p Fl(>)g Ft(in[],)g(const)h Fl(<)p Ft(Xtype)p
-Fl(>)e Ft(in_var[],)g(int)j(spread,)d(const)227 3476
-y(double)h(params[],)f(int)j(flags,)e(double)g(tol,)h(int)g(maxpix,)f
-Fl(<)p Ft(Xtype)p Fl(>)f Ft(badval,)h(int)h(ndim_out,)227
-3576 y(const)g(int)g(lbnd_out[],)d(const)j(int)g(ubnd_out[],)d(const)j
-(int)g(lbnd[],)f(const)g(int)h(ubnd[],)f Fl(<)p Ft(Xtype)p
-Fl(>)227 3675 y Ft(out[],)g Fl(<)p Ft(Xtype)p Fl(>)g
-Ft(out_var[],)e(double)j(weights[],)d(int)j Fi(\003)p
-Ft(nused)f(\);)0 3815 y Fd(P)m(arameters:)259 3941 y(this)427
-4041 y Fj(P)n(oin)n(ter)19 b(to)h(a)f(Mapping,)j(whose)d(forw)n(ard)f
-(transformation)h(will)h(b)r(e)h(used)f(to)g(transform)f(the)h(co)r
-(ordinates)427 4141 y(of)28 b(pixels)f(in)h(the)g(input)g(grid)f(in)n
-(to)h(the)g(co)r(ordinate)e(system)h(of)h(the)g(output)g(grid.)427
-4252 y(The)c(n)n(um)n(b)r(er)g(of)g(input)h(co)r(ordinates)e(used)h(b)n
-(y)g(this)g(Mapping)g(\(as)f(giv)n(en)h(b)n(y)f(its)i(Nin)f
-(attribute\))h(should)427 4351 y(matc)n(h)e(the)g(n)n(um)n(b)r(er)g(of)
-g(input)h(grid)e(dimensions)h(giv)n(en)f(b)n(y)g(the)i(v)-5
-b(alue)23 b(of)g Ft(")p Fj(ndim)p Ft(_)p Fj(in)p Ft(")f
-Fj(b)r(elo)n(w.)35 b(Similarly)-7 b(,)427 4451 y(the)29
-b(n)n(um)n(b)r(er)e(of)h(output)g(co)r(ordinates)f(\(Nout)h
-(attribute\))h(should)e(matc)n(h)h(the)g(n)n(um)n(b)r(er)g(of)g(output)
-g(grid)427 4551 y(dimensions)d(giv)n(en)e(b)n(y)i Ft(")p
-Fj(ndim)p Ft(_)p Fj(out)p Ft(")p Fj(.)35 b(If)25 b Ft(")p
-Fj(in)p Ft(")f Fj(is)g(NULL,)h(the)g(Mapping)g(will)f(not)h(b)r(e)g
-(used,)g(but)g(a)g(v)-5 b(alid)427 4650 y(Mapping)28
-b(m)n(ust)f(still)h(b)r(e)g(supplied.)259 4773 y Fd(wlim)427
-4873 y Fj(This)h(v)-5 b(alue)29 b(is)f(only)h(used)f(if)i(the)f(AST)p
-Ft(__)p Fj(REBINEND)f(\015ag)g(is)h(sp)r(eci\014ed)g(via)f(the)h
-Ft(")p Fj(\015ags)p Ft(")e Fj(parameter.)427 4972 y(It)j(giv)n(es)d
-(the)j(required)e(n)n(um)n(b)r(er)g(of)h(input)h(pixel)f(v)-5
-b(alues)28 b(whic)n(h)h(m)n(ust)g(con)n(tribute)g(to)f(an)h(output)h
-(pixel)427 5072 y(\(i.e.)50 b(the)33 b(output)f(pixel)g(w)n(eigh)n(t\))
-f(in)h(order)f(for)g(the)i(output)f(pixel)g(v)-5 b(alue)32
-b(to)f(b)r(e)i(considered)d(v)-5 b(alid.)50 b(If)427
-5172 y(the)31 b(sum)f(of)g(the)h(input)g(pixel)f(w)n(eigh)n(ts)g(con)n
-(tributing)f(to)h(an)g(output)h(pixel)f(is)h(less)e(than)i(the)f
-(supplied)427 5271 y Ft(")p Fj(wlim)p Ft(")i Fj(v)-5
-b(alue,)32 b(then)h(the)f(output)g(pixel)g(v)-5 b(alue)31
-b(is)h(returned)f(set)h(to)g(the)g(supplied)g(bad)g(v)-5
-b(alue.)49 b(If)32 b(the)427 5371 y(supplied)c(v)-5 b(alue)28
-b(is)f(less)g(than)h(1.0E-10)d(then)j(1.0E-10)d(is)j(used)f(instead.)
-259 5494 y Fd(ndim)p Ft(_)p Fd(in)427 5593 y Fj(The)g(n)n(um)n(b)r(er)f
-(of)g(dimensions)g(in)h(the)g(input)g(grid.)36 b(This)26
-b(should)g(b)r(e)h(at)f(least)g(one.)36 b(Not)27 b(used)f(if)h
-Ft(")p Fj(in)p Ft(")f Fj(is)427 5693 y(NULL.)p eop end
-%%Page: 315 325
-TeXDict begin 315 324 bop 3643 52 a FF(315)259 351 y
-Fd(lbnd)p Ft(_)p Fd(in)427 451 y Fj(P)n(oin)n(ter)29
-b(to)i(an)f(arra)n(y)e(of)j(in)n(tegers,)f(with)h Ft(")p
-Fj(ndim)p Ft(_)p Fj(in)p Ft(")f Fj(elemen)n(ts,)h(con)n(taining)f(the)h
-(co)r(ordinates)e(of)h(the)427 551 y(cen)n(tre)d(of)h(the)g(\014rst)f
-(pixel)h(in)g(the)g(input)g(grid)f(along)f(eac)n(h)h(dimension.)37
-b(Not)28 b(used)f(if)h Ft(")p Fj(in)p Ft(")f Fj(is)h(NULL.)259
-690 y Fd(ubnd)p Ft(_)p Fd(in)427 790 y Fj(P)n(oin)n(ter)h(to)i(an)f
-(arra)n(y)e(of)j(in)n(tegers,)f(with)h Ft(")p Fj(ndim)p
-Ft(_)p Fj(in)p Ft(")f Fj(elemen)n(ts,)h(con)n(taining)f(the)h(co)r
-(ordinates)e(of)h(the)427 889 y(cen)n(tre)d(of)h(the)g(last)f(pixel)h
-(in)g(the)g(input)g(grid)f(along)f(eac)n(h)h(dimension.)427
-1009 y(Note)h(that)h Ft(")p Fj(lbnd)p Ft(_)p Fj(in)p
-Ft(")e Fj(and)h Ft(")p Fj(ubnd)p Ft(_)p Fj(in)p Ft(")f
-Fj(together)g(de\014ne)h(the)h(shap)r(e)f(and)f(size)h(of)g(the)g
-(input)h(grid,)e(its)427 1109 y(exten)n(t)f(along)f(a)g(particular)f
-(\(j'th\))k(dimension)d(b)r(eing)h(ubnd)p Ft(_)p Fj(in[j]-lbnd)p
-Ft(_)p Fj(in[j]+1)g(\(assuming)f(the)i(index)427 1208
-y Ft(")p Fj(j)p Ft(")f Fj(to)g(b)r(e)g(zero-based\).)35
-b(They)26 b(also)f(de\014ne)h(the)h(input)g(grid's)e(co)r(ordinate)g
-(system,)h(eac)n(h)g(pixel)g(ha)n(ving)427 1308 y(unit)33
-b(exten)n(t)g(along)e(eac)n(h)h(dimension)g(with)h(in)n(tegral)e(co)r
-(ordinate)g(v)-5 b(alues)32 b(at)h(its)f(cen)n(tre.)51
-b(Not)33 b(used)f(if)427 1408 y Ft(")p Fj(in)p Ft(")27
-b Fj(is)h(NULL.)259 1547 y Fd(in)427 1647 y Fj(P)n(oin)n(ter)h(to)i(an)
-f(arra)n(y)-7 b(,)30 b(with)h(one)f(elemen)n(t)h(for)g(eac)n(h)f(pixel)
-g(in)h(the)g(input)h(grid,)f(con)n(taining)f(the)h(input)427
-1747 y(data)25 b(to)g(b)r(e)g(rebined.)36 b(The)25 b(n)n(umerical)g(t)n
-(yp)r(e)g(of)g(this)h(arra)n(y)c(should)j(matc)n(h)g(the)h(1-)e(or)g
-(2-c)n(haracter)e(t)n(yp)r(e)427 1846 y(co)r(de)32 b(app)r(ended)h(to)f
-(the)g(function)h(name)f(\(e.g.)50 b(if)32 b(y)n(ou)g(are)f(using)g
-(astRebinSeqF,)i(the)f(t)n(yp)r(e)g(of)g(eac)n(h)427
-1946 y(arra)n(y)26 b(elemen)n(t)h(should)h(b)r(e)g Ft(")p
-Fj(\015oat)p Ft(")p Fj(\).)427 2065 y(The)33 b(storage)f(order)f(of)j
-(data)e(within)i(this)g(arra)n(y)c(should)j(b)r(e)h(suc)n(h)f(that)g
-(the)h(index)f(of)g(the)g(\014rst)g(grid)427 2165 y(dimension)23
-b(v)-5 b(aries)22 b(most)h(rapidly)f(and)h(that)g(of)g(the)h(\014nal)f
-(dimension)g(least)f(rapidly)g(\(i.e.)36 b(F)-7 b(ortran)22
-b(arra)n(y)427 2265 y(indexing)i(is)f(used\).)36 b(If)24
-b(a)f(NULL)h(p)r(oin)n(ter)f(is)g(supplied)h(for)f Ft(")p
-Fj(in)p Ft(")p Fj(,)h(then)g(no)f(data)g(is)g(added)h(to)f(the)h
-(output)427 2364 y(arra)n(ys,)h(but)k(an)n(y)d(initialisation)h(or)g
-(normalisation)f(requested)h(b)n(y)g Ft(")p Fj(\015ags)p
-Ft(")f Fj(is)i(still)f(p)r(erformed.)259 2504 y Fd(in)p
-Ft(_)p Fd(v)-5 b(ar)427 2604 y Fj(An)25 b(optional)e(p)r(oin)n(ter)h
-(to)g(a)f(second)h(arra)n(y)e(with)i(the)h(same)e(size)h(and)g(t)n(yp)r
-(e)g(as)f(the)i Ft(")p Fj(in)p Ft(")e Fj(arra)n(y)-7
-b(.)34 b(If)24 b(giv)n(en,)427 2703 y(this)32 b(should)g(con)n(tain)f
-(a)g(set)h(of)g(non-negativ)n(e)e(v)-5 b(alues)31 b(whic)n(h)h
-(represen)n(t)f(estimates)g(of)h(the)g(statistical)427
-2803 y(v)-5 b(ariance)29 b(asso)r(ciated)f(with)j(eac)n(h)e(elemen)n(t)
-g(of)h(the)g Ft(")p Fj(in)p Ft(")f Fj(arra)n(y)-7 b(.)42
-b(If)30 b(neither)g(the)g(AST)p Ft(__)p Fj(USEV)-9 b(AR)29
-b(nor)427 2902 y(the)35 b(AST)p Ft(__)p Fj(V)-9 b(AR)g(W)n(GT)34
-b(\015ag)f(is)h(set,)h(no)f(input)h(v)-5 b(ariance)32
-b(estimates)i(are)f(required)g(and)h(this)g(p)r(oin)n(ter)427
-3002 y(will)28 b(not)g(b)r(e)g(used.)37 b(A)27 b(NULL)h(p)r(oin)n(ter)g
-(ma)n(y)f(then)h(b)r(e)g(supplied.)259 3142 y Fd(spread)427
-3241 y Fj(This)23 b(parameter)e(sp)r(eci\014es)i(the)g(sc)n(heme)g(to)g
-(b)r(e)g(used)g(for)f(dividing)h(eac)n(h)f(input)h(data)g(v)-5
-b(alue)22 b(up)i(amongst)427 3341 y(the)30 b(corresp)r(onding)d(output)
-j(pixels.)42 b(It)30 b(ma)n(y)e(b)r(e)i(used)f(to)h(select)f(from)g(a)g
-(set)g(of)g(pre-de\014ned)g(sc)n(hemes)427 3441 y(b)n(y)36
-b(supplying)f(one)g(of)g(the)h(v)-5 b(alues)35 b(describ)r(ed)h(in)g
-(the)f Ft(")p Fj(Pixel)g(Spreading)g(Sc)n(hemes)p Ft(")f
-Fj(section)h(in)h(the)427 3540 y(description)e(of)g(the)g(astRebin)p
-Fl(<)p Fj(X)p Fl(>)g Fj(functions.)57 b(If)34 b(a)g(v)-5
-b(alue)34 b(of)g(zero)f(is)h(supplied,)i(then)f(the)f(default)427
-3640 y(linear)22 b(spreading)f(sc)n(heme)h(is)h(used)g(\(equiv)-5
-b(alen)n(t)22 b(to)h(supplying)f(the)h(v)-5 b(alue)22
-b(AST)p Ft(__)p Fj(LINEAR\).)h(Not)g(used)427 3740 y(if)28
-b Ft(")p Fj(in)p Ft(")f Fj(is)h(NULL.)259 3879 y Fd(params)427
-3979 y Fj(An)36 b(optional)e(p)r(oin)n(ter)h(to)g(an)g(arra)n(y)e(of)i
-(double)g(whic)n(h)h(should)e(con)n(tain)h(an)n(y)f(additional)h
-(parameter)427 4078 y(v)-5 b(alues)37 b(required)g(b)n(y)g(the)h(pixel)
-g(spreading)e(sc)n(heme.)66 b(If)38 b(suc)n(h)f(parameters)f(are)g
-(required,)k(this)d(will)427 4178 y(b)r(e)c(noted)f(in)h(the)g
-Ft(")p Fj(Pixel)e(Spreading)h(Sc)n(hemes)p Ft(")f Fj(section)h(in)h
-(the)f(description)g(of)h(the)f(astRebin)p Fl(<)p Fj(X)p
-Fl(>)427 4278 y Fj(functions.)427 4397 y(If)d(no)e(additional)h
-(parameters)e(are)h(required,)g(this)i(arra)n(y)c(is)j(not)g(used)g
-(and)g(a)g(NULL)g(p)r(oin)n(ter)g(ma)n(y)f(b)r(e)427
-4497 y(giv)n(en.)36 b(Not)28 b(used)g(if)g Ft(")p Fj(in)p
-Ft(")f Fj(is)g(NULL.)259 4637 y Fd(\015ags)427 4736 y
-Fj(The)21 b(bit)n(wise)g(OR)f(of)h(a)f(set)h(of)f(\015ag)g(v)-5
-b(alues)20 b(whic)n(h)h(ma)n(y)f(b)r(e)h(used)g(to)f(pro)n(vide)g
-(additional)g(con)n(trol)f(o)n(v)n(er)g(the)427 4836
-y(rebinning)30 b(op)r(eration.)45 b(See)31 b(the)f Ft(")p
-Fj(Con)n(trol)f(Flags)p Ft(")g Fj(section)i(b)r(elo)n(w)f(for)g(a)g
-(description)g(of)g(the)h(options)427 4936 y(a)n(v)-5
-b(ailable.)36 b(If)28 b(no)f(\015ag)g(v)-5 b(alues)27
-b(are)g(to)g(b)r(e)h(set,)g(a)f(v)-5 b(alue)28 b(of)f(zero)g(should)g
-(b)r(e)h(giv)n(en.)259 5075 y Fd(tol)427 5175 y Fj(The)34
-b(maxim)n(um)f(tolerable)f(geometrical)f(distortion)i(whic)n(h)g(ma)n
-(y)f(b)r(e)i(in)n(tro)r(duced)f(as)f(a)h(result)g(of)g(ap-)427
-5274 y(pro)n(ximating)c(non-linear)f(Mappings)h(b)n(y)h(a)f(set)h(of)g
-(piece-wise)f(linear)g(transformations.)42 b(This)30
-b(should)427 5374 y(b)r(e)e(expressed)f(as)g(a)g(displacemen)n(t)g(in)h
-(pixels)f(in)h(the)g(output)g(grid's)f(co)r(ordinate)f(system.)427
-5494 y(If)34 b(piece-wise)f(linear)g(appro)n(ximation)f(is)h(not)h
-(required,)g(a)f(v)-5 b(alue)33 b(of)h(zero)e(ma)n(y)h(b)r(e)h(giv)n
-(en.)54 b(This)33 b(will)427 5593 y(ensure)k(that)g(the)h(Mapping)e(is)
-h(used)g(without)h(an)n(y)e(appro)n(ximation,)i(but)g(ma)n(y)e
-(increase)g(execution)427 5693 y(time.)p eop end
-%%Page: 316 326
-TeXDict begin 316 325 bop 0 52 a FF(316)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)427 351 y Fj(If)j(the)f(v)-5
-b(alue)32 b(is)g(to)r(o)g(high,)h(discon)n(tin)n(uities)e(b)r(et)n(w)n
-(een)h(the)h(linear)e(appro)n(ximations)f(used)i(in)g(adjacen)n(t)427
-451 y(panel)h(will)g(b)r(e)g(higher,)h(and)f(ma)n(y)f(cause)g(the)i
-(edges)e(of)h(the)g(panel)g(to)g(b)r(e)g(visible)g(when)g(viewing)f
-(the)427 551 y(output)j(image)e(at)h(high)g(con)n(trast.)55
-b(If)34 b(this)g(is)g(a)g(problem,)h(reduce)e(the)i(tolerance)e(v)-5
-b(alue)33 b(used.)56 b(Not)427 650 y(used)28 b(if)g Ft(")p
-Fj(in)p Ft(")f Fj(is)g(NULL.)259 775 y Fd(maxpix)427
-874 y Fj(A)42 b(v)-5 b(alue)40 b(whic)n(h)h(sp)r(eci\014es)g(an)g
-(initial)g(scale)g(size)f(\(in)i(pixels\))f(for)f(the)i(adaptiv)n(e)e
-(algorithm)g(whic)n(h)427 974 y(appro)n(ximates)d(non-linear)g
-(Mappings)h(with)h(piece-wise)f(linear)g(transformations.)68
-b(Normally)-7 b(,)40 b(this)427 1073 y(should)e(b)r(e)g(a)g(large)e(v)
--5 b(alue)38 b(\(larger)e(than)j(an)n(y)e(dimension)h(of)f(the)i
-(region)d(of)i(the)h(input)f(grid)g(b)r(eing)427 1173
-y(used\).)46 b(In)31 b(this)g(case,)g(a)f(\014rst)g(attempt)h(to)g
-(appro)n(ximate)e(the)i(Mapping)f(b)n(y)g(a)g(linear)g(transformation)
-427 1273 y(will)e(b)r(e)g(made)f(o)n(v)n(er)f(the)i(en)n(tire)f(input)i
-(region.)427 1385 y(If)k(a)f(smaller)f(v)-5 b(alue)33
-b(is)f(used,)i(the)e(input)h(region)f(will)g(\014rst)g(b)r(e)h(divided)
-g(in)n(to)f(sub-regions)e(whose)i(size)427 1484 y(do)r(es)39
-b(not)h(exceed)f Ft(")p Fj(maxpix)p Ft(")f Fj(pixels)i(in)g(an)n(y)e
-(dimension.)73 b(Only)39 b(at)g(this)h(p)r(oin)n(t)g(will)g(attempts)g
-(at)427 1584 y(appro)n(ximation)26 b(commence.)427 1696
-y(This)38 b(v)-5 b(alue)38 b(ma)n(y)g(o)r(ccasionally)e(b)r(e)j(useful)
-f(in)h(prev)n(en)n(ting)e(false)h(con)n(v)n(ergence)d(of)j(the)h
-(adaptiv)n(e)e(al-)427 1796 y(gorithm)c(in)g(cases)f(where)g(the)h
-(Mapping)g(app)r(ears)f(appro)n(ximately)f(linear)h(on)h(large)e
-(scales,)j(but)f(has)427 1895 y(irregularities)27 b(\(e.g.)40
-b(holes\))28 b(on)g(smaller)g(scales.)39 b(A)29 b(v)-5
-b(alue)28 b(of,)h(sa)n(y)-7 b(,)28 b(50)g(to)g(100)g(pixels)g(can)g
-(also)g(b)r(e)h(em-)427 1995 y(plo)n(y)n(ed)23 b(as)f(a)h(safeguard)f
-(in)i(general-purp)r(ose)d(soft)n(w)n(are,)i(since)g(the)h(e\013ect)f
-(on)h(p)r(erformance)e(is)h(minimal.)427 2107 y(If)e(to)r(o)f(small)g
-(a)g(v)-5 b(alue)20 b(is)g(giv)n(en,)h(it)g(will)f(ha)n(v)n(e)f(the)i
-(e\013ect)g(of)f(inhibiting)h(linear)f(appro)n(ximation)e(altogether)
-427 2207 y(\(equiv)-5 b(alen)n(t)20 b(to)g(setting)g
-Ft(")p Fj(tol)p Ft(")f Fj(to)g(zero\).)34 b(Although)20
-b(this)g(ma)n(y)f(degrade)f(p)r(erformance,)j(accurate)d(results)427
-2306 y(will)28 b(still)g(b)r(e)g(obtained.)37 b(Not)27
-b(used)h(if)g Ft(")p Fj(in)p Ft(")f Fj(is)h(NULL.)259
-2431 y Fd(badv)-5 b(al)427 2530 y Fj(This)29 b(argumen)n(t)f(should)h
-(ha)n(v)n(e)e(the)j(same)e(t)n(yp)r(e)h(as)f(the)i(elemen)n(ts)e(of)h
-(the)g Ft(")p Fj(in)p Ft(")g Fj(arra)n(y)-7 b(.)38 b(It)29
-b(sp)r(eci\014es)g(the)427 2630 y(v)-5 b(alue)28 b(used)f(to)h(\015ag)f
-(missing)g(data)g(\(bad)h(pixels\))f(in)h(the)g(input)g(and)g(output)g
-(arra)n(ys.)427 2742 y(If)33 b(the)f(AST)p Ft(__)p Fj(USEBAD)g(\015ag)g
-(is)g(set)g(via)g(the)g Ft(")p Fj(\015ags)p Ft(")e Fj(parameter,)i
-(then)h(this)f(v)-5 b(alue)32 b(is)g(used)g(to)g(test)427
-2842 y(for)27 b(bad)h(pixels)f(in)h(the)g Ft(")p Fj(in)p
-Ft(")f Fj(\(and)h Ft(")p Fj(in)p Ft(_)p Fj(v)-5 b(ar)p
-Ft(")p Fj(\))26 b(arra)n(y\(s\).)427 2954 y(In)i(all)f(cases,)f(this)i
-(v)-5 b(alue)27 b(is)g(also)f(used)h(to)g(\015ag)g(an)n(y)f(output)i
-(elemen)n(ts)f(in)h(the)g Ft(")p Fj(out)p Ft(")e Fj(\(and)h
-Ft(")p Fj(out)p Ft(_)p Fj(v)-5 b(ar)p Ft(")p Fj(\))427
-3053 y(arra)n(y\(s\))34 b(for)i(whic)n(h)g(rebined)g(v)-5
-b(alues)36 b(could)g(not)h(b)r(e)f(obtained)g(\(see)g(the)h
-Ft(")p Fj(Propagation)c(of)j(Missing)427 3153 y(Data)p
-Ft(")27 b Fj(section)g(b)r(elo)n(w)h(for)f(details)g(of)h(the)g
-(circumstances)e(under)i(whic)n(h)f(this)h(ma)n(y)f(o)r(ccur\).)259
-3277 y Fd(ndim)p Ft(_)p Fd(out)427 3377 y Fj(The)38 b(n)n(um)n(b)r(er)f
-(of)g(dimensions)g(in)h(the)f(output)h(grid.)66 b(This)37
-b(should)g(b)r(e)h(at)f(least)g(one.)65 b(It)38 b(need)g(not)427
-3477 y(necessarily)26 b(b)r(e)i(equal)f(to)h(the)g(n)n(um)n(b)r(er)f
-(of)h(dimensions)f(in)h(the)g(input)g(grid.)259 3601
-y Fd(lbnd)p Ft(_)p Fd(out)427 3701 y Fj(P)n(oin)n(ter)d(to)i(an)f(arra)
-n(y)f(of)i(in)n(tegers,)e(with)j Ft(")p Fj(ndim)p Ft(_)p
-Fj(out)p Ft(")e Fj(elemen)n(ts,)g(con)n(taining)g(the)h(co)r(ordinates)
-f(of)g(the)427 3800 y(cen)n(tre)h(of)h(the)g(\014rst)f(pixel)h(in)g
-(the)g(output)g(grid)f(along)f(eac)n(h)h(dimension.)259
-3925 y Fd(ubnd)p Ft(_)p Fd(out)427 4024 y Fj(P)n(oin)n(ter)e(to)i(an)f
-(arra)n(y)f(of)i(in)n(tegers,)e(with)j Ft(")p Fj(ndim)p
-Ft(_)p Fj(out)p Ft(")e Fj(elemen)n(ts,)g(con)n(taining)g(the)h(co)r
-(ordinates)f(of)g(the)427 4124 y(cen)n(tre)h(of)h(the)g(last)f(pixel)h
-(in)g(the)g(output)g(grid)f(along)f(eac)n(h)h(dimension.)427
-4236 y(Note)e(that)g Ft(")p Fj(lbnd)p Ft(_)p Fj(out)p
-Ft(")f Fj(and)g Ft(")p Fj(ubnd)p Ft(_)p Fj(out)p Ft(")g
-Fj(together)g(de\014ne)h(the)g(shap)r(e,)g(size)g(and)f(co)r(ordinate)g
-(system)427 4336 y(of)32 b(the)f(output)h(grid)f(in)g(the)h(same)f(w)n
-(a)n(y)f(as)h Ft(")p Fj(lbnd)p Ft(_)p Fj(in)p Ft(")f
-Fj(and)i Ft(")p Fj(ubnd)p Ft(_)p Fj(in)p Ft(")e Fj(de\014ne)i(the)g
-(shap)r(e,)g(size)f(and)427 4435 y(co)r(ordinate)c(system)g(of)h(the)g
-(input)g(grid.)259 4560 y Fd(lbnd)427 4659 y Fj(P)n(oin)n(ter)h(to)i
-(an)f(arra)n(y)e(of)j(in)n(tegers,)f(with)h Ft(")p Fj(ndim)p
-Ft(_)p Fj(in)p Ft(")f Fj(elemen)n(ts,)h(con)n(taining)f(the)h(co)r
-(ordinates)e(of)h(the)427 4759 y(\014rst)d(pixel)f(in)h(the)g(region)e
-(of)h(the)h(input)h(grid)e(whic)n(h)g(is)g(to)h(b)r(e)g(included)g(in)g
-(the)f(rebined)h(output)g(arra)n(y)-7 b(.)427 4859 y(Not)28
-b(used)g(if)g Ft(")p Fj(in)p Ft(")f Fj(is)g(NULL.)259
-4983 y Fd(ubnd)427 5083 y Fj(P)n(oin)n(ter)i(to)i(an)f(arra)n(y)e(of)j
-(in)n(tegers,)f(with)h Ft(")p Fj(ndim)p Ft(_)p Fj(in)p
-Ft(")f Fj(elemen)n(ts,)h(con)n(taining)f(the)h(co)r(ordinates)e(of)h
-(the)427 5182 y(last)d(pixel)h(in)f(the)h(region)e(of)h(the)h(input)g
-(grid)e(whic)n(h)i(is)f(to)g(b)r(e)h(included)g(in)f(the)h(rebined)f
-(output)h(arra)n(y)-7 b(.)427 5295 y(Note)23 b(that)h
-Ft(")p Fj(lbnd)p Ft(")e Fj(and)h Ft(")p Fj(ubnd)p Ft(")g
-Fj(together)f(de\014ne)h(the)h(shap)r(e)f(and)f(p)r(osition)h(of)g(a)g
-(\(h)n(yp)r(er-\)rectangular)427 5394 y(region)c(of)i(the)f(input)h
-(grid)f(whic)n(h)g(is)g(to)h(b)r(e)f(included)h(in)g(the)f(rebined)h
-(output)f(arra)n(y)-7 b(.)33 b(This)20 b(region)f(should)427
-5494 y(lie)33 b(wholly)g(within)g(the)g(exten)n(t)g(of)g(the)g(input)h
-(grid)e(\(as)g(de\014ned)h(b)n(y)g(the)g Ft(")p Fj(lbnd)p
-Ft(_)p Fj(in)p Ft(")f Fj(and)h Ft(")p Fj(ubnd)p Ft(_)p
-Fj(in)p Ft(")427 5593 y Fj(arra)n(ys\).)h(Regions)25
-b(of)g(the)h(input)h(grid)e(lying)g(outside)h(this)g(region)e(will)i
-(not)f(b)r(e)h(used.)37 b(Not)25 b(used)h(if)g Ft(")p
-Fj(in)p Ft(")427 5693 y Fj(is)i(NULL.)p eop end
-%%Page: 317 327
-TeXDict begin 317 326 bop 3643 52 a FF(317)259 351 y
-Fd(out)427 451 y Fj(P)n(oin)n(ter)32 b(to)h(an)g(arra)n(y)-7
-b(,)33 b(with)h(one)f(elemen)n(t)g(for)g(eac)n(h)f(pixel)i(in)f(the)h
-(output)g(grid.)54 b(The)33 b(rebined)g(data)427 551
-y(v)-5 b(alues)25 b(will)h(b)r(e)g(added)f(in)n(to)h(the)g(original)e
-(con)n(ten)n(ts)g(of)i(this)g(arra)n(y)-7 b(.)34 b(The)25
-b(n)n(umerical)g(t)n(yp)r(e)h(of)f(this)h(arra)n(y)427
-650 y(should)d(matc)n(h)g(that)g(of)g(the)g Ft(")p Fj(in)p
-Ft(")g Fj(arra)n(y)-7 b(,)22 b(and)g(the)i(data)e(storage)f(order)h
-(should)h(b)r(e)g(suc)n(h)g(that)g(the)h(index)427 750
-y(of)31 b(the)h(\014rst)f(grid)f(dimension)h(v)-5 b(aries)30
-b(most)h(rapidly)g(and)g(that)g(of)g(the)h(\014nal)f(dimension)g(least)
-f(rapidly)427 849 y(\(i.e.)38 b(F)-7 b(ortran)26 b(arra)n(y)f(indexing)
-j(is)f(used\).)259 994 y Fd(out)p Ft(_)p Fd(v)-5 b(ar)427
-1094 y Fj(A)27 b(p)r(oin)n(ter)g(to)g(an)f(arra)n(y)f(with)i(the)g
-(same)g(t)n(yp)r(e)g(and)f(size)h(as)f(the)h Ft(")p Fj(out)p
-Ft(")f Fj(arra)n(y)-7 b(.)35 b(This)26 b(p)r(oin)n(ter)h(will)g(only)
-427 1193 y(b)r(e)22 b(used)g(if)g(the)g(AST)p Ft(__)p
-Fj(USEV)-9 b(AR)22 b(or)f(AST)p Ft(__)p Fj(GENV)-9 b(AR)22
-b(\015ag)f(is)g(set)h(in)g(whic)n(h)g(case)e(v)-5 b(ariance)21
-b(estimates)427 1293 y(for)29 b(the)g(rebined)f(data)h(v)-5
-b(alues)28 b(will)h(b)r(e)h(added)e(in)n(to)h(the)g(arra)n(y)-7
-b(.)38 b(If)30 b(neither)e(the)i(AST)p Ft(__)p Fj(USEV)-9
-b(AR)28 b(\015ag)427 1393 y(nor)e(the)i(AST)p Ft(__)p
-Fj(GENV)-9 b(AR)26 b(\015ag)g(is)h(set,)g(no)g(output)g(v)-5
-b(ariance)26 b(estimates)g(will)h(b)r(e)g(calculated)g(and)f(this)427
-1492 y(p)r(oin)n(ter)h(will)h(not)g(b)r(e)g(used.)37
-b(A)28 b(NULL)g(p)r(oin)n(ter)f(ma)n(y)g(then)h(b)r(e)g(supplied.)259
-1637 y Fd(w)m(eigh)m(ts)427 1737 y Fj(P)n(oin)n(ter)33
-b(to)g(an)h(arra)n(y)e(of)h(double,)j(with)e(one)g(or)f(t)n(w)n(o)g
-(elemen)n(ts)h(for)f(eac)n(h)g(pixel)h(in)g(the)h(output)f(grid,)427
-1836 y(dep)r(ending)k(on)f(whether)g(or)g(not)g(the)h(AST)p
-Ft(__)p Fj(GENV)-9 b(AR)37 b(\015ag)g(has)f(b)r(een)i(supplied)g(via)f
-(the)g Ft(")p Fj(\015ags)p Ft(")427 1936 y Fj(parameter.)d(If)23
-b(AST)p Ft(__)p Fj(GENV)-9 b(AR)22 b(has)g(not)g(b)r(een)h(sp)r
-(eci\014ed)f(then)h(the)g(arra)n(y)c(should)j(ha)n(v)n(e)g(one)f
-(elemen)n(t)427 2035 y(for)f(eac)n(h)f(output)h(pixel,)i(and)e(it)g
-(will)h(b)r(e)f(used)g(to)g(accum)n(ulate)f(the)h(w)n(eigh)n(t)g(asso)r
-(ciated)e(with)j(eac)n(h)e(output)427 2135 y(pixel.)35
-b(If)23 b(AST)p Ft(__)p Fj(GENV)-9 b(AR)22 b(has)g(b)r(een)g(sp)r
-(eci\014ed)h(then)f(the)h(arra)n(y)d(should)h(ha)n(v)n(e)g(t)n(w)n(o)h
-(elemen)n(ts)g(for)f(eac)n(h)427 2235 y(output)33 b(pixel.)51
-b(The)33 b(\014rst)f(half)h(of)f(the)h(arra)n(y)d(is)i(again)f(used)i
-(to)f(accum)n(ulate)f(the)i(w)n(eigh)n(t)f(asso)r(ciated)427
-2334 y(with)c(eac)n(h)f(output)i(pixel,)e(and)h(the)g(second)f(half)h
-(is)f(used)h(to)f(accum)n(ulate)g(the)h(square)f(of)g(the)h(w)n(eigh)n
-(ts.)427 2434 y(In)f(eac)n(h)f(half,)h(the)g(data)f(storage)f(order)g
-(should)i(b)r(e)g(suc)n(h)f(that)h(the)g(index)g(of)f(the)h(\014rst)g
-(grid)f(dimension)427 2534 y(v)-5 b(aries)27 b(most)g(rapidly)f(and)i
-(that)f(of)h(the)f(\014nal)h(dimension)f(least)g(rapidly)f(\(i.e.)38
-b(F)-7 b(ortran)26 b(arra)n(y)f(indexing)427 2633 y(is)j(used\).)259
-2778 y Fd(n)m(used)427 2878 y Fj(A)33 b(p)r(oin)n(ter)f(to)h(an)f(in)n
-(t)h(con)n(taining)e(the)i(n)n(um)n(b)r(er)f(of)h(input)g(data)f(v)-5
-b(alues)32 b(that)h(ha)n(v)n(e)f(b)r(een)g(added)h(in)n(to)427
-2977 y(the)f(output)g(arra)n(y)d(so)h(far.)47 b(The)32
-b(supplied)f(v)-5 b(alue)31 b(is)h(incremen)n(ted)f(on)g(exit)g(b)n(y)g
-(the)h(n)n(um)n(b)r(er)f(of)g(input)427 3077 y(v)-5 b(alues)26
-b(used.)36 b(The)26 b(v)-5 b(alue)26 b(is)f(initially)h(set)g(to)g
-(zero)f(if)h(the)g(AST)p Ft(__)p Fj(REBININIT)f(\015ag)g(is)h(set)g(in)
-g Ft(")p Fj(\015ags)p Ft(")p Fj(.)-2 3263 y Fd(Data)33
-b(T)m(yp)s(e)g(Co)s(des)n(:)227 3409 y Fj(T)-7 b(o)39
-b(select)g(the)h(appropriate)e(rebinning)h(function,)k(y)n(ou)38
-b(should)h(replace)g Fl(<)p Fj(X)p Fl(>)f Fj(in)i(the)g(generic)e
-(function)227 3508 y(name)24 b(astRebinSeq)p Fl(<)p Fj(X)p
-Fl(>)g Fj(with)g(a)g(1-)g(or)f(2-c)n(haracter)e(data)j(t)n(yp)r(e)g(co)
-r(de,)h(so)f(as)f(to)h(matc)n(h)g(the)h(n)n(umerical)e(t)n(yp)r(e)227
-3608 y Fl(<)p Fj(Xt)n(yp)r(e)p Fl(>)k Fj(of)h(the)g(data)f(y)n(ou)g
-(are)g(pro)r(cessing,)f(as)h(follo)n(ws:)340 3768 y Fi(\017)45
-b Fj(D:)28 b(double)340 3913 y Fi(\017)45 b Fj(F:)28
-b(\015oat)340 4058 y Fi(\017)45 b Fj(I:)28 b(in)n(t)227
-4243 y(F)-7 b(or)25 b(example,)g(astRebinSeqD)g(w)n(ould)f(b)r(e)i
-(used)e(to)h(pro)r(cess)f Ft(")p Fj(double)p Ft(")g Fj(data,)h(while)g
-(astRebinSeqI)g(w)n(ould)f(b)r(e)227 4343 y(used)k(to)f(pro)r(cess)g
-Ft(")p Fj(in)n(t)p Ft(")g Fj(data,)g(etc.)227 4479 y(Note)33
-b(that,)h(unlik)n(e)f(astResample)p Fl(<)p Fj(X)p Fl(>)p
-Fj(,)g(the)g(astRebinSeq)p Fl(<)p Fj(X)p Fl(>)f Fj(set)g(of)h
-(functions)g(do)r(es)g(not)f(y)n(et)h(supp)r(ort)227
-4579 y(unsigned)28 b(in)n(teger)e(data)h(t)n(yp)r(es)h(or)f(in)n
-(tegers)f(of)i(di\013eren)n(t)f(sizes.)-2 4752 y Fd(Con)m(trol)32
-b(Flags)n(:)227 4898 y Fj(The)h(follo)n(wing)e(\015ags)h(are)g
-(de\014ned)h(in)f(the)h Ft(")p Fj(ast.h)p Ft(")f Fj(header)g(\014le)g
-(and)h(ma)n(y)f(b)r(e)h(used)f(to)h(pro)n(vide)e(additional)227
-4998 y(con)n(trol)g(o)n(v)n(er)g(the)i(rebinning)e(pro)r(cess.)50
-b(Ha)n(ving)32 b(selected)g(a)g(set)g(of)g(\015ags,)h(y)n(ou)f(should)g
-(supply)g(the)h(bit)n(wise)227 5097 y(OR)28 b(of)f(their)h(v)-5
-b(alues)27 b(via)g(the)h Ft(")p Fj(\015ags)p Ft(")e Fj(parameter:)340
-5394 y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(REBININIT:)28
-b(Used)g(to)f(mark)g(the)i(\014rst)e(call)h(in)g(a)g(sequence.)37
-b(It)28 b(indicates)g(that)g(the)g(supplied)427 5494
-y Ft(")p Fj(out)p Ft(")p Fj(,)40 b Ft(")p Fj(out)p Ft(_)p
-Fj(v)-5 b(ar)p Ft(")35 b Fj(and)j Ft(")p Fj(w)n(eigh)n(ts)p
-Ft(")e Fj(arra)n(ys)f(should)i(b)r(e)i(\014lled)f(with)g(zeros)e(\(th)n
-(us)i(o)n(v)n(er-writing)d(an)n(y)427 5593 y(supplied)30
-b(v)-5 b(alues\))30 b(b)r(efore)f(adding)g(the)h(rebinned)f(input)i
-(data)e(in)n(to)g(them.)43 b(This)30 b(\015ag)e(should)i(b)r(e)g(used)
-427 5693 y(when)e(rebinning)f(the)h(\014rst)g(input)g(arra)n(y)d(in)j
-(a)f(sequence.)p eop end
-%%Page: 318 328
-TeXDict begin 318 327 bop 0 52 a FF(318)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(AST)p Ft(__)p Fj(REBINEND:)34 b(Used)h(to)g(mark)f(the)h(last)f
-(call)g(in)h(a)g(sequence.)57 b(It)35 b(causes)f(eac)n(h)g(v)-5
-b(alue)34 b(in)h(the)427 451 y Ft(")p Fj(out)p Ft(")c
-Fj(and)h Ft(")p Fj(out)p Ft(_)p Fj(v)-5 b(ar)p Ft(")30
-b Fj(arra)n(ys)g(to)i(b)r(e)g(divided)g(b)n(y)g(a)g(normalisation)e
-(factor)h(b)r(efore)h(b)r(eing)g(returned.)427 551 y(The)38
-b(normalisation)d(factor)h(for)h(eac)n(h)g(output)g(data)g(v)-5
-b(alue)37 b(is)g(just)h(the)g(corresp)r(onding)d(v)-5
-b(alue)37 b(from)427 650 y(the)32 b(w)n(eigh)n(ts)e(arra)n(y)-7
-b(.)46 b(The)32 b(normalisation)d(factor)i(for)g(eac)n(h)f(output)i(v)
--5 b(ariance)30 b(v)-5 b(alue)32 b(is)f(the)h(square)e(of)427
-750 y(the)k(data)e(v)-5 b(alue)33 b(normalisation)e(factor.)53
-b(It)33 b(also)f(causes)g(output)h(data)g(v)-5 b(alues)33
-b(to)f(b)r(e)i(set)f(bad)g(if)g(the)427 849 y(corresp)r(onding)22
-b(w)n(eigh)n(t)i(is)g(less)f(than)i(the)f(v)-5 b(alue)24
-b(supplied)g(for)g(parameter)f Ft(")p Fj(wlim)p Ft(")p
-Fj(.)35 b(It)24 b(also)f(causes)g(an)n(y)427 949 y(temp)r(orary)i(v)-5
-b(alues)25 b(stored)f(in)i(the)g(output)g(v)-5 b(ariance)25
-b(arra)n(y)e(\(see)i(\015ag)g(AST)p Ft(__)p Fj(GENV)-9
-b(AR)25 b(b)r(elo)n(w\))h(to)f(b)r(e)427 1049 y(con)n(v)n(erted)h(in)n
-(to)i(usable)f(v)-5 b(ariance)26 b(v)-5 b(alues.)340
-1173 y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(USEBAD:)33 b(Indicates)g(that)h
-(there)f(ma)n(y)f(b)r(e)i(bad)f(pixels)f(in)i(the)f(input)h(arra)n
-(y\(s\))d(whic)n(h)i(m)n(ust)427 1273 y(b)r(e)27 b(recognised)f(b)n(y)g
-(comparing)g(with)h(the)g(v)-5 b(alue)27 b(giv)n(en)f(for)g
-Ft(")p Fj(badv)-5 b(al)p Ft(")26 b Fj(and)g(propagated)f(to)i(the)g
-(output)427 1373 y(arra)n(y\(s\).)35 b(If)26 b(this)h(\015ag)e(is)h
-(not)g(set,)h(all)f(input)h(v)-5 b(alues)26 b(are)f(treated)h
-(literally)f(and)h(the)h Ft(")p Fj(badv)-5 b(al)p Ft(")25
-b Fj(v)-5 b(alue)26 b(is)427 1472 y(only)h(used)h(for)f(\015agging)f
-(output)i(arra)n(y)d(v)-5 b(alues.)340 1597 y Fi(\017)45
-b Fj(AST)p Ft(__)p Fj(USEV)-9 b(AR:)36 b(Indicates)g(that)g(output)h(v)
--5 b(ariance)35 b(estimates)h(should)f(b)r(e)i(created)e(b)n(y)h
-(rebinning)427 1696 y(the)g(supplied)f(input)h(v)-5 b(ariance)33
-b(estimates.)59 b(An)35 b(error)e(will)j(b)r(e)f(rep)r(orted)f(if)i(b)r
-(oth)f(this)g(\015ag)f(and)h(the)427 1796 y(AST)p Ft(__)p
-Fj(GENV)-9 b(AR)28 b(\015ag)f(are)f(supplied.)340 1921
-y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(GENV)-9 b(AR:)33 b(Indicates)g(that)
-h(output)f(v)-5 b(ariance)32 b(estimates)h(should)g(b)r(e)g(created)g
-(based)f(on)h(the)427 2020 y(spread)19 b(of)h(input)h(data)e(v)-5
-b(alues)19 b(con)n(tributing)h(to)f(eac)n(h)g(output)i(pixel.)34
-b(An)20 b(error)e(will)i(b)r(e)h(rep)r(orted)e(if)h(b)r(oth)427
-2120 y(this)29 b(\015ag)e(and)h(the)h(AST)p Ft(__)p Fj(USEV)-9
-b(AR)28 b(\015ag)f(are)g(supplied.)39 b(If)29 b(the)g(AST)p
-Ft(__)p Fj(GENV)-9 b(AR)28 b(\015ag)f(is)h(sp)r(eci\014ed,)427
-2220 y(the)e(supplied)g(output)h(v)-5 b(ariance)24 b(arra)n(y)g(is)h
-(\014rst)h(used)f(as)g(a)h(w)n(ork)e(arra)n(y)f(to)j(accum)n(ulate)f
-(the)h(temp)r(orary)427 2319 y(v)-5 b(alues)33 b(needed)h(to)f
-(generate)g(the)h(output)g(v)-5 b(ariances.)53 b(When)34
-b(the)g(sequence)f(ends)g(\(as)g(indicated)h(b)n(y)427
-2419 y(the)h(AST)p Ft(__)p Fj(REBINEND)f(\015ag\),)i(the)f(con)n(ten)n
-(ts)f(of)g(the)h(output)g(v)-5 b(ariance)33 b(arra)n(y)f(are)i(con)n(v)
-n(erted)f(in)n(to)427 2519 y(the)f(required)d(v)-5 b(ariance)30
-b(estimates.)47 b(If)31 b(the)g(generation)f(of)g(suc)n(h)h(output)g(v)
--5 b(ariances)30 b(is)h(required,)f(this)427 2618 y(\015ag)d(should)g
-(b)r(e)h(used)g(on)f(ev)n(ery)f(in)n(v)n(o)r(cation)g(of)i(this)g
-(function)g(within)g(a)f(sequence,)g(and)h(an)n(y)e(supplied)427
-2718 y(input)f(v)-5 b(ariances)23 b(will)i(ha)n(v)n(e)e(no)g(e\013ect)i
-(on)f(the)h(output)f(v)-5 b(ariances)23 b(\(although)h(input)h(v)-5
-b(ariances)23 b(will)h(still)427 2817 y(b)r(e)k(used)g(to)f(w)n(eigh)n
-(t)g(the)h(input)h(data)e(if)h(the)g(AST)p Ft(__)p Fj(V)-9
-b(AR)g(W)n(GT)27 b(\015ag)g(is)h(also)e(supplied\).)340
-2942 y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(V)-9 b(AR)g(W)n(GT:)29
-b(Indicates)f(that)h(the)g(input)g(data)f(should)h(b)r(e)g(w)n(eigh)n
-(ted)f(b)n(y)g(the)h(recipro)r(cal)e(of)h(the)427 3042
-y(input)e(v)-5 b(ariances.)35 b(Otherwise,)25 b(all)g(input)h(data)f
-(are)g(giv)n(en)f(equal)h(w)n(eigh)n(t.)36 b(If)25 b(this)h(\015ag)f
-(is)g(sp)r(eci\014ed,)h(the)427 3141 y(calculation)e(of)h(the)g(output)
-g(v)-5 b(ariances)23 b(\(if)i(an)n(y\))g(is)f(mo)r(di\014ed)h(to)g(tak)
-n(e)f(accoun)n(t)f(of)i(the)g(v)-5 b(arying)24 b(w)n(eigh)n(ts)427
-3241 y(assigned)j(to)g(the)h(input)h(data)e(v)-5 b(alues.)-2
-3395 y Fd(Propagation)33 b(of)e(Missing)f(Data)n(:)227
-3541 y Fj(Instances)40 b(of)h(missing)f(data)g(\(bad)h(pixels\))g(in)f
-(the)h(output)h(grid)e(are)f(iden)n(ti\014ed)i(b)n(y)g(o)r(ccurrences)e
-(of)h(the)227 3640 y Ft(")p Fj(badv)-5 b(al)p Ft(")38
-b Fj(v)-5 b(alue)39 b(in)g(the)g Ft(")p Fj(out)p Ft(")f
-Fj(arra)n(y)-7 b(.)68 b(These)38 b(are)g(only)h(pro)r(duced)f(if)h(the)
-g(AST)p Ft(__)p Fj(REBINEND)g(\015ag)f(is)227 3740 y(sp)r(eci\014ed)28
-b(and)g(a)f(pixel)g(has)g(zero)g(w)n(eigh)n(t.)227 3861
-y(An)d(input)g(pixel)f(is)f(considered)g(bad)h(\(and)g(is)g(consequen)n
-(tly)f(ignored\))g(if)i(its)f(data)g(v)-5 b(alue)23 b(is)f(equal)h(to)g
-Ft(")p Fj(badv)-5 b(al)p Ft(")227 3960 y Fj(and)28 b(the)g(AST)p
-Ft(__)p Fj(USEBAD)f(\015ag)g(is)h(set)f(via)g(the)h Ft(")p
-Fj(\015ags)p Ft(")e Fj(parameter.)227 4081 y(In)j(addition,)f(asso)r
-(ciated)f(output)i(v)-5 b(ariance)27 b(estimates)h(\(if)i(calculated\))
-e(ma)n(y)f(b)r(e)i(declared)e(bad)i(and)f(\015agged)227
-4180 y(with)g(the)g Ft(")p Fj(badv)-5 b(al)p Ft(")27
-b Fj(v)-5 b(alue)27 b(in)h(the)g Ft(")p Fj(out)p Ft(_)p
-Fj(v)-5 b(ar)p Ft(")26 b Fj(arra)n(y)f(for)i(similar)g(reasons.)p
-0 4363 3780 12 v 0 4494 a Fz(astRemapF)-11 b(rame)1121
-4495 y Fe(Mo)s(dify)38 b(a)h(F)-10 b(rame's)38 b(relationship)1104
-4609 y(to)g(other)g(F)-10 b(rames)38 b(in)h(a)f(F)-10
-b(rameSet)2828 4494 y Fz(astRemapF)f(rame)0 4763 y Fd(Description:)44
-b Fj(This)36 b(function)h(mo)r(di\014es)f(the)g(relationship)f(\(i.e.)
-63 b(Mapping\))36 b(b)r(et)n(w)n(een)g(a)f(sp)r(eci\014ed)h(F)-7
-b(rame)36 b(in)g(a)227 4863 y(F)-7 b(rameSet)28 b(and)f(the)h(other)f
-(F)-7 b(rames)27 b(in)h(that)g(F)-7 b(rameSet.)227 4983
-y(T)n(ypically)g(,)31 b(this)f(migh)n(t)g(b)r(e)h(required)f(if)g(the)h
-(F)-7 b(rameSet)30 b(has)g(b)r(een)h(used)f(to)g(calibrate)g(\(sa)n
-(y\))f(an)h(image,)h(and)227 5083 y(that)h(image)e(is)h(re-binned.)48
-b(The)31 b(F)-7 b(rame)30 b(describing)h(the)g(image)g(will)g(then)h
-(ha)n(v)n(e)e(undergone)g(a)h(co)r(ordinate)227 5183
-y(transformation,)26 b(and)i(this)g(should)f(b)r(e)h(comm)n(unicated)f
-(to)h(the)g(asso)r(ciated)e(F)-7 b(rameSet)27 b(using)g(this)h
-(function.)0 5324 y Fd(Synopsis:)121 b Ft(void)42 b(astRemapFrame\()c
-(AstFrameSet)h Fi(\003)p Ft(this,)i(int)h(iframe,)f(AstMapping)e
-Fi(\003)p Ft(map)j(\))0 5465 y Fd(P)m(arameters:)259
-5593 y(this)427 5693 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rameSet.)p eop end
-%%Page: 319 329
-TeXDict begin 319 328 bop 3643 52 a FF(319)259 351 y
-Fd(iframe)427 451 y Fj(The)34 b(index)h(within)g(the)f(F)-7
-b(rameSet)34 b(of)g(the)h(F)-7 b(rame)33 b(to)h(b)r(e)h(mo)r(di\014ed.)
-57 b(This)34 b(v)-5 b(alue)34 b(should)g(lie)g(in)g(the)427
-551 y(range)27 b(from)g(1)g(to)g(the)h(n)n(um)n(b)r(er)g(of)f(F)-7
-b(rames)27 b(in)h(the)g(F)-7 b(rameSet)27 b(\(as)h(giv)n(en)e(b)n(y)i
-(its)f(Nframe)h(attribute\).)259 667 y Fd(map)427 766
-y Fj(P)n(oin)n(ter)38 b(to)i(a)f(Mapping)g(whose)g(forw)n(ard)f
-(transformation)g(con)n(v)n(erts)g(co)r(ordinate)h(v)-5
-b(alues)39 b(from)g(the)427 866 y(original)27 b(co)r(ordinate)f(system)
-i(describ)r(ed)f(b)n(y)h(the)g(F)-7 b(rame)27 b(to)h(the)g(new)g(one,)g
-(and)f(whose)g(in)n(v)n(erse)g(trans-)427 966 y(formation)g(con)n(v)n
-(erts)f(in)i(the)g(opp)r(osite)f(direction.)0 1111 y
-Fd(Notes:)340 1377 y Fi(\017)45 b Fj(A)32 b(v)-5 b(alue)30
-b(of)h(AST)p Ft(__)p Fj(BASE)g(or)f(AST)p Ft(__)p Fj(CURRENT)h(ma)n(y)f
-(b)r(e)h(giv)n(en)g(for)f(the)h Ft(")p Fj(iframe)p Ft(")f
-Fj(parameter)g(to)427 1477 y(sp)r(ecify)e(the)g(base)f(F)-7
-b(rame)27 b(or)g(the)h(curren)n(t)f(F)-7 b(rame)27 b(resp)r(ectiv)n
-(ely)-7 b(.)340 1593 y Fi(\017)45 b Fj(The)29 b(relationship)e(b)r(et)n
-(w)n(een)h(the)h(selected)f(F)-7 b(rame)28 b(and)g(an)n(y)g(other)g(F)
--7 b(rame)28 b(within)h(the)f(F)-7 b(rameSet)28 b(will)427
-1693 y(b)r(e)h(mo)r(di\014ed)f(b)n(y)f(this)i(function,)f(but)h(the)f
-(relationship)f(b)r(et)n(w)n(een)h(all)f(other)g(F)-7
-b(rames)27 b(in)i(the)f(F)-7 b(rameSet)427 1792 y(remains)27
-b(unc)n(hanged.)340 1908 y Fi(\017)45 b Fj(The)27 b(n)n(um)n(b)r(er)g
-(of)g(input)h(co)r(ordinate)e(v)-5 b(alues)27 b(accepted)g(b)n(y)f(the)
-i(Mapping)f(\(its)g(Nin)h(attribute\))f(and)g(the)427
-2008 y(n)n(um)n(b)r(er)j(of)g(output)g(co)r(ordinate)f(v)-5
-b(alues)30 b(generated)f(\(its)h(Nout)g(attribute\))h(m)n(ust)f(b)r(e)g
-(equal)g(and)f(m)n(ust)427 2108 y(matc)n(h)f(the)g(n)n(um)n(b)r(er)f
-(of)h(axes)e(in)i(the)g(F)-7 b(rame)27 b(b)r(eing)h(mo)r(di\014ed.)340
-2224 y Fi(\017)45 b Fj(If)33 b(a)g(simple)f(c)n(hange)g(of)h(axis)e
-(order)h(is)g(required,)h(then)g(the)h(astP)n(ermAxes)c(function)k(ma)n
-(y)e(pro)n(vide)f(a)427 2324 y(more)c(straigh)n(tforw)n(ard)e(metho)r
-(d)j(of)f(making)g(the)h(required)f(c)n(hanges)f(to)h(the)h(F)-7
-b(rameSet.)340 2440 y Fi(\017)45 b Fj(This)32 b(function)g(cannot)f(b)r
-(e)g(used)h(to)f(c)n(hange)f(the)i(n)n(um)n(b)r(er)f(of)h(F)-7
-b(rame)30 b(axes.)48 b(T)-7 b(o)31 b(ac)n(hiev)n(e)f(this,)j(a)e(new)
-427 2540 y(F)-7 b(rame)29 b(m)n(ust)h(b)r(e)g(added)g(to)f(the)h(F)-7
-b(rameSet)29 b(\(astAddF)-7 b(rame\))30 b(and)g(the)g(original)e(one)h
-(remo)n(v)n(ed)f(if)i(nec-)427 2639 y(essary)c(\(astRemo)n(v)n(eF)-7
-b(rame\).)p 0 2805 3780 12 v 0 2936 a Fz(astRemo)l(v)l(eF)c(rame)1274
-2937 y Fe(Remo)m(v)m(e)37 b(a)i(F)-10 b(rame)38 b(from)f(a)1648
-3037 y(F)-10 b(rameSet)2776 2936 y Fz(astRemo)l(v)l(eF)f(rame)0
-3169 y Fd(Description:)44 b Fj(This)27 b(function)g(remo)n(v)n(es)e(a)i
-(F)-7 b(rame)26 b(from)g(a)g(F)-7 b(rameSet.)37 b(All)27
-b(other)f(F)-7 b(rames)26 b(in)h(the)g(F)-7 b(rameSet)27
-b(ha)n(v)n(e)227 3269 y(their)h(indices)f(re-n)n(um)n(b)r(ered)g(from)g
-(one)g(\(if)i(necessary\),)d(but)i(are)f(otherwise)f(unc)n(hanged.)0
-3402 y Fd(Synopsis:)121 b Ft(void)42 b(astRemoveFrame\()37
-b(AstFrameSet)i Fi(\003)p Ft(this,)i(int)i(iframe)e(\))0
-3535 y Fd(P)m(arameters:)259 3655 y(this)427 3754 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rameSet.)259 3870 y Fd(iframe)427
-3970 y Fj(The)35 b(index)g(within)g(the)g(F)-7 b(rameSet)34
-b(of)h(the)g(F)-7 b(rame)34 b(to)h(b)r(e)g(remo)n(v)n(ed.)56
-b(This)35 b(v)-5 b(alue)34 b(should)h(lie)f(in)h(the)427
-4070 y(range)27 b(from)g(1)g(to)g(the)h(n)n(um)n(b)r(er)g(of)f(F)-7
-b(rames)27 b(in)h(the)g(F)-7 b(rameSet)27 b(\(as)h(giv)n(en)e(b)n(y)i
-(its)f(Nframe)h(attribute\).)0 4215 y Fd(Notes:)340 4481
-y Fi(\017)45 b Fj(Remo)n(ving)31 b(a)g(F)-7 b(rame)31
-b(from)g(a)g(F)-7 b(rameSet)32 b(do)r(es)f(not)h(a\013ect)f(the)h
-(relationship)f(b)r(et)n(w)n(een)g(other)g(F)-7 b(rames)427
-4581 y(in)28 b(the)g(F)-7 b(rameSet,)28 b(ev)n(en)f(if)h(they)g
-(originally)d(dep)r(ended)k(on)e(the)h(F)-7 b(rame)27
-b(b)r(eing)h(remo)n(v)n(ed.)340 4697 y Fi(\017)45 b Fj(The)31
-b(n)n(um)n(b)r(er)g(of)g(F)-7 b(rames)30 b(in)i(a)e(F)-7
-b(rameSet)31 b(cannot)g(b)r(e)g(reduced)g(to)g(zero.)46
-b(An)31 b(error)e(will)j(result)e(if)i(an)427 4797 y(attempt)d(is)e
-(made)g(to)h(remo)n(v)n(e)e(the)i(only)f(remaining)g(F)-7
-b(rame.)340 4913 y Fi(\017)45 b Fj(A)32 b(v)-5 b(alue)30
-b(of)h(AST)p Ft(__)p Fj(BASE)g(or)f(AST)p Ft(__)p Fj(CURRENT)h(ma)n(y)f
-(b)r(e)h(giv)n(en)g(for)f(the)h Ft(")p Fj(iframe)p Ft(")f
-Fj(parameter)g(to)427 5012 y(sp)r(ecify)e(the)g(base)f(F)-7
-b(rame)27 b(or)g(the)h(curren)n(t)f(F)-7 b(rame)27 b(resp)r(ectiv)n
-(ely)-7 b(.)340 5129 y Fi(\017)45 b Fj(If)22 b(a)f(F)-7
-b(rameSet's)21 b(base)f(or)h(curren)n(t)f(F)-7 b(rame)21
-b(is)g(remo)n(v)n(ed,)g(the)g(Base)g(or)f(Curren)n(t)h(attribute)g
-(\(resp)r(ectiv)n(ely\))427 5228 y(of)30 b(the)g(F)-7
-b(rameSet)30 b(will)g(ha)n(v)n(e)f(its)h(v)-5 b(alue)30
-b(cleared,)f(so)g(that)i(another)d(F)-7 b(rame)30 b(will)g(then)g
-(assume)f(its)i(role)427 5328 y(b)n(y)d(default.)340
-5444 y Fi(\017)45 b Fj(If)26 b(an)n(y)f(other)g(F)-7
-b(rame)25 b(is)g(remo)n(v)n(ed,)f(the)i(base)f(and)g(curren)n(t)g(F)-7
-b(rames)24 b(will)i(remain)f(the)h(same.)35 b(T)-7 b(o)25
-b(ensure)427 5544 y(this,)37 b(the)d(Base)g(and/or)e(Curren)n(t)i
-(attributes)g(of)g(the)h(F)-7 b(rameSet)34 b(will)h(b)r(e)f(c)n
-(hanged,)i(if)e(necessary)-7 b(,)35 b(to)427 5644 y(re\015ect)28
-b(an)n(y)e(c)n(hange)h(in)h(the)g(indices)f(of)h(these)f(F)-7
-b(rames.)p eop end
-%%Page: 320 330
-TeXDict begin 320 329 bop 0 52 a FF(320)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astRemo)l(v)l(eRegions)1359 482 y Fe(Remo)m(v)m(e)38
-b(an)m(y)g(Regions)1477 596 y(from)f(a)i(Mapping)2682
-483 y Fz(astRemo)l(v)l(eRegions)0 792 y Fd(Description:)44
-b Fj(This)33 b(function)g(searc)n(hes)e(the)i(suppliedMapping)g(\(whic)
-n(h)g(ma)n(y)f(b)r(e)h(a)f(comp)r(ound)h(Mapping)f(suc)n(h)227
-891 y(as)d(a)g(CmpMap\))g(for)g(an)n(y)f(comp)r(onen)n(t)h(Mappings)g
-(that)g(are)f(instances)h(of)g(the)h(AST)f(Region)g(class.)41
-b(It)29 b(then)227 991 y(creates)f(a)h(new)g(Mapping)f(from)h(whic)n(h)
-g(all)f(Regions)g(ha)n(v)n(e)g(b)r(een)h(remo)n(v)n(ed.)40
-b(If)29 b(a)f(Region)h(cannot)f(simply)h(b)r(e)227 1091
-y(remo)n(v)n(ed)34 b(\(for)i(instance,)h(if)f(it)g(is)f(a)g(comp)r
-(onen)n(t)h(of)f(a)g(parallel)g(CmpMap\),)j(then)e(it)g(is)f(replaced)g
-(with)h(an)227 1190 y(equiv)-5 b(alen)n(t)28 b(UnitMap)g(in)g(the)g
-(returned)f(Mapping.)0 1342 y Fd(Synopsis:)121 b Ft(AstMapping)39
-b Fi(\003)p Ft(astRemoveRegions)o(\()e(AstMapping)j Fi(\003)p
-Ft(this)h(\))0 1494 y Fd(P)m(arameters:)259 1632 y(this)427
-1732 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(original)e(Mapping.)0
-1896 y Fd(Class)31 b(Applicabilit)m(y:)259 2035 y(CmpF)-8
-b(rame)427 2134 y Fj(If)35 b(the)f(supplied)g(Mapping)g(is)g(a)f(CmpF)
--7 b(rame,)36 b(an)n(y)d(comp)r(onen)n(t)g(F)-7 b(rames)34
-b(that)g(are)f(instances)g(of)h(the)427 2234 y(Region)27
-b(class)g(are)f(replaced)h(b)n(y)g(the)h(equiv)-5 b(alen)n(t)28
-b(F)-7 b(rame.)259 2368 y Fd(F)f(rameSet)427 2467 y Fj(If)29
-b(the)f(supplied)g(Mapping)g(is)f(a)h(F)-7 b(rameSet,)28
-b(the)g(returned)g(Mapping)f(will)h(b)r(e)h(a)e(cop)n(y)g(of)h(the)g
-(supplied)427 2567 y(F)-7 b(rameSet)29 b(in)g(whic)n(h)g(Regions)f(ha)n
-(v)n(e)g(b)r(een)i(remo)n(v)n(ed)d(from)i(all)g(the)g(in)n(ter-F)-7
-b(rame)28 b(Mappings,)h(and)f(an)n(y)427 2667 y(F)-7
-b(rames)27 b(whic)n(h)h(are)e(instances)h(of)h(the)g(Region)f(class)f
-(are)h(repalced)g(b)n(y)g(the)h(equiv)-5 b(alen)n(t)27
-b(F)-7 b(rame.)259 2801 y Fd(Mapping)427 2900 y Fj(This)28
-b(function)g(applies)f(to)h(all)f(Mappings.)259 3034
-y Fd(Region)427 3134 y Fj(If)h(the)g(supplied)g(Mapping)f(is)h(a)f
-(Region,)g(the)h(returned)f(Mapping)g(will)h(b)r(e)g(the)g(equiv)-5
-b(alen)n(t)28 b(F)-7 b(rame.)0 3298 y Fd(Returned)32
-b(V)-8 b(alue:)259 3436 y(astRemo)m(v)m(eRegions\(\))427
-3536 y Fj(A)28 b(new)g(p)r(oin)n(ter)f(to)h(the)g(\(p)r(ossibly)f(mo)r
-(di\014ed\))h(Mapping.)0 3700 y Fd(Notes:)340 3985 y
-Fi(\017)45 b Fj(This)22 b(function)f(can)g(safely)g(b)r(e)h(applied)f
-(ev)n(en)g(to)g(Mappings)f(whic)n(h)i(con)n(tain)e(no)h(Regions.)34
-b(If)22 b(no)f(Regions)427 4084 y(are)27 b(found,)h(it)g(b)r(eha)n(v)n
-(es)e(exactly)h(lik)n(e)h(astClone)e(and)i(returns)f(a)g(p)r(oin)n(ter)
-g(to)g(the)h(original)f(Mapping.)340 4218 y Fi(\017)45
-b Fj(The)26 b(Mapping)f(returned)g(b)n(y)g(this)h(function)g(ma)n(y)e
-(not)i(b)r(e)g(indep)r(enden)n(t)g(of)f(the)h(original)e(\(ev)n(en)h
-(if)h(some)427 4318 y(Regions)f(w)n(ere)h(remo)n(v)n(ed\),)f(and)h(mo)r
-(difying)g(it)h(ma)n(y)e(therefore)h(result)f(in)i(indirect)f(mo)r
-(di\014cation)g(of)g(the)427 4418 y(original.)34 b(If)22
-b(a)g(completely)g(indep)r(enden)n(t)g(result)g(is)g(required,)g(a)g
-(cop)n(y)f(should)h(b)r(e)g(made)g(using)g(astCop)n(y)-7
-b(.)340 4552 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 4651 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 4853 V 0 4984 a Fz(astResample)p
-Fc(<)p Fz(X)p Fc(>)154 b Fe(Resample)38 b(a)g(region)f(of)i(a)f(data)
-1789 5099 y(grid)2759 4984 y Fz(astResample)p Fc(<)p
-Fz(X)p Fc(>)0 5295 y Fd(Description:)44 b Fj(This)31
-b(is)g(a)f(set)h(of)g(functions)g(for)f(resampling)g(gridded)g(data)h
-(\(e.g.)46 b(an)31 b(image\))f(under)h(the)g(con)n(trol)227
-5394 y(of)c(a)e(geometrical)g(transformation,)g(whic)n(h)h(is)g(sp)r
-(eci\014ed)h(b)n(y)f(a)g(Mapping.)36 b(The)26 b(functions)h(op)r(erate)
-e(on)h(a)g(pair)227 5494 y(of)i(data)f(grids)f(\(input)j(and)f
-(output\),)g(eac)n(h)f(of)g(whic)n(h)h(ma)n(y)f(ha)n(v)n(e)f(an)n(y)h
-(n)n(um)n(b)r(er)g(of)h(dimensions.)36 b(Resampling)227
-5593 y(ma)n(y)c(b)r(e)g(restricted)g(to)g(a)g(sp)r(eci\014ed)h(region)d
-(of)j(the)f(output)h(grid.)50 b(An)33 b(asso)r(ciated)e(grid)g(of)i
-(error)d(estimates)227 5693 y(asso)r(ciated)36 b(with)h(the)g(input)h
-(data)e(ma)n(y)g(also)g(b)r(e)h(supplied)g(\(in)g(the)h(form)e(of)h(v)
--5 b(ariance)35 b(v)-5 b(alues\),)39 b(so)e(as)f(to)p
-eop end
-%%Page: 321 331
-TeXDict begin 321 330 bop 3643 52 a FF(321)227 351 y
-Fj(pro)r(duce)29 b(error)f(estimates)h(for)g(the)h(resampled)e(output)i
-(data.)42 b(Propagation)27 b(of)i(missing)g(data)g(\(bad)h(pixels\))227
-451 y(is)e(supp)r(orted.)227 572 y(Y)-7 b(ou)41 b(should)g(use)f(a)g
-(resampling)g(function)h(whic)n(h)g(matc)n(hes)f(the)h(n)n(umerical)f
-(t)n(yp)r(e)h(of)f(the)h(data)g(y)n(ou)f(are)227 672
-y(pro)r(cessing)24 b(b)n(y)i(replacing)e Fl(<)p Fj(X)p
-Fl(>)h Fj(in)h(the)g(generic)e(function)i(name)g(astResample)p
-Fl(<)p Fj(X)p Fl(>)e Fj(b)n(y)h(an)h(appropriate)d(1-)227
-771 y(or)f(2-c)n(haracter)d(t)n(yp)r(e)j(co)r(de.)35
-b(F)-7 b(or)22 b(example,)h(if)f(y)n(ou)g(are)f(resampling)g(data)g
-(with)i(t)n(yp)r(e)f Ft(")p Fj(\015oat)p Ft(")p Fj(,)g(y)n(ou)g(should)
-g(use)227 871 y(the)33 b(function)f(astResampleF)f(\(see)h(the)h
-Ft(")p Fj(Data)e(T)n(yp)r(e)h(Co)r(des)p Ft(")f Fj(section)g(b)r(elo)n
-(w)h(for)f(the)i(co)r(des)e(appropriate)227 971 y(to)d(other)f(n)n
-(umerical)g(t)n(yp)r(es\).)227 1092 y(Resampling)e(of)h(the)f(grid)g
-(of)h(input)g(data)f(is)g(p)r(erformed)g(b)n(y)h(transforming)e(the)h
-(co)r(ordinates)f(of)i(the)g(cen)n(tre)f(of)227 1192
-y(eac)n(h)d(output)g(grid)g(elemen)n(t)g(\(or)g(pixel\))g(in)n(to)g
-(the)h(co)r(ordinate)e(system)h(of)g(the)h(input)g(grid.)34
-b(Since)23 b(the)f(resulting)227 1291 y(co)r(ordinates)27
-b(will)h(not,)g(in)g(general,)f(coincide)h(with)g(the)h(cen)n(tre)e(of)
-h(an)g(input)h(pixel,)f(sub-pixel)f(in)n(terp)r(olation)227
-1391 y(is)35 b(p)r(erformed)g(b)r(et)n(w)n(een)g(the)h(neigh)n(b)r
-(ouring)e(input)i(pixels.)60 b(This)35 b(pro)r(duces)f(a)h(resampled)f
-(v)-5 b(alue)36 b(whic)n(h)f(is)227 1491 y(then)26 b(assigned)d(to)i
-(the)g(output)g(pixel.)36 b(A)26 b(c)n(hoice)e(of)g(sub-pixel)h(in)n
-(terp)r(olation)f(sc)n(hemes)g(is)h(pro)n(vided,)f(but)h(y)n(ou)227
-1590 y(ma)n(y)i(also)g(implemen)n(t)h(y)n(our)e(o)n(wn.)227
-1712 y(This)g(algorithm)f(samples)h(the)h(input)g(data)e(v)-5
-b(alue,)27 b(it)f(do)r(es)g(not)g(in)n(tegrate)f(it.)37
-b(Th)n(us)26 b(total)g(data)g(v)-5 b(alue)26 b(in)g(the)227
-1811 y(input)31 b(image)f(will)h(not,)g(in)f(general,)g(b)r(e)h
-(conserv)n(ed.)43 b(Ho)n(w)n(ev)n(er,)30 b(an)g(option)g(is)g(pro)n
-(vided)f(\(see)i(the)f Ft(")p Fj(Con)n(trol)227 1911
-y(Flags)p Ft(")38 b Fj(section)h(b)r(elo)n(w\))g(whic)n(h)h(can)e(pro)r
-(duce)h(appro)n(ximate)f(\015ux)h(conserv)-5 b(ation)38
-b(b)n(y)h(scaling)f(the)i(output)227 2010 y(v)-5 b(alues)34
-b(using)f(the)h(ratio)f(of)h(the)g(output)h(pixel)f(size)f(to)h(the)g
-(input)h(pixel)f(size.)55 b(Ho)n(w)n(ev)n(er,)34 b(if)g(accurate)e
-(\015ux)227 2110 y(conserv)-5 b(ation)29 b(is)h(imp)r(ortan)n(t)f(to)h
-(y)n(ou,)g(consder)f(using)h(the)g(astRebin)p Fl(<)p
-Fj(X)p Fl(>)f Fj(or)g(astRebinSeq)p Fl(<)p Fj(X)p Fl(>)h
-Fj(family)g(of)227 2210 y(functions)e(instead.)227 2331
-y(Output)k(pixel)g(co)r(ordinates)e(are)h(transformed)f(in)n(to)h(the)h
-(co)r(ordinate)e(system)i(of)f(the)h(input)g(grid)f(using)g(the)227
-2431 y(in)n(v)n(erse)i(transformation)g(of)h(the)h(Mapping)e(whic)n(h)i
-(is)f(supplied.)57 b(This)34 b(means)g(that)h(geometrical)d(features)
-227 2530 y(in)g(the)f(input)h(data)f(are)f(sub)5 b(jected)31
-b(to)g(the)h(Mapping's)e(forw)n(ard)g(transformation)f(as)i(they)g(are)
-f(transferred)227 2630 y(from)24 b(the)g(input)g(to)g(the)g(output)g
-(grid)f(\(although)g(the)h(Mapping's)f(forw)n(ard)f(transformation)g
-(is)i(not)f(explicitly)227 2729 y(used\).)227 2851 y(In)h(practice,)f
-(transforming)e(the)j(co)r(ordinates)e(of)h(ev)n(ery)e(pixel)j(of)f(a)f
-(large)g(data)h(grid)f(can)h(b)r(e)g(time-consuming,)227
-2950 y(esp)r(ecially)38 b(if)g(the)h(Mapping)f(in)n(v)n(olv)n(es)e
-(complicated)i(functions,)j(suc)n(h)c(as)h(sky)f(pro)5
-b(jections.)67 b(T)-7 b(o)38 b(impro)n(v)n(e)227 3050
-y(p)r(erformance,)29 b(it)g(is)g(therefore)f(p)r(ossible)g(to)h(appro)n
-(ximate)e(non-linear)h(Mappings)g(b)n(y)h(a)g(set)g(of)f(linear)h
-(trans-)227 3150 y(formations)h(whic)n(h)h(are)f(applied)g(piece-wise)h
-(to)f(separate)g(sub-regions)f(of)h(the)i(data.)46 b(This)30
-b(appro)n(ximation)227 3249 y(pro)r(cess)37 b(is)h(applied)g
-(automatically)f(b)n(y)h(an)g(adaptiv)n(e)f(algorithm,)i(under)f(con)n
-(trol)f(of)h(an)g(accuracy)e(crite-)227 3349 y(rion)25
-b(whic)n(h)h(expresses)f(the)h(maxim)n(um)g(tolerable)f(geometrical)f
-(distortion)h(whic)n(h)h(ma)n(y)f(b)r(e)i(in)n(tro)r(duced,)f(as)f(a)
-227 3449 y(fraction)i(of)h(a)f(pixel.)227 3570 y(This)34
-b(algorithm)e(\014rst)h(attempts)h(to)g(appro)n(ximate)e(the)i(Mapping)
-f(with)h(a)f(linear)g(transformation)f(applied)227 3670
-y(o)n(v)n(er)h(the)h(whole)g(region)f(of)h(the)h(output)g(grid)e(whic)n
-(h)i(is)f(b)r(eing)g(used.)57 b(If)35 b(this)f(pro)n(v)n(es)f(to)h(b)r
-(e)g(insu\016cien)n(tly)227 3769 y(accurate,)29 b(the)h(output)g
-(region)f(is)g(sub-divided)h(in)n(to)f(t)n(w)n(o)g(along)f(its)i
-(largest)e(dimension)i(and)f(the)h(pro)r(cess)f(is)227
-3869 y(rep)r(eated)k(within)h(eac)n(h)f(of)g(the)h(resulting)e
-(sub-regions.)53 b(This)33 b(pro)r(cess)f(of)h(sub-division)g(con)n
-(tin)n(ues)f(un)n(til)i(a)227 3968 y(su\016cien)n(tly)27
-b(go)r(o)r(d)g(linear)f(appro)n(ximation)g(is)h(found,)g(or)f(the)i
-(region)e(to)h(whic)n(h)g(it)h(is)f(b)r(eing)g(applied)g(b)r(ecomes)227
-4068 y(to)r(o)h(small)f(\(in)h(whic)n(h)f(case)g(the)h(original)e
-(Mapping)h(is)h(used)g(directly\).)0 4211 y Fd(Synopsis:)121
-b Ft(int)42 b(astResample)p Fl(<)p Ft(X)p Fl(>)p Ft(\()c(AstMapping)h
-Fi(\003)p Ft(this,)i(int)h(ndim_in,)f(const)g(int)i(lbnd_in[],)c(const)
-227 4311 y(int)k(ubnd_in[],)c(const)j Fl(<)p Ft(Xtype)p
-Fl(>)e Ft(in[],)i(const)f Fl(<)p Ft(Xtype)p Fl(>)g Ft(in_var[],)f(int)i
-(interp,)f(void)h(\()p Fi(\003)g Ft(finterp\)\(\),)227
-4410 y(const)g(double)f(params[],)f(int)i(flags,)f(double)g(tol,)h(int)
-h(maxpix,)d Fl(<)p Ft(Xtype)p Fl(>)h Ft(badval,)g(int)h(ndim_out,)227
-4510 y(const)g(int)g(lbnd_out[],)d(const)j(int)g(ubnd_out[],)d(const)j
-(int)g(lbnd[],)f(const)g(int)h(ubnd[],)f Fl(<)p Ft(Xtype)p
-Fl(>)227 4610 y Ft(out[],)g Fl(<)p Ft(Xtype)p Fl(>)g
-Ft(out_var[])f(\);)0 4753 y Fd(P)m(arameters:)259 4883
-y(this)427 4982 y Fj(P)n(oin)n(ter)21 b(to)h(a)g(Mapping,)h(whose)f(in)
-n(v)n(erse)f(transformation)g(will)i(b)r(e)f(used)h(to)f(transform)f
-(the)i(co)r(ordinates)427 5082 y(of)36 b(pixels)f(in)h(the)g(output)h
-(grid)e(in)n(to)g(the)h(co)r(ordinate)f(system)g(of)h(the)g(input)h
-(grid.)60 b(This)36 b(yields)f(the)427 5181 y(p)r(ositions)h(whic)n(h)g
-(are)f(used)h(to)g(obtain)g(resampled)f(v)-5 b(alues)36
-b(b)n(y)f(sub-pixel)h(in)n(terp)r(olation)f(within)i(the)427
-5281 y(input)29 b(grid.)427 5394 y(The)24 b(n)n(um)n(b)r(er)g(of)g
-(input)h(co)r(ordinates)e(used)h(b)n(y)g(this)g(Mapping)g(\(as)f(giv)n
-(en)h(b)n(y)f(its)i(Nin)f(attribute\))h(should)427 5494
-y(matc)n(h)e(the)g(n)n(um)n(b)r(er)g(of)g(input)h(grid)e(dimensions)h
-(giv)n(en)f(b)n(y)g(the)i(v)-5 b(alue)23 b(of)g Ft(")p
-Fj(ndim)p Ft(_)p Fj(in)p Ft(")f Fj(b)r(elo)n(w.)35 b(Similarly)-7
-b(,)427 5593 y(the)29 b(n)n(um)n(b)r(er)e(of)h(output)g(co)r(ordinates)
-f(\(Nout)h(attribute\))h(should)e(matc)n(h)h(the)g(n)n(um)n(b)r(er)g
-(of)g(output)g(grid)427 5693 y(dimensions)g(giv)n(en)e(b)n(y)i
-Ft(")p Fj(ndim)p Ft(_)p Fj(out)p Ft(")p Fj(.)p eop end
-%%Page: 322 332
-TeXDict begin 322 331 bop 0 52 a FF(322)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(ndim)p
-Ft(_)p Fd(in)427 451 y Fj(The)e(n)n(um)n(b)r(er)f(of)h(dimensions)f(in)
-h(the)g(input)g(grid.)36 b(This)28 b(should)f(b)r(e)h(at)g(least)f
-(one.)259 597 y Fd(lbnd)p Ft(_)p Fd(in)427 696 y Fj(P)n(oin)n(ter)i(to)
-i(an)f(arra)n(y)e(of)j(in)n(tegers,)f(with)h Ft(")p Fj(ndim)p
-Ft(_)p Fj(in)p Ft(")f Fj(elemen)n(ts,)h(con)n(taining)f(the)h(co)r
-(ordinates)e(of)h(the)427 796 y(cen)n(tre)d(of)h(the)g(\014rst)f(pixel)
-h(in)g(the)g(input)g(grid)f(along)f(eac)n(h)h(dimension.)259
-941 y Fd(ubnd)p Ft(_)p Fd(in)427 1041 y Fj(P)n(oin)n(ter)i(to)i(an)f
-(arra)n(y)e(of)j(in)n(tegers,)f(with)h Ft(")p Fj(ndim)p
-Ft(_)p Fj(in)p Ft(")f Fj(elemen)n(ts,)h(con)n(taining)f(the)h(co)r
-(ordinates)e(of)h(the)427 1141 y(cen)n(tre)d(of)h(the)g(last)f(pixel)h
-(in)g(the)g(input)g(grid)f(along)f(eac)n(h)h(dimension.)427
-1263 y(Note)h(that)h Ft(")p Fj(lbnd)p Ft(_)p Fj(in)p
-Ft(")e Fj(and)h Ft(")p Fj(ubnd)p Ft(_)p Fj(in)p Ft(")f
-Fj(together)g(de\014ne)h(the)h(shap)r(e)f(and)f(size)h(of)g(the)g
-(input)h(grid,)e(its)427 1363 y(exten)n(t)f(along)f(a)g(particular)f
-(\(j'th\))k(dimension)d(b)r(eing)h(ubnd)p Ft(_)p Fj(in[j]-lbnd)p
-Ft(_)p Fj(in[j]+1)g(\(assuming)f(the)i(index)427 1463
-y Ft(")p Fj(j)p Ft(")f Fj(to)g(b)r(e)g(zero-based\).)35
-b(They)26 b(also)f(de\014ne)h(the)h(input)g(grid's)e(co)r(ordinate)g
-(system,)h(eac)n(h)g(pixel)g(ha)n(ving)427 1562 y(unit)j(exten)n(t)e
-(along)g(eac)n(h)f(dimension)i(with)g(in)n(tegral)e(co)r(ordinate)h(v)
--5 b(alues)27 b(at)g(its)h(cen)n(tre.)259 1708 y Fd(in)427
-1807 y Fj(P)n(oin)n(ter)h(to)i(an)f(arra)n(y)-7 b(,)30
-b(with)h(one)f(elemen)n(t)h(for)g(eac)n(h)f(pixel)g(in)h(the)g(input)h
-(grid,)f(con)n(taining)f(the)h(input)427 1907 y(data)f(to)h(b)r(e)g
-(resampled.)45 b(The)31 b(n)n(umerical)e(t)n(yp)r(e)i(of)g(this)g(arra)
-n(y)d(should)i(matc)n(h)h(the)g(1-)f(or)f(2-c)n(haracter)427
-2007 y(t)n(yp)r(e)j(co)r(de)g(app)r(ended)g(to)f(the)h(function)g(name)
-g(\(e.g.)49 b(if)32 b(y)n(ou)f(are)f(using)i(astResampleF,)f(the)h(t)n
-(yp)r(e)g(of)427 2106 y(eac)n(h)27 b(arra)n(y)e(elemen)n(t)j(should)f
-(b)r(e)h Ft(")p Fj(\015oat)p Ft(")p Fj(\).)427 2229 y(The)33
-b(storage)f(order)f(of)j(data)e(within)i(this)g(arra)n(y)c(should)j(b)r
-(e)h(suc)n(h)f(that)g(the)h(index)f(of)g(the)g(\014rst)g(grid)427
-2329 y(dimension)23 b(v)-5 b(aries)22 b(most)h(rapidly)f(and)h(that)g
-(of)g(the)h(\014nal)f(dimension)g(least)f(rapidly)g(\(i.e.)36
-b(F)-7 b(ortran)22 b(arra)n(y)427 2428 y(indexing)28
-b(is)f(used\).)259 2574 y Fd(in)p Ft(_)p Fd(v)-5 b(ar)427
-2673 y Fj(An)25 b(optional)e(p)r(oin)n(ter)h(to)g(a)f(second)h(arra)n
-(y)e(with)i(the)h(same)e(size)h(and)g(t)n(yp)r(e)g(as)f(the)i
-Ft(")p Fj(in)p Ft(")e Fj(arra)n(y)-7 b(.)34 b(If)24 b(giv)n(en,)427
-2773 y(this)32 b(should)g(con)n(tain)f(a)g(set)h(of)g(non-negativ)n(e)e
-(v)-5 b(alues)31 b(whic)n(h)h(represen)n(t)f(estimates)g(of)h(the)g
-(statistical)427 2873 y(v)-5 b(ariance)32 b(asso)r(ciated)f(with)i(eac)
-n(h)f(elemen)n(t)g(of)h(the)g Ft(")p Fj(in)p Ft(")f Fj(arra)n(y)-7
-b(.)49 b(If)33 b(this)g(arra)n(y)d(is)i(supplied)h(\(together)427
-2972 y(with)k(the)f(corresp)r(onding)e Ft(")p Fj(out)p
-Ft(_)p Fj(v)-5 b(ar)p Ft(")34 b Fj(arra)n(y\),)i(then)h(estimates)e(of)
-h(the)g(v)-5 b(ariance)35 b(of)h(the)g(resampled)427
-3072 y(output)28 b(data)g(will)f(b)r(e)h(calculated.)427
-3195 y(If)g(no)g(input)g(v)-5 b(ariance)26 b(estimates)i(are)e(b)r
-(eing)i(pro)n(vided,)f(a)g(NULL)h(p)r(oin)n(ter)f(should)g(b)r(e)h(giv)
-n(en.)259 3340 y Fd(in)m(terp)427 3440 y Fj(This)j(parameter)f(sp)r
-(eci\014es)h(the)g(sc)n(heme)f(to)h(b)r(e)h(used)f(for)f(sub-pixel)h
-(in)n(terp)r(olation)f(within)h(the)h(input)427 3539
-y(grid.)62 b(It)36 b(ma)n(y)f(b)r(e)i(used)f(to)f(select)h(from)g(a)f
-(set)h(of)g(pre-de\014ned)g(sc)n(hemes)f(b)n(y)h(supplying)g(one)f(of)h
-(the)427 3639 y(v)-5 b(alues)31 b(describ)r(ed)f(in)i(the)f
-Ft(")p Fj(Sub-Pixel)f(In)n(terp)r(olation)g(Sc)n(hemes)p
-Ft(")g Fj(section)g(b)r(elo)n(w.)46 b(If)32 b(a)e(v)-5
-b(alue)31 b(of)g(zero)427 3739 y(is)d(supplied,)h(then)f(the)g(default)
-h(linear)e(in)n(terp)r(olation)g(sc)n(heme)h(is)g(used)g(\(equiv)-5
-b(alen)n(t)28 b(to)f(supplying)h(the)427 3838 y(v)-5
-b(alue)28 b(AST)p Ft(__)p Fj(LINEAR\).)427 3961 y(Alternativ)n(ely)-7
-b(,)22 b(y)n(ou)f(ma)n(y)g(supply)g(a)g(v)-5 b(alue)21
-b(whic)n(h)h(indicates)f(that)h(y)n(ou)e(will)i(pro)n(vide)e(y)n(our)g
-(o)n(wn)h(function)427 4061 y(to)h(p)r(erform)f(sub-pixel)g(in)n(terp)r
-(olation)g(b)n(y)g(means)g(of)h(the)g Ft(")p Fj(\014n)n(terp)f
-Ft(")g Fj(parameter.)33 b(Again,)23 b(see)e(the)h Ft(")p
-Fj(Sub-)427 4160 y(Pixel)27 b(In)n(terp)r(olation)g(Sc)n(hemes)p
-Ft(")g Fj(section)g(b)r(elo)n(w)g(for)g(details.)259
-4306 y Fd(\014n)m(terp)427 4405 y Fj(If)22 b(the)f(v)-5
-b(alue)21 b(giv)n(en)g(for)f(the)i Ft(")p Fj(in)n(terp)p
-Ft(")e Fj(parameter)g(indicates)h(that)g(y)n(ou)f(will)i(pro)n(vide)e
-(y)n(our)g(o)n(wn)g(function)427 4505 y(for)28 b(sub-pixel)g(in)n(terp)
-r(olation,)g(then)h(a)f(p)r(oin)n(ter)g(to)h(that)f(function)h(should)g
-(b)r(e)f(giv)n(en)g(here.)39 b(F)-7 b(or)28 b(details)427
-4605 y(of)f(the)h(in)n(terface)e(whic)n(h)i(the)f(function)h(should)f
-(ha)n(v)n(e)f(\(sev)n(eral)g(are)g(p)r(ossible,)h(dep)r(ending)g(on)g
-(the)h(v)-5 b(alue)427 4704 y(of)28 b Ft(")p Fj(in)n(terp)p
-Ft(")p Fj(\),)f(see)g(the)h Ft(")p Fj(Sub-Pixel)f(In)n(terp)r(olation)f
-(Sc)n(hemes)p Ft(")h Fj(section)g(b)r(elo)n(w.)427 4827
-y(If)h(the)f Ft(")p Fj(in)n(terp)p Ft(")f Fj(parameter)f(has)h(an)n(y)g
-(other)h(v)-5 b(alue,)27 b(corresp)r(onding)e(to)h(one)h(of)g(the)g
-(pre-de\014ned)f(in)n(ter-)427 4927 y(p)r(olation)h(sc)n(hemes,)g(then)
-h(this)g(function)h(will)e(not)h(b)r(e)g(used)g(and)f(y)n(ou)g(ma)n(y)g
-(supply)g(a)h(NULL)g(p)r(oin)n(ter.)259 5072 y Fd(params)427
-5172 y Fj(An)36 b(optional)e(p)r(oin)n(ter)h(to)g(an)g(arra)n(y)e(of)i
-(double)g(whic)n(h)h(should)e(con)n(tain)h(an)n(y)f(additional)h
-(parameter)427 5271 y(v)-5 b(alues)30 b(required)f(b)n(y)h(the)h
-(sub-pixel)e(in)n(terp)r(olation)h(sc)n(heme.)44 b(If)30
-b(suc)n(h)g(parameters)e(are)h(required,)h(this)427 5371
-y(will)d(b)r(e)h(noted)f(in)g(the)g Ft(")p Fj(Sub-Pixel)f(In)n(terp)r
-(olation)g(Sc)n(hemes)p Ft(")h Fj(section)f(b)r(elo)n(w)h(\(y)n(ou)f
-(ma)n(y)h(also)e(use)i(this)427 5471 y(arra)n(y)f(to)h(pass)g(v)-5
-b(alues)27 b(to)g(y)n(our)g(o)n(wn)g(in)n(terp)r(olation)g(function\).)
-427 5593 y(If)i(no)e(additional)h(parameters)e(are)h(required,)g(this)i
-(arra)n(y)c(is)j(not)g(used)g(and)g(a)g(NULL)g(p)r(oin)n(ter)g(ma)n(y)f
-(b)r(e)427 5693 y(giv)n(en.)p eop end
-%%Page: 323 333
-TeXDict begin 323 332 bop 3643 52 a FF(323)259 351 y
-Fd(\015ags)427 451 y Fj(The)29 b(bit)n(wise)g(OR)f(of)h(a)f(set)h(of)f
-(\015ag)g(v)-5 b(alues)29 b(whic)n(h)f(ma)n(y)g(b)r(e)h(used)g(to)f
-(pro)n(vide)g(additional)g(con)n(trol)f(o)n(v)n(er)427
-551 y(the)38 b(resampling)d(op)r(eration.)64 b(See)37
-b(the)h Ft(")p Fj(Con)n(trol)d(Flags)p Ft(")h Fj(section)g(b)r(elo)n(w)
-h(for)f(a)h(description)f(of)h(the)427 650 y(options)27
-b(a)n(v)-5 b(ailable.)36 b(If)28 b(no)f(\015ag)g(v)-5
-b(alues)27 b(are)g(to)g(b)r(e)h(set,)g(a)f(v)-5 b(alue)28
-b(of)f(zero)g(should)g(b)r(e)h(giv)n(en.)259 788 y Fd(tol)427
-887 y Fj(The)34 b(maxim)n(um)f(tolerable)f(geometrical)f(distortion)i
-(whic)n(h)g(ma)n(y)f(b)r(e)i(in)n(tro)r(duced)f(as)f(a)h(result)g(of)g
-(ap-)427 987 y(pro)n(ximating)c(non-linear)f(Mappings)h(b)n(y)h(a)f
-(set)h(of)g(piece-wise)f(linear)g(transformations.)42
-b(This)30 b(should)427 1087 y(b)r(e)e(expressed)f(as)g(a)g(displacemen)
-n(t)g(in)h(pixels)f(in)h(the)g(input)h(grid's)d(co)r(ordinate)h
-(system.)427 1205 y(If)34 b(piece-wise)f(linear)g(appro)n(ximation)f
-(is)h(not)h(required,)g(a)f(v)-5 b(alue)33 b(of)h(zero)e(ma)n(y)h(b)r
-(e)h(giv)n(en.)54 b(This)33 b(will)427 1305 y(ensure)k(that)g(the)h
-(Mapping)e(is)h(used)g(without)h(an)n(y)e(appro)n(ximation,)i(but)g(ma)
-n(y)e(increase)g(execution)427 1404 y(time.)259 1542
-y Fd(maxpix)427 1642 y Fj(A)42 b(v)-5 b(alue)40 b(whic)n(h)h(sp)r
-(eci\014es)g(an)g(initial)g(scale)g(size)f(\(in)i(pixels\))f(for)f(the)
-i(adaptiv)n(e)e(algorithm)g(whic)n(h)427 1741 y(appro)n(ximates)d
-(non-linear)g(Mappings)h(with)h(piece-wise)f(linear)g(transformations.)
-68 b(Normally)-7 b(,)40 b(this)427 1841 y(should)35 b(b)r(e)g(a)f
-(large)g(v)-5 b(alue)34 b(\(larger)f(than)i(an)n(y)f(dimension)h(of)g
-(the)g(region)e(of)i(the)g(output)g(grid)g(b)r(eing)427
-1941 y(used\).)46 b(In)31 b(this)g(case,)g(a)f(\014rst)g(attempt)h(to)g
-(appro)n(ximate)e(the)i(Mapping)f(b)n(y)g(a)g(linear)g(transformation)
-427 2040 y(will)e(b)r(e)g(made)f(o)n(v)n(er)f(the)i(en)n(tire)f(output)
-i(region.)427 2159 y(If)h(a)f(smaller)f(v)-5 b(alue)29
-b(is)g(used,)h(the)g(output)f(region)f(will)i(\014rst)f(b)r(e)g
-(divided)h(in)n(to)f(sub-regions)e(whose)i(size)427 2258
-y(do)r(es)39 b(not)h(exceed)f Ft(")p Fj(maxpix)p Ft(")f
-Fj(pixels)i(in)g(an)n(y)e(dimension.)73 b(Only)39 b(at)g(this)h(p)r
-(oin)n(t)g(will)g(attempts)g(at)427 2358 y(appro)n(ximation)26
-b(commence.)427 2477 y(This)38 b(v)-5 b(alue)38 b(ma)n(y)g(o)r
-(ccasionally)e(b)r(e)j(useful)f(in)h(prev)n(en)n(ting)e(false)h(con)n
-(v)n(ergence)d(of)j(the)h(adaptiv)n(e)e(al-)427 2576
-y(gorithm)c(in)g(cases)f(where)g(the)h(Mapping)g(app)r(ears)f(appro)n
-(ximately)f(linear)h(on)h(large)e(scales,)j(but)f(has)427
-2676 y(irregularities)27 b(\(e.g.)40 b(holes\))28 b(on)g(smaller)g
-(scales.)39 b(A)29 b(v)-5 b(alue)28 b(of,)h(sa)n(y)-7
-b(,)28 b(50)g(to)g(100)g(pixels)g(can)g(also)g(b)r(e)h(em-)427
-2775 y(plo)n(y)n(ed)23 b(as)f(a)h(safeguard)f(in)i(general-purp)r(ose)d
-(soft)n(w)n(are,)i(since)g(the)h(e\013ect)f(on)h(p)r(erformance)e(is)h
-(minimal.)427 2894 y(If)e(to)r(o)f(small)g(a)g(v)-5 b(alue)20
-b(is)g(giv)n(en,)h(it)g(will)f(ha)n(v)n(e)f(the)i(e\013ect)g(of)f
-(inhibiting)h(linear)f(appro)n(ximation)e(altogether)427
-2994 y(\(equiv)-5 b(alen)n(t)20 b(to)g(setting)g Ft(")p
-Fj(tol)p Ft(")f Fj(to)g(zero\).)34 b(Although)20 b(this)g(ma)n(y)f
-(degrade)f(p)r(erformance,)j(accurate)d(results)427 3093
-y(will)28 b(still)g(b)r(e)g(obtained.)259 3231 y Fd(badv)-5
-b(al)427 3330 y Fj(This)29 b(argumen)n(t)f(should)h(ha)n(v)n(e)e(the)j
-(same)e(t)n(yp)r(e)h(as)f(the)i(elemen)n(ts)e(of)h(the)g
-Ft(")p Fj(in)p Ft(")g Fj(arra)n(y)-7 b(.)38 b(It)29 b(sp)r(eci\014es)g
-(the)427 3430 y(v)-5 b(alue)28 b(used)f(to)h(\015ag)f(missing)g(data)g
-(\(bad)h(pixels\))f(in)h(the)g(input)g(and)g(output)g(arra)n(ys.)427
-3549 y(If)33 b(the)f(AST)p Ft(__)p Fj(USEBAD)g(\015ag)g(is)g(set)g(via)
-g(the)g Ft(")p Fj(\015ags)p Ft(")e Fj(parameter,)i(then)h(this)f(v)-5
-b(alue)32 b(is)g(used)g(to)g(test)427 3648 y(for)27 b(bad)h(pixels)f
-(in)h(the)g Ft(")p Fj(in)p Ft(")f Fj(\(and)h Ft(")p Fj(in)p
-Ft(_)p Fj(v)-5 b(ar)p Ft(")p Fj(\))26 b(arra)n(y\(s\).)427
-3767 y(Unless)36 b(the)f(AST)p Ft(__)p Fj(NOBAD)g(\015ag)g(is)g(set)g
-(via)g(the)h Ft(")p Fj(\015ags)p Ft(")d Fj(parameter,)j(this)g(v)-5
-b(alue)35 b(is)g(also)f(used)i(to)427 3867 y(\015ag)30
-b(an)n(y)h(output)g(elemen)n(ts)g(in)g(the)g Ft(")p Fj(out)p
-Ft(")f Fj(\(and)i Ft(")p Fj(out)p Ft(_)p Fj(v)-5 b(ar)p
-Ft(")p Fj(\))29 b(arra)n(y\(s\))g(for)h(whic)n(h)h(resampled)f(v)-5
-b(alues)427 3966 y(could)34 b(not)g(b)r(e)g(obtained)f(\(see)h(the)g
-Ft(")p Fj(Propagation)d(of)j(Missing)f(Data)p Ft(")g
-Fj(section)g(b)r(elo)n(w)h(for)f(details)h(of)427 4066
-y(the)25 b(circumstances)e(under)h(whic)n(h)g(this)h(ma)n(y)e(o)r
-(ccur\).)35 b(The)25 b(astResample)p Fl(<)p Fj(X)p Fl(>)d
-Fj(function)j(return)f(v)-5 b(alue)427 4165 y(indicates)36
-b(whether)g(an)n(y)g(suc)n(h)f(v)-5 b(alues)36 b(ha)n(v)n(e)f(b)r(een)i
-(pro)r(duced.)62 b(If)37 b(the)f(AST)p Ft(__)p Fj(NOBAD)g(\015ag)g(is)g
-(set.)427 4265 y(then)25 b(output)f(arra)n(y)e(elemen)n(ts)i(for)f
-(whic)n(h)h(no)f(resampled)g(v)-5 b(alue)24 b(could)g(b)r(e)g(obtained)
-g(are)f(left)h(set)g(to)g(the)427 4365 y(v)-5 b(alue)28
-b(they)g(had)f(on)g(en)n(try)g(to)h(this)g(function.)259
-4502 y Fd(ndim)p Ft(_)p Fd(out)427 4602 y Fj(The)38 b(n)n(um)n(b)r(er)f
-(of)g(dimensions)g(in)h(the)f(output)h(grid.)66 b(This)37
-b(should)g(b)r(e)h(at)f(least)g(one.)65 b(It)38 b(need)g(not)427
-4702 y(necessarily)26 b(b)r(e)i(equal)f(to)h(the)g(n)n(um)n(b)r(er)f
-(of)h(dimensions)f(in)h(the)g(input)g(grid.)259 4839
-y Fd(lbnd)p Ft(_)p Fd(out)427 4939 y Fj(P)n(oin)n(ter)d(to)i(an)f(arra)
-n(y)f(of)i(in)n(tegers,)e(with)j Ft(")p Fj(ndim)p Ft(_)p
-Fj(out)p Ft(")e Fj(elemen)n(ts,)g(con)n(taining)g(the)h(co)r(ordinates)
-f(of)g(the)427 5038 y(cen)n(tre)h(of)h(the)g(\014rst)f(pixel)h(in)g
-(the)g(output)g(grid)f(along)f(eac)n(h)h(dimension.)259
-5176 y Fd(ubnd)p Ft(_)p Fd(out)427 5276 y Fj(P)n(oin)n(ter)e(to)i(an)f
-(arra)n(y)f(of)i(in)n(tegers,)e(with)j Ft(")p Fj(ndim)p
-Ft(_)p Fj(out)p Ft(")e Fj(elemen)n(ts,)g(con)n(taining)g(the)h(co)r
-(ordinates)f(of)g(the)427 5375 y(cen)n(tre)h(of)h(the)g(last)f(pixel)h
-(in)g(the)g(output)g(grid)f(along)f(eac)n(h)h(dimension.)427
-5494 y(Note)e(that)g Ft(")p Fj(lbnd)p Ft(_)p Fj(out)p
-Ft(")f Fj(and)g Ft(")p Fj(ubnd)p Ft(_)p Fj(out)p Ft(")g
-Fj(together)g(de\014ne)h(the)g(shap)r(e,)g(size)g(and)f(co)r(ordinate)g
-(system)427 5593 y(of)32 b(the)f(output)h(grid)f(in)g(the)h(same)f(w)n
-(a)n(y)f(as)h Ft(")p Fj(lbnd)p Ft(_)p Fj(in)p Ft(")f
-Fj(and)i Ft(")p Fj(ubnd)p Ft(_)p Fj(in)p Ft(")e Fj(de\014ne)i(the)g
-(shap)r(e,)g(size)f(and)427 5693 y(co)r(ordinate)c(system)g(of)h(the)g
-(input)g(grid.)p eop end
-%%Page: 324 334
-TeXDict begin 324 333 bop 0 52 a FF(324)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(lbnd)427
-451 y Fj(P)n(oin)n(ter)25 b(to)i(an)f(arra)n(y)f(of)i(in)n(tegers,)e
-(with)j Ft(")p Fj(ndim)p Ft(_)p Fj(out)p Ft(")e Fj(elemen)n(ts,)g(con)n
-(taining)g(the)h(co)r(ordinates)f(of)g(the)427 551 y(\014rst)i(pixel)f
-(in)h(the)g(region)e(of)i(the)g(output)g(grid)f(for)g(whic)n(h)h(a)f
-(resampled)f(v)-5 b(alue)28 b(is)f(to)h(b)r(e)g(calculated.)259
-680 y Fd(ubnd)427 780 y Fj(P)n(oin)n(ter)d(to)i(an)f(arra)n(y)f(of)i
-(in)n(tegers,)e(with)j Ft(")p Fj(ndim)p Ft(_)p Fj(out)p
-Ft(")e Fj(elemen)n(ts,)g(con)n(taining)g(the)h(co)r(ordinates)f(of)g
-(the)427 880 y(last)i(pixel)f(in)h(the)g(region)e(of)i(the)g(output)g
-(grid)f(for)g(whic)n(h)g(a)h(resampled)e(v)-5 b(alue)28
-b(is)f(to)h(b)r(e)g(calculated.)427 994 y(Note)23 b(that)h
-Ft(")p Fj(lbnd)p Ft(")e Fj(and)h Ft(")p Fj(ubnd)p Ft(")g
-Fj(together)f(de\014ne)h(the)h(shap)r(e)f(and)f(p)r(osition)h(of)g(a)g
-(\(h)n(yp)r(er-\)rectangular)427 1094 y(region)h(of)i(the)g(output)g
-(grid)f(for)g(whic)n(h)g(resampled)g(v)-5 b(alues)25
-b(should)g(b)r(e)h(pro)r(duced.)36 b(This)26 b(region)e(should)427
-1194 y(lie)f(wholly)f(within)i(the)f(exten)n(t)f(of)h(the)g(output)g
-(grid)f(\(as)h(de\014ned)g(b)n(y)f(the)h Ft(")p Fj(lbnd)p
-Ft(_)p Fj(out)p Ft(")f Fj(and)g Ft(")p Fj(ubnd)p Ft(_)p
-Fj(out)p Ft(")427 1293 y Fj(arra)n(ys\).)35 b(Regions)26
-b(of)i(the)g(output)g(grid)f(lying)g(outside)h(this)g(region)e(will)i
-(not)f(b)r(e)h(mo)r(di\014ed.)259 1423 y Fd(out)427 1523
-y Fj(P)n(oin)n(ter)40 b(to)g(an)h(arra)n(y)-7 b(,)42
-b(with)g(one)e(elemen)n(t)h(for)g(eac)n(h)f(pixel)h(in)g(the)g(output)h
-(grid,)i(in)n(to)c(whic)n(h)h(the)427 1622 y(resampled)27
-b(data)h(v)-5 b(alues)27 b(will)h(b)r(e)h(returned.)37
-b(The)28 b(n)n(umerical)f(t)n(yp)r(e)h(of)g(this)g(arra)n(y)e(should)i
-(matc)n(h)f(that)427 1722 y(of)j(the)g Ft(")p Fj(in)p
-Ft(")f Fj(arra)n(y)-7 b(,)28 b(and)h(the)i(data)e(storage)e(order)i
-(should)g(b)r(e)h(suc)n(h)g(that)f(the)h(index)g(of)g(the)g(\014rst)f
-(grid)427 1822 y(dimension)23 b(v)-5 b(aries)22 b(most)h(rapidly)f(and)
-h(that)g(of)g(the)h(\014nal)f(dimension)g(least)f(rapidly)g(\(i.e.)36
-b(F)-7 b(ortran)22 b(arra)n(y)427 1921 y(indexing)28
-b(is)f(used\).)259 2051 y Fd(out)p Ft(_)p Fd(v)-5 b(ar)427
-2151 y Fj(An)25 b(optional)f(p)r(oin)n(ter)g(to)h(an)f(arra)n(y)e(with)
-j(the)g(same)f(t)n(yp)r(e)h(and)f(size)h(as)f(the)h Ft(")p
-Fj(out)p Ft(")e Fj(arra)n(y)-7 b(.)34 b(If)25 b(giv)n(en,)f(this)427
-2250 y(arra)n(y)f(will)i(b)r(e)g(used)g(to)g(return)g(v)-5
-b(ariance)23 b(estimates)i(for)f(the)i(resampled)e(data)g(v)-5
-b(alues.)36 b(This)25 b(arra)n(y)d(will)427 2350 y(only)27
-b(b)r(e)h(used)g(if)g(the)g Ft(")p Fj(in)p Ft(_)p Fj(v)-5
-b(ar)p Ft(")26 b Fj(arra)n(y)f(has)i(also)g(b)r(een)h(supplied.)427
-2465 y(The)23 b(output)f(v)-5 b(ariance)22 b(v)-5 b(alues)21
-b(will)i(b)r(e)g(calculated)e(on)h(the)h(assumption)f(that)g(errors)e
-(on)i(the)h(input)g(data)427 2564 y(v)-5 b(alues)24 b(are)g
-(statistically)f(indep)r(enden)n(t)i(and)g(that)f(their)g(v)-5
-b(ariance)24 b(estimates)g(ma)n(y)f(simply)i(b)r(e)f(summed)427
-2664 y(\(with)30 b(appropriate)d(w)n(eigh)n(ting)g(factors\))h(when)h
-(sev)n(eral)e(input)i(pixels)g(con)n(tribute)f(to)h(an)f(output)h(data)
-427 2764 y(v)-5 b(alue.)59 b(If)35 b(this)g(assumption)f(is)h(not)g(v)
--5 b(alid,)36 b(then)f(the)h(output)f(error)e(estimates)h(ma)n(y)g(b)r
-(e)h(biased.)58 b(In)427 2863 y(addition,)31 b(note)f(that)h(the)f
-(statistical)g(errors)e(on)i(neigh)n(b)r(ouring)f(output)h(data)g(v)-5
-b(alues)30 b(\(as)g(w)n(ell)g(as)f(the)427 2963 y(estimates)j(of)f
-(those)g(errors\))f(ma)n(y)h(often)h(b)r(e)g(correlated,)f(ev)n(en)g
-(if)h(the)g(ab)r(o)n(v)n(e)f(assumption)g(ab)r(out)g(the)427
-3062 y(input)e(data)e(is)g(correct,)g(b)r(ecause)g(of)g(the)h
-(sub-pixel)g(in)n(terp)r(olation)e(sc)n(hemes)h(emplo)n(y)n(ed.)427
-3177 y(If)h(no)g(output)g(v)-5 b(ariance)26 b(estimates)h(are)g
-(required,)g(a)g(NULL)h(p)r(oin)n(ter)f(should)g(b)r(e)h(giv)n(en.)0
-3336 y Fd(Returned)k(V)-8 b(alue:)259 3470 y(astResample)p
-Fl(<)p Fd(X)p Fl(>)p Fd(\(\))427 3569 y Fj(The)33 b(n)n(um)n(b)r(er)f
-(of)g(output)h(pixels)g(for)f(whic)n(h)g(no)g(v)-5 b(alid)33
-b(resampled)e(v)-5 b(alue)33 b(could)f(b)r(e)h(obtained.)51
-b(Th)n(us,)427 3669 y(in)33 b(the)g(absence)f(of)h(an)n(y)f(error,)g(a)
-h(returned)f(v)-5 b(alue)33 b(of)f(zero)g(indicates)h(that)g(all)f(the)
-h(required)f(output)427 3768 y(pixels)j(receiv)n(ed)f(v)-5
-b(alid)34 b(resampled)g(data)h(v)-5 b(alues)34 b(\(and)h(v)-5
-b(ariances\).)57 b(See)35 b(the)g Ft(")p Fj(badv)-5 b(al)p
-Ft(")34 b Fj(and)g Ft(")p Fj(\015ags)p Ft(")427 3868
-y Fj(parameters.)0 4027 y Fd(Notes:)340 4306 y Fi(\017)45
-b Fj(A)27 b(v)-5 b(alue)25 b(of)h(zero)f(will)h(b)r(e)g(returned)g(if)g
-(this)g(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(the)f(global)f(error)
-f(status)h(set,)h(or)427 4406 y(if)i(it)g(should)g(fail)f(for)h(an)n(y)
-e(reason.)-2 4565 y Fd(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)227
-4711 y Fj(T)-7 b(o)35 b(select)h(the)g(appropriate)d(resampling)i
-(function,)j(y)n(ou)c(should)i(replace)e Fl(<)p Fj(X)p
-Fl(>)h Fj(in)h(the)g(generic)e(function)227 4811 y(name)24
-b(astResample)p Fl(<)p Fj(X)p Fl(>)e Fj(with)i(a)g(1-)f(or)g(2-c)n
-(haracter)d(data)k(t)n(yp)r(e)g(co)r(de,)g(so)f(as)g(to)h(matc)n(h)f
-(the)i(n)n(umerical)d(t)n(yp)r(e)227 4910 y Fl(<)p Fj(Xt)n(yp)r(e)p
-Fl(>)27 b Fj(of)h(the)g(data)f(y)n(ou)g(are)g(pro)r(cessing,)f(as)h
-(follo)n(ws:)340 5044 y Fi(\017)45 b Fj(D:)28 b(double)340
-5174 y Fi(\017)45 b Fj(F:)28 b(\015oat)340 5303 y Fi(\017)45
-b Fj(L:)28 b(long)f(in)n(t)340 5433 y Fi(\017)45 b Fj(UL:)28
-b(unsigned)g(long)e(in)n(t)340 5563 y Fi(\017)45 b Fj(I:)28
-b(in)n(t)340 5693 y Fi(\017)45 b Fj(UI:)28 b(unsigned)g(in)n(t)p
-eop end
-%%Page: 325 335
-TeXDict begin 325 334 bop 3643 52 a FF(325)340 351 y
-Fi(\017)45 b Fj(S:)28 b(short)f(in)n(t)340 481 y Fi(\017)45
-b Fj(US:)28 b(unsigned)g(short)f(in)n(t)340 611 y Fi(\017)45
-b Fj(B:)28 b(b)n(yte)f(\(signed)h(c)n(har\))340 741 y
-Fi(\017)45 b Fj(UB:)28 b(unsigned)f(b)n(yte)h(\(unsigned)g(c)n(har\))
-227 900 y(F)-7 b(or)31 b(example,)h(astResampleD)f(w)n(ould)g(b)r(e)h
-(used)g(to)f(pro)r(cess)f Ft(")p Fj(double)p Ft(")h Fj(data,)h(while)f
-(astResampleS)g(w)n(ould)227 999 y(b)r(e)d(used)g(to)f(pro)r(cess)g
-Ft(")p Fj(short)f(in)n(t)p Ft(")i Fj(data,)f(etc.)-2
-1146 y Fd(Sub-Pixel)32 b(In)m(terp)s(olation)f(Sc)m(hemes)n(:)227
-1292 y Fj(There)d(is)f(no)h(suc)n(h)f(thing)h(as)g(a)f(p)r(erfect)h
-(sub-pixel)g(in)n(terp)r(olation)f(sc)n(heme)g(and,)h(in)g(practice,)f
-(all)h(resampling)227 1391 y(will)34 b(result)e(in)i(some)e
-(degradation)f(of)i(gridded)g(data.)52 b(A)34 b(range)d(of)i(sc)n
-(hemes)g(is)f(therefore)h(pro)n(vided,)g(from)227 1491
-y(whic)n(h)28 b(y)n(ou)f(can)g(c)n(ho)r(ose)f(the)i(one)f(whic)n(h)h(b)
-r(est)g(suits)g(y)n(our)e(needs.)227 1614 y(In)h(general,)e(a)g
-(balance)h(m)n(ust)g(b)r(e)g(struc)n(k)f(b)r(et)n(w)n(een)i(sc)n(hemes)
-e(whic)n(h)h(tend)g(to)g(degrade)f(sharp)g(features)h(in)g(the)227
-1714 y(data)d(b)n(y)g(smo)r(othing)g(them,)i(and)f(those)f(whic)n(h)g
-(attempt)h(to)g(preserv)n(e)d(sharp)i(features.)35 b(The)24
-b(latter)f(will)g(often)227 1813 y(tend)32 b(to)g(in)n(tro)r(duce)f(un)
-n(w)n(an)n(ted)g(oscillations,)g(t)n(ypically)g(visible)g(as)g
-Ft(")p Fj(ringing)p Ft(")f Fj(around)g(sharp)h(features)g(and)227
-1913 y(edges,)j(esp)r(ecially)f(if)g(the)h(data)e(are)g(under-sampled)h
-(\(i.e.)54 b(if)33 b(the)h(sharp)r(est)e(features)h(are)f(less)g(than)i
-(ab)r(out)227 2013 y(t)n(w)n(o)27 b(pixels)h(across\).)36
-b(In)28 b(practice,)f(a)g(go)r(o)r(d)h(in)n(terp)r(olation)e(sc)n(heme)
-i(is)g(lik)n(ely)f(to)h(b)r(e)g(a)f(compromise)g(and)g(ma)n(y)227
-2112 y(exhibit)h(some)f(asp)r(ects)h(of)f(b)r(oth)h(these)g(features.)
-227 2235 y(F)-7 b(or)31 b(under-sampled)g(data,)h(some)f(in)n(terp)r
-(olation)g(sc)n(hemes)f(ma)n(y)h(app)r(ear)g(to)g(preserv)n(e)f(data)h
-(resolution)g(b)r(e-)227 2335 y(cause)25 b(they)h(transform)e(single)h
-(input)h(pixels)g(in)n(to)f(single)g(output)h(pixels,)f(rather)g(than)g
-(spreading)g(their)g(data)227 2435 y(b)r(et)n(w)n(een)j(sev)n(eral)e
-(output)j(pixels.)38 b(While)28 b(this)h(ma)n(y)e(lo)r(ok)g(b)r(etter)i
-(cosmetically)-7 b(,)27 b(it)h(can)g(result)g(in)g(a)g(geomet-)227
-2534 y(rical)e(shift)h(of)g(sharp)e(features)h(in)h(the)g(data.)36
-b(Y)-7 b(ou)26 b(should)g(b)r(ew)n(are)g(of)g(this)h(if)g(y)n(ou)f
-(plan)g(to)h(use)f(suc)n(h)g(features)227 2634 y(\(e.g.\))37
-b(for)27 b(image)g(alignmen)n(t.)227 2757 y(The)j(follo)n(wing)f(are)h
-(t)n(w)n(o)f(easy-to-use)f(sub-pixel)i(in)n(terp)r(olation)f(sc)n
-(hemes)g(whic)n(h)h(are)g(generally)e(applicable.)227
-2856 y(They)k(are)e(selected)i(b)n(y)f(supplying)g(the)h(appropriate)e
-(v)-5 b(alue)31 b(\(de\014ned)h(in)g(the)g Ft(")p Fj(ast.h)p
-Ft(")f Fj(header)f(\014le\))i(via)f(the)227 2956 y Ft(")p
-Fj(in)n(terp)p Ft(")c Fj(parameter.)35 b(In)28 b(these)g(cases,)e(the)i
-Ft(")p Fj(\014n)n(terp)p Ft(")f Fj(and)g Ft(")p Fj(params)p
-Ft(")f Fj(parameters)g(are)g(not)i(used:)340 3213 y Fi(\017)45
-b Fj(AST)p Ft(__)p Fj(NEAREST:)24 b(This)h(is)f(the)h(simplest)g(p)r
-(ossible)f(sc)n(heme,)h(in)g(whic)n(h)f(the)h(v)-5 b(alue)25
-b(of)f(the)h(input)h(pixel)427 3312 y(with)j(the)g(nearest)f(cen)n(tre)
-g(to)h(the)g(in)n(terp)r(olation)f(p)r(oin)n(t)g(is)h(used.)40
-b(This)29 b(is)f(v)n(ery)g(quic)n(k)g(to)g(execute)h(and)427
-3412 y(will)38 b(preserv)n(e)d(single-pixel)h(features)h(in)g(the)h
-(data,)h(but)f(ma)n(y)e(displace)h(them)h(b)n(y)f(up)g(to)g(half)h
-(their)427 3511 y(width)28 b(along)e(eac)n(h)h(dimension.)36
-b(It)28 b(often)g(giv)n(es)e(a)g(go)r(o)r(d)h(cosmetic)g(result,)g(so)g
-(is)g(useful)g(for)g(quic)n(k-lo)r(ok)427 3611 y(pro)r(cessing,)f(but)j
-(is)e(unsuitable)h(if)g(accurate)e(geometrical)g(transformation)g(is)i
-(required.)340 3741 y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(LINEAR:)40
-b(This)h(is)f(the)h(default)g(sc)n(heme,)j(whic)n(h)c(uses)g(linear)g
-(in)n(terp)r(olation)g(b)r(et)n(w)n(een)g(the)427 3840
-y(nearest)35 b(neigh)n(b)r(ouring)f(pixels)i(in)g(the)g(input)g(grid)f
-(\(there)h(are)e(t)n(w)n(o)h(neigh)n(b)r(ours)g(in)g(one)h(dimension,)
-427 3940 y(four)h(neigh)n(b)r(ours)f(in)i(t)n(w)n(o)f(dimensions,)i
-(eigh)n(t)e(in)h(three)f(dimensions,)i(etc.\).)67 b(It)38
-b(is)f(sup)r(erior)f(to)h(the)427 4040 y(nearest-pixel)25
-b(sc)n(heme)h(\(ab)r(o)n(v)n(e\))g(in)g(not)g(displacing)g(features)g
-(in)g(the)h(data,)f(y)n(et)g(it)h(still)f(executes)g(fairly)427
-4139 y(rapidly)-7 b(.)74 b(It)40 b(is)g(generally)e(a)i(safe)f(c)n
-(hoice)g(if)i(y)n(ou)e(do)h(not)g(ha)n(v)n(e)e(an)n(y)h(particular)g
-(reason)f(to)i(fa)n(v)n(our)427 4239 y(another)g(sc)n(heme,)k(since)c
-(it)h(cannot)g(in)n(tro)r(duce)f(oscillations.)75 b(Ho)n(w)n(ev)n(er,)
-42 b(it)f(do)r(es)g(in)n(tro)r(duce)f(some)427 4339 y(spatial)28
-b(smo)r(othing)f(whic)n(h)i(v)-5 b(aries)27 b(according)f(to)i(the)h
-(distance)f(of)g(the)h(in)n(terp)r(olation)e(p)r(oin)n(t)h(from)g(the)
-427 4438 y(neigh)n(b)r(ouring)g(pixels.)39 b(This)29
-b(can)f(degrade)f(the)i(shap)r(e)f(of)h(sharp)e(features)h(in)h(the)g
-(data)f(in)h(a)f(p)r(osition-)427 4538 y(dep)r(enden)n(t)f(w)n(a)n(y)-7
-b(.)35 b(It)27 b(ma)n(y)e(also)g(sho)n(w)h(in)g(the)h(output)g(v)-5
-b(ariance)24 b(grid)i(\(if)h(used\))f(as)g(a)g(pattern)g(of)g(strip)r
-(es)427 4637 y(or)h(fringes.)227 4796 y(An)35 b(alternativ)n(e)e(set)h
-(of)h(in)n(terp)r(olation)e(sc)n(hemes)h(is)g(based)g(on)g(forming)g
-(the)g(in)n(terp)r(olated)g(v)-5 b(alue)34 b(from)g(the)227
-4896 y(w)n(eigh)n(ted)g(sum)h(of)f(a)g(set)h(of)f(surrounding)f(pixel)i
-(v)-5 b(alues)34 b(\(not)h(necessarily)e(just)i(the)g(nearest)e(neigh)n
-(b)r(ours\).)227 4996 y(This)27 b(approac)n(h)e(has)h(its)h(origins)e
-(in)i(the)g(theory)f(of)h(digital)f(\014ltering,)h(in)f(whic)n(h)h(in)n
-(terp)r(olated)f(v)-5 b(alues)27 b(are)e(ob-)227 5095
-y(tained)f(b)n(y)g(conceptually)f(passing)g(the)h(sampled)f(data)h
-(\(represen)n(ted)e(b)n(y)i(a)f(grid)g(of)h(delta)g(functions\))g
-(through)227 5195 y(a)30 b(linear)g(\014lter)g(whic)n(h)g(implemen)n
-(ts)h(a)f(con)n(v)n(olution.)43 b(Because)29 b(the)i(con)n(v)n(olution)
-e(k)n(ernel)g(is)h(con)n(tin)n(uous,)g(the)227 5295 y(con)n(v)n
-(olution)23 b(yields)h(a)g(con)n(tin)n(uous)f(function)h(whic)n(h)g(ma)
-n(y)g(then)g(b)r(e)h(ev)-5 b(aluated)24 b(at)g(fractional)f(pixel)h(p)r
-(ositions.)227 5394 y(The)33 b(\(p)r(ossibly)g(m)n(ulti-dimensional\))f
-(k)n(ernel)g(is)h(usually)f(regarded)f(as)h Ft(")p Fj(separable)p
-Ft(")e Fj(and)i(formed)h(from)f(the)227 5494 y(pro)r(duct)22
-b(of)g(a)f(set)h(of)g(iden)n(tical)g(1-dimensional)e(k)n(ernel)h
-(functions,)i(ev)-5 b(aluated)22 b(along)f(eac)n(h)g(dimension.)35
-b(Di\013er-)227 5593 y(en)n(t)29 b(in)n(terp)r(olation)f(sc)n(hemes)h
-(are)e(then)j(distinguished)f(b)n(y)f(the)i(c)n(hoice)e(of)h(this)g
-(1-dimensional)e(in)n(terp)r(olation)227 5693 y(k)n(ernel.)36
-b(The)28 b(n)n(um)n(b)r(er)f(of)h(surrounding)e(pixels)h(whic)n(h)h
-(con)n(tribute)f(to)h(the)g(result)f(ma)n(y)g(also)f(b)r(e)i(v)-5
-b(aried.)p eop end
-%%Page: 326 336
-TeXDict begin 326 335 bop 0 52 a FF(326)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)227 351 y Fj(F)-7
-b(rom)29 b(a)f(practical)g(standp)r(oin)n(t,)h(it)h(is)f(useful)g(to)g
-(divide)g(the)g(w)n(eigh)n(ted)f(sum)h(of)g(pixel)g(v)-5
-b(alues)29 b(b)n(y)f(the)i(sum)f(of)227 451 y(the)g(w)n(eigh)n(ts)e
-(when)h(determining)g(the)h(in)n(terp)r(olated)e(v)-5
-b(alue.)38 b(Strictly)-7 b(,)29 b(this)f(means)g(that)g(a)g(true)g(con)
-n(v)n(olution)227 551 y(is)e(no)f(longer)g(b)r(eing)h(p)r(erformed.)36
-b(Ho)n(w)n(ev)n(er,)24 b(the)i(distinction)g(is)g(rarely)e(imp)r(ortan)
-n(t)h(in)h(practice)f(b)r(ecause)h(\(for)227 650 y(sligh)n(tly)e
-(subtle)h(reasons\))d(the)j(sum)f(of)g(w)n(eigh)n(ts)g(is)g(alw)n(a)n
-(ys)e(appro)n(ximately)h(constan)n(t)g(for)h(go)r(o)r(d)f(in)n(terp)r
-(olation)227 750 y(k)n(ernels.)51 b(The)33 b(adv)-5 b(an)n(tage)31
-b(of)i(this)g(tec)n(hnique,)h(whic)n(h)f(is)f(used)h(here,)h(is)e(that)
-h(it)g(can)g(easily)f(accommo)r(date)227 849 y(missing)27
-b(data)g(and)h(tends)g(to)f(minimise)h(un)n(w)n(an)n(ted)f
-(oscillations)f(at)i(the)g(edges)f(of)g(the)h(data)f(grid.)227
-980 y(In)d(the)g(follo)n(wing)e(sc)n(hemes,)h(whic)n(h)h(are)e(based)h
-(on)g(a)g(1-dimensional)f(in)n(terp)r(olation)g(k)n(ernel,)i(the)f
-(\014rst)g(elemen)n(t)227 1080 y(of)j(the)h Ft(")p Fj(params)p
-Ft(")d Fj(arra)n(y)f(should)j(b)r(e)h(used)f(to)g(sp)r(ecify)g(ho)n(w)g
-(man)n(y)f(pixels)h(are)f(to)h(con)n(tribute)g(to)g(the)g(in)n(terp)r
-(o-)227 1179 y(lated)31 b(result)g(on)f(either)h(side)g(of)f(the)i(in)n
-(terp)r(olation)e(p)r(oin)n(t)h(in)g(eac)n(h)f(dimension)g(\(the)i
-(nearest)e(in)n(teger)g(v)-5 b(alue)227 1279 y(is)27
-b(used\).)36 b(Execution)26 b(time)h(increases)e(rapidly)h(with)h(this)
-f(n)n(um)n(b)r(er.)36 b(T)n(ypically)-7 b(,)26 b(a)g(v)-5
-b(alue)27 b(of)f(2)g(is)g(appropriate)227 1379 y(and)k(the)h(minim)n
-(um)f(v)-5 b(alue)30 b(used)g(will)g(b)r(e)h(1)f(\(i.e.)44
-b(t)n(w)n(o)29 b(pixels)h(altogether,)g(one)f(on)h(either)g(side)g(of)g
-(the)g(in)n(ter-)227 1478 y(p)r(olation)h(p)r(oin)n(t\).)48
-b(A)32 b(v)-5 b(alue)31 b(of)g(zero)f(or)g(less)h(ma)n(y)f(b)r(e)i(giv)
-n(en)e(for)h Ft(")p Fj(params[0])p Ft(")d Fj(to)j(indicate)h(that)f(a)g
-(suitable)227 1578 y(n)n(um)n(b)r(er)d(of)f(pixels)h(should)f(b)r(e)h
-(calculated)f(automatically)-7 b(.)227 1709 y(In)28 b(eac)n(h)f(of)g
-(these)h(cases,)f(the)h Ft(")p Fj(\014n)n(terp)p Ft(")e
-Fj(parameter)g(is)i(not)f(used:)340 1988 y Fi(\017)45
-b Fj(AST)p Ft(__)p Fj(SINC:)27 b(This)f(sc)n(heme)g(uses)g(a)g
-(sinc\(pi)p Fi(\003)p Fj(x\))g(k)n(ernel,)g(where)g(x)g(is)g(the)h
-(pixel)f(o\013set)h(from)f(the)g(in)n(ter-)427 2088 y(p)r(olation)j(p)r
-(oin)n(t)h(and)g(sinc\(z\)=sin\(z\)/z.)42 b(This)30 b(sometimes)f
-(features)g(as)g(an)g Ft(")p Fj(optimal)p Ft(")f Fj(in)n(terp)r
-(olation)427 2187 y(k)n(ernel)35 b(in)h(b)r(o)r(oks)f(on)g(image)g(pro)
-r(cessing.)59 b(Its)36 b(supp)r(osed)f(optimalit)n(y)h(dep)r(ends)g(on)
-f(the)h(assumption)427 2287 y(that)d(the)g(data)e(are)h(band-limited)g
-(\(i.e.)52 b(ha)n(v)n(e)31 b(no)h(spatial)g(frequencies)g(ab)r(o)n(v)n
-(e)f(a)h(certain)f(v)-5 b(alue\))33 b(and)427 2387 y(are)e(adequately)g
-(sampled.)49 b(In)32 b(practice,)g(astronomical)d(data)j(rarely)e(meet)
-i(these)f(requiremen)n(ts.)48 b(In)427 2486 y(addition,)35
-b(high)e(spatial)g(frequencies)f(are)h(often)g(presen)n(t)g(due)g
-(\(e.g.\))54 b(to)33 b(image)g(defects)g(and)g(cosmic)427
-2586 y(ra)n(y)22 b(ev)n(en)n(ts.)35 b(Consequen)n(tly)-7
-b(,)24 b(substan)n(tial)e(ringing)h(can)g(b)r(e)h(exp)r(erienced)f
-(with)h(this)f(k)n(ernel.)35 b(The)24 b(k)n(ernel)427
-2686 y(also)33 b(deca)n(ys)g(slo)n(wly)g(with)i(distance,)g(so)e(that)i
-(man)n(y)e(surrounding)g(pixels)h(are)f(required,)h(leading)g(to)427
-2785 y(p)r(o)r(or)24 b(p)r(erformance.)35 b(Abruptly)25
-b(truncating)g(it,)g(b)n(y)g(using)f(only)g(a)h(few)g(neigh)n(b)r
-(ouring)e(pixels,)i(impro)n(v)n(es)427 2885 y(p)r(erformance)20
-b(and)i(ma)n(y)e(reduce)h(ringing)f(\(if)i Ft(")p Fj(params[0])p
-Ft(")d Fj(is)i(set)g(to)g(zero,)h(then)f(only)g(t)n(w)n(o)g(pixels)g
-(will)g(b)r(e)427 2984 y(used)29 b(on)g(either)f(side\).)41
-b(Ho)n(w)n(ev)n(er,)27 b(a)i(more)e(gradual)h(truncation,)g(as)h
-(implemen)n(ted)g(b)n(y)f(other)h(k)n(ernels,)427 3084
-y(is)d(generally)e(to)i(b)r(e)g(preferred.)35 b(This)26
-b(k)n(ernel)f(is)h(pro)n(vided)f(mainly)g(so)g(that)h(y)n(ou)f(can)h
-(con)n(vince)f(y)n(ourself)427 3184 y(not)j(to)f(use)h(it!)340
-3323 y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(SINCSINC:)25
-b(This)g(sc)n(heme)g(uses)f(an)h(impro)n(v)n(ed)e(k)n(ernel,)i(of)g
-(the)g(form)f(sinc\(pi)p Fi(\003)p Fj(x\).sinc\(k)p Fi(\003)p
-Fj(pi)p Fi(\003)p Fj(x\),)427 3422 y(with)32 b(k)f(a)f(constan)n(t,)h
-(out)g(to)g(the)g(p)r(oin)n(t)g(where)g(sinc\(k)p Fi(\003)p
-Fj(pi)p Fi(\003)p Fj(x\))f(go)r(es)g(to)h(zero,)f(and)h(zero)f(b)r(ey)n
-(ond.)47 b(The)427 3522 y(second)32 b(sinc\(\))i(factor)e(pro)n(vides)f
-(an)i Ft(")p Fj(en)n(v)n(elop)r(e)p Ft(")e Fj(whic)n(h)i(gradually)e
-(rolls)h(o\013)h(the)g(normal)f(sinc\(pi)p Fi(\003)p
-Fj(x\))427 3622 y(k)n(ernel)40 b(at)h(large)f(o\013sets.)76
-b(The)41 b(width)h(of)f(this)g(en)n(v)n(elop)r(e)f(is)h(sp)r(eci\014ed)
-g(b)n(y)g(giving)f(the)h(n)n(um)n(b)r(er)g(of)427 3721
-y(pixels)35 b(o\013set)g(at)g(whic)n(h)g(it)g(go)r(es)g(to)f(zero)g(b)n
-(y)h(means)g(of)g(the)g Ft(")p Fj(params[1])p Ft(")e
-Fj(v)-5 b(alue,)36 b(whic)n(h)f(should)g(b)r(e)427 3821
-y(at)d(least)f(1.0)g(\(in)h(addition,)h(setting)f Ft(")p
-Fj(params[0])p Ft(")d Fj(to)j(zero)e(will)i(select)g(the)g(n)n(um)n(b)r
-(er)g(of)f(con)n(tributing)427 3921 y(pixels)j(so)e(as)h(to)h(utilise)g
-(the)f(full)i(width)f(of)f(the)h(k)n(ernel,)g(out)g(to)f(where)g(it)h
-(reac)n(hes)e(zero\).)54 b(The)33 b(case)427 4020 y(giv)n(en)28
-b(b)n(y)h Ft(")p Fj(params[0]=2,)d(params[1]=2)p Ft(")f
-Fj(is)k(t)n(ypically)f(a)g(go)r(o)r(d)g(c)n(hoice)g(and)g(is)h
-(sometimes)f(kno)n(wn)g(as)427 4120 y(the)36 b(Lanczos)e(k)n(ernel.)60
-b(This)35 b(is)g(a)g(v)-5 b(aluable)35 b(general-purp)r(ose)e(in)n
-(terp)r(olation)i(sc)n(heme,)i(in)n(termediate)427 4219
-y(in)d(its)f(visual)g(e\013ect)h(on)f(images)f(b)r(et)n(w)n(een)h(the)h
-(AST)p Ft(__)p Fj(NEAREST)e(and)h(AST)p Ft(__)p Fj(LINEAR)g(sc)n
-(hemes.)427 4319 y(Although)i(the)f(k)n(ernel)f(is)h(sligh)n(tly)g
-(oscillatory)-7 b(,)34 b(ringing)f(is)h(adequately)f(suppressed)h(if)g
-(the)h(data)f(are)427 4419 y(w)n(ell)28 b(sampled.)340
-4558 y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(SINCCOS:)38 b(This)g(sc)n(heme)
-g(uses)g(a)g(k)n(ernel)f(of)h(the)h(form)f(sinc\(pi)p
-Fi(\003)p Fj(x\).cos\(k)p Fi(\003)p Fj(pi)p Fi(\003)p
-Fj(x\),)h(with)g(k)f(a)427 4657 y(constan)n(t,)32 b(out)f(to)g(the)h(p)
-r(oin)n(t)f(where)g(cos\(k)p Fi(\003)p Fj(pi)p Fi(\003)p
-Fj(x\))f(go)r(es)h(to)g(zero,)g(and)g(zero)f(b)r(ey)n(ond.)48
-b(As)31 b(ab)r(o)n(v)n(e,)g(the)427 4757 y(cos\(\))h(factor)f(pro)n
-(vides)f(an)h(en)n(v)n(elop)r(e)g(whic)n(h)h(gradually)e(rolls)g(o\013)
-i(the)g(sinc\(\))g(k)n(ernel)f(at)h(large)e(o\013sets.)427
-4857 y(The)e(width)h(of)e(this)h(en)n(v)n(elop)r(e)f(is)h(sp)r
-(eci\014ed)g(b)n(y)f(giving)g(the)h(n)n(um)n(b)r(er)g(of)g(pixels)f
-(o\013set)h(at)g(whic)n(h)f(it)i(go)r(es)427 4956 y(to)f(zero)e(b)n(y)h
-(means)g(of)g(the)h Ft(")p Fj(params[1])p Ft(")d Fj(v)-5
-b(alue,)27 b(whic)n(h)h(should)f(b)r(e)h(at)f(least)g(1.0)f(\(in)i
-(addition,)g(setting)427 5056 y Ft(")p Fj(params[0])p
-Ft(")37 b Fj(to)h(zero)g(will)h(select)g(the)g(n)n(um)n(b)r(er)g(of)g
-(con)n(tributing)f(pixels)g(so)h(as)f(to)h(utilise)g(the)g(full)427
-5155 y(width)33 b(of)f(the)g(k)n(ernel,)g(out)g(to)g(where)g(it)g(reac)
-n(hes)e(zero\).)50 b(This)31 b(sc)n(heme)h(giv)n(es)f(similar)g
-(results)g(to)h(the)427 5255 y(AST)p Ft(__)p Fj(SINCSINC)c(sc)n(heme,)f
-(whic)n(h)h(it)g(resem)n(bles.)340 5394 y Fi(\017)45
-b Fj(AST)p Ft(__)p Fj(SINCGA)n(USS:)35 b(This)f(sc)n(heme)f(uses)h(a)g
-(k)n(ernel)f(of)h(the)g(form)g(sinc\(pi)p Fi(\003)p Fj(x\).exp\(-k)p
-Fi(\003)p Fj(x)p Fi(\003)p Fj(x\),)g(with)h(k)427 5494
-y(a)c(p)r(ositiv)n(e)g(constan)n(t.)48 b(Here,)32 b(the)g(sinc\(\))g(k)
-n(ernel)e(is)h(rolled)g(o\013)g(using)g(a)g(Gaussian)g(en)n(v)n(elop)r
-(e)f(whic)n(h)i(is)427 5593 y(sp)r(eci\014ed)k(b)n(y)f(giving)f(its)h
-(full-width)h(at)f(half-maxim)n(um)g(\(FWHM\))i(b)n(y)e(means)f(of)i
-(the)f Ft(")p Fj(params[1])p Ft(")427 5693 y Fj(v)-5
-b(alue,)34 b(whic)n(h)f(should)f(b)r(e)h(at)f(least)h(0.1)e(\(in)j
-(addition,)f(setting)g Ft(")p Fj(params[0])p Ft(")d Fj(to)i(zero)g
-(will)h(select)f(the)p eop end
-%%Page: 327 337
-TeXDict begin 327 336 bop 3643 52 a FF(327)427 351 y
-Fj(n)n(um)n(b)r(er)22 b(of)f(con)n(tributing)g(pixels)g(so)g(as)g(to)h
-(utilise)f(the)h(width)h(of)e(the)h(k)n(ernel)f(out)g(to)h(where)f(the)
-h(en)n(v)n(elop)r(e)427 451 y(declines)k(to)f(1\045)h(of)f(its)h(maxim)
-n(um)g(v)-5 b(alue\).)36 b(On)25 b(astronomical)f(images)h(and)g(sp)r
-(ectra,)h(go)r(o)r(d)f(results)g(are)427 551 y(often)36
-b(obtained)g(b)n(y)g(appro)n(ximately)e(matc)n(hing)h(the)h(FWHM)h(of)f
-(the)g(en)n(v)n(elop)r(e)f(function,)k(giv)n(en)c(b)n(y)427
-650 y Ft(")p Fj(params[1])p Ft(")p Fj(,)29 b(to)i(the)g(p)r(oin)n(t)g
-(spread)f(function)h(of)g(the)g(input)h(data.)45 b(Ho)n(w)n(ev)n(er,)30
-b(there)h(do)r(es)f(not)h(seem)427 750 y(to)d(b)r(e)g(an)n(y)f
-(theoretical)f(reason)g(for)h(this.)340 889 y Fi(\017)45
-b Fj(AST)p Ft(__)p Fj(SOMB:)24 b(This)h(sc)n(heme)g(uses)f(a)g(som)n
-(b\(pi)p Fi(\003)p Fj(x\))h(k)n(ernel)f(\(a)g Ft(")p
-Fj(som)n(brero)p Ft(")e Fj(function\),)k(where)f(x)f(is)h(the)427
-989 y(pixel)32 b(o\013set)g(from)f(the)i(in)n(terp)r(olation)e(p)r(oin)
-n(t)h(and)f(som)n(b\(z\)=2)p Fi(\003)p Fj(J1\(z\)/z)f(\(J1)h(is)h(a)f
-(Bessel)g(function)i(of)427 1088 y(the)24 b(\014rst)g(kind)f(of)h
-(order)e(1\).)36 b(It)24 b(is)f(similar)g(to)g(the)h(AST)p
-Ft(__)p Fj(SINC)g(k)n(ernel,)g(and)f(has)g(the)h(same)f(parameter)427
-1188 y(usage.)340 1327 y Fi(\017)45 b Fj(AST)p Ft(__)p
-Fj(SOMBCOS:)30 b(This)g(sc)n(heme)g(uses)g(a)g(k)n(ernel)f(of)i(the)g
-(form)f(som)n(b\(pi)p Fi(\003)p Fj(x\).cos\(k)p Fi(\003)p
-Fj(pi)p Fi(\003)p Fj(x\),)f(with)i(k)f(a)427 1427 y(constan)n(t,)g(out)
-g(to)g(the)g(p)r(oin)n(t)g(where)f(cos\(k)p Fi(\003)p
-Fj(pi)p Fi(\003)p Fj(x\))g(go)r(es)g(to)g(zero,)h(and)g(zero)e(b)r(ey)n
-(ond.)44 b(It)30 b(is)g(similar)f(to)427 1527 y(the)f(AST)p
-Ft(__)p Fj(SINCCOS)f(k)n(ernel,)g(and)h(has)f(the)h(same)f(parameter)f
-(usage.)227 1701 y(In)i(addition,)g(the)g(follo)n(wing)e(sc)n(hemes)h
-(are)g(pro)n(vided)f(whic)n(h)i(are)e(not)i(based)f(on)g(a)g
-(1-dimensional)g(k)n(ernel:)340 1982 y Fi(\017)45 b Fj(AST)p
-Ft(__)p Fj(BLOCKA)-9 b(VE:)26 b(This)i(sc)n(heme)f(simply)h(tak)n(es)e
-(an)i(a)n(v)n(erage)c(of)k(all)f(the)h(pixels)g(on)f(the)h(input)g
-(grid)427 2082 y(in)e(a)f(cub)r(e)h(cen)n(tred)g(on)f(the)h(in)n(terp)r
-(olation)f(p)r(oin)n(t.)36 b(The)26 b(n)n(um)n(b)r(er)f(of)h(pixels)f
-(in)h(the)g(cub)r(e)g(is)f(determined)427 2181 y(b)n(y)k(the)h(v)-5
-b(alue)29 b(of)h(the)g(\014rst)f(elemen)n(t)g(of)h(the)f
-Ft(")p Fj(params)p Ft(")f Fj(arra)n(y)-7 b(,)27 b(whic)n(h)j(giv)n(es)e
-(the)i(n)n(um)n(b)r(er)f(of)g(pixels)g(in)427 2281 y(eac)n(h)24
-b(dimension)h(on)f(either)h(side)f(of)h(the)g(cen)n(tral)f(p)r(oin)n
-(t.)36 b(Hence)25 b(a)f(blo)r(c)n(k)g(of)h(\(2)f Fi(\003)g
-Fj(params[0]\))p Fi(^)p Fj(ndim)p Ft(_)p Fj(in)427 2380
-y(pixels)31 b(in)g(the)g(input)g(grid)f(will)h(b)r(e)g(examined)f(to)h
-(determine)g(the)g(v)-5 b(alue)30 b(of)h(the)g(output)g(pixel.)46
-b(If)31 b(the)427 2480 y(v)-5 b(ariance)36 b(is)g(not)h(b)r(eing)g
-(used)f(\(v)-5 b(ar)p Ft(_)p Fj(in)36 b(or)g(v)-5 b(ar)p
-Ft(_)p Fj(out)35 b(=)i(NULL\))g(then)g(all)f(v)-5 b(alid)37
-b(pixels)f(in)h(this)g(cub)r(e)427 2580 y(will)c(b)r(e)h(a)n(v)n
-(eraged)c(in)j(to)g(the)h(result)e(with)i(equal)e(w)n(eigh)n(t.)53
-b(If)33 b(v)-5 b(ariances)31 b(are)h(b)r(eing)i(used,)g(then)f(eac)n(h)
-427 2679 y(input)25 b(pixel)f(will)f(b)r(e)i(w)n(eigh)n(ted)e(prop)r
-(ortionally)e(to)j(the)g(recipro)r(cal)e(of)i(its)g(v)-5
-b(ariance;)24 b(an)n(y)e(pixel)i(without)427 2779 y(a)34
-b(v)-5 b(alid)35 b(v)-5 b(ariance)33 b(will)h(b)r(e)h(discarded.)57
-b(This)34 b(sc)n(heme)g(is)g(suitable)g(where)g(the)h(output)g(grid)f
-(is)g(m)n(uc)n(h)427 2879 y(coarser)26 b(than)j(the)g(input)g(grid;)f
-(if)h(the)g(ratio)e(of)h(pixel)h(sizes)f(is)g(R)h(then)f(a)g(suitable)h
-(v)-5 b(alue)28 b(of)g(params[0])427 2978 y(ma)n(y)f(b)r(e)h(R/2.)227
-3153 y(Finally)-7 b(,)35 b(supplying)f(the)f(follo)n(wing)g(v)-5
-b(alues)33 b(for)g Ft(")p Fj(in)n(terp)p Ft(")f Fj(allo)n(ws)h(y)n(ou)f
-(to)i(implemen)n(t)g(y)n(our)e(o)n(wn)h(sub-pixel)227
-3253 y(in)n(terp)r(olation)25 b(sc)n(heme)h(b)n(y)f(means)h(of)f(y)n
-(our)g(o)n(wn)g(function.)37 b(Y)-7 b(ou)26 b(should)f(supply)h(a)g(p)r
-(oin)n(ter)f(to)h(this)g(function)227 3352 y(via)h(the)h
-Ft(")p Fj(\014n)n(terp)p Ft(")f Fj(parameter:)340 3633
-y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(UKERN1:)38 b(In)28
-b(this)h(sc)n(heme,)f(y)n(ou)g(supply)h(a)f(function)h(to)f(ev)-5
-b(aluate)28 b(y)n(our)f(o)n(wn)h(1-dimensional)427 3732
-y(in)n(terp)r(olation)41 b(k)n(ernel,)j(whic)n(h)d(is)g(then)h(used)f
-(to)h(p)r(erform)e(sub-pixel)h(in)n(terp)r(olation)g(\(as)g(describ)r
-(ed)427 3832 y(ab)r(o)n(v)n(e\).)j(The)30 b(function)g(y)n(ou)g(supply)
-g(should)g(ha)n(v)n(e)f(the)h(same)g(in)n(terface)f(as)g(the)i
-(\014ctitious)f(astUk)n(ern1)427 3932 y(function)h(\(q.v.\).)45
-b(In)30 b(addition,)h(a)f(v)-5 b(alue)30 b(should)g(b)r(e)g(giv)n(en)g
-(via)f Ft(")p Fj(params[0])p Ft(")f Fj(to)i(sp)r(ecify)g(the)h(n)n(um)n
-(b)r(er)427 4031 y(of)25 b(neigh)n(b)r(ouring)f(pixels)g(whic)n(h)h
-(are)f(to)g(con)n(tribute)h(to)f(eac)n(h)g(in)n(terp)r(olated)g(v)-5
-b(alue)25 b(\(in)g(the)h(same)e(w)n(a)n(y)f(as)427 4131
-y(for)28 b(the)g(pre-de\014ned)g(in)n(terp)r(olation)g(sc)n(hemes)f
-(describ)r(ed)h(ab)r(o)n(v)n(e\).)37 b(Other)28 b(elemen)n(ts)g(of)g
-(the)h Ft(")p Fj(params)p Ft(")427 4231 y Fj(arra)n(y)d(are)g(a)n(v)-5
-b(ailable)26 b(to)i(pass)f(v)-5 b(alues)27 b(to)g(y)n(our)g(in)n(terp)r
-(olation)f(function.)340 4370 y Fi(\017)45 b Fj(AST)p
-Ft(__)p Fj(UINTERP:)26 b(This)h(is)f(a)g(completely)h(general)e(sc)n
-(heme,)h(in)h(whic)n(h)g(y)n(our)e(in)n(terp)r(olation)h(function)427
-4469 y(has)35 b(access)f(to)i(all)f(of)g(the)h(input)g(data.)60
-b(This)35 b(allo)n(ws)f(y)n(ou)h(to)g(implemen)n(t)h(an)n(y)f(in)n
-(terp)r(olation)f(algo-)427 4569 y(rithm)i(y)n(ou)e(c)n(ho)r(ose,)h
-(whic)n(h)g(could)g(\(for)g(example\))g(b)r(e)g(non-linear,)h(or)e
-(adaptiv)n(e.)58 b(In)35 b(this)g(case,)h(the)427 4669
-y(astResample)p Fl(<)p Fj(X)p Fl(>)e Fj(functions)i(pla)n(y)f(no)h
-(role)e(in)i(the)g(sub-pixel)g(in)n(terp)r(olation)f(pro)r(cess)f(and)i
-(simply)427 4768 y(handle)29 b(the)g(geometrical)f(transformation)f(of)
-i(co)r(ordinates)e(and)i(other)f(housek)n(eeping.)39
-b(The)29 b(function)427 4868 y(y)n(ou)c(supply)g(should)g(ha)n(v)n(e)f
-(the)h(same)g(in)n(terface)g(as)f(the)i(\014ctitious)f(astUin)n(terp)g
-(function)g(\(q.v.\).)37 b(In)25 b(this)427 4968 y(case,)e(the)f
-Ft(")p Fj(params)p Ft(")e Fj(parameter)g(is)i(not)g(used)g(b)n(y)g
-(astResample)p Fl(<)p Fj(X)p Fl(>)p Fj(,)g(but)g(is)g(a)n(v)-5
-b(ailable)21 b(to)h(pass)f(v)-5 b(alues)427 5067 y(to)28
-b(y)n(our)e(in)n(terp)r(olation)h(function.)-2 5242 y
-Fd(Con)m(trol)32 b(Flags)n(:)227 5388 y Fj(The)h(follo)n(wing)e
-(\015ags)h(are)g(de\014ned)h(in)f(the)h Ft(")p Fj(ast.h)p
-Ft(")f Fj(header)g(\014le)g(and)h(ma)n(y)f(b)r(e)h(used)f(to)h(pro)n
-(vide)e(additional)227 5488 y(con)n(trol)d(o)n(v)n(er)g(the)i
-(resampling)e(pro)r(cess.)41 b(Ha)n(ving)28 b(selected)h(a)g(set)h(of)f
-(\015ags,)g(y)n(ou)f(should)i(supply)f(the)h(bit)n(wise)227
-5587 y(OR)e(of)f(their)h(v)-5 b(alues)27 b(via)g(the)h
-Ft(")p Fj(\015ags)p Ft(")e Fj(parameter:)p eop end
-%%Page: 328 338
-TeXDict begin 328 337 bop 0 52 a FF(328)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(AST)p Ft(__)p Fj(NOBAD:)22 b(Indicates)g(that)h(an)n(y)e(output)i
-(arra)n(y)d(elemen)n(ts)i(for)f(whic)n(h)i(no)e(resampled)h(v)-5
-b(alue)22 b(could)427 451 y(b)r(e)g(obtained)f(should)h(b)r(e)f(left)i
-(set)e(to)g(the)h(v)-5 b(alue)21 b(they)h(had)f(on)h(en)n(try)e(to)i
-(this)g(function.)35 b(If)22 b(this)g(\015ag)e(is)i(not)427
-551 y(supplied,)34 b(suc)n(h)d(output)i(arra)n(y)d(elemen)n(ts)h(are)g
-(set)h(to)g(the)h(v)-5 b(alue)31 b(supplied)i(for)e(parameter)g
-Ft(")p Fj(badv)-5 b(al)p Ft(")p Fj(.)427 650 y(Note,)39
-b(this)d(\015ag)g(cannot)g(b)r(e)g(used)g(in)h(conjunction)f(with)h
-(the)g(AST)p Ft(__)p Fj(CONSER)-9 b(VEFLUX)35 b(\015ag)h(\(an)427
-750 y(error)26 b(will)i(b)r(e)g(rep)r(orted)f(if)h(b)r(oth)g(\015ags)e
-(are)h(sp)r(eci\014ed\).)340 891 y Fi(\017)45 b Fj(AST)p
-Ft(__)p Fj(URESAMP1,)27 b(2,)g(3)g(&)h(4:)36 b(A)28 b(set)g(of)f(four)g
-(\015ags)g(whic)n(h)g(are)g(reserv)n(ed)f(for)h(y)n(our)f(o)n(wn)h
-(use.)37 b(They)427 991 y(ma)n(y)32 b(b)r(e)h(used)f(to)g(pass)g(priv)
--5 b(ate)31 b(information)h(to)g(an)n(y)g(sub-pixel)g(in)n(terp)r
-(olation)f(function)i(whic)n(h)f(y)n(ou)427 1091 y(implemen)n(t)c(y)n
-(ourself.)36 b(They)28 b(are)e(ignored)h(b)n(y)g(all)g(the)h
-(pre-de\014ned)f(in)n(terp)r(olation)g(sc)n(hemes.)340
-1232 y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(USEBAD:)33 b(Indicates)g(that)h
-(there)f(ma)n(y)f(b)r(e)i(bad)f(pixels)f(in)i(the)f(input)h(arra)n
-(y\(s\))d(whic)n(h)i(m)n(ust)427 1332 y(b)r(e)27 b(recognised)f(b)n(y)g
-(comparing)g(with)h(the)g(v)-5 b(alue)27 b(giv)n(en)f(for)g
-Ft(")p Fj(badv)-5 b(al)p Ft(")26 b Fj(and)g(propagated)f(to)i(the)g
-(output)427 1432 y(arra)n(y\(s\).)35 b(If)26 b(this)h(\015ag)e(is)h
-(not)g(set,)h(all)f(input)h(v)-5 b(alues)26 b(are)f(treated)h
-(literally)f(and)h(the)h Ft(")p Fj(badv)-5 b(al)p Ft(")25
-b Fj(v)-5 b(alue)26 b(is)427 1531 y(only)h(used)h(for)f(\015agging)f
-(output)i(arra)n(y)d(v)-5 b(alues.)340 1673 y Fi(\017)45
-b Fj(AST)p Ft(__)p Fj(CONSER)-9 b(VEFLUX:)28 b(Indicates)h(that)f(the)h
-(output)h(pixel)e(v)-5 b(alues)29 b(should)f(b)r(e)h(scaled)f(in)h(suc)
-n(h)f(a)427 1773 y(w)n(a)n(y)c(as)g(to)g(preserv)n(e)f(\(appro)n
-(ximately\))g(the)i(total)g(data)f(v)-5 b(alue)25 b(in)f(a)h(feature)f
-(on)g(the)h(sky)-7 b(.)36 b(Without)25 b(this)427 1872
-y(\015ag,)k(eac)n(h)f(output)i(pixel)f(v)-5 b(alue)29
-b(represen)n(ts)f(an)g(instan)n(taneous)g(sample)h(of)g(the)h(input)f
-(data)g(v)-5 b(alues)29 b(at)427 1972 y(the)e(corresp)r(onding)d(input)
-j(p)r(osition.)36 b(This)26 b(is)g(appropriate)e(if)i(the)h(input)g
-(data)e(represen)n(ts)g(the)h(spatial)427 2071 y(densit)n(y)k(of)f
-(some)g(quan)n(tit)n(y)h(\(e.g.)43 b(surface)28 b(brigh)n(tness)h(in)h
-(Janskys)e(p)r(er)i(square)e(arc-second\))g(b)r(ecause)427
-2171 y(the)g(output)f(pixel)g(v)-5 b(alues)26 b(will)h(ha)n(v)n(e)f
-(the)h(same)g(normalisation)e(and)i(units)g(as)f(the)h(input)h(pixel)f
-(v)-5 b(alues.)427 2271 y(Ho)n(w)n(ev)n(er,)27 b(if)i(the)g(input)g
-(data)f(v)-5 b(alues)28 b(represen)n(t)f(\015ux)i(\(or)f(some)g(other)f
-(ph)n(ysical)h(quan)n(tit)n(y\))g(p)r(er)h(pixel,)427
-2370 y(then)i(the)g(AST)p Ft(__)p Fj(CONSER)-9 b(VEFLUX)30
-b(\015ag)g(could)h(b)r(e)g(used.)46 b(This)30 b(causes)g(eac)n(h)g
-(output)h(pixel)g(v)-5 b(alue)427 2470 y(to)28 b(b)r(e)g(scaled)f(b)n
-(y)g(the)h(ratio)f(of)g(the)h(output)g(pixel)g(size)f(to)h(the)g(input)
-g(pixel)g(size.)227 2649 y(This)40 b(\015ag)g(can)f(only)h(b)r(e)h
-(used)f(if)g(the)h(Mapping)f(is)g(succesfully)g(appro)n(ximated)e(b)n
-(y)i(one)g(or)f(more)g(linear)227 2749 y(transformations.)66
-b(Th)n(us)37 b(an)h(error)e(will)i(b)r(e)g(rep)r(orted)f(if)h(it)g
-(used)g(when)g(the)g Ft(")p Fj(tol)p Ft(")f Fj(parameter)f(is)i(set)g
-(to)227 2849 y(zero)f(\(whic)n(h)h(stops)f(the)h(use)f(of)h(linear)f
-(appro)n(ximations\),)h(or)f(if)h(the)g(Mapping)f(is)h(to)r(o)f
-(non-linear)g(to)g(b)r(e)227 2948 y(appro)n(ximated)f(b)n(y)h(a)f
-(piece-wise)h(linear)f(transformation.)64 b(The)37 b(ratio)f(of)h
-(output)h(to)f(input)h(pixel)f(size)g(is)227 3048 y(ev)-5
-b(aluated)19 b(once)h(for)f(eac)n(h)f(panel)i(of)f(the)h(piece-wise)f
-(linear)g(appro)n(ximation)e(to)j(the)g(Mapping,)g(and)g(is)f(assumed)
-227 3148 y(to)33 b(b)r(e)h(constan)n(t)f(for)g(all)g(output)g(pixels)g
-(in)h(the)g(panel.)54 b(The)33 b(scaling)f(factors)g(for)h(adjacen)n(t)
-g(panels)g(will)g(in)227 3247 y(general)f(di\013er)h(sligh)n(tly)-7
-b(,)34 b(and)e(so)h(the)g(join)n(ts)g(b)r(et)n(w)n(een)g(panels)f(ma)n
-(y)g(b)r(e)i(visible)e(when)h(viewing)g(the)g(output)227
-3347 y(image)i(at)g(high)h(con)n(trast.)59 b(If)36 b(this)f(is)h(a)f
-(problem,)i(reduce)e(the)g(v)-5 b(alue)36 b(of)f(the)h
-Ft(")p Fj(tol)p Ft(")e Fj(parameter)g(un)n(til)i(the)227
-3446 y(di\013erence)28 b(b)r(et)n(w)n(een)f(adjacen)n(t)g(panels)h(is)f
-(su\016cien)n(tly)h(small)f(to)g(b)r(e)h(insigni\014can)n(t.)227
-3580 y(Note,)22 b(this)e(\015ag)f(cannot)g(b)r(e)h(used)g(in)g
-(conjunction)g(with)g(the)h(AST)p Ft(__)p Fj(NOBAD)e(\015ag)g(\(an)h
-(error)e(will)i(b)r(e)g(rep)r(orted)227 3679 y(if)28
-b(b)r(oth)g(\015ags)f(are)g(sp)r(eci\014ed\).)227 3813
-y(Flux)h(conserv)-5 b(ation)26 b(can)h(only)h(b)r(e)g(appro)n(ximate)e
-(when)h(using)h(a)f(resampling)f(algorithm.)36 b(F)-7
-b(or)27 b(accurate)f(\015ux)227 3912 y(conserv)-5 b(ation)26
-b(use)i(the)g(astRebin)p Fl(<)p Fj(X)p Fl(>)f Fj(or)f(astRebinSeq)p
-Fl(<)p Fj(X)p Fl(>)h Fj(function)h(instead.)-2 4080 y
-Fd(Propagation)33 b(of)e(Missing)f(Data)n(:)227 4226
-y Fj(Unless)j(the)g(AST)p Ft(__)p Fj(NOBAD)g(\015ag)f(is)h(sp)r
-(eci\014ed,)i(instances)d(of)h(missing)f(data)h(\(bad)g(pixels\))g(in)g
-(the)g(output)227 4325 y(grid)23 b(are)f(iden)n(ti\014ed)h(b)n(y)g(o)r
-(ccurrences)e(of)i(the)h Ft(")p Fj(badv)-5 b(al)p Ft(")22
-b Fj(v)-5 b(alue)22 b(in)i(the)f Ft(")p Fj(out)p Ft(")f
-Fj(arra)n(y)-7 b(.)33 b(These)23 b(ma)n(y)f(b)r(e)i(pro)r(duced)227
-4425 y(if)k(an)n(y)f(of)h(the)g(follo)n(wing)e(happ)r(en:)340
-4712 y Fi(\017)45 b Fj(The)35 b(input)h(p)r(osition)f(\(the)h
-(transformed)e(p)r(osition)h(of)g(the)g(output)h(pixel's)f(cen)n(tre\))
-f(lies)h(outside)g(the)427 4812 y(b)r(oundary)27 b(of)h(the)g(grid)f
-(of)g(input)h(pixels.)340 4954 y Fi(\017)45 b Fj(The)32
-b(input)h(p)r(osition)e(lies)h(inside)g(the)g(b)r(oundary)f(of)g(a)h
-(bad)f(input)i(pixel.)49 b(In)32 b(this)g(con)n(text,)g(an)g(input)427
-5053 y(pixel)h(is)g(considered)f(bad)h(if)h(its)f(data)g(v)-5
-b(alue)33 b(is)g(equal)f(to)h Ft(")p Fj(badv)-5 b(al)p
-Ft(")32 b Fj(and)h(the)g(AST)p Ft(__)p Fj(USEBAD)g(\015ag)427
-5153 y(is)f(set)g(via)f(the)h Ft(")p Fj(\015ags)p Ft(")e
-Fj(parameter.)48 b(\(P)n(ositions)30 b(whic)n(h)i(ha)n(v)n(e)e(half-in)
-n(tegral)h(co)r(ordinate)f(v)-5 b(alues,)33 b(and)427
-5252 y(therefore)c(lie)g(on)h(a)f(pixel)g(b)r(oundary)-7
-b(,)30 b(are)e(regarded)g(as)h(lying)g(within)h(the)g(pixel)f(with)h
-(the)g(larger,)e(i.e.)427 5352 y(more)f(p)r(ositiv)n(e,)g(index.\))340
-5494 y Fi(\017)45 b Fj(The)27 b(set)g(of)g(neigh)n(b)r(ouring)e(input)j
-(pixels)f(\(excluding)f(those)h(whic)n(h)g(are)e(bad\))i(is)g
-(unsuitable)g(for)f(calcu-)427 5593 y(lating)g(an)f(in)n(terp)r(olated)
-h(v)-5 b(alue.)36 b(Whether)26 b(this)g(is)g(true)f(ma)n(y)h(dep)r(end)
-g(on)g(the)g(sub-pixel)f(in)n(terp)r(olation)427 5693
-y(sc)n(heme)i(in)h(use.)p eop end
-%%Page: 329 339
-TeXDict begin 329 338 bop 3643 52 a FF(329)340 351 y
-Fi(\017)45 b Fj(The)31 b(in)n(terp)r(olated)g(v)-5 b(alue)31
-b(lies)g(outside)g(the)g(range)f(whic)n(h)h(can)g(b)r(e)h(represen)n
-(ted)d(using)i(the)h(data)e(t)n(yp)r(e)427 451 y(of)e(the)g
-Ft(")p Fj(out)p Ft(")f Fj(arra)n(y)-7 b(.)227 617 y(In)29
-b(addition,)f(asso)r(ciated)f(output)i(v)-5 b(ariance)27
-b(estimates)h(\(if)i(calculated\))e(ma)n(y)f(b)r(e)i(declared)e(bad)i
-(and)f(\015agged)227 716 y(with)g(the)g Ft(")p Fj(badv)-5
-b(al)p Ft(")27 b Fj(v)-5 b(alue)27 b(in)h(the)g Ft(")p
-Fj(out)p Ft(_)p Fj(v)-5 b(ar)p Ft(")26 b Fj(arra)n(y)f(under)i(an)n(y)g
-(of)h(the)g(follo)n(wing)e(circumstances:)340 983 y Fi(\017)45
-b Fj(The)28 b(asso)r(ciated)e(resampled)h(data)g(v)-5
-b(alue)28 b(\(in)g(the)g Ft(")p Fj(out)p Ft(")e Fj(arra)n(y\))g(is)h
-(bad.)340 1118 y Fi(\017)45 b Fj(The)19 b(set)g(of)g(neigh)n(b)r
-(ouring)e(input)j(pixels)e(whic)n(h)h(con)n(tributed)g(to)f(the)i
-(output)f(data)f(v)-5 b(alue)19 b(do)f(not)h(all)g(ha)n(v)n(e)427
-1218 y(v)-5 b(alid)34 b(v)-5 b(ariance)32 b(estimates)h(asso)r(ciated)f
-(with)h(them.)55 b(In)33 b(this)h(con)n(text,)g(an)f(input)i(v)-5
-b(ariance)32 b(estimate)427 1317 y(ma)n(y)d(b)r(e)h(regarded)e(as)h
-(bad)h(either)f(b)r(ecause)g(it)i(has)e(the)h(v)-5 b(alue)29
-b Ft(")p Fj(badv)-5 b(al)p Ft(")29 b Fj(\(and)h(the)g(AST)p
-Ft(__)p Fj(USEBAD)427 1417 y(\015ag)d(is)h(set\),)g(or)e(b)r(ecause)h
-(it)h(is)g(negativ)n(e.)340 1552 y Fi(\017)45 b Fj(The)23
-b(set)f(of)h(neigh)n(b)r(ouring)e(input)i(pixels)g(for)f(whic)n(h)g(v)
--5 b(alid)23 b(v)-5 b(ariance)21 b(v)-5 b(alues)22 b(are)g(a)n(v)-5
-b(ailable)21 b(is)h(unsuitable)427 1651 y(for)30 b(calculating)f(an)g
-(o)n(v)n(erall)f(v)-5 b(ariance)28 b(v)-5 b(alue.)44
-b(Whether)30 b(this)g(is)g(true)g(ma)n(y)f(dep)r(end)h(on)g(the)g
-(sub-pixel)427 1751 y(in)n(terp)r(olation)d(sc)n(heme)g(in)h(use.)340
-1886 y Fi(\017)45 b Fj(The)25 b(v)-5 b(ariance)23 b(v)-5
-b(alue)25 b(lies)f(outside)h(the)g(range)e(whic)n(h)i(can)f(b)r(e)h
-(represen)n(ted)e(using)i(the)g(data)f(t)n(yp)r(e)h(of)f(the)427
-1985 y Ft(")p Fj(out)p Ft(_)p Fj(v)-5 b(ar)p Ft(")26
-b Fj(arra)n(y)-7 b(.)227 2151 y(If)22 b(the)f(AST)p Ft(__)p
-Fj(NOBAD)h(\015ag)e(is)h(sp)r(eci\014ed)g(via)g(parameter)f
-Ft(")p Fj(\015ags)p Ft(")p Fj(,)g(then)i(output)g(arra)n(y)d(elemen)n
-(ts)i(that)g(w)n(ould)227 2251 y(otherwise)27 b(b)r(e)h(set)f(to)h
-Ft(")p Fj(badv)-5 b(al)p Ft(")26 b Fj(are)h(instead)g(left)h(holding)f
-(the)h(v)-5 b(alue)28 b(they)f(had)h(on)f(en)n(try)g(to)g(this)h
-(function.)227 2351 y(The)g(n)n(um)n(b)r(er)f(of)h(suc)n(h)f(arra)n(y)e
-(elemen)n(ts)j(is)f(returned)g(as)g(the)h(function)h(v)-5
-b(alue.)p 0 2554 3780 12 v 0 2685 a Fz(astResolv)l(e)335
-b Fe(Resolv)m(e)38 b(a)g(v)m(ector)f(in)m(to)h(t)m(w)m(o)f(orthogonal)
-1587 2785 y(comp)s(onen)m(ts)3161 2685 y Fz(astResolv)l(e)0
-2978 y Fd(Description:)44 b Fj(This)c(function)h(resolv)n(es)c(a)j(v)n
-(ector)e(in)n(to)i(t)n(w)n(o)f(p)r(erp)r(endicular)g(comp)r(onen)n(ts.)
-74 b(The)39 b(v)n(ector)g(from)227 3077 y(p)r(oin)n(t)30
-b(1)f(to)g(p)r(oin)n(t)h(2)f(is)g(used)h(as)f(the)g(basis)g(v)n(ector.)
-41 b(The)30 b(v)n(ector)e(from)h(p)r(oin)n(t)h(1)f(to)g(p)r(oin)n(t)h
-(3)f(is)g(resolv)n(ed)f(in)n(to)227 3177 y(comp)r(onen)n(ts)33
-b(parallel)f(and)h(p)r(erp)r(endicular)f(to)h(this)h(basis)e(v)n
-(ector.)52 b(The)33 b(lengths)g(of)g(the)h(t)n(w)n(o)e(comp)r(onen)n
-(ts)227 3277 y(are)27 b(returned,)g(together)g(with)h(the)g(p)r
-(osition)f(of)h(closest)f(aproac)n(h)e(of)j(the)g(basis)f(v)n(ector)f
-(to)h(p)r(oin)n(t)h(3.)0 3430 y Fd(Synopsis:)121 b Ft(void)42
-b(astResolve\()d(AstFrame)h Fi(\003)p Ft(this,)h(const)h(double)f
-(point1[],)f(const)h(double)g(point2[],)227 3530 y(const)h(double)f
-(point3[],)f(double)h(point4[],)f(double)h Fi(\003)p
-Ft(d1,)h(double)f Fi(\003)p Ft(d2)h(\);)0 3683 y Fd(P)m(arameters:)259
-3823 y(this)427 3923 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)259 4058 y Fd(p)s(oin)m(t1)427 4158 y Fj(An)27
-b(arra)n(y)d(of)j(double,)f(with)h(one)f(elemen)n(t)h(for)f(eac)n(h)f
-(F)-7 b(rame)26 b(axis)g(\(Naxes)g(attribute\).)37 b(This)26
-b(marks)f(the)427 4257 y(start)i(of)h(the)g(basis)f(v)n(ector,)f(and)h
-(of)h(the)g(v)n(ector)e(to)i(b)r(e)g(resolv)n(ed.)259
-4392 y Fd(p)s(oin)m(t2)427 4492 y Fj(An)f(arra)n(y)d(of)j(double,)f
-(with)h(one)f(elemen)n(t)h(for)f(eac)n(h)f(F)-7 b(rame)26
-b(axis)g(\(Naxes)g(attribute\).)37 b(This)26 b(marks)f(the)427
-4591 y(end)j(of)g(the)g(basis)e(v)n(ector.)259 4726 y
-Fd(p)s(oin)m(t3)427 4826 y Fj(An)h(arra)n(y)d(of)j(double,)f(with)h
-(one)f(elemen)n(t)h(for)f(eac)n(h)f(F)-7 b(rame)26 b(axis)g(\(Naxes)g
-(attribute\).)37 b(This)26 b(marks)f(the)427 4925 y(end)j(of)g(the)g(v)
-n(ector)e(to)h(b)r(e)h(resolv)n(ed.)259 5060 y Fd(p)s(oin)m(t4)427
-5160 y Fj(An)34 b(arra)n(y)e(of)i(double,)h(with)f(one)f(elemen)n(t)h
-(for)f(eac)n(h)g(F)-7 b(rame)34 b(axis)e(in)i(whic)n(h)g(the)g(co)r
-(ordinates)f(of)g(the)427 5259 y(p)r(oin)n(t)28 b(of)g(closest)e
-(approac)n(h)g(of)i(the)g(basis)f(v)n(ector)f(to)h(p)r(oin)n(t)h(3)f
-(will)h(b)r(e)g(returned.)259 5394 y Fd(d1)427 5494 y
-Fj(The)d(address)e(of)h(a)g(lo)r(cation)g(at)h(whic)n(h)f(to)g(return)g
-(the)h(distance)f(from)g(p)r(oin)n(t)h(1)f(to)g(p)r(oin)n(t)h(4)f
-(\(that)h(is,)g(the)427 5593 y(length)31 b(of)f(the)h(comp)r(onen)n(t)f
-(parallel)f(to)h(the)h(basis)f(v)n(ector\).)44 b(P)n(ositiv)n(e)29
-b(v)-5 b(alues)30 b(are)f(in)i(the)f(same)g(sense)427
-5693 y(as)d(mo)n(v)n(emen)n(t)g(from)g(p)r(oin)n(t)h(1)f(to)h(p)r(oin)n
-(t)f(2.)p eop end
-%%Page: 330 340
-TeXDict begin 330 339 bop 0 52 a FF(330)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(d2)427
-451 y Fj(The)25 b(address)e(of)h(a)g(lo)r(cation)g(at)h(whic)n(h)f(to)g
-(return)g(the)h(distance)f(from)g(p)r(oin)n(t)h(4)f(to)g(p)r(oin)n(t)h
-(3)f(\(that)h(is,)g(the)427 551 y(length)j(of)g(the)f(comp)r(onen)n(t)h
-(p)r(erp)r(endicular)f(to)h(the)g(basis)e(v)n(ector\).)36
-b(The)28 b(v)-5 b(alue)27 b(is)h(alw)n(a)n(ys)e(p)r(ositiv)n(e.)0
-717 y Fd(Notes:)340 1005 y Fi(\017)45 b Fj(Eac)n(h)36
-b(v)n(ector)g(used)h(in)h(this)f(function)h(is)f(the)h(path)f(of)g
-(shortest)f(distance)h(b)r(et)n(w)n(een)g(t)n(w)n(o)g(p)r(oin)n(ts,)i
-(as)427 1104 y(de\014ned)28 b(b)n(y)g(the)g(astDistance)f(function.)340
-1240 y Fi(\017)45 b Fj(This)19 b(function)g(will)g(return)f
-Ft(")p Fj(bad)p Ft(")g Fj(co)r(ordinate)g(v)-5 b(alues)18
-b(\(AST)p Ft(__)p Fj(BAD\))i(if)f(an)n(y)f(of)g(the)i(input)f(co)r
-(ordinates)427 1339 y(has)27 b(this)h(v)-5 b(alue,)28
-b(or)e(if)j(the)f(required)e(output)i(v)-5 b(alues)28
-b(are)e(unde\014ned.)p 0 1544 3780 12 v 0 1675 a Fz(astRetainFits)218
-b Fe(Indicate)38 b(that)g(the)h(curren)m(t)e(card)h(in)h(a)1160
-1775 y(FitsChan)f(should)g(b)s(e)h(retained)2990 1675
-y Fz(astRetainFits)0 1945 y Fd(Description:)44 b Fj(This)26
-b(function)h(stores)d(a)i(\015ag)f(with)h(the)g(curren)n(t)f(card)g(in)
-h(the)h(FitsChan)e(indicating)h(that)g(the)g(card)227
-2045 y(should)20 b(not)h(b)r(e)g(remo)n(v)n(ed)e(from)h(the)g(FitsChan)
-h(when)g(an)f(Ob)5 b(ject)20 b(is)g(read)g(from)g(the)h(FitsChan)f
-(using)g(astRead.)227 2172 y(Cards)j(that)i(ha)n(v)n(e)e(not)h(b)r(een)
-g(\015agged)f(in)i(this)f(w)n(a)n(y)f(are)g(remo)n(v)n(ed)f(when)j(a)e
-(read)h(op)r(eration)f(completes)h(succes-)227 2272 y(fully)-7
-b(,)27 b(but)f(only)g(if)g(the)g(card)f(w)n(as)f(used)i(in)g(the)g(pro)
-r(cess)e(of)i(creating)f(the)h(returned)f(AST)h(Ob)5
-b(ject.)36 b(An)n(y)26 b(cards)227 2371 y(that)g(are)e(irrelev)-5
-b(an)n(t)24 b(to)i(the)f(creation)g(of)g(the)h(AST)f(Ob)5
-b(ject)26 b(are)e(retained)h(whether)g(or)g(not)g(they)g(are)g
-(\015agged.)0 2526 y Fd(Synopsis:)121 b Ft(void)42 b(astRetainFits\()c
-(AstFitsChan)h Fi(\003)p Ft(this)i(\))0 2680 y Fd(P)m(arameters:)259
-2822 y(this)427 2921 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)0
-3088 y Fd(Notes:)340 3376 y Fi(\017)45 b Fj(This)23 b(function)f
-(returns)g(without)h(action)e(if)i(the)g(FitsChan)f(is)h(initially)f(p)
-r(ositioned)g(at)g(the)h Ft(")p Fj(end-of-\014le)p Ft(")427
-3475 y Fj(\(i.e.)38 b(if)28 b(the)g(Card)e(attribute)i(exceeds)f(the)h
-(n)n(um)n(b)r(er)f(of)h(cards)e(in)i(the)g(FitsChan\).)340
-3610 y Fi(\017)45 b Fj(The)28 b(curren)n(t)f(card)f(is)i(not)f(c)n
-(hanged)g(b)n(y)g(this)h(function.)p 0 3815 V 0 3945
-a Fz(astSame)800 3946 y Fe(T)-10 b(est)38 b(if)g(t)m(w)m(o)f(AST)i(p)s
-(oin)m(ters)e(refer)h(to)g(the)h(same)1716 4061 y(Ob)7
-b(ject)3295 3945 y Fz(astSame)0 4259 y Fd(Description:)44
-b Fj(This)30 b(function)h(returns)e(a)h(b)r(o)r(olean)f(result)h(\(0)g
-(or)f(1\))h(to)g(indicate)g(whether)g(t)n(w)n(o)f(p)r(oin)n(ters)g
-(refer)h(to)227 4359 y(the)e(same)f(Ob)5 b(ject.)0 4513
-y Fd(Synopsis:)121 b Ft(int)42 b(astSame\()e(AstObject)g
-Fi(\003)p Ft(this,)h(AstObject)f Fi(\003)p Ft(that)i(\))0
-4668 y Fd(P)m(arameters:)259 4809 y(this)427 4909 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(\014rst)f(Ob)5 b(ject.)259 5044 y Fd(that)427
-5144 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(second)f(Ob)5
-b(ject.)0 5311 y Fd(Class)31 b(Applicabilit)m(y:)259
-5452 y(Ob)5 b(ject)427 5552 y Fj(This)28 b(function)g(applies)f(to)h
-(all)f(Ob)5 b(jects.)0 5718 y Fd(Returned)32 b(V)-8 b(alue:)p
-eop end
-%%Page: 331 341
-TeXDict begin 331 340 bop 3643 52 a FF(331)259 351 y
-Fd(astSame\(\))427 451 y Fj(One)28 b(if)g(the)g(t)n(w)n(o)e(p)r(oin)n
-(ters)h(refer)g(to)h(the)g(same)f(Ob)5 b(ject,)27 b(otherwise)g(zero.)0
-605 y Fd(Notes:)340 879 y Fi(\017)45 b Fj(Tw)n(o)37 b(indep)r(enden)n
-(t)h(Ob)5 b(jects)37 b(that)g(happ)r(en)h(to)f(b)r(e)h(iden)n(tical)f
-(are)f(not)h(considered)g(to)g(b)r(e)h(the)f(same)427
-979 y(Ob)5 b(ject)28 b(b)n(y)f(this)h(function.)340 1103
-y Fi(\017)45 b Fj(A)29 b(v)-5 b(alue)29 b(of)f(zero)g(will)h(b)r(e)g
-(returned)f(if)h(this)g(function)g(is)f(in)n(v)n(ok)n(ed)f(with)j(the)f
-(AST)g(error)d(status)j(set,)f(or)427 1203 y(if)g(it)g(should)g(fail)f
-(for)h(an)n(y)e(reason.)p 0 1386 3780 12 v 0 1518 a Fz(astSelectorMap)
-429 b Fe(Create)38 b(a)g(SelectorMap)426 b Fz(astSelectorMap)0
-1690 y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(SelectorMap)g(and)g(optionally)g(initialises)g(its)h(attributes.)227
-1811 y(A)g(SelectorMap)f(is)g(a)g(Mapping)h(that)g(iden)n(ti\014es)f
-(whic)n(h)h(Region)f(con)n(tains)f(a)i(giv)n(en)e(input)j(p)r(osition.)
-227 1931 y(A)40 b(SelectorMap)e(encapsulates)h(a)g(n)n(um)n(b)r(er)g
-(of)g(Regions)f(that)i(all)f(ha)n(v)n(e)f(the)i(same)f(n)n(um)n(b)r(er)
-g(of)g(axes)g(and)227 2031 y(represen)n(t)31 b(the)h(same)f(co)r
-(ordinate)g(F)-7 b(rame.)49 b(The)32 b(n)n(um)n(b)r(er)g(of)f(inputs)i
-(\(Nin)f(attribute\))h(of)e(the)i(SelectorMap)227 2130
-y(equals)24 b(the)h(n)n(um)n(b)r(er)f(of)g(axes)f(spanned)h(b)n(y)g
-(one)g(of)h(the)f(encapsulated)g(Region.)35 b(All)25
-b(SelectorMaps)e(ha)n(v)n(e)g(only)227 2230 y(a)k(single)h(output.)37
-b(SelectorMaps)26 b(do)i(not)f(de\014ne)h(an)f(in)n(v)n(erse)f
-(transformation.)227 2351 y(F)-7 b(or)36 b(eac)n(h)f(input)i(p)r
-(osition,)h(the)e(forw)n(ard)e(transformation)h(of)h(a)f(SelectorMap)g
-(searc)n(hes)f(through)h(the)i(en-)227 2450 y(capsulated)d(Regions)f
-(\(in)i(the)g(order)e(supplied)i(when)f(the)h(SelectorMap)e(w)n(as)h
-(created\))f(un)n(til)i(a)f(Region)g(is)227 2550 y(found)27
-b(whic)n(h)g(con)n(tains)f(the)h(input)g(p)r(osition.)36
-b(The)27 b(index)g(asso)r(ciated)e(with)i(this)g(Region)f(is)h
-(returned)f(as)g(the)227 2649 y(SelectorMap)h(output)h(v)-5
-b(alue)27 b(\(the)h(index)g(v)-5 b(alue)27 b(is)h(the)g(p)r(osition)f
-(of)h(the)f(Region)g(within)h(the)g(list)g(of)g(Regions)227
-2749 y(supplied)c(when)g(the)g(SelectorMap)f(w)n(as)g(created,)g
-(starting)g(at)h(1)f(for)g(the)h(\014rst)g(Region\).)35
-b(If)24 b(an)f(input)i(p)r(osition)227 2849 y(is)j(not)f(con)n(tained)g
-(within)i(an)n(y)d(Region,)h(a)h(v)-5 b(alue)27 b(of)h(zero)e(is)i
-(returned)f(b)n(y)g(the)h(forw)n(ard)e(transformation.)227
-2969 y(If)35 b(a)e(comp)r(ound)h(Mapping)g(con)n(tains)f(a)h
-(SelectorMap)f(in)h(series)f(with)i(its)f(o)n(wn)g(in)n(v)n(erse,)g
-(the)g(com)n(bination)227 3069 y(of)29 b(the)f(t)n(w)n(o)g(adjacen)n(t)
-g(SelectorMaps)f(will)h(b)r(e)h(replaced)e(b)n(y)h(a)g(UnitMap)h(when)g
-(the)f(comp)r(ound)h(Mapping)f(is)227 3168 y(simpli\014ed)g(using)g
-(astSimplify)-7 b(.)227 3289 y(In)28 b(practice,)f(SelectorMaps)f(are)h
-(often)h(used)f(in)h(conjunction)g(with)g(Switc)n(hMaps.)0
-3430 y Fd(Synopsis:)121 b Ft(AstSelectorMap)38 b Fi(\003)p
-Ft(astSelectorMap)o(\()g(int)k(nreg,)f(AstRegion)f Fi(\003)p
-Ft(regs[],)g(double)i(badval,)e(const)227 3530 y(char)i
-Fi(\003)p Ft(options,)e(...)86 b(\))0 3671 y Fd(P)m(arameters:)259
-3799 y(nreg)427 3899 y Fj(The)28 b(n)n(um)n(b)r(er)f(of)h(supplied)g
-(Regions.)259 4024 y Fd(regs)427 4123 y Fj(An)41 b(arra)n(y)d(of)j(p)r
-(oin)n(ters)f(to)g(the)h(Regions.)74 b(All)41 b(the)g(supplied)g
-(Regions)f(m)n(ust)g(relate)g(to)g(the)h(same)427 4223
-y(co)r(ordinate)23 b(F)-7 b(rame.)35 b(The)23 b(n)n(um)n(b)r(er)g(of)h
-(axes)e(in)i(this)g(co)r(ordinate)e(F)-7 b(rame)23 b(de\014nes)h(the)f
-(n)n(um)n(b)r(er)h(of)f(inputs)427 4323 y(for)k(the)h(SelectorMap.)259
-4447 y Fd(badv)-5 b(al)427 4547 y Fj(The)35 b(v)-5 b(alue)34
-b(to)g(b)r(e)h(returned)e(b)n(y)h(the)h(forw)n(ard)e(transformation)f
-(of)j(the)f(SelectorMap)g(for)f(an)n(y)h(input)427 4647
-y(p)r(ositions)27 b(that)h(ha)n(v)n(e)f(a)g(bad)g(\(AST)p
-Ft(__)p Fj(BAD\))i(v)-5 b(alue)27 b(on)g(an)n(y)g(axis.)259
-4771 y Fd(options)427 4871 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 4971 y(assignmen)n(ts)34
-b(to)h(b)r(e)h(used)f(for)g(initialising)g(the)h(new)f(SelectorMap.)59
-b(The)35 b(syn)n(tax)f(used)i(is)f(iden)n(tical)427 5070
-y(to)29 b(that)h(for)f(the)g(astSet)g(function)h(and)f(ma)n(y)g
-(include)g Ft(")p Fj(prin)n(tf)p Ft(")g Fj(format)g(sp)r(eci\014ers)f
-(iden)n(ti\014ed)i(b)n(y)f Ft(")p Fj(\045)p Ft(")427
-5170 y Fj(sym)n(b)r(ols)e(in)h(the)g(normal)f(w)n(a)n(y)-7
-b(.)259 5295 y Fd(...)427 5394 y Fj(If)38 b(the)g Ft(")p
-Fj(options)p Ft(")e Fj(string)h(con)n(tains)f Ft(")p
-Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g
-(list)h(of)f(additional)427 5494 y(argumen)n(ts)26 b(ma)n(y)h(follo)n
-(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5 b(alues)27
-b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)37
-b(The)427 5593 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 5693 y Fj(function\).)p
-eop end
-%%Page: 332 342
-TeXDict begin 332 341 bop 0 52 a FF(332)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Returned)i(V)-8
-b(alue:)259 487 y(astSelectorMap\(\))427 587 y Fj(A)28
-b(p)r(oin)n(ter)f(to)h(the)g(new)g(SelectorMap.)0 749
-y Fd(Notes:)340 1031 y Fi(\017)45 b Fj(Deep)22 b(copies)f(are)f(tak)n
-(en)h(of)g(the)h(supplied)g(Regions.)33 b(This)22 b(means)f(that)g(an)n
-(y)g(subsequen)n(t)g(c)n(hanges)f(made)427 1131 y(to)k(the)h(comp)r
-(onen)n(t)f(Regions)f(using)h(the)g(supplied)h(p)r(oin)n(ters)e(will)i
-(ha)n(v)n(e)e(no)g(e\013ect)i(on)f(the)h(SelectorMap.)340
-1263 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35
-b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g
-(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427
-1363 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)p 0 1562 3780 12 v 0 1693 a Fz(astSet)1023
-1694 y Fe(Set)38 b(attribute)f(v)-7 b(alues)38 b(for)g(an)h(Ob)7
-b(ject)3420 1693 y Fz(astSet)0 1882 y Fd(Description:)44
-b Fj(This)39 b(function)h(assigns)d(a)i(set)g(of)g(attribute)g(v)-5
-b(alues)39 b(to)g(an)f(Ob)5 b(ject,)42 b(o)n(v)n(er-riding)36
-b(an)n(y)j(previous)227 1982 y(v)-5 b(alues.)68 b(The)38
-b(attributes)f(and)h(their)g(new)g(v)-5 b(alues)37 b(are)g(sp)r
-(eci\014ed)i(via)e(a)g(c)n(haracter)f(string,)k(whic)n(h)e(should)227
-2081 y(con)n(tain)27 b(a)g(comma-separated)f(list)h(of)h(the)g(form:)
-227 2206 y Ft(")p Fj(attribute)p Ft(_)p Fj(1)f(=)g(v)-5
-b(alue)p Ft(_)p Fj(1,)27 b(attribute)p Ft(_)p Fj(2)f(=)i(v)-5
-b(alue)p Ft(_)p Fj(2,)26 b(...)37 b Ft(")227 2330 y Fj(where)22
-b Ft(")p Fj(attribute)p Ft(_)p Fj(n)p Ft(")g Fj(sp)r(eci\014es)g(an)h
-(attribute)f(name,)i(and)e(the)h(v)-5 b(alue)23 b(to)f(the)h(righ)n(t)f
-(of)h(eac)n(h)e Ft(")p Fj(=)p Ft(")h Fj(sign)g(should)227
-2430 y(b)r(e)36 b(a)f(suitable)h(textual)f(represen)n(tation)f(of)h
-(the)h(v)-5 b(alue)35 b(to)h(b)r(e)g(assigned.)59 b(This)35
-b(v)-5 b(alue)36 b(will)f(b)r(e)h(in)n(terpreted)227
-2529 y(according)26 b(to)i(the)g(attribute's)f(data)g(t)n(yp)r(e.)227
-2654 y(The)d(string)e(supplied)i(ma)n(y)f(also)f(con)n(tain)h
-Ft(")p Fj(prin)n(tf)p Ft(")p Fj(-st)n(yle)f(format)h(sp)r(eci\014ers,)g
-(iden)n(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(signs)g(in)g(the)
-227 2754 y(usual)g(w)n(a)n(y)-7 b(.)35 b(If)24 b(presen)n(t,)f(these)h
-(will)f(b)r(e)h(substituted)h(b)n(y)e(v)-5 b(alues)23
-b(supplied)h(as)e(additional)h(optional)g(argumen)n(ts)227
-2853 y(\(using)28 b(the)g(normal)e Ft(")p Fj(prin)n(tf)p
-Ft(")h Fj(rules\))h(b)r(efore)f(the)h(string)f(is)g(used.)0
-3002 y Fd(Synopsis:)121 b Ft(void)42 b(astSet\()e(AstObject)g
-Fi(\003)p Ft(this,)h(const)h(char)g Fi(\003)p Ft(settings,)d(...)86
-b(\))0 3152 y Fd(P)m(arameters:)259 3288 y(this)427 3388
-y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject.)259 3520
-y Fd(settings)427 3620 y Fj(P)n(oin)n(ter)27 b(to)i(a)g(n)n
-(ull-terminated)f(c)n(haracter)f(string)h(con)n(taining)g(a)g
-(comma-separated)f(list)i(of)f(attribute)427 3719 y(settings)g(in)f
-(the)h(form)g(describ)r(ed)f(ab)r(o)n(v)n(e.)259 3852
-y Fd(...)427 3952 y Fj(Optional)k(additional)g(argumen)n(ts)f(whic)n(h)
-h(supply)h(v)-5 b(alues)31 b(to)g(b)r(e)h(substituted)g(for)f(an)n(y)g
-Ft(")p Fj(prin)n(tf)p Ft(")p Fj(-st)n(yle)427 4051 y(format)c(sp)r
-(eci\014ers)g(that)h(app)r(ear)f(in)h(the)g Ft(")p Fj(settings)p
-Ft(")e Fj(string.)0 4213 y Fd(Class)31 b(Applicabilit)m(y:)259
-4349 y(Ob)5 b(ject)427 4449 y Fj(This)28 b(function)g(applies)f(to)h
-(all)f(Ob)5 b(jects.)0 4611 y Fd(Examples:)227 4748 y
-Fq(astSet\()46 b(map,)h Ft(")p Fq(Report)e(=)j(1,)f(Zoom)g(=)g(25.0)p
-Ft(")f Fq(\);)427 4846 y Fj(Sets)28 b(the)g(Rep)r(ort)f(attribute)h
-(for)f(Ob)5 b(ject)28 b Ft(")p Fj(map)p Ft(")e Fj(to)i(the)g(v)-5
-b(alue)27 b(1)g(and)h(the)g(Zo)r(om)f(attribute)h(to)f(25.0.)227
-4980 y Fq(astSet\()46 b(frame,)g Ft(")p Fq(Label\()g(\045d)h(\))g
-(=Offset)f(along)h(axis)f(\045d)p Ft(")p Fq(,)h(axis,)f(axis)h(\);)427
-5079 y Fj(Sets)25 b(the)g(Lab)r(el\(axis\))f(attribute)h(for)g(Ob)5
-b(ject)24 b Ft(")p Fj(frame)p Ft(")g Fj(to)g(a)g(suitable)h(string,)g
-(where)f(the)h(axis)f(n)n(um)n(b)r(er)427 5178 y(is)k(obtained)f(from)g
-Ft(")p Fj(axis)p Ft(")p Fj(,)f(a)i(v)-5 b(ariable)26
-b(of)i(t)n(yp)r(e)f(in)n(t.)227 5312 y Fq(astSet\()46
-b(frame,)g Ft(")p Fq(Title)g(=\045s)p Ft(")p Fq(,)g(mystring)g(\);)427
-5411 y Fj(Sets)28 b(the)g(Title)g(attribute)g(for)f(Ob)5
-b(ject)27 b Ft(")p Fj(frame)p Ft(")g Fj(to)g(the)h(con)n(ten)n(ts)f(of)
-g(the)h(string)f Ft(")p Fj(m)n(ystring)p Ft(")p Fj(.)0
-5572 y Fd(Notes:)p eop end
-%%Page: 333 343
-TeXDict begin 333 342 bop 3643 52 a FF(333)340 351 y
-Fi(\017)45 b Fj(A)n(ttribute)28 b(names)g(are)e(not)i(case)f(sensitiv)n
-(e)g(and)g(ma)n(y)g(b)r(e)h(surrounded)e(b)n(y)i(white)g(space.)340
-497 y Fi(\017)45 b Fj(White)33 b(space)e(ma)n(y)f(also)h(surround)g
-(attribute)g(v)-5 b(alues,)33 b(where)e(it)h(will)g(generally)e(b)r(e)i
-(ignored)e(\(except)427 596 y(for)24 b(string-v)-5 b(alued)23
-b(attributes)i(where)e(it)i(is)f(signi\014can)n(t)g(and)g(forms)g(part)
-f(of)i(the)f(v)-5 b(alue)25 b(to)f(b)r(e)g(assigned\).)340
-741 y Fi(\017)45 b Fj(It)32 b(is)g(not)g(p)r(ossible)g(to)f(include)i
-(a)e(comma)g(directly)h(in)g(the)g(v)-5 b(alue)32 b(assigned)f(to)g(an)
-h(attribute)g(via)f(the)427 841 y Ft(")p Fj(settings)p
-Ft(")j Fj(string.)56 b(T)-7 b(o)34 b(ac)n(hiev)n(e)f(this,)k(y)n(ou)d
-(should)g(use)g Ft(")p Fj(\045s)p Ft(")g Fj(format)f(and)i(supply)f
-(the)h(v)-5 b(alue)34 b(as)g(a)427 941 y(separate)26
-b(additional)h(argumen)n(t)g(to)g(astSet)h(\(or)f(use)g(the)h(astSetC)g
-(function)g(instead\).)340 1086 y Fi(\017)45 b Fj(The)39
-b(same)g(pro)r(cedure)f(ma)n(y)g(b)r(e)h(adopted)g(if)g
-Ft(")p Fj(\045)p Ft(")g Fj(signs)f(are)g(to)h(b)r(e)g(included)h(and)e
-(are)g(not)h(to)g(b)r(e)427 1186 y(in)n(terpreted)28
-b(as)f(format)h(sp)r(eci\014ers)g(\(alternativ)n(ely)-7
-b(,)27 b(the)h Ft(")p Fj(prin)n(tf)p Ft(")g Fj(con)n(v)n(en)n(tion)f
-(of)h(writing)g Ft(")p Fj(\045\045)p Ft(")f Fj(ma)n(y)427
-1285 y(b)r(e)h(used\).)340 1431 y Fi(\017)45 b Fj(An)28
-b(error)e(will)i(result)f(if)h(an)g(attempt)g(is)f(made)h(to)f(set)h(a)
-f(v)-5 b(alue)27 b(for)g(a)h(read-only)e(attribute.)p
-0 1655 3780 12 v 0 1785 a Fz(astSet)p Fc(<)p Fz(X)p Fc(>)965
-1786 y Fe(Set)38 b(an)h(attribute)d(v)-7 b(alue)39 b(for)e(an)i(Ob)7
-b(ject)3137 1785 y Fz(astSet)p Fc(<)p Fz(X)p Fc(>)0 2000
-y Fd(Description:)44 b Fj(This)27 b(is)f(a)h(family)f(of)h(functions)g
-(whic)n(h)f(set)h(a)f(sp)r(eci\014ed)h(attribute)g(v)-5
-b(alue)26 b(for)g(an)g(Ob)5 b(ject)27 b(using)f(one)227
-2100 y(of)33 b(sev)n(eral)f(di\013eren)n(t)h(data)g(t)n(yp)r(es.)54
-b(The)33 b(t)n(yp)r(e)h(is)f(selected)g(b)n(y)g(replacing)f
-Fl(<)p Fj(X)p Fl(>)h Fj(in)g(the)h(function)g(name)f(b)n(y)227
-2199 y(C,)g(D,)f(F,)h(I)f(or)f(L,)i(to)f(supply)g(a)g(v)-5
-b(alue)32 b(in)g(const)g(c)n(har)p Fi(\003)e Fj(\(i.e.)51
-b(string\),)33 b(double,)h(\015oat,)f(in)n(t,)g(or)f(long)f(format,)227
-2299 y(resp)r(ectiv)n(ely)-7 b(.)227 2436 y(If)36 b(p)r(ossible,)h(the)
-f(v)-5 b(alue)36 b(y)n(ou)e(supply)i(is)f(con)n(v)n(erted)f(to)i(the)f
-(t)n(yp)r(e)h(of)g(the)f(attribute.)61 b(If)36 b(con)n(v)n(ersion)d(is)
-j(not)227 2536 y(p)r(ossible,)28 b(an)f(error)f(will)h(result.)0
-2710 y Fd(Synopsis:)121 b Ft(void)42 b(astSet)p Fl(<)p
-Ft(X)p Fl(>)p Ft(\()d(AstObject)h Fi(\003)p Ft(this,)h(const)h(char)g
-Fi(\003)p Ft(attrib,)e Fl(<)p Ft(X)p Fl(>)p Ft(type)g(value)i(\))0
-2884 y Fd(P)m(arameters:)259 3046 y(this)427 3145 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Ob)5 b(ject.)259 3291 y Fd(attrib)427 3390
-y Fj(P)n(oin)n(ter)20 b(to)h(a)f(n)n(ull-terminated)h(c)n(haracter)e
-(string)h(con)n(taining)g(the)i(name)f(of)g(the)g(attribute)g(whose)g
-(v)-5 b(alue)427 3490 y(is)28 b(to)f(b)r(e)h(set.)259
-3635 y Fd(v)-5 b(alue)427 3735 y Fj(The)26 b(v)-5 b(alue)25
-b(to)h(b)r(e)g(set)f(for)g(the)h(attribute,)h(in)e(the)h(data)f(t)n(yp)
-r(e)h(corresp)r(onding)e(to)h Fl(<)p Fj(X)p Fl(>)g Fj(\(or,)h(in)g(the)
-f(case)427 3835 y(of)j(astSetC,)f(a)h(p)r(oin)n(ter)f(to)g(a)g(n)n
-(ull-terminated)h(c)n(haracter)d(string)i(con)n(taining)g(this)h(v)-5
-b(alue\).)0 4021 y Fd(Class)31 b(Applicabilit)m(y:)259
-4183 y(Ob)5 b(ject)427 4282 y Fj(These)28 b(functions)f(apply)h(to)f
-(all)h(Ob)5 b(jects.)0 4469 y Fd(Examples:)227 4634 y
-Fq(astSetI\()46 b(frame,)g Ft(")p Fq(Preserve)p Ft(")p
-Fq(,)e(1)k(\);)427 4730 y Fj(Sets)28 b(the)g(Preserv)n(e)d(attribute)j
-(v)-5 b(alue)27 b(for)g(Ob)5 b(ject)28 b Ft(")p Fj(frame)p
-Ft(")e Fj(to)i(1.)227 4876 y Fq(astSetC\()46 b(plot,)g
-Ft(")p Fq(Format\(1\))p Ft(")p Fq(,)e Ft(")p Fq(\045.2g)p
-Ft(")i Fq(\);)427 4975 y Fj(Sets)28 b(the)g(F)-7 b(ormat\(1\))27
-b(attribute)h(v)-5 b(alue)27 b(for)g(Ob)5 b(ject)28 b
-Ft(")p Fj(plot)p Ft(")f Fj(to)g(the)h(c)n(haracter)e(string)h
-Ft(")p Fj(\045.2g)p Ft(")p Fj(.)0 5162 y Fd(Notes:)340
-5469 y Fi(\017)45 b Fj(A)n(ttribute)28 b(names)g(are)e(not)i(case)f
-(sensitiv)n(e)g(and)g(ma)n(y)g(b)r(e)h(surrounded)e(b)n(y)i(white)g
-(space.)340 5615 y Fi(\017)45 b Fj(An)28 b(error)e(will)i(result)f(if)h
-(an)g(attempt)g(is)f(made)h(to)f(set)h(a)f(v)-5 b(alue)27
-b(for)g(a)h(read-only)e(attribute.)p eop end
-%%Page: 334 344
-TeXDict begin 334 343 bop 0 52 a FF(334)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astSetActiv)l(eUnit)344 b Fe(Sp)s(ecify)39
-b(ho)m(w)f(the)g(Unit)1263 598 y(attribute)e(should)j(b)s(e)g(used)2773
-483 y Fz(astSetActiv)l(eUnit)0 765 y Fd(Description:)44
-b Fj(This)22 b(function)h(sets)e(the)i(curren)n(t)e(v)-5
-b(alue)22 b(of)f(the)i(Activ)n(eUnit)f(\015ag)g(for)f(a)g(F)-7
-b(rame,)23 b(whic)n(h)f(con)n(trols)e(ho)n(w)227 865
-y(the)30 b(F)-7 b(rame)30 b(b)r(eha)n(v)n(es)e(when)i(it)g(is)g(used)g
-(\(b)n(y)f(astFindF)-7 b(rame)30 b(or)e(astCon)n(v)n(ert\))h(to)g(matc)
-n(h)h(another)e(F)-7 b(rame.)43 b(If)227 964 y(the)23
-b(Activ)n(eUnit)g(\015ag)e(is)h(set)g(in)g(b)r(oth)h(template)f(and)g
-(target)f(F)-7 b(rames)21 b(then)i(the)f(returned)g(Mapping)g(tak)n(es)
-f(in)n(to)227 1064 y(accoun)n(t)26 b(an)n(y)h(di\013erences)f(in)i
-(axis)e(units.)37 b(The)27 b(default)h(v)-5 b(alue)27
-b(for)f(simple)h(F)-7 b(rames)27 b(is)g(zero,)f(whic)n(h)h(preserv)n
-(es)227 1164 y(the)h(b)r(eha)n(viour)f(of)g(v)n(ersions)f(of)i(AST)g
-(prior)e(to)h(v)n(ersion)f(2.0.)227 1289 y(If)31 b(the)g(Activ)n(eUnit)
-g(\015ag)f(of)h(either)f(F)-7 b(rame)30 b(is)h(zero,)f(then)h(the)g
-(Mapping)f(will)h(ignore)e(an)n(y)h(di\013erence)g(in)h(the)227
-1389 y(Unit)g(attributes)f(of)g(corresp)r(onding)e(template)j(and)f
-(target)f(axes.)44 b(In)30 b(this)g(mo)r(de,)h(the)g(Unit)g(attributes)
-f(are)227 1489 y(purely)23 b(descriptiv)n(e)f(commen)n(tary)g(for)h
-(the)h(b)r(ene\014t)g(of)f(h)n(uman)g(readers)e(and)i(do)g(not)g
-(in\015uence)h(the)f(Mappings)227 1588 y(b)r(et)n(w)n(een)k(F)-7
-b(rames.)36 b(This)27 b(is)f(the)i(b)r(eha)n(viour)d(whic)n(h)i(all)g
-(F)-7 b(rames)26 b(had)g(in)h(older)f(v)n(ersion)g(of)h(AST,)g(prior)f
-(to)g(the)227 1688 y(in)n(tro)r(duction)i(of)f(this)h(attribute.)227
-1813 y(If)i(the)f(Activ)n(eUnit)h(\015ag)f(of)g(b)r(oth)g(F)-7
-b(rames)29 b(is)g(non-zero,)f(then)h(the)h(Mapping)f(from)g(template)g
-(to)g(target)f(will)227 1913 y(tak)n(e)35 b(accoun)n(t)g(of)g(an)n(y)g
-(di\013erence)h(in)g(the)g(axis)f(Unit)h(attributes,)i(where-ev)n(er)33
-b(p)r(ossible.)61 b(F)-7 b(or)35 b(instance,)i(if)227
-2013 y(corresp)r(onding)31 b(target)g(and)h(template)h(axes)e(ha)n(v)n
-(e)g(Unit)i(strings)f(of)g Ft(")p Fj(km)p Ft(")f Fj(and)h
-Ft(")p Fj(m)p Ft(")p Fj(,)h(then)g(the)g(F)-7 b(rameSet)227
-2112 y(class)35 b(will)i(use)f(a)f(Zo)r(omMap)g(to)h(connect)g(them)h
-(whic)n(h)f(in)n(tro)r(duces)f(a)h(scaling)f(of)h(1000.)61
-b(If)36 b(no)g(Mapping)227 2212 y(can)31 b(b)r(e)g(found)h(b)r(et)n(w)n
-(een)f(the)g(corresp)r(onding)e(units)j(string,)f(then)g(an)g(error)e
-(is)i(rep)r(orted.)47 b(In)31 b(this)g(mo)r(de,)h(it)227
-2312 y(is)f(assumed)g(that)g(v)-5 b(alues)31 b(of)g(the)h(Unit)g
-(attribute)f(conform)g(to)g(the)h(syn)n(tax)e(for)g(units)i(strings)e
-(describ)r(ed)h(in)227 2411 y(the)g(FITS)g(W)n(CS)f(P)n(ap)r(er)f(I)i
-Ft(")p Fj(Represen)n(tations)e(of)h(w)n(orld)f(co)r(ordinates)g(in)i
-(FITS)p Ft(")f Fj(\(Greisen)g(&)h(Calabretta\).)227 2511
-y(P)n(articularly)-7 b(,)30 b(an)n(y)h(of)g(the)h(named)f(unit)h(sym)n
-(b)r(ols,)g(functions,)h(op)r(erators)c(or)i(standard)f(m)n(ultiplier)h
-(pre\014xes)227 2610 y(listed)c(within)g(that)f(pap)r(er)g(can)g(b)r(e)
-g(used)h(within)g(a)e(units)i(string.)36 b(A)26 b(units)h(string)f(ma)n
-(y)f(con)n(tain)h(sym)n(b)r(ols)f(for)227 2710 y(unit)31
-b(whic)n(h)g(are)e(not)i(listed)g(in)f(the)h(FITS)g(pap)r(er,)g(but)g
-(transformation)e(to)h(an)n(y)g(other)g(units)h(will)g(then)g(not)227
-2810 y(b)r(e)f(p)r(ossible)f(\(except)h(to)f(units)h(whic)n(h)f(dep)r
-(end)h(only)f(on)g(the)h(same)f(unkno)n(wn)g(units)h(-)f(th)n(us)g
-Ft(")p Fj(\015ops)p Ft(")f Fj(can)h(b)r(e)227 2909 y(transformed)e(to)g
-Ft(")p Fj(M\015ops)p Ft(")g Fj(ev)n(en)g(though)g Ft(")p
-Fj(\015ops)p Ft(")f Fj(is)i(not)g(a)f(standard)f(FITS)i(unit)h(sym)n(b)
-r(ol\).)227 3035 y(A)c(range)e(of)h(common)g(non-standard)f(v)-5
-b(ariations)23 b(of)i(unit)g(names)f(and)g(m)n(ultiplier)h(pre\014xes)e
-(are)h(also)f(allo)n(w)n(ed,)227 3135 y(suc)n(h)28 b(as)f(adding)g(an)g
-Ft(")p Fj(s)p Ft(")g Fj(to)h(the)g(end)g(of)f(Angstrom,)g(using)h(a)f
-(lo)n(w)n(er)f(case)h Ft(")p Fj(a)p Ft(")f Fj(at)i(the)g(start)f(of)h
-Ft(")p Fj(angstrom)p Ft(")p Fj(,)227 3234 y Ft(")p Fj(micron)p
-Ft(")e Fj(instead)i(of)f Ft(")p Fj(um)p Ft(")p Fj(,)h
-Ft(")p Fj(sec)p Ft(")e Fj(instead)h(of)h Ft(")p Fj(s)p
-Ft(")p Fj(,)f(etc.)227 3360 y(If)22 b(the)f(Activ)n(eUnit)g(\015ag)f
-(is)h(non-zero,)g(setting)f(a)h(new)g(Unit)g(v)-5 b(alue)21
-b(for)f(an)h(axis)f(ma)n(y)g(also)f(c)n(hange)h(its)h(Lab)r(el)g(and)
-227 3459 y(Sym)n(b)r(ol)30 b(attributes.)45 b(F)-7 b(or)30
-b(instance,)g(if)h(an)f(axis)f(has)h(Unit)h Ft(")p Fj(Hz)p
-Ft(")f Fj(and)g(Lab)r(el)g Ft(")p Fj(frequency)p Ft(")p
-Fj(,)f(then)i(c)n(hanging)227 3559 y(its)j(Unit)g(to)g
-Ft(")p Fj(log\(Hz\))p Ft(")e Fj(will)i(c)n(hange)e(its)i(Lab)r(el)g(to)
-f Ft(")p Fj(log\()f(frequency)i(\))p Ft(")p Fj(.)54 b(In)34
-b(addition,)h(the)f(Axis)f(F)-7 b(ormat)227 3659 y(attribute)28
-b(will)g(b)r(e)g(cleared)e(when-ev)n(er)h(a)g(new)h(v)-5
-b(alue)27 b(is)h(assigned)e(to)h(the)h(Unit)h(attribute.)227
-3784 y(Note,)f(if)g(a)f(non-zero)f(v)-5 b(alue)28 b(is)f(set)h(for)f
-(the)h(Activ)n(eUnit)h(\015ag,)e(then)h(c)n(hanging)e(a)h(Unit)i(v)-5
-b(alue)27 b(for)g(the)h(curren)n(t)227 3884 y(F)-7 b(rame)29
-b(within)h(a)f(F)-7 b(rameSet)29 b(will)h(result)f(in)h(the)f(F)-7
-b(rame)29 b(b)r(eing)h(re-mapp)r(ed)e(\(that)i(is,)g(the)g(Mappings)f
-(whic)n(h)227 3984 y(de\014ne)d(the)f(relationships)f(b)r(et)n(w)n(een)
-i(F)-7 b(rames)24 b(within)i(the)f(F)-7 b(rameSet)25
-b(will)h(b)r(e)f(mo)r(di\014ed)h(to)f(tak)n(e)g(in)n(to)f(accoun)n(t)
-227 4083 y(the)k(c)n(hange)f(in)h(Units\).)0 4235 y Fd(Synopsis:)121
-b Ft(void)42 b(astSetActiveUnit)o(\()37 b(AstFrame)k
-Fi(\003)p Ft(this,)g(int)h(value)g(\))0 4386 y Fd(P)m(arameters:)259
-4525 y(this)427 4624 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)259 4758 y Fd(v)i(alue)427 4858 y Fj(The)28 b(new)g(v)-5
-b(alue)27 b(to)h(use.)0 5022 y Fd(Class)j(Applicabilit)m(y:)259
-5161 y(SkyF)-8 b(rame)427 5260 y Fj(The)35 b(Activ)n(eUnit)g(\015ag)f
-(for)g(a)g(SkyF)-7 b(rame)34 b(is)h(alw)n(a)n(ys)e(0)h(\(an)n(y)g(v)-5
-b(alue)34 b(supplied)h(using)g(this)g(function)g(is)427
-5360 y(ignored\).)259 5494 y Fd(Sp)s(ecF)-8 b(rame)427
-5593 y Fj(The)33 b(Activ)n(eUnit)g(\015ag)e(for)h(a)g(Sp)r(ecF)-7
-b(rame)32 b(is)g(alw)n(a)n(ys)f(1)h(\(an)n(y)f(v)-5 b(alue)33
-b(supplied)f(using)g(this)h(function)g(is)427 5693 y(ignored\).)p
-eop end
-%%Page: 335 345
-TeXDict begin 335 344 bop 3643 52 a FF(335)259 351 y
-Fd(FluxF)-8 b(rame)427 451 y Fj(The)33 b(Activ)n(eUnit)g(\015ag)e(for)h
-(a)g(FluxF)-7 b(rame)32 b(is)h(alw)n(a)n(ys)d(1)i(\(an)n(y)g(v)-5
-b(alue)32 b(supplied)h(using)f(this)h(function)g(is)427
-551 y(ignored\).)259 683 y Fd(CmpF)-8 b(rame)427 783
-y Fj(The)27 b(default)h(Activ)n(eUnit)g(\015ag)e(for)h(a)f(CmpF)-7
-b(rame)27 b(is)g(1)g(if)h(b)r(oth)f(of)g(the)h(comp)r(onen)n(t)f(F)-7
-b(rames)26 b(are)g(using)427 882 y(activ)n(e)32 b(units,)i(and)e(zero)f
-(otherwise.)50 b(When)33 b(a)f(new)g(v)-5 b(alue)32 b(is)g(set)h(for)e
-(the)i(Activ)n(eUnit)g(\015ag,)g(the)f(\015ag)427 982
-y(v)-5 b(alue)39 b(is)f(propagated)f(to)h(the)h(comp)r(onen)n(t)f(F)-7
-b(rames.)69 b(This)39 b(c)n(hange)e(will)i(b)r(e)g(re\015ected)f
-(through)g(all)427 1082 y(references)27 b(to)g(the)h(comp)r(onen)n(t)g
-(F)-7 b(rames,)26 b(not)i(just)g(those)f(encapsulated)g(within)i(the)f
-(CmpF)-7 b(rame.)259 1214 y Fd(Region:)427 1314 y Fj(Regions)27
-b(alw)n(a)n(ys)f(use)h(activ)n(e)g(units)h(if)g(p)r(ossible.)0
-1475 y Fd(Notes:)340 1757 y Fi(\017)45 b Fj(The)28 b(Activ)n(eUnit)g
-(\015ag)f(resem)n(bles)f(a)h(F)-7 b(rame)27 b(attribute,)g(except)h
-(that)g(it)f(cannot)g(b)r(e)h(tested)g(or)f(cleared,)427
-1857 y(and)h(it)g(cannot)f(b)r(e)h(accessed)e(using)h(the)h(generic)f
-(astGet)p Fl(<)p Fj(X)p Fl(>)g Fj(and)g(astSet)p Fl(<)p
-Fj(X)p Fl(>)g Fj(functions.)340 1989 y Fi(\017)45 b Fj(The)32
-b(astGetActiv)n(eUnit)h(function)f(can)f(b)r(e)h(used)g(to)g(retriev)n
-(e)e(the)i(curren)n(t)f(v)-5 b(alue)32 b(of)g(the)g(Activ)n(eUnit)427
-2089 y(\015ag.)p 0 2288 3780 12 v 0 2419 a Fz(astSetFits)p
-Fc(<)p Fz(X)p Fc(>)340 b Fe(Store)37 b(a)i(k)m(eyw)m(ord)d(v)-7
-b(alue)39 b(in)f(a)1653 2534 y(FitsChan)2909 2419 y Fz(astSetFits)p
-Fc(<)p Fz(X)p Fc(>)0 2699 y Fd(Description:)44 b Fj(This)26
-b(is)f(a)h(family)f(of)h(functions)g(whic)n(h)f(store)g(v)-5
-b(alues)25 b(for)g(named)h(k)n(eyw)n(ords)d(within)k(a)e(FitsChan)h(at)
-227 2798 y(the)31 b(curren)n(t)f(card)g(p)r(osition.)46
-b(The)31 b(supplied)g(k)n(eyw)n(ord)d(v)-5 b(alue)31
-b(can)f(either)h(o)n(v)n(er-write)d(an)i(existing)g(k)n(eyw)n(ord)227
-2898 y(v)-5 b(alue,)28 b(or)f(can)g(b)r(e)h(inserted)f(as)g(a)g(new)h
-(header)f(card)f(in)n(to)i(the)g(FitsChan.)227 3022 y(The)f(k)n(eyw)n
-(ord)d(data)i(t)n(yp)r(e)h(is)f(selected)h(b)n(y)f(replacing)f
-Fl(<)p Fj(X)p Fl(>)h Fj(in)h(the)g(function)g(name)f(b)n(y)g(one)g(of)h
-(the)g(follo)n(wing)227 3122 y(strings)g(represen)n(ting)f(the)i
-(recognised)e(FITS)i(data)f(t)n(yp)r(es:)340 3382 y Fi(\017)45
-b Fj(CF)28 b(-)f(Complex)h(\015oating)e(p)r(oin)n(t)i(v)-5
-b(alues.)340 3515 y Fi(\017)45 b Fj(CI)28 b(-)f(Complex)g(in)n(teger)g
-(v)-5 b(alues.)340 3647 y Fi(\017)45 b Fj(F)28 b(-)f(Floating)g(p)r
-(oin)n(t)h(v)-5 b(alues.)340 3780 y Fi(\017)45 b Fj(I)28
-b(-)f(In)n(teger)g(v)-5 b(alues.)340 3912 y Fi(\017)45
-b Fj(L)28 b(-)f(Logical)f(\(i.e.)38 b(b)r(o)r(olean\))27
-b(v)-5 b(alues.)340 4045 y Fi(\017)45 b Fj(S)28 b(-)f(String)h(v)-5
-b(alues.)340 4177 y Fi(\017)45 b Fj(CN)32 b(-)g(A)g Ft(")p
-Fj(CONTINUE)p Ft(")e Fj(v)-5 b(alue,)33 b(these)e(are)g(treated)g(lik)n
-(e)g(string)g(v)-5 b(alues,)33 b(but)f(are)f(enco)r(ded)g(without)427
-4277 y(an)d(equals)e(sign.)227 4438 y(The)i(data)f(t)n(yp)r(e)h(of)f
-(the)h Ft(")p Fj(v)-5 b(alue)p Ft(")27 b Fj(parameter)f(dep)r(ends)i
-(on)f Fl(<)p Fj(X)p Fl(>)h Fj(as)e(follo)n(ws:)340 4699
-y Fi(\017)45 b Fj(CF)28 b(-)g Ft(")p Fj(double)g Fi(\003)p
-Ft(")f Fj(\(a)g(p)r(oin)n(ter)h(to)g(a)f(2)h(elemen)n(t)g(arra)n(y)d
-(holding)j(the)g(real)f(and)h(imaginary)e(parts)h(of)h(the)427
-4798 y(complex)f(v)-5 b(alue\).)340 4931 y Fi(\017)45
-b Fj(CI)37 b(-)g Ft(")p Fj(in)n(t)g Fi(\003)p Ft(")f
-Fj(\(a)h(p)r(oin)n(ter)g(to)g(a)g(2)f(elemen)n(t)h(arra)n(y)e(holding)i
-(the)g(real)f(and)h(imaginary)f(parts)g(of)h(the)427
-5031 y(complex)27 b(v)-5 b(alue\).)340 5163 y Fi(\017)45
-b Fj(F)28 b(-)f Ft(")p Fj(double)p Ft(")p Fj(.)340 5296
-y Fi(\017)45 b Fj(I)28 b(-)f Ft(")p Fj(in)n(t)p Ft(")p
-Fj(.)340 5428 y Fi(\017)45 b Fj(L)28 b(-)f Ft(")p Fj(in)n(t)p
-Ft(")p Fj(.)340 5561 y Fi(\017)45 b Fj(S)28 b(-)f Ft(")p
-Fj(const)g(c)n(har)g Fi(\003)p Ft(")p Fj(.)340 5693 y
-Fi(\017)45 b Fj(CN)28 b(-)g Ft(")p Fj(const)e(c)n(har)h
-Fi(\003)p Ft(")p Fj(.)p eop end
-%%Page: 336 346
-TeXDict begin 336 345 bop 0 52 a FF(336)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Synopsis:)121
-b Ft(void)42 b(astSetFits)p Fl(<)p Ft(X)p Fl(>)p Ft(\()c(AstFitsChan)h
-Fi(\003)p Ft(this,)i(const)g(char)h Fi(\003)p Ft(name,)f
-Fl(<)p Ft(X)p Fl(>)p Ft(type)g(value,)g(const)227 451
-y(char)h Fi(\003)p Ft(comment,)e(int)i(overwrite)e(\))0
-595 y Fd(P)m(arameters:)259 726 y(this)427 825 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(FitsChan.)259 953 y Fd(name)427 1052 y Fj(P)n(oin)n(ter)f
-(to)i(a)f(n)n(ull-terminated)h(c)n(haracter)d(string)i(con)n(taining)g
-(the)h(FITS)g(k)n(eyw)n(ord)e(name.)40 b(This)28 b(ma)n(y)427
-1152 y(b)r(e)i(a)f(complete)g(FITS)h(header)f(card,)g(in)g(whic)n(h)h
-(case)e(the)i(k)n(eyw)n(ord)d(to)j(use)f(is)g(extracted)g(from)g(it.)43
-b(No)427 1251 y(more)27 b(than)h(80)e(c)n(haracters)g(are)g(read)h
-(from)g(this)h(string.)259 1379 y Fd(v)-5 b(alue)427
-1478 y Fj(The)20 b(k)n(eyw)n(ord)d(v)-5 b(alue)19 b(to)g(store)g(with)h
-(the)f(named)h(k)n(eyw)n(ord.)32 b(The)19 b(data)g(t)n(yp)r(e)g(of)h
-(this)f(parameter)f(dep)r(ends)427 1578 y(on)28 b Fl(<)p
-Fj(X)p Fl(>)f Fj(as)g(describ)r(ed)g(ab)r(o)n(v)n(e.)259
-1705 y Fd(commen)m(t)427 1805 y Fj(A)e(p)r(oin)n(ter)e(to)h(a)g(n)n
-(ull)g(terminated)g(string)g(holding)f(a)h(commen)n(t)g(to)g(asso)r
-(ciated)f(with)h(the)h(k)n(eyw)n(ord.)34 b(If)24 b(a)427
-1905 y(NULL)f(p)r(oin)n(ter)g(or)f(a)g(blank)h(string)f(is)g(supplied,)
-j(then)e(an)n(y)f(commen)n(t)h(included)g(in)g(the)g(string)f(supplied)
-427 2004 y(for)h(the)h Ft(")p Fj(name)p Ft(")f Fj(parameter)f(is)h
-(used)h(instead.)35 b(If)24 b Ft(")p Fj(name)p Ft(")e
-Fj(con)n(tains)h(no)g(commen)n(t,)h(then)g(an)n(y)f(existing)427
-2104 y(commen)n(t)31 b(in)h(the)g(card)e(b)r(eing)h(o)n(v)n(er-written)
-f(is)h(retained.)47 b(Otherwise,)31 b(no)g(commen)n(t)h(is)f(stored)f
-(with)427 2203 y(the)e(card.)259 2331 y Fd(o)m(v)m(erwrite)427
-2430 y Fj(If)d(non-zero,)e(the)h(new)g(card)f(formed)h(from)g(the)g
-(supplied)g(k)n(eyw)n(ord)e(name,)j(v)-5 b(alue)24 b(and)f(commen)n(t)h
-(string)427 2530 y(o)n(v)n(er-writes)30 b(the)j(curren)n(t)f(card,)i
-(and)e(the)h(curren)n(t)f(card)g(is)h(incremen)n(ted)f(to)h(refer)f(to)
-g(the)i(next)e(card)427 2630 y(\(see)c(the)h Ft(")p Fj(Card)p
-Ft(")d Fj(attribute\).)39 b(If)29 b(zero,)e(the)h(new)h(card)e(is)h
-(inserted)g(in)g(fron)n(t)g(of)g(the)g(curren)n(t)g(card)f(and)427
-2729 y(the)j(curren)n(t)e(card)h(is)g(left)h(unc)n(hanged.)41
-b(In)30 b(either)f(case,)g(if)h(the)f(curren)n(t)g(card)f(on)h(en)n
-(try)g(p)r(oin)n(ts)g(to)g(the)427 2829 y Ft(")p Fj(end-of-\014le)p
-Ft(")p Fj(,)e(the)h(new)f(card)g(is)g(app)r(ended)h(to)g(the)g(end)g
-(of)f(the)h(list.)0 2985 y Fd(Notes:)340 3262 y Fi(\017)45
-b Fj(The)25 b(function)h(astSetFitsU)g(can)e(b)r(e)i(used)f(to)g
-(indicate)g(that)h(no)e(v)-5 b(alue)25 b(is)g(asso)r(ciated)f(with)i(a)
-e(k)n(eyw)n(ord.)340 3390 y Fi(\017)45 b Fj(The)34 b(function)g
-(astSetFitsCM)g(can)f(b)r(e)h(used)g(to)f(store)g(a)g(pure)g(commen)n
-(t)h(card)f(\(i.e.)55 b(a)33 b(card)g(with)h(a)427 3489
-y(blank)28 b(k)n(eyw)n(ord\).)340 3616 y Fi(\017)45 b
-Fj(T)-7 b(o)22 b(assign)e(a)i(new)g(v)-5 b(alue)21 b(for)h(an)f
-(existing)h(k)n(eyw)n(ord)d(within)k(a)e(FitsChan,)i(\014rst)f(\014nd)g
-(the)h(card)d(describing)427 3716 y(the)29 b(k)n(eyw)n(ord)e(using)h
-(astFindFits,)h(and)f(then)h(use)f(one)g(of)g(the)h(astSetFits)p
-Fl(<)p Fj(X)p Fl(>)f Fj(family)h(to)f(o)n(v)n(er-write)427
-3816 y(the)g(old)g(v)-5 b(alue.)340 3943 y Fi(\017)45
-b Fj(If,)34 b(on)d(exit,)j(there)d(are)g(no)h(cards)f(follo)n(wing)g
-(the)h(card)f(written)h(b)n(y)g(this)g(function,)i(then)e(the)g(curren)
-n(t)427 4043 y(card)27 b(is)g(left)i(p)r(oin)n(ting)e(at)h(the)g
-Ft(")p Fj(end-of-\014le)p Ft(")p Fj(.)340 4170 y Fi(\017)45
-b Fj(An)28 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)h(the)g(k)n(eyw)n
-(ord)d(name)j(do)r(es)f(not)h(conform)e(to)i(FITS)g(requiremen)n(ts.)p
-0 4358 3780 12 v 0 4490 a Fz(astSetFitsCM)153 b Fe(Store)34
-b(a)h(commen)m(t)e(card)i(in)g(a)g(FitsChan)150 b Fz(astSetFitsCM)0
-4649 y Fd(Description:)44 b Fj(This)29 b(function)h(stores)e(a)g
-(commen)n(t)h(card)f(\()i(i.e.)41 b(a)28 b(card)g(with)i(no)f(k)n(eyw)n
-(ord)e(name)h(or)h(equals)f(sign\))227 4749 y(within)34
-b(a)f(FitsChan)g(at)g(the)h(curren)n(t)e(card)h(p)r(osition.)53
-b(The)34 b(new)f(card)f(can)h(either)g(o)n(v)n(er-write)e(an)i
-(existing)227 4848 y(card,)27 b(or)g(can)g(b)r(e)h(inserted)f(as)g(a)g
-(new)h(card)f(in)n(to)g(the)h(FitsChan.)0 4992 y Fd(Synopsis:)121
-b Ft(void)42 b(astSetFitsCM\()c(AstFitsChan)h Fi(\003)p
-Ft(this,)i(const)h(char)g Fi(\003)p Ft(comment,)d(int)k(overwrite)d(\))
-0 5136 y Fd(P)m(arameters:)259 5267 y(this)427 5366 y
-Fj(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259 5494 y
-Fd(commen)m(t)427 5593 y Fj(A)38 b(p)r(oin)n(ter)f(to)g(a)h(n)n(ull)f
-(terminated)h(string)e(holding)h(the)h(text)g(of)f(the)h(commen)n(t)g
-(card.)65 b(If)38 b(a)f(NULL)427 5693 y(p)r(oin)n(ter)27
-b(or)g(a)g(blank)h(string)f(is)g(supplied,)h(then)g(a)f(totally)h
-(blank)f(card)g(is)g(pro)r(duced.)p eop end
-%%Page: 337 347
-TeXDict begin 337 346 bop 3643 52 a FF(337)259 351 y
-Fd(o)m(v)m(erwrite)427 451 y Fj(If)31 b(non-zero,)f(the)i(new)f(card)e
-(o)n(v)n(er-writes)g(the)i(curren)n(t)f(card,)g(and)h(the)g(curren)n(t)
-f(card)g(is)h(incremen)n(ted)427 551 y(to)26 b(refer)f(to)h(the)h(next)
-f(card)f(\(see)h(the)g Ft(")p Fj(Card)p Ft(")f Fj(attribute\).)37
-b(If)26 b(zero,)f(the)i(new)f(card)f(is)h(inserted)g(in)g(fron)n(t)427
-650 y(of)h(the)g(curren)n(t)f(card)g(and)h(the)g(curren)n(t)f(card)g
-(is)g(left)i(unc)n(hanged.)35 b(In)27 b(either)g(case,)f(if)h(the)h
-(curren)n(t)d(card)427 750 y(on)j(en)n(try)f(p)r(oin)n(ts)g(to)h(the)g
-Ft(")p Fj(end-of-\014le)p Ft(")p Fj(,)e(the)i(new)g(card)e(is)i(app)r
-(ended)g(to)f(the)h(end)g(of)g(the)g(list.)0 957 y Fd(Notes:)340
-1284 y Fi(\017)45 b Fj(If,)34 b(on)d(exit,)j(there)d(are)g(no)h(cards)f
-(follo)n(wing)g(the)h(card)f(written)h(b)n(y)g(this)g(function,)i(then)
-e(the)g(curren)n(t)427 1384 y(card)27 b(is)g(left)i(p)r(oin)n(ting)e
-(at)h(the)g Ft(")p Fj(end-of-\014le)p Ft(")p Fj(.)p 0
-1628 3780 12 v 0 1760 a Fz(astSetFitsU)221 b Fe(Store)38
-b(an)h(unde\014ned)g(k)m(eyw)m(ord)e(v)-7 b(alue)38 b(in)h(a)1653
-1874 y(FitsChan)3090 1760 y Fz(astSetFitsU)0 2085 y Fd(Description:)44
-b Fj(This)33 b(function)g(stores)e(an)h(unde\014ned)i(v)-5
-b(alue)32 b(for)g(a)g(named)g(k)n(eyw)n(ord)f(within)i(a)f(FitsChan)h
-(at)f(the)227 2185 y(curren)n(t)f(card)f(p)r(osition.)49
-b(The)31 b(new)h(unde\014ned)g(v)-5 b(alue)31 b(can)g(either)h(o)n(v)n
-(er-write)d(an)i(existing)g(k)n(eyw)n(ord)f(v)-5 b(alue,)227
-2284 y(or)27 b(can)g(b)r(e)h(inserted)g(as)e(a)i(new)f(header)g(card)g
-(in)n(to)g(the)h(FitsChan.)0 2479 y Fd(Synopsis:)121
-b Ft(void)42 b(astSetFitsU\()c(AstFitsChan)h Fi(\003)p
-Ft(this,)i(const)h(char)g Fi(\003)p Ft(name,)f(const)g(char)h
-Fi(\003)p Ft(comment,)e(int)227 2578 y(overwrite)g(\))0
-2773 y Fd(P)m(arameters:)259 2954 y(this)427 3054 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(FitsChan.)259 3209 y Fd(name)427 3309 y
-Fj(P)n(oin)n(ter)f(to)i(a)f(n)n(ull-terminated)h(c)n(haracter)d(string)
-i(con)n(taining)g(the)h(FITS)g(k)n(eyw)n(ord)e(name.)40
-b(This)28 b(ma)n(y)427 3409 y(b)r(e)i(a)f(complete)g(FITS)h(header)f
-(card,)g(in)g(whic)n(h)h(case)e(the)i(k)n(eyw)n(ord)d(to)j(use)f(is)g
-(extracted)g(from)g(it.)43 b(No)427 3508 y(more)27 b(than)h(80)e(c)n
-(haracters)g(are)g(read)h(from)g(this)h(string.)259 3663
-y Fd(commen)m(t)427 3763 y Fj(A)d(p)r(oin)n(ter)e(to)h(a)g(n)n(ull)g
-(terminated)g(string)g(holding)f(a)h(commen)n(t)g(to)g(asso)r(ciated)f
-(with)h(the)h(k)n(eyw)n(ord.)34 b(If)24 b(a)427 3863
-y(NULL)f(p)r(oin)n(ter)g(or)f(a)g(blank)h(string)f(is)g(supplied,)j
-(then)e(an)n(y)f(commen)n(t)h(included)g(in)g(the)g(string)f(supplied)
-427 3962 y(for)h(the)h Ft(")p Fj(name)p Ft(")f Fj(parameter)f(is)h
-(used)h(instead.)35 b(If)24 b Ft(")p Fj(name)p Ft(")e
-Fj(con)n(tains)h(no)g(commen)n(t,)h(then)g(an)n(y)f(existing)427
-4062 y(commen)n(t)31 b(in)h(the)g(card)e(b)r(eing)h(o)n(v)n(er-written)
-f(is)h(retained.)47 b(Otherwise,)31 b(no)g(commen)n(t)h(is)f(stored)f
-(with)427 4162 y(the)e(card.)259 4317 y Fd(o)m(v)m(erwrite)427
-4417 y Fj(If)f(non-zero,)e(the)i(new)f(card)g(formed)g(from)g(the)g
-(supplied)h(k)n(eyw)n(ord)e(name)h(and)g(commen)n(t)g(string)g(o)n(v)n
-(er-)427 4516 y(writes)33 b(the)g(curren)n(t)g(card,)g(and)g(the)h
-(curren)n(t)e(card)g(is)h(incremen)n(ted)g(to)g(refer)g(to)g(the)g
-(next)g(card)g(\(see)427 4616 y(the)d Ft(")p Fj(Card)p
-Ft(")e Fj(attribute\).)42 b(If)30 b(zero,)f(the)g(new)h(card)e(is)i
-(inserted)f(in)g(fron)n(t)g(of)g(the)h(curren)n(t)f(card)f(and)h(the)
-427 4715 y(curren)n(t)37 b(card)f(is)h(left)h(unc)n(hanged.)65
-b(In)37 b(either)g(case,)i(if)f(the)g(curren)n(t)e(card)g(on)h(en)n
-(try)g(p)r(oin)n(ts)g(to)g(the)427 4815 y Ft(")p Fj(end-of-\014le)p
-Ft(")p Fj(,)27 b(the)h(new)f(card)g(is)g(app)r(ended)h(to)g(the)g(end)g
-(of)f(the)h(list.)0 5022 y Fd(Notes:)340 5350 y Fi(\017)45
-b Fj(If,)34 b(on)d(exit,)j(there)d(are)g(no)h(cards)f(follo)n(wing)g
-(the)h(card)f(written)h(b)n(y)g(this)g(function,)i(then)e(the)g(curren)
-n(t)427 5449 y(card)27 b(is)g(left)i(p)r(oin)n(ting)e(at)h(the)g
-Ft(")p Fj(end-of-\014le)p Ft(")p Fj(.)340 5605 y Fi(\017)45
-b Fj(An)28 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)h(the)g(k)n(eyw)n
-(ord)d(name)j(do)r(es)f(not)h(conform)e(to)i(FITS)g(requiremen)n(ts.)p
-eop end
-%%Page: 338 348
-TeXDict begin 338 347 bop 0 52 a FF(338)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astSetRefP)l(os)354 b Fe(Set)39 b(the)f(reference)g(p)s
-(osition)f(in)i(a)970 598 y(sp)s(eci\014ed)g(celestial)e(co)s(ordinate)
-f(system)3009 483 y Fz(astSetRefP)l(os)0 844 y Fd(Description:)44
-b Fj(This)22 b(function)f(sets)h(the)f(reference)g(p)r(osition)g(\(see)
-g(attributes)g(RefRA)h(and)f(RefDec\))i(using)e(axis)f(v)-5
-b(al-)227 943 y(ues)19 b(\(in)h(radians\))e(supplied)i(within)g(the)f
-(celestial)g(co)r(ordinate)f(system)h(represen)n(ted)f(b)n(y)h(a)g
-(supplied)g(SkyF)-7 b(rame.)0 1145 y Fd(Synopsis:)121
-b Ft(void)42 b(astSetRefPos\()c(AstSpecFrame)h Fi(\003)p
-Ft(this,)i(AstSkyFrame)e Fi(\003)p Ft(frm,)i(double)g(lon,)h(double)f
-(lat)227 1245 y(\))0 1447 y Fd(P)m(arameters:)259 1636
-y(this)427 1735 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Sp)r(ecF)-7
-b(rame.)259 1894 y Fd(frm)427 1994 y Fj(P)n(oin)n(ter)23
-b(to)i(the)g(SkyF)-7 b(rame)24 b(whic)n(h)g(de\014nes)h(the)g
-(celestial)f(co)r(ordinate)g(system)g(in)h(whic)n(h)g(the)g(longitude)
-427 2094 y(and)20 b(latitude)g(v)-5 b(alues)19 b(are)g(supplied.)34
-b(If)20 b(NULL)g(is)g(supplied,)h(then)f(the)g(supplied)g(longitude)g
-(and)f(latitude)427 2193 y(v)-5 b(alues)27 b(are)g(assumed)g(to)h(b)r
-(e)g(FK5)f(J2000)e(RA)j(and)f(Dec)h(v)-5 b(alues.)259
-2352 y Fd(lon)427 2452 y Fj(The)33 b(longitude)g(of)f(the)h(reference)f
-(p)r(oin)n(t,)i(in)f(the)g(co)r(ordinate)f(system)g(represen)n(ted)g(b)
-n(y)g(the)h(supplied)427 2552 y(SkyF)-7 b(rame)27 b(\(radians\).)259
-2711 y Fd(lat)427 2810 y Fj(The)37 b(latitude)h(of)e(the)i(reference)e
-(p)r(oin)n(t,)j(in)e(the)g(co)r(ordinate)f(system)h(represen)n(ted)e(b)
-n(y)i(the)g(supplied)427 2910 y(SkyF)-7 b(rame)27 b(\(radians\).)p
-0 3162 V 0 3293 a Fz(astSetStatus)894 3294 y Fe(Set)39
-b(the)f(AST)h(error)e(status)h(to)g(an)g(explicit)1758
-3408 y(v)-7 b(alue)3048 3293 y Fz(astSetStatus)0 3626
-y Fd(Description:)44 b Fj(This)26 b(function)f(sets)g(the)h(AST)g
-(error)d(status)i(to)g(the)g(v)-5 b(alue)26 b(supplied.)36
-b(It)26 b(do)r(es)e(not)i(cause)e(an)n(y)h(error)227
-3726 y(message)j(to)i(b)r(e)f(pro)r(duced)g(and)h(should)f(not)g(b)r(e)
-h(used)f(as)g(part)g(of)g(normal)g(error)e(rep)r(orting.)41
-b(Its)30 b(purp)r(ose)f(is)227 3826 y(simply)f(to)f(comm)n(unicate)g
-(to)h(AST)g(that)g(an)f(error)f(has)h(o)r(ccurred)f(in)i(some)f(other)g
-(item)h(of)g(soft)n(w)n(are.)227 3976 y(F)-7 b(or)37
-b(example,)i(a)d(source)g(or)g(sink)h(function)h(supplied)f(as)g(an)f
-(argumen)n(t)g(to)h(astChannel)g(or)f(astFitsChan)227
-4076 y(migh)n(t)g(use)g(this)g(to)g(signal)e(that)j(an)e(input/output)i
-(error)d(has)h(o)r(ccurred.)60 b(AST)37 b(could)e(then)i(resp)r(ond)e
-(b)n(y)227 4176 y(terminating)28 b(the)f(curren)n(t)g(read)g(or)g
-(write)g(op)r(eration.)0 4378 y Fd(Synopsis:)121 b Ft(void)42
-b(astSetStatus\()c(int)k(status_value)d(\))0 4580 y Fd(P)m(arameters:)
-259 4769 y(status)p Ft(_)p Fd(v)-5 b(alue)427 4868 y
-Fj(The)28 b(new)g(error)d(status)j(v)-5 b(alue)27 b(to)h(b)r(e)g(set.)0
-5083 y Fd(Notes:)340 5418 y Fi(\017)45 b Fj(If)26 b(the)g(AST)g(error)d
-(status)i(is)g(set)h(to)f(an)g(error)f(v)-5 b(alue,)25
-b(most)g(AST)h(functions)g(will)g(not)f(execute)g(and)g(will)427
-5517 y(simply)34 b(return)f(without)h(action.)53 b(T)-7
-b(o)34 b(clear)e(the)i(error)d(status)i(and)h(restore)e(normal)g(b)r
-(eha)n(viour,)i(use)427 5617 y(astClearStatus.)p eop
-end
-%%Page: 339 349
-TeXDict begin 339 348 bop 3643 52 a FF(339)p 0 351 3780
-12 v 0 482 a Fz(astSetUnc)816 483 y Fe(Store)38 b(uncertain)m(t)m(y)e
-(information)f(in)j(a)h(Region)3183 482 y Fz(astSetUnc)0
-672 y Fd(Description:)44 b Fj(Eac)n(h)33 b(Region)h(\(of)g(an)n(y)g
-(class\))f(can)h(ha)n(v)n(e)f(an)h Ft(")p Fj(uncertain)n(t)n(y)p
-Ft(")e Fj(whic)n(h)j(sp)r(eci\014es)f(the)g(uncertain)n(ties)227
-772 y(asso)r(ciated)27 b(with)i(the)g(b)r(oundary)e(of)h(the)h(Region.)
-38 b(This)29 b(information)e(is)h(supplied)h(in)g(the)f(form)g(of)g(a)g
-(second)227 871 y(Region.)77 b(The)41 b(uncertain)n(t)n(y)f(in)h(an)n
-(y)f(p)r(oin)n(t)i(on)e(the)i(b)r(oundary)e(of)h(a)g(Region)f(is)h
-(found)g(b)n(y)g(shifting)g(the)227 971 y(asso)r(ciated)24
-b Ft(")p Fj(uncertain)n(t)n(y)p Ft(")g Fj(Region)g(so)h(that)h(it)f(is)
-g(cen)n(tred)g(at)g(the)h(b)r(oundary)f(p)r(oin)n(t)g(b)r(eing)g
-(considered.)36 b(The)227 1070 y(area)c(co)n(v)n(ered)g(b)n(y)h(the)h
-(shifted)g(uncertain)n(t)n(y)f(Region)g(then)h(represen)n(ts)e(the)i
-(uncertain)n(t)n(y)f(in)g(the)h(b)r(oundary)227 1170
-y(p)r(osition.)j(The)28 b(uncertain)n(t)n(y)e(is)i(assumed)f(to)g(b)r
-(e)h(the)g(same)f(for)g(all)h(p)r(oin)n(ts.)227 1293
-y(The)j(uncertain)n(t)n(y)e(is)i(usually)f(sp)r(eci\014ed)h(when)f(the)
-h(Region)f(is)g(created,)h(but)g(this)g(function)g(allo)n(ws)e(it)i(to)
-f(b)r(e)227 1393 y(c)n(hanged)d(at)g(an)n(y)g(time.)0
-1540 y Fd(Synopsis:)121 b Ft(void)42 b(astSetUnc\()d(AstRegion)h
-Fi(\003)p Ft(this,)h(AstRegion)f Fi(\003)p Ft(unc)i(\))0
-1687 y Fd(P)m(arameters:)259 1822 y(this)427 1921 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Region)f(whic)n(h)g(is)h(to)f(b)r(e)h(assigned)e(a)i(new)f
-(uncertain)n(t)n(y)-7 b(.)259 2052 y Fd(unc)427 2151
-y Fj(P)n(oin)n(ter)39 b(to)i(the)f(new)h(uncertain)n(t)n(y)f(Region.)74
-b(This)41 b(m)n(ust)g(b)r(e)f(of)h(a)f(class)g(for)f(whic)n(h)i(all)f
-(instances)427 2251 y(are)27 b(cen)n(tro-symetric)e(\(e.g.)37
-b(Bo)n(x,)26 b(Circle,)i(Ellipse,)f(etc.\))37 b(or)27
-b(b)r(e)g(a)g(Prism)g(con)n(taining)g(cen)n(tro-symetric)427
-2351 y(comp)r(onen)n(t)c(Regions.)34 b(A)24 b(deep)f(cop)n(y)f(of)h
-(the)g(supplied)g(Region)f(will)i(b)r(e)f(tak)n(en,)g(so)f(subsequen)n
-(t)h(c)n(hanges)427 2450 y(to)f(the)h(uncertain)n(t)n(y)e(Region)g
-(using)h(the)g(supplied)h(p)r(oin)n(ter)e(will)h(ha)n(v)n(e)f(no)h
-(e\013ect)h(on)e(the)i(Region)e Ft(")p Fj(this)p Ft(")p
-Fj(.)p 0 2645 V 0 2777 a Fz(astShiftMap)697 b Fe(Create)37
-b(a)i(ShiftMap)695 b Fz(astShiftMap)0 2961 y Fd(Description:)44
-b Fj(This)28 b(function)g(creates)f(a)g(new)g(ShiftMap)i(and)e
-(optionally)g(initialises)g(its)h(attributes.)227 3085
-y(A)g(ShiftMap)h(is)e(a)g(linear)g(Mapping)g(whic)n(h)h(shifts)g(eac)n
-(h)f(axis)f(b)n(y)i(a)f(sp)r(eci\014ed)h(constan)n(t)f(v)-5
-b(alue.)0 3232 y Fd(Synopsis:)121 b Ft(AstShiftMap)39
-b Fi(\003)p Ft(astShiftMap\()f(int)k(ncoord,)f(const)h(double)f
-(shift[],)f(const)h(char)h Fi(\003)p Ft(options,)227
-3331 y(...)86 b(\))0 3479 y Fd(P)m(arameters:)259 3613
-y(nco)s(ord)427 3712 y Fj(The)25 b(n)n(um)n(b)r(er)f(of)g(co)r
-(ordinate)g(v)-5 b(alues)24 b(for)g(eac)n(h)f(p)r(oin)n(t)i(to)f(b)r(e)
-h(transformed)f(\(i.e.)36 b(the)25 b(n)n(um)n(b)r(er)f(of)g(dimen-)427
-3812 y(sions)31 b(of)h(the)h(space)e(in)h(whic)n(h)g(the)g(p)r(oin)n
-(ts)g(will)g(reside\).)50 b(The)32 b(same)f(n)n(um)n(b)r(er)h(is)g
-(applicable)f(to)h(b)r(oth)427 3912 y(input)d(and)e(output)h(p)r(oin)n
-(ts.)259 4042 y Fd(shift)427 4142 y Fj(An)d(arra)n(y)e(con)n(taining)g
-(the)i(v)-5 b(alues)24 b(to)h(b)r(e)g(added)f(on)g(to)h(the)g(input)g
-(co)r(ordinates)e(in)i(order)e(to)i(create)e(the)427
-4241 y(output)28 b(co)r(ordinates.)36 b(A)28 b(separate)e(v)-5
-b(alue)27 b(should)h(b)r(e)g(supplied)g(for)f(eac)n(h)g(co)r(ordinate.)
-259 4372 y Fd(options)427 4472 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 4571 y(assignmen)n(ts)23
-b(to)h(b)r(e)g(used)g(for)f(initialising)h(the)g(new)g(ShiftMap.)36
-b(The)24 b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)f(that)427
-4671 y(for)j(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-4770 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 4901
-y Fd(...)427 5001 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 5100 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 5200 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 5300 y Fj(function\).)0 5459
-y Fd(Returned)32 b(V)-8 b(alue:)259 5593 y(astShiftMap\(\))427
-5693 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(ShiftMap.)p
-eop end
-%%Page: 340 350
-TeXDict begin 340 349 bop 0 52 a FF(340)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Notes:)340
-656 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35
-b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g
-(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427
-756 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)-2 941 y Fd(Status)33 b(Handling)n(:)227
-1087 y Fj(The)d(protected)g(in)n(terface)f(to)g(this)h(function)h
-(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g(the)g
-(parameter)227 1186 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62
-b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)
-e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fj(in)n(t)227
-1286 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p 0 1508 3780
-12 v 0 1640 a Fz(astSho)l(w)165 b Fe(Displa)m(y)37 b(a)i(textual)e
-(represen)m(tation)f(of)i(an)g(Ob)7 b(ject)38 b(on)1473
-1754 y(standard)g(output)3299 1640 y Fz(astSho)l(w)0
-1966 y Fd(Description:)44 b Fj(This)27 b(function)g(displa)n(ys)f(a)g
-(textual)g(description)g(of)h(an)n(y)f(AST)h(Ob)5 b(ject)26
-b(on)g(standard)g(output.)37 b(It)27 b(is)227 2065 y(pro)n(vided)g
-(primarily)f(as)h(an)h(aid)f(to)g(debugging.)0 2238 y
-Fd(Synopsis:)121 b Ft(void)42 b(astShow\()e(AstObject)g
-Fi(\003)p Ft(this)h(\))0 2410 y Fd(P)m(arameters:)259
-2569 y(this)427 2668 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5
-b(ject)27 b(to)h(b)r(e)g(displa)n(y)n(ed.)0 2853 y Fd(Class)j
-(Applicabilit)m(y:)259 3012 y(Ob)5 b(ject)427 3112 y
-Fj(This)28 b(function)g(applies)f(to)h(all)f(Ob)5 b(jects.)p
-0 3334 V 0 3465 a Fz(astSho)l(wMesh)231 b Fe(Displa)m(y)38
-b(a)g(mesh)h(of)f(p)s(oin)m(ts)g(co)m(v)m(ering)1300
-3580 y(the)h(surface)f(of)g(a)h(Region)2982 3465 y Fz(astSho)l(wMesh)0
-3791 y Fd(Description:)44 b Fj(This)32 b(function)g(writes)f(a)g(table)
-g(to)g(standard)g(output)h(con)n(taining)e(the)i(axis)f(v)-5
-b(alues)31 b(at)g(a)g(mesh)h(of)227 3891 y(p)r(oin)n(ts)f(co)n(v)n
-(ering)e(the)j(surface)e(of)h(the)h(supplied)g(Region.)47
-b(Eac)n(h)29 b(ro)n(w)h(of)i(output)f(con)n(tains)g(a)f(tab-separated)
-227 3991 y(list)36 b(of)f(axis)f(v)-5 b(alues,)37 b(one)e(for)g(eac)n
-(h)f(axis)h(in)g(the)h(F)-7 b(rame)35 b(encapsulated)f(b)n(y)h(the)h
-(Region.)59 b(The)36 b(n)n(um)n(b)r(er)f(of)227 4090
-y(p)r(oin)n(ts)28 b(in)g(the)g(mesh)f(is)h(determined)g(b)n(y)f(the)h
-(MeshSize)f(attribute.)227 4226 y(The)33 b(table)g(is)g(preceeded)g(b)n
-(y)f(a)h(giv)n(en)f(title)i(string,)g(and)e(follo)n(w)n(ed)g(b)n(y)h(a)
-g(single)f(line)h(con)n(taining)f(the)i(w)n(ord)227 4326
-y Ft(")p Fj(ENDMESH)p Ft(")p Fj(.)0 4498 y Fd(Synopsis:)121
-b Ft(void)42 b(astShowMesh\()c(AstRegion)i Fi(\003)p
-Ft(this,)h(int)i(format,)d(const)i(char)g Fi(\003)p Ft(ttl)g(\))0
-4670 y Fd(P)m(arameters:)259 4829 y(this)427 4929 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Region.)259 5073 y Fd(format)427 5173 y
-Fj(A)g(b)r(o)r(olean)f(v)-5 b(alue)28 b(indicating)g(if)g(the)g(displa)
-n(y)n(ed)e(axis)h(v)-5 b(alues)28 b(should)f(b)r(e)h(formatted)g
-(according)e(to)h(the)427 5272 y(F)-7 b(ormat)30 b(attribute)g(asso)r
-(ciated)e(with)j(the)f(F)-7 b(rame's)29 b(axis.)43 b(Otherwise,)30
-b(they)g(are)f(displa)n(y)n(ed)g(as)g(simple)427 5372
-y(\015oating)e(p)r(oin)n(t)h(v)-5 b(alues.)259 5516 y
-Fd(ttl)427 5616 y Fj(A)28 b(title)g(to)g(displa)n(y)f(b)r(efore)g
-(displa)n(ying)g(the)h(\014rst)f(p)r(osition.)p eop end
-%%Page: 341 351
-TeXDict begin 341 350 bop 3643 52 a FF(341)p 0 351 3780
-12 v 0 483 a Fz(astSimplify)729 b Fe(Simplify)37 b(a)h(Mapping)727
-b Fz(astSimplify)0 678 y Fd(Description:)44 b Fj(This)h(function)g
-(simpli\014es)g(a)f(Mapping)g(\(whic)n(h)h(ma)n(y)e(b)r(e)i(a)f(comp)r
-(ound)h(Mapping)f(suc)n(h)g(as)g(a)227 778 y(CmpMap\))32
-b(to)g(eliminate)f(redundan)n(t)h(computational)e(steps,)j(or)e(to)g
-(merge)g(separate)f(steps)h(whic)n(h)h(can)f(b)r(e)227
-878 y(p)r(erformed)c(more)g(e\016cien)n(tly)h(in)g(a)f(single)g(op)r
-(eration.)227 1003 y(As)e(a)g(simple)g(example,)h(a)e(Mapping)h(whic)n
-(h)g(m)n(ultiplied)h(co)r(ordinates)e(b)n(y)h(5,)g(and)g(then)h(m)n
-(ultiplied)f(the)h(result)227 1103 y(b)n(y)35 b(10,)g(could)g(b)r(e)g
-(simpli\014ed)g(to)f(a)h(single)f(step)h(whic)n(h)f(m)n(ultiplied)i(b)n
-(y)e(50.)57 b(Similarly)-7 b(,)36 b(a)e(Mapping)h(whic)n(h)227
-1202 y(m)n(ultiplied)29 b(b)n(y)e(5,)g(and)h(then)g(divided)g(b)n(y)f
-(5,)g(could)h(b)r(e)g(reduced)f(to)g(a)g(simple)h(cop)n(ying)f(op)r
-(eration.)227 1328 y(This)21 b(function)h(should)f(t)n(ypically)g(b)r
-(e)g(applied)h(to)f(Mappings)f(whic)n(h)h(ha)n(v)n(e)f(undergone)h
-(substan)n(tial)f(pro)r(cessing)227 1428 y(or)i(ha)n(v)n(e)f(b)r(een)i
-(formed)f(b)n(y)g(merging)f(other)h(Mappings.)35 b(It)22
-b(is)h(of)f(p)r(oten)n(tial)g(b)r(ene\014t,)j(for)d(example,)h(in)f
-(reducing)227 1527 y(execution)28 b(time)g(if)g(applied)f(b)r(efore)h
-(using)f(a)g(Mapping)g(to)h(transform)e(a)h(large)g(n)n(um)n(b)r(er)g
-(of)g(co)r(ordinates.)0 1679 y Fd(Synopsis:)121 b Ft(AstMapping)39
-b Fi(\003)p Ft(astSimplify\()f(AstMapping)i Fi(\003)p
-Ft(this)h(\))0 1830 y Fd(P)m(arameters:)259 1969 y(this)427
-2068 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(original)e(Mapping.)0
-2232 y Fd(Class)31 b(Applicabilit)m(y:)259 2371 y(Mapping)427
-2470 y Fj(This)d(function)g(applies)f(to)h(all)f(Mappings.)259
-2604 y Fd(F)-8 b(rameSet)427 2704 y Fj(If)29 b(the)f(supplied)g
-(Mapping)g(is)f(a)h(F)-7 b(rameSet,)28 b(the)g(returned)g(Mapping)f
-(will)h(b)r(e)h(a)e(cop)n(y)g(of)h(the)g(supplied)427
-2804 y(F)-7 b(rameSet)28 b(in)g(whic)n(h)f(all)g(the)h(in)n(ter-F)-7
-b(rame)27 b(Mappings)g(ha)n(v)n(e)f(b)r(een)i(simpli\014ed.)0
-2967 y Fd(Returned)k(V)-8 b(alue:)259 3106 y(astSimplify\(\))427
-3206 y Fj(A)28 b(new)g(p)r(oin)n(ter)f(to)h(the)g(\(p)r(ossibly)f
-(simpli\014ed\))h(Mapping.)0 3369 y Fd(Notes:)340 3654
-y Fi(\017)45 b Fj(This)39 b(function)g(can)g(safely)f(b)r(e)h(applied)g
-(ev)n(en)f(to)h(Mappings)f(whic)n(h)h(cannot)f(b)r(e)i(simpli\014ed.)71
-b(If)39 b(no)427 3754 y(simpli\014cation)22 b(is)h(p)r(ossible,)g(it)g
-(b)r(eha)n(v)n(es)e(exactly)h(lik)n(e)g(astClone)f(and)i(returns)e(a)h
-(p)r(oin)n(ter)g(to)g(the)h(original)427 3853 y(Mapping.)340
-3987 y Fi(\017)45 b Fj(The)40 b(Mapping)g(returned)g(b)n(y)g(this)g
-(function)h(ma)n(y)e(not)h(b)r(e)h(indep)r(enden)n(t)g(of)f(the)h
-(original)d(\(ev)n(en)i(if)427 4087 y(simpli\014cation)34
-b(w)n(as)e(p)r(ossible\),)j(and)f(mo)r(difying)f(it)i(ma)n(y)d
-(therefore)h(result)g(in)h(indirect)g(mo)r(di\014cation)427
-4186 y(of)29 b(the)h(original.)40 b(If)30 b(a)f(completely)g(indep)r
-(enden)n(t)h(result)f(is)g(required,)g(a)g(cop)n(y)f(should)h(b)r(e)h
-(made)f(using)427 4286 y(astCop)n(y)-7 b(.)340 4420 y
-Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g
-(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g
-(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 4520
-y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f
-(an)n(y)g(reason.)p 0 4721 V 0 4853 a Fz(astSkyF)-11
-b(rame)644 b Fe(Create)37 b(a)i(SkyF)-10 b(rame)642 b
-Fz(astSkyF)-11 b(rame)0 5043 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(SkyF)-7 b(rame)27 b(and)h(optionally)e
-(initialises)i(its)f(attributes.)227 5169 y(A)h(SkyF)-7
-b(rame)26 b(is)h(a)f(sp)r(ecialised)h(form)f(of)h(F)-7
-b(rame)27 b(whic)n(h)f(describ)r(es)h(celestial)f(longitude/latitude)h
-(co)r(ordinate)227 5269 y(systems.)53 b(The)33 b(particular)f
-(celestial)h(co)r(ordinate)f(system)h(to)g(b)r(e)g(represen)n(ted)f(is)
-h(sp)r(eci\014ed)g(b)n(y)g(setting)g(the)227 5368 y(SkyF)-7
-b(rame's)33 b(System)g(attribute)h(\(curren)n(tly)-7
-b(,)34 b(the)g(default)g(is)f(ICRS\))h(quali\014ed,)h(as)d(necessary)-7
-b(,)34 b(b)n(y)f(a)g(mean)227 5468 y(Equino)n(x)27 b(v)-5
-b(alue)27 b(and/or)f(an)h(Ep)r(o)r(c)n(h.)227 5593 y(F)-7
-b(or)28 b(eac)n(h)f(of)g(the)i(supp)r(orted)e(celestial)h(co)r
-(ordinate)e(systems,)i(a)f(SkyF)-7 b(rame)27 b(can)h(apply)f(an)h
-(optional)f(shift)i(of)227 5693 y(origin)21 b(to)h(create)f(a)h(co)r
-(ordinate)f(system)h(represen)n(ting)e(o\013sets)i(within)h(the)g
-(celestial)e(co)r(ordinate)g(system)h(from)p eop end
-%%Page: 342 352
-TeXDict begin 342 351 bop 0 52 a FF(342)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)227 351 y Fj(some)j(sp)r(eci\014ed)h
-(p)r(oin)n(t.)55 b(This)34 b(o\013set)f(co)r(ordinate)g(system)g(can)g
-(also)g(b)r(e)h(rotated)f(to)g(de\014ne)h(new)g(longitude)227
-451 y(and)28 b(latitude)g(axes.)36 b(See)27 b(attributes)h(SkyRef,)g
-(SkyRefIs)f(and)h(SkyRefP)227 571 y(All)34 b(the)f(co)r(ordinate)f(v)-5
-b(alues)33 b(used)g(b)n(y)g(a)g(SkyF)-7 b(rame)32 b(are)h(in)g
-(radians.)52 b(These)33 b(ma)n(y)g(b)r(e)g(formatted)g(in)g(more)227
-670 y(con)n(v)n(en)n(tional)26 b(w)n(a)n(ys)g(for)h(displa)n(y)g(b)n(y)
-g(using)g(astF)-7 b(ormat.)0 811 y Fd(Synopsis:)121 b
-Ft(AstSkyFrame)39 b Fi(\003)p Ft(astSkyFrame\()f(const)k(char)f
-Fi(\003)p Ft(options,)f(...)86 b(\))0 951 y Fd(P)m(arameters:)259
-1078 y(options)427 1177 y Fj(P)n(oin)n(ter)27 b(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 1277 y(assignmen)n(ts)21
-b(to)h(b)r(e)h(used)f(for)g(initialising)g(the)g(new)g(SkyF)-7
-b(rame.)35 b(The)22 b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)g(that)
-427 1377 y(for)k(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-1476 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)35 b(If)28
-b(no)g(initialisation)f(is)g(required,)g(a)g(zero-length)f(string)h(ma)
-n(y)g(b)r(e)h(supplied.)259 1600 y Fd(...)427 1699 y
-Fj(If)38 b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 1799 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 1899 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 1998 y Fj(function\).)0
-2151 y Fd(Returned)32 b(V)-8 b(alue:)259 2278 y(astSkyF)g(rame\(\))427
-2378 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(SkyF)-7
-b(rame.)0 2530 y Fd(Examples:)227 2658 y Fq(frame)47
-b(=)g(astSkyFrame\()e Ft("")h Fq(\);)427 2757 y Fj(Creates)27
-b(a)g(SkyF)-7 b(rame)27 b(to)g(describ)r(e)g(the)h(default)h(ICRS)e
-(celestial)g(co)r(ordinate)g(system.)227 2881 y Fq(frame)47
-b(=)g(astSkyFrame\()e Ft(")p Fq(System)g(=)j(FK5,)e(Equinox)g(=)i
-(J2005,)e(Digits)g(=)h(10)p Ft(")g Fq(\);)427 2980 y
-Fj(Creates)23 b(a)g(SkyF)-7 b(rame)23 b(to)h(describ)r(e)f(the)h(FK5)f
-(celestial)g(co)r(ordinate)g(system,)h(with)g(a)g(mean)f(Equino)n(x)g
-(of)427 3080 y(J2005.0.)33 b(Because)23 b(esp)r(ecially)g(accurate)f
-(co)r(ordinates)g(will)i(b)r(e)g(used,)g(additional)f(precision)g(\(10)
-f(digits\))427 3179 y(has)27 b(b)r(een)h(requested.)37
-b(This)27 b(will)h(b)r(e)g(used)g(when)f(co)r(ordinate)g(v)-5
-b(alues)27 b(are)g(formatted)g(for)g(displa)n(y)-7 b(.)227
-3304 y Fq(frame)47 b(=)g(astSkyFrame\()e Ft(")p Fq(System)g(=)j(FK4,)e
-(Equinox)g(=)i(1955-sep-2)p Ft(")c Fq(\);)427 3402 y
-Fj(Creates)32 b(a)g(SkyF)-7 b(rame)31 b(to)i(describ)r(e)f(the)h(old)f
-(FK4)g(celestial)g(co)r(ordinate)f(system.)51 b(A)33
-b(default)g(Ep)r(o)r(c)n(h)427 3502 y(v)-5 b(alue)28
-b(\(B1950.0\))d(is)j(used,)g(but)g(the)g(mean)f(Equino)n(x)f(v)-5
-b(alue)28 b(is)f(giv)n(en)g(explicitly)h(as)f Ft(")p
-Fj(1955-sep-2)p Ft(")p Fj(.)227 3626 y Fq(frame)47 b(=)g(astSkyFrame\()
-e Ft(")p Fq(System)g(=)j(GAPPT,)e(Epoch)g(=)i(\045s)p
-Ft(")p Fq(,)e(date)h(\);)427 3725 y Fj(Creates)32 b(a)h(SkyF)-7
-b(rame)32 b(to)h(describ)r(e)f(the)i(Geo)r(cen)n(tric)e(Apparen)n(t)h
-(celestial)f(co)r(ordinate)g(system.)53 b(The)427 3825
-y(Ep)r(o)r(c)n(h)37 b(v)-5 b(alue,)39 b(whic)n(h)e(sp)r(eci\014es)g
-(the)g(date)g(of)g(observ)-5 b(ation,)38 b(is)f(obtained)f(from)h(a)f
-(date/time)h(string)427 3924 y(supplied)28 b(via)f(the)h(string)f(p)r
-(oin)n(ter)g Ft(")p Fj(date)p Ft(")p Fj(.)0 4077 y Fd(Notes:)340
-4350 y Fi(\017)45 b Fj(Curren)n(tly)-7 b(,)26 b(the)g(default)h
-(celestial)e(co)r(ordinate)g(system)g(is)h(ICRS.)h(Ho)n(w)n(ev)n(er,)d
-(this)i(default)h(ma)n(y)e(c)n(hange)427 4450 y(in)34
-b(future)g(as)f(new)h(astrometric)e(standards)g(ev)n(olv)n(e.)54
-b(The)33 b(in)n(ten)n(tion)h(is)g(to)f(trac)n(k)f(the)i(most)g(mo)r
-(dern)427 4549 y(appropriate)e(standard.)55 b(F)-7 b(or)33
-b(this)h(reason,)g(y)n(ou)f(should)g(use)h(the)g(default)g(only)g(if)g
-(this)g(is)g(what)f(y)n(ou)427 4649 y(in)n(tend)j(\(and)f(can)f
-(tolerate)g(an)n(y)g(asso)r(ciated)g(sligh)n(t)g(c)n(hange)g(in)h(b)r
-(eha)n(viour)f(with)h(future)h(v)n(ersions)d(of)427 4749
-y(this)d(function\).)43 b(If)30 b(y)n(ou)e(in)n(tend)i(to)f(use)g(the)h
-(ICRS)f(system)h(inde\014nitely)-7 b(,)30 b(then)g(y)n(ou)e(should)i
-(sp)r(ecify)f(it)427 4848 y(explicitly)f(using)f(an)h
-Ft(")p Fj(options)p Ft(")e Fj(v)-5 b(alue)27 b(of)h Ft(")p
-Fj(System=ICRS)p Ft(")p Fj(.)340 4972 y Fi(\017)45 b
-Fj(Whic)n(hev)n(er)25 b(celestial)g(co)r(ordinate)f(system)h(is)g
-(represen)n(ted,)g(it)h(will)g(ha)n(v)n(e)e(t)n(w)n(o)g(axes.)36
-b(The)25 b(\014rst)g(of)h(these)427 5071 y(will)f(b)r(e)f(the)h
-(longitude)f(axis)g(and)g(the)h(second)e(will)i(b)r(e)f(the)h(latitude)
-g(axis.)35 b(This)24 b(order)f(can)h(b)r(e)h(c)n(hanged)427
-5171 y(using)j(astP)n(ermAxes)d(if)j(required.)340 5295
-y Fi(\017)45 b Fj(When)40 b(con)n(v)n(ersion)d(b)r(et)n(w)n(een)i(t)n
-(w)n(o)g(SkyF)-7 b(rames)38 b(is)h(requested)g(\(as)g(when)g(supplying)
-g(SkyF)-7 b(rames)39 b(to)427 5394 y(astCon)n(v)n(ert\),)h(accoun)n(t)d
-(will)i(b)r(e)g(tak)n(en)f(of)g(the)h(nature)f(of)g(the)h(celestial)f
-(co)r(ordinate)f(systems)h(they)427 5494 y(represen)n(t,)22
-b(together)g(with)h(an)n(y)e(qualifying)h(mean)g(Equino)n(x)f(or)g(Ep)r
-(o)r(c)n(h)h(v)-5 b(alues,)23 b(etc.)35 b(The)22 b(AlignSystem)427
-5593 y(attribute)d(will)h(also)e(b)r(e)h(tak)n(en)f(in)n(to)h(accoun)n
-(t.)33 b(The)19 b(results)g(will)g(therefore)f(fully)h(re\015ect)g(the)
-g(relationship)427 5693 y(b)r(et)n(w)n(een)28 b(p)r(ositions)f(on)g
-(the)h(sky)f(measured)g(in)h(the)g(t)n(w)n(o)f(systems.)p
-eop end
-%%Page: 343 353
-TeXDict begin 343 352 bop 3643 52 a FF(343)340 351 y
-Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g
-(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g
-(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 451
-y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f
-(an)n(y)g(reason.)p 0 654 3780 12 v 0 785 a Fz(astSlaAdd)186
-b Fe(Add)39 b(a)g(celestial)d(co)s(ordinate)h(con)m(v)m(ersion)g(to)h
-(an)1696 885 y(SlaMap)3180 785 y Fz(astSlaAdd)0 1077
-y Fd(Description:)44 b Fj(This)31 b(function)g(adds)f(one)h(of)f(the)h
-(standard)f(celestial)g(co)r(ordinate)f(system)i(con)n(v)n(ersions)d
-(pro)n(vided)227 1177 y(b)n(y)23 b(the)f(SLALIB)h(P)n(ositional)e
-(Astronom)n(y)g(Library)g(\(Starlink)h(User)h(Note)f(SUN/67\))g(to)h
-(an)f(existing)g(SlaMap.)227 1303 y(When)27 b(an)f(SlaMap)g(is)g
-(\014rst)g(created)g(\(using)g(astSlaMap\),)g(it)h(simply)f(p)r
-(erforms)g(a)g(unit)h(\(n)n(ull\))g(Mapping.)36 b(By)227
-1403 y(using)c(astSlaAdd)g(\(rep)r(eatedly)g(if)h(necessary\),)f(one)f
-(or)h(more)f(co)r(ordinate)g(con)n(v)n(ersion)f(steps)i(ma)n(y)g(then)g
-(b)r(e)227 1502 y(added,)k(whic)n(h)f(the)f(SlaMap)g(will)h(p)r(erform)
-f(in)g(sequence.)57 b(This)34 b(allo)n(ws)f(m)n(ulti-step)i(con)n(v)n
-(ersions)d(b)r(et)n(w)n(een)227 1602 y(a)h(v)-5 b(ariet)n(y)33
-b(of)g(celestial)h(co)r(ordinate)e(systems)h(to)g(b)r(e)h(assem)n(bled)
-f(out)g(of)h(the)g(building)g(blo)r(c)n(ks)e(pro)n(vided)h(b)n(y)227
-1702 y(SLALIB.)227 1828 y(Normally)-7 b(,)29 b(if)h(an)f(SlaMap's)g(In)
-n(v)n(ert)g(attribute)g(is)h(zero)e(\(the)i(default\),)h(then)f(its)f
-(forw)n(ard)f(transformation)g(is)227 1927 y(p)r(erformed)e(b)n(y)h
-(carrying)e(out)h(eac)n(h)g(of)h(the)g(individual)g(co)r(ordinate)e
-(con)n(v)n(ersions)f(sp)r(eci\014ed)j(b)n(y)g(astSlaAdd)f(in)227
-2027 y(the)i(order)e(giv)n(en)h(\(i.e.)38 b(with)28 b(the)g(most)f
-(recen)n(tly)g(added)g(con)n(v)n(ersion)f(applied)h(last\).)227
-2153 y(This)f(order)f(is)h(rev)n(ersed)f(if)h(the)h(SlaMap's)e(In)n(v)n
-(ert)h(attribute)g(is)g(non-zero)f(\(or)g(if)i(the)g(in)n(v)n(erse)d
-(transformation)227 2253 y(is)j(requested)f(b)n(y)h(an)n(y)f(other)g
-(means\))h(and)g(eac)n(h)f(individual)h(co)r(ordinate)f(con)n(v)n
-(ersion)e(is)j(also)f(replaced)g(b)n(y)g(its)227 2353
-y(o)n(wn)f(in)n(v)n(erse.)35 b(This)25 b(pro)r(cess)f(in)n(v)n(erts)g
-(the)i(o)n(v)n(erall)d(e\013ect)j(of)g(the)f(SlaMap.)36
-b(In)25 b(this)h(case,)f(the)h(\014rst)f(con)n(v)n(ersion)227
-2452 y(to)j(b)r(e)g(applied)f(w)n(ould)g(b)r(e)h(the)g(in)n(v)n(erse)f
-(of)g(the)h(one)f(most)h(recen)n(tly)f(added.)0 2605
-y Fd(Synopsis:)121 b Ft(void)42 b(astSlaAdd\()d(AstSlaMap)h
-Fi(\003)p Ft(this,)h(const)h(char)g Fi(\003)p Ft(cvt,)f(const)h(double)
-f(args[])g(\))0 2758 y Fd(P)m(arameters:)259 2898 y(this)427
-2997 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(SlaMap.)259 3132
-y Fd(cvt)427 3232 y Fj(P)n(oin)n(ter)g(to)h(a)h(n)n(ull-terminated)f
-(string)g(whic)n(h)g(iden)n(ti\014es)h(the)f(celestial)g(co)r(ordinate)
-g(con)n(v)n(ersion)e(to)i(b)r(e)427 3331 y(added)f(to)f(the)h(SlaMap.)
-37 b(See)27 b(the)h Ft(")p Fj(SLALIB)f(Con)n(v)n(ersions)p
-Ft(")e Fj(section)i(for)g(details)h(of)f(those)g(a)n(v)-5
-b(ailable.)259 3466 y Fd(args)427 3565 y Fj(An)29 b(arra)n(y)d(con)n
-(taining)h(argumen)n(t)g(v)-5 b(alues)28 b(for)f(the)i(celestial)e(co)r
-(ordinate)g(con)n(v)n(ersion.)37 b(The)28 b(n)n(um)n(b)r(er)g(of)427
-3665 y(argumen)n(ts)22 b(required,)h(and)g(hence)g(the)g(n)n(um)n(b)r
-(er)g(of)g(arra)n(y)e(elemen)n(ts)h(used,)i(dep)r(ends)g(on)f(the)g
-(con)n(v)n(ersion)427 3765 y(sp)r(eci\014ed)i(\(see)f(the)h
-Ft(")p Fj(SLALIB)f(Con)n(v)n(ersions)p Ft(")d Fj(section\).)36
-b(This)24 b(arra)n(y)e(is)i(ignored)f(and)h(a)g(NULL)h(p)r(oin)n(ter)
-427 3864 y(ma)n(y)i(b)r(e)h(supplied)g(if)g(no)g(argumen)n(ts)e(are)g
-(needed.)0 4030 y Fd(Notes:)340 4315 y Fi(\017)45 b Fj(All)38
-b(co)r(ordinate)d(v)-5 b(alues)37 b(pro)r(cessed)e(b)n(y)i(an)f(SlaMap)
-h(are)e(in)i(radians.)64 b(The)36 b(\014rst)h(co)r(ordinate)f(is)g(the)
-427 4415 y(celestial)27 b(longitude)h(and)f(the)h(second)f(co)r
-(ordinate)g(is)g(the)h(celestial)f(latitude.)340 4550
-y Fi(\017)45 b Fj(When)21 b(assem)n(bling)d(a)i(m)n(ulti-stage)f(con)n
-(v)n(ersion,)g(it)h(can)g(sometimes)f(b)r(e)h(di\016cult)h(to)f
-(determine)g(the)g(most)427 4649 y(economical)j(con)n(v)n(ersion)e
-(path.)36 b(F)-7 b(or)23 b(example,)h(con)n(v)n(erting)e(to)i(the)g
-(standard)f(FK5)g(co)r(ordinate)g(system)427 4749 y(as)37
-b(an)h(in)n(termediate)f(stage)g(is)g(often)h(sensible)g(in)g(form)n
-(ulating)f(the)h(problem,)i(but)e(ma)n(y)f(in)n(tro)r(duce)427
-4849 y(unnecessary)31 b(extra)g(con)n(v)n(ersion)f(steps.)51
-b(A)33 b(solution)e(to)h(this)h(is)f(to)g(include)h(all)f(the)g(steps)g
-(whic)n(h)h(are)427 4948 y(\(logically\))40 b(necessary)-7
-b(,)41 b(but)g(then)g(to)f(use)g(astSimplify)h(to)f(simplify)h(the)g
-(resulting)e(SlaMap.)75 b(The)427 5048 y(simpli\014cation)28
-b(pro)r(cess)e(will)i(eliminate)g(an)n(y)f(steps)g(whic)n(h)h(turn)f
-(out)h(not)f(to)h(b)r(e)g(needed.)340 5182 y Fi(\017)45
-b Fj(This)27 b(function)h(do)r(es)f(not)g(c)n(hec)n(k)f(to)h(ensure)g
-(that)g(the)h(sequence)e(of)h(co)r(ordinate)f(con)n(v)n(ersions)f
-(added)i(to)427 5282 y(an)h(SlaMap)f(is)g(ph)n(ysically)g(meaningful.)
--2 5447 y Fd(SLALIB)33 b(Con)m(v)m(ersions)n(:)227 5593
-y Fj(The)39 b(follo)n(wing)f(strings)g(\(whic)n(h)h(are)e
-(case-insensitiv)n(e\))h(ma)n(y)g(b)r(e)h(supplied)g(via)f(the)h
-Ft(")p Fj(cvt)p Ft(")f Fj(parameter)g(to)227 5693 y(indicate)25
-b(whic)n(h)g(celestial)g(co)r(ordinate)f(con)n(v)n(ersion)f(is)i(to)g
-(b)r(e)g(added)g(to)g(the)h(SlaMap.)35 b(Eac)n(h)24 b(string)g(is)h
-(deriv)n(ed)p eop end
-%%Page: 344 354
-TeXDict begin 344 353 bop 0 52 a FF(344)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)227 351 y Fj(from)21
-b(the)g(name)g(of)g(the)g(SLALIB)g(routine)g(that)g(p)r(erforms)f(the)i
-(con)n(v)n(ersion)c(and)j(the)h(relev)-5 b(an)n(t)20
-b(do)r(cumen)n(tation)227 451 y(\(SUN/67\))32 b(should)g(b)r(e)g
-(consulted)g(for)f(details.)50 b(Where)32 b(argumen)n(ts)f(are)g
-(needed)h(b)n(y)f(the)i(con)n(v)n(ersion,)d(they)227
-551 y(are)d(listed)h(in)g(paren)n(theses.)37 b(V)-7 b(alues)27
-b(for)h(these)g(argumen)n(ts)e(should)i(b)r(e)g(giv)n(en,)f(via)h(the)g
-Ft(")p Fj(args)p Ft(")d Fj(arra)n(y)-7 b(,)26 b(in)i(the)227
-650 y(order)k(indicated.)52 b(The)33 b(argumen)n(t)e(names)h(matc)n(h)h
-(the)g(corresp)r(onding)d(SLALIB)j(routine)f(argumen)n(ts)g(and)227
-750 y(their)f(v)-5 b(alues)30 b(should)h(b)r(e)g(giv)n(en)e(using)i
-(exactly)f(the)h(same)f(units,)i(time)f(scale,)f(calendar,)h(etc.)46
-b(as)30 b(describ)r(ed)227 849 y(in)e(SUN/67:)340 1112
-y Fi(\017)45 b Ft(")p Fj(ADDET)p Ft(")28 b Fj(\(EQ\):)f(Add)h(E-terms)f
-(of)g(ab)r(erration.)340 1245 y Fi(\017)45 b Ft(")p Fj(SUBET)p
-Ft(")27 b Fj(\(EQ\):)g(Subtract)h(E-terms)e(of)i(ab)r(erration.)340
-1379 y Fi(\017)45 b Ft(")p Fj(PREBN)p Ft(")26 b Fj(\(BEP0,BEP1\):)35
-b(Apply)28 b(Bessel-New)n(com)n(b)d(pre-IA)n(U)i(1976)f(\(FK4\))i
-(precession)e(mo)r(del.)340 1512 y Fi(\017)45 b Ft(")p
-Fj(PREC)p Ft(")26 b Fj(\(EP0,EP1\):)35 b(Apply)28 b(IA)n(U)g(1975)d
-(\(FK5\))j(precession)e(mo)r(del.)340 1646 y Fi(\017)45
-b Ft(")p Fj(FK45Z)p Ft(")26 b Fj(\(BEPOCH\):)h(Con)n(v)n(ert)f(FK4)h
-(to)g(FK5)g(\(no)h(prop)r(er)e(motion)i(or)e(parallax\).)340
-1779 y Fi(\017)45 b Ft(")p Fj(FK54Z)p Ft(")26 b Fj(\(BEPOCH\):)h(Con)n
-(v)n(ert)f(FK5)h(to)g(FK4)g(\(no)h(prop)r(er)e(motion)i(or)e
-(parallax\).)340 1912 y Fi(\017)45 b Ft(")p Fj(AMP)p
-Ft(")27 b Fj(\(D)n(A)-7 b(TE,EQ\):)27 b(Con)n(v)n(ert)g(geo)r(cen)n
-(tric)f(apparen)n(t)g(to)i(mean)f(place.)340 2046 y Fi(\017)45
-b Ft(")p Fj(MAP)p Ft(")27 b Fj(\(EQ,D)n(A)-7 b(TE\):)27
-b(Con)n(v)n(ert)g(mean)g(place)g(to)h(geo)r(cen)n(tric)e(apparen)n(t.)
-340 2179 y Fi(\017)45 b Ft(")p Fj(ECLEQ)p Ft(")26 b Fj(\(D)n(A)-7
-b(TE\):)28 b(Con)n(v)n(ert)e(ecliptic)i(co)r(ordinates)e(to)i(FK5)f
-(J2000.0)d(equatorial.)340 2312 y Fi(\017)45 b Ft(")p
-Fj(EQECL)p Ft(")26 b Fj(\(D)n(A)-7 b(TE\):)28 b(Con)n(v)n(ert)e
-(equatorial)g(FK5)h(J2000.0)e(to)i(ecliptic)h(co)r(ordinates.)340
-2446 y Fi(\017)45 b Ft(")p Fj(GALEQ)p Ft(")p Fj(:)36
-b(Con)n(v)n(ert)26 b(galactic)g(co)r(ordinates)h(to)g(FK5)g(J2000.0)e
-(equatorial.)340 2579 y Fi(\017)45 b Ft(")p Fj(EQGAL)p
-Ft(")p Fj(:)36 b(Con)n(v)n(ert)26 b(FK5)h(J2000.0)e(equatorial)h(to)h
-(galactic)g(co)r(ordinates.)340 2713 y Fi(\017)45 b Ft(")p
-Fj(HFK5Z)p Ft(")26 b Fj(\(JEPOCH\):)h(Con)n(v)n(ert)f(ICRS)i(co)r
-(ordinates)e(to)i(FK5)f(J2000.0)e(equatorial.)340 2846
-y Fi(\017)45 b Ft(")p Fj(FK5HZ)p Ft(")26 b Fj(\(JEPOCH\):)h(Con)n(v)n
-(ert)f(FK5)h(J2000.0)e(equatorial)h(co)r(ordinates)g(to)i(ICRS.)340
-2979 y Fi(\017)45 b Ft(")p Fj(GALSUP)p Ft(")p Fj(:)37
-b(Con)n(v)n(ert)26 b(galactic)g(to)i(sup)r(ergalactic)e(co)r
-(ordinates.)340 3113 y Fi(\017)45 b Ft(")p Fj(SUPGAL)p
-Ft(")p Fj(:)37 b(Con)n(v)n(ert)26 b(sup)r(ergalactic)g(co)r(ordinates)g
-(to)i(galactic.)340 3246 y Fi(\017)45 b Ft(")p Fj(J2000H)p
-Ft(")p Fj(:)34 b(Con)n(v)n(ert)27 b(dynamical)g(J2000.0)d(to)k(ICRS.)
-340 3380 y Fi(\017)45 b Ft(")p Fj(HJ2000)p Ft(")p Fj(:)34
-b(Con)n(v)n(ert)27 b(ICRS)g(to)h(dynamical)f(J2000.0.)340
-3513 y Fi(\017)45 b Ft(")p Fj(R2H)p Ft(")27 b Fj(\(LAST\):)i(Con)n(v)n
-(ert)d(RA)i(to)f(Hour)g(Angle.)340 3646 y Fi(\017)45
-b Ft(")p Fj(H2R)p Ft(")27 b Fj(\(LAST\):)i(Con)n(v)n(ert)d(Hour)h
-(Angle)g(to)h(RA.)227 3809 y(F)-7 b(or)36 b(example,)j(to)e(use)f(the)i
-Ft(")p Fj(ADDET)p Ft(")e Fj(con)n(v)n(ersion,)h(whic)n(h)g(tak)n(es)f
-(a)g(single)g(argumen)n(t)g(EQ,)g(y)n(ou)g(should)227
-3909 y(consult)c(the)g(do)r(cumen)n(tation)g(for)f(the)i(SLALIB)f
-(routine)f(SLA)p Ft(_)p Fj(ADDET.)h(This)g(describ)r(es)g(the)g(con)n
-(v)n(ersion)227 4009 y(in)e(detail)f(and)h(sho)n(ws)e(that)i(EQ)e(is)i
-(the)f(Besselian)g(ep)r(o)r(c)n(h)g(of)g(the)h(mean)f(equator)g(and)g
-(equino)n(x.)41 b(This)30 b(v)-5 b(alue)227 4108 y(should)28
-b(then)g(b)r(e)g(supplied)g(to)f(astSlaAdd)h(in)f(args[0].)227
-4233 y(In)40 b(addition)g(the)g(follo)n(wing)e(strings)h(ma)n(y)g(b)r
-(e)h(supplied)g(for)f(more)g(complex)g(con)n(v)n(ersions)e(whic)n(h)i
-(do)h(not)227 4333 y(corresp)r(ond)30 b(to)h(an)n(y)g(one)g(single)g
-(SLALIB)g(routine)g(\(DIURAB)i(is)e(the)h(magnitude)f(of)h(the)f
-(diurnal)g(ab)r(erra-)227 4433 y(tion)j(v)n(ector)e(in)h(units)h(of)f
-Ft(")p Fj(da)n(y/\(2.PI\))p Ft(")p Fj(,)f(D)n(A)-7 b(TE)34
-b(is)f(the)h(Mo)r(di\014ed)f(Julian)g(Date)h(of)f(the)g(observ)-5
-b(ation,)34 b(and)227 4532 y(\(OBSX,OBSY,OBZ\))k(are)f(the)i(Helio)r
-(cen)n(tric-Aries-Ecliptic)d(cartesian)h(co)r(ordinates,)j(in)e
-(metres,)j(of)d(the)227 4632 y(observ)n(er\):)340 4894
-y Fi(\017)45 b Ft(")p Fj(HPCEQ)p Ft(")38 b Fj(\(D)n(A)-7
-b(TE,OBSX,OBSY,OBSZ\):)39 b(Con)n(v)n(ert)f(Heliopro)5
-b(jectiv)n(e-Cartesian)36 b(co)r(ordinates)i(to)427 4994
-y(J2000.0)25 b(equatorial.)340 5127 y Fi(\017)45 b Ft(")p
-Fj(EQHPC)p Ft(")17 b Fj(\(D)n(A)-7 b(TE,OBSX,OBSY,OBSZ\):)18
-b(Con)n(v)n(ert)f(J2000.0)e(equatorial)i(co)r(ordinates)g(to)h
-(Heliopro)5 b(jectiv)n(e-)427 5227 y(Cartesian.)340 5360
-y Fi(\017)45 b Ft(")p Fj(HPREQ)p Ft(")17 b Fj(\(D)n(A)-7
-b(TE,OBSX,OBSY,OBSZ\):)18 b(Con)n(v)n(ert)f(Heliopro)5
-b(jectiv)n(e-Radial)16 b(co)r(ordinates)h(to)h(J2000.0)427
-5460 y(equatorial.)340 5593 y Fi(\017)45 b Ft(")p Fj(EQHPR)p
-Ft(")17 b Fj(\(D)n(A)-7 b(TE,OBSX,OBSY,OBSZ\):)18 b(Con)n(v)n(ert)f
-(J2000.0)f(equatorial)g(co)r(ordinates)h(to)h(Heliopro)5
-b(jectiv)n(e-)427 5693 y(Radial.)p eop end
-%%Page: 345 355
-TeXDict begin 345 354 bop 3643 52 a FF(345)340 351 y
-Fi(\017)45 b Ft(")p Fj(HEEQ)p Ft(")26 b Fj(\(D)n(A)-7
-b(TE\):)28 b(Con)n(v)n(ert)e(helio-ecliptic)i(co)r(ordinates)e(to)h
-(J2000.0)e(equatorial.)340 486 y Fi(\017)45 b Ft(")p
-Fj(EQHE)p Ft(")26 b Fj(\(D)n(A)-7 b(TE\):)28 b(Con)n(v)n(ert)e(J2000.0)
-f(equatorial)h(co)r(ordinates)g(to)i(helio-ecliptic.)340
-621 y Fi(\017)45 b Ft(")p Fj(H2E)p Ft(")26 b Fj(\(LA)-7
-b(T,DIR)n(UAB\):)30 b(Con)n(v)n(ert)c(horizon)g(co)r(ordinates)g(to)i
-(equatorial.)340 755 y Fi(\017)45 b Ft(")p Fj(E2H)p Ft(")26
-b Fj(\(LA)-7 b(T,DIURAB\):)30 b(Con)n(v)n(ert)c(equatorial)g(co)r
-(ordinates)g(to)i(horizon.)227 921 y(Note,)40 b(the)e
-Ft(")p Fj(H2E)p Ft(")e Fj(and)i Ft(")p Fj(E2H)p Ft(")e
-Fj(con)n(v)n(ersions)f(con)n(v)n(ert)h(b)r(et)n(w)n(een)i(top)r(o)r
-(cen)n(tric)f(horizon)f(co)r(ordinates)g(\(az-)227 1020
-y(im)n(uth,elev)-5 b(ation\),)39 b(and)d(apparen)n(t)f(lo)r(cal)h
-(equatorial)e(co)r(ordinates)h(\(hour)h(angle,declination\).)61
-b(Th)n(us,)38 b(the)227 1120 y(e\013ects)g(of)f(diurnal)g(ab)r
-(erration)f(are)g(tak)n(en)h(in)n(to)g(accoun)n(t)f(in)i(the)f(con)n(v)
-n(ersions)e(but)j(the)g(e\013ects)f(of)g(atmo-)227 1219
-y(spheric)27 b(refraction)g(are)f(not.)p 0 1422 3780
-12 v 0 1554 a Fz(astSlaMap)811 b Fe(Create)38 b(an)g(SlaMap)810
-b Fz(astSlaMap)0 1746 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(SlaMap)g(and)h(optionally)f
-(initialises)g(its)h(attributes.)227 1873 y(An)19 b(SlaMap)f(is)g(a)g
-(sp)r(ecialised)g(form)g(of)h(Mapping)f(whic)n(h)g(can)g(b)r(e)h(used)f
-(to)h(represen)n(t)e(a)h(sequence)g(of)g(con)n(v)n(ersions)227
-1972 y(b)r(et)n(w)n(een)28 b(standard)e(celestial)i(\(longitude,)f
-(latitude\))i(co)r(ordinate)d(systems.)227 2099 y(When)e(an)e(SlaMap)h
-(is)g(\014rst)f(created,)h(it)h(simply)f(p)r(erforms)f(a)g(unit)i(\(n)n
-(ull\))f(Mapping)g(on)f(a)h(pair)f(of)h(co)r(ordinates.)227
-2198 y(Using)k(the)g(astSlaAdd)g(function,)g(a)g(series)f(of)g(co)r
-(ordinate)g(con)n(v)n(ersion)e(steps)j(ma)n(y)f(then)i(b)r(e)f(added,)g
-(selected)227 2298 y(from)h(those)g(pro)n(vided)f(b)n(y)g(the)i(SLALIB)
-f(P)n(ositional)e(Astronom)n(y)h(Library)f(\(Starlink)i(User)g(Note)g
-(SUN/67\).)227 2398 y(This)21 b(allo)n(ws)f(m)n(ulti-step)i(con)n(v)n
-(ersions)c(b)r(et)n(w)n(een)j(a)g(v)-5 b(ariet)n(y)20
-b(of)i(celestial)e(co)r(ordinate)g(systems)h(to)g(b)r(e)h(assem)n(bled)
-227 2497 y(out)28 b(of)f(the)h(building)g(blo)r(c)n(ks)f(pro)n(vided)g
-(b)n(y)g(SLALIB.)227 2624 y(F)-7 b(or)27 b(details)f(of)h(the)g
-(individual)g(co)r(ordinate)f(con)n(v)n(ersions)f(a)n(v)-5
-b(ailable,)25 b(see)i(the)g(description)g(of)f(the)i(astSlaAdd)227
-2723 y(function.)0 2876 y Fd(Synopsis:)121 b Ft(AstSlaMap)40
-b Fi(\003)p Ft(astSlaMap\()f(int)j(flags,)f(const)h(char)g
-Fi(\003)p Ft(options,)d(...)86 b(\))0 3029 y Fd(P)m(arameters:)259
-3169 y(\015ags)427 3269 y Fj(This)28 b(parameter)e(is)h(reserv)n(ed)f
-(for)h(future)h(use)g(and)f(should)h(curren)n(tly)e(alw)n(a)n(ys)g(b)r
-(e)i(set)f(to)h(zero.)259 3403 y Fd(options)427 3503
-y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-3603 y(assignmen)n(ts)f(to)h(b)r(e)h(used)f(for)f(initialising)h(the)h
-(new)f(SlaMap.)38 b(The)28 b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)
-g(that)427 3702 y(for)e(the)h(astSet)g(function)g(and)g(ma)n(y)f
-(include)h Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g
-(iden)n(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-3802 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)35 b(If)28
-b(no)g(initialisation)f(is)g(required,)g(a)g(zero-length)f(string)h(ma)
-n(y)g(b)r(e)h(supplied.)259 3937 y Fd(...)427 4036 y
-Fj(If)38 b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 4136 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 4235 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 4335 y Fj(function\).)0
-4501 y Fd(Returned)32 b(V)-8 b(alue:)259 4641 y(astSlaMap\(\))427
-4740 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(SlaMap.)0
-4906 y Fd(Notes:)340 5192 y Fi(\017)45 b Fj(The)32 b(Nin)g(and)f(Nout)h
-(attributes)f(\(n)n(um)n(b)r(er)h(of)f(input)i(and)e(output)h(co)r
-(ordinates\))e(for)h(an)h(SlaMap)f(are)427 5291 y(b)r(oth)g(equal)e(to)
-h(2.)44 b(The)30 b(\014rst)g(co)r(ordinate)f(is)h(the)h(celestial)e
-(longitude)h(and)g(the)g(second)g(co)r(ordinate)f(is)427
-5391 y(the)f(celestial)f(latitude.)38 b(All)28 b(co)r(ordinate)e(v)-5
-b(alues)27 b(are)g(in)h(radians.)340 5526 y Fi(\017)45
-b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 5625 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p eop end
-%%Page: 346 356
-TeXDict begin 346 355 bop 0 52 a FF(346)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astSp)t(ecAdd)171 b Fe(Add)39 b(a)g(sp)s(ectral)e(co)s
-(ordinate)g(con)m(v)m(ersion)f(to)1607 596 y(a)i(Sp)s(ecMap)3083
-483 y Fz(astSp)t(ecAdd)0 791 y Fd(Description:)44 b Fj(This)21
-b(function)h(adds)e(one)h(of)g(the)g(standard)f(sp)r(ectral)g(co)r
-(ordinate)g(system)g(con)n(v)n(ersions)f(listed)i(b)r(elo)n(w)227
-890 y(to)28 b(an)f(existing)g(Sp)r(ecMap.)227 1018 y(When)22
-b(a)f(Sp)r(ecMap)h(is)f(\014rst)g(created)g(\(using)g(astSp)r(ecMap\),)
-i(it)f(simply)f(p)r(erforms)g(a)g(unit)h(\(n)n(ull\))g(Mapping.)35
-b(By)227 1117 y(using)28 b(astSp)r(ecAdd)g(\(rep)r(eatedly)g(if)g
-(necessary\),)e(one)i(or)f(more)g(co)r(ordinate)g(con)n(v)n(ersion)e
-(steps)j(ma)n(y)f(then)h(b)r(e)227 1217 y(added,)e(whic)n(h)f(the)g(Sp)
-r(ecMap)h(will)f(p)r(erform)f(in)i(sequence.)35 b(This)25
-b(allo)n(ws)f(m)n(ulti-step)h(con)n(v)n(ersions)e(b)r(et)n(w)n(een)i(a)
-227 1317 y(v)-5 b(ariet)n(y)27 b(of)g(sp)r(ectral)g(co)r(ordinate)g
-(systems)g(to)g(b)r(e)h(assem)n(bled)e(out)i(of)f(the)h(building)g(blo)
-r(c)n(ks)f(pro)n(vided)f(b)n(y)h(this)227 1416 y(class.)227
-1544 y(Normally)-7 b(,)28 b(if)h(a)g(Sp)r(ecMap's)f(In)n(v)n(ert)g
-(attribute)h(is)f(zero)g(\(the)h(default\),)h(then)f(its)g(forw)n(ard)e
-(transformation)g(is)227 1643 y(p)r(erformed)j(b)n(y)f(carrying)f(out)i
-(eac)n(h)f(of)h(the)g(individual)g(co)r(ordinate)f(con)n(v)n(ersions)e
-(sp)r(eci\014ed)k(b)n(y)e(astSp)r(ecAdd)227 1743 y(in)f(the)g(order)e
-(giv)n(en)h(\(i.e.)37 b(with)29 b(the)e(most)h(recen)n(tly)f(added)g
-(con)n(v)n(ersion)e(applied)j(last\).)227 1870 y(This)23
-b(order)e(is)h(rev)n(ersed)e(if)j(the)g(Sp)r(ecMap's)f(In)n(v)n(ert)g
-(attribute)g(is)g(non-zero)f(\(or)h(if)h(the)f(in)n(v)n(erse)f
-(transformation)227 1970 y(is)27 b(requested)f(b)n(y)h(an)n(y)f(other)g
-(means\))h(and)g(eac)n(h)f(individual)h(co)r(ordinate)f(con)n(v)n
-(ersion)e(is)j(also)f(replaced)g(b)n(y)g(its)227 2069
-y(o)n(wn)21 b(in)n(v)n(erse.)33 b(This)22 b(pro)r(cess)e(in)n(v)n(erts)
-g(the)i(o)n(v)n(erall)d(e\013ect)j(of)f(the)h(Sp)r(ecMap.)35
-b(In)22 b(this)f(case,)h(the)g(\014rst)f(con)n(v)n(ersion)227
-2169 y(to)28 b(b)r(e)g(applied)f(w)n(ould)g(b)r(e)h(the)g(in)n(v)n
-(erse)f(of)g(the)h(one)f(most)h(recen)n(tly)f(added.)0
-2324 y Fd(Synopsis:)121 b Ft(void)42 b(astSpecAdd\()d(AstSpecMap)g
-Fi(\003)p Ft(this,)i(const)h(char)g Fi(\003)p Ft(cvt,)f(const)h(double)
-f(args[])g(\))0 2479 y Fd(P)m(arameters:)259 2621 y(this)427
-2721 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Sp)r(ecMap.)259
-2857 y Fd(cvt)427 2956 y Fj(P)n(oin)n(ter)g(to)i(a)f(n)n
-(ull-terminated)g(string)g(whic)n(h)h(iden)n(ti\014es)g(the)g(sp)r
-(ectral)f(co)r(ordinate)f(con)n(v)n(ersion)g(to)h(b)r(e)427
-3056 y(added)24 b(to)g(the)g(Sp)r(ecMap.)36 b(See)23
-b(the)h Ft(")p Fj(Av)-5 b(ailable)24 b(Con)n(v)n(ersions)p
-Ft(")c Fj(section)k(for)f(details)h(of)f(those)h(a)n(v)-5
-b(ailable.)259 3192 y Fd(args)427 3291 y Fj(An)29 b(arra)n(y)d(con)n
-(taining)h(argumen)n(t)g(v)-5 b(alues)28 b(for)g(the)h(sp)r(ectral)f
-(co)r(ordinate)f(con)n(v)n(ersion.)36 b(The)29 b(n)n(um)n(b)r(er)f(of)
-427 3391 y(argumen)n(ts)22 b(required,)h(and)g(hence)g(the)g(n)n(um)n
-(b)r(er)g(of)g(arra)n(y)e(elemen)n(ts)h(used,)i(dep)r(ends)g(on)f(the)g
-(con)n(v)n(ersion)427 3491 y(sp)r(eci\014ed)f(\(see)f(the)h
-Ft(")p Fj(Av)-5 b(ailable)21 b(Con)n(v)n(ersions)p Ft(")d
-Fj(section\).)35 b(This)21 b(arra)n(y)e(is)j(ignored)e(and)h(a)g(NULL)h
-(p)r(oin)n(ter)427 3590 y(ma)n(y)27 b(b)r(e)h(supplied)g(if)g(no)g
-(argumen)n(ts)e(are)g(needed.)0 3758 y Fd(Notes:)340
-4046 y Fi(\017)45 b Fj(When)37 b(assem)n(bling)e(a)g(m)n(ulti-stage)h
-(con)n(v)n(ersion,)g(it)g(can)g(sometimes)g(b)r(e)g(di\016cult)h(to)f
-(determine)g(the)427 4146 y(most)31 b(economical)g(con)n(v)n(ersion)e
-(path.)48 b(F)-7 b(or)30 b(example,)i(when)g(con)n(v)n(erting)d(b)r(et)
-n(w)n(een)j(reference)e(frames,)427 4245 y(con)n(v)n(erting)19
-b(\014rst)i(to)f(the)i(heliographic)d(reference)h(frame)g(as)g(an)h(in)
-n(termediate)f(stage)g(is)h(often)g(sensible)f(in)427
-4345 y(form)n(ulating)28 b(the)i(problem,)e(but)i(ma)n(y)e(in)n(tro)r
-(duce)h(unnecessary)e(extra)h(con)n(v)n(ersion)f(steps.)41
-b(A)29 b(solution)427 4444 y(to)f(this)h(is)f(to)g(include)g(all)g(the)
-h(steps)f(whic)n(h)g(are)f(\(logically\))g(necessary)-7
-b(,)27 b(but)i(then)f(to)g(use)g(astSimplify)427 4544
-y(to)f(simplify)h(the)g(resulting)e(Sp)r(ecMap.)37 b(The)27
-b(simpli\014cation)g(pro)r(cess)f(will)i(eliminate)f(an)n(y)g(steps)g
-(whic)n(h)427 4644 y(turn)h(out)g(not)f(to)h(b)r(e)g(needed.)340
-4779 y Fi(\017)45 b Fj(This)27 b(function)h(do)r(es)f(not)g(c)n(hec)n
-(k)f(to)h(ensure)g(that)g(the)h(sequence)e(of)h(co)r(ordinate)f(con)n
-(v)n(ersions)f(added)i(to)427 4879 y(a)g(Sp)r(ecMap)h(is)g(ph)n
-(ysically)e(meaningful.)-2 5047 y Fd(Av)-5 b(ailable)32
-b(Con)m(v)m(ersions)n(:)227 5193 y Fj(The)39 b(follo)n(wing)f(strings)g
-(\(whic)n(h)h(are)e(case-insensitiv)n(e\))h(ma)n(y)g(b)r(e)h(supplied)g
-(via)f(the)h Ft(")p Fj(cvt)p Ft(")f Fj(parameter)g(to)227
-5292 y(indicate)32 b(whic)n(h)f(sp)r(ectral)g(co)r(ordinate)f(con)n(v)n
-(ersion)f(is)i(to)g(b)r(e)h(added)f(to)g(the)h(Sp)r(ecMap.)48
-b(Where)31 b(argumen)n(ts)227 5392 y(are)25 b(needed)h(b)n(y)f(the)h
-(con)n(v)n(ersion,)e(they)i(are)e(listed)i(in)g(paren)n(theses.)35
-b(V)-7 b(alues)26 b(for)f(these)g(argumen)n(ts)g(should)g(b)r(e)227
-5491 y(giv)n(en,)g(via)f(the)g Ft(")p Fj(args)p Ft(")f
-Fj(arra)n(y)-7 b(,)22 b(in)j(the)g(order)e(indicated.)36
-b(Units)25 b(and)g(argumen)n(t)e(names)h(are)g(describ)r(ed)g(at)g(the)
-227 5591 y(end)k(of)g(the)g(list)f(of)h(con)n(v)n(ersions.)p
-eop end
-%%Page: 347 357
-TeXDict begin 347 356 bop 3643 52 a FF(347)340 351 y
-Fi(\017)45 b Ft(")p Fj(FR)-7 b(TO)n(VL)p Ft(")27 b Fj(\(RF\):)i(Con)n
-(v)n(ert)d(frequency)h(to)g(relativistic)g(v)n(elo)r(cit)n(y)-7
-b(.)340 485 y Fi(\017)45 b Ft(")p Fj(VL)-7 b(TOFR)p Ft(")27
-b Fj(\(RF\):)i(Con)n(v)n(ert)d(relativistic)h(v)n(elo)r(cit)n(y)g(to)g
-(F)-7 b(requency)g(.)340 619 y Fi(\017)45 b Ft(")p Fj(ENTOFR)p
-Ft(")p Fj(:)36 b(Con)n(v)n(ert)26 b(energy)h(to)g(frequency)-7
-b(.)340 753 y Fi(\017)45 b Ft(")p Fj(FR)-7 b(TOEN)p Ft(")p
-Fj(:)36 b(Con)n(v)n(ert)26 b(frequency)h(to)h(energy)-7
-b(.)340 886 y Fi(\017)45 b Ft(")p Fj(WNTOFR)p Ft(")p
-Fj(:)37 b(Con)n(v)n(ert)26 b(w)n(a)n(v)n(e)g(n)n(um)n(b)r(er)h(to)h
-(frequency)-7 b(.)340 1020 y Fi(\017)45 b Ft(")p Fj(FR)-7
-b(TO)n(WN)p Ft(")p Fj(:)37 b(Con)n(v)n(ert)26 b(frequency)h(to)g(w)n(a)
-n(v)n(e)f(n)n(um)n(b)r(er.)340 1154 y Fi(\017)45 b Ft(")p
-Fj(WVTOFR)p Ft(")p Fj(:)37 b(Con)n(v)n(ert)26 b(w)n(a)n(v)n(elength)g
-(\(v)-5 b(acuum\))28 b(to)g(frequency)-7 b(.)340 1288
-y Fi(\017)45 b Ft(")p Fj(FR)-7 b(TO)n(WV)p Ft(")p Fj(:)37
-b(Con)n(v)n(ert)26 b(frequency)h(to)g(w)n(a)n(v)n(elength)f(\(v)-5
-b(acuum\).)340 1421 y Fi(\017)45 b Ft(")p Fj(A)-9 b(WTOFR)p
-Ft(")p Fj(:)37 b(Con)n(v)n(ert)26 b(w)n(a)n(v)n(elength)g(\(air\))h(to)
-h(frequency)-7 b(.)340 1555 y Fi(\017)45 b Ft(")p Fj(FR)-7
-b(TO)n(A)e(W)p Ft(")p Fj(:)36 b(Con)n(v)n(ert)27 b(frequency)g(to)g(w)n
-(a)n(v)n(elength)f(\(air\).)340 1689 y Fi(\017)45 b Ft(")p
-Fj(VR)-7 b(TO)n(VL)p Ft(")p Fj(:)36 b(Con)n(v)n(ert)26
-b(radio)h(to)g(relativistic)g(v)n(elo)r(cit)n(y)-7 b(.)340
-1823 y Fi(\017)45 b Ft(")p Fj(VL)-7 b(TO)n(VR)p Ft(")p
-Fj(:)36 b(Con)n(v)n(ert)26 b(relativistic)h(to)h(radio)e(v)n(elo)r(cit)
-n(y)-7 b(.)340 1956 y Fi(\017)45 b Ft(")p Fj(V)n(OTO)n(VL)p
-Ft(")p Fj(:)35 b(Con)n(v)n(ert)26 b(optical)i(to)f(relativistic)g(v)n
-(elo)r(cit)n(y)-7 b(.)340 2090 y Fi(\017)45 b Ft(")p
-Fj(VL)-7 b(TO)n(V)n(O)p Ft(")p Fj(:)35 b(Con)n(v)n(ert)27
-b(relativistic)f(to)i(optical)f(v)n(elo)r(cit)n(y)-7
-b(.)340 2224 y Fi(\017)45 b Ft(")p Fj(ZOTO)n(VL)p Ft(")p
-Fj(:)35 b(Con)n(v)n(ert)26 b(redshift)i(to)g(relativistic)e(v)n(elo)r
-(cit)n(y)-7 b(.)340 2358 y Fi(\017)45 b Ft(")p Fj(VL)-7
-b(TOZO)p Ft(")p Fj(:)35 b(Con)n(v)n(ert)27 b(relativistic)g(v)n(elo)r
-(cit)n(y)f(to)i(redshift.)340 2491 y Fi(\017)45 b Ft(")p
-Fj(BTTO)n(VL)p Ft(")p Fj(:)36 b(Con)n(v)n(ert)26 b(b)r(eta)i(factor)e
-(to)i(relativistic)f(v)n(elo)r(cit)n(y)-7 b(.)340 2625
-y Fi(\017)45 b Ft(")p Fj(VL)-7 b(TOBT)p Ft(")p Fj(:)36
-b(Con)n(v)n(ert)26 b(relativistic)h(v)n(elo)r(cit)n(y)g(to)g(b)r(eta)h
-(factor.)340 2759 y Fi(\017)45 b Ft(")p Fj(USF2HL)p Ft(")28
-b Fj(\(V)n(OFF,RA,DEC\):)i(Con)n(v)n(ert)d(frequency)g(from)h(a)g
-(user-de\014ned)g(reference)g(frame)g(to)g(he-)427 2858
-y(lio)r(cen)n(tric.)340 2992 y Fi(\017)45 b Ft(")p Fj(HLF2US)p
-Ft(")31 b Fj(\(V)n(OFF,RA,DEC\):)h(Con)n(v)n(ert)d(frequency)i(from)g
-(helio)r(cen)n(tric)f(reference)g(frame)h(to)g(user-)427
-3092 y(de\014ned.)340 3226 y Fi(\017)45 b Ft(")p Fj(TPF2HL)p
-Ft(")17 b Fj(\(OBSLON,OBSLA)-7 b(T,OBSAL)g(T,EPOCH,RA,DEC\):)17
-b(Con)n(v)n(ert)g(frequency)h(from)g(top)r(o)r(cen-)427
-3325 y(tric)28 b(reference)e(frame)i(to)f(helio)r(cen)n(tric.)340
-3459 y Fi(\017)45 b Ft(")p Fj(HLF2TP)p Ft(")20 b Fj(\(OBSLON,OBSLA)-7
-b(T,OBSAL)g(T,EPOCH,RA,DEC\):)20 b(Con)n(v)n(ert)g(frequency)h(from)g
-(helio-)427 3559 y(cen)n(tric)27 b(reference)g(frame)g(to)h(top)r(o)r
-(cen)n(tric.)340 3692 y Fi(\017)45 b Ft(")p Fj(GEF2HL)p
-Ft(")24 b Fj(\(EPOCH,RA,DEC\):)h(Con)n(v)n(ert)f(frequency)h(from)g
-(geo)r(cen)n(tric)f(reference)g(frame)h(to)g(helio-)427
-3792 y(cen)n(tric.)340 3926 y Fi(\017)45 b Ft(")p Fj(HLF2GE)p
-Ft(")24 b Fj(\(EPOCH,RA,DEC\):)h(Con)n(v)n(ert)f(frequency)h(from)g
-(helio)r(cen)n(tric)g(reference)f(frame)h(to)g(geo-)427
-4025 y(cen)n(tric.)340 4159 y Fi(\017)45 b Ft(")p Fj(BYF2HL)p
-Ft(")30 b Fj(\(EPOCH,RA,DEC\):)g(Con)n(v)n(ert)f(frequency)h(from)g
-(barycen)n(tric)f(reference)h(frame)g(to)g(he-)427 4259
-y(lio)r(cen)n(tric.)340 4392 y Fi(\017)45 b Ft(")p Fj(HLF2BY)p
-Ft(")18 b Fj(\(EPOCH,RA,DEC\):)g(Con)n(v)n(ert)f(frequency)h(from)g
-(helio)r(cen)n(tric)g(reference)f(frame)h(to)g(barycen-)427
-4492 y(tric.)340 4626 y Fi(\017)45 b Ft(")p Fj(LKF2HL)p
-Ft(")27 b Fj(\(RA,DEC\):)j(Con)n(v)n(ert)d(frequency)h(from)g
-(kinematic)h(LSR)g(reference)e(frame)i(to)f(helio)r(cen-)427
-4725 y(tric.)340 4859 y Fi(\017)45 b Ft(")p Fj(HLF2LK)p
-Ft(")38 b Fj(\(RA,DEC\):)i(Con)n(v)n(ert)d(frequency)i(from)f(helio)r
-(cen)n(tric)g(reference)g(frame)h(to)g(kinematic)427
-4959 y(LSR.)340 5093 y Fi(\017)45 b Ft(")p Fj(LDF2HL)p
-Ft(")27 b Fj(\(RA,DEC\):)g(Con)n(v)n(ert)f(frequency)g(from)h
-(dynamical)f(LSR)h(reference)f(frame)g(to)h(helio)r(cen-)427
-5192 y(tric.)340 5326 y Fi(\017)45 b Ft(")p Fj(HLF2LD)p
-Ft(")37 b Fj(\(RA,DEC\):)h(Con)n(v)n(ert)d(frequency)i(from)f(helio)r
-(cen)n(tric)h(reference)f(frame)g(to)h(dynamical)427
-5426 y(LSR.)340 5559 y Fi(\017)45 b Ft(")p Fj(LGF2HL)p
-Ft(")27 b Fj(\(RA,DEC\):)i(Con)n(v)n(ert)d(frequency)h(from)g(lo)r(cal)
-g(group)g(reference)f(frame)i(to)f(helio)r(cen)n(tric.)340
-5693 y Fi(\017)45 b Ft(")p Fj(HLF2LG)p Ft(")27 b Fj(\(RA,DEC\):)i(Con)n
-(v)n(ert)d(frequency)h(from)g(helio)r(cen)n(tric)g(reference)g(frame)g
-(to)h(lo)r(cal)f(group.)p eop end
-%%Page: 348 358
-TeXDict begin 348 357 bop 0 52 a FF(348)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Ft(")p Fj(GLF2HL)p Ft(")27 b Fj(\(RA,DEC\):)i(Con)n(v)n(ert)d
-(frequency)h(from)g(galactic)g(reference)f(frame)h(to)h(helio)r(cen)n
-(tric.)340 477 y Fi(\017)45 b Ft(")p Fj(HLF2GL)p Ft(")27
-b Fj(\(RA,DEC\):)i(Con)n(v)n(ert)d(frequency)h(from)g(helio)r(cen)n
-(tric)g(reference)g(frame)g(to)h(galactic.)227 632 y(The)g(units)g(for)
-f(the)h(v)-5 b(alues)27 b(pro)r(cessed)g(b)n(y)g(the)h(ab)r(o)n(v)n(e)e
-(con)n(v)n(ersions)f(are)i(as)g(follo)n(ws:)340 882 y
-Fi(\017)45 b Fj(all)28 b(v)n(elo)r(cities:)36 b(metres)27
-b(p)r(er)h(second)e(\(p)r(ositiv)n(e)i(if)g(the)g(source)e(receeds)h
-(from)g(the)h(observ)n(er\).)340 1007 y Fi(\017)45 b
-Fj(frequency:)37 b(Hertz.)340 1133 y Fi(\017)45 b Fj(all)28
-b(w)n(a)n(v)n(elengths:)35 b(metres.)340 1258 y Fi(\017)45
-b Fj(energy:)36 b(Joules.)340 1384 y Fi(\017)45 b Fj(w)n(a)n(v)n(e)26
-b(n)n(um)n(b)r(er:)37 b(cycles)27 b(p)r(er)g(metre.)227
-1539 y(The)h(argumen)n(ts)e(used)i(in)g(the)g(ab)r(o)n(v)n(e)e(con)n(v)
-n(ersions)f(are)h(as)h(follo)n(ws:)340 1789 y Fi(\017)45
-b Fj(RF:)28 b(Rest)g(frequency)f(\(Hz\).)340 1914 y Fi(\017)45
-b Fj(OBSAL)-7 b(T:)28 b(Geo)r(detic)g(altitude)g(of)f(observ)n(er)e
-(\(IA)n(U)k(1975,)c(metres\).)340 2040 y Fi(\017)45 b
-Fj(OBSLA)-7 b(T:)28 b(Geo)r(detic)g(latitude)g(of)f(observ)n(er)e(\(IA)
-n(U)k(1975,)c(radians\).)340 2165 y Fi(\017)45 b Fj(OBSLON:)27
-b(Longitude)g(of)h(observ)n(er)d(\(radians)i(-)g(p)r(ositiv)n(e)g(east)
-n(w)n(ards\).)340 2291 y Fi(\017)45 b Fj(EPOCH:)27 b(Ep)r(o)r(c)n(h)g
-(of)h(observ)-5 b(ation)26 b(\(UT1)h(expressed)g(as)g(a)g(Mo)r
-(di\014ed)h(Julian)f(Date\).)340 2417 y Fi(\017)45 b
-Fj(RA:)28 b(Righ)n(t)g(Ascension)f(of)g(source)g(\(radians,)f(FK5)h
-(J2000\).)340 2542 y Fi(\017)45 b Fj(DEC:)28 b(Declination)g(of)f
-(source)f(\(radians,)h(FK5)g(J2000\).)340 2668 y Fi(\017)45
-b Fj(V)n(OFF:)32 b(V)-7 b(elo)r(cit)n(y)32 b(of)g(the)g(user-de\014ned)
-g(reference)f(frame,)h(to)n(w)n(ards)e(the)j(p)r(osition)f(giv)n(en)f
-(b)n(y)g(RA)i(and)427 2767 y(DEC,)28 b(measured)f(in)g(the)h(helio)r
-(cen)n(tric)f(reference)g(frame.)227 2922 y(If)35 b(the)f(Sp)r(ecMap)g
-(is)f(3-dimensional,)i(source)d(p)r(ositions)h(are)g(pro)n(vided)g(b)n
-(y)h(the)g(v)-5 b(alues)33 b(supplied)h(to)g(inputs)227
-3022 y(2)f(and)g(3)g(of)h(the)f(Sp)r(ecMap)h(\(whic)n(h)f(are)g(simply)
-g(copied)g(to)g(outputs)h(2)f(and)g(3\).)54 b(Note,)35
-b(usable)e(v)-5 b(alues)33 b(are)227 3121 y(still)26
-b(required)f(for)g(the)h(RA)f(and)h(DEC)f(argumen)n(ts)f(in)i(order)e
-(to)i(de\014ne)g(the)f Ft(")p Fj(user-de\014ned)p Ft(")f
-Fj(reference)h(frame)227 3221 y(used)35 b(b)n(y)g(USF2HL)g(and)g
-(HLF2US.)h(Ho)n(w)n(ev)n(er,)f(AST)p Ft(__)p Fj(BAD)g(can)g(b)r(e)g
-(supplied)h(for)e(RA)i(and)f(DEC)g(if)g(the)227 3321
-y(user-de\014ned)27 b(reference)g(frame)g(is)h(not)f(required.)p
-0 3505 3780 12 v 0 3637 a Fz(astSp)t(ecFluxF)-11 b(rame)176
-b Fe(Create)37 b(a)h(Sp)s(ecFluxF)-10 b(rame)176 b Fz(astSp)t(ecFluxF)
--11 b(rame)0 3811 y Fd(Description:)44 b Fj(This)28 b(function)g
-(creates)f(a)g(new)g(Sp)r(ecFluxF)-7 b(rame)28 b(and)f(optionally)g
-(initialises)g(its)h(attributes.)227 3932 y(A)g(Sp)r(ecFluxF)-7
-b(rame)27 b(com)n(bines)g(a)g(Sp)r(ecF)-7 b(rame)27 b(and)h(a)f(FluxF)
--7 b(rame)27 b(in)n(to)g(a)g(single)g(2-dimensional)f(comp)r(ound)227
-4032 y(F)-7 b(rame.)39 b(Suc)n(h)28 b(a)g(F)-7 b(rame)28
-b(can)f(for)h(instance)g(b)r(e)h(used)f(to)g(describ)r(e)g(a)g(Plot)g
-(of)g(a)g(sp)r(ectrum)g(in)h(whic)n(h)f(the)h(\014rst)227
-4132 y(axis)e(represen)n(ts)f(sp)r(ectral)h(p)r(osition)h(and)f(the)h
-(second)f(axis)g(represen)n(ts)f(\015ux.)0 4274 y Fd(Synopsis:)121
-b Ft(AstSpecFluxFrame)37 b Fi(\003)p Ft(astSpecFluxFram)o(e\()g
-(AstSpecFrame)i Fi(\003)p Ft(frame1,)h(AstFluxFrame)e
-Fi(\003)p Ft(frame2,)227 4373 y(const)k(char)g Fi(\003)p
-Ft(options,)e(...)85 b(\))0 4516 y Fd(P)m(arameters:)259
-4645 y(frame1)427 4744 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Sp)r(ecF)-7
-b(rame.)36 b(This)28 b(will)g(form)f(the)h(\014rst)f(axis)g(in)h(the)g
-(new)g(Sp)r(ecFluxF)-7 b(rame.)259 4870 y Fd(frame2)427
-4970 y Fj(P)n(oin)n(ter)30 b(to)h(the)g(FluxF)-7 b(rame.)47
-b(This)31 b(will)g(form)g(the)h(second)e(axis)g(in)i(the)f(new)g(Sp)r
-(ecFluxF)-7 b(rame.)48 b(The)427 5069 y Ft(")p Fj(Sp)r(ecV)-7
-b(al)p Ft(")30 b Fj(attribute)h(of)f(this)h(FluxF)-7
-b(rame)30 b(is)g(not)h(used)f(b)n(y)g(the)h(Sp)r(ecFluxF)-7
-b(rame)31 b(class)e(and)i(so)e(ma)n(y)427 5169 y(b)r(e)f(set)g(to)f
-(AST)p Ft(__)p Fj(BAD)h(when)g(the)g(FluxF)-7 b(rame)27
-b(is)h(created.)259 5295 y Fd(options)427 5394 y Fj(P)n(oin)n(ter)f(to)
-h(a)g(n)n(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 5494 y(assignmen)n(ts)f
-(to)g(b)r(e)h(used)g(for)f(initialising)h(the)g(new)g(Sp)r(ecFluxF)-7
-b(rame.)37 b(The)28 b(syn)n(tax)f(used)g(is)h(iden)n(tical)427
-5593 y(to)h(that)h(for)f(the)g(astSet)g(function)h(and)f(ma)n(y)g
-(include)g Ft(")p Fj(prin)n(tf)p Ft(")g Fj(format)g(sp)r(eci\014ers)f
-(iden)n(ti\014ed)i(b)n(y)f Ft(")p Fj(\045)p Ft(")427
-5693 y Fj(sym)n(b)r(ols)e(in)h(the)g(normal)f(w)n(a)n(y)-7
-b(.)p eop end
-%%Page: 349 359
-TeXDict begin 349 358 bop 3643 52 a FF(349)259 351 y
-Fd(...)427 451 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 551 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 650 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 750 y Fj(function\).)0 911 y
-Fd(Returned)32 b(V)-8 b(alue:)259 1048 y(astSp)s(ecFluxF)g(rame\(\))427
-1147 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Sp)r(ecFluxF)-7
-b(rame.)0 1309 y Fd(Notes:)340 1591 y Fi(\017)45 b Fj(The)25
-b(supplied)g(F)-7 b(rame)24 b(p)r(oin)n(ters)g(are)g(stored)f(directly)
--7 b(,)26 b(rather)d(than)i(b)r(eing)g(used)f(to)h(create)f(deep)g
-(copies)427 1691 y(of)g(the)h(supplied)f(F)-7 b(rames.)35
-b(This)24 b(means)g(that)g(an)n(y)f(subsequen)n(t)h(c)n(hanges)e(made)i
-(to)g(the)g(F)-7 b(rames)24 b(via)f(the)427 1791 y(supplied)28
-b(p)r(oin)n(ters)f(will)h(result)f(in)h(equiv)-5 b(alen)n(t)27
-b(c)n(hanges)g(b)r(eing)g(visible)h(in)g(the)g(Sp)r(ecFluxF)-7
-b(rame.)340 1923 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 2023 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 2185 y Fd(Status)33
-b(Handling)n(:)227 2331 y Fj(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 2430 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fj(in)n(t)227 2530 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p
-0 2729 3780 12 v 0 2859 a Fz(astSp)t(ecF)-11 b(rame)562
-b Fe(Create)37 b(a)h(Sp)s(ecF)-10 b(rame)561 b Fz(astSp)t(ecF)-11
-b(rame)0 3048 y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f
-(a)g(new)g(Sp)r(ecF)-7 b(rame)28 b(and)f(optionally)g(initialises)g
-(its)h(attributes.)227 3172 y(A)j(Sp)r(ecF)-7 b(rame)29
-b(is)h(a)g(sp)r(ecialised)f(form)h(of)g(one-dimensional)e(F)-7
-b(rame)30 b(whic)n(h)g(represen)n(ts)e(v)-5 b(arious)29
-b(co)r(ordinate)227 3272 y(systems)23 b(used)h(to)f(describ)r(e)g(p)r
-(ositions)g(within)h(an)f(electro-magnetic)f(sp)r(ectrum.)35
-b(The)24 b(particular)e(co)r(ordinate)227 3372 y(system)32
-b(to)g(b)r(e)g(used)g(is)g(sp)r(eci\014ed)g(b)n(y)f(setting)h(the)g(Sp)
-r(ecF)-7 b(rame's)32 b(System)g(attribute)g(\(the)g(default)h(is)f(w)n
-(a)n(v)n(e-)227 3471 y(length\))27 b(quali\014ed,)f(as)g(necessary)-7
-b(,)24 b(b)n(y)i(other)g(attributes)g(suc)n(h)g(as)f(the)i(rest)e
-(frequency)-7 b(,)26 b(the)h(standard)e(of)h(rest,)227
-3571 y(the)i(ep)r(o)r(c)n(h)g(of)f(observ)-5 b(ation,)27
-b(etc)g(\(see)h(the)g(description)f(of)g(the)h(System)g(attribute)g
-(for)f(details\).)227 3695 y(By)d(setting)f(a)h(v)-5
-b(alue)23 b(for)h(thr)f(Sp)r(ecOrigin)h(attribute,)g(a)g(Sp)r(ecF)-7
-b(rame)23 b(can)h(b)r(e)g(made)f(to)h(represen)n(t)e(o\013sets)i(from)
-227 3795 y(a)j(giv)n(en)g(sp)r(ectral)g(p)r(osition,)h(rather)e(than)i
-(absolute)0 3944 y Fd(Synopsis:)121 b Ft(AstSpecFrame)38
-b Fi(\003)p Ft(astSpecFrame\()g(const)k(char)g Fi(\003)p
-Ft(options,)d(...)86 b(\))0 4093 y Fd(P)m(arameters:)259
-4230 y(options)427 4329 y Fj(P)n(oin)n(ter)27 b(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 4429 y(assignmen)n(ts)19
-b(to)g(b)r(e)i(used)e(for)h(initialising)f(the)h(new)g(Sp)r(ecF)-7
-b(rame.)34 b(The)20 b(syn)n(tax)f(used)g(is)h(iden)n(tical)g(to)f(that)
-427 4528 y(for)26 b(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-4628 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)35 b(If)28
-b(no)g(initialisation)f(is)g(required,)g(a)g(zero-length)f(string)h(ma)
-n(y)g(b)r(e)h(supplied.)259 4761 y Fd(...)427 4860 y
-Fj(If)38 b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 4960 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 5060 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 5159 y Fj(function\).)0
-5321 y Fd(Returned)32 b(V)-8 b(alue:)259 5457 y(astSp)s(ecF)g(rame\(\))
-427 5557 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Sp)r(ecF)-7
-b(rame.)0 5718 y Fd(Examples:)p eop end
-%%Page: 350 360
-TeXDict begin 350 359 bop 0 52 a FF(350)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)227 352 y Fq(frame)47
-b(=)g(astSpecFrame\()d Ft("")j Fq(\);)427 451 y Fj(Creates)36
-b(a)g(Sp)r(ecF)-7 b(rame)36 b(to)g(describ)r(e)g(the)h(default)g(w)n(a)
-n(v)n(elength)d(sp)r(ectral)i(co)r(ordinate)g(system.)63
-b(The)427 551 y(RestF)-7 b(req)39 b(attribute)g(\(rest)f(frequency\))h
-(is)g(unsp)r(eci\014ed,)j(so)c(it)i(will)f(not)g(b)r(e)g(p)r(ossible)f
-(to)h(align)f(this)427 650 y(Sp)r(ecF)-7 b(rame)24 b(with)h(another)e
-(Sp)r(ecF)-7 b(rame)24 b(on)f(the)i(basis)e(of)h(a)g(v)n(elo)r(cit)n
-(y-based)e(system.)35 b(The)25 b(standard)e(of)427 750
-y(rest)30 b(is)f(also)g(unsp)r(eci\014ed.)44 b(This)29
-b(means)h(that)g(alignmen)n(t)f(will)h(b)r(e)g(p)r(ossible)g(with)g
-(other)f(Sp)r(ecF)-7 b(rames,)427 849 y(but)31 b(no)g(correction)e
-(will)h(b)r(e)i(made)e(for)g(Doppler)g(shift)i(caused)e(b)n(y)g(c)n
-(hange)f(of)i(rest)f(frame)g(during)g(the)427 949 y(alignmen)n(t.)227
-1068 y Fq(frame)47 b(=)g(astSpecFrame\()d Ft(")p Fq(System=VELO,)g
-(RestFreq=1.0E15,)g(StdOfRest=LSRK)p Ft(")227 1168 y
-Fq(\);)427 1251 y Fj(Creates)39 b(a)h(Sp)r(ecF)-7 b(rame)40
-b(describing)f(a)h(apparen)n(t)e(radial)h(v)n(elo)r(cit)n(y)h(\()p
-Ft(")p Fj(VELO)p Ft(")p Fj(\))f(axis)g(with)h(rest)g(fre-)427
-1351 y(quency)35 b(1.0E15)e(Hz)i(\(ab)r(out)g(3000)f(Angstroms\),)i
-(measured)e(in)h(the)h(kinematic)f(Lo)r(cal)f(Standard)h(of)427
-1450 y(Rest)f(\()p Ft(")p Fj(LSRK)p Ft(")p Fj(\).)56
-b(Since)34 b(the)g(source)f(p)r(osition)h(has)f(not)h(b)r(een)h(sp)r
-(eci\014ed)f(\(using)g(attributes)g(RefRA)427 1550 y(and)c(RefDec\),)i
-(it)f(will)g(only)e(b)r(e)i(p)r(ossible)f(to)g(align)g(this)g(Sp)r(ecF)
--7 b(rame)30 b(with)h(other)f(Sp)r(ecF)-7 b(rames)30
-b(whic)n(h)427 1650 y(are)d(also)f(measured)h(in)h(the)g(LSRK)f
-(standard)g(of)g(rest.)0 1810 y Fd(Notes:)340 2091 y
-Fi(\017)45 b Fj(When)34 b(con)n(v)n(ersion)d(b)r(et)n(w)n(een)h(t)n(w)n
-(o)h(Sp)r(ecF)-7 b(rames)32 b(is)h(requested)g(\(as)f(when)h(supplying)
-g(Sp)r(ecF)-7 b(rames)33 b(to)427 2191 y(astCon)n(v)n(ert\),)40
-b(accoun)n(t)e(will)h(b)r(e)g(tak)n(en)f(of)g(the)h(nature)f(of)h(the)g
-(sp)r(ectral)f(co)r(ordinate)f(systems)h(they)427 2290
-y(represen)n(t,)e(together)e(with)h(an)n(y)f(qualifying)h(rest)f
-(frequency)-7 b(,)36 b(standard)e(of)h(rest,)h(ep)r(o)r(c)n(h)f(v)-5
-b(alues,)36 b(etc.)427 2390 y(The)26 b(AlignSystem)f(and)g
-(AlignStdOfRest)h(attributes)f(will)h(also)e(b)r(e)i(tak)n(en)e(in)n
-(to)i(accoun)n(t.)35 b(The)25 b(results)427 2490 y(will)34
-b(therefore)f(fully)h(re\015ect)g(the)g(relationship)e(b)r(et)n(w)n
-(een)i(p)r(ositions)f(measured)g(in)h(the)g(t)n(w)n(o)f(systems.)427
-2589 y(In)e(addition,)g(an)n(y)f(di\013erence)h(in)g(the)g(Unit)g
-(attributes)g(of)f(the)h(t)n(w)n(o)f(systems)g(will)h(also)f(b)r(e)h
-(tak)n(en)f(in)n(to)427 2689 y(accoun)n(t.)340 2820 y
-Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g
-(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g
-(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 2920
-y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f
-(an)n(y)g(reason.)p 0 3116 3780 12 v 0 3247 a Fz(astSp)t(ecMap)705
-b Fe(Create)37 b(a)i(Sp)s(ecMap)706 b Fz(astSp)t(ecMap)0
-3433 y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(Sp)r(ecMap)h(and)g(optionally)e(initialises)i(its)f(attributes.)227
-3557 y(An)e(Sp)r(ecMap)e(is)h(a)f(sp)r(ecialised)h(form)f(of)h(Mapping)
-f(whic)n(h)h(can)f(b)r(e)h(used)g(to)g(represen)n(t)e(a)i(sequence)f
-(of)h(con)n(v)n(er-)227 3656 y(sions)i(b)r(et)n(w)n(een)h(standard)e
-(sp)r(ectral)h(co)r(ordinate)f(systems.)36 b(This)27
-b(includes)g(con)n(v)n(ersions)c(b)r(et)n(w)n(een)k(frequency)-7
-b(,)227 3756 y(w)n(a)n(v)n(elength,)36 b(and)f(v)-5 b(arious)34
-b(forms)h(of)g(v)n(elo)r(cit)n(y)-7 b(,)37 b(as)d(w)n(ell)h(as)g(con)n
-(v)n(ersions)e(b)r(et)n(w)n(een)i(di\013eren)n(t)h(standards)e(of)227
-3856 y(rest.)227 3979 y(When)25 b(a)g(Sp)r(ecMap)f(is)h(\014rst)f
-(created,)h(it)g(simply)g(p)r(erforms)e(a)i(unit)g(\(n)n(ull\))g
-(Mapping.)36 b(Using)24 b(the)h(astSp)r(ecAdd)227 4079
-y(function,)44 b(a)c(series)f(of)h(co)r(ordinate)e(con)n(v)n(ersion)g
-(steps)i(ma)n(y)f(then)i(b)r(e)f(added,)j(selected)d(from)g(the)g(list)
-h(of)227 4179 y(supp)r(orted)25 b(con)n(v)n(ersions.)33
-b(This)25 b(allo)n(ws)f(m)n(ulti-step)h(con)n(v)n(ersions)d(b)r(et)n(w)
-n(een)j(a)g(v)-5 b(ariet)n(y)24 b(of)g(sp)r(ectral)h(co)r(ordinate)227
-4278 y(systems)i(to)h(b)r(e)g(assem)n(bled)f(out)g(of)h(the)g(building)
-g(blo)r(c)n(ks)e(pro)n(vided)h(b)n(y)g(this)h(class.)227
-4402 y(F)-7 b(or)22 b(details)g(of)h(the)f(individual)h(co)r(ordinate)e
-(con)n(v)n(ersions)f(a)n(v)-5 b(ailable,)22 b(see)g(the)h(description)f
-(of)g(the)h(astSp)r(ecAdd)227 4502 y(function.)227 4626
-y(Con)n(v)n(ersions)k(are)g(a)n(v)-5 b(ailable)28 b(to)h(transform)e(b)
-r(et)n(w)n(een)i(standards)f(of)h(rest.)40 b(Suc)n(h)29
-b(con)n(v)n(ersions)d(need)j(to)f(kno)n(w)227 4725 y(the)23
-b(source)e(p)r(osition)i(as)e(an)i(RA)f(and)h(DEC.)f(This)h
-(information)e(can)i(b)r(e)f(supplied)h(in)g(the)g(form)f(of)g
-(parameters)227 4825 y(for)27 b(the)g(relev)-5 b(an)n(t)26
-b(con)n(v)n(ersions,)e(in)j(whic)n(h)g(case)f(the)h(Sp)r(ecMap)g(is)f
-(1-dimensional,)g(simply)h(transforming)e(the)227 4924
-y(sp)r(ectral)c(axis)g(v)-5 b(alues.)35 b(This)21 b(means)g(that)h(the)
-g(same)f(source)g(p)r(osition)g(will)h(alw)n(a)n(ys)e(b)r(e)i(used)f(b)
-n(y)g(the)h(Sp)r(ecMap.)227 5024 y(Ho)n(w)n(ev)n(er,)32
-b(this)h(ma)n(y)f(not)g(b)r(e)h(appropriate)e(for)h(an)h(accurate)e
-(description)h(of)g(a)h(3-D)f(sp)r(ectral)g(cub)r(e,)i(where)227
-5124 y(c)n(hanges)c(of)h(spatial)g(p)r(osition)g(can)g(pro)r(duce)f
-(signi\014can)n(t)h(c)n(hanges)f(in)h(the)h(Doppler)f(shift)g(in)n(tro)
-r(duced)g(when)227 5223 y(transforming)19 b(b)r(et)n(w)n(een)h
-(standards)e(of)i(rest.)34 b(F)-7 b(or)20 b(this)g(situation,)h(a)f
-(3-dimensional)e(Sp)r(ecMap)i(can)g(b)r(e)g(created)227
-5323 y(in)30 b(whic)n(h)g(axes)e(2)h(and)h(3)f(corresp)r(ond)f(to)h
-(the)h(source)e(RA)i(and)g(DEC)f(The)h(Sp)r(ecMap)g(simply)f(copies)g
-(v)-5 b(alues)227 5423 y(for)27 b(axes)g(2)g(and)h(3)f(from)g(input)h
-(to)g(output\).)0 5571 y Fd(Synopsis:)121 b Ft(AstSpecMap)39
-b Fi(\003)p Ft(astSpecMap\()g(int)j(nin,)g(int)g(flags,)g(const)f(char)
-h Fi(\003)p Ft(options,)e(...)86 b(\))0 5718 y Fd(P)m(arameters:)p
-eop end
-%%Page: 351 361
-TeXDict begin 351 360 bop 3643 52 a FF(351)259 351 y
-Fd(nin)427 451 y Fj(The)22 b(n)n(um)n(b)r(er)g(of)g(inputs)h(to)f(the)g
-(Mapping)g(\(this)h(will)f(also)f(equal)h(the)g(n)n(um)n(b)r(er)g(of)g
-(outputs\).)36 b(This)22 b(v)-5 b(alue)427 551 y(m)n(ust)33
-b(b)r(e)g(either)f(1)g(or)g(3.)51 b(In)33 b(either)f(case,)h(the)g
-(\014rst)f(input)h(and)g(output)g(corresp)r(oindis)d(the)j(sp)r(ectral)
-427 650 y(axis.)45 b(F)-7 b(or)30 b(a)g(3-axis)f(Sp)r(ecMap,)j(the)f
-(second)f(and)g(third)h(axes)f(giv)n(e)f(the)i(RA)g(and)g(DEC)f
-(\(J2000)f(FK5\))427 750 y(of)k(the)g(source.)51 b(This)32
-b(p)r(ositional)g(information)g(is)h(used)f(b)n(y)h(con)n(v)n(ersions)d
-(whic)n(h)i(transform)g(b)r(et)n(w)n(een)427 849 y(standards)19
-b(of)i(rest,)g(and)f(replaces)f(the)i Ft(")p Fj(RA)p
-Ft(")f Fj(and)g Ft(")p Fj(DEC)p Ft(")f Fj(argumen)n(ts)g(for)h(the)h
-(individual)f(con)n(v)n(ersions)427 949 y(listed)28 b(in)g(description)
-f(of)h(the)g Ft(")p Fj(Sp)r(ecAdd)p Ft(")f Fj(function.)259
-1094 y Fd(\015ags)427 1194 y Fj(This)h(parameter)e(is)h(reserv)n(ed)f
-(for)h(future)h(use)g(and)f(should)h(curren)n(tly)e(alw)n(a)n(ys)g(b)r
-(e)i(set)f(to)h(zero.)259 1339 y Fd(options)427 1439
-y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-1538 y(assignmen)n(ts)23 b(to)h(b)r(e)h(used)f(for)g(initialising)g
-(the)g(new)h(Sp)r(ecMap.)35 b(The)25 b(syn)n(tax)e(used)h(is)g(iden)n
-(tical)g(to)g(that)427 1638 y(for)i(the)h(astSet)g(function)g(and)g(ma)
-n(y)f(include)h Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r
-(eci\014ers)g(iden)n(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p
-Ft(")g Fj(sym)n(b)r(ols)427 1738 y(in)i(the)g(normal)f(w)n(a)n(y)-7
-b(.)35 b(If)28 b(no)g(initialisation)f(is)g(required,)g(a)g
-(zero-length)f(string)h(ma)n(y)g(b)r(e)h(supplied.)259
-1883 y Fd(...)427 1983 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 2082 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 2182 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 2281 y Fj(function\).)0 2468
-y Fd(Returned)32 b(V)-8 b(alue:)259 2629 y(astSp)s(ecMap\(\))427
-2729 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Sp)r(ecMap.)0
-2916 y Fd(Notes:)340 3223 y Fi(\017)45 b Fj(The)32 b(nature)e(and)i
-(units)f(of)g(the)h(co)r(ordinate)e(v)-5 b(alues)31 b(supplied)h(for)e
-(the)i(\014rst)f(input)h(\(i.e.)49 b(the)31 b(sp)r(ectral)427
-3323 y(input\))23 b(of)e(a)g(Sp)r(ecMap)h(m)n(ust)g(b)r(e)g
-(appropriate)d(to)j(the)g(\014rst)f(con)n(v)n(ersion)e(step)j(applied)f
-(b)n(y)g(the)h(Sp)r(ecMap.)427 3422 y(F)-7 b(or)19 b(instance,)j(if)e
-(the)g(\014rst)f(con)n(v)n(ersion)f(step)i(is)f Ft(")p
-Fj(FR)-7 b(TO)n(VL)p Ft(")19 b Fj(\(frequency)h(to)f(relativistic)g(v)n
-(elo)r(cit)n(y\),)i(then)427 3522 y(the)34 b(co)r(ordinate)e(v)-5
-b(alues)32 b(for)h(the)h(\014rst)e(input)i(should)f(b)r(e)h(frequency)e
-(in)i(units)f(of)g(Hz.)54 b(Similarly)-7 b(,)34 b(the)427
-3622 y(nature)k(and)h(units)g(of)f(the)h(co)r(ordinate)f(v)-5
-b(alues)38 b(returned)g(b)n(y)g(a)h(Sp)r(ecMap)f(will)h(b)r(e)g
-(determined)g(b)n(y)427 3721 y(the)c(last)f(con)n(v)n(ersion)e(step)i
-(applied)g(b)n(y)g(the)h(Sp)r(ecMap.)56 b(F)-7 b(or)34
-b(instance,)h(if)g(the)g(last)f(con)n(v)n(ersion)d(step)427
-3821 y(is)k Ft(")p Fj(VL)-7 b(TO)n(V)n(O)p Ft(")33 b
-Fj(\(relativistic)h(v)n(elo)r(cit)n(y)g(to)g(optical)g(v)n(elo)r(cit)n
-(y\),)i(then)f(the)g(co)r(ordinate)f(v)-5 b(alues)34
-b(for)g(the)427 3921 y(\014rst)29 b(output)g(will)g(b)r(e)g(optical)g
-(v)n(elo)r(cit)n(y)e(in)j(units)f(of)f(metres)h(p)r(er)g(second.)39
-b(See)29 b(the)g(description)f(of)h(the)427 4020 y(astSp)r(ecAdd)f
-(function)h(for)e(the)h(units)g(exp)r(ected)g(and)f(returned)g(b)n(y)g
-(eac)n(h)g(con)n(v)n(ersion.)340 4165 y Fi(\017)45 b
-Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 4265 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p 0 4489 3780 12 v 0 4621 a Fz(astSphMap)776
-b Fe(Create)38 b(a)g(SphMap)777 b Fz(astSphMap)0 4834
-y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(SphMap)h(and)g(optionally)e(initialises)i(its)f(attributes.)227
-4971 y(A)21 b(SphMap)g(is)f(a)g(Mapping)h(whic)n(h)f(transforms)f(p)r
-(oin)n(ts)i(from)f(a)g(3-dimensional)f(Cartesian)g(co)r(ordinate)h
-(system)227 5071 y(in)n(to)28 b(a)g(2-dimensional)f(spherical)g(co)r
-(ordinate)g(system)h(\(longitude)g(and)g(latitude)g(on)g(a)g(unit)h
-(sphere)e(cen)n(tred)227 5171 y(at)33 b(the)f(origin\).)51
-b(It)33 b(w)n(orks)d(b)n(y)j(regarding)d(the)j(input)g(co)r(ordinates)e
-(as)h(p)r(osition)g(v)n(ectors)f(and)h(\014nding)h(their)227
-5270 y(in)n(tersection)25 b(with)h(the)h(sphere)e(surface.)35
-b(The)26 b(in)n(v)n(erse)e(transformation)g(alw)n(a)n(ys)g(pro)r(duces)
-h(p)r(oin)n(ts)h(whic)n(h)g(are)227 5370 y(a)h(unit)i(distance)e(from)g
-(the)h(origin)f(\(i.e.)37 b(unit)28 b(v)n(ectors\).)0
-5544 y Fd(Synopsis:)121 b Ft(AstSphMap)40 b Fi(\003)p
-Ft(astSphMap\()f(const)i(char)h Fi(\003)p Ft(options,)e(...)86
-b(\))0 5718 y Fd(P)m(arameters:)p eop end
-%%Page: 352 362
-TeXDict begin 352 361 bop 0 52 a FF(352)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(options)427
-451 y Fj(P)n(oin)n(ter)d(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-551 y(assignmen)n(ts)d(to)h(b)r(e)h(used)f(for)g(initialising)g(the)h
-(new)f(SphMap.)37 b(The)26 b(syn)n(tax)g(used)g(is)g(iden)n(tical)g(to)
-g(that)427 650 y(for)g(the)h(astSet)g(function)g(and)g(ma)n(y)f
-(include)h Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g
-(iden)n(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-750 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 881 y
-Fd(...)427 980 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 1080 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 1179 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 1279 y Fj(function\).)0 1439
-y Fd(Returned)32 b(V)-8 b(alue:)259 1573 y(astSphMap\(\))427
-1673 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(SphMap.)0
-1833 y Fd(Notes:)340 2113 y Fi(\017)45 b Fj(The)39 b(spherical)f(co)r
-(ordinates)f(are)h(longitude)g(\(p)r(ositiv)n(e)h(an)n(ti-clo)r(c)n
-(kwise)e(lo)r(oking)h(from)g(the)h(p)r(ositiv)n(e)427
-2213 y(latitude)24 b(p)r(ole\))f(and)g(latitude.)36 b(The)23
-b(Cartesian)f(co)r(ordinates)g(are)g(righ)n(t-handed,)h(with)g(the)h(x)
-f(axis)f(\(axis)427 2313 y(1\))28 b(at)f(zero)g(longitude)g(and)h
-(latitude,)g(and)f(the)h(z)g(axis)e(\(axis)i(3\))f(at)g(the)h(p)r
-(ositiv)n(e)g(latitude)g(p)r(ole.)340 2443 y Fi(\017)45
-b Fj(A)n(t)28 b(either)g(p)r(ole,)f(the)h(longitude)g(is)f(set)h(to)f
-(the)h(v)-5 b(alue)28 b(of)f(the)h(P)n(olarLong)d(attribute.)340
-2574 y Fi(\017)45 b Fj(If)28 b(the)f(Cartesian)f(co)r(ordinates)g(are)g
-(all)h(zero,)f(then)h(the)h(longitude)f(and)g(latitude)g(are)f(set)h
-(to)g(the)h(v)-5 b(alue)427 2674 y(AST)p Ft(__)p Fj(BAD.)340
-2805 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35
-b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g
-(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427
-2904 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)-2 3064 y Fd(Status)33 b(Handling)n(:)227
-3210 y Fj(The)d(protected)g(in)n(terface)f(to)g(this)h(function)h
-(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g(the)g
-(parameter)227 3310 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62
-b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)
-e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fj(in)n(t)227
-3410 y Fi(\003)p Fj(status)p Ft(")p Fj(.)-2 3557 y Fd(Status)33
-b(Handling)n(:)227 3703 y Fj(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 3803 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fj(in)n(t)227 3902 y Fi(\003)p Fj(status)p Ft(")p Fj(.)-2
-4050 y Fd(Status)33 b(Handling)n(:)227 4196 y Fj(The)d(protected)g(in)n
-(terface)f(to)g(this)h(function)h(includes)f(an)f(extra)g(parameter)f
-(at)i(the)g(end)g(of)g(the)g(parameter)227 4296 y(list)37
-b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)
-r(oin)n(ter)g(to)h(the)g(in)n(teger)e(inherited)i(status)f(v)-5
-b(ariable:)54 b Ft(")p Fj(in)n(t)227 4395 y Fi(\003)p
-Fj(status)p Ft(")p Fj(.)p 0 4590 3780 12 v 0 4721 a Fz(astStatus)801
-4722 y Fe(Obtain)38 b(the)h(curren)m(t)e(AST)i(error)e(status)h(v)-7
-b(alue)3236 4721 y Fz(astStatus)0 4884 y Fd(Description:)44
-b Fj(This)28 b(function)g(returns)f(the)h(curren)n(t)f(v)-5
-b(alue)27 b(of)h(the)g(AST)g(error)d(status.)0 5031 y
-Fd(Synopsis:)121 b Ft(int)42 b(astStatus)0 5178 y Fd(Returned)32
-b(V)-8 b(alue:)259 5313 y(astStatus)427 5413 y Fj(The)28
-b(AST)g(error)e(status)h(v)-5 b(alue.)0 5572 y Fd(Notes:)p
-eop end
-%%Page: 353 363
-TeXDict begin 353 362 bop 3643 52 a FF(353)340 351 y
-Fi(\017)45 b Fj(If)28 b(the)g(AST)g(error)d(status)i(is)h(set)f(to)g
-(an)g(error)f(v)-5 b(alue)27 b(\(after)g(an)g(error\),)f(most)h(AST)h
-(functions)g(will)g(not)427 451 y(execute)h(and)g(will)h(simply)f
-(return)g(without)g(action.)41 b(T)-7 b(o)29 b(clear)f(the)i(error)d
-(status)i(and)g(restore)f(normal)427 551 y(b)r(eha)n(viour,)f(use)g
-(astClearStatus.)p 0 746 3780 12 v 0 878 a Fz(astStcCatalogEn)l(tryLo)t
-(cation)1808 894 y Fe(Create)1860 994 y(a)1808 1094 y(Stc-)1808
-1193 y(Cat-)1841 1293 y(a-)1825 1392 y(lo-)1808 1492
-y(gEn-)1808 1592 y(try-)1808 1705 y(Lo-)1815 1805 y(ca-)1808
-1904 y(tion)2124 878 y Fz(astStcCatalogEn)l(tryLo)t(cation)0
-2066 y Fd(Description:)44 b Fj(This)39 b(function)g(creates)f(a)g(new)h
-(StcCatalogEn)n(tryLo)r(cation)c(and)k(optionally)f(initialises)g(its)h
-(at-)227 2166 y(tributes.)227 2289 y(The)20 b(StcCatalogEn)n(tryLo)r
-(cation)c(class)i(is)h(a)g(sub-class)f(of)h(Stc)h(used)f(to)h(describ)r
-(e)e(the)i(co)n(v)n(erage)c(of)k(the)f(datasets)227 2389
-y(con)n(tained)27 b(in)h(some)f(V)n(O)g(resource.)227
-2513 y(See)h(h)n(ttp://hea-www.harv)-5 b(ard.edu/)p Fi(\030)p
-Fj(arots/n)n(v)n(o)o(meta/STC.h)n(tml)0 2660 y Fd(Synopsis:)121
-b Ft(AstStcCatalogEnt)o(ry)o(Loc)o(at)o(ion)37 b Fi(\003)p
-Ft(astStcCatalogE)o(ntr)o(yL)o(oca)o(ti)o(on)o(\()h(AstRegion)h
-Fi(\003)p Ft(region,)i(int)227 2760 y(ncoords,)g(AstKeyMap)e
-Fi(\003)p Ft(coords[],)h(const)h(char)h Fi(\003)p Ft(options,)e(...)86
-b(\))0 2907 y Fd(P)m(arameters:)259 3042 y(region)427
-3142 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(encapsulated)f(Region.)259
-3273 y Fd(nco)s(ords)427 3372 y Fj(The)h(length)g(of)f(the)h
-Ft(")p Fj(co)r(ords)p Ft(")e Fj(arra)n(y)-7 b(.)34 b(Supply)28
-b(zero)f(if)h Ft(")p Fj(co)r(ords)p Ft(")d Fj(is)j(NULL.)259
-3503 y Fd(co)s(ords)427 3603 y Fj(P)n(oin)n(ter)k(to)h(an)g(arra)n(y)d
-(holding)j Ft(")p Fj(nco)r(ords)p Ft(")e Fj(AstKeyMap)i(p)r(oin)n(ters)
-f(\(if)i Ft(")p Fj(nco)r(ords)p Ft(")d Fj(is)i(zero,)g(the)h(sup-)427
-3702 y(plied)44 b(v)-5 b(alue)43 b(is)g(ignored\).)83
-b(Eac)n(h)42 b(supplied)i(KeyMap)e(describ)r(es)h(the)g(con)n(ten)n(ts)
-g(of)g(a)g(single)f(STC)427 3802 y Fl(<)p Fj(AstroCo)r(ords)p
-Fl(>)16 b Fj(elemen)n(t,)k(and)e(should)h(ha)n(v)n(e)e(elemen)n(ts)h
-(with)h(k)n(eys)e(giv)n(en)h(b)n(y)g(constan)n(ts)f(AST)p
-Ft(__)p Fj(STCNAME,)427 3902 y(AST)p Ft(__)p Fj(STCV)-9
-b(ALUE,)18 b(AST)p Ft(__)p Fj(STCERR)n(OR,)g(AST)p Ft(__)p
-Fj(STCRES,)f(AST)p Ft(__)p Fj(STCSIZE,)h(AST)p Ft(__)p
-Fj(STCPIXSZ.)427 4001 y(An)n(y)23 b(of)g(these)g(elemen)n(ts)f(ma)n(y)g
-(b)r(e)i(omitted,)g(but)f(no)g(other)f(elemen)n(ts)g(should)h(b)r(e)g
-(included.)36 b(If)23 b(supplied,)427 4101 y(the)35 b(AST)p
-Ft(__)p Fj(STCNAME)f(elemen)n(t)g(should)g(b)r(e)h(a)e(v)n(ector)g(of)h
-(c)n(haracter)e(string)i(p)r(oin)n(ters)f(holding)h(the)427
-4201 y Ft(")p Fj(Name)p Ft(")i Fj(item)i(for)e(eac)n(h)g(axis)g(in)i
-(the)f(co)r(ordinate)f(system)g(represen)n(ted)g(b)n(y)h
-Ft(")p Fj(region)p Ft(")p Fj(.)62 b(An)n(y)37 b(other)427
-4300 y(supplied)c(elemen)n(ts)f(should)f(b)r(e)i(scalar)d(elemen)n(ts,)
-j(eac)n(h)f(holding)f(a)h(p)r(oin)n(ter)g(to)f(a)h(Region)f(describing)
-427 4400 y(the)23 b(asso)r(ciated)f(item)h(of)g(ancillary)f
-(information)g(\(error,)g(resolution,)h(size,)g(pixel)g(size)g(or)e(v)
--5 b(alue\).)36 b(These)427 4499 y(Regions)27 b(should)g(describ)r(e)h
-(a)f(v)n(olume)g(within)h(the)g(co)r(ordinate)e(system)i(represen)n
-(ted)e(b)n(y)h Ft(")p Fj(region)p Ft(")p Fj(.)259 4630
-y Fd(options)427 4730 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n(ull-terminated)
-g(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)
-g(attribute)427 4830 y(assignmen)n(ts)d(to)g(b)r(e)h(used)f(for)g
-(initialising)h(the)f(new)h(StcCatalogEn)n(tryLo)r(cation.)33
-b(The)26 b(syn)n(tax)e(used)i(is)427 4929 y(iden)n(tical)h(to)f(that)h
-(for)f(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)427 5029 y(b)n(y)i Ft(")p Fj(\045)p Ft(")f
-Fj(sym)n(b)r(ols)f(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259
-5160 y Fd(...)427 5260 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 5359 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 5459 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 5558 y Fj(function\).)0 5718
-y Fd(Returned)32 b(V)-8 b(alue:)p eop end
-%%Page: 354 364
-TeXDict begin 354 363 bop 0 52 a FF(354)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(astStcCatalogEn)m
-(tryLo)s(cation\(\))427 451 y Fj(A)e(p)r(oin)n(ter)f(to)h(the)g(new)g
-(StcCatalogEn)n(tryLo)r(cation.)0 611 y Fd(Notes:)340
-891 y Fi(\017)45 b Fj(A)27 b(deep)g(cop)n(y)e(is)h(tak)n(en)g(of)h(the)
-f(supplied)h(Region.)36 b(This)26 b(means)g(that)h(an)n(y)f(subsequen)n
-(t)g(c)n(hanges)f(made)427 991 y(to)j(the)g(encapsulated)f(Region)g
-(using)g(the)h(supplied)g(p)r(oin)n(ter)f(will)h(ha)n(v)n(e)e(no)i
-(e\013ect)g(on)f(the)h(Stc.)340 1122 y Fi(\017)45 b Fj(A)35
-b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 1221 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p 0 1417 3780 12 v 0 1548 a Fz(astStcObsDataLo)t(cation)1672
-1547 y Fe(Create)37 b(a)1591 1647 y(StcObsDat-)1637 1746
-y(aLo)s(cation)2398 1548 y Fz(astStcObsDataLo)t(cation)0
-1908 y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(StcObsDataLo)r(cation)g(and)g(optionally)g(initialises)g(its)h
-(attributes.)227 2031 y(The)j(StcObsDataLo)r(cation)e(class)h(is)g(a)g
-(sub-class)f(of)i(Stc)g(used)f(to)g(describ)r(e)h(the)g(co)n(v)n(erage)
-c(of)k(the)f(datasets)227 2131 y(con)n(tained)d(in)h(some)f(V)n(O)g
-(resource.)227 2254 y(See)h(h)n(ttp://hea-www.harv)-5
-b(ard.edu/)p Fi(\030)p Fj(arots/n)n(v)n(o)o(meta/STC.h)n(tml)0
-2402 y Fd(Synopsis:)121 b Ft(AstStcObsDataLoc)o(at)o(ion)37
-b Fi(\003)p Ft(astStcObsDataL)o(oca)o(ti)o(on\()g(AstRegion)j
-Fi(\003)p Ft(region,)g(int)i(ncoords,)227 2501 y(AstKeyMap)e
-Fi(\003)p Ft(coords[],)g(const)h(char)h Fi(\003)p Ft(options,)e(...)86
-b(\))0 2649 y Fd(P)m(arameters:)259 2783 y(region)427
-2883 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(encapsulated)f(Region.)259
-3014 y Fd(nco)s(ords)427 3113 y Fj(The)h(length)g(of)f(the)h
-Ft(")p Fj(co)r(ords)p Ft(")e Fj(arra)n(y)-7 b(.)34 b(Supply)28
-b(zero)f(if)h Ft(")p Fj(co)r(ords)p Ft(")d Fj(is)j(NULL.)259
-3244 y Fd(co)s(ords)427 3344 y Fj(P)n(oin)n(ter)k(to)h(an)g(arra)n(y)d
-(holding)j Ft(")p Fj(nco)r(ords)p Ft(")e Fj(AstKeyMap)i(p)r(oin)n(ters)
-f(\(if)i Ft(")p Fj(nco)r(ords)p Ft(")d Fj(is)i(zero,)g(the)h(sup-)427
-3443 y(plied)44 b(v)-5 b(alue)43 b(is)g(ignored\).)83
-b(Eac)n(h)42 b(supplied)i(KeyMap)e(describ)r(es)h(the)g(con)n(ten)n(ts)
-g(of)g(a)g(single)f(STC)427 3543 y Fl(<)p Fj(AstroCo)r(ords)p
-Fl(>)16 b Fj(elemen)n(t,)k(and)e(should)h(ha)n(v)n(e)e(elemen)n(ts)h
-(with)h(k)n(eys)e(giv)n(en)h(b)n(y)g(constan)n(ts)f(AST)p
-Ft(__)p Fj(STCNAME,)427 3643 y(AST)p Ft(__)p Fj(STCV)-9
-b(ALUE,)18 b(AST)p Ft(__)p Fj(STCERR)n(OR,)g(AST)p Ft(__)p
-Fj(STCRES,)f(AST)p Ft(__)p Fj(STCSIZE,)h(AST)p Ft(__)p
-Fj(STCPIXSZ.)427 3742 y(An)n(y)23 b(of)g(these)g(elemen)n(ts)f(ma)n(y)g
-(b)r(e)i(omitted,)g(but)f(no)g(other)f(elemen)n(ts)g(should)h(b)r(e)g
-(included.)36 b(If)23 b(supplied,)427 3842 y(the)35 b(AST)p
-Ft(__)p Fj(STCNAME)f(elemen)n(t)g(should)g(b)r(e)h(a)e(v)n(ector)g(of)h
-(c)n(haracter)e(string)i(p)r(oin)n(ters)f(holding)h(the)427
-3942 y Ft(")p Fj(Name)p Ft(")i Fj(item)i(for)e(eac)n(h)g(axis)g(in)i
-(the)f(co)r(ordinate)f(system)g(represen)n(ted)g(b)n(y)h
-Ft(")p Fj(region)p Ft(")p Fj(.)62 b(An)n(y)37 b(other)427
-4041 y(supplied)c(elemen)n(ts)f(should)f(b)r(e)i(scalar)d(elemen)n(ts,)
-j(eac)n(h)f(holding)f(a)h(p)r(oin)n(ter)g(to)f(a)h(Region)f(describing)
-427 4141 y(the)23 b(asso)r(ciated)f(item)h(of)g(ancillary)f
-(information)g(\(error,)g(resolution,)h(size,)g(pixel)g(size)g(or)e(v)
--5 b(alue\).)36 b(These)427 4240 y(Regions)27 b(should)g(describ)r(e)h
-(a)f(v)n(olume)g(within)h(the)g(co)r(ordinate)e(system)i(represen)n
-(ted)e(b)n(y)h Ft(")p Fj(region)p Ft(")p Fj(.)259 4371
-y Fd(options)427 4471 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n(ull-terminated)
-g(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)
-g(attribute)427 4571 y(assignmen)n(ts)37 b(to)h(b)r(e)g(used)g(for)f
-(initialising)h(the)g(new)g(StcObsDataLo)r(cation.)67
-b(The)38 b(syn)n(tax)f(used)h(is)427 4670 y(iden)n(tical)27
-b(to)f(that)h(for)f(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)427 4770 y(b)n(y)i Ft(")p Fj(\045)p Ft(")f
-Fj(sym)n(b)r(ols)f(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259
-4901 y Fd(...)427 5000 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 5100 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 5199 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 5299 y Fj(function\).)0 5459
-y Fd(Returned)32 b(V)-8 b(alue:)259 5593 y(astStcObsDataLo)s
-(cation\(\))427 5693 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g
-(StcObsDataLo)r(cation.)p eop end
-%%Page: 355 365
-TeXDict begin 355 364 bop 3643 52 a FF(355)0 351 y Fd(Notes:)340
-637 y Fi(\017)45 b Fj(A)27 b(deep)g(cop)n(y)e(is)h(tak)n(en)g(of)h(the)
-f(supplied)h(Region.)36 b(This)26 b(means)g(that)h(an)n(y)f(subsequen)n
-(t)g(c)n(hanges)f(made)427 737 y(to)j(the)g(encapsulated)f(Region)g
-(using)g(the)h(supplied)g(p)r(oin)n(ter)f(will)h(ha)n(v)n(e)e(no)i
-(e\013ect)g(on)f(the)h(Stc.)340 872 y Fi(\017)45 b Fj(A)35
-b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 971 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p 0 1174 3780 12 v 0 1306 a Fz(astStcResourcePro\014le)1483
-1304 y Fe(Create)37 b(a)h(StcRe-)1563 1404 y(sourcePro\014le)2502
-1306 y Fz(astStcResourcePro\014le)0 1573 y Fd(Description:)44
-b Fj(This)28 b(function)g(creates)f(a)g(new)g(StcResourcePro\014le)f
-(and)h(optionally)g(initialises)g(its)h(attributes.)227
-1699 y(The)36 b(StcResourcePro\014le)d(class)i(is)h(a)f(sub-class)f(of)
-i(Stc)g(used)g(to)f(describ)r(e)h(the)g(co)n(v)n(erage)d(of)i(the)h
-(datasets)227 1799 y(con)n(tained)27 b(in)h(some)f(V)n(O)g(resource.)
-227 1925 y(See)h(h)n(ttp://hea-www.harv)-5 b(ard.edu/)p
-Fi(\030)p Fj(arots/n)n(v)n(o)o(meta/STC.h)n(tml)0 2078
-y Fd(Synopsis:)121 b Ft(AstStcResourcePr)o(of)o(ile)37
-b Fi(\003)p Ft(astStcResource)o(Pro)o(fi)o(le\()g(AstRegion)j
-Fi(\003)p Ft(region,)g(int)i(ncoords,)227 2178 y(AstKeyMap)e
-Fi(\003)p Ft(coords[],)g(const)h(char)h Fi(\003)p Ft(options,)e(...)86
-b(\))0 2331 y Fd(P)m(arameters:)259 2471 y(region)427
-2571 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(encapsulated)f(Region.)259
-2705 y Fd(nco)s(ords)427 2805 y Fj(The)h(length)g(of)f(the)h
-Ft(")p Fj(co)r(ords)p Ft(")e Fj(arra)n(y)-7 b(.)34 b(Supply)28
-b(zero)f(if)h Ft(")p Fj(co)r(ords)p Ft(")d Fj(is)j(NULL.)259
-2939 y Fd(co)s(ords)427 3039 y Fj(P)n(oin)n(ter)k(to)h(an)g(arra)n(y)d
-(holding)j Ft(")p Fj(nco)r(ords)p Ft(")e Fj(AstKeyMap)i(p)r(oin)n(ters)
-f(\(if)i Ft(")p Fj(nco)r(ords)p Ft(")d Fj(is)i(zero,)g(the)h(sup-)427
-3139 y(plied)44 b(v)-5 b(alue)43 b(is)g(ignored\).)83
-b(Eac)n(h)42 b(supplied)i(KeyMap)e(describ)r(es)h(the)g(con)n(ten)n(ts)
-g(of)g(a)g(single)f(STC)427 3238 y Fl(<)p Fj(AstroCo)r(ords)p
-Fl(>)16 b Fj(elemen)n(t,)k(and)e(should)h(ha)n(v)n(e)e(elemen)n(ts)h
-(with)h(k)n(eys)e(giv)n(en)h(b)n(y)g(constan)n(ts)f(AST)p
-Ft(__)p Fj(STCNAME,)427 3338 y(AST)p Ft(__)p Fj(STCV)-9
-b(ALUE,)18 b(AST)p Ft(__)p Fj(STCERR)n(OR,)g(AST)p Ft(__)p
-Fj(STCRES,)f(AST)p Ft(__)p Fj(STCSIZE,)h(AST)p Ft(__)p
-Fj(STCPIXSZ.)427 3438 y(An)n(y)23 b(of)g(these)g(elemen)n(ts)f(ma)n(y)g
-(b)r(e)i(omitted,)g(but)f(no)g(other)f(elemen)n(ts)g(should)h(b)r(e)g
-(included.)36 b(If)23 b(supplied,)427 3537 y(the)35 b(AST)p
-Ft(__)p Fj(STCNAME)f(elemen)n(t)g(should)g(b)r(e)h(a)e(v)n(ector)g(of)h
-(c)n(haracter)e(string)i(p)r(oin)n(ters)f(holding)h(the)427
-3637 y Ft(")p Fj(Name)p Ft(")i Fj(item)i(for)e(eac)n(h)g(axis)g(in)i
-(the)f(co)r(ordinate)f(system)g(represen)n(ted)g(b)n(y)h
-Ft(")p Fj(region)p Ft(")p Fj(.)62 b(An)n(y)37 b(other)427
-3736 y(supplied)c(elemen)n(ts)f(should)f(b)r(e)i(scalar)d(elemen)n(ts,)
-j(eac)n(h)f(holding)f(a)h(p)r(oin)n(ter)g(to)f(a)h(Region)f(describing)
-427 3836 y(the)23 b(asso)r(ciated)f(item)h(of)g(ancillary)f
-(information)g(\(error,)g(resolution,)h(size,)g(pixel)g(size)g(or)e(v)
--5 b(alue\).)36 b(These)427 3936 y(Regions)27 b(should)g(describ)r(e)h
-(a)f(v)n(olume)g(within)h(the)g(co)r(ordinate)e(system)i(represen)n
-(ted)e(b)n(y)h Ft(")p Fj(region)p Ft(")p Fj(.)259 4070
-y Fd(options)427 4170 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n(ull-terminated)
-g(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)
-g(attribute)427 4270 y(assignmen)n(ts)18 b(to)g(b)r(e)h(used)f(for)g
-(initialising)h(the)g(new)f(StcResourcePro\014le.)32
-b(The)18 b(syn)n(tax)g(used)g(is)h(iden)n(tical)427 4369
-y(to)29 b(that)h(for)f(the)g(astSet)g(function)h(and)f(ma)n(y)g
-(include)g Ft(")p Fj(prin)n(tf)p Ft(")g Fj(format)g(sp)r(eci\014ers)f
-(iden)n(ti\014ed)i(b)n(y)f Ft(")p Fj(\045)p Ft(")427
-4469 y Fj(sym)n(b)r(ols)e(in)h(the)g(normal)f(w)n(a)n(y)-7
-b(.)259 4603 y Fd(...)427 4703 y Fj(If)38 b(the)g Ft(")p
-Fj(options)p Ft(")e Fj(string)h(con)n(tains)f Ft(")p
-Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g
-(list)h(of)f(additional)427 4803 y(argumen)n(ts)26 b(ma)n(y)h(follo)n
-(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5 b(alues)27
-b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)37
-b(The)427 4902 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 5002 y Fj(function\).)0
-5167 y Fd(Returned)32 b(V)-8 b(alue:)259 5307 y
-(astStcResourcePro\014le\(\))427 5407 y Fj(A)28 b(p)r(oin)n(ter)f(to)h
-(the)g(new)g(StcResourcePro\014le.)0 5572 y Fd(Notes:)p
-eop end
-%%Page: 356 366
-TeXDict begin 356 365 bop 0 52 a FF(356)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(A)27 b(deep)g(cop)n(y)e(is)h(tak)n(en)g(of)h(the)f(supplied)h
-(Region.)36 b(This)26 b(means)g(that)h(an)n(y)f(subsequen)n(t)g(c)n
-(hanges)f(made)427 451 y(to)j(the)g(encapsulated)f(Region)g(using)g
-(the)h(supplied)g(p)r(oin)n(ter)f(will)h(ha)n(v)n(e)e(no)i(e\013ect)g
-(on)f(the)h(Stc.)340 579 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 679 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 836 y Fd(Status)33
-b(Handling)n(:)227 982 y Fj(The)d(protected)g(in)n(terface)f(to)g(this)
-h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g
-(the)g(parameter)227 1081 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62
-b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)
-e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fj(in)n(t)227
-1181 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p 0 1371 3780
-12 v 0 1503 a Fz(astStcSearc)l(hLo)t(cation)1672 1501
-y Fe(Create)37 b(a)1417 1601 y(StcSearc)m(hLo)s(cation)2526
-1503 y Fz(astStcSearc)l(hLo)t(cation)0 1757 y Fd(Description:)44
-b Fj(This)28 b(function)g(creates)f(a)g(new)g(StcSearc)n(hLo)r(cation)f
-(and)i(optionally)e(initialises)i(its)f(attributes.)227
-1879 y(The)h(StcSearc)n(hLo)r(cation)e(class)g(is)i(a)f(sub-class)f(of)
-i(Stc)g(used)f(to)h(describ)r(e)f(the)h(co)n(v)n(erage)d(of)i(a)h(V)n
-(O)f(query)-7 b(.)227 2001 y(See)28 b(h)n(ttp://hea-www.harv)-5
-b(ard.edu/)p Fi(\030)p Fj(arots/n)n(v)n(o)o(meta/STC.h)n(tml)0
-2146 y Fd(Synopsis:)121 b Ft(AstStcResourcePr)o(of)o(ile)37
-b Fi(\003)p Ft(astStcSearchLo)o(cat)o(io)o(n\()g(AstRegion)j
-Fi(\003)p Ft(region,)g(int)j(ncoords,)227 2246 y(AstKeyMap)d
-Fi(\003)p Ft(coords[],)g(const)h(char)h Fi(\003)p Ft(options,)e(...)86
-b(\))0 2390 y Fd(P)m(arameters:)259 2522 y(region)427
-2622 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(encapsulated)f(Region.)259
-2750 y Fd(nco)s(ords)427 2849 y Fj(The)h(length)g(of)f(the)h
-Ft(")p Fj(co)r(ords)p Ft(")e Fj(arra)n(y)-7 b(.)34 b(Supply)28
-b(zero)f(if)h Ft(")p Fj(co)r(ords)p Ft(")d Fj(is)j(NULL.)259
-2977 y Fd(co)s(ords)427 3077 y Fj(P)n(oin)n(ter)k(to)h(an)g(arra)n(y)d
-(holding)j Ft(")p Fj(nco)r(ords)p Ft(")e Fj(AstKeyMap)i(p)r(oin)n(ters)
-f(\(if)i Ft(")p Fj(nco)r(ords)p Ft(")d Fj(is)i(zero,)g(the)h(sup-)427
-3177 y(plied)44 b(v)-5 b(alue)43 b(is)g(ignored\).)83
-b(Eac)n(h)42 b(supplied)i(KeyMap)e(describ)r(es)h(the)g(con)n(ten)n(ts)
-g(of)g(a)g(single)f(STC)427 3276 y Fl(<)p Fj(AstroCo)r(ords)p
-Fl(>)16 b Fj(elemen)n(t,)k(and)e(should)h(ha)n(v)n(e)e(elemen)n(ts)h
-(with)h(k)n(eys)e(giv)n(en)h(b)n(y)g(constan)n(ts)f(AST)p
-Ft(__)p Fj(STCNAME,)427 3376 y(AST)p Ft(__)p Fj(STCV)-9
-b(ALUE,)18 b(AST)p Ft(__)p Fj(STCERR)n(OR,)g(AST)p Ft(__)p
-Fj(STCRES,)f(AST)p Ft(__)p Fj(STCSIZE,)h(AST)p Ft(__)p
-Fj(STCPIXSZ.)427 3475 y(An)n(y)23 b(of)g(these)g(elemen)n(ts)f(ma)n(y)g
-(b)r(e)i(omitted,)g(but)f(no)g(other)f(elemen)n(ts)g(should)h(b)r(e)g
-(included.)36 b(If)23 b(supplied,)427 3575 y(the)35 b(AST)p
-Ft(__)p Fj(STCNAME)f(elemen)n(t)g(should)g(b)r(e)h(a)e(v)n(ector)g(of)h
-(c)n(haracter)e(string)i(p)r(oin)n(ters)f(holding)h(the)427
-3675 y Ft(")p Fj(Name)p Ft(")i Fj(item)i(for)e(eac)n(h)g(axis)g(in)i
-(the)f(co)r(ordinate)f(system)g(represen)n(ted)g(b)n(y)h
-Ft(")p Fj(region)p Ft(")p Fj(.)62 b(An)n(y)37 b(other)427
-3774 y(supplied)c(elemen)n(ts)f(should)f(b)r(e)i(scalar)d(elemen)n(ts,)
-j(eac)n(h)f(holding)f(a)h(p)r(oin)n(ter)g(to)f(a)h(Region)f(describing)
-427 3874 y(the)23 b(asso)r(ciated)f(item)h(of)g(ancillary)f
-(information)g(\(error,)g(resolution,)h(size,)g(pixel)g(size)g(or)e(v)
--5 b(alue\).)36 b(These)427 3974 y(Regions)27 b(should)g(describ)r(e)h
-(a)f(v)n(olume)g(within)h(the)g(co)r(ordinate)e(system)i(represen)n
-(ted)e(b)n(y)h Ft(")p Fj(region)p Ft(")p Fj(.)259 4102
-y Fd(options)427 4201 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n(ull-terminated)
-g(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)
-g(attribute)427 4301 y(assignmen)n(ts)18 b(to)h(b)r(e)g(used)g(for)g
-(initialising)g(the)g(new)g(StcSearc)n(hLo)r(cation.)33
-b(The)19 b(syn)n(tax)f(used)h(is)g(iden)n(tical)427 4401
-y(to)29 b(that)h(for)f(the)g(astSet)g(function)h(and)f(ma)n(y)g
-(include)g Ft(")p Fj(prin)n(tf)p Ft(")g Fj(format)g(sp)r(eci\014ers)f
-(iden)n(ti\014ed)i(b)n(y)f Ft(")p Fj(\045)p Ft(")427
-4500 y Fj(sym)n(b)r(ols)e(in)h(the)g(normal)f(w)n(a)n(y)-7
-b(.)259 4628 y Fd(...)427 4728 y Fj(If)38 b(the)g Ft(")p
-Fj(options)p Ft(")e Fj(string)h(con)n(tains)f Ft(")p
-Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g
-(list)h(of)f(additional)427 4828 y(argumen)n(ts)26 b(ma)n(y)h(follo)n
-(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5 b(alues)27
-b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)37
-b(The)427 4927 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 5027 y Fj(function\).)0
-5184 y Fd(Returned)32 b(V)-8 b(alue:)259 5316 y(astStcSearc)m(hLo)s
-(cation\(\))427 5415 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g
-(StcSearc)n(hLo)r(cation.)0 5572 y Fd(Notes:)p eop end
-%%Page: 357 367
-TeXDict begin 357 366 bop 3643 52 a FF(357)340 351 y
-Fi(\017)45 b Fj(A)27 b(deep)g(cop)n(y)e(is)h(tak)n(en)g(of)h(the)f
-(supplied)h(Region.)36 b(This)26 b(means)g(that)h(an)n(y)f(subsequen)n
-(t)g(c)n(hanges)f(made)427 451 y(to)j(the)g(encapsulated)f(Region)g
-(using)g(the)h(supplied)g(p)r(oin)n(ter)f(will)h(ha)n(v)n(e)e(no)i
-(e\013ect)g(on)f(the)h(Stc.)340 583 y Fi(\017)45 b Fj(A)35
-b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 682 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)-2 843 y Fd(Status)33 b(Handling)n(:)227 989
-y Fj(The)d(protected)g(in)n(terface)f(to)g(this)h(function)h(includes)f
-(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g(the)g(parameter)227
-1089 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37
-b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)e
-(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fj(in)n(t)227
-1189 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p 0 1386 3780
-12 v 0 1518 a Fz(astStcsChan)657 b Fe(Create)37 b(an)i(StcsChan)655
-b Fz(astStcsChan)0 1682 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(StcsChan)h(and)f(optionally)g
-(initialises)g(its)h(attributes.)227 1806 y(A)33 b(StcsChan)f(is)g(a)g
-(sp)r(ecialised)g(form)g(of)g(Channel)g(whic)n(h)g(supp)r(orts)g(STC-S)
-h(I/O)e(op)r(erations.)50 b(W)-7 b(riting)32 b(an)227
-1905 y(Ob)5 b(ject)19 b(to)f(an)h(StcsChan)f(\(using)h(astW)-7
-b(rite\))19 b(will,)i(if)e(the)g(Ob)5 b(ject)19 b(is)f(suitable,)j
-(generate)c(an)i(STC-S)f(description)227 2005 y(of)23
-b(that)g(Ob)5 b(ject,)24 b(and)f(reading)f(from)g(an)h(StcsChan)g(will)
-g(create)f(a)h(new)g(Ob)5 b(ject)22 b(from)h(its)g(STC-S)g
-(description.)227 2129 y(Normally)-7 b(,)36 b(when)f(y)n(ou)g(use)f(an)
-h(StcsChan,)i(y)n(ou)d(should)h(pro)n(vide)f Ft(")p Fj(source)p
-Ft(")f Fj(and)h Ft(")p Fj(sink)p Ft(")g Fj(functions)i(whic)n(h)227
-2229 y(connect)e(it)h(to)g(an)f(external)f(data)h(store)g(b)n(y)g
-(reading)f(and)h(writing)g(the)h(resulting)f(text.)57
-b(These)34 b(functions)227 2328 y(should)40 b(p)r(erform)f(an)n(y)h
-(con)n(v)n(ersions)d(needed)j(b)r(et)n(w)n(een)g(external)f(c)n
-(haracter)f(enco)r(dings)h(and)h(the)g(in)n(ternal)227
-2428 y(ASCI)r(I)31 b(enco)r(ding.)44 b(If)31 b(no)f(suc)n(h)g
-(functions)g(are)f(supplied,)i(a)f(Channel)g(will)h(read)e(from)h
-(standard)f(input)i(and)227 2527 y(write)d(to)f(standard)g(output.)0
-2676 y Fd(Synopsis:)121 b Ft(AstStcsChan)39 b Fi(\003)p
-Ft(astStcsChan\()f(const)k(char)f Fi(\003)p Ft(\()p Fi(\003)i
-Ft(source\)\()d(void)i(\),)h(void)f(\()p Fi(\003)g Ft(sink\)\()f(const)
-227 2776 y(char)h Fi(\003)h Ft(\),)g(const)f(char)g Fi(\003)p
-Ft(options,)d(...)86 b(\))0 2924 y Fd(P)m(arameters:)259
-3060 y(source)427 3159 y Fj(P)n(oin)n(ter)17 b(to)h(a)g(source)g
-(function)h(that)g(tak)n(es)e(no)h(argumen)n(ts)f(and)i(returns)e(a)h
-(p)r(oin)n(ter)h(to)f(a)g(n)n(ull-terminated)427 3259
-y(string.)54 b(This)33 b(function)h(will)f(b)r(e)h(used)f(b)n(y)g(the)h
-(StcsChan)f(to)g(obtain)g(lines)h(of)f(input)h(text.)54
-b(On)33 b(eac)n(h)427 3358 y(in)n(v)n(o)r(cation,)h(it)g(should)f
-(return)h(a)f(p)r(oin)n(ter)g(to)g(the)h(next)g(input)h(line)e(read)g
-(from)g(some)g(external)g(data)427 3458 y(store,)27 b(and)g(a)h(NULL)g
-(p)r(oin)n(ter)f(when)h(there)f(are)g(no)g(more)g(lines)g(to)h(read.)
-427 3574 y(If)g Ft(")p Fj(source)p Ft(")e Fj(is)h(NULL,)h(the)g
-(Channel)g(will)g(read)e(from)i(standard)e(input)j(instead.)259
-3706 y Fd(sink)427 3805 y Fj(P)n(oin)n(ter)22 b(to)g(a)h(sink)g
-(function)g(that)h(tak)n(es)e(a)g(p)r(oin)n(ter)h(to)f(a)h(n)n
-(ull-terminated)g(string)f(as)g(an)h(argumen)n(t)f(and)427
-3905 y(returns)28 b(v)n(oid.)37 b(This)28 b(function)h(will)f(b)r(e)h
-(used)f(b)n(y)g(the)g(StcsChan)g(to)g(deliv)n(er)f(lines)h(of)g(output)
-h(text.)39 b(On)427 4005 y(eac)n(h)31 b(in)n(v)n(o)r(cation,)h(it)h
-(should)f(deliv)n(er)f(the)h(con)n(ten)n(ts)f(of)h(the)h(string)e
-(supplied)i(to)e(some)h(external)f(data)427 4104 y(store.)427
-4220 y(If)d Ft(")p Fj(sink)p Ft(")f Fj(is)g(NULL,)h(the)g(StcsChan)g
-(will)g(write)f(to)h(standard)e(output)i(instead.)259
-4352 y Fd(options)427 4452 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 4551 y(assignmen)n(ts)23
-b(to)g(b)r(e)h(used)f(for)g(initialising)h(the)g(new)f(StcsChan.)35
-b(The)24 b(syn)n(tax)f(used)g(is)h(iden)n(tical)f(to)g(that)427
-4651 y(for)j(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-4750 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 4882
-y Fd(...)427 4982 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 5082 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 5181 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 5281 y Fj(function\).)0 5442
-y Fd(Returned)32 b(V)-8 b(alue:)259 5577 y(astStcsChan\(\))427
-5677 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(StcsChan.)p
-eop end
-%%Page: 358 368
-TeXDict begin 358 367 bop 0 52 a FF(358)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Notes:)340
-632 y Fi(\017)45 b Fj(If)28 b(the)g(external)e(data)h(source)f(or)g
-(sink)i(uses)e(a)h(c)n(haracter)f(enco)r(ding)g(other)h(than)h(ASCI)r
-(I,)g(the)f(supplied)427 732 y(source)i(and)g(sink)g(functions)h
-(should)f(translate)g(b)r(et)n(w)n(een)h(the)f(external)g(c)n(haracter)
-f(enco)r(ding)h(and)g(the)427 832 y(in)n(ternal)e(ASCI)r(I)i(enco)r
-(ding)e(used)g(b)n(y)h(AST.)340 963 y Fi(\017)45 b Fj(A)35
-b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 1063 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p 0 1259 3780 12 v 0 1391 a Fz(astStripEscap)t(es)1101
-1389 y Fe(Remo)m(v)m(e)38 b(AST)g(escap)s(e)h(sequences)1556
-1504 y(from)f(a)g(string)2855 1391 y Fz(astStripEscap)t(es)0
-1690 y Fd(Description:)44 b Fj(This)25 b(function)h(remo)n(v)n(es)d
-(AST)j(escap)r(e)e(sequences)h(from)f(a)h(supplied)g(string,)g
-(returning)g(the)g(result-)227 1790 y(ing)32 b(text)g(as)f(the)h
-(function)g(v)-5 b(alue.)49 b(The)32 b(b)r(eha)n(viour)e(of)i(this)g
-(function)g(can)f(b)r(e)h(con)n(trolled)f(b)n(y)g(in)n(v)n(oking)f(the)
-227 1889 y(astEscap)r(es)h(function,)j(whic)n(h)e(can)g(b)r(e)g(used)h
-(to)f(supress)f(or)g(enable)h(the)h(remo)n(v)-5 b(al)31
-b(of)h(escap)r(e)f(sequences)h(b)n(y)227 1989 y(this)c(function.)227
-2113 y(AST)33 b(escap)r(e)e(sequences)h(are)f(used)h(b)n(y)f(the)i
-(Plot)e(class)h(to)g(mo)r(dify)g(the)g(app)r(earance)f(and)h(p)r
-(osition)g(of)g(sub-)227 2212 y(strings)27 b(within)h(a)f(plotted)h
-(text)g(string.)37 b(See)27 b(the)h Ft(")p Fj(Escap)r(e)p
-Ft(")e Fj(attribute)i(for)f(further)g(information.)0
-2360 y Fd(Synopsis:)121 b Ft(const)41 b(char)h Fi(\003)p
-Ft(astStripEscapes\()37 b(const)k(char)h Fi(\003)p Ft(text)g(\))0
-2508 y Fd(P)m(arameters:)259 2643 y(text)427 2743 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(string)f(to)g(b)r(e)h(c)n(hec)n(k)n(ed.)0
-2903 y Fd(Returned)k(V)-8 b(alue:)259 3038 y(astStripEscap)s(es\(\))427
-3138 y Fj(P)n(oin)n(ter)23 b(to)i(the)g(mo)r(di\014ed)g(string.)36
-b(If)25 b(no)f(escap)r(e)g(sequences)g(w)n(ere)g(found)h(in)g(the)g
-(supplied)g(string,)g(then)427 3238 y(a)g(cop)n(y)f(of)h(the)g
-(supplied)g(p)r(oin)n(ter)g(is)f(returned.)36 b(Otherwise,)25
-b(the)g(p)r(oin)n(ter)f(will)h(p)r(oin)n(t)g(to)g(a)g(static)f
-(bu\013er)427 3337 y(holding)32 b(the)g(mo)r(di\014ed)h(text.)50
-b(This)32 b(text)g(will)g(b)r(e)h(o)n(v)n(er-written)d(b)n(y)h
-(subsequen)n(t)h(in)n(v)n(o)r(cations)e(of)i(this)427
-3437 y(function.)38 b(If)29 b(the)f(astEscap)r(es)e(function)j(has)e(b)
-r(een)h(called)g(indicating)f(that)h(escap)r(e)g(sequences)f(should)427
-3537 y(not)h(b)r(e)g(stripp)r(ed,)g(then)g(the)g(supplied)g(string)f
-(is)g(returned)g(without)h(c)n(hange.)p 0 3733 V 0 3865
-a Fz(astSwitc)l(hMap)536 b Fe(Create)37 b(a)i(Switc)m(hMap)534
-b Fz(astSwitc)l(hMap)0 4051 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(Switc)n(hMap)h(and)f(optionally)g
-(initialises)g(its)h(attributes.)227 4174 y(A)34 b(Switc)n(hMap)e(is)h
-(a)g(Mapping)f(whic)n(h)h(represen)n(ts)f(a)g(set)h(of)g(alternate)f
-(Mappings,)i(eac)n(h)e(of)h(whic)n(h)g(is)g(used)227
-4274 y(to)d(transform)f(p)r(ositions)g(within)i(a)e(particular)g
-(region)f(of)i(the)g(input)h(or)e(output)h(co)r(ordinate)f(system)g(of)
-h(the)227 4374 y(Switc)n(hMap.)227 4497 y(A)k(Switc)n(hMap)e(can)h
-(encapsulate)f(an)n(y)g(n)n(um)n(b)r(er)h(of)g(Mappings,)h(but)f(they)h
-(m)n(ust)f(all)f(ha)n(v)n(e)g(the)h(same)g(n)n(um-)227
-4597 y(b)r(er)d(of)g(inputs)h(\(Nin)f(attribute)g(v)-5
-b(alue\))31 b(and)e(the)i(same)e(n)n(um)n(b)r(er)h(of)g(outputs)g
-(\(Nout)g(attribute)g(v)-5 b(alue\).)45 b(The)227 4697
-y(Switc)n(hMap)20 b(itself)h(inherits)f(these)g(same)g(v)-5
-b(alues)20 b(for)f(its)i(Nin)f(and)g(Nout)h(attributes.)34
-b(Eac)n(h)19 b(of)h(these)g(Mappings)227 4796 y(represen)n(ts)33
-b(a)h Ft(")p Fj(route)p Ft(")f Fj(through)h(the)g(switc)n(h,)i(and)e
-(are)g(referred)f(to)h(as)g Ft(")p Fj(route)p Ft(")e
-Fj(Mappings)i(b)r(elo)n(w.)57 b(Eac)n(h)227 4896 y(route)30
-b(Mapping)f(transforms)g(p)r(ositions)h(b)r(et)n(w)n(een)g(the)g(input)
-h(and)f(output)g(co)r(ordinate)f(space)h(of)g(the)g(en)n(tire)227
-4996 y(Switc)n(hMap,)f(but)h(only)e(one)h(Mapping)f(will)h(b)r(e)h
-(used)e(to)h(transform)f(an)n(y)g(giv)n(en)g(p)r(osition.)40
-b(The)29 b(selection)g(of)227 5095 y(the)e(appropriate)e(route)h
-(Mapping)g(to)g(use)g(with)h(an)n(y)f(giv)n(en)f(input)j(p)r(osition)e
-(is)g(made)g(b)n(y)g(another)g(Mapping,)227 5195 y(called)31
-b(the)h Ft(")p Fj(selector)p Ft(")e Fj(Mapping.)48 b(Eac)n(h)30
-b(Switc)n(hMap)i(encapsulates)e(t)n(w)n(o)h(selector)f(Mappings)h(in)h
-(addition)227 5295 y(to)d(its)g(route)f(Mappings;)h(one)g(for)f(use)h
-(with)g(the)g(Switc)n(hMap's)g(forw)n(ard)e(transformation)g(\(called)i
-(the)g Ft(")p Fj(for-)227 5394 y(w)n(ard)24 b(selector)g(Mapping)p
-Ft(")p Fj(\),)i(and)f(one)g(for)f(use)h(with)h(the)g(Switc)n(hMap's)f
-(in)n(v)n(erse)f(transformation)f(\(called)i(the)227
-5494 y Ft(")p Fj(in)n(v)n(erse)f(selector)h(Mapping)p
-Ft(")p Fj(\).)36 b(The)26 b(forw)n(ard)f(selector)g(Mapping)g(m)n(ust)h
-(ha)n(v)n(e)f(the)i(same)e(n)n(um)n(b)r(er)h(of)g(inputs)227
-5593 y(as)k(the)h(route)e(Mappings,)i(but)g(should)f(ha)n(v)n(e)f(only)
-h(one)g(output.)45 b(Lik)n(ewise,)30 b(the)h(in)n(v)n(erse)e(selector)g
-(Mapping)227 5693 y(m)n(ust)f(ha)n(v)n(e)e(the)i(same)f(n)n(um)n(b)r
-(er)h(of)f(outputs)h(as)f(the)h(route)f(Mappings,)g(but)h(should)g(ha)n
-(v)n(e)e(only)h(one)h(input.)p eop end
-%%Page: 359 369
-TeXDict begin 359 368 bop 3643 52 a FF(359)227 351 y
-Fj(When)40 b(the)g(Switc)n(hMap)f(is)h(used)f(to)g(transform)g(a)g(p)r
-(osition)g(in)h(the)f(forw)n(ard)f(direction)h(\(from)h(input)g(to)227
-451 y(output\),)g(eac)n(h)35 b(supplied)h(input)h(p)r(osition)f(is)h
-(\014rst)e(transformed)h(b)n(y)f(the)i(forw)n(ard)e(transformation)f
-(of)i(the)227 551 y(forw)n(ard)27 b(selector)g(Mapping.)38
-b(This)28 b(pro)r(duces)f(a)h(single)f(output)i(v)-5
-b(alue)28 b(for)g(eac)n(h)f(input)i(p)r(osition)f(referred)f(to)227
-650 y(as)j(the)h(selector)e(v)-5 b(alue.)45 b(The)30
-b(nearest)f(in)n(teger)h(to)g(the)g(selector)g(v)-5 b(alue)30
-b(is)g(found,)h(and)f(is)g(used)h(to)f(index)g(the)227
-750 y(arra)n(y)25 b(of)i(route)f(Mappings)g(\(the)i(\014rst)f(supplied)
-g(route)f(Mapping)h(has)f(index)h(1,)g(the)g(second)g(route)f(Mapping)
-227 849 y(has)34 b(index)h(2,)h(etc\).)59 b(If)35 b(the)g(nearest)f(in)
-n(teger)g(to)g(the)h(selector)f(v)-5 b(alue)35 b(is)f(less)h(than)f(1)h
-(or)e(greater)g(than)i(the)227 949 y(n)n(um)n(b)r(er)c(of)f(route)g
-(Mappings,)h(then)h(the)f(Switc)n(hMap)f(output)i(p)r(osition)e(is)h
-(set)f(to)h(a)f(v)-5 b(alue)31 b(of)g(AST)p Ft(__)p Fj(BAD)227
-1049 y(on)k(ev)n(ery)g(axis.)59 b(Otherwise,)37 b(the)f(forw)n(ard)e
-(transformation)f(of)j(the)g(selected)f(route)g(Mapping)g(is)g(used)h
-(to)227 1148 y(transform)27 b(the)h(supplied)g(input)g(p)r(osition)f
-(to)h(pro)r(duce)f(the)h(Switc)n(hMap)g(output)g(p)r(osition.)227
-1272 y(When)33 b(the)g(Switc)n(hMap)f(is)g(used)g(to)g(transform)f(a)h
-(p)r(osition)g(in)h(the)f(in)n(v)n(erse)f(direction)h(\(from)g
-Ft(")p Fj(output)p Ft(")g Fj(to)227 1372 y Ft(")p Fj(input)p
-Ft(")p Fj(\),)26 b(eac)n(h)f(supplied)g Ft(")p Fj(output)p
-Ft(")g Fj(p)r(osition)g(is)g(\014rst)g(transformed)f(b)n(y)h(the)h(in)n
-(v)n(erse)e(transformation)f(of)i(the)227 1471 y(in)n(v)n(erse)31
-b(selector)f(Mapping.)49 b(This)32 b(pro)r(duces)f(a)g(selector)g(v)-5
-b(alue)31 b(for)g(eac)n(h)g Ft(")p Fj(output)p Ft(")h
-Fj(p)r(osition.)49 b(Again,)32 b(the)227 1571 y(nearest)g(in)n(teger)f
-(to)i(the)g(selector)e(v)-5 b(alue)32 b(is)h(found,)h(and)e(is)g(used)h
-(to)f(index)h(the)g(arra)n(y)d(of)i(route)g(Mappings.)227
-1670 y(If)f(this)f(selector)g(index)g(v)-5 b(alue)30
-b(is)g(within)h(the)g(b)r(ounds)f(of)g(the)h(arra)n(y)d(of)i(route)f
-(Mappings,)i(then)f(the)h(in)n(v)n(erse)227 1770 y(transformation)26
-b(of)i(the)g(selected)f(route)g(Mapping)g(is)g(used)h(to)f(transform)g
-(the)h(supplied)g Ft(")p Fj(output)p Ft(")f Fj(p)r(osition)227
-1870 y(to)32 b(pro)r(duce)f(the)h(Switc)n(hMap)f Ft(")p
-Fj(input)p Ft(")h Fj(p)r(osition.)49 b(If)32 b(the)g(selector)e(index)i
-(v)-5 b(alue)31 b(is)h(outside)f(the)h(b)r(ounds)g(of)227
-1969 y(the)25 b(arra)n(y)e(of)h(route)g(Mappings,)h(then)g(the)g(Switc)
-n(hMap)g Ft(")p Fj(input)p Ft(")f Fj(p)r(osition)h(is)f(set)h(to)f(a)g
-(v)-5 b(alue)25 b(of)g(AST)p Ft(__)p Fj(BAD)227 2069
-y(on)j(ev)n(ery)e(axis.)227 2193 y(In)f(practice,)f(appropriate)e
-(selector)h(Mappings)g(should)h(b)r(e)h(c)n(hosen)e(to)h(asso)r(ciate)f
-(a)g(di\013eren)n(t)h(route)g(Mapping)227 2292 y(with)30
-b(eac)n(h)e(region)g(of)h(co)r(ordinate)f(space.)41 b(Note)30
-b(that)f(the)h(SelectorMap)e(class)g(of)h(Mapping)g(is)g(particularly)
-227 2392 y(appropriate)d(for)h(this)h(purp)r(ose.)227
-2515 y(If)38 b(a)f(comp)r(ound)g(Mapping)g(con)n(tains)f(a)h(Switc)n
-(hMap)g(in)g(series)f(with)i(its)f(o)n(wn)g(in)n(v)n(erse,)h(the)f(com)
-n(bination)227 2615 y(of)31 b(the)h(t)n(w)n(o)f(adjacen)n(t)f(Switc)n
-(hMaps)h(will)h(b)r(e)f(replaced)g(b)n(y)g(a)g(UnitMap)g(when)h(the)g
-(comp)r(ound)f(Mapping)g(is)227 2715 y(simpli\014ed)d(using)g
-(astSimplify)-7 b(.)0 2862 y Fd(Synopsis:)121 b Ft(AstSwitchMap)38
-b Fi(\003)p Ft(astSwitchMap\()g(AstMapping)i Fi(\003)p
-Ft(fsmap,)g(AstMapping)g Fi(\003)p Ft(ismap,)g(int)j(nroute,)227
-2962 y(AstMapping)d Fi(\003)p Ft(routemaps[],)e(const)j(char)h
-Fi(\003)p Ft(options,)e(...)86 b(\))0 3110 y Fd(P)m(arameters:)259
-3244 y(fsmap)427 3344 y Fj(P)n(oin)n(ter)28 b(to)h(the)g(forw)n(ard)f
-(selector)g(Mapping.)41 b(This)29 b(m)n(ust)h(ha)n(v)n(e)d(a)i
-(de\014ned)h(forw)n(ard)d(transformation,)427 3444 y(but)c(need)g(not)f
-(ha)n(v)n(e)f(a)h(de\014ned)h(in)n(v)n(erse)d(transformation.)34
-b(It)23 b(m)n(ust)f(ha)n(v)n(e)f(one)h(output,)i(and)e(the)h(n)n(um)n
-(b)r(er)427 3543 y(of)31 b(inputs)g(m)n(ust)f(matc)n(h)g(the)h(n)n(um)n
-(b)r(er)f(of)g(inputs)h(of)g(eac)n(h)e(of)h(the)h(supplied)g(route)f
-(Mappings.)44 b(NULL)427 3643 y(ma)n(y)27 b(b)r(e)h(supplied,)g(in)g
-(whic)n(h)g(case)e(the)i(Switc)n(hMap)g(will)g(ha)n(v)n(e)e(an)h
-(unde\014ned)i(forw)n(ard)c(Mapping.)259 3774 y Fd(ismap)427
-3874 y Fj(P)n(oin)n(ter)32 b(to)h(the)h(in)n(v)n(erse)e(selector)g
-(Mapping.)54 b(This)34 b(m)n(ust)f(ha)n(v)n(e)f(a)h(de\014ned)h(in)n(v)
-n(erse)e(transformation,)427 3973 y(but)25 b(need)f(not)f(ha)n(v)n(e)g
-(a)g(de\014ned)i(forw)n(ard)d(transformation.)34 b(It)24
-b(m)n(ust)g(ha)n(v)n(e)e(one)i(input,)h(and)f(the)g(n)n(um)n(b)r(er)427
-4073 y(of)g(outputs)g(m)n(ust)g(matc)n(h)g(the)g(n)n(um)n(b)r(er)f(of)h
-(outputs)g(of)g(eac)n(h)f(of)h(the)g(supplied)g(route)f(Mappings.)35
-b(NULL)427 4172 y(ma)n(y)27 b(b)r(e)h(supplied,)g(in)g(whic)n(h)g(case)
-e(the)i(Switc)n(hMap)g(will)g(ha)n(v)n(e)e(an)h(unde\014ned)i(in)n(v)n
-(erse)d(Mapping.)259 4304 y Fd(nroute)427 4403 y Fj(The)i(n)n(um)n(b)r
-(er)f(of)h(supplied)g(route)f(Mappings.)259 4534 y Fd(routemaps)427
-4634 y Fj(An)37 b(arra)n(y)d(of)i(p)r(oin)n(ters)f(to)h(the)h(route)e
-(Mappings.)62 b(All)37 b(the)f(supplied)h(route)e(Mappings)h(m)n(ust)g
-(ha)n(v)n(e)427 4733 y(common)23 b(v)-5 b(alues)23 b(for)g(the)h(Nin)g
-(and)f(Nout)h(attributes,)g(and)f(these)h(v)-5 b(alues)23
-b(de\014ne)h(the)f(n)n(um)n(b)r(er)h(of)f(inputs)427
-4833 y(and)28 b(outputs)g(of)f(the)h(Switc)n(hMap.)259
-4964 y Fd(options)427 5064 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 5163 y(assignmen)n(ts)i
-(to)h(b)r(e)h(used)f(for)g(initialising)g(the)g(new)g(Switc)n(hMap.)48
-b(The)31 b(syn)n(tax)g(used)g(is)g(iden)n(tical)g(to)427
-5263 y(that)38 b(for)e(the)i(astSet)f(function)h(and)f(ma)n(y)f
-(include)i Ft(")p Fj(prin)n(tf)p Ft(")e Fj(format)h(sp)r(eci\014ers)g
-(iden)n(ti\014ed)g(b)n(y)g Ft(")p Fj(\045)p Ft(")427
-5363 y Fj(sym)n(b)r(ols)27 b(in)h(the)g(normal)f(w)n(a)n(y)-7
-b(.)259 5494 y Fd(...)427 5593 y Fj(If)38 b(the)g Ft(")p
-Fj(options)p Ft(")e Fj(string)h(con)n(tains)f Ft(")p
-Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g
-(list)h(of)f(additional)427 5693 y(argumen)n(ts)26 b(ma)n(y)h(follo)n
-(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5 b(alues)27
-b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)37
-b(The)p eop end
-%%Page: 360 370
-TeXDict begin 360 369 bop 0 52 a FF(360)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)427 351 y Fj(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 451 y Fj(function\).)0 642 y
-Fd(Returned)32 b(V)-8 b(alue:)259 807 y(astSwitc)m(hMap\(\))427
-907 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Switc)n(hMap.)0
-1098 y Fd(Notes:)340 1409 y Fi(\017)45 b Fj(Note)e(that)f(the)h(comp)r
-(onen)n(t)f(Mappings)g(supplied)h(are)e(not)h(copied)h(b)n(y)f
-(astSwitc)n(hMap)f(\(the)j(new)427 1509 y(Switc)n(hMap)36
-b(simply)h(retains)e(a)h(reference)f(to)h(them\).)64
-b(They)36 b(ma)n(y)f(con)n(tin)n(ue)h(to)g(b)r(e)g(used)h(for)e(other)
-427 1608 y(purp)r(oses,)i(but)f(should)g(not)f(b)r(e)i(deleted.)61
-b(If)36 b(a)f(Switc)n(hMap)h(con)n(taining)e(a)i(cop)n(y)e(of)i(its)g
-(comp)r(onen)n(t)427 1708 y(Mappings)27 b(is)h(required,)e(then)j(a)e
-(cop)n(y)f(of)i(the)g(Switc)n(hMap)g(should)f(b)r(e)h(made)f(using)h
-(astCop)n(y)-7 b(.)340 1855 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 1955 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 2183 3780 12 v 0 2314
-a Fz(astT)-11 b(est)904 2315 y Fe(T)h(est)38 b(if)g(an)h(Ob)7
-b(ject)38 b(attribute)e(v)-7 b(alue)39 b(is)f(set)3360
-2314 y Fz(astT)-11 b(est)0 2537 y Fd(Description:)44
-b Fj(This)c(function)g(returns)f(a)g(b)r(o)r(olean)f(result)i(\(0)f(or)
-f(1\))i(to)f(indicate)h(whether)f(a)g(v)-5 b(alue)39
-b(has)g(b)r(een)227 2637 y(explicitly)28 b(set)g(for)f(one)g(of)g(an)h
-(Ob)5 b(ject's)27 b(attributes.)0 2815 y Fd(Synopsis:)121
-b Ft(int)42 b(astTest\()e(AstObject)g Fi(\003)p Ft(this,)h(const)h
-(char)g Fi(\003)p Ft(attrib)e(\))0 2994 y Fd(P)m(arameters:)259
-3159 y(this)427 3259 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5
-b(ject.)259 3406 y Fd(attrib)427 3505 y Fj(P)n(oin)n(ter)39
-b(to)g(a)h(n)n(ull-terminated)f(c)n(haracter)f(string)h(con)n(taining)g
-(the)i(name)e(of)h(the)g(attribute)g(to)g(b)r(e)427 3605
-y(tested.)0 3796 y Fd(Class)31 b(Applicabilit)m(y:)259
-3961 y(Ob)5 b(ject)427 4061 y Fj(This)28 b(function)g(applies)f(to)h
-(all)f(Ob)5 b(jects.)0 4252 y Fd(Returned)32 b(V)-8 b(alue:)259
-4417 y(astT)g(est\(\))427 4517 y Fj(One)29 b(if)g(a)f(v)-5
-b(alue)29 b(has)f(previously)g(b)r(een)h(explicitly)g(set)f(for)h(the)g
-(attribute)g(\(and)f(hasn't)h(b)r(een)g(cleared\),)427
-4616 y(otherwise)e(zero.)0 4807 y Fd(Notes:)340 5119
-y Fi(\017)45 b Fj(A)n(ttribute)28 b(names)g(are)e(not)i(case)f
-(sensitiv)n(e)g(and)g(ma)n(y)g(b)r(e)h(surrounded)e(b)n(y)i(white)g
-(space.)340 5266 y Fi(\017)45 b Fj(A)29 b(v)-5 b(alue)29
-b(of)f(zero)g(will)h(b)r(e)g(returned)f(if)h(this)g(function)g(is)f(in)
-n(v)n(ok)n(ed)f(with)j(the)f(AST)g(error)d(status)j(set,)f(or)427
-5366 y(if)g(it)g(should)g(fail)f(for)h(an)n(y)e(reason.)340
-5513 y Fi(\017)45 b Fj(A)35 b(v)-5 b(alue)35 b(of)g(zero)f(will)h(also)
-e(b)r(e)i(returned)g(if)g(this)g(function)h(is)e(used)h(to)g(test)g(a)f
-(read-only)f(attribute,)427 5613 y(although)27 b(no)h(error)d(will)j
-(result.)p eop end
-%%Page: 361 371
-TeXDict begin 361 370 bop 3643 52 a FF(361)p 0 351 3780
-12 v 0 483 a Fz(astT)-11 b(estFits)283 b Fe(See)39 b(if)f(a)h(named)f
-(k)m(eyw)m(ord)e(has)j(a)g(de\014ned)1385 598 y(v)-7
-b(alue)38 b(in)h(a)f(FitsChan)3132 483 y Fz(astT)-11
-b(estFits)0 772 y Fd(Description:)44 b Fj(This)31 b(function)h(serc)n
-(hes)e(for)g(a)h(named)g(k)n(eyw)n(ord)e(in)i(a)g(FitsChan.)47
-b(If)31 b(found,)i(and)e(if)g(the)g(k)n(eyw)n(ord)227
-872 y(has)g(a)g(v)-5 b(alue)32 b(asso)r(ciated)e(with)i(it,)g(a)g
-(non-zero)d(v)-5 b(alue)32 b(is)f(returned.)48 b(If)32
-b(the)g(k)n(eyw)n(ord)d(is)i(not)h(found,)h(or)d(if)i(it)227
-971 y(do)r(es)c(not)f(ha)n(v)n(e)g(an)g(asso)r(ciated)f(v)-5
-b(alue,)28 b(a)f(zero)f(v)-5 b(alue)28 b(is)f(returned.)0
-1130 y Fd(Synopsis:)121 b Ft(int)42 b(astTestFits\()d(AstFitsChan)g
-Fi(\003)p Ft(this,)i(const)g(char)h Fi(\003)p Ft(name,)f(int)i
-Fi(\003)p Ft(there)e(\))0 1288 y Fd(P)m(arameters:)259
-1434 y(this)427 1533 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259
-1671 y Fd(name)427 1770 y Fj(P)n(oin)n(ter)f(to)i(a)f(n)n
-(ull-terminated)h(c)n(haracter)d(string)i(con)n(taining)g(the)h(FITS)g
-(k)n(eyw)n(ord)e(name.)40 b(This)28 b(ma)n(y)427 1870
-y(b)r(e)i(a)f(complete)g(FITS)h(header)f(card,)g(in)g(whic)n(h)h(case)e
-(the)i(k)n(eyw)n(ord)d(to)j(use)f(is)g(extracted)g(from)g(it.)43
-b(No)427 1970 y(more)27 b(than)h(80)e(c)n(haracters)g(are)g(read)h
-(from)g(this)h(string.)259 2107 y Fd(there)427 2207 y
-Fj(P)n(oin)n(ter)20 b(to)h(an)g(in)n(teger)f(whic)n(h)h(will)g(b)r(e)h
-(returned)f(holding)f(a)h(non-zero)f(v)-5 b(alue)21 b(if)g(the)h(k)n
-(eyw)n(ord)d(w)n(as)h(found)427 2306 y(in)31 b(the)f(header,)g(and)g
-(zero)f(otherwise.)43 b(This)30 b(parameter)f(allo)n(ws)f(a)i
-(distinction)g(to)g(b)r(e)h(made)f(b)r(et)n(w)n(een)427
-2406 y(the)d(case)e(where)h(a)g(k)n(eyw)n(ord)e(is)i(not)h(presen)n(t,)
-f(and)g(the)g(case)g(where)f(a)h(k)n(eyw)n(ord)f(is)h(presen)n(t)f(but)
-i(has)f(no)427 2506 y(asso)r(ciated)h(v)-5 b(alue.)36
-b(A)28 b(NULL)g(p)r(oin)n(ter)f(ma)n(y)g(b)r(e)h(supplied)g(if)g(this)g
-(information)f(is)h(not)f(required.)0 2676 y Fd(Returned)32
-b(V)-8 b(alue:)259 2822 y(astT)g(estFits\(\))427 2922
-y Fj(A)25 b(v)-5 b(alue)23 b(of)h(zero)f(is)h(returned)f(if)i(the)f(k)n
-(eyw)n(ord)e(w)n(as)h(not)h(found)g(in)h(the)f(FitsChan)g(or)f(has)g
-(no)h(asso)r(ciated)427 3021 y(v)-5 b(alue.)37 b(Otherwise,)27
-b(a)g(v)-5 b(alue)27 b(of)h(one)f(is)h(returned.)0 3192
-y Fd(Notes:)340 3484 y Fi(\017)45 b Fj(The)28 b(curren)n(t)f(card)f(is)
-i(left)g(unc)n(hanged)f(b)n(y)g(this)h(function.)340
-3621 y Fi(\017)45 b Fj(The)27 b(card)e(follo)n(wing)h(the)h(curren)n(t)
-e(card)h(is)g(c)n(hec)n(k)n(ed)f(\014rst.)37 b(If)27
-b(this)f(is)h(not)f(the)h(required)e(card,)h(then)h(the)427
-3721 y(rest)21 b(of)h(the)g(FitsChan)g(is)f(searc)n(hed,)h(starting)e
-(with)j(the)f(\014rst)f(card)g(added)g(to)h(the)g(FitsChan.)35
-b(Therefore)427 3820 y(cards)24 b(should)g(b)r(e)h(accessed)e(in)i(the)
-g(order)e(they)i(are)f(stored)f(in)i(the)g(FitsChan)g(\(if)g(p)r
-(ossible\))g(as)f(this)g(will)427 3920 y(minimise)k(the)g(time)g(sp)r
-(en)n(t)g(searc)n(hing)e(for)h(cards.)340 4057 y Fi(\017)45
-b Fj(An)28 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)h(the)g(k)n(eyw)n
-(ord)d(name)j(do)r(es)f(not)h(conform)e(to)i(FITS)g(requiremen)n(ts.)
-340 4195 y Fi(\017)45 b Fj(Zero)34 b(is)h(returned)g(as)f(the)i
-(function)f(v)-5 b(alue)35 b(if)h(an)f(error)e(has)h(already)g(o)r
-(ccurred,)i(or)e(if)i(this)f(function)427 4294 y(should)28
-b(fail)f(for)g(an)n(y)g(reason.)p 0 4503 V 0 4633 a Fz(astT)-11
-b(ext)1150 4634 y Fe(Dra)m(w)37 b(a)i(text)f(string)f(for)h(a)h(Plot)
-3342 4633 y Fz(astT)-11 b(ext)0 4832 y Fd(Description:)44
-b Fj(This)38 b(function)g(dra)n(ws)e(a)i(string)f(of)g(text)h(at)g(a)f
-(p)r(osition)g(sp)r(eci\014ed)h(in)g(the)g(ph)n(ysical)f(co)r(ordinate)
-227 4932 y(system)e(of)h(a)e(Plot.)60 b(The)35 b(ph)n(ysical)f(p)r
-(osition)i(is)f(transformed)f(in)n(to)h(graphical)f(co)r(ordinates)f
-(to)j(determine)227 5031 y(where)27 b(the)h(text)g(should)g(app)r(ear)e
-(within)j(the)f(plotting)f(area.)0 5190 y Fd(Synopsis:)121
-b Ft(void)42 b(astText\()e(AstPlot)h Fi(\003)p Ft(this,)g(const)g(char)
-h Fi(\003)p Ft(text,)f(const)h(double)f(pos[],)g(const)h(float)227
-5289 y(up[],)g(const)f(char)h Fi(\003)p Ft(just)g(\))0
-5448 y Fd(P)m(arameters:)259 5593 y(this)427 5693 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Plot.)p eop end
-%%Page: 362 372
-TeXDict begin 362 371 bop 0 52 a FF(362)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(text)427
-451 y Fj(P)n(oin)n(ter)24 b(to)i(a)f(n)n(ull-terminated)g(c)n(haracter)
-f(string)h(con)n(taining)f(the)i(text)g(to)f(b)r(e)h(dra)n(wn.)36
-b(T)-7 b(railing)24 b(white)427 551 y(space)j(is)h(ignored.)259
-693 y Fd(p)s(os)427 792 y Fj(An)j(arra)n(y)-7 b(,)30
-b(with)h(one)f(elemen)n(t)h(for)f(eac)n(h)g(axis)g(of)h(the)g(Plot,)g
-(giving)e(the)j(ph)n(ysical)d(co)r(ordinates)h(of)g(the)427
-892 y(p)r(oin)n(t)e(where)f(the)h(reference)f(p)r(osition)g(of)h(the)g
-(text)g(string)f(is)g(to)h(b)r(e)g(placed.)259 1034 y
-Fd(up)427 1134 y Fj(An)i(arra)n(y)d(holding)i(the)g(comp)r(onen)n(ts)g
-(of)g(a)g(v)n(ector)f(in)h(the)h Ft(")p Fj(up)p Ft(")e
-Fj(direction)h(of)g(the)h(text)f(\(in)h(graphical)427
-1234 y(co)r(ordinates\).)43 b(F)-7 b(or)30 b(example,)g(to)g(get)f
-(horizon)n(tal)g(text,)i(the)f(v)n(ector)f Fi(f)p Fj(0.0f,1.0f)p
-Fi(g)f Fj(should)i(b)r(e)g(supplied.)427 1333 y(F)-7
-b(or)34 b(a)g(basic)g(Plot,)i(2)e(v)-5 b(alues)34 b(should)g(b)r(e)h
-(supplied.)58 b(F)-7 b(or)34 b(a)g(Plot3D,)g(3)g(v)-5
-b(alues)34 b(should)g(b)r(e)h(supplied,)427 1433 y(and)27
-b(the)g(actual)g(up)g(v)n(ector)e(used)i(is)g(the)g(pro)5
-b(jection)26 b(of)h(the)g(supplied)g(up)h(v)n(ector)d(on)n(to)h(the)i
-(text)f(plane)427 1532 y(sp)r(eci\014ed)h(b)n(y)f(the)h(curren)n(t)f(v)
--5 b(alue)28 b(of)f(the)h(Plot3D's)f(Norm)g(attribute.)259
-1675 y Fd(just)427 1774 y Fj(P)n(oin)n(ter)22 b(to)h(a)g(n)n
-(ull-terminated)g(c)n(haracter)e(string)h(iden)n(tifying)i(the)f
-(reference)f(p)r(oin)n(t)i(for)e(the)i(text)g(b)r(eing)427
-1874 y(dra)n(wn.)35 b(The)24 b(\014rst)f(c)n(haracter)e(in)j(this)g
-(string)f(iden)n(ti\014es)h(the)g(reference)f(p)r(osition)g(in)h(the)g
-Ft(")p Fj(up)p Ft(")f Fj(direction)427 1974 y(and)i(ma)n(y)g(b)r(e)h
-Ft(")p Fj(B)p Ft(")e Fj(\(baseline\),)i Ft(")p Fj(C)p
-Ft(")e Fj(\(cen)n(tre\),)i Ft(")p Fj(T)p Ft(")f Fj(\(top\))h(or)e
-Ft(")p Fj(M)p Ft(")h Fj(\(b)r(ottom\).)37 b(The)25 b(second)g(c)n
-(haracter)427 2073 y(iden)n(ti\014es)e(the)h(side-to-side)e(reference)g
-(p)r(osition)h(and)g(ma)n(y)f(b)r(e)i Ft(")p Fj(L)p Ft(")e
-Fj(\(left\),)j Ft(")p Fj(C)p Ft(")d Fj(\(cen)n(tre\))h(or)g
-Ft(")p Fj(R)p Ft(")f Fj(\(righ)n(t)427 2173 y(\).)38
-b(The)27 b(string)g(is)h(case-insensitiv)n(e,)e(and)h(only)g(the)h
-(\014rst)g(t)n(w)n(o)e(c)n(haracters)g(are)g(signi\014can)n(t.)427
-2294 y(F)-7 b(or)35 b(example,)i(a)d(v)-5 b(alue)35 b(of)g
-Ft(")p Fj(BL)p Ft(")g Fj(means)f(that)i(the)f(left)h(end)g(of)f(the)g
-(baseline)g(of)g(the)h(original)d(\(un-)427 2393 y(rotated\))27
-b(text)h(is)g(to)f(b)r(e)h(dra)n(wn)f(at)g(the)h(p)r(osition)g(giv)n
-(en)f(b)n(y)g Ft(")p Fj(p)r(os)p Ft(")p Fj(.)0 2574 y
-Fd(Notes:)340 2876 y Fi(\017)45 b Fj(The)34 b(Plot3D)e(class)g(curren)n
-(tly)h(do)r(es)g(not)g(in)n(terpret)g(graphical)e(escap)r(e)i
-(sequences)f(con)n(tained)h(within)427 2975 y(text)28
-b(displa)n(y)n(ed)f(using)g(this)h(metho)r(d.)340 3118
-y Fi(\017)45 b Fj(T)-7 b(ext)27 b(is)f(not)g(dra)n(wn)f(at)h(p)r
-(ositions)g(whic)n(h)g(ha)n(v)n(e)f(an)n(y)g(co)r(ordinate)h(equal)f
-(to)h(the)h(v)-5 b(alue)26 b(AST)p Ft(__)p Fj(BAD)g(\(or)427
-3217 y(where)k(the)g(transformation)f(in)n(to)h(graphical)f(co)r
-(ordinates)f(yields)i(co)r(ordinates)f(con)n(taining)g(the)i(v)-5
-b(alue)427 3317 y(AST)p Ft(__)p Fj(BAD\).)340 3459 y
-Fi(\017)45 b Fj(If)28 b(the)g(plotting)g(p)r(osition)f(is)h(clipp)r(ed)
-g(\(see)g(astClip\),)f(then)h(no)g(text)g(is)f(dra)n(wn.)340
-3601 y Fi(\017)45 b Fj(An)40 b(error)d(results)i(if)g(the)h(base)e(F)-7
-b(rame)39 b(of)g(the)g(Plot)g(is)g(not)g(2-dimensional)f(or)g(\(for)h
-(a)g(Plot3D\))f(3-)427 3701 y(dimensional.)340 3843 y
-Fi(\017)45 b Fj(An)30 b(error)d(also)g(results)i(if)g(the)g
-(transformation)f(b)r(et)n(w)n(een)h(the)g(curren)n(t)f(and)h(base)f(F)
--7 b(rames)28 b(of)h(the)g(Plot)427 3943 y(is)f(not)f(de\014ned)h
-(\(i.e.)38 b(the)28 b(Plot's)e(T)-7 b(ranIn)n(v)n(erse)26
-b(attribute)h(is)h(zero\).)p 0 4161 3780 12 v 0 4293
-a Fz(astThread)196 b Fe(Determine)38 b(the)g(thread)g(that)g(o)m(wns)g
-(an)g(Ob)7 b(ject)195 b Fz(astThread)0 4505 y Fd(Description:)44
-b Fj(Returns)c(an)g(in)n(teger)f(that)h(indicates)g(whether)g(the)g
-(supplied)h(Ob)5 b(ject)40 b(\(or)f(Ob)5 b(ject)40 b(p)r(oin)n(ter\))g
-(is)227 4605 y(curren)n(tly)27 b(unlo)r(c)n(k)n(ed,)g(or)g(is)g(curren)
-n(tly)g(lo)r(c)n(k)n(ed)f(b)n(y)i(the)g(running)f(thread,)g(or)g
-(another)f(thread.)0 4773 y Fd(Synopsis:)121 b Ft(int)42
-b(astThread\()e(AstObject)g Fi(\003)p Ft(this,)h(int)h(ptr)g(\))0
-4941 y Fd(P)m(arameters:)259 5097 y(this)427 5196 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Ob)5 b(ject)27 b(to)h(b)r(e)g(c)n(hec)n(k)n(ed.)259
-5338 y Fd(ptr)427 5438 y Fj(If)k(non-zero,)f(returns)f(information)h
-(ab)r(out)h(the)f(supplied)h(Ob)5 b(ject)31 b(p)r(oin)n(ter,)h(rather)f
-(than)g(the)h(Ob)5 b(ject)427 5538 y(structure)27 b(itself.)38
-b(See)27 b Ft(")p Fj(Ob)5 b(ject)27 b(P)n(oin)n(ters)f(and)h
-(Structures)p Ft(")g Fj(b)r(elo)n(w.)0 5718 y Fd(Returned)32
-b(V)-8 b(alue:)p eop end
-%%Page: 363 373
-TeXDict begin 363 372 bop 3643 52 a FF(363)259 351 y
-Fd(astThread\(\))427 451 y Fj(A)33 b(v)-5 b(alue)32 b(of)g(AST)p
-Ft(__)p Fj(UNLOCKED)g(is)g(returned)g(if)g(the)h(Ob)5
-b(ject)32 b(\(or)g(p)r(oin)n(ter\))g(is)g(curren)n(tly)f(unlo)r(c)n(k)n
-(ed)427 551 y(\(i.e.)37 b(has)26 b(b)r(een)g(unlo)r(c)n(k)n(ed)f(using)
-h(astUnlo)r(c)n(k)g(but)g(has)g(not)g(y)n(et)g(b)r(een)g(lo)r(c)n(k)n
-(ed)f(using)h(astLo)r(c)n(k\).)35 b(A)27 b(v)-5 b(alue)427
-650 y(of)26 b(AST)p Ft(__)p Fj(R)n(UNNING)g(is)g(returned)f(if)h(the)g
-(Ob)5 b(ject)25 b(\(or)g(p)r(oin)n(ter\))h(is)f(curren)n(tly)g(lo)r(c)n
-(k)n(ed)g(b)n(y)g(the)h(running)427 750 y(thread.)44
-b(A)30 b(v)-5 b(alue)30 b(of)g(AST)p Ft(__)p Fj(OTHER)f(is)h(returned)g
-(if)g(the)g(Ob)5 b(ject)30 b(\(or)g(p)r(oin)n(ter\))g(is)g(curren)n
-(tly)f(lo)r(c)n(k)n(ed)427 849 y(b)n(y)f(the)g(another)e(thread.)0
-1002 y Fd(Notes:)340 1275 y Fi(\017)45 b Fj(This)29 b(function)h
-(attempts)g(to)f(execute)g(ev)n(en)g(if)h(the)f(global)f(error)g
-(status)h(is)g(set,)h(but)f(no)g(further)h(error)427
-1375 y(rep)r(ort)d(will)h(b)r(e)g(made)f(if)h(it)g(subsequen)n(tly)g
-(fails)f(under)g(these)h(circumstances.)340 1498 y Fi(\017)45
-b Fj(This)28 b(function)g(is)f(only)h(a)n(v)-5 b(ailable)26
-b(in)i(the)g(C)f(in)n(terface.)340 1622 y Fi(\017)45
-b Fj(This)35 b(function)h(alw)n(a)n(ys)d(returns)h(AST)p
-Ft(__)p Fj(R)n(UNNING)i(if)g(the)f(AST)h(library)d(has)i(b)r(een)g
-(built)h(without)427 1722 y(POSIX)26 b(thread)h(supp)r(ort)f(\(i.e.)37
-b(the)27 b Ft(")p Fj(-with-pthreads)p Ft(")e Fj(option)h(w)n(as)g(not)g
-(sp)r(eci\014ed)h(when)g(running)f(the)427 1821 y Ft(")p
-Fj(con\014gure)p Ft(")g Fj(script\).)-2 1974 y Fd(Ob)5
-b(ject)33 b(P)m(oin)m(ters)f(and)g(Structures)n(:)227
-2120 y Fj(A)n(t)c(an)n(y)f(one)g(time,)h(an)f(AST)h(Ob)5
-b(ject)28 b(can)f(ha)n(v)n(e)f(sev)n(eral)g(distinct)i(p)r(oin)n(ters,)
-f(an)n(y)g(one)g(of)g(whic)n(h)h(can)f(b)r(e)h(used)227
-2220 y(to)34 b(access)g(the)g(Ob)5 b(ject)34 b(structure.)57
-b(F)-7 b(or)33 b(instance,)j(the)f(astClone)e(function)i(will)g(pro)r
-(duce)f(a)g(new)g(distinct)227 2319 y(p)r(oin)n(ter)25
-b(for)f(a)h(giv)n(en)f(Ob)5 b(ject.)36 b(In)25 b(fact,)h(an)f(AST)g
-Ft(")p Fj(p)r(oin)n(ter)p Ft(")f Fj(is)h(not)g(a)g(real)f(p)r(oin)n
-(ter)g(at)h(all)g(-)g(it)g(is)g(an)g(iden)n(ti\014er)227
-2419 y(for)30 b(a)g Ft(")p Fj(handle)p Ft(")f Fj(structure,)h(enco)r
-(ded)g(to)g(mak)n(e)g(it)g(lo)r(ok)g(lik)n(e)f(a)h(p)r(oin)n(ter.)44
-b(Eac)n(h)29 b(handle)h(con)n(tains)f(\(amongst)227 2519
-y(othere)d(things\))h(a)f Ft(")p Fj(real)p Ft(")e Fj(p)r(oin)n(ter)i
-(to)g(the)h(Ob)5 b(ject)26 b(structure.)36 b(This)27
-b(allo)n(ws)e(more)g(than)i(one)f(handle)g(to)g(refer)227
-2618 y(to)j(the)f(same)g(Ob)5 b(ject)28 b(structure.)39
-b(So)28 b(when)h(y)n(ou)e(call)h(astClone)g(\(for)g(instance\))g(y)n
-(ou)g(get)g(bac)n(k)g(an)g(iden)n(ti\014er)227 2718 y(for)f(a)h(new)f
-(handle)h(that)g(refers)e(to)i(the)g(same)f(Ob)5 b(ject)27
-b(as)g(the)h(supplied)g(handle.)227 2838 y(In)35 b(order)f(to)h(use)f
-(an)h(Ob)5 b(ject)35 b(for)f(an)n(ything)h(useful,)i(it)e(m)n(ust)g(b)r
-(e)g(lo)r(c)n(k)n(ed)f(for)h(use)g(b)n(y)f(the)h(running)g(thread)227
-2937 y(\(either)j(implicitly)g(at)f(creation)g(or)f(explicitly)i(using)
-f(astLo)r(c)n(k\).)66 b(The)37 b(iden)n(tit)n(y)h(of)f(the)h(thread)f
-(is)g(stored)227 3037 y(in)c(b)r(oth)f(the)h(Ob)5 b(ject)32
-b(structure,)h(and)f(in)g(the)h(handle)f(that)g(w)n(as)g(passed)f(to)h
-(astLo)r(c)n(k)f(\(or)h(returned)f(b)n(y)h(the)227 3137
-y(constructor)26 b(function\).)38 b(Th)n(us)27 b(it)h(is)f(p)r(ossible)
-h(for)f(a)g(thread)g(to)g(ha)n(v)n(e)f(activ)n(e)h(p)r(oin)n(ters)g
-(for)g(Ob)5 b(jects)27 b(that)h(are)227 3236 y(curren)n(tly)g(lo)r(c)n
-(k)n(ed)g(b)n(y)g(another)g(thread.)40 b(In)29 b(general,)f(if)h(suc)n
-(h)g(a)f(p)r(oin)n(ter)g(is)h(passed)f(to)h(an)f(AST)i(function)f(an)
-227 3336 y(error)g(will)i(b)r(e)g(rep)r(orted)f(indicating)g(that)h
-(the)g(Ob)5 b(ject)30 b(is)h(curren)n(tly)f(lo)r(c)n(k)n(ed)f(b)n(y)i
-(another)e(thread.)46 b(The)30 b(t)n(w)n(o)227 3435 y(exceptions)e(to)f
-(this)i(is)f(that)g(astAnn)n(ul)g(can)f(b)r(e)i(used)f(to)f(ann)n(ull)h
-(suc)n(h)g(a)f(p)r(oin)n(ter,)h(and)g(this)g(function)h(can)e(b)r(e)227
-3535 y(used)h(to)f(return)g(information)g(ab)r(out)h(the)g(p)r(oin)n
-(ter.)227 3655 y(The)f(other)g(practical)f(consequence)g(of)h(this)g
-(is)g(that)g(when)g(astEnd)g(is)f(called,)h(all)g(activ)n(e)f(p)r(oin)n
-(ters)h(curren)n(tly)227 3755 y(o)n(wned)32 b(b)n(y)g(the)h(running)f
-(thread)h(\(at)f(the)h(curren)n(t)f(con)n(text)g(lev)n(el\))g(are)g
-(ann)n(ulled.)51 b(This)33 b(includes)f(p)r(oin)n(ters)227
-3854 y(for)27 b(Ob)5 b(jects)28 b(that)f(are)g(curren)n(tly)g(lo)r(c)n
-(k)n(ed)f(b)n(y)i(other)f(threads.)227 3974 y(If)35 b(the)g
-Ft(")p Fj(ptr)p Ft(")f Fj(parameter)f(is)i(zero,)g(then)g(the)g
-(returned)g(v)-5 b(alue)34 b(describ)r(es)g(the)h(Ob)5
-b(ject)35 b(structure)f(itself.)58 b(If)227 4074 y Ft(")p
-Fj(ptr)p Ft(")36 b Fj(is)h(non-zero,)h(then)g(the)f(returned)f(v)-5
-b(alue)37 b(describ)r(es)g(the)g(supplied)g(Ob)5 b(ject)37
-b(p)r(oin)n(ter)g(\(i.e.)65 b(handle\),)227 4173 y(rather)27
-b(than)h(the)g(Ob)5 b(ject)27 b(structure.)p 0 4354 3780
-12 v 0 4486 a Fz(astTimeAdd)180 b Fe(Add)39 b(a)f(time)g(co)s(ordinate)
-e(con)m(v)m(ersion)h(to)h(a)1641 4585 y(TimeMap)3053
-4486 y Fz(astTimeAdd)0 4756 y Fd(Description:)44 b Fj(This)31
-b(function)h(adds)f(one)g(of)g(the)g(standard)f(time)i(co)r(ordinate)e
-(system)h(con)n(v)n(ersions)e(listed)i(b)r(elo)n(w)227
-4855 y(to)d(an)f(existing)g(TimeMap.)227 4975 y(When)i(a)f(TimeMap)g
-(is)h(\014rst)f(created)f(\(using)i(astTimeMap\),)f(it)h(simply)f(p)r
-(erforms)g(a)g(unit)h(\(n)n(ull\))g(Mapping.)227 5075
-y(By)c(using)f(astTimeAdd)h(\(rep)r(eatedly)g(if)g(necessary\),)f(one)h
-(or)f(more)g(co)r(ordinate)g(con)n(v)n(ersion)e(steps)j(ma)n(y)f(then)
-227 5175 y(b)r(e)c(added,)i(whic)n(h)d(the)i(TimeMap)e(will)h(p)r
-(erform)g(in)g(sequence.)33 b(This)20 b(allo)n(ws)e(m)n(ulti-step)i
-(con)n(v)n(ersions)e(b)r(et)n(w)n(een)227 5274 y(a)31
-b(v)-5 b(ariet)n(y)30 b(of)g(time)i(co)r(ordinate)e(systems)g(to)h(b)r
-(e)g(assem)n(bled)f(out)h(of)f(the)i(building)f(blo)r(c)n(ks)f(pro)n
-(vided)g(b)n(y)g(this)227 5374 y(class.)227 5494 y(Normally)-7
-b(,)27 b(if)g(a)g(TimeMap's)g(In)n(v)n(ert)f(attribute)i(is)f(zero)f
-(\(the)i(default\),)g(then)f(its)h(forw)n(ard)d(transformation)h(is)227
-5593 y(p)r(erformed)i(b)n(y)g(carrying)e(out)i(eac)n(h)g(of)g(the)g
-(individual)h(co)r(ordinate)d(con)n(v)n(ersions)g(sp)r(eci\014ed)i(b)n
-(y)g(astTimeAdd)227 5693 y(in)g(the)g(order)e(giv)n(en)h(\(i.e.)37
-b(with)29 b(the)e(most)h(recen)n(tly)f(added)g(con)n(v)n(ersion)e
-(applied)j(last\).)p eop end
-%%Page: 364 374
-TeXDict begin 364 373 bop 0 52 a FF(364)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)227 351 y Fj(This)21
-b(order)f(is)h(rev)n(ersed)e(if)i(the)h(TimeMap's)e(In)n(v)n(ert)g
-(attribute)h(is)g(non-zero)f(\(or)g(if)h(the)h(in)n(v)n(erse)d
-(transformation)227 451 y(is)27 b(requested)f(b)n(y)h(an)n(y)f(other)g
-(means\))h(and)g(eac)n(h)f(individual)h(co)r(ordinate)f(con)n(v)n
-(ersion)e(is)j(also)f(replaced)g(b)n(y)g(its)227 551
-y(o)n(wn)20 b(in)n(v)n(erse.)32 b(This)20 b(pro)r(cess)f(in)n(v)n(erts)
-g(the)h(o)n(v)n(erall)e(e\013ect)i(of)g(the)h(TimeMap.)34
-b(In)20 b(this)g(case,)h(the)f(\014rst)g(con)n(v)n(ersion)227
-650 y(to)28 b(b)r(e)g(applied)f(w)n(ould)g(b)r(e)h(the)g(in)n(v)n(erse)
-f(of)g(the)h(one)f(most)h(recen)n(tly)f(added.)0 795
-y Fd(Synopsis:)121 b Ft(void)42 b(astTimeAdd\()d(AstTimeMap)g
-Fi(\003)p Ft(this,)i(const)h(char)g Fi(\003)p Ft(cvt,)f(const)h(double)
-f(args[])g(\))0 941 y Fd(P)m(arameters:)259 1073 y(this)427
-1173 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(TimeMap.)259
-1302 y Fd(cvt)427 1401 y Fj(P)n(oin)n(ter)19 b(to)h(a)g(n)n
-(ull-terminated)f(string)h(whic)n(h)g(iden)n(ti\014es)g(the)h(time)f
-(co)r(ordinate)f(con)n(v)n(ersion)f(to)i(b)r(e)h(added)427
-1501 y(to)28 b(the)g(TimeMap.)37 b(See)27 b(the)h Ft(")p
-Fj(Av)-5 b(ailable)27 b(Con)n(v)n(ersions)p Ft(")e Fj(section)i(for)g
-(details)g(of)h(those)f(a)n(v)-5 b(ailable.)259 1630
-y Fd(args)427 1729 y Fj(An)38 b(arra)n(y)d(con)n(taining)h(argumen)n(t)
-g(v)-5 b(alues)36 b(for)h(the)g(time)h(co)r(ordinate)e(con)n(v)n
-(ersion.)63 b(The)37 b(n)n(um)n(b)r(er)g(of)427 1829
-y(argumen)n(ts)22 b(required,)h(and)g(hence)g(the)g(n)n(um)n(b)r(er)g
-(of)g(arra)n(y)e(elemen)n(ts)h(used,)i(dep)r(ends)g(on)f(the)g(con)n(v)
-n(ersion)427 1928 y(sp)r(eci\014ed)f(\(see)f(the)h Ft(")p
-Fj(Av)-5 b(ailable)21 b(Con)n(v)n(ersions)p Ft(")d Fj(section\).)35
-b(This)21 b(arra)n(y)e(is)j(ignored)e(and)h(a)g(NULL)h(p)r(oin)n(ter)
-427 2028 y(ma)n(y)27 b(b)r(e)h(supplied)g(if)g(no)g(argumen)n(ts)e(are)
-g(needed.)0 2186 y Fd(Notes:)340 2464 y Fi(\017)45 b
-Fj(When)37 b(assem)n(bling)e(a)g(m)n(ulti-stage)h(con)n(v)n(ersion,)g
-(it)g(can)g(sometimes)g(b)r(e)g(di\016cult)h(to)f(determine)g(the)427
-2564 y(most)g(economical)f(con)n(v)n(ersion)e(path.)62
-b(A)36 b(solution)g(to)f(this)h(is)g(to)g(include)g(all)g(the)g(steps)g
-(whic)n(h)g(are)427 2664 y(\(logically\))e(necessary)-7
-b(,)35 b(but)g(then)h(to)e(use)h(astSimplify)g(to)g(simplify)g(the)g
-(resulting)f(TimeMap.)59 b(The)427 2763 y(simpli\014cation)28
-b(pro)r(cess)e(will)i(eliminate)g(an)n(y)f(steps)g(whic)n(h)h(turn)f
-(out)h(not)f(to)h(b)r(e)g(needed.)340 2892 y Fi(\017)45
-b Fj(This)27 b(function)h(do)r(es)f(not)g(c)n(hec)n(k)f(to)h(ensure)g
-(that)g(the)h(sequence)e(of)h(co)r(ordinate)f(con)n(v)n(ersions)f
-(added)i(to)427 2992 y(a)g(TimeMap)h(is)f(ph)n(ysically)g(meaningful.)
--2 3149 y Fd(Av)-5 b(ailable)32 b(Con)m(v)m(ersions)n(:)227
-3295 y Fj(The)39 b(follo)n(wing)f(strings)g(\(whic)n(h)h(are)e
-(case-insensitiv)n(e\))h(ma)n(y)g(b)r(e)h(supplied)g(via)f(the)h
-Ft(")p Fj(cvt)p Ft(")f Fj(parameter)g(to)227 3395 y(indicate)29
-b(whic)n(h)g(time)g(co)r(ordinate)f(con)n(v)n(ersion)e(is)j(to)g(b)r(e)
-g(added)f(to)h(the)g(TimeMap.)41 b(Where)28 b(argumen)n(ts)g(are)227
-3495 y(needed)35 b(b)n(y)f(the)h(con)n(v)n(ersion,)f(they)g(are)g
-(listed)h(in)f(paren)n(theses.)56 b(V)-7 b(alues)34 b(for)g(these)h
-(argumen)n(ts)e(should)h(b)r(e)227 3594 y(giv)n(en,)25
-b(via)f(the)g Ft(")p Fj(args)p Ft(")f Fj(arra)n(y)-7
-b(,)22 b(in)j(the)g(order)e(indicated.)36 b(Units)25
-b(and)g(argumen)n(t)e(names)h(are)g(describ)r(ed)g(at)g(the)227
-3694 y(end)k(of)g(the)g(list)f(of)h(con)n(v)n(ersions,)d(and)j
-Ft(")p Fj(MJD)p Ft(")f Fj(means)g(Mo)r(di\014ed)h(Julian)f(Date.)340
-3949 y Fi(\017)45 b Ft(")p Fj(MJDTOMJD)p Ft(")27 b Fj
-(\(MJDOFF1,MJDOFF2\):)37 b(Con)n(v)n(ert)26 b(MJD)i(from)f(one)g
-(o\013set)h(to)f(another.)340 4078 y Fi(\017)45 b Ft(")p
-Fj(MJDTOJD)p Ft(")27 b Fj(\(MJDOFF,JDOFF\):)h(Con)n(v)n(ert)f(MJD)h(to)
-f(Julian)g(Date.)340 4206 y Fi(\017)45 b Ft(")p Fj(JDTOMJD)p
-Ft(")27 b Fj(\(JDOFF,MJDOFF\):)h(Con)n(v)n(ert)f(Julian)g(Date)h(to)f
-(MJD.)340 4335 y Fi(\017)45 b Ft(")p Fj(MJDTOBEP)p Ft(")26
-b Fj(\(MJDOFF,BEPOFF\):)h(Con)n(v)n(ert)f(MJD)i(to)f(Besselian)g(ep)r
-(o)r(c)n(h.)340 4464 y Fi(\017)45 b Ft(")p Fj(BEPTOMJD)p
-Ft(")26 b Fj(\(BEPOFF,MJDOFF\):)h(Con)n(v)n(ert)f(Besselian)h(ep)r(o)r
-(c)n(h)g(to)h(MJD.)340 4593 y Fi(\017)45 b Ft(")p Fj(MJDTOJEP)p
-Ft(")26 b Fj(\(MJDOFF,JEPOFF\):)h(Con)n(v)n(ert)f(MJD)i(to)f(Julian)g
-(ep)r(o)r(c)n(h.)340 4721 y Fi(\017)45 b Ft(")p Fj(JEPTOMJD)p
-Ft(")26 b Fj(\(JEPOFF,MJDOFF\):)h(Con)n(v)n(ert)f(Julian)h(ep)r(o)r(c)n
-(h)h(to)f(MJD.)340 4850 y Fi(\017)45 b Ft(")p Fj(T)-7
-b(AITOUTC)p Ft(")27 b Fj(\(MJDOFF\):)i(Con)n(v)n(ert)d(a)h(T)-7
-b(AI)28 b(MJD)g(to)f(a)g(UTC)h(MJD.)340 4979 y Fi(\017)45
-b Ft(")p Fj(UTCTOT)-7 b(AI)p Ft(")27 b Fj(\(MJDOFF\):)i(Con)n(v)n(ert)d
-(a)h(UTC)h(MJD)g(to)f(a)g(T)-7 b(AI)28 b(MJD.)340 5108
-y Fi(\017)45 b Ft(")p Fj(T)-7 b(AITOTT)p Ft(")27 b Fj(\(MJDOFF\):)h
-(Con)n(v)n(ert)e(a)i(T)-7 b(AI)28 b(MJD)g(to)f(a)g(TT)h(MJD.)340
-5236 y Fi(\017)45 b Ft(")p Fj(TTTOT)-7 b(AI)p Ft(")27
-b Fj(\(MJDOFF\):)h(Con)n(v)n(ert)e(a)i(TT)f(MJD)h(to)g(a)f(T)-7
-b(AI)28 b(MJD.)340 5365 y Fi(\017)45 b Ft(")p Fj(TTTOTDB)p
-Ft(")33 b Fj(\(MJDOFF,)i(OBSLON,)e(OBSLA)-7 b(T,)34 b(OBSAL)-7
-b(T\):)34 b(Con)n(v)n(ert)f(a)g(TT)i(MJD)f(to)g(a)f(TDB)427
-5465 y(MJD.)340 5593 y Fi(\017)45 b Ft(")p Fj(TDBTOTT)p
-Ft(")33 b Fj(\(MJDOFF,)i(OBSLON,)e(OBSLA)-7 b(T,)34 b(OBSAL)-7
-b(T\):)34 b(Con)n(v)n(ert)f(a)g(TDB)i(MJD)f(to)g(a)g(TT)427
-5693 y(MJD.)p eop end
-%%Page: 365 375
-TeXDict begin 365 374 bop 3643 52 a FF(365)340 351 y
-Fi(\017)45 b Ft(")p Fj(TTTOTCG)p Ft(")27 b Fj(\(MJDOFF\):)h(Con)n(v)n
-(ert)e(a)h(TT)h(MJD)g(to)f(a)h(TCG)f(MJD.)340 502 y Fi(\017)45
-b Ft(")p Fj(TCGTOTT)p Ft(")27 b Fj(\(MJDOFF\):)h(Con)n(v)n(ert)e(a)h
-(TCG)h(MJD)g(to)g(a)f(TT)g(MJD.)340 653 y Fi(\017)45
-b Ft(")p Fj(TDBTOTCB)p Ft(")27 b Fj(\(MJDOFF\):)h(Con)n(v)n(ert)e(a)h
-(TDB)h(MJD)g(to)g(a)f(TCB)g(MJD.)340 805 y Fi(\017)45
-b Ft(")p Fj(TCBTOTDB)p Ft(")27 b Fj(\(MJDOFF\):)h(Con)n(v)n(ert)e(a)h
-(TCB)h(MJD)g(to)f(a)g(TDB)h(MJD.)340 956 y Fi(\017)45
-b Ft(")p Fj(UTTOGMST)p Ft(")27 b Fj(\(MJDOFF\):)i(Con)n(v)n(ert)d(a)h
-(UT)h(MJD)g(to)f(a)g(GMST)h(MJD.)340 1107 y Fi(\017)45
-b Ft(")p Fj(GMSTTOUT)p Ft(")27 b Fj(\(MJDOFF\):)i(Con)n(v)n(ert)d(a)h
-(GMST)h(MJD)g(to)f(a)h(UT)f(MJD.)340 1258 y Fi(\017)45
-b Ft(")p Fj(GMSTTOLMST)p Ft(")37 b Fj(\(MJDOFF,)h(OBSLON,)f(OBSLA)-7
-b(T\):)38 b(Con)n(v)n(ert)e(a)h(GMST)h(MJD)g(to)f(a)g(LMST)427
-1358 y(MJD.)340 1509 y Fi(\017)45 b Ft(")p Fj(LMSTTOGMST)p
-Ft(")37 b Fj(\(MJDOFF,)h(OBSLON,)f(OBSLA)-7 b(T\):)38
-b(Con)n(v)n(ert)e(a)h(LMST)h(MJD)g(to)f(a)g(GMST)427
-1608 y(MJD.)340 1759 y Fi(\017)45 b Ft(")p Fj(LASTTOLMST)p
-Ft(")40 b Fj(\(MJDOFF,)g(OBSLON,)g(OBSLA)-7 b(T\):)41
-b(Con)n(v)n(ert)d(a)i(GMST)h(MJD)f(to)h(a)e(LMST)427
-1859 y(MJD.)340 2010 y Fi(\017)45 b Ft(")p Fj(LMSTTOLAST)p
-Ft(")40 b Fj(\(MJDOFF,)g(OBSLON,)g(OBSLA)-7 b(T\):)41
-b(Con)n(v)n(ert)d(a)i(LMST)h(MJD)f(to)g(a)g(GMST)427
-2110 y(MJD.)340 2261 y Fi(\017)45 b Ft(")p Fj(UTTOUTC)p
-Ft(")27 b Fj(\(DUT1\):)38 b(Con)n(v)n(ert)26 b(a)h(UT1)h(MJD)f(to)h(a)f
-(UTC)h(MJD.)340 2412 y Fi(\017)45 b Ft(")p Fj(UTCTOUT)p
-Ft(")27 b Fj(\(DUT1\):)38 b(Con)n(v)n(ert)26 b(a)h(UTC)h(MJD)g(to)f(a)g
-(UT1)h(MJD.)340 2563 y Fi(\017)45 b Ft(")p Fj(L)-7 b(TTOUTC)p
-Ft(")27 b Fj(\(L)-7 b(TOFF\):)28 b(Con)n(v)n(ert)e(a)h(Lo)r(cal)g(Time)
-h(MJD)g(to)f(a)g(UTC)h(MJD.)340 2714 y Fi(\017)45 b Ft(")p
-Fj(UTCTOL)-7 b(T)p Ft(")27 b Fj(\(L)-7 b(TOFF\):)28 b(Con)n(v)n(ert)e
-(a)h(UTC)h(MJD)g(to)g(a)f(Lo)r(cal)g(Time)g(MJD.)227
-2913 y(The)h(units)g(for)f(the)h(v)-5 b(alues)27 b(pro)r(cessed)g(b)n
-(y)g(the)h(ab)r(o)n(v)n(e)e(con)n(v)n(ersions)f(are)i(as)g(follo)n(ws:)
-340 3228 y Fi(\017)45 b Fj(Julian)27 b(ep)r(o)r(c)n(hs)h(and)f
-(o\013sets:)37 b(Julian)27 b(y)n(ears)340 3380 y Fi(\017)45
-b Fj(Besselian)27 b(ep)r(o)r(c)n(hs)g(and)h(o\013sets:)36
-b(T)-7 b(ropical)27 b(y)n(ears)340 3531 y Fi(\017)45
-b Fj(Mo)r(di\014ed)28 b(Julian)f(Dates)h(and)f(o\013sets:)37
-b(da)n(ys)340 3682 y Fi(\017)45 b Fj(Julian)27 b(Dates)h(and)f
-(o\013sets:)37 b(da)n(ys)227 3880 y(The)20 b(argumen)n(ts)f(used)h(in)g
-(the)g(ab)r(o)n(v)n(e)f(con)n(v)n(ersions)e(are)i(the)h(zero-p)r(oin)n
-(ts)e(used)i(b)n(y)g(the)g(astT)-7 b(ransform)18 b(function.)227
-3980 y(The)28 b(axis)f(v)-5 b(alues)27 b(supplied)h(and)f(returned)g(b)
-n(y)h(astT)-7 b(ransform)26 b(are)g(o\013sets)h(a)n(w)n(a)n(y)f(from)h
-(these)h(zero-p)r(oin)n(ts:)340 4296 y Fi(\017)45 b Fj(MJDOFF:)28
-b(The)g(zero-p)r(oin)n(t)e(b)r(eing)i(used)f(with)h(MJD)g(v)-5
-b(alues.)340 4447 y Fi(\017)45 b Fj(JDOFF:)28 b(The)g(zero-p)r(oin)n(t)
-e(b)r(eing)i(used)f(with)h(Julian)g(Date)f(v)-5 b(alues.)340
-4598 y Fi(\017)45 b Fj(BEPOFF:)27 b(The)g(zero-p)r(oin)n(t)g(b)r(eing)g
-(used)h(with)g(Besselian)f(ep)r(o)r(c)n(h)g(v)-5 b(alues.)340
-4749 y Fi(\017)45 b Fj(JEPOFF:)27 b(The)g(zero-p)r(oin)n(t)g(b)r(eing)g
-(used)h(with)g(Julian)f(ep)r(o)r(c)n(h)h(v)-5 b(alues.)340
-4900 y Fi(\017)45 b Fj(OBSLON:)27 b(Observ)n(er)f(longitude)h(in)h
-(radians)e(\(+v)n(e)h(w)n(est)n(w)n(ards\).)340 5051
-y Fi(\017)45 b Fj(OBSLA)-7 b(T:)28 b(Observ)n(er)d(geo)r(detic)i
-(latitude)h(\(IA)n(U)h(1975\))d(in)h(radians)g(\(+v)n(e)g(north)n(w)n
-(ards\).)340 5202 y Fi(\017)45 b Fj(OBSAL)-7 b(T:)28
-b(Observ)n(er)d(geo)r(detic)i(altitude)h(\(IA)n(U)h(1975\))d(in)h
-(metres.)340 5353 y Fi(\017)45 b Fj(DUT1:)37 b(The)28
-b(UT1-UTC)f(v)-5 b(alue)28 b(to)f(use.)340 5505 y Fi(\017)45
-b Fj(L)-7 b(TOFF:)30 b(The)h(o\013set)f(b)r(et)n(w)n(een)g(Lo)r(cal)f
-(Time)h(and)g(UTC)g(\(in)h(hours,)f(p)r(ositiv)n(e)g(for)f(time)i
-(zones)e(east)h(of)427 5604 y(Green)n(wic)n(h\).)p eop
-end
-%%Page: 366 376
-TeXDict begin 366 375 bop 0 52 a FF(366)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astTimeF)-11 b(rame)1359 482 y Fe(Create)37
-b(a)i(TimeF)-10 b(rame)2937 483 y Fz(astTimeF)f(rame)0
-659 y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(TimeF)-7 b(rame)28 b(and)f(optionally)g(initialises)g(its)h
-(attributes.)227 788 y(A)h(TimeF)-7 b(rame)28 b(is)g(a)g(sp)r
-(ecialised)f(form)h(of)g(one-dimensional)f(F)-7 b(rame)28
-b(whic)n(h)g(represen)n(ts)f(v)-5 b(arious)27 b(co)r(ordinate)227
-888 y(systems)g(used)h(to)f(describ)r(e)h(p)r(ositions)f(in)h(time.)227
-1018 y(A)23 b(TimeF)-7 b(rame)21 b(represen)n(ts)g(a)g(momen)n(t)h(in)g
-(time)h(as)e(either)h(an)f(Mo)r(di\014ed)i(Julian)e(Date)h(\(MJD\),)h
-(a)f(Julian)f(Date)227 1117 y(\(JD\),)f(a)f(Besselian)e(ep)r(o)r(c)n(h)
-i(or)f(a)h(Julian)g(ep)r(o)r(c)n(h,)h(as)f(determined)g(b)n(y)f(the)i
-(System)f(attribute.)34 b(Optionally)-7 b(,)20 b(a)f(zero)227
-1217 y(p)r(oin)n(t)30 b(can)g(b)r(e)g(sp)r(eci\014ed)h(\(using)e
-(attribute)i(TimeOrigin\))e(whic)n(h)h(results)f(in)h(the)h(TimeF)-7
-b(rame)29 b(represen)n(ting)227 1317 y(time)f(o\013sets)g(from)f(the)h
-(sp)r(eci\014ed)g(zero)e(p)r(oin)n(t.)227 1446 y(Ev)n(en)g(though)g(JD)
-g(and)g(MJD)g(are)g(de\014ned)g(as)g(b)r(eing)g(in)g(units)h(of)f(da)n
-(ys,)g(the)g(TimeF)-7 b(rame)26 b(class)f(allo)n(ws)g(other)227
-1546 y(units)31 b(to)g(b)r(e)g(used)f(\(via)h(the)g(Unit)g(attribute\))
-g(on)f(the)h(basis)f(of)h(simple)g(scalings)e(\(60)h(seconds)g(=)g(1)g
-(min)n(ute,)227 1645 y(60)i(min)n(utes)h(=)f(1)h(hour,)g(24)f(hours)g
-(=)g(1)g(da)n(y)-7 b(,)33 b(365.25)e(da)n(ys)h(=)g(1)g(y)n(ear\).)51
-b(Lik)n(ewise,)33 b(Julian)g(ep)r(o)r(c)n(hs)f(can)g(b)r(e)227
-1745 y(describ)r(ed)f(in)f(units)h(other)f(than)h(the)g(usual)f(y)n
-(ears.)44 b(Besselian)29 b(ep)r(o)r(c)n(h)i(are)e(alw)n(a)n(ys)g
-(represen)n(ted)g(in)i(units)g(of)227 1845 y(\(tropical\))c(y)n(ears.)
-227 1974 y(The)h(TimeScale)f(attribute)h(allo)n(ws)f(the)h(time)g
-(scale)f(to)g(b)r(e)h(sp)r(eci\014ed)g(\(that)h(is,)e(the)h(ph)n
-(ysical)f(pro)r(ces)g(used)h(to)227 2074 y(de\014ne)34
-b(the)g(rate)f(of)g(\015o)n(w)g(of)h(time\).)55 b(MJD,)34
-b(JD)g(and)f(Julian)g(ep)r(o)r(c)n(h)h(can)f(b)r(e)h(used)f(to)h
-(represen)n(t)e(a)h(time)h(in)227 2174 y(an)n(y)26 b(supp)r(orted)h
-(time)g(scale.)36 b(Ho)n(w)n(ev)n(er,)25 b(Besselian)h(ep)r(o)r(c)n(h)g
-(ma)n(y)g(only)h(b)r(e)g(used)g(with)g(the)g Ft(")p Fj(TT)p
-Ft(")f Fj(\(T)-7 b(errestrial)227 2273 y(Time\))39 b(time)g(scale.)70
-b(The)38 b(list)h(of)g(supp)r(orted)f(time)h(scales)f(includes)h(univ)n
-(ersal)e(time)i(and)f(siderial)g(time.)227 2373 y(Strictly)-7
-b(,)30 b(these)g(represen)n(t)e(angles)g(rather)g(than)i(time)f
-(scales,)g(but)h(are)e(included)i(in)g(the)f(list)h(since)f(they)h(are)
-227 2472 y(in)e(common)f(use)h(and)f(are)g(often)h(though)n(t)f(of)g
-(as)g(time)h(scales.)227 2602 y(When)h(a)e(time)h(v)-5
-b(alue)28 b(is)f(formatted)h(it)g(can)f(b)r(e)h(formated)g(either)f(as)
-g(a)h(simple)g(\015oating)e(p)r(oin)n(t)i(v)-5 b(alue,)28
-b(or)f(as)g(a)227 2702 y(Gregorian)f(date)h(\(see)h(the)g(F)-7
-b(ormat)27 b(attribute\).)0 2861 y Fd(Synopsis:)121 b
-Ft(AstTimeFrame)38 b Fi(\003)p Ft(astTimeFrame\()g(const)k(char)g
-Fi(\003)p Ft(options,)d(...)86 b(\))0 3021 y Fd(P)m(arameters:)259
-3168 y(options)427 3267 y Fj(P)n(oin)n(ter)27 b(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 3367 y(assignmen)n(ts)i
-(to)g(b)r(e)h(used)f(for)g(initialising)h(the)g(new)f(TimeF)-7
-b(rame.)45 b(The)31 b(syn)n(tax)f(used)g(is)g(iden)n(tical)h(to)427
-3467 y(that)38 b(for)e(the)i(astSet)f(function)h(and)f(ma)n(y)f
-(include)i Ft(")p Fj(prin)n(tf)p Ft(")e Fj(format)h(sp)r(eci\014ers)g
-(iden)n(ti\014ed)g(b)n(y)g Ft(")p Fj(\045)p Ft(")427
-3566 y Fj(sym)n(b)r(ols)j(in)h(the)g(normal)e(w)n(a)n(y)-7
-b(.)75 b(If)41 b(no)f(initialisation)g(is)g(required,)j(a)d
-(zero-length)g(string)f(ma)n(y)h(b)r(e)427 3666 y(supplied.)259
-3804 y Fd(...)427 3903 y Fj(If)e(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 4003 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 4103 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 4202 y Fj(function\).)0 4374
-y Fd(Returned)32 b(V)-8 b(alue:)259 4521 y(astTimeF)g(rame\(\))427
-4621 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(TimeF)-7
-b(rame.)0 4793 y Fd(Notes:)340 5085 y Fi(\017)45 b Fj(When)40
-b(con)n(v)n(ersion)e(b)r(et)n(w)n(een)h(t)n(w)n(o)g(TimeF)-7
-b(rames)39 b(is)g(requested)g(\(as)g(when)h(supplying)f(TimeF)-7
-b(rames)427 5185 y(to)39 b(astCon)n(v)n(ert\),)i(accoun)n(t)e(will)g(b)
-r(e)h(tak)n(en)f(of)g(the)h(nature)f(of)g(the)h(time)f(co)r(ordinate)g
-(systems)f(they)427 5285 y(represen)n(t,)d(together)f(with)h(an)n(y)f
-(qualifying)g(time)h(scale,)h(o\013set,)g(unit,)h(etc.)58
-b(The)35 b(AlignSystem)g(and)427 5384 y(AlignTimeScale)28
-b(attributes)f(will)h(also)e(b)r(e)i(tak)n(en)f(in)n(to)h(accoun)n(t.)
-340 5522 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35
-b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g
-(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427
-5622 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)p eop end
-%%Page: 367 377
-TeXDict begin 367 376 bop 3643 52 a FF(367)p 0 351 3780
-12 v 0 483 a Fz(astTimeMap)1404 482 y Fe(Create)37 b(a)h(TimeMap)3037
-483 y Fz(astTimeMap)0 672 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(TimeMap)h(and)f(optionally)g
-(initialises)g(its)h(attributes.)227 797 y(A)39 b(TimeMap)f(is)g(a)g
-(sp)r(ecialised)g(form)g(of)g(1-dimensional)f(Mapping)h(whic)n(h)h(can)
-f(b)r(e)g(used)h(to)f(represen)n(t)f(a)227 897 y(sequence)27
-b(of)h(con)n(v)n(ersions)d(b)r(et)n(w)n(een)i(standard)g(time)h(co)r
-(ordinate)f(systems.)227 1022 y(When)c(a)e(TimeMap)g(is)h(\014rst)f
-(created,)h(it)h(simply)e(p)r(erforms)g(a)h(unit)g(\(n)n(ull\))g
-(Mapping.)35 b(Using)21 b(the)h(astTimeAdd)227 1121 y(function,)33
-b(a)d(series)g(of)h(co)r(ordinate)f(con)n(v)n(ersion)e(steps)j(ma)n(y)f
-(then)i(b)r(e)f(added.)47 b(This)31 b(allo)n(ws)e(m)n(ulti-step)i(con-)
-227 1221 y(v)n(ersions)k(b)r(et)n(w)n(een)h(a)g(v)-5
-b(ariet)n(y)35 b(of)h(time)h(co)r(ordinate)e(systems)g(to)h(b)r(e)h
-(assem)n(bled)e(out)h(of)g(a)g(set)g(of)g(building)227
-1321 y(blo)r(c)n(ks.)227 1446 y(F)-7 b(or)20 b(details)h(of)g(the)g
-(individual)g(co)r(ordinate)e(con)n(v)n(ersions)g(a)n(v)-5
-b(ailable,)21 b(see)f(the)h(description)f(of)h(the)g(astTimeAdd)227
-1545 y(function.)0 1695 y Fd(Synopsis:)121 b Ft(AstTimeMap)39
-b Fi(\003)p Ft(astTimeMap\()g(int)j(flags,)f(const)h(char)g
-Fi(\003)p Ft(options,)e(...)85 b(\))0 1845 y Fd(P)m(arameters:)259
-1982 y(\015ags)427 2082 y Fj(This)28 b(parameter)e(is)h(reserv)n(ed)f
-(for)h(future)h(use)g(and)f(should)h(curren)n(tly)e(alw)n(a)n(ys)g(b)r
-(e)i(set)f(to)h(zero.)259 2215 y Fd(options)427 2315
-y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-2414 y(assignmen)n(ts)22 b(to)g(b)r(e)i(used)e(for)g(initialising)h
-(the)g(new)g(TimeMap.)35 b(The)23 b(syn)n(tax)f(used)g(is)h(iden)n
-(tical)g(to)f(that)427 2514 y(for)k(the)h(astSet)g(function)g(and)g(ma)
-n(y)f(include)h Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r
-(eci\014ers)g(iden)n(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p
-Ft(")g Fj(sym)n(b)r(ols)427 2614 y(in)i(the)g(normal)f(w)n(a)n(y)-7
-b(.)35 b(If)28 b(no)g(initialisation)f(is)g(required,)g(a)g
-(zero-length)f(string)h(ma)n(y)g(b)r(e)h(supplied.)259
-2747 y Fd(...)427 2846 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 2946 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 3046 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 3145 y Fj(function\).)0 3308
-y Fd(Returned)32 b(V)-8 b(alue:)259 3445 y(astTimeMap\(\))427
-3545 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(TimeMap.)0
-3707 y Fd(Notes:)340 3990 y Fi(\017)45 b Fj(The)23 b(nature)g(and)g
-(units)h(of)f(the)g(co)r(ordinate)f(v)-5 b(alues)23 b(supplied)h(for)e
-(the)i(\014rst)f(input)h(\(i.e.)35 b(the)24 b(time)g(input\))427
-4090 y(of)36 b(a)g(TimeMap)g(m)n(ust)h(b)r(e)f(appropriate)f(to)h(the)h
-(\014rst)f(con)n(v)n(ersion)d(step)k(applied)f(b)n(y)g(the)h(TimeMap.)
-427 4190 y(F)-7 b(or)23 b(instance,)h(if)g(the)g(\014rst)f(con)n(v)n
-(ersion)e(step)i(is)h Ft(")p Fj(MJDTOBEP)p Ft(")d Fj(\(Mo)r(di\014ed)j
-(Julian)f(Date)g(to)h(Besselian)427 4289 y(ep)r(o)r(c)n(h\))e(then)g
-(the)g(co)r(ordinate)f(v)-5 b(alues)21 b(for)g(the)h(\014rst)f(input)i
-(should)e(b)r(e)h(date)g(in)g(units)g(of)f(da)n(ys.)34
-b(Similarly)-7 b(,)427 4389 y(the)28 b(nature)e(and)h(units)g(of)g(the)
-g(co)r(ordinate)f(v)-5 b(alues)27 b(returned)f(b)n(y)h(a)f(TimeMap)h
-(will)g(b)r(e)h(determined)f(b)n(y)427 4488 y(the)h(last)g(con)n(v)n
-(ersion)d(step)j(applied)f(b)n(y)g(the)h(TimeMap.)340
-4622 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35
-b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g
-(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427
-4721 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)p 0 4921 V 0 5052 a Fz(astT)-11
-b(ran1)944 5053 y Fe(T)h(ransform)37 b(1-dimensional)f(co)s(ordinates)
-3264 5052 y Fz(astT)-11 b(ran1)0 5219 y Fd(Description:)44
-b Fj(This)34 b(function)g(applies)g(a)f(Mapping)g(to)h(transform)f(the)
-h(co)r(ordinates)e(of)i(a)f(set)h(of)f(p)r(oin)n(ts)h(in)g(one)227
-5319 y(dimension.)0 5469 y Fd(Synopsis:)121 b Ft(void)42
-b(astTran1\()e(AstMapping)f Fi(\003)p Ft(this,)i(int)h(npoint,)f(const)
-h(double)f(xin[],)g(int)h(forward,)227 5568 y(double)f(xout[])g(\))0
-5718 y Fd(P)m(arameters:)p eop end
-%%Page: 368 378
-TeXDict begin 368 377 bop 0 52 a FF(368)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(this)427
-451 y Fj(P)n(oin)n(ter)c(to)i(the)g(Mapping)f(to)g(b)r(e)h(applied.)259
-592 y Fd(np)s(oin)m(t)427 691 y Fj(The)g(n)n(um)n(b)r(er)f(of)h(p)r
-(oin)n(ts)f(to)h(b)r(e)g(transformed.)259 832 y Fd(xin)427
-932 y Fj(An)g(arra)n(y)e(of)h Ft(")p Fj(np)r(oin)n(t)p
-Ft(")g Fj(co)r(ordinate)g(v)-5 b(alues)27 b(for)g(the)h(input)g(\(un)n
-(transformed\))f(p)r(oin)n(ts.)259 1073 y Fd(forw)m(ard)427
-1172 y Fj(A)36 b(non-zero)d(v)-5 b(alue)35 b(indicates)f(that)i(the)f
-(Mapping's)f(forw)n(ard)g(co)r(ordinate)f(transformation)h(is)g(to)h(b)
-r(e)427 1272 y(applied,)28 b(while)g(a)f(zero)f(v)-5
-b(alue)28 b(indicates)f(that)h(the)g(in)n(v)n(erse)e(transformation)g
-(should)i(b)r(e)g(used.)259 1413 y Fd(xout)427 1513 y
-Fj(An)33 b(arra)n(y)d(\(with)j Ft(")p Fj(np)r(oin)n(t)p
-Ft(")e Fj(elemen)n(ts\))i(in)n(to)e(whic)n(h)i(the)f(co)r(ordinates)f
-(of)h(the)g(output)h(\(transformed\))427 1612 y(p)r(oin)n(ts)28
-b(will)g(b)r(e)g(written.)0 1790 y Fd(Notes:)340 2089
-y Fi(\017)45 b Fj(The)28 b(Mapping)f(supplied)h(m)n(ust)g(ha)n(v)n(e)e
-(the)i(v)-5 b(alue)28 b(1)f(for)g(b)r(oth)h(its)g(Nin)g(and)f(Nout)h
-(attributes.)p 0 2304 3780 12 v 0 2435 a Fz(astT)-11
-b(ran2)944 2436 y Fe(T)h(ransform)37 b(2-dimensional)f(co)s(ordinates)
-3264 2435 y Fz(astT)-11 b(ran2)0 2618 y Fd(Description:)44
-b Fj(This)34 b(function)g(applies)f(a)g(Mapping)g(to)g(transform)f(the)
-i(co)r(ordinates)e(of)i(a)f(set)g(of)g(p)r(oin)n(ts)h(in)f(t)n(w)n(o)
-227 2717 y(dimensions.)0 2883 y Fd(Synopsis:)121 b Ft(void)42
-b(astTran2\()e(AstMapping)f Fi(\003)p Ft(this,)i(int)h(npoint,)f(const)
-h(double)f(xin[],)g(const)g(double)227 2983 y(yin[],)g(int)i(forward,)d
-(double)h(xout[],)g(double)g(yout[])g(\))0 3148 y Fd(P)m(arameters:)259
-3301 y(this)427 3400 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Mapping)f(to)g
-(b)r(e)h(applied.)259 3541 y Fd(np)s(oin)m(t)427 3641
-y Fj(The)g(n)n(um)n(b)r(er)f(of)h(p)r(oin)n(ts)f(to)h(b)r(e)g
-(transformed.)259 3782 y Fd(xin)427 3881 y Fj(An)g(arra)n(y)e(of)h
-Ft(")p Fj(np)r(oin)n(t)p Ft(")g Fj(X-co)r(ordinate)g(v)-5
-b(alues)27 b(for)g(the)h(input)g(\(un)n(transformed\))f(p)r(oin)n(ts.)
-259 4022 y Fd(yin)427 4122 y Fj(An)h(arra)n(y)e(of)h
-Ft(")p Fj(np)r(oin)n(t)p Ft(")g Fj(Y-co)r(ordinate)g(v)-5
-b(alues)27 b(for)g(the)h(input)g(\(un)n(transformed\))f(p)r(oin)n(ts.)
-259 4263 y Fd(forw)m(ard)427 4362 y Fj(A)36 b(non-zero)d(v)-5
-b(alue)35 b(indicates)f(that)i(the)f(Mapping's)f(forw)n(ard)g(co)r
-(ordinate)f(transformation)h(is)g(to)h(b)r(e)427 4462
-y(applied,)28 b(while)g(a)f(zero)f(v)-5 b(alue)28 b(indicates)f(that)h
-(the)g(in)n(v)n(erse)e(transformation)g(should)i(b)r(e)g(used.)259
-4603 y Fd(xout)427 4703 y Fj(An)d(arra)n(y)e(\(with)i
-Ft(")p Fj(np)r(oin)n(t)p Ft(")f Fj(elemen)n(ts\))h(in)n(to)g(whic)n(h)f
-(the)h(X-co)r(ordinates)e(of)i(the)g(output)g(\(transformed\))427
-4802 y(p)r(oin)n(ts)j(will)g(b)r(e)g(written.)259 4943
-y Fd(y)m(out)427 5043 y Fj(An)d(arra)n(y)e(\(with)i Ft(")p
-Fj(np)r(oin)n(t)p Ft(")f Fj(elemen)n(ts\))h(in)n(to)g(whic)n(h)f(the)h
-(Y-co)r(ordinates)e(of)i(the)g(output)g(\(transformed\))427
-5142 y(p)r(oin)n(ts)j(will)g(b)r(e)g(written.)0 5320
-y Fd(Notes:)340 5619 y Fi(\017)45 b Fj(The)28 b(Mapping)f(supplied)h(m)
-n(ust)g(ha)n(v)n(e)e(the)i(v)-5 b(alue)28 b(2)f(for)g(b)r(oth)h(its)g
-(Nin)g(and)f(Nout)h(attributes.)p eop end
-%%Page: 369 379
-TeXDict begin 369 378 bop 3643 52 a FF(369)p 0 351 3780
-12 v 0 483 a Fz(astT)-11 b(ranGrid)423 b Fe(T)-10 b(ransform)37
-b(a)h(grid)g(of)g(p)s(ositions)422 b Fz(astT)-11 b(ranGrid)0
-679 y Fd(Description:)44 b Fj(This)36 b(function)g(uses)f(the)h
-(supplied)f(Mapping)g(to)h(transforms)e(a)h(regular)e(square)i(grid)f
-(of)i(p)r(oin)n(ts)227 778 y(co)n(v)n(ering)28 b(a)h(sp)r(eci\014ed)h
-(b)r(o)n(x.)42 b(It)30 b(attempts)g(to)f(do)g(this)h(quic)n(kly)f(b)n
-(y)g(\014rst)g(appro)n(ximating)f(the)i(Mapping)f(with)227
-878 y(a)35 b(linear)g(transformation)e(applied)j(o)n(v)n(er)d(the)j
-(whole)f(region)f(of)h(the)h(input)g(grid)e(whic)n(h)i(is)f(b)r(eing)g
-(used.)60 b(If)227 977 y(this)30 b(pro)n(v)n(es)e(to)i(b)r(e)g
-(insu\016cien)n(tly)g(accurate,)f(the)h(input)h(region)d(is)i
-(sub-divided)g(in)n(to)f(t)n(w)n(o)g(along)g(its)h(largest)227
-1077 y(dimension)k(and)g(the)h(pro)r(cess)e(is)h(rep)r(eated)g(within)h
-(eac)n(h)e(of)h(the)h(resulting)f(sub-regions.)54 b(This)35
-b(pro)r(cess)e(of)227 1177 y(sub-division)21 b(con)n(tin)n(ues)g(un)n
-(til)g(a)g(su\016cien)n(tly)h(go)r(o)r(d)f(linear)f(appro)n(ximation)g
-(is)h(found,)i(or)e(the)g(region)f(to)i(whic)n(h)227
-1276 y(it)28 b(is)g(b)r(eing)f(applied)h(b)r(ecomes)f(to)r(o)h(small)f
-(\(in)h(whic)n(h)g(case)e(the)i(original)e(Mapping)h(is)h(used)g
-(directly\).)0 1433 y Fd(Synopsis:)121 b Ft(void)42 b(astTranGrid\()c
-(AstMapping)i Fi(\003)p Ft(this,)h(int)h(ncoord_in,)e(const)h(int)i
-(lbnd[],)d(const)i(int)227 1532 y(ubnd[],)f(double)g(tol,)h(int)g
-(maxpix,)f(int)h(forward,)f(int)h(ncoord_out,)d(int)j(outdim,)f(double)
-g Fi(\003)p Ft(out)227 1632 y(\);)0 1788 y Fd(P)m(arameters:)259
-1931 y(this)427 2031 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Mapping)f(to)g
-(b)r(e)h(applied.)259 2167 y Fd(nco)s(ord)p Ft(_)p Fd(in)427
-2267 y Fj(The)c(n)n(um)n(b)r(er)g(of)g(co)r(ordinates)f(b)r(eing)h
-(supplied)g(for)g(eac)n(h)f(b)r(o)n(x)g(corner)g(\(i.e.)36
-b(the)24 b(n)n(um)n(b)r(er)g(of)g(dimensions)427 2367
-y(of)k(the)g(space)f(in)h(whic)n(h)f(the)h(input)g(p)r(oin)n(ts)g
-(reside\).)259 2503 y Fd(lbnd)427 2602 y Fj(P)n(oin)n(ter)c(to)i(an)g
-(arra)n(y)d(of)j(in)n(tegers,)f(with)h Ft(")p Fj(nco)r(ord)p
-Ft(_)p Fj(in)p Ft(")e Fj(elemen)n(ts,)i(con)n(taining)f(the)h(co)r
-(ordinates)e(of)i(the)427 2702 y(cen)n(tre)h(of)h(the)g(\014rst)f
-(pixel)h(in)g(the)g(input)g(grid)f(along)f(eac)n(h)h(dimension.)259
-2838 y Fd(ubnd)427 2938 y Fj(P)n(oin)n(ter)d(to)i(an)g(arra)n(y)d(of)j
-(in)n(tegers,)f(with)h Ft(")p Fj(nco)r(ord)p Ft(_)p Fj(in)p
-Ft(")e Fj(elemen)n(ts,)i(con)n(taining)f(the)h(co)r(ordinates)e(of)i
-(the)427 3038 y(cen)n(tre)h(of)h(the)g(last)f(pixel)h(in)g(the)g(input)
-g(grid)f(along)f(eac)n(h)h(dimension.)427 3155 y(Note)f(that)h
-Ft(")p Fj(lbnd)p Ft(")f Fj(and)g Ft(")p Fj(ubnd)p Ft(")g
-Fj(together)f(de\014ne)h(the)h(shap)r(e)f(and)g(size)g(of)g(the)g
-(input)h(grid,)f(its)h(exten)n(t)427 3255 y(along)36
-b(a)g(particular)f(\(j'th\))j(dimension)e(b)r(eing)g(ubnd[j]-lbnd[j]+1)
-i(\(assuming)d(the)i(index)g Ft(")p Fj(j)p Ft(")f Fj(to)g(b)r(e)427
-3355 y(zero-based\).)69 b(They)39 b(also)e(de\014ne)j(the)f(input)g
-(grid's)f(co)r(ordinate)g(system,)j(eac)n(h)d(pixel)h(ha)n(ving)f(unit)
-427 3454 y(exten)n(t)28 b(along)e(eac)n(h)h(dimension)h(with)g(in)n
-(tegral)e(co)r(ordinate)h(v)-5 b(alues)27 b(at)g(its)h(cen)n(tre.)259
-3591 y Fd(tol)427 3690 y Fj(The)34 b(maxim)n(um)f(tolerable)f
-(geometrical)f(distortion)i(whic)n(h)g(ma)n(y)f(b)r(e)i(in)n(tro)r
-(duced)f(as)f(a)h(result)g(of)g(ap-)427 3790 y(pro)n(ximating)c
-(non-linear)f(Mappings)h(b)n(y)h(a)f(set)h(of)g(piece-wise)f(linear)g
-(transformations.)42 b(This)30 b(should)427 3889 y(b)r(e)e(expressed)f
-(as)g(a)g(displacemen)n(t)g(within)h(the)g(output)h(co)r(ordinate)d
-(system)h(of)h(the)g(Mapping.)427 4007 y(If)34 b(piece-wise)f(linear)g
-(appro)n(ximation)f(is)h(not)h(required,)g(a)f(v)-5 b(alue)33
-b(of)h(zero)e(ma)n(y)h(b)r(e)h(giv)n(en.)54 b(This)33
-b(will)427 4107 y(ensure)k(that)g(the)h(Mapping)e(is)h(used)g(without)h
-(an)n(y)e(appro)n(ximation,)i(but)g(ma)n(y)e(increase)g(execution)427
-4207 y(time.)427 4325 y(If)d(the)f(v)-5 b(alue)32 b(is)g(to)r(o)g
-(high,)h(discon)n(tin)n(uities)e(b)r(et)n(w)n(een)h(the)h(linear)e
-(appro)n(ximations)f(used)i(in)g(adjacen)n(t)427 4424
-y(panel)c(will)f(b)r(e)h(higher.)37 b(If)28 b(this)g(is)f(a)g(problem,)
-g(reduce)h(the)g(tolerance)e(v)-5 b(alue)27 b(used.)259
-4560 y Fd(maxpix)427 4660 y Fj(A)i(v)-5 b(alue)29 b(whic)n(h)g(sp)r
-(eci\014es)f(an)h(initial)g(scale)f(size)g(\(in)h(input)h(grid)e(p)r
-(oin)n(ts\))h(for)f(the)h(adaptiv)n(e)f(algorithm)427
-4760 y(whic)n(h)j(appro)n(ximates)f(non-linear)g(Mappings)g(with)i
-(piece-wise)f(linear)f(transformations.)46 b(Normally)-7
-b(,)427 4859 y(this)28 b(should)g(b)r(e)g(a)g(large)e(v)-5
-b(alue)28 b(\(larger)e(than)i(an)n(y)f(dimension)g(of)h(the)g(region)f
-(of)h(the)g(input)g(grid)g(b)r(eing)427 4959 y(used\).)46
-b(In)31 b(this)g(case,)g(a)f(\014rst)g(attempt)h(to)g(appro)n(ximate)e
-(the)i(Mapping)f(b)n(y)g(a)g(linear)g(transformation)427
-5059 y(will)e(b)r(e)g(made)f(o)n(v)n(er)f(the)i(en)n(tire)f(input)i
-(region.)427 5177 y(If)k(a)f(smaller)f(v)-5 b(alue)33
-b(is)f(used,)i(the)e(input)h(region)f(will)g(\014rst)g(b)r(e)h(divided)
-g(in)n(to)f(sub-regions)e(whose)i(size)427 5276 y(do)r(es)c(not)g
-(exceed)f Ft(")p Fj(maxpix)p Ft(")g Fj(grid)g(p)r(oin)n(ts)h(in)g(an)n
-(y)f(dimension.)37 b(Only)28 b(at)f(this)h(p)r(oin)n(t)g(will)g
-(attempts)h(at)427 5376 y(appro)n(ximation)d(commence.)427
-5494 y(This)38 b(v)-5 b(alue)38 b(ma)n(y)g(o)r(ccasionally)e(b)r(e)j
-(useful)f(in)h(prev)n(en)n(ting)e(false)h(con)n(v)n(ergence)d(of)j(the)
-h(adaptiv)n(e)e(al-)427 5593 y(gorithm)c(in)g(cases)f(where)g(the)h
-(Mapping)g(app)r(ears)f(appro)n(ximately)f(linear)h(on)h(large)e
-(scales,)j(but)f(has)427 5693 y(irregularities)e(\(e.g.)53
-b(holes\))32 b(on)h(smaller)f(scales.)52 b(A)33 b(v)-5
-b(alue)33 b(of,)h(sa)n(y)-7 b(,)34 b(50)e(to)g(100)g(grid)g(p)r(oin)n
-(ts)h(can)g(also)p eop end
-%%Page: 370 380
-TeXDict begin 370 379 bop 0 52 a FF(370)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)427 351 y Fj(b)r(e)k(emplo)n(y)n(ed)
-e(as)g(a)h(safeguard)f(in)h(general-purp)r(ose)e(soft)n(w)n(are,)i
-(since)g(the)g(e\013ect)h(on)f(p)r(erformance)f(is)427
-451 y(minimal.)427 568 y(If)21 b(to)r(o)f(small)g(a)g(v)-5
-b(alue)20 b(is)g(giv)n(en,)h(it)g(will)f(ha)n(v)n(e)f(the)i(e\013ect)g
-(of)f(inhibiting)h(linear)f(appro)n(ximation)e(altogether)427
-667 y(\(equiv)-5 b(alen)n(t)20 b(to)g(setting)g Ft(")p
-Fj(tol)p Ft(")f Fj(to)g(zero\).)34 b(Although)20 b(this)g(ma)n(y)f
-(degrade)f(p)r(erformance,)j(accurate)d(results)427 767
-y(will)28 b(still)g(b)r(e)g(obtained.)259 901 y Fd(forw)m(ard)427
-1001 y Fj(A)36 b(non-zero)d(v)-5 b(alue)35 b(indicates)f(that)i(the)f
-(Mapping's)f(forw)n(ard)g(co)r(ordinate)f(transformation)h(is)g(to)h(b)
-r(e)427 1100 y(applied,)28 b(while)g(a)f(zero)f(v)-5
-b(alue)28 b(indicates)f(that)h(the)g(in)n(v)n(erse)e(transformation)g
-(should)i(b)r(e)g(used.)259 1234 y Fd(nco)s(ord)p Ft(_)p
-Fd(out)427 1334 y Fj(The)j(n)n(um)n(b)r(er)e(of)i(co)r(ordinates)d(b)r
-(eing)j(generated)e(b)n(y)h(the)g(Mapping)g(for)g(eac)n(h)f(output)i(p)
-r(oin)n(t)f(\(i.e.)45 b(the)427 1433 y(n)n(um)n(b)r(er)28
-b(of)g(dimensions)g(of)h(the)f(space)g(in)g(whic)n(h)h(the)f(output)h
-(p)r(oin)n(ts)f(reside\).)39 b(This)28 b(need)g(not)h(b)r(e)f(the)427
-1533 y(same)f(as)g Ft(")p Fj(nco)r(ord)p Ft(_)p Fj(in)p
-Ft(")p Fj(.)259 1667 y Fd(outdim)427 1767 y Fj(The)k(n)n(um)n(b)r(er)f
-(of)g(elemen)n(ts)g(along)g(the)g(second)g(dimension)g(of)h(the)g
-Ft(")p Fj(out)p Ft(")e Fj(arra)n(y)f(\(whic)n(h)j(will)f(con)n(tain)427
-1866 y(the)25 b(output)h(co)r(ordinates\).)35 b(The)24
-b(v)-5 b(alue)25 b(giv)n(en)f(should)h(not)f(b)r(e)i(less)e(than)h(the)
-g(n)n(um)n(b)r(er)g(of)f(p)r(oin)n(ts)h(in)g(the)427
-1966 y(grid.)259 2100 y Fd(out)427 2200 y Fj(The)33 b(address)e(of)i
-(the)g(\014rst)g(elemen)n(t)f(in)h(a)g(2-dimensional)e(arra)n(y)f(of)j
-(shap)r(e)f Ft(")p Fj([nco)r(ord)p Ft(_)p Fj(out][outdim])p
-Ft(")p Fj(,)427 2299 y(in)n(to)c(whic)n(h)f(the)h(co)r(ordinates)e(of)h
-(the)h(output)g(\(transformed\))f(p)r(oin)n(ts)h(will)f(b)r(e)h
-(written.)37 b(These)27 b(will)h(b)r(e)427 2399 y(stored)k(suc)n(h)g
-(that)h(the)f(v)-5 b(alue)33 b(of)f(co)r(ordinate)f(n)n(um)n(b)r(er)h
-Ft(")p Fj(co)r(ord)p Ft(")f Fj(for)h(output)h(p)r(oin)n(t)f(n)n(um)n(b)
-r(er)g Ft(")p Fj(p)r(oin)n(t)p Ft(")427 2498 y Fj(will)d(b)r(e)g(found)
-g(in)g(elemen)n(t)f Ft(")p Fj(out[co)r(ord][p)r(oin)n(t])p
-Ft(")p Fj(.)38 b(The)29 b(p)r(oin)n(ts)f(are)g(ordered)f(suc)n(h)h
-(that)h(the)g(\014rst)f(axis)427 2598 y(of)j(the)g(input)g(grid)f(c)n
-(hanges)f(most)h(rapidly)-7 b(.)45 b(F)-7 b(or)30 b(example,)h(if)g
-(the)g(input)g(grid)f(is)h(2-dimensional)e(and)427 2698
-y(extends)24 b(from)g(\(2,-1\))g(to)g(\(3,1\),)g(the)h(output)f(p)r
-(oin)n(ts)h(will)f(b)r(e)g(stored)g(in)g(the)h(order)d(\(2,-1\),)j
-(\(3,)f(-1\),)h(\(2,0\),)427 2797 y(\(3,0\),)j(\(2,1\),)f(\(3,1\).)0
-2961 y Fd(Notes:)340 3246 y Fi(\017)45 b Fj(If)31 b(the)g(forw)n(ard)e
-(co)r(ordinate)h(transformation)f(is)h(b)r(eing)h(applied,)h(the)f
-(Mapping)f(supplied)h(m)n(ust)g(ha)n(v)n(e)427 3346 y(the)36
-b(v)-5 b(alue)34 b(of)h Ft(")p Fj(nco)r(ord)p Ft(_)p
-Fj(in)p Ft(")e Fj(for)h(its)h(Nin)h(attribute)f(and)g(the)g(v)-5
-b(alue)35 b(of)f Ft(")p Fj(nco)r(ord)p Ft(_)p Fj(out)p
-Ft(")f Fj(for)h(its)h(Nout)427 3446 y(attribute.)i(If)28
-b(the)g(in)n(v)n(erse)e(transformation)g(is)i(b)r(eing)g(applied,)f
-(these)h(v)-5 b(alues)27 b(should)g(b)r(e)h(rev)n(ersed.)p
-0 3647 3780 12 v 0 3778 a Fz(astT)-11 b(ranMap)1415 3777
-y Fe(Create)37 b(a)i(T)-10 b(ranMap)3064 3778 y Fz(astT)f(ranMap)0
-3969 y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(T)-7 b(ranMap)27 b(and)g(optionally)g(initialises)g(its)h(attributes.)
-227 4095 y(A)f(T)-7 b(ranMap)26 b(is)g(a)h(Mapping)f(whic)n(h)g(com)n
-(bines)g(the)h(forw)n(ard)e(transformation)g(of)i(a)f(supplied)h
-(Mapping)f(with)227 4194 y(the)34 b(in)n(v)n(erse)d(transformation)g
-(of)i(another)f(supplied)h(Mapping,)h(ignoring)d(the)i(un-used)g
-(transformation)e(in)227 4294 y(eac)n(h)c(Mapping)g(\(indeed)h(the)g
-(un-used)g(transformation)e(need)i(not)f(exist\).)227
-4419 y(When)h(the)f(forw)n(ard)e(transformation)h(of)h(the)g(T)-7
-b(ranMap)26 b(is)h(referred)f(to,)h(the)g(transformation)e(actually)i
-(used)227 4519 y(is)k(the)g(forw)n(ard)e(transformation)h(of)g(the)i
-(\014rst)e(Mapping)h(supplied)g(when)g(the)g(T)-7 b(ranMap)30
-b(w)n(as)g(constructed.)227 4619 y(Lik)n(ewise,)j(when)f(the)h(in)n(v)n
-(erse)d(transformation)h(of)h(the)h(T)-7 b(ranMap)31
-b(is)h(referred)f(to,)i(the)g(transformation)d(ac-)227
-4718 y(tually)f(used)g(is)g(the)g(in)n(v)n(erse)f(transformation)f(of)i
-(the)h(second)e(Mapping)h(supplied)g(when)g(the)h(T)-7
-b(ranMap)28 b(w)n(as)227 4818 y(constructed.)0 4970 y
-Fd(Synopsis:)121 b Ft(AstTranMap)39 b Fi(\003)p Ft(astTranMap\()g
-(AstMapping)g Fi(\003)p Ft(map1,)i(AstMapping)f Fi(\003)p
-Ft(map2,)h(const)g(char)h Fi(\003)p Ft(options,)227 5069
-y(...)86 b(\))0 5221 y Fd(P)m(arameters:)259 5360 y(map1)427
-5459 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(\014rst)f(comp)r(onen)n(t)g
-(Mapping,)h(whic)n(h)f(de\014nes)h(the)g(forw)n(ard)e(transformation.)
-259 5593 y Fd(map2)427 5693 y Fj(P)n(oin)n(ter)g(to)i(the)g(second)f
-(comp)r(onen)n(t)g(Mapping,)g(whic)n(h)h(de\014nes)f(the)h(in)n(v)n
-(erse)f(transformation.)p eop end
-%%Page: 371 381
-TeXDict begin 371 380 bop 3643 52 a FF(371)259 351 y
-Fd(options)427 451 y Fj(P)n(oin)n(ter)27 b(to)h(a)g(n)n(ull-terminated)
-g(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)
-g(attribute)427 551 y(assignmen)n(ts)23 b(to)h(b)r(e)g(used)g(for)f
-(initialising)h(the)g(new)g(T)-7 b(ranMap.)34 b(The)24
-b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)f(that)427
-650 y(for)j(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-750 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 888 y
-Fd(...)427 988 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 1087 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 1187 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 1287 y Fj(function\).)0 1459
-y Fd(Returned)32 b(V)-8 b(alue:)259 1607 y(astT)g(ranMap\(\))427
-1706 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(T)-7
-b(ranMap.)0 1879 y Fd(Notes:)340 2172 y Fi(\017)45 b
-Fj(The)36 b(n)n(um)n(b)r(er)g(of)g(output)h(co)r(ordinates)d(generated)
-h(b)n(y)h(the)g(t)n(w)n(o)f(Mappings)h(\(their)g(Nout)g(attribute\))427
-2272 y(m)n(ust)e(b)r(e)g(equal,)h(as)e(m)n(ust)h(the)g(n)n(um)n(b)r(er)
-f(of)h(input)g(co)r(ordinates)e(accepted)i(b)n(y)f(eac)n(h)g(Mapping)g
-(\(their)427 2371 y(Nin)28 b(attribute\).)340 2510 y
-Fi(\017)45 b Fj(The)28 b(forw)n(ard)e(transformation)g(of)h(the)h
-(\014rst)g(Mapping)f(m)n(ust)h(exist.)340 2648 y Fi(\017)45
-b Fj(The)28 b(in)n(v)n(erse)e(transformation)g(of)i(the)g(second)f
-(Mapping)g(m)n(ust)g(exist.)340 2786 y Fi(\017)45 b Fj(Note)19
-b(that)g(the)f(comp)r(onen)n(t)h(Mappings)f(supplied)g(are)g(not)g
-(copied)h(b)n(y)f(astT)-7 b(ranMap)17 b(\(the)i(new)g(T)-7
-b(ranMap)427 2886 y(simply)31 b(retains)f(a)g(reference)f(to)i(them\).)
-46 b(They)31 b(ma)n(y)f(con)n(tin)n(ue)g(to)g(b)r(e)h(used)g(for)f
-(other)f(purp)r(oses,)i(but)427 2985 y(should)21 b(not)g(b)r(e)h
-(deleted.)35 b(If)21 b(a)g(T)-7 b(ranMap)20 b(con)n(taining)g(a)h(cop)n
-(y)f(of)h(its)g(comp)r(onen)n(t)g(Mappings)g(is)g(required,)427
-3085 y(then)28 b(a)g(cop)n(y)e(of)i(the)g(T)-7 b(ranMap)26
-b(should)i(b)r(e)g(made)f(using)g(astCop)n(y)-7 b(.)340
-3223 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35
-b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g
-(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427
-3323 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)-2 3496 y Fd(Status)33 b(Handling)n(:)227
-3642 y Fj(The)d(protected)g(in)n(terface)f(to)g(this)h(function)h
-(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g(the)g
-(parameter)227 3741 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62
-b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)
-e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fj(in)n(t)227
-3841 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p 0 4051 3780
-12 v 0 4182 a Fz(astT)-11 b(ranN)930 4183 y Fe(T)h(ransform)36
-b(N-dimensional)g(co)s(ordinates)3226 4182 y Fz(astT)-11
-b(ranN)0 4359 y Fd(Description:)44 b Fj(This)37 b(function)f(applies)g
-(a)g(Mapping)g(to)g(transform)f(the)h(co)r(ordinates)f(of)h(a)g(set)g
-(of)g(p)r(oin)n(ts)g(in)h(an)227 4459 y(arbitrary)c(n)n(um)n(b)r(er)i
-(of)h(dimensions.)59 b(It)36 b(is)f(the)h(appropriate)d(routine)i(to)g
-(use)g(if)h(the)g(co)r(ordinates)d(are)i(not)227 4558
-y(purely)27 b(1-)g(or)g(2-dimensional)f(and)i(are)e(stored)h(in)h(a)f
-(single)g(arra)n(y)e(\(whic)n(h)j(they)g(need)g(not)f(\014ll)h
-(completely\).)227 4688 y(If)39 b(the)f(co)r(ordinates)e(are)h(not)h
-(stored)f(in)h(a)g(single)f(arra)n(y)-7 b(,)38 b(then)g(the)h(astT)-7
-b(ranP)36 b(function)i(migh)n(t)g(b)r(e)g(more)227 4788
-y(suitable.)0 4948 y Fd(Synopsis:)121 b Ft(void)42 b(astTranN\()e
-(AstMapping)f Fi(\003)p Ft(this,)i(int)h(npoint,)f(int)i(ncoord_in,)c
-(int)j(indim,)f(const)227 5048 y(double)g Fi(\003)p Ft(in,)h(int)h
-(forward,)d(int)i(ncoord_out,)d(int)k(outdim,)d(double)h
-Fi(\003)p Ft(out)h(\))0 5208 y Fd(P)m(arameters:)259
-5356 y(this)427 5455 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Mapping)f(to)g
-(b)r(e)h(applied.)259 5593 y Fd(np)s(oin)m(t)427 5693
-y Fj(The)g(n)n(um)n(b)r(er)f(of)h(p)r(oin)n(ts)f(to)h(b)r(e)g
-(transformed.)p eop end
-%%Page: 372 382
-TeXDict begin 372 381 bop 0 52 a FF(372)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(nco)s(ord)p
-Ft(_)p Fd(in)427 451 y Fj(The)22 b(n)n(um)n(b)r(er)g(of)g(co)r
-(ordinates)f(b)r(eing)h(supplied)h(for)e(eac)n(h)h(input)h(p)r(oin)n(t)
-f(\(i.e.)35 b(the)23 b(n)n(um)n(b)r(er)f(of)g(dimensions)427
-551 y(of)28 b(the)g(space)f(in)h(whic)n(h)f(the)h(input)g(p)r(oin)n(ts)
-g(reside\).)259 679 y Fd(indim)427 779 y Fj(The)33 b(n)n(um)n(b)r(er)f
-(of)h(elemen)n(ts)g(along)e(the)i(second)f(dimension)h(of)f(the)h
-Ft(")p Fj(in)p Ft(")f Fj(arra)n(y)f(\(whic)n(h)i(con)n(tains)e(the)427
-878 y(input)39 b(co)r(ordinates\).)65 b(This)38 b(v)-5
-b(alue)37 b(is)h(required)f(so)f(that)i(the)g(co)r(ordinate)f(v)-5
-b(alues)37 b(can)g(b)r(e)h(correctly)427 978 y(lo)r(cated)21
-b(if)h(they)f(do)g(not)g(en)n(tirely)g(\014ll)h(this)f(arra)n(y)-7
-b(.)33 b(The)21 b(v)-5 b(alue)21 b(giv)n(en)f(should)h(not)g(b)r(e)h
-(less)f(than)g Ft(")p Fj(np)r(oin)n(t)p Ft(")p Fj(.)259
-1106 y Fd(in)427 1206 y Fj(The)41 b(address)f(of)h(the)h(\014rst)f
-(elemen)n(t)g(in)g(a)g(2-dimensional)f(arra)n(y)f(of)i(shap)r(e)g
-Ft(")p Fj([nco)r(ord)p Ft(_)p Fj(in][indim])p Ft(")p
-Fj(,)427 1306 y(con)n(taining)25 b(the)h(co)r(ordinates)e(of)i(the)g
-(input)h(\(un)n(transformed\))e(p)r(oin)n(ts.)36 b(These)25
-b(should)h(b)r(e)g(stored)f(suc)n(h)427 1405 y(that)38
-b(the)g(v)-5 b(alue)37 b(of)g(co)r(ordinate)f(n)n(um)n(b)r(er)i
-Ft(")p Fj(co)r(ord)p Ft(")d Fj(for)i(input)h(p)r(oin)n(t)g(n)n(um)n(b)r
-(er)f Ft(")p Fj(p)r(oin)n(t)p Ft(")f Fj(is)i(found)f(in)427
-1505 y(elemen)n(t)28 b Ft(")p Fj(in[co)r(ord][p)r(oin)n(t])p
-Ft(")p Fj(.)259 1633 y Fd(forw)m(ard)427 1733 y Fj(A)36
-b(non-zero)d(v)-5 b(alue)35 b(indicates)f(that)i(the)f(Mapping's)f
-(forw)n(ard)g(co)r(ordinate)f(transformation)h(is)g(to)h(b)r(e)427
-1833 y(applied,)28 b(while)g(a)f(zero)f(v)-5 b(alue)28
-b(indicates)f(that)h(the)g(in)n(v)n(erse)e(transformation)g(should)i(b)
-r(e)g(used.)259 1961 y Fd(nco)s(ord)p Ft(_)p Fd(out)427
-2061 y Fj(The)j(n)n(um)n(b)r(er)e(of)i(co)r(ordinates)d(b)r(eing)j
-(generated)e(b)n(y)h(the)g(Mapping)g(for)g(eac)n(h)f(output)i(p)r(oin)n
-(t)f(\(i.e.)45 b(the)427 2160 y(n)n(um)n(b)r(er)28 b(of)g(dimensions)g
-(of)h(the)f(space)g(in)g(whic)n(h)h(the)f(output)h(p)r(oin)n(ts)f
-(reside\).)39 b(This)28 b(need)g(not)h(b)r(e)f(the)427
-2260 y(same)f(as)g Ft(")p Fj(nco)r(ord)p Ft(_)p Fj(in)p
-Ft(")p Fj(.)259 2388 y Fd(outdim)427 2488 y Fj(The)k(n)n(um)n(b)r(er)f
-(of)g(elemen)n(ts)g(along)g(the)g(second)g(dimension)g(of)h(the)g
-Ft(")p Fj(out)p Ft(")e Fj(arra)n(y)f(\(whic)n(h)j(will)f(con)n(tain)427
-2588 y(the)25 b(output)g(co)r(ordinates\).)34 b(This)25
-b(v)-5 b(alue)24 b(is)g(required)f(so)h(that)h(the)f(co)r(ordinate)g(v)
--5 b(alues)23 b(can)h(b)r(e)h(correctly)427 2687 y(lo)r(cated)40
-b(if)h(they)f(will)h(not)f(en)n(tirely)g(\014ll)g(this)h(arra)n(y)-7
-b(.)72 b(The)40 b(v)-5 b(alue)41 b(giv)n(en)e(should)h(not)g(b)r(e)h
-(less)e(than)427 2787 y Ft(")p Fj(np)r(oin)n(t)p Ft(")p
-Fj(.)259 2915 y Fd(out)427 3015 y Fj(The)33 b(address)e(of)i(the)g
-(\014rst)g(elemen)n(t)f(in)h(a)g(2-dimensional)e(arra)n(y)f(of)j(shap)r
-(e)f Ft(")p Fj([nco)r(ord)p Ft(_)p Fj(out][outdim])p
-Ft(")p Fj(,)427 3115 y(in)n(to)c(whic)n(h)f(the)h(co)r(ordinates)e(of)h
-(the)h(output)g(\(transformed\))f(p)r(oin)n(ts)h(will)f(b)r(e)h
-(written.)37 b(These)27 b(will)h(b)r(e)427 3214 y(stored)k(suc)n(h)g
-(that)h(the)f(v)-5 b(alue)33 b(of)f(co)r(ordinate)f(n)n(um)n(b)r(er)h
-Ft(")p Fj(co)r(ord)p Ft(")f Fj(for)h(output)h(p)r(oin)n(t)f(n)n(um)n(b)
-r(er)g Ft(")p Fj(p)r(oin)n(t)p Ft(")427 3314 y Fj(will)c(b)r(e)g(found)
-g(in)g(elemen)n(t)g Ft(")p Fj(out[co)r(ord][p)r(oin)n(t])p
-Ft(")p Fj(.)0 3471 y Fd(Notes:)340 3750 y Fi(\017)45
-b Fj(If)31 b(the)g(forw)n(ard)e(co)r(ordinate)h(transformation)f(is)h
-(b)r(eing)h(applied,)h(the)f(Mapping)f(supplied)h(m)n(ust)g(ha)n(v)n(e)
-427 3849 y(the)36 b(v)-5 b(alue)34 b(of)h Ft(")p Fj(nco)r(ord)p
-Ft(_)p Fj(in)p Ft(")e Fj(for)h(its)h(Nin)h(attribute)f(and)g(the)g(v)-5
-b(alue)35 b(of)f Ft(")p Fj(nco)r(ord)p Ft(_)p Fj(out)p
-Ft(")f Fj(for)h(its)h(Nout)427 3949 y(attribute.)i(If)28
-b(the)g(in)n(v)n(erse)e(transformation)g(is)i(b)r(eing)g(applied,)f
-(these)h(v)-5 b(alues)27 b(should)g(b)r(e)h(rev)n(ersed.)p
-0 4139 3780 12 v 0 4270 a Fz(astT)-11 b(ranP)734 4271
-y Fe(T)h(ransform)37 b(N-dimensional)f(co)s(ordinates)h(held)i(in)1502
-4371 y(separate)f(arra)m(ys)3240 4270 y Fz(astT)-11 b(ranP)0
-4551 y Fd(Description:)44 b Fj(This)37 b(function)f(applies)g(a)g
-(Mapping)g(to)g(transform)f(the)h(co)r(ordinates)f(of)h(a)g(set)g(of)g
-(p)r(oin)n(ts)g(in)h(an)227 4650 y(arbitrary)c(n)n(um)n(b)r(er)i(of)h
-(dimensions.)59 b(It)36 b(is)f(the)h(appropriate)d(routine)i(to)g(use)g
-(if)h(the)g(co)r(ordinates)d(are)i(not)227 4750 y(purely)25
-b(1-)f(or)h(2-dimensional)e(and)i(are)g(stored)f(in)h(separate)f(arra)n
-(ys,)f(since)i(eac)n(h)f(co)r(ordinate)g(arra)n(y)f(is)i(lo)r(cated)227
-4850 y(b)n(y)j(supplying)f(a)g(separate)f(p)r(oin)n(ter)h(to)h(it.)227
-4972 y(If)j(the)g(co)r(ordinates)e(are)g(stored)g(in)i(a)f(single)g
-(\(2-dimensional\))f(arra)n(y)-7 b(,)29 b(then)i(the)f(astT)-7
-b(ranN)30 b(function)h(migh)n(t)227 5072 y(b)r(e)d(more)f(suitable.)0
-5217 y Fd(Synopsis:)121 b Ft(void)42 b(astTranP\()e(AstMapping)f
-Fi(\003)p Ft(this,)i(int)h(npoint,)f(int)i(ncoord_in,)c(const)i(double)
-h Fi(\003)p Ft(ptr_in[],)227 5316 y(int)h(forward,)d(int)i(ncoord_out,)
-d(double)i Fi(\003)p Ft(ptr_out[])f(\))0 5461 y Fd(P)m(arameters:)259
-5593 y(this)427 5693 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Mapping)f(to)g
-(b)r(e)h(applied.)p eop end
-%%Page: 373 383
-TeXDict begin 373 382 bop 3643 52 a FF(373)259 351 y
-Fd(np)s(oin)m(t)427 451 y Fj(The)28 b(n)n(um)n(b)r(er)f(of)h(p)r(oin)n
-(ts)f(to)h(b)r(e)g(transformed.)259 588 y Fd(nco)s(ord)p
-Ft(_)p Fd(in)427 688 y Fj(The)22 b(n)n(um)n(b)r(er)g(of)g(co)r
-(ordinates)f(b)r(eing)h(supplied)h(for)e(eac)n(h)h(input)h(p)r(oin)n(t)
-f(\(i.e.)35 b(the)23 b(n)n(um)n(b)r(er)f(of)g(dimensions)427
-787 y(of)28 b(the)g(space)f(in)h(whic)n(h)f(the)h(input)g(p)r(oin)n(ts)
-g(reside\).)259 924 y Fd(ptr)p Ft(_)p Fd(in)427 1024
-y Fj(An)h(arra)n(y)d(of)i(p)r(oin)n(ters)g(to)g(double,)h(with)g
-Ft(")p Fj(nco)r(ord)p Ft(_)p Fj(in)p Ft(")d Fj(elemen)n(ts.)39
-b(Elemen)n(t)29 b Ft(")p Fj(ptr)p Ft(_)p Fj(in[co)r(ord])p
-Ft(")d Fj(should)427 1124 y(p)r(oin)n(t)20 b(at)g(the)g(\014rst)g
-(elemen)n(t)g(of)g(an)f(arra)n(y)f(of)h(double)h(\(with)h
-Ft(")p Fj(np)r(oin)n(t)p Ft(")e Fj(elemen)n(ts\))h(whic)n(h)g(con)n
-(tain)f(the)h(v)-5 b(al-)427 1223 y(ues)24 b(of)g(co)r(ordinate)e(n)n
-(um)n(b)r(er)i Ft(")p Fj(co)r(ord)p Ft(")e Fj(for)h(eac)n(h)g(input)i
-(\(un)n(transformed\))e(p)r(oin)n(t.)36 b(The)23 b(v)-5
-b(alue)24 b(of)g(co)r(ordi-)427 1323 y(nate)19 b(n)n(um)n(b)r(er)f
-Ft(")p Fj(co)r(ord)p Ft(")e Fj(for)i(input)h(p)r(oin)n(t)g(n)n(um)n(b)r
-(er)f Ft(")p Fj(p)r(oin)n(t)p Ft(")g Fj(is)g(therefore)f(giv)n(en)h(b)n
-(y)g Ft(")p Fj(ptr)p Ft(_)p Fj(in[co)r(ord][p)r(oin)n(t])p
-Ft(")427 1423 y Fj(\(assuming)27 b(b)r(oth)h(indices)g(are)e
-(zero-based\).)259 1560 y Fd(forw)m(ard)427 1659 y Fj(A)36
-b(non-zero)d(v)-5 b(alue)35 b(indicates)f(that)i(the)f(Mapping's)f
-(forw)n(ard)g(co)r(ordinate)f(transformation)h(is)g(to)h(b)r(e)427
-1759 y(applied,)28 b(while)g(a)f(zero)f(v)-5 b(alue)28
-b(indicates)f(that)h(the)g(in)n(v)n(erse)e(transformation)g(should)i(b)
-r(e)g(used.)259 1896 y Fd(nco)s(ord)p Ft(_)p Fd(out)427
-1996 y Fj(The)j(n)n(um)n(b)r(er)e(of)i(co)r(ordinates)d(b)r(eing)j
-(generated)e(b)n(y)h(the)g(Mapping)g(for)g(eac)n(h)f(output)i(p)r(oin)n
-(t)f(\(i.e.)45 b(the)427 2095 y(n)n(um)n(b)r(er)28 b(of)g(dimensions)g
-(of)h(the)f(space)g(in)g(whic)n(h)h(the)f(output)h(p)r(oin)n(ts)f
-(reside\).)39 b(This)28 b(need)g(not)h(b)r(e)f(the)427
-2195 y(same)f(as)g Ft(")p Fj(nco)r(ord)p Ft(_)p Fj(in)p
-Ft(")p Fj(.)259 2332 y Fd(ptr)p Ft(_)p Fd(out)427 2432
-y Fj(An)19 b(arra)n(y)e(of)h(p)r(oin)n(ters)g(to)h(double,)h(with)f
-Ft(")p Fj(nco)r(ord)p Ft(_)p Fj(out)p Ft(")d Fj(elemen)n(ts.)34
-b(Elemen)n(t)19 b Ft(")p Fj(ptr)p Ft(_)p Fj(out[co)r(ord])p
-Ft(")d Fj(should)427 2531 y(p)r(oin)n(t)23 b(at)f(the)g(\014rst)g
-(elemen)n(t)g(of)g(an)g(arra)n(y)e(of)i(double)g(\(with)h
-Ft(")p Fj(np)r(oin)n(t)p Ft(")e Fj(elemen)n(ts\))i(in)n(to)e(whic)n(h)h
-(the)h(v)-5 b(alues)427 2631 y(of)24 b(co)r(ordinate)e(n)n(um)n(b)r(er)
-h Ft(")p Fj(co)r(ord)p Ft(")f Fj(for)h(eac)n(h)f(output)i
-(\(transformed\))f(p)r(oin)n(t)h(will)g(b)r(e)f(written.)36
-b(The)24 b(v)-5 b(alue)427 2731 y(of)35 b(co)r(ordinate)e(n)n(um)n(b)r
-(er)h Ft(")p Fj(co)r(ord)p Ft(")e Fj(for)i(output)h(p)r(oin)n(t)g(n)n
-(um)n(b)r(er)f Ft(")p Fj(p)r(oin)n(t)p Ft(")g Fj(will)g(therefore)g(b)r
-(e)h(found)f(in)427 2830 y Ft(")p Fj(ptr)p Ft(_)p Fj(out[co)r(ord][p)r
-(oin)n(t])p Ft(")p Fj(.)0 3001 y Fd(Notes:)340 3292 y
-Fi(\017)45 b Fj(If)31 b(the)g(forw)n(ard)e(co)r(ordinate)h
-(transformation)f(is)h(b)r(eing)h(applied,)h(the)f(Mapping)f(supplied)h
-(m)n(ust)g(ha)n(v)n(e)427 3392 y(the)36 b(v)-5 b(alue)34
-b(of)h Ft(")p Fj(nco)r(ord)p Ft(_)p Fj(in)p Ft(")e Fj(for)h(its)h(Nin)h
-(attribute)f(and)g(the)g(v)-5 b(alue)35 b(of)f Ft(")p
-Fj(nco)r(ord)p Ft(_)p Fj(out)p Ft(")f Fj(for)h(its)h(Nout)427
-3491 y(attribute.)i(If)28 b(the)g(in)n(v)n(erse)e(transformation)g(is)i
-(b)r(eing)g(applied,)f(these)h(v)-5 b(alues)27 b(should)g(b)r(e)h(rev)n
-(ersed.)340 3628 y Fi(\017)45 b Fj(This)28 b(routine)f(is)h(not)f(a)n
-(v)-5 b(ailable)26 b(in)i(the)g(F)-7 b(ortran)27 b(77)f(in)n(terface)h
-(to)h(the)g(AST)g(library)-7 b(.)p 0 3836 3780 12 v 0
-3967 a Fz(astT)c(une)783 3968 y Fe(Set)38 b(or)g(get)g(an)h(AST)f
-(global)f(tuning)h(parameter)3316 3967 y Fz(astT)-11
-b(une)0 4165 y Fd(Description:)44 b Fj(This)35 b(function)g(returns)f
-(the)g(curren)n(t)g(v)-5 b(alue)34 b(of)h(an)f(AST)h(global)e(tuning)i
-(parameter,)f(optionally)227 4265 y(storing)27 b(a)g(new)h(v)-5
-b(alue)27 b(for)g(the)h(parameter.)0 4423 y Fd(Synopsis:)121
-b Ft(int)42 b(astTune\()e(const)i(char)g Fi(\003)p Ft(name,)f(int)h
-(value)g(\))0 4581 y Fd(P)m(arameters:)259 4726 y(name)427
-4826 y Fj(The)28 b(name)f(of)h(the)g(tuning)g(parameter)e
-(\(case-insensitiv)n(e\).)259 4963 y Fd(v)-5 b(alue)427
-5062 y Fj(The)22 b(new)g(v)-5 b(alue)22 b(for)f(the)h(tuning)g
-(parameter.)34 b(If)22 b(this)g(is)g(AST)p Ft(__)p Fj(TUNULL,)g(the)g
-(existing)g(curren)n(t)f(v)-5 b(alue)427 5162 y(will)28
-b(b)r(e)g(retained.)0 5333 y Fd(Returned)k(V)-8 b(alue:)259
-5478 y(astT)g(une\(\))427 5577 y Fj(The)29 b(original)e(v)-5
-b(alue)29 b(of)g(the)g(tuning)g(parameter.)39 b(A)29
-b(default)g(v)-5 b(alue)28 b(will)h(b)r(e)h(returned)e(if)h(no)g(v)-5
-b(alue)28 b(has)427 5677 y(b)r(een)g(set)g(for)f(the)h(parameter.)p
-eop end
-%%Page: 374 384
-TeXDict begin 374 383 bop 0 52 a FF(374)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Notes:)340
-624 y Fi(\017)45 b Fj(This)30 b(function)h(attempts)f(to)g(execute)g
-(ev)n(en)g(if)g(the)g(AST)h(error)d(status)i(is)g(set)g(on)f(en)n(try)
--7 b(,)31 b(although)e(no)427 724 y(further)f(error)d(rep)r(ort)i(will)
-h(b)r(e)g(made)f(if)i(it)f(subsequen)n(tly)f(fails)g(under)h(these)f
-(circumstances.)340 847 y Fi(\017)45 b Fj(All)28 b(threads)f(in)h(a)f
-(pro)r(cess)g(share)f(the)i(same)f(AST)h(tuning)g(parameters)e(v)-5
-b(alues.)32 999 y Fd(T)d(uning)31 b(P)m(arameters)i(:)259
-1126 y(Ob)5 b(jectCac)m(hing)427 1225 y Fj(A)38 b(b)r(o)r(olean)f
-(\015ag)g(whic)n(h)h(indicates)f(what)h(should)f(happ)r(en)h(to)g(the)g
-(memory)f(o)r(ccupied)g(b)n(y)h(an)f(AST)427 1325 y(Ob)5
-b(ject)28 b(when)h(the)f(Ob)5 b(ject)29 b(is)f(deleted)g(\(i.e.)40
-b(when)28 b(its)g(reference)g(coun)n(t)g(falls)g(to)g(zero)f(or)g(it)i
-(is)f(deleted)427 1424 y(using)22 b(astDelete\).)36 b(If)23
-b(this)f(is)g(zero,)h(the)g(memory)e(is)h(simply)h(freed)f(using)g(the)
-h(systems)f Ft(")p Fj(free)p Ft(")f Fj(function.)427
-1524 y(If)30 b(it)g(is)f(non-zero,)f(the)i(memory)f(is)g(not)g(freed.)
-42 b(Instead)29 b(a)g(p)r(oin)n(ter)g(to)g(it)h(is)f(stored)g(in)g(a)g
-(p)r(o)r(ol)h(of)f(suc)n(h)427 1624 y(p)r(oin)n(ters,)g(all)g(of)h
-(whic)n(h)f(refer)f(to)i(allo)r(cated)e(but)i(curren)n(tly)e(un)n(used)
-i(blo)r(c)n(ks)e(of)h(memory)-7 b(.)42 b(This)29 b(allo)n(ws)427
-1723 y(AST)c(to)g(sp)r(eed)f(up)h(subsequen)n(t)f(Ob)5
-b(ject)25 b(creation)e(b)n(y)h(re-using)g(previously)f(allo)r(cated)h
-(memory)f(blo)r(c)n(ks)427 1823 y(rather)35 b(than)g(allo)r(cating)g
-(new)g(memory)g(using)g(the)g(systems)g(mallo)r(c)g(function.)61
-b(The)36 b(default)g(v)-5 b(alue)427 1923 y(for)28 b(this)g(parameter)f
-(is)h(zero.)37 b(Setting)28 b(it)g(to)g(a)g(non-zero)e(v)-5
-b(alue)28 b(will)g(result)g(in)g(Ob)5 b(ject)28 b(memory)g(b)r(eing)427
-2022 y(cac)n(hed)h(in)g(future.)42 b(Setting)30 b(it)f(bac)n(k)g(to)g
-(zero)f(causes)g(an)n(y)h(memory)f(blo)r(c)n(ks)g(curren)n(tly)h(in)g
-(the)h(p)r(o)r(ol)f(to)427 2122 y(b)r(e)24 b(freed.)36
-b(Note,)24 b(this)g(tuning)g(parameter)e(only)h(con)n(trols)f(the)i
-(cac)n(hing)e(of)i(memory)f(used)g(to)h(store)e(AST)427
-2221 y(Ob)5 b(jects.)37 b(T)-7 b(o)27 b(cac)n(he)g(other)g(memory)f
-(blo)r(c)n(ks)h(allo)r(cated)g(b)n(y)g(AST,)i(use)e(MemoryCac)n(hing.)
-259 2345 y Fd(MemoryCac)m(hing)427 2444 y Fj(A)f(b)r(o)r(olean)f
-(\015ag)f(similar)g(to)i(Ob)5 b(jectCac)n(hing)24 b(except)h(that)g(it)
-h(con)n(trols)e(cac)n(hing)g(of)h(all)g(memory)f(blo)r(c)n(ks)427
-2544 y(of)40 b(less)f(than)h(300)f(b)n(ytes)g(allo)r(cated)h(b)n(y)f
-(AST)h(\(whether)g(for)g(in)n(ternal)f(or)g(external)g(use\),)k(not)d
-(just)427 2643 y(memory)27 b(used)h(to)f(store)g(AST)h(Ob)5
-b(jects.)p 0 2823 3780 12 v 0 2955 a Fz(astUin)l(terp)213
-b Fe(P)m(erform)36 b(sub-pixel)i(in)m(terp)s(olation)d(on)k(a)f(grid)
-1709 3070 y(of)h(data)3154 2955 y Fz(astUin)l(terp)0
-3216 y Fd(Description:)44 b Fj(This)31 b(is)f(a)h(\014ctitious)f
-(function)h(whic)n(h)g(do)r(es)f(not)h(actually)f(exist.)45
-b(Instead,)31 b(this)g(description)f(con-)227 3315 y(stitutes)c(a)f
-(template)g(so)g(that)g(y)n(ou)f(ma)n(y)h(implemen)n(t)h(a)e(function)i
-(with)g(this)f(in)n(terface)g(for)f(y)n(ourself)g(\(and)i(giv)n(e)227
-3415 y(it)32 b(an)n(y)e(name)g(y)n(ou)h(wish\).)47 b(A)31
-b(p)r(oin)n(ter)f(to)h(suc)n(h)g(a)f(function)i(ma)n(y)e(b)r(e)h
-(passed)f(via)h(the)g Ft(")p Fj(\014n)n(terp)p Ft(")f
-Fj(parameter)227 3515 y(of)25 b(the)g(astResample)p Fl(<)p
-Fj(X)p Fl(>)f Fj(functions)h(\(q.v.\))36 b(in)25 b(order)e(to)i(p)r
-(erform)f(sub-pixel)h(in)n(terp)r(olation)f(during)g(resam-)227
-3614 y(pling)k(of)g(gridded)f(data)g(\(y)n(ou)g(m)n(ust)h(also)f(set)g
-(the)h Ft(")p Fj(in)n(terp)p Ft(")f Fj(parameter)f(of)i(astResample)p
-Fl(<)p Fj(X)p Fl(>)e Fj(to)i(the)g(v)-5 b(alue)227 3714
-y(AST)p Ft(__)p Fj(UINTERP\).)30 b(This)h(allo)n(ws)e(y)n(ou)g(to)i
-(use)f(y)n(our)f(o)n(wn)h(in)n(terp)r(olation)f(algorithm)h(in)g
-(addition)h(to)f(those)227 3813 y(whic)n(h)e(are)e(pre-de\014ned.)227
-3933 y(The)35 b(function)g(in)n(terp)r(olates)e(an)h(input)h(grid)f(of)
-g(data)g(\(and,)i(optionally)-7 b(,)35 b(pro)r(cesses)e(asso)r(ciated)g
-(statistical)227 4033 y(v)-5 b(ariance)27 b(estimates\))g(at)h(a)f(sp)r
-(eci\014ed)h(set)f(of)h(p)r(oin)n(ts.)0 4172 y Fd(Synopsis:)121
-b Ft(void)42 b(astUinterp\()d(int)j(ndim_in,)e(const)i(int)g
-(lbnd_in[],)e(const)h(int)i(ubnd_in[],)c(const)227 4272
-y Fl(<)p Ft(Xtype)p Fl(>)i Ft(in[],)g(const)h Fl(<)p
-Ft(Xtype)p Fl(>)f Ft(in_var[],)e(int)k(npoint,)e(const)g(int)h
-(offset[],)e(const)i(double)227 4372 y Fi(\003)p Ft(const)f(coords[],)f
-(const)i(double)f(params[],)f(int)i(flags,)f Fl(<)p Ft(Xtype)p
-Fl(>)g Ft(badval,)f Fl(<)p Ft(Xtype)p Fl(>)h Ft(out[],)227
-4471 y Fl(<)p Ft(Xtype)p Fl(>)g Ft(out_var[],)e(int)k
-Fi(\003)p Ft(nbad)e(\))0 4611 y Fd(P)m(arameters:)259
-4738 y(ndim)p Ft(_)p Fd(in)427 4837 y Fj(The)28 b(n)n(um)n(b)r(er)f(of)
-h(dimensions)f(in)h(the)g(input)g(grid.)36 b(This)28
-b(will)g(b)r(e)g(at)f(least)h(one.)259 4960 y Fd(lbnd)p
-Ft(_)p Fd(in)427 5060 y Fj(P)n(oin)n(ter)h(to)i(an)f(arra)n(y)e(of)j
-(in)n(tegers,)f(with)h Ft(")p Fj(ndim)p Ft(_)p Fj(in)p
-Ft(")f Fj(elemen)n(ts,)h(con)n(taining)f(the)h(co)r(ordinates)e(of)h
-(the)427 5160 y(cen)n(tre)d(of)h(the)g(\014rst)f(pixel)h(in)g(the)g
-(input)g(grid)f(along)f(eac)n(h)h(dimension.)259 5283
-y Fd(ubnd)p Ft(_)p Fd(in)427 5382 y Fj(P)n(oin)n(ter)i(to)i(an)f(arra)n
-(y)e(of)j(in)n(tegers,)f(with)h Ft(")p Fj(ndim)p Ft(_)p
-Fj(in)p Ft(")f Fj(elemen)n(ts,)h(con)n(taining)f(the)h(co)r(ordinates)e
-(of)h(the)427 5482 y(cen)n(tre)d(of)h(the)g(last)f(pixel)h(in)g(the)g
-(input)g(grid)f(along)f(eac)n(h)h(dimension.)427 5593
-y(Note)f(that)g Ft(")p Fj(lbnd)p Ft(_)p Fj(in)p Ft(")e
-Fj(and)i Ft(")p Fj(ubnd)p Ft(_)p Fj(in)p Ft(")f Fj(together)f(de\014ne)
-i(the)g(shap)r(e,)g(size)f(and)g(co)r(ordinate)f(system)i(of)427
-5693 y(the)i(input)h(grid)e(in)g(the)h(same)f(w)n(a)n(y)g(as)g(they)g
-(do)h(in)g(astResample)p Fl(<)p Fj(X)p Fl(>)p Fj(.)p
-eop end
-%%Page: 375 385
-TeXDict begin 375 384 bop 3643 52 a FF(375)259 351 y
-Fd(in)427 451 y Fj(P)n(oin)n(ter)29 b(to)i(an)f(arra)n(y)-7
-b(,)30 b(with)h(one)f(elemen)n(t)h(for)g(eac)n(h)f(pixel)g(in)h(the)g
-(input)h(grid,)f(con)n(taining)f(the)h(input)427 551
-y(data.)k(This)24 b(will)h(b)r(e)f(the)g(same)g(arra)n(y)d(as)i(w)n(as)
-g(passed)h(to)f(astResample)p Fl(<)p Fj(X)p Fl(>)g Fj(via)g(the)i
-Ft(")p Fj(in)p Ft(")e Fj(parameter.)427 650 y(The)28
-b(n)n(umerical)f(t)n(yp)r(e)g(of)h(this)g(arra)n(y)d(should)j(matc)n(h)
-f(that)h(of)f(the)h(data)f(b)r(eing)h(pro)r(cessed.)259
-788 y Fd(in)p Ft(_)p Fd(v)-5 b(ar)427 887 y Fj(P)n(oin)n(ter)27
-b(to)i(an)g(optional)f(second)g(arra)n(y)e(with)k(the)f(same)f(size)h
-(and)f(t)n(yp)r(e)h(as)f(the)i Ft(")p Fj(in)p Ft(")e
-Fj(arra)n(y)-7 b(.)38 b(If)29 b(giv)n(en,)427 987 y(this)35
-b(will)h(con)n(tain)e(the)h(set)g(of)g(v)-5 b(ariance)33
-b(v)-5 b(alues)35 b(asso)r(ciated)e(with)j(the)f(input)h(data)e(and)h
-(will)g(b)r(e)g(the)427 1087 y(same)27 b(arra)n(y)f(as)g(w)n(as)h
-(passed)g(to)g(astResample)p Fl(<)p Fj(X)p Fl(>)g Fj(via)g(the)h
-Ft(")p Fj(in)p Ft(_)p Fj(v)-5 b(ar)p Ft(")25 b Fj(parameter.)427
-1205 y(If)j(no)g(v)-5 b(ariance)26 b(v)-5 b(alues)27
-b(are)g(b)r(eing)h(pro)r(cessed,)e(this)i(will)g(b)r(e)g(a)f(NULL)h(p)r
-(oin)n(ter.)259 1343 y Fd(np)s(oin)m(t)427 1442 y Fj(The)e(n)n(um)n(b)r
-(er)f(of)g(p)r(oin)n(ts)h(at)f(whic)n(h)g(the)h(input)g(grid)f(is)g(to)
-g(b)r(e)h(in)n(terp)r(olated.)36 b(This)25 b(will)h(b)r(e)g(at)f(least)
-g(one.)259 1580 y Fd(o\013set)427 1680 y Fj(P)n(oin)n(ter)e(to)h(an)f
-(arra)n(y)f(of)i(in)n(tegers)f(with)h Ft(")p Fj(np)r(oin)n(t)p
-Ft(")g Fj(elemen)n(ts.)35 b(F)-7 b(or)24 b(eac)n(h)f(in)n(terp)r
-(olation)g(p)r(oin)n(t,)i(this)f(will)427 1779 y(con)n(tain)g(the)h
-(zero-based)d(index)j(in)f(the)h Ft(")p Fj(out)p Ft(")f
-Fj(\(and)g Ft(")p Fj(out)p Ft(_)p Fj(v)-5 b(ar)p Ft(")p
-Fj(\))23 b(arra)n(y\(s\))g(at)h(whic)n(h)g(the)h(in)n(terp)r(olated)427
-1879 y(v)-5 b(alue)25 b(\(and)g(its)h(v)-5 b(ariance,)24
-b(if)i(required\))e(should)h(b)r(e)g(stored.)36 b(F)-7
-b(or)24 b(example,)h(the)h(in)n(terp)r(olated)e(v)-5
-b(alue)25 b(for)427 1978 y(p)r(oin)n(t)h(n)n(um)n(b)r(er)g
-Ft(")p Fj(p)r(oin)n(t)p Ft(")f Fj(should)h(b)r(e)g(stored)f(in)h
-Ft(")p Fj(out[o\013set[p)r(oin)n(t]])p Ft(")f Fj(\(assuming)g(the)i
-(index)f Ft(")p Fj(p)r(oin)n(t)p Ft(")f Fj(is)427 2078
-y(zero-based\).)259 2216 y Fd(co)s(ords)427 2315 y Fj(An)f(arra)n(y)d
-(of)i(p)r(oin)n(ters)g(to)g(double,)h(with)g Ft(")p Fj(ndim)p
-Ft(_)p Fj(in)p Ft(")f Fj(elemen)n(ts.)36 b(Elemen)n(t)23
-b Ft(")p Fj(co)r(ords[co)r(ord])p Ft(")d Fj(will)j(p)r(oin)n(t)427
-2415 y(at)j(the)g(\014rst)f(elemen)n(t)h(of)g(an)f(arra)n(y)f(of)h
-(double)h(\(with)g Ft(")p Fj(np)r(oin)n(t)p Ft(")g Fj(elemen)n(ts\))g
-(whic)n(h)f(con)n(tains)g(the)h(v)-5 b(alues)427 2515
-y(of)29 b(co)r(ordinate)e(n)n(um)n(b)r(er)h Ft(")p Fj(co)r(ord)p
-Ft(")f Fj(for)h(eac)n(h)f(in)n(terp)r(olation)h(p)r(oin)n(t.)39
-b(The)29 b(v)-5 b(alue)28 b(of)h(co)r(ordinate)e(n)n(um)n(b)r(er)427
-2614 y Ft(")p Fj(co)r(ord)p Ft(")i Fj(for)g(in)n(terp)r(olation)g(p)r
-(oin)n(t)i(n)n(um)n(b)r(er)f Ft(")p Fj(p)r(oin)n(t)p
-Ft(")f Fj(is)h(therefore)f(giv)n(en)h(b)n(y)g Ft(")p
-Fj(co)r(ords[co)r(ord][p)r(oin)n(t])p Ft(")427 2714 y
-Fj(\(assuming)d(b)r(oth)h(indices)g(are)e(zero-based\).)427
-2832 y(If)42 b(an)n(y)f(in)n(terp)r(olation)f(p)r(oin)n(t)i(has)f(an)n
-(y)f(of)i(its)f(co)r(ordinates)f(equal)h(to)g(the)h(v)-5
-b(alue)42 b(AST)p Ft(__)p Fj(BAD)f(\(as)427 2932 y(de\014ned)26
-b(in)f(the)g Ft(")p Fj(ast.h)p Ft(")f Fj(header)g(\014le\),)i(then)f
-(the)g(corresp)r(onding)e(output)j(data)e(\(and)h(v)-5
-b(ariance\))24 b(should)427 3032 y(either)33 b(b)r(e)g(set)f(to)h(the)g
-(v)-5 b(alue)32 b(giv)n(en)g(b)n(y)g Ft(")p Fj(badv)-5
-b(al)p Ft(")p Fj(,)33 b(or)e(left)j(unc)n(hanged,)f(dep)r(ending)g(on)f
-(whether)g(the)427 3131 y(AST)p Ft(__)p Fj(NOBAD)c(\015ag)f(is)g(sp)r
-(eci\014ed)h(b)n(y)f Ft(")p Fj(\015ags)p Ft(")p Fj(.)259
-3269 y Fd(params)427 3368 y Fj(This)45 b(will)f(b)r(e)h(a)f(p)r(oin)n
-(ter)g(to)g(the)h(same)f(arra)n(y)d(as)j(w)n(as)g(giv)n(en)f(via)h(the)
-h Ft(")p Fj(params)p Ft(")d Fj(parameter)h(of)427 3468
-y(astResample)p Fl(<)p Fj(X)p Fl(>)p Fj(.)58 b(Y)-7 b(ou)35
-b(ma)n(y)f(use)g(this)i(to)e(pass)h(an)n(y)f(additional)g(parameter)f
-(v)-5 b(alues)35 b(required)f(b)n(y)427 3568 y(y)n(our)27
-b(in)n(terp)r(olation)f(algorithm.)259 3705 y Fd(\015ags)427
-3805 y Fj(This)37 b(will)h(b)r(e)f(the)h(same)e(v)-5
-b(alue)37 b(as)g(w)n(as)f(giv)n(en)g(via)h(the)g Ft(")p
-Fj(\015ags)p Ft(")e Fj(parameter)h(of)h(astResample)p
-Fl(<)p Fj(X)p Fl(>)p Fj(.)427 3905 y(Y)-7 b(ou)30 b(ma)n(y)f(test)g
-(this)h(v)-5 b(alue)29 b(to)h(pro)n(vide)e(additional)h(con)n(trol)f(o)
-n(v)n(er)g(the)i(op)r(eration)e(of)i(y)n(our)e(resampling)427
-4004 y(algorithm.)52 b(Note)34 b(that)f(the)g(sp)r(ecial)g(\015ag)f(v)
--5 b(alues)33 b(AST)p Ft(__)p Fj(URESAMP1,)h(2,)g(3)e(&)h(4)g(are)f
-(reserv)n(ed)f(for)427 4104 y(y)n(ou)g(to)h(use)f(for)g(y)n(our)g(o)n
-(wn)g(purp)r(oses)f(and)i(will)g(not)f(clash)g(with)h(other)f
-(pre-de\014ned)h(\015ag)e(v)-5 b(alues)32 b(\(see)427
-4203 y(astResample)p Fl(<)p Fj(X)p Fl(>)p Fj(\).)259
-4341 y Fd(badv)-5 b(al)427 4441 y Fj(This)32 b(will)g(b)r(e)g(the)g
-(same)f(v)-5 b(alue)32 b(as)f(w)n(as)f(giv)n(en)h(via)h(the)g
-Ft(")p Fj(badv)-5 b(al)p Ft(")30 b Fj(parameter)g(of)i(astResample)p
-Fl(<)p Fj(X)p Fl(>)p Fj(,)427 4540 y(and)40 b(will)g(ha)n(v)n(e)f(the)h
-(same)g(n)n(umerical)f(t)n(yp)r(e)h(as)f(the)i(data)e(b)r(eing)h(pro)r
-(cessed)f(\(i.e.)75 b(as)39 b(elemen)n(ts)h(of)427 4640
-y(the)34 b Ft(")p Fj(in)p Ft(")e Fj(arra)n(y\).)51 b(It)33
-b(should)g(b)r(e)g(used)g(to)g(test)g(for)f(bad)h(pixels)g(in)g(the)g
-(input)h(grid)e(\(but)i(only)f(if)g(the)427 4739 y(AST)p
-Ft(__)p Fj(USEBAD)26 b(\015ag)f(is)g(set)h(via)f(the)h
-Ft(")p Fj(\015ags)p Ft(")e Fj(parameter\))h(and)g(\(unless)h(the)g(AST)
-p Ft(__)p Fj(NOBAD)g(\015ag)f(is)427 4839 y(set)j(in)g
-Ft(")p Fj(\015ags)p Ft(")p Fj(\))e(for)h(iden)n(tifying)h(bad)f(output)
-h(v)-5 b(alues)27 b(in)h(the)g Ft(")p Fj(out)p Ft(")f
-Fj(\(and)h Ft(")p Fj(out)p Ft(_)p Fj(v)-5 b(ar)p Ft(")p
-Fj(\))26 b(arra)n(y\(s\).)259 4977 y Fd(out)427 5076
-y Fj(P)n(oin)n(ter)33 b(to)h(an)h(arra)n(y)d(with)j(the)f(same)g(n)n
-(umerical)g(t)n(yp)r(e)g(as)g(the)h Ft(")p Fj(in)p Ft(")f
-Fj(arra)n(y)-7 b(,)34 b(in)n(to)g(whic)n(h)g(the)h(in)n(ter-)427
-5176 y(p)r(olated)c(data)f(v)-5 b(alues)31 b(should)f(b)r(e)h
-(returned.)47 b(Note)30 b(that)h(details)g(of)g(the)g(storage)e(order)g
-(and)i(n)n(um)n(b)r(er)427 5276 y(of)i(dimensions)f(of)h(this)g(arra)n
-(y)d(are)i(not)h(required,)g(since)f(the)h Ft(")p Fj(o\013set)p
-Ft(")f Fj(arra)n(y)e(con)n(tains)i(all)g(necessary)427
-5375 y(information)27 b(ab)r(out)h(where)f(eac)n(h)g(returned)g(v)-5
-b(alue)27 b(should)h(b)r(e)g(stored.)427 5494 y(In)38
-b(general,)g(not)g(all)f(elemen)n(ts)g(of)g(this)h(arra)n(y)d(\(or)h
-(the)i Ft(")p Fj(out)p Ft(_)p Fj(v)-5 b(ar)p Ft(")35
-b Fj(arra)n(y)g(b)r(elo)n(w\))j(ma)n(y)e(b)r(e)i(used)f(in)427
-5593 y(an)n(y)i(particular)e(in)n(v)n(o)r(cation)h(of)h(the)g
-(function.)72 b(Those)39 b(whic)n(h)g(are)f(not)h(used)g(should)g(b)r
-(e)g(returned)427 5693 y(unc)n(hanged.)p eop end
-%%Page: 376 386
-TeXDict begin 376 385 bop 0 52 a FF(376)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(out)p
-Ft(_)p Fd(v)-5 b(ar)427 451 y Fj(P)n(oin)n(ter)36 b(to)i(an)g(optional)
-f(arra)n(y)e(with)k(the)f(same)f(t)n(yp)r(e)h(and)g(size)f(as)h(the)g
-Ft(")p Fj(out)p Ft(")f Fj(arra)n(y)-7 b(,)38 b(in)n(to)g(whic)n(h)427
-551 y(v)-5 b(ariance)24 b(estimates)g(for)g(the)g(resampled)g(v)-5
-b(alues)24 b(should)g(b)r(e)h(returned.)35 b(This)25
-b(arra)n(y)d(will)j(only)f(b)r(e)g(giv)n(en)427 650 y(if)k(the)g
-Ft(")p Fj(in)p Ft(_)p Fj(v)-5 b(ar)p Ft(")26 b Fj(arra)n(y)f(has)j
-(also)e(b)r(een)i(giv)n(en.)427 762 y(If)i(giv)n(en,)f(it)h(is)f
-(addressed)f(in)h(exactly)g(the)g(same)g(w)n(a)n(y)f(\(via)h(the)h
-Ft(")p Fj(o\013set)p Ft(")e Fj(arra)n(y\))f(as)i(the)g
-Ft(")p Fj(out)p Ft(")g Fj(arra)n(y)-7 b(.)427 861 y(The)22
-b(v)-5 b(alues)21 b(returned)g(should)h(b)r(e)g(estimates)f(of)h(the)g
-(statistical)f(v)-5 b(ariance)21 b(of)g(the)h(corresp)r(onding)e(v)-5
-b(alues)427 961 y(in)35 b(the)g Ft(")p Fj(out)p Ft(")e
-Fj(arra)n(y)-7 b(,)34 b(on)g(the)h(assumption)f(that)h(all)f(errors)e
-(in)j(input)g(data)f(v)-5 b(alues)34 b(are)f(statistically)427
-1061 y(indep)r(enden)n(t)40 b(and)f(that)g(their)f(v)-5
-b(ariance)38 b(estimates)g(ma)n(y)h(simply)f(b)r(e)i(summed)f(\(with)g
-(appropriate)427 1160 y(w)n(eigh)n(ting)27 b(factors\).)427
-1272 y(If)h(no)g(output)g(v)-5 b(ariance)26 b(estimates)h(are)g
-(required,)g(a)g(NULL)h(p)r(oin)n(ter)f(will)h(b)r(e)g(giv)n(en.)259
-1395 y Fd(n)m(bad)427 1495 y Fj(P)n(oin)n(ter)e(to)h(an)g(in)n(t)g(in)g
-(whic)n(h)g(to)g(return)g(the)g(n)n(um)n(b)r(er)g(of)g(in)n(terp)r
-(olation)g(p)r(oin)n(ts)g(at)g(whic)n(h)g(no)g(v)-5 b(alid)27
-b(in-)427 1595 y(terp)r(olated)22 b(v)-5 b(alue)23 b(could)f(b)r(e)g
-(obtained.)35 b(The)23 b(maxim)n(um)f(v)-5 b(alue)22
-b(that)h(should)f(b)r(e)h(returned)f(is)g Ft(")p Fj(np)r(oin)n(t)p
-Ft(")p Fj(,)427 1694 y(and)28 b(the)g(minim)n(um)g(is)f(zero)g
-(\(indicating)h(that)g(all)f(output)h(v)-5 b(alues)27
-b(w)n(ere)g(successfully)g(obtained\).)0 1847 y Fd(Notes:)340
-2120 y Fi(\017)45 b Fj(The)37 b(data)e(t)n(yp)r(e)i Fl(<)p
-Fj(Xt)n(yp)r(e)p Fl(>)f Fj(indicates)g(the)g(n)n(umerical)g(t)n(yp)r(e)
-g(of)g(the)h(data)f(b)r(eing)g(pro)r(cessed,)i(as)d(for)427
-2220 y(astResample)p Fl(<)p Fj(X)p Fl(>)p Fj(.)340 2343
-y Fi(\017)45 b Fj(This)19 b(function)g(will)f(t)n(ypically)g(b)r(e)h
-(in)n(v)n(ok)n(ed)e(more)g(than)i(once)f(for)f(eac)n(h)h(in)n(v)n(o)r
-(cation)f(of)h(astResample)p Fl(<)p Fj(X)p Fl(>)p Fj(.)340
-2467 y Fi(\017)45 b Fj(If)26 b(an)f(error)e(o)r(ccurs)i(within)h(this)f
-(function,)i(it)e(should)g(use)g(astSetStatus)h(to)f(set)g(the)h(AST)g
-(error)d(status)427 2567 y(to)33 b(an)g(error)e(v)-5
-b(alue.)53 b(This)33 b(will)h(cause)e(an)h(immediate)g(return)g(from)g
-(astResample)p Fl(<)p Fj(X)p Fl(>)p Fj(.)51 b(The)34
-b(error)427 2666 y(v)-5 b(alue)29 b(AST)p Ft(__)p Fj(UINER)g(is)g(a)n
-(v)-5 b(ailable)28 b(for)g(this)i(purp)r(ose,)f(but)h(other)e(v)-5
-b(alues)29 b(ma)n(y)f(also)g(b)r(e)i(used)f(\(e.g.)41
-b(if)427 2766 y(y)n(ou)27 b(wish)h(to)f(distinguish)h(di\013eren)n(t)f
-(t)n(yp)r(es)h(of)g(error\).)p 0 2947 3780 12 v 0 3078
-a Fz(astUk)l(ern1)171 b Fe(1-dimensional)36 b(sub-pixel)i(in)m(terp)s
-(olation)d(k)m(ernel)168 b Fz(astUk)l(ern1)0 3249 y Fd(Description:)44
-b Fj(This)31 b(is)f(a)h(\014ctitious)f(function)h(whic)n(h)g(do)r(es)f
-(not)h(actually)f(exist.)45 b(Instead,)31 b(this)g(description)f(con-)
-227 3348 y(stitutes)c(a)f(template)g(so)g(that)g(y)n(ou)f(ma)n(y)h
-(implemen)n(t)h(a)e(function)i(with)g(this)f(in)n(terface)g(for)f(y)n
-(ourself)g(\(and)i(giv)n(e)227 3448 y(it)g(an)n(y)f(name)h(y)n(ou)f
-(wish\).)37 b(A)26 b(p)r(oin)n(ter)f(to)h(suc)n(h)f(a)h(function)g(ma)n
-(y)f(b)r(e)h(passed)f(via)g(the)i Ft(")p Fj(\014n)n(terp)p
-Ft(")d Fj(parameter)h(of)227 3548 y(the)32 b(astResample)p
-Fl(<)p Fj(X)p Fl(>)e Fj(functions)i(\(q.v.\))49 b(in)31
-b(order)g(to)g(supply)g(a)g(1-dimensional)g(in)n(terp)r(olation)f(k)n
-(ernel)h(to)227 3647 y(the)25 b(algorithm)f(whic)n(h)g(p)r(erforms)g
-(sub-pixel)h(in)n(terp)r(olation)f(during)g(resampling)f(of)i(gridded)f
-(data)g(\(y)n(ou)g(m)n(ust)227 3747 y(also)31 b(set)g(the)h
-Ft(")p Fj(in)n(terp)p Ft(")f Fj(parameter)f(of)h(astResample)p
-Fl(<)p Fj(X)p Fl(>)f Fj(to)i(the)f(v)-5 b(alue)32 b(AST)p
-Ft(__)p Fj(UKERN1\).)48 b(This)31 b(allo)n(ws)227 3846
-y(y)n(ou)c(to)h(use)f(y)n(our)f(o)n(wn)h(in)n(terp)r(olation)g(k)n
-(ernel)g(in)h(addition)f(to)h(those)f(whic)n(h)g(are)g(pre-de\014ned.)
-227 3966 y(The)21 b(function)h(calculates)e(the)h(v)-5
-b(alue)21 b(of)g(a)f(1-dimensional)g(sub-pixel)g(in)n(terp)r(olation)g
-(k)n(ernel.)34 b(This)21 b(determines)227 4066 y(ho)n(w)31
-b(the)i(w)n(eigh)n(t)e(giv)n(en)g(to)h(neigh)n(b)r(ouring)e(pixels)i
-(in)g(calculating)f(an)g(in)n(terp)r(olated)h(v)-5 b(alue)31
-b(dep)r(ends)i(on)e(the)227 4166 y(pixel's)f(o\013set)g(from)g(the)h
-(in)n(terp)r(olation)e(p)r(oin)n(t.)45 b(In)30 b(more)f(than)i(one)e
-(dimension,)i(the)g(w)n(eigh)n(t)e(assigned)g(to)h(a)227
-4265 y(pixel)k(is)h(formed)e(b)n(y)h(ev)-5 b(aluating)34
-b(this)g(1-dimensional)f(k)n(ernel)g(using)h(the)h(o\013set)f(along)f
-(eac)n(h)g(dimension)h(in)227 4365 y(turn.)j(The)28 b(pro)r(duct)g(of)f
-(the)h(returned)f(v)-5 b(alues)27 b(is)h(then)g(used)g(as)f(the)g
-(pixel)h(w)n(eigh)n(t.)0 4505 y Fd(Synopsis:)121 b Ft(void)42
-b(astUkern1\()d(double)i(offset,)g(const)h(double)f(params[],)f(int)i
-(flags,)f(double)g Fi(\003)p Ft(value)227 4605 y(\))0
-4745 y Fd(P)m(arameters:)259 4872 y(o\013set)427 4972
-y Fj(This)22 b(will)g(b)r(e)g(the)g(o\013set)g(of)f(the)h(pixel)g(from)
-g(the)g(in)n(terp)r(olation)e(p)r(oin)n(t,)k(measured)c(in)i(pixels.)35
-b(This)22 b(v)-5 b(alue)427 5071 y(ma)n(y)29 b(b)r(e)h(p)r(ositiv)n(e)g
-(or)e(negativ)n(e,)h(but)i(for)e(most)g(practical)g(in)n(terp)r
-(olation)g(sc)n(hemes)g(its)h(sign)f(should)g(b)r(e)427
-5171 y(ignored.)259 5295 y Fd(params)427 5394 y Fj(This)45
-b(will)f(b)r(e)h(a)f(p)r(oin)n(ter)g(to)g(the)h(same)f(arra)n(y)d(as)j
-(w)n(as)g(giv)n(en)f(via)h(the)h Ft(")p Fj(params)p Ft(")d
-Fj(parameter)h(of)427 5494 y(astResample)p Fl(<)p Fj(X)p
-Fl(>)p Fj(.)58 b(Y)-7 b(ou)35 b(ma)n(y)f(use)g(this)i(to)e(pass)h(an)n
-(y)f(additional)g(parameter)f(v)-5 b(alues)35 b(required)f(b)n(y)427
-5593 y(y)n(our)26 b(k)n(ernel,)h(but)h(note)f(that)h
-Ft(")p Fj(params[0])p Ft(")d Fj(will)i(already)f(ha)n(v)n(e)h(b)r(een)g
-(used)h(to)f(sp)r(ecify)h(the)g(n)n(um)n(b)r(er)f(of)427
-5693 y(neigh)n(b)r(ouring)g(pixels)g(whic)n(h)h(con)n(tribute)f(to)g
-(the)h(in)n(terp)r(olated)f(v)-5 b(alue.)p eop end
-%%Page: 377 387
-TeXDict begin 377 386 bop 3643 52 a FF(377)259 351 y
-Fd(\015ags)427 451 y Fj(This)25 b(will)f(b)r(e)h(the)g(same)e(v)-5
-b(alue)25 b(as)e(w)n(as)h(giv)n(en)f(via)h(the)h Ft(")p
-Fj(\015ags)p Ft(")d Fj(parameter)h(of)h(astResample)p
-Fl(<)p Fj(X)p Fl(>)p Fj(.)35 b(Y)-7 b(ou)427 551 y(ma)n(y)31
-b(test)g(this)h(v)-5 b(alue)31 b(to)g(pro)n(vide)g(additional)f(con)n
-(trol)g(o)n(v)n(er)g(the)h(op)r(eration)g(of)g(y)n(our)f(function.)49
-b(Note)427 650 y(that)27 b(the)g(sp)r(ecial)f(\015ag)g(v)-5
-b(alues)27 b(AST)p Ft(__)p Fj(URESAMP1,)e(2,)i(3)f(&)g(4)h(are)e
-(reserv)n(ed)g(for)h(y)n(ou)g(to)g(use)h(for)f(y)n(our)427
-750 y(o)n(wn)h(purp)r(oses)g(and)g(will)h(not)g(clash)f(with)h(other)f
-(pre-de\014ned)g(\015ag)g(v)-5 b(alues)27 b(\(see)h(astResample)p
-Fl(<)p Fj(X)p Fl(>)p Fj(\).)259 882 y Fd(v)-5 b(alue)427
-981 y Fj(P)n(oin)n(ter)22 b(to)h(a)f(double)h(to)g(receiv)n(e)f(the)i
-(calculated)e(k)n(ernel)g(v)-5 b(alue,)24 b(whic)n(h)f(ma)n(y)g(b)r(e)g
-(p)r(ositiv)n(e)g(or)f(negativ)n(e.)0 1142 y Fd(Notes:)340
-1424 y Fi(\017)45 b Fj(Not)29 b(all)g(functions)g(mak)n(e)f(go)r(o)r(d)
-g(in)n(terp)r(olation)h(k)n(ernels.)39 b(In)29 b(general,)f(acceptable)
-g(k)n(ernels)g(tend)h(to)g(b)r(e)427 1523 y(symmetrical)h(ab)r(out)h
-(zero,)g(to)g(ha)n(v)n(e)f(a)g(p)r(ositiv)n(e)h(p)r(eak)g(\(usually)f
-(unit)n(y\))i(at)f(zero,)g(and)f(to)h(ev)-5 b(aluate)31
-b(to)427 1623 y(zero)24 b(whenev)n(er)g(the)h(pixel)g(o\013set)g(has)g
-(an)n(y)f(other)g(in)n(tegral)g(v)-5 b(alue)25 b(\(this)g(ensures)g
-(that)g(the)g(in)n(terp)r(olated)427 1723 y(v)-5 b(alues)26
-b(pass)g(through)g(the)g(original)f(data\).)37 b(An)26
-b(in)n(terp)r(olation)g(k)n(ernel)g(ma)n(y)f(or)h(ma)n(y)g(not)g(ha)n
-(v)n(e)f(regions)427 1822 y(with)j(negativ)n(e)f(v)-5
-b(alues.)36 b(Y)-7 b(ou)28 b(should)f(consult)h(a)f(go)r(o)r(d)g(b)r(o)
-r(ok)g(on)g(image)g(pro)r(cessing)f(for)i(more)e(details.)340
-1954 y Fi(\017)45 b Fj(If)26 b(an)f(error)e(o)r(ccurs)i(within)h(this)f
-(function,)i(it)e(should)g(use)g(astSetStatus)h(to)f(set)g(the)h(AST)g
-(error)d(status)427 2054 y(to)33 b(an)g(error)e(v)-5
-b(alue.)53 b(This)33 b(will)h(cause)e(an)h(immediate)g(return)g(from)g
-(astResample)p Fl(<)p Fj(X)p Fl(>)p Fj(.)51 b(The)34
-b(error)427 2154 y(v)-5 b(alue)28 b(AST)p Ft(__)p Fj(UK1ER)f(is)i(a)n
-(v)-5 b(ailable)27 b(for)g(this)i(purp)r(ose,)f(but)h(other)f(v)-5
-b(alues)27 b(ma)n(y)h(also)f(b)r(e)i(used)f(\(e.g.)39
-b(if)427 2253 y(y)n(ou)27 b(wish)h(to)f(distinguish)h(di\013eren)n(t)f
-(t)n(yp)r(es)h(of)g(error\).)p 0 2451 3780 12 v 0 2582
-a Fz(astUnformat)170 b Fe(Read)39 b(a)g(formatted)d(co)s(ordinate)g(v)
--7 b(alue)38 b(for)1562 2682 y(a)g(F)-10 b(rame)39 b(axis)3038
-2582 y Fz(astUnformat)0 2850 y Fd(Description:)44 b Fj(This)24
-b(function)g(reads)e(a)h(formatted)h(co)r(ordinate)e(v)-5
-b(alue)23 b(\(giv)n(en)g(as)g(a)g(c)n(haracter)f(string\))h(for)g(a)g
-(F)-7 b(rame)227 2950 y(axis)26 b(and)h(returns)f(the)h(equiv)-5
-b(alen)n(t)26 b(n)n(umerical)g(\(double\))h(v)-5 b(alue.)36
-b(It)27 b(also)f(returns)g(the)h(n)n(um)n(b)r(er)f(of)h(c)n(haracters)
-227 3049 y(read)g(from)g(the)h(string.)227 3174 y(The)39
-b(principle)f(use)g(of)h(this)f(function)h(is)g(in)f(deco)r(ding)g
-(user-supplied)g(input)h(whic)n(h)f(con)n(tains)g(formatted)227
-3273 y(co)r(ordinate)31 b(v)-5 b(alues.)49 b(F)-7 b(ree-format)30
-b(input)j(is)e(supp)r(orted)h(as)f(far)g(as)g(p)r(ossible.)49
-b(If)32 b(input)h(is)e(am)n(biguous,)h(it)g(is)227 3373
-y(in)n(terpreted)h(with)i(reference)d(to)i(the)g(F)-7
-b(rame's)33 b(attributes)h(\(in)g(particular,)g(the)g(F)-7
-b(ormat)33 b(string)g(asso)r(ciated)227 3472 y(with)28
-b(the)g(F)-7 b(rame's)27 b(axis\).)37 b(This)27 b(function)h(is,)g(in)g
-(essence,)f(the)h(in)n(v)n(erse)e(of)h(astF)-7 b(ormat.)0
-3621 y Fd(Synopsis:)121 b Ft(int)42 b(astUnformat\()d(AstFrame)h
-Fi(\003)p Ft(this,)h(int)h(axis,)g(const)g(char)f Fi(\003)p
-Ft(string,)g(double)g Fi(\003)p Ft(value)227 3721 y(\))0
-3869 y Fd(P)m(arameters:)259 4005 y(this)427 4104 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rame.)259 4236 y Fd(axis)427 4336
-y Fj(The)34 b(n)n(um)n(b)r(er)f(of)g(the)h(F)-7 b(rame)33
-b(axis)f(for)h(whic)n(h)g(a)g(co)r(ordinate)f(v)-5 b(alue)34
-b(is)f(to)g(b)r(e)h(read)e(\(axis)h(n)n(um)n(b)r(ering)427
-4435 y(starts)27 b(at)h(1)f(for)g(the)h(\014rst)f(axis\).)259
-4567 y Fd(string)427 4667 y Fj(P)n(oin)n(ter)22 b(to)h(a)g(n)n
-(ull-terminated)f(c)n(haracter)f(string)i(con)n(taining)f(the)i
-(formatted)e(co)r(ordinate)g(v)-5 b(alue.)36 b(This)427
-4767 y(string)19 b(ma)n(y)h(con)n(tain)f(additional)g(information)g
-(follo)n(wing)g(the)h(v)-5 b(alue)20 b(to)g(b)r(e)g(read,)h(in)f(whic)n
-(h)g(case)f(reading)427 4866 y(stops)24 b(at)g(the)g(\014rst)g(c)n
-(haracter)e(whic)n(h)i(cannot)g(b)r(e)h(in)n(terpreted)e(as)h(part)f
-(of)i(the)f(v)-5 b(alue.)36 b(An)n(y)24 b(white)g(space)427
-4966 y(b)r(efore)k(or)e(after)i(the)g(v)-5 b(alue)27
-b(is)g(discarded.)259 5098 y Fd(v)-5 b(alue)427 5197
-y Fj(P)n(oin)n(ter)26 b(to)i(a)f(double)g(in)h(whic)n(h)g(the)g(co)r
-(ordinate)e(v)-5 b(alue)28 b(read)e(will)i(b)r(e)g(returned.)0
-5358 y Fd(Class)j(Applicabilit)m(y:)259 5494 y(F)-8 b(rame)427
-5593 y Fj(This)27 b(function)h(applies)f(to)g(all)g(F)-7
-b(rames.)36 b(See)27 b(the)h Ft(")p Fj(F)-7 b(rame)26
-b(Input)i(F)-7 b(ormat)p Ft(")26 b Fj(section)h(b)r(elo)n(w)g(for)g
-(details)427 5693 y(of)h(the)g(input)g(formats)f(accepted)g(b)n(y)h(a)f
-(basic)g(F)-7 b(rame.)p eop end
-%%Page: 378 388
-TeXDict begin 378 387 bop 0 52 a FF(378)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(SkyF)-8
-b(rame)427 451 y Fj(The)35 b(SkyF)-7 b(rame)34 b(class)f(re-de\014nes)h
-(the)h(input)g(format)f(to)h(b)r(e)g(suitable)f(for)g(represen)n(ting)f
-(angles)h(and)427 551 y(times,)40 b(with)d(the)g(resulting)f(co)r
-(ordinate)f(v)-5 b(alue)37 b(returned)f(in)h(radians.)63
-b(See)36 b(the)h Ft(")p Fj(SkyF)-7 b(rame)36 b(Input)427
-650 y(F)-7 b(ormat)p Ft(")27 b Fj(section)g(b)r(elo)n(w)g(for)g
-(details)h(of)f(the)h(formats)f(accepted.)259 785 y Fd(F)-8
-b(rameSet)427 884 y Fj(The)26 b(input)g(formats)f(accepted)h(b)n(y)f(a)
-g(F)-7 b(rameSet)26 b(are)e(determined)i(b)n(y)f(its)h(curren)n(t)f(F)
--7 b(rame)25 b(\(as)g(sp)r(eci\014ed)427 984 y(b)n(y)j(the)g(Curren)n
-(t)e(attribute\).)0 1149 y Fd(Returned)32 b(V)-8 b(alue:)259
-1289 y(astUnformat\(\))427 1389 y Fj(The)28 b(n)n(um)n(b)r(er)f(of)g(c)
-n(haracters)e(read)h(from)h(the)h(string)f(in)g(order)f(to)h(obtain)g
-(the)h(co)r(ordinate)e(v)-5 b(alue.)37 b(This)427 1488
-y(will)28 b(include)g(an)n(y)f(white)h(space)f(whic)n(h)g(o)r(ccurs)g
-(b)r(efore)g(or)g(after)g(the)h(v)-5 b(alue.)0 1654 y
-Fd(Notes:)340 1940 y Fi(\017)45 b Fj(A)37 b(function)f(v)-5
-b(alue)36 b(of)g(zero)f(\(and)h(no)g(co)r(ordinate)f(v)-5
-b(alue\))36 b(will)h(b)r(e)f(returned,)i(without)e(error,)h(if)f(the)
-427 2039 y(string)27 b(supplied)h(do)r(es)f(not)h(con)n(tain)f(a)g
-(suitably)g(formatted)h(v)-5 b(alue.)340 2174 y Fi(\017)45
-b Fj(Bew)n(are)20 b(that)h(it)g(is)g(p)r(ossible)g(for)g(a)f
-(formatting)h(error)e(part-w)n(a)n(y)g(through)h(an)h(input)g(string)g
-(to)g(terminate)427 2274 y(input)29 b(b)r(efore)e(it)h(has)f(b)r(een)h
-(completely)f(read,)g(but)h(to)g(yield)f(a)g(co)r(ordinate)g(v)-5
-b(alue)27 b(that)h(app)r(ears)f(v)-5 b(alid.)427 2373
-y(F)e(or)29 b(example,)g(if)h(a)f(user)g(t)n(yp)r(es)g
-Ft(")p Fj(1.5r6)p Ft(")e Fj(instead)i(of)g Ft(")p Fj(1.5e6)p
-Ft(")p Fj(,)e(the)j Ft(")p Fj(r)p Ft(")e Fj(will)i(terminate)f(input,)h
-(giving)427 2473 y(an)c(incorrect)f(co)r(ordinate)g(v)-5
-b(alue)26 b(of)h(1.5.)35 b(It)27 b(is)f(therefore)f(most)h(imp)r(ortan)
-n(t)g(to)g(c)n(hec)n(k)f(the)i(return)f(v)-5 b(alue)427
-2572 y(of)28 b(this)g(function)g(to)f(ensure)g(that)h(the)g(correct)e
-(n)n(um)n(b)r(er)i(of)f(c)n(haracters)f(ha)n(v)n(e)g(b)r(een)i(read.)
-340 2707 y Fi(\017)45 b Fj(An)33 b(error)e(will)h(result)g(if)h(a)f(v)
--5 b(alue)33 b(is)f(read)g(whic)n(h)g(app)r(ears)f(to)h(ha)n(v)n(e)g
-(the)g(correct)f(format,)j(but)f(whic)n(h)427 2807 y(cannot)d(b)r(e)g
-(con)n(v)n(erted)f(in)n(to)h(a)g(v)-5 b(alid)30 b(co)r(ordinate)f(v)-5
-b(alue)30 b(\(for)g(instance,)g(b)r(ecause)g(the)h(v)-5
-b(alue)30 b(of)g(one)f(or)427 2906 y(more)e(of)h(its)f(\014elds)h(is)f
-(in)n(v)-5 b(alid\).)340 3041 y Fi(\017)45 b Fj(The)e(string)f
-Ft(")p Fl(<)p Fj(bad)p Fl(>)p Ft(")e Fj(is)j(recognised)d(as)i(a)g(sp)r
-(ecial)g(case)g(and)g(will)h(yield)g(the)f(co)r(ordinate)g(v)-5
-b(alue)427 3140 y(AST)p Ft(__)p Fj(BAD)32 b(without)f(error.)47
-b(The)31 b(test)h(for)f(this)g(string)g(is)g(case-insensitiv)n(e)f(and)
-h(also)f(p)r(ermits)i(em-)427 3240 y(b)r(edded)d(white)f(space.)340
-3375 y Fi(\017)45 b Fj(A)33 b(function)f(result)g(of)g(zero)f(will)h(b)
-r(e)h(returned)e(and)h(no)g(co)r(ordinate)f(v)-5 b(alue)31
-b(will)i(b)r(e)f(returned)g(via)f(the)427 3474 y Ft(")p
-Fj(v)-5 b(alue)p Ft(")30 b Fj(p)r(oin)n(ter)g(if)h(this)f(function)h
-(is)g(in)n(v)n(ok)n(ed)e(with)i(the)f(AST)h(error)e(status)h(set,)h(or)
-f(if)g(it)h(should)g(fail)427 3574 y(for)c(an)n(y)g(reason.)-2
-3739 y Fd(F)-8 b(rame)32 b(Input)h(F)-8 b(ormat)n(:)227
-3885 y Fj(The)28 b(input)g(format)f(accepted)h(for)f(a)g(basic)g(F)-7
-b(rame)27 b(axis)g(is)g(as)g(follo)n(ws:)340 4025 y Fi(\017)45
-b Fj(An)28 b(optional)f(sign,)g(follo)n(w)n(ed)g(b)n(y:)340
-4160 y Fi(\017)45 b Fj(A)28 b(sequence)f(of)h(one)f(or)g(more)g(digits)
-g(p)r(ossibly)g(con)n(taining)g(a)g(decimal)g(p)r(oin)n(t,)h(follo)n(w)
-n(ed)f(b)n(y:)340 4294 y Fi(\017)45 b Fj(An)28 b(optional)f(exp)r(onen)
-n(t)h(\014eld.)340 4429 y Fi(\017)45 b Fj(The)28 b(exp)r(onen)n(t)f
-(\014eld,)h(if)g(presen)n(t,)f(consists)g(of)h Ft(")p
-Fj(E)p Ft(")e Fj(or)h Ft(")p Fj(e)p Ft(")g Fj(follo)n(w)n(ed)f(b)n(y)h
-(a)h(p)r(ossibly)f(signed)g(in)n(teger.)227 4594 y(Examples)g(of)g
-(acceptable)g(F)-7 b(rame)27 b(input)i(formats)d(include:)340
-4734 y Fi(\017)45 b Fj(99)340 4869 y Fi(\017)g Fj(1.25)340
-5003 y Fi(\017)g Fj(-1.6)340 5138 y Fi(\017)g Fj(1E8)340
-5272 y Fi(\017)g Fj(-.99e-17)340 5407 y Fi(\017)g Fl(<)p
-Fj(bad)p Fl(>)-2 5572 y Fd(SkyF)-8 b(rame)33 b(Input)g(F)-8
-b(ormat)n(:)227 5718 y Fj(The)28 b(input)g(format)f(accepted)h(for)f(a)
-g(SkyF)-7 b(rame)27 b(axis)g(is)g(as)g(follo)n(ws:)p
-eop end
-%%Page: 379 389
-TeXDict begin 379 388 bop 3643 52 a FF(379)340 351 y
-Fi(\017)45 b Fj(An)32 b(optional)e(sign,)i(follo)n(w)n(ed)e(b)n(y)g(b)r
-(et)n(w)n(een)h(one)g(and)g(three)g(\014elds)g(represen)n(ting)e
-(either)i(degrees,)g(arc-)427 451 y(min)n(utes,)d(arc-seconds)d(or)i
-(hours,)g(min)n(utes,)h(seconds)e(\(e.g.)37 b Ft(")p
-Fj(-12)26 b(42)h(03)p Ft(")p Fj(\).)340 582 y Fi(\017)45
-b Fj(Eac)n(h)22 b(\014eld)h(should)f(consist)g(of)h(a)f(sequence)h(of)f
-(one)h(or)f(more)f(digits,)j(whic)n(h)f(ma)n(y)f(include)h(leading)f
-(zeros.)427 681 y(A)n(t)29 b(most)f(one)g(\014eld)h(ma)n(y)e(con)n
-(tain)h(a)g(decimal)g(p)r(oin)n(t,)h(in)f(whic)n(h)g(case)g(it)h(is)f
-(tak)n(en)f(to)i(b)r(e)f(the)h(\014nal)f(\014eld)427
-781 y(\(e.g.)55 b(decimal)34 b(degrees)e(migh)n(t)i(b)r(e)g(giv)n(en)f
-(as)g Ft(")p Fj(124.707)p Ft(")p Fj(,)f(while)h(degrees)g(and)g
-(decimal)h(arc-min)n(utes)427 880 y(migh)n(t)28 b(b)r(e)g(giv)n(en)f
-(as)g Ft(")p Fj(-13)e(33.8)p Ft(")p Fj(\).)340 1011 y
-Fi(\017)45 b Fj(The)29 b(\014rst)g(\014eld)g(giv)n(en)g(ma)n(y)f(tak)n
-(e)g(an)n(y)g(v)-5 b(alue,)30 b(allo)n(wing)d(angles)h(and)h(times)g
-(outside)g(the)h(con)n(v)n(en)n(tional)427 1111 y(ranges)g(to)h(b)r(e)g
-(represen)n(ted.)46 b(Ho)n(w)n(ev)n(er,)30 b(subsequen)n(t)h(\014elds)g
-(m)n(ust)g(ha)n(v)n(e)f(v)-5 b(alues)31 b(of)g(less)f(than)i(60)e
-(\(e.g.)427 1210 y Ft(")p Fj(720)c(45)h(31)p Ft(")f Fj(is)i(v)-5
-b(alid,)27 b(whereas)g Ft(")p Fj(11)f(45)h(61)p Ft(")f
-Fj(is)h(not\).)340 1341 y Fi(\017)45 b Fj(Fields)30 b(ma)n(y)g(b)r(e)g
-(separated)f(b)n(y)h(white)g(space)f(or)g(b)n(y)h Ft(")p
-Fj(:)p Ft(")f Fj(\(colon\),)i(but)f(the)h(c)n(hoice)e(of)h(separator)d
-(m)n(ust)427 1441 y(b)r(e)34 b(used)f(consisten)n(tly)f(throughout)h
-(the)g(v)-5 b(alue.)53 b(Additional)33 b(white)h(space)e(ma)n(y)h(b)r
-(e)g(presen)n(t)g(around)427 1540 y(\014elds)28 b(and)f(separators)e
-(\(e.g.)37 b Ft(")p Fj(-)27 b(2:)37 b(04)26 b(:)37 b(7.1)p
-Ft(")p Fj(\).)340 1671 y Fi(\017)45 b Fj(The)35 b(follo)n(wing)e
-(\014eld)i(iden)n(ti\014cation)f(c)n(haracters)e(ma)n(y)h(b)r(e)i(used)
-f(as)g(separators)e(to)i(replace)f(either)i(of)427 1771
-y(those)d(ab)r(o)n(v)n(e)f(\(or)h(ma)n(y)f(b)r(e)i(app)r(ended)g(to)f
-(the)h(\014nal)f(\014eld\),)i(in)e(order)f(to)h(iden)n(tify)h(the)g
-(\014eld)g(to)f(whic)n(h)427 1870 y(they)g(are)e(app)r(ended:)45
-b Ft(")p Fj(d)p Ft(")p Fj(|degrees;)32 b Ft(")p Fj(h)p
-Ft(")p Fj(|hours;)f Ft(")p Fj(m)p Ft(")p Fj(|min)n(utes)g(of)h(arc)e
-(or)h(time;)j Ft(")p Fj(s)p Ft(")p Fj(|seconds)427 1970
-y(of)24 b(arc)f(or)g(time;)i Ft(")p Fj(')p Ft(")f Fj(\(single)f
-(quote\)|min)n(utes)h(of)g(arc;)g Ft(""")f Fj(\(double)h
-(quote\)|seconds)f(of)h(arc.)34 b(Either)427 2069 y(lo)n(w)n(er)e(or)h
-(upp)r(er)h(case)f(ma)n(y)g(b)r(e)h(used.)56 b(Fields)33
-b(m)n(ust)h(b)r(e)g(giv)n(en)f(in)h(order)f(of)g(decreasing)g
-(signi\014cance)427 2169 y(\(e.g.)k Ft(")p Fj(-11D)26
-b(3')i(14.4)p Ft("")d Fj(or)i Ft(")p Fj(22h14m11.2s)p
-Ft(")p Fj(\).)340 2300 y Fi(\017)45 b Fj(The)22 b(presence)e(of)h(an)n
-(y)g(of)g(the)h(\014eld)f(iden)n(ti\014cation)g(c)n(haracters)e
-Ft(")p Fj(d)p Ft(")p Fj(,)j Ft(")p Fj(')p Ft(")f Fj(\(single)g(quote\))
-g(or)f Ft(""")g Fj(\(double)427 2399 y(quote\))g(indicates)f(that)h
-(the)f(v)-5 b(alue)20 b(is)f(to)g(b)r(e)h(in)n(terpreted)f(as)g(an)g
-(angle.)33 b(Con)n(v)n(ersely)-7 b(,)19 b(the)h(presence)f(of)g
-Ft(")p Fj(h)p Ft(")427 2499 y Fj(indicates)27 b(that)h(it)f(is)g(to)g
-(b)r(e)h(in)n(terpreted)e(as)h(a)g(time)g(\(with)h(24)e(hours)h
-(corresp)r(onding)e(to)i(360)f(degrees\).)427 2599 y(Incompatible)j
-(angle/time)f(iden)n(ti\014cation)h(c)n(haracters)d(ma)n(y)j(not)f(b)r
-(e)i(mixed)f(\(e.g.)40 b Ft(")p Fj(10h14'3)p Ft("")26
-b Fj(is)j(not)427 2698 y(v)-5 b(alid\).)35 b(The)21 b(remaining)e
-(\014eld)i(iden)n(ti\014cation)f(c)n(haracters)f(and)h(separators)e(do)
-i(not)h(sp)r(ecify)f(a)g(preference)427 2798 y(for)27
-b(an)h(angle)e(or)h(a)g(time)h(and)g(ma)n(y)f(b)r(e)h(used)f(with)h
-(either.)340 2929 y Fi(\017)45 b Fj(If)23 b(no)f(preference)f(for)h(an)
-g(angle)f(or)h(a)g(time)g(is)h(expressed)e(an)n(ywhere)f(within)j(the)g
-(v)-5 b(alue,)23 b(it)g(is)f(in)n(terpreted)427 3028
-y(as)33 b(an)g(angle)g(if)h(the)g(F)-7 b(ormat)33 b(attribute)h(string)
-e(asso)r(ciated)h(with)h(the)f(SkyF)-7 b(rame)33 b(axis)g(generates)f
-(an)427 3128 y(angle)25 b(and)g(as)g(a)g(time)h(otherwise.)36
-b(This)25 b(ensures)g(that)h(v)-5 b(alues)25 b(pro)r(duced)g(b)n(y)g
-(astF)-7 b(ormat)25 b(are)f(correctly)427 3227 y(in)n(terpreted)j(b)n
-(y)h(astUnformat.)340 3358 y Fi(\017)45 b Fj(Fields)37
-b(ma)n(y)g(b)r(e)g(omitted,)j(in)d(whic)n(h)g(case)f(they)h(default)h
-(to)f(zero.)64 b(The)37 b(remaining)f(\014elds)h(ma)n(y)f(b)r(e)427
-3458 y(iden)n(ti\014ed)e(b)n(y)f(using)g(appropriate)f(\014eld)h(iden)n
-(ti\014cation)h(c)n(haracters)d(\(see)i(ab)r(o)n(v)n(e\))f(and/or)g(b)n
-(y)h(adding)427 3557 y(extra)28 b(colon)g(separators)f(\(e.g.)40
-b Ft(")p Fj(-05m13s)p Ft(")26 b Fj(is)i(equiv)-5 b(alen)n(t)29
-b(to)g Ft(")p Fj(-:05:13)p Ft(")p Fj(\).)38 b(If)29 b(a)f(\014eld)i(is)
-e(not)h(iden)n(ti\014ed)427 3657 y(explicitly)-7 b(,)40
-b(it)e(is)g(assumed)e(that)i(adjacen)n(t)f(\014elds)g(ha)n(v)n(e)g(b)r
-(een)h(giv)n(en,)h(after)e(taking)f(accoun)n(t)h(of)g(an)n(y)427
-3757 y(extra)31 b(separator)e(c)n(haracters)h(\(e.g.)49
-b Ft(")p Fj(14:25.4s)p Ft(")28 b Fj(sp)r(eci\014es)k(min)n(utes)g(and)f
-(seconds,)h(while)g Ft(")p Fj(14::25.4s)p Ft(")427 3856
-y Fj(sp)r(eci\014es)c(degrees)e(and)h(seconds\).)340
-3987 y Fi(\017)45 b Fj(If)37 b(\014elds)g(are)f(omitted)h(in)g(suc)n(h)
-f(a)g(w)n(a)n(y)g(that)g(the)h(remaining)f(ones)g(cannot)g(b)r(e)h
-(iden)n(ti\014ed)h(uniquely)427 4087 y(\(e.g.)69 b Ft(")p
-Fj(01:02)p Ft(")p Fj(\),)38 b(then)h(the)f(\014rst)g(\014eld)g
-(\(either)h(giv)n(en)e(explicitly)h(or)g(implied)g(b)n(y)g(an)g(extra)f
-(leading)427 4186 y(colon)25 b(separator\))e(is)i(tak)n(en)g(to)g(b)r
-(e)g(the)h(most)f(signi\014can)n(t)g(\014eld)g(that)h(astF)-7
-b(ormat)24 b(w)n(ould)h(pro)r(duce)f(when)427 4286 y(formatting)39
-b(a)h(v)-5 b(alue)39 b(\(using)h(the)g(F)-7 b(ormat)38
-b(attribute)i(asso)r(ciated)f(with)h(the)g(SkyF)-7 b(rame)38
-b(axis\).)73 b(By)427 4385 y(default,)46 b(this)41 b(means)g(that)h
-(the)g(\014rst)f(\014eld)h(will)g(normally)e(b)r(e)i(in)n(terpreted)f
-(as)g(degrees)f(or)g(hours.)427 4485 y(Ho)n(w)n(ev)n(er,)34
-b(if)h(this)f(do)r(es)g(not)g(result)g(in)g(consisten)n(t)g(\014eld)g
-(iden)n(ti\014cation,)i(then)f(the)f(last)g(\014eld)g(\(either)427
-4585 y(giv)n(en)f(explicitly)g(or)g(implied)h(b)n(y)f(an)g(extra)g
-(trailing)g(colon)f(separator\))g(is)h(tak)n(en)g(to)g(to)g(b)r(e)h
-(the)g(least)427 4684 y(signi\014can)n(t)27 b(\014eld)h(that)g(astF)-7
-b(ormat)26 b(w)n(ould)i(pro)r(duce.)227 4844 y(This)g(\014nal)f(con)n
-(v)n(en)n(tion)f(is)h(in)n(tended)h(to)g(ensure)e(that)i(v)-5
-b(alues)27 b(formatted)g(b)n(y)h(astF)-7 b(ormat)26 b(whic)n(h)h(con)n
-(tain)g(less)227 4944 y(than)j(three)f(\014elds)g(will)g(b)r(e)h
-(correctly)d(in)n(terpreted)i(if)h(read)e(bac)n(k)g(using)h
-(astUnformat,)g(ev)n(en)g(if)g(they)h(do)f(not)227 5043
-y(con)n(tain)e(\014eld)h(iden)n(ti\014cation)f(c)n(haracters.)227
-5167 y(Examples)g(of)g(acceptable)g(SkyF)-7 b(rame)27
-b(input)h(formats)f(\(with)i(in)n(terpretation)d(in)i(paren)n(theses\))
-f(include:)340 5301 y Fi(\017)45 b Fj(-14d)27 b(13m)g(22.2s)f(\(-14d)g
-(13')h(22.2)p Ft(")p Fj(\))340 5432 y Fi(\017)45 b Fj(+)28
-b(12:34:56.7)c(\(12d)j(34')g(56.7)p Ft(")f Fj(or)g(12h)h(34m)g(56.7s\))
-340 5562 y Fi(\017)45 b Fj(001)26 b(:)37 b(02)27 b(:)37
-b(03.4)26 b(\(1d)i(02')f(03.4)p Ft(")f Fj(or)g(1h)i(02m)e(03.4s\))340
-5693 y Fi(\017)45 b Fj(22h)27 b(30)g(\(22h)g(30m)g(00s\))p
-eop end
-%%Page: 380 390
-TeXDict begin 380 389 bop 0 52 a FF(380)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(136::10)p Ft(")25 b Fj(\(136d)i(00')g(10)p Ft(")f
-Fj(or)h(136h)f(00m)h(10s\))340 507 y Fi(\017)45 b Fj(-14M)27
-b(27S)g(\(-0d)g(14')g(27)p Ft(")f Fj(or)h(-0h)g(14m)f(27s\))340
-662 y Fi(\017)45 b Fj(-:14:)36 b(\(-0d)27 b(14')g(00)p
-Ft(")f Fj(or)h(-0h)g(14m)g(00s\))340 818 y Fi(\017)45
-b Fj(-::4.1)27 b(\(-0d)g(00')g(04.1)p Ft(")f Fj(or)g(-0h)h(00m)g
-(04.1s\))340 973 y Fi(\017)45 b Fj(.9)p Ft(")27 b Fj(\(0d)h(00')e(00.9)
-p Ft(")p Fj(\))340 1129 y Fi(\017)45 b Fj(d12m)27 b(\(0d)h(12')f(00)p
-Ft(")p Fj(\))340 1284 y Fi(\017)45 b Fj(H)28 b(12:22.3s)d(\(0h)j(12m)f
-(22.3s\))340 1439 y Fi(\017)45 b Fl(<)p Fj(bad)p Fl(>)27
-b Fj(\(AST)p Ft(__)p Fj(BAD\))227 1647 y(Where)e(alternativ)n(e)e(in)n
-(terpretations)g(are)h(sho)n(wn,)g(the)h(c)n(hoice)f(of)g(angle)g(or)g
-(time)h(dep)r(ends)g(on)f(the)h(asso)r(ciated)227 1746
-y(F)-7 b(ormat\(axis\))27 b(attribute.)p 0 1991 3780
-12 v 0 2122 a Fz(astUnitMap)1422 2121 y Fe(Create)37
-b(a)h(UnitMap)3073 2122 y Fz(astUnitMap)0 2356 y Fd(Description:)44
-b Fj(This)28 b(function)g(creates)f(a)g(new)g(UnitMap)i(and)e
-(optionally)g(initialises)g(its)h(attributes.)227 2504
-y(A)f(UnitMap)f(is)g(a)f(unit)i(\(n)n(ull\))f(Mapping)g(that)g(has)g
-(no)f(e\013ect)i(on)e(the)i(co)r(ordinates)d(supplied)i(to)g(it.)37
-b(They)26 b(are)227 2603 y(simply)k(copied.)41 b(This)30
-b(can)f(b)r(e)g(useful)h(if)g(a)f(Mapping)g(is)g(required)g(\(e.g.)41
-b(to)30 b(pass)e(to)h(another)g(function\))h(but)227
-2703 y(y)n(ou)d(do)g(not)h(w)n(an)n(t)f(it)h(to)f(ha)n(v)n(e)g(an)n(y)g
-(e\013ect.)0 2898 y Fd(Synopsis:)121 b Ft(AstUnitMap)39
-b Fi(\003)p Ft(astUnitMap\()g(int)j(ncoord,)f(const)g(char)h
-Fi(\003)p Ft(options,)e(...)86 b(\))0 3092 y Fd(P)m(arameters:)259
-3274 y(nco)s(ord)427 3374 y Fj(The)28 b(n)n(um)n(b)r(er)f(of)h(input)g
-(and)g(output)g(co)r(ordinates)e(\(these)i(n)n(um)n(b)r(ers)f(are)g
-(necessarily)f(the)h(same\).)259 3529 y Fd(options)427
-3629 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-3728 y(assignmen)n(ts)c(to)g(b)r(e)h(used)f(for)g(initialising)h(the)g
-(new)f(UnitMap.)37 b(The)24 b(syn)n(tax)g(used)g(is)h(iden)n(tical)f
-(to)g(that)427 3828 y(for)i(the)h(astSet)g(function)g(and)g(ma)n(y)f
-(include)h Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g
-(iden)n(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-3928 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 4083
-y Fd(...)427 4183 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 4282 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 4382 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 4481 y Fj(function\).)0 4689
-y Fd(Returned)32 b(V)-8 b(alue:)259 4870 y(astUnitMap\(\))427
-4970 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(UnitMap.)0
-5177 y Fd(Notes:)340 5505 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 5604 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p eop end
-%%Page: 381 391
-TeXDict begin 381 390 bop 3643 52 a FF(381)p 0 351 3780
-12 v 0 483 a Fz(astUnlo)t(c)l(k)220 b Fe(Unlo)s(c)m(k)38
-b(an)g(Ob)7 b(ject)38 b(for)g(use)h(b)m(y)g(other)f(threads)217
-b Fz(astUnlo)t(c)l(k)0 651 y Fd(Description:)44 b Fj(Unlo)r(c)n(ks)36
-b(an)h(Ob)5 b(ject)36 b(previously)f(lo)r(c)n(k)n(ed)h(using)g(astLo)r
-(c)n(k,)h(so)f(that)h(other)f(threads)g(can)g(use)g(the)227
-751 y(Ob)5 b(ject.)37 b(See)28 b(astLo)r(c)n(k)e(for)h(further)h
-(details.)0 890 y Fd(Synopsis:)121 b Ft(void)42 b(astUnlock\()d
-(AstObject)h Fi(\003)p Ft(this,)h(int)h(report)g(\))0
-1030 y Fd(P)m(arameters:)259 1156 y(this)427 1255 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Ob)5 b(ject)27 b(to)h(b)r(e)g(unlo)r(c)n(k)n(ed.)259
-1378 y Fd(rep)s(ort)427 1478 y Fj(If)g(non-zero,)f(an)g(error)f(will)i
-(b)r(e)g(rep)r(orted)f(if)h(the)g(supplied)g(Ob)5 b(ject,)28
-b(or)e(an)n(y)h(Ob)5 b(ject)28 b(con)n(tained)f(within)427
-1577 y(the)f(supplied)h(Ob)5 b(ject,)26 b(is)f(not)h(curren)n(tly)f(lo)
-r(c)n(k)n(ed)g(b)n(y)h(the)g(running)f(thread.)36 b(If)26
-b(zero,)f(suc)n(h)h(Ob)5 b(jects)25 b(will)427 1677 y(b)r(e)j(left)h
-(unc)n(hanged,)d(and)i(no)f(error)f(will)i(b)r(e)g(rep)r(orted.)0
-1829 y Fd(Class)j(Applicabilit)m(y:)259 1955 y(Ob)5 b(ject)427
-2055 y Fj(This)28 b(function)g(applies)f(to)h(all)f(Ob)5
-b(jects.)0 2206 y Fd(Notes:)340 2479 y Fi(\017)45 b Fj(This)29
-b(function)h(attempts)g(to)f(execute)g(ev)n(en)g(if)h(the)f(global)f
-(error)g(status)h(is)g(set,)h(but)f(no)g(further)h(error)427
-2578 y(rep)r(ort)d(will)h(b)r(e)g(made)f(if)h(it)g(subsequen)n(tly)g
-(fails)f(under)g(these)h(circumstances.)340 2701 y Fi(\017)45
-b Fj(All)28 b(unlo)r(c)n(k)n(ed)e(Ob)5 b(jects)26 b(are)g(excluded)h
-(from)f(AST)i(con)n(text)e(handling)h(un)n(til)g(they)g(are)f(re-lo)r
-(c)n(k)n(ed)f(using)427 2801 y(astLo)r(c)n(k.)340 2923
-y Fi(\017)45 b Fj(This)28 b(function)g(is)f(only)h(a)n(v)-5
-b(ailable)26 b(in)i(the)g(C)f(in)n(terface.)340 3046
-y Fi(\017)45 b Fj(This)30 b(function)g(returns)f(without)h(action)g(if)
-g(the)g(Ob)5 b(ject)29 b(is)h(not)g(curren)n(tly)e(lo)r(c)n(k)n(ed)h(b)
-n(y)h(an)n(y)e(thread.)43 b(If)427 3146 y(it)30 b(is)f(lo)r(c)n(k)n(ed)
-f(b)n(y)h(the)h(running)f(thread,)g(it)g(is)h(unlo)r(c)n(k)n(ed.)41
-b(If)29 b(it)h(is)f(lo)r(c)n(k)n(ed)f(b)n(y)h(another)f(thread,)i(an)f
-(error)427 3245 y(will)f(b)r(e)g(rep)r(orted)f(if)h Ft(")p
-Fj(error)p Ft(")d Fj(is)i(non-zero.)340 3368 y Fi(\017)45
-b Fj(This)23 b(function)g(returns)g(without)g(action)f(if)h(the)h(AST)f
-(library)e(has)i(b)r(een)g(built)g(without)h(POSIX)e(thread)427
-3468 y(supp)r(ort)35 b(\(i.e.)60 b(the)35 b Ft(")p Fj(-with-pthreads)p
-Ft(")e Fj(option)i(w)n(as)f(not)h(sp)r(eci\014ed)g(when)h(running)e
-(the)i Ft(")p Fj(con\014gure)p Ft(")427 3567 y Fj(script\).)p
-0 3746 V 0 3878 a Fz(astV)-11 b(ersion)153 b Fe(Return)37
-b(the)g(v)m(ersion)f(of)h(the)g(AST)g(library)e(b)s(eing)1776
-3992 y(used)3170 3878 y Fz(astV)-11 b(ersion)0 4138 y
-Fd(Description:)44 b Fj(This)35 b(macro)e(in)n(v)n(ok)n(es)f(a)i
-(function)h(whic)n(h)f(returns)g(an)f(in)n(teger)h(represen)n(ting)f
-(the)h(v)n(ersion)f(of)h(the)227 4237 y(AST)24 b(library)d(b)r(eing)i
-(used.)35 b(The)23 b(library)f(v)n(ersion)f(is)i(formatted)f(as)g(a)h
-(string)f(suc)n(h)g(as)g Ft(")p Fj(2.0-7)p Ft(")f Fj(whic)n(h)i(con)n
-(tains)227 4337 y(in)n(tegers)k(represen)n(ting)g(the)i
-Ft(")p Fj(ma)5 b(jor)26 b(v)n(ersion)p Ft(")g Fj(\(2\),)j(the)f
-Ft(")p Fj(minor)g(v)n(ersion)p Ft(")e Fj(\(0\))i(and)g(the)h
-Ft(")p Fj(release)p Ft(")d Fj(\(7\).)39 b(The)227 4436
-y(in)n(teger)23 b(returned)g(b)n(y)h(this)g(function)g(com)n(bines)f
-(all)g(three)h(in)n(tegers)e(together)h(in)n(to)h(a)f(single)g(in)n
-(teger)g(using)g(the)227 4536 y(expresion:)227 4656 y(\(ma)5
-b(jor)27 b(v)n(ersion\))p Fi(\003)p Fj(1E6)d(+)k(\(minor)f(v)n
-(ersion\))p Fi(\003)p Fj(1E3)d(+)k(\(release\))0 4795
-y Fd(Synopsis:)121 b Ft(int)42 b(astVersion)0 4934 y
-Fd(Class)31 b(Applicabilit)m(y:)259 5060 y(Ob)5 b(ject)427
-5160 y Fj(This)28 b(macro)e(applies)h(to)h(all)f(Ob)5
-b(jects.)0 5312 y Fd(Returned)32 b(V)-8 b(alue:)259 5438
-y(astV)g(ersion)427 5538 y Fj(The)37 b(ma)5 b(jor)35
-b(v)n(ersion,)j(minor)e(v)n(ersion)f(and)h(release)g(n)n(um)n(b)r(ers)g
-(for)g(the)h(AST)g(library)-7 b(,)37 b(enco)r(ded)g(as)f(a)427
-5637 y(single)27 b(in)n(teger.)p eop end
-%%Page: 382 392
-TeXDict begin 382 391 bop 0 52 a FF(382)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astW)-11 b(arnings)251 b Fe(Returns)38 b(an)m(y)g(w)m
-(arnings)f(issued)i(b)m(y)f(the)1064 598 y(previous)f(read)h(or)g
-(write)g(op)s(eration)3054 483 y Fz(astW)-11 b(arnings)0
-776 y Fd(Description:)44 b Fj(This)35 b(function)h(returns)e(an)h(AST)h
-(KeyMap)e(ob)5 b(ject)35 b(holding)f(the)i(text)f(of)g(an)n(y)f(w)n
-(arnings)g(issued)227 875 y(as)d(a)g(result)g(of)g(the)h(previous)e(in)
-n(v)n(o)r(cation)g(of)h(the)h(astRead)e(or)h(astW)-7
-b(rite)31 b(function)h(on)f(the)g(Channel.)48 b(If)32
-b(no)227 975 y(w)n(arnings)26 b(w)n(ere)h(issued,)g(a)g(a)h(NULL)g(v)-5
-b(alue)27 b(will)h(b)r(e)g(returned.)227 1097 y(Suc)n(h)d(w)n(arnings)e
-(are)h(non-fatal)g(and)g(will)h(not)g(prev)n(en)n(t)f(the)h(read)e(or)h
-(write)h(op)r(eration)e(succeeding.)36 b(Ho)n(w)n(ev)n(er,)227
-1196 y(the)29 b(con)n(v)n(erted)f(ob)5 b(ject)28 b(ma)n(y)g(not)h(b)r
-(e)g(iden)n(tical)f(to)h(the)g(original)e(ob)5 b(ject)28
-b(in)h(all)f(resp)r(ects.)40 b(Di\013erences)29 b(whic)n(h)227
-1296 y(w)n(ould)23 b(usually)f(b)r(e)h(deemed)g(as)f(insigni\014can)n
-(t)h(in)g(most)f(usual)h(cases)e(will)j(generate)d(a)h(w)n(arning,)h
-(whereas)e(more)227 1395 y(signi\014can)n(t)27 b(di\013erences)g(will)h
-(generate)e(an)i(error.)227 1517 y(The)d Ft(")p Fj(Strict)p
-Ft(")f Fj(attribute)h(allo)n(ws)e(this)i(w)n(arning)e(facilit)n(y)i(to)
-g(b)r(e)g(switc)n(hed)f(o\013,)i(so)e(that)g(a)h(fatal)f(error)f(is)i
-(alw)n(a)n(ys)227 1617 y(rep)r(orted)i(for)g(an)n(y)g(con)n(v)n(ersion)
-e(error.)0 1761 y Fd(Synopsis:)121 b Ft(AstKeyMap)40
-b Fi(\003)p Ft(astWarnings\()e(AstChannel)h Fi(\003)p
-Ft(this)j(\))0 1905 y Fd(P)m(arameters:)259 2036 y(this)427
-2136 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Channel.)0 2292
-y Fd(Class)j(Applicabilit)m(y:)259 2423 y(Channel)427
-2523 y Fj(The)25 b(basic)f(Channel)h(class)f(generates)f(a)h(w)n
-(arning)g(when)g(ev)n(er)g(an)h(un-recognised)e(item)i(is)f(encoun)n
-(tered)427 2622 y(whilst)32 b(reading)f(an)g(Ob)5 b(ject)32
-b(from)f(an)g(external)g(data)g(source.)48 b(If)32 b(Strict)g(is)g
-(zero)e(\(the)j(default\),)g(then)427 2722 y(unexp)r(ected)28
-b(items)f(in)g(the)g(Ob)5 b(ject)27 b(description)g(are)f(simply)h
-(ignored,)e(and)i(an)n(y)f(remaining)g(items)i(are)427
-2822 y(used)h(to)g(construct)g(the)g(returned)f(Ob)5
-b(ject.)41 b(If)30 b(Strict)f(is)g(non-zero,)f(an)g(error)f(will)j(b)r
-(e)f(rep)r(orted)f(and)h(a)427 2921 y(NULL)f(Ob)5 b(ject)28
-b(p)r(oin)n(ter)f(returned)g(if)h(an)n(y)f(unexp)r(ected)h(items)g(are)
-f(encoun)n(tered.)427 3035 y(As)f(AST)g(con)n(tin)n(ues)f(to)h(b)r(e)g
-(dev)n(elop)r(ed,)g(new)g(attributes)f(are)g(added)h(o)r(ccasionally)e
-(to)h(selected)h(classes.)427 3134 y(If)35 b(an)f(older)f(v)n(ersion)g
-(of)h(AST)h(is)f(used)g(to)g(read)f(external)h(Ob)5 b(ject)34
-b(descriptions)f(created)h(b)n(y)g(a)f(more)427 3234
-y(recen)n(t)20 b(v)n(ersion)f(of)i(AST,)g(then)g(the)g(Channel)f(class)
-g(will,)i(b)n(y)f(default,)h(ignore)d(the)i(new)g(attributes,)h(using)
-427 3334 y(the)35 b(remaining)e(attributes)h(to)h(construct)e(the)i(Ob)
-5 b(ject.)57 b(This)34 b(is)g(usually)g(a)g(go)r(o)r(d)f(thing.)58
-b(Ho)n(w)n(ev)n(er,)427 3433 y(since)32 b(external)f(Ob)5
-b(ject)32 b(descriptions)f(are)g(often)h(stored)f(in)i(plain)f(text,)h
-(it)f(is)g(p)r(ossible)g(to)g(edit)g(them)427 3533 y(using)37
-b(a)g(text)h(editor.)65 b(This)37 b(giv)n(es)f(rise)h(to)g(the)h(p)r
-(ossibilit)n(y)f(of)g(gen)n(uine)g(errors)e(in)j(the)f(description)427
-3633 y(due)25 b(to)g(\014nger-slips,)f(t)n(yp)r(os,)i(or)e(simple)h
-(mis-understanding.)35 b(Suc)n(h)25 b(inappropriate)e(attributes)i
-(will)g(b)r(e)427 3732 y(ignored)k(if)h(Strict)g(is)g(left)g(at)g(its)g
-(default)g(zero)f(v)-5 b(alue.)43 b(This)30 b(will)g(cause)f(the)h
-(mis-sp)r(elled)g(attribute)g(to)427 3832 y(rev)n(ert)c(to)h(its)g
-(default)g(v)-5 b(alue,)27 b(p)r(oten)n(tially)g(causing)f(subtle)h(c)n
-(hanges)f(in)h(the)h(b)r(eha)n(viour)d(of)i(application)427
-3931 y(soft)n(w)n(are.)38 b(If)29 b(suc)n(h)f(an)g(e\013ect)h(is)g
-(susp)r(ected,)g(the)g(Strict)f(attribute)h(can)f(b)r(e)h(set)f
-(non-zero,)f(resulting)h(in)427 4031 y(the)g(erroneous)e(attribute)i(b)
-r(eing)f(iden)n(ti\014ed)h(in)g(an)f(error)f(message.)259
-4158 y Fd(FitsChan)427 4258 y Fj(The)20 b(returned)e(KeyMap)h(will)g
-(con)n(tain)g(w)n(arnings)f(for)g(all)h(conditions)g(listed)h(in)f(the)
-h(W)-7 b(arnings)18 b(attribute.)259 4385 y Fd(XmlChan)427
-4485 y Fj(Rep)r(orts)27 b(con)n(v)n(ersion)f(errors)f(that)j(result)f
-(in)h(what)g(are)e(usally)h(insigni\014can)n(t)g(c)n(hanges.)0
-4642 y Fd(Returned)32 b(V)-8 b(alue:)259 4773 y(astW)g(arnings\(\))427
-4872 y Fj(A)25 b(p)r(oin)n(ter)g(to)f(the)i(KeyMap)d(holding)i(the)g(w)
-n(arning)e(messages,)h(or)g(NULL)h(if)g(no)g(w)n(arnings)e(w)n(ere)h
-(issued)427 4972 y(during)j(the)h(previous)f(read)g(op)r(eration.)0
-5128 y Fd(Notes:)340 5405 y Fi(\017)45 b Fj(The)28 b(returned)f(KeyMap)
-g(uses)g(k)n(eys)g(of)g(the)h(form)f Ft(")p Fj(W)-7 b(arning)p
-Ft(_)p Fj(1)p Ft(")p Fj(,)26 b Ft(")p Fj(W)-7 b(arning)p
-Ft(_)p Fj(2)p Ft(")p Fj(,)25 b(etc.)340 5533 y Fi(\017)45
-b Fj(A)31 b(v)-5 b(alue)29 b(of)h(NULL)h(will)f(b)r(e)g(returned)f(if)i
-(this)f(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)h(AST)f(error)e
-(status)i(set,)427 5632 y(or)d(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p eop end
-%%Page: 383 393
-TeXDict begin 383 392 bop 3643 52 a FF(383)p 0 351 3780
-12 v 0 483 a Fz(astW)-11 b(atc)l(h)251 b Fe(Iden)m(tify)37
-b(a)i(new)f(error)g(status)g(v)-7 b(ariable)37 b(for)g(the)1581
-598 y(AST)h(library)3233 483 y Fz(astW)-11 b(atc)l(h)0
-794 y Fd(Description:)44 b Fj(This)28 b(function)h(allo)n(ws)e(a)h(new)
-g(error)e(status)i(v)-5 b(ariable)27 b(to)h(b)r(e)h(accessed)e(b)n(y)g
-(the)i(AST)g(library)d(when)227 894 y(c)n(hec)n(king)h(for)g(and)g(rep)
-r(orting)g(error)e(conditions.)227 1022 y(By)f(default,)h(the)f
-(library)f(uses)h(an)f(in)n(ternal)h(in)n(teger)f(error)f(status)h
-(whic)n(h)h(is)g(set)g(to)g(an)g(error)e(v)-5 b(alue)23
-b(if)i(an)f(error)227 1122 y(o)r(ccurs.)48 b(Use)31 b(of)h(astW)-7
-b(atc)n(h)31 b(allo)n(ws)f(the)i(in)n(ternal)f(error)e(status)i(to)h(b)
-r(e)g(replaced)e(b)n(y)h(an)h(in)n(teger)e(v)-5 b(ariable)31
-b(of)227 1221 y(y)n(our)g(c)n(ho)r(osing,)g(so)g(that)h(the)g(AST)h
-(library)d(can)h(share)g(its)h(error)e(status)h(directly)h(with)g
-(other)f(co)r(de)h(whic)n(h)227 1321 y(uses)27 b(the)h(same)f(error)f
-(detection)i(con)n(v)n(en)n(tion.)227 1449 y(If)23 b(an)f(alternativ)n
-(e)f(error)f(status)i(v)-5 b(ariable)21 b(is)i(supplied,)g(it)g(is)f
-(used)g(b)n(y)g(all)g(related)g(AST)h(functions)f(and)g(macros)227
-1549 y(\(e.g.)37 b(astOK,)26 b(astStatus)i(and)f(astClearStatus\).)0
-1706 y Fd(Synopsis:)121 b Ft(int)42 b Fi(\003)p Ft(astWatch\()e(int)i
-Fi(\003)p Ft(status_ptr)d(\))0 1863 y Fd(P)m(arameters:)259
-2007 y(status)p Ft(_)p Fd(ptr)427 2107 y Fj(P)n(oin)n(ter)28
-b(to)i(an)f(in)n(t)h(whose)e(v)-5 b(alue)30 b(is)f(to)h(b)r(e)f(used)h
-(subsequen)n(tly)f(as)g(the)h(AST)g(inherited)f(status)h(v)-5
-b(alue.)427 2207 y(If)36 b(a)f(NULL)h(p)r(oin)n(ter)f(is)g(supplied,)j
-(the)e(AST)f(library)f(will)i(rev)n(ert)e(to)h(using)h(its)f(o)n(wn)g
-(in)n(ternal)g(error)427 2306 y(status.)0 2476 y Fd(Returned)d(V)-8
-b(alue:)259 2620 y(astW)g(atc)m(h\(\))427 2720 y Fj(Address)27
-b(of)h(the)f(previous)g(error)e(status)j(v)-5 b(ariable.)35
-b(This)28 b(ma)n(y)e(later)h(b)r(e)h(passed)f(bac)n(k)f(to)i(astW)-7
-b(atc)n(h)27 b(to)427 2819 y(restore)g(the)h(previous)g(b)r(eha)n
-(viour)f(of)h(the)g(library)-7 b(.)38 b(\(Note)28 b(that)h(on)f(the)g
-(\014rst)g(in)n(v)n(o)r(cation)f(of)h(astW)-7 b(atc)n(h)427
-2919 y(the)28 b(returned)f(v)-5 b(alue)28 b(will)g(b)r(e)g(the)g
-(address)e(of)i(the)g(in)n(ternal)f(error)e(status)j(v)-5
-b(ariable.\))0 3089 y Fd(Notes:)340 3379 y Fi(\017)45
-b Fj(This)28 b(function)g(is)f(not)h(a)n(v)-5 b(ailable)26
-b(in)i(the)g(F)n(OR)-7 b(TRAN)28 b(77)f(in)n(terface)g(to)g(the)h(AST)g
-(library)-7 b(.)p 0 3586 V 0 3716 a Fz(astWcsMap)738
-b Fe(Create)37 b(a)h(WcsMap)738 b Fz(astWcsMap)0 3913
-y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(WcsMap)h(and)f(optionally)g(initialises)g(its)h(attributes.)227
-4041 y(A)g(WcsMap)g(is)f(used)h(to)g(represen)n(t)e(sky)h(co)r
-(ordinate)g(pro)5 b(jections)26 b(as)h(describ)r(ed)h(in)f(the)i
-(\(draft\))f(FITS)g(w)n(orld)227 4141 y(co)r(ordinate)20
-b(system)g(\(FITS-W)n(CS\))h(pap)r(er)f(b)n(y)g(E.W.)h(Griesen)f(and)g
-(M.)h(Calabretta)e(\(A)i(&)f(A,)h(in)g(preparation\).)227
-4241 y(This)29 b(pap)r(er)f(de\014nes)h(a)f(set)h(of)f(functions,)h(or)
-f(sky)g(pro)5 b(jections,)28 b(whic)n(h)h(transform)e
-(longitude-latitude)i(pairs)227 4340 y(represen)n(ting)d(spherical)h
-(celestial)g(co)r(ordinates)f(in)n(to)h(corresp)r(onding)f(pairs)h(of)g
-(Cartesian)f(co)r(ordinates)g(\(and)227 4440 y(vice)i(v)n(ersa\).)227
-4568 y(A)j(WcsMap)f(is)g(a)g(sp)r(ecialised)g(form)g(of)g(Mapping)g
-(whic)n(h)g(implemen)n(ts)h(these)f(sky)g(pro)5 b(jections)29
-b(and)h(applies)227 4668 y(them)25 b(to)g(a)f(sp)r(eci\014ed)h(pair)f
-(of)g(co)r(ordinates.)35 b(All)25 b(the)g(pro)5 b(jections)23
-b(in)i(the)g(FITS-W)n(CS)g(pap)r(er)f(are)g(supp)r(orted,)227
-4768 y(plus)32 b(the)f(no)n(w)g(deprecated)f Ft(")p Fj(T)-7
-b(AN)32 b(with)f(p)r(olynomial)g(correction)e(terms)p
-Ft(")i Fj(pro)5 b(jection)30 b(whic)n(h)h(is)g(refered)g(to)227
-4867 y(here)22 b(b)n(y)g(the)g(co)r(de)g Ft(")p Fj(TPN)p
-Ft(")p Fj(.)34 b(Using)22 b(the)g(FITS-W)n(CS)g(terminology)-7
-b(,)22 b(the)g(transformation)f(is)h(b)r(et)n(w)n(een)g
-Ft(")p Fj(nativ)n(e)227 4967 y(spherical)p Ft(")32 b
-Fj(and)g Ft(")p Fj(pro)5 b(jection)31 b(plane)p Ft(")h
-Fj(co)r(ordinates.)51 b(These)32 b(co)r(ordinates)g(ma)n(y)-7
-b(,)33 b(optionally)-7 b(,)33 b(b)r(e)g(em)n(b)r(edded)227
-5066 y(in)j(a)f(space)g(with)h(more)f(than)h(t)n(w)n(o)f(dimensions,)i
-(the)f(remaining)f(co)r(ordinates)f(b)r(eing)i(copied)f(unc)n(hanged.)
-227 5166 y(Note,)27 b(ho)n(w)n(ev)n(er,)d(that)j(for)f(consistency)f
-(with)i(other)e(AST)i(facilities,)g(a)f(WcsMap)g(handles)g(co)r
-(ordinates)e(that)227 5266 y(represen)n(t)j(angles)f(in)i(radians)e
-(\(rather)h(than)h(the)g(degrees)e(used)i(b)n(y)f(FITS-W)n(CS\).)227
-5394 y(The)32 b(t)n(yp)r(e)g(of)f(FITS-W)n(CS)h(pro)5
-b(jection)31 b(to)g(b)r(e)h(used)g(and)f(the)h(co)r(ordinates)e
-(\(axes\))h(to)h(whic)n(h)f(it)h(applies)g(are)227 5494
-y(sp)r(eci\014ed)g(when)g(a)g(WcsMap)g(is)f(\014rst)h(created.)49
-b(The)32 b(pro)5 b(jection)31 b(t)n(yp)r(e)h(ma)n(y)f(subsequen)n(tly)g
-(b)r(e)h(determined)227 5593 y(using)g(the)f(WcsT)n(yp)r(e)h(attribute)
-g(and)f(the)h(co)r(ordinates)e(on)i(whic)n(h)f(it)h(acts)f(ma)n(y)g(b)r
-(e)h(determined)g(using)f(the)227 5693 y(WcsAxis\(lonlat\))d
-(attribute.)p eop end
-%%Page: 384 394
-TeXDict begin 384 393 bop 0 52 a FF(384)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)227 351 y Fj(Eac)n(h)37
-b(WcsMap)i(also)e(allo)n(ws)g(up)i(to)f(100)f Ft(")p
-Fj(pro)5 b(jection)37 b(parameters)p Ft(")f Fj(to)i(b)r(e)h(asso)r
-(ciated)e(with)i(eac)n(h)e(axis.)227 451 y(These)31 b(sp)r(ecify)h(the)
-g(precise)f(form)g(of)g(the)h(pro)5 b(jection,)31 b(and)h(are)e
-(accessed)g(using)h(PVi)p Ft(_)p Fj(m)h(attribute,)g(where)227
-551 y Ft(")p Fj(i)p Ft(")27 b Fj(is)h(the)g(in)n(teger)f(axis)h(index)f
-(\(starting)h(at)g(1\),)f(and)h(m)g(is)g(an)g(in)n(teger)f
-Ft(")p Fj(parameter)f(index)p Ft(")h Fj(in)h(the)h(range)d(0)227
-650 y(to)i(99.)39 b(The)28 b(n)n(um)n(b)r(er)g(of)g(pro)5
-b(jection)27 b(parameters)g(required)g(b)n(y)h(eac)n(h)g(pro)5
-b(jection,)27 b(and)i(their)f(meanings,)g(are)227 750
-y(dep)r(enden)n(t)c(up)r(on)e(the)h(pro)5 b(jection)22
-b(t)n(yp)r(e)h(\(most)g(pro)5 b(jections)21 b(either)h(do)h(not)f(use)h
-(an)n(y)f(pro)5 b(jection)21 b(parameters,)227 849 y(or)h(use)g
-(parameters)f(1)h(and)g(2)g(asso)r(ciated)f(with)i(the)g(latitude)g
-(axis\).)35 b(Before)21 b(creating)h(a)g(WcsMap)g(y)n(ou)g(should)227
-949 y(consult)31 b(the)h(FITS-W)n(CS)g(pap)r(er)e(for)h(details)g(of)h
-(whic)n(h)f(pro)5 b(jection)30 b(parameters)g(are)g(required,)i(and)f
-(whic)n(h)227 1049 y(ha)n(v)n(e)h(defaults.)53 b(When)34
-b(creating)e(the)h(WcsMap,)h(y)n(ou)e(m)n(ust)h(explicitly)g(set)g(v)-5
-b(alues)33 b(for)f(all)h(those)g(required)227 1148 y(pro)5
-b(jection)27 b(parameters)f(whic)n(h)h(do)h(not)f(ha)n(v)n(e)g
-(defaults)g(de\014ned)h(in)g(this)g(pap)r(er.)0 1293
-y Fd(Synopsis:)121 b Ft(AstWcsMap)40 b Fi(\003)p Ft(astWcsMap\()f(int)j
-(ncoord,)f(int)h(type,)g(int)g(lonax,)f(int)h(latax,)f(const)h(char)227
-1393 y Fi(\003)p Ft(options,)e(...)86 b(\))0 1538 y Fd(P)m(arameters:)
-259 1669 y(nco)s(ord)427 1769 y Fj(The)25 b(n)n(um)n(b)r(er)f(of)g(co)r
-(ordinate)g(v)-5 b(alues)24 b(for)g(eac)n(h)f(p)r(oin)n(t)i(to)f(b)r(e)
-h(transformed)f(\(i.e.)36 b(the)25 b(n)n(um)n(b)r(er)f(of)g(dimen-)427
-1869 y(sions)g(of)g(the)h(space)f(in)g(whic)n(h)g(the)h(p)r(oin)n(ts)g
-(will)f(reside\).)36 b(This)24 b(m)n(ust)g(b)r(e)h(at)f(least)g(2.)36
-b(The)24 b(same)g(n)n(um)n(b)r(er)427 1968 y(is)k(applicable)f(to)g(b)r
-(oth)h(input)h(and)e(output)h(p)r(oin)n(ts.)259 2097
-y Fd(t)m(yp)s(e)427 2196 y Fj(The)h(t)n(yp)r(e)g(of)g(FITS-W)n(CS)g
-(pro)5 b(jection)28 b(to)h(apply)-7 b(.)41 b(This)29
-b(should)g(b)r(e)g(giv)n(en)f(using)h(a)f(macro)g(v)-5
-b(alue)29 b(suc)n(h)427 2296 y(as)k(AST)p Ft(__)p Fj(T)-7
-b(AN)34 b(\(for)g(a)f(tangen)n(t)h(plane)f(pro)5 b(jection\),)35
-b(where)e(the)h(c)n(haracters)e(follo)n(wing)h(the)h(double)427
-2396 y(underscore)19 b(giv)n(e)h(the)h(pro)5 b(jection)20
-b(t)n(yp)r(e)h(co)r(de)f(\(in)i(upp)r(er)e(case\))h(as)f(used)g(in)h
-(the)g(FITS-W)n(CS)g Ft(")p Fj(CTYPEi)p Ft(")427 2495
-y Fj(k)n(eyw)n(ord.)34 b(Y)-7 b(ou)23 b(should)g(consult)g(the)h
-(FITS-W)n(CS)f(pap)r(er)g(for)f(a)h(list)h(of)f(the)g(a)n(v)-5
-b(ailable)22 b(pro)5 b(jections.)35 b(The)427 2595 y(additional)41
-b(co)r(de)f(of)h(AST)p Ft(__)p Fj(TPN)g(can)f(b)r(e)h(supplied)h(whic)n
-(h)f(represen)n(ts)e(a)i(T)-7 b(AN)41 b(pro)5 b(jection)40
-b(with)427 2694 y(p)r(olynomial)27 b(correction)f(terms)h(as)g
-(de\014ned)h(in)g(an)f(early)g(draft)g(of)h(the)g(FITS-W)n(CS)g(pap)r
-(er.)259 2823 y Fd(lonax)427 2922 y Fj(The)g(index)g(of)f(the)h
-(longitude)g(axis.)36 b(This)27 b(should)h(lie)f(in)h(the)g(range)e(1)i
-(to)f Ft(")p Fj(nco)r(ord)p Ft(")p Fj(.)259 3051 y Fd(latax)427
-3150 y Fj(The)33 b(index)g(of)g(the)g(latitude)h(axis.)52
-b(This)33 b(should)f(lie)h(in)h(the)f(range)e(1)i(to)g
-Ft(")p Fj(nco)r(ord)p Ft(")e Fj(and)i(b)r(e)g(distinct)427
-3250 y(from)28 b Ft(")p Fj(lonax)p Ft(")p Fj(.)259 3378
-y Fd(options)427 3478 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n(ull-terminated)
-g(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)
-g(attribute)427 3577 y(assignmen)n(ts)c(to)h(b)r(e)h(used)f(for)f
-(initialising)h(the)h(new)f(WcsMap.)36 b(The)25 b(syn)n(tax)f(used)h
-(is)g(iden)n(tical)g(to)g(that)427 3677 y(for)h(the)h(astSet)g
-(function)g(and)g(ma)n(y)f(include)h Ft(")p Fj(prin)n(tf)p
-Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n(ti\014ed)h(b)n(y)f
-Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427 3777 y(in)i(the)g(normal)f
-(w)n(a)n(y)-7 b(.)427 3891 y(If)28 b(the)g(sky)f(pro)5
-b(jection)26 b(to)i(b)r(e)g(implemen)n(ted)g(requires)e(pro)5
-b(jection)26 b(parameter)g(v)-5 b(alues)27 b(to)h(b)r(e)g(set,)f(then)
-427 3990 y(this)36 b(should)e(normally)g(b)r(e)i(done)e(here)h(via)f
-(the)i(PVi)p Ft(_)p Fj(m)e(attribute)h(\(see)g(the)h
-Ft(")p Fj(Examples)p Ft(")d Fj(section\).)427 4090 y(Setting)22
-b(v)-5 b(alues)21 b(for)g(these)h(parameters)d(is)j(mandatory)e(if)i
-(they)f(do)g(not)h(ha)n(v)n(e)e(default)i(v)-5 b(alues)21
-b(\(as)g(de\014ned)427 4189 y(in)28 b(the)g(FITS-W)n(CS)g(pap)r(er\).)
-259 4318 y Fd(...)427 4417 y Fj(If)38 b(the)g Ft(")p
-Fj(options)p Ft(")e Fj(string)h(con)n(tains)f Ft(")p
-Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g
-(list)h(of)f(additional)427 4517 y(argumen)n(ts)26 b(ma)n(y)h(follo)n
-(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5 b(alues)27
-b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)37
-b(The)427 4617 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 4716 y Fj(function\).)0
-4873 y Fd(Returned)32 b(V)-8 b(alue:)259 5005 y(astWcsMap\(\))427
-5105 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(WcsMap.)0
-5262 y Fd(Examples:)227 5395 y Fq(wcsmap)46 b(=)i(astWcsMap\()d(2,)i
-(AST)p Ft(__)p Fq(MER,)e(1,)i(2,)g Ft("")g Fq(\);)427
-5494 y Fj(Creates)19 b(a)h(WcsMap)g(that)g(implemen)n(ts)g(a)g(FITS-W)n
-(CS)g(Mercator)e(pro)5 b(jection)19 b(on)h(pairs)f(of)h(co)r
-(ordinates,)427 5593 y(with)28 b(co)r(ordinates)f(1)g(and)h(2)f
-(represen)n(ting)f(the)i(longitude)g(and)f(latitude)h(resp)r(ectiv)n
-(ely)-7 b(.)37 b(Note)27 b(that)h(the)427 5693 y(FITS-W)n(CS)g
-(Mercator)e(pro)5 b(jection)26 b(do)r(es)i(not)f(require)g(an)n(y)g
-(pro)5 b(jection)26 b(parameters.)p eop end
-%%Page: 385 395
-TeXDict begin 385 394 bop 3643 52 a FF(385)227 352 y
-Fq(wcsmap)46 b(=)i(astWcsMap\()d(3,)i(AST)p Ft(__)p Fq(COE,)e(2,)i(3,)g
-Ft(")p Fq(PV3)p Ft(_)p Fq(1=40.0)p Ft(")d Fq(\);)427
-451 y Fj(Creates)20 b(a)g(WcsMap)g(that)h(implemen)n(ts)g(a)f(FITS-W)n
-(CS)g(conical)g(equal)g(area)f(pro)5 b(jection.)33 b(The)21
-b(WcsMap)427 551 y(acts)k(on)h(p)r(oin)n(ts)f(in)h(a)f(3-dimensional)f
-(space;)i(co)r(ordinates)e(2)h(and)h(3)f(represen)n(t)f(longitude)i
-(and)f(latitude)427 650 y(resp)r(ectiv)n(ely)-7 b(,)29
-b(while)g(the)g(v)-5 b(alues)29 b(of)g(co)r(ordinate)e(1)i(are)f
-(copied)g(unc)n(hanged.)40 b(Pro)5 b(jection)28 b(parameter)f(1)427
-750 y(asso)r(ciat)n(y)n(ed)22 b(with)j(the)g(latitude)f(axis)g
-(\(corresp)r(onding)e(to)i(FITS)h(k)n(eyw)n(ord)d Ft(")p
-Fj(PV3)p Ft(_)p Fj(1)p Ft(")p Fj(\))g(is)j(required)e(and)427
-849 y(has)k(no)h(default,)g(so)f(is)g(set)h(explicitly)g(to)f(40.0)g
-(degrees.)35 b(Pro)5 b(jection)26 b(parameter)h(2)g(\(corresp)r(onding)
-f(to)427 949 y(FITS)i(k)n(eyw)n(ord)e Ft(")p Fj(PV3)p
-Ft(_)p Fj(2)p Ft(")p Fj(\))f(is)j(required)f(but)h(has)f(a)g(default)h
-(of)g(zero,)e(so)h(need)h(not)f(b)r(e)h(sp)r(eci\014ed.)0
-1114 y Fd(Notes:)340 1399 y Fi(\017)45 b Fj(The)34 b(forw)n(ard)f
-(transformation)f(of)i(a)g(WcsMap)f(con)n(v)n(erts)g(b)r(et)n(w)n(een)h
-(FITS-W)n(CS)g Ft(")p Fj(nativ)n(e)f(spherical)p Ft(")427
-1498 y Fj(and)24 b Ft(")p Fj(relativ)n(e)e(ph)n(ysical)p
-Ft(")g Fj(co)r(ordinates,)h(while)h(the)f(in)n(v)n(erse)g
-(transformation)e(con)n(v)n(erts)h(in)i(the)g(opp)r(osite)427
-1598 y(direction.)35 b(This)24 b(arrangemen)n(t)d(ma)n(y)i(b)r(e)h(rev)
-n(ersed,)f(if)h(required,)g(b)n(y)f(using)g(astIn)n(v)n(ert)g(or)f(b)n
-(y)i(setting)f(the)427 1698 y(In)n(v)n(ert)k(attribute)h(to)f(a)g
-(non-zero)f(v)-5 b(alue.)340 1832 y Fi(\017)45 b Fj(If)27
-b(an)n(y)f(set)h(of)f(co)r(ordinates)g(cannot)g(b)r(e)h(transformed)e
-(\(for)i(example,)f(man)n(y)g(pro)5 b(jections)26 b(do)g(not)g(co)n(v)n
-(er)427 1932 y(the)i(en)n(tire)f(celestial)h(sphere\),)f(then)h(a)f
-(WcsMap)h(will)f(yield)h(co)r(ordinate)e(v)-5 b(alues)28
-b(of)f(AST)p Ft(__)p Fj(BAD.)340 2066 y Fi(\017)45 b
-Fj(The)31 b(v)-5 b(alidit)n(y)31 b(of)g(an)n(y)f(pro)5
-b(jection)30 b(parameters)f(giv)n(en)h(via)g(the)i(PVi)p
-Ft(_)p Fj(m)e(parameter)g(in)h(the)g Ft(")p Fj(options)p
-Ft(")427 2165 y Fj(string)e(is)g(not)h(c)n(hec)n(k)n(ed)e(b)n(y)h(this)
-h(function.)43 b(Ho)n(w)n(ev)n(er,)28 b(their)i(v)-5
-b(alidit)n(y)29 b(is)g(c)n(hec)n(k)n(ed)g(when)g(the)h(resulting)427
-2265 y(WcsMap)21 b(is)f(used)g(to)h(transform)e(co)r(ordinates,)h(and)h
-(an)f(error)e(will)j(result)f(if)h(the)g(pro)5 b(jection)19
-b(parameters)427 2365 y(do)28 b(not)f(satisfy)g(all)h(the)g(required)e
-(constrain)n(ts)g(\(as)i(de\014ned)g(in)g(the)g(FITS-W)n(CS)f(pap)r
-(er\).)340 2499 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 2598 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 2763 y Fd(Status)33
-b(Handling)n(:)227 2909 y Fj(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 3009 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fj(in)n(t)227 3108 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p
-0 3310 3780 12 v 0 3442 a Fz(astWinMap)1428 3441 y Fe(Create)37
-b(a)i(WinMap)3090 3442 y Fz(astWinMap)0 3634 y Fd(Description:)44
-b Fj(This)28 b(function)g(creates)f(a)g(new)g(WinMap)h(and)g
-(optionally)e(initialises)i(its)g(attributes.)227 3759
-y(A)i(Winmap)g(is)f(a)g(linear)g(Mapping)g(whic)n(h)g(transforms)f(a)h
-(rectangular)e(windo)n(w)i(in)h(one)f(co)r(ordinate)f(system)227
-3859 y(in)n(to)g(a)f(similar)g(windo)n(w)g(in)h(another)f(co)r
-(ordinate)g(system)g(b)n(y)g(scaling)g(and)h(shifting)g(eac)n(h)f(axis)
-g(\(the)h(windo)n(w)227 3959 y(edges)f(b)r(eing)h(parallel)e(to)i(the)g
-(co)r(ordinate)e(axes\).)227 4085 y(A)g(WinMap)g(is)g(sp)r(eci\014ed)g
-(b)n(y)g(giving)f(the)h(co)r(ordinates)e(of)i(t)n(w)n(o)f(opp)r(osite)g
-(corners)f(\(A)j(and)e(B\))h(of)g(the)g(windo)n(w)227
-4184 y(in)i(b)r(oth)g(the)g(input)h(and)e(output)h(co)r(ordinate)f
-(systems.)0 4336 y Fd(Synopsis:)121 b Ft(AstWinMap)40
-b Fi(\003)p Ft(astWinMap\()f(int)j(ncoord,)f(const)g(double)g(ina[],)g
-(const)h(double)f(inb[],)g(const)227 4436 y(double)g(outa[],)g(const)h
-(double)f(outb[],)f(const)i(char)g Fi(\003)p Ft(options,)e(...)86
-b(\))0 4588 y Fd(P)m(arameters:)259 4727 y(nco)s(ord)427
-4827 y Fj(The)25 b(n)n(um)n(b)r(er)f(of)g(co)r(ordinate)g(v)-5
-b(alues)24 b(for)g(eac)n(h)f(p)r(oin)n(t)i(to)f(b)r(e)h(transformed)f
-(\(i.e.)36 b(the)25 b(n)n(um)n(b)r(er)f(of)g(dimen-)427
-4926 y(sions)31 b(of)h(the)h(space)e(in)h(whic)n(h)g(the)g(p)r(oin)n
-(ts)g(will)g(reside\).)50 b(The)32 b(same)f(n)n(um)n(b)r(er)h(is)g
-(applicable)f(to)h(b)r(oth)427 5026 y(input)d(and)e(output)h(p)r(oin)n
-(ts.)259 5160 y Fd(ina)427 5260 y Fj(An)i(arra)n(y)d(con)n(taining)i
-(the)g Ft(")p Fj(nco)r(ord)p Ft(")f Fj(co)r(ordinates)g(of)i(corner)d
-(A)j(of)g(the)f(windo)n(w)g(in)h(the)g(input)g(co)r(or-)427
-5360 y(dinate)e(system.)259 5494 y Fd(in)m(b)427 5593
-y Fj(An)i(arra)n(y)e(con)n(taining)g(the)i Ft(")p Fj(nco)r(ord)p
-Ft(")e Fj(co)r(ordinates)h(of)g(corner)f(B)i(of)f(the)i(windo)n(w)e(in)
-h(the)g(input)g(co)r(or-)427 5693 y(dinate)e(system.)p
-eop end
-%%Page: 386 396
-TeXDict begin 386 395 bop 0 52 a FF(386)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(outa)427
-451 y Fj(An)42 b(arra)n(y)c(con)n(taining)i(the)i Ft(")p
-Fj(nco)r(ord)p Ft(")d Fj(co)r(ordinates)g(of)i(corner)f(A)h(of)g(the)g
-(windo)n(w)g(in)g(the)g(output)427 551 y(co)r(ordinate)27
-b(system.)259 688 y Fd(outb)427 787 y Fj(An)42 b(arra)n(y)d(con)n
-(taining)h(the)i Ft(")p Fj(nco)r(ord)p Ft(")d Fj(co)r(ordinates)h(of)h
-(corner)f(B)h(of)g(the)g(windo)n(w)g(in)g(the)h(output)427
-887 y(co)r(ordinate)27 b(system.)259 1024 y Fd(options)427
-1124 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-1223 y(assignmen)n(ts)c(to)h(b)r(e)h(used)f(for)g(initialising)f(the)i
-(new)f(WinMap.)37 b(The)25 b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)
-g(that)427 1323 y(for)h(the)h(astSet)g(function)g(and)g(ma)n(y)f
-(include)h Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g
-(iden)n(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-1423 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 1560
-y Fd(...)427 1660 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 1759 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 1859 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 1958 y Fj(function\).)0 2129
-y Fd(Returned)32 b(V)-8 b(alue:)259 2274 y(astWinMap\(\))427
-2374 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(WinMap.)0
-2545 y Fd(Notes:)340 2836 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 2936 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 3106 y Fd(Status)33
-b(Handling)n(:)227 3252 y Fj(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 3352 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fj(in)n(t)227 3452 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p
-0 3660 3780 12 v 0 3791 a Fz(astW)-11 b(rite)618 b Fe(W)-10
-b(rite)38 b(an)g(Ob)7 b(ject)38 b(to)g(a)h(Channel)615
-b Fz(astW)-11 b(rite)0 3989 y Fd(Description:)44 b Fj(This)21
-b(function)h(writes)f(an)g(Ob)5 b(ject)21 b(to)g(a)f(Channel,)j(app)r
-(ending)e(it)g(to)g(an)n(y)g(previous)f(Ob)5 b(jects)20
-b(written)227 4088 y(to)28 b(that)g(Channel.)0 4247 y
-Fd(Synopsis:)121 b Ft(int)42 b(astWrite\()e(AstChannel)g
-Fi(\003)p Ft(this,)h(AstObject)e Fi(\003)p Ft(object)i(\))0
-4405 y Fd(P)m(arameters:)259 4550 y(this)427 4650 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Channel.)259 4787 y Fd(ob)5 b(ject)427 4887
-y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject)27 b(whic)n(h)h(is)f(to)
-h(b)r(e)g(written.)0 5057 y Fd(Returned)k(V)-8 b(alue:)259
-5202 y(astW)g(rite\(\))427 5302 y Fj(The)26 b(n)n(um)n(b)r(er)f(of)h
-(Ob)5 b(jects)25 b(written)h(to)g(the)g(Channel)f(b)n(y)h(this)g(in)n
-(v)n(o)r(cation)e(of)i(astW)-7 b(rite)25 b(\(normally)-7
-b(,)25 b(this)427 5402 y(will)j(b)r(e)g(one\).)0 5572
-y Fd(Notes:)p eop end
-%%Page: 387 397
-TeXDict begin 387 396 bop 3643 52 a FF(387)340 351 y
-Fi(\017)45 b Fj(A)29 b(v)-5 b(alue)29 b(of)f(zero)g(will)h(b)r(e)g
-(returned)f(if)h(this)g(function)g(is)f(in)n(v)n(ok)n(ed)f(with)j(the)f
-(AST)g(error)d(status)j(set,)f(or)427 451 y(if)g(it)g(should)g(fail)f
-(for)h(an)n(y)e(reason.)340 585 y Fi(\017)45 b Fj(In)n(v)n(oking)27
-b(this)h(function)h(will)f(usually)f(cause)h(the)g(sink)g(function)g
-(asso)r(ciated)f(with)h(the)h(c)n(hannel)e(to)h(b)r(e)427
-685 y(called)g(in)g(order)f(to)h(transfer)f(a)h(textual)g(description)g
-(of)g(the)g(supplied)g(ob)5 b(ject)28 b(to)g(some)g(external)f(data)427
-784 y(store.)36 b(Ho)n(w)n(ev)n(er,)24 b(the)i(FitsChan)g(class)f(b)r
-(eha)n(v)n(es)g(di\013eren)n(tly)-7 b(.)36 b(In)n(v)n(oking)24
-b(this)i(function)h(on)e(a)h(FitsChan)427 884 y(causes)35
-b(new)g(FITS)h(header)f(cards)f(to)h(b)r(e)h(added)g(to)f(an)g(in)n
-(ternal)g(bu\013er)h(\(the)g(sink)f(function)h(is)g(not)427
-983 y(in)n(v)n(ok)n(ed\).)58 b(This)35 b(bu\013er)h(is)f(written)g(out)
-g(through)f(the)i(sink)f(function)g(only)g(when)g(the)h(FitsChan)f(is)
-427 1083 y(deleted.)p 0 1285 3780 12 v 0 1416 a Fz(astXmlChan)641
-b Fe(Create)38 b(an)g(XmlChan)639 b Fz(astXmlChan)0 1584
-y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(XmlChan)h(and)g(optionally)e(initialises)i(its)g(attributes.)227
-1710 y(A)36 b(XmlChan)f(is)g(a)f(sp)r(ecialised)h(form)f(of)h(Channel)g
-(whic)n(h)g(supp)r(orts)g(XML)g(I/O)f(op)r(erations.)58
-b(W)-7 b(riting)35 b(an)227 1810 y(Ob)5 b(ject)22 b(to)f(an)h(XmlChan)g
-(\(using)f(astW)-7 b(rite\))22 b(will,)h(if)f(the)g(Ob)5
-b(ject)22 b(is)g(suitable,)g(generate)f(an)g(XML)h(description)227
-1909 y(of)k(that)g(Ob)5 b(ject,)26 b(and)f(reading)g(from)g(an)h
-(XmlChan)g(will)g(create)e(a)i(new)f(Ob)5 b(ject)26 b(from)f(its)h(XML)
-g(description.)227 2035 y(Normally)-7 b(,)36 b(when)e(y)n(ou)g(use)g
-(an)h(XmlChan,)h(y)n(ou)e(should)g(pro)n(vide)g Ft(")p
-Fj(source)p Ft(")e Fj(and)i Ft(")p Fj(sink)p Ft(")g Fj(functions)h
-(whic)n(h)227 2134 y(connect)c(it)h(to)f(an)g(external)f(data)g(store)h
-(b)n(y)f(reading)g(and)h(writing)g(the)h(resulting)e(XML)h(text.)48
-b(By)31 b(default,)227 2234 y(ho)n(w)n(ev)n(er,)26 b(a)h(Channel)g
-(will)h(read)f(from)g(standard)g(input)h(and)g(write)f(to)h(standard)e
-(output.)0 2386 y Fd(Synopsis:)121 b Ft(AstXmlChan)39
-b Fi(\003)p Ft(astXmlChan\()g(const)i(char)h Fi(\003)p
-Ft(\()p Fi(\003)g Ft(source\)\()f(void)h(\),)g(void)g(\()p
-Fi(\003)h Ft(sink\)\()e(const)227 2485 y(char)h Fi(\003)h
-Ft(\),)g(const)f(char)g Fi(\003)p Ft(options,)d(...)86
-b(\))0 2637 y Fd(P)m(arameters:)259 2776 y(source)427
-2876 y Fj(P)n(oin)n(ter)17 b(to)h(a)g(source)g(function)h(that)g(tak)n
-(es)e(no)h(argumen)n(ts)f(and)i(returns)e(a)h(p)r(oin)n(ter)h(to)f(a)g
-(n)n(ull-terminated)427 2975 y(string.)53 b(This)33 b(function)g(will)g
-(b)r(e)h(used)f(b)n(y)f(the)i(XmlChan)f(to)g(obtain)g(lines)g(of)f
-(input)i(text.)54 b(On)32 b(eac)n(h)427 3075 y(in)n(v)n(o)r(cation,)g
-(it)g(should)f(return)h(a)f(p)r(oin)n(ter)g(to)h(the)g(next)g(input)g
-(line)g(read)f(from)g(some)g(external)g(XML)427 3174
-y(data)c(store,)g(and)h(a)f(NULL)h(p)r(oin)n(ter)f(when)h(there)f(are)g
-(no)g(more)g(lines)g(to)h(read.)427 3291 y(If)g Ft(")p
-Fj(source)p Ft(")e Fj(is)h(NULL,)h(the)g(Channel)g(will)g(read)e(from)i
-(standard)e(input)j(instead.)259 3425 y Fd(sink)427 3525
-y Fj(P)n(oin)n(ter)22 b(to)g(a)h(sink)g(function)g(that)h(tak)n(es)e(a)
-g(p)r(oin)n(ter)h(to)f(a)h(n)n(ull-terminated)g(string)f(as)g(an)h
-(argumen)n(t)f(and)427 3625 y(returns)27 b(v)n(oid.)37
-b(This)28 b(function)g(will)g(b)r(e)g(used)g(b)n(y)f(the)i(XmlChan)f
-(to)f(deliv)n(er)g(lines)h(of)g(output)g(text.)38 b(On)427
-3724 y(eac)n(h)29 b(in)n(v)n(o)r(cation,)h(it)g(should)g(deliv)n(er)f
-(the)h(con)n(ten)n(ts)g(of)g(the)g(string)f(supplied)i(to)f(some)f
-(external)g(XML)427 3824 y(data)e(store.)427 3941 y(If)h
-Ft(")p Fj(sink)p Ft(")f Fj(is)g(NULL,)h(the)g(XmlChan)g(will)g(write)g
-(to)f(standard)g(output)h(instead.)259 4075 y Fd(options)427
-4174 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-4274 y(assignmen)n(ts)22 b(to)h(b)r(e)g(used)h(for)e(initialising)h
-(the)g(new)h(XmlChan.)35 b(The)23 b(syn)n(tax)f(used)i(is)e(iden)n
-(tical)h(to)g(that)427 4373 y(for)j(the)h(astSet)g(function)g(and)g(ma)
-n(y)f(include)h Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r
-(eci\014ers)g(iden)n(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p
-Ft(")g Fj(sym)n(b)r(ols)427 4473 y(in)i(the)g(normal)f(w)n(a)n(y)-7
-b(.)259 4607 y Fd(...)427 4707 y Fj(If)38 b(the)g Ft(")p
-Fj(options)p Ft(")e Fj(string)h(con)n(tains)f Ft(")p
-Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g
-(list)h(of)f(additional)427 4806 y(argumen)n(ts)26 b(ma)n(y)h(follo)n
-(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5 b(alues)27
-b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)37
-b(The)427 4906 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 5006 y Fj(function\).)0
-5170 y Fd(Returned)32 b(V)-8 b(alue:)259 5309 y(astXmlChan\(\))427
-5408 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(XmlChan.)0
-5572 y Fd(Notes:)p eop end
-%%Page: 388 398
-TeXDict begin 388 397 bop 0 52 a FF(388)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(If)28 b(the)g(external)e(data)h(source)f(or)g(sink)i(uses)e(a)h(c)
-n(haracter)f(enco)r(ding)g(other)h(than)h(ASCI)r(I,)g(the)f(supplied)
-427 451 y(source)i(and)g(sink)g(functions)h(should)f(translate)g(b)r
-(et)n(w)n(een)h(the)f(external)g(c)n(haracter)f(enco)r(ding)h(and)g
-(the)427 551 y(in)n(ternal)e(ASCI)r(I)i(enco)r(ding)e(used)g(b)n(y)h
-(AST.)340 683 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 783 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 982 3780 12 v 0 1113
-a Fz(astZo)t(omMap)622 b Fe(Create)37 b(a)i(Zo)s(omMap)620
-b Fz(astZo)t(omMap)0 1302 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(Zo)r(omMap)g(and)g(optionally)g
-(initialises)h(its)f(attributes.)227 1426 y(A)40 b(Zo)r(omMap)e(is)h(a)
-f(Mapping)h(whic)n(h)g Ft(")p Fj(zo)r(oms)p Ft(")f Fj(a)g(set)h(of)g(p)
-r(oin)n(ts)g(ab)r(out)g(the)h(origin)e(b)n(y)h(m)n(ultiplying)g(all)227
-1526 y(co)r(ordinate)25 b(v)-5 b(alues)25 b(b)n(y)h(the)g(same)f(scale)
-g(factor)f(\(the)j(in)n(v)n(erse)d(transformation)g(is)i(p)r(erformed)f
-(b)n(y)g(dividing)h(b)n(y)227 1626 y(this)i(scale)f(factor\).)0
-1775 y Fd(Synopsis:)121 b Ft(AstZoomMap)39 b Fi(\003)p
-Ft(astZoomMap\()g(int)j(ncoord,)f(double)g(zoom,)h(const)f(char)h
-Fi(\003)p Ft(options,)e(...)86 b(\))0 1924 y Fd(P)m(arameters:)259
-2061 y(nco)s(ord)427 2160 y Fj(The)25 b(n)n(um)n(b)r(er)f(of)g(co)r
-(ordinate)g(v)-5 b(alues)24 b(for)g(eac)n(h)f(p)r(oin)n(t)i(to)f(b)r(e)
-h(transformed)f(\(i.e.)36 b(the)25 b(n)n(um)n(b)r(er)f(of)g(dimen-)427
-2260 y(sions)31 b(of)h(the)h(space)e(in)h(whic)n(h)g(the)g(p)r(oin)n
-(ts)g(will)g(reside\).)50 b(The)32 b(same)f(n)n(um)n(b)r(er)h(is)g
-(applicable)f(to)h(b)r(oth)427 2360 y(input)d(and)e(output)h(p)r(oin)n
-(ts.)259 2493 y Fd(zo)s(om)427 2592 y Fj(Initial)f(scale)e(factor)g(b)n
-(y)h(whic)n(h)h(co)r(ordinate)e(v)-5 b(alues)25 b(should)h(b)r(e)h(m)n
-(ultiplied)g(\(b)n(y)f(the)h(forw)n(ard)d(transfor-)427
-2692 y(mation\))f(or)e(divided)i(\(b)n(y)g(the)g(in)n(v)n(erse)e
-(transformation\).)34 b(This)22 b(factor)g(ma)n(y)g(subsequen)n(tly)g
-(b)r(e)h(c)n(hanged)427 2791 y(via)k(the)h(Zo)r(omMap's)f(Zo)r(om)g
-(attribute.)37 b(It)28 b(ma)n(y)f(b)r(e)h(p)r(ositiv)n(e)f(or)f
-(negativ)n(e,)h(but)h(should)g(not)f(b)r(e)h(zero.)259
-2924 y Fd(options)427 3024 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 3124 y(assignmen)n(ts)21
-b(to)g(b)r(e)h(used)g(for)f(initialising)g(the)h(new)g(Zo)r(omMap.)34
-b(The)22 b(syn)n(tax)e(used)i(is)f(iden)n(tical)h(to)f(that)427
-3223 y(for)26 b(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-3323 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 3456
-y Fd(...)427 3555 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 3655 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 3754 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 3854 y Fj(function\).)0 4016
-y Fd(Returned)32 b(V)-8 b(alue:)259 4152 y(astZo)s(omMap\(\))427
-4252 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Zo)r(omMap.)0
-4414 y Fd(Notes:)340 4696 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 4796 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 4958 y Fd(Status)33
-b(Handling)n(:)227 5104 y Fj(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 5204 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fj(in)n(t)227 5303 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p
-eop end
-%%Page: 389 399
-TeXDict begin 389 398 bop 3643 52 a FF(389)0 351 y Fz(C)135
-b(AST)43 b(A)l(ttribute)j(Descriptions)p 0 596 3780 12
-v 0 735 a(Abbrev\(axis\))1073 728 y Fe(Abbreviate)37
-b(leading)g(\014elds)i(within)1330 843 y(n)m(umerical)d(axis)i(lab)s
-(els?)3010 735 y Fz(Abbrev\(axis\))0 1021 y Fd(Description:)44
-b Fj(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)
-h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-1120 y(astGrid)22 b(function\))g(b)n(y)g(determining)f(whether)h(matc)n
-(hing)g(leading)f(\014elds)h(should)f(b)r(e)h(remo)n(v)n(ed)f(from)g
-(adjacen)n(t)227 1220 y(n)n(umerical)i(axis)f(lab)r(els.)35
-b(It)24 b(tak)n(es)e(a)h(separate)f(v)-5 b(alue)23 b(for)g(eac)n(h)f
-(ph)n(ysical)h(axis)f(of)h(a)g(Plot)g(so)g(that,)h(for)f(instance,)227
-1320 y(the)36 b(setting)f Ft(")p Fj(Abbrev\(2\)=0)p Ft(")e
-Fj(sp)r(eci\014es)h(that)i(matc)n(hing)e(leading)g(\014elds)h(should)g
-(not)g(b)r(e)g(remo)n(v)n(ed)f(on)g(the)227 1419 y(second)27
-b(axis.)227 1548 y(If)33 b(the)g(Abbrev)g(v)-5 b(alue)32
-b(of)g(a)h(Plot)f(is)g(non-zero)f(\(the)i(default\),)i(then)e(leading)f
-(\014elds)g(will)h(b)r(e)g(remo)n(v)n(ed)e(from)227 1647
-y(adjacen)n(t)c(axis)g(lab)r(els)h(if)g(they)f(are)g(equal.)0
-1804 y Fd(T)m(yp)s(e:)227 1904 y Fj(In)n(teger)g(\(b)r(o)r(olean\).)0
-2061 y Fd(Class)k(Applicabilit)m(y:)259 2205 y(Plot)427
-2305 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-2475 y Fd(Notes:)340 2765 y Fi(\017)45 b Fj(If)c(no)f(axis)f(is)h(sp)r
-(eci\014ed,)k(\(e.g.)74 b Ft(")p Fj(Abbrev)p Ft(")39
-b Fj(instead)h(of)h Ft(")p Fj(Abbrev\(2\))p Ft(")p Fj(\),)h(then)f(a)f
-Ft(")p Fj(set)p Ft(")f Fj(or)g Ft(")p Fj(clear)p Ft(")427
-2865 y Fj(op)r(eration)23 b(will)i(a\013ect)f(the)h(attribute)f(v)-5
-b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f
-Ft(")p Fj(get)p Ft(")f Fj(or)g Ft(")p Fj(test)p Ft(")h
-Fj(op)r(eration)427 2964 y(will)k(use)g(just)g(the)g(Abbrev\(1\))f(v)-5
-b(alue.)p 0 3171 V 0 3303 a Fz(Adaptiv)l(e)330 b Fe(Should)38
-b(the)g(area)g(adapt)g(to)g(c)m(hanges)g(in)g(the)1400
-3418 y(co)s(ordinate)e(system?)3245 3303 y Fz(Adaptiv)l(e)0
-3614 y Fd(Description:)44 b Fj(The)28 b(co)r(ordinate)e(system)g
-(represen)n(ted)g(b)n(y)h(a)g(Region)f(ma)n(y)h(b)r(e)g(c)n(hanged)f(b)
-n(y)h(assigning)f(new)h(v)-5 b(alues)227 3714 y(to)33
-b(attributes)g(suc)n(h)g(as)f(System,)i(Unit,)h(etc.)54
-b(F)-7 b(or)32 b(instance,)i(a)e(Region)h(represen)n(ting)e(an)i(area)e
-(on)i(the)g(sky)227 3813 y(in)h(ICRS)f(co)r(ordinates)f(ma)n(y)g(ha)n
-(v)n(e)g(its)i(System)f(attribute)g(c)n(hanged)f(so)h(that)g(it)h
-(represen)n(ts)e(\(sa)n(y\))g(Galactic)227 3913 y(co)r(ordinates)h
-(instead)h(of)h(ICRS.)f(This)h(attribute)f(con)n(trols)f(what)h(happ)r
-(ens)g(when)h(the)g(co)r(ordinate)e(system)227 4013 y(represen)n(ted)27
-b(b)n(y)g(a)g(Region)g(is)h(c)n(hanged)e(in)i(this)g(w)n(a)n(y)-7
-b(.)227 4141 y(If)40 b(Adaptiv)n(e)f(is)h(non-zero)d(\(the)j
-(default\),)j(then)d(area)e(represen)n(ted)g(b)n(y)h(the)h(Region)f
-(adapts)g(to)g(the)h(new)227 4241 y(co)r(ordinate)27
-b(system.)37 b(That)27 b(is,)h(the)g(n)n(umerical)f(v)-5
-b(alues)27 b(whic)n(h)g(de\014ne)h(the)g(area)e(represen)n(ted)h(b)n(y)
-g(the)h(Region)227 4340 y(are)34 b(c)n(hanged)g(b)n(y)h(mapping)f(them)
-i(from)e(the)h(old)g(co)r(ordinate)f(system)g(in)n(to)h(the)g(new)g(co)
-r(ordinate)f(system.)227 4440 y(Th)n(us)28 b(the)g(Region)e(con)n(tin)n
-(ues)h(to)h(represen)n(t)e(the)i(same)f(ph)n(ysical)g(area.)227
-4568 y(If)35 b(Adaptiv)n(e)g(is)g(zero,)g(then)h(area)d(represen)n(ted)
-h(b)n(y)g(the)h(Region)f(do)r(es)h(not)g(adapt)f(to)h(the)g(new)g(co)r
-(ordinate)227 4668 y(system.)59 b(That)35 b(is,)h(the)f(n)n(umerical)f
-(v)-5 b(alues)35 b(whic)n(h)g(de\014ne)g(the)g(area)e(represen)n(ted)h
-(b)n(y)h(the)g(Region)f(are)g(left)227 4768 y(unc)n(hanged.)i(Th)n(us)
-28 b(the)g(ph)n(ysical)e(area)g(represen)n(ted)h(b)n(y)g(the)h(Region)f
-(will)h(usually)f(c)n(hange.)227 4896 y(As)35 b(an)g(example,)h
-(consider)e(a)h(Region)f(describ)r(e)h(a)f(range)g(of)h(w)n(a)n(v)n
-(elength)e(from)h(2000)g(Angstrom)g(to)g(4000)227 4996
-y(Angstrom.)42 b(If)30 b(the)g(Unit)g(attribute)g(for)e(the)i(Region)f
-(is)g(c)n(hanged)g(from)g(Angstrom)g(to)g Ft(")p Fj(nm)p
-Ft(")g Fj(\(nanometre\),)227 5095 y(what)f(happ)r(ens)f(dep)r(ends)h
-(on)f(the)g(setting)h(of)f(Adaptiv)n(e.)37 b(If)27 b(Adaptiv)n(e)h(is)f
-(non-zero,)f(the)h(Mapping)g(from)g(the)227 5195 y(old)34
-b(to)f(the)i(new)e(co)r(ordinate)g(system)g(is)h(found.)56
-b(In)33 b(this)i(case)d(it)j(is)e(a)g(simple)h(scaling)f(b)n(y)h(a)f
-(factor)g(of)g(0.1)227 5295 y(\(since)e(1)f(Angstrom)g(is)h(0.1)e
-(nm\).)47 b(This)31 b(Mapping)f(is)g(then)i(used)e(to)h(mo)r(dify)g
-(the)g(n)n(umerical)f(v)-5 b(alues)30 b(within)227 5394
-y(the)i(Region,)g(c)n(hanging)e(2000)g(to)h(200)f(and)i(4000)d(to)j
-(400.)47 b(Th)n(us)31 b(the)h(mo)r(di\014ed)g(region)e(represen)n(ts)g
-(200)g(nm)227 5494 y(to)e(400)e(nm,)h(the)h(same)f(ph)n(ysical)g(space)
-f(as)h(the)h(original)e(2000)f(Angstrom)i(to)g(4000)f(Angstrom.)36
-b(Ho)n(w)n(ev)n(er,)25 b(if)227 5593 y(Adaptiv)n(e)j(had)g(b)r(een)g
-(zero,)f(then)h(the)g(n)n(umerical)f(v)-5 b(alues)28
-b(w)n(ould)f(not)h(ha)n(v)n(e)f(b)r(een)h(c)n(hanged,)f(resulting)g(in)
-h(the)227 5693 y(\014nal)g(Region)f(represen)n(ting)f(2000)f(nm)j(to)g
-(4000)e(nm.)p eop end
-%%Page: 390 400
-TeXDict begin 390 399 bop 0 52 a FF(390)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fj(Setting)g(Adaptiv)n(e)g(to)f(zero)f(can)h(b)r(e)h(necessary)e(if)i
-(y)n(ou)f(w)n(an)n(t)g(correct)f(inaccurate)g(attribute)i(settings)f
-(in)h(an)227 451 y(existing)23 b(Region.)35 b(F)-7 b(or)23
-b(instance,)h(when)f(creating)g(a)g(Region)f(y)n(ou)h(ma)n(y)g(not)g
-(kno)n(w)g(what)g(Ep)r(o)r(c)n(h)g(v)-5 b(alue)23 b(to)h(use,)227
-551 y(so)k(y)n(ou)f(w)n(ould)g(lea)n(v)n(e)g(Ep)r(o)r(c)n(h)g(unset)h
-(resulting)f(in)i(some)e(default)h(v)-5 b(alue)28 b(b)r(eing)g(used.)38
-b(If)28 b(at)g(some)f(later)g(p)r(oin)n(t)227 650 y(in)34
-b(the)h(application,)f(the)g(correct)f(Ep)r(o)r(c)n(h)g(v)-5
-b(alue)34 b(is)g(determined,)h(y)n(ou)e(could)h(assign)e(the)j(correct)
-d(v)-5 b(alue)34 b(to)227 750 y(the)c(Ep)r(o)r(c)n(h)f(attribute.)42
-b(Ho)n(w)n(ev)n(er,)27 b(y)n(ou)i(w)n(ould)g(\014rst)f(need)i(to)f(set)
-g(Adaptiv)n(e)g(temp)r(orarily)f(to)h(zero,)g(b)r(ecause)227
-849 y(otherwise)g(the)h(area)e(represen)n(ted)g(b)n(y)i(the)g(Region)e
-(w)n(ould)h(b)r(e)h(Mapp)r(ed)g(from)g(the)f(spurious)g(default)h(Ep)r
-(o)r(c)n(h)227 949 y(to)e(the)g(new)f(correct)g(Ep)r(o)r(c)n(h,)g(whic)
-n(h)g(is)h(not)f(what)h(is)f(required.)0 1107 y Fd(T)m(yp)s(e:)227
-1207 y Fj(In)n(teger)g(\(b)r(o)r(olean\).)0 1365 y Fd(Class)k
-(Applicabilit)m(y:)259 1509 y(Region)427 1609 y Fj(All)d(Regions)f(ha)n
-(v)n(e)f(this)i(attribute.)p 0 1817 3780 12 v 0 1948
-a Fz(AlignO\013set)383 b Fe(Align)37 b(SkyF)-10 b(rames)38
-b(using)h(the)f(o\013set)1400 2063 y(co)s(ordinate)e(system?)3115
-1948 y Fz(AlignO\013set)0 2260 y Fd(Description:)44 b
-Fj(This)26 b(attribute)g(is)g(a)g(b)r(o)r(olean)f(v)-5
-b(alue)26 b(whic)n(h)g(con)n(trols)e(ho)n(w)i(a)f(SkyF)-7
-b(rame)25 b(b)r(eha)n(v)n(es)g(when)h(it)h(is)f(used)227
-2360 y(\(b)n(y)c(astFindF)-7 b(rame)22 b(or)e(astCon)n(v)n(ert\))h(as)g
-(a)g(template)i(to)e(matc)n(h)h(another)f(\(target\))g(SkyF)-7
-b(rame.)35 b(It)22 b(determines)227 2460 y(the)28 b(co)r(ordinate)f
-(system)g(in)h(whic)n(h)f(the)h(t)n(w)n(o)f(SkyF)-7 b(rames)27
-b(are)f(aligned)h(if)h(a)g(matc)n(h)f(o)r(ccurs.)227
-2588 y(If)21 b(the)g(template)g(and)f(target)g(SkyF)-7
-b(rames)19 b(b)r(oth)i(ha)n(v)n(e)e(de\014ned)i(o\013set)g(co)r
-(ordinate)e(systems)h(\(i.e.)35 b(the)21 b(SkyRefIs)227
-2688 y(attribute)j(is)g(set)f(to)h(either)f Ft(")p Fj(Origin)p
-Ft(")f Fj(or)h Ft(")g Fj(P)n(ole)p Ft(")p Fj(\),)g(and)g(they)h(b)r
-(oth)g(ha)n(v)n(e)f(a)g(non-zero)f(v)-5 b(alue)23 b(for)h
-(AlignO\013set,)227 2788 y(then)h(alignmen)n(t)e(o)r(ccurs)g(within)h
-(the)g(o\013set)g(co)r(ordinate)f(systems)g(\(that)h(is,)h(a)e(UnitMap)
-i(will)f(alw)n(a)n(ys)d(b)r(e)k(used)227 2887 y(to)e(align)f(the)g(t)n
-(w)n(o)g(SkyF)-7 b(rames\).)35 b(If)23 b(either)f(the)h(template)g(or)e
-(target)h(SkyF)-7 b(rame)22 b(has)g(zero)f(\(the)i(default)g(v)-5
-b(alue\))227 2987 y(for)35 b(AlignO\013set,)j(or)d(if)h(either)f(SkyF)
--7 b(rame)35 b(has)g(SkyRefIs)h(set)g(to)f Ft(")p Fj(Ignored)p
-Ft(")p Fj(,)h(then)g(alignmen)n(t)f(o)r(ccurring)227
-3087 y(within)29 b(the)f(co)r(ordinate)e(system)h(sp)r(eci\014ed)h(b)n
-(y)f(the)h(AlignSystem)g(attribute.)0 3244 y Fd(T)m(yp)s(e:)227
-3344 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0 3502 y Fd(Class)k
-(Applicabilit)m(y:)259 3647 y(SkyF)-8 b(rame)427 3747
-y Fj(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i(attribute.)p
-0 3954 V 0 4086 a Fz(AlignSideBand)227 b Fe(Should)38
-b(the)g(SideBand)h(attribute)1183 4186 y(b)s(e)g(tak)m(en)f(in)m(to)f
-(accoun)m(t)g(when)1157 4285 y(aligning)f(this)j(DSBSp)s(ecF)-10
-b(rame)1117 4400 y(with)37 b(another)h(DSBSp)s(ecF)-10
-b(rame?)2903 4086 y Fz(AlignSideBand)0 4597 y Fd(Description:)44
-b Fj(This)28 b(attribute)g(con)n(trols)e(ho)n(w)h(a)g(DSBSp)r(ecF)-7
-b(rame)27 b(b)r(eha)n(v)n(es)g(when)h(an)f(attempt)h(is)f(made)h(to)f
-(align)227 4697 y(it)i(with)g(another)f(DSBSp)r(ecF)-7
-b(rame)28 b(using)g(astFindF)-7 b(rame)28 b(or)g(astCon)n(v)n(ert.)38
-b(If)29 b(b)r(oth)f(DSBSp)r(ecF)-7 b(rames)29 b(ha)n(v)n(e)227
-4796 y(a)i(non-zero)e(v)-5 b(alue)32 b(for)e(AlignSideBand,)i(the)g(v)
--5 b(alue)31 b(of)g(the)g(SideBand)g(attribute)h(in)f(eac)n(h)f(DSBSp)r
-(ecF)-7 b(rame)227 4896 y(is)36 b(used)g(so)f(that)h(alignmen)n(t)g(o)r
-(ccurs)f(b)r(et)n(w)n(een)g(sidebands.)62 b(That)35 b(is,)j(if)f(one)e
-(DSBSp)r(ecF)-7 b(rame)36 b(represen)n(ts)227 4996 y(USB)k(and)e(the)i
-(other)e(represen)n(ts)g(LSB)h(then)g(astFindF)-7 b(rame)39
-b(and)f(astCon)n(v)n(ert)f(will)j(recognise)d(that)i(the)227
-5095 y(DSBSp)r(ecF)-7 b(rames)33 b(represen)n(t)g(di\013eren)n(t)g
-(sidebands)g(and)g(will)g(tak)n(e)g(this)h(in)n(to)f(accoun)n(t)f(when)
-h(constructing)227 5195 y(the)25 b(Mapping)f(that)h(maps)f(p)r
-(ositions)g(in)g(one)g(DSBSp)r(ecF)-7 b(rame)25 b(in)n(to)f(the)h
-(other.)35 b(If)25 b(AlignSideBand)f(in)h(either)227
-5295 y(DSBSp)r(ecF)-7 b(rame)25 b(is)f(set)h(to)f(zero,)h(then)g(the)g
-(v)-5 b(alues)24 b(of)g(the)h(SideBand)g(attributes)f(are)g(ignored.)34
-b(In)25 b(the)g(ab)r(o)n(v)n(e)227 5394 y(example,)h(this)g(w)n(ould)g
-(result)f(in)h(a)g(frequency)f(in)h(the)g(\014rst)g(DSBSp)r(ecF)-7
-b(rame)26 b(b)r(eing)g(mapp)r(ed)g(on)n(to)f(the)h(same)227
-5494 y(frequency)d(in)g(the)g(second)g(DSBSp)r(ecF)-7
-b(rame,)24 b(ev)n(en)e(though)h(those)g(frequencies)f(refer)g(to)h
-(di\013eren)n(t)g(sidebands.)227 5593 y(In)k(other)f(w)n(ords,)f(if)i
-(either)f(AlignSideBand)g(attribute)h(is)f(zero,)g(then)h(the)g(t)n(w)n
-(o)e(DSBSp)r(ecF)-7 b(rames)27 b(aligns)e(lik)n(e)227
-5693 y(basic)i(Sp)r(ecF)-7 b(rames.)37 b(The)27 b(default)h(v)-5
-b(alue)28 b(for)f(AlignSideBand)g(is)h(zero.)p eop end
-%%Page: 391 401
-TeXDict begin 391 400 bop 3643 52 a FF(391)227 351 y
-Fj(When)23 b(astFindF)-7 b(rame)22 b(or)g(astCon)n(v)n(ert)e(is)i(used)
-h(on)f(t)n(w)n(o)f(DSBSp)r(ecF)-7 b(rames)23 b(\(p)r(oten)n(tially)f
-(describing)f(di\013eren)n(t)227 451 y(sp)r(ectral)d(co)r(ordinate)g
-(systems)g(and/or)f(sidebands\),)k(it)e(returns)f(a)g(Mapping)g(whic)n
-(h)h(can)f(b)r(e)h(used)g(to)g(transform)227 551 y(a)34
-b(p)r(osition)f(in)i(one)e(DSBSp)r(ecF)-7 b(rame)34 b(in)n(to)g(the)g
-(corresp)r(onding)e(p)r(osition)i(in)g(the)g(other.)55
-b(The)34 b(Mapping)g(is)227 650 y(made)28 b(up)g(of)f(the)h(follo)n
-(wing)f(steps)g(in)h(the)g(indicated)g(order:)340 908
-y Fi(\017)45 b Fj(If)28 b(b)r(oth)g(DSBSp)r(ecF)-7 b(rames)27
-b(ha)n(v)n(e)f(a)h(v)-5 b(alue)28 b(of)f(1)g(for)g(the)h(AlignSideBand)
-f(attribute,)h(map)f(v)-5 b(alues)27 b(from)427 1007
-y(the)39 b(target's)f(curren)n(t)g(sideband)g(\(giv)n(en)g(b)n(y)h(its)
-g(SideBand)f(attribute\))h(to)g(the)g(observ)n(ed)e(sideband)427
-1107 y(\(whether)27 b(USB)g(or)f(LSB\).)h(If)g(the)h(target)e(already)f
-(represen)n(ts)g(the)i(observ)n(ed)f(sideband,)g(this)h(step)g(will)427
-1207 y(lea)n(v)n(e)g(the)i(v)-5 b(alues)28 b(unc)n(hanged.)39
-b(If)28 b(either)h(of)f(the)h(t)n(w)n(o)e(DSBSp)r(ecF)-7
-b(rames)29 b(ha)n(v)n(e)e(a)h(v)-5 b(alue)28 b(of)g(zero)g(for)f(its)
-427 1306 y(AlignSideBand)h(attribute,)g(then)g(this)g(step)f(is)h
-(omitted.)340 1437 y Fi(\017)45 b Fj(Map)25 b(the)g(v)-5
-b(alues)24 b(from)g(the)h(sp)r(ectral)f(system)g(of)h(the)g(target)e
-(to)i(the)g(sp)r(ectral)e(system)i(of)f(the)h(template.)427
-1536 y(This)39 b(Mapping)g(tak)n(es)f(in)n(to)h(accoun)n(t)f(all)h(the)
-g(inherited)g(Sp)r(ecF)-7 b(rame)39 b(attributes)g(suc)n(h)g(as)f
-(System,)427 1636 y(StdOfRest,)29 b(Unit,)f(etc.)340
-1767 y Fi(\017)45 b Fj(If)28 b(b)r(oth)g(DSBSp)r(ecF)-7
-b(rames)27 b(ha)n(v)n(e)f(a)h(v)-5 b(alue)28 b(of)f(1)g(for)g(the)h
-(AlignSideBand)f(attribute,)h(map)f(v)-5 b(alues)27 b(from)427
-1866 y(the)37 b(result's)f(observ)n(ed)e(sideband)j(to)f(the)g
-(result's)g(curren)n(t)g(sideband)g(\(giv)n(en)f(b)n(y)h(its)h
-(SideBand)f(at-)427 1966 y(tribute\).)h(If)24 b(the)g(result)g(already)
-f(represen)n(ts)f(the)i(observ)n(ed)f(sideband,)h(this)h(step)f(will)g
-(lea)n(v)n(e)f(the)h(v)-5 b(alues)427 2065 y(unc)n(hanged.)44
-b(If)31 b(either)f(of)g(the)g(t)n(w)n(o)g(DSBSp)r(ecF)-7
-b(rames)30 b(ha)n(v)n(e)f(a)h(v)-5 b(alue)30 b(of)g(zero)f(for)g(its)i
-(AlignSideBand)427 2165 y(attribute,)d(then)g(this)g(step)g(is)f
-(omitted.)0 2325 y Fd(T)m(yp)s(e:)227 2424 y Fj(In)n(teger)g(\(b)r(o)r
-(olean\).)0 2571 y Fd(Class)k(Applicabilit)m(y:)259 2706
-y(DSBSp)s(ecF)-8 b(rame)427 2805 y Fj(All)28 b(DSBSp)r(ecF)-7
-b(rames)28 b(ha)n(v)n(e)e(this)i(attribute.)p 0 3000
-3780 12 v 0 3132 a Fz(AlignSp)t(ecO\013set)238 b Fe(Align)38
-b(Sp)s(ecF)-10 b(rames)38 b(using)h(the)1245 3246 y(o\013set)g(co)s
-(ordinate)d(system?)2841 3132 y Fz(AlignSp)t(ecO\013set)0
-3430 y Fd(Description:)44 b Fj(This)37 b(attribute)g(is)g(a)g(b)r(o)r
-(olean)f(v)-5 b(alue)37 b(whic)n(h)g(con)n(trols)e(ho)n(w)h(a)h(Sp)r
-(ecF)-7 b(rame)36 b(b)r(eha)n(v)n(es)g(when)h(it)h(is)227
-3530 y(used)e(\(b)n(y)g(astFindF)-7 b(rame)36 b(or)f(astCon)n(v)n
-(ert\))f(as)h(a)h(template)g(to)g(matc)n(h)g(another)f(\(target\))g(Sp)
-r(ecF)-7 b(rame.)62 b(It)227 3630 y(determines)27 b(whether)f(alignmen)
-n(t)g(o)r(ccurs)f(b)r(et)n(w)n(een)i(the)g(o\013set)f(v)-5
-b(alues)26 b(de\014ned)h(b)n(y)f(the)h(curren)n(t)e(v)-5
-b(alue)27 b(of)f(the)227 3729 y(Sp)r(ecO\013set)i(attribute,)g(or)f(b)r
-(et)n(w)n(een)g(the)h(corresp)r(onding)e(absolute)h(sp)r(ectral)g(v)-5
-b(alues.)227 3853 y(The)36 b(default)f(v)-5 b(alue)36
-b(of)f(zero)f(results)h(in)g(the)h(t)n(w)n(o)f(Sp)r(ecF)-7
-b(rames)35 b(b)r(eing)g(aligned)g(so)f(that)i(a)f(giv)n(en)f(absolute)
-227 3952 y(sp)r(ectral)28 b(v)-5 b(alue)28 b(in)h(one)f(is)g(mapp)r(ed)
-h(to)f(the)h(same)f(absolute)g(v)-5 b(alue)28 b(in)h(the)g(other.)38
-b(A)29 b(non-zero)e(v)-5 b(alue)28 b(results)227 4052
-y(in)j(the)g(Sp)r(ecF)-7 b(rames)30 b(b)r(eing)h(aligned)e(so)h(that)h
-(a)f(giv)n(en)g(o\013set)g(v)-5 b(alue)30 b(in)h(one)f(is)h(mapp)r(ed)g
-(to)f(the)h(same)f(o\013set)227 4152 y(v)-5 b(alue)28
-b(in)g(the)g(other.)0 4299 y Fd(T)m(yp)s(e:)227 4398
-y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0 4545 y Fd(Class)k(Applicabilit)m
-(y:)259 4680 y(Sp)s(ecF)-8 b(rame)427 4779 y Fj(All)28
-b(Sp)r(ecF)-7 b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)p
-0 4974 V 0 5106 a Fz(AlignStdOfRest)221 b Fe(Standard)38
-b(of)g(rest)g(to)g(use)i(when)1367 5205 y(aligning)c(Sp)s(ecF)-10
-b(rames)2850 5106 y Fz(AlignStdOfRest)0 5394 y Fd(Description:)44
-b Fj(This)34 b(attribute)f(con)n(trols)f(ho)n(w)h(a)f(Sp)r(ecF)-7
-b(rame)34 b(b)r(eha)n(v)n(es)e(when)h(it)h(is)f(used)g(\(b)n(y)h
-(astFindF)-7 b(rame)32 b(or)227 5494 y(astCon)n(v)n(ert\))26
-b(as)h(a)g(template)h(to)g(matc)n(h)f(another)g(\(target\))g(Sp)r(ecF)
--7 b(rame.)37 b(It)28 b(iden)n(ti\014es)g(the)g(standard)e(of)i(rest)
-227 5593 y(in)k(whic)n(h)f(alignmen)n(t)g(is)g(to)g(o)r(ccur.)47
-b(See)32 b(the)f(StdOfRest)h(attribute)g(for)e(a)h(desription)g(of)g
-(the)h(v)-5 b(alues)31 b(whic)n(h)227 5693 y(ma)n(y)c(b)r(e)h(assigned)
-f(to)g(this)h(attribute.)37 b(The)28 b(default)g(AlignStdOfRest)g(v)-5
-b(alue)27 b(is)h Ft(")p Fj(Helio)p Ft(")f Fj(\(heliographic\).)p
-eop end
-%%Page: 392 402
-TeXDict begin 392 401 bop 0 52 a FF(392)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fj(When)38 b(astFindF)-7 b(rame)38 b(or)e(astCon)n(v)n(ert)g(is)i
-(used)f(on)h(t)n(w)n(o)f(Sp)r(ecF)-7 b(rames)37 b(\(p)r(oten)n(tially)h
-(describing)e(di\013eren)n(t)227 451 y(sp)r(ectral)31
-b(co)r(ordinate)e(systems\),)j(it)f(returns)g(a)f(Mapping)h(whic)n(h)g
-(can)f(b)r(e)i(used)e(to)h(transform)f(a)h(p)r(osition)f(in)227
-551 y(one)38 b(Sp)r(ecF)-7 b(rame)37 b(in)n(to)h(the)g(corresp)r
-(onding)e(p)r(osition)h(in)h(the)g(other.)67 b(The)38
-b(Mapping)f(is)h(made)f(up)i(of)e(the)227 650 y(follo)n(wing)27
-b(steps)g(in)h(the)g(indicated)g(order:)340 909 y Fi(\017)45
-b Fj(Map)33 b(v)-5 b(alues)33 b(from)g(the)h(system)f(used)g(b)n(y)g
-(the)h(target)e(\(w)n(a)n(v)n(elength,)i(apparen)n(t)e(radial)g(v)n
-(elo)r(cit)n(y)-7 b(,)34 b(etc\))427 1009 y(to)k(the)g(system)f(sp)r
-(eci\014ed)h(b)n(y)g(the)g(AlignSystem)f(attribute,)k(using)c(the)h
-(target's)f(rest)g(frequency)g(if)427 1109 y(necessary)-7
-b(.)340 1240 y Fi(\017)45 b Fj(Map)30 b(these)h(v)-5
-b(alues)30 b(from)g(the)h(target's)e(standard)g(of)i(rest)f(to)g(the)h
-(standard)e(of)i(rest)e(sp)r(eci\014ed)i(b)n(y)f(the)427
-1340 y(AlignStdOfRest)35 b(attribute,)h(using)e(the)h(Ep)r(o)r(c)n(h,)g
-(ObsLat,)h(ObsLon,)f(ObsAlt,)h(RefDec)f(and)f(RefRA)427
-1439 y(attributes)28 b(of)f(the)h(target)f(to)g(de\014ne)h(the)g(t)n(w)
-n(o)f(standards)f(of)i(rest.)340 1571 y Fi(\017)45 b
-Fj(Map)26 b(these)f(v)-5 b(alues)26 b(from)f(the)h(standard)f(of)g
-(rest)h(sp)r(eci\014ed)g(b)n(y)f(the)h(AlignStdOfRest)g(attribute,)h
-(to)e(the)427 1671 y(template's)30 b(standard)e(of)h(rest,)g(using)g
-(the)h(Ep)r(o)r(c)n(h,)f(ObsLat,)g(ObsLon,)g(ObsAlt,)h(RefDec)g(and)f
-(RefRA)427 1770 y(attributes)f(of)f(the)h(template)g(to)g(de\014ne)g
-(the)g(t)n(w)n(o)e(standards)h(of)g(rest.)340 1902 y
-Fi(\017)45 b Fj(Map)24 b(these)g(v)-5 b(alues)24 b(from)g(the)h(system)
-f(sp)r(eci\014ed)g(b)n(y)g(the)h(AlignSystem)f(attribute,)h(to)f(the)h
-(system)f(used)427 2002 y(b)n(y)k(the)g(template,)g(using)f(the)h
-(template's)g(rest)f(frequency)g(if)h(necessary)-7 b(.)0
-2162 y Fd(T)m(yp)s(e:)227 2262 y Fj(String.)0 2410 y
-Fd(Class)31 b(Applicabilit)m(y:)259 2545 y(Sp)s(ecF)-8
-b(rame)427 2645 y Fj(All)28 b(Sp)r(ecF)-7 b(rames)27
-b(ha)n(v)n(e)g(this)h(attribute.)p 0 2842 3780 12 v 0
-2973 a Fz(AlignSystem)219 b Fe(Co)s(ordinate)36 b(system)i(in)h(whic)m
-(h)f(to)g(align)1629 3088 y(the)g(F)-10 b(rame)3037 2973
-y Fz(AlignSystem)0 3256 y Fd(Description:)44 b Fj(This)34
-b(attribute)f(con)n(trols)f(ho)n(w)h(a)g(F)-7 b(rame)32
-b(b)r(eha)n(v)n(es)h(when)g(it)h(is)f(used)h(\(b)n(y)f(astFindF)-7
-b(rame)33 b(or)f(ast-)227 3355 y(Con)n(v)n(ert\))h(as)g(a)g(template)h
-(to)g(matc)n(h)f(another)g(\(target\))h(F)-7 b(rame.)54
-b(It)34 b(iden)n(ti\014es)g(the)g(co)r(ordinate)f(system)g(in)227
-3455 y(whic)n(h)28 b(the)g(t)n(w)n(o)f(F)-7 b(rames)26
-b(will)i(b)r(e)g(aligned)f(b)n(y)h(the)f(matc)n(h.)227
-3579 y(The)36 b(v)-5 b(alues)35 b(whic)n(h)h(ma)n(y)e(b)r(e)i(assigned)
-f(to)g(this)h(attribute,)i(and)d(its)h(default)g(v)-5
-b(alue,)37 b(dep)r(end)f(on)g(the)g(class)227 3679 y(of)i(F)-7
-b(rame)37 b(and)h(are)e(describ)r(ed)i(in)g(the)g Ft(")p
-Fj(Applicabilit)n(y)p Ft(")f Fj(section)h(b)r(elo)n(w.)66
-b(In)38 b(general,)h(the)f(AlignSystem)227 3778 y(attribute)28
-b(will)g(accept)f(an)n(y)g(of)h(the)g(v)-5 b(alues)27
-b(whic)n(h)g(ma)n(y)g(b)r(e)h(assigned)f(to)g(the)h(System)g
-(attribute.)227 3902 y(The)c(Mapping)g(returned)g(b)n(y)f(AST)p
-Ft(_)p Fj(FINDFRAME)i(or)f(AST)p Ft(_)p Fj(CONVER)-7
-b(T)23 b(will)i(use)f(the)g(co)r(ordinate)f(system)227
-4002 y(sp)r(eci\014ed)30 b(b)n(y)g(the)g(AlignSystem)g(attribute)g(as)f
-(an)g(in)n(termediate)g(co)r(ordinate)g(system.)43 b(The)30
-b(total)f(returned)227 4101 y(Mapping)34 b(will)g(\014rst)g(map)g(p)r
-(ositions)g(from)g(the)g(\014rst)g(F)-7 b(rame)34 b(in)n(to)g(this)g
-(in)n(termediate)g(co)r(ordinate)f(system,)227 4201 y(using)j(the)g
-(attributes)f(of)h(the)g(\014rst)f(F)-7 b(rame.)60 b(It)36
-b(will)g(then)g(map)g(these)g(p)r(ositions)f(from)g(the)h(in)n
-(termediate)227 4301 y(co)r(ordinate)27 b(system)g(in)n(to)g(the)h
-(second)f(F)-7 b(rame,)27 b(using)h(the)g(attributes)f(of)h(the)g
-(second)f(F)-7 b(rame.)0 4449 y Fd(T)m(yp)s(e:)227 4549
-y Fj(String.)0 4697 y Fd(Class)31 b(Applicabilit)m(y:)259
-4832 y(F)-8 b(rame)427 4932 y Fj(The)36 b(AlignSystem)g(attribute)g
-(for)g(a)f(basic)h(F)-7 b(rame)35 b(alw)n(a)n(ys)f(equals)h
-Ft(")p Fj(Cartesian)p Ft(")p Fj(,)h(and)g(ma)n(y)f(not)h(b)r(e)427
-5031 y(altered.)259 5163 y Fd(CmpF)-8 b(rame)427 5262
-y Fj(The)35 b(AlignSystem)h(attribute)f(for)f(a)h(CmpF)-7
-b(rame)35 b(alw)n(a)n(ys)e(equals)h Ft(")p Fj(Comp)r(ound)p
-Ft(")p Fj(,)i(and)f(ma)n(y)f(not)h(b)r(e)427 5362 y(altered.)259
-5494 y Fd(F)-8 b(rameSet)427 5593 y Fj(The)22 b(AlignSystem)f
-(attribute)h(of)f(a)g(F)-7 b(rameSet)21 b(is)g(the)h(same)f(as)g(that)g
-(of)h(its)f(curren)n(t)g(F)-7 b(rame)20 b(\(as)h(sp)r(eci\014ed)427
-5693 y(b)n(y)28 b(the)g(Curren)n(t)e(attribute\).)p eop
-end
-%%Page: 393 403
-TeXDict begin 393 402 bop 3643 52 a FF(393)259 351 y
-Fd(SkyF)-8 b(rame)427 451 y Fj(The)28 b(default)g(AlignSystem)g
-(attribute)g(for)f(a)g(SkyF)-7 b(rame)27 b(is)g Ft(")p
-Fj(ICRS)p Ft(")p Fj(.)259 590 y Fd(Sp)s(ecF)-8 b(rame)427
-690 y Fj(The)28 b(default)g(AlignSystem)g(attribute)g(for)f(a)g(Sp)r
-(ecF)-7 b(rame)27 b(is)h Ft(")p Fj(W)-7 b(a)n(v)n(e)p
-Ft(")26 b Fj(\(w)n(a)n(v)n(elength\).)259 829 y Fd(TimeF)-8
-b(rame)427 929 y Fj(The)28 b(default)g(AlignSystem)g(attribute)g(for)f
-(a)g(TimeF)-7 b(rame)27 b(is)g Ft(")p Fj(MJD)p Ft(")p
-Fj(.)p 0 1141 3780 12 v 0 1273 a Fz(AlignTimeScale)153
-b Fe(Time)36 b(scale)h(to)g(use)h(when)f(aligning)1573
-1386 y(TimeF)-10 b(rames)2858 1273 y Fz(AlignTimeScale)0
-1570 y Fd(Description:)44 b Fj(This)32 b(attribute)g(con)n(trols)e(ho)n
-(w)h(a)g(TimeF)-7 b(rame)32 b(b)r(eha)n(v)n(es)e(when)i(it)g(is)g(used)
-g(\(b)n(y)f(astFindF)-7 b(rame)31 b(or)227 1669 y(astCon)n(v)n(ert\))h
-(as)i(a)f(template)h(to)g(matc)n(h)f(another)g(\(target\))g(TimeF)-7
-b(rame.)55 b(It)34 b(iden)n(ti\014es)g(the)g(time)g(scale)f(in)227
-1769 y(whic)n(h)27 b(alignmen)n(t)f(is)h(to)f(o)r(ccur.)36
-b(See)27 b(the)g(TimeScale)g(attribute)g(for)f(a)g(desription)g(of)h
-(the)g(v)-5 b(alues)27 b(whic)n(h)f(ma)n(y)227 1869 y(b)r(e)32
-b(assigned)d(to)i(this)g(attribute.)48 b(The)31 b(default)g
-(AlignTimeScale)g(v)-5 b(alue)30 b(dep)r(ends)i(on)e(the)i(curren)n(t)e
-(v)-5 b(alue)31 b(of)227 1968 y(TimeScale:)37 b(if)27
-b(TimeScale)g(is)g(UT1,)g(GMST,)h(LMST)f(or)f(LAST,)i(the)g(default)f
-(for)g(AlignTimeScale)g(is)g(UT1,)227 2068 y(for)g(all)h(other)f
-(TimeScales)g(the)h(default)g(is)f(T)-7 b(AI.)227 2199
-y(When)37 b(astFindF)-7 b(rame)35 b(or)g(astCon)n(v)n(ert)f(is)h(used)h
-(on)g(t)n(w)n(o)f(TimeF)-7 b(rames)35 b(\(p)r(oten)n(tially)h
-(describing)e(di\013eren)n(t)227 2299 y(time)c(co)r(ordinate)d
-(systems\),)j(it)f(returns)f(a)h(Mapping)f(whic)n(h)h(can)g(b)r(e)g
-(used)g(to)g(transform)f(a)g(p)r(osition)h(in)g(one)227
-2398 y(TimeF)-7 b(rame)24 b(in)n(to)g(the)h(corresp)r(onding)d(p)r
-(osition)j(in)f(the)h(other.)35 b(The)25 b(Mapping)f(is)g(made)g(up)h
-(of)f(the)h(follo)n(wing)227 2498 y(steps)j(in)g(the)g(indicated)f
-(order:)340 2779 y Fi(\017)45 b Fj(Map)32 b(v)-5 b(alues)32
-b(from)g(the)h(system)f(used)h(b)n(y)f(the)g(target)g(\(MJD,)h(JD,)f
-(etc\))h(to)f(the)h(system)f(sp)r(eci\014ed)h(b)n(y)427
-2878 y(the)28 b(AlignSystem)g(attribute.)340 3018 y Fi(\017)45
-b Fj(Map)20 b(these)f(v)-5 b(alues)19 b(from)g(the)h(target's)f(time)h
-(scale)e(to)i(the)f(time)h(scale)f(sp)r(eci\014ed)h(b)n(y)f(the)h
-(AlignTimeScale)427 3117 y(attribute.)340 3257 y Fi(\017)45
-b Fj(Map)28 b(these)f(v)-5 b(alues)27 b(from)h(the)f(time)h(scale)f(sp)
-r(eci\014ed)h(b)n(y)f(the)h(AlignTimeScale)f(attribute,)h(to)g(the)f
-(tem-)427 3356 y(plate's)h(time)g(scale.)340 3496 y Fi(\017)45
-b Fj(Map)24 b(these)g(v)-5 b(alues)24 b(from)g(the)h(system)f(sp)r
-(eci\014ed)g(b)n(y)g(the)h(AlignSystem)f(attribute,)h(to)f(the)h
-(system)f(used)427 3595 y(b)n(y)k(the)g(template.)0 3770
-y Fd(T)m(yp)s(e:)227 3870 y Fj(String.)0 4033 y Fd(Class)j
-(Applicabilit)m(y:)259 4182 y(TimeF)-8 b(rame)427 4282
-y Fj(All)28 b(TimeF)-7 b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)p
-0 4494 V 0 4626 a Fz(AllW)-11 b(arnings)378 b Fe(A)39
-b(list)f(of)g(all)f(curren)m(tly)g(a)m(v)-7 b(ailable)1473
-4741 y(condition)37 b(names)3048 4626 y Fz(AllW)-11 b(arnings)0
-4919 y Fd(Description:)44 b Fj(This)32 b(read-only)d(attribute)j(is)f
-(a)g(space)g(separated)f(list)i(of)f(all)g(the)h(conditions)f(names)g
-(recognized)227 5019 y(b)n(y)d(the)g(W)-7 b(arnings)26
-b(attribute.)37 b(The)28 b(names)f(are)g(listed)h(b)r(elo)n(w.)0
-5182 y Fd(T)m(yp)s(e:)227 5281 y Fj(String,)g(read-only)0
-5444 y Fd(Class)j(Applicabilit)m(y:)259 5593 y(FitsChan)427
-5693 y Fj(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-eop end
-%%Page: 394 404
-TeXDict begin 394 403 bop 0 52 a FF(394)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)-2 351 y
-Fd(Conditions)n(:)227 497 y Fj(The)d(follo)n(wing)e(conditions)i(are)e
-(curren)n(tly)h(recognised)f(\(all)h(are)g(case-insensitiv)n(e\):)340
-762 y Fi(\017)45 b Ft(")p Fj(BadCel)p Ft(")p Fj(:)31
-b(This)18 b(condition)h(arises)e(when)h(reading)f(a)h(F)-7
-b(rameSet)18 b(from)g(a)g(non-Nativ)n(e)g(enco)r(ded)g(FitsChan)427
-862 y(if)28 b(an)g(unkno)n(wn)f(celestial)g(co-ordinate)f(system)h(is)h
-(sp)r(eci\014ed)f(b)n(y)h(the)g(CTYPE)f(k)n(eyw)n(ords.)340
-996 y Fi(\017)45 b Ft(")p Fj(BadCTYPE)p Ft(")p Fj(:)e(This)31
-b(condition)g(arises)f(when)i(reading)e(a)h(F)-7 b(rameSet)31
-b(from)g(a)g(non-Nativ)n(e)g(enco)r(ded)427 1095 y(FitsChan)d(if)g(an)g
-(illegal)f(algorithm)g(co)r(de)g(is)h(sp)r(eci\014ed)g(b)n(y)f(a)h
-(CTYPE)f(k)n(eyw)n(ord,)f(and)i(the)g(illegal)f(co)r(de)427
-1195 y(can)g(b)r(e)h(con)n(v)n(erted)f(to)g(an)g(equiv)-5
-b(alen)n(t)28 b(legal)e(co)r(de.)340 1329 y Fi(\017)45
-b Ft(")p Fj(BadLat)p Ft(")p Fj(:)31 b(This)18 b(condition)g(arises)f
-(when)i(reading)e(a)h(F)-7 b(rameSet)18 b(from)g(a)g(non-Nativ)n(e)g
-(enco)r(ded)g(FitsChan)427 1429 y(if)23 b(the)f(latitude)g(of)g(the)h
-(reference)e(p)r(oin)n(t)h(has)f(an)h(absolute)f(v)-5
-b(alue)22 b(greater)e(than)i(90)f(degrees.)34 b(The)22
-b(actual)427 1528 y(absolute)27 b(v)-5 b(alue)28 b(used)f(is)h(set)f
-(to)h(exactly)f(90)f(degrees)h(in)h(these)f(cases.)340
-1662 y Fi(\017)45 b Ft(")p Fj(BadMat)p Ft(")p Fj(:)32
-b(This)20 b(condition)g(arises)f(if)i(the)f(matrix)g(describing)g(the)g
-(transformation)f(from)h(pixel)g(o\013sets)427 1762 y(to)38
-b(in)n(termediate)g(w)n(orld)f(co)r(ordinates)g(cannot)g(b)r(e)i(in)n
-(v)n(erted.)67 b(This)38 b(matrix)g(describ)r(es)f(the)i(scaling,)427
-1862 y(rotation,)32 b(shear,)h(etc.,)g(applied)f(to)g(the)h(pixel)f
-(axes,)g(and)g(is)g(sp)r(eci\014ed)h(b)n(y)f(k)n(eyw)n(ords)e(suc)n(h)i
-(as)f(PCi)p Ft(_)p Fj(j,)427 1961 y(CDi)p Ft(_)p Fj(j,)g(CR)n(OT)-7
-b(A,)29 b(etc.)43 b(F)-7 b(or)29 b(example,)h(the)g(matrix)f(will)h
-(not)g(b)r(e)g(in)n(v)n(ertable)e(if)i(an)n(y)f(ro)n(ws)f(or)h(columns)
-427 2061 y(consist)i(en)n(tirely)f(of)h(zeros.)46 b(The)31
-b(FITS-W)n(CS)g(P)n(ap)r(er)f(I)h Ft(")p Fj(Represen)n(tation)e(of)i(W)
--7 b(orld)31 b(Co)r(ordinates)e(in)427 2160 y(FITS)p
-Ft(")35 b Fj(b)n(y)g(Greisen)f(&)h(Calabretta)e(requires)h(that)h(this)
-g(matrix)g(b)r(e)g(in)n(v)n(ertable.)58 b(Man)n(y)34
-b(op)r(erations)427 2260 y(\(suc)n(h)28 b(as)f(grid)g(plotting\))h
-(will)f(not)h(b)r(e)g(p)r(ossible)f(if)h(the)g(matrix)f(cannot)h(b)r(e)
-g(in)n(v)n(erted.)340 2394 y Fi(\017)45 b Ft(")p Fj(BadPV)p
-Ft(")p Fj(:)31 b(This)18 b(condition)g(arises)f(when)i(reading)e(a)h(F)
--7 b(rameSet)18 b(from)g(a)g(non-Nativ)n(e)g(enco)r(ded)g(FitsChan.)427
-2494 y(It)27 b(is)g(issued)f(if)h(a)f(PVi)p Ft(_)p Fj(m)h(header)e(is)i
-(found)g(that)g(refers)e(to)i(a)f(pro)5 b(jection)26
-b(parameter)f(that)i(is)f(not)h(used)427 2593 y(b)n(y)h(the)g(pro)5
-b(jection)26 b(t)n(yp)r(e)i(sp)r(eci\014ed)g(b)n(y)f(CTYPE.)340
-2728 y Fi(\017)45 b Ft(")p Fj(BadV)-7 b(al)p Ft(")p Fj(:)31
-b(This)18 b(condition)h(arises)e(when)h(reading)f(a)h(F)-7
-b(rameSet)18 b(from)g(a)g(non-Nativ)n(e)g(enco)r(ded)g(FitsChan)427
-2827 y(if)33 b(it)g(is)g(not)g(p)r(ossible)f(to)g(con)n(v)n(ert)f(the)i
-(v)-5 b(alue)33 b(of)f(a)h(FITS)g(k)n(eyw)n(ords)d(to)j(the)g(exp)r
-(ected)g(t)n(yp)r(e.)52 b(F)-7 b(or)32 b(in-)427 2927
-y(stance,)27 b(this)g(can)g(o)r(ccur)f(if)i(the)f(FITS)g(header)f(con)n
-(tains)g(a)h(string)f(v)-5 b(alue)27 b(for)f(a)h(k)n(eyw)n(ord)e(whic)n
-(h)i(should)427 3026 y(ha)n(v)n(e)g(a)g(\015oating)g(p)r(oin)n(t)g(v)-5
-b(alue,)28 b(or)f(if)h(the)g(k)n(eyw)n(ord)d(has)j(no)f(v)-5
-b(alue)27 b(at)h(all)f(\(i.e.)37 b(is)28 b(a)f(commen)n(t)g(card\).)340
-3160 y Fi(\017)45 b Ft(")p Fj(Distortion)p Ft(")p Fj(:)56
-b(This)37 b(condition)g(arises)g(when)g(reading)g(a)g(F)-7
-b(rameSet)37 b(from)g(a)g(non-Nativ)n(e)g(enco)r(ded)427
-3260 y(FitsChan)32 b(if)h(an)n(y)f(of)g(the)g(CTYPE)g(k)n(eyw)n(ords)e
-(sp)r(ecify)i(an)g(unsupp)r(orted)g(distortion)f(co)r(de)h(using)g(the)
-427 3360 y Ft(")p Fj(4-3-3)p Ft(")25 b Fj(format)i(sp)r(eci\014ed)h(in)
-g(FITS-W)n(CS)f(pap)r(er)h(IV.)g(Suc)n(h)f(distortion)g(co)r(des)g(are)
-g(ignored.)340 3494 y Fi(\017)45 b Ft(")p Fj(NoCTYPE)p
-Ft(")p Fj(:)f(This)32 b(condition)f(arises)g(if)h(a)f(default)h(CTYPE)g
-(v)-5 b(alue)31 b(is)h(used)g(within)g(astRead,)g(due)427
-3593 y(to)g(no)f(v)-5 b(alue)31 b(b)r(eing)g(presen)n(t)g(in)h(the)f
-(supplied)h(FitsChan.)48 b(This)32 b(condition)f(is)g(only)g(tested)h
-(for)e(when)427 3693 y(using)e(non-Nativ)n(e)e(enco)r(dings.)340
-3827 y Fi(\017)45 b Ft(")p Fj(NoEquino)n(x)p Ft(")p Fj(:)g(This)33
-b(condition)f(arises)f(if)j(a)e(default)h(equino)n(x)f(v)-5
-b(alue)32 b(is)h(used)g(within)g(astRead,)g(due)427 3927
-y(to)f(no)f(v)-5 b(alue)31 b(b)r(eing)g(presen)n(t)g(in)h(the)f
-(supplied)h(FitsChan.)48 b(This)32 b(condition)f(is)g(only)g(tested)h
-(for)e(when)427 4026 y(using)e(non-Nativ)n(e)e(enco)r(dings.)340
-4160 y Fi(\017)45 b Ft(")p Fj(NoRadesys)p Ft(")p Fj(:)55
-b(This)38 b(condition)f(arises)g(if)h(a)f(default)h(reference)f(frame)g
-(is)h(used)g(for)f(an)g(equatorial)427 4260 y(co-ordinate)27
-b(system)i(within)g(astRead,)f(due)h(to)g(no)f(v)-5 b(alue)29
-b(b)r(eing)f(presen)n(t)g(in)h(the)g(supplied)g(FitsChan.)427
-4360 y(This)f(condition)f(is)h(only)f(tested)h(for)f(when)h(using)f
-(non-Nativ)n(e)g(enco)r(dings.)340 4494 y Fi(\017)45
-b Ft(")p Fj(NoLonp)r(ole)p Ft(")p Fj(:)52 b(This)35 b(condition)h
-(arises)e(if)i(a)g(default)g(v)-5 b(alue)35 b(is)h(used)f(for)h(the)g
-(LONPOLE)d(k)n(eyw)n(ord)427 4593 y(within)g(astRead,)g(due)g(to)f(no)g
-(v)-5 b(alue)32 b(b)r(eing)h(presen)n(t)e(in)i(the)g(supplied)f
-(FitsChan.)51 b(This)33 b(condition)f(is)427 4693 y(only)27
-b(tested)h(for)f(when)h(using)f(non-Nativ)n(e)g(enco)r(dings.)340
-4827 y Fi(\017)45 b Ft(")p Fj(NoLatp)r(ole)p Ft(")p Fj(:)56
-b(This)37 b(condition)g(arises)f(if)i(a)f(default)h(v)-5
-b(alue)38 b(is)f(used)g(for)g(the)h(LA)-7 b(TPOLE)36
-b(k)n(eyw)n(ord)427 4927 y(within)d(astRead,)g(due)g(to)f(no)g(v)-5
-b(alue)32 b(b)r(eing)h(presen)n(t)e(in)i(the)g(supplied)f(FitsChan.)51
-b(This)33 b(condition)f(is)427 5026 y(only)27 b(tested)h(for)f(when)h
-(using)f(non-Nativ)n(e)g(enco)r(dings.)340 5160 y Fi(\017)45
-b Ft(")p Fj(NoMjd-obs)p Ft(")p Fj(:)56 b(This)37 b(condition)h(arises)e
-(if)i(a)f(default)h(v)-5 b(alue)38 b(is)f(used)h(for)f(the)h(date)f(of)
-h(observ)-5 b(ation)427 5260 y(within)33 b(astRead,)g(due)g(to)f(no)g
-(v)-5 b(alue)32 b(b)r(eing)h(presen)n(t)e(in)i(the)g(supplied)f
-(FitsChan.)51 b(This)33 b(condition)f(is)427 5360 y(only)27
-b(tested)h(for)f(when)h(using)f(non-Nativ)n(e)g(enco)r(dings.)340
-5494 y Fi(\017)45 b Ft(")p Fj(Tnx)p Ft(")p Fj(:)38 b(This)28
-b(condition)g(arises)f(if)i(a)f(F)-7 b(rameSet)28 b(is)h(read)e(from)h
-(a)g(FITS)h(header)e(con)n(taining)h(an)g(IRAF)427 5593
-y Ft(")p Fj(TNX)p Ft(")g Fj(pro)5 b(jection)26 b(whic)n(h)i(includes)g
-(terms)f(not)h(supproted)f(b)n(y)g(AST.)i(Suc)n(h)e(terms)h(are)e
-(ignored)h(and)427 5693 y(so)g(the)h(resulting)f(F)-7
-b(rameSet)28 b(ma)n(y)e(b)r(e)i(inaccurate.)p eop end
-%%Page: 395 405
-TeXDict begin 395 404 bop 3643 52 a FF(395)340 351 y
-Fi(\017)45 b Ft(")p Fj(Zp)n(x)p Ft(")p Fj(:)39 b(This)29
-b(condition)g(arises)e(if)j(a)f(F)-7 b(rameSet)29 b(is)g(read)f(from)h
-(a)f(FITS)i(header)e(con)n(taining)g(an)h(IRAF)427 451
-y Ft(")p Fj(ZPX)p Ft(")24 b Fj(pro)5 b(jection)25 b(whic)n(h)g
-(includes)h Ft(")p Fj(lngcor)p Ft(")d Fj(or)h Ft(")p
-Fj(latcor)p Ft(")g Fj(correction)f(terms.)36 b(These)25
-b(terms)g(are)g(not)427 551 y(supp)r(orted)j(b)n(y)f(AST)h(and)f(are)g
-(ignored.)36 b(The)27 b(resulting)g(F)-7 b(rameSet)28
-b(ma)n(y)f(therefore)f(b)r(e)i(inaccurate.)p 0 765 3780
-12 v 0 903 a Fz(AsTime\(axis\))1116 896 y Fe(F)-10 b(ormat)37
-b(celestal)g(co)s(ordinates)g(as)1725 996 y(times?)2989
-903 y Fz(AsTime\(axis\))0 1181 y Fd(Description:)44 b
-Fj(This)28 b(attribute)f(sp)r(eci\014es)h(the)g(default)g(st)n(yle)f
-(of)g(formatting)g(to)g(b)r(e)h(used)g(\(e.g.)36 b(b)n(y)27
-b(astF)-7 b(ormat\))27 b(for)227 1281 y(the)e(celestial)f(co)r
-(ordinate)g(v)-5 b(alues)24 b(describ)r(ed)g(b)n(y)h(a)f(SkyF)-7
-b(rame.)35 b(It)25 b(tak)n(es)f(a)g(separate)f(b)r(o)r(olean)h(v)-5
-b(alue)24 b(for)g(eac)n(h)227 1380 y(SkyF)-7 b(rame)32
-b(axis)g(so)f(that,)j(for)e(instance,)i(the)f(setting)f
-Ft(")p Fj(AsTime\(2\)=0)p Ft(")f Fj(sp)r(eci\014es)h(the)h(default)g
-(formatting)227 1480 y(st)n(yle)27 b(for)h(celestial)f(latitude)h(v)-5
-b(alues.)227 1612 y(If)23 b(the)f(AsTime)g(attribute)g(for)g(a)g(SkyF)
--7 b(rame)21 b(axis)g(is)h(zero,)g(then)g(co)r(ordinates)f(on)h(that)g
-(axis)f(will)h(b)r(e)h(formatted)227 1712 y(as)e(angles)f(b)n(y)h
-(default)g(\(using)g(degrees,)g(min)n(utes)h(and)f(seconds\),)h
-(otherwise)e(they)h(will)g(b)r(e)h(formatted)f(as)f(times)227
-1811 y(\(using)28 b(hours,)f(min)n(utes)g(and)h(seconds\).)227
-1943 y(The)h(default)h(v)-5 b(alue)29 b(of)g(AsTime)h(is)f(c)n(hosen)f
-(according)f(to)i(the)h(sky)f(co)r(ordinate)f(system)g(b)r(eing)i
-(represen)n(ted,)227 2043 y(as)22 b(determined)i(b)n(y)e(the)h(SkyF)-7
-b(rame's)22 b(System)h(attribute.)36 b(This)23 b(ensures,)g(for)f
-(example,)i(that)f(righ)n(t)f(ascension)227 2143 y(v)-5
-b(alues)27 b(will)h(b)r(e)g(formatted)g(as)f(times)g(b)n(y)h(default,)g
-(follo)n(wing)e(normal)h(con)n(v)n(en)n(tions.)0 2307
-y Fd(T)m(yp)s(e:)227 2407 y Fj(In)n(teger)g(\(b)r(o)r(olean\).)0
-2571 y Fd(Class)k(Applicabilit)m(y:)259 2722 y(SkyF)-8
-b(rame)427 2822 y Fj(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i
-(attribute.)0 2999 y Fd(Notes:)340 3296 y Fi(\017)45
-b Fj(The)d(AsTime)g(attribute)g(op)r(erates)e(b)n(y)h(c)n(hanging)g
-(the)h(default)g(v)-5 b(alue)41 b(of)h(the)g(corresp)r(onding)e(F)-7
-b(or-)427 3396 y(mat\(axis\))28 b(attribute.)37 b(This,)27
-b(in)h(turn,)g(ma)n(y)f(also)f(a\013ect)i(the)g(v)-5
-b(alue)28 b(of)f(the)h(Unit\(axis\))g(attribute.)340
-3536 y Fi(\017)45 b Fj(Only)38 b(the)g(default)h(st)n(yle)e(of)h
-(formatting)f(is)h(a\013ected)g(b)n(y)g(the)g(AsTime)g(v)-5
-b(alue.)68 b(If)39 b(an)e(explicit)i(F)-7 b(or-)427 3636
-y(mat\(axis\))28 b(v)-5 b(alue)27 b(is)h(set,)f(it)h(will)g(o)n(v)n
-(er-ride)d(an)n(y)i(e\013ect)h(from)f(the)h(AsTime)g(attribute.)p
-0 3850 V 0 3981 a Fz(Base)1181 3982 y Fe(F)-10 b(rameSet)37
-b(base)i(F)-10 b(rame)39 b(index)3504 3981 y Fz(Base)0
-4162 y Fd(Description:)44 b Fj(This)28 b(attribute)g(giv)n(es)f(the)h
-(index)g(of)f(the)h(F)-7 b(rame)28 b(whic)n(h)f(is)h(to)g(b)r(e)g
-(regarded)e(as)h(the)h Ft(")p Fj(base)p Ft(")e Fj(F)-7
-b(rame)227 4262 y(within)30 b(a)e(F)-7 b(rameSet.)40
-b(The)28 b(default)h(is)g(the)g(\014rst)f(F)-7 b(rame)28
-b(added)h(to)f(the)h(F)-7 b(rameSet)29 b(when)g(it)g(is)f(created)g
-(\(this)227 4362 y(F)-7 b(rame)27 b(alw)n(a)n(ys)f(has)h(an)g(index)h
-(of)g(1\).)0 4526 y Fd(T)m(yp)s(e:)227 4626 y Fj(In)n(teger.)0
-4790 y Fd(Class)j(Applicabilit)m(y:)259 4941 y(F)-8 b(rameSet)427
-5041 y Fj(All)28 b(F)-7 b(rameSets)27 b(ha)n(v)n(e)g(this)h(attribute.)
-0 5218 y Fd(Notes:)340 5515 y Fi(\017)45 b Fj(In)n(v)n(erting)29
-b(a)g(F)-7 b(rameSet)29 b(\(in)n(v)n(erting)g(the)h(b)r(o)r(olean)f
-(sense)g(of)h(its)g(In)n(v)n(ert)e(attribute,)j(with)f(the)g(astIn)n(v)
-n(ert)427 5615 y(function)e(for)g(example\))f(will)h(in)n(terc)n(hange)
-e(the)i(v)-5 b(alues)27 b(of)h(its)f(Base)g(and)g(Curren)n(t)g
-(attributes.)p eop end
-%%Page: 396 406
-TeXDict begin 396 405 bop 0 52 a FF(396)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a Fz(Border)298 b Fe(Dra)m(w)38 b(a)h(b)s(order)f
-(around)f(v)-7 b(alid)38 b(regions)g(of)g(a)h(Plot?)297
-b Fz(Border)0 687 y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n
-(trols)e(the)i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g
-(grid)g(\(dra)n(wn)g(with)h(the)227 787 y(astGrid)e(function\))i(b)n(y)
-e(determining)h(whether)g(a)f(b)r(order)g(is)g(dra)n(wn)g(around)g
-(regions)f(corresp)r(onding)g(to)h(the)227 887 y(v)-5
-b(alid)28 b(ph)n(ysical)f(co)r(ordinates)f(of)h(a)h(Plot)f(\(c.f.)37
-b(astBorder\).)227 1017 y(If)j(the)g(Border)d(v)-5 b(alue)39
-b(of)g(a)g(Plot)g(is)g(non-zero,)h(then)g(this)g(b)r(order)e(will)h(b)r
-(e)h(dra)n(wn)e(as)h(part)f(of)i(the)f(grid.)227 1116
-y(Otherwise,)32 b(the)g(b)r(order)e(is)i(not)f(dra)n(wn)g(\(although)g
-(axis)g(lab)r(els)g(and)g(tic)n(k)g(marks)g(will)g(still)h(app)r(ear,)g
-(unless)227 1216 y(other)25 b(relev)-5 b(an)n(t)24 b(Plot)g(attributes)
-h(indicate)f(that)i(they)f(should)f(not\).)36 b(The)25
-b(default)h(b)r(eha)n(viour)d(is)i(to)g(dra)n(w)e(the)227
-1316 y(b)r(order)j(if)i(tic)n(k)e(marks)g(and)h(n)n(umerical)f(lab)r
-(els)h(will)g(b)r(e)g(dra)n(wn)f(around)g(the)h(edges)f(of)h(the)g
-(plotting)g(area)f(\(see)227 1415 y(the)i(Lab)r(elling)f(attribute\),)i
-(but)f(to)f(omit)h(it)g(otherwise.)0 1576 y Fd(T)m(yp)s(e:)227
-1675 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0 1836 y Fd(Class)k
-(Applicabilit)m(y:)259 1983 y(Plot)427 2083 y Fj(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)p 0 2293 V 0 2431 a Fz(Bottom\(axis\))1173
-2424 y Fe(Lo)m(w)m(est)37 b(axis)h(v)-7 b(alue)39 b(to)f(displa)m(y)
-3001 2431 y Fz(Bottom\(axis\))0 2642 y Fd(Description:)44
-b Fj(This)34 b(attribute)h(giv)n(es)e(the)h(lo)n(w)n(est)f(axis)h(v)-5
-b(alue)34 b(to)g(b)r(e)g(displa)n(y)n(ed)f(\(for)h(instance,)i(b)n(y)e
-(the)g(astGrid)227 2742 y(metho)r(d\).)0 2902 y Fd(T)m(yp)s(e:)227
-3002 y Fj(Floating)27 b(p)r(oin)n(t.)0 3162 y Fd(Class)k(Applicabilit)m
-(y:)259 3310 y(F)-8 b(rame)427 3409 y Fj(The)28 b(default)g(supplied)g
-(b)n(y)f(the)h(F)-7 b(rame)27 b(class)g(is)g(to)h(displa)n(y)f(all)g
-(axis)g(v)-5 b(alues,)27 b(without)h(an)n(y)f(limit.)259
-3548 y Fd(SkyF)-8 b(rame)427 3647 y Fj(The)27 b(SkyF)-7
-b(rame)25 b(class)g(re-de\014nes)h(the)h(default)f(Bottom)g(v)-5
-b(alue)26 b(to)h(-90)e(degrees)g(for)g(latitude)i(axes,)f(and)427
-3747 y(0)h(degrees)g(for)g(co-latitude)g(axes.)36 b(The)27
-b(default)i(for)e(longitude)g(axes)g(is)g(to)h(displa)n(y)e(all)i(axis)
-f(v)-5 b(alues.)0 3920 y Fd(Notes:)340 4213 y Fi(\017)45
-b Fj(When)36 b(sp)r(ecifying)f(this)h(attribute)f(b)n(y)g(name,)i(it)f
-(should)f(b)r(e)h(subscripted)f(with)g(the)h(n)n(um)n(b)r(er)f(of)g
-(the)427 4313 y(F)-7 b(rame)27 b(axis)g(to)h(whic)n(h)f(it)h(applies.)p
-0 4523 V 0 4655 a Fz(Bounded)758 b Fe(Is)40 b(the)e(Region)g(b)s
-(ounded?)759 b Fz(Bounded)0 4854 y Fd(Description:)44
-b Fj(This)27 b(is)g(a)f(read-only)g(attribute)h(indicating)f(if)i(the)f
-(Region)f(is)h(b)r(ounded.)37 b(A)27 b(Region)f(is)h(b)r(ounded)g(if)
-227 4954 y(it)h(is)g(con)n(tained)f(en)n(tirely)g(within)h(some)f
-(\014nite-size)g(b)r(ounding)h(b)r(o)n(x.)0 5115 y Fd(T)m(yp)s(e:)227
-5214 y Fj(In)n(teger)f(\(b)r(o)r(olean\),)h(read-only)-7
-b(.)0 5375 y Fd(Class)31 b(Applicabilit)m(y:)259 5522
-y(Region)427 5622 y Fj(All)d(Regions)f(ha)n(v)n(e)f(this)i(attribute.)p
-eop end
-%%Page: 397 407
-TeXDict begin 397 406 bop 3643 52 a FF(397)p 0 351 3780
-12 v 0 483 a Fz(CDMatrix)298 b Fe(Use)39 b(CDi)p Fb(_)p
-Fe(j)f(k)m(eyw)m(ords)f(to)h(represen)m(t)g(pixel)1338
-598 y(scaling,)f(rotation,)e(etc?)3171 483 y Fz(CDMatrix)0
-791 y Fd(Description:)44 b Fj(This)26 b(attribute)f(is)g(a)g(b)r(o)r
-(olean)g(v)-5 b(alue)25 b(whic)n(h)g(sp)r(eci\014es)g(ho)n(w)g(the)h
-(linear)e(transformation)g(from)h(pixel)227 890 y(co)r(ordinates)d(to)g
-(in)n(termediate)h(w)n(orld)e(co)r(ordinates)h(should)g(b)r(e)i
-(represen)n(ted)d(within)j(a)e(FitsChan)h(when)g(using)227
-990 y(FITS-W)n(CS)29 b(enco)r(ding.)40 b(This)29 b(transformation)e
-(describ)r(es)h(the)h(scaling,)f(rotation,)g(shear,)g(etc.,)h(of)f(the)
-i(pixel)227 1090 y(axes.)227 1216 y(If)38 b(the)g(attribute)g(has)f(a)g
-(non-zero)f(v)-5 b(alue)38 b(then)g(the)g(transformation)e(is)h
-(represen)n(ted)g(b)n(y)g(a)g(set)h(of)f(CDi)p Ft(_)p
-Fj(j)227 1316 y(k)n(eyw)n(ords)23 b(represen)n(ting)g(a)i(square)e
-(matrix)h(\(where)h Ft(")p Fj(i)p Ft(")f Fj(is)g(the)i(index)e(of)h(an)
-g(in)n(termediate)f(w)n(orld)g(co)r(ordinate)227 1415
-y(axis)36 b(and)f Ft(")p Fj(j)p Ft(")h Fj(is)g(the)g(index)g(of)g(a)g
-(pixel)g(axis\).)62 b(If)36 b(the)h(attribute)f(has)f(a)h(zero)f(v)-5
-b(alue)36 b(the)g(transformation)227 1515 y(is)f(represen)n(ted)e(b)n
-(y)i(a)f(set)g(of)h(PCi)p Ft(_)p Fj(j)f(k)n(eyw)n(ords)f(\(whic)n(h)i
-(also)e(represen)n(t)g(a)i(square)e(matrix\))h(together)g(with)227
-1615 y(a)i(corresp)r(onding)f(set)h(of)g(CDEL)-7 b(Ti)37
-b(k)n(eyw)n(ords)d(represen)n(ting)h(the)i(axis)e(scalings.)62
-b(See)37 b(FITS-W)n(CS)f(pap)r(er)227 1714 y(I)r(I)i
-Ft(")p Fj(Represen)n(tation)d(of)i(Celestial)g(Co)r(ordinates)f(in)h
-(FITS)p Ft(")g Fj(b)n(y)g(M.)g(Calabretta)f(&)g(E.W.)i(Greisen,)g(for)f
-(a)227 1814 y(complete)28 b(description)f(of)g(these)h(t)n(w)n(o)f(sc)n
-(hemes.)227 1941 y(The)g(default)f(v)-5 b(alue)26 b(of)g(the)h
-(CDMatrix)f(attribute)g(is)h(determined)f(b)n(y)g(the)g(con)n(ten)n(ts)
-g(of)g(the)h(FitsChan)f(at)g(the)227 2040 y(time)f(the)g(attribute)f
-(is)g(accessed.)35 b(If)24 b(the)h(FitsChan)f(con)n(tains)f(an)n(y)h
-(CDi)p Ft(_)p Fj(j)h(k)n(eyw)n(ords)d(then)i(the)h(default)g(v)-5
-b(alue)227 2140 y(is)21 b(non-zero.)32 b(Otherwise)20
-b(it)h(is)f(zero.)33 b(Note,)22 b(reading)d(a)h(F)-7
-b(rameSet)20 b(from)g(a)g(FitsChan)h(will)f(in)h(general)e(consume)227
-2240 y(an)n(y)33 b(CDi)p Ft(_)p Fj(j)i(k)n(eyw)n(ords)d(presen)n(t)h
-(in)h(the)g(FitsChan.)56 b(Th)n(us)34 b(the)g(default)g(v)-5
-b(alue)34 b(for)g(CDMatrix)f(follo)n(wing)g(a)227 2339
-y(read)g(will)g(usually)g(b)r(e)h(zero,)g(ev)n(en)f(if)h(the)g
-(FitsChan)f(originally)f(con)n(tained)h(some)g(CDi)p
-Ft(_)p Fj(j)g(k)n(eyw)n(ords.)53 b(This)227 2439 y(b)r(eha)n(viour)31
-b(is)g(similar)g(to)g(that)h(of)f(the)h(Enco)r(ding)f(attribute,)h(the)
-g(default)g(v)-5 b(alue)32 b(for)f(whic)n(h)g(is)g(determined)227
-2538 y(b)n(y)i(the)g(con)n(ten)n(ts)g(of)f(the)i(FitsChan)f(at)g(the)g
-(time)g(the)h(attribute)f(is)g(accessed.)51 b(If)34 b(y)n(ou)e(wish)h
-(to)g(retain)f(the)227 2638 y(original)24 b(v)-5 b(alue)25
-b(of)g(the)h(CDMatrix)f(attribute)g(\(that)h(is,)f(the)h(v)-5
-b(alue)25 b(b)r(efore)g(reading)f(the)h(F)-7 b(rameSet\))26
-b(then)f(y)n(ou)227 2738 y(should)j(enquire)f(the)h(default)g(v)-5
-b(alue)27 b(b)r(efore)h(doing)f(the)h(read,)e(and)i(then)g(set)f(that)h
-(v)-5 b(alue)28 b(explicitly)-7 b(.)0 2891 y Fd(T)m(yp)s(e:)227
-2991 y Fj(In)n(teger)27 b(\(b)r(o)r(olean\).)0 3145 y
-Fd(Class)k(Applicabilit)m(y:)259 3286 y(FitsChan)427
-3385 y Fj(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 3589 V 0 3720 a Fz(CarLin)268 b Fe(Ignore)38 b(spherical)g(rotations)
-e(on)i(CAR)h(pro)7 b(jections?)265 b Fz(CarLin)0 3918
-y Fd(Description:)44 b Fj(This)e(attribute)f(is)g(a)g(b)r(o)r(olean)g
-(v)-5 b(alue)41 b(whic)n(h)g(sp)r(eci\014es)g(ho)n(w)g(FITS)g
-Ft(")p Fj(CAR)p Ft(")g Fj(\(plate)g(carree,)i(or)227
-4018 y Ft(")p Fj(Cartesian)p Ft(")p Fj(\))23 b(pro)5
-b(jections)24 b(should)h(b)r(e)g(treated)g(when)g(reading)f(a)g(F)-7
-b(rameSet)25 b(from)g(a)f(foreign)g(enco)r(ded)h(FITS)227
-4117 y(header.)43 b(If)30 b(zero)f(\(the)h(default\),)h(it)g(is)e
-(assumed)h(that)g(the)g(CAR)g(pro)5 b(jection)29 b(conforms)f(to)i(the)
-g(con)n(v)n(en)n(tions)227 4217 y(describ)r(ed)j(in)g(the)h(FITS)f(w)n
-(orld)f(co)r(ordinate)g(system)h(\(FITS-W)n(CS\))h(pap)r(er)e(I)r(I)i
-Ft(")p Fj(Represen)n(tation)d(of)i(Celes-)227 4317 y(tial)h(Co)r
-(ordinates)e(in)h(FITS)p Ft(")h Fj(b)n(y)f(M.)g(Calabretta)g(&)g(E.W.)g
-(Greisen.)54 b(If)34 b(CarLin)e(is)h(non-zero,)h(then)g(these)227
-4416 y(con)n(v)n(en)n(tions)f(are)g(ignored,)i(and)f(it)h(is)f(assumed)
-g(that)h(the)f(mapping)h(from)f(pixel)g(co)r(ordinates)f(to)h
-(celestial)227 4516 y(co)r(ordinates)25 b(is)h(a)g(simple)g(linear)f
-(transformation)g(\(hence)h(the)h(attribute)f(name)g
-Ft(")p Fj(CarLin)p Ft(")p Fj(\).)35 b(This)26 b(is)g(appro-)227
-4616 y(priate)31 b(for)f(some)g(older)g(FITS)h(data)f(whic)n(h)h
-(claims)f(to)h(ha)n(v)n(e)f(a)g Ft(")p Fj(CAR)p Ft(")g
-Fj(pro)5 b(jection,)31 b(but)g(whic)n(h)g(in)g(fact)g(do)227
-4715 y(not)d(conform)g(to)g(the)g(con)n(v)n(en)n(tions)e(of)i(the)h
-(FITS-W)n(CS)f(pap)r(er.)38 b(F)-7 b(urthermore,)27 b(if)i(CarLin)e(is)
-h(non-zero,)e(it)j(is)227 4815 y(assumed)i(that)h(CDEL)-7
-b(T)31 b(and)h(CD)f(k)n(eyw)n(ords)f(are)g(in)i(units)g(of)f(degrees)f
-(rather)h(than)g(radians)f(\(as)i(required)227 4914 y(b)n(y)c(the)g
-(FITS-W)n(CS)f(pap)r(ers\).)227 5041 y(The)34 b(FITS-W)n(CS)g(pap)r(er)
-g(sp)r(eci\014es)g(that)g(headers)f(whic)n(h)h(include)g(a)g(CAR)g(pro)
-5 b(jection)33 b(represen)n(t)g(a)g(linear)227 5141 y(mapping)c(from)f
-(pixel)h(co)r(ordinates)e(to)h Ft(")p Fj(nativ)n(e)g(spherical)g(co)r
-(ordinates)p Ft(")p Fj(,)f(NOT)h(celestial)h(co)r(ordinates.)38
-b(An)227 5240 y(extra)30 b(mapping)g(is)h(then)g(required)f(from)g
-(nativ)n(e)g(spherical)g(to)g(celestial.)45 b(This)31
-b(mapping)f(is)h(a)f(3D)h(rotation)227 5340 y(and)e(so)f(the)h(o)n(v)n
-(erall)e(Mapping)h(from)h(pixel)f(to)h(celestial)f(co)r(ordinates)g(is)
-g(NOT)h(linear.)40 b(See)28 b(the)h(FITS-W)n(CS)227 5440
-y(pap)r(ers)e(for)g(further)h(details.)0 5593 y Fd(T)m(yp)s(e:)227
-5693 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)p eop end
-%%Page: 398 408
-TeXDict begin 398 407 bop 0 52 a FF(398)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fd(Class)g(Applicabilit)m(y:)259 474 y(FitsChan)427 573
-y Fj(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 745 3780 12 v 0 876 a Fz(Card)528 b Fe(Index)39 b(of)f(curren)m(t)g
-(FITS)h(card)f(in)h(a)f(FitsChan)526 b Fz(Card)0 1014
-y Fd(Description:)44 b Fj(This)28 b(attribute)g(giv)n(es)f(the)h(index)
-g(of)g(the)g Ft(")p Fj(curren)n(t)p Ft(")e Fj(FITS)i(header)f(card)g
-(within)i(a)e(FitsChan,)h(the)227 1113 y(\014rst)h(card)e(ha)n(ving)h
-(an)g(index)h(of)f(1.)40 b(The)28 b(c)n(hoice)g(of)h(curren)n(t)e(card)
-h(a\013ects)h(the)g(b)r(eha)n(viour)e(of)h(functions)h(that)227
-1213 y(access)e(the)h(con)n(ten)n(ts)f(of)g(the)h(FitsChan,)g(suc)n(h)f
-(as)g(astDelFits,)h(astFindFits)g(and)f(astPutFits.)227
-1331 y(A)f(v)-5 b(alue)25 b(assigned)f(to)h(Card)f(will)h(p)r(osition)g
-(the)h(FitsChan)f(at)g(an)n(y)g(desired)f(p)r(oin)n(t,)i(so)e(that)i(a)
-f(particular)e(card)227 1430 y(within)28 b(it)g(can)f(b)r(e)h
-(accessed.)36 b(Alternativ)n(ely)-7 b(,)27 b(the)h(v)-5
-b(alue)27 b(of)h(Card)e(ma)n(y)h(b)r(e)h(enquired)f(in)h(order)e(to)i
-(determine)227 1530 y(the)g(curren)n(t)f(p)r(osition)g(of)h(a)f
-(FitsChan.)227 1647 y(The)g(default)g(v)-5 b(alue)26
-b(of)h(Card)f(is)g(1.)36 b(This)27 b(means)f(that)h(clearing)e(this)i
-(attribute)g(\(using)f(astClear\))g(e\013ectiv)n(ely)227
-1747 y Ft(")p Fj(rewinds)p Ft(")32 b Fj(the)i(FitsChan,)h(so)e(that)h
-(the)g(\014rst)f(card)g(is)g(accessed)g(next.)54 b(If)34
-b(Card)f(is)g(set)h(to)f(a)g(v)-5 b(alue)34 b(whic)n(h)227
-1847 y(exceeds)26 b(the)h(total)f(n)n(um)n(b)r(er)g(of)g(cards)g(in)g
-(the)h(FitsChan)f(\(as)g(giv)n(en)g(b)n(y)g(its)g(Ncard)g(attribute\),)
-h(it)g(is)f(regarded)227 1946 y(as)e(p)r(oin)n(ting)g(at)g(the)g
-Ft(")p Fj(end-of-\014le)p Ft(")p Fj(.)35 b(In)24 b(this)g(case,)g(the)h
-(v)-5 b(alue)24 b(returned)g(in)g(resp)r(onse)f(to)h(an)g(enquiry)g(is)
-g(alw)n(a)n(ys)227 2046 y(one)j(more)g(than)h(the)g(n)n(um)n(b)r(er)f
-(of)h(cards)e(in)i(the)g(FitsChan.)0 2181 y Fd(T)m(yp)s(e:)227
-2281 y Fj(In)n(teger.)0 2416 y Fd(Class)j(Applicabilit)m(y:)259
-2539 y(FitsChan)427 2638 y Fj(All)d(FitsChans)g(ha)n(v)n(e)e(this)i
-(attribute.)p 0 2810 V 0 2941 a Fz(Class)1118 b Fe(Ob)7
-b(ject)37 b(class)i(name)1116 b Fz(Class)0 3102 y Fd(Description:)44
-b Fj(This)28 b(attribute)g(giv)n(es)e(the)i(name)f(of)h(the)g(class)f
-(to)g(whic)n(h)h(an)f(Ob)5 b(ject)27 b(b)r(elongs.)0
-3238 y Fd(T)m(yp)s(e:)227 3337 y Fj(Character)f(string,)h(read-only)-7
-b(.)0 3473 y Fd(Class)31 b(Applicabilit)m(y:)259 3595
-y(Ob)5 b(ject)427 3695 y Fj(All)28 b(Ob)5 b(jects)28
-b(ha)n(v)n(e)e(this)i(attribute.)p 0 3866 V 0 3998 a
-Fz(Clean)275 b Fe(Remo)m(v)m(e)38 b(cards)g(used)h(whilst)f(reading)f
-(ev)m(en)h(if)h(an)f(error)1701 4112 y(o)s(ccurs?)3444
-3998 y Fz(Clean)0 4250 y Fd(Description:)44 b Fj(This)35
-b(attribute)h(indicates)f(whether)g(or)f(not)h(cards)f(should)h(b)r(e)g
-(remo)n(v)n(ed)f(from)g(the)i(FitsChan)f(if)227 4349
-y(an)c(error)d(o)r(ccurs)i(within)h(astRead.)45 b(A)31
-b(succesful)f(read)g(on)g(a)g(FitsChan)h(alw)n(a)n(ys)e(results)h(in)h
-(the)f(remo)n(v)-5 b(al)30 b(of)227 4449 y(the)f(cards)e(whic)n(h)h(w)n
-(ere)f(in)n(v)n(olv)n(ed)f(in)i(the)h(description)e(of)h(the)h
-(returned)e(Ob)5 b(ject.)38 b(Ho)n(w)n(ev)n(er,)26 b(in)j(the)f(ev)n
-(en)n(t)g(of)227 4549 y(an)j(error)e(during)h(the)h(read)g(\(for)f
-(instance)h(if)g(the)g(cards)f(in)h(the)h(FitsChan)f(ha)n(v)n(e)e
-(illegal)h(v)-5 b(alues,)32 b(or)e(if)h(some)227 4648
-y(required)f(cards)f(are)h(missing\))g(no)g(cards)f(will)i(b)r(e)g
-(remo)n(v)n(ed)e(from)h(the)h(FitsChan)f(if)h(the)g(Clean)f(attribute)h
-(is)227 4748 y(zero)c(\(the)h(default\).)37 b(If)28 b(Clean)f(is)h
-(non-zero)e(then)i(an)n(y)e(cards)h(whic)n(h)g(w)n(ere)g(used)g(in)h
-(the)g(ab)r(orted)f(attempt)h(to)227 4848 y(read)f(an)g(ob)5
-b(ject)28 b(will)f(b)r(e)i(remo)n(v)n(ed.)227 4965 y(This)34
-b(pro)n(vides)e(a)h(means)g(of)g Ft(")p Fj(cleaning)p
-Ft(")f Fj(a)h(FitsChan)g(of)h(W)n(CS)f(related)g(cards)f(whic)n(h)i(w)n
-(orks)e(ev)n(en)h(in)g(the)227 5065 y(ev)n(en)n(t)27
-b(of)h(the)g(cards)e(not)i(forming)f(a)g(legal)g(W)n(CS)h(description.)
-0 5200 y Fd(T)m(yp)s(e:)227 5300 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0
-5435 y Fd(Class)k(Applicabilit)m(y:)259 5558 y(FitsChan)427
-5657 y Fj(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-eop end
-%%Page: 399 409
-TeXDict begin 399 408 bop 3643 52 a FF(399)p 0 351 3780
-12 v 0 483 a Fz(Clip)641 490 y Fe(Clip)38 b(lines)g(and/or)f(mark)m
-(ers)g(at)h(the)h(Plot)e(b)s(oundary?)3533 483 y Fz(Clip)0
-695 y Fd(Description:)44 b Fj(This)33 b(attribute)h(con)n(trols)d
-(whether)i(curv)n(es)f(and)h(mark)n(ers)e(are)h(clipp)r(ed)i(at)e(the)i
-(b)r(oundary)e(of)h(the)227 794 y(graphics)22 b(b)r(o)n(x)g(sp)r
-(eci\014ed)h(when)f(the)h(Plot)g(w)n(as)e(created.)35
-b(A)23 b(v)-5 b(alue)22 b(of)h(3)f(implies)h(b)r(oth)g(mark)n(ers)e
-(and)h(curv)n(es)g(are)227 894 y(clipp)r(ed)27 b(at)e(the)h(Plot)f(b)r
-(oundary)-7 b(.)36 b(A)26 b(v)-5 b(alue)25 b(of)h(2)f(implies)h(mark)n
-(ers)d(are)i(clipp)r(ed,)h(but)h(not)e(curv)n(es.)35
-b(A)26 b(v)-5 b(alue)26 b(of)227 994 y(1)j(implies)g(curv)n(es)e(are)h
-(clipp)r(ed,)i(but)g(not)f(mark)n(ers.)38 b(A)30 b(v)-5
-b(alue)28 b(of)h(zero)f(implies)h(neither)g(curv)n(es)f(nor)g(mark)n
-(ers)227 1093 y(are)35 b(clipp)r(ed.)63 b(The)36 b(default)h(v)-5
-b(alue)36 b(is)g(1.)62 b(Note,)38 b(this)e(attributes)g(con)n(trols)f
-(only)h(the)g(clipping)g(p)r(erformed)227 1193 y(in)n(ternally)e
-(within)h(AST.)f(The)g(underlying)g(graphics)f(system)h(ma)n(y)f(also)g
-(apply)h(clipping.)57 b(In)34 b(suc)n(h)g(cases,)227
-1292 y(remo)n(ving)e(clipping)h(using)g(this)h(attribute)f(do)r(es)g
-(not)h(guaran)n(tee)d(that)j(no)f(clipping)g(will)h(b)r(e)f(visible)h
-(in)f(the)227 1392 y(\014nal)28 b(plot.)227 1521 y(The)i(astClip)g
-(function)g(can)f(b)r(e)h(used)g(to)f(establish)h(generalised)e
-(clipping)h(within)i(arbitrary)c(regions)i(of)g(the)227
-1621 y(Plot.)0 1780 y Fd(T)m(yp)s(e:)227 1880 y Fj(In)n(teger.)0
-2039 y Fd(Class)i(Applicabilit)m(y:)259 2185 y(Plot)427
-2285 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 2493 V 0 2625 a Fz(ClipOp)175 b Fe(Com)m(bine)37 b(Plot)g(clipping)g
-(limits)g(using)h(a)h(b)s(o)s(olean)e(OR?)175 b Fz(ClipOp)0
-2828 y Fd(Description:)44 b Fj(This)27 b(attribute)g(con)n(trols)e(ho)n
-(w)h(the)h(clipping)g(limits)g(sp)r(eci\014ed)g(for)g(eac)n(h)e(axis)h
-(of)h(a)f(Plot)h(\(using)f(the)227 2928 y(astClip)g(function\))h(are)e
-(com)n(bined.)36 b(This,)26 b(in)h(turn,)f(determines)g(whic)n(h)g
-(parts)f(of)h(the)g(graphical)f(output)h(will)227 3027
-y(b)r(e)i(visible.)227 3157 y(If)f(the)g(ClipOp)f(attribute)h(of)g(a)f
-(Plot)g(is)g(zero)f(\(the)i(default\),)h(graphical)d(output)i(is)f
-(visible)g(only)h(if)g(it)f(satis\014es)227 3256 y(the)h(clipping)g
-(limits)g(on)f(all)g(the)h(axes)f(of)g(the)h(clipping)g(F)-7
-b(rame)26 b(\(a)g(b)r(o)r(olean)g(AND\).)i(Otherwise,)e(if)h(ClipOp)g
-(is)227 3356 y(non-zero,)f(output)i(is)g(visible)f(if)h(it)g
-(satis\014es)f(the)h(clipping)g(limits)g(on)f(one)g(or)g(more)g(axes)g
-(\(a)g(b)r(o)r(olean)g(OR\).)227 3485 y(An)g(imp)r(ortan)n(t)f(use)g
-(of)g(this)h(attribute)f(is)g(to)g(allo)n(w)f(areas)g(of)h(a)g(Plot)f
-(to)h(b)r(e)h(left)g(clear)e(\(e.g.)36 b(as)26 b(a)g(bac)n(kground)227
-3585 y(for)f(some)f(text\).)36 b(T)-7 b(o)25 b(ac)n(hiev)n(e)e(this,)j
-(the)f(lo)n(w)n(er)f(and)g(upp)r(er)h(clipping)g(b)r(ounds)g(supplied)g
-(to)g(astClip)g(should)f(b)r(e)227 3685 y(rev)n(ersed,)i(and)i(the)g
-(ClipOp)f(attribute)h(of)f(the)h(Plot)f(should)h(b)r(e)g(set)f(to)h(a)f
-(non-zero)f(v)-5 b(alue.)0 3844 y Fd(T)m(yp)s(e:)227
-3943 y Fj(In)n(teger)27 b(\(b)r(o)r(olean\).)0 4102 y
-Fd(Class)k(Applicabilit)m(y:)259 4249 y(Plot)427 4348
-y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)p 0
-4557 V 0 4689 a Fz(Closed)176 b Fe(Should)38 b(the)g(b)s(oundary)g(b)s
-(e)i(considered)e(to)g(b)s(e)h(inside)f(the)1706 4803
-y(region?)3389 4689 y Fz(Closed)0 5002 y Fd(Description:)44
-b Fj(This)28 b(attribute)g(con)n(trols)e(whether)i(p)r(oin)n(ts)f(on)g
-(the)i(b)r(oundary)d(of)i(a)f(Region)g(are)g(considered)g(to)g(b)r(e)
-227 5101 y(inside)c(or)f(outside)h(the)g(region.)34 b(If)24
-b(the)f(attribute)g(v)-5 b(alue)23 b(is)f(non-zero)g(\(the)h
-(default\),)i(p)r(oin)n(ts)e(on)f(the)h(b)r(oundary)227
-5201 y(are)29 b(considered)g(to)h(b)r(e)h(inside)f(the)g(region)f
-(\(that)i(is,)f(the)h(Region)e(is)h Ft(")p Fj(closed)p
-Ft(")p Fj(\).)43 b(Ho)n(w)n(ev)n(er,)28 b(if)j(the)f(attribute)227
-5301 y(v)-5 b(alue)28 b(is)f(zero,)g(p)r(oin)n(ts)g(on)h(the)g(b)r
-(ounary)e(are)h(considered)f(to)i(b)r(e)g(outside)f(the)h(region.)0
-5460 y Fd(T)m(yp)s(e:)227 5559 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0
-5718 y Fd(Class)k(Applicabilit)m(y:)p eop end
-%%Page: 400 410
-TeXDict begin 400 409 bop 0 52 a FF(400)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)259 351
-y Fd(Region)427 451 y Fj(All)d(Regions)f(ha)n(v)n(e)f(this)i
-(attribute.)259 585 y Fd(P)m(oin)m(tList)427 685 y Fj(The)f(v)-5
-b(alue)26 b(of)g(the)h(Closed)e(attribute)i(is)f(ignored)f(b)n(y)h(P)n
-(oin)n(tList)g(regions.)34 b(If)27 b(the)g(P)n(oin)n(tList)e(region)g
-(has)427 784 y(not)32 b(b)r(een)g(negated,)h(then)f(it)g(is)g(alw)n(a)n
-(ys)e(assumed)h(to)g(b)r(e)i(closed.)48 b(If)33 b(the)f(P)n(oin)n
-(tList)e(region)h(has)g(b)r(een)427 884 y(negated,)24
-b(then)h(it)f(is)f(alw)n(a)n(ys)f(assumed)h(to)h(b)r(e)g(op)r(en.)36
-b(This)23 b(is)h(required)f(since)g(p)r(oin)n(ts)h(ha)n(v)n(e)f(zero)f
-(v)n(olume)427 984 y(and)28 b(therefore)e(consist)h(en)n(tirely)g(of)h
-(b)r(oundary)-7 b(.)259 1118 y Fd(CmpRegion)427 1217
-y Fj(The)27 b(default)g(Closed)e(v)-5 b(alue)27 b(for)f(a)g(CmpRegion)g
-(is)g(the)h(Closed)f(v)-5 b(alue)26 b(of)g(its)h(\014rst)f(comp)r(onen)
-n(t)g(Region.)259 1351 y Fd(Stc)427 1451 y Fj(The)i(default)g(Closed)f
-(v)-5 b(alue)27 b(for)g(an)h(Stc)g(is)f(the)h(Closed)f(v)-5
-b(alue)28 b(of)f(its)h(encapsulated)f(Region.)p 0 1653
-3780 12 v 0 1791 a Fz(Colour\(elemen)l(t\))1294 1784
-y Fe(Colour)37 b(index)h(for)g(a)g(Plot)1693 1884 y(elemen)m(t)2819
-1791 y Fz(Colour\(elemen)l(t\))0 2052 y Fd(Description:)44
-b Fj(This)29 b(attribute)f(determines)g(the)h(colour)e(index)h(used)g
-(when)g(dra)n(wing)f(eac)n(h)h(elemen)n(t)g(of)g(graphical)227
-2152 y(output)21 b(pro)r(duced)e(b)n(y)h(a)f(Plot.)34
-b(It)20 b(tak)n(es)f(a)g(separate)g(v)-5 b(alue)19 b(for)h(eac)n(h)f
-(graphical)f(elemen)n(t)i(so)f(that,)j(for)d(instance,)227
-2251 y(the)25 b(setting)g Ft(")p Fj(Colour\(title\)=2)p
-Ft(")d Fj(causes)i(the)h(Plot)f(title)h(to)f(b)r(e)h(dra)n(wn)f(using)g
-(colour)f(index)i(2.)35 b(The)25 b(synon)n(ym)227 2351
-y Ft(")p Fj(Color)p Ft(")h Fj(ma)n(y)h(also)f(b)r(e)i(used.)227
-2477 y(The)d(range)f(of)h(in)n(teger)g(colour)f(indices)h(a)n(v)-5
-b(ailable)24 b(and)h(their)g(app)r(earance)e(is)i(determined)h(b)n(y)f
-(the)g(underlying)227 2577 y(graphics)g(system.)36 b(The)26
-b(default)h(b)r(eha)n(viour)e(is)h(for)f(all)h(graphical)e(elemen)n(ts)
-i(to)g(b)r(e)h(dra)n(wn)e(using)h(the)g(default)227 2676
-y(colour)e(index)g(supplied)h(b)n(y)f(this)h(graphics)e(system)i
-(\(normally)-7 b(,)24 b(this)h(is)g(lik)n(ely)f(to)g(result)g(in)h
-(white)g(plotting)g(on)227 2776 y(a)i(blac)n(k)g(bac)n(kground,)f(or)h
-(vice)g(v)n(ersa\).)0 2928 y Fd(T)m(yp)s(e:)227 3027
-y Fj(In)n(teger.)0 3179 y Fd(Class)k(Applicabilit)m(y:)259
-3318 y(Plot)427 3418 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)
-0 3582 y Fd(Notes:)340 3868 y Fi(\017)45 b Fj(F)-7 b(or)27
-b(a)g(list)h(of)g(the)g(graphical)e(elemen)n(ts)h(a)n(v)-5
-b(ailable,)27 b(see)g(the)h(description)f(of)g(the)h(Plot)f(class.)340
-4002 y Fi(\017)45 b Fj(If)31 b(no)e(graphical)g(elemen)n(t)h(is)g(sp)r
-(eci\014ed,)h(\(e.g.)44 b Ft(")p Fj(Colour)p Ft(")28
-b Fj(instead)h(of)h Ft(")p Fj(Colour\(title\))p Ft(")p
-Fj(\),)g(then)h(a)e Ft(")p Fj(set)p Ft(")427 4101 y Fj(or)d
-Ft(")p Fj(clear)p Ft(")f Fj(op)r(eration)h(will)g(a\013ect)h(the)g
-(attribute)g(v)-5 b(alue)27 b(of)f(all)h(graphical)e(elemen)n(ts,)i
-(while)g(a)f Ft(")p Fj(get)p Ft(")f Fj(or)427 4201 y
-Ft(")p Fj(test)p Ft(")i Fj(op)r(eration)g(will)h(use)f(just)h(the)g
-(Colour\(T)-7 b(extLab\))27 b(v)-5 b(alue.)p 0 4403 V
-0 4533 a Fz(Commen)l(t)940 4534 y Fe(Include)39 b(textual)e(commen)m
-(ts)g(in)i(output?)3206 4533 y Fz(Commen)l(t)0 4726 y
-Fd(Description:)44 b Fj(This)30 b(is)f(a)h(b)r(o)r(olean)f(attribute)g
-(whic)n(h)h(con)n(trols)e(whether)h(textual)h(commen)n(ts)f(are)g(to)g
-(b)r(e)h(included)227 4825 y(in)j(the)g(output)g(generated)f(b)n(y)g(a)
-g(Channel.)52 b(If)33 b(included,)i(they)e(will)g(describ)r(e)f(what)g
-(eac)n(h)g(item)h(of)g(output)227 4925 y(represen)n(ts.)227
-5051 y(If)28 b(Commen)n(t)g(is)f(non-zero,)f(then)i(commen)n(ts)g(will)
-f(b)r(e)h(included.)38 b(If)28 b(it)g(is)f(zero,)g(commen)n(ts)g(will)h
-(b)r(e)g(omitted.)0 5203 y Fd(T)m(yp)s(e:)227 5302 y
-Fj(In)n(teger)f(\(b)r(o)r(olean\).)0 5454 y Fd(Class)k(Applicabilit)m
-(y:)259 5593 y(Channel)427 5693 y Fj(The)d(default)g(v)-5
-b(alue)27 b(is)h(non-zero)e(for)h(a)g(normal)g(Channel.)p
-eop end
-%%Page: 401 411
-TeXDict begin 401 410 bop 3643 52 a FF(401)259 351 y
-Fd(FitsChan)427 451 y Fj(The)28 b(default)g(v)-5 b(alue)27
-b(is)h(non-zero)e(for)h(a)g(FitsChan.)259 585 y Fd(XmlChan)427
-685 y Fj(The)h(default)g(v)-5 b(alue)27 b(is)h(zero)e(for)i(an)f
-(XmlChan.)p 0 887 3780 12 v 0 1017 a Fz(Curren)l(t)1108
-1018 y Fe(F)-10 b(rameSet)38 b(curren)m(t)f(F)-10 b(rame)38
-b(index)3313 1017 y Fz(Curren)l(t)0 1187 y Fd(Description:)44
-b Fj(This)38 b(attribute)g(giv)n(es)f(the)h(index)g(of)g(the)g(F)-7
-b(rame)37 b(whic)n(h)h(is)g(to)g(b)r(e)g(regarded)e(as)h(the)h
-Ft(")p Fj(curren)n(t)p Ft(")227 1286 y Fj(F)-7 b(rame)37
-b(within)g(a)g(F)-7 b(rameSet.)65 b(The)37 b(default)g(is)g(the)h(most)
-e(recen)n(t)h(F)-7 b(rame)36 b(added)h(to)g(the)g(F)-7
-b(rameSet)37 b(\(this)227 1386 y(F)-7 b(rame)27 b(alw)n(a)n(ys)f(has)h
-(an)g(index)h(equal)f(to)h(the)g(F)-7 b(rameSet's)27
-b(Nframe)g(attribute\).)0 1538 y Fd(T)m(yp)s(e:)227 1638
-y Fj(In)n(teger.)0 1790 y Fd(Class)k(Applicabilit)m(y:)259
-1929 y(F)-8 b(rameSet)427 2029 y Fj(All)28 b(F)-7 b(rameSets)27
-b(ha)n(v)n(e)g(this)h(attribute.)0 2193 y Fd(Notes:)340
-2479 y Fi(\017)45 b Fj(In)n(v)n(erting)29 b(a)g(F)-7
-b(rameSet)29 b(\(in)n(v)n(erting)g(the)h(b)r(o)r(olean)f(sense)g(of)h
-(its)g(In)n(v)n(ert)e(attribute,)j(with)f(the)g(astIn)n(v)n(ert)427
-2578 y(function)e(for)g(example\))f(will)h(in)n(terc)n(hange)e(the)i(v)
--5 b(alues)27 b(of)h(its)f(Base)g(and)g(Curren)n(t)g(attributes.)p
-0 2780 V 0 2911 a Fz(DSBCen)l(tre)849 2912 y Fe(The)38
-b(cen)m(tral)f(p)s(osition)g(of)i(in)m(terest)e(in)h(a)h(dual)1409
-3026 y(sideband)g(sp)s(ectrum)3108 2911 y Fz(DSBCen)l(tre)0
-3218 y Fd(Description:)44 b Fj(This)31 b(attribute)h(sp)r(eci\014es)e
-(the)i(cen)n(tral)e(p)r(osition)h(of)g(in)n(terest)f(in)i(a)e(dual)h
-(sideband)g(sp)r(ectrum.)48 b(Its)227 3318 y(sole)33
-b(use)g(is)g(to)g(determine)g(the)h(lo)r(cal)e(oscillator)g(frequency)g
-(\(the)i(frequency)f(whic)n(h)g(marks)f(the)h(b)r(oundary)227
-3417 y(b)r(et)n(w)n(een)f(the)h(lo)n(w)n(er)e(and)h(upp)r(er)g
-(sidebands\).)50 b(See)32 b(the)h(description)f(of)g(the)g(IF)h(\(in)n
-(termediate)f(frequency\))227 3517 y(attribute)21 b(for)g(details)f(of)
-h(ho)n(w)f(the)h(lo)r(cal)g(oscillator)e(frequency)h(is)h(calculated.)
-34 b(The)21 b(sideband)f(con)n(taining)g(this)227 3617
-y(cen)n(tral)28 b(p)r(osition)g(is)g(referred)g(to)g(as)g(the)h
-Ft(")p Fj(observ)n(ed)p Ft(")d Fj(sideband,)i(and)h(the)f(other)g
-(sideband)h(as)e(the)i Ft(")p Fj(image)p Ft(")227 3716
-y Fj(sideband.)227 3842 y(The)c(v)-5 b(alue)25 b(is)g(accessed)f(as)g
-(a)h(p)r(osition)g(in)g(the)h(sp)r(ectral)e(system)h(represen)n(ted)f
-(b)n(y)g(the)i(Sp)r(ecF)-7 b(rame)25 b(attributes)227
-3942 y(inherited)40 b(b)n(y)f(this)h(class,)h(but)f(is)f(stored)g(in)n
-(ternally)f(as)h(top)r(o)r(cen)n(tric)g(frequency)-7
-b(.)72 b(Th)n(us,)42 b(if)e(the)f(System)227 4041 y(attribute)30
-b(of)g(the)h(DSBSp)r(ecF)-7 b(rame)30 b(is)g(set)g(to)g
-Ft(")p Fj(VRAD)p Ft(")p Fj(,)h(the)f(Unit)h(attribute)f(set)g(to)g
-Ft(")p Fj(m/s)p Ft(")f Fj(and)h(the)g(Std-)227 4141 y(OfRest)i
-(attribute)f(set)h(to)f Ft(")p Fj(LSRK)p Ft(")p Fj(,)g(then)h(v)-5
-b(alues)31 b(for)g(the)h(DSBCen)n(tre)f(attribute)h(should)f(b)r(e)h
-(supplied)f(as)227 4241 y(radio)e(v)n(elo)r(cit)n(y)h(in)g(units)h(of)f
-Ft(")p Fj(m/s)p Ft(")f Fj(relativ)n(e)g(to)h(the)h(kinematic)f(LSR)h
-(\(alternativ)n(e)e(units)h(ma)n(y)g(b)r(e)h(used)f(b)n(y)227
-4340 y(app)r(ending)24 b(a)g(suitable)g(units)g(string)f(to)h(the)g
-(end)h(of)e(the)i(v)-5 b(alue\).)36 b(This)23 b(v)-5
-b(alue)24 b(is)g(then)h(con)n(v)n(erted)d(to)i(top)r(o)r(cen-)227
-4440 y(tric)33 b(frequency)f(and)h(stored.)51 b(If)33
-b(\(sa)n(y\))g(the)g(Unit)g(attribute)g(is)g(subsequen)n(tly)f(c)n
-(hanged)g(to)h Ft(")p Fj(km/s)p Ft(")e Fj(b)r(efore)227
-4539 y(retrieving)e(the)i(curren)n(t)e(v)-5 b(alue)30
-b(of)g(the)g(DSBCen)n(tre)g(attribute,)h(the)f(stored)g(top)r(o)r(cen)n
-(tric)f(frequency)h(will)g(b)r(e)227 4639 y(con)n(v)n(erted)c(bac)n(k)h
-(to)h(LSRK)f(radio)f(v)n(elo)r(cit)n(y)-7 b(,)27 b(this)h(time)g(in)g
-(units)g(of)g Ft(")p Fj(km/s)p Ft(")p Fj(,)e(b)r(efore)h(b)r(eing)h
-(returned.)227 4765 y(The)g(default)g(v)-5 b(alue)27
-b(for)h(this)f(attribute)h(is)g(30)e(GHz.)0 4917 y Fd(T)m(yp)s(e:)227
-5017 y Fj(Floating)h(p)r(oin)n(t.)0 5169 y Fd(Class)k(Applicabilit)m
-(y:)259 5308 y(DSBSp)s(ecF)-8 b(rame)427 5408 y Fj(All)28
-b(DSBSp)r(ecF)-7 b(rames)28 b(ha)n(v)n(e)e(this)i(attribute.)-2
-5572 y Fd(Note)n(:)p eop end
-%%Page: 402 412
-TeXDict begin 402 411 bop 0 52 a FF(402)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)340 351
-y Fi(\017)45 b Fj(The)32 b(attributes)g(whic)n(h)g(de\014ne)g(the)g
-(transformation)e(to)i(or)f(from)h(top)r(o)r(cen)n(tric)f(frequency)h
-(should)f(b)r(e)427 451 y(assigned)19 b(their)h(correct)f(v)-5
-b(alues)20 b(b)r(efore)g(accessing)e(this)j(attribute.)34
-b(These)20 b(p)r(oten)n(tially)g(include)g(System,)427
-551 y(Unit,)29 b(StdOfRest,)f(ObsLon,)f(ObsLat,)g(ObsAlt,)g(Ep)r(o)r(c)
-n(h,)h(RefRA,)g(RefDec)g(and)g(RestF)-7 b(req.)p 0 763
-3780 12 v 0 894 a Fz(DefB1950)598 b Fe(Use)39 b(FK4)g(B1950)e(as)i
-(defaults?)595 b Fz(DefB1950)0 1073 y Fd(Description:)44
-b Fj(This)34 b(attribute)g(is)g(a)f(b)r(o)r(olean)h(v)-5
-b(alue)33 b(whic)n(h)h(sp)r(eci\014es)g(a)f(default)h(equino)n(x)f(and)
-h(reference)f(frame)227 1172 y(to)d(use)g(when)g(reading)f(a)h(F)-7
-b(rameSet)30 b(from)f(a)h(FitsChan)g(with)h(a)e(foreign)h(\(i.e.)44
-b(non-nativ)n(e\))29 b(enco)r(ding.)44 b(It)31 b(is)227
-1272 y(only)g(used)f(if)i(the)f(FITS)g(header)f(con)n(tains)g(RA)h(and)
-g(DEC)g(axes)f(but)h(con)n(tains)f(no)g(information)g(ab)r(out)h(the)
-227 1372 y(reference)f(frame)g(or)g(equino)n(x.)46 b(If)31
-b(this)g(is)g(the)g(case,)f(then)i(v)-5 b(alues)30 b(of)h(FK4)f(and)g
-(B1950)f(are)h(assumed)g(if)h(the)227 1471 y(DefB1950)g(attribute)i
-(has)f(a)g(non-zero)f(v)-5 b(alue)33 b(and)f(ICRS)h(is)f(assumed)g(if)h
-(DefB1950)e(is)i(zero.)51 b(The)32 b(default)227 1571
-y(v)-5 b(alue)29 b(for)g(DefB1950)f(dep)r(ends)i(on)f(the)g(v)-5
-b(alue)29 b(of)h(the)f(Enco)r(ding)g(attribute:)40 b(for)29
-b(FITS-W)n(CS)g(enco)r(ding)g(the)227 1670 y(default)f(is)g(zero,)e
-(and)i(for)f(all)g(other)g(enco)r(dings)g(it)h(is)g(one.)0
-1833 y Fd(T)m(yp)s(e:)227 1932 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0
-2095 y Fd(Class)k(Applicabilit)m(y:)259 2244 y(FitsChan)427
-2343 y Fj(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 2555 V 0 2694 a Fz(Digits/Digits\(axis\))1390 2687
-y Fe(Num)m(b)s(er)38 b(of)h(digits)e(of)1665 2798 y(precision)2680
-2694 y Fz(Digits/Digits\(axis\))0 3000 y Fd(Description:)44
-b Fj(This)26 b(attribute)g(sp)r(eci\014es)f(ho)n(w)g(man)n(y)g(digits)h
-(of)f(precision)g(are)f(required)h(b)n(y)g(default)h(when)g(a)f(co)r
-(or-)227 3099 y(dinate)k(v)-5 b(alue)29 b(is)g(formatted)f(for)h(a)f(F)
--7 b(rame)28 b(axis)h(\(e.g.)40 b(using)29 b(astF)-7
-b(ormat\).)39 b(Its)29 b(v)-5 b(alue)29 b(ma)n(y)f(b)r(e)i(set)e
-(either)h(for)227 3199 y(a)g(F)-7 b(rame)29 b(as)g(a)g(whole,)h(or)f
-(\(b)n(y)g(subscripting)g(the)h(attribute)g(name)f(with)h(the)g(n)n(um)
-n(b)r(er)g(of)f(an)g(axis\))g(for)g(eac)n(h)227 3299
-y(axis)h(individually)-7 b(.)45 b(An)n(y)30 b(v)-5 b(alue)31
-b(set)f(for)g(an)g(individual)g(axis)g(will)g(o)n(v)n(er-ride)e(the)j
-(v)-5 b(alue)30 b(for)g(the)h(F)-7 b(rame)29 b(as)h(a)227
-3398 y(whole.)227 3529 y(Note)d(that)f(the)h(Digits)g(v)-5
-b(alue)26 b(acts)g(only)g(as)g(a)g(means)g(of)g(determining)g(a)g
-(default)h(F)-7 b(ormat)26 b(string.)36 b(Its)26 b(e\013ects)227
-3629 y(are)32 b(o)n(v)n(er-ridden)f(if)i(a)g(F)-7 b(ormat)32
-b(string)g(is)h(set)g(explicitly)g(for)f(an)g(axis.)52
-b(Ho)n(w)n(ev)n(er,)33 b(if)g(the)g(F)-7 b(ormat)32 b(attribute)227
-3728 y(sp)r(eci\014es)37 b(the)g(precision)f(using)g(the)h(string)f
-Ft(")p Fj(.)p Fi(\003)p Ft(")p Fj(,)i(then)f(the)g(Digits)g(attribute)g
-(is)f(used)h(to)f(determine)h(the)227 3828 y(n)n(um)n(b)r(er)28
-b(of)f(decimal)h(places)e(to)i(pro)r(duce.)0 3990 y Fd(T)m(yp)s(e:)227
-4090 y Fj(In)n(teger.)0 4252 y Fd(Class)j(Applicabilit)m(y:)259
-4401 y(F)-8 b(rame)427 4501 y Fj(The)30 b(default)f(Digits)h(v)-5
-b(alue)29 b(supplied)h(b)n(y)f(the)g(F)-7 b(rame)29 b(class)f(is)i(7.)
-41 b(If)30 b(a)f(v)-5 b(alue)29 b(less)g(than)g(1)g(is)g(supplied,)427
-4601 y(then)f(1)g(is)f(used)h(instead.)259 4740 y Fd(F)-8
-b(rameSet)427 4839 y Fj(The)23 b(Digits)f(attribute)g(of)h(a)f(F)-7
-b(rameSet)22 b(\(or)f(one)h(of)g(its)h(axes\))e(is)i(the)f(same)g(as)g
-(that)g(of)g(its)h(curren)n(t)e(F)-7 b(rame)427 4939
-y(\(as)27 b(sp)r(eci\014ed)h(b)n(y)g(the)g(Curren)n(t)e(attribute\).)
-259 5078 y Fd(Plot)427 5178 y Fj(The)34 b(default)h(Digits)f(v)-5
-b(alue)33 b(used)h(b)n(y)g(the)g(Plot)g(class)f(when)h(dra)n(wing)e
-(annotated)i(axis)f(lab)r(els)g(is)h(the)427 5278 y(smallest)27
-b(v)-5 b(alue)28 b(whic)n(h)f(results)h(in)f(all)h(adjacen)n(t)f(lab)r
-(els)g(b)r(eing)h(distinct.)259 5417 y Fd(TimeF)-8 b(rame)427
-5516 y Fj(The)27 b(Digits)f(attribute)g(is)g(ignored)f(when)i(a)e
-(TimeF)-7 b(rame)26 b(formats)f(a)h(v)-5 b(alue)26 b(as)g(a)g(date)g
-(and)g(time)g(string)427 5616 y(\(see)i(the)g(F)-7 b(ormat)27
-b(attribute\).)p eop end
-%%Page: 403 413
-TeXDict begin 403 412 bop 3643 52 a FF(403)p 0 351 3780
-12 v 0 490 a Fz(Direction\(axis\))1173 483 y Fe(Displa)m(y)38
-b(axis)g(in)g(con)m(v)m(en)m(tional)1638 598 y(direction?)2900
-490 y Fz(Direction\(axis\))0 749 y Fd(Description:)44
-b Fj(This)c(attribute)g(is)g(a)f(b)r(o)r(olean)g(v)-5
-b(alue)40 b(whic)n(h)g(suggests)e(ho)n(w)h(the)h(axes)f(of)h(a)f(F)-7
-b(rame)40 b(should)f(b)r(e)227 849 y(displa)n(y)n(ed)28
-b(\(e.g.\))39 b(in)29 b(graphical)e(output.)40 b(By)28
-b(default,)h(it)g(has)f(the)h(v)-5 b(alue)28 b(one,)g(indicating)g
-(that)h(they)g(should)227 948 y(b)r(e)f(sho)n(wn)g(in)g(the)g(con)n(v)n
-(en)n(tional)e(sense)h(\(increasing)g(left)h(to)g(righ)n(t)f(for)g(an)h
-(abscissa,)e(and)i(b)r(ottom)g(to)f(top)h(for)227 1048
-y(an)d(ordinate\).)36 b(If)25 b(set)h(to)f(zero,)f(this)i(attribute)f
-(indicates)g(that)h(the)f(direction)g(should)g(b)r(e)h(rev)n(ersed,)e
-(as)g(w)n(ould)227 1148 y(often)k(b)r(e)g(done)f(for)h(an)f
-(astronomical)e(magnitude)j(or)f(a)g(righ)n(t)g(ascension)f(axis.)0
-1290 y Fd(T)m(yp)s(e:)227 1390 y Fj(In)n(teger)h(\(b)r(o)r(olean\).)0
-1532 y Fd(Class)k(Applicabilit)m(y:)259 1662 y(F)-8 b(rame)427
-1761 y Fj(The)29 b(default)g(Direction)f(v)-5 b(alue)28
-b(supplied)h(b)n(y)f(the)h(F)-7 b(rame)27 b(class)h(is)g(1,)g
-(indicating)h(that)f(all)g(axes)g(should)427 1861 y(b)r(e)g(displa)n(y)
-n(ed)f(in)h(the)g(con)n(v)n(en)n(tional)d(direction.)259
-1987 y Fd(SkyF)-8 b(rame)427 2087 y Fj(The)31 b(SkyF)-7
-b(rame)30 b(class)f(re-de\014nes)h(the)h(default)g(Direction)g(v)-5
-b(alue)30 b(to)h(suggest)e(that)i(certain)f(axes)g(\(e.g.)427
-2186 y(righ)n(t)d(ascension\))g(should)g(b)r(e)h(plotted)g(in)g(rev)n
-(erse)e(when)h(appropriate.)259 2312 y Fd(F)-8 b(rameSet)427
-2412 y Fj(The)40 b(Direction)f(attribute)g(of)h(a)e(F)-7
-b(rameSet)40 b(axis)e(is)h(the)h(same)f(as)f(that)i(of)f(its)h(curren)n
-(t)e(F)-7 b(rame)39 b(\(as)427 2511 y(sp)r(eci\014ed)28
-b(b)n(y)f(the)h(Curren)n(t)f(attribute\).)259 2637 y
-Fd(Plot)427 2737 y Fj(The)33 b(Direction)g(attribute)f(of)h(the)g(base)
-f(F)-7 b(rame)32 b(in)h(a)g(Plot)f(is)g(set)h(to)g(indicate)f(the)h
-(sense)g(of)f(the)h(t)n(w)n(o)427 2837 y(graphics)23
-b(axes,)i(as)f(implied)h(b)n(y)f(the)h(graphics)e(b)r(ounding)i(b)r(o)n
-(x)f(supplied)h(when)g(the)g(Plot)f(w)n(as)f(created.)0
-2992 y Fd(Notes:)340 3267 y Fi(\017)45 b Fj(When)36 b(sp)r(ecifying)f
-(this)h(attribute)f(b)n(y)g(name,)i(it)f(should)f(b)r(e)h(subscripted)f
-(with)g(the)h(n)n(um)n(b)r(er)f(of)g(the)427 3367 y(F)-7
-b(rame)27 b(axis)g(to)h(whic)n(h)f(it)h(applies.)340
-3493 y Fi(\017)45 b Fj(The)32 b(Direction)f(attribute)h(do)r(es)f(not)h
-(directly)f(a\013ect)h(the)g(b)r(eha)n(viour)f(of)g(the)h(AST)g
-(library)-7 b(.)48 b(Instead,)427 3592 y(it)28 b(serv)n(es)d(as)h(a)h
-(hin)n(t)g(to)g(applications)e(programs)g(ab)r(out)i(the)g(orien)n
-(tation)f(in)h(whic)n(h)g(they)g(ma)n(y)f(wish)h(to)427
-3692 y(displa)n(y)h(an)n(y)f(data)h(asso)r(ciated)e(with)j(the)f(F)-7
-b(rame.)38 b(Applications)28 b(are)f(free)h(to)g(ignore)f(this)h(hin)n
-(t)h(if)f(they)427 3791 y(wish.)p 0 3977 V 0 4109 a Fz(Disco)664
-4115 y Fe(PcdMap)39 b(pincushion/barrel)c(distortion)h(co)s(e\016cien)m
-(t)3459 4109 y Fz(Disco)0 4301 y Fd(Description:)44 b
-Fj(This)37 b(attribute)f(sp)r(eci\014es)g(the)h(pincushion/barrel)d
-(distortion)h(co)r(e\016cien)n(t)h(used)h(b)n(y)e(a)h(PcdMap.)227
-4401 y(This)29 b(co)r(e\016cien)n(t)h(is)f(set)g(when)g(the)h(PcdMap)e
-(is)i(created,)e(but)i(ma)n(y)f(later)f(b)r(e)i(mo)r(di\014ed.)42
-b(If)30 b(the)f(attribute)h(is)227 4501 y(cleared,)k(its)f(default)h(v)
--5 b(alue)33 b(is)g(zero,)g(whic)n(h)g(giv)n(es)f(no)h(distortion.)53
-b(F)-7 b(or)32 b(pincushion)h(distortion,)h(the)g(v)-5
-b(alue)227 4600 y(should)28 b(b)r(e)g(p)r(ositiv)n(e.)36
-b(F)-7 b(or)27 b(barrel)f(distortion,)h(it)h(should)g(b)r(e)g(negativ)n
-(e.)227 4721 y(Note)23 b(that)g(the)g(forw)n(ard)d(transformation)h(of)
-i(a)f(PcdMap)g(applies)g(the)h(distortion)f(sp)r(eci\014ed)g(b)n(y)h
-(this)f(attribute)227 4821 y(and)h(the)f(in)n(v)n(erse)f
-(transformation)g(remo)n(v)n(es)g(this)h(distortion.)35
-b(If)23 b(the)f(PcdMap)g(is)h(in)n(v)n(erted)e(\(e.g.)35
-b(using)22 b(astIn-)227 4921 y(v)n(ert\),)32 b(then)f(the)h(forw)n(ard)
-d(transformation)h(will)h(remo)n(v)n(e)e(the)j(distortion)e(and)h(the)h
-(in)n(v)n(erse)d(transformation)227 5020 y(will)f(apply)f(it.)38
-b(The)27 b(distortion)g(itself)h(will)g(still)g(b)r(e)g(giv)n(en)f(b)n
-(y)g(the)h(same)f(v)-5 b(alue)28 b(of)f(Disco.)0 5163
-y Fd(T)m(yp)s(e:)227 5262 y Fj(Double)h(precision.)0
-5405 y Fd(Class)j(Applicabilit)m(y:)259 5534 y(PcdMap)427
-5634 y Fj(All)d(PcdMaps)f(ha)n(v)n(e)f(this)i(attribute.)p
-eop end
-%%Page: 404 414
-TeXDict begin 404 413 bop 0 52 a FF(404)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a Fz(Domain)744 b Fe(Co)s(ordinate)36
-b(system)i(domain)742 b Fz(Domain)0 662 y Fd(Description:)44
-b Fj(This)36 b(attribute)f(con)n(tains)g(a)g(string)g(whic)n(h)g(iden)n
-(ti\014es)h(the)g(ph)n(ysical)e(domain)h(of)h(the)g(co)r(ordinate)227
-762 y(system)28 b(that)g(a)f(F)-7 b(rame)27 b(describ)r(es.)227
-884 y(The)h(Domain)g(attribute)g(also)f(con)n(trols)g(ho)n(w)g(a)g(F)-7
-b(rame)28 b(b)r(eha)n(v)n(es)f(when)h(it)g(is)g(used)g(\(b)n(y)g
-(astFindF)-7 b(rame\))28 b(as)f(a)227 983 y(template)i(to)g(matc)n(h)f
-(another)g(\(target\))g(F)-7 b(rame.)39 b(It)29 b(do)r(es)f(this)h(b)n
-(y)g(sp)r(ecifying)f(the)h(Domain)g(that)g(the)g(target)227
-1083 y(F)-7 b(rame)32 b(should)g(ha)n(v)n(e)g(in)h(order)e(to)h(matc)n
-(h)g(the)h(template.)52 b(If)33 b(the)g(Domain)f(v)-5
-b(alue)33 b(in)f(the)h(template)g(F)-7 b(rame)227 1182
-y(is)31 b(set,)g(then)g(only)f(targets)f(with)i(the)g(same)e(Domain)i
-(v)-5 b(alue)30 b(will)h(b)r(e)f(matc)n(hed.)46 b(If)30
-b(the)h(template's)g(Domain)227 1282 y(v)-5 b(alue)28
-b(is)f(not)h(set,)f(ho)n(w)n(ev)n(er,)f(then)i(the)g(target's)f(Domain)
-g(will)h(b)r(e)g(ignored.)0 1427 y Fd(T)m(yp)s(e:)227
-1526 y Fj(String.)0 1671 y Fd(Class)j(Applicabilit)m(y:)259
-1802 y(F)-8 b(rame)427 1902 y Fj(The)28 b(default)g(Domain)f(v)-5
-b(alue)28 b(supplied)g(b)n(y)f(the)h(F)-7 b(rame)27 b(class)g(is)g(an)h
-(empt)n(y)f(string.)259 2030 y Fd(SkyF)-8 b(rame)427
-2129 y Fj(The)28 b(SkyF)-7 b(rame)27 b(class)f(re-de\014nes)h(the)h
-(default)g(Domain)g(v)-5 b(alue)27 b(to)h(b)r(e)g Ft(")p
-Fj(SKY)p Ft(")p Fj(.)259 2257 y Fd(CmpF)-8 b(rame)427
-2357 y Fj(The)43 b(CmpF)-7 b(rame)42 b(class)f(re-de\014nes)g(the)i
-(default)g(Domain)f(v)-5 b(alue)42 b(to)g(b)r(e)h(of)f(the)h(form)f
-Ft(")p Fl(<)p Fj(dom1)p Fl(>)p Fj(-)427 2456 y Fl(<)p
-Fj(dom2)p Fl(>)p Ft(")p Fj(,)35 b(where)g Fl(<)p Fj(dom1)p
-Fl(>)e Fj(and)i Fl(<)p Fj(dom2)p Fl(>)e Fj(are)h(the)i(Domains)e(of)h
-(the)g(t)n(w)n(o)g(comp)r(onen)n(t)f(F)-7 b(rames.)427
-2556 y(If)39 b(b)r(oth)g(these)g(Domains)f(are)g(blank,)j(then)e(the)g
-(string)f Ft(")p Fj(CMP)p Ft(")g Fj(is)g(used)h(as)f(the)h(default)g
-(Domain)427 2656 y(name.)259 2784 y Fd(F)-8 b(rameSet)427
-2883 y Fj(The)25 b(Domain)g(attribute)h(of)f(a)f(F)-7
-b(rameSet)25 b(is)g(the)h(same)e(as)g(that)i(of)f(its)g(curren)n(t)f(F)
--7 b(rame)25 b(\(as)g(sp)r(eci\014ed)g(b)n(y)427 2983
-y(the)j(Curren)n(t)f(attribute\).)259 3111 y Fd(Sp)s(ecF)-8
-b(rame)427 3210 y Fj(The)28 b(Sp)r(ecF)-7 b(rame)27 b(class)g
-(re-de\014nes)g(the)h(default)g(Domain)f(v)-5 b(alue)28
-b(to)f(b)r(e)h Ft(")p Fj(SPECTR)n(UM)p Ft(")p Fj(.)259
-3338 y Fd(DSBSp)s(ecF)-8 b(rame)427 3438 y Fj(The)28
-b(DSBSp)r(ecF)-7 b(rame)28 b(class)e(re-de\014nes)h(the)h(default)g
-(Domain)g(v)-5 b(alue)27 b(to)g(b)r(e)h Ft(")p Fj(DSBSPECTR)n(UM)p
-Ft(")p Fj(.)259 3566 y Fd(FluxF)-8 b(rame)427 3665 y
-Fj(The)28 b(FluxF)-7 b(rame)27 b(class)g(re-de\014nes)g(the)g(default)i
-(Domain)e(v)-5 b(alue)27 b(to)h(b)r(e)g Ft(")p Fj(FLUX)p
-Ft(")p Fj(.)259 3793 y Fd(Sp)s(ecFluxF)-8 b(rame)427
-3893 y Fj(The)28 b(FluxF)-7 b(rame)27 b(class)g(re-de\014nes)g(the)g
-(default)i(Domain)e(v)-5 b(alue)27 b(to)h(b)r(e)g Ft(")p
-Fj(SPECTR)n(UM-FLUX)p Ft(")p Fj(.)259 4021 y Fd(TimeF)-8
-b(rame)427 4120 y Fj(The)28 b(TimeF)-7 b(rame)27 b(class)g
-(re-de\014nes)f(the)i(default)g(Domain)g(v)-5 b(alue)27
-b(to)h(b)r(e)g Ft(")p Fj(TIME)p Ft(")p Fj(.)0 4277 y
-Fd(Notes:)340 4555 y Fi(\017)45 b Fj(All)28 b(Domain)g(v)-5
-b(alues)27 b(are)g(con)n(v)n(erted)f(to)h(upp)r(er)h(case)f(and)g
-(white)h(space)f(is)h(remo)n(v)n(ed)e(b)r(efore)h(use.)p
-0 4744 V 0 4883 a Fz(Dra)l(wAxes\(axis\))1330 4876 y
-Fe(Dra)m(w)38 b(axes)g(for)g(a)h(Plot?)2844 4883 y Fz(Dra)l
-(wAxes\(axis\))0 5073 y Fd(Description:)44 b Fj(This)30
-b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h(annotated)f
-(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227 5172
-y(astGrid)24 b(function\))h(b)n(y)f(determining)g(whether)g(curv)n(es)f
-(represen)n(ting)g(co)r(ordinate)g(axes)g(should)h(b)r(e)h(dra)n(wn.)34
-b(It)227 5272 y(tak)n(es)18 b(a)g(separate)f(v)-5 b(alue)18
-b(for)g(eac)n(h)f(ph)n(ysical)h(axis)f(of)i(a)f(Plot)f(so)h(that,)j
-(for)d(instance,)i(the)e(setting)h Ft(")p Fj(Dra)n(wAxes\(2\)=0)p
-Ft(")227 5372 y Fj(sp)r(eci\014es)28 b(that)g(no)f(axis)g(should)g(b)r
-(e)h(dra)n(wn)f(for)g(the)h(second)f(axis.)227 5494 y(If)g(dra)n(wn,)f
-(these)h(axis)e(lines)i(will)f(pass)g(through)g(an)n(y)g(tic)n(k)g
-(marks)f(asso)r(ciated)h(with)h(n)n(umerical)e(lab)r(els)i(dra)n(wn)227
-5593 y(to)g(mark)f(v)-5 b(alues)27 b(on)f(the)h(axes.)36
-b(The)27 b(lo)r(cation)f(of)h(these)g(tic)n(k)g(marks)f(and)g(lab)r
-(els)h(\(and)g(hence)g(the)g(axis)f(lines\))227 5693
-y(is)i(determined)g(b)n(y)f(the)h(Plot's)f(Lab)r(elA)n(t\(axis\))g
-(attribute.)p eop end
-%%Page: 405 415
-TeXDict begin 405 414 bop 3643 52 a FF(405)227 351 y
-Fj(If)29 b(the)f(Dra)n(wAxes)f(v)-5 b(alue)27 b(of)h(a)g(Plot)f(is)h
-(non-zero)e(\(the)i(default\),)h(then)f(axis)f(lines)h(will)g(b)r(e)h
-(dra)n(wn,)e(otherwise)227 451 y(they)h(will)g(b)r(e)g(omitted.)0
-596 y Fd(T)m(yp)s(e:)227 696 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0
-842 y Fd(Class)k(Applicabilit)m(y:)259 974 y(Plot)427
-1074 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-1232 y Fd(Notes:)340 1511 y Fi(\017)45 b Fj(Axis)32 b(lines)h(are)e
-(dra)n(wn)g(indep)r(enden)n(tly)i(of)f(an)n(y)f(co)r(ordinate)g(grid)h
-(lines)g(\(see)g(the)h(Grid)f(attribute\))g(so)427 1610
-y(grid)27 b(lines)h(ma)n(y)f(b)r(e)h(used)f(to)h(substitute)g(for)f
-(axis)g(lines)g(if)i(required.)340 1739 y Fi(\017)45
-b Fj(In)32 b(some)f(circumstances,)g(n)n(umerical)g(lab)r(els)g(and)g
-(tic)n(k)h(marks)e(are)g(dra)n(wn)h(around)f(the)i(edges)f(of)g(the)427
-1839 y(plotting)c(area)e(\(see)i(the)g(Lab)r(elling)g(attribute\).)37
-b(In)27 b(this)g(case,)f(the)h(v)-5 b(alue)27 b(of)g(the)g(Dra)n(wAxes)
-e(attribute)427 1938 y(is)j(ignored.)340 2067 y Fi(\017)45
-b Fj(If)28 b(no)g(axis)f(is)g(sp)r(eci\014ed,)h(\(e.g.)37
-b Ft(")p Fj(Dra)n(wAxes)p Ft(")26 b Fj(instead)i(of)f
-Ft(")p Fj(Dra)n(wAxes\(2\))p Ft(")p Fj(\),)f(then)j(a)e
-Ft(")p Fj(set)p Ft(")g Fj(or)f Ft(")p Fj(clear)p Ft(")427
-2167 y Fj(op)r(eration)d(will)i(a\013ect)f(the)h(attribute)f(v)-5
-b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f
-Ft(")p Fj(get)p Ft(")f Fj(or)g Ft(")p Fj(test)p Ft(")h
-Fj(op)r(eration)427 2267 y(will)k(use)g(just)g(the)g(Dra)n(wAxes\(1\))e
-(v)-5 b(alue.)p 0 2458 3780 12 v 0 2590 a Fz(Dra)l(wTitle)690
-b Fe(Dra)m(w)37 b(a)i(title)e(for)h(a)g(Plot?)687 b Fz(Dra)l(wTitle)0
-2752 y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 2852 y(astGrid)d(function\))i(b)n(y)e(determining)
-h(whether)f(a)g(title)i(is)e(dra)n(wn.)227 2975 y(If)f(the)g(Dra)n
-(wTitle)f(v)-5 b(alue)25 b(of)h(a)f(Plot)f(is)i(non-zero)e(\(the)i
-(default\),)g(then)g(the)g(title)g(will)g(b)r(e)g(dra)n(wn,)f
-(otherwise)f(it)227 3074 y(will)k(b)r(e)g(omitted.)0
-3220 y Fd(T)m(yp)s(e:)227 3319 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0
-3465 y Fd(Class)k(Applicabilit)m(y:)259 3598 y(Plot)427
-3697 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)259
-3826 y Fd(Plot3D)427 3926 y Fj(The)h(Plot3D)f(class)g(ignores)f(this)h
-(attributes,)h(assuming)f(a)g(v)-5 b(alue)27 b(of)h(zero.)0
-4084 y Fd(Notes:)340 4363 y Fi(\017)45 b Fj(The)28 b(text)g(used)f(for)
-h(the)g(title)g(is)f(obtained)h(from)f(the)h(Plot's)f(Title)h
-(attribute.)340 4492 y Fi(\017)45 b Fj(The)28 b(v)n(ertical)e(placemen)
-n(t)i(of)f(the)h(title)h(can)e(b)r(e)h(con)n(trolled)e(using)h(the)h
-(TitleGap)g(attribute.)p 0 4683 V 0 4814 a Fz(Dut1)1233
-4815 y Fe(The)39 b(UT1-UTC)d(correction)3482 4814 y Fz(Dut1)0
-4973 y Fd(Description:)44 b Fj(This)28 b(attribute)g(is)g(used)g(when)g
-(calculating)f(the)i(Lo)r(cal)e(Apparen)n(t)g(Sidereal)g(Time)i
-(corresp)r(onding)227 5072 y(to)34 b(SkyF)-7 b(rame's)33
-b(Ep)r(o)r(c)n(h)h(v)-5 b(alue)34 b(\(used)h(when)f(con)n(v)n(erting)e
-(p)r(ositions)i(to)g(or)f(from)h(the)h Ft(")p Fj(AzEl)p
-Ft(")e Fj(system\).)56 b(It)227 5172 y(should)29 b(b)r(e)h(set)g(to)f
-(the)h(di\013erence,)g(in)f(seconds,)g(b)r(et)n(w)n(een)h(the)g(UT1)f
-(and)g(UTC)h(timescales)f(at)g(the)h(momen)n(t)227 5272
-y(in)35 b(time)g(represen)n(ted)f(b)n(y)g(the)h(SkyF)-7
-b(rame's)34 b(Ep)r(o)r(c)n(h)g(attribute.)58 b(The)35
-b(v)-5 b(alue)35 b(to)f(use)h(is)f(unpredictable)h(and)227
-5371 y(dep)r(ends)29 b(on)e(c)n(hanges)g(in)h(the)h(earth's)e(rotation)
-g(sp)r(eed.)38 b(V)-7 b(alues)28 b(for)f(UT1-UTC)h(can)f(b)r(e)i
-(obtained)f(from)f(the)227 5471 y(In)n(ternational)g(Earth)f(Rotation)h
-(and)h(Reference)f(Systems)h(Service)e(\(IERS\))i(at)g(h)n
-(ttp://www.iers.org/.)227 5593 y(Curren)n(tly)-7 b(,)20
-b(the)g(correction)e(is)h(alw)n(a)n(ys)e(less)i(than)g(1)g(second.)34
-b(This)19 b(is)g(ensured)g(b)n(y)g(the)g(o)r(ccasional)f(in)n(tro)r
-(duction)227 5693 y(of)29 b(leap)g(seconds)f(in)n(to)h(the)g(UTC)g
-(timescale.)41 b(Therefore)28 b(no)g(great)g(error)f(will)i(usually)g
-(result)g(if)g(no)g(v)-5 b(alue)29 b(is)p eop end
-%%Page: 406 416
-TeXDict begin 406 415 bop 0 52 a FF(406)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fj(assigned)21 b(to)h(this)h(attribute)f(\(in)h(whic)n(h)f(case)g(a)g
-(default)g(v)-5 b(alue)22 b(of)h(zero)e(is)h(used\).)35
-b(Ho)n(w)n(ev)n(er,)22 b(it)g(is)g(p)r(ossible)g(that)227
-451 y(a)30 b(decision)g(ma)n(y)f(b)r(e)h(tak)n(en)g(at)g(some)f(time)i
-(in)f(the)h(future)f(to)g(abandon)f(the)i(in)n(tro)r(duction)f(of)g
-(leap)f(seconds,)227 551 y(in)f(whic)n(h)g(case)e(the)i(DUT)h
-(correction)d(could)h(gro)n(w)f(to)h(signi\014can)n(t)g(sizes.)0
-700 y Fd(T)m(yp)s(e:)227 799 y Fj(Floating)g(p)r(oin)n(t.)0
-949 y Fd(Class)k(Applicabilit)m(y:)259 1085 y(F)-8 b(rame)427
-1185 y Fj(All)28 b(F)-7 b(rames)27 b(ha)n(v)n(e)g(this)g(attribute.)p
-0 1384 3780 12 v 0 1522 a Fz(Edge\(axis\))1110 1515 y
-Fe(Whic)m(h)39 b(edges)f(to)g(lab)s(el)g(in)h(a)f(Plot)3157
-1522 y Fz(Edge\(axis\))0 1722 y Fd(Description:)44 b
-Fj(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h
-(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-1821 y(astGrid)38 b(function\))h(b)n(y)f(determining)h(whic)n(h)f
-(edges)f(of)i(a)f(Plot)g(are)f(used)h(for)g(displa)n(ying)f(n)n
-(umerical)h(and)227 1921 y(descriptiv)n(e)e(axis)f(lab)r(els.)62
-b(It)36 b(tak)n(es)g(a)f(separate)g(v)-5 b(alue)36 b(for)f(eac)n(h)h
-(ph)n(ysical)f(axis)g(of)h(the)h(Plot)e(so)h(that,)i(for)227
-2020 y(instance,)d(the)f(setting)g Ft(")p Fj(Edge\(2\)=left)p
-Ft(")e Fj(sp)r(eci\014es)i(whic)n(h)f(edge)g(to)h(use)f(to)h(displa)n
-(y)f(lab)r(els)g(for)g(the)h(second)227 2120 y(axis.)227
-2245 y(The)j(v)-5 b(alues)36 b Ft(")p Fj(left)p Ft(")p
-Fj(,)j Ft(")p Fj(top)p Ft(")p Fj(,)f Ft(")p Fj(righ)n(t)p
-Ft(")e Fj(and)g Ft(")p Fj(b)r(ottom)p Ft(")g Fj(\(or)g(an)n(y)g
-(abbreviation\))g(can)g(b)r(e)h(supplied)g(for)f(this)227
-2344 y(attribute.)f(The)21 b(default)g(is)f(usually)h
-Ft(")p Fj(b)r(ottom)p Ft(")f Fj(for)g(the)h(\014rst)f(axis)g(and)h
-Ft(")p Fj(left)p Ft(")f Fj(for)h(the)g(second)f(axis.)34
-b(Ho)n(w)n(ev)n(er,)227 2444 y(if)24 b(exterior)f(lab)r(elling)g(w)n
-(as)g(requested)g(\(see)h(the)g(Lab)r(elling)f(attribute\))h(but)h
-(cannot)e(b)r(e)h(pro)r(duced)f(using)h(these)227 2543
-y(default)j(Edge)d(v)-5 b(alues,)26 b(then)h(the)f(default)g(v)-5
-b(alues)25 b(will)h(b)r(e)h(sw)n(app)r(ed)e(if)h(this)g(enables)g
-(exterior)e(lab)r(elling)i(to)f(b)r(e)227 2643 y(pro)r(duced.)0
-2792 y Fd(T)m(yp)s(e:)227 2892 y Fj(String.)0 3041 y
-Fd(Class)31 b(Applicabilit)m(y:)259 3178 y(Plot)427 3277
-y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)259
-3410 y Fd(Plot3D)427 3509 y Fj(The)36 b(Plot3D)f(class)f(ignores)g
-(this)i(attributes.)61 b(Instead)35 b(it)h(uses)f(its)h(o)n(wn)f(Ro)r
-(otCorner)f(attribute)i(to)427 3609 y(determine)28 b(whic)n(h)f(edges)g
-(of)h(the)g(3D)f(plot)h(to)g(lab)r(el.)0 3771 y Fd(Notes:)340
-4053 y Fi(\017)45 b Fj(In)29 b(some)e(circumstances,)g(n)n(umerical)g
-(lab)r(els)h(will)h(b)r(e)f(dra)n(wn)f(along)g(in)n(ternal)g(grid)h
-(lines)g(instead)g(of)g(at)427 4153 y(the)i(edges)e(of)i(the)f
-(plotting)h(area)d(\(see)j(the)f(Lab)r(elling)g(attribute\).)43
-b(In)29 b(this)h(case,)e(the)i(Edge)e(attribute)427 4252
-y(only)39 b(a\013ects)h(the)g(placemen)n(t)f(of)g(the)h(descriptiv)n(e)
-f(lab)r(els)g(\(these)h(are)e(dra)n(wn)h(at)g(the)h(edges)f(of)g(the)
-427 4352 y(plotting)28 b(area,)e(rather)h(than)g(along)g(the)h(axis)f
-(lines\).)p 0 4551 V 0 4683 a Fz(Enco)t(ding)169 b Fe(System)38
-b(for)g(enco)s(ding)g(Ob)7 b(jects)38 b(as)h(FITS)g(headers)169
-b Fz(Enco)t(ding)0 4871 y Fd(Description:)44 b Fj(This)25
-b(attribute)f(sp)r(eci\014es)g(the)h(enco)r(ding)f(system)g(to)g(use)g
-(when)g(AST)h(Ob)5 b(jects)24 b(are)f(stored)h(as)f(FITS)227
-4971 y(header)29 b(cards)f(in)h(a)g(FitsChan.)42 b(It)29
-b(a\013ects)g(the)h(b)r(eha)n(viour)e(of)h(the)g(astW)-7
-b(rite)29 b(and)g(astRead)g(functions)g(when)227 5070
-y(they)c(are)f(used)h(to)f(transfer)g(an)n(y)g(AST)h(Ob)5
-b(ject)25 b(to)f(or)g(from)g(an)h(external)f(represen)n(tation)f
-(consisting)h(of)g(FITS)227 5170 y(header)31 b(cards)g(\(i.e.)50
-b(whenev)n(er)31 b(a)g(write)h(or)f(read)g(op)r(eration)f(is)i(p)r
-(erformed)f(using)h(a)f(FitsChan)h(as)f(the)h(I/O)227
-5270 y(Channel\).)227 5394 y(There)27 b(are)f(sev)n(eral)f(w)n(a)n(ys)h
-(\(con)n(v)n(en)n(tions\))g(b)n(y)h(whic)n(h)g(co)r(ordinate)f(system)g
-(information)h(ma)n(y)f(b)r(e)i(represen)n(ted)227 5494
-y(in)j(the)g(form)f(of)h(FITS)g(headers)e(and)i(the)f(Enco)r(ding)g
-(attribute)h(is)f(used)h(to)f(sp)r(ecify)h(whic)n(h)g(of)f(these)h
-(should)227 5593 y(b)r(e)e(used.)37 b(The)28 b(enco)r(ding)g(options)f
-(a)n(v)-5 b(ailable)27 b(are)g(outlined)h(in)g(the)h
-Ft(")p Fj(Enco)r(dings)d(Av)-5 b(ailable)p Ft(")27 b
-Fj(section)h(b)r(elo)n(w,)227 5693 y(and)g(in)g(more)e(detail)i(in)g
-(the)g(sections)f(whic)n(h)g(follo)n(w.)p eop end
-%%Page: 407 417
-TeXDict begin 407 416 bop 3643 52 a FF(407)227 351 y
-Fj(Enco)r(ding)31 b(systems)f(di\013er)h(in)g(the)h(range)d(of)i(p)r
-(ossible)g(Ob)5 b(jects)31 b(\(e.g.)46 b(classes\))30
-b(they)i(can)e(represen)n(t,)h(in)g(the)227 451 y(restrictions)20
-b(they)i(place)f(on)g(these)g(Ob)5 b(jects)21 b(\(e.g.)35
-b(compatibilit)n(y)21 b(with)h(some)e(externally-de\014ned)h(co)r
-(ordinate)227 551 y(system)30 b(mo)r(del\))g(and)g(in)g(the)g(n)n(um)n
-(b)r(er)f(of)h(Ob)5 b(jects)29 b(that)h(can)g(b)r(e)g(stored)f
-(together)f(in)i(an)n(y)f(particular)g(set)h(of)227 650
-y(FITS)i(header)f(cards)g(\(e.g.)48 b(m)n(ultiple)33
-b(Ob)5 b(jects,)32 b(or)f(only)g(a)g(single)g(Ob)5 b(ject\).)49
-b(The)32 b(c)n(hoice)f(of)g(enco)r(ding)h(also)227 750
-y(a\013ects)24 b(the)h(range)d(of)j(external)e(applications)g(whic)n(h)
-h(can)g(p)r(oten)n(tially)g(read)f(and)h(in)n(terpret)g(the)g(FITS)g
-(header)227 849 y(cards)j(pro)r(duced.)227 974 y(The)20
-b(enco)r(ding)f(options)g(a)n(v)-5 b(ailable)18 b(are)h(not)g
-(necessarily)f(m)n(utually)i(exclusiv)n(e,)g(and)f(it)h(ma)n(y)f
-(sometimes)g(b)r(e)h(p)r(os-)227 1074 y(sible)27 b(to)f(store)f(m)n
-(ultiple)i(Ob)5 b(jects)26 b(\(or)g(the)g(same)g(Ob)5
-b(ject)26 b(sev)n(eral)f(times\))i(using)f(di\013eren)n(t)g(enco)r
-(dings)g(within)227 1173 y(the)31 b(same)f(set)g(of)g(FITS)h(header)e
-(cards.)44 b(This)30 b(p)r(ossibilit)n(y)g(increases)f(the)i(lik)n
-(eliho)r(o)r(d)f(of)g(other)g(applications)227 1273 y(b)r(eing)e(able)f
-(to)h(read)e(and)i(in)n(terpret)f(the)h(information.)227
-1398 y(By)33 b(default,)i(a)e(FitsChan)h(will)f(attempt)h(to)f
-(determine)h(whic)n(h)f(enco)r(ding)g(system)g(is)g(already)f(in)h
-(use,)i(and)227 1497 y(will)41 b(set)f(the)g(default)h(Enco)r(ding)e(v)
--5 b(alue)40 b(accordingly)e(\(so)i(that)h(subsequen)n(t)e(I/O)h(op)r
-(erations)e(adopt)i(the)227 1597 y(same)28 b(con)n(v)n(en)n(tions\).)38
-b(It)29 b(do)r(es)f(this)h(b)n(y)f(lo)r(oking)f(for)h(certain)g
-(critical)g(FITS)h(k)n(eyw)n(ords)d(whic)n(h)j(only)f(o)r(ccur)f(in)227
-1697 y(particular)g(enco)r(dings.)38 b(F)-7 b(or)28 b(details)g(of)g
-(ho)n(w)g(this)g(w)n(orks,)f(see)h(the)g Ft(")p Fj(Choice)g(of)g
-(Default)h(Enco)r(ding)p Ft(")e Fj(section)227 1796 y(b)r(elo)n(w.)36
-b(If)26 b(y)n(ou)e(wish)h(to)g(ensure)g(that)g(a)g(particular)f(enco)r
-(ding)h(system)g(is)g(used,)h(indep)r(enden)n(tly)g(of)f(an)n(y)f(FITS)
-227 1896 y(cards)j(already)f(presen)n(t,)h(y)n(ou)g(should)g(set)h(an)f
-(explicit)h(Enco)r(ding)f(v)-5 b(alue)27 b(y)n(ourself.)0
-2046 y Fd(T)m(yp)s(e:)227 2145 y Fj(String.)0 2295 y
-Fd(Class)k(Applicabilit)m(y:)259 2432 y(FitsChan)427
-2532 y Fj(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)-2
-2694 y Fd(Enco)s(dings)j(Av)-5 b(ailable)n(:)227 2840
-y Fj(The)29 b(Enco)r(ding)f(attribute)h(can)f(tak)n(e)g(an)n(y)g(of)h
-(the)g(follo)n(wing)f(\(case)g(insensitiv)n(e\))h(string)f(v)-5
-b(alues)28 b(to)h(select)f(the)227 2940 y(corresp)r(onding)e(enco)r
-(ding)h(system:)340 3202 y Fi(\017)45 b Ft(")p Fj(DSS)p
-Ft(")p Fj(:)f(Enco)r(des)30 b(co)r(ordinate)g(system)h(information)f
-(in)i(FITS)f(header)f(cards)g(using)h(the)g(con)n(v)n(en)n(tion)427
-3301 y(dev)n(elop)r(ed)19 b(at)h(the)g(Space)f(T)-7 b(elescop)r(e)19
-b(Science)h(Institute)g(\(STScI\))g(for)f(the)h(Digitised)g(Sky)g(Surv)
-n(ey)e(\(DSS\))427 3401 y(astrometric)29 b(plate)h(calibrations.)43
-b(The)30 b(main)h(adv)-5 b(an)n(tages)28 b(of)i(this)h(enco)r(ding)e
-(are)h(that)g(FITS)h(images)427 3501 y(whic)n(h)i(use)g(it)g(are)e
-(widely)i(a)n(v)-5 b(ailable)32 b(and)g(it)h(is)g(understo)r(o)r(d)f(b)
-n(y)h(a)f(n)n(um)n(b)r(er)h(of)f(imp)r(ortan)n(t)h(and)f(w)n(ell-)427
-3600 y(established)25 b(astronom)n(y)e(applications.)36
-b(F)-7 b(or)24 b(further)h(details,)h(see)f(the)g(section)g
-Ft(")p Fj(The)g(DSS)h(Enco)r(ding)p Ft(")427 3700 y Fj(b)r(elo)n(w.)340
-3833 y Fi(\017)45 b Ft(")p Fj(FITS-W)n(CS)p Ft(")p Fj(:)c(Enco)r(des)29
-b(co)r(ordinate)f(system)h(information)h(in)f(FITS)h(header)f(cards)g
-(using)g(the)h(con-)427 3932 y(v)n(en)n(tions)18 b(describ)r(ed)h(in)g
-(the)h(FITS)f(w)n(orld)f(co)r(ordinate)g(system)g(\(FITS-W)n(CS\))i
-(pap)r(ers)e(b)n(y)h(E.W.)g(Greisen,)427 4032 y(M.)26
-b(Calabretta,)f(et)h(al.)36 b(The)26 b(main)f(adv)-5
-b(an)n(tages)24 b(of)i(this)g(enco)r(ding)f(are)g(that)h(it)g(should)g
-(b)r(e)g(understo)r(o)r(d)427 4132 y(b)n(y)g(an)n(y)e(FITS-W)n(CS)i
-(complian)n(t)f(application)g(and)h(is)f(lik)n(ely)h(to)f(b)r(e)h
-(adopted)f(widely)h(for)f(FITS)h(data)f(in)427 4231 y(future.)38
-b(F)-7 b(or)27 b(further)g(details,)g(see)h(the)g(section)f
-Ft(")p Fj(The)g(FITS-W)n(CS)h(Enco)r(ding)p Ft(")e Fj(b)r(elo)n(w.)340
-4364 y Fi(\017)45 b Ft(")p Fj(FITS-PC)p Ft(")p Fj(:)52
-b(Enco)r(des)35 b(co)r(ordinate)g(system)g(information)g(in)h(FITS)g
-(header)f(cards)g(using)g(the)h(con-)427 4464 y(v)n(en)n(tions)31
-b(describ)r(ed)f(in)i(an)f(earlier)f(draft)h(of)g(the)g(FITS)h(w)n
-(orld)e(co)r(ordinate)g(system)h(pap)r(ers)g(b)n(y)g(E.W.)427
-4564 y(Greisen)e(and)h(M.)f(Calabretta.)42 b(This)29
-b(enco)r(ding)g(uses)g(a)g(com)n(bination)g(of)h(CDEL)-7
-b(Ti)29 b(and)g(PCiiijjj)i(k)n(ey-)427 4663 y(w)n(ords)38
-b(to)g(describ)r(e)h(the)g(scale)f(and)g(rotation)g(of)h(the)g(pixel)f
-(axes.)70 b(This)39 b(enco)r(ding)f(is)h(included)g(to)427
-4763 y(supp)r(ort)25 b(existing)f(data)h(and)g(soft)n(w)n(are)e(whic)n
-(h)h(uses)h(these)g(no)n(w)f(sup)r(erceded)h(con)n(v)n(en)n(tions.)34
-b(In)25 b(general,)427 4863 y(the)32 b Ft(")p Fj(FITS-W)n(CS)p
-Ft(")f Fj(enco)r(ding)h(\(whic)n(h)g(uses)f(CDi)p Ft(_)p
-Fj(j)h(or)f(PCi)p Ft(_)p Fj(j)g(k)n(eyw)n(ords)f(to)h(describ)r(e)h
-(the)g(scale)f(and)427 4962 y(rotation\))c(should)g(b)r(e)h(used)g(in)g
-(preference)f(to)g Ft(")p Fj(FITS-PC)p Ft(")p Fj(.)340
-5095 y Fi(\017)45 b Ft(")p Fj(FITS-IRAF)p Ft(")p Fj(:)38
-b(Enco)r(des)27 b(co)r(ordinate)g(system)h(information)g(in)g(FITS)h
-(header)e(cards)g(using)h(the)g(con-)427 5195 y(v)n(en)n(tions)e
-(describ)r(ed)g(in)g(the)h(do)r(cumen)n(t)g Ft(")p Fj(W)-7
-b(orld)25 b(Co)r(ordinate)h(Systems)g(Represen)n(tations)f(Within)i
-(the)427 5295 y(FITS)k(F)-7 b(ormat)p Ft(")29 b Fj(b)n(y)h(R.J.)g
-(Hanisc)n(h)g(and)g(D.G.)h(W)-7 b(ells,)32 b(1988.)43
-b(This)30 b(enco)r(ding)g(is)g(curren)n(tly)g(emplo)n(y)n(ed)427
-5394 y(b)n(y)35 b(the)h(IRAF)g(data)f(analysis)f(facilit)n(y)-7
-b(,)37 b(so)e(its)h(use)f(will)g(facilitate)h(data)f(exc)n(hange)f
-(with)h(IRAF.)i(Its)427 5494 y(main)f(adv)-5 b(an)n(tages)34
-b(are)h(that)h(it)h(is)f(a)f(stable)h(con)n(v)n(en)n(tion)e(whic)n(h)i
-(appro)n(ximates)e(to)i(a)f(subset)h(of)g(the)427 5593
-y(propsed)27 b(FITS-W)n(CS)g(enco)r(ding)g(\(ab)r(o)n(v)n(e\).)35
-b(This)28 b(mak)n(es)e(it)h(suitable)g(as)g(an)g(in)n(terim)g(metho)r
-(d)g(for)g(stor-)427 5693 y(ing)k(co)r(ordinate)f(system)h(information)
-g(in)h(FITS)f(headers)f(un)n(til)i(the)g(FITS-W)n(CS)f(enco)r(ding)g(b)
-r(ecomes)p eop end
-%%Page: 408 418
-TeXDict begin 408 417 bop 0 52 a FF(408)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)427 351
-y Fj(stable.)37 b(Since)26 b(man)n(y)h(datasets)e(curren)n(tly)h(use)h
-(the)g(FITS-IRAF)g(enco)r(ding,)g(con)n(v)n(ersion)d(of)j(data)f(from)
-427 451 y(FITS-IRAF)i(to)g(the)g(\014nal)f(form)h(of)f(FITS-W)n(CS)h
-(is)f(lik)n(ely)g(to)h(b)r(e)g(w)n(ell)f(supp)r(orted.)340
-583 y Fi(\017)45 b Ft(")p Fj(FITS-AIPS)p Ft(")p Fj(:)39
-b(Enco)r(des)29 b(co)r(ordinate)f(system)h(information)f(in)i(FITS)f
-(header)g(cards)f(using)h(the)g(con-)427 683 y(v)n(en)n(tions)35
-b(originally)f(in)n(tro)r(duced)i(b)n(y)f(the)h(AIPS)g(data)f(analysis)
-g(facilit)n(y)-7 b(.)61 b(This)35 b(is)h(base)f(on)h(the)g(use)427
-782 y(of)h(CDEL)-7 b(Ti)37 b(and)g(CR)n(OT)-7 b(Ai)36
-b(k)n(eu)n(w)n(ords)f(to)i(desrib)r(e)f(the)i(scale)e(and)g(rotation)g
-(of)h(eac)n(h)f(axis.)64 b(These)427 882 y(con)n(v)n(en)n(tions)26
-b(ha)n(v)n(e)h(b)r(een)h(sup)r(erceded)f(but)h(are)f(still)h(widely)f
-(used.)340 1014 y Fi(\017)45 b Ft(")p Fj(FITS-AIPS++)p
-Ft(")p Fj(:)j(Enco)r(des)33 b(co)r(ordinate)g(system)h(information)f
-(in)h(FITS)h(header)e(cards)g(using)g(the)427 1114 y(con)n(v)n(en)n
-(tions)24 b(used)h(b)n(y)g(the)g(AIPS++)f(pro)5 b(ject.)36
-b(This)25 b(is)g(an)g(extension)f(of)h(FITS-AIPS)g(whic)n(h)g(includes)
-427 1213 y(some)i(of)h(the)g(features)f(of)g(FITS-IRAF)i(and)e
-(FITS-PC.)340 1346 y Fi(\017)45 b Ft(")p Fj(FITS-CLASS)p
-Ft(")p Fj(:)34 b(Enco)r(des)22 b(co)r(ordinate)g(system)g(information)g
-(in)h(FITS)g(header)f(cards)f(using)h(the)h(con-)427
-1445 y(v)n(en)n(tions)d(used)i(b)n(y)f(the)g(CLASS)h(pro)5
-b(ject.)34 b(CLASS)21 b(is)g(a)g(soft)n(w)n(are)f(pac)n(k)-5
-b(age)19 b(for)i(reducing)f(single-dish)h(ra-)427 1545
-y(dio)d(and)h(sub-mm)f(sp)r(ectroscopic)f(data.)33 b(See)19
-b(the)g(section)f Ft(")p Fj(CLASS)g(FITS)h(format)p Ft(")e
-Fj(at)h(h)n(ttp://www.iram.fr/IRAMFR/GILD)n(AS/do)r(c/h)n(tml/class-)
-427 1644 y(h)n(tml/.)340 1777 y Fi(\017)45 b Ft(")p Fj(NA)-7
-b(TIVE)p Ft(")p Fj(:)36 b(Enco)r(des)24 b(AST)i(Ob)5
-b(jects)26 b(in)f(FITS)h(header)f(cards)g(using)g(a)g(con)n(v)n(en)n
-(tion)f(whic)n(h)h(is)h(priv)-5 b(ate)427 1876 y(to)21
-b(the)h(AST)f(library)f(\(but)i(adheres)e(to)h(the)h(general)e(FITS)h
-(standard\))f(and)h(whic)n(h)h(uses)e(FITS)i(k)n(eyw)n(ords)427
-1976 y(that)42 b(will)f(not)g(clash)f(with)i(other)e(enco)r(ding)h
-(systems.)77 b(The)41 b(main)g(adv)-5 b(an)n(tages)39
-b(of)i(this)g(are)f(that)427 2076 y(an)n(y)e(class)f(of)i(AST)f(Ob)5
-b(ject)39 b(ma)n(y)e(b)r(e)i(enco)r(ded,)i(and)d(an)n(y)g
-(\(reasonable\))f(n)n(um)n(b)r(er)h(of)g(Ob)5 b(jects)38
-b(ma)n(y)427 2175 y(b)r(e)33 b(stored)e(sequen)n(tially)g(in)h(the)h
-(same)e(FITS)h(header.)50 b(This)32 b(mak)n(es)e(FITS)j(headers)e(an)g
-(almost)h(loss-)427 2275 y(less)i(comm)n(unication)f(path)h(for)f
-(passing)g(AST)h(Ob)5 b(jects)34 b(b)r(et)n(w)n(een)g(applications)f
-(\(although)g(all)h(suc)n(h)427 2374 y(applications)27
-b(m)n(ust,)h(of)g(course,)e(mak)n(e)h(use)g(of)h(the)g(AST)g(library)f
-(to)g(in)n(terpret)g(the)h(information\).)37 b(F)-7 b(or)427
-2474 y(further)28 b(details,)f(see)g(the)h(section)g
-Ft(")p Fj(The)f(NA)-7 b(TIVE)28 b(Enco)r(ding)p Ft(")e
-Fj(b)r(elo)n(w.)-2 2635 y Fd(Choice)32 b(of)f(Default)h(Enco)s(ding)n
-(:)227 2781 y Fj(If)d(the)g(Enco)r(ding)f(attribute)g(of)h(a)f
-(FitsChan)h(is)f(not)g(set,)h(the)g(default)g(v)-5 b(alue)28
-b(it)h(tak)n(es)f(is)g(determined)h(b)n(y)f(the)227 2881
-y(presence)d(of)h(certain)f(critical)g(FITS)h(k)n(eyw)n(ords)e(within)j
-(the)f(FitsChan.)36 b(The)26 b(sequence)f(of)h(decisions)f(used)h(to)
-227 2981 y(arriv)n(e)g(at)h(the)h(default)g(v)-5 b(alue)28
-b(is)f(as)g(follo)n(ws:)340 3241 y Fi(\017)45 b Fj(If)26
-b(the)f(FitsChan)g(con)n(tains)f(an)n(y)g(k)n(eyw)n(ords)f(b)r
-(eginning)i(with)g(the)h(string)e Ft(")p Fj(BEGAST)p
-Ft(")p Fj(,)h(then)g(NA)-7 b(TIVE)427 3340 y(enco)r(ding)28
-b(is)f(used,)340 3472 y Fi(\017)45 b Fj(Otherwise,)24
-b(FITS-CLASS)h(is)f(used)g(if)g(the)h(FitsChan)f(con)n(tains)f(a)g(DEL)
--7 b(T)g(A)e(V)25 b(k)n(eyw)n(ord)d(and)i(a)f(k)n(eyw)n(ord)427
-3572 y(of)f(the)g(form)f(VELO-xxx,)h(where)f(xxx)g(indicates)g(one)h
-(of)f(the)h(rest)g(frames)f(used)g(b)n(y)h(class)e(\(e.g.)35
-b Ft(")p Fj(VELO-)427 3672 y(LSR)p Ft(")p Fj(\).)340
-3804 y Fi(\017)45 b Fj(Otherwise,)e(if)e(the)g(FitsChan)f(con)n(tains)g
-(a)g(CTYPE)g(k)n(eyw)n(ord)e(whic)n(h)j(represen)n(ts)d(a)j(sp)r
-(ectral)e(axis)427 3904 y(using)f(the)h(con)n(v)n(en)n(tions)e(of)i
-(the)f(AIPS)h(and)f(AIPS++)g(pro)5 b(jects)37 b(\(e.g.)70
-b Ft(")p Fj(FELO-LSR)p Ft(")p Fj(,)39 b(etc\),)j(then)427
-4003 y(one)31 b(of)g(FITS-AIPS)g(or)f(FITS-AIPS++)g(enco)r(ding)h(is)f
-(used.)48 b(FITS-AIPS++)30 b(is)h(used)f(if)i(an)n(y)e(of)h(the)427
-4103 y(k)n(eyw)n(ords)g(CDi)p Ft(_)p Fj(j,)j(PR)n(OJP)-7
-b(,)32 b(LONPOLE)f(or)g(LA)-7 b(TPOLE)32 b(are)g(found)h(in)g(the)g
-(FitsChan.)52 b(Otherwise)427 4202 y(FITS-AIPS)28 b(is)f(used.)340
-4335 y Fi(\017)45 b Fj(Otherwise,)28 b(if)g(the)h(FitsChan)f(con)n
-(tains)f(a)h(k)n(eyw)n(ord)e(of)i(the)g(form)g Ft(")p
-Fj(PCiiijjj)p Ft(")p Fj(,)g(where)g Ft(")p Fj(i)p Ft(")f
-Fj(and)h Ft(")p Fj(j)p Ft(")g Fj(are)427 4434 y(single)f(digits,)h
-(then)g(FITS-PC)f(enco)r(ding)g(is)h(used,)340 4566 y
-Fi(\017)45 b Fj(Otherwise,)27 b(if)h(the)g(FitsChan)g(con)n(tains)f(a)g
-(k)n(eyw)n(ord)e(of)j(the)g(form)f Ft(")p Fj(CDiiijjj)p
-Ft(")p Fj(,)i(where)e Ft(")p Fj(i)p Ft(")g Fj(and)g Ft(")p
-Fj(j)p Ft(")h Fj(are)427 4666 y(single)f(digits,)h(then)g(FITS-IRAF)g
-(enco)r(ding)f(is)h(used,)340 4798 y Fi(\017)45 b Fj(Otherwise,)c(if)e
-(the)f(FitsChan)h(con)n(tains)e(a)h(k)n(eyw)n(ord)f(of)h(the)h(form)f
-Ft(")p Fj(CDi)p Ft(_)p Fj(j)p Ft(")p Fj(,)j(and)d(at)h(least)f(one)g
-(of)427 4898 y(RADECSYS,)43 b(PR)n(OJPi,)g(or)d(CjV)-9
-b(ALi)42 b(where)f Ft(")p Fj(i)p Ft(")g Fj(and)g Ft(")p
-Fj(j)p Ft(")g Fj(are)f(single)h(digits,)k(then)d(FITS-IRAF)427
-4998 y(enco)r(ding)28 b(is)f(used.)340 5130 y Fi(\017)45
-b Fj(Otherwise,)26 b(if)i(the)f(FitsChan)f(con)n(tains)g(an)n(y)g(k)n
-(eyw)n(ords)e(of)j(the)g(form)f(PR)n(OJPi,)f(CjV)-9 b(ALi)28
-b(or)e(RADEC-)427 5229 y(SYS,)j(where)e Ft(")p Fj(i)p
-Ft(")g Fj(and)g Ft(")p Fj(j)p Ft(")g Fj(are)g(single)g(digits,)g(then)h
-(FITS-PC)g(enco)r(ding)f(is)g(used.)340 5362 y Fi(\017)45
-b Fj(Otherwise,)34 b(if)g(the)g(FitsChan)g(con)n(tains)e(a)h(k)n(eyw)n
-(ord)f(of)h(the)h(form)f(CR)n(OT)-7 b(Ai,)35 b(where)e
-Ft(")p Fj(i)p Ft(")g Fj(is)g(a)g(single)427 5461 y(digit,)28
-b(then)g(FITS-AIPS)g(enco)r(ding)f(is)g(used.)340 5593
-y Fi(\017)45 b Fj(Otherwise,)36 b(if)f(the)g(FitsChan)g(con)n(tains)f
-(a)g(k)n(eyw)n(ord)f(of)i(the)g(form)f(CR)-9 b(V)g(ALi,)37
-b(where)d Ft(")p Fj(i)p Ft(")g Fj(is)h(a)f(single)427
-5693 y(digit,)28 b(then)g(FITS-W)n(CS)g(enco)r(ding)f(is)h(used.)p
-eop end
-%%Page: 409 419
-TeXDict begin 409 418 bop 3643 52 a FF(409)340 351 y
-Fi(\017)45 b Fj(Otherwise,)27 b(if)h(the)g(FitsChan)g(con)n(tains)e
-(the)i Ft(")p Fj(PL)-7 b(TRAH)p Ft(")27 b Fj(k)n(eyw)n(ord,)f(then)i
-(DSS)h(enco)r(ding)e(is)g(used,)340 486 y Fi(\017)45
-b Fj(Otherwise,)37 b(if)e(none)g(of)h(these)f(conditions)g(is)g(met)h
-(\(as)f(w)n(ould)f(b)r(e)i(the)g(case)e(when)i(using)f(an)g(empt)n(y)
-427 585 y(FitsChan\),)28 b(then)g(NA)-7 b(TIVE)28 b(enco)r(ding)g(is)f
-(used.)227 751 y(Except)e(for)g(the)g(NA)-7 b(TIVE)25
-b(and)g(DSS)h(enco)r(dings,)f(all)g(the)h(ab)r(o)n(v)n(e)d(c)n(hec)n
-(ks)h(also)g(require)g(that)i(the)f(header)f(con-)227
-850 y(tains)g(at)g(least)g(one)g(CTYPE,)f(CRPIX)i(and)f(CR)-9
-b(V)g(AL)24 b(k)n(eyw)n(ord)e(\(otherwise)i(the)g(c)n(hec)n(king)f(pro)
-r(cess)g(con)n(tin)n(ues)227 950 y(to)28 b(the)g(next)g(case\).)227
-1076 y(Setting)g(an)g(explicit)f(v)-5 b(alue)28 b(for)f(the)h(Enco)r
-(ding)f(attribute)h(alw)n(a)n(ys)d(o)n(v)n(er-rides)g(this)j(default)g
-(b)r(eha)n(viour.)227 1203 y(Note)h(that)g(when)g(writing)f
-(information)g(to)h(a)f(FitsChan,)h(the)g(c)n(hoice)f(of)h(enco)r(ding)
-f(will)h(dep)r(end)h(greatly)d(on)227 1302 y(the)d(t)n(yp)r(e)f(of)g
-(application)g(y)n(ou)f(exp)r(ect)i(to)f(b)r(e)g(reading)f(the)i
-(information)f(in)g(future.)36 b(If)23 b(y)n(ou)g(do)g(not)g(kno)n(w)f
-(this,)227 1402 y(there)32 b(ma)n(y)f(sometimes)g(b)r(e)h(an)f(adv)-5
-b(an)n(tage)30 b(in)i(writing)f(the)h(information)f(sev)n(eral)f
-(times,)j(using)e(a)g(di\013eren)n(t)227 1501 y(enco)r(ding)d(on)f(eac)
-n(h)g(o)r(ccasion.)-2 1654 y Fd(The)32 b(DSS)h(Enco)s(ding)n(:)227
-1801 y Fj(The)g(DSS)h(enco)r(ding)f(uses)f(FITS)i(header)e(cards)g(to)h
-(store)f(a)g(m)n(ulti-term)h(p)r(olynomial)g(whic)n(h)g(relates)f
-(pixel)227 1900 y(p)r(ositions)20 b(on)f(a)h(digitised)f(photographic)g
-(plate)g(to)h(celestial)g(co)r(ordinates)e(\(righ)n(t)h(ascension)g
-(and)h(declination\).)227 2000 y(This)33 b(enco)r(ding)g(ma)n(y)f(only)
-h(b)r(e)g(used)g(to)g(store)f(a)h(single)f(AST)i(Ob)5
-b(ject)33 b(in)g(an)n(y)f(set)h(of)g(FITS)g(header)g(cards,)227
-2099 y(and)27 b(that)h(Ob)5 b(ject)27 b(m)n(ust)h(b)r(e)f(a)g(F)-7
-b(rameSet)27 b(whic)n(h)g(conforms)g(to)g(the)h(STScI/DSS)f(co)r
-(ordinate)f(system)h(mo)r(del)227 2199 y(\(this)g(means)f(the)h
-(Mapping)g(whic)n(h)f(relates)g(its)g(base)g(and)g(curren)n(t)g(F)-7
-b(rames)26 b(m)n(ust)g(include)h(either)g(a)f(DssMap)227
-2299 y(or)h(a)g(WcsMap)h(with)g(t)n(yp)r(e)f(AST)p Ft(__)p
-Fj(T)-7 b(AN)28 b(or)f(AST)p Ft(__)p Fj(TPN\).)227 2425
-y(When)32 b(reading)e(a)h(DSS)i(enco)r(ded)e(Ob)5 b(ject)31
-b(\(using)g(astRead\),)h(the)g(FitsChan)g(concerned)e(m)n(ust)i
-(initially)f(b)r(e)227 2525 y(p)r(ositioned)21 b(at)h(the)g(\014rst)f
-(card)f(\(its)i(Card)f(attribute)g(m)n(ust)h(equal)f(1\))g(and)g(the)h
-(result)f(of)g(the)h(read,)g(if)g(successful,)227 2624
-y(will)34 b(alw)n(a)n(ys)d(b)r(e)j(a)f(p)r(oin)n(ter)g(to)g(a)g(F)-7
-b(rameSet.)54 b(The)33 b(base)g(F)-7 b(rame)33 b(of)g(this)h(F)-7
-b(rameSet)33 b(represen)n(ts)e(DSS)k(pixel)227 2724 y(co)r(ordinates,)g
-(and)f(the)h(curren)n(t)e(F)-7 b(rame)34 b(represen)n(ts)f(DSS)i
-(celestial)e(co)r(ordinates.)56 b(Suc)n(h)34 b(a)g(read)f(is)i(alw)n(a)
-n(ys)227 2823 y(destructiv)n(e)g(and)h(causes)e(the)i(FITS)g(header)f
-(cards)f(required)h(for)g(the)h(construction)f(of)g(the)h(F)-7
-b(rameSet)36 b(to)227 2923 y(b)r(e)e(remo)n(v)n(ed)e(from)h(the)g
-(FitsChan,)i(whic)n(h)e(is)g(then)h(left)g(p)r(ositioned)f(at)g(the)h
-Ft(")p Fj(end-of-\014le)p Ft(")p Fj(.)52 b(A)34 b(subsequen)n(t)227
-3023 y(read)28 b(using)h(the)g(same)f(enco)r(ding)g(will)h(therefore)f
-(not)h(return)f(another)g(F)-7 b(rameSet,)29 b(ev)n(en)f(if)i(the)f
-(FitsChan)g(is)227 3122 y(rew)n(ound.)227 3249 y(When)22
-b(astW)-7 b(rite)20 b(is)h(used)g(to)f(store)g(a)g(F)-7
-b(rameSet)21 b(using)f(DSS)i(enco)r(ding,)g(an)e(attempt)i(is)e
-(\014rst)h(made)f(to)h(simplify)227 3348 y(the)33 b(F)-7
-b(rameSet)32 b(to)g(see)f(if)i(it)g(conforms)e(to)h(the)g(DSS)h(mo)r
-(del.)51 b(Sp)r(eci\014cally)-7 b(,)33 b(the)f(curren)n(t)g(F)-7
-b(rame)31 b(m)n(ust)h(b)r(e)h(a)227 3448 y(FK5)h(SkyF)-7
-b(rame;)36 b(the)f(pro)5 b(jection)33 b(m)n(ust)h(b)r(e)g(a)g(tangen)n
-(t)f(plane)h(\(gnomonic\))g(pro)5 b(jection)33 b(with)h(p)r(olynomial)
-227 3547 y(corrections)24 b(conforming)g(to)i(DSS)g(requiremen)n(ts,)f
-(and)g(north)g(m)n(ust)h(b)r(e)g(parallel)e(to)h(the)h(second)f(base)g
-(F)-7 b(rame)227 3647 y(axis.)227 3773 y(If)36 b(the)g
-(simpli\014cation)f(pro)r(cess)f(succeeds,)j(a)e(description)g(of)g
-(the)h(F)-7 b(rameSet)35 b(is)h(written)f(to)h(the)g(FitsChan)227
-3873 y(using)31 b(appropriate)e(DSS)j(FITS)g(header)e(cards.)46
-b(The)32 b(base)e(F)-7 b(rame)31 b(of)g(the)g(F)-7 b(rameSet)31
-b(is)g(used)g(to)g(form)g(the)227 3973 y(DSS)37 b(pixel)g(co)r
-(ordinate)e(system)h(and)g(the)h(curren)n(t)e(F)-7 b(rame)36
-b(giv)n(es)f(the)i(DSS)g(celestial)f(co)r(ordinate)f(system.)227
-4072 y(A)c(successful)g(write)g(op)r(eration)e(will)i(o)n(v)n(er-write)
-e(an)n(y)h(existing)g(DSS)i(enco)r(ded)f(data)f(in)h(the)g(FitsChan,)h
-(but)227 4172 y(will)f(not)g(a\013ect)g(other)f(\(non-DSS\))h(header)f
-(cards.)45 b(If)31 b(a)g(destructiv)n(e)f(read)g(of)g(a)h(DSS)g(enco)r
-(ded)g(Ob)5 b(ject)30 b(has)227 4271 y(previously)h(o)r(ccurred,)g
-(then)h(an)g(attempt)g(will)g(b)r(e)g(made)f(to)h(store)f(the)h(FITS)g
-(header)e(cards)h(bac)n(k)g(in)h(their)227 4371 y(original)26
-b(lo)r(cations.)227 4497 y(If)h(an)g(attempt)g(to)f(simplify)i(a)e(F)-7
-b(rameSet)26 b(to)h(conform)f(to)g(the)h(DSS)g(mo)r(del)g(fails)g(\(or)
-f(if)h(the)g(Ob)5 b(ject)26 b(supplied)227 4597 y(is)33
-b(not)f(a)g(F)-7 b(rameSet\),)34 b(then)f(no)f(data)g(will)g(b)r(e)h
-(written)g(to)f(the)h(FitsChan)g(and)f(astW)-7 b(rite)32
-b(will)h(return)f(zero.)227 4697 y(No)c(error)d(will)j(result.)-2
-4850 y Fd(The)k(FITS-W)m(CS)h(Enco)s(ding)n(:)227 4996
-y Fj(The)k(FITS-W)n(CS)g(con)n(v)n(en)n(tion)e(uses)h(FITS)h(header)e
-(cards)h(to)g(describ)r(e)h(the)g(relationship)e(b)r(et)n(w)n(een)i
-(pixels)227 5095 y(in)30 b(an)f(image)f(\(not)h(necessarily)f
-(2-dimensional\))g(and)h(one)g(or)f(more)g(related)h
-Ft(")p Fj(w)n(orld)e(co)r(ordinate)h(systems)p Ft(")p
-Fj(.)227 5195 y(The)39 b(FITS-W)n(CS)g(enco)r(ding)f(ma)n(y)g(only)h(b)
-r(e)g(used)g(to)f(store)g(a)h(single)f(AST)h(Ob)5 b(ject)39
-b(in)g(an)n(y)f(set)h(of)f(FITS)227 5295 y(header)27
-b(cards,)g(and)h(that)g(Ob)5 b(ject)28 b(m)n(ust)g(b)r(e)h(a)e(F)-7
-b(rameSet)28 b(whic)n(h)g(conforms)f(to)g(the)i(FITS-W)n(CS)f(mo)r(del)
-g(\(the)227 5394 y(F)-7 b(rameSet)27 b(ma)n(y)-7 b(,)27
-b(ho)n(w)n(ev)n(er,)e(con)n(tain)h(m)n(ultiple)i(F)-7
-b(rames)26 b(whic)n(h)h(will)g(b)r(e)h(result)f(in)g(m)n(ultiple)g
-(FITS)h Ft(")p Fj(alternate)227 5494 y(axis)h(descriptions)p
-Ft(")p Fj(\).)40 b(Details)29 b(of)g(the)g(use)g(made)g(b)n(y)g(this)g
-(Enco)r(ding)f(of)h(the)h(con)n(v)n(en)n(tions)d(describ)r(ed)i(in)g
-(the)227 5593 y(FITS-W)n(CS)22 b(pap)r(ers)g(are)f(giv)n(en)g(in)h(the)
-h(app)r(endix)f Ft(")p Fj(FITS-W)n(CS)g(Co)n(v)n(erage)p
-Ft(")c Fj(of)k(this)h(do)r(cumen)n(t.)35 b(A)22 b(few)h(main)227
-5693 y(p)r(oin)n(ts)28 b(are)e(describ)r(ed)i(b)r(elo)n(w.)p
-eop end
-%%Page: 410 420
-TeXDict begin 410 419 bop 0 52 a FF(410)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fj(The)26 b(rotation)e(and)i(scaling)e(of)i(the)g(in)n(termediate)f
-(w)n(orld)g(co)r(ordinate)f(system)h(can)h(b)r(e)g(sp)r(eci\014ed)g
-(using)f(either)227 451 y Ft(")p Fj(CDi)p Ft(_)p Fj(j)p
-Ft(")30 b Fj(k)n(eyw)n(ords,)f(or)h Ft(")p Fj(PCi)p Ft(_)p
-Fj(j)p Ft(")f Fj(together)g(with)i Ft(")p Fj(CDEL)-7
-b(Ti)p Ft(")30 b Fj(k)n(eyw)n(ords.)43 b(When)31 b(writing)f(a)g(F)-7
-b(rameSet)30 b(to)227 551 y(a)f(FitsChan,)g(the)g(the)g(v)-5
-b(alue)28 b(of)h(the)g(CDMatrix)g(attribute)g(of)f(the)h(FitsChan)g
-(determines)g(whic)n(h)f(system)h(is)227 650 y(used.)227
-782 y(In)d(addition,)f(this)g(enco)r(ding)g(supp)r(orts)g(the)g
-Ft(")p Fj(T)-7 b(AN)26 b(with)f(p)r(olynomial)g(correction)e(terms)p
-Ft(")i Fj(pro)5 b(jection)24 b(whic)n(h)227 882 y(w)n(as)38
-b(included)h(in)g(a)f(draft)g(of)h(the)g(FITS-W)n(CS)g(pap)r(er,)h(but)
-g(w)n(as)d(not)i(presen)n(t)f(in)h(the)g(\014nal)f(v)n(ersion.)68
-b(A)227 982 y Ft(")p Fj(T)-7 b(AN)38 b(with)h(p)r(olynomial)e
-(correction)f(terms)p Ft(")h Fj(pro)5 b(jection)37 b(is)g(represen)n
-(ted)g(using)g(a)h(WcsMap)f(with)h(t)n(yp)r(e)227 1081
-y(AST)p Ft(__)p Fj(TPN)28 b(\(rather)g(than)h(AST)p Ft(__)p
-Fj(T)-7 b(AN)28 b(whic)n(h)h(is)f(used)h(to)f(represen)n(t)f(simple)i
-(T)-7 b(AN)29 b(pro)5 b(jections\).)39 b(When)227 1181
-y(reading)20 b(a)g(FITS)g(header,)h(a)f(CTYPE)g(k)n(eyw)n(ord)f(v)-5
-b(alue)20 b(including)g(a)g Ft(")p Fj(-T)-7 b(AN)p Ft(")20
-b Fj(co)r(de)h(results)e(in)i(an)f(AST)p Ft(__)p Fj(TPN)227
-1280 y(pro)5 b(jection)28 b(if)h(there)f(are)f(an)n(y)h(pro)5
-b(jection)27 b(parameters)g(\(giv)n(en)h(b)n(y)g(the)g(PVi)p
-Ft(_)p Fj(m)h(k)n(eyw)n(ords\))d(asso)r(ciated)h(with)227
-1380 y(the)35 b(latitude)f(axis,)h(or)e(if)i(there)f(are)f(pro)5
-b(jection)33 b(parameters)f(asso)r(ciated)h(with)h(the)h(longitude)f
-(axis)f(for)g(m)227 1480 y(greater)28 b(than)h(4.)41
-b(When)30 b(writing)f(a)g(F)-7 b(rameSet)29 b(to)g(a)f(FITS)i(header,)f
-(an)g(AST)p Ft(__)p Fj(TPN)f(pro)5 b(jection)28 b(giv)n(es)g(rise)227
-1579 y(to)c(a)g(CTYPE)f(v)-5 b(alue)24 b(including)h(the)f(normal)f
-Ft(")p Fj(-T)-7 b(AN)p Ft(")24 b Fj(co)r(de,)g(but)h(the)g(pro)5
-b(jection)23 b(parameters)f(are)h(stored)g(in)227 1679
-y(k)n(eyw)n(ords)e(with)i(names)f Ft(")p Fj(QVi)p Ft(_)p
-Fj(m)p Ft(")p Fj(,)g(instead)g(of)h(the)g(usual)f Ft(")p
-Fj(PVi)p Ft(_)p Fj(m)p Ft(")p Fj(.)34 b(Since)22 b(these)h(QV)f
-(parameters)f(are)h(not)227 1779 y(part)28 b(of)g(the)h(FITS-W)n(CS)f
-(standard)f(they)h(will)h(b)r(e)f(ignored)f(b)n(y)h(other)g(non-AST)g
-(soft)n(w)n(are,)e(resulting)i(in)g(the)227 1878 y(W)n(CS)h(b)r(eing)g
-(in)n(terpreted)f(as)g(a)g(simple)h(T)-7 b(AN)30 b(pro)5
-b(jection)27 b(without)i(an)n(y)f(corrections.)39 b(This)28
-b(should)h(b)r(e)g(seen)227 1978 y(as)k(an)g(in)n(terim)g(solution)g
-(un)n(til)g(suc)n(h)g(time)h(as)f(an)g(agreed)e(metho)r(d)j(for)f
-(describing)f(pro)5 b(jection)33 b(distortions)227 2078
-y(within)c(FITS-W)n(CS)e(has)g(b)r(een)h(published.)227
-2210 y(AST)38 b(extends)g(the)g(range)e(of)h(celestial)g(co)r(ordinate)
-g(sytstems)g(whic)n(h)h(ma)n(y)f(b)r(e)g(describ)r(ed)h(using)f(this)h
-(en-)227 2309 y(co)r(ding)33 b(b)n(y)g(inclusion)h(of)f(the)h(allo)n
-(wing)e(the)i(use)f(of)g Ft(")p Fj(AZ{)p Ft(")f Fj(and)i
-Ft(")p Fj(EL{)p Ft(")d Fj(as)i(the)h(co)r(ordinate)e(sp)r
-(eci\014cation)227 2409 y(within)f(CTYPE)e(v)-5 b(alues.)44
-b(These)30 b(form)g(a)g(longitude/latitude)f(pair)h(of)g(axes)f(whic)n
-(h)h(describ)r(e)g(azim)n(uth)g(and)227 2509 y(elev)-5
-b(ation.)37 b(The)27 b(geographic)e(p)r(osition)i(of)h(the)f(observ)n
-(er)f(should)h(b)r(e)g(supplied)h(using)f(the)h(OBSGEO-X/Y/Z)227
-2608 y(k)n(eyw)n(ords)f(describ)r(ed)i(in)g(FITS-W)n(CS)g(pap)r(er)f(I)
-r(I)r(I.)i(Curren)n(tly)-7 b(,)28 b(a)h(simple)g(mo)r(del)g(is)g(used)g
-(whic)n(h)g(includes)g(di-)227 2708 y(urnal)f(ab)r(erration,)e(but)j
-(ignores)d(atmospheric)h(refraction,)g(p)r(olar)g(motion,)h(etc.)39
-b(These)27 b(ma)n(y)g(b)r(e)i(added)f(in)g(a)227 2807
-y(leter)g(release.)227 2940 y(When)21 b(reading)e(a)h(FITS-W)n(CS)g
-(enco)r(ded)g(Ob)5 b(ject)20 b(\(using)g(astRead\),)h(the)g(FitsChan)f
-(concerned)f(m)n(ust)h(initially)227 3039 y(b)r(e)38
-b(p)r(ositioned)f(at)g(the)h(\014rst)f(card)f(\(its)i(Card)f(attribute)
-g(m)n(ust)h(equal)e(1\))h(and)h(the)f(result)g(of)h(the)f(read,)i(if)
-227 3139 y(successful,)34 b(will)f(alw)n(a)n(ys)d(b)r(e)j(a)g(p)r(oin)n
-(ter)f(to)g(a)h(F)-7 b(rameSet.)51 b(The)33 b(base)f(F)-7
-b(rame)32 b(of)h(this)g(F)-7 b(rameSet)32 b(represen)n(ts)227
-3239 y(FITS-W)n(CS)k(pixel)h(co)r(ordinates,)f(and)g(the)h(curren)n(t)e
-(F)-7 b(rame)36 b(represen)n(ts)e(the)j(ph)n(ysical)e(co)r(ordinate)g
-(system)227 3338 y(describ)r(ed)j(b)n(y)f(the)i(FITS-W)n(CS)f(primary)e
-(axis)h(descriptions.)67 b(If)39 b(secondary)d(axis)h(descriptions)g
-(are)g(also)227 3438 y(presen)n(t,)e(then)f(the)g(F)-7
-b(rameSet)33 b(ma)n(y)g(con)n(tain)f(additional)h(\(non-curren)n(t\))g
-(F)-7 b(rames)33 b(whic)n(h)g(represen)n(t)g(these.)227
-3537 y(Suc)n(h)23 b(a)f(read)g(is)h(alw)n(a)n(ys)e(destructiv)n(e)h
-(and)h(causes)f(the)h(FITS)g(header)f(cards)f(required)h(for)h(the)g
-(construction)f(of)227 3637 y(the)28 b(F)-7 b(rameSet)28
-b(to)f(b)r(e)h(remo)n(v)n(ed)f(from)g(the)h(FitsChan,)g(whic)n(h)g(is)f
-(then)h(left)h(p)r(ositioned)e(at)h(the)g Ft(")p Fj(end-of-\014le)p
-Ft(")p Fj(.)227 3737 y(A)d(subsequen)n(t)f(read)f(using)h(the)h(same)e
-(enco)r(ding)h(will)g(therefore)g(not)g(return)g(another)f(F)-7
-b(rameSet,)25 b(ev)n(en)e(if)i(the)227 3836 y(FitsChan)j(is)f(rew)n
-(ound.)227 3969 y(When)e(astW)-7 b(rite)24 b(is)g(used)h(to)f(store)f
-(a)h(F)-7 b(rameSet)24 b(using)g(FITS-W)n(CS)h(enco)r(ding,)f(an)g
-(attempt)h(is)g(\014rst)f(made)g(to)227 4068 y(simplify)k(the)g(F)-7
-b(rameSet)28 b(to)f(see)g(if)h(it)g(conforms)f(to)g(the)h(FITS-W)n(CS)g
-(mo)r(del.)37 b(If)28 b(this)f(simpli\014cation)h(pro)r(cess)227
-4168 y(succeeds)h(\(as)f(it)h(often)g(should,)g(as)f(the)i(mo)r(del)f
-(is)f(reasonably)f(\015exible\),)j(a)e(description)g(of)h(the)g(F)-7
-b(rameSet)29 b(is)227 4267 y(written)j(to)f(the)h(FitsChan)g(using)f
-(appropriate)f(FITS)h(header)g(cards.)47 b(The)32 b(base)f(F)-7
-b(rame)31 b(of)g(the)h(F)-7 b(rameSet)227 4367 y(is)30
-b(used)g(to)g(form)f(the)h(FITS-W)n(CS)g(pixel)g(co)r(ordinate)f
-(system)g(and)h(the)g(curren)n(t)f(F)-7 b(rame)30 b(giv)n(es)e(the)i
-(ph)n(ysical)227 4467 y(co)r(ordinate)i(system)h(to)g(b)r(e)g(describ)r
-(ed)g(b)n(y)g(the)g(FITS-W)n(CS)h(primary)d(axis)i(descriptions.)52
-b(An)n(y)33 b(additional)227 4566 y(F)-7 b(rames)26 b(in)h(the)g(F)-7
-b(rameSet)26 b(ma)n(y)g(b)r(e)h(used)f(to)h(construct)f(secondary)f
-(axis)g(descriptions,)h(where)g(appropriate.)227 4699
-y(A)e(successful)f(write)h(op)r(eration)e(will)i(o)n(v)n(er-write)d(an)
-n(y)i(existing)g(FITS-W)n(CS)g(enco)r(ded)h(data)f(in)h(the)f
-(FitsChan,)227 4798 y(but)37 b(will)g(not)g(a\013ect)g(other)f
-(\(non-FITS-W)n(CS\))g(header)g(cards.)63 b(If)37 b(a)f(destructiv)n(e)
-g(read)g(of)g(a)g(FITS-W)n(CS)227 4898 y(enco)r(ded)30
-b(Ob)5 b(ject)29 b(has)g(previously)f(o)r(ccurred,)h(then)h(an)g
-(attempt)g(will)f(b)r(e)h(made)g(to)f(store)g(the)h(FITS)f(header)227
-4997 y(cards)22 b(bac)n(k)h(in)g(their)g(original)f(lo)r(cations.)34
-b(Otherwise,)23 b(the)h(new)f(cards)f(will)h(b)r(e)h(inserted)f(follo)n
-(wing)f(an)n(y)g(other)227 5097 y(FITS-W)n(CS)30 b(related)g(header)f
-(cards)f(presen)n(t)i(or,)f(failing)h(that,)h(in)f(fron)n(t)f(of)h(the)
-g(curren)n(t)f(card)g(\(as)h(giv)n(en)f(b)n(y)227 5197
-y(the)f(Card)f(attribute\).)227 5329 y(If)32 b(an)f(attempt)g(to)g
-(simplify)h(a)e(F)-7 b(rameSet)31 b(to)g(conform)g(to)f(the)i(FITS-W)n
-(CS)f(mo)r(del)g(fails)g(\(or)g(if)g(the)h(Ob)5 b(ject)227
-5429 y(supplied)25 b(is)g(not)g(a)g(F)-7 b(rameSet\),)25
-b(then)g(no)g(data)f(will)h(b)r(e)h(written)f(to)f(the)i(FitsChan)f
-(and)f(astW)-7 b(rite)25 b(will)g(return)227 5528 y(zero.)36
-b(No)28 b(error)d(will)j(result.)-2 5693 y Fd(The)k(FITS-IRAF)h(Enco)s
-(ding)n(:)p eop end
-%%Page: 411 421
-TeXDict begin 411 420 bop 3643 52 a FF(411)227 351 y
-Fj(The)36 b(FITS-IRAF)g(enco)r(ding)f(can,)j(for)d(most)g(purp)r(oses,)
-i(b)r(e)f(considered)f(as)g(a)g(subset)h(of)f(the)h(FITS-W)n(CS)227
-451 y(enco)r(ding)24 b(\(ab)r(o)n(v)n(e\),)g(although)g(it)h(di\013ers)
-f(in)g(the)h(details)f(of)g(the)g(FITS)h(k)n(eyw)n(ords)d(used.)36
-b(It)24 b(is)h(used)f(in)g(exactly)227 551 y(the)k(same)f(w)n(a)n(y)g
-(and)g(has)g(the)h(same)f(restrictions,)g(but)h(with)g(the)g(addition)f
-(of)h(the)g(follo)n(wing:)340 804 y Fi(\017)45 b Fj(The)33
-b(only)g(celestial)f(co)r(ordinate)g(systems)g(that)h(ma)n(y)g(b)r(e)g
-(represen)n(ted)f(are)f(equatorial,)i(galactic)f(and)427
-904 y(ecliptic,)340 1032 y Fi(\017)45 b Fj(Sky)34 b(pro)5
-b(jections)32 b(can)i(b)r(e)g(represen)n(ted)e(only)i(if)g(an)n(y)f
-(asso)r(ciated)f(pro)5 b(jection)33 b(parameters)f(are)h(set)h(to)427
-1132 y(their)28 b(default)g(v)-5 b(alues.)340 1260 y
-Fi(\017)45 b Fj(Secondary)30 b(axis)h(descriptions)g(are)g(not)g(supp)r
-(orted,)i(so)d(when)i(writing)f(a)h(F)-7 b(rameSet)31
-b(to)g(a)g(FitsChan,)427 1359 y(only)c(information)g(from)h(the)g(base)
-f(and)g(curren)n(t)g(F)-7 b(rames)27 b(will)g(b)r(e)h(stored.)227
-1517 y(Note)36 b(that)g(this)f(enco)r(ding)h(is)f(pro)n(vided)f(mainly)
-i(as)f(an)g(in)n(terim)g(measure)g(to)g(pro)n(vide)f(a)h(more)g(stable)
-g(al-)227 1616 y(ternativ)n(e)e(to)g(the)g(FITS-W)n(CS)h(enco)r(ding)e
-(un)n(til)i(the)g(FITS)f(standard)f(for)h(enco)r(ding)g(W)n(CS)g
-(information)g(is)227 1716 y(\014nalised.)49 b(The)31
-b(name)h Ft(")p Fj(FITS-IRAF)p Ft(")f Fj(indicates)g(the)h(general)e(k)
-n(eyw)n(ord)g(con)n(v)n(en)n(tions)g(used)h(and)g(do)r(es)h(not)227
-1815 y(imply)h(that)g(this)g(enco)r(ding)f(will)g(necessarily)f(supp)r
-(ort)h(all)h(features)e(of)i(the)g(W)n(CS)f(sc)n(heme)g(used)h(b)n(y)f
-(IRAF)227 1915 y(soft)n(w)n(are.)40 b(Nev)n(ertheless,)29
-b(an)g(attempt)h(has)f(b)r(een)g(made)g(to)g(supp)r(ort)g(a)g(few)h
-(suc)n(h)f(features)f(where)h(they)h(are)227 2015 y(kno)n(wn)d(to)h(b)r
-(e)g(used)f(b)n(y)h(imp)r(ortan)n(t)f(sources)f(of)h(data.)227
-2137 y(When)g(writing)f(a)f(F)-7 b(rameSet)26 b(using)g(the)g
-(FITS-IRAF)h(enco)r(ding,)f(axis)f(rotations)g(are)g(sp)r(eci\014ed)i
-(b)n(y)e(a)h(matrix)227 2236 y(of)j(FITS)h(k)n(eyw)n(ords)d(of)i(the)h
-(form)f Ft(")p Fj(CDi)p Ft(_)p Fj(j)p Ft(")p Fj(,)g(where)g
-Ft(")p Fj(i)p Ft(")f Fj(and)h Ft(")p Fj(j)p Ft(")g Fj(are)f(single)h
-(digits.)42 b(The)29 b(alternativ)n(e)f(form)227 2336
-y Ft(")p Fj(CDiiijjj)p Ft(")p Fj(,)h(whic)n(h)e(is)h(also)e(in)i(use,)g
-(is)f(recognised)f(when)i(reading)e(an)i(Ob)5 b(ject,)27
-b(but)h(is)g(nev)n(er)f(written.)227 2458 y(In)36 b(addition,)h(the)f
-(exp)r(erimen)n(tal)f(IRAF)h Ft(")p Fj(ZPX)p Ft(")e Fj(and)h
-Ft(")p Fj(TNX)p Ft(")g Fj(sky)g(pro)5 b(jections)34 b(will)i(b)r(e)f
-(accepted)g(when)227 2558 y(reading,)25 b(but)i(will)e(nev)n(er)g(b)r
-(e)h(written)g(\(the)h(corresp)r(onding)c(FITS)j Ft(")p
-Fj(ZPN)p Ft(")f Fj(or)g Ft(")p Fj(distorted)g(T)-7 b(AN)p
-Ft(")26 b Fj(pro)5 b(jection)227 2658 y(b)r(eing)29 b(used)g
-(instead\).)42 b(Ho)n(w)n(ev)n(er,)27 b(there)i(are)f(restrictions)f
-(on)i(the)h(use)e(of)h(these)g(exp)r(erimen)n(tal)g(pro)5
-b(jections.)227 2757 y(F)-7 b(or)34 b Ft(")p Fj(ZPX)p
-Ft(")p Fj(,)g(longitude)f(and)h(latitude)g(correction)e(surfaces)h
-(\(app)r(earing)g(as)g Ft(")p Fj(lngcor)p Ft(")f Fj(or)h
-Ft(")p Fj(latcor)p Ft(")f Fj(terms)227 2857 y(in)k(the)g(IRAF-sp)r
-(eci\014c)f Ft(")p Fj(W)-9 b(A)i(T)p Ft(")35 b Fj(k)n(eyw)n(ords\))f
-(are)g(not)i(supp)r(orted.)60 b(F)-7 b(or)34 b Ft(")p
-Fj(TNX)p Ft(")h Fj(pro)5 b(jections,)36 b(only)f(cubic)227
-2956 y(surfaces)g(enco)r(ded)h(as)f(simple)h(p)r(olynomials)f(with)h
-Ft(")p Fj(half)g(cross-terms)p Ft(")d Fj(are)i(supp)r(orted.)61
-b(If)37 b(an)e(un-usable)227 3056 y Ft(")p Fj(TNX)p Ft(")23
-b Fj(or)f Ft(")p Fj(ZPX)p Ft(")g Fj(pro)5 b(jection)22
-b(is)h(encoun)n(tered)f(while)h(reading)f(from)g(a)h(FitsChan,)h(a)f
-(simpler)f(form)h(of)g(T)-7 b(AN)227 3156 y(or)22 b(ZPN)g(pro)5
-b(jection)21 b(is)i(used)f(whic)n(h)h(ignores)e(the)i(unsupp)r(orted)f
-(features)g(and)g(ma)n(y)g(therefore)g(b)r(e)h(inaccurate.)227
-3255 y(If)j(this)f(happ)r(ens,)g(a)g(w)n(arning)f(message)f(is)i(added)
-g(to)g(the)g(con)n(ten)n(ts)f(of)h(the)g(FitsChan)g(as)g(a)f(set)h(of)g
-(cards)f(using)227 3355 y(the)k(k)n(eyw)n(ord)e Ft(")p
-Fj(ASTW)-9 b(ARN)p Ft(")p Fj(.)227 3477 y(Y)i(ou)32 b(should)f(not)g
-(normally)g(attempt)h(to)f(mix)h(the)g(foreign)e(FITS)i(enco)r(dings)f
-(within)h(the)g(same)e(FitsChan,)227 3577 y(since)e(there)f(is)h(a)f
-(risk)g(that)g(k)n(eyw)n(ord)f(clashes)h(ma)n(y)g(o)r(ccur.)-2
-3721 y Fd(The)32 b(FITS-PC)h(Enco)s(ding)n(:)227 3867
-y Fj(The)38 b(FITS-PC)e(enco)r(ding)h(can,)j(for)c(most)h(purp)r(oses,)
-i(b)r(e)f(considered)e(as)h(equiv)-5 b(alen)n(t)37 b(to)g(the)g(FITS-W)
-n(CS)227 3967 y(enco)r(ding)24 b(\(ab)r(o)n(v)n(e\),)g(although)g(it)h
-(di\013ers)f(in)g(the)h(details)f(of)g(the)g(FITS)h(k)n(eyw)n(ords)d
-(used.)36 b(It)24 b(is)h(used)f(in)g(exactly)227 4067
-y(the)k(same)f(w)n(a)n(y)g(and)g(has)g(the)h(same)f(restrictions.)-2
-4211 y Fd(The)32 b(FITS-AIPS)i(Enco)s(ding)n(:)227 4358
-y Fj(The)e(FITS-AIPS)f(enco)r(ding)g(can,)h(for)f(most)g(purp)r(oses,)h
-(b)r(e)g(considered)e(as)h(equiv)-5 b(alen)n(t)31 b(to)h(the)f(FITS-W)n
-(CS)227 4457 y(enco)r(ding)24 b(\(ab)r(o)n(v)n(e\),)g(although)g(it)h
-(di\013ers)f(in)g(the)h(details)f(of)g(the)g(FITS)h(k)n(eyw)n(ords)d
-(used.)36 b(It)24 b(is)h(used)f(in)g(exactly)227 4557
-y(the)k(same)f(w)n(a)n(y)g(and)g(has)g(the)h(same)f(restrictions,)g
-(but)h(with)g(the)g(addition)f(of)h(the)g(follo)n(wing:)340
-4811 y Fi(\017)45 b Fj(The)33 b(only)g(celestial)f(co)r(ordinate)g
-(systems)g(that)h(ma)n(y)g(b)r(e)g(represen)n(ted)f(are)f(equatorial,)i
-(galactic)f(and)427 4910 y(ecliptic,)340 5038 y Fi(\017)45
-b Fj(Sp)r(ectral)33 b(axes)g(can)g(only)g(b)r(e)h(represen)n(ted)e(if)i
-(they)f(represen)n(t)f(frequency)-7 b(,)35 b(radio)d(v)n(elo)r(cit)n(y)
-h(or)f(optical)427 5138 y(v)n(elo)r(cit)n(y)-7 b(,)36
-b(and)f(are)e(linearly)h(sampled)h(in)g(frequency)-7
-b(.)58 b(In)35 b(addition,)h(the)g(standard)d(of)i(rest)f(m)n(ust)h(b)r
-(e)427 5238 y(LSRK,)28 b(LSRD,)g(barycen)n(tric)e(or)h(geo)r(cen)n
-(tric.)340 5366 y Fi(\017)45 b Fj(Sky)34 b(pro)5 b(jections)32
-b(can)i(b)r(e)g(represen)n(ted)e(only)i(if)g(an)n(y)f(asso)r(ciated)f
-(pro)5 b(jection)33 b(parameters)f(are)h(set)h(to)427
-5465 y(their)28 b(default)g(v)-5 b(alues.)340 5593 y
-Fi(\017)45 b Fj(The)25 b(AIT,)g(SFL)g(and)f(MER)g(pro)5
-b(jections)23 b(can)i(only)f(b)r(e)h(written)f(if)h(the)g(CR)-9
-b(V)g(AL)25 b(k)n(eyw)n(ords)d(are)i(zero)f(for)427 5693
-y(b)r(oth)28 b(longitude)g(and)f(latitude)h(axes.)p eop
-end
-%%Page: 412 422
-TeXDict begin 412 421 bop 0 52 a FF(412)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)340 351
-y Fi(\017)45 b Fj(Secondary)30 b(axis)h(descriptions)g(are)g(not)g
-(supp)r(orted,)i(so)d(when)i(writing)f(a)h(F)-7 b(rameSet)31
-b(to)g(a)g(FitsChan,)427 451 y(only)c(information)g(from)h(the)g(base)f
-(and)g(curren)n(t)g(F)-7 b(rames)27 b(will)g(b)r(e)h(stored.)340
-585 y Fi(\017)45 b Fj(If)25 b(there)f(are)f(more)g(than)i(2)f(axes)f
-(in)h(the)h(base)e(and)h(curren)n(t)g(F)-7 b(rames,)24
-b(an)n(y)f(rotation)g(m)n(ust)i(b)r(e)f(restricted)427
-684 y(to)k(the)g(celestial)f(plane,)g(and)h(m)n(ust)f(in)n(v)n(olv)n(e)
-f(no)i(shear.)-2 848 y Fd(The)k(FITS-AIPS)p Fj(++)h Fd(Enco)s(ding)n(:)
-227 994 y Fj(The)d(FITS-AIPS++)e(enco)r(ding)h(is)g(based)f(on)h(the)h
-(FITS-AIPS)f(enco)r(ding,)g(but)h(includes)f(some)g(features)g(of)227
-1094 y(the)23 b(FITS-IRAF)g(and)f(FITS-PC)g(enco)r(dings.)35
-b(Sp)r(eci\014cally)-7 b(,)23 b(an)n(y)f(celestial)g(pro)5
-b(jections)21 b(supp)r(orted)h(b)n(y)h(FITS-)227 1193
-y(PC)h(ma)n(y)f(b)r(e)h(used,)h(including)f(those)g(whic)n(h)f(require)
-g(parameterisation,)g(and)h(the)g(axis)f(rotation)g(and)h(scaling)227
-1293 y(ma)n(y)31 b(b)r(e)i(sp)r(eci\014ed)f(using)f(CDi)p
-Ft(_)p Fj(j)i(k)n(eyw)n(ords.)47 b(When)33 b(writing)e(a)h(FITS)g
-(header,)g(rotation)f(will)h(b)r(e)g(sp)r(eci\014ed)227
-1392 y(using)c(CR)n(OT)-7 b(A/CDEL)g(T)26 b(k)n(eyw)n(ords)g(if)i(p)r
-(ossible,)f(otherwise)g(CDi)p Ft(_)p Fj(j)h(k)n(eyw)n(ords)d(will)j(b)r
-(e)g(used)g(instead.)-2 1544 y Fd(The)k(FITS-CLASS)h(Enco)s(ding)n(:)
-227 1690 y Fj(The)24 b(FITS-CLASS)g(enco)r(ding)f(uses)h(the)g(con)n(v)
-n(en)n(tions)e(of)i(the)g(CLASS)g(pro)5 b(ject.)35 b(These)23
-b(are)g(describ)r(ed)g(in)h(the)227 1789 y(section)j
-Ft(")p Fj(Dev)n(elop)r(er)g(Man)n(ual)p Ft(")p Fj(/)p
-Ft(")p Fj(CLASS)f(FITS)i(F)-7 b(ormat)p Ft(")26 b Fj(con)n(tained)h(in)
-h(the)g(CLASS)g(do)r(cumen)n(tation)f(at:)227 1915 y(h)n
-(ttp://www.iram.fr/IRAMFR/GILD)n(AS/do)r(c/h)n(tml/class-h)n
-(tml/class.h)n(tml.)227 2040 y(This)h(enco)r(ding)f(is)h(similar)e(to)i
-(FITS-AIPS)f(with)h(the)g(follo)n(wing)f(restrictions:)340
-2304 y Fi(\017)45 b Fj(When)23 b(a)e(Sp)r(ecF)-7 b(rame)22
-b(is)f(created)g(b)n(y)h(reading)f(a)g(FITS-CLASS)h(header,)g(the)h
-(attributes)e(describing)g(the)427 2403 y(observ)n(er's)f(p)r(osition)i
-(\(ObsLat,)h(ObsLon)e(and)h(ObsAlt\))h(are)e(left)i(unset)f(b)r(ecause)
-g(the)g(CLASS)h(enco)r(ding)427 2503 y(do)r(es)32 b(not)h(sp)r(ecify)g
-(these)f(v)-5 b(alues.)52 b(Con)n(v)n(ersions)30 b(to)i(or)g(from)g
-(the)h(top)r(o)r(cen)n(tric)f(standard)g(of)g(rest)g(will)427
-2603 y(therefore)21 b(b)r(e)i(inaccurate)e(\(t)n(ypically)g(b)n(y)h(up)
-g(to)g(ab)r(out)g(0.5)f(km/s\))h(unless)f(suitable)h(v)-5
-b(alues)22 b(are)f(assigned)427 2702 y(to)28 b(these)f(attributes)h
-(after)f(the)h(F)-7 b(rameSet)27 b(has)h(b)r(een)g(created.)340
-2836 y Fi(\017)45 b Fj(When)24 b(writing)e(a)h(F)-7 b(rameSet)23
-b(to)f(a)h(FITS-CLASS)g(header,)g(the)h(curren)n(t)e(F)-7
-b(rame)22 b(in)h(the)h(F)-7 b(rameSet)22 b(m)n(ust)427
-2936 y(ha)n(v)n(e)f(at)g(least)h(3)f(W)n(CS)h(axes,)g(of)g(whic)n(h)f
-(one)h(m)n(ust)g(b)r(e)g(a)f(linear)g(sp)r(ectral)g(axis.)34
-b(The)22 b(sp)r(ectral)f(axis)g(in)h(the)427 3035 y(created)29
-b(header)g(will)h(alw)n(a)n(ys)e(describ)r(e)h(frequency)-7
-b(.)43 b(If)30 b(the)g(sp)r(ectral)f(axis)g(in)h(the)g(supplied)g(F)-7
-b(rameSet)427 3135 y(refers)27 b(to)g(some)g(other)g(system)h(\(e.g.)36
-b(radio)27 b(v)n(elo)r(cit)n(y)-7 b(,)27 b(etc\),)h(then)g(it)g(will)g
-(b)r(e)g(con)n(v)n(erted)e(to)h(frequency)-7 b(.)340
-3268 y Fi(\017)45 b Fj(There)23 b(m)n(ust)g(b)r(e)g(a)f(pair)g(of)h
-(celestial)f(axes)g(-)h(either)g(\(RA,Dec\))h(or)e(\(GLON,GLA)-7
-b(T\).)23 b(RA)h(and)e(Dec)h(m)n(ust)427 3368 y(b)r(e)28
-b(either)g(FK4/B1950)c(or)j(FK5/J2000.)340 3502 y Fi(\017)45
-b Fj(A)35 b(limited)g(range)e(of)h(pro)5 b(jection)34
-b(co)r(des)g(\(T)-7 b(AN,)35 b(AR)n(C,)f(STG,)h(AIT,)g(SFL,)f(SIN\))h
-(can)f(b)r(e)h(used.)57 b(F)-7 b(or)427 3601 y(AIT)30
-b(and)f(SFL,)g(the)h(reference)e(p)r(oin)n(t)i(m)n(ust)f(b)r(e)h(at)f
-(the)g(origin)f(of)h(longitude)g(and)g(latitude.)43 b(F)-7
-b(or)28 b(SIN,)427 3701 y(the)g(asso)r(ciated)f(pro)5
-b(jection)26 b(parameters)g(m)n(ust)i(b)r(oth)g(b)r(e)g(zero.)340
-3835 y Fi(\017)45 b Fj(No)28 b(rotation)f(of)i(the)f(celestial)g(axes)f
-(is)h(allo)n(w)n(ed,)g(unless)g(the)g(spatial)g(axes)f(are)g
-(degenerate)g(\(i.e.)39 b(co)n(v)n(er)427 3934 y(only)27
-b(a)h(single)f(pixel\).)340 4068 y Fi(\017)45 b Fj(The)34
-b(frequency)g(axis)f(in)h(the)h(created)e(header)g(will)h(alw)n(a)n(ys)
-e(describ)r(e)i(frequency)g(in)g(the)g(source)f(rest)427
-4168 y(frame.)53 b(If)34 b(the)f(supplied)h(F)-7 b(rameSet)33
-b(uses)f(some)h(other)f(standard)h(of)g(rest)f(then)i(suitable)f(con)n
-(v)n(ersion)427 4267 y(will)28 b(b)r(e)g(applied.)340
-4401 y Fi(\017)45 b Fj(The)35 b(source)e(v)n(elo)r(cit)n(y)g(m)n(ust)i
-(b)r(e)f(de\014ned.)58 b(In)35 b(other)e(w)n(ords,)i(the)g(Sp)r(ecF)-7
-b(rame)34 b(attributes)g(SourceV)-7 b(el)427 4501 y(and)28
-b(SourceVRF)f(m)n(ust)h(ha)n(v)n(e)e(b)r(een)i(assigned)f(v)-5
-b(alues.)340 4634 y Fi(\017)45 b Fj(The)40 b(frequency)g(axis)f(in)i(a)
-e(FITS-CLASS)i(header)e(do)r(es)h(not)g(represen)n(t)f(absolute)g
-(frequency)-7 b(,)43 b(but)427 4734 y(instead)28 b(represen)n(ts)e
-(o\013sets)h(from)g(the)h(rest)f(frequency)h(in)f(the)h(standard)f(of)h
-(rest)f(of)g(the)h(source.)227 4898 y(When)23 b(writing)f(a)g(F)-7
-b(rameSet)22 b(out)g(using)g(FITS-CLASS)h(enco)r(ding,)g(the)f(curren)n
-(t)g(F)-7 b(rame)22 b(ma)n(y)f(b)r(e)i(temp)r(orarily)227
-4997 y(mo)r(di\014ed)31 b(if)f(this)g(will)g(allo)n(w)f(the)h(header)f
-(to)h(b)r(e)g(pro)r(duced.)44 b(If)30 b(this)g(is)g(done,)g(the)h(asso)
-r(ciated)d(pixel-)p Fl(>)p Fj(W)n(CS)227 5097 y(Mapping)34
-b(will)g(also)f(b)r(e)i(mo)r(di\014ed)f(to)g(tak)n(e)g(accoun)n(t)f(of)
-h(the)h(c)n(hanges)d(to)i(the)h(F)-7 b(rame.)56 b(The)34
-b(mo)r(di\014cations)227 5196 y(p)r(erformed)19 b(include)h
-(re-ordering)d(axes)h(\(W)n(CS)i(axes,)g(not)f(pixel)h(axes\),)g(c)n
-(hanging)e(sp)r(ectral)h(co)r(ordinate)f(system)227 5296
-y(and)24 b(standard)f(of)h(rest,)g(c)n(hanging)f(the)h(celestial)f(co)r
-(ordinate)g(system)h(and)f(reference)g(equino)n(x,)h(and)g(c)n(hanging)
-227 5396 y(axis)j(units.)-2 5547 y Fd(The)32 b(NA)-8
-b(TIVE)33 b(Enco)s(ding)n(:)227 5693 y Fj(The)27 b(NA)-7
-b(TIVE)26 b(enco)r(ding)h(ma)n(y)e(b)r(e)i(used)f(to)h(store)e(a)h
-(description)g(of)g(an)n(y)g(class)f(of)i(AST)f(Ob)5
-b(ject)27 b(in)f(the)h(form)p eop end
-%%Page: 413 423
-TeXDict begin 413 422 bop 3643 52 a FF(413)227 351 y
-Fj(of)29 b(FITS)g(header)f(cards,)g(and)h(\(for)g(most)f(practical)g
-(purp)r(oses\))g(an)n(y)g(n)n(um)n(b)r(er)h(of)g(these)g(Ob)5
-b(ject)28 b(descriptions)227 451 y(ma)n(y)i(b)r(e)g(stored)g(within)h
-(a)f(single)f(set)i(of)f(FITS)g(cards.)44 b(If)31 b(m)n(ultiple)g(Ob)5
-b(ject)30 b(descriptions)f(are)g(stored,)h(they)227 551
-y(are)35 b(written)g(and)g(read)g(sequen)n(tially)-7
-b(.)59 b(The)35 b(NA)-7 b(TIVE)36 b(enco)r(ding)f(mak)n(es)f(use)h(of)h
-(unique)f(FITS)h(k)n(eyw)n(ords)227 650 y(whic)n(h)29
-b(are)e(designed)h(not)g(to)h(clash)e(with)i(k)n(eyw)n(ords)e(that)h
-(ha)n(v)n(e)f(already)g(b)r(een)i(used)g(for)e(other)h(purp)r(oses)g
-(\(if)227 750 y(a)f(p)r(oten)n(tial)h(clash)f(is)g(detected,)i(an)e
-(alternativ)n(e)f(k)n(eyw)n(ord)g(is)h(constructed)h(to)f(a)n(v)n(oid)f
-(the)i(clash\).)227 877 y(When)35 b(reading)e(a)h(NA)-7
-b(TIVE)35 b(enco)r(ded)g(ob)5 b(ject)34 b(from)g(a)g(FitsChan)g
-(\(using)h(astRead\),)g(FITS)g(header)f(cards)227 977
-y(are)26 b(read,)h(starting)f(at)h(the)g(curren)n(t)f(card)g(\(as)h
-(determined)g(b)n(y)g(the)g(Card)f(attribute\),)i(un)n(til)f(the)h
-(start)e(of)h(the)227 1076 y(next)e(Ob)5 b(ject)25 b(description)f(is)g
-(found.)37 b(This)24 b(description)g(is)h(then)g(read)f(and)h(con)n(v)n
-(erted)e(in)n(to)h(an)h(AST)g(Ob)5 b(ject,)227 1176 y(for)28
-b(whic)n(h)h(a)f(p)r(oin)n(ter)g(is)h(returned.)39 b(Suc)n(h)28
-b(a)h(read)e(is)i(alw)n(a)n(ys)d(destructiv)n(e)i(and)h(causes)e(all)i
-(the)g(FITS)f(header)227 1276 y(cards)c(in)n(v)n(olv)n(ed)g(in)h(the)g
-(Ob)5 b(ject)25 b(description)g(to)g(b)r(e)g(remo)n(v)n(ed)e(from)i
-(the)h(FitsChan,)f(whic)n(h)g(is)g(left)h(p)r(ositioned)227
-1375 y(at)i(the)g(follo)n(wing)e(card.)227 1503 y(The)k(Ob)5
-b(ject)29 b(returned)g(ma)n(y)f(b)r(e)i(of)f(an)n(y)g(class,)f(dep)r
-(ending)i(on)f(the)h(description)e(that)i(w)n(as)e(read,)h(and)g(other)
-227 1602 y(AST)c(routines)e(ma)n(y)h(b)r(e)g(used)g(to)g(v)-5
-b(alidate)24 b(it)g(\(for)g(example,)g(b)n(y)g(examining)g(its)g(Class)
-f(or)g(ID)i(attribute)f(using)227 1702 y(astGetC\).)k(If)f(further)g
-(NA)-7 b(TIVE)27 b(enco)r(ded)g(Ob)5 b(ject)27 b(descriptions)g(exist)f
-(in)i(the)f(FitsChan,)h(subsequen)n(t)e(calls)227 1801
-y(to)g(astRead)g(will)g(return)g(the)g(Ob)5 b(jects)26
-b(they)g(describ)r(e)g(in)g(sequence)g(\(and)g(destro)n(y)f(their)h
-(descriptions\))f(un)n(til)227 1901 y(no)j(more)e(remain)h(b)r(et)n(w)n
-(een)h(the)g(curren)n(t)f(card)f(and)i(the)g Ft(")p Fj(end-of-\014le)p
-Ft(")p Fj(.)227 2028 y(When)33 b(astW)-7 b(rite)33 b(is)f(used)h(to)f
-(write)g(an)g(Ob)5 b(ject)33 b(using)f(NA)-7 b(TIVE)33
-b(enco)r(ding,)g(a)f(description)g(of)h(the)g(Ob)5 b(ject)227
-2128 y(is)32 b(inserted)f(immediately)h(b)r(efore)f(the)h(curren)n(t)f
-(card)f(\(as)i(determined)f(b)n(y)h(the)g(Card)f(attribute\).)49
-b(Multiple)227 2228 y(Ob)5 b(ject)29 b(descriptions)g(ma)n(y)f(b)r(e)i
-(written)f(in)h(this)f(w)n(a)n(y)f(and)h(are)g(stored)f(separately)g
-(\(and)h(sequen)n(tially)f(if)i(the)227 2327 y(Card)f(attribute)g(is)g
-(not)g(mo)r(di\014ed)h(b)r(et)n(w)n(een)f(the)g(writes\).)42
-b(A)29 b(write)g(op)r(eration)f(using)h(the)g(NA)-7 b(TIVE)30
-b(enco)r(d-)227 2427 y(ing)35 b(do)r(es)f(not)g(o)n(v)n(er-write)e
-(previously)i(written)g(Ob)5 b(ject)35 b(descriptions.)57
-b(Note,)36 b(ho)n(w)n(ev)n(er,)e(that)h(subsequen)n(t)227
-2527 y(b)r(eha)n(viour)29 b(is)h(unde\014ned)g(if)g(an)g(Ob)5
-b(ject)29 b(description)h(is)f(written)h(inside)g(a)g
-(previously-written)e(description,)227 2626 y(so)f(this)h(should)f(b)r
-(e)h(a)n(v)n(oided.)227 2753 y(When)21 b(an)g(Ob)5 b(ject)20
-b(is)h(written)g(to)f(a)g(FitsChan)h(using)g(NA)-7 b(TIVE)21
-b(enco)r(ding,)g(astW)-7 b(rite)21 b(should)f(\(barring)g(errors\))227
-2853 y(alw)n(a)n(ys)26 b(transfer)h(data)g(and)g(return)g(a)g(v)-5
-b(alue)28 b(of)f(1.)p 0 3058 3780 12 v 0 3190 a Fz(Ep)t(o)t(c)l(h)981
-b Fe(Ep)s(o)s(c)m(h)39 b(of)f(observ)-7 b(ation)980 b
-Fz(Ep)t(o)t(c)l(h)0 3384 y Fd(Description:)44 b Fj(This)29
-b(attribute)g(is)f(used)h(to)f(qualify)h(the)g(co)r(ordinate)e(systems)
-h(describ)r(ed)g(b)n(y)h(a)f(F)-7 b(rame,)28 b(b)n(y)g(giving)227
-3484 y(the)g(momen)n(t)f(in)h(time)f(when)h(the)g(co)r(ordinates)d(are)
-i(kno)n(wn)f(to)h(b)r(e)h(correct.)35 b(Often,)28 b(this)g(will)f(b)r
-(e)h(the)f(date)h(of)227 3583 y(observ)-5 b(ation,)26
-b(and)h(is)g(imp)r(ortan)n(t)f(in)h(cases)f(where)g(co)r(ordinates)g
-(systems)g(mo)n(v)n(e)g(with)i(resp)r(ect)e(to)h(eac)n(h)f(other)227
-3683 y(o)n(v)n(er)g(the)i(course)e(of)i(time.)227 3810
-y(The)23 b(Ep)r(o)r(c)n(h)f(attribute)h(is)f(stored)g(as)g(a)g(Mo)r
-(di\014ed)h(Julian)g(Date,)g(but)h(when)f(setting)f(its)h(v)-5
-b(alue)22 b(it)h(ma)n(y)f(b)r(e)h(giv)n(en)227 3910 y(in)32
-b(a)e(v)-5 b(ariet)n(y)30 b(of)h(formats.)46 b(See)31
-b(the)h Ft(")p Fj(Input)f(F)-7 b(ormats)p Ft(")30 b Fj(section)g(\(b)r
-(elo)n(w\))h(for)g(details.)47 b(Strictly)-7 b(,)32 b(the)f(Ep)r(o)r(c)
-n(h)227 4009 y(v)-5 b(alue)25 b(should)g(b)r(e)g(supplied)g(in)g(the)g
-(TDB)g(timescale,)g(but)h(for)e(some)g(purp)r(oses)g(\(for)h(instance,)
-g(for)f(con)n(v)n(erting)227 4109 y(sky)36 b(p)r(ositions)f(b)r(et)n(w)
-n(een)h(di\013eren)n(t)g(t)n(yp)r(es)f(of)h(equatorial)e(system\))i
-(the)h(timescale)e(is)h(not)g(signi\014can)n(t,)h(and)227
-4209 y(UTC)28 b(ma)n(y)f(b)r(e)h(used.)0 4364 y Fd(T)m(yp)s(e:)227
-4463 y Fj(Floating)f(p)r(oin)n(t.)0 4618 y Fd(Class)k(Applicabilit)m
-(y:)259 4760 y(F)-8 b(rame)427 4860 y Fj(All)29 b(F)-7
-b(rames)27 b(ha)n(v)n(e)f(this)j(attribute.)38 b(The)27
-b(basic)h(F)-7 b(rame)27 b(class)g(pro)n(vides)g(a)g(default)h(of)g
-(J2000.0)d(\(Julian\))427 4960 y(but)31 b(mak)n(es)f(no)g(use)g(of)g
-(the)h(Ep)r(o)r(c)n(h)f(v)-5 b(alue.)45 b(This)30 b(is)g(b)r(ecause)g
-(the)h(F)-7 b(rame)30 b(class)f(do)r(es)h(not)h(distinguish)427
-5059 y(b)r(et)n(w)n(een)d(di\013eren)n(t)g(Cartesian)e(co)r(ordinate)g
-(systems)h(\(see)h(the)g(System)g(attribute\).)259 5195
-y Fd(CmpF)-8 b(rame)427 5295 y Fj(The)32 b(default)h(Ep)r(o)r(c)n(h)e
-(v)-5 b(alue)32 b(for)f(a)h(CmpF)-7 b(rame)31 b(is)h(selected)g(as)f
-(follo)n(ws;)i(if)f(the)h(Ep)r(o)r(c)n(h)e(attribute)h(has)427
-5394 y(b)r(een)26 b(set)g(in)g(the)g(\014rst)f(comp)r(onen)n(t)g(F)-7
-b(rame)26 b(then)g(the)g(Ep)r(o)r(c)n(h)f(v)-5 b(alue)25
-b(from)g(the)h(\014rst)g(comp)r(onen)n(t)f(F)-7 b(rame)427
-5494 y(is)36 b(used)f(as)g(the)g(default)h(for)f(the)h(CmpF)-7
-b(rame.)59 b(Otherwise,)37 b(if)f(the)g(Ep)r(o)r(c)n(h)e(attribute)i
-(has)f(b)r(een)h(set)427 5593 y(in)29 b(the)h(second)e(comp)r(onen)n(t)
-h(F)-7 b(rame)28 b(then)i(the)f(Ep)r(o)r(c)n(h)g(v)-5
-b(alue)28 b(from)h(the)g(second)g(comp)r(onen)n(t)f(F)-7
-b(rame)29 b(is)427 5693 y(used)35 b(as)f(the)h(default)g(for)f(the)h
-(CmpF)-7 b(rame.)57 b(Otherwise,)36 b(the)f(default)g(Ep)r(o)r(c)n(h)f
-(v)-5 b(alue)35 b(from)f(the)h(\014rst)p eop end
-%%Page: 414 424
-TeXDict begin 414 423 bop 0 52 a FF(414)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)427 351
-y Fj(comp)r(onen)n(t)d(F)-7 b(rame)28 b(is)h(used)f(as)g(the)h(default)
-f(for)g(the)h(CmpF)-7 b(rame.)39 b(When)29 b(the)g(Ep)r(o)r(c)n(h)f
-(attribute)h(of)f(a)427 451 y(CmpF)-7 b(rame)28 b(is)f(set)h(or)e
-(cleared,)h(it)h(is)g(also)e(set)i(or)e(cleared)h(in)h(the)g(t)n(w)n(o)
-f(comp)r(onen)n(t)g(F)-7 b(rames.)259 591 y Fd(F)f(rameSet)427
-691 y Fj(The)29 b(Ep)r(o)r(c)n(h)f(attribute)g(of)g(a)g(F)-7
-b(rameSet)28 b(is)h(the)f(same)g(as)g(that)g(of)h(its)f(curren)n(t)g(F)
--7 b(rame)27 b(\(as)h(sp)r(eci\014ed)h(b)n(y)427 791
-y(the)f(Curren)n(t)f(attribute\).)259 931 y Fd(SkyF)-8
-b(rame)427 1031 y Fj(The)35 b(co)r(ordinates)e(of)i(sources)e(within)j
-(a)e(SkyF)-7 b(rame)34 b(can)g(c)n(hanged)g(with)h(time)h(for)e(v)-5
-b(arious)33 b(reasons,)427 1130 y(including:)58 b(\(i\))39
-b(c)n(hanging)d(ab)r(erration)h(of)g(ligh)n(t)h(caused)f(b)n(y)h(the)g
-(observ)n(er's)e(v)n(elo)r(cit)n(y)h(\(e.g.)68 b(due)38
-b(to)427 1230 y(the)d(Earth's)e(motion)h(around)f(the)h(Sun\),)j
-(\(ii\))e(c)n(hanging)e(gra)n(vitational)e(de\015ection)j(b)n(y)g(the)h
-(Sun)f(due)427 1330 y(to)40 b(c)n(hanges)e(in)i(the)h(observ)n(er's)c
-(p)r(osition)j(with)g(time,)j(\(iii\))e(\014ctitious)f(motion)f(due)h
-(to)g(rotation)f(of)427 1429 y(non-inertial)c(co)r(ordinate)f(systems)g
-(\(e.g.)60 b(the)36 b(old)f(FK4)f(system\),)k(and)d(\(iv\))h(prop)r(er)
-e(motion)h(of)g(the)427 1529 y(source)25 b(itself)h(\(although)g(this)g
-(last)g(e\013ect)g(is)g(not)g(handled)g(b)n(y)f(the)i(SkyF)-7
-b(rame)25 b(class)g(b)r(ecause)g(it)i(a\013ects)427 1629
-y(individual)h(sources)e(rather)h(than)g(the)h(co)r(ordinate)f(system)g
-(as)g(a)g(whole\).)427 1749 y(The)f(default)g(Ep)r(o)r(c)n(h)f(v)-5
-b(alue)26 b(in)g(a)f(SkyF)-7 b(rame)25 b(is)g(B1950.0)e(\(Besselian\))i
-(for)g(the)h(old)g(FK4-based)e(co)r(ordi-)427 1848 y(nate)k(systems)f
-(\(see)g(the)h(System)g(attribute\))g(and)g(J2000.0)d(\(Julian\))i(for)
-g(all)h(others.)427 1968 y(Care)35 b(m)n(ust)g(b)r(e)h(tak)n(en)f(to)g
-(distinguish)g(the)h(Ep)r(o)r(c)n(h)f(v)-5 b(alue,)37
-b(whic)n(h)e(relates)g(to)g(motion)g(\(or)g(apparen)n(t)427
-2068 y(motion\))h(of)g(the)g(source,)h(from)e(the)h(sup)r(er\014cially)
-f(similar)g(Equino)n(x)g(v)-5 b(alue.)61 b(The)36 b(latter)f(is)h(used)
-g(to)427 2168 y(qualify)c(a)f(co)r(ordinate)g(system)h(whic)n(h)f(is)h
-(itself)g(in)g(motion)g(in)g(a)f(\(notionally\))h(predictable)f(w)n(a)n
-(y)g(as)g(a)427 2267 y(result)d(of)f(b)r(eing)h(referred)e(to)i(a)f
-(slo)n(wly)f(mo)n(ving)h(reference)g(plane)g(\(e.g.)37
-b(the)28 b(equator\).)427 2387 y(See)d(the)h(description)f(of)g(the)g
-(System)h(attribute)f(for)g(details)g(of)g(whic)n(h)g(qualifying)g
-(attributes)g(apply)g(to)427 2487 y(eac)n(h)i(celestial)g(co)r
-(ordinate)g(system.)259 2628 y Fd(TimeF)-8 b(rame)427
-2727 y Fj(A)30 b(TimeF)-7 b(rame)29 b(describ)r(es)g(a)g(general)f
-(time)i(axis)f(and)g(so)g(cannot)g(b)r(e)h(completely)g(c)n
-(haracterised)d(b)n(y)i(a)427 2827 y(single)22 b(Ep)r(o)r(c)n(h)f(v)-5
-b(alue.)35 b(F)-7 b(or)21 b(this)h(reason)e(the)i(TimeF)-7
-b(rame)22 b(class)e(mak)n(es)h(no)h(use)f(of)h(the)g(Ep)r(o)r(c)n(h)f
-(attribute.)427 2926 y(Ho)n(w)n(ev)n(er,)31 b(user)g(co)r(de)g(can)g
-(still)h(mak)n(e)f(use)g(of)h(the)g(attribute)f(if)h(necessary)e(to)h
-(represen)n(t)g(a)g Ft(")p Fj(t)n(ypical)p Ft(")427 3026
-y Fj(time)25 b(spanned)e(b)n(y)h(the)h(TimeF)-7 b(rame.)35
-b(The)24 b(default)g(Ep)r(o)r(c)n(h)g(v)-5 b(alue)24
-b(for)f(a)h(TimeF)-7 b(rame)23 b(will)i(b)r(e)f(the)g(TDB)427
-3126 y(equiv)-5 b(alen)n(t)35 b(of)h(the)f(curren)n(t)g(v)-5
-b(alue)35 b(of)g(the)h(TimeF)-7 b(rame's)35 b(TimeOrigin)f(attribute.)
-60 b(If)36 b(no)f(v)-5 b(alue)35 b(has)427 3225 y(b)r(een)28
-b(set)g(for)f(TimeOrigin,)g(then)h(the)g(default)g(Ep)r(o)r(c)n(h)f(v)
--5 b(alue)27 b(is)h(J2000.0.)-2 3403 y Fd(Input)33 b(F)-8
-b(ormats)n(:)227 3549 y Fj(The)29 b(formats)f(accepted)g(when)g
-(setting)h(an)f(Ep)r(o)r(c)n(h)g(v)-5 b(alue)29 b(are)e(listed)i(b)r
-(elo)n(w.)39 b(They)29 b(are)e(all)h(case-insensitiv)n(e)227
-3648 y(and)g(are)e(generally)g(toleran)n(t)h(of)g(extra)g(white)h
-(space)f(and)g(alternativ)n(e)g(\014eld)h(delimiters:)340
-3932 y Fi(\017)45 b Fj(Besselian)33 b(Ep)r(o)r(c)n(h:)48
-b(Expressed)32 b(in)i(decimal)f(y)n(ears,)h(with)g(or)e(without)i
-(decimal)g(places)f(\()p Ft(")p Fj(B1950)p Ft(")d Fj(or)427
-4032 y Ft(")p Fj(B1976.13)p Ft(")24 b Fj(for)j(example\).)340
-4173 y Fi(\017)45 b Fj(Julian)e(Ep)r(o)r(c)n(h:)67 b(Expressed)42
-b(in)h(decimal)g(y)n(ears,)i(with)e(or)g(without)g(decimal)g(places)f
-(\()p Ft(")p Fj(J2000)p Ft(")e Fj(or)427 4272 y Ft(")p
-Fj(J2100.9)p Ft(")24 b Fj(for)j(example\).)340 4413 y
-Fi(\017)45 b Fj(Y)-7 b(ear:)50 b(Decimal)35 b(y)n(ears,)f(with)h(or)f
-(without)h(decimal)f(places)g(\()p Ft(")p Fj(1996.8)p
-Ft(")d Fj(for)j(example\).)57 b(Suc)n(h)35 b(v)-5 b(alues)427
-4512 y(are)34 b(in)n(terpreted)g(as)g(a)g(Besselian)f(ep)r(o)r(c)n(h)i
-(\(see)f(ab)r(o)n(v)n(e\))f(if)i(less)f(than)h(1984.0)d(and)j(as)e(a)i
-(Julian)f(ep)r(o)r(c)n(h)427 4612 y(otherwise.)340 4752
-y Fi(\017)45 b Fj(Julian)27 b(Date:)38 b(With)28 b(or)f(without)h
-(decimal)f(places)g(\()p Ft(")p Fj(JD)h(2454321.9)p Ft(")23
-b Fj(for)k(example\).)340 4893 y Fi(\017)45 b Fj(Mo)r(di\014ed)28
-b(Julian)f(Date:)37 b(With)29 b(or)e(without)h(decimal)f(places)g(\()p
-Ft(")p Fj(MJD)h(54321.4)p Ft(")c Fj(for)j(example\).)340
-5034 y Fi(\017)45 b Fj(Gregorian)32 b(Calendar)g(Date:)48
-b(With)35 b(the)f(mon)n(th)f(expressed)f(either)i(as)e(an)h(in)n(teger)
-g(or)f(a)h(3-c)n(haracter)427 5133 y(abbreviation,)27
-b(and)g(with)i(optional)e(decimal)g(places)g(to)h(represen)n(t)f(a)g
-(fraction)g(of)h(a)f(da)n(y)g(\()p Ft(")p Fj(1996-10-2)p
-Ft(")427 5233 y Fj(or)f Ft(")p Fj(1996-Oct-2.6)p Ft(")d
-Fj(for)j(example\).)37 b(If)27 b(no)g(fractional)f(part)g(of)h(a)g(da)n
-(y)f(is)h(giv)n(en,)f(the)i(time)f(refers)f(to)h(the)427
-5332 y(start)g(of)h(the)g(da)n(y)f(\(zero)f(hours\).)340
-5473 y Fi(\017)45 b Fj(Gregorian)18 b(Date)h(and)g(Time:)33
-b(An)n(y)20 b(calendar)e(date)h(\(as)g(ab)r(o)n(v)n(e\))f(but)i(with)g
-(a)f(fraction)g(of)g(a)g(da)n(y)g(expressed)427 5573
-y(as)28 b(hours,)h(min)n(utes)g(and)f(seconds)g(\()p
-Ft(")p Fj(1996-Oct-2)e(12:13:56.985)p Ft(")e Fj(for)k(example\).)41
-b(The)29 b(date)f(and)h(time)427 5672 y(can)e(b)r(e)h(separated)f(b)n
-(y)g(a)g(space)g(or)g(b)n(y)g(a)g Ft(")p Fj(T)p Ft(")g
-Fj(\(as)g(used)h(b)n(y)f(ISO8601)f(format\).)p eop end
-%%Page: 415 425
-TeXDict begin 415 424 bop 3643 52 a FF(415)-2 351 y Fd(Output)32
-b(F)-8 b(ormat)n(:)227 497 y Fj(When)29 b(enquiring)f(Ep)r(o)r(c)n(h)g
-(v)-5 b(alues,)28 b(the)h(format)f(used)g(is)h(the)f
-Ft(")p Fj(Y)-7 b(ear)p Ft(")27 b Fj(format)h(describ)r(ed)h(under)f
-Ft(")p Fj(Input)h(F)-7 b(or-)227 597 y(mats)p Ft(")p
-Fj(.)43 b(This)30 b(is)f(a)g(v)-5 b(alue)30 b(in)g(decimal)g(y)n(ears)e
-(whic)n(h)h(will)h(b)r(e)g(a)f(Besselian)g(ep)r(o)r(c)n(h)h(if)g(less)f
-(than)h(1984.0)d(and)j(a)227 697 y(Julian)h(ep)r(o)r(c)n(h)f
-(otherwise.)46 b(By)31 b(omitting)g(an)n(y)f(c)n(haracter)e(pre\014x,)k
-(this)f(format)f(allo)n(ws)f(the)j(Ep)r(o)r(c)n(h)e(v)-5
-b(alue)31 b(to)227 796 y(b)r(e)d(obtained)g(as)f(either)g(a)g(c)n
-(haracter)f(string)h(or)f(a)i(\015oating)e(p)r(oin)n(t)i(v)-5
-b(alue.)p 0 999 3780 12 v 0 1131 a Fz(Equino)l(x)708
-b Fe(Ep)s(o)s(c)m(h)39 b(of)f(the)h(mean)f(equino)m(x)706
-b Fz(Equino)l(x)0 1323 y Fd(Description:)44 b Fj(This)19
-b(attribute)f(is)h(used)f(to)g(qualify)g(those)g(celestial)g(co)r
-(ordinate)f(systems)h(describ)r(ed)g(b)n(y)h(a)e(SkyF)-7
-b(rame)227 1423 y(whic)n(h)28 b(are)g(notionally)f(based)g(on)h(the)h
-(ecliptic)f(\(the)h(plane)f(of)g(the)h(Earth's)e(orbit)h(around)f(the)h
-(Sun\))h(and/or)227 1522 y(the)f(Earth's)f(equator.)227
-1649 y(Both)e(of)g(these)g(planes)g(are)f(in)h(motion)g(and)g(their)g
-(p)r(ositions)g(are)f(di\016cult)i(to)e(sp)r(ecify)i(precisely)-7
-b(.)35 b(In)25 b(practice,)227 1748 y(therefore,)36 b(a)f(mo)r(del)h
-(ecliptic)f(and/or)f(equator)g(are)g(used)h(instead.)59
-b(These,)37 b(together)d(with)i(the)g(p)r(oin)n(t)f(on)227
-1848 y(the)f(sky)f(that)h(de\014nes)g(the)g(co)r(ordinate)e(origin)h
-(\(the)h(in)n(tersection)f(of)h(the)g(t)n(w)n(o)e(planes)i(termed)f
-(the)h Ft(")p Fj(mean)227 1947 y(equino)n(x)p Ft(")p
-Fj(\))f(mo)n(v)n(e)f(with)i(time)g(according)e(to)h(some)g(mo)r(del)h
-(whic)n(h)g(remo)n(v)n(es)d(the)j(more)f(rapid)g(\015uctuations.)227
-2047 y(The)28 b(SkyF)-7 b(rame)27 b(class)f(supp)r(orts)i(b)r(oth)g
-(the)g(FK4)f(and)g(FK5)g(mo)r(dels.)227 2173 y(The)i(p)r(osition)f(of)h
-(a)f(\014xed)h(source)e(expressed)h(in)h(an)n(y)f(of)g(these)h(co)r
-(ordinate)e(systems)i(will)g(app)r(ear)e(to)i(c)n(hange)227
-2273 y(with)36 b(time)h(due)e(to)h(mo)n(v)n(emen)n(t)f(of)g(the)h(co)r
-(ordinate)f(system)g(itself)h(\(rather)f(than)h(motion)f(of)g(the)h
-(source\).)227 2373 y(Suc)n(h)25 b(co)r(ordinate)f(systems)g(m)n(ust)h
-(therefore)f(b)r(e)h(quali\014ed)f(b)n(y)h(a)f(momen)n(t)h(in)g(time)g
-(\(the)h Ft(")p Fj(ep)r(o)r(c)n(h)e(of)h(the)g(mean)227
-2472 y(equino)n(x)p Ft(")h Fj(or)g Ft(")p Fj(equino)n(x)p
-Ft(")f Fj(for)i(short\))f(whic)n(h)h(allo)n(ws)f(the)h(p)r(osition)g
-(of)g(the)h(mo)r(del)f(co)r(ordinate)f(system)g(on)h(the)227
-2572 y(sky)g(to)h(b)r(e)g(determined.)37 b(This)27 b(is)h(the)g(role)f
-(of)g(the)h(Equino)n(x)e(attribute.)227 2698 y(The)31
-b(Equino)n(x)f(attribute)h(is)f(stored)g(as)g(a)h(Mo)r(di\014ed)g
-(Julian)f(Date,)i(but)g(when)f(setting)f(or)g(getting)h(its)g(v)-5
-b(alue)227 2798 y(y)n(ou)27 b(ma)n(y)g(use)g(the)h(same)f(formats)g(as)
-g(for)g(the)h(Ep)r(o)r(c)n(h)f(attribute)h(\(q.v.\).)227
-2924 y(The)k(default)g(Equino)n(x)f(v)-5 b(alue)31 b(is)h(B1950.0)d
-(\(Besselian\))j(for)f(the)h(old)g(FK4-based)e(co)r(ordinate)g(systems)
-i(\(see)227 3024 y(the)c(System)g(attribute\))g(and)f(J2000.0)e
-(\(Julian\))j(for)f(all)h(others.)0 3177 y Fd(T)m(yp)s(e:)227
-3276 y Fj(Floating)f(p)r(oin)n(t.)0 3429 y Fd(Class)k(Applicabilit)m
-(y:)259 3569 y(SkyF)-8 b(rame)427 3669 y Fj(All)28 b(SkyF)-7
-b(rames)27 b(ha)n(v)n(e)f(this)i(attribute.)0 3834 y
-Fd(Notes:)340 4120 y Fi(\017)45 b Fj(Care)21 b(m)n(ust)h(b)r(e)h(tak)n
-(en)e(to)h(distinguish)g(the)h(Equino)n(x)e(v)-5 b(alue,)23
-b(whic)n(h)f(relates)f(to)h(the)g(de\014nition)h(of)f(a)f(time-)427
-4220 y(dep)r(enden)n(t)31 b(co)r(ordinate)e(system)h(\(based)f(on)h
-(solar)f(system)g(reference)h(planes)f(whic)n(h)h(are)f(in)i(motion\),)
-427 4319 y(from)f(the)h(sup)r(er\014cially)e(similar)h(Ep)r(o)r(c)n(h)g
-(v)-5 b(alue.)44 b(The)31 b(latter)e(is)i(used)f(to)g(qualify)g(co)r
-(ordinate)f(systems)427 4419 y(where)j(the)g(p)r(ositions)f(of)h
-(sources)e(c)n(hange)h(with)h(time)g(\(or)g(app)r(ear)e(to)i(do)g(so\))
-f(for)g(a)h(v)-5 b(ariet)n(y)30 b(of)i(other)427 4519
-y(reasons,)26 b(suc)n(h)h(as)g(ab)r(erration)f(of)i(ligh)n(t)f(caused)g
-(b)n(y)h(the)g(observ)n(er's)d(motion,)i(etc.)340 4653
-y Fi(\017)45 b Fj(See)25 b(the)h(description)f(of)g(the)g(System)h
-(attribute)f(for)g(details)g(of)g(whic)n(h)g(qualifying)g(attributes)g
-(apply)g(to)427 4753 y(eac)n(h)i(celestial)g(co)r(ordinate)g(system.)p
-0 4956 V 0 5086 a Fz(Escap)t(e)753 5087 y Fe(Allo)m(w)36
-b(c)m(hanges)i(of)h(c)m(haracter)d(attributes)h(within)1692
-5202 y(strings?)3373 5086 y Fz(Escap)t(e)0 5394 y Fd(Description:)44
-b Fj(This)28 b(attribute)g(con)n(trols)e(the)i(app)r(earance)e(of)i
-(text)g(strings)f(and)h(n)n(umerical)f(lab)r(els)g(dra)n(wn)g(b)n(y)g
-(the)227 5494 y(astGrid)20 b(and)h(\(for)f(the)h(Plot)f(class\))g(astT)
--7 b(ext)20 b(functions,)i(b)n(y)e(determining)h(if)g(an)n(y)f(escap)r
-(e)g(sequences)f(con)n(tained)227 5593 y(within)h(the)g(strings)e
-(should)h(b)r(e)h(used)g(to)f(con)n(trol)f(the)h(app)r(earance)f(of)i
-(the)f(text,)j(or)c(should)h(b)r(e)h(prin)n(ted)f(literally)-7
-b(.)227 5693 y(Note,)28 b(the)g(Plot3D)f(class)g(only)g(in)n(terprets)g
-(escap)r(e)g(sequences)f(within)j(the)f(astGrid)f(function.)p
-eop end
-%%Page: 416 426
-TeXDict begin 416 425 bop 0 52 a FF(416)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fj(If)24 b(the)g(Escap)r(e)f(v)-5 b(alue)24 b(of)f(a)h(Plot)f(is)g
-(one)h(\(the)g(default\),)h(then)f(an)n(y)f(escap)r(e)g(sequences)g(in)
-h(text)g(strings)f(pro)r(duce)227 451 y(the)28 b(e\013ects)g(describ)r
-(ed)f(b)r(elo)n(w)h(when)f(prin)n(ted.)37 b(Otherwise,)27
-b(they)h(are)e(prin)n(ted)i(literally)-7 b(.)227 580
-y(See)28 b(also)e(the)i(astEscap)r(es)e(function.)0 739
-y Fd(T)m(yp)s(e:)227 839 y Fj(In)n(teger)h(\(b)r(o)r(olean\).)0
-997 y Fd(Class)k(Applicabilit)m(y:)259 1143 y(Plot)427
-1243 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)-2
-1414 y Fd(Escap)s(e)32 b(Sequences)n(:)227 1560 y Fj(Escap)r(e)19
-b(sequences)g(are)g(in)n(tro)r(duced)g(in)n(to)h(the)g(text)g(string)f
-(b)n(y)g(a)g(p)r(ercen)n(t)h Ft(")p Fj(\045)p Ft(")f
-Fj(c)n(haracter.)32 b(An)n(y)20 b(unrecognised,)227 1660
-y(illegal)36 b(or)f(incomplete)i(escap)r(e)f(sequences)g(are)f(prin)n
-(ted)h(literally)-7 b(.)63 b(The)37 b(follo)n(wing)e(escap)r(e)h
-(sequences)g(are)227 1759 y(curren)n(tly)27 b(recognised)f(\()p
-Ft(")p Fj(...)p Ft(")h Fj(represen)n(ts)f(a)h(string)g(of)h(one)f(or)g
-(more)g(decimal)g(digits\):)227 1888 y(\045\045)h(-)g(Prin)n(t)f(a)g
-(literal)g Ft(")p Fj(\045)p Ft(")g Fj(c)n(haracter.)227
-2018 y(\045)p Fi(^)p Fj(...+)i(-)f(Dra)n(w)g(subsequen)n(t)g(c)n
-(haracters)f(as)h(sup)r(er-scripts.)38 b(The)29 b(digits)f
-Ft(")p Fj(...)p Ft(")g Fj(giv)n(e)g(the)h(distance)f(from)g(the)227
-2117 y(base-line)e(of)g Ft(")p Fj(normal)p Ft(")f Fj(text)i(to)f(the)h
-(base-line)f(of)h(the)f(sup)r(er-script)g(text,)h(scaled)f(so)g(that)h
-(a)f(v)-5 b(alue)26 b(of)h Ft(")p Fj(100)p Ft(")227 2217
-y Fj(corresp)r(onds)h(to)h(the)h(heigh)n(t)f(of)h Ft(")p
-Fj(normal)p Ft(")e Fj(text.)43 b(\045)p Fi(^)p Fj(+)29
-b(-)h(Dra)n(w)e(subsequen)n(t)h(c)n(haracters)f(with)i(the)g(normal)227
-2317 y(base-line.)227 2446 y(\045v...+)k(-)f(Dra)n(w)g(subsequen)n(t)h
-(c)n(haracters)d(as)i(sub-scripts.)55 b(The)34 b(digits)f
-Ft(")p Fj(...)p Ft(")g Fj(giv)n(e)g(the)h(distance)g(from)f(the)227
-2545 y(base-line)d(of)h Ft(")p Fj(normal)p Ft(")e Fj(text)i(to)f(the)h
-(base-line)f(of)h(the)g(sub-script)f(text,)i(scaled)e(so)g(that)h(a)g
-(v)-5 b(alue)30 b(of)h Ft(")p Fj(100)p Ft(")227 2645
-y Fj(corresp)r(onds)26 b(to)h(the)h(heigh)n(t)g(of)f
-Ft(")p Fj(normal)p Ft(")f Fj(text.)227 2774 y(\045v+)i(-)f(Dra)n(w)g
-(subsequen)n(t)g(c)n(haracters)e(with)j(the)g(normal)f(base-line)g
-(\(equiv)-5 b(alen)n(t)27 b(to)h(\045)p Fi(^)p Fj(+\).)227
-2903 y(\045)p Fl(>)p Fj(...+)j(-)g(Lea)n(v)n(e)e(a)i(gap)f(b)r(efore)h
-(dra)n(wing)e(subsequen)n(t)i(c)n(haracters.)45 b(The)31
-b(digits)g Ft(")p Fj(...)p Ft(")f Fj(giv)n(e)g(the)i(size)e(of)h(the)
-227 3003 y(gap,)c(scaled)g(so)g(that)h(a)f(v)-5 b(alue)28
-b(of)f Ft(")p Fj(100)p Ft(")e Fj(corresp)r(onds)h(to)i(the)g(heigh)n(t)
-f(of)h Ft(")p Fj(normal)p Ft(")d Fj(text.)227 3132 y(\045)p
-Fl(<)p Fj(...+)30 b(-)g(Mo)n(v)n(e)e(bac)n(kw)n(ards)g(b)r(efore)i(dra)
-n(wing)f(subsequen)n(t)g(c)n(haracters.)42 b(The)30 b(digits)g
-Ft(")p Fj(...)p Ft(")f Fj(giv)n(e)h(the)g(size)g(of)227
-3232 y(the)e(mo)n(v)n(emen)n(t,)f(scaled)g(so)g(that)h(a)f(v)-5
-b(alue)27 b(of)h Ft(")p Fj(100)p Ft(")d Fj(corresp)r(onds)h(to)h(the)h
-(heigh)n(t)g(of)f Ft(")p Fj(normal)p Ft(")f Fj(text.)227
-3361 y(\045s...+)g(-)g(Change)g(the)g(Size)h(attribute)f(for)g
-(subsequen)n(t)g(c)n(haracters.)34 b(The)26 b(digits)g
-Ft(")p Fj(...)p Ft(")g Fj(giv)n(e)f(the)i(new)f(Size)g(as)227
-3461 y(a)h(fraction)g(of)h(the)g Ft(")p Fj(normal)p Ft(")e
-Fj(Size,)h(scaled)g(so)g(that)h(a)f(v)-5 b(alue)28 b(of)f
-Ft(")p Fj(100)p Ft(")f Fj(corresp)r(onds)f(to)j(1.0;)227
-3590 y(\045s+)f(-)h(Reset)f(the)h(Size)g(attribute)g(to)f(its)h
-Ft(")p Fj(normal)p Ft(")e Fj(v)-5 b(alue.)227 3719 y(\045w...+)36
-b(-)g(Change)f(the)i(Width)g(attribute)f(for)f(subsequen)n(t)h(c)n
-(haracters.)60 b(The)36 b(digits)g Ft(")p Fj(...)p Ft(")f
-Fj(giv)n(e)g(the)i(new)227 3819 y(width)29 b(as)d(a)i(fraction)f(of)g
-(the)h Ft(")p Fj(normal)p Ft(")e Fj(Width,)j(scaled)d(so)h(that)h(a)f
-(v)-5 b(alue)28 b(of)f Ft(")p Fj(100)p Ft(")f Fj(corresp)r(onds)g(to)h
-(1.0;)227 3948 y(\045w+)h(-)f(Reset)h(the)g(Size)f(attribute)h(to)g
-(its)f Ft(")p Fj(normal)p Ft(")f Fj(v)-5 b(alue.)227
-4077 y(\045f...+)31 b(-)f(Change)f(the)i(F)-7 b(on)n(t)30
-b(attribute)g(for)g(subsequen)n(t)g(c)n(haracters.)42
-b(The)31 b(digits)f Ft(")p Fj(...)p Ft(")f Fj(giv)n(e)h(the)g(new)h(F)
--7 b(on)n(t)227 4177 y(v)i(alue.)227 4306 y(\045f+)28
-b(-)f(Reset)h(the)g(F)-7 b(on)n(t)28 b(attribute)f(to)h(its)g
-Ft(")p Fj(normal)p Ft(")d Fj(v)-5 b(alue.)227 4435 y(\045c...+)37
-b(-)f(Change)g(the)h(Colour)f(attribute)h(for)f(subsequen)n(t)g(c)n
-(haracters.)62 b(The)37 b(digits)g Ft(")p Fj(...)p Ft(")f
-Fj(giv)n(e)f(the)j(new)227 4535 y(Colour)27 b(v)-5 b(alue.)227
-4664 y(\045c+)28 b(-)f(Reset)h(the)g(Colour)e(attribute)i(to)f(its)h
-Ft(")p Fj(normal)p Ft(")e Fj(v)-5 b(alue.)227 4793 y(\045t...+)29
-b(-)e(Change)h(the)g(St)n(yle)g(attribute)g(for)g(subsequen)n(t)g(c)n
-(haracters.)35 b(The)29 b(digits)f Ft(")p Fj(...)p Ft(")f
-Fj(giv)n(e)g(the)i(new)f(St)n(yle)227 4893 y(v)-5 b(alue.)227
-5022 y(\045t+)28 b(-)f(Reset)h(the)g(St)n(yle)f(attribute)h(to)g(its)g
-Ft(")p Fj(normal)p Ft(")d Fj(v)-5 b(alue.)227 5151 y(\045h+)28
-b(-)f(Remem)n(b)r(er)h(the)g(curren)n(t)e(horizon)n(tal)g(p)r(osition)i
-(\(see)f Ft(")p Fj(\045g+)p Ft(")p Fj(\))227 5280 y(\045g+)g(-)h(Go)f
-(to)g(the)h(horizon)n(tal)e(p)r(osition)i(of)f(the)h(previous)f
-Ft(")p Fj(\045h+)p Ft(")f Fj(\(if)j(an)n(y\).)227 5410
-y(\045-)f(-)f(Push)g(the)h(curren)n(t)f(graphics)f(attribute)i(v)-5
-b(alues)27 b(on)n(to)g(the)h(top)g(of)f(the)h(stac)n(k)f(\(see)g
-Ft(")p Fj(\045+)p Ft(")p Fj(\).)227 5539 y(\045+)39 b(-)g(P)n(op)f
-(attributes)h(v)-5 b(alues)38 b(of)h(the)g(top)g(the)h(stac)n(k)e
-(\(see)h Ft(")p Fj(\045-)p Ft(")p Fj(\).)70 b(If)39 b(the)h(stac)n(k)e
-(is)g(empt)n(y)-7 b(,)42 b Ft(")p Fj(normal)p Ft(")227
-5639 y Fj(attribute)28 b(v)-5 b(alues)27 b(are)g(restored.)p
-eop end
-%%Page: 417 427
-TeXDict begin 417 426 bop 3643 52 a FF(417)p 0 351 3780
-12 v 0 483 a Fz(FillF)-11 b(actor)242 b Fe(F)-10 b(raction)38
-b(of)g(the)g(Region)g(whic)m(h)g(is)h(of)f(in)m(terest)240
-b Fz(FillF)-11 b(actor)0 718 y Fd(Description:)44 b Fj(This)27
-b(attribute)f(indicates)g(the)h(fraction)f(of)g(the)h(Region)f(whic)n
-(h)g(is)g(of)h(in)n(terest.)36 b(AST)26 b(do)r(es)g(not)h(use)227
-818 y(this)f(attribute)g(in)n(ternally)f(for)h(an)n(y)f(purp)r(ose.)35
-b(T)n(ypically)-7 b(,)26 b(it)g(could)g(b)r(e)g(used)g(to)f(indicate)h
-(the)g(fraction)f(of)h(the)227 917 y(Region)h(for)g(whic)n(h)h(data)f
-(is)g(a)n(v)-5 b(ailable.)227 1065 y(The)30 b(supplied)h(v)-5
-b(alue)30 b(m)n(ust)g(b)r(e)h(in)f(the)h(range)e(0.0)g(to)h(1.0,)g(and)
-g(the)h(default)f(v)-5 b(alue)30 b(is)g(1.0)g(\(except)g(as)g(noted)227
-1164 y(b)r(elo)n(w\).)0 1360 y Fd(T)m(yp)s(e:)227 1460
-y Fj(Floating)d(p)r(oin)n(t.)0 1655 y Fd(Class)k(Applicabilit)m(y:)259
-1838 y(Region)427 1938 y Fj(All)d(Regions)f(ha)n(v)n(e)f(this)i
-(attribute.)259 2094 y Fd(CmpRegion)427 2193 y Fj(The)g(default)g
-(FillF)-7 b(actor)27 b(for)g(a)g(CmpRegion)g(is)h(the)g(FillF)-7
-b(actor)27 b(of)h(its)f(\014rst)h(comp)r(onen)n(t)f(Region.)259
-2349 y Fd(Prism)427 2449 y Fj(The)36 b(default)h(FillF)-7
-b(actor)35 b(for)h(a)f(Prism)h(is)f(the)i(pro)r(duct)f(of)g(the)g
-(FillF)-7 b(actors)35 b(of)h(its)h(t)n(w)n(o)e(comp)r(onen)n(t)427
-2548 y(Regions.)259 2704 y Fd(Stc)427 2804 y Fj(The)28
-b(default)g(FillF)-7 b(actor)27 b(for)g(an)g(Stc)h(is)g(the)g(FillF)-7
-b(actor)27 b(of)g(its)h(encapsulated)f(Region.)p 0 3049
-V 0 3181 a Fz(FitsDigits)243 b Fe(Digits)38 b(of)g(precision)g(for)g
-(\015oating)e(p)s(oin)m(t)i(FITS)1735 3296 y(v)-7 b(alues)3202
-3181 y Fz(FitsDigits)0 3507 y Fd(Description:)44 b Fj(This)24
-b(attribute)h(giv)n(es)d(the)j(n)n(um)n(b)r(er)f(of)g(signi\014can)n(t)
-f(decimal)h(digits)g(to)g(use)g(when)g(formatting)f(\015oat-)227
-3607 y(ing)28 b(p)r(oin)n(t)f(v)-5 b(alues)28 b(for)f(inclusion)g(in)h
-(the)g(FITS)g(header)f(cards)f(within)i(a)g(FitsChan.)227
-3755 y(By)37 b(default,)k(a)c(p)r(ositiv)n(e)g(v)-5 b(alue)37
-b(is)g(used)g(whic)n(h)h(results)e(in)i(no)f(loss)g(of)g(information,)i
-(assuming)e(that)g(the)227 3854 y(v)-5 b(alue's)28 b(precision)e(is)i
-(double.)36 b(Usually)-7 b(,)28 b(this)g(causes)e(no)i(problems.)227
-4002 y(Ho)n(w)n(ev)n(er,)22 b(to)g(adhere)g(strictly)g(to)g(the)h
-(recommendations)e(of)i(the)g(FITS)g(standard,)f(the)h(width)g(of)g
-(the)f(format-)227 4102 y(ted)31 b(v)-5 b(alue)30 b(\(including)g
-(sign,)h(decimal)f(p)r(oin)n(t)g(and)g(exp)r(onen)n(t\))g(ough)n(t)g
-(not)g(to)g(b)r(e)g(more)f(than)i(20)e(c)n(haracters.)227
-4201 y(If)f(y)n(ou)e(are)h(concerned)f(ab)r(out)h(this,)h(y)n(ou)e
-(should)h(set)h(FitsDigits)f(to)h(a)e(negativ)n(e)h(v)-5
-b(alue,)27 b(suc)n(h)g(as)f(-15.)36 b(In)27 b(this)227
-4301 y(case,)g(the)h(absolute)f(v)-5 b(alue)27 b(\(+15\))g(indicates)g
-(the)h(maxim)n(um)f(n)n(um)n(b)r(er)g(of)g(signi\014can)n(t)g(digits)g
-(to)h(use,)f(but)h(the)227 4400 y(actual)23 b(n)n(um)n(b)r(er)f(used)h
-(ma)n(y)g(b)r(e)g(few)n(er)g(than)g(this)g(to)g(ensure)f(that)i(the)f
-(FITS)g(recommendations)f(are)g(satis\014ed.)227 4500
-y(When)g(using)g(this)f(approac)n(h,)g(the)h(resulting)f(n)n(um)n(b)r
-(er)g(of)h(signi\014can)n(t)f(digits)g(ma)n(y)g(dep)r(end)h(on)f(the)h
-(v)-5 b(alue)22 b(b)r(eing)227 4600 y(formatted)28 b(and)f(on)g(the)h
-(presence)f(of)h(an)n(y)f(sign,)g(decimal)g(p)r(oin)n(t)h(or)f(exp)r
-(onen)n(t.)227 4747 y(The)c(v)-5 b(alue)23 b(of)g(this)g(attribute)g
-(is)g(e\013ectiv)n(e)g(when)g(FITS)g(header)g(cards)e(are)h(output,)j
-(either)e(using)f(astFindFits)227 4847 y(or)27 b(b)n(y)g(the)h(action)f
-(of)h(the)g(FitsChan's)f(sink)h(function)g(when)g(it)g(is)f(\014nally)h
-(deleted.)0 5043 y Fd(T)m(yp)s(e:)227 5142 y Fj(In)n(teger.)0
-5338 y Fd(Class)j(Applicabilit)m(y:)259 5520 y(FitsChan)427
-5620 y Fj(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-eop end
-%%Page: 418 428
-TeXDict begin 418 427 bop 0 52 a FF(418)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 490 a Fz(F)-11 b(on)l(t\(elemen)l(t\))1034
-483 y Fe(Character)36 b(fon)m(t)i(for)g(a)g(Plot)f(elemen)m(t)2954
-490 y Fz(F)-11 b(on)l(t\(elemen)l(t\))0 675 y Fd(Description:)44
-b Fj(This)35 b(attribute)g(determines)f(the)h(c)n(haracter)d(fon)n(t)j
-(index)g(used)f(when)h(dra)n(wing)e(eac)n(h)h(elemen)n(t)h(of)227
-774 y(graphical)25 b(output)j(pro)r(duced)e(b)n(y)h(a)f(Plot.)36
-b(It)27 b(tak)n(es)f(a)h(separate)e(v)-5 b(alue)27 b(for)f(eac)n(h)g
-(graphical)f(elemen)n(t)i(so)f(that,)227 874 y(for)h(instance,)h(the)g
-(setting)f Ft(")p Fj(F)-7 b(on)n(t\(title\)=2)p Ft(")27
-b Fj(causes)g(the)h(Plot)f(title)h(to)g(b)r(e)g(dra)n(wn)e(using)h(fon)
-n(t)h(n)n(um)n(b)r(er)f(2.)227 996 y(The)i(range)f(of)h(in)n(teger)e
-(fon)n(t)i(indices)g(a)n(v)-5 b(ailable)28 b(and)g(the)i(app)r(earance)
-d(of)i(the)g(resulting)f(text)i(is)e(determined)227 1096
-y(b)n(y)c(the)g(underlying)f(graphics)g(system.)35 b(The)24
-b(default)g(b)r(eha)n(viour)f(is)h(for)f(all)h(graphical)e(elemen)n(ts)
-i(to)f(b)r(e)i(dra)n(wn)227 1195 y(using)j(the)f(default)i(fon)n(t)e
-(supplied)h(b)n(y)f(this)h(graphics)f(system.)0 1340
-y Fd(T)m(yp)s(e:)227 1439 y Fj(In)n(teger.)0 1584 y Fd(Class)k
-(Applicabilit)m(y:)259 1715 y(Plot)427 1815 y Fj(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)0 1971 y Fd(Notes:)340 2249 y
-Fi(\017)45 b Fj(F)-7 b(or)27 b(a)g(list)h(of)g(the)g(graphical)e
-(elemen)n(ts)h(a)n(v)-5 b(ailable,)27 b(see)g(the)h(description)f(of)g
-(the)h(Plot)f(class.)340 2376 y Fi(\017)45 b Fj(If)34
-b(no)f(graphical)f(elemen)n(t)h(is)h(sp)r(eci\014ed,)h(\(e.g.)54
-b Ft(")p Fj(F)-7 b(on)n(t)p Ft(")32 b Fj(instead)h(of)h
-Ft(")p Fj(F)-7 b(on)n(t\(title\))p Ft(")p Fj(\),)35 b(then)f(a)f
-Ft(")p Fj(set)p Ft(")f Fj(or)427 2476 y Ft(")p Fj(clear)p
-Ft(")g Fj(op)r(eration)h(will)h(a\013ect)g(the)g(attribute)g(v)-5
-b(alue)34 b(of)f(all)h(graphical)e(elemen)n(ts,)j(while)f(a)g
-Ft(")p Fj(get)p Ft(")e Fj(or)427 2576 y Ft(")p Fj(test)p
-Ft(")27 b Fj(op)r(eration)g(will)h(use)f(just)h(the)g(F)-7
-b(on)n(t\(T)g(extLab\))28 b(v)-5 b(alue.)p 0 2765 V 0
-2903 a Fz(F)-11 b(ormat\(axis\))987 2896 y Fe(F)h(ormat)38
-b(sp)s(eci\014cation)f(for)h(axis)g(v)-7 b(alues)3023
-2903 y Fz(F)c(ormat\(axis\))0 3088 y Fd(Description:)44
-b Fj(This)21 b(attribute)g(sp)r(eci\014es)f(the)h(format)f(to)h(b)r(e)g
-(used)f(when)h(displa)n(ying)e(co)r(ordinate)h(v)-5 b(alues)20
-b(asso)r(ciated)227 3188 y(with)j(a)e(particular)f(F)-7
-b(rame)22 b(axis)f(\(i.e.)35 b(to)22 b(con)n(v)n(ert)e(v)-5
-b(alues)21 b(from)h(binary)f(to)h(c)n(haracter)d(form\).)35
-b(It)22 b(is)g(in)n(terpreted)227 3288 y(b)n(y)28 b(the)g(astF)-7
-b(ormat)26 b(function)i(and)g(determines)f(the)h(formatting)f(whic)n(h)
-h(it)g(applies.)227 3410 y(If)33 b(no)g(F)-7 b(ormat)32
-b(v)-5 b(alue)32 b(is)h(set)f(for)g(a)h(F)-7 b(rame)32
-b(axis,)h(a)f(default)h(v)-5 b(alue)32 b(is)h(supplied)g(instead.)52
-b(This)32 b(is)h(based)f(on)227 3509 y(the)i(v)-5 b(alue)32
-b(of)h(the)h(Digits,)g(or)e(Digits\(axis\),)i(attribute)g(and)e(is)h(c)
-n(hosen)f(so)g(that)i(it)f(displa)n(ys)f(the)h(requested)227
-3609 y(n)n(um)n(b)r(er)28 b(of)f(digits)h(of)f(precision.)0
-3753 y Fd(T)m(yp)s(e:)227 3853 y Fj(String.)0 3997 y
-Fd(Class)k(Applicabilit)m(y:)259 4128 y(F)-8 b(rame)427
-4228 y Fj(The)28 b(F)-7 b(rame)27 b(class)f(in)n(terprets)h(this)g
-(attribute)h(as)f(a)g(format)f(sp)r(eci\014cation)i(string)e(to)i(b)r
-(e)f(passed)g(to)g(the)427 4328 y(C)h Ft(")p Fj(prin)n(tf)p
-Ft(")e Fj(function)i(\(e.g.)37 b Ft(")p Fj(\0451.7G)p
-Ft(")p Fj(\))26 b(in)i(order)e(to)h(format)g(a)g(single)g(co)r
-(ordinate)f(v)-5 b(alue)27 b(\(supplied)h(as)427 4427
-y(a)f(double)h(precision)f(n)n(um)n(b)r(er\).)427 4541
-y(When)d(supplying)g(a)f(v)-5 b(alue)23 b(for)g(this)h(attribute,)h(b)r
-(ew)n(are)d(that)i(the)g Ft(")p Fj(\045)p Ft(")f Fj(c)n(haracter)e(ma)n
-(y)i(b)r(e)h(in)n(terpreted)427 4641 y(directly)35 b(as)g(a)f(format)h
-(sp)r(eci\014cation)g(b)n(y)f(some)h(prin)n(tf-lik)n(e)g(functions)g
-(\(suc)n(h)g(as)f(astSet\).)60 b(Y)-7 b(ou)35 b(ma)n(y)427
-4740 y(need)28 b(to)f(double)h(it)g(\(i.e.)37 b(use)28
-b Ft(")p Fj(\045\045)p Ft(")p Fj(\))f(to)h(a)n(v)n(oid)e(this.)259
-4868 y Fd(SkyF)-8 b(rame)427 4968 y Fj(The)36 b(SkyF)-7
-b(rame)35 b(class)f(re-de\014nes)h(the)h(syn)n(tax)e(and)i(default)g(v)
--5 b(alue)35 b(of)h(the)g(F)-7 b(ormat)34 b(string)h(to)h(allo)n(w)427
-5067 y(the)i(formatting)f(of)g(sexagesimal)e(v)-5 b(alues)37
-b(as)f(appropriate)g(for)h(the)g(particular)f(celestial)h(co)r
-(ordinate)427 5167 y(system)c(b)r(eing)h(represen)n(ted.)52
-b(The)34 b(syn)n(tax)e(of)h(SkyF)-7 b(rame)33 b(F)-7
-b(ormat)32 b(strings)h(is)g(describ)r(ed)g(\(b)r(elo)n(w\))g(in)427
-5266 y(the)28 b Ft(")p Fj(SkyF)-7 b(rame)27 b(F)-7 b(ormats)p
-Ft(")26 b Fj(section.)259 5394 y Fd(F)-8 b(rameSet)427
-5494 y Fj(The)23 b(F)-7 b(ormat)23 b(attribute)g(of)g(a)g(F)-7
-b(rameSet)23 b(axis)f(is)h(the)h(same)e(as)h(that)g(of)g(its)h(curren)n
-(t)e(F)-7 b(rame)23 b(\(as)f(sp)r(eci\014ed)427 5593
-y(b)n(y)30 b(the)g(Curren)n(t)g(attribute\).)44 b(Note)30
-b(that)g(the)h(syn)n(tax)e(of)h(the)g(F)-7 b(ormat)30
-b(string)f(is)h(also)f(determined)h(b)n(y)427 5693 y(the)e(curren)n(t)f
-(F)-7 b(rame.)p eop end
-%%Page: 419 429
-TeXDict begin 419 428 bop 3643 52 a FF(419)259 351 y
-Fd(TimeF)-8 b(rame)427 451 y Fj(The)37 b(TimeF)-7 b(rame)36
-b(class)g(extends)h(the)g(syn)n(tax)f(of)g(the)h(F)-7
-b(ormat)36 b(string)g(to)h(allo)n(w)e(the)j(formatting)e(of)427
-551 y(TimeF)-7 b(rame)34 b(axis)f(v)-5 b(alues)34 b(as)f(Gregorian)f
-(calendar)g(dates)i(and)g(times.)56 b(The)34 b(syn)n(tax)f(of)h(TimeF)
--7 b(rame)427 650 y(F)g(ormat)27 b(strings)g(is)g(describ)r(ed)h(\(b)r
-(elo)n(w\))g(in)f(the)h Ft(")p Fj(TimeF)-7 b(rame)27
-b(F)-7 b(ormats)p Ft(")26 b Fj(section.)0 820 y Fd(Notes:)340
-1110 y Fi(\017)45 b Fj(When)36 b(sp)r(ecifying)f(this)h(attribute)f(b)n
-(y)g(name,)i(it)f(should)f(b)r(e)h(subscripted)f(with)g(the)h(n)n(um)n
-(b)r(er)f(of)g(the)427 1210 y(F)-7 b(rame)27 b(axis)g(to)h(whic)n(h)f
-(it)h(applies.)-2 1380 y Fd(SkyF)-8 b(rame)33 b(F)-8
-b(ormats)n(:)227 1526 y Fj(The)23 b(F)-7 b(ormat)21 b(string)h
-(supplied)h(for)e(a)h(SkyF)-7 b(rame)22 b(should)g(con)n(tain)g(zero)f
-(or)g(more)h(of)g(the)h(follo)n(wing)e(c)n(haracters.)227
-1625 y(These)28 b(ma)n(y)e(o)r(ccur)h(in)h(an)n(y)f(order,)f(but)j(the)
-f(follo)n(wing)e(is)i(recommended)f(for)g(clarit)n(y:)340
-1898 y Fi(\017)45 b Ft(")p Fj(+)p Ft(")p Fj(:)34 b(Indicates)24
-b(that)g(a)f(plus)h(sign)f(should)h(b)r(e)g(pre\014xed)f(to)h(p)r
-(ositiv)n(e)f(v)-5 b(alues.)35 b(By)24 b(default,)h(no)e(plus)h(sign)
-427 1998 y(is)k(used.)340 2134 y Fi(\017)45 b Ft(")p
-Fj(z)p Ft(")p Fj(:)e(Indicates)31 b(that)g(leading)g(zeros)f(should)h
-(b)r(e)g(pre\014xed)g(to)g(the)g(v)-5 b(alue)31 b(so)g(that)g(the)g
-(\014rst)g(\014eld)h(is)f(of)427 2234 y(constan)n(t)23
-b(width,)j(as)d(w)n(ould)g(b)r(e)h(required)f(in)h(a)g(\014xed-width)g
-(table)f(\(leading)h(zeros)e(are)h(alw)n(a)n(ys)f(pre\014xed)427
-2334 y(to)28 b(an)n(y)f(\014elds)g(that)h(follo)n(w\).)36
-b(By)28 b(default,)g(no)f(leading)g(zeros)f(are)h(added.)340
-2470 y Fi(\017)45 b Ft(")p Fj(i)p Ft(")p Fj(:)64 b(Use)42
-b(the)g(standard)e(ISO)h(\014eld)h(separator)d(\(a)j(colon\))e(b)r(et)n
-(w)n(een)i(\014elds.)78 b(This)42 b(is)f(the)h(default)427
-2570 y(b)r(eha)n(viour.)340 2707 y Fi(\017)j Ft(")p Fj(b)p
-Ft(")p Fj(:)37 b(Use)27 b(a)g(blank)h(to)f(separate)f(\014elds.)340
-2844 y Fi(\017)45 b Ft(")p Fj(l)p Ft(")p Fj(:)36 b(Use)28
-b(a)f(letter)h(\()p Ft(")p Fj(h)p Ft(")p Fj(/)p Ft(")p
-Fj(d)p Ft(")p Fj(,)e Ft(")p Fj(m)p Ft(")h Fj(or)g Ft(")p
-Fj(s)p Ft(")f Fj(as)h(appropriate\))f(to)i(separate)e(\014elds.)340
-2980 y Fi(\017)45 b Ft(")p Fj(g)p Ft(")p Fj(:)37 b(Use)28
-b(a)g(letter)h(and)f(sym)n(b)r(ols)f(to)h(separate)f(\014elds)h(\()p
-Ft(")p Fj(h)p Ft(")p Fj(/)p Ft(")p Fj(d)p Ft(")p Fj(,)f
-Ft(")p Fj(m)p Ft(")h Fj(or)f Ft(")p Fj(s)p Ft(")p Fj(,)h(etc,)g(as)g
-(appropriate\),)427 3080 y(but)39 b(include)g(escap)r(e)e(sequences)h
-(in)g(the)h(formatted)e(v)-5 b(alue)39 b(so)e(that)h(the)h(Plot)f
-(class)f(will)h(dra)n(w)f(the)427 3180 y(separators)25
-b(as)i(small)g(sup)r(er-scripts.)340 3316 y Fi(\017)45
-b Ft(")p Fj(d)p Ft(")p Fj(:)35 b(Include)24 b(a)g(degrees)f(\014eld.)36
-b(Expressing)23 b(the)h(angle)g(purely)g(in)g(degrees)f(is)h(also)g
-(the)g(default)h(if)g(none)427 3416 y(of)j Ft(")p Fj(h)p
-Ft(")p Fj(,)f Ft(")p Fj(m)p Ft(")p Fj(,)g Ft(")p Fj(s)p
-Ft(")g Fj(or)f Ft(")p Fj(t)p Ft(")h Fj(are)g(giv)n(en.)340
-3553 y Fi(\017)45 b Ft(")p Fj(h)p Ft(")p Fj(:)e(Express)29
-b(the)i(angle)f(as)g(a)h(time)g(and)g(include)g(an)f(hours)g(\014eld)h
-(\(where)g(24)f(hours)g(corresp)r(ond)f(to)427 3652 y(360)e(degrees\).)
-37 b(Expressing)26 b(the)j(angle)e(purely)h(in)g(hours)f(is)h(also)f
-(the)h(default)h(if)f Ft(")p Fj(t)p Ft(")g Fj(is)g(giv)n(en)f(without)
-427 3752 y(either)h Ft(")p Fj(m)p Ft(")f Fj(or)f Ft(")p
-Fj(s)p Ft(")p Fj(.)340 3889 y Fi(\017)45 b Ft(")p Fj(m)p
-Ft(")p Fj(:)37 b(Include)27 b(a)h(min)n(utes)f(\014eld.)38
-b(By)27 b(default)h(this)g(is)f(not)h(included.)340 4025
-y Fi(\017)45 b Ft(")p Fj(s)p Ft(")p Fj(:)d(Include)31
-b(a)f(seconds)g(\014eld.)46 b(By)31 b(default)g(this)g(is)f(not)h
-(included.)46 b(This)31 b(request)f(is)h(ignored)e(if)i
-Ft(")p Fj(d)p Ft(")427 4125 y Fj(or)c Ft(")p Fj(h)p Ft(")g
-Fj(is)g(giv)n(en,)g(unless)h(a)f(min)n(utes)h(\014eld)g(is)f(also)f
-(included.)340 4262 y Fi(\017)45 b Ft(")p Fj(t)p Ft(")p
-Fj(:)37 b(Express)26 b(the)h(angle)g(as)g(a)g(time)h(\(where)f(24)g
-(hours)f(corresp)r(ond)g(to)h(360)f(degrees\).)36 b(This)28
-b(option)f(is)427 4361 y(ignored)c(if)h(either)g Ft(")p
-Fj(d)p Ft(")f Fj(or)g Ft(")p Fj(h)p Ft(")g Fj(is)g(giv)n(en)g(and)h(is)
-f(in)n(tended)i(for)e(use)g(where)h(the)g(v)-5 b(alue)23
-b(is)h(to)g(b)r(e)g(expressed)427 4461 y(purely)29 b(in)g(min)n(utes)g
-(and/or)e(seconds)h(of)h(time)g(\(with)h(no)e(hours)g(\014eld\).)42
-b(If)29 b Ft(")p Fj(t)p Ft(")f Fj(is)h(giv)n(en)f(without)h
-Ft(")p Fj(d)p Ft(")p Fj(,)427 4561 y Ft(")p Fj(h)p Ft(")p
-Fj(,)e Ft(")p Fj(m)p Ft(")g Fj(or)g Ft(")p Fj(s)p Ft(")g
-Fj(b)r(eing)g(presen)n(t,)g(then)h(it)g(is)g(equiv)-5
-b(alen)n(t)27 b(to)h Ft(")p Fj(h)p Ft(")p Fj(.)340 4697
-y Fi(\017)45 b Ft(")p Fj(.)p Ft(")p Fj(:)f(Indicates)31
-b(that)g(decimal)g(places)g(are)f(to)h(b)r(e)h(giv)n(en)e(for)h(the)h
-(\014nal)f(\014eld)g(in)h(the)f(formatted)g(string)427
-4797 y(\(whic)n(hev)n(er)20 b(\014eld)h(this)f(is\).)35
-b(The)21 b Ft(")p Fj(.)p Ft(")e Fj(should)i(b)r(e)f(follo)n(w)n(ed)g
-(immediately)g(b)n(y)h(an)f(unsigned)g(in)n(teger)g(whic)n(h)427
-4897 y(giv)n(es)30 b(the)i(n)n(um)n(b)r(er)f(of)g(decimal)g(places)f
-(required,)h(or)f(b)n(y)h(an)g(asterisk.)46 b(If)32 b(an)f(asterisk)f
-(is)h(supplied,)h(a)427 4996 y(default)c(n)n(um)n(b)r(er)g(of)f
-(decimal)h(places)f(is)g(used)h(whic)n(h)f(is)h(based)f(on)g(the)h(v)-5
-b(alue)27 b(of)h(the)g(Digits)g(attribute.)227 5166 y(All)21
-b(of)f(the)g(ab)r(o)n(v)n(e)f(format)h(sp)r(eci\014ers)f(are)g
-(case-insensitiv)n(e.)33 b(If)20 b(sev)n(eral)f(c)n(haracters)e(mak)n
-(e)j(con\015icting)f(requests)227 5266 y(\(e.g.)38 b(if)29
-b(b)r(oth)g Ft(")p Fj(i)p Ft(")e Fj(and)h Ft(")p Fj(b)p
-Ft(")f Fj(app)r(ear\),)h(then)h(the)f(c)n(haracter)e(o)r(ccurring)h
-(last)g(tak)n(es)h(precedence,)f(except)h(that)227 5365
-y Ft(")p Fj(d)p Ft(")f Fj(and)h Ft(")p Fj(h)p Ft(")f
-Fj(alw)n(a)n(ys)e(o)n(v)n(erride)h Ft(")p Fj(t)p Ft(")p
-Fj(.)227 5494 y(If)i(the)g(format)f(string)f(starts)h(with)h(a)f(p)r
-(ercen)n(tage)f(sign)g(\(\045\),)j(then)f(the)f(whole)g(format)g
-(string)g(is)g(assumed)g(to)227 5593 y(conform)33 b(to)g(the)h(syn)n
-(tax)e(de\014ned)i(b)n(y)f(the)h(F)-7 b(rame)33 b(class,)h(and)f(the)g
-(axis)g(v)-5 b(alues)33 b(is)g(formated)g(as)g(a)g(decimal)227
-5693 y(radians)27 b(v)-5 b(alue.)p eop end
-%%Page: 420 430
-TeXDict begin 420 429 bop 0 52 a FF(420)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)-2 351 y
-Fd(TimeF)-8 b(rame)32 b(F)-8 b(ormats)n(:)227 497 y Fj(The)37
-b(F)-7 b(ormat)36 b(string)f(supplied)i(for)f(a)g(TimeF)-7
-b(rame)36 b(should)g(either)h(use)f(the)h(syn)n(tax)e(de\014ned)i(b)n
-(y)f(the)h(base)227 597 y(F)-7 b(rame)31 b(class)g(\(i.e.)48
-b(a)31 b(C)h Ft(")p Fj(prin)n(tf)p Ft(")e Fj(format)h(string\),)h(or)f
-(the)h(extended)f Ft(")p Fj(iso)p Ft(")f Fj(syn)n(tax)h(describ)r(ed)g
-(b)r(elo)n(w)g(\(the)227 697 y(default)d(v)-5 b(alue)28
-b(is)f(inherited)h(from)f(the)h(F)-7 b(rame)27 b(class\):)340
-952 y Fi(\017)45 b Fj(C)28 b Ft(")p Fj(prin)n(tf)p Ft(")f
-Fj(syn)n(tax:)36 b(If)28 b(the)g(F)-7 b(ormat)28 b(string)f(is)g(a)g(C)
-h Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(description)g(suc)n(h)h(as)f
-Ft(")p Fj(\0451.7G)p Ft(")p Fj(,)427 1052 y(the)32 b(TimeF)-7
-b(rame)31 b(axis)f(v)-5 b(alue)31 b(will)h(b)r(e)g(formatted)f(without)
-g(c)n(hange)f(as)h(a)g(\015oating)f(p)r(oin)n(t)i(v)-5
-b(alue)31 b(using)427 1151 y(this)f(format.)41 b(The)29
-b(formatted)g(string)f(will)i(th)n(us)f(represen)n(t)f(an)h(o\013set)g
-(from)f(the)i(zero)e(p)r(oin)n(t)h(sp)r(eci\014ed)427
-1251 y(b)n(y)24 b(the)h(TimeF)-7 b(rame's)23 b(TimeOrigin)g(attribute,)
-i(measured)f(in)g(units)h(giv)n(en)e(b)n(y)h(the)g(TimeF)-7
-b(rame's)24 b(Unit)427 1350 y(attribute.)340 1480 y Fi(\017)45
-b Ft(")p Fj(iso)p Ft(")31 b Fj(syn)n(tax:)45 b(This)33
-b(is)f(used)g(to)g(format)g(a)g(TimeF)-7 b(rame)31 b(axis)h(v)-5
-b(alue)32 b(as)g(a)f(Gregorian)g(date)h(follo)n(w)n(ed)427
-1579 y(b)n(y)g(an)g(optional)f(time)i(of)f(da)n(y)-7
-b(.)50 b(If)33 b(the)f(F)-7 b(ormat)32 b(v)-5 b(alue)32
-b(commences)f(with)i(the)f(string)g Ft(")p Fj(iso)p Ft(")f
-Fj(then)h(the)427 1679 y(TimeF)-7 b(rame)32 b(axis)f(v)-5
-b(alue)32 b(will)g(b)r(e)g(con)n(v)n(erted)f(to)h(an)f(absolute)h(MJD,)
-g(including)g(the)g(addition)g(of)g(the)427 1778 y(curren)n(t)d
-(TimeOrigin)f(v)-5 b(alue,)29 b(and)h(then)f(formatted)g(as)g(a)g
-(Gregorian)e(date)i(using)g(the)g(format)g Ft(")p Fj(yyyy-)427
-1878 y(mm-dd)p Ft(")p Fj(.)44 b(Optionally)-7 b(,)29
-b(the)i(F)-7 b(ormat)29 b(v)-5 b(alue)30 b(ma)n(y)f(include)h(an)f(in)n
-(teger)g(precision)g(follo)n(wing)g(the)h Ft(")p Fj(iso)p
-Ft(")427 1978 y Fj(sp)r(eci\014cation)e(\(e.g.)39 b Ft(")p
-Fj(iso.2)p Ft(")p Fj(\),)27 b(in)h(whic)n(h)h(case)e(the)i(time)g(of)f
-(da)n(y)f(will)i(b)r(e)f(app)r(ended)h(to)f(the)h(formatted)427
-2077 y(date)e(\(if)g(no)f(time)h(of)g(da)n(y)e(is)i(included,)g(the)g
-(date)f(\014eld)h(is)f(rounded)g(to)h(the)f(nearest)g(da)n(y\).)36
-b(The)27 b(in)n(teger)427 2177 y(v)-5 b(alue)26 b(in)g(the)h(F)-7
-b(ormat)25 b(string)g(indicates)h(the)g(n)n(um)n(b)r(er)g(of)g(decimal)
-g(places)f(to)h(use)g(in)g(the)g(seconds)f(\014eld.)427
-2277 y(F)-7 b(or)27 b(instance,)h(a)g(F)-7 b(ormat)27
-b(v)-5 b(alue)27 b(of)h Ft(")p Fj(iso.0)p Ft(")e Fj(pro)r(duces)h(a)h
-(time)g(of)g(da)n(y)f(of)h(the)g(form)f Ft(")p Fj(hh:mm:ss)p
-Ft(")p Fj(,)h(and)427 2376 y(a)i(F)-7 b(ormat)30 b(v)-5
-b(alue)30 b(of)g Ft(")p Fj(iso.2)p Ft(")e Fj(pro)r(duces)h(a)h(time)h
-(of)f(da)n(y)f(of)i(the)f(form)g Ft(")p Fj(hh:mm:ss.ss)p
-Ft(")p Fj(.)43 b(The)31 b(date)f(and)427 2476 y(time)e(\014elds)g(will)
-g(b)r(e)g(separated)e(b)n(y)h(a)h(space)e(unless)i('T')g(is)f(app)r
-(ended)h(to)f(the)h(end)g(of)g(string,)f(in)h(whic)n(h)427
-2575 y(case)c(the)h(letter)g(T)g(\(upp)r(er)g(case\))g(will)g(b)r(e)g
-(used)g(as)f(the)h(separator.)34 b(The)25 b(v)-5 b(alue)24
-b(of)h(the)g(Digits)g(attribute)427 2675 y(is)j(ignored)e(when)i(using)
-f(this)h Ft(")p Fj(iso)p Ft(")e Fj(format.)p 0 2867 3780
-12 v 0 2999 a Fz(F)-11 b(ull)1031 b Fe(Set)39 b(lev)m(el)e(of)i(output)
-e(detail)1030 b Fz(F)-11 b(ull)0 3180 y Fd(Description:)44
-b Fj(This)26 b(attribute)g(is)g(a)f(three-state)g(\015ag)g(and)g(tak)n
-(es)g(v)-5 b(alues)25 b(of)h(-1,)f(0)h(or)e(+1.)36 b(It)26
-b(con)n(trols)e(the)i(amoun)n(t)227 3280 y(of)i(information)f(included)
-h(in)g(the)g(output)g(generated)e(b)n(y)i(a)f(Channel.)227
-3402 y(If)33 b(F)-7 b(ull)32 b(is)g(zero,)h(then)f(a)g(mo)r(dest)g
-(amoun)n(t)g(of)g(non-essen)n(tial)e(but)j(useful)g(information)e(will)
-h(b)r(e)h(included)f(in)227 3502 y(the)j(output.)57 b(If)35
-b(F)-7 b(ull)35 b(is)f(negativ)n(e,)h(all)f(non-essen)n(tial)f
-(information)h(will)g(b)r(e)h(suppressed)e(to)i(minimise)f(the)227
-3602 y(amoun)n(t)27 b(of)h(output,)g(while)g(if)g(it)g(is)f(p)r(ositiv)
-n(e,)h(the)g(output)g(will)g(include)g(the)f(maxim)n(um)h(amoun)n(t)f
-(of)h(detailed)227 3701 y(information)f(ab)r(out)h(the)g(Ob)5
-b(ject)27 b(b)r(eing)h(written.)0 3847 y Fd(T)m(yp)s(e:)227
-3946 y Fj(In)n(teger.)0 4092 y Fd(Class)j(Applicabilit)m(y:)259
-4225 y(Channel)427 4325 y Fj(The)d(default)g(v)-5 b(alue)27
-b(is)h(zero)e(for)i(a)f(normal)f(Channel.)259 4454 y
-Fd(FitsChan)427 4553 y Fj(The)i(default)g(v)-5 b(alue)27
-b(is)h(zero)e(for)i(a)f(FitsChan.)259 4682 y Fd(XmlChan)427
-4782 y Fj(The)h(default)g(v)-5 b(alue)27 b(is)h(-1)f(for)g(an)g
-(XmlChan.)259 4911 y Fd(StcsChan)427 5011 y Fj(The)i(default)g(v)-5
-b(alue)28 b(is)g(zero)f(for)h(an)g(StcsChan.)39 b(Set)29
-b(a)f(p)r(ositiv)n(e)g(v)-5 b(alue)28 b(to)g(cause)g(default)h(v)-5
-b(alues)28 b(to)g(b)r(e)427 5110 y(included)g(in)g(STC-S)g
-(descriptions.)0 5269 y Fd(Notes:)340 5547 y Fi(\017)45
-b Fj(All)27 b(p)r(ositiv)n(e)f(v)-5 b(alues)26 b(supplied)h(for)f(this)
-g(attribute)h(are)e(con)n(v)n(erted)g(to)h(+1)g(and)g(all)g(negativ)n
-(e)g(v)-5 b(alues)26 b(are)427 5647 y(con)n(v)n(erted)g(to)i(-1.)p
-eop end
-%%Page: 421 431
-TeXDict begin 421 430 bop 3643 52 a FF(421)p 0 351 3780
-12 v 0 490 a Fz(Gap\(axis\))779 483 y Fe(In)m(terv)-7
-b(al)37 b(b)s(et)m(w)m(een)h(linearly)f(spaced)h(ma)7
-b(jor)37 b(axis)1492 598 y(v)-7 b(alues)39 b(of)f(a)g(Plot)3202
-490 y Fz(Gap\(axis\))0 735 y Fd(Description:)44 b Fj(This)30
-b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h(annotated)f
-(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227 835
-y(astGrid)k(function\))h(b)n(y)f(determining)g(the)h(linear)f(in)n
-(terv)-5 b(al)33 b(b)r(et)n(w)n(een)i(the)f Ft(")p Fj(ma)5
-b(jor)p Ft(")33 b Fj(axis)g(v)-5 b(alues)34 b(of)g(a)g(Plot,)227
-934 y(at)f(whic)n(h)h(\(for)f(example\))g(ma)5 b(jor)32
-b(tic)n(k)h(marks)g(are)f(dra)n(wn.)53 b(It)34 b(tak)n(es)e(a)h
-(separate)f(v)-5 b(alue)33 b(for)g(eac)n(h)f(ph)n(ysical)227
-1034 y(axis)i(of)g(the)h(Plot)f(so)f(that,)k(for)c(instance,)j(the)f
-(setting)f Ft(")p Fj(Gap\(2\)=3.0)p Ft(")e Fj(sp)r(eci\014es)j(the)f
-(di\013erence)h(b)r(et)n(w)n(een)227 1134 y(adjacen)n(t)30
-b(ma)5 b(jor)30 b(v)-5 b(alues)30 b(along)f(the)i(second)f(axis.)45
-b(The)31 b(Gap)g(attribute)f(is)h(only)f(used)h(when)f(the)h(LogTic)n
-(ks)227 1233 y(attribute)c(indicates)f(that)h(the)g(spacing)e(b)r(et)n
-(w)n(een)i(ma)5 b(jor)25 b(axis)h(v)-5 b(alues)26 b(is)g(to)h(b)r(e)f
-(linear.)36 b(If)27 b(ma)5 b(jor)25 b(axis)h(v)-5 b(alues)227
-1333 y(are)27 b(logarithmically)f(spaced)h(then)h(the)g(gap)f(is)g(sp)r
-(eci\014ed)h(using)f(attribute)h(LogGap.)227 1449 y(The)35
-b(Gap)f(v)-5 b(alue)35 b(supplied)g(will)f(usually)h(b)r(e)g(rounded)f
-(to)g(the)h(nearest)f Ft(")p Fj(nice)p Ft(")f Fj(v)-5
-b(alue,)37 b(suitable)d(\(e.g.\))58 b(for)227 1549 y(generating)26
-b(axis)g(lab)r(els,)h(b)r(efore)g(use.)36 b(T)-7 b(o)27
-b(a)n(v)n(oid)e(this)i Ft(")p Fj(nicing)p Ft(")f Fj(y)n(ou)h(should)f
-(set)h(an)g(explicit)g(format)g(for)f(the)227 1649 y(axis)g(using)h
-(the)g(F)-7 b(ormat\(axis\))26 b(or)g(Digits/Digits\(axis\))h
-(attribute.)37 b(The)27 b(default)g(b)r(eha)n(viour)f(is)g(for)h(the)g
-(Plot)227 1748 y(to)g(generate)f(its)h(o)n(wn)g(Gap)g(v)-5
-b(alue)27 b(when)g(required,)f(based)h(on)g(the)g(range)f(of)h(axis)f
-(v)-5 b(alues)27 b(to)g(b)r(e)h(represen)n(ted.)0 1881
-y Fd(T)m(yp)s(e:)227 1981 y Fj(Floating)f(p)r(oin)n(t.)0
-2114 y Fd(Class)k(Applicabilit)m(y:)259 2234 y(Plot)427
-2334 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-2480 y Fd(Notes:)340 2746 y Fi(\017)45 b Fj(The)27 b(Gap)f(v)-5
-b(alue)27 b(should)f(use)g(the)h(same)f(units)h(as)f(are)g(used)g(in)n
-(ternally)g(for)g(storing)g(co)r(ordinate)f(v)-5 b(alues)427
-2845 y(on)32 b(the)h(corresp)r(onding)d(axis.)50 b(F)-7
-b(or)32 b(example,)h(with)g(a)f(celestial)g(co)r(ordinate)f(system,)i
-(the)g(Gap)f(v)-5 b(alue)427 2945 y(should)28 b(b)r(e)g(in)f(radians,)g
-(not)g(hours)g(or)g(degrees.)340 3062 y Fi(\017)45 b
-Fj(If)32 b(no)f(axis)g(is)g(sp)r(eci\014ed,)i(\(e.g.)48
-b Ft(")p Fj(Gap)p Ft(")30 b Fj(instead)h(of)h Ft(")p
-Fj(Gap\(2\))p Ft(")p Fj(\),)f(then)h(a)f Ft(")p Fj(set)p
-Ft(")g Fj(or)f Ft(")p Fj(clear)p Ft(")g Fj(op)r(eration)427
-3161 y(will)f(a\013ect)g(the)g(attribute)g(v)-5 b(alue)28
-b(of)h(all)f(the)h(Plot)f(axes,)g(while)h(a)f Ft(")p
-Fj(get)p Ft(")g Fj(or)f Ft(")p Fj(test)p Ft(")h Fj(op)r(eration)g(will)
-h(use)427 3261 y(just)f(the)g(Gap\(1\))g(v)-5 b(alue.)p
-0 3427 V 0 3559 a Fz(Grf)458 b Fe(Use)39 b(Grf)f(functions)g
-(registered)f(through)g(astGrfSet?)457 b Fz(Grf)0 3715
-y Fd(Description:)44 b Fj(This)23 b(attribute)f(selects)h(the)f
-(functions)h(whic)n(h)g(are)e(used)h(to)h(dra)n(w)e(graphics)g(b)n(y)h
-(the)h(Plot)f(class.)34 b(If)23 b(it)227 3815 y(is)k(zero,)f(then)h
-(the)g(functions)h(in)f(the)g(graphics)e(in)n(terface)h(selected)h(at)g
-(link-time)g(are)f(used)g(\(see)h(the)g(ast)p Ft(_)p
-Fj(link)227 3915 y(script\).)34 b(Otherwise,)20 b(functions)g
-(registered)d(using)i(astGrfSet)g(are)f(used.)34 b(In)19
-b(this)g(case,)h(if)f(a)g(function)h(is)e(needed)227
-4014 y(whic)n(h)30 b(has)g(not)g(b)r(een)h(registered,)e(then)i(the)f
-(function)h(in)f(the)h(graphics)e(in)n(terface)g(selected)h(at)g
-(link-time)h(is)227 4114 y(used.)227 4230 y(The)d(default)g(is)f(to)h
-(use)f(the)h(graphics)f(in)n(terface)0 4364 y Fd(T)m(yp)s(e:)227
-4463 y Fj(In)n(teger)g(\(b)r(o)r(olean\).)0 4596 y Fd(Class)k
-(Applicabilit)m(y:)259 4716 y(Plot)427 4816 y Fj(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)259 4933 y Fd(Plot3D)427 5032
-y Fj(The)h(Plot3D)f(class)g(ignores)f(this)h(attributes,)h(assuming)f
-(a)g(v)-5 b(alue)27 b(of)h(zero.)0 5178 y Fd(Notes:)340
-5444 y Fi(\017)45 b Fj(The)25 b(v)-5 b(alue)24 b(of)g(this)h(attribute)
-g(is)f(not)g(sa)n(v)n(ed)f(when)i(the)g(Plot)e(is)i(written)f(out)h
-(through)e(a)h(Channel)h(to)f(an)427 5544 y(external)30
-b(data)f(store.)44 b(On)30 b(re-loading)e(suc)n(h)i(a)g(Plot)g(using)f
-(astRead,)i(the)f(attribute)h(will)f(b)r(e)h(cleared,)427
-5643 y(resulting)c(in)h(the)g(graphics)e(in)n(terface)h(selected)h(at)f
-(link-time)h(b)r(eing)g(used.)p eop end
-%%Page: 422 432
-TeXDict begin 422 431 bop 0 52 a FF(422)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a Fz(Grid)932 b Fe(Dra)m(w)38 b(grid)f(lines)i(for)e(a)
-i(Plot?)931 b Fz(Grid)0 700 y Fd(Description:)44 b Fj(This)30
-b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h(annotated)f
-(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227 800
-y(astGrid)d(function\))i(b)n(y)e(determining)g(whether)h(grid)f(lines)g
-(\(a)h(grid)e(of)i(curv)n(es)e(marking)h(the)g Ft(")p
-Fj(ma)5 b(jor)p Ft(")26 b Fj(v)-5 b(alues)227 900 y(on)28
-b(eac)n(h)e(axis\))h(are)g(dra)n(wn)g(across)e(the)j(plotting)g(area.)
-227 1036 y(If)h(the)g(Grid)f(v)-5 b(alue)28 b(of)h(a)f(Plot)f(is)i
-(non-zero,)e(then)i(grid)e(lines)i(will)f(b)r(e)h(dra)n(wn.)38
-b(Otherwise,)28 b(short)g(tic)n(k)g(marks)227 1136 y(on)g(the)h(axes)e
-(are)g(used)h(to)g(mark)g(the)g(ma)5 b(jor)27 b(axis)h(v)-5
-b(alues.)38 b(The)28 b(default)h(b)r(eha)n(viour)e(is)h(to)g(use)g(tic)
-n(k)g(marks)f(if)227 1235 y(the)h(en)n(tire)f(plotting)h(area)e(is)i
-(\014lled)g(b)n(y)f(v)-5 b(alid)28 b(ph)n(ysical)e(co)r(ordinates,)g
-(but)j(to)e(dra)n(w)g(grid)g(lines)g(otherwise.)0 1409
-y Fd(T)m(yp)s(e:)227 1508 y Fj(In)n(teger)g(\(b)r(o)r(olean\).)0
-1682 y Fd(Class)k(Applicabilit)m(y:)259 1842 y(Plot)427
-1942 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-2128 y Fd(Notes:)340 2434 y Fi(\017)45 b Fj(The)31 b(spacing)f(b)r(et)n
-(w)n(een)g(ma)5 b(jor)30 b(axis)g(v)-5 b(alues,)31 b(whic)n(h)f
-(determines)h(the)g(spacing)e(of)i(grid)f(lines,)h(ma)n(y)f(b)r(e)427
-2534 y(set)e(using)f(the)h(Gap\(axis\))f(attribute.)p
-0 2757 V 0 2889 a Fz(GrismAlpha)181 b Fe(The)39 b(angle)e(of)i
-(incidence)f(of)g(the)h(incoming)1194 3003 y(ligh)m(t)d(on)j(the)g
-(grating)d(surface)3063 2889 y Fz(GrismAlpha)0 3216 y
-Fd(Description:)44 b Fj(This)29 b(attribute)f(holds)g(the)h(angle)f(b)r
-(et)n(w)n(een)g(the)h(incoming)f(ligh)n(t)g(and)g(the)h(normal)e(to)h
-(the)h(grating)227 3316 y(surface,)e(in)h(radians.)35
-b(The)28 b(default)g(v)-5 b(alue)28 b(is)f(0.)0 3489
-y Fd(T)m(yp)s(e:)227 3589 y Fj(Double)h(precision.)0
-3762 y Fd(Class)j(Applicabilit)m(y:)259 3923 y(GrismMap)427
-4022 y Fj(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 4246 V 0 4377 a Fz(GrismEps)317 b Fe(The)39 b(angle)f(b)s(et)m(w)m
-(een)g(the)g(normal)f(and)i(the)1478 4492 y(disp)s(ersion)f(plane)3200
-4377 y Fz(GrismEps)0 4709 y Fd(Description:)44 b Fj(This)22
-b(attribute)g(holds)f(the)i(angle)d(\(in)j(radians\))d(b)r(et)n(w)n
-(een)i(the)g(normal)f(to)h(the)g(grating)e(or)h(exit)h(prism)227
-4809 y(face,)36 b(and)e(the)g(disp)r(ersion)f(plane.)56
-b(The)34 b(disp)r(ersion)f(plane)h(is)g(the)h(plane)e(spanned)h(b)n(y)g
-(the)g(incoming)g(and)227 4909 y(outgoing)27 b(ra)n(y)-7
-b(.)35 b(The)28 b(default)g(v)-5 b(alue)27 b(is)h(0.0.)0
-5082 y Fd(T)m(yp)s(e:)227 5182 y Fj(Double)g(precision.)0
-5355 y Fd(Class)j(Applicabilit)m(y:)259 5515 y(GrismMap)427
-5615 y Fj(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-eop end
-%%Page: 423 433
-TeXDict begin 423 432 bop 3643 52 a FF(423)p 0 351 3780
-12 v 0 483 a Fz(GrismG)747 b Fe(The)39 b(grating)d(ruling)h(densit)m(y)
-747 b Fz(GrismG)0 675 y Fd(Description:)44 b Fj(This)34
-b(attribute)g(holds)f(the)h(n)n(um)n(b)r(er)g(of)f(grating)g(rulings)g
-(p)r(er)g(unit)i(length.)55 b(The)34 b(unit)g(of)g(length)227
-775 y(used)i(should)f(b)r(e)h(consisten)n(t)f(with)h(the)f(units)h
-(used)g(for)e(attributes)i(GrismW)-7 b(a)n(v)n(eR)34
-b(and)h(GrismNRP)-7 b(.)36 b(The)227 875 y(default)28
-b(v)-5 b(alue)28 b(is)f(0.0.)36 b(\(the)29 b(appropriate)c(v)-5
-b(alue)28 b(for)f(a)g(pure)h(prism)f(disp)r(erser)f(with)j(no)e
-(grating\).)0 1028 y Fd(T)m(yp)s(e:)227 1127 y Fj(Double)h(precision.)0
-1280 y Fd(Class)j(Applicabilit)m(y:)259 1420 y(GrismMap)427
-1520 y Fj(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 1723 V 0 1854 a Fz(GrismM)830 b Fe(The)38 b(in)m(terference)f(order)
-829 b Fz(GrismM)0 2023 y Fd(Description:)44 b Fj(This)28
-b(attribute)g(holds)f(the)h(in)n(terference)f(order)f(b)r(eing)i
-(considered.)36 b(The)27 b(default)h(v)-5 b(alue)28 b(is)f(0.)0
-2176 y Fd(T)m(yp)s(e:)227 2276 y Fj(In)n(teger.)0 2429
-y Fd(Class)k(Applicabilit)m(y:)259 2569 y(GrismMap)427
-2669 y Fj(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 2871 V 0 3003 a Fz(GrismNR)387 b Fe(The)39 b(refractiv)m(e)d(index)i
-(at)g(the)h(reference)1607 3103 y(w)m(a)m(v)m(elength)3211
-3003 y Fz(GrismNR)0 3295 y Fd(Description:)44 b Fj(This)36
-b(attribute)f(holds)g(refractiv)n(e)f(index)h(of)h(the)f(grism)g
-(material)f(at)h(the)h(reference)e(w)n(a)n(v)n(elength)227
-3395 y(\(giv)n(en)27 b(b)n(y)h(attribute)f(GrismW)-7
-b(a)n(v)n(eR\).)27 b(The)h(default)g(v)-5 b(alue)27 b(is)h(1.0.)0
-3548 y Fd(T)m(yp)s(e:)227 3647 y Fj(Double)g(precision.)0
-3800 y Fd(Class)j(Applicabilit)m(y:)259 3940 y(GrismMap)427
-4040 y Fj(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 4243 V 0 4374 a Fz(GrismNRP)266 b Fe(The)38 b(rate)g(of)g(c)m(hange)g
-(of)g(refractiv)m(e)e(index)1474 4489 y(with)h(w)m(a)m(v)m(elength)3119
-4374 y Fz(GrismNRP)0 4681 y Fd(Description:)44 b Fj(This)28
-b(attribute)g(holds)g(the)g(rate)f(of)h(c)n(hange)f(of)h(the)g
-(refractiv)n(e)f(index)h(of)g(the)g(grism)f(material)g(with)227
-4781 y(resp)r(ect)i(to)g(w)n(a)n(v)n(elength)e(at)i(the)g(reference)f
-(w)n(a)n(v)n(elength)f(\(giv)n(en)h(b)n(y)h(attribute)g(GrismW)-7
-b(a)n(v)n(eR\).)28 b(The)h(default)227 4880 y(v)-5 b(alue)31
-b(is)f(0.0)f(\(the)j(appropriate)c(v)-5 b(alue)31 b(for)e(a)h(pure)h
-(grating)e(disp)r(erser)g(with)i(no)f(prism\).)46 b(The)30
-b(units)h(of)f(this)227 4980 y(attribute)e(should)f(b)r(e)h(consisten)n
-(t)f(with)i(those)e(of)g(attributes)h(GrismW)-7 b(a)n(v)n(eR)26
-b(and)i(GrismG.)0 5133 y Fd(T)m(yp)s(e:)227 5233 y Fj(Double)g
-(precision.)0 5386 y Fd(Class)j(Applicabilit)m(y:)259
-5526 y(GrismMap)427 5625 y Fj(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g
-(attribute.)p eop end
-%%Page: 424 434
-TeXDict begin 424 433 bop 0 52 a FF(424)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a Fz(GrismTheta)152 b Fe(Angle)38 b(b)s(et)m(w)m(een)g
-(normal)f(to)h(detector)f(plane)1449 598 y(and)i(reference)f(ra)m(y)
-3069 483 y Fz(GrismTheta)0 775 y Fd(Description:)44 b
-Fj(This)30 b(attribute)g(giv)n(es)f(the)h(angle)f(of)h(incidence)g(of)g
-(ligh)n(t)f(of)h(the)g(reference)f(w)n(a)n(v)n(elength)g(\(giv)n(en)g
-(b)n(y)227 875 y(attribute)d(GrismW)-7 b(a)n(v)n(eR\))25
-b(on)n(to)g(the)h(detector.)36 b(Sp)r(eci\014cally)-7
-b(,)26 b(it)h(holds)e(the)h(angle)f(\(in)i(radians\))d(b)r(et)n(w)n
-(een)i(the)227 974 y(normal)f(to)h(the)g(detector)f(plane)g(and)h(an)g
-(inciden)n(t)g(ra)n(y)e(at)i(the)g(reference)f(w)n(a)n(v)n(elength.)34
-b(The)26 b(default)g(v)-5 b(alue)26 b(is)227 1074 y(0.0.)0
-1215 y Fd(T)m(yp)s(e:)227 1315 y Fj(Double)i(precision.)0
-1456 y Fd(Class)j(Applicabilit)m(y:)259 1585 y(GrismMap)427
-1684 y Fj(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 1868 V 0 1999 a Fz(GrismW)-11 b(a)l(v)l(eR)461 b Fe(The)39
-b(reference)f(w)m(a)m(v)m(elength)456 b Fz(GrismW)-11
-b(a)l(v)l(eR)0 2177 y Fd(Description:)44 b Fj(This)34
-b(attribute)g(holds)f(reference)g(w)n(a)n(v)n(elength.)54
-b(The)34 b(default)g(v)-5 b(alue)34 b(is)f(5000)f(\(Angstrom\).)56
-b(The)227 2276 y(units)28 b(of)g(this)g(attribute)g(should)f(b)r(e)h
-(consisten)n(t)f(with)h(those)f(of)h(attributes)f(GrismNRP)h(and)f
-(GrismG.)0 2418 y Fd(T)m(yp)s(e:)227 2518 y Fj(Double)h(precision.)0
-2659 y Fd(Class)j(Applicabilit)m(y:)259 2787 y(GrismMap)427
-2887 y Fj(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 3070 V 0 3201 a Fz(ID)1197 3202 y Fe(Ob)7 b(ject)38
-b(iden)m(ti\014cation)d(string)3626 3201 y Fz(ID)0 3375
-y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n(tains)f(a)h
-(string)f(whic)n(h)h(ma)n(y)f(b)r(e)h(used)g(to)g(iden)n(tify)h(the)f
-(Ob)5 b(ject)30 b(to)g(whic)n(h)f(it)i(is)227 3474 y(attac)n(hed.)36
-b(There)26 b(is)g(no)g(restriction)g(on)g(the)h(con)n(ten)n(ts)e(of)i
-(this)f(string,)g(whic)n(h)h(is)f(not)g(used)h(in)n(ternally)e(b)n(y)h
-(the)227 3574 y(AST)h(library)-7 b(,)25 b(and)g(is)h(simply)g(returned)
-f(without)h(c)n(hange)f(when)h(required.)35 b(The)26
-b(default)h(v)-5 b(alue)25 b(is)h(an)g(empt)n(y)227 3674
-y(string.)227 3794 y(An)k(iden)n(ti\014cation)e(string)g(can)h(b)r(e)g
-(v)-5 b(aluable)28 b(when,)i(for)e(example,)h(sev)n(eral)e(Ob)5
-b(jects)28 b(ha)n(v)n(e)g(b)r(een)h(stored)f(in)h(a)227
-3894 y(\014le)34 b(\(using)f(astW)-7 b(rite\))33 b(and)g(are)g(later)f
-(retriev)n(ed)g(\(using)h(astRead\).)54 b(Consisten)n(t)33
-b(use)g(of)g(the)h(ID)f(attribute)227 3994 y(allo)n(ws)26
-b(the)h(retriev)n(ed)f(Ob)5 b(jects)26 b(to)h(b)r(e)g(iden)n(ti\014ed)h
-(without)f(dep)r(ending)g(simply)g(on)g(the)g(order)e(in)j(whic)n(h)e
-(they)227 4093 y(w)n(ere)h(stored.)227 4214 y(This)37
-b(attribute)g(ma)n(y)f(also)g(b)r(e)h(useful)h(during)e(debugging,)j
-(to)d(distinguish)h(similar)f(Ob)5 b(jects)37 b(when)g(using)227
-4313 y(astSho)n(w)27 b(to)g(displa)n(y)g(them.)0 4455
-y Fd(T)m(yp)s(e:)227 4554 y Fj(String.)0 4696 y Fd(Class)k
-(Applicabilit)m(y:)259 4824 y(Ob)5 b(ject)427 4924 y
-Fj(All)28 b(Ob)5 b(jects)28 b(ha)n(v)n(e)e(this)i(attribute.)0
-5078 y Fd(Notes:)340 5352 y Fi(\017)45 b Fj(Unlik)n(e)25
-b(most)h(other)e(attributes,)i(the)f(v)-5 b(alue)25 b(of)h(the)f(ID)h
-(attribute)f(is)g(not)h(transferred)d(when)j(an)f(Ob)5
-b(ject)427 5452 y(is)31 b(copied.)45 b(Instead,)31 b(its)g(v)-5
-b(alue)30 b(is)h(unde\014ned)g(\(and)g(therefore)e(defaults)i(to)g(an)f
-(empt)n(y)g(string\))h(in)f(an)n(y)427 5552 y(cop)n(y)-7
-b(.)53 b(Ho)n(w)n(ev)n(er,)33 b(it)h(is)f(retained)f(in)i(an)n(y)e
-(external)h(represen)n(tation)e(of)i(an)g(Ob)5 b(ject)33
-b(pro)r(duced)g(b)n(y)g(the)427 5651 y(astW)-7 b(rite)28
-b(function.)p eop end
-%%Page: 425 435
-TeXDict begin 425 434 bop 3643 52 a FF(425)p 0 351 3780
-12 v 0 482 a Fz(IF)437 483 y Fe(The)39 b(in)m(termediate)c(frequency)j
-(in)h(a)g(dual)f(sideband)g(sp)s(ectrum)3645 482 y Fz(IF)0
-687 y Fd(Description:)44 b Fj(This)26 b(attribute)h(sp)r(eci\014es)f
-(the)g(\(top)r(o)r(cen)n(tric\))g(in)n(termediate)g(frequency)g(in)g(a)
-g(dual)g(sideband)g(sp)r(ec-)227 786 y(trum.)41 b(Its)29
-b(sole)g(use)g(is)f(to)h(determine)g(the)h(lo)r(cal)e(oscillator)f
-(\(LO\))i(frequency)g(\(the)g(frequency)g(whic)n(h)g(marks)227
-886 y(the)h(b)r(oundary)f(b)r(et)n(w)n(een)g(the)h(lo)n(w)n(er)d(and)j
-(upp)r(er)f(sidebands\).)42 b(The)29 b(LO)g(frequency)g(is)g(equal)g
-(to)g(the)h(sum)g(of)227 985 y(the)d(cen)n(tre)f(frequency)g(and)g(the)
-h(in)n(termediate)f(frequency)-7 b(.)36 b(Here,)26 b(the)h
-Ft(")p Fj(cen)n(tre)e(frequency)p Ft(")h Fj(is)g(the)h(top)r(o)r(cen-)
-227 1085 y(tric)h(frequency)g(in)g(Hz)g(corresp)r(onding)e(to)i(the)h
-(curren)n(t)e(v)-5 b(alue)28 b(of)g(the)g(DSBCen)n(tre)g(attribute.)39
-b(The)28 b(v)-5 b(alue)28 b(of)227 1185 y(the)33 b(IF)f(attribute)g(ma)
-n(y)f(b)r(e)i(p)r(ositiv)n(e)e(or)g(negativ)n(e:)45 b(a)31
-b(p)r(ositiv)n(e)h(v)-5 b(alue)32 b(results)f(in)h(the)h(LO)e
-(frequency)h(b)r(eing)227 1284 y(ab)r(o)n(v)n(e)23 b(the)h(cen)n(tral)f
-(frequency)-7 b(,)24 b(whilst)g(a)g(negativ)n(e)f(IF)h(v)-5
-b(alue)23 b(results)h(in)g(the)g(LO)f(frequency)h(b)r(eing)g(b)r(elo)n
-(w)f(the)227 1384 y(cen)n(tral)g(frequency)-7 b(.)36
-b(The)24 b(sign)f(of)h(the)g(IF)h(attribute)f(v)-5 b(alue)24
-b(determines)f(the)i(default)f(v)-5 b(alue)24 b(for)f(the)i(SideBand)
-227 1484 y(attribute.)227 1613 y(When)g(setting)f(a)f(new)h(v)-5
-b(alue)24 b(for)f(this)h(attribute,)h(the)g(units)f(in)g(whic)n(h)g
-(the)g(frequency)g(v)-5 b(alue)23 b(is)h(supplied)g(ma)n(y)227
-1713 y(b)r(e)j(indicated)g(b)n(y)f(app)r(ending)h(a)f(suitable)h
-(string)e(to)i(the)g(end)g(of)f(the)h(formatted)g(v)-5
-b(alue.)36 b(If)27 b(the)g(units)g(are)f(not)227 1813
-y(sp)r(eci\014ed,)35 b(then)f(the)g(supplied)f(v)-5 b(alue)33
-b(is)g(assumed)g(to)g(b)r(e)h(in)f(units)h(of)f(GHz.)54
-b(F)-7 b(or)33 b(instance,)h(the)g(follo)n(wing)227 1912
-y(strings)27 b(all)g(result)h(in)f(an)h(IF)g(of)f(4)g(GHz)h(b)r(eing)g
-(used:)37 b Ft(")p Fj(4.0)p Ft(")p Fj(,)26 b Ft(")p Fj(4.0)g(GHz)p
-Ft(")p Fj(,)i Ft(")p Fj(4.0E9)d(Hz)p Ft(")p Fj(,)j(etc.)227
-2042 y(When)d(getting)g(the)g(v)-5 b(alue)24 b(of)h(this)g(attribute,)g
-(the)g(returned)f(v)-5 b(alue)25 b(is)f(alw)n(a)n(ys)f(in)i(units)g(of)
-f(GHz.)37 b(The)24 b(default)227 2141 y(v)-5 b(alue)28
-b(for)f(this)h(attribute)f(is)h(4)f(GHz.)0 2301 y Fd(T)m(yp)s(e:)227
-2401 y Fj(Floating)g(p)r(oin)n(t.)0 2560 y Fd(Class)k(Applicabilit)m
-(y:)259 2707 y(DSBSp)s(ecF)-8 b(rame)427 2807 y Fj(All)28
-b(DSBSp)r(ecF)-7 b(rames)28 b(ha)n(v)n(e)e(this)i(attribute.)p
-0 3016 V 0 3148 a Fz(Iden)l(t)591 b Fe(P)m(ermanen)m(t)37
-b(Ob)7 b(ject)37 b(iden)m(ti\014cation)f(string)589 b
-Fz(Iden)l(t)0 3347 y Fd(Description:)44 b Fj(This)30
-b(attribute)f(is)g(lik)n(e)g(the)h(ID)g(attribute,)f(in)h(that)g(it)f
-(con)n(tains)g(a)f(string)h(whic)n(h)g(ma)n(y)g(b)r(e)g(used)h(to)227
-3446 y(iden)n(tify)c(the)f(Ob)5 b(ject)25 b(to)g(whic)n(h)g(it)h(is)f
-(attac)n(hed.)35 b(The)25 b(only)g(di\013erence)g(b)r(et)n(w)n(een)g
-(ID)h(and)f(Iden)n(t)g(is)g(that)g(Iden)n(t)227 3546
-y(is)j(transferred)e(when)i(an)f(Ob)5 b(ject)27 b(is)h(copied,)f(but)i
-(ID)f(is)f(not.)0 3706 y Fd(T)m(yp)s(e:)227 3805 y Fj(String.)0
-3965 y Fd(Class)k(Applicabilit)m(y:)259 4112 y(Ob)5 b(ject)427
-4211 y Fj(All)28 b(Ob)5 b(jects)28 b(ha)n(v)n(e)e(this)i(attribute.)p
-0 4421 V 0 4551 a Fz(ImagF)-11 b(req)816 4552 y Fe(The)39
-b(image)e(sideband)h(equiv)-7 b(alen)m(t)37 b(of)i(the)f(rest)1644
-4667 y(frequency)3224 4551 y Fz(ImagF)-11 b(req)0 4866
-y Fd(Description:)44 b Fj(This)24 b(is)g(a)g(read-only)e(attribute)i
-(giving)f(the)i(frequency)e(whic)n(h)h(corresp)r(onds)e(to)i(the)h
-(rest)e(frequency)227 4966 y(but)28 b(is)g(in)g(the)g(opp)r(osite)f
-(sideband.)227 5095 y(The)i(v)-5 b(alue)29 b(is)g(calculated)f(b)n(y)h
-(\014rst)f(transforming)g(the)h(rest)f(frequency)h(\(giv)n(en)f(b)n(y)g
-(the)i(RestF)-7 b(req)28 b(attribute\))227 5195 y(from)f(the)g
-(standard)f(of)h(rest)f(of)h(the)g(source)f(\(giv)n(en)g(b)n(y)h(the)g
-(SourceV)-7 b(el)26 b(and)h(SourceVRF)f(attributes\))h(to)g(the)227
-5295 y(standard)i(of)h(rest)f(of)h(the)g(observ)n(er)e(\(i.e.)44
-b(the)30 b(top)r(o)r(cen)n(tric)f(standard)g(of)h(rest\).)43
-b(The)30 b(resulting)f(top)r(o)r(cen)n(tric)227 5394
-y(frequency)h(is)g(assumed)g(to)g(b)r(e)h(in)f(the)h(same)f(sideband)g
-(as)g(the)g(v)-5 b(alue)30 b(giv)n(en)g(for)g(the)g(DSBCen)n(tre)g
-(attribute)227 5494 y(\(the)c Ft(")p Fj(observ)n(ed)p
-Ft(")d Fj(sideband\),)j(and)f(is)h(transformed)e(to)h(the)h(other)e
-(sideband)i(\(the)g Ft(")p Fj(image)p Ft(")d Fj(sideband\).)37
-b(The)227 5593 y(new)32 b(frequency)f(is)h(con)n(v)n(erted)f(bac)n(k)f
-(to)i(the)g(standard)f(of)h(rest)f(of)h(the)g(source,)g(and)g(the)g
-(resulting)f(v)-5 b(alue)32 b(is)227 5693 y(returned)27
-b(as)g(the)h(attribute)g(v)-5 b(alue,)28 b(in)g(units)g(of)f(GHz.)p
-eop end
-%%Page: 426 436
-TeXDict begin 426 435 bop 0 52 a FF(426)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fd(T)m(yp)s(e:)227 451 y Fj(Floating)c(p)r(oin)n(t,)h(read-only)-7
-b(.)0 602 y Fd(Class)31 b(Applicabilit)m(y:)259 740 y(DSBSp)s(ecF)-8
-b(rame)427 840 y Fj(All)28 b(DSBSp)r(ecF)-7 b(rames)28
-b(ha)n(v)n(e)e(this)i(attribute.)p 0 1041 3780 12 v 0
-1173 a Fz(In)l(traFlag)582 b Fe(In)m(traMap)37 b(iden)m(ti\014cation)f
-(string)578 b Fz(In)l(traFlag)0 1363 y Fd(Description:)44
-b Fj(This)32 b(attribute)g(allo)n(ws)e(an)h(In)n(traMap)f(to)i(b)r(e)g
-(\015agged)e(so)h(that)h(it)f(is)h(distinguishable)f(from)g(other)227
-1463 y(In)n(traMaps.)k(The)24 b(transformation)f(function)i(asso)r
-(ciated)e(with)i(the)f(In)n(traMap)g(ma)n(y)f(then)i(enquire)f(the)h(v)
--5 b(alue)227 1563 y(of)34 b(this)g(attribute)h(and)e(adapt)h(the)g
-(transformation)f(it)h(pro)n(vides)f(according)f(to)i(the)g(particular)
-f(In)n(traMap)227 1662 y(in)n(v)n(olv)n(ed.)227 1788
-y(Although)28 b(this)h(is)f(a)g(string)f(attribute,)h(it)h(ma)n(y)e
-(often)i(b)r(e)f(useful)h(to)f(store)f(n)n(umerical)g(v)-5
-b(alues)28 b(here,)g(enco)r(ded)227 1887 y(as)e(a)h(c)n(haracter)d
-(string,)i(and)h(to)g(use)f(these)h(as)f(data)g(within)h(the)h
-(transformation)d(function.)37 b(Note,)27 b(ho)n(w)n(ev)n(er,)227
-1987 y(that)i(this)f(mec)n(hanism)f(is)h(not)g(suitable)g(for)g
-(transferring)e(large)g(amoun)n(ts)i(of)f(data)h(\(more)f(than)i(ab)r
-(out)e(1000)227 2087 y(c)n(haracters\))33 b(to)h(an)h(In)n(traMap.)57
-b(F)-7 b(or)34 b(that)h(purp)r(ose,)h(global)d(v)-5 b(ariables)34
-b(are)f(recommended,)j(although)e(the)227 2186 y(In)n(traFlag)24
-b(v)-5 b(alue)25 b(can)f(b)r(e)i(used)f(to)g(supplemen)n(t)g(this)h
-(approac)n(h.)34 b(The)25 b(default)g(In)n(traFlag)f(v)-5
-b(alue)25 b(is)g(an)g(empt)n(y)227 2286 y(string.)0 2437
-y Fd(T)m(yp)s(e:)227 2537 y Fj(String.)0 2688 y Fd(Class)31
-b(Applicabilit)m(y:)259 2826 y(In)m(traMap)427 2926 y
-Fj(All)d(In)n(traMaps)f(ha)n(v)n(e)f(this)i(attribute.)0
-3090 y Fd(Notes:)340 3374 y Fi(\017)45 b Fj(A)34 b(pair)f(of)g(In)n
-(traMaps)f(whose)h(transformations)e(ma)n(y)i(p)r(oten)n(tially)g
-(cancel)g(cannot)g(b)r(e)h(simpli\014ed)g(to)427 3473
-y(pro)r(duce)25 b(a)f(UnitMap)i(\(e.g.)36 b(using)24
-b(astSimplify\))i(unless)f(they)g(ha)n(v)n(e)f(the)h(same)f(In)n
-(traFlag)g(v)-5 b(alues.)36 b(The)427 3573 y(test)28
-b(for)f(equalit)n(y)g(is)h(case-sensitiv)n(e.)p 0 3774
-V 0 3905 a Fz(In)l(v)l(ert)1307 3906 y Fe(Mapping)38
-b(in)m(v)m(ersion)f(\015ag)3423 3905 y Fz(In)l(v)l(ert)0
-4096 y Fd(Description:)44 b Fj(This)25 b(attribute)g(con)n(trols)e
-(whic)n(h)i(one)f(of)h(a)f(Mapping's)h(t)n(w)n(o)f(p)r(ossible)g(co)r
-(ordinate)g(transformations)227 4196 y(is)29 b(considered)e(the)i
-Ft(")p Fj(forw)n(ard)p Ft(")d Fj(transformation)g(\(the)j(other)f(b)r
-(eing)h(the)f Ft(")p Fj(in)n(v)n(erse)p Ft(")f Fj(transformation\).)37
-b(If)29 b(the)227 4296 y(attribute)36 b(v)-5 b(alue)36
-b(is)f(zero)g(\(the)h(default\),)j(the)d(Mapping's)f(b)r(eha)n(viour)f
-(will)i(b)r(e)g(the)g(same)g(as)f(when)g(it)i(w)n(as)227
-4395 y(\014rst)29 b(created.)39 b(Ho)n(w)n(ev)n(er,)27
-b(if)i(it)g(is)g(non-zero,)e(its)i(t)n(w)n(o)f(transformations)f(will)i
-(b)r(e)g(in)n(ter-c)n(hanged,)e(so)h(that)h(the)227 4495
-y(Mapping)f(displa)n(ys)e(the)i(in)n(v)n(erse)e(of)i(its)f(original)g
-(b)r(eha)n(viour.)227 4620 y(In)n(v)n(erting)k(the)h(b)r(o)r(olean)g
-(sense)f(of)h(the)g(In)n(v)n(ert)f(attribute)h(will)h(cause)e(the)h(v)
--5 b(alues)32 b(of)f(a)h(Mapping's)f(Nin)i(and)227 4720
-y(Nout)25 b(attributes)g(to)g(b)r(e)g(in)n(terc)n(hanged.)34
-b(The)25 b(v)-5 b(alues)25 b(of)f(its)h(T)-7 b(ranF)g(orw)n(ard)23
-b(and)h(T)-7 b(ranIn)n(v)n(erse)23 b(attributes)h(will)227
-4820 y(also)j(b)r(e)h(in)n(terc)n(hanged.)35 b(This)28
-b(op)r(eration)e(ma)n(y)h(b)r(e)h(p)r(erformed)f(with)h(the)g(astIn)n
-(v)n(ert)f(function.)0 4971 y Fd(T)m(yp)s(e:)227 5071
-y Fj(In)n(teger)g(\(b)r(o)r(olean\).)0 5222 y Fd(Class)k(Applicabilit)m
-(y:)259 5360 y(Mapping)427 5460 y Fj(All)d(Mappings)f(ha)n(v)n(e)g
-(this)h(attribute.)259 5593 y Fd(UnitMap)427 5693 y Fj(The)g(v)-5
-b(alue)27 b(of)h(the)g(In)n(v)n(ert)f(attribute)g(has)g(no)h(e\013ect)g
-(on)f(the)h(b)r(eha)n(viour)e(of)i(a)f(UnitMap.)p eop
-end
-%%Page: 427 437
-TeXDict begin 427 436 bop 3643 52 a FF(427)259 351 y
-Fd(F)-8 b(rameSet)427 451 y Fj(In)n(v)n(erting)35 b(the)h(b)r(o)r
-(olean)e(sense)h(of)h(the)g(In)n(v)n(ert)f(attribute)g(for)g(a)g(F)-7
-b(rameSet)36 b(will)f(cause)g(its)h(base)f(and)427 551
-y(curren)n(t)25 b(F)-7 b(rames)25 b(\(and)h(its)f(Base)g(and)g(Curren)n
-(t)g(attributes\))h(to)f(b)r(e)h(in)n(terc)n(hanged.)35
-b(This,)26 b(in)g(turn,)g(ma)n(y)427 650 y(a\013ect)31
-b(other)f(prop)r(erties)g(and)g(attributes)h(of)f(the)h(F)-7
-b(rameSet)31 b(\(suc)n(h)f(as)g(Nin,)i(Nout,)g(Naxes,)e(T)-7
-b(ranF)g(or-)427 750 y(w)n(ard,)24 b(T)-7 b(ranIn)n(v)n(erse,)23
-b(etc.\).)37 b(The)24 b(In)n(v)n(ert)g(attribute)g(of)h(a)f(F)-7
-b(rameSet)24 b(is)h(not)f(itself)h(a\013ected)g(b)n(y)f(selecting)427
-849 y(a)j(new)h(base)f(or)g(curren)n(t)g(F)-7 b(rame.)p
-0 1070 3780 12 v 0 1202 a Fz(In)l(visible)521 b Fe(Dra)m(w)38
-b(graphics)f(using)i(in)m(visible)e(ink?)519 b Fz(In)l(visible)0
-1412 y Fd(Description:)44 b Fj(This)31 b(attribute)g(con)n(trols)e(the)
-h(app)r(earance)f(of)i(all)f(graphics)f(pro)r(duced)i(b)n(y)f(Plot)g
-(metho)r(ds)h(b)n(y)f(de-)227 1512 y(termining)e(whether)f(graphics)f
-(should)i(b)r(e)g(visible)f(or)g(in)n(visible.)227 1647
-y(If)37 b(the)f(In)n(visible)g(v)-5 b(alue)36 b(of)g(a)g(Plot)g(is)g
-(non-zero,)h(then)f(all)g(the)h(Plot)e(metho)r(ds)i(whic)n(h)f
-(normally)f(generate)227 1747 y(graphical)23 b(output)h(do)g(not)g(do)f
-(so)h(\(y)n(ou)f(can)h(think)g(of)g(them)h(dra)n(wing)d(with)i
-Ft(")p Fj(in)n(visible)g(ink)p Ft(")p Fj(\).)35 b(Suc)n(h)24
-b(metho)r(ds)227 1846 y(do,)32 b(ho)n(w)n(ev)n(er,)f(con)n(tin)n(ue)g
-(to)g(do)g(all)g(the)h(calculations)e(whic)n(h)i(w)n(ould)f(b)r(e)g
-(needed)h(to)f(pro)r(duce)g(the)h(graphics.)227 1946
-y(In)g(particular,)g(the)g(b)r(ounding)f(b)r(o)n(x)g(enclosing)g(the)h
-(graphics)e(is)i(still)g(calculated)f(and)h(can)f(b)r(e)h(retriev)n(ed)
-e(as)227 2046 y(normal)22 b(using)h(astBoundingBo)n(x.)33
-b(The)23 b(default)g(v)-5 b(alue)23 b(is)g(zero,)g(resulting)f(in)i
-(all)e(metho)r(ds)h(dra)n(wing)f(graphics)227 2145 y(as)27
-b(normal,)g(using)g(visible)h(ink.)0 2316 y Fd(T)m(yp)s(e:)227
-2416 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0 2587 y Fd(Class)k
-(Applicabilit)m(y:)259 2745 y(Plot)427 2844 y Fj(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)p 0 3065 V 0 3197 a Fz(IsLinear)832
-b Fe(Is)39 b(the)g(Mapping)f(linear?)830 b Fz(IsLinear)0
-3407 y Fd(Description:)44 b Fj(This)22 b(attribute)g(indicates)f
-(whether)g(a)g(Mapping)h(is)f(an)g(instance)g(of)h(a)f(class)g(that)g
-(alw)n(a)n(ys)f(represen)n(ts)227 3506 y(a)j(linear)g(transformation.)
-33 b(Note,)25 b(some)d(Mapping)h(classes)f(can)h(represen)n(t)f(linear)
-g(or)h(non-linear)f(transforma-)227 3606 y(tions)29 b(\(the)h(MathMap)e
-(class)g(for)h(instance\).)41 b(Suc)n(h)29 b(classes)e(ha)n(v)n(e)h(a)g
-(zero)g(v)-5 b(alue)29 b(for)f(the)i(IsLinear)d(attribute.)227
-3706 y(Sp)r(eci\014c)33 b(instances)g(of)f(suc)n(h)h(classes)e(can)h(b)
-r(e)h(tested)g(for)f(linearit)n(y)g(using)h(the)g(astLinearAppro)n(x)d
-(function.)227 3805 y(AST)p Ft(_)p Fj(LINEARAPPR)n(O)n(X)d(routine.)0
-3976 y Fd(T)m(yp)s(e:)227 4076 y Fj(In)n(teger)g(\(b)r(o)r(olean\),)h
-(read-only)-7 b(.)0 4247 y Fd(Class)31 b(Applicabilit)m(y:)259
-4405 y(Mapping)427 4504 y Fj(All)d(Mappings)f(ha)n(v)n(e)g(this)h
-(attribute.)259 4648 y Fd(CmpMap)427 4748 y Fj(The)23
-b(IsLinear)f(v)-5 b(alue)23 b(for)f(a)h(CmpMap)f(is)h(determined)g(b)n
-(y)g(the)g(classes)f(of)h(the)g(encapsulated)f(Mappings.)427
-4847 y(F)-7 b(or)34 b(instance,)i(a)e(CmpMap)g(that)h(com)n(bines)e(a)h
-(Zo)r(omMap)g(and)g(a)g(ShiftMap)h(will)f(ha)n(v)n(e)f(a)h(non-zero)427
-4947 y(v)-5 b(alue)31 b(for)f(its)g(IsLinear)g(attribute,)h(but)g(a)f
-(CmpMap)h(that)g(con)n(tains)e(a)h(MathMap)h(will)f(ha)n(v)n(e)g(a)g(v)
--5 b(alue)427 5046 y(of)28 b(zero)e(for)h(its)h(IsLinear)f(attribute.)
-259 5190 y Fd(F)-8 b(rame)427 5290 y Fj(The)28 b(IsLinear)e(v)-5
-b(alue)28 b(for)f(a)g(F)-7 b(rame)27 b(is)h(1)f(\(since)g(a)h(F)-7
-b(rame)27 b(is)g(equiv)-5 b(alen)n(t)28 b(to)f(a)g(UnitMap\).)259
-5433 y Fd(F)-8 b(rameSet)427 5533 y Fj(The)26 b(IsLinear)f(v)-5
-b(alue)25 b(for)g(a)h(F)-7 b(rameSet)25 b(is)h(obtained)f(from)g(the)i
-(Mapping)e(from)g(the)h(base)f(F)-7 b(rame)26 b(to)f(the)427
-5632 y(curren)n(t)i(F)-7 b(rame.)p eop end
-%%Page: 428 438
-TeXDict begin 428 437 bop 0 52 a FF(428)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a Fz(IsSimple)518 b Fe(Has)38 b(the)h(Mapping)f(b)s
-(een)h(simpli\014ed?)516 b Fz(IsSimple)0 662 y Fd(Description:)44
-b Fj(This)19 b(attribute)g(indicates)g(whether)g(a)g(Mapping)f(has)h(b)
-r(een)g(simpli\014ed)h(b)n(y)e(the)i(astSimplify)f(metho)r(d.)227
-761 y(If)34 b(the)g(IsSimple)g(v)-5 b(alue)34 b(is)g(non-zero,)f(then)h
-(the)g(Mapping)g(has)f(b)r(een)h(simpli\014ed)g(and)g(so)f(there)g(is)h
-(nothing)227 861 y(to)39 b(b)r(e)g(gained)f(b)n(y)h(simplifying)g(it)g
-(again.)69 b(Indeed,)42 b(the)d(astSimplify)g(metho)r(d)g(will)g
-(immediately)g(return)227 961 y(the)e(Mapping)f(unc)n(hanged)g(if)h
-(the)g(IsSimple)g(attribute)g(indicates)f(that)h(the)g(Mapping)f(has)g
-(already)f(b)r(een)227 1060 y(simpli\014ed.)0 1205 y
-Fd(T)m(yp)s(e:)227 1304 y Fj(In)n(teger)27 b(\(b)r(o)r(olean\),)h
-(read-only)-7 b(.)0 1449 y Fd(Class)31 b(Applicabilit)m(y:)259
-1580 y(Mapping)427 1680 y Fj(All)d(Mappings)f(ha)n(v)n(e)g(this)h
-(attribute.)259 1808 y Fd(F)-8 b(rame)427 1907 y Fj(All)32
-b(classes)e(of)h(F)-7 b(rame)30 b(return)h(zero)f(for)h(the)g(IsSimple)
-g(attribute.)48 b(This)31 b(is)g(b)r(ecause)g(c)n(hanges)e(can)i(b)r(e)
-427 2007 y(made)g(to)h(a)f(F)-7 b(rame)31 b(whic)n(h)g(a\013ect)g(the)h
-(Mapping)f(represen)n(ted)f(b)n(y)h(the)h(F)-7 b(rame,)32
-b(and)f(so)g(there)g(can)g(b)r(e)427 2107 y(no)c(guaran)n(tee)e(that)i
-(the)g(Mapping)f(ma)n(y)h(not)f(need)h(re-simplifying.)36
-b(Most)27 b(non-F)-7 b(rame)25 b(Mappings,)i(on)427 2206
-y(the)32 b(other)e(hand,)i(are)e(imm)n(utable)i(and)f(so)f(when)h(they)
-h(are)e(simpli\014ed)h(it)h(is)f(certain)f(that)h(they)h(w)n(eill)427
-2306 y(remain)27 b(in)h(a)f(simple)h(state.)p 0 2495
-V 0 2626 a Fz(Iw)l(c)498 2627 y Fe(Include)39 b(a)f(F)-10
-b(rame)39 b(represen)m(ting)d(FITS-W)m(CS)j(in)m(termediate)1410
-2742 y(w)m(orld)e(co)s(ordinates?)3576 2626 y Fz(Iw)l(c)0
-2897 y Fd(Description:)44 b Fj(This)26 b(attribute)g(is)g(a)g(b)r(o)r
-(olean)f(v)-5 b(alue)26 b(whic)n(h)g(is)g(used)g(when)g(a)g(F)-7
-b(rameSet)25 b(is)h(read)f(from)h(a)g(FitsChan)227 2997
-y(with)35 b(a)f(foreign)f(FITS)i(enco)r(ding)f(\(e.g.)57
-b(FITS-W)n(CS\))34 b(using)g(astRead.)56 b(If)35 b(it)g(has)e(a)h
-(non-zero)f(v)-5 b(alue)34 b(then)227 3096 y(the)28 b(returned)g(F)-7
-b(rameSet)27 b(will)i(include)f(F)-7 b(rames)27 b(represen)n(ting)f
-Ft(")p Fj(in)n(termediate)h(w)n(orld)g(co)r(ordinates)p
-Ft(")f Fj(\(IW)n(C\).)227 3196 y(These)40 b(F)-7 b(rames)40
-b(will)h(ha)n(v)n(e)e(Domain)i(name)f Ft(")p Fj(IW)n(C)p
-Ft(")g Fj(for)g(primary)f(axis)h(descriptions,)j(and)d
-Ft(")p Fj(IW)n(Ca)p Ft(")f Fj(for)227 3296 y(secondary)20
-b(axis)g(descriptions,)i(where)e Ft(")p Fj(a)p Ft(")g
-Fj(is)h(replaced)f(b)n(y)h(the)h(single)e(alternate)h(axis)f
-(description)h(c)n(haracter,)227 3395 y(as)27 b(used)h(in)g(the)g
-(FITS-W)n(CS)f(header.)36 b(The)28 b(default)g(v)-5 b(alue)28
-b(for)f Ft(")p Fj(Iw)n(c)p Ft(")f Fj(is)h(zero.)227 3517
-y(FITS-W)n(CS)22 b(pap)r(er)g(1)f(de\014nes)h(IW)n(C)g(as)f(a)g
-(Cartesian)g(co)r(ordinate)g(system)g(with)h(one)g(axis)f(for)g(eac)n
-(h)g(W)n(CS)h(axis,)227 3617 y(and)f(is)g(the)g(co)r(ordinate)f(system)
-g(pro)r(duced)h(b)n(y)f(the)h(rotation)f(matrix)g(\(represen)n(ted)g(b)
-n(y)h(FITS)g(k)n(eyw)n(ord)e(PCi)p Ft(_)p Fj(j,)227 3717
-y(CDi)p Ft(_)p Fj(j,)26 b(etc\).)36 b(F)-7 b(or)24 b(instance,)h(for)e
-(a)h(2-D)h(FITS-W)n(CS)f(header)g(describing)f(pro)5
-b(jected)24 b(celestial)g(longitude)g(and)227 3816 y(latitude,)33
-b(the)f(in)n(termediate)g(w)n(orld)e(co)r(ordinates)g(represen)n(t)h
-(o\013sets)g(in)h(degrees)e(from)i(the)g(reference)e(p)r(oin)n(t)227
-3916 y(within)f(the)f(plane)f(of)g(pro)5 b(jection.)0
-4060 y Fd(T)m(yp)s(e:)227 4160 y Fj(In)n(teger)27 b(\(b)r(o)r(olean\).)
-0 4304 y Fd(Class)k(Applicabilit)m(y:)259 4436 y(FitsChan)427
-4536 y Fj(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 4725 V 0 4856 a Fz(KeyError)769 4857 y Fe(Rep)s(ort)38
-b(an)g(error)g(when)g(getting)f(the)i(v)-7 b(alue)38
-b(of)g(a)1156 4971 y(non-existan)m(t)f(KeyMap)h(en)m(try?)3222
-4856 y Fz(KeyError)0 5150 y Fd(Description:)44 b Fj(This)30
-b(attribute)g(is)f(a)g(b)r(o)r(olean)g(v)-5 b(alue)30
-b(whic)n(h)f(con)n(trols)f(ho)n(w)h(the)h(astMapGet...)43
-b(functions)29 b(b)r(eha)n(v)n(e)227 5250 y(if)36 b(the)f(requested)g
-(k)n(ey)f(is)h(not)g(found)h(in)f(the)h(KeyMap.)58 b(If)35
-b(KeyError)d(is)j(zero)f(\(the)i(default\),)i(then)e(these)227
-5349 y(functions)d(will)g(return)f(zero)g(but)h(no)g(error)d(will)j(b)r
-(e)g(rep)r(orted.)51 b(If)34 b(KeyError)29 b(is)k(non-zero,)f(then)h
-(the)g(same)227 5449 y(v)-5 b(alues)27 b(are)g(returned)g(but)h(an)g
-(error)d(is)j(also)e(rep)r(orted.)0 5593 y Fd(T)m(yp)s(e:)227
-5693 y Fj(In)n(teger)h(\(b)r(o)r(olean\).)p eop end
-%%Page: 429 439
-TeXDict begin 429 438 bop 3643 52 a FF(429)0 351 y Fd(Class)31
-b(Applicabilit)m(y:)259 520 y(KeyMap)427 620 y Fj(All)d(KeyMaps)f(ha)n
-(v)n(e)f(this)i(attribute.)p 0 851 3780 12 v 0 983 a
-Fz(L)-11 b(TO\013set)212 b Fe(The)39 b(o\013set)f(from)g(UTC)f(to)h(Lo)
-s(cal)h(Time,)e(in)h(hours)211 b Fz(L)-11 b(TO\013set)0
-1209 y Fd(Description:)44 b Fj(This)d(sp)r(eci\014es)g(the)g(o\013set)g
-(from)g(UTC)g(to)g(Lo)r(cal)f(Time,)k(in)e(hours)e(\(fractional)g
-(hours)g(can)g(b)r(e)227 1308 y(supplied\).)48 b(It)31
-b(is)g(p)r(ositiv)n(e)f(for)h(time)g(zones)f(east)h(of)g(Green)n(wic)n
-(h.)46 b(AST)31 b(uses)f(the)i(\014gure)e(as)g(giv)n(en,)h(without)227
-1408 y(making)c(an)n(y)g(attempt)h(to)g(correct)e(for)h(da)n(yligh)n(t)
-g(sa)n(ving.)35 b(The)28 b(default)g(v)-5 b(alue)27 b(is)h(zero.)0
-1590 y Fd(T)m(yp)s(e:)227 1689 y Fj(Floating)f(p)r(oin)n(t.)0
-1871 y Fd(Class)k(Applicabilit)m(y:)259 2040 y(TimeF)-8
-b(rame)427 2139 y Fj(All)28 b(TimeF)-7 b(rames)27 b(ha)n(v)n(e)g(this)h
-(attribute.)p 0 2371 V 0 2509 a Fz(Lab)t(el\(axis\))1634
-2503 y Fe(Axis)38 b(lab)s(el)3125 2509 y Fz(Lab)t(el\(axis\))0
-2737 y Fd(Description:)44 b Fj(This)20 b(attribute)g(sp)r(eci\014es)g
-(a)g(lab)r(el)g(to)f(b)r(e)i(attac)n(hed)e(to)h(eac)n(h)f(axis)g(of)h
-(a)f(F)-7 b(rame)20 b(when)g(it)g(is)g(represen)n(ted)227
-2837 y(\(e.g.\))37 b(in)28 b(graphical)e(output.)227
-2977 y(If)i(a)f(Lab)r(el)h(v)-5 b(alue)27 b(has)g(not)h(b)r(een)g(set)g
-(for)f(a)g(F)-7 b(rame)27 b(axis,)g(then)h(a)f(suitable)h(default)g(is)
-f(supplied.)0 3159 y Fd(T)m(yp)s(e:)227 3259 y Fj(String.)0
-3441 y Fd(Class)k(Applicabilit)m(y:)259 3609 y(F)-8 b(rame)427
-3709 y Fj(The)31 b(default)h(supplied)f(b)n(y)g(the)g(F)-7
-b(rame)31 b(class)f(is)h(the)g(string)g Ft(")p Fj(Axis)f
-Fl(<)p Fj(n)p Fl(>)p Ft(")p Fj(,)h(where)g Fl(<)p Fj(n)p
-Fl(>)f Fj(is)h(1,)h(2,)f(etc.)427 3808 y(for)c(eac)n(h)g(successiv)n(e)
-f(axis.)259 3957 y Fd(SkyF)-8 b(rame)427 4057 y Fj(The)23
-b(SkyF)-7 b(rame)22 b(class)g(re-de\014nes)g(the)h(default)g(Lab)r(el)f
-(v)-5 b(alue)23 b(\(e.g.)35 b(to)23 b Ft(")p Fj(Righ)n(t)f(ascension)p
-Ft(")f Fj(or)h Ft(")p Fj(Galactic)427 4157 y(latitude)p
-Ft(")p Fj(\))28 b(as)f(appropriate)f(for)h(the)h(particular)e
-(celestial)h(co)r(ordinate)g(system)g(b)r(eing)h(represen)n(ted.)259
-4306 y Fd(TimeF)-8 b(rame)427 4405 y Fj(The)24 b(TimeF)-7
-b(rame)22 b(class)g(re-de\014nes)h(the)g(default)h(Lab)r(el)f(v)-5
-b(alue)23 b(as)g(appropriate)e(for)i(the)g(particular)f(time)427
-4505 y(system)28 b(b)r(eing)f(represen)n(ted.)259 4654
-y Fd(F)-8 b(rameSet)427 4754 y Fj(The)27 b(Lab)r(el)g(attribute)g(of)g
-(a)f(F)-7 b(rameSet)27 b(axis)f(is)g(the)h(same)g(as)f(that)h(of)g(its)
-g(curren)n(t)f(F)-7 b(rame)26 b(\(as)g(sp)r(eci\014ed)427
-4853 y(b)n(y)i(the)g(Curren)n(t)e(attribute\).)0 5047
-y Fd(Notes:)340 5362 y Fi(\017)45 b Fj(Axis)28 b(lab)r(els)f(are)g(in)n
-(tended)h(purely)f(for)g(in)n(terpretation)g(b)n(y)g(h)n(uman)g
-(readers)f(and)i(not)f(b)n(y)h(soft)n(w)n(are.)340 5511
-y Fi(\017)45 b Fj(When)36 b(sp)r(ecifying)f(this)h(attribute)f(b)n(y)g
-(name,)i(it)f(should)f(b)r(e)h(subscripted)f(with)g(the)h(n)n(um)n(b)r
-(er)f(of)g(the)427 5611 y(F)-7 b(rame)27 b(axis)g(to)h(whic)n(h)f(it)h
-(applies.)p eop end
-%%Page: 430 440
-TeXDict begin 430 439 bop 0 52 a FF(430)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 490 a Fz(Lab)t(elA)l(t\(axis\))979 483 y
-Fe(Where)39 b(to)f(place)g(n)m(umerical)f(lab)s(els)h(for)1733
-598 y(a)g(Plot)2975 490 y Fz(Lab)t(elA)l(t\(axis\))0
-770 y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n(trols)e(the)i
-(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 869 y(astGrid)22 b(function\))i(b)n(y)e
-(determining)h(where)f(n)n(umerical)g(axis)g(lab)r(els)g(and)h(asso)r
-(ciated)e(tic)n(k)i(marks)e(are)h(placed.)227 969 y(It)35
-b(tak)n(es)f(a)h(separate)e(v)-5 b(alue)35 b(for)f(eac)n(h)g(ph)n
-(ysical)g(axis)g(of)h(a)f(Plot)g(so)g(that,)j(for)e(instance,)h(the)f
-(setting)g Ft(")p Fj(La-)227 1069 y(b)r(elA)n(t\(2\)=10.0)p
-Ft(")28 b Fj(sp)r(eci\014es)g(where)h(the)g(n)n(umerical)f(lab)r(els)h
-(and)f(tic)n(k)h(marks)f(for)g(the)h(second)g(axis)f(should)g(b)r(e)227
-1168 y(dra)n(wn.)227 1294 y(F)-7 b(or)30 b(eac)n(h)g(axis,)h(the)g(Lab)
-r(elA)n(t)g(v)-5 b(alue)30 b(giv)n(es)g(the)h(v)-5 b(alue)31
-b(on)f(the)h(other)f(axis)g(at)h(whic)n(h)f(n)n(umerical)g(lab)r(els)h
-(and)227 1394 y(tic)n(k)j(marks)f(should)h(b)r(e)h(placed)f(\(remem)n
-(b)r(er)g(that)g(Plots)f(suitable)h(for)g(use)g(with)h(astGrid)f(ma)n
-(y)f(only)h(ha)n(v)n(e)227 1493 y(t)n(w)n(o)29 b(axes\).)43
-b(F)-7 b(or)29 b(example,)h(in)g(a)g(celestial)f(\(RA,Dec\))i(co)r
-(ordinate)e(system,)h(Lab)r(elA)n(t\(1\))g(giv)n(es)e(a)i(Dec)g(v)-5
-b(alue)227 1593 y(whic)n(h)32 b(de\014nes)g(a)f(line)h(\(of)g(constan)n
-(t)f(Dec\))h(along)f(whic)n(h)h(the)g(n)n(umerical)f(RA)h(lab)r(els)g
-(and)f(their)h(asso)r(ciated)227 1692 y(tic)n(k)f(marks)f(will)i(b)r(e)
-g(dra)n(wn.)46 b(Similarly)-7 b(,)32 b(Lab)r(elA)n(t\(2\))g(giv)n(es)e
-(the)h(RA)h(v)-5 b(alue)31 b(at)g(whic)n(h)h(the)f(Dec)h(lab)r(els)f
-(and)227 1792 y(tic)n(ks)c(will)h(b)r(e)g(dra)n(wn.)227
-1918 y(The)34 b(default)h(baha)n(viour)d(is)i(for)g(the)h(Plot)e(to)h
-(generate)f(its)h(o)n(wn)g(p)r(osition)g(for)g(n)n(umerical)f(lab)r
-(els)h(and)g(tic)n(k)227 2017 y(marks.)0 2169 y Fd(T)m(yp)s(e:)227
-2268 y Fj(Floating)27 b(p)r(oin)n(t.)0 2420 y Fd(Class)k(Applicabilit)m
-(y:)259 2559 y(Plot)427 2658 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)0 2822 y Fd(Notes:)340 3107 y Fi(\017)45
-b Fj(The)34 b(Lab)r(elA)n(t)h(v)-5 b(alue)33 b(should)h(use)g(the)h
-(same)e(units)i(as)e(are)g(used)h(in)n(ternally)f(for)h(storing)f(co)r
-(ordinate)427 3206 y(v)-5 b(alues)26 b(on)g(the)h(appropriate)d(axis.)
-36 b(F)-7 b(or)26 b(example,)g(with)h(a)f(celestial)f(co)r(ordinate)g
-(system,)i(the)f(Lab)r(elA)n(t)427 3306 y(v)-5 b(alue)28
-b(should)f(b)r(e)h(in)g(radians,)e(not)i(hours)f(or)f(degrees.)340
-3440 y Fi(\017)45 b Fj(Normally)-7 b(,)23 b(the)g(Lab)r(elA)n(t)g(v)-5
-b(alue)23 b(also)f(determines)g(where)h(the)g(lines)g(represen)n(ting)e
-(co)r(ordinate)h(axes)f(will)427 3540 y(b)r(e)k(dra)n(wn,)f(so)f(that)h
-(the)h(tic)n(k)f(marks)f(will)h(lie)g(on)g(these)g(lines)g(\(but)h
-(also)e(see)h(the)g(Dra)n(wAxes)f(attribute\).)340 3674
-y Fi(\017)45 b Fj(In)32 b(some)f(circumstances,)g(n)n(umerical)g(lab)r
-(els)g(and)g(tic)n(k)h(marks)e(are)g(dra)n(wn)h(around)f(the)i(edges)f
-(of)g(the)427 3773 y(plotting)c(area)e(\(see)h(the)h(Lab)r(elling)f
-(attribute\).)37 b(In)26 b(this)h(case,)f(the)g(v)-5
-b(alue)27 b(of)f(the)h(Lab)r(elA)n(t)f(attribute)h(is)427
-3873 y(ignored.)p 0 4074 V 0 4213 a Fz(Lab)t(elUnits\(axis\))1163
-4206 y Fe(Use)39 b(axis)f(unit)g(descriptions)g(in)1705
-4320 y(a)h(Plot?)2804 4213 y Fz(Lab)t(elUnits\(axis\))0
-4493 y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 4592 y(astGrid)20 b(function\))h(b)n(y)f
-(determining)h(whether)f(the)h(descriptiv)n(e)e(lab)r(els)h(dra)n(wn)g
-(for)g(eac)n(h)f(axis)h(of)g(a)g(Plot)g(should)227 4692
-y(include)k(a)g(description)f(of)h(the)g(units)g(b)r(eing)g(used)g(on)g
-(the)g(axis.)35 b(It)24 b(tak)n(es)f(a)g(separate)f(v)-5
-b(alue)24 b(for)f(eac)n(h)g(ph)n(ysical)227 4792 y(axis)i(of)h(a)g
-(Plot)f(so)h(that,)g(for)g(instance,)g(the)g(setting)g
-Ft(")p Fj(Lab)r(elUnits\(2\)=1)p Ft(")f Fj(sp)r(eci\014es)h(that)g(a)g
-(unit)g(description)227 4891 y(should)i(b)r(e)g(included)g(in)g(the)g
-(lab)r(el)f(for)g(the)h(second)f(axis.)227 5017 y(If)e(the)f(Lab)r
-(elUnits)g(v)-5 b(alue)24 b(of)g(a)g(Plot)f(axis)g(is)h(non-zero,)f(a)h
-(unit)g(description)g(will)g(b)r(e)g(included)h(in)f(the)g(descrip-)227
-5116 y(tiv)n(e)33 b(lab)r(el)g(for)g(that)g(axis,)h(otherwise)e(it)h
-(will)h(b)r(e)f(omitted.)54 b(The)33 b(default)g(b)r(eha)n(viour)f(is)h
-(to)g(include)g(a)g(unit)227 5216 y(description)g(unless)f(the)i
-(curren)n(t)e(F)-7 b(rame)32 b(of)h(the)h(Plot)e(is)h(a)g(SkyF)-7
-b(rame)32 b(represen)n(ting)f(equatorial,)i(ecliptic,)227
-5316 y(galactic)27 b(or)f(sup)r(ergalactic)h(co)r(ordinates,)f(in)i
-(whic)n(h)f(case)g(it)h(is)f(omitted.)0 5467 y Fd(T)m(yp)s(e:)227
-5567 y Fj(In)n(teger)g(\(b)r(o)r(olean\).)0 5718 y Fd(Class)k
-(Applicabilit)m(y:)p eop end
-%%Page: 431 441
-TeXDict begin 431 440 bop 3643 52 a FF(431)259 351 y
-Fd(Plot)427 451 y Fj(All)28 b(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-603 y Fd(Notes:)340 875 y Fi(\017)45 b Fj(The)28 b(text)g(used)f(for)h
-(the)g(unit)g(description)f(is)g(obtained)h(from)f(the)h(Plot's)f
-(Unit\(axis\))h(attribute.)340 998 y Fi(\017)45 b Fj(If)24
-b(no)f(axis)g(is)g(sp)r(eci\014ed,)i(\(e.g.)35 b Ft(")p
-Fj(Lab)r(elUnits)p Ft(")23 b Fj(instead)h(of)f Ft(")p
-Fj(Lab)r(elUnits\(2\))p Ft(")p Fj(\),)h(then)g(a)f Ft(")p
-Fj(set)p Ft(")g Fj(or)f Ft(")p Fj(clear)p Ft(")427 1098
-y Fj(op)r(eration)h(will)i(a\013ect)f(the)h(attribute)f(v)-5
-b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f
-Ft(")p Fj(get)p Ft(")f Fj(or)g Ft(")p Fj(test)p Ft(")h
-Fj(op)r(eration)427 1197 y(will)k(use)g(just)g(the)g(Lab)r
-(elUnits\(1\))g(v)-5 b(alue.)340 1320 y Fi(\017)45 b
-Fj(If)30 b(the)g(curren)n(t)f(F)-7 b(rame)28 b(of)i(the)g(Plot)e(is)i
-(not)f(a)g(SkyF)-7 b(rame,)29 b(but)h(includes)g(axes)e(whic)n(h)i(w)n
-(ere)e(extracted)427 1420 y(from)i(a)g(SkyF)-7 b(rame,)30
-b(then)h(the)f(default)h(b)r(eha)n(viour)e(is)h(to)g(include)g(a)g
-(unit)h(description)f(only)f(for)h(those)427 1520 y(axes)d(whic)n(h)g
-(w)n(ere)g(not)h(extracted)f(from)g(a)g(SkyF)-7 b(rame.)p
-0 1699 3780 12 v 0 1837 a Fz(Lab)t(elUp\(axis\))1192
-1831 y Fe(Dra)m(w)38 b(n)m(umerical)e(Plot)i(lab)s(els)1675
-1930 y(uprigh)m(t?)2947 1837 y Fz(Lab)t(elUp\(axis\))0
-2104 y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 2203 y(astGrid)i(function\))g(b)n(y)g(determining)
-g(whether)g(the)g(n)n(umerical)f(lab)r(els)h(for)f(eac)n(h)h(axis)f(of)
-h(a)f(Plot)g(should)h(b)r(e)227 2303 y(dra)n(wn)22 b(uprigh)n(t)h(or)f
-(not.)35 b(It)23 b(tak)n(es)f(a)h(separate)e(v)-5 b(alue)23
-b(for)f(eac)n(h)g(ph)n(ysical)g(axis)g(of)h(a)g(Plot)f(so)g(that,)i
-(for)f(instance,)227 2403 y(the)34 b(setting)g Ft(")p
-Fj(Lab)r(elUp\(2\)=1)p Ft(")e Fj(sp)r(eci\014es)h(that)h(n)n(umerical)f
-(lab)r(els)g(for)g(the)h(second)f(axis)f(should)i(b)r(e)g(dra)n(wn)227
-2502 y(uprigh)n(t.)227 2622 y(If)24 b(the)f(Lab)r(elUp)h(v)-5
-b(alue)23 b(of)g(a)g(Plot)f(axis)h(is)g(non-zero,)f(it)i(causes)e(n)n
-(umerical)g(lab)r(els)h(for)g(that)g(axis)g(to)g(b)r(e)g(plotted)227
-2721 y(uprigh)n(t)30 b(\(i.e.)45 b(as)30 b(normal,)g(horizon)n(tal)e
-(text\),)k(otherwise)d(lab)r(els)h(are)f(dra)n(wn)g(parallel)g(to)i
-(the)f(axis)g(to)g(whic)n(h)227 2821 y(they)e(apply)-7
-b(.)227 2941 y(The)30 b(default)h(is)f(to)g(pro)r(duce)g(uprigh)n(t)g
-(lab)r(els)g(if)g(the)h(lab)r(els)f(are)f(placed)h(around)f(the)h(edge)
-g(of)g(the)h(plot,)g(and)227 3040 y(to)g(pro)r(duce)g(lab)r(els)g(that)
-h(follo)n(w)e(the)i(axes)e(if)i(the)f(lab)r(els)g(are)f(placed)h
-(within)h(the)g(in)n(terior)e(of)h(the)g(plot)h(\(see)227
-3140 y(attribute)c(Lab)r(elling\).)0 3279 y Fd(T)m(yp)s(e:)227
-3379 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0 3518 y Fd(Class)k
-(Applicabilit)m(y:)259 3645 y(Plot)427 3745 y Fj(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)0 3896 y Fd(Notes:)340 4169 y
-Fi(\017)45 b Fj(In)32 b(some)f(circumstances,)g(n)n(umerical)g(lab)r
-(els)g(and)g(tic)n(k)h(marks)e(are)g(dra)n(wn)h(around)f(the)i(edges)f
-(of)g(the)427 4269 y(plotting)g(area)e(\(see)i(the)g(Lab)r(elling)f
-(attribute\).)47 b(In)31 b(this)g(case,)f(the)h(v)-5
-b(alue)31 b(of)f(the)h(Lab)r(elUp)g(attribute)427 4368
-y(is)d(ignored.)340 4491 y Fi(\017)45 b Fj(If)36 b(no)e(axis)h(is)g(sp)
-r(eci\014ed,)i(\(e.g.)59 b Ft(")p Fj(Lab)r(elUp)p Ft(")34
-b Fj(instead)h(of)g Ft(")p Fj(Lab)r(elUp\(2\))p Ft(")p
-Fj(\),)i(then)e(a)g Ft(")p Fj(set)p Ft(")f Fj(or)g Ft(")p
-Fj(clear)p Ft(")427 4591 y Fj(op)r(eration)23 b(will)i(a\013ect)f(the)h
-(attribute)f(v)-5 b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h
-(a)f Ft(")p Fj(get)p Ft(")f Fj(or)g Ft(")p Fj(test)p
-Ft(")h Fj(op)r(eration)427 4690 y(will)k(use)g(just)g(the)g(Lab)r
-(elUp\(1\))g(v)-5 b(alue.)p 0 4870 V 0 5001 a Fz(Lab)t(elling)255
-b Fe(Lab)s(el)38 b(and)h(tic)m(k)f(placemen)m(t)f(option)g(for)h(a)g
-(Plot)252 b Fz(Lab)t(elling)0 5175 y Fd(Description:)44
-b Fj(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)
-h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-5275 y(astGrid)k(function\))g(b)n(y)g(determining)f(the)i(strategy)d
-(for)h(placing)g(n)n(umerical)g(lab)r(els)h(and)f(tic)n(k)h(marks)f
-(for)g(a)227 5374 y(Plot.)227 5494 y(If)21 b(the)g(Lab)r(elling)f(v)-5
-b(alue)20 b(of)g(a)g(Plot)g(is)g Ft(")p Fj(exterior)p
-Ft(")e Fj(\(the)j(default\),)i(then)e(n)n(umerical)e(lab)r(els)h(and)h
-(their)f(asso)r(ciated)227 5593 y(tic)n(k)30 b(marks)e(are)h(placed)g
-(around)f(the)i(edges)f(of)h(the)f(plotting)h(area,)f(if)h(p)r
-(ossible.)42 b(If)30 b(this)g(is)f(not)h(p)r(ossible,)f(or)227
-5693 y(if)f(the)g(Lab)r(elling)g(v)-5 b(alue)27 b(is)h
-Ft(")p Fj(in)n(terior)p Ft(")p Fj(,)d(then)j(they)g(are)f(placed)g
-(along)f(grid)h(lines)h(inside)f(the)h(plotting)g(area.)p
-eop end
-%%Page: 432 442
-TeXDict begin 432 441 bop 0 52 a FF(432)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fd(T)m(yp)s(e:)227 451 y Fj(String.)0 606 y Fd(Class)g(Applicabilit)m
-(y:)259 747 y(Plot)427 847 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)0 1014 y Fd(Notes:)340 1302 y Fi(\017)45
-b Fj(The)25 b(Lab)r(elA)n(t\(axis\))f(attribute)g(ma)n(y)f(b)r(e)i
-(used)f(to)g(determine)g(the)h(exact)f(placemen)n(t)g(of)g(lab)r(els)g
-(and)g(tic)n(k)427 1401 y(marks)j(that)h(are)e(dra)n(wn)h(inside)h(the)
-f(plotting)h(area.)p 0 1606 3780 12 v 0 1738 a Fz(LatAxis)781
-b Fe(Index)40 b(of)e(the)g(latitude)f(axis)780 b Fz(LatAxis)0
-1913 y Fd(Description:)44 b Fj(This)26 b(read-only)d(attribute)j(giv)n
-(es)e(the)i(index)g(\(1)f(or)f(2\))i(of)f(the)h(latitude)g(axis)e
-(within)j(the)e(SkyF)-7 b(rame)227 2013 y(\(taking)28
-b(in)n(to)f(accoun)n(t)g(an)n(y)f(curren)n(t)h(axis)g(p)r(erm)n
-(utations\).)0 2167 y Fd(T)m(yp)s(e:)227 2267 y Fj(In)n(teger.)0
-2422 y Fd(Class)k(Applicabilit)m(y:)259 2563 y(SkyF)-8
-b(rame)427 2663 y Fj(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i
-(attribute.)p 0 2868 V 0 2999 a Fz(ListSize)612 b Fe(Num)m(b)s(er)38
-b(of)g(p)s(oin)m(ts)g(in)h(a)f(P)m(oin)m(tList)609 b
-Fz(ListSize)0 3193 y Fd(Description:)44 b Fj(This)34
-b(is)g(a)g(read-only)e(attribute)j(giving)e(the)h(n)n(um)n(b)r(er)g(of)
-g(p)r(oin)n(ts)g(in)h(a)e(P)n(oin)n(tList.)56 b(This)34
-b(v)-5 b(alue)34 b(is)227 3293 y(determined)28 b(when)g(the)g(P)n(oin)n
-(tList)e(is)i(created.)0 3448 y Fd(T)m(yp)s(e:)227 3547
-y Fj(In)n(teger,)f(read-only)-7 b(.)0 3702 y Fd(Class)31
-b(Applicabilit)m(y:)259 3844 y(P)m(oin)m(tList)427 3943
-y Fj(All)d(P)n(oin)n(tLists)f(ha)n(v)n(e)f(this)i(attribute.)p
-0 4148 V 0 4286 a Fz(LogGap\(axis\))1003 4280 y Fe(In)m(terv)-7
-b(al)37 b(b)s(et)m(w)m(een)h(ma)7 b(jor)37 b(axis)h(v)-7
-b(alues)1666 4394 y(of)39 b(a)f(Plot)2987 4286 y Fz(LogGap\(axis\))0
-4570 y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 4669 y(astGrid)k(function\))i(b)n(y)e(determining)
-g(the)h(logarithmic)f(in)n(terv)-5 b(al)34 b(b)r(et)n(w)n(een)g(the)h
-Ft(")p Fj(ma)5 b(jor)p Ft(")33 b Fj(axis)g(v)-5 b(alues)35
-b(of)f(a)227 4769 y(Plot,)42 b(at)e(whic)n(h)f(\(for)g(example\))h(ma)5
-b(jor)38 b(tic)n(k)i(marks)e(are)h(dra)n(wn.)71 b(It)40
-b(tak)n(es)f(a)g(separate)f(v)-5 b(alue)39 b(for)g(eac)n(h)227
-4868 y(ph)n(ysical)31 b(axis)f(of)i(the)f(Plot)g(so)g(that,)i(for)d
-(instance,)i(the)g(setting)g Ft(")p Fj(LogGap\(2\)=100.0)p
-Ft(")27 b Fj(sp)r(eci\014es)k(the)h(ratio)227 4968 y(b)r(et)n(w)n(een)
-25 b(adjacen)n(t)e(ma)5 b(jor)23 b(v)-5 b(alues)24 b(along)f(the)i
-(second)f(axis.)35 b(The)24 b(LogGap)f(attribute)h(is)h(only)f(used)g
-(when)g(the)227 5068 y(LogTic)n(ks)31 b(attribute)h(indicates)h(that)f
-(the)h(spacing)f(b)r(et)n(w)n(een)g(ma)5 b(jor)31 b(axis)h(v)-5
-b(alues)32 b(is)g(to)g(b)r(e)h(logarithmic.)50 b(If)227
-5167 y(ma)5 b(jor)27 b(axis)f(v)-5 b(alues)28 b(are)e(linearly)h
-(spaced)g(then)h(the)g(gap)f(is)g(sp)r(eci\014ed)h(using)f(attribute)h
-(Gap.)227 5295 y(The)37 b(LogGap)e(v)-5 b(alue)36 b(supplied)h(will)g
-(b)r(e)f(rounded)g(to)g(the)h(nearest)f(p)r(o)n(w)n(er)f(of)h(10.)63
-b(The)36 b(recipro)r(cal)f(of)h(the)227 5394 y(supplied)c(v)-5
-b(alue)31 b(ma)n(y)g(b)r(e)g(used)h(if)f(this)h(is)f(necessary)f(to)h
-(pro)r(duce)g(usable)g(ma)5 b(jor)30 b(axis)g(v)-5 b(alues.)48
-b(If)31 b(a)g(zero)f(or)227 5494 y(negativ)n(e)23 b(v)-5
-b(alue)24 b(is)g(supplied,)h(an)f(error)e(will)j(b)r(e)f(rep)r(orted)f
-(when)i(the)f(grid)f(is)h(dra)n(wn.)35 b(The)24 b(default)h(b)r(eha)n
-(viour)227 5593 y(is)j(for)f(the)h(Plot)f(to)h(generate)e(its)i(o)n(wn)
-f(LogGap)f(v)-5 b(alue)28 b(when)g(required,)f(based)g(on)g(the)h
-(range)e(of)i(axis)f(v)-5 b(alues)227 5693 y(to)28 b(b)r(e)g(represen)n
-(ted.)p eop end
-%%Page: 433 443
-TeXDict begin 433 442 bop 3643 52 a FF(433)0 351 y Fd(T)m(yp)s(e:)227
-451 y Fj(Floating)27 b(p)r(oin)n(t.)0 602 y Fd(Class)k(Applicabilit)m
-(y:)259 741 y(Plot)427 841 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)0 1005 y Fd(Notes:)340 1289 y Fi(\017)45
-b Fj(The)28 b(LogGap)e(v)-5 b(alue)28 b(is)f(a)g(ratio)g(b)r(et)n(w)n
-(een)h(axis)e(v)-5 b(alues)28 b(and)f(is)h(therefore)e(dimensionless.)
-340 1423 y Fi(\017)45 b Fj(If)38 b(no)g(axis)f(is)h(sp)r(eci\014ed,)i
-(\(e.g.)67 b Ft(")p Fj(LogGap)p Ft(")36 b Fj(instead)i(of)f
-Ft(")p Fj(LogGap\(2\))p Ft(")p Fj(\),)i(then)f(a)g Ft(")p
-Fj(set)p Ft(")f Fj(or)f Ft(")p Fj(clear)p Ft(")427 1523
-y Fj(op)r(eration)23 b(will)i(a\013ect)f(the)h(attribute)f(v)-5
-b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f
-Ft(")p Fj(get)p Ft(")f Fj(or)g Ft(")p Fj(test)p Ft(")h
-Fj(op)r(eration)427 1622 y(will)k(use)g(just)g(the)g(LogGap\(1\))e(v)-5
-b(alue.)p 0 1824 3780 12 v 0 1962 a Fz(LogLab)t(el\(axis\))1203
-1956 y Fe(Use)39 b(exp)s(onen)m(tial)e(format)f(for)1330
-2070 y(n)m(umerical)g(axis)i(lab)s(els?)2909 1962 y Fz(LogLab)t
-(el\(axis\))0 2242 y Fd(Description:)44 b Fj(This)30
-b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h(annotated)f
-(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227 2342
-y(astGrid)g(function\))i(b)n(y)f(determining)f(whether)h(the)g(n)n
-(umerical)f(axis)g(lab)r(els)g(should)h(b)r(e)g(in)g(normal)f(decimal)
-227 2442 y(form)20 b(or)g(should)g(b)r(e)h(represen)n(ted)f(as)f(10)h
-(raised)f(to)i(the)g(appropriate)d(p)r(o)n(w)n(er.)34
-b(That)20 b(is,)i(an)e(axis)g(v)-5 b(alue)20 b(of)h(1000.0)227
-2541 y(will)28 b(b)r(e)g(dra)n(wn)f(as)g Ft(")p Fj(1000.0)p
-Ft(")e Fj(if)j(LogLab)r(el)f(is)h(zero,)e(but)j(as)e
-Ft(")p Fj(10)p Fi(^)p Fj(3)p Ft(")f Fj(if)i(LogLab)r(el)f(is)g
-(non-zero.)36 b(If)28 b(graphical)227 2641 y(escap)r(e)j(sequences)g
-(are)g(supp)r(orted)h(\(see)f(attribute)h(Escap)r(e\),)h(the)f(p)r(o)n
-(w)n(er)e(in)i(suc)n(h)g(exp)r(onen)n(tial)f(lab)r(els)g(will)227
-2741 y(b)r(e)d(dra)n(wn)f(as)g(a)g(small)g(sup)r(erscript)g(instead)h
-(of)f(using)g(a)h Ft(")p Fi(^)p Ft(")f Fj(c)n(haracter)e(to)j(represen)
-n(t)e(exp)r(onen)n(tiation.)227 2866 y(The)e(default)g(is)f(to)g(pro)r
-(duce)g(exp)r(onen)n(tial)g(lab)r(els)g(if)h(the)g(ma)5
-b(jor)22 b(tic)n(k)i(marks)e(are)g(logarithmically)g(spaced)h(\(see)227
-2966 y(the)28 b(LogTic)n(ks)e(attribute\).)0 3117 y Fd(T)m(yp)s(e:)227
-3217 y Fj(In)n(teger)h(\(b)r(o)r(olean\).)0 3369 y Fd(Class)k
-(Applicabilit)m(y:)259 3507 y(Plot)427 3607 y Fj(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)0 3771 y Fd(Notes:)340 4055 y
-Fi(\017)45 b Fj(If)33 b(no)e(axis)g(is)h(sp)r(eci\014ed,)h(\(e.g.)49
-b Ft(")p Fj(LogLab)r(el)p Ft(")30 b Fj(instead)i(of)g
-Ft(")p Fj(LogLab)r(el\(2\))p Ft(")p Fj(\),)f(then)h(a)g
-Ft(")p Fj(set)p Ft(")f Fj(or)f Ft(")p Fj(clear)p Ft(")427
-4155 y Fj(op)r(eration)23 b(will)i(a\013ect)f(the)h(attribute)f(v)-5
-b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f
-Ft(")p Fj(get)p Ft(")f Fj(or)g Ft(")p Fj(test)p Ft(")h
-Fj(op)r(eration)427 4255 y(will)k(use)g(just)g(the)g(LogLab)r(el\(1\))e
-(v)-5 b(alue.)p 0 4456 V 0 4594 a Fz(LogPlot\(axis\))1020
-4588 y Fe(Map)39 b(the)f(plot)g(logarithmically)33 b(on)m(to)1605
-4702 y(the)39 b(screen?)2984 4594 y Fz(LogPlot\(axis\))0
-4870 y Fd(Description:)44 b Fj(This)19 b(attribute)g(con)n(trols)e(the)
-h(app)r(earance)f(of)i(all)f(graphics)f(pro)r(duced)i(b)n(y)f(the)h
-(Plot,)g(b)n(y)g(determining)227 4970 y(whether)j(the)g(axes)f(of)g
-(the)h(plotting)g(surface)f(are)g(mapp)r(ed)h(logarithmically)e(or)g
-(linearly)h(on)n(to)g(the)h(base)f(F)-7 b(rame)227 5069
-y(of)32 b(the)f(F)-7 b(rameSet)31 b(supplied)h(when)f(the)h(Plot)f(w)n
-(as)f(constructed.)47 b(It)32 b(tak)n(es)e(a)h(separate)f(v)-5
-b(alue)31 b(for)g(eac)n(h)f(axis)227 5169 y(of)39 b(the)f(graphics)f
-(co)r(ordinate)g(system)h(\(i.e.)70 b(the)38 b(base)g(F)-7
-b(rame)38 b(in)g(the)h(Plot\))f(so)f(that,)42 b(for)37
-b(instance,)k(the)227 5269 y(setting)32 b Ft(")p Fj(LogPlot\(2\)=1)p
-Ft(")c Fj(sp)r(eci\014es)j(that)h(the)f(second)g(axis)g(of)g(the)h
-(graphics)e(co)r(ordinate)g(system)h(\(usually)227 5368
-y(the)d(v)n(ertical)e(axis\))h(should)g(b)r(e)h(mapp)r(ed)g
-(logarithmically)d(on)n(to)i(the)h(second)f(axis)f(of)i(the)f(base)g(F)
--7 b(rame)27 b(of)g(the)227 5468 y(F)-7 b(rameSet)28
-b(supplied)g(when)f(the)h(Plot)f(w)n(as)g(constructed.)227
-5593 y(If)32 b(the)g(LogPlot)d(v)-5 b(alue)31 b(of)h(a)f(Plot)f(axis)h
-(is)g(non-zero,)g(it)g(causes)g(that)g(axis)g(to)g(b)r(e)h(mapp)r(ed)f
-(logarithmically)-7 b(,)227 5693 y(otherwise)27 b(\(the)h(default\))h
-(the)f(axis)e(is)i(mapp)r(ed)g(linearly)-7 b(.)p eop
-end
-%%Page: 434 444
-TeXDict begin 434 443 bop 0 52 a FF(434)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fd(T)m(yp)s(e:)227 451 y Fj(In)n(teger)c(\(b)r(o)r(olean\).)0
-595 y Fd(Class)k(Applicabilit)m(y:)259 726 y(Plot)427
-825 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-981 y Fd(Notes:)340 1258 y Fi(\017)45 b Fj(The)c(setting)f(of)g(the)h
-(LogPlot)d(attribute)i(pro)n(vides)f(the)i(default)f(v)-5
-b(alue)41 b(for)e(the)i(related)e(LogTic)n(ks)427 1358
-y(attribute.)48 b(By)30 b(selecting)h(suitable)g(v)-5
-b(alues)30 b(for)h(LogPlot)e(and)i(LogTic)n(ks,)f(it)i(is)e(p)r
-(ossible)h(to)g(ha)n(v)n(e)f(tic)n(k)427 1458 y(marks)22
-b(whic)n(h)g(are)f(ev)n(enly)h(spaced)g(in)h(v)-5 b(alue)22
-b(but)h(whic)n(h)f(are)g(mapp)r(ed)g(logarithmically)f(on)n(to)h(the)g
-(screen)427 1557 y(\(and)28 b(vice-v)n(ersa\).)340 1684
-y Fi(\017)45 b Fj(An)22 b(axis)e(ma)n(y)g(only)h(b)r(e)g(mapp)r(ed)h
-(logarithmically)d(if)j(the)f(visible)g(part)f(of)h(the)h(axis)e(do)r
-(es)h(not)g(include)g(the)427 1784 y(v)-5 b(alue)29 b(zero.)38
-b(The)29 b(visible)f(part)g(of)g(the)h(axis)f(is)g(that)h(part)f(whic)n
-(h)h(is)f(mapp)r(ed)h(on)n(to)f(the)g(plotting)h(area,)427
-1884 y(and)i(is)g(measured)f(within)i(the)f(base)f(F)-7
-b(rame)31 b(of)g(the)g(F)-7 b(rameSet)31 b(whic)n(h)f(w)n(as)g
-(supplied)i(when)f(the)g(Plot)427 1983 y(w)n(as)g(constructed.)49
-b(An)n(y)32 b(attempt)h(to)f(set)f(LogPlot)g(to)g(a)h(non-zero)e(v)-5
-b(alue)32 b(will)g(b)r(e)g(ignored)f(\(without)427 2083
-y(error\))26 b(if)i(the)g(visible)g(part)f(of)g(the)h(axis)f(includes)h
-(the)g(v)-5 b(alue)27 b(zero)340 2210 y Fi(\017)45 b
-Fj(If)38 b(no)g(axis)f(is)g(sp)r(eci\014ed,)k(\(e.g.)67
-b Ft(")p Fj(LogPlot)p Ft(")35 b Fj(instead)j(of)f Ft(")p
-Fj(LogPlot\(2\))p Ft(")p Fj(\),)h(then)h(a)e Ft(")p Fj(set)p
-Ft(")g Fj(or)f Ft(")p Fj(clear)p Ft(")427 2310 y Fj(op)r(eration)23
-b(will)i(a\013ect)f(the)h(attribute)f(v)-5 b(alue)24
-b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f Ft(")p
-Fj(get)p Ft(")f Fj(or)g Ft(")p Fj(test)p Ft(")h Fj(op)r(eration)427
-2409 y(will)k(use)g(just)g(the)g(LogPlot\(1\))e(v)-5
-b(alue.)p 0 2597 3780 12 v 0 2736 a Fz(LogTic)l(ks\(axis\))1184
-2729 y Fe(Space)38 b(the)h(ma)7 b(jor)37 b(tic)m(k)g(marks)1480
-2844 y(logarithmically?)2922 2736 y Fz(LogTic)l(ks\(axis\))0
-3026 y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 3126 y(astGrid)f(function\))h(b)n(y)f(determining)
-f(whether)h(the)h(ma)5 b(jor)28 b(tic)n(k)h(marks)f(should)g(b)r(e)i
-(spaced)e(logarithmically)227 3225 y(or)k(linearly)f(in)i(axis)f(v)-5
-b(alue.)51 b(It)32 b(tak)n(es)g(a)g(separate)f(v)-5 b(alue)32
-b(for)g(eac)n(h)f(ph)n(ysical)h(axis)g(of)g(the)h(Plot)e(so)h(that,)i
-(for)227 3325 y(instance,)22 b(the)g(setting)f Ft(")p
-Fj(LogTic)n(ks\(2\)=1)p Ft(")c Fj(sp)r(eci\014es)k(that)g(the)g(ma)5
-b(jor)20 b(tic)n(k)h(marks)e(on)i(the)g(second)g(axis)f(should)227
-3424 y(b)r(e)28 b(spaced)f(logarithmically)-7 b(.)227
-3546 y(If)35 b(the)g(LogTic)n(ks)e(v)-5 b(alue)34 b(for)g(a)h(ph)n
-(ysical)e(axis)h(is)h(non-zero,)f(the)h(ma)5 b(jor)34
-b(tic)n(k)g(marks)f(on)i(that)g(axis)e(will)i(b)r(e)227
-3646 y(spaced)29 b(logarithmically)e(\(that)j(is,)g(there)f(will)g(b)r
-(e)h(a)f(constan)n(t)g(ratio)f(b)r(et)n(w)n(een)h(the)h(axis)e(v)-5
-b(alues)29 b(at)g(adjacen)n(t)227 3745 y(ma)5 b(jor)33
-b(tic)n(k)g(marks\).)55 b(An)34 b(error)e(will)i(b)r(e)g(rep)r(orted)f
-(if)h(the)g(dynamic)f(range)g(of)g(the)i(axis)d(\(the)j(ratio)e(of)g
-(the)227 3845 y(largest)27 b(to)h(smallest)g(displa)n(y)n(ed)f(axis)g
-(v)-5 b(alue\))28 b(is)h(less)e(than)h(10.0.)38 b(If)28
-b(the)h(LogTic)n(ks)d(v)-5 b(alue)28 b(is)g(zero,)f(the)i(ma)5
-b(jor)227 3945 y(tic)n(k)23 b(marks)f(will)h(b)r(e)g(ev)n(enly)g
-(spaced)f(\(that)h(is,)h(there)f(will)g(b)r(e)g(a)g(constan)n(t)f
-(di\013erence)h(b)r(et)n(w)n(een)g(the)g(axis)f(v)-5
-b(alues)227 4044 y(at)29 b(adjacen)n(t)e(ma)5 b(jor)28
-b(tic)n(k)g(marks\).)38 b(The)29 b(default)g(is)f(to)g(pro)r(duce)g
-(logarithmically)f(spaced)h(tic)n(k)g(marks)f(if)i(the)227
-4144 y(corresp)r(onding)22 b(LogPlot)h(attribute)h(is)g(non-zero)e(and)
-i(the)g(ratio)f(of)h(maxim)n(um)g(axis)f(v)-5 b(alue)24
-b(to)g(minim)n(um)g(axis)227 4244 y(v)-5 b(alue)34 b(is)f(100)g(or)g
-(more.)54 b(If)34 b(either)g(of)g(these)f(conditions)h(is)f(not)h(met,)
-i(the)e(default)g(is)g(to)f(pro)r(duce)g(linearly)227
-4343 y(spaced)27 b(tic)n(k)h(marks.)0 4487 y Fd(T)m(yp)s(e:)227
-4587 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0 4731 y Fd(Class)k
-(Applicabilit)m(y:)259 4861 y(Plot)427 4961 y Fj(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)0 5117 y Fd(Notes:)340 5394 y
-Fi(\017)45 b Fj(The)d(setting)g(of)f(the)h(LogTic)n(ks)e(attribute)i
-(do)r(es)f(not)h(a\013ect)g(the)g(mapping)f(of)h(the)g(plot)f(on)n(to)g
-(the)427 5494 y(screen,)d(whic)n(h)d(is)h(con)n(trolled)f(b)n(y)h
-(attribute)g(LogPlot.)60 b(By)36 b(selecting)f(suitable)h(v)-5
-b(alues)36 b(for)f(LogPlot)427 5593 y(and)c(LogTic)n(ks,)f(it)i(is)f(p)
-r(ossible)g(to)g(ha)n(v)n(e)f(tic)n(k)h(marks)e(whic)n(h)j(are)e(ev)n
-(enly)g(spaced)h(in)g(v)-5 b(alue)31 b(but)h(whic)n(h)427
-5693 y(are)27 b(mapp)r(ed)h(logarithmically)e(on)n(to)g(the)i(screen)f
-(\(and)h(vica-v)n(ersa\).)p eop end
-%%Page: 435 445
-TeXDict begin 435 444 bop 3643 52 a FF(435)340 351 y
-Fi(\017)45 b Fj(An)38 b(error)e(will)i(b)r(e)g(rep)r(orted)f(when)h
-(dra)n(wing)f(an)g(annotated)g(axis)g(grid)g(if)i(the)f(visible)f(part)
-h(of)f(the)427 451 y(ph)n(ysical)27 b(axis)g(includes)h(the)f(v)-5
-b(alue)28 b(zero.)340 581 y Fi(\017)45 b Fj(If)33 b(no)g(axis)f(is)g
-(sp)r(eci\014ed,)j(\(e.g.)52 b Ft(")p Fj(LogTic)n(ks)p
-Ft(")30 b Fj(instead)j(of)f Ft(")p Fj(LogTic)n(ks\(2\))p
-Ft(")p Fj(\),)g(then)h(a)g Ft(")p Fj(set)p Ft(")f Fj(or)f
-Ft(")p Fj(clear)p Ft(")427 681 y Fj(op)r(eration)23 b(will)i(a\013ect)f
-(the)h(attribute)f(v)-5 b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h
-(while)h(a)f Ft(")p Fj(get)p Ft(")f Fj(or)g Ft(")p Fj(test)p
-Ft(")h Fj(op)r(eration)427 780 y(will)k(use)g(just)g(the)g(LogTic)n
-(ks\(1\))e(v)-5 b(alue.)p 0 974 3780 12 v 0 1106 a Fz(LonAxis)717
-b Fe(Index)39 b(of)g(the)f(longitude)f(axis)717 b Fz(LonAxis)0
-1294 y Fd(Description:)44 b Fj(This)22 b(read-only)e(attribute)i(giv)n
-(es)f(the)h(index)g(\(1)f(or)g(2\))h(of)f(the)h(longitude)g(axis)f
-(within)h(the)g(SkyF)-7 b(rame)227 1393 y(\(taking)28
-b(in)n(to)f(accoun)n(t)g(an)n(y)f(curren)n(t)h(axis)g(p)r(erm)n
-(utations\).)0 1540 y Fd(T)m(yp)s(e:)227 1640 y Fj(In)n(teger.)0
-1787 y Fd(Class)k(Applicabilit)m(y:)259 1920 y(SkyF)-8
-b(rame)427 2020 y Fj(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i
-(attribute.)p 0 2214 V 0 2345 a Fz(LutIn)l(terp)398 b
-Fe(Lo)s(ok-up)39 b(table)e(in)m(terp)s(olation)e(metho)s(d)397
-b Fz(LutIn)l(terp)0 2529 y Fd(Description:)44 b Fj(This)22
-b(attribute)g(indicates)f(the)h(metho)r(d)g(to)g(b)r(e)g(used)f(when)h
-(\014nding)g(the)g(output)g(v)-5 b(alue)22 b(of)f(a)g(LutMap)227
-2629 y(for)33 b(an)f(input)i(v)-5 b(alue)33 b(part)g(w)n(a)n(y)e(b)r
-(et)n(w)n(een)i(t)n(w)n(o)g(table)g(en)n(tries.)52 b(If)34
-b(it)f(is)g(set)g(to)g(0)f(\(the)i(default\))g(then)f(linear)227
-2728 y(in)n(terp)r(olation)27 b(is)h(used.)36 b(Otherwise,)27
-b(nearest)g(neigh)n(b)r(our)f(in)n(terp)r(olation)h(is)h(used.)227
-2851 y(Using)f(nearest)f(neigh)n(b)r(our)g(in)n(terp)r(olation)h
-(causes)f(AST)p Ft(__)p Fj(BAD)h(to)g(b)r(e)g(returned)g(for)f(an)n(y)h
-(p)r(oin)n(t)g(whic)n(h)g(falls)227 2951 y(outside)20
-b(the)g(b)r(ounds)g(of)f(the)i(table.)34 b(Linear)19
-b(in)n(terp)r(olation)f(results)i(in)g(an)f(extrap)r(olated)g(v)-5
-b(alue)19 b(b)r(eing)h(returned)227 3051 y(based)27 b(on)h(the)g(t)n(w)
-n(o)e(end)i(en)n(tries)f(in)h(the)g(table.)0 3197 y Fd(T)m(yp)s(e:)227
-3297 y Fj(In)n(teger.)0 3444 y Fd(Class)j(Applicabilit)m(y:)259
-3577 y(LutMap)427 3677 y Fj(All)d(LutMaps)g(ha)n(v)n(e)e(this)i
-(attribute.)p 0 3871 V 0 4009 a Fz(Ma)7 b(jTic)l(kLen\(axis\))1359
-4003 y Fe(Length)38 b(of)h(ma)7 b(jor)36 b(tic)m(k)1469
-4117 y(marks)i(for)g(a)g(Plot)2732 4009 y Fz(Ma)7 b(jTic)l
-(kLen\(axis\))0 4282 y Fd(Description:)44 b Fj(This)30
-b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h(annotated)f
-(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227 4382
-y(astGrid)40 b(function\))h(b)n(y)f(determining)g(the)h(length)f(of)h
-(the)f(ma)5 b(jor)39 b(tic)n(k)h(marks)g(dra)n(wn)f(on)h(the)g(axes)g
-(of)g(a)227 4481 y(Plot.)i(It)30 b(tak)n(es)f(a)g(separate)f(v)-5
-b(alue)29 b(for)g(eac)n(h)g(ph)n(ysical)f(axis)h(of)g(the)h(Plot)f(so)g
-(that,)h(for)f(instance,)h(the)g(setting)227 4581 y Ft(")p
-Fj(Ma)5 b(jTic)n(kLen\(2\)=0)p Ft(")25 b Fj(sp)r(eci\014es)j(the)g
-(length)f(of)h(the)g(ma)5 b(jor)26 b(tic)n(k)i(marks)e(dra)n(wn)h(on)g
-(the)h(second)f(axis.)227 4704 y(The)35 b(Ma)5 b(jTic)n(kLen)33
-b(v)-5 b(alue)34 b(should)g(b)r(e)h(giv)n(en)e(as)h(a)f(fraction)h(of)g
-(the)h(minim)n(um)g(dimension)f(of)g(the)h(plotting)227
-4804 y(area.)56 b(Negativ)n(e)33 b(v)-5 b(alues)34 b(cause)g(ma)5
-b(jor)33 b(tic)n(k)h(marks)f(to)i(b)r(e)f(placed)h(on)f(the)g(outside)g
-(of)h(the)g(corresp)r(onding)227 4903 y(grid)c(line)h(or)f(axis)g
-(\(but)i(sub)5 b(ject)32 b(to)g(an)n(y)f(clipping)g(imp)r(osed)h(b)n(y)
-g(the)g(underlying)f(graphics)f(system\),)j(while)227
-5003 y(p)r(ositiv)n(e)27 b(v)-5 b(alues)28 b(cause)f(them)h(to)f(b)r(e)
-h(placed)f(on)h(the)g(inside.)227 5126 y(The)e(default)g(b)r(eha)n
-(viour)e(dep)r(ends)i(on)f(whether)g(a)g(co)r(ordinate)f(grid)h(is)g
-(dra)n(wn)g(inside)g(the)h(plotting)g(area)e(\(see)227
-5226 y(the)f(Grid)e(attribute\).)36 b(If)22 b(so,)h(the)f(default)g(Ma)
-5 b(jTic)n(kLen)21 b(v)-5 b(alue)22 b(is)g(zero)f(\(so)g(that)h(ma)5
-b(jor)21 b(tic)n(ks)g(are)g(not)h(dra)n(wn\),)227 5325
-y(otherwise)27 b(the)h(default)g(is)f(+0.015.)0 5472
-y Fd(T)m(yp)s(e:)227 5572 y Fj(Floating)g(p)r(oin)n(t.)0
-5718 y Fd(Class)k(Applicabilit)m(y:)p eop end
-%%Page: 436 446
-TeXDict begin 436 445 bop 0 52 a FF(436)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)259 351
-y Fd(Plot)427 451 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-607 y Fd(Notes:)340 884 y Fi(\017)45 b Fj(If)37 b(no)g(axis)f(is)g(sp)r
-(eci\014ed,)k(\(e.g.)64 b Ft(")p Fj(Ma)5 b(jTic)n(kLen)p
-Ft(")34 b Fj(instead)j(of)g Ft(")p Fj(Ma)5 b(jTic)n(kLen\(2\))p
-Ft(")p Fj(\),)37 b(then)g(a)g Ft(")p Fj(set)p Ft(")e
-Fj(or)427 984 y Ft(")p Fj(clear)p Ft(")28 b Fj(op)r(eration)g(will)i
-(a\013ect)g(the)g(attribute)g(v)-5 b(alue)29 b(of)h(all)f(the)h(Plot)f
-(axes,)g(while)h(a)f Ft(")p Fj(get)p Ft(")f Fj(or)h Ft(")p
-Fj(test)p Ft(")427 1084 y Fj(op)r(eration)e(will)h(use)f(just)h(the)g
-(Ma)5 b(jTic)n(kLen\(1\))27 b(v)-5 b(alue.)p 0 1272 3780
-12 v 0 1404 a Fz(Matc)l(hEnd)752 b Fe(Matc)m(h)38 b(trailing)e(axes?)
-752 b Fz(Matc)l(hEnd)0 1586 y Fd(Description:)44 b Fj(This)26
-b(attribute)f(is)g(a)g(b)r(o)r(olean)f(v)-5 b(alue)25
-b(whic)n(h)h(con)n(trols)d(ho)n(w)i(a)g(F)-7 b(rame)24
-b(b)r(eha)n(v)n(es)g(when)i(it)f(is)g(used)h(\(b)n(y)227
-1686 y(astFindF)-7 b(rame\))26 b(as)f(a)g(template)h(to)g(matc)n(h)f
-(another)g(\(target\))g(F)-7 b(rame.)36 b(It)26 b(applies)g(only)f(in)h
-(the)g(case)f(where)g(a)227 1785 y(matc)n(h)j(o)r(ccurs)e(b)r(et)n(w)n
-(een)i(template)g(and)f(target)g(F)-7 b(rames)27 b(with)h(di\013eren)n
-(t)g(n)n(um)n(b)r(ers)f(of)g(axes.)227 1907 y(If)g(the)g(Matc)n(hEnd)f
-(v)-5 b(alue)26 b(of)h(the)g(template)f(F)-7 b(rame)26
-b(is)h(zero,)e(then)i(the)g(axes)f(whic)n(h)g(o)r(ccur)g(\014rst)g(in)h
-(the)g(target)227 2007 y(F)-7 b(rame)25 b(will)g(b)r(e)h(matc)n(hed)f
-(and)g(an)n(y)f(trailing)g(axes)g(\(in)i(either)f(the)g(target)g(or)f
-(template\))i(will)f(b)r(e)g(disregarded.)227 2106 y(If)33
-b(it)f(is)g(non-zero,)g(the)g(\014nal)g(axes)f(in)h(eac)n(h)f(F)-7
-b(rame)32 b(will)g(b)r(e)h(matc)n(hed)e(and)h(an)n(y)f(un-matc)n(hed)h
-(leading)g(axes)227 2206 y(will)c(b)r(e)g(disregarded)e(instead.)0
-2350 y Fd(T)m(yp)s(e:)227 2450 y Fj(In)n(teger)h(\(b)r(o)r(olean\).)0
-2594 y Fd(Class)k(Applicabilit)m(y:)259 2725 y(F)-8 b(rame)427
-2824 y Fj(The)28 b(default)g(Matc)n(hEnd)f(v)-5 b(alue)27
-b(for)h(a)f(F)-7 b(rame)27 b(is)g(zero,)g(so)g(that)h(trailing)e(axes)h
-(are)g(disregarded.)259 2952 y Fd(F)-8 b(rameSet)427
-3051 y Fj(The)27 b(Matc)n(hEnd)e(attribute)i(of)f(a)g(F)-7
-b(rameSet)26 b(is)g(the)g(same)g(as)f(that)i(of)f(its)g(curren)n(t)g(F)
--7 b(rame)26 b(\(as)f(sp)r(eci\014ed)427 3151 y(b)n(y)j(the)g(Curren)n
-(t)e(attribute\).)p 0 3339 V 0 3470 a Fz(MaxAxes)794
-3471 y Fe(Maxim)m(um)37 b(n)m(um)m(b)s(er)h(of)h(F)-10
-b(rame)38 b(axes)h(to)f(matc)m(h)3229 3470 y Fz(MaxAxes)0
-3630 y Fd(Description:)44 b Fj(This)38 b(attribute)g(con)n(trols)e(ho)n
-(w)h(a)g(F)-7 b(rame)37 b(b)r(eha)n(v)n(es)g(when)h(it)g(is)f(used)h
-(\(b)n(y)g(astFindF)-7 b(rame\))37 b(as)g(a)227 3730
-y(template)g(to)f(matc)n(h)f(another)h(\(target\))f(F)-7
-b(rame.)62 b(It)37 b(sp)r(eci\014es)f(the)g(maxim)n(um)g(n)n(um)n(b)r
-(er)g(of)g(axes)f(that)h(the)227 3829 y(target)27 b(F)-7
-b(rame)27 b(ma)n(y)g(ha)n(v)n(e)f(in)i(order)e(to)i(matc)n(h)f(the)h
-(template.)227 3951 y(Normally)-7 b(,)22 b(this)g(v)-5
-b(alue)22 b(will)g(equal)g(the)g(n)n(um)n(b)r(er)f(of)h(F)-7
-b(rame)21 b(axes,)h(so)g(that)g(a)f(template)h(F)-7 b(rame)21
-b(will)h(only)g(matc)n(h)227 4051 y(another)29 b(F)-7
-b(rame)30 b(with)g(the)g(same)g(n)n(um)n(b)r(er)g(of)f(axes)g(as)h
-(itself.)44 b(By)30 b(setting)g(a)f(di\013eren)n(t)h(v)-5
-b(alue,)31 b(ho)n(w)n(ev)n(er,)d(the)227 4150 y(matc)n(hing)f(pro)r
-(cess)g(ma)n(y)g(b)r(e)h(used)f(to)h(iden)n(tify)g(F)-7
-b(rames)27 b(with)h(sp)r(eci\014ed)g(n)n(um)n(b)r(ers)f(of)g(axes.)0
-4294 y Fd(T)m(yp)s(e:)227 4394 y Fj(In)n(teger.)0 4538
-y Fd(Class)k(Applicabilit)m(y:)259 4669 y(F)-8 b(rame)427
-4769 y Fj(The)35 b(default)g(MaxAxes)f(v)-5 b(alue)34
-b(for)g(a)g(F)-7 b(rame)34 b(is)h(equal)f(to)g(the)h(n)n(um)n(b)r(er)g
-(of)f(F)-7 b(rame)34 b(axes)g(\(Naxes)g(at-)427 4868
-y(tribute\).)259 4996 y Fd(CmpF)-8 b(rame)427 5095 y
-Fj(The)27 b(MaxAxes)f(attribute)h(of)f(a)g(CmpF)-7 b(rame)27
-b(defaults)g(to)f(a)g(large)g(n)n(um)n(b)r(er)g(\(1000000\))e(whic)n(h)
-i(is)h(m)n(uc)n(h)427 5195 y(larger)k(than)j(an)n(y)e(lik)n(ely)g(n)n
-(um)n(b)r(er)h(of)g(axes)f(in)i(a)e(F)-7 b(rame.)53 b(Com)n(bined)33
-b(with)h(the)f(MinAxes)g(default)h(of)427 5295 y(zero)28
-b(\(for)h(a)g(CmpF)-7 b(rame\),)30 b(this)f(means)g(that)g(the)h
-(default)f(b)r(eha)n(viour)f(for)h(a)g(CmpF)-7 b(rame)29
-b(is)g(to)g(matc)n(h)427 5394 y(an)n(y)24 b(target)g(F)-7
-b(rame)24 b(that)h(consists)f(of)g(a)g(subset)h(of)f(the)h(axes)f(in)h
-(the)g(template)g(CmpF)-7 b(rame.)36 b(T)-7 b(o)24 b(c)n(hange)427
-5494 y(this)33 b(so)f(that)g(a)g(CmpF)-7 b(rame)32 b(will)h(only)f
-(matc)n(h)g(F)-7 b(rames)31 b(that)i(ha)n(v)n(e)e(the)i(same)e(n)n(um)n
-(b)r(er)h(of)h(axes,)f(y)n(ou)427 5593 y(should)i(set)g(the)h(CmpF)-7
-b(rame)34 b(MaxAxes)f(and)h(MinAxes)g(attributes)g(to)g(the)h(n)n(um)n
-(b)r(er)f(of)g(axes)f(in)h(the)427 5693 y(CmpF)-7 b(rame.)p
-eop end
-%%Page: 437 447
-TeXDict begin 437 446 bop 3643 52 a FF(437)259 351 y
-Fd(F)-8 b(rameSet)427 451 y Fj(The)29 b(MaxAxes)f(attribute)h(of)g(a)g
-(F)-7 b(rameSet)28 b(is)h(the)g(same)f(as)h(that)g(of)g(its)g(curren)n
-(t)f(F)-7 b(rame)28 b(\(as)g(sp)r(eci\014ed)427 551 y(b)n(y)g(the)g
-(Curren)n(t)e(attribute\).)0 706 y Fd(Notes:)340 982
-y Fi(\017)45 b Fj(When)39 b(setting)g(a)e(MaxAxes)h(v)-5
-b(alue,)41 b(the)e(v)-5 b(alue)38 b(of)g(the)h(MinAxes)g(attribute)f
-(ma)n(y)g(also)f(b)r(e)i(silen)n(tly)427 1082 y(c)n(hanged)26
-b(so)h(that)g(it)g(remains)f(consisten)n(t)h(with)g(\(i.e.)37
-b(do)r(es)27 b(not)g(exceed\))g(the)g(new)h(v)-5 b(alue.)36
-b(The)27 b(default)427 1182 y(MaxAxes)g(v)-5 b(alue)28
-b(ma)n(y)e(also)h(b)r(e)h(reduced)f(to)h(remain)f(consisten)n(t)g(with)
-h(the)g(MinAxes)g(v)-5 b(alue.)340 1308 y Fi(\017)45
-b Fj(If)25 b(a)f(template)h(F)-7 b(rame)24 b(is)h(used)f(to)g(matc)n(h)
-h(a)f(target)f(with)j(a)e(di\013eren)n(t)g(n)n(um)n(b)r(er)h(of)f
-(axes,)g(the)h(Matc)n(hEnd)427 1408 y(attribute)j(of)f(the)h(template)f
-(is)g(used)h(to)f(determine)g(ho)n(w)g(the)h(individual)f(axes)f(of)i
-(eac)n(h)e(F)-7 b(rame)27 b(should)427 1507 y(matc)n(h.)p
-0 1694 3780 12 v 0 1826 a Fz(MeshSize)332 b Fe(Num)m(b)s(er)38
-b(of)h(p)s(oin)m(ts)f(used)h(to)f(represen)m(t)g(the)1335
-1940 y(b)s(oundary)f(of)i(a)f(Region)3230 1826 y Fz(MeshSize)0
-2117 y Fd(Description:)44 b Fj(This)24 b(attribute)f(con)n(trols)f(ho)n
-(w)g(man)n(y)h(p)r(oin)n(ts)g(are)f(used)i(when)f(creating)f(a)h(mesh)g
-(of)h(p)r(oin)n(ts)f(co)n(v)n(ering)227 2216 y(the)35
-b(b)r(oundary)e(of)i(a)f(Region.)56 b(This)34 b(mesh)g(is)g(used)h
-(primarily)e(when)h(testing)h(for)e(o)n(v)n(erlap)g(with)h(a)g(second)
-227 2316 y(Region:)i(eac)n(h)25 b(p)r(oin)n(t)h(in)g(the)g(mesh)g(is)g
-(c)n(hec)n(k)n(ed)e(to)i(see)g(if)g(it)g(is)g(inside)g(or)f(outside)h
-(the)g(second)f(Region.)36 b(Th)n(us,)227 2416 y(the)23
-b(reliabilit)n(y)f(of)g(the)h(o)n(v)n(erlap)d(c)n(hec)n(k)h(dep)r(ends)
-i(on)f(the)h(v)-5 b(alue)22 b(assigned)g(to)g(this)h(attribute.)35
-b(If)23 b(the)f(v)-5 b(alue)23 b(used)227 2515 y(is)e(v)n(ery)e(lo)n
-(w,)i(it)g(is)f(p)r(ossible)g(for)g(o)n(v)n(erlaps)e(to)i(go)g
-(unnoticed.)34 b(High)21 b(v)-5 b(alues)20 b(pro)r(duce)g(more)f
-(reliable)h(results,)h(but)227 2615 y(can)i(result)h(in)f(the)h(o)n(v)n
-(erlap)e(test)i(b)r(eing)f(v)n(ery)g(slo)n(w.)34 b(The)24
-b(default)g(v)-5 b(alue)23 b(is)h(200)e(for)h(t)n(w)n(o)g(dimensional)g
-(Regions)227 2714 y(and)f(2000)d(for)i(three)g(or)g(more)f(dimensional)
-h(Regions)g(\(this)h(attribute)f(is)g(not)h(used)f(for)g(1-dimensional)
-f(regions)227 2814 y(since)29 b(the)g(b)r(oundary)e(of)i(a)f(simple)h
-(1-d)f(Region)f(can)i(only)f(ev)n(er)f(ha)n(v)n(e)h(t)n(w)n(o)f(p)r
-(oin)n(ts\).)40 b(A)29 b(v)-5 b(alue)29 b(of)f(\014v)n(e)g(is)h(used)
-227 2914 y(if)f(the)g(supplied)g(v)-5 b(alue)28 b(is)f(less)g(than)h
-(\014v)n(e.)0 3057 y Fd(T)m(yp)s(e:)227 3156 y Fj(In)n(teger.)0
-3300 y Fd(Class)j(Applicabilit)m(y:)259 3430 y(Region)427
-3529 y Fj(All)d(Regions)f(ha)n(v)n(e)f(this)i(attribute.)259
-3656 y Fd(CmpRegion)427 3756 y Fj(The)g(default)g(MeshSize)g(for)f(a)g
-(CmpRegion)g(is)g(the)h(MeshSize)g(of)f(its)h(\014rst)g(comp)r(onen)n
-(t)f(Region.)259 3882 y Fd(Stc)427 3982 y Fj(The)h(default)g(MeshSize)g
-(for)f(an)g(Stc)h(is)f(the)h(MeshSize)g(of)f(its)h(encapsulated)f
-(Region.)p 0 4168 V 0 4300 a Fz(MinAxes)279 b Fe(Minim)m(um)37
-b(n)m(um)m(b)s(er)h(of)g(F)-10 b(rame)39 b(axes)f(to)g(matc)m(h)278
-b Fz(MinAxes)0 4458 y Fd(Description:)44 b Fj(This)38
-b(attribute)g(con)n(trols)e(ho)n(w)h(a)g(F)-7 b(rame)37
-b(b)r(eha)n(v)n(es)g(when)h(it)g(is)f(used)h(\(b)n(y)g(astFindF)-7
-b(rame\))37 b(as)g(a)227 4557 y(template)h(to)f(matc)n(h)g(another)f
-(\(target\))g(F)-7 b(rame.)65 b(It)38 b(sp)r(eci\014es)f(the)g(minim)n
-(um)h(n)n(um)n(b)r(er)f(of)g(axes)f(that)h(the)227 4657
-y(target)27 b(F)-7 b(rame)27 b(ma)n(y)g(ha)n(v)n(e)f(in)i(order)e(to)i
-(matc)n(h)f(the)h(template.)227 4778 y(Normally)-7 b(,)22
-b(this)g(v)-5 b(alue)22 b(will)g(equal)g(the)g(n)n(um)n(b)r(er)f(of)h
-(F)-7 b(rame)21 b(axes,)h(so)g(that)g(a)f(template)h(F)-7
-b(rame)21 b(will)h(only)g(matc)n(h)227 4878 y(another)29
-b(F)-7 b(rame)30 b(with)g(the)g(same)g(n)n(um)n(b)r(er)g(of)f(axes)g
-(as)h(itself.)44 b(By)30 b(setting)g(a)f(di\013eren)n(t)h(v)-5
-b(alue,)31 b(ho)n(w)n(ev)n(er,)d(the)227 4978 y(matc)n(hing)f(pro)r
-(cess)g(ma)n(y)g(b)r(e)h(used)f(to)h(iden)n(tify)g(F)-7
-b(rames)27 b(with)h(sp)r(eci\014ed)g(n)n(um)n(b)r(ers)f(of)g(axes.)0
-5121 y Fd(T)m(yp)s(e:)227 5220 y Fj(In)n(teger.)0 5364
-y Fd(Class)k(Applicabilit)m(y:)259 5494 y(F)-8 b(rame)427
-5593 y Fj(The)36 b(default)g(MinAxes)g(v)-5 b(alue)35
-b(for)g(a)g(F)-7 b(rame)35 b(is)h(equal)f(to)g(the)h(n)n(um)n(b)r(er)g
-(of)f(F)-7 b(rame)35 b(axes)g(\(Naxes)g(at-)427 5693
-y(tribute\).)p eop end
-%%Page: 438 448
-TeXDict begin 438 447 bop 0 52 a FF(438)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)259 351
-y Fd(CmpF)-8 b(rame)427 451 y Fj(The)22 b(MinAxes)f(attribute)h(of)f(a)
-g(CmpF)-7 b(rame)22 b(defaults)f(to)h(zero.)33 b(Com)n(bined)22
-b(with)g(the)f(MaxAxes)g(default)427 551 y(of)30 b(1000000)d(\(for)j(a)
-g(CmpF)-7 b(rame\),)30 b(this)h(means)e(that)i(the)f(default)h(b)r(eha)
-n(viour)e(for)g(a)h(CmpF)-7 b(rame)30 b(is)g(to)427 650
-y(matc)n(h)c(an)n(y)f(target)h(F)-7 b(rame)25 b(that)i(consists)e(of)h
-(a)g(subset)g(of)g(the)g(axes)g(in)g(the)g(template)h(CmpF)-7
-b(rame.)36 b(T)-7 b(o)427 750 y(c)n(hange)24 b(this)h(so)g(that)g(a)g
-(CmpF)-7 b(rame)25 b(will)g(only)g(matc)n(h)f(F)-7 b(rames)25
-b(that)g(ha)n(v)n(e)f(the)h(same)g(n)n(um)n(b)r(er)f(of)h(axes,)427
-849 y(y)n(ou)33 b(should)g(set)g(the)g(CmpF)-7 b(rame)33
-b(MinAxes)g(and)g(MaxAxes)g(attributes)g(to)g(the)g(n)n(um)n(b)r(er)g
-(of)g(axes)f(in)427 949 y(the)c(CmpF)-7 b(rame.)259 1082
-y Fd(F)f(rameSet)427 1182 y Fj(The)30 b(MinAxes)g(attribute)g(of)g(a)f
-(F)-7 b(rameSet)30 b(is)g(the)g(same)f(as)h(that)g(of)g(its)g(curren)n
-(t)f(F)-7 b(rame)29 b(\(as)g(sp)r(eci\014ed)427 1281
-y(b)n(y)f(the)g(Curren)n(t)e(attribute\).)0 1444 y Fd(Notes:)340
-1727 y Fi(\017)45 b Fj(When)39 b(setting)g(a)e(MinAxes)i(v)-5
-b(alue,)41 b(the)e(v)-5 b(alue)38 b(of)g(the)h(MaxAxes)f(attribute)g
-(ma)n(y)g(also)f(b)r(e)i(silen)n(tly)427 1826 y(c)n(hanged)28
-b(so)f(that)i(it)f(remains)g(consisten)n(t)g(with)g(\(i.e.)40
-b(is)28 b(not)g(less)g(than\))h(the)g(new)f(v)-5 b(alue.)39
-b(The)28 b(default)427 1926 y(MinAxes)g(v)-5 b(alue)27
-b(ma)n(y)g(also)g(b)r(e)h(reduced)f(to)h(remain)f(consisten)n(t)g(with)
-h(the)g(MaxAxes)f(v)-5 b(alue.)340 2059 y Fi(\017)45
-b Fj(If)25 b(a)f(template)h(F)-7 b(rame)24 b(is)h(used)f(to)g(matc)n(h)
-h(a)f(target)f(with)j(a)e(di\013eren)n(t)g(n)n(um)n(b)r(er)h(of)f
-(axes,)g(the)h(Matc)n(hEnd)427 2158 y(attribute)j(of)f(the)h(template)f
-(is)g(used)h(to)f(determine)g(ho)n(w)g(the)h(individual)f(axes)f(of)i
-(eac)n(h)e(F)-7 b(rame)27 b(should)427 2258 y(matc)n(h.)p
-0 2458 3780 12 v 0 2596 a Fz(MinTic)l(k\(axis\))1033
-2589 y Fe(Densit)m(y)38 b(of)h(minor)e(tic)m(k)g(marks)h(for)g(a)1782
-2704 y(Plot)2951 2596 y Fz(MinTic)l(k\(axis\))0 2875
-y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n(trols)e(the)i
-(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 2974 y(astGrid)24 b(function\))h(b)n(y)f
-(determining)g(the)h(densit)n(y)f(of)g(minor)g(tic)n(k)g(marks)f(whic)n
-(h)i(app)r(ear)e(b)r(et)n(w)n(een)h(the)h(ma)5 b(jor)227
-3074 y(axis)24 b(v)-5 b(alues)25 b(of)g(a)f(Plot.)36
-b(It)25 b(tak)n(es)f(a)g(separate)g(v)-5 b(alue)24 b(for)h(eac)n(h)f
-(ph)n(ysical)g(axis)g(of)h(a)f(Plot)g(so)h(that,)g(for)g(instance,)227
-3173 y(the)j(setting)g Ft(")p Fj(MinTic)n(k\(2\)=2)p
-Ft(")e Fj(sp)r(eci\014es)h(the)h(densit)n(y)f(of)h(minor)f(tic)n(k)h
-(marks)e(along)g(the)i(second)f(axis.)227 3298 y(The)j(v)-5
-b(alue)29 b(supplied)h(should)g(b)r(e)g(the)g(n)n(um)n(b)r(er)f(of)g
-(minor)h(divisions)e(required)h(b)r(et)n(w)n(een)h(eac)n(h)e(pair)h(of)
-h(ma)5 b(jor)227 3398 y(axis)28 b(v)-5 b(alues,)28 b(this)g(b)r(eing)h
-(one)e(more)h(than)g(the)h(n)n(um)n(b)r(er)f(of)g(minor)g(tic)n(k)g
-(marks)f(to)h(b)r(e)g(dra)n(wn.)38 b(By)28 b(default,)h(a)227
-3497 y(v)-5 b(alue)28 b(is)f(c)n(hosen)g(that)h(dep)r(ends)g(on)f(the)h
-(gap)f(b)r(et)n(w)n(een)g(ma)5 b(jor)27 b(axis)g(v)-5
-b(alues)27 b(and)g(the)h(nature)f(of)h(the)g(axis.)0
-3647 y Fd(T)m(yp)s(e:)227 3747 y Fj(In)n(teger.)0 3897
-y Fd(Class)j(Applicabilit)m(y:)259 4034 y(Plot)427 4133
-y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0 4295
-y Fd(Notes:)340 4578 y Fi(\017)45 b Fj(If)36 b(no)f(axis)g(is)g(sp)r
-(eci\014ed,)j(\(e.g.)60 b Ft(")p Fj(MinTic)n(k)p Ft(")35
-b Fj(instead)g(of)g Ft(")p Fj(MinTic)n(k\(2\))p Ft(")p
-Fj(\),)i(then)f(a)f Ft(")p Fj(set)p Ft(")g Fj(or)f Ft(")p
-Fj(clear)p Ft(")427 4678 y Fj(op)r(eration)23 b(will)i(a\013ect)f(the)h
-(attribute)f(v)-5 b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h
-(a)f Ft(")p Fj(get)p Ft(")f Fj(or)g Ft(")p Fj(test)p
-Ft(")h Fj(op)r(eration)427 4778 y(will)k(use)g(just)g(the)g(MinTic)n
-(k\(1\))f(v)-5 b(alue.)p 0 4977 V 0 5116 a Fz(MinTic)l(kLen\(axis\))
-1361 5109 y Fe(Length)38 b(of)g(minor)f(tic)m(k)1469
-5224 y(marks)h(for)g(a)g(Plot)2734 5116 y Fz(MinTic)l(kLen\(axis\))0
-5394 y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 5494 y(astGrid)40 b(function\))h(b)n(y)g
-(determining)f(the)h(length)f(of)h(the)f(minor)g(tic)n(k)h(marks)e(dra)
-n(wn)g(on)h(the)h(axes)f(of)g(a)227 5593 y(Plot.)i(It)30
-b(tak)n(es)f(a)g(separate)f(v)-5 b(alue)29 b(for)g(eac)n(h)g(ph)n
-(ysical)f(axis)h(of)g(the)h(Plot)f(so)g(that,)h(for)f(instance,)h(the)g
-(setting)227 5693 y Ft(")p Fj(MinTic)n(kLen\(2\)=0)p
-Ft(")c Fj(sp)r(eci\014es)h(the)h(length)g(of)g(the)g(minor)f(tic)n(k)g
-(marks)g(dra)n(wn)f(on)h(the)h(second)f(axis.)p eop end
-%%Page: 439 449
-TeXDict begin 439 448 bop 3643 52 a FF(439)227 351 y
-Fj(The)35 b(MinTic)n(kLen)f(v)-5 b(alue)34 b(should)g(b)r(e)h(giv)n(en)
-f(as)f(a)h(fraction)g(of)g(the)h(minim)n(um)g(dimension)f(of)h(the)g
-(plotting)227 451 y(area.)56 b(Negativ)n(e)34 b(v)-5
-b(alues)34 b(cause)g(minor)g(tic)n(k)g(marks)f(to)i(b)r(e)g(placed)f
-(on)g(the)h(outside)f(of)h(the)g(corresp)r(onding)227
-551 y(grid)c(line)h(or)f(axis)g(\(but)i(sub)5 b(ject)32
-b(to)g(an)n(y)f(clipping)g(imp)r(osed)h(b)n(y)g(the)g(underlying)f
-(graphics)f(system\),)j(while)227 650 y(p)r(ositiv)n(e)27
-b(v)-5 b(alues)28 b(cause)f(them)h(to)f(b)r(e)h(placed)f(on)h(the)g
-(inside.)227 788 y(The)g(default)g(v)-5 b(alue)27 b(is)h(+0.007.)0
-965 y Fd(T)m(yp)s(e:)227 1064 y Fj(Floating)f(p)r(oin)n(t.)0
-1241 y Fd(Class)k(Applicabilit)m(y:)259 1404 y(Plot)427
-1504 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-1693 y Fd(Notes:)340 2003 y Fi(\017)45 b Fj(The)27 b(n)n(um)n(b)r(er)f
-(of)g(minor)g(tic)n(k)h(marks)e(dra)n(wn)h(is)g(determined)h(b)n(y)f
-(the)h(Plot's)e(MinTic)n(k\(axis\))h(attribute.)340 2149
-y Fi(\017)45 b Fj(If)38 b(no)e(axis)h(is)f(sp)r(eci\014ed,)k(\(e.g.)65
-b Ft(")p Fj(MinTic)n(kLen)p Ft(")36 b Fj(instead)h(of)g
-Ft(")p Fj(MinTic)n(kLen\(2\))p Ft(")p Fj(\),)h(then)g(a)e
-Ft(")p Fj(set)p Ft(")g Fj(or)427 2249 y Ft(")p Fj(clear)p
-Ft(")28 b Fj(op)r(eration)g(will)i(a\013ect)g(the)g(attribute)g(v)-5
-b(alue)29 b(of)h(all)f(the)h(Plot)f(axes,)g(while)h(a)f
-Ft(")p Fj(get)p Ft(")f Fj(or)h Ft(")p Fj(test)p Ft(")427
-2348 y Fj(op)r(eration)e(will)h(use)f(just)h(the)g(MinTic)n(kLen\(1\))g
-(v)-5 b(alue.)p 0 2575 3780 12 v 0 2705 a Fz(NatLat)823
-2706 y Fe(Nativ)m(e)37 b(latitude)g(of)h(the)h(reference)f(p)s(oin)m(t)
-f(of)i(a)1325 2819 y(FITS-W)m(CS)g(pro)7 b(jection)3358
-2705 y Fz(NatLat)0 3035 y Fd(Description:)44 b Fj(This)23
-b(attribute)g(giv)n(es)e(the)i(latitude)g(of)g(the)g(reference)f(p)r
-(oin)n(t)h(of)f(the)h(FITS-W)n(CS)g(pro)5 b(jection)22
-b(imple-)227 3135 y(men)n(ted)30 b(b)n(y)g(a)f(WcsMap.)43
-b(The)29 b(v)-5 b(alue)30 b(is)f(in)h(radians)f(in)g(the)h
-Ft(")p Fj(nativ)n(e)f(spherical)p Ft(")f Fj(co)r(ordinate)h(system.)43
-b(This)227 3235 y(v)-5 b(alue)29 b(is)f(\014xed)g(for)g(most)g(pro)5
-b(jections,)28 b(for)g(instance)g(it)h(is)f(PI/2)f(\(90)h(degrees\))f
-(for)h(all)g(zenithal)h(pro)5 b(jections.)227 3334 y(F)-7
-b(or)28 b(some)g(pro)5 b(jections)28 b(\(e.g.)39 b(the)29
-b(conics\))f(the)h(v)-5 b(alue)29 b(is)f(not)h(\014xed,)g(but)g(is)f
-(sp)r(eci\014ed)h(b)n(y)g(parameter)e(one)h(on)227 3434
-y(the)g(latitude)g(axis.)227 3572 y(FITS-W)n(CS)g(pap)r(er)f(I)r(I)g
-(in)n(tro)r(duces)g(the)h(concept)f(of)g(a)g Ft(")p Fj(\014ducial)g(p)r
-(oin)n(t)p Ft(")g Fj(whic)n(h)g(is)g(logical)f(distinct)i(from)f(the)
-227 3672 y(pro)5 b(jection)29 b(reference)g(p)r(oin)n(t.)43
-b(It)30 b(is)f(easy)g(to)h(confuse)f(the)h(use)f(of)h(these)g(t)n(w)n
-(o)f(p)r(oin)n(ts.)43 b(The)29 b(\014ducial)h(p)r(oin)n(t)g(is)227
-3771 y(the)22 b(p)r(oin)n(t)g(whic)n(h)g(has)f(celestial)g(co)r
-(ordinates)f(giv)n(en)h(b)n(y)g(the)h(CR)-9 b(V)g(AL)22
-b(FITS)g(k)n(eyw)n(ords.)33 b(The)21 b(nativ)n(e)h(spherical)227
-3871 y(co)r(ordinates)k(for)h(this)g(p)r(oin)n(t)h(default)f(to)g(the)h
-(v)-5 b(alues)27 b(of)g(the)g(NatLat)g(and)g(NatLon,)g(but)h(these)f
-(defaults)h(mey)227 3970 y(b)r(e)34 b(o)n(v)n(er-ridden)c(b)n(y)j(v)-5
-b(alues)32 b(stored)g(in)h(the)h(PVi)p Ft(_)p Fj(j)e(k)n(eyw)n(ords.)51
-b(Put)33 b(another)e(w)n(a)n(y)-7 b(,)34 b(the)f(CR)-9
-b(V)g(AL)33 b(k)n(eyw)n(ords)227 4070 y(will)j(b)n(y)e(default)i(giv)n
-(e)e(the)h(celestial)g(co)r(ordinates)f(of)h(the)g(pro)5
-b(jection)34 b(reference)g(p)r(oin)n(t,)j(but)f(ma)n(y)e(refer)h(to)227
-4170 y(some)23 b(other)g(p)r(oin)n(t)g(if)h(alternativ)n(e)e(nativ)n(e)
-h(longitude)g(and)g(latitude)h(v)-5 b(alues)23 b(are)f(pro)n(vided)g
-(through)h(the)h(PVi)p Ft(_)p Fj(j)227 4269 y(k)n(eyw)n(ords.)227
-4407 y(The)k(NatLat)f(attribute)h(is)g(read-only)-7 b(.)0
-4584 y Fd(T)m(yp)s(e:)227 4684 y Fj(Floating)27 b(p)r(oin)n(t,)h
-(read-only)-7 b(.)0 4860 y Fd(Class)31 b(Applicabilit)m(y:)259
-5024 y(WcsMap)427 5123 y Fj(All)d(WcsMaps)f(ha)n(v)n(e)g(this)h
-(attribute.)0 5312 y Fd(Notes:)340 5622 y Fi(\017)45
-b Fj(A)28 b(default)g(v)-5 b(alue)28 b(of)f(AST)p Ft(__)p
-Fj(BAD)h(is)f(used)h(if)g(no)f(latitude)h(v)-5 b(alue)28
-b(is)f(a)n(v)-5 b(ailable.)p eop end
-%%Page: 440 450
-TeXDict begin 440 449 bop 0 52 a FF(440)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 482 a Fz(NatLon)784 483 y Fe(Nativ)m(e)37
-b(longitude)g(of)h(the)h(reference)f(p)s(oin)m(t)f(of)i(a)1325
-596 y(FITS-W)m(CS)g(pro)7 b(jection)3334 482 y Fz(NatLon)0
-827 y Fd(Description:)44 b Fj(This)39 b(attribute)g(giv)n(es)f(the)h
-(longitude)f(of)h(the)g(reference)f(p)r(oin)n(t)h(of)g(the)g(FITS-W)n
-(CS)g(pro)5 b(jection)227 927 y(implemen)n(ted)31 b(b)n(y)f(a)f
-(WcsMap.)44 b(The)30 b(v)-5 b(alue)30 b(is)g(in)h(radians)d(in)j(the)f
-Ft(")p Fj(nativ)n(e)f(spherical)p Ft(")g Fj(co)r(ordinate)g(system,)227
-1026 y(and)f(will)g(usually)f(b)r(e)h(zero.)35 b(See)28
-b(the)g(description)f(of)h(attribute)f(NatLat)h(for)f(further)g
-(information.)227 1172 y(The)h(NatLon)f(attribute)h(is)f(read-only)-7
-b(.)0 1363 y Fd(T)m(yp)s(e:)227 1463 y Fj(Floating)27
-b(p)r(oin)n(t,)h(read-only)-7 b(.)0 1654 y Fd(Class)31
-b(Applicabilit)m(y:)259 1832 y(WcsMap)427 1932 y Fj(All)d(WcsMaps)f(ha)
-n(v)n(e)g(this)h(attribute.)p 0 2173 V 0 2304 a Fz(Naxes)1308
-2305 y Fe(Num)m(b)s(er)38 b(of)g(F)-10 b(rame)39 b(axes)3424
-2304 y Fz(Naxes)0 2517 y Fd(Description:)44 b Fj(This)33
-b(is)f(a)g(read-only)f(attribute)i(giving)f(the)h(n)n(um)n(b)r(er)f(of)
-h(axes)e(in)i(a)f(F)-7 b(rame)32 b(\(i.e.)52 b(the)33
-b(n)n(um)n(b)r(er)g(of)227 2616 y(dimensions)24 b(of)g(the)g(co)r
-(ordinate)f(space)g(whic)n(h)h(the)g(F)-7 b(rame)24 b(describ)r(es\).)
-35 b(This)24 b(v)-5 b(alue)24 b(is)g(determined)g(when)g(the)227
-2716 y(F)-7 b(rame)27 b(is)h(created.)0 2907 y Fd(T)m(yp)s(e:)227
-3007 y Fj(In)n(teger,)f(read-only)-7 b(.)0 3198 y Fd(Class)31
-b(Applicabilit)m(y:)259 3376 y(F)-8 b(rame)427 3476 y
-Fj(All)28 b(F)-7 b(rames)27 b(ha)n(v)n(e)g(this)g(attribute.)259
-3630 y Fd(F)-8 b(rameSet)427 3730 y Fj(The)29 b(Naxes)g(attribute)g(of)
-g(a)g(F)-7 b(rameSet)28 b(is)h(the)h(same)e(as)h(that)g(of)g(its)g
-(curren)n(t)f(F)-7 b(rame)29 b(\(as)g(sp)r(eci\014ed)g(b)n(y)427
-3829 y(the)f(Curren)n(t)f(attribute\).)259 3983 y Fd(CmpF)-8
-b(rame)427 4083 y Fj(The)40 b(Naxes)e(attribute)i(of)f(a)g(CmpF)-7
-b(rame)39 b(is)g(equal)g(to)h(the)f(sum)h(of)f(the)h(Naxes)f(v)-5
-b(alues)39 b(of)g(its)g(t)n(w)n(o)427 4182 y(comp)r(onen)n(t)28
-b(F)-7 b(rames.)p 0 4423 V 0 4555 a Fz(Ncard)388 b Fe(Num)m(b)s(er)38
-b(of)g(FITS)h(header)g(cards)f(in)g(a)h(FitsChan)387
-b Fz(Ncard)0 4762 y Fd(Description:)44 b Fj(This)33 b(attribute)g(giv)n
-(es)e(the)i(total)f(n)n(um)n(b)r(er)h(of)f(FITS)h(header)f(cards)f
-(stored)h(in)h(a)f(FitsChan.)52 b(It)33 b(is)227 4862
-y(up)r(dated)28 b(as)f(cards)g(are)f(added)i(or)f(deleted.)0
-5053 y Fd(T)m(yp)s(e:)227 5153 y Fj(In)n(teger,)g(read-only)-7
-b(.)0 5344 y Fd(Class)31 b(Applicabilit)m(y:)259 5523
-y(FitsChan)427 5622 y Fj(All)d(FitsChans)g(ha)n(v)n(e)e(this)i
-(attribute.)p eop end
-%%Page: 441 451
-TeXDict begin 441 450 bop 3643 52 a FF(441)p 0 351 3780
-12 v 0 482 a Fz(NegLon)1009 483 y Fe(Displa)m(y)37 b(negativ)m(e)g
-(longitude)g(v)-7 b(alues?)3323 482 y Fz(NegLon)0 708
-y Fd(Description:)44 b Fj(This)29 b(attribute)g(is)f(a)h(b)r(o)r(olean)
-f(v)-5 b(alue)28 b(whic)n(h)h(con)n(trols)e(ho)n(w)h(longitude)h(v)-5
-b(alues)28 b(are)f(normalized)h(for)227 808 y(displa)n(y)f(b)n(y)g
-(astNorm.)227 950 y(If)h(the)f(NegLon)f(attribute)i(is)f(zero,)f(then)h
-(normalized)f(longitude)h(v)-5 b(alues)27 b(will)g(b)r(e)g(in)h(the)f
-(range)f(zero)g(to)h(2.pi.)227 1050 y(If)h(NegLon)f(is)h(non-zero,)e
-(then)i(normalized)e(longitude)i(v)-5 b(alues)27 b(will)h(b)r(e)g(in)g
-(the)g(range)e(-pi)h(to)h(pi.)227 1193 y(The)h(default)f(v)-5
-b(alue)29 b(dep)r(ends)f(on)g(the)h(curren)n(t)f(v)-5
-b(alue)28 b(of)g(the)h(SkyRefIs)f(attribute,)h(If)g(SkyRefIs)f(has)g(a)
-g(v)-5 b(alue)227 1292 y(of)28 b Ft(")p Fj(Origin)p Ft(")p
-Fj(,)e(then)i(the)g(default)g(for)f(NegLon)g(is)g(one,)g(otherwise)g
-(the)h(default)g(is)g(zero.)0 1478 y Fd(T)m(yp)s(e:)227
-1578 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0 1764 y Fd(Class)k
-(Applicabilit)m(y:)259 1937 y(SkyF)-8 b(rame)427 2036
-y Fj(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i(attribute.)p
-0 2272 V 0 2403 a Fz(Negated)879 b Fe(Region)38 b(negation)f(\015ag)877
-b Fz(Negated)0 2629 y Fd(Description:)44 b Fj(This)30
-b(attribute)f(con)n(trols)f(whether)i(a)f(Region)f(represen)n(ts)g(the)
-i Ft(")p Fj(inside)p Ft(")f Fj(or)g(the)g Ft(")p Fj(outside)p
-Ft(")g Fj(of)g(the)227 2728 y(area)d(whic)n(h)h(w)n(as)f(supplied)i
-(when)f(the)h(Region)f(w)n(as)f(created.)36 b(If)27 b(the)h(attribute)g
-(v)-5 b(alue)27 b(is)g(zero)f(\(the)i(default\),)227
-2828 y(the)40 b(Region)f(represen)n(ts)e(the)j(inside)f(of)h(the)f
-(original)f(area.)71 b(Ho)n(w)n(ev)n(er,)40 b(if)g(it)g(is)f(non-zero,)
-h(it)g(represen)n(ts)227 2928 y(the)33 b(outside)e(of)h(the)h(original)
-d(area.)49 b(The)32 b(v)-5 b(alue)32 b(of)g(this)g(attribute)g(ma)n(y)f
-(b)r(e)i(toggled)e(using)g(the)i(astNegate)227 3027 y(function.)227
-3170 y(Note,)24 b(whether)e(the)h(b)r(oundary)f(is)h(considered)e(to)i
-(b)r(e)g(inside)f(the)h(Region)f(or)g(not)g(is)h(con)n(trolled)e(b)n(y)
-h(the)h(Closed)227 3270 y(attribute.)51 b(Changing)32
-b(the)g(v)-5 b(alue)33 b(of)f(the)h(Negated)e(attribute)i(do)r(es)f
-(not)g(c)n(hange)f(the)i(v)-5 b(alue)32 b(of)h(the)f(Closed)227
-3369 y(attribute.)51 b(Th)n(us,)34 b(if)f(Region)e(is)h(closed,)h(then)
-g(the)g(b)r(oundary)e(of)i(the)f(Region)g(will)g(b)r(e)h(inside)g(the)f
-(Region,)227 3469 y(whatev)n(er)27 b(the)h(setting)f(of)h(the)g
-(Negated)f(attribute.)0 3655 y Fd(T)m(yp)s(e:)227 3754
-y Fj(In)n(teger)g(\(b)r(o)r(olean\).)0 3940 y Fd(Class)k(Applicabilit)m
-(y:)259 4113 y(Region)427 4212 y Fj(All)d(Regions)f(ha)n(v)n(e)f(this)i
-(attribute.)p 0 4448 V 0 4580 a Fz(Nframe)597 b Fe(Num)m(b)s(er)38
-b(of)g(F)-10 b(rames)39 b(in)f(a)h(F)-10 b(rameSet)595
-b Fz(Nframe)0 4782 y Fd(Description:)44 b Fj(This)22
-b(attrbute)f(giv)n(es)g(the)h(n)n(um)n(b)r(er)f(of)g(F)-7
-b(rames)21 b(in)h(a)f(F)-7 b(rameSet.)35 b(This)21 b(v)-5
-b(alue)21 b(will)h(c)n(hange)f(as)f(F)-7 b(rames)227
-4881 y(are)27 b(added)g(or)g(remo)n(v)n(ed,)f(but)i(will)g(alw)n(a)n
-(ys)e(b)r(e)i(at)f(least)g(one.)0 5067 y Fd(T)m(yp)s(e:)227
-5167 y Fj(In)n(teger,)g(read-only)-7 b(.)0 5353 y Fd(Class)31
-b(Applicabilit)m(y:)259 5525 y(F)-8 b(rameSet)427 5625
-y Fj(All)28 b(F)-7 b(rameSets)27 b(ha)n(v)n(e)g(this)h(attribute.)p
-eop end
-%%Page: 442 452
-TeXDict begin 442 451 bop 0 52 a FF(442)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a Fz(Nin)549 b Fe(Num)m(b)s(er)38 b(of)g(input)g(co)s
-(ordinates)f(for)h(a)h(Mapping)547 b Fz(Nin)0 668 y Fd(Description:)44
-b Fj(This)33 b(attribute)f(giv)n(es)f(the)i(n)n(um)n(b)r(er)f(of)g(co)r
-(ordinate)f(v)-5 b(alues)32 b(required)f(to)h(sp)r(ecify)g(an)g(input)h
-(p)r(oin)n(t)227 768 y(for)f(a)g(Mapping)g(\(i.e.)51
-b(the)32 b(n)n(um)n(b)r(er)g(of)h(dimensions)e(of)i(the)f(space)g(in)g
-(whic)n(h)g(the)h(Mapping's)f(input)h(p)r(oin)n(ts)227
-868 y(reside\).)0 1015 y Fd(T)m(yp)s(e:)227 1115 y Fj(In)n(teger,)27
-b(read-only)-7 b(.)0 1263 y Fd(Class)31 b(Applicabilit)m(y:)259
-1397 y(Mapping)427 1497 y Fj(All)d(Mappings)f(ha)n(v)n(e)g(this)h
-(attribute.)259 1628 y Fd(CmpMap)427 1728 y Fj(If)k(a)e(CmpMap's)h
-(comp)r(onen)n(t)g(Mappings)g(are)f(joined)h(in)g(series,)g(then)h(its)
-f(Nin)h(attribute)f(is)g(equal)g(to)427 1827 y(the)f(Nin)g(attribute)f
-(of)g(the)h(\014rst)f(comp)r(onen)n(t)g(\(or)g(to)g(the)g(Nout)h
-(attribute)f(of)h(the)f(second)g(comp)r(onen)n(t)427
-1927 y(if)f(the)g(the)g(CmpMap's)g(In)n(v)n(ert)f(attribute)g(is)h
-(non-zero\).)427 2042 y(If)e(a)f(CmpMap's)h(comp)r(onen)n(t)f(Mappings)
-g(are)f(joined)i(in)g(parallel,)e(then)i(its)g(Nin)g(attribute)g(is)f
-(giv)n(en)g(b)n(y)427 2142 y(the)32 b(sum)f(of)g(the)g(Nin)h
-(attributes)f(of)g(eac)n(h)f(comp)r(onen)n(t)h(\(or)f(to)h(the)h(sum)f
-(of)g(their)g(Nout)g(attributes)g(if)427 2242 y(the)d(CmpMap's)g(In)n
-(v)n(ert)e(attribute)i(is)g(non-zero\).)259 2373 y Fd(F)-8
-b(rame)427 2472 y Fj(The)23 b(Nin)g(attribute)f(for)g(a)g(F)-7
-b(rame)22 b(is)h(alw)n(a)n(ys)d(equal)i(to)g(the)h(n)n(um)n(b)r(er)f
-(of)h(F)-7 b(rame)22 b(axes)f(\(Naxes)h(attribute\).)259
-2603 y Fd(F)-8 b(rameSet)427 2703 y Fj(The)27 b(Nin)g(attribute)g(of)f
-(a)h(F)-7 b(rameSet)26 b(is)g(equal)h(to)f(the)h(n)n(um)n(b)r(er)f(of)h
-(axes)f(\(Naxes)g(attribute\))h(of)f(its)h(base)427 2803
-y(F)-7 b(rame)22 b(\(as)g(sp)r(eci\014ed)h(b)n(y)f(the)g(F)-7
-b(rameSet's)22 b(Base)f(attribute\).)36 b(The)22 b(Nin)h(attribute)g(v)
--5 b(alue)22 b(ma)n(y)g(therefore)427 2902 y(c)n(hange)27
-b(if)h(a)f(new)h(base)f(F)-7 b(rame)27 b(is)g(selected.)p
-0 3098 V 0 3230 a Fz(Nob)7 b(ject)727 b Fe(Num)m(b)s(er)38
-b(of)g(Ob)7 b(jects)38 b(in)h(class)724 b Fz(Nob)7 b(ject)0
-3415 y Fd(Description:)44 b Fj(This)22 b(attribute)g(giv)n(es)f(the)i
-(total)e(n)n(um)n(b)r(er)h(of)g(Ob)5 b(jects)21 b(curren)n(tly)g(in)i
-(existence)e(in)i(the)f(same)f(class)g(as)227 3515 y(the)29
-b(Ob)5 b(ject)29 b(whose)f(attribute)g(v)-5 b(alue)29
-b(is)f(requested.)40 b(This)28 b(coun)n(t)g(do)r(es)h(not)f(include)h
-(Ob)5 b(jects)28 b(whic)n(h)h(b)r(elong)227 3614 y(to)f(deriv)n(ed)f
-(\(more)g(sp)r(ecialised\))g(classes.)227 3738 y(This)i(attribute)h(is)
-f(mainly)g(in)n(tended)h(for)f(debugging.)40 b(It)30
-b(can)f(b)r(e)h(used)f(to)g(detect)h(whether)f(Ob)5 b(jects)29
-b(whic)n(h)227 3838 y(should)f(ha)n(v)n(e)e(b)r(een)i(deleted)g(ha)n(v)
-n(e,)f(in)g(fact,)h(b)r(een)g(deleted.)0 3985 y Fd(T)m(yp)s(e:)227
-4085 y Fj(In)n(teger,)f(read-only)-7 b(.)0 4233 y Fd(Class)31
-b(Applicabilit)m(y:)259 4367 y(Ob)5 b(ject)427 4467 y
-Fj(All)28 b(Ob)5 b(jects)28 b(ha)n(v)n(e)e(this)i(attribute.)p
-0 4663 V 0 4801 a Fz(Norm\(axis\))851 4795 y Fe(Sp)s(eci\014es)39
-b(the)f(plane)g(up)s(on)h(whic)m(h)f(a)h(Plot3D)1284
-4909 y(dra)m(ws)f(text)g(and)g(mark)m(ers)3109 4801 y
-Fz(Norm\(axis\))0 5071 y Fd(Description:)44 b Fj(This)30
-b(attribute)h(con)n(trols)d(the)j(app)r(earance)d(of)i(text)h(and)e
-(mark)n(ers)f(dra)n(wn)i(b)n(y)f(a)h(Plot3D.)f(It)i(sp)r(ec-)227
-5171 y(i\014es)k(the)g(orien)n(tation)f(of)g(the)i(plane)e(up)r(on)h
-(whic)n(h)g(text)g(and)g(mark)n(ers)e(will)i(b)r(e)g(dra)n(wn)f(b)n(y)g
-(all)h(subsequen)n(t)227 5270 y(in)n(v)n(o)r(cations)26
-b(of)i(the)g(astT)-7 b(ext)27 b(and)h(astMark)e(functions.)227
-5394 y(When)f(setting)f(or)e(getting)i(the)g(Norm)g(attribute,)h(the)f
-(attribute)g(name)f(m)n(ust)h(b)r(e)h(quali\014ed)e(b)n(y)h(an)f(axis)h
-(index)227 5494 y(in)30 b(the)f(range)f(1)g(to)h(3.)41
-b(The)29 b(3)g(elemen)n(ts)g(of)g(the)g(Norm)g(attribute)g(are)f
-(together)g(in)n(terpreted)h(as)f(a)h(v)n(ector)e(in)227
-5593 y(3D)g(graphics)e(co)r(ordinates)h(that)h(is)f(normal)g(to)h(the)g
-(plane)g(up)r(on)g(whic)n(h)f(text)i(and)e(marks)g(should)g(b)r(e)i
-(dra)n(wn.)227 5693 y(When)35 b(testing)f(or)f(clearing)f(the)j
-(attribute,)h(the)e(axis)f(index)h(is)g(optional.)55
-b(If)35 b(no)e(index)h(is)g(supplied,)i(then)p eop end
-%%Page: 443 453
-TeXDict begin 443 452 bop 3643 52 a FF(443)227 351 y
-Fj(clearing)22 b(the)h(Norm)f(attribute)h(will)f(clear)g(all)g(three)h
-(elemen)n(ts,)g(and)g(testing)f(the)h(Norm)f(attribute)h(will)g(return)
-227 451 y(a)k(non-zero)f(v)-5 b(alue)28 b(if)g(an)n(y)f(of)g(the)h
-(three)g(elemen)n(ts)f(are)g(set.)227 574 y(The)f(default)f(v)-5
-b(alue)25 b(is)g(1.0)g(for)g(eac)n(h)f(of)h(the)h(3)f(elemen)n(ts.)35
-b(The)26 b(length)f(of)g(the)h(v)n(ector)e(is)h(insigni\014can)n(t,)g
-(but)h(an)227 674 y(error)g(will)i(b)r(e)g(rep)r(orted)f(when)g
-(attempting)h(to)g(dra)n(w)e(text)i(or)f(mark)n(ers)e(if)k(the)f(v)n
-(ector)e(has)h(zero)f(length.)0 820 y Fd(T)m(yp)s(e:)227
-920 y Fj(Floating)h(p)r(oin)n(t.)0 1067 y Fd(Class)k(Applicabilit)m(y:)
-259 1200 y(Plot)427 1300 y Fj(All)d(Plot3Ds)f(ha)n(v)n(e)f(this)i
-(attribute.)p 0 1494 3780 12 v 0 1632 a Fz(NormUnit\(axis\))1097
-1626 y Fe(Normalised)36 b(Axis)i(ph)m(ysical)g(units)2841
-1632 y Fz(NormUnit\(axis\))0 1822 y Fd(Description:)44
-b Fj(The)36 b(v)-5 b(alue)36 b(of)f(this)h(read-only)e(attribute)i(is)f
-(deriv)n(ed)g(from)h(the)g(curren)n(t)e(v)-5 b(alue)36
-b(of)g(the)g(Unit)g(at-)227 1922 y(tribute.)45 b(It)30
-b(will)g(represen)n(t)f(an)h(equiv)-5 b(alen)n(t)30 b(system)f(of)h
-(units)h(to)f(the)g(Unit)h(attribute,)g(but)g(will)f(p)r(oten)n(tially)
-227 2021 y(b)r(e)k(simpli\014ed.)55 b(F)-7 b(or)32 b(instance,)j(if)f
-(Unit)g(is)f(set)h(to)f Ft(")p Fj(s)p Fi(\003)p Fj(\(m/s\))p
-Ft(")p Fj(,)g(the)h(NormUnit)g(v)-5 b(alue)33 b(will)h(b)r(e)f
-Ft(")p Fj(m)p Ft(")p Fj(.)54 b(If)34 b(no)227 2121 y(simpli\014cation)d
-(can)g(b)r(e)h(p)r(erformed,)f(the)h(v)-5 b(alue)31 b(of)g(the)h
-(NormUnit)f(attribute)h(will)f(equal)g(that)g(of)g(the)h(Unit)227
-2221 y(attribute.)0 2367 y Fd(T)m(yp)s(e:)227 2467 y
-Fj(String,)c(read-only)-7 b(.)0 2614 y Fd(Class)31 b(Applicabilit)m(y:)
-259 2747 y(F)-8 b(rame)427 2847 y Fj(All)28 b(F)-7 b(rames)27
-b(ha)n(v)n(e)g(this)g(attribute.)0 3006 y Fd(Notes:)340
-3286 y Fi(\017)45 b Fj(When)36 b(sp)r(ecifying)f(this)h(attribute)f(b)n
-(y)g(name,)i(it)f(should)f(b)r(e)h(subscripted)f(with)g(the)h(n)n(um)n
-(b)r(er)f(of)g(the)427 3386 y(F)-7 b(rame)27 b(axis)g(to)h(whic)n(h)f
-(it)h(applies.)p 0 3579 V 0 3710 a Fz(Nout)730 3711 y
-Fe(Num)m(b)s(er)38 b(of)h(output)e(co)s(ordinates)g(for)h(a)g(Mapping)
-3480 3710 y Fz(Nout)0 3895 y Fd(Description:)44 b Fj(This)30
-b(attribute)g(giv)n(es)f(the)h(n)n(um)n(b)r(er)f(of)h(co)r(ordinate)e
-(v)-5 b(alues)30 b(generated)e(b)n(y)i(a)f(Mapping)h(to)f(sp)r(ecify)
-227 3994 y(eac)n(h)36 b(output)h(p)r(oin)n(t)g(\(i.e.)64
-b(the)36 b(n)n(um)n(b)r(er)h(of)f(dimensions)g(of)h(the)f(space)g(in)h
-(whic)n(h)f(the)h(Mapping's)f(output)227 4094 y(p)r(oin)n(ts)28
-b(reside\).)0 4241 y Fd(T)m(yp)s(e:)227 4340 y Fj(In)n(teger,)f
-(read-only)-7 b(.)0 4487 y Fd(Class)31 b(Applicabilit)m(y:)259
-4621 y(Mapping)427 4720 y Fj(All)d(Mappings)f(ha)n(v)n(e)g(this)h
-(attribute.)259 4850 y Fd(CmpMap)427 4950 y Fj(If)g(a)g(CmpMap's)f
-(comp)r(onen)n(t)h(Mappings)f(are)g(joined)h(in)g(series,)f(then)h(its)
-g(Nout)g(attribute)g(is)f(equal)h(to)427 5050 y(the)i(Nout)f(attribute)
-h(of)f(the)h(second)e(comp)r(onen)n(t)h(\(or)g(to)g(the)h(Nin)g
-(attribute)f(of)g(the)h(\014rst)f(comp)r(onen)n(t)427
-5149 y(if)f(the)g(the)g(CmpMap's)g(In)n(v)n(ert)f(attribute)g(is)h
-(non-zero\).)427 5264 y(If)j(a)e(CmpMap's)h(comp)r(onen)n(t)g(Mappings)
-f(are)g(joined)h(in)g(parallel,)g(then)g(its)g(Nout)g(attribute)h(is)e
-(giv)n(en)427 5364 y(b)n(y)g(the)g(sum)g(of)f(the)i(Nout)f(attributes)f
-(of)h(eac)n(h)f(comp)r(onen)n(t)g(\(or)g(to)h(the)g(sum)g(of)g(their)f
-(Nin)i(attributes)427 5463 y(if)e(the)g(CmpMap's)g(In)n(v)n(ert)f
-(attribute)g(is)h(non-zero\).)259 5593 y Fd(F)-8 b(rame)427
-5693 y Fj(The)20 b(Nout)f(attribute)h(for)e(a)h(F)-7
-b(rame)19 b(is)g(alw)n(a)n(ys)e(equal)i(to)g(the)h(n)n(um)n(b)r(er)f
-(of)g(F)-7 b(rame)19 b(axes)f(\(Naxes)h(attribute\).)p
-eop end
-%%Page: 444 454
-TeXDict begin 444 453 bop 0 52 a FF(444)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)259 351
-y Fd(F)-8 b(rameSet)427 451 y Fj(The)25 b(Nout)g(attribute)g(of)g(a)f
-(F)-7 b(rameSet)25 b(is)f(equal)g(to)h(the)g(n)n(um)n(b)r(er)g(of)f(F)
--7 b(rameSet)25 b(axes)f(\(Naxes)g(attribute\))427 551
-y(whic)n(h,)k(in)f(turn,)h(is)f(equal)g(to)g(the)g(Naxes)g(attribute)h
-(of)f(the)g(F)-7 b(rameSet's)27 b(curren)n(t)g(F)-7 b(rame)26
-b(\(as)h(sp)r(eci\014ed)427 650 y(b)n(y)j(the)h(Curren)n(t)e
-(attribute\).)45 b(The)30 b(Nout)h(attribute)f(v)-5 b(alue)30
-b(ma)n(y)g(therefore)f(c)n(hange)g(if)h(a)g(new)g(curren)n(t)427
-750 y(F)-7 b(rame)27 b(is)h(selected.)p 0 950 3780 12
-v 0 1088 a Fz(NumLab\(axis\))1062 1082 y Fe(Dra)m(w)38
-b(n)m(umerical)f(axis)h(lab)s(els)g(for)g(a)1754 1181
-y(Plot?)2935 1088 y Fz(NumLab\(axis\))0 1352 y Fd(Description:)44
-b Fj(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)
-h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-1452 y(astGrid)22 b(function\))i(b)n(y)e(determining)g(whether)h(lab)r
-(els)f(should)g(b)r(e)h(dra)n(wn)f(to)g(represen)n(t)f(the)i(n)n
-(umerical)f(v)-5 b(alues)227 1552 y(along)33 b(eac)n(h)f(axis)h(of)h(a)
-f(Plot.)54 b(It)34 b(tak)n(es)f(a)g(separate)f(v)-5 b(alue)34
-b(for)f(eac)n(h)g(ph)n(ysical)f(axis)h(of)h(a)f(Plot)g(so)g(that,)i
-(for)227 1651 y(instance,)21 b(the)f(setting)f Ft(")p
-Fj(NumLab\(2\)=1)p Ft(")e Fj(sp)r(eci\014es)i(that)h(n)n(umerical)e
-(lab)r(els)h(should)g(b)r(e)h(dra)n(wn)e(for)h(the)g(second)227
-1751 y(axis.)227 1876 y(If)30 b(the)f(NumLab)h(v)-5 b(alue)29
-b(of)g(a)f(Plot)h(axis)f(is)h(non-zero)f(\(the)i(default\),)g(then)g(n)
-n(umerical)e(lab)r(els)h(will)g(b)r(e)h(dra)n(wn)227
-1975 y(for)d(that)h(axis,)f(otherwise)g(they)h(will)f(b)r(e)h(omitted.)
-0 2126 y Fd(T)m(yp)s(e:)227 2225 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0
-2376 y Fd(Class)k(Applicabilit)m(y:)259 2513 y(Plot)427
-2613 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-2775 y Fd(Notes:)340 3059 y Fi(\017)45 b Fj(The)34 b(dra)n(wing)f(of)h
-(asso)r(ciated)f(descriptiv)n(e)g(axis)g(lab)r(els)h(for)g(a)f(Plot)h
-(\(describing)f(the)i(quan)n(tit)n(y)f(b)r(eing)427 3158
-y(plotted)28 b(along)f(eac)n(h)f(axis\))i(is)f(con)n(trolled)f(b)n(y)i
-(the)g(T)-7 b(extLab\(axis\))27 b(attribute.)340 3292
-y Fi(\017)45 b Fj(If)35 b(no)f(axis)f(is)h(sp)r(eci\014ed,)i(\(e.g.)57
-b Ft(")p Fj(NumLab)p Ft(")34 b Fj(instead)g(of)g Ft(")p
-Fj(NumLab\(2\))p Ft(")p Fj(\),)h(then)g(a)f Ft(")p Fj(set)p
-Ft(")f Fj(or)g Ft(")p Fj(clear)p Ft(")427 3391 y Fj(op)r(eration)23
-b(will)i(a\013ect)f(the)h(attribute)f(v)-5 b(alue)24
-b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f Ft(")p
-Fj(get)p Ft(")f Fj(or)g Ft(")p Fj(test)p Ft(")h Fj(op)r(eration)427
-3491 y(will)k(use)g(just)g(the)g(NumLab\(1\))g(v)-5 b(alue.)p
-0 3691 V 0 3829 a Fz(NumLabGap\(axis\))1356 3823 y Fe(Spacing)38
-b(of)h(n)m(umerical)1479 3937 y(lab)s(els)f(for)g(a)g(Plot)2689
-3829 y Fz(NumLabGap\(axis\))0 4108 y Fd(Description:)44
-b Fj(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)
-h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-4208 y(astGrid)e(function\))i(b)n(y)e(determining)h(where)f(n)n
-(umerical)g(axis)g(lab)r(els)g(are)g(placed)g(relativ)n(e)g(to)h(the)g
-(axes)e(they)227 4308 y(describ)r(e.)36 b(It)27 b(tak)n(es)e(a)g
-(separate)g(v)-5 b(alue)25 b(for)h(eac)n(h)f(ph)n(ysical)g(axis)g(of)h
-(a)g(Plot)f(so)g(that,)i(for)e(instance,)h(the)h(setting)227
-4407 y Ft(")p Fj(NumLabGap\(2\)=-0.01)p Ft(")e Fj(sp)r(eci\014es)i
-(where)g(the)h(n)n(umerical)f(lab)r(el)h(for)f(the)h(second)f(axis)g
-(should)g(b)r(e)h(dra)n(wn.)227 4532 y(F)-7 b(or)21 b(eac)n(h)f(axis,)i
-(the)f(NumLabGap)h(v)-5 b(alue)21 b(giv)n(es)f(the)h(spacing)f(b)r(et)n
-(w)n(een)h(the)h(axis)e(line)i(\(or)e(edge)h(of)g(the)h(plotting)227
-4632 y(area,)e(if)g(appropriate\))e(and)h(the)h(nearest)f(edge)g(of)g
-(the)h(corresp)r(onding)e(n)n(umerical)g(axis)h(lab)r(els.)34
-b(P)n(ositiv)n(e)18 b(v)-5 b(alues)227 4732 y(cause)28
-b(the)h(descriptiv)n(e)f(lab)r(el)h(to)g(b)r(e)g(placed)f(on)h(the)g
-(opp)r(osite)g(side)f(of)h(the)g(line)g(to)g(the)g(default)g(tic)n(k)g
-(marks,)227 4831 y(while)f(negativ)n(e)f(v)-5 b(alues)27
-b(cause)g(it)h(to)f(b)r(e)h(placed)f(on)h(the)g(same)f(side.)227
-4956 y(The)33 b(NumLabGap)f(v)-5 b(alue)33 b(should)f(b)r(e)h(giv)n(en)
-f(as)f(a)h(fraction)g(of)h(the)g(minim)n(um)g(dimension)f(of)h(the)g
-(plotting)227 5056 y(area,)26 b(the)i(default)g(v)-5
-b(alue)28 b(b)r(eing)g(+0.01.)0 5206 y Fd(T)m(yp)s(e:)227
-5306 y Fj(Floating)f(p)r(oin)n(t.)0 5456 y Fd(Class)k(Applicabilit)m
-(y:)259 5593 y(Plot)427 5693 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)p eop end
-%%Page: 445 455
-TeXDict begin 445 454 bop 3643 52 a FF(445)0 351 y Fd(Notes:)340
-631 y Fi(\017)45 b Fj(If)34 b(no)f(axis)g(is)g(sp)r(eci\014ed,)i
-(\(e.g.)54 b Ft(")p Fj(NumLabGap)p Ft(")32 b Fj(instead)i(of)f
-Ft(")p Fj(NumLabGap\(2\))p Ft(")p Fj(\),)h(then)g(a)f
-Ft(")p Fj(set)p Ft(")f Fj(or)427 731 y Ft(")p Fj(clear)p
-Ft(")c Fj(op)r(eration)g(will)i(a\013ect)g(the)g(attribute)g(v)-5
-b(alue)29 b(of)h(all)f(the)h(Plot)f(axes,)g(while)h(a)f
-Ft(")p Fj(get)p Ft(")f Fj(or)h Ft(")p Fj(test)p Ft(")427
-831 y Fj(op)r(eration)e(will)h(use)f(just)h(the)g(NumLabGap\(1\))g(v)-5
-b(alue.)p 0 1025 3780 12 v 0 1157 a Fz(Ob)7 b(jSize)566
-b Fe(The)38 b(in-memory)f(size)i(of)f(the)h(Ob)7 b(ject)564
-b Fz(Ob)7 b(jSize)0 1341 y Fd(Description:)44 b Fj(This)c(attribute)g
-(giv)n(es)f(the)h(total)g(n)n(um)n(b)r(er)f(of)h(b)n(ytes)g(of)f
-(memory)g(used)h(b)n(y)g(the)g(Ob)5 b(ject.)74 b(This)227
-1440 y(includes)28 b(an)n(y)f(Ob)5 b(jects)27 b(whic)n(h)h(are)e
-(encapsulated)h(within)h(the)g(supplied)g(Ob)5 b(ject.)0
-1587 y Fd(T)m(yp)s(e:)227 1687 y Fj(In)n(teger,)27 b(read-only)-7
-b(.)0 1834 y Fd(Class)31 b(Applicabilit)m(y:)259 1968
-y(Ob)5 b(ject)427 2068 y Fj(All)28 b(Ob)5 b(jects)28
-b(ha)n(v)n(e)e(this)i(attribute.)p 0 2262 V 0 2394 a
-Fz(ObsAlt)523 b Fe(The)39 b(geo)s(detic)e(altitude)g(of)h(the)h(observ)
-m(er)522 b Fz(ObsAlt)0 2578 y Fd(Description:)44 b Fj(This)35
-b(attribute)g(sp)r(eci\014es)g(the)g(geo)r(detic)g(altitude)g(of)g(the)
-g(observ)n(er,)g(in)g(metres,)i(relativ)n(e)c(to)i(the)227
-2677 y(IA)n(U)26 b(1976)e(reference)h(ellipsoid.)36 b(The)26
-b(basic)f(F)-7 b(rame)25 b(class)g(mak)n(es)g(no)g(use)h(of)f(this)h
-(attribute,)h(but)f(sp)r(ecialised)227 2777 y(sub)r(classes)31
-b(of)g(F)-7 b(rame)30 b(ma)n(y)h(use)g(it.)48 b(F)-7
-b(or)31 b(instance,)h(the)g(Sp)r(ecF)-7 b(rame,)32 b(SkyF)-7
-b(rame)30 b(and)h(TimeF)-7 b(rame)31 b(classes)227 2876
-y(use)d(it.)37 b(The)28 b(default)g(v)-5 b(alue)27 b(is)h(zero.)0
-3023 y Fd(T)m(yp)s(e:)227 3123 y Fj(String.)0 3270 y
-Fd(Class)j(Applicabilit)m(y:)259 3404 y(F)-8 b(rame)427
-3504 y Fj(All)28 b(F)-7 b(rames)27 b(ha)n(v)n(e)g(this)g(attribute.)259
-3634 y Fd(Sp)s(ecF)-8 b(rame)427 3734 y Fj(T)h(ogether)23
-b(with)h(the)g(ObsLon,)g(Ep)r(o)r(c)n(h,)g(RefRA)g(and)g(RefDec)g
-(attributes,)h(it)f(de\014nes)f(the)i(Doppler)e(shift)427
-3833 y(in)n(tro)r(duced)35 b(b)n(y)g(the)g(observ)n(ers)d(diurnal)j
-(motion)f(around)g(the)i(earths)e(axis,)i(whic)n(h)f(is)f(needed)h
-(when)427 3933 y(con)n(v)n(erting)30 b(to)h(or)f(from)h(the)h(top)r(o)r
-(cen)n(tric)f(standard)f(of)i(rest.)47 b(The)32 b(maxim)n(um)f(v)n(elo)
-r(cit)n(y)f(error)g(whic)n(h)427 4033 y(can)d(b)r(e)h(caused)f(b)n(y)h
-(an)f(incorrect)f(v)-5 b(alue)28 b(is)f(0.5)g(km/s.)36
-b(The)28 b(default)g(v)-5 b(alue)28 b(for)f(the)h(attribute)f(is)h
-(zero.)259 4163 y Fd(TimeF)-8 b(rame)427 4263 y Fj(T)h(ogether)28
-b(with)i(the)f(ObsLon)g(attribute,)g(it)h(is)f(used)g(when)g(con)n(v)n
-(erting)e(b)r(et)n(w)n(een)j(certain)e(time)i(scales)427
-4362 y(\(TDB,)e(TCB,)g(LMST,)g(LAST\))p 0 4557 V 0 4688
-a Fz(ObsLat)516 b Fe(The)39 b(geo)s(detic)e(latitude)g(of)h(the)h
-(observ)m(er)514 b Fz(ObsLat)0 4872 y Fd(Description:)44
-b Fj(This)34 b(attribute)f(sp)r(eci\014es)g(the)h(geo)r(detic)e
-(latitude)i(of)f(the)h(observ)n(er,)e(in)i(degrees,)f(relativ)n(e)f(to)
-h(the)227 4972 y(IA)n(U)26 b(1976)e(reference)h(ellipsoid.)36
-b(The)26 b(basic)f(F)-7 b(rame)25 b(class)g(mak)n(es)g(no)g(use)h(of)f
-(this)h(attribute,)h(but)f(sp)r(ecialised)227 5072 y(sub)r(classes)31
-b(of)g(F)-7 b(rame)30 b(ma)n(y)h(use)g(it.)48 b(F)-7
-b(or)31 b(instance,)h(the)g(Sp)r(ecF)-7 b(rame,)32 b(SkyF)-7
-b(rame)30 b(and)h(TimeF)-7 b(rame)31 b(classes)227 5171
-y(use)d(it.)37 b(The)28 b(default)g(v)-5 b(alue)27 b(is)h(zero.)227
-5295 y(The)37 b(v)-5 b(alue)36 b(is)g(stored)f(in)n(ternally)g(in)i
-(radians,)g(but)g(is)f(con)n(v)n(erted)f(to)h(and)g(from)g(a)f(degrees)
-g(string)h(for)f(ac-)227 5394 y(cess.)79 b(Some)41 b(example)h(input)g
-(formats)f(are:)64 b Ft(")p Fj(22:19:23.2)p Ft(")p Fj(,)42
-b Ft(")p Fj(22)e(19)h(23.2)p Ft(")p Fj(,)i Ft(")p Fj(22:19.387)p
-Ft(")p Fj(,)f Ft(")p Fj(22.32311)p Ft(")p Fj(,)227 5494
-y Ft(")p Fj(N22.32311)p Ft(")p Fj(,)e Ft(")p Fj(-45.6)p
-Ft(")p Fj(,)h Ft(")p Fj(S45.6)p Ft(")p Fj(.)72 b(As)40
-b(indicated,)k(the)c(sign)g(of)g(the)g(latitude)h(can)f(optionally)f(b)
-r(e)h(indi-)227 5593 y(cated)23 b(using)g(c)n(haracters)e
-Ft(")p Fj(N)p Ft(")i Fj(and)g Ft(")p Fj(S)p Ft(")f Fj(in)i(place)f(of)g
-(the)g(usual)g Ft(")p Fj(+)p Ft(")f Fj(and)h Ft(")p Fj(-)p
-Ft(")p Fj(.)35 b(When)23 b(con)n(v)n(erting)f(the)h(stored)227
-5693 y(v)-5 b(alue)28 b(to)f(a)g(string,)g(the)h(format)f
-Ft(")p Fj([s]dd:mm:ss.ss)p Ft(")g Fj(is)g(used,)h(when)g
-Ft(")p Fj([s])p Ft(")f Fj(is)g Ft(")p Fj(N)p Ft(")g Fj(or)g
-Ft(")p Fj(S)p Ft(")p Fj(.)p eop end
-%%Page: 446 456
-TeXDict begin 446 455 bop 0 52 a FF(446)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fd(T)m(yp)s(e:)227 451 y Fj(String.)0 603 y Fd(Class)g(Applicabilit)m
-(y:)259 742 y(F)-8 b(rame)427 842 y Fj(All)28 b(F)-7
-b(rames)27 b(ha)n(v)n(e)g(this)g(attribute.)259 976 y
-Fd(Sp)s(ecF)-8 b(rame)427 1076 y Fj(T)h(ogether)23 b(with)h(the)g
-(ObsLon,)g(Ep)r(o)r(c)n(h,)g(RefRA)g(and)g(RefDec)g(attributes,)h(it)f
-(de\014nes)f(the)i(Doppler)e(shift)427 1175 y(in)n(tro)r(duced)35
-b(b)n(y)g(the)g(observ)n(ers)d(diurnal)j(motion)f(around)g(the)i
-(earths)e(axis,)i(whic)n(h)f(is)f(needed)h(when)427 1275
-y(con)n(v)n(erting)30 b(to)h(or)f(from)h(the)h(top)r(o)r(cen)n(tric)f
-(standard)f(of)i(rest.)47 b(The)32 b(maxim)n(um)f(v)n(elo)r(cit)n(y)f
-(error)g(whic)n(h)427 1375 y(can)d(b)r(e)h(caused)f(b)n(y)h(an)f
-(incorrect)f(v)-5 b(alue)28 b(is)f(0.5)g(km/s.)36 b(The)28
-b(default)g(v)-5 b(alue)28 b(for)f(the)h(attribute)f(is)h(zero.)259
-1509 y Fd(TimeF)-8 b(rame)427 1608 y Fj(T)h(ogether)28
-b(with)i(the)f(ObsLon)g(attribute,)g(it)h(is)f(used)g(when)g(con)n(v)n
-(erting)e(b)r(et)n(w)n(een)j(certain)e(time)i(scales)427
-1708 y(\(TDB,)e(TCB,)g(LMST,)g(LAST\))p 0 1910 3780 12
-v 0 2042 a Fz(ObsLon)452 b Fe(The)39 b(geo)s(detic)e(longitude)g(of)h
-(the)h(observ)m(er)451 b Fz(ObsLon)0 2238 y Fd(Description:)44
-b Fj(This)22 b(attribute)g(sp)r(eci\014es)f(the)h(geo)r(detic)f(\(or)h
-(equiv)-5 b(alen)n(tly)e(,)22 b(geo)r(cen)n(tric\))f(longitude)g(of)h
-(the)g(observ)n(er,)227 2337 y(in)e(degrees,)f(measured)f(p)r(ositiv)n
-(e)h(east)n(w)n(ards.)32 b(See)19 b(also)e(attribute)j(ObsLat.)33
-b(The)19 b(basic)f(F)-7 b(rame)19 b(class)f(mak)n(es)g(no)227
-2437 y(use)26 b(of)g(this)h(attribute,)g(but)f(sp)r(ecialised)g(sub)r
-(classes)f(of)h(F)-7 b(rame)26 b(ma)n(y)f(use)i(it.)36
-b(F)-7 b(or)26 b(instance,)g(the)h(Sp)r(ecF)-7 b(rame,)227
-2537 y(SkyF)g(rame)27 b(and)h(TimeF)-7 b(rame)27 b(classes)f(use)h(it.)
-38 b(The)27 b(default)h(v)-5 b(alue)28 b(is)f(zero.)227
-2663 y(The)37 b(v)-5 b(alue)36 b(is)g(stored)f(in)n(ternally)g(in)i
-(radians,)g(but)g(is)f(con)n(v)n(erted)f(to)h(and)g(from)g(a)f(degrees)
-g(string)h(for)f(ac-)227 2762 y(cess.)45 b(Some)30 b(example)g(input)i
-(formats)d(are:)42 b Ft(")p Fj(155:19:23.2)p Ft(")p Fj(,)27
-b Ft(")p Fj(155)h(19)i(23.2)p Ft(")p Fj(,)f Ft(")p Fj(155:19.387)p
-Ft(")p Fj(,)e Ft(")p Fj(155.32311)p Ft(")p Fj(,)227 2862
-y Ft(")p Fj(E155.32311)p Ft(")p Fj(,)19 b Ft(")p Fj(-204.67689)p
-Ft(")p Fj(,)h Ft(")p Fj(W204.67689)p Ft(")p Fj(.)31 b(As)23
-b(indicated,)i(the)f(sign)e(of)i(the)f(longitude)h(can)e(optionally)227
-2961 y(b)r(e)30 b(indicated)g(using)f(c)n(haracters)f
-Ft(")p Fj(E)p Ft(")g Fj(and)h Ft(")p Fj(W)p Ft(")h Fj(in)f(place)h(of)f
-(the)h(usual)f Ft(")p Fj(+)p Ft(")g Fj(and)g Ft(")p Fj(-)p
-Ft(")p Fj(.)42 b(When)30 b(con)n(v)n(erting)227 3061
-y(the)g(stored)f(v)-5 b(alue)29 b(to)h(a)f(string,)h(the)f(format)h
-Ft(")p Fj([s]ddd:mm:ss.ss)p Ft(")e Fj(is)i(used,)g(when)f
-Ft(")p Fj([s])p Ft(")g Fj(is)h Ft(")p Fj(E)p Ft(")e Fj(or)h
-Ft(")p Fj(W)p Ft(")g Fj(and)227 3161 y(the)f(n)n(umerical)f(v)-5
-b(alue)27 b(is)h(c)n(hosen)f(to)g(b)r(e)h(less)f(than)h(180)e(degrees.)
-0 3313 y Fd(T)m(yp)s(e:)227 3413 y Fj(String.)0 3565
-y Fd(Class)31 b(Applicabilit)m(y:)259 3704 y(F)-8 b(rame)427
-3803 y Fj(All)28 b(F)-7 b(rames)27 b(ha)n(v)n(e)g(this)g(attribute.)259
-3938 y Fd(Sp)s(ecF)-8 b(rame)427 4037 y Fj(T)h(ogether)23
-b(with)h(the)g(ObsLon,)g(Ep)r(o)r(c)n(h,)g(RefRA)g(and)g(RefDec)g
-(attributes,)h(it)f(de\014nes)f(the)i(Doppler)e(shift)427
-4137 y(in)n(tro)r(duced)35 b(b)n(y)g(the)g(observ)n(ers)d(diurnal)j
-(motion)f(around)g(the)i(earths)e(axis,)i(whic)n(h)f(is)f(needed)h
-(when)427 4237 y(con)n(v)n(erting)30 b(to)h(or)f(from)h(the)h(top)r(o)r
-(cen)n(tric)f(standard)f(of)i(rest.)47 b(The)32 b(maxim)n(um)f(v)n(elo)
-r(cit)n(y)f(error)g(whic)n(h)427 4336 y(can)d(b)r(e)h(caused)f(b)n(y)h
-(an)f(incorrect)f(v)-5 b(alue)28 b(is)f(0.5)g(km/s.)36
-b(The)28 b(default)g(v)-5 b(alue)28 b(for)f(the)h(attribute)f(is)h
-(zero.)259 4470 y Fd(TimeF)-8 b(rame)427 4570 y Fj(T)h(ogether)28
-b(with)i(the)f(ObsLon)g(attribute,)g(it)h(is)f(used)g(when)g(con)n(v)n
-(erting)e(b)r(et)n(w)n(een)j(certain)e(time)i(scales)427
-4670 y(\(TDB,)e(TCB,)g(LMST,)g(LAST\))p 0 4872 V 0 5010
-a Fz(PVMax\(i\))767 5003 y Fe(Maxim)m(um)37 b(n)m(um)m(b)s(er)h(of)g
-(FITS-W)m(CS)h(pro)7 b(jection)1607 5103 y(parameters)3180
-5010 y Fz(PVMax\(i\))0 5295 y Fd(Description:)44 b Fj(This)27
-b(attribute)g(sp)r(eci\014es)g(the)g(largest)e(legal)h(index)h(for)f(a)
-h(PV)f(pro)5 b(jection)26 b(parameter)g(attac)n(hed)g(to)227
-5394 y(a)j(sp)r(eci\014ed)h(axis)e(of)i(the)g(WcsMap)f(\(i.e.)42
-b(the)30 b(largest)e(legal)h(v)-5 b(alue)29 b(for)g Ft(")p
-Fj(m)p Ft(")g Fj(when)g(accessing)f(the)i Ft(")p Fj(PVi)p
-Ft(_)p Fj(m)p Ft(")227 5494 y Fj(attribute\).)59 b(The)35
-b(axis)e(index)i(is)g(sp)r(eci\014ed)g(b)n(y)f(i,)j(and)d(should)h(b)r
-(e)g(in)g(the)g(range)e(1)h(to)h(99.)57 b(The)35 b(v)-5
-b(alue)34 b(for)227 5593 y(eac)n(h)d(axis)g(is)h(determined)g(b)n(y)g
-(the)g(pro)5 b(jection)31 b(t)n(yp)r(e)h(sp)r(eci\014ed)g(when)g(the)g
-(WcsMap)g(is)f(\014rst)h(created)f(using)227 5693 y(astWcsMap)c(and)h
-(cannot)f(subsequen)n(tly)g(b)r(e)h(c)n(hanged.)p eop
-end
-%%Page: 447 457
-TeXDict begin 447 456 bop 3643 52 a FF(447)0 351 y Fd(T)m(yp)s(e:)227
-451 y Fj(In)n(teger,)27 b(read-only)-7 b(.)0 608 y Fd(Class)31
-b(Applicabilit)m(y:)259 753 y(WcsMap)427 852 y Fj(All)d(WcsMaps)f(ha)n
-(v)n(e)g(this)h(attribute.)p 0 1060 3780 12 v 0 1191
-a Fz(PVi)p Fb(_)p Fz(m)1022 1190 y Fe(FITS-W)m(CS)39
-b(pro)7 b(jection)36 b(parameters)3375 1191 y Fz(PVi)p
-Fb(_)p Fz(m)0 1387 y Fd(Description:)44 b Fj(This)32
-b(attribute)h(sp)r(eci\014es)f(the)g(pro)5 b(jection)32
-b(parameter)e(v)-5 b(alues)32 b(to)g(b)r(e)h(used)f(b)n(y)g(a)f(WcsMap)
-h(when)227 1486 y(implemen)n(ting)26 b(a)e(FITS-W)n(CS)i(sky)e(pro)5
-b(jection.)35 b(Eac)n(h)24 b(PV)h(attribute)g(name)g(should)g(include)h
-(t)n(w)n(o)e(in)n(tegers,)g(i)227 1586 y(and)k(m,)g(separated)e(b)n(y)i
-(an)f(underscore.)35 b(The)28 b(axis)f(index)h(is)f(sp)r(eci\014ed)h(b)
-n(y)g(i,)g(and)f(should)h(b)r(e)g(in)g(the)g(range)e(1)227
-1686 y(to)i(99.)36 b(The)27 b(parameter)f(n)n(um)n(b)r(er)h(is)g(sp)r
-(eci\014ed)h(b)n(y)f(m,)h(and)f(should)h(b)r(e)f(in)h(the)g(range)e(0)h
-(to)g(99.)36 b(F)-7 b(or)27 b(example,)227 1785 y Ft(")p
-Fj(PV2)p Ft(_)p Fj(1=45.0)p Ft(")d Fj(w)n(ould)j(sp)r(ecify)h(a)f(v)-5
-b(alue)27 b(for)g(pro)5 b(jection)27 b(parameter)f(1)h(of)h(axis)f(2)g
-(in)h(a)f(WcsMap.)227 1914 y(These)20 b(pro)5 b(jection)19
-b(parameters)f(corresp)r(ond)h(exactly)g(to)h(the)h(v)-5
-b(alues)19 b(stored)g(using)h(the)h(FITS-W)n(CS)f(k)n(eyw)n(ords)227
-2014 y Ft(")p Fj(PV1)p Ft(_)p Fj(1)p Ft(")p Fj(,)k Ft(")p
-Fj(PV1)p Ft(_)p Fj(2)p Ft(")p Fj(,)g(etc.)37 b(This)26
-b(means)f(that)h(pro)5 b(jection)25 b(parameters)g(whic)n(h)g(corresp)r
-(ond)g(to)h(angles)e(m)n(ust)227 2113 y(b)r(e)31 b(giv)n(en)e(in)i
-(degrees)d(\(despite)j(the)g(fact)f(that)g(the)h(angular)e(co)r
-(ordinates)f(and)i(other)g(attributes)g(used)g(b)n(y)g(a)227
-2213 y(WcsMap)e(are)e(in)i(radians\).)227 2341 y(The)36
-b(set)g(of)g(pro)5 b(jection)34 b(parameters)g(used)i(b)n(y)g(a)f
-(WcsMap)g(dep)r(ends)i(on)e(the)h(t)n(yp)r(e)g(of)g(pro)5
-b(jection,)37 b(whic)n(h)227 2441 y(is)c(determined)g(b)n(y)g(its)g
-(WcsT)n(yp)r(e)g(parameter.)51 b(Most)33 b(pro)5 b(jections)31
-b(either)i(do)g(not)g(require)e(pro)5 b(jection)32 b(pa-)227
-2541 y(rameters,)37 b(or)d(use)i(parameters)e(1)h(and)h(2)f(asso)r
-(ciated)f(with)i(the)g(latitude)g(axis.)61 b(Y)-7 b(ou)35
-b(should)h(consult)f(the)227 2640 y(FITS-W)n(CS)28 b(pap)r(er)f(for)g
-(details.)227 2769 y(Some)g(pro)5 b(jection)26 b(parameters)f(ha)n(v)n
-(e)h(default)h(v)-5 b(alues)26 b(\(as)h(de\014ned)g(in)g(the)g(FITS-W)n
-(CS)g(pap)r(er\))g(whic)n(h)g(apply)227 2868 y(if)34
-b(no)g(explicit)f(v)-5 b(alue)34 b(is)f(giv)n(en.)54
-b(Y)-7 b(ou)34 b(ma)n(y)f(omit)g(setting)h(a)f(v)-5 b(alue)33
-b(for)g(these)h Ft(")p Fj(optional)p Ft(")e Fj(parameters)g(and)227
-2968 y(the)27 b(default)g(will)g(apply)-7 b(.)37 b(Some)26
-b(pro)5 b(jection)26 b(parameters,)f(ho)n(w)n(ev)n(er,)g(ha)n(v)n(e)g
-(no)i(default)g(and)g(a)f(v)-5 b(alue)26 b(m)n(ust)h(b)r(e)227
-3068 y(explicitly)32 b(supplied.)48 b(This)31 b(is)g(most)g(con)n(v)n
-(enien)n(tly)f(done)h(using)g(the)g Ft(")p Fj(options)p
-Ft(")f Fj(argumen)n(t)g(of)h(astWcsMap)227 3167 y(\(q.v.\))40
-b(when)29 b(a)f(WcsMap)g(is)g(\014rst)h(created.)38 b(An)29
-b(error)e(will)h(result)h(when)f(a)g(WcsMap)h(is)f(used)g(to)h
-(transform)227 3267 y(co)r(ordinates)c(if)h(an)n(y)f(of)h(its)g
-(required)f(pro)5 b(jection)25 b(parameters)g(has)g(not)h(b)r(een)g
-(set)g(and)g(lac)n(ks)f(a)g(default)i(v)-5 b(alue.)227
-3395 y(A)36 b Ft(")p Fj(get)p Ft(")e Fj(op)r(eration)h(for)g(a)g
-(parameter)f(whic)n(h)h(has)g(not)g(b)r(een)h(assigned)e(a)h(v)-5
-b(alue)36 b(will)f(return)g(the)h(default)227 3495 y(v)-5
-b(alue)32 b(de\014ned)g(in)g(the)h(FITS-W)n(CS)f(pap)r(er,)g(or)f(AST)p
-Ft(__)p Fj(BAD)h(if)g(the)h(pap)r(er)e(indicates)h(that)g(the)g
-(parameter)227 3595 y(has)f(no)f(default.)48 b(A)31 b(default)g(v)-5
-b(alue)31 b(of)g(zero)f(is)h(returned)f(for)h(parameters)e(whic)n(h)i
-(are)f(not)h(accessed)f(b)n(y)g(the)227 3694 y(pro)5
-b(jection.)227 3823 y(Note,)31 b(the)f(FITS-W)n(CS)g(pap)r(er)f(reserv)
-n(es)f(parameters)g(1)h(and)h(2)f(on)h(the)g(longitude)g(axis)f(to)g
-(hold)h(the)g(nativ)n(e)227 3922 y(longitude)j(and)h(latitude)g(of)f
-(the)h(\014ducial)f(p)r(oin)n(t)h(of)f(the)h(pro)5 b(jection,)34
-b(in)g(degrees.)53 b(The)33 b(default)h(v)-5 b(alues)33
-b(for)227 4022 y(these)e(parameters)f(are)g(determined)h(b)n(y)g(the)h
-(pro)5 b(jection)30 b(t)n(yp)r(e.)47 b(The)32 b(AST-sp)r(eci\014c)f
-(TPN)g(pro)5 b(jection)30 b(do)r(es)227 4122 y(not)25
-b(use)g(this)g(con)n(v)n(en)n(tion)e(-)h(all)h(pro)5
-b(jection)24 b(parameters)f(for)h(b)r(oth)h(axes)f(are)g(used)g(to)h
-(represen)n(t)e(p)r(olynomical)227 4221 y(correction)29
-b(terms,)h(and)g(the)g(nativ)n(e)g(longitude)f(and)h(latitude)h(at)e
-(the)i(\014ducial)f(p)r(oin)n(t)g(ma)n(y)f(not)h(b)r(e)h(c)n(hanged)227
-4321 y(from)d(the)g(default)g(v)-5 b(alues)27 b(of)g(zero)g(and)g(90)g
-(degrees.)0 4478 y Fd(T)m(yp)s(e:)227 4578 y Fj(Floating)g(p)r(oin)n
-(t.)0 4735 y Fd(Class)k(Applicabilit)m(y:)259 4880 y(WcsMap)427
-4980 y Fj(All)d(WcsMaps)f(ha)n(v)n(e)g(this)h(attribute.)0
-5149 y Fd(Notes:)340 5440 y Fi(\017)45 b Fj(If)33 b(the)g(pro)5
-b(jection)31 b(parameter)g(v)-5 b(alues)31 b(giv)n(en)h(for)g(a)f
-(WcsMap)h(do)g(not)h(satisfy)e(all)h(the)h(required)e(con-)427
-5540 y(strain)n(ts)d(\(as)g(de\014ned)h(in)f(the)h(FITS-W)n(CS)f(pap)r
-(er\),)h(then)g(an)f(error)e(will)j(result)f(when)h(the)g(WcsMap)f(is)
-427 5639 y(used)g(to)f(transform)g(co)r(ordinates.)p
-eop end
-%%Page: 448 458
-TeXDict begin 448 457 bop 0 52 a FF(448)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 490 a Fz(PcdCen\(axis\))1342 483 y Fe(Cen)m(tre)37
-b(co)s(ordinates)g(of)1170 583 y(pincushion/barrel)f(distortion)2989
-490 y Fz(PcdCen\(axis\))0 828 y Fd(Description:)44 b
-Fj(This)39 b(attribute)g(sp)r(eci\014es)f(the)h(cen)n(tre)f(of)h(the)g
-(pincushion/barrel)e(distortion)h(implemen)n(ted)h(b)n(y)227
-928 y(a)i(PcdMap.)76 b(It)41 b(tak)n(es)f(a)h(separate)f(v)-5
-b(alue)40 b(for)h(eac)n(h)f(axis)g(of)h(the)g(PcdMap)g(so)f(that,)45
-b(for)40 b(instance,)k(the)227 1028 y(settings)35 b Ft(")p
-Fj(PcdCen\(1\)=345.0,PcdCen\(2\)=-104.4)o Ft(")29 b Fj(sp)r(ecify)34
-b(that)h(the)g(pincushion)g(distortion)f(is)g(cen)n(tred)227
-1127 y(at)26 b(p)r(ositions)f(of)h(345.0)d(and)j(-104.4)d(on)j(axes)e
-(1)i(and)f(2)g(resp)r(ectiv)n(ely)-7 b(.)36 b(This)25
-b(attribute)h(is)g(set)f(when)h(a)f(PcdMap)227 1227 y(is)i(created,)f
-(but)h(ma)n(y)f(later)f(b)r(e)i(mo)r(di\014ed.)37 b(If)27
-b(the)g(attribute)g(is)f(cleared,)g(the)h(default)g(v)-5
-b(alue)26 b(for)g(b)r(oth)h(axes)f(is)227 1326 y(zero.)0
-1521 y Fd(T)m(yp)s(e:)227 1621 y Fj(Floating)h(p)r(oin)n(t.)0
-1816 y Fd(Class)k(Applicabilit)m(y:)259 1998 y(PcdMap)427
-2098 y Fj(All)d(PcdMaps)f(ha)n(v)n(e)f(this)i(attribute.)0
-2305 y Fd(Notes:)340 2634 y Fi(\017)45 b Fj(If)39 b(no)f(axis)g(is)g
-(sp)r(eci\014ed,)j(\(e.g.)70 b Ft(")p Fj(PcdCen)p Ft(")37
-b Fj(instead)h(of)g Ft(")p Fj(PcdCen\(2\))p Ft(")p Fj(\),)j(then)d(a)g
-Ft(")p Fj(set)p Ft(")g Fj(or)f Ft(")p Fj(clear)p Ft(")427
-2733 y Fj(op)r(eration)29 b(will)h(a\013ect)g(the)g(attribute)g(v)-5
-b(alue)29 b(of)h(b)r(oth)g(axes,)g(while)g(a)f Ft(")p
-Fj(get)p Ft(")g Fj(or)f Ft(")p Fj(test)p Ft(")i Fj(op)r(eration)e(will)
-427 2833 y(use)g(just)g(the)g(PcdCen\(1\))f(v)-5 b(alue.)p
-0 3078 V 0 3208 a Fz(P)l(erm)l(ute)1375 3209 y Fe(P)m(erm)m(ute)37
-b(axis)h(order?)3278 3208 y Fz(P)l(erm)l(ute)0 3425 y
-Fd(Description:)44 b Fj(This)26 b(attribute)f(is)g(a)g(b)r(o)r(olean)f
-(v)-5 b(alue)25 b(whic)n(h)h(con)n(trols)d(ho)n(w)i(a)g(F)-7
-b(rame)24 b(b)r(eha)n(v)n(es)g(when)i(it)f(is)g(used)h(\(b)n(y)227
-3525 y(astFindF)-7 b(rame\))27 b(as)f(a)g(template)h(to)f(matc)n(h)g
-(another)g(\(target\))g(F)-7 b(rame.)36 b(It)27 b(sp)r(eci\014es)g
-(whether)f(the)h(axis)f(order)227 3624 y(of)i(the)g(target)e(F)-7
-b(rame)28 b(ma)n(y)e(b)r(e)i(p)r(erm)n(uted)g(in)g(order)e(to)i(obtain)
-f(a)g(matc)n(h.)227 3772 y(If)f(the)f(template's)g(P)n(erm)n(ute)f(v)-5
-b(alue)24 b(is)h(zero,)g(it)g(will)g(matc)n(h)g(a)f(target)g(only)h(if)
-g(it)g(can)g(do)f(so)h(without)g(c)n(hanging)227 3871
-y(the)j(order)e(of)i(its)g(axes.)36 b(Otherwise,)27 b(it)h(will)f
-(attempt)i(to)e(p)r(erm)n(ute)h(the)g(target's)e(axes)h(as)g(necessary)
--7 b(.)227 4019 y(The)28 b(default)g(v)-5 b(alue)27 b(is)h(1,)f(so)g
-(that)h(axis)f(p)r(erm)n(utation)g(will)h(b)r(e)g(attempted.)0
-4214 y Fd(T)m(yp)s(e:)227 4313 y Fj(String.)0 4509 y
-Fd(Class)j(Applicabilit)m(y:)259 4691 y(F)-8 b(rame)427
-4790 y Fj(All)34 b(F)-7 b(rames)33 b(ha)n(v)n(e)g(this)h(attribute.)55
-b(Ho)n(w)n(ev)n(er,)34 b(the)g(F)-7 b(rame)33 b(class)g(e\013ectiv)n
-(ely)g(ignores)f(this)i(attribute)427 4890 y(and)k(b)r(eha)n(v)n(es)f
-(as)h(if)h(it)f(has)g(the)g(v)-5 b(alue)38 b(1.)69 b(This)38
-b(is)g(b)r(ecause)g(the)g(axes)f(of)h(a)g(basic)g(F)-7
-b(rame)37 b(are)h(not)427 4989 y(distinguishable)28 b(and)f(will)h(alw)
-n(a)n(ys)d(matc)n(h)j(an)n(y)f(other)g(F)-7 b(rame)27
-b(whatev)n(er)f(their)i(order.)259 5145 y Fd(SkyF)-8
-b(rame)427 5245 y Fj(Unlik)n(e)28 b(a)f(basic)g(F)-7
-b(rame,)27 b(the)h(SkyF)-7 b(rame)27 b(class)g(mak)n(es)f(use)i(of)f
-(this)h(attribute.)259 5400 y Fd(F)-8 b(rameSet)427 5500
-y Fj(The)31 b(P)n(erm)n(ute)f(attribute)h(of)g(a)f(F)-7
-b(rameSet)31 b(is)f(the)h(same)g(as)f(that)h(of)g(its)g(curren)n(t)f(F)
--7 b(rame)30 b(\(as)g(sp)r(eci\014ed)427 5600 y(b)n(y)e(the)g(Curren)n
-(t)e(attribute\).)p eop end
-%%Page: 449 459
-TeXDict begin 449 458 bop 3643 52 a FF(449)p 0 351 3780
-12 v 0 483 a Fz(P)l(olarLong)172 b Fe(The)38 b(longitude)f(v)-7
-b(alue)39 b(to)f(assign)g(to)g(either)f(p)s(ole)170 b
-Fz(P)l(olarLong)0 679 y Fd(Description:)44 b Fj(This)38
-b(attribute)f(holds)g(the)g(longitude)g(v)-5 b(alue,)40
-b(in)d(radians,)h(to)f(b)r(e)h(returned)f(when)g(a)g(Cartesian)227
-778 y(p)r(osition)27 b(corresp)r(onding)e(to)i(either)f(the)i(north)e
-(or)g(south)h(p)r(ole)g(is)g(transformed)e(in)n(to)i(spherical)f(co)r
-(ordinates.)227 878 y(The)i(default)g(v)-5 b(alue)27
-b(is)h(zero.)0 1035 y Fd(T)m(yp)s(e:)227 1134 y Fj(Double)g(precision.)
-0 1291 y Fd(Class)j(Applicabilit)m(y:)259 1434 y(SphMap)427
-1534 y Fj(All)d(SphMaps)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 1740 V 0 1871 a Fz(Preserv)l(eAxes)1518 1872 y Fe(Preserv)m(e)37
-b(axes?)2986 1871 y Fz(Preserv)l(eAxes)0 2049 y Fd(Description:)44
-b Fj(This)38 b(attribute)g(con)n(trols)e(ho)n(w)h(a)g(F)-7
-b(rame)37 b(b)r(eha)n(v)n(es)g(when)h(it)g(is)f(used)h(\(b)n(y)g
-(astFindF)-7 b(rame\))37 b(as)g(a)227 2149 y(template)30
-b(to)f(matc)n(h)g(another)f(\(target\))h(F)-7 b(rame.)42
-b(It)29 b(determines)h(whic)n(h)f(axes)f(app)r(ear)g(\(and)i(in)f(what)
-h(order\))227 2248 y(in)e(the)g Ft(")p Fj(result)p Ft(")f
-Fj(F)-7 b(rame)27 b(pro)r(duced.)227 2376 y(If)k(Preserv)n(eAxes)d(is)i
-(zero)f(in)i(the)f(template)h(F)-7 b(rame,)30 b(then)h(the)g(result)f
-(F)-7 b(rame)30 b(will)g(ha)n(v)n(e)f(the)i(same)f(n)n(um)n(b)r(er)227
-2476 y(\(and)25 b(order\))f(of)h(axes)f(as)g(the)i(template.)36
-b(If)25 b(it)h(is)f(non-zero,)f(ho)n(w)n(ev)n(er,)f(the)i(axes)f(of)h
-(the)h(target)e(F)-7 b(rame)24 b(will)h(b)r(e)227 2576
-y(preserv)n(ed,)h(so)h(that)h(the)g(result)f(F)-7 b(rame)27
-b(will)h(ha)n(v)n(e)f(the)h(same)f(n)n(um)n(b)r(er)g(\(and)h(order\))e
-(of)i(axes)e(as)h(the)h(target.)227 2704 y(The)e(default)f(v)-5
-b(alue)26 b(is)f(zero,)g(so)f(that)i(target)e(axes)h(are)f(not)i
-(preserv)n(ed)d(and)i(the)h(result)f(F)-7 b(rame)25 b(resem)n(bles)f
-(the)227 2803 y(template.)0 2960 y Fd(T)m(yp)s(e:)227
-3059 y Fj(In)n(teger)j(\(b)r(o)r(olean\).)0 3216 y Fd(Class)k
-(Applicabilit)m(y:)259 3359 y(F)-8 b(rame)427 3459 y
-Fj(All)28 b(F)-7 b(rames)27 b(ha)n(v)n(e)g(this)g(attribute.)259
-3595 y Fd(F)-8 b(rameSet)427 3695 y Fj(The)20 b(Preserv)n(eAxes)d
-(attribute)j(of)g(a)f(F)-7 b(rameSet)20 b(is)g(the)g(same)f(as)g(that)h
-(of)g(its)g(curren)n(t)f(F)-7 b(rame)19 b(\(as)g(sp)r(eci\014ed)427
-3795 y(b)n(y)28 b(the)g(Curren)n(t)e(attribute\).)p 0
-4001 V 0 4139 a Fz(Pro)7 b(jP\(m\))1022 4131 y Fe(FITS-W)m(CS)39
-b(pro)7 b(jection)36 b(parameters)3208 4139 y Fz(Pro)7
-b(jP\(m\))0 4342 y Fd(Description:)44 b Fj(This)33 b(attribute)g(pro)n
-(vides)f(aliases)f(for)h(the)i(PV)e(attributes,)j(whic)n(h)d(sp)r
-(eci\014es)h(the)g(pro)5 b(jection)32 b(pa-)227 4441
-y(rameter)23 b(v)-5 b(alues)23 b(to)h(b)r(e)g(used)g(b)n(y)g(a)f
-(WcsMap)h(when)g(implemen)n(ting)g(a)f(FITS-W)n(CS)h(sky)f(pro)5
-b(jection.)35 b(Pro)5 b(jP)22 b(is)227 4541 y(retained)j(for)f
-(compatibilit)n(y)g(with)i(previous)d(v)n(ersions)g(of)i(FITS-W)n(CS)g
-(and)g(AST.)g(New)g(applications)f(should)227 4641 y(use)k(the)g(PV)f
-(attibute)h(instead.)227 4769 y(A)n(ttributes)i(Pro)5
-b(jP\(0\))27 b(to)i(Pro)5 b(jP\(9\))28 b(corresp)r(ond)f(to)i
-(attributes)h(PV)p Fl(<)p Fj(axlat)p Fl(>)p Ft(_)p Fj(0)c(to)j(PV)p
-Fl(<)p Fj(axlat)p Fl(>)p Ft(_)p Fj(9,)e(where)227 4868
-y Fl(<)p Fj(axlat)p Fl(>)e Fj(is)h(replaced)g(b)n(y)g(the)h(index)f(of)
-g(the)h(latitude)g(axis)e(\(giv)n(en)h(b)n(y)g(attribute)h
-(WcsAxis\(2\)\).)37 b(See)26 b(PV)g(for)227 4968 y(further)i(details.)0
-5124 y Fd(T)m(yp)s(e:)227 5224 y Fj(Floating)f(p)r(oin)n(t.)0
-5380 y Fd(Class)k(Applicabilit)m(y:)259 5524 y(WcsMap)427
-5624 y Fj(All)d(WcsMaps)f(ha)n(v)n(e)g(this)h(attribute.)p
-eop end
-%%Page: 450 460
-TeXDict begin 450 459 bop 0 52 a FF(450)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a Fz(Pro)7 b(jection)604 b Fe(Sky)39
-b(pro)7 b(jection)36 b(description)600 b Fz(Pro)7 b(jection)0
-728 y Fd(Description:)44 b Fj(This)32 b(attribute)f(pro)n(vides)f(a)h
-(place)f(to)i(store)e(a)h(description)f(of)h(the)h(t)n(yp)r(e)g(of)f
-(sky)f(pro)5 b(jection)31 b(used)227 827 y(when)c(a)g(SkyF)-7
-b(rame)26 b(is)h(attac)n(hed)f(to)h(a)g(2-dimensional)f(ob)5
-b(ject,)26 b(suc)n(h)h(as)f(an)h(image)f(or)g(plotting)h(surface.)36
-b(F)-7 b(or)227 927 y(example,)28 b(t)n(ypical)f(v)-5
-b(alues)27 b(migh)n(t)g(b)r(e)h Ft(")p Fj(orthographic)p
-Ft(")p Fj(,)d Ft(")p Fj(Hammer-Aito\013)p Ft(")i Fj(or)f
-Ft(")p Fj(cylindrical)h(equal)g(area)p Ft(")p Fj(.)227
-1079 y(The)41 b(Pro)5 b(jection)40 b(v)-5 b(alue)40 b(is)h(purely)g
-(descriptiv)n(e)f(and)h(do)r(es)f(not)h(a\013ect)g(the)h(celestial)e
-(co)r(ordinate)g(system)227 1179 y(represen)n(ted)23
-b(b)n(y)g(the)h(SkyF)-7 b(rame)23 b(in)h(an)n(y)f(w)n(a)n(y)-7
-b(.)34 b(If)24 b(it)g(is)g(set)f(to)h(a)f(non-blank)g(string,)h(the)g
-(description)f(pro)n(vided)227 1279 y(ma)n(y)28 b(b)r(e)h(used)g(when)g
-(forming)f(the)h(default)g(v)-5 b(alue)28 b(for)g(the)i(SkyF)-7
-b(rame's)27 b(Title)i(attribute)g(\(so)f(that)h(t)n(ypically)227
-1378 y(it)f(will)g(app)r(ear)f(in)h(graphical)e(output,)i(for)f
-(instance\).)37 b(The)27 b(default)h(v)-5 b(alue)28 b(is)f(an)h(empt)n
-(y)f(string.)0 1584 y Fd(T)m(yp)s(e:)227 1683 y Fj(String.)0
-1889 y Fd(Class)k(Applicabilit)m(y:)259 2081 y(SkyF)-8
-b(rame)427 2181 y Fj(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i
-(attribute.)p 0 2436 V 0 2567 a Fz(RefCoun)l(t)514 b
-Fe(Coun)m(t)38 b(of)g(activ)m(e)f(Ob)7 b(ject)38 b(p)s(oin)m(ters)511
-b Fz(RefCoun)l(t)0 2812 y Fd(Description:)44 b Fj(This)20
-b(attribute)g(giv)n(es)e(the)i(n)n(um)n(b)r(er)g(of)f(activ)n(e)g(p)r
-(oin)n(ters)g(asso)r(ciated)f(with)i(an)g(Ob)5 b(ject.)34
-b(It)20 b(is)f(mo)r(di\014ed)227 2912 y(whenev)n(er)33
-b(p)r(oin)n(ters)g(are)f(created)h(or)g(ann)n(ulled)g(\(b)n(y)h
-(astClone,)g(astAnn)n(ul)f(or)g(astEnd)g(for)g(example\).)55
-b(The)227 3011 y(coun)n(t)28 b(includes)f(the)h(initial)g(p)r(oin)n
-(ter)f(issued)h(when)f(the)h(Ob)5 b(ject)28 b(w)n(as)e(created.)227
-3164 y(If)h(the)g(reference)f(coun)n(t)h(for)f(an)g(Ob)5
-b(ject)27 b(falls)f(to)h(zero)e(as)h(the)h(result)g(of)f(ann)n(ulling)h
-(a)f(p)r(oin)n(ter)g(to)h(it,)g(then)g(the)227 3263 y(Ob)5
-b(ject)28 b(will)g(b)r(e)g(deleted.)0 3469 y Fd(T)m(yp)s(e:)227
-3568 y Fj(In)n(teger,)f(read-only)-7 b(.)0 3774 y Fd(Class)31
-b(Applicabilit)m(y:)259 3966 y(Ob)5 b(ject)427 4066 y
-Fj(All)28 b(Ob)5 b(jects)28 b(ha)n(v)n(e)e(this)i(attribute.)p
-0 4321 V 0 4453 a Fz(RefDec)498 b Fe(The)39 b(declination)d(of)i(the)h
-(reference)f(p)s(oin)m(t)496 b Fz(RefDec)0 4697 y Fd(Description:)44
-b Fj(This)30 b(attribute)f(sp)r(eci\014es)g(the)h(FK5)f(J2000.0)e
-(declination)i(of)g(a)g(reference)g(p)r(oin)n(t)g(on)g(the)h(sky)-7
-b(.)42 b(See)227 4797 y(the)28 b(description)f(of)h(attribute)g(RefRA)g
-(for)f(details.)37 b(The)27 b(default)h(RefDec)h(is)e
-Ft(")p Fj(0:0:0)p Ft(")p Fj(.)0 5002 y Fd(T)m(yp)s(e:)227
-5102 y Fj(String.)0 5307 y Fd(Class)k(Applicabilit)m(y:)259
-5499 y(Sp)s(ecF)-8 b(rame)427 5599 y Fj(All)28 b(Sp)r(ecF)-7
-b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)p eop end
-%%Page: 451 461
-TeXDict begin 451 460 bop 3643 52 a FF(451)p 0 351 3780
-12 v 0 483 a Fz(RefRA)420 b Fe(The)39 b(righ)m(t)e(ascension)h(of)g
-(the)h(reference)f(p)s(oin)m(t)418 b Fz(RefRA)0 672 y
-Fd(Description:)44 b Fj(This)26 b(attribute,)g(together)e(with)i(the)f
-(RefDec)h(attribute,)g(sp)r(eci\014es)f(the)h(FK5)e(J2000.0)f(co)r
-(ordinates)227 772 y(of)k(a)g(reference)f(p)r(oin)n(t)h(on)g(the)g(sky)
--7 b(.)36 b(F)-7 b(or)27 b(1-dimensional)f(sp)r(ectra,)g(this)h(should)
-g(normally)f(b)r(e)h(the)h(p)r(osition)f(of)227 872 y(the)33
-b(source.)50 b(F)-7 b(or)32 b(sp)r(ectral)g(data)g(with)h(spatial)f(co)
-n(v)n(erage)d(\(sp)r(ectral)j(cub)r(es,)i(etc\),)g(this)f(should)f(b)r
-(e)h(close)f(to)227 971 y(cen)n(tre)g(of)g(the)h(spatial)e(co)n(v)n
-(erage.)48 b(It)33 b(is)f(used)g(to)g(de\014ne)h(the)g(correction)d
-(for)i(Doppler)g(shift)h(to)f(b)r(e)h(applied)227 1071
-y(when)24 b(using)f(the)g(astFindF)-7 b(rame)23 b(or)f(astCon)n(v)n
-(ert)g(metho)r(d)h(to)h(con)n(v)n(ert)d(b)r(et)n(w)n(een)i(di\013eren)n
-(t)h(standards)e(of)h(rest.)227 1196 y(The)29 b(Sp)r(ecF)-7
-b(rame)28 b(class)f(assumes)g(this)i(v)n(elo)r(cit)n(y)e(correction)f
-(is)j(spatially)e(in)n(v)-5 b(arian)n(t.)38 b(If)28 b(a)g(single)g(Sp)r
-(ecF)-7 b(rame)227 1295 y(is)39 b(used)f(\(for)h(instance,)i(as)d(a)g
-(comp)r(onen)n(t)g(of)h(a)f(CmpF)-7 b(rame\))39 b(to)f(describ)r(e)h
-(sp)r(ectral)f(v)-5 b(alues)38 b(at)g(di\013eren)n(t)227
-1395 y(p)r(oin)n(ts)30 b(on)g(the)g(sky)-7 b(,)30 b(then)g(it)h(is)e
-(assumes)g(that)h(the)h(doppler)e(shift)h(at)g(an)n(y)f(spatial)g(p)r
-(osition)h(is)g(the)g(same)f(as)227 1495 y(at)35 b(the)g(reference)f(p)
-r(osition.)59 b(The)35 b(maxim)n(um)g(v)n(elo)r(cit)n(y)f(error)f(in)n
-(tro)r(duced)h(b)n(y)h(this)g(assumption)g(is)f(of)h(the)227
-1594 y(order)d(of)i(V)p Fi(\003)p Fj(SIN\(F)n(O)n(V\),)f(where)g(F)n(O)
-n(V)g(is)g(the)h(angular)e(\014eld)i(of)f(view,)i(and)e(V)h(is)f(the)h
-(relativ)n(e)e(v)n(elo)r(cit)n(y)h(of)227 1694 y(the)c(t)n(w)n(o)e
-(standards)f(of)i(rest.)38 b(As)28 b(an)g(example,)f(when)h(correcting)
-f(from)g(the)h(observ)n(ers)e(rest)h(frame)h(\(i.e.)38
-b(the)227 1793 y(top)r(o)r(cen)n(tric)23 b(rest)g(frame\))h(to)f(the)h
-(kinematic)g(lo)r(cal)e(standard)h(of)h(rest)f(the)g(maxim)n(um)h(v)-5
-b(alue)23 b(of)h(V)g(is)f(ab)r(out)h(20)227 1893 y(km/s,)e(so)f(for)g
-(5)g(arc-min)n(ute)f(\014eld)i(of)f(view)g(the)h(maxim)n(um)f(v)n(elo)r
-(cit)n(y)g(error)e(in)n(tro)r(duced)i(b)n(y)g(the)h(correction)d(will)
-227 1993 y(b)r(e)28 b(ab)r(out)f(0.03)e(km/s.)36 b(As)27
-b(another)f(example,)h(the)h(maxim)n(um)e(error)g(when)h(correcting)e
-(from)i(the)g(observ)n(ers)227 2092 y(rest)g(frame)h(to)f(the)h(lo)r
-(cal)f(group)f(is)i(ab)r(out)g(5)f(km/s)g(o)n(v)n(er)e(a)j(1)f(degree)f
-(\014eld)i(of)g(view.)227 2217 y(The)g(RefRA)h(and)e(RefDec)i
-(attributes)e(are)g(stored)g(in)n(ternally)g(in)h(radians,)e(but)j(are)
-d(con)n(v)n(erted)h(to)g(and)h(from)227 2317 y(a)34 b(string)g(for)f
-(access.)56 b(The)34 b(format)f Ft(")p Fj(hh:mm:ss.ss)p
-Ft(")h Fj(is)g(used)g(for)f(RefRA,)i(and)f Ft(")p Fj(dd:mm:ss.s)p
-Ft(")g Fj(is)g(used)g(for)227 2416 y(RefDec.)46 b(The)30
-b(metho)r(ds)h(astSetRefP)n(os)e(and)h(astGetRefP)n(os)g(ma)n(y)f(b)r
-(e)i(used)f(to)g(access)g(the)g(v)-5 b(alues)30 b(of)h(these)227
-2516 y(attributes)d(directly)f(as)g(unformatted)h(v)-5
-b(alues)27 b(in)h(radians.)227 2641 y(The)g(default)g(for)f(RefRA)h(is)
-g Ft(")p Fj(0:0:0)p Ft(")p Fj(.)0 2791 y Fd(T)m(yp)s(e:)227
-2891 y Fj(String.)0 3041 y Fd(Class)j(Applicabilit)m(y:)259
-3178 y(Sp)s(ecF)-8 b(rame)427 3277 y Fj(All)28 b(Sp)r(ecF)-7
-b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)p 0 3477
-V 0 3609 a Fz(RegionClass)282 b Fe(The)39 b(AST)f(class)h(name)f(of)g
-(the)h(Region)1197 3723 y(encapsulated)e(within)h(an)g(Stc)3065
-3609 y Fz(RegionClass)0 3913 y Fd(Description:)44 b Fj(This)23
-b(is)f(a)g(read-only)e(attribute)j(giving)e(the)i(AST)f(class)g(name)g
-(of)g(the)h(Region)e(encapsulated)h(within)227 4012 y(an)28
-b(Stc)g(\(that)g(is,)f(the)h(class)f(of)g(the)h(Region)f(whic)n(h)h(w)n
-(as)e(supplied)i(when)g(the)g(Stc)g(w)n(as)f(created\).)0
-4162 y Fd(T)m(yp)s(e:)227 4262 y Fj(String,)h(read-only)-7
-b(.)0 4412 y Fd(Class)31 b(Applicabilit)m(y:)259 4549
-y(Stc)427 4649 y Fj(All)d(Stc)g(ob)5 b(jects)27 b(this)h(attribute.)p
-0 4849 V 0 4979 a Fz(Rep)t(ort)1046 4980 y Fe(Rep)s(ort)38
-b(transformed)e(co)s(ordinates?)3365 4979 y Fz(Rep)t(ort)0
-5170 y Fd(Description:)44 b Fj(This)36 b(attribute)g(con)n(trols)e
-(whether)i(co)r(ordinate)e(v)-5 b(alues)36 b(are)e(rep)r(orted)h
-(whenev)n(er)g(a)g(Mapping)h(is)227 5269 y(used)c(to)f(transform)g(a)g
-(set)g(of)h(p)r(oin)n(ts.)49 b(If)32 b(its)f(v)-5 b(alue)32
-b(is)f(zero)g(\(the)h(default\),)h(no)f(rep)r(ort)e(is)i(made.)49
-b(Ho)n(w)n(ev)n(er,)227 5369 y(if)28 b(it)f(is)f(non-zero,)g(the)h(co)r
-(ordinates)e(of)i(eac)n(h)f(p)r(oin)n(t)h(are)f(rep)r(orted)g(\(b)r
-(oth)h(b)r(efore)g(and)g(after)f(transformation\))227
-5469 y(b)n(y)i(writing)f(them)h(to)f(standard)g(output.)227
-5593 y(This)j(attribute)f(is)g(pro)n(vided)g(as)f(an)h(aid)g(to)g
-(debugging,)g(and)h(to)f(a)n(v)n(oid)f(ha)n(ving)g(to)h(rep)r(ort)f(v)
--5 b(alues)29 b(explicitly)227 5693 y(in)f(simple)g(programs.)p
-eop end
-%%Page: 452 462
-TeXDict begin 452 461 bop 0 52 a FF(452)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fd(T)m(yp)s(e:)227 451 y Fj(In)n(teger)c(\(b)r(o)r(olean\).)0
-601 y Fd(Class)k(Applicabilit)m(y:)259 737 y(Mapping)427
-837 y Fj(All)d(Mappings)f(ha)n(v)n(e)g(this)h(attribute.)259
-970 y Fd(CmpMap)427 1070 y Fj(When)20 b(applied)e(to)h(a)f(comp)r(ound)
-h(Mapping)f(\(CmpMap\),)k(only)c(the)h(Rep)r(ort)g(attribute)g(of)f
-(the)h(CmpMap,)427 1169 y(and)27 b(not)f(those)h(of)f(its)h(comp)r
-(onen)n(t)f(Mappings,)h(is)f(used.)37 b(Co)r(ordinate)25
-b(information)h(is)h(nev)n(er)e(rep)r(orted)427 1269
-y(for)i(the)h(comp)r(onen)n(t)g(Mappings)f(individually)-7
-b(,)27 b(only)h(for)f(the)h(complete)f(CmpMap.)259 1402
-y Fd(F)-8 b(rame)427 1502 y Fj(When)35 b(applied)f(to)g(an)n(y)g(F)-7
-b(rame,)35 b(the)g(formatting)e(capabilities)h(of)g(the)h(F)-7
-b(rame)33 b(\(as)h(pro)n(vided)f(b)n(y)h(the)427 1601
-y(astF)-7 b(ormat)27 b(function\))h(will)g(b)r(e)g(used)g(to)f(format)g
-(the)h(rep)r(orted)f(co)r(ordinates.)259 1734 y Fd(F)-8
-b(rameSet)427 1834 y Fj(When)20 b(applied)g(to)f(an)n(y)g(F)-7
-b(rameSet,)21 b(the)f(formatting)f(capabilities)g(of)g(the)h(base)f
-(and)g(curren)n(t)g(F)-7 b(rames)18 b(will)427 1933 y(b)r(e)29
-b(used)g(\(as)f(ab)r(o)n(v)n(e\))f(to)i(individually)f(format)g(the)h
-(input)h(and)e(output)h(co)r(ordinates,)e(as)h(appropriate.)427
-2033 y(The)i(Rep)r(ort)g(attribute)g(of)g(a)g(F)-7 b(rameSet)29
-b(is)h(not)g(itself)g(a\013ected)g(b)n(y)g(selecting)g(a)f(new)h(base)f
-(or)g(curren)n(t)427 2133 y(F)-7 b(rame,)27 b(but)i(the)f(resulting)f
-(formatting)g(capabilities)g(ma)n(y)g(b)r(e.)0 2295 y
-Fd(Notes:)340 2578 y Fi(\017)45 b Fj(Unlik)n(e)37 b(most)f(other)g
-(attributes,)i(the)f(v)-5 b(alue)37 b(of)f(the)h(Rep)r(ort)f(attribute)
-h(is)f(not)g(transferred)f(when)i(a)427 2677 y(Mapping)f(is)f(copied.)
-61 b(Instead,)38 b(its)e(v)-5 b(alue)35 b(is)h(unde\014ned)g(\(and)g
-(therefore)f(defaults)h(to)f(zero\))g(in)h(an)n(y)427
-2777 y(cop)n(y)-7 b(.)38 b(Similarly)-7 b(,)28 b(it)h(b)r(ecomes)f
-(unde\014ned)g(in)h(an)n(y)e(external)h(represen)n(tation)e(of)i(a)g
-(Mapping)g(pro)r(duced)427 2877 y(b)n(y)g(the)g(astW)-7
-b(rite)27 b(function.)p 0 3076 3780 12 v 0 3208 a Fz(Rep)t(ortLev)l(el)
-1144 3215 y Fe(Determines)38 b(whic)m(h)g(read/write)1296
-3336 y(conditions)f(are)h(rep)s(orted)3057 3208 y Fz(Rep)t(ortLev)l(el)
-0 3525 y Fd(Description:)44 b Fj(This)36 b(attribute)f(determines)g
-(whic)n(h,)i(if)f(an)n(y)-7 b(,)37 b(of)e(the)h(conditions)f(that)g(o)r
-(ccur)g(whilst)g(reading)f(or)227 3625 y(writing)j(an)g(Ob)5
-b(ject)37 b(should)g(b)r(e)h(rep)r(orted.)65 b(These)36
-b(conditions)h(will)h(generate)e(either)h(a)f(fatal)h(error)f(or)g(a)
-227 3724 y(w)n(arning,)27 b(as)f(determined)i(b)n(y)g(attribute)f
-(Strict.)37 b(Rep)r(ortLev)n(el)27 b(can)g(tak)n(e)g(an)n(y)g(of)h(the)
-g(follo)n(wing)e(v)-5 b(alues:)227 3849 y(0)27 b(-)h(Do)f(not)h(rep)r
-(ort)f(an)n(y)g(conditions.)227 3974 y(1)i(-)g(Rep)r(ort)g(only)g
-(conditions)f(where)h(signi\014can)n(t)f(information)h(con)n(ten)n(t)g
-(has)f(b)r(een)i(c)n(hanged.)40 b(F)-7 b(or)29 b(instance,)227
-4073 y(an)g(unsupp)r(orted)h(time-scale)e(has)h(b)r(een)h(replaced)e(b)
-n(y)h(a)g(supp)r(orted)h(near-equiv)-5 b(alen)n(t)27
-b(time-scale.)42 b(Another)227 4173 y(example)32 b(is)g(if)h(a)f(basic)
-g(Channel)g(unexp)r(ected)h(encoun)n(ters)e(data)g(items)i(that)g(ma)n
-(y)e(ha)n(v)n(e)g(b)r(een)i(in)n(tro)r(duced)227 4272
-y(b)n(y)28 b(later)f(v)n(ersions)e(of)j(AST.)227 4397
-y(2)21 b(-)g(Rep)r(ort)h(the)g(ab)r(o)n(v)n(e,)f(and)g(in)h(addition)f
-(rep)r(ort)g(signi\014can)n(t)g(default)g(v)-5 b(alues.)35
-b(F)-7 b(or)21 b(instance,)h(if)g(no)f(time-scale)227
-4497 y(w)n(as)28 b(sp)r(eci\014ed)i(when)f(reading)f(an)h(Ob)5
-b(ject)29 b(from)g(an)g(external)f(data)h(source,)g(rep)r(ort)f(the)i
-(default)f(time-scale)227 4596 y(that)f(is)g(b)r(eing)f(used.)227
-4721 y(3)e(-)g(Rep)r(ort)h(the)f(ab)r(o)n(v)n(e,)g(and)g(in)h(addition)
-f(rep)r(ort)g(an)n(y)f(other)h(p)r(oten)n(tially)g(in)n(teresting)g
-(conditions)g(that)h(ha)n(v)n(e)227 4821 y(no)36 b(signi\014can)n(t)e
-(e\013ect)i(on)g(the)g(con)n(v)n(ersion.)58 b(F)-7 b(or)35
-b(instance,)j(rep)r(ort)c(if)j(a)e(time-scale)g(of)g
-Ft(")p Fj(TT)p Ft(")g Fj(\(terrestrial)227 4920 y(time\))28
-b(is)e(used)h(in)f(place)g(of)h Ft(")p Fj(ET)p Ft(")e
-Fj(\(ephemeris)i(time\).)37 b(This)26 b(c)n(hange)g(has)g(no)g
-(sign\014cian)n(t)g(e\013ect)h(b)r(ecause)f(ET)227 5020
-y(is)e(the)h(predecessor)d(of,)i(and)g(is)g(con)n(tin)n(uous)f(with,)i
-(TT.)f(Synon)n(yms)g(suc)n(h)f(as)h Ft(")p Fj(IA)-7 b(T)p
-Ft(")23 b Fj(and)h Ft(")p Fj(T)-7 b(AI)p Ft(")24 b Fj(are)f(another)227
-5120 y(example.)227 5244 y(The)34 b(default)h(v)-5 b(alue)34
-b(is)g(1.)56 b(Note,)35 b(there)f(are)f(man)n(y)h(other)f(conditions)h
-(that)g(can)g(o)r(ccur)f(whilst)i(reading)d(or)227 5344
-y(writing)23 b(an)f(Ob)5 b(ject)23 b(that)g(completely)g(prev)n(en)n(t)
-f(the)h(con)n(v)n(ersion)d(taking)i(place.)35 b(Suc)n(h)23
-b(conditions)f(will)i(alw)n(a)n(ys)227 5444 y(generate)j(errors,)e
-(irresp)r(ectiv)n(e)h(of)i(the)g(Rep)r(ortLev)n(el)f(and)g(Strict)h
-(attributes.)0 5593 y Fd(T)m(yp)s(e:)227 5693 y Fj(In)n(teger)f(\(b)r
-(o)r(olean\).)p eop end
-%%Page: 453 463
-TeXDict begin 453 462 bop 3643 52 a FF(453)0 351 y Fd(Class)31
-b(Applicabilit)m(y:)259 491 y(Channel)427 591 y Fj(All)d(Channels)g(ha)
-n(v)n(e)e(this)i(attribute.)259 725 y Fd(FitsChan)427
-825 y Fj(All)g(the)g(conditions)f(selected)h(b)n(y)f(the)h(FitsChan)g
-(W)-7 b(arnings)27 b(attribute)g(are)g(rep)r(orted)g(at)g(lev)n(el)g
-(1.)p 0 1027 3780 12 v 0 1158 a Fz(RestF)-11 b(req)1410
-1159 y Fe(The)38 b(rest)h(frequency)3252 1158 y Fz(RestF)-11
-b(req)0 1351 y Fd(Description:)44 b Fj(This)39 b(attribute)f(sp)r
-(eci\014es)h(the)f(frequency)g(corresp)r(onding)f(to)h(zero)f(v)n(elo)r
-(cit)n(y)-7 b(.)69 b(It)39 b(is)f(used)g(when)227 1451
-y(con)n(v)n(erting)29 b(b)r(et)n(w)n(een)g(b)r(et)n(w)n(een)h(v)n(elo)r
-(cit)n(y-based)f(co)r(ordinate)g(systems)g(and)h(and)g(other)f(co)r
-(ordinate)g(systems)227 1550 y(\(suc)n(h)f(as)f(frequency)-7
-b(,)27 b(w)n(a)n(v)n(elength,)f(energy)-7 b(,)27 b(etc\).)37
-b(The)28 b(default)g(v)-5 b(alue)27 b(is)h(1.0E5)d(GHz.)227
-1677 y(When)35 b(setting)g(a)f(new)g(v)-5 b(alue)35 b(for)e(this)i
-(attribute,)i(the)d(new)h(v)-5 b(alue)34 b(can)g(b)r(e)h(supplied)g
-(either)f(directly)g(as)g(a)227 1776 y(frequency)-7 b(,)34
-b(or)d(indirectly)i(as)f(a)g(w)n(a)n(v)n(elength)e(or)i(energy)-7
-b(,)33 b(in)g(whic)n(h)f(case)g(the)g(supplied)h(v)-5
-b(alue)33 b(is)f(con)n(v)n(erted)227 1876 y(to)i(a)f(frequency)g(b)r
-(efore)g(b)r(eing)h(stored.)54 b(The)34 b(nature)f(of)h(the)g(supplied)
-g(v)-5 b(alue)33 b(is)h(indicated)f(b)n(y)h(app)r(ending)227
-1975 y(text)e(to)f(the)h(end)f(of)g(the)h(n)n(umerical)e(v)-5
-b(alue)31 b(indicating)h(the)f(units)h(in)f(whic)n(h)h(the)f(v)-5
-b(alue)31 b(is)g(supplied.)49 b(If)31 b(the)227 2075
-y(units)h(are)e(not)h(sp)r(eci\014ed,)h(then)g(the)f(supplied)h(v)-5
-b(alue)31 b(is)f(assumed)h(to)g(b)r(e)g(a)g(frequency)g(in)g(units)g
-(of)g(GHz.)48 b(If)227 2175 y(the)35 b(supplied)f(unit)h(is)f(a)f(unit)
-i(of)f(frequency)-7 b(,)35 b(the)g(supplied)f(v)-5 b(alue)34
-b(is)g(assumed)f(to)h(b)r(e)h(a)e(frequency)h(in)g(the)227
-2274 y(giv)n(en)24 b(units.)36 b(If)24 b(the)h(supplied)f(unit)h(is)f
-(a)g(unit)h(of)f(length,)h(the)f(supplied)h(v)-5 b(alue)24
-b(is)g(assumed)g(to)g(b)r(e)g(a)g(\(v)-5 b(acuum\))227
-2374 y(w)n(a)n(v)n(elength.)35 b(If)26 b(the)h(supplied)f(unit)h(is)f
-(a)f(unit)i(of)f(energy)-7 b(,)25 b(the)h(supplied)h(v)-5
-b(alue)25 b(is)h(assumed)g(to)g(b)r(e)g(an)g(energy)-7
-b(.)227 2474 y(F)g(or)31 b(instance,)h(the)f(follo)n(wing)g(strings)f
-(all)h(result)g(in)g(a)g(rest)g(frequency)g(of)g(around)f(1.4E14)f(Hz)i
-(b)r(eing)h(used:)227 2573 y Ft(")p Fj(1.4E5)p Ft(")p
-Fj(,)23 b Ft(")p Fj(1.4E14)f(Hz)p Ft(")p Fj(,)j Ft(")p
-Fj(1.4E14)d(s)p Fi(\003\003)p Fj(-1)p Ft(")p Fj(,)h Ft(")p
-Fj(1.4E5)g(GHz)p Ft(")p Fj(,)i Ft(")p Fj(2.14E-6)d(m)p
-Ft(")p Fj(,)j Ft(")p Fj(21400)d(Angstrom)p Ft(")p Fj(,)i
-Ft(")p Fj(9.28E-20)227 2673 y(J)p Ft(")p Fj(,)j Ft(")p
-Fj(9.28E-13)d(erg)p Ft(")p Fj(,)j Ft(")p Fj(0.58)e(eV)p
-Ft(")p Fj(,)j(etc.)227 2799 y(When)e(getting)g(the)g(v)-5
-b(alue)25 b(of)g(this)h(attribute,)g(the)g(returned)f(v)-5
-b(alue)26 b(is)f(alw)n(a)n(ys)f(a)h(frequency)g(in)h(units)g(of)f(GHz.)
-0 2952 y Fd(T)m(yp)s(e:)227 3051 y Fj(Floating)i(p)r(oin)n(t.)0
-3204 y Fd(Class)k(Applicabilit)m(y:)259 3344 y(Sp)s(ecF)-8
-b(rame)427 3443 y Fj(All)28 b(Sp)r(ecF)-7 b(rames)27
-b(ha)n(v)n(e)g(this)h(attribute.)p 0 3646 V 0 3777 a
-Fz(Ro)t(otCorner)976 3778 y Fe(Sp)s(eci\014es)39 b(whic)m(h)f(edges)h
-(of)f(the)h(3D)g(b)s(o)m(x)1368 3892 y(should)f(b)s(e)h(annotated)3078
-3777 y Fz(Ro)t(otCorner)0 4066 y Fd(Description:)44 b
-Fj(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h
-(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-4165 y(astGrid)37 b(function\))h(b)n(y)e(determining)h(whic)n(h)g
-(edges)f(of)h(the)h(cub)r(e)f(enclosing)f(the)i(3D)f(graphics)e(space)i
-(are)227 4265 y(used)h(for)f(displa)n(ying)f(n)n(umerical)g(and)i
-(descriptiv)n(e)e(axis)h(lab)r(els.)66 b(The)37 b(attribute)h(v)-5
-b(alue)37 b(iden)n(ti\014es)h(one)f(of)227 4365 y(the)d(eigh)n(t)g
-(corners)e(of)h(the)h(cub)r(e)g(within)h(whic)n(h)e(graphics)f(are)h(b)
-r(eing)h(dra)n(wn)e(\(i.e.)56 b(the)34 b(cub)r(e)g(sp)r(eci\014ed)g(b)n
-(y)227 4464 y(the)28 b Ft(")p Fj(graph)n(b)r(o)n(x)p
-Ft(")d Fj(parameter)i(when)h(astPlot3D)f(w)n(as)f(called)i(tp)g(create)
-f(the)h(Plot3D\).)g(Axis)g(lab)r(els)f(and)h(tic)n(k)227
-4564 y(marks)f(will)h(b)r(e)g(placed)f(on)g(the)h(three)g(cub)r(e)g
-(edges)e(that)i(meet)g(at)g(the)g(giv)n(en)e(corner.)227
-4690 y(The)32 b(attribute)h(v)-5 b(alue)32 b(should)g(consist)f(of)h
-(three)g(c)n(haracter,)f(eac)n(h)h(of)g(whic)n(h)g(m)n(ust)g(b)r(e)h
-(either)f Ft(")p Fj(U)p Ft(")f Fj(or)g Ft(")p Fj(L)p
-Ft(")p Fj(.)227 4790 y(The)h(\014rst)g(c)n(haracter)e(in)j(the)f
-(string)f(sp)r(eci\014es)h(the)h(p)r(osition)f(of)g(the)g(corner)f(on)h
-(the)g(\014rst)g(graphics)f(axis.)49 b(If)227 4889 y(the)29
-b(c)n(haracter)c(is)j Ft(")p Fj(U)p Ft(")g Fj(then)g(the)h(corner)d(is)
-i(at)g(the)g(upp)r(er)g(b)r(ound)g(on)g(the)g(\014rst)g(graphics)f
-(axis.)37 b(If)28 b(it)h(is)e Ft(")p Fj(L)p Ft(")p Fj(,)227
-4989 y(then)j(the)f(corner)f(is)h(at)g(the)h(lo)n(w)n(er)d(b)r(ound)j
-(on)f(the)g(\014rst)g(axis.)41 b(Lik)n(ewise,)29 b(the)g(second)g(and)g
-(third)g(c)n(haracters)227 5089 y(in)f(the)g(string)f(sp)r(ecify)h(the)
-g(lo)r(cation)f(of)g(the)h(corner)f(on)g(the)h(second)f(and)g(third)h
-(graphics)e(axes.)227 5215 y(F)-7 b(or)25 b(instance,)h(corner)d
-Ft(")p Fj(LLL)p Ft(")i Fj(is)g(the)h(corner)e(that)h(is)g(at)h(the)f
-(lo)n(w)n(er)f(b)r(ound)i(on)f(all)g(three)g(graphics)f(axes,)h(and)227
-5314 y(corner)h Ft(")p Fj(ULU)p Ft(")i Fj(is)f(at)h(the)g(upp)r(er)f(b)
-r(ound)h(on)g(axes)e(1)i(and)f(3)g(but)h(at)g(the)g(lo)n(w)n(er)e(b)r
-(ound)i(on)f(axis)g(2.)227 5441 y(The)h(default)g(v)-5
-b(alue)27 b(is)h Ft(")p Fj(LLL)p Ft(")p Fj(.)0 5593 y
-Fd(T)m(yp)s(e:)227 5693 y Fj(String.)p eop end
-%%Page: 454 464
-TeXDict begin 454 463 bop 0 52 a FF(454)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fd(Class)g(Applicabilit)m(y:)259 483 y(Plot3D)427 583
-y Fj(All)d(Plot3Ds)f(ha)n(v)n(e)f(this)i(attribute.)p
-0 774 3780 12 v 0 905 a Fz(Seed)651 b Fe(Random)38 b(n)m(um)m(b)s(er)g
-(seed)h(for)f(a)g(MathMap)650 b Fz(Seed)0 1085 y Fd(Description:)44
-b Fj(This)37 b(attribute,)j(whic)n(h)d(ma)n(y)f(tak)n(e)h(an)n(y)f(in)n
-(teger)g(v)-5 b(alue,)40 b(determines)d(the)g(sequence)g(of)g(random)
-227 1185 y(n)n(um)n(b)r(ers)i(pro)r(duced)g(b)n(y)h(the)f(random)g(n)n
-(um)n(b)r(er)g(functions)h(in)g(MathMap)f(expressions.)71
-b(It)40 b(is)f(set)h(to)f(an)227 1285 y(unpredictable)28
-b(default)g(v)-5 b(alue)27 b(when)h(a)f(MathMap)g(is)g(created,)g(so)g
-(that)h(b)n(y)f(default)h(eac)n(h)f(MathMap)g(uses)g(a)227
-1384 y(di\013eren)n(t)h(set)g(of)f(random)g(n)n(um)n(b)r(ers.)227
-1507 y(If)42 b(required,)i(y)n(ou)d(ma)n(y)f(set)i(this)f(Seed)h
-(attribute)f(to)h(a)f(v)-5 b(alue)41 b(of)g(y)n(our)f(c)n(ho)r(osing)g
-(in)i(order)e(to)h(pro)r(duce)227 1606 y(rep)r(eatable)33
-b(b)r(eha)n(viour)g(from)g(the)h(random)f(n)n(um)n(b)r(er)h(functions.)
-56 b(Y)-7 b(ou)34 b(ma)n(y)f(also)f(enquire)i(the)g(Seed)g(v)-5
-b(alue)227 1706 y(\(e.g.)43 b(if)30 b(an)g(initially)g(unpredictable)f
-(v)-5 b(alue)30 b(has)f(b)r(een)h(used\))g(and)f(then)h(use)g(it)g(to)f
-(repro)r(duce)g(the)h(resulting)227 1806 y(sequence)d(of)h(random)f(n)n
-(um)n(b)r(ers,)g(either)g(from)g(the)h(same)f(MathMap)h(or)f(from)g
-(another)f(one.)227 1928 y(Clearing)h(the)h(Seed)f(attribute)h(giv)n
-(es)e(it)i(a)g(new)f(unpredictable)h(default)g(v)-5 b(alue.)0
-2073 y Fd(T)m(yp)s(e:)227 2173 y Fj(In)n(teger.)0 2318
-y Fd(Class)31 b(Applicabilit)m(y:)259 2450 y(MathMap)427
-2549 y Fj(All)d(MathMaps)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 2740 V 0 2872 a Fz(SideBand)267 b Fe(Indicates)38 b(whic)m(h)g
-(sideband)g(a)g(dual)h(sideband)1378 2971 y(sp)s(ectrum)f(represen)m
-(ts)3221 2872 y Fz(SideBand)0 3152 y Fd(Description:)44
-b Fj(This)d(attribute)g(indicates)g(whether)g(the)g(DSBSp)r(ecF)-7
-b(rame)42 b(curren)n(tly)d(represen)n(ts)h(its)h(lo)n(w)n(er)e(or)227
-3251 y(upp)r(er)27 b(sideband,)g(or)f(an)h(o\013set)g(from)f(the)h(lo)r
-(cal)g(oscillator)e(frequency)-7 b(.)36 b(When)28 b(querying)d(the)j
-(curren)n(t)e(v)-5 b(alue,)227 3351 y(the)25 b(returned)f(string)g(is)h
-(alw)n(a)n(ys)e(one)h(of)g Ft(")p Fj(usb)p Ft(")g Fj(\(for)g(upp)r(er)h
-(sideband\),)h Ft(")p Fj(lsb)p Ft(")d Fj(\(for)i(lo)n(w)n(er)e
-(sideband\),)i(or)f Ft(")p Fj(lo)p Ft(")227 3450 y Fj(\(for)i(o\013set)
-g(from)f(the)i(lo)r(cal)e(oscillator)f(frequency\).)36
-b(When)27 b(setting)f(a)f(new)h(v)-5 b(alue,)26 b(an)n(y)f(of)h(the)g
-(strings)f Ft(")p Fj(lsb)p Ft(")p Fj(,)227 3550 y Ft(")p
-Fj(usb)p Ft(")p Fj(,)j Ft(")p Fj(observ)n(ed)p Ft(")p
-Fj(,)f Ft(")p Fj(image)p Ft(")g Fj(or)h Ft(")p Fj(lo)p
-Ft(")f Fj(ma)n(y)h(b)r(e)h(supplied)g(\(case)f(insensitiv)n(e\).)40
-b(The)29 b Ft(")p Fj(observ)n(ed)p Ft(")d Fj(sideband)227
-3650 y(is)32 b(whic)n(h)g(ev)n(er)f(sideband)h(\(upp)r(er)g(or)f(lo)n
-(w)n(er\))g(con)n(tains)g(the)h(cen)n(tral)f(sp)r(ectral)h(p)r(osition)
-g(giv)n(en)f(b)n(y)g(attribute)227 3749 y(DSBCen)n(tre,)37
-b(and)d(the)h Ft(")p Fj(image)p Ft(")f Fj(sideband)g(is)h(the)g(other)f
-(sideband.)58 b(It)35 b(is)g(the)g(sign)g(of)f(the)h(IF)g(attribute)227
-3849 y(whic)n(h)c(determines)g(if)h(the)g(observ)n(ed)d(sideband)i(is)h
-(the)f(upp)r(er)h(or)e(lo)n(w)n(er)g(sideband.)47 b(The)31
-b(default)h(v)-5 b(alue)31 b(for)227 3949 y(SideBand)d(is)f(the)h
-(observ)n(ed)e(sideband.)0 4094 y Fd(T)m(yp)s(e:)227
-4193 y Fj(String.)0 4338 y Fd(Class)31 b(Applicabilit)m(y:)259
-4470 y(DSBSp)s(ecF)-8 b(rame)427 4570 y Fj(All)28 b(DSBSp)r(ecF)-7
-b(rames)28 b(ha)n(v)n(e)e(this)i(attribute.)p 0 4761
-V 0 4892 a Fz(SimpFI)386 b Fe(F)-10 b(orw)m(ard-in)m(v)m(erse)36
-b(MathMap)i(pairs)g(simplify?)384 b Fz(SimpFI)0 5073
-y Fd(Description:)44 b Fj(This)29 b(attribute)g(should)f(b)r(e)h(set)f
-(to)h(a)f(non-zero)f(v)-5 b(alue)28 b(if)h(applying)f(a)h(MathMap's)f
-(forw)n(ard)f(trans-)227 5172 y(formation,)36 b(follo)n(w)n(ed)e
-(immediately)h(b)n(y)g(the)g(matc)n(hing)g(in)n(v)n(erse)e
-(transformation)h(will)h(alw)n(a)n(ys)e(restore)g(the)227
-5272 y(original)f(set)h(of)g(co)r(ordinates.)52 b(It)34
-b(indicates)e(that)i(AST)f(ma)n(y)g(replace)f(suc)n(h)h(a)f(sequence)h
-(of)g(op)r(erations)f(b)n(y)227 5371 y(an)25 b(iden)n(tit)n(y)h
-(Mapping)f(\(a)g(UnitMap\))h(if)g(it)f(is)g(encoun)n(tered)g(while)g
-(simplifying)h(a)f(comp)r(ound)g(Mapping)g(\(e.g.)227
-5471 y(using)j(astSimplify\).)227 5593 y(By)j(default,)i(the)f(SimpFI)g
-(attribute)g(is)f(zero,)h(so)e(that)i(AST)g(will)f(not)h(p)r(erform)f
-(this)h(simpli\014cation)f(unless)227 5693 y(y)n(ou)c(ha)n(v)n(e)g(set)
-g(SimpFI)h(to)g(indicate)g(that)f(it)h(is)g(safe)f(to)h(do)f(so.)p
-eop end
-%%Page: 455 465
-TeXDict begin 455 464 bop 3643 52 a FF(455)0 351 y Fd(T)m(yp)s(e:)227
-451 y Fj(In)n(teger)27 b(\(b)r(o)r(olean\).)0 587 y Fd(Class)k
-(Applicabilit)m(y:)259 711 y(MathMap)427 810 y Fj(All)d(MathMaps)g(ha)n
-(v)n(e)e(this)i(attribute.)0 959 y Fd(Notes:)340 1229
-y Fi(\017)45 b Fj(F)-7 b(or)40 b(simpli\014cation)g(to)g(o)r(ccur,)j
-(the)e(t)n(w)n(o)f(MathMaps)g(m)n(ust)g(b)r(e)h(in)f(series)g(and)g(b)r
-(e)h(iden)n(tical)f(\(with)427 1328 y(textually)28 b(iden)n(tical)f
-(transformation)f(functions\).)38 b(F)-7 b(unctional)27
-b(equiv)-5 b(alence)27 b(is)h(not)g(su\016cien)n(t.)340
-1448 y Fi(\017)45 b Fj(The)27 b(consen)n(t)f(of)g(b)r(oth)h(MathMaps)g
-(is)f(required)g(b)r(efore)g(simpli\014cation)g(can)h(tak)n(e)f(place.)
-36 b(If)27 b(either)f(has)427 1548 y(a)h(SimpFI)i(v)-5
-b(alue)27 b(of)h(zero,)e(then)i(simpli\014cation)g(will)g(not)f(o)r
-(ccur.)340 1668 y Fi(\017)45 b Fj(The)35 b(SimpFI)g(attribute)g(con)n
-(trols)e(simpli\014cation)h(only)g(in)h(the)g(case)e(where)h(a)g
-(MathMap's)g(forw)n(ard)427 1767 y(transformation)d(is)h(follo)n(w)n
-(ed)g(b)n(y)g(the)g(matc)n(hing)g(in)n(v)n(erse)f(transformation.)50
-b(It)32 b(do)r(es)h(not)f(apply)g(if)h(an)427 1867 y(in)n(v)n(erse)25
-b(transformation)g(is)h(follo)n(w)n(ed)g(b)n(y)g(a)g(forw)n(ard)f
-(transformation.)34 b(This)27 b(latter)f(case)g(is)g(con)n(trolled)427
-1967 y(b)n(y)i(the)g(SimpIF)g(attribute.)340 2087 y Fi(\017)45
-b Fj(The)19 b Ft(")p Fj(forw)n(ard)p Ft(")e Fj(and)i
-Ft(")p Fj(in)n(v)n(erse)p Ft(")d Fj(transformations)h(referred)h(to)h
-(are)f(those)h(de\014ned)g(when)g(the)h(MathMap)427 2186
-y(is)28 b(created)g(\(corresp)r(onding)e(to)j(the)f Ft(")p
-Fj(fwd)p Ft(")g Fj(and)g Ft(")p Fj(in)n(v)p Ft(")g Fj(parameters)e(of)i
-(its)h(constructor)d(function\).)40 b(If)427 2286 y(the)31
-b(MathMap)g(is)g(in)n(v)n(erted)f(\(i.e.)47 b(its)31
-b(In)n(v)n(ert)f(attribute)h(is)f(non-zero\),)h(then)g(the)g(role)f(of)
-h(the)g(SimpFI)427 2385 y(and)d(SimpIF)g(attributes)g(will)f(b)r(e)h
-(in)n(terc)n(hanged.)p 0 2559 3780 12 v 0 2690 a Fz(SimpIF)396
-b Fe(In)m(v)m(erse-forw)m(ard)36 b(MathMap)i(pairs)g(simplify?)395
-b Fz(SimpIF)0 2853 y Fd(Description:)44 b Fj(This)31
-b(attribute)g(should)f(b)r(e)h(set)g(to)g(a)f(non-zero)f(v)-5
-b(alue)31 b(if)g(applying)f(a)g(MathMap's)g(in)n(v)n(erse)g(trans-)227
-2953 y(formation,)j(follo)n(w)n(ed)e(immediately)i(b)n(y)f(the)g(matc)n
-(hing)g(forw)n(ard)f(transformation)g(will)h(alw)n(a)n(ys)e(restore)h
-(the)227 3053 y(original)h(set)h(of)g(co)r(ordinates.)52
-b(It)34 b(indicates)e(that)i(AST)f(ma)n(y)g(replace)f(suc)n(h)h(a)f
-(sequence)h(of)g(op)r(erations)f(b)n(y)227 3152 y(an)25
-b(iden)n(tit)n(y)h(Mapping)f(\(a)g(UnitMap\))h(if)g(it)f(is)g(encoun)n
-(tered)g(while)g(simplifying)h(a)f(comp)r(ound)g(Mapping)g(\(e.g.)227
-3252 y(using)j(astSimplify\).)227 3370 y(By)j(default,)i(the)f(SimpIF)g
-(attribute)g(is)f(zero,)h(so)e(that)i(AST)g(will)f(not)h(p)r(erform)f
-(this)h(simpli\014cation)f(unless)227 3469 y(y)n(ou)c(ha)n(v)n(e)g(set)
-g(SimpIF)h(to)g(indicate)g(that)f(it)h(is)g(safe)f(to)h(do)f(so.)0
-3606 y Fd(T)m(yp)s(e:)227 3706 y Fj(In)n(teger)g(\(b)r(o)r(olean\).)0
-3842 y Fd(Class)k(Applicabilit)m(y:)259 3965 y(MathMap)427
-4065 y Fj(All)d(MathMaps)g(ha)n(v)n(e)e(this)i(attribute.)0
-4214 y Fd(Notes:)340 4483 y Fi(\017)45 b Fj(F)-7 b(or)40
-b(simpli\014cation)g(to)g(o)r(ccur,)j(the)e(t)n(w)n(o)f(MathMaps)g(m)n
-(ust)g(b)r(e)h(in)f(series)g(and)g(b)r(e)h(iden)n(tical)f(\(with)427
-4583 y(textually)28 b(iden)n(tical)f(transformation)f(functions\).)38
-b(F)-7 b(unctional)27 b(equiv)-5 b(alence)27 b(is)h(not)g(su\016cien)n
-(t.)340 4703 y Fi(\017)45 b Fj(The)27 b(consen)n(t)f(of)g(b)r(oth)h
-(MathMaps)g(is)f(required)g(b)r(efore)g(simpli\014cation)g(can)h(tak)n
-(e)f(place.)36 b(If)27 b(either)f(has)427 4803 y(a)h(SimpIF)i(v)-5
-b(alue)27 b(of)h(zero,)e(then)i(simpli\014cation)g(will)g(not)f(o)r
-(ccur.)340 4922 y Fi(\017)45 b Fj(The)37 b(SimpIF)h(attribute)f(con)n
-(trols)e(simpli\014cation)i(only)g(in)g(the)g(case)f(where)h(a)f
-(MathMap's)h(in)n(v)n(erse)427 5022 y(transformation)32
-b(is)h(follo)n(w)n(ed)g(b)n(y)g(the)h(matc)n(hing)f(forw)n(ard)f
-(transformation.)52 b(It)34 b(do)r(es)f(not)h(apply)f(if)h(a)427
-5122 y(forw)n(ard)21 b(transformation)g(is)h(follo)n(w)n(ed)f(b)n(y)h
-(an)g(in)n(v)n(erse)f(transformation.)34 b(This)22 b(latter)g(case)g
-(is)g(con)n(trolled)427 5221 y(b)n(y)28 b(the)g(SimpFI)g(attribute.)340
-5341 y Fi(\017)45 b Fj(The)19 b Ft(")p Fj(forw)n(ard)p
-Ft(")e Fj(and)i Ft(")p Fj(in)n(v)n(erse)p Ft(")d Fj(transformations)h
-(referred)h(to)h(are)f(those)h(de\014ned)g(when)g(the)h(MathMap)427
-5441 y(is)28 b(created)g(\(corresp)r(onding)e(to)j(the)f
-Ft(")p Fj(fwd)p Ft(")g Fj(and)g Ft(")p Fj(in)n(v)p Ft(")g
-Fj(parameters)e(of)i(its)h(constructor)d(function\).)40
-b(If)427 5540 y(the)31 b(MathMap)g(is)g(in)n(v)n(erted)f(\(i.e.)47
-b(its)31 b(In)n(v)n(ert)f(attribute)h(is)f(non-zero\),)h(then)g(the)g
-(role)f(of)h(the)g(SimpFI)427 5640 y(and)d(SimpIF)g(attributes)g(will)f
-(b)r(e)h(in)n(terc)n(hanged.)p eop end
-%%Page: 456 466
-TeXDict begin 456 465 bop 0 52 a FF(456)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 490 a Fz(Size\(elemen)l(t\))1043 483 y Fe(Character)36
-b(size)j(for)f(a)h(Plot)e(elemen)m(t)2985 490 y Fz(Size\(elemen)l(t\))0
-689 y Fd(Description:)44 b Fj(This)25 b(attribute)f(determines)g(the)h
-(c)n(haracter)d(size)i(used)h(when)f(dra)n(wing)f(eac)n(h)g(elemen)n(t)
-i(of)f(graphical)227 788 y(output)d(pro)r(duced)e(b)n(y)h(a)f(Plot.)34
-b(It)20 b(tak)n(es)f(a)g(separate)g(v)-5 b(alue)19 b(for)h(eac)n(h)f
-(graphical)f(elemen)n(t)i(so)f(that,)j(for)d(instance,)227
-888 y(the)35 b(setting)e Ft(")p Fj(Size\(title\)=2.0)p
-Ft(")g Fj(causes)g(the)h(Plot)g(title)g(to)g(b)r(e)g(dra)n(wn)f(using)g
-(t)n(wice)h(the)g(default)h(c)n(haracter)227 988 y(size.)227
-1114 y(The)e(range)d(of)j(c)n(haracter)d(sizes)h(a)n(v)-5
-b(ailable)31 b(and)h(the)h(app)r(earance)e(of)h(the)g(resulting)g(text)
-g(is)h(determined)f(b)n(y)227 1214 y(the)g(underlying)f(graphics)f
-(system.)48 b(The)32 b(default)g(b)r(eha)n(viour)e(is)h(for)g(all)g
-(graphical)f(elemen)n(ts)h(to)h(b)r(e)g(dra)n(wn)227
-1313 y(using)c(the)f(default)i(c)n(haracter)c(size)i(supplied)h(b)n(y)g
-(this)f(graphics)g(system.)0 1466 y Fd(T)m(yp)s(e:)227
-1566 y Fj(Floating)g(P)n(oin)n(t.)0 1719 y Fd(Class)k(Applicabilit)m
-(y:)259 1859 y(Plot)427 1959 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)0 2124 y Fd(Notes:)340 2410 y Fi(\017)45
-b Fj(F)-7 b(or)27 b(a)g(list)h(of)g(the)g(graphical)e(elemen)n(ts)h(a)n
-(v)-5 b(ailable,)27 b(see)g(the)h(description)f(of)g(the)h(Plot)f
-(class.)340 2545 y Fi(\017)45 b Fj(If)37 b(no)e(graphical)g(elemen)n(t)
-h(is)g(sp)r(eci\014ed,)i(\(e.g.)62 b Ft(")p Fj(Size)p
-Ft(")36 b Fj(instead)f(of)h Ft(")p Fj(Size\(title\))p
-Ft(")p Fj(\),)j(then)e(a)e Ft(")p Fj(set)p Ft(")g Fj(or)427
-2645 y Ft(")p Fj(clear)p Ft(")d Fj(op)r(eration)h(will)h(a\013ect)g
-(the)g(attribute)g(v)-5 b(alue)34 b(of)f(all)h(graphical)e(elemen)n
-(ts,)j(while)f(a)g Ft(")p Fj(get)p Ft(")e Fj(or)427 2744
-y Ft(")p Fj(test)p Ft(")27 b Fj(op)r(eration)g(will)h(use)f(just)h(the)
-g(Size\(T)-7 b(extLab\))28 b(v)-5 b(alue.)p 0 2947 V
-0 3079 a Fz(SizeGuess)448 b Fe(The)39 b(exp)s(ected)g(size)g(of)f(the)g
-(KeyMap)448 b Fz(SizeGuess)0 3271 y Fd(Description:)44
-b Fj(This)37 b(is)f(attribute)g(giv)n(es)g(an)g(estimate)g(of)g(the)h
-(n)n(um)n(b)r(er)f(of)g(en)n(tries)g(that)h(will)f(b)r(e)h(stored)f(in)
-g(the)227 3371 y(KeyMap.)59 b(It)36 b(is)f(used)g(to)g(tune)h(the)f(in)
-n(ternal)g(prop)r(erties)f(of)h(the)h(KeyMap)e(for)h(sp)r(eed)h(and)f
-(e\016ciency)-7 b(.)59 b(A)227 3471 y(larger)24 b(v)-5
-b(alue)26 b(will)h(result)e(in)i(faster)e(access)g(at)h(the)g(exp)r
-(ense)g(of)g(increased)f(memory)g(requiremen)n(ts.)36
-b(Ho)n(w)n(ev)n(er)227 3570 y(if)28 b(the)f(SizeGuess)g(v)-5
-b(alue)27 b(is)f(m)n(uc)n(h)h(larger)e(than)i(the)h(actual)e(size)h(of)
-g(the)g(KeyMap,)f(then)i(there)e(will)h(b)r(e)h(little,)227
-3670 y(if)g(an)n(y)-7 b(,)27 b(sp)r(eed)h(gained)f(b)n(y)g(making)g
-(the)h(SizeGuess)g(ev)n(en)f(larger.)35 b(The)27 b(default)h(v)-5
-b(alue)28 b(is)f(300.)227 3796 y(The)36 b(v)-5 b(alue)36
-b(of)g(this)h(attribute)f(can)g(only)f(b)r(e)i(c)n(hanged)e(if)h(the)h
-(KeyMap)e(is)h(empt)n(y)-7 b(.)62 b(Its)37 b(v)-5 b(alue)35
-b(can)h(b)r(e)h(set)227 3896 y(con)n(v)n(enien)n(tly)24
-b(when)i(creating)e(the)i(KeyMap.)35 b(An)26 b(error)d(will)j(b)r(e)g
-(rep)r(orted)e(if)i(an)f(attempt)h(is)g(made)f(to)g(set)g(or)227
-3996 y(clear)i(the)h(attribute)g(when)f(the)h(KeyMap)f(con)n(tains)g
-(an)n(y)g(en)n(tries.)0 4149 y Fd(T)m(yp)s(e:)227 4248
-y Fj(In)n(teger.)0 4401 y Fd(Class)k(Applicabilit)m(y:)259
-4541 y(KeyMap)427 4641 y Fj(All)d(KeyMaps)f(ha)n(v)n(e)f(this)i
-(attribute.)p 0 4844 V 0 4976 a Fz(Skip)1098 b Fe(Skip)39
-b(irrelev)-7 b(an)m(t)36 b(data?)1098 b Fz(Skip)0 5168
-y Fd(Description:)44 b Fj(This)30 b(is)f(a)g(b)r(o)r(olean)f(attribute)
-i(whic)n(h)f(indicates)g(whether)g(the)h(Ob)5 b(ject)29
-b(data)g(b)r(eing)g(read)f(through)227 5268 y(a)f(Channel)h(are)f(in)n
-(ter-mixed)g(with)h(other,)f(irrelev)-5 b(an)n(t,)26
-b(external)h(data.)227 5394 y(If)33 b(Skip)f(is)f(zero)g(\(the)i
-(default\),)h(then)e(the)g(source)f(of)h(input)g(data)g(is)f(exp)r
-(ected)i(to)e(con)n(tain)h(descriptions)f(of)227 5494
-y(AST)26 b(Ob)5 b(jects)24 b(and)h(commen)n(ts)g(and)f(nothing)h(else)g
-(\(if)h(an)n(ything)e(else)h(is)f(read,)h(an)g(error)e(will)i
-(result\).)36 b(If)25 b(Skip)227 5593 y(is)34 b(non-zero,)g(then)g(an)n
-(y)f(non-Ob)5 b(ject)33 b(data)g(encoun)n(tered)g(b)r(et)n(w)n(een)h
-(Ob)5 b(jects)33 b(will)h(b)r(e)g(ignored)f(and)h(simply)227
-5693 y(skipp)r(ed)28 b(o)n(v)n(er)e(in)i(order)e(to)i(reac)n(h)e(the)i
-(next)g(Ob)5 b(ject.)p eop end
-%%Page: 457 467
-TeXDict begin 457 466 bop 3643 52 a FF(457)0 351 y Fd(T)m(yp)s(e:)227
-451 y Fj(In)n(teger)27 b(\(b)r(o)r(olean\).)0 602 y Fd(Class)k
-(Applicabilit)m(y:)259 740 y(Channel)427 839 y Fj(All)d(Channels)g(ha)n
-(v)n(e)e(this)i(attribute.)259 973 y Fd(FitsChan)427
-1073 y Fj(The)k(FitsChan)g(class)f(sets)g(the)h(default)g(v)-5
-b(alue)32 b(of)f(this)h(attribute)g(to)g(1,)g(so)f(that)h(all)g
-(irrelev)-5 b(an)n(t)30 b(FITS)427 1172 y(headers)d(will)h(normally)e
-(b)r(e)i(ignored.)p 0 1373 3780 12 v 0 1511 a Fz(SkyRef\(axis\))918
-1505 y Fe(P)m(osition)36 b(de\014ning)i(the)h(o\013set)f(co)s(ordinate)
-1715 1604 y(system)3029 1511 y Fz(SkyRef\(axis\))0 1795
-y Fd(Description:)44 b Fj(This)33 b(attribute)g(allo)n(ws)f(a)g(SkyF)-7
-b(rame)32 b(to)h(represen)n(t)e(o\013sets,)j(rather)e(than)h(absolute)f
-(axis)g(v)-5 b(alues,)227 1894 y(within)29 b(the)f(co)r(ordinate)f
-(system)h(sp)r(eci\014ed)g(b)n(y)f(the)i(System)f(attribute.)38
-b(If)28 b(supplied,)g(SkyRef)h(should)e(b)r(e)i(set)227
-1994 y(to)d(hold)f(the)h(longitude)g(and)f(latitude)h(of)g(a)f(p)r(oin)
-n(t)h(within)g(the)g(co)r(ordinate)f(system)g(sp)r(eci\014ed)h(b)n(y)f
-(the)h(System)227 2094 y(attribute.)36 b(The)23 b(co)r(ordinate)f
-(system)h(represen)n(ted)f(b)n(y)h(the)g(SkyF)-7 b(rame)23
-b(will)g(then)h(b)r(e)f(rotated)g(in)g(order)f(to)h(put)227
-2193 y(the)32 b(sp)r(eci\014ed)g(p)r(osition)f(at)h(either)f(the)h(p)r
-(ole)f(or)g(the)h(origin)e(of)h(the)h(new)g(co)r(ordinate)e(system)h
-(\(as)g(indicated)227 2293 y(b)n(y)g(the)g(SkyRefIs)g(attribute\).)46
-b(The)31 b(orien)n(tation)f(of)g(the)i(mo)r(di\014ed)f(co)r(ordinate)e
-(system)i(is)g(then)g(con)n(trolled)227 2393 y(using)d(the)f(SkyRefP)h
-(attribute.)227 2518 y(If)34 b(an)f(in)n(teger)g(axis)g(index)g(is)h
-(included)f(in)h(the)g(attribute)g(name)f(\(e.g.)54 b
-Ft(")p Fj(SkyRef\(1\))p Ft(")p Fj(\))34 b(then)g(the)f(attribute)227
-2617 y(v)-5 b(alue)29 b(should)g(b)r(e)g(supplied)h(as)e(a)h(single)f
-(\015oating)g(p)r(oin)n(t)i(axis)e(v)-5 b(alue,)29 b(in)g(radians,)f
-(when)i(setting)f(a)f(v)-5 b(alue)29 b(for)227 2717 y(the)j(attribute,)
-g(and)f(will)h(b)r(e)g(returned)e(in)i(the)g(same)e(form)h(when)h
-(getting)f(the)g(v)-5 b(alue)31 b(of)h(the)f(attribute.)48
-b(In)227 2817 y(this)31 b(case)f(the)i(in)n(teger)d(axis)i(index)f
-(should)h(b)r(e)g Ft(")p Fj(1)p Ft(")f Fj(or)g Ft(")p
-Fj(2)p Ft(")f Fj(\(the)j(v)-5 b(alues)30 b(to)h(use)g(for)f(longitude)h
-(and)f(latitue)227 2916 y(axes)d(are)g(giv)n(en)f(b)n(y)i(the)g
-(LonAxis)f(and)g(LatAxis)g(attributes\).)227 3042 y(If)h(no)g(axis)f
-(index)h(is)f(included)i(in)f(the)g(attribute)g(name)f(\(e.g.)37
-b Ft(")p Fj(SkyRef)p Ft(")p Fj(\))28 b(then)g(the)g(attribute)g(v)-5
-b(alue)28 b(should)227 3141 y(b)r(e)f(supplied)f(as)f(a)g(c)n(haracter)
-f(string)h(con)n(taining)g(t)n(w)n(o)g(formatted)h(axis)f(v)-5
-b(alues)25 b(\(an)h(axis)f(1)g(v)-5 b(alue)26 b(follo)n(w)n(ed)f(b)n(y)
-227 3241 y(a)j(comma,)f(follo)n(w)n(ed)g(b)n(y)h(an)f(axis)g(2)h(v)-5
-b(alue\).)38 b(The)28 b(same)f(form)g(will)i(b)r(e)f(used)g(when)g
-(getting)f(the)i(v)-5 b(alue)27 b(of)h(the)227 3341 y(attribute.)227
-3466 y(The)g(default)g(v)-5 b(alues)27 b(for)g(SkyRef)h(are)f(zero)f
-(longitude)i(and)f(zero)f(latitude.)0 3617 y Fd(T)m(yp)s(e:)227
-3716 y Fj(Floating)h(p)r(oin)n(t.)0 3867 y Fd(Class)k(Applicabilit)m
-(y:)259 4005 y(SkyF)-8 b(rame)427 4105 y Fj(All)28 b(SkyF)-7
-b(rames)27 b(ha)n(v)n(e)f(this)i(attribute.)0 4268 y
-Fd(Notes:)340 4552 y Fi(\017)45 b Fj(If)31 b(the)f(System)g(attribute)g
-(of)g(the)g(SkyF)-7 b(rame)29 b(is)h(c)n(hanged,)g(an)n(y)f(p)r
-(osition)g(giv)n(en)g(for)h(SkyRef)g(is)g(trans-)427
-4652 y(formed)e(in)n(to)f(the)h(new)g(System.)340 4786
-y Fi(\017)45 b Fj(If)24 b(a)f(v)-5 b(alue)23 b(has)f(b)r(een)i
-(assigned)e(to)h(SkyRef)g(attribute,)i(then)e(the)h(default)g(v)-5
-b(alues)22 b(for)h(certain)g(attributes)427 4885 y(are)k(c)n(hanged)g
-(as)g(follo)n(ws:)37 b(the)28 b(default)h(axis)e(Lab)r(els)h(for)f(the)
-h(SkyF)-7 b(rame)28 b(are)f(mo)r(di\014ed)h(b)n(y)g(app)r(ending)427
-4985 y Ft(")h Fj(o\013set)p Ft(")f Fj(to)g(the)i(end,)f(the)g(default)g
-(axis)f(Sym)n(b)r(ols)g(for)g(the)i(SkyF)-7 b(rame)27
-b(are)h(mo)r(di\014ed)h(b)n(y)g(prep)r(ending)427 5085
-y(the)i(c)n(haracter)d Ft(")p Fj(D)p Ft(")i Fj(to)g(the)h(start,)f(and)
-g(the)h(default)f(title)h(is)f(mo)r(di\014ed)h(b)n(y)f(replacing)f(the)
-i(pro)5 b(jection)427 5184 y(information)27 b(b)n(y)h(the)f(origin)g
-(information.)-2 5348 y Fd(Aligning)k(SkyF)-8 b(rames)32
-b(with)f(O\013set)g(Co)s(ordinate)g(Systems)n(:)227 5494
-y Fj(The)k(o\013set)g(co)r(ordinate)e(system)i(within)g(a)f(SkyF)-7
-b(rame)34 b(should)h(normally)e(b)r(e)i(considered)f(as)g(a)g(sup)r
-(er\014cial)227 5593 y Ft(")p Fj(re-badging)p Ft(")e
-Fj(of)i(the)h(axes)e(of)h(the)h(co)r(ordinate)e(system)h(sp)r
-(eci\014ed)g(b)n(y)g(the)h(System)f(attribute)h(-)e(it)i(merely)227
-5693 y(pro)n(vides)27 b(an)h(alternativ)n(e)e(n)n(umerical)i
-Ft(")p Fj(lab)r(el)p Ft(")f Fj(for)h(eac)n(h)f(p)r(osition)h(in)g(the)g
-(System)h(co)r(ordinate)e(system.)38 b(The)p eop end
-%%Page: 458 468
-TeXDict begin 458 467 bop 0 52 a FF(458)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fj(SkyF)-7 b(rame)28 b(retains)g(full)h(kno)n(wledge)e(of)i(the)g
-(celestial)f(co)r(ordinate)f(system)i(on)f(whic)n(h)g(the)h(o\013set)g
-(co)r(ordinate)227 451 y(system)k(is)f(based)g(\(giv)n(en)h(b)n(y)f
-(the)h(System)g(attribute\).)52 b(F)-7 b(or)32 b(instance,)i(the)f
-(SkyF)-7 b(rame)32 b(retains)g(kno)n(wledge)227 551 y(of)k(the)g(w)n(a)
-n(y)e(that)i(one)f(celestial)h(co)r(ordinate)e(system)h(ma)n(y)g
-Ft(")p Fj(drift)p Ft(")h Fj(with)g(resp)r(ect)f(to)h(another)e(o)n(v)n
-(er)g(time.)227 650 y(Normally)-7 b(,)40 b(if)e(y)n(ou)f(attempt)i(to)e
-(align)g(t)n(w)n(o)g(SkyF)-7 b(rames)37 b(\(e.g.)68 b(using)37
-b(the)h(astCon)n(v)n(ert)e(or)h(astFindF)-7 b(rame)227
-750 y(routine\),)36 b(the)e(e\013ect)h(of)f(an)n(y)f(o\013set)h(co)r
-(ordinate)f(system)h(de\014ned)g(in)g(either)g(SkyF)-7
-b(rame)33 b(will)i(b)r(e)f(remo)n(v)n(ed,)227 849 y(resulting)22
-b(in)i(alignmen)n(t)e(b)r(eing)h(p)r(erformed)f(in)h(the)g(celestial)g
-(co)r(ordinate)e(system)i(giv)n(en)f(b)n(y)g(the)h(AlignSystem)227
-949 y(attribute.)35 b(Ho)n(w)n(ev)n(er,)21 b(b)n(y)h(setting)g(the)g
-(AlignO\013set)g(attribute)g(ot)f(a)h(non-zero)e(v)-5
-b(alue,)23 b(it)f(is)g(p)r(ossible)f(to)h(c)n(hange)227
-1049 y(this)28 b(b)r(eha)n(viour)e(so)h(that)h(the)g(e\013ect)g(of)g
-(the)g(o\013set)f(co)r(ordinate)g(system)g(is)g(not)h(remo)n(v)n(ed)e
-(when)i(aligning)e(t)n(w)n(o)227 1148 y(SkyF)-7 b(rames.)p
-0 1355 3780 12 v 0 1487 a Fz(SkyRefIs)299 b Fe(Selects)38
-b(the)h(nature)f(of)g(the)h(o\013set)f(co)s(ordinate)1715
-1586 y(system)3257 1487 y Fz(SkyRefIs)0 1782 y Fd(Description:)44
-b Fj(This)34 b(attribute)f(con)n(trols)f(ho)n(w)h(the)h(v)-5
-b(alues)33 b(supplied)h(for)f(the)h(SkyRef)f(and)h(SkyRefP)f
-(attributes)227 1882 y(are)e(used.)49 b(These)32 b(three)f(attributes)h
-(together)f(allo)n(w)f(a)i(SkyF)-7 b(rame)31 b(to)g(represen)n(t)g
-(o\013sets)g(relativ)n(e)g(to)g(some)227 1982 y(sp)r(eci\014ed)39
-b(origin)e(or)g(p)r(ole)h(within)h(the)g(co)r(ordinate)e(system)g(sp)r
-(eci\014ed)i(b)n(y)f(the)g(System)h(attribute,)i(rather)227
-2081 y(than)26 b(absolute)f(axis)g(v)-5 b(alues.)36 b(SkyRefIs)25
-b(can)h(tak)n(e)f(one)g(of)g(the)h(case-insensitiv)n(e)e(v)-5
-b(alues)26 b Ft(")p Fj(Origin)p Ft(")p Fj(,)e Ft(")p
-Fj(P)n(ole)p Ft(")f Fj(or)227 2181 y Ft(")p Fj(Ignored)p
-Ft(")p Fj(.)227 2309 y(If)h(SkyRefIs)g(is)f(set)g(to)h
-Ft(")p Fj(Origin)p Ft(")p Fj(,)e(then)i(the)g(co)r(ordinate)e(system)i
-(represen)n(ted)e(b)n(y)h(the)h(SkyF)-7 b(rame)23 b(is)g(mo)r(di\014ed)
-227 2409 y(to)28 b(put)g(the)g(origin)e(of)i(longitude)f(and)h
-(latitude)g(at)f(the)h(p)r(osition)g(sp)r(eci\014ed)f(b)n(y)h(the)g
-(SkyRef)g(attribute.)227 2537 y(If)h(SkyRefIs)g(is)f(set)h(to)f
-Ft(")p Fj(P)n(ole)p Ft(")p Fj(,)f(then)i(the)g(co)r(ordinate)e(system)h
-(represen)n(ted)g(b)n(y)g(the)h(SkyF)-7 b(rame)28 b(is)g(mo)r(di\014ed)
-227 2637 y(to)g(put)g(the)g(north)f(p)r(ole)h(at)f(the)h(p)r(osition)g
-(sp)r(eci\014ed)f(b)n(y)h(the)g(SkyRef)g(attribute.)227
-2765 y(If)d(SkyRefIs)e(is)h(set)g(to)g Ft(")p Fj(Ignored)p
-Ft(")e Fj(\(the)i(default\),)i(then)e(an)n(y)f(v)-5 b(alue)24
-b(set)g(for)f(the)i(SkyRef)f(attribute)g(is)g(ignored,)227
-2864 y(and)39 b(the)g(SkyF)-7 b(rame)38 b(represen)n(ts)f(the)i(co)r
-(ordinate)f(system)g(sp)r(eci\014ed)h(b)n(y)g(the)g(System)g(attribute)
-g(directly)227 2964 y(without)28 b(an)n(y)f(rotation.)0
-3121 y Fd(T)m(yp)s(e:)227 3220 y Fj(String.)0 3377 y
-Fd(Class)k(Applicabilit)m(y:)259 3521 y(SkyF)-8 b(rame)427
-3621 y Fj(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i(attribute.)
-p 0 3827 V 0 3966 a Fz(SkyRefP\(axis\))1068 3959 y Fe(P)m(osition)36
-b(on)i(primary)f(meridian)g(of)1273 4073 y(o\013set)h(co)s(ordinate)f
-(system)2937 3966 y Fz(SkyRefP\(axis\))0 4270 y Fd(Description:)44
-b Fj(This)33 b(attribute)g(is)g(used)g(to)g(con)n(trol)e(the)i(orien)n
-(tation)f(of)h(the)g(o\013set)g(co)r(ordinate)f(system)g(de\014ned)227
-4369 y(b)n(y)h(attributes)h(SkyRef)f(and)h(SkyRefIs.)54
-b(If)34 b(used,)h(it)f(should)f(b)r(e)h(set)f(to)h(hold)f(the)h
-(longitude)f(and)g(latitude)227 4469 y(of)e(a)f(p)r(oin)n(t)h(within)h
-(the)f(co)r(ordinate)f(system)g(sp)r(eci\014ed)h(b)n(y)g(the)g(System)g
-(attribute.)46 b(The)31 b(o\013set)g(co)r(ordinate)227
-4569 y(system)c(represen)n(ted)e(b)n(y)h(the)h(SkyF)-7
-b(rame)26 b(will)h(then)g(b)r(e)g(rotated)f(in)h(order)e(to)i(put)g
-(the)g(p)r(osition)f(supplied)h(for)227 4668 y(SkyRefP)35
-b(on)f(the)h(zero)e(longitude)h(meridian.)58 b(This)34
-b(rotation)g(is)g(ab)r(out)h(an)f(axis)g(from)g(the)h(cen)n(tre)f(of)g
-(the)227 4768 y(celestial)d(sphere)g(to)h(the)g(p)r(oin)n(t)g(sp)r
-(eci\014ed)g(b)n(y)f(the)h(SkyRef)g(attribute.)49 b(The)32
-b(default)g(v)-5 b(alue)31 b(for)g(SkyRefP)h(is)227 4867
-y(usually)26 b(the)g(north)g(p)r(ole)g(\(that)h(is,)f(a)g(latitude)g
-(of)g(+90)f(degrees)g(in)h(the)g(co)r(ordinate)f(system)h(sp)r
-(eci\014ed)g(b)n(y)g(the)227 4967 y(System)j(attribute\).)39
-b(The)28 b(exception)g(to)g(this)h(is)f(if)h(the)f(SkyRef)h(attribute)f
-(is)g(itself)h(set)f(to)g(either)g(the)h(north)227 5067
-y(or)23 b(south)h(p)r(ole.)35 b(In)24 b(these)g(cases)f(the)h(default)g
-(for)f(SkyRefP)h(is)f(the)h(origin)f(\(that)h(is,)h(a)e(\(0,0\))h(in)g
-(the)g(co)r(ordinate)227 5166 y(system)k(sp)r(eci\014ed)f(b)n(y)h(the)g
-(System)g(attribute\).)227 5295 y(If)j(an)f(in)n(teger)f(axis)g(index)i
-(is)f(included)g(in)h(the)f(attribute)h(name)e(\(e.g.)45
-b Ft(")p Fj(SkyRefP\(1\))p Ft(")p Fj(\))29 b(then)i(the)f(attribute)227
-5394 y(v)-5 b(alue)29 b(should)g(b)r(e)g(supplied)h(as)e(a)h(single)f
-(\015oating)g(p)r(oin)n(t)i(axis)e(v)-5 b(alue,)29 b(in)g(radians,)f
-(when)i(setting)f(a)f(v)-5 b(alue)29 b(for)227 5494 y(the)j(attribute,)
-g(and)f(will)h(b)r(e)g(returned)e(in)i(the)g(same)e(form)h(when)h
-(getting)f(the)g(v)-5 b(alue)31 b(of)h(the)f(attribute.)48
-b(In)227 5593 y(this)31 b(case)f(the)i(in)n(teger)d(axis)i(index)f
-(should)h(b)r(e)g Ft(")p Fj(1)p Ft(")f Fj(or)g Ft(")p
-Fj(2)p Ft(")f Fj(\(the)j(v)-5 b(alues)30 b(to)h(use)g(for)f(longitude)h
-(and)f(latitue)227 5693 y(axes)d(are)g(giv)n(en)f(b)n(y)i(the)g
-(LonAxis)f(and)g(LatAxis)g(attributes\).)p eop end
-%%Page: 459 469
-TeXDict begin 459 468 bop 3643 52 a FF(459)227 351 y
-Fj(If)25 b(no)f(axis)f(index)h(is)g(included)h(in)f(the)h(attribute)f
-(name)g(\(e.g.)35 b Ft(")p Fj(SkyRefP)p Ft(")p Fj(\))24
-b(then)g(the)h(attribute)f(v)-5 b(alue)24 b(should)227
-451 y(b)r(e)j(supplied)f(as)f(a)g(c)n(haracter)f(string)h(con)n
-(taining)g(t)n(w)n(o)g(formatted)h(axis)f(v)-5 b(alues)25
-b(\(an)h(axis)f(1)g(v)-5 b(alue)26 b(follo)n(w)n(ed)f(b)n(y)227
-551 y(a)j(comma,)f(follo)n(w)n(ed)g(b)n(y)h(an)f(axis)g(2)h(v)-5
-b(alue\).)38 b(The)28 b(same)f(form)g(will)i(b)r(e)f(used)g(when)g
-(getting)f(the)i(v)-5 b(alue)27 b(of)h(the)227 650 y(attribute.)0
-794 y Fd(T)m(yp)s(e:)227 894 y Fj(Floating)f(p)r(oin)n(t.)0
-1038 y Fd(Class)k(Applicabilit)m(y:)259 1170 y(SkyF)-8
-b(rame)427 1269 y Fj(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i
-(attribute.)0 1426 y Fd(Notes:)340 1703 y Fi(\017)45
-b Fj(If)24 b(the)g(p)r(osition)f(giv)n(en)f(b)n(y)h(the)h(SkyRef)f
-(attribute)h(de\014nes)f(the)h(origin)e(of)h(the)h(o\013set)f(co)r
-(ordinate)f(system)427 1803 y(\(that)33 b(is,)h(if)f(the)g(SkyRefIs)g
-(attribute)g(is)f(set)h(to)f Ft(")p Fj(origin)p Ft(")p
-Fj(\),)h(then)g(there)f(will)h(in)g(general)e(b)r(e)i(t)n(w)n(o)f(ori-)
-427 1902 y(en)n(tations)27 b(whic)n(h)h(will)f(put)i(the)f(supplied)f
-(SkyRefP)h(p)r(osition)f(on)g(the)h(zero)f(longitude)g(meridian.)37
-b(The)427 2002 y(orien)n(tation)25 b(whic)n(h)i(is)f(actually)g(used)g
-(is)g(the)h(one)f(whic)n(h)h(giv)n(es)e(the)i(SkyRefP)f(p)r(osition)g
-(a)g(p)r(ositiv)n(e)g(lat-)427 2102 y(itude)i(in)g(the)g(o\013set)g(co)
-r(ordinate)f(system)g(\(the)h(other)f(p)r(ossible)h(orien)n(tation)e(w)
-n(ould)h(giv)n(e)g(the)h(SkyRefP)427 2201 y(p)r(osition)g(a)f(negativ)n
-(e)f(latitude\).)340 2329 y Fi(\017)45 b Fj(An)29 b(error)d(will)i(b)r
-(e)h(rep)r(orted)e(if)i(an)e(attempt)i(is)f(made)g(to)g(use)g(a)f
-(SkyRefP)h(v)-5 b(alue)28 b(whic)n(h)g(is)g(co-inciden)n(t)427
-2429 y(with)h(SkyRef)f(or)f(with)h(the)g(p)r(oin)n(t)g(diametrically)f
-(opp)r(osite)h(to)f(SkyRef)h(on)g(the)g(celestial)g(sphere.)37
-b(The)427 2528 y(rep)r(orting)d(of)h(this)g(error)d(is)j(deferred)f(un)
-n(til)h(the)h(SkyRef)f(and)f(SkyRefP)h(attribute)g(v)-5
-b(alues)34 b(are)g(used)427 2628 y(within)29 b(a)e(calculation.)340
-2756 y Fi(\017)45 b Fj(If)27 b(the)f(System)h(attribute)f(of)g(the)h
-(SkyF)-7 b(rame)25 b(is)h(c)n(hanged,)f(an)n(y)h(p)r(osition)g(giv)n
-(en)f(for)h(SkyRefP)g(is)g(trans-)427 2855 y(formed)i(in)n(to)f(the)h
-(new)g(System.)p 0 3044 3780 12 v 0 3175 a Fz(SourceSys)754
-3176 y Fe(Sp)s(ectral)37 b(system)i(in)f(whic)m(h)g(the)h(source)f(v)m
-(elo)s(cit)m(y)1675 3290 y(is)g(stored)3188 3175 y Fz(SourceSys)0
-3450 y Fd(Description:)44 b Fj(This)31 b(attribute)f(iden)n(ti\014es)h
-(the)g(sp)r(ectral)f(system)g(in)h(whic)n(h)f(the)h(SourceV)-7
-b(el)30 b(attribute)h(v)-5 b(alue)30 b(\(the)227 3550
-y(source)d(v)n(elo)r(cit)n(y\))g(is)g(supplied)h(and)g(returned.)36
-b(It)28 b(can)f(b)r(e)h(one)f(of)h(the)g(follo)n(wing:)340
-3803 y Fi(\017)45 b Ft(")p Fj(VRAD)p Ft(")28 b Fj(or)f
-Ft(")p Fj(VRADIO)p Ft(")p Fj(:)37 b(Radio)27 b(v)n(elo)r(cit)n(y)f
-(\(km/s\))340 3931 y Fi(\017)45 b Ft(")p Fj(V)n(OPT)p
-Ft(")26 b Fj(or)h Ft(")p Fj(V)n(OPTICAL)p Ft(")p Fj(:)35
-b(Optical)27 b(v)n(elo)r(cit)n(y)g(\(km/s\))340 4058
-y Fi(\017)45 b Ft(")p Fj(ZOPT)p Ft(")26 b Fj(or)h Ft(")p
-Fj(REDSHIFT)p Ft(")p Fj(:)36 b(Redshift)29 b(\(dimensionless\))340
-4186 y Fi(\017)45 b Ft(")p Fj(BET)-7 b(A)p Ft(")p Fj(:)36
-b(Beta)27 b(factor)g(\(dimensionless\))340 4314 y Fi(\017)45
-b Ft(")p Fj(VELO)p Ft(")26 b Fj(or)h Ft(")p Fj(VREL)p
-Ft(")p Fj(:)36 b(Apparen)n(t)27 b(radial)g(\()p Ft(")p
-Fj(relativistic)p Ft(")p Fj(\))f(v)n(elo)r(cit)n(y)h(\(km/s\))227
-4470 y(When)34 b(setting)e(a)h(new)f(v)-5 b(alue)33 b(for)f(the)i
-(SourceV)-7 b(el)32 b(attribute,)i(the)f(source)f(v)n(elo)r(cit)n(y)g
-(should)g(b)r(e)h(supplied)g(in)227 4570 y(the)28 b(sp)r(ectral)f
-(system)g(indicated)g(b)n(y)g(this)h(attribute.)37 b(Lik)n(ewise,)27
-b(when)g(getting)g(the)h(v)-5 b(alue)27 b(of)g(the)h(SourceV)-7
-b(el)227 4670 y(attribute,)28 b(the)g(v)n(elo)r(cit)n(y)f(will)h(b)r(e)
-g(returned)f(in)h(this)g(sp)r(ectral)f(system.)227 4792
-y(If)g(the)h(v)-5 b(alue)26 b(of)h(SourceSys)f(is)g(c)n(hanged,)g(the)i
-(v)-5 b(alue)26 b(stored)g(for)g(SourceV)-7 b(el)27 b(will)g(b)r(e)g
-(con)n(v)n(erted)e(from)i(the)g(old)227 4891 y(to)h(the)g(new)f(sp)r
-(ectral)g(systems.)227 5013 y(The)h(default)g(v)-5 b(alue)27
-b(is)h Ft(")p Fj(VELO)p Ft(")e Fj(\(apparen)n(t)h(radial)f(v)n(elo)r
-(cit)n(y\).)0 5157 y Fd(T)m(yp)s(e:)227 5257 y Fj(String.)0
-5401 y Fd(Class)31 b(Applicabilit)m(y:)259 5533 y(Sp)s(ecF)-8
-b(rame)427 5632 y Fj(All)28 b(Sp)r(ecF)-7 b(rames)27
-b(ha)n(v)n(e)g(this)h(attribute.)p eop end
-%%Page: 460 470
-TeXDict begin 460 469 bop 0 52 a FF(460)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 482 a Fz(SourceVRF)879 483 y Fe(Rest)39 b(frame)e(in)i
-(whic)m(h)e(the)i(source)f(v)m(elo)s(cit)m(y)1675 598
-y(is)g(stored)3100 482 y Fz(SourceVRF)0 781 y Fd(Description:)44
-b Fj(This)32 b(attribute)f(iden)n(ti\014es)g(the)h(rest)f(frame)g(in)g
-(whic)n(h)g(the)h(source)e(v)n(elo)r(cit)n(y)g(or)h(redshift)g(is)g
-(stored)227 880 y(\(the)g(source)e(v)n(elo)r(cit)n(y)h(or)f(redshift)h
-(is)h(accessed)e(using)h(attribute)g(SourceV)-7 b(el\).)45
-b(When)30 b(setting)h(a)e(new)i(v)-5 b(alue)227 980 y(for)34
-b(the)h(SourceV)-7 b(el)34 b(attribute,)i(the)f(source)f(v)n(elo)r(cit)
-n(y)f(or)h(redshift)g(should)h(b)r(e)g(supplied)f(in)h(the)g(rest)f
-(frame)227 1079 y(indicated)21 b(b)n(y)e(this)i(attribute.)34
-b(Lik)n(ewise,)21 b(when)g(getting)e(the)i(v)-5 b(alue)20
-b(of)g(the)h(SourceV)-7 b(el)19 b(attribute,)j(the)e(v)n(elo)r(cit)n(y)
-227 1179 y(or)27 b(redshift)h(will)g(b)r(e)g(returned)f(in)h(this)g
-(rest)f(frame.)227 1312 y(If)33 b(the)f(v)-5 b(alue)32
-b(of)g(SourceVRF)f(is)h(c)n(hanged,)g(the)g(v)-5 b(alue)32
-b(stored)f(for)g(SourceV)-7 b(el)32 b(will)g(b)r(e)g(con)n(v)n(erted)f
-(from)g(the)227 1412 y(old)d(to)f(the)h(new)g(rest)f(frame.)227
-1545 y(The)44 b(v)-5 b(alues)43 b(whic)n(h)h(can)f(b)r(e)h(supplied)g
-(are)f(the)h(same)f(as)g(for)g(the)h(StdOfRest)h(attribute)e(\(except)h
-(that)227 1645 y(SourceVRF)28 b(cannot)f(b)r(e)h(set)f(to)h
-Ft(")p Fj(Source)p Ft(")p Fj(\).)35 b(The)28 b(default)g(v)-5
-b(alue)27 b(is)h Ft(")p Fj(Helio)p Ft(")p Fj(.)0 1812
-y Fd(T)m(yp)s(e:)227 1911 y Fj(String.)0 2078 y Fd(Class)j
-(Applicabilit)m(y:)259 2232 y(Sp)s(ecF)-8 b(rame)427
-2332 y Fj(All)28 b(Sp)r(ecF)-7 b(rames)27 b(ha)n(v)n(e)g(this)h
-(attribute.)p 0 2548 V 0 2680 a Fz(SourceV)-11 b(el)812
-b Fe(The)38 b(source)h(v)m(elo)s(cit)m(y)809 b Fz(SourceV)-11
-b(el)0 2891 y Fd(Description:)44 b Fj(This)39 b(attribute)f(\(together)
-g(with)h(SourceSys,)h(SourceVRF,)f(RefRA)g(and)f(RefDec\))i(de\014nes)e
-(the)227 2990 y Ft(")p Fj(Source)p Ft(")25 b Fj(standard)f(of)i(rest)g
-(\(see)g(attribute)g(StdOfRest\).)37 b(This)26 b(is)g(a)f(rest)g(frame)
-h(whic)n(h)g(is)g(mo)n(ving)e(to)n(w)n(ards)227 3090
-y(the)j(p)r(osition)e(giv)n(en)g(b)n(y)h(RefRA)h(and)e(RefDec)i(at)f(a)
-f(v)n(elo)r(cit)n(y)g(giv)n(en)g(b)n(y)h(SourceV)-7 b(el.)36
-b(A)26 b(p)r(ositiv)n(e)f(v)-5 b(alue)26 b(means)227
-3190 y(the)j(source)e(is)h(mo)n(ving)f(a)n(w)n(a)n(y)f(from)i(the)h
-(observ)n(er.)37 b(When)28 b(a)g(new)h(v)-5 b(alue)28
-b(is)g(assigned)f(to)h(this)h(attribute,)f(the)227 3289
-y(supplied)f(v)-5 b(alue)26 b(is)g(assumed)g(to)g(refer)f(to)h(the)h
-(sp)r(ectral)f(system)g(sp)r(eci\014ed)g(b)n(y)g(the)h(SourceSys)e
-(attribute.)36 b(F)-7 b(or)227 3389 y(instance,)35 b(the)f(SourceV)-7
-b(el)32 b(v)-5 b(alue)33 b(ma)n(y)g(b)r(e)h(supplied)f(as)g(a)g(radio)f
-(v)n(elo)r(cit)n(y)-7 b(,)34 b(a)f(redshift,)i(a)e(b)r(eta)g(factor,)h
-(etc.)227 3488 y(Similarly)-7 b(,)34 b(when)f(the)h(curren)n(t)e(v)-5
-b(alue)32 b(of)h(the)h(SourceV)-7 b(el)32 b(attribute)h(is)g(obtained,)
-h(the)f(returned)g(v)-5 b(alue)32 b(will)227 3588 y(refer)f(to)h(the)g
-(sp)r(ectral)f(system)g(sp)r(eci\014ed)h(b)n(y)f(the)h(SourceSys)e(v)-5
-b(alue.)49 b(If)32 b(the)g(SourceSys)f(v)-5 b(alue)31
-b(is)h(c)n(hanged,)227 3688 y(an)n(y)25 b(v)-5 b(alue)25
-b(previously)f(stored)g(for)h(the)g(SourceV)-7 b(el)25
-b(attribute)g(will)h(b)r(e)f(c)n(hanged)f(automatically)g(from)h(the)h
-(old)227 3787 y(sp)r(ectral)h(system)h(to)f(the)h(new)g(sp)r(ectral)f
-(system.)227 3921 y(When)f(setting)f(a)g(v)-5 b(alue)25
-b(for)f(SourceV)-7 b(el,)25 b(the)h(v)-5 b(alue)25 b(should)g(b)r(e)g
-(supplied)h(in)f(the)h(rest)e(frame)h(sp)r(eci\014ed)g(b)n(y)g(the)227
-4020 y(SourceVRF)f(attribute.)36 b(Lik)n(ewise,)23 b(when)h(getting)g
-(the)g(v)-5 b(alue)23 b(of)h(SourceV)-7 b(el,)24 b(it)g(will)g(b)r(e)h
-(returned)e(in)h(the)g(rest)227 4120 y(frame)j(sp)r(eci\014ed)h(b)n(y)g
-(the)g(SourceVRF)f(attribute.)227 4253 y(The)h(default)g(SourceV)-7
-b(el)27 b(v)-5 b(alue)28 b(is)f(zero.)0 4420 y Fd(T)m(yp)s(e:)227
-4520 y Fj(Floating)g(p)r(oin)n(t.)0 4686 y Fd(Class)k(Applicabilit)m
-(y:)259 4840 y(Sp)s(ecF)-8 b(rame)427 4940 y Fj(All)28
-b(Sp)r(ecF)-7 b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)0
-5119 y Fd(Notes:)340 5419 y Fi(\017)45 b Fj(It)35 b(is)f(imp)r(ortan)n
-(t)f(to)h(set)g(an)g(appropriate)e(v)-5 b(alue)34 b(for)g(SourceVRF)f
-(and)h(SourceSys)f(b)r(efore)h(setting)g(a)427 5519 y(v)-5
-b(alue)27 b(for)f(SourceV)-7 b(el.)36 b(If)27 b(a)f(new)g(v)-5
-b(alue)27 b(is)f(later)g(set)h(for)f(SourceVRF)g(or)f(SourceSys,)h(the)
-h(v)-5 b(alue)26 b(stored)427 5618 y(for)g(SourceV)-7
-b(el)26 b(will)h(sim)n(ultaneously)f(b)r(e)h(c)n(hanged)e(to)i(the)f
-(new)h(standard)f(of)g(rest)g(or)g(sp)r(ectral)g(system.)p
-eop end
-%%Page: 461 471
-TeXDict begin 461 470 bop 3643 52 a FF(461)p 0 351 3780
-12 v 0 483 a Fz(Sp)t(ecOrigin)185 b Fe(The)38 b(zero)g(p)s(oin)m(t)g
-(for)g(Sp)s(ecF)-10 b(rame)38 b(axis)g(v)-7 b(alues)185
-b Fz(Sp)t(ecOrigin)0 680 y Fd(Description:)44 b Fj(This)31
-b(sp)r(eci\014es)g(the)h(origin)e(from)h(whic)n(h)g(all)f(sp)r(ectral)h
-(v)-5 b(alues)31 b(are)f(measured.)46 b(The)31 b(default)h(v)-5
-b(alue)227 780 y(\(zero\))38 b(results)f(in)h(the)g(Sp)r(ecF)-7
-b(rame)37 b(describing)g(absolute)h(sp)r(ectral)f(v)-5
-b(alues)37 b(in)h(the)g(system)g(giv)n(en)f(b)n(y)g(the)227
-879 y(System)e(attribute)f(\(e.g.)56 b(frequency)-7 b(,)36
-b(v)n(elo)r(cit)n(y)-7 b(,)35 b(etc\).)57 b(If)34 b(a)g(Sp)r(ecF)-7
-b(rame)34 b(is)g(to)g(b)r(e)h(used)f(to)g(describ)r(e)g(o\013set)227
-979 y(from)e(some)g(origin,)h(the)g(Sp)r(ecOrigin)e(attribute)i(should)
-f(b)r(e)h(set)f(to)h(hold)f(the)h(required)e(origin)g(v)-5
-b(alue.)52 b(The)227 1079 y(Sp)r(ecOrigin)24 b(v)-5 b(alue)25
-b(stored)f(inside)h(the)g(Sp)r(ecF)-7 b(rame)25 b(structure)f(is)h(mo)r
-(di\014ed)g(whenev)n(er)f(Sp)r(ecF)-7 b(rame)24 b(attribute)227
-1178 y(v)-5 b(alues)27 b(are)g(c)n(hanged)g(so)g(that)g(it)h(refers)f
-(to)h(the)g(original)e(sp)r(ectral)h(p)r(osition.)227
-1307 y(When)22 b(setting)f(a)g(new)g(v)-5 b(alue)21 b(for)f(this)i
-(attribute,)g(the)g(supplied)f(v)-5 b(alue)21 b(is)g(assumed)g(to)g(b)r
-(e)g(in)g(the)h(system,)g(units)227 1406 y(and)e(standard)f(of)h(rest)f
-(describ)r(ed)h(b)n(y)f(the)i(Sp)r(ecF)-7 b(rame.)34
-b(Lik)n(ewise,)21 b(when)f(getting)f(the)i(v)-5 b(alue)19
-b(of)h(this)g(attribute,)227 1506 y(the)26 b(v)-5 b(alue)26
-b(is)g(returned)f(in)h(the)g(system,)g(units)g(and)g(standard)e(of)i
-(rest)f(describ)r(ed)h(b)n(y)f(the)h(Sp)r(ecF)-7 b(rame.)36
-b(If)26 b(an)n(y)227 1606 y(of)j(these)g(attributes)f(are)g(c)n
-(hanged,)g(then)h(an)n(y)f(previously)g(stored)f(Sp)r(ecOrigin)h(v)-5
-b(alue)29 b(will)g(also)f(b)r(e)h(c)n(hanged)227 1705
-y(so)e(that)h(refers)f(to)g(the)h(new)g(system,)f(units)h(or)f
-(standard)g(of)g(rest.)0 1863 y Fd(T)m(yp)s(e:)227 1963
-y Fj(Floating)g(p)r(oin)n(t.)0 2120 y Fd(Class)k(Applicabilit)m(y:)259
-2265 y(Sp)s(ecF)-8 b(rame)427 2365 y Fj(All)28 b(Sp)r(ecF)-7
-b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)p 0 2572
-V 0 2704 a Fz(Sp)t(ecV)-11 b(al)252 b Fe(The)38 b(sp)s(ectral)g(p)s
-(osition)f(at)h(whic)m(h)g(\015ux)h(v)-7 b(alues)39 b(are)1649
-2818 y(measured)3312 2704 y Fz(Sp)t(ecV)-11 b(al)0 2997
-y Fd(Description:)44 b Fj(This)32 b(attribute)g(sp)r(eci\014es)g(the)g
-(sp)r(ectral)g(p)r(osition)g(\(frequency)-7 b(,)33 b(w)n(a)n(v)n
-(elength,)e(etc.\),)j(at)d(whic)n(h)h(the)227 3097 y(v)-5
-b(alues)19 b(describ)r(ed)h(b)n(y)f(the)h(FluxF)-7 b(rame)19
-b(are)f(measured.)33 b(It)20 b(is)f(used)h(when)f(determining)h(the)g
-(Mapping)f(b)r(et)n(w)n(een)227 3196 y(b)r(et)n(w)n(een)28
-b(FluxF)-7 b(rames.)227 3325 y(The)20 b(default)h(v)-5
-b(alue)20 b(and)g(sp)r(ectral)f(system)h(used)g(for)f(this)h(attribute)
-h(are)e(b)r(oth)h(sp)r(eci\014ed)g(when)h(the)f(FluxF)-7
-b(rame)227 3425 y(is)28 b(created.)0 3582 y Fd(T)m(yp)s(e:)227
-3682 y Fj(Floating)f(p)r(oin)n(t.)0 3840 y Fd(Class)k(Applicabilit)m
-(y:)259 3984 y(FluxF)-8 b(rame)427 4084 y Fj(All)28 b(FluxF)-7
-b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)p 0 4291
-V 0 4422 a Fz(StcsArea)731 4423 y Fe(Return)39 b(the)f(Co)s
-(ordinateArea)d(comp)s(onen)m(t)i(when)1134 4538 y(reading)g(an)i
-(STC-S)f(do)s(cumen)m(t?)3256 4422 y Fz(StcsArea)0 4735
-y Fd(Description:)44 b Fj(This)25 b(is)f(a)g(b)r(o)r(olean)g(attribute)
-g(whic)n(h)h(con)n(trols)d(what)j(is)f(returned)g(b)n(y)g(the)h
-(astRead)e(function)i(when)227 4834 y(it)39 b(is)e(used)h(to)g(read)f
-(from)g(an)h(StcsChan.)67 b(If)38 b(StcsArea)f(is)h(set)g(non-zero)e
-(\(the)i(default\),)k(then)c(a)f(Region)227 4934 y(represen)n(ting)24
-b(the)h(STC)g(Co)r(ordinateArea)e(will)i(b)r(e)g(returned)f(b)n(y)h
-(astRead.)35 b(If)25 b(StcsArea)f(is)h(set)g(to)g(zero,)f(then)227
-5034 y(the)k(STC)g(Co)r(ordinateArea)e(will)h(not)h(b)r(e)g(returned.)0
-5191 y Fd(T)m(yp)s(e:)227 5291 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0
-5449 y Fd(Class)k(Applicabilit)m(y:)259 5593 y(StcsChan)427
-5693 y Fj(All)d(StcsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-eop end
-%%Page: 462 472
-TeXDict begin 462 471 bop 0 52 a FF(462)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fd(Notes:)340 652 y Fi(\017)45 b Fj(Other)38 b(attributes)f(suc)n(h)h
-(as)f(StcsCo)r(ords)g(and)g(StcsProps)g(can)g(b)r(e)h(used)g(to)g(sp)r
-(ecify)g(other)f(Ob)5 b(jects)427 752 y(to)35 b(b)r(e)g(returned)f(b)n
-(y)g(astRead.)58 b(If)35 b(more)e(than)i(one)f(of)h(these)g(attributes)
-f(is)h(set)f(non-zero,)h(then)g(the)427 851 y(actual)29
-b(Ob)5 b(ject)29 b(returned)g(b)n(y)f(astRead)h(will)g(b)r(e)h(a)e
-(KeyMap,)h(con)n(taining)f(the)i(requested)e(Ob)5 b(jects.)41
-b(In)427 951 y(this)35 b(case,)g(the)g(Region)f(represen)n(ting)f(the)i
-(STC)g(Co)r(ordinateArea)d(will)j(b)r(e)g(stored)e(in)i(the)g(returned)
-427 1050 y(KeyMap)30 b(using)h(the)h(k)n(ey)e Ft(")p
-Fj(AREA)p Ft(")p Fj(.)46 b(If)32 b(StcsArea)e(is)h(the)h(only)e
-(attribute)h(to)g(b)r(e)h(set)f(non-zero,)f(then)427
-1150 y(the)e(Ob)5 b(ject)28 b(returned)f(b)n(y)g(astRead)g(will)h(b)r
-(e)g(the)g(Co)r(ordinateArea)e(Region)g(itself.)340 1292
-y Fi(\017)45 b Fj(The)30 b(class)e(of)i(Region)e(used)i(to)f(represen)n
-(t)f(the)i(Co)r(ordinateArea)e(for)g(eac)n(h)h(STC-S)g(sub-phrase)g(is)
-g(de-)427 1392 y(termined)34 b(b)n(y)g(the)g(\014rst)f(w)n(ord)g(in)h
-(the)g(sub-phrase)e(\(the)j Ft(")p Fj(sub-phrase)d(iden)n(ti\014er)p
-Ft(")p Fj(\).)55 b(The)33 b(individual)427 1491 y(sub-phrase)27
-b(Regions)g(are)h(com)n(bined)g(in)n(to)f(a)h(single)g(Prism,)f(whic)n
-(h)i(is)f(then)g(simpli\014ed)h(using)f(astSim-)427 1591
-y(plify)g(to)g(form)f(the)h(returned)f(region.)340 1733
-y Fi(\017)45 b Fj(Sub-phrases)20 b(that)h(represen)n(t)f(a)h(single)f
-(v)-5 b(alue)21 b(\()h(that)f(is,)h(ha)n(v)n(e)e(iden)n(ti\014ers)h
-Ft(")p Fj(Time)p Ft(")p Fj(,)h Ft(")p Fj(P)n(osition)p
-Ft(")p Fj(,)e Ft(")p Fj(Sp)r(ec-)427 1832 y(tral)p Ft(")27
-b Fj(or)g Ft(")p Fj(Redshift)p Ft(")g Fj(\))h(are)f(considered)f(to)i
-(b)r(e)g(b)r(e)g(part)f(of)g(the)h(STC)g(Co)r(ordinateArea)e(comp)r
-(onen)n(t.)340 1974 y Fi(\017)45 b Fj(The)21 b(TimeF)-7
-b(rame)20 b(used)h(to)g(represen)n(t)e(a)i(time)g(STC-S)g(sub-phrase)e
-(will)i(ha)n(v)n(e)f(its)h(TimeOrigin)e(attribute)427
-2074 y(set)25 b(to)g(the)g(sub-phrase)e(start)h(time.)37
-b(If)25 b(no)g(start)f(time)h(is)g(sp)r(eci\014ed)g(b)n(y)f(the)h
-(sub-phrase,)f(then)i(the)f(stop)427 2174 y(time)i(will)f(b)r(e)h(used)
-f(instead.)36 b(If)27 b(no)f(stop)g(time)g(is)g(sp)r(eci\014ed)h(b)n(y)
-f(the)g(sub-phrase,)f(then)i(the)f(single)g(time)427
-2273 y(v)-5 b(alue)27 b(sp)r(eci\014ed)g(in)g(the)g(sub-phrase)f(will)h
-(b)r(e)g(used)g(instead.)36 b(Subsequen)n(tly)27 b(clearing)e(the)j
-(TimeOrigin)427 2373 y(attribute)g(\(or)f(setting)h(its)f(v)-5
-b(alue)28 b(to)f(zero\))g(will)h(cause)f(the)h(TimeF)-7
-b(rame)27 b(to)g(reprsen)n(t)g(absolute)g(times.)340
-2515 y Fi(\017)45 b Fj(The)c(Ep)r(o)r(c)n(h)f(attribute)h(for)f(the)h
-(returned)f(Region)g(is)g(set)h(in)g(the)f(same)g(w)n(a)n(y)g(as)g(the)
-h(TimeOrigin)427 2614 y(attribute)28 b(\(see)g(ab)r(o)n(v)n(e\).)p
-0 2832 3780 12 v 0 2964 a Fz(StcsCo)t(ords)172 b Fe(Return)39
-b(the)f(Co)s(ordinates)e(comp)s(onen)m(t)i(when)1134
-3078 y(reading)f(an)i(STC-S)f(do)s(cumen)m(t?)3122 2964
-y Fz(StcsCo)t(ords)0 3285 y Fd(Description:)44 b Fj(This)25
-b(is)f(a)g(b)r(o)r(olean)g(attribute)g(whic)n(h)h(con)n(trols)d(what)j
-(is)f(returned)g(b)n(y)g(the)h(astRead)e(function)i(when)227
-3385 y(it)31 b(is)f(used)g(to)g(read)f(from)h(an)g(StcsChan.)44
-b(If)31 b(StcsCo)r(ords)d(is)i(set)h(non-zero,)e(then)h(a)g(P)n(oin)n
-(tList)f(represen)n(ting)227 3484 y(the)f(STC)g(Co)r(ordinates)e(will)i
-(b)r(e)g(returned)f(b)n(y)h(astRead.)36 b(If)28 b(StcsCo)r(ords)e(is)i
-(set)f(to)h(zero)e(\(the)j(default\),)f(then)227 3584
-y(the)g(STC)g(Co)r(ordinates)e(will)i(not)g(b)r(e)g(returned.)0
-3752 y Fd(T)m(yp)s(e:)227 3851 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0
-4019 y Fd(Class)k(Applicabilit)m(y:)259 4174 y(StcsChan)427
-4273 y Fj(All)d(StcsChans)g(ha)n(v)n(e)e(this)i(attribute.)0
-4453 y Fd(Notes:)340 4754 y Fi(\017)45 b Fj(Other)27
-b(attributes)h(suc)n(h)f(as)h(StcsArea)f(and)g(StcsProps)f(can)i(b)r(e)
-g(used)g(to)f(sp)r(ecify)h(other)f(Ob)5 b(jects)28 b(to)f(b)r(e)427
-4854 y(returned)33 b(b)n(y)g(astRead.)52 b(If)33 b(more)g(than)g(one)f
-(of)h(these)h(attributes)e(is)h(set)g(non-zero,)g(then)h(the)f(actual)
-427 4953 y(Ob)5 b(ject)35 b(returned)f(b)n(y)h(astRead)f(will)h(b)r(e)g
-(a)g(KeyMap,)h(con)n(taining)e(the)h(requested)f(Ob)5
-b(jects.)58 b(In)35 b(this)427 5053 y(case,)25 b(the)h(P)n(oin)n(tList)
-f(represen)n(ting)e(the)j(STC)g(Co)r(ordinates)e(will)i(b)r(e)f(stored)
-g(in)h(the)f(returned)h(KeyMap)427 5153 y(using)31 b(the)g(k)n(ey)e
-Ft(")p Fj(COORDS)p Ft(")p Fj(.)45 b(If)31 b(StcsCo)r(ords)f(is)g(the)h
-(only)f(attribute)h(to)g(b)r(e)g(set)f(non-zero,)g(then)h(the)427
-5252 y(Ob)5 b(ject)28 b(returned)f(b)n(y)g(astRead)g(will)h(b)r(e)g
-(the)g(Co)r(ordinates)e(P)n(oin)n(tList)h(itself.)340
-5394 y Fi(\017)45 b Fj(The)31 b(Co)r(ordinates)f(comp)r(onen)n(t)h(is)g
-(sp)r(eci\014ed)h(b)n(y)e(the)i(additional)f(axis)f(v)-5
-b(alues)31 b(em)n(b)r(edded)g(within)h(the)427 5494 y(b)r(o)r(dy)24
-b(of)f(eac)n(h)g(STC-S)g(sub-phrase)f(that)i(represen)n(ts)e(an)h
-(extended)h(area.)34 b(Sub-phrases)22 b(that)i(represen)n(t)427
-5593 y(a)31 b(single)g(v)-5 b(alue)31 b(\()h(that)g(is,)g(ha)n(v)n(e)e
-(iden)n(ti\014ers)h Ft(")p Fj(Time)p Ft(")p Fj(,)h Ft(")p
-Fj(P)n(osition)p Ft(")p Fj(,)e Ft(")p Fj(Sp)r(ectral)p
-Ft(")g Fj(or)h Ft(")p Fj(Redshift)p Ft(")g Fj(\))h(are)427
-5693 y(not)c(considered)e(to)i(b)r(e)g(b)r(e)g(part)f(of)h(the)g(STC)f
-(Co)r(ordinates)g(comp)r(onen)n(t.)p eop end
-%%Page: 463 473
-TeXDict begin 463 472 bop 3643 52 a FF(463)340 351 y
-Fi(\017)45 b Fj(If)36 b(the)f(STC-S)g(do)r(cumen)n(ts)g(do)r(es)f(not)h
-(con)n(tain)f(a)h(Co)r(ordinates)e(comp)r(onen)n(t,)k(then)e(a)g(NULL)g
-(ob)5 b(ject)427 451 y(p)r(oin)n(ter)32 b(will)g(b)r(e)g(returned)g(b)n
-(y)f(astRead)g(if)i(the)f(Co)r(ordinates)f(comp)r(onen)n(t)g(is)h(the)g
-(only)g(ob)5 b(ject)32 b(b)r(eing)427 551 y(returned.)49
-b(If)33 b(other)e(ob)5 b(jects)31 b(are)g(also)g(b)r(eing)h(returned)f
-(\(see)h(attributes)g(StcsProps)e(and)i(StcsArea\),)427
-650 y(then)24 b(the)f(returned)g(KeyMap)f(will)h(con)n(tain)g(a)f
-Ft(")p Fj(COORDS)p Ft(")g Fj(k)n(ey)h(only)f(if)i(the)f(Co)r(ordinates)
-f(comp)r(onen)n(t)427 750 y(is)28 b(read)e(succesfully)-7
-b(.)340 886 y Fi(\017)45 b Fj(The)21 b(TimeF)-7 b(rame)20
-b(used)h(to)g(represen)n(t)e(a)i(time)g(STC-S)g(sub-phrase)e(will)i(ha)
-n(v)n(e)f(its)h(TimeOrigin)e(attribute)427 985 y(set)25
-b(to)g(the)g(sub-phrase)e(start)h(time.)37 b(If)25 b(no)g(start)f(time)
-h(is)g(sp)r(eci\014ed)g(b)n(y)f(the)h(sub-phrase,)f(then)i(the)f(stop)
-427 1085 y(time)i(will)f(b)r(e)h(used)f(instead.)36 b(If)27
-b(no)f(stop)g(time)g(is)g(sp)r(eci\014ed)h(b)n(y)f(the)g(sub-phrase,)f
-(then)i(the)f(single)g(time)427 1184 y(v)-5 b(alue)27
-b(sp)r(eci\014ed)g(in)g(the)g(sub-phrase)f(will)h(b)r(e)g(used)g
-(instead.)36 b(Subsequen)n(tly)27 b(clearing)e(the)j(TimeOrigin)427
-1284 y(attribute)g(\(or)f(setting)h(its)f(v)-5 b(alue)28
-b(to)f(zero\))g(will)h(cause)f(the)h(TimeF)-7 b(rame)27
-b(to)g(reprsen)n(t)g(absolute)g(times.)340 1420 y Fi(\017)45
-b Fj(The)c(Ep)r(o)r(c)n(h)f(attribute)h(for)f(the)h(returned)f(Region)g
-(is)g(set)h(in)g(the)f(same)g(w)n(a)n(y)g(as)g(the)h(TimeOrigin)427
-1519 y(attribute)28 b(\(see)g(ab)r(o)n(v)n(e\).)p 0 1725
-3780 12 v 0 1856 a Fz(StcsInden)l(t)216 b Fe(Con)m(trols)37
-b(inden)m(tation)f(and)i(line)g(splitting)f(of)1595 1956
-y(output)h(text)3155 1856 y Fz(StcsInden)l(t)0 2151 y
-Fd(Description:)44 b Fj(This)c(attribute)f(con)n(trols)f(ho)n(w)h(the)g
-(STC-S)h(text)f(is)h(written)f(out)g(to)h(the)f(sink)h(function)f(when)
-227 2250 y(writing)30 b(an)g(AST)g(ob)5 b(ject)30 b(to)g(an)g
-(StcsChan.)45 b(If)30 b(it)h(is)f(zero)f(\(the)i(default\))g(the)f(en)n
-(tire)g(STC-S)g(description)g(is)227 2350 y(written)d(out)g(b)n(y)f(a)g
-(single)h(in)n(v)n(o)r(cation)e(of)i(the)g(sink)f(function.)37
-b(The)27 b(text)g(supplied)g(to)g(the)g(sink)f(function)h(will)227
-2449 y(not)i(con)n(tain)f(an)n(y)g(linefeed)h(c)n(haracters,)e(and)i
-(eac)n(h)f(pair)g(of)g(adjacen)n(t)g(w)n(ords)g(will)h(b)r(e)g
-(separated)e(b)n(y)i(a)f(single)227 2549 y(space.)36
-b(The)28 b(text)g(ma)n(y)f(th)n(us)h(b)r(e)g(arbitrarily)d(large)h(and)
-i(the)g(StcsLength)f(attribute)h(is)g(ignored.)227 2677
-y(If)h(StcsInden)n(t)g(is)g(non-zero,)e(then)i(the)g(text)g(is)f
-(written)h(out)f(via)g(m)n(ultiple)h(calls)f(to)h(the)g(sink)f
-(function,)h(eac)n(h)227 2776 y(call)i(corresp)r(onding)f(to)h(a)g
-(single)g Ft(")p Fj(line)p Ft(")g Fj(of)h(text)g(\(although)f(no)g
-(line)h(feed)g(c)n(haracters)d(will)j(b)r(e)g(inserted)f(b)n(y)227
-2876 y(AST\).)e(The)e(complete)h(STC-S)f(description)g(is)h(brok)n(en)e
-(in)n(to)i(lines)f(so)g(that:)340 3146 y Fi(\017)45 b
-Fj(the)28 b(line)g(length)g(sp)r(eci\014ed)g(b)n(y)f(attribute)h
-(StcsLength)f(is)h(not)f(exceeded)340 3281 y Fi(\017)45
-b Fj(eac)n(h)27 b(sub-phrase)f(\(time,)j(space,)e(etc.\))37
-b(starts)27 b(on)g(a)g(new)h(line)340 3417 y Fi(\017)45
-b Fj(eac)n(h)27 b(argumen)n(t)g(in)g(a)h(comp)r(ound)f(spatial)g
-(region)f(starts)h(on)h(a)f(new)g(line)227 3585 y(If)32
-b(this)g(causes)e(a)h(sub-phrase)g(to)g(extend)h(to)f(t)n(w)n(o)g(or)f
-(more)h(lines,)h(then)g(the)g(second)f(and)g(subsequen)n(t)h(lines)227
-3684 y(will)e(b)r(e)f(inden)n(ted)h(b)n(y)f(three)g(spaces)f(compared)h
-(to)g(the)g(\014rst)g(line.)42 b(In)30 b(addition,)g(lines)f(within)h
-(a)f(comp)r(ound)227 3784 y(spatial)34 b(region)f(will)i(ha)n(v)n(e)f
-(extra)f(inden)n(tation)i(to)f(highligh)n(t)g(the)h(nesting)f(pro)r
-(duced)h(b)n(y)f(the)h(paren)n(theses.)227 3884 y(Eac)n(h)27
-b(new)g(lev)n(el)g(of)h(nesting)f(will)h(b)r(e)g(inden)n(ted)g(b)n(y)g
-(a)f(further)g(three)h(spaces.)0 4039 y Fd(T)m(yp)s(e:)227
-4139 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0 4294 y Fd(Class)k
-(Applicabilit)m(y:)259 4436 y(StcsChan)427 4536 y Fj(All)d(StcsChans)g
-(ha)n(v)n(e)e(this)i(attribute.)p 0 4741 V 0 4873 a Fz(StcsLength)541
-b Fe(Con)m(trols)36 b(output)i(line)g(length)540 b Fz(StcsLength)0
-5067 y Fd(Description:)44 b Fj(This)34 b(attribute)h(sp)r(eci\014es)e
-(the)i(maxim)n(um)f(length)g(to)g(use)g(when)g(writing)f(out)i(text)f
-(through)f(the)227 5167 y(sink)28 b(function)h(supplied)f(when)h(the)f
-(StcsChan)g(w)n(as)f(created.)38 b(It)28 b(is)g(ignored)f(if)i(the)f
-(StcsInden)n(t)g(attribute)h(is)227 5267 y(zero)c(\(in)i(whic)n(h)f
-(case)g(the)g(text)h(supplied)f(to)g(the)h(sink)f(function)h(can)f(b)r
-(e)g(of)h(an)n(y)e(length\).)37 b(The)26 b(default)h(v)-5
-b(alue)227 5366 y(is)28 b(70.)227 5494 y(The)36 b(n)n(um)n(b)r(er)f(of)
-g(c)n(haracters)e(in)i(eac)n(h)g(string)f(written)i(out)f(through)g
-(the)g(sink)g(function)h(will)g(not)f(usually)227 5593
-y(b)r(e)c(greater)e(than)i(the)h(v)-5 b(alue)30 b(of)h(this)g
-(attribute)g(\(but)h(ma)n(y)e(b)r(e)h(less\).)46 b(Ho)n(w)n(ev)n(er,)30
-b(if)h(an)n(y)f(single)g(w)n(ord)g(in)h(the)227 5693
-y(STC-S)d(description)f(exceeds)g(the)h(sp)r(eci\014ed)g(length,)f
-(then)h(the)g(w)n(ord)f(will)h(b)r(e)g(written)g(out)f(as)g(a)g(single)
-g(line.)p eop end
-%%Page: 464 474
-TeXDict begin 464 473 bop 0 52 a FF(464)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fd(T)m(yp)s(e:)227 451 y Fj(In)n(teger.)0 611 y Fd(Class)g
-(Applicabilit)m(y:)259 758 y(StcsChan)427 858 y Fj(All)d(StcsChans)g
-(ha)n(v)n(e)e(this)i(attribute.)p 0 1068 3780 12 v 0
-1198 a Fz(StcsProps)912 1199 y Fe(Return)38 b(all)f(prop)s(erties)h
-(when)g(reading)f(an)1423 1314 y(STC-S)h(do)s(cumen)m(t?)3198
-1198 y Fz(StcsProps)0 1490 y Fd(Description:)44 b Fj(This)25
-b(is)f(a)g(b)r(o)r(olean)g(attribute)g(whic)n(h)h(con)n(trols)d(what)j
-(is)f(returned)g(b)n(y)g(the)h(astRead)e(function)i(when)227
-1590 y(it)32 b(is)f(used)g(to)g(read)g(from)f(an)h(StcsChan.)48
-b(If)31 b(StcsProps)f(is)h(set)g(non-zero,)g(then)h(a)e(KeyMap)h(con)n
-(taining)f(all)227 1689 y(the)f(prop)r(erties)f(read)f(from)h(the)h
-(STC-S)f(do)r(cumen)n(t)h(will)g(b)r(e)f(returned)g(b)n(y)h(astRead.)38
-b(If)29 b(StcsProps)e(is)h(set)h(to)227 1789 y(zero)e(\(the)h
-(default\),)g(then)h(the)f(prop)r(erties)e(will)i(not)g(b)r(e)g
-(returned.)0 1949 y Fd(T)m(yp)s(e:)227 2049 y Fj(In)n(teger)f(\(b)r(o)r
-(olean\).)0 2209 y Fd(Class)k(Applicabilit)m(y:)259 2356
-y(StcsChan)427 2455 y Fj(All)d(StcsChans)g(ha)n(v)n(e)e(this)i
-(attribute.)0 2628 y Fd(Notes:)340 2921 y Fi(\017)45
-b Fj(Other)32 b(attributes)h(suc)n(h)f(as)f(StcsCo)r(ords)h(and)g
-(StcsArea)g(can)g(b)r(e)g(used)h(to)f(sp)r(ecify)h(other)f(Ob)5
-b(jects)32 b(to)427 3021 y(b)r(e)27 b(returned)f(b)n(y)g(astRead.)36
-b(If)26 b(more)g(than)g(one)g(of)h(these)f(attributes)g(is)g(set)h
-(non-zero,)e(then)h(the)h(actual)427 3120 y(Ob)5 b(ject)23
-b(returned)f(b)n(y)h(astRead)f(will)g(b)r(e)i(a)e(KeyMap)g(con)n
-(taining)f(the)j(requested)e(Ob)5 b(jects.)34 b(In)23
-b(this)g(case,)427 3220 y(the)32 b(prop)r(erties)e(KeyMap)g(will)h(b)r
-(e)g(stored)f(in)h(the)h(returned)e(KeyMap)g(using)h(the)g(k)n(ey)g
-Ft(")p Fj(PR)n(OPS)p Ft(")p Fj(.)44 b(If)427 3320 y(StcsProps)26
-b(is)h(the)h(only)f(attribute)g(to)h(b)r(e)f(set)h(non-zero,)d(then)j
-(the)g(Ob)5 b(ject)27 b(returned)g(b)n(y)g(astRead)f(will)427
-3419 y(b)r(e)i(the)g(prop)r(erties)f(KeyMap)g(itself.)340
-3557 y Fi(\017)45 b Fj(The)24 b(KeyMap)e(con)n(taining)h(the)h(prop)r
-(erties)e(will)i(ha)n(v)n(e)e(en)n(tries)h(for)g(one)g(or)g(more)g(of)g
-(the)h(follo)n(wing)e(k)n(eys:)427 3657 y Ft(")p Fj(TIME)p
-Ft(_)p Fj(PR)n(OPS)p Ft(")p Fj(,)k Ft(")p Fj(SP)-7 b(A)n(CE)p
-Ft(_)p Fj(PR)n(OPS)p Ft(")p Fj(,)25 b Ft(")p Fj(SPECTRAL)p
-Ft(_)p Fj(PR)n(OPS)p Ft(")g Fj(and)j Ft(")p Fj(REDSHIFT)p
-Ft(_)p Fj(PR)n(OPS)p Ft(")p Fj(.)427 3757 y(Eac)n(h)d(of)h(these)g(en)n
-(tries)g(will)g(b)r(e)h(another)e(KeyMap)g(con)n(taining)g(the)i(prop)r
-(erties)e(of)h(the)h(corresp)r(onding)427 3856 y(STC-S)h(sub-phrase.)p
-0 4066 V 0 4198 a Fz(StdOfRest)865 b Fe(Standard)37 b(of)h(rest)864
-b Fz(StdOfRest)0 4374 y Fd(Description:)44 b Fj(This)19
-b(attribute)f(iden)n(ti\014es)h(the)f(standard)g(of)g(rest)g(to)g(whic)
-n(h)h(the)f(sp)r(ectral)g(axis)g(v)-5 b(alues)18 b(of)g(a)g(Sp)r(ecF)-7
-b(rame)227 4474 y(refer,)27 b(and)h(ma)n(y)f(tak)n(e)f(an)n(y)h(of)h
-(the)g(v)-5 b(alues)27 b(listed)h(in)g(the)g Ft(")p Fj(Standards)e(of)i
-(Rest)p Ft(")f Fj(section)g(\(b)r(elo)n(w\).)227 4604
-y(The)h(default)g(StdOfRest)g(v)-5 b(alue)28 b(is)f Ft(")p
-Fj(Helio)p Ft(")p Fj(.)0 4764 y Fd(T)m(yp)s(e:)227 4863
-y Fj(String.)0 5023 y Fd(Class)k(Applicabilit)m(y:)259
-5170 y(Sp)s(ecF)-8 b(rame)427 5270 y Fj(All)28 b(Sp)r(ecF)-7
-b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)-2 5443 y
-Fd(Standards)33 b(of)f(Rest)n(:)227 5589 y Fj(The)c(Sp)r(ecF)-7
-b(rame)27 b(class)g(supp)r(orts)g(the)h(follo)n(wing)f(StdOfRest)h(v)-5
-b(alues)27 b(\(all)h(are)e(case-insensitiv)n(e\):)p eop
-end
-%%Page: 465 475
-TeXDict begin 465 474 bop 3643 52 a FF(465)340 351 y
-Fi(\017)45 b Ft(")p Fj(T)-7 b(op)r(o)r(cen)n(tric)p Ft(")p
-Fj(,)43 b Ft(")p Fj(T)-7 b(op)r(o)r(cen)n(t)p Ft(")40
-b Fj(or)g Ft(")p Fj(T)-7 b(op)r(o)p Ft(")p Fj(:)62 b(The)41
-b(observ)n(ers)d(rest-frame)i(\(assumed)h(to)f(b)r(e)i(on)e(the)427
-451 y(surface)30 b(of)g(the)g(earth\).)45 b(Sp)r(ectra)30
-b(recorded)e(in)j(this)f(standard)f(of)h(rest)g(su\013er)g(a)g(Doppler)
-g(shift)h(whic)n(h)427 551 y(v)-5 b(aries)26 b(o)n(v)n(er)g(the)h
-(course)f(of)h(a)g(da)n(y)f(b)r(ecause)h(of)g(the)g(rotation)f(of)h
-(the)h(observ)n(er)c(around)i(the)i(axis)e(of)h(the)427
-650 y(earth.)52 b(This)32 b(standard)g(of)g(rest)g(m)n(ust)h(b)r(e)g
-(quali\014ed)g(using)f(the)h(ObsLat,)g(ObsLon,)g(ObsAlt,)h(Ep)r(o)r(c)n
-(h,)427 750 y(RefRA)29 b(and)e(RefDec)h(attributes.)340
-875 y Fi(\017)45 b Ft(")p Fj(Geo)r(cen)n(tric)p Ft(")p
-Fj(,)25 b Ft(")p Fj(Geo)r(cen)n(tr)p Ft(")g Fj(or)g Ft(")p
-Fj(Geo)p Ft(")p Fj(:)34 b(The)26 b(rest-frame)f(of)h(the)g(earth)f(cen)
-n(tre.)36 b(Sp)r(ectra)26 b(recorded)e(in)427 975 y(this)30
-b(standard)e(of)h(rest)f(su\013er)h(a)g(Doppler)g(shift)g(whic)n(h)g(v)
--5 b(aries)28 b(o)n(v)n(er)g(the)h(course)f(of)h(a)f(y)n(ear)g(b)r
-(ecause)h(of)427 1075 y(the)h(rotation)f(of)g(the)h(earth)f(around)f
-(the)i(Sun.)44 b(This)29 b(standard)g(of)g(rest)g(m)n(ust)h(b)r(e)g
-(quali\014ed)f(using)g(the)427 1174 y(Ep)r(o)r(c)n(h,)e(RefRA)i(and)e
-(RefDec)i(attributes.)340 1300 y Fi(\017)45 b Ft(")p
-Fj(Barycen)n(tric)p Ft(")p Fj(,)19 b Ft(")p Fj(Barycen)n(t)p
-Ft(")f Fj(or)g Ft(")p Fj(Bary)p Ft(")p Fj(:)31 b(The)20
-b(rest-frame)f(of)g(the)i(solar-system)c(barycen)n(tre.)33
-b(Sp)r(ectra)427 1399 y(recorded)24 b(in)i(this)g(standard)f(of)g(rest)
-h(su\013er)f(a)g(Doppler)h(shift)g(whic)n(h)f(dep)r(ends)i(b)r(oth)f
-(on)f(the)h(v)n(elo)r(cit)n(y)f(of)427 1499 y(the)e(Sun)h(through)e
-(the)h(Lo)r(cal)f(Standard)g(of)h(Rest,)h(and)e(on)h(the)g(mo)n(v)n
-(emen)n(t)f(of)g(the)i(planets)e(through)g(the)427 1599
-y(solar)30 b(system.)48 b(This)32 b(standard)e(of)i(rest)f(m)n(ust)g(b)
-r(e)h(quali\014ed)f(using)g(the)h(Ep)r(o)r(c)n(h,)g(RefRA)h(and)e
-(RefDec)427 1698 y(attributes.)340 1824 y Fi(\017)45
-b Ft(")p Fj(Helio)r(cen)n(tric)p Ft(")p Fj(,)31 b Ft(")p
-Fj(Helio)r(cen)p Ft(")f Fj(or)g Ft(")p Fj(Helio)p Ft(")p
-Fj(:)43 b(The)31 b(rest-frame)e(of)i(the)h(Sun.)47 b(Sp)r(ectra)31
-b(recorded)e(in)i(this)427 1923 y(standard)c(of)g(rest)g(su\013er)g(a)f
-(Doppler)h(shift)h(whic)n(h)g(dep)r(ends)f(on)g(the)h(v)n(elo)r(cit)n
-(y)e(of)h(the)h(Sun)g(through)e(the)427 2023 y(Lo)r(cal)d(Standard)h
-(of)g(Rest.)35 b(This)24 b(standard)f(of)h(rest)g(m)n(ust)g(b)r(e)g
-(quali\014ed)g(using)f(the)h(RefRA)h(and)f(RefDec)427
-2123 y(attributes.)340 2248 y Fi(\017)45 b Ft(")p Fj(LSRK)p
-Ft(")p Fj(,)21 b Ft(")p Fj(LSR)p Ft(")p Fj(:)33 b(The)20
-b(rest-frame)f(of)h(the)h(kinematical)e(Lo)r(cal)h(Standard)f(of)i
-(Rest.)34 b(Sp)r(ectra)20 b(recorded)427 2348 y(in)j(this)f(standard)f
-(of)i(rest)e(su\013er)h(a)g(Doppler)g(shift)h(whic)n(h)f(dep)r(ends)h
-(on)e(the)i(v)n(elo)r(cit)n(y)e(of)i(the)f(kinematical)427
-2447 y(Lo)r(cal)i(Standard)g(of)h(Rest)g(through)f(the)h(galaxy)-7
-b(.)34 b(This)25 b(standard)f(of)g(rest)g(m)n(ust)h(b)r(e)g
-(quali\014ed)g(using)f(the)427 2547 y(RefRA)29 b(and)e(RefDec)h
-(attributes.)340 2672 y Fi(\017)45 b Ft(")p Fj(LSRD)p
-Ft(")p Fj(:)38 b(The)28 b(rest-frame)f(of)h(the)g(dynamical)g(Lo)r(cal)
-f(Standard)g(of)h(Rest.)39 b(Sp)r(ectra)27 b(recorded)g(in)h(this)427
-2772 y(standard)e(of)i(rest)e(su\013er)h(a)g(Doppler)g(shift)h(whic)n
-(h)f(dep)r(ends)g(on)g(the)h(v)n(elo)r(cit)n(y)e(of)h(the)h(dynamical)e
-(Lo)r(cal)427 2872 y(Standard)21 b(of)g(Rest)g(through)g(the)h(galaxy)
--7 b(.)33 b(This)21 b(standard)f(of)h(rest)g(m)n(ust)h(b)r(e)f
-(quali\014ed)g(using)g(the)h(RefRA)427 2971 y(and)28
-b(RefDec)g(attributes.)340 3097 y Fi(\017)45 b Ft(")p
-Fj(Galactic)p Ft(")p Fj(,)35 b Ft(")p Fj(Galacto)r(c)p
-Ft(")e Fj(or)h Ft(")p Fj(Gal)p Ft(")p Fj(:)50 b(The)35
-b(rest-frame)e(of)i(the)g(galactic)e(cen)n(tre.)58 b(Sp)r(ectra)34
-b(recorded)427 3196 y(in)e(this)f(standard)f(of)h(rest)f(su\013er)h(a)g
-(Doppler)f(shift)i(whic)n(h)f(dep)r(ends)g(on)g(the)g(v)n(elo)r(cit)n
-(y)f(of)h(the)h(galactic)427 3296 y(cen)n(tre)25 b(through)g(the)h(lo)r
-(cal)f(group.)35 b(This)25 b(standard)g(of)g(rest)g(m)n(ust)h(b)r(e)g
-(quali\014ed)f(using)h(the)f(RefRA)i(and)427 3396 y(RefDec)i
-(attributes.)340 3521 y Fi(\017)45 b Ft(")p Fj(Lo)r(cal)p
-Ft(_)p Fj(group)p Ft(")p Fj(,)33 b Ft(")p Fj(Lo)r(calgrp)p
-Ft(")e Fj(or)i Ft(")p Fj(LG)p Ft(")p Fj(:)49 b(The)34
-b(rest-frame)f(of)h(the)g(lo)r(cal)g(group.)55 b(This)34
-b(standard)f(of)427 3621 y(rest)27 b(m)n(ust)h(b)r(e)g(quali\014ed)g
-(using)f(the)h(RefRA)g(and)g(RefDec)g(attributes.)340
-3746 y Fi(\017)45 b Ft(")p Fj(Source)p Ft(")p Fj(,)35
-b(or)e Ft(")p Fj(src)p Ft(")p Fj(:)49 b(The)34 b(rest-frame)f(of)h(the)
-h(source.)55 b(This)35 b(standard)e(of)h(rest)g(m)n(ust)g(b)r(e)h
-(quali\014ed)427 3846 y(using)28 b(the)f(RefRA,)i(RefDec)f(and)g
-(SourceV)-7 b(el)27 b(attributes.)227 4001 y(Where)i(more)f(than)h(one)
-f(alternativ)n(e)g(System)h(v)-5 b(alue)29 b(is)f(sho)n(wn)g(ab)r(o)n
-(v)n(e,)g(the)h(\014rst)g(of)g(these)g(will)g(b)r(e)g(returned)227
-4100 y(when)f(an)f(enquiry)g(is)h(made.)p 0 4285 3780
-12 v 0 4416 a Fz(Strict)322 b Fe(Rep)s(ort)38 b(an)h(error)e(if)h(an)m
-(y)g(unexp)s(eted)h(data)f(items)f(are)1717 4531 y(found?)3448
-4416 y Fz(Strict)0 4682 y Fd(Description:)44 b Fj(This)24
-b(is)f(a)g(b)r(o)r(olean)f(attribute)i(whic)n(h)f(indicates)g(whether)g
-(a)g(w)n(arning)f(rather)g(than)i(an)f(error)e(should)227
-4782 y(b)r(e)37 b(issed)e(for)h(insigni\014can)n(t)f(con)n(v)n(ersion)f
-(problems.)61 b(If)36 b(it)h(is)e(set)h(non-zero,)h(then)f(fatal)g
-(errors)e(are)h(issued)227 4881 y(instead)g(of)g(w)n(arnings,)g
-(resulting)f(in)h(the)g(AST)h(error)c(status)j(b)r(eing)g(set.)59
-b(If)35 b(Strict)g(is)g(zero)e(\(the)j(default\),)227
-4981 y(then)28 b(execution)f(con)n(tin)n(ues)g(after)g(minor)g(con)n(v)
-n(ersion)e(problems,)h(and)i(a)f(w)n(arning)f(message)f(is)j(added)f
-(to)g(the)227 5080 y(Channel)h(structure.)36 b(Suc)n(h)28
-b(messages)e(can)h(b)r(e)h(retriev)n(ed)e(using)i(the)f(astW)-7
-b(arnings)27 b(function.)0 5223 y Fd(T)m(yp)s(e:)227
-5322 y Fj(In)n(teger)g(\(b)r(o)r(olean\).)0 5464 y Fd(Class)k
-(Applicabilit)m(y:)259 5593 y(Channel)427 5693 y Fj(All)d(Channels)g
-(ha)n(v)n(e)e(this)i(attribute.)p eop end
-%%Page: 466 476
-TeXDict begin 466 475 bop 0 52 a FF(466)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fd(Notes:)340 627 y Fi(\017)45 b Fj(This)30 b(attribute)g(w)n(as)f(in)n
-(tro)r(duced)g(in)i(AST)f(v)n(ersion)e(5.0.)43 b(Prior)28
-b(to)i(this)g(v)n(ersion)e(of)i(AST)g(unexp)r(ected)427
-727 y(data)g(items)h(read)f(b)n(y)h(a)f(basic)g(Channel)h(alw)n(a)n(ys)
-e(caused)h(an)g(error)f(to)h(b)r(e)i(rep)r(orted.)45
-b(So)31 b(applications)427 827 y(link)n(ed)21 b(against)e(v)n(ersions)g
-(of)i(AST)g(prior)e(to)i(v)n(ersion)e(5.0)h(ma)n(y)g(not)g(b)r(e)h
-(able)g(to)f(read)g(Ob)5 b(ject)20 b(descriptions)427
-926 y(created)27 b(b)n(y)g(later)g(v)n(ersions)f(of)i(AST,)g(if)g(the)g
-(Ob)5 b(ject's)27 b(class)g(description)g(has)g(c)n(hanged.)p
-0 1113 3780 12 v 0 1251 a Fz(St)l(yle\(elemen)l(t\))1159
-1244 y Fe(Line)39 b(st)m(yle)f(for)g(a)g(Plot)g(elemen)m(t)2925
-1251 y Fz(St)l(yle\(elemen)l(t\))0 1434 y Fd(Description:)44
-b Fj(This)39 b(attribute)f(determines)g(the)h(line)g(st)n(yle)f(used)g
-(when)h(dra)n(wing)e(eac)n(h)g(elemen)n(t)i(of)f(graphical)227
-1533 y(output)i(pro)r(duced)g(b)n(y)f(a)h(Plot.)72 b(It)40
-b(tak)n(es)f(a)g(separate)f(v)-5 b(alue)40 b(for)f(eac)n(h)g(graphical)
-f(elemen)n(t)i(so)f(that,)k(for)227 1633 y(instance,)f(the)e(setting)f
-Ft(")p Fj(St)n(yle\(b)r(order\)=2)p Ft(")e Fj(causes)i(the)g(Plot)g(b)r
-(order)f(to)i(b)r(e)f(dra)n(wn)g(using)g(line)g(st)n(yle)g(2)227
-1733 y(\(whic)n(h)28 b(migh)n(t)g(result)f(in,)h(sa)n(y)-7
-b(,)26 b(a)i(dashed)f(line\).)227 1854 y(The)35 b(range)f(of)h(in)n
-(teger)f(line)h(st)n(yles)g(a)n(v)-5 b(ailable)33 b(and)i(their)g(app)r
-(earance)f(is)h(determined)g(b)n(y)g(the)g(underlying)227
-1954 y(graphics)25 b(system.)36 b(The)26 b(default)h(b)r(eha)n(viour)e
-(is)h(for)f(all)h(graphical)e(elemen)n(ts)i(to)g(b)r(e)h(dra)n(wn)e
-(using)h(the)g(default)227 2053 y(line)i(st)n(yle)f(supplied)h(b)n(y)g
-(this)f(graphics)g(system)g(\(normally)-7 b(,)27 b(this)h(is)f(lik)n
-(ely)g(to)h(giv)n(e)e(a)i(solid)f(line\).)0 2196 y Fd(T)m(yp)s(e:)227
-2296 y Fj(In)n(teger.)0 2439 y Fd(Class)k(Applicabilit)m(y:)259
-2569 y(Plot)427 2669 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)
-0 2824 y Fd(Notes:)340 3100 y Fi(\017)45 b Fj(F)-7 b(or)27
-b(a)g(list)h(of)g(the)g(graphical)e(elemen)n(ts)h(a)n(v)-5
-b(ailable,)27 b(see)g(the)h(description)f(of)g(the)h(Plot)f(class.)340
-3227 y Fi(\017)45 b Fj(If)33 b(no)f(graphical)f(elemen)n(t)i(is)f(sp)r
-(eci\014ed,)j(\(e.g.)51 b Ft(")p Fj(St)n(yle)p Ft(")32
-b Fj(instead)g(of)g Ft(")p Fj(St)n(yle\(b)r(order\))p
-Ft(")p Fj(\),)h(then)g(a)f Ft(")p Fj(set)p Ft(")427 3326
-y Fj(or)26 b Ft(")p Fj(clear)p Ft(")f Fj(op)r(eration)h(will)g
-(a\013ect)h(the)g(attribute)g(v)-5 b(alue)27 b(of)f(all)h(graphical)e
-(elemen)n(ts,)i(while)g(a)f Ft(")p Fj(get)p Ft(")f Fj(or)427
-3426 y Ft(")p Fj(test)p Ft(")i Fj(op)r(eration)g(will)h(use)f(just)h
-(the)g(St)n(yle\(Border\))f(v)-5 b(alue.)p 0 3612 V 0
-3751 a Fz(Sym)l(b)t(ol\(axis\))1575 3744 y Fe(Axis)39
-b(sym)m(b)s(ol)3011 3751 y Fz(Sym)l(b)t(ol\(axis\))0
-3933 y Fd(Description:)44 b Fj(This)37 b(attribute)g(sp)r(eci\014es)g
-(a)f(short-form)g(sym)n(b)r(ol)g(to)h(b)r(e)g(used)g(to)g(represen)n(t)
-e(co)r(ordinate)h(v)-5 b(alues)227 4033 y(for)32 b(a)f(particular)g
-(axis)g(of)h(a)f(F)-7 b(rame.)49 b(This)32 b(migh)n(t)g(b)r(e)g(used)g
-(\(e.g.\))50 b(in)32 b(algebraic)e(expressions)g(where)h(a)h(full)227
-4133 y(description)37 b(of)g(the)g(axis)f(w)n(ould)g(b)r(e)i
-(inappropriate.)63 b(Examples)36 b(include)h Ft(")p Fj(RA)p
-Ft(")g Fj(and)g Ft(")p Fj(Dec)p Ft(")f Fj(\(for)h(Righ)n(t)227
-4232 y(Ascension)27 b(and)h(Declination\).)227 4353 y(If)g(a)f(Sym)n(b)
-r(ol)h(v)-5 b(alue)27 b(has)h(not)f(b)r(een)h(set)g(for)f(a)g(F)-7
-b(rame)27 b(axis,)g(then)h(a)f(suitable)h(default)g(is)f(supplied.)0
-4497 y Fd(T)m(yp)s(e:)227 4596 y Fj(String.)0 4739 y
-Fd(Class)k(Applicabilit)m(y:)259 4869 y(F)-8 b(rame)427
-4969 y Fj(The)24 b(default)h(Sym)n(b)r(ol)e(v)-5 b(alue)24
-b(supplied)g(b)n(y)g(the)g(F)-7 b(rame)24 b(class)f(is)g(the)i(string)e
-Ft(")p Fl(<)p Fj(Domain)p Fl(><)p Fj(n)p Fl(>)p Ft(")p
-Fj(,)f(where)427 5068 y Fl(<)p Fj(n)p Fl(>)34 b Fj(is)g(1,)h(2,)g(etc.)
-57 b(for)33 b(successiv)n(e)g(axes,)i(and)f Fl(<)p Fj(Domain)p
-Fl(>)f Fj(is)h(the)g(v)-5 b(alue)34 b(of)g(the)g(F)-7
-b(rame's)34 b(Domain)427 5168 y(attribute)25 b(\(truncated)g(if)h
-(necessary)d(so)h(that)h(the)g(\014nal)g(string)f(do)r(es)h(not)f
-(exceed)h(15)f(c)n(haracters\).)34 b(If)25 b(no)427 5268
-y(Domain)j(v)-5 b(alue)29 b(has)e(b)r(een)i(set,)f Ft(")p
-Fj(x)p Ft(")g Fj(is)g(used)g(as)g(the)g Fl(<)p Fj(Domain)p
-Fl(>)g Fj(v)-5 b(alue)28 b(in)g(constructing)g(this)g(default)427
-5367 y(string.)259 5494 y Fd(SkyF)-8 b(rame)427 5593
-y Fj(The)30 b(SkyF)-7 b(rame)29 b(class)g(re-de\014nes)g(the)i(default)
-f(Sym)n(b)r(ol)g(v)-5 b(alue)30 b(\(e.g.)44 b(to)29 b
-Ft(")p Fj(RA)p Ft(")h Fj(or)f Ft(")p Fj(Dec)p Ft(")p
-Fj(\))h(as)f(appro-)427 5693 y(priate)e(for)g(the)h(particular)f
-(celestial)g(co)r(ordinate)f(system)i(b)r(eing)f(represen)n(ted.)p
-eop end
-%%Page: 467 477
-TeXDict begin 467 476 bop 3643 52 a FF(467)259 351 y
-Fd(TimeF)-8 b(rame)427 451 y Fj(The)33 b(TimeF)-7 b(rame)33
-b(class)f(re-de\014nes)g(the)h(default)g(Sym)n(b)r(ol)g(v)-5
-b(alue)33 b(as)f(appropriate)f(for)i(the)g(particular)427
-551 y(time)28 b(system)g(b)r(eing)f(represen)n(ted.)259
-684 y Fd(F)-8 b(rameSet)427 783 y Fj(The)23 b(Sym)n(b)r(ol)g(attribute)
-g(of)g(a)f(F)-7 b(rameSet)23 b(axis)f(is)g(the)h(same)g(as)f(that)h(of)
-g(its)g(curren)n(t)f(F)-7 b(rame)22 b(\(as)g(sp)r(eci\014ed)427
-883 y(b)n(y)28 b(the)g(Curren)n(t)e(attribute\).)0 1046
-y Fd(Notes:)340 1329 y Fi(\017)45 b Fj(When)36 b(sp)r(ecifying)f(this)h
-(attribute)f(b)n(y)g(name,)i(it)f(should)f(b)r(e)h(subscripted)f(with)g
-(the)h(n)n(um)n(b)r(er)f(of)g(the)427 1429 y(F)-7 b(rame)27
-b(axis)g(to)h(whic)n(h)f(it)h(applies.)p 0 1629 3780
-12 v 0 1759 a Fz(System)733 1760 y Fe(Co)s(ordinate)37
-b(system)h(used)h(to)f(describ)s(e)h(p)s(ositions)1418
-1875 y(within)e(the)i(domain)3355 1759 y Fz(System)0
-2041 y Fd(Description:)44 b Fj(In)25 b(general)e(it)i(is)f(p)r(ossible)
-g(for)g(p)r(ositions)g(within)h(a)f(giv)n(en)g(ph)n(ysical)g(domain)g
-(to)g(b)r(e)h(describ)r(ed)f(using)227 2141 y(one)38
-b(of)g(sev)n(eral)f(di\013eren)n(t)h(co)r(ordinate)f(systems.)68
-b(F)-7 b(or)38 b(instance,)j(the)d(SkyF)-7 b(rame)38
-b(class)f(can)h(use)g(galactic)227 2240 y(co)r(ordinates,)f(equatorial)
-e(co)r(ordinates,)h(etc,)j(to)d(describ)r(e)g(p)r(ositions)f(on)h(the)h
-(sky)-7 b(.)62 b(As)36 b(another)f(example,)227 2340
-y(the)j(Sp)r(ecF)-7 b(rame)37 b(class)f(can)g(use)h(frequency)-7
-b(,)39 b(w)n(a)n(v)n(elength,)f(v)n(elo)r(cit)n(y)-7
-b(,)39 b(etc,)h(to)d(describ)r(e)f(a)h(p)r(osition)g(within)227
-2440 y(an)f(electromagnetic)f(sp)r(ectrum.)64 b(The)36
-b(System)h(attribute)f(iden)n(ti\014es)h(the)g(particular)e(co)r
-(ordinate)g(system)227 2539 y(represen)n(ted)29 b(b)n(y)g(a)g(F)-7
-b(rame.)42 b(Eac)n(h)28 b(class)h(of)g(F)-7 b(rame)29
-b(de\014nes)h(a)f(set)g(of)h(acceptable)e(v)-5 b(alues)30
-b(for)f(this)g(attribute,)227 2639 y(as)e(listed)h(b)r(elo)n(w)e(\(all)
-i(are)e(case)h(insensitiv)n(e\).)36 b(Where)27 b(more)g(than)g(one)g
-(alternativ)n(e)f(System)i(v)-5 b(alue)27 b(is)g(sho)n(wn,)227
-2739 y(the)h(\014rst)g(of)f(will)h(b)r(e)g(returned)f(when)h(an)f
-(enquiry)g(is)h(made.)0 2889 y Fd(T)m(yp)s(e:)227 2988
-y Fj(String.)0 3139 y Fd(Class)j(Applicabilit)m(y:)259
-3276 y(F)-8 b(rame)427 3376 y Fj(The)28 b(System)g(attribute)f(for)h(a)
-f(basic)g(F)-7 b(rame)27 b(alw)n(a)n(ys)e(equals)i Ft(")p
-Fj(Cartesian)p Ft(")p Fj(,)f(and)h(ma)n(y)g(not)h(b)r(e)g(altered.)259
-3509 y Fd(CmpF)-8 b(rame)427 3608 y Fj(The)27 b(System)g(attribute)f
-(for)g(a)h(CmpF)-7 b(rame)26 b(alw)n(a)n(ys)f(equals)g
-Ft(")p Fj(Comp)r(ound)p Ft(")p Fj(,)h(and)h(ma)n(y)f(not)g(b)r(e)h
-(altered.)427 3708 y(In)21 b(addition,)g(the)g(CmpF)-7
-b(rame)20 b(class)f(allo)n(ws)g(the)i(System)f(attribute)g(to)g(b)r(e)h
-(referenced)e(for)h(a)g(comp)r(onen)n(t)427 3808 y(F)-7
-b(rame)25 b(b)n(y)g(including)h(the)g(index)f(of)g(an)g(axis)g(within)h
-(the)g(required)e(comp)r(onen)n(t)h(F)-7 b(rame.)36 b(F)-7
-b(or)25 b(instance,)427 3907 y Ft(")p Fj(System\(3\))p
-Ft(")h Fj(refers)g(to)g(the)h(System)f(attribute)h(of)f(the)h(comp)r
-(onen)n(t)f(F)-7 b(rame)26 b(whic)n(h)g(includes)h(axis)f(3)g(of)427
-4007 y(the)i(CmpF)-7 b(rame.)259 4140 y Fd(F)f(rameSet)427
-4240 y Fj(The)27 b(System)f(attribute)h(of)f(a)h(F)-7
-b(rameSet)26 b(is)g(the)h(same)f(as)g(that)g(of)h(its)g(curren)n(t)e(F)
--7 b(rame)26 b(\(as)g(sp)r(eci\014ed)h(b)n(y)427 4339
-y(the)h(Curren)n(t)f(attribute\).)259 4473 y Fd(SkyF)-8
-b(rame)427 4572 y Fj(The)26 b(SkyF)-7 b(rame)25 b(class)f(supp)r(orts)h
-(the)h(follo)n(wing)e(System)i(v)-5 b(alues)25 b(and)h(asso)r(ciated)e
-(celestial)h(co)r(ordinate)427 4672 y(systems:)510 4896
-y Fi(\017)45 b Ft(")p Fj(AZEL)p Ft(")p Fj(:)33 b(Horizon)20
-b(co)r(ordinates.)34 b(The)21 b(longitude)g(axis)g(is)g(azim)n(uth)h
-(suc)n(h)f(that)h(geographic)d(north)597 4996 y(has)j(an)g(azim)n(uth)g
-(of)h(zero)e(and)h(geographic)e(east)i(has)g(an)g(azim)n(uth)g(of)g
-(+PI/2)f(radians.)34 b(The)22 b(zenith)597 5095 y(has)f(elev)-5
-b(ation)21 b(+PI/2.)33 b(When)21 b(con)n(v)n(erting)f(to)h(and)g(from)g
-(other)f(celestial)h(co)r(ordinate)f(systems,)i(no)597
-5195 y(corrections)g(are)h(applied)h(for)g(atmospheric)f(refraction)g
-(or)g(p)r(olar)g(motion)h(\(ho)n(w)n(ev)n(er,)f(a)g(correction)597
-5295 y(for)28 b(diurnal)g(ab)r(erattion)g(is)g(applied\).)40
-b(Note,)29 b(unlik)n(e)f(most)h(other)f(celestial)g(co)r(ordinate)f
-(systems,)597 5394 y(this)38 b(system)g(is)g(righ)n(t)f(handed.)68
-b(Also,)40 b(unlik)n(e)e(other)f(SkyF)-7 b(rame)37 b(systems,)j(the)e
-(AzEl)g(system)597 5494 y(is)j(sensitiv)n(e)g(to)g(the)g(timescale)g
-(in)g(whic)n(h)g(the)h(Ep)r(o)r(c)n(h)e(v)-5 b(alue)41
-b(is)g(supplied.)78 b(This)41 b(is)g(b)r(ecause)597 5593
-y(of)c(the)g(gross)d(diurnal)i(rotation)f(whic)n(h)i(this)g(system)f
-(undergo)r(es,)h(causing)f(a)g(small)g(c)n(hange)f(in)597
-5693 y(time)c(to)e(translate)g(to)h(a)g(large)e(rotation.)43
-b(When)30 b(con)n(v)n(erting)e(to)i(or)f(from)h(an)f(AzEl)h(system,)g
-(the)p eop end
-%%Page: 468 478
-TeXDict begin 468 477 bop 0 52 a FF(468)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)597 351
-y Fj(Ep)r(o)r(c)n(h)c(v)-5 b(alue)27 b(for)g(b)r(oth)g(source)f(and)h
-(destination)g(SkyF)-7 b(rames)26 b(should)h(b)r(e)h(supplied)f(in)h
-(the)f(TDB)597 451 y(timescale.)36 b(The)27 b(di\013erence)f(b)r(et)n
-(w)n(een)g(TDB)h(and)f(TT)g(is)h(b)r(et)n(w)n(een)f(1)g(and)g(2)g
-(milliseconds,)g(and)g(so)597 551 y(a)d(TT)h(v)-5 b(alue)23
-b(can)g(usually)g(b)r(e)h(supplied)g(in)g(place)f(of)g(a)h(TDB)f(v)-5
-b(alue.)36 b(The)23 b(TT)h(timescale)f(is)g(related)597
-650 y(to)28 b(T)-7 b(AI)28 b(via)f(TT)g(=)h(T)-7 b(AI)28
-b(+)f(32.184)e(seconds.)510 770 y Fi(\017)45 b Ft(")p
-Fj(ECLIPTIC)p Ft(")p Fj(:)31 b(Ecliptic)20 b(co)r(ordinates)f(\(IA)n(U)
-i(1980\),)f(referred)f(to)h(the)g(ecliptic)h(and)f(mean)f(equino)n(x)
-597 869 y(sp)r(eci\014ed)28 b(b)n(y)f(the)h(qualifying)g(Equino)n(x)e
-(v)-5 b(alue.)510 989 y Fi(\017)45 b Ft(")p Fj(FK4)p
-Ft(")p Fj(:)35 b(The)26 b(old)g(FK4)g(\(barycen)n(tric\))f(equatorial)g
-(co)r(ordinate)g(system,)h(whic)n(h)h(should)f(b)r(e)g(qual-)597
-1089 y(i\014ed)k(b)n(y)g(an)f(Equino)n(x)g(v)-5 b(alue.)43
-b(The)30 b(underlying)g(mo)r(del)f(on)h(whic)n(h)g(this)g(is)g(based)f
-(is)h(non-inertial)597 1188 y(and)f(rotates)f(slo)n(wly)h(with)g(time,)
-h(so)f(for)g(accurate)f(w)n(ork)f(FK4)i(co)r(ordinate)f(systems)h
-(should)g(also)597 1288 y(b)r(e)f(quali\014ed)g(b)n(y)f(an)g(Ep)r(o)r
-(c)n(h)g(v)-5 b(alue.)510 1408 y Fi(\017)45 b Ft(")p
-Fj(FK4-NO-E)p Ft(")24 b Fj(or)h Ft(")p Fj(FK4)p Ft(_)p
-Fj(NO)p Ft(_)p Fj(E)p Ft(")p Fj(:)33 b(The)26 b(old)g(FK4)g(\(barycen)n
-(tric\))f(equatorial)g(system)h(but)g(with-)597 1507
-y(out)32 b(the)g Ft(")p Fj(E-terms)f(of)h(ab)r(erration)p
-Ft(")e Fj(\(e.g.)49 b(some)31 b(radio)g(catalogues\).)48
-b(This)32 b(co)r(ordinate)f(system)597 1607 y(should)d(also)e(b)r(e)i
-(quali\014ed)g(b)n(y)f(b)r(oth)h(an)f(Equino)n(x)g(and)g(an)g(Ep)r(o)r
-(c)n(h)g(v)-5 b(alue.)510 1727 y Fi(\017)45 b Ft(")p
-Fj(FK5)p Ft(")26 b Fj(or)g Ft(")p Fj(EQUA)-7 b(TORIAL)p
-Ft(")p Fj(:)35 b(The)27 b(mo)r(dern)g(FK5)f(\(barycen)n(tric\))g
-(equatorial)g(co)r(ordinate)g(sys-)597 1826 y(tem.)38
-b(This)27 b(should)h(b)r(e)g(quali\014ed)f(b)n(y)g(an)h(Equino)n(x)e(v)
--5 b(alue.)510 1946 y Fi(\017)45 b Ft(")p Fj(GALA)n(CTIC)p
-Ft(")p Fj(:)37 b(Galactic)27 b(co)r(ordinates)f(\(IA)n(U)i(1958\).)510
-2066 y Fi(\017)45 b Ft(")p Fj(GAPPT)p Ft(")p Fj(,)36
-b Ft(")p Fj(GEOCENTRIC)p Ft(")d Fj(or)h Ft(")p Fj(APP)-7
-b(ARENT)p Ft(")p Fj(:)50 b(The)35 b(geo)r(cen)n(tric)e(apparen)n(t)h
-(equatorial)597 2165 y(co)r(ordinate)j(system,)j(whic)n(h)e(giv)n(es)e
-(the)i(apparen)n(t)f(p)r(ositions)g(of)h(sources)e(relativ)n(e)h(to)h
-(the)g(true)597 2265 y(plane)28 b(of)f(the)h(Earth's)e(equator)h(and)g
-(the)h(equino)n(x)f(\(the)h(co)r(ordinate)e(origin\))h(at)g(a)g(time)h
-(sp)r(eci\014ed)597 2365 y(b)n(y)i(the)f(qualifying)g(Ep)r(o)r(c)n(h)h
-(v)-5 b(alue.)42 b(\(Note)30 b(that)g(no)f(Equino)n(x)f(is)i(needed)f
-(to)h(qualify)f(this)h(co)r(ordi-)597 2464 y(nate)e(system)f(b)r
-(ecause)g(no)g(mo)r(del)g Ft(")p Fj(mean)g(equino)n(x)p
-Ft(")f Fj(is)h(in)n(v)n(olv)n(ed.\))36 b(These)27 b(co)r(ordinates)f
-(giv)n(e)g(the)597 2564 y(apparen)n(t)i(righ)n(t)g(ascension)g(and)h
-(declination)f(of)h(a)g(source)e(for)i(a)f(sp)r(eci\014ed)h(date)g(of)g
-(observ)-5 b(ation,)597 2663 y(and)31 b(therefore)f(form)h(an)g(appro)n
-(ximate)e(basis)h(for)h(p)r(oin)n(ting)g(a)g(telescop)r(e.)46
-b(Note,)32 b(ho)n(w)n(ev)n(er,)e(that)597 2763 y(they)35
-b(are)e(applicable)g(to)h(a)g(\014ctitious)g(observ)n(er)e(at)i(the)g
-(Earth's)f(cen)n(tre,)i(and)f(therefore)f(ignore)597
-2863 y(suc)n(h)20 b(e\013ects)g(as)g(atmospheric)f(refraction)g(and)h
-(the)g(\(normally)g(m)n(uc)n(h)g(smaller\))f(ab)r(erration)g(of)h(ligh)
-n(t)597 2962 y(due)34 b(to)f(the)g(rotational)f(v)n(elo)r(cit)n(y)g(of)
-h(the)g(Earth's)f(surface.)53 b(Geo)r(cen)n(tric)32 b(apparen)n(t)g(co)
-r(ordinates)597 3062 y(are)26 b(deriv)n(ed)f(from)i(the)g(standard)e
-(FK5)h(\(J2000.0\))e(barycen)n(tric)h(co)r(ordinates)g(b)n(y)i(taking)e
-(accoun)n(t)597 3162 y(of)h(the)h(gra)n(vitational)c(de\015ection)j(of)
-g(ligh)n(t)g(b)n(y)f(the)i(Sun)f(\(usually)g(small\),)g(the)g(ab)r
-(erration)f(of)h(ligh)n(t)597 3261 y(caused)i(b)n(y)g(the)h(motion)f
-(of)h(the)f(Earth's)g(cen)n(tre)f(with)i(resp)r(ect)g(to)f(the)h
-(barycen)n(tre)d(\(larger\),)i(and)597 3361 y(the)g(precession)e(and)i
-(n)n(utation)f(of)h(the)g(Earth's)e(spin)i(axis)f(\(normally)g(larger)e
-(still\).)510 3480 y Fi(\017)45 b Ft(")p Fj(HELIOECLIPTIC)p
-Ft(")p Fj(:)32 b(Ecliptic)24 b(co)r(ordinates)e(\(IA)n(U)j(1980\),)e
-(referred)f(to)i(the)g(ecliptic)g(and)g(mean)597 3580
-y(equino)n(x)31 b(of)h(J2000.0,)f(in)h(whic)n(h)g(an)f(o\013set)h(is)g
-(added)g(to)f(the)i(longitude)e(v)-5 b(alue)32 b(whic)n(h)g(results)f
-(in)597 3680 y(the)f(cen)n(tre)f(of)g(the)h(sun)g(b)r(eing)f(at)h(zero)
-e(longitude)h(at)h(the)f(date)h(giv)n(en)e(b)n(y)i(the)f(Ep)r(o)r(c)n
-(h)g(attribute.)597 3779 y(A)n(ttempts)k(to)f(set)g(a)f(v)-5
-b(alue)32 b(for)g(the)g(Equino)n(x)f(attribute)h(will)g(b)r(e)g
-(ignored,)g(since)g(this)g(system)g(is)597 3879 y(alw)n(a)n(ys)26
-b(referred)g(to)i(J2000.0.)510 3999 y Fi(\017)45 b Ft(")p
-Fj(ICRS)p Ft(")p Fj(:)54 b(The)36 b(In)n(ternation)f(Celestial)h
-(Reference)f(System,)k(realised)c(through)g(the)i(Hipparcos)597
-4098 y(catalogue.)j(Whilst)30 b(not)f(an)g(equatorial)f(system)h(b)n(y)
-g(de\014nition,)h(the)f(ICRS)h(is)f(v)n(ery)f(close)g(to)h(the)597
-4198 y(FK5)37 b(\(J2000\))e(system)i(and)g(is)g(usually)g(treated)g(as)
-f(an)h(equatorial)f(system.)65 b(The)37 b(distinction)597
-4298 y(b)r(et)n(w)n(een)d(ICRS)h(and)f(FK5)f(\(J2000\))f(only)i(b)r
-(ecomes)g(imp)r(ortan)n(t)g(when)g(accuracies)e(of)i(50)f(milli-)597
-4397 y(arcseconds)26 b(or)h(b)r(etter)h(are)e(required.)36
-b(ICRS)28 b(need)g(not)f(b)r(e)h(quali\014ed)g(b)n(y)f(an)g(Equino)n(x)
-g(v)-5 b(alue.)510 4517 y Fi(\017)45 b Ft(")p Fj(J2000)p
-Ft(")p Fj(:)h(An)34 b(equatorial)e(co)r(ordinate)g(system)h(based)g(on)
-g(the)h(mean)g(dynamical)f(equator)f(and)597 4616 y(equino)n(x)j(of)h
-(the)h(J2000)c(ep)r(o)r(c)n(h.)62 b(The)36 b(dynamical)g(equator)f(and)
-g(equino)n(x)g(di\013er)i(sligh)n(tly)e(from)597 4716
-y(those)40 b(used)h(b)n(y)f(the)h(FK5)f(mo)r(del,)k(and)c(so)g(a)g
-Ft(")p Fj(J2000)p Ft(")d Fj(SkyF)-7 b(rame)40 b(will)g(di\013er)h
-(sligh)n(tly)f(from)597 4816 y(an)31 b Ft(")p Fj(FK5\(Equino)n
-(x=J2000\))p Ft(")26 b Fj(SkyF)-7 b(rame.)47 b(The)32
-b(J2000)d(System)i(need)g(not)g(b)r(e)h(quali\014ed)f(b)n(y)g(an)597
-4915 y(Equino)n(x)c(v)-5 b(alue)510 5035 y Fi(\017)45
-b Ft(")p Fj(SUPER)n(GALA)n(CTIC)p Ft(")p Fj(:)36 b(De)28
-b(V)-7 b(aucouleurs)26 b(Sup)r(ergalactic)h(co)r(ordinates.)510
-5155 y Fi(\017)45 b Ft(")p Fj(UNKNO)n(WN)p Ft(")p Fj(:)54
-b(An)n(y)36 b(other)g(general)f(spherical)g(co)r(ordinate)g(system.)63
-b(No)36 b(Mapping)g(can)g(b)r(e)597 5254 y(created)27
-b(b)r(et)n(w)n(een)g(a)g(pair)g(of)g(SkyF)-7 b(rames)26
-b(if)i(either)g(of)f(the)h(SkyF)-7 b(rames)26 b(has)h(System)g(set)h
-(to)f Ft(")p Fj(Un-)597 5354 y(kno)n(wn)p Ft(")p Fj(.)427
-5494 y(Curren)n(tly)-7 b(,)30 b(the)g(default)h(System)f(v)-5
-b(alue)29 b(is)h Ft(")p Fj(ICRS)p Ft(")p Fj(.)43 b(Ho)n(w)n(ev)n(er,)29
-b(this)h(default)g(ma)n(y)f(c)n(hange)g(in)h(future)427
-5593 y(as)d(new)g(astrometric)e(standards)h(ev)n(olv)n(e.)35
-b(The)27 b(in)n(ten)n(tion)g(is)g(to)g(trac)n(k)e(the)j(most)f(mo)r
-(dern)f(appropriate)427 5693 y(standard.)53 b(F)-7 b(or)33
-b(this)h(reason,)f(y)n(ou)g(should)g(use)g(the)h(default)f(only)g(if)h
-(this)g(is)f(what)g(y)n(ou)g(in)n(tend)g(\(and)p eop
-end
-%%Page: 469 479
-TeXDict begin 469 478 bop 3643 52 a FF(469)427 351 y
-Fj(can)32 b(tolerate)g(an)n(y)f(asso)r(ciated)g(sligh)n(t)h(c)n(hange)f
-(in)i(future\).)51 b(If)33 b(y)n(ou)f(in)n(tend)g(to)g(use)h(the)f
-(ICRS)h(system)427 451 y(inde\014nitely)-7 b(,)29 b(then)f(y)n(ou)f
-(should)g(sp)r(ecify)h(it)g(explicitly)-7 b(.)259 582
-y Fd(Sp)s(ecF)f(rame)427 682 y Fj(The)23 b(Sp)r(ecF)-7
-b(rame)22 b(class)g(supp)r(orts)g(the)h(follo)n(wing)e(System)i(v)-5
-b(alues)22 b(and)h(asso)r(ciated)e(sp)r(ectral)h(co)r(ordinate)427
-781 y(systems)i(\(the)h(default)g(is)g Ft(")p Fj(W)-9
-b(A)g(VE)p Ft(")23 b Fj(-)h(w)n(a)n(v)n(elength\).)35
-b(They)24 b(are)g(all)g(de\014ned)h(in)f(FITS-W)n(CS)h(pap)r(er)f(I)r
-(I)r(I:)510 1002 y Fi(\017)45 b Ft(")p Fj(FREQ)p Ft(")p
-Fj(:)36 b(F)-7 b(requency)27 b(\(GHz\))510 1118 y Fi(\017)45
-b Ft(")p Fj(ENER)p Ft(")27 b Fj(or)f Ft(")p Fj(ENER)n(GY)p
-Ft(")p Fj(:)36 b(Energy)26 b(\(J\))510 1233 y Fi(\017)45
-b Ft(")p Fj(W)-9 b(A)g(VN)p Ft(")28 b Fj(or)f Ft(")p
-Fj(W)-9 b(A)g(VENUM)p Ft(")p Fj(:)36 b(W)-7 b(a)n(v)n(e-n)n(um)n(b)r
-(er)26 b(\(1/m\))510 1349 y Fi(\017)45 b Ft(")p Fj(W)-9
-b(A)g(VE)p Ft(")27 b Fj(or)g Ft(")p Fj(W)-9 b(A)g(VELEN)p
-Ft(")p Fj(:)35 b(V)-7 b(acuum)28 b(w)n(a)n(v)n(e-length)e(\(Angstrom\))
-510 1464 y Fi(\017)45 b Ft(")p Fj(A)-9 b(W)g(A)g(V)p
-Ft(")28 b Fj(or)e Ft(")p Fj(AIR)-9 b(W)g(A)g(VE)p Ft(")p
-Fj(:)36 b(W)-7 b(a)n(v)n(e-length)27 b(in)h(air)e(\(Angstrom\))510
-1579 y Fi(\017)45 b Ft(")p Fj(VRAD)p Ft(")28 b Fj(or)f
-Ft(")p Fj(VRADIO)p Ft(")p Fj(:)37 b(Radio)27 b(v)n(elo)r(cit)n(y)f
-(\(km/s\))510 1695 y Fi(\017)45 b Ft(")p Fj(V)n(OPT)p
-Ft(")26 b Fj(or)h Ft(")p Fj(V)n(OPTICAL)p Ft(")p Fj(:)35
-b(Optical)27 b(v)n(elo)r(cit)n(y)g(\(km/s\))510 1810
-y Fi(\017)45 b Ft(")p Fj(ZOPT)p Ft(")26 b Fj(or)h Ft(")p
-Fj(REDSHIFT)p Ft(")p Fj(:)36 b(Redshift)29 b(\(dimensionless\))510
-1926 y Fi(\017)45 b Ft(")p Fj(BET)-7 b(A)p Ft(")p Fj(:)36
-b(Beta)27 b(factor)g(\(dimensionless\))510 2041 y Fi(\017)45
-b Ft(")p Fj(VELO)p Ft(")26 b Fj(or)h Ft(")p Fj(VREL)p
-Ft(")p Fj(:)36 b(Apparen)n(t)27 b(radial)g(\()p Ft(")p
-Fj(relativistic)p Ft(")p Fj(\))f(v)n(elo)r(cit)n(y)h(\(km/s\))427
-2172 y(The)i(default)h(v)-5 b(alue)29 b(for)f(the)h(Unit)h(attribute)f
-(for)g(eac)n(h)f(system)g(is)h(sho)n(wn)g(in)g(paren)n(theses.)39
-b(Note)29 b(that)427 2272 y(the)g(default)g(v)-5 b(alue)28
-b(for)g(the)g(Activ)n(eUnit)h(\015ag)f(is)g(non-zero)f(for)g(a)h(Sp)r
-(ecF)-7 b(rame,)29 b(meaning)e(that)i(c)n(hanges)427
-2372 y(to)h(the)g(Unit)g(attribute)g(for)f(a)g(Sp)r(ecF)-7
-b(rame)29 b(will)h(result)f(in)h(the)g(Sp)r(ecF)-7 b(rame)29
-b(b)r(eing)h(re-mapp)r(ed)f(within)427 2471 y(its)g(enclosing)f(F)-7
-b(rameSet)28 b(in)h(order)e(to)i(re\015ect)f(the)h(c)n(hange)e(in)i
-(units)g(\(see)g(astSetActiv)n(eUnit)g(function)427 2571
-y(for)e(further)h(information\).)259 2702 y Fd(TimeF)-8
-b(rame)427 2802 y Fj(The)21 b(TimeF)-7 b(rame)21 b(class)f(supp)r(orts)
-h(the)g(follo)n(wing)f(System)h(v)-5 b(alues)21 b(and)g(asso)r(ciated)e
-(co)r(ordinate)h(systems)427 2901 y(\(the)29 b(default)f(is)f
-Ft(")p Fj(MJD)p Ft(")p Fj(\):)510 3122 y Fi(\017)45 b
-Ft(")p Fj(MJD)p Ft(")p Fj(:)37 b(Mo)r(di\014ed)28 b(Julian)f(Date)h
-(\(d\))510 3238 y Fi(\017)45 b Ft(")p Fj(JD)p Ft(")p
-Fj(:)36 b(Julian)28 b(Date)f(\(d\))510 3353 y Fi(\017)45
-b Ft(")p Fj(JEPOCH)p Ft(")p Fj(:)35 b(Julian)27 b(ep)r(o)r(c)n(h)h
-(\(yr\))510 3469 y Fi(\017)45 b Ft(")p Fj(BEPOCH)p Ft(")p
-Fj(:)35 b(Besselian)27 b(\(yr\))427 3600 y(The)34 b(default)f(v)-5
-b(alue)33 b(for)g(the)h(Unit)g(attribute)f(for)g(eac)n(h)f(system)h(is)
-g(sho)n(wn)g(in)g(paren)n(theses.)52 b(Strictly)-7 b(,)427
-3699 y(these)37 b(systems)e(should)i(not)f(allo)n(w)f(c)n(hanges)g(to)h
-(b)r(e)h(made)f(to)g(the)h(units.)63 b(F)-7 b(or)36 b(instance,)i(the)f
-(usual)427 3799 y(de\014nition)26 b(of)g Ft(")p Fj(MJD)p
-Ft(")f Fj(and)h Ft(")p Fj(JD)p Ft(")f Fj(include)h(the)g(statemen)n(t)g
-(that)g(the)g(v)-5 b(alues)26 b(will)g(b)r(e)g(in)g(units)g(of)g(da)n
-(ys.)427 3899 y(Ho)n(w)n(ev)n(er,)d(AST)h(do)r(es)g(allo)n(w)e(the)j
-(use)e(of)h(other)f(units)i(with)f(all)g(the)g(ab)r(o)n(v)n(e)e(supp)r
-(orted)i(systems)f(\(except)427 3998 y(BEPOCH\),)38 b(on)g(the)g
-(understanding)g(that)h(con)n(v)n(ersion)d(to)i(the)g
-Ft(")p Fj(correct)p Ft(")f Fj(units)h(in)n(v)n(olv)n(es)f(nothing)427
-4098 y(more)e(than)g(a)g(simple)h(scaling)e(\(1)i(yr)e(=)h(365.25)f(d,)
-j(1)e(d)h(=)f(24)f(h,)k(1)d(h)h(=)f(60)f(min,)k(1)d(min)h(=)f(60)f
-(s\).)427 4197 y(Besselian)e(ep)r(o)r(c)n(h)h(v)-5 b(alues)33
-b(are)f(de\014ned)i(in)f(terms)g(of)g(tropical)f(y)n(ears)g(of)h
-(365.2422)d(da)n(ys,)j(rather)f(than)427 4297 y(the)27
-b(usual)e(Julian)h(y)n(ear)f(of)h(365.25)e(da)n(ys.)35
-b(Therefore,)25 b(to)h(a)n(v)n(oid)f(an)n(y)g(confusion,)h(the)h(Unit)f
-(attribute)h(is)427 4397 y(automatically)i(cleared)g(to)g
-Ft(")p Fj(yr)p Ft(")g Fj(when)h(a)f(System)h(v)-5 b(alue)29
-b(of)h(BEPOCH)f(System)g(is)h(selected,)g(and)g(an)427
-4496 y(error)c(is)h(rep)r(orted)g(if)h(an)n(y)f(attempt)h(is)g
-(subsequen)n(tly)f(made)g(to)h(c)n(hange)e(the)i(Unit)h(attribute.)427
-4612 y(Note)22 b(that)g(the)h(default)f(v)-5 b(alue)22
-b(for)f(the)i(Activ)n(eUnit)f(\015ag)f(is)h(non-zero)e(for)i(a)f(TimeF)
--7 b(rame,)23 b(meaning)e(that)427 4711 y(c)n(hanges)h(to)h(the)g(Unit)
-h(attribute)g(for)e(a)h(TimeF)-7 b(rame)22 b(will)i(result)f(in)g(the)g
-(TimeF)-7 b(rame)23 b(b)r(eing)g(re-mapp)r(ed)427 4811
-y(within)35 b(its)f(enclosing)e(F)-7 b(rameSet)34 b(in)g(order)e(to)i
-(re\015ect)f(the)i(c)n(hange)d(in)i(units)g(\(see)g(astSetActiv)n
-(eUnit)427 4911 y(function)28 b(for)g(further)f(information\).)259
-5042 y Fd(FluxF)-8 b(rame)427 5141 y Fj(The)30 b(FluxF)-7
-b(rame)30 b(class)f(supp)r(orts)g(the)i(follo)n(wing)d(System)j(v)-5
-b(alues)29 b(and)h(asso)r(ciated)e(systems)i(for)f(mea-)427
-5241 y(suring)e(observ)n(ed)f(v)-5 b(alue:)510 5462 y
-Fi(\017)45 b Ft(")p Fj(FLXDN)p Ft(")p Fj(:)37 b(Flux)28
-b(p)r(er)g(unit)g(frequency)f(\(W/m)p Fi(^)p Fj(2/Hz\))510
-5578 y Fi(\017)45 b Ft(")p Fj(FLXDNW)p Ft(")p Fj(:)38
-b(Flux)28 b(p)r(er)f(unit)h(w)n(a)n(v)n(elength)e(\(W/m)p
-Fi(^)p Fj(2/Angstrom\))510 5693 y Fi(\017)45 b Ft(")p
-Fj(SF)n(CBR)p Ft(")p Fj(:)36 b(Surface)27 b(brigh)n(tness)g(in)h
-(frequency)f(units)h(\(W/m)p Fi(^)p Fj(2/Hz/arcmin)p
-Fi(\003\003)p Fj(2\))p eop end
-%%Page: 470 480
-TeXDict begin 470 479 bop 0 52 a FF(470)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)510 351
-y Fi(\017)45 b Ft(")p Fj(SF)n(CBR)-9 b(W)p Ft(")p Fj(:)36
-b(Surface)28 b(brigh)n(tness)e(in)i(w)n(a)n(v)n(elength)e(units)i
-(\(W/m)p Fi(^)p Fj(2/Angstrom/arcmin)p Fi(\003\003)p
-Fj(2\))427 477 y(The)h(ab)r(o)n(v)n(e)e(lists)h(sp)r(eci\014ed)h(the)f
-(default)h(units)g(for)f(eac)n(h)f(System.)39 b(If)29
-b(an)f(explicit)h(v)-5 b(alue)28 b(is)g(set)g(for)g(the)427
-576 y(Unit)e(attribute)f(but)g(no)g(v)-5 b(alue)25 b(is)g(set)f(for)h
-(System,)g(then)h(the)f(default)g(System)g(v)-5 b(alue)25
-b(is)g(determined)g(b)n(y)427 676 y(the)j(Unit)f(string)g(\(if)g(the)h
-(units)f(are)f(not)h(appropriate)e(for)h(describing)h(an)n(y)f(of)h
-(the)g(supp)r(orted)g(Systems)427 775 y(then)19 b(an)f(error)f(will)i
-(b)r(e)f(rep)r(orted)g(when)h(an)f(attempt)h(is)f(made)h(to)f(access)f
-(the)i(System)g(v)-5 b(alue\).)34 b(If)19 b(no)f(v)-5
-b(alue)427 875 y(has)31 b(b)r(een)i(sp)r(eci\014ed)f(for)f(either)g
-(Unit)i(or)e(System,)h(then)h(System=FLXDN)f(and)g(Unit=W/m)p
-Fi(^)p Fj(2/Hz)427 975 y(are)27 b(used.)p 0 1159 3780
-12 v 0 1297 a Fz(T)-11 b(extLab\(axis\))1038 1291 y Fe(Dra)m(w)37
-b(descriptiv)m(e)g(axis)h(lab)s(els)g(for)g(a)1754 1405
-y(Plot?)2960 1297 y Fz(T)-11 b(extLab\(axis\))0 1560
-y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n(trols)e(the)i
-(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 1660 y(astGrid)c(function\))h(b)n(y)f(determining)
-g(whether)h(textual)f(lab)r(els)g(should)g(b)r(e)h(dra)n(wn)e(to)h
-(describ)r(e)g(the)h(quan)n(tit)n(y)227 1760 y(b)r(eing)h(represen)n
-(ted)f(on)h(eac)n(h)f(axis)g(of)h(a)f(Plot.)37 b(It)29
-b(tak)n(es)e(a)g(separate)f(v)-5 b(alue)28 b(for)g(eac)n(h)f(ph)n
-(ysical)g(axis)g(of)h(a)f(Plot)227 1859 y(so)e(that,)i(for)e(instance,)
-g(the)h(setting)g Ft(")p Fj(T)-7 b(extLab\(2\)=1)p Ft(")24
-b Fj(sp)r(eci\014es)h(that)h(descriptiv)n(e)f(lab)r(els)g(should)h(b)r
-(e)g(dra)n(wn)227 1959 y(for)h(the)h(second)f(axis.)227
-2080 y(If)h(the)f(T)-7 b(extLab)27 b(v)-5 b(alue)27 b(of)g(a)g(Plot)f
-(axis)g(is)h(non-zero,)f(then)h(descriptiv)n(e)g(lab)r(els)g(will)g(b)r
-(e)g(dra)n(wn)f(for)h(that)g(axis,)227 2179 y(otherwise)j(they)h(will)g
-(b)r(e)g(omitted.)47 b(The)30 b(default)h(b)r(eha)n(viour)f(is)g(to)h
-(dra)n(w)f(descriptiv)n(e)g(lab)r(els)g(if)h(tic)n(k)g(marks)227
-2279 y(and)37 b(n)n(umerical)f(lab)r(els)h(are)f(b)r(eing)h(dra)n(wn)f
-(around)g(the)h(edges)f(of)h(the)g(plotting)g(area)f(\(see)h(the)g(Lab)
-r(elling)227 2378 y(attribute\),)28 b(but)h(to)e(omit)h(them)g
-(otherwise.)0 2520 y Fd(T)m(yp)s(e:)227 2620 y Fj(In)n(teger)f(\(b)r(o)
-r(olean\).)0 2762 y Fd(Class)k(Applicabilit)m(y:)259
-2891 y(Plot)427 2990 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)
-0 3145 y Fd(Notes:)340 3420 y Fi(\017)45 b Fj(The)c(text)g(used)f(for)g
-(the)h(descriptiv)n(e)f(lab)r(els)g(is)h(deriv)n(ed)e(from)i(the)f
-(Plot's)g(Lab)r(el\(axis\))g(attribute,)427 3519 y(together)27
-b(with)h(its)g(Unit\(axis\))g(attribute)g(if)g(appropriate)e(\(see)h
-(the)h(Lab)r(elUnits\(axis\))g(attribute\).)340 3645
-y Fi(\017)45 b Fj(The)20 b(dra)n(wing)f(of)h(n)n(umerical)f(axis)h(lab)
-r(els)f(for)h(a)g(Plot)f(\(whic)n(h)h(indicate)g(v)-5
-b(alues)20 b(on)g(the)g(axis\))g(is)g(con)n(trolled)427
-3744 y(b)n(y)28 b(the)g(NumLab\(axis\))f(attribute.)340
-3870 y Fi(\017)45 b Fj(If)36 b(no)g(axis)e(is)i(sp)r(eci\014ed,)i
-(\(e.g.)60 b Ft(")p Fj(T)-7 b(extLab)p Ft(")35 b Fj(instead)g(of)h
-Ft(")p Fj(T)-7 b(extLab\(2\))p Ft(")p Fj(\),)37 b(then)f(a)f
-Ft(")p Fj(set)p Ft(")g Fj(or)f Ft(")p Fj(clear)p Ft(")427
-3969 y Fj(op)r(eration)23 b(will)i(a\013ect)f(the)h(attribute)f(v)-5
-b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f
-Ft(")p Fj(get)p Ft(")f Fj(or)g Ft(")p Fj(test)p Ft(")h
-Fj(op)r(eration)427 4069 y(will)k(use)g(just)g(the)g(T)-7
-b(extLab\(1\))27 b(v)-5 b(alue.)p 0 4253 V 0 4391 a Fz(T)-11
-b(extLabGap\(axis\))1332 4385 y Fe(Spacing)38 b(of)g(descriptiv)m(e)
-1360 4499 y(axis)g(lab)s(els)g(for)g(a)g(Plot)2714 4391
-y Fz(T)-11 b(extLabGap\(axis\))0 4654 y Fd(Description:)44
-b Fj(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)
-h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-4754 y(astGrid)c(function\))h(b)n(y)f(determining)g(where)g(descriptiv)
-n(e)f(axis)g(lab)r(els)h(are)g(placed)f(relativ)n(e)h(to)g(the)g(axes)f
-(they)227 4854 y(describ)r(e.)36 b(It)27 b(tak)n(es)e(a)g(separate)g(v)
--5 b(alue)25 b(for)h(eac)n(h)f(ph)n(ysical)g(axis)g(of)h(a)g(Plot)f(so)
-g(that,)i(for)e(instance,)h(the)h(setting)227 4953 y
-Ft(")p Fj(T)-7 b(extLabGap\(2\)=0.01)p Ft(")25 b Fj(sp)r(eci\014es)i
-(where)g(the)h(descriptiv)n(e)f(lab)r(el)h(for)f(the)h(second)f(axis)g
-(should)g(b)r(e)h(dra)n(wn.)227 5074 y(F)-7 b(or)27 b(eac)n(h)f(axis,)h
-(the)g(T)-7 b(extLabGap)27 b(v)-5 b(alue)27 b(giv)n(es)f(the)h(spacing)
-f(b)r(et)n(w)n(een)i(the)f(descriptiv)n(e)f(lab)r(el)i(and)f(the)g
-(edge)227 5174 y(of)k(a)f(b)r(o)n(x)g(enclosing)g(all)g(other)g(parts)g
-(of)g(the)h(annotated)f(grid)g(\(excluding)h(other)f(descriptiv)n(e)g
-(lab)r(els\).)46 b(The)227 5273 y(gap)25 b(is)g(measured)f(to)h(the)h
-(nearest)f(edge)f(of)i(the)f(lab)r(el)h(\(i.e.)36 b(the)26
-b(top)f(or)f(the)i(b)r(ottom\).)37 b(P)n(ositiv)n(e)23
-b(v)-5 b(alues)25 b(cause)227 5373 y(the)32 b(descriptiv)n(e)e(lab)r
-(el)i(to)f(b)r(e)g(placed)g(outside)g(the)h(b)r(ounding)f(b)r(o)n(x,)h
-(while)f(negativ)n(e)f(v)-5 b(alues)31 b(cause)f(it)i(to)f(b)r(e)227
-5473 y(placed)d(inside.)227 5593 y(The)34 b(T)-7 b(extLabGap)32
-b(v)-5 b(alue)33 b(should)g(b)r(e)h(giv)n(en)f(as)f(a)h(fraction)g(of)g
-(the)h(minim)n(um)g(dimension)f(of)g(the)h(plotting)227
-5693 y(area,)26 b(the)i(default)g(v)-5 b(alue)28 b(b)r(eing)g(+0.01.)p
-eop end
-%%Page: 471 481
-TeXDict begin 471 480 bop 3643 52 a FF(471)0 351 y Fd(T)m(yp)s(e:)227
-451 y Fj(Floating)27 b(p)r(oin)n(t.)0 600 y Fd(Class)k(Applicabilit)m
-(y:)259 737 y(Plot)427 837 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)0 999 y Fd(Notes:)340 1281 y Fi(\017)45 b
-Fj(If)25 b(dra)n(wn,)f(descriptiv)n(e)g(lab)r(els)g(are)g(alw)n(a)n(ys)
-e(placed)j(at)f(the)h(edges)f(of)g(the)h(plotting)g(area,)e(ev)n(en)h
-(although)427 1381 y(the)c(corresp)r(onding)e(n)n(umerical)h(lab)r(els)
-g(ma)n(y)g(b)r(e)h(dra)n(wn)f(along)f(axis)h(lines)h(in)g(the)g(in)n
-(terior)e(of)i(the)g(plotting)427 1481 y(area)26 b(\(see)i(the)g(Lab)r
-(elling)f(attribute\).)340 1614 y Fi(\017)45 b Fj(If)36
-b(no)e(axis)g(is)h(sp)r(eci\014ed,)i(\(e.g.)58 b Ft(")p
-Fj(T)-7 b(extLabGap)p Ft(")34 b Fj(instead)g(of)h Ft(")p
-Fj(T)-7 b(extLabGap\(2\))p Ft(")p Fj(\),)36 b(then)f(a)f
-Ft(")p Fj(set)p Ft(")g Fj(or)427 1713 y Ft(")p Fj(clear)p
-Ft(")28 b Fj(op)r(eration)g(will)i(a\013ect)g(the)g(attribute)g(v)-5
-b(alue)29 b(of)h(all)f(the)h(Plot)f(axes,)g(while)h(a)f
-Ft(")p Fj(get)p Ft(")f Fj(or)h Ft(")p Fj(test)p Ft(")427
-1813 y Fj(op)r(eration)e(will)h(use)f(just)h(the)g(T)-7
-b(extLabGap\(1\))27 b(v)-5 b(alue.)p 0 2012 3780 12 v
-0 2144 a Fz(Tic)l(kAll)441 b Fe(Dra)m(w)37 b(tic)m(k)h(marks)g(on)g
-(all)g(edges)h(of)f(a)g(Plot?)439 b Fz(Tic)l(kAll)0 2337
-y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n(trols)e(the)i
-(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 2437 y(astGrid)d(function\))i(b)n(y)e(determining)
-h(whether)f(tic)n(k)g(marks)g(should)g(b)r(e)h(dra)n(wn)f(on)g(all)h
-(edges)e(of)i(a)f(Plot.)227 2562 y(If)h(the)g(Tic)n(kAll)f(v)-5
-b(alue)27 b(of)h(a)e(Plot)h(is)g(non-zero)f(\(the)i(default\),)g(then)g
-(tic)n(k)f(marks)g(will)g(b)r(e)h(dra)n(wn)e(on)h(all)g(edges)227
-2661 y(of)c(the)g(Plot.)35 b(Otherwise,)23 b(they)g(will)g(b)r(e)g(dra)
-n(wn)f(only)g(on)h(those)f(edges)g(where)h(the)g(n)n(umerical)f(and)g
-(descriptiv)n(e)227 2761 y(axis)27 b(lab)r(els)g(are)g(dra)n(wn)g
-(\(see)g(the)h(Edge\(axis\))f(attribute\).)0 2911 y Fd(T)m(yp)s(e:)227
-3010 y Fj(In)n(teger)g(\(b)r(o)r(olean\).)0 3160 y Fd(Class)k
-(Applicabilit)m(y:)259 3296 y(Plot)427 3396 y Fj(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)0 3558 y Fd(Notes:)340 3841 y
-Fi(\017)45 b Fj(In)26 b(some)g(circumstances,)f(n)n(umerical)g(lab)r
-(els)h(and)g(tic)n(k)g(marks)f(are)g(dra)n(wn)g(along)g(grid)g(lines)h
-(inside)g(the)427 3940 y(plotting)34 b(area,)g(rather)f(than)h(around)f
-(its)i(edges)e(\(see)h(the)g(Lab)r(elling)g(attribute\).)56
-b(In)34 b(this)g(case,)h(the)427 4040 y(v)-5 b(alue)28
-b(of)f(the)h(Tic)n(kAll)g(attribute)g(is)f(ignored.)p
-0 4239 V 0 4371 a Fz(TimeOrigin)153 b Fe(The)35 b(zero)f(p)s(oin)m(t)f
-(for)h(TimeF)-10 b(rame)33 b(axis)h(v)-7 b(alues)152
-b Fz(TimeOrigin)0 4560 y Fd(Description:)44 b Fj(This)c(sp)r(eci\014es)
-f(the)g(origin)g(from)f(whic)n(h)i(all)f(time)g(v)-5
-b(alues)39 b(are)g(measured.)71 b(The)39 b(default)h(v)-5
-b(alue)227 4660 y(\(zero\))24 b(results)h(in)f(the)h(TimeF)-7
-b(rame)25 b(describing)e(absolute)h(time)i(v)-5 b(alues)24
-b(in)h(the)g(system)f(giv)n(en)g(b)n(y)g(the)h(System)227
-4759 y(attribute)33 b(\(e.g.)53 b(MJD,)33 b(Julian)f(ep)r(o)r(c)n(h,)j
-(etc\).)53 b(If)33 b(a)g(TimeF)-7 b(rame)32 b(is)h(to)f(b)r(e)i(used)f
-(to)f(describ)r(e)h(elapsed)f(time)227 4859 y(since)f(some)f(origin,)h
-(the)g(TimeOrigin)f(attribute)h(should)f(b)r(e)h(set)g(to)g(hold)g(the)
-g(required)f(origin)f(v)-5 b(alue.)47 b(The)227 4958
-y(TimeOrigin)18 b(v)-5 b(alue)19 b(stored)g(inside)g(the)h(TimeF)-7
-b(rame)18 b(structure)h(is)g(mo)r(di\014ed)h(whenev)n(er)e(TimeF)-7
-b(rame)18 b(attribute)227 5058 y(v)-5 b(alues)27 b(are)g(c)n(hanged)g
-(so)g(that)g(it)h(refers)f(to)h(the)g(original)e(momen)n(t)h(in)h
-(time.)0 5208 y Fd(T)m(yp)s(e:)227 5307 y Fj(Floating)f(p)r(oin)n(t.)0
-5457 y Fd(Class)k(Applicabilit)m(y:)259 5593 y(TimeF)-8
-b(rame)427 5693 y Fj(All)28 b(TimeF)-7 b(rames)27 b(ha)n(v)n(e)g(this)h
-(attribute.)p eop end
-%%Page: 472 482
-TeXDict begin 472 481 bop 0 52 a FF(472)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)-2 351 y
-Fd(Input)i(F)-8 b(ormats)n(:)227 497 y Fj(The)43 b(formats)f(accepted)h
-(when)g(setting)g(a)f(TimeOrigin)g(v)-5 b(alue)43 b(are)f(listed)h(b)r
-(elo)n(w.)83 b(They)42 b(are)g(all)h(case-)227 597 y(insensitiv)n(e)27
-b(and)h(are)f(generally)f(toleran)n(t)g(of)i(extra)e(white)i(space)f
-(and)h(alternativ)n(e)e(\014eld)i(delimiters:)340 879
-y Fi(\017)45 b Fj(Besselian)33 b(Ep)r(o)r(c)n(h:)48 b(Expressed)32
-b(in)i(decimal)f(y)n(ears,)h(with)g(or)e(without)i(decimal)g(places)f
-(\()p Ft(")p Fj(B1950)p Ft(")d Fj(or)427 978 y Ft(")p
-Fj(B1976.13)p Ft(")24 b Fj(for)j(example\).)340 1118
-y Fi(\017)45 b Fj(Julian)e(Ep)r(o)r(c)n(h:)67 b(Expressed)42
-b(in)h(decimal)g(y)n(ears,)i(with)e(or)g(without)g(decimal)g(places)f
-(\()p Ft(")p Fj(J2000)p Ft(")e Fj(or)427 1218 y Ft(")p
-Fj(J2100.9)p Ft(")24 b Fj(for)j(example\).)340 1357 y
-Fi(\017)45 b Fj(Units:)62 b(An)40 b(unquali\014ed)g(decimal)f(v)-5
-b(alue)39 b(is)h(in)n(terpreted)f(as)g(a)g(v)-5 b(alue)40
-b(in)g(the)g(system)f(sp)r(eci\014ed)h(b)n(y)427 1457
-y(the)35 b(TimeF)-7 b(rame's)34 b(System)h(attribute,)i(in)e(the)g
-(units)g(giv)n(en)f(b)n(y)g(the)h(TimeF)-7 b(rame's)34
-b(Unit)h(attribute.)427 1556 y(Alternativ)n(ely)-7 b(,)35
-b(an)f(appropriate)e(unit)j(string)e(can)g(b)r(e)i(app)r(ended)f(to)g
-(the)g(end)g(of)g(the)g(\015oating)f(p)r(oin)n(t)427
-1656 y(v)-5 b(alue)20 b(\()p Ft(")p Fj(123.4)d(d)p Ft(")i
-Fj(for)g(example\),)i(in)e(whic)n(h)h(case)e(the)i(supplied)g(v)-5
-b(alue)19 b(is)g(scaled)g(in)n(to)g(the)h(units)f(sp)r(eci\014ed)427
-1756 y(b)n(y)28 b(the)g(Unit)g(attribute.)340 1895 y
-Fi(\017)45 b Fj(Julian)27 b(Date:)38 b(With)28 b(or)f(without)h
-(decimal)f(places)g(\()p Ft(")p Fj(JD)h(2454321.9)p Ft(")23
-b Fj(for)k(example\).)340 2035 y Fi(\017)45 b Fj(Mo)r(di\014ed)28
-b(Julian)f(Date:)37 b(With)29 b(or)e(without)h(decimal)f(places)g(\()p
-Ft(")p Fj(MJD)h(54321.4)p Ft(")c Fj(for)j(example\).)340
-2175 y Fi(\017)45 b Fj(Gregorian)32 b(Calendar)g(Date:)48
-b(With)35 b(the)f(mon)n(th)f(expressed)f(either)i(as)e(an)h(in)n(teger)
-g(or)f(a)h(3-c)n(haracter)427 2275 y(abbreviation,)27
-b(and)g(with)i(optional)e(decimal)g(places)g(to)h(represen)n(t)f(a)g
-(fraction)g(of)h(a)f(da)n(y)g(\()p Ft(")p Fj(1996-10-2)p
-Ft(")427 2374 y Fj(or)f Ft(")p Fj(1996-Oct-2.6)p Ft(")d
-Fj(for)j(example\).)37 b(If)27 b(no)g(fractional)f(part)g(of)h(a)g(da)n
-(y)f(is)h(giv)n(en,)f(the)i(time)f(refers)f(to)h(the)427
-2474 y(start)g(of)h(the)g(da)n(y)f(\(zero)f(hours\).)340
-2613 y Fi(\017)45 b Fj(Gregorian)18 b(Date)h(and)g(Time:)33
-b(An)n(y)20 b(calendar)e(date)h(\(as)g(ab)r(o)n(v)n(e\))f(but)i(with)g
-(a)f(fraction)g(of)g(a)g(da)n(y)g(expressed)427 2713
-y(as)28 b(hours,)h(min)n(utes)g(and)f(seconds)g(\()p
-Ft(")p Fj(1996-Oct-2)e(12:13:56.985)p Ft(")e Fj(for)k(example\).)41
-b(The)29 b(date)f(and)h(time)427 2813 y(can)e(b)r(e)h(separated)f(b)n
-(y)g(a)g(space)g(or)g(b)n(y)g(a)g Ft(")p Fj(T)p Ft(")g
-Fj(\(as)g(used)h(b)n(y)f(ISO8601)f(format\).)-2 2988
-y Fd(Output)32 b(F)-8 b(ormat)n(:)227 3134 y Fj(When)27
-b(enquiring)e(TimeOrigin)g(v)-5 b(alues,)26 b(the)h(returned)e
-(formatted)h(\015oating)f(p)r(oin)n(t)i(v)-5 b(alue)26
-b(represen)n(ts)e(a)i(v)-5 b(alue)227 3234 y(in)28 b(the)g(TimeF)-7
-b(rame's)27 b(System,)h(in)g(the)g(unit)g(sp)r(eci\014ed)g(b)n(y)f(the)
-h(TimeF)-7 b(rame's)27 b(Unit)i(attribute.)p 0 3447 3780
-12 v 0 3579 a Fz(TimeScale)1014 b Fe(Time)38 b(scale)1013
-b Fz(TimeScale)0 3758 y Fd(Description:)44 b Fj(This)23
-b(attribute)g(iden)n(ti\014es)f(the)h(time)g(scale)f(to)h(whic)n(h)f
-(the)h(time)g(axis)f(v)-5 b(alues)22 b(of)h(a)f(TimeF)-7
-b(rame)22 b(refer,)227 3858 y(and)28 b(ma)n(y)f(tak)n(e)f(an)n(y)h(of)h
-(the)g(v)-5 b(alues)27 b(listed)h(in)g(the)g Ft(")p Fj(Time)f(Scales)p
-Ft(")g Fj(section)g(\(b)r(elo)n(w\).)227 3989 y(The)20
-b(default)g(TimeScale)g(v)-5 b(alue)19 b(dep)r(ends)i(on)e(the)h
-(curren)n(t)f(System)h(v)-5 b(alue;)22 b(if)e(the)h(curren)n(t)e(TimeF)
--7 b(rame)19 b(system)227 4089 y(is)31 b Ft(")p Fj(Besselian)e(ep)r(o)r
-(c)n(h)p Ft(")h Fj(the)h(default)g(is)f Ft(")p Fj(TT)p
-Ft(")p Fj(,)h(otherwise)e(it)i(is)g Ft(")p Fj(T)-7 b(AI)p
-Ft(")p Fj(.)45 b(Note,)31 b(if)g(the)g(System)g(attribute)g(is)227
-4188 y(set)23 b(so)g(that)g(the)g(TimeF)-7 b(rame)23
-b(represen)n(ts)f(Besselian)g(Ep)r(o)r(c)n(h,)h(then)h(an)f(error)e
-(will)i(b)r(e)g(rep)r(orted)g(if)g(an)g(attempt)227 4288
-y(is)28 b(made)f(to)h(set)f(the)h(TimeScale)f(to)h(an)n(ything)f(other)
-g(than)h(TT.)227 4419 y(Note,)22 b(the)e(supp)r(orted)g(time)h(scales)e
-(fall)h(in)n(to)f(t)n(w)n(o)h(groups.)33 b(The)20 b(\014rst)g(group)e
-(con)n(taining)h(UT1,)j(GMST,)e(LAST)227 4519 y(and)29
-b(LMST)h(de\014ne)f(time)h(in)f(terms)g(of)g(the)g(orien)n(tation)f(of)
-h(the)h(earth.)41 b(The)29 b(second)f(group)g(\(con)n(taining)h(all)227
-4619 y(the)k(remaining)f(time)h(scales\))f(de\014ne)h(time)g(in)g
-(terms)g(of)f(an)h(atomic)f(pro)r(cess.)51 b(Since)33
-b(the)g(rate)f(of)h(rotation)227 4718 y(of)28 b(the)h(earth)e(v)-5
-b(aries)27 b(in)h(an)g(unpredictable)g(w)n(a)n(y)-7 b(,)27
-b(con)n(v)n(ersion)f(b)r(et)n(w)n(een)i(t)n(w)n(o)f(timescales)h(in)g
-(di\013eren)n(t)g(groups)227 4818 y(relies)i(on)f(a)h(v)-5
-b(alue)30 b(b)r(eing)g(supplied)g(for)g(the)g(Dut1)h(attribute)f
-(\(de\014ned)g(b)n(y)g(the)g(paren)n(t)g(F)-7 b(rame)29
-b(class\).)44 b(This)227 4918 y(attribute)30 b(sp)r(eci\014es)g(the)g
-(di\013erence)f(b)r(et)n(w)n(een)h(the)g(UT1)f(and)h(UTC)f(time)i
-(scales,)e(in)h(seconds,)f(and)g(defaults)227 5017 y(to)f(zero.)36
-b(See)27 b(the)h(do)r(cumen)n(tation)f(for)g(the)h(Dut1)g(attribute)g
-(for)f(further)h(details.)0 5180 y Fd(T)m(yp)s(e:)227
-5280 y Fj(String.)0 5443 y Fd(Class)j(Applicabilit)m(y:)259
-5593 y(TimeF)-8 b(rame)427 5693 y Fj(All)28 b(TimeF)-7
-b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)p eop end
-%%Page: 473 483
-TeXDict begin 473 482 bop 3643 52 a FF(473)-2 351 y Fd(Time)31
-b(Scales)n(:)227 497 y Fj(The)d(TimeF)-7 b(rame)27 b(class)g(supp)r
-(orts)g(the)h(follo)n(wing)e(TimeScale)i(v)-5 b(alues)27
-b(\(all)h(are)e(case-insensitiv)n(e\):)340 759 y Fi(\017)45
-b Ft(")p Fj(T)-7 b(AI)p Ft(")27 b Fj(-)h(In)n(ternational)e(A)n(tomic)i
-(Time)340 892 y Fi(\017)45 b Ft(")p Fj(UTC)p Ft(")27
-b Fj(-)h(Co)r(ordinated)e(Univ)n(ersal)h(Time)340 1025
-y Fi(\017)45 b Ft(")p Fj(UT1)p Ft(")27 b Fj(-)g(Univ)n(ersal)g(Time)340
-1158 y Fi(\017)45 b Ft(")p Fj(GMST)p Ft(")27 b Fj(-)h(Green)n(wic)n(h)e
-(Mean)i(Sidereal)f(Time)340 1292 y Fi(\017)45 b Ft(")p
-Fj(LAST)p Ft(")27 b Fj(-)h(Lo)r(cal)f(Apparen)n(t)g(Sidereal)g(Time)340
-1425 y Fi(\017)45 b Ft(")p Fj(LMST)p Ft(")27 b Fj(-)h(Lo)r(cal)e(Mean)i
-(Sidereal)f(Time)340 1558 y Fi(\017)45 b Ft(")p Fj(TT)p
-Ft(")27 b Fj(-)g(T)-7 b(errestrial)26 b(Time)340 1691
-y Fi(\017)45 b Ft(")p Fj(TDB)p Ft(")27 b Fj(-)h(Barycen)n(tric)d
-(Dynamical)j(Time)340 1824 y Fi(\017)45 b Ft(")p Fj(TCB)p
-Ft(")27 b Fj(-)g(Barycen)n(tric)f(Co)r(ordinate)g(Time)340
-1957 y Fi(\017)45 b Ft(")p Fj(TCG)p Ft(")27 b Fj(-)h(Geo)r(cen)n(tric)e
-(Co)r(ordinate)h(Time)340 2090 y Fi(\017)45 b Ft(")p
-Fj(L)-7 b(T)p Ft(")27 b Fj(-)g(Lo)r(cal)g(Time)h(\(the)g(o\013set)g
-(from)f(UTC)h(is)f(giv)n(en)g(b)n(y)h(attribute)f(L)-7
-b(TO\013set\))227 2253 y(An)19 b(v)n(ery)e(informativ)n(e)h
-(description)g(of)g(these)g(and)h(other)e(time)i(scales)f(is)g(a)n(v)-5
-b(ailable)17 b(at)h(h)n(ttp://www.ucolic)n(k.org/)p Fi(\030)p
-Fj(sla/leapsecs/timesca)o(les.h)n(tml.)-2 2403 y Fd(UTC)33
-b(W)-8 b(arnings)n(:)227 2549 y Fj(UTC)31 b(should)g(ideally)f(b)r(e)h
-(expressed)f(using)g(separate)g(hours,)g(min)n(utes)h(and)g(seconds)f
-(\014elds)g(\(or)g(at)h(least)f(in)227 2648 y(seconds)e(for)f(a)h(giv)n
-(en)g(date\))g(if)h(leap)f(seconds)f(are)g(to)h(b)r(e)h(tak)n(en)f(in)n
-(to)g(accoun)n(t.)38 b(Since)28 b(the)h(TimeF)-7 b(rame)28
-b(class)227 2748 y(represen)n(ts)e(eac)n(h)f(momen)n(t)i(in)g(time)g
-(using)g(a)f(single)g(\015oating)g(p)r(oin)n(t)h(n)n(um)n(b)r(er)g
-(\(the)g(axis)f(v)-5 b(alue\))27 b(there)f(will)h(b)r(e)227
-2848 y(an)f(am)n(biguit)n(y)f(during)g(a)h(leap)g(second.)35
-b(Th)n(us)26 b(an)g(error)e(of)i(up)g(to)g(1)f(second)g(can)h(result)g
-(when)g(using)f(AST)i(to)227 2947 y(con)n(v)n(ert)i(a)h(UTC)h(time)f
-(to)h(another)e(time)i(scale)e(if)i(the)g(time)g(o)r(ccurs)e(within)i
-(a)f(leap)g(second.)45 b(Leap)29 b(seconds)227 3047 y(o)r(ccur)f(at)h
-(most)g(t)n(wice)f(a)h(y)n(ear,)e(and)i(are)f(in)n(tro)r(duced)g(to)h
-(tak)n(e)f(accoun)n(t)g(of)h(v)-5 b(ariation)28 b(in)h(the)g(rotation)e
-(of)i(the)227 3147 y(earth.)35 b(The)22 b(most)g(recen)n(t)f(leap)h
-(second)f(o)r(ccurred)g(on)h(1st)f(Jan)n(uary)f(1999.)33
-b(Although)23 b(in)f(the)g(v)-5 b(ast)22 b(ma)5 b(jorit)n(y)21
-b(of)227 3246 y(cases)g(leap)h(second)g(am)n(biguities)f(w)n(on't)h
-(matter,)h(there)f(are)f(p)r(oten)n(tial)h(problems)g(in)g(on-line)g
-(data)f(acquisition)227 3346 y(systems)27 b(and)h(in)g(critical)f
-(applications)f(in)n(v)n(olving)g(taking)h(the)h(di\013erence)g(b)r(et)
-n(w)n(een)g(t)n(w)n(o)e(times.)p 0 3546 3780 12 v 0 3677
-a Fz(Title)1325 b Fe(F)-10 b(rame)38 b(title)1323 b Fz(Title)0
-3848 y Fd(Description:)44 b Fj(This)25 b(attribute)g(holds)g(a)f
-(string)g(whic)n(h)h(is)g(used)f(as)h(a)f(title)i(in)f(\(e.g.\))36
-b(graphical)23 b(output)i(to)g(describ)r(e)227 3948 y(the)32
-b(co)r(ordinate)d(system)i(whic)n(h)g(a)f(F)-7 b(rame)31
-b(represen)n(ts.)45 b(Examples)30 b(migh)n(t)h(b)r(e)g
-Ft(")p Fj(Detector)f(Co)r(ordinates)p Ft(")f Fj(or)227
-4047 y Ft(")p Fj(Galactic)e(Co)r(ordinates)p Ft(")p Fj(.)227
-4172 y(If)g(a)f(Title)h(v)-5 b(alue)26 b(has)g(not)g(b)r(een)h(set)f
-(for)g(a)g(F)-7 b(rame,)26 b(then)g(a)g(suitable)h(default)f(is)h
-(supplied,)g(dep)r(ending)f(on)g(the)227 4272 y(class)h(of)g(the)h(F)-7
-b(rame.)0 4422 y Fd(T)m(yp)s(e:)227 4521 y Fj(String.)0
-4671 y Fd(Class)31 b(Applicabilit)m(y:)259 4808 y(F)-8
-b(rame)427 4908 y Fj(The)33 b(default)g(supplied)g(b)n(y)f(the)h(F)-7
-b(rame)32 b(class)g(is)g Ft(")p Fl(<)p Fj(n)p Fl(>)p
-Fj(-d)f(co)r(ordinate)h(system)p Ft(")p Fj(,)h(where)f
-Fl(<)p Fj(n)p Fl(>)g Fj(is)g(the)427 5008 y(n)n(um)n(b)r(er)c(of)f(F)-7
-b(rame)27 b(axes)g(\(Naxes)g(attribute\).)259 5141 y
-Fd(CmpF)-8 b(rame)427 5240 y Fj(The)30 b(CmpF)-7 b(rame)30
-b(class)f(re-de\014nes)g(the)h(default)h(Title)f(v)-5
-b(alue)30 b(to)g(b)r(e)g Ft(")p Fl(<)p Fj(n)p Fl(>)p
-Fj(-d)f(comp)r(ound)h(co)r(ordinate)427 5340 y(system)p
-Ft(")p Fj(,)d(where)g Fl(<)p Fj(n)p Fl(>)g Fj(is)h(the)g(n)n(um)n(b)r
-(er)f(of)h(CmpF)-7 b(rame)27 b(axes)g(\(Naxes)g(attribute\).)259
-5473 y Fd(F)-8 b(rameSet)427 5573 y Fj(The)32 b(Title)g(attribute)f(of)
-h(a)f(F)-7 b(rameSet)31 b(is)h(the)g(same)f(as)f(that)i(of)g(its)f
-(curren)n(t)g(F)-7 b(rame)31 b(\(as)g(sp)r(eci\014ed)h(b)n(y)427
-5672 y(the)c(Curren)n(t)f(attribute\).)p eop end
-%%Page: 474 484
-TeXDict begin 474 483 bop 0 52 a FF(474)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fd(Notes:)340 688 y Fi(\017)45 b Fj(A)28 b(F)-7 b(rame's)26
-b(Title)h(is)g(in)n(tended)h(purely)e(for)h(in)n(terpretation)f(b)n(y)h
-(h)n(uman)f(readers)g(and)h(not)g(b)n(y)f(soft)n(w)n(are.)p
-0 942 3780 12 v 0 1074 a Fz(TitleGap)567 b Fe(V)-10 b(ertical)36
-b(spacing)i(for)g(a)h(Plot)e(title)564 b Fz(TitleGap)0
-1322 y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 1421 y(astGrid)d(function\))i(b)n(y)e(determining)
-h(where)f(the)h(title)g(of)f(a)h(Plot)f(is)g(dra)n(wn.)227
-1573 y(Its)32 b(v)-5 b(alue)31 b(giv)n(es)g(the)h(spacing)e(b)r(et)n(w)
-n(een)i(the)g(b)r(ottom)f(edge)g(of)h(the)g(title)g(and)f(the)h(top)g
-(edge)f(of)g(a)h(b)r(ounding)227 1673 y(b)r(o)n(x)23
-b(con)n(taining)f(all)h(the)h(other)f(parts)f(of)i(the)f(annotated)g
-(grid.)35 b(P)n(ositiv)n(e)22 b(v)-5 b(alues)22 b(cause)h(the)h(title)g
-(to)f(b)r(e)h(dra)n(wn)227 1772 y(outside)k(the)g(b)r(o)n(x,)f(while)h
-(negativ)n(e)e(v)-5 b(alues)27 b(cause)g(it)h(to)g(b)r(e)g(dra)n(wn)e
-(inside.)227 1924 y(The)j(TitleGap)f(v)-5 b(alue)28 b(should)h(b)r(e)f
-(giv)n(en)g(as)g(a)f(fraction)h(of)h(the)f(minim)n(um)h(dimension)g(of)
-f(the)h(plotting)f(area,)227 2024 y(the)g(default)g(v)-5
-b(alue)28 b(b)r(eing)f(+0.05.)0 2227 y Fd(T)m(yp)s(e:)227
-2327 y Fj(Floating)g(p)r(oin)n(t.)0 2531 y Fd(Class)k(Applicabilit)m
-(y:)259 2722 y(Plot)427 2821 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)259 2982 y Fd(Plot3D)427 3081 y Fj(The)h(Plot3D)f(class)g
-(ignores)f(this)h(attributes)h(since)f(it)h(do)r(es)g(not)f(dra)n(w)g
-(a)g(Title.)0 3298 y Fd(Notes:)340 3634 y Fi(\017)45
-b Fj(The)28 b(text)g(used)f(for)h(the)g(title)g(is)f(obtained)h(from)f
-(the)h(Plot's)f(Title)h(attribute.)p 0 3888 V 0 4020
-a Fz(T)-11 b(ol)1243 b Fe(Plotting)36 b(tolerance)1242
-b Fz(T)-11 b(ol)0 4268 y Fd(Description:)44 b Fj(This)28
-b(attribute)f(sp)r(eci\014es)h(the)f(plotting)h(tolerance)e(\(or)h
-(resolution\))f(to)h(b)r(e)h(used)g(for)e(the)i(graphical)227
-4367 y(output)f(pro)r(duced)e(b)n(y)g(a)h(Plot.)35 b(Smaller)26
-b(v)-5 b(alues)25 b(will)h(result)f(in)h(smo)r(other)f(and)h(more)f
-(accurate)f(curv)n(es)h(b)r(eing)227 4467 y(dra)n(wn,)c(but)f(ma)n(y)f
-(slo)n(w)f(do)n(wn)h(the)h(plotting)g(pro)r(cess.)33
-b(Con)n(v)n(ersely)-7 b(,)19 b(larger)f(v)-5 b(alues)19
-b(ma)n(y)g(sp)r(eed)h(up)g(the)g(plotting)227 4567 y(pro)r(cess)27
-b(in)h(cases)e(where)h(high)h(resolution)e(is)i(not)f(required.)227
-4718 y(The)k(T)-7 b(ol)31 b(v)-5 b(alue)31 b(should)g(b)r(e)h(giv)n(en)
-e(as)h(a)f(fraction)h(of)g(the)g(minim)n(um)h(dimension)f(of)g(the)h
-(plotting)f(area,)g(and)227 4818 y(should)d(lie)f(in)h(the)g(range)e
-(from)i(1.0e-7)e(to)h(1.0.)36 b(By)27 b(default,)h(a)g(v)-5
-b(alue)27 b(of)h(0.01)e(is)h(used.)0 5022 y Fd(T)m(yp)s(e:)227
-5122 y Fj(Floating)g(p)r(oin)n(t.)0 5325 y Fd(Class)k(Applicabilit)m
-(y:)259 5516 y(Plot)427 5616 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)p eop end
-%%Page: 475 485
-TeXDict begin 475 484 bop 3643 52 a FF(475)p 0 351 3780
-12 v 0 490 a Fz(T)-11 b(op\(axis\))1156 483 y Fe(Highest)37
-b(axis)h(v)-7 b(alue)39 b(to)f(displa)m(y)3224 490 y
-Fz(T)-11 b(op\(axis\))0 717 y Fd(Description:)44 b Fj(This)32
-b(attribute)g(giv)n(es)e(the)i(highest)f(axis)g(v)-5
-b(alue)31 b(to)h(b)r(e)g(displa)n(y)n(ed)e(\(for)i(instance,)g(b)n(y)f
-(the)h(astGrid)227 816 y(metho)r(d\).)0 993 y Fd(T)m(yp)s(e:)227
-1093 y Fj(Floating)27 b(p)r(oin)n(t.)0 1269 y Fd(Class)k(Applicabilit)m
-(y:)259 1433 y(F)-8 b(rame)427 1532 y Fj(The)28 b(default)g(supplied)g
-(b)n(y)f(the)h(F)-7 b(rame)27 b(class)g(is)g(to)h(displa)n(y)f(all)g
-(axis)g(v)-5 b(alues,)27 b(without)h(an)n(y)f(limit.)259
-1679 y Fd(SkyF)-8 b(rame)427 1778 y Fj(The)34 b(SkyF)-7
-b(rame)32 b(class)g(re-de\014nes)h(the)g(default)h(T)-7
-b(op)33 b(v)-5 b(alue)33 b(to)g(+90)f(degrees)g(for)g(latitude)i(axes,)
-g(and)427 1878 y(180)26 b(degrees)g(for)h(co-latitude)g(axes.)36
-b(The)28 b(default)f(for)g(longitude)h(axes)e(is)h(to)h(displa)n(y)e
-(all)h(axis)g(v)-5 b(alues.)0 2067 y Fd(Notes:)340 2376
-y Fi(\017)45 b Fj(When)36 b(sp)r(ecifying)f(this)h(attribute)f(b)n(y)g
-(name,)i(it)f(should)f(b)r(e)h(subscripted)f(with)g(the)h(n)n(um)n(b)r
-(er)f(of)g(the)427 2476 y(F)-7 b(rame)27 b(axis)g(to)h(whic)n(h)f(it)h
-(applies.)p 0 2702 V 0 2834 a Fz(T)-11 b(ranF)g(orw)l(ard)289
-b Fe(F)-10 b(orw)m(ard)37 b(transformation)e(de\014ned?)290
-b Fz(T)-11 b(ranF)g(orw)l(ard)0 3027 y Fd(Description:)44
-b Fj(This)29 b(attribute)f(indicates)h(whether)f(a)g(Mapping)g(is)h
-(able)f(to)g(transform)f(co)r(ordinates)g(in)i(the)g
-Ft(")p Fj(for-)227 3126 y(w)n(ard)p Ft(")34 b Fj(direction)g(\(i.e.)60
-b(con)n(v)n(erting)33 b(input)i(co)r(ordinates)f(in)n(to)h(output)g(co)
-r(ordinates\).)58 b(If)35 b(this)h(attribute)f(is)227
-3226 y(non-zero,)26 b(the)i(forw)n(ard)e(transformation)g(is)i(a)n(v)-5
-b(ailable.)35 b(Otherwise,)27 b(it)h(is)f(not.)0 3402
-y Fd(T)m(yp)s(e:)227 3502 y Fj(In)n(teger)g(\(b)r(o)r(olean\),)h
-(read-only)-7 b(.)0 3679 y Fd(Class)31 b(Applicabilit)m(y:)259
-3842 y(Mapping)427 3942 y Fj(All)d(Mappings)f(ha)n(v)n(e)g(this)h
-(attribute.)259 4088 y Fd(CmpMap)427 4188 y Fj(The)j(T)-7
-b(ranF)g(orw)n(ard)28 b(attribute)j(v)-5 b(alue)30 b(for)h(a)f(CmpMap)h
-(is)f(giv)n(en)g(b)n(y)g(the)h(b)r(o)r(olean)f(AND)i(of)f(the)g(v)-5
-b(alue)427 4287 y(for)27 b(eac)n(h)g(comp)r(onen)n(t)g(Mapping.)259
-4434 y Fd(F)-8 b(rameSet)427 4533 y Fj(The)31 b(T)-7
-b(ranF)g(orw)n(ard)27 b(attribute)k(of)f(a)g(F)-7 b(rameSet)30
-b(applies)g(to)g(the)h(transformation)e(whic)n(h)h(con)n(v)n(erts)f(b)r
-(e-)427 4633 y(t)n(w)n(een)22 b(the)g(F)-7 b(rameSet's)22
-b(base)f(F)-7 b(rame)22 b(and)g(its)g(curren)n(t)f(F)-7
-b(rame)21 b(\(as)h(sp)r(eci\014ed)g(b)n(y)g(the)g(Base)g(and)f(Curren)n
-(t)427 4733 y(attributes\).)37 b(This)27 b(v)-5 b(alue)27
-b(is)g(giv)n(en)g(b)n(y)g(the)g(b)r(o)r(olean)g(AND)h(of)f(the)h(T)-7
-b(ranF)g(orw)n(ard)24 b(v)-5 b(alues)27 b(whic)n(h)g(apply)427
-4832 y(to)33 b(eac)n(h)f(of)g(the)h(individual)g(sub-Mappings)f
-(required)f(to)i(p)r(erform)f(this)h(con)n(v)n(ersion.)50
-b(The)32 b(T)-7 b(ranF)g(or-)427 4932 y(w)n(ard)25 b(attribute)h(v)-5
-b(alue)26 b(for)g(a)f(F)-7 b(rameSet)26 b(ma)n(y)f(therefore)g(c)n
-(hange)g(if)h(a)g(new)g(Base)f(or)g(Curren)n(t)g(F)-7
-b(rame)26 b(is)427 5031 y(selected.)0 5220 y Fd(Notes:)340
-5530 y Fi(\017)45 b Fj(An)38 b(error)e(will)i(result)f(if)h(a)f
-(Mapping)h(with)g(a)f(T)-7 b(ranF)g(orw)n(ard)35 b(v)-5
-b(alue)37 b(of)h(zero)e(is)i(used)f(to)h(transform)427
-5630 y(co)r(ordinates)26 b(in)i(the)g(forw)n(ard)e(direction.)p
-eop end
-%%Page: 476 486
-TeXDict begin 476 485 bop 0 52 a FF(476)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 482 a Fz(T)-11 b(ranIn)l(v)l(erse)1083 483
-y Fe(In)m(v)m(erse)38 b(transformation)c(de\014ned?)3083
-482 y Fz(T)-11 b(ranIn)l(v)l(erse)0 652 y Fd(Description:)44
-b Fj(This)31 b(attribute)g(indicates)g(whether)f(a)h(Mapping)f(is)h
-(able)f(to)h(transform)f(co)r(ordinates)f(in)i(the)g
-Ft(")p Fj(in-)227 751 y(v)n(erse)p Ft(")26 b Fj(direction)i(\(i.e.)38
-b(con)n(v)n(erting)26 b(output)j(co)r(ordinates)d(bac)n(k)h(in)n(to)h
-(input)g(co)r(ordinates\).)37 b(If)28 b(this)g(attribute)227
-851 y(is)g(non-zero,)e(the)i(in)n(v)n(erse)e(transformation)g(is)h(a)n
-(v)-5 b(ailable.)36 b(Otherwise,)27 b(it)h(is)f(not.)0
-1003 y Fd(T)m(yp)s(e:)227 1103 y Fj(In)n(teger)g(\(b)r(o)r(olean\),)h
-(readonly)-7 b(.)0 1256 y Fd(Class)31 b(Applicabilit)m(y:)259
-1395 y(Mapping)427 1495 y Fj(All)d(Mappings)f(ha)n(v)n(e)g(this)h
-(attribute.)259 1629 y Fd(CmpMap)427 1729 y Fj(The)e(T)-7
-b(ranIn)n(v)n(erse)23 b(attribute)i(v)-5 b(alue)25 b(for)g(a)g(CmpMap)g
-(is)h(giv)n(en)e(b)n(y)h(the)h(b)r(o)r(olean)f(AND)h(of)f(the)h(v)-5
-b(alue)25 b(for)427 1828 y(eac)n(h)i(comp)r(onen)n(t)g(Mapping.)259
-1963 y Fd(F)-8 b(rameSet)427 2062 y Fj(The)19 b(T)-7
-b(ranIn)n(v)n(erse)17 b(attribute)i(of)g(a)g(F)-7 b(rameSet)19
-b(applies)g(to)f(the)i(transformation)d(whic)n(h)i(con)n(v)n(erts)f(b)r
-(et)n(w)n(een)427 2162 y(the)39 b(F)-7 b(rameSet's)38
-b(curren)n(t)g(F)-7 b(rame)38 b(and)g(its)g(base)g(F)-7
-b(rame)38 b(\(as)g(sp)r(eci\014ed)h(b)n(y)f(the)h(Curren)n(t)e(and)i
-(Base)427 2262 y(attributes\).)45 b(This)30 b(v)-5 b(alue)30
-b(is)f(giv)n(en)h(b)n(y)f(the)i(b)r(o)r(olean)e(AND)i(of)f(the)h(T)-7
-b(ranIn)n(v)n(erse)27 b(v)-5 b(alues)30 b(whic)n(h)g(apply)427
-2361 y(to)25 b(eac)n(h)e(of)i(the)g(individual)f(sub-Mappings)g
-(required)g(to)g(p)r(erform)g(this)h(con)n(v)n(ersion.)33
-b(The)25 b(T)-7 b(ranIn)n(v)n(erse)427 2461 y(attribute)40
-b(v)-5 b(alue)39 b(for)g(a)h(F)-7 b(rameSet)39 b(ma)n(y)g(therefore)f
-(c)n(hange)h(if)h(a)f(new)h(Base)e(or)h(Curren)n(t)g(F)-7
-b(rame)39 b(is)427 2560 y(selected.)0 2725 y Fd(Notes:)340
-3011 y Fi(\017)45 b Fj(An)c(error)e(will)h(result)g(if)h(a)f(Mapping)g
-(with)h(a)f(T)-7 b(ranIn)n(v)n(erse)38 b(v)-5 b(alue)40
-b(of)h(zero)e(is)h(used)h(to)f(transform)427 3111 y(co)r(ordinates)26
-b(in)i(the)g(in)n(v)n(erse)e(direction.)p 0 3313 V 0
-3451 a Fz(Unit\(axis\))1404 3445 y Fe(Axis)39 b(ph)m(ysical)e(units)
-3180 3451 y Fz(Unit\(axis\))0 3650 y Fd(Description:)44
-b Fj(This)35 b(attribute)f(con)n(tains)f(a)h(textual)g(represen)n
-(tation)f(of)h(the)h(ph)n(ysical)e(units)i(used)f(to)g(represen)n(t)227
-3749 y(co)r(ordinate)24 b(v)-5 b(alues)25 b(on)g(a)f(particular)g(axis)
-g(of)i(a)e(F)-7 b(rame.)36 b(The)25 b(astSetActiv)n(eUnit)h(function)f
-(con)n(trols)f(ho)n(w)g(the)227 3849 y(Unit)29 b(v)-5
-b(alues)27 b(are)g(used.)0 4002 y Fd(T)m(yp)s(e:)227
-4101 y Fj(String.)0 4254 y Fd(Class)k(Applicabilit)m(y:)259
-4393 y(F)-8 b(rame)427 4493 y Fj(The)28 b(default)g(supplied)g(b)n(y)f
-(the)h(F)-7 b(rame)27 b(class)g(is)g(an)h(empt)n(y)f(string.)259
-4627 y Fd(SkyF)-8 b(rame)427 4727 y Fj(The)24 b(SkyF)-7
-b(rame)24 b(class)f(re-de\014nes)g(the)h(default)h(Unit)g(v)-5
-b(alue)24 b(\(e.g.)35 b(to)24 b Ft(")p Fj(hh:mm:ss.sss)p
-Ft(")p Fj(\))g(to)f(describ)r(e)h(the)427 4826 y(c)n(haracter)i(string)
-h(returned)g(b)n(y)g(the)h(astF)-7 b(ormat)27 b(function)h(when)g
-(formatting)f(co)r(ordinate)f(v)-5 b(alues.)259 4961
-y Fd(Sp)s(ecF)d(rame)427 5060 y Fj(The)24 b(Sp)r(ecF)-7
-b(rame)23 b(class)g(re-de\014nes)f(the)i(default)g(Unit)g(v)-5
-b(alue)24 b(so)f(that)g(it)h(is)g(appropriate)e(for)h(the)g(curren)n(t)
-427 5160 y(System)30 b(v)-5 b(alue.)43 b(See)29 b(the)h(System)g
-(attribute)g(for)f(details.)42 b(An)30 b(error)e(will)i(b)r(e)g(rep)r
-(orted)f(if)h(an)f(attempt)427 5260 y(is)f(made)f(to)h(use)f(an)g
-(inappropriate)f(Unit.)259 5394 y Fd(TimeF)-8 b(rame)427
-5494 y Fj(The)22 b(TimeF)-7 b(rame)22 b(class)f(re-de\014nes)h(the)g
-(default)h(Unit)g(v)-5 b(alue)22 b(so)f(that)h(it)h(is)f(appropriate)e
-(for)i(the)g(curren)n(t)427 5593 y(System)30 b(v)-5 b(alue.)43
-b(See)29 b(the)h(System)g(attribute)g(for)f(details.)42
-b(An)30 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)h(an)f(attempt)427
-5693 y(is)f(made)f(to)h(use)f(an)g(inappropriate)f(Unit)j(\(e.g.)37
-b Ft(")p Fj(km)p Ft(")p Fj(\).)p eop end
-%%Page: 477 487
-TeXDict begin 477 486 bop 3643 52 a FF(477)259 351 y
-Fd(F)-8 b(rameSet)427 451 y Fj(The)29 b(Unit)h(attribute)f(of)g(a)g(F)
--7 b(rameSet)29 b(axis)f(is)h(the)h(same)e(as)g(that)i(of)f(its)g
-(curren)n(t)f(F)-7 b(rame)29 b(\(as)f(sp)r(eci\014ed)427
-551 y(b)n(y)g(the)g(Curren)n(t)e(attribute\).)0 717 y
-Fd(Notes:)340 1004 y Fi(\017)45 b Fj(When)36 b(sp)r(ecifying)f(this)h
-(attribute)f(b)n(y)g(name,)i(it)f(should)f(b)r(e)h(subscripted)f(with)g
-(the)h(n)n(um)n(b)r(er)f(of)g(the)427 1103 y(F)-7 b(rame)27
-b(axis)g(to)h(whic)n(h)f(it)h(applies.)p 0 1307 3780
-12 v 0 1439 a Fz(UnitRadius)318 b Fe(SphMap)39 b(input)f(v)m(ectors)g
-(lie)g(on)g(a)h(unit)1699 1553 y(sphere?)3106 1439 y
-Fz(UnitRadius)0 1747 y Fd(Description:)44 b Fj(This)30
-b(is)f(a)g(b)r(o)r(olean)g(attribute)h(whic)n(h)f(indicates)h(whether)f
-(the)h(3-dimensional)e(v)n(ectors)g(whic)n(h)i(are)227
-1846 y(supplied)i(as)f(input)i(to)e(a)g(SphMap)h(are)f(kno)n(wn)g(to)g
-(alw)n(a)n(ys)f(ha)n(v)n(e)g(unit)i(length,)h(so)e(that)h(they)g(lie)f
-(on)h(a)f(unit)227 1946 y(sphere)c(cen)n(tred)g(on)h(the)g(origin.)227
-2073 y(If)36 b(this)h(condition)e(is)h(true)g(\(indicated)g(b)n(y)f
-(setting)h(UnitRadius)g(non-zero\),)h(it)f(implies)g(that)g(a)g(CmpMap)
-227 2172 y(whic)n(h)e(is)g(comp)r(osed)f(of)h(a)g(SphMap)g(applied)g
-(in)g(the)g(forw)n(ard)f(direction)g(follo)n(w)n(ed)g(b)n(y)h(a)f
-(similar)g(SphMap)227 2272 y(applied)24 b(in)f(the)h(in)n(v)n(erse)d
-(direction)i(ma)n(y)g(b)r(e)h(simpli\014ed)f(\(e.g.)36
-b(b)n(y)23 b(astSimplify\))g(to)h(b)r(ecome)f(a)g(UnitMap.)36
-b(This)227 2371 y(is)23 b(b)r(ecause)g(the)h(input)g(and)f(output)h(v)n
-(ectors)e(will)h(b)r(oth)h(ha)n(v)n(e)e(unit)i(length)f(and)h(will)f
-(therefore)f(ha)n(v)n(e)h(the)g(same)227 2471 y(co)r(ordinate)k(v)-5
-b(alues.)227 2598 y(If)35 b(UnitRadius)g(is)g(zero)e(\(the)j
-(default\),)h(then)e(although)f(the)h(output)g(v)n(ector)e(pro)r(duced)
-h(b)n(y)h(the)g(CmpMap)227 2697 y(\(ab)r(o)n(v)n(e\))25
-b(will)g(still)g(ha)n(v)n(e)f(unit)i(length,)g(the)f(input)h(v)n(ector)
-e(ma)n(y)g(not)h(ha)n(v)n(e.)35 b(This)25 b(will,)h(in)f(general,)f(c)n
-(hange)g(the)227 2797 y(co)r(ordinate)j(v)-5 b(alues,)27
-b(so)g(it)h(prev)n(en)n(ts)e(the)i(pair)f(of)h(SphMaps)f(b)r(eing)h
-(simpli\014ed.)0 2951 y Fd(T)m(yp)s(e:)227 3051 y Fj(In)n(teger)f(\(b)r
-(o)r(olean\).)0 3204 y Fd(Class)k(Applicabilit)m(y:)259
-3345 y(SphMap)427 3445 y Fj(All)d(SphMaps)g(ha)n(v)n(e)e(this)i
-(attribute.)0 3611 y Fd(Notes:)340 3898 y Fi(\017)45
-b Fj(This)28 b(attribute)g(is)g(in)n(tended)h(mainly)e(for)h(use)g
-(when)g(SphMaps)g(are)e(in)n(v)n(olv)n(ed)h(in)h(a)g(sequence)f(of)h
-(Map-)427 3998 y(pings)35 b(whic)n(h)g(pro)5 b(ject)34
-b(\(e.g.\))59 b(a)35 b(dataset)f(on)h(to)g(the)g(celestial)g(sphere.)58
-b(By)35 b(regarding)e(the)i(celestial)427 4097 y(sphere)24
-b(as)f(a)h(unit)h(sphere)e(\(and)h(setting)g(UnitRadius)h(to)f(b)r(e)g
-(non-zero\))f(it)i(b)r(ecomes)e(p)r(ossible)h(to)g(cancel)427
-4197 y(the)31 b(SphMaps)g(presen)n(t,)f(along)g(with)h(asso)r(ciated)e
-(sky)h(pro)5 b(jections,)30 b(when)g(t)n(w)n(o)g(datasets)g(are)f
-(aligned)427 4297 y(using)f(celestial)f(co)r(ordinates.)35
-b(This)28 b(often)g(considerably)e(impro)n(v)n(es)f(p)r(erformance.)340
-4432 y Fi(\017)45 b Fj(Suc)n(h)29 b(a)g(situations)f(often)i(arises)d
-(when)i(in)n(terpreting)f(FITS)i(data)e(and)h(is)g(handled)g
-(automatically)f(b)n(y)427 4531 y(the)g(FitsChan)g(class.)340
-4666 y Fi(\017)45 b Fj(The)28 b(v)-5 b(alue)27 b(of)g(the)h(UnitRadius)
-g(attribute)g(is)f(used)g(only)g(to)h(con)n(trol)e(the)i
-(simpli\014cation)f(of)g(Mappings)427 4766 y(and)i(has)f(no)h(e\013ect)
-g(on)g(the)g(v)-5 b(alue)28 b(of)h(the)g(co)r(ordinates)f(transformed)f
-(b)n(y)i(a)f(SphMap.)41 b(The)29 b(lengths)g(of)427 4866
-y(the)f(input)f(3-dimensional)f(Cartesian)f(v)n(ectors)h(supplied)h
-(are)f(alw)n(a)n(ys)f(ignored,)h(ev)n(en)g(if)h(UnitRadius)h(is)427
-4965 y(non-zero.)p 0 5169 V 0 5301 a Fz(UseDefs)262 b
-Fe(Use)39 b(default)f(v)-7 b(alues)38 b(for)g(unsp)s(eci\014ed)h
-(attributes?)259 b Fz(UseDefs)0 5494 y Fd(Description:)44
-b Fj(This)36 b(attribute)h(sp)r(eci\014es)e(whether)h(default)h(v)-5
-b(alues)35 b(should)h(b)r(e)h(used)f(in)n(ternally)f(for)g(ob)5
-b(ject)36 b(at-)227 5593 y(tributes)41 b(whic)n(h)g(ha)n(v)n(e)f(not)h
-(b)r(een)g(assigned)f(a)h(v)-5 b(alue)40 b(explicitly)-7
-b(.)77 b(If)42 b(a)e(non-zero)g(v)-5 b(alue)40 b(\(the)i(default\))g
-(is)227 5693 y(supplied)26 b(for)f(UseDefs,)h(then)g(default)g(v)-5
-b(alues)24 b(will)i(b)r(e)g(used)f(for)g(attributes)g(whic)n(h)g(ha)n
-(v)n(e)f(not)i(explicitly)f(b)r(een)p eop end
-%%Page: 478 488
-TeXDict begin 478 487 bop 0 52 a FF(478)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fj(assigned)c(a)h(v)-5 b(alue.)39 b(If)29 b(zero)f(is)g(supplied)g
-(for)g(UseDefs,)h(then)g(an)f(error)f(will)h(b)r(e)h(rep)r(orted)f(if)h
-(an)f(attribute)g(for)227 451 y(whic)n(h)g(no)f(explicit)h(v)-5
-b(alue)27 b(has)h(b)r(een)g(supplied)f(is)h(needed)g(in)n(ternally)f
-(within)h(AST.)227 576 y(Man)n(y)20 b(attributes)g(\(including)g(the)h
-(UseDefs)g(attribute)f(itself)6 b(\))21 b(are)e(una\013ected)i(b)n(y)f
-(the)g(setting)h(of)f(the)g(UseDefs)227 675 y(attribute,)28
-b(and)g(default)g(v)-5 b(alues)27 b(will)h(alw)n(a)n(ys)e(b)r(e)i(used)
-g(without)g(error)e(for)h(suc)n(h)g(attributes.)37 b(The)28
-b Ft(")p Fj(Applica-)227 775 y(bilit)n(y:)p Ft(")g Fj(section)f(b)r
-(elo)n(w)g(lists)h(the)g(attributes)f(whic)n(h)h(are)e(a\013ected)i(b)n
-(y)f(the)h(setting)g(of)g(UseDefs.)227 900 y(Note,)23
-b(UseDefs)f(only)f(a\013ects)g(access)f(to)i(attributes)f(in)n
-(ternally)g(within)h(AST.)g(The)f(public)h(accessor)d(functions)227
-999 y(suc)n(h)29 b(as)f(astGetC)h(is)g(una\013ected)g(b)n(y)g(the)g
-(UseDefs)h(attribute)f(-)g(default)g(v)-5 b(alues)29
-b(will)g(alw)n(a)n(ys)e(b)r(e)j(returned)e(if)227 1099
-y(no)e(v)-5 b(alue)25 b(has)h(b)r(een)g(set.)36 b(Application)26
-b(co)r(de)g(should)f(use)h(the)g(astT)-7 b(est)25 b(function)i(if)f
-(required)f(to)g(determine)h(if)227 1198 y(a)h(v)-5 b(alue)28
-b(has)f(b)r(een)h(set)g(for)f(an)g(attribute.)0 1348
-y Fd(T)m(yp)s(e:)227 1448 y Fj(In)n(teger)g(\(b)r(o)r(olean\).)0
-1598 y Fd(Class)k(Applicabilit)m(y:)259 1734 y(Ob)5 b(ject)427
-1834 y Fj(All)24 b(Ob)5 b(jects)22 b(ha)n(v)n(e)g(this)i(attribute,)g
-(but)g(ignore)d(its)j(setting)f(except)g(as)f(describ)r(ed)h(b)r(elo)n
-(w)g(for)f(individual)427 1934 y(classes.)259 2066 y
-Fd(F)-8 b(rameSet)427 2166 y Fj(The)23 b(default)f(v)-5
-b(alue)22 b(of)h(UseDefs)f(for)g(a)g(F)-7 b(rameSet)22
-b(is)g(rede\014ned)g(to)g(b)r(e)h(the)f(UseDefs)h(v)-5
-b(alue)22 b(of)g(its)g(curren)n(t)427 2266 y(F)-7 b(rame.)259
-2399 y Fd(CmpF)f(rame)427 2498 y Fj(The)26 b(default)g(v)-5
-b(alue)25 b(of)h(UseDefs)g(for)f(a)g(CmpF)-7 b(rame)26
-b(is)f(rede\014ned)h(to)f(b)r(e)h(the)g(UseDefs)g(v)-5
-b(alue)26 b(of)f(its)h(\014rst)427 2598 y(comp)r(onen)n(t)i(F)-7
-b(rame.)259 2731 y Fd(Region)427 2831 y Fj(The)30 b(default)f(v)-5
-b(alue)29 b(of)g(UseDefs)h(for)f(a)f(Region)h(is)g(rede\014ned)g(to)g
-(b)r(e)h(the)f(UseDefs)h(v)-5 b(alue)29 b(of)g(its)g(encap-)427
-2930 y(sulated)f(F)-7 b(rame.)259 3063 y Fd(F)f(rame)427
-3163 y Fj(If)24 b(UseDefs)g(is)f(zero,)g(an)g(error)e(is)j(rep)r(orted)
-e(when)i(aligning)e(F)-7 b(rames)22 b(if)i(the)g(Ep)r(o)r(c)n(h,)g
-(ObsLat)e(or)h(ObsLon)427 3262 y(attribute)28 b(is)g(required)e(but)i
-(has)f(not)h(b)r(een)g(assigned)e(a)i(v)-5 b(alue)27
-b(explicitly)-7 b(.)259 3395 y Fd(SkyF)f(rame)427 3495
-y Fj(If)41 b(UseDefs)f(is)g(zero,)h(an)f(error)e(is)h(rep)r(orted)h
-(when)g(aligning)e(SkyF)-7 b(rames)39 b(if)i(an)n(y)e(of)g(the)i(follo)
-n(wing)427 3595 y(attributes)28 b(are)e(required)h(but)h(ha)n(v)n(e)f
-(not)g(b)r(een)h(assigned)f(a)g(v)-5 b(alue)27 b(explicitly:)37
-b(Ep)r(o)r(c)n(h,)28 b(Equino)n(x.)259 3728 y Fd(Sp)s(ecF)-8
-b(rame)427 3827 y Fj(If)38 b(UseDefs)g(is)g(zero,)h(an)e(error)f(is)h
-(rep)r(orted)g(when)h(aligning)e(Sp)r(ecF)-7 b(rames)37
-b(if)h(an)n(y)f(of)h(the)g(follo)n(wing)427 3927 y(attributes)24
-b(are)f(required)f(but)j(ha)n(v)n(e)d(not)i(b)r(een)g(assigned)e(a)i(v)
--5 b(alue)23 b(explicitly:)35 b(Ep)r(o)r(c)n(h,)24 b(RefRA,)h(RefDec,)
-427 4027 y(RestF)-7 b(req,)28 b(SourceV)-7 b(el,)27 b(StdOfRest.)259
-4160 y Fd(DSBSp)s(ecF)-8 b(rame)427 4259 y Fj(If)27 b(UseDefs)g(is)g
-(zero,)f(an)g(error)f(is)h(rep)r(orted)g(when)h(aligning)f(DSBSp)r(ecF)
--7 b(rames)26 b(or)g(when)h(accessing)e(the)427 4359
-y(ImagF)-7 b(req)25 b(attribute)h(if)g(an)n(y)f(of)h(the)g(follo)n
-(wing)f(attributes)g(are)g(required)g(but)h(ha)n(v)n(e)f(not)h(b)r(een)
-g(assigned)427 4458 y(a)h(v)-5 b(alue)28 b(explicitly:)37
-b(Ep)r(o)r(c)n(h,)27 b(DSBCen)n(tre,)h(IF.)p 0 4658 3780
-12 v 0 4790 a Fz(W)-11 b(arnings)345 b Fe(Con)m(trols)36
-b(the)j(issuing)f(of)g(w)m(arnings)f(ab)s(out)1429 4904
-y(v)-7 b(arious)38 b(conditions)3224 4790 y Fz(W)-11
-b(arnings)0 5070 y Fd(Description:)44 b Fj(This)27 b(attribute)g(con)n
-(trols)f(the)h(issuing)g(of)f(w)n(arnings)g(ab)r(out)h(selected)f
-(conditions)h(when)g(an)g(Ob)5 b(ject)227 5170 y(or)28
-b(k)n(eyw)n(ord)f(is)i(read)f(from)h(or)f(written)h(to)g(a)f(FitsChan.)
-41 b(The)29 b(v)-5 b(alue)29 b(supplied)g(for)f(the)h(W)-7
-b(arnings)28 b(attribute)227 5269 y(should)d(consist)f(of)h(a)g(space)f
-(separated)g(list)h(of)g(condition)g(names)f(\(see)h(the)h(AllW)-7
-b(arnings)24 b(attribute)h(for)g(a)f(list)227 5369 y(of)29
-b(the)g(curren)n(tly)f(de\014ned)h(names\).)41 b(Eac)n(h)28
-b(name)g(indicates)h(a)f(condition)h(whic)n(h)g(should)f(b)r(e)i(rep)r
-(orted.)40 b(The)227 5469 y(default)28 b(v)-5 b(alue)28
-b(for)f(W)-7 b(arnings)27 b(is)g(the)h(string)f Ft(")p
-Fj(Tnx)g(Zp)n(x)g(BadCel)g(BadMat)g(BadPV)g(BadCTYPE)p
-Ft(")p Fj(.)227 5593 y(The)e(text)h(of)f(an)n(y)f(w)n(arning)g(will)i
-(b)r(e)f(stored)f(within)i(the)g(FitsChan)f(in)g(the)h(form)f(of)g(one)
-g(or)f(more)g(new)h(header)227 5693 y(cards)i(with)i(k)n(eyw)n(ord)d
-(ASTW)-9 b(ARN.)29 b(If)f(required,)f(applications)g(can)h(c)n(hec)n(k)
-f(the)h(FitsChan)g(for)f(ASTW)-9 b(ARN)p eop end
-%%Page: 479 489
-TeXDict begin 479 488 bop 3643 52 a FF(479)227 351 y
-Fj(cards)24 b(\(using)h(astFindFits\))h(after)f(the)g(call)g(to)g
-(astRead)f(or)g(astW)-7 b(rite)25 b(has)f(b)r(een)i(p)r(erformed,)f
-(and)g(rep)r(ort)f(the)227 451 y(text)35 b(of)f(an)n(y)g(suc)n(h)g
-(cards)f(to)h(the)h(user.)56 b(ASTW)-9 b(ARN)36 b(cards)d(will)i(b)r(e)
-f(propagated)f(to)h(an)n(y)g(output)g(header)227 551
-y(unless)28 b(they)f(are)g(deleted)h(from)f(the)h(FitsChan)g(using)f
-(astDelFits.)0 692 y Fd(T)m(yp)s(e:)227 792 y Fj(String)0
-933 y Fd(Class)k(Applicabilit)m(y:)259 1061 y(FitsChan)427
-1161 y Fj(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)0
-1315 y Fd(Notes:)227 1461 y Fj(This)36 b(attribute)g(only)g(con)n
-(trols)e(the)j(w)n(arnings)d(that)i(are)f(to)h(b)r(e)g(stored)f(as)h(a)
-f(set)h(of)g(header)f(cards)g(in)h(the)227 1561 y(FitsChan)d(as)f
-(describ)r(ed)g(ab)r(o)n(v)n(e.)51 b(It)33 b(has)f(no)g(e\013ect)h(on)g
-(the)g(storage)d(of)j(w)n(arnings)e(in)i(the)g(paren)n(t)f(Channel)227
-1660 y(structure.)i(All)19 b(w)n(arnings)e(are)h(stored)g(in)h(the)g
-(paren)n(t)f(Channel)h(structure,)h(from)f(where)f(they)h(can)g(b)r(e)g
-(retriev)n(ed)227 1760 y(using)28 b(the)f(astW)-7 b(arnings)27
-b(function.)p 0 1943 3780 12 v 0 2082 a Fz(WcsAxis\(lonlat\))1196
-2074 y Fe(FITS-W)m(CS)39 b(pro)7 b(jection)36 b(axes)2826
-2082 y Fz(WcsAxis\(lonlat\))0 2261 y Fd(Description:)44
-b Fj(This)21 b(attribute)g(giv)n(es)e(the)i(indices)g(of)g(the)g
-(longitude)f(and)h(latitude)g(co)r(ordinates)e(of)h(the)h(FITS-W)n(CS)
-227 2361 y(pro)5 b(jection)33 b(within)i(the)g(co)r(ordinate)e(space)g
-(used)h(b)n(y)g(a)f(WcsMap.)57 b(These)33 b(indices)h(are)f(de\014ned)i
-(when)f(the)227 2460 y(WcsMap)28 b(is)f(\014rst)g(created)g(using)h
-(astWcsMap)e(and)i(cannot)f(subsequen)n(tly)g(b)r(e)h(altered.)227
-2581 y(If)j Ft(")p Fj(lonlat)p Ft(")d Fj(is)i(1,)g(the)h(index)f(of)g
-(the)g(longitude)g(axis)f(is)h(returned.)43 b(Otherwise,)30
-b(if)h(it)f(is)g(2,)g(the)g(index)g(of)g(the)227 2681
-y(latitude)e(axis)f(is)h(returned.)0 2822 y Fd(T)m(yp)s(e:)227
-2922 y Fj(In)n(teger,)f(read-only)-7 b(.)0 3063 y Fd(Class)31
-b(Applicabilit)m(y:)259 3192 y(WcsMap)427 3291 y Fj(All)d(WcsMaps)f(ha)
-n(v)n(e)g(this)h(attribute.)p 0 3474 V 0 3605 a Fz(WcsT)l(yp)t(e)640
-b Fe(FITS-W)m(CS)39 b(pro)7 b(jection)36 b(t)m(yp)s(e)640
-b Fz(WcsT)l(yp)t(e)0 3778 y Fd(Description:)44 b Fj(This)29
-b(attribute)g(sp)r(eci\014es)g(whic)n(h)g(t)n(yp)r(e)g(of)f(FITS-W)n
-(CS)h(pro)5 b(jection)28 b(will)h(b)r(e)g(p)r(erformed)g(b)n(y)f(a)h
-(Wc-)227 3878 y(sMap.)36 b(The)27 b(v)-5 b(alue)27 b(is)g(sp)r
-(eci\014ed)g(when)g(a)f(WcsMap)h(is)f(\014rst)h(created)f(using)g
-(astWcsMap)g(and)h(cannot)f(subse-)227 3977 y(quen)n(tly)i(b)r(e)g(c)n
-(hanged.)227 4098 y(The)g(v)-5 b(alues)27 b(used)g(are)f(represen)n
-(ted)g(b)n(y)h(macros)f(with)i(names)f(of)g(the)h(form)f
-Ft(")p Fj(AST)p Ft(__)p Fj(XXX)p Ft(")p Fj(,)g(where)g
-Ft(")p Fj(XXX)p Ft(")227 4197 y Fj(is)32 b(the)h(\(upp)r(er)f(case\))g
-(3-c)n(haracter)d(co)r(de)j(used)g(b)n(y)f(the)i(FITS-W)n(CS)f
-Ft(")p Fj(CTYPEi)p Ft(")f Fj(k)n(eyw)n(ord)f(to)i(iden)n(tify)g(the)227
-4297 y(pro)5 b(jection.)77 b(F)-7 b(or)41 b(example,)k(p)r(ossible)c(v)
--5 b(alues)40 b(are)h(AST)p Ft(__)p Fj(T)-7 b(AN)41 b(\(for)g(the)h
-(tangen)n(t)f(plane)g(or)g(gnomonic)227 4397 y(pro)5
-b(jection\))34 b(and)h(AST)p Ft(__)p Fj(AIT)f(\(for)g(the)h
-(Hammer-Aito\013)g(pro)5 b(jection\).)57 b(AST)p Ft(__)p
-Fj(TPN)34 b(is)h(an)f(exception)g(in)227 4496 y(that)g(it)h(is)e(not)h
-(part)g(of)f(the)i(FITS-W)n(CS)e(standard)g(\(it)i(represen)n(ts)d(a)i
-(T)-7 b(AN)34 b(pro)5 b(jection)33 b(with)h(p)r(olynomial)227
-4596 y(correction)26 b(terms)h(as)g(de\014ned)h(in)g(an)g(early)e
-(draft)i(of)f(the)h(FITS-W)n(CS)g(pap)r(er\).)0 4737
-y Fd(T)m(yp)s(e:)227 4837 y Fj(In)n(teger,)f(read-only)-7
-b(.)0 4979 y Fd(Class)31 b(Applicabilit)m(y:)259 5107
-y(WcsMap)427 5207 y Fj(All)d(WcsMaps)f(ha)n(v)n(e)g(this)h(attribute.)0
-5361 y Fd(Notes:)340 5635 y Fi(\017)45 b Fj(F)-7 b(or)27
-b(a)g(list)h(of)g(a)n(v)-5 b(ailable)26 b(pro)5 b(jections,)27
-b(see)g(the)h(FITS-W)n(CS)f(pap)r(er.)p eop end
-%%Page: 480 490
-TeXDict begin 480 489 bop 0 52 a FF(480)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 490 a Fz(Width\(elemen)l(t\))1131 483 y Fe(Line)38
-b(width)g(for)g(a)g(Plot)g(elemen)m(t)2840 490 y Fz(Width\(elemen)l
-(t\))0 682 y Fd(Description:)44 b Fj(This)35 b(attribute)g(determines)g
-(the)h(line)f(width)g(used)g(when)g(dra)n(wing)f(eac)n(h)g(elemen)n(t)h
-(of)g(graphical)227 781 y(output)40 b(pro)r(duced)g(b)n(y)f(a)h(Plot.)
-72 b(It)40 b(tak)n(es)f(a)g(separate)f(v)-5 b(alue)40
-b(for)f(eac)n(h)g(graphical)f(elemen)n(t)i(so)f(that,)k(for)227
-881 y(instance,)28 b(the)h(setting)f Ft(")p Fj(Width\(b)r(order\)=2.0)p
-Ft(")f Fj(causes)g(the)h(Plot)g(b)r(order)f(to)h(b)r(e)h(dra)n(wn)e
-(using)h(a)g(line)g(width)227 980 y(of)g(2.0.)37 b(A)28
-b(v)-5 b(alue)28 b(of)f(1.0)g(results)h(in)g(a)f(line)h(thic)n(kness)f
-(whic)n(h)h(is)g(appro)n(ximately)e(0.0005)f(times)k(the)f(length)g(of)
-227 1080 y(the)g(diagonal)e(of)i(the)g(en)n(tire)f(displa)n(y)g
-(surface.)227 1204 y(The)d(actual)f(app)r(earance)g(of)g(lines)h(dra)n
-(wn)f(with)h(an)n(y)f(particular)g(width,)i(and)e(the)i(range)d(of)i(a)
-n(v)-5 b(ailable)22 b(widths,)227 1303 y(is)e(determined)g(b)n(y)f(the)
-h(underlying)g(graphics)e(system.)34 b(The)20 b(default)g(b)r(eha)n
-(viour)e(is)i(for)f(all)h(graphical)e(elemen)n(ts)227
-1403 y(to)23 b(b)r(e)h(dra)n(wn)e(using)h(the)h(default)g(line)f(width)
-h(supplied)g(b)n(y)f(this)g(graphics)f(system.)35 b(This)23
-b(will)h(not)f(necessarily)227 1503 y(corresp)r(ond)j(to)i(a)f(Width)h
-(v)-5 b(alue)28 b(of)g(1.0.)0 1650 y Fd(T)m(yp)s(e:)227
-1750 y Fj(Floating)f(p)r(oin)n(t.)0 1898 y Fd(Class)k(Applicabilit)m
-(y:)259 2032 y(Plot)427 2132 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)0 2292 y Fd(Notes:)340 2573 y Fi(\017)45
-b Fj(F)-7 b(or)27 b(a)g(list)h(of)g(the)g(graphical)e(elemen)n(ts)h(a)n
-(v)-5 b(ailable,)27 b(see)g(the)h(description)f(of)g(the)h(Plot)f
-(class.)340 2704 y Fi(\017)45 b Fj(If)26 b(no)f(graphical)e(elemen)n(t)
-i(is)g(sp)r(eci\014ed,)h(\(e.g.)36 b Ft(")p Fj(Width)p
-Ft(")25 b Fj(instead)g(of)g Ft(")p Fj(Width\(b)r(order\))p
-Ft(")p Fj(\),)h(then)g(a)e Ft(")p Fj(set)p Ft(")427 2803
-y Fj(or)i Ft(")p Fj(clear)p Ft(")f Fj(op)r(eration)h(will)g(a\013ect)h
-(the)g(attribute)g(v)-5 b(alue)27 b(of)f(all)h(graphical)e(elemen)n
-(ts,)i(while)g(a)f Ft(")p Fj(get)p Ft(")f Fj(or)427 2903
-y Ft(")p Fj(test)p Ft(")i Fj(op)r(eration)g(will)h(use)f(just)h(the)g
-(Width\(Border\))g(v)-5 b(alue.)p 0 3099 V 0 3230 a Fz(XmlF)-11
-b(ormat)207 b Fe(System)38 b(for)g(formatting)d(Ob)7
-b(jects)38 b(as)h(XML)207 b Fz(XmlF)-11 b(ormat)0 3416
-y Fd(Description:)44 b Fj(This)29 b(attribute)h(sp)r(eci\014es)f(the)g
-(formatting)g(system)g(to)g(use)g(when)g(AST)g(Ob)5 b(jects)29
-b(are)f(written)i(out)227 3515 y(as)j(XML)i(through)e(an)g(XmlChan.)56
-b(It)34 b(a\013ects)g(the)g(b)r(eha)n(viour)f(of)g(the)i(astW)-7
-b(rite)33 b(function)i(when)f(they)g(are)227 3615 y(used)28
-b(to)f(transfer)g(an)n(y)g(AST)h(Ob)5 b(ject)27 b(to)h(or)e(from)i(an)f
-(external)g(XML)h(represen)n(tation.)227 3739 y(The)36
-b(XmlChan)h(class)e(allo)n(ws)g(AST)h(ob)5 b(jects)36
-b(to)g(b)r(e)g(represen)n(ted)f(in)i(the)f(form)g(of)g(XML)g(in)h(sev)n
-(eral)d(w)n(a)n(ys)227 3838 y(\(con)n(v)n(en)n(tions\))27
-b(and)g(the)i(XmlF)-7 b(ormat)27 b(attribute)h(is)g(used)g(to)f(sp)r
-(ecify)h(whic)n(h)g(of)g(these)f(should)h(b)r(e)g(used.)38
-b(The)227 3938 y(formatting)27 b(options)g(a)n(v)-5 b(ailable)27
-b(are)f(outlined)i(in)g(the)g Ft(")p Fj(F)-7 b(ormats)26
-b(Av)-5 b(ailable)p Ft(")27 b Fj(section)g(b)r(elo)n(w.)227
-4062 y(By)35 b(default,)h(an)f(XmlChan)f(will)h(attempt)g(to)g
-(determine)f(whic)n(h)h(format)f(system)g(is)h(already)e(in)i(use,)h
-(and)227 4161 y(will)f(set)f(the)g(default)h(XmlF)-7
-b(ormat)34 b(v)-5 b(alue)34 b(accordingly)e(\(so)h(that)i(subsequen)n
-(t)f(I/O)f(op)r(erations)g(adopt)g(the)227 4261 y(same)26
-b(con)n(v)n(en)n(tions\).)36 b(It)27 b(do)r(es)f(this)h(b)n(y)g(lo)r
-(oking)e(for)i(certain)f(critical)g(items)h(whic)n(h)f(only)h(o)r(ccur)
-f(in)h(particular)227 4360 y(formats.)42 b(F)-7 b(or)29
-b(details)h(of)f(ho)n(w)g(this)h(w)n(orks,)e(see)i(the)g
-Ft(")p Fj(Choice)e(of)i(Default)g(F)-7 b(ormat)p Ft(")29
-b Fj(section)g(b)r(elo)n(w.)42 b(If)30 b(y)n(ou)227 4460
-y(wish)h(to)g(ensure)f(that)h(a)f(particular)g(format)g(system)g(is)h
-(used,)h(indep)r(enden)n(tly)f(of)g(an)n(y)f(XML)h(already)e(read,)227
-4560 y(y)n(ou)e(should)g(set)h(an)f(explicit)h(XmlF)-7
-b(ormat)28 b(v)-5 b(alue)27 b(y)n(ourself.)0 4707 y Fd(T)m(yp)s(e:)227
-4807 y Fj(String.)0 4955 y Fd(Class)k(Applicabilit)m(y:)259
-5089 y(XmlChan)427 5189 y Fj(All)d(XmlChans)g(ha)n(v)n(e)e(this)i
-(attribute.)-2 5349 y Fd(F)-8 b(ormats)32 b(Av)-5 b(ailable)n(:)227
-5495 y Fj(The)34 b(XmlF)-7 b(ormat)33 b(attribute)h(can)f(tak)n(e)f(an)
-n(y)h(of)g(the)h(follo)n(wing)f(\(case)f(insensitiv)n(e\))i(string)e(v)
--5 b(alues)33 b(to)h(select)227 5595 y(the)28 b(corresp)r(onding)e
-(formatting)h(system:)p eop end
-%%Page: 481 491
-TeXDict begin 481 490 bop 3643 52 a FF(481)340 351 y
-Fi(\017)45 b Ft(")p Fj(NA)-7 b(TIVE)p Ft(")p Fj(:)34
-b(This)23 b(is)g(a)f(direct)h(con)n(v)n(ersion)e(to)h(XML)i(of)e(the)i
-(heirarc)n(hical)c(format)j(used)g(b)n(y)f(a)h(standard)427
-451 y(XML)28 b(c)n(hannel)f(\(and)h(also)f(b)n(y)g(the)h(NA)-7
-b(TIVE)28 b(enco)r(ding)f(of)h(a)f(FitsChan\).)340 575
-y Fi(\017)45 b Ft(")p Fj(QUOTED)p Ft(")p Fj(:)35 b(This)27
-b(is)g(the)g(same)f(as)h(NA)-7 b(TIVE)27 b(format)f(except)h(that)g
-(extra)f(information)g(is)h(included)427 675 y(whic)n(h)21
-b(allo)n(ws)e(clien)n(t)i(co)r(de)g(to)f(con)n(v)n(ert)f(the)j(XML)f
-(in)n(to)f(a)g(form)h(whic)n(h)f(can)h(b)r(e)g(read)f(b)n(y)g(a)g
-(standard)g(AST)427 775 y(Channel.)37 b(This)26 b(extra)g(information)f
-(indicates)i(whic)n(h)f(AST)h(attribute)f(v)-5 b(alues)27
-b(should)f(b)r(e)h(enclosed)e(in)427 874 y(quotes)i(b)r(efore)h(b)r
-(eing)f(passed)g(to)h(a)f(Channel.)340 999 y Fi(\017)45
-b Ft(")p Fj(IV)n(O)n(A)p Ft(")p Fj(:)63 b(This)40 b(is)h(a)g(format)f
-(that)h(uses)g(an)g(early)e(draft)i(of)g(the)g(STC-X)g(sc)n(hema)f(dev)
-n(elop)r(ed)h(b)n(y)427 1098 y(the)30 b(In)n(ternational)e(Virtual)h
-(Observ)-5 b(atory)27 b(Alliance)i(\(IV)n(O)n(A)g(-)g(see)g
-Ft(")p Fj(h)n(ttp://www.iv)n(oa.net/)p Ft(")p Fj(\))e(to)i(de-)427
-1198 y(scrib)r(e)38 b(co)r(ordinate)f(systems,)j(regions,)f(mappings,)h
-(etc.)68 b(Supp)r(ort)38 b(is)g(limited)g(to)g(V1.20)f(describ)r(ed)427
-1298 y(at)d Ft(")p Fj(h)n(ttp://www.iv)n(oa.net/Do)r(cumen)n
-(ts/WD/STC/STC-2005022)o(5.h)n(tml)p Ft(")p Fj(.)49 b(Since)34
-b(the)g(v)n(ersion)e(of)427 1397 y(STC-X)i(\014nally)f(adopted)g(b)n(y)
-h(the)f(IV)n(O)n(A)g(di\013ers)h(in)g(sev)n(eral)d(signi\014can)n(t)i
-(resp)r(ects)g(from)g(V1.20,)h(this)427 1497 y(format)27
-b(is)g(no)n(w)f(mainly)h(of)g(historical)f(in)n(terest.)37
-b(Note,)27 b(the)g(alternativ)n(e)f Ft(")p Fj(STC-S)p
-Ft(")g Fj(format)h(\(a)g(simpler)427 1596 y(non-XML)h(enco)r(ding)f(of)
-g(the)h(STC)g(metadata\))f(is)h(supp)r(orted)f(b)n(y)h(the)g(StcsChan)f
-(class.)-2 1750 y Fd(Choice)32 b(of)f(Default)h(F)-8
-b(ormat;)n(:)227 1896 y Fj(If)30 b(the)f(XmlF)-7 b(ormat)29
-b(attribute)g(of)g(an)f(XmlChan)h(is)g(not)g(set,)g(the)h(default)f(v)
--5 b(alue)29 b(it)g(tak)n(es)f(is)h(determined)g(b)n(y)227
-1996 y(the)g(presence)e(of)h(certain)f(critical)h(items)g(within)h(the)
-f(do)r(cumen)n(t)h(most)f(recen)n(tly)f(read)g(using)h(astRead.)38
-b(The)227 2095 y(sequence)27 b(of)h(decision)f(used)h(to)f(arriv)n(e)f
-(at)h(the)h(default)g(v)-5 b(alue)28 b(is)f(as)g(follo)n(ws:)340
-2344 y Fi(\017)45 b Fj(If)19 b(the)g(previous)e(do)r(cumen)n(t)i(read)e
-(con)n(tained)h(an)n(y)f(elemen)n(ts)i(in)f(an)n(y)g(of)g(the)h(STC)f
-(namespaces)g(\()p Ft(")p Fj(urn:n)n(v)n(o-)427 2443
-y(stc)p Ft(")p Fj(,)28 b Ft(")p Fj(urn:n)n(v)n(o-co)r(ords)p
-Ft(")23 b Fj(or)k Ft(")p Fj(urn:n)n(v)n(o-region)p Ft(")p
-Fj(\),)d(then)k(the)g(default)g(v)-5 b(alue)28 b(is)f(IV)n(O)n(A.)340
-2568 y Fi(\017)45 b Fj(If)30 b(the)f(previous)f(do)r(cumen)n(t)h(read)f
-(con)n(tained)g(an)n(y)g(elemen)n(ts)h(in)g(the)g(AST)g(namespace)f
-(whic)n(h)h(had)g(an)427 2667 y(asso)r(ciated)e(XML)g(attribute)h
-(called)f Ft(")p Fj(quoted)p Ft(")p Fj(,)g(then)h(the)g(default)g(v)-5
-b(alue)28 b(is)f(QUOTED.)340 2792 y Fi(\017)45 b Fj(Otherwise,)31
-b(if)g(none)g(of)f(these)h(conditions)f(is)h(met)g(\(as)f(w)n(ould)h(b)
-r(e)g(the)g(case)f(if)h(no)f(do)r(cumen)n(t)h(had)g(y)n(et)427
-2891 y(b)r(een)d(read\),)f(then)h(NA)-7 b(TIVE)28 b(format)g(is)f
-(used.)227 3045 y(Setting)h(an)g(explicit)f(v)-5 b(alue)28
-b(for)f(the)h(XmlF)-7 b(ormat)27 b(attribute)h(alw)n(a)n(ys)e(o)n(v)n
-(er-rides)f(this)j(default)g(b)r(eha)n(viour.)-2 3186
-y Fd(The)k(IV)m(O)m(A)h(F)-8 b(ormat)n(:)227 3332 y Fj(The)39
-b(IV)n(O)n(A)g(supp)r(ort)g(caters)f(only)h(for)f(certain)h(parts)f(of)
-h(V1.20)g(of)g(the)g(draft)g(Space-Time)g(Co)r(ordinate)227
-3432 y(\(STC\))33 b(sc)n(hema)f(\(see)h(h)n(ttp://www.iv)n(oa.net/Do)r
-(cumen)n(ts/WD/STC/STC-2005022)o(5.h)n(tml\).)46 b(Note,)34
-b(this)227 3531 y(draft)f(has)g(no)n(w)f(b)r(een)i(sup)r(erceded)f(b)n
-(y)g(an)g(o\016cially)f(adopted)h(v)n(ersion)e(that)j(di\013ers)f(in)g
-(sev)n(eral)e(signi\014can)n(t)227 3631 y(resp)r(ects)c(from)h(V1.20.)
-35 b(Consequen)n(tly)-7 b(,)27 b(the)h Ft(")p Fj(IV)n(O)n(A)p
-Ft(")f Fj(XmlChan)h(format)f(is)g(of)h(historical)e(in)n(terest)h(only)
--7 b(.)227 3751 y(The)30 b(follo)n(wing)f(p)r(oin)n(ts)h(should)f(b)r
-(e)h(noted)g(when)g(using)g(an)f(XmlChan)h(to)g(read)f(or)g(write)g
-(STC)h(information)227 3851 y(\(note,)e(this)g(list)g(is)f(curren)n
-(tly)g(incomplete\):)340 4099 y Fi(\017)45 b Fj(Ob)5
-b(jects)27 b(can)h(curren)n(tly)e(only)h(b)r(e)h(read)f(using)g(this)h
-(format,)f(not)h(written.)340 4224 y Fi(\017)45 b Fj(The)23
-b(AST)f(ob)5 b(ject)22 b(generated)f(b)n(y)h(reading)f(an)h
-Fl(<)p Fj(STCMetadata)p Fl(>)f Fj(elemen)n(t)h(will)g(b)r(e)h(an)f
-(instance)g(of)g(one)427 4323 y(of)27 b(the)h(AST)g Ft(")p
-Fj(Stc)p Ft(")f Fj(classes:)35 b(StcResourcePro\014le,)25
-b(StcSearc)n(hLo)r(cation,)h(StcCatalogEn)n(tryLo)r(cation,)427
-4423 y(StcObsDataLo)r(cation.)340 4547 y Fi(\017)45 b
-Fj(When)27 b(reading)f(an)g Fl(<)p Fj(STCMetadata)p Fl(>)f
-Fj(elemen)n(t,)i(the)g(axes)f(in)h(the)g(returned)f(AST)h(Ob)5
-b(ject)26 b(will)h(b)r(e)g(in)427 4647 y(the)j(order)e(space,)g(time,)j
-(sp)r(ectral,)e(redshift,)g(irresp)r(ectiv)n(e)f(of)h(the)h(order)e(in)
-h(whic)n(h)g(the)h(axes)e(o)r(ccur)g(in)427 4747 y(the)34
-b Fl(<)p Fj(STCMetadata)p Fl(>)e Fj(elemen)n(t.)53 b(If)34
-b(the)g(supplied)f Fl(<)p Fj(STCMetadata)p Fl(>)f Fj(elemen)n(t)h(do)r
-(es)g(not)g(con)n(tain)427 4846 y(all)h(of)h(these)f(axes,)i(the)f
-(returned)f(AST)h(Ob)5 b(ject)34 b(will)h(also)e(omit)i(them,)i(but)e
-(the)g(ordering)e(of)h(those)427 4946 y(axes)h(whic)n(h)h(are)f(presen)
-n(t)g(will)i(b)r(e)f(as)f(stated)h(ab)r(o)n(v)n(e.)61
-b(If)36 b(the)g(spatial)g(frame)f(represen)n(ts)g(a)g(celestial)427
-5046 y(co)r(ordinate)27 b(system)g(the)h(spatial)f(axes)g(will)g(b)r(e)
-h(in)g(the)g(order)f(\(longitude,)g(latitude\).)340 5170
-y Fi(\017)45 b Fj(Un)n(til)25 b(suc)n(h)g(time)g(as)f(the)h(AST)g
-(TimeF)-7 b(rame)24 b(is)g(complete,)h(a)g(simple)f(1-dimensional)g(F)
--7 b(rame)24 b(\(with)h(Do-)427 5270 y(main)g(set)f(to)g(TIME\))g(will)
-h(b)r(e)g(used)f(to)g(represen)n(t)f(the)i(STC)f Fl(<)p
-Fj(TimeF)-7 b(rame)p Fl(>)23 b Fj(elemen)n(t.)36 b(Consequen)n(tly)-7
-b(,)427 5369 y(most)28 b(of)f(the)h(information)f(within)h(a)g
-Fl(<)p Fj(TimeF)-7 b(rame)p Fl(>)26 b Fj(elemen)n(t)i(is)f(curren)n
-(tly)g(ignored.)340 5494 y Fi(\017)45 b Fl(<)p Fj(SpaceF)-7
-b(rame)p Fl(>)27 b Fj(elemen)n(ts)i(can)f(only)g(b)r(e)h(read)f(if)h
-(they)g(describ)r(e)g(a)f(celestial)g(longitude)h(and)f(latitude)427
-5593 y(axes)33 b(supp)r(orted)g(b)n(y)g(the)h(AST)f(SkyF)-7
-b(rame)33 b(class.)53 b(The)33 b(space)g(axes)f(will)i(b)r(e)g
-(returned)f(in)g(the)h(order)427 5693 y(\(longitude,)28
-b(latitude\).)p eop end
-%%Page: 482 492
-TeXDict begin 482 491 bop 0 52 a FF(482)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)340 351
-y Fi(\017)45 b Fj(V)-7 b(elo)r(cities)28 b(asso)r(ciated)e(with)i
-(SpaceF)-7 b(rames)27 b(cannot)g(b)r(e)h(read.)340 477
-y Fi(\017)45 b Fj(An)n(y)23 b Fl(<)p Fj(GenericCo)r(ordF)-7
-b(rame)p Fl(>)19 b Fj(elemen)n(ts)k(within)g(an)f Fl(<)p
-Fj(AstroCo)r(ordSystem)p Fl(>)e Fj(elemen)n(t)j(are)f(curren)n(tly)427
-577 y(ignored.)340 702 y Fi(\017)45 b Fj(An)n(y)29 b(second)e(or)h
-(subsequen)n(t)g Fl(<)p Fj(AstroCo)r(ordSystem)p Fl(>)e
-Fj(found)j(within)g(an)f(STCMetaData)g(elemen)n(t)h(is)427
-802 y(ignored.)340 928 y Fi(\017)45 b Fj(An)n(y)37 b(second)g(or)f
-(subsequen)n(t)h Fl(<)p Fj(AstroCo)r(ordArea)p Fl(>)d
-Fj(found)k(within)g(an)f(STCMetaData)f(elemen)n(t)i(is)427
-1027 y(ignored.)340 1153 y Fi(\017)45 b Fj(An)n(y)28
-b Fl(<)p Fj(O\013setCen)n(ter)p Fl(>)e Fj(found)i(within)g(a)f
-Fl(<)p Fj(SpaceF)-7 b(rame)p Fl(>)26 b Fj(is)i(ignored.)340
-1279 y Fi(\017)45 b Fj(An)n(y)28 b(Co)r(ordFla)n(v)n(or)c(elemen)n(t)k
-(found)g(within)g(a)g Fl(<)p Fj(SpaceF)-7 b(rame)p Fl(>)25
-b Fj(is)j(ignored.)340 1405 y Fi(\017)45 b Fl(<)p Fj(SpaceF)-7
-b(rame)p Fl(>)23 b Fj(elemen)n(ts)h(can)g(only)f(b)r(e)i(read)e(if)i
-(they)g(refer)e(to)h(one)g(of)g(the)h(follo)n(wing)e(space)h(reference)
-427 1504 y(frames:)36 b(ICRS,)28 b(GALA)n(CTIC)p Ft(_)p
-Fj(I)r(I,)g(SUPER)p Ft(_)p Fj(GALA)n(CTIC,)f(HEE,)g(FK4,)g(FK5,)g
-(ECLIPTIC.)340 1630 y Fi(\017)45 b Fl(<)p Fj(SpaceF)-7
-b(rame)p Fl(>)25 b Fj(elemen)n(ts)h(can)g(only)g(b)r(e)h(read)f(if)h
-(the)f(reference)g(p)r(osition)g(is)g(TOPOCENTER.)f(Also,)427
-1730 y(an)n(y)i(planetary)g(ephemeris)g(is)g(ignored.)340
-1855 y Fi(\017)45 b Fj(Regions:)36 b(there)26 b(is)g(curren)n(tly)g(no)
-g(supp)r(ort)g(for)g(STC)h(regions)e(of)h(t)n(yp)r(e)h(Sector,)f(Con)n
-(v)n(exHull)f(or)h(SkyIn-)427 1955 y(dex.)340 2081 y
-Fi(\017)45 b Fj(The)34 b(AST)g(Region)e(read)h(from)g(a)g(Co)r(ordIn)n
-(terv)-5 b(al)32 b(elemen)n(t)h(is)h(considered)e(to)i(b)r(e)f(op)r(en)
-h(if)g(either)f(the)427 2180 y(lo)p Ft(_)p Fj(include)27
-b(or)g(the)h(hi)p Ft(_)p Fj(include)g(attribute)g(is)f(set)h(to)f
-(false.)340 2306 y Fi(\017)45 b Fl(<)p Fj(RegionFile)p
-Fl(>)27 b Fj(elemen)n(ts)g(are)g(not)g(supp)r(orted.)340
-2432 y Fi(\017)45 b Fj(V)-7 b(ertices)33 b(within)h Fl(<)p
-Fj(P)n(olygon)p Fl(>)c Fj(elemen)n(ts)k(are)e(alw)n(a)n(ys)f
-(considered)h(to)h(b)r(e)h(joined)g(using)e(great)g(circles)427
-2531 y(\(that)c(is,)g Fl(<)p Fj(SmallCircle)p Fl(>)e
-Fj(elemen)n(ts)i(are)e(ignored\).)p 0 2716 3780 12 v
-0 2848 a Fz(XmlInden)l(t)245 b Fe(Con)m(trols)36 b(output)i(of)g(inden)
-m(tation)e(and)j(line)1764 2963 y(feeds)3144 2848 y Fz(XmlInden)l(t)0
-3114 y Fd(Description:)44 b Fj(This)39 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)e(of)h(the)h(XML)g(pro)r(duced)f(when)h(an)f(AST)h(ob)5
-b(ject)39 b(is)227 3214 y(written)21 b(to)g(an)g(XmlChan.)35
-b(If)21 b(it)h(is)f(non-zero,)f(then)i(extra)e(linefeed)h(c)n
-(haracters)e(will)i(b)r(e)g(inserted)g(as)f(necessary)227
-3313 y(to)26 b(ensure)f(that)i(eac)n(h)e(XML)h(tag)f(starts)g(on)h(a)g
-(new)g(line,)g(and)g(eac)n(h)f(tag)g(will)h(b)r(e)h(inden)n(ted)f(to)g
-(sho)n(w)f(its)h(depth)227 3413 y(in)k(the)f(con)n(tainmen)n(t)g
-(hierarc)n(h)n(y)-7 b(.)40 b(If)30 b(XmlInden)n(t)g(is)f(zero)f(\(the)i
-(default\),)g(then)g(no)f(linefeeds)g(or)g(inden)n(tation)227
-3513 y(strings)e(will)h(b)r(e)g(added)f(to)h(output)g(text.)0
-3655 y Fd(T)m(yp)s(e:)227 3755 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0
-3897 y Fd(Class)k(Applicabilit)m(y:)259 4026 y(XmlChan)427
-4126 y Fj(All)d(XmlChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 4311 V 0 4443 a Fz(XmlLength)473 b Fe(Con)m(trols)36
-b(output)i(bu\013er)h(length)471 b Fz(XmlLength)0 4617
-y Fd(Description:)44 b Fj(This)34 b(attribute)h(sp)r(eci\014es)e(the)i
-(maxim)n(um)f(length)g(to)g(use)g(when)g(writing)f(out)i(text)f
-(through)f(the)227 4717 y(sink)28 b(function)g(supplied)g(when)g(the)g
-(XmlChan)f(w)n(as)g(created.)227 4838 y(The)h(n)n(um)n(b)r(er)g(of)g(c)
-n(haracters)d(in)j(eac)n(h)f(string)h(written)g(out)g(through)f(the)h
-(sink)g(function)g(will)g(not)g(b)r(e)g(greater)227 4937
-y(than)g(the)g(v)-5 b(alue)27 b(of)h(this)g(attribute)g(\(but)g(ma)n(y)
-f(b)r(e)h(less\).)37 b(A)28 b(v)-5 b(alue)27 b(of)h(zero)e(\(the)j
-(default\))f(means)f(there)g(is)h(no)227 5037 y(limit)h(-)e(eac)n(h)g
-(string)g(can)g(b)r(e)h(of)f(an)n(y)g(length.)0 5179
-y Fd(T)m(yp)s(e:)227 5279 y Fj(In)n(teger.)0 5421 y Fd(Class)k
-(Applicabilit)m(y:)259 5551 y(XmlChan)427 5650 y Fj(All)d(XmlChans)g
-(ha)n(v)n(e)e(this)i(attribute.)p eop end
-%%Page: 483 493
-TeXDict begin 483 492 bop 3643 52 a FF(483)p 0 351 3780
-12 v 0 483 a Fz(XmlPre\014x)200 b Fe(The)38 b(namespace)g(pre\014x)h
-(to)f(use)h(when)g(writing)197 b Fz(XmlPre\014x)0 672
-y Fd(Description:)44 b Fj(This)22 b(attribute)h(is)f(a)g(string)f(whic)
-n(h)h(is)g(to)g(b)r(e)h(used)f(as)f(the)i(namespace)e(pre\014x)h(for)f
-(all)h(XML)h(elemen)n(ts)227 771 y(created)k(as)g(a)g(result)g(of)h
-(writing)f(an)g(AST)h(Ob)5 b(ject)28 b(out)f(through)g(an)g(XmlChan.)37
-b(The)28 b(URI)g(asso)r(ciated)e(with)227 871 y(the)20
-b(namespace)f(pre\014x)g(is)g(giv)n(en)g(b)n(y)g(the)h(sym)n(b)r(olic)e
-(constan)n(t)h(AST)p Ft(__)p Fj(XMLNS)h(de\014ned)g(in)f(ast.h.)34
-b(A)20 b(de\014nition)227 971 y(of)28 b(the)g(namespace)e(pre\014x)i
-(is)f(included)h(in)g(eac)n(h)f(top-lev)n(el)f(elemen)n(t)i(pro)r
-(duced)f(b)n(y)h(the)g(XmlChan.)227 1095 y(The)j(default)g(v)-5
-b(alue)30 b(is)g(a)g(blank)h(string)e(whic)n(h)i(causes)e(no)h
-(pre\014x)g(to)h(b)r(e)f(used.)46 b(In)31 b(this)f(case)g(eac)n(h)g
-(top-lev)n(el)227 1195 y(elemen)n(t)e(will)g(set)f(the)h(default)g
-(namespace)f(to)g(b)r(e)h(the)g(v)-5 b(alue)28 b(of)g(AST)p
-Ft(__)p Fj(XMLNS.)0 1344 y Fd(T)m(yp)s(e:)227 1444 y
-Fj(String.)0 1593 y Fd(Class)j(Applicabilit)m(y:)259
-1730 y(Ob)5 b(ject)427 1829 y Fj(All)28 b(Ob)5 b(jects)28
-b(ha)n(v)n(e)e(this)i(attribute.)p 0 2029 V 0 2159 a
-Fz(Zo)t(om)1322 2160 y Fe(Zo)s(omMap)37 b(scale)i(factor)3447
-2159 y Fz(Zo)t(om)0 2349 y Fd(Description:)44 b Fj(This)24
-b(attribute)g(holds)g(the)g(Zo)r(omMap)f(scale)g(factor,)h(b)n(y)g
-(whic)n(h)g(co)r(ordinate)e(v)-5 b(alues)24 b(are)f(m)n(ultiplied)227
-2449 y(\(b)n(y)g(the)h(forw)n(ard)d(transformation\))g(or)h(divided)i
-(\(b)n(y)f(the)g(in)n(v)n(erse)f(transformation\).)34
-b(This)22 b(factor)h(is)f(set)h(when)227 2548 y(a)k(Zo)r(omMap)g(is)h
-(created,)e(but)j(ma)n(y)e(later)g(b)r(e)h(mo)r(di\014ed.)37
-b(The)27 b(default)i(v)-5 b(alue)27 b(is)g(unit)n(y)-7
-b(.)227 2673 y(Note)35 b(that)g(if)h(a)e(Zo)r(omMap)g(is)h(in)n(v)n
-(erted)f(\(e.g.)58 b(b)n(y)34 b(using)h(astIn)n(v)n(ert\),)h(then)f
-(the)g(recipro)r(cal)e(of)i(this)g(zo)r(om)227 2773 y(factor)27
-b(will,)h(in)g(e\013ect,)g(b)r(e)g(used.)0 2922 y Fd(T)m(yp)s(e:)227
-3022 y Fj(Double)g(precision.)0 3171 y Fd(Class)j(Applicabilit)m(y:)259
-3307 y(Zo)s(omMap)427 3407 y Fj(All)d(Zo)r(omMaps)f(ha)n(v)n(e)f(this)i
-(attribute.)0 3569 y Fd(Notes:)340 3851 y Fi(\017)45
-b Fj(The)28 b(Zo)r(om)f(attribute)h(ma)n(y)f(not)g(b)r(e)h(set)g(to)f
-(zero.)p eop end
-%%Page: 484 494
-TeXDict begin 484 493 bop 0 52 a FF(484)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p eop end
-%%Page: 485 495
-TeXDict begin 485 494 bop 3643 52 a FF(485)0 351 y Fz(D)135
-b(AST)43 b(Class)j(Descriptions)p 0 582 3780 12 v 0 713
-a(Axis)1057 b Fe(Store)38 b(axis)g(information)1054 b
-Fz(Axis)0 861 y Fd(Description:)44 b Fj(The)30 b(Axis)f(class)f(is)h
-(used)g(to)g(store)g(information)f(asso)r(ciated)g(with)i(a)f
-(particular)f(axis)g(of)h(a)g(F)-7 b(rame.)227 960 y(It)28
-b(is)g(used)f(in)n(ternally)g(b)n(y)g(the)h(AST)g(library)e(and)i(has)f
-(no)g(constructor)f(function.)38 b(Y)-7 b(ou)27 b(should)g(encoun)n
-(ter)g(it)227 1060 y(only)g(within)i(textual)e(output)i(\(e.g.)36
-b(from)28 b(astW)-7 b(rite\).)0 1200 y Fd(Constructor)32
-b(F)-8 b(unction:)227 1300 y Fj(None.)-2 1440 y Fd(Inheritance)n(:)227
-1586 y Fj(The)28 b(Axis)f(class)g(inherits)h(from)f(the)h(Ob)5
-b(ject)27 b(class.)p 0 1767 V 0 1898 a Fz(Bo)l(x)480
-1899 y Fe(A)39 b(b)s(o)m(x)f(region)f(with)h(sides)h(parallel)d(to)i
-(the)h(axes)f(of)h(a)f(F)-10 b(rame)3549 1898 y Fz(Bo)l(x)0
-2069 y Fd(Description:)44 b Fj(The)26 b(Bo)n(x)e(class)g(implemen)n(ts)
-i(a)e(Region)h(whic)n(h)g(represen)n(ts)f(a)h(b)r(o)n(x)f(with)i(sides)
-f(parallel)f(to)h(the)h(axes)227 2169 y(of)34 b(a)f(F)-7
-b(rame)32 b(\(i.e.)55 b(an)33 b(area)f(whic)n(h)h(encloses)g(a)g(giv)n
-(en)f(range)g(of)i(v)-5 b(alues)33 b(on)g(eac)n(h)f(axis\).)54
-b(A)34 b(Bo)n(x)e(is)h(similar)227 2269 y(to)e(an)g(In)n(terv)-5
-b(al,)31 b(the)g(only)g(real)f(di\013erence)g(b)r(eing)h(that)h(the)f
-(In)n(terv)-5 b(al)30 b(class)g(allo)n(ws)g(some)g(axis)g(limits)h(to)g
-(b)r(e)227 2368 y(unsp)r(eci\014ed.)37 b(Note,)26 b(a)e(Bo)n(x)h(will)g
-(only)g(lo)r(ok)f(lik)n(e)h(a)g(b)r(o)n(x)g(if)g(the)h(F)-7
-b(rame)25 b(geometry)f(is)h(appro)n(ximately)e(\015at.)36
-b(F)-7 b(or)227 2468 y(instance,)34 b(a)e(Bo)n(x)f(cen)n(tred)h(close)f
-(to)h(a)g(p)r(ole)h(in)f(a)g(SkyF)-7 b(rame)32 b(will)g(lo)r(ok)g(more)
-f(lik)n(e)h(a)g(fan)h(than)f(a)g(b)r(o)n(x)g(\(the)227
-2567 y(P)n(olygon)26 b(class)g(can)i(b)r(e)g(used)f(to)h(create)e(a)h
-(b)r(o)n(x-lik)n(e)g(region)f(close)h(to)g(a)h(p)r(ole\).)0
-2708 y Fd(Constructor)k(F)-8 b(unction:)227 2807 y Fj(astBo)n(x)-2
-2948 y Fd(Inheritance)n(:)227 3094 y Fj(The)28 b(Bo)n(x)e(class)h
-(inherits)h(from)f(the)h(Region)f(class.)-2 3234 y Fd(A)m(ttributes)n
-(:)227 3380 y Fj(The)d(Bo)n(x)e(class)h(do)r(es)g(not)h(de\014ne)f(an)n
-(y)g(new)h(attributes)f(b)r(ey)n(ond)h(those)f(whic)n(h)g(are)g
-(applicable)g(to)g(all)g(Regions.)-2 3521 y Fd(F)-8 b(unctions)n(:)227
-3667 y Fj(The)23 b(Bo)n(x)f(class)g(do)r(es)h(not)g(de\014ne)g(an)n(y)f
-(new)h(functions)g(b)r(ey)n(ond)g(those)f(whic)n(h)h(are)f(applicable)h
-(to)f(all)h(Regions.)p 0 3848 V 0 3979 a Fz(Channel)1180
-3986 y Fe(Basic)38 b(\(textual\))e(I/O)j(c)m(hannel)3294
-3979 y Fz(Channel)0 4168 y Fd(Description:)44 b Fj(The)35
-b(Channel)g(class)f(implemen)n(ts)h(lo)n(w-lev)n(el)e(input/output)i
-(for)g(the)g(AST)g(library)-7 b(.)57 b(W)-7 b(riting)35
-b(an)227 4267 y(Ob)5 b(ject)36 b(to)g(a)g(Channel)f(will)i(generate)d
-(a)i(textual)g(represen)n(tation)e(of)i(that)h(Ob)5 b(ject,)38
-b(and)e(reading)e(from)i(a)227 4367 y(Channel)28 b(will)g(create)e(a)h
-(new)h(Ob)5 b(ject)28 b(from)f(its)h(textual)f(represen)n(tation.)227
-4487 y(Normally)-7 b(,)20 b(when)f(y)n(ou)g(use)f(a)h(Channel,)i(y)n
-(ou)d(should)h(pro)n(vide)f Ft(")p Fj(source)p Ft(")f
-Fj(and)h Ft(")p Fj(sink)p Ft(")g Fj(functions)i(whic)n(h)f(connect)227
-4587 y(it)38 b(to)f(an)f(external)h(data)f(store)g(b)n(y)h(reading)f
-(and)h(writing)f(the)i(resulting)e(text.)66 b(By)37 b(default,)j(ho)n
-(w)n(ev)n(er,)d(a)227 4686 y(Channel)28 b(will)g(read)e(from)i
-(standard)e(input)j(and)e(write)g(to)h(standard)e(output.)0
-4826 y Fd(Constructor)32 b(F)-8 b(unction:)227 4926 y
-Fj(astChannel)-2 5066 y Fd(Inheritance)n(:)227 5213 y
-Fj(The)28 b(Channel)f(class)g(inherits)h(from)f(the)h(Ob)5
-b(ject)27 b(class.)-2 5353 y Fd(A)m(ttributes)n(:)227
-5499 y Fj(In)34 b(addition)e(to)h(those)g(attributes)g(common)g(to)g
-(all)f(Ob)5 b(jects,)34 b(ev)n(ery)e(Channel)h(also)f(has)h(the)g
-(follo)n(wing)f(at-)227 5599 y(tributes:)p eop end
-%%Page: 486 496
-TeXDict begin 486 495 bop 0 52 a FF(486)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(Commen)n(t:)37 b(Include)28 b(textual)g(commen)n(ts)f(in)h
-(output?)340 485 y Fi(\017)45 b Fj(F)-7 b(ull:)38 b(Set)28
-b(lev)n(el)f(of)g(output)i(detail)340 618 y Fi(\017)45
-b Fj(Rep)r(ortLev)n(el:)36 b(Selects)28 b(the)g(lev)n(el)f(of)g(error)f
-(rep)r(orting)340 752 y Fi(\017)45 b Fj(Skip:)37 b(Skip)28
-b(irrelev)-5 b(an)n(t)27 b(data?)340 885 y Fi(\017)45
-b Fj(Strict:)37 b(Generate)27 b(errors)f(instead)h(of)h(w)n(arnings?)-2
-1049 y Fd(F)-8 b(unctions)n(:)227 1195 y Fj(In)23 b(addition)g(to)g
-(those)g(functions)g(applicable)f(to)h(all)g(Ob)5 b(jects,)24
-b(the)f(follo)n(wing)f(functions)h(ma)n(y)f(also)g(b)r(e)i(applied)227
-1294 y(to)k(all)f(Channels:)340 1558 y Fi(\017)45 b Fj(astW)-7
-b(arnings:)36 b(Return)28 b(w)n(arnings)d(from)j(the)g(previous)e(read)
-h(or)g(write)340 1691 y Fi(\017)45 b Fj(astPutChannelData:)36
-b(Store)27 b(data)g(to)h(pass)f(to)g(source)f(or)h(sink)h(functions)340
-1825 y Fi(\017)45 b Fj(astRead:)36 b(Read)28 b(an)f(Ob)5
-b(ject)27 b(from)h(a)f(Channel)340 1958 y Fi(\017)45
-b Fj(astW)-7 b(rite:)37 b(W)-7 b(rite)28 b(an)f(Ob)5
-b(ject)28 b(to)f(a)g(Channel)p 0 2159 3780 12 v 0 2291
-a Fz(Circle)386 b Fe(A)38 b(circular)f(or)h(spherical)g(region)f
-(within)g(a)i(F)-10 b(rame)384 b Fz(Circle)0 2481 y Fd(Description:)44
-b Fj(The)27 b(Circle)e(class)h(implemen)n(ts)g(a)g(Region)f(whic)n(h)h
-(represen)n(ts)f(a)h(circle)g(or)f(sphere)g(within)i(a)f(F)-7
-b(rame.)0 2632 y Fd(Constructor)32 b(F)-8 b(unction:)227
-2731 y Fj(astCircle)-2 2882 y Fd(Inheritance)n(:)227
-3028 y Fj(The)28 b(Circle)f(class)g(inherits)g(from)g(the)h(Region)f
-(class.)-2 3179 y Fd(A)m(ttributes)n(:)227 3325 y Fj(The)19
-b(Circle)g(class)f(do)r(es)h(not)g(de\014ne)h(an)n(y)e(new)h
-(attributes)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f(applicable)h(to)g
-(all)f(Regions.)-2 3476 y Fd(F)-8 b(unctions)n(:)227
-3622 y Fj(In)23 b(addition)g(to)f(those)h(functions)g(applicable)f(to)h
-(all)f(Regions,)h(the)g(follo)n(wing)f(functions)h(ma)n(y)f(also)f(b)r
-(e)j(applied)227 3722 y(to)k(all)f(Circles:)340 3985
-y Fi(\017)45 b Fj(astCircleP)n(ars:)34 b(Get)28 b(the)g(geometric)f
-(parameters)e(of)j(the)g(Circle)340 4118 y Fi(\017)45
-b Fj(AST)p Ft(_)p Fj(CIR)n(CLEP)-7 b(ARS:)27 b(Get)h(the)g(geometric)f
-(parameters)e(of)j(the)g(Circle)p 0 4319 V 0 4450 a Fz(CmpF)-11
-b(rame)1429 4451 y Fe(Comp)s(ound)37 b(F)-10 b(rame)3128
-4450 y Fz(CmpF)f(rame)0 4646 y Fd(Description:)44 b Fj(A)33
-b(CmpF)-7 b(rame)32 b(is)g(a)f(comp)r(ound)i(F)-7 b(rame)31
-b(whic)n(h)h(allo)n(ws)f(t)n(w)n(o)g(comp)r(onen)n(t)h(F)-7
-b(rames)32 b(\(of)g(an)n(y)f(class\))227 4745 y(to)i(b)r(e)h(merged)e
-(together)g(to)h(form)g(a)g(more)f(complex)h(F)-7 b(rame.)53
-b(The)33 b(axes)f(of)i(the)f(t)n(w)n(o)g(comp)r(onen)n(t)f(F)-7
-b(rames)227 4845 y(then)25 b(app)r(ear)f(together)f(in)i(the)f
-(resulting)g(CmpF)-7 b(rame)24 b(\(those)h(of)f(the)h(\014rst)f(F)-7
-b(rame,)24 b(follo)n(w)n(ed)g(b)n(y)g(those)g(of)g(the)227
-4944 y(second)j(F)-7 b(rame\).)227 5070 y(Since)24 b(a)f(CmpF)-7
-b(rame)23 b(is)g(itself)h(a)f(F)-7 b(rame,)24 b(it)g(can)f(b)r(e)g
-(used)h(as)e(a)h(comp)r(onen)n(t)g(in)h(forming)f(further)g(CmpF)-7
-b(rames.)227 5169 y(F)g(rames)27 b(of)h(arbitrary)d(complexit)n(y)i(ma)
-n(y)g(b)r(e)h(built)g(from)g(simple)f(individual)h(F)-7
-b(rames)27 b(in)h(this)g(w)n(a)n(y)-7 b(.)227 5295 y(Also)39
-b(since)f(a)h(F)-7 b(rame)38 b(is)h(a)f(Mapping,)j(a)e(CmpF)-7
-b(rame)38 b(can)h(also)f(b)r(e)h(used)g(as)f(a)g(Mapping.)70
-b(Normally)-7 b(,)41 b(a)227 5394 y(CmpF)-7 b(rame)35
-b(is)g(simply)h(equiv)-5 b(alen)n(t)35 b(to)g(a)g(UnitMap,)i(but)f(if)g
-(either)f(of)g(the)h(comp)r(onen)n(t)f(F)-7 b(rames)34
-b(within)i(a)227 5494 y(CmpF)-7 b(rame)41 b(is)f(a)g(Region)g(\(a)g
-(sub-class)g(of)g(F)-7 b(rame\),)44 b(then)d(the)g(CmpF)-7
-b(rame)40 b(will)h(use)f(the)h(Region)f(as)g(a)227 5593
-y(Mapping)g(when)g(transforming)e(v)-5 b(alues)39 b(for)g(axes)g
-(describ)r(ed)h(b)n(y)f(the)h(Region.)73 b(Th)n(us)39
-b(input)i(axis)e(v)-5 b(alues)227 5693 y(corresp)r(onding)26
-b(to)h(p)r(ositions)h(whic)n(h)f(are)g(outside)g(the)h(Region)f(will)h
-(result)f(in)h(bad)f(output)i(axis)d(v)-5 b(alues.)p
-eop end
-%%Page: 487 497
-TeXDict begin 487 496 bop 3643 52 a FF(487)0 351 y Fd(Constructor)32
-b(F)-8 b(unction:)227 451 y Fj(astCmpF)h(rame)-2 604
-y Fd(Inheritance)n(:)227 750 y Fj(The)28 b(CmpF)-7 b(rame)27
-b(class)g(inherits)g(from)h(the)g(F)-7 b(rame)27 b(class.)-2
-903 y Fd(A)m(ttributes)n(:)227 1049 y Fj(The)h(CmpF)-7
-b(rame)28 b(class)g(do)r(es)f(not)h(de\014ne)h(an)n(y)e(new)h
-(attributes)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f(applicable)h(to)g
-(all)227 1148 y(F)-7 b(rames.)34 b(Ho)n(w)n(ev)n(er,)19
-b(the)i(attributes)f(of)g(the)g(comp)r(onen)n(t)g(F)-7
-b(rames)19 b(can)h(b)r(e)g(accessed)f(as)g(if)h(they)h(w)n(ere)e
-(attributes)227 1248 y(of)29 b(the)g(CmpF)-7 b(rame.)39
-b(F)-7 b(or)28 b(instance,)g(if)h(a)g(CmpF)-7 b(rame)28
-b(con)n(tains)f(a)h(Sp)r(ecF)-7 b(rame)29 b(and)f(a)g(SkyF)-7
-b(rame,)28 b(then)h(the)227 1348 y(CmpF)-7 b(rame)30
-b(will)g(recognise)e(the)i Ft(")p Fj(Equino)n(x)p Ft(")e
-Fj(attribute)i(and)g(forw)n(ard)e(access)h(requests)g(to)h(the)g(comp)r
-(onen)n(t)227 1447 y(SkyF)-7 b(rame.)36 b(Lik)n(ewise,)27
-b(it)h(will)f(recognise)f(the)h Ft(")p Fj(RestF)-7 b(req)p
-Ft(")26 b Fj(attribute)i(and)f(forw)n(ard)f(access)g(requests)g(to)h
-(the)227 1547 y(comp)r(onen)n(t)36 b(Sp)r(ecF)-7 b(rame.)63
-b(An)36 b(axis)g(index)g(can)g(optionally)f(b)r(e)h(app)r(ended)h(to)f
-(the)h(end)f(of)g(an)n(y)f(attribute)227 1647 y(name,)f(in)f(whic)n(h)f
-(case)g(the)g(request)g(to)h(access)e(the)i(attribute)f(will)h(b)r(e)g
-(forw)n(arded)e(to)h(the)h(primary)e(F)-7 b(rame)227
-1746 y(de\014ning)28 b(the)g(sp)r(eci\014ed)g(axis.)-2
-1899 y Fd(F)-8 b(unctions)n(:)227 2045 y Fj(The)30 b(CmpF)-7
-b(rame)30 b(class)f(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)h
-(functions)g(b)r(ey)n(ond)g(those)f(whic)n(h)h(are)f(applicable)g(to)h
-(all)227 2145 y(F)-7 b(rames.)p 0 2347 3780 12 v 0 2478
-a Fz(CmpMap)1363 2479 y Fe(Comp)s(ound)38 b(Mapping)3228
-2478 y Fz(CmpMap)0 2676 y Fd(Description:)44 b Fj(A)e(CmpMap)f(is)g(a)g
-(comp)r(ound)g(Mapping)g(whic)n(h)g(allo)n(ws)f(t)n(w)n(o)g(comp)r
-(onen)n(t)h(Mappings)g(\(of)g(an)n(y)227 2776 y(class\))28
-b(to)g(b)r(e)g(connected)g(together)g(to)g(form)g(a)f(more)h(complex)g
-(Mapping.)38 b(This)28 b(connection)g(ma)n(y)f(either)h(b)r(e)227
-2875 y Ft(")p Fj(in)34 b(series)p Ft(")e Fj(\(where)h(the)h(\014rst)f
-(Mapping)h(is)f(used)h(to)f(transform)g(the)h(co)r(ordinates)e(of)h
-(eac)n(h)g(p)r(oin)n(t)h(and)f(the)227 2975 y(second)i(mapping)g(is)g
-(then)h(applied)f(to)g(the)g(result\),)i(or)e Ft(")p
-Fj(in)g(parallel)p Ft(")e Fj(\(where)i(one)g(Mapping)g(transforms)227
-3074 y(the)26 b(earlier)f(co)r(ordinates)f(for)h(eac)n(h)g(p)r(oin)n(t)
-h(and)g(the)g(second)f(Mapping)g(sim)n(ultaneously)g(transforms)f(the)i
-(later)227 3174 y(co)r(ordinates\).)227 3300 y(Since)g(a)f(CmpMap)g(is)
-h(itself)g(a)f(Mapping,)g(it)h(can)f(b)r(e)h(used)f(as)g(a)g(comp)r
-(onen)n(t)g(in)h(forming)e(further)i(CmpMaps.)227 3400
-y(Mappings)h(of)h(arbitrary)d(complexit)n(y)i(ma)n(y)g(b)r(e)h(built)h
-(from)e(simple)h(individual)f(Mappings)g(in)h(this)g(w)n(a)n(y)-7
-b(.)0 3553 y Fd(Constructor)32 b(F)-8 b(unction:)227
-3652 y Fj(astCmpMap)-2 3805 y Fd(Inheritance)n(:)227
-3951 y Fj(The)28 b(CmpMap)g(class)e(inherits)i(from)f(the)h(Mapping)f
-(class.)-2 4104 y Fd(A)m(ttributes)n(:)227 4250 y Fj(The)33
-b(CmpMap)f(class)g(do)r(es)g(not)g(de\014ne)h(an)n(y)e(new)i
-(attributes)f(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)g(applicable)g(to)g
-(all)227 4350 y(Mappings.)-2 4503 y Fd(F)-8 b(unctions)n(:)227
-4649 y Fj(The)34 b(CmpMap)h(class)e(do)r(es)g(not)i(de\014ne)f(an)n(y)f
-(new)h(functions)h(b)r(ey)n(ond)f(those)f(whic)n(h)h(are)f(applicable)h
-(to)g(all)227 4748 y(Mappings.)p 0 4951 V 0 5083 a Fz(CmpRegion)215
-b Fe(A)39 b(com)m(bination)c(of)k(t)m(w)m(o)e(regions)g(within)g(a)1567
-5197 y(single)h(F)-10 b(rame)3087 5083 y Fz(CmpRegion)0
-5394 y Fd(Description:)44 b Fj(A)d(CmpRegion)f(is)g(a)g(Region)g(whic)n
-(h)h(allo)n(ws)e(t)n(w)n(o)g(comp)r(onen)n(t)h(Regions)g(\(of)g(an)n(y)
-g(class\))g(to)g(b)r(e)227 5494 y(com)n(bined)29 b(to)h(form)f(a)g
-(more)f(complex)h(Region.)42 b(This)30 b(com)n(bination)e(ma)n(y)h(b)r
-(e)h(p)r(erformed)f(a)g(b)r(o)r(olean)g(AND,)227 5593
-y(OR)i(or)f(X)n(OR)h(\(exclusiv)n(e)g(OR\))g(op)r(erator.)46
-b(If)31 b(the)h(AND)g(op)r(erator)d(is)j(used,)g(then)f(a)g(p)r
-(osition)g(is)g(inside)g(the)227 5693 y(CmpRegion)24
-b(only)f(if)i(it)f(is)g(inside)g(b)r(oth)g(of)g(its)g(t)n(w)n(o)f(comp)
-r(onen)n(t)h(Regions.)34 b(If)25 b(the)f(OR)g(op)r(erator)e(is)h(used,)
-i(then)p eop end
-%%Page: 488 498
-TeXDict begin 488 497 bop 0 52 a FF(488)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)227 351 y Fj(a)e(p)r(osition)f(is)h
-(inside)g(the)g(CmpRegion)f(if)h(it)h(is)e(inside)h(either)g(\(or)f(b)r
-(oth\))h(of)g(its)g(t)n(w)n(o)f(comp)r(onen)n(t)h(Regions.)35
-b(If)227 451 y(the)27 b(X)n(OR)f(op)r(erator)f(is)h(used,)g(then)h(a)f
-(p)r(osition)g(is)h(inside)f(the)h(CmpRegion)f(if)h(it)f(is)h(inside)f
-(one)g(but)h(not)f(b)r(oth)227 551 y(of)g(its)f(t)n(w)n(o)g(comp)r
-(onen)n(t)g(Regions.)35 b(Other)25 b(op)r(erators)e(can)i(b)r(e)g
-(formed)g(b)n(y)g(negating)g(one)g(or)f(b)r(oth)i(comp)r(onen)n(t)227
-650 y(Regions)h(b)r(efore)g(using)g(them)i(to)e(construct)g(a)g(new)h
-(CmpRegion.)227 772 y(The)h(t)n(w)n(o)e(comp)r(onen)n(t)h(Region)g
-(need)g(not)h(refer)e(to)h(the)h(same)f(co)r(ordinate)f(F)-7
-b(rame,)28 b(but)h(it)g(m)n(ust)f(b)r(e)h(p)r(ossible)227
-872 y(for)39 b(the)h(astCon)n(v)n(ert)e(function)i(to)f(determine)h(a)f
-(Mapping)g(b)r(et)n(w)n(een)h(them)g(\(an)f(error)f(will)h(b)r(e)h(rep)
-r(orted)227 971 y(otherwise)33 b(when)g(the)h(CmpRegion)f(is)g
-(created\).)54 b(F)-7 b(or)33 b(instance,)i(a)e(CmpRegion)g(ma)n(y)f
-(com)n(bine)h(a)g(Region)227 1071 y(de\014ned)k(within)f(an)g(ICRS)g
-(SkyF)-7 b(rame)36 b(with)g(a)g(Region)f(de\014ned)i(within)f(a)g
-(Galactic)f(SkyF)-7 b(rame.)62 b(This)36 b(is)227 1171
-y(acceptable)i(b)r(ecause)g(the)g(SkyF)-7 b(rame)38 b(class)f(kno)n(ws)
-g(ho)n(w)h(to)g(con)n(v)n(ert)e(b)r(et)n(w)n(een)j(these)f(t)n(w)n(o)f
-(systems,)k(and)227 1270 y(consequen)n(tly)33 b(the)i(astCon)n(v)n(ert)
-d(function)j(will)f(also)f(b)r(e)h(able)g(to)g(con)n(v)n(ert)f(b)r(et)n
-(w)n(een)h(them.)57 b(In)34 b(suc)n(h)g(cases,)227 1370
-y(the)f(second)g(comp)r(onen)n(t)f(Region)g(will)h(b)r(e)h(mapp)r(ed)f
-(in)n(to)f(the)h(co)r(ordinate)f(F)-7 b(rame)32 b(of)h(the)g(\014rst)g
-(comp)r(onen)n(t)227 1470 y(Region,)g(and)g(the)f(F)-7
-b(rame)32 b(represen)n(ted)g(b)n(y)g(the)h(CmpRegion)f(as)f(a)h(whole)g
-(will)h(b)r(e)g(the)g(F)-7 b(rame)32 b(of)g(the)h(\014rst)227
-1569 y(comp)r(onen)n(t)28 b(Region.)227 1691 y(Since)20
-b(a)f(CmpRegion)f(is)i(itself)f(a)g(Region,)i(it)e(can)g(b)r(e)h(used)f
-(as)g(a)g(comp)r(onen)n(t)g(in)g(forming)g(further)g(CmpRegions.)227
-1791 y(Regions)27 b(of)g(arbitrary)f(complexit)n(y)h(ma)n(y)g(b)r(e)h
-(built)g(from)g(simple)f(individual)h(Regions)f(in)g(this)h(w)n(a)n(y)
--7 b(.)0 1935 y Fd(Constructor)32 b(F)-8 b(unction:)227
-2035 y Fj(astCmpRegion)-2 2179 y Fd(Inheritance)n(:)227
-2325 y Fj(The)28 b(CmpRegion)f(class)g(inherits)g(from)g(the)h(Region)f
-(class.)-2 2469 y Fd(A)m(ttributes)n(:)227 2616 y Fj(The)g(CmpRegion)f
-(class)g(do)r(es)g(not)h(de\014ne)g(an)n(y)e(new)i(attributes)g(b)r(ey)
-n(ond)f(those)g(whic)n(h)h(are)e(applicable)h(to)h(all)227
-2715 y(Regions.)-2 2860 y Fd(F)-8 b(unctions)n(:)227
-3006 y Fj(The)29 b(CmpRegion)f(class)f(do)r(es)h(not)g(de\014ne)h(an)n
-(y)e(new)i(functions)f(b)r(ey)n(ond)g(those)g(whic)n(h)h(are)e
-(applicable)h(to)g(all)227 3105 y(Regions.)p 0 3294 3780
-12 v 0 3425 a Fz(DSBSp)t(ecF)-11 b(rame)1303 3426 y Fe(Dual)39
-b(sideband)f(sp)s(ectral)1128 3541 y(co)s(ordinate)e(system)j
-(description)2865 3425 y Fz(DSBSp)t(ecF)-11 b(rame)0
-3719 y Fd(Description:)44 b Fj(A)d(DSBSp)r(ecF)-7 b(rame)41
-b(is)f(a)g(sp)r(ecialised)g(form)g(of)g(Sp)r(ecF)-7 b(rame)40
-b(whic)n(h)h(represen)n(ts)d(p)r(ositions)i(in)h(a)227
-3819 y(sp)r(ectrum)34 b(obtained)f(using)h(a)f(dual)g(sideband)h
-(instrumen)n(t.)55 b(Suc)n(h)33 b(an)h(instrumen)n(t)f(pro)r(duces)g(a)
-g(sp)r(ectrum)227 3918 y(in)d(whic)n(h)f(eac)n(h)g(p)r(oin)n(t)g(con)n
-(tains)g(con)n(tributions)f(from)h(t)n(w)n(o)g(distinctly)h(di\013eren)
-n(t)f(frequencies,)g(one)g(from)g(the)227 4018 y Ft(")p
-Fj(lo)n(w)n(er)34 b(side)i(band)p Ft(")f Fj(\(LSB\))i(and)e(one)h(from)
-f(the)i Ft(")p Fj(upp)r(er)e(side)h(band)p Ft(")f Fj(\(USB\).)i
-(Corresp)r(onding)d(LSB)i(and)227 4118 y(USB)26 b(frequencies)g(are)e
-(connected)i(b)n(y)f(the)i(fact)f(that)g(they)g(are)e(an)i(equal)f
-(distance)h(on)f(either)h(side)f(of)h(a)g(\014xed)227
-4217 y(cen)n(tral)h(frequency)g(kno)n(wn)g(as)g(the)h
-Ft(")p Fj(Lo)r(cal)e(Oscillator)p Ft(")g Fj(\(LO\))i(frequency)-7
-b(.)227 4339 y(When)33 b(quoting)e(a)g(p)r(osition)h(within)g(suc)n(h)g
-(a)f(sp)r(ectrum,)i(it)g(is)e(necessary)f(to)i(indicate)g(whether)g
-(the)g(quoted)227 4439 y(p)r(osition)27 b(is)g(the)g(USB)g(p)r(osition)
-g(or)f(the)i(corresp)r(onding)d(LSB)i(p)r(osition.)36
-b(The)27 b(SideBand)g(attribute)g(pro)n(vides)227 4539
-y(this)36 b(indication.)60 b(Another)35 b(option)g(that)h(the)f
-(SideBand)g(attribute)h(pro)n(vides)e(is)h(to)g(represen)n(t)f(a)h(sp)r
-(ectral)227 4638 y(p)r(osition)28 b(b)n(y)f(its)h(top)r(o)r(cen)n(tric)
-f(o\013set)g(from)h(the)g(LO)f(frequency)-7 b(.)227 4760
-y(In)32 b(practice,)f(the)h(LO)f(frequency)g(is)g(sp)r(eci\014ed)g(b)n
-(y)g(giving)g(the)h(distance)f(from)g(the)g(LO)g(frequency)g(to)g(some)
-227 4860 y Ft(")p Fj(cen)n(tral)p Ft(")37 b Fj(sp)r(ectral)h(p)r
-(osition.)69 b(T)n(ypically)37 b(this)i(cen)n(tral)e(p)r(osition)h(is)h
-(that)f(of)h(some)f(in)n(teresting)f(sp)r(ectral)227
-4959 y(feature.)f(The)23 b(distance)h(from)f(this)h(cen)n(tral)f(p)r
-(osition)g(to)h(the)g(LO)f(frequency)g(is)g(kno)n(wn)g(as)g(the)h
-Ft(")p Fj(in)n(termediate)227 5059 y(frequency)p Ft(")k
-Fj(\(IF\).)h(The)g(v)-5 b(alue)28 b(supplied)h(for)f(IF)h(can)f(b)r(e)h
-(a)f(signed)g(v)-5 b(alue)28 b(in)h(order)e(to)h(indicate)h(whether)f
-(the)227 5159 y(LO)f(frequency)h(is)f(ab)r(o)n(v)n(e)f(or)h(b)r(elo)n
-(w)g(the)h(cen)n(tral)f(p)r(osition.)0 5303 y Fd(Constructor)32
-b(F)-8 b(unction:)227 5403 y Fj(astDSBSp)r(ecF)h(rame)-2
-5547 y Fd(Inheritance)n(:)227 5693 y Fj(The)28 b(DSBSp)r(ecF)-7
-b(rame)28 b(class)e(inherits)i(from)f(the)h(Sp)r(ecF)-7
-b(rame)27 b(class.)p eop end
-%%Page: 489 499
-TeXDict begin 489 498 bop 3643 52 a FF(489)-2 351 y Fd(A)m(ttributes)n
-(:)227 497 y Fj(In)39 b(addition)g(to)g(those)f(attributes)h(common)g
-(to)f(all)h(Sp)r(ecF)-7 b(rames,)41 b(ev)n(ery)d(DSBSp)r(ecF)-7
-b(rame)39 b(also)f(has)g(the)227 597 y(follo)n(wing)27
-b(attributes:)340 862 y Fi(\017)45 b Fj(AlignSideBand:)37
-b(Should)28 b(alignmen)n(t)f(o)r(ccur)g(b)r(et)n(w)n(een)g(sidebands?)
-340 996 y Fi(\017)45 b Fj(DSBCen)n(tre:)37 b(The)28 b(cen)n(tral)e(p)r
-(osition)i(of)f(in)n(terest.)340 1130 y Fi(\017)45 b
-Fj(IF:)28 b(The)g(in)n(termediate)f(frequency)g(used)h(to)f(de\014ne)h
-(the)g(LO)f(frequency)-7 b(.)340 1264 y Fi(\017)45 b
-Fj(ImagF)-7 b(req:)36 b(The)28 b(image)e(sideband)i(equiv)-5
-b(alen)n(t)27 b(of)h(the)g(rest)f(frequency)-7 b(.)340
-1398 y Fi(\017)45 b Fj(SideBand:)37 b(Indicates)27 b(whic)n(h)h
-(sideband)f(the)h(DSBSp)r(ecF)-7 b(rame)28 b(represen)n(ts.)-2
-1562 y Fd(F)-8 b(unctions)n(:)227 1708 y Fj(The)27 b(DSBSp)r(ecF)-7
-b(rame)27 b(class)f(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)g
-(functions)h(b)r(ey)n(ond)g(those)f(whic)n(h)h(are)f(applicable)g(to)
-227 1808 y(all)i(Sp)r(ecF)-7 b(rames.)p 0 2010 3780 12
-v 0 2140 a Fz(DssMap)696 2141 y Fe(Map)39 b(p)s(oin)m(ts)f(using)g(a)h
-(Digitised)e(Sky)i(Surv)m(ey)f(plate)1688 2256 y(solution)3303
-2140 y Fz(DssMap)0 2424 y Fd(Description:)44 b Fj(The)29
-b(DssMap)g(class)e(implemen)n(ts)j(a)e(Mapping)g(whic)n(h)h(transforms)
-e(b)r(et)n(w)n(een)i(2-dimensional)f(pixel)227 2524 y(co)r(ordinates)38
-b(and)h(an)g(equatorial)e(sky)h(co)r(ordinate)g(system)h(\(righ)n(t)g
-(ascension)e(and)i(declination\))g(using)g(a)227 2623
-y(Digitised)28 b(Sky)g(Surv)n(ey)e(\(DSS\))j(astrometric)d(plate)i
-(solution.)227 2749 y(The)e(input)g(co)r(ordinates)e(are)h(pixel)g(n)n
-(um)n(b)r(ers)g(along)g(the)h(\014rst)f(and)g(second)g(dimensions)g(of)
-h(an)f(image,)g(where)227 2849 y(the)j(cen)n(tre)f(of)h(the)g(\014rst)f
-(pixel)h(is)f(lo)r(cated)h(at)f(\(1,1\))g(and)h(the)g(spacing)e(b)r(et)
-n(w)n(een)i(pixel)g(cen)n(tres)e(is)i(unit)n(y)-7 b(.)227
-2974 y(The)34 b(output)h(co)r(ordinates)e(are)g(righ)n(t)g(ascension)g
-(and)h(declination)g(in)h(radians.)55 b(The)34 b(celestial)g(co)r
-(ordinate)227 3074 y(system)22 b(used)g(\(FK4,)h(FK5,)g(etc.\))35
-b(is)22 b(unsp)r(eci\014ed,)i(and)e(will)g(usually)g(b)r(e)g(indicated)
-h(b)n(y)e(appropriate)g(k)n(eyw)n(ords)227 3174 y(in)28
-b(a)f(FITS)h(header.)0 3325 y Fd(Constructor)k(F)-8 b(unction:)227
-3425 y Fj(The)40 b(DssMap)g(class)f(do)r(es)g(not)h(ha)n(v)n(e)f(a)g
-(constructor)g(function.)74 b(A)40 b(DssMap)g(is)g(created)f(only)g(as)
-h(a)f(b)n(y-)227 3525 y(pro)r(duct)24 b(of)f(reading)f(a)h(F)-7
-b(rameSet)24 b(\(using)f(astRead\))g(from)g(a)g(FitsChan)h(whic)n(h)f
-(con)n(tains)f(FITS)i(header)f(cards)227 3624 y(describing)i(a)f(DSS)i
-(plate)g(solution,)f(and)g(whose)f(Enco)r(ding)h(attribute)g(is)g(set)h
-(to)f Ft(")p Fj(DSS)p Ft(")p Fj(.)36 b(The)25 b(result)g(of)g(suc)n(h)
-227 3724 y(a)i(read,)g(if)h(successful,)g(is)f(a)g(F)-7
-b(rameSet)28 b(whose)f(base)g(and)g(curren)n(t)g(F)-7
-b(rames)27 b(are)f(related)h(b)n(y)g(a)h(DssMap.)-2 3876
-y Fd(Inheritance)n(:)227 4022 y Fj(The)g(DssMap)f(class)g(inherits)g
-(from)h(the)g(Mapping)f(class.)-2 4174 y Fd(A)m(ttributes)n(:)227
-4320 y Fj(The)36 b(DssMap)f(class)g(do)r(es)g(not)g(de\014ne)h(an)n(y)f
-(new)g(attributes)g(b)r(ey)n(ond)h(those)f(whic)n(h)g(are)g(applicable)
-g(to)g(all)227 4420 y(Mappings.)-2 4571 y Fd(F)-8 b(unctions)n(:)227
-4718 y Fj(The)38 b(DssMap)e(class)h(do)r(es)f(not)i(de\014ne)f(an)n(y)f
-(new)i(functions)f(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f(applicable)h
-(to)g(all)227 4817 y(Mappings.)p 0 5019 V 0 5151 a Fz(Ellipse)231
-b Fe(An)39 b(elliptical)c(region)j(within)f(a)h(2-dimensional)e(F)-10
-b(rame)229 b Fz(Ellipse)0 5342 y Fd(Description:)44 b
-Fj(The)31 b(Ellipse)e(class)h(implemen)n(ts)g(a)g(Region)f(whic)n(h)i
-(represen)n(ts)d(a)i(ellipse)g(within)h(a)f(2-dimensional)227
-5441 y(F)-7 b(rame.)0 5593 y Fd(Constructor)32 b(F)-8
-b(unction:)227 5693 y Fj(astEllipse)p eop end
-%%Page: 490 500
-TeXDict begin 490 499 bop 0 52 a FF(490)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)-2 351 y Fd(Inheritance)n(:)227
-497 y Fj(The)f(Ellipse)f(class)g(inherits)g(from)g(the)h(Region)f
-(class.)-2 644 y Fd(A)m(ttributes)n(:)227 790 y Fj(The)39
-b(Ellipse)g(class)f(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)h
-(attributes)g(b)r(ey)n(ond)g(those)f(whic)n(h)h(are)f(applicable)g(to)h
-(all)227 890 y(Regions.)-2 1037 y Fd(F)-8 b(unctions)n(:)227
-1183 y Fj(In)23 b(addition)g(to)f(those)h(functions)g(applicable)f(to)h
-(all)f(Regions,)h(the)g(follo)n(wing)f(functions)h(ma)n(y)f(also)f(b)r
-(e)j(applied)227 1282 y(to)k(all)f(Ellipses:)340 1539
-y Fi(\017)45 b Fj(astEllipseP)n(ars:)34 b(Get)28 b(the)g(geometric)f
-(parameters)f(of)h(the)h(Ellipse)340 1669 y Fi(\017)45
-b Fj(AST)p Ft(_)p Fj(ELLIPSEP)-7 b(ARS:)26 b(Get)i(the)g(geometric)f
-(parameters)f(of)h(the)h(Ellipse)p 0 1863 3780 12 v 0
-1995 a Fz(FitsChan)843 2002 y Fe(I/O)39 b(Channel)f(using)g(FITS)h
-(header)f(cards)h(to)1440 2123 y(represen)m(t)f(Ob)7
-b(jects)3240 1995 y Fz(FitsChan)0 2311 y Fd(Description:)44
-b Fj(A)27 b(FitsChan)e(is)h(a)g(sp)r(ecialised)f(form)h(of)f(Channel)h
-(whic)n(h)g(supp)r(orts)f(I/O)g(op)r(erations)g(in)n(v)n(olving)f(the)
-227 2411 y(use)32 b(of)h(FITS)f(\(Flexible)h(Image)e(T)-7
-b(ransp)r(ort)31 b(System\))i(header)e(cards.)50 b(W)-7
-b(riting)32 b(an)g(Ob)5 b(ject)33 b(to)f(a)g(FitsChan)227
-2510 y(\(using)d(astW)-7 b(rite\))29 b(will,)h(if)f(the)g(Ob)5
-b(ject)29 b(is)g(suitable,)g(generate)f(a)g(description)h(of)f(that)i
-(Ob)5 b(ject)28 b(comp)r(osed)h(of)227 2610 y(FITS)j(header)e(cards,)g
-(and)h(reading)f(from)g(a)h(FitsChan)g(will)g(create)f(a)h(new)g(Ob)5
-b(ject)30 b(from)h(its)g(FITS)g(header)227 2710 y(card)c(description.)
-227 2833 y(While)36 b(a)e(FitsChan)h(is)f(activ)n(e,)i(it)f(represen)n
-(ts)f(a)g(bu\013er)h(whic)n(h)g(ma)n(y)f(con)n(tain)g(zero)f(or)h(more)
-g(80-c)n(haracter)227 2932 y Ft(")p Fj(header)29 b(cards)p
-Ft(")f Fj(conforming)g(to)i(FITS)f(con)n(v)n(en)n(tions.)41
-b(An)n(y)30 b(sequence)f(of)h(FITS-conforming)e(header)h(cards)227
-3032 y(ma)n(y)f(b)r(e)g(stored,)g(apart)f(from)h(the)h
-Ft(")p Fj(END)p Ft(")e Fj(card)h(whose)f(existence)h(is)g(merely)g
-(implied.)39 b(The)29 b(cards)e(ma)n(y)g(b)r(e)227 3132
-y(accessed)g(in)g(an)n(y)g(order)f(b)n(y)h(using)g(the)h(FitsChan's)f
-(in)n(teger)g(Card)g(attribute,)g(whic)n(h)h(iden)n(ti\014es)f(a)g
-Ft(")p Fj(curren)n(t)p Ft(")227 3231 y Fj(card,)g(to)h(whic)n(h)f
-(subsequen)n(t)h(op)r(erations)e(apply)-7 b(.)37 b(Searc)n(hes)26
-b(based)h(on)h(k)n(eyw)n(ord)d(ma)n(y)i(b)r(e)h(p)r(erformed)g(\(using)
-227 3331 y(astFindFits\),)k(new)e(cards)f(ma)n(y)g(b)r(e)i(inserted)f
-(\(astPutFits,)h(astPutCards,)e(astSetFits)p Fl(<)p Fj(X)p
-Fl(>)p Fj(\))h(and)g(existing)227 3431 y(ones)d(ma)n(y)g(b)r(e)h
-(deleted)g(\(astDelFits\),)h(extracted)e(\(astGetFits)p
-Fl(<)p Fj(X)p Fl(>)p Fj(\),)g(or)g(c)n(hanged)g(\(astSetFits)p
-Fl(<)p Fj(X)p Fl(>)p Fj(\).)227 3554 y(When)37 b(y)n(ou)f(create)g(a)g
-(FitsChan,)j(y)n(ou)d(ha)n(v)n(e)g(the)h(option)f(of)h(sp)r(ecifying)g
-Ft(")p Fj(source)p Ft(")d Fj(and)j Ft(")p Fj(sink)p Ft(")e
-Fj(functions)227 3653 y(whic)n(h)26 b(connect)g(it)h(to)f(external)f
-(data)h(stores)f(b)n(y)h(reading)f(and)h(writing)g(FITS)g(header)g
-(cards.)35 b(If)26 b(y)n(ou)g(pro)n(vide)227 3753 y(a)h(source)f
-(function,)j(it)e(is)h(used)f(to)g(\014ll)h(the)g(FitsChan)f(with)h
-(header)f(cards)f(when)i(it)g(is)f(accessed)f(for)h(the)h(\014rst)227
-3853 y(time.)56 b(If)34 b(y)n(ou)f(do)h(not)f(pro)n(vide)g(a)g(source)g
-(function,)j(the)e(FitsChan)g(remains)e(empt)n(y)i(un)n(til)g(y)n(ou)f
-(explicitly)227 3952 y(en)n(ter)25 b(data)g(in)n(to)h(it)g(\(e.g.)36
-b(using)25 b(astPutFits,)h(astPutCards)e(or)g(astW)-7
-b(rite\).)36 b(If)26 b(y)n(ou)f(pro)n(vide)f(a)i(sink)f(function,)227
-4052 y(it)38 b(is)f(used)g(to)h(deliv)n(er)e(an)n(y)h(remaining)f(con)n
-(ten)n(ts)h(of)g(a)g(FitsChan)g(to)g(an)g(external)g(data)f(store)h
-(when)g(the)227 4151 y(FitsChan)30 b(is)f(deleted.)44
-b(If)30 b(y)n(ou)e(do)i(not)f(pro)n(vide)g(a)g(sink)g(function,)i(an)n
-(y)e(header)f(cards)h(remaining)f(when)i(the)227 4251
-y(FitsChan)25 b(is)f(deleted)h(will)g(b)r(e)g(lost,)g(so)f(y)n(ou)f
-(should)i(arrange)d(to)i(extract)g(them)h(\014rst)f(if)i(necessary)c
-(\(e.g.)36 b(using)227 4351 y(astFindFits)28 b(or)f(astRead\).)227
-4474 y(Co)r(ordinate)i(system)g(information)g(ma)n(y)g(b)r(e)h(describ)
-r(ed)g(using)f(FITS)h(header)f(cards)f(using)i(sev)n(eral)d(di\013eren)
-n(t)227 4574 y(con)n(v)n(en)n(tions,)h(termed)h Ft(")p
-Fj(enco)r(dings)p Ft(")p Fj(.)39 b(When)29 b(an)g(AST)g(Ob)5
-b(ject)29 b(is)f(written)h(to)g(\(or)f(read)g(from\))h(a)f(FitsChan,)
-227 4673 y(the)22 b(v)-5 b(alue)22 b(of)g(the)g(FitsChan's)g(Enco)r
-(ding)f(attribute)g(determines)h(ho)n(w)f(the)h(Ob)5
-b(ject)22 b(is)g(con)n(v)n(erted)e(to)i(\(or)f(from\))227
-4773 y(a)31 b(description)g(in)n(v)n(olving)g(FITS)g(header)g(cards.)48
-b(In)32 b(general,)f(di\013eren)n(t)h(enco)r(dings)f(will)g(result)h
-(in)f(di\013eren)n(t)227 4872 y(sets)24 b(of)f(header)g(cards)g(to)g
-(describ)r(e)h(the)g(same)f(Ob)5 b(ject.)35 b(Examples)23
-b(of)g(enco)r(dings)g(include)h(the)h(DSS)f(enco)r(ding)227
-4972 y(\(based)35 b(on)g(con)n(v)n(en)n(tions)f(used)h(b)n(y)g(the)h
-(STScI)g(Digitised)f(Sky)g(Surv)n(ey)g(data\),)i(the)f(FITS-W)n(CS)f
-(enco)r(ding)227 5072 y(\(based)30 b(on)g(a)g(prop)r(osed)f(FITS)h
-(standard\))g(and)g(the)g(NA)-7 b(TIVE)31 b(enco)r(ding)e(\(a)h(near)f
-(loss-less)g(w)n(a)n(y)g(of)h(storing)227 5171 y(AST)e(Ob)5
-b(jects)27 b(in)h(FITS)g(headers\).)227 5295 y(The)e(a)n(v)-5
-b(ailable)25 b(enco)r(dings)g(di\013er)h(in)g(the)g(range)f(of)h(Ob)5
-b(jects)25 b(they)h(can)g(represen)n(t,)f(in)h(the)g(n)n(um)n(b)r(er)g
-(of)g(Ob)5 b(ject)227 5394 y(descriptions)31 b(that)h(can)g(co)r(exist)
-f(in)h(the)g(same)g(FitsChan,)h(and)e(in)h(their)g(accessibilit)n(y)f
-(to)h(other)f(\(external\))227 5494 y(astronom)n(y)36
-b(applications)g(\(see)i(the)f(Enco)r(ding)g(attribute)h(for)f
-(details\).)66 b(Enco)r(dings)36 b(are)h(not)g(necessarily)227
-5593 y(m)n(utually)28 b(exclusiv)n(e)g(and)g(it)h(ma)n(y)e(sometimes)h
-(b)r(e)h(p)r(ossible)f(to)g(describ)r(e)g(the)g(same)g(Ob)5
-b(ject)28 b(in)h(sev)n(eral)d(w)n(a)n(ys)227 5693 y(within)j(a)e
-(particular)f(set)i(of)f(FITS)h(header)f(cards)f(b)n(y)i(using)f(sev)n
-(eral)f(di\013eren)n(t)h(enco)r(dings.)p eop end
-%%Page: 491 501
-TeXDict begin 491 500 bop 3643 52 a FF(491)227 351 y
-Fj(The)28 b(detailed)g(b)r(eha)n(viour)f(of)h(astRead)f(and)h(astW)-7
-b(rite,)28 b(when)g(used)g(with)g(a)f(FitsChan,)i(dep)r(ends)f(on)g
-(the)g(en-)227 451 y(co)r(ding)23 b(in)h(use.)35 b(In)24
-b(general,)f(ho)n(w)n(ev)n(er,)f(all)h(successful)g(use)g(of)h(astRead)
-e(is)i(destructiv)n(e,)f(so)g(that)h(FITS)f(header)227
-551 y(cards)j(are)f(consumed)h(in)h(the)g(pro)r(cess)e(of)h(reading)f
-(an)i(Ob)5 b(ject,)26 b(and)g(are)g(remo)n(v)n(ed)f(from)h(the)h
-(FitsChan)f(\(this)227 650 y(deletion)e(can)g(b)r(e)g(prev)n(en)n(ted)f
-(for)g(sp)r(eci\014c)h(cards)e(b)n(y)i(calling)f(the)h(astRetainFits)g
-(function\).)36 b(An)25 b(unsuccessful)227 750 y(call)30
-b(of)g(astRead)g(\(for)g(instance,)g(caused)g(b)n(y)g(the)g(FitsChan)h
-(not)f(con)n(taining)f(the)i(necessary)d(FITS)j(headers)227
-849 y(cards)c(needed)g(to)h(create)f(an)g(Ob)5 b(ject\))28
-b(results)f(in)h(the)g(con)n(ten)n(ts)f(of)g(the)h(FitsChan)g(b)r(eing)
-f(left)i(unc)n(hanged.)227 971 y(If)g(the)f(enco)r(ding)f(in)h(use)g
-(allo)n(ws)f(only)g(a)h(single)f(Ob)5 b(ject)28 b(description)f(to)h(b)
-r(e)g(stored)f(in)h(a)g(FitsChan)g(\(e.g.)37 b(the)227
-1071 y(DSS,)27 b(FITS-W)n(CS)f(and)f(FITS-IRAF)i(enco)r(dings\),)f
-(then)g(write)g(op)r(erations)e(using)h(astW)-7 b(rite)26
-b(will)g(o)n(v)n(er-write)227 1171 y(an)n(y)37 b(existing)h(Ob)5
-b(ject)37 b(description)g(using)h(that)g(enco)r(ding.)66
-b(Otherwise)37 b(\(e.g.)67 b(the)39 b(NA)-7 b(TIVE)38
-b(enco)r(ding\),)227 1270 y(m)n(ultiple)i(Ob)5 b(ject)39
-b(descriptions)g(are)f(written)i(sequen)n(tially)e(and)h(ma)n(y)g
-(later)f(b)r(e)i(read)f(bac)n(k)f(in)i(the)f(same)227
-1370 y(sequence.)0 1514 y Fd(Constructor)32 b(F)-8 b(unction:)227
-1614 y Fj(astFitsChan)-2 1758 y Fd(Inheritance)n(:)227
-1904 y Fj(The)28 b(FitsChan)g(class)e(inherits)i(from)f(the)h(Channel)f
-(class.)-2 2049 y Fd(A)m(ttributes)n(:)227 2195 y Fj(In)37
-b(addition)f(to)g(those)g(attributes)g(common)g(to)g(all)g(Channels,)i
-(ev)n(ery)d(FitsChan)h(also)f(has)h(the)h(follo)n(wing)227
-2295 y(attributes:)340 2548 y Fi(\017)45 b Fj(AllW)-7
-b(arnings:)37 b(A)28 b(list)f(of)h(the)g(a)n(v)-5 b(ailable)26
-b(conditions)340 2676 y Fi(\017)45 b Fj(Card:)36 b(Index)28
-b(of)g(curren)n(t)e(FITS)i(card)f(in)h(a)f(FitsChan)340
-2804 y Fi(\017)45 b Fj(CarLin:)36 b(Ignore)27 b(spherical)f(rotations)g
-(on)i(CAR)g(pro)5 b(jections?)340 2931 y Fi(\017)45 b
-Fj(CDMatrix:)37 b(Use)27 b(a)h(CD)g(matrix)f(instead)g(of)h(a)f(PC)g
-(matrix?)340 3059 y Fi(\017)45 b Fj(Clean:)37 b(Remo)n(v)n(e)26
-b(cards)h(used)g(whilst)h(reading)f(ev)n(en)g(if)h(an)f(error)f(o)r
-(ccurs?)340 3187 y Fi(\017)45 b Fj(DefB1950:)36 b(Use)27
-b(FK4)g(B1950)f(as)h(default)h(equatorial)e(co)r(ordinates?)340
-3315 y Fi(\017)45 b Fj(Enco)r(ding:)36 b(System)28 b(for)f(enco)r(ding)
-g(Ob)5 b(jects)28 b(as)f(FITS)g(headers)340 3443 y Fi(\017)45
-b Fj(FitsDigits:)38 b(Digits)27 b(of)h(precision)f(for)g(\015oating-p)r
-(oin)n(t)f(FITS)i(v)-5 b(alues)340 3570 y Fi(\017)45
-b Fj(Iw)n(c:)37 b(Add)28 b(a)f(F)-7 b(rame)27 b(describing)g(In)n
-(termediate)g(W)-7 b(orld)27 b(Co)r(ords?)340 3698 y
-Fi(\017)45 b Fj(Ncard:)37 b(Num)n(b)r(er)27 b(of)h(FITS)g(header)f
-(cards)f(in)i(a)f(FitsChan)340 3826 y Fi(\017)45 b Fj(W)-7
-b(arnings:)36 b(Pro)r(duces)27 b(w)n(arnings)e(ab)r(out)j(selected)f
-(conditions)-2 3983 y Fd(F)-8 b(unctions)n(:)227 4129
-y Fj(In)40 b(addition)f(to)h(those)f(functions)g(applicable)g(to)h(all)
-f(Channels,)j(the)e(follo)n(wing)e(functions)i(ma)n(y)f(also)f(b)r(e)
-227 4229 y(applied)28 b(to)f(all)h(FitsChans:)340 4482
-y Fi(\017)45 b Fj(astDelFits:)37 b(Delete)29 b(the)f(curren)n(t)e(FITS)
-i(card)f(in)h(a)f(FitsChan)340 4610 y Fi(\017)45 b Fj(astFindFits:)38
-b(Find)28 b(a)f(FITS)h(card)f(in)g(a)h(FitsChan)f(b)n(y)h(k)n(eyw)n
-(ord)340 4738 y Fi(\017)45 b Fj(astGetFits)p Fl(<)p Fj(X)p
-Fl(>)p Fj(:)37 b(Get)28 b(a)f(k)n(eyw)n(ord)f(v)-5 b(alue)27
-b(from)g(a)h(FitsChan)340 4865 y Fi(\017)45 b Fj(astSetFits)p
-Fl(<)p Fj(X)p Fl(>)p Fj(:)37 b(Store)27 b(a)g(new)h(k)n(eyw)n(ord)d(v)
--5 b(alue)28 b(in)g(a)f(FitsChan)340 4993 y Fi(\017)45
-b Fj(astPurgeW)n(CS:)26 b(Delete)i(all)g(W)n(CS-related)e(cards)h(in)h
-(a)f(FitsChan)340 5121 y Fi(\017)45 b Fj(AST)p Ft(_)p
-Fj(PUR)n(GEW)n(CS:)27 b(Delete)h(all)g(W)n(CS-related)e(cards)h(in)h(a)
-f(FitsChan)340 5249 y Fi(\017)45 b Fj(astPutFits:)37
-b(Store)27 b(a)g(FITS)h(header)f(card)g(in)g(a)h(FitsChan)340
-5376 y Fi(\017)45 b Fj(astPutCards:)36 b(Stores)26 b(a)h(set)h(of)g
-(FITS)g(header)e(card)h(in)h(a)f(FitsChan)340 5504 y
-Fi(\017)45 b Fj(astRetainFits:)37 b(Ensure)27 b(curren)n(t)f(card)h(is)
-h(retained)f(in)h(a)f(FitsChan)340 5632 y Fi(\017)45
-b Fj(astT)-7 b(estFits:)37 b(T)-7 b(est)28 b(if)g(a)f(k)n(eyw)n(ord)f
-(has)h(a)g(de\014ned)h(v)-5 b(alue)27 b(in)h(a)f(FitsChan)p
-eop end
-%%Page: 492 502
-TeXDict begin 492 501 bop 0 52 a FF(492)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)p 0 351 3780 12 v 0 483
-a Fz(FluxF)-11 b(rame)594 b Fe(Measured)39 b(\015ux)g(description)592
-b Fz(FluxF)-11 b(rame)0 655 y Fd(Description:)44 b Fj(A)39
-b(FluxF)-7 b(rame)37 b(is)h(a)f(sp)r(ecialised)h(form)f(of)h
-(one-dimensional)e(F)-7 b(rame)38 b(whic)n(h)f(represen)n(ts)g(v)-5
-b(arious)227 754 y(systems)29 b(used)h(to)f(represen)n(t)f(the)i
-(signal)f(lev)n(el)g(in)g(an)h(observ)-5 b(ation.)41
-b(The)29 b(particular)f(co)r(ordinate)h(system)g(to)227
-854 y(b)r(e)i(used)f(is)g(sp)r(eci\014ed)g(b)n(y)g(setting)g(the)g
-(FluxF)-7 b(rame's)29 b(System)i(attribute)f(quali\014ed,)g(as)f
-(necessary)-7 b(,)29 b(b)n(y)h(other)227 953 y(attributes)e(suc)n(h)f
-(as)g(the)h(units,)g(etc)g(\(see)f(the)h(description)f(of)h(the)g
-(System)g(attribute)f(for)g(details\).)227 1074 y(All)i(\015ux)f(v)-5
-b(alues)28 b(are)f(assumed)g(to)h(b)r(e)h(measured)e(at)h(the)h(same)e
-(frequency)h(or)f(w)n(a)n(v)n(elength)f(\(as)i(giv)n(en)f(b)n(y)h(the)
-227 1173 y(Sp)r(ecV)-7 b(al)28 b(attribute\).)38 b(Th)n(us)27
-b(this)h(class)e(is)i(more)f(appropriate)f(for)h(use)g(with)h(images)f
-(rather)f(than)i(sp)r(ectra.)0 1314 y Fd(Constructor)k(F)-8
-b(unction:)227 1414 y Fj(astFluxF)h(rame)-2 1555 y Fd(Inheritance)n(:)
-227 1701 y Fj(The)28 b(FluxF)-7 b(rame)27 b(class)g(inherits)g(from)h
-(the)g(F)-7 b(rame)27 b(class.)-2 1842 y Fd(A)m(ttributes)n(:)227
-1988 y Fj(In)38 b(addition)f(to)g(those)g(attributes)g(common)g(to)g
-(all)g(F)-7 b(rames,)38 b(ev)n(ery)e(FluxF)-7 b(rame)37
-b(also)f(has)h(the)h(follo)n(wing)227 2087 y(attributes:)340
-2335 y Fi(\017)45 b Fj(Sp)r(ecV)-7 b(al:)38 b(The)27
-b(sp)r(ectral)g(p)r(osition)h(at)f(whic)n(h)h(the)g(\015ux)f(v)-5
-b(alues)28 b(are)e(measured.)-2 2489 y Fd(F)-8 b(unctions)n(:)227
-2635 y Fj(The)31 b(FluxF)-7 b(rame)30 b(class)f(do)r(es)h(not)h
-(de\014ne)f(an)n(y)g(new)g(functions)h(b)r(ey)n(ond)f(those)g(whic)n(h)
-g(are)g(applicable)g(to)g(all)227 2734 y(F)-7 b(rames.)p
-0 2916 V 0 3047 a Fz(F)c(rame)1112 3048 y Fe(Co)s(ordinate)36
-b(system)i(description)3412 3047 y Fz(F)-11 b(rame)0
-3220 y Fd(Description:)44 b Fj(This)22 b(class)e(is)h(used)h(to)f
-(represen)n(t)f(co)r(ordinate)g(systems.)34 b(It)22 b(do)r(es)f(this)h
-(in)f(rather)g(the)g(same)g(w)n(a)n(y)f(that)227 3319
-y(a)31 b(frame)f(around)g(a)h(graph)e(describ)r(es)i(the)g(co)r
-(ordinate)f(space)g(in)h(whic)n(h)g(data)f(are)g(plotted.)47
-b(Consequen)n(tly)-7 b(,)227 3419 y(a)35 b(F)-7 b(rame)34
-b(has)g(a)g(Title)h(\(string\))g(attribute,)i(whic)n(h)e(describ)r(es)f
-(the)h(co)r(ordinate)e(space,)j(and)f(con)n(tains)f(axes)227
-3519 y(whic)n(h)28 b(in)h(turn)f(hold)g(information)g(suc)n(h)g(as)f
-(Lab)r(el)h(and)g(Units)h(strings)e(whic)n(h)h(are)g(used)g(for)f(lab)r
-(elling)h(\(e.g.\))227 3618 y(graphical)e(output.)38
-b(In)27 b(general,)g(ho)n(w)n(ev)n(er,)e(the)j(n)n(um)n(b)r(er)g(of)f
-(axes)g(is)g(not)h(restricted)f(to)g(t)n(w)n(o.)227 3738
-y(F)-7 b(unctions)24 b(are)f(a)n(v)-5 b(ailable)23 b(for)g(con)n(v)n
-(erting)f(F)-7 b(rame)24 b(co)r(ordinate)e(v)-5 b(alues)24
-b(in)n(to)g(a)f(form)h(suitable)f(for)h(displa)n(y)-7
-b(,)24 b(and)227 3838 y(also)j(for)g(calculating)g(distances)g(and)g
-(o\013sets)g(b)r(et)n(w)n(een)h(p)r(ositions)f(within)h(the)g(F)-7
-b(rame.)227 3958 y(F)g(rames)27 b(ma)n(y)g(also)f(con)n(tain)h(kno)n
-(wledge)g(of)g(ho)n(w)g(to)h(transform)e(to)i(and)f(from)g(related)g
-(co)r(ordinate)g(systems.)0 4099 y Fd(Constructor)32
-b(F)-8 b(unction:)227 4199 y Fj(astF)h(rame)0 4340 y
-Fd(Notes:)340 4613 y Fi(\017)45 b Fj(When)40 b(used)f(as)g(a)g
-(Mapping,)j(a)c(F)-7 b(rame)39 b(implemen)n(ts)h(a)f(unit)g(\(n)n
-(ull\))h(transformation)e(in)i(b)r(oth)f(the)427 4713
-y(forw)n(ard)22 b(and)g(in)n(v)n(erse)g(directions)g(\(equiv)-5
-b(alen)n(t)23 b(to)g(a)g(UnitMap\).)36 b(The)23 b(Nin)h(and)f(Nout)g
-(attribute)g(v)-5 b(alues)427 4813 y(are)27 b(b)r(oth)h(equal)f(to)g
-(the)h(n)n(um)n(b)r(er)g(of)f(F)-7 b(rame)27 b(axes.)-2
-4966 y Fd(Inheritance)n(:)227 5112 y Fj(The)h(F)-7 b(rame)27
-b(class)g(inherits)g(from)g(the)h(Mapping)g(class.)-2
-5253 y Fd(A)m(ttributes)n(:)227 5399 y Fj(In)33 b(addition)g(to)g
-(those)g(attributes)g(common)f(to)h(all)g(Mappings,)g(ev)n(ery)f(F)-7
-b(rame)32 b(also)g(has)h(the)g(follo)n(wing)f(at-)227
-5499 y(tributes)20 b(\(if)h(the)g(F)-7 b(rame)19 b(has)h(only)g(one)f
-(axis,)i(the)g(axis)e(sp)r(eci\014er)h(can)f(b)r(e)i(omited)f(from)g
-(the)g(follo)n(wing)f(attribute)227 5598 y(names\):)p
-eop end
-%%Page: 493 503
-TeXDict begin 493 502 bop 3643 52 a FF(493)340 351 y
-Fi(\017)45 b Fj(AlignSystem:)37 b(Co)r(ordinate)27 b(system)g(used)h
-(to)f(align)g(F)-7 b(rames)340 481 y Fi(\017)45 b Fj(Bottom\(axis\):)37
-b(Lo)n(w)n(est)26 b(axis)h(v)-5 b(alue)27 b(to)h(displa)n(y)340
-611 y Fi(\017)45 b Fj(Digits/Digits\(axis\):)37 b(Num)n(b)r(er)27
-b(of)h(digits)f(of)h(precision)340 741 y Fi(\017)45 b
-Fj(Direction\(axis\):)37 b(Displa)n(y)27 b(axis)g(in)h(con)n(v)n(en)n
-(tional)d(direction?)340 871 y Fi(\017)45 b Fj(Domain:)37
-b(Co)r(ordinate)27 b(system)g(domain)340 1001 y Fi(\017)45
-b Fj(Dut1:)38 b(Di\013erence)27 b(b)r(et)n(w)n(een)h(the)g(UT1)f(and)h
-(UTC)g(timescale)340 1131 y Fi(\017)45 b Fj(Ep)r(o)r(c)n(h:)37
-b(Ep)r(o)r(c)n(h)27 b(of)g(observ)-5 b(ation)340 1261
-y Fi(\017)45 b Fj(F)-7 b(ormat\(axis\):)36 b(F)-7 b(ormat)27
-b(sp)r(eci\014cation)g(for)g(axis)g(v)-5 b(alues)340
-1391 y Fi(\017)45 b Fj(Lab)r(el\(axis\):)37 b(Axis)27
-b(lab)r(el)340 1521 y Fi(\017)45 b Fj(Matc)n(hEnd:)37
-b(Matc)n(h)27 b(trailing)g(axes?)340 1651 y Fi(\017)45
-b Fj(MaxAxes:)36 b(Maxim)n(um)28 b(n)n(um)n(b)r(er)f(of)h(F)-7
-b(rame)27 b(axes)f(to)i(matc)n(h)340 1781 y Fi(\017)45
-b Fj(MinAxes:)37 b(Minim)n(um)28 b(n)n(um)n(b)r(er)g(of)f(F)-7
-b(rame)27 b(axes)g(to)h(matc)n(h)340 1911 y Fi(\017)45
-b Fj(Naxes:)36 b(Num)n(b)r(er)28 b(of)g(F)-7 b(rame)27
-b(axes)340 2041 y Fi(\017)45 b Fj(NormUnit\(axis\):)37
-b(Normalised)27 b(axis)g(ph)n(ysical)f(units)340 2171
-y Fi(\017)45 b Fj(ObsAlt:)37 b(Geo)r(detic)28 b(altitude)g(of)g(observ)
-n(er)340 2301 y Fi(\017)45 b Fj(ObsLat:)36 b(Geo)r(detic)28
-b(latitude)g(of)g(observ)n(er)340 2431 y Fi(\017)45 b
-Fj(ObsLon:)36 b(Geo)r(detic)28 b(longitude)f(of)h(observ)n(er)340
-2561 y Fi(\017)45 b Fj(P)n(erm)n(ute:)36 b(P)n(erm)n(ute)27
-b(axis)f(order?)340 2691 y Fi(\017)45 b Fj(Preserv)n(eAxes:)34
-b(Preserv)n(e)26 b(axes?)340 2821 y Fi(\017)45 b Fj(Sym)n(b)r
-(ol\(axis\):)37 b(Axis)27 b(sym)n(b)r(ol)340 2951 y Fi(\017)45
-b Fj(System:)37 b(Co)r(ordinate)27 b(system)g(used)h(to)f(describ)r(e)g
-(the)h(domain)340 3081 y Fi(\017)45 b Fj(Title:)38 b(F)-7
-b(rame)27 b(title)340 3211 y Fi(\017)45 b Fj(T)-7 b(op\(axis\):)37
-b(Highest)27 b(axis)g(v)-5 b(alue)27 b(to)h(displa)n(y)340
-3341 y Fi(\017)45 b Fj(Unit\(axis\):)38 b(Axis)27 b(ph)n(ysical)g
-(units)-2 3500 y Fd(F)-8 b(unctions)n(:)227 3647 y Fj(In)38
-b(addition)g(to)g(those)g(functions)g(applicable)g(to)g(all)f
-(Mappings,)j(the)f(follo)n(wing)e(functions)h(ma)n(y)f(also)g(b)r(e)227
-3746 y(applied)28 b(to)f(all)h(F)-7 b(rames:)340 4003
-y Fi(\017)45 b Fj(astAngle:)37 b(Calculate)27 b(the)h(angle)e
-(subtended)j(b)n(y)e(t)n(w)n(o)g(p)r(oin)n(ts)g(at)h(a)f(third)h(p)r
-(oin)n(t)340 4133 y Fi(\017)45 b Fj(astAxAngle:)37 b(Find)28
-b(the)g(angle)f(from)g(an)g(axis,)g(to)h(a)f(line)h(through)e(t)n(w)n
-(o)h(p)r(oin)n(ts)340 4263 y Fi(\017)45 b Fj(astAxDistance:)37
-b(Calculate)27 b(the)h(distance)f(b)r(et)n(w)n(een)h(t)n(w)n(o)e(axis)h
-(v)-5 b(alues)340 4393 y Fi(\017)45 b Fj(astAxO\013set:)37
-b(Calculate)27 b(an)g(o\013set)h(along)e(an)h(axis)340
-4523 y Fi(\017)45 b Fj(astCon)n(v)n(ert:)35 b(Determine)28
-b(ho)n(w)f(to)h(con)n(v)n(ert)e(b)r(et)n(w)n(een)h(t)n(w)n(o)g(co)r
-(ordinate)g(systems)340 4653 y Fi(\017)45 b Fj(astDistance:)37
-b(Calculate)27 b(the)h(distance)f(b)r(et)n(w)n(een)h(t)n(w)n(o)e(p)r
-(oin)n(ts)i(in)g(a)f(F)-7 b(rame)340 4783 y Fi(\017)45
-b Fj(astFindF)-7 b(rame:)37 b(Find)28 b(a)f(co)r(ordinate)f(system)i
-(with)g(sp)r(eci\014ed)g(c)n(haracteristics)340 4913
-y Fi(\017)45 b Fj(astF)-7 b(ormat:)36 b(F)-7 b(ormat)27
-b(a)g(co)r(ordinate)g(v)-5 b(alue)27 b(for)g(a)g(F)-7
-b(rame)27 b(axis)340 5043 y Fi(\017)45 b Fj(astGetActiv)n(eUnit:)38
-b(Determines)27 b(ho)n(w)g(the)h(Unit)h(attribute)f(will)f(b)r(e)h
-(used)340 5173 y Fi(\017)45 b Fj(astIn)n(tersect:)36
-b(Find)28 b(the)g(in)n(tersection)f(b)r(et)n(w)n(een)h(t)n(w)n(o)e(geo)
-r(desic)h(curv)n(es)340 5303 y Fi(\017)45 b Fj(astMatc)n(hAxes:)36
-b(Find)28 b(an)n(y)f(corresp)r(onding)f(axes)g(in)i(t)n(w)n(o)f(F)-7
-b(rames)340 5433 y Fi(\017)45 b Fj(astNorm:)36 b(Normalise)27
-b(a)g(set)g(of)h(F)-7 b(rame)27 b(co)r(ordinates)340
-5563 y Fi(\017)45 b Fj(astO\013set:)37 b(Calculate)27
-b(an)g(o\013set)h(along)e(a)h(geo)r(desic)g(curv)n(e)340
-5693 y Fi(\017)45 b Fj(astO\013set2:)36 b(Calculate)27
-b(an)h(o\013set)f(along)f(a)i(geo)r(desic)e(curv)n(e)h(in)h(a)f(2D)h(F)
--7 b(rame)p eop end
-%%Page: 494 504
-TeXDict begin 494 503 bop 0 52 a FF(494)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(astP)n(ermAxes:)35 b(P)n(erm)n(ute)27 b(the)h(order)e(of)i(a)f(F)
--7 b(rame's)27 b(axes)340 488 y Fi(\017)45 b Fj(astPic)n(kAxes:)35
-b(Create)27 b(a)g(new)h(F)-7 b(rame)27 b(b)n(y)g(pic)n(king)g(axes)g
-(from)g(an)h(existing)f(one)340 626 y Fi(\017)45 b Fj(astResolv)n(e:)36
-b(Resolv)n(e)26 b(a)h(v)n(ector)f(in)n(to)i(t)n(w)n(o)f(orthogonal)e
-(comp)r(onen)n(ts)340 763 y Fi(\017)45 b Fj(astSetActiv)n(eUnit:)38
-b(Sp)r(ecify)28 b(ho)n(w)f(the)h(Unit)g(attribute)g(should)g(b)r(e)g
-(used)340 900 y Fi(\017)45 b Fj(astUnformat:)37 b(Read)27
-b(a)g(formatted)g(co)r(ordinate)g(v)-5 b(alue)27 b(for)g(a)h(F)-7
-b(rame)27 b(axis)p 0 1108 3780 12 v 0 1239 a Fz(F)-11
-b(rameSet)904 1240 y Fe(Set)38 b(of)g(in)m(ter-related)e(co)s(ordinate)
-h(systems)3224 1239 y Fz(F)-11 b(rameSet)0 1442 y Fd(Description:)44
-b Fj(A)27 b(F)-7 b(rameSet)27 b(consists)f(of)h(a)f(set)h(of)g(one)f
-(or)g(more)g(F)-7 b(rames)26 b(\(whic)n(h)h(describ)r(e)f(co)r
-(ordinate)g(systems\),)227 1542 y(connected)g(together)f(b)n(y)g
-(Mappings)g(\(whic)n(h)h(describ)r(e)f(ho)n(w)h(the)g(co)r(ordinate)e
-(systems)h(are)g(in)n(ter-related\).)35 b(A)227 1641
-y(F)-7 b(rameSet)26 b(mak)n(es)f(it)h(p)r(ossible)g(to)g(obtain)f(a)h
-(Mapping)f(b)r(et)n(w)n(een)h(an)n(y)f(pair)h(of)f(these)h(F)-7
-b(rames)26 b(\(i.e.)36 b(to)26 b(con)n(v)n(ert)227 1741
-y(b)r(et)n(w)n(een)32 b(an)n(y)f(of)g(the)h(co)r(ordinate)f(systems)g
-(whic)n(h)g(it)i(describ)r(es\).)48 b(The)32 b(individual)g(F)-7
-b(rames)30 b(are)h(iden)n(ti\014ed)227 1840 y(within)f(the)f(F)-7
-b(rameSet)28 b(b)n(y)g(an)h(in)n(teger)e(index,)i(with)g(F)-7
-b(rames)28 b(b)r(eing)h(n)n(um)n(b)r(ered)f(consecutiv)n(ely)g(from)g
-(one)g(as)227 1940 y(they)g(are)f(added)g(to)h(the)g(F)-7
-b(rameSet.)227 2069 y(Ev)n(ery)29 b(F)-7 b(rameSet)30
-b(has)f(a)h Ft(")p Fj(base)p Ft(")e Fj(F)-7 b(rame)30
-b(and)g(a)g Ft(")p Fj(curren)n(t)p Ft(")e Fj(F)-7 b(rame)30
-b(\(whic)n(h)g(are)f(allo)n(w)n(ed)g(to)h(b)r(e)g(the)h(same\).)227
-2169 y(An)n(y)k(of)g(the)g(F)-7 b(rames)35 b(ma)n(y)f(b)r(e)h
-(nominated)g(to)g(hold)f(these)h(p)r(ositions,)i(and)e(the)g(c)n(hoice)
-f(is)h(determined)g(b)n(y)227 2268 y(the)d(v)-5 b(alues)31
-b(of)h(the)g(F)-7 b(rameSet's)31 b(Base)f(and)i(Curren)n(t)e
-(attributes,)j(whic)n(h)e(hold)h(the)f(indices)h(of)f(the)h(relev)-5
-b(an)n(t)227 2368 y(F)e(rames.)35 b(By)25 b(default,)h(the)f(\014rst)f
-(F)-7 b(rame)25 b(added)f(to)h(a)f(F)-7 b(rameSet)25
-b(is)f(its)h(base)f(F)-7 b(rame,)25 b(and)g(the)g(last)f(one)h(added)
-227 2467 y(is)j(its)g(curren)n(t)e(F)-7 b(rame.)227 2596
-y(The)36 b(base)f(F)-7 b(rame)35 b(describ)r(es)h(the)g
-Ft(")p Fj(nativ)n(e)p Ft(")e Fj(co)r(ordinate)h(system)g(of)h(whatev)n
-(er)f(the)h(F)-7 b(rameSet)35 b(is)h(used)g(to)227 2696
-y(calibrate)27 b(\(e.g.)36 b(the)28 b(pixel)f(co)r(ordinates)f(of)i(an)
-f(image\))g(and)g(the)h(curren)n(t)e(F)-7 b(rame)27 b(describ)r(es)g
-(the)h Ft(")p Fj(apparen)n(t)p Ft(")227 2796 y Fj(co)r(ordinate)21
-b(system)g(in)h(whic)n(h)g(it)g(should)f(b)r(e)h(view)n(ed)g(\(e.g.)34
-b(displa)n(y)n(ed,)22 b(etc.\).)36 b(An)n(y)21 b(further)h(F)-7
-b(rames)21 b(represen)n(t)227 2895 y(a)27 b(library)g(of)g(alternativ)n
-(e)g(co)r(ordinate)f(systems,)h(whic)n(h)h(ma)n(y)f(b)r(e)h(selected)f
-(b)n(y)g(making)g(them)h(curren)n(t.)227 3024 y(When)34
-b(a)e(F)-7 b(rameSet)33 b(is)g(used)g(in)g(a)f(con)n(text)h(that)g
-(requires)f(a)g(F)-7 b(rame,)34 b(\(e.g.)53 b(obtaining)32
-b(its)h(Title)g(v)-5 b(alue,)34 b(or)227 3124 y(n)n(um)n(b)r(er)h(of)g
-(axes\),)h(the)g(curren)n(t)e(F)-7 b(rame)34 b(is)h(used.)59
-b(A)35 b(F)-7 b(rameSet)35 b(ma)n(y)f(therefore)g(b)r(e)i(used)f(in)g
-(place)f(of)h(its)227 3223 y(curren)n(t)27 b(F)-7 b(rame)27
-b(in)h(most)f(situations.)227 3352 y(When)38 b(a)g(F)-7
-b(rameSet)37 b(is)g(used)h(in)g(a)f(con)n(text)g(that)h(requires)e(a)h
-(Mapping,)j(the)e(Mapping)f(used)h(is)f(the)h(one)227
-3452 y(b)r(et)n(w)n(een)25 b(its)h(base)e(F)-7 b(rame)25
-b(and)g(its)h(curren)n(t)e(F)-7 b(rame.)35 b(Th)n(us,)26
-b(a)f(F)-7 b(rameSet)25 b(ma)n(y)f(b)r(e)i(used)f(to)g(con)n(v)n(ert)f
-Ft(")p Fj(nativ)n(e)p Ft(")227 3552 y Fj(co)r(ordinates)35
-b(in)n(to)h Ft(")p Fj(apparen)n(t)p Ft(")f Fj(ones,)i(and)g(vice)f(v)n
-(ersa.)61 b(Lik)n(e)36 b(an)n(y)f(Mapping,)j(a)e(F)-7
-b(rameSet)36 b(ma)n(y)g(also)f(b)r(e)227 3651 y(in)n(v)n(erted)h(\(see)
-g(astIn)n(v)n(ert\),)i(whic)n(h)f(has)e(the)i(e\013ect)g(of)g(in)n
-(terc)n(hanging)e(its)h(base)g(and)g(curren)n(t)g(F)-7
-b(rames)36 b(and)227 3751 y(hence)28 b(of)f(rev)n(ersing)f(the)i
-(Mapping)f(b)r(et)n(w)n(een)h(them.)227 3880 y(Regions)33
-b(ma)n(y)f(b)r(e)i(added)f(in)n(to)h(a)f(F)-7 b(rameSet)33
-b(\(since)g(a)g(Region)g(is)g(a)g(t)n(yp)r(e)h(of)f(F)-7
-b(rame\),)35 b(either)e(explicitly)g(or)227 3979 y(as)e(comp)r(onen)n
-(ts)g(within)h(CmpF)-7 b(rames.)48 b(In)31 b(this)h(case)e(the)i
-(Mapping)f(b)r(et)n(w)n(een)g(a)g(pair)g(of)g(F)-7 b(rames)31
-b(within)h(a)227 4079 y(F)-7 b(rameSet)35 b(will)g(include)g(the)h
-(e\013ects)f(of)g(the)g(clipping)g(pro)r(duced)g(b)n(y)f(an)n(y)h
-(Regions)f(included)h(in)g(the)g(path)227 4179 y(b)r(et)n(w)n(een)28
-b(the)g(F)-7 b(rames.)0 4337 y Fd(Constructor)32 b(F)-8
-b(unction:)227 4436 y Fj(astF)h(rameSet)-2 4595 y Fd(Inheritance)n(:)
-227 4741 y Fj(The)28 b(F)-7 b(rameSet)27 b(class)g(inherits)g(from)h
-(the)g(F)-7 b(rame)27 b(class.)-2 4899 y Fd(A)m(ttributes)n(:)227
-5045 y Fj(In)41 b(addition)g(to)g(those)f(attributes)h(common)f(to)h
-(all)g(F)-7 b(rames,)43 b(ev)n(ery)d(F)-7 b(rameSet)40
-b(also)g(has)g(the)i(follo)n(wing)227 5145 y(attributes:)340
-5419 y Fi(\017)j Fj(Base:)36 b(F)-7 b(rameSet)28 b(base)f(F)-7
-b(rame)27 b(index)340 5556 y Fi(\017)45 b Fj(Curren)n(t:)36
-b(F)-7 b(rameSet)28 b(curren)n(t)e(F)-7 b(rame)28 b(index)340
-5693 y Fi(\017)45 b Fj(Nframe:)37 b(Num)n(b)r(er)28 b(of)f(F)-7
-b(rames)27 b(in)h(a)f(F)-7 b(rameSet)p eop end
-%%Page: 495 505
-TeXDict begin 495 504 bop 3643 52 a FF(495)227 351 y
-Fj(Ev)n(ery)32 b(F)-7 b(rameSet)32 b(also)g(inherits)h(an)n(y)f
-(further)h(attributes)g(that)g(b)r(elong)f(to)h(its)g(curren)n(t)f(F)-7
-b(rame,)34 b(regardless)227 451 y(of)j(that)h(F)-7 b(rame's)36
-b(class.)65 b(\(F)-7 b(or)37 b(example,)i(the)f(Equino)n(x)e
-(attribute,)k(de\014ned)d(b)n(y)g(the)h(SkyF)-7 b(rame)36
-b(class,)j(is)227 551 y(inherited)d(b)n(y)g(an)n(y)f(F)-7
-b(rameSet)35 b(whic)n(h)h(has)f(a)g(SkyF)-7 b(rame)35
-b(as)g(its)h(curren)n(t)f(F)-7 b(rame.\))61 b(The)36
-b(set)g(of)g(attributes)227 650 y(b)r(elonging)27 b(to)h(a)f(F)-7
-b(rameSet)27 b(ma)n(y)g(therefore)g(c)n(hange)f(when)i(a)f(new)h
-(curren)n(t)f(F)-7 b(rame)27 b(is)g(selected.)-2 787
-y Fd(F)-8 b(unctions)n(:)227 933 y Fj(In)25 b(addition)f(to)g(those)g
-(functions)h(applicable)e(to)h(all)g(F)-7 b(rames,)25
-b(the)f(follo)n(wing)g(functions)g(ma)n(y)g(also)f(b)r(e)i(applied)227
-1033 y(to)j(all)f(F)-7 b(rameSets:)340 1275 y Fi(\017)45
-b Fj(astAddF)-7 b(rame:)37 b(Add)28 b(a)f(F)-7 b(rame)27
-b(to)h(a)f(F)-7 b(rameSet)27 b(to)h(de\014ne)f(a)h(new)f(co)r(ordinate)
-g(system)340 1396 y Fi(\017)45 b Fj(astGetF)-7 b(rame:)37
-b(Obtain)27 b(a)g(p)r(oin)n(ter)g(to)h(a)f(sp)r(eci\014ed)h(F)-7
-b(rame)27 b(in)h(a)f(F)-7 b(rameSet)340 1516 y Fi(\017)45
-b Fj(astGetMapping:)37 b(Obtain)27 b(a)g(Mapping)g(b)r(et)n(w)n(een)h
-(t)n(w)n(o)f(F)-7 b(rames)27 b(in)g(a)h(F)-7 b(rameSet)340
-1636 y Fi(\017)45 b Fj(astRemapF)-7 b(rame:)36 b(Mo)r(dify)28
-b(a)f(F)-7 b(rame's)27 b(relationship)g(to)g(the)h(other)f(F)-7
-b(rames)27 b(in)h(a)f(F)-7 b(rameSet)340 1757 y Fi(\017)45
-b Fj(astRemo)n(v)n(eF)-7 b(rame:)35 b(Remo)n(v)n(e)26
-b(a)i(F)-7 b(rame)27 b(from)g(a)g(F)-7 b(rameSet)p 0
-1931 3780 12 v 0 2063 a Fz(GrismMap)160 b Fe(T)-10 b(ransform)36
-b(1-dimensional)g(co)s(ordinates)h(using)1186 2177 y(a)i(grism)e(disp)s
-(ersion)h(equation)3149 2063 y Fz(GrismMap)0 2341 y Fd(Description:)44
-b Fj(A)22 b(GrismMap)f(is)g(a)g(sp)r(ecialised)g(form)g(of)g(Mapping)g
-(whic)n(h)g(transforms)f(1-dimensional)g(co)r(ordinates)227
-2441 y(using)f(the)h(sp)r(ectral)f(disp)r(ersion)g(equation)g(describ)r
-(ed)g(in)g(FITS-W)n(CS)h(pap)r(er)f(I)r(I)r(I)h Ft(")p
-Fj(Represen)n(tation)e(of)h(sp)r(ectral)227 2541 y(co)r(ordinates)26
-b(in)i(FITS)p Ft(")p Fj(.)37 b(This)28 b(describ)r(es)f(the)h(disp)r
-(ersion)f(pro)r(duced)g(b)n(y)g(gratings,)f(prisms)h(and)h(grisms.)227
-2659 y(When)23 b(initially)f(created,)g(the)h(forw)n(ard)d
-(transformation)g(of)i(a)g(GrismMap)f(transforms)g(input)h
-Ft(")p Fj(grism)f(param-)227 2759 y(eter)p Ft(")k Fj(v)-5
-b(alues)24 b(in)n(to)h(output)h(w)n(a)n(v)n(elength)d(v)-5
-b(alues.)36 b(The)25 b Ft(")p Fj(grism)f(parameter)p
-Ft(")f Fj(is)i(a)g(dimensionless)g(v)-5 b(alue)25 b(whic)n(h)227
-2858 y(is)30 b(linearly)e(related)h(to)g(p)r(osition)h(on)f(the)h
-(detector.)42 b(It)30 b(is)f(de\014ned)h(in)g(FITS-W)n(CS)f(pap)r(er)g
-(I)r(I)r(I)h(as)f Ft(")p Fj(the)h(o\013set)227 2958 y(on)25
-b(the)g(detector)f(from)h(the)g(p)r(oin)n(t)g(of)g(in)n(tersection)f
-(of)h(the)g(camera)f(axis,)g(measured)g(in)h(units)h(of)e(the)i
-(e\013ectiv)n(e)227 3057 y(lo)r(cal)f(length)p Ft(")p
-Fj(.)36 b(The)25 b(units)h(in)f(whic)n(h)g(w)n(a)n(v)n(elength)f(v)-5
-b(alues)25 b(are)f(exp)r(ected)i(or)e(returned)h(is)g(determined)g(b)n
-(y)g(the)227 3157 y(v)-5 b(alues)29 b(supplied)h(for)f(the)g(GrismW)-7
-b(a)n(v)n(eR,)29 b(GrismNRP)g(and)g(GrismG)g(attribute:)40
-b(whatev)n(er)29 b(units)g(are)g(used)227 3257 y(for)e(these)h
-(attributes)f(will)h(also)f(b)r(e)h(used)f(for)g(the)h(w)n(a)n(v)n
-(elength)e(v)-5 b(alues.)0 3394 y Fd(Constructor)32 b(F)-8
-b(unction:)227 3493 y Fj(astGrismMap)-2 3630 y Fd(Inheritance)n(:)227
-3776 y Fj(The)28 b(GrismMap)f(class)g(inherits)g(from)g(the)h(Mapping)g
-(class.)-2 3913 y Fd(A)m(ttributes)n(:)227 4060 y Fj(In)k(addition)f
-(to)g(those)g(attributes)g(common)g(to)g(all)g(Mappings,)g(ev)n(ery)f
-(GrismMap)h(also)f(has)h(the)h(follo)n(wing)227 4159
-y(attributes:)340 4401 y Fi(\017)45 b Fj(GrismNR:)28
-b(The)g(refractiv)n(e)e(index)i(at)f(the)h(reference)f(w)n(a)n(v)n
-(elength)340 4522 y Fi(\017)45 b Fj(GrismNRP:)28 b(Rate)f(of)h(c)n
-(hange)e(of)i(refractiv)n(e)e(index)h(with)i(w)n(a)n(v)n(elength)340
-4642 y Fi(\017)45 b Fj(GrismW)-7 b(a)n(v)n(eR:)27 b(The)g(reference)g
-(w)n(a)n(v)n(elength)340 4763 y Fi(\017)45 b Fj(GrismAlpha:)37
-b(The)28 b(angle)e(of)i(incidence)g(of)f(the)h(incoming)f(ligh)n(t)340
-4883 y Fi(\017)45 b Fj(GrismG:)28 b(The)f(grating)g(ruling)g(densit)n
-(y)340 5003 y Fi(\017)45 b Fj(GrismM:)28 b(The)f(in)n(terference)g
-(order)340 5124 y Fi(\017)45 b Fj(GrismEps:)36 b(The)28
-b(angle)f(b)r(et)n(w)n(een)g(the)h(normal)f(and)g(the)h(disp)r(ersion)f
-(plane)340 5244 y Fi(\017)45 b Fj(GrismTheta:)37 b(Angle)27
-b(b)r(et)n(w)n(een)h(normal)e(to)i(detector)f(plane)g(and)h(reference)e
-(ra)n(y)-2 5394 y Fd(F)-8 b(unctions)n(:)227 5540 y Fj(The)31
-b(GrismMap)g(class)f(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)h
-(functions)h(b)r(ey)n(ond)e(those)h(whic)n(h)g(are)f(applicable)g(to)h
-(all)227 5639 y(Mappings.)p eop end
-%%Page: 496 506
-TeXDict begin 496 505 bop 0 52 a FF(496)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)p 0 351 3780 12 v 0 483
-a Fz(In)l(terv)-7 b(al)186 b Fe(A)39 b(region)e(represen)m(ting)g(an)h
-(in)m(terv)-7 b(al)37 b(on)h(one)h(or)f(more)1485 598
-y(axes)h(of)f(a)h(F)-10 b(rame)3324 483 y Fz(In)l(terv)j(al)0
-767 y Fd(Description:)44 b Fj(The)23 b(In)n(terv)-5 b(al)22
-b(class)g(implemen)n(ts)h(a)f(Region)g(whic)n(h)g(represen)n(ts)g(upp)r
-(er)g(and/or)f(lo)n(w)n(er)h(limits)h(on)f(one)227 867
-y(or)i(more)g(axes)g(of)g(a)h(F)-7 b(rame.)35 b(F)-7
-b(or)24 b(a)g(p)r(oin)n(t)h(to)g(b)r(e)g(within)g(the)g(region)f
-(represen)n(ted)f(b)n(y)i(the)g(In)n(terv)-5 b(al,)24
-b(the)h(p)r(oin)n(t)227 966 y(m)n(ust)j(satisfy)f(all)g(the)h
-(restrictions)e(placed)h(on)g(all)g(the)h(axes.)36 b(The)27
-b(p)r(oin)n(t)h(is)f(outside)g(the)h(region)e(if)i(it)g(fails)f(to)227
-1066 y(satisfy)j(an)n(y)g(one)f(of)i(the)f(restrictions.)44
-b(Eac)n(h)29 b(axis)g(ma)n(y)h(ha)n(v)n(e)f(either)h(an)g(upp)r(er)g
-(limit,)i(a)e(lo)n(w)n(er)e(limit,)k(b)r(oth)227 1165
-y(or)e(neither.)47 b(If)32 b(b)r(oth)f(limits)h(are)e(supplied)h(but)g
-(are)f(in)i(rev)n(erse)d(order)g(\(so)i(that)g(the)g(lo)n(w)n(er)f
-(limit)i(is)e(greater)227 1265 y(than)e(the)g(upp)r(er)g(limit\),)g
-(then)h(the)f(in)n(terv)-5 b(al)27 b(is)g(an)g(excluded)h(in)n(terv)-5
-b(al,)27 b(rather)g(than)g(an)h(included)g(in)n(terv)-5
-b(al.)227 1389 y(Note,)33 b(The)e(In)n(terv)-5 b(al)31
-b(class)g(mak)n(es)f(no)h(allo)n(w)n(ances)f(for)h(cyclic)g(nature)g
-(of)g(some)g(co)r(ordinate)g(systems)g(\(suc)n(h)227
-1489 y(as)25 b(SkyF)-7 b(rame)24 b(co)r(ordinates\).)35
-b(A)25 b(Bo)n(x)f(should)g(usually)h(b)r(e)g(used)g(in)g(these)g(cases)
-f(since)h(this)g(requires)f(the)h(user)227 1589 y(to)j(think)g(ab)r
-(out)f(suitable)h(upp)r(er)g(and)f(lo)n(w)n(er)f(limits,)0
-1738 y Fd(Constructor)32 b(F)-8 b(unction:)227 1837 y
-Fj(astIn)n(terv)j(al)-2 1986 y Fd(Inheritance)n(:)227
-2133 y Fj(The)28 b(In)n(terv)-5 b(al)27 b(class)g(inherits)g(from)g
-(the)h(Region)f(class.)-2 2282 y Fd(A)m(ttributes)n(:)227
-2428 y Fj(The)37 b(In)n(terv)-5 b(al)35 b(class)h(do)r(es)g(not)g
-(de\014ne)h(an)n(y)e(new)i(attributes)f(b)r(ey)n(ond)g(those)g(whic)n
-(h)g(are)g(applicable)g(to)g(all)227 2527 y(Regions.)-2
-2676 y Fd(F)-8 b(unctions)n(:)227 2823 y Fj(The)38 b(In)n(terv)-5
-b(al)38 b(class)f(do)r(es)h(not)g(de\014ne)g(an)n(y)f(new)h(functions)h
-(b)r(ey)n(ond)f(those)f(whic)n(h)h(are)f(applicable)h(to)g(all)227
-2922 y(Regions.)p 0 3121 V 0 3251 a Fz(In)l(traMap)801
-3252 y Fe(Map)h(p)s(oin)m(ts)f(using)g(a)h(priv)-7 b(ate)37
-b(transformation)1680 3367 y(function)3218 3251 y Fz(In)l(traMap)0
-3532 y Fd(Description:)44 b Fj(The)21 b(In)n(traMap)e(class)g(pro)n
-(vides)g(a)h(sp)r(ecialised)f(form)h(of)g(Mapping)g(whic)n(h)g
-(encapsulates)g(a)f(priv)-5 b(ately-)227 3631 y(de\014ned)30
-b(co)r(ordinate)e(transformation)g(other)h(AST)h(Mapping.)42
-b(This)29 b(allo)n(ws)f(y)n(ou)h(to)g(create)g(Mappings)f(that)227
-3731 y(p)r(erform)f(an)n(y)g(conceiv)-5 b(able)27 b(co)r(ordinate)f
-(transformation.)227 3855 y(Ho)n(w)n(ev)n(er,)k(an)h(In)n(traMap)g(is)g
-(in)n(tended)g(for)g(use)g(within)h(a)f(single)f(program)g(or)g(a)h
-(priv)-5 b(ate)31 b(suite)g(of)g(soft)n(w)n(are,)227
-3955 y(where)24 b(all)g(programs)d(ha)n(v)n(e)i(access)g(to)h(the)g
-(same)g(co)r(ordinate)f(transformation)f(functions)j(\(i.e.)36
-b(can)23 b(b)r(e)i(link)n(ed)227 4055 y(against)40 b(them\).)76
-b(In)n(traMaps)39 b(should)h(not)h(normally)e(b)r(e)i(stored)f(in)g
-(datasets)g(whic)n(h)g(ma)n(y)g(b)r(e)h(exp)r(orted)227
-4154 y(for)34 b(pro)r(cessing)f(b)n(y)h(other)g(soft)n(w)n(are,)g
-(since)g(that)h(soft)n(w)n(are)e(will)h(not)h(ha)n(v)n(e)e(the)i
-(necessary)d(transformation)227 4254 y(functions)c(a)n(v)-5
-b(ailable,)27 b(resulting)g(in)g(an)h(error.)227 4378
-y(Y)-7 b(ou)36 b(m)n(ust)f(register)f(an)n(y)h(co)r(ordinate)f
-(transformation)g(functions)i(to)f(b)r(e)h(used)f(using)g(astIn)n
-(traReg)f(b)r(efore)227 4478 y(creating)27 b(an)g(In)n(traMap.)0
-4627 y Fd(Constructor)32 b(F)-8 b(unction:)227 4727 y
-Fj(astIn)n(traMap)26 b(\(also)h(see)g(astIn)n(traReg\))-2
-4876 y Fd(Inheritance)n(:)227 5022 y Fj(The)h(In)n(traMap)e(class)h
-(inherits)h(from)f(the)h(Mapping)f(class.)-2 5171 y Fd(A)m(ttributes)n
-(:)227 5317 y Fj(In)35 b(addition)f(to)g(those)g(attributes)g(common)g
-(to)g(all)g(Mappings,)h(ev)n(ery)e(In)n(traMap)g(also)g(has)h(the)h
-(follo)n(wing)227 5416 y(attributes:)340 5677 y Fi(\017)45
-b Fj(In)n(traFlag:)36 b(In)n(traMap)26 b(iden)n(ti\014cation)i(string)p
-eop end
-%%Page: 497 507
-TeXDict begin 497 506 bop 3643 52 a FF(497)-2 351 y Fd(F)-8
-b(unctions)n(:)227 497 y Fj(The)34 b(In)n(traMap)f(class)g(do)r(es)g
-(not)h(de\014ne)g(an)n(y)f(new)h(functions)g(b)r(ey)n(ond)f(those)h
-(whic)n(h)f(are)g(applicable)g(to)h(all)227 597 y(Mappings.)p
-0 818 3780 12 v 0 949 a Fz(KeyMap)1140 956 y Fe(Store)j(a)i(set)g(of)f
-(k)m(ey/v)-7 b(alue)37 b(pairs)3274 949 y Fz(KeyMap)0
-1173 y Fd(Description:)44 b Fj(The)27 b(KeyMap)f(class)f(is)i(used)g
-(to)f(store)g(a)g(set)h(of)f(v)-5 b(alues)26 b(with)i(asso)r(ciated)d
-(k)n(eys)h(whic)n(h)g(iden)n(tify)h(the)227 1273 y(v)-5
-b(alues.)41 b(The)29 b(k)n(eys)f(are)g(strings)g(\(case-sensitiv)n(e,)f
-(trailing)h(spaces)g(are)g(ignored\),)h(and)f(the)i(data)e(t)n(yp)r(e)h
-(of)g(the)227 1373 y(v)-5 b(alues)30 b(can)g(b)r(e)h(in)n(teger,)f
-(\015oating)f(p)r(oin)n(t,)j(v)n(oid)d(p)r(oin)n(ter,)i(c)n(haracter)d
-(string)i(or)f(AST)i(Ob)5 b(ject)30 b(p)r(oin)n(ter.)45
-b(Eac)n(h)227 1472 y(v)-5 b(alue)24 b(can)g(b)r(e)h(a)f(scalar)f(or)g
-(a)h(one-dimensional)f(v)n(ector.)34 b(A)25 b(KeyMap)e(is)i
-(conceptually)e(similar)h(to)g(a)g(Mapping)227 1572 y(in)j(that)g(a)e
-(KeyMap)h(transforms)f(an)h(input)h(in)n(to)f(an)g(output)h(-)f(the)h
-(input)g(is)f(the)h(k)n(ey)-7 b(,)26 b(and)g(the)h(output)g(is)f(the)
-227 1672 y(v)-5 b(alue)25 b(asso)r(ciated)e(with)i(the)g(k)n(ey)-7
-b(.)36 b(Ho)n(w)n(ev)n(er,)23 b(this)i(is)f(only)h(a)f(conceptual)g
-(similarit)n(y)-7 b(,)25 b(and)f(it)h(should)g(b)r(e)g(noted)227
-1771 y(that)g(the)f(KeyMap)f(class)h(inherits)g(from)f(the)i(Ob)5
-b(ject)24 b(class)f(rather)g(than)h(the)h(Mapping)e(class.)35
-b(The)24 b(metho)r(ds)227 1871 y(of)k(the)g(Mapping)f(class)g(cannot)g
-(b)r(e)h(used)f(with)h(a)g(KeyMap.)0 2042 y Fd(Constructor)k(F)-8
-b(unction:)227 2142 y Fj(astKeyMap)-2 2313 y Fd(Inheritance)n(:)227
-2459 y Fj(The)28 b(KeyMap)f(class)f(inherits)i(from)f(the)h(Ob)5
-b(ject)27 b(class.)-2 2630 y Fd(A)m(ttributes)n(:)227
-2776 y Fj(In)33 b(addition)f(to)h(those)f(attributes)g(common)g(to)g
-(all)g(Ob)5 b(jects,)34 b(ev)n(ery)d(KeyMap)h(also)f(has)h(the)h(follo)
-n(wing)e(at-)227 2876 y(tributes:)340 3169 y Fi(\017)45
-b Fj(KeyError:)34 b(Rep)r(ort)28 b(an)f(error)e(if)k(the)f(requested)f
-(k)n(ey)f(do)r(es)i(not)f(exist?)340 3313 y Fi(\017)45
-b Fj(SizeGuess:)37 b(The)28 b(exp)r(ected)f(size)h(of)f(the)h(KeyMap.)
--2 3496 y Fd(F)-8 b(unctions)n(:)227 3643 y Fj(In)23
-b(addition)g(to)g(those)g(functions)g(applicable)f(to)h(all)g(Ob)5
-b(jects,)24 b(the)f(follo)n(wing)f(functions)h(ma)n(y)f(also)g(b)r(e)i
-(applied)227 3742 y(to)k(all)f(KeyMaps:)340 4036 y Fi(\017)45
-b Fj(astMapGet0)p Fl(<)p Fj(X)p Fl(>)p Fj(:)36 b(Get)28
-b(a)f(named)g(scalar)f(en)n(try)h(from)h(a)f(KeyMap)340
-4179 y Fi(\017)45 b Fj(astMapGet1)p Fl(<)p Fj(X)p Fl(>)p
-Fj(:)36 b(Get)28 b(a)f(named)g(v)n(ector)g(en)n(try)g(from)g(a)g
-(KeyMap)340 4323 y Fi(\017)45 b Fj(astMapGetElem)p Fl(<)p
-Fj(X)p Fl(>)p Fj(:)36 b(Get)28 b(an)f(elemen)n(t)h(of)g(a)f(named)g(v)n
-(ector)f(en)n(try)i(from)f(a)g(KeyMap)340 4467 y Fi(\017)45
-b Fj(astMapHasKey:)35 b(Do)r(es)28 b(the)g(KeyMap)f(con)n(tain)f(a)i
-(named)f(en)n(try?)340 4610 y Fi(\017)45 b Fj(astMapKey:)36
-b(Return)28 b(the)g(k)n(ey)e(name)i(at)f(a)g(giv)n(en)g(index)h(in)g
-(the)g(KeyMap)340 4754 y Fi(\017)45 b Fj(astMapLenC:)27
-b(Get)h(the)g(length)g(of)f(a)h(named)f(c)n(haracter)f(en)n(try)h(in)g
-(a)h(KeyMap)340 4898 y Fi(\017)45 b Fj(astMapLength:)36
-b(Get)28 b(the)g(length)g(of)g(a)f(named)g(en)n(try)g(in)h(a)f(KeyMap)
-340 5041 y Fi(\017)45 b Fj(astMapPut0)p Fl(<)p Fj(X)p
-Fl(>)p Fj(:)35 b(Add)29 b(a)e(new)g(scalar)f(en)n(try)h(to)h(a)f
-(KeyMap)340 5185 y Fi(\017)45 b Fj(astMapPut1)p Fl(<)p
-Fj(X)p Fl(>)p Fj(:)35 b(Add)29 b(a)e(new)g(v)n(ector)g(en)n(try)g(to)g
-(a)g(KeyMap)340 5329 y Fi(\017)45 b Fj(astMapRemo)n(v)n(e:)35
-b(Remo)n(v)n(ed)27 b(a)g(named)h(en)n(try)f(from)g(a)g(KeyMap)340
-5473 y Fi(\017)45 b Fj(astMapSize:)36 b(Get)29 b(the)e(n)n(um)n(b)r(er)
-h(of)f(en)n(tries)g(in)h(a)f(KeyMap)340 5616 y Fi(\017)45
-b Fj(astMapT)n(yp)r(e:)36 b(Return)28 b(the)g(data)f(t)n(yp)r(e)h(of)f
-(a)h(named)f(en)n(try)g(in)h(a)f(map.)p eop end
-%%Page: 498 508
-TeXDict begin 498 507 bop 0 52 a FF(498)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)p 0 351 3780 12 v 0 482
-a Fz(LutMap)742 483 y Fe(T)-10 b(ransform)37 b(1-dimensional)f(co)s
-(ordinates)g(using)j(a)1571 598 y(lo)s(okup)f(table)3304
-482 y Fz(LutMap)0 782 y Fd(Description:)44 b Fj(A)30
-b(LutMap)g(is)g(a)f(sp)r(ecialised)g(form)h(of)f(Mapping)h(whic)n(h)f
-(transforms)g(1-dimensional)f(co)r(ordinates)227 882
-y(b)n(y)g(using)f(linear)g(in)n(terp)r(olation)f(in)i(a)f(lo)r(okup)h
-(table.)227 1005 y(Eac)n(h)d(input)h(co)r(ordinate)e(v)-5
-b(alue)26 b(is)f(\014rst)g(scaled)g(to)g(giv)n(e)g(the)h(index)f(of)h
-(an)f(en)n(try)g(in)h(the)g(table)f(b)n(y)g(subtracting)227
-1105 y(a)32 b(starting)f(v)-5 b(alue)31 b(\(the)i(input)f(co)r
-(ordinate)f(corresp)r(onding)f(to)h(the)h(\014rst)g(table)g(en)n(try\))
-f(and)h(dividing)f(b)n(y)h(an)227 1205 y(incremen)n(t)c(\(the)g
-(di\013erence)f(in)h(input)h(co)r(ordinate)d(v)-5 b(alue)28
-b(b)r(et)n(w)n(een)f(adjacen)n(t)g(table)h(en)n(tries\).)227
-1328 y(The)j(resulting)g(index)g(will)g(usually)g(con)n(tain)f(a)h
-(fractional)f(part,)i(so)e(the)i(output)f(co)r(ordinate)f(v)-5
-b(alue)31 b(is)g(then)227 1428 y(generated)f(b)n(y)g(in)n(terp)r
-(olating)f(linearly)h(b)r(et)n(w)n(een)g(the)h(appropriate)d(en)n
-(tries)i(in)h(the)f(table.)46 b(If)31 b(the)f(index)h(lies)227
-1528 y(outside)h(the)h(range)e(of)h(the)h(table,)g(linear)e(extrap)r
-(olation)g(is)h(used)h(based)e(on)h(the)h(t)n(w)n(o)e(nearest)h(en)n
-(tries)f(\(i.e.)227 1627 y(the)26 b(t)n(w)n(o)e(en)n(tries)g(at)h(the)g
-(start)f(or)g(end)h(of)g(the)g(table,)h(as)e(appropriate\).)35
-b(If)25 b(either)g(of)g(the)g(en)n(tries)f(used)h(for)f(the)227
-1727 y(in)n(terplation)j(has)g(a)g(v)-5 b(alue)28 b(of)f(AST)p
-Ft(__)p Fj(BAD,)h(then)g(the)g(in)n(terp)r(olated)f(v)-5
-b(alue)28 b(is)f(returned)h(as)e(AST)p Ft(__)p Fj(BAD.)227
-1850 y(If)19 b(the)g(lo)r(okup)f(table)g(en)n(tries)g(increase)f(or)g
-(decrease)g(monotonically)g(\(and)i(if)g(the)g(table)f(con)n(tains)f
-(no)h(AST)p Ft(__)p Fj(BAD)227 1950 y(v)-5 b(alues\),)28
-b(then)g(the)g(in)n(v)n(erse)e(transformation)g(ma)n(y)h(also)f(b)r(e)i
-(p)r(erformed.)0 2097 y Fd(Constructor)k(F)-8 b(unction:)227
-2197 y Fj(astLutMap)-2 2344 y Fd(Inheritance)n(:)227
-2490 y Fj(The)28 b(LutMap)g(class)e(inherits)i(from)f(the)h(Mapping)f
-(class.)-2 2638 y Fd(A)m(ttributes)n(:)227 2784 y Fj(In)38
-b(addition)g(to)f(those)h(attributes)f(common)h(to)f(all)h(Mappings,)h
-(ev)n(ery)e(LutMap)h(also)e(has)i(the)g(follo)n(wing)227
-2884 y(attributes:)340 3142 y Fi(\017)45 b Fj(LutIn)n(terp:)37
-b(The)28 b(in)n(terp)r(olation)f(metho)r(d)h(to)f(use)h(b)r(et)n(w)n
-(een)f(table)h(en)n(tries.)-2 3301 y Fd(F)-8 b(unctions)n(:)227
-3448 y Fj(The)37 b(LutMap)h(class)e(do)r(es)h(not)g(de\014ne)g(an)n(y)f
-(new)h(functions)h(b)r(ey)n(ond)f(those)f(whic)n(h)h(are)f(applicable)h
-(to)g(all)227 3547 y(Mappings.)p 0 3742 V 0 3874 a Fz(Mapping)466
-b Fe(In)m(ter-relate)36 b(t)m(w)m(o)h(co)s(ordinate)g(systems)466
-b Fz(Mapping)0 4063 y Fd(Description:)44 b Fj(This)29
-b(class)e(pro)n(vides)g(the)i(basic)f(facilities)h(for)f(transforming)f
-(a)h(set)g(of)h(co)r(ordinates)e(\(represen)n(ting)227
-4163 y Ft(")p Fj(input)p Ft(")38 b Fj(p)r(oin)n(ts\))g(to)g(giv)n(e)e
-(a)i(new)g(set)f(of)h(co)r(ordinates)f(\(represen)n(ting)f
-Ft(")p Fj(output)p Ft(")i Fj(p)r(oin)n(ts\).)67 b(It)38
-b(is)g(used)g(to)227 4263 y(describ)r(e)28 b(the)g(relationship)f(whic)
-n(h)h(exists)f(b)r(et)n(w)n(een)h(t)n(w)n(o)f(di\013eren)n(t)h(co)r
-(ordinate)f(systems)h(and)f(to)h(implemen)n(t)227 4362
-y(op)r(erations)22 b(whic)n(h)i(mak)n(e)e(use)i(of)f(this)h(\(suc)n(h)f
-(as)g(transforming)f(co)r(ordinates)g(and)i(resampling)e(grids)g(of)i
-(data\).)227 4462 y(Ho)n(w)n(ev)n(er,)38 b(the)f(Mapping)g(class)f(do)r
-(es)h(not)g(ha)n(v)n(e)f(a)h(constructor)f(function)h(of)g(its)h(o)n
-(wn,)h(as)d(it)i(is)f(simply)g(a)227 4562 y(con)n(tainer)22
-b(class)g(for)g(a)g(family)h(of)g(sp)r(ecialised)f(Mappings)g(whic)n(h)
-h(implemen)n(t)g(particular)e(t)n(yp)r(es)i(of)g(co)r(ordinate)227
-4661 y(transformation.)0 4809 y Fd(Constructor)32 b(F)-8
-b(unction:)227 4908 y Fj(None.)-2 5056 y Fd(Inheritance)n(:)227
-5202 y Fj(The)28 b(Mapping)f(class)g(inherits)g(from)h(the)g(Ob)5
-b(ject)27 b(class.)-2 5349 y Fd(A)m(ttributes)n(:)227
-5495 y Fj(In)42 b(addition)e(to)h(those)g(attributes)g(common)g(to)f
-(all)h(Ob)5 b(jects,)44 b(ev)n(ery)c(Mapping)h(also)f(has)g(the)i
-(follo)n(wing)227 5595 y(attributes:)p eop end
-%%Page: 499 509
-TeXDict begin 499 508 bop 3643 52 a FF(499)340 351 y
-Fi(\017)45 b Fj(In)n(v)n(ert:)36 b(Mapping)27 b(in)n(v)n(ersion)f
-(\015ag)340 487 y Fi(\017)45 b Fj(IsLinear:)36 b(Is)27
-b(the)h(Mapping)g(linear?)340 623 y Fi(\017)45 b Fj(IsSimple:)37
-b(Has)28 b(the)g(Mapping)f(b)r(een)h(simpli\014ed?)340
-759 y Fi(\017)45 b Fj(Nin:)38 b(Num)n(b)r(er)27 b(of)h(input)g(co)r
-(ordinates)f(for)g(a)g(Mapping)340 895 y Fi(\017)45 b
-Fj(Nout:)37 b(Num)n(b)r(er)28 b(of)g(output)g(co)r(ordinates)e(for)h(a)
-g(Mapping)340 1031 y Fi(\017)45 b Fj(Rep)r(ort:)37 b(Rep)r(ort)27
-b(transformed)g(co)r(ordinates?)340 1167 y Fi(\017)45
-b Fj(T)-7 b(ranF)g(orw)n(ard:)35 b(F)-7 b(orw)n(ard)25
-b(transformation)h(de\014ned?)340 1303 y Fi(\017)45 b
-Fj(T)-7 b(ranIn)n(v)n(erse:)35 b(In)n(v)n(erse)26 b(transformation)g
-(de\014ned?)-2 1471 y Fd(F)-8 b(unctions)n(:)227 1617
-y Fj(In)23 b(addition)g(to)g(those)g(functions)g(applicable)f(to)h(all)
-g(Ob)5 b(jects,)24 b(the)f(follo)n(wing)f(functions)h(ma)n(y)f(also)g
-(b)r(e)i(applied)227 1717 y(to)k(all)f(Mappings:)340
-1987 y Fi(\017)45 b Fj(astDecomp)r(ose:)36 b(Decomp)r(ose)27
-b(a)h(Mapping)f(in)n(to)g(t)n(w)n(o)g(comp)r(onen)n(t)g(Mappings)340
-2123 y Fi(\017)45 b Fj(astT)-7 b(ranGrid:)36 b(T)-7 b(ransform)26
-b(a)h(grid)g(of)h(p)r(ositions)340 2259 y Fi(\017)45
-b Fj(astIn)n(v)n(ert:)36 b(In)n(v)n(ert)26 b(a)i(Mapping)340
-2395 y Fi(\017)45 b Fj(astLinearAppro)n(x:)35 b(Calculate)27
-b(a)g(linear)g(appro)n(ximation)f(to)h(a)g(Mapping)340
-2531 y Fi(\017)45 b Fj(astMapBo)n(x:)35 b(Find)29 b(a)e(b)r(ounding)g
-(b)r(o)n(x)h(for)f(a)g(Mapping)340 2667 y Fi(\017)45
-b Fj(astMapSplit:)37 b(Split)29 b(a)e(Mapping)g(up)h(in)n(to)f
-(parallel)g(comp)r(onen)n(t)g(Mappings)340 2803 y Fi(\017)45
-b Fj(astRate:)37 b(Calculate)27 b(the)h(rate)e(of)i(c)n(hange)e(of)i(a)
-f(Mapping)g(output)340 2939 y Fi(\017)45 b Fj(astRebin)p
-Fl(<)p Fj(X)p Fl(>)p Fj(:)37 b(Rebin)28 b(a)f(region)f(of)i(a)f(data)g
-(grid)340 3075 y Fi(\017)45 b Fj(astResample)p Fl(<)p
-Fj(X)p Fl(>)p Fj(:)36 b(Resample)27 b(a)g(region)f(of)i(a)f(data)g
-(grid)340 3211 y Fi(\017)45 b Fj(astRemo)n(v)n(eRegions:)35
-b(Remo)n(v)n(e)26 b(an)n(y)h(Regions)g(from)g(a)g(Mapping)340
-3347 y Fi(\017)45 b Fj(astSimplify:)38 b(Simplify)28
-b(a)f(Mapping)340 3483 y Fi(\017)45 b Fj(astT)-7 b(ran1:)35
-b(T)-7 b(ransform)27 b(1-dimensional)f(co)r(ordinates)340
-3619 y Fi(\017)45 b Fj(astT)-7 b(ran2:)35 b(T)-7 b(ransform)27
-b(2-dimensional)f(co)r(ordinates)340 3754 y Fi(\017)45
-b Fj(astT)-7 b(ranN:)27 b(T)-7 b(ransform)26 b(N-dimensional)h(co)r
-(ordinates)340 3890 y Fi(\017)45 b Fj(astT)-7 b(ranP:)26
-b(T)-7 b(ransform)26 b(N-dimensional)h(co)r(ordinates)g(held)h(in)f
-(separate)g(arra)n(ys)p 0 4096 3780 12 v 0 4228 a Fz(MathMap)207
-b Fe(T)-10 b(ransform)36 b(co)s(ordinates)h(using)h(mathematical)1604
-4338 y(expressions)3192 4228 y Fz(MathMap)0 4538 y Fd(Description:)44
-b Fj(A)36 b(MathMap)e(is)h(a)f(Mapping)h(whic)n(h)f(allo)n(ws)g(y)n(ou)
-g(to)h(sp)r(ecify)g(a)f(set)h(of)g(forw)n(ard)e(and/or)g(in)n(v)n(erse)
-227 4638 y(transformation)26 b(functions)i(using)g(arithmetic)f(op)r
-(erations)g(and)g(mathematical)g(functions)h(similar)f(to)h(those)227
-4737 y(a)n(v)-5 b(ailable)19 b(in)i(C.)f(The)g(MathMap)g(in)n(terprets)
-f(these)i(functions)f(at)g(run-time,)i(whenev)n(er)d(its)h(forw)n(ard)f
-(or)g(in)n(v)n(erse)227 4837 y(transformation)26 b(is)g(required.)36
-b(Because)26 b(the)h(functions)g(are)f(not)h(compiled)g(in)g(the)h
-(normal)d(sense)i(\(unlik)n(e)g(an)227 4937 y(In)n(traMap\),)32
-b(they)g(ma)n(y)f(b)r(e)h(used)g(to)f(describ)r(e)g(co)r(ordinate)g
-(transformations)f(in)i(a)f(transp)r(ortable)f(manner.)227
-5036 y(A)25 b(MathMap)g(therefore)f(pro)n(vides)f(a)i(\015exible)f(w)n
-(a)n(y)g(of)h(de\014ning)g(new)f(t)n(yp)r(es)h(of)g(Mapping)f(whose)g
-(descriptions)227 5136 y(ma)n(y)j(b)r(e)h(stored)f(as)g(part)g(of)h(a)f
-(dataset)g(and)g(in)n(terpreted)g(b)n(y)h(other)f(programs.)0
-5292 y Fd(Constructor)32 b(F)-8 b(unction:)227 5391 y
-Fj(astMathMap)-2 5547 y Fd(Inheritance)n(:)227 5693 y
-Fj(The)28 b(MathMap)f(class)g(inherits)h(from)f(the)h(Mapping)f(class.)
-p eop end
-%%Page: 500 510
-TeXDict begin 500 509 bop 0 52 a FF(500)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)-2 351 y Fd(A)m(ttributes)n(:)227
-497 y Fj(In)34 b(addition)f(to)g(those)f(attributes)h(common)g(to)g
-(all)g(Mappings,)h(ev)n(ery)e(MathMap)h(also)f(has)g(the)i(follo)n
-(wing)227 597 y(attributes:)340 727 y Fi(\017)45 b Fj(Seed:)37
-b(Random)28 b(n)n(um)n(b)r(er)f(seed)340 853 y Fi(\017)45
-b Fj(SimpFI:)29 b(F)-7 b(orw)n(ard-in)n(v)n(erse)24 b(MathMap)j(pairs)g
-(simplify?)340 980 y Fi(\017)45 b Fj(SimpIF:)29 b(In)n(v)n(erse-forw)n
-(ard)24 b(MathMap)j(pairs)g(simplify?)-2 1135 y Fd(F)-8
-b(unctions)n(:)227 1281 y Fj(The)33 b(MathMap)g(class)e(do)r(es)i(not)f
-(de\014ne)h(an)n(y)f(new)h(functions)g(b)r(ey)n(ond)f(those)h(whic)n(h)
-f(are)g(applicable)g(to)h(all)227 1381 y(Mappings.)p
-0 1567 3780 12 v 0 1699 a Fz(MatrixMap)264 b Fe(Map)39
-b(co)s(ordinates)e(b)m(y)h(m)m(ultiplying)d(b)m(y)k(a)1719
-1809 y(matrix)3103 1699 y Fz(MatrixMap)0 1962 y Fd(Description:)44
-b Fj(A)20 b(MatrixMap)e(is)h(form)g(of)g(Mapping)g(whic)n(h)h(p)r
-(erforms)e(a)h(general)f(linear)g(transformation.)33
-b(Eac)n(h)18 b(set)227 2062 y(of)26 b(input)g(co)r(ordinates,)f
-(regarded)f(as)h(a)h(column-v)n(ector,)e(are)h(pre-m)n(ultiplied)g(b)n
-(y)h(a)f(matrix)g(\(whose)h(elemen)n(ts)227 2161 y(are)j(sp)r
-(eci\014ed)h(when)g(the)g(MatrixMap)f(is)g(created\))g(to)h(giv)n(e)e
-(a)i(new)f(column-v)n(ector)f(con)n(taining)h(the)h(output)227
-2261 y(co)r(ordinates.)36 b(If)28 b(appropriate,)e(the)i(in)n(v)n(erse)
-e(transformation)g(ma)n(y)h(also)f(b)r(e)i(p)r(erformed.)0
-2404 y Fd(Constructor)k(F)-8 b(unction:)227 2503 y Fj(astMatrixMap)-2
-2646 y Fd(Inheritance)n(:)227 2792 y Fj(The)28 b(MatrixMap)f(class)f
-(inherits)i(from)f(the)h(Mapping)f(class.)-2 2935 y Fd(A)m(ttributes)n
-(:)227 3081 y Fj(The)h(MatrixMap)e(class)h(do)r(es)g(not)g(de\014ne)h
-(an)n(y)f(new)g(attributes)h(b)r(ey)n(ond)f(those)g(whic)n(h)g(are)g
-(applicable)g(to)g(all)227 3181 y(Mappings.)-2 3324 y
-Fd(F)-8 b(unctions)n(:)227 3470 y Fj(The)29 b(MatrixMap)g(class)f(do)r
-(es)h(not)g(de\014ne)g(an)n(y)g(new)g(functions)g(b)r(ey)n(ond)g(those)
-g(whic)n(h)g(are)f(applicable)h(to)g(all)227 3570 y(Mappings.)p
-0 3756 V 0 3887 a Fz(NormMap)890 3888 y Fe(Normalise)36
-b(co)s(ordinates)h(using)h(a)h(supplied)1730 4001 y(F)-10
-b(rame)3172 3887 y Fz(NormMap)0 4153 y Fd(Description:)44
-b Fj(The)26 b(NormMap)e(class)g(implemen)n(ts)i(a)f(Mapping)g(whic)n(h)
-g(normalises)e(co)r(ordinate)i(v)-5 b(alues)24 b(using)h(the)227
-4253 y(astNorm)f(function)h(of)f(a)h(supplied)f(F)-7
-b(rame.)36 b(The)24 b(n)n(um)n(b)r(er)h(of)f(inputs)h(and)f(outputs)h
-(of)g(a)f(NormMap)g(are)f(b)r(oth)227 4353 y(equal)k(to)h(the)g(n)n(um)
-n(b)r(er)f(of)h(axes)e(in)i(the)g(supplied)g(F)-7 b(rame.)227
-4474 y(The)34 b(forw)n(ard)e(and)h(in)n(v)n(erse)f(transformation)g(of)
-i(a)f(NormMap)g(are)f(b)r(oth)i(de\014ned)g(but)g(are)f(iden)n(tical)g
-(\(that)227 4574 y(is,)43 b(they)c(do)g(not)h(form)f(a)g(real)g(in)n(v)
-n(erse)f(pair)g(in)i(that)g(the)g(in)n(v)n(erse)d(transformation)h(do)r
-(es)h(not)h(undo)f(the)227 4673 y(normalisation,)24 b(instead)h(it)h
-(reapplies)e(it\).)36 b(Ho)n(w)n(ev)n(er,)24 b(the)h(astSimplify)h
-(function)g(will)f(replace)f(neigh)n(b)r(ouring)227 4773
-y(pairs)j(of)g(forw)n(ard)f(and)i(in)n(v)n(erse)e(NormMaps)h(b)n(y)g(a)
-g(single)g(UnitMap.)0 4916 y Fd(Constructor)32 b(F)-8
-b(unction:)227 5015 y Fj(astNormMap)-2 5158 y Fd(Inheritance)n(:)227
-5304 y Fj(The)28 b(NormMap)f(class)f(inherits)i(from)f(the)h(Mapping)f
-(class.)-2 5447 y Fd(A)m(ttributes)n(:)227 5593 y Fj(The)h(MatrixMap)e
-(class)h(do)r(es)g(not)g(de\014ne)h(an)n(y)f(new)g(attributes)h(b)r(ey)
-n(ond)f(those)g(whic)n(h)g(are)g(applicable)g(to)g(all)227
-5693 y(Mappings.)p eop end
-%%Page: 501 511
-TeXDict begin 501 510 bop 3643 52 a FF(501)-2 351 y Fd(F)-8
-b(unctions)n(:)227 497 y Fj(The)32 b(NormMap)g(class)f(do)r(es)h(not)g
-(de\014ne)g(an)n(y)f(new)h(functions)h(b)r(ey)n(ond)f(those)f(whic)n(h)
-h(are)f(applicable)h(to)g(all)227 597 y(Mappings.)p 0
-789 3780 12 v 0 921 a Fz(NullRegion)330 b Fe(A)39 b(b)s(oundless)f
-(region)g(within)f(a)h(F)-10 b(rame)328 b Fz(NullRegion)0
-1103 y Fd(Description:)44 b Fj(The)21 b(NullRegion)g(class)f(implemen)n
-(ts)h(a)f(Region)h(with)g(no)f(b)r(ounds)h(within)h(a)e(F)-7
-b(rame.)35 b(If)21 b(the)g(Negated)227 1203 y(attribute)28
-b(of)f(a)h(NullRegion)f(is)g(false,)h(the)f(NullRegion)h(represen)n(ts)
-e(a)h(Region)g(con)n(taining)f(no)h(p)r(oin)n(ts.)37
-b(If)28 b(the)227 1302 y(Negated)k(attribute)g(of)h(a)e(NullRegion)i
-(is)f(true,)h(the)g(NullRegion)f(represen)n(ts)e(an)i(in\014nite)h
-(Region)f(\(that)h(is,)227 1402 y(all)28 b(p)r(oin)n(ts)f(in)h(the)g
-(co)r(ordinate)e(system)i(are)e(inside)i(the)g(NullRegion\).)0
-1548 y Fd(Constructor)k(F)-8 b(unction:)227 1648 y Fj(astNullRegion)-2
-1794 y Fd(Inheritance)n(:)227 1940 y Fj(The)28 b(NullRegion)f(class)g
-(inherits)g(from)h(the)g(Region)f(class.)-2 2086 y Fd(A)m(ttributes)n
-(:)227 2232 y Fj(The)h(NullRegion)g(class)f(do)r(es)h(not)g(de\014ne)g
-(an)n(y)f(new)h(attributes)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f
-(applicable)g(to)h(all)227 2332 y(Regions.)-2 2478 y
-Fd(F)-8 b(unctions)n(:)227 2624 y Fj(The)30 b(NullRegion)g(class)e(do)r
-(es)i(not)f(de\014ne)h(an)n(y)f(new)h(functions)g(b)r(ey)n(ond)f(those)
-h(whic)n(h)f(are)g(applicable)g(to)h(all)227 2723 y(Regions.)p
-0 2916 V 0 3047 a Fz(Ob)7 b(ject)710 b Fe(Base)39 b(class)f(for)g(all)g
-(AST)g(Ob)7 b(jects)709 b Fz(Ob)7 b(ject)0 3229 y Fd(Description:)44
-b Fj(This)33 b(class)e(is)h(the)h(base)f(class)f(from)h(whic)n(h)g(all)
-g(other)g(classes)f(in)i(the)f(AST)h(library)e(are)g(deriv)n(ed.)227
-3329 y(It)e(pro)n(vides)e(all)h(the)g(basic)g(Ob)5 b(ject)28
-b(b)r(eha)n(viour)f(and)h(Ob)5 b(ject)28 b(manipulation)g(facilities)g
-(required)f(throughout)227 3429 y(the)h(library)-7 b(.)36
-b(There)27 b(is)g(no)h(Ob)5 b(ject)27 b(constructor,)f(ho)n(w)n(ev)n
-(er,)g(as)h(Ob)5 b(jects)27 b(on)g(their)h(o)n(wn)f(are)f(not)i
-(useful.)0 3575 y Fd(Constructor)k(F)-8 b(unction:)227
-3674 y Fj(None.)-2 3820 y Fd(Inheritance)n(:)227 3967
-y Fj(The)28 b(Ob)5 b(ject)27 b(base)g(class)g(do)r(es)g(not)h(inherit)g
-(from)f(an)n(y)g(other)g(class.)-2 4113 y Fd(A)m(ttributes)n(:)227
-4259 y Fj(All)h(Ob)5 b(jects)28 b(ha)n(v)n(e)e(the)i(follo)n(wing)e
-(attributes:)340 4514 y Fi(\017)45 b Fj(Class:)36 b(Ob)5
-b(ject)28 b(class)e(name)340 4644 y Fi(\017)45 b Fj(ID:)28
-b(Ob)5 b(ject)28 b(iden)n(ti\014cation)f(string)340 4773
-y Fi(\017)45 b Fj(Iden)n(t:)37 b(P)n(ermanen)n(t)26 b(Ob)5
-b(ject)28 b(iden)n(ti\014cation)f(string)340 4903 y Fi(\017)45
-b Fj(Nob)5 b(ject:)37 b(Num)n(b)r(er)28 b(of)g(Ob)5 b(jects)27
-b(in)h(class)340 5032 y Fi(\017)45 b Fj(Ob)5 b(jSize:)37
-b(The)28 b(in-memory)e(size)h(of)h(the)g(Ob)5 b(ject)27
-b(in)h(b)n(ytes)340 5162 y Fi(\017)45 b Fj(RefCoun)n(t:)37
-b(Coun)n(t)28 b(of)f(activ)n(e)g(Ob)5 b(ject)28 b(p)r(oin)n(ters)340
-5291 y Fi(\017)45 b Fj(UseDefs:)38 b(Allo)n(w)27 b(use)g(of)h(default)g
-(v)-5 b(alues)27 b(for)g(Ob)5 b(ject)28 b(attributes?)-2
-5450 y Fd(F)-8 b(unctions)n(:)227 5596 y Fj(The)28 b(follo)n(wing)e
-(functions)i(ma)n(y)f(b)r(e)h(applied)g(to)f(all)h(Ob)5
-b(jects:)p eop end
-%%Page: 502 512
-TeXDict begin 502 511 bop 0 52 a FF(502)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(astAnn)n(ul:)37 b(Ann)n(ul)28 b(a)f(p)r(oin)n(ter)h(to)f(an)g(Ob)5
-b(ject)340 490 y Fi(\017)45 b Fj(astBegin:)36 b(Begin)27
-b(a)g(new)h(AST)g(con)n(text)340 628 y Fi(\017)45 b Fj(astClear:)36
-b(Clear)26 b(attribute)i(v)-5 b(alues)27 b(for)g(an)h(Ob)5
-b(ject)340 767 y Fi(\017)45 b Fj(astClone:)36 b(Clone)28
-b(a)f(p)r(oin)n(ter)g(to)g(an)h(Ob)5 b(ject)340 905 y
-Fi(\017)45 b Fj(astCop)n(y:)36 b(Cop)n(y)27 b(an)g(Ob)5
-b(ject)340 1044 y Fi(\017)45 b Fj(astDelete:)37 b(Delete)28
-b(an)g(Ob)5 b(ject)340 1182 y Fi(\017)45 b Fj(astEnd:)37
-b(End)27 b(an)g(AST)h(con)n(text)340 1321 y Fi(\017)45
-b Fj(astEscap)r(es:)36 b(Con)n(trol)26 b(whether)h(graphical)f(escap)r
-(e)h(sequences)g(are)g(remo)n(v)n(ed)340 1459 y Fi(\017)45
-b Fj(astExempt:)37 b(Exempt)27 b(an)g(Ob)5 b(ject)28
-b(p)r(oin)n(ter)f(from)g(AST)h(con)n(text)f(handling)340
-1598 y Fi(\017)45 b Fj(astExp)r(ort:)36 b(Exp)r(ort)27
-b(an)g(Ob)5 b(ject)27 b(p)r(oin)n(ter)h(to)f(an)g(outer)g(con)n(text)
-340 1736 y Fi(\017)45 b Fj(astGet)p Fl(<)p Fj(X)p Fl(>)p
-Fj(:)37 b(Get)28 b(an)f(attribute)h(v)-5 b(alue)27 b(for)g(an)g(Ob)5
-b(ject)340 1875 y Fi(\017)45 b Fj(astImp)r(ort:)37 b(Imp)r(ort)27
-b(an)h(Ob)5 b(ject)27 b(p)r(oin)n(ter)g(to)h(the)g(curren)n(t)e(con)n
-(text)340 2014 y Fi(\017)45 b Fj(astIsA)p Fl(<)p Fj(Class)p
-Fl(>)p Fj(:)35 b(T)-7 b(est)28 b(class)e(mem)n(b)r(ership)340
-2152 y Fi(\017)45 b Fj(astLo)r(c)n(k:)36 b(Lo)r(c)n(k)27
-b(an)g(Ob)5 b(ject)27 b(for)g(use)h(b)n(y)f(the)h(calling)f(thread)340
-2291 y Fi(\017)45 b Fj(astSame:)36 b(Do)28 b(t)n(w)n(o)f(AST)h(p)r(oin)
-n(ters)f(refer)g(to)g(the)h(same)f(Ob)5 b(ject?)340 2429
-y Fi(\017)45 b Fj(astSet:)37 b(Set)28 b(attribute)g(v)-5
-b(alues)27 b(for)g(an)g(Ob)5 b(ject)340 2568 y Fi(\017)45
-b Fj(astSet)p Fl(<)p Fj(X)p Fl(>)p Fj(:)36 b(Set)28 b(an)g(attribute)g
-(v)-5 b(alue)27 b(for)g(an)g(Ob)5 b(ject)340 2706 y Fi(\017)45
-b Fj(astSho)n(w:)36 b(Displa)n(y)27 b(a)g(textual)h(represen)n(tation)e
-(of)i(an)f(Ob)5 b(ject)27 b(on)h(standard)e(output)340
-2845 y Fi(\017)45 b Fj(astT)-7 b(est:)37 b(T)-7 b(est)27
-b(if)i(an)e(attribute)h(v)-5 b(alue)27 b(is)h(set)f(for)g(an)h(Ob)5
-b(ject)340 2983 y Fi(\017)45 b Fj(astT)-7 b(une:)37 b(Set)28
-b(or)f(get)g(an)g(AST)h(tuning)g(parameter)340 3122 y
-Fi(\017)45 b Fj(astUnlo)r(c)n(k:)36 b(Unlo)r(c)n(k)28
-b(an)f(Ob)5 b(ject)28 b(for)f(use)g(b)n(y)g(other)g(threads)340
-3260 y Fi(\017)45 b Fj(astV)-7 b(ersion:)36 b(Return)28
-b(the)g(v)n(erson)e(of)h(the)h(AST)g(library)f(b)r(eing)g(used.)p
-0 3471 3780 12 v 0 3603 a Fz(PcdMap)891 3609 y Fe(Apply)38
-b(2-dimensional)e(pincushion/barrel)1642 3730 y(distortion)3285
-3603 y Fz(PcdMap)0 3907 y Fd(Description:)44 b Fj(A)31
-b(PcdMap)g(is)f(a)h(non-linear)e(Mapping)h(whic)n(h)h(transforms)f
-(2-dimensional)f(p)r(ositions)h(to)h(correct)227 4007
-y(for)25 b(the)g(radial)f(distortion)g(in)n(tro)r(duced)h(b)n(y)f(some)
-h(cameras)e(and)i(telescop)r(es.)35 b(This)25 b(can)g(tak)n(e)f(the)h
-(form)g(either)227 4107 y(of)j(pincushion)f(or)g(barrel)f(distortion,)h
-(and)h(is)f(c)n(haracterized)f(b)n(y)h(a)g(single)g(distortion)g(co)r
-(e\016cien)n(t.)227 4237 y(A)g(PcdMap)f(is)g(sp)r(eci\014ed)h(b)n(y)f
-(giving)g(this)h(distortion)f(co)r(e\016cien)n(t)g(and)g(the)h(co)r
-(ordinates)e(of)i(the)g(cen)n(tre)f(of)g(the)227 4336
-y(radial)h(distortion.)36 b(The)28 b(forw)n(ard)d(transformation)h(of)i
-(a)f(PcdMap)g(applies)g(the)h(distortion:)227 4467 y(RD)g(=)g(R)g
-Fi(\003)f Fj(\()h(1)f(+)g(C)h Fi(\003)f Fj(R)h Fi(\003)f
-Fj(R)h(\))227 4597 y(where)h(R)h(is)g(the)g(undistorted)f(radial)g
-(distance)g(from)h(the)g(distortion)f(cen)n(tre)g(\(sp)r(eci\014ed)h(b)
-n(y)f(attribute)h(Pcd-)227 4697 y(Cen\),)k(RD)e(is)g(the)g(radial)e
-(distance)i(from)f(the)i(same)e(cen)n(tre)g(in)h(the)g(presence)f(of)h
-(distortion,)g(and)g(C)g(is)f(the)227 4796 y(distortion)c(co)r
-(e\016cien)n(t)h(\(giv)n(en)f(b)n(y)g(attribute)h(Disco\).)227
-4926 y(The)33 b(in)n(v)n(erse)f(transformation)f(of)i(a)f(PcdMap)h
-(remo)n(v)n(es)d(the)k(distortion)e(pro)r(duced)h(b)n(y)f(the)h(forw)n
-(ard)f(trans-)227 5026 y(formation.)42 b(The)29 b(expression)f(used)i
-(to)f(deriv)n(e)g(R)g(from)g(RD)i(is)e(an)g(appro)n(ximate)f(in)n(v)n
-(erse)g(of)h(the)h(expression)227 5126 y(ab)r(o)n(v)n(e.)0
-5286 y Fd(Constructor)i(F)-8 b(unction:)227 5386 y Fj(astPcdMap)-2
-5547 y Fd(Inheritance)n(:)227 5693 y Fj(The)28 b(PcdMap)f(class)g
-(inherits)g(from)g(the)h(Mapping)f(class.)p eop end
-%%Page: 503 513
-TeXDict begin 503 512 bop 3643 52 a FF(503)-2 351 y Fd(A)m(ttributes)n
-(:)227 497 y Fj(In)38 b(addition)f(to)f(those)h(attributes)g(common)g
-(to)g(all)g(Mappings,)h(ev)n(ery)e(PcdMap)h(also)f(has)g(the)i(follo)n
-(wing)227 597 y(attributes:)340 864 y Fi(\017)45 b Fj(Disco:)37
-b(PcdMap)27 b(pincushion/barrel)f(distortion)g(co)r(e\016cien)n(t)340
-999 y Fi(\017)45 b Fj(PcdCen\(axis\):)36 b(Cen)n(tre)28
-b(co)r(ordinates)e(of)h(pincushion/barrel)f(distortion)-2
-1165 y Fd(F)-8 b(unctions)n(:)227 1311 y Fj(The)37 b(PcdMap)f(class)f
-(do)r(es)h(not)h(de\014ne)f(an)n(y)g(new)h(functions)f(b)r(ey)n(ond)h
-(those)f(whic)n(h)g(are)g(applicable)g(to)g(all)227 1411
-y(Mappings.)p 0 1614 3780 12 v 0 1745 a Fz(P)l(ermMap)1025
-1746 y Fe(Co)s(ordinate)g(p)s(erm)m(utation)g(Mapping)3195
-1745 y Fz(P)l(ermMap)0 1939 y Fd(Description:)44 b Fj(A)37
-b(P)n(ermMap)e(is)h(a)g(Mapping)g(whic)n(h)g(p)r(erm)n(utes)h(the)f
-(order)f(of)h(co)r(ordinates,)i(and)e(p)r(ossibly)g(also)227
-2039 y(c)n(hanges)26 b(the)i(n)n(um)n(b)r(er)g(of)f(co)r(ordinates,)g
-(b)r(et)n(w)n(een)g(its)h(input)g(and)g(output.)227 2165
-y(In)37 b(addition)f(to)g(p)r(erm)n(uting)h(the)f(co)r(ordinate)g
-(order,)h(a)f(P)n(ermMap)f(ma)n(y)h(also)f(assign)g(constan)n(t)h(v)-5
-b(alues)36 b(to)227 2265 y(co)r(ordinates.)53 b(This)33
-b(is)g(useful)h(when)g(the)f(n)n(um)n(b)r(er)g(of)h(co)r(ordinates)d
-(is)j(b)r(eing)f(increased)f(as)h(it)h(allo)n(ws)e(\014xed)227
-2365 y(v)-5 b(alues)27 b(to)h(b)r(e)g(assigned)e(to)i(an)n(y)f(new)g
-(ones.)0 2518 y Fd(Constructor)32 b(F)-8 b(unction:)227
-2618 y Fj(astP)n(ermMap)-2 2771 y Fd(Inheritance)n(:)227
-2917 y Fj(The)28 b(P)n(ermMap)e(class)h(inherits)g(from)h(the)g
-(Mapping)f(class.)-2 3071 y Fd(A)m(ttributes)n(:)227
-3217 y Fj(The)32 b(P)n(ermMap)d(class)i(do)r(es)g(not)g(de\014ne)g(an)n
-(y)g(new)g(attributes)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f
-(applicable)h(to)g(all)227 3317 y(Mappings.)-2 3470 y
-Fd(F)-8 b(unctions)n(:)227 3617 y Fj(The)33 b(P)n(ermMap)f(class)g(do)r
-(es)g(not)h(de\014ne)g(an)n(y)g(new)g(functions)g(b)r(ey)n(ond)f(those)
-h(whic)n(h)g(are)f(applicable)g(to)h(all)227 3716 y(Mappings.)p
-0 3920 V 0 4051 a Fz(Plot)588 b Fe(Pro)m(vide)37 b(facilities)f(for)i
-(2D)h(graphical)d(output)586 b Fz(Plot)0 4244 y Fd(Description:)44
-b Fj(This)33 b(class)e(pro)n(vides)g(facilities)h(for)g(pro)r(ducing)f
-(2D)i(graphical)d(output.)52 b(A)32 b(Plot)g(is)g(a)g(sp)r(ecialised)
-227 4344 y(form)40 b(of)g(F)-7 b(rameSet,)43 b(in)e(whic)n(h)f(the)h
-(base)e(F)-7 b(rame)40 b(describ)r(es)f(a)h Ft(")p Fj(graphical)p
-Ft(")e Fj(co)r(ordinate)h(system)h(and)g(is)227 4444
-y(asso)r(ciated)28 b(with)i(a)e(rectangular)f(plotting)i(area)f(in)h
-(the)h(underlying)e(graphics)g(system.)41 b(This)29 b(plotting)g(area)
-227 4543 y(is)f(where)f(graphical)f(output)i(app)r(ears.)36
-b(It)28 b(is)f(de\014ned)h(when)g(the)g(Plot)f(is)g(created.)227
-4670 y(The)36 b(curren)n(t)e(F)-7 b(rame)35 b(of)h(a)f(Plot)g(describ)r
-(es)g(a)g Ft(")p Fj(ph)n(ysical)p Ft(")f Fj(co)r(ordinate)g(system,)j
-(whic)n(h)f(is)f(the)h(co)r(ordinate)227 4769 y(system)41
-b(in)h(whic)n(h)f(plotting)h(op)r(erations)e(are)g(sp)r(eci\014ed.)79
-b(The)41 b(results)g(of)g(eac)n(h)g(plotting)g(op)r(eration)g(are)227
-4869 y(automatically)26 b(transformed)f(in)n(to)i(graphical)e(co)r
-(ordinates)g(so)h(as)g(to)h(app)r(ear)e(in)i(the)g(plotting)g(area)e
-(\(sub)5 b(ject)227 4969 y(to)28 b(an)n(y)f(clipping)g(whic)n(h)h(ma)n
-(y)f(b)r(e)h(in)f(e\013ect\).)227 5095 y(Because)d(the)h(Mapping)f(b)r
-(et)n(w)n(een)g(ph)n(ysical)g(and)g(graphical)f(co)r(ordinates)g(ma)n
-(y)h(often)h(b)r(e)g(non-linear,)e(or)h(ev)n(en)227 5195
-y(discon)n(tin)n(uous,)i(most)h(plotting)f(do)r(es)h(not)g(result)f(in)
-h(simple)g(straigh)n(t)f(lines.)36 b(The)27 b(basic)f(plotting)h
-(elemen)n(t)g(is)227 5295 y(therefore)f(not)h(a)f(straigh)n(t)f(line,)i
-(but)h(a)e(geo)r(desic)f(curv)n(e)h(\(see)h(astCurv)n(e,)e(astGenCurv)n
-(e)h(and)g(astP)n(olyCurv)n(e\).)227 5394 y(A)k(Plot)f(also)f(pro)n
-(vides)g(facilities)i(for)f(dra)n(wing)f(mark)n(ers)f(or)i(sym)n(b)r
-(ols)f(\(astMark\),)i(text)f(\(astT)-7 b(ext\))30 b(and)f(grid)227
-5494 y(lines)38 b(\(astGridLine\).)68 b(It)38 b(is)g(also)f(p)r
-(ossible)h(to)g(dra)n(w)e(curvilinear)h(axes)g(with)i(optional)e(co)r
-(ordinate)g(grids)227 5593 y(\(astGrid\).)48 b(A)32 b(range)e(of)h
-(Plot)g(attributes)g(is)g(a)n(v)-5 b(ailable)30 b(to)h(allo)n(w)f
-(precise)h(con)n(trol)f(o)n(v)n(er)f(the)j(app)r(earance)e(of)227
-5693 y(graphical)c(output)i(pro)r(duced)g(b)n(y)f(these)h(functions.)p
-eop end
-%%Page: 504 514
-TeXDict begin 504 513 bop 0 52 a FF(504)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)227 351 y Fj(Y)-7 b(ou)20
-b(ma)n(y)f(select)h(di\013eren)n(t)f(ph)n(ysical)g(co)r(ordinate)g
-(systems)g(in)h(whic)n(h)f(to)h(plot)g(\(including)g(the)g(nativ)n(e)f
-(graphical)227 451 y(co)r(ordinate)33 b(system)h(itself)6
-b(\))35 b(b)n(y)f(selecting)g(di\013eren)n(t)g(F)-7 b(rames)33
-b(as)h(the)g(curren)n(t)f(F)-7 b(rame)34 b(of)g(a)g(Plot,)h(using)e
-(its)227 551 y(Curren)n(t)d(attribute.)47 b(Y)-7 b(ou)31
-b(ma)n(y)f(also)g(set)h(up)g(clipping)g(\(see)f(astClip\))h(to)g(limit)
-h(the)f(exten)n(t)g(of)g(an)n(y)f(plotting)227 650 y(y)n(ou)c(p)r
-(erform,)h(and)f(this)h(ma)n(y)f(b)r(e)h(done)f(in)h(an)n(y)f(of)h(the)
-g(co)r(ordinate)e(systems)i(asso)r(ciated)e(with)i(the)g(Plot,)g(not)
-227 750 y(necessarily)f(the)i(one)f(y)n(ou)g(are)g(plotting)g(in.)227
-875 y(Lik)n(e)k(an)n(y)f(F)-7 b(rameSet,)32 b(a)f(Plot)g(ma)n(y)f(also)
-g(b)r(e)i(used)f(as)g(a)f(F)-7 b(rame.)47 b(In)32 b(this)f(case,)h(it)f
-(b)r(eha)n(v)n(es)f(lik)n(e)h(its)g(curren)n(t)227 975
-y(F)-7 b(rame,)27 b(whic)n(h)h(describ)r(es)f(the)h(ph)n(ysical)f(co)r
-(ordinate)f(system.)227 1101 y(When)35 b(used)f(as)g(a)g(Mapping,)h(a)f
-(Plot)g(describ)r(es)f(the)i(in)n(ter-relation)e(b)r(et)n(w)n(een)h
-(graphical)e(co)r(ordinates)h(\(its)227 1200 y(base)k(F)-7
-b(rame\))38 b(and)f(ph)n(ysical)g(co)r(ordinates)g(\(its)h(curren)n(t)f
-(F)-7 b(rame\).)67 b(It)38 b(di\013ers)f(from)h(a)f(normal)g(F)-7
-b(rameSet,)227 1300 y(ho)n(w)n(ev)n(er,)29 b(in)h(that)h(an)e(attempt)i
-(to)f(transform)f(p)r(oin)n(ts)h(whic)n(h)g(lie)g(in)h(clipp)r(ed)f
-(areas)f(of)h(the)g(Plot)g(will)g(result)227 1400 y(in)e(bad)g(co)r
-(ordinate)e(v)-5 b(alues)27 b(\(AST)p Ft(__)p Fj(BAD\).)0
-1551 y Fd(Constructor)32 b(F)-8 b(unction:)227 1651 y
-Fj(astPlot)-2 1803 y Fd(Inheritance)n(:)227 1949 y Fj(The)28
-b(Plot)f(class)g(inherits)g(from)g(the)h(F)-7 b(rameSet)28
-b(class.)-2 2101 y Fd(A)m(ttributes)n(:)227 2247 y Fj(In)37
-b(addition)f(to)g(those)g(attributes)h(common)e(to)i(all)f(F)-7
-b(rameSets,)38 b(ev)n(ery)d(Plot)h(also)f(has)h(the)h(follo)n(wing)e
-(at-)227 2346 y(tributes:)340 2611 y Fi(\017)45 b Fj(Abbrev:)37
-b(Abbreviate)27 b(leading)g(\014elds?)340 2745 y Fi(\017)45
-b Fj(Border:)36 b(Dra)n(w)26 b(a)i(b)r(order)e(around)h(v)-5
-b(alid)27 b(regions)g(of)g(a)g(Plot?)340 2879 y Fi(\017)45
-b Fj(Clip:)37 b(Clip)28 b(lines)g(and/or)e(mark)n(ers)f(at)j(the)g
-(Plot)f(b)r(oundary?)340 3013 y Fi(\017)45 b Fj(ClipOp:)37
-b(Com)n(bine)27 b(Plot)g(clipping)h(limits)g(using)f(a)h(b)r(o)r(olean)
-f(OR?)340 3147 y Fi(\017)45 b Fj(Colour\(elemen)n(t\):)37
-b(Colour)26 b(index)i(for)f(a)g(Plot)g(elemen)n(t)340
-3281 y Fi(\017)45 b Fj(Dra)n(wAxes\(axis\):)36 b(Dra)n(w)27
-b(axes)f(for)h(a)g(Plot?)340 3415 y Fi(\017)45 b Fj(Dra)n(wTitle:)37
-b(Dra)n(w)26 b(a)i(title)g(for)f(a)g(Plot?)340 3549 y
-Fi(\017)45 b Fj(Escap)r(e:)36 b(Allo)n(w)27 b(c)n(hanges)g(of)g(c)n
-(haracter)f(attributes)h(within)i(strings?)340 3683 y
-Fi(\017)45 b Fj(Edge\(axis\):)36 b(Whic)n(h)28 b(edges)f(to)g(lab)r(el)
-h(in)g(a)f(Plot)340 3817 y Fi(\017)45 b Fj(F)-7 b(on)n(t\(elemen)n
-(t\):)38 b(Character)26 b(fon)n(t)h(for)g(a)h(Plot)f(elemen)n(t)340
-3951 y Fi(\017)45 b Fj(Gap\(axis\):)37 b(In)n(terv)-5
-b(al)27 b(b)r(et)n(w)n(een)g(linearly)g(spaced)g(ma)5
-b(jor)26 b(axis)h(v)-5 b(alues)340 4085 y Fi(\017)45
-b Fj(Grf:)37 b(Select)28 b(the)g(graphics)e(in)n(terface)h(to)h(use.)
-340 4219 y Fi(\017)45 b Fj(Grid:)37 b(Dra)n(w)27 b(grid)g(lines)g(for)g
-(a)h(Plot?)340 4353 y Fi(\017)45 b Fj(In)n(visible:)37
-b(Dra)n(w)27 b(graphics)f(in)i(in)n(visible)f(ink?)340
-4487 y Fi(\017)45 b Fj(Lab)r(elA)n(t\(axis\):)37 b(Where)27
-b(to)h(place)f(n)n(umerical)g(lab)r(els)g(for)g(a)g(Plot)340
-4621 y Fi(\017)45 b Fj(Lab)r(elUnits\(axis\):)37 b(Use)28
-b(axis)f(unit)h(descriptions)f(in)h(a)f(Plot?)340 4755
-y Fi(\017)45 b Fj(Lab)r(elUp\(axis\):)37 b(Dra)n(w)27
-b(n)n(umerical)g(Plot)g(lab)r(els)g(uprigh)n(t?)340 4889
-y Fi(\017)45 b Fj(Lab)r(elling:)37 b(Lab)r(el)27 b(and)h(tic)n(k)f
-(placemen)n(t)g(option)h(for)f(a)g(Plot)340 5023 y Fi(\017)45
-b Fj(LogGap\(axis\):)36 b(In)n(terv)-5 b(al)27 b(b)r(et)n(w)n(een)g
-(logarithmically)f(spaced)h(ma)5 b(jor)26 b(axis)h(v)-5
-b(alues)340 5157 y Fi(\017)45 b Fj(LogPlot\(axis\):)35
-b(Map)28 b(the)g(plot)f(on)n(to)g(the)h(screen)f(logarithmically?)340
-5291 y Fi(\017)45 b Fj(LogTic)n(ks\(axis\):)35 b(Space)27
-b(the)h(ma)5 b(jor)27 b(tic)n(k)g(marks)g(logarithmically?)340
-5425 y Fi(\017)45 b Fj(Ma)5 b(jTic)n(kLen\(axis\):)36
-b(Length)27 b(of)h(ma)5 b(jor)26 b(tic)n(k)i(marks)e(for)h(a)g(Plot)340
-5559 y Fi(\017)45 b Fj(MinTic)n(kLen\(axis\):)37 b(Length)27
-b(of)h(minor)f(tic)n(k)g(marks)g(for)g(a)g(Plot)340 5693
-y Fi(\017)45 b Fj(MinTic)n(k\(axis\):)37 b(Densit)n(y)27
-b(of)h(minor)f(tic)n(k)g(marks)g(for)g(a)g(Plot)p eop
-end
-%%Page: 505 515
-TeXDict begin 505 514 bop 3643 52 a FF(505)340 351 y
-Fi(\017)45 b Fj(NumLab\(axis\):)37 b(Dra)n(w)27 b(n)n(umerical)g(axis)f
-(lab)r(els)i(for)f(a)g(Plot?)340 482 y Fi(\017)45 b Fj
-(NumLabGap\(axis\):)37 b(Spacing)27 b(of)g(n)n(umerical)g(axis)g(lab)r
-(els)g(for)g(a)h(Plot)340 612 y Fi(\017)45 b Fj(Size\(elemen)n(t\):)38
-b(Character)26 b(size)h(for)g(a)g(Plot)g(elemen)n(t)340
-742 y Fi(\017)45 b Fj(St)n(yle\(elemen)n(t\):)38 b(Line)27
-b(st)n(yle)h(for)f(a)g(Plot)g(elemen)n(t)340 873 y Fi(\017)45
-b Fj(T)-7 b(extLab\(axis\):)37 b(Dra)n(w)26 b(descriptiv)n(e)h(axis)g
-(lab)r(els)g(for)g(a)h(Plot?)340 1003 y Fi(\017)45 b
-Fj(T)-7 b(extLabGap\(axis\):)36 b(Spacing)27 b(of)h(descriptiv)n(e)f
-(axis)f(lab)r(els)i(for)f(a)g(Plot)340 1133 y Fi(\017)45
-b Fj(Tic)n(kAll:)37 b(Dra)n(w)27 b(tic)n(k)g(marks)g(on)g(all)g(edges)g
-(of)h(a)f(Plot?)340 1264 y Fi(\017)45 b Fj(TitleGap:)37
-b(V)-7 b(ertical)28 b(spacing)e(for)h(a)g(Plot)g(title)340
-1394 y Fi(\017)45 b Fj(T)-7 b(ol:)37 b(Plotting)27 b(tolerance)340
-1524 y Fi(\017)45 b Fj(Width\(elemen)n(t\):)39 b(Line)27
-b(width)i(for)e(a)g(Plot)g(elemen)n(t)-2 1684 y Fd(F)-8
-b(unctions)n(:)227 1830 y Fj(In)37 b(addition)f(to)h(those)f(functions)
-g(applicable)g(to)h(all)f(F)-7 b(rameSets,)38 b(the)f(follo)n(wing)e
-(functions)i(ma)n(y)f(also)f(b)r(e)227 1929 y(applied)28
-b(to)f(all)h(Plots:)340 2187 y Fi(\017)45 b Fj(astBorder:)35
-b(Dra)n(w)27 b(a)g(b)r(order)g(around)f(v)-5 b(alid)28
-b(regions)e(of)i(a)f(Plot)340 2317 y Fi(\017)45 b Fj(astBoundingBo)n
-(x:)35 b(Returns)27 b(a)h(b)r(ounding)f(b)r(o)n(x)g(for)h(previously)e
-(dra)n(wn)g(graphics)340 2447 y Fi(\017)45 b Fj(astClip:)37
-b(Set)28 b(up)g(or)f(remo)n(v)n(e)e(clipping)j(for)f(a)g(Plot)340
-2578 y Fi(\017)45 b Fj(astCurv)n(e:)36 b(Dra)n(w)27 b(a)g(geo)r(desic)f
-(curv)n(e)340 2708 y Fi(\017)45 b Fj(astGenCurv)n(e:)36
-b(Dra)n(w)27 b(a)g(generalized)f(curv)n(e)340 2838 y
-Fi(\017)45 b Fj(astGetGrfCon)n(text:)37 b(Get)28 b(the)g(graphics)e
-(con)n(text)h(for)g(a)g(Plot)340 2969 y Fi(\017)45 b
-Fj(astGrfP)n(op:)36 b(Retriev)n(e)27 b(previously)f(sa)n(v)n(ed)g
-(graphics)g(functions)340 3099 y Fi(\017)45 b Fj(astGrfPush:)36
-b(Sa)n(v)n(e)27 b(the)h(curren)n(t)e(graphics)h(functions)340
-3229 y Fi(\017)45 b Fj(astGrfSet:)37 b(Register)27 b(a)g(graphics)f
-(routine)h(for)g(use)h(b)n(y)f(a)g(Plot)340 3360 y Fi(\017)45
-b Fj(astGrid:)37 b(Dra)n(w)26 b(a)i(set)f(of)h(lab)r(elled)f(co)r
-(ordinate)g(axes)340 3490 y Fi(\017)45 b Fj(astGridLine:)37
-b(Dra)n(w)26 b(a)i(grid)e(line)i(\(or)f(axis\))g(for)g(a)h(Plot)340
-3620 y Fi(\017)45 b Fj(astMark:)36 b(Dra)n(w)27 b(a)g(set)g(of)h(mark)n
-(ers)d(for)i(a)h(Plot)340 3751 y Fi(\017)45 b Fj(astP)n(olyCurv)n(e:)34
-b(Dra)n(w)27 b(a)g(series)g(of)g(connected)h(geo)r(desic)f(curv)n(es)
-340 3881 y Fi(\017)45 b Fj(astT)-7 b(ext:)37 b(Dra)n(w)27
-b(a)g(text)h(string)f(for)g(a)g(Plot)-2 4040 y Fd(Graphical)33
-b(Elemen)m(ts)n(:)227 4186 y Fj(The)21 b(colour)e(index,)j(c)n
-(haracter)d(fon)n(t,)j(c)n(haracter)c(size,)k(line)f(st)n(yle)f(and)g
-(line)h(width)g(used)g(for)f(plotting)g(can)h(b)r(e)g(set)227
-4286 y(indep)r(enden)n(tly)g(for)f(v)-5 b(arious)19 b(elemen)n(ts)h(of)
-g(the)g(graphical)f(output)h(pro)r(duced)g(b)n(y)g(a)g(Plot.)34
-b(The)20 b(di\013eren)n(t)g(graph-)227 4386 y(ical)h(elemen)n(ts)g(are)
-f(iden)n(ti\014ed)h(b)n(y)g(app)r(ending)f(the)i(strings)e(listed)h(b)r
-(elo)n(w)g(as)f(subscripts)g(to)h(the)g(Plot)g(attributes)227
-4485 y(Colour\(elemen)n(t\),)k(F)-7 b(on)n(t\(elemen)n(t\),)27
-b(Size\(elemen)n(t\),)f(St)n(yle\(elemen)n(t\))g(and)f(Width\(elemen)n
-(t\).)38 b(These)25 b(strings)227 4585 y(are)k(case-insensitiv)n(e)g
-(and)h(unam)n(biguous)f(abbreviations)f(ma)n(y)i(b)r(e)g(used.)44
-b(Elemen)n(ts)30 b(of)g(the)g(graphical)f(out-)227 4685
-y(put)34 b(whic)n(h)g(relate)f(to)g(individual)h(axes)f(can)g(b)r(e)h
-(referred)e(to)i(either)f(indep)r(enden)n(tly)h(\(e.g.)55
-b Ft(")p Fj(\(Grid1\))p Ft(")33 b Fj(and)227 4784 y Ft(")p
-Fj(\(Grid2\))p Ft(")27 b Fj(\))h(or)f(together)f(\(e.g.)37
-b Ft(")p Fj(\(Grid\))p Ft(")p Fj(\):)340 5041 y Fi(\017)45
-b Fj(Axes:)37 b(Axis)28 b(lines)f(dra)n(wn)g(through)g(tic)n(k)g(marks)
-f(using)i(astGrid)340 5172 y Fi(\017)45 b Fj(Axis1:)37
-b(Axis)27 b(line)h(dra)n(wn)f(through)f(tic)n(k)i(marks)e(on)i(axis)f
-(1)g(using)g(astGrid)340 5302 y Fi(\017)45 b Fj(Axis2:)37
-b(Axis)27 b(line)h(dra)n(wn)f(through)f(tic)n(k)i(marks)e(on)i(axis)f
-(2)g(using)g(astGrid)340 5432 y Fi(\017)45 b Fj(Border:)36
-b(The)27 b(Plot)g(b)r(order)g(dra)n(wn)g(using)g(astBorder)e(or)i
-(astGrid)340 5563 y Fi(\017)45 b Fj(Curv)n(es:)36 b(Geo)r(desic)27
-b(curv)n(es)g(dra)n(wn)f(using)h(astCurv)n(e,)g(astGenCurv)n(e)f(or)h
-(astP)n(olyCurv)n(e)340 5693 y Fi(\017)45 b Fj(Grid:)37
-b(Grid)28 b(lines)f(dra)n(wn)g(using)g(astGridLine)g(or)g(astGrid)p
-eop end
-%%Page: 506 516
-TeXDict begin 506 515 bop 0 52 a FF(506)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(Grid1:)37 b(Grid)27 b(lines)h(whic)n(h)f(cross)f(axis)h(1,)g(dra)n
-(wn)g(using)g(astGridLine)g(or)g(astGrid)340 484 y Fi(\017)45
-b Fj(Grid2:)37 b(Grid)27 b(lines)h(whic)n(h)f(cross)f(axis)h(2,)g(dra)n
-(wn)g(using)g(astGridLine)g(or)g(astGrid)340 618 y Fi(\017)45
-b Fj(Mark)n(ers:)35 b(Graphical)27 b(mark)n(ers)e(\(sym)n(b)r(ols\))j
-(dra)n(wn)e(using)i(astMark)340 751 y Fi(\017)45 b Fj(NumLab:)37
-b(Numerical)28 b(axis)e(lab)r(els)i(dra)n(wn)e(using)i(astGrid)340
-884 y Fi(\017)45 b Fj(NumLab1:)37 b(Numerical)27 b(lab)r(els)g(for)g
-(axis)g(1)g(dra)n(wn)g(using)g(astGrid)340 1017 y Fi(\017)45
-b Fj(NumLab2:)37 b(Numerical)27 b(lab)r(els)g(for)g(axis)g(2)g(dra)n
-(wn)g(using)g(astGrid)340 1150 y Fi(\017)45 b Fj(Strings:)37
-b(T)-7 b(ext)27 b(strings)g(dra)n(wn)g(using)g(astT)-7
-b(ext)340 1283 y Fi(\017)45 b Fj(T)-7 b(extLab:)37 b(Descriptiv)n(e)27
-b(axis)g(lab)r(els)g(dra)n(wn)g(using)g(astGrid)340 1416
-y Fi(\017)45 b Fj(T)-7 b(extLab1:)36 b(Descriptiv)n(e)27
-b(lab)r(el)h(for)f(axis)g(1)g(dra)n(wn)g(using)g(astGrid)340
-1550 y Fi(\017)45 b Fj(T)-7 b(extLab2:)36 b(Descriptiv)n(e)27
-b(lab)r(el)h(for)f(axis)g(2)g(dra)n(wn)g(using)g(astGrid)340
-1683 y Fi(\017)45 b Fj(Tic)n(ks:)36 b(Tic)n(k)28 b(marks)e(\(b)r(oth)i
-(ma)5 b(jor)27 b(and)g(minor\))g(dra)n(wn)g(using)g(astGrid)340
-1816 y Fi(\017)45 b Fj(Tic)n(ks1:)36 b(Tic)n(k)27 b(marks)f(\(b)r(oth)j
-(ma)5 b(jor)26 b(and)i(minor\))f(for)g(axis)g(1)g(dra)n(wn)g(using)g
-(astGrid)340 1949 y Fi(\017)45 b Fj(Tic)n(ks2:)36 b(Tic)n(k)27
-b(marks)f(\(b)r(oth)j(ma)5 b(jor)26 b(and)i(minor\))f(for)g(axis)g(2)g
-(dra)n(wn)g(using)g(astGrid)340 2082 y Fi(\017)45 b Fj(Title:)38
-b(The)27 b(Plot)g(title)h(dra)n(wn)f(using)g(astGrid)p
-0 2282 3780 12 v 0 2414 a Fz(Plot3D)418 b Fe(Pro)m(vide)37
-b(facilities)f(for)i(2D)h(graphical)d(output)415 b Fz(Plot3D)0
-2603 y Fd(Description:)44 b Fj(A)28 b(Plot3D)g(is)f(a)h(sp)r(ecialised)
-f(form)g(of)h(Plot)f(that)h(pro)n(vides)e(facilities)i(for)f(pro)r
-(ducing)g(3D)h(graphical)227 2703 y(output,)35 b(including)d(fully)i
-(annotated)e(3D)g(co)r(ordinate)g(grids.)50 b(The)33
-b(base)f(F)-7 b(rame)32 b(in)h(a)f(Plot3D)g(describ)r(es)g(a)227
-2803 y(3-dimensional)c Ft(")p Fj(graphical)p Ft(")f Fj(co)r(ordinate)h
-(system.)42 b(The)29 b(axes)g(of)g(this)h(co)r(ordinate)e(system)h(are)
-f(assumed)h(to)227 2902 y(b)r(e)d(righ)n(t-handed)f(\(that)h(is,)f(if)h
-(X)g(app)r(ears)f(horizon)n(tally)e(to)j(the)g(righ)n(t)e(and)i(Y)g(v)n
-(ertically)e(up)n(w)n(ards,)g(then)i(Z)g(is)227 3002
-y(out)d(of)h(the)f(screen)g(to)n(w)n(ards)e(the)i(view)n(er\),)h(and)f
-(are)f(assumed)h(to)g(b)r(e)g(equally)g(scaled)f(\(that)i(is,)g(the)g
-(same)e(units)227 3101 y(are)32 b(used)g(to)g(measure)g(p)r(ositions)g
-(on)g(eac)n(h)f(of)i(the)g(3)f(axes\).)50 b(The)33 b(upp)r(er)f(and)h
-(lo)n(w)n(er)d(b)r(ounds)j(of)f(a)g(v)n(olume)227 3201
-y(within)25 b(this)g(graphical)d(co)r(ordinate)h(system)h(is)g(sp)r
-(eci\014ed)h(when)f(the)g(Plot3D)g(is)g(created,)g(and)g(all)g
-(subsequen)n(t)227 3301 y(graphics)i(are)h Ft(")p Fj(dra)n(wn)p
-Ft(")f Fj(in)i(this)g(v)n(olume.)227 3426 y(The)h(Plot3D)g(class)f(do)r
-(es)g(not)i(itself)f(include)g(an)n(y)g(abilit)n(y)f(to)h(dra)n(w)f(on)
-h(a)g(graphics)e(device.)41 b(Instead)29 b(it)g(calls)227
-3525 y(up)r(on)21 b(function)g(in)g(an)f(externally)g(supplied)g(mo)r
-(dule)h(\(the)g Ft(")p Fj(grf3d)p Ft(")e Fj(mo)r(dule\))i(to)g(do)f
-(the)h(required)e(dra)n(wing.)33 b(A)227 3625 y(mo)r(dule)23
-b(should)g(b)r(e)g(written)g(that)g(implemen)n(ts)h(the)f(functions)g
-(of)g(the)g(grf3d)f(in)n(terface)g(using)h(the)g(facilities)g(of)227
-3724 y(a)d(sp)r(eci\014c)g(graphics)e(system)h(This)h(mo)r(dule)g
-(should)g(then)g(b)r(e)g(link)n(ed)g(in)n(to)g(the)g(application)f(so)g
-(that)h(the)g(Plot3D)227 3824 y(class)30 b(can)f(use)h(its)h(functions)
-f(\(see)g(the)h(description)f(of)g(the)g(ast)p Ft(_)p
-Fj(link)g(commands)f(for)h(details)g(of)g(ho)n(w)g(to)g(do)227
-3924 y(this\).)35 b(The)19 b(grf3d)g(in)n(terface)g(de\014nes)g(a)g
-(few)h(simple)f(functions)h(for)f(dra)n(wing)f(primitiv)n(es)h(suc)n(h)
-g(as)f(straigh)n(t)h(lines,)227 4023 y(mark)n(ers)27
-b(and)h(c)n(haracter)e(strings.)38 b(These)28 b(functions)h(all)f
-(accept)g(p)r(ositions)f(in)i(the)g(3D)f(graphics)f(co)r(ordinate)227
-4123 y(system)21 b(\(the)h(base)e(F)-7 b(rame)21 b(of)f(the)i
-(Plot3D\),)f(and)f(so)h(the)g(grf3d)f(mo)r(dule)h(m)n(ust)h(also)d
-(manage)h(the)i(pro)5 b(jection)20 b(of)227 4223 y(these)i(3D)g(co)r
-(ordinates)e(on)n(to)h(the)h(2D)g(viewing)f(surface,)h(including)g(the)
-h(c)n(hoice)d(of)i Ft(")p Fj(ey)n(e)p Ft(")p Fj(/)p Ft(")p
-Fj(camera)p Ft(")c Fj(p)r(osition,)227 4322 y(direction)25
-b(of)g(viewing,)f(etc.)37 b(The)25 b(AST)g(library)e(includes)i(a)g
-(sample)f(implemen)n(tation)h(of)g(the)g(grf3d)f(in)n(terface)227
-4422 y(based)j(on)h(the)g(PGPLOT)e(graphics)h(system)g(\(see)h(\014le)f
-(grf3d)p Ft(_)p Fj(pgplot.c\).)36 b(This)28 b(implemen)n(tation)g(also)
-e(serv)n(es)227 4521 y(to)36 b(do)r(cumen)n(t)g(the)h(grf3d)e(in)n
-(terface)g(itself)i(and)f(should)g(b)r(e)g(consulted)g(for)g(details)f
-(b)r(efore)h(writing)g(a)g(new)227 4621 y(implemen)n(tation.)227
-4746 y(The)30 b(curren)n(t)g(F)-7 b(rame)29 b(of)h(a)g(Plot3D)f
-(describ)r(es)h(a)f Ft(")p Fj(ph)n(ysical)p Ft(")g Fj(3-dimensional)f
-(co)r(ordinate)h(system,)i(whic)n(h)f(is)227 4846 y(the)36
-b(co)r(ordinate)f(system)h(in)g(whic)n(h)f(plotting)h(op)r(erations)e
-(are)h(sp)r(eci\014ed)h(when)g(in)n(v)n(oking)e(the)j(metho)r(ds)f(of)
-227 4945 y(the)f(Plot3D)e(class.)55 b(The)34 b(results)f(of)h(eac)n(h)f
-(plotting)h(op)r(eration)f(are)g(automatically)g(transformed)g(in)n(to)
-h(3D)227 5045 y(graphical)29 b(co)r(ordinates)f(b)r(efore)i(b)r(eing)g
-(plotted)g(using)g(the)g(facilities)g(of)g(the)g(grf3d)f(mo)r(dule)i
-(link)n(ed)f(in)n(to)f(the)227 5144 y(application.)227
-5269 y(Y)-7 b(ou)20 b(ma)n(y)f(select)h(di\013eren)n(t)f(ph)n(ysical)g
-(co)r(ordinate)g(systems)g(in)h(whic)n(h)f(to)h(plot)g(\(including)g
-(the)g(nativ)n(e)f(graphical)227 5369 y(co)r(ordinate)26
-b(system)h(itself)6 b(\))29 b(b)n(y)e(selecting)f(di\013eren)n(t)i(F)-7
-b(rames)26 b(as)h(the)g(curren)n(t)f(F)-7 b(rame)27 b(of)g(a)g(Plot3D,)
-g(using)f(its)227 5469 y(Curren)n(t)h(attribute.)227
-5593 y(Lik)n(e)f(an)n(y)f(F)-7 b(rameSet,)26 b(a)g(Plot3D)f(ma)n(y)h
-(also)f(b)r(e)h(used)g(as)g(a)f(F)-7 b(rame.)36 b(In)26
-b(this)h(case,)e(it)i(b)r(eha)n(v)n(es)e(lik)n(e)g(its)h(curren)n(t)227
-5693 y(F)-7 b(rame,)27 b(whic)n(h)h(describ)r(es)f(the)h(ph)n(ysical)f
-(co)r(ordinate)f(system.)p eop end
-%%Page: 507 517
-TeXDict begin 507 516 bop 3643 52 a FF(507)227 351 y
-Fj(When)28 b(used)g(as)f(a)g(Mapping,)g(a)g(Plot3D)g(describ)r(es)g
-(the)g(in)n(ter-relation)f(b)r(et)n(w)n(een)i(3D)f(graphical)f(co)r
-(ordinates)227 451 y(\(its)i(base)f(F)-7 b(rame\))28
-b(and)f(3D)h(ph)n(ysical)e(co)r(ordinates)h(\(its)h(curren)n(t)e(F)-7
-b(rame\).)227 575 y(Although)34 b(the)g(Plot3D)g(class)f(inherits)g
-(from)h(the)g(Plot)g(class,)g(sev)n(eral)e(of)i(the)g(facilities)g(of)g
-(the)g(Plot)g(class)227 674 y(are)28 b(not)h(a)n(v)-5
-b(ailable)27 b(in)i(the)h(Plot3D)e(class,)g(and)h(an)f(error)f(will)i
-(b)r(e)g(rep)r(orted)f(if)h(an)n(y)f(attempt)i(is)f(made)f(to)h(use)227
-774 y(them.)62 b(Sp)r(eci\014cally)-7 b(,)37 b(the)f(Plot3D)f(class)g
-(do)r(es)g(not)h(supp)r(ort)f(clipping)h(using)f(the)h(astClip)g
-(function.)61 b(Nor)227 874 y(do)r(es)31 b(it)h(supp)r(ort)g(the)g(sp)r
-(eci\014cation)f(of)g(graphics)f(primitiv)n(e)i(functions)g(at)f
-(run-time)g(using)h(the)g(astGrfSet,)227 973 y(astGrfP)n(op,)26
-b(astGrfPush)h(and)h(astGetGrfCon)n(text)f(functions.)0
-1121 y Fd(Constructor)32 b(F)-8 b(unction:)227 1221 y
-Fj(astPlot3D)-2 1369 y Fd(Inheritance)n(:)227 1515 y
-Fj(The)28 b(Plot3D)f(class)g(inherits)g(from)g(the)h(Plot)f(class.)-2
-1664 y Fd(A)m(ttributes)n(:)227 1810 y Fj(In)d(addition)g(to)f(those)g
-(attributes)h(common)f(to)g(all)h(Plots,)f(ev)n(ery)g(Plot3D)g(also)f
-(has)h(the)h(follo)n(wing)f(attributes:)340 2069 y Fi(\017)45
-b Fj(Norm:)37 b(Normal)26 b(v)n(ector)h(de\014ning)g(the)h(2D)g(plane)f
-(used)h(for)f(text)h(and)f(mark)n(ers)340 2200 y Fi(\017)45
-b Fj(Ro)r(otCorner:)35 b(Sp)r(eci\014es)28 b(whic)n(h)g(edges)f(of)g
-(the)h(3D)g(b)r(o)n(x)f(should)g(b)r(e)h(annotated.)227
-2361 y(Some)35 b(attributes)f(of)g(the)h(Plot)f(class)g(refer)f(to)i
-(sp)r(eci\014c)f(ph)n(ysical)g(co)r(ordinate)f(axes)h(\(e.g.)57
-b(Gap,)36 b(Lab)r(elUp,)227 2461 y(Dra)n(wAxes,)29 b(etc\).)43
-b(F)-7 b(or)29 b(a)g(basic)g(Plot,)g(the)h(axis)f(index)g(m)n(ust)h(b)r
-(e)g(1)f(or)f(2,)i(but)g(for)f(a)g(Plot3D)g(the)h(axis)f(index)227
-2560 y(can)e(b)r(e)h(1,)g(2)f(or)g(3.)227 2684 y(Certain)35
-b(Plot)h(attributes)f(are)g(ignored)f(b)n(y)i(the)g(Plot3D)f(class)g
-(\(e.g.)61 b(Edge,)37 b(Dra)n(wTitle,)g(TitleGap,)h(etc\).)227
-2784 y(Consult)28 b(the)g(Plot)f(attribute)h(do)r(cumen)n(tation)f(for)
-g(details.)-2 2932 y Fd(F)-8 b(unctions)n(:)227 3078
-y Fj(The)24 b(Plot3D)g(class)f(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)
-h(functions)h(b)r(ey)n(ond)e(those)h(whic)n(h)g(are)f(applicable)g(to)h
-(all)f(Plots.)227 3178 y(Note,)37 b(ho)n(w)n(ev)n(er,)d(that)h(the)g
-(follo)n(wing)e(metho)r(ds)i(inherited)g(from)f(the)h(Plot)f(class)f
-(cannot)h(b)r(e)h(used)g(with)g(a)227 3277 y(Plot3D)27
-b(and)h(will)f(rep)r(ort)g(an)h(error)d(if)j(called:)340
-3412 y Fi(\017)45 b Fj(astBoundingBo)n(x,)g(astClip,)h(astCurv)n(e,)f
-(astGenCurv)n(e,)g(astGetGrfCon)n(text,)h(astGrfP)n(op,)f(astGrf-)427
-3512 y(Push,)28 b(astGrfSet,)f(astGridLine,)g(astP)n(olyCurv)n(e.)p
-0 3709 3780 12 v 0 3841 a Fz(P)l(oin)l(tList)508 b Fe(A)39
-b(collection)e(of)h(p)s(oin)m(ts)g(in)g(a)h(F)-10 b(rame)506
-b Fz(P)l(oin)l(tList)0 4027 y Fd(Description:)44 b Fj(The)20
-b(P)n(oin)n(tList)e(class)g(implemen)n(ts)i(a)f(Region)f(whic)n(h)i
-(represen)n(ts)e(a)g(collection)h(of)g(p)r(oin)n(ts)h(in)f(a)g(F)-7
-b(rame.)0 4175 y Fd(Constructor)32 b(F)-8 b(unction:)227
-4275 y Fj(astP)n(oin)n(tList)-2 4423 y Fd(Inheritance)n(:)227
-4569 y Fj(The)28 b(P)n(oin)n(tList)e(class)h(inherits)h(from)f(the)h
-(Region)f(class.)-2 4717 y Fd(A)m(ttributes)n(:)227 4863
-y Fj(In)40 b(addition)g(to)g(those)f(attributes)h(common)f(to)h(all)f
-(Regions,)j(ev)n(ery)d(P)n(oin)n(tList)f(also)h(has)g(the)i(follo)n
-(wing)227 4963 y(attributes:)340 5222 y Fi(\017)k Fj(ListSize:)37
-b(The)28 b(n)n(um)n(b)r(er)f(of)h(p)r(ositions)f(stored)g(in)h(the)g(P)
-n(oin)n(tList)-2 5383 y Fd(F)-8 b(unctions)n(:)227 5529
-y Fj(The)35 b(P)n(oin)n(tList)e(class)g(do)r(es)h(not)h(de\014ne)f(an)n
-(y)g(new)g(functions)h(b)r(ey)n(ond)f(those)g(whic)n(h)g(are)g
-(applicable)g(to)g(all)227 5628 y(Regions.)p eop end
-%%Page: 508 518
-TeXDict begin 508 517 bop 0 52 a FF(508)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)p 0 351 3780 12 v 0 483
-a Fz(P)l(olyMap)225 b Fe(Map)38 b(co)s(ordinates)f(using)h(p)s
-(olynomial)e(functions)223 b Fz(P)l(olyMap)0 644 y Fd(Description:)44
-b Fj(A)33 b(P)n(olyMap)f(is)g(a)g(form)h(of)g(Mapping)f(whic)n(h)h(p)r
-(erforms)f(a)g(general)f(p)r(olynomial)h(transformation.)227
-744 y(Eac)n(h)37 b(output)g(co)r(ordinate)g(is)g(a)g(p)r(olynomial)g
-(function)h(of)f(all)g(the)h(input)h(co)r(ordinates.)65
-b(The)37 b(co)r(e\016cien)n(ts)227 844 y(are)29 b(sp)r(eci\014ed)i
-(separately)d(for)i(eac)n(h)f(output)i(co)r(ordinate.)43
-b(The)30 b(forw)n(ard)f(and)h(in)n(v)n(erse)e(transformations)h(are)227
-943 y(de\014ned)f(indep)r(endan)n(tly)g(b)n(y)f(separate)g(sets)g(of)h
-(co)r(e\016cien)n(ts.)0 1079 y Fd(Constructor)k(F)-8
-b(unction:)227 1179 y Fj(astP)n(olyMap)-2 1314 y Fd(Inheritance)n(:)227
-1460 y Fj(The)28 b(P)n(olyMap)e(class)h(inherits)g(from)g(the)h
-(Mapping)g(class.)-2 1596 y Fd(A)m(ttributes)n(:)227
-1742 y Fj(The)34 b(P)n(olyMap)d(class)h(do)r(es)h(not)h(de\014ne)f(an)n
-(y)g(new)g(attributes)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f
-(applicable)h(to)g(all)227 1842 y(Mappings.)-2 1978 y
-Fd(F)-8 b(unctions)n(:)227 2124 y Fj(The)35 b(P)n(olyMap)f(class)g(do)r
-(es)g(not)h(de\014ne)g(an)n(y)f(new)h(functions)h(b)r(ey)n(ond)e(those)
-h(whic)n(h)g(are)f(applicable)g(to)h(all)227 2223 y(Mappings.)p
-0 2395 V 0 2527 a Fz(P)l(olygon)153 b Fe(A)38 b(p)s(olygonal)d(region)h
-(within)h(a)g(2-dimensional)e(F)-10 b(rame)152 b Fz(P)l(olygon)0
-2688 y Fd(Description:)44 b Fj(The)25 b(P)n(olygon)e(class)g(implemen)n
-(ts)i(a)f(p)r(olygonal)g(area,)f(de\014ned)i(b)n(y)g(a)f(collection)g
-(of)h(v)n(ertices,)f(within)227 2788 y(a)k(2-dimensional)f(F)-7
-b(rame.)39 b(The)29 b(v)n(ertices)e(are)h(connected)g(together)f(b)n(y)
-i(geo)r(desic)e(curv)n(es)g(within)i(the)g(encap-)227
-2887 y(sulated)g(F)-7 b(rame.)42 b(F)-7 b(or)28 b(instance,)i(if)g(the)
-f(encapsulated)g(F)-7 b(rame)29 b(is)g(a)g(simple)g(F)-7
-b(rame)29 b(then)h(the)f(geo)r(desics)f(will)227 2987
-y(b)r(e)34 b(straigh)n(t)d(lines,)j(but)g(if)f(the)g(F)-7
-b(rame)33 b(is)f(a)h(SkyF)-7 b(rame)32 b(then)h(the)g(geo)r(desics)f
-(will)h(b)r(e)g(great)f(circles.)52 b(Note,)227 3087
-y(the)31 b(v)n(ertices)e(m)n(ust)h(b)r(e)h(supplied)g(in)f(an)g(order)f
-(suc)n(h)h(that)g(the)h(inside)f(of)g(the)h(p)r(olygon)e(is)h(to)g(the)
-h(left)g(of)f(the)227 3186 y(b)r(oundary)c(as)g(the)h(v)n(ertices)f
-(are)f(tra)n(v)n(ersed.)35 b(Supplying)27 b(them)g(in)g(the)g(rev)n
-(erse)e(order)g(will)i(e\013ectiv)n(ely)f(negate)227
-3286 y(the)i(p)r(olygon.)227 3404 y(Within)33 b(a)e(SkyF)-7
-b(rame,)32 b(neigh)n(b)r(ouring)e(v)n(ertices)g(are)h(alw)n(a)n(ys)e
-(joined)j(using)f(the)h(shortest)e(path.)49 b(Th)n(us)31
-b(if)h(an)227 3503 y(edge)f(of)g(180)f(degrees)g(or)g(more)g(in)i
-(length)f(is)g(required,)g(it)h(should)e(b)r(e)i(split)g(in)n(to)e
-(section)h(eac)n(h)g(of)g(whic)n(h)g(is)227 3603 y(less)k(than)h(180)e
-(degrees.)59 b(The)35 b(closed)g(path)g(joining)g(all)h(the)f(v)n
-(ertices)g(in)g(order)f(will)i(divide)f(the)h(celestial)227
-3702 y(sphere)f(in)n(to)h(t)n(w)n(o)f(disjoin)n(t)h(regions.)60
-b(The)36 b(inside)g(of)g(the)g(p)r(olygon)f(is)g(the)h(region)f(whic)n
-(h)h(is)f(circled)h(in)g(an)227 3802 y(an)n(ti-clo)r(c)n(kwise)25
-b(manner)h(\(when)i(view)n(ed)e(from)g(the)h(inside)g(of)g(the)g
-(celestial)f(sphere\))h(when)g(mo)n(ving)e(through)227
-3902 y(the)h(list)f(of)g(v)n(ertices)f(in)i(the)f(order)f(in)h(whic)n
-(h)g(they)h(w)n(ere)e(supplied)h(when)h(the)f(P)n(olygon)e(w)n(as)h
-(created)h(\(i.e.)36 b(the)227 4001 y(inside)28 b(is)f(to)h(the)g(left)
-g(of)g(the)g(b)r(oundary)f(when)g(mo)n(ving)g(through)g(the)h(v)n
-(ertices)e(in)i(the)g(order)e(supplied\).)0 4137 y Fd(Constructor)32
-b(F)-8 b(unction:)227 4237 y Fj(astP)n(olygon)-2 4372
-y Fd(Inheritance)n(:)227 4518 y Fj(The)28 b(P)n(olygon)d(class)i
-(inherits)g(from)h(the)g(Region)f(class.)-2 4654 y Fd(A)m(ttributes)n
-(:)227 4800 y Fj(The)36 b(P)n(olygon)d(class)i(do)r(es)g(not)h
-(de\014ne)f(an)n(y)g(new)h(attributes)f(b)r(ey)n(ond)g(those)g(whic)n
-(h)h(are)e(applicable)h(to)h(all)227 4900 y(Regions.)-2
-5036 y Fd(F)-8 b(unctions)n(:)227 5182 y Fj(In)23 b(addition)g(to)f
-(those)h(functions)g(applicable)f(to)h(all)f(Regions,)h(the)g(follo)n
-(wing)f(functions)h(ma)n(y)f(also)f(b)r(e)j(applied)227
-5281 y(to)k(all)f(P)n(olygons:)340 5522 y Fi(\017)45
-b Fj(astDo)n(wnsize:)36 b(Reduce)28 b(the)g(n)n(um)n(b)r(er)f(of)h(v)n
-(ertices)e(in)i(a)f(P)n(olygon.)340 5641 y Fi(\017)45
-b Fj(astOutline)p Fl(<)p Fj(X)p Fl(>)p Fj(:)36 b(Create)27
-b(a)g(P)n(olygon)f(outlining)h(v)-5 b(alues)27 b(in)h(a)f(pixel)h(arra)
-n(y)p eop end
-%%Page: 509 519
-TeXDict begin 509 518 bop 3643 52 a FF(509)p 0 351 3780
-12 v 0 483 a Fz(Prism)320 b Fe(An)39 b(extrusion)e(of)i(a)f(region)f
-(in)m(to)h(higher)g(dimensions)318 b Fz(Prism)0 695 y
-Fd(Description:)44 b Fj(A)26 b(Prism)e(is)h(a)g(Region)f(whic)n(h)h
-(represen)n(ts)f(an)h(extrusion)f(of)h(an)g(existing)g(Region)f(in)n
-(to)h(one)g(or)f(more)227 794 y(orthogonal)32 b(dimensions)h(\(sp)r
-(eci\014ed)i(b)n(y)e(another)g(Region\).)55 b(If)34 b(the)g(Region)g
-(to)f(b)r(e)h(extruded)g(has)f(N)h(axes,)227 894 y(and)25
-b(the)g(Region)f(de\014ning)h(the)g(extrusion)f(has)g(M)h(axes,)g(then)
-g(the)g(resulting)g(Prism)e(will)i(ha)n(v)n(e)f(\(M+N\))h(axes.)227
-993 y(A)i(p)r(oin)n(t)g(is)g(inside)f(the)h(Prism)f(if)h(the)g(\014rst)
-g(N)g(axis)f(v)-5 b(alues)26 b(corresp)r(ond)f(to)i(a)f(p)r(oin)n(t)h
-(inside)f(the)i(Region)e(b)r(eing)227 1093 y(extruded,)34
-b(and)e(the)h(remaining)e(M)i(axis)e(v)-5 b(alues)32
-b(corresp)r(ond)f(to)h(a)g(p)r(oin)n(t)h(inside)f(the)h(Region)f
-(de\014ning)g(the)227 1193 y(extrusion.)227 1329 y(As)h(an)g(example,)h
-(a)f(cylinder)g(can)f(b)r(e)i(represen)n(ted)e(b)n(y)h(extruding)f(an)h
-(existing)g(Circle,)h(using)e(an)h(In)n(terv)-5 b(al)227
-1428 y(to)31 b(de\014ne)g(the)g(extrusion.)46 b(Ih)31
-b(this)g(case,)g(the)g(In)n(terv)-5 b(al)30 b(w)n(ould)h(ha)n(v)n(e)e
-(a)i(single)f(axis)g(and)h(w)n(ould)f(sp)r(ecify)h(the)227
-1528 y(upp)r(er)d(and)f(lo)n(w)n(er)f(limits)j(of)e(the)h(cylinder)f
-(along)g(its)g(length.)0 1700 y Fd(Constructor)32 b(F)-8
-b(unction:)227 1800 y Fj(astPrism)-2 1972 y Fd(Inheritance)n(:)227
-2118 y Fj(The)28 b(Prism)f(class)f(inherits)i(from)f(the)h(Region)f
-(class.)-2 2290 y Fd(A)m(ttributes)n(:)227 2436 y Fj(The)19
-b(Prism)g(class)f(do)r(es)g(not)h(de\014ne)h(an)n(y)e(new)h(attributes)
-g(b)r(ey)n(ond)g(those)f(whic)n(h)h(are)f(applicable)h(to)g(all)f
-(Regions.)-2 2609 y Fd(F)-8 b(unctions)n(:)227 2755 y
-Fj(The)19 b(Prism)e(class)h(do)r(es)g(not)h(de\014ne)g(an)n(y)e(new)i
-(functions)g(b)r(ey)n(ond)f(those)g(whic)n(h)g(are)g(applicable)g(to)g
-(all)h(Regions.)p 0 2977 V 0 3107 a Fz(RateMap)844 3108
-y Fe(Mapping)38 b(whic)m(h)g(represen)m(ts)f(di\013eren)m(tiation)3232
-3107 y Fz(RateMap)0 3320 y Fd(Description:)44 b Fj(A)37
-b(RateMap)e(is)h(a)f(Mapping)h(whic)n(h)g(represen)n(ts)e(a)i(single)f
-(elemen)n(t)h(of)g(the)g(Jacobian)e(matrix)i(of)227 3420
-y(another)h(Mapping.)67 b(The)38 b(Mapping)g(for)f(whic)n(h)h(the)g
-(Jacobian)e(is)i(required)f(is)g(sp)r(eci\014ed)h(when)g(the)h(new)227
-3519 y(RateMap)27 b(is)h(created,)f(and)g(is)h(referred)e(to)i(as)f
-(the)h Ft(")p Fj(encapsulated)e(Mapping)p Ft(")h Fj(b)r(elo)n(w.)227
-3655 y(The)39 b(n)n(um)n(b)r(er)f(of)g(inputs)h(to)f(a)g(RateMap)g(is)g
-(the)h(same)f(as)f(the)i(n)n(um)n(b)r(er)f(of)h(inputs)f(to)h(its)f
-(encapsulated)227 3755 y(Mapping.)e(The)27 b(n)n(um)n(b)r(er)f(of)h
-(outputs)g(from)f(a)g(RateMap)g(is)h(alw)n(a)n(ys)e(one.)36
-b(This)26 b(one)g(output)i(equals)d(the)i(rate)227 3854
-y(of)c(c)n(hange)f(of)h(a)g(sp)r(eci\014ed)g(output)h(of)f(the)g
-(encapsulated)g(Mapping)f(with)i(resp)r(ect)f(to)f(a)h(sp)r(eci\014ed)g
-(input)h(of)f(the)227 3954 y(encapsulated)k(Mapping)g(\(the)i(input)f
-(and)g(output)g(to)f(use)h(are)e(sp)r(eci\014ed)i(when)g(the)g(RateMap)
-f(is)h(created\).)227 4090 y(A)g(RateMap)f(whic)n(h)h(has)e(not)i(b)r
-(een)g(in)n(v)n(erted)e(do)r(es)i(not)f(de\014ne)h(an)f(in)n(v)n(erse)f
-(transformation.)35 b(If)28 b(a)f(RateMap)227 4190 y(has)g(b)r(een)h
-(in)n(v)n(erted)f(then)h(it)g(will)g(de\014ne)g(an)f(in)n(v)n(erse)f
-(transformation)g(but)j(not)e(a)g(forw)n(ard)f(transformation.)0
-4362 y Fd(Constructor)32 b(F)-8 b(unction:)227 4461 y
-Fj(astRateMap)-2 4634 y Fd(Inheritance)n(:)227 4780 y
-Fj(The)28 b(RateMap)f(class)g(inherits)g(from)h(the)g(Mapping)f(class.)
--2 4952 y Fd(A)m(ttributes)n(:)227 5098 y Fj(The)33 b(RateMap)f(class)g
-(do)r(es)g(not)h(de\014ne)g(an)n(y)e(new)i(attributes)g(b)r(ey)n(ond)f
-(those)g(whic)n(h)h(are)e(applicable)h(to)h(all)227 5198
-y(Mappings.)-2 5370 y Fd(F)-8 b(unctions)n(:)227 5516
-y Fj(The)35 b(RateMap)f(class)f(do)r(es)h(not)g(de\014ne)h(an)n(y)e
-(new)i(functions)f(b)r(ey)n(ond)g(those)g(whic)n(h)h(are)e(applicable)h
-(to)g(all)227 5616 y(Mappings.)p eop end
-%%Page: 510 520
-TeXDict begin 510 519 bop 0 52 a FF(510)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)p 0 351 3780 12 v 0 483
-a Fz(Region)269 b Fe(Represen)m(ts)39 b(a)f(region)g(within)f(a)h(co)s
-(ordinate)f(system)267 b Fz(Region)0 675 y Fd(Description:)44
-b Fj(This)25 b(class)e(pro)n(vides)g(the)h(basic)g(facilities)g(for)g
-(describing)g(a)f(region)g(within)i(a)f(sp)r(eci\014ed)h(co)r(ordinate)
-227 774 y(system.)37 b(Ho)n(w)n(ev)n(er,)26 b(the)h(Region)g(class)g
-(do)r(es)g(not)h(ha)n(v)n(e)e(a)h(constructor)f(function)i(of)g(its)f
-(o)n(wn,)g(as)g(it)h(is)g(simply)227 874 y(a)i(con)n(tainer)e(class)h
-(for)h(a)f(family)h(of)g(sp)r(ecialised)f(sub-classes)f(suc)n(h)i(as)f
-(Circle,)h(Bo)n(x,)g(etc,)g(whic)n(h)g(implemen)n(t)227
-973 y(Regions)d(with)h(particular)e(shap)r(es.)227 1099
-y(All)j(sub-classes)e(of)i(Region)f(require)g(a)g(F)-7
-b(rame)28 b(to)h(b)r(e)g(supplied)g(when)g(the)g(Region)f(is)g
-(created.)39 b(This)29 b(F)-7 b(rame)227 1199 y(describ)r(es)25
-b(the)h(co)r(ordinate)e(system)i(in)g(whic)n(h)f(the)h(Region)f(is)g
-(de\014ned,)i(and)e(is)g(referred)g(to)g(as)g(the)h Ft(")p
-Fj(encapsu-)227 1299 y(lated)g(F)-7 b(rame)p Ft(")24
-b Fj(b)r(elo)n(w.)36 b(Constructors)23 b(will)j(also)e(t)n(ypically)h
-(required)f(one)h(or)g(more)f(p)r(ositions)h(to)h(b)r(e)f(supplied)227
-1398 y(whic)n(h)32 b(de\014ne)g(the)g(lo)r(cation)g(and)f(exten)n(t)h
-(of)g(the)g(region.)48 b(These)32 b(p)r(ositions)f(m)n(ust)h(b)r(e)h
-(supplied)f(within)g(the)227 1498 y(encapsulated)27 b(F)-7
-b(rame.)227 1624 y(The)36 b(Region)g(class)f(inherits)g(from)h(the)g(F)
--7 b(rame)36 b(class,)h(and)f(so)f(a)h(Region)f(can)g(b)r(e)i(supplied)
-f(where-ev)n(er)e(a)227 1723 y(F)-7 b(rame)27 b(is)h(exp)r(ected.)37
-b(In)28 b(these)g(cases,)e(supplying)i(a)f(Region)g(is)h(equiv)-5
-b(alen)n(t)27 b(to)g(supplying)h(a)f(reference)g(to)g(its)227
-1823 y(encapsulated)33 b(F)-7 b(rame.)53 b(Th)n(us)32
-b(all)h(the)h(metho)r(ds)f(of)g(the)h(F)-7 b(rame)32
-b(class)g(can)h(b)r(e)h(used)f(on)g(the)g(Region)f(class.)227
-1923 y(F)-7 b(or)27 b(instance,)h(the)g(astF)-7 b(ormat)26
-b(function)i(ma)n(y)f(b)r(e)h(used)g(on)f(a)g(Region)g(to)h(format)f
-(an)g(axis)g(v)-5 b(alue.)227 2049 y(In)26 b(addition,)h(since)f(F)-7
-b(rame)25 b(inherits)h(from)g(Mapping,)g(a)f(Region)h(is)g(also)f(a)g
-(sort)g(of)h(Mapping.)36 b(T)-7 b(ransforming)227 2148
-y(p)r(ositions)28 b(b)n(y)g(supplying)h(a)f(Region)g(to)g(one)g(of)g
-(the)h(astT)-7 b(ran)p Fl(<)p Fj(X)p Fl(>)27 b Fj(functions)i(is)f(the)
-h(w)n(a)n(y)e(to)i(determine)f(if)h(a)227 2248 y(giv)n(en)24
-b(p)r(osition)h(is)g(inside)g(or)f(outside)g(the)i(Region.)35
-b(When)25 b(used)g(as)g(a)f(Mapping,)h(most)g(classes)e(of)i(F)-7
-b(rame)25 b(are)227 2348 y(equiv)-5 b(alen)n(t)26 b(to)g(a)g(UnitMap.)
-37 b(Ho)n(w)n(ev)n(er,)25 b(the)i(Region)e(class)h(mo)r(di\014es)g
-(this)g(b)r(eha)n(viour)f(so)h(that)h(a)f(Region)f(acts)227
-2447 y(lik)n(e)e(a)f(UnitMap)i(only)e(for)h(input)g(p)r(ositions)g
-(whic)n(h)g(are)e(within)j(the)f(area)f(represen)n(ted)f(b)n(y)i(the)g
-(Region.)35 b(Input)227 2547 y(p)r(ositions)c(whic)n(h)f(are)g(outside)
-g(the)i(area)d(pro)r(duce)h(bad)h(output)g(v)-5 b(alues)30
-b(\(i.e.)47 b(the)31 b(output)g(v)-5 b(alues)30 b(are)g(equal)227
-2646 y(to)e(AST)p Ft(__)p Fj(BAD\).)h(This)f(b)r(eha)n(viour)f(is)h
-(the)g(same)f(for)h(b)r(oth)g(the)h(forw)n(ard)d(and)i(the)h(in)n(v)n
-(erse)d(transformation.)227 2746 y(In)39 b(this)f(sense)g(the)g
-Ft(")p Fj(in)n(v)n(erse)e(transformation)p Ft(")h Fj(is)h(not)g(a)f
-(true)h(in)n(v)n(erse)f(of)h(the)h(forw)n(ard)d(transformation,)227
-2846 y(since)d(applying)f(the)h(forw)n(ard)e(transformation)g(to)i(a)f
-(p)r(oin)n(t)h(outside)g(the)g(Region,)g(and)g(then)g(applying)f(the)
-227 2945 y(in)n(v)n(erse)j(transformation)g(results,)i(in)g(a)f(set)g
-(of)g(AST)p Ft(__)p Fj(BAD)g(axis)g(v)-5 b(alues)36 b(rather)f(than)h
-(the)h(original)d(axis)227 3045 y(v)-5 b(alues.)37 b(If)27
-b(required,)f(the)h(astRemo)n(v)n(eRegions)d(function)j(can)g(b)r(e)g
-(used)g(to)f(remo)n(v)n(e)f(the)i Ft(")p Fj(masking)p
-Ft(")e Fj(e\013ect)j(of)227 3145 y(an)n(y)j(Regions)f(con)n(tained)g
-(within)i(a)f(comp)r(ound)g(Mapping)g(or)f(F)-7 b(rameSet.)47
-b(It)31 b(do)r(es)g(this)h(b)n(y)f(replacing)e(eac)n(h)227
-3244 y(Region)35 b(with)g(a)g(UnitMap)h(or)e(equiv)-5
-b(alen)n(t)35 b(F)-7 b(rame)35 b(\(dep)r(ending)h(on)f(the)g(con)n
-(text)g(in)h(whic)n(h)f(the)g(Region)g(is)227 3344 y(used\).)227
-3470 y(If)d(the)f(co)r(ordinate)f(system)h(represen)n(ted)e(b)n(y)i
-(the)g(Region)g(is)g(c)n(hanged)e(\(b)n(y)i(c)n(hanging)f(the)h(v)-5
-b(alues)31 b(of)g(one)f(or)227 3569 y(more)23 b(of)g(the)h(attribute)g
-(whic)n(h)g(the)g(Region)e(inherits)i(from)f(its)h(encapsulated)f(F)-7
-b(rame\),)24 b(the)g(area)e(represen)n(ted)227 3669 y(b)n(y)f(the)h
-(Region)f(is)g(mapp)r(ed)h(in)n(to)f(the)g(new)h(co)r(ordinate)e
-(system.)35 b(F)-7 b(or)20 b(instance,)j(let's)e(sa)n(y)f(a)h(Circle)g
-(\(a)g(sub)r(class)227 3769 y(of)32 b(Region\))g(is)f(created,)i(a)e
-(SkyF)-7 b(rame)31 b(b)r(eing)h(supplied)h(to)e(the)i(constructor)d(so)
-h(that)i(the)f(Circle)f(describ)r(es)227 3868 y(a)g(circular)f(area)g
-(on)h(the)g(sky)g(in)h(FK4)e(equatorial)g(co)r(ordinates.)46
-b(Since)32 b(Region)e(inherits)i(from)f(F)-7 b(rame,)31
-b(the)227 3968 y(Circle)23 b(will)h(ha)n(v)n(e)f(a)g(System)h
-(attribute)f(and)h(this)g(attribute)g(will)f(b)r(e)h(set)g(to)g
-Ft(")p Fj(FK4)p Ft(")p Fj(.)34 b(If)24 b(the)g(System)f(attribute)227
-4068 y(of)29 b(the)g(Region)f(is)g(then)h(c)n(hanged)f(from)g(FK4)g(to)
-g(FK5,)h(the)g(circular)e(area)g(represen)n(ted)g(b)n(y)i(the)g(Region)
-e(will)227 4167 y(automatically)34 b(b)r(e)h(mapp)r(ed)g(from)f(the)h
-(FK4)f(system)g(in)n(to)h(the)g(FK5)f(system.)57 b(In)35
-b(general,)g(c)n(hanging)e(the)227 4267 y(co)r(ordinate)26
-b(system)h(in)h(this)f(w)n(a)n(y)f(ma)n(y)g(result)h(in)g(the)h(region)
-e(c)n(hanging)g(shap)r(e)h(-)f(for)h(instance,)g(a)g(circle)f(ma)n(y)
-227 4366 y(c)n(hange)d(in)n(to)h(an)h(ellipse)f(if)h(the)f
-(transformation)f(from)h(the)h(old)f(to)g(the)h(new)f(co)r(ordinate)f
-(system)h(is)g(linear)g(but)227 4466 y(with)g(di\013eren)n(t)f(scales)f
-(on)h(eac)n(h)g(axis.)34 b(Th)n(us)23 b(the)h(sp)r(eci\014c)f(class)f
-(of)h(a)g(Region)g(cannot)f(b)r(e)i(used)f(as)g(a)f(guaran)n(tee)227
-4566 y(of)29 b(the)f(shap)r(e)g(in)h(an)n(y)e(particular)g(co)r
-(ordinate)g(system.)39 b(If)29 b(the)f(astSimplify)h(function)g(is)f
-(used)g(on)g(a)g(Region,)227 4665 y(it)e(will)f(endea)n(v)n(our)e(to)h
-(return)h(a)f(new)h(Region)f(of)h(a)g(sub-class)e(whic)n(h)i
-(accurately)f(describ)r(es)g(the)h(shap)r(e)g(in)g(the)227
-4765 y(curren)n(t)i(co)r(ordinate)f(system)i(of)f(the)h(Region)f(\(but)
-i(this)f(ma)n(y)e(not)i(alw)n(a)n(ys)e(b)r(e)i(p)r(ossible\).)227
-4891 y(It)e(is)f(p)r(ossible)g(to)g(negate)f(an)h(existing)g(Region)f
-(so)h(that)g(it)h(represen)n(ts)e(all)g(areas)g(of)h(the)h
-(encapsulated)e(F)-7 b(rame)227 4990 y(except)28 b(for)f(the)h(area)e
-(sp)r(eci\014ed)i(when)g(the)g(Region)f(w)n(as)f(created.)0
-5143 y Fd(Constructor)32 b(F)-8 b(unction:)227 5242 y
-Fj(None.)-2 5395 y Fd(Inheritance)n(:)227 5541 y Fj(The)28
-b(Region)f(class)f(inherits)i(from)f(the)h(F)-7 b(rame)27
-b(class.)-2 5693 y Fd(A)m(ttributes)n(:)p eop end
-%%Page: 511 521
-TeXDict begin 511 520 bop 3643 52 a FF(511)227 351 y
-Fj(In)20 b(addition)f(to)g(those)f(attributes)h(common)g(to)g(all)g(F)
--7 b(rames,)20 b(ev)n(ery)e(Region)g(also)g(has)h(the)h(follo)n(wing)e
-(attributes:)340 619 y Fi(\017)45 b Fj(Adaptiv)n(e:)37
-b(Should)28 b(the)g(area)e(adapt)h(to)h(c)n(hanges)e(in)i(the)g(co)r
-(ordinate)e(system?)340 754 y Fi(\017)45 b Fj(Negated:)37
-b(Has)27 b(the)h(original)e(region)g(b)r(een)i(negated?)340
-890 y Fi(\017)45 b Fj(Closed:)37 b(Should)27 b(the)h(b)r(oundary)f(b)r
-(e)h(considered)f(to)g(b)r(e)h(inside)g(the)g(region?)340
-1025 y Fi(\017)45 b Fj(MeshSize:)37 b(Num)n(b)r(er)28
-b(of)f(p)r(oin)n(ts)h(used)g(to)f(create)g(a)g(mesh)g(co)n(v)n(ering)f
-(the)i(Region)340 1160 y Fi(\017)45 b Fj(FillF)-7 b(actor:)37
-b(F)-7 b(raction)26 b(of)i(the)g(Region)f(whic)n(h)g(is)h(of)f(in)n
-(terest)340 1295 y Fi(\017)45 b Fj(Bounded:)37 b(Is)27
-b(the)h(Region)f(b)r(ounded?)227 1462 y(Ev)n(ery)21 b(Region)g(also)g
-(inherits)h(an)n(y)g(further)g(attributes)g(that)g(b)r(elong)g(to)g
-(the)h(encapsulated)e(F)-7 b(rame,)23 b(regardless)227
-1561 y(of)37 b(that)h(F)-7 b(rame's)36 b(class.)65 b(\(F)-7
-b(or)37 b(example,)i(the)f(Equino)n(x)e(attribute,)k(de\014ned)d(b)n(y)
-g(the)h(SkyF)-7 b(rame)36 b(class,)j(is)227 1661 y(inherited)28
-b(b)n(y)f(an)n(y)g(Region)g(whic)n(h)h(represen)n(ts)e(a)h(SkyF)-7
-b(rame.\))-2 1815 y Fd(F)f(unctions)n(:)227 1961 y Fj(In)25
-b(addition)f(to)g(those)g(functions)h(applicable)e(to)h(all)g(F)-7
-b(rames,)25 b(the)f(follo)n(wing)g(functions)g(ma)n(y)g(also)f(b)r(e)i
-(applied)227 2061 y(to)j(all)f(Regions:)340 2329 y Fi(\017)45
-b Fj(astGetRegionBounds:)36 b(Get)28 b(the)g(b)r(ounds)f(of)h(a)f
-(Region)340 2464 y Fi(\017)45 b Fj(astGetRegionF)-7 b(rame:)36
-b(Get)28 b(a)f(cop)n(y)g(of)g(the)h(F)-7 b(rame)27 b(represen)n(t)g(b)n
-(y)g(a)g(Region)340 2599 y Fi(\017)45 b Fj(astGetRegionP)n(oin)n(ts:)35
-b(Get)28 b(the)g(p)r(ositions)f(that)h(de\014ne)g(a)f(Region)340
-2734 y Fi(\017)45 b Fj(astGetUnc:)37 b(Obtain)28 b(uncertain)n(t)n(y)e
-(information)h(from)h(a)f(Region)340 2870 y Fi(\017)45
-b Fj(astMapRegion:)36 b(T)-7 b(ransform)26 b(a)h(Region)g(in)n(to)g(a)h
-(new)f(co)r(ordinate)g(system)340 3005 y Fi(\017)45 b
-Fj(astNegate:)36 b(T)-7 b(oggle)26 b(the)i(v)-5 b(alue)28
-b(of)f(the)h(Negated)g(attribute)340 3140 y Fi(\017)45
-b Fj(astOv)n(erlap:)35 b(Determines)28 b(the)g(nature)f(of)g(the)h(o)n
-(v)n(erlap)e(b)r(et)n(w)n(een)h(t)n(w)n(o)g(Regions)340
-3275 y Fi(\017)45 b Fj(astMask)p Fl(<)p Fj(X)p Fl(>)p
-Fj(:)35 b(Mask)27 b(a)g(region)g(of)g(a)g(data)h(grid)340
-3410 y Fi(\017)45 b Fj(astSetUnc:)37 b(Asso)r(ciate)27
-b(a)g(new)h(uncertain)n(t)n(y)f(with)h(a)f(Region)340
-3545 y Fi(\017)45 b Fj(astSho)n(wMesh:)36 b(Displa)n(y)27
-b(a)g(mesh)h(of)g(p)r(oin)n(ts)f(on)g(the)h(surface)f(of)h(a)f(Region)p
-0 3749 3780 12 v 0 3881 a Fz(SelectorMap)298 b Fe(A)38
-b(Mapping)g(that)g(lo)s(cates)g(p)s(ositions)889 3996
-y(within)c(one)j(of)f(a)g(set)g(of)g(alternate)e(Regions)3043
-3881 y Fz(SelectorMap)0 4189 y Fd(Description:)44 b Fj(A)26
-b(SelectorMap)e(is)h(a)g(Mapping)g(that)h(iden)n(ti\014es)f(whic)n(h)g
-(Region)g(con)n(tains)f(a)h(giv)n(en)g(input)h(p)r(osition.)227
-4316 y(A)40 b(SelectorMap)e(encapsulates)h(a)g(n)n(um)n(b)r(er)g(of)g
-(Regions)f(that)i(all)f(ha)n(v)n(e)f(the)i(same)f(n)n(um)n(b)r(er)g(of)
-g(axes)g(and)227 4416 y(represen)n(t)31 b(the)h(same)f(co)r(ordinate)g
-(F)-7 b(rame.)49 b(The)32 b(n)n(um)n(b)r(er)g(of)f(inputs)i(\(Nin)f
-(attribute\))h(of)e(the)i(SelectorMap)227 4515 y(equals)24
-b(the)h(n)n(um)n(b)r(er)f(of)g(axes)f(spanned)h(b)n(y)g(one)g(of)h(the)
-f(encapsulated)g(Region.)35 b(All)25 b(SelectorMaps)e(ha)n(v)n(e)g
-(only)227 4615 y(a)k(single)h(output.)37 b(SelectorMaps)26
-b(do)i(not)f(de\014ne)h(an)f(in)n(v)n(erse)f(transformation.)227
-4742 y(F)-7 b(or)36 b(eac)n(h)f(input)i(p)r(osition,)h(the)e(forw)n
-(ard)e(transformation)h(of)h(a)f(SelectorMap)g(searc)n(hes)f(through)h
-(the)i(en-)227 4841 y(capsulated)d(Regions)f(\(in)i(the)g(order)e
-(supplied)i(when)f(the)h(SelectorMap)e(w)n(as)h(created\))f(un)n(til)i
-(a)f(Region)g(is)227 4941 y(found)27 b(whic)n(h)g(con)n(tains)f(the)h
-(input)g(p)r(osition.)36 b(The)27 b(index)g(asso)r(ciated)e(with)i
-(this)g(Region)f(is)h(returned)f(as)g(the)227 5041 y(SelectorMap)h
-(output)h(v)-5 b(alue)27 b(\(the)h(index)g(v)-5 b(alue)27
-b(is)h(the)g(p)r(osition)f(of)h(the)f(Region)g(within)h(the)g(list)g
-(of)g(Regions)227 5140 y(supplied)c(when)g(the)g(SelectorMap)f(w)n(as)g
-(created,)g(starting)g(at)h(1)f(for)g(the)h(\014rst)g(Region\).)35
-b(If)24 b(an)f(input)i(p)r(osition)227 5240 y(is)j(not)f(con)n(tained)g
-(within)i(an)n(y)d(Region,)h(a)h(v)-5 b(alue)27 b(of)h(zero)e(is)i
-(returned)f(b)n(y)g(the)h(forw)n(ard)e(transformation.)227
-5367 y(If)35 b(a)e(comp)r(ound)h(Mapping)g(con)n(tains)f(a)h
-(SelectorMap)f(in)h(series)f(with)i(its)f(o)n(wn)g(in)n(v)n(erse,)g
-(the)g(com)n(bination)227 5467 y(of)29 b(the)f(t)n(w)n(o)g(adjacen)n(t)
-g(SelectorMaps)f(will)h(b)r(e)h(replaced)e(b)n(y)h(a)g(UnitMap)h(when)g
-(the)f(comp)r(ound)h(Mapping)f(is)227 5566 y(simpli\014ed)g(using)g
-(astSimplify)-7 b(.)227 5693 y(In)28 b(practice,)f(SelectorMaps)f(are)h
-(often)h(used)f(in)h(conjunction)g(with)g(Switc)n(hMaps.)p
-eop end
-%%Page: 512 522
-TeXDict begin 512 521 bop 0 52 a FF(512)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)0 351 y Fd(Constructor)j(F)-8
-b(unction:)227 451 y Fj(astSelectorMap)-2 600 y Fd(Inheritance)n(:)227
-746 y Fj(The)28 b(SelectorMap)f(class)f(inherits)i(from)f(the)h
-(Mapping)f(class.)-2 895 y Fd(A)m(ttributes)n(:)227 1041
-y Fj(The)e(SelectorMap)f(class)g(do)r(es)h(not)g(de\014ne)g(an)n(y)f
-(new)h(attributes)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f(applicable)
-g(to)h(all)227 1141 y(Mappings.)-2 1290 y Fd(F)-8 b(unctions)n(:)227
-1436 y Fj(The)27 b(SelectorMap)f(class)f(do)r(es)i(not)g(de\014ne)f(an)
-n(y)g(new)h(functions)g(b)r(ey)n(ond)g(those)f(whic)n(h)g(are)g
-(applicable)g(to)h(all)227 1535 y(Mappings.)p 0 1734
-3780 12 v 0 1865 a Fz(ShiftMap)306 b Fe(Add)39 b(a)f(constan)m(t)f(v)-7
-b(alue)39 b(to)f(eac)m(h)g(co)s(ordinate)304 b Fz(ShiftMap)0
-2053 y Fd(Description:)44 b Fj(A)28 b(ShiftMap)h(is)e(a)g(linear)g
-(Mapping)g(whic)n(h)h(shifts)g(eac)n(h)f(axis)g(b)n(y)g(a)g(sp)r
-(eci\014ed)h(constan)n(t)f(v)-5 b(alue.)0 2202 y Fd(Constructor)32
-b(F)-8 b(unction:)227 2302 y Fj(astShiftMap)-2 2451 y
-Fd(Inheritance)n(:)227 2597 y Fj(The)28 b(ShiftMap)g(class)f(inherits)g
-(from)h(the)g(Mapping)f(class.)-2 2746 y Fd(A)m(ttributes)n(:)227
-2892 y Fj(The)33 b(ShiftMap)g(class)f(do)r(es)g(not)g(de\014ne)h(an)n
-(y)f(new)h(attributes)f(b)r(ey)n(ond)g(those)g(whic)n(h)h(are)e
-(applicable)h(to)h(all)227 2992 y(Mappings.)-2 3141 y
-Fd(F)-8 b(unctions)n(:)227 3287 y Fj(The)35 b(ShiftMap)g(class)e(do)r
-(es)h(not)g(de\014ne)h(an)n(y)e(new)h(functions)h(b)r(ey)n(ond)f(those)
-g(whic)n(h)g(are)f(applicable)h(to)g(all)227 3387 y(Mappings.)p
-0 3585 V 0 3717 a Fz(SkyAxis)619 b Fe(Store)38 b(celestial)e(axis)j
-(information)615 b Fz(SkyAxis)0 3905 y Fd(Description:)44
-b Fj(The)c(SkyAxis)f(class)g(is)h(used)f(to)h(store)f(information)f
-(asso)r(ciated)h(with)h(a)f(particular)g(axis)f(of)i(a)227
-4004 y(SkyF)-7 b(rame.)43 b(It)30 b(is)g(used)g(in)n(ternally)f(b)n(y)g
-(the)h(AST)h(library)d(and)i(has)f(no)h(constructor)e(function.)44
-b(Y)-7 b(ou)30 b(should)227 4104 y(encoun)n(ter)d(it)h(only)f(within)i
-(textual)e(output)h(\(e.g.)37 b(from)27 b(astW)-7 b(rite\).)0
-4253 y Fd(Constructor)32 b(F)-8 b(unction:)227 4352 y
-Fj(None.)-2 4501 y Fd(Inheritance)n(:)227 4648 y Fj(The)28
-b(SkyAxis)f(class)g(inherits)g(from)h(the)g(Axis)f(class.)p
-0 4846 V 0 4978 a Fz(SkyF)-11 b(rame)306 b Fe(Celestial)37
-b(co)s(ordinate)f(system)i(description)305 b Fz(SkyF)-11
-b(rame)0 5170 y Fd(Description:)44 b Fj(A)35 b(SkyF)-7
-b(rame)34 b(is)g(a)g(sp)r(ecialised)g(form)g(of)h(F)-7
-b(rame)34 b(whic)n(h)g(describ)r(es)g(celestial)g(longitude/latitude)
-227 5270 y(co)r(ordinate)f(systems.)56 b(The)34 b(particular)f
-(celestial)g(co)r(ordinate)g(system)h(to)g(b)r(e)g(represen)n(ted)f(is)
-h(sp)r(eci\014ed)g(b)n(y)227 5369 y(setting)24 b(the)h(SkyF)-7
-b(rame's)23 b(System)h(attribute)g(\(curren)n(tly)-7
-b(,)24 b(the)g(default)h(is)e(ICRS\))i(quali\014ed,)g(as)e(necessary)-7
-b(,)23 b(b)n(y)227 5469 y(a)k(mean)h(Equino)n(x)e(v)-5
-b(alue)28 b(and/or)e(an)h(Ep)r(o)r(c)n(h.)227 5593 y(F)-7
-b(or)34 b(eac)n(h)g(of)g(the)h(supp)r(orted)g(celestial)f(co)r
-(ordinate)f(systems,)j(a)e(SkyF)-7 b(rame)34 b(can)g(apply)g(an)g
-(optional)g(shift)227 5693 y(of)c(origin)f(to)h(create)f(a)g(co)r
-(ordinate)g(system)h(represen)n(ting)e(o\013sets)i(within)g(the)h
-(celestial)e(co)r(ordinate)g(system)p eop end
-%%Page: 513 523
-TeXDict begin 513 522 bop 3643 52 a FF(513)227 351 y
-Fj(from)33 b(some)f(sp)r(eci\014ed)i(reference)e(p)r(oin)n(t.)53
-b(This)33 b(o\013set)g(co)r(ordinate)f(system)g(can)h(also)f(b)r(e)h
-(rotated)f(to)h(de\014ne)227 451 y(new)28 b(longitude)f(and)h(latitude)
-g(axes.)36 b(See)27 b(attributes)h(SkyRef,)g(SkyRefIs,)f(SkyRefP)h(and)
-f(AlignO\013set.)227 573 y(All)34 b(the)f(co)r(ordinate)f(v)-5
-b(alues)33 b(used)g(b)n(y)g(a)g(SkyF)-7 b(rame)32 b(are)h(in)g
-(radians.)52 b(These)33 b(ma)n(y)g(b)r(e)g(formatted)g(in)g(more)227
-673 y(con)n(v)n(en)n(tional)26 b(w)n(a)n(ys)g(for)h(displa)n(y)g(b)n(y)
-g(using)g(astF)-7 b(ormat.)0 818 y Fd(Constructor)32
-b(F)-8 b(unction:)227 918 y Fj(astSkyF)h(rame)-2 1064
-y Fd(Inheritance)n(:)227 1210 y Fj(The)28 b(SkyF)-7 b(rame)27
-b(class)f(inherits)i(from)f(the)h(F)-7 b(rame)27 b(class.)-2
-1355 y Fd(A)m(ttributes)n(:)227 1501 y Fj(In)40 b(addition)f(to)h
-(those)f(attributes)h(common)f(to)g(all)g(F)-7 b(rames,)42
-b(ev)n(ery)c(SkyF)-7 b(rame)39 b(also)g(has)g(the)h(follo)n(wing)227
-1601 y(attributes:)340 1856 y Fi(\017)45 b Fj(AlignO\013set:)37
-b(Align)28 b(SkyF)-7 b(rames)26 b(using)i(the)g(o\013set)f(co)r
-(ordinate)g(system?)340 1985 y Fi(\017)45 b Fj(AsTime\(axis\):)37
-b(F)-7 b(ormat)27 b(celestial)g(co)r(ordinates)f(as)h(times?)340
-2113 y Fi(\017)45 b Fj(Equino)n(x:)36 b(Ep)r(o)r(c)n(h)27
-b(of)h(the)g(mean)f(equino)n(x)340 2242 y Fi(\017)45
-b Fj(LatAxis:)37 b(Index)27 b(of)h(the)g(latitude)g(axis)340
-2371 y Fi(\017)45 b Fj(LonAxis:)37 b(Index)27 b(of)h(the)g(longitude)f
-(axis)340 2500 y Fi(\017)45 b Fj(NegLon:)36 b(Displa)n(y)28
-b(longitude)f(v)-5 b(alues)27 b(in)h(the)g(range)e([-pi,pi]?)340
-2629 y Fi(\017)45 b Fj(Pro)5 b(jection:)36 b(Sky)27 b(pro)5
-b(jection)27 b(description.)340 2757 y Fi(\017)45 b Fj(SkyRef:)37
-b(P)n(osition)27 b(de\014ning)g(lo)r(cation)g(of)h(the)g(o\013set)f(co)
-r(ordinate)g(system)340 2886 y Fi(\017)45 b Fj(SkyRefIs:)37
-b(Selects)28 b(the)g(nature)f(of)g(the)h(o\013set)g(co)r(ordinate)e
-(system)340 3015 y Fi(\017)45 b Fj(SkyRefP:)28 b(P)n(osition)e
-(de\014ning)h(orien)n(tation)g(of)g(the)h(o\013set)g(co)r(ordinate)e
-(system)-2 3173 y Fd(F)-8 b(unctions)n(:)227 3319 y Fj(The)33
-b(SkyF)-7 b(rame)32 b(class)f(do)r(es)i(not)f(de\014ne)h(an)n(y)f(new)h
-(functions)g(b)r(ey)n(ond)f(those)g(whic)n(h)h(are)e(applicable)h(to)h
-(all)227 3419 y(F)-7 b(rames.)p 0 3610 3780 12 v 0 3742
-a Fz(SlaMap)328 b Fe(Sequence)39 b(of)g(celestial)e(co)s(ordinate)f
-(con)m(v)m(ersions)326 b Fz(SlaMap)0 3922 y Fd(Description:)44
-b Fj(An)32 b(SlaMap)e(is)h(a)g(sp)r(ecialised)f(form)h(of)g(Mapping)f
-(whic)n(h)h(can)g(b)r(e)g(used)g(to)g(represen)n(t)f(a)g(sequence)227
-4022 y(of)e(con)n(v)n(ersions)d(b)r(et)n(w)n(een)i(standard)g
-(celestial)g(\(longitude,)h(latitude\))g(co)r(ordinate)f(systems.)227
-4145 y(When)d(an)e(SlaMap)h(is)g(\014rst)f(created,)h(it)h(simply)f(p)r
-(erforms)f(a)g(unit)i(\(n)n(ull\))f(Mapping)g(on)f(a)h(pair)f(of)h(co)r
-(ordinates.)227 4244 y(Using)k(the)g(astSlaAdd)g(function,)g(a)g
-(series)f(of)g(co)r(ordinate)g(con)n(v)n(ersion)e(steps)j(ma)n(y)f
-(then)i(b)r(e)f(added,)g(selected)227 4344 y(from)h(those)g(pro)n
-(vided)f(b)n(y)g(the)i(SLALIB)f(P)n(ositional)e(Astronom)n(y)h(Library)
-f(\(Starlink)i(User)g(Note)g(SUN/67\).)227 4443 y(This)21
-b(allo)n(ws)f(m)n(ulti-step)i(con)n(v)n(ersions)c(b)r(et)n(w)n(een)j(a)
-g(v)-5 b(ariet)n(y)20 b(of)i(celestial)e(co)r(ordinate)g(systems)h(to)g
-(b)r(e)h(assem)n(bled)227 4543 y(out)28 b(of)f(the)h(building)g(blo)r
-(c)n(ks)f(pro)n(vided)g(b)n(y)g(SLALIB.)227 4666 y(F)-7
-b(or)27 b(details)f(of)h(the)g(individual)g(co)r(ordinate)f(con)n(v)n
-(ersions)f(a)n(v)-5 b(ailable,)25 b(see)i(the)g(description)g(of)f(the)
-i(astSlaAdd)227 4765 y(function.)0 4911 y Fd(Constructor)k(F)-8
-b(unction:)227 5010 y Fj(astSlaMap)27 b(\(also)g(see)g(astSlaAdd\))-2
-5156 y Fd(Inheritance)n(:)227 5302 y Fj(The)h(SlaMap)f(class)g
-(inherits)g(from)g(the)h(Mapping)g(class.)-2 5447 y Fd(A)m(ttributes)n
-(:)227 5593 y Fj(The)37 b(SlaMap)f(class)g(do)r(es)g(not)h(de\014ne)g
-(an)n(y)f(new)h(attributes)f(b)r(ey)n(ond)h(those)f(whic)n(h)h(are)e
-(applicable)h(to)h(all)227 5693 y(Mappings.)p eop end
-%%Page: 514 524
-TeXDict begin 514 523 bop 0 52 a FF(514)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)-2 351 y Fd(F)-8 b(unctions)n(:)227
-497 y Fj(In)21 b(addition)f(to)g(those)g(functions)g(applicable)g(to)g
-(all)g(Mappings,)h(the)g(follo)n(wing)e(function)h(ma)n(y)g(also)f(b)r
-(e)i(applied)227 597 y(to)28 b(all)f(SlaMaps:)340 853
-y Fi(\017)45 b Fj(astSlaAdd:)37 b(Add)28 b(a)f(celestial)g(co)r
-(ordinate)g(con)n(v)n(ersion)e(to)j(an)f(SlaMap)p 0 1045
-3780 12 v 0 1177 a Fz(Sp)t(ecFluxF)-11 b(rame)1228 1183
-y Fe(Comp)s(ound)37 b(sp)s(ectrum/\015ux)1730 1303 y(F)-10
-b(rame)2871 1177 y Fz(Sp)t(ecFluxF)f(rame)0 1462 y Fd(Description:)44
-b Fj(A)35 b(Sp)r(ecFluxF)-7 b(rame)35 b(com)n(bines)f(a)g(Sp)r(ecF)-7
-b(rame)34 b(and)g(a)g(FluxF)-7 b(rame)35 b(in)n(to)f(a)g(single)g
-(2-dimensional)227 1562 y(comp)r(ound)24 b(F)-7 b(rame.)34
-b(Suc)n(h)24 b(a)f(F)-7 b(rame)22 b(can)h(for)g(instance)g(b)r(e)h
-(used)f(to)g(describ)r(e)g(a)g(Plot)g(of)g(a)g(sp)r(ectrum)g(in)h(whic)
-n(h)227 1661 y(the)k(\014rst)g(axis)e(represen)n(ts)h(sp)r(ectral)g(p)r
-(osition)g(and)g(the)h(second)f(axis)g(represen)n(ts)f(\015ux.)0
-1807 y Fd(Constructor)32 b(F)-8 b(unction:)227 1907 y
-Fj(astSp)r(ecFluxF)h(rame)-2 2053 y Fd(Inheritance)n(:)227
-2199 y Fj(The)28 b(Sp)r(ecFluxF)-7 b(rame)28 b(class)e(inherits)i(from)
-f(the)h(CmpF)-7 b(rame)27 b(class.)-2 2345 y Fd(A)m(ttributes)n(:)227
-2491 y Fj(The)e(Sp)r(ecFluxF)-7 b(rame)25 b(class)f(do)r(es)h(not)g
-(de\014ne)g(an)n(y)f(new)h(attributes)g(b)r(ey)n(ond)g(those)f(whic)n
-(h)h(are)f(applicable)h(to)227 2591 y(all)i(CmpF)-7 b(rames.)36
-b(Ho)n(w)n(ev)n(er,)24 b(the)j(attributes)g(of)f(the)h(comp)r(onen)n(t)
-g(F)-7 b(rames)25 b(can)i(b)r(e)f(accessed)g(as)g(if)h(they)g(w)n(ere)
-227 2690 y(attributes)d(of)f(the)h(Sp)r(ecFluxF)-7 b(rame.)36
-b(F)-7 b(or)23 b(instance,)h(the)g(Sp)r(ecFluxF)-7 b(rame)23
-b(will)h(recognise)e(the)i Ft(")p Fj(StdOfRest)p Ft(")227
-2790 y Fj(attribute)k(and)g(forw)n(ard)e(access)g(requests)h(to)g(the)h
-(comp)r(onen)n(t)g(Sp)r(ecF)-7 b(rame.)36 b(An)29 b(axis)d(index)i(can)
-f(optionally)227 2890 y(b)r(e)32 b(app)r(ended)f(to)g(the)h(end)f(of)g
-(an)n(y)f(attribute)i(name,)f(in)h(whic)n(h)f(case)f(the)i(request)e
-(to)h(access)f(the)h(attribute)227 2989 y(will)d(b)r(e)g(forw)n(arded)e
-(to)h(the)h(primary)f(F)-7 b(rame)27 b(de\014ning)h(the)g(sp)r
-(eci\014ed)f(axis.)-2 3135 y Fd(F)-8 b(unctions)n(:)227
-3281 y Fj(The)27 b(Sp)r(ecFluxF)-7 b(rame)27 b(class)f(do)r(es)g(not)h
-(de\014ne)g(an)n(y)f(new)h(functions)g(b)r(ey)n(ond)g(those)f(whic)n(h)
-h(are)e(applicable)i(to)227 3381 y(all)h(CmpF)-7 b(rames.)p
-0 3573 V 0 3704 a Fz(Sp)t(ecF)c(rame)899 3705 y Fe(Sp)s(ectral)37
-b(co)s(ordinate)g(system)h(description)3138 3704 y Fz(Sp)t(ecF)-11
-b(rame)0 3887 y Fd(Description:)44 b Fj(A)38 b(Sp)r(ecF)-7
-b(rame)38 b(is)g(a)f(sp)r(ecialised)g(form)h(of)f(one-dimensional)g(F)
--7 b(rame)37 b(whic)n(h)h(represen)n(ts)e(v)-5 b(arious)227
-3987 y(co)r(ordinate)22 b(systems)h(used)h(to)f(describ)r(e)g(p)r
-(ositions)g(within)h(an)f(electro-magnetic)f(sp)r(ectrum.)35
-b(The)24 b(particular)227 4086 y(co)r(ordinate)h(system)g(to)g(b)r(e)h
-(used)f(is)h(sp)r(eci\014ed)f(b)n(y)h(setting)f(the)h(Sp)r(ecF)-7
-b(rame's)25 b(System)g(attribute)h(\(the)g(default)227
-4186 y(is)i(w)n(a)n(v)n(elength\))e(quali\014ed,)h(as)g(necessary)-7
-b(,)26 b(b)n(y)i(other)f(attributes)g(suc)n(h)g(as)g(the)h(rest)f
-(frequency)-7 b(,)28 b(the)g(standard)227 4285 y(of)c(rest,)g(the)g(ep)
-r(o)r(c)n(h)f(of)h(observ)-5 b(ation,)23 b(units,)i(etc)f(\(see)f(the)h
-(description)f(of)h(the)g(System)g(attribute)f(for)g(details\).)227
-4408 y(By)h(setting)f(a)h(v)-5 b(alue)23 b(for)h(thr)f(Sp)r(ecOrigin)h
-(attribute,)g(a)g(Sp)r(ecF)-7 b(rame)23 b(can)h(b)r(e)g(made)f(to)h
-(represen)n(t)e(o\013sets)i(from)227 4508 y(a)j(giv)n(en)g(sp)r(ectral)
-g(p)r(osition,)h(rather)e(than)i(absolute)f(sp)r(ectral)g(v)-5
-b(alues.)0 4654 y Fd(Constructor)32 b(F)-8 b(unction:)227
-4753 y Fj(astSp)r(ecF)h(rame)-2 4899 y Fd(Inheritance)n(:)227
-5046 y Fj(The)28 b(Sp)r(ecF)-7 b(rame)27 b(class)g(inherits)g(from)h
-(the)g(F)-7 b(rame)27 b(class.)-2 5192 y Fd(A)m(ttributes)n(:)227
-5338 y Fj(In)38 b(addition)f(to)g(those)f(attributes)h(common)g(to)g
-(all)g(F)-7 b(rames,)39 b(ev)n(ery)d(Sp)r(ecF)-7 b(rame)37
-b(also)f(has)g(the)i(follo)n(wing)227 5437 y(attributes:)340
-5693 y Fi(\017)45 b Fj(AlignSp)r(ecO\013set:)38 b(Align)27
-b(Sp)r(ecF)-7 b(rames)27 b(using)h(the)g(o\013set)f(co)r(ordinate)g
-(system?)p eop end
-%%Page: 515 525
-TeXDict begin 515 524 bop 3643 52 a FF(515)340 351 y
-Fi(\017)45 b Fj(AlignStdOfRest:)38 b(Standard)27 b(of)g(rest)g(in)h
-(whic)n(h)g(to)f(align)g(Sp)r(ecF)-7 b(rames)340 479
-y Fi(\017)45 b Fj(RefDec:)38 b(Declination)27 b(of)h(the)g(source)e
-(\(FK5)i(J2000\))340 608 y Fi(\017)45 b Fj(RefRA:)29
-b(Righ)n(t)e(ascension)g(of)g(the)h(source)e(\(FK5)i(J2000\))340
-736 y Fi(\017)45 b Fj(RestF)-7 b(req:)37 b(Rest)28 b(frequency)340
-864 y Fi(\017)45 b Fj(SourceSys:)36 b(Source)27 b(v)n(elo)r(cit)n(y)f
-(sp)r(ectral)h(system)340 992 y Fi(\017)45 b Fj(SourceV)-7
-b(el:)37 b(Source)26 b(v)n(elo)r(cit)n(y)340 1120 y Fi(\017)45
-b Fj(SourceVRF:)28 b(Source)e(v)n(elo)r(cit)n(y)h(rest)g(frame)340
-1248 y Fi(\017)45 b Fj(Sp)r(ecOrigin:)36 b(The)28 b(zero)f(p)r(oin)n(t)
-g(for)g(Sp)r(ecF)-7 b(rame)28 b(axis)f(v)-5 b(alues)340
-1376 y Fi(\017)45 b Fj(StdOfRest:)38 b(Standard)27 b(of)g(rest)227
-1533 y(Sev)n(eral)35 b(of)h(the)g(F)-7 b(rame)35 b(attributes)h
-(inherited)g(b)n(y)g(the)g(Sp)r(ecF)-7 b(rame)36 b(class)f(refer)g(to)h
-(a)f(sp)r(eci\014c)h(axis)f(of)h(the)227 1633 y(F)-7
-b(rame)25 b(\(for)g(instance)f(Unit\(axis\),)j(Lab)r(el\(axis\),)e
-(etc\).)36 b(Since)26 b(a)e(Sp)r(ecF)-7 b(rame)25 b(is)g(strictly)g
-(one-dimensional,)f(it)227 1733 y(allo)n(ws)i(these)h(attributes)h(to)f
-(b)r(e)h(sp)r(eci\014ed)f(without)h(an)f(axis)f(index.)37
-b(So)27 b(for)g(instance,)g Ft(")p Fj(Unit)p Ft(")g Fj(is)g(allo)n(w)n
-(ed)f(in)227 1832 y(place)h(of)h Ft(")p Fj(Unit\(1\))p
-Ft(")p Fj(.)-2 1977 y Fd(F)-8 b(unctions)n(:)227 2123
-y Fj(In)25 b(addition)f(to)g(those)g(functions)h(applicable)e(to)h(all)
-g(F)-7 b(rames,)25 b(the)f(follo)n(wing)g(functions)g(ma)n(y)g(also)f
-(b)r(e)i(applied)227 2223 y(to)j(all)f(Sp)r(ecF)-7 b(rames:)340
-2477 y Fi(\017)45 b Fj(astSetRefP)n(os:)36 b(Set)28 b(reference)f(p)r
-(osition)g(in)h(an)n(y)f(celestial)g(system)340 2605
-y Fi(\017)45 b Fj(astGetRefP)n(os:)36 b(Get)28 b(reference)f(p)r
-(osition)g(in)h(an)n(y)f(celestial)g(system)p 0 2795
-3780 12 v 0 2925 a Fz(Sp)t(ecMap)775 2926 y Fe(Sequence)39
-b(of)f(sp)s(ectral)g(co)s(ordinate)f(con)m(v)m(ersions)3238
-2925 y Fz(Sp)t(ecMap)0 3106 y Fd(Description:)44 b Fj(A)31
-b(Sp)r(ecMap)f(is)g(a)g(sp)r(ecialised)g(form)g(of)g(Mapping)g(whic)n
-(h)g(can)g(b)r(e)g(used)g(to)g(represen)n(t)f(a)h(sequence)227
-3205 y(of)e(con)n(v)n(ersions)d(b)r(et)n(w)n(een)i(standard)g(sp)r
-(ectral)g(co)r(ordinate)f(systems.)227 3328 y(When)c(an)f(Sp)r(ecMap)h
-(is)f(\014rst)g(created,)h(it)g(simply)f(p)r(erforms)g(a)g(unit)h(\(n)n
-(ull\))g(Mapping.)34 b(Using)21 b(the)h(astSp)r(ecAdd)227
-3427 y(function,)33 b(a)d(series)g(of)h(co)r(ordinate)f(con)n(v)n
-(ersion)e(steps)j(ma)n(y)f(then)i(b)r(e)f(added.)47 b(This)31
-b(allo)n(ws)e(m)n(ulti-step)i(con-)227 3527 y(v)n(ersions)c(b)r(et)n(w)
-n(een)h(a)g(v)-5 b(ariet)n(y)28 b(of)g(sp)r(ectral)g(co)r(ordinate)g
-(systems)g(to)g(b)r(e)h(assem)n(bled)e(out)i(of)f(a)g(set)h(of)f
-(building)227 3626 y(blo)r(c)n(ks.)227 3749 y(Con)n(v)n(ersions)f(are)g
-(a)n(v)-5 b(ailable)28 b(to)h(transform)e(b)r(et)n(w)n(een)i(standards)
-f(of)h(rest.)40 b(Suc)n(h)29 b(con)n(v)n(ersions)d(need)j(to)f(kno)n(w)
-227 3848 y(the)23 b(source)e(p)r(osition)i(as)e(an)i(RA)f(and)h(DEC.)f
-(This)h(information)e(can)i(b)r(e)f(supplied)h(in)g(the)g(form)f(of)g
-(parameters)227 3948 y(for)27 b(the)g(relev)-5 b(an)n(t)26
-b(con)n(v)n(ersions,)e(in)j(whic)n(h)g(case)f(the)h(Sp)r(ecMap)g(is)f
-(1-dimensional,)g(simply)h(transforming)e(the)227 4047
-y(sp)r(ectral)c(axis)g(v)-5 b(alues.)35 b(This)21 b(means)g(that)h(the)
-g(same)f(source)g(p)r(osition)g(will)h(alw)n(a)n(ys)e(b)r(e)i(used)f(b)
-n(y)g(the)h(Sp)r(ecMap.)227 4147 y(Ho)n(w)n(ev)n(er,)32
-b(this)h(ma)n(y)f(not)g(b)r(e)h(appropriate)e(for)h(an)h(accurate)e
-(description)h(of)g(a)h(3-D)f(sp)r(ectral)g(cub)r(e,)i(where)227
-4247 y(c)n(hanges)c(of)h(spatial)g(p)r(osition)g(can)g(pro)r(duce)f
-(signi\014can)n(t)h(c)n(hanges)f(in)h(the)h(Doppler)f(shift)g(in)n(tro)
-r(duced)g(when)227 4346 y(transforming)19 b(b)r(et)n(w)n(een)h
-(standards)e(of)i(rest.)34 b(F)-7 b(or)20 b(this)g(situation,)h(a)f
-(3-dimensional)e(Sp)r(ecMap)i(can)g(b)r(e)g(created)227
-4446 y(in)30 b(whic)n(h)g(axes)e(2)h(and)h(3)f(corresp)r(ond)f(to)h
-(the)h(source)e(RA)i(and)g(DEC)f(The)h(Sp)r(ecMap)g(simply)f(copies)g
-(v)-5 b(alues)227 4546 y(for)24 b(axes)f(2)h(and)g(3)f(from)h(input)h
-(to)f(output\),)i(but)e(mo)r(di\014es)h(axis)e(1)h(v)-5
-b(alues)23 b(\(the)i(sp)r(ectral)f(axis\))f(appropriately)-7
-b(.)227 4668 y(F)g(or)22 b(details)g(of)h(the)f(individual)h(co)r
-(ordinate)e(con)n(v)n(ersions)f(a)n(v)-5 b(ailable,)22
-b(see)g(the)h(description)f(of)g(the)h(astSp)r(ecAdd)227
-4767 y(function.)0 4912 y Fd(Constructor)32 b(F)-8 b(unction:)227
-5012 y Fj(astSp)r(ecMap)28 b(\(also)e(see)i(astSp)r(ecAdd\))-2
-5156 y Fd(Inheritance)n(:)227 5303 y Fj(The)g(Sp)r(ecMap)g(class)e
-(inherits)i(from)f(the)h(Mapping)f(class.)-2 5447 y Fd(A)m(ttributes)n
-(:)227 5593 y Fj(The)33 b(Sp)r(ecMap)g(class)f(do)r(es)h(not)f
-(de\014ne)i(an)n(y)e(new)g(attributes)h(b)r(ey)n(ond)g(those)f(whic)n
-(h)h(are)f(applicable)g(to)h(all)227 5693 y(Mappings.)p
-eop end
-%%Page: 516 526
-TeXDict begin 516 525 bop 0 52 a FF(516)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)-2 351 y Fd(F)-8 b(unctions)n(:)227
-497 y Fj(In)21 b(addition)f(to)g(those)g(functions)g(applicable)g(to)g
-(all)g(Mappings,)h(the)g(follo)n(wing)e(function)h(ma)n(y)g(also)f(b)r
-(e)i(applied)227 597 y(to)28 b(all)f(Sp)r(ecMaps:)340
-857 y Fi(\017)45 b Fj(astSp)r(ecAdd:)38 b(Add)28 b(a)f(sp)r(ectral)g
-(co)r(ordinate)f(con)n(v)n(ersion)g(to)h(an)h(Sp)r(ecMap)p
-0 1056 3780 12 v 0 1187 a Fz(SphMap)189 b Fe(Map)39 b(3-d)g(Cartesian)d
-(to)i(2-d)h(spherical)e(co)s(ordinates)189 b Fz(SphMap)0
-1375 y Fd(Description:)44 b Fj(A)33 b(SphMap)g(is)f(a)g(Mapping)g(whic)
-n(h)g(transforms)f(p)r(oin)n(ts)h(from)g(a)g(3-dimensional)f(Cartesian)
-g(co)r(or-)227 1475 y(dinate)f(system)g(in)n(to)g(a)f(2-dimensional)g
-(spherical)f(co)r(ordinate)h(system)h(\(longitude)g(and)g(latitude)g
-(on)f(a)h(unit)227 1575 y(sphere)e(cen)n(tred)f(at)h(the)g(origin\).)37
-b(It)28 b(w)n(orks)f(b)n(y)g(regarding)f(the)i(input)h(co)r(ordinates)d
-(as)i(p)r(osition)f(v)n(ectors)g(and)227 1674 y(\014nding)38
-b(their)f(in)n(tersection)g(with)h(the)g(sphere)f(surface.)66
-b(The)38 b(in)n(v)n(erse)e(transformation)g(alw)n(a)n(ys)f(pro)r(duces)
-227 1774 y(p)r(oin)n(ts)28 b(whic)n(h)f(are)g(a)g(unit)h(distance)g
-(from)f(the)h(origin)e(\(i.e.)38 b(unit)28 b(v)n(ectors\).)0
-1923 y Fd(Constructor)k(F)-8 b(unction:)227 2022 y Fj(astSphMap)-2
-2171 y Fd(Inheritance)n(:)227 2318 y Fj(The)28 b(SphMap)g(class)e
-(inherits)i(from)f(the)h(Mapping)f(class.)-2 2467 y Fd(A)m(ttributes)n
-(:)227 2613 y Fj(In)38 b(addition)f(to)g(those)g(attributes)g(common)f
-(to)h(all)g(Mappings,)i(ev)n(ery)d(SphMap)h(also)f(has)h(the)h(follo)n
-(wing)227 2712 y(attributes:)340 2973 y Fi(\017)45 b
-Fj(UnitRadius:)38 b(SphMap)27 b(input)i(v)n(ectors)d(lie)i(on)f(a)g
-(unit)h(sphere?)340 3105 y Fi(\017)45 b Fj(P)n(olarLong:)34
-b(The)28 b(longitude)f(v)-5 b(alue)28 b(to)f(assign)f(to)i(either)f(p)r
-(ole)-2 3266 y Fd(F)-8 b(unctions)n(:)227 3413 y Fj(The)37
-b(SphMap)g(class)e(do)r(es)h(not)h(de\014ne)g(an)n(y)f(new)g(functions)
-h(b)r(ey)n(ond)f(those)g(whic)n(h)h(are)e(applicable)h(to)h(all)227
-3512 y(Mappings.)p 0 3711 V 0 3841 a Fz(Stc)692 3842
-y Fe(Represen)m(ts)i(an)f(instance)g(of)h(the)f(IV)m(O)m(A)h(STC)f
-(class)3593 3841 y Fz(Stc)0 4030 y Fd(Description:)44
-b Fj(The)26 b(Stc)f(class)f(is)h(an)g(implemen)n(tation)g(of)g(the)h
-(IV)n(O)n(A)f(STC)g(class)f(whic)n(h)h(forms)g(part)f(of)i(the)f(IV)n
-(O)n(A)227 4130 y(Space-Time)i(Co)r(ordinate)g(Metadata)g(system.)36
-b(See:)227 4254 y(h)n(ttp://hea-www.harv)-5 b(ard.edu/)p
-Fi(\030)p Fj(arots/n)n(v)n(ometa/)o(STC.h)n(tml)227 4378
-y(The)36 b(Stc)g(class)e(do)r(es)i(not)f(ha)n(v)n(e)g(a)g(constructor)f
-(function)i(of)f(its)h(o)n(wn,)h(as)e(it)h(is)g(simply)f(a)g(con)n
-(tainer)g(class)227 4478 y(for)25 b(a)f(family)i(of)f(sp)r(ecialised)f
-(sub-classes)g(including)h(StcCatalogEn)n(tryLo)r(cation,)d
-(StcResourcePro\014le,)i(Stc-)227 4578 y(Searc)n(hLo)r(cation)i(and)h
-(StcObsDataLo)r(cation.)0 4727 y Fd(Constructor)32 b(F)-8
-b(unction:)227 4826 y Fj(astStc)-2 4975 y Fd(Inheritance)n(:)227
-5121 y Fj(The)28 b(Stc)g(class)f(inherits)g(from)g(the)h(Region)f
-(class.)-2 5270 y Fd(A)m(ttributes)n(:)227 5417 y Fj(In)g(addition)g
-(to)f(those)h(attributes)f(common)h(to)f(all)h(Regions,)f(ev)n(ery)f
-(Stc)i(also)f(has)g(the)h(follo)n(wing)f(attributes:)340
-5677 y Fi(\017)45 b Fj(RegionClass:)35 b(The)28 b(class)f(name)g(of)h
-(the)g(encapsulated)f(Region.)p eop end
-%%Page: 517 527
-TeXDict begin 517 526 bop 3643 52 a FF(517)-2 351 y Fd(F)-8
-b(unctions)n(:)227 497 y Fj(In)23 b(addition)g(to)f(those)h(functions)g
-(applicable)f(to)h(all)f(Regions,)h(the)g(follo)n(wing)f(functions)h
-(ma)n(y)f(also)f(b)r(e)j(applied)227 597 y(to)k(all)f(Stc's:)340
-854 y Fi(\017)45 b Fj(astGetStcRegion:)37 b(Get)28 b(a)f(p)r(oin)n(ter)
-g(to)h(the)f(encapsulated)g(Region)340 984 y Fi(\017)45
-b Fj(astGetStcCo)r(ord:)36 b(Get)28 b(information)f(ab)r(out)h(an)f
-(AstroCo)r(ords)f(elemen)n(t)340 1115 y Fi(\017)45 b
-Fj(astGetStcNCo)r(ord:)37 b(Returns)27 b(the)h(n)n(um)n(b)r(er)f(of)h
-(AstroCo)r(ords)e(elemen)n(ts)h(in)h(an)f(Stc)p 0 1309
-3780 12 v 0 1441 a Fz(StcCatalogEn)l(tryLo)t(cation)1637
-1457 y Fe(Corresp)s(ond)1737 1572 y(to)38 b(the)1739
-1671 y(IV)m(O)m(A)1659 1771 y(STCCat-)1694 1871 y(alogEn-)1671
-1984 y(tryLo)s(ca-)1789 2095 y(tion)1772 2195 y(class)2295
-1441 y Fz(StcCatalogEn)l(tryLo)t(cation)0 2355 y Fd(Description:)44
-b Fj(The)29 b(StcCatalogEn)n(tryLo)r(cation)d(class)i(is)h(a)f
-(sub-class)g(of)h(Stc)g(used)g(to)g(describ)r(e)f(the)i(co)n(v)n(erage)
-c(of)227 2455 y(the)i(datasets)f(con)n(tained)g(in)h(some)f(V)n(O)g
-(resource.)227 2578 y(See)h(h)n(ttp://hea-www.harv)-5
-b(ard.edu/)p Fi(\030)p Fj(arots/n)n(v)n(o)o(meta/STC.h)n(tml)0
-2725 y Fd(Constructor)32 b(F)-8 b(unction:)227 2825 y
-Fj(astStcCatalogEn)n(tryLo)r(cation)-2 2971 y Fd(Inheritance)n(:)227
-3118 y Fj(The)28 b(StcCatalogEn)n(tryLo)r(cation)c(class)j(inherits)g
-(from)h(the)g(Stc)g(class.)-2 3264 y Fd(A)m(ttributes)n(:)227
-3411 y Fj(The)36 b(StcCatalogEn)n(tryLo)r(cation)c(class)j(do)r(es)h
-(not)f(de\014ne)h(an)n(y)f(new)h(attributes)f(b)r(ey)n(ond)h(those)f
-(whic)n(h)h(are)227 3510 y(applicable)27 b(to)h(all)f(Stcs.)-2
-3657 y Fd(F)-8 b(unctions)n(:)227 3803 y Fj(The)38 b(StcCatalogEn)n
-(tryLo)r(cation)d(class)i(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)h
-(functions)g(b)r(ey)n(ond)f(those)h(whic)n(h)g(are)227
-3903 y(applicable)27 b(to)h(all)f(Stcs.)p 0 4097 V 0
-4229 a Fz(StcObsDataLo)t(cation)214 b Fe(Corresp)s(ond)37
-b(to)h(the)1739 4342 y(IV)m(O)m(A)1439 4442 y(ObsDataLo)s(cation)1772
-4541 y(class)2569 4229 y Fz(StcObsDataLo)t(cation)0 4702
-y Fd(Description:)44 b Fj(The)27 b(StcObsDataLo)r(cation)e(class)g(is)i
-(a)f(sub-class)f(of)h(Stc)h(used)f(to)g(describ)r(e)g(the)h(co)r
-(ordinate)e(space)227 4801 y(o)r(ccupied)j(b)n(y)f(a)g(particular)g
-(observ)-5 b(ational)25 b(dataset.)227 4925 y(See)j(h)n
-(ttp://hea-www.harv)-5 b(ard.edu/)p Fi(\030)p Fj(arots/n)n(v)n(o)o
-(meta/STC.h)n(tml)227 5048 y(An)29 b(STC)f(ObsDataLo)r(cation)f(elemen)
-n(t)h(sp)r(eci\014es)g(the)h(exten)n(t)f(of)g(the)g(observ)-5
-b(ation)27 b(within)i(a)f(sp)r(eci\014ed)g(co)r(or-)227
-5148 y(dinate)g(system,)f(and)h(also)e(sp)r(eci\014es)i(the)g(observ)-5
-b(atory)25 b(lo)r(cation)i(within)h(a)g(second)e(co)r(ordinate)h
-(system.)227 5271 y(The)i(AST)g(StcObsDataLo)r(cation)f(class)g
-(inherits)g(from)h(Stc,)g(and)g(therefore)f(an)h(StcObsDataLo)r(cation)
-e(can)227 5370 y(b)r(e)f(used)g(directly)f(as)f(an)i(Stc.)36
-b(When)26 b(used)g(in)f(this)h(w)n(a)n(y)-7 b(,)25 b(the)h
-(StcObsDataLo)r(cation)e(describ)r(es)g(the)i(lo)r(cation)227
-5470 y(of)i(the)g(observ)-5 b(ation)26 b(\(not)i(the)g(observ)-5
-b(atory\).)227 5593 y(Ev)n(en)n(tually)e(,)27 b(this)g(class)g(will)h
-(ha)n(v)n(e)e(a)h(metho)r(d)h(for)f(returning)g(an)g(Stc)h(describing)e
-(the)i(observ)-5 b(atory)25 b(lo)r(cation.)227 5693 y(Ho)n(w)n(ev)n
-(er,)32 b(AST)i(curren)n(tly)e(do)r(es)g(not)h(include)g(an)n(y)f
-(classes)g(of)g(F)-7 b(rame)33 b(for)f(describing)g(terrestrial)f(or)h
-(solar)p eop end
-%%Page: 518 528
-TeXDict begin 518 527 bop 0 52 a FF(518)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)227 351 y Fj(system)h(p)r(ositions.)44
-b(Therefore,)29 b(the)h(pro)n(vision)f(for)g(returning)g(observ)-5
-b(atory)28 b(lo)r(cation)i(as)f(an)h(Stc)g(is)g(not)g(y)n(et)227
-451 y(a)n(v)-5 b(ailable.)34 b(Ho)n(w)n(ev)n(er,)21 b(for)g
-(terrestrial)g(observ)-5 b(ations,)21 b(the)h(p)r(osition)g(of)g(the)g
-(observ)-5 b(atory)19 b(can)j(still)g(b)r(e)g(recorded)227
-551 y(using)33 b(the)g(ObsLon)f(and)g(ObsLat)g(attributes)h(of)g(the)g
-(F)-7 b(rame)32 b(encapsulated)g(within)i(the)f(Stc)g(represen)n(ting)
-227 650 y(the)28 b(observ)-5 b(ation)26 b(lo)r(cation)h(\(this)i
-(assumes)d(the)i(observ)-5 b(atory)25 b(is)j(lo)r(cated)f(at)h(sea)f
-(lev)n(el\).)0 810 y Fd(Constructor)32 b(F)-8 b(unction:)227
-910 y Fj(astStcObsDataLo)r(cation)-2 1070 y Fd(Inheritance)n(:)227
-1216 y Fj(The)28 b(StcObsDataLo)r(cation)e(class)h(inherits)g(from)h
-(the)g(Stc)g(class.)-2 1376 y Fd(A)m(ttributes)n(:)227
-1522 y Fj(The)i(StcObsDataLo)r(cation)f(class)g(do)r(es)g(not)h
-(de\014ne)g(an)n(y)f(new)h(attributes)g(b)r(ey)n(ond)g(those)f(whic)n
-(h)h(are)f(appli-)227 1621 y(cable)e(to)h(all)f(Stcs.)-2
-1781 y Fd(F)-8 b(unctions)n(:)227 1928 y Fj(The)20 b(StcObsDataLo)r
-(cation)f(class)f(do)r(es)i(not)g(de\014ne)g(an)n(y)f(new)h(functions)g
-(b)r(ey)n(ond)f(those)h(whic)n(h)f(are)g(applicable)227
-2027 y(to)28 b(all)f(Stcs.)p 0 2237 3780 12 v 0 2369
-a Fz(StcResourcePro\014le)153 b Fe(Corresp)s(ond)33 b(to)g(the)h(IV)m
-(O)m(A)1377 2483 y(STCResourcePro\014le)1772 2583 y(class)2672
-2369 y Fz(StcResourcePro\014le)0 2759 y Fd(Description:)44
-b Fj(The)37 b(StcResourcePro\014le)d(class)h(is)h(a)g(sub-class)e(of)j
-(Stc)f(used)g(to)g(describ)r(e)g(the)h(co)n(v)n(erage)c(of)j(the)227
-2859 y(datasets)27 b(con)n(tained)g(in)h(some)f(V)n(O)g(resource.)227
-2988 y(See)h(h)n(ttp://hea-www.harv)-5 b(ard.edu/)p Fi(\030)p
-Fj(arots/n)n(v)n(o)o(meta/STC.h)n(tml)0 3148 y Fd(Constructor)32
-b(F)-8 b(unction:)227 3248 y Fj(astStcResourcePro\014le)-2
-3408 y Fd(Inheritance)n(:)227 3554 y Fj(The)28 b(StcResourcePro\014le)d
-(class)i(inherits)g(from)h(the)g(Stc)g(class.)-2 3714
-y Fd(A)m(ttributes)n(:)227 3860 y Fj(The)c(StcResourcePro\014le)e
-(class)h(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)h(attributes)g(b)r(ey)
-n(ond)f(those)h(whic)n(h)f(are)g(applicable)227 3960
-y(to)28 b(all)f(Stcs.)-2 4120 y Fd(F)-8 b(unctions)n(:)227
-4266 y Fj(The)26 b(StcResourcePro\014le)e(class)g(do)r(es)i(not)g
-(de\014ne)g(an)n(y)f(new)h(functions)g(b)r(ey)n(ond)f(those)h(whic)n(h)
-f(are)g(applicable)227 4365 y(to)j(all)f(Stcs.)p 0 4575
-V 0 4707 a Fz(StcSearc)l(hLo)t(cation)170 b Fe(Corresp)s(ond)37
-b(to)h(the)h(IV)m(O)m(A)1362 4821 y(Searc)m(hLo)s(cation)d(class)2697
-4707 y Fz(StcSearc)l(hLo)t(cation)0 4998 y Fd(Description:)44
-b Fj(The)25 b(StcSearc)n(hLo)r(cation)e(class)g(is)i(a)f(sub-class)f
-(of)h(Stc)h(used)g(to)f(describ)r(e)g(the)h(co)n(v)n(erage)d(of)i(a)g
-(query)-7 b(.)227 5127 y(See)28 b(h)n(ttp://hea-www.harv)-5
-b(ard.edu/)p Fi(\030)p Fj(arots/n)n(v)n(o)o(meta/STC.h)n(tml)0
-5287 y Fd(Constructor)32 b(F)-8 b(unction:)227 5387 y
-Fj(astStcSearc)n(hLo)r(cation)-2 5547 y Fd(Inheritance)n(:)227
-5693 y Fj(The)28 b(StcSearc)n(hLo)r(cation)e(class)g(inherits)i(from)f
-(the)h(Stc)g(class.)p eop end
-%%Page: 519 529
-TeXDict begin 519 528 bop 3643 52 a FF(519)-2 351 y Fd(A)m(ttributes)n
-(:)227 497 y Fj(The)25 b(StcSearc)n(hLo)r(cation)d(class)i(do)r(es)g
-(not)g(de\014ne)g(an)n(y)g(new)g(attributes)h(b)r(ey)n(ond)f(those)g
-(whic)n(h)g(are)f(applicable)227 597 y(to)28 b(all)f(Stcs.)-2
-745 y Fd(F)-8 b(unctions)n(:)227 891 y Fj(The)27 b(StcSearc)n(hLo)r
-(cation)d(class)h(do)r(es)h(not)h(de\014ne)f(an)n(y)g(new)g(functions)h
-(b)r(ey)n(ond)f(those)g(whic)n(h)g(are)f(applicable)227
-991 y(to)j(all)f(Stcs.)p 0 1188 3780 12 v 0 1319 a Fz(StcsChan)897
-1326 y Fe(I/O)39 b(Channel)f(using)g(STC-S)g(to)h(represen)m(t)1693
-1447 y(Ob)7 b(jects)3228 1319 y Fz(StcsChan)0 1638 y
-Fd(Description:)44 b Fj(A)24 b(StcsChan)f(is)h(a)f(sp)r(ecialised)g
-(form)g(of)g(Channel)g(whic)n(h)h(supp)r(orts)f(STC-S)g(I/O)f(op)r
-(erations.)35 b(W)-7 b(rit-)227 1738 y(ing)30 b(an)g(Ob)5
-b(ject)30 b(to)g(an)g(StcsChan)g(\(using)g(astW)-7 b(rite\))30
-b(will,)h(if)g(the)f(Ob)5 b(ject)30 b(is)g(suitable,)h(generate)e(an)h
-(STC-S)227 1837 y(description)24 b(of)g(that)h(Ob)5 b(ject,)25
-b(and)f(reading)g(from)g(an)g(StcsChan)g(will)h(create)e(a)h(new)h(Ob)5
-b(ject)24 b(from)g(its)h(STC-S)227 1937 y(description.)227
-2061 y(When)f(an)e(STC-S)h(description)f(is)h(read)f(using)g(astRead,)i
-(the)f(returned)f(AST)h(Ob)5 b(ject)23 b(ma)n(y)f(b)r(e)i(1\))e(a)h(P)n
-(oin)n(tList)227 2160 y(describing)33 b(the)h(STC)g(AstroCo)r(ords)e
-(\(i.e.)56 b(a)33 b(single)g(p)r(oin)n(t)h(of)g(in)n(terest)f(within)i
-(the)f(co)r(ordinate)f(frame)g(de-)227 2260 y(scrib)r(ed)h(b)n(y)f(the)
-i(STC-S)e(description\),)j(or)d(2\))g(a)h(Region)f(describing)g(the)h
-(STC)g(AstrCo)r(ordsArea)e(\(i.e.)56 b(an)227 2360 y(area)26
-b(or)h(v)n(olume)g(of)h(in)n(terest)f(within)h(the)g(co)r(ordinate)e
-(frame)i(describ)r(ed)f(b)n(y)g(the)h(STC-S)g(description\),)f(or)g
-(3\))227 2459 y(a)h(KeyMap)f(con)n(taining)h(the)g(unin)n(terpreted)g
-(prop)r(ert)n(y)g(v)-5 b(alues)27 b(read)h(form)g(the)g(STC-S)h
-(description,)f(or)f(4\))h(a)227 2559 y(KeyMap)i(con)n(taining)h(an)n
-(y)f(com)n(bination)g(of)h(the)h(\014rst)f(3)f(options.)47
-b(The)31 b(attributes)g(StcsArea,)h(StcsCo)r(ords)227
-2659 y(and)c(StcsProps)e(con)n(trol)g(whic)n(h)i(of)f(the)h(ab)r(o)n(v)
-n(e)e(is)i(returned)f(b)n(y)g(astRead.)227 2782 y(When)g(an)f(STC-S)g
-(description)f(is)h(created)f(from)h(an)g(AST)g(Ob)5
-b(ject)26 b(using)g(astW)-7 b(rite,)26 b(the)g(AST)h(Ob)5
-b(ject)25 b(m)n(ust)227 2882 y(b)r(e)32 b(either)g(a)f(Region)g(or)g(a)
-g(KeyMap.)48 b(If)32 b(it)g(is)g(a)f(Region,)h(it)g(is)g(assumed)f(to)g
-(de\014ne)h(the)g(AstroCo)r(ordsArea)227 2982 y(or)k(\(if)i(the)g
-(Region)e(is)h(a)f(single)h(p)r(oin)n(t\))g(the)h(AstroCo)r(ords)d(to)h
-(write)h(to)g(the)g(STC-S)g(description.)65 b(If)37 b(the)227
-3081 y(Ob)5 b(ject)28 b(is)f(a)g(KeyMap,)f(it)i(ma)n(y)f(con)n(tain)g
-(an)g(en)n(try)g(with)g(the)h(k)n(ey)f Ft(")p Fj(AREA)p
-Ft(")p Fj(,)g(holding)g(a)g(Region)g(to)g(b)r(e)h(used)227
-3181 y(to)g(de\014ne)f(the)h(AstroCo)r(ordsArea.)34 b(It)28
-b(ma)n(y)f(also)g(con)n(tain)f(an)i(en)n(try)f(with)h(the)f(k)n(ey)g
-Ft(")p Fj(COORDS)p Ft(")p Fj(,)g(holding)g(a)227 3281
-y(Region)g(\(a)g(P)n(oin)n(tList\))f(to)h(b)r(e)h(used)f(to)g(create)g
-(the)g(AstroCo)r(ords.)35 b(It)28 b(ma)n(y)e(also)g(con)n(tain)h(an)g
-(en)n(try)g(with)g(k)n(ey)227 3380 y Ft(")p Fj(PR)n(OPS)p
-Ft(")p Fj(,)h(holding)i(a)f(KeyMap)g(that)h(con)n(tains)f(unin)n
-(terpreted)h(prop)r(ert)n(y)e(v)-5 b(alues)30 b(to)f(b)r(e)i(used)e(as)
-g(defaults)227 3480 y(for)i(an)n(y)g(STC-S)h(prop)r(erties)e(that)i
-(are)f(not)g(determined)h(b)n(y)f(the)h(other)f(supplied)h(Regions.)48
-b(In)32 b(addition,)g(a)227 3579 y(KeyMap)e(supplied)i(to)e(astW)-7
-b(rite)31 b(ma)n(y)f(itself)i(hold)f(the)g(default)g(STC-S)g(prop)r
-(erties)f(\(rather)g(than)h(defaults)227 3679 y(b)r(eing)d(held)g(in)g
-(a)f(secondary)f(KeyMap,)g(stored)h(as)g(the)h Ft(")p
-Fj(PR)n(OPS)p Ft(")e Fj(en)n(try)h(in)g(the)h(supplied)g(KeyMap\).)227
-3803 y(The)33 b(astRead)e(and)h(astW)-7 b(rite)32 b(functions)g(w)n
-(ork)f(together)h(so)f(that)h(an)n(y)g(Ob)5 b(ject)32
-b(returned)g(b)n(y)g(astRead)f(can)227 3903 y(immediately)d(b)r(e)g
-(re-written)f(using)g(astW)-7 b(rite.)227 4026 y(Normally)g(,)36
-b(when)f(y)n(ou)g(use)f(an)h(StcsChan,)i(y)n(ou)d(should)h(pro)n(vide)f
-Ft(")p Fj(source)p Ft(")f Fj(and)h Ft(")p Fj(sink)p Ft(")g
-Fj(functions)i(whic)n(h)227 4126 y(connect)e(it)h(to)g(an)f(external)f
-(data)h(store)g(b)n(y)g(reading)f(and)h(writing)g(the)h(resulting)f
-(text.)57 b(These)34 b(functions)227 4226 y(should)40
-b(p)r(erform)f(an)n(y)h(con)n(v)n(ersions)d(needed)j(b)r(et)n(w)n(een)g
-(external)f(c)n(haracter)f(enco)r(dings)h(and)h(the)g(in)n(ternal)227
-4325 y(ASCI)r(I)31 b(enco)r(ding.)44 b(If)31 b(no)f(suc)n(h)g
-(functions)g(are)f(supplied,)i(a)f(Channel)g(will)h(read)e(from)h
-(standard)f(input)i(and)227 4425 y(write)d(to)f(standard)g(output.)227
-4549 y(Supp)r(ort)36 b(for)f(STC-S)g(is)g(curren)n(tly)g(based)g(on)g
-(the)g(IV)n(O)n(A)g(do)r(cumen)n(t)h Ft(")p Fj(STC-S:)f(Space-Time)g
-(Co)r(ordinate)227 4648 y(\(STC\))22 b(Metadata)d(Linear)h(String)g
-(Implemen)n(tation)p Ft(")p Fj(,)i(v)n(ersion)d(1.30)g(\(dated)i(5th)g
-(Decem)n(b)r(er)f(2007\),)h(a)n(v)-5 b(ailable)227 4748
-y(at)21 b(h)n(ttp://www.iv)n(oa.net/Do)r(cumen)n(ts/latest/STC-S.h)n
-(tml.)32 b(Note,)23 b(this)e(do)r(cumen)n(t)h(is)f(a)g(recommednation)
-227 4848 y(only)27 b(and)h(do)r(es)f(not)h(constitute)g(an)f(accepted)g
-(IV)n(O)n(A)g(standard.)227 4972 y(The)f(full)h(text)f(of)g(v)n(ersion)
-e(1.30)g(is)i(supp)r(orted)g(b)n(y)f(the)h(StcsChan)g(class,)f(with)i
-(the)f(follo)n(wing)f(exceptions)g(and)227 5071 y(pro)n(visos:)340
-5330 y Fi(\017)45 b Fj(When)28 b(reading)f(an)g(STC-S)h(phrase,)e(case)
-h(is)h(ignored)e(except)i(when)f(reading)g(units)h(strings.)340
-5462 y Fi(\017)45 b Fj(There)31 b(is)g(no)h(supp)r(ort)f(for)g(m)n
-(ultiple)h(in)n(terv)-5 b(als)30 b(sp)r(eci\014ed)i(within)g(a)f
-(TimeIn)n(terv)-5 b(al,)32 b(P)n(ositionIn)n(terv)-5
-b(al,)427 5561 y(Sp)r(ectralIn)n(terv)g(al)27 b(or)g(RedshiftIn)n(terv)
--5 b(al.)340 5693 y Fi(\017)45 b Fj(If)28 b(the)g(ET)f(timescale)h(is)f
-(sp)r(eci\014ed,)h(TT)g(is)f(used)h(instead.)p eop end
-%%Page: 520 530
-TeXDict begin 520 529 bop 0 52 a FF(520)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(If)28 b(the)g(TEB)f(timescale)g(is)h(sp)r(eci\014ed,)g(TDB)g(is)f
-(used)h(instead.)340 484 y Fi(\017)45 b Fj(The)28 b(LOCAL)f(timescale)g
-(is)h(not)f(supp)r(orted.)340 617 y Fi(\017)45 b Fj(The)26
-b(AST)g(TimeF)-7 b(rame)25 b(and)h(SkyF)-7 b(rame)25
-b(classes)f(do)h(not)h(curren)n(tly)f(allo)n(w)f(a)h(reference)g(p)r
-(osition)h(to)f(b)r(e)427 717 y(sp)r(eci\014ed.)45 b(Consequen)n(tly)-7
-b(,)30 b(an)n(y)f Fl(<)p Fj(refp)r(os)p Fl(>)g Fj(sp)r(eci\014ed)h
-(within)h(the)f(Time)g(or)g(Space)f(sub-phrase)g(of)h(an)427
-817 y(STC-S)e(do)r(cumen)n(t)g(is)f(ignored.)340 950
-y Fi(\017)45 b Fj(The)28 b(Con)n(v)n(ex)e(iden)n(ti\014er)i(for)f(the)h
-(space)e(sub-phrase)h(is)g(not)h(supp)r(orted.)340 1083
-y Fi(\017)45 b Fj(The)28 b(GEO)p Ft(_)p Fj(C)e(and)i(GEO)p
-Ft(_)p Fj(D)f(space)g(frames)f(are)h(not)h(supp)r(orted.)340
-1216 y Fi(\017)45 b Fj(The)28 b(UNITSPHERE)f(and)h(SPHER3)e(space)h
-(\015a)n(v)n(ours)e(are)i(not)h(supp)r(orted.)340 1349
-y Fi(\017)45 b Fj(If)33 b(an)n(y)f(Error)d(v)-5 b(alues)32
-b(are)g(supplied)g(in)h(a)f(space)f(sub-phrase,)i(then)f(the)h(n)n(um)n
-(b)r(er)f(of)g(v)-5 b(alues)32 b(supplied)427 1448 y(should)c(equal)f
-(the)i(n)n(um)n(b)r(er)f(of)g(spatial)f(axes,)g(and)h(the)g(v)-5
-b(alues)28 b(are)f(assumed)g(to)h(sp)r(ecify)g(an)g(error)e(b)r(o)n(x)
-427 1548 y(\(i.e.)38 b(error)25 b(circles,)i(ellipses,)g(etc,)h(are)f
-(not)g(supp)r(orted\).)340 1681 y Fi(\017)45 b Fj(The)35
-b(sp)r(ectral)g(and)f(redshift)h(sub-phrases)f(do)g(not)h(supp)r(ort)g
-(the)g(follo)n(wing)f Fl(<)p Fj(refp)r(os)p Fl(>)f Fj(v)-5
-b(alues:)51 b(LO-)427 1781 y(CAL)p Ft(_)p Fj(GR)n(OUP)p
-Ft(_)p Fj(CENTER,)41 b(UNKNO)n(WNRefP)n(os,)46 b(EMBAR)-7
-b(YCENTER,)42 b(MOON,)g(MER)n(CUR)-7 b(Y,)427 1880 y(VENUS,)28
-b(MARS,)h(JUPITER,)d(SA)-7 b(TURN,)29 b(URANUS,)g(NEPTUNE,)e(PLUTO.)340
-2013 y Fi(\017)45 b Fj(Error)26 b(v)-5 b(alues)27 b(are)f(supp)r(orted)
-i(but)g(error)e(ranges)g(are)g(not.)340 2146 y Fi(\017)45
-b Fj(Resolution,)27 b(PixSize)g(and)h(Size)g(v)-5 b(alues)27
-b(are)f(ignored.)340 2280 y Fi(\017)45 b Fj(Space)28
-b(v)n(elo)r(cit)n(y)e(sub-phrases)g(are)h(ignored.)0
-2442 y Fd(Constructor)32 b(F)-8 b(unction:)227 2541 y
-Fj(astStcsChan)-2 2691 y Fd(Inheritance)n(:)227 2837
-y Fj(The)28 b(StcsChan)f(class)g(inherits)h(from)f(the)h(Channel)f
-(class.)-2 2987 y Fd(A)m(ttributes)n(:)227 3133 y Fj(In)36
-b(addition)g(to)g(those)f(attributes)h(common)f(to)h(all)g(Channels,)h
-(ev)n(ery)e(StcsChan)g(also)g(has)g(the)i(follo)n(wing)227
-3233 y(attributes:)340 3495 y Fi(\017)45 b Fj(StcsArea:)36
-b(Return)28 b(the)g(Co)r(ordinateArea)e(comp)r(onen)n(t)h(after)g
-(reading)g(an)g(STC-S?)340 3628 y Fi(\017)45 b Fj(StcsCo)r(ords:)36
-b(Return)28 b(the)g(Co)r(ordinates)e(comp)r(onen)n(t)h(after)h(reading)
-e(an)h(STC-S?)340 3761 y Fi(\017)45 b Fj(StcsInden)n(t:)38
-b(Con)n(trols)26 b(output)i(of)f(inden)n(tation)h(and)f(line)h(feeds)
-340 3894 y Fi(\017)45 b Fj(StcsLength:)37 b(Con)n(trols)26
-b(output)i(bu\013er)g(length)340 4027 y Fi(\017)45 b
-Fj(StcsProps:)36 b(Return)27 b(the)h(STC-S)g(prop)r(erties)f(after)g
-(reading)f(an)i(STC-S?)-2 4189 y Fd(F)-8 b(unctions)n(:)227
-4335 y Fj(The)34 b(StcsChan)g(class)f(do)r(es)h(not)f(de\014ne)i(an)n
-(y)e(new)h(functions)g(b)r(ey)n(ond)f(those)h(whic)n(h)g(are)f
-(applicable)g(to)h(all)227 4435 y(Channels.)p 0 4635
-3780 12 v 0 4766 a Fz(Switc)l(hMap)268 b Fe(A)39 b(Mapping)f(that)f
-(encapsulates)h(a)h(set)f(of)1394 4881 y(alternate)e(Mappings)3120
-4766 y Fz(Switc)l(hMap)0 5070 y Fd(Description:)44 b
-Fj(A)31 b(Switc)n(hMap)f(is)g(a)f(Mapping)h(whic)n(h)g(represen)n(ts)e
-(a)i(set)g(of)g(alternate)f(Mappings,)h(eac)n(h)g(of)g(whic)n(h)227
-5170 y(is)e(used)f(to)g(transform)g(p)r(ositions)g(within)h(a)f
-(particular)f(region)g(of)i(the)g(input)g(or)f(output)h(co)r(ordinate)e
-(system)227 5269 y(of)i(the)g(Switc)n(hMap.)227 5394
-y(A)34 b(Switc)n(hMap)e(can)h(encapsulate)f(an)n(y)g(n)n(um)n(b)r(er)h
-(of)g(Mappings,)h(but)f(they)h(m)n(ust)f(all)f(ha)n(v)n(e)g(the)h(same)
-g(n)n(um-)227 5494 y(b)r(er)d(of)g(inputs)h(\(Nin)f(attribute)g(v)-5
-b(alue\))31 b(and)e(the)i(same)e(n)n(um)n(b)r(er)h(of)g(outputs)g
-(\(Nout)g(attribute)g(v)-5 b(alue\).)45 b(The)227 5593
-y(Switc)n(hMap)20 b(itself)h(inherits)f(these)g(same)g(v)-5
-b(alues)20 b(for)f(its)i(Nin)f(and)g(Nout)h(attributes.)34
-b(Eac)n(h)19 b(of)h(these)g(Mappings)227 5693 y(represen)n(ts)33
-b(a)h Ft(")p Fj(route)p Ft(")f Fj(through)h(the)g(switc)n(h,)i(and)e
-(are)g(referred)f(to)h(as)g Ft(")p Fj(route)p Ft(")e
-Fj(Mappings)i(b)r(elo)n(w.)57 b(Eac)n(h)p eop end
-%%Page: 521 531
-TeXDict begin 521 530 bop 3643 52 a FF(521)227 351 y
-Fj(route)30 b(Mapping)f(transforms)g(p)r(ositions)h(b)r(et)n(w)n(een)g
-(the)g(input)h(and)f(output)g(co)r(ordinate)f(space)h(of)g(the)g(en)n
-(tire)227 451 y(Switc)n(hMap,)f(but)h(only)e(one)h(Mapping)f(will)h(b)r
-(e)h(used)e(to)h(transform)f(an)n(y)g(giv)n(en)g(p)r(osition.)40
-b(The)29 b(selection)g(of)227 551 y(the)e(appropriate)e(route)h
-(Mapping)g(to)g(use)g(with)h(an)n(y)f(giv)n(en)f(input)j(p)r(osition)e
-(is)g(made)g(b)n(y)g(another)g(Mapping,)227 650 y(called)31
-b(the)h Ft(")p Fj(selector)p Ft(")e Fj(Mapping.)48 b(Eac)n(h)30
-b(Switc)n(hMap)i(encapsulates)e(t)n(w)n(o)h(selector)f(Mappings)h(in)h
-(addition)227 750 y(to)d(its)g(route)f(Mappings;)h(one)g(for)f(use)h
-(with)g(the)g(Switc)n(hMap's)g(forw)n(ard)e(transformation)g(\(called)i
-(the)g Ft(")p Fj(for-)227 849 y(w)n(ard)24 b(selector)g(Mapping)p
-Ft(")p Fj(\),)i(and)f(one)g(for)f(use)h(with)h(the)g(Switc)n(hMap's)f
-(in)n(v)n(erse)f(transformation)f(\(called)i(the)227
-949 y Ft(")p Fj(in)n(v)n(erse)f(selector)h(Mapping)p
-Ft(")p Fj(\).)36 b(The)26 b(forw)n(ard)f(selector)g(Mapping)g(m)n(ust)h
-(ha)n(v)n(e)f(the)i(same)e(n)n(um)n(b)r(er)h(of)g(inputs)227
-1049 y(as)k(the)h(route)e(Mappings,)i(but)g(should)f(ha)n(v)n(e)f(only)
-h(one)g(output.)45 b(Lik)n(ewise,)30 b(the)h(in)n(v)n(erse)e(selector)g
-(Mapping)227 1148 y(m)n(ust)f(ha)n(v)n(e)e(the)i(same)f(n)n(um)n(b)r
-(er)h(of)f(outputs)h(as)f(the)h(route)f(Mappings,)g(but)h(should)g(ha)n
-(v)n(e)e(only)h(one)h(input.)227 1279 y(When)40 b(the)g(Switc)n(hMap)f
-(is)h(used)f(to)g(transform)g(a)g(p)r(osition)g(in)h(the)f(forw)n(ard)f
-(direction)h(\(from)h(input)g(to)227 1379 y(output\),)g(eac)n(h)35
-b(supplied)h(input)h(p)r(osition)f(is)h(\014rst)e(transformed)h(b)n(y)f
-(the)i(forw)n(ard)e(transformation)f(of)i(the)227 1478
-y(forw)n(ard)27 b(selector)g(Mapping.)38 b(This)28 b(pro)r(duces)f(a)h
-(single)f(output)i(v)-5 b(alue)28 b(for)g(eac)n(h)f(input)i(p)r
-(osition)f(referred)f(to)227 1578 y(as)j(the)h(selector)e(v)-5
-b(alue.)45 b(The)30 b(nearest)f(in)n(teger)h(to)g(the)g(selector)g(v)-5
-b(alue)30 b(is)g(found,)h(and)f(is)g(used)h(to)f(index)g(the)227
-1678 y(arra)n(y)25 b(of)i(route)f(Mappings)g(\(the)i(\014rst)f
-(supplied)g(route)f(Mapping)h(has)f(index)h(1,)g(the)g(second)g(route)f
-(Mapping)227 1777 y(has)34 b(index)h(2,)h(etc\).)59 b(If)35
-b(the)g(nearest)f(in)n(teger)g(to)g(the)h(selector)f(v)-5
-b(alue)35 b(is)f(less)h(than)f(1)h(or)e(greater)g(than)i(the)227
-1877 y(n)n(um)n(b)r(er)c(of)f(route)g(Mappings,)h(then)h(the)f(Switc)n
-(hMap)f(output)i(p)r(osition)e(is)h(set)f(to)h(a)f(v)-5
-b(alue)31 b(of)g(AST)p Ft(__)p Fj(BAD)227 1976 y(on)k(ev)n(ery)g(axis.)
-59 b(Otherwise,)37 b(the)f(forw)n(ard)e(transformation)f(of)j(the)g
-(selected)f(route)g(Mapping)g(is)g(used)h(to)227 2076
-y(transform)27 b(the)h(supplied)g(input)g(p)r(osition)f(to)h(pro)r
-(duce)f(the)h(Switc)n(hMap)g(output)g(p)r(osition.)227
-2207 y(When)33 b(the)g(Switc)n(hMap)f(is)g(used)g(to)g(transform)f(a)h
-(p)r(osition)g(in)h(the)f(in)n(v)n(erse)f(direction)h(\(from)g
-Ft(")p Fj(output)p Ft(")g Fj(to)227 2306 y Ft(")p Fj(input)p
-Ft(")p Fj(\),)26 b(eac)n(h)f(supplied)g Ft(")p Fj(output)p
-Ft(")g Fj(p)r(osition)g(is)g(\014rst)g(transformed)f(b)n(y)h(the)h(in)n
-(v)n(erse)e(transformation)f(of)i(the)227 2406 y(in)n(v)n(erse)31
-b(selector)f(Mapping.)49 b(This)32 b(pro)r(duces)f(a)g(selector)g(v)-5
-b(alue)31 b(for)g(eac)n(h)g Ft(")p Fj(output)p Ft(")h
-Fj(p)r(osition.)49 b(Again,)32 b(the)227 2506 y(nearest)g(in)n(teger)f
-(to)i(the)g(selector)e(v)-5 b(alue)32 b(is)h(found,)h(and)e(is)g(used)h
-(to)f(index)h(the)g(arra)n(y)d(of)i(route)g(Mappings.)227
-2605 y(If)f(this)f(selector)g(index)g(v)-5 b(alue)30
-b(is)g(within)h(the)g(b)r(ounds)f(of)g(the)h(arra)n(y)d(of)i(route)f
-(Mappings,)i(then)f(the)h(in)n(v)n(erse)227 2705 y(transformation)26
-b(of)i(the)g(selected)f(route)g(Mapping)g(is)g(used)h(to)f(transform)g
-(the)h(supplied)g Ft(")p Fj(output)p Ft(")f Fj(p)r(osition)227
-2805 y(to)32 b(pro)r(duce)f(the)h(Switc)n(hMap)f Ft(")p
-Fj(input)p Ft(")h Fj(p)r(osition.)49 b(If)32 b(the)g(selector)e(index)i
-(v)-5 b(alue)31 b(is)h(outside)f(the)h(b)r(ounds)g(of)227
-2904 y(the)25 b(arra)n(y)e(of)h(route)g(Mappings,)h(then)g(the)g(Switc)
-n(hMap)g Ft(")p Fj(input)p Ft(")f Fj(p)r(osition)h(is)f(set)h(to)f(a)g
-(v)-5 b(alue)25 b(of)g(AST)p Ft(__)p Fj(BAD)227 3004
-y(on)j(ev)n(ery)e(axis.)227 3135 y(In)f(practice,)f(appropriate)e
-(selector)h(Mappings)g(should)h(b)r(e)h(c)n(hosen)e(to)h(asso)r(ciate)f
-(a)g(di\013eren)n(t)h(route)g(Mapping)227 3234 y(with)30
-b(eac)n(h)e(region)g(of)h(co)r(ordinate)f(space.)41 b(Note)30
-b(that)f(the)h(SelectorMap)e(class)g(of)h(Mapping)g(is)g(particularly)
-227 3334 y(appropriate)d(for)h(this)h(purp)r(ose.)227
-3465 y(If)38 b(a)f(comp)r(ound)g(Mapping)g(con)n(tains)f(a)h(Switc)n
-(hMap)g(in)g(series)f(with)i(its)f(o)n(wn)g(in)n(v)n(erse,)h(the)f(com)
-n(bination)227 3564 y(of)31 b(the)h(t)n(w)n(o)f(adjacen)n(t)f(Switc)n
-(hMaps)h(will)h(b)r(e)f(replaced)g(b)n(y)g(a)g(UnitMap)g(when)h(the)g
-(comp)r(ound)f(Mapping)g(is)227 3664 y(simpli\014ed)d(using)g
-(astSimplify)-7 b(.)0 3826 y Fd(Constructor)32 b(F)-8
-b(unction:)227 3925 y Fj(astSwitc)n(hMap)-2 4087 y Fd(Inheritance)n(:)
-227 4233 y Fj(The)28 b(Switc)n(hMap)f(class)g(inherits)h(from)f(the)h
-(Mapping)f(class.)-2 4395 y Fd(A)m(ttributes)n(:)227
-4541 y Fj(The)h(Switc)n(hMap)g(class)f(do)r(es)h(not)g(de\014ne)g(an)n
-(y)f(new)h(attributes)g(b)r(ey)n(ond)f(those)h(whic)n(h)g(are)f
-(applicable)g(to)h(all)227 4641 y(Mappings.)-2 4803 y
-Fd(F)-8 b(unctions)n(:)227 4949 y Fj(The)30 b(Switc)n(hMap)g(class)e
-(do)r(es)i(not)f(de\014ne)h(an)n(y)f(new)h(functions)g(b)r(ey)n(ond)f
-(those)g(whic)n(h)h(are)e(applicable)h(to)h(all)227 5049
-y(Mappings.)p 0 5260 3780 12 v 0 5392 a Fz(TimeF)-11
-b(rame)304 b Fe(Time)38 b(co)s(ordinate)e(system)j(description)301
-b Fz(TimeF)-11 b(rame)0 5593 y Fd(Description:)44 b Fj(A)37
-b(TimeF)-7 b(rame)35 b(is)h(a)f(sp)r(ecialised)h(form)f(of)h
-(one-dimensional)e(F)-7 b(rame)36 b(whic)n(h)f(represen)n(ts)g(v)-5
-b(arious)227 5693 y(co)r(ordinate)27 b(systems)g(used)g(to)h(describ)r
-(e)f(p)r(ositions)g(in)h(time.)p eop end
-%%Page: 522 532
-TeXDict begin 522 531 bop 0 52 a FF(522)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)227 351 y Fj(A)23 b(TimeF)-7
-b(rame)21 b(represen)n(ts)g(a)g(momen)n(t)h(in)g(time)h(as)e(either)h
-(an)f(Mo)r(di\014ed)i(Julian)e(Date)h(\(MJD\),)h(a)f(Julian)f(Date)227
-451 y(\(JD\),)f(a)f(Besselian)e(ep)r(o)r(c)n(h)i(or)f(a)h(Julian)g(ep)r
-(o)r(c)n(h,)h(as)f(determined)g(b)n(y)f(the)i(System)f(attribute.)34
-b(Optionally)-7 b(,)20 b(a)f(zero)227 551 y(p)r(oin)n(t)30
-b(can)g(b)r(e)g(sp)r(eci\014ed)h(\(using)e(attribute)i(TimeOrigin\))e
-(whic)n(h)h(results)f(in)h(the)h(TimeF)-7 b(rame)29 b(represen)n(ting)
-227 650 y(time)f(o\013sets)g(from)f(the)h(sp)r(eci\014ed)g(zero)e(p)r
-(oin)n(t.)227 772 y(Ev)n(en)g(though)g(JD)g(and)g(MJD)g(are)g
-(de\014ned)g(as)g(b)r(eing)g(in)g(units)h(of)f(da)n(ys,)g(the)g(TimeF)
--7 b(rame)26 b(class)f(allo)n(ws)g(other)227 872 y(units)31
-b(to)g(b)r(e)g(used)f(\(via)h(the)g(Unit)g(attribute\))g(on)f(the)h
-(basis)f(of)h(simple)g(scalings)e(\(60)h(seconds)g(=)g(1)g(min)n(ute,)
-227 971 y(60)i(min)n(utes)h(=)f(1)h(hour,)g(24)f(hours)g(=)g(1)g(da)n
-(y)-7 b(,)33 b(365.25)e(da)n(ys)h(=)g(1)g(y)n(ear\).)51
-b(Lik)n(ewise,)33 b(Julian)g(ep)r(o)r(c)n(hs)f(can)g(b)r(e)227
-1071 y(describ)r(ed)f(in)f(units)h(other)f(than)h(the)g(usual)f(y)n
-(ears.)44 b(Besselian)29 b(ep)r(o)r(c)n(h)i(are)e(alw)n(a)n(ys)g
-(represen)n(ted)g(in)i(units)g(of)227 1171 y(\(tropical\))c(y)n(ears.)
-227 1293 y(The)33 b(TimeScale)e(attribute)i(allo)n(ws)e(the)h(time)h
-(scale)e(to)h(b)r(e)h(sp)r(eci\014ed)g(\(that)f(is,)i(the)e(ph)n
-(ysical)g(pro)r(cess)f(used)227 1392 y(to)e(de\014ne)g(the)g(rate)f(of)
-g(\015o)n(w)g(of)h(time\).)41 b(MJD,)29 b(JD)g(and)f(Julian)g(ep)r(o)r
-(c)n(h)h(can)f(b)r(e)h(used)g(to)f(represen)n(t)g(a)g(time)h(in)227
-1492 y(an)n(y)d(supp)r(orted)h(time)g(scale.)36 b(Ho)n(w)n(ev)n(er,)25
-b(Besselian)h(ep)r(o)r(c)n(h)g(ma)n(y)g(only)h(b)r(e)g(used)g(with)g
-(the)g Ft(")p Fj(TT)p Ft(")f Fj(\(T)-7 b(errestrial)227
-1592 y(Time\))39 b(time)g(scale.)70 b(The)38 b(list)h(of)g(supp)r
-(orted)f(time)h(scales)f(includes)h(univ)n(ersal)e(time)i(and)f
-(siderial)g(time.)227 1691 y(Strictly)-7 b(,)30 b(these)g(represen)n(t)
-e(angles)g(rather)g(than)i(time)f(scales,)g(but)h(are)e(included)i(in)g
-(the)f(list)h(since)f(they)h(are)227 1791 y(in)e(common)f(use)h(and)f
-(are)g(often)h(though)n(t)f(of)g(as)g(time)h(scales.)227
-1913 y(When)h(a)e(time)h(v)-5 b(alue)28 b(is)f(formatted)h(it)g(can)f
-(b)r(e)h(formated)g(either)f(as)g(a)h(simple)g(\015oating)e(p)r(oin)n
-(t)i(v)-5 b(alue,)28 b(or)f(as)g(a)227 2012 y(Gregorian)f(date)h(\(see)
-h(the)g(F)-7 b(ormat)27 b(attribute\).)0 2157 y Fd(Constructor)32
-b(F)-8 b(unction:)227 2256 y Fj(astTimeF)h(rame)-2 2401
-y Fd(Inheritance)n(:)227 2547 y Fj(The)28 b(TimeF)-7
-b(rame)27 b(class)g(inherits)g(from)g(the)h(F)-7 b(rame)28
-b(class.)-2 2691 y Fd(A)m(ttributes)n(:)227 2837 y Fj(In)36
-b(addition)g(to)f(those)h(attributes)f(common)g(to)h(all)f(F)-7
-b(rames,)37 b(ev)n(ery)e(TimeF)-7 b(rame)35 b(also)f(has)i(the)g(follo)
-n(wing)227 2937 y(attributes:)340 3190 y Fi(\017)45 b
-Fj(AlignTimeScale:)37 b(Time)28 b(scale)e(in)i(whic)n(h)g(to)f(align)g
-(TimeF)-7 b(rames)340 3318 y Fi(\017)45 b Fj(L)-7 b(TO\013set:)37
-b(The)28 b(o\013set)f(of)h(Lo)r(cal)f(Time)g(from)h(UTC,)g(in)g(hours.)
-340 3446 y Fi(\017)45 b Fj(TimeOrigin:)36 b(The)28 b(zero)e(p)r(oin)n
-(t)i(for)f(TimeF)-7 b(rame)27 b(axis)g(v)-5 b(alues)340
-3574 y Fi(\017)45 b Fj(TimeScale:)37 b(The)27 b(timescale)h(used)f(b)n
-(y)h(the)g(TimeF)-7 b(rame)227 3731 y(Sev)n(eral)33 b(of)i(the)g(F)-7
-b(rame)34 b(attributes)h(inherited)f(b)n(y)h(the)g(TimeF)-7
-b(rame)34 b(class)g(refer)f(to)i(a)f(sp)r(eci\014c)h(axis)f(of)g(the)
-227 3830 y(F)-7 b(rame)30 b(\(for)g(instance)g(Unit\(axis\),)h(Lab)r
-(el\(axis\),)g(etc\).)45 b(Since)30 b(a)g(TimeF)-7 b(rame)30
-b(is)g(strictly)g(one-dimensional,)227 3930 y(it)f(allo)n(ws)e(these)h
-(attributes)g(to)g(b)r(e)g(sp)r(eci\014ed)g(without)h(an)f(axis)f
-(index.)39 b(So)27 b(for)h(instance,)g Ft(")p Fj(Unit)p
-Ft(")g Fj(is)g(allo)n(w)n(ed)227 4029 y(in)g(place)f(of)h
-Ft(")p Fj(Unit\(1\))p Ft(")p Fj(.)-2 4174 y Fd(F)-8 b(unctions)n(:)227
-4320 y Fj(In)25 b(addition)f(to)g(those)g(functions)h(applicable)e(to)h
-(all)g(F)-7 b(rames,)25 b(the)f(follo)n(wing)g(functions)g(ma)n(y)g
-(also)f(b)r(e)i(applied)227 4420 y(to)j(all)f(TimeF)-7
-b(rames:)340 4673 y Fi(\017)45 b Fj(astCurren)n(tTime:)36
-b(Return)28 b(the)g(curren)n(t)e(system)i(time)p 0 4862
-3780 12 v 0 4994 a Fz(TimeMap)290 b Fe(Sequence)39 b(of)f(time)g(co)s
-(ordinate)e(con)m(v)m(ersions)288 b Fz(TimeMap)0 5172
-y Fd(Description:)44 b Fj(A)22 b(TimeMap)e(is)h(a)f(sp)r(ecialised)h
-(form)f(of)h(1-dimensional)e(Mapping)i(whic)n(h)g(can)f(b)r(e)h(used)g
-(to)g(represen)n(t)227 5272 y(a)27 b(sequence)h(of)f(con)n(v)n(ersions)
-e(b)r(et)n(w)n(een)j(standard)e(time)i(co)r(ordinate)f(systems.)227
-5394 y(When)c(a)e(TimeMap)g(is)h(\014rst)f(created,)h(it)h(simply)e(p)r
-(erforms)g(a)h(unit)g(\(n)n(ull\))g(Mapping.)35 b(Using)21
-b(the)h(astTimeAdd)227 5494 y(function,)33 b(a)d(series)g(of)h(co)r
-(ordinate)f(con)n(v)n(ersion)e(steps)j(ma)n(y)f(then)i(b)r(e)f(added.)
-47 b(This)31 b(allo)n(ws)e(m)n(ulti-step)i(con-)227 5593
-y(v)n(ersions)k(b)r(et)n(w)n(een)h(a)g(v)-5 b(ariet)n(y)35
-b(of)h(time)h(co)r(ordinate)e(systems)g(to)h(b)r(e)h(assem)n(bled)e
-(out)h(of)g(a)g(set)g(of)g(building)227 5693 y(blo)r(c)n(ks.)p
-eop end
-%%Page: 523 533
-TeXDict begin 523 532 bop 3643 52 a FF(523)227 351 y
-Fj(F)-7 b(or)20 b(details)h(of)g(the)g(individual)g(co)r(ordinate)e
-(con)n(v)n(ersions)g(a)n(v)-5 b(ailable,)21 b(see)f(the)h(description)f
-(of)h(the)g(astTimeAdd)227 451 y(function.)0 610 y Fd(Constructor)32
-b(F)-8 b(unction:)227 710 y Fj(astTimeMap)27 b(\(also)g(see)g
-(astTimeAdd\))-2 870 y Fd(Inheritance)n(:)227 1016 y
-Fj(The)h(TimeMap)f(class)g(inherits)h(from)f(the)h(Mapping)f(class.)-2
-1175 y Fd(A)m(ttributes)n(:)227 1321 y Fj(The)32 b(TimeMap)f(class)g
-(do)r(es)g(not)g(de\014ne)h(an)n(y)f(new)g(attributes)h(b)r(ey)n(ond)f
-(those)g(whic)n(h)g(are)g(applicable)g(to)g(all)227 1421
-y(Mappings.)-2 1580 y Fd(F)-8 b(unctions)n(:)227 1727
-y Fj(In)21 b(addition)f(to)g(those)g(functions)g(applicable)g(to)g(all)
-g(Mappings,)h(the)g(follo)n(wing)e(function)h(ma)n(y)g(also)f(b)r(e)i
-(applied)227 1826 y(to)28 b(all)f(TimeMaps:)340 2102
-y Fi(\017)45 b Fj(astTimeAdd:)37 b(Add)29 b(a)e(time)h(co)r(ordinate)e
-(con)n(v)n(ersion)g(to)h(an)g(TimeMap)p 0 2312 3780 12
-v 0 2442 a Fz(T)-11 b(ranMap)772 2443 y Fe(Mapping)38
-b(with)g(sp)s(eci\014ed)h(forw)m(ard)d(and)j(in)m(v)m(erse)1488
-2558 y(transformations)3234 2442 y Fz(T)-11 b(ranMap)0
-2734 y Fd(Description:)44 b Fj(A)27 b(T)-7 b(ranMap)25
-b(is)h(a)f(Mapping)h(whic)n(h)g(com)n(bines)f(the)i(forw)n(ard)d
-(transformation)g(of)i(a)g(supplied)g(Map-)227 2833 y(ping)i(with)h
-(the)g(in)n(v)n(erse)e(transformation)f(of)j(another)e(supplied)i
-(Mapping,)f(ignoring)e(the)j(un-used)f(transfor-)227
-2933 y(mation)g(in)f(eac)n(h)g(Mapping)h(\(indeed)g(the)g(un-used)f
-(transformation)f(need)i(not)f(exist\).)227 3062 y(When)h(the)f(forw)n
-(ard)e(transformation)h(of)h(the)g(T)-7 b(ranMap)26 b(is)h(referred)f
-(to,)h(the)g(transformation)e(actually)i(used)227 3162
-y(is)k(the)g(forw)n(ard)e(transformation)h(of)g(the)i(\014rst)e
-(Mapping)h(supplied)g(when)g(the)g(T)-7 b(ranMap)30 b(w)n(as)g
-(constructed.)227 3262 y(Lik)n(ewise,)j(when)f(the)h(in)n(v)n(erse)d
-(transformation)h(of)h(the)h(T)-7 b(ranMap)31 b(is)h(referred)f(to,)i
-(the)g(transformation)d(ac-)227 3361 y(tually)f(used)g(is)g(the)g(in)n
-(v)n(erse)f(transformation)f(of)i(the)h(second)e(Mapping)h(supplied)g
-(when)g(the)h(T)-7 b(ranMap)28 b(w)n(as)227 3461 y(constructed.)0
-3620 y Fd(Constructor)k(F)-8 b(unction:)227 3720 y Fj(astT)h(ranMap)-2
-3880 y Fd(Inheritance)n(:)227 4026 y Fj(The)28 b(T)-7
-b(ranMap)27 b(class)f(inherits)i(from)f(the)h(Mapping)f(class.)-2
-4185 y Fd(A)m(ttributes)n(:)227 4331 y Fj(The)33 b(T)-7
-b(ranMap)31 b(class)h(do)r(es)g(not)h(de\014ne)f(an)n(y)g(new)h
-(attributes)f(b)r(ey)n(ond)g(those)h(whic)n(h)f(are)g(applicable)f(to)i
-(all)227 4431 y(Mappings.)-2 4591 y Fd(F)-8 b(unctions)n(:)227
-4737 y Fj(The)35 b(T)-7 b(ranMap)33 b(class)g(do)r(es)h(not)g(de\014ne)
-h(an)n(y)e(new)h(functions)h(b)r(ey)n(ond)f(those)g(whic)n(h)g(are)f
-(applicable)h(to)g(all)227 4836 y(Mappings.)p 0 5046
-V 0 5177 a Fz(UnitMap)1368 5184 y Fe(Unit)k(\(n)m(ull\))f(Mapping)3244
-5177 y Fz(UnitMap)0 5394 y Fd(Description:)44 b Fj(A)36
-b(UnitMap)g(is)f(a)g(unit)g(\(n)n(ull\))h(Mapping)f(that)h(has)e(no)h
-(e\013ect)h(on)f(the)g(co)r(ordinates)f(supplied)i(to)227
-5494 y(it.)47 b(They)31 b(are)f(simply)h(copied.)46 b(This)31
-b(can)f(b)r(e)i(useful)f(if)g(a)g(Mapping)f(is)h(required)f(\(e.g.)46
-b(to)31 b(pass)f(to)h(another)227 5593 y(function\))h(but)f(y)n(ou)f
-(do)g(not)h(w)n(an)n(t)f(it)h(to)f(ha)n(v)n(e)g(an)n(y)f(e\013ect.)47
-b(The)30 b(Nin)h(and)g(Nout)g(attributes)f(of)h(a)f(UnitMap)227
-5693 y(are)d(alw)n(a)n(ys)f(equal)h(and)g(are)g(sp)r(eci\014ed)h(when)f
-(it)h(is)g(created.)p eop end
-%%Page: 524 534
-TeXDict begin 524 533 bop 0 52 a FF(524)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)0 351 y Fd(Constructor)j(F)-8
-b(unction:)227 451 y Fj(astUnitMap)-2 595 y Fd(Inheritance)n(:)227
-741 y Fj(The)28 b(UnitMap)g(class)f(inherits)g(from)g(the)h(Mapping)g
-(class.)-2 885 y Fd(A)m(ttributes)n(:)227 1031 y Fj(The)33
-b(UnitMap)h(class)e(do)r(es)h(not)g(de\014ne)h(an)n(y)e(new)h
-(attributes)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f(applicable)h(to)g
-(all)227 1130 y(Mappings.)-2 1274 y Fd(F)-8 b(unctions)n(:)227
-1420 y Fj(The)35 b(UnitMap)h(class)e(do)r(es)g(not)h(de\014ne)g(an)n(y)
-f(new)h(functions)g(b)r(ey)n(ond)g(those)f(whic)n(h)h(are)f(applicable)
-g(to)h(all)227 1520 y(Mappings.)p 0 1708 3780 12 v 0
-1839 a Fz(WcsMap)879 1840 y Fe(Implemen)m(t)i(a)i(FITS-W)m(CS)g(sky)f
-(pro)7 b(jection)3260 1839 y Fz(WcsMap)0 2017 y Fd(Description:)44
-b Fj(This)28 b(class)e(is)i(used)f(to)g(represen)n(t)g(sky)g(co)r
-(ordinate)f(pro)5 b(jections)26 b(as)h(describ)r(ed)g(in)h(the)g(FITS)g
-(w)n(orld)227 2117 y(co)r(ordinate)k(system)g(\(FITS-W)n(CS\))i(pap)r
-(er)e(I)r(I)h Ft(")p Fj(Represen)n(tations)e(of)i(Celestial)f(Co)r
-(ordinates)f(in)i(FITS)p Ft(")g Fj(b)n(y)227 2216 y(M.)c(Calabretta)f
-(and)g(E.W.)h(Griesen.)40 b(This)29 b(pap)r(er)f(de\014nes)h(a)f(set)h
-(of)f(functions,)i(or)e(sky)g(pro)5 b(jections,)28 b(whic)n(h)227
-2316 y(transform)33 b(longitude-latitude)g(pairs)g(represen)n(ting)f
-(spherical)h(celestial)g(co)r(ordinates)f(in)n(to)i(corresp)r(onding)
-227 2416 y(pairs)27 b(of)g(Cartesian)g(co)r(ordinates)f(\(and)i(vice)f
-(v)n(ersa\).)227 2537 y(A)k(WcsMap)f(is)g(a)g(sp)r(ecialised)g(form)g
-(of)g(Mapping)g(whic)n(h)g(implemen)n(ts)h(these)f(sky)g(pro)5
-b(jections)29 b(and)h(applies)227 2637 y(them)25 b(to)g(a)f(sp)r
-(eci\014ed)h(pair)f(of)g(co)r(ordinates.)35 b(All)25
-b(the)g(pro)5 b(jections)23 b(in)i(the)g(FITS-W)n(CS)g(pap)r(er)f(are)g
-(supp)r(orted,)227 2737 y(plus)32 b(the)f(no)n(w)g(deprecated)f
-Ft(")p Fj(T)-7 b(AN)32 b(with)f(p)r(olynomial)g(correction)e(terms)p
-Ft(")i Fj(pro)5 b(jection)30 b(whic)n(h)h(is)g(refered)g(to)227
-2836 y(here)22 b(b)n(y)g(the)g(co)r(de)g Ft(")p Fj(TPN)p
-Ft(")p Fj(.)34 b(Using)22 b(the)g(FITS-W)n(CS)g(terminology)-7
-b(,)22 b(the)g(transformation)f(is)h(b)r(et)n(w)n(een)g
-Ft(")p Fj(nativ)n(e)227 2936 y(spherical)p Ft(")e Fj(and)h
-Ft(")p Fj(pro)5 b(jection)19 b(plane)p Ft(")i Fj(co)r(ordinates)e
-(\(also)h(called)h Ft(")p Fj(in)n(termediate)f(w)n(orld)g(co)r
-(ordinates)p Ft(")p Fj(.)33 b(These)227 3036 y(co)r(ordinates)20
-b(ma)n(y)-7 b(,)22 b(optionally)-7 b(,)22 b(b)r(e)g(em)n(b)r(edded)g
-(in)g(a)f(space)g(with)g(more)g(than)h(t)n(w)n(o)e(dimensions,)j(the)f
-(remaining)227 3135 y(co)r(ordinates)g(b)r(eing)h(copied)g(unc)n
-(hanged.)35 b(Note,)24 b(ho)n(w)n(ev)n(er,)e(that)i(for)e(consistency)h
-(with)g(other)g(AST)h(facilities,)227 3235 y(a)30 b(WcsMap)f(handles)h
-(co)r(ordinates)f(that)h(represen)n(t)e(angles)h(in)h(radians)f
-(\(rather)g(than)h(the)g(degrees)f(used)h(b)n(y)227 3334
-y(FITS-W)n(CS\).)227 3456 y(The)i(t)n(yp)r(e)g(of)f(FITS-W)n(CS)h(pro)5
-b(jection)31 b(to)g(b)r(e)h(used)g(and)f(the)h(co)r(ordinates)e
-(\(axes\))h(to)h(whic)n(h)f(it)h(applies)g(are)227 3556
-y(sp)r(eci\014ed)g(when)g(a)g(WcsMap)g(is)f(\014rst)h(created.)49
-b(The)32 b(pro)5 b(jection)31 b(t)n(yp)r(e)h(ma)n(y)f(subsequen)n(tly)g
-(b)r(e)h(determined)227 3655 y(using)g(the)f(WcsT)n(yp)r(e)h(attribute)
-g(and)f(the)h(co)r(ordinates)e(on)i(whic)n(h)f(it)h(acts)f(ma)n(y)g(b)r
-(e)h(determined)g(using)f(the)227 3755 y(WcsAxis\(lonlat\))d
-(attribute.)227 3877 y(Eac)n(h)37 b(WcsMap)i(also)e(allo)n(ws)g(up)i
-(to)f(100)f Ft(")p Fj(pro)5 b(jection)37 b(parameters)p
-Ft(")f Fj(to)i(b)r(e)h(asso)r(ciated)e(with)i(eac)n(h)e(axis.)227
-3976 y(These)31 b(sp)r(ecify)h(the)g(precise)f(form)g(of)g(the)h(pro)5
-b(jection,)31 b(and)h(are)e(accessed)g(using)h(PVi)p
-Ft(_)p Fj(m)h(attribute,)g(where)227 4076 y Ft(")p Fj(i)p
-Ft(")27 b Fj(is)h(the)g(in)n(teger)f(axis)h(index)f(\(starting)h(at)g
-(1\),)f(and)h(m)g(is)g(an)g(in)n(teger)f Ft(")p Fj(parameter)f(index)p
-Ft(")h Fj(in)h(the)h(range)d(0)227 4176 y(to)i(99.)39
-b(The)28 b(n)n(um)n(b)r(er)g(of)g(pro)5 b(jection)27
-b(parameters)g(required)g(b)n(y)h(eac)n(h)g(pro)5 b(jection,)27
-b(and)i(their)f(meanings,)g(are)227 4275 y(dep)r(enden)n(t)c(up)r(on)e
-(the)h(pro)5 b(jection)22 b(t)n(yp)r(e)h(\(most)g(pro)5
-b(jections)21 b(either)h(do)h(not)f(use)h(an)n(y)f(pro)5
-b(jection)21 b(parameters,)227 4375 y(or)h(use)g(parameters)f(1)h(and)g
-(2)g(asso)r(ciated)f(with)i(the)g(latitude)g(axis\).)35
-b(Before)21 b(creating)h(a)g(WcsMap)g(y)n(ou)g(should)227
-4475 y(consult)31 b(the)h(FITS-W)n(CS)g(pap)r(er)e(for)h(details)g(of)h
-(whic)n(h)f(pro)5 b(jection)30 b(parameters)g(are)g(required,)i(and)f
-(whic)n(h)227 4574 y(ha)n(v)n(e)h(defaults.)53 b(When)34
-b(creating)e(the)h(WcsMap,)h(y)n(ou)e(m)n(ust)h(explicitly)g(set)g(v)-5
-b(alues)33 b(for)f(all)h(those)g(required)227 4674 y(pro)5
-b(jection)27 b(parameters)f(whic)n(h)h(do)h(not)f(ha)n(v)n(e)g
-(defaults)g(de\014ned)h(in)g(this)g(pap)r(er.)0 4818
-y Fd(Constructor)k(F)-8 b(unction:)227 4917 y Fj(astWcsMap)-2
-5061 y Fd(Inheritance)n(:)227 5207 y Fj(The)28 b(WcsMap)f(class)g
-(inherits)g(from)h(the)g(Mapping)f(class.)-2 5351 y Fd(A)m(ttributes)n
-(:)227 5497 y Fj(In)36 b(addition)g(to)g(those)g(attributes)g(common)f
-(to)h(all)g(Mappings,)h(ev)n(ery)e(WcsMap)h(also)f(has)g(the)i(follo)n
-(wing)227 5597 y(attributes:)p eop end
-%%Page: 525 535
-TeXDict begin 525 534 bop 3643 52 a FF(525)340 351 y
-Fi(\017)45 b Fj(NatLat:)37 b(Nativ)n(e)27 b(latitude)h(of)g(the)g
-(reference)e(p)r(oin)n(t)i(of)g(a)f(FITS-W)n(CS)h(pro)5
-b(jection)340 483 y Fi(\017)45 b Fj(NatLon:)37 b(Nativ)n(e)27
-b(longitude)g(of)h(the)g(reference)f(p)r(oin)n(t)g(of)h(a)f(FITS-W)n
-(CS)h(pro)5 b(jection)340 614 y Fi(\017)45 b Fj(PVi)p
-Ft(_)p Fj(m:)37 b(FITS-W)n(CS)28 b(pro)5 b(jection)26
-b(parameters)340 746 y Fi(\017)45 b Fj(PVMax:)36 b(Maxim)n(um)28
-b(n)n(um)n(b)r(er)f(of)h(FITS-W)n(CS)f(pro)5 b(jection)27
-b(parameters)340 877 y Fi(\017)45 b Fj(WcsAxis\(lonlat\):)37
-b(FITS-W)n(CS)28 b(pro)5 b(jection)27 b(axes)340 1009
-y Fi(\017)45 b Fj(WcsT)n(yp)r(e:)37 b(FITS-W)n(CS)28
-b(pro)5 b(jection)26 b(t)n(yp)r(e)-2 1170 y Fd(F)-8 b(unctions)n(:)227
-1316 y Fj(The)36 b(WcsMap)f(class)f(do)r(es)i(not)f(de\014ne)h(an)n(y)e
-(new)i(functions)g(b)r(ey)n(ond)f(those)g(whic)n(h)g(are)g(applicable)g
-(to)g(all)227 1415 y(Mappings.)p 0 1612 3780 12 v 0 1744
-a Fz(WinMap)180 b Fe(Map)39 b(one)g(windo)m(w)e(on)h(to)g(another)g(b)m
-(y)g(scaling)g(and)1449 1858 y(shifting)f(eac)m(h)h(axis)3261
-1744 y Fz(WinMap)0 2045 y Fd(Description:)44 b Fj(A)26
-b(Winmap)g(is)g(a)f(linear)g(Mapping)h(whic)n(h)f(transforms)f(a)i
-(rectangular)d(windo)n(w)j(in)f(one)h(co)r(ordinate)227
-2144 y(system)k(in)n(to)f(a)g(similar)g(windo)n(w)g(in)g(another)g(co)r
-(ordinate)f(system)i(b)n(y)f(scaling)f(and)i(shifting)g(eac)n(h)e(axis)
-h(\(the)227 2244 y(windo)n(w)e(edges)g(b)r(eing)h(parallel)e(to)i(the)g
-(co)r(ordinate)e(axes\).)227 2368 y(A)g(WinMap)g(is)g(sp)r(eci\014ed)g
-(b)n(y)g(giving)f(the)h(co)r(ordinates)e(of)i(t)n(w)n(o)f(opp)r(osite)g
-(corners)f(\(A)j(and)e(B\))h(of)g(the)g(windo)n(w)227
-2467 y(in)i(b)r(oth)g(the)g(input)h(and)e(output)h(co)r(ordinate)f
-(systems.)0 2616 y Fd(Constructor)32 b(F)-8 b(unction:)227
-2715 y Fj(astWinMap)-2 2863 y Fd(Inheritance)n(:)227
-3009 y Fj(The)28 b(WinMap)g(class)e(inherits)i(from)f(the)h(Mapping)f
-(class.)-2 3158 y Fd(A)m(ttributes)n(:)227 3304 y Fj(The)34
-b(WinMap)g(class)f(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)h
-(attributes)g(b)r(ey)n(ond)f(those)h(whic)n(h)f(are)g(applicable)g(to)h
-(all)227 3403 y(Mappings.)-2 3551 y Fd(F)-8 b(unctions)n(:)227
-3698 y Fj(The)36 b(WinMap)g(class)e(do)r(es)h(not)h(de\014ne)f(an)n(y)g
-(new)h(functions)f(b)r(ey)n(ond)h(those)f(whic)n(h)g(are)g(applicable)g
-(to)g(all)227 3797 y(Mappings.)p 0 3994 V 0 4126 a Fz(XmlChan)716
-4132 y Fe(I/O)k(Channel)e(using)i(XML)g(to)f(represen)m(t)g(Ob)7
-b(jects)3217 4126 y Fz(XmlChan)0 4330 y Fd(Description:)44
-b Fj(A)28 b(XmlChan)f(is)g(a)f(sp)r(ecialised)g(form)h(of)g(Channel)g
-(whic)n(h)g(supp)r(orts)f(XML)h(I/O)f(op)r(erations.)36
-b(W)-7 b(rit-)227 4429 y(ing)33 b(an)f(Ob)5 b(ject)33
-b(to)f(an)h(XmlChan)g(\(using)g(astW)-7 b(rite\))32 b(will,)j(if)e(the)
-g(Ob)5 b(ject)33 b(is)f(suitable,)i(generate)e(an)g(XML)227
-4529 y(description)27 b(of)g(that)g(Ob)5 b(ject,)28 b(and)f(reading)e
-(from)i(an)g(XmlChan)h(will)f(create)f(a)h(new)g(Ob)5
-b(ject)27 b(from)g(its)g(XML)227 4629 y(description.)227
-4752 y(Normally)-7 b(,)36 b(when)e(y)n(ou)g(use)g(an)h(XmlChan,)h(y)n
-(ou)e(should)g(pro)n(vide)g Ft(")p Fj(source)p Ft(")e
-Fj(and)i Ft(")p Fj(sink)p Ft(")g Fj(functions)h(whic)n(h)227
-4852 y(connect)21 b(it)g(to)g(an)g(external)f(data)g(store)g(b)n(y)h
-(reading)f(and)g(writing)h(the)g(resulting)f(XML)i(text.)35
-b(These)20 b(functions)227 4952 y(should)40 b(p)r(erform)f(an)n(y)h
-(con)n(v)n(ersions)d(needed)j(b)r(et)n(w)n(een)g(external)f(c)n
-(haracter)f(enco)r(dings)h(and)h(the)g(in)n(ternal)227
-5051 y(ASCI)r(I)31 b(enco)r(ding.)44 b(If)31 b(no)f(suc)n(h)g
-(functions)g(are)f(supplied,)i(a)f(Channel)g(will)h(read)e(from)h
-(standard)f(input)i(and)227 5151 y(write)d(to)f(standard)g(output.)0
-5299 y Fd(Constructor)32 b(F)-8 b(unction:)227 5399 y
-Fj(astXmlChan)-2 5547 y Fd(Inheritance)n(:)227 5693 y
-Fj(The)28 b(XmlChan)g(class)e(inherits)i(from)f(the)h(Channel)g(class.)
-p eop end
-%%Page: 526 536
-TeXDict begin 526 535 bop 0 52 a FF(526)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)-2 351 y Fd(A)m(ttributes)n(:)227
-497 y Fj(In)36 b(addition)f(to)g(those)g(attributes)h(common)f(to)g
-(all)g(Channels,)i(ev)n(ery)d(XmlChan)i(also)e(has)h(the)h(follo)n
-(wing)227 597 y(attributes:)340 858 y Fi(\017)45 b Fj(XmlF)-7
-b(ormat:)37 b(System)28 b(for)f(formatting)g(Ob)5 b(jects)27
-b(as)g(XML)340 991 y Fi(\017)45 b Fj(XmlInden)n(t:)38
-b(Con)n(trols)26 b(output)i(of)g(inden)n(tation)f(and)h(line)f(feeds)
-340 1124 y Fi(\017)45 b Fj(XmlLength:)38 b(Con)n(trols)26
-b(output)i(bu\013er)g(length)340 1256 y Fi(\017)45 b
-Fj(XmlPre\014x:)37 b(The)27 b(namespace)g(pre\014x)g(to)g(use)h(when)g
-(writing)-2 1418 y Fd(F)-8 b(unctions)n(:)227 1564 y
-Fj(The)34 b(XmlChan)g(class)e(do)r(es)h(not)h(de\014ne)f(an)n(y)g(new)h
-(functions)f(b)r(ey)n(ond)h(those)f(whic)n(h)g(are)g(applicable)g(to)g
-(all)227 1664 y(Mappings.)p 0 1863 3780 12 v 0 1994 a
-Fz(Zo)t(omMap)1000 1995 y Fe(Zo)s(om)38 b(co)s(ordinates)e(ab)s(out)i
-(the)h(origin)3179 1994 y Fz(Zo)t(omMap)0 2184 y Fd(Description:)44
-b Fj(The)27 b(Zo)r(omMap)f(class)h(implemen)n(ts)g(a)f(Mapping)h(whic)n
-(h)g(p)r(erforms)f(a)h Ft(")p Fj(zo)r(om)p Ft(")f Fj(transformation)f
-(b)n(y)227 2283 y(m)n(ultiplying)g(all)g(co)r(ordinate)f(v)-5
-b(alues)25 b(b)n(y)f(the)i(same)e(scale)g(factor)h(\(the)g(in)n(v)n
-(erse)f(transformation)f(is)i(p)r(erformed)227 2383 y(b)n(y)39
-b(dividing)g(b)n(y)g(this)h(scale)e(factor\).)72 b(The)39
-b(n)n(um)n(b)r(er)g(of)g(co)r(ordinate)f(v)-5 b(alues)39
-b(represen)n(ting)f(eac)n(h)g(p)r(oin)n(t)i(is)227 2483
-y(unc)n(hanged.)0 2632 y Fd(Constructor)32 b(F)-8 b(unction:)227
-2732 y Fj(astZo)r(omMap)-2 2881 y Fd(Inheritance)n(:)227
-3027 y Fj(The)28 b(Zo)r(omMap)f(class)f(inherits)i(from)f(the)h
-(Mapping)f(class.)-2 3177 y Fd(A)m(ttributes)n(:)227
-3323 y Fj(In)33 b(addition)f(to)h(those)f(attributes)g(common)g(to)g
-(all)h(Mappings,)g(ev)n(ery)e(Zo)r(omMap)g(also)h(has)g(the)h(follo)n
-(wing)227 3422 y(attributes:)340 3683 y Fi(\017)45 b
-Fj(Zo)r(om:)36 b(Zo)r(omMap)27 b(scale)g(factor)-2 3845
-y Fd(F)-8 b(unctions)n(:)227 3991 y Fj(The)32 b(Zo)r(omMap)g(class)f
-(do)r(es)g(not)i(de\014ne)f(an)n(y)f(new)h(functions)h(b)r(ey)n(ond)f
-(those)f(whic)n(h)h(are)f(applicable)h(to)g(all)227 4091
-y(Mappings.)p eop end
-%%Page: 527 537
-TeXDict begin 527 536 bop 3643 52 a FF(527)0 351 y Fz(E)135
-b(UNIX)45 b(Command)g(Descriptions)0 594 y FF(The)35
-b(commands)h(describ)s(ed)e(here)i(are)g(pro)m(vided)f(for)h(use)f
-(from)g(the)h(UNIX)g(shell)g(to)h(assist)f(with)f(dev)m(el-)0
-694 y(oping)e(soft)m(w)m(are)g(whic)m(h)g(uses)f(AST.)g(T)-8
-b(o)32 b(use)h(these)g(commands,)f(y)m(ou)h(should)f(ensure)f(that)i
-(the)g(directory)0 793 y(\\/star/bin")459 760 y Fv(37)565
-793 y FF(is)e(on)f(y)m(our)g(P)-8 b(A)g(TH.)p 0 945 3780
-12 v 0 1076 a Fz(ast)p Fb(_)p Fz(link)476 b Fe(Link)39
-b(a)f(program)e(with)i(the)h(AST)f(library)473 b Fz(ast)p
-Fb(_)p Fz(link)0 1270 y Fd(Description:)44 b Fj(This)36
-b(command)g(should)g(b)r(e)h(used)f(when)g(building)g(programs)e(whic)n
-(h)i(use)g(the)h(AST)f(library)-7 b(,)37 b(in)227 1369
-y(order)21 b(to)g(generate)f(the)i(correct)f(argumen)n(ts)f(to)h(allo)n
-(w)g(the)h(compiler)f(to)g(link)h(y)n(our)e(program.)33
-b(The)22 b(argumen)n(ts)227 1469 y(generated)k(are)g(written)h(to)f
-(standard)g(output)i(but)f(ma)n(y)f(b)r(e)h(substituted)h(in)n(to)f
-(the)g(compiler)f(command)g(line)227 1568 y(in)i(the)g(standard)f(UNIX)
-h(w)n(a)n(y)f(using)g(bac)n(kw)n(ard)e(quotes)i(\(see)h(b)r(elo)n(w\).)
-227 1695 y(By)35 b(default,)j(it)d(is)h(assumed)e(that)i(y)n(ou)e(are)g
-(building)i(a)f(stand-alone)f(program)f(whic)n(h)i(do)r(es)g(not)g(pro)
-r(duce)227 1795 y(graphical)26 b(output.)38 b(Ho)n(w)n(ev)n(er,)25
-b(switc)n(hes)i(are)g(pro)n(vided)g(for)g(linking)g(other)g(t)n(yp)r
-(es)h(of)f(program.)0 1949 y Fd(In)m(v)m(o)s(cation:)123
-b Ft(cc)43 b(program.c)c(-L/star/lib)g(`ast_link)h([switches]`)f(-o)k
-(program)0 2102 y Fd(Examples:)227 2244 y Fq(cc)k(display.c)f
-(-L/star/lib)e(`ast)p Ft(_)p Fq(link)i(-pgplot`)f(-o)i(display)427
-2343 y Fj(Compiles)21 b(and)g(links)g(a)g(C)g(program)e(called)i
-(\\displa)n(y")f(whic)n(h)h(uses)f(the)i(standard)e(v)n(ersion)g(of)h
-(PGPLOT)427 2442 y(for)27 b(graphical)f(output.)227 2578
-y Fq(cc)47 b(plotit.c)f(-L.)h(-L/star/lib)e(`ast)p Ft(_)p
-Fq(link)g(-grf`)h(-lgrf)g(-o)i(plotit)427 2677 y Fj(Compiles)28
-b(and)f(links)h(a)f(C)h(program)d(\\plotit".)37 b(The)28
-b(\\-grf)6 b(")26 b(switc)n(h)i(indicates)f(that)h(graphical)e(output)
-427 2777 y(will)31 b(b)r(e)g(deliv)n(ered)e(through)h(a)g(graphical)f
-(in)n(terface)g(whic)n(h)i(y)n(ou)e(ha)n(v)n(e)h(implemen)n(ted)h(y)n
-(ourself,)f(whic)n(h)427 2876 y(corresp)r(onds)h(to)i(the)g(in)n
-(terface)f(required)g(b)n(y)g(the)h(curren)n(t)f(v)n(ersion)f(of)i
-(AST.)g(Here,)h(this)f(in)n(terface)f(is)427 2976 y(supplied)c(b)n(y)g
-(means)f(of)g(the)h(\\-lgrf)6 b(")26 b(library)h(reference.)227
-3112 y Fq(cc)47 b(plotit.c)f(-L.)h(-L/star/lib)e(`ast)p
-Ft(_)p Fq(link)g(-grf)p Ft(_)p Fq(v2.0`)g(-lgrf)h(-o)h(plotit)427
-3210 y Fj(Compiles)34 b(and)f(links)h(a)f(C)h(program)e(\\plotit".)55
-b(The)34 b(\\-grf)p Ft(_)p Fj(v2.0")c(switc)n(h)k(indicates)f(that)h
-(graphical)427 3310 y(output)28 b(will)g(b)r(e)g(deliv)n(ered)f
-(through)g(a)g(graphical)f(in)n(terface)h(whic)n(h)g(y)n(ou)g(ha)n(v)n
-(e)g(implemen)n(ted)h(y)n(ourself,)427 3410 y(whic)n(h)37
-b(corresp)r(onds)e(to)i(the)g(in)n(terface)g(required)f(b)n(y)g(v)n
-(ersion)g(2.0)g(of)h(AST.)g(Here,)i(this)e(in)n(terface)g(is)427
-3509 y(supplied)28 b(b)n(y)g(means)f(of)g(the)h(\\-lgrf)6
-b(")26 b(library)h(reference.)-2 3675 y Fd(Switc)m(hes)n(:)227
-3822 y Fj(The)h(follo)n(wing)e(switc)n(hes)i(ma)n(y)e(optionally)h(b)r
-(e)h(giv)n(en)f(to)g(this)h(command)g(to)f(mo)r(dify)h(its)g(b)r(eha)n
-(viour:)340 4089 y Fi(\017)45 b Fj(\\-csla":)35 b(Ignored.)h(Pro)n
-(vided)26 b(for)h(bac)n(kw)n(ard)e(compatibilit)n(y)j(only)-7
-b(.)340 4224 y Fi(\017)45 b Fj(\\-fsla":)36 b(Ignored.)f(Pro)n(vided)26
-b(for)h(bac)n(kw)n(ard)f(compatibilit)n(y)h(only)-7 b(.)340
-4359 y Fi(\017)45 b Fj(\\-ems":)e(Requests)31 b(that)g(the)h(program)d
-(b)r(e)i(link)n(ed)g(so)g(that)g(error)e(messages)h(pro)r(duced)h(b)n
-(y)g(the)g(AST)427 4459 y(library)d(are)f(deliv)n(ered)h(via)g(the)i
-(Starlink)e(EMS)g(\(Error)f(Message)g(Service\))h(library)g(\(Starlink)
-g(System)427 4558 y(Note)g(SSN/4\).)37 b(By)27 b(default,)h(error)e
-(messages)g(are)g(simply)i(written)g(to)f(standard)g(error.)340
-4693 y Fi(\017)45 b Fj(\\-drama":)33 b(Requests)25 b(that)g(the)g
-(program)e(b)r(e)i(link)n(ed)f(so)g(that)h(error)e(messages)g(pro)r
-(duced)i(b)n(y)f(the)h(AST)427 4793 y(library)d(are)g(deliv)n(ered)g
-(via)h(the)g(DRAMA)h(Ers)e(\(Error)f(Rep)r(orting)i(Service\))f
-(library)-7 b(.)34 b(By)23 b(default,)i(error)427 4892
-y(messages)h(are)h(simply)g(written)h(to)g(standard)e(error.)340
-5027 y Fi(\017)45 b Fj(\\-grf)6 b(":)54 b(Requests)37
-b(that)g(no)f(argumen)n(ts)g(b)r(e)h(generated)f(to)g(sp)r(ecify)h
-(whic)n(h)g(2D)g(graphics)e(system)i(is)427 5127 y(used)c(to)g(displa)n
-(y)g(output)g(from)g(the)h(AST)f(library)-7 b(.)53 b(Y)-7
-b(ou)33 b(should)g(use)g(this)g(option)g(only)g(if)g(y)n(ou)g(ha)n(v)n
-(e)427 5227 y(implemen)n(ted)h(an)e(in)n(terface)h(to)f(a)h(new)g
-(graphics)e(system)i(y)n(ourself)f(and)g(wish)h(to)g(pro)n(vide)f(y)n
-(our)f(o)n(wn)427 5326 y(argumen)n(ts)i(for)h(linking)h(with)g(it.)58
-b(This)34 b(switc)n(h)h(di\013ers)f(from)g(the)h(other)f(\\grf)6
-b(")34 b(switc)n(hes)g(in)g(that)h(it)427 5426 y(assumes)21
-b(that)g(y)n(our)g(graphics)f(mo)r(dule)h(implemen)n(ts)h(the)g
-(complete)f(in)n(terface)g(required)g(b)n(y)g(the)g(curren)n(t)427
-5526 y(v)n(ersion)28 b(of)h(AST.)g(If)g(future)h(v)n(ersions)d(of)i
-(AST)g(in)n(tro)r(duce)f(new)h(functions)h(to)e(the)i(graphics)d(in)n
-(terface,)p 0 5607 1512 4 v 73 5661 a Fs(37)138 5693
-y Fr(Or)f(the)f(equiv)l(alen)n(t)g(directory)g(if)i(AST)e(is)h
-(installed)h(in)f(a)g(non-standard)f(lo)r(cation.)p eop
-end
-%%Page: 528 538
-TeXDict begin 528 537 bop 0 52 a FF(528)1988 b Fy(E)91
-b(UNIX)30 b(COMMAND)i(DESCRIPTIONS)427 351 y Fj(this)e(switc)n(h)g
-(will)g(cause)f(\\unresolv)n(ed)f(sym)n(b)r(ol")h(errors)e(to)j(o)r
-(ccur)f(during)h(linking,)g(w)n(arning)e(y)n(ou)h(that)427
-451 y(y)n(ou)24 b(need)g(to)h(implemen)n(t)g(new)f(functions)h(in)f(y)n
-(our)g(graphics)e(mo)r(dule.)37 b(T)-7 b(o)24 b(a)n(v)n(oid)e(suc)n(h)j
-(errors,)d(y)n(ou)i(can)427 551 y(use)34 b(one)f(of)h(the)g(other,)g(v)
-n(ersion-sp)r(eci\014c,)f(switc)n(hes)h(in)f(place)h(of)f(the)h(\\-grf)
-6 b(")32 b(switc)n(h,)k(but)e(these)f(will)427 650 y(cause)28
-b(run-time)h(errors)d(to)j(b)r(e)g(rep)r(orted)f(if)h(an)n(y)f(AST)h
-(function)h(is)e(in)n(v)n(ok)n(ed)g(whic)n(h)g(requires)g(facilities)
-427 750 y(not)g(in)g(the)g(implemen)n(ted)g(in)n(terface.)340
-885 y Fi(\017)45 b Fj(\\-grf)p Ft(_)p Fj(v2.0":)37 b(This)29
-b(switc)n(h)g(is)g(equiv)-5 b(alen)n(t)29 b(to)g(the)h(\\-m)n(ygrf)6
-b(")27 b(switc)n(h.)42 b(It)29 b(indicates)g(that)h(y)n(ou)e(w)n(an)n
-(t)h(to)427 984 y(link)e(with)g(y)n(our)e(o)n(wn)g(graphics)g(mo)r
-(dule)i(whic)n(h)f(implemen)n(ts)h(the)g(2D)f(graphics)f(in)n(terface)h
-(required)f(b)n(y)427 1084 y(V2.0)i(of)h(AST.)340 1219
-y Fi(\017)45 b Fj(\\-grf)p Ft(_)p Fj(v3.2":)30 b(Indicates)20
-b(that)g(y)n(ou)g(w)n(an)n(t)f(to)h(link)h(with)f(y)n(our)f(o)n(wn)h
-(graphics)f(mo)r(dule)h(whic)n(h)g(implemen)n(ts)427
-1319 y(the)28 b(2D)g(graphics)e(in)n(terface)h(required)g(b)n(y)g(V3.2)
-g(of)g(AST.)340 1454 y Fi(\017)45 b Fj(\\-m)n(y)n(err":)34
-b(Requests)26 b(that)h(no)g(argumen)n(ts)e(b)r(e)j(generated)d(to)i(sp)
-r(ecify)g(ho)n(w)f(error)f(messages)g(pro)r(duced)427
-1553 y(b)n(y)30 b(the)g(AST)g(library)e(should)i(b)r(e)g(deliv)n(ered.)
-42 b(Y)-7 b(ou)30 b(should)g(use)f(this)h(option)g(only)f(if)h(y)n(ou)f
-(ha)n(v)n(e)g(imple-)427 1653 y(men)n(ted)34 b(an)f(in)n(terface)f(to)i
-(a)e(new)i(error)d(deliv)n(ery)h(system)h(y)n(ourself)g(and)g(wish)g
-(to)g(pro)n(vide)f(y)n(our)g(o)n(wn)427 1752 y(argumen)n(ts)27
-b(for)g(linking)g(with)h(it.)340 1887 y Fi(\017)45 b
-Fj(\\-m)n(ygrf)6 b(":)46 b(This)33 b(switc)n(h)g(has)g(b)r(een)g(sup)r
-(erceeded)g(b)n(y)g(the)g(\\-grf)6 b(")32 b(switc)n(h,)i(but)g(is)f
-(retained)g(in)g(order)427 1987 y(to)26 b(allo)n(w)e(applications)h(to)
-h(b)r(e)g(link)n(ed)f(with)h(a)g(graphics)e(mo)r(dule)i(whic)n(h)g
-(implemen)n(ts)g(the)g(2D)f(in)n(terface)427 2087 y(used)j(b)n(y)f(AST)
-h(V2.0.)36 b(It)28 b(is)g(equiv)-5 b(alen)n(t)27 b(to)h(the)g(\\-grf)p
-Ft(_)p Fj(v2.0")c(switc)n(h.)340 2222 y Fi(\017)45 b
-Fj(\\-pgp":)53 b(Requests)36 b(that)h(the)f(program)f(b)r(e)h(link)n
-(ed)g(so)g(that)h(2D)f(graphical)f(output)i(from)e(the)i(AST)427
-2321 y(library)c(is)h(displa)n(y)n(ed)f(via)g(the)i(Starlink)e(v)n
-(ersion)g(of)h(the)g(PGPLOT)f(graphics)f(pac)n(k)-5 b(age)33
-b(\(whic)n(h)h(uses)427 2421 y(GKS)29 b(for)g(its)g(output\).)42
-b(By)29 b(default,)h(no)e(2D)h(graphics)f(pac)n(k)-5
-b(age)28 b(is)g(link)n(ed)h(and)g(this)h(will)f(result)g(in)g(an)427
-2521 y(error)d(at)h(run)h(time)g(if)g(AST)g(routines)f(are)g(in)n(v)n
-(ok)n(ed)f(that)i(attempt)g(to)f(generate)g(graphical)f(output.)340
-2656 y Fi(\017)45 b Fj(\\-pgplot":)40 b(Requests)30 b(that)g(the)g
-(program)e(b)r(e)i(link)n(ed)g(so)f(that)h(2D)g(graphical)e(output)i
-(from)g(the)g(AST)427 2755 y(library)25 b(is)h(displa)n(y)n(ed)e(via)i
-(the)g(standard)f(\(or)g(\\nativ)n(e"\))g(v)n(ersion)f(of)i(the)g
-(PGPLOT)f(graphics)f(pac)n(k)-5 b(age.)427 2855 y(By)32
-b(default,)j(no)d(2D)g(graphics)f(pac)n(k)-5 b(age)31
-b(is)h(link)n(ed)h(and)f(this)h(will)f(result)g(in)h(an)f(error)f(at)h
-(run)g(time)h(if)427 2954 y(AST)28 b(routines)f(are)g(in)n(v)n(ok)n(ed)
-f(that)i(attempt)g(to)g(generate)e(graphical)g(output.)340
-3089 y Fi(\017)45 b Fj(\\-grf3d":)d(Requests)30 b(that)i(no)e(argumen)n
-(ts)g(b)r(e)h(generated)f(to)h(sp)r(ecify)g(whic)n(h)g(3D)g(graphics)f
-(system)h(is)427 3189 y(used)i(to)g(displa)n(y)g(output)g(from)g(the)h
-(AST)f(library)-7 b(.)53 b(Y)-7 b(ou)33 b(should)g(use)g(this)g(option)
-g(only)g(if)g(y)n(ou)g(ha)n(v)n(e)427 3289 y(implemen)n(ted)25
-b(an)e(in)n(terface)g(to)h(a)f(new)h(3D)f(graphics)g(system)g(y)n
-(ourself)g(and)g(wish)h(to)f(pro)n(vide)g(y)n(our)f(o)n(wn)427
-3388 y(argumen)n(ts)27 b(for)g(linking)g(with)h(it.)340
-3523 y Fi(\017)45 b Fj(\\-pgp3d":)c(Requests)30 b(that)h(the)g(program)
-d(b)r(e)j(link)n(ed)f(so)g(that)h(3D)f(graphical)f(output)i(from)f(the)
-h(AST)427 3623 y(library)i(is)h(displa)n(y)n(ed)f(via)g(the)i(Starlink)
-e(v)n(ersion)g(of)h(the)g(PGPLOT)f(graphics)f(pac)n(k)-5
-b(age)33 b(\(whic)n(h)h(uses)427 3722 y(GKS)29 b(for)g(its)g(output\).)
-42 b(By)29 b(default,)h(no)e(3D)h(graphics)f(pac)n(k)-5
-b(age)28 b(is)g(link)n(ed)h(and)g(this)h(will)f(result)g(in)g(an)427
-3822 y(error)d(at)h(run)h(time)g(if)g(AST)g(routines)f(are)g(in)n(v)n
-(ok)n(ed)f(that)i(attempt)g(to)f(generate)g(graphical)f(output.)340
-3957 y Fi(\017)45 b Fj(\\-pgplot3d":)33 b(Requests)23
-b(that)h(the)g(program)e(b)r(e)i(link)n(ed)f(so)g(that)h(3D)g
-(graphical)e(output)i(from)f(the)h(AST)427 4057 y(library)h(is)h
-(displa)n(y)n(ed)e(via)i(the)g(standard)f(\(or)g(\\nativ)n(e"\))g(v)n
-(ersion)f(of)i(the)g(PGPLOT)f(graphics)f(pac)n(k)-5 b(age.)427
-4156 y(By)32 b(default,)j(no)d(3D)g(graphics)f(pac)n(k)-5
-b(age)31 b(is)h(link)n(ed)h(and)f(this)h(will)f(result)g(in)h(an)f
-(error)f(at)h(run)g(time)h(if)427 4256 y(AST)28 b(routines)f(are)g(in)n
-(v)n(ok)n(ed)f(that)i(attempt)g(to)g(generate)e(graphical)g(output.)-2
-4422 y Fd(SLALIB)n(:)227 4568 y Fj(The)j(AST)h(distribution)f(includes)
-g(a)f(cut)i(do)n(wn)e(subset)h(of)g(the)g(C)g(v)n(ersion)f(of)g(the)i
-(SLALIB)f(library)e(written)227 4668 y(b)n(y)h(P)n(at)g(W)-7
-b(allace.)38 b(This)28 b(subset)h(con)n(tains)e(only)h(the)g(functions)
-h(needed)f(b)n(y)g(the)h(AST)g(library)-7 b(.)37 b(It)29
-b(is)f(built)h(as)227 4768 y(part)24 b(of)f(the)i(pro)r(cess)d(of)i
-(building)g(AST)h(and)e(is)h(distributed)g(under)g(GPL)g(\(and)g(is)f
-(th)n(us)h(compatible)g(with)g(the)227 4867 y(AST)f(license\).)35
-b(Previous)20 b(v)n(ersion)h(of)h(this)g(script)g(allo)n(w)n(ed)f(AST)h
-(applications)f(to)h(b)r(e)h(link)n(ed)f(against)e(external)227
-4967 y(SLALIB)34 b(libraries)e(\(either)i(F)-7 b(ortran)33
-b(or)g(C\))h(rather)e(than)i(the)g(in)n(ternal)f(v)n(ersion.)54
-b(The)34 b(curren)n(t)e(v)n(ersion)h(of)227 5066 y(this)g(script)f(do)r
-(es)g(not)h(pro)n(vide)e(this)h(option,)i(and)e(alw)n(a)n(ys)f(uses)h
-(the)g(in)n(ternal)g(SLALIB)g(library)-7 b(.)51 b(Ho)n(w)n(ev)n(er,)227
-5166 y(for)25 b(bac)n(kw)n(ard)f(compatibilit)n(y)-7
-b(,)26 b(this)g(script)f(still)h(allo)n(ws)f(the)h Ft(")p
-Fj(-fsla)p Ft(")e Fj(and)h Ft(")p Fj(-csla)p Ft(")f Fj(\015ags)h
-(\(previously)f(used)i(for)227 5266 y(selecting)h(whic)n(h)h(v)n
-(ersion)e(of)i(SLALIB)f(to)h(use\))f(to)h(b)r(e)g(sp)r(eci\014ed,)g
-(but)g(they)g(will)g(b)r(e)g(ignored.)p 0 5469 3780 12
-v 0 5601 a Fz(ast)p Fb(_)p Fz(link)p Fb(_)p Fz(adam)189
-b Fe(Link)39 b(an)f(AD)m(AM)h(program)d(with)i(the)1581
-5715 y(AST)g(library)2948 5601 y Fz(ast)p Fb(_)p Fz(link)p
-Fb(_)p Fz(adam)p eop end
-%%Page: 529 539
-TeXDict begin 529 538 bop 3643 52 a FF(529)0 351 y Fd(Description:)44
-b Fj(This)21 b(command)e(should)h(only)g(b)r(e)h(used)f(when)h
-(building)f(Starlink)g(AD)n(AM)h(programs)d(whic)n(h)i(use)g(the)227
-451 y(AST)29 b(library)-7 b(,)27 b(in)h(order)f(to)h(generate)f(the)i
-(correct)e(argumen)n(ts)f(to)i(allo)n(w)g(the)g(AD)n(AM)h(\\alink")e
-(command)h(to)227 551 y(link)22 b(the)h(program.)33 b(The)22
-b(argumen)n(ts)f(generated)g(are)g(written)h(to)g(standard)f(output)h
-(but)h(ma)n(y)e(b)r(e)i(substituted)227 650 y(in)n(to)28
-b(the)g(\\alink")e(command)h(line)h(in)g(the)g(standard)e(UNIX)j(w)n(a)
-n(y)d(using)h(bac)n(kw)n(ard)f(quotes)h(\(see)h(b)r(elo)n(w\).)227
-774 y(By)19 b(default,)i(it)f(is)e(assumed)h(that)g(y)n(ou)f(are)g
-(building)i(an)e(AD)n(AM)i(program)d(whic)n(h)i(do)r(es)g(not)g(pro)r
-(duce)f(graphical)227 874 y(output.)37 b(Ho)n(w)n(ev)n(er,)25
-b(switc)n(hes)g(are)g(pro)n(vided)g(for)h(linking)g(other)g(t)n(yp)r
-(es)g(of)g(program.)34 b(This)26 b(command)g(should)227
-974 y(not)40 b(b)r(e)g(used)f(when)h(building)g(stand-alone)e(\(non-AD)
-n(AM\))j(programs.)70 b(Use)40 b(the)g(\\ast)p Ft(_)p
-Fj(link")e(command)227 1073 y(instead.)0 1222 y Fd(In)m(v)m(o)s
-(cation:)123 b Ft(alink)41 b(program.o)f(-L/star/lib)f(`ast_link_adam)f
-([switches]`)0 1372 y Fd(Examples:)227 1509 y Fq(alink)47
-b(display.o)e(-L/star/lib)g(`ast)p Ft(_)p Fq(link)p Ft(_)p
-Fq(adam)e(-pgplot`)427 1607 y Fj(Links)20 b(an)g(AD)n(AM)h(program)d
-(\\displa)n(y")g(whic)n(h)j(uses)e(the)i(standard)e(v)n(ersion)g(of)h
-(PGPLOT)f(for)g(graphical)427 1707 y(output.)227 1840
-y Fq(alink)47 b(plotit.o)e(-L.)i(-L/star/lib)e(`ast)p
-Ft(_)p Fq(link)p Ft(_)p Fq(adam)e(-grf`)k(-lgrf)427 1939
-y Fj(Links)30 b(an)f(AD)n(AM)i(program)d(\\plotit",)i(written)g(in)g
-(C.)g(The)f(\\-grf)6 b(")29 b(switc)n(h)h(indicates)f(that)h(graphical)
-427 2039 y(output)e(will)g(b)r(e)g(deliv)n(ered)f(through)g(a)g
-(graphical)f(in)n(terface)h(whic)n(h)g(y)n(ou)g(ha)n(v)n(e)g(implemen)n
-(ted)h(y)n(ourself,)427 2138 y(whic)n(h)22 b(corresp)r(onds)e(to)h(the)
-h(in)n(terface)f(required)g(b)n(y)h(the)g(curren)n(t)f(v)n(ersion)f(of)
-h(AST.)i(Here,)f(this)g(in)n(terface)427 2238 y(is)28
-b(supplied)g(b)n(y)f(means)g(of)h(the)g(\\-lgrf)6 b(")26
-b(library)g(reference.)227 2371 y Fq(alink)47 b(plotit.o)e(-L.)i
-(-L/star/lib)e(`ast)p Ft(_)p Fq(link)p Ft(_)p Fq(adam)e(-grf)p
-Ft(_)p Fq(v2.0`)i(-lgrf)427 2470 y Fj(Links)23 b(an)f(AD)n(AM)i
-(program)d(\\plotit",)i(written)g(in)g(C.)g(The)g(\\-grf)p
-Ft(_)p Fj(v2.0")d(switc)n(h)i(indicates)h(that)g(graph-)427
-2570 y(ical)h(output)i(will)e(b)r(e)h(deliv)n(ered)f(through)g(a)g
-(graphical)f(in)n(terface)h(whic)n(h)h(y)n(ou)f(ha)n(v)n(e)f(implemen)n
-(ted)i(y)n(our-)427 2669 y(self,)32 b(whic)n(h)f(corresp)r(onds)e(to)i
-(the)g(in)n(terface)f(required)g(b)n(y)h(v)n(ersion)e(2.0)h(of)h(AST.)h
-(Here,)f(this)g(in)n(terface)427 2769 y(is)d(supplied)g(b)n(y)f(means)g
-(of)h(the)g(\\-lgrf)6 b(")26 b(library)g(reference.)-2
-2930 y Fd(Switc)m(hes)n(:)227 3077 y Fj(The)i(follo)n(wing)e(switc)n
-(hes)i(ma)n(y)e(optionally)h(b)r(e)h(giv)n(en)f(to)g(this)h(command)g
-(to)f(mo)r(dify)h(its)g(b)r(eha)n(viour:)340 3337 y Fi(\017)45
-b Fj(\\-csla":)35 b(Ignored.)h(Pro)n(vided)26 b(for)h(bac)n(kw)n(ard)e
-(compatibilit)n(y)j(only)-7 b(.)340 3469 y Fi(\017)45
-b Fj(\\-fsla":)36 b(Ignored.)f(Pro)n(vided)26 b(for)h(bac)n(kw)n(ard)f
-(compatibilit)n(y)h(only)-7 b(.)340 3602 y Fi(\017)45
-b Fj(\\-grf)6 b(":)54 b(Requests)37 b(that)g(no)f(argumen)n(ts)g(b)r(e)
-h(generated)f(to)g(sp)r(ecify)h(whic)n(h)g(2D)g(graphics)e(system)i(is)
-427 3702 y(used)c(to)g(displa)n(y)g(output)g(from)g(the)h(AST)f
-(library)-7 b(.)53 b(Y)-7 b(ou)33 b(should)g(use)g(this)g(option)g
-(only)g(if)g(y)n(ou)g(ha)n(v)n(e)427 3801 y(implemen)n(ted)h(an)e(in)n
-(terface)h(to)f(a)h(new)g(graphics)e(system)i(y)n(ourself)f(and)g(wish)
-h(to)g(pro)n(vide)f(y)n(our)f(o)n(wn)427 3901 y(argumen)n(ts)i(for)h
-(linking)h(with)g(it.)58 b(This)34 b(switc)n(h)h(di\013ers)f(from)g
-(the)h(other)f(\\grf)6 b(")34 b(switc)n(hes)g(in)g(that)h(it)427
-4000 y(assumes)21 b(that)g(y)n(our)g(graphics)f(mo)r(dule)h(implemen)n
-(ts)h(the)g(complete)f(in)n(terface)g(required)g(b)n(y)g(the)g(curren)n
-(t)427 4100 y(v)n(ersion)28 b(of)h(AST.)g(If)g(future)h(v)n(ersions)d
-(of)i(AST)g(in)n(tro)r(duce)f(new)h(functions)h(to)e(the)i(graphics)d
-(in)n(terface,)427 4200 y(this)j(switc)n(h)g(will)g(cause)f(\\unresolv)
-n(ed)f(sym)n(b)r(ol")h(errors)e(to)j(o)r(ccur)f(during)h(linking,)g(w)n
-(arning)e(y)n(ou)h(that)427 4299 y(y)n(ou)24 b(need)g(to)h(implemen)n
-(t)g(new)f(functions)h(in)f(y)n(our)g(graphics)e(mo)r(dule.)37
-b(T)-7 b(o)24 b(a)n(v)n(oid)e(suc)n(h)j(errors,)d(y)n(ou)i(can)427
-4399 y(use)34 b(one)f(of)h(the)g(other,)g(v)n(ersion-sp)r(eci\014c,)f
-(switc)n(hes)h(in)f(place)h(of)f(the)h(\\-grf)6 b(")32
-b(switc)n(h,)k(but)e(these)f(will)427 4499 y(cause)28
-b(run-time)h(errors)d(to)j(b)r(e)g(rep)r(orted)f(if)h(an)n(y)f(AST)h
-(function)h(is)e(in)n(v)n(ok)n(ed)g(whic)n(h)g(requires)g(facilities)
-427 4598 y(not)g(in)g(the)g(implemen)n(ted)g(in)n(terface.)340
-4731 y Fi(\017)45 b Fj(\\-grf)p Ft(_)p Fj(v2.0":)37 b(This)29
-b(switc)n(h)g(is)g(equiv)-5 b(alen)n(t)29 b(to)g(the)h(\\-m)n(ygrf)6
-b(")27 b(switc)n(h.)42 b(It)29 b(indicates)g(that)h(y)n(ou)e(w)n(an)n
-(t)h(to)427 4830 y(link)e(with)g(y)n(our)e(o)n(wn)g(graphics)g(mo)r
-(dule)i(whic)n(h)f(implemen)n(ts)h(the)g(2D)f(graphics)f(in)n(terface)h
-(required)f(b)n(y)427 4930 y(V2.0)i(of)h(AST.)340 5062
-y Fi(\017)45 b Fj(\\-grf)p Ft(_)p Fj(v3.2":)30 b(Indicates)20
-b(that)g(y)n(ou)g(w)n(an)n(t)f(to)h(link)h(with)f(y)n(our)f(o)n(wn)h
-(graphics)f(mo)r(dule)h(whic)n(h)g(implemen)n(ts)427
-5162 y(the)28 b(2D)g(graphics)e(in)n(terface)h(required)g(b)n(y)g(V3.2)
-g(of)g(AST.)340 5295 y Fi(\017)45 b Fj(\\-m)n(y)n(err":)34
-b(Requests)26 b(that)h(no)g(argumen)n(ts)e(b)r(e)j(generated)d(to)i(sp)
-r(ecify)g(ho)n(w)f(error)f(messages)g(pro)r(duced)427
-5394 y(b)n(y)30 b(the)g(AST)g(library)e(should)i(b)r(e)g(deliv)n(ered.)
-42 b(Y)-7 b(ou)30 b(should)g(use)f(this)h(option)g(only)f(if)h(y)n(ou)f
-(ha)n(v)n(e)g(imple-)427 5494 y(men)n(ted)34 b(an)f(in)n(terface)f(to)i
-(a)e(new)i(error)d(deliv)n(ery)h(system)h(y)n(ourself)g(and)g(wish)g
-(to)g(pro)n(vide)f(y)n(our)g(o)n(wn)427 5593 y(argumen)n(ts)20
-b(for)h(linking)g(with)h(it.)35 b(By)21 b(default,)i(error)c(messages)h
-(are)g(deliv)n(ered)g(in)i(the)g(standard)e(AD)n(AM)427
-5693 y(w)n(a)n(y)27 b(via)g(the)h(EMS)f(Error)e(Message)h(Service)h
-(\(Starlink)h(System)f(Note)h(SSN/4\).)p eop end
-%%Page: 530 540
-TeXDict begin 530 539 bop 0 52 a FF(530)1988 b Fy(E)91
-b(UNIX)30 b(COMMAND)i(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(\\-m)n(ygrf)6 b(":)35 b(This)26 b(switc)n(h)g(has)g(b)r(een)h(sup)
-r(erceeded)f(b)n(y)g(the)h(\\-grf)6 b(")25 b(switc)n(h,)h(but)h(is)f
-(retained)g(in)h(order)e(to)427 451 y(allo)n(w)j(applications)g(to)h(b)
-r(e)g(link)n(ed)g(with)h(a)e(graphics)g(mo)r(dule)h(whic)n(h)g
-(implemen)n(ts)g(the)g(in)n(terface)g(used)427 551 y(b)n(y)f(AST)g
-(V2.0.)36 b(It)28 b(is)f(equiv)-5 b(alen)n(t)28 b(to)f(the)h(\\-grf)p
-Ft(_)p Fj(v2.0")c(switc)n(h.)340 683 y Fi(\017)45 b Fj(\\-pgp":)53
-b(Requests)36 b(that)h(the)f(program)f(b)r(e)h(link)n(ed)g(so)g(that)h
-(2D)f(graphical)f(output)i(from)e(the)i(AST)427 783 y(library)c(is)h
-(displa)n(y)n(ed)f(via)g(the)i(Starlink)e(v)n(ersion)g(of)h(the)g
-(PGPLOT)f(graphics)f(pac)n(k)-5 b(age)33 b(\(whic)n(h)h(uses)427
-883 y(GKS)25 b(for)g(its)g(output\).)36 b(By)25 b(default,)h(no)f
-(graphics)e(pac)n(k)-5 b(age)23 b(is)i(link)n(ed)g(and)g(this)g(will)g
-(result)g(in)g(an)g(error)427 982 y(at)j(run)f(time)h(if)g(AST)g
-(routines)f(are)g(in)n(v)n(ok)n(ed)f(that)i(attempt)g(to)g(generate)e
-(graphical)g(output.)340 1115 y Fi(\017)45 b Fj(\\-pgplot":)40
-b(Requests)30 b(that)g(the)g(program)e(b)r(e)i(link)n(ed)g(so)f(that)h
-(2D)g(graphical)e(output)i(from)g(the)g(AST)427 1215
-y(library)25 b(is)h(displa)n(y)n(ed)e(via)i(the)g(standard)f(\(or)g
-(\\nativ)n(e"\))g(v)n(ersion)f(of)i(the)g(PGPLOT)f(graphics)f(pac)n(k)
--5 b(age.)427 1314 y(By)29 b(default,)h(no)e(graphics)g(pac)n(k)-5
-b(age)27 b(is)i(link)n(ed)g(and)g(this)g(will)g(result)g(in)g(an)g
-(error)e(at)h(run)h(time)h(if)f(AST)427 1414 y(routines)e(are)g(in)n(v)
-n(ok)n(ed)f(that)i(attempt)g(to)g(generate)e(graphical)g(output.)340
-1547 y Fi(\017)45 b Fj(\\-grf3d":)d(Requests)30 b(that)i(no)e(argumen)n
-(ts)g(b)r(e)h(generated)f(to)h(sp)r(ecify)g(whic)n(h)g(3D)g(graphics)f
-(system)h(is)427 1646 y(used)i(to)g(displa)n(y)g(output)g(from)g(the)h
-(AST)f(library)-7 b(.)53 b(Y)-7 b(ou)33 b(should)g(use)g(this)g(option)
-g(only)g(if)g(y)n(ou)g(ha)n(v)n(e)427 1746 y(implemen)n(ted)25
-b(an)e(in)n(terface)g(to)h(a)f(new)h(3D)f(graphics)g(system)g(y)n
-(ourself)g(and)g(wish)h(to)f(pro)n(vide)g(y)n(our)f(o)n(wn)427
-1846 y(argumen)n(ts)27 b(for)g(linking)g(with)h(it.)340
-1978 y Fi(\017)45 b Fj(\\-pgp3d":)c(Requests)30 b(that)h(the)g(program)
-d(b)r(e)j(link)n(ed)f(so)g(that)h(3D)f(graphical)f(output)i(from)f(the)
-h(AST)427 2078 y(library)i(is)h(displa)n(y)n(ed)f(via)g(the)i(Starlink)
-e(v)n(ersion)g(of)h(the)g(PGPLOT)f(graphics)f(pac)n(k)-5
-b(age)33 b(\(whic)n(h)h(uses)427 2178 y(GKS)29 b(for)g(its)g(output\).)
-42 b(By)29 b(default,)h(no)e(3D)h(graphics)f(pac)n(k)-5
-b(age)28 b(is)g(link)n(ed)h(and)g(this)h(will)f(result)g(in)g(an)427
-2277 y(error)d(at)h(run)h(time)g(if)g(AST)g(routines)f(are)g(in)n(v)n
-(ok)n(ed)f(that)i(attempt)g(to)f(generate)g(graphical)f(output.)340
-2410 y Fi(\017)45 b Fj(\\-pgplot3d":)33 b(Requests)23
-b(that)h(the)g(program)e(b)r(e)i(link)n(ed)f(so)g(that)h(3D)g
-(graphical)e(output)i(from)f(the)h(AST)427 2510 y(library)h(is)h
-(displa)n(y)n(ed)e(via)i(the)g(standard)f(\(or)g(\\nativ)n(e"\))g(v)n
-(ersion)f(of)i(the)g(PGPLOT)f(graphics)f(pac)n(k)-5 b(age.)427
-2609 y(By)32 b(default,)j(no)d(3D)g(graphics)f(pac)n(k)-5
-b(age)31 b(is)h(link)n(ed)h(and)f(this)h(will)f(result)g(in)h(an)f
-(error)f(at)h(run)g(time)h(if)427 2709 y(AST)28 b(routines)f(are)g(in)n
-(v)n(ok)n(ed)f(that)i(attempt)g(to)g(generate)e(graphical)g(output.)-2
-2871 y Fd(SLALIB)n(:)227 3017 y Fj(The)j(AST)h(distribution)f(includes)
-g(a)f(cut)i(do)n(wn)e(subset)h(of)g(the)g(C)g(v)n(ersion)f(of)g(the)i
-(SLALIB)f(library)e(written)227 3117 y(b)n(y)h(P)n(at)g(W)-7
-b(allace.)38 b(This)28 b(subset)h(con)n(tains)e(only)h(the)g(functions)
-h(needed)f(b)n(y)g(the)h(AST)g(library)-7 b(.)37 b(It)29
-b(is)f(built)h(as)227 3216 y(part)24 b(of)f(the)i(pro)r(cess)d(of)i
-(building)g(AST)h(and)e(is)h(distributed)g(under)g(GPL)g(\(and)g(is)f
-(th)n(us)h(compatible)g(with)g(the)227 3316 y(AST)f(license\).)35
-b(Previous)20 b(v)n(ersion)h(of)h(this)g(script)g(allo)n(w)n(ed)f(AST)h
-(applications)f(to)h(b)r(e)h(link)n(ed)f(against)e(external)227
-3416 y(SLALIB)34 b(libraries)e(\(either)i(F)-7 b(ortran)33
-b(or)g(C\))h(rather)e(than)i(the)g(in)n(ternal)f(v)n(ersion.)54
-b(The)34 b(curren)n(t)e(v)n(ersion)h(of)227 3515 y(this)g(script)f(do)r
-(es)g(not)h(pro)n(vide)e(this)h(option,)i(and)e(alw)n(a)n(ys)f(uses)h
-(the)g(in)n(ternal)g(SLALIB)g(library)-7 b(.)51 b(Ho)n(w)n(ev)n(er,)227
-3615 y(for)25 b(bac)n(kw)n(ard)f(compatibilit)n(y)-7
-b(,)26 b(this)g(script)f(still)h(allo)n(ws)f(the)h Ft(")p
-Fj(-fsla)p Ft(")e Fj(and)h Ft(")p Fj(-csla)p Ft(")f Fj(\015ags)h
-(\(previously)f(used)i(for)227 3714 y(selecting)h(whic)n(h)h(v)n
-(ersion)e(of)i(SLALIB)f(to)h(use\))f(to)h(b)r(e)g(sp)r(eci\014ed,)g
-(but)g(they)g(will)g(b)r(e)g(ignored.)p eop end
-%%Page: 531 541
-TeXDict begin 531 540 bop 3643 52 a FF(531)0 351 y Fz(F)134
-b(FITS-W)l(CS)44 b(Co)l(v)l(erage)0 605 y FF(This)32
-b(app)s(endix)f(giv)m(es)i(details)h(of)e(the)h(FitsChan)f(class)h
-(implemen)m(tation)h(of)f(the)f(con)m(v)m(en)m(tions)j(describ)s(ed)0
-718 y(in)25 b(the)h(FITS-W)m(CS)g(pap)s(ers)e(a)m(v)-5
-b(ailable)28 b(at)f(h)m(ttp://\014ts.gsfc.nasa.go)m(v/\014ts)p
-Fq(_)p FF(w)m(cs.h)m(tml.)44 b(These)25 b(con)m(v)m(en)m(tions)0
-831 y(are)35 b(used)f(only)h(if)g(the)g(Enco)s(ding)f(attribute)h(of)g
-(the)g(FitsChan)g(has)f(the)h(v)-5 b(alue)35 b(\\FITS-W)m(CS")h
-(\(whether)0 944 y(set)f(explicitly)g(or)f(defaulted\).)52
-b(It)34 b(should)f(alw)m(a)m(ys)i(b)s(e)f(p)s(ossible)f(for)h(a)g(F)-8
-b(rameSet)36 b(to)e(b)s(e)g(read)f(\(using)h(the)0 1057
-y(astRead)i(function\))g(from)f(a)h(FitsChan)f(con)m(taining)i(a)f
-(header)f(whic)m(h)h(conforms)f(to)h(these)g(con)m(v)m(en)m(tions.)0
-1170 y(Ho)m(w)m(ev)m(er,)30 b(only)c(those)i(F)-8 b(rameSets)27
-b(whic)m(h)g(are)g(compatible)h(with)e(the)h(FITS-W)m(CS)f(mo)s(del)h
-(can)g(b)s(e)f Fx(written)0 1283 y FF(to)32 b(a)g(FitsChan)f(using)f
-(the)i(astW)-8 b(rite)33 b(function.)43 b(F)-8 b(or)32
-b(instance,)g(if)f(the)h(curren)m(t)f(F)-8 b(rame)32
-b(of)f(a)h(F)-8 b(rameSet)32 b(is)0 1396 y(re-mapp)s(ed)h(using,)i(sa)m
-(y)-8 b(,)37 b(an)d(arbitrary)g(MathMap)i(then)e(the)g(F)-8
-b(rameSet)36 b(will)e(no)h(longer)f(b)s(e)g(compatible)0
-1508 y(with)c(the)h(FITS-W)m(CS)f(mo)s(del,)g(and)g(so)g(will)h(not)g
-(b)s(e)f(written)g(out)h(successfully)f(to)h(a)g(FitsChan.)0
-1672 y(The)36 b(follo)m(wing)h(sub-sections)g(describ)s(e)e(the)i
-(details)g(of)f(the)h(implemen)m(tation)g(of)g(eac)m(h)g(of)f(the)h
-(\014rst)e(four)0 1785 y(FITS-W)m(CS)e(pap)s(ers.)49
-b(Here,)35 b(the)f(term)f(\\pixel)h(axes")h(is)e(used)g(to)h(refer)f
-(to)i(the)e(FITS)g(pixel)h(co)s(ordinates)0 1898 y(\(i.e.)72
-b(the)41 b(cen)m(tre)g(of)g(the)g(\014rst)e(image)j(pixel)f(has)f(a)h
-(v)-5 b(alue)41 b(1.0)g(on)g(eac)m(h)g(pixel)g(axis\);)47
-b(the)40 b(term)h(\\IW)m(C)0 2011 y(axes")35 b(is)f(used)f(to)i(refer)e
-(to)i(the)f(axes)g(of)g(the)g(In)m(termediate)i(W)-8
-b(orld)34 b(Co)s(ordinate)g(system;)i(and)d(the)h(term)0
-2124 y(\\W)m(CS)28 b(axes")g(is)g(used)e(to)i(refer)f(to)h(the)g(axes)g
-(of)g(the)f(\014nal)g(ph)m(ysical)h(co)s(ordinate)g(system)g(describ)s
-(ed)e(b)m(y)h(the)0 2236 y(CTYPE)p Fx(i)39 b FF(k)m(eyw)m(ords.)0
-2532 y Fw(F.1)113 b(P)m(ap)s(er)37 b(I)g(-)h(General)h(Linear)f(Co)s
-(ordinates)0 2755 y FF(When)27 b(reading)g(a)g(F)-8 b(rameSet)29
-b(from)d(a)h(FitsChan,)h(these)g(con)m(v)m(en)m(tions)h(are)e(used)f
-(if)h(the)h(CTYPE)p Fx(i)35 b FF(k)m(eyw)m(ord)0 2868
-y(v)-5 b(alues)42 b(within)f(the)h(FitsChan)g(do)f(not)h(conform)g(to)g
-(the)g(con)m(v)m(en)m(tions)i(describ)s(ed)c(in)i(later)g(pap)s(ers,)i
-(in)0 2981 y(whic)m(h)33 b(case)i(the)f(axes)g(are)g(assumed)f(to)h(b)s
-(e)f(linear.)51 b(When)33 b(writing)h(a)g(F)-8 b(rameSet)34
-b(to)h(a)f(FitsChan,)g(these)0 3094 y(con)m(v)m(en)m(tions)41
-b(are)f(used)f(for)g(axes)h(whic)m(h)f(are)h(describ)s(ed)e(b)m(y)h(a)h
-(simple)f(F)-8 b(rame)40 b(\()p Fx(i.e.)67 b FF(not)40
-b(a)g(SkyF)-8 b(rame,)0 3207 y(Sp)s(ecF)g(rame,)31 b
-Fx(etc.)p FF(\).)0 3370 y(T)-8 b(able)31 b(1)g(describ)s(es)e(the)i
-(use)f(made)g(b)m(y)h(AST)e(of)i(eac)m(h)g(k)m(eyw)m(ord)g(de\014ned)e
-(b)m(y)i(FITS-W)m(CS)f(pap)s(er)f(I.)0 3663 y FD(F.1.1)105
-b(Requiremen)m(ts)36 b(for)f(a)f(Successful)j(W)-9 b(rite)35
-b(Op)s(eration)0 3885 y FF(When)f(writing)g(a)h(F)-8
-b(rameSet)35 b(in)f(whic)m(h)f(the)i(W)m(CS)f(F)-8 b(rame)35
-b(is)f(a)h(simple)f(F)-8 b(rame)35 b(to)g(a)f(FitsChan,)h(success)0
-3998 y(dep)s(ends)28 b(on)i(the)g(Mapping)g(from)g(pixel)g(co)s
-(ordinates)h(\(the)f(base)g(F)-8 b(rame)31 b(in)f(the)g(F)-8
-b(rameSet\))32 b(to)e(the)g(W)m(CS)0 4111 y(F)-8 b(rame)31
-b(b)s(eing)f(linear.)41 b(The)30 b(write)h(op)s(eration)g(will)f(fail)h
-(if)g(this)f(is)g(not)h(the)g(case.)0 4404 y FD(F.1.2)105
-b(Use)35 b(and)g(Choice)g(of)g(CTYPE)p Fa(i)45 b FD(k)m(eyw)m(ords)0
-4626 y FF(When)37 b(reading)g(a)h(F)-8 b(rameSet)38 b(from)f(a)g
-(FitsChan)g(the)h(CTYPE)p Fx(i)45 b FF(v)-5 b(alues)38
-b(in)e(the)i(FitsChan)f(are)g(used)g(to)0 4739 y(set)32
-b(the)f(Sym)m(b)s(ol)g(attributes)h(of)f(the)g(corresp)s(onding)g(W)m
-(CS)g(F)-8 b(rame.)44 b(The)31 b(Lab)s(el)g(attributes)h(of)f(the)g(W)m
-(CS)0 4852 y(F)-8 b(rame)38 b(are)f(set)g(from)g(the)g(CNAME)p
-Fx(i)46 b FF(k)m(eyw)m(ords,)39 b(if)e(presen)m(t)g(in)f(the)h(header.)
-60 b(Otherwise)37 b(they)g(are)g(set)0 4965 y(from)42
-b(the)g(CTYPE)p Fx(i)51 b FF(commen)m(ts)43 b(strings)g(in)f(the)g
-(header,)k(so)c(long)h(as)g(eac)m(h)h(axis)e(has)h(a)f(unique)g(non-)0
-5078 y(blank)d(commen)m(t.)67 b(Otherwise,)41 b(the)e(Lab)s(el)g
-(attributes)g(are)h(set)f(to)h(the)f(CTYPE)p Fx(i)47
-b FF(v)-5 b(alues.)67 b(The)38 b(ab)s(o)m(v)m(e)0 5191
-y(pro)s(cedure)c(is)h(o)m(v)m(er-ridden)h(if)f(the)g(axis)g(t)m(yp)s
-(es)g(conform)g(to)h(the)f(con)m(v)m(en)m(tions)j(describ)s(ed)c(in)g
-(pap)s(er)g(I)s(I)g(or)0 5304 y(I)s(I)s(I,)29 b(as)i(describ)s(ed)e(b)s
-(elo)m(w.)0 5467 y(When)g(writing)h(a)g(F)-8 b(rameSet)31
-b(to)f(a)g(FitsChan,)g(eac)m(h)h(CTYPE)p Fx(i)38 b FF(v)-5
-b(alue)30 b(is)g(set)g(to)g(the)g(v)-5 b(alue)30 b(of)g(the)g(Sym)m(b)s
-(ol)0 5580 y(attribute)d(of)g(the)g(corresp)s(onding)e(axis)i(in)g(the)
-f(F)-8 b(rame)28 b(b)s(eing)e(written.)40 b(If)26 b(a)h(v)-5
-b(alue)27 b(has)f(b)s(een)g(set)h(explicitly)0 5693 y(for)i(the)g(axis)
-h(Lab)s(el)f(attribute,)h(it)g(is)f(used)g(as)g(the)h(axis)f(commen)m
-(t)i(\(except)f(that)g(an)m(y)f(existing)i(commen)m(ts)p
-eop end
-%%Page: 532 542
-TeXDict begin 532 541 bop 0 52 a FF(532)2489 b Fy(F)91
-b(FITS-W)m(CS)30 b(CO)m(VERA)m(GE)p 0 853 3841 4 v -2
-965 4 113 v 115 932 a FD(Keyw)m(ord)p 640 965 V 798 w(Read)p
-2240 965 V 1352 w(W)-9 b(rite)p 3839 965 V 0 969 3841
-4 v -2 1307 4 339 v 50 1048 a FF(W)m(CSAXES)p Fx(a)p
-640 1307 V 140 w FF(Ignored.)p 2240 1307 V 1273 w(Set)27
-b(to)h(the)f(n)m(um)m(b)s(er)e(of)i(axes)h(in)e(the)h(W)m(CS)2291
-1161 y(F)-8 b(rame)51 b(-)g(only)f(written)g(if)h(di\013eren)m(t)f(to)
-2291 1274 y(NAXIS.)p 3839 1307 V -2 1533 4 226 v 50 1386
-a(CR)-10 b(V)g(AL)p Fx(ia)p 640 1533 V 262 w FF(Used)24
-b(to)i(create)g(the)f(pixel)g(to)h(W)m(CS)f(Map-)692
-1499 y(ping.)p 2240 1533 V 2291 1386 a(Alw)m(a)m(ys)31
-b(written)f(\(see)h(\\Choice)g(of)f(Refer-)2291 1499
-y(ence)h(P)m(oin)m(t")h(b)s(elo)m(w\).)p 3839 1533 V
--2 1759 V 50 1612 a(CRPIX)p Fx(ja)p 640 1759 V 272 w
-FF(Used)24 b(to)i(create)g(the)f(pixel)g(to)h(W)m(CS)f(Map-)692
-1725 y(ping.)p 2240 1759 V 2291 1612 a(Alw)m(a)m(ys)31
-b(written)f(\(see)h(\\Choice)g(of)f(Refer-)2291 1725
-y(ence)h(P)m(oin)m(t")h(b)s(elo)m(w\).)p 3839 1759 V
--2 1985 V 50 1838 a(CDEL)-8 b(T)p Fx(ia)p 640 1985 V
-256 w FF(Used)24 b(to)i(create)g(the)f(pixel)g(to)h(W)m(CS)f(Map-)692
-1951 y(ping.)p 2240 1985 V 2291 1838 a(Only)63 b(written)h(if)g(the)g
-(CDMatrix)h(at-)2291 1951 y(tribute)30 b(of)h(the)g(FitsChan)f(is)g
-(set)h(to)g(zero.)p 3839 1985 V -2 2211 V 50 2064 a(CR)m(OT)-8
-b(A)p Fx(i)p 640 2211 V 287 w FF(Used)24 b(to)i(create)g(the)f(pixel)g
-(to)h(W)m(CS)f(Map-)692 2177 y(ping.)p 2240 2211 V 2291
-2064 a(Only)20 b(written)i(in)e(FITS-AIPS)g(and)h(FITS-)2291
-2177 y(AIPS++)29 b(enco)s(dings.)p 3839 2211 V -2 2888
-4 678 v 50 2290 a(CTYPE)p Fx(ia)p 640 2888 V 244 w FF(Used)66
-b(to)h(c)m(ho)s(ose)h(the)f(class)g(and)f(at-)692 2403
-y(tributes)46 b(of)h(the)f(W)m(CS)h(F)-8 b(rame,)52 b(and)46
-b(to)692 2516 y(create)63 b(the)f(pixel)g(to)g(W)m(CS)g(Mapping)692
-2629 y(\(note,)35 b(\\STOKES")d(and)h(\\COMPLEX")692
-2741 y(axes)53 b(are)g(treated)h(as)f(unkno)m(wn)e(linear)692
-2854 y(axes\).)p 2240 2888 V 2291 2290 a(Alw)m(a)m(ys)36
-b(written)f(\(see)g(\\Use)h(and)d(Choice)2291 2403 y(of)e(CTYPE)e(k)m
-(eyw)m(ords")i(b)s(elo)m(w\).)p 3839 2888 V -2 3340 4
-452 v 50 2967 a(CUNIT)p Fx(ia)p 640 3340 V 267 w FF(Used)25
-b(to)i(set)g(the)f(Units)g(attributes)h(of)f(the)692
-3080 y(W)m(CS)k(F)-8 b(rame.)p 2240 3340 V 2291 2967
-a(Only)32 b(written)h(if)g(the)g(Units)f(attribute)i(of)2291
-3080 y(the)39 b(W)m(CS)f(F)-8 b(rame)39 b(has)f(b)s(een)g(set)h
-(explic-)2291 3193 y(itly)-8 b(.)84 b(If)44 b(so,)49
-b(the)44 b(Units)h(v)-5 b(alue)45 b(for)f(eac)m(h)2291
-3306 y(axis)31 b(is)f(used)g(as)h(the)f(CUNIT)g(v)-5
-b(alue.)p 3839 3340 V -2 3566 4 226 v 50 3419 a(PC)p
-Fx(i)p Fq(_)p Fx(j)13 b(a)p 640 3566 V 351 w FF(Used)24
-b(to)i(create)g(the)f(pixel)g(to)h(W)m(CS)f(Map-)692
-3532 y(ping.)p 2240 3566 V 2291 3419 a(Only)63 b(written)h(if)g(the)g
-(CDMatrix)h(at-)2291 3532 y(tribute)30 b(of)h(the)g(FitsChan)f(is)g
-(set)h(to)g(zero.)p 3839 3566 V -2 3904 4 339 v 50 3645
-a(CD)p Fx(i)p Fq(_)p Fx(j)13 b(a)p 640 3904 V 344 w FF(Used)24
-b(to)i(create)g(the)f(pixel)g(to)h(W)m(CS)f(Map-)692
-3758 y(ping.)p 2240 3904 V 2291 3645 a(Only)63 b(written)h(if)g(the)g
-(CDMatrix)h(at-)2291 3758 y(tribute)23 b(of)g(the)h(FitsChan)e(is)i
-(set)f(to)h(a)f(non-)2291 3871 y(zero)31 b(v)-5 b(alue.)p
-3839 3904 V -2 4017 4 113 v 50 3983 a(PV)p Fx(i)p Fq(_)p
-Fx(ma)p 640 4017 V 316 w FF(Ignored)30 b(for)g(linear)g(axes.)p
-2240 4017 V 683 w(Not)h(written)g(if)f(the)h(axes)g(are)g(linear.)p
-3839 4017 V -2 4130 V 50 4096 a(PS)p Fx(i)p Fq(_)p Fx(ma)p
-640 4130 V 333 w FF(Ignored.)p 2240 4130 V 1273 w(Not)g(used.)p
-3839 4130 V -2 4582 4 452 v 50 4209 a(W)m(CSNAME)p Fx(a)p
-640 4582 V 108 w FF(Used)41 b(to)h(set)g(the)f(Domain)h(attribute)g(of)
-692 4322 y(the)30 b(W)m(CS)g(F)-8 b(rame.)p 2240 4582
-V 2291 4209 a(Only)34 b(written)h(if)f(the)h(Domain)g(attribute)2291
-4322 y(of)23 b(the)f(W)m(CS)h(F)-8 b(rame)23 b(has)f(b)s(een)g(set)h
-(explic-)2291 4435 y(itly)-8 b(.)40 b(If)26 b(so,)h(the)f(Domain)g(v)-5
-b(alue)26 b(is)g(used)f(as)2291 4548 y(the)31 b(W)m(CSNAME)g(v)-5
-b(alue.)p 3839 4582 V -2 4695 4 113 v 50 4661 a(CRDER)p
-Fx(ia)p 640 4695 V 237 w FF(Ignored.)p 2240 4695 V 1273
-w(Not)31 b(used.)p 3839 4695 V -2 4808 V 50 4774 a(CSYER)p
-Fx(ia)p 640 4808 V 254 w FF(Ignored.)p 2240 4808 V 1273
-w(Not)g(used.)p 3839 4808 V 0 4811 3841 4 v 986 5086
-a(T)-8 b(able)31 b(1:)41 b(Use)31 b(of)g(FITS-W)m(CS)f(P)m(ap)s(er)g(I)
-g(k)m(eyw)m(ords)p eop end
-%%Page: 533 543
-TeXDict begin 533 542 bop 0 52 a Fy(F.1)92 b(P)m(ap)s(er)30
-b(I)g(-)h(General)g(Linear)f(Co)s(ordinates)1933 b FF(533)0
-351 y(in)33 b(the)g(FitsChan)h(tak)m(e)g(precedence)g(if)f(the)h(k)m
-(eyw)m(ord)g(v)-5 b(alue)33 b(has)g(not)h(c)m(hanged\).)50
-b(The)33 b(ab)s(o)m(v)m(e)i(pro)s(cedure)0 464 y(is)d(o)m(v)m
-(er-ridden)g(if)f(the)h(F)-8 b(rame)32 b(is)g(a)g(SkyF)-8
-b(rame)32 b(or)f(a)h(Sp)s(ecF)-8 b(rame,)33 b(in)e(whic)m(h)g(case)i
-(the)f(CTYPE)p Fx(i)39 b FF(v)-5 b(alue)32 b(is)0 577
-y(deriv)m(ed)i(from)e(the)i(System)f(attribute)i(of)e(the)h(F)-8
-b(rame)34 b(and)f(the)h(nature)f(of)g(the)h(pixel)g(to)g(W)m(CS)g
-(Mapping)0 690 y(according)d(to)g(the)g(con)m(v)m(en)m(tions)h(of)f
-(pap)s(ers)e(I)s(I)h(and)f(I)s(I)s(I,)g(as)i(describ)s(ed)e(b)s(elo)m
-(w.)0 986 y FD(F.1.3)105 b(Choice)35 b(of)g(Reference)h(P)m(oin)m(t)0
-1210 y FF(When)31 b(writing)g(a)g(F)-8 b(rameSet)32 b(to)g(a)f
-(FitsChan,)h(the)f(pixel)g(co)s(ordinates)h(of)f(the)g(reference)g(p)s
-(oin)m(t)g(for)g(linear)0 1323 y(axes)g(\(i.e.)42 b(the)30
-b(CRPIX)p Fx(j)43 b FF(v)-5 b(alues\))31 b(are)g(c)m(hosen)g(as)g
-(follo)m(ws:)136 1590 y Fu(\017)46 b FF(If)35 b(the)h(F)-8
-b(rameSet)37 b(is)e(b)s(eing)g(written)h(to)g(a)g(FitsChan)f(whic)m(h)g
-(previously)h(con)m(tained)g(a)g(set)g(of)g(axis)227
-1703 y(descriptions)i(with)f(the)g(same)h(iden)m(tifying)g(letter,)i
-(then)d(the)h(previous)f(CR)-10 b(V)g(AL)p Fx(j)13 b
-FF(v)-5 b(alues)37 b(are)h(con-)227 1816 y(v)m(erted)c(in)m(to)h(the)f
-(co)s(ordinate)g(system)g(of)f(the)h(F)-8 b(rame)34 b(b)s(eing)f
-(written)h(\(if)g(p)s(ossible\).)50 b(These)33 b(v)-5
-b(alues)227 1929 y(are)29 b(then)e(transformed)h(in)m(to)h(the)f(pixel)
-g(F)-8 b(rame,)30 b(and)e(the)g(closest)h(in)m(teger)h(pixel)e(v)-5
-b(alues)29 b(are)f(used)f(as)227 2042 y(the)k(CRPIX)f(k)m(eyw)m(ords.)
-136 2233 y Fu(\017)46 b FF(If)34 b(the)g(ab)s(o)m(v)m(e)h(step)e(could)
-h(not)g(b)s(e)f(p)s(erformed)g(for)g(an)m(y)h(reason,)h(the)f(cen)m
-(tral)h(pixel)f(is)g(used)f(as)h(the)227 2346 y(reference)e(p)s(oin)m
-(t.)45 b(This)30 b(requires)h(the)h(image)h(dimensions)e(to)h(b)s(e)f
-(presen)m(t)h(in)f(the)h(FitsChan)f(in)g(the)227 2459
-y(form)f(of)h(a)f(set)h(of)g(NAXIS)p Fx(j)43 b FF(k)m(eyw)m(ord)31
-b(v)-5 b(alues.)136 2650 y Fu(\017)46 b FF(If)33 b(b)s(oth)f(the)h(ab)s
-(o)m(v)m(e)g(t)m(w)m(o)i(steps)d(failed)i(for)e(an)m(y)h(axis,)h(then)f
-(the)g(pixel)g(reference)g(p)s(osition)g(is)f(set)i(to)227
-2763 y(a)d(v)-5 b(alue)31 b(of)f(1.0)i(on)e(the)h(pixel)f(axis.)0
-3031 y(The)g(pixel)h(to)g(W)m(CS)f(Mapping)g(is)h(then)f(used)f(to)j
-(\014nd)c(the)j(corresp)s(onding)e(CR)-10 b(V)g(AL)p
-Fx(j)13 b FF(v)-5 b(alues.)0 3195 y(Again,)29 b(the)f(ab)s(o)m(v)m(e)h
-(pro)s(cedure)e(is)h(o)m(v)m(er-ridden)g(if)g(the)g(F)-8
-b(rame)28 b(is)g(a)g(SkyF)-8 b(rame)29 b(or)e(a)h(Sp)s(ecF)-8
-b(rame,)29 b(in)f(whic)m(h)0 3308 y(case)j(the)g(con)m(v)m(en)m(tions)h
-(of)f(pap)s(ers)e(I)s(I)h(and)f(I)s(I)s(I)g(are)i(used)f(as)g(describ)s
-(ed)f(b)s(elo)m(w.)0 3604 y FD(F.1.4)105 b(Choice)35
-b(of)g(Axis)g(Ordering)0 3828 y FF(When)e(reading)h(a)f(F)-8
-b(rameSet)35 b(from)e(a)h(FitsChan,)g(W)m(CS)f(axis)h
-Fo(i)g FF(in)f(the)h(curren)m(t)f(F)-8 b(rame)34 b(of)g(the)f
-(resulting)0 3941 y(F)-8 b(rameSet)32 b(corresp)s(onds)d(to)i(axis)g
-Fo(i)f FF(in)g(the)h(FITS)e(header.)0 4105 y(When)37
-b(writing)h(a)g(F)-8 b(rameSet)39 b(to)f(a)g(FitsChan,)i(the)e(axis)g
-(ordering)f(for)h(the)f(FITS)g(header)h(is)g(c)m(hosen)g(to)0
-4218 y(mak)m(e)30 b(the)e(CD)p Fx(i)p Fq(_)p Fx(j)42
-b FF(or)28 b(PC)p Fx(i)p Fq(_)p Fx(j)41 b FF(matrix)29
-b(predominately)g(diagonal.)41 b(This)28 b(means)h(that)g(the)f(axis)i
-(n)m(um)m(b)s(ering)0 4331 y(in)g(the)h(FITS)e(header)h(will)h(not)g
-(necessarily)g(b)s(e)f(the)g(same)h(as)g(that)g(in)f(the)g(AST)g(F)-8
-b(rame.)0 4627 y FD(F.1.5)105 b(Alternate)34 b(Axis)h(Descriptions)0
-4851 y FF(When)41 b(reading)h(a)f(F)-8 b(rameSet)43 b(from)e(a)g
-(FitsChan)h(whic)m(h)f(con)m(tains)h(alternate)h(axis)f(descriptions,)i
-(eac)m(h)0 4964 y(complete)37 b(set)f(of)g(axis)g(descriptions)f
-(results)h(in)f(a)h(single)g(F)-8 b(rame)37 b(b)s(eing)e(added)g(to)h
-(the)g(\014nal)f(F)-8 b(rameSet,)0 5077 y(connected)42
-b(via)f(an)g(appropriate)f(Mapping)h(to)g(the)g(base)g(pixel)g(F)-8
-b(rame.)73 b(The)40 b(Iden)m(t)h(attribute)g(of)g(the)0
-5190 y(F)-8 b(rame)36 b(is)f(set)g(to)h(hold)e(the)i(single)f(alphab)s
-(etical)h(c)m(haracter)h(whic)m(h)d(is)h(used)f(to)i(iden)m(tify)f(the)
-g(set)h(of)f(axis)0 5303 y(descriptions)30 b(within)g(the)h(FITS)e
-(header)h(\(a)i(single)f(space)g(is)f(used)g(for)g(the)g(primary)g
-(axis)h(descriptions\).)0 5467 y(When)37 b(writing)h(a)g(F)-8
-b(rameSet)39 b(to)f(a)g(FitsChan,)h(it)f(is)g(assumed)f(that)h(the)g
-(base)f(F)-8 b(rame)39 b(represen)m(ts)e(pixel)0 5580
-y(co)s(ordinates,)g(and)e(the)g(curren)m(t)g(F)-8 b(rame)36
-b(represen)m(ts)f(the)h(primary)e(axis)i(descriptions.)55
-b(If)34 b(there)i(are)f(an)m(y)0 5693 y(other)23 b(F)-8
-b(rames)24 b(presen)m(t)e(in)h(the)g(F)-8 b(rameSet,)25
-b(an)e(attempt)h(is)f(made)f(to)i(create)g(a)f(complete)i(set)e(of)g
-(\\alternate")p eop end
-%%Page: 534 544
-TeXDict begin 534 543 bop 0 52 a FF(534)2489 b Fy(F)91
-b(FITS-W)m(CS)30 b(CO)m(VERA)m(GE)0 351 y FF(set)j(of)f(k)m(eyw)m(ords)
-h(describing)f(eac)m(h)i(additional)f(F)-8 b(rame.)48
-b(The)32 b(\014rst)f(c)m(haracter)j(in)e(the)h(Iden)m(t)f(attribute)h
-(of)0 464 y(the)i(F)-8 b(rame)35 b(is)g(used)f(as)h(the)g(single)g(c)m
-(haracter)h(descriptor)f(to)g(b)s(e)f(app)s(ended)f(to)j(the)e(k)m(eyw)
-m(ord,)j(with)d(the)0 577 y(pro)m(viso)c(that)h(a)f(giv)m(en)h(c)m
-(haracter)h(can)e(only)g(b)s(e)f(used)g(once.)42 b(If)29
-b(a)i(second)f(F)-8 b(rame)30 b(is)g(found)f(with)h(an)f(Iden)m(t)0
-690 y(attribute)g(whic)m(h)e(has)h(already)g(b)s(een)f(used,)h(its)g
-(Iden)m(t)g(attribute)h(is)f(ignored)g(and)f(the)h(next)g(free)g(c)m
-(haracter)0 803 y(is)c(used)f(instead.)39 b(Note,)26
-b(failure)f(to)f(write)g(a)g(set)h(of)f(alternate)h(axis)g
-(descriptions)e(do)s(es)h(not)g(result)g(in)f(failure)0
-916 y(of)32 b(the)g(en)m(tire)g(write)g(op)s(eration:)44
-b(the)32 b(primary)f(axis)h(descriptions)g(are)g(still)g(written,)h
-(together)g(with)e(an)m(y)0 1029 y(other)g(alternate)h(axis)f
-(descriptions)f(whic)m(h)g(can)h(b)s(e)e(pro)s(duced)g(successfully)-8
-b(.)0 1335 y Fw(F.2)113 b(P)m(ap)s(er)37 b(I)s(I)g(-)h(Celestial)g(Co)s
-(ordinates)0 1562 y FF(These)33 b(con)m(v)m(en)m(tions)i(are)f(used)e
-(when)g(reading)i(a)f(F)-8 b(rameSet)34 b(from)f(a)h(FitsChan)f(con)m
-(taining)h(appropriate)0 1675 y(CTYPE)p Fx(i)39 b FF(v)-5
-b(alues,)31 b(and)e(when)h(writing)g(a)h(F)-8 b(rameSet)31
-b(in)g(whic)m(h)f(the)g(W)m(CS)h(F)-8 b(rame)31 b(is)f(a)h(SkyF)-8
-b(rame.)0 1841 y(T)g(able)31 b(2)g(describ)s(es)e(the)i(use)f(made)g(b)
-m(y)g(AST)g(of)g(eac)m(h)h(k)m(eyw)m(ord)g(whose)f(meaning)h(is)f
-(de\014ned)f(or)h(extended)0 1954 y(b)m(y)g(FITS-W)m(CS)g(pap)s(er)g(I)
-s(I.)0 2257 y FD(F.2.1)105 b(Requiremen)m(ts)36 b(for)f(a)f(Successful)
-j(W)-9 b(rite)35 b(Op)s(eration)0 2484 y FF(When)43 b(writing)g(a)h(F)
--8 b(rameSet)45 b(in)e(whic)m(h)g(the)g(W)m(CS)h(F)-8
-b(rame)44 b(is)f(a)h(SkyF)-8 b(rame)44 b(to)g(a)g(FitsChan,)i(success)0
-2597 y(dep)s(ends)29 b(on)h(the)g(follo)m(wing)i(conditions)f(b)s(eing)
-f(met:)111 2870 y(1.)46 b(The)h(Mapping)f(from)h(pixel)g(co)s
-(ordinates)h(\(the)f(base)g(F)-8 b(rame)48 b(in)e(the)h(F)-8
-b(rameSet\))49 b(to)e(the)g(W)m(CS)227 2983 y(SkyF)-8
-b(rame)31 b(includes)f(a)h(WcsMap.)111 3179 y(2.)46 b(The)30
-b(Mapping)g(prior)g(to)h(the)g(WcsMap)g(\()p Fx(i.e.)40
-b FF(from)30 b(pixel)h(to)g(IW)m(C\))g(is)g(linear.)111
-3374 y(3.)46 b(The)34 b(Mapping)g(after)g(the)g(WcsMap)h(\()p
-Fx(i.e.)52 b FF(from)33 b(nativ)m(e)i(spherical)g(to)f(celestial)j(co)s
-(ordinates\))e(is)f(a)227 3487 y(spherical)d(rotation)h(for)e(the)g
-(celestial)j(axes,)e(and)f(linear)h(for)f(an)m(y)h(other)f(axes.)0
-3760 y(If)g(an)m(y)h(of)f(the)h(ab)s(o)m(v)m(e)g(conditions)g(do)f(not)
-h(hold,)f(the)h(write)f(op)s(eration)h(will)g(b)s(e)f(unsuccessful.)0
-4063 y FD(F.2.2)105 b(Choice)35 b(of)g(LONPOLE/LA)-9
-b(TPOLE)0 4290 y FF(When)39 b(writing)h(a)f(F)-8 b(rameSet)41
-b(to)f(a)g(FitsChan,)i(the)d(c)m(hoice)i(of)f(LONPOLE)e(and)h(LA)-8
-b(TPOLE)39 b(v)-5 b(alues)39 b(is)0 4403 y(determined)30
-b(as)h(follo)m(ws:)111 4677 y(1.)46 b(If)41 b(the)f(pro)5
-b(jection)42 b(represen)m(ted)e(b)m(y)h(the)g(WcsMap)h(is)e(azim)m
-(uthal,)45 b(then)c(an)m(y)g(v)-5 b(alues)41 b(set)g(for)f(at-)227
-4790 y(tributes)33 b(\\PV)p Fx(i)9 b Fq(_)p FF(3")34
-b(and)e(\\PV)p Fx(i)9 b Fq(_)p FF(4")34 b(\(where)f(\\)p
-Fx(i)9 b FF(")34 b(is)f(the)g(index)g(of)g(the)g(longitude)g(axis\))h
-(within)e(the)227 4903 y(WcsMap)h(are)g(used)e(as)h(the)g(LONPOLE)f
-(and)g(LA)-8 b(TPOLE)32 b(v)-5 b(alues.)46 b(Reading)32
-b(a)g(F)-8 b(rameSet)34 b(from)d(a)227 5016 y(FITS-W)m(CS)i(header)f
-(results)g(in)h(the)g(original)h(LONPOLE)d(and)h(LA)-8
-b(TPOLE)32 b(v)-5 b(alues)33 b(b)s(eing)f(stored)227
-5128 y(within)27 b(a)i(WcsMap)f(within)f(the)h(F)-8 b(rameSet.)41
-b(Consequen)m(tly)-8 b(,)29 b(if)f(a)g(F)-8 b(rameSet)29
-b(is)f(read)g(from)f(a)h(FITS-)227 5241 y(W)m(CS)k(header)g(and)f(it)h
-(is)g(subsequen)m(tly)g(written)f(out)h(to)h(a)f(new)g(FITS-W)m(CS)f
-(header,)h(the)g(original)227 5354 y(LONPOLE)g(and)h(LA)-8
-b(TPOLE)33 b(v)-5 b(alues)33 b(will)h(usually)f(b)s(e)g(used)f(in)h
-(the)h(new)e(header)h(\(the)h(exception)227 5467 y(b)s(eing)h(if)g(the)
-g(WcsMap)h(has)f(b)s(een)g(explicitly)h(mo)s(di\014ed)e(b)s(efore)h(b)s
-(eing)g(written)g(out)g(again\).)56 b(An)m(y)227 5580
-y(extra)28 b(rotation)h(of)e(the)g(sky)g(is)g(absorb)s(ed)f(in)m(to)i
-(the)g(CD)p Fx(i)p Fq(_)p Fx(j)39 b FF(or)27 b(PC)p Fx(i)p
-Fq(_)p Fx(j)40 b FF(matrix)27 b(\(this)g(is)h(p)s(ossible)e(only)227
-5693 y(if)31 b(the)f(pro)5 b(jection)31 b(is)g(azim)m(uthal\).)p
-eop end
-%%Page: 535 545
-TeXDict begin 535 544 bop 0 52 a Fy(F.2)92 b(P)m(ap)s(er)30
-b(I)s(I)g(-)g(Celestial)i(Co)s(ordinates)2152 b FF(535)p
-0 853 3800 4 v -2 965 4 113 v 94 932 a FD(Keyw)m(ord)p
-598 965 V 777 w(Read)p 2198 965 V 1352 w(W)-9 b(rite)p
-3798 965 V 0 969 3800 4 v -2 1533 4 565 v 50 1048 a FF(CTYPE)p
-Fx(ia)p 598 1533 V 202 w FF(All)28 b(co)s(ordinate)g(systems)f(and)g
-(pro)5 b(jection)650 1161 y(t)m(yp)s(es)32 b(listed)g(in)f(pap)s(er)g
-(I)s(I)g(are)h(supp)s(orted)650 1274 y(\(note,)27 b(\\CUBEF)-10
-b(A)m(CE")26 b(axes)g(are)f(treated)650 1386 y(as)32
-b(unkno)m(wn)e(linear)i(axes\).)45 b(In)31 b(addition,)650
-1499 y("-HPX")h(\(HEALPix\))f(is)f(supp)s(orted.)p 2198
-1533 V 2249 1048 a(Determined)45 b(b)m(y)e(the)h(System)g(attribute)
-2249 1161 y(of)52 b(the)g(SkyF)-8 b(rame)52 b(and)f(the)h(WcsT)m(yp)s
-(e)2249 1274 y(attribute)45 b(of)f(the)g(WcsMap)h(within)e(the)2249
-1386 y(F)-8 b(rameSet.)p 3798 1533 V -2 1646 4 113 v
-50 1612 a(CUNIT)p Fx(ia)p 598 1646 V 225 w FF(Ignored)30
-b(\(assumed)g(to)h(b)s(e)f('degrees'\).)p 2198 1646 V
-235 w(Not)i(written.)p 3798 1646 V -2 1985 4 339 v 50
-1725 a(PV)p Fx(i)p Fq(_)p Fx(ma)p 598 1985 V 274 w FF(Used)25
-b(to)g(create)i(the)e(pixel)g(to)g(W)m(CS)g(Map-)650
-1838 y(ping)f(\(v)-5 b(alues)24 b(are)h(stored)f(as)g(attributes)h(of)
-650 1951 y(a)31 b(WcsMap)g(within)f(this)g(Mapping\).)p
-2198 1985 V 2249 1725 a(V)-8 b(alues)25 b(are)f(obtained)g(from)f(the)g
-(WcsMap)2249 1838 y(in)31 b(the)f(pixel)h(to)g(W)m(CS)f(Mapping.)p
-3798 1985 V -2 2437 4 452 v 50 2064 a(LONPOLE)p Fx(a)p
-598 2437 V 106 w FF(Used)25 b(to)g(create)i(the)e(pixel)g(to)g(W)m(CS)g
-(Map-)650 2177 y(ping.)106 b(Also)54 b(stored)e(as)h(a)g(PVi)p
-Fq(_)p FF(m)f(at-)650 2290 y(tribute)45 b(for)f(the)i(longitude)f(axis)
-g(of)h(the)650 2403 y(WcsMap.)p 2198 2437 V 2249 2064
-a(Only)c(written)g(if)h(not)f(equal)h(to)g(the)f(de-)2249
-2177 y(fault)52 b(v)-5 b(alue)52 b(de\014ned)e(in)h(pap)s(er)f(I)s(I)g
-(\(see)2249 2290 y(\\Choice)72 b(of)f(LONPOLE/LA)-8 b(TPOLE")2249
-2403 y(b)s(elo)m(w\).)p 3798 2437 V -2 2888 V 50 2516
-a(LA)g(TPOLE)p Fx(a)p 598 2888 V 119 w FF(Used)25 b(to)g(create)i(the)e
-(pixel)g(to)g(W)m(CS)g(Map-)650 2629 y(ping.)37 b(Also)22
-b(stored)g(as)g(a)f(PV)h(attribute)g(for)650 2741 y(the)30
-b(longitude)h(axis)g(of)g(the)f(WcsMap.)p 2198 2888 V
-2249 2516 a(Only)42 b(written)g(if)h(not)f(equal)h(to)g(the)f(de-)2249
-2629 y(fault)52 b(v)-5 b(alue)52 b(de\014ned)e(in)h(pap)s(er)f(I)s(I)g
-(\(see)2249 2741 y(\\Choice)72 b(of)f(LONPOLE/LA)-8 b(TPOLE")2249
-2854 y(b)s(elo)m(w\).)p 3798 2888 V -2 3340 V 50 2967
-a(RADESYS)p Fx(a)p 598 3340 V 118 w FF(Used)66 b(to)h(set)g(the)f
-(attributes)h(of)g(the)650 3080 y(SkyF)-8 b(rame.)77
-b(All)44 b(v)-5 b(alues)42 b(supp)s(orted)f(ex-)650 3193
-y(cept)31 b(that)g(ecliptic)i(co)s(ordinates)e(are)g(cur-)650
-3306 y(ren)m(tly)g(alw)m(a)m(ys)h(assumed)d(to)i(b)s(e)f(FK5.)p
-2198 3340 V 2249 2967 a(Alw)m(a)m(ys)46 b(written.)84
-b(Determined)46 b(b)m(y)e(the)2249 3080 y(System)31 b(attribute)g(of)f
-(the)h(SkyF)-8 b(rame.)p 3798 3340 V -2 3679 4 339 v
-50 3419 a(EQUINO)m(X)p Fx(a)p 598 3679 V 116 w FF(Used)39
-b(to)g(set)g(the)g(Equino)m(x)g(attribute)h(of)650 3532
-y(the)30 b(SkyF)-8 b(rame.)p 2198 3679 V 2249 3419 a(W)g(ritten)79
-b(if)f(relev)-5 b(an)m(t.)183 b(Determined)2249 3532
-y(b)m(y)80 b(the)g(Equino)m(x)f(attribute)h(of)g(the)2249
-3645 y(SkyF)-8 b(rame.)p 3798 3679 V -2 4130 4 452 v
-50 3758 a(EPOCH)p 598 4130 V 271 w(Used)39 b(to)g(set)g(the)g(Equino)m
-(x)g(attribute)h(of)650 3871 y(the)30 b(SkyF)-8 b(rame.)p
-2198 4130 V 2249 3758 a(Only)32 b(written)f(if)h(using)f(FITS-AIPS)g
-(and)2249 3871 y(FITS-AIPS++)72 b(enco)s(dings.)170 b(Deter-)2249
-3983 y(mined)26 b(b)m(y)g(the)g(Equino)m(x)g(attribute)g(of)g(the)2249
-4096 y(SkyF)-8 b(rame.)p 3798 4130 V -2 4808 4 678 v
-50 4209 a(MJD-OBS)p 598 4808 V 185 w(Used)51 b(to)h(set)g(the)g(Ep)s(o)
-s(c)m(h)e(attribute)j(of)650 4322 y(the)c(SkyF)-8 b(rame.)97
-b(D)m(A)-8 b(TE-OBS)50 b(is)g(used)650 4435 y(if)e(MJD-OBS)h(is)g(not)g
-(presen)m(t.)96 b(A)49 b(de-)650 4548 y(fault)42 b(v)-5
-b(alue)43 b(based)f(on)g(RADESYS)f(and)650 4661 y(EQUINO)m(X)h(is)h
-(used)f(if)g(used)g(if)g(D)m(A)-8 b(TE-)650 4774 y(OBS)30
-b(is)g(not)h(presen)m(t)f(either.)p 2198 4808 V 2249
-4209 a(Determined)e(b)m(y)f(the)h(Ep)s(o)s(c)m(h)e(attribute)i(of)2249
-4322 y(the)47 b(SkyF)-8 b(rame.)87 b(Only)46 b(written)g(if)g(this)2249
-4435 y(attribute)d(has)f(b)s(een)f(set)i(to)f(an)g(explicit)2249
-4548 y(v)-5 b(alue)53 b(\(in)f(whic)m(h)g(case)h(D)m(A)-8
-b(TE-OBS)53 b(is)2249 4661 y(also)32 b(written\).)p 3798
-4808 V 0 4811 3800 4 v 969 5086 a(T)-8 b(able)31 b(2:)41
-b(Use)30 b(of)h(FITS-W)m(CS)f(P)m(ap)s(er)g(I)s(I)g(k)m(eyw)m(ords)p
-eop end
-%%Page: 536 546
-TeXDict begin 536 545 bop 0 52 a FF(536)2489 b Fy(F)91
-b(FITS-W)m(CS)30 b(CO)m(VERA)m(GE)111 351 y FF(2.)46
-b(If)29 b(the)f(pro)5 b(jection)30 b(represen)m(ted)f(b)m(y)f(the)h
-(WcsMap)h(is)f(azim)m(uthal)h(but)e(no)g(v)-5 b(alues)29
-b(ha)m(v)m(e)h(b)s(een)e(set)i(for)227 464 y(the)38 b(\\PV)p
-Fx(i)9 b Fq(_)p FF(3")38 b(and)e(\\PV)p Fx(i)9 b Fq(_)p
-FF(4")39 b(attributes)e(within)g(the)g(WcsMap,)j(then)d(the)g(default)h
-(LONPOLE)227 577 y(and)f(LA)-8 b(TPOLE)37 b(v)-5 b(alues)38
-b(are)f(used.)61 b(This)37 b(results)g(in)g(no)h(LONPOLE)e(or)h(LA)-8
-b(TPOLE)37 b(k)m(eyw)m(ords)227 690 y(b)s(eing)28 b(stored)g(in)g(the)g
-(header)g(since)h(default)f(v)-5 b(alues)28 b(are)h(nev)m(er)f(stored.)
-40 b(An)m(y)29 b(extra)g(rotation)g(of)f(the)227 803
-y(sky)k(is)g(absorb)s(ed)f(in)m(to)i(the)g(CD)p Fx(i)p
-Fq(_)p Fx(j)45 b FF(or)32 b(PC)p Fx(i)p Fq(_)p Fx(j)44
-b FF(matrix)32 b(\(this)h(is)f(p)s(ossible)g(only)g(if)g(the)h(pro)5
-b(jection)32 b(is)227 916 y(azim)m(uthal\).)111 1121
-y(3.)46 b(If)35 b(the)g(pro)5 b(jection)35 b(represen)m(ted)g(b)m(y)g
-(the)g(WcsMap)g(is)g(not)g(azim)m(uthal,)j(then)c(the)h(v)-5
-b(alues)36 b(of)f(LON-)227 1234 y(POLE)j(and)g(LA)-8
-b(TPOLE)37 b(are)i(found)e(b)m(y)h(transforming)g(the)h(co)s(ordinates)
-g(of)g(the)f(celestial)j(north)227 1347 y(p)s(ole)28
-b(\()p Fx(i.e)34 b FF(longitude)28 b(zero,)h(latitude)g(+)p
-Fo(\031)s(=)p FF(2\))f(in)m(to)g(nativ)m(e)h(spherical)f(co)s
-(ordinates)g(using)f(the)h(in)m(v)m(erse)227 1459 y(of)j(the)f(Mapping)
-h(whic)m(h)f(follo)m(ws)h(the)g(WcsMap.)0 1778 y FD(F.2.3)105
-b(User)35 b(De\014ned)h(Fiducial)f(P)m(oin)m(ts)0 2012
-y FF(When)f(reading)g(a)h(F)-8 b(rameSet)36 b(from)d(a)i(FitsChan,)g
-(pro)5 b(jection)35 b(parameters)g(PV)p Fx(i)9 b Fq(_)p
-FF(0,)36 b(PV)p Fx(i)9 b Fq(_)p FF(1)34 b(and)g(PV)p
-Fx(i)9 b Fq(_)p FF(2)0 2125 y(\(for)29 b(longitude)h(axis)g(\\)p
-Fx(i)9 b FF("\))31 b(are)e(used)g(to)h(indicate)g(a)g(user-de\014ned)d
-(\014ducial)i(p)s(oin)m(t)h(as)f(describ)s(ed)f(in)h(section)0
-2238 y(2.5)37 b(of)f(pap)s(er)e(I)s(I.)h(This)g(results)h(in)f(a)h
-(shift)g(of)g(IW)m(C)g(origin)g(b)s(eing)f(applied)h
-Fx(b)-5 b(efor)g(e)43 b FF(the)36 b(WcsMap)h(whic)m(h)0
-2351 y(con)m(v)m(erts)g(IW)m(C)f(in)m(to)g(nativ)m(e)h(spherical)f(co)s
-(ordinates.)57 b(The)35 b(v)-5 b(alues)35 b(of)h(these)g(pro)5
-b(jection)36 b(parameters,)h(if)0 2464 y(supplied,)29
-b(are)i(stored)g(as)f(the)h(corresp)s(onding)e(PVi)p
-Fq(_)p FF(m)h(attributes)h(of)g(the)f(WcsMap.)0 2635
-y(When)24 b(writing)g(a)h(F)-8 b(rameSet)25 b(to)g(a)g(FitsChan,)h(the)
-e(PV)g(attributes)h(of)g(the)f(WcsMap)h(determine)g(the)f(nativ)m(e)0
-2748 y(co)s(ordinates)29 b(of)f(the)h(\014ducial)f(p)s(oin)m(t)g(\(the)
-h(\014xed)f(defaults)g(for)g(eac)m(h)h(pro)5 b(jection)29
-b(describ)s(ed)f(in)f(pap)s(er)h(I)s(I)f(are)0 2861 y(used)32
-b(if)h(the)g(PV)g(attributes)h(of)f(the)g(WcsMap)h(ha)m(v)m(e)g(not)g
-(b)s(een)e(assigned)h(a)h(v)-5 b(alue\).)49 b(The)32
-b(corresp)s(onding)0 2974 y(celestial)e(co)s(ordinates)f(are)f(used)e
-(as)i(the)g(CR)-10 b(V)g(AL)p Fx(i)36 b FF(k)m(eyw)m(ords)28
-b(and)f(the)h(corresp)s(onding)f(pixel)h(co)s(ordinates)0
-3087 y(as)j(the)f(CRPIX)p Fx(j)43 b FF(k)m(eyw)m(ords.)0
-3406 y FD(F.2.4)105 b(Common)35 b(Non-Standard)g(F)-9
-b(eatures)0 3640 y FF(A)39 b(collection)j(of)e(common)f(non-standard)f
-(features)i(are)f(supp)s(orted)e(when)i(reading)g(a)h(F)-8
-b(rameSet)40 b(from)0 3753 y(a)46 b(FitsChan,)j(in)c(addition)g(to)h
-(those)g(em)m(b)s(o)s(died)e(within)h(the)g(a)m(v)-5
-b(ailable)48 b(enco)s(dings)d(of)g(the)h(FitsChan)0 3866
-y(class.)j(These)33 b(are)h(translated)f(in)m(to)h(the)f(equiv)-5
-b(alen)m(t)35 b(standard)d(features)h(b)s(efore)g(b)s(eing)g(used)f(to)
-i(create)g(a)0 3979 y(F)-8 b(rameSet.)60 b(Note,)39 b(the)d(rev)m(erse)
-h(op)s(eration)g(is)f(nev)m(er)h(p)s(erformed:)51 b(it)37
-b(is)f(not)h(p)s(ossible)f(to)h(pro)s(duce)e(non-)0 4092
-y(standard)g(features)h(when)e(writing)i(a)g(F)-8 b(rameSet)37
-b(to)g(a)f(FitsChan)f(\(other)h(than)g(those)g(em)m(b)s(o)s(died)f(in)g
-(the)0 4205 y(a)m(v)-5 b(ailable)33 b(enco)s(dings)d(of)g(the)h
-(FitsChan)f(class\).)42 b(The)30 b(supp)s(orted)e(non-standard)i
-(features)g(include:)136 4493 y Fu(\017)46 b FF(EQUINO)m(X)28
-b(k)m(eyw)m(ords)h(with)e(string)h(v)-5 b(alues)29 b(equal)f(to)h(a)f
-(date)h(preceded)f(b)m(y)f(the)i(letter)g(B)f(or)g(J)g(\()p
-Fx(e.g.)227 4606 y FF(\\B1995.0"\).)136 4811 y Fu(\017)46
-b FF(EQUINO)m(X)31 b(or)f(EPOCH)g(k)m(eyw)m(ords)g(with)g(v)-5
-b(alue)31 b(zero)g(\(these)h(are)e(con)m(v)m(erted)i(to)f(B1950\).)136
-5016 y Fu(\017)46 b FF(The)22 b(IRAF)g(\\ZPX")g(pro)5
-b(jection)23 b(is)f(represen)m(ted)g(b)m(y)f(a)i(WcsMap)f(with)g(t)m
-(yp)s(e)g(of)g(AST)p Fq(__)p FF(ZPN.)f(Pro)5 b(jec-)227
-5128 y(tion)30 b(parameter)f(v)-5 b(alues)29 b(are)g(read)g(from)f(an)m
-(y)i(W)-10 b(A)i(T)p Fx(i)p Fq(_)p Fx(nnn)36 b FF(k)m(eyw)m(ords,)30
-b(and)e(corresp)s(onding)g(PVi)p Fq(_)p FF(m)227 5241
-y(attributes)36 b(are)f(set)h(in)e(the)i(WcsMap.)55 b(The)35
-b(W)-10 b(A)i(T)p Fx(i)p Fq(_)p Fx(nnn)42 b FF(k)m(eyw)m(ords)35
-b(ma)m(y)h(sp)s(ecify)f(corrections)h(to)227 5354 y(the)43
-b(basic)f(ZPN)g(pro)5 b(jection)43 b(b)m(y)g(including)e(\\lngcor")j
-(or)f(\\latcor")h(terms.)77 b(There)41 b(is)i(no)f(direct)227
-5467 y(equiv)-5 b(alen)m(t)30 b(in)d(FITS-W)m(CS)h(to)g(these)g(terms)g
-(and)f(so)h(they)g(are)h(ignored.)40 b(If)27 b(these)h(correction)i
-(terms)227 5580 y(are)d(found,)g(ASTW)-10 b(ARN)26 b(k)m(eyw)m(ords)h
-(are)g(added)f(to)h(the)g(FitsChan)g(con)m(taining)h(a)f(w)m(arning)f
-(message)227 5693 y(\(but)k(only)h(if)f(the)h(W)-8 b(arnings)30
-b(attribute)i(of)e(the)h(FitsChan)f(is)g(set)h(appropriately\).)p
-eop end
-%%Page: 537 547
-TeXDict begin 537 546 bop 0 52 a Fy(F.3)92 b(P)m(ap)s(er)30
-b(I)s(I)s(I)f(-)i(Sp)s(ectral)f(Co)s(ordinates)2129 b
-FF(537)136 351 y Fu(\017)46 b FF(The)37 b(IRAF)h(\\TNX")h(pro)5
-b(jection)38 b(is)g(represen)m(ted)f(b)m(y)h(a)g(WcsMap)h(with)e(t)m
-(yp)s(e)h(of)g(AST)p Fq(__)p FF(TPN)e(\(a)227 464 y(distorted)j(T)-8
-b(AN)39 b(pro)5 b(jection)39 b(retained)g(within)e(the)i(WcsMap)g
-(class)g(from)f(an)h(early)g(draft)f(of)g(the)227 577
-y(FITS-W)m(CS)22 b(pap)s(er)f(I)s(I\).)g(Pro)5 b(jection)23
-b(parameter)g(v)-5 b(alues)22 b(are)g(read)g(from)f(an)m(y)i(W)-10
-b(A)i(T)p Fx(i)p Fq(_)p Fx(nnn)29 b FF(k)m(eyw)m(ords,)227
-690 y(and)34 b(corresp)s(onding)f(PV)i(attributes)g(are)g(set)g(in)f
-(the)g(WcsMap.)54 b(If)34 b(the)g(TNX)h(pro)5 b(jection)35
-b(cannot)227 803 y(b)s(e)e(con)m(v)m(erted)i(exactly)g(in)m(to)f(an)g
-(AST)p Fq(__)p FF(TPN)d(pro)5 b(jection,)35 b(ASTW)-10
-b(ARN)34 b(k)m(eyw)m(ords)f(are)h(added)f(to)227 916
-y(the)40 b(FitsChan)g(con)m(taining)i(a)e(w)m(arning)g(message)h(\(but)
-e(only)h(if)g(the)g(W)-8 b(arnings)41 b(attribute)f(of)g(the)227
-1029 y(FitsChan)31 b(is)f(set)h(appropriately\).)136
-1222 y Fu(\017)46 b FF(\\QV")33 b(parameters)f(for)g(T)-8
-b(AN)32 b(pro)5 b(jections)33 b(\(as)f(pro)s(duced)f(b)m(y)h(A)m(UTO)m
-(ASTR)m(OM)g(are)g(renamed)g(to)227 1335 y(the)f(equiv)-5
-b(alen)m(t)32 b(\\PV")f(parameters.)0 1637 y Fw(F.3)113
-b(P)m(ap)s(er)37 b(I)s(I)s(I)g(-)h(Sp)s(ectral)g(Co)s(ordinates)0
-1862 y FF(These)27 b(con)m(v)m(en)m(tions)i(are)e(used)g(when)f
-(reading)h(a)h(F)-8 b(rameSet)28 b(from)e(a)i(FitsChan)f(whic)m(h)g
-(includes)f(appropri-)0 1975 y(ate)32 b(CTYPE)p Fx(i)38
-b FF(v)-5 b(alues,)31 b(and)f(when)f(writing)i(a)f(F)-8
-b(rameSet)32 b(in)e(whic)m(h)g(the)h(W)m(CS)f(F)-8 b(rame)31
-b(is)g(a)g(Sp)s(ecF)-8 b(rame.)0 2141 y(T)g(able)31 b(3)g(describ)s(es)
-e(the)i(use)f(made)g(b)m(y)g(AST)g(of)g(eac)m(h)h(k)m(eyw)m(ord)g
-(whose)f(meaning)h(is)f(de\014ned)f(or)h(extended)0 2253
-y(b)m(y)g(FITS-W)m(CS)g(pap)s(er)g(I)s(I)s(I.)0 2552
-y FD(F.3.1)105 b(Requiremen)m(ts)36 b(for)f(a)f(Successful)j(W)-9
-b(rite)35 b(Op)s(eration)0 2778 y FF(When)26 b(writing)f(a)i(F)-8
-b(rameSet)27 b(in)e(whic)m(h)h(the)g(W)m(CS)g(F)-8 b(rame)26
-b(is)g(a)g(Sp)s(ecF)-8 b(rame)27 b(to)f(a)g(FitsChan,)h(the)f(write)g
-(op-)0 2891 y(eration)d(is)g(successful)f(only)h(if)f(the)h(Mapping)f
-(from)g(pixel)h(co)s(ordinates)g(\(the)g(base)g(F)-8
-b(rame)23 b(in)f(the)h(F)-8 b(rameSet\))0 3004 y(to)31
-b(the)g(Sp)s(ecF)-8 b(rame)30 b(satis\014es)h(one)g(of)f(the)h(follo)m
-(wing)h(conditions:)111 3274 y(1.)46 b(It)31 b(is)f(linear.)111
-3467 y(2.)46 b(It)31 b(is)f(logarithmic.)111 3660 y(3.)46
-b(It)31 b(is)h(linear)f(if)g(the)g(Sp)s(ecF)-8 b(rame)32
-b(w)m(ere)f(to)h(b)s(e)f(re-mapp)s(ed)f(in)m(to)i(one)f(of)g(the)h
-(other)f(sp)s(ectral)g(systems)227 3773 y(supp)s(orted)e(b)m(y)h
-(FITS-W)m(CS)g(pap)s(er)f(I)s(I)s(I.)111 3966 y(4.)46
-b(It)33 b(con)m(tains)g(a)g(GrismMap,)g(and)e(the)i(Mapping)f(b)s
-(efore)f(the)i(GrismMap)f(\(from)g(pixel)h(co)s(ordinates)227
-4079 y(to)46 b(grism)e(parameter\))i(is)f(linear,)j(and)d(the)f
-(Mapping)h(after)g(the)g(GrismMap)g(is)g(either)g(n)m(ull)f(or)227
-4192 y(represen)m(ts)e(a)f(c)m(hange)i(of)e(sp)s(ectral)h(system)g
-(from)f(w)m(a)m(v)m(elength)i(\(air)f(or)g(v)-5 b(acuum\))41
-b(to)h(one)g(of)f(the)227 4304 y(supp)s(orted)29 b(sp)s(ectral)h
-(systems.)0 4575 y(If)g(none)g(of)h(the)f(ab)s(o)m(v)m(e)i(conditions)f
-(hold,)f(the)g(write)h(op)s(eration)g(will)g(b)s(e)e(unsuccessful.)0
-4874 y FD(F.3.2)105 b(Common)35 b(Non-Standard)g(F)-9
-b(eatures)0 5099 y FF(The)25 b(follo)m(wing)j(non-standard)c(features)i
-(are)h(supp)s(orted)d(when)g(reading)i(sp)s(ectral)g(axes)h(from)e(a)h
-(FitsChan:)136 5369 y Fu(\017)46 b FF(Con)m(v)m(ersion)32
-b(of)f(\\-W)-10 b(A)g(V",)33 b(\\-FR)m(Q")f(and)e(\\-VEL")i(algorithm)g
-(co)s(des)f(\(sp)s(eci\014ed)g(in)f(early)i(drafts)e(of)227
-5482 y(pap)s(er)g(I)s(I)s(I\))f(to)i(the)f(corresp)s(onding)g(\\-X2P")i
-(form.)136 5675 y Fu(\017)46 b FF(Con)m(v)m(ersion)31
-b(of)g(\\RESTFREQ")f(to)h(\\RESTFR)m(Q")p eop end
-%%Page: 538 548
-TeXDict begin 538 547 bop 0 52 a FF(538)2489 b Fy(F)91
-b(FITS-W)m(CS)30 b(CO)m(VERA)m(GE)p 0 263 4002 4 v -2
-376 4 113 v 196 342 a FD(Keyw)m(ord)p 801 376 V 877 w(Read)p
-2400 376 V 1353 w(W)-9 b(rite)p 4000 376 V 0 379 4002
-4 v -2 944 4 565 v 50 459 a FF(CTYPE)p Fx(ia)p 801 944
-V 404 w FF(All)28 b(co)s(ordinate)g(systems)g(and)e(pro)5
-b(jection)852 571 y(t)m(yp)s(es)22 b(listed)g(in)f(pap)s(er)g(I)s(I)s
-(I)f(are)i(supp)s(orted,)852 684 y(except)32 b(for)e(the)h(\\-T)-8
-b(AB")32 b(algorithm)f(\(the)852 797 y(\\-LOG")53 b(algorithm)f(ma)m(y)
-g(also)h(b)s(e)e(ap-)852 910 y(plied)30 b(to)h(non-sp)s(ectral)g
-(linear)g(axes\).)p 2400 944 V 2452 459 a(Determined)21
-b(b)m(y)f(the)g(System)g(attribute)h(of)2452 571 y(the)35
-b(Sp)s(ecF)-8 b(rame)35 b(and)g(the)g(nature)g(of)g(the)2452
-684 y(pixel)30 b(to)i(Sp)s(ecF)-8 b(rame)30 b(Mapping.)p
-4000 944 V -2 1396 4 452 v 50 1023 a(CUNIT)p Fx(ia)p
-801 1396 V 427 w FF(Used)h(to)h(set)g(the)f(Units)h(attribute)f(of)h
-(the)852 1136 y(Sp)s(ecF)-8 b(rame)35 b(\(note,)i(Sp)s(ecF)-8
-b(rames)34 b(alw)m(a)m(ys)852 1249 y(ha)m(v)m(e)j(an)g(\\activ)m(e")i
-(Units)d(attribute)h(\(see)852 1362 y(astSetActiv)m(eUnit\).)p
-2400 1396 V 2452 1023 a(Alw)m(a)m(ys)31 b(written.)p
-4000 1396 V -2 1734 4 339 v 50 1475 a(PV)p Fx(i)p Fq(_)p
-Fx(ma)p 801 1734 V 476 w FF(Used)25 b(to)g(create)i(the)e(pixel)g(to)h
-(W)m(CS)e(Map-)852 1588 y(ping)g(\(v)-5 b(alues)24 b(are)h(stored)f(as)
-g(attributes)h(of)852 1701 y(a)31 b(GrismMap\).)p 2400
-1734 V 2452 1475 a(Set)46 b(from)f(the)i(attributes)f(of)g(the)g(Gris-)
-2452 1588 y(mMap,)28 b(if)f(presen)m(t,)h(and)e(if)h(set)g(explicitly)
--8 b(.)p 4000 1734 V -2 2073 V 50 1813 a(SPECSYS)p Fx(a)p
-801 2073 V 345 w FF(Used)24 b(to)i(set)e(the)h(StdOfRest)f(attribute)h
-(of)852 1926 y(the)43 b(Sp)s(ecF)-8 b(rame)43 b(\(all)h(systems)f(are)g
-(sup-)852 2039 y(p)s(orted)30 b(except)h(CMBDIPOL\).)p
-2400 2073 V 2452 1813 a(Set)44 b(from)h(the)f(StdOfRest)g(attribute)h
-(of)2452 1926 y(the)26 b(Sp)s(ecF)-8 b(rame,)27 b(but)e(only)g(if)h(it)
-g(has)f(b)s(een)2452 2039 y(set)31 b(explicitly)-8 b(.)p
-4000 2073 V -2 2186 4 113 v 50 2152 a(SSYSOBS)p Fx(a)p
-801 2186 V 349 w FF(Ignored.)p 2400 2186 V 1274 w(Nev)m(er)31
-b(written.)p 4000 2186 V -2 2638 4 452 v 50 2265 a(OBSGEO-X/Y/Z)p
-801 2638 V 100 w(Used)39 b(to)h(set)g(the)g(ObsLon)e(and)g(ObsLat)852
-2378 y(attributes)28 b(of)f(the)g(F)-8 b(rame)28 b(\(the)g(observ)m
-(ers)852 2491 y(heigh)m(t)j(ab)s(o)m(v)m(e)h(sea)f(lev)m(el)h(is)e
-(ignored\).)p 2400 2638 V 2452 2265 a(Set)j(from)g(the)h(ObsLon)f(and)f
-(ObsLat)i(at-)2452 2378 y(tributes)51 b(of)g(the)g(F)-8
-b(rame,)57 b(if)51 b(they)g(ha)m(v)m(e)2452 2491 y(b)s(een)29
-b(set)i(explicitly)h(\(it)g(is)e(assumed)g(that)2452
-2604 y(the)g(observ)m(er)h(is)f(at)h(sea)g(lev)m(el\).)p
-4000 2638 V -2 2976 4 339 v 50 2717 a(MJD-A)-10 b(V)m(G)p
-801 2976 V 379 w(Used)21 b(to)h(set)f(the)g(Ep)s(o)s(c)m(h)f
-(attributes)i(of)f(the)852 2830 y(Sp)s(ecF)-8 b(rame.)p
-2400 2976 V 2452 2717 a(Set)43 b(from)g(the)g(Ep)s(o)s(c)m(h)f
-(attribute)i(of)f(the)2452 2830 y(Sp)s(ecF)-8 b(rame,)42
-b(if)e(it)g(has)f(b)s(een)g(set)i(explic-)2452 2943 y(itly)-8
-b(.)p 4000 2976 V -2 3315 V 50 3055 a(SSYSSR)m(C)p Fx(a)p
-801 3315 V 354 w FF(Used)35 b(to)h(set)g(the)f(SourceVRF)g(attribute)
-852 3168 y(of)24 b(the)f(Sp)s(ecF)-8 b(rame)24 b(\(all)h(systems)e(are)
-h(sup-)852 3281 y(p)s(orted)30 b(except)h(CMBDIPOL\).)p
-2400 3315 V 2452 3055 a(Set)36 b(from)f(the)h(SourceVRF)g(attribute)g
-(of)2452 3168 y(the)30 b(Sp)s(ecF)-8 b(rame.)p 4000 3315
-V -2 4106 4 791 v 50 3394 a(ZSOUR)m(CE)p Fx(a)p 801 4106
-V 318 w FF(Used)49 b(to)g(set)h(the)e(SourceV)-8 b(el)50
-b(attribute)852 3507 y(of)28 b(the)f(Sp)s(ecF)-8 b(rame)28
-b(\(the)g(SourceVRF)g(at-)852 3620 y(tribute)34 b(is)g(\014rst)f(set)h
-(to)h(the)f(system)g(indi-)852 3733 y(cated)g(b)m(y)f(the)g(SSYSSR)m(C)
-e(k)m(eyw)m(ord,)k(and)852 3846 y(the)23 b(ZSOUR)m(CE)e(v)-5
-b(alue)23 b(is)g(then)g(con)m(v)m(erted)852 3959 y(to)59
-b(an)g(apparen)m(t)g(radial)g(v)m(elo)s(cit)m(y)i(and)852
-4072 y(stored)31 b(as)f(the)h(SourceV)-8 b(el)31 b(attribute\).)p
-2400 4106 V 2452 3394 a(Set)49 b(from)g(the)h(SourceV)-8
-b(el)50 b(attribute)g(of)2452 3507 y(the)36 b(Sp)s(ecF)-8
-b(rame,)38 b(if)f(it)g(has)f(b)s(een)f(set)i(ex-)2452
-3620 y(plicitly)51 b(\(the)g(SourceV)-8 b(el)51 b(v)-5
-b(alue)51 b(is)f(\014rst)2452 3733 y(con)m(v)m(erted)33
-b(from)e(apparen)m(t)g(radial)h(v)m(elo)s(c-)2452 3846
-y(it)m(y)f(to)g(redshift\).)p 4000 4106 V -2 4444 4 339
-v 50 4185 a(VELOSYS)p Fx(a)p 801 4444 V 328 w FF(Ignored.)p
-2400 4444 V 1274 w(Set)95 b(from)f(the)h(attributes)g(of)g(the)2452
-4297 y(Sp)s(ecF)-8 b(rame)24 b(that)g(de\014ne)f(the)h(standard)f(of)
-2452 4410 y(rest)30 b(and)g(the)h(observ)m(ers)f(p)s(osition.)p
-4000 4444 V -2 5122 4 678 v 50 4523 a(RESTFR)m(Q)p Fx(a)p
-801 5122 V 316 w FF(Used)k(to)h(set)g(the)f(RestF)-8
-b(req)36 b(attribute)f(of)852 4636 y(the)c(Sp)s(ecF)-8
-b(rame.)p 2400 5122 V 2452 4523 a(Set)56 b(from)g(the)h(RestF)-8
-b(req)57 b(attribute)g(of)2452 4636 y(the)44 b(Sp)s(ecF)-8
-b(rame,)47 b(but)c(only)h(if)g(the)g(Sys-)2452 4749 y(tem)37
-b(attribute)h(is)f(not)h(set)f(to)h(\\W)-10 b(A)g(VE",)2452
-4862 y(\\V)m(OPT",)42 b(\\ZOPT")e(or)h(\\A)-10 b(W)g(A)g(V",)43
-b(and)2452 4975 y(only)c(if)g(RestF)-8 b(req)41 b(has)e(b)s(een)g(set)h
-(explic-)2452 5088 y(itly)-8 b(.)p 4000 5122 V -2 5799
-V 50 5201 a(RESTW)e(A)g(V)p Fx(a)p 801 5799 V 301 w FF(Used)34
-b(to)h(set)g(the)f(RestF)-8 b(req)36 b(attribute)f(of)852
-5314 y(the)c(Sp)s(ecF)-8 b(rame)31 b(\(after)h(con)m(v)m(ersion)g(from)
-852 5427 y(w)m(a)m(v)m(elength)h(to)e(frequency\).)p
-2400 5799 V 2452 5201 a(Set)56 b(from)g(the)h(RestF)-8
-b(req)57 b(attribute)g(of)2452 5314 y(the)28 b(Sp)s(ecF)-8
-b(rame)28 b(\(after)g(con)m(v)m(ersion\),)i(but)2452
-5427 y(only)56 b(if)h(the)g(System)f(attribute)h(is)g(set)2452
-5539 y(to)g(\\W)-10 b(A)g(VE",)58 b(\\V)m(OPT",)g(\\ZOPT")e(or)2452
-5652 y(\\A)-10 b(W)g(A)g(V",)54 b(and)e(only)g(if)g(RestF)-8
-b(req)54 b(has)2452 5765 y(b)s(een)29 b(set)i(explicitly)-8
-b(.)p 4000 5799 V -2 6138 4 339 v 50 5878 a(CNAME)p Fx(ia)p
-801 6138 V 381 w FF(Used)25 b(to)h(set)g(the)f(Lab)s(el)h(attributes)f
-(of)h(the)852 5991 y(W)m(CS)k(F)-8 b(rame)32 b(k)m(eyw)m(ords.)p
-2400 6138 V 2452 5878 a(Set)42 b(from)g(the)g(Lab)s(el)g(attributes)h
-(of)f(the)2452 5991 y(W)m(CS)28 b(F)-8 b(rame,)30 b(if)e(they)g(ha)m(v)
-m(e)i(b)s(een)d(set)i(ex-)2452 6104 y(plicitly)-8 b(.)p
-4000 6138 V 0 6141 4002 4 v 951 6416 a(T)g(able)31 b(3:)41
-b(Use)31 b(of)f(FITS-W)m(CS)g(P)m(ap)s(er)g(I)s(I)s(I)f(k)m(eyw)m(ords)
-p eop end
-%%Page: 539 549
-TeXDict begin 539 548 bop 0 52 a Fy(F.4)92 b(P)m(ap)s(er)30
-b(IV)g(-)h(Co)s(ordinate)f(Distortions)2056 b FF(539)0
-351 y Fw(F.4)113 b(P)m(ap)s(er)37 b(IV)g(-)h(Co)s(ordinate)g
-(Distortions)0 573 y FF(This)25 b(pap)s(er)f(prop)s(oses)h(that)h(an)g
-(additional)g(4)g(c)m(haracter)h(co)s(de)f(b)s(e)f(app)s(ended)f(to)i
-(the)g(end)f(of)h(the)f(CTYPE)p Fx(i)0 686 y FF(k)m(eyw)m(ord)k(to)h
-(sp)s(ecify)f(the)g(nature)f(of)h(an)m(y)h(distortion)f(a)m(w)m(a)m(y)i
-(from)d(the)h(basic)h(algorithm)g(describ)s(ed)d(b)m(y)i(the)0
-799 y(\014rst)37 b(8)h(c)m(haracters)h(of)f(the)g(CTYPE)p
-Fx(i)46 b FF(v)-5 b(alue.)63 b(Curren)m(tly)37 b(AST)g(ignores)h(all)h
-(suc)m(h)e(co)s(des)h(when)e(reading)0 911 y(a)h(F)-8
-b(rameSet)38 b(from)f(a)g(FitsChan)g(\(except)h(for)f(the)g(\\-SIP")g
-(co)s(de)g(de\014ned)f(b)m(y)h(the)g(SIR)-8 b(TF)36 b(pro)5
-b(ject)38 b(-)f(see)0 1024 y(b)s(elo)m(w\).)71 b(This)39
-b(means)h(that)h(a)f(F)-8 b(rameSet)42 b(can)e(still)h(b)s(e)f(read)g
-(from)f(suc)m(h)h(headers,)j(but)c(the)i(Mapping)0 1137
-y(whic)m(h)33 b(giv)m(es)h(the)f(W)m(CS)g(p)s(osition)g(asso)s(ciated)i
-(with)d(a)i(giv)m(en)g(pixel)f(p)s(osition)g(will)g(re\015ect)h(only)f
-(the)g(basic)0 1250 y(algorithm)e(and)f(will)h(not)f(include)h(the)f
-(e\013ects)i(of)e(the)h(distortion.)0 1413 y(If)40 b(suc)m(h)g(a)h(F)-8
-b(rameSet)42 b(is)f(then)f(written)h(out)f(to)i(a)f(FitsChan,)i(the)e
-(resulting)f(CTYPE)p Fx(i)49 b FF(k)m(eyw)m(ords)41 b(will)0
-1526 y(include)30 b(no)g(distortion)h(co)s(de.)0 1816
-y FD(F.4.1)105 b(The)35 b(\\-SIP")f(distortion)h(co)s(de)0
-2037 y FF(The)d(SIR)-8 b(TF)32 b(pro)5 b(ject)33 b(\(h)m
-(ttp://sirtf.caltec)m(h.edu/SSC/\))j(has)c(dev)m(elop)s(ed)h(its)g(o)m
-(wn)g(system)f(for)h(enco)s(ding)0 2150 y(2-dimensional)27
-b(image)g(distortion)g(within)e(a)i(FITS)e(header,)i(based)f(on)g(the)g
-(prop)s(osals)g(of)g(pap)s(er)f(IV.)h(A)g(de-)0 2263
-y(scription)20 b(of)h(this)f(system)g(is)h(a)m(v)-5 b(ailable)22
-b(in)e(h)m(ttp://sirtf.caltec)m(h.edu/SSC/do)s(cumen)m(ts/W)m(CSk)m
-(eyw)m(ords)p Fq(_)p FF(v1.3.p)s(df.)0 2376 y(In)k(this)g(system,)i
-(the)e(presence)h(of)f(distortion)h(is)f(indicated)h(b)m(y)f(app)s
-(ending)f(the)i(distortion)g(co)s(de)f(\\-SIP")h(to)0
-2489 y(the)f(CTYPE)p Fx(i)32 b FF(k)m(eyw)m(ord)24 b(v)-5
-b(alues)24 b(for)f(the)h(celestial)i(axes.)39 b(The)23
-b(distortion)h(tak)m(es)h(the)f(form)f(of)h(a)g(p)s(olynomial)0
-2602 y(function)30 b(whic)m(h)g(is)h(applied)f(to)h(the)f(pixel)h(co)s
-(ordinates,)g(after)g(subtraction)g(of)f(the)h(CRPIX)p
-Fx(j)43 b FF(v)-5 b(alues.)0 2764 y(This)39 b(system)h(is)g(a)g
-(strictly)h(2)f(dimensional)g(system.)69 b(When)39 b(reading)h(a)g(F)-8
-b(rameSet)41 b(from)e(a)i(FitsChan)0 2877 y(whic)m(h)c(includes)f(the)h
-(\\-SIP")g(distortion)h(co)s(de,)h(AST)d(assumes)g(that)i(it)f(is)g
-(only)g(applied)f(to)i(the)f(\014rst)f(2)0 2990 y(W)m(CS)j(axes)g(in)g
-(a)g(FITS)f(header)h(\(i.e.)67 b(CTYPE1)39 b(and)f(CTYPE2\).)66
-b(If)39 b(the)g(\\-SIP")g(distortion)g(co)s(de)g(is)0
-3103 y(attac)m(hed)h(to)f(other)f(axes,)j(it)e(will)f(b)s(e)f(ignored.)
-64 b(The)38 b(distortion)h(itself)g(is)f(represen)m(ted)g(b)m(y)g(a)g
-(P)m(olyMap)0 3216 y(within)30 b(the)g(resulting)h(F)-8
-b(rameSet.)0 3379 y(If)27 b(a)h(F)-8 b(rameSet)29 b(is)f(read)g(from)f
-(a)h(FitsChan)g(whic)m(h)g(includes)f(\\-SIP")h(distortion,)h(and)e(an)
-h(attempt)h(is)f(then)0 3492 y(made)d(to)g(write)f(this)h(F)-8
-b(rameSet)26 b(out)e(to)h(a)g(FitsChan,)h(the)f(write)g(op)s(eration)f
-(will)h(fail)g(unless)f(the)h(distortion)0 3605 y(is)34
-b(insigni\014can)m(t)i(\()p Fx(i.e.)52 b FF(is)34 b(so)h(small)g(that)g
-(the)g(tests)g(for)f(linearit)m(y)i(built)e(in)m(to)i(AST)d(are)i
-(passed\).)53 b(In)34 b(this)0 3718 y(case,)e(no)e(distortion)h(co)s
-(de)f(will)h(b)s(e)f(app)s(ended)f(to)i(the)f(resulting)h(CTYPE)p
-Fx(i)38 b FF(k)m(eyw)m(ord)31 b(v)-5 b(alues.)p eop end
-%%Page: 540 550
-TeXDict begin 540 549 bop 0 52 a FF(540)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)0 351 y Fz(G)134
-b(Changes)46 b(and)e(New)i(F)-11 b(eatures)0 598 y Fw(G.1)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.1)0 811 y FF(The)26
-b(follo)m(wing)i(describ)s(es)d(the)i(most)f(signi\014can)m(t)i(c)m
-(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g(AST)g(library)g(b)s(et)m
-(w)m(een)0 924 y(v)m(ersions)31 b(V1.0)g(and)f(V1.1)i(\(not)f(the)f
-(most)h(recen)m(t)g(v)m(ersion\):)111 1150 y(1.)46 b(A)37
-b(new)g(\\Ho)m(w)h(T)-8 b(o.)16 b(.)f(.)h(")60 b(section)38
-b(\()p Fu(x)p FF(3\))h(has)d(b)s(een)g(added)h(to)g(this)g(do)s(cumen)m
-(t.)60 b(It)37 b(con)m(tains)h(simple)227 1263 y(recipies)31
-b(for)f(p)s(erforming)g(commonly-required)g(op)s(erations)h(using)f
-(AST.)111 1441 y(2.)46 b(A)36 b(new)g(astUnformat)g(function)g(has)g(b)
-s(een)f(pro)m(vided)h(to)g(read)g(formatted)h(co)s(ordinate)f(v)-5
-b(alues)37 b(for)227 1554 y(the)27 b(axes)h(of)f(a)g(F)-8
-b(rame)27 b(\()p Fu(x)p FF(7.8\).)42 b(In)26 b(essence,)j(this)d
-(function)h(is)g(the)g(in)m(v)m(erse)g(of)g(astF)-8 b(ormat.)42
-b(It)27 b(ma)m(y)g(b)s(e)227 1667 y(used)e(to)i(deco)s(de)f
-(user-supplied)f(formatted)h(v)-5 b(alues)26 b(represen)m(ting)h(co)s
-(ordinates,)g(turning)f(them)f(in)m(to)227 1780 y(n)m(umerical)i(v)-5
-b(alues)27 b(for)f(pro)s(cessing.)39 b(Celestial)28 b(co)s(ordinates)f
-(ma)m(y)g(also)g(b)s(e)f(read)g(using)g(this)g(function)227
-1893 y(\()p Fu(x)p FF(8.7\))33 b(and)d(free-format)h(input)e(is)i(supp)
-s(orted.)111 2072 y(3.)46 b(The)41 b(F)-8 b(ormat)42
-b(attribute)g(string)f(used)f(b)m(y)h(a)h(SkyF)-8 b(rame)41
-b(when)f(formatting)i(celestial)i(co)s(ordinate)227 2185
-y(v)-5 b(alues)30 b(no)m(w)f(allo)m(ws)i(the)e(degrees/hours)g(\014eld)
-g(to)h(b)s(e)e(omitted,)j(so)e(that)h(celestial)i(co)s(ordinates)e(ma)m
-(y)227 2297 y(b)s(e)k(giv)m(en)i(in)e(\()p Fx(e.g.)p
-FF(\))53 b(arc-min)m(utes)35 b(and/or)f(arc-seconds)i(\()p
-Fu(x)p FF(8.6\).)55 b(As)34 b(a)h(result,)h(the)f(degrees/hours)227
-2410 y(\014eld)28 b(is)f(no)h(longer)g(included)f(b)m(y)g(default.)40
-b(A)28 b(new)f(\\t")i(format)f(sp)s(eci\014er)f(has)h(b)s(een)e(in)m
-(tro)s(duced)i(\(see)227 2523 y(the)i(F)-8 b(ormat)31
-b(attribute\))g(to)f(allo)m(w)h(min)m(utes)f(and/or)f(seconds)h(of)g
-(time)g(to)g(b)s(e)f(sp)s(eci\014ed)g(if)h(required.)111
-2702 y(4.)46 b(A)38 b(new)f(function)g(astMapBo)m(x)i(has)e(b)s(een)g
-(in)m(tro)s(duced.)61 b(This)37 b(allo)m(ws)h(y)m(ou)g(to)g(\014nd)e
-(the)i(exten)m(t)g(of)227 2815 y(a)k(\\b)s(ounding)e(b)s(o)m(x")i(whic)
-m(h)f(just)g(encloses)h(another)g(b)s(o)m(x)f(after)h(it)g(has)f(b)s
-(een)g(transformed)g(b)m(y)g(a)227 2928 y(Mapping.)60
-b(A)36 b(t)m(ypical)i(use)f(migh)m(t)g(b)s(e)f(to)h(calculate)i(the)e
-(size)h(whic)m(h)e(an)g(image)i(w)m(ould)f(ha)m(v)m(e)g(if)g(it)227
-3041 y(w)m(ere)31 b(transformed)f(b)m(y)g(the)h(Mapping.)111
-3219 y(5.)46 b(A)26 b(new)e(class)j(of)e(Ob)5 b(ject,)27
-b(the)e(In)m(traMap,)i(has)e(b)s(een)g(in)m(tro)s(duced)g(\()p
-Fu(x)p FF(20\).)41 b(This)24 b(is)h(a)h(sp)s(ecialised)g(form)227
-3332 y(of)21 b(Mapping)g(whic)m(h)g(encapsulates)h(a)f(priv)-5
-b(ately-de\014ned)21 b(co)s(ordinate)h(transformation)f(function)g(\()p
-Fx(e.g.)227 3445 y FF(written)38 b(in)f(C\))g(so)g(that)h(it)g(ma)m(y)g
-(b)s(e)e(used)h(lik)m(e)h(an)m(y)g(other)f(AST)g(Mapping.)61
-b(This)37 b(allo)m(ws)h(y)m(ou)g(to)227 3558 y(create)32
-b(Mappings)e(that)h(p)s(erform)e(an)m(y)i(conceiv)-5
-b(able)32 b(co)s(ordinate)f(transformation.)111 3737
-y(6.)46 b(The)27 b(in)m(ternal)h(in)m(tegrit)m(y)h(of)e(a)h(F)-8
-b(rameSet)28 b(is)g(no)m(w)f(automatically)j(preserv)m(ed)d(whenev)m
-(er)g(c)m(hanges)h(are)227 3849 y(made)i(to)h(an)m(y)f(attributes)h
-(whic)m(h)f(a\013ect)h(the)g(curren)m(t)e(F)-8 b(rame)31
-b(\(either)g(b)m(y)f(setting)h(or)f(clearing)h(their)227
-3962 y(v)-5 b(alues\).)46 b(This)31 b(is)g(accomplished)i(b)m(y)e
-(appropriately)h(re-mapping)g(the)f(curren)m(t)h(F)-8
-b(rame)33 b(to)f(accoun)m(t)227 4075 y(for)e(an)m(y)h(c)m(hange)h(to)f
-(the)f(co)s(ordinate)i(system)e(whic)m(h)g(it)h(represen)m(ts)f(\()p
-Fu(x)p FF(14.6\).)111 4254 y(7.)46 b(The)33 b(in)m(ternal)g(structure)g
-(of)g(a)g(F)-8 b(rameSet)35 b(is)e(no)m(w)g(automatically)i(tidied)e
-(to)h(eliminate)h(redundan)m(t)227 4367 y(no)s(des)41
-b(whenev)m(er)g(an)m(y)h(of)g(its)g(F)-8 b(rames)42 b(is)g(remo)m(v)m
-(ed)h(or)e(re-mapp)s(ed.)73 b(Automatic)44 b(simpli\014cation)227
-4480 y(of)e(an)m(y)f(comp)s(ound)f(Mappings)h(whic)m(h)h(result)f(ma)m
-(y)h(also)g(o)s(ccur.)73 b(The)41 b(e\013ect)i(of)f(this)f(c)m(hange)h
-(is)227 4593 y(to)34 b(prev)m(en)m(t)g(the)f(accum)m(ulation)i(of)e
-(unnecessary)f(structure)h(in)g(F)-8 b(rameSets)34 b(whic)m(h)f(are)g
-(rep)s(eatedly)227 4706 y(mo)s(di\014ed.)111 4884 y(8.)46
-b(Some)39 b(impro)m(v)m(emen)m(ts)g(ha)m(v)m(e)h(b)s(een)d(made)i(to)g
-(the)g(algorithms)g(for)f(simplifying)g(comp)s(ound)f(Map-)227
-4997 y(pings,)30 b(as)h(used)f(b)m(y)g(astSimplify)-8
-b(.)111 5176 y(9.)46 b(The)23 b(textual)h(represen)m(tation)g(used)e
-(for)h(some)g(Ob)5 b(jects)23 b(\()p Fx(i.e.)g FF(when)f(they)h(are)g
-(written)g(to)h(a)f(Channel\))227 5289 y(has)30 b(c)m(hanged)h(sligh)m
-(tly)-8 b(,)33 b(but)c(remains)i(compatible)g(with)f(earlier)i(v)m
-(ersions)e(of)h(AST.)66 5467 y(10.)46 b(In)m(terfaces)39
-b(to)g(the)f(in)m(ternal)h(functions)f(and)f(macros)i(used)e(b)m(y)h
-(AST)f(for)h(handling)f(memory)h(and)227 5580 y(error)f(conditions)h
-(are)g(no)m(w)f(pro)m(vided)g Fx(via)h FF(the)f(\\ast.h")i(header)e
-(\014le.)62 b(This)37 b(is)g(for)g(the)h(b)s(ene\014t)e(of)227
-5693 y(those)31 b(writing)g(\()p Fx(e.g.)p FF(\))40 b(new)30
-b(graphics)g(in)m(terfaces)i(for)e(AST.)p eop end
-%%Page: 541 551
-TeXDict begin 541 550 bop 0 52 a Fy(G.2)92 b(Changes)30
-b(In)m(tro)s(duced)f(in)i(V1.2)2294 b FF(541)66 351 y(11.)46
-b(A)28 b(problem)g(has)g(b)s(een)f(\014xed)g(whic)m(h)h(could)g(result)
-g(when)f(using)h(astRead)h(to)g(read)f(FITS)f(headers)h(in)227
-464 y(whic)m(h)j(the)h(CDEL)-8 b(T)31 b(v)-5 b(alue)31
-b(is)h(zero.)44 b(Previously)-8 b(,)32 b(this)f(could)h(pro)s(duce)e(a)
-h(Mapping)h(whose)f(in)m(v)m(erse)227 577 y(transformation)37
-b(w)m(as)f(not)g(de\014ned)f(and)g(this)h(could)g(unnecessarily)g
-(restrict)h(the)f(use)g(to)g(whic)m(h)g(it)227 690 y(could)26
-b(b)s(e)e(put.)39 b(The)24 b(problem)h(has)g(b)s(een)g(o)m(v)m(ercome)i
-(b)m(y)f(supplying)e(a)h(suitable)h(small)g(CDEL)-8 b(T)25
-b(v)-5 b(alue)227 803 y(for)30 b(FITS)g(axes)h(whic)m(h)f(ha)m(v)m(e)i
-(only)e(a)h(single)g(pixel.)66 989 y(12.)46 b(A)37 b(bug)f(has)h(b)s
-(een)f(\014xed)g(whic)m(h)g(could)h(o)s(ccasionally)i(cause)e(a)g
-(MatrixMap)h(to)g(b)s(e)e(used)g(with)g(the)227 1102
-y(wrong)e(In)m(v)m(ert)g(attribute)g(v)-5 b(alue)35 b(when)d(it)j
-(forms)e(part)h(of)f(a)i(comp)s(ound)d(Mapping)i(whic)m(h)f(is)h(b)s
-(eing)227 1215 y(simpli\014ed)c(using)g(astSimplify)-8
-b(.)66 1401 y(13.)46 b(A)37 b(problem)f(has)g(b)s(een)g(\014xed)g(whic)
-m(h)h(could)f(prev)m(en)m(t)i(tic)m(k)g(marks)e(b)s(eing)g(dra)m(wn)g
-(on)h(a)g(co)s(ordinate)227 1514 y(axis)31 b(close)h(to)f(a)g
-(singularit)m(y)g(in)f(the)h(co)s(ordinate)g(system.)0
-1806 y Fw(G.2)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.2)0
-2026 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 2139 y(v)m(ersions)31
-b(V1.1)g(and)f(V1.2)i(\(not)f(the)f(most)h(recen)m(t)g(v)m(ersion\):)
-111 2396 y(1.)46 b(A)c(new)f(function,)j(astP)m(olyCurv)m(e,)i(has)c(b)
-s(een)e(in)m(tro)s(duced)h(to)i(allo)m(w)g(more)f(e\016cien)m(t)h
-(plotting)f(of)227 2509 y(m)m(ultiple)31 b(geo)s(desic)h(curv)m(es)e
-(\()p Fu(x)p FF(21.3\).)111 2695 y(2.)46 b(A)32 b(new)g(set)h(of)f
-(functions,)g(astResample)p Fo(<)p FF(X)p Fo(>)p FF(,)i(has)e(b)s(een)f
-(in)m(tro)s(duced)h(to)h(p)s(erform)d(resampling)i(of)227
-2808 y(gridded)d(data)g(suc)m(h)g(as)g(images)i(\()p
-Fx(i.e.)d FF(re-gridding\))i(under)d(the)j(con)m(trol)g(of)f(a)h
-(geometrical)i(transfor-)227 2921 y(mation)f(sp)s(eci\014ed)f(b)m(y)g
-(a)h(Mapping.)111 3107 y(3.)46 b(The)40 b(command-line)g(options)g(\\)p
-Fu(\000)p FF(pgp")g(and)f(\\)p Fu(\000)p FF(pgplot",)44
-b(whic)m(h)39 b(w)m(ere)i(previously)e(synon)m(ymous)227
-3220 y(when)20 b(used)g(with)h(the)g(\\ast)p Fq(_)p FF(link")h(and)f
-(\\ast)p Fq(_)p FF(link)p Fq(_)p FF(adam")h(commands,)g(are)g(no)e
-(longer)i(synon)m(ymous.)227 3333 y(The)28 b(option)h(\\)p
-Fu(\000)p FF(pgp")g(no)m(w)g(causes)g(linking)f(with)h(the)f(Starlink)h
-(v)m(ersion)g(of)f(PGPLOT)g(\(whic)m(h)h(uses)227 3446
-y(GKS)23 b(to)g(generate)i(its)e(output\),)i(while)e(\\)p
-Fu(\000)p FF(pgplot")h(links)e(with)h(the)g(standard)f(\(or)h(\\nativ)m
-(e"\))j(v)m(ersion)227 3559 y(of)31 b(PGPLOT.)111 3745
-y(4.)46 b(The)40 b(function)f(astMapBo)m(x)j(has)e(b)s(een)f(c)m
-(hanged)i(to)f(execute)i(more)e(quic)m(kly)-8 b(,)44
-b(although)c(this)g(has)227 3858 y(b)s(een)30 b(ac)m(hiev)m(ed)i(at)f
-(the)g(cost)g(of)g(some)f(loss)h(of)g(robustness)e(when)g(used)h(with)g
-(di\016cult)g(Mappings.)111 4044 y(5.)46 b(A)21 b(new)e(v)-5
-b(alue)21 b(of)g(\\FITS-IRAF")g(has)f(b)s(een)f(in)m(tro)s(duced)h(for)
-g(the)g(Enco)s(ding)g(attribute)h(of)f(a)h(FitsChan.)227
-4157 y(This)30 b(new)g(enco)s(ding)h(pro)m(vides)g(an)g(in)m(terim)g
-(solution)g(to)h(the)f(problem)f(of)h(storing)g(co)s(ordinate)h(sys-)
-227 4270 y(tem)j(information)g(in)f(FITS)g(headers,)i(un)m(til)e(the)h
-(prop)s(osed)e(new)h(FITS-W)m(CS)h(standard)e(b)s(ecomes)227
-4383 y(stable.)111 4569 y(6.)46 b(When)27 b(a)g(F)-8
-b(rameSet)29 b(is)e(created)h(from)e(a)i(set)f(of)g(FITS)g(header)g
-(cards)f(\(b)m(y)i(reading)f(from)f(a)i(FitsChan)227
-4682 y(using)e(a)g(\\foreign")h(enco)s(ding\),)g(the)f(base)g(F)-8
-b(rame)27 b(of)e(the)h(resulting)g(F)-8 b(rameSet)27
-b(no)m(w)f(has)g(its)g(Domain)227 4795 y(attribute)31
-b(set)f(to)h(\\GRID".)g(This)e(re\015ects)h(the)g(fact)h(that)f(this)g
-(F)-8 b(rame)31 b(represen)m(ts)e(FITS)g(data)i(grid)227
-4908 y(co)s(ordinates)39 b(\(equiv)-5 b(alen)m(t)40 b(to)e(FITS)g
-(pixel)g(co)s(ordinates|see)h Fu(x)p FF(7.13\).)66 b(Previously)-8
-b(,)41 b(this)d(Domain)227 5021 y(v)-5 b(alue)31 b(w)m(as)g(not)f(set.)
-111 5207 y(7.)46 b(astFindFits)32 b(no)m(w)e(ignores)h(trailing)g
-(spaces)g(in)f(its)h(k)m(eyw)m(ord)g(template.)111 5394
-y(8.)46 b(astPutFits)e(no)m(w)f(recognises)h(\\D")h(and)d(\\d")h(as)g
-(v)-5 b(alid)44 b(exp)s(onen)m(t)f(c)m(haracters)h(in)f(\015oating)g(p)
-s(oin)m(t)227 5507 y(n)m(um)m(b)s(ers.)111 5693 y(9.)j(The)22
-b(FitsChan)h(class)g(is)f(no)m(w)h(more)f(toleran)m(t)j(of)d(common)h
-(minor)f(violations)i(of)f(the)f(FITS)g(standard.)p eop
-end
-%%Page: 542 552
-TeXDict begin 542 551 bop 0 52 a FF(542)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)66 351 y FF(10.)46
-b(The)f(FitsChan)g(class)g(no)m(w)g(incorp)s(orates)h(an)f(impro)m(v)m
-(ed)g(test)h(for)f(the)g(linearit)m(y)h(of)f(Mappings,)227
-464 y(allo)m(wing)25 b(more)e(reliable)g(con)m(v)m(ersion)h(of)f(AST)f
-(data)i(in)m(to)f(FITS)f(\(using)h(\\foreign")h(FITS)e(enco)s(dings\).)
-66 666 y(11.)46 b(Some)33 b(further)e(impro)m(v)m(emen)m(ts)i(ha)m(v)m
-(e)h(b)s(een)d(made)i(to)g(the)f(algorithms)i(for)e(simplifying)g(comp)
-s(ound)227 779 y(Mappings,)f(as)f(used)g(b)m(y)g(astSimplify)-8
-b(.)66 982 y(12.)46 b(A)33 b(new)f(UnitRadius)g(attribute)h(has)g(b)s
-(een)e(added)h(to)i(the)e(SphMap)g(class.)48 b(This)31
-b(allo)m(ws)j(impro)m(v)m(ed)227 1095 y(simpli\014cation)k(of)e(comp)s
-(ound)f(Mappings)i(\(CmpMaps\))f(in)m(v)m(olving)i(SphMaps)d(and)h(t)m
-(ypically)i(im-)227 1208 y(pro)m(v)m(es)31 b(p)s(erformance)f(when)f
-(handling)h(FITS)g(w)m(orld)g(co)s(ordinate)h(information.)66
-1410 y(13.)46 b(A)30 b(MatrixMap)h(no)e(longer)i(propagates)f(input)f
-(co)s(ordinate)h(v)-5 b(alues)30 b(of)g(AST)p Fq(__)p
-FF(BAD)g(automatically)227 1523 y(to)40 b(all)g(output)f(co)s
-(ordinates.)68 b(If)38 b(certain)i(output)f(co)s(ordinates)h(do)f(not)g
-(dep)s(end)f(on)h(the)g(a\013ected)227 1636 y(input)g(co)s
-(ordinate\(s\))i(b)s(ecause)f(the)g(relev)-5 b(an)m(t)41
-b(matrix)f(elemen)m(ts)h(are)f(zero,)k(then)39 b(they)h(ma)m(y)g(no)m
-(w)227 1749 y(remain)31 b(v)-5 b(alid.)66 1951 y(14.)46
-b(A)32 b(minor)e(bug)h(has)g(b)s(een)g(corrected)h(whic)m(h)f(could)g
-(cause)h(certain)g(pro)5 b(jections)32 b(whic)m(h)f(in)m(v)m(olv)m(e)j
-(half)227 2064 y(the)k(celestial)i(sphere)d(to)h(pro)s(duce)e(v)-5
-b(alid)38 b(co)s(ordinates)g(for)f(the)h(other)g(\(unpro)5
-b(jected\))37 b(half)h(of)f(the)227 2177 y(sphere)30
-b(as)g(w)m(ell.)66 2379 y(15.)46 b(A)31 b(bug)f(has)h(b)s(een)f
-(\014xed)g(whic)m(h)h(could)g(o)s(ccasionally)i(cause)e(astCon)m(v)m
-(ert)i(to)e(think)g(that)g(con)m(v)m(ersion)227 2492
-y(b)s(et)m(w)m(een)g(a)g(CmpF)-8 b(rame)30 b(and)g(another)h(F)-8
-b(rame)31 b(w)m(as)g(p)s(ossible)f(when,)f(in)h(fact,)i(it)f(w)m
-(asn't.)0 2810 y Fw(G.3)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f
-(V1.3)0 3042 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 3155 y(v)m(ersions)31
-b(V1.2)g(and)f(V1.3)i(\(not)f(the)f(most)h(recen)m(t)g(v)m(ersion\):)
-111 3439 y(1.)46 b(A)41 b(new)g(set)h(of)f(functions,)i(astResample)p
-Fo(<)p FF(X)p Fo(>)p FF(,)i(has)c(b)s(een)f(in)m(tro)s(duced)h(to)g
-(pro)m(vide)h(e\016cien)m(t)g(re-)227 3552 y(sampling)32
-b(of)f(gridded)g(data,)i(suc)m(h)e(as)g(sp)s(ectra)h(and)f(images,)i
-(under)d(the)h(con)m(trol)i(of)f(a)g(geometrical)227
-3665 y(transformation)j(sp)s(eci\014ed)e(b)m(y)h(a)h(Mapping.)51
-b(A)35 b(v)-5 b(ariet)m(y)35 b(of)f(sub-pixel)g(in)m(terp)s(olation)h
-(sc)m(hemes)g(are)227 3778 y(supp)s(orted.)111 3980 y(2.)46
-b(A)32 b(new)f(class,)i(PcdMap,)g(has)e(b)s(een)g(in)m(tro)s(duced.)44
-b(This)31 b(is)h(a)g(sp)s(ecialised)g(form)f(of)h(Mapping)g(whic)m(h)
-227 4093 y(implemen)m(ts)f(2-dimensional)g(pincushion)e(or)i(barrel)f
-(distortion.)111 4296 y(3.)46 b(A)40 b(bug)f(has)h(b)s(een)f(\014xed)g
-(whic)m(h)h(could)g(cause)g(a)g(FitsChan)g(to)h(pro)s(duce)d(to)s(o)j
-(man)m(y)f(digits)g(when)227 4409 y(formatting)31 b(\015oating)g(p)s
-(oin)m(t)f(v)-5 b(alues)31 b(for)e(inclusion)h(in)g(a)h(FITS)e(header)h
-(if)g(the)g(n)m(umerical)h(v)-5 b(alue)30 b(w)m(as)227
-4522 y(in)g(the)h(range)g(-0.00099999.)20 b(.)15 b(.)g(to)32
-b(-0.0001.)111 4724 y(4.)46 b(A)32 b(bug)f(has)g(b)s(een)f(\014xed)h
-(whic)m(h)g(could)h(cause)g(a)f(FitsChan)h(to)g(lose)g(the)f(commen)m
-(t)i(asso)s(ciated)g(with)227 4837 y(a)e(string)f(v)-5
-b(alue)31 b(in)f(a)h(FITS)f(header.)111 5039 y(5.)46
-b(A)27 b(FitsChan)f(no)m(w)h(rep)s(orts)e(an)i(error)f(if)g(it)h(reads)
-g(a)f(FITS)g(header)h(whic)m(h)f(iden)m(ti\014es)h(a)g(non-standard)227
-5152 y(sky)41 b(pro)5 b(jection)42 b(\(previously)-8
-b(,)44 b(this)d(w)m(as)g(accepted)h(without)f(error)g(and)f(a)h
-(Cartesian)h(pro)5 b(jection)227 5265 y(used)30 b(instead\).)111
-5467 y(6.)46 b(A)d(bug)f(has)h(b)s(een)e(\014xed)h(whic)m(h)h(could)g
-(prev)m(en)m(t)g(con)m(v)m(ersion)h(b)s(et)m(w)m(een)f(the)g(co)s
-(ordinate)g(systems)227 5580 y(represen)m(ted)d(b)m(y)f(t)m(w)m(o)i
-(CmpF)-8 b(rames.)69 b(This)38 b(could)i(only)g(o)s(ccur)f(if)h(the)g
-(CmpF)-8 b(rames)39 b(con)m(tained)i(a)227 5693 y(relativ)m(ely)33
-b(large)e(n)m(um)m(b)s(er)f(of)g(nested)g(F)-8 b(rames.)p
-eop end
-%%Page: 543 553
-TeXDict begin 543 552 bop 0 52 a Fy(G.4)92 b(Changes)30
-b(In)m(tro)s(duced)f(in)i(V1.4)2294 b FF(543)111 351
-y(7.)46 b(F)-8 b(urther)35 b(impro)m(v)m(emen)m(ts)h(ha)m(v)m(e)g(b)s
-(een)e(made)h(to)h(the)f(simpli\014cation)h(of)f(comp)s(ound)e
-(Mappings,)j(in-)227 464 y(cluding)29 b(\014xes)g(for)g(sev)m(eral)i
-(bugs)d(whic)m(h)h(could)h(cause)f(inde\014nite)g(lo)s(oping)h(or)f(un)
-m(w)m(an)m(ted)g(error)g(mes-)227 577 y(sages.)111 778
-y(8.)46 b(Some)31 b(memory)f(leaks)h(ha)m(v)m(e)h(b)s(een)d(\014xed.)
-111 978 y(9.)46 b(A)31 b(small)g(n)m(um)m(b)s(er)e(of)h(do)s(cumen)m
-(tation)h(errors)f(ha)m(v)m(e)i(b)s(een)e(corrected.)0
-1293 y Fw(G.4)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.4)0
-1524 y FF(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 1637 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V1.3)g(and)f(V1.4)i(\(not)f(the)f(most)h(recen)m(t)g(v)
-m(ersion\):)111 1918 y(1.)46 b(A)35 b(new)g(MathMap)h(class)g(has)e(b)s
-(een)h(in)m(tro)s(duced.)54 b(This)34 b(is)h(a)g(form)g(of)g(Mapping)g
-(that)h(allo)m(ws)g(y)m(ou)227 2031 y(to)c(de\014ne)f(co)s(ordinate)h
-(transformations)g(in)f(a)h(\015exible)f(and)g(transp)s(ortable)g(w)m
-(a)m(y)h(using)f(arithmetic)227 2144 y(op)s(erations)g(and)f
-(mathematical)i(functions)e(similar)h(to)g(those)g(a)m(v)-5
-b(ailable)33 b(in)d(C.)111 2345 y(2.)46 b FD(W)-12 b(ARNING|INCOMP)j(A)
-g(TIBLE)24 b(CHANGE.)c FF(T)-8 b(ransformation)21 b(functions)g(used)f
-(with)h(the)227 2458 y(In)m(traMap)34 b(class)f(\(see,)i(for)d
-(example,)j(astIn)m(traReg\))f(no)m(w)f(require)g(a)g(\\this")g(p)s
-(oin)m(ter)g(as)g(their)g(\014rst)227 2571 y(parameter.)55
-b FD(Existing)40 b(implemen)m(tations)g(will)f(not)h(con)m(tin)m(ue)h
-(to)e(w)m(ork)h(correctly)h(with)227 2683 y(this)c(v)m(ersion)g(of)f
-(AST)g(unless)h(this)g(parameter)e(is)i(added.)44 b FF(There)31
-b(is)h(no)g(need)f(for)g(existing)227 2796 y(soft)m(w)m(are)h(to)f(mak)
-m(e)h(use)e(of)g(this)g(p)s(oin)m(ter,)h(but)f(it)h(m)m(ust)f(b)s(e)g
-(presen)m(t.)227 2953 y(This)45 b(c)m(hange)h(has)f(b)s(een)g(in)m(tro)
-s(duced)g(so)g(that)h(transformation)g(functions)f(can)g(gain)h(access)
-h(to)227 3066 y(In)m(traMap)31 b(attributes.)111 3266
-y(3.)46 b(A)34 b(new)e(In)m(traFlag)j(attribute)f(has)f(b)s(een)f
-(added)h(to)h(the)f(In)m(traMap)g(class.)50 b(This)33
-b(allo)m(ws)h(the)f(trans-)227 3379 y(formation)i(functions)e(used)g(b)
-m(y)h(In)m(traMaps)g(to)h(adapt)f(to)g(pro)s(duce)f(the)h(required)f
-(transformation)227 3492 y(on)e(a)f(p)s(er-In)m(traMap)g(basis)h(\()p
-Fu(x)p FF(20.9\).)111 3693 y(4.)46 b(The)30 b(Plot)h(attributes)g(Ma)5
-b(jTic)m(kLen)31 b(and)f(MinTic)m(kLen,)h(whic)m(h)f(con)m(trol)i(the)f
-(length)f(of)h(ma)5 b(jor)30 b(and)227 3806 y(minor)d(tic)m(k)i(marks)e
-(on)g(co)s(ordinate)h(axes,)h(ma)m(y)e(no)m(w)h(b)s(e)e(subscripted)g
-(using)h(an)g(axis)h(n)m(um)m(b)s(er.)38 b(This)227 3919
-y(allo)m(ws)31 b(tic)m(k)g(marks)e(of)g(di\013eren)m(t)h(lengths)g(to)g
-(b)s(e)f(used)g(on)g(eac)m(h)h(axis.)41 b(It)30 b(also)g(allo)m(ws)h
-(tic)m(k)g(marks)e(to)227 4032 y(b)s(e)h(suppressed)e(on)j(one)f(axis)h
-(only)g(b)m(y)f(setting)h(the)g(length)g(to)g(zero.)111
-4232 y(5.)46 b(The)33 b(v)-5 b(alue)34 b(of)f(the)h(Plot)g(attribute)g
-(NumLab,)f(whic)m(h)g(con)m(trols)h(the)g(plotting)g(of)f(n)m(umerical)
-h(lab)s(els)227 4345 y(on)h(co)s(ordinate)g(axes,)i(no)d(longer)i(has)e
-(an)m(y)h(e\013ect)h(on)e(whether)g(lab)s(elling)i(of)f(a)g(co)s
-(ordinate)g(grid)f(is)227 4458 y(in)m(terior)d(or)g(exterior)g(\(as)g
-(con)m(trolled)h(b)m(y)e(the)h(Lab)s(elling)g(attribute\).)111
-4658 y(6.)46 b(The)32 b(FitsChan)h(class)g(no)m(w)g(pro)m(vides)f(some)
-i(supp)s(ort)c(for)j(the)g(IRAF-sp)s(eci\014c)g(\\ZPX")g(sky)f(pro)5
-b(jec-)227 4771 y(tion,)28 b(whic)m(h)f(is)g(con)m(v)m(erted)h
-(transparen)m(tly)f(in)m(to)g(the)g(equiv)-5 b(alen)m(t)28
-b(FITS)e(\\ZPN")h(pro)5 b(jection)28 b(\(see)f(the)227
-4884 y(description)k(of)f(the)h(Enco)s(ding)f(attribute)h(for)f
-(details\).)111 5085 y(7.)46 b(The)28 b(FitsChan)g(class)h(no)m(w)f
-(recognises)h(the)f(co)s(ordinate)h(system)f(\\ICRS")g(\(In)m
-(ternational)i(Celestial)227 5198 y(Reference)36 b(System\))e(as)h
-(equiv)-5 b(alen)m(t)36 b(to)g(\\FK5".)54 b(This)34 b(is)h(an)f(in)m
-(terim)h(measure)g(and)f(full)g(supp)s(ort)227 5310 y(for)j(the)f
-(\(exceedingly)j(small\))e(di\013erence)g(b)s(et)m(w)m(een)g(ICRS)f
-(and)g(FK5)h(will)f(b)s(e)g(added)g(at)h(a)g(future)227
-5423 y(release.)227 5580 y(Note)g(that)f(\\ICRS")g(is)f(not)h(y)m(et)h
-(recognised)f(as)g(a)g(co)s(ordinate)g(system)g(b)m(y)g(other)f
-(classes)i(suc)m(h)e(as)227 5693 y(SkyF)-8 b(rame,)31
-b(so)g(this)f(c)m(hange)i(only)e(facilitates)j(the)e(imp)s(ortation)g
-(of)f(foreign)h(data.)p eop end
-%%Page: 544 554
-TeXDict begin 544 553 bop 0 52 a FF(544)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FF(8.)46
-b(A)35 b(bug)f(in)g(the)g(FitsChan)g(class)i(has)e(b)s(een)f(\014xed)h
-(whic)m(h)g(could)h(result)f(in)g(longitude)h(v)-5 b(alues)35
-b(b)s(eing)227 464 y(incorrect)30 b(b)m(y)f(180)i(degrees)f(when)e
-(using)h(cylindrical)h(sky)e(pro)5 b(jections,)31 b(suc)m(h)e(as)g(the)
-g(FITS)g(\\CAR")227 577 y(pro)5 b(jection.)111 766 y(9.)46
-b(A)30 b(bug)f(in)g(the)h(FitsChan)f(class)h(has)f(b)s(een)g(\014xed)g
-(whic)m(h)g(could)h(result)f(in)g(the)h(FITS)f(sky)g(pro)5
-b(jection)227 879 y(parameters)40 b(Pro)5 b(jP\(0\))39
-b(to)h(Pro)5 b(jP\(9\))40 b(b)s(eing)e(incorrectly)i(named)f(PR)m(OJP1)
-f(to)i(PR)m(OJP10)f(when)227 992 y(written)31 b(out)f(as)h(FITS)f
-(cards.)66 1181 y(10.)46 b(A)e(bug)e(in)i(the)f(FitsChan)g(class)h(has)
-g(b)s(een)e(\014xed)h(whic)m(h)g(could)g(cause)h(confusion)f(b)s(et)m
-(w)m(een)h(the)227 1293 y(FITS-IRAF)31 b(and)g(FITS-W)m(CS)g(enco)s
-(ding)g(sc)m(hemes)h(if)f(b)s(oth)g(a)g(CD)h(matrix)f(and)g(a)h(PC)e
-(matrix)i(are)227 1406 y(erroneously)f(presen)m(t)f(in)g(a)h(FITS)e
-(header.)66 1595 y(11.)46 b(Some)31 b(minor)f(memory)g(leaks)h(ha)m(v)m
-(e)h(b)s(een)d(\014xed.)66 1784 y(12.)46 b(A)31 b(small)g(n)m(um)m(b)s
-(er)e(of)h(do)s(cumen)m(tation)h(errors)f(ha)m(v)m(e)i(b)s(een)e
-(corrected.)0 2079 y Fw(G.5)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f
-(V1.5)0 2302 y FF(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 2414 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V1.4)g(and)f(V1.5)i(\(not)f(the)f(most)h(recen)m(t)g(v)
-m(ersion\):)111 2679 y(1.)46 b(The)36 b(FitsChan)g(class)i(has)e(b)s
-(een)f(mo)s(di\014ed)h(to)h(supp)s(ort)d(the)j(latest)h(draft)e(FITS)g
-(W)m(CS)g(standard,)227 2791 y(describ)s(ed)27 b(in)g(the)h(t)m(w)m(o)h
-(pap)s(ers)e(\\Represen)m(tation)i(of)f(w)m(orld)g(co)s(ordinates)g(in)
-f(FITS")h(\(E.W.)16 b(Greisen)227 2904 y(and)31 b(M.)16
-b(Calabretta,)34 b(dated)d(30th)i(No)m(v)m(em)m(b)s(er,)g(1999\),)i
-(and)c(\\Represen)m(tation)i(of)f(celestial)i(co)s(ordi-)227
-3017 y(nates)27 b(in)e(FITS")h(\(M.)16 b(Calabretta)27
-b(and)f(E.W.)16 b(Greisen,)27 b(dated)f(24th)h(Septem)m(b)s(er,)f
-(1999\).)41 b(These)26 b(are)227 3130 y(a)m(v)-5 b(ailable)33
-b(at)e(h)m(ttp://www.cv.nrao.edu/\014ts/do)s(cumen)m(ts/w)m(cs/w)m
-(cs.h)m(tml.)227 3281 y(The)f(FITS-W)m(CS)g(enco)s(ding)g(no)m(w)h
-(uses)f(these)h(up)s(dated)e(con)m(v)m(en)m(tions.)42
-b(The)30 b(main)h(c)m(hanges)g(are:)336 3495 y Fu(\017)46
-b FF(Rotation)31 b(and)d(scaling)h(of)g(pixel)g(axes)g(is)g(no)m(w)f
-(represen)m(ted)h(b)m(y)f(a)h(matrix)g(of)g Fq(CDj_i)e
-FF(k)m(eyw)m(ords)427 3608 y(instead)k(of)f(a)h(com)m(bination)h(of)e
-Fq(PCjjjiii)f FF(and)g Fq(CDELTj)g FF(k)m(eyw)m(ords.)336
-3755 y Fu(\017)46 b FF(Pro)5 b(jection)37 b(parameters)g(are)f(no)m(w)g
-(asso)s(ciated)h(with)f(particular)g(axes)h(and)e(are)h(represen)m(ted)
-427 3868 y(b)m(y)31 b Fq(PVi_m)d FF(k)m(eyw)m(ords)j(instead)g(of)f
-(the)h Fq(PROJPm)e FF(k)m(eyw)m(ords.)336 4014 y Fu(\017)46
-b FF(The)31 b(tangen)m(t)j(plane)d(pro)5 b(jection)33
-b(\(\\T)-8 b(AN"\))33 b(can)f(no)m(w)g(include)f(optional)i(p)s
-(olynomial)f(correc-)427 4127 y(tion)f(terms.)336 4274
-y Fu(\017)46 b FF(An)24 b(en)m(tire)g(set)h(of)e(k)m(eyw)m(ords)i(m)m
-(ust)e(b)s(e)g(supplied)g(for)g(eac)m(h)i(set)f(of)g(secondary)g(axis)g
-(descriptions,)427 4387 y(and)39 b(eac)m(h)i(suc)m(h)e(k)m(eyw)m(ord)h
-(m)m(ust)g(\014nish)e(with)h(a)h(single)g(c)m(haracter)h(indicating)g
-(whic)m(h)e(set)h(it)427 4500 y(b)s(elongs)f(to.)67 b(This)39
-b(means)f(that)i(k)m(eyw)m(ords)f(whic)m(h)g(previously)g(o)s(ccupied)g
-(eigh)m(t)h(c)m(haracters)427 4613 y(ha)m(v)m(e)d(b)s(een)f(shorten)f
-(to)i(sev)m(en)f(to)h(lea)m(v)m(e)h(ro)s(om)e(for)f(this)h(extra)h(c)m
-(haracter.)59 b(Th)m(us)35 b Fq(LONGPOLE)427 4726 y FF(has)30
-b(b)s(ecome)h Fq(LONPOLE)e FF(and)g Fq(RADECSYS)f FF(has)j(b)s(ecome)f
-Fq(RADESYS)p FF(.)111 4940 y(2.)46 b(Tw)m(o)31 b(new)f(enco)s(dings)g
-(ha)m(v)m(e)h(b)s(een)f(added)g(to)h(the)f(FitsChan)h(class:)227
-5128 y FD(FITS-PC)45 b FF(This)34 b(enco)s(ding)g(uses)g(the)h(con)m(v)
-m(en)m(tions)i(of)d(the)h(no)m(w)g(sup)s(erseded)d(FITS)i(W)m(CS)h(pap)
-s(er)427 5241 y(b)m(y)j(E.W.)16 b(Greisen)37 b(and)g(M.)16
-b(Calabretta)39 b(whic)m(h)e(used)g(k)m(eyw)m(ords)h
-Fq(CDELTj)e FF(and)g Fq(PCjjjiii)g FF(to)427 5354 y(describ)s(e)27
-b(axis)h(scaling)h(and)e(rotation.)41 b(These)27 b(are)h(the)g(con)m(v)
-m(en)m(tions)h(whic)m(h)e(w)m(ere)h(used)f(b)m(y)g(the)427
-5467 y(FITS-W)m(CS)j(enco)s(ding)f(prior)h(to)g(v)m(ersion)g(1.5)h(of)f
-(AST.)f(This)g(enco)s(ding)h(is)g(pro)m(vided)f(to)i(allo)m(w)427
-5580 y(existing)c(data)f(whic)m(h)f(use)g(these)g(con)m(v)m(en)m(tions)
-j(to)e(b)s(e)e(read.)39 b(It)26 b(should)e(not)h(in)g(general)i(b)s(e)d
-(used)427 5693 y(to)31 b(create)h(new)e(data.)p eop end
-%%Page: 545 555
-TeXDict begin 545 554 bop 0 52 a Fy(G.6)92 b(Changes)30
-b(In)m(tro)s(duced)f(in)i(V1.6)2294 b FF(545)227 351
-y FD(FITS-AIPS)45 b FF(This)26 b(enco)s(ding)g(is)h(based)f(on)g(the)h
-(con)m(v)m(en)m(tions)h(describ)s(ed)e(in)g(the)g(do)s(cumen)m(t)h
-(\\Non-)427 464 y(linear)d(Co)s(ordinate)g(Systems)g(in)f(AIPS")g(b)m
-(y)h(Eric)g(W.)g(Greisen)g(\(revised)g(9th)g(Septem)m(b)s(er,)h(1994)
-427 577 y(and)45 b(a)m(v)-5 b(ailable)48 b(b)m(y)d(ftp)g(from)g
-(\014ts.cv.nrao.edu)h(/\014ts/do)s(cumen)m(ts/w)m(cs/aips27.ps.Z\).)i
-(This)427 690 y(enco)s(ding)31 b(uses)f Fq(CROTAi)e FF(and)i
-Fq(CDELTi)f FF(k)m(eyw)m(ords)h(to)h(describ)s(e)f(axis)h(rotation)h
-(and)e(scaling.)111 872 y(3.)46 b(The)31 b(FitsChan)g(class)h(no)m(w)f
-(pro)m(vides)h(some)f(supp)s(ort)f(for)h(the)g(IRAF-sp)s(eci\014c)h
-(\\TNX")g(sky)f(pro)5 b(jec-)227 985 y(tion,)28 b(whic)m(h)d(is)h(con)m
-(v)m(erted)i(transparen)m(tly)e(in)m(to)h(the)f(equiv)-5
-b(alen)m(t)27 b(FITS)f(\\T)-8 b(AN")27 b(pro)5 b(jection)26
-b(\(see)h(the)227 1098 y(description)k(of)f(the)h(Enco)s(ding)f
-(attribute)h(for)f(details\).)111 1280 y(4.)46 b(F)-8
-b(rameSets)29 b(originally)g(read)f(from)g(a)g(DSS)f(enco)s(ded)h(FITS)
-f(header)h(can)g(no)m(w)g(b)s(e)f(written)h(out)g(using)227
-1392 y(the)c(FITS-W)m(CS)f(enco)s(ding)h(\(a)g(T)-8 b(AN)24
-b(pro)5 b(jection)25 b(with)e(correction)i(terms)f(will)g(b)s(e)f
-(used\))g(in)g(addition)227 1505 y(to)28 b(the)e(DSS)g(enco)s(ding.)40
-b(The)26 b(rev)m(erse)h(is)f(also)i(p)s(ossible:)38 b(F)-8
-b(rameSets)28 b(originally)g(read)e(from)g(a)h(FITS-)227
-1618 y(W)m(CS)g(enco)s(ded)e(FITS)h(header)g(and)g(whic)m(h)g(use)g(a)g
-(T)-8 b(AN)27 b(pro)5 b(jection)27 b(can)f(no)m(w)h(b)s(e)e(written)h
-(out)h(using)227 1731 y(the)k(DSS)f(enco)s(ding.)111
-1913 y(5.)46 b(The)d(algorithm)i(used)d(b)m(y)i(the)f(FitsChan)g(class)
-i(to)f(v)m(erify)g(that)g(a)f(F)-8 b(rameSet)45 b(conforms)e(to)h(the)
-227 2026 y(FITS-W)m(CS)26 b(mo)s(del)h(has)f(b)s(een)g(impro)m(v)m(ed)h
-(so)g(that)g(F)-8 b(rameSets)28 b(including)e(more)h(complex)g
-(mixtures)227 2139 y(of)k(parallel)g(and)f(serial)h(Mappings)f(can)h(b)
-s(e)f(written)g(out)h(using)f(the)g(FITS-W)m(CS)g(enco)s(ding.)111
-2321 y(6.)46 b(The)26 b(FitsChan)g(class)h(has)e(b)s(een)h(c)m(hanged)g
-(so)h(that)f(long)h(strings)f(included)f(in)h(the)g(description)g(of)h
-(an)227 2434 y(Ob)5 b(ject)32 b(can)f(b)s(e)g(sa)m(v)m(ed)h(and)f
-(restored)g(without)h(truncation)f(when)f(using)h(the)h(NA)-8
-b(TIVE)31 b(enco)s(ding.)227 2546 y(Previously)-8 b(,)34
-b(v)m(ery)e(long)h(F)-8 b(rame)33 b(titles,)i(mathematical)f
-(expressions,)f Fx(etc.)45 b FF(w)m(ere)33 b(truncated)f(if)g(they)227
-2659 y(exceeded)26 b(the)f(capacit)m(y)i(of)e(a)g(single)g(FITS)f
-(header)h(card.)39 b(They)24 b(are)h(no)m(w)g(split)f(o)m(v)m(er)j(sev)
-m(eral)f(header)227 2772 y(cards)j(so)h(that)g(they)f(can)h(b)s(e)e
-(restored)i(without)f(truncation.)41 b(Note,)31 b(this)e(facilit)m(y)i
-(is)f(only)f(a)m(v)-5 b(ailable)227 2885 y(when)30 b(using)g(NA)-8
-b(TIVE)30 b(enco)s(ding.)111 3067 y(7.)46 b(The)33 b(FitsChan)f(class)i
-(has)e(a)i(new)e(attribute)i(called)g(W)-8 b(arnings)33
-b(whic)m(h)f(can)i(b)s(e)e(used)g(to)h(select)i(p)s(o-)227
-3180 y(ten)m(tially)i(dangerous)c(conditions)i(under)e(whic)m(h)g(w)m
-(arnings)h(should)f(b)s(e)h(issued.)51 b(These)34 b(conditions)227
-3293 y(include)29 b(\(for)f(instance\))i(unsupp)s(orted)c(features)j
-(within)f(non-standard)f(pro)5 b(jections,)30 b(missing)e(k)m(ey-)227
-3406 y(w)m(ords)i(for)g(whic)m(h)g(default)h(v)-5 b(alues)31
-b(will)f(b)s(e)g(used,)g Fx(etc)p FF(.)111 3588 y(8.)46
-b(The)c(WcsMap)g(class)h(has)e(b)s(een)h(c)m(hanged)g(to)h(supp)s(ort)d
-(the)i(c)m(hanges)g(made)g(to)h(the)f(FITS-W)m(CS)227
-3701 y(enco)s(ding)31 b(in)f(the)g(FitsChan)g(class:)336
-3882 y Fu(\017)46 b FF(Pro)5 b(jection)42 b(parameters)f(are)g(no)m(w)f
-(asso)s(ciated)i(with)e(a)h(particular)g(axis)g(and)f(are)h(sp)s
-(eci\014ed)427 3995 y(using)h(a)g(new)g(set)g(of)g(attributes)h(called)
-g(PVj)p Fq(_)p FF(m.)75 b(Here,)45 b(\\j")e(is)f(the)g(index)g(of)g(an)
-g(axis)g(of)427 4108 y(WcsMap,)32 b(and)e(\\m")h(is)f(the)h(index)e(of)
-i(the)g(pro)5 b(jection)31 b(parameter.)336 4249 y Fu(\017)46
-b FF(The)28 b(old)g(attributes)g(Pro)5 b(jP\(0\))29 b(to)g(Pro)5
-b(jP\(9\))28 b(are)h(still)g(a)m(v)-5 b(ailable)30 b(but)d(are)h(no)m
-(w)g(deprecated)h(in)427 4361 y(fa)m(v)m(our)g(of)g(the)g(new)f(PVj)p
-Fq(_)p FF(m)f(attributes.)41 b(They)28 b(are)h(in)m(terpreted)f(as)h
-(aliases)h(for)e(PV\(axlat\))p Fq(_)p FF(0)427 4474 y(to)j(PV\(axlat\))
-p Fq(_)p FF(9,)i(where)d(\\axlat")j(is)d(the)h(index)f(of)g(the)h
-(latitude)g(axis.)336 4615 y Fu(\017)46 b FF(The)32 b(GLS)h(pro)5
-b(jection)33 b(pro)5 b(jection)33 b(has)f(b)s(een)g(renamed)g(as)h
-(SFL,)g(but)f(the)g(AST)p Fq(__)p FF(GLS)f(t)m(yp)s(e)427
-4728 y(has)f(b)s(een)g(retained)h(as)f(an)h(alias)g(for)f(AST)p
-Fq(__)p FF(SFL.)0 5012 y Fw(G.6)112 b(Changes)39 b(In)m(tro)s(duced)f
-(in)f(V1.6)0 5228 y FF(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 5341 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V1.5)g(and)f(V1.6:)111 5580 y(1.)46 b(The)c(C)g(in)m
-(terface)i(to)f(sev)m(eral)g(metho)s(ds)f(\(astT)-8 b(ranN,)43
-b(astMark)g(and)f(astP)m(olyCurv)m(e\))i(ha)m(v)m(e)f(b)s(een)227
-5693 y(c)m(hanged)36 b(to)h(mak)m(e)f(them)f(easier)i(to)f(call)h(from)
-e(C++.)55 b(P)m(arameters)36 b(whic)m(h)f(previously)g(had)g(t)m(yp)s
-(e)p eop end
-%%Page: 546 556
-TeXDict begin 546 555 bop 0 52 a FF(546)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)227 351 y FF(\\double)23
-b(\(*\)[]")i(ha)m(v)m(e)f(b)s(een)e(c)m(hanged)h(to)h(the)f(simpler)f
-(\\double)h(*".)39 b(Using)23 b(the)g(old)f(t)m(yp)s(es)h(ma)m(y)h
-(result)227 464 y(in)30 b(non-fatal)i(compiler)f(w)m(arnings,)f(but)g
-(should)f(not)i(c)m(hange)g(the)g(b)s(eha)m(viour)f(of)g(the)h(metho)s
-(ds.)111 642 y(2.)46 b(A)24 b(bug)f(has)g(b)s(een)g(\014xed)g(in)g(the)
-h(Plot)h(class)f(whic)m(h)f(could)h(cause)g(groups)f(of)h(tic)m(k)h
-(marks)e(to)h(b)s(e)f(skipp)s(ed)227 755 y(when)30 b(using)g(v)m(ery)g
-(small)h(gaps.)111 932 y(3.)46 b(A)35 b(bug)f(has)h(b)s(een)f(\014xed)g
-(in)h(the)g(Plot)g(class)h(whic)m(h)f(could)g(cause)g(axes)g(to)h(b)s
-(e)e(lab)s(eled)h(outside)g(the)227 1045 y(visible)c(windo)m(w,)f
-(resulting)h(in)f(no)g(axes)h(b)s(eing)f(visible.)111
-1223 y(4.)46 b(The)32 b(FITS-W)m(CS)h(enco)s(ding)g(used)e(b)m(y)i(the)
-g(FitsChan)g(class)g(no)m(w)g(includes)f(the)h(W)m(CSNAME)g(k)m(ey-)227
-1336 y(w)m(ord.)44 b(When)32 b(creating)h(a)f(F)-8 b(rameSet)32
-b(from)f(FITS)g(headers,)h(the)g(v)-5 b(alues)32 b(of)f(the)h(W)m
-(CSNAME)g(k)m(ey-)227 1449 y(w)m(ords)i(are)h(no)m(w)g(used)e(as)i(the)
-g(Domain)g(names)f(for)g(the)h(corresp)s(onding)f(F)-8
-b(rames)35 b(in)f(the)h(returned)227 1562 y(F)-8 b(rameSet.)42
-b(When)30 b(writing)g(a)h(F)-8 b(rameSet)32 b(to)f(a)f(FITS)g(header)g
-(the)g(Domain)h(names)g(of)f(eac)m(h)i(F)-8 b(rame)227
-1675 y(are)31 b(stored)g(in)f(W)m(CSNAME)h(k)m(eyw)m(ords)f(in)g(the)h
-(header.)111 1852 y(5.)46 b(The)34 b(FITS-W)m(CS)f(enco)s(ding)h(used)f
-(b)m(y)h(the)h(FitsChan)e(class)i(no)m(w)f(attempts)h(to)g(retain)f
-(the)g(iden)m(ti-)227 1965 y(\014cation)f(letter)f(asso)s(ciated)h
-(with)f(m)m(ultiple)g(axis)g(descriptions.)44 b(When)31
-b(reading)g(a)h(F)-8 b(rameSet)33 b(from)227 2078 y(a)38
-b(FITS)f(header,)j(the)e(iden)m(ti\014cation)h(letter)g(is)f(stored)g
-(in)g(the)g(Iden)m(t)f(attribute)i(for)e(eac)m(h)i(F)-8
-b(rame.)227 2191 y(When)42 b(writing)g(a)h(F)-8 b(rameSet)43
-b(to)g(a)f(FITS)f(header,)k(the)e(iden)m(ti\014cation)g(letter)h(is)e
-(read)g(from)f(the)227 2304 y(Iden)m(t)28 b(attribute)g(of)f(eac)m(h)i
-(F)-8 b(rame.)40 b(The)27 b(letter)i(to)f(asso)s(ciate)h(with)e(eac)m
-(h)i(F)-8 b(rame)28 b(can)g(b)s(e)f(c)m(hanged)h(b)m(y)227
-2417 y(assigning)j(a)g(new)f(v)-5 b(alue)31 b(to)g(the)f(F)-8
-b(rame's)32 b(Iden)m(t)e(attribute.)111 2595 y(6.)46
-b(The)31 b(FITS-W)m(CS,)h(FITS-PC,)f(FITS-IRAF)g(and)g(FITS-AIPS)f
-(enco)s(dings)i(used)e(b)m(y)i(the)g(FitsChan)227 2707
-y(class)g(no)m(w)e(create)i(a)f(SkyF)-8 b(rame)31 b(with)f(the)h
-(System)g(attribute)g(set)g(to)g(\\Unkno)m(wn")g(if)g(the)f(CTYPE)227
-2820 y(k)m(eyw)m(ords)h(in)f(the)h(supplied)e(header)h(refers)g(to)h
-(an)g(unkno)m(wn)e(celestial)k(co)s(ordinate)e(system.)41
-b(Previ-)227 2933 y(ously)-8 b(,)31 b(a)g(F)-8 b(rame)31
-b(w)m(as)g(used)f(instead)g(of)h(a)g(SkyF)-8 b(rame.)111
-3111 y(7.)46 b(The)31 b(FITS-W)m(CS,)h(FITS-PC,)f(FITS-IRAF)g(and)g
-(FITS-AIPS)f(enco)s(dings)i(used)e(b)m(y)i(the)g(FitsChan)227
-3224 y(class)38 b(no)f(longer)h(rep)s(ort)f(an)g(error)g(if)g(the)h
-(FITS)e(header)h(con)m(tains)i(no)e(CTYPE)f(k)m(eyw)m(ords.)62
-b(It)37 b(is)227 3337 y(assumed)22 b(that)i(a)f(missing)g(CTYPE)f(k)m
-(eyw)m(ord)i(implies)f(that)g(the)g(w)m(orld)g(co)s(ordinate)h(system)f
-(is)g(linear)227 3450 y(and)30 b(iden)m(tically)i(equal)f(to)g(\\in)m
-(termediate)i(w)m(orld)d(co)s(ordinates".)111 3627 y(8.)46
-b(The)37 b(new)f(v)-5 b(alue)37 b(\\no)s(ct)m(yp)s(e")h(is)f(no)m(w)g
-(recognized)h(b)m(y)f(the)g(W)-8 b(arnings)37 b(attribute)h(of)f(the)g
-(FitsChan)227 3740 y(class.)i(This)23 b(v)-5 b(alue)23
-b(causes)h(w)m(arnings)f(to)h(b)s(e)e(issued)h(if)g(CTYPE)f(k)m(eyw)m
-(ords)i(are)f(missing)g(from)g(foreign)227 3853 y(enco)s(dings.)111
-4031 y(9.)46 b(A)28 b(new)g(attribute)h(called)g(AllW)-8
-b(arnings)29 b(has)f(b)s(een)f(added)g(to)i(the)f(FitsChan)g(class.)41
-b(This)27 b(is)h(a)g(read-)227 4144 y(only)-8 b(,)34
-b(space)f(separated)f(list)h(of)g(all)g(the)g(kno)m(wn)e(condition)i
-(names)f(whic)m(h)g(can)h(b)s(e)f(sp)s(eci\014ed)f(in)h(the)227
-4257 y(W)-8 b(arnings)31 b(attribute.)66 4434 y(10.)46
-b(The)38 b(FitsChan)f(class)i(no)m(w)f(attempts)h(to)f(assigns)g(a)h
-(Title)f(to)h(eac)m(h)g(F)-8 b(rame)39 b(in)e(a)i(F)-8
-b(rameSet)39 b(read)227 4547 y(using)d(a)g(foreign)g(enco)s(ding.)57
-b(The)35 b(Title)i(is)f(based)f(on)h(the)g(Domain)g(name)g(of)g(the)g
-(F)-8 b(rame.)58 b(If)35 b(the)227 4660 y(F)-8 b(rame)32
-b(has)e(no)g(Domain)h(name,)g(the)f(default)h(Title)g(supplied)e(b)m(y)
-h(the)h(F)-8 b(rame)31 b(class)g(is)g(retained.)66 4838
-y(11.)46 b(The)36 b(FitsChan)g(class)g(uses)g(the)g(commen)m(ts)h(asso)
-s(ciated)g(with)f(CTYPE)f(k)m(eyw)m(ords)i(as)f(axis)g(lab)s(els)227
-4951 y(when)f(reading)h(a)g(foreign)g(enco)s(ding.)57
-b(This)35 b(b)s(eha)m(viour)g(has)h(b)s(een)f(mo)s(di\014ed)f(so)i
-(that)g(the)g(default)227 5064 y(lab)s(els)c(pro)m(vided)e(b)m(y)h(the)
-g(F)-8 b(rame)32 b(class)g(are)g(retained)f(\(instead)h(of)f(using)g
-(the)g(CTYPE)f(commen)m(ts\))227 5177 y(if)h(an)m(y)f(of)h(the)f(CTYPE)
-g(commen)m(ts)h(are)g(iden)m(tical.)66 5354 y(12.)46
-b(A)25 b(new)f(\\in)m(terp)s(olation")j(sc)m(heme)f(iden)m(ti\014ed)e
-(b)m(y)h(the)g(sym)m(b)s(olic)g(constan)m(t)h(AST)p Fq(__)p
-FF(BLOCKA)-10 b(VE)23 b(has)227 5467 y(b)s(een)36 b(added)f(to)i(the)g
-(AST)p Fq(_)p FF(RESAMPLE)p Fo(<)p FF(X)p Fo(>)d FF(set)j(of)g
-(functions.)58 b(The)35 b(new)h(sc)m(heme)h(calculates)227
-5580 y(eac)m(h)f(output)f(pixel)g(v)-5 b(alue)36 b(b)m(y)f(\014nding)f
-(the)h(mean)g(of)g(the)g(input)f(pixels)i(in)e(a)i(b)s(o)m(x)f(cen)m
-(tred)g(on)g(the)227 5693 y(output)30 b(pixel.)p eop
-end
-%%Page: 547 557
-TeXDict begin 547 556 bop 0 52 a Fy(G.7)92 b(Changes)30
-b(In)m(tro)s(duced)f(in)i(V1.7)2294 b FF(547)66 351 y(13.)46
-b(The)24 b(SkyF)-8 b(rame)25 b(class)h(can)e(no)m(w)h(b)s(e)f(used)g
-(to)h(represen)m(t)f(an)h(arbitrary)f(spherical)h(co)s(ordinate)g
-(system)227 464 y(b)m(y)31 b(setting)g(its)g(System)f(attribute)h(to)g
-(\\Unkno)m(wn".)66 653 y(14.)46 b(The)28 b(indices)f(of)h(the)g
-(latitude)h(and)e(longitude)i(axes)f(of)g(a)g(SkyF)-8
-b(rame)28 b(can)g(no)m(w)g(b)s(e)f(found)g(using)g(new)227
-766 y(read-only)35 b(attributes)h(LatAxis)f(and)f(LonAxis.)54
-b(The)34 b(e\013ects)j(of)d(an)m(y)i(axis)f(p)s(erm)m(utation)g(is)f
-(tak)m(en)227 879 y(in)m(to)e(accoun)m(t.)66 1068 y(15.)46
-b(A)37 b(new)f(attribute)h(called)g(Iden)m(t)f(has)h(b)s(een)e(added)h
-(to)h(the)f(Ob)5 b(ject)37 b(class.)59 b(This)36 b(serv)m(es)h(the)f
-(same)227 1181 y(purp)s(ose)f(as)h(the)g(existing)h(ID)f(attribute,)j
-(but)c(\(unlik)m(e)i(ID\))f(its)g(v)-5 b(alue)37 b(is)f(transferred)f
-(to)i(the)f(new)227 1294 y(Ob)5 b(ject)31 b(when)e(a)i(cop)m(y)g(is)f
-(made.)66 1483 y(16.)46 b(A)38 b(bug)e(has)h(b)s(een)f(\014xed)h(whic)m
-(h)g(could)g(prev)m(en)m(t)h(complex)g(CmpF)-8 b(rames)37
-b(b)s(eha)m(ving)g(correctly)h(\(for)227 1595 y(instance,)30
-b(resulting)f(in)f(the)g(failure)h(of)f(attempts)i(to)f(\014nd)e(a)i
-(Mapping)f(b)s(et)m(w)m(een)h(a)g(CmpF)-8 b(rame)28 b(and)227
-1708 y(itself)7 b(\).)0 2004 y Fw(G.7)112 b(Changes)39
-b(In)m(tro)s(duced)f(in)f(V1.7)0 2226 y FF(The)g(follo)m(wing)h
-(describ)s(es)f(the)g(most)h(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f
-(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g(AST)g(library)0
-2339 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V1.6)g(and)f(V1.7:)111
-2603 y(1.)46 b(The)29 b(F)-8 b(rame)30 b(class)g(has)f(a)h(new)e(metho)
-s(d)h(called)i(astAngle)f(whic)m(h)f(returns)f(the)i(angle)g(subtended)
-e(b)m(y)227 2716 y(t)m(w)m(o)k(p)s(oin)m(ts)e(at)h(a)g(third)f(p)s(oin)
-m(t)g(within)g(a)h(2)f(or)h(3)f(dimensional)h(F)-8 b(rame.)111
-2905 y(2.)46 b(The)38 b(F)-8 b(rame)40 b(class)f(has)f(a)h(new)f(metho)
-s(d)g(called)h(astO\013set2)h(whic)m(h)f(calculates)h(a)f(p)s(osition)g
-(whic)m(h)227 3018 y(is)d(o\013set)h(a)m(w)m(a)m(y)g(from)e(a)h(giv)m
-(en)h(starting)f(p)s(oin)m(t)g(b)m(y)f(a)h(sp)s(eci\014ed)f(distance)i
-(along)f(a)g(geo)s(desic)h(curv)m(e)227 3131 y(whic)m(h)25
-b(passes)h(through)f(the)g(starting)i(p)s(oin)m(t)e(at)h(a)g(giv)m(en)h
-(p)s(osition)e(angle.)40 b(It)26 b(can)g(only)f(b)s(e)g(used)g(with)227
-3244 y(2-dimensional)32 b(F)-8 b(rames.)111 3433 y(3.)46
-b(The)41 b(F)-8 b(rame)42 b(class)g(has)g(a)f(new)g(metho)s(d)g(called)
-h(astAxDistance)i(whic)m(h)d(returns)f(the)i(incremen)m(t)227
-3546 y(b)s(et)m(w)m(een)30 b(t)m(w)m(o)h(supplied)c(axis)j(v)-5
-b(alues.)41 b(F)-8 b(or)30 b(axes)f(b)s(elonging)h(to)g(SkyF)-8
-b(rames,)29 b(the)h(returned)e(v)-5 b(alue)29 b(is)227
-3658 y(normalized)i(in)m(to)h(the)e(range)h Fu(\006)p
-Fo(\031)s FF(.)111 3847 y(4.)46 b(The)27 b(F)-8 b(rame)29
-b(class)f(has)g(a)g(new)f(metho)s(d)g(called)h(astAxO\013set)h(whic)m
-(h)e(returns)g(an)g(axis)h(v)-5 b(alue)28 b(a)g(giv)m(en)227
-3960 y(incremen)m(t)d(a)m(w)m(a)m(y)h(from)d(a)i(sp)s(eci\014ed)e(axis)
-h(v)-5 b(alue.)39 b(F)-8 b(or)25 b(axes)g(b)s(elonging)f(to)h(SkyF)-8
-b(rames,)25 b(the)g(returned)227 4073 y(v)-5 b(alue)26
-b(is)f(normalized)h(in)m(to)g(the)g(range)g Fu(\006)p
-Fo(\031)i FF(\(for)d(latitude)h(axes\))h(or)e(zero)h(to)g(2)p
-Fo(\031)j FF(\(for)c(longitude)h(axes\).)111 4262 y(5.)46
-b(The)24 b(Plot)g(class)h(has)f(a)g(new)f(metho)s(d)h(called)h
-(astGenCurv)m(e)f(whic)m(h)g(allo)m(ws)h(generalised)g(user-de\014ned)
-227 4375 y(curv)m(es)h(to)g(b)s(e)g(dra)m(wn.)38 b(The)25
-b(curv)m(e)h(is)g(de\014ned)e(b)m(y)i(a)g(user-supplied)e(Mapping)h
-(whic)m(h)h(maps)f(distance)227 4488 y(along)j(the)e(curv)m(e)h(in)m
-(to)h(the)e(corresp)s(onding)g(p)s(osition)g(in)g(the)h(curren)m(t)f(F)
--8 b(rame)28 b(of)e(the)h(Plot.)40 b(The)26 b(new)227
-4601 y(metho)s(d)k(then)h(maps)f(these)h(curren)m(t)g(F)-8
-b(rame)31 b(p)s(osition)g(in)m(to)h(graphics)e(co)s(ordinates,)i
-(taking)g(care)f(of)227 4714 y(an)m(y)g(non-linearities)h(or)e(discon)m
-(tin)m(uities)i(in)e(the)h(mapping.)111 4903 y(6.)46
-b(The)33 b(Plot)h(class)f(has)g(a)h(new)e(metho)s(d)h(called)h
-(astGrfSet)f(whic)m(h)g(allo)m(ws)i(the)e(underlying)f(primitiv)m(e)227
-5016 y(graphics)h(functions)f(to)i(b)s(e)e(selected)i(at)f(run-time.)48
-b(Previously)-8 b(,)34 b(the)f(functions)f(used)g(b)m(y)h(the)g(Plot)
-227 5128 y(class)42 b(to)g(pro)s(duce)e(graphics)h(could)g(only)g(b)s
-(e)g(selected)h(at)g(link-time,)j(using)40 b(the)i(options)f(of)g(the)
-227 5241 y(ast)p Fq(_)p FF(link)30 b(command.)40 b(The)28
-b(new)g(Plot)i(metho)s(d)e(allo)m(ws)j(an)e(application)h(to)f(o)m(v)m
-(er-ride)i(the)e(functions)227 5354 y(established)e(at)f(link-time,)i
-(b)m(y)e(sp)s(ecifying)g(alternativ)m(e)j(primitiv)m(e)e(graphics)f
-(routines.)39 b(In)25 b(addition,)227 5467 y(the)30 b(t)m(w)m(o)h(new)e
-(Plot)i(metho)s(ds)e(astGrfPush)g(and)g(astGrfP)m(op)h(allo)m(w)h(the)f
-(curren)m(t)g(graphics)g(routines)227 5580 y(to)c(b)s(e)e(sa)m(v)m(ed)i
-(and)e(restore)i(on)f(a)g(\014rst-in-last-out)h(stac)m(k,)i(allo)m
-(wing)e(temp)s(orary)f(c)m(hanges)h(to)f(b)s(e)f(made)227
-5693 y(to)31 b(the)g(set)g(of)f(registered)i(graphics)e(routines.)p
-eop end
-%%Page: 548 558
-TeXDict begin 548 557 bop 0 52 a FF(548)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FF(7.)46
-b(The)39 b(Dra)m(wAxes)i(attribute)f(of)g(the)g(Plot)g(class)h(can)f
-(no)m(w)f(b)s(e)g(sp)s(eci\014ed)g(indep)s(endan)m(tly)g(for)g(eac)m(h)
-227 464 y(axis,)31 b(b)m(y)g(app)s(ending)e(the)h(axis)h(index)f(to)h
-(the)g(end)e(of)i(the)f(attribute)i(name.)111 692 y(8.)46
-b(A)36 b(bug)f(has)g(b)s(een)g(\014xed)g(in)g(the)h(Plot)g(class)g
-(whic)m(h)g(could)f(result)h(in)f(axis)h(lab)s(els)g(b)s(eing)f(dra)m
-(wn)g(on)227 805 y(inappropriate)30 b(edges)h(of)g(the)f(plotting)i(b)s
-(o)m(x)e(when)g(using)f(\\in)m(terior")k(lab)s(elling.)111
-1033 y(9.)46 b(A)30 b(bug)f(has)h(b)s(een)f(\014xed)g(in)g(the)h(In)m
-(traMap)g(class)h(whic)m(h)e(could)h(cause)h(In)m(traMaps)f(to)g(b)s(e)
-f(corrupted)227 1145 y(after)i(transforming)f(an)m(y)h(p)s(oin)m(ts.)66
-1373 y(10.)46 b(Bugs)36 b(ha)m(v)m(e)g(b)s(een)f(\014xed)f(in)h(the)h
-(FitsChan)f(class)h(whic)m(h)f(could)g(cause)h(inappropriate)f
-(ordering)g(of)227 1486 y(headers)30 b(within)g(a)h(FitsChan)f(when)g
-(writing)g(or)g(reading)h(ob)5 b(jects)31 b(using)f(NA)-8
-b(TIVE)30 b(enco)s(dings.)66 1714 y(11.)46 b(A)32 b(bug)e(has)h(b)s
-(een)f(\014xed)h(in)g(the)g(FitsChan)g(class)h(whic)m(h)f(could)g
-(cause)h(the)f(celestial)j(longitude)e(of)f(a)227 1827
-y(pixel)26 b(to)h(b)s(e)e(estimated)i(incorrectly)g(b)m(y)e(180)i
-(degrees)f(if)g(the)g(reference)g(p)s(oin)m(t)g(is)g(at)g(either)g(the)
-g(north)227 1940 y(or)31 b(the)f(south)g(p)s(ole.)0 2300
-y Fw(G.8)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.8-2)0
-2551 y FF(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 2664 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V1.7)g(and)f(V1.8-2:)111 2986 y(1.)46
-b(The)33 b(SkyF)-8 b(rame)34 b(class)h(has)e(a)h(new)f(attribute)h
-(called)h(NegLon)f(whic)m(h)g(allo)m(ws)h(longitude)f(v)-5
-b(alues)34 b(to)227 3099 y(b)s(e)c(displa)m(y)m(ed)h(in)f(the)h(range)f
-Fu(\000)p Fo(\031)j FF(to)f(+)p Fo(\031)s FF(,)e(instead)h(of)f(the)h
-(usual)f(range)g(zero)h(to)h(2)p Fo(:\031)s FF(.)111
-3327 y(2.)46 b(Some)21 b(new)f(functions)h(\(astAngle,)k(astAxAngle,)f
-(astResolv)m(e,)h(astO\013set2,)g(astAxO\013set,)f(astAxDis-)227
-3440 y(tance\))32 b(ha)m(v)m(e)g(b)s(een)d(added)h(to)h(the)g(F)-8
-b(rame)31 b(class)h(to)f(allo)m(w)h(na)m(vigation)g(of)f(the)f(co)s
-(ordinate)i(space)f(to)227 3553 y(b)s(e)c(p)s(erformed)e(without)j
-(needing)f(to)h(kno)m(w)f(the)g(underlying)f(geometry)j(of)e(the)h
-(co-ordinate)g(system)227 3666 y(\(for)j(instance,)g(whether)f(it)h(is)
-f(Cartesian)h(or)f(spherical\).)227 3836 y(Note,)46 b(v)m(ersion)d
-(1.8-1)g(con)m(tained)g(man)m(y)f(of)g(these)g(facilities,)47
-b(but)41 b(some)h(ha)m(v)m(e)h(b)s(een)e(c)m(hanged)i(in)227
-3949 y(v)m(ersion)31 b(1.8-2.)43 b(P)m(articularly)-8
-b(,)32 b(p)s(ositions)e(angles)h(are)g(no)m(w)f(referred)g(to)h(the)f
-(second)h(F)-8 b(rame)31 b(axis)g(for)227 4062 y Fx(al)5
-b(l)34 b FF(classes)h(of)e(F)-8 b(rames)34 b(\(including)g(SkyF)-8
-b(rames\),)35 b(and)e(the)g(astBear)i(function)e(has)g(b)s(een)g
-(replaced)227 4175 y(b)m(y)e(astAxAngle.)0 4535 y Fw(G.9)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.8-3)0 4786
-y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f(signi\014can)m
-(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g(AST)g(library)g
-(b)s(et)m(w)m(een)0 4899 y(v)m(ersions)31 b(V1.8-2)h(and)e(V1.8-3:)111
-5222 y(1.)46 b(A)33 b(new)f(metho)s(d)g(called)i(astDecomp)s(ose)h(has)
-d(b)s(een)g(added)g(to)i(the)f(Mapping)f(class)i(whic)m(h)e(enables)227
-5335 y(p)s(oin)m(ters)f(to)g(b)s(e)e(obtained)i(to)g(the)g(comp)s(onen)
-m(t)f(parts)h(of)f(CmpMap)g(and)f(CmpF)-8 b(rame)31 b(ob)5
-b(jects.)111 5562 y(2.)46 b(F)-8 b(unctions)46 b(within)e(pro)5
-b(j.c)44 b(and)g(w)m(cstrig.c)j(ha)m(v)m(e)f(b)s(een)e(renamed)g(to)h
-(a)m(v)m(oid)i(name)d(clashes)i(with)227 5675 y(functions)30
-b(in)g(more)h(recen)m(t)g(v)m(ersions)g(of)f(Mark)h(Calabretta's)h(w)m
-(cslib)f(library)-8 b(.)p eop end
-%%Page: 549 559
-TeXDict begin 549 558 bop 0 52 a Fy(G.10)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V1.8-4)2174 b FF(549)0 351
-y Fw(G.10)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.8-4)0
-560 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 673 y(v)m(ersions)31
-b(V1.8-3)h(and)e(V1.8-4:)111 887 y(1.)46 b(The)32 b(FitsChan)g(class)i
-(has)e(a)g(new)g(attribute)h(called)h(DefB1950)h(whic)m(h)d(can)h(b)s
-(e)f(used)f(to)i(select)h(the)227 999 y(default)22 b(reference)h(frame)
-f(and)f(equino)m(x)h(to)h(b)s(e)e(used)g(if)h(a)h(FitsChan)e(with)h
-(foreign)g(enco)s(ding)g(con)m(tains)227 1112 y(no)31
-b(indication)g(of)f(the)h(reference)g(frame)f(or)g(equino)m(x.)111
-1288 y(2.)46 b(A)36 b(bug)f(has)h(b)s(een)f(\014xed)g(in)g(the)h
-(FitsChan)g(class)g(whic)m(h)g(could)g(prev)m(en)m(t)g(astW)-8
-b(rite)38 b(from)d(creating)227 1401 y(a)k(set)f(of)h(FITS)e(headers)h
-(from)f(an)h(otherwise)h(v)-5 b(alid)38 b(F)-8 b(rameSet,)42
-b(when)37 b(when)g(using)h(FITS-AIPS)227 1514 y(enco)s(ding.)111
-1689 y(3.)46 b(A)37 b(bug)f(has)g(b)s(een)g(\014xed)g(in)g(the)h
-(FitsChan)f(class)h(whic)m(h)g(could)f(cause)h(astRead)h(to)f(mis-in)m
-(terpret)227 1802 y(the)31 b(FITS)e(CR)m(OT)-8 b(A)31
-b(k)m(eyw)m(ord)g(when)e(using)h(FITS-AIPS)f(enco)s(ding.)0
-2077 y Fw(G.11)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.8-5)0
-2286 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 2399 y(v)m(ersions)31
-b(V1.8-4)h(and)e(V1.8-5:)111 2612 y(1.)46 b(The)41 b(Plot)g(class)h
-(de\014nes)e(new)g(graphical)i(elemen)m(ts)g(Axis1,)i(Axis2,)g(Grid1,)g
-(Grid2,)g(NumLabs1,)227 2725 y(NumLabs2,)g(T)-8 b(extLab1,)45
-b(T)-8 b(extLab2,)45 b(Tic)m(ks1)d(and)f(Tic)m(ks2.)73
-b(These)41 b(allo)m(w)i(graphical)f(attributes)227 2838
-y(\(colour,)c(width,)e(etc\))h(to)f(b)s(e)f(set)g(for)h(eac)m(h)g(axis)
-g(individually)-8 b(.)55 b(Previously)-8 b(,)38 b(graphical)e
-(attributes)227 2951 y(could)31 b(only)g(b)s(e)g(set)g(for)g(b)s(oth)f
-(axes)i(together,)h(using)d(graphical)i(elemen)m(ts)g(Axes,)g(Grid,)f
-(NumLabs,)227 3064 y(T)-8 b(extLabs)31 b(and)f(Tic)m(ks.)0
-3339 y Fw(G.12)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.8-7)0
-3548 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 3661 y(v)m(ersions)31
-b(V1.8-5)h(and)e(V1.8-7:)111 3874 y(1.)46 b(A)23 b(new)f(attribute)h
-(called)g(CarLin)f(has)g(b)s(een)g(added)f(to)i(the)g(FitsChan)f(class)
-h(whic)m(h)f(con)m(trols)i(the)e(w)m(a)m(y)227 3987 y(CAR)34
-b(pro)5 b(jections)35 b(are)g(handled)f(when)f(reading)i(a)g(F)-8
-b(rameSet)35 b(from)f(a)h(non-nativ)m(e)h(FITS)d(header.)227
-4100 y(Some)45 b(FITS)e(writers)h(use)g(a)h(CAR)e(pro)5
-b(jection)45 b(to)g(represen)m(t)g(a)f(simple)g(linear)h
-(transformation)227 4213 y(b)s(et)m(w)m(een)37 b(pixel)f(co)s
-(ordinates)h(and)f(celestial)j(sky)c(co)s(ordinates.)59
-b(This)35 b(is)i(not)f(consisten)m(t)h(with)f(the)227
-4326 y(de\014nition)41 b(of)g(the)g(CAR)f(pro)5 b(jection)42
-b(in)e(the)h(draft)g(FITS-W)m(CS)f(standard,)j(whic)m(h)e(requires)f
-(the)227 4439 y(resultan)m(t)33 b(Mapping)f(to)h(include)f(a)g(3D)h
-(rotation)g(from)f(nativ)m(e)h(spherical)f(co)s(ordinates)h(to)g
-(celestial)227 4552 y(spherical)39 b(co)s(ordinates,)i(th)m(us)d
-(making)h(the)f(Mapping)h(non-linear.)64 b(Setting)40
-b(CarLin)d(to)i(1)g(forces)227 4665 y(astRead)46 b(to)f(ignore)g(the)g
-(FITS-W)m(CS)g(standard)e(and)h(treat)i(an)m(y)f(CAR)f(pro)5
-b(jections)46 b(as)e(simple)227 4778 y(linear)31 b(Mappings)f(from)g
-(pixel)h(co)s(ordinates)g(to)g(celestial)i(co)s(ordinates.)111
-4953 y(2.)46 b(A)35 b(bug)e(has)h(b)s(een)g(\014xed)f(whic)m(h)h(could)
-h(result)f(in)g(axis)h(F)-8 b(ormat)35 b(attributes)g(set)g(b)m(y)f
-(the)g(user)g(b)s(eing)227 5066 y(ignored)d(under)e(certain)i
-(circumstances.)111 5241 y(3.)46 b(A)32 b(bug)f(in)h(the)g(w)m(a)m(y)g
-(tic)m(k)i(marks)d(p)s(ositions)h(are)g(selected)h(in)e(the)h(Plot)h
-(class)g(has)e(b)s(een)g(\014xed.)44 b(This)227 5354
-y(bug)c(could)h(result)f(in)g(extra)h(tic)m(ks)h(marks)e(b)s(eing)g
-(displa)m(y)m(ed)h(at)g(inappropriate)f(p)s(ositions.)71
-b(This)227 5467 y(bug)35 b(manifested)g(itself,)i(for)d(instance,)j(if)
-e(the)g(Mapping)g(represen)m(ted)g(b)m(y)f(the)h(Plot)h(w)m(as)f(a)g
-(simple)227 5580 y(Cartesian)e(to)g(P)m(olar)h(Mapping.)47
-b(In)31 b(this)i(example,)g(the)g(bug)f(caused)g(tic)m(k)i(marks)e(to)h
-(b)s(e)f(dra)m(wn)g(at)227 5693 y(negativ)m(e)h(radius)c(v)-5
-b(alues.)p eop end
-%%Page: 550 560
-TeXDict begin 550 559 bop 0 52 a FF(550)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FF(4.)46
-b(A)31 b(bug)e(has)h(b)s(een)g(\014xed)g(whic)m(h)g(could)g(prev)m(en)m
-(t)h(attribute)g(settings)g(from)f(b)s(eing)g(read)g(correctly)i(b)m(y)
-227 464 y(astSet,)g(etc.,)g(on)e(certain)h(platforms)g(\(MacOS,)g(for)f
-(instance\).)0 765 y Fw(G.13)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f
-(V1.8-8)0 990 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 1103 y(v)m(ersions)31
-b(V1.8-7)h(and)e(V1.8-8:)111 1373 y(1.)46 b(A)33 b(bug)g(has)g(b)s(een)
-f(\014xed)g(in)h(the)g(FitsChan)g(class)h(whic)m(h)f(could)g(cause)g
-(problems)g(when)f(creating)i(a)227 1485 y(F)-8 b(rameSet)28
-b(from)d(a)i(FITS)e(header)h(con)m(taining)i(W)m(CS)e(information)g
-(stored)h(in)e(the)i(form)e(of)i(Digitised)227 1598 y(Digitised)i(Sky)e
-(Surv)m(ey)f(\(DSS\))i(k)m(eyw)m(ords.)40 b(These)27
-b(problems)f(only)i(o)s(ccurred)e(for)h(DSS)g(\014elds)f(in)h(the)227
-1711 y(southern)k(hemisphere,)g(and)g(resulted)g(in)h(pixel)f(p)s
-(ositions)h(b)s(eing)f(mapp)s(ed)f(to)i(sky)g(p)s(ositions)f(close)227
-1824 y(to)g(the)g(corresp)s(onding)e Fx(northern)j FF(hemispshere)e
-(\014eld.)111 2016 y(2.)46 b(A)39 b(new)g(metho)s(d)f(called)i
-(astBoundingBo)m(x)g(has)f(b)s(een)f(added)g(to)h(the)g(Plot)h(class.)
-67 b(This)38 b(metho)s(d)227 2129 y(returns)29 b(the)i(b)s(ounding)d(b)
-s(o)m(x)j(of)f(the)h(previous)f(graphical)h(output)f(pro)s(duced)f(b)m
-(y)h(a)h(Plot)g(metho)s(d.)111 2322 y(3.)46 b(A)39 b(new)f(attribute)h
-(called)g(In)m(visible)g(has)f(b)s(een)g(added)f(to)j(the)e(Plot)h
-(class)g(whic)m(h)g(suppresses)d(the)227 2435 y(graphical)45
-b(output)e(normally)g(pro)s(duced)f(b)m(y)i(Plot)g(metho)s(ds.)79
-b(All)44 b(the)g(calculations)i(needed)d(to)227 2548
-y(pro)s(duce)25 b(the)i(normal)f(output)f(are)i(still)g(p)s(erformed)e
-(ho)m(w)m(ev)m(er,)j(and)e(so)g(the)g(b)s(ounding)f(b)s(o)m(x)h
-(returned)227 2660 y(b)m(y)31 b(the)f(new)g(astBoundingBo)m(x)i(metho)s
-(d)e(is)g(still)h(usable.)111 2853 y(4.)46 b(Bugs)30
-b(ha)m(v)m(e)h(b)s(een)e(\014xed)g(related)h(to)h(the)f(app)s(earance)g
-(of)f(graphical)i(output)e(pro)s(duced)f(b)m(y)i(the)g(Plot)227
-2966 y(class.)39 b(These)24 b(bugs)e(w)m(ere)i(to)h(do)e(with)g(the)h
-(w)m(a)m(y)g(in)g(whic)m(h)f(graphical)h(elemen)m(ts)h(relating)g(to)f
-(a)g(sp)s(eci\014c)227 3079 y(axis)36 b(\(e.g.)57 b Fq(Colour\(axis1\))
-p FF(,)33 b(etc.\))58 b(in)m(teracted)37 b(with)e(the)g(corresp)s
-(onding)g(generic)h(elemen)m(t)h(\(e.g.)227 3191 y Fq(Colour\(axes\))p
-FF(,)28 b(etc.\).)0 3493 y Fw(G.14)112 b(Changes)39 b(In)m(tro)s(duced)
-f(in)f(V1.8-13)0 3718 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i
-(most)f(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g
-(the)g(AST)g(library)g(b)s(et)m(w)m(een)0 3830 y(v)m(ersions)31
-b(V1.8-8)h(and)e(V1.8-13:)111 4100 y(1.)46 b(The)29 b(FitsChan)g(class)
-g(has)g(b)s(een)f(mo)s(di\014ed)g(so)h(that)h(LONPOLE)e(k)m(eyw)m(ords)
-h(are)g(only)g(pro)s(duced)f(b)m(y)227 4213 y(astW)-8
-b(rite)34 b(when)c(necessary)-8 b(.)44 b(F)-8 b(or)32
-b(zenithal)g(pro)5 b(jections)32 b(suc)m(h)f(as)h(T)-8
-b(AN,)31 b(the)h(LONPOLE)e(k)m(eyw)m(ord)227 4326 y(can)j(alw)m(a)m(ys)
-i(tak)m(e)f(its)f(default)g(v)-5 b(alue)33 b(and)g(so)g(is)f(not)h
-(included)f(in)h(the)g(FITS)f(header)g(pro)s(duced)g(b)m(y)227
-4439 y(astW)-8 b(rite.)45 b(Previously)-8 b(,)32 b(the)f(unnecessary)f
-(pro)s(duction)g(of)h(a)h(LONPOLE)d(k)m(eyw)m(ord)j(could)f(prev)m(en)m
-(t)227 4551 y(F)-8 b(rameSets)22 b(b)s(eing)e(written)h(out)g(using)f
-(enco)s(dings)h(whic)m(h)f(do)h(not)g(supp)s(ort)e(the)h(LONPOLE)g(k)m
-(eyw)m(ord)227 4664 y(\(suc)m(h)31 b(as)f(FITS-IRAF\).)111
-4857 y(2.)46 b(The)31 b(FitsChan)g(class)h(has)f(b)s(een)g(mo)s
-(di\014ed)f(to)i(retain)g(leading)g(and)f(trailing)h(spaces)g(within)f
-(COM-)227 4970 y(MENT)g(cards.)111 5162 y(3.)46 b(The)41
-b(FitsChan)g(class)h(has)f(b)s(een)g(mo)s(di\014ed)f(to)i(only)f(use)g
-(CTYPE)g(commen)m(ts)h(as)f(axis)h(lab)s(els)f(if)227
-5275 y(all)d(non-celestial)i(axes)d(ha)m(v)m(e)i(unique)d(non-blank)h
-(commen)m(ts)h(\(otherwise)f(the)h(CTYPE)e(k)m(eyw)m(ord)227
-5388 y(v)-5 b(alues)31 b(are)g(used)e(as)i(lab)s(els\).)111
-5580 y(4.)46 b(The)29 b(FitsChan)g(class)h(has)f(b)s(een)f(mo)s
-(di\014ed)g(so)h(that)h(it)g(do)s(es)f(not)g(app)s(end)f(a)h(trailing)h
-(\\Z")g(c)m(haracter)227 5693 y(to)h(the)g(end)f(of)g(D)m(A)-8
-b(TE-OBS)31 b(k)m(eyw)m(ord)g(v)-5 b(alues.)p eop end
-%%Page: 551 561
-TeXDict begin 551 560 bop 0 52 a Fy(G.15)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V2.0)2249 b FF(551)111 351
-y(5.)46 b(The)e(FitsChan)g(class)h(has)f(b)s(een)g(mo)s(di\014ed)f(to)i
-(use)f(latest)i(list)e(of)h(FITS-W)m(CS)f(pro)5 b(jections,)48
-b(as)227 464 y(describ)s(ed)33 b(in)g(the)h(FITS-W)m(CS)f(pap)s(er)f(I)
-s(I,)h(\\Represen)m(tations)i(of)f(celestial)i(co)s(ordinates)f(in)e
-(FITS")227 577 y(\(Calabretta)42 b(&)d(Greisen,)k(draft)c(dated)h(23)g
-(April)g(2002\).)71 b(Supp)s(ort)37 b(has)j(b)s(een)f(retained)h(for)f
-(the)227 690 y(p)s(olynomial)44 b(correction)h(terms)e(whic)m(h)h
-(previous)f(drafts)g(ha)m(v)m(e)h(allo)m(w)m(ed)i(to)e(b)s(e)f(asso)s
-(ciated)i(with)227 803 y(T)-8 b(AN)31 b(pro)5 b(jections.)111
-998 y(6.)46 b(The)37 b(WcsMap)h(class)g(has)f(additional)i(pro)5
-b(jection)38 b(t)m(yp)s(es)f(of)g(AST)p Fq(__)p FF(TPN)f(\(whic)m(h)h
-(implemen)m(ts)h(a)227 1111 y(distorted)e(T)-8 b(AN)36
-b(pro)5 b(jection\))37 b(and)e(AST)p Fq(__)p FF(SZP)-8
-b(.)34 b(The)h(AST)p Fq(__)p FF(T)-8 b(AN)35 b(pro)5
-b(jection)36 b(t)m(yp)s(e)g(no)m(w)g(repre-)227 1223
-y(sen)m(ts)c(a)f(simple)g(T)-8 b(AN)31 b(pro)5 b(jection)32
-b(and)e(has)g(no)h(asso)s(ciated)i(pro)5 b(jection)31
-b(parameters.)43 b(In)30 b(addition,)227 1336 y(the)39
-b(usage)f(of)h(pro)5 b(jection)39 b(parameters)f(has)g(b)s(een)g
-(brough)m(t)g(in)m(to)h(line)f(with)g(the)g(the)h(FITS-W)m(CS)227
-1449 y(pap)s(er)30 b(I)s(I.)111 1644 y(7.)46 b(The)27
-b(WcsMap)h(class)f(has)g(b)s(een)f(mo)s(di\014ed)g(so)i(that)f(a)h
-(\\get")h(op)s(eration)e(on)g(a)g(pro)5 b(jection)28
-b(parameter)227 1757 y(attribute)34 b(will)f(return)f(the)h(default)h
-(v)-5 b(alue)33 b(de\014ned)f(in)h(the)g(FITS-W)m(CS)f(pap)s(er)g(I)s
-(I)g(if)h(no)g(v)-5 b(alue)34 b(has)227 1870 y(b)s(een)42
-b(set)g(for)g(the)g(attribute.)77 b(Previously)-8 b(,)45
-b(a)e(v)-5 b(alue)42 b(of)h(AST)p Fq(__)p FF(BAD)e(w)m(as)i(returned)e
-(in)g(suc)m(h)h(a)227 1983 y(situation.)111 2177 y(8.)k(The)29
-b(F)-8 b(rame)31 b(class)f(has)g(new)f(attributes)h(T)-8
-b(op\(axis\))31 b(and)e(Bottom\(axis\))j(whic)m(h)d(allo)m(w)j(a)e
-(\\plottable)227 2290 y(range")f(to)f(b)s(e)f(sp)s(eci\014ed)g(for)g
-(eac)m(h)h(F)-8 b(rame)29 b(axis.)40 b(The)27 b(grid)g(pro)s(duced)f(b)
-m(y)i(the)f(astGrid)h(metho)s(d)f(will)227 2403 y(not)k(extend)f(b)s
-(ey)m(ond)g(these)h(limits.)0 2708 y Fw(G.15)112 b(Changes)39
-b(In)m(tro)s(duced)f(in)f(V2.0)0 2935 y FF(Note,)i(F)-8
-b(rame)38 b(descriptions)e(created)h(using)f(AST)f(V2.0)j(will)f(not)f
-(b)s(e)g(readable)h(b)m(y)f(applications)h(link)m(ed)0
-3048 y(with)30 b(earlier)h(v)m(ersions)g(of)g(AST.)e(This)h(applies)h
-(to)g(F)-8 b(rame)31 b(descriptions)f(created)i(using:)136
-3294 y Fu(\017)46 b FF(the)31 b(Channel)e(class)136 3489
-y Fu(\017)46 b FF(the)31 b(FitsChan)f(class)h(if)g(the)f(NA)-8
-b(TIVE)31 b(Enco)s(ding)f(is)g(used)136 3684 y Fu(\017)46
-b FF(the)31 b(astSho)m(w)f(function)0 3930 y(Applications)35
-b(m)m(ust)f(b)s(e)g(re-link)m(ed)h(with)f(AST)f(V2.0)i(in)f(order)g(to)
-h(b)s(e)f(able)g(to)h(read)f(F)-8 b(rame)36 b(descriptions)0
-4043 y(created)31 b(b)m(y)g(AST)e(v2.0.)0 4209 y(The)37
-b(follo)m(wing)h(describ)s(es)f(the)g(most)h(signi\014can)m(t)g(c)m
-(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g(AST)g
-(library)0 4322 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V1.8-13)i(and)c
-(V2.0)j(\(the)f(curren)m(t)f(v)m(ersion\):)111 4595 y(1.)46
-b(The)39 b(default)g(v)-5 b(alue)40 b(for)f(the)h(Domain)g(attribute)g
-(pro)m(vided)f(b)m(y)g(the)g(CmpF)-8 b(rame)39 b(class)h(has)f(b)s(een)
-227 4708 y(c)m(hanged)c(from)f(\\CMP")g(to)h(a)f(string)g(formed)g(b)m
-(y)g(concatenating)i(the)f(Domain)f(attributes)h(of)f(the)227
-4821 y(t)m(w)m(o)26 b(comp)s(onen)m(t)f(F)-8 b(rames,)27
-b(separated)e(b)m(y)g(a)g(min)m(us)e(sign.)39 b(If)24
-b(b)s(oth)g(comp)s(onen)m(t)h(Domains)h(are)f(blank,)227
-4934 y(then)30 b(the)h(old)f(default)h(of)g(\\CMP")g(is)f(retained)h
-(for)f(the)g(CmpF)-8 b(rame)31 b(Domain.)111 5128 y(2.)46
-b(The)25 b(implemen)m(tation)i(of)e(the)g(astW)-8 b(rite)27
-b(function)e(within)g(the)g(FitsChan)g(class)h(has)f(b)s(een)f(mo)s
-(di\014ed.)227 5241 y(It)30 b(will)g(no)m(w)g(attempt)h(to)g(pro)s
-(duce)e(a)h(set)g(of)g(FITS)f(header)h(cards)g(to)g(describ)s(e)g(a)g
-(F)-8 b(rameSet)31 b(ev)m(en)f(if)227 5354 y(the)i(n)m(um)m(b)s(er)e
-(of)h(axes)h(in)f(the)g(Curren)m(t)g(F)-8 b(rames)32
-b(is)f(greater)h(than)f(the)h(n)m(um)m(b)s(er)e(in)h(the)g(Base)i(F)-8
-b(rame)227 5467 y(\(that)42 b(is,)i(if)d(there)g(are)g(more)g(W)m(CS)g
-(axes)h(than)e(pixel)h(axes\).)74 b(This)40 b(has)g(alw)m(a)m(ys)j(b)s
-(een)d(p)s(ossible)227 5580 y(with)32 b(NA)-8 b(TIVE)32
-b(enco)s(ding,)g(but)f(has)h(not)g(previously)f(b)s(een)g(p)s(ossible)h
-(for)f(foreign)h(enco)s(dings.)45 b(The)227 5693 y(W)m(CSAXES)30
-b(k)m(eyw)m(ord)h(is)g(used)e(to)i(store)g(the)g(n)m(um)m(b)s(er)e(of)h
-(W)m(CS)h(axes)g(in)f(the)g(FITS)g(header.)p eop end
-%%Page: 552 562
-TeXDict begin 552 561 bop 0 52 a FF(552)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FF(3.)46
-b(Another)29 b(c)m(hange)g(to)h(the)e(astW)-8 b(rite)31
-b(function)d(within)g(the)h(FitsChan)f(class)i(is)e(that)h(the)g
-(ordering)f(of)227 464 y(\\foreign")33 b(axes)f(\()p
-Fx(i.e.)43 b FF(CTYPE)31 b(k)m(eyw)m(ords\))h(is)f(no)m(w)g(c)m(hosen)h
-(to)g(mak)m(e)h(the)e(CD)h(\(or)f(PC\))h(matrix)f(as)227
-577 y(diagonal)j(as)e(p)s(ossible)g(-)h(an)m(y)f(elemen)m(t)i(of)e
-(axis)h(transp)s(osition)f(is)g(remo)m(v)m(ed)i(b)m(y)e(this)g
-(re-ordering)g(as)227 690 y(recommended)26 b(in)g(FITS-W)m(CS)f(pap)s
-(er)g(I.)h(Previously)h(the)f(ordering)g(w)m(as)g(determined)g(b)m(y)g
-(the)g(order)227 803 y(of)34 b(the)g(axes)h(in)e(the)h(Curren)m(t)f(F)
--8 b(rame)35 b(of)f(the)g(supplied)f(F)-8 b(rameSet.)52
-b(This)33 b(c)m(hange)i(do)s(es)f(not)g(a\013ect)227
-916 y(NA)-8 b(TIVE)31 b(enco)s(ding.)111 1097 y(4.)46
-b(Supp)s(ort)26 b(for)h(sp)s(ectral)h(co)s(ordinate)h(systems)e(has)h
-(b)s(een)f(in)m(tro)s(duced)g(through)m(t)h(the)f(addition)h(of)g(t)m
-(w)m(o)227 1210 y(new)36 b(classes,)j(Sp)s(ecF)-8 b(rame)37
-b(and)e(Sp)s(ecMap.)58 b(The)36 b(Sp)s(ecF)-8 b(rame)36
-b(is)h(a)f(1-dimensional)i(F)-8 b(rame)37 b(whic)m(h)227
-1322 y(can)c(b)s(e)f(used)g(to)h(describ)s(e)f(p)s(ositions)h(within)f
-(an)g(electromagnetic)k(sp)s(ectrum)c(in)g(v)-5 b(arious)32
-b(systems)227 1435 y(\(w)m(a)m(v)m(elength,)d(frequency)-8
-b(,)25 b(v)-5 b(arious)24 b(forms)g(of)g(v)m(elo)s(cit)m(y)-8
-b(,)27 b Fx(etc.)p FF(\))38 b(and)24 b(referred)f(to)i(v)-5
-b(arious)24 b(standards)f(of)227 1548 y(rest)30 b(\(top)s(o)s(cen)m
-(tric,)i(geo)s(cen)m(tric,)g(helio)s(cen)m(tric)g(LSRK,)d
-Fx(etc.)p FF(\).)40 b(The)30 b(Sp)s(ecMap)f(is)h(a)g(Mapping)g(whic)m
-(h)227 1661 y(can)37 b(transform)e(sp)s(ectral)i(axis)f(v)-5
-b(alues)37 b(b)s(et)m(w)m(een)g(these)f(v)-5 b(arious)37
-b(systems)f(and)f(standards)h(of)g(rest.)227 1774 y(Note,)h(FitsChans)c
-(whic)m(h)h(ha)m(v)m(e)h(a)f(foreign)g(enco)s(ding)g(\()p
-Fx(i.e.)50 b FF(an)m(y)34 b(enco)s(ding)g(other)g(than)g(NA)-8
-b(TIVE\))227 1887 y(are)31 b(not)g(y)m(et)g(able)g(to)g(read)f(or)h
-(write)f(these)h(new)f(classes.)111 2068 y(5.)46 b(F)-8
-b(acilities)38 b(ha)m(v)m(e)d(b)s(een)f(added)f(to)i(the)g(F)-8
-b(rame)35 b(class)g(whic)m(h)f(allo)m(w)i(di\013erences)f(in)f(axis)g
-(units)g(to)h(b)s(e)227 2181 y(tak)m(en)e(in)m(to)g(accoun)m(t)g(when)e
-(\014nding)f(a)i(Mapping)g(b)s(et)m(w)m(een)g(t)m(w)m(o)h(F)-8
-b(rames.)46 b(In)31 b(previous)g(v)m(ersions)h(of)227
-2294 y(AST,)k(the)g(Unit)h(attribute)f(w)m(as)h(a)f(purely)g
-(descriptiv)m(e)h(item)f(in)m(tended)g(only)h(for)e(h)m(uman)h(readers)
-227 2407 y(-)k(c)m(hanging)g(the)f(v)-5 b(alue)40 b(of)f(Unit)h(made)f
-(no)g(di\013erence)g(to)h(the)g(b)s(eha)m(viour)e(of)i(the)f(F)-8
-b(rame.)68 b(As)39 b(of)227 2520 y(v)m(ersion)31 b(2.0,)g(the)f(Unit)g
-(attribute)g(can)h(in\015uence)e(the)h(nature)f(of)h(the)g(Mappings)g
-(b)s(et)m(w)m(een)g(F)-8 b(rames.)227 2632 y(F)g(or)23
-b(instance,)i(if)d(the)g(astFindrame)g(or)g(astCon)m(v)m(ert)i(metho)s
-(d)d(is)h(used)f(to)i(\014nd)e(the)h(Mapping)g(b)s(et)m(w)m(een)227
-2745 y(an)32 b(Axis)h(with)e(Unit)i(set)f(to)h(\\m")g(and)e(another)i
-(Axis)f(with)g(Unit)g(set)h(to)g(\\km",)g(then)f(the)g(metho)s(d)227
-2858 y(will)i(return)e(a)i(Zo)s(omMap)f(whic)m(h)h(in)m(tro)s(duces)f
-(a)g(scaling)i(factor)f(of)g(0.001)h(b)s(et)m(w)m(een)f(the)g(t)m(w)m
-(o)h(axes.)227 2971 y(These)c(facilities)h(assume)e(that)i(units)d(are)
-i(sp)s(eci\014ed)f(follo)m(wing)i(the)f(rules)f(included)g(in)g(FITS-W)
-m(CS)227 3084 y(pap)s(er)g(I)g(\()p Fx(R)-5 b(epr)g(esentation)35
-b(of)e(World)h(Co)-5 b(or)g(dinates)36 b(in)c(FITS)p
-FF(,)f(Greisen)g(&)f(Calabretta\).)227 3231 y(In)23 b(order)g(to)h
-(minimise)f(the)h(risk)f(of)h(breaking)f(existing)i(soft)m(w)m(are,)h
-(the)e(default)f(b)s(eha)m(viour)g(for)g(simple)227 3344
-y(F)-8 b(rames)35 b(is)f(to)h(ignore)g(the)f(Unit)h(attribute)f(\()p
-Fx(i.e.)52 b FF(to)35 b(retain)f(the)h(previous)e(b)s(eha)m(viour\).)52
-b(Ho)m(w)m(ev)m(er,)227 3457 y(the)37 b(new)g(F)-8 b(rame)38
-b(metho)s(d)e(astSetActiv)m(eUnit)41 b(ma)m(y)c(b)s(e)g(used)f(to)i
-(\\activ)-5 b(ate")40 b(\(or)d(deactiv)-5 b(ate\))40
-b(the)227 3570 y(new)34 b(facilities)j(within)d(a)h(sp)s(eci\014c)f(F)
--8 b(rame.)54 b(Note,)37 b(the)e(new)f(Sp)s(ecF)-8 b(rame)34
-b(class)i(is)e(di\013eren)m(t)h(to)g(the)227 3683 y(simple)c(F)-8
-b(rame)31 b(class)g(in)f(that)h(the)f(new)g(facilities)j(for)d
-(handling)f(units)h(are)h(alw)m(a)m(ys)h(activ)m(e)g(within)e(a)227
-3796 y(Sp)s(ecF)-8 b(rame.)111 3976 y(6.)46 b(The)33
-b(System)g(and)g(Ep)s(o)s(c)m(h)f(attributes)i(fo)f(the)g(SkyF)-8
-b(rame)34 b(class)g(ha)m(v)m(e)g(b)s(een)f(mo)m(v)m(ed)h(to)g(the)f
-(paren)m(t)227 4089 y(F)-8 b(rame)34 b(class.)50 b(This)32
-b(enables)i(all)g(sub-classes)f(of)h(F)-8 b(rame)34 b(\(suc)m(h)f(as)g
-(the)g(new)g(Sp)s(ecF)-8 b(rame)33 b(class\))i(to)227
-4202 y(share)30 b(these)h(attributes,)g(and)f(to)h(pro)m(vide)g
-(suitable)g(options)f(for)h(eac)m(h)g(class.)111 4383
-y(7.)46 b(The)37 b(F)-8 b(rame)38 b(class)h(has)e(a)h(new)e(attribute)i
-(called)h(AlignSystem,)h(whic)m(h)d(allo)m(ws)i(con)m(trol)g(o)m(v)m
-(er)f(the)227 4496 y(alignmen)m(t)32 b(pro)s(cess)e(p)s(erformed)f(b)m
-(y)h(the)h(metho)s(ds)e(astFindF)-8 b(rame)32 b(and)e(astCon)m(v)m
-(ert.)111 4677 y(8.)46 b(The)32 b(CmpF)-8 b(rame)31 b(class)i(has)f(b)s
-(een)f(mo)s(di\014ed)g(so)h(that)g(attributes)h(of)f(a)g(comp)s(onen)m
-(t)g(F)-8 b(rame)33 b(can)f(b)s(e)227 4790 y(accessed)h(without)f
-(needing)f(to)h(extract)h(the)f(F)-8 b(rame)33 b(\014rst.)43
-b(T)-8 b(o)32 b(do)f(this,)h(app)s(end)e(an)i(axis)g(index)f(to)227
-4903 y(the)g(end)g(of)g(the)g(attribute)h(name.)43 b(F)-8
-b(or)31 b(instance,)i(if)e(a)g(CmpF)-8 b(rame)31 b(con)m(tains)h(a)f
-(Sp)s(ecF)-8 b(rame)32 b(and)e(a)227 5016 y(SkyF)-8 b(rame)21
-b(\(in)g(that)g(order\),)i(then)e(the)f(StdOfRest)h(attribute)g(of)g
-(the)g(Sp)s(ecF)-8 b(rame)21 b(can)g(b)s(e)f(referred)g(to)227
-5128 y(as)28 b(the)f(\\StdOfRest\(1\)")i(attribute)e(of)h(the)f(CmpF)-8
-b(rame.)40 b(Lik)m(ewise,)29 b(the)e(Equino)m(x)g(attribute)h(of)f(the)
-227 5241 y(SkyF)-8 b(rame)35 b(can)f(b)s(e)g(accessed)h(as)g(the)f
-(\\Equino)m(x\(2\)")j(\(or)d(equiv)-5 b(alen)m(tly)36
-b(\\Equino)m(x\(3\)"\))h(attribute)227 5354 y(of)32 b(the)h(CmpF)-8
-b(rame.)45 b(The)32 b(\\System\(1\)")i(attribute)e(of)h(the)f(CmpF)-8
-b(rame)32 b(will)g(refer)g(to)g(the)h(System)227 5467
-y(attribute)i(of)g(the)g(Sp)s(ecF)-8 b(rame,)36 b(whereas)e(the)g
-(\\System\(2\)")j(and)c(\\System\(3\)")k(attributes)e(of)f(the)227
-5580 y(CmpF)-8 b(rame)38 b(will)h(refer)e(to)i(the)g(System)e
-(attribute)i(of)g(the)f(SkyF)-8 b(rame)38 b(\(the)h(\\System")g
-(attribute)227 5693 y(without)33 b(an)f(axis)h(sp)s(eci\014er)f(will)g
-(refer)g(to)h(the)g(System)f(attribute)h(of)g(the)f(CmpF)-8
-b(rame)33 b(as)f(a)h(whole,)p eop end
-%%Page: 553 563
-TeXDict begin 553 562 bop 0 52 a Fy(G.16)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V3.0)2249 b FF(553)227 351
-y(since)27 b(System)g(is)g(an)f(attribute)i(of)e(all)i(F)-8
-b(rames,)29 b(and)d(a)h(CmpF)-8 b(rame)26 b(is)h(a)g(F)-8
-b(rame)28 b(and)e(so)h(has)f(its)h(o)m(wn)227 464 y(System)j(v)-5
-b(alue)31 b(whic)m(h)f(is)h(indep)s(endan)m(t)e(of)i(the)f(System)g
-(attributes)h(of)g(its)g(comp)s(onen)m(t)f(F)-8 b(rames\).)111
-655 y(9.)46 b(The)22 b(algorithms)h(used)e(b)m(y)h(the)h(Plot)g(class)g
-(for)f(determining)g(when)f(to)i(omit)g(o)m(v)m(erlapping)g(axis)g(lab)
-s(els,)227 768 y(and)k(the)h(abbreviation)h(of)e(redundan)m(t)g
-(leading)h(\014elds)g(within)f(sexagesimal)i(axis)g(lab)s(els,)f(ha)m
-(v)m(e)h(b)s(een)227 881 y(impro)m(v)m(ed)i(to)g(a)m(v)m(oid)h(some)f
-(anomolous)g(b)s(eha)m(viour)f(in)g(previous)g(v)m(ersions.)66
-1072 y(10.)46 b(The)23 b(curv)m(e)g(dra)m(wing)g(algorithm)h(used)f(b)m
-(y)g(the)g(Plot)h(class)g(has)f(b)s(een)f(mo)s(di\014ed)g(to)i(reduce)f
-(the)g(c)m(hance)227 1185 y(of)28 b(it)h(\\missing")f(small)h(curv)m(e)
-f(sections,)i(suc)m(h)d(as)h(ma)m(y)h(b)s(e)e(pro)s(duced)f(if)i(a)g
-(grid)g(line)g(cuts)g(across)g(the)227 1298 y(plot)38
-b(v)m(ery)g(close)g(to)g(a)g(corner.)61 b(Previously)-8
-b(,)40 b(these)e(missed)f(sections)h(could)f(sometimes)i(result)e(in)
-227 1411 y(axis)31 b(lab)s(els)g(b)s(eing)f(omitted.)66
-1602 y(11.)46 b(A)34 b(new)g(function)f(\(astV)-8 b(ersion\))36
-b(has)e(b)s(een)f(added)h(to)g(return)f(the)h(v)m(ersion)h(of)f(the)g
-(AST)f(library)h(in)227 1715 y(use.)66 1906 y(12.)46
-b(Bugs)32 b(ha)m(v)m(e)g(b)s(een)f(\014xed)f(in)h(the)h(Plot)g(class)g
-(whic)m(h)f(caused)g(serious)h(problems)e(when)g(plotting)j(high)227
-2019 y(precision)43 b(data.)79 b(These)42 b(problems)h(could)f(range)i
-(from)e(the)h(omission)g(of)g(some)g(tic)m(k)h(marks)f(to)227
-2132 y(complete)32 b(failure)f(to)g(pro)s(duce)e(a)i(plot.)0
-2400 y(Programs)25 b(whic)m(h)g(are)h(statically)h(link)m(ed)f(will)f
-(need)g(to)h(b)s(e)f(re-link)m(ed)g(in)g(order)g(to)h(tak)m(e)h(adv)-5
-b(an)m(tage)27 b(of)e(these)0 2513 y(new)30 b(facilities.)0
-2812 y Fw(G.16)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.0)0
-3036 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 3149 y(v)m(ersions)31
-b(V2.0)g(and)f(V3.0:)111 3417 y(1.)46 b(Man)m(y)30 b(c)m(hanges)f(ha)m
-(v)m(e)h(b)s(een)e(made)h(in)f(the)h(FitsChan)f(class)i(in)e(order)g
-(to)h(bring)f(the)h(FITS-W)m(CS)f(en-)227 3530 y(co)s(ding)21
-b(in)m(to)g(line)f(with)g(the)h(curren)m(t)f(v)m(ersions)h(of)f(the)g
-(FITS-W)m(CS)g(pap)s(ers)f(\(see)j(h)m(ttp://www.atnf.csiro.au/p)s
-(eople/mcalabre/W)m(CS/\):)336 3747 y Fu(\017)46 b FF(The)34
-b(rotation)h(and)e(scaling)j(of)e(the)g(pixel)g(axes)h(ma)m(y)f(no)m(w)
-g(b)s(e)g(sp)s(eci\014ed)f(using)h(either)g(CD)p Fx(i)p
-Fq(_)p Fx(j)427 3859 y FF(k)m(eyw)m(ords,)k(or)e(PC)p
-Fx(i)p Fq(_)p Fx(j)48 b FF(and)35 b(CDEL)-8 b(Tj)35 b(k)m(eyw)m(ords.)
-58 b(A)36 b(new)f(attribute)i(called)g(CDMatrix)g(has)427
-3972 y(b)s(een)c(added)g(to)i(the)f(FitsChan)f(class)i(to)f(indicate)h
-(whic)m(h)e(set)i(of)e(k)m(eyw)m(ords)h(should)f(b)s(e)g(used)427
-4085 y(when)d(writing)g(a)h(F)-8 b(rameSet)31 b(to)g(a)g(FITS-W)m(CS)f
-(header.)336 4233 y Fu(\017)46 b FF(The)33 b(FITS-W)m(CS)f(enco)s(ding)
-h(no)m(w)f(supp)s(orts)f(most)i(of)g(the)g(con)m(v)m(en)m(tions)i
-(describ)s(ed)c(in)i(FITS-)427 4346 y(W)m(CS)22 b(pap)s(er)f(I)s(I)s(I)
-g(for)g(the)i(description)f(of)g(sp)s(ectral)g(co)s(ordinates.)39
-b(The)21 b(exceptions)i(are)g(that)f(the)427 4459 y(SSYSOBS)30
-b(k)m(eyw)m(ord)i(is)g(not)f(supp)s(orted,)g(and)g(W)m(CS)g(stored)h
-(in)f(tabular)h(form)f(\(as)h(indicated)427 4572 y(b)m(y)f(the)f(\\-T)
--8 b(AB")32 b(algorithm)g(co)s(de\))f(is)f(not)h(supp)s(orted.)336
-4720 y Fu(\017)46 b FF(User-sp)s(eci\014ed)34 b(\014ducial)h(p)s(oin)m
-(ts)f(for)g(W)m(CS)h(pro)5 b(jections)35 b(are)f(no)m(w)h(supp)s(orted)
-d(b)m(y)j(FitsChans)427 4833 y(whic)m(h)29 b(use)f(FITS-W)m(CS)g(enco)s
-(ding.)40 b(This)28 b(use)g(k)m(eyw)m(ords)h(PVi)p Fq(_)p
-FF(0,)g(PVi)p Fq(_)p FF(1)g(and)f(PVi)p Fq(_)p FF(2)h(for)f(the)427
-4946 y(longitude)j(axis.)336 5093 y Fu(\017)46 b FF(When)37
-b(reading)g(a)h(FITS-W)m(CS)e(header,)j(a)e(FitsChan)g(will)h(no)m(w)f
-(use)f(k)m(eyw)m(ords)i(PVi)p Fq(_)p FF(3)f(and)427 5206
-y(PVi)p Fq(_)p FF(4)d(for)f(the)g(longitude)g(axis)h(\(if)f(presen)m
-(t\))h(in)f(preference)g(to)g(an)m(y)h(LONPOLE)e(and)g(LA)-8
-b(T-)427 5319 y(POLE)38 b(k)m(eyw)m(ords)h(whic)m(h)g(ma)m(y)g(b)s(e)f
-(presen)m(t.)66 b(When)38 b(writing)h(a)g(FITS-W)m(CS)f(header,)j(b)s
-(oth)427 5432 y(forms)30 b(are)h(written)f(out.)336 5580
-y Fu(\017)46 b FF(The)31 b(n)m(um)m(b)s(er)g(of)g(W)m(CS)h(axes)g(is)f
-(stored)h(in)f(the)h(W)m(CSAXES)f(k)m(eyw)m(ord)h(if)g(its)g(v)-5
-b(alue)32 b(w)m(ould)f(b)s(e)427 5693 y(di\013eren)m(t)g(to)g(that)g
-(of)g(the)f(NAXIS)g(k)m(eyw)m(ord.)p eop end
-%%Page: 554 564
-TeXDict begin 554 563 bop 0 52 a FF(554)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)336 351 y Fu(\017)46
-b FF(Helio-ecliptic)j(co)s(ordinates)c(are)g(no)m(w)g(supp)s(orted)e(b)
-m(y)h(FitsChans)h(whic)m(h)f(use)h(FITS-W)m(CS)427 464
-y(enco)s(ding.)h(This)31 b(uses)h(CTYPE)f(co)s(des)h(\\HLON")h(and)e
-(\\HLA)-8 b(T".)33 b(The)f(resulting)g(SkyF)-8 b(rame)427
-577 y(will)31 b(ha)m(v)m(e)g(a)f(System)g(v)-5 b(alue)30
-b(of)h(\\HELIOECLIPTIC",)d(and)i(all)g(the)h(usual)e(facilities,)k(suc)
-m(h)c(as)427 690 y(con)m(v)m(ersion)j(to)f(other)g(celestial)i
-(systems,)d(are)h(a)m(v)-5 b(ailable.)336 826 y Fu(\017)46
-b FF(The)33 b(FITS-W)m(CS)f(enco)s(ding)h(no)m(w)f(supp)s(orts)f(most)i
-(of)g(the)g(con)m(v)m(en)m(tions)i(describ)s(ed)c(in)i(FITS-)427
-939 y(W)m(CS)22 b(pap)s(er)f(I)s(I)s(I)g(for)g(the)i(description)f(of)g
-(sp)s(ectral)g(co)s(ordinates.)39 b(The)21 b(exceptions)i(are)g(that)f
-(the)427 1052 y(SSYSOBS)30 b(k)m(eyw)m(ord)i(is)g(not)f(supp)s(orted,)g
-(and)g(W)m(CS)g(stored)h(in)f(tabular)h(form)f(\(as)h(indicated)427
-1165 y(b)m(y)f(the)f(\\-T)-8 b(AB")32 b(algorithm)g(co)s(de\))f(is)f
-(not)h(supp)s(orted.)336 1300 y Fu(\017)46 b FF(When)29
-b(reading)g(a)g(FITS-W)m(CS)g(header,)g(a)h(FitsChan)f(will)g(no)m(w)g
-(ignore)h(an)m(y)f(distortion)g(co)s(des)427 1413 y(whic)m(h)24
-b(are)h(presen)m(t)g(in)f(CTYPE)f(k)m(eyw)m(ords.)40
-b(Here,)26 b(a)f(\\distortion)g(co)s(de")g(is)g(the)f(\014nal)g(group)g
-(of)427 1526 y(four)j(c)m(haracters)i(in)e(a)h(CTYPE)e(v)-5
-b(alue)28 b(of)g(the)f(form)g(\\xxxx-yyy-zzz",)k(as)d(describ)s(ed)e
-(in)h(FITS-)427 1639 y(W)m(CS)21 b(pap)s(er)f(IV.)h(The)f(exception)i
-(to)g(this)f(is)g(that)g(the)g(\\-SIP")g(distortion)h(co)s(de)f(\(as)g
-(used)g(b)m(y)f(the)427 1752 y(SIR)-8 b(TF)20 b(pro)5
-b(ject)21 b(-)f(see)41 b(h)m(ttp://sirtf.caltec)m(h.edu/SSC/do)s(cumen)
-m(ts/W)m(CSk)m(eyw)m(ords)p Fq(_)p FF(v1.3.p)s(df)7 b(\))427
-1865 y(is)31 b(in)m(terpreted)h(correctly)g(and)f(results)g(in)g(a)g(P)
-m(olyMap)i(b)s(eing)d(used)h(to)h(represen)m(t)f(the)g(distor-)427
-1978 y(tion)j(in)e(the)h(resulting)g(F)-8 b(rameSet.)49
-b(Note,)35 b(\\-SIP")e(distortion)g(co)s(des)g(can)g(only)g(b)s(e)f
-(read,)h(not)427 2091 y(written.)41 b(A)29 b(F)-8 b(rameSet)31
-b(whic)m(h)e(uses)g(a)h(P)m(olyMap)h(will)e(not)h(in)f(general)i(b)s(e)
-d(able)i(to)h(b)s(e)d(written)427 2204 y(out)38 b(to)h(a)f(FitsChan)g
-(using)g(an)m(y)g(foreign)g(enco)s(ding)g(\(although)h(NA)-8
-b(TIVE)38 b(enco)s(ding)g(can)g(of)427 2317 y(course)31
-b(b)s(e)f(used\).)336 2452 y Fu(\017)46 b FF(The)35 b(W)-8
-b(arnings)35 b(attribute)g(of)g(the)g(FitsChan)g(class)g(no)m(w)g
-(accepts)h(v)-5 b(alues)35 b(\\BadV)-8 b(al")37 b(\(whic)m(h)427
-2565 y(giv)m(es)k(w)m(arnings)e(ab)s(out)f(con)m(v)m(ersion)j(errors)e
-(when)f(reading)h(FITS)f(k)m(eyw)m(ord)i(v)-5 b(alues\),)42
-b(\\Dis-)427 2678 y(tortion")37 b(\(whic)m(h)f(giv)m(es)h(w)m(arnings)f
-(ab)s(out)f(unsupp)s(orted)e(distortion)j(co)s(des)g(within)f(CTYPE)427
-2791 y(v)-5 b(alues\),)31 b(and)e(\\BadMat")j(\(whic)m(h)e(giv)m(es)h
-(a)f(w)m(arning)g(if)f(the)h(rotation/scaling)j(matrix)d(cannot)427
-2904 y(b)s(e)g(in)m(v)m(erted\).)336 3040 y Fu(\017)46
-b FF(When)f(writing)g(a)g(F)-8 b(rameSet)46 b(to)g(a)f(FitsChan)g(whic)
-m(h)g(uses)f(a)i(non-Nativ)m(e)g(enco)s(ding,)j(the)427
-3153 y(commen)m(t)40 b(asso)s(ciated)g(with)e(an)m(y)h(card)f(already)i
-(in)e(the)h(FitsChan)f(will)h(b)s(e)f(retained)h(if)f(the)427
-3266 y(k)m(eyw)m(ord)23 b(v)-5 b(alue)22 b(b)s(eing)f(written)h(is)g
-(the)g(same)g(as)h(the)f(k)m(eyw)m(ord)g(v)-5 b(alue)22
-b(already)h(in)e(the)h(FitsChan.)336 3402 y Fu(\017)46
-b FF(A)26 b(F)-8 b(rameSet)26 b(whic)m(h)f(uses)g(the)g(non-FITS)f(pro)
-5 b(jection)26 b(t)m(yp)s(e)g(AST)p Fq(__)p FF(TPN)d(\(a)j(T)-8
-b(AN)26 b(pro)5 b(jection)427 3515 y(with)36 b(p)s(olynomial)f
-(distortion)h(terms\))g(can)g(no)m(w)g(b)s(e)f(written)g(to)h(a)g
-(FitsChan)g(if)f(the)h(Enco)s(d-)427 3627 y(ing)42 b(attribute)g(is)f
-(set)h(to)g(FITS-W)m(CS.)f(The)f(standard)h(\\-T)-8 b(AN")42
-b(co)s(de)g(is)f(used)g(within)f(the)427 3740 y(CTYPE)34
-b(v)-5 b(alues,)35 b(and)f(the)g(distortion)h(co)s(e\016cien)m(ts)h
-(are)e(enco)s(ded)g(in)g(k)m(eyw)m(ords)g(of)h(the)f(form)427
-3853 y(\\)g(QVi)p Fq(_)p FF(ma",)g(whic)m(h)f(are)g(directly)g
-(analogous)i(to)e(the)h(standard)e(\\PVi)p Fq(_)p FF(ma")i(pro)5
-b(jection)33 b(pa-)427 3966 y(rameter)i(k)m(eyw)m(ords.)53
-b(Th)m(us)33 b(a)h(FITS)g(reader)g(whic)m(h)g(do)s(es)g(not)g
-(recognise)i(the)e(QV)g(k)m(eyw)m(ords)427 4079 y(will)d(still)g(b)s(e)
-f(able)h(to)g(read)f(the)h(header,)f(but)g(the)h(distortion)f(will)h(b)
-s(e)f(ignored.)336 4215 y Fu(\017)46 b FF(The)30 b(default)g(v)-5
-b(alue)31 b(for)f(DefB1950)i(attribute)f(no)m(w)f(dep)s(ends)f(on)h
-(the)g(v)-5 b(alue)30 b(of)h(the)f(Enco)s(ding)427 4328
-y(attribute.)336 4464 y Fu(\017)46 b FF(A)d(new)e(app)s(endix)g(has)h
-(b)s(een)g(added)f(to)i(SUN/210)h(and)e(SUN/211)i(giving)f(details)g
-(of)f(the)427 4577 y(implemen)m(tation)36 b(pro)m(vided)e(b)m(y)g(the)g
-(FitsChan)g(class)h(of)f(the)g(con)m(v)m(en)m(tions)i(con)m(tained)g
-(in)d(the)427 4690 y(\014rst)d(four)g(FITS-W)m(CS)g(pap)s(ers.)111
-4887 y(2.)46 b(The)37 b(SkyF)-8 b(rame)38 b(class)h(no)m(w)e(supp)s
-(orts)f(t)m(w)m(o)j(new)e(co)s(ordinate)i(systems)e(\\ICRS")g(and)g
-(\\HELIOE-)227 5000 y(CLIPTIC".)e(The)h(default)g(for)g(the)g(System)g
-(attribute)h(for)f(SkyF)-8 b(rames)36 b(has)g(b)s(een)f(c)m(hanged)i
-(from)227 5112 y(\\FK5")32 b(to)f(\\ICRS".)111 5290 y(3.)46
-b(The)31 b(astRate)i(function)d(has)h(b)s(een)f(added)h(whic)m(h)g
-(allo)m(ws)h(an)f(estimate)i(to)f(b)s(e)e(made)h(of)g(the)g(rate)h(of)
-227 5403 y(c)m(hange)g(of)e(a)h(Mapping)f(output)g(with)g(resp)s(ect)h
-(to)g(one)g(of)f(the)h(Mapping)f(inputs.)111 5580 y(4.)46
-b(All)38 b(attribute)f(names)f(for)h(F)-8 b(rames)37
-b(of)g(an)m(y)g(class)g(ma)m(y)g(no)m(w)g(include)f(an)h(optional)h
-(axis)f(sp)s(eci\014er.)227 5693 y(This)25 b(includes)f(those)i
-(attributes)f(whic)m(h)g(describ)s(e)f(a)i(prop)s(ert)m(y)e(of)h(the)h
-(whole)f(F)-8 b(rame.)40 b(F)-8 b(or)26 b(instance,)p
-eop end
-%%Page: 555 565
-TeXDict begin 555 564 bop 0 52 a Fy(G.17)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V3.1)2249 b FF(555)227 351
-y(the)39 b(Domain)h(attribute)g(ma)m(y)f(no)m(w)g(b)s(e)f(sp)s
-(eci\014ed)h(as)g(\\Domain\(1\)")i(in)e(addition)g(to)h(the)f(simpler)
-227 464 y(\\Domain".)61 b(In)35 b(cases)i(suc)m(h)f(as)h(this,)h(where)
-e(the)g(attribute)h(describ)s(es)f(a)h(prop)s(ert)m(y)e(of)i(the)f
-(whole)227 577 y(F)-8 b(rame,)31 b(axis)e(sp)s(eci\014ers)g(will)g
-(usually)g(b)s(e)f(ignored.)41 b(The)28 b(exception)i(is)f(that)h(a)f
-(CmpF)-8 b(rame)29 b(will)h(use)227 690 y(the)e(presence)g(of)f(an)h
-(axis)g(sp)s(eci\014er)f(to)h(indicate)h(that)f(the)g(attribute)g(name)
-f(relates)i(to)g(the)e(primary)227 803 y(F)-8 b(rame)32
-b(con)m(taining)f(the)g(sp)s(eci\014ed)f(axis,)h(rather)f(than)g(to)h
-(the)g(CmpF)-8 b(rame)30 b(as)h(a)f(whole.)111 992 y(5.)46
-b(A)35 b(new)f(sub)s(class)g(of)h(Mapping,)h(the)f(P)m(olyMap,)i(has)e
-(b)s(een)f(added)g(whic)m(h)g(p)s(erforms)f(a)i(general)h(N-)227
-1105 y(dimensional)31 b(p)s(olynomial)f(mapping.)111
-1293 y(6.)46 b(A)37 b(new)g(sub)s(class)f(of)i(Mapping,)g(the)g
-(GrismMap,)h(has)e(b)s(een)f(added)g(whic)m(h)h(mo)s(dels)g(the)g(sp)s
-(ectral)227 1406 y(disp)s(ersion)29 b(pro)s(duced)g(b)m(y)h(a)h
-(grating,)h(prism)d(or)h(grism.)111 1595 y(7.)46 b(A)38
-b(new)f(sub)s(class)g(of)h(Mapping,)i(the)e(ShiftMap,)h(has)f(b)s(een)f
-(added)g(whic)m(h)g(adds)g(constan)m(t)i(v)-5 b(alues)227
-1708 y(on)m(to)32 b(all)f(co)s(ordinates)g(\(this)g(is)f(equiv)-5
-b(alen)m(t)32 b(to)f(a)g(WinMap)g(with)f(unit)g(scaling)h(on)f(all)i
-(axes\).)111 1897 y(8.)46 b(Minor)32 b(bugs)f(ha)m(v)m(e)i(b)s(een)e
-(\014xed)g(within)g(the)h(Plot)h(class)f(to)h(do)e(with)h(the)f(c)m
-(hoice)j(and)d(placemen)m(t)i(of)227 2010 y(n)m(umerical)e(axis)g(lab)s
-(els.)111 2198 y(9.)46 b(The)33 b(SphMap)g(class)h(has)f(a)h(new)g
-(attribute)g(called)h(P)m(olarLong)g(whic)m(h)e(giv)m(es)i(the)f
-(longitude)g(v)-5 b(alue)227 2311 y(to)31 b(b)s(e)f(returned)f(when)g
-(a)i(Cartesian)f(p)s(osition)h(corresp)s(onding)e(to)i(either)f(the)h
-(north)e(or)i(south)e(p)s(ole)227 2424 y(is)i(transformed)e(in)m(to)j
-(spherical)e(co)s(ordinates.)66 2613 y(10.)46 b(The)33
-b(WcsMap)i(class)f(no)m(w)g(assigns)g(a)g(longitude)g(of)g(zero)g(to)h
-(output)e(celestial)j(co)s(ordinates)f(whic)m(h)227 2726
-y(ha)m(v)m(e)d(a)f(latitude)g(of)g(plus)e(or)h(min)m(us)g(90)h
-(degrees.)66 2915 y(11.)46 b(The)31 b(NatLat)h(and)f(NatLon)g
-(attributes)h(of)f(the)g(WcsMap)h(class)g(ha)m(v)m(e)g(b)s(een)f(c)m
-(hanged)g(so)h(that)f(they)227 3027 y(no)m(w)g(return)f(the)g(\014xed)h
-(nativ)m(e)h(co)s(ordinates)f(of)g(the)g(pro)5 b(jection)31
-b(reference)g(p)s(oin)m(t,)g(rather)g(than)f(the)227
-3140 y(nativ)m(e)i(co)s(ordinates)f(of)g(the)f(user-de\014ned)f
-(\014ducial)h(p)s(oin)m(t.)66 3329 y(12.)46 b(Notation)34
-b(has)d(b)s(een)g(c)m(hanged)h(in)f(b)s(oth)f(the)i(WcsMap)g(and)f
-(FitsChan)h(classes)g(to)g(re\015ect)g(the)g(con-)227
-3442 y(v)m(en)m(tion)39 b(used)d(in)h(the)h(FITS-W)m(CS)e(pap)s(ers)g
-(that)i(index)f(\\i")h(refers)f(to)h(a)g(w)m(orld)f(co)s(ordinate)h
-(axis,)227 3555 y(and)30 b(index)g(\\j")h(refers)f(to)h(a)g(pixel)g
-(axis.)66 3744 y(13.)46 b(Changes)c(ha)m(v)m(e)h(b)s(een)e(made)h(to)h
-(sev)m(eral)g(Mapping)f(classes)h(in)e(order)h(to)g(allo)m(w)i(the)e
-(astSimplify)227 3857 y(function)30 b(to)h(mak)m(e)h(simpli\014cations)
-f(in)f(a)h(CmpMap)e(whic)m(h)h(previously)g(w)m(ere)h(not)g(p)s
-(ossible.)66 4045 y(14.)46 b(The)40 b(SlaMap)h(class)g(has)g(b)s(een)e
-(extended)i(b)m(y)f(the)h(addition)g(of)f(con)m(v)m(ersions)i(b)s(et)m
-(w)m(een)f(FK5)g(and)227 4158 y(ICRS)29 b(co)s(ordinates,)j(and)e(b)s
-(et)m(w)m(een)h(FK5)f(and)g(helio-ecliptic)j(co)s(ordinates.)66
-4347 y(15.)46 b(The)36 b(Sp)s(ecMap)f(class)i(has)e(b)s(een)g(c)m
-(hanged)i(to)f(use)g(the)g(equation)h(for)e(the)h(refractiv)m(e)i
-(index)d(of)h(air)227 4460 y(as)42 b(giv)m(en)g(in)f(the)g(curren)m(t)g
-(v)m(ersion)g(of)h(FITS-W)m(CS)e(pap)s(er)h(I)s(I)s(I.)e(Also,)45
-b(the)c(forw)m(ard)g(and)g(in)m(v)m(erse)227 4573 y(transformations)33
-b(b)s(et)m(w)m(een)h(frequency)e(and)g(air-w)m(a)m(v)m(elength)k(ha)m
-(v)m(e)e(b)s(een)e(made)h(more)g(compatible)227 4686
-y(b)m(y)e(using)e(an)i(iterativ)m(e)i(pro)s(cedure)c(to)i(calculate)i
-(the)d(in)m(v)m(erse.)0 4981 y Fw(G.17)112 b(Changes)39
-b(In)m(tro)s(duced)f(in)f(V3.1)0 5203 y FF(The)g(follo)m(wing)h
-(describ)s(es)f(the)g(most)h(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f
-(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g(AST)g(library)0
-5316 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V3.0)g(and)f(V3.1)i(\(the)f
-(curren)m(t)f(v)m(ersion\):)111 5580 y(1.)46 b(Addition)30
-b(of)g(a)g(new)f(class)h(called)h(XmlChan)e(-)h(a)g(Channel)e(whic)m(h)
-i(reads)f(and)g(writes)h(AST)f(ob)5 b(jects)227 5693
-y(in)30 b(the)h(form)f(of)g(XML.)p eop end
-%%Page: 556 566
-TeXDict begin 556 565 bop 0 52 a FF(556)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FF(2.)46
-b(A)30 b(bug)f(has)g(b)s(een)g(\014xed)g(in)g(the)g(Plot)i(class)f
-(whic)m(h)f(could)h(cause)g(incorrect)g(graphical)h(attributes)f(to)227
-464 y(b)s(e)35 b(used)g(for)g(v)-5 b(arious)36 b(parts)f(of)h(the)f
-(plot)h(if)g(either)g(axis)g(has)f(no)h(tic)m(k)h(marks)e(\(i.e.)57
-b(if)36 b(b)s(oth)e(ma)5 b(jor)227 577 y(and)30 b(minor)g(tic)m(k)i
-(marks)e(ha)m(v)m(e)h(zero)g(length\).)0 810 y(Programs)25
-b(whic)m(h)g(are)h(statically)h(link)m(ed)f(will)f(need)g(to)h(b)s(e)f
-(re-link)m(ed)g(in)g(order)g(to)h(tak)m(e)h(adv)-5 b(an)m(tage)27
-b(of)e(these)0 923 y(new)30 b(facilities.)0 1206 y Fw(G.18)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.2)0 1420 y
-FF(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h(signi\014can)m(t)g
-(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g(AST)g
-(library)0 1533 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V3.1)g(and)f
-(V3.2:)111 1766 y(1.)46 b(A)38 b(new)f(function)g(astPutCards)g(has)g
-(b)s(een)g(added)f(to)j(the)e(FitsChan)h(class.)62 b(This)37
-b(allo)m(ws)i(m)m(ulti-)227 1879 y(ple)f(concatenated)h(header)f(cards)
-f(to)h(b)s(e)f(stored)h(in)f(a)h(FitsChan)f(in)g(a)h(single)g(call,)j
-(pro)m(viding)d(an)227 1992 y(alternativ)m(e)33 b(to)e(the)g(existing)g
-(astPutCards)f(function.)111 2172 y(2.)46 b(Some)33 b(sign\014can)m(t)h
-(c)m(hanges)g(ha)m(v)m(e)g(b)s(een)f(made)g(to)h(the)f
-(simpli\014cation)h(of)f(Mappings)g(whic)m(h)f(should)227
-2285 y(resultin)24 b(a)h(greater)h(degree)f(of)g(simplication)g(taking)
-h(place.Some)f(bugs)f(ha)m(v)m(e)i(also)f(b)s(een)f(\014xed)g(whic)m(h)
-227 2398 y(could)d(result)f(in)h(an)f(in\014nite)h(lo)s(op)f(b)s(eing)h
-(en)m(tered)g(when)e(attempting)j(to)g(simplify)e(certain)h(Mappings.)
-111 2578 y(3.)46 b(The)40 b(FitsChan)h(class)g(no)m(w)g(translates)g
-(the)g(sp)s(ectral)g(algorithm)h(co)s(des)e(\\-W)-10
-b(A)g(V",)43 b(\\-FR)m(Q")f(and)227 2691 y(\\-VEL")d(\(sp)s(eci\014ed)e
-(in)g(early)h(drafts)f(of)g(pap)s(er)f(I)s(I)s(I\))h(to)h(the)f
-(corresp)s(onding)g(\\-X2P")i(form)d(when)227 2804 y(reading)31
-b(a)g(sp)s(ectral)f(axis)h(description)f(from)g(a)h(set)g(of)g(FITS)e
-(header)h(cards.)111 2985 y(4.)46 b(A)35 b(bug)f(has)g(b)s(een)g
-(\014xed)f(in)h(the)h(FitsChan)f(class)h(whic)m(h)g(could)f(cause)h(k)m
-(eyw)m(ords)g(asso)s(ciated)h(with)227 3098 y(alternate)c(axis)f
-(descriptions)f(to)i(b)s(e)d(mis-in)m(terpreted.)111
-3278 y(5.)46 b(The)33 b(Plot)h(class)f(no)m(w)g(pro)m(vides)g
-(facilities)i(for)e(mo)s(difying)g(the)g(app)s(earance)g(of)g
-(sub-strings)f(within)227 3391 y(text)24 b(strings)f(suc)m(h)g(as)g
-(axis)g(lab)s(els,)i(titles,)h Fx(etc)p FF(,)e(b)m(y)f(pro)s(ducing)f
-(sup)s(er-scripts,)h(sub-scripts,)h(c)m(hanging)227 3504
-y(the)31 b(fon)m(t)g(colour,)g(size,)g Fx(etc)p FF(.)41
-b(See)31 b(attribute)g(Escap)s(e.)111 3684 y(6.)46 b(The)36
-b(default)g(v)-5 b(alue)36 b(of)g(the)h(T)-8 b(ol)36
-b(attribute)h(of)f(the)g(Plot)h(class)g(has)e(b)s(een)h(c)m(hanged)g
-(from)g(0.001)i(to)227 3797 y(0.01.)47 b(This)31 b(should)g(not)h
-(usually)f(cause)i(an)m(y)f(signi\014can)m(t)h(visible)f(c)m(hange)h
-(to)f(the)g(plot,)h(but)e(should)227 3910 y(mak)m(e)i(the)f(plotting)h
-(faster.)46 b(Y)-8 b(ou)33 b(ma)m(y)f(need)g(to)h(set)f(a)g(lo)m(w)m
-(er)i(v)-5 b(alue)32 b(for)g(T)-8 b(ol)32 b(if)g(y)m(ou)g(are)h(pro)s
-(ducing)227 4023 y(a)e(particularly)g(large)g(plot.)111
-4203 y(7.)46 b(The)30 b(algorithm)h(for)e(\014nding)g(the)h(default)g
-(v)-5 b(alue)31 b(for)e(the)h(Gap)h(attribute)f(has)g(b)s(een)f(c)m
-(hanged.)41 b(This)227 4316 y(attribute)34 b(sp)s(eci\014es)f(the)g
-(gap)h(b)s(et)m(w)m(een)g(ma)5 b(jor)33 b(axis)g(v)-5
-b(alues)34 b(in)f(an)g(annotated)h(grid)f(dra)m(wn)f(b)m(y)h(the)227
-4429 y(Plot)26 b(class.)40 b(The)25 b(c)m(hange)h(in)f(algorithm)h(ma)m
-(y)f(cause)h(the)f(default)h(v)-5 b(alue)25 b(to)h(b)s(e)f(di\013eren)m
-(t)g(to)h(previous)227 4542 y(v)m(ersions)31 b(in)f(cirtain)h
-(circumstances.)111 4722 y(8.)46 b(Some)39 b(bugs)f(ha)m(v)m(e)i(b)s
-(een)e(\014xed)g(in)g(the)h(Plot)h(class)f(whic)m(h)g(could)g(cause)g
-(the)g(system)g(to)g(hang)g(for)227 4835 y(a)k(long)g(time)g(while)g
-(dra)m(wing)f(certain)i(all-sky)f(grids)f(\(notable)i(some)f(of)f(the)h
-(FITS)f(Quad-cub)s(e)227 4948 y(pro)5 b(jections\).)111
-5128 y(9.)46 b(The)33 b(SkyAxis)g(class)i(has)e(extended)g(the)h(F)-8
-b(ormat)35 b(attribute)f(b)m(y)f(the)h(addition)g(of)f(the)h(\\g")h
-(option.)227 5241 y(this)k(option)g(is)f(similar)h(to)g(the)g(older)f
-(\\l")i(option)f(in)f(that)h(it)g(results)f(in)g(c)m(haracters)i
-(\(\\h",)i(\\m",)227 5354 y(\\s",)34 b Fx(etc)5 b FF(\))32
-b(b)s(eing)g(used)f(as)h(delimiters)h(b)s(et)m(w)m(een)f(the)h
-(sexagesimal)h(\014elds)d(of)h(the)h(celestial)h(p)s(osition.)227
-5467 y(The)g(di\013erence)i(is)e(that)i(the)e(\\g")i(option)f(includes)
-g(graphics)f(escap)s(e)i(sequences)e(in)h(the)g(returned)227
-5580 y(formatted)27 b(string)e(whic)m(h)h(result)g(in)f(the)h(\014eld)g
-(delimiter)g(c)m(haracters)i(b)s(eing)d(dra)m(wn)g(as)h(sup)s
-(er-scripts)227 5693 y(when)k(plotted)h(as)f(n)m(umerical)h(axis)g(v)-5
-b(alues)31 b(b)m(y)f(a)h(Plot.)p eop end
-%%Page: 557 567
-TeXDict begin 557 566 bop 0 52 a Fy(G.19)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V3.3)2249 b FF(557)66 351 y(10.)46
-b(The)30 b(Plot)h(class)g(has)f(b)s(een)f(extended)h(to)h(include)f
-(facilities)i(for)e(pro)s(ducing)f(logarithmic)j(axes.)41
-b(See)227 464 y(attributes)31 b(LogPlot,)h(LogTic)m(ks,)g(LogGap)g(and)
-d(LogLab)s(el.)66 672 y(11.)46 b(New)35 b(functions)g(astGCap)g(and)g
-(astGScales)h(ha)m(v)m(e)g(b)s(een)f(added)f(to)h(the)g(in)m(terface)i
-(de\014ned)d(b)m(y)g(\014le)227 785 y Fq(grf.h)p FF(.)39
-b(The)26 b(ast)p Fq(_)p FF(link)i(command)f(has)g(b)s(een)g(mo)s
-(di\014ed)f(so)h(that)h(the)g Fq(-mygrf)d FF(switc)m(h)j(loads)g(dumm)m
-(y)227 898 y(v)m(ersions)34 b(of)f(the)g(new)g(grf)g(functions.)48
-b(This)32 b(means)h(that)h(applications)g(should)e(con)m(tin)m(ue)j(to)
-f(build)227 1011 y(without)23 b(an)m(y)f(c)m(hange.)40
-b(Ho)m(w)m(ev)m(er,)26 b(the)c(facilities)j(for)d(in)m(terpreting)h
-(escap)s(e)g(sequences)g(within)f(strings)227 1124 y(dra)m(wn)j(b)m(y)g
-(the)g(Plot)i(class)f(will)f(not)h(b)s(e)e(a)m(v)-5 b(ailable)28
-b(unless)d(the)g(new)g(grf)g(functions)g(are)h(implemen)m(ted.)227
-1237 y(If)c(y)m(ou)g(c)m(ho)s(ose)h(to)f(implemen)m(t)h(them,)h(y)m(ou)
-e(should)f(mo)s(dify)g(y)m(our)h(linking)g(pro)s(cedure)e(to)j(use)f
-(the)g Fq(-grf)227 1349 y FF(switc)m(h)34 b(in)e(place)i(of)f(the)h
-(older)f Fq(-mygrf)e FF(switc)m(h.)49 b(See)33 b(the)g(description)g
-(of)g(the)g(ast)p Fq(_)p FF(link)h(command)227 1462 y(for)g(details)h
-(of)f(the)g(new)g(switc)m(hes.)52 b(Also)35 b(note)f(that)h(the)f
-(astGQc)m(h)h(function,)g(whilst)f(included)f(in)227
-1575 y(v)m(erb+grf.h+)i(in)h(p)s(ervious)f(v)m(ersions)i(of)f(AST,)g(w)
-m(as)h(not)f(actually)i(called.)59 b(As)36 b(of)h(this)f(v)m(ersion)g
-(of)227 1688 y(AST,)c(calls)i(are)f(made)f(to)h(the)g(astGQc)m(h)h
-(function,)e(and)g(so)h(an)m(y)g(bugs)e(in)i(the)f(implemen)m(tation)i
-(of)227 1801 y(astGQc)m(h)e(ma)m(y)f(cause)g(spurious)d(b)s(eha)m
-(viour)i(when)g(plotting)h(text)h(strings.)66 2009 y(12.)46
-b(A)c(new)f('static')i(metho)s(d)e(called)h(astEscap)s(es)g(has)f(b)s
-(een)g(added)f(whic)m(h)h(is)h(used)e(to)i(con)m(trol)h(and)227
-2122 y(enquire)33 b(whether)g(astGetC)h(and)f(astF)-8
-b(ormat)35 b(will)e(strip)g(an)m(y)h(graphical)g(escap)s(e)f(sequences)
-h(whic)m(h)227 2235 y(ma)m(y)d(b)s(e)f(presen)m(t)g(out)h(of)g(the)f
-(returned)f(v)-5 b(alue.)66 2443 y(13.)46 b(New)35 b(attribute)g
-(XmlPre\014x)f(has)g(b)s(een)f(added)h(to)h(the)g(XmlChan)e(class.)54
-b(It)34 b(allo)m(ws)i(XML)e(written)227 2556 y(b)m(y)d(the)f(XmlChan)g
-(class)h(to)g(include)f(an)g(explicit)i(namespace)f(pre\014x)e(on)i
-(eac)m(h)g(elemen)m(t.)66 2763 y(14.)46 b(New)33 b(attribute)g(XmlF)-8
-b(ormat)34 b(has)e(b)s(een)g(added)f(to)i(the)g(XmlChan)f(class.)47
-b(It)33 b(sp)s(eci\014es)f(the)g(format)227 2876 y(in)e(whic)m(h)g(AST)
-g(ob)5 b(jects)31 b(should)f(b)s(e)f(written.)66 3084
-y(15.)46 b(A)26 b(new)f(class)h(of)f(Mapping,)i(the)e(T)-8
-b(ranMap,)27 b(has)e(b)s(een)f(in)m(tro)s(duced.)39 b(A)25
-b(T)-8 b(ranMap)25 b(tak)m(es)i(its)f(forw)m(ard)227
-3197 y(transformation)41 b(from)g(an)f(existing)i(Mapping,)h(and)d(its)
-h(in)m(v)m(erse)h(transformation)f(from)f(another)227
-3310 y(existing)32 b(Mapping.)66 3518 y(16.)46 b(A)39
-b(bug)f(has)h(b)s(een)f(\014xed)g(in)h(WcsMap)g(whic)m(h)g(caused)g
-(error)f(rep)s(orts)g(to)i(include)e(erroneous)h(axis)227
-3631 y(n)m(um)m(b)s(ers)29 b(when)h(referring)f(to)j(missing)e
-(parameter)h(v)-5 b(alues.)0 3958 y Fw(G.19)112 b(Changes)39
-b(In)m(tro)s(duced)f(in)f(V3.3)0 4194 y FF(The)g(follo)m(wing)h
-(describ)s(es)f(the)g(most)h(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f
-(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g(AST)g(library)0
-4307 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V3.2)g(and)f(V3.3:)111
-4600 y(1.)46 b(Options)37 b(ha)m(v)m(e)i(b)s(een)e(added)g(to)h(the)g
-(SkyF)-8 b(rame)38 b(class)g(whic)m(h)g(allo)m(ws)h(the)e(origin)h(of)g
-(celestial)i(co-)227 4713 y(ordinates)c(to)g(b)s(e)f(mo)m(v)m(ed)i(to)f
-(an)m(y)f(sp)s(eci\014ed)g(p)s(oin)m(t.)56 b(See)36 b(the)g(new)f
-(attributes)h(SkyRef,)g(SkyRefIs,)227 4826 y(SkyRefP)30
-b(and)g(AlignO\013set.)111 5034 y(2.)46 b(An)33 b(option)g(has)g(b)s
-(een)f(added)g(to)i(the)f(FitsChan)f(class)i(whic)m(h)f(allo)m(ws)h
-(extra)g(F)-8 b(rames)33 b(represen)m(ting)227 5146 y(cartesian)i(pro)5
-b(jection)34 b(plane)f(co)s(ordinates)h(\(\\in)m(termediate)i(w)m(orld)
-d(co)s(ordinates")h(in)f(the)h(parlance)227 5259 y(of)29
-b(FITS-W)m(CS\))f(to)i(b)s(e)d(created)j(when)d(reading)i(W)m(CS)f
-(information)h(from)f(a)h(foreign)g(FITS)e(header.)227
-5372 y(This)j(option)h(is)f(con)m(trolled)i(b)m(y)e(a)h(new)f
-(attribute)h(called)h(Iw)m(c.)111 5580 y(3.)46 b(The)29
-b(FitsChan)f(class)i(whic)m(h)e(b)s(een)g(mo)s(di\014ed)g(to)h(in)m
-(terpret)g(FITS-W)m(CS)g(CAR)f(pro)5 b(jection)30 b(headers)227
-5693 y(correctly)i(if)e(the)h(longitude)g(reference)g(pixel)f
-(\(CRPIX\))h(is)f(v)m(ery)h(large.)p eop end
-%%Page: 558 568
-TeXDict begin 558 567 bop 0 52 a FF(558)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FF(4.)46
-b(The)35 b(FITS-AIPS++)e(enco)s(ding)j(in)e(the)i(FitsChan)f(class)h
-(no)m(w)f(recognised)h(sp)s(ectral)f(axes)h(if)f(they)227
-464 y(conform)42 b(to)h(the)g(AIPS)f(con)m(v)m(en)m(tion)i(in)e(whic)m
-(h)g(the)h(sp)s(ectral)f(axis)h(is)f(descirb)s(ed)f(b)m(y)i(a)f(CTYPE)
-227 577 y(k)m(eyw)m(ord)36 b(o)s(d)g(the)g(form)f("AAAA-BBB")k(where)c
-(\\AAAA")i(is)f(one)g(of)g(FREQ,)g(VELO)f(or)h(FELO,)227
-690 y(and)d(\\BBB")j(is)d(one)h(of)f(LSR,)g(LSD,)h(HEL)f(or)h(OBS.)f
-(Suc)m(h)g(sp)s(ectral)g(axes)h(can)g(b)s(e)f(b)s(oth)g(read)g(and)227
-803 y(written.)111 999 y(5.)46 b(The)24 b(FitsChan)g(class)h(no)m(w)g
-(has)f(a)h(FITS-AIPS++)d(enco)s(ding)j(whic)m(h)f(represen)m(ts)g(W)m
-(CS)g(information)227 1112 y(using)30 b(FITS)f(header)h(cards)g
-(recognised)h(b)m(y)f(the)g(AIPS++)f(pro)5 b(ject.)41
-b(Supp)s(ort)28 b(for)i(sp)s(ectral)h(axes)f(is)227 1225
-y(iden)m(tical)i(to)g(the)e(FITS-AIPS)f(enco)s(ding.)111
-1420 y(6.)46 b(The)39 b(organisation)i(of)f(the)g(AST)e(distribution)h
-(and)g(the)h(commands)f(for)g(building)f(it)i(ha)m(v)m(e)h(b)s(een)227
-1533 y(c)m(hanged.)h(Whereas)31 b(AST)f(used)f(to)j(b)s(e)d(built)i
-(and)e(installed)j(with)e Fq(./mk)46 b(build;)h(./mk)f(install)p
-FF(,)227 1646 y(it)36 b(no)m(w)e(builds)g(using)g(the)h(more)g
-(standard)f(idiom)h Fq(./configure;)44 b(make;)i(make)h(install)p
-FF(.)52 b(The)227 1759 y(installation)41 b(lo)s(cation)f(is)f(con)m
-(trolled)h(b)m(y)e(the)h Fq(--prefix)e FF(argumen)m(t)i(to)g
-(./con\014gure)g(\(as)g(is)g(usual)227 1872 y(for)30
-b(other)g(pac)m(k)-5 b(ages)32 b(whic)m(h)e(use)g(this)g(sc)m(heme\).)
-41 b(Note)32 b(that)e(the)h(INST)-8 b(ALL)29 b(en)m(vironmen)m(t)i(v)-5
-b(ariable)227 1985 y(no)m(w)28 b(has)g(a)g Fx(di\013er)-5
-b(ent)37 b FF(meaning)28 b(to)g(that)h(whic)m(h)e(it)h(had)g(b)s
-(efore,)g(and)f(it)h(should)f(generally)i(b)s(e)e Fx(unset)p
-FF(.)227 2098 y(Also,)32 b(there)e(is)h(no)f(need)g(to)h(set)g(the)g
-(SYSTEM)e(v)-5 b(ariable.)111 2294 y(7.)46 b(Shared)26
-b(libraries)g(are)h(no)m(w)g(installed)g(in)f(the)h(same)g(directory)g
-(as)g(the)g(static)h(libraries.)39 b(In)26 b(addition,)227
-2407 y(links)i(to)g(sharable)g(libraries)g(are)g(installed)h(with)e
-(names)h(whic)m(h)f(include)h(v)m(ersion)g(information,)h(and)227
-2520 y(\\libto)s(ol)22 b(libraries")f(are)f(also)i(installed)f(\(see)g
-(h)m(ttp://www.gn)m(u.org/soft)m(w)m(are/libto)s(ol/man)m(ual.h)m
-(tml\))q(.)111 2715 y(8.)46 b(The)22 b Fq(ast_dev)f FF(script)h(has)h
-(b)s(een)e(remo)m(v)m(ed.)39 b(Instead,)25 b(the)d(lo)s(cation)i(of)f
-(the)g(AST)f(include)g(\014les)g(should)227 2828 y(b)s(e)30
-b(sp)s(eci\014ed)g(using)g(the)g(-I)h(option)f(when)g(compiling.)0
-3135 y Fw(G.20)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.4)0
-3363 y FF(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 3476 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V3.3)g(and)f(V3.4:)111 3751 y(1.)46 b(The)26
-b(Mapping)h(class)g(has)g(a)g(new)f(metho)s(d)g(\(astLinearAppro)m(x\))
-i(whic)m(h)e(calculates)j(the)e(co-e\016cien)m(ts)227
-3863 y(of)k(a)g(linear)f(appro)m(ximation)i(to)f(a)g(Mapping.)111
-4059 y(2.)46 b(The)27 b(F)-8 b(ormat)29 b(attribute)g(for)e(simple)h(F)
--8 b(rames)28 b(and)f(SkyF)-8 b(rames)28 b(has)f(b)s(een)g(extended.)40
-b(It)28 b(has)f(alw)m(a)m(ys)227 4172 y(b)s(een)e(p)s(ossible,)h(in)f
-(b)s(oth)g(classes,)j(to)e(sp)s(ecify)f(a)h(precision)g(b)m(y)f
-(including)g(a)h(dot)f(in)h(the)f(F)-8 b(ormat)27 b(v)-5
-b(alue)227 4285 y(follo)m(w)m(ed)27 b(b)m(y)e(an)g(in)m(teger)i(\()p
-Fx(e.g.)39 b FF(\\)p Fq(dms.1)p FF(")24 b(for)h(a)h(SkyF)-8
-b(rame,)27 b(or)e(\\)p Fq(\045.10g)p FF(")g(for)g(a)g(simple)h(F)-8
-b(rame\).)40 b(The)227 4398 y(precision)31 b(can)g(no)m(w)g(also)g(b)s
-(e)f(sp)s(eci\014ed)g(using)g(an)h(asterisk)g(in)f(place)i(of)e(the)h
-(in)m(teger)h(\()p Fx(e.g.)41 b FF(\\)p Fq(dms.*)p FF(")227
-4511 y(or)36 b(\\)p Fq(\045.*g)p FF("\).)58 b(This)35
-b(causes)i(the)f(precision)g(to)h(b)s(e)e(deriv)m(ed)h(on)g(the)g
-(basis)g(of)g(the)g(Digits)i(attribute)227 4624 y(v)-5
-b(alue.)111 4820 y(3.)46 b(The)30 b(Plot)i(class)f(has)g(b)s(een)f(c)m
-(hanged)h(so)g(that)h(the)e(default)h(v)-5 b(alue)31
-b(used)f(for)h(the)g(Digits)h(attribute)f(is)227 4933
-y(c)m(hosen)f(to)h(b)s(e)e(the)g(smallest)i(v)-5 b(alue)30
-b(whic)m(h)f(results)h(in)f(no)h(pair)f(of)h(adjacen)m(t)g(lab)s(els)g
-(b)s(eing)f(iden)m(tical.)227 5046 y(F)-8 b(or)22 b(instance,)i(if)e
-(an)f(annotated)h(grid)f(is)g(b)s(eing)g(dra)m(wn)f(describing)h(a)h
-(SkyF)-8 b(rame,)24 b(and)d(the)g(F)-8 b(ormat\(1\))227
-5158 y(v)j(alue)30 b(is)e(set)i(to)f(\\)p Fq(hms.*g)p
-FF(")g(\(the)g(\\g")h(causes)f(\014eld)g(delimiters)g(to)h(b)s(e)e(dra)
-m(wn)g(as)h(sup)s(erscripts\),)f(and)227 5271 y(the)35
-b(Digits\(1\))i(v)-5 b(alue)36 b(is)e(unset,)i(then)e(the)h(seconds)g
-(\014eld)f(will)h(ha)m(v)m(e)h(a)f(n)m(um)m(b)s(er)e(of)i(decimal)h
-(places)227 5384 y(whic)m(h)30 b(results)h(in)f(no)g(pair)g(of)g(lab)s
-(els)h(b)s(eing)f(iden)m(tical.)111 5580 y(4.)46 b(Addition)34
-b(of)g(a)g(new)g(class)g(classed)h(DSBSp)s(ecF)-8 b(rame.)52
-b(This)33 b(is)h(a)g(sub-class)g(of)g(Sp)s(ecF)-8 b(rame)34
-b(whic)m(h)227 5693 y(can)d(b)s(e)f(used)f(to)i(describ)s(e)f(sp)s
-(ectral)h(axes)g(asso)s(ciated)h(with)e(dual)g(sideband)f(sp)s(ectral)i
-(data.)p eop end
-%%Page: 559 569
-TeXDict begin 559 568 bop 0 52 a Fy(G.21)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V3.5)2249 b FF(559)111 351
-y(5.)46 b(The)d(FitsChan)g(class)i(will)e(no)m(w)h(read)f(headers)g
-(whic)m(h)g(use)g(the)h(old)g(\\-GLS")g(pro)5 b(jection)44
-b(co)s(de,)227 464 y(con)m(v)m(erting)d(them)f(to)g(the)f(corresp)s
-(onding)f(mo)s(dern)g(\\-SFL")j(co)s(de,)h(pro)m(vided)c(that)i(the)g
-(celestial)227 577 y(axes)31 b(are)g(not)g(rotated.)111
-802 y(6.)46 b(The)36 b(FitsChan)f(class)i(has)f(a)g(new)f(Enco)s(ding,)
-i(\\FITS-CLASS",)e(whic)m(h)h(allo)m(ws)h(the)f(reading)g(and)227
-915 y(writing)21 b(of)f(FITS)g(headers)f(using)h(the)h(con)m(v)m(en)m
-(tions)h(of)e(the)h(CLASS)e(pac)m(k)-5 b(age)22 b(-)f(see)41
-b(h)m(ttp://www.iram.fr/IRAMFR/GILD)m(AS/do)s(c/h)m(tml/class-)227
-1028 y(h)m(tml/class.h)m(tml\).)0 1385 y Fw(G.21)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.5)0 1634 y
-FF(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h(signi\014can)m(t)g
-(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g(AST)g
-(library)0 1747 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V3.4)g(and)f
-(V3.5:)111 2066 y(1.)46 b(AST)29 b(no)m(w)g(pro)m(vides)h(facilities)i
-(for)d(represen)m(ting)g(regions)h(of)g(v)-5 b(arious)29
-b(shap)s(es)g(within)g(a)h(co)s(ordinate)227 2179 y(system.)43
-b(The)31 b(Region)g(class)h(pro)m(vides)f(general)h(facilities)h(whic)m
-(h)e(are)h(indep)s(enden)m(t)d(of)i(the)h(sp)s(eci\014c)227
-2292 y(shap)s(e)37 b(of)h(region)h(b)s(eing)e(used.)62
-b(V)-8 b(arious)39 b(sub-classes)f(of)g(Region)h(are)f(also)h(no)m(w)f
-(a)m(v)-5 b(ailable)40 b(whic)m(h)227 2404 y(pro)m(vide)25
-b(means)f(of)g(creating)h(Regions)g(of)g(sp)s(eci\014c)e(shap)s(e.)38
-b(F)-8 b(acilities)28 b(pro)m(vided)23 b(b)m(y)h(the)h(Region)g(class)
-227 2517 y(include)j(testing)h(p)s(oin)m(ts)f(to)h(see)f(if)g(they)h
-(are)f(inside)g(the)g(Region,)i(testing)f(t)m(w)m(o)g(Regions)g(for)f
-(o)m(v)m(erlap,)227 2630 y(transforming)i(Regions)h(from)f(one)h(co)s
-(ordinate)g(system)g(to)g(another)f Fx(etc)p FF(.)111
-2856 y(2.)46 b(A)31 b(new)f(class)h(of)g(1-dimensional)g(F)-8
-b(rame)32 b(called)g(FluxF)-8 b(rame)31 b(has)g(b)s(een)e(added)h(whic)
-m(h)g(can)h(b)s(e)f(used)227 2968 y(to)c(describ)s(e)e(v)-5
-b(arious)24 b(systems)h(for)f(describing)g(o)m(vserv)m(ed)i(v)-5
-b(alue)25 b(at)g(a)g(single)g(\014xed)f(sp)s(ectral)h(p)s(osition.)111
-3194 y(3.)46 b(A)33 b(new)f(class)h(of)f(2-dimensional)h(F)-8
-b(rame)34 b(called)f(Sp)s(ecFluxF)-8 b(rame)33 b(has)f(b)s(een)g(added)
-f(whic)m(h)h(can)h(b)s(e)227 3307 y(used)24 b(to)h(describ)s(e)f(a)h
-(2-d)g(frame)f(spanned)f(b)m(y)i(a)g(sp)s(ectral)g(p)s(osition)f(axis)h
-(and)f(and)g(an)g(observ)m(ed)h(v)-5 b(alue)227 3420
-y(axis.)111 3645 y(4.)46 b(A)c(new)f(class)h(of)g(Mapping)f(called)i
-(RateMap)f(has)g(b)s(een)e(added.)73 b(A)42 b(RateMap)h(encapsulates)f
-(a)227 3758 y(previously)32 b(created)h(Mapping.)44 b(The)31
-b(inputs)g(of)h(the)g(RateMap)h(corresp)s(ond)d(to)j(the)f(inputs)e(of)
-i(the)227 3871 y(encapsulated)i(Mapping.)48 b(All)33
-b(RateMaps)i(ha)m(v)m(e)f(just)e(a)h(single)h(output)e(whic)m(h)h
-(corresp)s(ond)f(to)h(the)227 3984 y(rate)24 b(of)g(c)m(hange)g(of)f(a)
-h(sp)s(eci\014ed)f(output)g(of)g(the)g(encapsulated)h(Mapping)f(with)g
-(resp)s(ect)h(to)g(a)f(sp)s(eci\014ed)227 4097 y(input.)111
-4322 y(5.)46 b(The)d(SkyF)-8 b(rame)45 b(class)f(no)m(w)g(supp)s(orts)e
-(a)i(v)-5 b(alue)44 b(of)g(\\J2000")i(for)d(System.)81
-b(This)43 b(system)h(is)g(an)227 4435 y(equatorial)29
-b(system)d(based)h(on)f(the)h(mean)g(dynamical)g(equator)g(and)f
-(equino)m(x)h(at)h(J2000,)h(and)d(di\013ers)227 4548
-y(sligh)m(tly)32 b(from)e(an)g(FK5\(J2000\))j(system.)111
-4773 y(6.)46 b(A)31 b(new)e(class)j(called)f(KeyMap)g(has)f(b)s(een)f
-(added.)40 b(A)31 b(KeyMap)f(can)h(b)s(e)f(used)f(to)i(store)g(a)g
-(collection)227 4886 y(of)d(v)m(ector)i(or)d(scalar)i(v)-5
-b(alues)28 b(or)g(Ob)5 b(jects,)29 b(indexed)e(b)m(y)h(a)g(c)m
-(haracter)h(string)f(rather)g(than)f(an)h(in)m(teger.)111
-5111 y(7.)46 b(The)37 b(parameter)h(list)g(for)f(the)g(astRate)i(metho)
-s(d)e(of)h(the)f(Mapping)g(class)h(has)f(b)s(een)g(mo)s(di\014ed.)60
-b(It)227 5224 y(no)29 b(longer)h(returns)e(a)h(second)g(deriv)-5
-b(ativ)m(e)31 b(estimate.)42 b(Existing)29 b(co)s(de)g(whic)m(h)g(uses)
-g(this)g(metho)s(d)f(will)227 5337 y(need)i(to)i(b)s(e)d(c)m(hanged.)
-111 5562 y(8.)46 b(Metho)s(ds)27 b(\(astSetFits<X>\))i(ha)m(v)m(e)f(b)s
-(een)e(added)g(to)i(the)f(FitsChan)f(class)i(to)f(allo)m(w)h(v)-5
-b(alues)27 b(for)g(named)227 5675 y(k)m(eyw)m(ords)k(to)g(b)s(e)f(c)m
-(hanged)h(or)f(added.)p eop end
-%%Page: 560 570
-TeXDict begin 560 569 bop 0 52 a FF(560)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)0 351 y Fw(G.22)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.6)0 574 y FF(The)26
-b(follo)m(wing)i(describ)s(es)d(the)i(most)f(signi\014can)m(t)i(c)m
-(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g(AST)g(library)g(b)s(et)m
-(w)m(een)0 687 y(v)m(ersions)31 b(V3.5)g(and)f(V3.6:)111
-953 y(1.)46 b(If)29 b(the)h(F)-8 b(ormat)30 b(attribute)h(asso)s
-(ciated)f(with)f(an)h(axis)g(of)f(a)h(SkyF)-8 b(rame)30
-b(starts)f(with)h(a)f(p)s(ercen)m(t)h(c)m(har-)227 1066
-y(acter)41 b(\(\\)p Fq(\045)p FF("\),)j(then)39 b(axis)i(v)-5
-b(alues)40 b(are)g(no)m(w)g(formatted)g(and)f(unformatted)h(as)g(a)g
-(decimal)h(radians)227 1179 y(v)-5 b(alue,)31 b(using)f(the)h(F)-8
-b(ormat)32 b(syn)m(tax)e(of)h(a)g(simple)f(F)-8 b(rame.)111
-1369 y(2.)46 b(The)34 b(Plot)i(class)f(has)f(a)h(new)f(attribute)h
-(called)h(Clip)e(whic)m(h)g(con)m(trols)i(the)f(clipping)g(p)s
-(erformed)e(b)m(y)227 1482 y(AST)d(at)h(the)g(plot)f(b)s(oundary)-8
-b(.)111 1672 y(3.)46 b(The)31 b(k)m(eys)g(used)g(to)g(lab)s(el)h(comp)s
-(onen)m(ts)f(of)g(the)g(P)m(olyMap)h(structure)f(when)f(a)h(P)m(olyMap)
-h(is)f(written)227 1785 y(out)24 b(through)g(a)g(Channel)f(ha)m(v)m(e)i
-(b)s(een)e(c)m(hanged.)40 b(The)23 b(new)g(k)m(eys)i(are)f(shorter)g
-(than)f(the)h(old)h(k)m(eys)f(and)227 1898 y(so)j(can)f(written)h
-(succesfully)f(to)h(a)g(FitsChan.)39 b(The)26 b(new)g(P)m(olyMap)h
-(class)g(alw)m(a)m(ys)h(writes)f(new)e(st)m(yles)227
-2011 y(k)m(eys)30 b(but)f(can)g(read)g(either)h(old)f(or)g(new)g(st)m
-(yle)h(k)m(eys.)41 b(Consequen)m(tly)-8 b(,)31 b(P)m(olyMap)f(dumps)d
-(written)j(b)m(y)227 2124 y(this)h(v)m(ersion)f(of)h(AST)f(cannot)h(b)s
-(e)e(read)i(b)m(y)f(older)g(v)m(ersions)h(of)g(AST.)111
-2314 y(4.)46 b(A)36 b(mimimal)f(cut)h(do)m(wn)f(subset)f(of)i(the)f(C)g
-(v)m(ersion)h(of)g(SLALIB)e(is)i(no)m(w)f(included)g(with)g(the)g(AST)
-227 2427 y(distribution)c(and)g(built)h(as)g(part)f(of)h(building)f
-(AST.)g(This)g(means)h(that)g(it)g(is)g(no)g(longer)g(necessary)227
-2540 y(to)i(ha)m(v)m(e)h(SLALIB)d(installed)i(separately)h(at)f(y)m
-(our)f(site.)50 b(The)33 b(SLALIB)f(co)s(de)i(included)e(with)h(AST)227
-2652 y(is)e(distrubuted)d(under)h(the)h(GPL.)h(The)e(default)i(b)s(eha)
-m(viour)f(of)g(the)g(ast)p Fq(_)p FF(link)h(script)f(is)g(no)m(w)h(to)g
-(link)227 2765 y(with)41 b(this)g(in)m(ternal)h(slalib)f(subset.)73
-b(Ho)m(w)m(ev)m(er,)46 b(the)41 b(\\-csla")i(option)f(can)f(still)h(b)s
-(e)f(used)f(to)i(force)227 2878 y(linking)29 b(with)f(an)g(external)h
-(full)f(C)g(SLALIB)g(library)-8 b(.)40 b(A)29 b(new)f(option)g
-(\\-fsla")i(has)e(b)s(een)g(in)m(tro)s(duced)227 2991
-y(whic)m(h)i(forces)h(linking)g(with)f(the)g(external)i(full)e(F)-8
-b(ortran)31 b(SLALIB)f(library)-8 b(.)0 3288 y Fw(G.23)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.7)0 3512 y
-FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f(signi\014can)m
-(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g(AST)g(library)g
-(b)s(et)m(w)m(een)0 3625 y(v)m(ersions)31 b(V3.6)g(and)f(V3.7:)111
-3890 y(1.)46 b(Supp)s(ort)37 b(for)i(time)g(co)s(ordinate)h(systems)f
-(has)f(b)s(een)h(in)m(tro)s(duced)f(through)m(t)h(the)g(addition)g(of)g
-(t)m(w)m(o)227 4003 y(new)31 b(classes,)h(TimeF)-8 b(rame)33
-b(and)d(TimeMap.)43 b(The)31 b(TimeF)-8 b(rame)32 b(is)f(a)h
-(1-dimensional)g(F)-8 b(rame)32 b(whic)m(h)227 4116 y(can)i(b)s(e)f
-(used)g(to)h(describ)s(e)f(momen)m(ts)h(in)f(time)i(\(either)f
-(absolute)g(or)g(relativ)m(e\))i(in)d(v)-5 b(arious)33
-b(systems)227 4229 y(\(MJD,)h(Julian)e(Ep)s(o)s(c)m(h,)g
-Fx(etc.)p FF(\))47 b(and)31 b(referred)h(to)h(v)-5 b(arious)32
-b(time)h(scales)h(\(T)-8 b(AI,)33 b(UTC,)f(UT1,)h(GMST,)227
-4342 y Fx(etc)5 b FF(\).)41 b(The)29 b(TimeMap)h(is)g(a)h(Mapping)e
-(whic)m(h)h(can)g(transform)f(time)i(v)-5 b(alues)30
-b(b)s(et)m(w)m(een)g(these)g(v)-5 b(arious)227 4455 y(systems)23
-b(and)f(time)h(scales.)40 b(Note,)25 b(FitsChans)e(whic)m(h)f(ha)m(v)m
-(e)i(a)f(foreign)g(enco)s(ding)g(\()p Fx(i.e.)38 b FF(an)m(y)23
-b(enco)s(ding)227 4568 y(other)31 b(than)f(NA)-8 b(TIVE\))31
-b(are)g(not)f(able)h(to)g(read)g(or)f(write)h(these)f(new)g(classes.)0
-4865 y Fw(G.24)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V4.0)0
-5088 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 5201 y(v)m(ersions)31
-b(V3.7)g(and)f(V4.0:)111 5467 y(1.)46 b(Exp)s(erimen)m(tal)41
-b(supp)s(ort)d(for)i(reading)g(IV)m(O)m(A)h(Space-Time-Co)s(ordinates)g
-(\(STC-X\))f(descriptions)227 5580 y(using)28 b(the)f(XmlChan)g(class)i
-(has)e(b)s(een)h(added.)39 b(Supp)s(ort)25 b(is)j(included)f(for)h(a)g
-(subset)f(of)h(V1.20)h(of)f(the)227 5693 y(draft)i(STC)f(sp)s
-(eci\014cation.)p eop end
-%%Page: 561 571
-TeXDict begin 561 570 bop 0 52 a Fy(G.25)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V4.1)2249 b FF(561)111 351
-y(2.)46 b(A)39 b(new)g(set)h(of)f(metho)s(ds)f(\(AST)p
-Fq(_)p FF(REBIN<X>/astRebin<X>\))j(has)e(b)s(een)f(added)g(to)i(the)g
-(Mapping)227 464 y(class.)e(These)20 b(are)h(\015ux-conserving)f
-(alternativ)m(es)j(to)e(the)f(existing)h(AST)p Fq(_)p
-FF(RESAMPLE<X>/astResample<X>)227 577 y(metho)s(ds.)0
-870 y Fw(G.25)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V4.1)0
-1091 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 1203 y(v)m(ersions)31
-b(V4.0)g(and)f(V4.1:)111 1464 y(1.)46 b(A)23 b(new)g(con)m(trol)h
-(\015ag)g(has)f(b)s(een)f(added)g(to)i(the)f(AST)p Fq(_)p
-FF(RESAMPLE<X>/astResample<X>)h(functions)227 1577 y(whic)m(h)30
-b(pro)s(duces)f(appro)m(ximate)j(\015ux)d(conserv)-5
-b(ation.)111 1764 y(2.)46 b(New)c(constan)m(ts)g(AST)p
-Fq(__)p FF(SOMB)e(and)g(AST)p Fq(__)p FF(SOMBCOS)f(ha)m(v)m(e)j(b)s
-(een)f(added)f(to)i(ast.h.)74 b(These)227 1877 y(sp)s(ecify)43
-b(k)m(ernels)g(for)f(astResample)i(and)e(astRebin)h(based)g(on)f(the)h
-(\\Som)m(brero")h(function)e(\()h(2)29 b Fu(\003)227
-1990 y Fo(J)9 b FF(1\()p Fo(x)p FF(\))p Fo(=x)32 b FF(where)e
-Fo(J)9 b FF(1\()p Fo(x)p FF(\))32 b(is)e(the)h(\014rst)e(order)h
-(Bessel)i(function)e(of)g(the)h(\014rst)e(kind\).)111
-2177 y(3.)46 b(The)f(SkyF)-8 b(rame)45 b(class)g(no)m(w)g(supp)s(orts)e
-(a)i(System)g(v)-5 b(alue)45 b(of)g(AZEL)f(corresp)s(onding)g(to)h
-(horizon)227 2290 y(\(azim)m(uth/elev)-5 b(ation\))34
-b(co)s(ordinates.)111 2477 y(4.)46 b(The)31 b(FitsChan)h(class)g(allo)m
-(ws)h(the)e(non-standard)g(strings)g(\\AZ{")h(and)f(\\EL{")i(to)f(b)s
-(e)f(used)f(as)i(axis)227 2590 y(t)m(yp)s(es)f(in)f(FITS-W)m(CS)g
-(CTYPE)f(k)m(eyw)m(ord)i(v)-5 b(alues.)111 2777 y(5.)46
-b(The)28 b(F)-8 b(rame)28 b(class)h(no)m(w)f(has)f(attributes)h(ObsLon)
-f(and)g(ObsLat)h(to)g(sp)s(ecify)f(the)h(geo)s(detic)i(longitude)227
-2890 y(and)g(latitude)h(of)g(the)g(observ)m(er.)111 3077
-y(6.)46 b(The)41 b(Clo)s(c)m(kLon)g(and)g(Clo)s(c)m(kLat)h(attributes)f
-(ha)m(v)m(e)i(b)s(een)d(remo)m(v)m(ed)i(from)e(the)h(TimeF)-8
-b(rame)42 b(class.)227 3190 y(Lik)m(ewise,)49 b(the)44
-b(GeoLon)h(and)e(GeoLat)j(attributes)e(ha)m(v)m(e)h(b)s(een)f(remo)m(v)
-m(ed)h(from)e(the)h(Sp)s(ecF)-8 b(rame)227 3303 y(class.)45
-b(Both)32 b(classes)g(no)m(w)f(use)g(the)h(ObsLon)e(and)h(ObsLat)g
-(attributes)h(of)f(the)h(paren)m(t)f(F)-8 b(rame)33 b(class)227
-3416 y(instead.)81 b(Ho)m(w)m(ev)m(er,)50 b(the)43 b(old)h(attribute)h
-(names)e(can)h(b)s(e)f(used)g(as)h(synon)m(yms)f(for)h(ObsLat)f(and)227
-3529 y(ObsLon.)e(Also,)32 b(dumps)d(created)j(using)f(the)g(old)g(sc)m
-(heme)h(can)f(b)s(e)f(read)h(succesfully)g(b)m(y)g(AST)f(V4.1)227
-3642 y(and)g(con)m(v)m(erted)i(to)f(the)g(new)e(form.)111
-3829 y(7.)46 b(A)29 b(new)g(function)g(astMapSplit)h(has)f(b)s(een)f
-(added)g(to)i(the)g(Mapping)f(class.)41 b(This)28 b(splits)h(a)h
-(Mapping)227 3942 y(in)m(to)40 b(t)m(w)m(o)h(comp)s(onen)m(t)e
-(Mappings)g(whic)m(h,)i(when)e(com)m(bined)g(in)g(parallel,)j(are)e
-(equiv)-5 b(alen)m(t)40 b(to)g(the)227 4055 y(original)32
-b(Mapping.)111 4242 y(8.)46 b(The)24 b(default)g(v)-5
-b(alue)25 b(for)f(the)g(SkyRefIs)g(attribute)h(has)f(b)s(een)f(c)m
-(hanged)i(from)f(\\Origin")h(to)g(\\Ignored".)227 4355
-y(This)41 b(means)h(that)h(if)e(y)m(ou)i(w)m(an)m(t)f(to)h(use)f(a)g
-(SkyF)-8 b(rame)42 b(to)h(represen)m(t)f(o\013sets)g(from)g(some)g
-(origin)227 4467 y(p)s(osition,)31 b(y)m(ou)f(m)m(ust)g(no)m(w)g(set)h
-(the)f(SkyRefIs)f(attribute)i(explicitly)h(to)f(either)f(\\P)m(ole")j
-(or)d(\\Origin",)227 4580 y(in)g(addition)h(to)g(assigning)g(the)f
-(required)g(origin)h(p)s(osition)f(to)h(the)g(SkyRef)f(attribute.)0
-4873 y Fw(G.26)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V4.2)0
-5094 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 5207 y(v)m(ersions)31
-b(V4.1)g(and)f(V4.2:)111 5467 y(1.)46 b(The)41 b(SideBand)f(attribute)h
-(of)g(the)g(DSBSp)s(ecF)-8 b(rame)42 b(class)f(can)g(no)m(w)g(tak)m(e)h
-(the)f(option)h(\\LO")f(in)227 5580 y(addition)c(to)g(\\USB")g(and)e
-(\\LSB".)i(The)f(new)g(option)h(causes)f(the)h(DSBSp)s(ecF)-8
-b(rame)36 b(to)h(represen)m(t)227 5693 y(the)31 b(o\013set)g(from)f
-(the)h(lo)s(cal)g(oscillator)i(frequency)-8 b(,)31 b(rather)f(than)g
-(either)h(of)f(the)h(t)m(w)m(o)h(sidebands.)p eop end
-%%Page: 562 572
-TeXDict begin 562 571 bop 0 52 a FF(562)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FF(2.)46
-b(The)37 b(FitsChan)g(class)h(has)g(b)s(een)e(c)m(hanged)i(so)g(that)g
-(it)g(writes)f(out)h(a)g(VELOSYS)e(k)m(eyw)m(ord)h(when)227
-464 y(creating)k(a)e(FITS-W)m(CS)g(enco)s(ding)g(\(VELOSYS)f(indicates)
-h(the)h(top)s(o)s(cen)m(tric)g(apparen)m(t)f(v)m(elo)s(cit)m(y)227
-577 y(of)f(the)g(standard)f(of)h(rest\).)64 b(FitsChan)38
-b(also)g(strips)g(out)g(VELOSYS)e(k)m(eyw)m(ords)i(when)f(reading)h(a)
-227 690 y(F)-8 b(rameSet)32 b(from)e(a)g(FITS-W)m(CS)g(enco)s(ding.)111
-876 y(3.)46 b(The)27 b(FitsChan)g(class)h(has)f(a)g(new)g(metho)s(d)g
-(called)h(astRetainFits)i(that)d(indicates)i(that)e(the)h(curren)m(t)
-227 989 y(card)i(in)g(the)h(FitsChan)f(should)f(not)i(b)s(e)f(stripp)s
-(ed)e(out)j(of)f(the)h(FitsChan)f(when)f(an)h(AST)g(Ob)5
-b(ject)30 b(is)227 1101 y(read)k(from)g(the)h(FitsChan.)52
-b(Unless)34 b(this)g(metho)s(d)g(is)g(used,)h(all)g(cards)f(that)h(w)m
-(ere)f(in)m(v)m(olv)m(ed)i(in)e(the)227 1214 y(creation)e(of)f(the)f
-(AST)g(Ob)5 b(ject)30 b(will)h(b)s(e)f(stripp)s(ed)f(from)g(the)i
-(FitsChan)f(afte)i(a)e(read)h(op)s(eration.)111 1400
-y(4.)46 b(A)30 b(problem)e(with)h(unaligned)g(memory)g(access)i(that)f
-(could)f(cause)h(bus)e(errors)h(on)g(Solaris)g(has)g(b)s(een)227
-1513 y(\014xed.)111 1698 y(5.)46 b(A)32 b(new)f(read-only)g(attribute)i
-(called)f(Ob)5 b(jSize)31 b(has)g(b)s(een)g(added)g(to)h(the)f(base)h
-(Ob)5 b(ject)31 b(Class.)44 b(This)227 1811 y(giv)m(es)31
-b(the)e(n)m(um)m(b)s(er)f(of)h(b)m(ytes)g(of)h(memory)f(o)s(ccupied)f
-(b)m(y)h(the)h(Ob)5 b(ject.)40 b(Note,)31 b(this)e(is)g(the)g(size)h
-(of)f(the)227 1924 y(in)m(ternal)e(in-memory)g(represen)m(tation)g(of)g
-(the)f(Ob)5 b(ject,)28 b(not)f(the)f(size)i(of)e(the)h(textual)g
-(represen)m(tation)227 2037 y(pro)s(duced)i(b)m(y)h(writing)h(the)f(Ob)
-5 b(ject)31 b(out)f(through)g(a)h(Channel.)111 2223 y(6.)46
-b(A)39 b(new)f(function)g(astT)-8 b(une)38 b(has)g(b)s(een)g(added)g
-(whic)m(h)g(can)h(b)s(e)e(used)h(to)h(get)h(and)e(set)g(global)i(AST)
-227 2336 y(tuning)30 b(parameters.)41 b(A)m(t)31 b(the)g(momen)m(t)g
-(there)f(are)h(only)f(t)m(w)m(o)i(suc)m(h)e(parameter,)h(b)s(oth)f(of)g
-(whic)m(h)g(are)227 2449 y(concerned)h(with)f(memory)g(managemen)m(t)i
-(within)e(AST.)111 2634 y(7.)46 b(A)38 b(new)f(metho)s(d)g(called)i
-(astT)-8 b(ranGrid)38 b(has)f(b)s(een)g(added)g(to)h(the)g(Mapping)g
-(class.)63 b(This)37 b(metho)s(d)227 2747 y(creates)e(a)e(regular)h
-(grid)e(of)i(p)s(oin)m(ts)f(co)m(v)m(ering)i(a)e(rectangular)h(region)g
-(within)f(the)g(input)f(space)i(of)f(a)227 2860 y(Mapping,)39
-b(and)d(then)h(transforms)f(this)h(set)h(of)f(p)s(oin)m(ts)g(in)m(to)h
-(the)f(output)f(space)i(of)f(the)g(Mapping,)227 2973
-y(using)30 b(a)g(piecewise-con)m(tin)m(uous)i(linear)e(appro)m
-(ximation)h(to)f(the)g(Mapping)g(if)g(appropriate)f(in)h(order)227
-3086 y(to)h(ac)m(hiv)m(e)i(higher)d(sp)s(eed.)111 3272
-y(8.)46 b(A)34 b(new)f(sub)s(class)g(of)h(Mapping)f(has)h(b)s(een)f
-(added)g(called)i(Switc)m(hMap.)51 b(A)33 b(Switc)m(hMap)i(represen)m
-(ts)227 3384 y(sev)m(eral)g(alternate)g(Mappings,)g(eac)m(h)g(of)e
-(whic)m(h)h(is)f(used)g(to)h(transforms)f(input)g(p)s(ositions)g
-(within)g(a)227 3497 y(di\013eren)m(t)e(region)g(of)g(the)f(input)g(co)
-s(ordinate)h(space.)111 3683 y(9.)46 b(A)28 b(new)e(sub)s(class)h(of)g
-(Mapping)g(has)g(b)s(een)f(added)h(called)h(SelectorMap.)41
-b(A)28 b(SelectorMap)g(tests)g(eac)m(h)227 3796 y(input)33
-b(p)s(osition)h(to)h(see)f(if)g(it)g(falls)h(within)e(one)h(of)g(sev)m
-(eral)h(Regions.)52 b(If)34 b(it)g(do)s(es,)h(the)f(index)f(of)h(the)
-227 3909 y(Region)e(con)m(taining)f(the)g(input)e(p)s(osition)i(is)f
-(returned)g(as)g(the)h(Mapping)f(output.)66 4094 y(10.)46
-b(The)29 b(b)s(eha)m(viour)h(of)g(the)f(astCon)m(v)m(ert)j(metho)s(d)d
-(when)g(trying)g(to)i(align)f(a)g(CmpF)-8 b(rame)30 b(with)f(another)
-227 4207 y(F)-8 b(rame)26 b(has)f(b)s(een)g(mo)s(di\014ed.)38
-b(If)25 b(no)g(con)m(v)m(ersion)h(b)s(et)m(w)m(een)g(p)s(ositions)f(in)
-g(the)h(F)-8 b(rame)26 b(and)f(CmpF)-8 b(rame)227 4320
-y(can)29 b(b)s(e)f(found,)g(an)g(attempt)i(is)e(no)m(w)h(made)f(to)i
-(\014nd)d(a)i(con)m(v)m(ersion)g(b)s(et)m(w)m(een)g(the)g(F)-8
-b(rame)30 b(and)d(one)i(of)227 4433 y(t)m(w)m(o)k(comp)s(onen)m(t)e(F)
--8 b(rames)32 b(con)m(tained)g(within)e(the)h(CmpF)-8
-b(rame.)43 b(Th)m(us)30 b(is)h(should)f(no)m(w)h(b)s(e)f(p)s(ossible)
-227 4546 y(to)44 b(align)f(a)g(SkyF)-8 b(rame)43 b(with)g(a)g(CmpF)-8
-b(rame)42 b(con)m(taining)i(a)f(SkyF)-8 b(rame)43 b(and)f(a)h(Sp)s(ecF)
--8 b(rame)43 b(\(for)227 4659 y(instance\).)72 b(The)40
-b(returned)g(Mapping)g(pro)s(duces)f(bad)h(v)-5 b(alues)41
-b(for)g(the)f(extra)h(axes)h(\(i.e.)72 b(for)40 b(the)227
-4772 y(Sp)s(ecF)-8 b(rame)31 b(axis)g(in)f(the)g(ab)s(o)m(v)m(e)i
-(example\).)66 4957 y(11.)46 b(The)25 b(\\ast)p Fq(_)p
-FF(link)p Fq(_)p FF(adam")i(and)e(\\ast)p Fq(_)p FF(link")h(scripts)f
-(no)m(w)h(ignore)g(the)f Fq(-fsla)f FF(and)h Fq(-csla)f
-FF(options,)j(and)227 5070 y(alw)m(a)m(ys)32 b(link)e(against)i(the)f
-(minimal)f(cut-do)m(wn)h(v)m(ersion)g(of)f(SLALIB)g(distributed)f(as)i
-(part)f(of)h(AST.)0 5361 y Fw(G.27)112 b(Changes)39 b(In)m(tro)s(duced)
-f(in)f(V4.3)0 5580 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i
-(most)f(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g
-(the)g(AST)g(library)g(b)s(et)m(w)m(een)0 5693 y(v)m(ersions)31
-b(V4.2)g(and)f(V4.3:)p eop end
-%%Page: 563 573
-TeXDict begin 563 572 bop 0 52 a Fy(G.28)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V4.4)2249 b FF(563)111 351
-y(1.)46 b(The)32 b(astGetFitsS)j(function)d(no)m(w)g(strips)g(trailing)
-i(white)e(space)i(from)e(the)g(returned)g(string,)h(if)f(the)227
-464 y(original)g(string)e(con)m(tains)i(8)e(or)h(few)m(er)f(c)m
-(haracters)111 637 y(2.)46 b(The)d(Sp)s(ecF)-8 b(rame)44
-b(class)g(has)f(a)h(new)f(attribute)h(called)g(SourceSys)f(that)h(sp)s
-(eci\014ed)f(whether)f(the)227 750 y(SourceV)-8 b(el)38
-b(attribute)g(\(whic)m(h)f(sp)s(eci\014es)f(the)h(rest)h(frame)e(of)h
-(the)h(source\))f(should)f(b)s(e)g(accessed)i(as)227
-863 y(an)d(apparen)m(t)h(radial)f(v)m(elo)s(cit)m(y)j(or)d(a)h
-(redshift.)54 b(Note,)38 b(an)m(y)e(existing)g(soft)m(w)m(are)g(that)g
-(assumes)f(that)227 976 y(SourceV)-8 b(el)34 b(alw)m(a)m(ys)g(represen)
-m(ts)e(a)h(v)m(elo)s(cit)m(y)i(in)d(km/s)h(should)e(b)s(e)h(c)m(hanged)
-i(to)f(allo)m(w)h(for)e(the)h(p)s(ossi-)227 1089 y(bilit)m(y)f(of)e
-(SourceV)-8 b(el)32 b(represen)m(ting)e(a)h(redshift)f(v)-5
-b(alue.)0 1361 y Fw(G.28)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f
-(V4.4)0 1568 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 1680 y(v)m(ersions)31
-b(V4.3)g(and)f(V4.4:)111 1885 y(1.)46 b(The)33 b(astFindF)-8
-b(rame)34 b(function)e(can)i(no)m(w)e(b)s(e)h(used)f(to)h(searc)m(h)h
-(a)f(CmpF)-8 b(rame)33 b(for)g(an)f(instance)i(of)f(a)227
-1998 y(more)k(sp)s(ecialised)h(class)g(of)f(F)-8 b(rame)38
-b(\(SkyF)-8 b(rame,)40 b(TimeF)-8 b(rame,)40 b(Sp)s(ecF)-8
-b(rame,)39 b(DSBSp)s(ecF)-8 b(rame)37 b(or)227 2110 y(FluxF)-8
-b(rame\).)42 b(That)28 b(is,)h(if)g(an)f(instance)h(of)g(one)g(of)f
-(these)h(classes)h(is)e(used)g(as)h(the)g(\\template")h(when)227
-2223 y(calling)42 b(astFindF)-8 b(rame,)44 b(and)39 b(the)h(\\target")i
-(b)s(eing)e(searc)m(hed)g(is)g(a)h(CmpF)-8 b(rame)40
-b(\(or)g(a)g(F)-8 b(rameSet)227 2336 y(in)44 b(whic)m(h)g(the)g(curren)
-m(t)g(F)-8 b(rame)45 b(is)g(a)f(CmpF)-8 b(rame\),)48
-b(then)c(the)g(comp)s(onen)m(t)h(F)-8 b(rames)45 b(within)e(the)227
-2449 y(CmpF)-8 b(rame)28 b(will)g(b)s(e)e(searc)m(hed)i(for)g(an)f
-(instance)h(of)g(the)g(supplied)e(template)j(F)-8 b(rame,)29
-b(and,)f(if)g(found,)227 2562 y(a)36 b(suitable)f(Mapping)g(\(whic)m(h)
-h(will)f(include)g(a)g(P)m(ermMap)h(to)g(select)g(the)g(required)e
-(axes)i(from)e(the)227 2675 y(CmpF)-8 b(rame\))32 b(will)g(b)s(e)e
-(returned)g(b)m(y)i(astFindF)-8 b(rame.)44 b(Note,)34
-b(for)d(this)g(to)h(w)m(ork,)g(the)g(MaxAxes)g(and)227
-2788 y(MinAxes)38 b(attributes)g(of)f(the)h(template)g(F)-8
-b(rame)38 b(m)m(ust)g(b)s(e)e(set)i(so)f(that)h(they)g(co)m(v)m(er)h(a)
-e(range)h(that)227 2901 y(includes)30 b(the)h(n)m(um)m(b)s(er)e(of)h
-(axes)h(in)f(the)h(target)h(CmpF)-8 b(rame.)111 3074
-y(2.)46 b(The)23 b(SkyF)-8 b(rame,)26 b(Sp)s(ecF)-8 b(rame,)26
-b(DSBSp)s(ecF)-8 b(rame,)25 b(TimeF)-8 b(rame)25 b(and)e(FluxF)-8
-b(rame)25 b(classes)f(no)m(w)g(allo)m(w)227 3187 y(the)34
-b(MaxAxes)h(and)e(MinAxes)g(attributes)i(to)f(b)s(e)f(set)h(freely)g
-(to)g(an)m(y)g(v)-5 b(alue.)50 b(In)33 b(previous)g(v)m(ersions)227
-3300 y(of)f(AST,)g(an)m(y)g(attempt)h(to)g(c)m(hange)g(the)f(v)-5
-b(alue)32 b(of)g(MinAxes)h(or)e(MaxAxes)i(w)m(as)g(ignored,)f
-(resulting)227 3413 y(in)e(them)h(alw)m(a)m(ys)h(taking)f(the)f
-(default)h(v)-5 b(alues.)111 3586 y(3.)46 b(The)38 b(DSBSp)s(ecF)-8
-b(rame)40 b(class)f(has)f(a)h(new)g(attribute)g(called)h(AlignSB)f
-(that)g(sp)s(eci\014es)f(whether)g(or)227 3699 y(not)32
-b(to)g(tak)m(e)i(accoun)m(t)f(of)f(the)f(SideBand)g(attributes)i(when)d
-(aligning)j(t)m(w)m(o)g(DSBSp)s(ecF)-8 b(rames)32 b(using)227
-3811 y(astCon)m(v)m(ert.)111 3985 y(4.)46 b(The)28 b(F)-8
-b(rame)30 b(class)g(has)e(a)h(new)f(attribute)i(called)g(Dut1)f(that)h
-(can)f(b)s(e)f(used)g(to)h(store)g(a)h(v)-5 b(alue)29
-b(for)f(the)227 4097 y(di\013erence)j(b)s(et)m(w)m(een)g(the)g(UT1)f
-(and)g(UTC)g(timescales)i(at)f(the)g(ep)s(o)s(c)m(h)f(referred)g(to)h
-(b)m(y)f(the)g(F)-8 b(rame.)111 4271 y(5.)46 b(The)32
-b(n)m(um)m(b)s(er)f(of)h(digits)h(used)e(to)i(format)f(the)h(F)-8
-b(rame)33 b(attributes)f(ObsLat)g(and)f(ObsLon)g(has)h(b)s(een)227
-4383 y(increased.)111 4557 y(6.)46 b(The)32 b(use)h(of)g(the)g(SkyF)-8
-b(rame)33 b(attribute)g(AlignO\013set)h(has)e(b)s(een)g(c)m(hanged.)48
-b(This)32 b(attribute)i(is)e(used)227 4669 y(to)44 b(con)m(trol)g(ho)m
-(w)e(t)m(w)m(o)i(SkyF)-8 b(rames)43 b(are)g(aligned)g(b)m(y)f(astCon)m
-(v)m(ert.)79 b(If)42 b(the)h(template)h(and)e(target)227
-4782 y(SkyF)-8 b(rames)41 b(b)s(oth)e(ha)m(v)m(e)j(a)f(non-zero)f(v)-5
-b(alue)41 b(for)f(AlignO\013set,)k(then)c(alignmen)m(t)i(o)s(ccurs)e(b)
-s(et)m(w)m(een)227 4895 y(the)f(o\013set)i(co)s(ordinate)e(systems)g
-(\(that)h(is,)i(a)d(UnitMap)h(will)f(alw)m(a)m(ys)i(b)s(e)d(used)g(to)i
-(align)g(the)f(t)m(w)m(o)227 5008 y(SkyF)-8 b(rames\).)111
-5181 y(7.)46 b(The)29 b(Plot)h(class)g(has)f(a)h(new)f(attribute)h
-(called)g(F)-8 b(orceExterior)32 b(that)e(can)f(b)s(e)g(used)g(to)h
-(force)f(exterior)227 5294 y(\(rather)45 b(than)f(in)m(terior\))i(tic)m
-(k)g(marks)e(to)i(b)s(e)e(pro)s(duced.)81 b(By)45 b(default,)k
-(exterior)c(tic)m(ks)h(are)f(only)227 5407 y(pro)s(duced)29
-b(if)h(this)h(w)m(ould)f(result)g(in)g(more)h(than)f(3)g(tic)m(k)i
-(marks)e(b)s(eing)g(dra)m(wn.)111 5580 y(8.)46 b(The)40
-b(TimeF)-8 b(rame)40 b(class)h(no)m(w)f(supp)s(orts)d(con)m(v)m(ersion)
-42 b(b)s(et)m(w)m(een)e(angle)h(based)e(timescales)j(suc)m(h)d(as)227
-5693 y(UT1)31 b(and)f(atomic)i(based)e(timescales)i(suc)m(h)e(as)h
-(UTC.)p eop end
-%%Page: 564 574
-TeXDict begin 564 573 bop 0 52 a FF(564)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)0 351 y Fw(G.29)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V4.5)0 576 y FF(The)31
-b(follo)m(wing)h(describ)s(es)f(the)g(most)h(signi\014can)m(t)g(c)m
-(hanges)g(that)g(o)s(ccurred)e(in)h(the)h(AST)e(library)h(b)s(et)m(w)m
-(een)0 689 y(v)m(ersions)g(V4.4)g(and)f(V4.5:)111 959
-y(1.)46 b(All)28 b(FITS-CLASS)d(headers)i(are)g(no)m(w)g(created)h
-(with)e(a)i(frequency)e(axis.)40 b(If)27 b(the)g(F)-8
-b(rameSet)28 b(supplied)227 1072 y(to)e(astW)-8 b(rite)27
-b(con)m(tains)f(a)g(v)m(elo)s(cit)m(y)h(axis)f(\(or)f(an)m(y)g(other)h
-(form)e(of)h(sp)s(ectral)h(axis\))g(it)f(will)h(b)s(e)e(con)m(v)m
-(erted)227 1185 y(to)31 b(an)g(equiv)-5 b(alen)m(t)31
-b(frequency)f(axis)h(b)s(efore)f(b)s(eing)g(used)g(to)h(create)h(the)e
-(FITS-CLASS)f(header.)111 1378 y(2.)46 b(The)32 b(v)-5
-b(alue)33 b(stored)f(in)g(the)h(FITS-CLASS)d(k)m(eyw)m(ord)j
-(\\VELO-LSR")f(has)g(b)s(een)g(c)m(hanged)g(from)g(the)227
-1491 y(v)m(elo)s(cit)m(y)h(of)e(the)f(source)h(to)g(the)f(v)m(elo)s
-(cit)m(y)j(of)e(the)f(reference)h(c)m(hannel.)111 1683
-y(3.)46 b(Addition)27 b(of)f(a)h(new)f(metho)s(d)f(call)j(astPurgeW)m
-(CS)f(to)g(the)f(FitsChan)h(class.)40 b(This)25 b(metho)s(d)h(remo)m(v)
-m(es)227 1796 y(all)32 b(W)m(CS-related)f(header)f(cards)h(from)e(a)i
-(FitsChan.)111 1989 y(4.)46 b(The)37 b(Plot)h(class)h(has)e(a)h(new)e
-(attribute)j(called)f(GrfCon)m(text)g(that)g(can)g(b)s(e)f(used)f(to)j
-(comminicate)227 2102 y(con)m(text)27 b(information)e(b)s(et)m(w)m(een)
-h(an)f(application)h(and)f(an)m(y)g(graphics)g(functions)g(registered)h
-(with)e(the)227 2215 y(Plot)32 b(class)f(via)g(the)f(astGrfSet)h
-(function.)111 2407 y(5.)46 b(F)-8 b(unctions)40 b(registered)g(with)f
-(the)h(Plot)g(class)g(using)f(astGrfSet)h(no)m(w)f(tak)m(e)i(a)e(new)g
-(additional)h(in-)227 2520 y(teger)d(parameter,)g(\\grfcon".)58
-b(The)34 b(Plot)j(class)f(sets)g(this)f(parameter)h(to)h(the)e(v)-5
-b(alue)36 b(of)g(the)f(Plot's)227 2633 y(GrfCon)m(text)29
-b(attribute)f(b)s(efore)f(calling)i(the)f(graphics)f(function.)40
-b(NOTE,)27 b(THIS)g(CHANGE)h(WILL)227 2746 y(REQUIRE)23
-b(EXISTING)g(CODE)g(THA)-8 b(T)23 b(USES)f(astGrfSet)i(TO)f(BE)h
-(MODIFIED)g(TO)f(INCLUDE)227 2859 y(THE)30 b(NEW)h(P)-8
-b(ARAMETER.)111 3052 y(6.)46 b(The)32 b(astRebinSeq)h(functions)f(no)m
-(w)g(ha)m(v)m(e)i(an)f(extra)g(parameter)g(that)g(is)g(used)e(to)j
-(record)e(the)h(total)227 3164 y(n)m(um)m(b)s(er)g(of)h(input)f(data)i
-(v)-5 b(alues)35 b(added)e(in)m(to)i(the)f(output)g(arra)m(y)-8
-b(.)53 b(This)33 b(is)h(necessary)h(to)g(correct)g(a)227
-3277 y(\015a)m(w)h(in)f(the)g(calculation)j(of)d(output)g(v)-5
-b(ariances)36 b(based)f(on)g(the)h(spread)e(of)i(input)e(v)-5
-b(alues.)56 b(NOTE,)227 3390 y(THIS)24 b(CHANGE)g(WILL)g(REQUIRE)g
-(EXISTING)f(CODE)h(TO)g(BE)g(MODIFIED)h(TO)f(INCLUDE)227
-3503 y(THE)30 b(NEW)h(P)-8 b(ARAMETER)31 b(\(CALLED)f("NUSED"\).)111
-3696 y(7.)46 b(Supp)s(ort)29 b(has)h(b)s(een)f(added)h(for)g(the)h
-(FITS-W)m(CS)f(\\HPX")h(\(HEALPix\))g(pro)5 b(jection.)111
-3889 y(8.)46 b(A)39 b(new)f(\015ag)g(\\AST)p Fq(__)p
-FF(V)-10 b(AR)g(W)m(GT")40 b(can)e(b)s(e)g(supplied)f(to)i
-(astRebinSeq.)65 b(This)38 b(causes)h(the)f(input)227
-4001 y(data)31 b(v)-5 b(alues)31 b(to)g(b)s(e)f(w)m(eigh)m(ted)i(using)
-e(the)g(recipro)s(cals)h(of)g(the)f(input)g(v)-5 b(ariances)31
-b(\(if)g(supplied\).)111 4194 y(9.)46 b(The)20 b(F)-8
-b(rame)22 b(class)f(has)f(a)h(new)f(read-only)h(attribute)h(called)f
-(NormUnit)g(that)g(returns)f(the)g(normalised)227 4307
-y(v)-5 b(alue)29 b(of)e(the)h(Unit)g(attribute)h(for)f(an)f(axis.)41
-b(Here,)29 b(\\normalisation")g(means)f(cancelling)i(redundan)m(t)227
-4420 y(units,)f(etc.)41 b(So)29 b(for)f(instance,)i(a)g(Unit)f(v)-5
-b(alue)29 b(of)g(\\s*\(m/s\)")h(w)m(ould)f(result)g(in)f(a)h(NormUnit)g
-(v)-5 b(alue)29 b(of)227 4533 y(\\m".)66 4725 y(10.)46
-b(A)34 b(new)f(function)g(astSho)m(wMesh)h(has)g(b)s(een)e(added)h(to)i
-(the)e(Region)i(class.)51 b(It)34 b(displa)m(ys)f(a)h(mesh)f(of)227
-4838 y(p)s(oin)m(ts)h(co)m(v)m(ering)h(the)f(surface)g(of)g(a)g(Region)
-g(b)m(y)g(writing)f(out)h(a)g(table)h(of)f(axis)g(v)-5
-b(alues)34 b(to)g(standard)227 4951 y(output.)66 5144
-y(11.)46 b(The)26 b(Plot)g(class)h(no)m(w)e(honours)g(the)h(v)-5
-b(alue)26 b(of)g(the)g(Lab)s(elUp)f(attribute)i(ev)m(en)f(if)g(n)m
-(umerical)g(lab)s(els)g(are)227 5257 y(placed)33 b(around)e(the)h(edge)
-h(of)g(the)f(Plot.)47 b(Previously)32 b(Lab)s(elUp)g(w)m(as)g(only)h
-(used)e(if)h(the)h(lab)s(els)f(w)m(ere)227 5370 y(dra)m(wn)f(within)g
-(the)h(in)m(terior)g(of)g(the)f(plot.)45 b(The)31 b(Lab)s(elUp)g
-(attribute)h(con)m(trols)h(whether)e(n)m(umerical)227
-5483 y(lab)s(els)g(are)g(dra)m(wn)e(horizon)m(tally)j(or)f(parallel)g
-(to)g(the)g(axis)g(they)f(describ)s(e.)66 5675 y(12.)46
-b(A)31 b(bug)f(has)g(b)s(een)f(\014xed)h(that)h(could)f(segmen)m
-(tation)j(violations)f(when)d(setting)j(attribute)f(v)-5
-b(alues.)p eop end
-%%Page: 565 575
-TeXDict begin 565 574 bop 0 52 a Fy(G.30)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V4.6)2249 b FF(565)0 351 y
-Fw(G.30)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V4.6)0
-571 y FF(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h(signi\014can)
-m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g
-(AST)g(library)0 684 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V4.5)g(and)f
-(V4.6:)111 940 y(1.)46 b(The)33 b(TimeF)-8 b(rame)35
-b(class)g(no)m(w)e(supp)s(ort)f(Lo)s(cal)j(Time)e(as)h(a)g(time)h
-(scale.)52 b(The)33 b(o\013set)h(from)g(UTC)f(to)227
-1052 y(Lo)s(cal)e(Time)g(is)f(sp)s(eci\014ed)g(b)m(y)g(a)h(new)f(TimeF)
--8 b(rame)31 b(attribute)g(called)h(L)-8 b(TO\013set.)111
-1238 y(2.)46 b(A)39 b(new)e(class)j(called)f(Plot3D)h(has)e(b)s(een)g
-(added.)64 b(The)37 b(Plot3D)j(class)f(allo)m(ws)h(the)f(creation)g(of)
-g(3-)227 1351 y(dimensional)31 b(annotated)g(co)s(ordinate)g(grids.)111
-1537 y(3.)46 b(A)34 b(correction)h(for)f(diurnal)e(ab)s(erration)i(is)g
-(no)m(w)g(included)e(when)h(con)m(v)m(erting)j(b)s(et)m(w)m(een)e(AZEL)
-f(and)227 1650 y(other)39 b(celestial)i(co)s(ordinate)f(systems.)65
-b(The)38 b(correction)i(is)e(based)g(on)h(the)f(v)-5
-b(alue)39 b(of)g(the)g(ObsLat)227 1763 y(F)-8 b(rame)32
-b(attribute)f(\(the)g(geo)s(detic)h(latitude)f(of)g(the)f(observ)m
-(er\).)111 1949 y(4.)46 b(A)35 b(bug)g(has)g(b)s(een)f(\014xed)h(whic)m
-(h)f(caused)i(the)f(DUT1)h(attribute)f(to)h(b)s(e)f(ignored)g(b)m(y)g
-(the)g(SkyF)-8 b(rame)227 2062 y(class)31 b(when)f(\014nding)f(con)m(v)
-m(ersions)i(b)s(et)m(w)m(een)g(AZEL)f(and)g(other)g(celestial)j(co)s
-(ordinate)f(systems.)0 2353 y Fw(G.31)112 b(Changes)39
-b(In)m(tro)s(duced)f(in)f(V5.0)0 2572 y FF(The)26 b(follo)m(wing)i
-(describ)s(es)d(the)i(most)f(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f
-(o)s(ccurred)g(in)g(the)g(AST)g(library)g(b)s(et)m(w)m(een)0
-2685 y(v)m(ersions)31 b(V4.6)g(and)f(V5.0:)111 2941 y(1.)46
-b(The)23 b(AST)f(library)g(is)h(no)m(w)g(thread-safe)g(\(assuming)g
-(that)h(the)f(POSIX)f(pthreads)g(library)g(is)h(a)m(v)-5
-b(ailable)227 3054 y(when)29 b(AST)h(is)g(built\).)40
-b(Man)m(y)31 b(of)f(the)g(macros)h(de\014ned)e(in)g(the)i(ast.h)f
-(header)g(\014le)g(ha)m(v)m(e)h(c)m(hanged.)41 b(It)227
-3167 y(is)31 b(therefore)g(necessary)f(to)h(re-compile)h(all)f(source)g
-(co)s(de)f(that)h(includes)f(ast.h.)111 3353 y(2.)46
-b(New)31 b(metho)s(ds)f(astLo)s(c)m(k)i(and)e(astUnlo)s(c)m(k)j(allo)m
-(w)f(an)e(AST)g(Ob)5 b(ject)31 b(to)h(b)s(e)e(lo)s(c)m(k)m(ed)i(for)f
-(exclusiv)m(e)h(use)227 3466 y(b)m(y)f(a)f(thread.)111
-3652 y(3.)46 b(The)33 b(TimeF)-8 b(rame)35 b(class)g(no)m(w)e(supp)s
-(ort)f(Lo)s(cal)j(Time)e(as)h(a)g(time)h(scale.)52 b(The)33
-b(o\013set)h(from)g(UTC)f(to)227 3765 y(Lo)s(cal)e(Time)g(is)f(sp)s
-(eci\014ed)g(b)m(y)g(a)h(new)f(TimeF)-8 b(rame)31 b(attribute)g(called)
-h(L)-8 b(TO\013set.)111 3951 y(4.)46 b(The)23 b(Channel)g(class)h(has)f
-(a)h(new)e(attribute)i(called)h(Strict)f(whic)m(h)f(con)m(trols)h
-(whether)f(or)g(not)h(to)g(rep)s(ort)227 4063 y(an)31
-b(error)f(if)h(unexp)s(ected)g(data)g(items)g(are)h(found)d(within)i
-(an)f(AST)g(Ob)5 b(ject)31 b(description)g(read)g(from)227
-4176 y(an)39 b(external)h(data)f(source.)66 b(Note,)43
-b(the)c(default)g(b)s(eha)m(viour)f(is)h(no)m(w)g(not)g(to)g(rep)s(ort)
-f(suc)m(h)h(errors.)227 4289 y(This)32 b(di\013ers)g(from)g(previous)g
-(v)m(ersions)g(of)h(AST)f(whic)m(h)g(alw)m(a)m(ys)i(rep)s(orted)d(an)i
-(error)f(is)g(unexp)s(ected)227 4402 y(input)e(items)h(w)m(ere)f
-(encoun)m(tered.)0 4693 y Fw(G.32)112 b(Changes)39 b(In)m(tro)s(duced)f
-(in)f(V5.1)0 4913 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i
-(most)f(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g
-(the)g(AST)g(library)g(b)s(et)m(w)m(een)0 5026 y(v)m(ersions)31
-b(V5.0)g(and)f(V5.1:)111 5281 y(1.)46 b(The)27 b(astUnlo)s(c)m(k)i
-(function)e(no)m(w)g(has)g(an)h(extra)g(parameter)f(that)h(con)m(trols)
-h(whether)e(or)g(not)h(an)f(error)227 5394 y(is)k(rep)s(orted)e(if)i
-(the)f(Ob)5 b(ject)31 b(is)f(curren)m(tly)h(lo)s(c)m(k)m(ed)g(b)m(y)g
-(another)f(thread.)111 5580 y(2.)46 b(The)33 b(Prism)f(class)h(has)g(b)
-s(een)f(mo)s(di\014ed)f(so)i(that)g(an)m(y)h(class)f(of)g(Region)h(can)
-f(b)s(e)f(used)g(to)h(de\014ne)f(the)227 5693 y(extrusion)e(axes.)42
-b(Previously)-8 b(,)31 b(only)f(a)h(Bo)m(x)h(or)e(In)m(terv)-5
-b(al)31 b(could)g(b)s(e)e(used)h(for)g(this)g(purp)s(ose.)p
-eop end
-%%Page: 566 576
-TeXDict begin 566 575 bop 0 52 a FF(566)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FF(3.)46
-b(The)25 b(v)-5 b(alues)26 b(of)f(the)h(AST)p Fq(__)p
-FF(THREADSAFE)e(macro)i(\(de\014ned)e(in)h(ast.h\))h(ha)m(v)m(e)g(b)s
-(een)f(c)m(hanged)h(from)227 464 y(\\y)m(es")32 b(and)e(\\no")h(to)g
-(\\1")h(and)e(\\0".)111 664 y(4.)46 b(Impro)m(v)m(emen)m(ts)32
-b(ha)m(v)m(e)h(b)s(een)d(made)i(to)g(the)f(w)m(a)m(y)h(that)g(Prisms)f
-(are)g(simpli\014ed)g(when)f(astSimplify)h(is)227 777
-y(called.)42 b(The)29 b(c)m(hanges)i(mean)f(that)h(more)f(t)m(yp)s(es)g
-(of)g(Prism)f(will)i(no)m(w)e(simplify)h(in)m(to)h(a)f(simpler)g(class)
-227 890 y(of)h(Region.)111 1090 y(5.)46 b(The)39 b(P)m(oin)m(tList)j
-(class)e(has)f(a)i(new)e(metho)s(d,)i(astP)m(oin)m(ts,)j(that)d(copies)
-f(the)g(axis)g(v)-5 b(alues)40 b(from)f(the)227 1203
-y(P)m(oin)m(tList)32 b(in)m(to)g(a)e(supplied)f(arra)m(y)-8
-b(.)111 1403 y(6.)46 b(The)38 b(P)m(oin)m(tList)h(class)g(has)f(a)g
-(new)g(\(read-only\))h(attribute,)i(ListSize,)g(that)d(giv)m(es)h(the)g
-(n)m(um)m(b)s(er)d(of)227 1516 y(p)s(oin)m(ts)31 b(stored)f(in)g(the)h
-(P)m(oin)m(tList.)111 1716 y(7.)46 b(The)34 b(handling)g(of)g(w)m
-(arnings)g(within)f(di\013eren)m(t)i(classes)g(of)g(Channel)e(has)h(b)s
-(een)f(rationalised.)54 b(The)227 1829 y(XmlStrict)24
-b(attribute)g(and)e(astXmlW)-8 b(arnings)24 b(function)f(ha)m(v)m(e)h
-(b)s(een)e(remo)m(v)m(ed.)40 b(The)22 b(same)h(function-)227
-1942 y(alit)m(y)29 b(is)e(no)m(w)g(a)m(v)-5 b(ailable)29
-b(via)e(the)h(existing)f(Strict)h(attribute)f(\(whic)m(h)g(has)g(had)f
-(its)i(remit)f(widened\),)g(a)227 2055 y(new)32 b(attribute)i(called)g
-(Rep)s(ortLev)m(el,)g(and)e(the)h(new)f(astW)-8 b(arnings)34
-b(function.)47 b(This)32 b(new)g(function)227 2168 y(can)g(b)s(e)e
-(used)g(on)h(an)m(y)g(class)h(of)f(Channel.)42 b(T)-8
-b(eh)31 b(FitsChan)g(class)h(retains)f(its)h(long)f(standing)g(abilit)m
-(y)227 2280 y(to)38 b(store)f(w)m(arnings)f(as)h(header)g(cards)f
-(within)h(the)g(FitsChan,)h(but)e(it)h(also)h(no)m(w)f(stores)g(w)m
-(arnings)227 2393 y(in)30 b(the)g(paren)m(t)g(Channel)f(structure,)g
-(from)h(where)f(they)h(can)g(b)s(e)f(retriev)m(ed)i(using)e(the)h(astW)
--8 b(arnings)227 2506 y(function.)111 2706 y(8.)46 b(A)27
-b(new)g(function)g(called)h(astIn)m(tercept)h(has)e(b)s(een)f(added)g
-(to)i(the)g(F)-8 b(rame)28 b(class.)40 b(This)26 b(function)h(\014nds)
-227 2819 y(the)k(p)s(oin)m(t)f(of)h(in)m(tersection)h(b)s(eteeen)f(t)m
-(w)m(o)g(geo)s(desic)h(curv)m(es.)111 3019 y(9.)46 b(A)34
-b(bug)f(in)h(the)g(t)m(yp)s(e-c)m(hec)m(king)i(of)e(Ob)5
-b(jects)34 b(passed)f(as)h(argumen)m(ts)h(to)f(constructor)g(functions)
-g(has)227 3132 y(b)s(een)e(\014xed.)48 b(This)32 b(bug)g(could)h(lead)g
-(to)g(applications)h(crashing)f(or)g(sho)m(wing)g(strange)g(b)s(eha)m
-(viour)f(if)227 3245 y(an)f(inappropriate)f(class)h(of)f(Ob)5
-b(ject)31 b(w)m(as)g(supplied)e(as)h(an)h(argumen)m(t)f(to)i(a)e
-(constructor.)66 3445 y(10.)46 b(The)27 b(astPic)m(kAxes)j(function)d
-(will)h(no)m(w)f(return)f(a)i(Region,)h(if)f(p)s(ossible,)g(when)e
-(applied)h(to)h(a)g(Region.)227 3558 y(If)i(this)g(is)h(not)f(p)s
-(ossible,)h(a)f(F)-8 b(rame)32 b(will)e(b)s(e)g(returned)f(as)i(b)s
-(efore.)66 3758 y(11.)46 b(The)34 b(default)h(gap)g(size)g(b)s(et)m(w)m
-(een)h(the)e(ISO)g(date/time)i(lab)s(els)f(used)f(b)m(y)g(the)h(Plot)h
-(class)f(when)f(dis-)227 3871 y(pla)m(ying)d(an)f(annotated)h(axis)f
-(describ)s(ed)f(b)m(y)h(a)g(TimeF)-8 b(rame)31 b(has)f(b)s(een)f(c)m
-(hanged.)42 b(The)29 b(c)m(hanges)i(are)227 3984 y(mean)m(t)i(to)g
-(impro)m(v)m(e)g(the)g(lab)s(elling)g(of)f(calendar)h(time)g(axes)g
-(that)f(span)g(in)m(terv)-5 b(als)33 b(from)f(a)h(da)m(y)f(to)h(a)227
-4097 y(few)d(y)m(ears.)66 4297 y(12.)46 b(A)37 b(new)e(function)h
-(called)i(astT)-8 b(estFits)38 b(has)e(b)s(een)g(added)f(to)i(the)g
-(FitsChan)f(class.)59 b(This)36 b(function)227 4410 y(tests)31
-b(a)g(FitsChan)f(to)i(see)e(if)h(it)g(con)m(tains)g(a)g(de\014ned)e(v)
--5 b(alue)31 b(for)f(sp)s(eci\014ed)g(FITS)f(k)m(eyw)m(ord.)66
-4610 y(13.)46 b(The)26 b(AST)p Fq(__)p FF(UNDEF<X>)g(parameters)h(used)
-e(to)i(\015ag)g(unde\014ned)d(FITS)h(k)m(eyw)m(ord)i(v)-5
-b(alues)27 b(ha)m(v)m(e)g(b)s(een)227 4723 y(remo)m(v)m(ed.)42
-b(Use)31 b(the)f(new)g(astT)-8 b(estFits)33 b(function)d(instead.)66
-4923 y(14.)46 b(The)34 b(astIsUndef<X>)g(functions)g(used)g(to)h(test)g
-(FITS)e(k)m(eyw)m(ord)i(v)-5 b(alues)35 b(ha)m(v)m(e)g(b)s(een)f(remo)m
-(v)m(ed.)53 b(Use)227 5035 y(the)31 b(new)f(astT)-8 b(estFits)32
-b(function)e(instead.)0 5350 y Fw(G.33)112 b(Changes)39
-b(In)m(tro)s(duced)f(in)f(V5.2)0 5580 y FF(The)26 b(follo)m(wing)i
-(describ)s(es)d(the)i(most)f(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f
-(o)s(ccurred)g(in)g(the)g(AST)g(library)g(b)s(et)m(w)m(een)0
-5693 y(v)m(ersions)31 b(V5.1)g(and)f(V5.2:)p eop end
-%%Page: 567 577
-TeXDict begin 567 576 bop 0 52 a Fy(G.34)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V5.3)2249 b FF(567)111 351
-y(1.)46 b(A)26 b(new)f(metho)s(d)g(called)i(astSetFitsCM)g(has)f(b)s
-(een)e(added)h(to)i(the)e(FitsChan)h(class.)40 b(It)25
-b(stores)i(a)f(pure)227 464 y(commen)m(t)32 b(card)e(in)g(a)h(FitsChan)
-f(\(that)h(is,)g(a)g(card)f(with)g(no)g(k)m(eyw)m(ord)h(name)g(or)f
-(equals)h(sign\).)111 650 y(2.)46 b(A)29 b(new)f(attribute)h(called)h
-(ObsAlt)e(has)h(b)s(een)f(added)g(to)h(the)g(F)-8 b(rame)29
-b(class.)41 b(It)29 b(records)f(the)h(geo)s(detic)227
-763 y(altitude)35 b(of)f(the)g(observ)m(er,)h(in)f(metres.)51
-b(It)34 b(defaults)g(to)g(zero.)52 b(It)34 b(is)g(used)f(when)f(con)m
-(v)m(erting)k(times)227 876 y(to)31 b(or)e(from)h(the)f(TDB)h
-(timescale,)j(or)c(con)m(v)m(erting)j(sp)s(ectral)e(p)s(ositions)f(to)i
-(or)e(from)g(the)h(top)s(o)s(cen)m(tric)227 989 y(rest)d(frame,)g(or)f
-(con)m(v)m(erting)i(sky)e(p)s(ositions)g(to)h(or)f(from)g(horizon)g(co)
-s(ordinates.)40 b(The)26 b(FitsChan)g(class)227 1101
-y(will)g(include)f(its)g(e\013ect)i(when)d(creating)i(a)g(set)g(of)f(v)
--5 b(alues)25 b(for)g(the)h(OBSGEO-X/Y/Z)f(k)m(eyw)m(ords,)i(and)227
-1214 y(will)j(also)h(assign)f(a)f(v)-5 b(alue)31 b(to)f(it)g(when)e
-(reading)i(a)g(set)g(of)g(OBSGEO-X/Y/Z)g(k)m(eyw)m(ord)g(v)-5
-b(alues)30 b(from)227 1327 y(a)h(FITS)f(header.)111 1513
-y(3.)46 b(The)21 b(TimeMap)g(con)m(v)m(ersions)h(\\TTTOTDB")f(and)g
-(\\TDBTOTT",)g(and)f(the)i(Sp)s(ecMap)e(con)m(v)m(ersions)227
-1626 y(\\TPF2HL")38 b(and)e(\\HLF2TP",)i(no)m(w)f(ha)m(v)m(e)g(an)g
-(additional)g(argumen)m(t)g(-)g(the)g(observ)m(er's)g(geo)s(detic)227
-1739 y(altitude.)111 1924 y(4.)46 b(The)29 b(P)m(olygon)h(class)f(has)g
-(b)s(een)f(mo)s(di\014ed)f(to)j(mak)m(e)g(it)f(consisten)m(t)h(with)f
-(the)g(IV)m(O)m(A)g(STC)f(de\014nition)227 2037 y(of)j(a)h(P)m(olygon.)
-44 b(Sp)s(eci\014cally)-8 b(,)32 b(the)f(inside)g(of)g(a)g(p)s(olygon)g
-(is)g(no)m(w)g(the)g(area)h(to)g(the)f(left)h(of)f(eac)m(h)h(edge)227
-2150 y(as)k(the)f(v)m(ertices)i(are)f(tra)m(v)m(ersed)g(in)f(an)g(an)m
-(ti-clo)s(c)m(kwise)k(manner,)d(as)f(seen)h(from)e(the)i(inside)f(of)g
-(the)227 2263 y(celestial)c(sphere.)39 b(Previously)-8
-b(,)30 b(AST)d(used)h(the)h(an)m(ti-clo)s(c)m(kwise)i(con)m(v)m(en)m
-(tion,)g(but)d(view)m(ed)g(from)g(the)227 2376 y(outside)39
-b(of)g(the)g(celestial)i(sphere)d(instead)h(of)g(the)g(inside.)65
-b(An)m(y)39 b(P)m(olygon)h(sa)m(v)m(ed)g(using)e(previous)227
-2489 y(v)m(ersions)31 b(of)g(AST)e(will)i(b)s(e)f(iden)m(ti\014ed)g
-(and)g(negated)h(automatically)i(when)d(read)g(b)m(y)g(AST)g(V5.2.)111
-2674 y(5.)46 b(A)24 b(new)g(class)g(of)g(Channel,)h(called)g(StcsChan,)
-g(has)f(b)s(een)f(added)g(that)h(allo)m(ws)i(con)m(v)m(ersion)f(of)f
-(suitable)227 2787 y(AST)30 b(Ob)5 b(jects)30 b(to)h(and)f(from)g(IV)m
-(O)m(A)h(STC-S)e(format.)111 2973 y(6.)46 b(A)26 b(new)g(metho)s(d)g
-(called)h(astRemo)m(v)m(eRegions)i(has)d(b)s(een)g(added)f(to)i(the)f
-(Mapping)g(class.)40 b(It)27 b(searc)m(hes)227 3086 y(a)37
-b(\(p)s(ossibly)g(comp)s(ound\))e(Mapping)i(\(or)g(F)-8
-b(rame\))39 b(for)d(an)m(y)h(instances)h(of)f(the)g(AST)f(Region)h
-(class,)227 3199 y(and)30 b(either)g(remo)m(v)m(es)h(them,)f(or)g
-(replaces)h(them)f(with)g(UnitMaps)g(\(or)g(equiv)-5
-b(alen)m(t)31 b(F)-8 b(rames\).)42 b(It)30 b(can)227
-3312 y(b)s(e)g(used)g(to)h(remo)m(v)m(e)h(the)e(masking)h(e\013ects)g
-(of)g(Regions)g(from)f(a)h(comp)s(ound)e(Mapping)h(or)g(F)-8
-b(rame.)111 3497 y(7.)46 b(A)39 b(new)e(metho)s(d)h(called)h(astDo)m
-(wnsize)h(has)e(b)s(een)g(added)f(to)i(the)g(P)m(olygon)g(class.)65
-b(It)38 b(pro)s(duces)f(a)227 3610 y(new)29 b(P)m(olygon)i(that)f(con)m
-(tains)g(a)g(subset)f(of)g(the)h(v)m(ertices)h(in)e(the)g(supplied)f(P)
-m(olygon.)42 b(The)29 b(subset)f(is)227 3723 y(c)m(hosen)34
-b(to)g(retain)g(the)g(main)f(features)h(of)f(the)h(supplied)e(P)m
-(olygion,)k(in)d(so)h(far)f(as)g(that)h(is)g(p)s(ossible,)227
-3836 y(within)c(sp)s(eci\014ed)g(constrain)m(ts.)111
-4022 y(8.)46 b(A)38 b(new)g(constructor)g(called)h(astOutline)f(has)g
-(b)s(een)f(added)g(to)i(the)f(P)m(olygon)h(class.)64
-b(Giv)m(en)38 b(a)h(2D)227 4135 y(data)c(arra)m(y)-8
-b(,)36 b(it)e(iden)m(ti\014es)h(the)f(b)s(oundary)e(of)i(a)g(region)h
-(within)e(the)h(arra)m(y)h(that)f(holds)g(pixels)g(with)227
-4248 y(sp)s(eci\014ed)h(v)-5 b(alues.)57 b(It)36 b(then)f(creates)j(a)e
-(new)f(P)m(olygon)i(to)f(describ)s(e)f(this)h(b)s(oundary)e(to)i(a)g
-(sp)s(eci\014ed)227 4360 y(accuracy)-8 b(.)111 4546 y(9.)46
-b(A)36 b(new)f(set)h(of)g(metho)s(ds,)h(called)g(astMapGetElem<X>)h
-(has)d(b)s(een)g(added)g(to)i(the)e(KeyMap)h(class.)227
-4659 y(They)30 b(allo)m(w)i(a)f(single)g(elemen)m(t)h(of)e(a)h(v)m
-(ector)h(v)-5 b(alued)30 b(en)m(try)h(to)g(b)s(e)f(returned.)66
-4845 y(10.)46 b(A)24 b(new)f(attribute)h(called)h(KeyError)e(has)g(b)s
-(een)g(added)f(to)j(the)e(KeyMap)h(Class.)39 b(It)23
-b(con)m(trols)i(whether)227 4957 y(the)36 b(astMapGet...)60
-b(family)36 b(of)g(functions)f(rep)s(ort)g(an)h(error)f(if)h(an)g(en)m
-(try)g(with)f(the)h(requested)g(k)m(ey)227 5070 y(do)s(es)30
-b(not)h(exist)g(in)f(the)h(KeyMap.)0 5361 y Fw(G.34)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V5.3)0 5580 y
-FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f(signi\014can)m
-(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g(AST)g(library)g
-(b)s(et)m(w)m(een)0 5693 y(v)m(ersions)31 b(V5.2)g(and)f(V5.3:)p
-eop end
-%%Page: 568 578
-TeXDict begin 568 577 bop 0 52 a FF(568)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FF(1.)46
-b(The)e(details)h(of)g(ho)m(w)f(a)g(F)-8 b(rame)46 b(is)e(aligned)h
-(with)f(another)g(F)-8 b(rame)45 b(b)m(y)f(the)h(astFindF)-8
-b(rame)45 b(and)227 464 y(astCon)m(v)m(ert)40 b(functions)e(ha)m(v)m(e)
-i(b)s(een)d(c)m(hanged.)66 b(The)37 b(c)m(hanges)j(mean)e(that)h(a)g(F)
--8 b(rame)39 b(can)g(no)m(w)f(b)s(e)227 577 y(aligned)d(with)g(an)f
-(instance)h(of)g(a)f(sub-class)h(of)f(F)-8 b(rame,)37
-b(so)d(long)h(as)g(the)g(n)m(um)m(b)s(er)e(of)h(axes)h(and)f(the)227
-690 y(Domain)40 b(v)-5 b(alues)39 b(are)g(consisten)m(t.)66
-b(F)-8 b(or)40 b(instance,)h(a)e(basic)g(2-dimensional)h(F)-8
-b(rame)39 b(with)g(Domain)227 803 y(\\SKY")d(will)h(no)m(w)e(align)i
-(succesfully)f(with)g(a)g(SkyF)-8 b(rame,)38 b(con)m(v)m(ersion)f(b)s
-(et)m(w)m(een)f(the)g(t)m(w)m(o)i(F)-8 b(rames)227 916
-y(b)s(eing)30 b(ac)m(hiev)m(ed)i(using)e(a)h(UnitMap.)111
-1103 y(2.)46 b(The)30 b(arra)m(ys)h(that)g(supply)e(input)g(v)-5
-b(alues)31 b(for)f(astMapPut1<X>)i(are)f(no)m(w)f(declared)h(\\const".)
-111 1291 y(3.)46 b(Added)28 b(metho)s(d)g(astMatc)m(hAxes)j(to)e(the)g
-(F)-8 b(rame)29 b(class.)41 b(This)28 b(metho)s(d)g(allo)m(ws)h
-(corresp)s(onding)f(axes)227 1404 y(within)i(t)m(w)m(o)i(F)-8
-b(rames)31 b(to)g(b)s(e)f(iden)m(ti\014ed.)111 1592 y(4.)46
-b(The)31 b(astAddF)-8 b(rame)32 b(metho)s(d)f(can)h(no)m(w)f(b)s(e)g
-(used)g(to)h(app)s(end)e(one)h(or)h(more)f(axes)h(to)g(all)h(F)-8
-b(rames)32 b(in)227 1705 y(a)f(F)-8 b(rameSet.)0 1998
-y Fw(G.35)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V5.3-1)0
-2219 y FF(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 2332 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V5.3)g(and)f(V5.3-1)j(\(the)d(curren)m(t)h(v)m
-(ersion\):)111 2594 y(1.)46 b(The)e(StcsChan)f(class)i(no)m(w)f
-(ignores)g(case)h(when)e(reading)h(STC-S)f(phrases)g(\(except)i(that)g
-(units)227 2707 y(strings)30 b(are)h(still)h(case)f(sensitiv)m(e\).)0
-2970 y(Programs)25 b(whic)m(h)g(are)h(statically)h(link)m(ed)f(will)f
-(need)g(to)h(b)s(e)f(re-link)m(ed)g(in)g(order)g(to)h(tak)m(e)h(adv)-5
-b(an)m(tage)27 b(of)e(these)0 3083 y(new)30 b(facilities.)p
-eop end
-%%Trailer
-
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/ast-5.3-1/sun211.tex b/ast-5.3-1/sun211.tex
deleted file mode 100644
index 9197867..0000000
--- a/ast-5.3-1/sun211.tex
+++ /dev/null
@@ -1,46844 +0,0 @@
-\documentclass[twoside,11pt]{article}
-
-% ? Specify used packages
-\usepackage[english]{babel} % For correct hyphenation rules
-\usepackage{graphicx} % Use this one for final production.
-% \usepackage[draft]{graphicx} % Use this one for drafting.
-% ? End of specify used packages
-
-\pagestyle{headings}
-\pagenumbering{roman}
-
-% -----------------------------------------------------------------------------
-% ? Document identification
-% Fixed part
-\newcommand{\stardoccategory} {Starlink User Note}
-\newcommand{\stardocinitials} {SUN}
-\newcommand{\stardocsource} {sun\stardocnumber}
-
-% Variable part - replace [xxx] as appropriate.
-\newcommand{\stardocnumber} {211.26}
-\newcommand{\stardocauthors} {R.F. Warren-Smith \& D.S. Berry}
-\newcommand{\stardocdate} {30th October 2009}
-\newcommand{\stardoctitle} {AST\\
- A Library for Handling\\
- World Coordinate Systems\\
- in Astronomy}
-\newcommand{\stardoccopyright} {Copyright (C) 2009 Science \& Technology Facilities Council}
-\newcommand{\stardoctitlehtml} {AST - A Library for Handling World Coordinate
- Systems in Astronomy}
-\newcommand{\stardocversion} {V5.3}
-\newcommand{\stardocmanual} {Programmer's Guide\\(C Version)}
-\newcommand{\stardocmanualhtml}{Programmer's Guide (C Version)}
-\newcommand{\stardocabstract} {
-The AST library provides a comprehensive range of facilities for
-attaching world coordinate systems to astronomical data, for
-retrieving and interpreting that information in a variety of formats,
-including FITS-WCS, and for generating graphical output based on it.
-
-This programmer's manual should be of interest to anyone writing
-astronomical applications which need to manipulate coordinate system
-data, especially celestial or spectral coordinate systems. AST is portable and
-environment-independent.
-}
-% ? End of document identification
-% -----------------------------------------------------------------------------
-
-% +
-% Name:
-% sun.tex
-%
-% Purpose:
-% Template for Starlink User Note (SUN) documents.
-% Refer to SUN/199
-%
-% Authors:
-% AJC: A.J.Chipperfield (Starlink, RAL)
-% BLY: M.J.Bly (Starlink, RAL)
-%
-% History:
-% 17-JAN-1996 (AJC):
-% Original with hypertext macros, based on MDL plain originals.
-% 16-JUN-1997 (BLY):
-% Adapted for LaTeX2e.
-% Added picture commands.
-% {Add further history here}
-%
-% -
-
-\newcommand{\stardocname}{\stardocinitials /\stardocnumber}
-\markboth{\stardocname}{\stardocname}
-\setlength{\textwidth}{160mm}
-\setlength{\textheight}{230mm}
-\setlength{\topmargin}{-2mm}
-\setlength{\oddsidemargin}{0mm}
-\setlength{\evensidemargin}{0mm}
-\setlength{\parindent}{0mm}
-\setlength{\parskip}{\medskipamount}
-\setlength{\unitlength}{1mm}
-
-% -----------------------------------------------------------------------------
-% Hypertext definitions.
-% ======================
-% These are used by the LaTeX2HTML translator in conjunction with star2html.
-
-% \htmlref{Comment}{Comment}.sty: version 2.0, 19 June 1992
-% Selectively in/exclude pieces of text.
-%
-% Author
-% Victor Eijkhout <eijkhout at cs.utk.edu>
-% Department of Computer Science
-% University Tennessee at Knoxville
-% 104 Ayres Hall
-% Knoxville, TN 37996
-% USA
-
-% Do not remove the %begin{latexonly} and %end{latexonly} lines (used by
-% star2html to signify raw TeX that latex2html cannot process).
-%begin{latexonly}
-\makeatletter
-\def\makeinnocent#1{\catcode`#1=12 }
-\def\csarg#1#2{\expandafter#1\csname#2\endcsname}
-
-\def\ThrowAwayComment#1{\begingroup
- \def\CurrentComment{#1}%
- \let\do\makeinnocent \dospecials
- \makeinnocent\^^L% and whatever other special cases
- \endlinechar`\^^M \catcode`\^^M=12 \xComment}
-{\catcode`\^^M=12 \endlinechar=-1 %
- \gdef\xComment#1^^M{\def\test{#1}
- \csarg\ifx{PlainEnd\CurrentComment Test}\test
- \let\html at next\endgroup
- \else \csarg\ifx{LaLaEnd\CurrentComment Test}\test
- \edef\html at next{\endgroup\noexpand\end{\CurrentComment}}
- \else \let\html at next\xComment
- \fi \fi \html at next}
-}
-\makeatother
-
-\def\includecomment
- #1{\expandafter\def\csname#1\endcsname{}%
- \expandafter\def\csname end#1\endcsname{}}
-\def\excludecomment
- #1{\expandafter\def\csname#1\endcsname{\ThrowAwayComment{#1}}%
- {\escapechar=-1\relax
- \csarg\xdef{PlainEnd#1Test}{\string\\end#1}%
- \csarg\xdef{LaLaEnd#1Test}{\string\\end\string\{#1\string\}}%
- }}
-
-% Define environments that ignore their contents.
-\excludecomment{comment}
-\excludecomment{rawhtml}
-\excludecomment{htmlonly}
-
-% Hypertext commands etc. This is a condensed version of the html.sty
-% file supplied with LaTeX2HTML by: Nikos Drakos <nikos at cbl.leeds.ac.uk> &
-% Jelle van Zeijl <jvzeijl at isou17.estec.esa.nl>. The LaTeX2HTML documentation
-% should be consulted about all commands (and the environments defined above)
-% except \xref and \xlabel which are Starlink specific.
-
-\newcommand{\htmladdnormallinkfoot}[2]{#1\footnote{#2}}
-\newcommand{\htmladdnormallink}[2]{#1}
-\newcommand{\htmladdimg}[1]{}
-\newenvironment{latexonly}{}{}
-\newcommand{\hyperref}[4]{#2\ref{#4}#3}
-\newcommand{\htmlref}[2]{#1}
-\newcommand{\htmlimage}[1]{}
-\newcommand{\htmladdtonavigation}[1]{}
-\newcommand{\latexhtml}[2]{#1}
-\newcommand{\html}[1]{}
-
-% Starlink cross-references and labels.
-\newcommand{\xref}[3]{#1}
-\newcommand{\xlabel}[1]{}
-
-% LaTeX2HTML symbol.
-\newcommand{\latextohtml}{{\bf LaTeX}{2}{\tt{HTML}}}
-
-% Define command to re-centre underscore for Latex and leave as normal
-% for HTML (severe problems with \_ in tabbing environments and \_\_
-% generally otherwise).
-\newcommand{\latex}[1]{#1}
-\newcommand{\setunderscore}{\renewcommand{\_}{{\tt\symbol{95}}}}
-\latex{\setunderscore}
-
-% Redefine the \tableofcontents command. This procrastination is necessary
-% to stop the automatic creation of a second table of contents page
-% by latex2html.
-\newcommand{\latexonlytoc}[0]{\tableofcontents}
-
-% -----------------------------------------------------------------------------
-% Debugging.
-% =========
-% Remove % on the following to debug links in the HTML version using Latex.
-
-% \newcommand{\hotlink}[2]{\fbox{\begin{tabular}[t]{@{}c@{}}#1\\\hline{\footnotesize #2}\end{tabular}}}
-% \renewcommand{\htmladdnormallinkfoot}[2]{\hotlink{#1}{#2}}
-% \renewcommand{\htmladdnormallink}[2]{\hotlink{#1}{#2}}
-% \renewcommand{\hyperref}[4]{\hotlink{#1}{\S\ref{#4}}}
-% \renewcommand{\htmlref}[2]{\hotlink{#1}{\S\ref{#2}}}
-% \renewcommand{\xref}[3]{\hotlink{#1}{#2 -- #3}}
-%end{latexonly}
-% -----------------------------------------------------------------------------
-% ? Document specific \newcommand or \newenvironment commands.
-
-\newcommand{\appref}[1]{Appendix~\ref{#1}}
-\newcommand{\secref}[1]{\S\ref{#1}}
-\begin{htmlonly}
- \newcommand{\appref}[1]{\ref{#1}}
- \newcommand{\secref}[1]{\ref{#1}}
-\end{htmlonly}
-
-\newcommand{\fitsurl}[0]{http://fits.gsfc.nasa.gov/}
-\newcommand{\fitskey}[3]{{#1}&{#2}&{#3}\\}
-
-% The following stuff has been moved out of the document body
-% in an attempt to stop spurious behaviour form latex2html.
-
-\begin{htmlonly}
- \newcommand{\latexonlytoc}[0]{}
-\end{htmlonly}
-\renewcommand{\thepage}{\arabic{page}}
-
-% +
-% Name:
-% SST.TEX
-
-% Purpose:
-% Define LaTeX commands for laying out Starlink routine descriptions.
-
-% Language:
-% LaTeX
-
-% Type of Module:
-% LaTeX data file.
-
-% Description:
-% This file defines LaTeX commands which allow routine documentation
-% produced by the SST application PROLAT to be processed by LaTeX and
-% by LaTeX2html. The contents of this file should be included in the
-% source prior to any statements that make of the sst commands.
-
-% Notes:
-% The commands defined in the style file html.sty provided with LaTeX2html
-% are used. These should either be made available by using the appropriate
-% sun.tex (with hypertext extensions) or by putting the file html.sty
-% on your TEXINPUTS path (and including the name as part of the
-% documentstyle declaration).
-
-% Authors:
-% RFWS: R.F. Warren-Smith (STARLINK)
-% PDRAPER: P.W. Draper (Starlink - Durham University)
-
-% History:
-% 10-SEP-1990 (RFWS):
-% Original version.
-% 10-SEP-1990 (RFWS):
-% Added the implementation status section.
-% 12-SEP-1990 (RFWS):
-% Added support for the usage section and adjusted various spacings.
-% 8-DEC-1994 (PDRAPER):
-% Added support for simplified formatting using LaTeX2html.
-% {enter_further_changes_here}
-
-% Bugs:
-% {note_any_bugs_here}
-
-% -
-
-% Define length variables.
-\newlength{\sstbannerlength}
-\newlength{\sstcaptionlength}
-\newlength{\sstexampleslength}
-\newlength{\sstexampleswidth}
-
-% Define a \tt font of the required size.
-\latex{\newfont{\ssttt}{cmtt10 scaled1095}}
-\html{\newcommand{\ssttt}{\tt}}
-
-% Define a command to produce a routine header, including its name,
-% a purpose description and the rest of the routine's documentation.
-\newcommand{\sstlabel}[1]{}
-\newcommand{\sstroutine}[3]{
- \goodbreak
- \rule{\textwidth}{0.5mm}
- \vspace{-7ex}
- \newline
- \settowidth{\sstbannerlength}{{\Large {\bf #1}}}
- \setlength{\sstcaptionlength}{\textwidth}
- \setlength{\sstexampleslength}{\textwidth}
- \addtolength{\sstbannerlength}{0.5em}
- \addtolength{\sstcaptionlength}{-2.0\sstbannerlength}
- \addtolength{\sstcaptionlength}{-5.0pt}
- \settowidth{\sstexampleswidth}{{\bf Examples:}}
- \addtolength{\sstexampleslength}{-\sstexampleswidth}
- \parbox[t]{\sstbannerlength}{\flushleft{\Large {\bf #1}}}
- \parbox[t]{\sstcaptionlength}{\center{\Large #2}}
- \parbox[t]{\sstbannerlength}{\flushright{\Large {\bf #1}}}
- \begin{description}
- #3
- \end{description}
-}
-
-% Format the description section.
-\newcommand{\sstdescription}[1]{\item[Description:] #1}
-
-% Format the usage section.
-\newcommand{\sstusage}[1]{\item[Usage:] \mbox{} \\[1.3ex] {\ssttt #1}}
-
-% Format the invocation/synopsis section.
-\newcommand{\sstinvocation}[1]{\item[Invocation:]\hspace{0.4em}{\tt #1}}
-\newcommand{\sstsynopsis}[1]{\item[Synopsis:]\hspace{0.4em}{\tt #1}}
-
-% Format the attribute data type section.
-\newcommand{\sstattributetype}[1]{
- \item[Type:] \mbox{} \\
- #1
-}
-
-% Format the constructor section.
-\newcommand{\sstconstructor}[1]{
- \item[Constructor Function:] \mbox{} \\
- #1
-}
-
-% Format the arguments section.
-\newcommand{\sstarguments}[1]{
- \item[Arguments:] \mbox{} \\
- \vspace{-3.5ex}
- \begin{description}
- #1
- \end{description}
-}
-
-% Format the returned value section (for a function).
-\newcommand{\sstreturnedvalue}[1]{
- \item[Returned Value:] \mbox{} \\
- \vspace{-3.5ex}
- \begin{description}
- #1
- \end{description}
-}
-
-% Format the parameters section (for an application).
-\newcommand{\sstparameters}[1]{
- \item[Parameters:] \mbox{} \\
- \vspace{-3.5ex}
- \begin{description}
- #1
- \end{description}
-}
-
-% Format the applicability section.
-\newcommand{\sstapplicability}[1]{
- \item[Clas\mbox{}s Applicability:] \mbox{} \\
- \vspace{-3.5ex}
- \begin{description}
- #1
- \end{description}
-}
-
-% Format the examples section.
-\newcommand{\sstexamples}[1]{
- \item[Examples:] \mbox{} \\
- \vspace{-3.5ex}
- \begin{description}
- #1
- \end{description}
-}
-
-% Define the format of a subsection in a normal section.
-\newcommand{\sstsubsection}[1]{ \item[{#1}] \mbox{} \\}
-
-% Define the format of a subsection in the examples section.
-\newcommand{\sstexamplesubsection}[2]{\sloppy
-\item[\parbox{\sstexampleslength}{\ssttt #1}] \mbox{} \\ #2 }
-
-% Format the notes section.
-\newcommand{\sstnotes}[1]{\item[Notes:] \mbox{} \\[1.3ex] #1}
-
-% Provide a general-purpose format for additional (DIY) sections.
-\newcommand{\sstdiytopic}[2]{\item[{\hspace{-0.35em}#1\hspace{-0.35em}:}] \mbox{} \\[1.3ex] #2}
-
-% Format the a generic section as a list
-\newcommand{\sstdiylist}[2]{
- \item[#1:] \mbox{} \\
- \vspace{-3.5ex}
- \begin{description}
- #2
- \end{description}
-}
-
-% Format the implementation status section.
-\newcommand{\sstimplementationstatus}[1]{
- \item[{Implementation Status:}] \mbox{} \\[1.3ex] #1}
-
-% Format the bugs section.
-\newcommand{\sstbugs}[1]{\item[Bugs:] #1}
-
-% Format a list of items while in paragraph mode.
-\newcommand{\sstitemlist}[1]{
- \mbox{} \\
- \vspace{-3.5ex}
- \begin{itemize}
- #1
- \end{itemize}
-}
-
-% Define the format of an item.
-\newcommand{\sstitem}{\item}
-
-% Now define html equivalents of those already set. These are used by
-% latex2html and are defined in the html.sty files.
-\begin{htmlonly}
-
-% Re-define \ssttt.
- \newcommand{\ssttt}{\tt}
-
-% sstroutine.
-% \newcommand{\sstroutine}[3]{
-% \subsection{#1\xlabel{#1}-\label{#1}#2}
-% \begin{description}
-% #3
-% \end{description}
-% }
- \newcommand{\sstlabel}[1]{\label{#1}\xlabel{#1}}
- \newcommand{\sstroutine}[3]{
- \subsection{#1 - #2}
- \begin{description}
- #3
- \end{description}
- }
-
-% sstdescription
- \newcommand{\sstdescription}[1]{\item[Description:]
- \begin{description}
- #1
- \end{description}
- }
-
-% sstusage
- \newcommand{\sstusage}[1]{\item[Usage:]
- \begin{description}
- {\ssttt #1}
- \end{description}
- }
-
-% sstinvocation
- \newcommand{\sstinvocation}[1]{\item[Invocation:]
- \begin{description}
- {\ssttt #1}
- \end{description}
- }
-
-% sstsynopsis
- \newcommand{\sstsynopsis}[1]{\item[Synopsis:]
- \begin{description}
- {\ssttt #1}
- \end{description}
- }
-
-% sstattributetype
- \newcommand{\sstattributetype}[1]{\item[Type:]
- #1
- }
-
-% sstconstructor
- \newcommand{\sstconstructor}[1]{\item[Constructor Function:]
- #1
- }
-
-% sstarguments
- \newcommand{\sstarguments}[1]{
- \item[Arguments:]
- \begin{description}
- #1
- \end{description}
- }
-
-% sstreturnedvalue
- \newcommand{\sstreturnedvalue}[1]{
- \item[Returned Value:]
- \begin{description}
- #1
- \end{description}
- }
-
-% sstparameters
- \newcommand{\sstparameters}[1]{
- \item[Parameters:]
- \begin{description}
- #1
- \end{description}
- }
-
-% sstapplicability
- \newcommand{\sstapplicability}[1]{
- \item[Clas\mbox{}s Applicability:]
- \begin{description}
- #1
- \end{description}
- }
-
-% sstexamples
- \newcommand{\sstexamples}[1]{
- \item[Examples:]
- \begin{description}
- #1
- \end{description}
- }
-
-% sstsubsection
- \newcommand{\sstsubsection}[1]{\item[{#1}]}
-
-% sstexamplesubsection
- \newcommand{\sstexamplesubsection}[2]{\item[{\ssttt #1}] \\ #2}
-
-% sstnotes
- \newcommand{\sstnotes}[1]{\item[Notes:]
- \begin{description}
- #1
- \end{description}
- }
-
-% sstdiytopic
- \newcommand{\sstdiytopic}[2]{\item[{#1}]
- \begin{description}
- #2
- \end{description}
- }
-
-% sstimplementationstatus
- \newcommand{\sstimplementationstatus}[1]{\item[Implementation Status:]
- \begin{description}
- #1
- \end{description}
- }
-
-% sstitemlist
- \newcommand{\sstitemlist}[1]{
- \begin{itemize}
- #1
- \end{itemize}
- }
-\end{htmlonly}
-
-% End of "sst.tex" layout definitions.
-% .
-% @(#)sst.tex 1.4 95/06/06 11:46:41 96/07/05 10:28:17
-
-
-
-
-
-% ? End of document specific commands
-% -----------------------------------------------------------------------------
-% \htmlref{Title}{Title} Page.
-% ===========
-\renewcommand{\thepage}{\roman{page}}
-\begin{document}
-\thispagestyle{empty}
-
-% Latex document header.
-% ======================
-\begin{latexonly}
- CCLRC / {\sc Rutherford Appleton Laboratory} \hfill {\bf \stardocname}\\
- {\large Particle Physics \& Astronomy Research Council}\\
- {\large Starlink Project\\}
- {\large \stardoccategory\ \stardocnumber}
- \begin{flushright}
- \stardocauthors\\
- \stardocdate
- \end{flushright}
- \vspace{-4mm}
- \rule{\textwidth}{0.5mm}
- \vspace{-7mm}
- \begin{center}
- {\Huge\bf \stardoctitle \\ [2.0ex]}
- {\LARGE\bf \stardocversion \\ [1.0ex]}
- {\Huge\bf \stardocmanual}
- \end{center}
-
-% ? Add picture here if required for the LaTeX version.
- \begin{center}
- \mbox{}\hfill
- \includegraphics[scale=0.25,angle=-90]{sun211_figures/fronta_bw.eps}\hfill
- \includegraphics[scale=0.25,angle=-90]{sun211_figures/frontb_bw.eps}\hfill
- \includegraphics[scale=0.25,angle=-90]{sun211_figures/frontc_bw.eps}\hfill
- \mbox{}
- \end{center}
-% ? End of picture
-
-% ? Heading for abstract if used.
- \begin{center}
- {\Large\bf Abstract}
- \end{center}
-% ? End of heading for abstract.
-\end{latexonly}
-
-% HTML documentation header.
-% ==========================
-\begin{htmlonly}
- \xlabel{}
- \begin{rawhtml} <H1> \end{rawhtml}
- \stardoctitlehtml
- \begin{rawhtml} </H1> \end{rawhtml}
-
-% ? Add picture here if required for the hypertext version.
- \includegraphics[scale=0.3,angle=-90]{sun211_figures/fronta.eps}\hfill
- \includegraphics[scale=0.3,angle=-90]{sun211_figures/frontb.eps}\hfill
- \includegraphics[scale=0.3,angle=-90]{sun211_figures/frontc.eps}
-% ? End of picture
-
- \begin{rawhtml} <H1> \end{rawhtml}
- \stardocversion
- \stardocmanualhtml
- \begin{rawhtml} </H1> \end{rawhtml}
- \begin{rawhtml} <P> <I> \end{rawhtml}
- \stardoccategory\ \stardocnumber \\
- \stardocauthors \\
- \stardocdate
- \begin{rawhtml} </I> </P> \end{rawhtml}
- \begin{rawhtml} <P> <I> \end{rawhtml}
- (For the Fortran version of this document, please see
- \xref{SUN/210}{sun210}{}.)
- \begin{rawhtml} </I> </P> \end{rawhtml}
- \begin{rawhtml} <H3> \end{rawhtml}
- \htmladdnormallink{CCLRC}{http://www.cclrc.ac.uk} /
- \htmladdnormallink{Rutherford Appleton Laboratory}
- {http://www.cclrc.ac.uk/ral} \\
- \htmladdnormallink{Particle Physics \& Astronomy Research Council}
- {http://www.pparc.ac.uk} \\
- \begin{rawhtml} </H3> <H2> \end{rawhtml}
- \htmladdnormallink{Starlink Project}{http://www.starlink.rl.ac.uk/}
- \begin{rawhtml} </H2> \end{rawhtml}
- \htmladdnormallink{\htmladdimg{source.gif} Retrieve hardcopy}
- {http://www.starlink.rl.ac.uk/cgi-bin/hcserver?\stardocsource}\\
-
-% HTML document table of contents.
-% ================================
-% Add table of contents header and a navigation button to return to this
-% point in the document (this should always go before the abstract \section).
- \label{stardoccontents}
- \begin{rawhtml}
- <HR>
- <H2>Contents</H2>
- \end{rawhtml}
- \htmladdtonavigation{\htmlref{\htmladdimg{contents_motif.gif}}
- {stardoccontents}}
-
-% ? New section for abstract if used.
- \section{\xlabel{abstract}Abstract}
-% ? End of new section for abstract
-\end{htmlonly}
-
-% -----------------------------------------------------------------------------
-% ? Document Abstract. (if used)
-% ==================
-\stardocabstract
-% ? End of document abstract
-% -----------------------------------------------------------------------------
-% ? Document Copyright Statement.
-% =============================
- \begin{latexonly}
- \newpage
- \vspace*{\fill}
- \stardoccopyright
- \end{latexonly}
-% ? End of Document Copyright Statement.
-% -----------------------------------------------------------------------------
-% ? Latex document Table of Contents (if used).
-% ===========================================
- \cleardoublepage
- \cleardoublepage
- \begin{latexonly}
- \setlength{\parskip}{0mm}
- \latexonlytoc
- \setlength{\parskip}{\medskipamount}
- \markboth{\stardocname}{\stardocname}
- \end{latexonly}
-% ? End of Latex document table of contents
-% -----------------------------------------------------------------------------
-\cleardoublepage
-\setcounter{page}{1}
-
-\null\vspace {5mm}
-\begin{latexonly}
- \begin {center}
- \rule{80mm}{0.5mm} \\ [1ex]
- {\Large\bf \stardoctitle \\ [2.5ex]
- \stardocversion} \\ [2ex]
- \rule{80mm}{0.5mm}
-
- \vspace{10mm}
- {\em{This is the C version of this document.\\
- For the Fortran version, please see SUN/210.}}
- \end{center}
-\end{latexonly}
-
-% Main text of document.
-\vspace{7mm}
-\pagenumbering{arabic}
-\section{Introduction}
-
-Welcome to the AST library. If you are writing software for astronomy
-and need to use celestial coordinates ({\em{e.g.}}\ RA and Dec), spectral
-coordinates ({\em{e.g.}}\ wavelength, frequency, {\em{etc.}}), or
-other coordinate system information, then this library should be of
-interest. It provides solutions for most of the problems you will meet
-and allows you to write robust and flexible software. It is able to read
-and write WCS information in a variety of formats, including
-\htmladdnormallink{FITS-WCS}{http://fits.gsfc.nasa.gov/fits_wcs.html}.
-
-%\subsection{TBW---What is a World Coordinate \htmlref{System}{System}?}
-
-\subsection{What Problems Does AST Tackle?}
-
-Here are some of the main problems you may face when handling world
-coordinate system (WCS) information and the solutions that AST
-provides:
-
-\begin{description}
-\item[1. The Variety of Coordinate Systems]\mbox{}\\
-Astronomers use a wide range of differing coordinate systems to describe
-positions within a variety of physical domains. For instance, there are a
-large number of celestial coordinate systems in use within astronomy to
-describe positions on the sky. Understanding these, and knowing how to
-convert coordinates between them, can require considerable expertise. It
-can also be difficult to decide which of them your software should support.
-The same applies to coordinate systems describing other domains, such as
-position within an electro-magnetic spectrum.
-
-{\bf{Solution.}} AST has built-in knowledge of many coordinate systems
-and allows you to convert freely between them without specialist
-knowledge. This avoids the need to embed details of specific
-coordinate systems in your software. You also benefit automatically
-when new coordinate systems are added to AST.
-
-\item[2. Storing and Retrieving WCS Information]\mbox{}\\
-Storing coordinate system information in astronomical datasets and
-retrieving it later can present a considerable challenge. Typically,
-it requires knowledge of rather complex conventions
-({\em{e.g.}}\ FITS) which are low-level, often mis-interpreted and may
-be subject to change. Exchanging information with other software
-systems is further complicated by the number of different conventions
-in use.
-
-{\bf{Solution.}} AST combines a unifying high-level description of WCS
-information with the ability to save and restore this using a variety
-of formats. Details of the formats, which include FITS, are handled
-internally by AST. This frees you from the need to understand them or
-embed the details in your software. Again, you benefit automatically
-when new formats are added to AST.
-
-\item[3. Generating Graphical Output]\mbox{}\\
-Producing graphical displays involving curvilinear coordinate systems,
-such as celestial coordinate grids, can be complicated. Particular
-difficulties arise when handling large areas of sky, the polar regions
-and discontinuous ({\em{e.g.}}\ segmented) sky projections. Even just
-numbering and labelling curvilinear axes is rarely straightforward.
-
-{\bf{Solution.}} AST provides plotting facilities especially designed
-for use with curvilinear coordinate systems. These include the
-plotting of axes and complete labelled coordinate grids. A large
-number of options are provided for tailoring the output to your
-specific needs.
-
-\item[4. Aligning Data from Different Sources]\mbox{}\\
-One of the main uses of coordinate systems is to facilitate the
-inter-comparison of data from different sources. A typical use might
-be to plot (say) radio contours over an optical image. In practice,
-however, different celestial coordinate systems may have been used,
-making accurate alignment far from simple.
-
-{\bf{Solution}} AST provides a one-step method of aligning datasets,
-searching for all possible intermediate coordinate systems. This
-makes it simple to directly inter-relate the pixel coordinates of
-different datasets.
-
-\item[5. Handling Different Types of Coordinate \htmlref{System}{System}]\mbox{}\\
-Not all coordinate systems used in astronomy are celestial ones, so if
-you are writing general-purpose software such as (say) a display tool,
-you may also need to handle axes representing wavelength, distance,
-time or whatever else comes along. Obviously, you would prefer not to
-handle each one as a special case.
-
-{\bf{Solution}} AST uses the same flexible high-level model to
-describe all types of coordinate system. This allows you to write
-software that handles different kinds of coordinate axis without
-introducing special cases.
-\end{description}
-
-\subsection{Other Design Objectives}
-
-As well as its scientific objectives, the AST library's design
-includes a number of technical criteria intended to make it applicable
-to as wide a range of projects as possible. The main considerations
-are described here:
-
-\begin{enumerate}
-\item {\bf{Minimum Software Dependencies.}}
-The AST library depends on no other other software\footnote{It now comes with a
-minimal cut-down version of the widely-available SLALIB positional astronomy
-library (\xref{SUN/67}{sun67}{}), including just those functions needed
-by AST, and the previous dependency on SLALIB is no longer present}.
-
-\item {\bf{Environment Independence.}}
-AST is designed so that it can operate in a variety of ``programming
-environments'' and is not tied to any particular one. To allow this,
-it uses simple, flexible interfaces to obtain the following services:
-
-\begin{itemize}
-\item {\bf{Data Storage.}} Data I/O operations are based on text
-and/or FITS headers. This makes it easy to interface to a wide variety
-of astronomical data formats in a machine-independent way.
-
-\item {\bf{Graphics.}} Graphical output is produced {\em{via}} a
-simple generic graphics interface, which may easily be re-implemented
-over different graphics systems. AST provides a default implementation
-based on the widely-used PGPLOT graphics system
-(\xref{SUN/15}{sun15}{}).
-
-\item {\bf{Error Handling.}} Error messages are written to standard
-error by default, but go through a simple generic interface similar to
-that used for graphics (above). This permits error message delivery
-{\em{via}} other routes when necessary ({\em{e.g.}} in a graphical
-interface).
-\end{itemize}
-
-\item {\bf{Multiple Language Support.}}
-AST has been designed to be called from more than one language.
-Both C and Fortran interfaces are available (see
-\xref{SUN/210}{sun210}{} for the Fortran version)
-and use from C$++$ is also straightforward if the C interface is
-included using:
-
-\begin{quote}
-\small
-\begin{verbatim}
-extern "C" {
-#include "ast.h"
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-A JNI interface (known as ``JNIAST'' - see
-\htmladdnormallink{http://www.starlink.ac.uk/jniast/}
-{http://www.starlink.ac.uk/jniast/}) has also been developed by Starlink
-which allows AST to be used from Java.
-
-\item {\bf{\htmlref{Object}{Object} Oriented Design.}}
-AST uses ``object oriented'' techniques internally in order to provide
-a flexible and easily-extended programming model. A fairly
-traditional calling interface is provided, however, so that the
-library's facilities are easily accessible to programmers using
-C and Fortran.
-
-\item {\bf{Portability.}}
-AST is implemented entirely in ANSI standard C and, when called
-{\em{via}} its C interface, makes no explicit use of any
-machine-dependent facilities.
-
-The Fortran interface is, unavoidably, machine dependent. However, the
-potential for problems has been minimised by encapsulating the
-interface layer in a compact set of C macros which facilitate its
-transfer to other platforms. No Fortran compiler is needed to build
-the library.
-
-Currently, AST is supported by Starlink on PC~Linux, Sun~Solaris and
-Tru64~Unix (formerly DEC~UNIX) platforms.
-\end{enumerate}
-
-\subsection{What Does ``AST'' Stand For?}
-
-The library name ``AST'' stands for ``ASTrometry Library''. The name
-arose when it was thought that knowledge of ``astrometry''
-({\em{i.e.}}\ celestial coordinate systems) would form the bulk of the
-library. In fact, it turns out that astrometry forms only a minor
-component, but the name AST has stuck.
-
-\cleardoublepage
-\section{Overview of AST Concepts}
-
-This section presents a brief overview of AST concepts. It is intended
-as a basic orientation course before you move on to the more technical
-considerations in subsequent sections.
-
-\subsection{\label{ss:mappingoverview}Relationships Between Coordinate Systems}
-
-The relationships between coordinate systems are represented in AST by
-Objects called Mappings. A \htmlref{Mapping}{Mapping} does not represent a coordinate
-system itself, but merely the process by which you move from one
-coordinate system to another related one.
-
-\begin{latexonly}
- A convenient picture of a Mapping is as a ``black box''
- (Figure~\ref{fig:mapping}) into which you can feed sets of
- coordinates.
- \begin{figure}[bhtp]
- \begin{center}
- \includegraphics[scale=0.7]{sun211_figures/mapping.eps}
- \caption{A Mapping viewed as a ``black box'' for transforming coordinates.}
- \label{fig:mapping}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- A convenient picture of a Mapping is as a ``black box'' (see Figure
- below) into which you can feed sets of coordinates.
- \begin{quote}
- \begin{figure}[bhtp]
- \label{fig:mapping}
- \includegraphics[scale=1.2]{sun211_figures/mapping.eps}
- \caption{A Mapping viewed as a ``black box'' for transforming coordinates.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-For each set you feed in, the Mapping returns a corresponding set of
-transformed coordinates. Since each set of coordinates represents a
-point in a coordinate space, the Mapping acts to inter-relate
-corresponding positions in the two spaces, although what these spaces
-represent is unspecified. Notice that a Mapping need not have the
-same number of input and output coordinates. That is, the two
-coordinate spaces which it inter-relates need not have the same number
-of dimensions.
-
-In many cases, the transformation can, in principle, be performed in
-either direction: either from the {\em{input}} coordinate space to the
-{\em{output,}} or {\em{vice versa.}} The first of these is termed the
-{\em{forward}} transformation and the other the {\em{inverse}}
-transformation.
-
-
-{\bf{Further reading:}} For a more complete discussion of Mappings,
-see~\secref{ss:mappings}.
-
-\subsection{\label{ss:mappingselection}Mappings Available}
-
-The basic concept of a \htmlref{Mapping}{Mapping} (\secref{ss:mappingoverview}) is rather
-generic and obviously it is necessary to have specific Mappings that
-implement specific relationships between coordinate systems. AST
-provides a range of these, to perform transformations such as the
-following and, where appropriate, their inverses:
-
-\begin{itemize}
-\item Conversions between various celestial coordinate systems (the
-\htmlref{SlaMap}{SlaMap}).
-
-\item Conversions between various spectral coordinate systems (the
-\htmlref{SpecMap}{SpecMap} and \htmlref{GrismMap}{GrismMap}).
-
-\item Conversions between various time systems (the \htmlref{TimeMap}{TimeMap}).
-
-\item Conversion between 2-dimensional spherical celestial coordinates
-(longitude and latitude) and a 3-dimensional vectorial positions (the \htmlref{SphMap}{SphMap}).
-
-\item Various projections of the celestial sphere on to 2-dimensional
-coordinate spaces---{\em{i.e.}}\ map projections (the \htmlref{DssMap}{DssMap} and \htmlref{WcsMap}{WcsMap}).
-
-\item Permutation, introduction and elimination of coordinates (the
-\htmlref{PermMap}{PermMap}).
-
-\item Various linear coordinate transformations (the \htmlref{MatrixMap}{MatrixMap}, \htmlref{WinMap}{WinMap},
-\htmlref{ShiftMap}{ShiftMap} and \htmlref{ZoomMap}{ZoomMap}).
-
-\item General N-dimensional polynomial transformations (the \htmlref{PolyMap}{PolyMap}).
-
-\item Lookup tables (the \htmlref{LutMap}{LutMap}).
-
-\item General-purpose transformations expressed using arithmetic
-operations and functions similar to those available in C (the
-\htmlref{MathMap}{MathMap}).
-
-\item Transformations for internal use within a program, based on
-private transformation functions which you write yourself in C (the
-\htmlref{IntraMap}{IntraMap}).
-\end{itemize}
-
-{\bf{Further reading:}} For a more complete description of each of the
-Mappings mentioned above, see its entry in
-\appref{ss:classdescriptions}. In addition, see the discussion of the
-PermMap in \secref{ss:permmapexample}, the \htmlref{UnitMap}{UnitMap} in
-\secref{ss:unitmapexample} and the IntraMap in
-\secref{ss:intramaps}. The ZoomMap is used as an example throughout
-\secref{ss:primer}.
-
-\subsection{\label{ss:cmpmapoverview}Compound Mappings}
-
-The Mappings described in \secref{ss:mappingselection} provide a set
-of basic building blocks from which more complex Mappings may be
-constructed. The key to doing this is a type of \htmlref{Mapping}{Mapping} called a
-\htmlref{CmpMap}{CmpMap}, or compound Mapping. A CmpMap's role is, in principle, very
-simple: it allows any other pair of Mappings to be joined together
-into a single entity which behaves as if it were a single Mapping. A
-CmpMap is therefore a container for another pair of Mappings.
-
-\begin{latexonly}
- A pair of Mappings may be combined using a CmpMap in either of two
- ways. The first of these, {\em{in series,}} is illustrated in
- Figure~\ref{fig:seriescmpmap}.
- \begin{figure}
- \begin{center}
- \includegraphics[scale=0.5]{sun211_figures/series.eps}
- \caption{A CmpMap (compound Mapping) composed of two component
- Mappings joined in series. The output coordinates of the first Mapping
- feed into the input coordinates of the second one, so that the whole
- entity behaves like a single Mapping.}
- \label{fig:seriescmpmap}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- A pair of Mappings may be combined using a CmpMap in either of two
- ways. The first of these, {\em{in series,}} is illustrated in the
- following Figure.
- \begin{quote}
- \begin{figure}
- \label{fig:seriescmpmap}
- \includegraphics[scale=1.0]{sun211_figures/series.eps}
- \caption{A CmpMap (compound Mapping) composed of two component
- Mappings joined in series. The output coordinates of the first Mapping
- feed into the input coordinates of the second one, so that the whole
- entity behaves like a single Mapping.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-\begin{latexonly}
- Here, the transformations implemented by each component Mapping are
- performed one after the other, with the output from the first Mapping
- feeding into the second. The second way, {\em{in parallel,}} is shown in
- Figure~\ref{fig:parallelcmpmap}.
- \begin{figure}
- \begin{center}
- \includegraphics[scale=0.75]{sun211_figures/parallel.eps}
- \caption{A CmpMap composed of two Mappings joined in parallel. Each
- component Mapping acts on a complementary subset of the input and
- output coordinates.}
- \label{fig:parallelcmpmap}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- Here, the transformations implemented by each component Mapping are
- performed one after the other, with the output from the first Mapping
- feeding into the second. The second way, {\em{in parallel,}} is shown in
- the Figure below.
- \begin{quote}
- \begin{figure}
- \label{fig:parallelcmpmap}
- \includegraphics[scale=1.0]{sun211_figures/parallel.eps}
- \caption{A CmpMap composed of two Mappings joined in parallel. Each
- component Mapping acts on a complementary subset of the input and
- output coordinates.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-In this case, each Mapping acts on a complementary subset of the
-input and output coordinates.\footnote{A pair of Mappings can be combined
-in a third way using a \htmlref{TranMap}{TranMap}. A TranMap allows the forward
-transformation of one Mapping to be combined with the inverse
-transformation of another to produce a single Mapping.}
-
-\begin{latexonly}
- The CmpMap forms the key to building arbitrarily complex Mappings
- because it is itself a form of Mapping. This means that a CmpMap may
- contain other CmpMaps as components
- ({\em{e.g.}}\ Figure~\ref{fig:complexcmpmap}). This nesting of CmpMaps
- can be repeated indefinitely, so that complex Mappings may be built in
- a hierarchical manner out of simper ones.
- \begin{figure}
- \begin{center}
- \includegraphics[scale=0.6]{sun211_figures/complex.eps}
- \caption{CmpMaps (compound Mappings) may be nested in order to
- construct complex Mappings out of simpler building blocks.}
- \label{fig:complexcmpmap}
- \end{center}
- \end{figure}
- This gives AST great flexibility in the coordinate transformations it
- can describe.
-\end{latexonly}
-\begin{htmlonly}
- The CmpMap forms the key to building arbitrarily complex Mappings
- because it is itself a form of Mapping. This means that a CmpMap may
- contain other CmpMaps as components ({\em{e.g.}}\ the Figure
- below). This nesting of CmpMaps can be repeated indefinitely, so that
- complex Mappings may be built in a hierarchical manner out of simper
- ones. This gives AST great flexibility in the coordinate
- transformations it can describe.
- \begin{quote}
- \begin{figure}
- \label{fig:complexcmpmap}
- \includegraphics[scale=0.8]{sun211_figures/complex.eps}
- \caption{CmpMaps (compound Mappings) may be nested in order to
- construct complex Mappings out of simpler building blocks.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-
-{\bf{Further reading:}} For a more complete description of CmpMaps,
-see \secref{ss:cmpmaps}. Also see the CmpMap entry in
-\appref{ss:classdescriptions}.
-
-\subsection{Representing Coordinate Systems}
-
-\begin{latexonly}
- While Mappings (\secref{ss:mappingoverview}) represent the
- relationships between coordinate systems in AST, the coordinate
- systems themselves are represented by Objects called Frames
- (Figure~\ref{fig:frames}).
- \begin{figure}
- \begin{center}
- \includegraphics[scale=0.75]{sun211_figures/frames.eps}
- \caption{(a) A basic \htmlref{Frame}{Frame} is used to represent a Cartesian coordinate
- system, here 2-dimensional. (b) A \htmlref{SkyFrame}{SkyFrame} represents a (spherical)
- celestial coordinate system. (c) The axis order of any Frame may be
- permuted to match the coordinate space it describes.}
- \label{fig:frames}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- While Mappings (\secref{ss:mappingoverview}) represent the
- relationships between coordinate systems in AST, the coordinate
- systems themselves are represented by Objects called Frames (see
- Figure below).
- \begin{quote}
- \begin{figure}
- \label{fig:frames}
- \includegraphics[scale=1.5]{sun211_figures/frames.eps}
- \caption{(a) A basic Frame is used to represent a Cartesian coordinate
- system, here 2-dimensional. (b) A SkyFrame represents a (spherical)
- celestial coordinate system. (c) The axis order of any Frame may be
- permuted to match the coordinate space it describes.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-A Frame is similar in concept to the frame you might draw around a
-graph. It contains information about the labels which appear on the
-axes, the axis units, a title, knowledge of how to format the
-coordinate values on each axis, {\em{etc.}} An AST Frame is not,
-however, restricted to two dimensions and may have any number of axes.
-
-A basic Frame may be used to represent a Cartesian coordinate system
-by setting values for its {\em attributes} (all AST Objects have
-values associated with them called attributes, which may be set and
-enquired). Usually, this would involve setting appropriate axis
-labels and units, for example. Functions are provided for use with
-Frames to perform operations such as formatting coordinate values as
-text, calculating distances between points, interchanging axes,
-{\em{etc.}}
-
-There are several more specialised forms of Frame, which provide the
-additional functionality required when handling coordinates within some
-specific physical domain. This ranges from tasks such as formatting axis
-values, to complex tasks such as determining the transformation between
-any pair of related coordinate systems. For instance, the SkyFrame
-(Figure~\ref{fig:frames}b,c), represents celestial coordinate systems,
-the \htmlref{SpecFrame}{SpecFrame} represents spectral coordinate systems, and the \htmlref{TimeFrame}{TimeFrame}
-represents time coordinate systems. All these provide a wide range of
-different systems for describing positions within their associated physical
-domain, and these may be selected by setting appropriate attributes.
-
-\begin{latexonly}
- As with compound Mappings (\secref{ss:cmpmapoverview}), it is possible
- to merge two Frames together to form a compound Frame, or \htmlref{CmpFrame}{CmpFrame}, in
- which both sets of axes are combined. One could, for example, have
- celestial coordinates on two axes and an unrelated coordinate
- (wavelength, perhaps) on a third (Figure~\ref{fig:cmpframe}).
- Knowledge of the relationships between the axes is preserved
- internally by the process of constructing the CmpFrame which
- represents them.
- \begin{figure}
- \begin{center}
- \includegraphics[scale=0.85]{sun211_figures/cmpframe.eps}
- \caption{A CmpFrame (compound Frame) formed by combining two simpler
- Frames. Note how the special relationship which exists between the RA
- and Dec axes is preserved within this data structure. As with compound
- Mappings (Figure~\ref{fig:complexcmpmap}), CmpFrames may be nested in
- order to build more complex Frames.}
- \label{fig:cmpframe}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- As with compound Mappings (\secref{ss:cmpmapoverview}), it is possible
- to merge two Frames together to form a compound Frame, or CmpFrame, in
- which both sets of axes are combined. One could, for example, have
- celestial coordinates on two axes and an unrelated coordinate
- (wavelength, perhaps) on a third (see Figure below). Knowledge of the
- relationships between the axes is preserved internally by the process
- of constructing the CmpFrame which represents them.
- \begin{quote}
- \begin{figure}
- \label{fig:cmpframe}
- \includegraphics[scale=1.5]{sun211_figures/cmpframe.eps}
- \caption{A CmpFrame (compound Frame) formed by combining two simpler
- Frames. Note how the special relationship which exists between the RA
- and Dec axes is preserved within this data structure. As with compound
- Mappings (Figure~\ref{fig:complexcmpmap}), CmpFrames may be nested in
- order to build more complex Frames.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-
-{\bf{Further reading:}} For a more complete description of Frames see
-\secref{ss:frames}, for SkyFrames see \secref{ss:skyframes} and for
-SpecFrames see \secref{ss:specframes}. Also see the Frame, SkyFrame,
-SpecFrame, TimeFrame and CmpFrame entries in \appref{ss:classdescriptions}.
-
-\subsection{Networks of Coordinate Systems}
-
-\begin{latexonly}
- Mappings and Frames may be connected together to form networks called
- FrameSets, which are used to represent sets of inter-related
- coordinate systems (Figure~\ref{fig:frameset}).
- \begin{figure}
- \begin{center}
- \includegraphics[scale=0.75]{sun211_figures/frameset.eps}
- \caption{A \htmlref{FrameSet}{FrameSet} is a network of Frames inter-connected by Mappings
- such that there is exactly one conversion path, {\em{via}} Mappings,
- between any pair of Frames.}
- \label{fig:frameset}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- Mappings and Frames may be connected together to form networks called
- FrameSets, which are used to represent sets of inter-related
- coordinate systems (see Figure below).
- \begin{quote}
- \begin{figure}
- \label{fig:frameset}
- \includegraphics[scale=1.0]{sun211_figures/frameset.eps}
- \caption{A FrameSet is a network of Frames inter-connected by Mappings
- such that there is exactly one conversion path, {\em{via}} Mappings,
- between any pair of Frames.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-A FrameSet may be extended by adding a new \htmlref{Frame}{Frame} to it, together with
-an associated \htmlref{Mapping}{Mapping} which relates the new coordinate system to one
-which is already present. This process ensures that there is always
-exactly one path, {\em{via}} Mappings, between any pair of Frames. A
-function is provided for identifying this path and returning the
-complete Mapping.
-
-One of the Frames in a FrameSet is termed its {\em{base}} Frame. This
-underlies the FrameSet's purpose, which is to calibrate datasets and
-other entities by attaching coordinate systems to them. In this
-context, the base Frame represents the ``native'' coordinate system
-(for example, the pixel coordinates of an image). Similarly, one
-Frame is termed the {\em{current}} Frame and represents the
-``currently-selected'' coordinates. It might, typically, be a
-celestial or spectral coordinate system and would be used during
-interactions with
-a user, as when plotting axes on a graph or producing a table of
-results. Other Frames within the FrameSet represent a library of
-alternative coordinate systems which a software user can select by
-making them current.
-
-{\bf{Further reading:}} For a more complete description of
-FrameSets, see \secref{ss:framesets} and \secref{ss:fshigher}. Also
-see the FrameSet entry in \appref{ss:classdescriptions}.
-
-\subsection{Input/Output Facilities}
-
-AST allows you to convert any kind of \htmlref{Object}{Object} into a stream of text
-which contains a full description of that Object. This text may be
-written out by one program and read back in by another, thus allowing
-the original Object to be reconstructed.
-
-The filter which converts Objects into text and back again is itself a
-kind of Object, called a \htmlref{Channel}{Channel}. A Channel provides a number of
-options for controlling the information content of the text, such as
-the addition of comments for human interpretation. It is also
-possible to intercept the text being processed by a Channel so that it
-may be redirected to/from any chosen external data store, such as a
-text file, an astronomical dataset, or a network connection.
-
-The text format used by the basic Channel class is peculiar to the AST
-library - no other software will understand it. However, more specialised
-forms of Channel are provided which use text formats more widely
-understood.
-
-To further facilitate the storage of coordinate system information in
-astronomical datasets, a more specialised form of Channel called a
-\htmlref{FitsChan}{FitsChan} is provided. Instead of using free-format text, a FitsChan
-converts AST Objects to and from FITS header cards. It also allows the
-information to be encoded in the FITS cards in a number of ways
-(called {\em{encodings}}), so that WCS information from a variety of
-sources can be handled.
-
-Another sub-class of Channel, called \htmlref{XmlChan}{XmlChan}, is a specialised form of
-Channel that stores the text in the form of XML markup. Currently, two
-markup formats are provided by the XmlChan class, one is closely related
-to the text format produced by the basic Channel class (currently, no
-schema or DTD is available describing this format). The other is a subset
-of an early draft of the IVOA Space-Time-Coordinates XML (STC-X) schema
-(V1.20) described at \htmladdnormallink{
-http://www.ivoa.net/Documents/WD/STC/STC-20050225.html
-}{
-http://www.ivoa.net/Documents/WD/STC/STC-20050225.html
-}\footnote{XML documents which use only the subset of the STC schema
-supported by AST can be read by the XmlChan class to produce
-corresponding AST objects (subclasses of the \htmlref{Stc}{Stc} class). However, the
-reverse is not possible. That is, AST objects can not currently be
-written out in the form of STC documents.}. The version of STC-X that has
-been adopted by the IVOA differs in several significant respects from
-V1.20, and therefore this XmlChan format is of historical interest only.
-
-Finally, the \htmlref{StcsChan}{StcsChan} class provides facilities for reading and writing
-IVOA STC-S region descriptions. STC-S (see \htmladdnormallink{
-http://www.ivoa.net/Documents/latest/STC-S.html}{
-http://www.ivoa.net/Documents/latest/STC-S.html}) is a linear string
-syntax that allows simple specification of STC metadata. AST supports a
-subset of the STC-S specification, allowing an STC-S description of a
-region within an AST-supported astronomical coordinate system to be converted
-into an equivalent AST \htmlref{Region}{Region} object, and vice-versa.
-
-{\bf{Further reading:}} For a more complete description of Channels
-see \secref{ss:channels} and for FitsChans see \secref{ss:nativefits}
-and \secref{ss:foreignfits}. Also see the Channel and FitsChan entries
-in \appref{ss:classdescriptions} and the \htmlref{Encoding}{Encoding} entry in
-\appref{ss:attributedescriptions}.
-
-\subsection{Producing Graphical Output}
-
-Graphical output is supported by a specialised form of \htmlref{FrameSet}{FrameSet} called
-a \htmlref{Plot}{Plot}, whose base \htmlref{Frame}{Frame} corresponds with the native coordinates of
-the underlying graphics system. Plotting operations are specified in
-{\em{physical coordinates}} which correspond with the Plot's current
-Frame. Typically, this might be a celestial coordinate system.
-
-Operations, such as drawing lines, are automatically transformed from
-physical to graphical coordinates before plotting, using an adaptive
-algorithm which ensures smooth curves (because the transformation is
-usually non-linear). ``Missing'' coordinates ({\em{e.g.}}\ graphical
-coordinates which do not project on to the celestial sphere),
-discontinuities and generalised clipping are all consistently handled.
-It is possible, for example, to plot in equatorial coordinates and
-clip in galactic coordinates. The usual plotting operations are
-provided (text, markers), but a geodesic curve replaces the primitive
-straight line element. There is also a separate function for drawing
-axis lines, since these are normally not geodesics.
-
-In addition to drawing coordinate grids over an area of the sky, another
-common use of the Plot class is to produce line plots such as flux
-against wavelength, displacement again time, \emph{etc}. For these
-situations the current Frame of the Plot would be a compound Frame
-(\htmlref{CmpFrame}{CmpFrame}) containing a pair of 1-dimensional Frames - the first
-representing the X axis quantity (wavelength, time, etc), and the second
-representing the Y axis quantity (flux, displacement, etc). The Plot
-class includes an option for axes to be plotted logarithmically.
-
-\begin{latexonly}
- Perhaps the most useful graphics function available is for drawing
- fully annotated coordinate grids ({\em{e.g.}}\ Figure~\ref{fig:gridplot}).
- \begin{figure}
- \begin{center}
- \includegraphics[scale=0.8,angle=-90]{sun211_figures/gridplot_bw.eps}
- \caption{A labelled coordinate grid for an all-sky zenithal equal area
- projection in ecliptic coordinates. This was composed and drawn
- {\em{via}} a Plot using a
- single function call.}
- \label{fig:gridplot}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- Perhaps the most useful graphics function available is for drawing
- fully annotated coordinate grids ({\em{e.g.}}\ the Figure below).
- \begin{quote}
- \begin{figure}
- \label{fig:gridplot}
- \includegraphics[scale=1.2,angle=-90]{sun211_figures/gridplot.eps}
- \caption{A labelled coordinate grid for an all-sky zenithal equal area
- projection in ecliptic coordinates. This was composed and drawn
- {\em{via}} a Plot using a
- single function call.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-This uses a general algorithm which does not depend on knowledge of
-the coordinates being represented, so can also handle
-programmer-defined coordinate systems. Grids for all-sky projections,
-including polar regions, can be drawn and most aspects of the output
-(colour, line style, {\em{etc.}}) can be adjusted by setting
-appropriate Plot attributes.
-
-{\bf{Further reading:}} For a more complete description of
-Plots and how to produce graphical output, see \secref{ss:plots}. Also
-see the Plot entry in \appref{ss:classdescriptions}.
-
-\cleardoublepage
-\section{\label{ss:howto}How To\ldots}
-
-For those of you with a plane to catch, this section provides some
-instant templates and recipes for performing the most
-commonly-required operations using AST, but without going into
-detail. The examples given (sort of) follow on from each other, so you
-should be able to construct a variety of programs by piecing them
-together. Note that some of them appear longer than they actually
-are, because we have included plenty of comments and a few options
-that you probably won't need.
-
-If any of this material has you completely baffled, then you may want
-to read the introduction to AST programming concepts in
-\secref{ss:primer} first. Otherwise, references to more detailed
-reading are given after each example, just in case they don't quite do
-what you want.
-
-\subsection{\ldots Obtain and Install AST}
-The AST library is available both as a stand-alone package and also as
-part of the Starlink Software Collection\footnote{The Starlink Software
-Collection can be downloaded from
-\htmladdnormallink{http://www.starlink.ac.uk/Download/}
-{http://www.starlink.ac.uk/Download/}.}. If your site has the Starlink
-Software Collection installed then AST should already be available.
-
-If not, you can download the AST library by itself from
-\htmladdnormallink{http://www.starlink.ac.uk/ast/}
-{http://www.starlink.ac.uk/ast/}.
-
-\subsection{\ldots Structure an AST Program}
-
-An AST program normally has the following structure:
-
-\begin{quote}
-\small
-\begin{verbatim}
-/* Include the interface to the AST library. */
-#include "ast.h"
-
-/* Main program (or could be any function). */
-main () {
- <normal C declarations and statements>
-
-/* Enclose the parts which use AST between the astBegin and astEnd macros. */
- astBegin;
- <C statements which use AST>
- astEnd;
-
- <maybe more C statements>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The use of \htmlref{astBegin}{astBegin} and \htmlref{astEnd}{astEnd} is optional, but has the effect of
-tidying up after you have finished using AST, so is normally
-recommended. For more details of this, see \secref{ss:contexts}. For
-details of how to access the ``ast.h'' header file, see
-\secref{ss:accessingheaderfile}.
-
-\subsection{\label{ss:howtobuild}\ldots Build an AST Program}
-
-To build a simple AST program that doesn't use graphics, use:
-
-\begin{quote}
-\small
-\begin{verbatim}
-cc program.c -L/star/lib -I/star/include `ast_link` -o program
-\end{verbatim}
-\normalsize
-\end{quote}
-
-To build a program which uses PGPLOT for graphics, use:
-
-\begin{quote}
-\small
-\begin{verbatim}
-cc program.c -L/star/lib `ast_link -pgplot` -o program
-\end{verbatim}
-\normalsize
-\end{quote}
-
-For more details about accessing the ``ast.h'' header file, see
-\secref{ss:accessingheaderfile}. For more
-details about linking programs, see \secref{ss:linking} and the
-description of the ``\htmlref{ast\_link}{ast_link}'' command in
-\appref{ss:commanddescriptions}.
-
-\subsection{\label{ss:howtoreadwcs}\ldots Read a WCS Calibration from a Dataset}
-
-Precisely how you extract world coordinate system (WCS) information
-from a dataset obviously depends on what type of dataset it
-is. Usually, however, you should be able to obtain a set of FITS
-header cards which contain the WCS information (and probably much more
-besides). Suppose that ``cards'' is a pointer to a string
-containing a complete set of concatenated FITS header cards (such as
-produced by the CFITSIO function fits\_hdr2str). Then proceed as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-fitsfile *fptr;
-AstFitsChan *fitschan;
-AstFrameSet *wcsinfo;
-char *header;
-int nkeys, status;
-
-...
-
-/* Obtain all the cards in the header concatenated into a single dynamically
- allocated null-terminated character string. Note, we do not exclude
- any cards since we may later modify the WCS information within the
- header and consequently want to write the entire header out again. */
- if( fits_hdr2str( fptr, 0, NULL, 0, &header, &nkeys, &status ) )
- printf(" Error getting header\n");
- ...
-
-/* Header obtained succesfully... */
- } else {
-
-/* Create a FitsChan and fill it with FITS header cards. */
- fitschan = astFitsChan( NULL, NULL, "" );
- astPutCards( fitschan, header );
-
-/* Free the memory holding the concatenated header cards. */
- header = free( header );
-
-/* Read WCS information from the FitsChan. */
- wcsinfo = astRead( fitschan );
-
- ...
-
-\end{verbatim}
-\normalsize
-\end{quote}
-
-
-The result should be a pointer, ``wcsinfo'', to a \htmlref{FrameSet}{FrameSet} which
-contains the WCS information. This pointer can now be used to perform
-many useful tasks, some of which are illustrated in the following
-recipes.
-
-Some datasets which do not easily yield FITS header cards may require
-a different approach, possibly involving use of a \htmlref{Channel}{Channel} or \htmlref{XmlChan}{XmlChan}
-(\secref{ss:channels}) rather than a \htmlref{FitsChan}{FitsChan}. In the case of the
-Starlink NDF data format, for example, all the above may be replaced
-by a single call to the function
-\xref{ndfGtwcs}{sun33}{ndfGtwcs}---see \xref{SUN/33}{sun33}{}. The
-whole process can probably be encapsulated in a similar way for
-most data systems, whether they use FITS header cards or not.
-
-For more details about reading WCS information from datasets, see
-\secref{ss:identifyingfitsencoding} and
-\secref{ss:readingforeignfits}. For a more general description of
-FitsChans and their use with FITS header cards, see
-\secref{ss:nativefits} and \secref{ss:foreignfits}. For more details
-about FrameSets, see \secref{ss:framesets} and \secref{ss:fshigher}.
-
-\subsection{\ldots Validate WCS Information}
-
-Once you have read WCS information from a dataset, as in
-\secref{ss:howtoreadwcs}, you may wish to check that you have been
-successful. The following will detect and classify the things that
-might possibly go wrong:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include <string.h>
-
-...
-
-if ( !astOK ) {
- <an error occurred (a message will have been issued)>
-} else if ( wcsinfo == AST__NULL ) {
- <there was no WCS information present>
-} else if ( strcmp( astGetC( wcsinfo, "Class" ), "FrameSet" ) ) {
- <something unexpected was read (i.e. not a FrameSet)>
-} else {
- <WCS information was read OK>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-For more information about detecting errors in AST functions, see
-\secref{ss:errordetection}. For details of how to validate input data
-read by AST, see \secref{ss:validatinginput} and
-\secref{ss:readingforeignfits}.
-
-\subsection{\ldots Display AST Data}
-
-If you have a pointer to any AST \htmlref{Object}{Object}, you can display the data
-stored in that Object in textual form as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astShow( wcsinfo );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, we have used a pointer to the \htmlref{FrameSet}{FrameSet} which we read earlier
-(\secref{ss:howtoreadwcs}). The result is written to the program's
-standard output stream. This can be very useful during debugging.
-
-For more details about using \htmlref{astShow}{astShow}, see
-\secref{ss:displayingobjects}. For information about interpreting the
-output, also see \secref{ss:textualoutputformat}.
-
-\subsection{\label{ss:howtotransform}\ldots Convert Between Pixel and World Coordinates}
-
-You may use a pointer to a \htmlref{FrameSet}{FrameSet}, such as we read in
-\secref{ss:howtoreadwcs}, to transform a set of points between the
-pixel coordinates of an image and the associated world coordinates. If
-you are working in two dimensions, proceed as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-double xpixel[ N ], ypixel[ N ];
-double xworld[ N ], yworld[ N ];
-
-...
-
-astTran2( wcsinfo, N, xpixel, ypixel, 1, xworld, yworld );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, N is the number of points to be transformed, ``xpixel'' and
-``ypixel'' hold the pixel coordinates, and ``xworld'' and ``yworld''
-receive the returned world coordinates.\footnote{By pixel coordinates,
-we mean a coordinate system in which the first pixel in the image is
-centred on (1,1) and each pixel is a unit square. Note that the world
-coordinates will not necessarily be celestial coordinates, but if they
-are, then they will be in radians.} To transform in the opposite
-direction, interchange the two pairs of arrays (so that the world
-coordinates are given as input) and change the fifth argument of
-\htmlref{astTran2}{astTran2} to zero.
-
-To transform points in one dimension, use \htmlref{astTran1}{astTran1}. In any other
-number of dimensions (or if the number of dimensions is initially
-unknown), use \htmlref{astTranN}{astTranN} or \htmlref{astTranP}{astTranP}. These functions are described in
-\appref{ss:functiondescriptions}.
-
-For more information about transforming coordinates, see
-\secref{ss:transforming} and \secref{ss:framesetasmapping}. For
-details of how to handle missing coordinates, see
-\secref{ss:badcoordinates}.
-
-\subsection{\label{ss:howtotestforcelestial}\ldots Test if a WCS is a Celestial Coordinate System}
-
-The world coordinate system (WCS) currently associated with an image
-may often be a celestial coordinate system, but this need not
-necessarily be the case. For instance, instead of right ascension and
-declination, an image might have a WCS with axes representing
-wavelength and slit position, or maybe just plain old pixels.
-
-If you have obtained a WCS calibration for an image, as in
-\secref{ss:howtoreadwcs}, in the form of a pointer ``wcsinfo'' to a
-\htmlref{FrameSet}{FrameSet}, then you may determine if the current coordinate system is a
-celestial one or not, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFrame *frame;
-int issky;
-
-...
-
-/* Obtain a pointer to the current Frame and determine if it is a
- SkyFrame. */
-frame = astGetFrame( wcsinfo, AST__CURRENT );
-issky = astIsASkyFrame( frame );
-frame = astAnnul( frame );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This will set ``issky'' to 1 if the WCS is a celestial coordinate
-system, and to zero otherwise.
-
-\subsection{\label{ss:howtotestforspectral}\ldots Test if a WCS is a Spectral Coordinate System}
-Testing for a spectral coordinate system is basically the same as testing
-for a celestial coordinate system (see the previous section). The one
-difference is that you use the
-astIsASpecFrame function
-in place of the
-astIsASkyFrame function.
-
-\subsection{\label{ss:howtoformatcoordinates}\ldots Format Coordinates for Display}
-
-Once you have converted pixel coordinates into world coordinates
-(\secref{ss:howtotransform}), you may want to format them as text
-before displaying them. Typically, this would convert from (say)
-radians into something more comprehensible. Using the \htmlref{FrameSet}{FrameSet} pointer
-``wcsinfo'' obtained in \secref{ss:howtoreadwcs} and a pair of world
-coordinates ``xw'' and ``yw'' ({\em{e.g.}}\ see
-\secref{ss:howtotransform}), you could proceed as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include <stdio.h>
-const char *xtext, *ytext;
-double xw, yw;
-
-...
-
-xtext = astFormat( wcsinfo, 1, xw );
-ytext = astFormat( wcsinfo, 2, yw );
-
-(void) printf( "Position = %s, %s\n", xtext, ytext );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, the second argument to \htmlref{astFormat}{astFormat} is the axis number.
-
-With celestial coordinates, this will usually result in sexagesimal
-notation, such as ``12:34:56.7''. However, the same method may be
-applied to any type of coordinates and appropriate formatting will be
-employed.
-
-For more information about formatting coordinate values and how to
-control the style of formatting used, see
-\secref{ss:formattingaxisvalues} and
-\secref{ss:formattingskyaxisvalues}. If necessary, also see
-\secref{ss:normalising} for details of how to ``normalise'' a set of
-coordinates so that they lie within the standard range ({\em{e.g.}}\ 0
-to 24 hours for right ascension and $\pm 90^\circ$ for
-declination).
-
-\subsection{\ldots Display Coordinates as they are Transformed}
-
-In addition to formatting coordinates as part of a program's output,
-you may also want to examine coordinate values while debugging your
-program. To save time, you can ``eavesdrop'' on the coordinate values
-being processed every time they are transformed. For example, when
-using the \htmlref{FrameSet}{FrameSet} pointer ``wcsinfo'' obtained in
-\secref{ss:howtoreadwcs} to transform coordinates
-(\secref{ss:howtotransform}), you could inspect the coordinate values
-as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSet( wcsinfo, "Report=1" );
-astTran2( wcsinfo, N, xpixel, ypixel, 1, xworld, yworld );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-By setting the FrameSet's \htmlref{Report}{Report} attribute to 1, coordinate
-transformations are automatically displayed on the program's standard
-output stream, appropriately formatted, for example:
-
-\begin{quote}
-\begin{verbatim}
-(42.1087, 20.2717) --> (2:06:03.0, 34:22:39)
-(43.0197, 21.1705) --> (2:08:20.6, 35:31:24)
-(43.9295, 22.0716) --> (2:10:38.1, 36:40:09)
-(44.8382, 22.9753) --> (2:12:55.6, 37:48:55)
-(45.7459, 23.8814) --> (2:15:13.1, 38:57:40)
-(46.6528, 24.7901) --> (2:17:30.6, 40:06:25)
-(47.5589, 25.7013) --> (2:19:48.1, 41:15:11)
-(48.4644, 26.6149) --> (2:22:05.6, 42:23:56)
-(49.3695, 27.5311) --> (2:24:23.1, 43:32:41)
-(50.2742, 28.4499) --> (2:26:40.6, 44:41:27)
-\end{verbatim}
-\end{quote}
-
-For a complete description of the Report attribute, see its entry in
-\appref{ss:attributedescriptions}. For further details of how to set
-and enquire attribute values, see \secref{ss:settingattributes} and
-\secref{ss:gettingattributes}.
-
-\subsection{\ldots Read Coordinates Entered by a User}
-
-In addition to writing out coordinate values generated by your program
-(\secref{ss:howtoformatcoordinates}), you may also need to accept
-coordinates entered by a user, or perhaps read from a file. In this
-case, you will probably want to allow ``free-format'' input, so that
-the user has some flexibility in the format that can be used. You will
-probably also want to detect any typing errors.
-
-Let's assume that you want to read a number of lines of text, each
-containing the world coordinates of a single point, and to split each
-line into individual numerical coordinate values. Using the \htmlref{FrameSet}{FrameSet}
-pointer ``wcsinfo'' obtained earlier (\secref{ss:howtoreadwcs}), you
-could proceed as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include <stdio.h>
-char *t;
-char text[ MAXCHARS + 2 ];
-double coord[ 10 ];
-int iaxis, n, naxes;
-
-...
-
-/* Obtain the number of coordinate axes (if not already known). */
-naxes = astGetI( wcsinfo, "Naxes" );
-
-/* Loop to read each line of input text, in this case from the
- standard input stream (your programming environment will probably
- provide a better way of reading text than this). Set the pointer
- "t" to the start of each line read. */
-while ( t = fgets( text, MAXCHARS + 2, stdin ) ) {
-
-/* Attempt to read a coordinate for each axis. */
- for ( iaxis = 1; iaxis <= naxes; iaxis++ ) {
- n = astUnformat( wcsinfo, iaxis, t, &coord[ iaxis - 1 ] );
-
-/* If nothing was read and this is not the first axis or the
- end-of-string, try stepping over a separator and reading again. */
- if ( !n && ( iaxis > 1 ) && *t )
- n = astUnformat( wcsinfo, iaxis, ++t, &coord[ iaxis - 1 ] );
-
-/* Quit if nothing was read, otherwise move on to the next coordinate. */
- if ( !n ) break;
- t += n;
- }
-
-/* Test for the possible errors that may occur... */
-
-/* Error detected by AST (a message will have been issued). */
- if ( !astOK ) {
- break;
-
-/* Error in input data at character t[n]. */
- } else if ( *t || !n ) {
- <handle the error, or report your own message here>
- break;
-
- } else {
- <coordinates were read OK>
- }
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This algorithm has the advantage of accepting free-format input in
-whatever style is appropriate for the world coordinates in use (under
-the control of the FrameSet whose pointer you provide). For example,
-wavelength values might be read as floating point numbers
-({\em{e.g.}}\ ``1.047'' or ``4787''), whereas celestial positions
-could be given in sexagesimal format ({\em{e.g.}}\ ``12:34:56'' or
-``12~34.5'') and would be converted into radians. Individual
-coordinate values may be separated by white space and/or any
-non-ambiguous separator character, such as a comma.
-
-For more information on reading coordinate values using the
-\htmlref{astUnformat}{astUnformat} function, see \secref{ss:unformattingaxisvalues}. For
-details of how sexagesimal formats are handled, and the forms of input
-that may be used for celestial coordinates, see
-\secref{ss:unformattingskyaxisvalues}.
-
-\subsection{\label{ss:howtocreatenewwcs}\ldots Create a New WCS Calibration}
-
-This section describes how to add a WCS calibration to a data set which you
-are creating from scratch, rather than modifying an existing data set.
-
-In most common cases, the simplest way to create a new WCS calibration
-from scratch is probably to create a set of strings describing the
-required calibration in terms of the keywords used by the FITS WCS
-standard, and then convert these strings into an AST \htmlref{FrameSet}{FrameSet} describing
-the calibration. This FrameSet can then be used for many other purposes, or
-simply stored in the data set.
-
-The full FITS-WCS standard is quite involved, currently running to four
-separate papers, but the basic kernel is quite simple, involving the
-following keywords (all of which end with an integer axis index,
-indicated below by $<i>$):
-
-\begin{description}
-\item[CRPIX<i>]\mbox{}\\
-hold the pixel coordinates at a reference point
-\item[CRVAL<i>]\mbox{}\\
-hold the corresponding WCS coordinates at the reference point
-\item[CTYPE<i>]\mbox{}\\
-name the quantity represented by the WCS axes, together with the
-projection algorithm used to convert the scaled and rotated pixel coordinates
-to WCS coordinates.
-\item[CD<i>\_<j>]\mbox{}\\
-a set of keywords which specify the elements of a matrix. This matrix scales
-pixel offsets from the reference point into the offsets required as input
-by the projection algorithm specified by the CTYPE keywords. This matrix
-specifies the scale and rotation of the image. If there is no rotation
-the off-diagonal elements of the matrix (\emph{e.g.} CD1\_2 and
-CD2\_1) can be omitted.
-\end{description}
-
-As an example consider the common case of a simple 2D image of the sky in
-which north is parallel to the second pixel axis and east parallel to the
-(negative) first pixel axis. The image scale is 1.2 arc-seconds per pixel
-on both axes, and the image is presumed to have been obtained with a
-tangent plane projection. Furthermore, it is known that pixel coordinates
-(100.5,98.4) correspond to an RA of 11:00:10 and a Dec. of -23:26:02.
-A suitable set of FITS-WCS header cards could be:
-
-\begin{quote}
-\small
-\begin{verbatim}
-CTYPE1 = 'RA---TAN' / Axis 1 represents RA with a tan projection
-CTYPE2 = 'DEC--TAN' / Axis 2 represents Dec with a tan projection
-CRPIX1 = 100.5 / Pixel coordinates of reference point
-CRPIX2 = 98.4 / Pixel coordinates of reference point
-CRVAL1 = 165.04167 / Degrees equivalent of "11:00:10" hours
-CRVAL2 = -23.433889 / Decimal equivalent of "-23:26:02" degrees
-CD1_1 = -0.0003333333 / Decimal degrees equivalent of -1.2 arc-seconds
-CD2_2 = 0.0003333333 / Decimal degrees equivalent of 1.2 arc-seconds
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Notes:
-\begin{itemize}
-\item a FITS header card begins with the keyword name starting at column 1,
-has an equals sign in column 9, and the keyword value in columns 11 to 80.
-\item string values must be enclosed in single quotes.
-\item celestial longitude and latitude must both be specified in decimal degrees.
-\item the CD1\_1 value is negative to indicate that RA increases as the
-first pixel axis decreases.
-\item the (RA,Dec) coordinates will be taken as ICRS coordinates. For FK5
-you should add:
-
-\begin{quote}
-\small
-\begin{verbatim}
-RADESYS = 'FK5'
-EQUINOX = 2005.6
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The EQUINOX value defaults to J2000.0 if omitted. FK4 can also be used in
-place of FK5, in which case EQUINOX defaults to B1950.0.
-
-\end{itemize}
-
-Once you have created these FITS-WCS header card strings, you should
-store them in a \htmlref{FitsChan}{FitsChan} and then read the corresponding FrameSet from the
-FitsChan. How to do this is described in \secref{ss:howtoreadwcs}.
-
-Having created the WCS calibration, you may want to store it in a data
-file. How to do this is described in \secref{ss:howtowritewcs}).\footnote{If
-you are writing the WCS calibration to a FITS file you obviously
-have the choice of storing the FITS-WCS cards directly.}
-
-If the required WCS calibration cannot be described as a set of FITS-WCS
-headers, then a different approach is necessary. In this case, you should
-first create a \htmlref{Frame}{Frame} describing pixel coordinates, and store this Frame
-in a new FrameSet. You should then create a new Frame describing the
-world coordinate system. This Frame may be a specific subclass of Frame such
-as a \htmlref{SkyFrame}{SkyFrame} for celestial coordinates, a \htmlref{SpecFrame}{SpecFrame} for spectral
-coordinates, a Timeframe for time coordinates, or a \htmlref{CmpFrame}{CmpFrame} for a combination
-of different coordinates.
-You also need to create a suitable \htmlref{Mapping}{Mapping} which transforms pixel
-coordinates into world coordinates. AST provides many different types of
-Mappings, all of which can be combined together in arbitrary fashions to
-create more complicated Mappings. The WCS Frame should then be added into
-the FrameSet, using the Mapping to connect the WCS Frame with the pixel
-Frame.
-
-\subsection{\label{ss:howtomodifywcs}\ldots Modify a WCS Calibration}
-
-The usual reason for wishing to modify the WCS calibration associated
-with a dataset is that the data have been geometrically transformed in
-some way (here, we will assume a 2-dimensional image dataset). This
-causes the image features (stars, galaxies, {\em{etc.}}) to move with
-respect to the grid of pixels which they occupy, so that any
-coordinate systems previously associated with the image become
-invalid.
-
-To correct for this, it is necessary to set up a \htmlref{Mapping}{Mapping} which
-expresses the positions of image features in the new data grid in
-terms of their positions in the old grid. In both cases, the grid
-coordinates we use will have the first pixel centred at (1,1) with
-each pixel being a unit square.
-
-AST allows you to correct for any type of geometrical transformation
-in this way, so long as a suitable Mapping to describe it can be
-constructed. For purposes of illustration, we will assume here that
-the new image coordinates ``xnew'' and ``ynew'' can be expressed in
-terms of the old coordinates ``xold'' and ``yold'' as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-double xnew, xold, ynew, yold;
-double m[ 4 ], z[ 2 ];
-
-...
-
-xnew = xold * m[ 0 ] + yold * m[ 1 ] + z[ 0 ];
-ynew = xold * m[ 2 ] + yold * m[ 3 ] + z[ 1 ];
-\end{verbatim}
-\normalsize
-\end{quote}
-
-where ``m'' is a 2$\times$2 transformation matrix and ``z'' represents
-a shift of origin. This is therefore a general linear coordinate
-transformation which can represent displacement, rotation,
-magnification and shear.
-
-In AST, it can be represented by concatenating two Mappings. The first
-is a \htmlref{MatrixMap}{MatrixMap}, which implements the matrix multiplication. The second
-is a \htmlref{WinMap}{WinMap}, which linearly transforms one coordinate window on to
-another, but will be used here simply to implement the shift of
-origin (alternatively, a \htmlref{ShiftMap}{ShiftMap} could have been used in place of a
-WinMap). These Mappings may be constructed and concatenated as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstCmpMap *newmap;
-AstMatrixMap *matrixmap;
-AstWinMap *winmap;
-
-...
-
-/* The MatrixMap may be constructed directly from the matrix "m". */
-matrixmap = astMatrixMap( 2, 2, 0, m, "" );
-
-/* For the WinMap, we set up the coordinates of the corners of a unit
- square (window) and then the same square shifted by the required
- amount. */
-{
- double ina[] = { 0.0, 0.0 };
- double inb[] = { 1.0, 1.0 };
- double outa[] = { z[ 0 ], z[ 1 ] };
- double outb[] = { 1.0 + z[ 0 ], 1.0 + z[ 1 ] };
-
-/* The WinMap will then implement this shift. */
- winmap = astWinMap( 2, ina, inb, outa, outb, "" );
-}
-
-/* Join the two Mappings together, so that they are applied one after
- the other. */
-newmap = astCmpMap( matrixmap, winmap, 1, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-You might, of course, create any other form of Mapping depending on
-the type of geometrical transformation involved. For an overview of
-the Mappings provided by AST, see \secref{ss:mappingselection}, and
-for a description of the capabilities of each class of Mapping, see
-its entry in \appref{ss:classdescriptions}. For an overview of how
-individual Mappings may be combined, see \secref{ss:cmpmapoverview}
-(\secref{ss:cmpmaps} gives more details).
-
-Assuming you have obtained a WCS calibration for your original image
-in the form of a pointer to a \htmlref{FrameSet}{FrameSet}, ``wcsinfo1''
-(\secref{ss:howtoreadwcs}), the Mapping created above may be used to
-produce a calibration for the new image as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFrameSet *wcsinfo1, *wcsinfo2;
-
-...
-
-/* If necessary, make a copy of the WCS calibration, since we are
- about to alter it. */
-wcsinfo2 = astCopy( wcsinfo1 );
-
-/* Re-map the base Frame so that it refers to the new data grid
- instead of the old one. */
-astRemapFrame( wcsinfo2, AST__BASE, newmap );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This will produce a pointer, ``wcsinfo2'', to a new FrameSet in which
-all the coordinate systems associated with your original image are
-modified so that they are correctly registered with the new image
-instead.
-
-For more information about re-mapping the Frames within a FrameSet,
-see \secref{ss:remapframe}. Also see \secref{ss:wcsprocessingexample}
-for a similar example to the above, applicable to the case of reducing
-the size of an image by binning.
-
-\subsection{\label{ss:howtowritewcs}\ldots Write a Modified WCS Calibration to a Dataset}
-
-If you have modified the WCS calibration associated with a dataset,
-such as in the example above (\secref{ss:howtomodifywcs}), then you
-will need to write the modified version out along with any new data.
-
-In the same way as when reading a WCS calibration
-(\secref{ss:howtoreadwcs}), how you do this will depend on your data
-system, but we will assume that you wish to generate a set of FITS
-header cards that can be stored with the data. You should usually make
-preparations for doing this when you first read the WCS calibration
-from your input dataset by modifying the example given in
-\secref{ss:howtoreadwcs} as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFitsChan *fitschan1;
-AstFrameSet *wcsinfo1;
-const char *encode;
-
-...
-
-/* Create an input FitsChan and fill it with FITS header cards. Note,
- if you have all the header cards in a single string, use astPutCards in
- place of astPutFits. */
-fitschan1 = astFitsChan( NULL, NULL, "" );
-for ( icard = 0; icard < ncard; icard++ ) astPutFits( fitschan1, cards[ icard ], 0 );
-
-/* Note which encoding has been used for the WCS information. */
-encode = astGetC( fitschan1, "Encoding" );
-
-/* Rewind the input FitsChan and read the WCS information from it. */
-astClear( fitschan1, "Card" );
-wcsinfo1 = astRead( fitschan1 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note how we have added an enquiry to determine how the WCS information
-is encoded in the input FITS cards, storing a pointer to the resulting
-string in the ``encode'' variable. This must be done {\bf{before}}
-actually reading the WCS calibration.
-
-{\em{({\bf{N.B.}}\ If you will be making extensive use of astGetC in
-your program, then you should allocate a buffer and make a copy of
-this string, because the pointer returned by astGetC will only remain
-valid for 50 invocations of the function, and you will need to use the
-\htmlref{Encoding}{Encoding} value again later on.)}}
-
-Once you have produced a modified WCS calibration for the output
-dataset ({\em{e.g.}}\ \secref{ss:howtomodifywcs}), in the form of a
-\htmlref{FrameSet}{FrameSet} identified by the pointer ``wcsinfo2'', you can produce a new
-\htmlref{FitsChan}{FitsChan} containing the output FITS header cards as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFitsChan *fitschan2;
-AstFrameSet *wcsinfo2;
-
-...
-
-/* Make a copy of the input FitsChan, AFTER the WCS information has
- been read from it. This will propagate all the input FITS header
- cards, apart from those describing the input WCS calibration. */
-fitschan2 = astCopy( fitschan1 );
-
-/* If necessary, make modifications to the cards in "fitschan2"
- (e.g. you might need to change NAXIS1, NAXIS2, etc., to account for
- a change in image size). You probably only need to do this if your
- data system does not provide these facilities itself. */
-<details not shown - see below>
-
-/* Alternatively, if your data system handles the propagation of FITS
- header cards to the output dataset for you, then simply create an
- empty FitsChan to contain the output WCS information alone.
-fitschan2 = astFitsChan( NULL, NULL, "" );
-*/
-
-/* Rewind the new FitsChan (if necessary) and attempt to write the
- output WCS information to it using the same encoding method as the
- input dataset. */
-astSet( fitschan2, "Card=1, Encoding=%s", encode );
-if ( !astWrite( fitschan2, wcsinfo2 ) ) {
-
-/* If this didn't work (the WCS FrameSet has become too complex), then
- use the native AST encoding instead. */
- astSet( fitschan2, "Encoding=NATIVE" );
- (void) astWrite( fitschan2, wcsinfo2 );
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-For details of how to modify the contents of the output FitsChan in
-other ways, such as by adding, over-writing or deleting header cards,
-see \secref{ss:addressingfitscards}, \secref{ss:addingmulticards}, \secref{ss:addingfitscards} and
-\secref{ss:findingandchangingfits}.
-
-Once you have assembled the output FITS cards, you may retrieve them
-from the FitsChan that contains them as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include <stdio.h>
-char card[ 81 ];
-
-...
-
-astClear( fitschan2, "Card" );
-while ( astFindFits( fitschan2, "%f", card, 1 ) ) (void) printf( "%s\n", card );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, we have simply written each card to the standard output stream,
-but you would obviously replace this with a function invocation to
-store the cards in your output dataset.
-
-For data systems that do not use FITS header cards, a different
-approach may be needed, possibly involving use of a \htmlref{Channel}{Channel} or \htmlref{XmlChan}{XmlChan}
-(\secref{ss:channels}) rather than a FitsChan. In the case of the
-Starlink NDF data format, for example, all of the above may be
-replaced by a single call to the function
-\xref{ndfPtwcs}{sun33}{ndfPtwcs}---see \xref{SUN/33}{sun33}{}. The
-whole process can probably be encapsulated in a similar way for most
-data systems, whether they use FITS header cards or not.
-
-For an overview of how to propagate WCS information through data
-processing steps, see \secref{ss:propagatingwcsinformation}. For more
-information about writing WCS information to FitsChans, see
-\secref{ss:writingnativefits} and \secref{ss:writingforeignfits}. For
-information about the options for encoding WCS information in FITS
-header cards, see \secref{ss:nativeencoding},
-\secref{ss:foreignencodings}, and the description of the Encoding
-attribute in \appref{ss:attributedescriptions}. For a complete
-understanding of FitsChans and their use with FITS header cards, you
-should read \secref{ss:nativefits} and \secref{ss:foreignfits}.
-
-\subsection{\label{ss:howtoplotgrid}\ldots Display a Graphical Coordinate Grid}
-
-\begin{latexonly}
- A common requirement when displaying image data is to plot an
- associated coordinate grid ({\em{e.g.}}\ Figure~\ref{fig:overgrid})
- over the displayed image.
- \begin{figure}
- \begin{center}
- \includegraphics[scale=0.7]{sun211_figures/overgrid_bw.eps}
- \caption{An example of a displayed image with a coordinate grid
- plotted over it.}
- \label{fig:overgrid}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- A common requirement when displaying image data is to plot an
- associated coordinate grid over the displayed image ({\em{e.g.}}\
- the following Figure):
- \begin{quote}
- \begin{figure}[bhtp]
- \label{fig:overgrid}
- \includegraphics[scale=0.8]{sun211_figures/overgrid.eps}
- \caption{An example of a displayed image with a coordinate grid
- plotted over it.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-The use of AST in such circumstances is independent of the underlying
-graphics system, so starting up the graphics system, setting up a
-coordinate system, displaying the image, and closing down afterwards
-can all be done using the graphics functions you would normally use.
-
-However, displaying an image at a precise location can be a little
-fiddly with some graphics systems, and obviously the grid drawn by AST
-will not be accurately registered with the image unless this is done
-correctly. In the following template, we therefore illustrate both
-steps, basing the image display on the C interface to the PGPLOT
-graphics package.\footnote{An interface is provided with AST that
-allows it to use PGPLOT (\xref{SUN/15}{sun15}{}) for its graphics,
-although interfaces to other graphics systems may also be written.}
-Plotting a coordinate grid with AST then becomes a relatively minor
-part of what is almost a complete graphics program.
-
-Once again, we assume that a pointer, ``wcsinfo'', to a suitable
-\htmlref{FrameSet}{FrameSet} associated with the image has already been obtained
-(\secref{ss:howtoreadwcs}).
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "cpgplot.h"
-AstPlot *plot;
-const float *data;
-float hi, lo, scale, x1, x2, xleft, xright, xscale;
-float y1, y2, ybottom, yscale, ytop;
-int nx, ny;
-
-...
-
-/* Access the image data, which we assume has dimension sizes "nx" and
- "ny", and will be accessed via the "data" pointer. Also derive
- limits for scaling it, which we assign to the variables "hi" and
- "lo". */
-<this stage depends on your data system, so is not shown>
-
-/* Open PGPLOT using the device given by environment variable
- PGPLOT_DEV and check for success. */
-if( cpgbeg( 0, " ", 1, 1 ) == 1 ) {
-
-/* Clear the screen and ensure equal scales on both axes. */
- cpgpage();
- cpgwnad( 0.0f, 1.0f, 0.0f, 1.0f );
-
-/* Obtain the extent of the plotting area (not strictly necessary for
- PGPLOT, but possibly for other graphics systems). From this, derive
- the display scale in graphics units per pixel so that the image
- will fit within the display area. */
- cpgqwin( &x1, &x2, &y1, &y2 );
- xscale = ( x2 - x1 ) / nx;
- yscale = ( y2 - y1 ) / ny;
- scale = ( xscale < yscale ) ? xscale : yscale;
-
-/* Calculate the extent of the area in graphics units that the image
- will occupy, so as to centre it within the display area. */
- xleft = 0.5f * ( x1 + x2 - nx * scale );
- xright = 0.5f * ( x1 + x2 + nx * scale );
- ybottom = 0.5f * ( y1 + y2 - ny * scale );
- ytop = 0.5f * ( y1 + y2 + ny * scale );
-
-/* Set up a PGPLOT coordinate transformation matrix and display the
- image data as a grey scale map (these details are specific to
- PGPLOT). */
- {
- float tr[] = { xleft - 0.5f * scale, scale, 0.0f,
- ybottom - 0.5f * scale, 0.0f, scale };
- cpggray( data, nx, ny, 1, nx, 1, ny, hi, lo, tr );
- }
-
-/* BEGINNING OF AST BIT */
-/* ==================== */
-/* Store the locations of the bottom left and top right corners of the
- region used to display the image, in graphics coordinates. */
- {
- float gbox[] = { xleft, ybottom, xright, ytop };
-
-/* Similarly, store the locations of the image's bottom left and top
- right corners, in pixel coordinates -- with the first pixel centred
- at (1,1). */
- double pbox[] = { 0.5, 0.5, nx + 0.5, ny + 0.5 };
-
-/* Create a Plot, based on the FrameSet associated with the
- image. This attaches the Plot to the graphics surface so that it
- matches the displayed image. Specify that a complete set of grid
- lines should be drawn (rather than just coordinate axes). */
- plot = astPlot( wcsinfo, gbox, pbox, "Grid=1" );
- }
-
-/* Optionally, we can now set other Plot attributes to control the
- appearance of the grid. The values assigned here use the
- colour/font indices defined by the underlying graphics system. */
- astSet( plot, "Colour(grid)=2, Font(textlab)=3" );
-
-/* Use the Plot to draw the coordinate grid. */
- astGrid( plot );
-
- <maybe some more AST graphics here>
-
-/* Annul the Plot when finished (or use the astBegin/astEnd technique
- shown earlier). */
- plot = astAnnul( plot );
-
-/* END OF AST BIT */
-/* ============== */
-
-/* Close down the graphics system. */
- cpgend();
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note that once you have set up a \htmlref{Plot}{Plot} which is aligned with a
-displayed image, you may also use it to generate further graphical
-output of your own, specified in the image's world coordinate system
-(such as markers to represent astronomical objects, annotation,
-{\em{etc.}}). There is also a range of Plot attributes which gives
-control over most aspects of the output's appearance. For details of
-the facilities available, see \secref{ss:plots} and the description of
-the Plot class in \appref{ss:classdescriptions}.
-
-For details of how to build a graphics program which uses PGPLOT, see
-\secref{ss:howtobuild} and the description of the \htmlref{ast\_link}{ast_link} command in
-\appref{ss:commanddescriptions}.
-
-\subsection{\label{ss:howtoswitchgrid}\ldots Switch to Plot a Different Celestial Coordinate Grid}
-
-Once you have set up a \htmlref{Plot}{Plot} to draw a coordinate grid
-(\secref{ss:howtoplotgrid}), it is a simple matter to change things so
-that the grid represents a different celestial coordinate system. For
-example, after creating the Plot with \htmlref{astPlot}{astPlot}, you could use:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSet( plot, "System=Galactic" );
-\end{verbatim}
-\normalsize
-\end{quote}
-or:
-\begin{quote}
-\small
-\begin{verbatim}
-astSet( plot, "System=FK5, Equinox=J2010" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-and any axes and/or grid drawn subsequently would represent the new
-celestial coordinate system you specified. Note, however, that this
-will only work if the original grid represented celestial coordinates
-of some kind (see \secref{ss:howtotestforcelestial} for how to
-determine if this is the case\footnote{Note that the methods applied
-to a \htmlref{FrameSet}{FrameSet} may be used equally well with a Plot.}). If it did not,
-you will get an error message.
-
-For more information about the celestial coordinate systems available,
-see the descriptions of the \htmlref{System}{System}, \htmlref{Equinox}{Equinox} and \htmlref{Epoch}{Epoch} attributes in
-\appref{ss:attributedescriptions}.
-
-\subsection{\ldots Give a User Control Over the Appearance of a Plot}
-
-The idea of using a \htmlref{Plot}{Plot}'s attributes to control the appearance of the
-graphical output it produces (\secref{ss:howtoplotgrid} and
-\secref{ss:howtoswitchgrid}) can easily be extended to allow the user
-of a program complete control over such matters.
-
-For instance, if the file ``plot.config'' contains a series of
-plotting options in the form of Plot attribute assignments (see below
-for an example), then we could create a Plot and implement these
-assignments before producing the graphical output as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include <stdio.h>
-#define MAXCHARS 120
-FILE *stream;
-char line[ MAXCHARS + 2 ];
-int base;
-
-...
-
-/* Create a Plot and define the default appearance of the graphical
- output it will produce. */
-plot = astPlot( wcsinfo, gbox, pbox,
- "Grid=1, Colour(grid)=2, Font(textlab)=3" );
-
-/* Obtain the value of any Plot attributes we want to preserve. */
-base = astGetI( plot, "Base" );
-
-/* Open the plot configuration file, if it exists. Read each line of
- text and use it to set new Plot attribute values. Close the file
- when done. */
-if ( stream = fopen( "plot.config", "r" ) ) {
- while ( fgets( line, MAXCHARS + 2, stream ) ) astSet( plot, "%s", line );
- close( stream );
-}
-
-/* Restore any attribute values we are preserving. */
-astSetI( plot, "Base", base );
-
-/* Produce the graphical output (e.g.). */
-astGrid( plot );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Notice that we take care that the Plot's \htmlref{Base}{Base} attribute is preserved
-so that the user cannot change it. This is because graphical output
-will not be produced successfully if the base \htmlref{Frame}{Frame} does not describe
-the plotting surface to which we attached the Plot when we created it.
-
-The arrangement shown above allows the contents of the ``plot.config''
-file to control most aspects of the graphical output produced
-(including the coordinate system used; the colour, line style,
-thickness and font used for each component; the positioning of axes
-and tick marks; the precision, format and positioning of labels;
-{\em{etc.}}) {\em{via}} assignments of the form:
-
-\begin{quote}
-\small
-\begin{verbatim}
-System=Galactic, Equinox = 2001
-Border = 1, Colour( border ) = 1
-Colour( grid ) = 2
-DrawAxes = 1
-Colour( axes ) = 3
-Digits = 8
-Labelling = Interior
-\end{verbatim}
-\normalsize
-\end{quote}
-
-For a more sophisticated interface, you could obviously perform
-pre-processing on this input---for example, to translate words like
-``red'', ``green'' and ``blue'' into colour indices, to permit
-comments and blank lines, {\em{etc.}}
-
-For a full list of the attributes that may be used to control the
-appearance of graphical output, see the description of the Plot class
-in \appref{ss:classdescriptions}. For a complete description of each
-individual attribute ({\em{e.g.}}\ those above), see the attribute's
-entry in \appref{ss:attributedescriptions}.
-
-\cleardoublepage
-\section{\label{ss:primer}An AST Object Primer}
-
-The AST library deals throughout with entities called Objects and a
-basic understanding of how to handle these is needed before you can
-use the library effectively. If you are already familiar with an
-object-oriented language, such as C$++$, few of the concepts should
-seem new to you. Be aware, however, that AST is designed to be used
-{\em{via}} fairly conventional C and Fortran interfaces, so some
-things have to be done a little differently.
-
-If you are not already familiar with object-oriented programming, then
-don't worry---we will not emphasise this aspect more than is necessary
-and will not assume any background knowledge. Instead, this section
-concentrates on presenting all the fundamental information you will
-need, explaining how AST Objects behave and how to manipulate them
-from conventional C programs.
-
-If you like to read documents from cover to cover, then you can
-consider this section as an introduction to the programming techniques
-used in the rest of the document. Otherwise, you may prefer to skim
-through it on a first reading and return to it later as reference
-material.
-
-\subsection{AST Objects}
-
-An AST \htmlref{Object}{Object} is an entity which is used to store information and
-Objects come in various kinds, called {\em{classes,}} according to the
-sort of information they hold. Throughout this section, we will make
-use of a simple Object belonging to the ``\htmlref{ZoomMap}{ZoomMap}'' class to
-illustrate many of the basic concepts.
-
-A ZoomMap is an Object that contains a recipe for converting
-coordinates between two hypothetical coordinate systems. It does this
-by multiplying all the coordinate values by a constant called the
-{\em{\htmlref{Zoom}{Zoom} factor.}} A ZoomMap is a very simple Object which exists
-mainly for use in examples. It allows us to illustrate the ways in
-which Objects are manipulated and to introduce the concept of a
-\htmlref{Mapping}{Mapping}---a recipe for converting coordinates---which is fundamental
-to the way the AST library works.
-
-\subsection{\label{ss:objectcreation}Object Creation and Pointers}
-
-Let us first consider how to create a \htmlref{ZoomMap}{ZoomMap}. This is done very
-simply as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-AstZoomMap *zoommap;
-
-...
-
-zoommap = astZoomMap( 2, 5.0, "" )
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The first step is to include the header file ``ast.h'' which declares
-the interface to the AST library. We then declare a pointer of type
-AstZoomMap$*$ to receive the result and invoke the function \htmlref{astZoomMap}{astZoomMap}
-to create the ZoomMap. The pattern is the same for all other classes
-of AST \htmlref{Object}{Object}---you simply prefix ``ast'' to the class name to obtain
-the function that creates the Object and prefix ``Ast'' to obtain the
-type of the returned pointer.
-
-These functions are called {\em{constructor functions,}} or simply
-{\em{constructors}} (you can find an individual description of all AST
-functions in \appref{ss:functiondescriptions}) and the arguments
-passed to the constructor are used to initialise the new Object. In
-this case, we specify 2 as the number of coordinates ({\em{i.e.}}\ we
-are going to work in a 2-dimensional
-space) and 5.0 as the \htmlref{Zoom}{Zoom} factor to be applied. Note that this is a C
-double value. We will return to the final argument, an empty string,
-shortly (\secref{ss:attributeinitialisation}).
-
-The value returned by the constructor is termed an {\em{Object pointer}}
-or, in this case, a {\em{ZoomMap pointer}} and is used to refer to the
-Object. You perform all subsequent operations on the Object by
-passing this pointer to other AST functions.
-
-\subsection{\label{ss:objecthierarchy}The Object Hierarchy}
-
-Now that we have created our first \htmlref{ZoomMap}{ZoomMap}, let us examine how it
-relates to other kinds of \htmlref{Object}{Object} before investigating what we can do
-with it.
-
-We have so far indicated that a ZoomMap is a kind of Object and have
-also mentioned that it is a kind of \htmlref{Mapping}{Mapping} as well. These statements
-can be represented very simply using the following hierarchy:
-
-\begin{quote}
-\small
-\begin{verbatim}
-Object
- Mapping
- ZoomMap
-\end{verbatim}
-\normalsize
-\end{quote}
-
-which is a way of stating that a ZoomMap is a special class of
-Mapping, while a Mapping, in turn, is a special class of Object. This
-is exactly like saying that an Oak is a special form of Tree, while a
-Tree, in turn, is a special form of Plant. This may seem almost
-trivial, but before you turn to read something less dull, be assured
-that it is a very important idea to keep in mind in what follows.
-
-If we look at some of the other Objects used by the AST library, we
-can see how these are all related in a similar way (don't worry about
-what they do at this stage):
-\label{ss:mappinghierarchy}
-
-\begin{quote}
-\small
-\begin{verbatim}
-Object
- Mapping
- Frame
- FrameSet
- Plot
- UnitMap
- ZoomMap
- Channel
- FitsChan
- XmlChan
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Notice that there are several different types of Mapping available
-({\em{i.e.}}\ there are classes of Object indented beneath the
-``Mapping'' heading) and, in addition, other types of Object which are
-not Mappings---Channels for instance (which are at the same
-hierarchical level as Mappings).
-
-The most specialised Object we have shown here is the \htmlref{Plot}{Plot} (which we
-will not discuss in detail until \secref{ss:plots}). As you can see, a
-Plot is a \htmlref{FrameSet}{FrameSet}\ldots\ and a \htmlref{Frame}{Frame}\ldots\ and a Mapping\ldots\ and,
-like everything else, ultimately an Object.
-
-What this means is that you can use a Plot not only for its own
-specialised behaviour, but also whenever any of these other
-less-specialised classes of Object is called for. The general rule is
-that an Object of a particular class may substitute for any of the
-classes appearing above it in this hierarchy. The Object is then said
-to {\em{inherit}} the behaviour of these higher classes. We can
-therefore use our ZoomMap whenever a ZoomMap, a Mapping or an Object
-is called for.
-
-Sometimes, this can lead to some spectacular short-cuts by avoiding
-the need to break large Objects down in order to access their
-components. With some practice and a little lateral thinking you
-should soon be able to spot opportunities for this.
-
-You can find the full {\em{class hierarchy}}, as this is called, for
-the AST library in \appref{ss:classhierarchy} and you may need to
-refer to it occasionally until you are familiar with the classes you
-need to use.
-
-\subsection{\label{ss:displayingobjects}Displaying Objects}
-
-Let us now return to the \htmlref{ZoomMap}{ZoomMap} that we created earlier
-(\secref{ss:objectcreation}) and examine what it's made of.
-There is a function for doing this, called \htmlref{astShow}{astShow}, which is provided
-mainly for looking at Objects while you are debugging programs.
-
-If you consult the description of astShow in
-\appref{ss:functiondescriptions}, you will find that it takes a
-pointer to an \htmlref{Object}{Object} (of type AstObject$*$) as its argument. Although
-we have only a ZoomMap pointer available, this is not a problem. If
-you refer to the brief class hierarchy described above
-(\secref{ss:mappinghierarchy}), you will see that a ZoomMap is an
-Object, albeit a specialised one, so it inherits the properties of all
-Objects and can be substituted wherever an Object is required. We can
-therefore pass our ZoomMap pointer directly to astShow, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astShow( zoommap );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The output from this will appear on the standard output stream and
-should look like the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
-Begin ZoomMap
- Nin = 2
-IsA Mapping
- Zoom = 5
-End ZoomMap
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, the ``Begin'' and ``End'' lines mark the beginning and end of
-the ZoomMap, while the values 2 and 5 are simply the values we
-supplied to initialise it (\secref{ss:objectcreation}). These have
-been given simple names to make them easy to refer to.
-
-The line in the middle which says ``IsA~\htmlref{Mapping}{Mapping}'' is a dividing line
-between the two values. It indicates that the ``\htmlref{Nin}{Nin}'' value is a
-property shared by all Mappings, so the ZoomMap has inherited this
-from its {\em{parent class}} (Mapping). The ``\htmlref{Zoom}{Zoom}'' value, however,
-is specific to a ZoomMap and isn't shared by other kinds of Mappings.
-
-\subsection{\label{ss:gettingattributes}Getting Attribute Values}
-
-We saw above (\secref{ss:displayingobjects}) how to display the
-internal values of an \htmlref{Object}{Object}, but what about accessing these values
-from a program? Not all internal Object values are accessible in this
-way, but many are. Those that are, are called {\em{attributes}}. A
-description of all the attributes used by the AST library can be found
-in \appref{ss:attributedescriptions}.
-
-Attributes come in several data types (character string, integer,
-boolean and floating point) and there is a standard way of obtaining
-their values. As an example, consider obtaining the value of the \htmlref{Nin}{Nin}
-attribute for the \htmlref{ZoomMap}{ZoomMap} created earlier. This could be done as
-follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int nin;
-
-...
-
-nin = astGetI( zoommap, "Nin" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, the function astGetI is used to extract the attribute value by
-giving it the ZoomMap pointer and the attribute name (attribute names
-are not case sensitive, but we have used consistent capitalisation in
-this document in order to identify them). Remember to use the
-``ast.h'' header file to include the function prototype.
-
-If we had wanted the value of the \htmlref{Zoom}{Zoom} attribute, we would probably
-have used astGetD instead, this being a double version of the same
-function, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-double zoom;
-
-...
-
-zoom = astGetD( zoommap, "Zoom" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-However, we could equally well have read the Nin value as double, or
-the Zoom value as an integer, or whatever we wanted.
-
-The data type you want returned is specified simply by replacing the
-final character of the astGetX function name with C~(character
-string), D~(double), F~(float), I~(int) or L~(long). If possible, the
-value is converted to the type you want. If not, an error message will
-result. Note that all floating point values are stored internally as
-double, and all integer values as int. Boolean values are also stored
-as integers, but only take the values 1 and 0 (for true/false).
-
-\subsection{\label{ss:settingattributes}Setting Attribute Values}
-
-Some attribute values are read-only and cannot be altered after an
-\htmlref{Object}{Object} has been created. The \htmlref{Nin}{Nin} attribute of a \htmlref{ZoomMap}{ZoomMap} (describing
-the number of coordinates) is like this. It is defined when the
-ZoomMap is created, but cannot then be altered.
-
-Other attributes, however, can be modified whenever you want. A
-ZoomMap's \htmlref{Zoom}{Zoom} attribute is like this. If we wanted to change it, this
-could be done simply as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSetD( zoommap, "Zoom", 99.6 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-which sets the value to 99.6. As when getting an attribute value
-(\secref{ss:gettingattributes}), you have a choice of which data type
-you will use to supply the new value. For instance, you could use an
-integer value, as in:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSetI( zoommap, "Zoom", 99 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-and the necessary data conversion would occur. You specify the data
-type you want to supply simply by replacing the final character of the
-astSetX function name with C~(character string), D~(double),
-F~(float), I~(int) or L~(long). Setting a boolean attribute to any
-non-zero integer causes it to take the value 1.
-
-An alternative way of setting attribute values for Objects is to use
-the \htmlref{astSet}{astSet} function ({\em{i.e.}}\ with no final character specifying a
-data type). In this case, you supply the attribute values in a
-character string. The big advantage of this method is that you can
-assign values to several attributes at once, separating them with
-commas. This also reads more naturally in programs. For example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSet( zoommap, "Zoom=99.6, Report=1" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-would set values for both the Zoom attribute and the \htmlref{Report}{Report} attribute
-(about which more shortly---\secref{ss:transforming}). You don't really
-have to worry about data types with this method, as any character
-representation will do.
-
-Another attractive feature of astSet is that you can build the
-character string which contains the attribute settings in the same way
-as when using the C run time library ``printf'' function. This is most
-useful when the values you want to set are held in other
-variables. For example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-double zoom = 99.6;
-int report = 1;
-
-...
-
-astSet( zoommap, "Zoom=%g, Report=%d", zoom, report );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-would replace the ``\%'' conversion specifications by the values
-supplied as additional arguments. Any number of additional arguments
-may be supplied and the formatting rules are exactly the same as for
-the C ``printf'' family of functions. This is a very flexible
-technique, but does contain one pitfall:
-
-\begin{quote}
-{\bf{Pitfall.}} The default precision used by ``printf'' (and astSet)
-for floating point values is only 6 decimal digits, corresponding
-approximately to float on most machines, whereas the AST library
-stores such values internally as doubles. You should be careful to
-specify a larger precision (such as DBL\_DIG, as defined in
-$<$float.h$>$) when necessary. For example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include <float.h>
-
-...
-
-astSet( zoommap, "Zoom=%.*g", DBL_DIG, double_value );
-\end{verbatim}
-\normalsize
-\end{quote}
-\end{quote}
-
-Substituted strings may contain commas and this is a useful way of
-assigning such strings as attribute values without the comma being
-interpreted as an assignment separator, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSet( object, "Attribute=%s", "A string, containing a comma" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This is equivalent to using astSetC and one of these two methods
-should always be used when assigning string attribute values which
-might potentially contain a comma ({\em{e.g.}}\ strings obtained from
-an external source). However, you should not attempt to use astSet to
-substitute strings that contain newline characters, since these are
-used internally as separators between adjacent attribute assignments.
-\label{ss:attributeinitialisation}
-
-Finally, a very convenient way of setting attribute values is to do so
-at the same time as you create an Object. Every Object constructor
-function has a final character string argument which allows you to do
-this. Although you can simply supply an empty string, it is an ideal
-opportunity to initialise the Object to have just the attributes you
-want. For example, we might have created our original ZoomMap with:
-
-\begin{quote}
-\small
-\begin{verbatim}
-zoommap = astZoomMap( 2, 5.0, "Report=1" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-and it would then start life with its Report attribute set to 1.
-The ``printf''-style substitution described above may also be used
-here.
-
-\subsection{\label{ss:defaultingattributes}Testing, Clearing and Defaulting Attributes}
-
-You can use the astGetX family of functions
-(\secref{ss:gettingattributes}) to get a value for any \htmlref{Object}{Object} attribute
-at any time, regardless of whether a value has previously been set for
-it. If no value has been set, the AST library will generate a suitable
-default value.
-
-Often, the default value of an attribute will not simply be trivial
-(zero or blank) but may involve considerable processing to
-calculate. Wherever possible, defaults are designed to be real-life,
-sensible values that convey information about the state of the
-Object. In particular, they may often be based on the values of other
-attributes, so their values may change in response to changes in these
-other attributes. The \htmlref{ZoomMap}{ZoomMap} class that we have studied so far is a
-little too simple to show this behaviour, but we will meet it later
-on.
-
-An attribute that returns a default value in this way is said to be
-{\em{un-set.}} Conversely, once an explicit value has been assigned to
-an attribute, it becomes {\em{set}} and will always return precisely
-that value, never a default.
-
-The distinction between set and un-set attributes is important and
-affects the behaviour of several key routines in the AST library. You
-can test if an attribute is set using the function \htmlref{astTest}{astTest}, which
-returns a boolean (integer) result, as in:
-
-\begin{quote}
-\small
-\begin{verbatim}
-if ( astTest( zoommap, "Report" ) ) {
- <the Report attribute is set>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-
-Once an attribute is set, you can return it to its un-set state using
-\htmlref{astClear}{astClear}. The effect is as if it had never been set in the first
-place. For example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astClear( zoommap, "Report" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-would ensure that the default value of the \htmlref{Report}{Report} attribute is used
-subsequently.
-
-%\subsection{TBW--Handling Character Attributes}
-
-\subsection{\label{ss:transforming}Transforming Coordinates}
-
-We now have the necessary apparatus to start using our \htmlref{ZoomMap}{ZoomMap} to show
-what it is really for. Here, we will also encounter a routine that is
-a little more fussy about the type of pointer it will accept.
-
-The purpose of a ZoomMap is to multiply coordinates by a constant zoom
-factor. To witness this in action, we will first set the \htmlref{Report}{Report}
-attribute for our ZoomMap to a non-zero value:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSet( zoommap, "Report=1" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This boolean (integer) attribute, which is present in all Mappings
-(and a ZoomMap is a \htmlref{Mapping}{Mapping}), causes the automatic display of all
-coordinate values that the Mapping converts. It is not a good idea to
-leave this feature turned on in a finished program, but it can save a
-lot of work during debugging.
-
-Our next step is to set up some coordinates for the ZoomMap to work
-on, using two arrays ``xin'' and ``yin'', and two arrays to receive
-the transformed coordinates, ``xout'' and ``yout''. Note that these
-are arrays of double, as are all coordinate data processed by the AST
-library:
-
-\begin{quote}
-\small
-\begin{verbatim}
-double xin[ 10 ] = { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 };
-double yin[ 10 ] = { 0.0, 2.0, 4.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0, 18.0 };
-double xout[ 10 ];
-double yout[ 10 ];
-\end{verbatim}
-\normalsize
-\end{quote}
-
-We will now use the function \htmlref{astTran2}{astTran2} to transform the input
-coordinates. This is the most commonly-used (2-dimensional) coordinate
-transformation function. If you look at its description in
-\appref{ss:functiondescriptions}, you will see that it requires a
-pointer to a Mapping, so we cannot supply just any old \htmlref{Object}{Object} pointer,
-as we could with the functions discussed previously. If we passed it a
-pointer to an inappropriate Object, an error message would result.
-
-Fortunately, a ZoomMap is a Mapping (\appref{ss:classhierarchy}), so we
-can use it with astTran2 to transform our coordinates, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astTran2( zoommap, 10, xin, yin, 1, xout, yout );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, 10 is the number of points we want to transform and the fifth
-argument value of 1 indicates that we want to transform in the
-{\em{forward}} direction (from input to output).
-
-Because our ZoomMap's Report attribute is set to 1, this will cause
-the effects of the ZoomMap on the coordinates to be displayed on the
-standard output stream:
-
-\begin{quote}
-\small
-\begin{verbatim}
-(0, 0) --> (0, 0)
-(1, 2) --> (5, 10)
-(2, 4) --> (10, 20)
-(3, 6) --> (15, 30)
-(4, 8) --> (20, 40)
-(5, 10) --> (25, 50)
-(6, 12) --> (30, 60)
-(7, 14) --> (35, 70)
-(8, 16) --> (40, 80)
-(9, 18) --> (45, 90)
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This shows the coordinate values of each point both before and after
-the ZoomMap is applied. You can see that each coordinate value has
-been multiplied by the factor 5 determined by the \htmlref{Zoom}{Zoom} attribute
-value. The transformed coordinates are now stored in the ``xout'' and
-``yout'' arrays.
-
-If we wanted to transform in the opposite direction, we need simply
-change the fifth argument of astTran2 from 1 to 0. We can also feed
-the output coordinates from the above back into the function:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astTran2( zoommap, 10, xout, yout, 0, xin, yin );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The output would then look like:
-
-\begin{quote}
-\small
-\begin{verbatim}
-(0, 0) --> (0, 0)
-(5, 10) --> (1, 2)
-(10, 20) --> (2, 4)
-(15, 30) --> (3, 6)
-(20, 40) --> (4, 8)
-(25, 50) --> (5, 10)
-(30, 60) --> (6, 12)
-(35, 70) --> (7, 14)
-(40, 80) --> (8, 16)
-(45, 90) --> (9, 18)
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This is termed the {\em{inverse}} transformation (we have converted
-from output to input) and you can see that the original coordinates
-have been recovered by dividing by the Zoom factor.
-
-\subsection{\label{ss:annullingpointers}Managing Object Pointers}
-
-So far, we have looked at creating Objects and using them in various
-simple ways but have not yet considered how to get rid of them again.
-
-Every \htmlref{Object}{Object} consumes various computer resources (principally memory)
-and should be disposed of when it is no longer required, so as to free
-up these resources. One way of doing this (not necessarily the
-best---\secref{ss:contexts}) is to {\em{annul}} each Object pointer once
-you have finished with it, using \htmlref{astAnnul}{astAnnul}. For example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-zoommap = astAnnul( zoommap );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This indicates that you have finished with the pointer. Since astAnnul
-always returns the null value AST\_\_NULL (as defined in ``ast.h''),
-the recommended way of using it, as here, is to assign the returned
-value to the pointer being annulled. This ensures that any attempt to
-use the pointer again will generate an error message.
-
-In general, this process may not delete the Object, because there may
-still be other pointers associated with it. However, each Object
-maintains a count of the number of pointers associated with it and
-will be deleted if you annul the final pointer. Using astAnnul
-consistently will therefore ensure that all Objects are disposed of at
-the correct time. You can determine how many pointers are associated
-with an Object by examining its (read-only) \htmlref{RefCount}{RefCount} attribute.
-
-\subsection{\label{ss:contexts}AST Pointer Contexts---Begin and End}
-
-The use of \htmlref{astAnnul}{astAnnul} (\secref{ss:annullingpointers}) is not completely
-foolproof, however. Consider the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astShow( astZoomMap( 2, 5.0, "" ) );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This creates a \htmlref{ZoomMap}{ZoomMap} and displays it on standard output
-(\secref{ss:displayingobjects}). Using function invocations as
-arguments to other functions in this way is very convenient because it
-avoids the need for intermediate pointer variables. However, the
-pointer generated by \htmlref{astZoomMap}{astZoomMap} is still active, and since we have not
-stored its value, we cannot use astAnnul to annul it. The ZoomMap will
-therefore stay around until the end of the program.
-
-A simple way to avoid this problem is to enclose all use of AST
-functions between invocations of \htmlref{astBegin}{astBegin} and \htmlref{astEnd}{astEnd}, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astBegin;
-astShow( astZoomMap( 2, 5.0, "" ) );
-astEnd;
-\end{verbatim}
-\normalsize
-\end{quote}
-
-When the expansion of astEnd (which is a macro) executes, every \htmlref{Object}{Object}
-pointer created since the previous use of astBegin (also a macro) is
-automatically annulled and any Objects left without pointers are
-deleted. This provides a simple solution to managing Objects and their
-pointers, and allows you to create Objects very freely without needing
-to keep detailed track of each one. Because this is so convenient, we
-implicitly assume that astBegin and astEnd are used in most of the
-examples given in this document. Pointer management is not generally
-shown explicitly unless it is particularly relevant to the point being
-illustrated.
-
-If necessary, astBegin and astEnd may be nested, like blocks delimited
-by ``\{\ldots\}'' in C, to define a series of AST pointer
-contexts. Each use of astEnd will then annul only those Object
-pointers created since the matching use of astBegin.
-
-\subsection{Exporting, Importing and Exempting AST Pointers}
-The \htmlref{astExport}{astExport} function allows you to export particular pointers from
-one AST context (\secref{ss:contexts}) to the next outer one, as
-follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astExport( zoommap );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This would identify the pointer stored in ``zoommap'' as being required
-after the end of the current AST context. It causes any pointers
-nominated in this way to survive the next use of \htmlref{astEnd}{astEnd} (but only one
-such use) unscathed, so that they are available to the next outer
-context. This facility is not needed often, but is invaluable when
-the purpose of your \htmlref{astBegin}{astBegin}\ldots astEnd block is basically to
-generate an \htmlref{Object}{Object} pointer. Without this, there is no way of getting
-that pointer out.
-
-
-The \htmlref{astImport}{astImport} routine can be used in a similar manner to import a
-pointer into the current context, so that it is deleted when the current
-context is closed using astEnd.
-
-Sometimes, you may also want to exempt a pointer from all the effects
-of AST contexts. You should not need to do this often, but it will
-prove essential if you ever need to write a library of functions that
-stores AST pointers as part of its own internal data. Without some
-form of exemption, the caller of your routines could cause the
-pointers you have stored to be annulled---thus corrupting your
-internal data---simply by using astEnd. To avoid this, you should use
-\htmlref{astExempt}{astExempt} on each pointer that you store, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astExempt( zoommap );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This will prevent the pointer being affected by any subsequent use of
-astEnd. Of course, it then becomes your responsibility to annul this
-pointer (using \htmlref{astAnnul}{astAnnul}) when it is no longer required.
-
-
-\subsection{AST Objects within Multi-threaded Applications}
-
-When the AST library is built from source, the build process checks to
-see if the POSIX threads library (``{\tt pthreads}'') is available. If so,
-appropriate {\tt pthreads} calls are inserted into the AST source code to
-ensure that AST is thread-safe, and the AST\_\_THREADSAFE macro (defined
-in the ``ast.h'' header file) is set to ``{\tt 1}''. If the {\tt pthreads}
-library cannot be found when AST is built, a working version of the AST
-library will still be created, but it will not be thread-safe. In this
-case the AST\_\_THREADSAFE macro will be set to ``{\tt 0}'' in ast.h. The
-rest of this section assumes that the thread-safe version of AST is being
-used.
-
-Note, some AST functions call externally specified functions (\emph{e.g.}
-the source and sink functions used by the \htmlref{Channel}{Channel} class or the graphics
-primitives functions used by the \htmlref{Plot}{Plot} class). AST does not know whether
-such functions are thread-safe or not. For this reason, invocations of these
-functions within a multi-threaded environment are serialised using a mutex
-in order to avoid two or more threads executing an external function
-simultaneously.
-
-If an application uses more than one thread, the possibility arises that
-an \htmlref{Object}{Object} created by one thread may be accessed by another thread, potentially
-simultaneously. If any of the threads modifies any aspect of the Object,
-this could lead to serious problems within the other threads. For this
-reason, some restrictions are placed on how Objects can be used in a
-multi-threaded application.
-
-\subsubsection{Locking AST Objects for Exclusive Use}
-The basic restriction is that a thread can only access Objects that it
-has previously locked for its own exclusive use. If a thread attempts to
-access any \htmlref{Object}{Object} that it has not locked, an error is reported.
-
-The \htmlref{astAnnul}{astAnnul} function is the one exception to this restriction. Pointers
-for Objects not currently locked by the calling thread can be annulled
-succesfully using astAnnul. This means that a thread that has finished
-with an Object pointer can unlock the Object by passing the pointer to
-\htmlref{astUnlock}{astUnlock} (so that other threads can use the Object via their own cloned
-pointers), and can then annul the pointer using astAnnul. Note, however,
-that an error will be reported by astAnnul if the supplied pointer has
-been locked by another thread using \htmlref{astLock}{astLock}.
-
-When an Object is created, it is initially locked by the calling thread.
-Therefore a thread does not need to lock an Object explicitly if it was
-created in the same thread.
-
-If the Object pointer is then passed to another thread, the first thread
-must unlock the Object using astUnlock and the second thread must then lock
-it using astLock.
-
-If a thread attempts to lock an Object that is already locked by another
-thread, it can choose to report an error immediately or to wait until the
-Object is available.
-
-The \htmlref{astThread}{astThread} function can be used to determine whether an Object is
-locked by the running thread, locked by another thread, or unlocked.
-
-If two or more threads need simultaneous access to an Object, a deep copy
-of the Object should be taken for each thread, using \htmlref{astCopy}{astCopy}, and then
-the copies should be unlocked and passed to the othe threads, which
-should then lock them. Note, if a thread modifies the Object, the
-modification will have no effect on the other threads, because the Object
-copies are independent of each other.
-
-\subsubsection{AST Pointer Contexts}
-
-Each thread maintains its own set of nested AST contexts, so when \htmlref{astEnd}{astEnd}
-is called, only Objects that are locked by the current thread will
-be annulled.
-
-If an \htmlref{Object}{Object} is unlocked by a thread using \htmlref{astUnlock}{astUnlock}, it is exempted from
-context handling so that subsequent invocations of astEnd will not cause it
-to be annulled (this is similar to using \htmlref{astExempt}{astExempt} on the Object). When the
-Object is subsequently locked by another thread using \htmlref{astLock}{astLock}, it will be
-imported into the context that was active when astLock was called.
-
-
-
-\subsection{\label{ss:copyingobjects}Copying Objects}
-
-The AST library makes extensive use of pointers, not only for
-accessing Objects directly, but also as a means of storing Objects
-inside other Objects (a number of classes of \htmlref{Object}{Object} are designed to
-hold collections of other Objects). Rather than copy an Object in its
-entirety, a pointer to the interior Object is simply stored in the
-enclosing Object.
-
-This means that Objects may frequently not be completely independent
-of each other because, for instance, they both contain pointers to the
-same sub-Object. In this situation, changing one Object (say assigning
-an attribute value) may affect the other one {\em{via}} the common
-Object.
-
-It is difficult to describe all cases where this may happen, so you
-should always be alert to the possibility. Fortunately, there is a
-simple solution. If you require two Objects to be independent, then
-simply use \htmlref{astCopy}{astCopy} to make a copy of one, {\em{e.g:}}
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstZoomMap *zoommap1, *zoommap2;
-
-...
-
-zoommap2 = astCopy( zoommap1 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This process will create a true copy of any Object and return a
-pointer to the copy. This copy will not contain any pointers to any
-component of the original Object (everything is duplicated), so you
-can then modify it safely, without fear of affecting either the
-original or any other Object.
-
-%\subsection{TBW - Inheritance}
-
-\subsection{C Pointer Types}
-
-At this point it is necessary to confess to a small amount of
-deception. So far, we have been passing \htmlref{Object}{Object} pointers to AST
-functions in order to perform operations on those Objects. In fact,
-however, what we were using were not true C functions at all, but
-merely macros which invoke a related set of hidden functions with
-essentially the same arguments. In practical terms, this makes very
-little difference to how you use the functions, as we will continue to
-call them.\footnote{About the only difference is that you cannot store
-a pointer to an AST ``function'' in a variable and use the variable's
-value to invoke that function again later.}
-
-The reason for this deception has to do with the rules for data typing
-in C. Recall that most AST functions can be used to process Objects
-from a range of different classes (\secref{ss:objecthierarchy}). In C,
-this means passing different pointer types to the same function and
-most C compilers will not permit this (at least, not without
-grumbling) because it usually indicates a programming error. In AST,
-however, it is perfectly safe if done properly. Some way is therefore
-needed of circumventing the normal compiler checking.
-
-The normal way of doing this in C is with a cast. This approach
-quickly becomes cumbersome, however, so we have adopted the strategy
-of wrapping each function in a macro which applies the appropriate
-cast for you. This means that you can pass pointers of any type to any
-AST function. For example, in passing a \htmlref{ZoomMap}{ZoomMap} pointer to \htmlref{astShow}{astShow}:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstZoomMap *zoommap;
-
-...
-
-zoommap = astZoomMap( 2, 5.0, "" );
-astShow( zoommap );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-we are exploiting this mechanism to avoid a compiler warning, because
-the notional type of astShow's parameter is AstObject$*$ (not
-AstZoomMap$*$).
-
-We must still guard against programming errors, however, so every
-pointer's type is checked by the enclosing macro immediately before
-any AST function executes. This allows pointer mis-matches (in the
-more liberal AST sense---{\em{i.e.}}\ taking account of the class
-hierarchy, rather than the stricter C sense) to be detected at
-run-time and a suitable error message will be reported. This message
-should also identify the line where the error occurs.
-
-A similar strategy is used when pointers are returned by AST functions
-({\em{i.e.}}\ as the function result). In this case the pointer is
-cast to void$*$, although we retain the notional pointer type in the
-function's documentation
-({\em{e.g.}}\ \appref{ss:functiondescriptions}). This allows you to
-assign function results to pointer variables without using an explicit
-cast. For example, the \htmlref{astRead}{astRead} function returns an Object pointer, but
-might be used to read (say) a ZoomMap as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstChannel *channel;
-AstZoomMap *zoommap;
-
-...
-
-zoommap = astRead( channel );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Strictly, there is a C pointer mis-match here, but it is ignored
-because the operation makes perfect sense to AST.
-
-{\bf{There is an important exception to this, however, in that
-constructor functions always return strongly-typed pointers.}} What
-we mean by this is that the returned pointer is never implicitly cast
-to void$*$. You must therefore match pointer types when you initially
-create an Object using its constructor, such as in the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstZoomMap *zoommap;
-
-...
-
-zoommap = astZoomMap( 2, 5.0, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-If the variable receiving the pointer is of a different type, an
-appropriate cast should be used, as in:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstMapping *mapping;
-
-...
-
-mapping = (AstMapping *) astZoomMap( 2, 5.0, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This is an encouragement for you to declare your pointer types
-consistently, since this is of great benefit to anyone trying to
-understand your software.
-
-Finally, we should also make one more small confession---AST pointers
-are not really pointers at all. Although they behave like pointers,
-the actual ``values'' stored are not the addresses of C data
-structures. This means that you cannot de-reference an AST pointer to
-examine the data within (although you can use astShow
-instead---\secref{ss:displayingobjects}). This is necessary so that AST
-pointers can be made unique even although several of them might
-reference the same Object.
-
-\subsection{\label{ss:errordetection}Error Detection}
-
-If an error occurs in an AST function (for example, if you supply an
-invalid argument, such as a pointer to the wrong class of \htmlref{Object}{Object}), an
-error message will be written to the standard error stream and the
-function will immediately return.
-
-To indicate than an error has occurred, an AST {\em{error status}}
-value is used. This integer value is stored internally by AST and is
-initially clear ({\em{i.e.}}\ set to zero\footnote{We will assume
-throughout that the ``OK'' value is zero, as it currently is. However,
-a different value could, in principle, be used if the environment in
-which AST is running requires it. This is why a simple interface is
-provided to isolate you from the actual value of the error status.}
-to indicate no error). If an error occurs, it becomes set to a
-different {\em{error value}}, which allows you to detect the error, as
-follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-zoommap = astZoomMap( 2, 5.0, "Title=My ZoomMap" );
-if ( !astOK ) {
- <an error has occurred>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The macro \htmlref{astOK}{astOK} is used to test whether the AST error status is still
-OK. In this example it would not be, because we have attempted to set
-a value for the \htmlref{Title}{Title} attribute of a \htmlref{ZoomMap}{ZoomMap} and a ZoomMap does not
-have such an attribute. The actual value of the AST error status can
-be obtained using the \htmlref{astStatus}{astStatus} macro, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int status;
-
-...
-
-
-status = astStatus;
-\end{verbatim}
-\normalsize
-\end{quote}
-
-A consequence of the AST error status being set is that almost all AST
-functions will subsequently cease to function and will instead simply
-return without action. This means that you do not need to use astOK
-to check for errors very frequently. Instead, you can usually simply
-invoke a succession of AST functions. If an error occurs in any of
-them, the following ones will do nothing and you can check for the
-error at the end, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astFunctionA( ... );
-astFunctionB( ... );
-astFunctionC( ... );
-if ( !astOK ) {
- <an error has occurred>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-There are, however, a few functions which do not adhere to this
-general rule and which will attempt to execute if the AST error status
-is set. These functions, such as \htmlref{astAnnul}{astAnnul}, are concerned with cleaning
-up and recovering resources. For example, in the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
-zoommap = astZoomMap( 2, 5.0, "" );
-
-astFunctionX( ... );
-astFunctionY( ... );
-astFunctionZ( ... );
-
-zoommap = astAnnul( zoommap );
-if ( !astOK ) {
- <an error has occurred>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-astAnnul will execute normally in order to recover the resources
-associated with the ZoomMap that was created earlier, regardless of
-whether an error has occurred in any of the intermediate functions.
-Functions which behave in this way are noted in the relevant
-descriptions in \appref{ss:functiondescriptions}.
-
-If a serious error occurs, you will probably want to abort your
-program, but sometimes you may want to recover and carry on. Because
-very few AST functions will execute once the AST error status has been
-set, you must first clear this status by using the \htmlref{astClearStatus}{astClearStatus}
-macro, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astClearStatus;
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This will restore the AST error status to its OK value, so that AST
-functions execute normally again.
-
-Occasionally, you may also need to set the AST error status to an
-explicit error value (see \secref{ss:channelsink} for an
-example). This is done using \htmlref{astSetStatus}{astSetStatus} and can be used to
-communicate to AST that an error has occurred in some other item of
-software, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int new_status;
-
-...
-
-astSetStatus( new_status );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The effect is that most AST routines will subsequently return without
-action, just as if an error had occurred within the AST library
-itself.
-
-\subsection{Sharing the Error Status}
-
-In some software, it is usual to maintain a single integer error
-status variable which is accessed by each function as it executes. If
-an error occurs, this status variable is set and other functions can
-detect this and take appropriate action.
-
-If you use AST in such a situation, it can be awkward to have a
-separate internal error status used by AST functions alone. To remedy
-this, AST is capable of sharing the error status variable used by any
-other software, so long as they use the same conventions
-({\em{i.e.}}\ a C int with the same ``OK'' value). To enable this
-facility, you should pass the address of your status variable to
-\htmlref{astWatch}{astWatch}, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int my_status;
-int *old_address;
-
-...
-
-old_address = astWatch( &my_status );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Henceforth, instead of using its own internal error status variable,
-AST will use the one you supply, so that it can detect errors flagged
-by other parts of your software. The address of the original error
-status variable is returned by astWatch, so you can restore the
-original behaviour later if necessary.
-
-Note that this facility is not available {\em{via}} the Fortran
-interface to the AST library.
-
-\cleardoublepage
-\section{\label{ss:mappings}Inter-Relating Coordinate Systems (Mappings)}
-
-In \secref{ss:primer} we used the \htmlref{ZoomMap}{ZoomMap} as an example of a
-\htmlref{Mapping}{Mapping}. We saw how it could be used to transform coordinates from its
-input to its output and back again (\secref{ss:transforming}). We also
-saw how its behaviour could be controlled by setting various
-attributes, such as the \htmlref{Zoom}{Zoom} factor and the \htmlref{Report}{Report} attribute that made
-it display coordinate values as it transformed them.
-
-In this section, we will look at Mappings a bit more thoroughly and
-explore the behaviour which is common to all the Mappings provided by
-AST. This is good background for what follows, because many of the
-Objects we discuss later will also turn out to be Mappings in various
-disguises.
-
-\subsection{\label{ss:mappingclass}The Mapping Class}
-
-Before we start, it is worth taking a quick look at the \htmlref{Mapping}{Mapping} class
-as a whole and some of the sub-classes it contains:
-
-\begin{quote}
-\begin{verbatim}
- Mapping
- CmpMap
- DssMap
- GrismMap
- IntraMap
- LutMap
- MathMap
- MatrixMap
- PermMap
- PolyMap
- SlaMap
- SpecMap
- TimeMap
- UnitMap
- WcsMap
- ZoomMap
-
- Frame
- <various types of Frame>
-\end{verbatim}
-\end{quote}
-
-The \htmlref{Frame}{Frame} sub-class has been separated out here because it is covered
-in detail in \secref{ss:frames}. We start by looking at the parent
-class, Mapping.
-
-AST does not provide a function to create a basic Mapping
-({\em{i.e.}}\ the astMapping constructor does not exist). This is
-because the Mapping class itself is ``virtual'' and basic Mappings are
-of no use in themselves. The Mapping class serves simply to contain
-the various specialised Mappings that exist.
-However, it provides more than just a convenient heading for them
-because it bestows all classes of Mapping with common properties
-({\em{e.g.}}\ attributes) and behaviour. By examining the Mapping
-class, we are therefore examining the things that all other Mappings
-have in common.
-
-\subsection{The Mapping Model}
-
-The concept of a \htmlref{Mapping}{Mapping} was illustrated in Figure~\ref{fig:mapping}.
-It is a black box which you can supply with a set of coordinate values
-in return for a set of transformed coordinates. The two sets are
-termed {\em{input}} and {\em{output}} coordinates. You can also go
-back the other way and transform output coordinates back into input
-coordinates, as we saw in \secref{ss:transforming}.
-
-\subsection{Input and Output Coordinate Numbers}
-
-In general, the number of coordinates you feed into a \htmlref{Mapping}{Mapping} to
-represent a single point need not be the same as the number that comes
-out. Often these numbers will be the same, and often they will both
-equal 2 (because 2-dimensional coordinate systems are common), but
-this needn't necessarily be the case.
-
-The number of coordinates required to specify an input point is
-represented by the integer attribute \htmlref{Nin}{Nin} and the number required to
-specify an output point is represented by \htmlref{Nout}{Nout}. These are read-only
-attributes common to all Mappings. Generally, their values are fixed
-when a Mapping is created.
-
-In \secref{ss:objectcreation}, we saw how the Nin attribute for a
-\htmlref{ZoomMap}{ZoomMap} was initialised by the call to the constructor function
-\htmlref{astZoomMap}{astZoomMap} which created it. In this case, the Nout attribute was not
-needed and it implicitly took the same value as Nin, but we could
-have enquired about its value had we wanted, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-AstZoomMap *zoommap;
-int nout;
-
-...
-
-nout = astGetI( zoommap, "Nout" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\subsection{Forward and Inverse Transformations}
-
-We stated earlier that a \htmlref{Mapping}{Mapping} may be used to transform coordinates
-either from input to output, or {\em{vice versa.}} These are termed
-its {\em{forward}} and {\em{inverse}} transformations.
-
-This statement was not quite accurate, however, because in general
-Mappings are only {\bf{potentially}} capable of working in both
-directions. In practice, coordinate transformation may only be
-feasible in one direction or the other because some functions are not
-easily inverted (they may be multi-valued, for instance). Allowance
-must be made for this, so each Mapping has two read-only boolean
-(integer) attributes, \htmlref{TranForward}{TranForward} and \htmlref{TranInverse}{TranInverse}, which indicate
-whether each transformation is available.
-
-A transformation is available if the corresponding attribute is
-non-zero, otherwise it is not.\footnote{Most of the Mappings provided
-by the AST library work in both directions, although the \htmlref{LutMap}{LutMap} can
-behave otherwise.} If you enquire about the value of these attributes,
-a value of 0 or 1 is returned. Attempting to use a Mapping to apply a
-transformation which is not available will result in an error.
-
-\subsection{\label{ss:invertingmappings}Inverting Mappings}
-
-An important attribute, common to all Mappings, is the \htmlref{Invert}{Invert}
-flag. This is a boolean (integer) attribute that can be assigned a new
-value at any time. If it is non-zero, it has the effect of
-interchanging the \htmlref{Mapping}{Mapping}'s input and output coordinates and the
-Mapping is then said to be {\em{inverted.}} By default, the Invert
-attribute is zero.
-
-There is no magic in this. There is no fancy arithmetic involved in
-inverting mathematical functions, for instance. The Invert flag is
-simply a switch that interchanges a Mapping's input and output
-ports. If it is non-zero, the Mapping's \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes are
-swapped, its \htmlref{TranForward}{TranForward} and \htmlref{TranInverse}{TranInverse} attributes are swapped, and
-when you ask for what was once the forward transformation you get the
-inverse transformation instead (and {\em{vice versa}}). When you
-return the Invert attribute to zero, or clear it, the Mapping returns
-to its original behaviour.
-
-Often, the actual value of the Invert attribute is unimportant and you
-simply wish to invert its boolean sense, so that what was the
-Mapping's input becomes its output and {\em{vice versa.}} This is most
-easily accomplished using \htmlref{astInvert}{astInvert}, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstMapping *mapping;
-
-...
-
-astInvert( mapping );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-If the Mapping you have happens to be the wrong way around, astInvert
-allows you to correct the problem.
-
-\subsection{Finding the Rate of Change of a Mapping Output}
-The
-\htmlref{astRate}{astRate}
-function can be used to find the rate of change of any \htmlref{Mapping}{Mapping} output
-with respect to any Mapping input, at a given input position. The method
-used produces good accuracy (typically a relative error of 10E-10 or
-less) but may require the Mapping to be evaluated 100 or more times.
-An estimate of the second derivative is also produced by this function.
-
-
-\subsection{Reporting Coordinate Transformations}
-
-We have already seen (\secref{ss:transforming}) how the boolean
-(integer) \htmlref{Report}{Report} attribute of a \htmlref{Mapping}{Mapping} works. If it is non-zero, the
-operation of transforming a set of coordinates will result in a report
-being written to standard output. This will display the coordinate
-values before and after transformation. It can save considerable time
-during program development by eliminating the need to add loops and
-output statements to your program.
-
-In a finished program, however, you should be careful that the Report
-attribute is not set to a non-zero value unless you want to see the
-output (there may often be rather a lot of this!). To help prevent
-unwanted output being produced by accident, the Report attribute is
-unusual in that its value is not preserved when a Mapping is copied
-using \htmlref{astCopy}{astCopy} (\secref{ss:copyingobjects}). Instead, it reverts to its
-default of zero ({\em{i.e.}}\ un-set) in the copy. It also reverts to
-zero when a Mapping is written out, {\em{e.g.}}\ to a file using a
-\htmlref{Channel}{Channel} (\secref{ss:channels}).
-
-%\subsection{TBW---More on Transforming Coordinates}
-
-\subsection{\label{ss:badcoordinates}Handling Missing (Bad) Coordinate Values}
-
-Even when coordinates can, in principle, be transformed in either
-direction by a \htmlref{Mapping}{Mapping}, there may still be instances where specific
-coordinate values cannot be handled. For example, the Mapping may be
-mathematically intractable ({\em{e.g.}}\ singular) in certain places,
-or it may map a subset of one space on to another, so that some points
-in one space are not represented in the other. Sky projections often
-show this behaviour, since it is quite common to project only half of
-the celestial sphere on to two dimensions, omitting points on the
-opposite side of the sky. There are many other examples.
-
-To indicate when coordinates cannot be transformed, for whatever
-reason, AST substitutes a special output coordinate value given by the
-macro AST\_\_BAD (as defined in the ``ast.h'' header file). Before
-making use of coordinates generated by any of the AST transformation
-functions, therefore, you may need to check for the presence of this
-value.
-
-Because coordinates with the value AST\_\_BAD can be generated in this
-way, all other AST functions are also capable of recognising this
-value and handling it appropriately. The coordinate transformation
-functions do this by propagating any missing input coordinate
-information through to their output. This means that if you supply
-coordinates with the value AST\_\_BAD, the returned coordinates are
-also likely to contain this value. Here, for example, is what happens
-if you use a \htmlref{ZoomMap}{ZoomMap} (with \htmlref{Zoom}{Zoom} factor 5) to transform such a set of
-coordinates:
-
-\begin{quote}
-\small
-\begin{verbatim}
-(0, 0) --> (0, 0)
-(<bad>, 2) --> (<bad>, 10)
-(2, 4) --> (10, 20)
-(3, 6) --> (15, 30)
-(4, <bad>) --> (20, <bad>)
-(5, 10) --> (25, 50)
-(<bad>, <bad>) --> (<bad>, <bad>)
-(7, 14) --> (35, 70)
-(8, 16) --> (40, 80)
-(9, 18) --> (45, 90)
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The AST\_\_BAD value is represented by the string ``$<$bad$>$''. This
-is a case of ``garbage in, garbage out'' but at least it's consistent
-garbage that you can recognise!
-
-Note how the presence of the AST\_\_BAD value in one input dimension
-does not necessarily result in the loss of information for all output
-dimensions. Sometimes, such loss will be unavoidable, but in general
-an attempt is made to preserve information as far as possible. The
-exact behaviour will depend on the Mapping involved.
-
-\subsection{\label{ss:unitmapexample}Example---the UnitMap}
-
-The \htmlref{UnitMap}{UnitMap} is the simplest of Mappings. It is a null \htmlref{Mapping}{Mapping}. Its
-purpose is simply to copy coordinate values, unaltered, from its input
-to its output and {\em{vice versa.}}
-
-A UnitMap has no additional attributes beyond those of a basic
-Mapping. Its \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes are always equal and are
-specified by the first argument supplied to its constructor. For
-example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstUnitMap *unitmap;
-
-...
-
-unitmap = astUnitMap( 2, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-will create a UnitMap that copies 2-dimensional coordinates. Inverting
-a UnitMap has no effect beyond changing the value of its \htmlref{Invert}{Invert}
-attribute.
-
-The main use of a UnitMap is to allow a Mapping to be supplied when one
-is required (as an argument to a function, for example) but you wish
-it to leave coordinate values unchanged.
-
-\subsection{\label{ss:permmapexample}Example---the PermMap}
-
-The \htmlref{PermMap}{PermMap} is a rather more complicated \htmlref{Mapping}{Mapping} than we have met
-previously. Its purpose is to change the order, or number, of
-coordinates. It is also able to substitute fixed values for
-coordinates.
-
-To illustrate its action, suppose our input coordinates are denoted by
-($x_1,x_2,x_3,x_4$) in a 4-dimensional space and suppose our output
-coordinates are to be ($x_4,x_1,x_2,x_3$). Our PermMap, therefore,
-should rotate the coordinate values by one position.
-
-To create such a PermMap, we first set up two integer arrays. One of
-these, ``outperm'', controls the selection of input coordinates for
-use in the output and the other, ``inperm'', controls selection of
-output coordinates for use in the input:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int outperm[ 4 ] = { 4, 1, 2, 3 };
-int inperm[ 4 ] = { 2, 3, 4, 1 };
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note that the numbers we store in these arrays are the indices of the
-coordinates that we want to select. We have chosen these so that the
-forward and inverse transformations will perform complementary
-permutations on the coordinates.
-
-The PermMap is then created by passing these arrays to its
-constructor, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstPermMap *permmap;
-
-...
-
-permmap = astPermMap( 4, inperm, 4, outperm, NULL, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note that we specify the number of input and output coordinates
-separately, but set both to 4 in this example. The resulting PermMap
-would have the following effect when used to transform coordinates:
-
-\begin{quote}
-\begin{verbatim}
-Forward:
- (1, 2, 3, 4) --> (4, 1, 2, 3)
- (2, 4, 6, 8) --> (8, 2, 4, 6)
- (3, 6, 9, 12) --> (12, 3, 6, 9)
- (4, 8, 12, 16) --> (16, 4, 8, 12)
- (5, 10, 15, 20) --> (20, 5, 10, 15)
-
-Inverse:
- (4, 1, 2, 3) --> (1, 2, 3, 4)
- (8, 2, 4, 6) --> (2, 4, 6, 8)
- (12, 3, 6, 9) --> (3, 6, 9, 12)
- (16, 4, 8, 12) --> (4, 8, 12, 16)
- (20, 5, 10, 15) --> (5, 10, 15, 20)
-\end{verbatim}
-\end{quote}
-
-If the number of input and output coordinates are unequal so, also,
-will be the size of the ``outperm'' and ``inperm'' arrays. This means,
-however, that we cannot fill them with coordinate indices so that they
-perform complementary permutations, because one transformation will
-lose information (discard a coordinate) that the other cannot recover.
-To give an example, consider the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int outperm[ 3 ] = { 4, 3, 2 };
-int inperm[ 4 ] = { -1, 3, 2, 1 };
-double con[ 1 ] = { 99.004 };
-\end{verbatim}
-\normalsize
-\end{quote}
-
-In this case, the forward transformation will change
-($x_1,x_2,x_3,x_4$) into ($x_4,x_3,x_2$) and will discard $x_1$. The
-inverse transformation restores the original coordinate order, but has
-no value to assign to the first coordinate. In this case, the number
-entered in the ``inperm'' array is $-$1.
-
-This negative value indicates that the coordinate value should be
-obtained by addressing the first element of the ``con'' array
-({\em{i.e.}}\ element zero). This array, ignored in the previous
-example, may then be used to supply a value for the missing
-coordinate.
-
-The constructor function:
-
-\begin{quote}
-\small
-\begin{verbatim}
-permmap = astPermMap( 4, inperm, 3, outperm, con, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-will then create a PermMap with the following effect when used to
-transform coordinates:
-
-\begin{quote}
-\begin{verbatim}
-Forward:
- (1, 2, 3, 4) --> (4, 3, 2)
- (2, 4, 6, 8) --> (8, 6, 4)
- (3, 6, 9, 12) --> (12, 9, 6)
- (4, 8, 12, 16) --> (16, 12, 8)
- (5, 10, 15, 20) --> (20, 15, 10)
-
-Inverse:
- (4, 3, 2) --> (99.004, 2, 3, 4)
- (8, 6, 4) --> (99.004, 4, 6, 8)
- (12, 9, 6) --> (99.004, 6, 9, 12)
- (16, 12, 8) --> (99.004, 8, 12, 16)
- (20, 15, 10) --> (99.004, 10, 15, 20)
-\end{verbatim}
-\end{quote}
-
-The ``con'' array may contain more than one value if necessary and may
-be addressed by both the ``inperm'' and ``outperm'' arrays using
-coordinate indices $-$1, $-$2, $-$3,~{\em{etc.}}\ to refer to the
-first, second, third,~{\em{etc.}}\ elements.
-
-If there is no suitable replacement value that can be supplied
-{\em{via}} the ``con'' array, a value of zero may be entered into the
-``outperm'' and/or ``inperm'' arrays. This causes the value AST\_\_BAD
-to be used for the affected coordinate (as defined in the ``ast.h''
-header file), thus indicating a missing coordinate value
-(\secref{ss:badcoordinates}).
-
-The principle use for a PermMap lies in matching a coordinate system
-to a data array where there is a choice of storage order for the data.
-PermMaps are also useful for discarding unwanted coordinates so as to
-reduce the number of dimensions, such as when selecting a ``slice''
-from a multi-dimensional array.
-
-\cleardoublepage
-\section{\label{ss:cmpmaps}Compound Mappings (CmpMaps)}
-
-We now turn to a rather special form of \htmlref{Mapping}{Mapping}, the \htmlref{CmpMap}{CmpMap}. The
-Mappings we have considered so far have been atomic, in the sense that
-they perform pre-defined elementary transformations. A CmpMap,
-however, is a compound Mapping. In essence, it is a framework for
-containing other Mappings and its purpose is to allow those Mappings
-to work together in various combinations while appearing as a single
-\htmlref{Object}{Object}. A CmpMap's behaviour is therefore not pre-defined, but is
-determined by the other Mappings it contains.
-
-\subsection{\label{ss:seriescmpmap}Combining Mappings in Series}
-
-Consider a simple example based on two 2-dimensional coordinate
-systems. Suppose that to convert from one to the other we must swap
-the coordinate order and multiply both coordinates by 5, so that the
-coordinates ($x_1,x_2$) transform into ($5x_2,5x_1$). This can be done
-in two stages:
-
-\begin{enumerate}
-\item Apply a \htmlref{PermMap}{PermMap} (\secref{ss:permmapexample}) to swap the
-coordinate order.
-
-\item Apply a \htmlref{ZoomMap}{ZoomMap} (\secref{ss:transforming}) to multiply both
-coordinate values by the constant 5.
-\end{enumerate}
-
-The PermMap and ZoomMap are then said to operate {\em{in series,}}
-because they are applied sequentially
-({\em{c.f.}}\ Figure~\ref{fig:seriescmpmap}). We can create a \htmlref{CmpMap}{CmpMap}
-that applies these Mappings in series as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-AstCmpMap *cmpmap;
-AstPermMap *permmap;
-AstZoomMap *zoommap;
-
-...
-
-/* Create the individual Mappings. */
-{
- int inperm[ 2 ] = { 2, 1 };
- int outperm[ 2 ] = { 2, 1 };
- permmap = astPermMap( 2, inperm, 2, outperm, NULL, "" );
-}
-zoommap = astZoomMap( 2, 5.0, "" )
-
-/* Combine them in series. */
-cmpmap = astCmpMap( permmap, zoommap, 1, "" );
-
-/* Annul the individual Mapping pointers. */
-permmap = astAnnul( permmap );
-zoommap = astAnnul( zoommap );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, the third argument (1) of the constructor function \htmlref{astCmpMap}{astCmpMap}
-indicates ``in series''.
-
-When used to transform coordinates in the forward direction, the
-resulting CmpMap will apply the first component \htmlref{Mapping}{Mapping} (the PermMap)
-and then the second one (the ZoomMap). When transforming in the
-inverse direction, it will apply the second one (in the inverse
-direction) and then the first one (also in the inverse direction). In
-general, although not in this particular example, the order in which
-the two component Mappings are supplied is significant. Clearly, also,
-the \htmlref{Nout}{Nout} attribute (number of output coordinates) for the first
-Mapping must equal the \htmlref{Nin}{Nin} attribute (number of input coordinates) for
-the second one.
-
-\subsection{Combining Mappings in Parallel}
-
-Connecting two Mappings in series (\secref{ss:seriescmpmap}) is not the
-only way of combining them. The alternative, {\em{in parallel,}}
-involves applying the two Mappings at once but on different subsets of
-the coordinate values.
-
-Consider, for example, a set of 3-dimensional coordinates and suppose
-we wish to transform them by swapping the first two coordinate values
-and multiplying the final one by 5, so that ($x_1,x_2,x_3$) transforms
-into ($x_2,x_1,5x_3$). Again, we can perform each of these steps
-individually using exactly the same \htmlref{PermMap}{PermMap} and \htmlref{ZoomMap}{ZoomMap} as used
-earlier (\secref{ss:seriescmpmap}). In this case, however, these
-individual Mappings are applied in parallel
-({\em{c.f.}}\ Figure~\ref{fig:parallelcmpmap}).
-
-Creating a \htmlref{CmpMap}{CmpMap} for this purpose is also very simple:
-
-\begin{quote}
-\small
-\begin{verbatim}
-cmpmap = astCmpMap( permmap, zoommap, 0, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The only difference is that the third argument of \htmlref{astCmpMap}{astCmpMap} is now
-zero, meaning ``in parallel''.
-
-As before, the order in which the two component Mappings are supplied
-is significant. The first one acts on the lower-numbered input
-coordinate values (however many it needs) and produces the
-lower-numbered output coordinates, while the second \htmlref{Mapping}{Mapping} acts on
-the higher-numbered input coordinates (however many remain) and
-generates the remaining higher-numbered output coordinates. When the
-CmpMap transforms coordinates in the inverse direction, both component
-Mappings are applied to the same coordinates, but in the inverse
-direction.
-
-Note that the \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes of the component Mappings
-({\em{i.e.}}\ the numbers of input and output coordinates) will sum to
-give the Nin and Nout attributes of the overall CmpMap.
-
-\subsection{\label{ss:cmpmapcomponents}The Component Mappings}
-
-A \htmlref{CmpMap}{CmpMap} does not store copies of its component Mappings, but simply
-holds pointers to them. In the example above
-(\secref{ss:seriescmpmap}), we were free to annul the individual
-\htmlref{Mapping}{Mapping} pointers after creating the CmpMap because the pointers held
-internally by the CmpMap increased the reference count (\htmlref{RefCount}{RefCount}
-attribute) of each component Mapping by one. The individual components
-are therefore not deleted by \htmlref{astAnnul}{astAnnul}, but retained until the CmpMap
-itself is deleted and annuls the pointers it holds. Consistent use of
-astAnnul (\secref{ss:annullingpointers}) and/or pointer contexts
-(\secref{ss:contexts}) will therefore ensure that all Objects are
-deleted at the appropriate time.
-
-Note that access to a CmpMap's component Mappings is not generally
-available unless pointers to them are retained when the CmpMap is
-created. If such pointers are retained, then subsequent modifications
-to the individual components can be used to indirectly modify the
-behaviour of the overall CmpMap.
-
-There is an important exception to this, however, because a CmpMap
-retains a copy of the initial \htmlref{Invert}{Invert} flag settings of each of its
-components and uses these in order to ignore any subsequent external
-changes. This means that you may invert either component Mapping
-before inserting it into a CmpMap and need not worry if you un-invert
-it again later. The CmpMap's behaviour will not be affected by the
-later action.
-
-\subsection{\label{ss:complexcmpmap}Creating More Complex Mappings}
-
-Because a \htmlref{CmpMap}{CmpMap} is itself a \htmlref{Mapping}{Mapping}, any existing CmpMap can
-substitute (\secref{ss:objecthierarchy}) as a component Mapping when
-constructing a new CmpMap using \htmlref{astCmpMap}{astCmpMap}. This has the effect of
-nesting one CmpMap inside another and opens up many new possibilities.
-For example, combining three Mappings in series can be accomplished as
-follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstMapping *map1, *map2, *map3;
-
-...
-
-cmpmap = astCmpMap( map1, astCmpMap( map2, map3, 1, "" ), 1, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The way in which the individual component Mappings are grouped within
-the nested CmpMaps is not usually important.
-
-A similar technique can be used to combine multiple Mappings in
-parallel and, of course, mixed series and parallel combinations are
-also possible (Figure~\ref{fig:complexcmpmap}). There is no built-in
-limit to how many CmpMaps may be nested in this way, so this mechanism
-provides an indefinitely extensible method of building complex
-Mappings out of the elemental building blocks provided by AST.
-
-In practice, you might not need to construct such complex CmpMaps
-yourself very frequently, but they will often be returned by AST
-routines. Nested CmpMaps underlie the library's entire ability to
-represent a wide range of different coordinate transformations.
-
-\subsection{\label{ss:cmpmapexample}Example---Transforming Between Two Calibrated Images}
-
-Consider, as a practical example of CmpMaps, two images of the
-sky. Suppose that for each image we have a \htmlref{Mapping}{Mapping} which converts from
-pixel coordinates to a standard celestial coordinate system, say
-FK5~(J2000.0). If we wish to inter-compare these images, we can do so
-by using this celestial coordinate system to align them. That is, we
-first convert from pixel coordinates in the first image into FK5
-coordinates and we then convert from FK5 coordinates into pixel
-coordinates in the second image.
-
-If ``mapa'' and ``mapb'' are pointers to our two original Mappings, we
-could form a \htmlref{CmpMap}{CmpMap} which transforms directly between the pixel
-coordinates of the first and second images by combining these
-Mappings, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstCmpMap *alignmap;
-AstMapping *mapa, *mapb;
-
-...
-
-astInvert( mapb );
-alignmap = astCmpMap( mapa, mapb, 1, "" );
-astInvert( mapb );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, we have used \htmlref{astInvert}{astInvert} (\secref{ss:invertingmappings}) to invert
-``mapb'' before inserting it into the CmpMap because, as supplied, it
-converted in the wrong direction. Afterwards, we invert it again to
-return it to its original state. The CmpMap, however, will ignore this
-subsequent change (\secref{ss:cmpmapcomponents}).
-
-The forward transformation of the resulting CmpMap will now transform
-from pixel coordinates in the first image to pixel coordinates in the
-second image, while its inverse transformation will convert in the
-opposite direction.
-
-\subsection{\label{ss:overcomplexcmpmaps}Over-Complex Compound Mappings}
-
-While a \htmlref{CmpMap}{CmpMap} provides a very flexible way of constructing
-arbitrarily complex Mappings (\secref{ss:complexcmpmap}), it
-unfortunately also provides an opportunity for representing simple
-Mappings in complex ways. Sometimes, unnecessary complexity can be
-difficult to avoid but can obscure important simplifications.
-
-Consider the example above (\secref{ss:cmpmapexample}), in which we
-inter-related two images of the sky {\em{via}} a CmpMap. If the two
-images turned out to be simply offset from each other by a shift along
-each pixel axis, then this approach would align them correctly, but it
-would be inefficient. This is because it would introduce unnecessary
-and expensive transformations to and from an intermediate celestial
-coordinate system, whereas a simple shift of pixel origin would
-suffice.
-
-Recognising that a simpler and more efficient solution exists
-obviously requires a little more than simply joining two Mappings
-end-to-end. We must also determine whether the resulting CmpMap is
-more complex than it needs to be, {\em{i.e.}}\ contains redundant
-information. If it is, we then need a way to simplify it.
-
-The problem is not always just one of efficiency, however. Sometimes
-we may also need to know something about the actual form a \htmlref{Mapping}{Mapping}
-takes---{\em{i.e.}}\ the nature of the operations it performs.
-Unnecessary complexity can obscure this, but such complexity can
-easily accumulate during normal data processing.
-
-For example, a Mapping that transforms pixel coordinates into
-positions on the sky might be repeatedly modified as changes are made
-to the shape and size of the image. Typically, on each occasion,
-another Mapping will be concatenated to reflect what has happened to
-the image. This could soon make it difficult to discern the overall
-nature of the transformation from the complex CmpMap that
-accumulates. If only shifts of origin were involved on each occasion,
-however, they could be combined into a single shift which could be
-represented much more simply.
-
-Suppose we now wanted to represent our image's celestial coordinate
-calibration using FITS conventions (\secref{ss:foreignfits}). This
-requires AST to determine whether the Mapping which relates pixel
-coordinate to sky positions conforms to the FITS model (for example,
-whether it is equivalent to applying a single set of shifts and scale
-factors followed by a map projection). Clearly, there is an important
-use here for some means of simplifying the internal structure of a
-CmpMap.
-
-\subsection{\label{ss:simplifyingcmpmaps}Simplifying Compound Mappings}
-
-The ability to simplify compound Mappings is provided by the
-\htmlref{astSimplify}{astSimplify} function. This function encapsulates a number of
-heuristics for converting Mappings, or combinations of Mappings within
-a \htmlref{CmpMap}{CmpMap}, into simpler, equivalent ones. When applied to a CmpMap,
-astSimplify tries to reduce the number of individual Mappings within
-it by merging neighbouring component Mappings together. It will do
-this with both series and parallel combinations of Mappings, or both,
-and will handle CmpMaps nested to any depth
-(\secref{ss:complexcmpmap}).
-
-\begin{latexonly}
- To illustrate how astSimplify works, consider the combination of
- Mappings shown in Figure~\ref{fig:simplifyexample}.
- \begin{figure}
- \begin{center}
- \includegraphics[scale=0.65]{sun211_figures/simpexamp.eps}
- \caption{An over-complex compound \htmlref{Mapping}{Mapping}, consisting of PermMaps,
- ZoomMaps and a \htmlref{UnitMap}{UnitMap}, which can be simplified to become a single
- UnitMap. The enclosing nested CmpMaps have been omitted for clarity.}
- \label{fig:simplifyexample}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- To illustrate how astSimplify works, consider the combination of
- Mappings shown in the Figure below.
- \begin{quote}
- \begin{figure}
- \label{fig:simplifyexample}
- \includegraphics[scale=1.1]{sun211_figures/simpexamp.eps}
- \caption{An over-complex compound Mapping, consisting of PermMaps,
- ZoomMaps and a UnitMap, which can be simplified to become a single
- UnitMap. The enclosing nested CmpMaps have been omitted for clarity.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-If this were contained in a CmpMap, it could be simplified as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstMapping *simpler;
-
-...
-
-simpler = astSimplify( cmpmap );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-In this case, the result would be a simple 3-dimensional UnitMap (the
-identity Mapping). To reach this conclusion, astSimplify will have
-made a number of deductions, roughly as follows:
-
-\begin{enumerate}
-\item The two 2-dimensional ZoomMaps in series are equivalent to a
-single \htmlref{ZoomMap}{ZoomMap} with a combined \htmlref{Zoom}{Zoom} factor of unity. This, in turn, is
-equivalent to a 2-dimensional UnitMap.
-
-\item This UnitMap in parallel with the other 1-dimensional UnitMap is
-equivalent to a single 3-dimensional UnitMap. This UnitMap, sandwiched
-between any other pair of Mappings, can then be eliminated.
-
-\item The remaining two PermMaps in series are equivalent to a single
-3-dimensional \htmlref{PermMap}{PermMap}. When these are combined, the resulting PermMap
-is found to be equivalent to a 3-dimensional UnitMap.
-\end{enumerate}
-
-This example is a little contrived, but illustrates how astSimplify
-can deal with even quite complicated compound Mappings through a
-series of incremental simplifications. Where possible, this will
-result in either a simpler compound Mapping or, if feasible, an atomic
-(non-compound) Mapping, as here. If no simplification is possible,
-astSimplify will just return a pointer to the original Mapping.
-
-Although astSimplify cannot identify every simplification that is
-theoretically possible, sufficient rules are included to deal with the
-most common and important cases.
-
-\cleardoublepage
-\section{\label{ss:frames}Representing Coordinate Systems (Frames)}
-
-An AST \htmlref{Frame}{Frame} is an \htmlref{Object}{Object} that is used to represent a coordinate
-system. Contrast this with a \htmlref{Mapping}{Mapping} (\secref{ss:mappings}), which is
-used to describe how to convert between coordinate systems. The two
-concepts are complementary and we will see how they work together in
-\secref{ss:framesets}.
-
-In this section we will discuss only basic Frames, which represent
-Cartesian coordinate systems. More specialised types of Frame
-({\em{e.g.}}\ the \htmlref{SkyFrame}{SkyFrame}, which represents celestial coordinate
-systems, and the \htmlref{SpecFrame}{SpecFrame}, which represents spectral coordinate
-systems) are covered later (\secref{ss:skyframes} and \secref{ss:specframes})
-and, naturally, inherit the properties and behaviour of the simple Frames
-discussed here.
-
-\subsection{The Frame Model}
-
-The best way to think about a \htmlref{Frame}{Frame} is like the frame that you would
-plot around a graph. In two dimensions, you would have an ``$x$'' and
-a ``$y$'' axis, a title on the graph and labels on the axes, together
-with an indication of the physical units being plotted. The values
-marked along each axis would be formatted in a human-readable way. The
-frame around a graph therefore defines a coordinate space within which
-you can locate points, draw lines, calculate distances, {\em{etc.}}
-
-An AST Frame works in much the same way, embodying all of these
-concepts and a few more. It also allows any number of axes, which
-means that a Frame can represent coordinate systems with any number of
-dimensions. You specify how many when you create it.
-
-Remember that the basic Frame we are considering here is completely
-general. It knows nothing of celestial coordinates, for example, and
-all its axes are equivalent. It can be adapted to describe any general
-purpose Cartesian coordinate system by setting its attributes, such as
-its \htmlref{Title}{Title} and axis Labels, {\em{etc.}}\ to appropriate values.
-
-\subsection{\label{ss:creatingframes}Creating a Frame}
-
-Creating a \htmlref{Frame}{Frame} is straightforward and follows the usual pattern:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-astFrame *frame;
-
-...
-
-frame = astFrame( 2, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The first argument of the \htmlref{astFrame}{astFrame} constructor function specifies the
-number of axes which the Frame should have.
-
-\subsection{\label{ss:frameasmapping}Using a Frame as a Mapping}
-
-We should briefly point out that the \htmlref{Frame}{Frame} we created above
-(\secref{ss:creatingframes}) is also a \htmlref{Mapping}{Mapping}
-(\secref{ss:mappingclass}) and therefore inherits the properties and
-behaviour common to other Mappings.
-
-One way to see this is to set the Frame's \htmlref{Report}{Report} attribute (inherited
-from the Mapping class) to a non-zero value and pass the Frame pointer
-to a coordinate transformation function, such as \htmlref{astTran2}{astTran2}.
-
-\begin{quote}
-\small
-\begin{verbatim}
-double xin[ 5 ] = { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0 };
-double yin[ 5 ] = { 0.0, 2.0, 4.0, 6.0, 8.0, 10.0 };
-double xout[ 5 ];
-double yout[ 5 ];
-
-...
-
-astSet( frame, "Report=1" );
-astTran2( frame, 5, xin, yin, 1, xout, yout );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The resulting output might then look like this:
-
-\begin{quote}
-\begin{verbatim}
-(1, 2) --> (1, 2)
-(2, 4) --> (2, 4)
-(3, 6) --> (3, 6)
-(4, 8) --> (4, 8)
-(5, 10) --> (5, 10)
-\end{verbatim}
-\end{quote}
-
-This is not very exciting because a Frame implements an identity
-transformation just like a \htmlref{UnitMap}{UnitMap}
-(\secref{ss:unitmapexample}). However, it illustrates that a Frame can
-be used as a Mapping and that its \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes are both
-equal to the number of Frame axes.
-
-When we consider more specialised Frames
-({\em{e.g.}}~\secref{ss:framesets}), we will see that using them as
-Mappings can be very useful indeed.
-
-\subsection{\label{ss:frameaxisattributes}Frame Axis Attributes}
-
-Frames have a number of attributes which can take multiple values, one
-for each axis. These separate values are identified by appending the
-axis number in parentheses to the attribute name. For example, the
-Label(1) attribute is a character string containing the label which
-appears on the first axis.
-
-\htmlref{Axis}{Axis} attributes are accessed in the same way as all other attributes
-(\secref{ss:gettingattributes}, \secref{ss:settingattributes} and
-\secref{ss:defaultingattributes}). For example, the Label on the second
-axis might be obtained as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-const char *label;
-
-...
-
-label = astGetC( frame, "Label(2)" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Other attribute access functions (astSetX, \htmlref{astTest}{astTest} and \htmlref{astClear}{astClear}) may
-also be applied to axis attributes in the same way.
-
-If the axis number is stored in a program variable, then its value
-must be formatted to generate a suitable attribute name before using
-this to access the attribute itself. For example, the following will
-print out the Label value for each axis of a \htmlref{Frame}{Frame}:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include <stdio.h>
-char name[ 18 ];
-int iaxis, naxes;
-
-...
-
-naxes = astGetI( frame, "Naxes" );
-for ( iaxis = 1; iaxis <= naxes; iaxis++ ) {
- (void) sprintf( name, "Label(%d)", iaxis );
- label = astGetC( frame, name );
- (void) printf( "Label %2d: %s\n", iaxis, label );
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note the use of the \htmlref{Naxes}{Naxes} attribute to determine the number of Frame
-axes.
-
-The output from this might look like the following:
-
-\begin{quote}
-\begin{verbatim}
-Label 1: Axis 1
-Label 2: Axis 2
-\end{verbatim}
-\end{quote}
-
-In this case, the Frame's default axis Labels have been revealed as
-rather un-exciting. Normally, you would set much more useful values,
-typically when you create the Frame---perhaps something like:
-
-\begin{quote}
-\small
-\begin{verbatim}
-frame = astFrame( 2, "Label(1)=Offset from centre of field,"
- "Unit(1) =mm,"
- "Label(2)=Transmission coefficient,"
- "Unit(2) =%" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, we have also set the (character string) Unit attribute for each
-axis to describe the physical units represented on that axis. All the
-attribute assignments have been combined into a single string,
-separated by commas.
-
-\subsection{\label{ss:frameattributes}Frame Attributes}
-
-We will now briefly outline the various attributes associated with a
-\htmlref{Frame}{Frame} (this is, of course, in addition to those inherited from the
-\htmlref{Mapping}{Mapping} class). We will not delve too deeply into the details of each
-attribute, for which you should consult the appropriate description in
-\appref{ss:attributedescriptions}. Instead, we aim simply to sketch
-the range of facilities available:
-
-\begin{quote}
-\begin{description}
-\item[\htmlref{Naxes}{Naxes}]\mbox{}\\
-A read-only integer giving the number of Frame axes.
-
-\item[\htmlref{Title}{Title}]\mbox{}\\
-A string describing the coordinate system which the Frame represents.
-
-\item[\htmlref{Label(axis)}{Labelaxis}]\mbox{}\\
-A label string for each axis.
-
-\item[\htmlref{Unit(axis)}{Unitaxis}]\mbox{}\\
-A string describing the physical units on each axis. You can choose
-whether to make this attribute ``active'' or ``passive'' (using
-\htmlref{astSetActiveUnit}{astSetActiveUnit}
-). If active, its value will be taken into account when finding the
-Mapping between two Frames (\emph{e.g.} a scaling of 0.001 would be used
-to connect two axis with units of ``km'' and ``m''). If passive, its value
-is ignored. Its use is described in more detail in \secref{ss:frameunits}.
-
-\item[\htmlref{Symbol(axis)}{Symbolaxis}]\mbox{}\\
-A string containing a ``short form'' symbol ({\em{e.g.}}\ like ``X''
-or ``Y'') used to represent the quantity plotted on each axis.
-
-\item[\htmlref{Digits/Digits(axis)}{DigitsDigitsaxis}]\mbox{}\\
-The preferred number of digits of precision to be used when formatting
-values for display on each axis.
-
-\item[\htmlref{Format(axis)}{Formataxis}]\mbox{}\\
-A string containing a {\em{format specifier}} which determines exactly
-how values should be formatted for display on each axis
-(\secref{ss:formattingaxisvalues}). If this attribute is un-set, the
-formatting is based on the Digits value, otherwise the Format string
-over-rides the Digits value.
-
-\item[\htmlref{Direction(axis)}{Directionaxis}]\mbox{}\\
-A boolean (integer) value which indicates in which direction each axis
-should be plotted. If it is non-zero (the default), the axis should be
-plotted in the conventional direction---{\em{i.e.}}\ increasing to the
-right for the abscissa and increasing upwards for the ordinate. If it
-is zero, the axis should be plotted in reverse. This attribute is
-provided as a hint only and programs are free to ignore it if they
-wish.
-
-\item[\htmlref{Domain}{Domain}]\mbox{}\\
-A character string which identifies the {\em{physical domain}} to
-which the Frame's coordinate system applies. The primary purpose of
-this attribute is to prevent unwanted conversions from occurring
-between coordinate systems which are not related. Its use is described
-in more detail in \secref{ss:framedomains}.
-
-\item[\htmlref{System}{System}]\mbox{}\\
-A character string which identifies the specific coordinate system used
-to describe positions within the physical domain represented by the Frame.
-For a simple Frame, this attribute currently has a fixed value of
-``Cartesian'', but could in principle be extended to include options such
-as ``Polar'', ``Cylindrical'', {\em{etc}}. More specialised Frames such
-as the \htmlref{SkyFrame}{SkyFrame}, \htmlref{TimeFrame}{TimeFrame} and \htmlref{SpecFrame}{SpecFrame}, re-define the allowed values to be
-appropriate to the domain which they describe. For instance, the SkyFrame
-allows values such as ``FK4'' and ``Galactic'', and the SpecFrame allows
-values such as ``frequency'' and ``wavelength''.
-
-\item[\htmlref{Epoch}{Epoch}]\mbox{}\\
-This value is used to qualify a coordinate system by giving the moment in
-time when the coordinates are correct. Usually, this will be the date of
-observation. The Epoch value is important in cases where coordinates
-systems move with respect to each other over time. An example of two such
-coordinate systems are the FK4 and FK5 celestial coordinate systems.
-
-\item[\htmlref{ObsLon}{ObsLon}]\mbox{}\\
-Specifies the longitude of the observer (assumed to be on the surface of
-the earth). The basic Frame class does not use this value, but
-specialised sub-classes may. For instance, the SpecFrame class uses it to
-calculate the relative velocity of the observer and the centre of the
-earth for use in converting between standards of rest.
-
-\item[\htmlref{ObsLat}{ObsLat}]\mbox{}\\
-Specifies the latitude of the observer. Use in conjunction with ObsLon.
-
-\end{description}
-\end{quote}
-
-There are also some further Frame attributes, not described above,
-which are important when Frames are used as templates to search for
-other Frames. Their use goes beyond the present discussion.
-%TBW---Add reference here.
-
-\subsection{\label{ss:formattingaxisvalues}Formatting Axis Values}
-
-The coordinate values associated with each axis of a \htmlref{Frame}{Frame} are stored
-({\em{e.g.}}\ within your program) as double values. The Frame class
-therefore provides a function, \htmlref{astFormat}{astFormat}, to convert these values into
-formatted strings for display:
-
-\begin{quote}
-\small
-\begin{verbatim}
-const char *string
-double value;
-
-...
-
-string = astFormat( frame, iaxis, value );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, the astFormat function is passed a Frame pointer, the number of
-an axis (``iaxis'') and a double precision value to format
-(``value''). It returns a pointer to character string containing the
-formatted value.
-\label{ss:formattingwithdigits}
-
-By default, the formatting applied will be determined by the Frame's
-Digits attribute and will normally display results with seven digits
-of precision (corresponding approximately to the C ``float'' data type
-on many machines). Setting a different Digits value, however, allows
-you to adjust the precision as necessary to suit the accuracy of the
-coordinate data you are processing. If finer control is needed, it is
-also possible to set a Digits value for each individual axis by
-appending an axis number to the attribute name
-({\em{e.g.}}\ ``Digits(2)''). If this is done, it over-rides the
-effect of the Frame's main Digits value for that axis.
-
-Even finer control is possible by setting the (character string) Format
-attribute for a Frame axis. The string given should contain a C
-{\em{format specifier}} which explicitly determines how the values on
-that axis should be formatted. This will over-ride the effects of any
-Digits value\footnote{The exception to this rule is that if the Format
-value includes a precision of ``$.*$'', then Digits will be used to
-determine the actual precision used.}. Any valid ``printf'' format
-specifier may be used so long as it consumes exactly one double value.
-
-When setting Format values, remember that the ``\%'' which appears in
-the format specifier may need to be doubled to ``\%\%'' if you are
-using a function (such as \htmlref{astSet}{astSet}) which interprets ``printf'' format
-specifiers itself.
-
-It is recommended that you use astFormat whenever you display
-formatted coordinate values, even although you could format them
-yourself using ``sprintf''. This is because it puts the Frame in
-control of formatting. When you start to handle more elaborate Frames
-(representing, say, celestial coordinates), you will need different
-formatting methods. This approach delivers them without any change to
-your software.
-
-You should also consider regularly using the \htmlref{astNorm}{astNorm} function,
-described below (\secref{ss:normalising}), for any values that will be
-made visible to the user of your software.
-
-\subsection{\label{ss:normalising}Normalising Frame Coordinates}
-
-The function \htmlref{astNorm}{astNorm} is provided to cope with the fact that some
-coordinate systems do not extend indefinitely in all directions. Some
-may have boundaries, outside which coordinates are meaningless, while
-others wrap around on themselves, so that after a certain distance you
-return to the beginning again (coordinate systems based on circles and
-spheres, for instance). A basic \htmlref{Frame}{Frame} has no such complications, but
-other more specialised Frames (such as SkyFrames, representing the
-celestial sphere---\secref{ss:skyframes}) do.
-
-The role played by astNorm is to {\em{normalise}} any arbitrary set of
-coordinates by converting them into a set which is ``within bounds'',
-interpreted according to the particular Frame in question. For
-example, on the celestial sphere, a right ascension value of 24~hours
-or more can have a suitable multiple of 24~hours subtracted without
-affecting its meaning and astNorm would perform this task. Similarly,
-negative values of right ascension would have a multiple of 24~hours
-added, so that the result lies in the range zero to 24~hours. The
-coordinates in question are modified in place by astNorm, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-double point[ 2 ];
-
-...
-
-astNorm( frame, point );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-If the coordinates supplied are initially OK, as they would always be
-with a basic Frame, then they are returned unchanged.
-
-Because the main purpose of astNorm is to convert coordinates into the
-preferred range for human consumption, its use is almost always
-appropriate immediately before formatting coordinate values for
-display using \htmlref{astFormat}{astFormat} (\secref{ss:formattingaxisvalues}). Even if
-the Frame in question does not restrict the range of coordinates, so
-that astNorm does nothing, using it will allow you to process other
-more specialised Frames, where normalisation is important, without
-changing your software.
-
-\subsection{\label{ss:unformattingaxisvalues}Reading Formatted Axis Values}
-
-The process of converting a formatted coordinate value for a \htmlref{Frame}{Frame}
-axis, such as might be produced by \htmlref{astFormat}{astFormat}
-(\secref{ss:formattingaxisvalues}), back into a numerical (double)
-value ready for processing is performed by \htmlref{astUnformat}{astUnformat}. However,
-although this process is essentially the inverse of that performed by
-astFormat, there are a number of additional difficulties that must be
-addressed in practice.
-
-The main use for astUnformat is in reading formatted coordinate values
-which have been entered by the user of a program, or read from a
-file. As such, we can rarely assume that the values are neatly
-formatted in the way that astFormat would produce. Instead, it is
-usually desirable to allow considerable flexibility in the form of
-input that can be accommodated, so as to permit ``free-format'' data
-input by the user. In addition, we may need to extract individual
-coordinate values embedded in other textual data.
-
-Underlying these requirements is the root difficulty that the textual
-format used to represent a coordinate value will depend on the class
-of Frame we are considering. For example, for a basic Frame,
-astUnformat may have to read a value like ``1.25e-6'', whereas for a
-more specialised Frame representing celestial coordinates it may have
-to handle a value like ``-07d~49m~13s''. Of course, the format might
-also depend on which axis is being considered.
-
-Ideally, we would like to write software that can handle any kind of
-Frame. However, this makes it a little more difficult to analyse
-textual input data to extract individual coordinate values, since we
-cannot make assumptions about how the values are formatted. It would
-not be safe, for example, simply to assume that the values being read
-are separated by white space. This is not just because they might be
-separated by some other character, but also because celestial
-coordinate values might themselves contain spaces. In fact, to be
-completely safe, we cannot make any assumptions about how a formatted
-coordinate value is separated from the surrounding text, except that
-it should be separated in some way which is not ambiguous.
-
-This is the very basic assumption upon which astUnformat works. It is
-invoked as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int n;
-
-...
-
-n = astUnformat( frame, iaxis, string, &value );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-It is supplied with a Frame pointer (``frame''), the number of an axis
-(``iaxis'') and a character string to be read (``string''). If it
-succeeds in reading a value, astUnformat returns the resulting
-coordinate to the address supplied {\em{via}} the final argument
-(``\&value''). The returned function value indicates how many
-characters were read from the string in order to obtain this result.
-
-The string is read as follows:
-
-\begin{enumerate}
-\item Any white space at the start is skipped over.
-
-\item Further characters are considered, one at a time, until the next
-character no longer matches any of the acceptable forms of input
-(given the characters that precede it). The longest sequence of
-characters which matches is then considered ``read''.
-
-\item If a suitable sequence of characters was read successfully, it
-is converted into a coordinate value which is returned. Any white
-space following this sequence is then skipped over and the total
-number of characters consumed is returned as the function value.
-
-\item If the sequence of characters read is empty, or insufficient to
-define a coordinate value, then the string does not contain a value to
-read. In this case, the read is aborted and astUnformat returns a
-function value of zero and no coordinate value. However, it returns
-without error.
-\end{enumerate}
-
-Note that failing to read a coordinate value does not constitute an
-error, at least so far as astUnformat is concerned. However, an error
-can occur if the sequence of characters read appears to have the
-correct form but cannot be converted into a valid coordinate
-value. Typically, this will be because it violates some constraint,
-such as a limit on the value of one of its fields. The resulting error
-message will give details.
-
-For any given Frame axis, astUnformat does not necessarily always use
-the same algorithm for converting the sequence of characters it reads
-into a coordinate value. This is because some forms of input
-(particularly free-format input) can be ambiguous and might be
-interpreted in several ways depending on the context. For example, the
-celestial longitude ``12:34:56.7'' could represent an angle in degrees
-or a right ascension in hours. To decide which to use, astUnformat may
-examine the Frame's attributes and, in particular, the appropriate
-\htmlref{Format(axis)}{Formataxis} string which is used by astFormat when formatting
-coordinate values (\secref{ss:formattingaxisvalues}). This is done in
-order that astFormat and astUnformat should complement each other---so
-that formatting a value and then un-formatting it will yield the
-original value, subject to any rounding error.
-
-To give a simple (but crucially incomplete!) example, consider reading
-a value for the axis of a basic Frame, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-n = astUnformat( frame, iaxis, " 1.5e6 -99.0", &value );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-astUnformat will skip over the initial space in the string supplied
-and then examine each successive character. It will accept the
-sequence ``1.5e6'' as input, but reject the space which follows
-because it does not form part of the format of a floating point
-number. It will then convert the characters ``1.5e6'' into a
-coordinate value and skip over the three spaces which follow them. The
-returned function value will therefore be 9, equal to the total number
-of characters consumed. This result may be used to address the string
-during a subsequent read, so as to commence reading at the start of
-``-99.0''.
-
-Most importantly, however, note that if the user of a program
-mistakenly enters the string ``~1.5r6\ldots'' instead of
-``~1.5e6\ldots'', a coordinate value of 1.5 and a function result of 4
-will be returned, because the ``r'' would prematurely terminate the
-attempt to read the value. Because this sort of mistake does not
-automatically result in an error but can produce incorrect results, it
-is {\bf{vital}} to check the returned function value to ensure that
-the expected number of characters have been read.\footnote{Anyone who
-seriously uses the C run time library ``scanf'' function will know
-about the need for this check!} For example, if the string is
-expected to contain exactly one value, and nothing else, then the
-following would suffice:
-
-\begin{quote}
-\small
-\begin{verbatim}
-n = astUnformat( frame, iaxis, string, &value );
-if ( astOK ) {
- if ( string[ n ] || !n ) {
- <error in input data>
- } else {
- <value read correctly>
- }
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-If astUnformat does not detect an error itself, we check that it has
-read to the end-of-string and consumed at least one character (which
-traps the case of a zero-length input string). If this reveals an
-error, the value of ``n'' indicates where it occurred.
-
-Another common requirement is to obtain a position by reading a list
-of coordinates from a string which contains one value for each axis of
-a Frame. We assume that the values are separated in some unambiguous
-manner, perhaps using white space and/or some unspecified
-single-character separator. The choice of separator is up to the data
-supplier, who must choose it so as not to conflict with the format of
-the coordinate values, but our software does not need to know what it
-is. The following is a template algorithm for reading data in this
-form:
-
-\begin{quote}
-\small
-\begin{verbatim}
-const char *s;
-double values[ 10 ];
-
-...
-
-/* Initialise a string pointer. */
-s = string;
-
-/* Obtain the number of Frame axes and loop through them. */
-naxes = astGetI( frame, "Naxes" );
-for ( iaxis = 1; iaxis <= naxes; iaxis++ ) {
-
-/* Attempt to read a value for this axis. */
- n = astUnformat( frame, iaxis, s, &values[ iaxis - 1 ] );
-
-/* If nothing was read and this is not the first axis or the
- end-of-string, try stepping over a separator and reading again. */
- if ( !n && ( iaxis > 1 ) && *s )
- n = astUnformat( frame, iaxis, ++s, &values[ iaxis - 1 ] );
-
-/* Quit if nothing was read, otherwise move on to the next value. */
- if ( !n ) break;
- s += n;
-}
-
-/* Check for possible errors. */
-if ( astOK ) {
- if ( *s || !n ) {
- <error in input data>
- } else {
- <values read correctly>
- }
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-In this case, ``s'' will point to the location of any input error.
-
-Note that this algorithm is insensitive to the precise format of the
-data and will therefore work with any class of Frame and any
-reasonably unambiguous input data. For example, here is a range of
-suitable input data for a 3-dimensional basic Frame:
-
-\begin{quote}
-\small
-\begin{verbatim}
-1 2.5 3
-3.1,3.2,3.3
-1.5, 2.6, -9.9e2
--1.1+0.4-1.8
- .1/.2/.3
- 44.0 ; 55.1 -14
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\subsection{\label{ss:permutingaxes}Permuting Frame Axes}
-
-Once a \htmlref{Frame}{Frame} has been created, it is not possible to change the number
-of axes it contains, but it is possible to change the order in which
-these axes occur. To do so, an integer {\em{permutation array}} is
-filled with the numbers of the axes so as to specify the new order,
-{\em{e.g:}}
-
-\begin{quote}
-\small
-\begin{verbatim}
-int perm[ 2 ] = { 2, 1 };
-\end{verbatim}
-\normalsize
-\end{quote}
-
-In this case, the axes of a 2-dimensional Frame could be interchanged
-by passing this permutation array to the \htmlref{astPermAxes}{astPermAxes} function. That
-is, an ($x_1,x_2$) coordinate system would be changed into an
-($x_2,x_1$) coordinate system by:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astPermAxes( frame, perm );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-If the axes are permuted more than once, the effects are cumulative.
-You are, of course, not restricted to Frames with only two axes.
-
-\subsection{Selecting Frame Axes}
-
-An alternative to changing the number of \htmlref{Frame}{Frame} axes, which is not
-allowed, is to create a new Frame by selecting axes from an existing
-one. The method of doing this is very similar to the way \htmlref{astPermAxes}{astPermAxes}
-is used (\secref{ss:permutingaxes}), in that we supply an integer
-array filled with the numbers of the axes we want, in their new
-order. In this case, however, the number of array elements need not
-equal the number of Frame axes.
-
-For example, we could select axes 3 and 2 (in that order) from a
-3-dimensional Frame as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astFrame *frame1, *frame2;
-astMapping *mapping;
-int pick[ 2 ] = { 3, 2 };
-
-...
-
-frame2 = astPickAxes( frame1, 2, pick, &mapping );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This would return a pointer to a 2-dimensional Frame (``frame2'')
-which contains the information associated with axes 3 and 2, in that
-order, from the original Frame (``frame1''). The original Frame is not
-altered by this process. Beware, however, that the axis information
-may still be shared by both Frames, so if you wish to alter either of
-them independently you may first need to use \htmlref{astCopy}{astCopy}
-(\secref{ss:copyingobjects}) to make an independent copy.
-
-In addition to the new Frame pointer, \htmlref{astPickAxes}{astPickAxes} will also return a
-pointer to a new \htmlref{Mapping}{Mapping} {\em{via}} its fourth argument (you may supply a
-NULL pointer as an argument if you do not want this Mapping). This
-Mapping will inter-relate the two Frames. By this we mean that its
-forward transformation will convert coordinates originally in the
-coordinate system represented by ``frame1'' into that represented by
-``frame2'', while its inverse transformation will convert in the
-opposite direction. In this particular case, the Mapping would be a
-\htmlref{PermMap}{PermMap} (\secref{ss:permmapexample}) and would implement the following
-transformations:
-
-\begin{quote}
-\begin{verbatim}
-Forward:
- (1, 2, 3) --> (3, 2)
- (2, 4, 6) --> (6, 4)
- (3, 6, 9) --> (9, 6)
- (4, 8, 12) --> (12, 8)
- (5, 10, 15) --> (15, 10)
-
-Inverse:
- (3, 2) --> (<bad>, 2, 3)
- (6, 4) --> (<bad>, 4, 6)
- (9, 6) --> (<bad>, 6, 9)
- (12, 8) --> (<bad>, 8, 12)
- (15, 10) --> (<bad>, 10, 15)
-\end{verbatim}
-\end{quote}
-
-This is our first introduction to the idea of inter-relating pairs of
-Frames {\em{via}} a Mapping, but this will assume a central role later on.
-
-Note that when using astPickAxes, it is also possible to request more
-axes than there were in the original Frame. This will involve
-selecting axes from the original Frame that do not exist. To do this,
-the corresponding axis number (in the ``pick'' array) should be set to
-zero and the effect is to introduce an additional new axis which is
-not derived from the original Frame. This axis will have default
-values for all its attributes. You will need to do this because
-astPickAxes does not allow you to select any of the original axes more
-than once.\footnote{It will probably not be obvious why this
-restriction is necessary, but consider creating a Frame with one
-longitude axis and two latitude axes. Which latitude axis should be
-associated with the longitude axis?}
-
-\subsection{\label{ss:distanceandoffset}Calculating Distances, Angles and Offsets}
-Some complementary
-functions
-are provided for use with Frames to allow you to perform geometric
-operations without needing to know the nature of the coordinate system
-represented by the \htmlref{Frame}{Frame}.
-
-Functions
-can be used to find the distance between two points, and to offset a
-specified distance along a line joining two points, {\em{etc.}} In essence,
-these define the metric of the coordinate space which the Frame represents. In
-the case of a basic Frame, this is a Cartesian metric.
-
-The first of these functions, \htmlref{astDistance}{astDistance}, returns a double distance
-value when supplied with the Frame coordinates of two points. For
-example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-double dist;
-double point1[ 2 ] = { 0.0, 0.0 };
-double point2[ 2 ] = { 1.0, 1.0 };
-
-...
-
-dist = astDistance( frame, point1, point2 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This calculates the distance between the origin (0,0) and a point at
-position (1,1). In this case, the result, as you would expect, is
-$\surd{2}$. However, this is only true for the Cartesian coordinate
-system which a basic Frame represents. In general, astDistance will
-calculate the geodesic distance between the two points, so that with a
-more specialised Frame (such as a \htmlref{SkyFrame}{SkyFrame}, representing the celestial
-sphere) a great-circle distance might be returned.
-
-The \htmlref{astOffset}{astOffset} function is really the inverse of astDistance. Given two
-points in a Frame, it calculates the coordinates of a third point
-which is offset a specified distance away from the first point along
-the geodesic joining it to the second one. For example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-double point1[ 2 ] = { 0.0, 0.0 };
-double point2[ 2 ] = { 1.0, 1.0 };
-double point3[ 2 ];
-
-...
-
-astOffset( frame, point1. point2, 0.5, point3 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This would fill the ``point3'' array with the coordinates of a point
-which is offset 0.5 units away from the origin (0,0) in the direction
-of the position (1,1). Again, this is a simple result in a Cartesian
-Frame, as varying the offset will trace out a straight line. On the
-celestial sphere, however ({\em{e.g.}}\ using a SkyFrame), it would
-trace out a great circle.
-
-The functions \htmlref{astAxDistance}{astAxDistance} and \htmlref{astAxOffset}{astAxOffset} are similar to astDistance
-and astOffset, except that the curves which they use as ``straight
-lines'' are not geodesics, but curves parallel to a specified axis\footnote
-{For instance, a line of constant Declination is not a geodesic}. One
-reason for using these functions is to deal with the cyclic ambiguity of
-longitude and latitude axes.
-
-The \htmlref{astOffset2}{astOffset2} function is similar to astOffset, but instead of using the
-geodesic which passes through two positions, it uses the geodesic which
-passes at a given position angle through the starting position.
-
-Position angles are always measured from the positive direction of the
-second Frame axis to the required line, with positive angles being in the
-same sense as rotation from the positive direction of the second axis to
-the positive direction of the first Frame axis. This definition applies
-to all classes of Frame, including SkyFrame. The default ordering of axes
-in a SkyFrame makes the second axis equivalent to north, and so the
-definition of position angle given above corresponds to the normal
-astronomical usage, ``from north, through east''. However, it should be
-remembered that it is possible to permute the axes of a SkyFrame (or
-indeed any Frame), so that north becomes axis 1. In this case, an AST
-``position angle'' would be the angle ``from east, through north''.
-Always take the axis ordering into account when deriving an astronomical
-position angle from an AST position angle.
-
-Within a Cartesian coordinate system, the position angle of a geodesic
-({\em{i.e.}}\ a straight line) is constant along its entire length, but
-this is not necessarily true of other coordinate systems. Within a
-spherical coordinate system, for instance, the position angle of a geodesic
-will vary along its length (except for the special cases of a meridian and
-the equator). In addition to returning the required offset position, the
-astOffset2 function
-returns the position angle of the geodesic at the
-offset position. This is useful if you want to trace out a path which
-involves turning through specified angles. For instance, tracing out a
-rectangle in which each side is a geodesic involves turning through 90
-degrees at the corners. To do this, use astOffset2 to calculate the
-position of each corner, and then add (or subtract) 90 degrees from the
-position angle returned by astOffset2.
-
-The \htmlref{astAngle}{astAngle} function
-calculates the angle subtended by two points, at a third point.
-If used with a 2-dimensional Frame the returned angle
-is signed to indicate the sense of rotation (clockwise or anti-clockwise)
-in taking the ``shortest route'' from the first point to the second.
-If the Frame has more than 2 axes, the result is un-signed and is always
-in the range zero to $\pi$.
-
-The \htmlref{astAxAngle}{astAxAngle} function is similar to astAngle,
-but the ``reference direction'', from which angles are measured, is
-a specified axis.
-
-The \htmlref{astResolve}{astResolve} function
-resolves a given displacement within a Frame into two components, parallel and
-perpendicular to a given reference direction.
-
-The displacement is specified by two positions within the Frame; the
-starting and ending positions. The reference direction is defined by the
-geodesic curve passing through the starting position and a third specified
-position. The lengths of the two components are returned, together with
-the position on the reference geodesic which is closest to the third
-supplied point.
-
-\subsection{\label{ss:framedomains}The Domain Attribute}
-
-The \htmlref{Domain}{Domain} attribute is one of the most important properties of a
-\htmlref{Frame}{Frame}, although the concept it expresses can sometimes seem a little
-subtle. We will introduce it here, but its true value will probably
-not become apparent until later (\secref{ss:framesetconverting}).
-
-To understand the need for the Domain attribute, consider using
-different Frames to represent the following different coordinate
-systems associated with a CCD image:
-
-\begin{enumerate}
-\item A coordinate system based on pixel numbers.
-
-\item Positions on the CCD chip, measured in $\mu$m.
-
-\item Positions in the focal plane of the telescope, measured in mm.
-
-\item A celestial coordinate system, measured in radians.
-\end{enumerate}
-
-If we had two such CCD images, we might legitimately want to align
-them pixel-for-pixel ({\em{i.e.}}\ using the coordinate system based
-on pixel numbers) in order to, say, divide by a flat-field exposure.
-We might similarly consider aligning them using any of the other
-coordinate systems so as to achieve different results. For example, we
-might consider merging separate images from a CCD mosaic by using
-focal plane positions.
-
-It would obviously not be legitimate, however, to directly compare
-positions in one image measured in pixels with positions in the other
-measured in mm, nor to equate chip positions in $\mu$m with sky
-coordinates in radians. If we wanted to inter-compare these
-coordinates, we would need to do it indirectly, using other
-information based on the experimental set-up. For instance, we might
-need to know the size of the pixels expressed in mm and the
-orientation of the CCD chip in the focal plane.
-
-Note that it is not simply the difference in physical units which
-prevents certain coordinates from being directly inter-compared
-(because the appropriate unit scaling factors could be included
-without any additional information). Neither is it the fact that
-different coordinate systems are in use (because we could legitimately
-inter-compare two different celestial coordinate systems without any
-extra information). Instead, it is the different nature of the
-coordinate spaces to which these coordinate systems have been applied.
-
-We normally express this by saying that the coordinate systems apply
-to different {\em{physical domains}}. Although we may establish
-{\em{ad hoc}} relationships between coordinates in different physical
-domains, they are not intrinsically related to each other and we need
-to supply extra information before we can convert coordinates between
-them.
-
-In AST, the role of the (character string) Domain attribute is to
-assign Frames to their respective physical domains. The way it
-operates is as follows:
-
-\begin{itemize}
-\item Coordinate systems which apply to the same physical domain
-({\em{i.e.}}\ whose Frames have the same Domain value) can be directly
-inter-compared.
-
-If the domain has several coordinate systems associated with it
-({\em{e.g.}}\ the celestial sphere), then a coordinate conversion may
-be involved. Otherwise, coordinate values may simply be equated.
-
-\item Coordinate systems which apply to different physical domains
-({\em{i.e.}}\ whose Frames have different Domain values) cannot be
-directly inter-compared.
-
-If any relationship does exist between such coordinate systems---and
-it need not---then additional information must be supplied in order to
-establish the relationship between them in any particular case. We
-will see later (\secref{ss:framesets}) how to establish such
-relationships between Frames in different domains.
-\end{itemize}
-
-With the basic Frames we are considering here, each physical domain only
-has a single (Cartesian) coordinate system associated with it, so that if
-two such Frames have the same Domain value, their coordinate systems will
-be identical and may simply be equated. With more specialised Frames,
-however, more than one coordinate system may apply to each domain. In
-such cases, a coordinate conversion may need to be performed.
-
-When a basic Frame is created, its Domain attribute defaults to an
-empty string. This means that all such Frames belong to the same
-(null) domain by default and therefore describe the same unspecified
-physical coordinate space. In order to assign a Frame to a different
-domain, you simply need to set its Domain value. This is normally most
-conveniently done when it is created, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-frame1 = astFrame( 2, "Domain=CCD_CHIP,"
- "Unit(1)=micron,"
- "Unit(2)=micron" );
-frame2 = astFrame( 2, "Domain=FOCAL_PLANE,"
- "Unit(1)=mm,"
- "Unit(2)=mm" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, we have created two Frames in different physical
-domains. Although their coordinate values all have units of length,
-they cannot be directly inter-compared (because their axes may be
-rotated with respect to each other, for instance).
-
-All Domain values are automatically converted to upper case and white
-space is removed, but there are no other restrictions on the names you
-may use to label different physical domains. From a practical point of
-view, however, it is worth following a few conventions
-(\secref{ss:domainconventions}).
-
-\subsection{\label{ss:domainconventions}Conventions for Domain Names}
-
-When choosing a value for the \htmlref{Domain}{Domain} attribute of a \htmlref{Frame}{Frame}, it
-obviously makes sense to avoid generic names which might clash with
-those used for similar (but subtly different!) purposes by other
-programmers. If you are developing software for an instrument, for
-example, and want to identify an instrumental coordinate system, then
-it is sensible to add a distinguishing prefix. For instance, you might
-use $<$INST$>$\_FOCAL\_PLANE, where $<$INST$>$ ({\em{e.g.}}\ an
-acronym) identifies your instrument.
-
-For some purposes, however, a standard choice of Domain name is
-desirable so that different items of software can communicate. For
-this purpose, the following Domain names are reserved by AST and the
-use recommended below should be carefully observed:
-
-\begin{quote}
-\begin{description}
-\item[GRAPHICS]\mbox{}\\
-Identifies the coordinate space used by an underlying computer
-graphics system to specify plotting operations. Typically, when
-performing graphical operations, AST is used to define additional
-coordinate systems which are related to these ``native'' graphical
-coordinates. Plotting may be carried out in any of these coordinate
-systems, but the GRAPHICS domain identifies the native coordinates
-through which AST communicates with the underlying graphics system.
-
-\item[GRID]\mbox{}\\
-Identifies the instantaneous {\em{data grid}} used to store and handle
-data, together with an associated coordinate system. In this
-coordinate system, the first element stored in an array of data always
-has a coordinate value of unity at its centre and all elements have
-unit extent. This applies to all dimensions.
-
-If data are copied or transformed to a new data grid (by whatever
-means), or a subset of the original grid is extracted, then the same
-rules apply to the copy or subset. Its first element therefore has
-GRID coordinate values of unity at its centre. Note that this means
-that GRID coordinates remain attached to the first element of the data
-grid and not to its data content ({\em{e.g.}}\ the features in an
-image).
-
-\item[PIXEL]\mbox{}\\
-Identifies an array of pixels and an associated {\em{pixel-based}}
-coordinate system which is related to the GRID coordinate system
-(above) simply by a shift of origin along each axis. This shift may be
-integral, fractional, positive, negative or zero. The data elements
-retain their unit extent along each axis.
-
-Because the amount of shift is unspecified, the PIXEL domain is
-distinct from the GRID domain. The relationship between them contains
-a degree of uncertainty, such as typically arises from the different
-conventions used by different software systems. For instance, in some
-software the first pixel is regarded as being centred at (1,1), while
-in other software it is at (0.5,0.5). In addition, some software
-packages implement a ``pixel origin'' which allows pixel coordinates
-to start at an arbitrary value.
-
-The GRID domain (which corresponds with the pixel-numbering convention
-used by FITS) is a special case of the PIXEL domain and avoids this
-uncertainty. In general, additional information is required in order
-to convert from one to the other.
-
-\item[SKY]\mbox{}\\
-Identifies the domain which contains all equivalent celestial
-coordinate systems. Because these are represented in AST by SkyFrames
-(\secref{ss:skyframes}), it should be no surprise that the default
-Domain value for a \htmlref{SkyFrame}{SkyFrame} is SKY. Since there is only one sky, you
-probably won't need to change this very often.
-
-\item[SPECTRUM]\mbox{}\\
-Identifies the domain used to describe positions within an
-electro-magnetic spectrum. The AST \htmlref{SpecFrame}{SpecFrame} (\secref{ss:specframes})
-class describes positions within this domain, allowing a wide range of
-different coordinate systems to be used (frequency, wavelength,
-{\em{etc}}). The default Domain value for a SpecFrame is SPECTRUM.
-
-\item[TIME]\mbox{}\\
-Identifies the domain used to describe moments in time. The AST \htmlref{TimeFrame}{TimeFrame}
-class describes positions within this domain, allowing a wide range of
-different coordinate systems and timescales to be used. The default Domain
-value for a TimeFrame is TIME.
-
-\end{description}
-\end{quote}
-
-Although we have drawn a necessary distinction here between the GRID
-and PIXEL domains, we will continue to refer in general terms to image
-``pixels'' and ``pixel coordinates'' whenever this distinction is not
-important. This should not be taken to imply that the GRID convention
-for numbering pixels is excluded---in fact, it is usually to be
-preferred (at the level of data handling being discussed in this
-document) and we recommend it.
-
-\subsection{\label{ss:frameunits}The Unit Attribute}
-Each axis of a \htmlref{Frame}{Frame} has a Unit attribute which holds the physical units used
-to describe positions on the axis. The index of the axis to which the
-attribute refers should normally be placed in parentheses following the
-attribute name (``Unit(2)'' for instance). However, if the Frame has only
-a single axis, then the axis index can be omitted.
-
-In versions of AST prior to version 2.0, the Unit attribute was nothing
-more than a descriptive string intended purely for human readers---no
-part of the AST system used the Unit string for any purpose (other than
-inclusion in axis labels produced by the \htmlref{Plot}{Plot} class). In particular, no
-account was taken of the Unit attribute when finding the \htmlref{Mapping}{Mapping} between
-two Frames. Thus if the conversion between a pair of 1-dimensional Frames
-representing velocity was found (using
-\htmlref{astConvert}{astConvert}
-) the returned Mapping would always be a \htmlref{UnitMap}{UnitMap}, even if the Unit
-attributes of the two Frames were ``km/h'' and ``m/s''. This behaviour is
-referred to below as a \emph{passive} Unit attribute.
-
-As of AST version 2.0, a facility exists which allows the Unit attribute
-to be \emph{active}; that is, differences in the
-Unit attribute may be taken into account when finding the Mapping between
-two Frames. In order to minimise the risk of breaking older software, the
-\emph{default} behaviour of simple Frames and SkyFrames is unchanged from
-previous versions (\emph{i.e.} they have passive Unit attributes). However,
-the new
-functions \htmlref{astSetActiveUnit}{astSetActiveUnit} and \htmlref{astGetActiveUnit}{astGetActiveUnit}
-allow this default behaviour to be changed. The \htmlref{SpecFrame}{SpecFrame} and \htmlref{TimeFrame}{TimeFrame}
-classes \emph{always} have an active Unit attribute (attempts to change this
-are ignored).
-
-For instance, consider the above example of two 1-dimensional Frames
-describing velocity. These Frames can be created as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFrame *frame1, *frame2;
-frame1 = astFrame( 1, "Domain=VELOCITY,Unit=km/h" );
-frame2 = astFrame( 1, "Domain=VELOCITY,Unit=m/s" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-By default, these Frames have passive Unit attributes, and so an attempt
-to find a Mapping between them would ignore the difference in their Unit
-attributes and return a unit Mapping. To avoid this, we indicate that we
-want these Frames to have \emph{active} Unit attributes, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSetActiveUnit( frame1, 1 );
-astSetActiveUnit( frame2, 1 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-If we then find the Mapping between them as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFrameSet *cvt;
-...
-cvt = astConvert( frame1, frame2, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-the Mapping contained within the \htmlref{FrameSet}{FrameSet} returned by
-astConvert
-will be a one-dimensional \htmlref{ZoomMap}{ZoomMap} which simply scales its input (a
-velocity in $km/h$) by a factor of 0.278 to create its output (a velocity
-in $m/s$).
-
-In fact we need not have set the Unit attribute active in ``frame1''
-since the behaviour of astConvert is determined by its ``to'' Frame
-(the second Frame parameter).
-
-\subsubsection{\label{ss:unitsyntax}The Syntax for Unit Strings}
-Conversion between units systems relies on the use of a specific syntax
-for the Unit attribute. If the value of the Unit attribute does not
-conform to this syntax, then an error will be reported if an attempt is
-made to use it to determine an inter-unit \htmlref{Mapping}{Mapping} (this will never happen
-if the Unit attribute is \emph{passive}).
-
-The adopted syntax is that described in FITS-WCS paper I "Representation
-of World Coordinate in FITS" by Greisen \& Calabretta. We distinguish
-here between ``basic'' units and ``derived'' units: derived units are
-defined in terms of other units (either derived or basic), whereas basic
-units have no such definitions. Derived units may be represented by their
-own \emph{symbol} (\emph{e.g.} ``Jy''---the Jansky) or by a
-\emph{mathematical expression} which combines other symbols and constants
-to form a definition of the unit (\emph{e.g.} ``km/s''---kilometres per
-second). Unit symbols may be prefixed by a string representing a standard
-multiple or sub-multiple.
-
-In addition to the unit symbols listed in FITS-WCS Paper I, any other
-arbitrary unit symbol may be used, with the proviso that it will not be
-possible to convert between Frames using such units. The exception to
-this is if both Frames refer to the same unknown unit string. For instance,
-an axis with unknown unit symbol "flop" \emph{could} be converted to an axis
-with unit "Mflop" (Mega-flop).
-
-Unit symbols (optionally prefixed with a multiple or sub-multiple) can be
-combined together using a limited range of mathematical operators and
-functions, to produce new units. Such expressions may also contain
-parentheses and numerical constants (these may optionally use
-``scientific'' notation including an ``E'' character to represent the
-power of 10).
-
-The following tables list the symbols for the basic and derived units which
-may be included in a units string, the standard prefixes for multiples
-and sub-multiples, and the strings which may be used to represent
-mathematical operators and functions.
-
-\begin{table}[htbp]
-\begin{center}
-\begin{tabular}{|l|l|l|}
-\hline
-\multicolumn{3}{|c|}{{\large Basic units}} \\ \hline
-\multicolumn{1}{|c|}{Quantity} & \multicolumn{1}{|c|}{Symbol} &
-\multicolumn{1}{c|}{\htmlref{Full}{Full} Name} \\ \hline
-length & m & metre \\
-mass & g & gram \\
-time & s & second \\
-plane angle & rad & radian \\
-solid angle & sr & steradian \\
-temperature & K & Kelvin \\
-electric current & A & Ampere \\
-amount of substance & mol & mole \\
-luminous intensity & cd & candela \\
-\hline
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}[htbp]
-\begin{center}
-\begin{tabular}{|l|l|l|l|}
-\hline
-\multicolumn{4}{|c|}{{\large Derived units}} \\ \hline
-\multicolumn{1}{|c|}{Quantity} & \multicolumn{1}{|c|}{Symbol} &
-\multicolumn{1}{c|}{Full Name} & \multicolumn{1}{c|}{Definition} \\ \hline
-area & barn & barn & 1.0E-28 m**2 \\
-area & pix & pixel & \\
-area & pixel & pixel & \\
-electric capacitance & F & Farad & C/V \\
-electric charge & C & Coulomb & A s \\
-electric conductance & S & Siemens & A/V \\
-electric potential & V & Volt & J/C \\
-electric resistance & Ohm & Ohm & V/A \\
-energy & J & Joule & N m \\
-energy & Ry & Rydberg & 13.605692 eV \\
-energy & eV & electron-Volt & 1.60217733E-19 J \\
-energy & erg & erg & 1.0E-7 J \\
-events & count & count & \\
-events & ct & count & \\
-events & ph & photon & \\
-events & photon & photon & \\
-flux density & Jy & Jansky & 1.0E-26 W /m**2 /Hz \\
-flux density & R & Rayleigh & 1.0E10/(4*PI) photon.m**-2 /s/sr \\
-flux density & mag & magnitude & \\
-force & N & Newton & kg m/s**2 \\
-frequency & Hz & Hertz & 1/s \\
-illuminance & lx & lux & lm/m**2 \\
-inductance & H & Henry & Wb/A \\
-length & AU & astronomical unit & 1.49598E11 m \\
-length & Angstrom & Angstrom & 1.0E-10 m \\
-length & lyr & light year & 9.460730E15 m \\
-length & pc & parsec & 3.0867E16 m \\
-length & solRad & solar radius & 6.9599E8 m \\
-luminosity & solLum & solar luminosity & 3.8268E26 W \\
-luminous flux & lm & lumen & cd sr \\
-magnetic field & G & Gauss & 1.0E-4 T \\
-magnetic flux & Wb & Weber & V s \\
-mass & solMass & solar mass & 1.9891E30 kg \\
-mass & u & unified atomic mass unit & 1.6605387E-27 kg \\
-magnetic flux density & T & Tesla & Wb/m**2 \\
-plane angle & arcmin & arc-minute & 1/60 deg \\
-plane angle & arcsec & arc-second & 1/3600 deg \\
-plane angle & mas & milli-arcsecond & 1/3600000 deg \\
-plane angle & deg & degree & pi/180 rad \\
-power & W & Watt & J/s \\
-pressure, stress & Pa & Pascal & N/m**2 \\
-time & a & year & 31557600 s \\
-time & d & day & 86400 s \\
-time & h & hour & 3600 s \\
-time & yr & year & 31557600 s \\
-time & min & minute & 60 s \\
- & D & Debye & 1.0E-29/3 C.m \\
-\hline
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}[htbp]
-\begin{center}
-\begin{tabular}{|lll|lll|}
-\hline
-\multicolumn{6}{|c|}{{\large Prefixes for multiples \&
-sub-multiples}} \\ \hline
-\multicolumn{1}{|c}{Sub-multiple} & \multicolumn{1}{c}{Name} &
-\multicolumn{1}{c|}{Prefix} &
-\multicolumn{1}{|c}{Sub-multiple} & \multicolumn{1}{c}{Name} &
-\multicolumn{1}{c|}{Prefix} \\ \hline
-$10^{-1}$ & deci & d & $10$ & deca & da \\
-$10^{-2}$ & centi & c & $10^{2}$ & hecto & h \\
-$10^{-3}$ & milli & m & $10^{3}$ & kilo & k \\
-$10^{-6}$ & micro & u & $10^{6}$ & mega & M \\
-$10^{-9}$ & nano & n & $10^{9}$ & giga & G \\
-$10^{-12}$ & pico & p & $10^{12}$ & tera & T \\
-$10^{-15}$ & femto & f & $10^{15}$ & peta & P \\
-$10^{-18}$ & atto & a & $10^{18}$ & exa & E \\
-$10^{-21}$ & zepto & z & $10^{21}$ & zetta & Z \\
-$10^{-24}$ & yocto & y & $10^{24}$ & yotta & Y \\
-\hline
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}[htbp]
-\begin{center}
-\begin{tabular}{|l|l|}
-\hline
-\multicolumn{2}{|c|}{{\large Mathematical operators \& functions}} \\
-\hline
-\multicolumn{1}{|c|}{String} & \multicolumn{1}{|c|}{Meaning} \\ \hline
-sym1 sym2 & multiplication (a space) \\
-sym1*sym2 & multiplication (an asterisk) \\
-sym1.sym2 & multiplication (a dot) \\
-sym1/sym2 & division \\
-sym1**y & exponentiation ($y$ must be a numerical constant)\\
-sym1\verb+^+y & exponentiation ($y$ must be a numerical constant)\\
-log(sym1) & common logarithm \\
-ln(sym1) & natural logarithm \\
-exp(sym1) & exponential \\
-sqrt(sym1) & square root \\
-\hline
-\end{tabular}
-\end{center}
-\end{table}
-
-\subsubsection{Side-effects of Changing the Unit attribute}
-If an \htmlref{Axis}{Axis} has an active Unit attribute, changing its value (either by
-setting a new value or by clearing it so that the default value is
-re-instated) may cause the Label and Symbol attributes to be changed
-accordingly. For instance, if an Axis has Unit, Label and Symbol of ``Hz'',
-``Frequency'' and ``nu'', then changing its Unit attribute to ``log(Hz)''
-will cause AST to change its Label and Symbol to ``log(Frequency)'' and
-``Log(nu)''. These changes are only made if the Unit attribute is active,
-and a \htmlref{Mapping}{Mapping} can be found from the old units to the new units. On the other
- hand, changing the Unit from ``Hz'' to ``MHz'' would not cause any change
-to the Label or Symbol attributes.
-
-\cleardoublepage
-\section{\label{ss:skyframes}Celestial Coordinate Systems (SkyFrames)}
-
-A \htmlref{Frame}{Frame} which is specialised for representing coordinate systems on
-the celestial sphere is obviously of great importance in
-astronomy. The \htmlref{SkyFrame}{SkyFrame} is such a Frame. In this section we examine
-the additional properties and behaviour of a SkyFrame that distinguish
-it from a basic Frame (\secref{ss:frames}).
-
-\subsection{The SkyFrame Model}
-
-A \htmlref{SkyFrame}{SkyFrame} is, of course, a \htmlref{Frame}{Frame} (\secref{ss:frames}) and also a
-\htmlref{Mapping}{Mapping} (\secref{ss:mappings}), so it inherits all the properties and
-behaviour of these two ancestral classes. When used as a Mapping, a
-SkyFrame implements a unit transformation, exactly like a basic Frame
-(\secref{ss:frameasmapping}) or a \htmlref{UnitMap}{UnitMap}, so this aspect of its
-behaviour is not of great importance.
-
-When used as a Frame, however, a SkyFrame represents a 2-dimensional
-{\em{spherical}} coordinate system, in which the shortest distance
-between two points is a great circle. A SkyFrame therefore always has
-exactly two axes which represent the longitude and latitude of a
-coordinate system residing on the celestial sphere. Many such
-coordinate systems can be represented by a SkyFrame, as we will see
-shortly.
-
-A SkyFrame can represent any of the commonly used celestial coordinate
-systems. Optionally, the origin of the longitude/latitude system can be
-moved to any specified point in the standard celestial system, allowing
-a SkyFrame to represent offsets from a specified sky position.
-
-When it is first created, a SkyFrame's axes are always in the order
-(longitude,~latitude) but this can be changed, if required, by using the
-\htmlref{astPermAxes}{astPermAxes} function (\secref{ss:permutingaxes}). The order of the axes
-can be determined at any time using the \htmlref{LatAxis}{LatAxis} and \htmlref{LonAxis}{LonAxis} attributes. A
-SkyFrame's coordinate values are always stored as angles in (double
-precision) radians, regardless of the setting of the Unit attribute.
-
-\subsection{Creating a SkyFrame}
-
-The \htmlref{SkyFrame}{SkyFrame} constructor function is particularly simple and a
-SkyFrame with default attributes is created as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-AstSkyFrame *skyframe;
-
-...
-
-skyframe = astSkyFrame( "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Such a SkyFrame would represent the default celestial coordinate
-system which, at present, is the ICRS system (the default was "FK5(J2000)"
-in versions of AST prior to 3.0).
-
-\subsection{Specifying a Particular Celestial Coordinate System}
-
-For many purposes, the ICRS coordinate system is perfectly
-adequate. In order to support conversion between a variety of
-celestial coordinate systems, however, you can create SkyFrames that
-represent any of these.
-
-Selection of a particular coordinate system is performed simply by
-setting a value for the \htmlref{SkyFrame}{SkyFrame}'s (character string) \htmlref{System}{System}
-attribute. This setting is most conveniently done when the SkyFrame is
-created. For example, a SkyFrame representing the old FK4~(B1950.0)
-coordinate system would be created by:
-
-\begin{quote}
-\small
-\begin{verbatim}
-skyframe = astSkyFrame( "System=FK4" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note that specifying ``System$=$FK4'' also changes the associated
-equinox (from J2000.0 to B1950.0). This is because the default value
-of the SkyFrame's \htmlref{Equinox}{Equinox} attribute (\secref{ss:equinoxitem}) depends
-on the System attribute setting.
-
-You may change the System value at any time, although this is not
-usually needed. The values supported are set out in the attribute's
-description in \appref{ss:attributedescriptions} and include a variety
-of equatorial coordinate systems, together with ecliptic and galactic
-coordinates.
-
-General spherical coordinates are supported by specifying
-``System$=$unknown''. You should note, though, that no \htmlref{Mapping}{Mapping} can be
-created to convert between ``unknown'' coordinates and any of the other
-celestial coordinate systems (see \secref{ss:introducingconversion} ).
-
-\subsection{Attributes which Qualify Celestial Coordinate Systems}
-
-Many celestial coordinate systems have some additional free parameters
-which serve to identify a particular coordinate system from amongst a
-broader class of related coordinate systems. For example, the
-FK5~(J2010.0) system is distinguished from the FK5~(J2000.0)
-system by a different equinox---and the coordinates of a fixed
-astronomical source would have different values when expressed in
-these two systems.
-
-In AST, these free parameters are represented by additional \htmlref{SkyFrame}{SkyFrame}
-attributes, each of which has a default appropriate to
-({\em{i.e.}}\ defined by) the setting of the main \htmlref{System}{System}
-attribute. Each of these {\em{qualifying attributes}} may, however, be
-assigned an explicit value so as to select a particular coordinate
-system. Note, it is usually best to assign explicit
-values whenever possible rather than relying on defaults. Attribute
-should only be left at their default value if you ``don't care'' what
-value is used. In certain circumstances (particularly, when aligning two
-Frames), a default value for an attribute may be replaced by the value
-from another similar \htmlref{Frame}{Frame}. Such value replacement can be prevented by
-assigning an explicit value to the attribute, rather than simply relying on
-the default.
-
-
-The main SkyFrame attributes which qualify the System attribute are:
-
-\begin{quote}
-\begin{description}
-
-\item[\label{ss:epochitem}\htmlref{Epoch}{Epoch}]\mbox{}\\
-This attribute is inherited from the Frame class. It gives the moment in
-time when the coordinates are correct for the astronomical source
-under study (usually the date of observation).
-
-\item[\label{ss:equinoxitem}\htmlref{Equinox}{Equinox}]\mbox{}\\
-This value is used to qualify celestial coordinate systems that are
-notionally based on the Earth's equator and/or the ecliptic (the plane
-of the Earth's orbit around the Sun). The position of either of these
-planes is difficult to specify precisely, so in practice a model
-{\em{mean}}\ equator and/or ecliptic are used instead. These, together
-with the point on the sky that defines the coordinate origin (termed
-the {\em{mean equinox}}) move with time according to some model which
-smoothes out the more rapid fluctuations. The SkyFrame class supports
-both the old FK4 model and the newer FK5 one.
-
-Coordinates expressed in any of these systems vary with time due to
-movement (by definition) of the coordinate system itself, and must
-therefore be qualified by a moment in time (the {\em{epoch of the mean
-equinox,}} or ``equinox'' for short) which specifies the position of
-the model coordinate system on the sky. This is the role of the
-Equinox attribute.
-
-Note that it is quite valid and common to relate the position of a
-source to an equinox other than the date of observation. Usually a
-standard equinox such as J2000.0 is used, meaning that the coordinates
-are referred to axes defined by where the model mean equator and
-ecliptic would lie on the sky at the Julian epoch J2000.0.
-\end{description}
-\end{quote}
-
-For further details of these attributes you should consult their
-descriptions in \appref{ss:attributedescriptions} and for details of
-the System settings for which they are relevant, see the description
-of the System attribute (also in \appref{ss:attributedescriptions}).
-For the interested reader, an excellent overview of celestial
-coordinate systems can also be found in the documentation for the
-SLALIB library (\xref{SUN/67}{sun67}{}).
-
-The value of these qualifying attributes is most conveniently set at
-the same time as the System value, {\em{e.g.}}\ when a SkyFrame is
-created. For instance:
-
-\begin{quote}
-\small
-\begin{verbatim}
-skyframe = astSkyFrame( "System=Ecliptic, Equinox=J2005.5" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-would create a SkyFrame representing an ecliptic coordinate system
-referred to the mean equinox and ecliptic of Julian epoch J2005.5.
-
-Note that it does no harm to assign values to qualifying attributes
-which are not relevant to the main System value. Any such values are
-stored, but are not used unless the System value is later set so that
-they become relevant.
-
-\subsection{Using Default SkyFrame Attributes}
-
-The default values supplied for many \htmlref{SkyFrame}{SkyFrame} attributes will depend
-on the value of the SkyFrame's \htmlref{System}{System} attribute. In practice, this
-means that there is usually little need to specify many of these
-attributes explicitly unless you have some special requirement. This
-can be illustrated by using \htmlref{astShow}{astShow} to examine a SkyFrame, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astShow( astSkyFrame( "System=FK4-NO-E, Epoch=1958" ) );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The output from this might look like the following:
-
-\begin{quote}
-\begin{verbatim}
- Begin SkyFrame # Description of celestial coordinate system
-# Title = "FK4 equatorial coordinates; no E-terms; mean equinox B1950.0;
-epoch B1958.0" # Title of coordinate system
- Naxes = 2 # Number of coordinate axes
-# Domain = "SKY" # Coordinate system domain
- Epoch = 1958 # Besselian epoch of observation
-# Lbl1 = "Right ascension" # Label for axis 1
-# Lbl2 = "Declination" # Label for axis 2
- System = "FK4-NO-E" # Coordinate system type
-# Uni1 = "hh:mm:ss.s" # Units for axis 1
-# Uni2 = "ddd:mm:ss" # Units for axis 2
-# Dir1 = 0 # Plot axis 1 in reverse direction
-# Bot2 = -1.5707963267949 # Lowest legal axis value
-# Top2 = 1.5707963267949 # Highest legal axis value
- Ax1 = # Axis number 1
- Begin SkyAxis # Celestial coordinate axis
- End SkyAxis
- Ax2 = # Axis number 2
- Begin SkyAxis # Celestial coordinate axis
- End SkyAxis
- IsA Frame # Coordinate system description
-# Eqnox = 1950 # Besselian epoch of mean equinox
- End SkyFrame
-\end{verbatim}
-\end{quote}
-
-Note that the defaults (indicated by the ``\verb?#?'' comment
-character at the start of the line) for attributes such as the \htmlref{Title}{Title},
-axis Labels and Format specifiers are all set to values appropriate
-for the particular equatorial coordinate system that the SkyFrame
-represents.
-
-This means, for example, that if we were to use this SkyFrame to
-format a right ascension value stored in radians using \htmlref{astFormat}{astFormat}
-(\secref{ss:formattingaxisvalues}), it would automatically result in a
-string in sexagesimal notation (such as ``12:14:35.7'') suitable for
-display. If we changed the value of the SkyFrame's Digits attribute
-(which is inherited from the \htmlref{Frame}{Frame} class), the number of digits
-appearing would also change accordingly.
-
-These choices would be appropriate for a System value of ``FK4-NO-E'',
-but if a different System value were set, the defaults would be
-correspondingly different. For example, ecliptic longitude is
-traditionally expressed in degrees, so setting ``System=ecliptic''
-would result in coordinate values being formatted as degrees by
-default.
-
-Of course, if you do not like any of these defaults, you may always
-over-ride them by setting explicit attribute values yourself.
-
-\subsection{\label{ss:formattingskyaxisvalues}Formatting Celestial Coordinates}
-
-SkyFrames use \htmlref{astFormat}{astFormat} for formatting coordinate values in the same
-way as other Frames (\secref{ss:formattingaxisvalues}). However, they
-offer a different set of formatting options more appropriate to
-celestial coordinates.
-
-The Digits attribute of a \htmlref{SkyFrame}{SkyFrame} behaves in essentially the same way
-as for a basic \htmlref{Frame}{Frame} (\secref{ss:formattingwithdigits}), so the
-precision with which celestial coordinates are displayed can also be
-adjusted in this way. However, the range of format specifiers that can
-be given for the \htmlref{Format(axis)}{Formataxis} attribute, and the default format
-resulting from any particular Digits value, is different.
-
-The syntax of SkyFrame format specifiers is detailed under the
-description of the Format(axis) attribute in
-\appref{ss:attributedescriptions}. Briefly, however, it allows
-celestial coordinates to be expressed either as angles or times and to
-include one or more of the fields:
-
-\begin{quote}
-\begin{itemize}
-\item degrees or hours
-\item arc-minutes or minutes
-\item arc-seconds or seconds
-\end{itemize}
-\end{quote}
-
-with a specified number of decimal places for the final field. A range
-of field separators is also available, as the following examples show:
-
-\begin{quote}
-\begin{center}
-\begin{tabular}{|l|l|}
-\hline
-{\bf{Format Specifier}} & {\bf{Example Formatted Value}}\\
-\hline \hline
-{\tt{d}} & {\tt{219}}\\
-{\tt{d.3}} & {\tt{219.123}}\\
-{\tt{dm}} & {\tt{219:05}}\\
-{\tt{dm.2}} & {\tt{219:05.44}}\\
-{\tt{dms}} & {\tt{219:05:42}}\\
-{\tt{hms.1}} & {\tt{15:44:13.8}}\\
-{\tt{bdms.2}} & {\tt{219 05 42.81}}\\
-{\tt{lhms.3}} & {\tt{15h44m13.88s}}\\
-{\tt{+zlhms}} & {\tt{+06h10m44s}}\\
-{\tt{ms.1}} & {\tt{13145:42.8}}\\
-{\tt{lmst.3}} & {\tt{876m22.854s}}\\
-{\tt{s.2}} & {\tt{788742.81}}\\
-\hline
-\end{tabular}
-\end{center}
-\end{quote}
-
-Note the following key points:
-
-\begin{itemize}
-\item The required fields are specified using characters chosen from
-either ``dms'' or ``hms'' according to whether the value is to be
-formatted as an angle (in degrees) or a time (in hours).
-
-\item If no degrees or hours field is required, the distinction
-between angle and time may be made by including ``t'' to request time.
-
-\item The number of decimal places (for the final field) is indicated
-using ``{\tt{.}}'' followed by an integer. An asterisk can be used in
-place of an integer, in which case the number of decimal places is
-chosen so that the total number of digits in the formatted value is equal
-to the value of the Digits attribute.
-
-\item ``b'' causes fields to be separated by blanks, while ``l''
-causes them to be separated by the appropriate letters (the default
-being a colon).
-
-\item ``z'' causes padding with leading zeros.
-
-\item ``+'' cause a plus sign to be prefixed to positive values
-(negative values always have a minus sign).
-\end{itemize}
-
-The formatting performed by a SkyFrame is also influenced by the
-\htmlref{AsTime(axis)}{AsTimeaxis} attribute, which has a boolean (integer) value for each
-SkyFrame axis. It determines whether the default format specifier for
-an axis will present values as angles ({\em{e.g.}}\ in degrees) if it
-is zero, or as times ({\em{e.g.}}\ in hours) if it is non-zero.
-
-The default AsTime value depends on the celestial coordinate system
-which the SkyFrame represents which, in turn, depends on its \htmlref{System}{System}
-attribute value. For example, equatorial longitude values (right
-ascension) are normally expressed in hours, whereas ecliptic
-longitudes are normally expressed in degrees, so their default AsTime
-values will reflect this difference.
-
-The value of the AsTime attribute may be set explicitly to over-ride
-these defaults if required, with the formatting precision being
-determined by the \htmlref{Digits/Digits(axis)}{DigitsDigitsaxis} value. Alternatively, the
-Format(axis) attribute may be set explicitly to specify both the
-format and precision required. Setting an explicit Format value always
-over-rides the effects of both the Digits and AsTime attributes (unless
-the Format value does not specify the required number of decimal places,
-in which case Digits is used to determine the default number of decimal
-places)
-
-\subsection{\label{ss:unformattingskyaxisvalues}Reading Formatted Celestial Coordinates}
-
-The process of converting formatted celestial coordinates, such as
-might be produced by the \htmlref{astFormat}{astFormat} function
-(\secref{ss:formattingskyaxisvalues}), into numerical (double)
-coordinate values is performed by using \htmlref{astUnformat}{astUnformat}
-(\secref{ss:unformattingaxisvalues}) and passing it a pointer to a
-\htmlref{SkyFrame}{SkyFrame}. The use of a SkyFrame means that the range of input formats
-accepted is appropriate to positions on the sky expressed as angles
-and/or times, while the returned value is in radians.
-
-The following describes the forms of celestial coordinate which are
-supported:
-
-\begin{itemize}
-\item You may supply an optional sign, followed by between one and
-three fields representing either degrees, arc-minutes, arc-seconds or
-hours, minutes, seconds ({\em{e.g.}}\ ``$-$12~42~03'').
-
-\item Each field should consist of a sequence of one or more digits,
-which may include leading zeros. At most one field may contain a
-decimal point, in which case it is taken to be the final field
-({\em{e.g.}}\ decimal degrees might be given as ``124.707'', while
-degrees and decimal arc-minutes might be given as ``$-$13~33.8'').
-
-\item The first field given may take any value, allowing angles and
-times outside the conventional ranges to be represented. However,
-subsequent fields must have values of less than 60 ({\em{e.g.}}
-``720~45~31'' is valid, whereas ``11~45~61'' is not).
-
-\item Fields may be separated by white space or by ``:'' (colon), but
-the choice of separator must be used consistently throughout the
-value. Additional white space may be present around fields and
-separators ({\em{e.g.}}\ ``$-$~2:~04~:~7.1'').
-
-\item The following field identification characters may be used as
-separators to replace those above (or may be appended to the final
-field), in order to identify the field to which they are appended:
-
-\begin{quote}
-\begin{tabular}{lll}
-d & -- & degrees \\
-h & -- & hours \\
-m & -- & minutes (of arc or time) \\
-s & -- & seconds (of arc or time) \\
-{\tt{'}} & -- & arc-minutes \\
-{\tt{"}} & -- & arc-seconds
-\end{tabular}
-\end{quote}
-
-Either lower or upper case may be used. Fields must be given in order
-of decreasing significance
-({\em{e.g.}}\ ``$-$11D~3{\tt{'}}~14.4{\tt{"}}'' or ``22h14m11.2s'').
-
-\item The presence of certain field identification characters
-indicates whether the value is to be interpreted as an angle or a time
-(with 24 hours corresponding to 360 degrees), as follows:
-
-\begin{quote}
-\begin{tabular}{lll}
-d & -- & angle \\
-{\tt{'}} & -- & angle \\
-{\tt{"}} & -- & angle \\
-h & -- & time
-\end{tabular}
-\end{quote}
-
-Incompatible angle/time identification characters may not be mixed
-({\em{e.g.}}\ ``10h14{\tt{'}}3{\tt{"}}'' is not valid). The remaining
-field identification characters and separators do not specify a
-preference for an angle or a time and may be used with either.
-
-\item If no preference for an angle or a time is expressed anywhere
-within the value, then it is interpreted as an angle if the Format
-attribute string associated with the SkyFrame axis generates an angle
-and as a time otherwise. This ensures that values produced by
-astFormat (\secref{ss:formattingskyaxisvalues}) are correctly
-interpreted by astUnformat.
-
-\item Fields may be omitted, in which case they default to zero. The
-remaining fields may be identified by using appropriate field
-identification characters (see above) and/or by adding extra colon
-separators (e.g. ``$-$05m13s'' is equivalent to ``$-$:05:13''). If a field
-is not identified explicitly, it is assumed that adjacent fields have
-been given, after taking account of any extra separator
-characters. For example:
-
-\begin{quote}
-\begin{tabular}{lll}
-10d & -- & degrees \\
-10d12 & -- & degrees and arc-minutes \\
-11:14{\tt{"}} & -- & arc-minutes and arc-seconds \\
-9h13s & -- & hours and seconds of time \\
-:45:33 & -- & minutes and seconds (of arc or time) \\
-:55: & -- & minutes (of arc or time) \\
-::13 & -- & seconds (of arc or time) \\
-$-$6::2.5 & -- & degrees/hours and seconds (of arc or time) \\
-07m14 & -- & minutes and seconds (of arc or time) \\
-$-$8:14{\tt{'}} & -- & degrees and arc-minutes \\
-$-$h3:14 & -- & minutes and seconds of time \\
-h:2.1 & -- & seconds of time
-\end{tabular}
-\end{quote}
-
-\item If fields are omitted in such a way that the remaining ones
-cannot be identified uniquely (e.g. ``01:02''), then the first field
-(either given explicitly or implied by an extra leading colon
-separator) is taken to be the most significant field that astFormat
-would produce when formatting a value (using the Format attribute
-associated with the SkyFrame axis). By default, this means that the
-first field will normally be interpreted as degrees or hours. However,
-if this does not result in consistent field identification, then the
-last field (either given explicitly or implied by an extra trailing
-colon separator) is taken to to be the least significant field that
-astFormat would produce.
-
-\end{itemize}
-
-This final convention is intended to ensure that values formatted by
-astFormat which contain less than three fields will be correctly
-interpreted if read back using astUnformat, even if they do not
-contain field identification characters. However, it also affects
-other forms of input. For example, if the \htmlref{Format(axis)}{Formataxis} string were set
-to ``mst.1'' (producing two fields representing minutes and seconds of
-time), then formatted input would be interpreted by astUnformat as
-follows:
-
-\begin{quote}
-\begin{tabular}{lll}
-12 13 & -- & minutes and seconds \\
-12 & -- & minutes \\
-:13 & -- & seconds \\
-$-$18: & -- & minutes \\
-12.8 & -- & minutes \\
-1 2 3 & -- & hours, minutes and seconds \\
-& & \\
-4{\tt{'}} & -- & arc-minutes \\
-60::{\tt{"}} & -- & degrees \\
-$-$23:{\tt{"}} & -- & arc-minutes \\
-$-$33h & -- & hours
-\end{tabular}
-\end{quote}
-
-(in the last four cases, explicit field identification has been given
-which overrides the implicit identification).
-
-Alternatively, if the Format(axis) string were set to ``s.3''
-(producing only an arc-seconds field), then formatted input would be
-interpreted by astUnformat as follows:
-
-\begin{quote}
-\begin{tabular}{lll}
-12.8 & -- & arc-seconds \\
-12 13 & -- & arc-minutes and arc-seconds \\
-:12 & -- & arc-seconds \\
-13: & -- & arc-minutes \\
-1 2 3 & -- & degrees, arc-minutes and arc-seconds
-\end{tabular}
-\end{quote}
-
-In general, if you are preparing formatted input data containing
-celestial coordinates and wish to omit certain fields, then you are
-advised to identify clearly those that you do provide by using the
-appropriate field identification characters and/or extra colon
-separators. This prevents you depending on the implicit field
-identification described above which, in turn, depends on an
-appropriate Format(axis) string having been set.
-
-When writing software, it is also a good idea to set the Format(axis)
-string so that data input will be as simple as possible for the
-user. Unless some special effect is desired, this normally means that
-it should contain ``d'' or ``h'' to ensure that the first field
-entered by the user will be interpreted as degrees or hours, unless
-otherwise identified. This is the normal behaviour unless an explicit
-Format(axis) value has been set to override the default.
-
-\subsection{Representing Offsets from a Specified Sky Position}
-A \htmlref{SkyFrame}{SkyFrame} can be modified so that its longitude and latitude axes are
-referred to an origin at any specified sky position. Such a coordinate
-system is referred to as an ``offset'' coordinate syetem. First, the \htmlref{System}{System}
-attribute should be set to represent the celestial coordinate system in
-which the origin is to be specified. Then the SkyRef attribute should be
-set to hold the coordinates of the origin within the selected celestial
-coordinate system.
-
-By default, ``north'' in the new offset coordinate system is parallel to
-north in the original celestial coordinate system. However, the direction
-of north in the offset system can be controlled by assigning a value to
-the SkyRefP attribute. This attribute should be assigned the celestial
-coordinates of a point which is on the zero longitude meridian and which
-has non-zero latitude.
-
-By default, the position given by the SkyRef attribute is used as the
-origin of the new longitude/latitude system, but an option exists to use
-it as the north pole of the system instead. This option is controlled by
-the \htmlref{SkyRefIs}{SkyRefIs} attribute. The choice of value for SkyRefIs depends on what
-sort of offset coordinate system you want. Setting SkyRefIs to
-``Origin'' (the default) produces an offset coordinate system which is
-approximately Cartesian close to the specified position. Setting SkyRefIs
-to
-``Pole'' produces an offset coordinate system which is approximately Polar
-close to the specified position.
-
-\cleardoublepage
-\section{\xlabel{ss_specframes}\label{ss:specframes}Spectral Coordinate Systems (SpecFrames)}
-
-The \htmlref{SpecFrame}{SpecFrame} is a \htmlref{Frame}{Frame} which is specialised for representing coordinate
-systems which describe a position within an electro-magnetic spectrum.
-In this section we examine the additional properties and behaviour of a
-SpecFrame that distinguish it from a basic Frame (\secref{ss:frames}).
-
-\subsection{The SpecFrame Model}
-
-As for a \htmlref{SkyFrame}{SkyFrame}, a \htmlref{SpecFrame}{SpecFrame} is a \htmlref{Frame}{Frame} (\secref{ss:frames}) and also a
-\htmlref{Mapping}{Mapping} (\secref{ss:mappings}), so it inherits all the properties and
-behaviour of these two ancestral classes. When used as a Mapping, a
-SpecFrame implements a unit transformation, exactly like a basic Frame
-(\secref{ss:frameasmapping}) or a \htmlref{UnitMap}{UnitMap}, so this aspect of its
-behaviour is not of great importance.
-
-When used as a Frame, however, a SpecFrame represents a wide range of
-different 1-dimensional coordinate system which can be used to describe
-positions within a spectrum. The options available largely mirror those
-described in the FITS-WCS paper III \emph{Representations of spectral
-coordinates in FITS} (Greisen, Valdes, Calabretta \& Allen).
-
-\subsection{Creating a SpecFrame}
-
-The \htmlref{SpecFrame}{SpecFrame} constructor function is particularly simple and a
-SpecFrame with default attributes is created as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-AstSpecFrame *specframe;
-
-...
-
-specframe = astSpecFrame( "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Such a SpecFrame would represent the default coordinate system which is
-heliocentric wavelength in metres (i.e. wavelength corrected to take into
-account the Doppler shift caused by the velocity of the observer around the
-sun).
-
-\subsection{Specifying a Particular Spectral Coordinate System}
-
-Selection of a particular coordinate system is performed simply by
-setting a value for the \htmlref{SpecFrame}{SpecFrame}'s (character string) \htmlref{System}{System}
-attribute. This setting is most conveniently done when the SpecFrame is
-created. For example, a SpecFrame representing Energy would be created by:
-
-\begin{quote}
-\small
-\begin{verbatim}
-specframe = astSpecFrame( "System=Energy" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note that specifying ``System$=$Energy'' also changes the associated
-Unit (from metres to Joules). This is because the default value
-of the SpecFrame's Unit attribute depends on the System attribute setting.
-
-You may change the System value at any time, although this is not
-usually needed. The values supported are set out in the attribute's
-description in \appref{ss:attributedescriptions} and include a variety
-of velocity systems, together with frequency, wavelength, energy,
-wave-number, \emph{etc}.
-
-\subsection{Attributes which Qualify Spectral Coordinate Systems}
-
-Many spectral coordinate systems have some additional free parameters
-which serve to identify a particular coordinate system from amongst a
-broader class of related coordinate systems. For example, the
-velocity systems are all parameterised by a rest frequency---the
-frequency which defines zero velocity, and all coordinate systems
-are qualified by a `standard of rest'' which indicates the rest frame to
-which the values refer.
-
-In AST, these free parameters are represented by additional \htmlref{SpecFrame}{SpecFrame}
-attributes, each of which has a default appropriate to
-({\em{i.e.}}\ defined by) the setting of the main \htmlref{System}{System}
-attribute. Each of these {\em{qualifying attributes}} may, however, be
-assigned an explicit value so as to select a particular coordinate
-system. Note, it is usually best to assign explicit
-values whenever possible rather than relying on defaults. Attribute
-should only be left at their default value if you ``don't care'' what
-value is used. In certain circumstances (particularly, when aligning two
-Frames), a default value for an attribute may be replaced by the value
-from another similar \htmlref{Frame}{Frame}. Such value replacement can be prevented by
-assigning an explicit value to the attribute, rather than simply relying on
-the default.
-
-
-The main SpecFrame attributes which qualify the System attribute are:
-
-\begin{quote}
-\begin{description}
-
-\item[\htmlref{Epoch}{Epoch}]\mbox{}\\
-This attribute is inherited from the Frame class. It gives the moment in
-time when the coordinates are correct for the astronomical source
-under study (usually the date of observation). It is needed in order to
-calculate the Doppler shift produced by the velocity of the observer
-relative to the centre of the earth, and of the earth relative to the sun.
-
-\item[\htmlref{StdOfRest}{StdOfRest}]\mbox{}\\
-This specifies the rest frame in which the coordinates are correct.
-Transforming between different standards of rest involves taking account
-of the Doppler shift introduced by the relative motion of the two
-standards of rest.
-
-\item[\htmlref{RestFreq}{RestFreq}]\mbox{}\\
-Specifies the frequency which correspond to zero velocity. When setting a
-value for this attribute, the value may be supplied as a wavelength
-(including an indication of the units being used, ``nm'' ``Angstrom'',
-\emph{etc.}), which will be automatically be converted to a frequency.
-
-\item[\htmlref{RefRA}{RefRA}]\mbox{}\\
-Specifies the RA (FK5 J2000) of the source. This is used when converting
-between standards of rest. It specifies the direction along which the
-component of the relative velocity of the two standards of rest is taken.
-
-\item[\htmlref{RefDec}{RefDec}]\mbox{}\\
-Specifies the Dec (FK5 J2000) of the source. Used in conjunction with
-REFRA.
-
-\item[\htmlref{SourceVel}{SourceVel}]\mbox{}\\
-This defines the ``source'' standard of rest. This is a rest frame which
-is moving towards the position given by RefRA and RefDec, at a velocity
-given by SourceVel. The velocity is stored internally as a heliocentric
-velocity, but can be given in any of the other supported standards of rest.
-
-\end{description}
-\end{quote}
-
-For further details of these attributes you should consult their
-descriptions in \appref{ss:attributedescriptions} and for details of
-the System settings for which they are relevant, see the description
-of the System attribute (also in \appref{ss:attributedescriptions}).
-
-Note that it does no harm to assign values to qualifying attributes
-which are not relevant to the main System value. Any such values are
-stored, but are not used unless the System value is later set so that
-they become relevant.
-
-\subsection{Using Default SpecFrame Attributes}
-
-The default values supplied for many \htmlref{SpecFrame}{SpecFrame} attributes will depend
-on the value of the SpecFrame's \htmlref{System}{System} attribute. In practice, this
-means that there is usually little need to specify many of these
-attributes explicitly unless you have some special requirement. This
-can be illustrated by using \htmlref{astShow}{astShow} to examine a SpecFrame, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astShow( astSpecFrame( "System=Vopt, RestFreq=250 GHz" ) );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The output from this might look like the following:
-
-\begin{quote}
-\begin{verbatim}
- Begin SpecFrame # Description of spectral coordinate system
-# Title = "Optical velocity, rest frequency = 250 GHz" # Title
-of coordinate system
- Naxes = 1 # Number of coordinate axes
-# Domain = "SPECTRUM" # Coordinate system domain
-# Epoch = 2000 # Julian epoch of observation
-# Lbl1 = "Optical velocity" # Label for axis 1
- System = "VOPT" # Coordinate system type
-# Uni1 = "km/s" # Units for axis 1
- Ax1 = # Axis number 1
- Begin Axis # Coordinate axis
- End Axis
- IsA Frame # Coordinate system description
-# SoR = "Heliocentric" # Standard of rest
- RstFrq = 250000000000 # Rest frequency (Hz)
- End SpecFrame
-\end{verbatim}
-\end{quote}
-
-Note that the defaults (indicated by the ``\verb?#?'' comment
-character at the start of the line) for attributes such as the \htmlref{Title}{Title},
-axis Labels and Unit specifiers are all set to values appropriate
-for the particular velocity system that the SpecFrame represents.
-
-These choices would be appropriate for a System value of ``Vopt'',
-but if a different System value were set, the defaults would be
-correspondingly different. For example, by default frequency is measured in
-units of GHz, not $km/s$, so setting ``System=freq''
-would change the appropriate line above from:
-
-\begin{quote}
-\begin{verbatim}
-# Uni1 = "km/s" # Units for axis 1
-\end{verbatim}
-\end{quote}
-
-to
-
-\begin{quote}
-\begin{verbatim}
-# Uni1 = "GHz" # Units for axis 1
-\end{verbatim}
-\end{quote}
-
-Of course, if you do not like any of these defaults, you may always
-over-ride them by setting explicit attribute values yourself. For
-instance, you may choose to have your frequency axis expressed in ``kHz''
-rather than ``GHz''. To do this simply set the attribute value as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSetC( specframe, "Unit", "kHz" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-No error will be reported if you accidentally set an inappropriate Unit value
-(say "J" - Joules)---after all, AST cannot tell what you are about to do,
-and you \emph{may} be about to change the System value to ``Energy''.
-However, an error \emph{will} be reported if you attempt to find a
-conversion between two SpecFrames (for instance using
-\htmlref{astConvert}{astConvert}
-) if either SpecFrame has a Unit value which is inappropriate for its
-System value.
-
-SpecFrame attributes, like all other attributes, all have default
-value. However, be aware that for some attributes these default values
-can never be more than ``a legal numerical value'' and have no
-astronomical significance. For instance, the \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec} attributes
-(which give the source position) both have a default value of zero. So
-unless your source happens to be at that point (highly unlikely!) you will
-need to set new values. Likewise, the \htmlref{RestFreq}{RestFreq} (rest frequency) attribute
-has an arbitrary default value of 1.0E5 GHz. Some operations are not
-affected by inappropriate values for these attributes (for instance,
-converting from frequency to wavelength, changing axis units, \emph{etc}),
-but some are. For instance, converting from frequency to velocity
-requires a correct rest frequency, moving between different standards of
-rest requires a correct source position. The moral is, always set explicit
-values for as many attributes as possible.
-
-\subsection{\label{ss:creatingspectralcubes}Creating Spectral Cubes}
-You can use a \htmlref{SpecFrame}{SpecFrame} to describe the spectral axis in a data cube
-containing two spatial axes and a spectral axis. To do this you would
-create an appropriate SpecFrame, together with a 2-dimensional \htmlref{Frame}{Frame}
-(often a \htmlref{SkyFrame}{SkyFrame}) to describe the spatial axes. You would then combine
-these two Frames together into a single \htmlref{CmpFrame}{CmpFrame}.
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstSkyFrame *skyframe;
-AstSpecFrame *specframe;
-AstCmpFrame *cmpframe;
-...
-skyframe = astSkyFrame( "Epoch=J2002" );
-specframe = astSpecFrame( "System=Freq,StdOfRest=LSRK" );
-cmpframe = astCmpFrame( skyframe, specframe, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-In the resulting CmpFrame, axis 1 will be RA, axis 2 will be Dec and axis
-3 will be Frequency. If this is not the order you want, you can permute
-the axes using
-\htmlref{astPermAxes}{astPermAxes}.
-
-There is one potential problem with this approach if you are interested in
-unusually high accuracy. Conversion between different standards of rest
-involves taking account of the Doppler shift caused by the relative
-motion of the two standards of rest. At some point this involves finding
-the component of the relative velocity in the direction of interest.
-For a SpecFrame, this direction is always given by the \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec}
-attributes, even if the SpecFrame is embedded within a CmpFrame as above.
-It would be more appropriate if this ``direction of interest'' was
-specified by the values passed into the CmpFrame on the RA and DEC axes,
-allowing each pixel within a data cube to have a slightly different
-correction for Doppler shift.
-
-Unfortunately, the SpecFrame class cannot do this (since it is purely a
-1-dimensional Frame), and so some small degree of error will be
-introduced when converting between standards of rest, the size of the
-error varying from pixel to pixel. It is hoped that at some point in the
-future a sub-class of CmpFrame (a SpecCubeFrame) will be added to AST which
-allows for this spatial variation in Doppler shift.
-
-The maximum velocity error introduced by this problem is of the order of
-$V*SIN(FOV)$, where $FOV$ is the angular field of view, and $V$ is the
-relative velocity of the two standards of rest. As an example, when
-correcting from the observers rest frame (i.e. the topocentric rest
-frame) to the kinematic local standard of rest the maximum value of $V$
-is about 20 $km/s$, so for 5 arc-minute field of view the maximum
-velocity error introduced by the correction will be about 0.03 $km/s$. As
-another example, the maximum error when correcting from the observers
-rest frame to the local group is about 5 $km/s$ over a 1 degree field of
-view.
-
-\subsection{\label{ss:handlingdualsidebandspectra}Handling Dual-Sideband Spectra}
-Dual sideband super-heterodyne receivers produce spectra in which each channel
-contains contributions from two different frequencies, referred to as the
-``upper sideband frequency'' and the ``lower sideband frequency''. In the
-rest frame of the observer (topocentric), these are related to each other as
-follows:
-
-\begin{quote}
-\begin{small}
-\begin{equation}
-\label{eqn:dsb}
- f_{lsb} = 2.f_{LO} - f_{usb}
-\end{equation}
-\end{small}
-\end{quote}
-
-where $f_{LO}$ is a fixed frequency known as the ``local oscillator
-frequency''. In other words, the local oscillator frequency is always
-mid-way between any pair of corresponding upper and lower sideband
-frequencies\footnote{Note, this simple relationship only applies if all
-frequencies are topocentric.}. If you want to describe the spectral axis
-of such a spectrum using a \htmlref{SpecFrame}{SpecFrame} you must choose whether you want the
-SpecFrame to describe $f_{lsb}$ or $f_{usb}$ - a basic SpecFrame cannot
-describe both sidebands simultaneously. However, there is a sub-class of
-SpecFrame, called \htmlref{DSBSpecFrame}{DSBSpecFrame}, which overcomes this difficulty.
-
-A DSBSpecFrame has a \htmlref{SideBand}{SideBand} attribute which indicates if the
-DSBSpecFrame is currently being used to describe the upper or lower
-sideband spectral axis. The value of this attribute can be changed at any
-time. If you use the
-\htmlref{astConvert}{astConvert}
-function to find the \htmlref{Mapping}{Mapping} between two DSBSpecFrames, the setting for
-the two SideBand attributes will be taken into account. Thus, if you take
-a copy of a DSBSpecFrame, toggle its SideBand attribute, and then use
-astConvert
-to find a Mapping from the original to the modified copy, the resulting
-Mapping will be of the form of equation \ref{eqn:dsb} (if the
-DSBSpecFrame has its \htmlref{StdOfRest}{StdOfRest} attribute set to ``Topocentric'').
-
-In general, when finding a Mapping between two arbitrary DSBSpecFrames,
-the total Mapping is made of of three parts in series:
-
-\begin{enumerate}
-\item A Mapping which converts the first DSBSpecFrame into its upper
-sideband representation. If the DSBSpecFrame already represents its upper
-sideband, this Mapping will be a \htmlref{UnitMap}{UnitMap}.
-\item A Mapping which converts from the first to the second DSBSpecFrame,
-treating them as if they were both basic SpecFrames. This takes account of
-any difference in units, standard of rest, system, \emph{etc} between the
-two DSBSpecFrames.
-\item A Mapping which converts the second DSBSpecFrame from its upper
-sideband representation to its current sideband. If the DSBSpecFrame
-currently represents its upper sideband, this Mapping will be a UnitMap.
-\end{enumerate}
-
-If an attempt is made to find the Mapping between a DSBSpecFrame and a
-basic SpecFrame, then the DSBSpecFrame will be treated like a basic
-SpecFrame. In other words, the returned Mapping will not be affected by
-the setting of the SideBand attribute (or any of the other attributes
-specific to the DSBSpecFrame class).
-
-In practice, the local oscillator frequency for a dual sideband
-instrument may not be easily available to an observer. Instead, it is
-common practice to specify the spectral position of some central feature
-in the observation (commonly the centre of the instrument passband),
-together with an ``intermediate frequency''. Together, these two values
-allow the local oscillator frequency to be determined. The intermediate
-frequency is the difference between the topocentric frequency at the
-central spectral position and the topocentric frequency of the local
-oscillator. So:
-
-\begin{quote}
-\begin{small}
-\begin{equation}
-\label{eqn:dsb2}
- f_{LO} = f_{central} + f_{if}
-\end{equation}
-\end{small}
-\end{quote}
-
-The DSBSpecFrame class uses the \htmlref{DSBCentre}{DSBCentre} attribute to specify the central
-spectral position ($f_{central}$), and the \htmlref{IF}{IF} attribute to specify the
-intermediate frequency ($f_{if}$). The DSBCentre value is given and returned
-in the spectral system described by the DSBSpecFrame (thus you do not need to
-calculate the corresponding topocentric frequency yourself - this will be
-done automatically by the DSBSpecFrame when you assign a new value to the
-DSBCentre attribute). The value assigned to the IF attribute should
-always be a topocentric frequency in units of Hz, however a negative
-value may be given to indicate that the DSBCentre value is in the upper
-sideband (that is, if $IF < 0$ then $f_{central} > f_{LO}$). A positive
-value for IF indicates that the DSBCentre value is in the lower sideband
-(that is, if $IF > 0$ then $f_{central} < f_{LO}$).
-
-
-\cleardoublepage
-\section{\xlabel{ss_timeframes}\label{ss:timeframes}Time Systems (TimeFrames)}
-
-The \htmlref{TimeFrame}{TimeFrame} is a \htmlref{Frame}{Frame} which is specialised for representing moments in
-time. In this section we examine the additional properties and behaviour of a
-TimeFrame that distinguish it from a basic Frame (\secref{ss:frames}).
-
-\subsection{The TimeFrame Model}
-
-As for a \htmlref{SkyFrame}{SkyFrame}, a \htmlref{TimeFrame}{TimeFrame} is a \htmlref{Frame}{Frame} (\secref{ss:frames}) and also a
-\htmlref{Mapping}{Mapping} (\secref{ss:mappings}), so it inherits all the properties and
-behaviour of these two ancestral classes. When used as a Mapping, a
-TimeFrame implements a unit transformation, exactly like a basic Frame
-(\secref{ss:frameasmapping}) or a \htmlref{UnitMap}{UnitMap}, so this aspect of its
-behaviour is not of great importance.
-
-When used as a Frame, however, a TimeFrame represents a wide range of
-different 1-dimensional coordinate system which can be used to describe
-moments in time. Absolute times and relative (i.e. elapsed) times are
-supported (attribute \htmlref{TimeOrigin}{TimeOrigin}), as are a range of different time scales
-(attribute \htmlref{TimeScale}{TimeScale}). An absolute or relative value in any time scale can
-be represented in different forms such as Modified Julian Date, Julian \htmlref{Epoch}{Epoch},
-\emph{etc} (attribute \htmlref{System}{System}). AST extends the definition of these systems to
-allow them to be used with any unit of time (attribute Unit). The TimeFrame
-class also allows times to formatted as either a simple floating point value
-or as a Gregorian date and time of day (attribute Format).
-
-\subsection{Creating a TimeFrame}
-
-The \htmlref{TimeFrame}{TimeFrame} constructor function is particularly simple and a
-TimeFrame with default attributes is created as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-AstTimeFrame *timeframe;
-
-...
-
-timeframe = astTimeFrame( "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Such a TimeFrame would represent the default coordinate system which is
-Modified Julian Date (with the usual units of days) in the International
-Atomic Time (TAI) time scale.
-
-\subsection{Specifying a Particular Time System}
-By setting the \htmlref{System}{System} attribute appropriately, the \htmlref{TimeFrame}{TimeFrame} can represent
-Julian Date, Modified Julian Date, Julian \htmlref{Epoch}{Epoch} or Besselian Epoch (the
-time scale is specified by a separate attribute called \htmlref{TimeScale}{TimeScale}).
-
-Selection of a particular coordinate system is performed simply by
-setting a value for the TimeFrame's (character string) System
-attribute. This setting is most conveniently done when the TimeFrame is
-created. For example, a TimeFrame representing Julian Epoch would be created
-by:
-
-\begin{quote}
-\small
-\begin{verbatim}
-timeframe = astTimeFrame( "System=JEPOCH" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note that specifying ``System$=$JEPOCH'' also changes the associated
-default Unit (from days to years). This is because the default value
-of the TimeFrame's Unit attribute depends on the System attribute setting.
-
-You may change the System value at any time, although this is not
-usually needed. The values supported are set out in the attribute's
-description in \appref{ss:attributedescriptions}.
-
-\subsection{Attributes which Qualify Time Coordinate Systems}
-
-Time coordinate systems require some additional free parameters to identify
-a particular coordinate system from amongst a broader class of related
-coordinate systems. For example, all TimeFrames are qualified by the time
-scale (that is, the physical process used to define the flow of time),
-and some require the position of the observer's clock.
-
-In AST, these free parameters are represented by additional \htmlref{TimeFrame}{TimeFrame}
-attributes, each of which has a default appropriate to ({\em{i.e.}}\ defined
-by) the setting of the main \htmlref{System}{System} attribute. Each of these {\em{qualifying
-attributes}} may, however, be assigned an explicit value so as to select a
-particular coordinate system. Note, it is usually best to assign explicit
-values whenever possible rather than relying on defaults. Attribute
-should only be left at their default value if you ``don't care'' what
-value is used. In certain circumstances (particularly, when aligning two
-Frames), a default value for an attribute may be replaced by the value
-from another similar \htmlref{Frame}{Frame}. Such value replacement can be prevented by
-assigning an explicit value to the attribute, rather than simply relying on
-the default.
-
-The main TimeFrame attributes which qualify the System attribute are:
-
-\begin{quote}
-\begin{description}
-
-\item[\htmlref{TimeScale}{TimeScale}]\mbox{}\\
-This specifies the time scale.
-
-\item[\htmlref{LTOffset}{LTOffset}]\mbox{}\\
-This specifies the offset from Local Time to UTC in hours (time zones
-east of Greenwich have positive values). Note, AST uses the value as
-supplied without making any correction for daylight saving.
-
-\item[\htmlref{TimeOrigin}{TimeOrigin}]\mbox{}\\
-This specifies the zero point from which time values are measured, within
-the system specified by the System attribute. Thus, a value ofzero (the
-default) indicates that time values represent absolute times. Non-zero
-values may be used to indicate that the TimeFrame represents elapsed time
-since the specified origin.
-
-\end{description}
-\end{quote}
-
-For further details of these attributes you should consult their
-descriptions in \appref{ss:attributedescriptions} and for details of
-the System settings for which they are relevant, see the description
-of the System attribute (also in \appref{ss:attributedescriptions}).
-
-Note that it does no harm to assign values to qualifying attributes
-which are not relevant to the main System or TimeScale value. Any such
-values are stored, but are not used unless the System and/or TimeScale
-value is later set so that they become relevant.
-
-\cleardoublepage
-\section{\label{ss:cmpframes}Compound Frames (CmpFrames)}
-
-We now turn to a rather special form of \htmlref{Mapping}{Mapping}, the \htmlref{CmpFrame}{CmpFrame}. The
-Frames we have considered so far have been atomic, in the sense that
-they represent pre-defined elementary physical domains. A CmpFrame,
-however, is a compound \htmlref{Frame}{Frame}. In essence, it is a structure for
-containing other Frames and its purpose is to allow those Frames
-to work together in various combinations while appearing as a single
-\htmlref{Object}{Object}. A CmpFrame's behaviour is therefore not pre-defined, but is
-determined by the other Frames it contains (its ``component'' Frames).
-
-As with compound Mappings, compound Frames can be nested within each
-other, forming arbitrarily complex Frames.
-
-\subsection{Creating a CmpFrame}
-A very common use for a \htmlref{CmpFrame}{CmpFrame} within astronomy is to represent a
-``spectral cube''. This is a 3-dimensional \htmlref{Frame}{Frame} in which one of the axes
-represents position within a spectrum, and the other two axes represent
-position on the sky (or some other spatial domain such as the focal plane
-of a telescope). As an example, we create such a CmpFrame in which axes
-1 and 2 represent Right Ascension and Declination (ICRS), and axis 3
-represents wavelength (these are the default coordinate Systems
-represented by a \htmlref{SkyFrame}{SkyFrame} and a \htmlref{SpecFrame}{SpecFrame} respectively):
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstSkyFrame *skyframe;
-AstSpecFrame *specframe;
-AstCmpFrame *cmpframe;
-...
-skyframe = astSkyFrame( "" );
-specframe = astSpecFrame( "" );
-cmpframe = astCmpFrame( skyframe, specframe, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-If it was desired to make RA and Dec correspond to axes 1 and 3, with
-axis 2 being the spectral axis, then the axes of the CmpFrame created
-above would need to be permuted as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int perm[ 3 ];
-...
-
-perm[ 0 ] = 0;
-perm[ 1 ] = 2;
-perm[ 2 ] = 1;
-astPermAxes( cmpframe, perm );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\subsection{The Attributes of a CmpFrame}
-
-A \htmlref{CmpFrame}{CmpFrame} \emph{is a} \htmlref{Frame}{Frame} and so has all the attributes of a Frame.
-The default value for the \htmlref{Domain}{Domain} attribute for a CmpFrame is formed by
-concatenating the Domains of the two component Frames, separated by a
-minus sign (``-'').\footnote{If both component Frames have blank Domains,
-then the default Domain for the CmpFrame is the string ``CMP''.} The (fixed)
-value for its \htmlref{System}{System} attribute is ``Compound''.\footnote{Any attempt to
-change the System value of a CmpFrame is ignored.} A CmpFrame has no
-further attributes over and above those common to all Frames. However,
-attributes of the two component Frames can be accessed as if they were
-attributes of the CmpFrame, as described below.
-
-Frame attributes which are specific to individual axes (such as Label(2),
-Format(1), \emph{etc}) simply mirror the corresponding axes of the
-relevant component Frame. That is, if the ``Label(2)'' attribute of a
-CmpFrame is accessed, the CmpFrame will forward the access request to the
-component Frame which contains axis 2. Thus, default values for axis
-attributes will be the same as those provided by the component Frames.
-
-An axis index can optionally be appended to the name of Frames attributes
-which do not normally have such an index (System, Domain, \htmlref{Epoch}{Epoch}, \htmlref{Title}{Title},
-\emph{etc}). If this is done, the access request is forwarded to the
-component Frame containing the indicated axis. For instance, if a
-CmpFrame contains a \htmlref{SpecFrame}{SpecFrame} and a \htmlref{SkyFrame}{SkyFrame} in that order, and the axes
-have not been permuted, then getting the value of attribute ``System'' will
-return ``Compound'' as mentioned above (that is, the System value of the
-CmpFrame as a whole), whereas getting the value of attribute
-``System(1)'' will return ``Spectral''(that is, the System value of the
-component Frame containing axis 1 --- the SpecFrame).
-
-This technique is not limited to attributes common to all Frames. For
-instance, the SkyFrame class defines an attribute called \htmlref{Equinox}{Equinox} which is
-not held by other classes of Frames. To set a value for the Equinox
-attribute of the SkyFrame contained within the above CmpFrame, assign the
-value to the ``Equinox(2)'' attribute of the CmpFrame. Since the SkyFrame
-defines both axes 2 and 3 of the CmpFrame, we could equivalently have set
-a value for ``Equinox(3)'' since this would also result in the attribute
-access being forwarded to the SkyFrame.
-
-Finally, if an attribute is not qualified by a axis index, attempts will
-be made to access it using each of the CmpFrame axes in turn. Using the
-above example of the spectral cube, if an attempt was made to get the
-value of attribute ``Equinox'' (with no axis index), each axis in turn
-would be used. Since axis 1 is contained within a SpecFrame, the first
-attempt would fail since the SpecFrame class does not have an Equinox
-attribute. However, the second attempt would succeed because axis 2 is
-contained within a SkyFrame which \emph{does} have an Equinox attribute. Thus
-the returned attribute value would be that obtained from the SkyFrame
-containing axis 2. When getting or testing an attribute value, the
-returned value is determined by the \emph{first} axis which recognises
-the attribute. When setting an attribute value, \emph{all} axes
-which recognises the attribute have the attribute value set to the given
-value. Likewise, when clearing an attribute value, all axes
-which recognises the attribute have the attribute value cleared.
-
-\cleardoublepage
-\section{\label{ss:introducingconversion}An Introduction to Coordinate System Conversions}
-
-In this section, we start to look at techniques for converting between
-different coordinate systems. At this stage, the tools we have available
-are Frames (\secref{ss:frames}), SkyFrames (\secref{ss:skyframes}),
-SpecFrames (\secref{ss:specframes}), TimeFrames (\secref{ss:timeframes}) and
-various Mappings (\secref{ss:mappings}). These are sufficient to allow us to
-begin examining the problem, but more sophisticated approaches will also emerge
-later (\secref{ss:framesetconverting}).
-
-\subsection{\label{ss:convertingskyframes}Converting between Celestial Coordinate Systems}
-
-We begin by examining how to convert between two celestial coordinate
-systems represented by SkyFrames, as this is both an illuminating and
-practical example. Consider the problem of converting celestial
-coordinates between:
-
-\begin{enumerate}
-\item The old FK4 system, with no E terms, a Besselian epoch of
-1958.0 and a Besselian equinox of 1960.0.
-
-\item An ecliptic coordinate system based on the mean equinox and
-ecliptic of Julian epoch 2010.5.
-\end{enumerate}
-
-This example is arbitrary but not completely unrealistic. Unless you
-already have expertise with such conversions, you are unlikely to find
-it straightforward.
-
-Using AST, we begin by creating two SkyFrames to represent these
-coordinate systems, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-AstSkyFrame *skyframe1, *skyframe2;
-
-...
-
-skyframe1 = astSkyFrame( "System=FK4-NO-E, Epoch=B1958, Equinox=B1960" );
-skyframe2 = astSkyFrame( "System=Ecliptic, Equinox=J2010.5" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note how specifying the coordinate systems consists simply of
-initialising the attributes of each \htmlref{SkyFrame}{SkyFrame} appropriately. The next
-step is to find a way of converting between these SkyFrames. This is
-done using \htmlref{astConvert}{astConvert}, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFrameSet *cvt;
-
-...
-
-cvt = astConvert( skyframe1, skyframe2, "" );
-if ( cvt == AST__NULL ) {
- <conversion is not possible>
-} else {
- <conversion is possible>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The third argument of astConvert is not used here and should be an
-empty string.
-
-astConvert will return a null result, AST\_\_NULL (as defined in the
-``ast.h'' header file), if conversion is not possible. In this
-example, conversion is possible, so it will return a pointer to a new
-\htmlref{Object}{Object} that describes the conversion.
-
-The Object returned is called a \htmlref{FrameSet}{FrameSet}. We have not discussed
-FrameSets yet (\secref{ss:framesets}), but for the present purposes we
-can consider them simply as Objects that can behave both as Mappings
-and as Frames. It is the FrameSet's behaviour as a \htmlref{Mapping}{Mapping} in which we
-are mainly interested here, because the Mapping it implements is the
-one we require---{\em{i.e.}}\ it converts between the two celestial
-coordinate systems (\secref{ss:framesetsfromconvert}).
-
-For example, if ``alpha1'' and ``delta1'' are two arrays containing
-the longitude and latitude, in radians, of N points on the sky in the
-original coordinate system (corresponding to ``skyframe1''), then they
-could be converted into the new coordinate system (represented by
-``skyframe2'') as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#define N 10
-double alpha1[ N ], delta1[ N ];
-double alpha2[ N ], delta2[ N ];
-
-...
-
-astTran2( cvt, N, alpha1, delta1, 1, alpha2, delta2 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The new coordinates are returned {\em{via}} the ``alpha2'' and
-``delta2'' arrays. To transform coordinates in the opposite
-direction, we simply invert the 5th (boolean int) argument to
-\htmlref{astTran2}{astTran2}, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astTran2( cvt, N, alpha2, delta2, 0, alpha1, delta1 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The FrameSet returned by astConvert also contains information about
-the SkyFrames used in the conversion
-(\secref{ss:framesetsfromconvert}). As we mentioned above, a FrameSet
-may be used as a \htmlref{Frame}{Frame} and in this case it behaves like the
-``destination'' Frame used in the conversion ({\em{i.e.}}\ like
-``skyframe2''). We could therefore use the ``cvt'' FrameSet to
-calculate the distance between two points (with coordinates in
-radians) in the destination coordinate system, using \htmlref{astDistance}{astDistance}:
-
-\begin{quote}
-\small
-\begin{verbatim}
-double distance, point1[ 2 ], point2[ 2 ];
-
-...
-
-distance = astDistance( cvt, point1, point2 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-and the result would be the same as if the ``skyframe2'' SkyFrame had
-been used.
-
-Another way to see how the FrameSet produced by astConvert retains
-information about the coordinate systems involved is to set its \htmlref{Report}{Report}
-attribute (inherited from the Mapping class) so that it displays the
-coordinates before and after conversion (\secref{ss:transforming}):
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSet( cvt, "Report=1" );
-astTran2( cvt, N, alpha1, delta1, 1, alpha2, delta2 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The output from this might look like the following:
-
-\begin{quote}
-\begin{verbatim}
-(2:06:03.0, 34:22:39) --> (42.1087, 20.2717)
-(2:08:20.6, 35:31:24) --> (43.0197, 21.1705)
-(2:10:38.1, 36:40:09) --> (43.9295, 22.0716)
-(2:12:55.6, 37:48:55) --> (44.8382, 22.9753)
-(2:15:13.1, 38:57:40) --> (45.7459, 23.8814)
-(2:17:30.6, 40:06:25) --> (46.6528, 24.7901)
-(2:19:48.1, 41:15:11) --> (47.5589, 25.7013)
-(2:22:05.6, 42:23:56) --> (48.4644, 26.6149)
-(2:24:23.1, 43:32:41) --> (49.3695, 27.5311)
-(2:26:40.6, 44:41:27) --> (50.2742, 28.4499)
-\end{verbatim}
-\end{quote}
-
-Here, we see that the input FK4 equatorial coordinate values (given in
-radians) have been formatted automatically in sexagesimal notation
-using the conventional hours for right ascension and degrees for
-declination. Conversely, the output ecliptic coordinates are shown in
-decimal degrees, as is conventional for ecliptic coordinates. Both are
-displayed using the default precision of 7 digits.\footnote{The
-leading digit is zero and is therefore not seen in this particular
-example.}
-
-In fact, the ``cvt'' FrameSet has access to all the information in the
-original SkyFrames which were passed to astConvert. If you had set a
-new Digits attribute value for either of these, the formatting above
-would reflect the different precision you requested by displaying a
-greater or smaller number of digits.
-
-
-\subsection{\label{ss:convertingspecframes}Converting between Spectral Coordinate Systems}
-The principles described in the previous section for converting between
-celestial coordinate systems also apply to the task of converting between
-spectral coordinate systems. As an example, let's look at how we might
-convert between frequency measured in $GHz$ as measured in the rest frame
-of the telescope, and radio velocity measured in $km/s$ measured with
-respect the kinematic Local Standard of Rest.
-
-First we create a default \htmlref{SpecFrame}{SpecFrame}, and then set its attributes to
-describe the required radio velocity system (this is slightly more
-convenient, given the relatively large number of attributes, than
-specifying the attribute values in a single string such as would be
-passed to the SpecFrame constructor). We then take a copy of this
-SpecFrame, and change the attribute values so that the copy describes the
-original frequency system (modifying a copy, rather than creating a new
-SpecFrame from scratch, avoids the need to specify the epoch, reference
-position, \emph{etc} a second time since they are all inherited by the copy):
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-AstSpecFrame *specframe1, *specframe2;
-
-...
-
-specframe1 = astSpecFrame( "" );
-astSet( specframe1, "System=vradio" );
-astSet( specframe1, "Unit=km/s" );
-astSet( specframe1, "Epoch=1996-Oct-2 12:13:56.985" );
-astSet( specframe1, "ObsLon=W155:28:18" );
-astSet( specframe1, "ObsLat=N19:49:34" );
-astSet( specframe1, "RefRA=18:14:50.6" );
-astSet( specframe1, "RefDec=-4:40:49" );
-astSet( specframe1, "RestFreq=230.538 GHz" );
-astSet( specframe1, "StdOfRest=LSRK" );
-
-specframe2 = astCopy( specframe1 );
-astSet( specframe1, "System=freq" );
-astSet( specframe1, "Unit=GHz" );
-astSet( specframe1, "StdOfRest=Topocentric" );
-
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note, the fact that a SpecFrame has only a single axis means that we were
-able to refer to the Unit attribute without an axis index. The other
-attributes are: the time of of observation (\htmlref{Epoch}{Epoch}), the geographical
-position of the telescope (\htmlref{ObsLat}{ObsLat} \& \htmlref{ObsLon}{ObsLon}), the position of the source
-on the sky (\htmlref{RefRA}{RefRA} \& \htmlref{RefDec}{RefDec}), the rest frequency (\htmlref{RestFreq}{RestFreq}) and the
-standard of rest (\htmlref{StdOfRest}{StdOfRest}).
-
-The next step is to find a way of converting between these SpecFrames. We
-use exactly the same code that we did in the previous section where we were
-converting between celestial coordinate systems:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFrameSet *cvt;
-
-...
-
-cvt = astConvert( specframe1, specframe2, "" );
-if ( cvt == AST__NULL ) {
- <conversion is not possible>
-} else {
- <conversion is possible>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-A before, this will give us a \htmlref{FrameSet}{FrameSet} (assuming conversion is possible,
-which should always be the case for our example), and we can use the
-FrameSet to convert between the two spectral coordinate systems. We use
-\htmlref{astTran1}{astTran1} in place of \htmlref{astTran2}{astTran2}
-since a SpecFrame has only one axis (unlike a \htmlref{SkyFrame}{SkyFrame} which has two).
-
-For example, if ``frq'' is an array containing the observed frequency, in
-GHz, of N spectral channels (describe by ``specframe1''), then they
-could be converted into the new coordinate system (represented by
-``specframe2'') as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#define N 10
-double frq[ N ];
-double vel[ N ];
-
-...
-
-astTran1( cvt, N, frq, 1, vel );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The radio velocity values are returned in the ``vel'' array.
-
-
-\subsection{Converting between Time Coordinate Systems}
-All the principles outlined in the previous section about aligning
-spectral cocordinate systems (SpecFrames) can be applied directly to the
-problem of aligning time coordinate systems (TimeFrames).
-
-\subsection{\label{ss:convertingpermutedaxes}Handling SkyFrame Axis Permutations}
-
-We can illustrate an important point if we swap the axis order of
-either \htmlref{SkyFrame}{SkyFrame} in the example above (\secref{ss:convertingskyframes})
-before identifying the conversion. Let's assume we use \htmlref{astPermAxes}{astPermAxes}
-(\secref{ss:permutingaxes}) to do this to the second SkyFrame, before
-applying \htmlref{astConvert}{astConvert}, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int perm[ 2 ] = { 2, 1 };
-
-...
-
-astPermAxes( skyframe2, perm );
-cvt = astConvert( skyframe1, skyframe2, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Now, the destination SkyFrame system no longer represents the
-coordinate system:
-
-\begin{quote}
-(ecliptic~longitude, ecliptic~latitude)
-\end{quote}
-
-but instead represents the transposed system:
-
-\begin{quote}
-(ecliptic~latitude, ecliptic~longitude)
-\end{quote}
-
-As a consequence, when we use the \htmlref{FrameSet}{FrameSet} returned by astConvert to
-apply a coordinate transformation, we obtain something like the
-following:
-
-\begin{quote}
-\begin{verbatim}
-(2:06:03.0, 34:22:39) --> (20.2717, 42.1087)
-(2:08:20.6, 35:31:24) --> (21.1705, 43.0197)
-(2:10:38.1, 36:40:09) --> (22.0716, 43.9295)
-(2:12:55.6, 37:48:55) --> (22.9753, 44.8382)
-(2:15:13.1, 38:57:40) --> (23.8814, 45.7459)
-(2:17:30.6, 40:06:25) --> (24.7901, 46.6528)
-(2:19:48.1, 41:15:11) --> (25.7013, 47.5589)
-(2:22:05.6, 42:23:56) --> (26.6149, 48.4644)
-(2:24:23.1, 43:32:41) --> (27.5311, 49.3695)
-(2:26:40.6, 44:41:27) --> (28.4499, 50.2742)
-\end{verbatim}
-\end{quote}
-
-When compared to the original (\secref{ss:convertingskyframes}), the
-output coordinate order has been swapped to compensate for the
-different destination SkyFrame axis order.
-
-In all, there are four possible axis combinations, corresponding to two
-possible axis orders for each of the source and destination SkyFrames,
-and astConvert will convert correctly between any of these.
-The point to note is that a SkyFrame contains knowledge about how to
-convert to and from other SkyFrames. Since its two axes (longitude and
-latitude) are distinguishable, the conversion is able to take account
-of the axis order.
-
-If you need to identify the axes of a SkyFrame explicitly, taking into
-account any axis permutations, the \htmlref{LatAxis}{LatAxis} and \htmlref{LonAxis}{LonAxis} attributes can be
-used. These are read-only attributes which give the indices of the
-latitude and longitude axes respectively.
-
-\subsection{\label{ss:convertingframes}Converting Between Frames}
-
-Having seen how clever SkyFrames are (\secref{ss:convertingskyframes}
-and \secref{ss:convertingpermutedaxes}), we will next examine how dumb
-a basic \htmlref{Frame}{Frame} can be in comparison. For example, if we create two
-2-dimensional Frames and use \htmlref{astConvert}{astConvert} to derive a conversion between
-them, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFrame *frame1, *frame2;
-
-...
-
-frame1 = astFrame( 2, "" );
-frame2 = astFrame( 2, "" );
-cvt = astConvert( frame1, frame2, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-then the coordinate transformation which the ``cvt'' \htmlref{FrameSet}{FrameSet} performs
-will be as follows:
-
-\begin{quote}
-\begin{verbatim}
-(1, 2) --> (1, 2)
-(2, 4) --> (2, 4)
-(3, 6) --> (3, 6)
-(4, 8) --> (4, 8)
-(5, 10) --> (5, 10)
-\end{verbatim}
-\end{quote}
-
-This is an identity transformation, exactly the same as a \htmlref{UnitMap}{UnitMap}
-(\secref{ss:unitmapexample}). Even if we permute the axis order of our
-Frames, as we did above (\secref{ss:convertingpermutedaxes}), we will
-fare no better. The conversion between our two basic Frames will
-always be an identity transformation.
-
-The reason for this is that, unlike a \htmlref{SkyFrame}{SkyFrame}, all basic Frames start
-life the same and have axes that are indistinguishable. Therefore,
-permuting their axes doesn't make them look any different---they still
-represent the same coordinate system.
-%Actually, this behaviour isn't as dumb as it seems and can actually be
-%very useful, as the following example illustrates.
-%
-%\subsection{Distinguishable and Indistinguishable Axes}
-%
-%c+
-%Imagine you have two Frames which represent the pixel coordinates of
-%two 2-dimensional images. Let's call their axes ``X'' and ``Y''.
-%Suppose you now transpose the second image and swap its Frame axes
-%(with \htmlref{astPermAxes}{astPermAxes}) to take account of this.
-%c-
-%f+
-%Imagine you have two Frames which represent the pixel coordinates of
-%two 2-dimensional images. Let's call their axes ``X'' and ``Y''.
-%Suppose you now transpose the second image and swap its Frame axes
-%(with astPermAxes) to take account of this.
-%f-
-%
-%Next, consider what happens if you want to subtract one image from the
-%other. If you have a ``subtract'' program that is intelligent and
-%tries to align the two images for you, one of two things could happen:
-%
-%\begin{enumerate}
-%c+
-%\item If the axes are distinguishable, when your program invokes
-%astConvert it will derive a transformation between the two images
-%which swaps the X and Y coordinates (corresponding to the transposition
-%you applied to the second image). However, in aligning X-with-X and
-%Y-with-Y, this will completely undo the effects of your transposition!
-%c-
-%f+
-%\item If the axes are distinguishable, when your program invokes
-%AST\_CONVERT it will derive a transformation between the two images
-%which swaps the X and Y coordinates (corresponding to the transposition
-%you applied to the second image). However, in aligning X-with-X and
-%Y-with-Y, this will completely undo the effects of your transposition!
-%f-
-%
-%\item If the axes are indistinguishable, the transformation between
-%the two images will always be an identity
-%(\secref{ss:convertingframes}). Therefore, your program will align
-%X-with-Y and Y-with-X, so that you see the effects of your earlier
-%transposition of the second image.
-%\end{enumerate}
-%
-%Clearly, if we are considering pixel coordinates, the latter behaviour
-%is preferable, since there would be no point in implementing an image
-%transposition program if we could never see the effects of it. This
-%indicates that a basic Frame, with is indistinguishable axes, is the
-%correct type of \htmlref{Object}{Object} to represent a pixel coordinate system, where
-%this behaviour is necessary.
-%
-%Conversely, the former behaviour would be more useful if the axes we
-%were considering were, say, wavelength (in nm) and slit position (in
-%mm). In this case, we would expect our ``subtract'' program to
-%subtract data at corresponding wavelengths and slit positions, not
-%just at corresponding pixels. This case requires distinguishable axes,
-%so that corresponding axes in the two images can be matched up, just
-%as happens with a SkyFrame (\secref{ss:convertingpermutedaxes}).
-%
-%Of course, there may also be intermediate cases, where some axes are
-%distinguishable and others aren't.
-
-\subsection{\label{ss:alignmentsystem}The Choice of Alignment System}
-
-In practice, when AST is asked to find a conversion between two Frames
-describing two different coordinate systems on a given physical domain,
-it uses an intermediate ``alignment'' system. Thus, when finding a
-conversion from system A to system B, AST first finds the \htmlref{Mapping}{Mapping} from
-system A to some alignment system, system C, and then finds the Mapping
-from this system C to the required system B. It finally concatenates
-these two Mappings to get the Mapping from system A to system B.
-
-One advantage of this is that it cuts down the number of conversion
-algorithms required. If there are $N$ different Systems which may be used
-to describe positions within the \htmlref{Domain}{Domain}, then this approach requires
-about $2*N$ conversion algorithms to be written. The alternative approach
-of going directly from system A to system B would require about $N*N$
-conversion algorithms.
-
-In addition, the use of an intermediate alignment system highlights the
-nature of the conversion process. What do we mean by saying that a
-Mapping ``converts a position in one coordinate system into the
-corresponding position in another''? In practice, it means that the input
-and output coordinates correspond to the same coordinates \emph{in some
-third coordinate system}. The choice of this third coordinate system, the
-``alignment'' system, can completely alter the nature of the Mapping. The
-\htmlref{Frame}{Frame} class has an attribute called \htmlref{AlignSystem}{AlignSystem} which can be used to
-specify the alignment system.
-
-As an example, consider the case of aligning two spectra calibrated in
-radio velocity, but each with a different rest frequency (each spectrum
-will be described by a \htmlref{SpecFrame}{SpecFrame}). Since the rest frequencies differ, a
-given velocity will correspond to different frequencies in the two
-spectra. So when we come to ``align'' these two spectra (that is, find a
-Mapping which converts positions in one SpecFrame to the corresponding
-positions in the other), we have the choice of aligning the frequencies
-or aligning the velocities. Different Mappings will be required to
-describe these two forms of alignment. If we set AlignSystem to ``Freq''
-then the returned Mapping will align the frequencies described by the two
-SpecFrames. On the other hand, if we set AlignSystem to ``Vradio''
-then the returned Mapping will align the velocities.
-
-Some choices of alignment system are redundant. For instance, in the
-above example, changing the alignment system from frequency to wavelength
-has no effect on the returned Mapping: if two spectra are aligned in
-frequency they will also be aligned in wavelength (assuming the speed of
-light doesn't change).
-
-The default value for AlignSystem depends on the class of Frame. For a
-SpecFrame, the default is wavelength (or equivalently, frequency)
-since this is the system in which observations are usually made. The
-SpecFrame class also has an attribute called \htmlref{AlignStdOfRest}{AlignStdOfRest} which
-allows the standard of rest of the alignment system to be specified.
-Similarly, the \htmlref{TimeFrame}{TimeFrame} class has an attribute called \htmlref{AlignTimeScale}{AlignTimeScale}
-which allows the time scale of the alignment system to be specified.
-Currently, the \htmlref{SkyFrame}{SkyFrame} uses ICRS as the default for AlignSystem, since
-this is a close approximation to an inertial frame of rest.
-
-\cleardoublepage
-\section{\label{ss:framesets}Coordinate System Networks (FrameSets)}
-
-We saw in \secref{ss:introducingconversion} how \htmlref{astConvert}{astConvert} could be
-used to find a \htmlref{Mapping}{Mapping} that inter-relates a pair of coordinate systems
-represented by Frames. There is a limitation to this, however, in that
-it can only be applied to coordinate systems that are inter-related by
-suitable conventions. In the case of celestial coordinates, the
-relevant conventions are standards set out by the International
-Astronomical Union, and others, that define what these coordinate
-systems mean. In practice, however, the relationships between many
-other coordinate systems are also of practical importance.
-
-Consider, for example, the focal plane of a telescope upon which an
-image of the sky is falling. We could measure positions in this focal
-plane in millimetres or, if there were a detector system such as a CCD
-present, we could count pixels. We could also use celestial
-coordinates of many different kinds. All of these systems are
-equivalent in their effectiveness at specifying positions in the focal
-plane, but some are more convenient than others for particular
-purposes.
-
-Although we could, in principle, convert between all of these focal
-plane coordinate systems, there is no pre-defined convention for doing
-so. This is because the conversions required depend on where the
-telescope is pointing and how the CCD is mounted in the focal
-plane. Clearly, knowledge about this cannot be built into the AST
-library and must be supplied in some other way. Note that this is
-exactly the same problem as we met in \secref{ss:framedomains} when
-discussing the \htmlref{Domain}{Domain} attribute---{\em{i.e.}}\ coordinate systems that
-apply to different physical domains require that extra information be
-supplied before we can convert between them.
-
-What we need, therefore, is a general way to describe how coordinate
-systems are inter-related, so that when there is no convention already
-in place, we can define our own. We can then look forward to
-converting, say, from pixels into galactic coordinates and {\em{vice
-versa.}} In AST, the \htmlref{FrameSet}{FrameSet} class provides this capability.
-
-\subsection{The FrameSet Model}
-
-Consider a coordinate system (call it number 1) which is represented
-by a \htmlref{Frame}{Frame} of some kind. Now consider a \htmlref{Mapping}{Mapping} which, when applied to
-the coordinates in system 1 yields coordinates in another system,
-number 2. The Mapping therefore inter-relates coordinate systems 1 and
-2.
-
-Now consider a second Mapping which inter-relates system 1 and a
-further coordinate system, number 3. If we wanted to convert
-coordinates between systems 2 and 3, we could do so by:
-
-\begin{enumerate}
-\item Applying our first Mapping in reverse, so as to convert between
-systems 2 and 1.
-
-\item Applying the second Mapping, as given, to convert between
-systems 1 and 3.
-\end{enumerate}
-
-We are not limited to three coordinate systems, of course. In fact, we
-could continue to introduce any number of further coordinate systems,
-so long as we have a suitable Mapping for each one which relates it to
-one of the Frames already present. Continuing in this way, we can
-build up a network in which Frames are inter-related by Mappings in
-such a way that there is always a way of converting between any pair
-of coordinate systems.
-
-The \htmlref{FrameSet}{FrameSet} (Figure~\ref{fig:frameset}) encapsulates these ideas. It
-is a network composed of Frames and associated Mappings, in which
-there is always exactly one path, {\em{via}} Mappings, between any
-pair of Frames. Since we assemble FrameSets ourselves, they can be
-used to represent any coordinate systems we choose and to set up the
-particular relationships between them that we want.
-
-\subsection{\label{ss:creatingaframeset}Creating a FrameSet}
-
-Before we can create a \htmlref{FrameSet}{FrameSet}, we must have a \htmlref{Frame}{Frame} of some kind to
-put into it, so let's create a simple one:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-AstFrame *frame1;
-
-...
-
-frame1 = astFrame( 2, "Domain=A" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-We have set this Frame's \htmlref{Domain}{Domain} attribute (\secref{ss:framedomains}) to
-A so that it will be distinct from the others we will be using. We can
-now create a new FrameSet containing just this Frame, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFrameSet *frameset;
-
-...
-
-frameset = astFrameSet( frame1, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-So far, however, this Frame isn't related to any others.
-
-\subsection{\label{ss:addingframes}Adding New Frames to a FrameSet}
-
-We can now add further Frames to the \htmlref{FrameSet}{FrameSet} created above
-(\secref{ss:creatingaframeset}). To do so, we must supply a new \htmlref{Frame}{Frame}
-and an associated \htmlref{Mapping}{Mapping} that relates it to any of the Frames that
-are already present (there is only one present so far). To keep the
-example simple, we will just use a \htmlref{ZoomMap}{ZoomMap} that multiplies coordinates
-by 10. The required Objects are created as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFrame *frame2;
-AstMapping *mapping12;
-
-...
-
-frame2 = astFrame( 2, "Domain=B" );
-mapping12 = astZoomMap( 2, 10.0, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-To add the new Frame into our FrameSet, we use the \htmlref{astAddFrame}{astAddFrame}
-function:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astAddFrame( frameset, 1, mapping12, frame2 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Whenever a Frame is added to a FrameSet, it is assigned an integer
-index. This index starts with 1 for the initial Frame used to create
-the FrameSet (\secref{ss:creatingaframeset}) and increments by one
-every time a new Frame is added. This index is the primary way of
-identifying the Frames within a FrameSet.
-
-When a Frame is added, we also have to specify which of the existing
-ones the new Frame is related to. Here, we chose number 1, the only
-one present so far, and the new one we added became number 2.
-
-Note that a FrameSet does not make copies of the Frames and Mappings
-that you insert into it. Instead, it holds pointers to them. This
-means that if you retain the original pointers to these Objects and
-alter them, you will indirectly be altering the FrameSet's
-contents. You can, of course, always use \htmlref{astCopy}{astCopy}
-(\secref{ss:copyingobjects}) to make a separate copy of any \htmlref{Object}{Object} if
-you need to ensure its independence.
-
-We could also add a third Frame into our FrameSet, this time defining
-a coordinate system which is reached by multiplying the original
-coordinates (of ``frame1'') by 5:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astAddFrame( frameset, 1, astZoomMap( 2, 5.0, "" ), astFrame( 2, "Domain=C" ) );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, we have avoided storing unnecessary pointer values by using
-function invocations directly as arguments for astAddFrame. This
-assumes that we are using \htmlref{astBegin}{astBegin} and \htmlref{astEnd}{astEnd} (\secref{ss:contexts}) to
-ensure that Objects are correctly deleted when no longer required.
-
-\begin{latexonly}
- Our example FrameSet now contains three Frames and two Mappings with
- the arrangement shown in Figure~\ref{fig:fsexample}.
- \begin{figure}
- \begin{center}
- \includegraphics[scale=0.6]{sun211_figures/fsexample.eps}
- \caption{An example FrameSet, in which Frames~2 and 3 are related to
- Frame~1 by multiplying its coordinates by factors of 10 and 5
- respectively. The FrameSet's \htmlref{Base}{Base} attribute has the value 1 and its
- \htmlref{Current}{Current} attribute has the value 3. The transformation performed when
- the FrameSet is used as a Mapping ({\em{i.e.}}\ from its base to
- its current Frame) is shown in bold.}
- \label{fig:fsexample}
- \end{center}
- \end{figure}
- The total number of Frames is given by its read-only \htmlref{Nframe}{Nframe} attribute.
-\end{latexonly}
-\begin{htmlonly}
- Our example FrameSet now contains three Frames and two Mappings with
- the arrangement shown in the Figure below. The total number of Frames
- is given by its read-only Nframe attribute.
- \begin{quote}
- \begin{figure}
- \label{fig:fsexample}
- \includegraphics[scale=0.9]{sun211_figures/fsexample.eps}
- \caption{An example FrameSet, in which Frames~2 and 3 are related to
- Frame~1 by multiplying its coordinates by factors of 10 and 5
- respectively. The FrameSet's Base attribute has the value 1 and its
- Current attribute has the value 3. The transformation performed when
- the FrameSet is used as a Mapping ({\em{i.e.}}\ from its base to
- its current Frame) is shown in bold.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-
-
-\subsection{\label{ss:baseandcurrent}The Base and Current Frames}
-
-At all times, one of the Frames in a \htmlref{FrameSet}{FrameSet} is designated to be its
-{\em{base}} \htmlref{Frame}{Frame} and one to be its {\em{current}} Frame
-(Figure~\ref{fig:fsexample}). These Frames are identified by two
-integer FrameSet attributes, \htmlref{Base}{Base} and \htmlref{Current}{Current}, which hold the indices
-of the nominated Frames within the FrameSet.
-
-The existence of the base and current Frames reflects an important
-application of FrameSets, which is to attach coordinate systems to
-entities such as data arrays, data files, plotting surfaces (for
-graphics), {\em{etc.}} In this context, the base Frame represents the
-``native'' coordinate system of the attached entity---for example, the
-pixel coordinates of an image or the intrinsic coordinates of a
-plotting surface. The other Frames within the FrameSet represent
-alternative coordinate systems which may also be used to refer to
-positions within that entity. The current Frame represents the
-particular coordinate system which is currently selected for use. For
-instance, if an image were being displayed, you would aim to label it
-with coordinates corresponding to the current Frame. In order to see a
-different coordinate system, a software user would arrange for a
-different Frame to be made current.
-
-The choice of base and current Frames may be changed at any time,
-simply by assigning new values to the FrameSet's Base and Current
-attributes. For example, to make the Frame with index 3 become the
-current Frame, you could use:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSetI( frameset, "Current", 3 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-You can nominate the same Frame to be both the base and current Frame
-if you wish.
-\label{ss:baseandcurrentdefault}
-
-By default ({\em{i.e.}}\ if the Base or Current attribute is un-set),
-the first Frame added to a FrameSet becomes its base Frame and the
-last one added becomes its current Frame.\footnote{Although this is
-reversed if the FrameSet's \htmlref{Invert}{Invert} attribute is non-zero.} Whenever a
-new Frame is added to a FrameSet, the Current attribute is modified so
-that the new Frame becomes the current one. This behaviour is
-reflected in the state of the example FrameSet in
-Figure~\ref{fig:fsexample}.
-
-\subsection{\label{ss:astbaseandastcurrent}Referring to the Base and Current Frames}
-
-It is often necessary to refer to the base and current Frames
-(\secref{ss:baseandcurrent}) within a \htmlref{FrameSet}{FrameSet}, but it can be
-cumbersome having to obtain their indices from the \htmlref{Base}{Base} and \htmlref{Current}{Current}
-attributes on each occasion. To make this easier, two macros,
-AST\_\_BASE and AST\_\_CURRENT, are defined in the ``ast.h'' header
-file and may be used to represent the indices of the base and current
-Frames respectively. They may be used whenever a \htmlref{Frame}{Frame} index is
-required.
-
-For example, when adding a new Frame to a FrameSet
-(\secref{ss:addingframes}), you could use the following to indicate
-that the new Frame is related to the existing current Frame, whatever
-its index happens to be:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFrame *frame;
-AstMapping *mapping;
-
-...
-
-astAddFrame( frameset, AST__CURRENT, mapping, frame );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Of course, the Frame you added would then become the new current
-Frame.
-
-\subsection{\label{ss:framesetasmapping}Using a FrameSet as a Mapping}
-
-The \htmlref{FrameSet}{FrameSet} class inherits properties and behaviour from the \htmlref{Frame}{Frame}
-class (\secref{ss:frames}) and, in turn, from the \htmlref{Mapping}{Mapping} class
-(\secref{ss:mappings}). Its behaviour when used as a Mapping is
-particularly important.
-
-Consider, for instance, passing a FrameSet pointer to a coordinate
-transformation function such as \htmlref{astTran2}{astTran2}:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#define N 10
-double xin[ N ], yin[ N ], xout[ N ], yout[ N ];
-
-...
-
-astTran2( frameset, N, xin, yin, 1, xout, yout );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The coordinate transformation applied by this FrameSet would be the
-one which converts between its base and current Frames. Using the
-FrameSet in Figure~\ref{fig:fsexample}, for example, the coordinates
-would be multiplied by a factor of 5. If we instead requested the
-FrameSet's inverse transformation, we would be transforming from its
-current Frame to its base Frame, so our example FrameSet would then
-multiply by a factor of 0.2.
-
-Whenever the choice of base and current Frames changes, the
-transformations which a FrameSet performs when used as a Mapping also
-change to reflect this. The \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes may also change in
-consequence, because they are determined by the numbers of axes in the
-FrameSet's base and current Frames respectively. These numbers need
-not necessarily be equal, of course.
-
-Like any Mapping, a FrameSet may also be inverted by changing the
-boolean sense of its \htmlref{Invert}{Invert} attribute, {\em{e.g.}}\ using \htmlref{astInvert}{astInvert}
-(\secref{ss:invertingmappings}). If this is happens, the values of the
-FrameSet's \htmlref{Base}{Base} and \htmlref{Current}{Current} attributes are interchanged, along with
-its Nin and Nout attributes, so that its base and current Frames swap
-places. When used as a Mapping, the FrameSet will therefore perform
-the inverse transformation to that which it performed previously.
-
-To summarise, a FrameSet may be used exactly like any other Mapping
-which inter-relates the coordinate systems described by its base and
-current Frames.
-
-\subsection{\label{ss:extractingamapping}Extracting a Mapping from a FrameSet}
-
-Although it is very convenient to use a \htmlref{FrameSet}{FrameSet} when a \htmlref{Mapping}{Mapping} is
-required (\secref{ss:framesetasmapping}), a FrameSet necessarily
-contains additional information and sometimes this might cause
-inefficiency or confusion. For example, if you wanted to use a
-Mapping contained in one FrameSet and insert it into another, it would
-probably not be efficient to insert the whole of the first FrameSet
-into the second one, although it would work.
-
-In such a situation, the \htmlref{astGetMapping}{astGetMapping} function allows you to extract
-a Mapping from a FrameSet. You do this by specifying the two Frames
-which the Mapping should inter-relate using their indices within the
-FrameSet. For example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-map = astGetMapping( frameset, 2, 3 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-would return a pointer to a Mapping that converted between Frames~2
-and 3 in the FrameSet. Its inverse transformation would then convert
-in the opposite direction, {\em{i.e.}}\ between Frames~3 and 2. Note
-that this Mapping might not be independent of the Mappings contained
-within the FrameSet---{\em{i.e.}}\ they may share sub-Objects---so
-\htmlref{astCopy}{astCopy} should be used to make a copy if you need to guarantee
-independence (\secref{ss:copyingobjects}).
-
-Very often, the Mapping returned by astGetMapping will be a compound
-Mapping, or \htmlref{CmpMap}{CmpMap} (\secref{ss:cmpmaps}). This reflects the fact that
-conversion between the two Frames may need to be done {\em{via}} an
-intermediate coordinate system so that several stages may be involved.
-You can, however, easily simplify this Mapping (where this is possible)
-by using the \htmlref{astSimplify}{astSimplify} function (\secref{ss:simplifyingcmpmaps}) and
-this is recommended if you plan to use it for transforming a large
-amount of data.
-
-\subsection{\label{ss:framesetasframe}Using a FrameSet as a Frame}
-
-A \htmlref{FrameSet}{FrameSet} can also be used as a \htmlref{Frame}{Frame}, in which capacity it almost
-always behaves as if its current Frame had been used instead. For
-example, if you request the \htmlref{Title}{Title} attribute of a FrameSet using:
-
-\begin{quote}
-\small
-\begin{verbatim}
-const char *title;
-
-...
-
-title = astGetC( frameset, "Title" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-the result will be the Title of the current Frame, or a suitable
-default if the current Frame's Title attribute is un-set. The same
-also applies to other attribute operations---{\em{i.e.}}\ setting,
-clearing and testing attributes. Most attributes shared by both
-Frames and FrameSets behave in this way, such as \htmlref{Naxes}{Naxes}, \htmlref{Label(axis)}{Labelaxis},
-\htmlref{Format(axis)}{Formataxis}, {\em{etc.}} There are, however, a few exceptions:
-
-\begin{quote}
-\begin{description}
-\item[\htmlref{Class}{Class}]\mbox{}\\
-Has the value ``FrameSet''.
-
-\item[\htmlref{ID}{ID}]\mbox{}\\
-Identifies the particular FrameSet (not its current Frame).
-
-\item[\htmlref{Nin}{Nin}]\mbox{}\\
-Equals the number of axes in the FrameSet's base Frame.
-
-\item[\htmlref{Invert}{Invert}]\mbox{}\\
-Is independent of any of the Objects within the FrameSet.
-
-\item[\htmlref{Nobject}{Nobject}]\mbox{}\\
-Counts the number of active FrameSets.
-
-\item[\htmlref{RefCount}{RefCount}]\mbox{}\\
-Counts the number of active pointers to the FrameSet (not to its
-current Frame).
-\end{description}
-\end{quote}
-
-Note that the set of attributes possessed by a FrameSet can vary,
-depending on the nature of its current Frame. For example, if the
-current Frame is a \htmlref{SkyFrame}{SkyFrame} (\secref{ss:skyframes}), then the FrameSet
-will acquire an \htmlref{Equinox}{Equinox} attribute from it which can be set, enquired,
-{\em{etc.}} However, if the current Frame is changed to be a basic
-Frame, which does not have an Equinox attribute, then this attribute
-will be absent from the FrameSet as well. Any attempt to reference it
-will then result in an error.
-
-\subsection{Extracting a Frame from a FrameSet}
-
-Although a \htmlref{FrameSet}{FrameSet} may be used in place of its current \htmlref{Frame}{Frame} in most
-situations, it is sometimes convenient to have direct access to a
-specified Frame within it. This may be obtained using the \htmlref{astGetFrame}{astGetFrame}
-function, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-frame = astGetFrame( frameset, AST__BASE );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This would return a pointer (not a copy) to the base Frame within the
-FrameSet. Note the use of AST\_\_BASE
-(\secref{ss:astbaseandastcurrent}) as shorthand for the value of the
-FrameSet's \htmlref{Base}{Base} attribute, which gives the base Frame's index.
-
-\subsection{Removing a Frame from a FrameSet}
-
-Removing a \htmlref{Frame}{Frame} from a \htmlref{FrameSet}{FrameSet} is straightforward and is performed
-using the \htmlref{astRemoveFrame}{astRemoveFrame} function. You identify the Frame you wish to
-remove in the usual way, by giving its index within the FrameSet. For
-example, the following would remove the Frame with index 1:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astRemoveFrame( frameset, 1 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The only restriction is that you cannot remove the last remaining
-Frame because a FrameSet must always contain at least one Frame. When
-a Frame is removed, the Frames which follow it are re-numbered
-({\em{i.e.}}\ their indices are reduced by one) so as to preserve the
-sequence of consecutive Frame indices. The FrameSet's \htmlref{Nframe}{Nframe}
-attribute is also decremented.
-
-If appropriate, astRemoveFrame will modify the FrameSet's \htmlref{Base}{Base} and/or
-\htmlref{Current}{Current} attributes so that they continue to identify the same Frames
-as previously. If either the base or current Frame is removed,
-however, the corresponding attribute will become un-set, so that it
-reverts to its default value (\secref{ss:baseandcurrentdefault}) and
-therefore identifies an alternative Frame.
-
-Note that it is quite permissible to remove any Frame from a FrameSet,
-even although other Frames may appear to depend on it. For example, in
-Figure~\ref{fig:fsexample}, if Frame~1 were removed, the correct
-relationship between Frames~2 and 3 would still be preserved, although
-they would be re-numbered as Frames~1 and 2.
-
-\cleardoublepage
-\section{\label{ss:fshigher}Higher Level Operations on FrameSets}
-
-\subsection{\label{ss:framesetsfromconvert}Creating FrameSets with astConvert}
-
-Before considering the important subject of using FrameSets to convert
-between coordinate systems (\secref{ss:framesetconverting}), let us
-return briefly to reconsider the output generated by \htmlref{astConvert}{astConvert}. We
-used this function earlier (\secref{ss:introducingconversion}), when
-converting between the coordinate systems represented by various kinds
-of \htmlref{Frame}{Frame}, and indicated that it returns a \htmlref{FrameSet}{FrameSet} to represent the
-coordinate conversion it identifies. We are now in a position to
-examine the structure of this FrameSet.
-
-Take our earlier example (\secref{ss:convertingskyframes}) of
-converting between the celestial coordinate systems represented by two
-SkyFrames:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-AstFrameSet *cvt;
-AstSkyFrame *skyframe1, *skyframe2;
-
-...
-
-skyframe1 = astSkyFrame( "System=FK4-NO-E, Epoch=B1958, Equinox=B1960" );
-skyframe2 = astSkyFrame( "System=Ecliptic, Equinox=J2010.5" );
-
-cvt = astConvert( skyframe1, skyframe2, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\begin{latexonly}
- This will produce a pointer, ``cvt'', to the FrameSet shown in
- Figure~\ref{fig:fsconvert}.
- \begin{figure}[bhtp]
- \begin{center}
- \includegraphics[scale=0.65]{sun211_figures/fsconvert.eps}
- \caption{The FrameSet produced when astConvert is used to convert
- between the coordinate systems represented by two SkyFrames. The
- source \htmlref{SkyFrame}{SkyFrame} becomes the base Frame, while the destination SkyFrame
- becomes the current Frame. The \htmlref{Mapping}{Mapping} between them implements the
- required conversion.}
- \label{fig:fsconvert}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- This will produce a pointer, ``cvt'', to the FrameSet shown in the
- Figure below.
- \begin{quote}
- \begin{figure}[bhtp]
- \label{fig:fsconvert}
- \includegraphics[scale=1.0]{sun211_figures/fsconvert.eps}
- \caption{The FrameSet produced when astConvert is used to convert
- between the coordinate systems represented by two SkyFrames. The
- source SkyFrame becomes the base Frame, while the destination SkyFrame
- becomes the current Frame. The Mapping between them implements the
- required conversion.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-As can be seen, this FrameSet contains just two Frames. The source
-Frame supplied to astConvert becomes its base Frame, while the
-destination Frame becomes its current Frame. (The FrameSet, of course,
-simply holds pointers to these Frames, rather than making copies.) The
-Mapping which relates the base Frame to the current Frame is the one
-which implements the required conversion.
-
-As we noted earlier (\secref{ss:convertingskyframes}), the FrameSet
-returned by astConvert may be used both as a Mapping and as a Frame to
-perform most of the functions you are likely to need. However, the
-Mapping may be extracted for use on its own if necessary, using
-\htmlref{astGetMapping}{astGetMapping} (\secref{ss:extractingamapping}), for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstMapping *mapping;
-
-...
-
-mapping = astGetMapping( cvt, AST__BASE, AST__CURRENT );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\subsection{\label{ss:framesetconverting}Converting between FrameSet Coordinate Systems}
-
-\begin{latexonly}
- We now consider the process of converting between the coordinate
- systems represented by two FrameSets. This is a most important
- operation, as a subsequent example (\secref{ss:registeringimages})
- will show, and is illustrated in Figure~\ref{fig:fsalign}.
- \begin{figure}
- \begin{center}
- \includegraphics[scale=0.6]{sun211_figures/fsalign.eps}
- \caption{Conversion between two FrameSets is performed by establishing
- a link between a pair of Frames, one from each \htmlref{FrameSet}{FrameSet}. If conversion
- between these two Frames is possible, then a route for converting
- between the current Frames of both FrameSets can also be found. In
- practice, there may be many ways of pairing Frames to find the
- ``missing link'', so the Frames' \htmlref{Domain}{Domain} attribute may be used to
- narrow the choice.}
- \label{fig:fsalign}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- We now consider the process of converting between the coordinate
- systems represented by two FrameSets. This is a most important
- operation, as a subsequent example (\secref{ss:registeringimages})
- will show, and is illustrated in the Figure below.
- \begin{quote}
- \begin{figure}
- \label{fig:fsconvert}
- \includegraphics[scale=1.0]{sun211_figures/fsalign.eps}
- \caption{Conversion between two FrameSets is performed by establishing
- a link between a pair of Frames, one from each FrameSet. If conversion
- between these two Frames is possible, then a route for converting
- between the current Frames of both FrameSets can also be found. In
- practice, there may be many ways of pairing Frames to find the
- ``missing link'', so the Frames' Domain attribute may be used to
- narrow the choice.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-Recalling (\secref{ss:framesetasframe}) that a FrameSet will behave
-like its current \htmlref{Frame}{Frame} when necessary, conversion between two
-FrameSets is performed using \htmlref{astConvert}{astConvert}
-(\secref{ss:convertingskyframes}), but supplying pointers to FrameSets
-instead of Frames. The effect of this is to convert between the
-coordinate systems represented by the current Frames of each FrameSet:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFrameSet *frameseta, *framesetb;
-
-...
-
-cvt = astConvert( frameseta, framesetb, "SKY" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-When using FrameSets, we are presented with considerably more
-conversion options than when using Frames alone. This is because each
-current Frame is related to all the other Frames in its respective
-FrameSet. Therefore, if we can establish a link between any pair of
-Frames, one from each FrameSet, we can form a complete conversion path
-between the two current Frames (Figure~\ref{fig:fsalign}).
-
-This expanded range of options is, of course, precisely the
-intention. By connecting Frames together within a FrameSet, we have
-extended the range of coordinate systems that can be reached from any
-one of them. We are therefore no longer restricted to converting
-between Frames with the same Domain value (\secref{ss:framedomains}),
-but can go {\em{via}} a range of intermediate coordinate systems in
-order to make the connection we require. Transformation between
-different domains has therefore become possible because, in assembling
-the FrameSets, we provided the additional information needed to
-inter-relate them.
-
-It is important to appreciate, however, that the choice of ``missing
-link'' is crucial in determining the conversion that results.
-Although each FrameSet may be perfectly self-consistent internally,
-this does not mean that all conversion paths through the combined
-network of Mappings are equivalent. Quite the contrary in fact:
-everything depends on where the inter-connecting link between the two
-FrameSets is made. In practice, there may be a large number of
-possible pairings of Frames and hence of possible links. Other factors
-must therefore be used to restrict the choice. These are:
-
-\begin{enumerate}
-\item Not every possible pairing of Frames is legitimate. For example,
-you cannot convert directly between a basic Frame and a \htmlref{SkyFrame}{SkyFrame} which
-belong to different classes, so such pairings will be ignored.
-
-\item In a similar way, you cannot convert directly between Frames
-with different Domain values (\secref{ss:framedomains}). If the Domain
-attribute is used consistently (typically only one Frame in each
-FrameSet will have a particular Domain value), then this further
-restricts the choice.
-
-\item The third argument of astConvert may then be used to specify
-explicitly which Domain value the paired Frames should have. You may
-also supply a comma-separated list of preferences here (see below).
-
-\item If the above steps fail to uniquely identify the link, then the
-first suitable pairing of Frames is used, so that any ambiguity is
-resolved by the order in which Frames are considered for pairing (see
-the description of the astConvert function in
-\appref{ss:functiondescriptions} for details of the search
-order).\footnote{If you find that how this ambiguity is resolved
-actually makes a difference to the conversion that results, then you
-have probably constructed a FrameSet which lacks internal
-self-consistency. For example, you might have two Frames representing
-indistinguishable coordinate systems but inter-related by a non-null
-\htmlref{Mapping}{Mapping}.}
-\end{enumerate}
-
-In the example above we supplied the string ``SKY'' as the third
-argument of astConvert. This constitutes a request that a pair of
-Frames with
-the Domain value SKY ({\em{i.e.}}\ representing celestial coordinate
-systems) should be used to inter-relate the two FrameSets. Note that
-this does not specify which celestial coordinate system to use, but is
-a general request that the two FrameSets be inter-related using
-coordinates on the celestial sphere.
-
-Of course, it may be that this request cannot be met because there may
-not be a celestial coordinate system in both FrameSets. If this is
-likely to happen, we can supply a list of preferences, or a
-{\em{domain search path,}}
-as the third argument to astConvert, such as
-the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
-cvt = astConvert( frameseta, framesetb, "SKY,PIXEL,GRID," );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Now, if the two FrameSets cannot be inter-related using the SKY domain,
-astConvert will attempt to use the PIXEL domain instead. If this
-also fails, it will try the GRID domain. A blank field in the domain
-search path (here indicated by the final comma) allows any Domain
-value to be used. This can be employed as a last resort when all else
-has failed.
-
-If astConvert succeeds in identifying a conversion, it will return a
-pointer to a FrameSet (\secref{ss:framesetsfromconvert}) in which the
-source and destination Frames are inter-connected by the required
-Mapping. In this case, of course, these Frames will be the current
-Frames of the two FrameSets, but in all other respects the returned
-FrameSet is the same as when converting between Frames.
-
-Very importantly, however, astConvert may modify the FrameSets you are
-converting between. It does this, in order to indicate which pairing
-of Frames was used to inter-relate them, by changing the \htmlref{Base}{Base}
-attribute for each FrameSet so that the Frame used in the pairing
-becomes its base Frame (\secref{ss:baseandcurrent}).
-
-Finally, note that astConvert may also be used to convert between a
-FrameSet and a Frame, or {\em{vice versa.}} If a pointer to a Frame is
-supplied for either the first or second argument, it will behave like
-a FrameSet containing only a single Frame.
-
-\subsection{\label{ss:registeringimages}Example---Registering Two Images}
-
-Consider two images which have been calibrated by attaching FrameSets
-to them, such that the base \htmlref{Frame}{Frame} of each \htmlref{FrameSet}{FrameSet} corresponds to the
-raw data grid coordinates of each image (the GRID domain of
-\secref{ss:domainconventions}). Suppose, also, that these FrameSets
-contain an unknown number of other Frames, representing alternative
-world coordinate systems. What we wish to do is register these two
-images, such that we can transform from a position in the data grid of
-one into the corresponding position in the data grid of the other.
-This is a very practical example because images will typically be
-calibrated using FrameSets in precisely this way.
-
-The first step will probably involve making a copy of both FrameSets
-(using \htmlref{astCopy}{astCopy}---\secref{ss:copyingobjects}), since we will be
-modifying them. Let ``frameseta'' and ``framesetb'' be pointers to
-these copies. Since we want to convert between the base Frames of
-these FrameSets ({\em{i.e.}}\ their data grid coordinates), the next
-step is to make these Frames current. This is simply done by inverting
-both FrameSets, which interchanges their base and current
-Frames. \htmlref{astInvert}{astInvert} will perform this task:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astInvert( frameseta );
-astInvert( framesetb );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-To identify the required conversion, we now use \htmlref{astConvert}{astConvert}, supplying
-a suitable domain search path with which we would like our two images
-to be registered:
-
-\begin{quote}
-\small
-\begin{verbatim}
-cvt = astConvert( frameseta, framesetb, "SKY,PIXEL,GRID" );
-if ( cvt == AST__NULL ) {
- <no conversion was possible>
-} else {
- <conversion was possible>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The effects of this are:
-
-\begin{enumerate}
-\item astConvert first attempts to register the two images on the
-celestial sphere ({\em{i.e.}}\ using the SKY domain). To do this, it
-searches for a celestial coordinate system, although not necessarily
-the same one, attached to each image. If it finds a suitable pair of
-coordinate systems, it then registers the images by matching
-corresponding positions on the sky.
-
-\item If this fails, astConvert next tries to match positions in the
-PIXEL domain (\secref{ss:framedomains}). If it succeeds, the two
-images will then be registered so that their corresponding pixel
-positions correspond. If the PIXEL domain is offset from the data grid
-(as typically happens in data reduction systems which implement a
-``pixel origin''), then this will be correctly accounted for.
-
-\item If this also fails, the GRID domain is finally used. This will
-result in image registration by matching corresponding points in the
-data grids used by both images. This means they will be
-aligned so that the first element their data arrays correspond.
-
-\item If all of the above fail, astConvert will return the value
-AST\_\_NULL. Otherwise a pointer to a FrameSet will be returned.
-\end{enumerate}
-
-The resulting ``cvt'' FrameSet may then be used directly
-(\secref{ss:convertingskyframes}) to convert between positions in the
-data grid of the first image and corresponding positions in the data
-grid of the second image.
-
-To determine which domain was used to achieve registration,
-we can use the fact that the \htmlref{Base}{Base} attribute of each FrameSet is set by
-astConvert to indicate which intermediate Frames were used. We
-can therefore simply invert either FrameSet (to make its base Frame
-become the current one) and then enquire the \htmlref{Domain}{Domain} value:
-
-\begin{quote}
-\small
-\begin{verbatim}
-const char *domain;
-
-...
-
-astInvert( frameseta );
-domain = astGetC( frameseta, "Domain" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-If conversion was successful, the result will be one of the strings
-``SKY'', ``PIXEL'' or ``GRID''.
-
-\subsection{\label{ss:remapframe}Re-Defining a FrameSet Coordinate System}
-
-As discussed earlier (\secref{ss:baseandcurrent}), an important
-application of a \htmlref{FrameSet}{FrameSet} is to allow coordinate system information to
-be attached to entities such as images in order to calibrate them. In
-addition, one of the main objectives of AST is to simplify the
-propagation of such information through successive stages of data
-processing, so that it remains consistent with the associated image
-data.
-
-In such a situation, the FrameSet's base \htmlref{Frame}{Frame} would correspond with
-the image's data grid coordinates and its other Frames (if any) with
-the various alternative world coordinate systems associated with the
-image. If the data processing being performed does not change the
-relationship between the image's data grid coordinates and any of the
-associated world coordinate systems, then propagation of the WCS
-information is straightforward and simply involves copying the
-FrameSet associated with the image.
-
-If any of these relationships change, however, then corresponding
-changes must be made to the way Frames within the FrameSet are
-inter-related. By far the most common case occurs when the image
-undergoes some geometrical transformation resulting in ``re-gridding''
-on to another data grid, but the same principles can be applied to any
-re-definition of a coordinate system.
-
-To pursue the re-gridding example, we would need to modify our
-FrameSet to account for the fact that the image's data grid coordinate
-system (corresponding to the FrameSet's base Frame) has
-changed. Looking at the steps needed in detail, we might proceed as
-follows:
-
-\begin{enumerate}
-\item Create a \htmlref{Mapping}{Mapping} which represents the relationship between the
-original data grid coordinate system and the new one.
-
-\item Obtain a Frame to represent the new data grid coordinate system
-(we could re-use the original base Frame here, using \htmlref{astGetFrame}{astGetFrame} to
-obtain a pointer to it).
-
-\item Add the new Frame to the FrameSet, related to the original base
-Frame by the new Mapping. This Frame now represents the new data grid
-coordinate system and is correctly related to all the other Frames
-present.\footnote{This is because any transformation to or from this
-new Frame must go {\em{via}} the base Frame representing the original
-data grid coordinate system, which we assume was correctly related to
-all the other Frames present.}
-
-\item Remove the original base Frame (representing the old data grid
-coordinate system).
-
-\item Make the new Frame the base Frame and restore the original
-current Frame.
-\end{enumerate}
-
-\begin{latexonly}
- The effect of these steps is to change the relationship between the
- base Frame and all the other Frames present. It is as if a new Mapping
- has been interposed between the Frame we want to alter and all the
- other Frames within the FrameSet (Figure~\ref{fig:fsremap}).
- \begin{figure}[hbtp]
- \begin{center}
- \includegraphics[scale=0.6]{sun211_figures/fsremap.eps}
- \caption{The effect of \htmlref{astRemapFrame}{astRemapFrame} is to interpose a Mapping between
- a nominated Frame within a FrameSet and the remaining contents of the
- FrameSet. This effectively ``re-defines'' the coordinate system
- represented by the affected Frame. It may be used to compensate (say)
- for geometrical changes made to an associated image. The
- inter-relationships between all the other Frames within the FrameSet
- remain unchanged.}
- \label{fig:fsremap}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- The effect of these steps is to change the relationship between the
- base Frame and all the other Frames present. It is as if a new Mapping
- has been interposed between the Frame we want to alter and all the
- other Frames within the FrameSet (see Figure below).
- \begin{quote}
- \begin{figure}[hbtp]
- \label{fig:fsremap}
- \includegraphics[scale=0.9]{sun211_figures/fsremap.eps}
- \caption{The effect of astRemapFrame is to interpose a Mapping between
- a nominated Frame within a FrameSet and the remaining contents of the
- FrameSet. This effectively ``re-defines'' the coordinate system
- represented by the affected Frame. It may be used to compensate (say)
- for geometrical changes made to an associated image. The
- inter-relationships between all the other Frames within the FrameSet
- remain unchanged.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-
-Performing the steps above is rather lengthy, however, so the
-astRemapFrame function is provided to perform all of these operations
-in one go. A practical example of its use is given below
-(\secref{ss:wcsprocessingexample}).
-
-\subsection{\label{ss:wcsprocessingexample}Example---Binning an Image}
-
-As an example of using \htmlref{astRemapFrame}{astRemapFrame}, consider a case where the pixels
-of a 2-dimensional image have been binned 2$\times$2, so as to reduce
-the image size by a factor of two in each dimension. We must now
-modify the associated \htmlref{FrameSet}{FrameSet} to reflect this change to the
-image. Much the same process would be needed for any other geometrical
-change the image might undergo.
-
-We first set up a \htmlref{Mapping}{Mapping} (a \htmlref{WinMap}{WinMap} in this case) which relates the
-data grid coordinates in the original image to those in the new one:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstWinMap *winmap;
-double ina[ 2 ] = { 0.5, 0.5 };
-double inb[ 2 ] = { 2.5, 2.5 };
-double outa[ 2 ] = { 0.5, 0.5 };
-double outb[ 2 ] = { 1.5, 1.5 };
-
-...
-
-winmap = astWinMap( 2, ina, inb, outa, outb, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, we have simply set up arrays containing the data grid
-coordinates of the bottom left and top right corners of the first
-element in the output image (``outa'' and ``outb'') and the
-corresponding coordinates in the input image (``ina'' and
-``inb''). \htmlref{astWinMap}{astWinMap} then creates a WinMap which performs the required
-transformation. We do not need to know the size of the image.
-
-We can then pass this WinMap to astRemapFrame. This modifies the
-relationship between our FrameSet's base \htmlref{Frame}{Frame} and the other Frames in
-the FrameSet, so that the base Frame represents the data grid
-coordinate system of the new image rather than the old one:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFrameSet *frameset;
-
-...
-
-astRemapFrame( frameset, AST__BASE, winmap );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Any other coordinate systems described by the FrameSet, no matter how
-many of these there might be, are now correctly associated with the
-new image.
-
-\subsection{\label{ss:framesetintegrity}Maintaining the Integrity of FrameSets}
-
-When constructing a \htmlref{FrameSet}{FrameSet}, you are provided with a framework into
-which you can place any combination of Frames and Mappings that you
-wish. There are relatively few constraints on this process and no
-checks are performed to see whether the FrameSet you construct makes
-physical sense. It is quite possible, for example, to construct a
-FrameSet containing two identical SkyFrames which are inter-related by
-a non-unit \htmlref{Mapping}{Mapping}. AST will not object if you do this, but it makes
-no sense, because applying a non-unit Mapping to any set of celestial
-coordinates cannot yield positions that are still in the original
-coordinate system. If you use such a FrameSet to perform coordinate
-conversions, you are likely to get unpredictable results because the
-information in the FrameSet is corrupt.
-
-It is, of course, your responsibility as a programmer to ensure the
-validity of any information which you insert into a
-FrameSet. Normally, this is straightforward and simply consists of
-formulating your problem correctly (a diagram can often help to
-clarify how coordinate systems are inter-related) and writing the
-appropriate bug-free code to construct the FrameSet. However, once you
-start to modify an existing FrameSet, there are new opportunities for
-corrupting it!
-
-Consider, for example, a FrameSet whose current \htmlref{Frame}{Frame} is a
-\htmlref{SkyFrame}{SkyFrame}. We can set a new value for this SkyFrame's \htmlref{Equinox}{Equinox} attribute
-simply by using \htmlref{astSet}{astSet} on the FrameSet, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSet( frameset, "Equinox=J2010" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The effect of this will be to change the celestial coordinate system
-which the current Frame represents. You can see, however, that this
-has the potential to make the FrameSet corrupt unless corresponding
-changes are also made to the Mapping which relates this SkyFrame to
-the other Frames within the FrameSet. In fact, it is a general rule
-that any change to a FrameSet which affects its current Frame can
-potentially require corresponding changes to the FrameSet's Mappings
-in order to maintain its overall integrity.
-
-Fortunately, once you have stored valid information in a FrameSet, AST
-will look after these details for you automatically, so that the
-FrameSet's integrity is maintained. In the example above, it would do
-this by appropriately re-mapping the current Frame (as if
-\htmlref{astRemapFrame}{astRemapFrame} had been used---\secref{ss:remapframe}) in response to
-the use of astSet. One way of illustrating this process is as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstSkyFrame *skyframe;
-
-...
-
-skyframe = astSkyFrame( "" );
-frameSet = astFrameSet( skyframe );
-astAddFrame( frameset, 1, astUnitMap( 2, "" ), skyframe );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This constructs a trivial FrameSet whose base and current Frames are
-both the same SkyFrame connected by a \htmlref{UnitMap}{UnitMap}. You can think of this
-as a ``pipe'' connecting two coordinate systems. At present, these two
-systems represent identical ICRS coordinates, so the FrameSet
-implements a unit Mapping. We can change the coordinate system on the
-current end of this pipe as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSet( frameset, "System=Ecliptic, Equinox=J2010" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-and the Mapping which the FrameSet implements would change
-accordingly. To change the coordinate system on the base end of the
-pipe, we might use:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astInvert( frameset );
-astSet( frameset, "System=Galactic" );
-astInvert( frameset );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The FrameSet would then convert between galactic and ecliptic
-coordinates.
-
-Note that astSet is not the only function which has this effect:
-\htmlref{astClear}{astClear} behaves similarly, as also does \htmlref{astPermAxes}{astPermAxes}
-(\secref{ss:permutingaxes}). If you need to circumvent this mechanism
-for any reason, this can be done by going behind the scenes and
-obtaining a pointer directly to the Frame you wish to modify. Consider
-the following, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-skyframe = astGetFrame( frameset, AST__CURRENT );
-astSet( skyframe, "Equinox=J2010" );
-skyframe = astAnnul( skyframe );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, astSet is applied to the SkyFrame pointer rather than the
-FrameSet pointer, so the usual checks on FrameSet integrity do not
-occur. The SkyFrame's Equinox attribute will therefore be modified
-without any corresponding change to the FrameSet's Mappings. In this
-case you must take responsibility yourself for maintaining the
-FrameSet's integrity, perhaps through appropriate use of
-astRemapFrame.
-
-\subsection{Merging FrameSets}
-
-\begin{latexonly}
- As well as adding individual Frames to a \htmlref{FrameSet}{FrameSet}
- (\secref{ss:addingframes}), it is also possible to add complete sets of
- inter-related Frames which are contained within another
- FrameSet. This, of course, corresponds to the process of merging two
- FrameSets (Figure~\ref{fig:fsmerge}).
- \begin{figure}[hbtp]
- \begin{center}
- \includegraphics[scale=0.6]{sun211_figures/fsmerge.eps}
- \caption{Two FrameSets in the process of being merged using
- \htmlref{astAddFrame}{astAddFrame}. FrameSet~B is being added to FrameSet~A by supplying a
- new \htmlref{Mapping}{Mapping} which inter-relates a nominated \htmlref{Frame}{Frame} in A (here number~1)
- and the current Frame of B. In the merged FrameSet, the Frames
- contributed by B will be re-numbered to become Frames~4, 5 and 6. The
- base Frame will remain unchanged, but the current Frame of B becomes
- the new current Frame. Note that FrameSet~B itself is not
- altered by this process.}
- \label{fig:fsmerge}
- \end{center}
- \end{figure}
-\end{latexonly}
-\begin{htmlonly}
- As well as adding individual Frames to a FrameSet
- (\secref{ss:addingframes}), it is also possible to add complete sets of
- inter-related Frames which are contained within another
- FrameSet. This, of course, corresponds to the process of merging two
- FrameSets (see Figure below).
- \begin{quote}
- \begin{figure}[hbtp]
- \label{fig:fsmerge}
- \includegraphics[scale=0.75]{sun211_figures/fsmerge.eps}
- \caption{Two FrameSets in the process of being merged using
- astAddFrame. FrameSet~B is being added to FrameSet~A by supplying a
- new Mapping which inter-relates a nominated Frame in A (here number~1)
- and the current Frame of B. In the merged FrameSet, the Frames
- contributed by B will be re-numbered to become Frames~4, 5 and 6. The
- base Frame will remain unchanged, but the current Frame of B becomes
- the new current Frame. Note that FrameSet~B itself is not
- altered by this process.}
- \end{figure}
- \end{quote}
-\end{htmlonly}
-
-This process is performed by adding one FrameSet to another using
-astAddFrame, in much the same manner as when adding a new Frame to an
-existing FrameSet (\secref{ss:addingframes}). It is simply a matter of
-providing a FrameSet pointer, instead of a Frame pointer, for the 4th
-argument. In performing the merger you must, as usual, supply a
-Mapping, but in this case the Mapping should relate the current Frame
-of the FrameSet being added to one of the Frames already present. For
-example, you might perform the merger shown in
-Figure~\ref{fig:fsmerge} as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstMapping *mapping;
-
-...
-
-astAddFrame( frameseta, 1, mapping, framesetb );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The Frames acquired by ``frameseta'' from the FrameSet being added
-(``framesetb'') are re-numbered so that they retain their original
-order and follow on consecutively after the Frames that were already
-present, whose indices remain unchanged. The base Frame of
-``frameseta'' remains unchanged, but the current Frame of
-``framesetb'' becomes its new current Frame. All the
-inter-relationships between Frames in both FrameSets remain in place
-and are preserved in the merged FrameSet.
-
-Note that while this process modifies the first FrameSet
-(``frameseta''), it leaves the original contents of the one being
-added (``framesetb'') unchanged.
-
-%\cleardoublepage
-%\section{\label{ss:searching}TBW - Searching for Coordinate Systems}
-
-\cleardoublepage
-\section{\label{ss:channels}Saving and Restoring Objects (Channels)}
-
-Facilities are provided by the AST library for performing input and
-output (I/O) with any kind of \htmlref{Object}{Object}. This means it is possible
-to write any Object into various external representations for
-storage, and then to read these representations back in, so as to
-restore the original Object. Typically, an Object would be written by
-one program and read back in by another.
-
-We refer to ``external representations'' in the plural because AST is
-designed to function independently of any particular data storage
-system. This means that Objects may need converting into a number of
-different external representations in order to be compatible with
-(say) the astronomical data storage system in which they will reside.
-
-In this section, we discuss the basic I/O facilities which support
-external representations based on a textual format referred to as the AST
-``native format''. These are implemented using a new kind of Object---a
-\htmlref{Channel}{Channel}. We will examine later how to use other representations, based on
-an XML format or on the use of FITS headers, for storing Objects. These
-are implemented using more specialised forms of Channel called \htmlref{XmlChan}{XmlChan}
-(\secref{ss:xmlchan}) and \htmlref{FitsChan}{FitsChan} (\secref{ss:nativefits}).
-
-\subsection{The Channel Model}
-
-The best way to start thinking about a \htmlref{Channel}{Channel} is like a C file
-stream, and to think of the process of creating a Channel as that
-of opening a file and obtaining a FILE pointer. Subsequently, you can
-read and write Objects {\em{via}} the Channel.
-
-This analogy is not quite perfect, however, because a Channel has, in
-principle, two ``files'' attached to it. One is used when reading, and
-the other when writing. These are termed the Channel's {\em{source}}
-and {\em{sink}} respectively. In practice, the source and sink may
-both be the same, in which case the analogy with the C file stream is
-correct, but this need not always be so. It is not necessarily so with
-the basic Channel, as we will now see (\secref{ss:creatingachannel}).
-
-\subsection{\label{ss:creatingachannel}Creating a Channel}
-
-The process of creating a \htmlref{Channel}{Channel} is straightforward. As you
-might expect, it uses the constructor function \htmlref{astChannel}{astChannel}:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-AstChannel *channel;
-
-...
-
-channel = astChannel( NULL, NULL, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The first two arguments to astChannel specify the external source and
-sink that the Channel is to use. There arguments are pointers to C
-functions and we will examine their use in more detail later
-(\secref{ss:channelsource} and \secref{ss:channelsink}).
-
-In this very simple example we have supplied NULL pointers for both
-the source and sink functions. This requests the default behaviour,
-which means that textual input will be read from the program's
-standard input stream (typically, this means your keyboard) while
-textual output will go to the standard output stream (typically
-appearing on your screen). On UNIX systems, of course, either of these
-streams can easily be redirected to files.
-
-\subsection{\label{ss:writingtoachannel}Writing Objects to a Channel}
-
-The process of saving Objects is very straightforward. You can
-simply write any \htmlref{Object}{Object} to a \htmlref{Channel}{Channel} using the \htmlref{astWrite}{astWrite}
-function, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int nobj;
-AstObject *object;
-
-...
-
-nobj = astWrite( channel, object );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The effect of this will be to produce a textual description of the
-Object which will appear, by default, on your program's standard
-output stream. Any class of Object may be converted into text in this
-way.
-
-astWrite returns a count of the number of Objects written. Usually,
-this will be one, unless the Object supplied cannot be
-represented. With a basic Channel all Objects can be represented, so a
-value of one will always be returned unless there has been an
-error. We will see later, however, that more specialised forms of
-Channel may impose restrictions on the kind of Object you can write
-(\secref{ss:foreignfitslimitations}). In such cases, astWrite may
-return zero to indicate that the Object was not acceptable.
-
-\subsection{\label{ss:readingfromachannel}Reading Objects from a Channel}
-
-Before discussing the format of the output produced above
-(\secref{ss:writingtoachannel}), let us consider how to read it back,
-so as to reconstruct the original \htmlref{Object}{Object}. Naturally, we would first
-need to save the output in a file. On UNIX systems, we can do that
-simply by redirecting standard output to a file using a shell command
-like:
-
-\begin{quote}
-\small
-\begin{verbatim}
-program1 >file
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Within a subsequent program, we can read this Object back in by
-using the \htmlref{astRead}{astRead} function, having first created a suitable
-\htmlref{Channel}{Channel}:
-
-\begin{quote}
-\small
-\begin{verbatim}
-object = astRead( channel );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-By default, this function will read from the standard input stream
-(the default source for a basic Channel), so we would need to ensure
-that our second program reads its input from the file in which the
-Object description is stored. On UNIX systems, we could again use a
-shell redirection command such as:
-
-\begin{quote}
-\small
-\begin{verbatim}
-program2 <file
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\subsection{Saving and Restoring Multiple Objects}
-
-I/O operations performed on a basic \htmlref{Channel}{Channel} are sequential. This
-means that if you write more than one \htmlref{Object}{Object} to a Channel,
-each new Object's textual description is simply appended to the
-previous one. You can store any number of Objects in this way,
-subject only to the storage space you have available.
-
-After you read an Object back from a basic Channel, the
-Channel is ``positioned'' at the end of that Object's
-textual description. If you then perform another read, you will
-read the next Object's textual description and therefore
-retrieve the next Object. This process may be repeated to read
-each Object in turn. When there are no more Objects to be
-read, \htmlref{astRead}{astRead} will return the value AST\_\_NULL to indicate an
-{\em{end-of-file.}}
-
-\subsection{\label{ss:validatinginput}Validating Input}
-
-The pointer returned by \htmlref{astRead}{astRead} (\secref{ss:readingfromachannel}) could
-identify any class of \htmlref{Object}{Object}---this is determined entirely by the
-external data being read. If it is necessary to test for a particular
-class (say a \htmlref{Frame}{Frame}), this may be done as follows using the appropriate
-member of the \htmlref{astIsA$<$Class$>$}{astIsAClass} family of functions:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int ok;
-
-...
-
-ok = astIsAFrame( object );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note, however, that this will accept any Frame, so would be equally
-happy with a basic Frame or a \htmlref{SkyFrame}{SkyFrame}. An alternative validation
-strategy would be to obtain the value of the Object's \htmlref{Class}{Class} attribute
-and then test this character string, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include <string.h>
-
-...
-
-ok = !strcmp( astGetC( object, "Class" ), "Frame" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This would only accept a basic Frame and would reject a SkyFrame.
-
-\subsection{Storing an ID String with an Object}
-
-Occasionally, you may want to store a number of Objects and later
-retrieve them and use each for a different purpose. If the Objects are
-of the same class, you cannot use the \htmlref{Class}{Class} attribute to distinguish
-them when you read them back
-({\em{c.f.}}~\secref{ss:validatinginput}). Although relying on the
-order in which they are stored is a possible solution, this becomes
-complicated if some of the Objects are optional and may not always be
-present. It also makes extending your data format in future more
-difficult.
-
-To help with this, every AST \htmlref{Object}{Object} has an \htmlref{ID}{ID} attribute and an \htmlref{Ident}{Ident}
-attribute, both of which allows you, in effect, to attach a textual
-identification label to it. You simply set the ID or Ident attribute before
-writing the Object:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSet( object, "ID=Calibration" );
-nobj = astWrite( channel, object );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-You can then test its value after you read the Object back:
-
-\begin{quote}
-\small
-\begin{verbatim}
-object = astRead( channel );
-if ( !strcmp( astGetC( object, "ID" ), "Calibration" ) ) {
- <the Calibration Object has been read>
-} else {
- <some other Object has been read>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The only difference between the ID and Ident attributes is that the ID
-attribute is unique to a particular Object and is lost if, for example,
-you make a copy of the Object. The Ident attrubute, on the other hand, is
-transferred to the new Object when a copy is made. Consequently, it is
-safest to set the value of the ID attribute immediately before you
-perform the write.
-
-\subsection{\label{ss:textualoutputformat}The Textual Output Format}
-
-Let us now examine the format of the textual output produced by
-writing an \htmlref{Object}{Object} to a basic \htmlref{Channel}{Channel}
-(\secref{ss:writingtoachannel}). To give a concrete example, suppose
-the Object in question is a \htmlref{SkyFrame}{SkyFrame}, written out as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstSkyFrame *skyframe;
-
-...
-
-nobj = astWrite( channel, skyframe );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The output should then look like the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
- Begin SkyFrame # Description of celestial coordinate system
-# Title = "FK4 Equatorial Coordinates, no E-terms, Mean Equinox B1950.0, Epoch B1958.0" # Title of coordinate system
- Naxes = 2 # Number of coordinate axes
-# Domain = "SKY" # Coordinate system domain
-# Lbl1 = "Right Ascension" # Label for axis 1
-# Lbl2 = "Declination" # Label for axis 2
-# Uni1 = "hh:mm:ss.s" # Units for axis 1
-# Uni2 = "ddd:mm:ss" # Units for axis 2
-# Dir1 = 0 # Plot axis 1 in reverse direction (hint)
- Ax1 = # Axis number 1
- Begin SkyAxis # Celestial coordinate axis
- End SkyAxis
- Ax2 = # Axis number 2
- Begin SkyAxis # Celestial coordinate axis
- End SkyAxis
- IsA Frame # Coordinate system description
- System = "FK4-NO-E" # Celestial coordinate system type
- Epoch = 1958 # Besselian epoch of observation
-# Eqnox = 1950 # Besselian epoch of mean equinox
- End SkyFrame
-\end{verbatim}
-\normalsize
-\end{quote}
-
-You will notice that this output is designed both for a human reader,
-in that it is formatted, and also to be read back by a computer in
-order to reconstruct the SkyFrame. In fact, this is precisely the way
-that \htmlref{astShow}{astShow} works (\secref{ss:displayingobjects}), this function being
-roughly equivalent to the following use of a Channel:
-
-\begin{quote}
-\small
-\begin{verbatim}
-channel = astChannel( NULL, NULL, "" );
-(void) astWrite( channel, object );
-channel = astAnnul( channel );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Some lines of the output start with a ``\verb?#?'' comment character,
-which turns the rest of the line into a comment. These lines will be
-ignored when read back in by \htmlref{astRead}{astRead}. They typically contain default
-values, or values that can be derived in some way from the other data
-present, so that they do not actually need to be stored in order to
-reconstruct the original Object. They are provided purely for human
-information. The same comment character is also used to append
-explanatory comments to most output lines.
-
-It is not sensible to attempt a complete description of this output
-format because every class of Object is potentially different and each
-can define how its own data should be represented. However, there are
-some basic rules, which mean that the following common features will
-usually be present:
-
-\begin{enumerate}
-\item Each Object is delimited by matching ``Begin'' and ``End''
-lines, which also identify the class of Object involved.
-
-\item Within each Object description, data values are represented
-by a simple ``keyword~$=$~value'' syntax, with one value to a line.
-
-\item Lines beginning ``IsA'' are used to mark the divisions between
-data belonging to different levels in the class hierarchy
-(\appref{ss:classhierarchy}). Thus, ``IsA~\htmlref{Frame}{Frame}'' marks the end of data
-associated with the Frame class and the start of data associated with
-some derived class (a SkyFrame in the above example). ``IsA'' lines
-may be omitted if associated data values are absent and no confusion
-arises.
-
-\item Objects may contain other Objects as data. This is
-indicated by an absent value, with the description of the data
-Object following on subsequent lines.
-
-\item Indentation is used to clarify the overall structure.
-\end{enumerate}
-
-Beyond these general principles, the best guide to what a particular
-line of output represents will generally be the comment which
-accompanies it together with a general knowledge of the class of
-Object being described.
-
-\subsection{\label{ss:controllingchanneloutput}Controlling the Amount of Output}
-
-It is not always necessary for the output from \htmlref{astWrite}{astWrite}
-(\secref{ss:writingtoachannel}) to be human-readable, so a \htmlref{Channel}{Channel} has
-attributes that allow the amount of detail in the output to be
-controlled.
-
-The first of these is the integer attribute \htmlref{Full}{Full}, which controls the
-extent to which optional, commented out, output lines are produced. By
-default, Full is zero, and this results in the standard style of
-output (\secref{ss:textualoutputformat}) where default values that may
-be helpful to humans are included. To suppress these optional lines,
-Full should be set to $-$1. This is most conveniently done when the
-Channel is created, so that:
-
-\begin{quote}
-\small
-\begin{verbatim}
-channel = astChannel( NULL, NULL, "Full=-1" );
-(void) astWrite( channel, skyframe );
-channel = astAnnul( channel );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-would result in output containing only the essential information, such
-as:
-
-\begin{quote}
-\small
-\begin{verbatim}
- Begin SkyFrame # Description of celestial coordinate system
- Naxes = 2 # Number of coordinate axes
- Ax1 = # Axis number 1
- Begin SkyAxis # Celestial coordinate axis
- End SkyAxis
- Ax2 = # Axis number 2
- Begin SkyAxis # Celestial coordinate axis
- End SkyAxis
- IsA Frame # Coordinate system description
- System = "FK4-NO-E" # Celestial coordinate system type
- Epoch = 1958 # Besselian epoch of observation
- End SkyFrame
-\end{verbatim}
-\normalsize
-\end{quote}
-
-In contrast, setting Full to $+$1 will result in additional output
-lines which will reveal every last detail of the \htmlref{Object}{Object}'s
-construction. Often this will be rather more than you want, especially
-for more complex Objects, but it can sometimes help when debugging
-programs. This is how a \htmlref{SkyFrame}{SkyFrame} appears at this level of detail:
-
-\begin{quote}
-\small
-\begin{verbatim}
- Begin SkyFrame # Description of celestial coordinate system
-# RefCnt = 1 # Count of active Object pointers
-# Nobj = 1 # Count of active Objects in same class
- IsA Object # Astrometry Object
-# Nin = 2 # Number of input coordinates
-# Nout = 2 # Number of output coordinates
-# Invert = 0 # Mapping not inverted
-# Fwd = 1 # Forward transformation defined
-# Inv = 1 # Inverse transformation defined
-# Report = 0 # Don't report coordinate transformations
- IsA Mapping # Mapping between coordinate systems
-# Title = "FK4 Equatorial Coordinates, no E-terms, Mean Equinox B1950.0, Epoch B1958.0" # Title of coordinate system
- Naxes = 2 # Number of coordinate axes
-# Domain = "SKY" # Coordinate system domain
-# Lbl1 = "Right Ascension" # Label for axis 1
-# Lbl2 = "Declination" # Label for axis 2
-# Sym1 = "RA" # Symbol for axis 1
-# Sym2 = "Dec" # Symbol for axis 2
-# Uni1 = "hh:mm:ss.s" # Units for axis 1
-# Uni2 = "ddd:mm:ss" # Units for axis 2
-# Dig1 = 7 # Individual precision for axis 1
-# Dig2 = 7 # Individual precision for axis 2
-# Digits = 7 # Default formatting precision
-# Fmt1 = "hms.1" # Format specifier for axis 1
-# Fmt2 = "dms" # Format specifier for axis 2
-# Dir1 = 0 # Plot axis 1 in reverse direction (hint)
-# Dir2 = 1 # Plot axis 2 in conventional direction (hint)
-# Presrv = 0 # Don't preserve target axes
-# Permut = 1 # Axes may be permuted to match
-# MinAx = 2 # Minimum number of axes to match
-# MaxAx = 2 # Maximum number of axes to match
-# MchEnd = 0 # Match initial target axes
-# Prm1 = 1 # Axis 1 not permuted
-# Prm2 = 2 # Axis 2 not permuted
- Ax1 = # Axis number 1
- Begin SkyAxis # Celestial coordinate axis
-# RefCnt = 1 # Count of active Object pointers
-# Nobj = 2 # Count of active Objects in same class
- IsA Object # Astrometry Object
-# Label = "Angle on Sky" # Axis Label
-# Symbol = "delta" # Axis symbol
-# Unit = "ddd:mm:ss" # Axis units
-# Digits = 7 # Default formatting precision
-# Format = "dms" # Format specifier
-# Dirn = 1 # Plot in conventional direction
- IsA Axis # Coordinate axis
-# Format = "dms" # Format specifier
-# IsLat = 0 # Longitude axis (not latitude)
-# AsTime = 0 # Display values as angles (not times)
- End SkyAxis
- Ax2 = # Axis number 2
- Begin SkyAxis # Celestial coordinate axis
-# RefCnt = 1 # Count of active Object pointers
-# Nobj = 2 # Count of active Objects in same class
- IsA Object # Astrometry Object
-# Label = "Angle on Sky" # Axis Label
-# Symbol = "delta" # Axis symbol
-# Unit = "ddd:mm:ss" # Axis units
-# Digits = 7 # Default formatting precision
-# Format = "dms" # Format specifier
-# Dirn = 1 # Plot in conventional direction
- IsA Axis # Coordinate axis
-# Format = "dms" # Format specifier
-# IsLat = 0 # Longitude axis (not latitude)
-# AsTime = 0 # Display values as angles (not times)
- End SkyAxis
- IsA Frame # Coordinate system description
- System = "FK4-NO-E" # Celestial coordinate system type
- Epoch = 1958 # Besselian epoch of observation
-# Eqnox = 1950 # Besselian epoch of mean equinox
- End SkyFrame
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\subsection{\label{ss:channelcommenting}Controlling Commenting}
-
-Another way of controlling output from a \htmlref{Channel}{Channel} is {\em{via}} the
-boolean (integer) \htmlref{Comment}{Comment} attribute, which controls whether comments
-are appended to describe the purpose of each value. Comment has the
-value 1 by default but, if set to zero, will suppress these
-comments. This is normally appropriate only if you wish to minimise
-the amount of output, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSet( channel, "Full=-1, Comment=0" );
-nobj = astWrite( channel, skyframe );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-might result in the following more compact output:
-
-\begin{quote}
-\small
-\begin{verbatim}
- Begin SkyFrame
- Naxes = 2
- Ax1 =
- Begin SkyAxis
- End SkyAxis
- Ax2 =
- Begin SkyAxis
- End SkyAxis
- IsA Frame
- System = "FK4-NO-E"
- Epoch = 1958
- End SkyFrame
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\subsection{Editing Textual Output}
-
-The safest advice about editing the textual output from \htmlref{astWrite}{astWrite} (or
-\htmlref{astShow}{astShow}) is ``don't!''---unless you know what you are doing.
-
-Having given that warning, however, it is sometimes possible to make
-changes to the text, or even to write entire \htmlref{Object}{Object} descriptions from
-scratch, and to read the results back in to construct new
-Objects. Normally, simple changes to numerical values are safest, but
-be aware that this is a back door method of creating Objects, so
-you are on your own! There are a number of potential pitfalls. In
-particular:
-
-\begin{itemize}
-\item \htmlref{astRead}{astRead} is intended for retrieving data written by astWrite and
-not for reading data input by humans. As such, the data validation
-provided is very limited and is certainly not foolproof. This makes it
-quite easy to construct Objects that are internally inconsistent by
-this means. In contrast, the normal programming interface incorporates
-numerous checks designed to make it impossible to construct invalid
-Objects. You should not necessarily think you have found a bug if your
-changes to an Object's textual description fail to produce the results
-you expected!
-
-\item In many instances the names associated with values in textual
-output will correspond with Object attributes. Sometimes, however,
-these names may differ from the attribute name. This is mainly because
-of length restrictions imposed by other common external formats, such
-as FITS headers. Some of the names used do not correspond with
-attributes at all.
-
-\item It is safest to change single numerical or string values.
-Beware of changing the size or shape of Objects ({\em{e.g.}}\ the
-number of axes in a \htmlref{Frame}{Frame}). Often, these values must match others
-stored elsewhere within the Object and changing them in a haphazard
-fashion will not produce useful results.
-
-\item Be wary about un-commenting default values. Sometimes this will
-work, but often these values are derived from other Objects stored
-more deeply in the structure and the proper place to insert a new
-value is not where the default itself appears.
-\end{itemize}
-
-\subsection{\label{ss:mixingchanneltext}Mixing Objects with other Text}
-
-By default, when you use \htmlref{astRead}{astRead} to read from a basic \htmlref{Channel}{Channel}
-(\secref{ss:readingfromachannel}), it is assumed that you are reading a
-stream of text containing only AST Objects, which follow each other
-end-to-end. If any extraneous input data are encountered which do not
-appear to form part of the textual description of an \htmlref{Object}{Object}, then an
-error will result. In particular, the first input line must identify
-the start of an Object description, so you cannot start reading half
-way through an Object.
-
-Sometimes, however, you may want to store AST Object descriptions
-intermixed with other textual data. You can do this by setting the
-Channel's boolean (integer) \htmlref{Skip}{Skip} attribute to 1. This will cause every
-read to skip over extraneous data until the start of a new AST Object
-description, if any, is found. So long as your other data do not mimic
-the appearance of an AST Object description, the two sets of data can
-co-exist.
-
-For example, by setting Skip to 1, the following complete C program
-will read all the AST Objects whose descriptions appear in the source
-of this document, ignoring the other text. \htmlref{astShow}{astShow} is used to display
-those found:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-main() {
- AstChannel *channel;
- AstObject *object;
-
- channel = astChannel( NULL, NULL, "Skip=1" );
- while ( ( object = astRead( channel ) ) != AST__NULL ) {
- astShow( object );
- object = astAnnul( object );
- }
- channel = astAnnul( channel );
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\subsection{\label{ss:channelsource}Reading Objects from Files}
-
-Thus far, we have only considered the default behaviour of a \htmlref{Channel}{Channel}
-in reading and writing Objects through a program's standard input and
-output streams. We will now consider how to access Objects stored in
-files more directly.
-
-Because the AST library is designed to be used from more than one
-language, it has to be a little careful about reading and writing to
-files. This is due to the incompatibilities that often exist between
-the file I/O facilities provided by different languages. Fortunately,
-this ties in well with the principle that AST should also be
-independent of any particular data storage system, which we mention
-again in \secref{ss:otherplaces}.
-
-What this means in practice is that you must provide some simple C
-functions that perform the actual transfer of data to and from files
-and similar external data stores. The functions you provide are
-supplied as the source and/or sink function arguments to \htmlref{astChannel}{astChannel}
-when you create a Channel (\secref{ss:creatingachannel}). An example is
-the best way to illustrate this.
-
-Consider the following simple function called Source. It reads a
-single line of text from a C input stream and returns a pointer to it,
-or NULL if there is no more input:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include <stdio.h>
-#define LEN 200
-static FILE *input_stream;
-
-const char *Source( void ) {
- static char buffer[ LEN + 2 ];
- return fgets( buffer, LEN + 2, input_stream );
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note that the input stream is a static variable which we will also
-access from our main program. This might look something like this
-(omitting error checking for brevity):
-
-\begin{quote}
-\small
-\begin{verbatim}
-/* Open the input file. */
-input_stream = fopen( "infile.ast", "r" );
-
-/* Create a Channel and read an Object from it. */
-channel = astChannel( Source, NULL, "" );
-object = astRead( channel );
-
-...
-
-/* Annul the Channel and close the file when done. */
-channel = astAnnul( channel );
-(void) fclose( input_stream );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, we first open the required input file, saving the resulting FILE
-pointer. We then pass a pointer to our Source function as the first
-argument to astChannel when creating a new Channel. When we read
-an \htmlref{Object}{Object} from this Channel with \htmlref{astRead}{astRead}, the Source
-function will be called to obtain the textual data from the file, the
-end-of-file being detected when this function returns NULL.
-
-\subsection{\label{ss:channelsink}Writing Objects to Files}
-
-We can also write a Sink function, that writes a line of output text
-to a file, and use it in basically the same way as the Source function
-in the previous section (\secref{ss:channelsource}):
-
-\begin{quote}
-\small
-\begin{verbatim}
-static FILE *output_stream;
-
-void Sink( const char *line ) {
- (void) fprintf( output_stream, "%s\n", line );
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note that we must supply the final newline character ourselves.
-
-In this case, our main program would supply a pointer to this Sink
-function as the second argument to \htmlref{astChannel}{astChannel}, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-/* Open the output file. */
-output_stream = fopen( "outfile.ast", "w" );
-
-/* Create a Channel and write an Object to it. */
-channel = astChannel( Source, Sink, "" );
-nobj = astWrite( channel, object );
-
- ...
-
-/* Annul the Channel and close the file when done. */
-channel = astAnnul( channel );
-(void) fclose( output_stream );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note that we can specify a source and/or a sink function for the
-\htmlref{Channel}{Channel}, and that these may use either the same file, or different
-files according to whether we are reading or writing. AST has no
-knowledge of the underlying file system, nor of file positioning. It
-just reads and writes sequentially. If you wish, for example, to
-reposition a file at the beginning in between reads and writes, then
-this can be done directly (and completely independently of AST) using
-standard C functions.
-
-If an error occurs in your source or sink function, you can
-communicate this to the AST library by setting its error status to any
-error value using \htmlref{astSetStatus}{astSetStatus} (\secref{ss:errordetection}). This will
-immediately terminate the read or write operation.
-
-\subsection{\label{ss:otherplaces}Reading and Writing Objects to other Places}
-
-It should be obvious from the above (\secref{ss:channelsource} and
-\secref{ss:channelsink}) that a \htmlref{Channel}{Channel}'s source and sink functions
-provide a flexible means of intercepting textual data that describes
-AST Objects as it flows in and out of your program. In fact, you might
-like to regard a Channel simply as a filter for converting AST Objects
-to and from a stream of text which is then handled by your source and
-sink functions, where the real I/O occurs.
-
-This gives you the ability to store AST Objects in virtually any data
-system, so long as you can convert a stream of text into something
-that can be stored (it need no longer be text) and retrieve it
-again. There is generally no need to retain comments. Other
-possibilities, such as inter-process and network communication, could
-also be implemented {\em{via}} source and sink functions in basically
-the same way.
-
-\cleardoublepage
-\section{\label{ss:nativefits}Storing AST Objects in FITS Headers (FitsChans)}
-
-\begin{latexonly}
-A FITS header is a sequence of 80-character strings, formatted
-according to particular rules defined by the Flexible Image Transport
-\htmlref{System}{System}
-(FITS). FITS\footnote{http://fits.gsfc.nasa.gov/}
-is a widely-used standard for data interchange in astronomy and has
-also been adopted as a data processing format in some astronomical
-data reduction systems. The individual 80-character strings in a FITS
-header are usually called {\em{cards}} or {\em{header cards}} (for
-entirely anachronistic reasons).
-\end{latexonly}
-\begin{htmlonly}
-A FITS header is a sequence of 80-character strings, formatted
-according to particular rules defined by the Flexible Image Transport
-System (FITS).
-\htmladdnormallink{FITS}{http://fits.gsfc.nasa.gov/}
-is a widely-used standard for data interchange in astronomy and has
-also been adopted as a data processing format in some astronomical
-data reduction systems. The individual 80-character strings in a FITS
-header are usually called {\em{cards}} or {\em{header cards}} (for
-entirely anachronistic reasons).
-\end{htmlonly}
-
-A sequence of FITS cards appears as a header at the start of every
-FITS data file, and sometimes also at other points within it, and is
-used to provide ancillary information which qualifies or describes the
-main array of data stored in the file. As such, FITS headers are prime
-territory for storing information about the coordinate systems
-associated with data held in FITS files.
-
-In this section, we will examine how to store information in FITS
-headers directly in the form of AST Objects---a process which is
-supported by a specialised class of \htmlref{Channel}{Channel} called a \htmlref{FitsChan}{FitsChan}. Our
-discussion here will turn out to be a transitional step that
-emphasises the similarities between a FitsChan and a Channel
-(\secref{ss:channels}). At the same time, it will prepare us for the
-next section (\secref{ss:foreignfits}), where we will examine how to
-use a FitsChan to tackle some of the more difficult problems that FITS
-headers can present.
-
-\subsection{\label{ss:nativeencoding}The Native FITS Encoding}
-
-As it turns out, we are not the first to have thought of storing WCS
-information in FITS headers. In fact, the original FITS standard (1981
-vintage) defined a set of header keywords for this purpose which have
-been widely used, although they have proved too limited for many
-practical purposes.
-
-At the time of writing, a number of different ways of using FITS
-headers for storing WCS information are in use, most (although not
-all) based on the original standard. We will refer to these
-alternative ways of storing the information as FITS {\em{encodings}}
-but will defer a discussion of their advantages and limitations until
-the next section (\secref{ss:foreignfits}).
-
-Here, we will examine how to store AST Objects directly in FITS
-headers. In effect, this defines a new encoding, which we will term
-the {\em{native encoding.}} This is a special kind of encoding,
-because not only does it allow us to associate conventional
-WCS calibration information with FITS data, but it also allows any other
-information that can be expressed in terms of AST Objects to be stored
-as well. In fact, the native encoding provides us with facilities
-roughly analogous to those of the \htmlref{Channel}{Channel}
-(\secref{ss:channels})---{\em{i.e.}}\ a lossless way of
-transferring AST Objects from program to program---but based on FITS
-headers instead of free-format text.
-
-\subsection{The FitsChan Model}
-
-I/O between AST Objects and FITS headers is supported by a specialised
-form of \htmlref{Channel}{Channel} called a \htmlref{FitsChan}{FitsChan}. A FitsChan contains a buffer which
-may hold any number, including zero, of FITS header cards. This buffer
-forms a workspace in which you can assemble FITS cards and manipulate
-them before writing them out to a FITS file.
-
-By default, when a FitsChan is first created, it contains no cards and
-there are four ways of inserting cards into it:
-
-\begin{enumerate}
-\item You may add cards yourself, one at a time, using \htmlref{astPutFits}{astPutFits}
-(\secref{ss:addingfitscards}).
-
-\item You may add cards yourself, supplying all cards concatenated into a
-single string, using \htmlref{astPutCards}{astPutCards}
-(\secref{ss:addingmulticards}).
-
-\item You may write an AST \htmlref{Object}{Object} to the FitsChan (using \htmlref{astWrite}{astWrite}),
-which will have the effect of creating new cards within the FitsChan
-which describe the Object (\secref{ss:writingnativefits}).
-
-\item You may specify a source function which reads data from some
-external store of FITS cards, just like the source associated with a
-basic Channel (\secref{ss:channelsource}). If you supply a source
-function, it will be called when the FitsChan is created in order to
-fill it with an initial set of cards (\secref{ss:fitssourceandsink}).
-\end{enumerate}
-
-There are also three ways of removing cards from a FitsChan:
-
-\begin{enumerate}
-\item You may delete cards yourself, one at a time, using \htmlref{astDelFits}{astDelFits}
-(\secref{ss:findingandchangingfits}).
-
-\item You may read an AST Object from the FitsChan (using \htmlref{astRead}{astRead}),
-which will have the effect of removing those cards from the FitsChan
-which describe the Object (\secref{ss:readingnativefits}).
-
-\item You may specify a sink function which writes data to some
-external store of FITS cards, just like the sink associated with a
-basic Channel (\secref{ss:channelsink}). If you supply a sink function,
-it will be called when the FitsChan is deleted in order to write out
-any FITS cards that remain in it (\secref{ss:fitssourceandsink}).
-\end{enumerate}
-
-Note, in particular, that reading an AST Object from a FitsChan is
-{\em{destructive.}} That is, it deletes the FITS cards that describe the
-Object. The reason for this is explained in
-\secref{ss:destructiveread}.
-
-In addition to the above, you may also read individual cards from a
-FitsChan using the function \htmlref{astFindFits}{astFindFits} (which is not
-destructive). This is the main means of writing out FITS cards if you
-have not supplied a sink function. astFindFits also provides a means
-of searching for particular FITS cards (by keyword, for example) and
-there are other facilities for overwriting cards when required
-(\secref{ss:findingandchangingfits}).
-
-\subsection{\label{ss:creatingafitschan}Creating a FitsChan}
-
-The \htmlref{FitsChan}{FitsChan} constructor function, \htmlref{astFitsChan}{astFitsChan}, is straightforward to
-use:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-AstFitsChan *fitschan;
-
-...
-
-fitschan = astFitsChan( NULL, NULL, "Encoding=NATIVE" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, we have omitted any source or sink functions by supplying NULL
-pointers for the first two arguments.
-We have also initialised the FitsChan's \htmlref{Encoding}{Encoding} attribute to
-NATIVE. This indicates that we will be using the native encoding
-(\secref{ss:nativeencoding}) to store and retrieve Objects. If this
-was left unspecified, the default would depend on the FitsChan's
-contents. An attempt is made to use whatever encoding appears to have
-been used previously. For an empty FitsChan, the default is NATIVE,
-but it does no harm to be sure.
-
-\subsection{\label{ss:addressingfitscards}Addressing Cards in a FitsChan}
-
-Because a \htmlref{FitsChan}{FitsChan} contains an ordered sequence of header cards, a
-mechanism is needed for addressing them. This allows you to specify
-where new cards are to be added, for example, or which card is to be
-deleted.
-
-This role is filled by the FitsChan's integer \htmlref{Card}{Card} attribute, which
-gives the index of the {\em{current card}} in the FitsChan. You can
-nominate any card you like to be current, simply by setting a new
-value for the Card attribute, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int icard;
-
-...
-
-astSetI( fitschan, "Card", icard )
-\end{verbatim}
-\normalsize
-\end{quote}
-
-where ``icard'' contains the index of the card on which you wish to
-operate next. Some functions will update the Card attribute as a
-means of advancing through the sequence of cards, when reading them
-for example, or to indicate which card matches a search criterion.
-
-The default value for Card is one, which is the index of the first
-card. This means that you can ``rewind'' a FitsChan to access its
-first card by clearing the Card attribute:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astClear( fitschan, "Card" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The total number of cards in a FitsChan is given by the integer \htmlref{Ncard}{Ncard}
-attribute. This is a read-only attribute whose value is automatically
-updated as you add or remove cards. It means you can address all the
-cards in sequence using a loop such as the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int ncard;
-
-...
-
-ncard = astGetI( fitschan, "Ncard" );
-for ( icard = 1; icard <= ncard; icard++ ) {
- astSetI( fitschan, "Card", icard );
- <access the current card>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-However, it is usually possible to write slightly tidier loops based
-on the \htmlref{astFindFits}{astFindFits} function described later
-(\secref{ss:extractingfitscards} and
-\secref{ss:findingandchangingfits}).
-
-If you set the Card attribute to a value larger than Ncard, the
-FitsChan is regarded as being positioned at its {\em{end-of-file.}} In
-this case there is no current card and an attempt to obtain a value
-for the Card attribute will always return the value Ncard~$+$~1. When
-a FitsChan is empty, it is always at the end-of-file.
-
-\subsection{\label{ss:writingnativefits}Writing Native Objects to a FitsChan}
-
-Having created an empty \htmlref{FitsChan}{FitsChan} (\secref{ss:creatingafitschan}), you
-can write any AST \htmlref{Object}{Object} to it in the native encoding using the
-\htmlref{astWrite}{astWrite} function. Let us assume we are writing a
-\htmlref{SkyFrame}{SkyFrame},\footnote{More probably, you would want to write a \htmlref{FrameSet}{FrameSet},
-but for purposes of illustration a SkyFrame contains a more manageable
-amount of data.} as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstSkyFrame *skyframe;
-int nobj;
-
-...
-
-nobj = astWrite( fitschan, skyframe );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Since we have selected the native encoding
-(\secref{ss:nativeencoding}), there are no restrictions on the class
-of Object we may write, so astWrite should always return a value of
-one, unless an error occurs. Unlike a basic \htmlref{Channel}{Channel}
-(\secref{ss:writingtoachannel}), this write operation will not produce
-any output from our program. The FITS headers produced are simply
-stored inside the FitsChan.
-
-After this write operation, the \htmlref{Ncard}{Ncard} attribute will be updated to
-reflect the number of new cards added to the FitsChan and the \htmlref{Card}{Card}
-attribute will point at the card immediately after the last one
-written. Since our FitsChan was initially empty, the Card attribute
-will, in this example, point at the end-of-file
-(\secref{ss:addressingfitscards}).
-
-The FITS standard imposes a limit of 68 characters on the length of
-strings which may be stored in a single header card. Sometimes, a
-description of an AST Object involves the use of strings which exceed
-this limit ({\em{e.g.}}\ a \htmlref{Frame}{Frame} title can be of arbitrary length). If
-this occurs, the long string will be split over two or more header cards.
-Each ``continuation'' card will have the keyword {\tt CONTINUE} in
-columns 1 to 8, and will contain a space in column 9 (instead of the
-usual equals sign). An ampersand (``{\tt \&}'') is appended to the end of
-each of the strings (except the last one) to indicate that the string is
-continued on the next card.
-
-Note, this splitting of long strings over several cards only occurs when
-writing AST Objects to a FitsChan using the astWrite function and the
-{\em native} encoding. If a long string is stored in a FitsChan using
-(for instance) the \htmlref{astPutFits}{astPutFits} or \htmlref{astPutCards}{astPutCards} function, it will simply be truncated.
-
-
-\subsection{\label{ss:extractingfitscards}Extracting Individual Cards from a FitsChan}
-
-To examine the contents of the \htmlref{FitsChan}{FitsChan} after writing the \htmlref{SkyFrame}{SkyFrame}
-above (\secref{ss:writingnativefits}), we must write a simple loop to
-extract each card in turn and print it out. We must also remember to
-rewind the FitsChan first, {\em{e.g.}}\ using \htmlref{astClear}{astClear}. The following
-loop would do:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include <stdio.h>
-char card[ 81 ];
-
-...
-
-astClear( fitschan, "Card" );
-while ( astFindFits( fitschan, "%f", card, 1 ) ) (void) printf( "%s\n", card );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, we have used the \htmlref{astFindFits}{astFindFits} function to find a FITS card by
-keyword. It is given a keyword template of ``\%f'', which matches any
-FITS keyword, so it always finds the current card, which it
-returns. Its fourth argument is set to 1, to indicate that the \htmlref{Card}{Card}
-attribute should be incremented afterwards so that the following card
-will be found the next time around the loop. astFindFits returns zero
-when it reaches the end-of-file and this terminates the loop.
-
-If we were storing the FITS headers in an output FITS file instead of
-printing them out, we might use a loop like this but replace
-``printf'' with a suitable data storage operation. This would only be
-necessary if we had not provided a sink function for the FitsChan
-(\secref{ss:fitssourceandsink}).
-
-\subsection{The Native FitsChan Output Format}
-
-If we print out the FITS header cards describing the \htmlref{SkyFrame}{SkyFrame} we wrote
-earlier (\secref{ss:writingnativefits}), we should obtain something
-like the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
-COMMENT AST ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ AST
-COMMENT AST Beginning of AST data for SkyFrame object AST
-COMMENT AST ................................................................ AST
-BEGAST_A= 'SkyFrame' / Description of celestial coordinate system
-NAXES_A = 2 / Number of coordinate axes
-AX1_A = ' ' / Axis number 1
-BEGAST_B= 'SkyAxis ' / Celestial coordinate axis
-ENDAST_A= 'SkyAxis ' / End of object definition
-AX2_A = ' ' / Axis number 2
-BEGAST_C= 'SkyAxis ' / Celestial coordinate axis
-ENDAST_B= 'SkyAxis ' / End of object definition
-ISA_A = 'Frame ' / Coordinate system description
-SYSTEM_A= 'FK4-NO-E' / Celestial coordinate system type
-EPOCH_A = 1958.0 / Besselian epoch of observation
-ENDAST_C= 'SkyFrame' / End of object definition
-COMMENT AST ................................................................ AST
-COMMENT AST End of AST data for SkyFrame object AST
-COMMENT AST ---------------------------------------------------------------- AST
-\end{verbatim}
-\normalsize
-\end{quote}
-
-As you can see, this resembles the information that would be written
-to a basic \htmlref{Channel}{Channel} to describe the same SkyFrame
-(\secref{ss:textualoutputformat}), except that it has been formatted
-into 80-character header cards according to FITS conventions.
-
-There are also a number of other differences worth noting:
-
-\begin{enumerate}
-\item There is no unnecessary information about default values
-provided for the benefit of the human reader. This is because the \htmlref{Full}{Full}
-attribute for a \htmlref{FitsChan}{FitsChan} defaults to $-$1, thus suppressing this
-information ({\em{c.f.}}~\secref{ss:controllingchanneloutput}). You
-can restore the information if you wish by setting Full to 0 or $+$1,
-in which case additional COMMENT cards will be generated to hold it.
-
-\item The information is not indented, because FITS does not allow
-this. However, if you change the Full attribute to 0 or $+$1, comments
-will be included that are intended to help break up the sequence of
-headers and highlight its structure. This will probably only be of use
-if you are attempting to track down a problem by examining the FITS
-cards produced in detail.
-
-\item The FITS keywords which appear to the left of the ``$=$'' signs
-have additional characters (``\_A'', ``\_B'', {\em{etc.}}) appended to
-them. This is done in order to make each keyword unique.
-\end{enumerate}
-
-This last point is worth further comment and is necessary because the
-FITS standard only allows for certain keywords (such as COMMENT and
-HISTORY) to appear more than once. \htmlref{astWrite}{astWrite} therefore appends an
-arbitrary sequence of two characters to each new keyword it generates
-in order to ensure that it does not duplicate any already present in
-the FitsChan.
-
-The main risk from not following this convention is that some software
-might ignore (say) all but the last occurrence of a keyword before
-passing the FITS headers on. Such an event is unlikely, but would
-obviously destroy the information present, so astWrite enforces the
-uniqueness of the keywords it uses. The extra characters added are
-ignored when the information is read back.
-
-As with a basic Channel, you can also suppress the comments produced
-in a FitsChan by setting the boolean (integer) \htmlref{Comment}{Comment} attribute to
-zero (\secref{ss:channelcommenting}). However, FITS headers are
-traditionally generously commented, so this is not recommended.
-
-\subsection{\label{ss:addingfitscards}Adding Individual Cards to a FitsChan}
-
-To insert individual cards into a \htmlref{FitsChan}{FitsChan}, prior to reading them back
-as Objects for example, you should use the \htmlref{astPutFits}{astPutFits} function. You
-can insert a card in front of the current one as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astPutFits( fitschan, card, 0 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-where the third argument of zero indicates that the current card
-should not be overwritten. Note that facilities are not provided by
-AST for formatting the card contents.
-
-After inserting a card, the FitsChan's \htmlref{Card}{Card} attribute points at the
-original Card, or at the end-of-file if the FitsChan was originally
-empty. Entering a sequence of cards is therefore straightforward. If
-``cards'' is an array of pointers to strings containing FITS header
-cards and ``ncards'' is the number of cards, then a loop such as the
-following will insert the cards in sequence into a FitsChan:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#define MAXCARD 100
-char *cards[ MAXCARD ];
-int ncard;
-
-...
-
-for ( icard = 0; icard < ncard; icard++ ) astPutFits( fitschan, cards[ icard ], 0 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The string containing a card need not be null terminated if it is at
-least 80 characters long (we have not allocated space for the strings
-themselves in this brief example).
-
-Note that astPutFits enforces the validity of a FitsChan by rejecting
-any cards which do not adhere to the FITS standard. If any such cards
-are detected, an error will result.
-
-\subsection{\label{ss:addingmulticards}Adding Concatenated Cards to a FitsChan}
-
-If you have all your cards concatenated together into a single long string,
-each occupying 80 characters (with no delimiters), you can insert them
-into a \htmlref{FitsChan}{FitsChan} in a single call using
-\htmlref{astPutCards}{astPutCards}.
-This call first empties the supplied FitsChan of any existing cards, then
-inserts the new cards, and finally rewinds the FitsChan so that a
-subsequent call to
-\htmlref{astRead}{astRead}
-will start reading from the first supplied card. The
-astPutCards function uses \htmlref{astPutFits}{astPutFits}
-internally to interpret and store each individual card, and so the
-caveats in \secref{ss:addingfitscards} should be read.
-
-For instance, if you are using the CFITSIO library for access to FITS
-files, you can use the CFITSIO fits\_hdr2str function to obtain a string suitable
-for passing to astPutCards:
-
-\begin{quote}
-\small
-\begin{verbatim}
-
-
-if( !fits_hdr2str( fptr, 0, NULL, 0, &header, &nkeys, &status ) )
- fitschan = astFitsChan( NULL, NULL, "" );
- astPutCards( fitschan, header );
- header = free( header );
- wcsinfo = astRead( fitschan );
-
- ...
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-
-
-\subsection{\label{ss:readingnativefits}Reading Native Objects From a FitsChan}
-
-Once you have stored a FITS header description of an \htmlref{Object}{Object} in a
-\htmlref{FitsChan}{FitsChan} using the native encoding (\secref{ss:writingnativefits}),
-you can read it back using \htmlref{astRead}{astRead} in much the same way as with a
-basic \htmlref{Channel}{Channel} (\secref{ss:readingfromachannel}). Similar comments
-about validating the Object you read also apply
-(\secref{ss:validatinginput}). If you have just written to the
-FitsChan, you must remember to rewind it first:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstObject *object;
-
-...
-
-astClear( fitschan, "Card" );
-object = astRead( fitschan );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-An important feature of a FitsChan is that read operations are
-destructive. This means that if an Object description is found, it
-will be consumed by astRead which will remove all the cards involved,
-including associated COMMENT cards, from the FitsChan. Thus, if you
-write an Object to a FitsChan, rewind, and read the same Object back,
-you should end up with the original FitsChan contents. If you need to
-circumvent this behaviour for any reason, it is a simple matter to
-make a copy of a FitsChan using \htmlref{astCopy}{astCopy}
-(\secref{ss:copyingobjects}). If you then read from the copy, the
-original FitsChan will remain untouched.
-
-After a read completes, the FitsChan's \htmlref{Card}{Card} attribute identifies the
-card immediately following the last card read, or the end-of-file of
-there are no more cards.
-
-Since the {\em native} encoding is being used, any long strings involved
-in the object description will have been split into two or more adjacent
-contuation cards when the Object was stored in the header using function
-\htmlref{astWrite}{astWrite}. The astRead function reverses this process by concatenating any
-such adjacent continuation cards to re-create the original long string.
-
-
-\subsection{Saving and Restoring Multiple Objects in a FitsChan}
-
-When using the native FITS encoding, multiple Objects may be stored
-and all I/O operations are sequential. This means that you can simply
-write a sequence of Objects to a \htmlref{FitsChan}{FitsChan}. After each write operation,
-the \htmlref{Card}{Card} attribute will be updated so that the next write appends the
-next \htmlref{Object}{Object} description to the previous one.
-
-If you then rewind the FitsChan, you can read the Objects back in the
-original order. Reading them back will, of course, remove their
-descriptions from the FitsChan (\secref{ss:readingnativefits}) but the
-behaviour of the Card attribute is such that successive reads will
-simply return each Object in sequence.
-
-The only thing that may require care, given that a FitsChan can always
-be addressed randomly by setting its Card attribute, is to avoid
-writing one Object on top of another. For obvious reasons, the Object
-descriptions in a FitsChan must remain separate if they are to make
-sense when read back.
-
-\subsection{Mixing Native Objects with Other FITS Cards}
-
-Of course, any real FITS header will contain other information besides
-AST Objects, if only the mandatory FITS cards that must accompany all
-FITS data. When FITS headers are read in from a real dataset,
-therefore, any native AST \htmlref{Object}{Object} descriptions will be inter-mixed with
-many other cards.
-
-Because this is the normal state of affairs, the boolean (integer)
-\htmlref{Skip}{Skip} attribute for a \htmlref{FitsChan}{FitsChan} defaults to one. This means that when
-you read an Object From a FitsChan, any irrelevant cards will simply
-be skipped over until the start of the next Object description, if
-any, is found. If you start reading part way through an Object
-description, no error will result. The remainder of the description
-will simply be skipped.
-
-Setting Skip to zero will change this behaviour to resemble that of a
-basic \htmlref{Channel}{Channel} (\secref{ss:mixingchanneltext}), where extraneous data
-are not permitted by default, but this will probably rarely be useful.
-
-\subsection{\label{ss:findingandchangingfits}Finding and Changing Cards in a FitsChan}
-
-You can search for, and retrieve, particular cards in a \htmlref{FitsChan}{FitsChan} by
-keyword, using the function \htmlref{astFindFits}{astFindFits}. This performs a search,
-starting at the current card, until it finds a card whose keyword
-matches the template you supply, or the end-of-file is reached.
-
-If a suitable card is found, astFindFits optionally returns the card's
-contents and then sets the FitsChan's \htmlref{Card}{Card} attribute either to
-identify the card found, or the one following it. The way you want the
-Card attribute to be set is indicated by the final boolean (int)
-argument to astFindFits. A value of one is returned to indicate
-success. If a suitable card cannot be found, astFindFits returns a
-value of zero to indicate failure and sets the FitsChan's Card
-attribute to the end-of-file.
-
-Requesting that the Card attribute be set to indicate the card that
-astFindFits finds is useful if you want to replace that card with a
-new one, as in this example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-char newcard[ 81 ];
-
-...
-
-(void) astFindFits( fitschan, "AIRMASS", NULL, 0 );
-astPutFits( fitschan, newcard, 1 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, astFindFits is used to search for a card with the keyword
-AIRMASS, with a NULL pointer being given to indicate that we do not
-want the card's contents returned. If the card is found, \htmlref{astPutFits}{astPutFits}
-then overwrites it with a new card. Otherwise, the Card attribute
-ends up pointing at the end-of-file and the new card is simply
-appended to the end of the FitsChan.
-
-A similar approach can be used to delete selected cards from a
-FitsChan using \htmlref{astDelFits}{astDelFits}, which deletes the current card:
-
-\begin{quote}
-\small
-\begin{verbatim}
-if ( astFindFits( fitschan, "BSCALE", NULL, 0 ) ) astDelFits( fitschan );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This deletes the first card, if any, with the BSCALE keyword.
-
-Requesting that astFindFits increments the Card attribute to identify
-the card following the one found is more useful when writing loops.
-For example, the following loop extracts each card whose keyword
-matches the template ``CD\%6d'' (that is, ``CD'' followed by six
-decimal digits):
-
-\begin{quote}
-\small
-\begin{verbatim}
-while ( astFindFits( fitschan, "CD%6d", card, 1 ) {
- <process the card's contents>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-For further details of keyword templates, see the description of
-astFindFits in \appref{ss:functiondescriptions}.
-
-\subsection{\label{ss:fitssourceandsink}Source and Sink Functions for FitsChans}
-
-The use of source and sink functions with a \htmlref{FitsChan}{FitsChan} is optional. This
-is because you can always arrange to explicitly fill a FitsChan with
-FITS cards (\secref{ss:addingfitscards} and \secref{ss:addingmulticards})
-and you can also extract any
-cards that remain and write them out yourself
-(\secref{ss:extractingfitscards}) before you delete the FitsChan.
-
-If you choose to use these functions, however, they behave in a very
-similar manner to those used by a \htmlref{Channel}{Channel} (\secref{ss:channelsource}
-and \secref{ss:channelsink}). You supply pointers to these functions,
-as arguments to the constructor function \htmlref{astFitsChan}{astFitsChan} when you create
-the FitsChan (\secref{ss:creatingafitschan}). The source function is
-invoked implicitly at this point to fill the FitsChan with FITS cards
-and the FitsChan is then rewound, so that the first card becomes
-current. The sink function is automatically invoked later, when the
-FitsChan is deleted, in order to write out any cards that remain in
-it.
-
-The only real difference between the source and sink functions for a
-FitsChan and a basic Channel is that FITS cards are limited in length
-to 80~characters, so the choice of buffer size is simplified. The
-``Source'' and ``Sink'' functions in \secref{ss:channelsource} and
-\secref{ss:channelsink} could therefore be used to access FITS headers
-stored in text files simply by changing LEN to be 80. If you were not
-accessing a text file, however, appropriate changes to the I/O
-statements would be needed since the separating newline characters
-would be absent. The details obviously depend on the format of the
-file you are handling, which need not necessarily be a true FITS file.
-
-
-\cleardoublepage
-\section{\label{ss:foreignfits}Using Foreign FITS Encodings}
-
-We saw in the previous section (\secref{ss:nativefits}) how to store
-and retrieve any kind of AST \htmlref{Object}{Object} in a FITS header by using a
-\htmlref{FitsChan}{FitsChan}. To achieve this, we set the FitsChan's \htmlref{Encoding}{Encoding} attribute to
-NATIVE. However, the Objects we wrote could then only be read back by
-other programs that use AST.
-
-In practice, we will also encounter FITS headers containing WCS
-information written by other software systems. We will probably also
-need to write FITS headers in a format that can be understood by these
-systems. Indeed, this interchange of data is one of the main reasons
-for the existence of FITS, so in this section we will examine how to
-accommodate these requirements.
-
-\subsection{\label{ss:foreignencodings}The Foreign FITS Encodings}
-
-As mentioned previously (\secref{ss:nativeencoding}), there are a
-number of conventions currently in use for storing WCS information in
-FITS headers, which we call {\em{encodings.}} Here, we are concerned
-with those encodings defined by software systems other than AST, which
-we term {\em{foreign encodings.}}
-
-Currently, AST supports six foreign encodings, which may be selected
-by setting the \htmlref{Encoding}{Encoding} attribute of a \htmlref{FitsChan}{FitsChan} to one of the
-following (character string) values:
-
-\begin{quote}
-\begin{description}
-\item[DSS]\mbox{}\\
-This encoding stores WCS information using the convention developed at
-the Space Telescope Science Institute for the Digitised Sky Survey
-(DSS) astrometric plate calibrations. DSS images which use this
-convention are widely available and it is understood by a number of
-important and well-established astronomy applications.
-
-However, the calibration model used (based on a polynomial fit) is not
-easily applicable to other types of data and creating the polynomial
-coefficients needed to calibrate your own images can prove
-difficult. For this reason, the DSS encoding is probably best viewed
-as a ``read-only'' format. It is possible, however, to read in WCS
-information using this encoding and then to write it back out again,
-so long as only minor changes have been made.
-
-\item[FITS-WCS]\mbox{}\\
-This encoding is very important because it is based on a new FITS standard
-which should, for the first time, address the problem of celestial coordinate
-systems in a proper manner, by considerably extending the original FITS
-standard.
-
-The conventions used are described in a series of papers by
-E.W.\,Greisen, M.\,Calabretta, \emph{et. al.}, often referred to as the
-``FITS-WCS papers''. They are described at
-\htmladdnormallink{http://fits.gsfc.nasa.gov/fits\_wcs.html}
-{http://fits.gsfc.nasa.gov/fits_wcs.html}. Now that the first two papers
-in this series have been agreed, this encoding should be understood by any
-FITS-WCS compliant software and it is likely to be adopted widely for FITS
-data in future. For details of the coverage of these conventions provided
-by the FitsChan class, see \appref{ss:fitswcscoverage}.
-
-\item[FITS-IRAF]\mbox{}\\
-This encoding is based on the conventions described in the document
-``World Coordinate Systems Representations Within the FITS Format'' by R.J.
-Hanisch and D.G. Wells, 1988.\footnote{Available by ftp from
-fits.cv.nrao.edu /fits/documents/wcs/wcs88.ps.Z} It is employed
-by the IRAF data analysis facility, so its use will facilitate data
-exchange with IRAF. This encoding is in effect a sub-set of the current
-FITS-WCS encoding.
-
-\item[FITS-PC]\mbox{}\\
-This encoding is based on a previous version of the proposed new FITS WCS
-standard which used {\tt PCjjjjiii} and {\tt CDELTj} keywords to describe
-axis rotation and scaling. Versions of AST prior to V1.5 used this scheme
-for the FITS-WCS encoding. As of V1.5, FITS-WCS uses {\tt CDi\_j}
-keywords instead.\footnote{There are many other differences between the
-previous and the current FITS-WCS encodings. The keywords to describe
-axis rotation and scaling is used purely as a label to identify the
-scheme.} The FITS-PC encoding is included in AST V1.5 only to allow
-FITS-WCS data created with previous versions to be read. It should not,
-in general, be used to create new data sets.
-
-\item[FITS-AIPS]\mbox{}\\
-This encoding is based on the conventions described in the document
-``Non-linear Coordinate Systems in AIPS'' by Eric W. Greisen (revised 9th
-September, 1994).\footnote{Available by ftp from fits.cv.nrao.edu
-/fits/documents/wcs/aips27.ps.Z} It is currently employed by the AIPS
-data analysis facility, so its use will facilitate data exchange with
-AIPS. This encoding uses {\tt CROTAi} and {\tt CDELTi} keywords to
-describe axis rotation and scaling.
-
-\item[FITS-AIPS++]\mbox{}\\
-Encodes coordinate system information in FITS
-header cards using the conventions used by the AIPS++ project.
-This is an extension of FITS-AIPS which includes some of the
-features of FITS-PC and FITS-IRAF.
-\end{description}
-\end{quote}
-
-For more detail about the above encodings, see the description of the
-Encoding attribute in \appref{ss:attributedescriptions}.
-
-\subsection{\label{ss:foreignfitslimitations}Limitations of Foreign Encodings}
-
-The foreign encodings available for storing WCS information in FITS
-headers have a number of limitations when compared with the native
-encoding of AST Objects (\secref{ss:nativefits}). The main ones are:
-
-\begin{enumerate}
-\item Only one class of AST \htmlref{Object}{Object}, the \htmlref{FrameSet}{FrameSet}, may be represented
-using a foreign FITS encoding. This should not come as a surprise,
-because the purpose of storing WCS information in FITS headers is to
-attach coordinate systems to an associated array of data. Since the
-FrameSet is the AST Object designed for the same purpose
-(\secref{ss:baseandcurrent}), there is a natural correspondence.
-
-The way in which a FrameSet is translated to and from the foreign
-encoding also follows from this correspondence. The FrameSet's base
-\htmlref{Frame}{Frame} identifies the data grid coordinates of the associated FITS
-data. These are the same as FITS pixel coordinates, in which the first
-pixel (in 2 dimensions) has coordinates (1,1) at its
-centre. Similarly, the current Frame of the FrameSet identifies the
-FITS world coordinate system associated with the data.
-
-\item You may store a representation of only a single FrameSet in any
-individual set of FITS header cards ({\em{i.e.}}\ in a single
-\htmlref{FitsChan}{FitsChan}) at one time. If you attempt to store more than one, you may
-over-write the previous one or generate an invalid representation of
-your WCS information.
-
-This is mainly a consequence of the use of fixed FITS keywords by
-foreign encodings and the fact that you cannot, in general, have
-multiple FITS cards with the same keyword.
-
-\item In general, it will not be possible to store every possible
-FrameSet that you might construct. Depending on the encoding, only
-certain FrameSets that conform to particular restrictions can be
-represented and, even then, some of their information may be lost. See
-the description of the \htmlref{Encoding}{Encoding} attribute in
-\appref{ss:attributedescriptions} for more details of these
-limitations.
-\end{enumerate}
-
-It should be understood that using foreign encodings to read and write
-information held in AST Objects is essentially a process of converting
-the data format. As such, it potentially suffers from the same
-problems faced by all such processes, {\em{i.e.}}\ differences between
-the AST data model and that of the foreign encoding may cause some
-information to be lost. Because the AST model is extremely flexible,
-however, any data loss can largely be eliminated when reading.
-Instead, this effect manifests itself in the form of the above
-encoding-dependent restrictions on the kind of AST Objects which may
-be written.
-
-One of the aims of the AST library, of course, is to insulate you from
-the details of these foreign encodings and the restrictions they
-impose. We will see shortly, therefore, how AST provides a mechanism
-for determining whether your WCS information satisfies the necessary
-conditions and allows you to make an automatic choice of which
-encoding to use.
-
-\subsection{\label{ss:identifyingfitsencoding}Identifying Foreign Encodings on Input}
-
-Let us now examine the practicalities of extracting WCS information
-from a set of FITS header cards which have been written by some other
-software system. We will pretend that our program does not know which
-encoding has been used for the WCS information and must discover this
-for itself. In order to have a concrete example, however, we will use
-the following set of cards. These use the FITS-AIPS encoding and
-contain a typical mix of other FITS cards which are irrelevant to the
-WCS information in which we are interested:
-
-\begin{quote}
-\small
-\begin{verbatim}
-SIMPLE = T / Written by IDL: 30-Jul-1997 05:35:42.00
-BITPIX = -32 / Bits per pixel.
-NAXIS = 2 / Number of dimensions
-NAXIS1 = 300 / Length of x axis.
-NAXIS2 = 300 / Length of y axis.
-CTYPE1 = 'GLON-ZEA' / X-axis type
-CTYPE2 = 'GLAT-ZEA' / Y-axis type
-CRVAL1 = -149.56866 / Reference pixel value
-CRVAL2 = -19.758201 / Reference pixel value
-CRPIX1 = 150.500 / Reference pixel
-CRPIX2 = 150.500 / Reference pixel
-CDELT1 = -1.20000 / Degrees/pixel
-CDELT2 = 1.20000 / Degrees/pixel
-CROTA1 = 0.00000 / Rotation in degrees.
-SURVEY = 'COBE DIRBE'
-BUNITS = 'MJy/sr ' /
-ORIGIN = 'CDAC ' / Cosmology Data Analysis Center
-TELESCOP= 'COBE ' / COsmic Background Explorer satellite
-INSTRUME= 'DIRBE ' / COBE instrument [DIRBE, DMR, FIRAS]
-PIXRESOL= 9 / Quad tree pixel resolution [6, 9]
-DATE = '27/09/94' / FITS file creation date (dd/mm/yy)
-DATE-MAP= '16/09/94' / Date of original file creation (dd/mm/yy)
-COMMENT COBE specific keywords
-DATE-BEG= '08/12/89' / date of initial data represented (dd/mm/yy)
-DATE-END= '25/09/90' / date of final data represented (dd/mm/yy)
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The first step is to create a \htmlref{FitsChan}{FitsChan} and insert these cards into
-it. If ``cards'' is an array of pointers to character strings holding
-the header cards and ``ncards'' is the number of cards, this could be
-done as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-#define MAXCARD 100
-AstFitsChan *fitschan;
-char *cards[ MAXCARD ];
-int icard, ncard;
-
-...
-
-fitschan = astFitsChan( NULL, NULL, "" );
-for ( icard = 0; icard < ncard; icard++ ) astPutFits( fitschan, cards[ icard ], 0 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note that we have not initialised the \htmlref{Encoding}{Encoding} attribute of the
-FitsChan as we did in \secref{ss:creatingafitschan} when we wanted to
-use the native encoding. This is because we are pretending not to know
-which encoding to use and want AST to determine this for us. By
-leaving the Encoding attribute un-set, its default value will adjust
-to whichever encoding AST considers to be most appropriate, according
-to the FITS header cards present. For details of how this choice is
-made, see the description of the Encoding attribute in
-\appref{ss:attributedescriptions}.
-
-This approach has the obvious advantages of making our program simpler
-and more flexible and of freeing us from having to know about the
-different encodings available. As a bonus, it also means that the
-program will be able to read any new encodings that AST may support in
-future, without needing to be changed.
-
-At this point, we could enquire the default value of the Encoding
-attribute, which indicates which encoding AST intends to use, as
-follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-const char *encode;
-
-...
-
-
-encode = astGetC( fitschan, "Encoding" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The result of this enquiry would be the string ``FITS-AIPS''. Note
-that we could also have set the FitsChan's Encoding attribute
-explicitly, such as when creating it:
-
-\begin{quote}
-\small
-\begin{verbatim}
-fitschan = astFitsChan( NULL, NULL, "Encoding=FITS-AIPS" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-If we tried to read information using this encoding
-(\secref{ss:readingforeignfits}), but failed, we could then change the
-encoding and try again. This would allow our program to take control
-of how the optimum choice of encoding is arrived at. However, it would
-also involve using explicit knowledge of the encodings available and
-this is best avoided if possible.
-
-\subsection{\label{ss:readingforeignfits}Reading Foreign WCS Information from a FITS Header}
-
-Having stored a set of FITS header cards in a \htmlref{FitsChan}{FitsChan} and determined
-how the WCS information is encoded
-(\secref{ss:identifyingfitsencoding}), the next step is to read an AST
-\htmlref{Object}{Object} from the FitsChan using \htmlref{astRead}{astRead}. We must also remember to
-rewind the FitsChan first, if necessary, such as by clearing its \htmlref{Card}{Card}
-attribute, which defaults to 1:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstObject *wcsinfo;
-
-...
-
-astClear( fitschan, "Card" );
-wcsinfo = astRead( fitschan );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-If the pointer returned by astRead is not equal to AST\_\_NULL, then
-an Object has been read successfully. Otherwise, there was either no
-information to read or the choice of FITS encoding
-(\secref{ss:identifyingfitsencoding}) was inappropriate.
-
-At this point you might like to indulge in a little data validation
-along the lines described in \secref{ss:validatinginput}, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-if ( !strcmp( astGetC( wcsinfo, "Class" ), "FrameSet" ) ) {
- <the Object is a FrameSet, so use it>
-} else {
- <something unexpected was read>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-If a foreign encoding has definitely been used, then the Object will
-automatically be a \htmlref{FrameSet}{FrameSet} (\secref{ss:foreignfitslimitations}), so
-this stage can be omitted. However, if the native encoding
-(\secref{ss:nativeencoding}) might have been employed, which is a
-possibility if you accept the FitsChan's default \htmlref{Encoding}{Encoding} value, then
-any class of Object might have been read and a quick check would be
-worthwhile.
-
-If you used \htmlref{astShow}{astShow} (\secref{ss:displayingobjects}) to examine the
-FrameSet which results from reading our example FITS header
-(\secref{ss:identifyingfitsencoding}), you would find that its base
-\htmlref{Frame}{Frame} describes the image's pixel coordinate system and that its
-current Frame is a \htmlref{SkyFrame}{SkyFrame} representing galactic coordinates. These
-two Frames are inter-related by a \htmlref{Mapping}{Mapping} (actually a \htmlref{CmpMap}{CmpMap}) which
-incorporates the effects of various rotations, scalings and a
-``zenithal equal area'' sky projection, so that each pixel of the FITS
-image is mapped on to a corresponding sky position in galactic
-coordinates.
-
-Because this FrameSet may be used both as a Mapping
-(\secref{ss:framesetasmapping}) and as a Frame
-(\secref{ss:framesetasframe}), it may be employed directly to perform
-many useful operations without any need to decompose it into its
-component parts. These include:
-
-\begin{itemize}
-\item Transforming data grid (FITS pixel) coordinates into galactic
-coordinates and {\em{vice versa}} (\secref{ss:framesetasmapping}).
-
-\item Formatting coordinate values (either pixel or galactic
-coordinates) ready for display to a user
-(\secref{ss:formattingaxisvalues} and \secref{ss:normalising}).
-
-\item Enquiring about axis labels (or other axis
-information---\secref{ss:frameattributes}) which might be used, for
-example, to label columns of coordinates in a table
-(\secref{ss:frameaxisattributes}).
-
-\item Aligning the image with another image from which a similar
-FrameSet has been obtained (\secref{ss:registeringimages}).
-
-\item Creating a \htmlref{Plot}{Plot} (\secref{ss:plots}), which can be used to overlay
-a variety of graphical information (including a coordinate
-grid---Figure~\ref{fig:gridplot}) on the displayed image.
-
-\item Generating a new FrameSet which reflects any geometrical
-processing you perform on the associated image data
-(\secref{ss:wcsprocessingexample}). This new FrameSet could then be
-written out as FITS headers to describe the modified image
-(\secref{ss:writingforeignfits}).
-\end{itemize}
-
-If the FrameSet contains other Frames (apart from the base and current
-Frames), then you would also have access to information about other
-coordinate systems associated with the image.
-
-\subsection{\label{ss:destructiveread}Removing WCS Information from FITS Headers---the Destructive Read}
-
-It is instructive at this point to examine the contents of a \htmlref{FitsChan}{FitsChan}
-after we have read a \htmlref{FrameSet}{FrameSet} from it
-(\secref{ss:readingforeignfits}). The following would rewind our
-FitsChan and display its contents:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include <stdio.h>
-char card[ 81 ];
-
-...
-
-astClear( fitschan, "Card" );
-while ( astFindFits( fitschan, "%f", card, 1 ) ) (void) printf( "%s\n", card );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The output, if we started with the example FITS header in
-\secref{ss:identifyingfitsencoding}, might look like this:
-
-\begin{quote}
-\small
-\begin{verbatim}
-SIMPLE = T / Written by IDL: 30-Jul-1997 05:35:42.00
-BITPIX = -32 / Bits per pixel.
-NAXIS = 2 / Number of dimensions
-NAXIS1 = 300 / Length of x axis.
-NAXIS2 = 300 / Length of y axis.
-SURVEY = 'COBE DIRBE'
-BUNITS = 'MJy/sr '
-ORIGIN = 'CDAC ' / Cosmology Data Analysis Center
-TELESCOP= 'COBE ' / COsmic Background Explorer satellite
-INSTRUME= 'DIRBE ' / COBE instrument [DIRBE, DMR, FIRAS]
-PIXRESOL= 9 / Quad tree pixel resolution [6, 9]
-DATE = '27/09/94' / FITS file creation date (dd/mm/yy)
-DATE-MAP= '16/09/94' / Date of original file creation (dd/mm/yy)
-COMMENT COBE specific keywords
-DATE-BEG= '08/12/89' / date of initial data represented (dd/mm/yy)
-DATE-END= '25/09/90' / date of final data represented (dd/mm/yy)
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Comparing this with the original, you can see that all the FITS cards
-that represent WCS information have been removed. They have
-effectively been ``sucked out'' of the FitsChan by the destructive
-read that \htmlref{astRead}{astRead} performs and converted into an equivalent
-FrameSet. AST remembers where they were stored, however, so that if we
-later write WCS information back into the FitsChan
-(\secref{ss:writingforeignfits}) they will, as far as possible, go
-back into their original locations. This helps to preserve the overall
-layout of the FITS header.
-
-You can now see why astRead performs destructive reads. It is a
-mechanism for removing WCS information from a FITS header while
-insulating you, as a programmer, from the details of the encoding
-being used. It means you can ensure that all relevant header cards
-have been removed, giving you a clean slate, without having to know
-which FITS keywords any particular encoding uses.
-
-Clearing this WCS information out of a FITS header is particularly
-important when considering how to write new WCS information back after
-processing (\secref{ss:writingforeignfits}). If any relevant FITS
-cards are left over from the input dataset and find their way into the
-new processed header, they could interfere with the new information
-being written.\footnote{This can happen if a particular keyword is
-present in the input header but is not used in the output header
-(whether particular keywords are used can depend on the WCS
-information being stored). In such a case, the original value would
-not be over-written by a new output value, so would remain erroneously
-present.} The destructive read mechanism ensures that this doesn't
-happen.
-
-\subsection{\label{ss:propagatingwcsinformation}Propagating WCS Information through Data Processing Steps}
-
-One of the purposes of AST is to make it feasible to propagate WCS
-information through successive stages of data processing, so that it
-remains consistent with the associated image data. As far as possible,
-this should happen regardless of the FITS encoding used to store the
-original WCS information.
-
-If the data processing being performed does not change the
-relationship between image pixel and world coordinates (whatever these
-may be), then propagation of the WCS information is
-straightforward. You can simply copy the FITS header from input to
-output.
-
-If this relationship changes, however, then the WCS information must
-be processed alongside the image data and a new FITS header generated
-to represent it. In this case, the sequence of operations within your
-program would probably be as follows:
-
-\begin{enumerate}
-\item Read the image data and associated FITS header from the input
-dataset, putting the header cards into a \htmlref{FitsChan}{FitsChan}
-(\secref{ss:identifyingfitsencoding}).
-
-\item Read an AST \htmlref{Object}{Object}, a \htmlref{FrameSet}{FrameSet}, from the FitsChan (typically
-using a foreign FITS encoding---\secref{ss:readingforeignfits}).
-
-\item Process the image data and modify the FrameSet accordingly
-({\em{e.g.}}~\secref{ss:wcsprocessingexample}).
-
-\item Write the FrameSet back into the FitsChan
-(\secref{ss:writingforeignfits}).
-
-\item Perform any other modification of FITS header cards your program
-may require.
-
-\item Write the FitsChan contents ({\em{i.e.}}\ processed header
-cards) and image data to the output dataset.
-\end{enumerate}
-
-In stage (2), the original WCS information will be removed from the
-FitsChan by a destructive read. Later, in stage (4), new WCS
-information is written to replace it. This is the process which we
-consider next (\secref{ss:writingforeignfits}).
-
-\subsection{\label{ss:writingforeignfits}Writing Foreign WCS Information to a FITS Header}
-
-Before we can write processed WCS information held in a \htmlref{FrameSet}{FrameSet} back
-into a \htmlref{FitsChan}{FitsChan} in preparation for output, we must select the FITS
-encoding to use. Unfortunately, we cannot simply depend on the
-default value of the \htmlref{Encoding}{Encoding} attribute, as we did when reading the
-input information (\secref{ss:identifyingfitsencoding}), because the
-destructive action of reading the WCS data
-(\secref{ss:destructiveread}) will have altered the FitsChan's
-contents. This, in turn, will have changed the choice of default
-encoding, probably causing it to revert to NATIVE.
-
-We will return to the question of the optimum choice of encoding
-below. For now, let's assume that we want to use the same encoding
-for output as we used for input. Since we enquired what that was
-before we read the input WCS data from the FitsChan
-(\secref{ss:identifyingfitsencoding}), we can now set that value
-explicitly. We can also set the FitsChan's \htmlref{Card}{Card} attribute back to 1 at
-the same time (because the write will fail if the FitsChan is not
-rewound). \htmlref{astWrite}{astWrite} can then be used to write the output WCS
-information into the FitsChan:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int nobj;
-
-...
-
-astSet( fitschan, "Card=1, Encoding=%s", encode );
-nobj = astWrite( fitschan, wcsinfo );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The value returned by astWrite (assigned to ``nobj'') indicates how
-many Objects were written. This will either be 1 or zero. A value of
-zero is used to indicate that the information could not be encoded in
-the form you requested. If this happens, nothing will have been
-written.
-
-If your choice of encoding proves inadequate, the probable reason is
-that the changes you have made to the FrameSet have caused it to
-depart from the data model which the encoding assumes. AST knows
-about the data model used by each encoding and will attempt to
-simplify the FrameSet you provide so as to fit into that model, thus
-relieving you of the need to understand the details and limitations of
-each encoding yourself. When this attempt fails, however, you must
-consider what alternative encoding to use.
-
-Ideally, you would probably want to try a sequence of alternative
-encodings, using an approach such as the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
-/* 1. */
-astSet( fitschan, "Card=1, Encoding=FITS-IRAF" );
-if ( !astWrite( fitschan, wcsinfo ) ) {
-
-/* 2. */
- astSetC( fitschan, "Encoding", encode );
- if ( !astWrite( fitschan, wcsinfo ) ) {
-
-/* 3. */
- astSet( fitschan, "Encoding=NATIVE" );
- (void) astWrite( fitschan, wcsinfo );
- }
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-That is:
-
-\begin{enumerate}
-\item Start by trying the FITS-WCS encoding, on the grounds that FITS
-should provide a universal interchange standard in which all WCS
-information should be expressed if possible.
-
-\item If that fails, then try the original encoding used for the input
-WCS information, on the grounds that you are at least not making the
-information any harder for others to read than it originally was.
-
-\item If that also fails, then you are probably trying to store fairly
-complex information for which you need the native encoding. Only other
-AST programs will then be able to read this information, but these are
-probably the only programs that will be able to do anything sensible
-with it anyway.
-\end{enumerate}
-
-An alternative approach might be to encode the WCS information in several
-ways, since this gives the maximum chance that other software will be
-able to read it. This approach is only possible if there is no
-significant conflict between the FITS keywords used by the different
-encodings\footnote{In practice, this means you should avoid mixing
-FITS-IRAF, FITS-WCS, FITS-AIPS, FITS-AIPS++ and FITS-PC encodings since they share
-many keywords.}. Adopting this approach would simply require multiple
-calls to astWrite, rewinding the FitsChan and changing its Encoding value
-before each one.
-
-Unfortunately, however, there is a drawback to duplicating WCS
-information in the FITS header in this way, because any program which
-modifies one version of this information and simply copies the
-remainder of the header will risk producing two inconsistent sets of
-information. This could obviously be confusing to subsequent
-software. Whether you consider this a worthwhile risk probably depends
-on the use to which you expect your data to be put.
-
-\cleardoublepage
-\section{\label{ss:xmlchan}Storing AST Objects as XML (XmlChan)}
-
-\begin{latexonly}
-XML\footnote{http://www.w3.org/XML/}
-\end{latexonly}
-\begin{htmlonly}
-\htmladdnormallink{XML}{http://www.w3.org/XML/}
-\end{htmlonly}
-is fast becoming the standard format for passing structured data around
-the internet, and much general purpose software has been written for
-tasks such as the parsing, editing, display and transformation of XML
-data. The \htmlref{XmlChan}{XmlChan} class (a specialised form of \htmlref{Channel}{Channel}) provides
-facilities for storing AST objects externally in the form of XML documents,
-thus allowing such software to be used.
-
-The primary XML format used by the XmlChan class is a fairly close
-transliteration of the AST native format produced by the basic Channel
-class. Currently, there is no DTD or schema defining the structure of data
-produced in this format by an XmlChan. The following is a native AST
-representation of a simple 1-D \htmlref{Frame}{Frame} (including comments and with the \htmlref{Full}{Full}
-attribute set to zero so that some default attribute values are included
-as extra comments):
-
-\begin{quote}
-\small
-\begin{verbatim}
- Begin Frame # Coordinate system description
-# Title = "1-d coordinate system" # Title of coordinate system
- Naxes = 1 # Number of coordinate axes
- Domain = "SCREEN" # Coordinate system domain
-# Lbl1 = "Axis 1" # Label for axis 1
-# Uni1 = "cm" # Units for axis 1
- Ax1 = # Axis number 1
- Begin Axis # Coordinate axis
- Unit = "cm" # Axis units
- End Axis
- End Frame
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The corresponding XmlChan output would look like:
-
-\begin{quote}
-\small
-\begin{verbatim}
- <Frame xmlns="http://www.starlink.ac.uk/ast/xml/"
- desc="Coordinate system description">
- <_attribute name="Title" quoted="true" value="1-d coordinate system"
- desc="Title of coordinate system" default="true"/>
- <_attribute name="Naxes" value="1" desc="Number of coordinate axes"/>
- <_attribute name="Domain" quoted="true" value="SCREEN"
- desc="Coordinate system domain"/>
- <_attribute name="Lbl1" quoted="true" value="Axis 1"
- desc="Label for axis 1" default="true"/>
- <_attribute name="Uni1" quoted="true" value="cm"
- desc="Units for axis 1" default="true"/>
- <Axis label="Ax1" desc="Coordinate axis">
- <!--Axis number 1-->
- <_attribute name="Unit" quoted="true" value="cm" desc="Axis units"/>
- </Axis>
- </Frame>
-\end{verbatim}
-\normalsize
-\end{quote}
-
-
-Notes:
-
-\begin{enumerate}
-\item The AST class name is used as the name for an XML element which contain
-a description of an AST object.
-
-\item AST attributes are described by XML elements with the name
-``\_attribute''. Unfortunately, the word ``attribute'' is also used by XML
-to refer to a ``name=value'' pair within an element start tag. So for
-instance, the ``\htmlref{Title}{Title}'' attribute of the AST Frame object is described
-within an XML element with name ``\_attribute'' in which the XML attribute
-``name'' has the value ``Title'', and the XML attribute ``value'' has the
-value ``1-d coordinate system''. The moral is always to be clear clear
-about the context (AST or XML) in which the word \emph{attribute} is being
-used!
-
-\item The XML includes comments both as XML attributes with the name ``desc'',
-and as separate comment tags.
-
-\item Elements which describe default values are identified by the fact
-that they have an XML attribute called ``default'' set to the value
-``true''. These elements are ignored when being read back into an XmlChan.
-
-\item The outer-most XML element of an AST object will set the default
-namespace to \verb+http://www.starlink.ac.uk/ast/xml/+ which will be
-inherited by all nested elements.
-
-\end{enumerate}
-
-
-The XmlChan class changes the default value for the \htmlref{Comment}{Comment} and Full
-attributes (inherited from the base Channel class) to zero and -1,
-resulting in terse output by default. With the default values for these
-attributes, the above XML is reduced to the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
- <Frame xmlns="http://www.starlink.ac.uk/ast/xml/">
- <_attribute name="Naxes" value="1"/>
- <_attribute name="Domain" quoted="true" value="SCREEN"/>
- <Axis label="Ax1">
- <_attribute name="Unit" quoted="true" value="cm"/>
- </Axis>
- </Frame>
-\end{verbatim}
-\normalsize
-\end{quote}
-
-
-The XmlChan class uses the \htmlref{Skip}{Skip} attributes very similarly to the Channel
-class. If Skip is zero (the default) then an error will be reported if the text
-supplied by the source function does not begin with an AST \htmlref{Object}{Object}. If
-Skip is non-zero, then initial text is skipped over without error until
-the start of an AST object is found. this allows an AST object to be
-located within a larger XML document.
-
-\subsection{Reading IVOA Space-Time-Coordinates XML (STC-X) Descriptions}
-The \htmlref{XmlChan}{XmlChan} class also provides support for reading (but not writing) XML
-documents which use a restricted subset of an early draft (V1.20) of the
-IVOA Space-Time-Coordinates XML (STC-X) system. The version of STC-X
-finally adopted by the IVOA differs in several significant respects from
-V1.20, and so the STC-X support currently provided by AST is mainly of
-historical interest. Note, AST also supports the alternative ``STC-S''
-linear string description of the STC model (see \secref{ss:stcschans}).
-
-STC-X V1.20 is documented at \htmladdnormallink{
-http://www.ivoa.net/Documents/WD/STC/STC-20050225.html}{
-http://www.ivoa.net/Documents/WD/STC/STC-20050225.html}, and the current
-version is documented at \htmladdnormallink{
-http://www.ivoa.net/Documents/latest/STC-X.html}{
-http://www.ivoa.net/Documents/latest/STC-X.html}.
-
-When an STC-X document is read using an XmlChan, the read operation
-produces an AST \htmlref{Object}{Object} of the \htmlref{Stc}{Stc} class, which is itself a subclass of
-\htmlref{Region}{Region}. Specifically, each such Object will be an instance of
-\htmlref{StcSearchLocation}{StcSearchLocation}, \htmlref{StcResourceProfile}{StcResourceProfile}, \htmlref{StcCatalogEntryLocation}{StcCatalogEntryLocation} or
-\htmlref{StcObsDataLocation}{StcObsDataLocation}. See the description of the XmlChan class and the
-\htmlref{XmlFormat}{XmlFormat} attribute for further details.
-
-\cleardoublepage
-\section{\label{ss:stcschans}Reading and writing STC-S descriptions (StcsChans)}
-
-The \htmlref{StcsChan}{StcsChan} class provides facilities for reading and writing
-IVOA ``STC-S'' descriptions. STC-S (see \htmladdnormallink{
-http://www.ivoa.net/Documents/latest/STC-S.html}{
-http://www.ivoa.net/Documents/latest/STC-S.html}) is a linear string
-syntax that allows simple specification of the STC metadata describing a
-region in an astronomical coordinate system. AST supports a
-subset of the STC-S specification, allowing an STC-S description of a
-region within an AST-supported astronomical coordinate system to be converted
-into an equivalent AST \htmlref{Region}{Region} object, and vice-versa. For further
-details, see the full description of the StcsChan class in
-\appref{ss:classdescriptions}.
-
-
-\cleardoublepage
-\section{\label{ss:intramaps}Creating Your Own Private Mappings (IntraMaps)}
-
-\subsection{The Need for Extensibility}
-
-However many \htmlref{Mapping}{Mapping} classes are provided by AST, sooner or later you
-will want to transform coordinates in some way that has not been
-foreseen. You might want to plot a graph in some novel curvilinear
-coordinate system (perhaps you already have a WCS system in your
-software and just want to use AST for its graphical capabilities).
-Alternatively, you might need to calibrate a complex dataset (like an
-objective prism plate) where each position must be converted to world
-coordinates with reference to calibration data under the control of an
-elaborate algorithm.
-
-In such cases, it is clear that the basic pre-formed components
-provided by AST for building Mappings are just not enough. What you
-need is access to a programming language. However, if you write your
-own software to transform coordinate values, then it must be made
-available in the form of an AST class (from which you can create
-Objects) before it can be used in conjunction with other AST
-facilities.
-
-At this point you might consider writing your own AST class, but this
-is not recommended. Not only would the internal conventions used by
-AST take some time to master, but you might also find yourself having
-to change your software whenever a new version of AST was
-released. Fortunately, there is a much easier route provided by the
-\htmlref{IntraMap}{IntraMap} class.
-
-\subsection{The IntraMap Model}
-
-To allow you to write your own Mappings, AST provides a special kind
-of \htmlref{Mapping}{Mapping} called an \htmlref{IntraMap}{IntraMap}. An IntraMap is a sort of ``wrapper''
-for a coordinate transformation function written in C. You write this
-function yourself and then register it with AST. This, in effect,
-creates a new class from which you can create Mappings
-({\em{i.e.}}\ IntraMaps) which will transform coordinates in whatever
-way your transformation function specifies.
-
-Because IntraMaps are Mappings, they may be used in the same way as
-any other Mapping. For instance, they may be combined in series or
-parallel with other Mappings using a \htmlref{CmpMap}{CmpMap} (\secref{ss:cmpmaps}),
-they may be inverted (\secref{ss:invertingmappings}), you may enquire
-about their attributes (\secref{ss:gettingattributes}), they may be
-inserted into FrameSets (\secref{ss:framesets}), {\em{etc.}} They do,
-however, have some important limitations of which you should be aware
-before we go on to consider how to create them.
-
-\subsection{\label{ss:intramaplimitations}Limitations of IntraMaps}
-
-By now, you might be wondering why any other kind of \htmlref{Mapping}{Mapping} is
-required at all. After all, why not simply write your own coordinate
-transformation functions in C, wrap them up in IntraMaps and do away
-with all the other Mapping classes in AST?
-
-The reason is not too hard to find. Any transformation function you
-write is created solely by you, so it is a private extension which
-does not form a permanent part of AST. If you use it to calibrate some
-data and then pass that data to someone else, who has only the
-standard version of AST, then they will not be able to interpret it.
-
-Thus, while an \htmlref{IntraMap}{IntraMap} is fine for use by you and your collaborators
-(who we assume have access to the same transformation functions), it
-does not address the need for universal data exchange like other AST
-Mappings do. This is where the ``Intra'' in the class name
-``IntraMap'' comes from, implying private or internal usage.
-
-For this reason, it is unwise to store IntraMaps in datasets, unless
-they will be used solely for communication between collaborating items
-of software which share conventions about their use. A private
-database describing coordinate systems on a graphics device might be
-an example where IntraMaps would be suitable, because the data would
-probably never be accessed by anyone else's software. Restricting
-IntraMap usage to within a single program ({\em{i.e.}} never writing
-it out) is, of course, completely safe.
-
-If, by accident, an IntraMap should happen to escape as part of a
-dataset, then the unsuspecting recipient is likely to receive an error
-message when they attempt to read the data. However, AST will
-associate details of the IntraMap's transformation function and its
-author (if provided) with the data, so that the recipient can make an
-intelligent enquiry to obtain the necessary software if this proves
-essential.
-
-\subsection{\label{ss:transformationfunctions}Writing a Transformation Function}
-
-The first stage in creating an \htmlref{IntraMap}{IntraMap} is to write the coordinate
-transformation function. This should have a calling interface like the
-\htmlref{astTranP}{astTranP} function provided by AST ({\em{q.v.}}). Here is a simple
-example of a suitable transformation function which transforms
-coordinates by squaring them:
-\xlabel{SqrTran}
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-#include <math.h>
-
-void SqrTran( AstMapping *this, int npoint, int ncoord_in,
- const double *ptr_in[], int forward, int ncoord_out,
- double *ptr_out[] ) {
- int point, coord;
- double x;
-
-/* Forward transformation. */
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- for ( coord = 0; coord < ncoord_in; coord++ ) {
- x = ptr_in[ coord ][ point ];
- ptr_out[ coord ][ point ] = ( x == AST__BAD ) ? AST__BAD : x * x;
- }
- }
-
-/* Inverse transformation. */
- } else {
- for ( point = 0; point < npoint; point++ ) {
- for ( coord = 0; coord < ncoord_in; coord++ ) {
- x = ptr_in[ coord ][ point ];
- ptr_out[ coord ][ point ] =
- ( x < 0.0 || x == AST__BAD ) ? AST__BAD : sqrt( x );
- }
- }
- }
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-As you can see, the function comes in two halves which implement the
-forward and inverse coordinate transformations. The number of points
-to be transformed (``npoint'') and the numbers of input and output
-coordinates per point (``ncoord\_in'' and ``ncoord\_out''---in this
-case both are assumed equal) are passed to the function. A pair of
-loops then accesses all the coordinate values. Note that it is
-legitimate to omit one or other of the forward/inverse transformations
-and simply not to implement it, if it will not be required. It is also
-permissible to require that the numbers of input and output
-coordinates be fixed ({\em{e.g.}}\ at 2), or to write the function so
-that it can handle arbitrary dimensionality, as here.
-
-Before using an incoming coordinate, the function must first check
-that it is not set to the value AST\_\_BAD, which indicates missing
-data (\secref{ss:badcoordinates}). If it is, the same value is also
-assigned to any affected output coordinates. The value AST\_\_BAD is
-also generated if any coordinates cannot be transformed. In this
-example, this can happen with the inverse transformation if negative
-values are encountered, so that the square root cannot be taken.
-
-There are very few restrictions on what a coordinate transformation
-function may do. For example, it may freely perform I/O to access any
-external data needed, it may invoke other AST facilities (but beware
-of unwanted recursion), {\em{etc.}} Typically, you may also want to
-pass information to it {\em{via}}\ global variables. Remember,
-however, that whatever facilities the transformation function requires
-must be available in every program which uses it.
-
-Generally, it is not a good idea to retain context information within
-a transformation function. That is, it should transform each set of
-coordinates as a single point and retain no memory of the points it
-has transformed before. This is in order to conform with the AST model
-of a \htmlref{Mapping}{Mapping}.
-
-If an error occurs within a transformation function, it should use the
-\htmlref{astSetStatus}{astSetStatus} function (\secref{ss:errordetection}) to set the AST
-status to an error value before returning. This will alert AST to the
-error, causing it to abort the current operation. The error value
-AST\_\_ITFER is available for this purpose, but other values may also
-be used ({\em{e.g.}}\ if you wish to distinguish different types of
-error).
-
-\subsection{\label{ss:registeringintramaps}Registering a Transformation Function}
-
-Having written your coordinate transformation function, the next step
-is to register it with AST. Registration is performed using
-\htmlref{astIntraReg}{astIntraReg}, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-void SqrTran( AstMapping *, int, int, const double *[], int, int, double *[] );
-
-const char *author, *contact, *purpose;
-
-...
-
-purpose = "Square each coordinate value";
-author = "R.F. Warren-Smith & D.S. Berry";
-contact = "http://www.starlink.rl.ac.uk/cgi-bin/htxserver/sun211.htx/?xref_SqrTran";
-
-astIntraReg( "SqrTran", 2, 2, SqrTran, 0, purpose, author, contact );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note that you should also provide a function prototype to describe the
-transformation function (the implementation of the function itself
-would suffice, of course).
-
-The first argument to astIntraReg is a name by which the
-transformation function will be known. This will be used when we come
-to create an \htmlref{IntraMap}{IntraMap} and is case sensitive. We recommend that you use
-the actual function name here and make this sufficiently unusual that
-it is unlikely to clash with any other functions in most people's
-software.
-
-The next two arguments specify the number of input and output
-coordinates which the transformation function will handle. These
-correspond with the \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes of the IntraMap we will
-create. Here, we have set them both to 2, which means that we will
-only be able to create IntraMaps with 2 input and 2 output coordinates
-(despite the fact that the transformation function can actually handle
-other dimensionalities). We will see later
-(\secref{ss:variableintramapcoordinates}) how to remove this
-restriction.
-
-The fourth argument should contain a set of flags which describe the
-transformation function in a little more detail. We will return to
-this shortly (\secref{ss:restrictedintramaps} \&
-\secref{ss:simplifyingintramaps}). For now, we supply a value of zero.
-
-The remaining arguments are character strings which document the
-transformation function, mainly for the benefit of anyone who is
-unfortunate enough to encounter a reference to it in their data which
-they cannot interpret. As explained above
-(\secref{ss:intramaplimitations}), you should try and avoid this, but
-accidents will happen, so you should always provide strings containing
-the following:
-
-\begin{enumerate}
-\item A short description of what the transformation function is for.
-\item The name of the author.
-\item Contact details, such as an e-mail or WWW address.
-\end{enumerate}
-
-The idea is that anyone finding an IntraMap in their data, but lacking
-the necessary transformation function, should be able to contact the
-author and make a sensible enquiry in order to obtain it. If you
-expect many enquiries, you may like to set up a World Wide Web page
-and use that instead (in the example above, we use the WWW address of
-the relevant part of this document).
-
-\subsection{Creating an IntraMap}
-
-Once a transformation function has been registered, creating an
-\htmlref{IntraMap}{IntraMap} from it is simple:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstIntraMap *intramap;
-
-...
-
-intramap = astIntraMap( "SqrTran", 2, 2, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-We simply use the \htmlref{astIntraMap}{astIntraMap} constructor function and pass it the
-name of the transformation function to use. This name is the same
-(case sensitive) one that we associated with the function when we
-registered it using \htmlref{astIntraReg}{astIntraReg} (\secref{ss:registeringintramaps}).
-
-You can, of course, register any number of transformation functions
-and select which one to use whenever you create an IntraMap. You can
-also create any number of independent IntraMaps using each
-transformation function. In this sense, each transformation function
-you register effectively creates a new ``sub-class'' of IntraMap, from
-which you can create Objects just like any other class. However, an
-error will occur if you attempt to use a transformation function that
-has not yet been registered.
-
-The second and third arguments to astIntraMap are the numbers of input
-and output coordinates. These define the \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes for
-the IntraMap that is created and they must match the corresponding
-numbers given when the transformation function was registered.
-
-The final argument is the usual attribute initialisation string. You
-may set attribute values for an IntraMap in exactly the same way as
-for any other \htmlref{Mapping}{Mapping} (\secref{ss:settingattributes}, and also see
-\secref{ss:intraflag}).
-
-\subsection{\label{ss:restrictedintramaps}Restricted Implementations of Transformation Functions}
-
-You may not always want to use both the forward and inverse
-transformations when you create an \htmlref{IntraMap}{IntraMap}, so it is possible to omit
-either from the underlying coordinate transformation
-function. Consider the following, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-void Poly3Tran( AstMapping *this, int npoint, int ncoord_in,
- const double *ptr_in[], int forward, int ncoord_out,
- double *ptr_out[] ) {
- double x;
- int point;
-
-/* Forward transformation. */
- for ( point = 0; point < npoint; point++ ) {
- x = ptr_in[ 0 ][ point ];
- ptr_out[ 0 ][ point ] = ( x == AST__BAD ) ? AST__BAD :
- 6.18 + x * ( 0.12 + x * ( -0.003 + x * 0.0000101 ) );
- }
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This implements a 1-dimensional cubic polynomial transformation. Since
-this is somewhat awkward to invert, however, we have only implemented
-the forward transformation. When registering the function, this is
-indicated via the ``flags'' argument to \htmlref{astIntraReg}{astIntraReg}, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-void Poly3Tran( AstMapping *, int, int, const double *[], int, int, double *[] );
-
-...
-
-astIntraReg( "Poly3Tran", 1, 1, Poly3Tran, AST__NOINV,
- purpose, author, contact );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, the fifth argument has been set to the flag value AST\_\_NOINV
-to indicate the lack of an inverse. If the forward transformation were
-absent, we would use AST\_\_NOFOR instead. Flag values for this
-argument may be combined using a bitwise OR if necessary.
-
-\subsection{\label{ss:variableintramapcoordinates}Variable Numbers of Coordinates}
-
-In our earlier examples, we have used a fixed number of input and
-output coordinates when registering a coordinate transformation
-function. It is not necessary to impose this restriction, however, if
-the transformation function can cope with a variable number of
-coordinates (as with the example in
-\secref{ss:transformationfunctions}). We indicate the acceptability of
-a variable number when registering the transformation function by
-supplying the value AST\_\_ANY for the number of input and/or output
-coordinates, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astIntraReg( "SqrTran", AST__ANY, AST__ANY, SqrTran, 0,
- purpose, author, contact );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The result is that an \htmlref{IntraMap}{IntraMap} may now be created with any number of
-input and output coordinates. For example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstIntraMap *intramap1, *intramap2;
-
-...
-
-intramap1 = astIntraMap( "SqrTran", 1, 1, "" );
-intramap2 = astIntraMap( "SqrTran", 3, 3, "Invert=1" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-It is possible to fix either the number of input or output coordinates
-(by supplying an explicit number to \htmlref{astIntraReg}{astIntraReg}), but more subtle
-restrictions on the number of coordinates, such as requiring that \htmlref{Nin}{Nin}
-and \htmlref{Nout}{Nout} be equal, are not supported. This means that:
-
-\begin{quote}
-\small
-\begin{verbatim}
-intramap = astIntraMap( "SqrTran", 1, 2, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-will be accepted without error, although the transformation function
-cannot actually handle such a combination sensibly. If this is
-important, it would be worth adding a check within the transformation
-function itself, so that the error would be detected when it came to
-be used.
-
-\subsection{\label{ss:intraflag}Adapting a Transformation Function to Individual IntraMaps}
-
-In the examples given so far, our coordinate transformation functions
-have not made use of the ``this'' pointer passed to them (which
-identifies the \htmlref{IntraMap}{IntraMap} whose transformation we are implementing). In
-practice, this will often be the case. However, the presence of the
-``this'' pointer allows the transformation function to invoke any
-other AST function on the IntraMap, and this permits enquiries about
-its attributes. The transformation function's behaviour can therefore
-be modified according to any attribute values which are set. This
-turns out to be a useful thing to do, so each IntraMap has a special
-\htmlref{IntraFlag}{IntraFlag} attribute reserved for exactly this purpose.
-
-Consider, for instance, the case where the transformation function has
-access to several alternative sets of internally-stored data which it
-may apply to perform its transformation. Rather than implement many
-different versions of the transformation function, you may switch
-between them by setting a value for the IntraFlag attribute when you
-create an instance of an IntraMap, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-intramap1 = astIntraMap( "MyTran", 2, 2, "IntraFlag=A" );
-intramap2 = astIntraMap( "MyTran", 2, 2, "IntraFlag=B" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The transformation function may then enquire the value of the IntraFlag
-attribute ({\em{e.g.}}\ using astGetC and passing it the ``this''
-pointer) and use whichever dataset is required for that particular
-IntraMap.
-
-This approach is particularly useful when the number of possible
-transformations is unbounded or not known in advance, in which case
-the IntraFlag attribute may be used to hold numerical values encoded
-as part of a character string (effectively using them as data for the
-IntraMap). It is also superior to the use of a global switch for
-communication ({\em{e.g.}}\ setting an index to select the ``current''
-data before using the IntraMap), because it continues to work when
-several IntraMaps are embedded within a more complex compound \htmlref{Mapping}{Mapping},
-when you may have no control over the order in which they are used.
-
-\subsection{\xlabel{MaxTran}\label{ss:simplifyingintramaps}Simplifying IntraMaps}
-
-A notable disadvantage of IntraMaps is that they are ``black boxes''
-as far as AST is concerned. This means that they have limited ability
-to participate in the simplification of compound Mappings performed,
-{\em{e.g.}}, by \htmlref{astSimplify}{astSimplify} (\secref{ss:simplifyingcmpmaps}), because
-AST cannot know how they interact with other Mappings. In reality, of
-course, they will often implement such specialised coordinate
-transformations that the simplification possibilities will be rather
-limited anyway.
-
-One important simplification, however, is the ability of a \htmlref{Mapping}{Mapping} to
-cancel with its own inverse to yield a unit Mapping (a \htmlref{UnitMap}{UnitMap}). This
-is important because Mappings are frequently used to relate a dataset
-to some external standard (a celestial coordinate system, for
-example). When inter-relating two similar datasets calibrated using
-the same standard, part of the Mapping often cancels, because it is
-applied first in one direction and then the other, effectively
-eliminating the reference to the standard. This is often a useful
-simplification and can lead to greater efficiency.
-
-Many transformations have this property of cancelling with their own
-inverse, but not necessarily all. Consider the following
-transformation function, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-void MaxTran( AstMapping *this, int npoint, int ncoord_in,
- const double *ptr_in[], int forward, int ncoord_out,
- double *ptr_out[] ) {
- double hi, x;
- int coord, point;
-
-/* Forward transformation. */
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- hi = AST__BAD;
- for ( coord = 0; coord < ncoord_in; coord++ ) {
- x = ptr_in[ coord ][ point ];
- if ( x != AST__BAD ) {
- if ( x > hi || hi == AST__BAD ) hi = x;
- }
- }
- ptr_out[ 0 ][ point ] = hi;
- }
-
-/* Inverse transformation. */
- } else {
- for ( coord = 0; coord < ncoord_out; coord++ ) {
- for ( point = 0; point < npoint; point++ ) {
- ptr_out[ coord ][ point ] = ptr_in[ 0 ][ point ];
- }
- }
- }
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This function takes any number of input coordinates and returns a
-single output coordinate which is the maximum value of the input
-coordinates. Its inverse (actually a ``pseudo-inverse'') sets all the
-input coordinates to the value of the output
-coordinate.\footnote{Remember that ``ptr\_in'' identifies the original
-``output'' coordinates when applying the inverse transformation and
-``ptr\_out'' identifies the original ``input'' coordinates.}
-
-If this function is applied in the forward direction and then in the
-inverse direction, it does {\bf{not}} in general restore the original
-coordinate values. However, if applied in the inverse direction and
-then the forward direction, it does. Hence, replacing the sequence of
-operations with an equivalent UnitMap is possible in the latter case,
-but not in the former.
-
-To distinguish these possibilities, two flag values are provided for
-use with \htmlref{astIntraReg}{astIntraReg} to indicate what simplification (if any) is
-possible. For example, to register the above transformation function,
-we might use:
-
-\begin{quote}
-\small
-\begin{verbatim}
-void MaxTran( AstMapping *, int, int, const double *[], int, int, double *[] );
-
-...
-
-astIntraReg( "MaxTran", AST__ANY, 1, MaxTran, AST__SIMPIF,
- purpose, author, contact );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, the flag value AST\_\_SIMPIF supplied for the fifth argument
-indicates that simplification is possible if the transformation is
-applied in the inverse direction followed by the forward direction. To
-indicate the complementary case, the flag AST\_\_SIMPFI would be used
-instead. If both simplifications are possible (as with the SqrTran
-function in \secref{ss:transformationfunctions}), then we would use
-the bitwise OR of both values.
-
-In practice, some judgement is usually necessary when deciding whether
-to allow simplification. For example, seen in one light our SqrTran
-function (\secref{ss:transformationfunctions}) does not cancel with
-its own inverse, because squaring a coordinate value and then taking
-its square root can change the original value, if this was
-negative. Therefore, replacing this combination with a UnitMap will
-change the behaviour of a compound Mapping and should not be
-allowed. Seen in another light, however, where the coordinates being
-processed are intrinsically all positive, it is a permissible and
-probably useful simplification.
-
-If such distinctions are ever important in practice, it is simple to
-register the same transformation function twice with different flag
-values (use a separate name for each) and then use whichever is
-appropriate when creating an \htmlref{IntraMap}{IntraMap}.
-
-\subsection{\label{ss:readingandwritingintramaps}Writing and Reading IntraMaps}
-
-It is most important to realise that when you write an \htmlref{IntraMap}{IntraMap} to a
-\htmlref{Channel}{Channel} (\secref{ss:writingtoachannel}), the transformation function
-which it uses is not stored with it. To do so is impossible, because
-the function has been compiled and loaded into memory ready for
-execution before AST gets to see it. However, AST does store the name
-associated with the transformation function and various details about
-the IntraMap itself.
-
-
-This means that any program attempting to read the IntraMap
-(\secref{ss:readingfromachannel}) cannot make use of it unless it also
-has independent access to the original transformation function. If it
-does not have access to this function, an error will occur at the
-point where the IntraMap is read and the associated error message will
-direct the user to the author of the transformation function for more
-information.
-
-However, if the necessary transformation function is available, and
-has been registered before the read operation takes place, then AST is
-able to re-create the original IntraMap and will do so. Registration
-of the transformation function must, of course, use the same name
-(and, in fact, be identical in most particulars) as was used in the
-original program which wrote the data.
-
-This means that a set of co-operating programs which all have access
-to the same set of transformation functions and register them in
-identical fashion (see \secref{ss:intramaplibrary} for how this can
-best be achieved) can freely exchange data that contain IntraMaps. The
-need to avoid exporting such data to unsuspecting third parties
-(\secref{ss:intramaplimitations}) must, however, be re-iterated.
-
-\subsection{\label{ss:intramaplibrary}Managing Transformation Functions in Libraries}
-
-If you are developing a large suite of data reduction software, you
-may have a need to use IntraMaps at various points within it. Very
-probably this will occur in unrelated modules which are compiled
-separately and then stored in a library. Since the transformation
-functions required must be registered before they can be used, this
-makes it difficult to decide where to perform this registration,
-especially since any particular data reduction program may use an
-arbitrary subset of the modules in your library.
-
-To assist with this problem, AST allows you to perform the same
-registration of a transformation function any number of times, so long
-as it is performed using an identical invocation of \htmlref{astIntraReg}{astIntraReg} on
-each occasion ({\em{i.e.}}\ all of its arguments must be
-identical). This means you do not have to keep track of whether a
-particular function has already been registered but could, in fact,
-register it on each occasion immediately before it is required
-(wherever that may be). In order that all registrations are identical,
-however, it is recommended that you group them all together into a
-single function, perhaps as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-void MyTrans( void ) {
-
- ...
-
- astIntraReg( "MaxTran", AST__ANY, 1, MaxTran, AST__SIMPIF,
- purpose, author, contact );
-
- ...
-
- astIntraReg( "Poly3Tran", 1, 1, Poly3Tran, AST__NOINV,
- purpose, author, contact );
-
- ...
-
- astIntraReg( "SqrTran", 2, 2, SqrTran, 0,
- purpose, author, contact );
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-You can then simply invoke this function wherever necessary. It is, in
-fact, particularly important to register all relevant transformation
-functions in this way before you attempt to read an \htmlref{Object}{Object} that might
-be (or contain) an \htmlref{IntraMap}{IntraMap}
-(\secref{ss:readingandwritingintramaps}). This is because you may not
-know in advance which of these transformation functions the IntraMap
-will use, so they must all be available in order to avoid an error.
-
-\cleardoublepage
-\section{\label{ss:plots}Producing Graphical Output (Plots)}
-
-Graphical output from AST is performed though an \htmlref{Object}{Object} called a \htmlref{Plot}{Plot},
-which is a specialised form of \htmlref{FrameSet}{FrameSet}. A Plot does not represent the
-graphical content itself, but is a route through which plotting
-operations, such as drawing lines and curves, are conveyed on to a
-plotting surface to appear as visible graphics.
-
-\subsection{The Plot Model}
-
-When a \htmlref{Plot}{Plot} is created, it is initialised by providing a \htmlref{FrameSet}{FrameSet} whose
-base \htmlref{Frame}{Frame} (as specified by its \htmlref{Base}{Base} attribute) is mapped linearly or
-logarithmically (as specified by the LogPlot attribues) on to a
-{\em{plotting area.}} This is a rectangular region in the graphical
-coordinate space of the underlying graphics system and becomes the new
-base Frame of the Plot. In effect, the Plot becomes attached to the
-plotting surface, in rather the same way that a basic FrameSet might be
-attached to (say) an image.
-
-The current Frame of the Plot (derived from the current Frame of the
-FrameSet supplied) is used to represent a {\em{physical coordinate
-system.}} This is the system in which plotting operations are
-performed by your program. Every plotting operation is then
-transformed through the \htmlref{Mapping}{Mapping} which inter-relates the Plot's current
-and base Frames in order to appear on the plotting surface.
-
-An example may help here. Suppose we start with a FrameSet whose base
-Frame describes the pixel coordinates of an image and whose current
-Frame describes a celestial (equatorial) coordinate system. Let us
-assume that these two Frames are inter-related by a Mapping within the
-FrameSet which represents a particular sky projection.
-
-When a Plot is created from this FrameSet, we specify how the pixel
-coordinates (the base Frame) maps on to the plotting surface. This
-simply corresponds to telling the Plot where we have previously
-plotted the image data. If we now use the Plot to plot a line with
-latitude zero in our physical coordinate system, as given by the
-current Frame, this line would appear as a curve (the equator) on the
-plotting surface, correctly registered with the image.
-
-There are a number of plotting functions provided, which all work in a
-similar way. Plotting operations are transformed through the Mapping
-which the Plot represents before they appear on the plotting
-surface.\footnote{Like any FrameSet, a Plot can be used as a
-Mapping. In this case it is the inverse transformation which is used
-when plotting ({\em{i.e.}}\ that which transforms between the current
-and base Frames).} It is possible to draw symbols, lines, axes,
-entire grids and more in this way.
-
-%\subsection{TBW---Creating a Plot}
-
-\subsection{Plotting Symbols}
-
-The simplest form of plotting is to draw symbols (termed
-{\em{markers}}) at a set of points. This is performed by \htmlref{astMark}{astMark},
-which is supplied with a set of physical coordinates at which to place
-the markers:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-#define NCOORD 2
-#define NMARK 10
-double in[ NCOORD ][ NMARK ];
-int type;
-
-...
-
-astMark( plot, NMARK, NCOORD, NMARK, in, type );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, NMARK specifies how many markers to plot and NCOORD specifies
-how many coordinates are being supplied for each
-point.\footnote{Remember, the physical coordinate space need not
-necessarily be 2-dimensional, even if the plotting surface is.} The
-array ``in'' supplies the coordinates and the integer ``type''
-specifies which type of marker to plot.
-
-\subsection{\label{ss:plottinggeodesics}Plotting Geodesic Curves}
-
-There is no \htmlref{Plot}{Plot} routine to draw a straight line, because any straight
-line in physical coordinates can potentially turn into a curve in
-graphical coordinates. We therefore start by considering how to draw
-geodesic curves. These are curves which trace the path of shortest
-distance between two points in physical coordinates
- and are the basic drawing element in a Plot.
-
-In many instances, the geodesic will, in fact, be a straight line, but
-this depends on the Plot's current \htmlref{Frame}{Frame}. If this represents a
-celestial coordinate system, for instance, it will be a great circle
-(corresponding with the behaviour of the \htmlref{astDistance}{astDistance} function which
-defines the metric of the physical coordinate space). The geodesic
-will, of course, be transformed into graphics coordinates before being
-plotted. A geodesic curve is plotted using \htmlref{astCurve}{astCurve} as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-double start[ NCOORD ], finish[ NCOORD ];
-
-...
-
-astCurve( plot, start, finish );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, ``start'' and ``finish'' are arrays containing the starting and
-finishing coordinates of the curve. The \htmlref{astOffset}{astOffset} and astDistance
-functions can often be useful for computing these
-(\secref{ss:distanceandoffset}).
-
-If you need to draw a series of curves end-to-end (when drawing a
-contour line, for example), then a more efficient alternative is to
-use \htmlref{astPolyCurve}{astPolyCurve}. This has the same effect as a sequence of
-invocations of astCurve, but allows you to supply a whole set of
-points at one time. astPolyCurve then joins them, in sequence, using
-geodesic curves:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#define NPOINT 100
-double coords[ NCOORD ][ NPOINT ];
-
-...
-
-astPolyCurve( plot, NPOINT, NCOORD, NPOINT, coords );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, NPOINT specifies how many points are to be joined and NCOORD
-specifies how many coordinates are being supplied for each point. The
-array ``coords'' supplies the coordinates of the points in the Plot's
-physical coordinate system.
-
-\subsection{Plotting Curves Parallel to Axes}
-
-As there is no \htmlref{Plot}{Plot} function to draw a ``straight line'', drawing axes
-and grid lines to represent coordinate systems requires a slightly
-different approach. The problem is that for some coordinate systems,
-these grid lines will not be geodesics, so \htmlref{astCurve}{astCurve} and \htmlref{astPolyCurve}{astPolyCurve}
-(\secref{ss:plottinggeodesics}) cannot easily be used (you would have
-to resort to approximating grid lines by many small elements). Lines
-of constant celestial latitude provide an example of this, with the
-exception of the equator which is a geodesic.
-
-The \htmlref{astGridLine}{astGridLine} function allows these curves to be drawn, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int axis;
-double length;
-
-...
-
-astGridLine( plot, axis, start, length );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, ``axis'' specifies which physical coordinate axis we wish to
-draw parallel to. The ``start'' array contains the coordinates of the
-start of the curve and ``length'' specifies the distance to draw along
-the axis in physical coordinate space.
-
-\subsection{\label{ss:plottinggeneralizedcurves}Plotting Generalized Curves}
-We have seen how geodesic curves and grid lines can be drawn. The \htmlref{Plot}{Plot}
-class includes another method,
-\htmlref{astGenCurve}{astGenCurve},
-which allows curves of {\em any} form to be drawn. The caller supplies a
-\htmlref{Mapping}{Mapping} which maps offset along the curve\footnote{normalized so that the
-start of the curve is at offset 0.0 and the end of the curve is at offset
-1.0 - offset need not be linearly related to distance.} into the
-corresponding position in the current \htmlref{Frame}{Frame} of the Plot.
-astGenCurve,
-then takes care of Mapping these positions into graphics coordinates. The
-choice of exactly which positions along the curve are to be used to
-define the curve is also made by
-astGenCurve,
-using an adaptive algorithm which concentrates points around areas where
-the curve is bending sharply or is discontinuous in graphics coordinates.
-
-The \htmlref{IntraMap}{IntraMap} class may be of particular use in this context since it allows
-you to code your own Mappings to do any transformation you choose.
-
-
-\subsection{\label{ss:clipping}Clipping}
-
-Like many graphics systems, a \htmlref{Plot}{Plot} allows you to {\em{clip}} the graphics
-you produce. This means that plotting is restricted to certain regions
-of the plotting surface so that anything drawn outside these regions
-will not appear. All Plots automatically clip at the edges of the
-plotting area specified when the Plot is created. This means that
-graphics are ultimately restricted to the rectangular region of
-plotting space to which you have attached the Plot.
-
-In addition to this, you may also specify lower and upper limits on
-each axis at which clipping should occur. This permits you to further
-restrict the plotting region. Moreover, you may attach these clipping
-limits to {\em{any}} of the Frames in the Plot. This allows you to
-place restrictions on where plotting will take place in either the
-physical coordinate system, the graphical coordinate system, or in any
-other coordinate system which is described by a \htmlref{Frame}{Frame} within the Plot.
-
-For example, you could plot using equatorial coordinates and set up
-clipping limits in galactic coordinates. In general, you could set up
-arbitrary clipping regions by adding a new Frame to a Plot (in which
-clipping will be performed) and inter-relating this to the other
-Frames in a suitable way.
-
-Clipping limits are defined using the \htmlref{astClip}{astClip} function, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#define NAXES 2
-int iframe;
-double lbnd[ NAXES ], ubnd[ NAXES ];
-
-...
-astClip( plot, iframe, lbnd, ubnd);
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, the ``iframe'' value gives the index of the Frame within the
-Plot to which clipping is to be applied, while ``lbnd'' and ``ubnd''
-give the limits on each axis of the selected Frame (NAXES is the
-number of axes in this Frame).
-
-You can remove clipping by giving a value of AST\_\_NOFRAME for ``iframe''.
-
-\subsection{Using a Plot as a Mapping}
-
-All Plots are also Mappings (just like the FrameSets from which they
-are derived), so can be used to transform coordinates.
-
-Like FrameSets, the forward transformation of a \htmlref{Plot}{Plot} will convert
-coordinates between the base and current Frames ({\em{i.e.}}\ between
-graphical and physical coordinates). This would be useful if you were
-(say) reading a cursor position in graphical coordinates and needed to
-convert this into physical coordinates for display.
-
-Conversely, a Plot's inverse transformation converts between its
-current and base Frames ({\em{i.e.}}\ from physical coordinates to
-graphical coordinates). This transformation is applied automatically
-whenever plotting operations are carried out by AST functions. It may
-also be useful to apply it directly, however, if you wish to perform
-additional plotting operations ({\em{e.g.}}\ those provided by the
-native graphics system) at positions specified in physical
-coordinates.
-
-There is, however, one important difference between using a \htmlref{FrameSet}{FrameSet}
-and a Plot to transform coordinates, and this is that clipping may be
-applied by a Plot (if it has been enabled using
-\htmlref{astClip}{astClip}---\secref{ss:clipping}). Any point which lies within the
-clipped region of a Plot will, when transformed, yield coordinates
-with the value AST\_\_BAD. If you wish to avoid this clipping, you
-should extract the relevant \htmlref{Mapping}{Mapping} from the Plot (using
-\htmlref{astGetMapping}{astGetMapping}) and use this, instead of the Plot, to transform the
-coordinates.
-
-\subsection{Using a Plot as a Frame}
-
-Every \htmlref{Plot}{Plot} is also a \htmlref{Frame}{Frame}, so can be used to obtain the values of
-Frame attributes such as a \htmlref{Title}{Title}, axis Labels, axis Units,
-{\em{etc.,}} which are typically used when displaying data and/or
-coordinates. These attributes are, as for any \htmlref{FrameSet}{FrameSet}, derived from
-the current Frame of the Plot (\secref{ss:framesetasframe}). They are
-also used automatically when using the Plot to plot coordinate axes
-and coordinate grids ({\em{e.g.}}\ for labelling
-them---\secref{ss:plottingagrid}).
-
-Because the current Frame of a Plot represents physical coordinates,
-any Frame operation applied to the Plot will effectively be working in
-this coordinate system. For example, the \htmlref{astDistance}{astDistance} and \htmlref{astOffset}{astOffset}
-functions will compute distances and offsets in physical coordinate
-space, while \htmlref{astFormat}{astFormat} and \htmlref{astNorm}{astNorm} will format physical coordinates in
-an appropriate way for display.
-
-\subsection{\label{ss:validphysicalcoordinates}Regions of Valid Physical Coordinates}
-
-When points in physical coordinate space are transformed by a \htmlref{Plot}{Plot}
-into graphics coordinates for plotting, they may not always yield
-valid coordinates, irrespective of any clipping being applied
-(\secref{ss:clipping}). To indicate this, the resulting coordinate
-values will be set to the value AST\_\_BAD
-(\secref{ss:badcoordinates}).
-
-There are a number of reasons why this may occur, but typically it
-will be because physical coordinates only map on to a subset of the
-graphics coordinate space. This situation is commonly encountered with
-all-sky projections where, typically, the celestial sphere appears,
-when plotted, as a distorted shape ({\em{e.g.}}\ an ellipse) which
-does not entirely fill the graphics space. In some cases, there may
-even be multiple regions of valid and invalid physical coordinates.
-
-When plotting is performed {\em{via}} a Plot, graphical output will
-only appear in the regions of valid physical coordinates. Nothing will
-appear where invalid coordinates occur. Such output is effectively
-clipped. If you wish to plot in these areas, you must change
-coordinate system and use, say, graphical coordinates to address the
-plotting surface directly.
-
-\subsection{Plotting Borders}
-
-The \htmlref{astBorder}{astBorder} function is provided to draw a (line) border around your
-graphical output. With most graphics systems, this would simply be a
-rectangular box around the plotting area. With a \htmlref{Plot}{Plot}, however, this
-boundary follows the edge of each region containing valid, unclipped
-physical coordinates (\secref{ss:validphysicalcoordinates}).
-
-This means, for example, that if you were plotting an all-sky
-projection, this boundary would outline the perimeter of the celestial
-sphere when projected on to your plotting surface. Of course, if there
-is no clipping and all physical coordinates are valid, then you will
-get the traditional rectangular box. astBorder requires only
-a pointer to the Plot:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int holes;
-
-...
-
-holes = astBorder( plot );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-It returns a boolean (integer) value to indicate if any invalid or
-clipped physical coordinates were found within the plotting area. If
-they were, it will draw around the valid unclipped regions and return
-a value of one. Otherwise, it will draw a simple rectangular border
-and return zero.
-
-\subsection{Plotting Text}
-
-Using a \htmlref{Plot}{Plot} to draw text involves supplying a string of text to be
-displayed and a position in physical coordinates where the text is to
-appear. The position is transformed into graphical coordinates to
-determine where the text should appear on the plotting surface. You
-must also provide a 2-element ``up'' vector which gives the upward
-direction of the text in graphical coordinates. This allows text to be
-drawn at any angle.
-
-Plotting is performed by \htmlref{astText}{astText}, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-char text[ 21 ];
-double pos[ NCOORD ];
-float up[ 2 ] = { 0.0f, 1.0f };
-
-...
-
-astText( plot, text, pos, up, "TL" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, ``text'' contains the string to be drawn, ``pos'' is an array of
-physical coordinates and ``up'' specifies the upward vector. In this
-case, the text will be drawn horizontally. The final argument
-specifies the text justification, here indicating that the top left
-corner of the text should appear at the position given.
-
-Further control over the appearance of the text is possible by setting
-values for various Plot attributes, for example Colour, Font and Size.
-Sub-strings within the displayed text can be given different appearances,
-or turned into super-scripts or sub-scripts, by the inclusion of escape
-sequences (see section~\secref{ss:escapes}) within the supplied text string.
-
-\subsection{\label{ss:plottingagrid}Plotting a Grid}
-
-The most comprehensive plotting function available is \htmlref{astGrid}{astGrid}, which
-can be used to draw labelled coordinate axes and, optionally, to
-overlay coordinate grids on the plotting area
-(Figure~\ref{fig:gridplot}). The routine is straightforward to use,
-simply requiring a pointer to the \htmlref{Plot}{Plot}:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astGrid( plot );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-It will draw both linear and curvilinear axes and grids, as required
-by the particular Plot. The appearance of the output can be modified
-in a wide variety of ways by setting various Plot attributes.
-The Label attributes of the current \htmlref{Frame}{Frame} are displayed as the axis
-labels in the grid, and the \htmlref{Title}{Title} attribute as the plot title. Sub-strings
-within these strings can be given different appearances, or turned into
-super-scripts or sub-scripts, by the inclusion of escape sequences (see
-section~\secref{ss:escapes}) within the Label attributes.
-
-\subsection{\label{ss:escapes}Controlling the Appearance of Sub-strings}
-Normally, each string of characters displayed using a \htmlref{Plot}{Plot} will be
-plotted so that all characters in the string have the same font size,
-colour, {\em{etc.,}} specified by the appropriate attributes of the
-Plot. However, it is possible to include \emph{escape sequences} within
-the text to modify the appearance of sub-strings. \htmlref{Escape}{Escape} sequences can be
-used to change, colour, font, size, width, to introduce extra horizontal
-space between characters, and to change the base line of characters (thus
-allowing super-scripts and sub-scripts to be created). See the entry for
-the Escape attribute in \appref{ss:attributedescriptions} for details.
-
-As an example, if the character string ``\verb+10\%^50+\%s70+0.5+'' is
-plotted, it will be displayed as ``$10^{0.5}$'' - that is, with a
-super-scripted exponent. The exponent text will be 70\% of the size of
-normal text (as determined by the Size attribute), and its baseline will
-be raised by 50\% of the height of a normal character.
-
-Such escape sequences can be used in the strings assigned to textual
-attributes of the Plot (such as the axis Labels), and may also be
-included in strings plotted using
-\htmlref{astText}{astText}.
-
-The Format attribute for the \htmlref{SkyAxis}{SkyAxis} class includes the ``g'' option
-which will cause escape sequences to be included when formatting
-celestial positions so that super-script characters are used as
-delimiters for the various fields (a super-script ``h'' for hours, ``m''
-for minutes, \emph{etc}).
-
-Note, the facility for interpreting escape sequences is only available if
-the graphics wrapper functions which provide the interface to the
-underlying graphics system support all the functions included in the
-\verb+grf.h+ file as of AST V3.2. Older grf interfaces may need to be
-extended by the addition of new functions before escape sequences can be
-interpretted.
-
-\subsection{\label{ss:logaxes}Producing Logarithmic Axes}
-In certain situations you may wish for one or both of the plotted axes to
-be displayed logarithmically rather than linearly. For instance, you may
-wish to do this when using a \htmlref{Plot}{Plot} to represent a spectrum of, say, flux
-against frequency. In this case, you can cause the frequency axis to be drawn
-logarithmically simply by setting the boolean LogPlot attribute for the
-frequency axis to a non-zero value. This causes several things to happen:
-
-\begin{enumerate}
-
-\item The \htmlref{Mapping}{Mapping} between the base \htmlref{Frame}{Frame} of the Plot (which represents
-the underlying graphics world coordinate system) and the base Frame of
-the \htmlref{FrameSet}{FrameSet} supplied when the Plot was created, is modified. By
-default, this mapping is linear on both axes, but setting LogPlot non-zero
-for an axis causes the Mapping to be modified so that it is logarithmic
-on the specified axis. This is only possible if the displayed section of
-the axis does not include the value zero (otherwise the attempt to set
-a new value for LogPlot is ignored,and it retains its default value of
-zero).
-
-\item The major tick marks drawn as part of the annotated coordinate grid
-are spaced logarithmically rather than linearly. That is, major axis
-values are chosen so that there is a constant ratio between adjacent
-tick mark values. This ratio is constrained to be a power of ten. The
-minor tick marks are drawn at linearly distributed points between the
-adjoining major tick values. Thus if a pair of adjacent major tick values
-are drawn at axis values 10.0 and 100.0, minor ticks will be placed at
-20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0 and 90.0 (note only 8 minor tick
-marks are drawn).
-
-\item If possible, numerical axis labels are shown as powers of ten.
-This depends on the facilities implemented by the graphics wrapper
-functions (see the next section). Extra functions were introduced to this
-set of wrapper functions at AST V3.2 which enable super-scripts and
-sub-scripts to be produced. Some older wrappers may not yet have
-implemented these functiosn and this will result in axis labels being
-drawn in usual scientific or decimal notation.
-
-\end{enumerate}
-
-Whilst the LogPlot attribute can be used to control all three of the above
-facilities, it is possible to control them individually as well. The
-LogTicks and LogLabel attributes control the behaviour specified in items
-2 and 3 above, but the default values for these attributes depend on the
-setting of the LogPlot attribute. This means that setting LogPlot
-non-zero will swicth all three facilites on, so long as zero values have
-not been assigned explicitly to LogTicks or LogLabel.
-
-
-\subsection{\label{ss:choosingagraphicspackage}Choosing a Graphics Package}
-The \htmlref{Plot}{Plot} class itself does not include any code for actually drawing on a
-graphics device. Instead, it requires a set of functions to be provided
-which it uses to draw the required graphics. These include functions
-to draw a straight line, draw a text string, \emph{etc}. You may choose
-to provide functions from your favorite graphics package, or you can even
-write your own! To accomodate variations in the calling interfaces of
-different graphics packages, AST defines a standard interface for these
-routines. If this interface differs from the interface provided by your
-graphics package (which in general it will), then you must write a set of
-\emph{wrapper functions}, which provide the interface expected by AST but
-which then call functions from your graphics package to provide the
-required functionality. AST comes with wrapper functions suitable for
-the PGPLOT graphics package (see \xref{SUN/15}{sun15}{}).
-
-There are two ways of indicating which wrapper functions are to be used by
-the Plot class:
-\begin{enumerate}
-
-\item A file containing C functions with pre-defined names can be written
-and linked with the application using options of the \htmlref{ast\_link}{ast_link} command.
-(see \secref{ss:howtobuild} and \appref{ss:commanddescriptions}). AST is
-distributed with such a file (called {\tt grf\_pgplot.c}) which calls PGPLOT
-functions to implement the required functionality. This file can be used
-as a template for writing your own.
-
-\item The
-\htmlref{astGrfSet}{astGrfSet}
-method of the Plot class can be used to ``register''
-wrapper functions at run-time. This allows an application to switch
-between graphics systems if required. Graphics functions registered in
-this way do not need to have the pre-defined names used in the link-time
-method described above.
-
-\end{enumerate}
-
-For details of the interfaces of the wrapper routines, see
-either the {\tt grf\_pgplot.c} file included in the AST source
-distribution, or the reference documentation for the astGrfSet method.
-
-\cleardoublepage
-\section{Compiling and Linking Software that Uses AST}
-
-A small number of UNIX commands are provided by AST to assist with the
-process of building software. A description of these can be found in
-\appref{ss:commanddescriptions} and their use is discussed here. Note
-that in order to access these commands, the appropriate directory
-(normally ``/star/bin'') should be on your PATH.\footnote{If you have
-not installed AST in the usual location, then substitute the
-appropriate directory in place of ``/star'' wherever it occurs.}
-
-\subsection{\label{ss:accessingheaderfile}Accessing the ``ast.h'' Header File}
-
-The ``ast.h'' header file defines the external interface to the AST library,
-including all constants, function prototypes, macros, {\em{etc.}}. This file
-should be located using the usual compiler options for finding C
-include files, for instance:
-
-\begin{quote}
-\small
-\begin{verbatim}
-cc prog.c -I/star/include -o prog
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This is preferable to specifying the file's absolute name within your
-software.
-
-\subsection{\label{ss:linking}Linking with AST Facilities}
-
-C programs which use AST facilities may be linked by including
-execution of the command ``\htmlref{ast\_link}{ast_link}'' on the compiler command
-line. Thus, to compile and link a program called ``prog'', the
-following might be used:
-
-\begin{quote}
-\small
-\begin{verbatim}
-cc prog.c -L/star/lib `ast_link` -o prog
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note the use of backward quote characters, which cause the
-``ast\_link'' command to be executed and its result substituted into
-the compiler command. An alternative is to save the output from
-``ast\_link'' in (say) a shell variable and use this instead. You may
-find this a little faster if you are building software repeatedly
-during development.
-
-Programs which use AST can also be linked in a number of other ways,
-depending on the facilities they require. In the example above, we
-have used the default method which assumes that the program will not
-be generating graphical output, so that no graphics libraries need be
-linked. If you need other facilities, then various switches can be
-applied to the ``ast\_link'' command in order to control the linking
-process.
-
-For example, if you were producing graphical output using the PGPLOT
-graphics package, you could link with the AST/PGPLOT interface by
-using the ``$-$pgplot'' switch with ``ast\_link'', as
-follows:\footnote{Use the ``$-$pgp'' option instead if you wish to use
-the Starlink version of PGPLOT which uses GKS to generate its output.}
-
-\begin{quote}
-\small
-\begin{verbatim}
-cc prog.c -L/star/lib `ast_link -pgplot` -o prog
-\end{verbatim}
-\normalsize
-\end{quote}
-
-See the ``ast\_link'' command description in
-\appref{ss:commanddescriptions} for details of the options available.
-
-\subsection{Building ADAM Applications that Use AST}
-
-Users of Starlink's \xref{ADAM}{sg4}{} programming environment
-\latex{(SG/4)} on UNIX should use the
-``\xref{alink}{sun144}{ADAM_link_scripts}'' command
-(\xref{SUN/144}{sun144}{}) to compile and link applications and can
-access the AST library by including execution of the command
-``\htmlref{ast\_link\_adam}{ast_link_adam}'' on the command line, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-alink adamprog.c `ast_link_adam`
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note the use of backward quote characters.
-
-By default, AST error messages produced by applications built in this
-way will be delivered {\em{via}} the Starlink EMS Error Message
-Service (\xref{SSN/4}{ssn4}{}) so that error handling by AST is
-consistent with the \xref{{\em{inherited
-status}}}{sun104}{inherited_status} error handling normally used in
-Starlink software.
-
-Switches may be given to the ``ast\_link\_adam'' command (in a similar
-way to ``\htmlref{ast\_link}{ast_link}''---\secref{ss:linking}) in order to link with
-additional AST-related facilities, such as a graphics interface. See
-the ``ast\_link\_adam'' command description in
-\appref{ss:commanddescriptions} for details of the options available.
-
-\appendix
-\cleardoublepage
-\section{\label{ss:classhierarchy}The AST Class Hierarchy}
-The following table shows the hierarchy of classes in the AST library.
-For a description of each class, you should consult
-\appref{ss:classdescriptions}.
-
-\small
-\begin{verbatim}
-Object - Base class for all AST Objects
- Axis - Store axis information
- SkyAxis - Store celestial axis information
- Channel - Basic (textual) I/O channel
- FitsChan - I/O Channel using FITS header cards
- XmlChan - I/O Channel using XML
- StcsChan - I/O Channel using IVOA STC-S descriptions
- KeyMap - Store a set of key/value pairs
- Mapping - Inter-relate two coordinate systems
- CmpMap - Compound Mapping
- DssMap - Map points using Digitised Sky Survey plate solution
- Frame - Coordinate system description
- CmpFrame - Compound Frame
- SpecFluxFrame - Observed value versus spectral position
- FluxFrame - Observed value at a given fixed spectral position
- FrameSet - Set of inter-related coordinate systems
- Plot - Provide facilities for graphical output
- Region - Specify areas within a coordinate system
- Box - A box region with sides parallel to the axes of a Frame
- Circle - A circular or spherical region within a Frame
- CmpRegion - A combination of two regions within a single Frame
- Ellipse - An elliptical region within a 2-dimensional Frame
- Interval - Intervals on one or more axes of a Frame.
- NullRegion - A boundless region within a Frame
- PointList - A collection of points in a Frame
- Polygon - A polygonal region within a 2-dimensional Frame
- Prism - An extrusion of a Region into orthogonal dimensions
- Stc - Represents an generic instance of an IVOA STC-X description
- StcResourceProfile - Represents an an IVOA STC-X ResourceProfile
- StcSearchLocation - Represents an an IVOA STC-X SearchLocation
- StcCatalogEntryLocation - Represents an an IVOA STC-X CatalogEntryLocation
- StcObsDataLocation - Represents an an IVOA STC-X ObsDataLocation
- SkyFrame - Celestial coordinate system description
- SpecFrame - Spectral coordinate system description
- DSBSpecFrame - Dual sideband spectral coordinate system description
- TimeFrame - Time coordinate system description
- GrismMap - Models the spectral dispersion produced by a grism
- IntraMap - Map points using a private transformation function
- LutMap - Transform 1-dimensional coordinates using a lookup table
- MathMap - Transform coordinates using mathematical expressions
- MatrixMap - Map positions by multiplying them by a matrix
- NormMap - Normalise coordinates using a supplied Frame
- PcdMap - Apply 2-dimensional pincushion/barrel distortion
- PermMap - Coordinate permutation Mapping
- PolyMap - General N-dimensional polynomial Mapping
- RateMap - Calculates an element of a Mapping's Jacobian matrix
- SelectorMap - Locates positions within a set of Regions
- ShiftMap - Shifts each axis by a constant amount
- SlaMap - Sequence of celestial coordinate conversions
- SpecMap - Sequence of spectral coordinate conversions
- SphMap - Map 3-d Cartesian to 2-d spherical coordinates
- SwitchMap - Encapuslates a set of alternate Mappings
- TimeMap - Sequence of time coordinate conversions
- TranMap - Combine fwd. and inv. transformations from two Mappings
- UnitMap - Unit (null) Mapping
- WcsMap - Implement a FITS-WCS sky projection
- WinMap - Match windows by scaling and shifting each axis
- ZoomMap - Zoom coordinates about the origin
-\end{verbatim}
-\normalsize
-
-\cleardoublepage
-\section{\label{ss:functiondescriptions}AST Function Descriptions}
-\small
-\sstroutine{
- astSet\sstlabel{astSet}
-}{
- Set attribute values for an Object
-}{
- \sstdescription{
- This function assigns a set of attribute values to an \htmlref{Object}{Object},
- over-riding any previous values. The attributes and their new
- values are specified via a character string, which should
- contain a comma-separated list of the form:
-
- {\tt{"}}attribute\_1 = value\_1, attribute\_2 = value\_2, ... {\tt{"}}
-
- where {\tt{"}}attribute\_n{\tt{"}} specifies an attribute name, and the value
- to the right of each {\tt{"}}={\tt{"}} sign should be a suitable textual
- representation of the value to be assigned. This value will be
- interpreted according to the attribute's data type.
-
- The string supplied may also contain {\tt{"}}printf{\tt{"}}-style format
- specifiers, identified by {\tt{"}}\%{\tt{"}} signs in the usual way. If
- present, these will be substituted by values supplied as
- additional optional arguments (using the normal {\tt{"}}printf{\tt{"}} rules)
- before the string is used.
- }
- \sstsynopsis{
- void astSet( AstObject $*$this, const char $*$settings, ... )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Object.
- }
- \sstsubsection{
- settings
- }{
- Pointer to a null-terminated character string containing a
- comma-separated list of attribute settings in the form described
- above.
- }
- \sstsubsection{
- ...
- }{
- Optional additional arguments which supply values to be
- substituted for any {\tt{"}}printf{\tt{"}}-style format specifiers that
- appear in the {\tt{"}}settings{\tt{"}} string.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This function applies to all Objects.
- }
- }
- \sstexamples{
- \sstexamplesubsection{
- astSet( map, {\tt{"}}\htmlref{Report}{Report} = 1, \htmlref{Zoom}{Zoom} = 25.0{\tt{"}} );
- }{
- Sets the Report attribute for Object {\tt{"}}map{\tt{"}} to the value 1 and
- the Zoom attribute to 25.0.
- }
- \sstexamplesubsection{
- astSet( frame, {\tt{"}}Label( \%d ) =Offset along axis \%d{\tt{"}}, axis, axis );
- }{
- Sets the \htmlref{Label(axis)}{Labelaxis} attribute for Object {\tt{"}}frame{\tt{"}} to a
- suitable string, where the axis number is obtained from
- {\tt{"}}axis{\tt{"}}, a variable of type int.
- }
- \sstexamplesubsection{
- astSet( frame, {\tt{"}}\htmlref{Title}{Title} =\%s{\tt{"}}, mystring );
- }{
- Sets the Title attribute for Object {\tt{"}}frame{\tt{"}} to the contents of
- the string {\tt{"}}mystring{\tt{"}}.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Attribute names are not case sensitive and may be surrounded
- by white space.
-
- \sstitem
- White space may also surround attribute values, where it will
- generally be ignored (except for string-valued attributes where
- it is significant and forms part of the value to be assigned).
-
- \sstitem
- It is not possible to include a comma directly in the value
- assigned to an attribute via the {\tt{"}}settings{\tt{"}} string. To achieve
- this, you should use {\tt{"}}\%s{\tt{"}} format and supply the value as a
- separate additional argument to astSet (or use the astSetC
- function instead).
-
- \sstitem
- The same procedure may be adopted if {\tt{"}}\%{\tt{"}} signs are to be included
- and are not to be interpreted as format specifiers (alternatively,
- the {\tt{"}}printf{\tt{"}} convention of writing {\tt{"}}\%\%{\tt{"}} may be used).
-
- \sstitem
- An error will result if an attempt is made to set a value for
- a read-only attribute.
- }
- }
-}
-\sstroutine{
- astAddFrame\sstlabel{astAddFrame}
-}{
- Add a Frame to a FrameSet to define a new coordinate system
-}{
- \sstdescription{
- This function adds a new \htmlref{Frame}{Frame} and an associated \htmlref{Mapping}{Mapping} to a
- \htmlref{FrameSet}{FrameSet} so as to define a new coordinate system, derived from
- one which already exists within the FrameSet. The new Frame then
- becomes the FrameSet's current Frame.
-
- This function
- may also be used to merge two FrameSets, or to append extra axes
- to every Frame in a FrameSet.
- }
- \sstsynopsis{
- void astAddFrame( AstFrameSet $*$this, int iframe, AstMapping $*$map,
- AstFrame $*$frame )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the FrameSet.
- }
- \sstsubsection{
- iframe
- }{
- The index of the Frame within the FrameSet which describes
- the coordinate system upon which the new one is to be based.
- This value should lie in the range from 1 to the number of
- Frames already in the FrameSet (as given by its \htmlref{Nframe}{Nframe}
- attribute). As a special case, AST\_\_ALLFRAMES may be supplied,
- in which case the axes defined by the supplied Frame are appended
- to every Frame in the FrameSet (see the Notes section for details).
- }
- \sstsubsection{
- map
- }{
- Pointer to a Mapping which describes how to convert
- coordinates from the old coordinate system (described by the
- Frame with index {\tt{"}}iframe{\tt{"}}) into coordinates in the new
- system. The Mapping's forward transformation should perform
- this conversion, and its inverse transformation should
- convert in the opposite direction. The supplied Mapping is ignored
- if parameter {\tt{"}}iframe{\tt{"}}is equal to AST\_\_ALLFRAMES.
- }
- \sstsubsection{
- frame
- }{
- Pointer to a Frame that describes the new coordinate system.
- Any class of Frame may be supplied (including Regions and
- FrameSets).
-
- This function may also be used to merge two FrameSets by
- supplying a pointer to a second FrameSet for this parameter
- (see the Notes section for details).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A value of AST\_\_BASE or AST\_\_CURRENT may be given for the
- {\tt{"}}iframe{\tt{"}} parameter to specify the base Frame or the current
- Frame respectively.
-
- \sstitem
- This function sets the value of the \htmlref{Current}{Current} attribute for the
- FrameSet so that the new Frame subsequently becomes the current
- Frame.
-
- \sstitem
- The number of input coordinate values accepted by the supplied
- Mapping (its \htmlref{Nin}{Nin} attribute) must match the number of axes in the
- Frame identified by the {\tt{"}}iframe{\tt{"}} parameter. Similarly, the
- number of output coordinate values generated by this Mapping
- (its \htmlref{Nout}{Nout} attribute) must match the number of axes in the new
- Frame.
-
- \sstitem
- As a special case, if a pointer to a FrameSet is given for the
- {\tt{"}}frame{\tt{"}} parameter, this is treated as a request to merge a pair of
- FrameSets. This is done by appending all the new Frames (in the
- {\tt{"}}frame{\tt{"}} FrameSet) to the original FrameSet, while preserving
- their order and retaining all the inter-relationships
- (i.e. Mappings) between them. The two sets of Frames are
- inter-related within the merged FrameSet by using the Mapping
- supplied. This should convert between the Frame identified by
- the {\tt{"}}iframe{\tt{"}} parameter (in the original FrameSet) and the current
- Frame of the {\tt{"}}frame{\tt{"}} FrameSet. This latter Frame becomes the
- current Frame in the merged FrameSet.
-
- \sstitem
- As another special case, if a value of AST\_\_ALLFRAMES is supplied
- for parameter
- {\tt{"}}iframe{\tt{"}},
- then the supplied Mapping is ignored, and the axes defined by the
- supplied Frame are appended to each Frame in the FrameSet. In detail,
- each Frame in the FrameSet is replaced by a \htmlref{CmpFrame}{CmpFrame} containing the
- original Frame and the Frame specified by parameter
- {\tt{"}}frame{\tt{"}}.
- In addition, each Mapping in the FrameSet is replaced by a \htmlref{CmpMap}{CmpMap}
- containing the original Mapping and a \htmlref{UnitMap}{UnitMap} in parallel. The Nin and
- Nout attributes of the UnitMap are set equal to the number of axes
- in the supplied Frame. Each new CmpMap is simplified using
- \htmlref{astSimplify}{astSimplify}
- before being stored in the FrameSet.
- }
- }
-}
-\sstroutine{
- astAngle\sstlabel{astAngle}
-}{
- Calculate the angle subtended by two points at a third point
-}{
- \sstdescription{
- This function
- finds the angle at point B between the line joining points A and B,
- and the line joining points C and B. These lines will in fact be
- geodesic curves appropriate to the \htmlref{Frame}{Frame} in use. For instance, in
- \htmlref{SkyFrame}{SkyFrame}, they will be great circles.
- }
- \sstsynopsis{
- double astAngle( AstFrame $*$this, const double a[], const double b[],
- const double c[] )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Frame.
- }
- \sstsubsection{
- a
- }{
- An array of double, with one element for each Frame axis
- (\htmlref{Naxes}{Naxes} attribute) containing the coordinates of the first point.
- }
- \sstsubsection{
- b
- }{
- An array of double, with one element for each Frame axis
- (Naxes attribute) containing the coordinates of the second point.
- }
- \sstsubsection{
- c
- }{
- An array of double, with one element for each Frame axis
- (Naxes attribute) containing the coordinates of the third point.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astAngle
- }{
- The angle in radians, from the line AB to the line CB. If the
- Frame is 2-dimensional, it will be in the range \$$\backslash$pm $\backslash$pi\$,
- and positive rotation is in the same sense as rotation from
- the positive direction of axis 2 to the positive direction of
- axis 1. If the Frame has more than 2 axes, a positive value will
- always be returned in the range zero to \$$\backslash$pi\$.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A value of AST\_\_BAD will also be returned if points A and B are
- co-incident, or if points B and C are co-incident.
-
- \sstitem
- A value of AST\_\_BAD will also be returned if this function is
- invoked with the AST error status set, or if it should fail for
- any reason.
- }
- }
-}
-\sstroutine{
- astAnnul\sstlabel{astAnnul}
-}{
- Annul a pointer to an Object
-}{
- \sstdescription{
- This function annuls a pointer to an \htmlref{Object}{Object} so that it is no
- longer recognised as a valid pointer by the AST library. Any
- resources associated with the pointer are released and made
- available for re-use.
-
- This function also decrements the Object's \htmlref{RefCount}{RefCount} attribute by
- one. If this attribute reaches zero (which happens when the last
- pointer to the Object is annulled), then the Object is deleted.
- }
- \sstsynopsis{
- AstObject $*$astAnnul( AstObject $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- The Object pointer to be annulled.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This function applies to all Objects.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astAnnul()
- }{
- A null Object pointer (AST\_\_NULL) is always returned.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function will attempt to annul the pointer even if the
- Object is not currently locked by the calling thread (see \htmlref{astLock}{astLock}).
-
- \sstitem
- This function attempts to execute even if the AST error
- status is set
- on entry, although no further error report will be
- made if it subsequently fails under these circumstances. In
- particular, it will fail if the pointer suppled is not valid,
- but this will only be reported if the error status is clear on
- entry.
- }
- }
-}
-\sstroutine{
- astAxAngle\sstlabel{astAxAngle}
-}{
- Returns the angle from an axis, to a line through two points
-}{
- \sstdescription{
- This function
- finds the angle, as seen from point A, between the positive
- direction of a specified axis, and the geodesic curve joining point
- A to point B.
- }
- \sstsynopsis{
- double astAxAngle( AstFrame $*$this, const double a[], const double b[], int axis )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the \htmlref{Frame}{Frame}.
- }
- \sstsubsection{
- a
- }{
- An array of double, with one element for each Frame axis
- (\htmlref{Naxes}{Naxes} attribute) containing the coordinates of the first point.
- }
- \sstsubsection{
- b
- }{
- An array of double, with one element for each Frame axis
- (Naxes attribute) containing the coordinates of the second point.
- }
- \sstsubsection{
- axis
- }{
- The number of the Frame axis from which the angle is to be
- measured (axis numbering starts at 1 for the first axis).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astAxAngle
- }{
- The angle in radians, from the positive direction of the
- specified axis, to the line AB. If the Frame is 2-dimensional,
- it will be in the range [-PI/2,$+$PI/2], and positive rotation is in
- the same sense as rotation from the positive direction of axis 2
- to the positive direction of axis 1. If the Frame has more than 2
- axes, a positive value will always be returned in the range zero
- to PI.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The geodesic curve used by this function is the path of
- shortest distance between two points, as defined by the
- \htmlref{astDistance}{astDistance} function.
-
- \sstitem
- This function will return {\tt{"}}bad{\tt{"}} coordinate values (AST\_\_BAD)
- if any of the input coordinates has this value, or if the require
- position angle is undefined.
- }
- }
-}
-\sstroutine{
- astAxDistance\sstlabel{astAxDistance}
-}{
- Find the distance between two axis values
-}{
- \sstdescription{
- This function returns a signed value representing the axis increment
- from axis value v1 to axis value v2.
-
- For a simple \htmlref{Frame}{Frame}, this is a trivial operation returning the
- difference between the two axis values. But for other derived classes
- of Frame (such as a \htmlref{SkyFrame}{SkyFrame}) this is not the case.
- }
- \sstsynopsis{
- double astAxDistance( AstFrame $*$this, int axis, double v1, double v2 )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Frame.
- }
- \sstsubsection{
- axis
- }{
- The index of the axis to which the supplied values refer. The
- first axis has index 1.
- }
- \sstsubsection{
- v1
- }{
- The first axis value.
- }
- \sstsubsection{
- v2
- }{
- The second axis value.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astAxDistance
- }{
- The distance from the first to the second axis value.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function will return a {\tt{"}}bad{\tt{"}} result value (AST\_\_BAD) if
- any of the input values has this value.
-
- \sstitem
- A {\tt{"}}bad{\tt{"}} value will also be returned if this function is
- invoked with the AST error status set, or if it should fail for
- any reason.
- }
- }
-}
-\sstroutine{
- astAxOffset\sstlabel{astAxOffset}
-}{
- Add an increment onto a supplied axis value
-}{
- \sstdescription{
- This function returns an axis value formed by adding a signed axis
- increment onto a supplied axis value.
-
- For a simple \htmlref{Frame}{Frame}, this is a trivial operation returning the
- sum of the two supplied values. But for other derived classes
- of Frame (such as a \htmlref{SkyFrame}{SkyFrame}) this is not the case.
- }
- \sstsynopsis{
- double astAxOffset( AstFrame $*$this, int axis, double v1, double dist )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Frame.
- }
- \sstsubsection{
- axis
- }{
- The index of the axis to which the supplied values refer. The
- first axis has index 1.
- }
- \sstsubsection{
- v1
- }{
- The original axis value.
- }
- \sstsubsection{
- dist
- }{
- The axis increment to add to the original axis value.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astAxOffset
- }{
- The incremented axis value.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function will return a {\tt{"}}bad{\tt{"}} result value (AST\_\_BAD) if
- any of the input values has this value.
-
- \sstitem
- A {\tt{"}}bad{\tt{"}} value will also be returned if this function is
- invoked with the AST error status set, or if it should fail for
- any reason.
- }
- }
-}
-\sstroutine{
- astBegin\sstlabel{astBegin}
-}{
- Begin a new AST context
-}{
- \sstdescription{
- This macro invokes a function to begin a new AST context.
- Any \htmlref{Object}{Object} pointers
- created within this context will be annulled when it is later
- ended using \htmlref{astEnd}{astEnd} (just as if \htmlref{astAnnul}{astAnnul} had been invoked),
- unless they have first been exported using \htmlref{astExport}{astExport} or rendered
- exempt using \htmlref{astExempt}{astExempt}. If
- annulling a pointer causes an Object's \htmlref{RefCount}{RefCount} attribute to
- fall to zero (which happens when the last pointer to it is
- annulled), then the Object will be deleted.
- }
- \sstsynopsis{
- void astBegin
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This macro applies to all Objects.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- astBegin attempts to execute even if the AST error status
- is set on entry.
-
- \sstitem
- Contexts delimited by astBegin and astEnd may be nested to any
- depth.
- }
- }
-}
-\sstroutine{
- astBorder\sstlabel{astBorder}
-}{
- Draw a border around valid regions of a Plot
-}{
- \sstdescription{
- This function draws a (line) border around regions of the
- plotting area of a \htmlref{Plot}{Plot} which correspond to valid, unclipped
- physical coordinates. For example, when plotting using an
- all-sky map projection, this function could be used to draw the
- boundary of the celestial sphere when it is projected on to the
- plotting surface.
-
- If the entire plotting area contains valid, unclipped physical
- coordinates, then the boundary will just be a rectangular box
- around the edges of the plotting area.
-
- If the Plot is a \htmlref{Plot3D}{Plot3D}, this method is applied individually to
- each of the three 2D Plots encapsulated within the Plot3D (each of
- these Plots corresponds to a single 2D plane in the 3D graphics
- system). In addition, if the entire plotting volume has valid
- coordinates in the 3D current \htmlref{Frame}{Frame} of the Plot3D, then additional
- lines are drawn along the edges of the 3D plotting volume so that
- the entire plotting volume is enclosed within a cuboid grid.
- }
- \sstsynopsis{
- int astBorder( AstPlot $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Plot.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astBorder()
- }{
- Zero is returned if the plotting space is completely filled by
- valid, unclipped physical coordinates (so that only a
- rectangular box was drawn around the edge). Otherwise, one is
- returned.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A value of zero will be returned if this function is invoked
- with the AST error status set, or if it should fail for any
- reason.
-
- \sstitem
- An error results if either the current Frame or the base Frame
- of the Plot is not 2-dimensional or (for a Plot3D) 3-dimensional.
-
- \sstitem
- An error also results if the transformation between the base
- and current Frames of the Plot is not defined (i.e. the Plot's
- \htmlref{TranForward}{TranForward} attribute is zero).
- }
- }
-}
-\sstroutine{
- astBoundingBox\sstlabel{astBoundingBox}
-}{
- Return a bounding box for previously drawn graphics
-}{
- \sstdescription{
- This function returns the bounds of a box which just encompasess the
- graphics produced by the previous call to any of the \htmlref{Plot}{Plot} methods
- which produce graphical output. If no such previous call has yet
- been made, or if the call failed for any reason, then the bounding box
- returned by this function is undefined.
- }
- \sstsynopsis{
- void astBoundingBox( AstPlot $*$this, float lbnd[2], float ubnd[2] )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Plot.
- }
- \sstsubsection{
- lbnd
- }{
- A two element array in which is returned the lower limits of the
- bounding box on each of the two axes of the graphics coordinate
- system (the base \htmlref{Frame}{Frame} of the Plot).
- }
- \sstsubsection{
- ubnd
- }{
- A two element array in which is returned the upper limits of the
- bounding box on each of the two axes of the graphics coordinate
- system (the base Frame of the Plot).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- An error results if the base Frame of the Plot is not
- 2-dimensional.
- }
- }
-}
-\sstroutine{
- astBox\sstlabel{astBox}
-}{
- Create a Box
-}{
- \sstdescription{
- This function creates a new \htmlref{Box}{Box} and optionally initialises its
- attributes.
-
- The Box class implements a \htmlref{Region}{Region} which represents a box with sides
- parallel to the axes of a \htmlref{Frame}{Frame} (i.e. an area which encloses a given
- range of values on each axis). A Box is similar to an \htmlref{Interval}{Interval}, the
- only real difference being that the Interval class allows some axis
- limits to be unspecified. Note, a Box will only look like a box if
- the Frame geometry is approximately flat. For instance, a Box centred
- close to a pole in a \htmlref{SkyFrame}{SkyFrame} will look more like a fan than a box
- (the \htmlref{Polygon}{Polygon} class can be used to create a box-like region close to a
- pole).
- }
- \sstsynopsis{
- AstBox $*$astBox( AstFrame $*$frame, int form, const double point1[],
- const double point2[], AstRegion $*$unc,
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- frame
- }{
- A pointer to the Frame in which the region is defined. A deep
- copy is taken of the supplied Frame. This means that any
- subsequent changes made to the Frame using the supplied pointer
- will have no effect the Region.
- }
- \sstsubsection{
- form
- }{
- Indicates how the box is described by the remaining parameters.
- A value of zero indicates that the box is specified by a centre
- position and a corner position. A value of one indicates that the
- box is specified by a two opposite corner positions.
- }
- \sstsubsection{
- point1
- }{
- An array of double, with one element for each Frame axis
- (\htmlref{Naxes}{Naxes} attribute). If
- {\tt{"}}form{\tt{"}}
- is zero, this array should contain the coordinates at the centre of
- the box.
- If {\tt{"}}form{\tt{"}}
- is one, it should contain the coordinates at the corner of the box
- which is diagonally opposite the corner specified by
- {\tt{"}}point2{\tt{"}}.
- }
- \sstsubsection{
- point2
- }{
- An array of double, with one element for each Frame axis
- (Naxes attribute) containing the coordinates at any corner of the
- box.
- }
- \sstsubsection{
- unc
- }{
- An optional pointer to an existing Region which specifies the
- uncertainties associated with the boundary of the Box being created.
- The uncertainty in any point on the boundary of the Box is found by
- shifting the supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at
- the boundary point being considered. The area covered by the
- shifted uncertainty Region then represents the uncertainty in the
- boundary position. The uncertainty is assumed to be the same for
- all points.
-
- If supplied, the uncertainty Region must be of a class for which
- all instances are centro-symetric (e.g. Box, \htmlref{Circle}{Circle}, \htmlref{Ellipse}{Ellipse}, etc.)
- or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
- copy of the supplied Region will be taken, so subsequent changes to
- the uncertainty Region using the supplied pointer will have no
- effect on the created Box. Alternatively,
- a NULL \htmlref{Object}{Object} pointer
- may be supplied, in which case a default uncertainty is used
- equivalent to a box 1.0E-6 of the size of the Box being created.
-
- The uncertainty Region has two uses: 1) when the
- \htmlref{astOverlap}{astOverlap}
- function compares two Regions for equality the uncertainty
- Region is used to determine the tolerance on the comparison, and 2)
- when a Region is mapped into a different coordinate system and
- subsequently simplified (using
- \htmlref{astSimplify}{astSimplify}),
- the uncertainties are used to determine if the transformed boundary
- can be accurately represented by a specific shape of Region.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new Box. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astBox()
- }{
- A pointer to the new Box.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- astChannel\sstlabel{astChannel}
-}{
- Create a Channel
-}{
- \sstdescription{
- This function creates a new \htmlref{Channel}{Channel} and optionally initialises
- its attributes.
-
- A Channel implements low-level input/output for the AST library.
- Writing an \htmlref{Object}{Object} to a Channel (using \htmlref{astWrite}{astWrite}) will generate a
- textual representation of that Object, and reading from a
- Channel (using \htmlref{astRead}{astRead}) will create a new Object from its
- textual representation.
-
- Normally, when you use a Channel, you should provide {\tt{"}}source{\tt{"}}
- and {\tt{"}}sink{\tt{"}} functions which connect it to an external data store
- by reading and writing the resulting text. By default, however,
- a Channel will read from standard input and write to standard
- output.
- }
- \sstsynopsis{
- AstChannel $*$astChannel( const char $*$($*$ source)( void ),
- void ($*$ sink)( const char $*$ ),
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- source
- }{
- Pointer to a source function that takes no arguments and
- returns a pointer to a null-terminated string. This function
- will be used by the Channel to obtain lines of input text. On
- each invocation, it should return a pointer to the next input
- line read from some external data store, and a NULL pointer
- when there are no more lines to read.
-
- If {\tt{"}}source{\tt{"}} is NULL, the Channel will read from standard
- input instead.
- }
- \sstsubsection{
- sink
- }{
- Pointer to a sink function that takes a pointer to a
- null-terminated string as an argument and returns void. This
- function will be used by the Channel to deliver lines of
- output text. On each invocation, it should deliver the
- contents of the string supplied to some external data store.
-
- If {\tt{"}}sink{\tt{"}} is NULL, the Channel will write to standard output
- instead.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new Channel. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astChannel()
- }{
- A pointer to the new Channel.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Application code can pass arbitrary data (such as file
- descriptors, etc) to source and sink functions using the
- \htmlref{astPutChannelData}{astPutChannelData} function. The source or sink function should use
- the \htmlref{astChannelData}{astChannelData} macro to retrieve this data.
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astChannelData\sstlabel{astChannelData}
-}{
- Return a pointer to user-supplied data stored with a Channel
-}{
- \sstdescription{
- This macro is intended to be used within the source or sink
- functions associated with a \htmlref{Channel}{Channel}. It returns any pointer
- previously stored in the Channel (that is, the Channel that has
- invoked the source or sink function) using \htmlref{astPutChannelData}{astPutChannelData}.
-
- This mechanism is a thread-safe alternative to passing file
- descriptors, etc, via static global variables.
- }
- \sstsynopsis{
- void $*$astChannelData
- }
- \sstapplicability{
- \sstsubsection{
- Channel
- }{
- This macro applies to all Channels.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astChannelData
- }{
- The pointer previously stored with the Channel using
- astPutChannelData. A NULL pointer will be returned if no such
- pointer has been stored with the Channel.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This routine is not available in the Fortran 77 interface to
- the AST library.
- }
- }
-}
-\sstroutine{
- astCircle\sstlabel{astCircle}
-}{
- Create a Circle
-}{
- \sstdescription{
- This function creates a new \htmlref{Circle}{Circle} and optionally initialises its
- attributes.
-
- A Circle is a \htmlref{Region}{Region} which represents a circle or sphere within the
- supplied \htmlref{Frame}{Frame}.
- }
- \sstsynopsis{
- AstCircle $*$astCircle( AstFrame $*$frame, int form, const double centre[],
- const double point[], AstRegion $*$unc,
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- frame
- }{
- A pointer to the Frame in which the region is defined. A deep
- copy is taken of the supplied Frame. This means that any
- subsequent changes made to the Frame using the supplied pointer
- will have no effect the Region.
- }
- \sstsubsection{
- form
- }{
- Indicates how the circle is described by the remaining parameters.
- A value of zero indicates that the circle is specified by a
- centre position and a position on the circumference. A value of one
- indicates that the circle is specified by a centre position and a
- scalar radius.
- }
- \sstsubsection{
- centre
- }{
- An array of double, with one element for each Frame axis
- (\htmlref{Naxes}{Naxes} attribute) containing the coordinates at the centre of
- the circle or sphere.
- }
- \sstsubsection{
- point
- }{
- If {\tt{"}}form{\tt{"}}
- is zero, then this array should have one element for each Frame
- axis (Naxes attribute), and should be supplied holding the
- coordinates at a point on the circumference of the circle or sphere.
- If {\tt{"}}form{\tt{"}}
- is one, then this array should have one element only which should
- be supplied holding the scalar radius of the circle or sphere,
- as a geodesic distance within the Frame.
- }
- \sstsubsection{
- unc
- }{
- An optional pointer to an existing Region which specifies the
- uncertainties associated with the boundary of the Circle being created.
- The uncertainty in any point on the boundary of the Circle is found by
- shifting the supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at
- the boundary point being considered. The area covered by the
- shifted uncertainty Region then represents the uncertainty in the
- boundary position. The uncertainty is assumed to be the same for
- all points.
-
- If supplied, the uncertainty Region must be of a class for which
- all instances are centro-symetric (e.g. \htmlref{Box}{Box}, Circle, \htmlref{Ellipse}{Ellipse}, etc.)
- or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
- copy of the supplied Region will be taken, so subsequent changes to
- the uncertainty Region using the supplied pointer will have no
- effect on the created Circle. Alternatively,
- a NULL \htmlref{Object}{Object} pointer
- may be supplied, in which case a default uncertainty is used
- equivalent to a box 1.0E-6 of the size of the Circle being created.
-
- The uncertainty Region has two uses: 1) when the
- \htmlref{astOverlap}{astOverlap}
- function compares two Regions for equality the uncertainty
- Region is used to determine the tolerance on the comparison, and 2)
- when a Region is mapped into a different coordinate system and
- subsequently simplified (using
- \htmlref{astSimplify}{astSimplify}),
- the uncertainties are used to determine if the transformed boundary
- can be accurately represented by a specific shape of Region.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new Circle. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astCircle()
- }{
- A pointer to the new Circle.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astCirclePars\sstlabel{astCirclePars}
-}{
- Returns the geometric parameters of an Circle
-}{
- \sstdescription{
- This function
- returns the geometric parameters describing the supplied \htmlref{Circle}{Circle}.
- }
- \sstsynopsis{
- void astCirclePars( AstCircle $*$this, double $*$centre, double $*$radius,
- double $*$p1 )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the \htmlref{Region}{Region}.
- }
- \sstsubsection{
- centre
- }{
- Pointer to an array
- in which to return the coordinates of the Circle centre.
- The length of this array should be no less than the number of
- axes in the associated coordinate system.
- }
- \sstsubsection{
- radius
- }{
- Returned holding the radius of the Circle, as an geodesic
- distance in the associated coordinate system.
- }
- \sstsubsection{
- p1
- }{
- Pointer to an array
- in which to return the coordinates of a point on the
- circumference of the Circle. The length of this array should be
- no less than the number of axes in the associated coordinate system.
- A NULL pointer can be supplied if the circumference position is
- not needed.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the coordinate system represented by the Circle has been
- changed since it was first created, the returned parameters refer
- to the new (changed) coordinate system, rather than the original
- coordinate system. Note however that if the transformation from
- original to new coordinate system is non-linear, the shape
- represented by the supplied Circle object may not be an accurate
- circle.
- }
- }
-}
-\sstroutine{
- astClear\sstlabel{astClear}
-}{
- Clear attribute values for an Object
-}{
- \sstdescription{
- This function clears the values of a specified set of attributes
- for an \htmlref{Object}{Object}. Clearing an attribute cancels any value that has
- previously been explicitly set for it, so that the standard
- default attribute value will subsequently be used instead. This
- also causes the \htmlref{astTest}{astTest} function to return the value zero for
- the attribute, indicating that no value has been set.
- }
- \sstsynopsis{
- void astClear( AstObject $*$this, const char $*$attrib )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Object.
- }
- \sstsubsection{
- attrib
- }{
- Pointer to a null-terminated character string containing a
- comma-separated list of the names of the attributes to be cleared.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This function applies to all Objects.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Attribute names are not case sensitive and may be surrounded
- by white space.
-
- \sstitem
- It does no harm to clear an attribute whose value has not been
- set.
-
- \sstitem
- An error will result if an attempt is made to clear the value
- of a read-only attribute.
- }
- }
-}
-\sstroutine{
- astClearStatus\sstlabel{astClearStatus}
-}{
- Clear the AST error status
-}{
- \sstdescription{
- This macro resets the AST error status to an OK value,
- indicating that an error condition (if any) has been cleared.
- }
- \sstsynopsis{
- void astClearStatus
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the AST error status is set to an error value (after an
- error), most AST functions will not execute and will simply
- return without action. Using astClearStatus will restore normal
- behaviour.
- }
- }
-}
-\sstroutine{
- astClip\sstlabel{astClip}
-}{
- Set up or remove clipping for a Plot
-}{
- \sstdescription{
- This function defines regions of a \htmlref{Plot}{Plot} which are to be clipped.
- Any subsequent graphical output created using the Plot will then
- be visible only within the unclipped regions of the plotting
- area. See also the \htmlref{Clip}{Clip} attribute.
- }
- \sstsynopsis{
- void astClip( AstPlot $*$this, int iframe, const double lbnd[],
- const double ubnd[] )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Plot.
- }
- \sstsubsection{
- iframe
- }{
- The index of the \htmlref{Frame}{Frame} within the Plot to which the clipping
- limits supplied in {\tt{"}}lbnd{\tt{"}} and {\tt{"}}ubnd{\tt{"}} (below) refer. Clipping
- may be applied to any of the coordinate systems associated
- with a Plot (as defined by the Frames it contains), so this
- index may take any value from 1 to the number of Frames in
- the Plot (\htmlref{Nframe}{Nframe} attribute). In addition, the values
- AST\_\_BASE and AST\_\_CURRENT may be used to specify the base
- and current Frames respectively.
-
- For example, a value of AST\_\_CURRENT causes clipping to be
- performed in physical coordinates, while a value of AST\_\_BASE
- would clip in graphical coordinates. Clipping may also be
- removed completely by giving a value of AST\_\_NOFRAME. In this
- case any clipping bounds supplied (below) are ignored.
- }
- \sstsubsection{
- lbnd
- }{
- An array with one element for each axis of the clipping Frame
- (identified by the index {\tt{"}}iframe{\tt{"}}). This should contain the
- lower bound, on each axis, of the region which is to remain
- visible (unclipped).
- }
- \sstsubsection{
- ubnd
- }{
- An array with one element for each axis of the clipping Frame
- (identified by the index {\tt{"}}iframe{\tt{"}}). This should contain the
- upper bound, on each axis, of the region which is to remain
- visible (unclipped).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Only one clipping Frame may be active at a time. This function
- will deactivate any previously-established clipping Frame before
- setting up new clipping limits.
-
- \sstitem
- The clipping produced by this function is in addition to that
- specified by the Clip attribute which occurs at the edges of the
- plotting area
- established when the Plot is created (see \htmlref{astPlot}{astPlot}). The
- underlying graphics system may also impose further clipping.
-
- \sstitem
- When testing a graphical position for clipping, it is first
- transformed into the clipping Frame. The resulting coordinate on
- each axis is then checked against the clipping limits (given by
- {\tt{"}}lbnd{\tt{"}} and {\tt{"}}ubnd{\tt{"}}). By default, a position is clipped if any
- coordinate lies outside these limits. However, if a non-zero
- value is assigned to the Plot's \htmlref{ClipOp}{ClipOp} attribute, then a
- position is only clipped if the coordinates on all axes lie
- outside their clipping limits.
-
- \sstitem
- If the lower clipping limit exceeds the upper limit for any
- axis, then the sense of clipping for that axis is reversed (so
- that coordinate values lying between the limits are clipped
- instead of those lying outside the limits). To produce a {\tt{"}}hole{\tt{"}}
- in a coordinate space (that is, an internal region where nothing
- is plotted), you should supply all the bounds in reversed order,
- and set the ClipOp attribute for the Plot to a non-zero value.
-
- \sstitem
- Either clipping limit may be set to the value AST\_\_BAD, which
- is equivalent to setting it to infinity (or minus infinity for a
- lower bound) so that it is not used.
-
- \sstitem
- If a graphical position results in any bad coordinate values
- (AST\_\_BAD) when transformed into the clipping Frame, then it is
- treated (for the purposes of producing graphical output) as if
- it were clipped.
-
- \sstitem
- When a Plot is used as a \htmlref{Mapping}{Mapping} to transform points
- (e.g. using \htmlref{astTran2}{astTran2}), any clipped output points are assigned
- coordinate values of AST\_\_BAD.
-
- \sstitem
- An error results if the base Frame of the Plot is not
- 2-dimensional.
- }
- }
-}
-\sstroutine{
- astClone\sstlabel{astClone}
-}{
- Clone (duplicate) an Object pointer
-}{
- \sstdescription{
- This function returns a duplicate pointer to an existing
- \htmlref{Object}{Object}. It also increments the Object's \htmlref{RefCount}{RefCount} attribute to
- keep track of how many pointers have been issued.
-
- Note that this function is NOT equivalent to an assignment
- statement, as in general the two pointers will not have the same
- value.
- }
- \sstsynopsis{
- AstObject $*$astClone( AstObject $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Original pointer to the Object.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This function applies to all Objects.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astClone()
- }{
- A duplicate pointer to the same Object.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astCmpFrame\sstlabel{astCmpFrame}
-}{
- Create a CmpFrame
-}{
- \sstdescription{
- This function creates a new \htmlref{CmpFrame}{CmpFrame} and optionally initialises
- its attributes.
-
- A CmpFrame is a compound \htmlref{Frame}{Frame} which allows two component Frames
- (of any class) to be merged together to form a more complex
- Frame. The axes of the two component Frames then appear together
- in the resulting CmpFrame (those of the first Frame, followed by
- those of the second Frame).
-
- Since a CmpFrame is itself a Frame, it can be used as a
- component in forming further CmpFrames. Frames of arbitrary
- complexity may be built from simple individual Frames in this
- way.
-
- Also since a Frame is a \htmlref{Mapping}{Mapping}, a CmpFrame can also be used as a
- Mapping. Normally, a CmpFrame is simply equivalent to a \htmlref{UnitMap}{UnitMap},
- but if either of the component Frames within a CmpFrame is a \htmlref{Region}{Region}
- (a sub-class of Frame), then the CmpFrame will use the Region as a
- Mapping when transforming values for axes described by the Region.
- Thus input axis values corresponding to positions which are outside the
- Region will result in bad output axis values.
- }
- \sstsynopsis{
- AstCmpFrame $*$astCmpFrame( AstFrame $*$frame1, AstFrame $*$frame2,
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- frame1
- }{
- Pointer to the first component Frame.
- }
- \sstsubsection{
- frame2
- }{
- Pointer to the second component Frame.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new CmpFrame. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astCmpFrame()
- }{
- A pointer to the new CmpFrame.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- astCmpMap\sstlabel{astCmpMap}
-}{
- Create a CmpMap
-}{
- \sstdescription{
- This function creates a new \htmlref{CmpMap}{CmpMap} and optionally initialises
- its attributes.
-
- A CmpMap is a compound \htmlref{Mapping}{Mapping} which allows two component
- Mappings (of any class) to be connected together to form a more
- complex Mapping. This connection may either be {\tt{"}}in series{\tt{"}}
- (where the first Mapping is used to transform the coordinates of
- each point and the second mapping is then applied to the
- result), or {\tt{"}}in parallel{\tt{"}} (where one Mapping transforms the
- earlier coordinates for each point and the second Mapping
- simultaneously transforms the later coordinates).
-
- Since a CmpMap is itself a Mapping, it can be used as a
- component in forming further CmpMaps. Mappings of arbitrary
- complexity may be built from simple individual Mappings in this
- way.
- }
- \sstsynopsis{
- AstCmpMap $*$astCmpMap( AstMapping $*$map1, AstMapping $*$map2, int series,
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- map1
- }{
- Pointer to the first component Mapping.
- }
- \sstsubsection{
- map2
- }{
- Pointer to the second component Mapping.
- }
- \sstsubsection{
- series
- }{
- If a non-zero value is given for this parameter, the two
- component Mappings will be connected in series. A zero
- value requests that they are connected in parallel.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new CmpMap. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astCmpMap()
- }{
- A pointer to the new CmpMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the component Mappings are connected in series, then using
- the resulting CmpMap to transform coordinates will cause the
- first Mapping to be applied, followed by the second Mapping. If
- the inverse CmpMap transformation is requested, the two
- component Mappings will be applied in both the reverse order and
- the reverse direction.
-
- \sstitem
- When connecting two component Mappings in series, the number
- of output coordinates generated by the first Mapping (its \htmlref{Nout}{Nout}
- attribute) must equal the number of input coordinates accepted
- by the second Mapping (its \htmlref{Nin}{Nin} attribute).
-
- \sstitem
- If the component Mappings of a CmpMap are connected in
- parallel, then the first Mapping will be used to transform the
- earlier input coordinates for each point (and to produce the
- earlier output coordinates) and the second Mapping will be used
- simultaneously to transform the remaining input coordinates (to
- produce the remaining output coordinates for each point). If the
- inverse transformation is requested, each Mapping will still be
- applied to the same coordinates, but in the reverse direction.
-
- \sstitem
- When connecting two component Mappings in parallel, there is
- no restriction on the number of input and output coordinates for
- each Mapping.
-
- \sstitem
- Note that the component Mappings supplied are not copied by
- astCmpMap (the new CmpMap simply retains a reference to
- them). They may continue to be used for other purposes, but
- should not be deleted. If a CmpMap containing a copy of its
- component Mappings is required, then a copy of the CmpMap should
- be made using \htmlref{astCopy}{astCopy}.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astCmpRegion\sstlabel{astCmpRegion}
-}{
- Create a CmpRegion
-}{
- \sstdescription{
- This function creates a new \htmlref{CmpRegion}{CmpRegion} and optionally initialises
- its attributes.
-
- A CmpRegion is a \htmlref{Region}{Region} which allows two component
- Regions (of any class) to be combined to form a more complex
- Region. This combination may be performed a boolean AND, OR
- or XOR (exclusive OR) operator. If the AND operator is
- used, then a position is inside the CmpRegion only if it is
- inside both of its two component Regions. If the OR operator is
- used, then a position is inside the CmpRegion if it is inside
- either (or both) of its two component Regions. If the XOR operator
- is used, then a position is inside the CmpRegion if it is inside
- one but not both of its two component Regions. Other operators can
- be formed by negating one or both component Regions before using
- them to construct a new CmpRegion.
-
- The two component Region need not refer to the same coordinate
- \htmlref{Frame}{Frame}, but it must be possible for the
- \htmlref{astConvert}{astConvert}
- function to determine a \htmlref{Mapping}{Mapping} between them (an error will be
- reported otherwise when the CmpRegion is created). For instance,
- a CmpRegion may combine a Region defined within an ICRS \htmlref{SkyFrame}{SkyFrame}
- with a Region defined within a Galactic SkyFrame. This is
- acceptable because the SkyFrame class knows how to convert between
- these two systems, and consequently the
- astConvert
- function will also be able to convert between them. In such cases,
- the second component Region will be mapped into the coordinate Frame
- of the first component Region, and the Frame represented by the
- CmpRegion as a whole will be the Frame of the first component Region.
-
- Since a CmpRegion is itself a Region, it can be used as a
- component in forming further CmpRegions. Regions of arbitrary
- complexity may be built from simple individual Regions in this
- way.
- }
- \sstsynopsis{
- AstCmpRegion $*$astCmpRegion( AstRegion $*$region1, AstRegion $*$region2,
- int oper, const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- region1
- }{
- Pointer to the first component Region.
- }
- \sstsubsection{
- region2
- }{
- Pointer to the second component Region. This Region will be
- transformed into the coordinate Frame of the first region before
- use. An error will be reported if this is not possible.
- }
- \sstsubsection{
- oper
- }{
- The boolean operator with which to combine the two Regions. This
- must be one of the symbolic constants AST\_\_AND, AST\_\_OR or AST\_\_XOR.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new CmpRegion. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astCmpRegion()
- }{
- A pointer to the new CmpRegion.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If one of the supplied Regions has an associated uncertainty,
- that uncertainty will also be used for the returned CmpRegion.
- If both supplied Regions have associated uncertainties, the
- uncertainty associated with the first Region will be used for the
- returned CmpRegion.
-
- \sstitem
- Deep copies are taken of the supplied Regions. This means that
- any subsequent changes made to the component Regions using the
- supplied pointers will have no effect on the CmpRegion.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astConvert\sstlabel{astConvert}
-}{
- Determine how to convert between two coordinate systems
-}{
- \sstdescription{
- This function compares two Frames and determines whether it is
- possible to convert between the coordinate systems which they
- represent. If conversion is possible, it returns a \htmlref{FrameSet}{FrameSet}
- which describes the conversion and which may be used (as a
- \htmlref{Mapping}{Mapping}) to transform coordinate values in either direction.
-
- The same function may also be used to determine how to convert
- between two FrameSets (or between a \htmlref{Frame}{Frame} and a FrameSet, or
- vice versa). This mode is intended for use when (for example)
- two images have been calibrated by attaching a FrameSet to each.
- astConvert might then be used to search for a
- celestial coordinate system that both images have in common, and
- the result could then be used to convert between the pixel
- coordinates of both images -- having effectively used their
- celestial coordinate systems to align them.
-
- When using FrameSets, there may be more than one possible
- intermediate coordinate system in which to perform the
- conversion (for instance, two FrameSets might both have
- celestial coordinates, detector coordinates, pixel coordinates,
- etc.). A comma-separated list of coordinate system domains may
- therefore be given which defines a priority order to use when
- selecting the intermediate coordinate system. The path used for
- conversion must go via an intermediate coordinate system whose
- \htmlref{Domain}{Domain} attribute matches one of the domains given. If conversion
- cannot be achieved using the first domain, the next one is
- considered, and so on, until success is achieved.
- }
- \sstsynopsis{
- AstFrameSet $*$astConvert( AstFrame $*$from, AstFrame $*$to,
- const char $*$domainlist )
- }
- \sstparameters{
- \sstsubsection{
- from
- }{
- Pointer to a Frame which represents the {\tt{"}}source{\tt{"}} coordinate
- system. This is the coordinate system in which you already
- have coordinates available.
-
- If a FrameSet is given, its current Frame (as determined by
- its \htmlref{Current}{Current} attribute) is taken to describe the source
- coordinate system. Note that the \htmlref{Base}{Base} attribute of this
- FrameSet may be modified by this function to indicate which
- intermediate coordinate system was used (see under
- {\tt{"}}FrameSets{\tt{"}} in the {\tt{"}}Applicability{\tt{"}} section for details).
- }
- \sstsubsection{
- to
- }{
- Pointer to a Frame which represents the {\tt{"}}destination{\tt{"}}
- coordinate system. This is the coordinate system into which
- you wish to convert your coordinates.
-
- If a FrameSet is given, its current Frame (as determined by
- its Current attribute) is taken to describe the destination
- coordinate system. Note that the Base attribute of this
- FrameSet may be modified by this function to indicate which
- intermediate coordinate system was used (see under
- {\tt{"}}FrameSets{\tt{"}} in the {\tt{"}}Applicability{\tt{"}} section for details).
- }
- \sstsubsection{
- domainlist
- }{
- Pointer to a null-terminated character string containing a
- comma-separated list of Frame domains. This may be used to
- define a priority order for the different intermediate
- coordinate systems that might be used to perform the
- conversion.
-
- The function will first try to obtain a conversion by making
- use only of an intermediate coordinate system whose Domain
- attribute matches the first domain in this list. If this
- fails, the second domain in the list will be used, and so on,
- until conversion is achieved. A blank domain (e.g. two
- consecutive commas) indicates that all coordinate systems
- should be considered, regardless of their domains.
-
- This list is case-insensitive and all white space is ignored.
- If you do not wish to restrict the domain in this way,
- you should supply an empty string. This is normally
- appropriate if either of the source or destination coordinate
- systems are described by Frames (rather than FrameSets),
- since there is then usually only one possible choice of
- intermediate coordinate system.
- }
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{DSBSpecFrame}{DSBSpecFrame}
- }{
- If the \htmlref{AlignSideBand}{AlignSideBand} attribute is non-zero, alignment occurs in the
- upper sideband expressed within the spectral system and standard of
- rest given by attributes \htmlref{AlignSystem}{AlignSystem} and \htmlref{AlignStdOfRest}{AlignStdOfRest}. If
- AlignSideBand is zero, the two DSBSpecFrames are aligned as if
- they were simple SpecFrames (i.e. the \htmlref{SideBand}{SideBand} is ignored).
- }
- \sstsubsection{
- Frame
- }{
- This function applies to all Frames. Alignment occurs within the
- coordinate system given by attribute AlignSystem.
- }
- \sstsubsection{
- FrameSet
- }{
- If either of the {\tt{"}}from{\tt{"}} or {\tt{"}}to{\tt{"}} parameters is a pointer to a
- FrameSet, then astConvert will attempt to convert from the
- coordinate system described by the current Frame of the {\tt{"}}from{\tt{"}}
- FrameSet to that described by the current Frame of the {\tt{"}}to{\tt{"}}
- FrameSet.
-
- To achieve this, it will consider all of the Frames within
- each FrameSet as a possible way of reaching an intermediate
- coordinate system that can be used for the conversion. There
- is then the possibility that more than one conversion path
- may exist and, unless the choice is sufficiently restricted
- by the {\tt{"}}domainlist{\tt{"}} string, the sequence in which the Frames
- are considered can be important. In this case, the search
- for a conversion path proceeds as follows:
- \sstitemlist{
-
- \sstitem
- Each field in the {\tt{"}}domainlist{\tt{"}} string is considered in turn.
-
- \sstitem
- The Frames within each FrameSet are considered in a
- specific order: (1) the base Frame is always considered
- first, (2) after this come all the other Frames in
- Frame-index order (but omitting the base and current Frames),
- (3) the current Frame is always considered last. However, if
- either FrameSet's \htmlref{Invert}{Invert} attribute is set to a non-zero value
- (so that the FrameSet is inverted), then its Frames are
- considered in reverse order. (Note that this still means that
- the base Frame is considered first and the current Frame
- last, because the Invert value will also cause these Frames
- to swap places.)
-
- \sstitem
- All source Frames are first considered (in the appropriate
- order) for conversion to the first destination Frame. If no
- suitable intermediate coordinate system emerges, they are
- then considered again for conversion to the second
- destination Frame (in the appropriate order), and so on.
-
- \sstitem
- Generally, the first suitable intermediate coordinate
- system found is used. However, the overall Mapping between
- the source and destination coordinate systems is also
- examined. Preference is given to cases where both the
- forward and inverse transformations are defined (as indicated
- by the \htmlref{TranForward}{TranForward} and \htmlref{TranInverse}{TranInverse} attributes). If only one
- transformation is defined, the forward one is preferred.
-
- \sstitem
- If the domain of the intermediate coordinate system matches
- the current {\tt{"}}domainlist{\tt{"}} field, the conversion path is
- accepted. Otherwise, the next {\tt{"}}domainlist{\tt{"}} field is considered
- and the process repeated.
-
- }
- If conversion is possible, the Base attributes of the two
- FrameSets will be modified on exit to identify the Frames
- used to access the intermediate coordinate system which was
- finally accepted.
-
- Note that it is possible to force a particular Frame within a
- FrameSet to be used as the basis for the intermediate
- coordinate system, if it is suitable, by (a) focussing
- attention on
- it by specifying its domain in the {\tt{"}}domainlist{\tt{"}} string, or (b)
- making it the base Frame, since this is always considered
- first.
- }
- \sstsubsection{
- \htmlref{SpecFrame}{SpecFrame}
- }{
- Alignment occurs within the spectral system and standard of rest
- given by attributes AlignSystem and AlignStdOfRest.
- }
- \sstsubsection{
- \htmlref{TimeFrame}{TimeFrame}
- }{
- Alignment occurs within the time system and time scale given by
- attributes AlignSystem and \htmlref{AlignTimeScale}{AlignTimeScale}.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astConvert()
- }{
- If the requested coordinate conversion is possible, the
- function returns a pointer to a FrameSet which describes the
- conversion. Otherwise, a null \htmlref{Object}{Object} pointer (AST\_\_NULL) is
- returned without error.
-
- If a FrameSet is returned, it will contain two Frames. Frame
- number 1 (its base Frame) will describe the source coordinate
- system, corresponding to the {\tt{"}}from{\tt{"}} parameter. Frame number 2
- (its current Frame) will describe the destination coordinate
- system, corresponding to the {\tt{"}}to{\tt{"}} parameter. The Mapping
- which inter-relates these two Frames will perform the
- required conversion between their respective coordinate
- systems.
-
- Note that a FrameSet may be used both as a Mapping and as a
- Frame. If the result is used as a Mapping (e.g. with
- \htmlref{astTran2}{astTran2}), then it provides a means of converting coordinates
- from the source to the destination coordinate system (or
- vice versa if its inverse transformation is selected). If it
- is used as a Frame, its attributes will describe the
- destination coordinate system.
- }
- }
- \sstexamples{
- \sstexamplesubsection{
- cvt = astConvert( a, b, {\tt{"}}{\tt{"}} );
- }{
- Attempts to convert between the coordinate systems represented
- by {\tt{"}}a{\tt{"}} and {\tt{"}}b{\tt{"}} (assumed to be Frames). If successful, a FrameSet
- is returned via the {\tt{"}}cvt{\tt{"}} pointer which may be used to apply the
- conversion to sets of coordinates (e.g. using astTran2).
- }
- \sstexamplesubsection{
- cvt = astConvert( \htmlref{astSkyFrame}{astSkyFrame}({\tt{"}}{\tt{"}}), astSkyFrame({\tt{"}}\htmlref{Equinox}{Equinox}=2005{\tt{"}}), {\tt{"}}{\tt{"}} );
- }{
- Creates a FrameSet which describes precession in the default
- FK5 celestial coordinate system between equinoxes J2000 (also
- the default) and J2005. The returned {\tt{"}}cvt{\tt{"}} pointer may then
- be passed to astTran2 to apply this precession correction to
- any number of coordinate values given in radians.
-
- Note that the returned FrameSet also contains information
- about how to format coordinate values. This means that
- setting its \htmlref{Report}{Report} attribute to 1 is a simple way to obtain
- printed output (formatted in sexagesimal notation) to show
- the coordinate values before and after conversion.
- }
- \sstexamplesubsection{
- cvt = astConvert( a, b, {\tt{"}}sky,detector,{\tt{"}} );
- }{
- Attempts to convert between the coordinate systems
- represented by the current Frames of {\tt{"}}a{\tt{"}} and {\tt{"}}b{\tt{"}}
- (now assumed to be FrameSets), via the intermediate {\tt{"}}SKY{\tt{"}}
- coordinate system. This, by default, is the Domain
- associated with a celestial coordinate system represented by
- a \htmlref{SkyFrame}{SkyFrame}.
-
- If this fails (for example, because either FrameSet lacks
- celestial coordinate information), then the user-defined
- {\tt{"}}DETECTOR{\tt{"}} coordinate system is used instead. If this also
- fails, then all other possible ways of achieving conversion
- are considered before giving up.
-
- The returned pointer {\tt{"}}cvt{\tt{"}} indicates whether conversion was
- possible and will have the value AST\_\_NULL if it was not. If
- conversion was possible, {\tt{"}}cvt{\tt{"}} will point at a new FrameSet
- describing the conversion.
-
- The Base attributes of the two FrameSets
- will be set by astConvert to indicate which of their Frames was
- used for the intermediate coordinate system. This means that
- you can subsequently determine which coordinate system was
- used by enquiring the Domain attribute of either base Frame.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The Mapping represented by the returned FrameSet results in
- alignment taking place in the coordinate system specified by the
- AlignSystem attribute of the {\tt{"}}to{\tt{"}} Frame. See the description of the
- AlignSystem attribute for further details.
-
- \sstitem
- When aligning (say) two images, which have been calibrated by
- attaching FrameSets to them, it is usually necessary to convert
- between the base Frames (representing {\tt{"}}native{\tt{"}} pixel
- coordinates) of both FrameSets. This may be achieved by
- inverting the FrameSets (e.g. using \htmlref{astInvert}{astInvert}) so as to
- interchange their base and current Frames before using
- astConvert.
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astCopy\sstlabel{astCopy}
-}{
- Copy an Object
-}{
- \sstdescription{
- This function creates a copy of an \htmlref{Object}{Object} and returns a pointer
- to the resulting new Object. It makes a {\tt{"}}deep{\tt{"}} copy, which
- contains no references to any other Object (i.e. if the original
- Object contains references to other Objects, then the actual
- data are copied, not simply the references). This means that
- modifications may safely be made to the copy without indirectly
- affecting any other Object.
- }
- \sstsynopsis{
- AstObject $*$astCopy( const AstObject $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Object to be copied.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This function applies to all Objects.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astCopy()
- }{
- Pointer to the new Object.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astCurrentTime\sstlabel{astCurrentTime}
-}{
- Return the current system time
-}{
- \sstdescription{
- This function
- returns the current system time, represented in the form specified
- by the supplied \htmlref{TimeFrame}{TimeFrame}. That is, the returned floating point
- value should be interpreted using the attribute values of the
- TimeFrame. This includes \htmlref{System}{System}, \htmlref{TimeOrigin}{TimeOrigin}, \htmlref{LTOffset}{LTOffset}, \htmlref{TimeScale}{TimeScale},
- and Unit.
- }
- \sstsynopsis{
- double astCurrentTime( AstTimeFrame $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the TimeFrame.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astCurrentTime()
- }{
- A TimeFrame axis value representing the current system time.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Values of AST\_\_BAD will be returned if this function is
- invoked with the AST error status set, or if it should fail for
- any reason.
-
- \sstitem
- It is assumes that the system time (returned by the C time()
- function) follows the POSIX standard, representing a continuous
- monotonic increasing count of SI seconds since the epoch 00:00:00
- UTC 1 January 1970 AD (equivalent to TAI with a constant offset).
- Resolution is one second.
-
- \sstitem
- An error will be reported if the TimeFrame has a TimeScale value
- which cannot be converted to TAI (e.g. {\tt{"}}angular{\tt{"}} systems such as
- UT1, GMST, LMST and LAST).
-
- \sstitem
- Any inaccuracy in the system clock will be reflected in the value
- returned by this function.
- }
- }
-}
-\sstroutine{
- astCurve\sstlabel{astCurve}
-}{
- Draw a geodesic curve
-}{
- \sstdescription{
- This function draws a geodesic curve between two points in the
- physical coordinate system of a \htmlref{Plot}{Plot}. The curve drawn is the
- path of shortest distance joining the two points (as defined by
- the \htmlref{astDistance}{astDistance} function for the current \htmlref{Frame}{Frame} of the Plot).
- For example, if the current Frame is a basic Frame, then the
- curve joining the two points will be a straight line in physical
- coordinate space. If the current Frame is more specialised and
- describes, for instance, a sky coordinate system, then the
- geodesic curve would be a great circle in physical coordinate
- space passing through the two sky positions given.
-
- Note that the geodesic curve is transformed into graphical
- coordinate space for plotting, so that a straight line in
- physical coordinates may result in a curved line being drawn if
- the \htmlref{Mapping}{Mapping} involved is non-linear. Any discontinuities in the
- Mapping between physical and graphical coordinates are
- catered for, as is any clipping established using \htmlref{astClip}{astClip}.
-
- If you need to draw many geodesic curves end-to-end, then the
- \htmlref{astPolyCurve}{astPolyCurve} function is equivalent to repeatedly using
- astCurve, but will usually be more efficient.
-
- If you need to draw curves which are not geodesics, see \htmlref{astGenCurve}{astGenCurve}
- or \htmlref{astGridLine}{astGridLine}.
- }
- \sstsynopsis{
- void astCurve( AstPlot $*$this, const double start[],
- const double finish[] )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Plot.
- }
- \sstsubsection{
- start
- }{
- An array, with one element for each axis of the Plot, giving
- the physical coordinates of the first point on the geodesic
- curve.
- }
- \sstsubsection{
- finish
- }{
- An array, with one element for each axis of the Plot, giving
- the physical coordinates of the second point on the geodesic
- curve.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- No curve is drawn if either of the {\tt{"}}start{\tt{"}} or {\tt{"}}finish{\tt{"}} arrays
- contains any coordinates with the value AST\_\_BAD.
-
- \sstitem
- An error results if the base Frame of the Plot is not 2-dimensional.
-
- \sstitem
- An error also results if the transformation between the
- current and base Frames of the Plot is not defined (i.e. the
- Plot's \htmlref{TranInverse}{TranInverse} attribute is zero).
- }
- }
-}
-\sstroutine{
- astDSBSpecFrame\sstlabel{astDSBSpecFrame}
-}{
- Create a DSBSpecFrame
-}{
- \sstdescription{
- This function creates a new \htmlref{DSBSpecFrame}{DSBSpecFrame} and optionally initialises its
- attributes.
-
- A DSBSpecFrame is a specialised form of \htmlref{SpecFrame}{SpecFrame} which represents
- positions in a spectrum obtained using a dual sideband instrument.
- Such an instrument produces a spectrum in which each point contains
- contributions from two distinctly different frequencies, one from
- the {\tt{"}}lower side band{\tt{"}} (LSB) and one from the {\tt{"}}upper side band{\tt{"}} (USB).
- Corresponding LSB and USB frequencies are connected by the fact
- that they are an equal distance on either side of a fixed central
- frequency known as the {\tt{"}}Local Oscillator{\tt{"}} (LO) frequency.
-
- When quoting a position within such a spectrum, it is necessary to
- indicate whether the quoted position is the USB position or the
- corresponding LSB position. The \htmlref{SideBand}{SideBand} attribute provides this
- indication. Another option that the SideBand attribute provides is
- to represent a spectral position by its topocentric offset from the
- LO frequency.
-
- In practice, the LO frequency is specified by giving the distance
- from the LO frequency to some {\tt{"}}central{\tt{"}} spectral position. Typically
- this central position is that of some interesting spectral feature.
- The distance from this central position to the LO frequency is known
- as the {\tt{"}}intermediate frequency{\tt{"}} (\htmlref{IF}{IF}). The value supplied for IF can
- be a signed value in order to indicate whether the LO frequency is
- above or below the central position.
- }
- \sstsynopsis{
- AstDSBSpecFrame $*$astDSBSpecFrame( const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new DSBSpecFrame. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astDSBSpecFrame()
- }{
- A pointer to the new DSBSpecFrame.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astDecompose\sstlabel{astDecompose}
-}{
- Decompose a Mapping into two component Mappings
-}{
- \sstdescription{
- This function returns pointers to two Mappings which, when applied
- either in series or parallel, are equivalent to the supplied \htmlref{Mapping}{Mapping}.
-
- Since the \htmlref{Frame}{Frame} class inherits from the Mapping class, Frames can
- be considered as special types of Mappings and so this method can
- be used to decompose either CmpMaps or CmpFrames.
- }
- \sstsynopsis{
- void astDecompose( AstMapping $*$this, AstMapping $*$$*$map1,
- AstMapping $*$$*$map2, int $*$series, int $*$invert1,
- int $*$invert2 )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Mapping.
- }
- \sstsubsection{
- map1
- }{
- Address of a location to receive a pointer to first component
- Mapping.
- }
- \sstsubsection{
- map2
- }{
- Address of a location to receive a pointer to second component
- Mapping.
- }
- \sstsubsection{
- series
- }{
- Address of a location to receive a value indicating if the
- component Mappings are applied in series or parallel. A non-zero
- value means that the supplied Mapping is equivalent to applying map1
- followed by map2 in series. A zero value means that the supplied
- Mapping is equivalent to applying map1 to the lower numbered axes
- and map2 to the higher numbered axes, in parallel.
- }
- \sstsubsection{
- invert1
- }{
- The value of the \htmlref{Invert}{Invert} attribute to be used with map1.
- }
- \sstsubsection{
- invert2
- }{
- The value of the Invert attribute to be used with map2.
- }
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{CmpMap}{CmpMap}
- }{
- If the supplied Mapping is a CmpMap, then map1 and map2 will be
- returned holding pointers to the component Mappings used to
- create the CmpMap, either in series or parallel. Note, changing
- the Invert attribute of either of the component Mappings using
- the returned pointers will have no effect on the supplied CmpMap.
- This is because the CmpMap remembers and uses the original settings
- of the Invert attributes (that is, the values of the Invert
- attributes when the CmpMap was first created). These are the
- Invert values which are returned in invert1 and invert2.
- }
- \sstsubsection{
- \htmlref{TranMap}{TranMap}
- }{
- If the supplied Mapping is a TranMap, then map1 and map2 will be
- returned holding pointers to the forward and inverse Mappings
- represented by the TranMap (zero will be returned for
- series).
- Note, changing the Invert attribute of
- either of the component Mappings using the returned pointers will
- have no effect on the supplied TranMap. This is because the TranMap
- remembers and uses the original settings of the Invert attributes
- (that is, the values of the Invert attributes when the TranMap was
- first created). These are the
- Invert values which are returned in invert1 and invert2.
- }
- \sstsubsection{
- Mapping
- }{
- For any class of Mapping other than a CmpMap, map1 will be
- returned holding a clone of the supplied Mapping pointer, and map2
- will be returned holding a NULL pointer. Invert1 will be returned
- holding the current value of the Invert attribute for the supplied
- Mapping, and invert2 will be returned holding zero.
- }
- \sstsubsection{
- \htmlref{CmpFrame}{CmpFrame}
- }{
- If the supplied Mapping is a CmpFrame, then map1 and map2 will be
- returned holding pointers to the component Frames used to
- create the CmpFrame. The component Frames are considered to be in
- applied in parallel.
- }
- \sstsubsection{
- Frame
- }{
- For any class of Frame other than a CmpFrame, map1 will be
- returned holding a clone of the supplied Frame pointer, and map2
- will be returned holding a NULL pointer.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The returned Invert values should be used in preference to the
- current values of the Invert attribute in map1 and map2. This is
- because the attributes may have changed value since the Mappings
- were combined.
-
- \sstitem
- Any changes made to the component Mappings using the returned
- pointers will be reflected in the supplied Mapping.
- }
- }
-}
-\sstroutine{
- astDelFits\sstlabel{astDelFits}
-}{
- Delete the current FITS card in a FitsChan
-}{
- \sstdescription{
- This function deletes the current FITS card from a \htmlref{FitsChan}{FitsChan}. The
- current card may be selected using the \htmlref{Card}{Card} attribute (if its index
- is known) or by using \htmlref{astFindFits}{astFindFits} (if only the FITS keyword is
- known).
-
- After deletion, the following card becomes the current card.
- }
- \sstsynopsis{
- void astDelFits( AstFitsChan $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the FitsChan.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function returns without action if the FitsChan is
- initially positioned at the {\tt{"}}end-of-file{\tt{"}} (i.e. if the Card
- attribute exceeds the number of cards in the FitsChan).
-
- \sstitem
- If there are no subsequent cards in the FitsChan, then the
- Card attribute is left pointing at the {\tt{"}}end-of-file{\tt{"}} after
- deletion (i.e. is set to one more than the number of cards in
- the FitsChan).
- }
- }
-}
-\sstroutine{
- astDelete\sstlabel{astDelete}
-}{
- Delete an Object
-}{
- \sstdescription{
- This function deletes an \htmlref{Object}{Object}, freeing all resources
- associated with it and rendering any remaining pointers to the
- Object invalid.
-
- Note that deletion is unconditional, regardless of whether other
- pointers to the Object are still in use (possibly within other
- Objects). A safer approach is to defer deletion, until all
- references to an Object have expired, by using \htmlref{astBegin}{astBegin}/\htmlref{astEnd}{astEnd}
- (together with \htmlref{astClone}{astClone} and \htmlref{astAnnul}{astAnnul} if necessary).
- }
- \sstsynopsis{
- AstObject $*$astDelete( AstObject $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Object to be deleted.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This function applies to all Objects.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astDelete()
- }{
- A null Object pointer (AST\_\_NULL) is always returned.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function attempts to execute even if the AST error status
- is set
- on entry, although no further error report will be
- made if it subsequently fails under these circumstances.
- }
- }
-}
-\sstroutine{
- astDistance\sstlabel{astDistance}
-}{
- Calculate the distance between two points in a Frame
-}{
- \sstdescription{
- This function finds the distance between two points whose \htmlref{Frame}{Frame}
- coordinates are given. The distance calculated is that along
- the geodesic curve that joins the two points.
-
- For example, in a basic Frame, the distance calculated will be
- the Cartesian distance along the straight line joining the two
- points. For a more specialised Frame describing a sky coordinate
- system, however, it would be the distance along the great circle
- passing through two sky positions.
- }
- \sstsynopsis{
- double astDistance( AstFrame $*$this,
- const double point1[], const double point2[] )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Frame.
- }
- \sstsubsection{
- point1
- }{
- An array of double, with one element for each Frame axis
- (\htmlref{Naxes}{Naxes} attribute) containing the coordinates of the first point.
- }
- \sstsubsection{
- point2
- }{
- An array of double, with one element for each Frame axis
- containing the coordinates of the second point.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astDistance
- }{
- The distance between the two points.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function will return a {\tt{"}}bad{\tt{"}} result value (AST\_\_BAD) if
- any of the input coordinates has this value.
-
- \sstitem
- A {\tt{"}}bad{\tt{"}} value will also be returned if this function is
- invoked with the AST error status set, or if it should fail for
- any reason.
- }
- }
-}
-\sstroutine{
- astDownsize\sstlabel{astDownsize}
-}{
- Reduce the number of vertices in a Polygon
-}{
- \sstdescription{
- This function returns a pointer to a new \htmlref{Polygon}{Polygon} that contains a
- subset of the vertices in the supplied Polygon. The subset is
- chosen so that the returned Polygon is a good approximation to
- the supplied Polygon, within the limits specified by the supplied
- parameter values. That is, the density of points in the returned
- Polygon is greater at points where the curvature of the boundary of
- the supplied Polygon is greater.
- }
- \sstsynopsis{
- AstPolygon $*$astDownsize( AstPolygon $*$this, double maxerr, int maxvert )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Polygon.
- }
- \sstsubsection{
- maxerr
- }{
- The maximum allowed discrepancy between the supplied and
- returned Polygons, expressed as a geodesic distance within the
- Polygon's coordinate frame. If this is zero or less, the
- returned Polygon will have the number of vertices specified by
- maxvert.
- }
- \sstsubsection{
- maxvert
- }{
- The maximum allowed number of vertices in the returned Polygon.
- If this is less than 3, the number of vertices in the returned
- Polygon will be the minimum needed to achieve the maximum
- discrepancy specified by
- maxerr.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astDownsize()
- }{
- Pointer to the new Polygon.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astEllipse\sstlabel{astEllipse}
-}{
- Create a Ellipse
-}{
- \sstdescription{
- This function creates a new \htmlref{Ellipse}{Ellipse} and optionally initialises its
- attributes.
-
- A Ellipse is a \htmlref{Region}{Region} which represents a elliptical area within the
- supplied 2-dimensional \htmlref{Frame}{Frame}.
- }
- \sstsynopsis{
- AstEllipse $*$astEllipse( AstFrame $*$frame, int form, const double centre[2],
- const double point1[2], const double point2[2],
- AstRegion $*$unc, const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- frame
- }{
- A pointer to the Frame in which the region is defined. It must
- have exactly 2 axes. A deep copy is taken of the supplied Frame.
- This means that any subsequent changes made to the Frame using the
- supplied pointer will have no effect the Region.
- }
- \sstsubsection{
- form
- }{
- Indicates how the ellipse is described by the remaining parameters.
- A value of zero indicates that the ellipse is specified by a
- centre position and two positions on the circumference. A value of
- one indicates that the ellipse is specified by its centre position,
- the half-lengths of its two axes, and the orientation of its first
- axis.
- }
- \sstsubsection{
- centre
- }{
- An array of 2 doubles,
- containing the coordinates at the centre of
- the ellipse.
- }
- \sstsubsection{
- point1
- }{
- An array of 2 doubles. If {\tt{"}}form{\tt{"}}
- is zero, this array should contain the coordinates of one of the four
- points where an axis of the ellipse crosses the circumference of the
- ellipse.
- If {\tt{"}}form{\tt{"}}
- is one, it should contain the lengths of semi-major and
- semi-minor axes of the ellipse, given as geodesic distances
- within the Frame.
- }
- \sstsubsection{
- point2
- }{
- An array of 2 doubles. If {\tt{"}}form{\tt{"}}
- is zero, this array should containing the coordinates at some other
- point on the circumference of the ellipse, distinct from
- {\tt{"}}point1{\tt{"}}. If {\tt{"}}form{\tt{"}}
- is one, the first element of this array should hold the angle
- between the second axis of the Frame and the first ellipse axis
- (i.e. the ellipse axis which is specified first in the
- {\tt{"}}point1{\tt{"}}
- array), and the second element will be ignored. The angle should be
- given in radians, measured positive in the same sense as rotation
- from the positive direction of the second Frame axis to the positive
- direction of the first Frame axis.
- }
- \sstsubsection{
- unc
- }{
- An optional pointer to an existing Region which specifies the
- uncertainties associated with the boundary of the \htmlref{Box}{Box} being created.
- The uncertainty in any point on the boundary of the Box is found by
- shifting the supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at
- the boundary point being considered. The area covered by the
- shifted uncertainty Region then represents the uncertainty in the
- boundary position. The uncertainty is assumed to be the same for
- all points.
-
- If supplied, the uncertainty Region must be of a class for which
- all instances are centro-symetric (e.g. Box, \htmlref{Circle}{Circle}, Ellipse, etc.)
- or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
- copy of the supplied Region will be taken, so subsequent changes to
- the uncertainty Region using the supplied pointer will have no
- effect on the created Box. Alternatively,
- a NULL \htmlref{Object}{Object} pointer
- may be supplied, in which case a default uncertainty is used
- equivalent to a box 1.0E-6 of the size of the Box being created.
-
- The uncertainty Region has two uses: 1) when the
- \htmlref{astOverlap}{astOverlap}
- function compares two Regions for equality the uncertainty
- Region is used to determine the tolerance on the comparison, and 2)
- when a Region is mapped into a different coordinate system and
- subsequently simplified (using
- \htmlref{astSimplify}{astSimplify}),
- the uncertainties are used to determine if the transformed boundary
- can be accurately represented by a specific shape of Region.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new Ellipse. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astEllipse()
- }{
- A pointer to the new Ellipse.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astEllipsePars\sstlabel{astEllipsePars}
-}{
- Returns the geometric parameters of an Ellipse
-}{
- \sstdescription{
- This function
- returns the geometric parameters describing the supplied ellipse.
- }
- \sstsynopsis{
- void astEllipsePars( AstEllipse $*$this, double centre[2], double $*$a,
- double $*$b, double $*$angle, double p1[2], double p2[2] )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the \htmlref{Region}{Region}.
- }
- \sstsubsection{
- centre
- }{
- The coordinates of the \htmlref{Ellipse}{Ellipse} centre are returned in this arrays.
- }
- \sstsubsection{
- a
- }{
- Returned holding the half-length of the first axis of the
- ellipse.
- }
- \sstsubsection{
- b
- }{
- Returned holding the half-length of the second axis of the
- ellipse.
- }
- \sstsubsection{
- angle
- }{
- If the coordinate system in which the Ellipse is defined has
- axes (X,Y), then
- {\tt{"}}$*$angle{\tt{"}}
- is returned holding the angle from the positive direction of
- the Y axis to the first axis of the ellipse, in radians.
- Positive rotation is in the same sense as rotation from the
- positive direction of Y to the positive direction of X.
- }
- \sstsubsection{
- p1
- }{
- An array in which to return the coordinates at one of the two ends
- of the first axis of the ellipse.
- A NULL pointer can be supplied if these coordinates are not needed.
- }
- \sstsubsection{
- p2
- }{
- An array in which to return the coordinates at one of the two ends
- of the second axis of the ellipse.
- A NULL pointer can be supplied if these coordinates are not needed.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the coordinate system represented by the Ellipse has been
- changed since it was first created, the returned parameters refer
- to the new (changed) coordinate system, rather than the original
- coordinate system. Note however that if the transformation from
- original to new coordinate system is non-linear, the shape
- represented by the supplied Ellipse object may not be an accurate
- ellipse.
-
- \sstitem
- Values of AST\_\_BAD are returned for the parameters without error
- if the ellipse is degenerate or undefined.
- }
- }
-}
-\sstroutine{
- astEnd\sstlabel{astEnd}
-}{
- End an AST context
-}{
- \sstdescription{
- This macro invokes a function to end an AST context which was
- begun with a matching invocation of \htmlref{astBegin}{astBegin}. Any \htmlref{Object}{Object}
- pointers created within this context will be annulled (just as
- if \htmlref{astAnnul}{astAnnul} had been invoked) and will cease to be valid
- afterwards, unless they have previously been exported using
- \htmlref{astExport}{astExport} or rendered exempt using \htmlref{astExempt}{astExempt}.
- If annulling a pointer causes an Object's \htmlref{RefCount}{RefCount} attribute to
- fall to zero (which happens when the last pointer to it is
- annulled), then the Object will be deleted.
- }
- \sstsynopsis{
- void astEnd
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This macro applies to all Objects.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- astEnd attempts to execute even if the AST error status is set.
-
- \sstitem
- Contexts delimited by astBegin and astEnd may be nested to any
- depth.
- }
- }
-}
-\sstroutine{
- astEscapes\sstlabel{astEscapes}
-}{
- Control whether graphical escape sequences are included in strings
-}{
- \sstdescription{
- The \htmlref{Plot}{Plot} class defines a set of escape sequences which can be
- included within a text string in order to control the appearance of
- sub-strings within the text. See the \htmlref{Escape}{Escape} attribute for a
- description of these escape sequences. It is usually inappropriate
- for AST to return strings containing such escape sequences when
- called by application code. For instance, an application which
- displays the value of the \htmlref{Title}{Title} attribute of a \htmlref{Frame}{Frame} usually does
- not want the displayed string to include potentially long escape
- sequences which a human read would have difficuly interpreting.
- Therefore the default behaviour is for AST to strip out such escape
- sequences when called by application code. This default behaviour
- can be changed using this function.
- }
- \sstsynopsis{
- int astEscapes( int new\_value )
- }
- \sstparameters{
- \sstsubsection{
- new\_value
- }{
- A flag which indicates if escapes sequences should be included
- in returned strings. If zero is supplied, escape sequences will
- be stripped out of all strings returned by any AST function. If
- a positive value is supplied, then any escape sequences will be
- retained in the value returned to the caller. If a negative
- value is supplied, the current value of the flag will be left
- unchanged.
- }
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{Object}{Object}
- }{
- This macro applies to all Objects.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astEscapes
- }{
- The value of the flag on entry to this function.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function also controls whether the
- \htmlref{astStripEscapes}{astStripEscapes}
- function removes escape sequences from the supplied string, or
- returns the supplied string without change.
-
- \sstitem
- This function attempts to execute even if an error has already
- occurred.
- }
- }
-}
-\sstroutine{
- astExempt\sstlabel{astExempt}
-}{
- Exempt an Object pointer from AST context handling
-}{
- \sstdescription{
- This function exempts an \htmlref{Object}{Object} pointer from AST context
- handling, as implemented by \htmlref{astBegin}{astBegin} and \htmlref{astEnd}{astEnd}. This means that
- the pointer will not be affected when astEnd is invoked and will
- remain active until the end of the program, or until explicitly
- annulled using \htmlref{astAnnul}{astAnnul}.
-
- If possible, you should avoid using this function when writing
- applications. It is provided mainly for developers of other
- libraries, who may wish to retain references to AST Objects in
- internal data structures, and who therefore need to avoid the
- effects of astBegin and astEnd.
- }
- \sstsynopsis{
- void astExempt( AstObject $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Object pointer to be exempted from context handling.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This function applies to all Objects.
- }
- }
-}
-\sstroutine{
- astExport\sstlabel{astExport}
-}{
- Export an Object pointer to an outer context
-}{
- \sstdescription{
- This function exports an \htmlref{Object}{Object} pointer from the current AST context
- into the context that encloses the current one. This means that
- the pointer will no longer be annulled when the current context
- is ended (with \htmlref{astEnd}{astEnd}), but only when the next outer context (if
- any) ends.
- }
- \sstsynopsis{
- void astExport( AstObject $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Object pointer to be exported.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This function applies to all Objects.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- It is only sensible to apply this function to pointers that
- have been created within (or exported to) the current context
- and have not been rendered exempt using \htmlref{astExempt}{astExempt}.
- Applying it to an unsuitable Object pointer has no effect.
- }
- }
-}
-\sstroutine{
- astFindFits\sstlabel{astFindFits}
-}{
- Find a FITS card in a FitsChan by keyword
-}{
- \sstdescription{
- This function searches for a card in a \htmlref{FitsChan}{FitsChan} by keyword. The
- search commences at the current card (identified by the \htmlref{Card}{Card}
- attribute) and ends when a card is found whose FITS keyword
- matches the template supplied, or when the last card in the
- FitsChan has been searched.
-
- If the search is successful (i.e. a card is found which matches
- the template), the contents of the card are (optionally)
- returned and the Card attribute is adjusted to identify the card
- found or, if required, the one following it. If the search is
- not successful, the function returns zero and the Card attribute
- is set to the {\tt{"}}end-of-file{\tt{"}}.
- }
- \sstsynopsis{
- int astFindFits( AstFitsChan $*$this, const char $*$name, char card[ 81 ],
- int inc )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the FitsChan.
- }
- \sstsubsection{
- name
- }{
- Pointer to a null-terminated character string containing a
- template for the keyword to be found. In the simplest case,
- this should simply be the keyword name (the search is case
- insensitive and trailing spaces are ignored). However, this
- template may also contain {\tt{"}}field specifiers{\tt{"}} which are
- capable of matching a range of characters (see the {\tt{"}}Keyword
- Templates{\tt{"}} section for details). In this case, the first card
- with a keyword which matches the template will be found. To
- find the next FITS card regardless of its keyword, you should
- use the template {\tt{"}}\%f{\tt{"}}.
- }
- \sstsubsection{
- card
- }{
- An array of at least 81 characters (to allow room for a
- terminating null)
- in which the FITS card which is found will be returned. If
- the search is not successful (or a NULL pointer is given), a
- card will not be returned.
- }
- \sstsubsection{
- inc
- }{
- If this value is zero (and the search is successful), the
- FitsChan's Card attribute will be set to the index of the card
- that was found. If it is non-zero, however, the Card
- attribute will be incremented to identify the card which
- follows the one found.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astFindFits()
- }{
- One if the search was successful, otherwise zero.
- }
- }
- \sstexamples{
- \sstexamplesubsection{
- result = astFindFits( fitschan, {\tt{"}}\%f{\tt{"}}, card, 1 );
- }{
- Returns the current card in a FitsChan and advances the Card
- attribute to identify the card that follows (the {\tt{"}}\%f{\tt{"}}
- template matches any keyword).
- }
- \sstexamplesubsection{
- result = astFindFits( fitschan, {\tt{"}}BITPIX{\tt{"}}, card, 1 );
- }{
- Searches a FitsChan for a FITS card with the {\tt{"}}BITPIX{\tt{"}} keyword
- and returns that card. The Card attribute is then incremented
- to identify the card that follows it.
- }
- \sstexamplesubsection{
- result = astFindFits( fitschan, {\tt{"}}COMMENT{\tt{"}}, NULL, 0 );
- }{
- Sets the Card attribute of a FitsChan to identify the next
- COMMENT card (if any). The card itself is not returned.
- }
- \sstexamplesubsection{
- result = astFindFits( fitschan, {\tt{"}}CRVAL\%1d{\tt{"}}, card, 1 );
- }{
- Searches a FitsChan for the next card with a keyword of the
- form {\tt{"}}CRVALi{\tt{"}} (for example, any of the keywords {\tt{"}}CRVAL1{\tt{"}},
- {\tt{"}}CRVAL2{\tt{"}} or {\tt{"}}CRVAL3{\tt{"}} would be matched). The card found (if
- any) is returned, and the Card attribute is then incremented
- to identify the following card (ready to search for another
- keyword with the same form, perhaps).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The search always starts with the current card, as identified
- by the Card attribute. To ensure you search the entire contents
- of a FitsChan, you should first clear the Card attribute (using
- \htmlref{astClear}{astClear}). This effectively {\tt{"}}rewinds{\tt{"}} the FitsChan.
-
- \sstitem
- If a search is unsuccessful, the Card attribute is set to the
- {\tt{"}}end-of-file{\tt{"}} (i.e. to one more than the number of cards in the
- FitsChan). No error occurs.
-
- \sstitem
- A value of zero will be returned if this function is invoked
- with the AST error status set, or if it should fail for any
- reason.
- }
- }
- \sstdiytopic{
- Keyword Templates
- }{
- The templates used to match FITS keywords are normally composed
- of literal characters, which must match the keyword exactly
- (apart from case). However, a template may also contain {\tt{"}}field
- specifiers{\tt{"}} which can match a range of possible characters. This
- allows you to search for keywords that contain (for example)
- numbers, where the digits comprising the number are not known in
- advance.
-
- A field specifier starts with a {\tt{"}}\%{\tt{"}} character. This is followed
- by an optional single digit (0 to 9) specifying a field
- width. Finally, there is a single character which specifies the
- type of character to be matched, as follows:
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}c{\tt{"}}: matches all upper case letters,
-
- \sstitem
- {\tt{"}}d{\tt{"}}: matches all decimal digits,
-
- \sstitem
- {\tt{"}}f{\tt{"}}: matches all characters which are permitted within a FITS
- keyword (upper case letters, digits, underscores and hyphens).
-
- }
- If the field width is omitted, the field specifier matches one
- or more characters. If the field width is zero, it matches zero
- or more characters. Otherwise, it matches exactly the number of
- characters specified. In addition to this:
-
- \sstitemlist{
-
- \sstitem
- The template {\tt{"}}\%f{\tt{"}} will match a blank FITS keyword consisting
- of 8 spaces (as well as matching all other keywords).
-
- \sstitem
- A template consisting of 8 spaces will match a blank keyword
- (only).
-
- }
- For example:
-
- \sstitemlist{
-
- \sstitem
- The template {\tt{"}}BitPix{\tt{"}} will match the keyword {\tt{"}}BITPIX{\tt{"}} only.
-
- \sstitem
- The template {\tt{"}}crpix\%1d{\tt{"}} will match keywords consisting of
- {\tt{"}}CRPIX{\tt{"}} followed by one decimal digit.
-
- \sstitem
- The template {\tt{"}}P\%c{\tt{"}} will match any keyword starting with {\tt{"}}P{\tt{"}}
- and followed by one or more letters.
-
- \sstitem
- The template {\tt{"}}E\%0f{\tt{"}} will match any keyword beginning with {\tt{"}}E{\tt{"}}.
-
- \sstitem
- The template {\tt{"}}\%f{\tt{"}} will match any keyword at all (including a
- blank one).
- }
- }
-}
-\sstroutine{
- astFindFrame\sstlabel{astFindFrame}
-}{
- Find a coordinate system with specified characteristics
-}{
- \sstdescription{
- This function uses a {\tt{"}}template{\tt{"}} \htmlref{Frame}{Frame} to search another Frame
- (or \htmlref{FrameSet}{FrameSet}) to identify a coordinate system which has a
- specified set of characteristics. If a suitable coordinate
- system can be found, the function returns a pointer to a
- FrameSet which describes the required coordinate system and how
- to convert coordinates to and from it.
-
- This function is provided to help answer general questions about
- coordinate systems, such as typically arise when coordinate
- information is imported into a program as part of an initially
- unknown dataset. For example:
- \sstitemlist{
-
- \sstitem
- Is there a wavelength scale?
-
- \sstitem
- Is there a 2-dimensional coordinate system?
-
- \sstitem
- Is there a celestial coordinate system?
-
- \sstitem
- Can I plot the data in ecliptic coordinates?
-
- }
- You can also use this function as a means of reconciling a
- user's preference for a particular coordinate system (for
- example, what type of axes to draw) with what is actually
- possible given the coordinate information available.
-
- To perform a search, you supply a {\tt{"}}target{\tt{"}} Frame (or FrameSet)
- which represents the set of coordinate systems to be searched.
- If a basic Frame is given as the target, this set of coordinate
- systems consists of the one described by this Frame, plus all
- other {\tt{"}}virtual{\tt{"}} coordinate systems which can potentially be
- reached from it by applying built-in conversions (for example,
- any of the celestial coordinate conversions known to the AST
- library would constitute a {\tt{"}}built-in{\tt{"}} conversion). If a FrameSet
- is given as the target, the set of coordinate systems to be
- searched consists of the union of those represented by all the
- individual Frames within it.
-
- To select from this large set of possible coordinate systems,
- you supply a {\tt{"}}template{\tt{"}} Frame which is an instance of the type
- of Frame you are looking for. Effectively, you then ask the
- function to {\tt{"}}find a coordinate system that looks like this{\tt{"}}.
-
- You can make your request more or less specific by setting
- attribute values for the template Frame. If a particular
- attribute is set in the template, then the function will only
- find coordinate systems which have exactly the same value for
- that attribute. If you leave a template attribute un-set,
- however, then the function has discretion about the value the
- attribute should have in any coordinate system it finds. The
- attribute will then take its value from one of the actual
- (rather than virtual) coordinate systems in the target. If the
- target is a FrameSet, its \htmlref{Current}{Current} attribute will be modified to
- indicate which of its Frames was used for this purpose.
-
- The result of this process is a coordinate system represented by
- a hybrid Frame which acquires some attributes from the template
- (but only if they were set) and the remainder from the
- target. This represents the {\tt{"}}best compromise{\tt{"}} between what you
- asked for and what was available. A \htmlref{Mapping}{Mapping} is then generated
- which converts from the target coordinate system to this hybrid
- one, and the returned FrameSet encapsulates all of this
- information.
- }
- \sstsynopsis{
- AstFrameSet $*$astFindFrame( AstFrame $*$target, AstFrame $*$template,
- const char $*$domainlist )
- }
- \sstparameters{
- \sstsubsection{
- target
- }{
- Pointer to the target Frame (or FrameSet).
-
- Note that if a FrameSet is supplied (and a suitable
- coordinate system is found), then its Current attribute will
- be modified to indicate which Frame was used to obtain
- attribute values which were not specified by the template.
- This Frame will, in some sense, represent the {\tt{"}}closest{\tt{"}}
- non-virtual coordinate system to the one you requested.
- }
- \sstsubsection{
- template
- }{
- Pointer to the template Frame, which should be an instance of
- the type of Frame you wish to find. If you wanted to find a
- Frame describing a celestial coordinate system, for example,
- then you might use a \htmlref{SkyFrame}{SkyFrame} here. See the {\tt{"}}Examples{\tt{"}}
- section for more ideas.
- }
- \sstsubsection{
- domainlist
- }{
- Pointer to a null-terminated character string containing a
- comma-separated list of Frame domains. This may be used to
- establish a priority order for the different types of
- coordinate system that might be found.
-
- The function will first try to find a suitable coordinate
- system whose \htmlref{Domain}{Domain} attribute equals the first domain in this
- list. If this fails, the second domain in the list will be
- used, and so on, until a result is obtained. A blank domain
- (e.g. two consecutive commas) indicates that any coordinate
- system is acceptable (subject to the template) regardless of
- its domain.
-
- This list is case-insensitive and all white space is ignored.
- If you do not wish to restrict the domain in this way,
- you should supply an empty string.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- This function applies to all Frames.
- }
- \sstsubsection{
- FrameSet
- }{
- If the target is a FrameSet, the possibility exists that
- several of the Frames within it might be matched by the
- template. Unless the choice is sufficiently restricted by
- the {\tt{"}}domainlist{\tt{"}} string, the sequence in which Frames are
- searched can then become important. In this case, the search
- proceeds as follows:
- \sstitemlist{
-
- \sstitem
- Each field in the {\tt{"}}domainlist{\tt{"}} string is considered in turn.
-
- \sstitem
- An attempt is made to match the template to each of the
- target's Frames in the order: (1) the current Frame, (2) the
- base Frame, (3) each remaining Frame in the order of being
- added to the target FrameSet.
-
- \sstitem
- Generally, the first match found is used. However, the
- Mapping between the target coordinate system and the
- resulting Frame is also examined. Preference is given to
- cases where both the forward and inverse transformations are
- defined (as indicated by the \htmlref{TranForward}{TranForward} and \htmlref{TranInverse}{TranInverse}
- attributes). If only one transformation is defined, the
- forward one is preferred.
-
- \sstitem
- If a match is found and the domain of the resulting Frame also
- matches the current {\tt{"}}domainlist{\tt{"}} field, it is
- accepted. Otherwise, the next {\tt{"}}domainlist{\tt{"}} field is considered
- and the process repeated.
-
- }
- If a suitable coordinate system is found, the Current
- attribute of the target FrameSet will be modified on exit to
- identify the Frame whose match with the target was eventually
- accepted.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astFindFrame()
- }{
- If the search is successful, the function returns a pointer
- to a FrameSet which contains the Frame found and a
- description of how to convert to (and from) the coordinate
- system it represents. Otherwise, a null \htmlref{Object}{Object} pointer
- (AST\_\_NULL) is returned without error.
-
- If a FrameSet is returned, it will contain two Frames. Frame
- number 1 (its base Frame) represents the target coordinate
- system and will be the same as the (base Frame of the)
- target. Frame number 2 (its current Frame) will be a Frame
- representing the coordinate system which the function
- found. The Mapping which inter-relates these two Frames will
- describe how to convert between their respective coordinate
- systems.
-
- Note that a FrameSet may be used both as a Mapping and as a
- Frame. If the result is used as a Mapping (e.g. with
- \htmlref{astTran2}{astTran2}), then it provides a means of converting coordinates
- from the target coordinate system into the new coordinate
- system that was found (and vice versa if its inverse
- transformation is selected). If it is used as a Frame, its
- attributes will describe the new coordinate system.
- }
- }
- \sstexamples{
- \sstexamplesubsection{
- result = astFindFrame( target, \htmlref{astFrame}{astFrame}( 3, {\tt{"}}{\tt{"}} ), {\tt{"}}{\tt{"}} );
- }{
- Searches for a 3-dimensional coordinate system in the target
- Frame (or FrameSet). No attributes have been set in the
- template Frame (created by astFrame), so no restriction has
- been placed on the required coordinate system, other than
- that it should have 3 dimensions. The first suitable Frame
- found will be returned as part of the {\tt{"}}result{\tt{"}} FrameSet.
- }
- \sstexamplesubsection{
- result = astFindFrame( target, \htmlref{astSkyFrame}{astSkyFrame}( {\tt{"}}{\tt{"}} ), {\tt{"}}{\tt{"}} );
- }{
- Searches for a celestial coordinate system in the target
- Frame (or FrameSet). The type of celestial coordinate system
- is unspecified, so astFindFrame will return the first one
- found as part of the {\tt{"}}result{\tt{"}} FrameSet. If the target is
- a FrameSet, then its Current attribute will be updated to
- identify the Frame that was used.
-
- If no celestial coordinate system can be found, a value of
- AST\_\_NULL will be returned without error.
- }
- \sstexamplesubsection{
- result = astFindFrame( target, astSkyFrame( {\tt{"}}\htmlref{MaxAxes}{MaxAxes}=100{\tt{"}} ), {\tt{"}}{\tt{"}} );
- }{
- This is like the last example, except that in the event of the
- target being a \htmlref{CmpFrame}{CmpFrame}, the component Frames encapsulated by the
- CmpFrame will be searched for a SkyFrame. If found, the returned
- Mapping will included a \htmlref{PermMap}{PermMap} which selects the required axes
- from the target CmpFrame.
-
- This is acomplished by setting the MaxAxes attribute of the
- template SkyFrame to a large number (larger than or equal to the
- number of axes in the target CmpFrame). This allows the SkyFrame
- to be used as a match for Frames containing from 2 to 100 axes.
- }
- \sstexamplesubsection{
- result = astFindFrame( target, astSkyFrame( {\tt{"}}\htmlref{System}{System}=FK5{\tt{"}} ), {\tt{"}}{\tt{"}} );
- }{
- Searches for an equatorial (FK5) coordinate system in the
- target. The \htmlref{Equinox}{Equinox} value for the coordinate system has not
- been specified, so will be obtained from the target. If the
- target is a FrameSet, its Current attribute will be updated
- to indicate which SkyFrame was used to obtain this value.
- }
- \sstexamplesubsection{
- result = astFindFrame( target, astFrame( 2, {\tt{"}}{\tt{"}} ), {\tt{"}}sky,pixel,{\tt{"}} );
- }{
- Searches for a 2-dimensional coordinate system in the
- target. Initially, a search is made for a suitable coordinate
- system whose Domain attribute has the value {\tt{"}}SKY{\tt{"}}. If this
- search fails, a search is then made for one with the domain
- {\tt{"}}PIXEL{\tt{"}}. If this also fails, then any 2-dimensional
- coordinate system is returned as part of the {\tt{"}}result{\tt{"}}
- FrameSet.
-
- Only if no 2-dimensional coordinate systems can be reached by
- applying built-in conversions to any of the Frames in the
- target will a value of AST\_\_NULL be returned.
- }
- \sstexamplesubsection{
- result = astFindFrame( target, astFrame( 1, {\tt{"}}Domain=WAVELENGTH{\tt{"}} ), {\tt{"}}{\tt{"}} );
- }{
- Searches for any 1-dimensional coordinate system in the
- target which has the domain {\tt{"}}WAVELENGTH{\tt{"}}.
- }
- \sstexamplesubsection{
- result = astFindFrame( target, astFrame( 1, {\tt{"}}{\tt{"}} ), {\tt{"}}wavelength{\tt{"}} );
- }{
- This example has exactly the same effect as that above. It
- illustrates the equivalence of the template's Domain attribute
- and the fields in the {\tt{"}}domainlist{\tt{"}} string.
- }
- \sstexamplesubsection{
- result = astFindFrame( target, astFrame( 1, {\tt{"}}MaxAxes=3{\tt{"}} ), {\tt{"}}{\tt{"}} );
- }{
- This is a more advanced example which will search for any
- coordinate system in the target having 1, 2 or 3
- dimensions. The Frame returned (as part of the {\tt{"}}result{\tt{"}}
- FrameSet) will always be 1-dimensional, but will be related
- to the coordinate system that was found by a suitable Mapping
- (e.g. a PermMap) which simply extracts the first axis.
-
- If we had wanted a Frame representing the actual (1, 2 or
- 3-dimensional) coordinate system found, we could set the
- \htmlref{PreserveAxes}{PreserveAxes} attribute to a non-zero value in the template.
- }
- \sstexamplesubsection{
- result = astFindFrame( target, astSkyFrame( {\tt{"}}\htmlref{Permute}{Permute}=0{\tt{"}} ), {\tt{"}}{\tt{"}} );
- }{
- Searches for any celestial coordinate system in the target,
- but only finds one if its axes are in the conventional
- (longitude,latitude) order and have not been permuted
- (e.g. with \htmlref{astPermAxes}{astPermAxes}).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The Mapping represented by the returned FrameSet results in
- alignment taking place in the coordinate system specified by the
- \htmlref{AlignSystem}{AlignSystem} attribute of the {\tt{"}}template{\tt{"}} Frame. See the description
- of the AlignSystem attribute for further details.
-
- \sstitem
- Beware of setting the Domain attribute of the template and then
- using a {\tt{"}}domainlist{\tt{"}} string which does not include the template's domain
- (or a blank field). If you do so, no coordinate system will be
- found.
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- More on Using Templates
- }{
- A Frame (describing a coordinate system) will be found by this
- function if (a) it is {\tt{"}}matched{\tt{"}} by the template you supply, and
- (b) the value of its Domain attribute appears in the {\tt{"}}domainlist{\tt{"}}
- string (except that a blank field in this string permits any
- domain). A successful match by the template depends on a number
- of criteria, as outlined below:
- \sstitemlist{
-
- \sstitem
- In general, a template will only match another Frame which
- belongs to the same class as the template, or to a derived (more
- specialised) class. For example, a SkyFrame template will match
- any other SkyFrame, but will not match a basic
- Frame. Conversely, a basic Frame template will match any class
- of Frame.
-
- \sstitem
- The exception to this is that a Frame of any class can be used to
- match a CmpFrame, if that CmpFrame contains a Frame of the same
- class as the template. Note however, the MaxAxes and \htmlref{MinAxes}{MinAxes}
- attributes of the template must be set to suitable values to allow
- it to match the CmpFrame. That is, the MinAxes attribute must be
- less than or equal to the number of axes in the target, and the MaxAxes
- attribute must be greater than or equal to the number of axes in
- the target.
-
- \sstitem
- If using a CmpFrame as a template frame, the MinAxes and MaxAxes
- for the template are determined by the MinAxes and MaxAxes values of
- the component Frames within the template. So if you want a template
- CmpFrame to be able to match Frames with different numbers of axes,
- then you must set the MaxAxes and/or MinAxes attributes in the component
- template Frames, before combining them together into the template
- CmpFrame.
-
- \sstitem
- If a template has a value set for any of its main attributes, then
- it will only match Frames which have an identical value for that
- attribute (or which can be transformed, using a built-in
- conversion, so that they have the required value for that
- attribute). If any attribute in the template is un-set, however,
- then Frames are matched regardless of the value they may have
- for that attribute. You may therefore make a template more or
- less specific by choosing the attributes for which you set
- values. This requirement does not apply to 'descriptive' attributes
- such as titles, labels, symbols, etc.
-
- \sstitem
- An important application of this principle involves the Domain
- attribute. Setting the Domain attribute of the template has the
- effect of restricting the search to a particular type of Frame
- (with the domain you specify). Conversely, if the Domain
- attribute is not set in the template, then the domain of the
- Frame found is not relevant, so all Frames are searched. Note
- that the
- {\tt{"}}domainlist{\tt{"}} string provides an alternative way of restricting the
- search in the same manner, but is a more convenient interface if
- you wish to search automatically for another domain if the first
- search fails.
-
- \sstitem
- Normally, a template will only match a Frame which has the
- same number of axes as itself. However, for some classes of
- template, this default behaviour may be changed by means of the
- MinAxes, MaxAxes and \htmlref{MatchEnd}{MatchEnd} attributes. In addition, the
- behaviour of a template may be influenced by its Permute and
- PreserveAxes attributes, which control whether it matches Frames
- whose axes have been permuted, and whether this permutation is
- retained in the Frame which is returned (as opposed to returning
- the axes in the order specified in the template, which is the
- default behaviour). You should consult the descriptions of these
- attributes for details of this more advanced use of templates.
- }
- }
-}
-\sstroutine{
- astFitsChan\sstlabel{astFitsChan}
-}{
- Create a FitsChan
-}{
- \sstdescription{
- This function creates a new \htmlref{FitsChan}{FitsChan} and optionally initialises
- its attributes.
-
- A FitsChan is a specialised form of \htmlref{Channel}{Channel} which supports I/O
- operations involving the use of FITS (Flexible Image Transport
- \htmlref{System}{System}) header cards. Writing an \htmlref{Object}{Object} to a FitsChan (using
- \htmlref{astWrite}{astWrite}) will, if the Object is suitable, generate a
- description of that Object composed of FITS header cards, and
- reading from a FitsChan will create a new Object from its FITS
- header card description.
-
- While a FitsChan is active, it represents a buffer which may
- contain zero or more 80-character {\tt{"}}header cards{\tt{"}} conforming to
- FITS conventions. Any sequence of FITS-conforming header cards
- may be stored, apart from the {\tt{"}}END{\tt{"}} card whose existence is
- merely implied. The cards may be accessed in any order by using
- the FitsChan's integer \htmlref{Card}{Card} attribute, which identifies a {\tt{"}}current{\tt{"}}
- card, to which subsequent operations apply. Searches
- based on keyword may be performed (using \htmlref{astFindFits}{astFindFits}), new
- cards may be inserted (\htmlref{astPutFits}{astPutFits}, \htmlref{astPutCards}{astPutCards}, \htmlref{astSetFits$<$X$>$}{astSetFitsX}) and
- existing ones may be deleted (\htmlref{astDelFits}{astDelFits}) or changed (astSetFits$<$X$>$).
-
- When you create a FitsChan, you have the option of specifying
- {\tt{"}}source{\tt{"}} and {\tt{"}}sink{\tt{"}} functions which connect it to external data
- stores by reading and writing FITS header cards. If you provide
- a source function, it is used to fill the FitsChan with header cards
- when it is accessed for the first time. If you do not provide a source
- function, the FitsChan remains empty until you explicitly enter
- data into it (e.g. using astPutCards, astPutFits or astWrite). If you
- provide a sink function, it is used to deliver any remaining
- contents of a FitsChan to an external data store when the
- FitsChan is deleted. If you do not provide a sink function, any
- header cards remaining when the FitsChan is deleted will be
- lost, so you should arrange to extract them first if necessary
- (e.g. using astFindFits or \htmlref{astRead}{astRead}).
-
- Coordinate system information may be described using FITS header
- cards using several different conventions, termed
- {\tt{"}}encodings{\tt{"}}. When an AST Object is written to (or read from) a
- FitsChan, the value of the FitsChan's \htmlref{Encoding}{Encoding} attribute
- determines how the Object is converted to (or from) a
- description involving FITS header cards. In general, different
- encodings will result in different sets of header cards to
- describe the same Object. Examples of encodings include the DSS
- encoding (based on conventions used by the STScI Digitised Sky
- Survey data), the FITS-WCS encoding (based on a proposed FITS
- standard) and the NATIVE encoding (a near loss-less way of
- storing AST Objects in FITS headers).
-
- The available encodings differ in the range of Objects they can
- represent, in the number of Object descriptions that can coexist
- in the same FitsChan, and in their accessibility to other
- (external) astronomy applications (see the Encoding attribute
- for details). Encodings are not necessarily mutually exclusive
- and it may sometimes be possible to describe the same Object in
- several ways within a particular set of FITS header cards by
- using several different encodings.
-
- The detailed behaviour of astRead and astWrite, when used with
- a FitsChan, depends on the encoding in use. In general, however,
- all use of astRead is destructive, so that FITS header cards
- are consumed in the process of reading an Object, and are
- removed from the FitsChan (this deletion can be prevented for
- specific cards by calling the
- \htmlref{astRetainFits}{astRetainFits} function).
-
- If the encoding in use allows only a single Object description
- to be stored in a FitsChan (e.g. the DSS, FITS-WCS and FITS-IRAF
- encodings), then write operations using astWrite will
- over-write any existing Object description using that
- encoding. Otherwise (e.g. the NATIVE encoding), multiple Object
- descriptions are written sequentially and may later be read
- back in the same sequence.
- }
- \sstsynopsis{
- AstFitsChan $*$astFitsChan( const char $*$($*$ source)( void ),
- void ($*$ sink)( const char $*$ ),
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- source
- }{
- Pointer to a source function which takes no arguments and
- returns a pointer to a null-terminated string. This function
- will be used by the FitsChan to obtain input FITS header
- cards. On each invocation, it should read the next input card
- from some external source (such as a FITS file), and return a
- pointer to the (null-terminated) contents of the card. It
- should return a NULL pointer when there are no more cards to
- be read.
-
- If {\tt{"}}source{\tt{"}} is NULL, the FitsChan will remain empty until
- cards are explicitly stored in it (e.g. using astPutCards or astPutFits).
- }
- \sstsubsection{
- sink
- }{
- Pointer to a sink function that takes a pointer to a
- null-terminated string as an argument and returns void. This
- function will be used by the FitsChan to deliver any FITS
- header cards it contains when it is finally deleted. On
- each invocation, it should deliver the contents of the character
- string passed to it as a FITS header card to some external
- data store (such as a FITS file).
-
- If {\tt{"}}sink{\tt{"}} is NULL,
- the contents of the FitsChan will not be written out when it
- is deleted.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new FitsChan. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astFitsChan()
- }{
- A pointer to the new FitsChan.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- No FITS {\tt{"}}END{\tt{"}} card will be written via the sink function. You
- should add this card yourself after the FitsChan has been
- deleted.
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- astFluxFrame\sstlabel{astFluxFrame}
-}{
- Create a FluxFrame
-}{
- \sstdescription{
- This function creates a new \htmlref{FluxFrame}{FluxFrame} and optionally initialises
- its attributes.
-
- A FluxFrame is a specialised form of one-dimensional \htmlref{Frame}{Frame} which
- represents various systems used to represent the signal level in an
- observation. The particular coordinate system to be used is specified
- by setting the FluxFrame's \htmlref{System}{System} attribute qualified, as necessary, by
- other attributes such as the units, etc (see the description of the
- System attribute for details).
-
- All flux values are assumed to be measured at the same frequency or
- wavelength (as given by the \htmlref{SpecVal}{SpecVal} attribute). Thus this class is
- more appropriate for use with images rather than spectra.
- }
- \sstsynopsis{
- AstFluxFrame $*$astFluxFrame( double specval, AstSpecFrame $*$specfrm,
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- specval
- }{
- The spectral value to which the flux values refer, given in the
- spectral coordinate system specified by
- {\tt{"}}specfrm{\tt{"}}. The value supplied for the {\tt{"}}specval{\tt{"}}
- parameter becomes the default value for the SpecVal attribute.
- A value of AST\_\_BAD may be supplied if the spectral position is
- unknown, but this may result in it not being possible for the
- \htmlref{astConvert}{astConvert}
- function to determine a \htmlref{Mapping}{Mapping} between the new FluxFrame and
- some other FluxFrame.
- }
- \sstsubsection{
- specfrm
- }{
- A pointer to a \htmlref{SpecFrame}{SpecFrame} describing the spectral coordinate system
- in which the
- {\tt{"}}specval{\tt{"}}
- parameter is given. A deep copy of this object is taken, so any
- subsequent changes to the SpecFrame using the supplied pointer will
- have no effect on the new FluxFrame.
- A NULL pointer can be supplied if AST\_\_BAD is supplied for {\tt{"}}specval{\tt{"}}.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new FluxFrame. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- If no initialisation is required, a zero-length string may be
- supplied.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astFluxFrame()
- }{
- A pointer to the new FluxFrame.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When conversion between two FluxFrames is requested (as when
- supplying FluxFrames to astConvert),
- account will be taken of the nature of the flux coordinate systems
- they represent, together with any qualifying attribute values, including
- the \htmlref{AlignSystem}{AlignSystem} attribute. The results will therefore fully reflect the
- relationship between positions measured in the two systems. In addition,
- any difference in the Unit attributes of the two systems will also be
- taken into account.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astFormat\sstlabel{astFormat}
-}{
- Format a coordinate value for a Frame axis
-}{
- \sstdescription{
- This function returns a pointer to a string containing the
- formatted (character) version of a coordinate value for a \htmlref{Frame}{Frame}
- axis. The formatting applied is determined by the Frame's
- attributes and, in particular, by any Format attribute string
- that has been set for the axis. A suitable default format (based
- on the Digits attribute value) will be applied if necessary.
- }
- \sstsynopsis{
- const char $*$astFormat( AstFrame $*$this, int axis, double value )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Frame.
- }
- \sstsubsection{
- axis
- }{
- The number of the Frame axis for which formatting is to be
- performed (axis numbering starts at 1 for the first axis).
- }
- \sstsubsection{
- value
- }{
- The coordinate value to be formatted.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astFormat()
- }{
- A pointer to a null-terminated string containing the formatted
- value.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The returned pointer is guaranteed to remain valid and the
- string to which it points will not be over-written for a total
- of 50 successive invocations of this function. After this, the
- memory containing the string may be re-used, so a copy of the
- string should be made if it is needed for longer than this.
-
- \sstitem
- A formatted value may be converted back into a numerical (double)
- value using \htmlref{astUnformat}{astUnformat}.
-
- \sstitem
- A NULL pointer will be returned if this function is invoked
- with the AST error status set, or if it should fail for any
- reason.
- }
- }
-}
-\sstroutine{
- astFrame\sstlabel{astFrame}
-}{
- Create a Frame
-}{
- \sstdescription{
- This function creates a new \htmlref{Frame}{Frame} and optionally initialises its
- attributes.
-
- A Frame is used to represent a coordinate system. It does this
- in rather the same way that a frame around a graph describes the
- coordinate space in which data are plotted. Consequently, a
- Frame has a \htmlref{Title}{Title} (string) attribute, which describes the
- coordinate space, and contains axes which in turn hold
- information such as Label and Units strings which are used for
- labelling (e.g.) graphical output. In general, however, the
- number of axes is not restricted to two.
-
- Functions are available for converting Frame coordinate values
- into a form suitable for display, and also for calculating
- distances and offsets between positions within the Frame.
-
- Frames may also contain knowledge of how to transform to and
- from related coordinate systems.
- }
- \sstsynopsis{
- AstFrame $*$astFrame( int naxes, const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- naxes
- }{
- The number of Frame axes (i.e. the number of dimensions of
- the coordinate space which the Frame describes).
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new Frame. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- If no initialisation is required, a zero-length string may be
- supplied.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astFrame()
- }{
- A pointer to the new Frame.
- }
- }
- \sstexamples{
- \sstexamplesubsection{
- frame = astFrame( 2, {\tt{"}}Title=Energy Spectrum: \htmlref{Plot}{Plot} \%d{\tt{"}}, n );
- }{
- Creates a new 2-dimensional Frame and initialises its Title
- attribute to the string {\tt{"}}Energy Spectrum: Plot $<$n$>${\tt{"}}, where
- $<$n$>$ takes the value of the int variable {\tt{"}}n{\tt{"}}.
- }
- \sstexamplesubsection{
- frame = astFrame( 2, {\tt{"}}Label(1)=Energy, Label(2)=Response{\tt{"}} );
- }{
- Creates a new 2-dimensional Frame and initialises its axis
- Label attributes to suitable string values.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astFrameSet\sstlabel{astFrameSet}
-}{
- Create a FrameSet
-}{
- \sstdescription{
- This function creates a new \htmlref{FrameSet}{FrameSet} and optionally initialises
- its attributes.
-
- A FrameSet consists of a set of one or more Frames (which
- describe coordinate systems), connected together by Mappings
- (which describe how the coordinate systems are inter-related). A
- FrameSet makes it possible to obtain a \htmlref{Mapping}{Mapping} between any pair
- of these Frames (i.e. to convert between any of the coordinate
- systems which it describes). The individual Frames are
- identified within the FrameSet by an integer index, with Frames
- being numbered consecutively from one as they are added to the
- FrameSet.
-
- Every FrameSet has a {\tt{"}}base{\tt{"}} \htmlref{Frame}{Frame} and a {\tt{"}}current{\tt{"}} Frame (which
- are allowed to be the same). Any of the Frames may be nominated
- to hold these positions, and the choice is determined by the
- values of the FrameSet's \htmlref{Base}{Base} and \htmlref{Current}{Current} attributes, which hold
- the indices of the relevant Frames. By default, the first Frame
- added to a FrameSet is its base Frame, and the last one added is
- its current Frame.
-
- The base Frame describes the {\tt{"}}native{\tt{"}} coordinate system of
- whatever the FrameSet is used to calibrate (e.g. the pixel
- coordinates of an image) and the current Frame describes the
- {\tt{"}}apparent{\tt{"}} coordinate system in which it should be viewed
- (e.g. displayed, etc.). Any further Frames represent a library
- of alternative coordinate systems, which may be selected by
- making them current.
-
- When a FrameSet is used in a context that requires a Frame,
- (e.g. obtaining its \htmlref{Title}{Title} value, or number of axes), the current
- Frame is used. A FrameSet may therefore be used in place of its
- current Frame in most situations.
-
- When a FrameSet is used in a context that requires a Mapping,
- the Mapping used is the one between its base Frame and its
- current Frame. Thus, a FrameSet may be used to convert {\tt{"}}native{\tt{"}}
- coordinates into {\tt{"}}apparent{\tt{"}} ones, and vice versa. Like any
- Mapping, a FrameSet may also be inverted (see \htmlref{astInvert}{astInvert}), which
- has the effect of interchanging its base and current Frames and
- hence of reversing the Mapping between them.
-
- Regions may be added into a FrameSet (since a \htmlref{Region}{Region} is a type of
- Frame), either explicitly or as components within CmpFrames. In this
- case the Mapping between a pair of Frames within a FrameSet will
- include the effects of the clipping produced by any Regions included
- in the path between the Frames.
- }
- \sstsynopsis{
- AstFrameSet $*$astFrameSet( AstFrame $*$frame, const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- frame
- }{
- Pointer to the first Frame to be inserted into the
- FrameSet. This initially becomes both the base and the
- current Frame. (Further Frames may be added using the
- \htmlref{astAddFrame}{astAddFrame} function.)
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new FrameSet. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- If no initialisation is required, a zero-length string may be
- supplied.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astFrameSet()
- }{
- A pointer to the new FrameSet.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If a pointer to an existing FrameSet is given for the {\tt{"}}frame{\tt{"}}
- parameter, then the new FrameSet will (as a special case) be
- initialised to contain the same Frames and Mappings, and to have
- the same attribute values, as the one supplied. This process is
- similar to making a copy of a FrameSet (see \htmlref{astCopy}{astCopy}), except
- that the Frames and Mappings contained in the original are not
- themselves copied, but are shared by both FrameSets.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astGenCurve\sstlabel{astGenCurve}
-}{
- Draw a generalized curve
-}{
- \sstdescription{
- This function draws a general user-defined curve defined by the
- supplied \htmlref{Mapping}{Mapping}. Note that the curve is transformed into graphical
- coordinate space for plotting, so that a straight line in
- physical coordinates may result in a curved line being drawn if
- the Mapping involved is non-linear. Any discontinuities in the
- Mapping between physical and graphical coordinates are
- catered for, as is any clipping established using \htmlref{astClip}{astClip}.
-
- If you need to draw simple straight lines (geodesics), \htmlref{astCurve}{astCurve}
- or \htmlref{astPolyCurve}{astPolyCurve} will usually be easier to use and faster.
- }
- \sstsynopsis{
- void astGenCurve( AstPlot $*$this, astMapping $*$map )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the \htmlref{Plot}{Plot}.
- }
- \sstsubsection{
- map
- }{
- Pointer to a Mapping. This Mapping should have 1 input
- coordinate representing offset along the required curve,
- normalized so that the start of the curve is at offset 0.0,
- and the end of the curve is at offset 1.0. Note, this offset
- does not need to be linearly related to distance along the curve.
- The number of output coordinates should equal the number of axes
- in the current \htmlref{Frame}{Frame} of the Plot. The Mapping should map a
- specified offset along the curve, into the corresponding
- coordinates in the current Frame of the Plot. The inverse
- transformation need not be defined.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- An error results if the base Frame of the Plot is not 2-dimensional.
-
- \sstitem
- An error also results if the transformation between the
- current and base Frames of the Plot is not defined (i.e. the
- Plot's \htmlref{TranInverse}{TranInverse} attribute is zero).
- }
- }
-}
-\sstroutine{
- astGet$<$X$>$\sstlabel{astGetX}
-}{
- Get an attribute value for an Object
-}{
- \sstdescription{
- This is a family of functions which return a specified attribute
- value for an \htmlref{Object}{Object} using one of several different data
- types. The type is selected by replacing $<$X$>$ in the function name
- by C, D, F, I or L, to obtain a result in const char$*$ (i.e. string),
- double, float, int, or long format, respectively.
-
- If possible, the attribute value is converted to the type you
- request. If conversion is not possible, an error will result.
- }
- \sstsynopsis{
- $<$X$>$type astGet$<$X$>$( AstObject $*$this, const char $*$attrib )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Object.
- }
- \sstsubsection{
- attrib
- }{
- Pointer to a null-terminated string containing the name of
- the attribute whose value is required.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- These functions apply to all Objects.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astGet$<$X$>$()
- }{
- The attribute value, in the data type corresponding to $<$X$>$ (or,
- in the case of astGetC, a pointer to a constant null-terminated
- character string containing this value).
- }
- }
- \sstexamples{
- \sstexamplesubsection{
- printf( {\tt{"}}\htmlref{RefCount}{RefCount} = \%d$\backslash$n{\tt{"}}, astGetI( z, {\tt{"}}RefCount{\tt{"}} ) );
- }{
- Prints the RefCount attribute value for Object {\tt{"}}z{\tt{"}} as an int.
- }
- \sstexamplesubsection{
- title = astGetC( axis, {\tt{"}}\htmlref{Title}{Title}{\tt{"}} );
- }{
- Obtains a pointer to a null-terminated character string containing
- the Title attribute of Object {\tt{"}}axis{\tt{"}}.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Attribute names are not case sensitive and may be surrounded
- by white space.
-
- \sstitem
- An appropriate {\tt{"}}null{\tt{"}} value will be returned if this function
- is invoked with the AST error status set, or if it should
- fail for any reason. This null value is zero for numeric
- values and NULL for pointer values.
-
- \sstitem
- The pointer returned by astGetC is guaranteed to remain valid
- and the string to which it points will not be over-written for a
- total of 50 successive invocations of this function. After this,
- the memory containing the string may be re-used, so a copy of
- the string should be made if it is needed for longer than this.
- }
- }
-}
-\sstroutine{
- astGetActiveUnit\sstlabel{astGetActiveUnit}
-}{
- Determines how the Unit attribute will be used
-}{
- \sstdescription{
- This function
- returns the current value of the ActiveUnit flag for a \htmlref{Frame}{Frame}. See
- the description of the \htmlref{astSetActiveUnit}{astSetActiveUnit} function
- for a description of the ActiveUnit flag.
- }
- \sstsynopsis{
- int astGetActiveUnit( AstFrame $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Frame.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astGetActiveUnit
- }{
- The current value of the ActiveUnit flag.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A zero value will be returned if this function is
- invoked with the AST error status set, or if it should fail for
- any reason.
- }
- }
-}
-\sstroutine{
- astGetFits$<$X$>$\sstlabel{astGetFitsX}
-}{
- Get a named keyword value from a FitsChan
-}{
- \sstdescription{
- This is a family of functions which gets a value for a named keyword
- from a \htmlref{FitsChan}{FitsChan} using one of several different data types. The data
- type of the returned value is selected by replacing $<$X$>$ in the function
- name by one of the following strings representing the recognised FITS
- data types:
-
- The data type of the returned value is selected by replacing $<$X$>$ in the
- function name by one of the following strings representing the
- recognised FITS data types:
-
- \sstitemlist{
-
- \sstitem
- CF - Complex floating point values.
-
- \sstitem
- CI - Complex integer values.
-
- \sstitem
- F - Floating point values.
-
- \sstitem
- I - Integer values.
-
- \sstitem
- L - Logical (i.e. boolean) values.
-
- \sstitem
- S - String values.
-
- \sstitem
- CN - A {\tt{"}}CONTINUE{\tt{"}} value, these are treated like string values, but
- are encoded without an equals sign.
-
- }
- The data type of the {\tt{"}}value{\tt{"}}
- parameter
- depends on $<$X$>$ as follows:
-
- \sstitemlist{
-
- \sstitem
- CF - {\tt{"}}double $*${\tt{"}} (a pointer to a 2 element array to hold the real and
- imaginary parts of the complex value).
-
- \sstitem
- CI - {\tt{"}}int $*${\tt{"}} (a pointer to a 2 element array to hold the real and
- imaginary parts of the complex value).
-
- \sstitem
- F - {\tt{"}}double $*${\tt{"}}.
-
- \sstitem
- I - {\tt{"}}int $*${\tt{"}}.
-
- \sstitem
- L - {\tt{"}}int $*${\tt{"}}.
-
- \sstitem
- S - {\tt{"}}char $*$$*${\tt{"}} (a pointer to a static {\tt{"}}char{\tt{"}} array is returned at the
- location given by the {\tt{"}}value{\tt{"}} parameter, Note, the stored string
- may change on subsequent invocations of astGetFitsS so a
- permanent copy should be taken of the string if necessary).
-
- \sstitem
- CN - Like{\tt{"}}S{\tt{"}}.
- }
- }
- \sstsynopsis{
- int astGetFits$<$X$>$( AstFitsChan $*$this, const char $*$name, $<$X$>$type $*$value )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the FitsChan.
- }
- \sstsubsection{
- name
- }{
- Pointer to a null-terminated character string
- containing the FITS keyword name. This may be a complete FITS
- header card, in which case the keyword to use is extracted from
- it. No more than 80 characters are read from this string.
- }
- \sstsubsection{
- value
- }{
- A pointer to a
- buffer to receive the keyword value. The data type depends on $<$X$>$
- as described above.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astGetFits$<$X$>$$<$X$>$()
- }{
- A value of zero
- is returned if the keyword was not found in the FitsChan (no error
- is reported). Otherwise, a value of
- one
- is returned.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The card following the current card is checked first. If this is
- not the required card, then the rest of the FitsChan is searched,
- starting with the first card added to the FitsChan. Therefore cards
- should be accessed in the order they are stored in the FitsChan (if
- possible) as this will minimise the time spent searching for cards.
-
- \sstitem
- If the requested card is found, it becomes the current card,
- otherwise the current card is left pointing at the {\tt{"}}end-of-file{\tt{"}}.
-
- \sstitem
- If the stored keyword value is not of the requested type, it is
- converted into the requested type.
-
- \sstitem
- If the keyword is found in the FitsChan, but has no associated
- value, an error is reported. If necessary, the
- \htmlref{astTestFits}{astTestFits}
- function can be used to determine if the keyword has a defined
- value in the FitsChan prior to calling this function.
-
- \sstitem
- An error will be reported if the keyword name does not conform
- to FITS requirements.
-
- \sstitem
- Zero
-
- \sstitem
- .FALSE.
- is returned as the function value if an error has already occurred,
- or if this function should fail for any reason.
-
- \sstitem
- The FITS standard says that string keyword values should be
- padded with trailing spaces if they are shorter than 8 characters.
- For this reason, trailing spaces are removed from the string
- returned by
- astGetFitsS
- if the original string (including any trailing spaces) contains 8
- or fewer characters. Trailing spaces are not removed from longer
- strings.
- }
- }
-}
-\sstroutine{
- astGetFrame\sstlabel{astGetFrame}
-}{
- Obtain a pointer to a specified Frame in a FrameSet
-}{
- \sstdescription{
- This function returns a pointer to a specified \htmlref{Frame}{Frame} in a
- \htmlref{FrameSet}{FrameSet}.
- }
- \sstsynopsis{
- AstFrame $*$astGetFrame( AstFrameSet $*$this, int iframe )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the FrameSet.
- }
- \sstsubsection{
- iframe
- }{
- The index of the required Frame within the FrameSet. This
- value should lie in the range from 1 to the number of Frames
- in the FrameSet (as given by its \htmlref{Nframe}{Nframe} attribute).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astGetFrame()
- }{
- A pointer to the requested Frame.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A value of AST\_\_BASE or AST\_\_CURRENT may be given for the
- {\tt{"}}iframe{\tt{"}} parameter to specify the base Frame or the current
- Frame respectively.
-
- \sstitem
- This function increments the \htmlref{RefCount}{RefCount} attribute of the
- selected Frame by one.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astGetGrfContext\sstlabel{astGetGrfContext}
-}{
- Return the KeyMap that describes a Plot's graphics context
-}{
- \sstdescription{
- This function
- returns a reference to a \htmlref{KeyMap}{KeyMap} that will be passed to any drawing
- functions registered using \htmlref{astGrfSet}{astGrfSet}.
- This KeyMap can be used by an application to pass information to
- the drawing functions
- about the context in which they are being called. The contents of
- the KeyMap are never accessed byt the \htmlref{Plot}{Plot} class itself.
- }
- \sstsynopsis{
- AstKeyMap $*$astGetGrfContext( AstPlot $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Plot.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astGetGrfContext()
- }{
- A pointer to the graphics context KeyMap. The returned pointer
- should be annulled when it is no longer needed.
- }
- }
-}
-\sstroutine{
- astGetMapping\sstlabel{astGetMapping}
-}{
- Obtain a Mapping that converts between two Frames in a FrameSet
-}{
- \sstdescription{
- This function returns a pointer to a \htmlref{Mapping}{Mapping} that will convert
- coordinates between the coordinate systems represented by two
- Frames in a \htmlref{FrameSet}{FrameSet}.
- }
- \sstsynopsis{
- AstMapping $*$astGetMapping( AstFrameSet $*$this, int iframe1, int iframe2 )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the FrameSet.
- }
- \sstsubsection{
- iframe1
- }{
- The index of the first \htmlref{Frame}{Frame} in the FrameSet. This Frame describes
- the coordinate system for the {\tt{"}}input{\tt{"}} end of the Mapping.
- }
- \sstsubsection{
- iframe2
- }{
- The index of the second Frame in the FrameSet. This Frame
- describes the coordinate system for the {\tt{"}}output{\tt{"}} end of the
- Mapping.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astGetMapping()
- }{
- Pointer to a Mapping whose forward transformation converts
- coordinates from the first coordinate system to the second
- one, and whose inverse transformation converts coordinates in
- the opposite direction.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The returned Mapping will include the clipping effect of any
- Regions which occur on the path between the two supplied Frames
- (this includes the two supplied Frames themselves).
-
- \sstitem
- The values given for the {\tt{"}}iframe1{\tt{"}} and {\tt{"}}iframe2{\tt{"}} parameters
- should lie in the range from 1 to the number of Frames in the
- FrameSet (as given by its \htmlref{Nframe}{Nframe} attribute). A value of
- AST\_\_BASE or AST\_\_CURRENT may also be given to identify the
- FrameSet's base Frame or current Frame respectively. It is
- permissible for both these parameters to have the same value, in
- which case a unit Mapping (\htmlref{UnitMap}{UnitMap}) is returned.
-
- \sstitem
- It should always be possible to generate the Mapping
- requested, but this does necessarily guarantee that it will be
- able to perform the required coordinate conversion. If
- necessary, the \htmlref{TranForward}{TranForward} and \htmlref{TranInverse}{TranInverse} attributes of the
- returned Mapping should be inspected to determine if the
- required transformation is available.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astGetRefPos\sstlabel{astGetRefPos}
-}{
- Return the reference position in a specified celestial coordinate system
-}{
- \sstdescription{
- This function
- returns the reference position (specified by attributes \htmlref{RefRA}{RefRA} and
- \htmlref{RefDec}{RefDec}) converted to the celestial coordinate system represented by
- a supplied \htmlref{SkyFrame}{SkyFrame}. The celestial longitude and latitude values
- are returned in radians.
- }
- \sstsynopsis{
- void astGetRefPos( AstSpecFrame $*$this, AstSkyFrame $*$frm, double $*$lon,
- double $*$lat )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the \htmlref{SpecFrame}{SpecFrame}.
- }
- \sstsubsection{
- frm
- }{
- Pointer to the SkyFrame which defines the required celestial
- coordinate system.
- If NULL
- is supplied, then the longitude and latitude values are returned
- as FK5 J2000 RA and Dec values.
- }
- \sstsubsection{
- lon
- }{
- A pointer to a double in which to store the
- longitude of the reference point, in the coordinate system
- represented by the supplied SkyFrame (radians).
- }
- \sstsubsection{
- lat
- }{
- A pointer to a double in which to store the
- latitude of the reference point, in the coordinate system
- represented by the supplied SkyFrame (radians).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Values of AST\_\_BAD will be returned if this function is
- invoked with the AST error status set, or if it should fail for
- any reason.
- }
- }
-}
-\sstroutine{
- astGetRegionBounds\sstlabel{astGetRegionBounds}
-}{
- Returns the bounding box of Region
-}{
- \sstdescription{
- This function
- returns the upper and lower limits of a box which just encompasses
- the supplied \htmlref{Region}{Region}. The limits are returned as axis values within
- the \htmlref{Frame}{Frame} represented by the Region. The value of the \htmlref{Negated}{Negated}
- attribute is ignored (i.e. it is assumed that the Region has not
- been negated).
- }
- \sstsynopsis{
- void astGetRegionBounds( AstRegion $*$this, double $*$lbnd, double $*$ubnd )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Region.
- }
- \sstsubsection{
- lbnd
- }{
- Pointer to an
- array in which to return the lower axis bounds covered by the Region.
- It should have at least as many elements as there are axes in the
- Region. If an axis has no lower limit, the returned value will
- be the largest possible negative value.
- }
- \sstsubsection{
- ubnd
- }{
- Pointer to an
- array in which to return the upper axis bounds covered by the Region.
- It should have at least as many elements as there are axes in the
- Region. If an axis has no upper limit, the returned value will
- be the largest possible positive value.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The value of the Negated attribute is ignored (i.e. it is assumed that
- the Region has not been negated).
-
- \sstitem
- If an axis has no extent on an axis then the lower limit will be
- returned larger than the upper limit. Note, this is different to an
- axis which has a constant value (in which case both lower and upper
- limit will be returned set to the constant value).
- }
- }
-}
-\sstroutine{
- astGetRegionFrame\sstlabel{astGetRegionFrame}
-}{
- Obtain a pointer to the encapsulated Frame within a Region
-}{
- \sstdescription{
- This function returns a pointer to the \htmlref{Frame}{Frame} represented by a
- \htmlref{Region}{Region}.
- }
- \sstsynopsis{
- AstFrame $*$astGetRegionFrame( AstRegion $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Region.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astGetRegionFrame()
- }{
- A pointer to a deep copy of the Frame represented by the Region.
- Using this pointer to modify the Frame will have no effect on
- the Region. To modify the Region, use the Region pointer directly.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astGetRegionPoints\sstlabel{astGetRegionPoints}
-}{
- Returns the positions that define the given Region
-}{
- \sstdescription{
- This function
- returns the axis values at the points that define the supplied
- \htmlref{Region}{Region}. The particular meaning of these points will depend on the
- type of class supplied, as listed below under {\tt{"}}Applicability:{\tt{"}}.
- }
- \sstsynopsis{
- void astGetRegionPoints( AstRegion $*$this, int maxpoint, int maxcoord,
- int $*$npoint, double $*$points )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Region.
- }
- \sstsubsection{
- maxpoint
- }{
- If zero, the number of points needed to define the Region is
- returned in
- {\tt{"}}$*$npoint{\tt{"}},
- but no axis values are returned and all other parameters are ignored.
- If not zero, the supplied value should be the length of the
- second dimension of the {\tt{"}}points{\tt{"}}
- array. An error is reported if the number of points needed to define
- the Region exceeds this number.
- }
- \sstsubsection{
- maxcoord
- }{
- The length of the
- first dimension of the {\tt{"}}points{\tt{"}} array.
- An error is reported if the number of axes in the supplied Region
- exceeds this number.
- }
- \sstsubsection{
- npoint
- }{
- A pointer to an integer in which to return the
- number of points defining the Region.
- }
- \sstsubsection{
- points
- }{
- The address of the first element in a 2-dimensional array of
- shape {\tt{"}}[maxcoord][maxpoint]{\tt{"}}, in which to return
- the coordinate values at the positions that define the Region.
- These are stored such that the value of coordinate number
- {\tt{"}}coord{\tt{"}} for point number {\tt{"}}point{\tt{"}} is found in element
- {\tt{"}}points[coord][point]{\tt{"}}.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Region
- }{
- All Regions have this attribute.
- }
- \sstsubsection{
- \htmlref{Box}{Box}
- }{
- The first returned position is the Box centre, and the second is
- a Box corner.
- }
- \sstsubsection{
- \htmlref{Circle}{Circle}
- }{
- The first returned position is the Circle centre, and the second is
- a point on the circumference.
- }
- \sstsubsection{
- \htmlref{CmpRegion}{CmpRegion}
- }{
- Returns a value of zero for
- {\tt{"}}$*$npoint{\tt{"}}
- and leaves the supplied array contents unchanged. To find the
- points defining a CmpRegion, use this method on the component
- Regions, which can be accessed by invoking
- \htmlref{astDecompose}{astDecompose}
- on the CmpRegion.
- }
- \sstsubsection{
- \htmlref{Ellipse}{Ellipse}
- }{
- The first returned position is the Ellipse centre. The second is
- the end of one of the axes of the ellipse. The third is some
- other point on the circumference of the ellipse, distinct from
- the second point.
- }
- \sstsubsection{
- \htmlref{Interval}{Interval}
- }{
- The first point corresponds to the lower bounds position, and
- the second point corresponds to the upper bounds position. These
- are reversed to indicate an extcluded interval rather than an
- included interval. See the Interval constructor for more
- information.
- }
- \sstsubsection{
- \htmlref{NullRegion}{NullRegion}
- }{
- Returns a value of zero for
- {\tt{"}}$*$npoint{\tt{"}}
- and leaves the supplied array contents unchanged.
- }
- \sstsubsection{
- \htmlref{PointList}{PointList}
- }{
- The positions returned are those that were supplied when the
- PointList was constructed.
- }
- \sstsubsection{
- \htmlref{Polygon}{Polygon}
- }{
- The positions returned are the vertex positions that were supplied
- when the Polygon was constructed.
- }
- \sstsubsection{
- \htmlref{Prism}{Prism}
- }{
- Returns a value of zero for
- {\tt{"}}$*$npoint{\tt{"}}
- and leaves the supplied array contents unchanged. To find the
- points defining a Prism, use this method on the component
- Regions, which can be accessed by invoking
- astDecompose
- on the CmpRegion.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the coordinate system represented by the Region has been
- changed since it was first created, the returned axis values refer
- to the new (changed) coordinate system, rather than the original
- coordinate system. Note however that if the transformation from
- original to new coordinate system is non-linear, the shape within
- the new coordinate system may be distorted, and so may not match
- that implied by the name of the Region subclass (Circle, Box, etc).
- }
- }
-}
-\sstroutine{
- astGetStcCoord\sstlabel{astGetStcCoord}
-}{
- Return information about an AstroCoords element stored in an Stc
-}{
- \sstdescription{
- When any sub-class of \htmlref{Stc}{Stc} is created, the constructor function
- allows one or more AstroCoords elements to be stored within the Stc.
- This function allows any one of these AstroCoords elements to be
- retrieved. The format of the returned information is the same as
- that used to pass the original information to the Stc constructor.
- That is, the information is returned in a \htmlref{KeyMap}{KeyMap} structure
- containing elements with one or more of the keys given by symbolic
- constants AST\_\_STCNAME, AST\_\_STCVALUE, AST\_\_STCERROR, AST\_\_STCRES,
- AST\_\_STCSIZE and AST\_\_STCPIXSZ.
-
- If the coordinate system represented by the Stc has been changed
- since it was created (for instance, by changing its \htmlref{System}{System}
- attribute), then the sizes and positions in the returned KeyMap
- will reflect the change in coordinate system.
- }
- \sstsynopsis{
- AstKeyMap $*$astGetStcCoord( AstStc $*$this, int icoord )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Stc.
- }
- \sstsubsection{
- icoord
- }{
- The index of the AstroCoords element required. The first has index
- one. The number of AstroCoords elements in the Stc can be found using
- function astGetStcNcoord.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astGetStcCoord()
- }{
- A pointer to a new KeyMap containing the required information.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astGetStcNCoord\sstlabel{astGetStcNCoord}
-}{
- Return the number of AstroCoords elements stored in an Stc
-}{
- \sstdescription{
- This function returns the number of AstroCoords elements stored in
- an \htmlref{Stc}{Stc}.
- }
- \sstsynopsis{
- int astGetStcNCoord( AstStc $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Stc.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astGetStcNCoord()
- }{
- The number of AstroCoords elements stored in the Stc.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Zero will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astGetStcRegion\sstlabel{astGetStcRegion}
-}{
- Obtain a copy of the encapsulated Region within a Stc
-}{
- \sstdescription{
- This function returns a pointer to a deep copy of the \htmlref{Region}{Region}
- supplied when the \htmlref{Stc}{Stc} was created.
- }
- \sstsynopsis{
- AstRegion $*$astGetStcRegion( AstStc $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Stc.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astGetStcRegion()
- }{
- A pointer to a deep copy of the Region encapsulated within the
- supplied Stc.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astGetUnc\sstlabel{astGetUnc}
-}{
- Obtain uncertainty information from a Region
-}{
- \sstdescription{
- This function returns a \htmlref{Region}{Region} which represents the uncertainty
- associated with positions within the supplied Region. See
- \htmlref{astSetUnc}{astSetUnc}
- for more information about Region uncertainties and their use.
- }
- \sstsynopsis{
- AstRegion $*$astGetUnc( AstRegion $*$this, int def )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Region.
- }
- \sstsubsection{
- def
- }{
- Controls what is returned if no uncertainty information has been
- associated explicitly with the supplied Region. If
- a non-zero value
- is supplied, then the default uncertainty Region used internally
- within AST is returned (see {\tt{"}}Applicability{\tt{"}} below). If
- zero is supplied, then NULL
- will be returned (without error).
- }
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{CmpRegion}{CmpRegion}
- }{
- The default uncertainty for a CmpRegion is taken from one of the
- two component Regions. If the first component Region has a
- non-default uncertainty, then it is used as the default uncertainty
- for the parent CmpRegion. Otherwise, if the second component Region
- has a non-default uncertainty, then it is used as the default
- uncertainty for the parent CmpRegion. If neither of the
- component Regions has non-default uncertainty, then the default
- uncertainty for the CmpRegion is 1.0E-6 of the bounding box of
- the CmpRegion.
- }
- \sstsubsection{
- \htmlref{Prism}{Prism}
- }{
- The default uncertainty for a Prism is formed by combining the
- uncertainties from the two component Regions. If a component
- Region does not have a non-default uncertainty, then its default
- uncertainty will be used to form the default uncertainty of the
- parent Prism.
- }
- \sstsubsection{
- Region
- }{
- For other classes of Region, the default uncertainty is 1.0E-6
- of the bounding box of the Region. If the bounding box has zero
- width on any axis, then the uncertainty will be 1.0E-6 of the
- axis value.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astGetUnc()
- }{
- A pointer to a Region describing the uncertainty in the supplied
- Region.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If uncertainty information is associated with a Region, and the
- coordinate system described by the Region is subsequently changed
- (e.g. by changing the value of its \htmlref{System}{System} attribute, or using the
- \htmlref{astMapRegion}{astMapRegion}
- function), then the uncertainty information returned by this function
- will be modified so that it refers to the coordinate system currently
- described by the supplied Region.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astGrfPop\sstlabel{astGrfPop}
-}{
- Restore previously saved graphics functions used by a Plot
-}{
- \sstdescription{
- This function restores a snapshot of the graphics functions
- stored previously by calling \htmlref{astGrfPush}{astGrfPush}. The restored graphics
- functions become the current graphics functions used by the \htmlref{Plot}{Plot}.
-
- The astGrfPush and astGrfPop functions are intended for situations
- where it is necessary to make temporary changes to the graphics
- functions used by the Plot. The current functions should first be
- saved by calling astGrfPush. New functions should then be registered
- using \htmlref{astGrfSet}{astGrfSet}. The required graphics should then be produced.
- Finally, astGrfPop should be called to restore the original graphics
- functions.
- }
- \sstsynopsis{
- void astGrfPop( AstPlot $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Plot.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function returns without action if there are no snapshots to
- restore. No error is reported in this case.
- }
- }
-}
-\sstroutine{
- astGrfPush\sstlabel{astGrfPush}
-}{
- Save the current graphics functions used by a Plot
-}{
- \sstdescription{
- This function takes a snapshot of the graphics functions which are
- currently registered with the supplied \htmlref{Plot}{Plot}, and saves the snapshot
- on a first-in-last-out stack within the Plot. The snapshot can be
- restored later using function
- \htmlref{astGrfPop}{astGrfPop}.
-
- The astGrfPush and astGrfPop functions are intended for situations
- where it is necessary to make temporary changes to the graphics
- functions used by the Plot. The current functions should first be
- saved by calling astGrfPush. New functions should then be registered
- using \htmlref{astGrfSet}{astGrfSet}. The required graphics should then be produced.
- Finally, astGrfPop should be called to restore the original graphics
- functions.
- }
- \sstsynopsis{
- void astGrfPush( AstPlot $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Plot.
- }
- }
-}
-\sstroutine{
- astGrfSet\sstlabel{astGrfSet}
-}{
- Register a graphics function for use by a Plot
-}{
- \sstdescription{
- This function can be used to select the underlying graphics
- functions to be used when the supplied \htmlref{Plot}{Plot} produces graphical output.
- If this function is not called prior to producing graphical
- output, then the underlying graphics functions selected at
- link-time (using the \htmlref{ast\_link}{ast_link} command) will be used. To use
- alternative graphics functions, call this function before
- the graphical output is created, specifying the graphics
- functions to be used. This will register the function for future
- use, but the function will not actually be used until the \htmlref{Grf}{Grf}
- attribute is given a non-zero value.
- }
- \sstsynopsis{
- void astGrfSet( AstPlot $*$this, const char $*$name, AstGrfFun fun )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Plot.
- }
- \sstsubsection{
- name
- }{
- A name indicating the graphics function to be replaced.
- Various graphics functions are used by the
- Plot class, and any combination of them may be supplied by calling
- this function once for each function to be replaced. If any of the
- graphics functions are not replaced in this way, the
- corresponding functions in the graphics interface selected at
- link-time (using the ast\_link command) are used. The allowed
- names are:
-
- \sstitemlist{
-
- \sstitem
- Attr - Enquire or set a graphics attribute value
-
- \sstitem
- Cap - Inquire a capability
-
- \sstitem
- Flush - Flush all pending graphics to the output device
-
- \sstitem
- Line - Draw a polyline (i.e. a set of connected lines)
-
- \sstitem
- Mark - Draw a set of markers
-
- \sstitem
- Qch - Return the character height in world coordinates
-
- \sstitem
- Scales - Get the axis scales
-
- \sstitem
- Text - Draw a character string
-
- \sstitem
- TxExt - Get the extent of a character string
-
- }
- The string is case insensitive. For details of the interface
- required for each, see the sections below.
- }
- \sstsubsection{
- fun
- }{
- A Pointer to the function to be used to provide the
- functionality indicated by parameter name. The interface for
- each function is described below, but the function pointer should
- be cast to a type of AstGrfFun when calling astGrfSet.
-
- Once a function has been provided, a null pointer can be supplied
- in a subsequent call to astGrfSet to reset the function to the
- corresponding function in the graphics interface selected at
- link-time.
- }
- }
- \sstdiytopic{
- Function Interfaces
- }{
- All the functions listed below (except for {\tt{"}}Cap{\tt{"}}) should return an
- integer value of 0 if an error occurs, and 1 otherwise. All x and y
- values refer
- to {\tt{"}}graphics cordinates{\tt{"}} as defined by the graphbox parameter of
- the \htmlref{astPlot}{astPlot} call which created the Plot.
-
- The first parameter ({\tt{"}}grfcon{\tt{"}})
- for each function is an AST \htmlref{KeyMap}{KeyMap} pointer that can be used by the
- called function to establish the context in which it is being called.
- The contents of the KeyMap are determined by the calling
- application, which should obtain a pointer to the KeyMap using the
- \htmlref{astGetGrfContext}{astGetGrfContext} function,
- and then store any necessary information in the KeyMap using the
- methods of the KeyMap class. Note, the functions listed below
- should never annul or delete the supplied KeyMap pointer.
- }
- \sstdiytopic{
- Attr
- }{
- The {\tt{"}}Attr{\tt{"}} function returns the current value of a specified graphics
- attribute, and optionally establishes a new value. The supplied
- value is converted to an integer value if necessary before use.
- It requires the following interface:
-
- int Attr( AstObject $*$grfcon, int attr, double value, double $*$old\_value, int prim )
-
- \sstitemlist{
-
- \sstitem
- grfcon -
- A KeyMap containing information passed from the calling application.
-
- \sstitem
- attr - An integer value identifying the required attribute.
- The following symbolic values are defined in grf.h:
- GRF\_\_STYLE (Line style),
- GRF\_\_WIDTH (Line width),
- GRF\_\_SIZE (Character and marker size scale factor),
- GRF\_\_FONT (Character font),
- GRF\_\_COLOUR (Colour index).
-
- \sstitem
- value -
- A new value to store for the attribute. If this is AST\_\_BAD
- no value is stored.
-
- \sstitem
- old\_value - A pointer to a double in which to return
- the attribute value.
- If this is NULL, no value is returned.
-
- \sstitem
- prim -
- The sort of graphics primitive to be drawn with the new attribute.
- Identified by the following values defined in grf.h:
- GRF\_\_LINE,
- GRF\_\_MARK,
- GRF\_\_TEXT.
- }
- }
- \sstdiytopic{
- Cap
- }{
- The {\tt{"}}Cap{\tt{"}} function is called to determine if the grf module has a
- given capability, as indicated by the {\tt{"}}cap{\tt{"}} argument:
-
- int Cap( AstObject $*$grfcon, int cap, int value )
-
- \sstitemlist{
-
- \sstitem
- grfcon -
- A KeyMap containing information passed from the calling application.
-
- \sstitem
- cap -
- The capability being inquired about. This will be one of the
- following constants defined in grf.h:
-
- }
- GRF\_\_SCALES: This function should return a non-zero value if the
- {\tt{"}}Scales{\tt{"}} function is implemented, and zero otherwise. The supplied
- {\tt{"}}value{\tt{"}} argument should be ignored.
-
- GRF\_\_MJUST: This function should return a non-zero value if
- the {\tt{"}}Text{\tt{"}} and {\tt{"}}TxExt{\tt{"}} functions recognise {\tt{"}}M{\tt{"}} as a
- character in the justification string. If the first character of
- a justification string is {\tt{"}}M{\tt{"}}, then the text should be justified
- with the given reference point at the bottom of the bounding box.
- This is different to {\tt{"}}B{\tt{"}} justification, which requests that the
- reference point be put on the baseline of the text, since some
- characters hang down below the baseline. If the {\tt{"}}Text{\tt{"}} or
- {\tt{"}}TxExt{\tt{"}} function cannot differentiate between {\tt{"}}M{\tt{"}} and {\tt{"}}B{\tt{"}},
- then this function should return zero, in which case {\tt{"}}M{\tt{"}}
- justification will never be requested by Plot. The supplied
- {\tt{"}}value{\tt{"}} argument should be ignored.
-
- GRF\_\_ESC: This function should return a non-zero value if the
- {\tt{"}}Text{\tt{"}} and {\tt{"}}TxExt{\tt{"}} functions can recognise and interpret
- graphics escape sequences within the supplied string (see
- attribute \htmlref{Escape}{Escape}). Zero should be returned if escape sequences
- cannot be interpreted (in which case the Plot class will interpret
- them itself if needed). The supplied {\tt{"}}value{\tt{"}} argument should be
- ignored only if escape sequences cannot be interpreted by {\tt{"}}Text{\tt{"}} and
- {\tt{"}}TxExt{\tt{"}}. Otherwise, {\tt{"}}value{\tt{"}} indicates whether {\tt{"}}Text{\tt{"}} and {\tt{"}}TxExt{\tt{"}}
- should interpret escape sequences in subsequent calls. If {\tt{"}}value{\tt{"}} is
- non-zero then escape sequences should be interpreted by {\tt{"}}Text{\tt{"}} and
- {\tt{"}}TxExt{\tt{"}}. Otherwise, they should be drawn as literal text.
-
- \sstitemlist{
-
- \sstitem
- value -
- The use of this parameter depends on the value of {\tt{"}}cap{\tt{"}} as
- described above.
-
- \sstitem
- Returned Function Value:
- The value returned by the function depends on the value of {\tt{"}}cap{\tt{"}}
- as described above. Zero should be returned if the supplied
- capability is not recognised.
- }
- }
- \sstdiytopic{
- Flush
- }{
- The {\tt{"}}Flush{\tt{"}} function ensures that the display device is up-to-date,
- by flushing any pending graphics to the output device. It
- requires the following interface:
-
- int Flush( AstObject $*$grfcon )
-
- \sstitemlist{
-
- \sstitem
- grfcon -
- A KeyMap containing information passed from the calling application.
- }
- }
- \sstdiytopic{
- Line
- }{
- The {\tt{"}}Line{\tt{"}} function displays lines joining the given positions and
- requires the following interface:
-
- int Line( AstObject $*$grfcon, int n, const float $*$x, const float $*$y )
-
- \sstitemlist{
-
- \sstitem
- grfcon -
- A KeyMap containing information passed from the calling application.
-
- \sstitem
- n - The number of positions to be joined together.
-
- \sstitem
- x - A pointer to an array holding the {\tt{"}}n{\tt{"}} x values.
-
- \sstitem
- y - A pointer to an array holding the {\tt{"}}n{\tt{"}} y values.
- }
- }
- \sstdiytopic{
- Mark
- }{
- The {\tt{"}}Mark{\tt{"}} function displays markers at the given positions. It
- requires the following interface:
-
- int Mark( AstObject $*$grfcon, int n, const float $*$x, const float $*$y, int type )
-
- \sstitemlist{
-
- \sstitem
- grfcon -
- A KeyMap containing information passed from the calling application.
-
- \sstitem
- n - The number of positions to be marked.
-
- \sstitem
- x - A pointer to an array holding the {\tt{"}}n{\tt{"}} x values.
-
- \sstitem
- y - A pointer to an array holding the {\tt{"}}n{\tt{"}} y values.
-
- \sstitem
- type - An integer which can be used to indicate the type of marker
- symbol required.
- }
- }
- \sstdiytopic{
- Qch
- }{
- The {\tt{"}}Qch{\tt{"}} function returns the heights of characters drawn vertically
- and horizontally in graphics coordinates. It requires the following
- interface:
-
- int Qch( AstObject $*$grfcon, float $*$chv, float $*$chh )
-
- \sstitemlist{
-
- \sstitem
- grfcon -
- A KeyMap containing information passed from the calling application.
-
- \sstitem
- chv - A pointer to the float which is to receive the height of
- characters drawn with a vertical baseline. This will be an
- increment in the X axis.
-
- \sstitem
- chh - A pointer to the float which is to receive the height of
- characters drawn with a horizontal baseline. This will be an
- increment in the Y axis.
- }
- }
- \sstdiytopic{
- Scales
- }{
- The {\tt{"}}Scales{\tt{"}} function returns two values (one for each axis) which
- scale increments on the corresponding axis into a {\tt{"}}normal{\tt{"}} coordinate
- system in which: 1) the axes have equal scale in terms of (for instance)
- millimetres per unit distance, 2) X values increase from left to
- right, and 3) Y values increase from bottom to top. It requires the
- following interface:
-
- int Scales( AstObject $*$grfcon, float $*$alpha, float $*$beta )
-
- \sstitemlist{
-
- \sstitem
- grfcon -
- A KeyMap containing information passed from the calling application.
-
- \sstitem
- alpha - A pointer to the float which is to receive the
- scale for the X axis (i.e. Xnorm = alpha$*$Xworld).
-
- \sstitem
- beta - A pointer to the float which is to receive the
- scale for the Y axis (i.e. Ynorm = beta$*$Yworld).
- }
- }
- \sstdiytopic{
- Text
- }{
- The {\tt{"}}Text{\tt{"}} function displays a character string at a given
- position using a specified justification and up-vector. It
- requires the following interface:
-
- int Text( AstObject $*$grfcon, const char $*$text, float x, float y, const char $*$just,
- float upx, float upy )
-
- \sstitemlist{
-
- \sstitem
- grfcon -
- A KeyMap containing information passed from the calling application.
-
- \sstitem
- text - Pointer to a null-terminated character string to be displayed.
-
- \sstitem
- x - The reference x coordinate.
-
- \sstitem
- y - The reference y coordinate.
-
- \sstitem
- just - A character string which specifies the location within the
- text string which is to be placed at the reference position
- given by x and y. The first character may be 'T' for {\tt{"}}top{\tt{"}},
- 'C' for {\tt{"}}centre{\tt{"}}, or 'B' for {\tt{"}}bottom{\tt{"}}, and specifies the
- vertical location of the reference position. Note, {\tt{"}}bottom{\tt{"}}
- corresponds to the base-line of normal text. Some characters
- (eg {\tt{"}}y{\tt{"}}, {\tt{"}}g{\tt{"}}, {\tt{"}}p{\tt{"}}, etc) descend below the base-line. The second
- character may be 'L' for {\tt{"}}left{\tt{"}}, 'C' for {\tt{"}}centre{\tt{"}}, or 'R'
- for {\tt{"}}right{\tt{"}}, and specifies the horizontal location of the
- reference position. If the string has less than 2 characters
- then 'C' is used for the missing characters.
-
- \sstitem
- upx - The x component of the up-vector for the text.
- If necessary the supplied value should be negated
- to ensure that positive values always refer to displacements from
- left to right on the screen.
-
- \sstitem
- upy - The y component of the up-vector for the text.
- If necessary the supplied value should be negated
- to ensure that positive values always refer to displacements from
- bottom to top on the screen.
- }
- }
- \sstdiytopic{
- TxExt
- }{
- The {\tt{"}}TxExt{\tt{"}} function returns the corners of a box which would enclose
- the supplied character string if it were displayed using the
- Text function described above. The returned box includes any leading
- or trailing spaces. It requires the following interface:
-
- int TxExt( AstObject $*$grfcon, const char $*$text, float x, float y, const char $*$just,
- float upx, float upy, float $*$xb, float $*$yb )
-
- \sstitemlist{
-
- \sstitem
- grfcon -
- A KeyMap containing information passed from the calling application.
-
- \sstitem
- text - Pointer to a null-terminated character string to be displayed.
-
- \sstitem
- x - The reference x coordinate.
-
- \sstitem
- y - The reference y coordinate.
-
- \sstitem
- just - A character string which specifies the location within the
- text string which is to be placed at the reference position
- given by x and y. See {\tt{"}}Text{\tt{"}} above.
-
- \sstitem
- upx - The x component of the up-vector for the text.
- See {\tt{"}}Text{\tt{"}} above.
-
- \sstitem
- upy - The y component of the up-vector for the text.
- See {\tt{"}}Text{\tt{"}} above.
-
- \sstitem
- xb - An array of 4 elements in which to return the x coordinate of
- each corner of the bounding box.
-
- \sstitem
- yb - An array of 4 elements in which to return the y coordinate of
- each corner of the bounding box.
- }
- }
-}
-\sstroutine{
- astGrid\sstlabel{astGrid}
-}{
- Draw a set of labelled coordinate axes
-}{
- \sstdescription{
- This function draws a complete annotated set of
- coordinate axes for a \htmlref{Plot}{Plot} with (optionally) a coordinate grid
- superimposed. Details of the axes and grid can be controlled by
- setting values for the various attributes defined by the Plot
- class (q.v.).
- }
- \sstsynopsis{
- void astGrid( AstPlot $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Plot.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the supplied Plot is a \htmlref{Plot3D}{Plot3D}, the axes will be annotated
- using three 2-dimensional Plots, one for each 2D plane in the 3D
- current coordinate system. The plots will be {\tt{"}}pasted{\tt{"}} onto 3 faces
- of the cuboid graphics volume specified when the Plot3D was
- constructed. The faces to be used can be controlled by the {\tt{"}}\htmlref{RootCorner}{RootCorner}{\tt{"}}
- attribute.
-
- \sstitem
- An error results if either the current \htmlref{Frame}{Frame} or the base Frame
- of the Plot is not 2-dimensional or (for a Plot3D) 3-dimensional.
-
- \sstitem
- An error also results if the transformation between the base
- and current Frames of the Plot is not defined in either
- direction (i.e. the Plot's \htmlref{TranForward}{TranForward} or \htmlref{TranInverse}{TranInverse} attribute
- is zero).
- }
- }
-}
-\sstroutine{
- astGridLine\sstlabel{astGridLine}
-}{
- Draw a grid line (or axis) for a Plot
-}{
- \sstdescription{
- This function draws a curve in the physical coordinate system of
- a \htmlref{Plot}{Plot} by varying only one of the coordinates along the length
- of the curve. It is intended for drawing coordinate axes,
- coordinate grids, and tick marks on axes (but note that these
- are also available via the more comprehensive \htmlref{astGrid}{astGrid} function).
-
- The curve is transformed into graphical coordinate space for
- plotting, so that a straight line in physical coordinates may
- result in a curved line being drawn if the \htmlref{Mapping}{Mapping} involved is
- non-linear. Any discontinuities in the Mapping between physical
- and graphical coordinates are catered for, as is any
- clipping established using \htmlref{astClip}{astClip}.
- }
- \sstsynopsis{
- void astGridLine( AstPlot $*$this, int axis, const double start[],
- double length )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Plot.
- }
- \sstsubsection{
- axis
- }{
- The index of the Plot axis whose physical coordinate value is
- to be varied along the length of the curve (all other
- coordinates will remain fixed). This value should lie in the
- range from 1 to the number of Plot axes (\htmlref{Naxes}{Naxes} attribute).
- }
- \sstsubsection{
- start
- }{
- An array, with one element for each axis of the Plot, giving
- the physical coordinates of the start of the curve.
- }
- \sstsubsection{
- length
- }{
- The length of curve to be drawn, given as an increment along
- the selected physical axis. This may be positive or negative.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- No curve is drawn if the {\tt{"}}start{\tt{"}} array contains any
- coordinates with the value AST\_\_BAD, nor if {\tt{"}}length{\tt{"}} has this value.
-
- \sstitem
- An error results if the base \htmlref{Frame}{Frame} of the Plot is not 2-dimensional.
-
- \sstitem
- An error also results if the transformation between the
- current and base Frames of the Plot is not defined (i.e. the
- Plot's \htmlref{TranInverse}{TranInverse} attribute is zero).
- }
- }
-}
-\sstroutine{
- astGrismMap\sstlabel{astGrismMap}
-}{
- Create a GrismMap
-}{
- \sstdescription{
- This function creates a new \htmlref{GrismMap}{GrismMap} and optionally initialises
- its attributes.
-
- A GrismMap is a specialised form of \htmlref{Mapping}{Mapping} which transforms
- 1-dimensional coordinates using the spectral dispersion equation
- described in FITS-WCS paper III {\tt{"}}Representation of spectral
- coordinates in FITS{\tt{"}}. This describes the dispersion produced by
- gratings, prisms and grisms.
-
- When initially created, the forward transformation of a GrismMap
- transforms input {\tt{"}}grism parameter{\tt{"}} values into output wavelength
- values. The {\tt{"}}grism parameter{\tt{"}} is a dimensionless value which is
- linearly related to position on the detector. It is defined in FITS-WCS
- paper III as {\tt{"}}the offset on the detector from the point of intersection
- of the camera axis, measured in units of the effective local length{\tt{"}}.
- The units in which wavelength values are expected or returned is
- determined by the values supplied for the \htmlref{GrismWaveR}{GrismWaveR}, \htmlref{GrismNRP}{GrismNRP} and
- \htmlref{GrismG}{GrismG} attribute: whatever units are used for these attributes will
- also be used for the wavelength values.
- }
- \sstsynopsis{
- AstGrismMap $*$astGrismMap( const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new GrismMap. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astGrismMap()
- }{
- A pointer to the new GrismMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astImport\sstlabel{astImport}
-}{
- Import an Object pointer to the current context
-}{
- \sstdescription{
- This function
- imports an \htmlref{Object}{Object} pointer that was created in a higher or lower
- level context, into the current AST context.
- This means that the pointer will be annulled when the current context
- is ended (with \htmlref{astEnd}{astEnd}).
- }
- \sstsynopsis{
- void astImport( AstObject $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Object pointer to be imported.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This function applies to all Objects.
- }
- }
-}
-\sstroutine{
- astIntersect\sstlabel{astIntersect}
-}{
- Find the point of intersection between two geodesic curves
-}{
- \sstdescription{
- This function
- finds the coordinate values at the point of intersection between
- two geodesic curves. Each curve is specified by two points on
- the curve. It can only be used with 2-dimensional Frames.
-
- For example, in a basic \htmlref{Frame}{Frame}, it will find the point of
- intersection between two straight lines. But for a \htmlref{SkyFrame}{SkyFrame} it
- will find an intersection of two great circles.
- }
- \sstsynopsis{
- void astIntersect( AstFrame $*$this, const double a1[2],
- const double a2[2], const double b1[2],
- const double b2[2], double cross[2] )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Frame.
- }
- \sstsubsection{
- a1
- }{
- An array of double, with one element for each Frame axis
- (\htmlref{Naxes}{Naxes} attribute). This should contain the coordinates of the
- first point on the first geodesic curve.
- }
- \sstsubsection{
- a2
- }{
- An array of double, with one element for each Frame axis
- (Naxes attribute). This should contain the coordinates of a
- second point on the first geodesic curve. It should not be
- co-incident with the first point.
- }
- \sstsubsection{
- b1
- }{
- An array of double, with one element for each Frame axis
- (Naxes attribute). This should contain the coordinates of the
- first point on the second geodesic curve.
- }
- \sstsubsection{
- b2
- }{
- An array of double, with one element for each Frame axis
- (Naxes attribute). This should contain the coordinates of a
- second point on the second geodesic curve. It should not be
- co-incident with the first point.
- }
- \sstsubsection{
- cross
- }{
- An array of double, with one element for each Frame axis
- in which the coordinates of the required intersection will
- be returned.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- For SkyFrames each curve will be a great circle, and in general
- each pair of curves will intersect at two diametrically opposite
- points on the sky. The returned position is the one which is
- closest to point
- {\tt{"}}a1{\tt{"}}.
-
- \sstitem
- This function will return {\tt{"}}bad{\tt{"}} coordinate values (AST\_\_BAD)
- if any of the input coordinates has this value, or if the two
- points defining either geodesic are co-incident, or if the two
- curves do not intersect.
-
- \sstitem
- The geodesic curve used by this function is the path of
- shortest distance between two points, as defined by the
- \htmlref{astDistance}{astDistance} function.
-
- \sstitem
- An error will be reported if the Frame is not 2-dimensional.
- }
- }
-}
-\sstroutine{
- astInterval\sstlabel{astInterval}
-}{
- Create a Interval
-}{
- \sstdescription{
- This function creates a new \htmlref{Interval}{Interval} and optionally initialises its
- attributes.
-
- A Interval is a \htmlref{Region}{Region} which represents upper and/or lower limits on
- one or more axes of a \htmlref{Frame}{Frame}. For a point to be within the region
- represented by the Interval, the point must satisfy all the
- restrictions placed on all the axes. The point is outside the region
- if it fails to satisfy any one of the restrictions. Each axis may have
- either an upper limit, a lower limit, both or neither. If both limits
- are supplied but are in reverse order (so that the lower limit is
- greater than the upper limit), then the interval is an excluded
- interval, rather than an included interval.
-
- At least one axis limit must be supplied.
-
- Note, The Interval class makes no allowances for cyclic nature of
- some coordinate systems (such as \htmlref{SkyFrame}{SkyFrame} coordinates). A \htmlref{Box}{Box}
- should usually be used in these cases since this requires the user
- to think about suitable upper and lower limits,
- }
- \sstsynopsis{
- AstInterval $*$astInterval( AstFrame $*$frame, const double lbnd[],
- const double ubnd[], AstRegion $*$unc,
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- frame
- }{
- A pointer to the Frame in which the region is defined. A deep
- copy is taken of the supplied Frame. This means that any
- subsequent changes made to the Frame using the supplied pointer
- will have no effect the Region.
- }
- \sstsubsection{
- lbnd
- }{
- An array of double, with one element for each Frame axis
- (\htmlref{Naxes}{Naxes} attribute) containing the lower limits on each axis.
- Set a value to AST\_\_BAD to indicate that the axis has no lower
- limit.
- }
- \sstsubsection{
- ubnd
- }{
- An array of double, with one element for each Frame axis
- (Naxes attribute) containing the upper limits on each axis.
- Set a value to AST\_\_BAD to indicate that the axis has no upper
- limit.
- }
- \sstsubsection{
- unc
- }{
- An optional pointer to an existing Region which specifies the
- uncertainties associated with the boundary of the Box being created.
- The uncertainty in any point on the boundary of the Box is found by
- shifting the supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at
- the boundary point being considered. The area covered by the
- shifted uncertainty Region then represents the uncertainty in the
- boundary position. The uncertainty is assumed to be the same for
- all points.
-
- If supplied, the uncertainty Region must be of a class for which
- all instances are centro-symetric (e.g. Box, \htmlref{Circle}{Circle}, \htmlref{Ellipse}{Ellipse}, etc.)
- or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
- copy of the supplied Region will be taken, so subsequent changes to
- the uncertainty Region using the supplied pointer will have no
- effect on the created Box. Alternatively,
- a NULL \htmlref{Object}{Object} pointer
- may be supplied, in which case a default uncertainty is used
- equivalent to a box 1.0E-6 of the size of the Box being created.
-
- The uncertainty Region has two uses: 1) when the
- \htmlref{astOverlap}{astOverlap}
- function compares two Regions for equality the uncertainty
- Region is used to determine the tolerance on the comparison, and 2)
- when a Region is mapped into a different coordinate system and
- subsequently simplified (using
- \htmlref{astSimplify}{astSimplify}),
- the uncertainties are used to determine if the transformed boundary
- can be accurately represented by a specific shape of Region.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new Interval. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astInterval()
- }{
- A pointer to the new Interval.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- astIntraMap\sstlabel{astIntraMap}
-}{
- Create an IntraMap
-}{
- \sstdescription{
- This function creates a new \htmlref{IntraMap}{IntraMap} and optionally initialises
- its attributes.
-
- An IntraMap is a specialised form of \htmlref{Mapping}{Mapping} which encapsulates
- a privately-defined coordinate transformation function
- (e.g. written in C) so that it may be used like any other AST
- Mapping. This allows you to create Mappings that perform any
- conceivable coordinate transformation.
-
- However, an IntraMap is intended for use within a single program
- or a private suite of software, where all programs have access
- to the same coordinate transformation functions (i.e. can be
- linked against them). IntraMaps should not normally be stored in
- datasets which may be exported for processing by other software,
- since that software will not have the necessary transformation
- functions available, resulting in an error.
-
- You must register any coordinate transformation functions to be
- used using \htmlref{astIntraReg}{astIntraReg} before creating an IntraMap.
- }
- \sstsynopsis{
- AstIntraMap $*$astIntraMap( const char $*$name, int nin, int nout,
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- name
- }{
- Pointer to a null-terminated string containing the name of
- the transformation function to use (which should previously
- have been registered using astIntraReg). This name is case
- sensitive. All white space will be removed before use.
- }
- \sstsubsection{
- nin
- }{
- The number of input coordinates. This must be compatible with
- the number of input coordinates accepted by the
- transformation function (as specified when this function was
- registered using astIntraReg).
- }
- \sstsubsection{
- nout
- }{
- The number of output coordinates. This must be compatible
- with the number of output coordinates produced by the
- transformation function (as specified when this function was
- registered using astIntraReg).
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new IntraMap. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astIntraMap()
- }{
- A pointer to the new IntraMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astIntraReg\sstlabel{astIntraReg}
-}{
- Register a transformation function for use by an IntraMap
-}{
- \sstdescription{
- This function registers a privately-defined coordinate
- transformation function written in C so that it may be used to
- create an \htmlref{IntraMap}{IntraMap}. An IntraMap is a specialised form of \htmlref{Mapping}{Mapping}
- which encapsulates the C function so that it may be used like
- any other AST Mapping. This allows you to create Mappings that
- perform any conceivable coordinate transformation.
-
- Registration of relevant transformation functions is required
- before using the \htmlref{astIntraMap}{astIntraMap} constructor function to create an
- IntraMap or reading an external representation of an IntraMap
- from a \htmlref{Channel}{Channel}.
- }
- \sstsynopsis{
- astIntraReg( const char $*$name, int nin, int nout,
- void ($*$ tran)( AstMapping $*$, int, int, const double $*$[],
- int, int, double $*$[] ),
- unsigned int flags, const char $*$purpose, const char $*$author,
- const char $*$contact )
- }
- \sstparameters{
- \sstsubsection{
- name
- }{
- Pointer to a null-terminated string containing a unique name
- to be associated with the transformation function in order to
- identify it. This name is case sensitive. All white space
- will be removed before use.
- }
- \sstsubsection{
- nin
- }{
- The number of input coordinates accepted by the
- transformation function (i.e. the number of dimensions of the
- space in which the input points reside). A value of AST\_\_ANY
- may be given if the function is able to accommodate a
- variable number of input coordinates.
- }
- \sstsubsection{
- nout
- }{
- The number of output coordinates produced by the
- transformation function (i.e. the number of dimensions of the
- space in which the output points reside). A value of AST\_\_ANY
- may be given if the function is able to produce a variable
- number of output coordinates.
- }
- \sstsubsection{
- tran
- }{
- Pointer to the transformation function to be registered.
- This function should perform whatever coordinate
- transformations are required and should have an interface
- like \htmlref{astTranP}{astTranP} (q.v.).
- }
- \sstsubsection{
- flags
- }{
- This value may be used to supply a set of flags which
- describe the transformation function and which may affect the
- behaviour of any IntraMap which uses it. Often, a value of
- zero will be given here, but you may also supply the bitwise
- OR of a set of flags as described in the {\tt{"}}Transformation
- Flags{\tt{"}} section (below).
- }
- \sstsubsection{
- purpose
- }{
- Pointer to a null-terminated string containing a short (one
- line) textual comment to describe the purpose of the
- transformation function.
- }
- \sstsubsection{
- author
- }{
- Pointer to a null-terminated string containing the name of
- the author of the transformation function.
- }
- \sstsubsection{
- contact
- }{
- Pointer to a null-terminated string containing contact
- details for the author of the transformation function
- (e.g. an e-mail or WWW address). If any IntraMap which uses
- this transformation function is exported as part of a dataset
- to an external user who does not have access to the function,
- then these contact details should allow them to obtain the
- necessary code.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Beware that an external representation of an IntraMap (created
- by writing it to a Channel) will not include the coordinate
- transformation function which it uses, so will only refer to the
- function by its name (as assigned using astIntraReg).
- Consequently, the external representation cannot be utilised by
- another program unless that program has also registered the same
- transformation function with the same name using an identical
- invocation of astIntraReg. If no such registration has been
- performed, then attempting to read the external representation
- will result in an error.
-
- \sstitem
- You may use astIntraReg to register a transformation function
- with the same name more than once, but only if the arguments
- supplied are identical on each occasion (i.e there is no way of
- changing things once a function has been successfully registered
- under a given name, and attempting to do so will result in an
- error). This feature simply allows registration to be performed
- independently, but consistently, at several places within your
- program, without having to check whether it has already been
- done.
-
- \sstitem
- If an error occurs in the transformation function, this may be
- indicated by setting the AST error status to an error value
- (using \htmlref{astSetStatus}{astSetStatus}) before it returns. This will immediately
- terminate the current AST operation. The error value AST\_\_ITFER
- is available for this purpose, but other values may also be used
- (e.g. if you wish to distinguish different types of error).
- }
- }
- \sstdiytopic{
- Transformation Flags
- }{
- The following flags are defined in the ``ast.h'' header file and
- allow you to provide further information about the nature of the
- transformation function. Having selected the set of flags which
- apply, you should supply the bitwise OR of their values as the
- ``flags'' argument to astIntraReg.
-
- \sstitemlist{
-
- \sstitem
- AST\_\_NOFWD: If this flag is set, it indicates that the
- transformation function does not implement a forward coordinate
- transformation. In this case, any IntraMap which uses it will
- have a \htmlref{TranForward}{TranForward} attribute value of zero and the
- transformation function itself will not be invoked with its
- ``forward'' argument set to a non-zero value. By default, it is
- assumed that a forward transformation is provided.
-
- \sstitem
- AST\_\_NOINV: If this flag is set, it indicates that the
- transformation function does not implement an inverse coordinate
- transformation. In this case, any IntraMap which uses it will
- have a \htmlref{TranInverse}{TranInverse} attribute value of zero and the
- transformation function itself will not be invoked with its
- ``forward'' argument set to zero. By default, it is assumed
- that an inverse transformation is provided.
-
- \sstitem
- AST\_\_SIMPFI: You may set this flag if applying the
- transformation function's forward coordinate transformation,
- followed immediately by the matching inverse transformation,
- should always restore the original set of coordinates. It
- indicates that AST may replace such a sequence of operations by
- an identity Mapping (a \htmlref{UnitMap}{UnitMap}) if it is encountered while
- simplifying a compound Mapping (e.g. using \htmlref{astSimplify}{astSimplify}). It is
- not necessary that both transformations have actually been
- implemented.
-
- \sstitem
- AST\_\_SIMPIF: You may set this flag if applying the
- transformation function's inverse coordinate transformation,
- followed immediately by the matching forward transformation,
- should always restore the original set of coordinates. It
- indicates that AST may replace such a sequence of operations by
- an identity Mapping (a UnitMap) if it is encountered while
- simplifying a compound Mapping (e.g. using astSimplify). It is
- not necessary that both transformations have actually been
- implemented.
- }
- }
-}
-\sstroutine{
- astInvert\sstlabel{astInvert}
-}{
- Invert a Mapping
-}{
- \sstdescription{
- This function inverts a \htmlref{Mapping}{Mapping} by reversing the boolean sense
- of its \htmlref{Invert}{Invert} attribute. If this attribute is zero (the
- default), the Mapping will transform coordinates in the way
- specified when it was created. If it is non-zero, the input and
- output coordinates will be inter-changed so that the direction
- of the Mapping is reversed. This will cause it to display the
- inverse of its original behaviour.
- }
- \sstsynopsis{
- void astInvert( AstMapping $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Mapping.
- }
- }
-}
-\sstroutine{
- astIsA$<$Class$>$\sstlabel{astIsAClass}
-}{
- Test membership of a class by an Object
-}{
- \sstdescription{
- This is a family of functions which test whether an \htmlref{Object}{Object} is a
- member of the class called $<$\htmlref{Class}{Class}$>$, or of any class derived from
- it.
- }
- \sstsynopsis{
- int astIsA$<$Class$>$( const Ast$<$Class$>$ $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Object.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- These functions apply to all Objects.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astIsA$<$Class$>$()
- }{
- One if the Object belongs to the class called $<$Class$>$ (or to a
- class derived from it), otherwise zero.
- }
- }
- \sstexamples{
- \sstexamplesubsection{
- member = astIsAFrame( obj );
- }{
- Tests whether Object {\tt{"}}obj{\tt{"}} is a member of the \htmlref{Frame}{Frame} class, or
- of any class derived from a Frame.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Every AST class provides a function (astIsA$<$Class$>$) of this
- form, where $<$Class$>$ should be replaced by the class name.
-
- \sstitem
- This function attempts to execute even if the AST error status
- is set
- on entry, although no further error report will be made
- if it subsequently fails under these circumstances.
-
- \sstitem
- A value of zero will be returned if this function should fail
- for any reason. In particular, it will fail if the pointer
- supplied does not identify an Object of any sort.
- }
- }
-}
-\sstroutine{
- astKeyMap\sstlabel{astKeyMap}
-}{
- Create a KeyMap
-}{
- \sstdescription{
- This function creates a new empty \htmlref{KeyMap}{KeyMap} and optionally initialises its
- attributes. Entries can then be added to the KeyMap using the
- \htmlref{astMapPut0$<$X$>$}{astMapPut0X} and \htmlref{astMapPut1$<$X$>$}{astMapPut1X} functions.
-
- The KeyMap class is used to store a set of values with associated keys
- which identify the values. The keys are strings (case-sensitive,
- trailing spaces are ignored), and the data type of the values can be
- integer, floating point, character string or AST \htmlref{Object}{Object} pointer. Each
- value can be a scalar or a one-dimensional vector. A KeyMap is
- conceptually similar to a \htmlref{Mapping}{Mapping} in that a KeyMap transforms an
- input into an output - the input is the key, and the output is the
- value associated with the key. However, this is only a conceptual
- similarity, and it should be noted that the KeyMap class inherits from
- the Object class rather than the Mapping class. The methods of the
- Mapping class cannot be used with a KeyMap.
- }
- \sstsynopsis{
- AstKeyMap $*$astKeyMap( const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new KeyMap. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astKeyMap()
- }{
- A pointer to the new KeyMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- astLinearApprox\sstlabel{astLinearApprox}
-}{
- Obtain a linear approximation to a Mapping, if appropriate
-}{
- \sstdescription{
- This function tests the forward coordinate transformation
- implemented by a \htmlref{Mapping}{Mapping} over a given range of input coordinates. If
- the transformation is found to be linear to a specified level of
- accuracy, then an array of fit coefficients is returned. These
- may be used to implement a linear approximation to the Mapping's
- forward transformation within the specified range of output coordinates.
- If the transformation is not sufficiently linear, no coefficients
- are returned.
- }
- \sstsynopsis{
- int astLinearApprox( AstMapping $*$this, const double $*$lbnd,
- const double $*$ubnd, double tol, double $*$fit )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Mapping.
- }
- \sstsubsection{
- lbnd
- }{
- Pointer to an array of doubles
- containing the lower bounds of a box defined within the input
- coordinate system of the Mapping. The number of elements in this
- array should equal the value of the Mapping's \htmlref{Nin}{Nin} attribute. This
- box should specify the region over which linearity is required.
- }
- \sstsubsection{
- ubnd
- }{
- Pointer to an array of doubles
- containing the upper bounds of the box specifying the region over
- which linearity is required.
- }
- \sstsubsection{
- tol
- }{
- The maximum permitted deviation from linearity, expressed as
- a positive Cartesian displacement in the output coordinate
- space of the Mapping. If a linear fit to the forward
- transformation of the Mapping deviates from the true transformation
- by more than this amount at any point which is tested, then no fit
- coefficients will be returned.
- }
- \sstsubsection{
- fit
- }{
- Pointer to an array of doubles
- in which to return the co-efficients of the linear
- approximation to the specified transformation. This array should
- have at least {\tt{"}}( Nin $+$ 1 ) $*$ \htmlref{Nout}{Nout}{\tt{"}}, elements. The first Nout elements
- hold the constant offsets for the transformation outputs. The
- remaining elements hold the gradients. So if the Mapping has 2 inputs
- and 3 outputs the linear approximation to the forward transformation
- is:
-
- X\_out = fit[0] $+$ fit[3]$*$X\_in $+$ fit[4]$*$Y\_in
-
- Y\_out = fit[1] $+$ fit[5]$*$X\_in $+$ fit[6]$*$Y\_in
-
- Z\_out = fit[2] $+$ fit[7]$*$X\_in $+$ fit[8]$*$Y\_in
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astLinearApprox()
- }{
- If the forward transformation is sufficiently linear,
- a non-zero value is returned. Otherwise zero is returned
- and the fit co-efficients are set to AST\_\_BAD.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function fits the Mapping's forward transformation. To fit
- the inverse transformation, the Mapping should be inverted using
- \htmlref{astInvert}{astInvert}
- before invoking this function.
-
- \sstitem
- A value of zero
- will be returned if this function is invoked
- with the global error status set, or if it should fail for any
- reason.
- }
- }
-}
-\sstroutine{
- astLock\sstlabel{astLock}
-}{
- Lock an Object for exclusive use by the calling thread
-}{
- \sstdescription{
- The thread-safe public interface to AST is designed so that an
- error is reported if any thread attempts to use an \htmlref{Object}{Object} that it
- has not previously locked for its own exclusive use using this
- function. When an Object is created, it is initially locked by the
- thread that creates it, so newly created objects do not need to be
- explicitly locked. However, if an Object pointer is passed to
- another thread, the original thread must first unlock it (using
- \htmlref{astUnlock}{astUnlock}) and the new thread must then lock it (using astLock)
- before the new thread can use the Object.
-
- The {\tt{"}}wait{\tt{"}} parameter determines what happens if the supplied Object
- is curently locked by another thread when this function is invoked.
- }
- \sstsynopsis{
- void astLock( AstObject $*$this, int wait )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Object to be locked.
- }
- \sstsubsection{
- wait
- }{
- If the Object is curently locked by another thread then this
- function will either report an error or block. If a non-zero value
- is supplied for {\tt{"}}wait{\tt{"}}, the calling thread waits until the object
- is available for it to use. Otherwise, an error is reported and
- the function returns immediately without locking the Object.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This function applies to all Objects.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The \htmlref{astAnnul}{astAnnul} function is exceptional in that it can be used on
- pointers for Objects that are not currently locked by the calling
- thread. All other AST functions will report an error.
-
- \sstitem
- The Locked object will belong to the current AST context.
-
- \sstitem
- This function returns without action if the Object is already
- locked by the calling thread.
-
- \sstitem
- If simultaneous use of the same object is required by two or more
- threads, \htmlref{astCopy}{astCopy} should be used to to produce a deep copy of
- the Object for each thread. Each copy should then be unlocked by
- the parent thread (i.e. the thread that created the copy), and then
- locked by the child thread (i.e. the thread that wants to use the
- copy).
-
- \sstitem
- This function is only available in the C interface.
-
- \sstitem
- This function returns without action if the AST library has
- been built without POSIX thread support (i.e. the {\tt{"}}-with-pthreads{\tt{"}}
- option was not specified when running the {\tt{"}}configure{\tt{"}} script).
- }
- }
-}
-\sstroutine{
- astLutMap\sstlabel{astLutMap}
-}{
- Create a LutMap
-}{
- \sstdescription{
- This function creates a new \htmlref{LutMap}{LutMap} and optionally initialises
- its attributes.
-
- A LutMap is a specialised form of \htmlref{Mapping}{Mapping} which transforms
- 1-dimensional coordinates by using linear interpolation in a
- lookup table. Each input coordinate value is first scaled to
- give the index of an entry in the table by subtracting a
- starting value (the input coordinate corresponding to the first
- table entry) and dividing by an increment (the difference in
- input coordinate value between adjacent table entries).
-
- The resulting index will usually contain a fractional part, so
- the output coordinate value is then generated by interpolating
- linearly between the appropriate entries in the table. If the
- index lies outside the range of the table, linear extrapolation
- is used based on the two nearest entries (i.e. the two entries
- at the start or end of the table, as appropriate).
-
- If the lookup table entries increase or decrease monotonically,
- then the inverse transformation may also be performed.
- }
- \sstsynopsis{
- AstLutMap $*$astLutMap( int nlut, const double lut[],
- double start, double inc,
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- nlut
- }{
- The number of entries in the lookup table. This value must be
- at least 2.
- }
- \sstsubsection{
- lut
- }{
- An array containing the {\tt{"}}nlut{\tt{"}}
- lookup table entries.
- }
- \sstsubsection{
- start
- }{
- The input coordinate value which corresponds to the first lookup
- table entry.
- }
- \sstsubsection{
- inc
- }{
- The lookup table spacing (the increment in input coordinate
- value between successive lookup table entries). This value
- may be positive or negative, but must not be zero.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new LutMap. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astLutMap()
- }{
- A pointer to the new LutMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the entries in the lookup table either increase or decrease
- monotonically, then the new LutMap's \htmlref{TranInverse}{TranInverse} attribute will
- have a value of one, indicating that the inverse transformation
- can be performed. Otherwise, it will have a value of zero, so
- that any attempt to use the inverse transformation will result
- in an error.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- astMapBox\sstlabel{astMapBox}
-}{
- Find a bounding box for a Mapping
-}{
- \sstdescription{
- This function allows you to find the {\tt{"}}bounding box{\tt{"}} which just
- encloses another box after it has been transformed by a \htmlref{Mapping}{Mapping}
- (using either its forward or inverse transformation). A typical
- use might be to calculate the size of an image after being
- transformed by a Mapping.
-
- The function works on one dimension at a time. When supplied
- with the lower and upper bounds of a rectangular region (box) of
- input coordinate space, it finds the lowest and highest values
- taken by a nominated output coordinate within that
- region. Optionally, it also returns the input coordinates where
- these bounding values are attained. It should be used repeatedly
- to obtain the extent of the bounding box in more than one
- dimension.
- }
- \sstsynopsis{
- void astMapBox( AstMapping $*$this,
- const double lbnd\_in[], const double ubnd\_in[],
- int forward, int coord\_out,
- double $*$lbnd\_out, double $*$ubnd\_out,
- double xl[], double xu[] );
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Mapping.
- }
- \sstsubsection{
- lbnd\_in
- }{
- Pointer to an array of double, with one element for each
- Mapping input coordinate. This should contain the lower bound
- of the input box in each input dimension.
- }
- \sstsubsection{
- ubnd\_in
- }{
- Pointer to an array of double, with one element for each
- Mapping input coordinate. This should contain the upper bound
- of the input box in each input dimension.
-
- Note that it is permissible for the upper bound to be less
- than the corresponding lower bound, as the values will simply
- be swapped before use.
- }
- \sstsubsection{
- forward
- }{
- If this value is non-zero, then the Mapping's forward
- transformation will be used to transform the input
- box. Otherwise, its inverse transformation will be used.
-
- (If the inverse transformation is selected, then references
- to {\tt{"}}input{\tt{"}} and {\tt{"}}output{\tt{"}} coordinates in this description
- should be transposed. For example, the size of the {\tt{"}}lbnd\_in{\tt{"}}
- and {\tt{"}}ubnd\_in{\tt{"}} arrays should match the number of output
- coordinates, as given by the Mapping's \htmlref{Nout}{Nout}
- attribute. Similarly, the {\tt{"}}coord\_out{\tt{"}} parameter, below,
- should nominate one of the Mapping's input coordinates.)
- }
- \sstsubsection{
- coord\_out
- }{
- The index of the output coordinate for which the lower and
- upper bounds are required. This value should be at least one,
- and no larger than the number of Mapping output coordinates.
- }
- \sstsubsection{
- lbnd\_out
- }{
- Pointer to a double in which to return the lowest value taken
- by the nominated output coordinate within the specified
- region of input coordinate space.
- }
- \sstsubsection{
- ubnd\_out
- }{
- Pointer to a double in which to return the highest value
- taken by the nominated output coordinate within the specified
- region of input coordinate space.
- }
- \sstsubsection{
- xl
- }{
- An optional pointer to an array of double, with one element
- for each Mapping input coordinate. If given, this array will
- be filled with the coordinates of an input point (although
- not necessarily a unique one) for which the nominated output
- coordinate attains the lower bound value returned in
- {\tt{"}}$*$lbnd\_out{\tt{"}}.
-
- If these coordinates are not required, a NULL pointer may be
- supplied.
- }
- \sstsubsection{
- xu
- }{
- An optional pointer to an array of double, with one element
- for each Mapping input coordinate. If given, this array will
- be filled with the coordinates of an input point (although
- not necessarily a unique one) for which the nominated output
- coordinate attains the upper bound value returned in
- {\tt{"}}$*$ubnd\_out{\tt{"}}.
-
- If these coordinates are not required, a NULL pointer may be
- supplied.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Any input points which are transformed by the Mapping to give
- output coordinates containing the value AST\_\_BAD are regarded as
- invalid and are ignored. They will make no contribution to
- determining the output bounds, even although the nominated
- output coordinate might still have a valid value at such points.
-
- \sstitem
- An error will occur if the required output bounds cannot be
- found. Typically, this might happen if all the input points
- which the function considers turn out to be invalid (see
- above). The number of points considered before generating such
- an error is quite large, so this is unlikely to occur by
- accident unless valid points are restricted to a very small
- subset of the input coordinate space.
-
- \sstitem
- The values returned via {\tt{"}}lbnd\_out{\tt{"}}, {\tt{"}}ubnd\_out{\tt{"}}, {\tt{"}}xl{\tt{"}} and {\tt{"}}xu{\tt{"}}
- will be set to the value AST\_\_BAD if this function should fail
- for any reason. Their initial values on entry will not be
- altered if the function is invoked with the AST error status
- set.
- }
- }
-}
-\sstroutine{
- astMapGet0$<$X$>$\sstlabel{astMapGet0X}
-}{
- Get a scalar value from a KeyMap
-}{
- \sstdescription{
- This is a set of functions for retrieving a scalar value from a \htmlref{KeyMap}{KeyMap}.
- You should replace $<$X$>$ in the generic function name
- astMapGet0$<$X$>$
- by an appropriate 1-character type code (see the {\tt{"}}Data Type Codes{\tt{"}}
- section below for the code appropriate to each supported data type).
- The stored value is converted to the data type indiced by $<$X$>$
- before being returned (an error is reported if it is not possible to
- convert the stored value to the requested data type).
- }
- \sstsynopsis{
- int astMapGet0$<$X$>$( AstKeyMap $*$this, const char $*$key, $<$X$>$type $*$value );
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the KeyMap.
- }
- \sstsubsection{
- key
- }{
- The character string identifying the value to be retrieved. Trailing
- spaces are ignored.
- }
- \sstsubsection{
- value
- }{
- A pointer to a buffer in which to return the requested value.
- If the requested key is not found, then the contents of the
- buffer on entry to this function will be unchanged on exit.
- For pointer types ({\tt{"}}A{\tt{"}} and {\tt{"}}C{\tt{"}}), the buffer should be a suitable
- pointer, and the address of this pointer should be supplied as the
- {\tt{"}}value{\tt{"}} parameter.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astMapGet0$<$X$>$()
- }{
- a non-zero value
- if the requested key name was found, and is set to
- zero
- otherwise.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- No error is reported if the requested key cannot be found in the
- given KeyMap, but a
- zero
- value will be returned as the function value. The supplied buffer
- will be returned unchanged.
-
- \sstitem
- Key names are case sensitive, and white space is considered
- significant.
-
- \sstitem
- If the stored value is a vector value, then the first value in
- the vector will be returned.
-
- \sstitem
- A string pointer returned by astMapGet0C is guaranteed to remain valid
- and the string to which it points will not be over-written for a
- total of 50 successive invocations of this function. After this,
- the memory containing the string may be re-used, so a copy of
- the string should be made if it is needed for longer than this.
-
- \sstitem
- If the returned value is an AST \htmlref{Object}{Object} pointer, the Object's reference
- count is incremented by this call. Any subsequent changes made to
- the Object using the returned pointer will be reflected in any
- any other active pointers for the Object. The returned pointer
- should be annulled using
- \htmlref{astAnnul}{astAnnul}
- when it is no longer needed.
- }
- }
- \sstdiytopic{
- Data Type Codes
- }{
- To select the appropriate
- function, you should replace $<$X$>$ in the generic function name astMapGet0$<$X$>$
- with a 1-character data type code, so as to match the data type $<$X$>$type
- of the data you are processing, as follows:
- \sstitemlist{
-
- \sstitem
- F: float
-
- \sstitem
- D: double
-
- \sstitem
- I: int
-
- \sstitem
- C: {\tt{"}}const{\tt{"}} pointer to null terminated character string
-
- \sstitem
- A: Pointer to AstObject
-
- \sstitem
- P: Generic {\tt{"}}void $*${\tt{"}} pointer
-
- }
- For example, astMapGet0D would be used to get a {\tt{"}}double{\tt{"}} value,
- while astMapGet0I would be used to get an {\tt{"}}int{\tt{"}}, etc.
- }
-}
-\sstroutine{
- astMapGet1$<$X$>$\sstlabel{astMapGet1X}
-}{
- Get a vector value from a KeyMap
-}{
- \sstdescription{
- This is a set of functions for retrieving a vector value from a \htmlref{KeyMap}{KeyMap}.
- You should replace $<$X$>$ in the generic function name
- astMapGet1$<$X$>$
- by an appropriate 1-character type code (see the {\tt{"}}Data Type Codes{\tt{"}}
- section below for the code appropriate to each supported data type).
- The stored value is converted to the data type indiced by $<$X$>$
- before being returned (an error is reported if it is not possible to
- convert the stored value to the requested data type).
- Note, the astMapGet1C function has an extra parameter {\tt{"}}l{\tt{"}} which
- specifies the maximum length of each string to be stored in the
- {\tt{"}}value{\tt{"}} buffer (see the {\tt{"}}astMapGet1C{\tt{"}} section below).
- }
- \sstsynopsis{
- int astMapGet1$<$X$>$( AstKeyMap $*$this, const char $*$key, int mxval,
- int $*$nval, $<$X$>$type $*$value )
- int astMapGet1C( AstKeyMap $*$this, const char $*$key, int l, int mxval,
- int $*$nval, const char $*$value )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the KeyMap.
- }
- \sstsubsection{
- key
- }{
- The character string identifying the value to be retrieved. Trailing
- spaces are ignored.
- }
- \sstsubsection{
- mxval
- }{
- The number of elements in the
- {\tt{"}}value{\tt{"}} array.
- }
- \sstsubsection{
- nval
- }{
- The address of an integer in which to put the
- number of elements stored in the
- {\tt{"}}value{\tt{"}} array.
- Any unused elements of the array are left unchanged.
- }
- \sstsubsection{
- value
- }{
- A pointer to an array in which to return the requested values.
- If the requested key is not found, then the contents of the
- buffer on entry to this function will be unchanged on exit.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astMapGet1$<$X$>$()
- }{
- a non-zero value
- if the requested key name was found, and is set to
- zero
- otherwise.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- No error is reported if the requested key cannot be found in the
- given KeyMap, but a
- zero
- value will be returned as the function value. The supplied array
- will be returned unchanged.
-
- \sstitem
- Key names are case sensitive, and white space is considered
- significant.
-
- \sstitem
- If the stored value is a scalar value, then the value will be
- returned in the first element of the supplied array, and
- {\tt{"}}nval{\tt{"}}
- will be returned set to 1.
- }
- }
- \sstdiytopic{
- astMapGet1C
- }{
- The {\tt{"}}value{\tt{"}} buffer supplied to the astMapGet1C function should be a
- pointer to a character array with {\tt{"}}mxval$*$l{\tt{"}} elements, where {\tt{"}}l{\tt{"}} is
- the maximum length of a string to be returned. The value of {\tt{"}}l{\tt{"}}
- should be supplied as an extra parameter following {\tt{"}}key{\tt{"}} when
- invoking astMapGet1C, and should include space for a terminating
- null character.
- }
- \sstdiytopic{
- Data Type Codes
- }{
- To select the appropriate
- function, you should replace $<$X$>$ in the generic function name astMapGet1$<$X$>$
- with a 1-character data type code, so as to match the data type $<$X$>$type
- of the data you are processing, as follows:
- \sstitemlist{
-
- \sstitem
- D: double
-
- \sstitem
- F: float
-
- \sstitem
- I: int
-
- \sstitem
- C: {\tt{"}}const{\tt{"}} pointer to null terminated character string
-
- \sstitem
- A: Pointer to AstObject
-
- \sstitem
- P: Generic {\tt{"}}void $*${\tt{"}} pointer
-
- }
- For example, astMapGet1D would be used to get {\tt{"}}double{\tt{"}} values, while
- astMapGet1I would be used to get {\tt{"}}int{\tt{"}} values, etc. For D or I, the
- supplied {\tt{"}}value{\tt{"}} parameter should be a pointer to an array of doubles
- or ints, with {\tt{"}}mxval{\tt{"}} elements. For C, the supplied {\tt{"}}value{\tt{"}} parameter
- should be a pointer to a character string with {\tt{"}}mxval$*$l{\tt{"}} elements.
- For A, the supplied {\tt{"}}value{\tt{"}} parameter should be a pointer to an
- array of AstObject pointers.
- }
-}
-\sstroutine{
- astMapGetElem$<$X$>$\sstlabel{astMapGetElemX}
-}{
- Get a single element of a vector value from a KeyMap
-}{
- \sstdescription{
- This is a set of functions for retrieving a single element of a vector
- value from a \htmlref{KeyMap}{KeyMap}. You should replace $<$X$>$ in the generic function name
- astMapGetElem$<$X$>$
- by an appropriate 1-character type code (see the {\tt{"}}Data Type Codes{\tt{"}}
- section below for the code appropriate to each supported data type).
- The stored value is converted to the data type indiced by $<$X$>$
- before being returned (an error is reported if it is not possible to
- convert the stored value to the requested data type).
- Note, the astMapGetElemC function has an extra parameter {\tt{"}}l{\tt{"}} which
- specifies the maximum length of the string to be stored in the
- {\tt{"}}value{\tt{"}} buffer (see the {\tt{"}}astMapGetElemC{\tt{"}} section below).
- }
- \sstsynopsis{
- int astMapGetElem$<$X$>$( AstKeyMap $*$this, const char $*$key, int elem,
- $<$X$>$type $*$value )
- int astMapGetElemC( AstKeyMap $*$this, const char $*$key, int l, int elem,
- const char $*$value )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the KeyMap.
- }
- \sstsubsection{
- key
- }{
- The character string identifying the value to be retrieved. Trailing
- spaces are ignored.
- }
- \sstsubsection{
- elem
- }{
- The index of the required vector element, starting at
- zero.
- An error will be reported if the value is outside the range of
- the vector.
- }
- \sstsubsection{
- value
- }{
- A pointer to a buffer in which to return the requested value.
- If the requested key is not found, then the contents of the
- buffer on entry to this function will be unchanged on exit.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astMapGetElem$<$X$>$()
- }{
- a non-zero value
- if the requested key name was found, and is set to
- zero
- otherwise.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- No error is reported if the requested key cannot be found in the
- given KeyMap, but a
- zero
- value will be returned as the function value.
-
- \sstitem
- Key names are case sensitive, and white space is considered
- significant.
- }
- }
- \sstdiytopic{
- astMapGetElemC
- }{
- The {\tt{"}}value{\tt{"}} buffer supplied to the astMapGetElemC function should be a
- pointer to a character array with {\tt{"}}l{\tt{"}} elements, where {\tt{"}}l{\tt{"}} is the
- maximum length of the string to be returned. The value of {\tt{"}}l{\tt{"}}
- should be supplied as an extra parameter following {\tt{"}}key{\tt{"}} when
- invoking astMapGetElemC, and should include space for a terminating
- null character.
- }
- \sstdiytopic{
- Data Type Codes
- }{
- To select the appropriate
- function, you should replace $<$X$>$ in the generic function name
- astMapGetElem$<$X$>$
- with a 1-character data type code, so as to match the data type $<$X$>$type
- of the data you are processing, as follows:
- \sstitemlist{
-
- \sstitem
- D: double
-
- \sstitem
- F: float
-
- \sstitem
- I: int
-
- \sstitem
- C: {\tt{"}}const{\tt{"}} pointer to null terminated character string
-
- \sstitem
- A: Pointer to AstObject
-
- \sstitem
- P: Generic {\tt{"}}void $*${\tt{"}} pointer
-
- }
- For example, astMapGetElemD would be used to get a {\tt{"}}double{\tt{"}} value, while
- astMapGetElemI would be used to get an {\tt{"}}int{\tt{"}} value, etc. For D or I, the
- supplied {\tt{"}}value{\tt{"}} parameter should be a pointer to a double or int. For
- C, the supplied {\tt{"}}value{\tt{"}} parameter should be a pointer to a character
- string with {\tt{"}}l{\tt{"}} elements. For A, the supplied {\tt{"}}value{\tt{"}} parameter should
- be a pointer to an AstObject pointer.
- }
-}
-\sstroutine{
- astMapHasKey\sstlabel{astMapHasKey}
-}{
- Check if an entry with a given key exists in a KeyMap
-}{
- \sstdescription{
- This function returns a flag indicating if the \htmlref{KeyMap}{KeyMap} contains an
- entry with the given key.
- }
- \sstsynopsis{
- int astMapHasKey( AstKeyMap $*$this, const char $*$key )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the KeyMap.
- }
- \sstsubsection{
- key
- }{
- The character string identifying the KeyMap entry. Trailing spaces are
- ignored.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astMapHasKey()
- }{
- Non-zero if the key was found, and zero otherwise.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A function value of
- zero
- will be returned if an error has already occurred, or if this
- function should fail for any reason.
- }
- }
-}
-\sstroutine{
- astMapKey\sstlabel{astMapKey}
-}{
- Get the key at a given index within the KeyMap
-}{
- \sstdescription{
- This function returns a string holding the key for the entry with
- the given index within the \htmlref{KeyMap}{KeyMap}.
-
- This function is intended primarily as a means of iterating round all
- the elements in a KeyMap. For this purpose, the number of entries in
- the KeyMap should first be found using
- \htmlref{astMapSize}{astMapSize}
- and this function should then be called in a loop, with the index
- value going from
- zero to one less than the size of the KeyMap.
- The index associated with a given entry is not, in general, related to
- the order in which the entries are added to the KeyMap, and may change
- if other entries are added to or removed from the KeyMap.
- }
- \sstsynopsis{
- const char $*$astMapKey( AstKeyMap $*$this, int index )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the KeyMap.
- }
- \sstsubsection{
- index
- }{
- The index into the KeyMap. The first entry has index
- zero, and the last has index {\tt{"}}size-1{\tt{"}}, where {\tt{"}}size{\tt{"}} is the value
- returned by the astMapSize function.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astMapKey()
- }{
- A pointer to a null-terminated string containing the key.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The returned pointer is guaranteed to remain valid and the
- string to which it points will not be over-written for a total
- of 50 successive invocations of this function. After this, the
- memory containing the string may be re-used, so a copy of the
- string should be made if it is needed for longer than this.
-
- \sstitem
- A NULL pointer will be returned if this function is invoked
- with the AST error status set, or if it should fail for any
- reason.
- }
- }
-}
-\sstroutine{
- astMapLenC\sstlabel{astMapLenC}
-}{
- Get the number of characters in a character entry in a KeyMap
-}{
- \sstdescription{
- This function returns the minimum length which a character variable
- which must have in order to be able to store a specified entry in
- the supplied \htmlref{KeyMap}{KeyMap}. If the named entry is a vector entry, then the
- returned value is the length of the longest element of the vector
- value.
- }
- \sstsynopsis{
- int astMapLenC( AstKeyMap $*$this, const char $*$key )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the KeyMap.
- }
- \sstsubsection{
- key
- }{
- The character string identifying the KeyMap entry. Trailing
- spaces are ignored.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astMapLenC()
- }{
- The length (i.e. number of characters) of the longest formatted
- value associated with the named entry.
- This does not include the trailing null character.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A function value of zero will be returned without error if the
- named entry cannot be formatted as a character string.
-
- \sstitem
- A function value of zero will be returned if an error has already
- occurred, or if this function should fail for any reason.
- }
- }
-}
-\sstroutine{
- astMapLength\sstlabel{astMapLength}
-}{
- Get the vector length of an entry in a KeyMap
-}{
- \sstdescription{
- This function returns the vector length of a named entry in a \htmlref{KeyMap}{KeyMap},
- (that is, how many values are associated with the entry).
- }
- \sstsynopsis{
- int astMapLength( AstKeyMap $*$this, const char $*$key )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the KeyMap.
- }
- \sstsubsection{
- key
- }{
- The character string identifying the KeyMap entry. Trailing
- spaces are ignored.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astMapLength()
- }{
- The length of the entry. One for a scalar, greater than one for
- a vector. A value of zero is returned if the KeyMap does not
- contain the named entry.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A function value of zero will be returned if an error has already
- occurred, or if this function should fail for any reason.
- }
- }
-}
-\sstroutine{
- astMapPut0$<$X$>$\sstlabel{astMapPut0X}
-}{
- Add a scalar value to a KeyMap
-}{
- \sstdescription{
- This is a set of functions
- for adding scalar values to a \htmlref{KeyMap}{KeyMap}. You should use a
- function
- which matches the data type of the data you wish to add to the KeyMap
- by replacing $<$X$>$ in the generic
- function name astMapPut0$<$X$>$
- by an appropriate 1-character type code (see the {\tt{"}}Data Type Codes{\tt{"}}
- section below for the code appropriate to each supported data type).
- }
- \sstsynopsis{
- void astMapPut0$<$X$>$( AstKeyMap $*$this, const char $*$key, $<$X$>$type value,
- const char $*$comment );
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the KeyMap in which to store the supplied value.
- }
- \sstsubsection{
- key
- }{
- A character string to be stored with the value, which can later
- be used to identify the value. Trailing spaces are ignored.
- }
- \sstsubsection{
- value
- }{
- The value to be stored. The data type of this value should match the
- 1-character type code appended to the
- function name (e.g. if you are using astMapPut0A, the type of this
- value should be {\tt{"}}pointer to AstObject{\tt{"}}).
- }
- \sstsubsection{
- comment
- }{
- A pointer to a null-terminated comment string to be stored with the
- value. A NULL pointer may be supplied, in which case no comment is
- stored.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Key names are case sensitive, and white space is considered
- significant.
-
- \sstitem
- If the supplied key is already in use in the KeyMap, the new value
- will replace the old value.
-
- \sstitem
- If the stored value is an AST \htmlref{Object}{Object} pointer, the Object's reference
- count is incremented by this call. Any subsequent changes made to
- the Object using the returned pointer will be reflected in any
- any other active pointers for the Object, including any obtained
- later using
- astMapget0A.
- The reference count for the Object will be decremented when the
- KeyMap is destroyed, or the entry is removed or over-written with a
- different pointer.
- }
- }
- \sstdiytopic{
- Data Type Codes
- }{
- To select the appropriate
- function, you should replace $<$X$>$ in the generic function name astMapPut0$<$X$>$
- with a 1-character data type code, so as to match the data type $<$X$>$type
- of the data you are processing, as follows:
- \sstitemlist{
-
- \sstitem
- D: double
-
- \sstitem
- F: float
-
- \sstitem
- I: int
-
- \sstitem
- C: {\tt{"}}const{\tt{"}} pointer to null terminated character string
-
- \sstitem
- A: Pointer to AstObject
-
- \sstitem
- P: Generic {\tt{"}}void $*${\tt{"}} pointer
-
- }
- For example, astMapPut0D would be used to store a {\tt{"}}double{\tt{"}} value,
- while astMapPut0I would be used to store an {\tt{"}}int{\tt{"}}, etc.
-
- Note that KeyMaps containing generic {\tt{"}}void $*${\tt{"}} pointers cannot be
- written out using \htmlref{astShow}{astShow} or \htmlref{astWrite}{astWrite}. An error will be reported if
- this is attempted.
- }
-}
-\sstroutine{
- astMapPut1$<$X$>$\sstlabel{astMapPut1X}
-}{
- Add a vector value to a KeyMap
-}{
- \sstdescription{
- This is a set of functions
- for adding vector values to a \htmlref{KeyMap}{KeyMap}. You should use a
- function
- which matches the data type of the data you wish to add to the KeyMap
- by replacing $<$X$>$ in the generic
- function name astMapPut1$<$X$>$
- by an appropriate 1-character type code (see the {\tt{"}}Data Type Codes{\tt{"}}
- section below for the code appropriate to each supported data type).
- }
- \sstsynopsis{
- void astMapPut1$<$X$>$( AstKeyMap $*$this, const char $*$key, int size,
- const $<$X$>$type value[], const char $*$comment );
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the KeyMap in which to store the supplied values.
- }
- \sstsubsection{
- key
- }{
- A character string to be stored with the values, which can later
- be used to identify the values. Trailing spaces are ignored.
- }
- \sstsubsection{
- size
- }{
- The number of elements in the supplied array of values.
- }
- \sstsubsection{
- value
- }{
- The array of values to be stored. The data type of this value should
- match the 1-character type code appended to the
- function name (e.g. if you are using astMapPut1A, the type of this
- value should be {\tt{"}}array of pointers to AstObject{\tt{"}}).
- }
- \sstsubsection{
- comment
- }{
- A pointer to a null-terminated comment string to be stored with the
- values. A NULL pointer may be supplied, in which case no comment is
- stored.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the supplied key is already in use in the KeyMap, the new values
- will replace the old values.
-
- \sstitem
- Key names are case sensitive, and white space is considered
- significant.
- }
- }
- \sstdiytopic{
- Data Type Codes
- }{
- To select the appropriate
- function, you should replace $<$X$>$ in the generic function name astMapPut1$<$X$>$
- with a 1-character data type code, so as to match the data type $<$X$>$type
- of the data you are processing, as follows:
- \sstitemlist{
-
- \sstitem
- D: double
-
- \sstitem
- F: float
-
- \sstitem
- I: int
-
- \sstitem
- C: {\tt{"}}const{\tt{"}} pointer to null terminated character string
-
- \sstitem
- A: Pointer to AstObject
-
- \sstitem
- P: Generic {\tt{"}}void $*${\tt{"}} pointer
-
- }
- For example, astMapPut1D would be used to store {\tt{"}}double{\tt{"}} values,
- while astMapPut1I would be used to store {\tt{"}}int{\tt{"}}, etc.
-
- Note that KeyMaps containing generic {\tt{"}}void $*${\tt{"}} pointers cannot be
- written out using \htmlref{astShow}{astShow} or \htmlref{astWrite}{astWrite}. An error will be reported if
- this is attempted.
- }
-}
-\sstroutine{
- astMapRegion\sstlabel{astMapRegion}
-}{
- Transform a Region into a new Frame using a given Mapping
-}{
- \sstdescription{
- This function returns a pointer to a new \htmlref{Region}{Region} which corresponds to
- supplied Region described by some other specified coordinate system. A
- \htmlref{Mapping}{Mapping} is supplied which transforms positions between the old and new
- coordinate systems. The new Region may not be of the same class as
- the original region.
- }
- \sstsynopsis{
- AstRegion $*$astMapRegion( AstRegion $*$this, AstMapping $*$map,
- AstFrame $*$frame )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Region.
- }
- \sstsubsection{
- map
- }{
- Pointer to a Mapping which transforms positions from the
- coordinate system represented by the supplied Region to the
- coordinate system specified by
- {\tt{"}}frame{\tt{"}}.
- The supplied Mapping should define both forward and inverse
- transformations, and these transformations should form a genuine
- inverse pair. That is, transforming a position using the forward
- transformation and then using the inverse transformation should
- produce the original input position. Some Mapping classes (such
- as \htmlref{PermMap}{PermMap}, \htmlref{MathMap}{MathMap}, \htmlref{SphMap}{SphMap}) can result in Mappings for which this
- is not true.
- }
- \sstsubsection{
- frame
- }{
- Pointer to a \htmlref{Frame}{Frame} describing the coordinate system in which
- the new Region is required.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astMapRegion()
- }{
- A pointer to a new Region. This Region will represent the area
- within the coordinate system specified by
- {\tt{"}}frame{\tt{"}}
- which corresponds to the supplied Region.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The uncertainty associated with the supplied Region is modified
- using the supplied Mapping.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astMapRemove\sstlabel{astMapRemove}
-}{
- Removed a named entry from a KeyMap
-}{
- \sstdescription{
- This function
- removes a named entry from a \htmlref{KeyMap}{KeyMap}. It returns without action if the
- KeyMap does not contain the specified key.
- }
- \sstsynopsis{
- void astMapRemove( AstKeyMap $*$this, const char $*$key )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the KeyMap.
- }
- \sstsubsection{
- key
- }{
- The character string identifying the value to be retrieved. Trailing
- spaces are ignored.
- }
- }
-}
-\sstroutine{
- astMapSize\sstlabel{astMapSize}
-}{
- Get the number of entries in a KeyMap
-}{
- \sstdescription{
- This function returns the number of entries in a \htmlref{KeyMap}{KeyMap}.
- }
- \sstsynopsis{
- int astMapSize( AstKeyMap $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the KeyMap.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astMapSize()
- }{
- The number of entries in the KeyMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A function value of zero will be returned if an error has already
- occurred, or if this function should fail for any reason.
- }
- }
-}
-\sstroutine{
- astMapSplit\sstlabel{astMapSplit}
-}{
- Split a Mapping up into parallel component Mappings
-}{
- \sstdescription{
- This function
- creates a new \htmlref{Mapping}{Mapping} which connects specified inputs within a
- supplied Mapping to the corresponding outputs of the supplied Mapping.
- This is only possible if the specified inputs correspond to some
- subset of the Mapping outputs. That is, there must exist a subset of
- the Mapping outputs for which each output depends only on the selected
- Mapping inputs, and not on any of the inputs which have not been
- selected. Also, any output which is not in this subset must not depend
- on any of the selected inputs. If these conditions are not met by the
- supplied Mapping, then
- a NULL
- Mapping pointer is returned.
- }
- \sstsynopsis{
- void astMapSplit( AstMapping $*$this, int nin, const int $*$in, int $*$out,
- AstMapping $*$$*$map )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Mapping to be split.
- }
- \sstsubsection{
- nin
- }{
- The number of inputs to pick from {\tt{"}}this{\tt{"}}.
- }
- \sstsubsection{
- in
- }{
- Pointer to an
- array holding the indices within the supplied Mapping of the inputs
- which are to be picked from the Mapping.
- This array should have {\tt{"}}nin{\tt{"}} elements.
- If {\tt{"}}\htmlref{Nin}{Nin}{\tt{"}} is the number of inputs of the supplied Mapping, then each
- element should have a value in the range 1 to Nin.
- }
- \sstsubsection{
- out
- }{
- Pointer to an
- array in which to return the indices of the outputs of the supplied
- Mapping which are fed by the picked inputs. A value of one is
- used to refer to the first Mapping output. The supplied array should
- have a length at least equal to the number of outputs in the
- supplied Mapping. The number of values stored in the array on
- exit will equal the number of outputs in the returned Mapping.
- The i'th element in the returned array holds the index within
- the supplied Mapping which corresponds to the i'th output of
- the returned Mapping.
- }
- \sstsubsection{
- map
- }{
- Address of a location at which to return a pointer to the
- returned Mapping. This Mapping will have
- {\tt{"}}nin{\tt{"}} inputs (the number of outputs may be different to {\tt{"}}nin{\tt{"}}). NULL
- is returned if the supplied Mapping has no subset of outputs which
- depend only on the selected inputs.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If this
- function
- is invoked with the global error status set, or if it should fail for
- any reason, then
- a NULL value
- will be returned for
- the {\tt{"}}map{\tt{"}} pointer.
- }
- }
-}
-\sstroutine{
- astMapType\sstlabel{astMapType}
-}{
- Get the data type of an entry in a KeyMap
-}{
- \sstdescription{
- This function returns a value indicating the data type of a
- named entry in a \htmlref{KeyMap}{KeyMap}. This is the data type which was used when the
- entry was added to the KeyMap.
- }
- \sstsynopsis{
- int astMapType( AstKeyMap $*$this, const char $*$key )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the KeyMap.
- }
- \sstsubsection{
- key
- }{
- The character string identifying the KeyMap entry. Trailing
- spaces are ignored.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astMapType()
- }{
- One of AST\_\_INTTYPE (for integer), AST\_\_DOUBLETYPE (for double
- precision floating point), AST\_\_FLOATTYPE (for single
- precision floating point), AST\_\_STRINGTYPE (for character string)
- or AST\_\_OBJECTTYPE (for AST \htmlref{Object}{Object} pointer). AST\_\_BADTYPE is
- returned if the supplied key is not found in the KeyMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A function value of AST\_\_BADTYPE will be returned if an error has
- already occurred, or if this function should fail for any reason.
- }
- }
-}
-\sstroutine{
- astMark\sstlabel{astMark}
-}{
- Draw a set of markers for a Plot
-}{
- \sstdescription{
- This function draws a set of markers (symbols) at positions
- specified in the physical coordinate system of a \htmlref{Plot}{Plot}. The
- positions are transformed into graphical coordinates to
- determine where the markers should appear within the plotting
- area.
- }
- \sstsynopsis{
- void astMark( AstPlot $*$this, int nmark, int ncoord, int indim,
- const double $*$in, int type )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Plot.
- }
- \sstsubsection{
- nmark
- }{
- The number of markers to draw. This may be zero, in which
- case nothing will be drawn.
- }
- \sstsubsection{
- ncoord
- }{
- The number of coordinates being supplied for each mark
- (i.e. the number of axes in the current \htmlref{Frame}{Frame} of the Plot, as
- given by its \htmlref{Naxes}{Naxes} attribute).
- }
- \sstsubsection{
- indim
- }{
- The number of elements along the second dimension of the {\tt{"}}in{\tt{"}}
- array (which contains the marker coordinates). This value is
- required so that the coordinate values can be correctly
- located if they do not entirely fill this array. The value
- given should not be less than {\tt{"}}nmark{\tt{"}}.
- }
- \sstsubsection{
- in
- }{
- The address of the first element of a 2-dimensional array of
- shape {\tt{"}}[ncoord][indim]{\tt{"}} giving the
- physical coordinates of the points where markers are to be
- drawn. These should be stored such that the value of
- coordinate number {\tt{"}}coord{\tt{"}} for input mark number {\tt{"}}mark{\tt{"}} is
- found in element {\tt{"}}in[coord][mark]{\tt{"}}.
- }
- \sstsubsection{
- type
- }{
- A value specifying the type (e.g. shape) of marker to be
- drawn. The set of values which may be used (and the shapes
- that will result) is determined by the underlying graphics
- system.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Markers are not drawn at positions which have any coordinate
- equal to the value AST\_\_BAD (or where the transformation into
- graphical coordinates yields coordinates containing the value
- AST\_\_BAD).
-
- \sstitem
- If any marker position is clipped (see \htmlref{astClip}{astClip}), then the
- entire marker is not drawn.
-
- \sstitem
- An error results if the base Frame of the Plot is not 2-dimensional.
-
- \sstitem
- An error also results if the transformation between the
- current and base Frames of the Plot is not defined (i.e. the
- Plot's \htmlref{TranInverse}{TranInverse} attribute is zero).
- }
- }
-}
-\sstroutine{
- astMask$<$X$>$\sstlabel{astMaskX}
-}{
- Mask a region of a data grid
-}{
- \sstdescription{
- This is a set of functions for masking out regions within gridded data
- (e.g. an image). The functions modifies a given data grid by
- assigning a specified value to all samples which are inside (or outside
- if {\tt{"}}inside{\tt{"}} is zero)
- the specified \htmlref{Region}{Region}.
-
- You should use a masking function which matches the numerical
- type of the data you are processing by replacing $<$X$>$ in
- the generic function name astMask$<$X$>$ by an appropriate 1- or
- 2-character type code. For example, if you are masking data
- with type {\tt{"}}float{\tt{"}}, you should use the function astMaskF (see
- the {\tt{"}}Data Type Codes{\tt{"}} section below for the codes appropriate to
- other numerical types).
- }
- \sstsynopsis{
- int astMask$<$X$>$( AstRegion $*$this, AstMapping $*$map, int inside, int ndim,
- const int lbnd[], const int ubnd[], $<$Xtype$>$ in[],
- $<$Xtype$>$ val )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to a Region.
- }
- \sstsubsection{
- map
- }{
- Pointer to a \htmlref{Mapping}{Mapping}. The forward transformation should map
- positions in the coordinate system of the supplied Region
- into pixel coordinates as defined by the
- {\tt{"}}lbnd{\tt{"}} and {\tt{"}}ubnd{\tt{"}} parameters. A NULL pointer
- can be supplied if the coordinate system of the supplied Region
- corresponds to pixel coordinates. This is equivalent to
- supplying a \htmlref{UnitMap}{UnitMap}.
-
- The number of inputs for this Mapping (as given by its \htmlref{Nin}{Nin} attribute)
- should match the number of axes in the supplied Region (as given
- by the \htmlref{Naxes}{Naxes} attribute of the Region).
- The number of outputs for the Mapping (as given by its \htmlref{Nout}{Nout} attribute)
- should match the number of
- grid dimensions given by the value of {\tt{"}}ndim{\tt{"}}
- below.
- }
- \sstsubsection{
- inside
- }{
- A boolean value which indicates which pixel are to be masked. If
- a non-zero value
- is supplied, then all grid pixels with centres inside the supplied
- Region are assigned the value given by
- {\tt{"}}val{\tt{"}},
- and all other pixels are left unchanged. If
- zero
- is supplied, then all grid pixels with centres not inside the supplied
- Region are assigned the value given by
- {\tt{"}}val{\tt{"}},
- and all other pixels are left unchanged. Note, the \htmlref{Negated}{Negated}
- attribute of the Region is used to determine which pixel are
- inside the Region and which are outside. So the inside of a Region
- which has not been negated is the same as the outside of the
- corresponding negated Region.
-
- For types of Region such as \htmlref{PointList}{PointList} which have zero volume,
- pixel centres will rarely fall exactly within the Region. For
- this reason, the inclusion criterion is changed for zero-volume
- Regions so that pixels are included (or excluded) if any part of
- the Region passes through the pixel. For a PointList, this means
- that pixels are included (or excluded) if they contain at least
- one of the points listed in the PointList.
- }
- \sstsubsection{
- ndim
- }{
- The number of dimensions in the input grid. This should be at
- least one.
- }
- \sstsubsection{
- lbnd
- }{
- Pointer to an array of integers, with {\tt{"}}ndim{\tt{"}} elements,
- containing the coordinates of the centre of the first pixel
- in the input grid along each dimension.
- }
- \sstsubsection{
- ubnd
- }{
- Pointer to an array of integers, with {\tt{"}}ndim{\tt{"}} elements,
- containing the coordinates of the centre of the last pixel in
- the input grid along each dimension.
-
- Note that {\tt{"}}lbnd{\tt{"}} and {\tt{"}}ubnd{\tt{"}} together define the shape
- and size of the input grid, its extent along a particular
- (j'th) dimension being ubnd[j]-lbnd[j]$+$1 (assuming the
- index {\tt{"}}j{\tt{"}} to be zero-based). They also define
- the input grid's coordinate system, each pixel having unit
- extent along each dimension with integral coordinate values
- at its centre.
- }
- \sstsubsection{
- in
- }{
- Pointer to an array, with one element for each pixel in the
- input grid, containing the data to be masked. The
- numerical type of this array should match the 1- or
- 2-character type code appended to the function name (e.g. if
- you are using astMaskF, the type of each array element
- should be {\tt{"}}float{\tt{"}}).
-
- The storage order of data within this array should be such
- that the index of the first grid dimension varies most
- rapidly and that of the final dimension least rapidly
- (i.e. Fortran array indexing is used).
-
- On exit, the samples specified by
- {\tt{"}}inside{\tt{"}} are set to the value of {\tt{"}}val{\tt{"}}.
- All other samples are left unchanged.
- }
- \sstsubsection{
- val
- }{
- This argument should have the same type as the elements of
- the {\tt{"}}in{\tt{"}} array. It specifies the value used to flag the
- masked data (see
- {\tt{"}}inside{\tt{"}}).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astMask$<$X$>$()
- }{
- The number of pixels to which a value of
- {\tt{"}}badval{\tt{"}}
- has been assigned.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A value of zero will be returned if this function is invoked
- with the global error status set, or if it should fail for any
- reason.
- }
- }
- \sstdiytopic{
- Data Type Codes
- }{
- To select the appropriate masking function, you should
- replace $<$X$>$ in the generic function name astMask$<$X$>$ with a
- 1- or 2-character data type code, so as to match the numerical
- type $<$Xtype$>$ of the data you are processing, as follows:
- \sstitemlist{
-
- \sstitem
- D: double
-
- \sstitem
- F: float
-
- \sstitem
- L: long int
-
- \sstitem
- UL: unsigned long int
-
- \sstitem
- I: int
-
- \sstitem
- UI: unsigned int
-
- \sstitem
- S: short int
-
- \sstitem
- US: unsigned short int
-
- \sstitem
- B: byte (signed char)
-
- \sstitem
- UB: unsigned byte (unsigned char)
-
- }
- For example, astMaskD would be used to process {\tt{"}}double{\tt{"}}
- data, while astMaskS would be used to process {\tt{"}}short int{\tt{"}}
- data, etc.
- }
-}
-\sstroutine{
- astMatchAxes\sstlabel{astMatchAxes}
-}{
- Find any corresponding axes in two Frames
-}{
- \sstdescription{
- This function looks for corresponding axes within two supplied
- Frames. An array of integers is returned that contains an element
- for each axis in the second supplied \htmlref{Frame}{Frame}. An element in this array
- will be set to zero if the associated axis within the second Frame
- has no corresponding axis within the first Frame. Otherwise, it
- will be set to the index (a non-zero positive integer) of the
- corresponding axis within the first supplied Frame.
- }
- \sstsynopsis{
- void astMatchAxes( AstFrame $*$frm1, AstFrame $*$frm2, int $*$axes )
- }
- \sstparameters{
- \sstsubsection{
- frm1
- }{
- Pointer to the first Frame.
- }
- \sstsubsection{
- frm2
- }{
- Pointer to the second Frame.
- }
- \sstsubsection{
- axes
- }{
- Pointer to an
- integer array in which to return the indices of the axes (within
- the first Frame) that correspond to each axis within the second
- Frame. \htmlref{Axis}{Axis} indices start at 1. A value of zero will be stored
- in the returned array for each axis in the second Frame that has
- no corresponding axis in the first Frame.
-
- The number of elements in this array must be greater than or
- equal to the number of axes in the second Frame.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- This function applies to all Frames.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Corresponding axes are identified by the fact that a \htmlref{Mapping}{Mapping} can
- be found between them using
- \htmlref{astFindFrame}{astFindFrame} or \htmlref{astConvert}{astConvert}.
- Thus, {\tt{"}}corresponding axes{\tt{"}} are not necessarily identical. For
- instance, \htmlref{SkyFrame}{SkyFrame} axes in two Frames will match even if they
- describe different celestial coordinate systems
- }
- }
-}
-\sstroutine{
- astMathMap\sstlabel{astMathMap}
-}{
- Create a MathMap
-}{
- \sstdescription{
- This function creates a new \htmlref{MathMap}{MathMap} and optionally initialises its
- attributes.
-
- A MathMap is a \htmlref{Mapping}{Mapping} which allows you to specify a set of forward
- and/or inverse transformation functions using arithmetic operations
- and mathematical functions similar to those available in C. The
- MathMap interprets these functions at run-time, whenever its forward
- or inverse transformation is required. Because the functions are not
- compiled in the normal sense (unlike an \htmlref{IntraMap}{IntraMap}), they may be used to
- describe coordinate transformations in a transportable manner. A
- MathMap therefore provides a flexible way of defining new types of
- Mapping whose descriptions may be stored as part of a dataset and
- interpreted by other programs.
- }
- \sstsynopsis{
- AstMathMap $*$astMathMap( int nin, int nout,
- int nfwd, const char $*$fwd[],
- int ninv, const char $*$inv[],
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- nin
- }{
- Number of input variables for the MathMap. This determines the
- value of its \htmlref{Nin}{Nin} attribute.
- }
- \sstsubsection{
- nout
- }{
- Number of output variables for the MathMap. This determines the
- value of its \htmlref{Nout}{Nout} attribute.
- }
- \sstsubsection{
- nfwd
- }{
- The number of forward transformation functions being supplied.
- This must be at least equal to {\tt{"}}nout{\tt{"}}, but may be increased to
- accommodate any additional expressions which define intermediate
- variables for the forward transformation (see the {\tt{"}}Calculating
- Intermediate Values{\tt{"}} section below).
- }
- \sstsubsection{
- fwd
- }{
- An array (with {\tt{"}}nfwd{\tt{"}} elements) of pointers to null terminated strings
- which contain the expressions defining the forward transformation.
- The syntax of these expressions is described below.
- }
- \sstsubsection{
- ninv
- }{
- The number of inverse transformation functions being supplied.
- This must be at least equal to {\tt{"}}nin{\tt{"}}, but may be increased to
- accommodate any additional expressions which define intermediate
- variables for the inverse transformation (see the {\tt{"}}Calculating
- Intermediate Values{\tt{"}} section below).
- }
- \sstsubsection{
- inv
- }{
- An array (with {\tt{"}}ninv{\tt{"}} elements) of pointers to null terminated strings
- which contain the expressions defining the inverse transformation.
- The syntax of these expressions is described below.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new MathMap. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- If no initialisation is required, a zero-length string may be
- supplied.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astMathMap()
- }{
- A pointer to the new MathMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The sequence of numbers produced by the random number functions
- available within a MathMap is normally unpredictable and different for
- each MathMap. However, this behaviour may be controlled by means of
- the MathMap's \htmlref{Seed}{Seed} attribute.
-
- \sstitem
- Normally, compound Mappings (CmpMaps) which involve MathMaps will
- not be subject to simplification (e.g. using \htmlref{astSimplify}{astSimplify}) because AST
- cannot know how different MathMaps will interact. However, in the
- special case where a MathMap occurs in series with its own inverse,
- then simplification may be possible. Whether simplification does, in
- fact, occur under these circumstances is controlled by the MathMap's
- \htmlref{SimpFI}{SimpFI} and \htmlref{SimpIF}{SimpIF} attributes.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Defining Transformation Functions
- }{
- A MathMap's transformation functions are supplied as a set of
- expressions in an array of character strings. Normally you would
- supply the same number of expressions for the forward transformation,
- via the {\tt{"}}fwd{\tt{"}} parameter, as there are output variables (given by the
- MathMap's Nout attribute). For instance, if Nout is 2 you might use:
- \sstitemlist{
-
- \sstitem
- {\tt{"}}r = sqrt( x $*$ x $+$ y $*$ y ){\tt{"}}
-
- \sstitem
- {\tt{"}}theta = atan2( y, x ){\tt{"}}
-
- }
- which defines a transformation from Cartesian to polar
- coordinates. Here, the variables that appear on the left of each
- expression ({\tt{"}}r{\tt{"}} and {\tt{"}}theta{\tt{"}}) provide names for the output variables
- and those that appear on the right ({\tt{"}}x{\tt{"}} and {\tt{"}}y{\tt{"}}) are references to
- input variables.
-
- To complement this, you must also supply expressions for the inverse
- transformation via the {\tt{"}}inv{\tt{"}} parameter. In this case, the number of
- expressions given would normally match the number of MathMap input
- coordinates (given by the Nin attribute). If Nin is 2, you might use:
- \sstitemlist{
-
- \sstitem
- {\tt{"}}x = r $*$ cos( theta ){\tt{"}}
-
- \sstitem
- {\tt{"}}y = r $*$ sin( theta ){\tt{"}}
-
- }
- which expresses the transformation from polar to Cartesian
- coordinates. Note that here the input variables ({\tt{"}}x{\tt{"}} and {\tt{"}}y{\tt{"}}) are
- named on the left of each expression, and the output variables ({\tt{"}}r{\tt{"}}
- and {\tt{"}}theta{\tt{"}}) are referenced on the right.
-
- Normally, you cannot refer to a variable on the right of an expression
- unless it is named on the left of an expression in the complementary
- set of functions. Therefore both sets of functions (forward and
- inverse) must be formulated using the same consistent set of variable
- names. This means that if you wish to leave one of the transformations
- undefined, you must supply dummy expressions which simply name each of
- the output (or input) variables. For example, you might use:
- \sstitemlist{
-
- \sstitem
- {\tt{"}}x{\tt{"}}
-
- \sstitem
- {\tt{"}}y{\tt{"}}
-
- }
- for the inverse transformation above, which serves to name the input
- variables but without defining an inverse transformation.
- }
- \sstdiytopic{
- Calculating Intermediate Values
- }{
- It is sometimes useful to calculate intermediate values and then to
- use these in the final expressions for the output (or input)
- variables. This may be done by supplying additional expressions for
- the forward (or inverse) transformation functions. For instance, the
- following array of five expressions describes 2-dimensional pin-cushion
- distortion:
- \sstitemlist{
-
- \sstitem
- {\tt{"}}r = sqrt( xin $*$ xin $+$ yin $*$ yin ){\tt{"}}
-
- \sstitem
- {\tt{"}}rout = r $*$ ( 1 $+$ 0.1 $*$ r $*$ r ){\tt{"}}
-
- \sstitem
- {\tt{"}}theta = atan2( yin, xin ){\tt{"}}
-
- \sstitem
- {\tt{"}}xout = rout $*$ cos( theta ){\tt{"}}
-
- \sstitem
- {\tt{"}}yout = rout $*$ sin( theta ){\tt{"}}
-
- }
- Here, we first calculate three intermediate results ({\tt{"}}r{\tt{"}}, {\tt{"}}rout{\tt{"}}
- and {\tt{"}}theta{\tt{"}}) and then use these to calculate the final results ({\tt{"}}xout{\tt{"}}
- and {\tt{"}}yout{\tt{"}}). The MathMap knows that only the final two results
- constitute values for the output variables because its Nout attribute
- is set to 2. You may define as many intermediate variables in this
- way as you choose. Having defined a variable, you may then refer to it
- on the right of any subsequent expressions.
-
- Note that when defining the inverse transformation you may only refer
- to the output variables {\tt{"}}xout{\tt{"}} and {\tt{"}}yout{\tt{"}}. The intermediate variables
- {\tt{"}}r{\tt{"}}, {\tt{"}}rout{\tt{"}} and {\tt{"}}theta{\tt{"}} (above) are private to the forward
- transformation and may not be referenced by the inverse
- transformation. The inverse transformation may, however, define its
- own private intermediate variables.
- }
- \sstdiytopic{
- Expression Syntax
- }{
- The expressions given for the forward and inverse transformations
- closely follow the syntax of the C programming language (with some
- extensions for compatibility with Fortran). They may contain
- references to variables and literal constants, together with
- arithmetic, boolean, relational and bitwise operators, and function
- invocations. A set of symbolic constants is also available. Each of
- these is described in detail below. Parentheses may be used to
- over-ride the normal order of evaluation. There is no built-in limit
- to the length of expressions and they are insensitive to case or the
- presence of additional white space.
- }
- \sstdiytopic{
- Variables
- }{
- Variable names must begin with an alphabetic character and may contain
- only alphabetic characters, digits, and the underscore character
- {\tt{"}}\_{\tt{"}}. There is no built-in limit to the length of variable names.
- }
- \sstdiytopic{
- Literal Constants
- }{
- Literal constants, such as {\tt{"}}0{\tt{"}}, {\tt{"}}1{\tt{"}}, {\tt{"}}0.007{\tt{"}} or {\tt{"}}2.505e-16{\tt{"}} may appear
- in expressions, with the decimal point and exponent being optional (a
- {\tt{"}}D{\tt{"}} may also be used as an exponent character for compatibility with
- Fortran). A unary minus {\tt{"}}-{\tt{"}} may be used as a prefix.
- }
- \sstdiytopic{
- Arithmetic Precision
- }{
- All arithmetic is floating point, performed in double precision.
- }
- \sstdiytopic{
- Propagation of Missing Data
- }{
- Unless indicated otherwise, if any argument of a function or operator
- has the value AST\_\_BAD (indicating missing data), then the result of
- that function or operation is also AST\_\_BAD, so that such values are
- propagated automatically through all operations performed by MathMap
- transformations. The special value AST\_\_BAD can be represented in
- expressions by the symbolic constant {\tt{"}}$<$bad$>${\tt{"}}.
-
- A $<$bad$>$ result (i.e. equal to AST\_\_BAD) is also produced in response
- to any numerical error (such as division by zero or numerical
- overflow), or if an invalid argument value is provided to a function
- or operator.
- }
- \sstdiytopic{
- Arithmetic Operators
- }{
- The following arithmetic operators are available:
- \sstitemlist{
-
- \sstitem
- x1 $+$ x2: Sum of {\tt{"}}x1{\tt{"}} and {\tt{"}}x2{\tt{"}}.
-
- \sstitem
- x1 - x2: Difference of {\tt{"}}x1{\tt{"}} and {\tt{"}}x2{\tt{"}}.
-
- \sstitem
- x1 $*$ x2: Product of {\tt{"}}x1{\tt{"}} and {\tt{"}}x1{\tt{"}}.
-
- \sstitem
- x1 / x2: Ratio of {\tt{"}}x1{\tt{"}} and {\tt{"}}x2{\tt{"}}.
-
- \sstitem
- x1 $*$$*$ x2: {\tt{"}}x1{\tt{"}} raised to the power of {\tt{"}}x2{\tt{"}}.
-
- \sstitem
- $+$ x: Unary plus, has no effect on its argument.
-
- \sstitem
- - x: Unary minus, negates its argument.
- }
- }
- \sstdiytopic{
- Boolean Operators
- }{
- Boolean values are represented using zero to indicate false and
- non-zero to indicate true. In addition, the value AST\_\_BAD is taken to
- mean {\tt{"}}unknown{\tt{"}}. The values returned by boolean operators may therefore
- be 0, 1 or AST\_\_BAD. Where appropriate, {\tt{"}}tri-state{\tt{"}} logic is
- implemented. For example, {\tt{"}}a$|$$|$b{\tt{"}} may evaluate to 1 if {\tt{"}}a{\tt{"}} is non-zero,
- even if {\tt{"}}b{\tt{"}} has the value AST\_\_BAD. This is because the result of the
- operation would not be affected by the value of {\tt{"}}b{\tt{"}}, so long as {\tt{"}}a{\tt{"}} is
- non-zero.
-
- The following boolean operators are available:
- \sstitemlist{
-
- \sstitem
- x1 \&\& x2: Boolean AND between {\tt{"}}x1{\tt{"}} and {\tt{"}}x2{\tt{"}}, returning 1 if both {\tt{"}}x1{\tt{"}}
- and {\tt{"}}x2{\tt{"}} are non-zero, and 0 otherwise. This operator implements
- tri-state logic. (The synonym {\tt{"}}.and.{\tt{"}} is also provided for compatibility
- with Fortran.)
-
- \sstitem
- x1 $|$$|$ x2: Boolean OR between {\tt{"}}x1{\tt{"}} and {\tt{"}}x2{\tt{"}}, returning 1 if either {\tt{"}}x1{\tt{"}}
- or {\tt{"}}x2{\tt{"}} are non-zero, and 0 otherwise. This operator implements
- tri-state logic. (The synonym {\tt{"}}.or.{\tt{"}} is also provided for compatibility
- with Fortran.)
-
- \sstitem
- x1 $\wedge$$\wedge$ x2: Boolean exclusive OR (XOR) between {\tt{"}}x1{\tt{"}} and {\tt{"}}x2{\tt{"}}, returning
- 1 if exactly one of {\tt{"}}x1{\tt{"}} and {\tt{"}}x2{\tt{"}} is non-zero, and 0 otherwise. Tri-state
- logic is not used with this operator. (The synonyms {\tt{"}}.neqv.{\tt{"}} and {\tt{"}}.xor.{\tt{"}}
- are also provided for compatibility with Fortran, although the second
- of these is not standard.)
-
- \sstitem
- x1 .eqv. x2: This is provided only for compatibility with Fortran
- and tests whether the boolean states of {\tt{"}}x1{\tt{"}} and {\tt{"}}x2{\tt{"}} (i.e. true/false)
- are equal. It is the negative of the exclusive OR (XOR) function.
- Tri-state logic is not used with this operator.
-
- \sstitem
- ! x: Boolean unary NOT operation, returning 1 if {\tt{"}}x{\tt{"}} is zero, and
- 0 otherwise. (The synonym {\tt{"}}.not.{\tt{"}} is also provided for compatibility
- with Fortran.)
- }
- }
- \sstdiytopic{
- Relational Operators
- }{
- Relational operators return the boolean result (0 or 1) of comparing
- the values of two floating point values for equality or inequality. The
- value AST\_\_BAD may also be returned if either argument is $<$bad$>$.
-
- The following relational operators are available:
- \sstitemlist{
-
- \sstitem
- x1 == x2: Tests whether {\tt{"}}x1{\tt{"}} equals {\tt{"}}x1{\tt{"}}. (The synonym {\tt{"}}.eq.{\tt{"}} is
- also provided for compatibility with Fortran.)
-
- \sstitem
- x1 != x2: Tests whether {\tt{"}}x1{\tt{"}} is unequal to {\tt{"}}x2{\tt{"}}. (The synonym {\tt{"}}.ne.{\tt{"}}
- is also provided for compatibility with Fortran.)
-
- \sstitem
- x1 $>$ x2: Tests whether {\tt{"}}x1{\tt{"}} is greater than {\tt{"}}x2{\tt{"}}. (The synonym
- {\tt{"}}.gt.{\tt{"}} is also provided for compatibility with Fortran.)
-
- \sstitem
- x1 $>$= x2: Tests whether {\tt{"}}x1{\tt{"}} is greater than or equal to {\tt{"}}x2{\tt{"}}. (The
- synonym {\tt{"}}.ge.{\tt{"}} is also provided for compatibility with Fortran.)
-
- \sstitem
- x1 $<$ x2: Tests whether {\tt{"}}x1{\tt{"}} is less than {\tt{"}}x2{\tt{"}}. (The synonym {\tt{"}}.lt.{\tt{"}}
- is also provided for compatibility with Fortran.)
-
- \sstitem
- x1 $<$= x2: Tests whether {\tt{"}}x1{\tt{"}} is less than or equal to {\tt{"}}x2{\tt{"}}. (The
- synonym {\tt{"}}.le.{\tt{"}} is also provided for compatibility with Fortran.)
-
- }
- Note that relational operators cannot usefully be used to compare
- values with the $<$bad$>$ value (representing missing data), because the
- result is always $<$bad$>$. The isbad() function should be used instead.
- }
- \sstdiytopic{
- Bitwise Operators
- }{
- The bitwise operators provided by C are often useful when operating on
- raw data (e.g. from instruments), so they are also provided for use in
- MathMap expressions. In this case, however, the values on which they
- operate are floating point values rather than pure integers. In order
- to produce results which match the pure integer case, the operands are
- regarded as fixed point binary numbers (i.e. with the binary
- equivalent of a decimal point) with negative numbers represented using
- twos-complement notation. For integer values, the resulting bit
- pattern corresponds to that of the equivalent signed integer (digits
- to the right of the point being zero). Operations on the bits
- representing the fractional part are also possible, however.
-
- The following bitwise operators are available:
- \sstitemlist{
-
- \sstitem
- x1 $>$$>$ x2: Rightward bit shift. The integer value of {\tt{"}}x2{\tt{"}} is taken
- (rounding towards zero) and the bits representing {\tt{"}}x1{\tt{"}} are then
- shifted this number of places to the right (or to the left if the
- number of places is negative). This is equivalent to dividing {\tt{"}}x1{\tt{"}} by
- the corresponding power of 2.
-
- \sstitem
- x1 $<$$<$ x2: Leftward bit shift. The integer value of {\tt{"}}x2{\tt{"}} is taken
- (rounding towards zero), and the bits representing {\tt{"}}x1{\tt{"}} are then
- shifted this number of places to the left (or to the right if the
- number of places is negative). This is equivalent to multiplying {\tt{"}}x1{\tt{"}}
- by the corresponding power of 2.
-
- \sstitem
- x1 \& x2: Bitwise AND between the bits of {\tt{"}}x1{\tt{"}} and those of {\tt{"}}x2{\tt{"}}
- (equivalent to a boolean AND applied at each bit position in turn).
-
- \sstitem
- x1 $|$ x2: Bitwise OR between the bits of {\tt{"}}x1{\tt{"}} and those of {\tt{"}}x2{\tt{"}}
- (equivalent to a boolean OR applied at each bit position in turn).
-
- \sstitem
- x1 $\wedge$ x2: Bitwise exclusive OR (XOR) between the bits of {\tt{"}}x1{\tt{"}} and
- those of {\tt{"}}x2{\tt{"}} (equivalent to a boolean XOR applied at each bit
- position in turn).
-
- }
- Note that no bit inversion operator ({\tt{"}}$\sim${\tt{"}} in C) is provided. This is
- because inverting the bits of a twos-complement fixed point binary
- number is equivalent to simply negating it. This differs from the
- pure integer case because bits to the right of the binary point are
- also inverted. To invert only those bits to the left of the binary
- point, use a bitwise exclusive OR with the value -1 (i.e. {\tt{"}}x$\wedge$-1{\tt{"}}).
- }
- \sstdiytopic{
- Functions
- }{
- The following functions are available:
- \sstitemlist{
-
- \sstitem
- abs(x): Absolute value of {\tt{"}}x{\tt{"}} (sign removal), same as fabs(x).
-
- \sstitem
- acos(x): Inverse cosine of {\tt{"}}x{\tt{"}}, in radians.
-
- \sstitem
- acosd(x): Inverse cosine of {\tt{"}}x{\tt{"}}, in degrees.
-
- \sstitem
- acosh(x): Inverse hyperbolic cosine of {\tt{"}}x{\tt{"}}.
-
- \sstitem
- acoth(x): Inverse hyperbolic cotangent of {\tt{"}}x{\tt{"}}.
-
- \sstitem
- acsch(x): Inverse hyperbolic cosecant of {\tt{"}}x{\tt{"}}.
-
- \sstitem
- aint(x): Integer part of {\tt{"}}x{\tt{"}} (round towards zero), same as int(x).
-
- \sstitem
- asech(x): Inverse hyperbolic secant of {\tt{"}}x{\tt{"}}.
-
- \sstitem
- asin(x): Inverse sine of {\tt{"}}x{\tt{"}}, in radians.
-
- \sstitem
- asind(x): Inverse sine of {\tt{"}}x{\tt{"}}, in degrees.
-
- \sstitem
- asinh(x): Inverse hyperbolic sine of {\tt{"}}x{\tt{"}}.
-
- \sstitem
- atan(x): Inverse tangent of {\tt{"}}x{\tt{"}}, in radians.
-
- \sstitem
- atand(x): Inverse tangent of {\tt{"}}x{\tt{"}}, in degrees.
-
- \sstitem
- atanh(x): Inverse hyperbolic tangent of {\tt{"}}x{\tt{"}}.
-
- \sstitem
- atan2(x1, x2): Inverse tangent of {\tt{"}}x1/x2{\tt{"}}, in radians.
-
- \sstitem
- atan2d(x1, x2): Inverse tangent of {\tt{"}}x1/x2{\tt{"}}, in degrees.
-
- \sstitem
- ceil(x): Smallest integer value not less then {\tt{"}}x{\tt{"}} (round towards
- plus infinity).
-
- \sstitem
- cos(x): Cosine of {\tt{"}}x{\tt{"}} in radians.
-
- \sstitem
- cosd(x): Cosine of {\tt{"}}x{\tt{"}} in degrees.
-
- \sstitem
- cosh(x): Hyperbolic cosine of {\tt{"}}x{\tt{"}}.
-
- \sstitem
- coth(x): Hyperbolic cotangent of {\tt{"}}x{\tt{"}}.
-
- \sstitem
- csch(x): Hyperbolic cosecant of {\tt{"}}x{\tt{"}}.
-
- \sstitem
- dim(x1, x2): Returns {\tt{"}}x1-x2{\tt{"}} if {\tt{"}}x1{\tt{"}} is greater than {\tt{"}}x2{\tt{"}}, otherwise 0.
-
- \sstitem
- exp(x): Exponential function of {\tt{"}}x{\tt{"}}.
-
- \sstitem
- fabs(x): Absolute value of {\tt{"}}x{\tt{"}} (sign removal), same as abs(x).
-
- \sstitem
- floor(x): Largest integer not greater than {\tt{"}}x{\tt{"}} (round towards
- minus infinity).
-
- \sstitem
- fmod(x1, x2): Remainder when {\tt{"}}x1{\tt{"}} is divided by {\tt{"}}x2{\tt{"}}, same as
- mod(x1, x2).
-
- \sstitem
- gauss(x1, x2): Random sample from a Gaussian distribution with mean
- {\tt{"}}x1{\tt{"}} and standard deviation {\tt{"}}x2{\tt{"}}.
-
- \sstitem
- int(x): Integer part of {\tt{"}}x{\tt{"}} (round towards zero), same as aint(x).
-
- \sstitem
- isbad(x): Returns 1 if {\tt{"}}x{\tt{"}} has the $<$bad$>$ value (AST\_\_BAD), otherwise 0.
-
- \sstitem
- log(x): Natural logarithm of {\tt{"}}x{\tt{"}}.
-
- \sstitem
- log10(x): Logarithm of {\tt{"}}x{\tt{"}} to base 10.
-
- \sstitem
- max(x1, x2, ...): Maximum of two or more values.
-
- \sstitem
- min(x1, x2, ...): Minimum of two or more values.
-
- \sstitem
- mod(x1, x2): Remainder when {\tt{"}}x1{\tt{"}} is divided by {\tt{"}}x2{\tt{"}}, same as
- fmod(x1, x2).
-
- \sstitem
- nint(x): Nearest integer to {\tt{"}}x{\tt{"}} (round to nearest).
-
- \sstitem
- poisson(x): Random integer-valued sample from a Poisson
- distribution with mean {\tt{"}}x{\tt{"}}.
-
- \sstitem
- pow(x1, x2): {\tt{"}}x1{\tt{"}} raised to the power of {\tt{"}}x2{\tt{"}}.
-
- \sstitem
- qif(x1, x2, x3): Returns {\tt{"}}x2{\tt{"}} if {\tt{"}}x1{\tt{"}} is true, and {\tt{"}}x3{\tt{"}} otherwise.
-
- \sstitem
- rand(x1, x2): Random sample from a uniform distribution in the
- range {\tt{"}}x1{\tt{"}} to {\tt{"}}x2{\tt{"}} inclusive.
-
- \sstitem
- sech(x): Hyperbolic secant of {\tt{"}}x{\tt{"}}.
-
- \sstitem
- sign(x1, x2): Absolute value of {\tt{"}}x1{\tt{"}} with the sign of {\tt{"}}x2{\tt{"}}
- (transfer of sign).
-
- \sstitem
- sin(x): Sine of {\tt{"}}x{\tt{"}} in radians.
-
- \sstitem
- sinc(x): Sinc function of {\tt{"}}x{\tt{"}} [= {\tt{"}}sin(x)/x{\tt{"}}].
-
- \sstitem
- sind(x): Sine of {\tt{"}}x{\tt{"}} in degrees.
-
- \sstitem
- sinh(x): Hyperbolic sine of {\tt{"}}x{\tt{"}}.
-
- \sstitem
- sqr(x): Square of {\tt{"}}x{\tt{"}} (= {\tt{"}}x$*$x{\tt{"}}).
-
- \sstitem
- sqrt(x): Square root of {\tt{"}}x{\tt{"}}.
-
- \sstitem
- tan(x): Tangent of {\tt{"}}x{\tt{"}} in radians.
-
- \sstitem
- tand(x): Tangent of {\tt{"}}x{\tt{"}} in degrees.
-
- \sstitem
- tanh(x): Hyperbolic tangent of {\tt{"}}x{\tt{"}}.
- }
- }
- \sstdiytopic{
- Symbolic Constants
- }{
- The following symbolic constants are available (the enclosing {\tt{"}}$<$$>${\tt{"}}
- brackets must be included):
- \sstitemlist{
-
- \sstitem
- $<$bad$>$: The {\tt{"}}bad{\tt{"}} value (AST\_\_BAD) used to flag missing data. Note
- that you cannot usefully compare values with this constant because the
- result is always $<$bad$>$. The isbad() function should be used instead.
-
- \sstitem
- $<$dig$>$: Number of decimal digits of precision available in a
- floating point (double) value.
-
- \sstitem
- $<$e$>$: \htmlref{Base}{Base} of natural logarithms.
-
- \sstitem
- $<$epsilon$>$: Smallest positive number such that 1.0$+$$<$epsilon$>$ is
- distinguishable from unity.
-
- \sstitem
- $<$mant\_dig$>$: The number of base $<$radix$>$ digits stored in the
- mantissa of a floating point (double) value.
-
- \sstitem
- $<$max$>$: Maximum representable floating point (double) value.
-
- \sstitem
- $<$max\_10\_exp$>$: Maximum integer such that 10 raised to that power
- can be represented as a floating point (double) value.
-
- \sstitem
- $<$max\_exp$>$: Maximum integer such that $<$radix$>$ raised to that
- power minus 1 can be represented as a floating point (double) value.
-
- \sstitem
- $<$min$>$: Smallest positive number which can be represented as a
- normalised floating point (double) value.
-
- \sstitem
- $<$min\_10\_exp$>$: Minimum negative integer such that 10 raised to that
- power can be represented as a normalised floating point (double) value.
-
- \sstitem
- $<$min\_exp$>$: Minimum negative integer such that $<$radix$>$ raised to
- that power minus 1 can be represented as a normalised floating point
- (double) value.
-
- \sstitem
- $<$pi$>$: Ratio of the circumference of a circle to its diameter.
-
- \sstitem
- $<$radix$>$: The radix (number base) used to represent the mantissa of
- floating point (double) values.
-
- \sstitem
- $<$rounds$>$: The mode used for rounding floating point results after
- addition. Possible values include: -1 (indeterminate), 0 (toward
- zero), 1 (to nearest), 2 (toward plus infinity) and 3 (toward minus
- infinity). Other values indicate machine-dependent behaviour.
- }
- }
- \sstdiytopic{
- Evaluation Precedence and Associativity
- }{
- Items appearing in expressions are evaluated in the following order
- (highest precedence first):
- \sstitemlist{
-
- \sstitem
- Constants and variables
-
- \sstitem
- Function arguments and parenthesised expressions
-
- \sstitem
- Function invocations
-
- \sstitem
- Unary $+$ - ! .not.
-
- \sstitem
- $*$$*$
-
- \sstitem
- $*$ /
-
- \sstitem
- $+$ -
-
- \sstitem
- $<$$<$ $>$$>$
-
- \sstitem
- $<$ .lt. $<$= .le. $>$ .gt. $>$= .ge.
-
- \sstitem
- == .eq. != .ne.
-
- \sstitem
- \&
-
- \sstitem
- $\wedge$
-
- \sstitem
- $|$
-
- \sstitem
- \&\& .and.
-
- \sstitem
- $\wedge$$\wedge$
-
- \sstitem
- $|$$|$ .or
-
- \sstitem
- .eqv. .neqv. .xor.
-
- }
- All operators associate from left-to-right, except for unary $+$,
- unary -, !, .not. and $*$$*$ which associate from right-to-left.
- }
-}
-\sstroutine{
- astMatrixMap\sstlabel{astMatrixMap}
-}{
- Create a MatrixMap
-}{
- \sstdescription{
- This function creates a new \htmlref{MatrixMap}{MatrixMap} and optionally initialises
- its attributes.
-
- A MatrixMap is a form of \htmlref{Mapping}{Mapping} which performs a general linear
- transformation. Each set of input coordinates, regarded as a
- column-vector, are pre-multiplied by a matrix (whose elements
- are specified when the MatrixMap is created) to give a new
- column-vector containing the output coordinates. If appropriate,
- the inverse transformation may also be performed.
- }
- \sstsynopsis{
- AstMatrixMap $*$astMatrixMap( int nin, int nout, int form,
- const double matrix[],
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- nin
- }{
- The number of input coordinates, which determines the number
- of columns in the matrix.
- }
- \sstsubsection{
- nout
- }{
- The number of output coordinates, which determines the number
- of rows in the matrix.
- }
- \sstsubsection{
- form
- }{
- An integer which indicates the form in which the matrix
- elements will be supplied.
-
- A value of zero indicates that a full {\tt{"}}nout{\tt{"}} x {\tt{"}}nin{\tt{"}} matrix
- of values will be supplied via the {\tt{"}}matrix{\tt{"}} parameter
- (below). In this case, the elements should be given in row
- order (the elements of the first row, followed by the
- elements of the second row, etc.).
-
- A value of 1 indicates that only the diagonal elements of the
- matrix will be supplied, and that all others should be
- zero. In this case, the elements of {\tt{"}}matrix{\tt{"}} should contain
- only the diagonal elements, stored consecutively.
-
- A value of 2 indicates that a {\tt{"}}unit{\tt{"}} matrix is required,
- whose diagonal elements are set to unity (with all other
- elements zero). In this case, the {\tt{"}}matrix{\tt{"}} parameter is
- ignored and a NULL pointer may be supplied.
- }
- \sstsubsection{
- matrix
- }{
- The array of matrix elements to be used, stored according to
- the value of {\tt{"}}form{\tt{"}}.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new MatrixMap. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astMatrixMap()
- }{
- A pointer to the new MatrixMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- In general, a MatrixMap's forward transformation will always
- be available (as indicated by its \htmlref{TranForward}{TranForward} attribute), but
- its inverse transformation (\htmlref{TranInverse}{TranInverse} attribute) will only be
- available if the associated matrix is square and non-singular.
-
- \sstitem
- As an exception to this, the inverse transformation is always
- available if a unit or diagonal matrix is specified. In this
- case, if the matrix is not square, one or more of the input
- coordinate values may not be recoverable from a set of output
- coordinates. Any coordinates affected in this way will simply be
- set to the value zero.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- astNegate\sstlabel{astNegate}
-}{
- Negate the area represented by a Region
-}{
- \sstdescription{
- This function negates the area represented by a \htmlref{Region}{Region}. That is,
- points which were previously inside the region will then be
- outside, and points which were outside will be inside. This is
- acomplished by toggling the state of the \htmlref{Negated}{Negated} attribute for
- the supplied region.
- }
- \sstsynopsis{
- void astNegate( AstRegion $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Region.
- }
- }
-}
-\sstroutine{
- astNorm\sstlabel{astNorm}
-}{
- Normalise a set of Frame coordinates
-}{
- \sstdescription{
- This function normalises a set of \htmlref{Frame}{Frame} coordinate values which
- might be unsuitable for display (e.g. may lie outside the
- expected range) into a set of acceptable values suitable for
- display.
- }
- \sstsynopsis{
- void astNorm( AstFrame $*$this, double value[] )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Frame.
- }
- \sstsubsection{
- value
- }{
- An array of double, with one element for each Frame axis
- (\htmlref{Naxes}{Naxes} attribute). Initially, this should contain a set of
- coordinate values representing a point in the space which the
- Frame describes. If these values lie outside the expected
- range for the Frame, they will be replaced with more
- acceptable (normalised) values. Otherwise, they will be
- returned unchanged.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- For some classes of Frame, whose coordinate values are not
- constrained, this function will never modify the values
- supplied. However, for Frames whose axes represent cyclic
- quantities (such as angles or positions on the sky), coordinates
- will typically be wrapped into an appropriate standard range,
- such as zero to 2$*$pi.
-
- \sstitem
- The \htmlref{NormMap}{NormMap} class is a \htmlref{Mapping}{Mapping} which can be used to normalise a
- set of points using the
- astNorm function
- of a specified Frame.
-
- \sstitem
- It is intended to be possible to put any set of coordinates
- into a form suitable for display by using this function to
- normalise them, followed by appropriate formatting
- (using \htmlref{astFormat}{astFormat}).
- }
- }
-}
-\sstroutine{
- astNormMap\sstlabel{astNormMap}
-}{
- Create a NormMap
-}{
- \sstdescription{
- This function creates a new \htmlref{NormMap}{NormMap} and optionally initialises its
- attributes.
-
- A NormMap is a \htmlref{Mapping}{Mapping} which normalises coordinate values using the
- \htmlref{astNorm}{astNorm} function
- of the supplied \htmlref{Frame}{Frame}. The number of inputs and outputs of a NormMap
- are both equal to the number of axes in the supplied Frame.
-
- The forward and inverse transformation of a NormMap are both
- defined but are identical (that is, they do not form a real inverse
- pair in that the inverse transformation does not undo the
- normalisation, instead it reapplies it). However, the
- \htmlref{astSimplify}{astSimplify}
- function will replace neighbouring pairs of forward and inverse
- NormMaps by a single \htmlref{UnitMap}{UnitMap}.
- }
- \sstsynopsis{
- AstNormMap $*$astNormMap( AstFrame $*$frame, const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- frame
- }{
- A pointer to the Frame which is to be used to normalise the
- supplied axis values.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new NormMap. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astNormMap()
- }{
- A pointer to the new NormMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- astNullRegion\sstlabel{astNullRegion}
-}{
- Create a NullRegion
-}{
- \sstdescription{
- This function creates a new \htmlref{NullRegion}{NullRegion} and optionally initialises its
- attributes.
-
- A NullRegion is a \htmlref{Region}{Region} with no bounds. If the \htmlref{Negated}{Negated} attribute of a
- NullRegion is false, the NullRegion represents a Region containing no
- points. If the Negated attribute of a NullRegion is true, the NullRegion
- represents an infinite Region containing all points within the
- coordinate system.
- }
- \sstsynopsis{
- AstNullRegion $*$astNullRegion( AstFrame $*$frame, AstRegion $*$unc, const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- frame
- }{
- A pointer to the \htmlref{Frame}{Frame} in which the region is defined. A deep
- copy is taken of the supplied Frame. This means that any
- subsequent changes made to the Frame using the supplied pointer
- will have no effect the Region.
- }
- \sstsubsection{
- unc
- }{
- An optional pointer to an existing Region which specifies the
- uncertainties associated with positions in the supplied Frame.
- The uncertainty in any point in the Frame is found by shifting the
- supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at the point
- being considered. The area covered by the shifted uncertainty
- Region then represents the uncertainty in the position. The
- uncertainty is assumed to be the same for all points.
-
- If supplied, the uncertainty Region must be of a class for which
- all instances are centro-symetric (e.g. \htmlref{Box}{Box}, \htmlref{Circle}{Circle}, \htmlref{Ellipse}{Ellipse}, etc.)
- or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
- copy of the supplied Region will be taken, so subsequent changes to
- the uncertainty Region using the supplied pointer will have no
- effect on the created Box. Alternatively,
- a NULL \htmlref{Object}{Object} pointer
- may be supplied, in which case a default uncertainty of zero is
- used.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new NullRegion. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astNullRegion()
- }{
- A pointer to the new NullRegion.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astOK\sstlabel{astOK}
-}{
- Test whether AST functions have been successful
-}{
- \sstdescription{
- This macro returns a boolean value (0 or 1) to indicate if
- preceding AST functions have completed successfully
- (i.e. without setting the AST error status). If the error status
- is set to an error value, a value of zero is returned, otherwise
- the result is one.
- }
- \sstsynopsis{
- int astOK
- }
- \sstreturnedvalue{
- \sstsubsection{
- astOK
- }{
- One if the AST error status is OK, otherwise zero.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the AST error status is set to an error value (after an
- error), most AST functions will not execute and will simply
- return without action. To clear the error status and restore
- normal behaviour, use \htmlref{astClearStatus}{astClearStatus}.
- }
- }
-}
-\sstroutine{
- astOffset\sstlabel{astOffset}
-}{
- Calculate an offset along a geodesic curve
-}{
- \sstdescription{
- This function finds the \htmlref{Frame}{Frame} coordinate values of a point which
- is offset a specified distance along the geodesic curve between
- two other points.
-
- For example, in a basic Frame, this offset will be along the
- straight line joining two points. For a more specialised Frame
- describing a sky coordinate system, however, it would be along
- the great circle passing through two sky positions.
- }
- \sstsynopsis{
- void astOffset( AstFrame $*$this,
- const double point1[], const double point2[],
- double offset, double point3[] )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Frame.
- }
- \sstsubsection{
- point1
- }{
- An array of double, with one element for each Frame axis
- (\htmlref{Naxes}{Naxes} attribute). This should contain the coordinates of the
- point marking the start of the geodesic curve.
- }
- \sstsubsection{
- point2
- }{
- An array of double, with one element for each Frame axis
- This should contain the coordinates of the point marking the
- end of the geodesic curve.
- }
- \sstsubsection{
- offset
- }{
- The required offset from the first point along the geodesic
- curve. If this is positive, it will be towards the second
- point. If it is negative, it will be in the opposite
- direction. This offset need not imply a position lying
- between the two points given, as the curve will be
- extrapolated if necessary.
- }
- \sstsubsection{
- point3
- }{
- An array of double, with one element for each Frame axis
- in which the coordinates of the required point will be returned.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The geodesic curve used by this function is the path of
- shortest distance between two points, as defined by the
- \htmlref{astDistance}{astDistance} function.
-
- \sstitem
- This function will return {\tt{"}}bad{\tt{"}} coordinate values (AST\_\_BAD)
- if any of the input coordinates has this value.
-
- \sstitem
- {\tt{"}}Bad{\tt{"}} coordinate values will also be returned if the two
- points supplied are coincident (or otherwise fail to uniquely
- specify a geodesic curve) but the requested offset is non-zero.
- }
- }
-}
-\sstroutine{
- astOffset2\sstlabel{astOffset2}
-}{
- Calculate an offset along a geodesic curve in a 2D Frame
-}{
- \sstdescription{
- This function finds the \htmlref{Frame}{Frame} coordinate values of a point which
- is offset a specified distance along the geodesic curve at a
- given angle from a specified starting point. It can only be
- used with 2-dimensional Frames.
-
- For example, in a basic Frame, this offset will be along the
- straight line joining two points. For a more specialised Frame
- describing a sky coordinate system, however, it would be along
- the great circle passing through two sky positions.
- }
- \sstsynopsis{
- double astOffset2( AstFrame $*$this, const double point1[2], double angle,
- double offset, double point2[2] );
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Frame.
- }
- \sstsubsection{
- point1
- }{
- An array of double, with one element for each Frame axis
- (\htmlref{Naxes}{Naxes} attribute). This should contain the coordinates of the
- point marking the start of the geodesic curve.
- }
- \sstsubsection{
- angle
- }{
- The angle (in radians) from the positive direction of the second
- axis, to the direction of the required position, as seen from
- the starting position. Positive rotation is in the sense of
- rotation from the positive direction of axis 2 to the positive
- direction of axis 1.
- }
- \sstsubsection{
- offset
- }{
- The required offset from the first point along the geodesic
- curve. If this is positive, it will be in the direction of the
- given angle. If it is negative, it will be in the opposite
- direction.
- }
- \sstsubsection{
- point2
- }{
- An array of double, with one element for each Frame axis
- in which the coordinates of the required point will be returned.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astOffset2
- }{
- The direction of the geodesic curve at the end point. That is, the
- angle (in radians) between the positive direction of the second
- axis and the continuation of the geodesic curve at the requested
- end point. Positive rotation is in the sense of rotation from
- the positive direction of axis 2 to the positive direction of axis
- 1.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The geodesic curve used by this function is the path of
- shortest distance between two points, as defined by the
- \htmlref{astDistance}{astDistance} function.
-
- \sstitem
- An error will be reported if the Frame is not 2-dimensional.
-
- \sstitem
- This function will return {\tt{"}}bad{\tt{"}} coordinate values (AST\_\_BAD)
- if any of the input coordinates has this value.
- }
- }
-}
-\sstroutine{
- astOutline$<$X$>$\sstlabel{astOutlineX}
-}{
- Create a new Polygon outling values in a 2D data grid
-}{
- \sstdescription{
- This is a set of functions that create a \htmlref{Polygon}{Polygon} enclosing a single
- contiguous set of pixels that have a specified value within a gridded
- 2-dimensional data array (e.g. an image).
-
- A basic 2-dimensional \htmlref{Frame}{Frame} is used to represent the pixel coordinate
- system in the returned Polygon. The \htmlref{Domain}{Domain} attribute is set to
- {\tt{"}}PIXEL{\tt{"}}, the \htmlref{Title}{Title} attribute is set to {\tt{"}}Pixel coordinates{\tt{"}}, and the
- Unit attribute for each axis is set to {\tt{"}}pixel{\tt{"}}. All other
- attributes are left unset. The nature of the pixel coordinate system
- is determined by parameter
- {\tt{"}}starpix{\tt{"}}.
-
- The
- {\tt{"}}maxerr{\tt{"}} and {\tt{"}}maxvert{\tt{"}}
- parameters can be used to control how accurately the returned
- Polygon represents the required region in the data array. The
- number of vertices in the returned Polygon will be the minimum
- needed to achieve the required accuracy.
-
- You should use a function which matches the numerical type of the
- data you are processing by replacing $<$X$>$ in the generic function
- name
- astOutline$<$X$>$
- by an appropriate 1- or 2-character type code. For example, if you
- are procesing data with type
- {\tt{"}}float{\tt{"}}, you should use the function astOutlineF
- (see the {\tt{"}}Data Type Codes{\tt{"}} section below for the codes appropriate to
- other numerical types).
- }
- \sstsynopsis{
- AstPolygon $*$astOutline$<$X$>$( $<$Xtype$>$ value, int oper, $<$Xtype$>$ array[],
- int lbnd[2], int ubnd[2], double maxerr,
- int maxvert, int inside[2], int starpix )
- }
- \sstparameters{
- \sstsubsection{
- value
- }{
- A data value that specifies the pixels to be outlined.
- }
- \sstsubsection{
- oper
- }{
- Indicates how the
- {\tt{"}}value{\tt{"}}
- parameter is used to select the outlined pixels. It can
- have any of the following values:
- \sstitemlist{
-
- \sstitem
- AST\_\_LT: outline pixels with value less than {\tt{"}}value{\tt{"}}.
-
- \sstitem
- AST\_\_LE: outline pixels with value less than or equal to {\tt{"}}value{\tt{"}}.
-
- \sstitem
- AST\_\_EQ: outline pixels with value equal to {\tt{"}}value{\tt{"}}.
-
- \sstitem
- AST\_\_NE: outline pixels with value not equal to {\tt{"}}value{\tt{"}}.
-
- \sstitem
- AST\_\_GE: outline pixels with value greater than or equal to {\tt{"}}value{\tt{"}}.
-
- \sstitem
- AST\_\_GT: outline pixels with value greater than {\tt{"}}value{\tt{"}}.
- }
- }
- \sstsubsection{
- array
- }{
- Pointer to a
- 2-dimensional array containing the data to be processed. The
- numerical type of this array should match the 1- or
- 2-character type code appended to the function name (e.g. if
- you are using astOutlineF, the type of each array element
- should be {\tt{"}}float{\tt{"}}).
-
- The storage order of data within this array should be such
- that the index of the first grid dimension varies most
- rapidly and that of the second dimension least rapidly
- (i.e. Fortran array indexing is used).
- }
- \sstsubsection{
- lbnd
- }{
- Pointer to an array of two integers
- containing the coordinates of the centre of the first pixel
- in the input grid along each dimension.
- }
- \sstsubsection{
- ubnd
- }{
- Pointer to an array of two integers
- containing the coordinates of the centre of the last pixel in
- the input grid along each dimension.
-
- Note that {\tt{"}}lbnd{\tt{"}} and {\tt{"}}ubnd{\tt{"}} together define the shape
- and size of the input grid, its extent along a particular
- (j'th) dimension being ubnd[j]-lbnd[j]$+$1 (assuming the
- index {\tt{"}}j{\tt{"}} to be zero-based). They also define
- the input grid's coordinate system, each pixel having unit
- extent along each dimension with integral coordinate values
- at its centre or upper corner, as selected by parameter
- {\tt{"}}starpix{\tt{"}}.
- }
- \sstsubsection{
- maxerr
- }{
- Together with
- {\tt{"}}maxvert{\tt{"}},
- this determines how accurately the returned Polygon represents
- the required region of the data array. It gives the target
- discrepancy between the returned Polygon and the accurate outline
- in the data array, expressed as a number of pixels. Insignificant
- vertices are removed from the accurate outline, one by one, until
- the number of vertices remaining in the returned Polygon equals
- {\tt{"}}maxvert{\tt{"}},
- or the largest discrepancy between the accurate outline and the
- returned Polygon is greater than
- {\tt{"}}maxerr{\tt{"}}. If {\tt{"}}maxerr{\tt{"}}
- is zero or less, its value is ignored and the returned Polygon will
- have the number of vertices specified by
- {\tt{"}}maxvert{\tt{"}}.
- }
- \sstsubsection{
- maxvert
- }{
- Together with
- {\tt{"}}maxerr{\tt{"}},
- this determines how accurately the returned Polygon represents
- the required region of the data array. It gives the maximum
- allowed number of vertices in the returned Polygon. Insignificant
- vertices are removed from the accurate outline, one by one, until
- the number of vertices remaining in the returned Polygon equals
- {\tt{"}}maxvert{\tt{"}},
- or the largest discrepancy between the accurate outline and the
- returned Polygon is greater than
- {\tt{"}}maxerr{\tt{"}}. If {\tt{"}}maxvert{\tt{"}}
- is less than 3, its value is ignored and the number of vertices in
- the returned Polygon will be the minimum needed to ensure that the
- discrepancy between the accurate outline and the returned
- Polygon is less than
- {\tt{"}}maxerr{\tt{"}}.
- }
- \sstsubsection{
- inside
- }{
- Pointer to an array of two integers
- containing the indices of a pixel known to be inside the
- required region. This is needed because the supplied data
- array may contain several disjoint areas of pixels that satisfy
- the criterion specified by
- {\tt{"}}value{\tt{"}} and {\tt{"}}oper{\tt{"}}.
- In such cases, the area described by the returned Polygon will
- be the one that contains the pixel specified by
- {\tt{"}}inside{\tt{"}}.
- If the specified pixel is outside the bounds given by
- {\tt{"}}lbnd{\tt{"}} and {\tt{"}}ubnd{\tt{"}},
- or has a value that does not meet the criterion specified by
- {\tt{"}}value{\tt{"}} and {\tt{"}}oper{\tt{"}},
- then this function will search for a suitable pixel. The search
- starts at the central pixel and proceeds in a spiral manner until
- a pixel is found that meets the specified crierion.
- }
- \sstsubsection{
- starpix
- }{
- A flag indicating the nature of the pixel coordinate system used
- to describe the vertex positions in the returned Polygon. If
- non-zero,
- the standard Starlink definition of pixel coordinate is used in
- which a pixel with integer index I spans a range of pixel coordinate
- from (I-1) to I (i.e. pixel corners have integral pixel coordinates).
- If zero,
- the definition of pixel coordinate used by other AST functions
- such as astResample, astMask,
- etc., is used. In this definition, a pixel with integer index I
- spans a range of pixel coordinate from (I-0.5) to (I$+$0.5) (i.e.
- pixel centres have integral pixel coordinates).
- }
- \sstsubsection{
- boxsize
- }{
- The full width in pixels of a smoothing box to be applied to the
- polygon vertices before downsizing the polygon to a smaller number
- of vertices. If an even number is supplied, the next larger odd
- number is used. Values of one or zero result in no smoothing.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astOutline$<$X$>$()
- }{
- The number of pixels to which a value of
- {\tt{"}}badval{\tt{"}}
- has been assigned.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function proceeds by first finding a very accurate polygon,
- and then removing insignificant vertices from this fine polygon
- using
- \htmlref{astDownsize}{astDownsize}.
-
- \sstitem
- The returned Polygon is the outer boundary of the contiguous set
- of pixels that includes ths specified {\tt{"}}inside{\tt{"}} point, and satisfy
- the specified value requirement. This set of pixels may potentially
- include {\tt{"}}holes{\tt{"}} where the pixel values fail to meet the specified
- value requirement. Such holes will be ignored by this function.
-
- \sstitem
- A value of zero will be returned if this function is invoked
- with the global error status set, or if it should fail for any
- reason.
- }
- }
- \sstdiytopic{
- Data Type Codes
- }{
- To select the appropriate masking function, you should
- replace $<$X$>$ in the generic function name astOutline$<$X$>$ with a
- 1- or 2-character data type code, so as to match the numerical
- type $<$Xtype$>$ of the data you are processing, as follows:
- \sstitemlist{
-
- \sstitem
- D: double
-
- \sstitem
- F: float
-
- \sstitem
- L: long int
-
- \sstitem
- UL: unsigned long int
-
- \sstitem
- I: int
-
- \sstitem
- UI: unsigned int
-
- \sstitem
- S: short int
-
- \sstitem
- US: unsigned short int
-
- \sstitem
- B: byte (signed char)
-
- \sstitem
- UB: unsigned byte (unsigned char)
-
- }
- For example, astOutlineD would be used to process {\tt{"}}double{\tt{"}}
- data, while astOutlineS would be used to process {\tt{"}}short int{\tt{"}}
- data, etc.
- }
-}
-\sstroutine{
- astOverlap\sstlabel{astOverlap}
-}{
- Test if two regions overlap each other
-}{
- \sstdescription{
- This function returns an integer value indicating if the two
- supplied Regions overlap. The two Regions are converted to a commnon
- coordinate system before performing the check. If this conversion is
- not possible (for instance because the two Regions represent areas in
- different domains), then the check cannot be performed and a zero value
- is returned to indicate this.
- }
- \sstsynopsis{
- int astOverlap( AstRegion $*$this, AstRegion $*$that )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the first \htmlref{Region}{Region}.
- }
- \sstsubsection{
- that
- }{
- Pointer to the second Region.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astOverlap()
- }{
- A value indicating if there is any overlap between the two Regions.
- Possible values are:
-
- 0 - The check could not be performed because the second Region
- could not be mapped into the coordinate system of the first
- Region.
-
- 1 - There is no overlap between the two Regions.
-
- 2 - The first Region is completely inside the second Region.
-
- 3 - The second Region is completely inside the first Region.
-
- 4 - There is partial overlap between the two Regions.
-
- 5 - The Regions are identical to within their uncertainties.
-
- 6 - The second Region is the exact negation of the first Region
- to within their uncertainties.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The returned values 5 and 6 do not check the value of the \htmlref{Closed}{Closed}
- attribute in the two Regions.
-
- \sstitem
- A value of zero will be returned if this function is invoked with the
- AST error status set, or if it should fail for any reason.
- }
- }
-}
-\sstroutine{
- astPcdMap\sstlabel{astPcdMap}
-}{
- Create a PcdMap
-}{
- \sstdescription{
- This function creates a new \htmlref{PcdMap}{PcdMap} and optionally initialises its
- attributes.
-
- A PcdMap is a non-linear \htmlref{Mapping}{Mapping} which transforms 2-dimensional
- positions to correct for the radial distortion introduced by some
- cameras and telescopes. This can take the form either of pincushion
- or barrel distortion, and is characterized by a single distortion
- coefficient.
-
- A PcdMap is specified by giving this distortion coefficient and the
- coordinates of the centre of the radial distortion. The forward
- transformation of a PcdMap applies the distortion:
-
- RD = R $*$ ( 1 $+$ C $*$ R $*$ R )
-
- where R is the undistorted radial distance from the distortion
- centre (specified by attribute PcdCen), RD is the radial distance
- from the same centre in the presence of distortion, and C is the
- distortion coefficient (given by attribute \htmlref{Disco}{Disco}).
-
- The inverse transformation of a PcdMap removes the distortion
- produced by the forward transformation. The expression used to derive
- R from RD is an approximate inverse of the expression above, obtained
- from two iterations of the Newton-Raphson method. The mismatch between
- the forward and inverse expressions is negligible for astrometric
- applications (to reach 1 milliarcsec at the edge of the Anglo-Australian
- Telescope triplet or a Schmidt field would require field diameters of
- 2.4 and 42 degrees respectively).
-
- If a PcdMap is inverted (e.g. using \htmlref{astInvert}{astInvert}) then the roles of the
- forward and inverse transformations are reversed; the forward
- transformation will remove the distortion, and the inverse
- transformation will apply it.
- }
- \sstsynopsis{
- AstPcdMap $*$astPcdMap( double disco, const double pcdcen[2],
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- disco
- }{
- The distortion coefficient. Negative values give barrel
- distortion, positive values give pincushion distortion, and
- zero gives no distortion.
- }
- \sstsubsection{
- pcdcen
- }{
- A 2-element array containing the coordinates of the centre of the
- distortion.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new PcdMap. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astPcdMap()
- }{
- A pointer to the new PcdMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- astPermAxes\sstlabel{astPermAxes}
-}{
- Permute the axis order in a Frame
-}{
- \sstdescription{
- This function permutes the order in which a \htmlref{Frame}{Frame}'s axes occur.
- }
- \sstsynopsis{
- void astPermAxes( AstFrame $*$this, const int perm[] )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Frame.
- }
- \sstsubsection{
- perm
- }{
- An array with one element for each axis of the Frame (\htmlref{Naxes}{Naxes}
- attribute). This should list the axes in their new order,
- using the original axis numbering (which starts at 1 for the
- first axis).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Only genuine permutations of the axis order are permitted, so
- each axis must be referenced exactly once in the {\tt{"}}perm{\tt{"}} array.
-
- \sstitem
- If successive axis permutations are applied to a Frame, then
- the effects are cumulative.
- }
- }
-}
-\sstroutine{
- astPermMap\sstlabel{astPermMap}
-}{
- Create a PermMap
-}{
- \sstdescription{
- This function creates a new \htmlref{PermMap}{PermMap} and optionally initialises its
- attributes.
-
- A PermMap is a \htmlref{Mapping}{Mapping} which permutes the order of coordinates,
- and possibly also changes the number of coordinates, between its
- input and output.
-
- In addition to permuting the coordinate order, a PermMap may
- also assign constant values to coordinates. This is useful when
- the number of coordinates is being increased as it allows fixed
- values to be assigned to any new ones.
- }
- \sstsynopsis{
- AstPermMap $*$astPermMap( int nin, const int inperm[], int nout,
- const int outperm[], double constant[],
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- nin
- }{
- The number of input coordinates.
- }
- \sstsubsection{
- inperm
- }{
- An optional array with {\tt{"}}nin{\tt{"}} elements which, for each input
- coordinate, should contain the number of the output
- coordinate whose value is to be used (note that this array
- therefore defines the inverse coordinate transformation).
- Coordinates are numbered starting from 1.
-
- For details of additional special values that may be used in
- this array, see the description of the {\tt{"}}constant{\tt{"}} parameter.
-
- If a NULL pointer is supplied instead of an array, each input
- coordinate will obtain its value from the corresponding
- output coordinate (or will be assigned the value AST\_\_BAD if
- there is no corresponding output coordinate).
- }
- \sstsubsection{
- nout
- }{
- The number of output coordinates.
- }
- \sstsubsection{
- outperm
- }{
- An optional array with {\tt{"}}nout{\tt{"}} elements which, for each output
- coordinate, should contain the number of the input coordinate
- whose value is to be used (note that this array therefore
- defines the forward coordinate transformation). Coordinates
- are numbered starting from 1.
-
- For details of additional special values that may be used in
- this array, see the description of the {\tt{"}}constant{\tt{"}} parameter.
-
- If a NULL pointer is supplied instead of an array, each output
- coordinate will obtain its value from the corresponding
- input coordinate (or will be assigned the value AST\_\_BAD if
- there is no corresponding input coordinate).
- }
- \sstsubsection{
- constant
- }{
- An optional array containing values which may be assigned to
- input and/or output coordinates instead of deriving them
- from other coordinate values. If either of the {\tt{"}}inperm{\tt{"}} or
- {\tt{"}}outperm{\tt{"}} arrays contains a negative value, it is used to
- address this {\tt{"}}constant{\tt{"}} array (such that -1 addresses the
- first element, -2 addresses the second element, etc.) and the
- value obtained is used as the corresponding coordinate value.
-
- Care should be taken to ensure that locations lying outside
- the extent of this array are not accidentally addressed. The
- array is not used if the {\tt{"}}inperm{\tt{"}} and {\tt{"}}outperm{\tt{"}} arrays do not
- contain negative values.
-
- If a NULL pointer is supplied instead of an array, the
- behaviour is as if the array were of infinite length and
- filled with the value AST\_\_BAD.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new PermMap. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astPermMap()
- }{
- A pointer to the new PermMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If either of the {\tt{"}}inperm{\tt{"}} or {\tt{"}}outperm{\tt{"}} arrays contains a
- zero value (or a positive value which does not identify a valid
- output/input coordinate, as appropriate), then the value
- AST\_\_BAD is assigned as the new coordinate value.
-
- \sstitem
- This function does not attempt to ensure that the forward and
- inverse transformations performed by the PermMap are
- self-consistent in any way. You are therefore free to supply
- coordinate permutation arrays that achieve whatever effect is
- desired.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astPickAxes\sstlabel{astPickAxes}
-}{
- Create a new Frame by picking axes from an existing one
-}{
- \sstdescription{
- This function creates a new \htmlref{Frame}{Frame} whose axes are copied from an
- existing Frame along with other Frame attributes, such as its
- \htmlref{Title}{Title}. Any number (zero or more) of the original Frame's axes
- may be copied, in any order, and additional axes with default
- attributes may also be included in the new Frame.
-
- Optionally, a \htmlref{Mapping}{Mapping} that converts between the coordinate
- systems described by the two Frames will also be returned.
- }
- \sstsynopsis{
- AstFrame $*$astPickAxes( AstFrame $*$this, int naxes, const int axes[],
- AstMapping $*$$*$map )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the original Frame.
- }
- \sstsubsection{
- naxes
- }{
- The number of axes required in the new Frame.
- }
- \sstsubsection{
- axes
- }{
- An array, with {\tt{"}}naxes{\tt{"}} elements, which lists the axes to be
- copied. These should be given in the order required in the
- new Frame, using the axis numbering in the original Frame
- (which starts at 1 for the first axis). Axes may be selected
- in any order, but each may only be used once. If additional
- (default) axes are also to be included, the corresponding
- elements of this array should be set to zero.
- }
- \sstsubsection{
- map
- }{
- Address of a location in which to return a pointer to a new
- Mapping. This will be a \htmlref{PermMap}{PermMap} (or a \htmlref{UnitMap}{UnitMap} as a special
- case) that describes the axis permutation that has taken
- place between the original and new Frames. The Mapping's
- forward transformation will convert coordinates from the
- original Frame into the new one, and vice versa.
-
- If this Mapping is not required, a NULL value may be supplied
- for this parameter.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- This function applies to all Frames. The class of Frame returned
- may differ from that of the original Frame, depending on which
- axes are selected. For example, if a single axis is picked from a
- \htmlref{SkyFrame}{SkyFrame} (which must always have two axes) then the resulting
- Frame cannot be a valid SkyFrame, so will revert to the parent
- class (Frame) instead.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- Using this function on a FrameSet is identical to using it on
- the current Frame in the FrameSet. The returned Frame will not
- be a FrameSet.
- }
- \sstsubsection{
- \htmlref{Region}{Region}
- }{
- If this function is used on a Region, an attempt is made to
- retain the bounds information on the selected axes. If
- succesful, the returned Frame will be a Region of some class.
- Otherwise, the returned Frame is obtained by calling this
- function on the Frame represented by the supplied Region (the
- returned Frame will then not be a Region). In order to be
- succesful, the selected axes in the Region must be independent
- of the others. For instance, a \htmlref{Box}{Box} can be split in this way but
- a \htmlref{Circle}{Circle} cannot. Another requirement for success is that no
- default axes are added (that is, the
- {\tt{"}}axes{\tt{"}}
- array must not contain any zero values.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astPickAxes()
- }{
- A pointer to the new Frame.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The new Frame will contain a {\tt{"}}deep{\tt{"}} copy (c.f. \htmlref{astCopy}{astCopy}) of all
- the data selected from the original Frame. Modifying any aspect
- of the new Frame will therefore not affect the original one.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astPlot\sstlabel{astPlot}
-}{
- Create a Plot
-}{
- \sstdescription{
- This function creates a new \htmlref{Plot}{Plot} and optionally initialises its
- attributes.
-
- A Plot is a specialised form of \htmlref{FrameSet}{FrameSet}, in which the base
- \htmlref{Frame}{Frame} describes a {\tt{"}}graphical{\tt{"}} coordinate system and is
- associated with a rectangular plotting area in the underlying
- graphics system. This plotting area is where graphical output
- appears. It is defined when the Plot is created.
-
- The current Frame of a Plot describes a {\tt{"}}physical{\tt{"}} coordinate
- system, which is the coordinate system in which plotting
- operations are specified. The results of each plotting operation
- are automatically transformed into graphical coordinates so as
- to appear in the plotting area (subject to any clipping which
- may be in effect).
-
- Because the \htmlref{Mapping}{Mapping} between physical and graphical coordinates
- may often be non-linear, or even discontinuous, most plotting
- does not result in simple straight lines. The basic plotting
- element is therefore not a straight line, but a geodesic curve
- (see \htmlref{astCurve}{astCurve}). A Plot also provides facilities for drawing
- markers or symbols (\htmlref{astMark}{astMark}), text (\htmlref{astText}{astText}) and grid lines
- (\htmlref{astGridLine}{astGridLine}). It is also possible to draw curvilinear axes with
- optional coordinate grids (\htmlref{astGrid}{astGrid}).
- A range of Plot attributes is available to allow precise control
- over the appearance of graphical output produced by these
- functions.
-
- You may select different physical coordinate systems in which to
- plot (including the native graphical coordinate system itself)
- by selecting different Frames as the current Frame of a Plot,
- using its \htmlref{Current}{Current} attribute. You may also set up clipping (see
- \htmlref{astClip}{astClip}) to limit the extent of any plotting you perform, and
- this may be done in any of the coordinate systems associated
- with the Plot, not necessarily the one you are plotting in.
-
- Like any FrameSet, a Plot may also be used as a Frame. In this
- case, it behaves like its current Frame, which describes the
- physical coordinate system.
-
- When used as a Mapping, a Plot describes the inter-relation
- between graphical coordinates (its base Frame) and physical
- coordinates (its current Frame). It differs from a normal
- FrameSet, however, in that an attempt to transform points which
- lie in clipped areas of the Plot will result in bad coordinate
- values (AST\_\_BAD).
- }
- \sstsynopsis{
- AstPlot $*$astPlot( AstFrame $*$frame, const float graphbox[ 4 ],
- const double basebox[ 4 ], const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- frame
- }{
- Pointer to a Frame describing the physical coordinate system
- in which to plot. A pointer to a FrameSet may also be given,
- in which case its current Frame will be used to define the
- physical coordinate system and its base Frame will be mapped
- on to graphical coordinates (see below).
-
- If a null \htmlref{Object}{Object} pointer (AST\_\_NULL) is given, a default
- 2-dimensional Frame will be used to describe the physical
- coordinate system. Labels, etc. may then be attached to this
- by setting the appropriate Frame attributes
- (e.g. \htmlref{Label(axis)}{Labelaxis}) for the Plot.
- }
- \sstsubsection{
- graphbox
- }{
- An array giving the position and extent of the plotting area
- (on the plotting surface of the underlying graphics system)
- in which graphical output is to appear. This must be
- specified using graphical coordinates appropriate to the
- underlying graphics system.
-
- The first pair of values should give the coordinates of the
- bottom left corner of the plotting area and the second pair
- should give the coordinates of the top right corner. The
- coordinate on the horizontal axis should be given first in
- each pair. Note that the order in which these points are
- given is important because it defines up, down, left and
- right for subsequent graphical operations.
- }
- \sstsubsection{
- basebox
- }{
- An array giving the coordinates of two points in the supplied
- Frame (or in the base Frame if a FrameSet was supplied) which
- correspond to the bottom left and top right corners of the
- plotting area, as specified above. This range of coordinates
- will be mapped linearly on to the plotting area. The
- coordinates should be given in the same order as above.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new Plot. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- If no initialisation is required, a zero-length string may be
- supplied.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astPlot()
- }{
- A pointer to the new Plot.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The base Frame of the returned Plot will be a new Frame which
- is created by this function to represent the coordinate system
- of the underlying graphics system (graphical coordinates). It is
- given a Frame index of 1 within the Plot. The choice of base
- Frame (\htmlref{Base}{Base} attribute) should not, in general, be changed once a
- Plot has been created (although you could use this as a way of
- moving the plotting area around on the plotting surface).
-
- \sstitem
- If a Frame is supplied (via the {\tt{"}}frame{\tt{"}} pointer), then it
- becomes the current Frame of the new Plot and is given a Frame
- index of 2.
-
- \sstitem
- If a FrameSet is supplied (via the {\tt{"}}frame{\tt{"}} pointer), then
- all the Frames within this FrameSet become part of the new Plot
- (where their Frame indices are increased by 1), with the
- FrameSet's current Frame becoming the current Frame of the Plot.
-
- \sstitem
- If a null Object pointer (AST\_\_NULL) is supplied (via the
- {\tt{"}}frame{\tt{"}} pointer), then the returned Plot will contain two
- Frames, both created by this function. The base Frame will
- describe graphics coordinates (as above) and the current Frame
- will be a basic Frame with no attributes set (this will
- therefore give default values for such things as the Plot \htmlref{Title}{Title}
- and the Label on each axis). Physical coordinates will be mapped
- linearly on to graphical coordinates.
-
- \sstitem
- An error will result if the Frame supplied (or the base Frame
- if a FrameSet was supplied) is not 2-dimensional.
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astPlot3D\sstlabel{astPlot3D}
-}{
- Create a Plot3D
-}{
- \sstdescription{
- This function creates a new \htmlref{Plot3D}{Plot3D} and optionally initialises
- its attributes.
-
- A Plot3D is a specialised form of \htmlref{Plot}{Plot} that provides facilities
- for producing 3D graphical output.
- }
- \sstsynopsis{
- AstPlot3D $*$astPlot3D( AstFrame $*$frame, const float graphbox[ 6 ],
- const double basebox[ 6 ], const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- frame
- }{
- Pointer to a \htmlref{Frame}{Frame} describing the physical coordinate system
- in which to plot. A pointer to a \htmlref{FrameSet}{FrameSet} may also be given,
- in which case its current Frame will be used to define the
- physical coordinate system and its base Frame will be mapped
- on to graphical coordinates (see below).
-
- If a null \htmlref{Object}{Object} pointer (AST\_\_NULL) is given, a default
- 3-dimensional Frame will be used to describe the physical
- coordinate system. Labels, etc. may then be attached to this
- by setting the appropriate Frame attributes
- (e.g. \htmlref{Label(axis)}{Labelaxis}) for the Plot.
- }
- \sstsubsection{
- graphbox
- }{
- An array giving the position and extent of the plotting volume
- (within the plotting space of the underlying graphics system)
- in which graphical output is to appear. This must be
- specified using graphical coordinates appropriate to the
- underlying graphics system.
-
- The first triple of values should give the coordinates of the
- bottom left corner of the plotting volume and the second triple
- should give the coordinates of the top right corner. The
- coordinate on the horizontal axis should be given first in
- each pair. Note that the order in which these points are
- given is important because it defines up, down, left and
- right for subsequent graphical operations.
- }
- \sstsubsection{
- basebox
- }{
- An array giving the coordinates of two points in the supplied
- Frame (or in the base Frame if a FrameSet was supplied) which
- correspond to the bottom left and top right corners of the
- plotting volume, as specified above. This range of coordinates
- will be mapped linearly on to the plotting area. The
- coordinates should be given in the same order as above.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new Plot3D. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- If no initialisation is required, a zero-length string may be
- supplied.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astPlot3D()
- }{
- A pointer to the new Plot3D.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The base Frame of the returned Plot3D will be a new Frame which
- is created by this function to represent the coordinate system
- of the underlying graphics system (graphical coordinates). It is
- given a Frame index of 1 within the Plot3D. The choice of base
- Frame (\htmlref{Base}{Base} attribute) should not, in general, be changed once a
- Plot3D has been created (although you could use this as a way of
- moving the plotting area around on the plotting surface).
-
- \sstitem
- If a Frame is supplied (via the {\tt{"}}frame{\tt{"}} pointer), then it
- becomes the current Frame of the new Plot3D and is given a Frame
- index of 2.
-
- \sstitem
- If a FrameSet is supplied (via the {\tt{"}}frame{\tt{"}} pointer), then
- all the Frames within this FrameSet become part of the new Plot3D
- (where their Frame indices are increased by 1), with the
- FrameSet's current Frame becoming the current Frame of the Plot3D.
-
- \sstitem
- If a null Object pointer (AST\_\_NULL) is supplied (via the
- {\tt{"}}frame{\tt{"}} pointer), then the returned Plot3D will contain two
- Frames, both created by this function. The base Frame will
- describe graphics coordinates (as above) and the current Frame
- will be a basic Frame with no attributes set (this will
- therefore give default values for such things as the Plot3D \htmlref{Title}{Title}
- and the Label on each axis). Physical coordinates will be mapped
- linearly on to graphical coordinates.
-
- \sstitem
- An error will result if the Frame supplied (or the base Frame
- if a FrameSet was supplied) is not 3-dimensional.
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astPointList\sstlabel{astPointList}
-}{
- Create a PointList
-}{
- \sstdescription{
- This function creates a new \htmlref{PointList}{PointList} object and optionally initialises
- its attributes.
-
- A PointList object is a specialised type of \htmlref{Region}{Region} which represents a
- collection of points in a coordinate \htmlref{Frame}{Frame}.
- }
- \sstsynopsis{
- AstPointList $*$astPointList( AstFrame $*$frame, int npnt, int ncoord, int dim,
- const double $*$points, AstRegion $*$unc,
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- frame
- }{
- A pointer to the Frame in which the region is defined. A deep
- copy is taken of the supplied Frame. This means that any
- subsequent changes made to the Frame using the supplied pointer
- will have no effect the Region.
- }
- \sstsubsection{
- npnt
- }{
- The number of points in the Region.
- }
- \sstsubsection{
- ncoord
- }{
- The number of coordinates being supplied for each point. This
- must equal the number of axes in the supplied Frame, given by
- its \htmlref{Naxes}{Naxes} attribute.
- }
- \sstsubsection{
- dim
- }{
- The number of elements along the second dimension of the {\tt{"}}points{\tt{"}}
- array (which contains the point coordinates). This value is
- required so that the coordinate values can be correctly
- located if they do not entirely fill this array. The value
- given should not be less than {\tt{"}}npnt{\tt{"}}.
- }
- \sstsubsection{
- points
- }{
- The address of the first element of a 2-dimensional array of
- shape {\tt{"}}[ncoord][dim]{\tt{"}} giving the physical coordinates of the
- points. These should be stored such that the value of coordinate
- number {\tt{"}}coord{\tt{"}} for point number {\tt{"}}pnt{\tt{"}} is found in element
- {\tt{"}}in[coord][pnt]{\tt{"}}.
- }
- \sstsubsection{
- unc
- }{
- An optional pointer to an existing Region which specifies the uncertainties
- associated with each point in the PointList being created. The
- uncertainty at any point in the PointList is found by shifting the
- supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at the point
- being considered. The area covered by the shifted uncertainty Region
- then represents the uncertainty in the position. The uncertainty is
- assumed to be the same for all points.
-
- If supplied, the uncertainty Region must be of a class for which
- all instances are centro-symetric (e.g. \htmlref{Box}{Box}, \htmlref{Circle}{Circle}, \htmlref{Ellipse}{Ellipse}, etc.)
- or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
- copy of the supplied Region will be taken, so subsequent changes to
- the uncertainty Region using the supplied pointer will have no
- effect on the created Box. Alternatively,
- a NULL \htmlref{Object}{Object} pointer
- may be supplied, in which case a default uncertainty is used
- equivalent to a box 1.0E-6 of the size of the bounding box of the
- PointList being created.
-
- The uncertainty Region has two uses: 1) when the
- \htmlref{astOverlap}{astOverlap}
- function compares two Regions for equality the uncertainty
- Region is used to determine the tolerance on the comparison, and 2)
- when a Region is mapped into a different coordinate system and
- subsequently simplified (using
- \htmlref{astSimplify}{astSimplify}),
- the uncertainties are used to determine if the transformed boundary
- can be accurately represented by a specific shape of Region.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new PointList. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astPointList()
- }{
- A pointer to the new PointList.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- astPolyCurve\sstlabel{astPolyCurve}
-}{
- Draw a series of connected geodesic curves
-}{
- \sstdescription{
- This function joins a series of points specified in the physical
- coordinate system of a \htmlref{Plot}{Plot} by drawing a sequence of geodesic
- curves. It is equivalent to making repeated use of the \htmlref{astCurve}{astCurve}
- function (q.v.), except that astPolyCurve will generally be more
- efficient when drawing many geodesic curves end-to-end. A
- typical application of this might be in drawing contour lines.
-
- As with astCurve, full account is taken of the \htmlref{Mapping}{Mapping} between
- physical and graphical coordinate systems. This includes any
- discontinuities and clipping established using \htmlref{astClip}{astClip}.
- }
- \sstsynopsis{
- void astPolyCurve( AstPlot $*$this, int npoint, int ncoord, int indim,
- const double $*$in )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Plot.
- }
- \sstsubsection{
- npoint
- }{
- The number of points between which geodesic curves are to be drawn.
- }
- \sstsubsection{
- ncoord
- }{
- The number of coordinates being supplied for each point (i.e.
- the number of axes in the current \htmlref{Frame}{Frame} of the Plot, as given
- by its \htmlref{Naxes}{Naxes} attribute).
- }
- \sstsubsection{
- indim
- }{
- The number of elements along the second dimension of the {\tt{"}}in{\tt{"}}
- array (which contains the input coordinates). This value is
- required so that the coordinate values can be correctly
- located if they do not entirely fill this array. The value
- given should not be less than {\tt{"}}npoint{\tt{"}}.
- }
- \sstsubsection{
- in
- }{
- The address of the first element in a 2-dimensional array of shape
- {\tt{"}}[ncoord][indim]{\tt{"}} giving the
- physical coordinates of the points which are to be joined in
- sequence by geodesic curves. These should be stored such that
- the value of coordinate number {\tt{"}}coord{\tt{"}} for point number
- {\tt{"}}point{\tt{"}} is found in element {\tt{"}}in[coord][point]{\tt{"}}.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- No curve is drawn on either side of any point which has any
- coordinate equal to the value AST\_\_BAD.
-
- \sstitem
- An error results if the base Frame of the Plot is not
- 2-dimensional.
-
- \sstitem
- An error also results if the transformation between the
- current and base Frames of the Plot is not defined (i.e. the
- Plot's \htmlref{TranInverse}{TranInverse} attribute is zero).
- }
- }
-}
-\sstroutine{
- astPolyMap\sstlabel{astPolyMap}
-}{
- Create a PolyMap
-}{
- \sstdescription{
- This function creates a new \htmlref{PolyMap}{PolyMap} and optionally initialises
- its attributes.
-
- A PolyMap is a form of \htmlref{Mapping}{Mapping} which performs a general polynomial
- transformation. Each output coordinate is a polynomial function of
- all the input coordinates. The coefficients are specified separately
- for each output coordinate. The forward and inverse transformations
- are defined independantly by separate sets of coefficients.
- }
- \sstsynopsis{
- AstPolyMap $*$astPolyMap( int nin, int nout, int ncoeff\_f, const double coeff\_f[],
- int ncoeff\_i, const double coeff\_i[],
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- nin
- }{
- The number of input coordinates.
- }
- \sstsubsection{
- nout
- }{
- The number of output coordinates.
- }
- \sstsubsection{
- ncoeff\_f
- }{
- The number of non-zero coefficients necessary to define the
- forward transformation of the PolyMap. If zero is supplied, the
- forward transformation will be undefined.
- }
- \sstsubsection{
- coeff\_f
- }{
- An array containing
- {\tt{"}}ncoeff\_f$*$( 2 $+$ nin ){\tt{"}} elements. Each group of {\tt{"}}2 $+$ nin{\tt{"}}
- adjacent elements describe a single coefficient of the forward
- transformation. Within each such group, the first element is the
- coefficient value; the next element is the integer index of the
- PolyMap output which uses the coefficient within its defining
- polynomial (the first output has index 1); the remaining elements
- of the group give the integer powers to use with each input
- coordinate value (powers must not be negative, and floating
- point values are rounded to the nearest integer).
- If {\tt{"}}ncoeff\_f{\tt{"}} is zero, a NULL pointer may be supplied for {\tt{"}}coeff\_f{\tt{"}}.
-
- For instance, if the PolyMap has 3 inputs and 2 outputs, each group
- consisting of 5 elements, A groups such as {\tt{"}}(1.2, 2.0, 1.0, 3.0, 0.0){\tt{"}}
- describes a coefficient with value 1.2 which is used within the
- definition of output 2. The output value is incremented by the
- product of the coefficient value, the value of input coordinate
- 1 raised to the power 1, and the value of input coordinate 2 raised
- to the power 3. Input coordinate 3 is not used since its power is
- specified as zero. As another example, the group {\tt{"}}(-1.0, 1.0,
- 0.0, 0.0, 0.0 ){\tt{"}} describes adds a constant value -1.0 onto
- output 1 (it is a constant value since the power for every input
- axis is given as zero).
-
- Each final output coordinate value is the sum of the {\tt{"}}ncoeff\_f{\tt{"}} terms
- described by the {\tt{"}}ncoeff\_f{\tt{"}} groups within the supplied array.
- }
- \sstsubsection{
- ncoeff\_i
- }{
- The number of non-zero coefficients necessary to define the
- inverse transformation of the PolyMap. If zero is supplied, the
- inverse transformation will be undefined.
- }
- \sstsubsection{
- coeff\_i
- }{
- An array containing
- {\tt{"}}ncoeff\_i$*$( 2 $+$ nout ){\tt{"}} elements. Each group of {\tt{"}}2 $+$ nout{\tt{"}}
- adjacent elements describe a single coefficient of the inverse
- transformation, using the same schame as {\tt{"}}coeff\_f{\tt{"}},
- except that {\tt{"}}inputs{\tt{"}} and {\tt{"}}outputs{\tt{"}} are transposed.
- If {\tt{"}}ncoeff\_i{\tt{"}} is zero, a NULL pointer may be supplied for {\tt{"}}coeff\_i{\tt{"}}.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new PolyMap. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astPolyMap()
- }{
- A pointer to the new PolyMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astPolygon\sstlabel{astPolygon}
-}{
- Create a Polygon
-}{
- \sstdescription{
- This function creates a new \htmlref{Polygon}{Polygon} object and optionally initialises
- its attributes.
-
- The Polygon class implements a polygonal area, defined by a
- collection of vertices, within a 2-dimensional \htmlref{Frame}{Frame}. The vertices
- are connected together by geodesic curves within the encapsulated Frame.
- For instance, if the encapsulated Frame is a simple Frame then the
- geodesics will be straight lines, but if the Frame is a \htmlref{SkyFrame}{SkyFrame} then
- the geodesics will be great circles. Note, the vertices must be
- supplied in an order such that the inside of the polygon is to the
- left of the boundary as the vertices are traversed. Supplying them
- in the reverse order will effectively negate the polygon.
-
- Within a SkyFrame, neighbouring vertices are always joined using the
- shortest path. Thus if an edge of 180 degrees or more in length is
- required, it should be split into section each of which is less
- than 180 degrees. The closed path joining all the vertices in order
- will divide the celestial sphere into two disjoint regions. The
- inside of the polygon is the region which is circled in an
- anti-clockwise manner (when viewed from the inside of the celestial
- sphere) when moving through the list of vertices in the order in
- which they were supplied when the Polygon was created (i.e. the
- inside is to the left of the boundary when moving through the
- vertices in the order supplied).
- }
- \sstsynopsis{
- AstPolygon $*$astPolygon( AstFrame $*$frame, int npnt, int dim,
- const double $*$points, AstRegion $*$unc,
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- frame
- }{
- A pointer to the Frame in which the region is defined. It must
- have exactly 2 axes. A deep copy is taken of the supplied Frame.
- This means that any subsequent changes made to the Frame using the
- supplied pointer will have no effect the \htmlref{Region}{Region}.
- }
- \sstsubsection{
- npnt
- }{
- The number of points in the Region.
- }
- \sstsubsection{
- dim
- }{
- The number of elements along the second dimension of the {\tt{"}}points{\tt{"}}
- array (which contains the point coordinates). This value is
- required so that the coordinate values can be correctly
- located if they do not entirely fill this array. The value
- given should not be less than {\tt{"}}npnt{\tt{"}}.
- }
- \sstsubsection{
- points
- }{
- The address of the first element of a 2-dimensional array of
- shape {\tt{"}}[2][dim]{\tt{"}} giving the physical coordinates of the vertices.
- These should be stored such that the value of coordinate
- number {\tt{"}}coord{\tt{"}} for point number {\tt{"}}pnt{\tt{"}} is found in element
- {\tt{"}}in[coord][pnt]{\tt{"}}.
- }
- \sstsubsection{
- unc
- }{
- An optional pointer to an existing Region which specifies the
- uncertainties associated with the boundary of the \htmlref{Box}{Box} being created.
- The uncertainty in any point on the boundary of the Box is found by
- shifting the supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at
- the boundary point being considered. The area covered by the
- shifted uncertainty Region then represents the uncertainty in the
- boundary position. The uncertainty is assumed to be the same for
- all points.
-
- If supplied, the uncertainty Region must be of a class for which
- all instances are centro-symetric (e.g. Box, \htmlref{Circle}{Circle}, \htmlref{Ellipse}{Ellipse}, etc.)
- or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
- copy of the supplied Region will be taken, so subsequent changes to
- the uncertainty Region using the supplied pointer will have no
- effect on the created Box. Alternatively,
- a NULL \htmlref{Object}{Object} pointer
- may be supplied, in which case a default uncertainty is used
- equivalent to a box 1.0E-6 of the size of the Box being created.
-
- The uncertainty Region has two uses: 1) when the
- \htmlref{astOverlap}{astOverlap}
- function compares two Regions for equality the uncertainty
- Region is used to determine the tolerance on the comparison, and 2)
- when a Region is mapped into a different coordinate system and
- subsequently simplified (using
- \htmlref{astSimplify}{astSimplify}),
- the uncertainties are used to determine if the transformed boundary
- can be accurately represented by a specific shape of Region.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new Polygon. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astPolygon()
- }{
- A pointer to the new Polygon.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- astPrism\sstlabel{astPrism}
-}{
- Create a Prism
-}{
- \sstdescription{
- This function creates a new \htmlref{Prism}{Prism} and optionally initialises
- its attributes.
-
- A Prism is a \htmlref{Region}{Region} which represents an extrusion of an existing Region
- into one or more orthogonal dimensions (specified by another Region).
- If the Region to be extruded has N axes, and the Region defining the
- extrusion has M axes, then the resulting Prism will have (M$+$N) axes.
- A point is inside the Prism if the first N axis values correspond to
- a point inside the Region being extruded, and the remaining M axis
- values correspond to a point inside the Region defining the extrusion.
-
- As an example, a cylinder can be represented by extruding an existing
- \htmlref{Circle}{Circle}, using an \htmlref{Interval}{Interval} to define the extrusion. Ih this case, the
- Interval would have a single axis and would specify the upper and
- lower limits of the cylinder along its length.
- }
- \sstsynopsis{
- AstPrism $*$astPrism( AstRegion $*$region1, AstRegion $*$region2,
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- region1
- }{
- Pointer to the Region to be extruded.
- }
- \sstsubsection{
- region2
- }{
- Pointer to the Region defining the extent of the extrusion.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new Prism. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astPrism()
- }{
- A pointer to the new Prism.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Deep copies are taken of the supplied Regions. This means that
- any subsequent changes made to the component Regions using the
- supplied pointers will have no effect on the Prism.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astPurgeWCS\sstlabel{astPurgeWCS}
-}{
- Delete all cards in the FitsChan describing WCS information
-}{
- \sstdescription{
- This function
- deletes all cards in a \htmlref{FitsChan}{FitsChan} that relate to any of the recognised
- WCS encodings. On exit, the current card is the first remaining card
- in the FitsChan.
- }
- \sstsynopsis{
- void astPurgeWCS( AstFitsChan $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the FitsChan.
- }
- }
-}
-\sstroutine{
- astPutCards\sstlabel{astPutCards}
-}{
- Store a set of FITS header cards in a FitsChan
-}{
- \sstdescription{
- This function
- stores a set of FITS header cards in a \htmlref{FitsChan}{FitsChan}. The cards are
- supplied concatenated together into a single character string.
- Any existing cards in the FitsChan are removed before the new cards
- are added. The FitsChan is {\tt{"}}re-wound{\tt{"}} on exit by clearing its \htmlref{Card}{Card}
- attribute. This means that a subsequent invocation of
- \htmlref{astRead}{astRead}
- can be made immediately without the need to re-wind the FitsChan
- first.
- }
- \sstsynopsis{
- void astPutCards( AstFitsChan $*$this, const char $*$cards )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the FitsChan.
- }
- \sstsubsection{
- cards
- }{
- Pointer to a null-terminated character string
- containing the FITS cards to be stored. Each individual card
- should occupy 80 characters in this string, and there should be
- no delimiters, new lines, etc, between adjacent cards. The final
- card may be less than 80 characters long.
- This is the format produced by the fits\_hdr2str function in the
- CFITSIO library.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- An error will result if the supplied string contains any cards
- which cannot be interpreted.
- }
- }
-}
-\sstroutine{
- astPutChannelData\sstlabel{astPutChannelData}
-}{
- Store arbitrary data to be passed to a source or sink function
-}{
- \sstdescription{
- This function stores a supplied arbitrary pointer in the \htmlref{Channel}{Channel}.
- When a source or sink function is invoked by the Channel, the
- invoked function can use the \htmlref{astChannelData}{astChannelData} macro to retrieve the
- pointer. This provides a thread-safe alternative to passing file
- descriptors, etc, via global static variables.
- }
- \sstsynopsis{
- void astPutChannelData( AstChannel $*$this, void $*$data )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Channel.
- }
- \sstsubsection{
- data
- }{
- A pointer to be made available to the source and sink functions
- via the astChannelData macro. May be NULL.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Channel
- }{
- All Channels have this function.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This routine is not available in the Fortran 77 interface to
- the AST library.
- }
- }
-}
-\sstroutine{
- astPutFits\sstlabel{astPutFits}
-}{
- Store a FITS header card in a FitsChan
-}{
- \sstdescription{
- This function stores a FITS header card in a \htmlref{FitsChan}{FitsChan}. The card
- is either inserted before the current card (identified by the
- \htmlref{Card}{Card} attribute), or over-writes the current card, as required.
- }
- \sstsynopsis{
- void astPutFits( AstFitsChan $*$this, const char card[ 80 ],
- int overwrite )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the FitsChan.
- }
- \sstsubsection{
- card
- }{
- Pointer to a possibly null-terminated character string
- containing the FITS card to be stored. No more than 80
- characters will be used from this string (or fewer if a null
- occurs earlier).
- }
- \sstsubsection{
- overwrite
- }{
- If this value is zero, the new card is inserted in front of
- the current card in the FitsChan (as identified by the
- initial value of the Card attribute). If it is non-zero, the
- new card replaces the current card. In either case, the Card
- attribute is then incremented by one so that it subsequently
- identifies the card following the one stored.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the Card attribute initially points at the {\tt{"}}end-of-file{\tt{"}}
- (i.e. exceeds the number of cards in the FitsChan), then the new
- card is appended as the last card in the FitsChan.
-
- \sstitem
- An error will result if the supplied string cannot be interpreted
- as a FITS header card.
- }
- }
-}
-\sstroutine{
- astRate\sstlabel{astRate}
-}{
- Calculate the rate of change of a Mapping output
-}{
- \sstdescription{
- This function
- evaluates the rate of change of a specified output of the supplied
- \htmlref{Mapping}{Mapping} with respect to a specified input, at a specified input
- position.
-
- The result is estimated by interpolating the function using a
- fourth order polynomial in the neighbourhood of the specified
- position. The size of the neighbourhood used is chosen to minimise
- the RMS residual per unit length between the interpolating
- polynomial and the supplied Mapping function. This method produces
- good accuracy but can involve evaluating the Mapping 100 or more
- times.
- }
- \sstsynopsis{
- double astRate( AstMapping $*$this, double $*$at, int ax1, int ax2 )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Mapping to be applied.
- }
- \sstsubsection{
- at
- }{
- The address of an
- array holding the axis values at the position at which the rate
- of change is to be evaluated. The number of elements in this
- array should equal the number of inputs to the Mapping.
- }
- \sstsubsection{
- ax1
- }{
- The index of the Mapping output for which the rate of change is to
- be found (output numbering starts at 1 for the first output).
- }
- \sstsubsection{
- ax2
- }{
- The index of the Mapping input which is to be varied in order to
- find the rate of change (input numbering starts at 1 for the first
- input).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astRate()
- }{
- The rate of change of Mapping output {\tt{"}}ax1{\tt{"}} with respect to input
- {\tt{"}}ax2{\tt{"}}, evaluated at {\tt{"}}at{\tt{"}}, or AST\_\_BAD if the value cannot be
- calculated.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A value of AST\_\_BAD will be returned if this function is invoked
- with the global error status set, or if it should fail for any
- reason.
- }
- }
-}
-\sstroutine{
- astRateMap\sstlabel{astRateMap}
-}{
- Create a RateMap
-}{
- \sstdescription{
- This function creates a new \htmlref{RateMap}{RateMap} and optionally initialises
- its attributes.
-
- A RateMap is a \htmlref{Mapping}{Mapping} which represents a single element of the
- Jacobian matrix of another Mapping. The Mapping for which the
- Jacobian is required is specified when the new RateMap is created,
- and is referred to as the {\tt{"}}encapsulated Mapping{\tt{"}} below.
-
- The number of inputs to a RateMap is the same as the number of inputs
- to its encapsulated Mapping. The number of outputs from a RateMap
- is always one. This one output equals the rate of change of a
- specified output of the encapsulated Mapping with respect to a
- specified input of the encapsulated Mapping (the input and output
- to use are specified when the RateMap is created).
-
- A RateMap which has not been inverted does not define an inverse
- transformation. If a RateMap has been inverted then it will define
- an inverse transformation but not a forward transformation.
- }
- \sstsynopsis{
- AstRateMap $*$astRateMap( AstMapping $*$map, int ax1, int ax2,
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- map
- }{
- Pointer to the encapsulated Mapping.
- }
- \sstsubsection{
- ax1
- }{
- Index of the output from the encapsulated Mapping for which the
- rate of change is required. This corresponds to the delta
- quantity forming the numerator of the required element of the
- Jacobian matrix. The first axis has index 1.
- }
- \sstsubsection{
- ax2
- }{
- Index of the input to the encapsulated Mapping which is to be
- varied. This corresponds to the delta quantity forming the
- denominator of the required element of the Jacobian matrix.
- The first axis has index 1.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new RateMap. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astRateMap()
- }{
- A pointer to the new RateMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The forward transformation of the encapsulated Mapping must be
- defined.
-
- \sstitem
- Note that the component Mappings supplied are not copied by
- astRateMap (the new RateMap simply retains a reference to
- them). They may continue to be used for other purposes, but
- should not be deleted. If a RateMap containing a copy of its
- component Mappings is required, then a copy of the RateMap should
- be made using \htmlref{astCopy}{astCopy}.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astRead\sstlabel{astRead}
-}{
- Read an Object from a Channel
-}{
- \sstdescription{
- This function reads the next \htmlref{Object}{Object} from a \htmlref{Channel}{Channel} and returns a
- pointer to the new Object.
- }
- \sstsynopsis{
- AstObject $*$astRead( AstChannel $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Channel.
- }
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{FitsChan}{FitsChan}
- }{
- All successful use of astRead on a FitsChan is destructive, so that
- FITS header cards are consumed in the process of reading an Object,
- and are removed from the FitsChan (this deletion can be prevented
- for specific cards by calling the FitsChan
- \htmlref{astRetainFits}{astRetainFits} function).
- An unsuccessful call of
- astRead
- (for instance, caused by the FitsChan not containing the necessary
- FITS headers cards needed to create an Object) results in the
- contents of the FitsChan being left unchanged.
- }
- \sstsubsection{
- \htmlref{StcsChan}{StcsChan}
- }{
- The AST Object returned by a successful use of
- astRead
- on an StcsChan, will be either a \htmlref{Region}{Region} or a \htmlref{KeyMap}{KeyMap}, depending
- on the values of the \htmlref{StcsArea}{StcsArea}, \htmlref{StcsCoords}{StcsCoords} and \htmlref{StcsProps}{StcsProps}
- attributes. See the documentation for these attributes for further
- information.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astRead()
- }{
- A pointer to the new Object. The class to which this will
- belong is determined by the input data, so is not known in
- advance.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned, without
- error, if the Channel contains no further Objects to be read.
-
- \sstitem
- A null Object pointer will also be returned if this function
- is invoked with the AST error status set, or if it should fail
- for any reason.
- }
- }
-}
-\sstroutine{
- astRebin$<$X$>$\sstlabel{astRebinX}
-}{
- Rebin a region of a data grid
-}{
- \sstdescription{
- This is a set of functions for rebinning gridded data (e.g. an
- image) under the control of a geometrical transformation, which
- is specified by a \htmlref{Mapping}{Mapping}. The functions operate on a pair of
- data grids (input and output), each of which may have any number
- of dimensions. Rebinning may be restricted to a specified
- region of the input grid. An associated grid of error estimates
- associated with the input data may also be supplied (in the form
- of variance values), so as to produce error estimates for the
- rebined output data. Propagation of missing data (bad pixels)
- is supported.
-
- Note, if you will be rebining a sequence of input arrays and then
- co-adding them into a single array, the alternative
- \htmlref{astRebinSeq$<$X$>$}{astRebinSeqX} functions
- will in general be more efficient.
-
- You should use a rebinning function which matches the numerical
- type of the data you are processing by replacing $<$X$>$ in
- the generic function name astRebin$<$X$>$ by an appropriate 1- or
- 2-character type code. For example, if you are rebinning data
- with type {\tt{"}}float{\tt{"}}, you should use the function astRebinF (see
- the {\tt{"}}Data Type Codes{\tt{"}} section below for the codes appropriate to
- other numerical types).
-
- Rebinning of the grid of input data is performed by transforming
- the coordinates of the centre of each input grid element (or pixel)
- into the coordinate system of the output grid. The input pixel
- value is then divided up and assigned to the output pixels in the
- neighbourhood of the central output coordinates. A choice of
- schemes are provided for determining how each input pixel value is
- divided up between the output pixels. In general, each output pixel
- may be assigned values from more than one input pixel. All
- contributions to a given output pixel are summed to produce the
- final output pixel value. Output pixels can be set to the supplied
- bad value if they receive contributions from an insufficient number
- of input pixels. This is controlled by the
- {\tt{"}}wlim{\tt{"}} parameter.
-
- Input pixel coordinates are transformed into the coordinate
- system of the output grid using the forward transformation of the
- Mapping which is supplied. This means that geometrical features
- in the input data are subjected to the Mapping's forward
- transformation as they are transferred from the input to the
- output grid.
-
- In practice, transforming the coordinates of every pixel of a
- large data grid can be time-consuming, especially if the Mapping
- involves complicated functions, such as sky projections. To
- improve performance, it is therefore possible to approximate
- non-linear Mappings by a set of linear transformations which are
- applied piece-wise to separate sub-regions of the data. This
- approximation process is applied automatically by an adaptive
- algorithm, under control of an accuracy criterion which
- expresses the maximum tolerable geometrical distortion which may
- be introduced, as a fraction of a pixel.
-
- This algorithm first attempts to approximate the Mapping with a
- linear transformation applied over the whole region of the
- input grid which is being used. If this proves to be
- insufficiently accurate, the input region is sub-divided into
- two along its largest dimension and the process is repeated
- within each of the resulting sub-regions. This process of
- sub-division continues until a sufficiently good linear
- approximation is found, or the region to which it is being
- applied becomes too small (in which case the original Mapping is
- used directly).
- }
- \sstsynopsis{
- void astRebin$<$X$>$( AstMapping $*$this, double wlim, int ndim\_in,
- const int lbnd\_in[], const int ubnd\_in[],
- const $<$Xtype$>$ in[], const $<$Xtype$>$ in\_var[],
- int spread, const double params[], int flags,
- double tol, int maxpix,
- $<$Xtype$>$ badval, int ndim\_out,
- const int lbnd\_out[], const int ubnd\_out[],
- const int lbnd[], const int ubnd[],
- $<$Xtype$>$ out[], $<$Xtype$>$ out\_var[] );
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to a Mapping, whose forward transformation will be
- used to transform the coordinates of pixels in the input
- grid into the coordinate system of the output grid.
-
- The number of input coordinates used by this Mapping (as
- given by its \htmlref{Nin}{Nin} attribute) should match the number of input
- grid dimensions given by the value of {\tt{"}}ndim\_in{\tt{"}}
- below. Similarly, the number of output coordinates (\htmlref{Nout}{Nout}
- attribute) should match the number of output grid dimensions
- given by {\tt{"}}ndim\_out{\tt{"}}.
- }
- \sstsubsection{
- wlim
- }{
- Gives the required number of input pixel values which must contribute
- to an output pixel in order for the output pixel value to be
- considered valid. If the sum of the input pixel weights contributing
- to an output pixel is less than the supplied
- {\tt{"}}wlim{\tt{"}}
- value, then the output pixel value is returned set to the
- supplied bad value.
- }
- \sstsubsection{
- ndim\_in
- }{
- The number of dimensions in the input grid. This should be at
- least one.
- }
- \sstsubsection{
- lbnd\_in
- }{
- Pointer to an array of integers, with {\tt{"}}ndim\_in{\tt{"}} elements,
- containing the coordinates of the centre of the first pixel
- in the input grid along each dimension.
- }
- \sstsubsection{
- ubnd\_in
- }{
- Pointer to an array of integers, with {\tt{"}}ndim\_in{\tt{"}} elements,
- containing the coordinates of the centre of the last pixel in
- the input grid along each dimension.
-
- Note that {\tt{"}}lbnd\_in{\tt{"}} and {\tt{"}}ubnd\_in{\tt{"}} together define the shape
- and size of the input grid, its extent along a particular
- (j'th) dimension being ubnd\_in[j]-lbnd\_in[j]$+$1 (assuming the
- index {\tt{"}}j{\tt{"}} to be zero-based). They also define
- the input grid's coordinate system, each pixel having unit
- extent along each dimension with integral coordinate values
- at its centre.
- }
- \sstsubsection{
- in
- }{
- Pointer to an array, with one element for each pixel in the
- input grid, containing the input data to be rebined. The
- numerical type of this array should match the 1- or
- 2-character type code appended to the function name (e.g. if
- you are using astRebinF, the type of each array element
- should be {\tt{"}}float{\tt{"}}).
-
- The storage order of data within this array should be such
- that the index of the first grid dimension varies most
- rapidly and that of the final dimension least rapidly
- (i.e. Fortran array indexing is used).
- }
- \sstsubsection{
- in\_var
- }{
- An optional pointer to a second array with the same size and
- type as the {\tt{"}}in{\tt{"}} array. If given, this should contain a set
- of non-negative values which represent estimates of the
- statistical variance associated with each element of the {\tt{"}}in{\tt{"}}
- array. If this array is supplied (together with the
- corresponding {\tt{"}}out\_var{\tt{"}} array), then estimates of the
- variance of the rebined output data will be calculated.
-
- If no input variance estimates are being provided, a NULL
- pointer should be given.
- }
- \sstsubsection{
- spread
- }{
- This parameter specifies the scheme to be used for dividing
- each input data value up amongst the corresponding output pixels.
- It may be used to select
- from a set of pre-defined schemes by supplying one of the
- values described in the {\tt{"}}Pixel Spreading Schemes{\tt{"}}
- section below. If a value of zero is supplied, then the
- default linear spreading scheme is used (equivalent to
- supplying the value AST\_\_LINEAR).
- }
- \sstsubsection{
- params
- }{
- An optional pointer to an array of double which should contain
- any additional parameter values required by the pixel
- spreading scheme. If such parameters are required, this
- will be noted in the {\tt{"}}Pixel Spreading Schemes{\tt{"}}
- section below.
-
- If no additional parameters are required, this array is not
- used and a NULL pointer may be given.
- }
- \sstsubsection{
- flags
- }{
- The bitwise OR of a set of flag values which may be used to
- provide additional control over the rebinning operation. See
- the {\tt{"}}Control Flags{\tt{"}} section below for a description of the
- options available. If no flag values are to be set, a value
- of zero should be given.
- }
- \sstsubsection{
- tol
- }{
- The maximum tolerable geometrical distortion which may be
- introduced as a result of approximating non-linear Mappings
- by a set of piece-wise linear transformations. This should be
- expressed as a displacement in pixels in the output grid's
- coordinate system.
-
- If piece-wise linear approximation is not required, a value
- of zero may be given. This will ensure that the Mapping is
- used without any approximation, but may increase execution
- time.
-
- If the value is too high, discontinuities between the linear
- approximations used in adjacent panel will be higher, and may
- cause the edges of the panel to be visible when viewing the output
- image at high contrast. If this is a problem, reduce the
- tolerance value used.
- }
- \sstsubsection{
- maxpix
- }{
- A value which specifies an initial scale size (in pixels) for
- the adaptive algorithm which approximates non-linear Mappings
- with piece-wise linear transformations. Normally, this should
- be a large value (larger than any dimension of the region of
- the input grid being used). In this case, a first attempt to
- approximate the Mapping by a linear transformation will be
- made over the entire input region.
-
- If a smaller value is used, the input region will first be
- divided into sub-regions whose size does not exceed {\tt{"}}maxpix{\tt{"}}
- pixels in any dimension. Only at this point will attempts at
- approximation commence.
-
- This value may occasionally be useful in preventing false
- convergence of the adaptive algorithm in cases where the
- Mapping appears approximately linear on large scales, but has
- irregularities (e.g. holes) on smaller scales. A value of,
- say, 50 to 100 pixels can also be employed as a safeguard in
- general-purpose software, since the effect on performance is
- minimal.
-
- If too small a value is given, it will have the effect of
- inhibiting linear approximation altogether (equivalent to
- setting {\tt{"}}tol{\tt{"}} to zero). Although this may degrade
- performance, accurate results will still be obtained.
- }
- \sstsubsection{
- badval
- }{
- This argument should have the same type as the elements of
- the {\tt{"}}in{\tt{"}} array. It specifies the value used to flag missing
- data (bad pixels) in the input and output arrays.
-
- If the AST\_\_USEBAD flag is set via the {\tt{"}}flags{\tt{"}} parameter,
- then this value is used to test for bad pixels in the {\tt{"}}in{\tt{"}}
- (and {\tt{"}}in\_var{\tt{"}}) array(s).
-
- In all cases, this value is also used to flag any output
- elements in the {\tt{"}}out{\tt{"}} (and {\tt{"}}out\_var{\tt{"}}) array(s) for which
- rebined values could not be obtained (see the {\tt{"}}Propagation
- of Missing Data{\tt{"}} section below for details of the
- circumstances under which this may occur).
- }
- \sstsubsection{
- ndim\_out
- }{
- The number of dimensions in the output grid. This should be
- at least one. It need not necessarily be equal to the number
- of dimensions in the input grid.
- }
- \sstsubsection{
- lbnd\_out
- }{
- Pointer to an array of integers, with {\tt{"}}ndim\_out{\tt{"}} elements,
- containing the coordinates of the centre of the first pixel
- in the output grid along each dimension.
- }
- \sstsubsection{
- ubnd\_out
- }{
- Pointer to an array of integers, with {\tt{"}}ndim\_out{\tt{"}} elements,
- containing the coordinates of the centre of the last pixel in
- the output grid along each dimension.
-
- Note that {\tt{"}}lbnd\_out{\tt{"}} and {\tt{"}}ubnd\_out{\tt{"}} together define the
- shape, size and coordinate system of the output grid in the
- same way as {\tt{"}}lbnd\_in{\tt{"}} and {\tt{"}}ubnd\_in{\tt{"}} define the shape, size
- and coordinate system of the input grid.
- }
- \sstsubsection{
- lbnd
- }{
- Pointer to an array of integers, with {\tt{"}}ndim\_in{\tt{"}} elements,
- containing the coordinates of the first pixel in the region
- of the input grid which is to be included in the rebined output
- array.
- }
- \sstsubsection{
- ubnd
- }{
- Pointer to an array of integers, with {\tt{"}}ndim\_in{\tt{"}} elements,
- containing the coordinates of the last pixel in the region of
- the input grid which is to be included in the rebined output
- array.
-
- Note that {\tt{"}}lbnd{\tt{"}} and {\tt{"}}ubnd{\tt{"}} together define the shape and
- position of a (hyper-)rectangular region of the input grid
- which is to be included in the rebined output array. This region
- should lie wholly within the extent of the input grid (as
- defined by the {\tt{"}}lbnd\_in{\tt{"}} and {\tt{"}}ubnd\_in{\tt{"}} arrays). Regions of
- the input grid lying outside this region will not be used.
- }
- \sstsubsection{
- out
- }{
- Pointer to an array, with one element for each pixel in the
- output grid, in which the rebined data values will be
- returned. The numerical type of this array should match that
- of the {\tt{"}}in{\tt{"}} array, and the data storage order should be such
- that the index of the first grid dimension varies most
- rapidly and that of the final dimension least rapidly
- (i.e. Fortran array indexing is used).
- }
- \sstsubsection{
- out\_var
- }{
- An optional pointer to an array with the same type and size
- as the {\tt{"}}out{\tt{"}} array. If given, this array will be used to
- return variance estimates for the rebined data values. This
- array will only be used if the {\tt{"}}in\_var{\tt{"}} array has also been
- supplied.
-
- The output variance values will be calculated on the
- assumption that errors on the input data values are
- statistically independent and that their variance estimates
- may simply be summed (with appropriate weighting factors)
- when several input pixels contribute to an output data
- value. If this assumption is not valid, then the output error
- estimates may be biased. In addition, note that the
- statistical errors on neighbouring output data values (as
- well as the estimates of those errors) may often be
- correlated, even if the above assumption about the input data
- is correct, because of the pixel spreading schemes
- employed.
-
- If no output variance estimates are required, a NULL pointer
- should be given.
- }
- }
- \sstdiytopic{
- Data Type Codes
- }{
- To select the appropriate rebinning function, you should
- replace $<$X$>$ in the generic function name astRebin$<$X$>$ with a
- 1- or 2-character data type code, so as to match the numerical
- type $<$Xtype$>$ of the data you are processing, as follows:
- \sstitemlist{
-
- \sstitem
- D: double
-
- \sstitem
- F: float
-
- \sstitem
- I: int
-
- }
- For example, astRebinD would be used to process {\tt{"}}double{\tt{"}}
- data, while astRebinI would be used to process {\tt{"}}int{\tt{"}}
- data, etc.
-
- Note that, unlike
- \htmlref{astResample$<$X$>$}{astResampleX}, the astRebin$<$X$>$
- set of functions does not yet support unsigned integer data types
- or integers of different sizes.
- }
- \sstdiytopic{
- Pixel Spreading Schemes
- }{
- The pixel spreading scheme specifies the Point Spread Function (PSF)
- applied to each input pixel value as it is copied into the output
- array. It can be thought of as the inverse of the sub-pixel
- interpolation schemes used by the
- astResample$<$X$>$
- group of functions. That is, in a sub-pixel interpolation scheme the
- kernel specifies the weight to assign to each input pixel when
- forming the weighted mean of the input pixels, whereas the kernel in a
- pixel spreading scheme specifies the fraction of the input data value
- which is to be assigned to each output pixel. As for interpolation, the
- choice of suitable pixel spreading scheme involves stricking a balance
- between schemes which tend to degrade sharp features in the data by
- smoothing them, and those which attempt to preserve sharp features but
- which often tend to introduce unwanted artifacts. See the
- astResample$<$X$>$
- documentation for further discussion.
-
- The binning algorithm used has the ability to introduce artifacts
- not seen when using a resampling algorithm. Particularly, when
- viewing the output image at high contrast, systems of curves lines
- covering the entire image may be visible. These are caused by a
- beating effect between the input pixel positions and the output pixels
- position, and their nature and strength depend critically upon the
- nature of the Mapping and the spreading function being used. In
- general, the nearest neighbour spreading function demonstrates this
- effect more clearly than the other functions, and for this reason
- should be used with caution.
-
- The following values (defined in the
- {\tt{"}}ast.h{\tt{"}} header file)
- may be assigned to the
- {\tt{"}}spread{\tt{"}}
- parameter. See the
- astResample$<$X$>$
- documentation for details of these schemes including the use of the
- {\tt{"}}fspread{\tt{"}} and {\tt{"}}params{\tt{"}} parameters:
-
- \sstitemlist{
-
- \sstitem
- AST\_\_NEAREST
-
- \sstitem
- AST\_\_LINEAR
-
- \sstitem
- AST\_\_SINC
-
- \sstitem
- AST\_\_SINCSINC
-
- \sstitem
- AST\_\_SINCCOS
-
- \sstitem
- AST\_\_SINCGAUSS
-
- \sstitem
- AST\_\_SOMBCOS
-
- }
- In addition, the following schemes can be used with
- astRebin$<$X$>$ but not with astResample$<$X$>$:
-
- \sstitemlist{
-
- \sstitem
- AST\_\_GAUSS: This scheme uses a kernel of the form exp(-k$*$x$*$x), with k
- a positive constant determined by the full-width at half-maximum (FWHM).
- The FWHM should be supplied in units of output pixels by means of the
- {\tt{"}}params[1]{\tt{"}}
- value and should be at least 0.1. The
- {\tt{"}}params[0]{\tt{"}}
- value should be used to specify at what point the Gaussian is truncated
- to zero. This should be given as a number of output pixels on either
- side of the central output point in each dimension (the nearest integer
- value is used).
- }
- }
- \sstdiytopic{
- Control Flags
- }{
- The following flags are defined in the {\tt{"}}ast.h{\tt{"}} header file and
- may be used to provide additional control over the rebinning
- process. Having selected a set of flags, you should supply the
- bitwise OR of their values via the {\tt{"}}flags{\tt{"}} parameter:
-
- \sstitemlist{
-
- \sstitem
- AST\_\_USEBAD: Indicates that there may be bad pixels in the
- input array(s) which must be recognised by comparing with the
- value given for {\tt{"}}badval{\tt{"}} and propagated to the output array(s).
- If this flag is not set, all input values are treated literally
- and the {\tt{"}}badval{\tt{"}} value is only used for flagging output array
- values.
- }
- }
- \sstdiytopic{
- Propagation of Missing Data
- }{
- Instances of missing data (bad pixels) in the output grid are
- identified by occurrences of the {\tt{"}}badval{\tt{"}} value in the {\tt{"}}out{\tt{"}}
- array. These are produced if the sum of the weights of the
- contributing input pixels is less than
- {\tt{"}}wlim{\tt{"}}.
-
- An input pixel is considered bad (and is consequently ignored) if
- its
- data value is equal to {\tt{"}}badval{\tt{"}} and the AST\_\_USEBAD flag is
- set via the {\tt{"}}flags{\tt{"}} parameter.
-
- In addition, associated output variance estimates (if
- calculated) may be declared bad and flagged with the {\tt{"}}badval{\tt{"}}
- value in the {\tt{"}}out\_var{\tt{"}} array for similar reasons.
- }
-}
-\sstroutine{
- astRebinSeq$<$X$>$\sstlabel{astRebinSeqX}
-}{
- Rebin a region of a sequence of data grids
-}{
- \sstdescription{
- This set of
- functions is identical to \htmlref{astRebin$<$X$>$}{astRebinX}
- except that the rebinned input data is added into the supplied
- output arrays, rather than simply over-writing the contents of the
- output arrays. Thus, by calling this
- function
- repeatedly, a sequence of input arrays can be rebinned and accumulated
- into a single output array, effectively forming a mosaic of the
- input data arrays.
-
- In addition, the weights associated with each output pixel are
- returned. The weight of an output pixel indicates the number of input
- pixels which have been accumulated in that output pixel. If the entire
- value of an input pixel is assigned to a single output pixel, then the
- weight of that output pixel is incremented by one. If some fraction of
- the value of an input pixel is assigned to an output pixel, then the
- weight of that output pixel is incremented by the fraction used.
-
- The start of a new sequence is indicated by specifying the
- AST\_\_REBININIT flag via the
- {\tt{"}}flags{\tt{"}} parameter.
- This causes the supplied arrays to be filled with zeros before the
- rebinned input data is added into them. Subsequenct invocations
- within the same sequence should omit the AST\_\_REBININIT flag.
-
- The last call in a sequence is indicated by specifying the AST\_\_REBINEND
- flag. This causes the output data and variance arrays to be normalised
- before being returned. This normalisation consists of dividing the data
- array by the weights array, and can eliminate artifacts which may be
- introduced into the rebinned data as a consequence of aliasing between
- the input and output grids. However, it can also result in small changes to
- the total pixel value in any given area of the output array. In addition to
- normalisation of the output data values, any output variances are also
- appropriately normalised, and any output data values with weight less
- than
- {\tt{"}}wlim{\tt{"}} are set to {\tt{"}}badval{\tt{"}}.
-
- Output variances can be generated in two ways; by rebinning the supplied
- input variances with appropriate weights, or by finding the spread of
- input data values contributing to each output pixel (see the AST\_\_GENVAR
- and AST\_\_USEVAR flags).
- }
- \sstsynopsis{
- void astRebinSeq$<$X$>$( AstMapping $*$this, double wlim, int ndim\_in,
- const int lbnd\_in[], const int ubnd\_in[],
- const $<$Xtype$>$ in[], const $<$Xtype$>$ in\_var[],
- int spread, const double params[], int flags,
- double tol, int maxpix, $<$Xtype$>$ badval,
- int ndim\_out, const int lbnd\_out[],
- const int ubnd\_out[], const int lbnd[],
- const int ubnd[], $<$Xtype$>$ out[], $<$Xtype$>$ out\_var[],
- double weights[], int $*$nused );
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to a \htmlref{Mapping}{Mapping}, whose forward transformation will be
- used to transform the coordinates of pixels in the input
- grid into the coordinate system of the output grid.
-
- The number of input coordinates used by this Mapping (as
- given by its \htmlref{Nin}{Nin} attribute) should match the number of input
- grid dimensions given by the value of {\tt{"}}ndim\_in{\tt{"}}
- below. Similarly, the number of output coordinates (\htmlref{Nout}{Nout}
- attribute) should match the number of output grid dimensions
- given by {\tt{"}}ndim\_out{\tt{"}}.
- If {\tt{"}}in{\tt{"}} is NULL, the Mapping will not be used, but a valid
- Mapping must still be supplied.
- }
- \sstsubsection{
- wlim
- }{
- This value is only used if the AST\_\_REBINEND flag is specified
- via the
- {\tt{"}}flags{\tt{"}} parameter.
- It gives the required number of input pixel values which must
- contribute to an output pixel (i.e. the output pixel weight) in
- order for the output pixel value to be considered valid. If the sum
- of the input pixel weights contributing to an output pixel is less
- than the supplied
- {\tt{"}}wlim{\tt{"}}
- value, then the output pixel value is returned set to the
- supplied bad value. If the supplied value is less than 1.0E-10
- then 1.0E-10 is used instead.
- }
- \sstsubsection{
- ndim\_in
- }{
- The number of dimensions in the input grid. This should be at
- least one.
- Not used if {\tt{"}}in{\tt{"}} is NULL.
- }
- \sstsubsection{
- lbnd\_in
- }{
- Pointer to an array of integers, with {\tt{"}}ndim\_in{\tt{"}} elements,
- containing the coordinates of the centre of the first pixel
- in the input grid along each dimension.
- Not used if {\tt{"}}in{\tt{"}} is NULL.
- }
- \sstsubsection{
- ubnd\_in
- }{
- Pointer to an array of integers, with {\tt{"}}ndim\_in{\tt{"}} elements,
- containing the coordinates of the centre of the last pixel in
- the input grid along each dimension.
-
- Note that {\tt{"}}lbnd\_in{\tt{"}} and {\tt{"}}ubnd\_in{\tt{"}} together define the shape
- and size of the input grid, its extent along a particular
- (j'th) dimension being ubnd\_in[j]-lbnd\_in[j]$+$1 (assuming the
- index {\tt{"}}j{\tt{"}} to be zero-based). They also define
- the input grid's coordinate system, each pixel having unit
- extent along each dimension with integral coordinate values
- at its centre.
- Not used if {\tt{"}}in{\tt{"}} is NULL.
- }
- \sstsubsection{
- in
- }{
- Pointer to an array, with one element for each pixel in the
- input grid, containing the input data to be rebined. The
- numerical type of this array should match the 1- or
- 2-character type code appended to the function name (e.g. if
- you are using astRebinSeqF, the type of each array element
- should be {\tt{"}}float{\tt{"}}).
-
- The storage order of data within this array should be such
- that the index of the first grid dimension varies most
- rapidly and that of the final dimension least rapidly
- (i.e. Fortran array indexing is used).
- If a NULL pointer is supplied for {\tt{"}}in{\tt{"}}, then no data is added to
- the output arrays, but any initialisation or normalisation
- requested by {\tt{"}}flags{\tt{"}} is still performed.
- }
- \sstsubsection{
- in\_var
- }{
- An optional
- pointer to a
- second array with the same size and type as the
- {\tt{"}}in{\tt{"}}
- array. If given, this should contain a set of non-negative values
- which represent estimates of the statistical variance associated
- with each element of the
- {\tt{"}}in{\tt{"}}
- array.
- If neither the AST\_\_USEVAR nor the AST\_\_VARWGT flag is set, no
- input variance estimates are required and this
- pointer
- will not be used.
- A NULL pointer
- may then be supplied.
- }
- \sstsubsection{
- spread
- }{
- This parameter specifies the scheme to be used for dividing
- each input data value up amongst the corresponding output pixels.
- It may be used to select
- from a set of pre-defined schemes by supplying one of the
- values described in the {\tt{"}}Pixel Spreading Schemes{\tt{"}}
- section in the description of the
- astRebin$<$X$>$ functions.
- If a value of zero is supplied, then the default linear spreading
- scheme is used (equivalent to supplying the value AST\_\_LINEAR).
- Not used if {\tt{"}}in{\tt{"}} is NULL.
- }
- \sstsubsection{
- params
- }{
- An optional pointer to an array of double which should contain
- any additional parameter values required by the pixel
- spreading scheme. If such parameters are required, this
- will be noted in the {\tt{"}}Pixel Spreading Schemes{\tt{"}} section in the
- description of the
- astRebin$<$X$>$ functions.
-
- If no additional parameters are required, this array is not
- used and a NULL pointer may be given.
- Not used if {\tt{"}}in{\tt{"}} is NULL.
- }
- \sstsubsection{
- flags
- }{
- The bitwise OR of a set of flag values which may be used to
- provide additional control over the rebinning operation. See
- the {\tt{"}}Control Flags{\tt{"}} section below for a description of the
- options available. If no flag values are to be set, a value
- of zero should be given.
- }
- \sstsubsection{
- tol
- }{
- The maximum tolerable geometrical distortion which may be
- introduced as a result of approximating non-linear Mappings
- by a set of piece-wise linear transformations. This should be
- expressed as a displacement in pixels in the output grid's
- coordinate system.
-
- If piece-wise linear approximation is not required, a value
- of zero may be given. This will ensure that the Mapping is
- used without any approximation, but may increase execution
- time.
-
- If the value is too high, discontinuities between the linear
- approximations used in adjacent panel will be higher, and may
- cause the edges of the panel to be visible when viewing the output
- image at high contrast. If this is a problem, reduce the
- tolerance value used.
- Not used if {\tt{"}}in{\tt{"}} is NULL.
- }
- \sstsubsection{
- maxpix
- }{
- A value which specifies an initial scale size (in pixels) for
- the adaptive algorithm which approximates non-linear Mappings
- with piece-wise linear transformations. Normally, this should
- be a large value (larger than any dimension of the region of
- the input grid being used). In this case, a first attempt to
- approximate the Mapping by a linear transformation will be
- made over the entire input region.
-
- If a smaller value is used, the input region will first be
- divided into sub-regions whose size does not exceed {\tt{"}}maxpix{\tt{"}}
- pixels in any dimension. Only at this point will attempts at
- approximation commence.
-
- This value may occasionally be useful in preventing false
- convergence of the adaptive algorithm in cases where the
- Mapping appears approximately linear on large scales, but has
- irregularities (e.g. holes) on smaller scales. A value of,
- say, 50 to 100 pixels can also be employed as a safeguard in
- general-purpose software, since the effect on performance is
- minimal.
-
- If too small a value is given, it will have the effect of
- inhibiting linear approximation altogether (equivalent to
- setting {\tt{"}}tol{\tt{"}} to zero). Although this may degrade
- performance, accurate results will still be obtained.
- Not used if {\tt{"}}in{\tt{"}} is NULL.
- }
- \sstsubsection{
- badval
- }{
- This argument should have the same type as the elements of
- the {\tt{"}}in{\tt{"}} array. It specifies the value used to flag missing
- data (bad pixels) in the input and output arrays.
-
- If the AST\_\_USEBAD flag is set via the {\tt{"}}flags{\tt{"}} parameter,
- then this value is used to test for bad pixels in the {\tt{"}}in{\tt{"}}
- (and {\tt{"}}in\_var{\tt{"}}) array(s).
-
- In all cases, this value is also used to flag any output
- elements in the {\tt{"}}out{\tt{"}} (and {\tt{"}}out\_var{\tt{"}}) array(s) for which
- rebined values could not be obtained (see the {\tt{"}}Propagation
- of Missing Data{\tt{"}} section below for details of the
- circumstances under which this may occur).
- }
- \sstsubsection{
- ndim\_out
- }{
- The number of dimensions in the output grid. This should be
- at least one. It need not necessarily be equal to the number
- of dimensions in the input grid.
- }
- \sstsubsection{
- lbnd\_out
- }{
- Pointer to an array of integers, with {\tt{"}}ndim\_out{\tt{"}} elements,
- containing the coordinates of the centre of the first pixel
- in the output grid along each dimension.
- }
- \sstsubsection{
- ubnd\_out
- }{
- Pointer to an array of integers, with {\tt{"}}ndim\_out{\tt{"}} elements,
- containing the coordinates of the centre of the last pixel in
- the output grid along each dimension.
-
- Note that {\tt{"}}lbnd\_out{\tt{"}} and {\tt{"}}ubnd\_out{\tt{"}} together define the
- shape, size and coordinate system of the output grid in the
- same way as {\tt{"}}lbnd\_in{\tt{"}} and {\tt{"}}ubnd\_in{\tt{"}} define the shape, size
- and coordinate system of the input grid.
- }
- \sstsubsection{
- lbnd
- }{
- Pointer to an array of integers, with {\tt{"}}ndim\_in{\tt{"}} elements,
- containing the coordinates of the first pixel in the region
- of the input grid which is to be included in the rebined output
- array.
- Not used if {\tt{"}}in{\tt{"}} is NULL.
- }
- \sstsubsection{
- ubnd
- }{
- Pointer to an array of integers, with {\tt{"}}ndim\_in{\tt{"}} elements,
- containing the coordinates of the last pixel in the region of
- the input grid which is to be included in the rebined output
- array.
-
- Note that {\tt{"}}lbnd{\tt{"}} and {\tt{"}}ubnd{\tt{"}} together define the shape and
- position of a (hyper-)rectangular region of the input grid
- which is to be included in the rebined output array. This region
- should lie wholly within the extent of the input grid (as
- defined by the {\tt{"}}lbnd\_in{\tt{"}} and {\tt{"}}ubnd\_in{\tt{"}} arrays). Regions of
- the input grid lying outside this region will not be used.
- Not used if {\tt{"}}in{\tt{"}} is NULL.
- }
- \sstsubsection{
- out
- }{
- Pointer to an array, with one element for each pixel in the
- output grid. The rebined data values will be added into the
- original contents of this array. The numerical type of this array
- should match that of the
- {\tt{"}}in{\tt{"}} array, and the data storage order should be such
- that the index of the first grid dimension varies most
- rapidly and that of the final dimension least rapidly
- (i.e. Fortran array indexing is used).
- }
- \sstsubsection{
- out\_var
- }{
- A
- pointer to an
- array with the same type and size as the
- {\tt{"}}out{\tt{"}}
- array. This
- pointer
- will only be used if the AST\_\_USEVAR or AST\_\_GENVAR flag is set
- in which case variance estimates for the rebined data values will
- be added into the array. If neither the AST\_\_USEVAR flag nor the
- AST\_\_GENVAR flag is set, no output variance estimates will be
- calculated and this
- pointer
- will not be used. A
- NULL pointer
- may then be supplied.
- }
- \sstsubsection{
- weights
- }{
- Pointer to an array of double,
- with one or two elements for each pixel in the output grid,
- depending on whether or not the AST\_\_GENVAR flag has been supplied
- via the
- {\tt{"}}flags{\tt{"}} parameter.
- If AST\_\_GENVAR has not been specified then the array should have
- one element for each output pixel, and it will be used to
- accumulate the weight associated with each output pixel.
- If AST\_\_GENVAR has been specified then the array should have
- two elements for each output pixel. The first half of the array
- is again used to accumulate the weight associated with each output
- pixel, and the second half is used to accumulate the square of
- the weights. In each half, the data storage order should be such that
- the index of the first grid dimension varies most rapidly and that of
- the final dimension least rapidly
- (i.e. Fortran array indexing is used).
- }
- \sstsubsection{
- nused
- }{
- A pointer to an int containing the
- number of input data values that have been added into the output
- array so far. The supplied value is incremented on exit by the
- number of input values used. The value is initially set to zero
- if the AST\_\_REBININIT flag is set in
- {\tt{"}}flags{\tt{"}}.
- }
- }
- \sstdiytopic{
- Data Type Codes
- }{
- To select the appropriate rebinning function, you should
- replace $<$X$>$ in the generic function name astRebinSeq$<$X$>$ with a
- 1- or 2-character data type code, so as to match the numerical
- type $<$Xtype$>$ of the data you are processing, as follows:
- \sstitemlist{
-
- \sstitem
- D: double
-
- \sstitem
- F: float
-
- \sstitem
- I: int
-
- }
- For example, astRebinSeqD would be used to process {\tt{"}}double{\tt{"}}
- data, while astRebinSeqI would be used to process {\tt{"}}int{\tt{"}}
- data, etc.
-
- Note that, unlike
- \htmlref{astResample$<$X$>$}{astResampleX}, the astRebinSeq$<$X$>$
- set of functions does not yet support unsigned integer data types
- or integers of different sizes.
- }
- \sstdiytopic{
- Control Flags
- }{
- The following flags are defined in the {\tt{"}}ast.h{\tt{"}} header file and
- may be used to provide additional control over the rebinning
- process. Having selected a set of flags, you should supply the
- bitwise OR of their values via the {\tt{"}}flags{\tt{"}} parameter:
-
- \sstitemlist{
-
- \sstitem
- AST\_\_REBININIT: Used to mark the first call in a sequence. It indicates
- that the supplied
- {\tt{"}}out{\tt{"}}, {\tt{"}}out\_var{\tt{"}} and {\tt{"}}weights{\tt{"}}
- arrays should be filled with zeros (thus over-writing any supplied
- values) before adding the rebinned input data into them. This flag
- should be used when rebinning the first input array in a sequence.
-
- \sstitem
- AST\_\_REBINEND: Used to mark the last call in a sequence. It causes
- each value in the
- {\tt{"}}out{\tt{"}} and {\tt{"}}out\_var{\tt{"}}
- arrays to be divided by a normalisation factor before being
- returned. The normalisation factor for each output data value is just the
- corresponding value from the weights array. The normalisation factor
- for each output variance value is the square of the data value
- normalisation factor. It also causes output data values to be set
- bad if the corresponding weight is less than the value supplied for
- parameter {\tt{"}}wlim{\tt{"}}.
- It also causes any temporary values stored in the output variance array
- (see flag AST\_\_GENVAR below) to be converted into usable variance values.
-
- \sstitem
- AST\_\_USEBAD: Indicates that there may be bad pixels in the
- input array(s) which must be recognised by comparing with the
- value given for {\tt{"}}badval{\tt{"}} and propagated to the output array(s).
- If this flag is not set, all input values are treated literally
- and the {\tt{"}}badval{\tt{"}} value is only used for flagging output array
- values.
-
- \sstitem
- AST\_\_USEVAR: Indicates that output variance estimates should be
- created by rebinning the supplied input variance estimates. An
- error will be reported if both this flag and the AST\_\_GENVAR flag
- are supplied.
-
- \sstitem
- AST\_\_GENVAR: Indicates that output variance estimates should be
- created based on the spread of input data values contributing to each
- output pixel. An error will be reported if both this flag and the
- AST\_\_USEVAR flag are supplied. If the AST\_\_GENVAR flag is specified,
- the supplied output variance array is first used as a work array to
- accumulate the temporary values needed to generate the output
- variances. When the sequence ends (as indicated by the
- AST\_\_REBINEND flag), the contents of the output variance array are
- converted into the required variance estimates. If the generation of
- such output variances is required, this flag should be used on every
- invocation of this
- function
- within a sequence, and any supplied input variances will have no effect
- on the output variances (although input variances will still be used
- to weight the input data if the AST\_\_VARWGT flag is also supplied).
-
- \sstitem
- AST\_\_VARWGT: Indicates that the input data should be weighted by
- the reciprocal of the input variances. Otherwise, all input data are
- given equal weight. If this flag is specified, the calculation of the
- output variances (if any) is modified to take account of the
- varying weights assigned to the input data values.
- }
- }
- \sstdiytopic{
- Propagation of Missing Data
- }{
- Instances of missing data (bad pixels) in the output grid are
- identified by occurrences of the {\tt{"}}badval{\tt{"}} value in the {\tt{"}}out{\tt{"}}
- array. These are only produced if the AST\_\_REBINEND flag is
- specified and a pixel has zero weight.
-
- An input pixel is considered bad (and is consequently ignored) if
- its
- data value is equal to {\tt{"}}badval{\tt{"}} and the AST\_\_USEBAD flag is
- set via the {\tt{"}}flags{\tt{"}} parameter.
-
- In addition, associated output variance estimates (if
- calculated) may be declared bad and flagged with the {\tt{"}}badval{\tt{"}}
- value in the {\tt{"}}out\_var{\tt{"}} array for similar reasons.
- }
-}
-\sstroutine{
- astRemapFrame\sstlabel{astRemapFrame}
-}{
- Modify a Frame's relationship to other Frames in a FrameSet
-}{
- \sstdescription{
- This function modifies the relationship (i.e. \htmlref{Mapping}{Mapping}) between a
- specified \htmlref{Frame}{Frame} in a \htmlref{FrameSet}{FrameSet} and the other Frames in that
- FrameSet.
-
- Typically, this might be required if the FrameSet has been used
- to calibrate (say) an image, and that image is re-binned. The
- Frame describing the image will then have undergone a coordinate
- transformation, and this should be communicated to the associated
- FrameSet using this function.
- }
- \sstsynopsis{
- void astRemapFrame( AstFrameSet $*$this, int iframe, AstMapping $*$map )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the FrameSet.
- }
- \sstsubsection{
- iframe
- }{
- The index within the FrameSet of the Frame to be modified.
- This value should lie in the range from 1 to the number of
- Frames in the FrameSet (as given by its \htmlref{Nframe}{Nframe} attribute).
- }
- \sstsubsection{
- map
- }{
- Pointer to a Mapping whose forward transformation converts
- coordinate values from the original coordinate system
- described by the Frame to the new one, and whose inverse
- transformation converts in the opposite direction.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A value of AST\_\_BASE or AST\_\_CURRENT may be given for the
- {\tt{"}}iframe{\tt{"}} parameter to specify the base Frame or the current
- Frame respectively.
-
- \sstitem
- The relationship between the selected Frame and any other
- Frame within the FrameSet will be modified by this function,
- but the relationship between all other Frames in the FrameSet
- remains unchanged.
-
- \sstitem
- The number of input coordinate values accepted by the Mapping
- (its \htmlref{Nin}{Nin} attribute) and the number of output coordinate values
- generated (its \htmlref{Nout}{Nout} attribute) must be equal and must match the
- number of axes in the Frame being modified.
-
- \sstitem
- If a simple change of axis order is required, then the
- \htmlref{astPermAxes}{astPermAxes} function may provide a more straightforward method
- of making the required changes to the FrameSet.
-
- \sstitem
- This function cannot be used to change the number of Frame
- axes. To achieve this, a new Frame must be added to the FrameSet
- (\htmlref{astAddFrame}{astAddFrame}) and the original one removed if necessary
- (\htmlref{astRemoveFrame}{astRemoveFrame}).
- }
- }
-}
-\sstroutine{
- astRemoveFrame\sstlabel{astRemoveFrame}
-}{
- Remove a Frame from a FrameSet
-}{
- \sstdescription{
- This function removes a \htmlref{Frame}{Frame} from a \htmlref{FrameSet}{FrameSet}. All other Frames
- in the FrameSet have their indices re-numbered from one (if
- necessary), but are otherwise unchanged.
- }
- \sstsynopsis{
- void astRemoveFrame( AstFrameSet $*$this, int iframe )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the FrameSet.
- }
- \sstsubsection{
- iframe
- }{
- The index within the FrameSet of the Frame to be removed.
- This value should lie in the range from 1 to the number of
- Frames in the FrameSet (as given by its \htmlref{Nframe}{Nframe} attribute).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Removing a Frame from a FrameSet does not affect the
- relationship between other Frames in the FrameSet, even if they
- originally depended on the Frame being removed.
-
- \sstitem
- The number of Frames in a FrameSet cannot be reduced to zero.
- An error will result if an attempt is made to remove the only
- remaining Frame.
-
- \sstitem
- A value of AST\_\_BASE or AST\_\_CURRENT may be given for the
- {\tt{"}}iframe{\tt{"}} parameter to specify the base Frame or the current
- Frame respectively.
-
- \sstitem
- If a FrameSet's base or current Frame is removed, the \htmlref{Base}{Base} or
- \htmlref{Current}{Current} attribute (respectively) of the FrameSet will have its
- value cleared, so that another Frame will then assume its role
- by default.
-
- \sstitem
- If any other Frame is removed, the base and current Frames
- will remain the same. To ensure this, the Base and/or Current
- attributes of the FrameSet will be changed, if necessary, to
- reflect any change in the indices of these Frames.
- }
- }
-}
-\sstroutine{
- astRemoveRegions\sstlabel{astRemoveRegions}
-}{
- Remove any Regions from a Mapping
-}{
- \sstdescription{
- This function searches the suppliedMapping (which may be a
- compound \htmlref{Mapping}{Mapping} such as a \htmlref{CmpMap}{CmpMap}) for any component Mappings
- that are instances of the AST \htmlref{Region}{Region} class. It then creates a new
- Mapping from which all Regions have been removed. If a Region
- cannot simply be removed (for instance, if it is a component of a
- parallel CmpMap), then it is replaced with an equivalent \htmlref{UnitMap}{UnitMap}
- in the returned Mapping.
- }
- \sstsynopsis{
- AstMapping $*$astRemoveRegions( AstMapping $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the original Mapping.
- }
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{CmpFrame}{CmpFrame}
- }{
- If the supplied Mapping is a CmpFrame, any component Frames that
- are instances of the Region class are replaced by the equivalent
- \htmlref{Frame}{Frame}.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- If the supplied Mapping is a FrameSet, the returned Mapping
- will be a copy of the supplied FrameSet in which Regions have
- been removed from all the inter-Frame Mappings, and any Frames
- which are instances of the Region class are repalced by the
- equivalent Frame.
- }
- \sstsubsection{
- Mapping
- }{
- This function applies to all Mappings.
- }
- \sstsubsection{
- Region
- }{
- If the supplied Mapping is a Region, the returned Mapping will
- be the equivalent Frame.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astRemoveRegions()
- }{
- A new pointer to the (possibly modified) Mapping.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function can safely be applied even to Mappings which
- contain no Regions. If no Regions are found, it
- behaves exactly like \htmlref{astClone}{astClone} and returns a pointer to the
- original Mapping.
-
- \sstitem
- The Mapping returned by this function may not be independent
- of the original (even if some Regions were removed), and
- modifying it may therefore result in indirect modification of
- the original. If a completely independent result is required, a
- copy should be made using \htmlref{astCopy}{astCopy}.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astResample$<$X$>$\sstlabel{astResampleX}
-}{
- Resample a region of a data grid
-}{
- \sstdescription{
- This is a set of functions for resampling gridded data (e.g. an
- image) under the control of a geometrical transformation, which
- is specified by a \htmlref{Mapping}{Mapping}. The functions operate on a pair of
- data grids (input and output), each of which may have any number
- of dimensions. Resampling may be restricted to a specified
- region of the output grid. An associated grid of error estimates
- associated with the input data may also be supplied (in the form
- of variance values), so as to produce error estimates for the
- resampled output data. Propagation of missing data (bad pixels)
- is supported.
-
- You should use a resampling function which matches the numerical
- type of the data you are processing by replacing $<$X$>$ in
- the generic function name astResample$<$X$>$ by an appropriate 1- or
- 2-character type code. For example, if you are resampling data
- with type {\tt{"}}float{\tt{"}}, you should use the function astResampleF (see
- the {\tt{"}}Data Type Codes{\tt{"}} section below for the codes appropriate to
- other numerical types).
-
- Resampling of the grid of input data is performed by
- transforming the coordinates of the centre of each output grid
- element (or pixel) into the coordinate system of the input grid.
- Since the resulting coordinates will not, in general, coincide
- with the centre of an input pixel, sub-pixel interpolation is
- performed between the neighbouring input pixels. This produces a
- resampled value which is then assigned to the output pixel. A
- choice of sub-pixel interpolation schemes is provided, but you
- may also implement your own.
-
- This algorithm samples the input data value, it does not integrate
- it. Thus total data value in the input image will not, in general,
- be conserved. However, an option is provided (see the {\tt{"}}Control Flags{\tt{"}}
- section below) which can produce approximate flux conservation by
- scaling the output values using the ratio of the output pixel size
- to the input pixel size. However, if accurate flux conservation is
- important to you, consder using the
- \htmlref{astRebin$<$X$>$}{astRebinX} or \htmlref{astRebinSeq$<$X$>$}{astRebinSeqX} family of functions
- instead.
-
- Output pixel coordinates are transformed into the coordinate
- system of the input grid using the inverse transformation of the
- Mapping which is supplied. This means that geometrical features
- in the input data are subjected to the Mapping's forward
- transformation as they are transferred from the input to the
- output grid (although the Mapping's forward transformation is
- not explicitly used).
-
- In practice, transforming the coordinates of every pixel of a
- large data grid can be time-consuming, especially if the Mapping
- involves complicated functions, such as sky projections. To
- improve performance, it is therefore possible to approximate
- non-linear Mappings by a set of linear transformations which are
- applied piece-wise to separate sub-regions of the data. This
- approximation process is applied automatically by an adaptive
- algorithm, under control of an accuracy criterion which
- expresses the maximum tolerable geometrical distortion which may
- be introduced, as a fraction of a pixel.
-
- This algorithm first attempts to approximate the Mapping with a
- linear transformation applied over the whole region of the
- output grid which is being used. If this proves to be
- insufficiently accurate, the output region is sub-divided into
- two along its largest dimension and the process is repeated
- within each of the resulting sub-regions. This process of
- sub-division continues until a sufficiently good linear
- approximation is found, or the region to which it is being
- applied becomes too small (in which case the original Mapping is
- used directly).
- }
- \sstsynopsis{
- int astResample$<$X$>$( AstMapping $*$this, int ndim\_in,
- const int lbnd\_in[], const int ubnd\_in[],
- const $<$Xtype$>$ in[], const $<$Xtype$>$ in\_var[],
- int interp, void ($*$ finterp)(),
- const double params[], int flags,
- double tol, int maxpix,
- $<$Xtype$>$ badval, int ndim\_out,
- const int lbnd\_out[], const int ubnd\_out[],
- const int lbnd[], const int ubnd[],
- $<$Xtype$>$ out[], $<$Xtype$>$ out\_var[] );
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to a Mapping, whose inverse transformation will be
- used to transform the coordinates of pixels in the output
- grid into the coordinate system of the input grid. This
- yields the positions which are used to obtain resampled
- values by sub-pixel interpolation within the input grid.
-
- The number of input coordinates used by this Mapping (as
- given by its \htmlref{Nin}{Nin} attribute) should match the number of input
- grid dimensions given by the value of {\tt{"}}ndim\_in{\tt{"}}
- below. Similarly, the number of output coordinates (\htmlref{Nout}{Nout}
- attribute) should match the number of output grid dimensions
- given by {\tt{"}}ndim\_out{\tt{"}}.
- }
- \sstsubsection{
- ndim\_in
- }{
- The number of dimensions in the input grid. This should be at
- least one.
- }
- \sstsubsection{
- lbnd\_in
- }{
- Pointer to an array of integers, with {\tt{"}}ndim\_in{\tt{"}} elements,
- containing the coordinates of the centre of the first pixel
- in the input grid along each dimension.
- }
- \sstsubsection{
- ubnd\_in
- }{
- Pointer to an array of integers, with {\tt{"}}ndim\_in{\tt{"}} elements,
- containing the coordinates of the centre of the last pixel in
- the input grid along each dimension.
-
- Note that {\tt{"}}lbnd\_in{\tt{"}} and {\tt{"}}ubnd\_in{\tt{"}} together define the shape
- and size of the input grid, its extent along a particular
- (j'th) dimension being ubnd\_in[j]-lbnd\_in[j]$+$1 (assuming the
- index {\tt{"}}j{\tt{"}} to be zero-based). They also define
- the input grid's coordinate system, each pixel having unit
- extent along each dimension with integral coordinate values
- at its centre.
- }
- \sstsubsection{
- in
- }{
- Pointer to an array, with one element for each pixel in the
- input grid, containing the input data to be resampled. The
- numerical type of this array should match the 1- or
- 2-character type code appended to the function name (e.g. if
- you are using astResampleF, the type of each array element
- should be {\tt{"}}float{\tt{"}}).
-
- The storage order of data within this array should be such
- that the index of the first grid dimension varies most
- rapidly and that of the final dimension least rapidly
- (i.e. Fortran array indexing is used).
- }
- \sstsubsection{
- in\_var
- }{
- An optional pointer to a second array with the same size and
- type as the {\tt{"}}in{\tt{"}} array. If given, this should contain a set
- of non-negative values which represent estimates of the
- statistical variance associated with each element of the {\tt{"}}in{\tt{"}}
- array. If this array is supplied (together with the
- corresponding {\tt{"}}out\_var{\tt{"}} array), then estimates of the
- variance of the resampled output data will be calculated.
-
- If no input variance estimates are being provided, a NULL
- pointer should be given.
- }
- \sstsubsection{
- interp
- }{
- This parameter specifies the scheme to be used for sub-pixel
- interpolation within the input grid. It may be used to select
- from a set of pre-defined schemes by supplying one of the
- values described in the {\tt{"}}Sub-Pixel Interpolation Schemes{\tt{"}}
- section below. If a value of zero is supplied, then the
- default linear interpolation scheme is used (equivalent to
- supplying the value AST\_\_LINEAR).
-
- Alternatively, you may supply a value which indicates that
- you will provide your own function to perform sub-pixel
- interpolation by means of the {\tt{"}}finterp {\tt{"}} parameter. Again, see
- the {\tt{"}}Sub-Pixel Interpolation Schemes{\tt{"}} section below for
- details.
- }
- \sstsubsection{
- finterp
- }{
- If the value given for the {\tt{"}}interp{\tt{"}} parameter indicates that
- you will provide your own function for sub-pixel
- interpolation, then a pointer to that function should be
- given here. For details of the interface which the function
- should have (several are possible, depending on the value of
- {\tt{"}}interp{\tt{"}}), see the {\tt{"}}Sub-Pixel Interpolation Schemes{\tt{"}} section
- below.
-
- If the {\tt{"}}interp{\tt{"}} parameter has any other value, corresponding
- to one of the pre-defined interpolation schemes, then this
- function will not be used and you may supply a NULL pointer.
- }
- \sstsubsection{
- params
- }{
- An optional pointer to an array of double which should contain
- any additional parameter values required by the sub-pixel
- interpolation scheme. If such parameters are required, this
- will be noted in the {\tt{"}}Sub-Pixel Interpolation Schemes{\tt{"}}
- section below (you may also use this array to pass values
- to your own interpolation function).
-
- If no additional parameters are required, this array is not
- used and a NULL pointer may be given.
- }
- \sstsubsection{
- flags
- }{
- The bitwise OR of a set of flag values which may be used to
- provide additional control over the resampling operation. See
- the {\tt{"}}Control Flags{\tt{"}} section below for a description of the
- options available. If no flag values are to be set, a value
- of zero should be given.
- }
- \sstsubsection{
- tol
- }{
- The maximum tolerable geometrical distortion which may be
- introduced as a result of approximating non-linear Mappings
- by a set of piece-wise linear transformations. This should be
- expressed as a displacement in pixels in the input grid's
- coordinate system.
-
- If piece-wise linear approximation is not required, a value
- of zero may be given. This will ensure that the Mapping is
- used without any approximation, but may increase execution
- time.
- }
- \sstsubsection{
- maxpix
- }{
- A value which specifies an initial scale size (in pixels) for
- the adaptive algorithm which approximates non-linear Mappings
- with piece-wise linear transformations. Normally, this should
- be a large value (larger than any dimension of the region of
- the output grid being used). In this case, a first attempt to
- approximate the Mapping by a linear transformation will be
- made over the entire output region.
-
- If a smaller value is used, the output region will first be
- divided into sub-regions whose size does not exceed {\tt{"}}maxpix{\tt{"}}
- pixels in any dimension. Only at this point will attempts at
- approximation commence.
-
- This value may occasionally be useful in preventing false
- convergence of the adaptive algorithm in cases where the
- Mapping appears approximately linear on large scales, but has
- irregularities (e.g. holes) on smaller scales. A value of,
- say, 50 to 100 pixels can also be employed as a safeguard in
- general-purpose software, since the effect on performance is
- minimal.
-
- If too small a value is given, it will have the effect of
- inhibiting linear approximation altogether (equivalent to
- setting {\tt{"}}tol{\tt{"}} to zero). Although this may degrade
- performance, accurate results will still be obtained.
- }
- \sstsubsection{
- badval
- }{
- This argument should have the same type as the elements of
- the {\tt{"}}in{\tt{"}} array. It specifies the value used to flag missing
- data (bad pixels) in the input and output arrays.
-
- If the AST\_\_USEBAD flag is set via the {\tt{"}}flags{\tt{"}} parameter,
- then this value is used to test for bad pixels in the {\tt{"}}in{\tt{"}}
- (and {\tt{"}}in\_var{\tt{"}}) array(s).
-
- Unless the AST\_\_NOBAD flag is set via the {\tt{"}}flags{\tt{"}} parameter,
- this value is also used to flag any output
- elements in the {\tt{"}}out{\tt{"}} (and {\tt{"}}out\_var{\tt{"}}) array(s) for which
- resampled values could not be obtained (see the {\tt{"}}Propagation
- of Missing Data{\tt{"}} section below for details of the
- circumstances under which this may occur). The astResample$<$X$>$
- function return value indicates whether any such values have
- been produced. If the AST\_\_NOBAD flag is set. then output array
- elements for which no resampled value could be obtained are
- left set to the value they had on entry to this function.
- }
- \sstsubsection{
- ndim\_out
- }{
- The number of dimensions in the output grid. This should be
- at least one. It need not necessarily be equal to the number
- of dimensions in the input grid.
- }
- \sstsubsection{
- lbnd\_out
- }{
- Pointer to an array of integers, with {\tt{"}}ndim\_out{\tt{"}} elements,
- containing the coordinates of the centre of the first pixel
- in the output grid along each dimension.
- }
- \sstsubsection{
- ubnd\_out
- }{
- Pointer to an array of integers, with {\tt{"}}ndim\_out{\tt{"}} elements,
- containing the coordinates of the centre of the last pixel in
- the output grid along each dimension.
-
- Note that {\tt{"}}lbnd\_out{\tt{"}} and {\tt{"}}ubnd\_out{\tt{"}} together define the
- shape, size and coordinate system of the output grid in the
- same way as {\tt{"}}lbnd\_in{\tt{"}} and {\tt{"}}ubnd\_in{\tt{"}} define the shape, size
- and coordinate system of the input grid.
- }
- \sstsubsection{
- lbnd
- }{
- Pointer to an array of integers, with {\tt{"}}ndim\_out{\tt{"}} elements,
- containing the coordinates of the first pixel in the region
- of the output grid for which a resampled value is to be
- calculated.
- }
- \sstsubsection{
- ubnd
- }{
- Pointer to an array of integers, with {\tt{"}}ndim\_out{\tt{"}} elements,
- containing the coordinates of the last pixel in the region of
- the output grid for which a resampled value is to be
- calculated.
-
- Note that {\tt{"}}lbnd{\tt{"}} and {\tt{"}}ubnd{\tt{"}} together define the shape and
- position of a (hyper-)rectangular region of the output grid
- for which resampled values should be produced. This region
- should lie wholly within the extent of the output grid (as
- defined by the {\tt{"}}lbnd\_out{\tt{"}} and {\tt{"}}ubnd\_out{\tt{"}} arrays). Regions of
- the output grid lying outside this region will not be
- modified.
- }
- \sstsubsection{
- out
- }{
- Pointer to an array, with one element for each pixel in the
- output grid, into which the resampled data values will be
- returned. The numerical type of this array should match that
- of the {\tt{"}}in{\tt{"}} array, and the data storage order should be such
- that the index of the first grid dimension varies most
- rapidly and that of the final dimension least rapidly
- (i.e. Fortran array indexing is used).
- }
- \sstsubsection{
- out\_var
- }{
- An optional pointer to an array with the same type and size
- as the {\tt{"}}out{\tt{"}} array. If given, this array will be used to
- return variance estimates for the resampled data values. This
- array will only be used if the {\tt{"}}in\_var{\tt{"}} array has also been
- supplied.
-
- The output variance values will be calculated on the
- assumption that errors on the input data values are
- statistically independent and that their variance estimates
- may simply be summed (with appropriate weighting factors)
- when several input pixels contribute to an output data
- value. If this assumption is not valid, then the output error
- estimates may be biased. In addition, note that the
- statistical errors on neighbouring output data values (as
- well as the estimates of those errors) may often be
- correlated, even if the above assumption about the input data
- is correct, because of the sub-pixel interpolation schemes
- employed.
-
- If no output variance estimates are required, a NULL pointer
- should be given.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astResample$<$X$>$()
- }{
- The number of output pixels for which no valid resampled value
- could be obtained. Thus, in the absence of any error, a returned
- value of zero indicates that all the required output pixels
- received valid resampled data values (and variances). See the
- {\tt{"}}badval{\tt{"}} and {\tt{"}}flags{\tt{"}} parameters.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A value of zero will be returned if this function is invoked
- with the global error status set, or if it should fail for any
- reason.
- }
- }
- \sstdiytopic{
- Data Type Codes
- }{
- To select the appropriate resampling function, you should
- replace $<$X$>$ in the generic function name astResample$<$X$>$ with a
- 1- or 2-character data type code, so as to match the numerical
- type $<$Xtype$>$ of the data you are processing, as follows:
- \sstitemlist{
-
- \sstitem
- D: double
-
- \sstitem
- F: float
-
- \sstitem
- L: long int
-
- \sstitem
- UL: unsigned long int
-
- \sstitem
- I: int
-
- \sstitem
- UI: unsigned int
-
- \sstitem
- S: short int
-
- \sstitem
- US: unsigned short int
-
- \sstitem
- B: byte (signed char)
-
- \sstitem
- UB: unsigned byte (unsigned char)
-
- }
- For example, astResampleD would be used to process {\tt{"}}double{\tt{"}}
- data, while astResampleS would be used to process {\tt{"}}short int{\tt{"}}
- data, etc.
- }
- \sstdiytopic{
- Sub-Pixel Interpolation Schemes
- }{
- There is no such thing as a perfect sub-pixel interpolation
- scheme and, in practice, all resampling will result in some
- degradation of gridded data. A range of schemes is therefore
- provided, from which you can choose the one which best suits
- your needs.
-
- In general, a balance must be struck between schemes which tend
- to degrade sharp features in the data by smoothing them, and
- those which attempt to preserve sharp features. The latter will
- often tend to introduce unwanted oscillations, typically visible
- as {\tt{"}}ringing{\tt{"}} around sharp features and edges, especially if the
- data are under-sampled (i.e. if the sharpest features are less
- than about two pixels across). In practice, a good interpolation
- scheme is likely to be a compromise and may exhibit some aspects
- of both these features.
-
- For under-sampled data, some interpolation schemes may appear to
- preserve data resolution because they transform single input
- pixels into single output pixels, rather than spreading their
- data between several output pixels. While this may look
- better cosmetically, it can result in a geometrical shift of
- sharp features in the data. You should beware of this if you
- plan to use such features (e.g.) for image alignment.
-
- The following are two easy-to-use sub-pixel interpolation
- schemes which are generally applicable. They are selected by
- supplying the appropriate value (defined in the {\tt{"}}ast.h{\tt{"}} header
- file) via the {\tt{"}}interp{\tt{"}} parameter. In these cases, the {\tt{"}}finterp{\tt{"}}
- and {\tt{"}}params{\tt{"}} parameters are not used:
-
- \sstitemlist{
-
- \sstitem
- AST\_\_NEAREST: This is the simplest possible scheme, in which
- the value of the input pixel with the nearest centre to the
- interpolation point is used. This is very quick to execute and
- will preserve single-pixel features in the data, but may
- displace them by up to half their width along each dimension. It
- often gives a good cosmetic result, so is useful for quick-look
- processing, but is unsuitable if accurate geometrical
- transformation is required.
-
- \sstitem
- AST\_\_LINEAR: This is the default scheme, which uses linear
- interpolation between the nearest neighbouring pixels in the
- input grid (there are two neighbours in one dimension, four
- neighbours in two dimensions, eight in three dimensions,
- etc.). It is superior to the nearest-pixel scheme (above) in not
- displacing features in the data, yet it still executes fairly
- rapidly. It is generally a safe choice if you do not have any
- particular reason to favour another scheme, since it cannot
- introduce oscillations. However, it does introduce some spatial
- smoothing which varies according to the distance of the
- interpolation point from the neighbouring pixels. This can
- degrade the shape of sharp features in the data in a
- position-dependent way. It may also show in the output variance
- grid (if used) as a pattern of stripes or fringes.
-
- }
- An alternative set of interpolation schemes is based on forming
- the interpolated value from the weighted sum of a set of
- surrounding pixel values (not necessarily just the nearest
- neighbours). This approach has its origins in the theory of
- digital filtering, in which interpolated values are obtained by
- conceptually passing the sampled data (represented by a grid of
- delta functions) through a linear filter which implements a
- convolution. Because the convolution kernel is continuous, the
- convolution yields a continuous function which may then be
- evaluated at fractional pixel positions. The (possibly
- multi-dimensional) kernel is usually regarded as {\tt{"}}separable{\tt{"}} and
- formed from the product of a set of identical 1-dimensional
- kernel functions, evaluated along each dimension. Different
- interpolation schemes are then distinguished by the choice of
- this 1-dimensional interpolation kernel. The number of
- surrounding pixels which contribute to the result may also be
- varied.
-
- From a practical standpoint, it is useful to divide the weighted
- sum of pixel values by the sum of the weights when determining
- the interpolated value. Strictly, this means that a true
- convolution is no longer being performed. However, the
- distinction is rarely important in practice because (for
- slightly subtle reasons) the sum of weights is always
- approximately constant for good interpolation kernels. The
- advantage of this technique, which is used here, is that it can
- easily accommodate missing data and tends to minimise unwanted
- oscillations at the edges of the data grid.
-
- In the following schemes, which are based on a 1-dimensional
- interpolation kernel, the first element of the {\tt{"}}params{\tt{"}} array
- should be used to specify how many pixels are to contribute to the
- interpolated result on either side of the interpolation point in
- each dimension (the nearest integer value is used). Execution time
- increases rapidly with this number. Typically, a value of 2 is
- appropriate and the minimum value used will be 1 (i.e. two pixels
- altogether, one on either side of the interpolation point).
- A value of zero or less may be given for {\tt{"}}params[0]{\tt{"}}
- to indicate that a suitable number of pixels should be calculated
- automatically.
-
- In each of these cases, the {\tt{"}}finterp{\tt{"}} parameter is not used:
-
- \sstitemlist{
-
- \sstitem
- AST\_\_SINC: This scheme uses a sinc(pi$*$x) kernel, where x is the
- pixel offset from the interpolation point and sinc(z)=sin(z)/z. This
- sometimes features as an {\tt{"}}optimal{\tt{"}} interpolation kernel in books on
- image processing. Its supposed optimality depends on the assumption
- that the data are band-limited (i.e. have no spatial frequencies above
- a certain value) and are adequately sampled. In practice, astronomical
- data rarely meet these requirements. In addition, high spatial
- frequencies are often present due (e.g.) to image defects and cosmic
- ray events. Consequently, substantial ringing can be experienced with
- this kernel. The kernel also decays slowly with distance, so that
- many surrounding pixels are required, leading to poor performance.
- Abruptly truncating it, by using only a few neighbouring pixels,
- improves performance and may reduce ringing (if {\tt{"}}params[0]{\tt{"}} is set to
- zero, then only two pixels will be used on either side). However, a
- more gradual truncation, as implemented by other kernels, is generally
- to be preferred. This kernel is provided mainly so that you can
- convince yourself not to use it!
-
- \sstitem
- AST\_\_SINCSINC: This scheme uses an improved kernel, of the form
- sinc(pi$*$x).sinc(k$*$pi$*$x), with k a constant, out to the point where
- sinc(k$*$pi$*$x) goes to zero, and zero beyond. The second sinc() factor
- provides an {\tt{"}}envelope{\tt{"}} which gradually rolls off the normal sinc(pi$*$x)
- kernel at large offsets. The width of this envelope is specified by
- giving the number of pixels offset at which it goes to zero by means
- of the {\tt{"}}params[1]{\tt{"}} value, which should be at least 1.0 (in addition,
- setting {\tt{"}}params[0]{\tt{"}} to zero will select the number of contributing
- pixels so as to utilise the full width of the kernel, out to where it
- reaches zero). The case given by {\tt{"}}params[0]=2, params[1]=2{\tt{"}} is typically
- a good choice and is sometimes known as the Lanczos kernel. This is a
- valuable general-purpose interpolation scheme, intermediate in its
- visual effect on images between the AST\_\_NEAREST and AST\_\_LINEAR
- schemes. Although the kernel is slightly oscillatory, ringing is
- adequately suppressed if the data are well sampled.
-
- \sstitem
- AST\_\_SINCCOS: This scheme uses a kernel of the form
- sinc(pi$*$x).cos(k$*$pi$*$x), with k a constant, out to the point where
- cos(k$*$pi$*$x) goes to zero, and zero beyond. As above, the cos() factor
- provides an envelope which gradually rolls off the sinc() kernel
- at large offsets. The width of this envelope is specified by giving
- the number of pixels offset at which it goes to zero by means
- of the {\tt{"}}params[1]{\tt{"}} value, which should be at least 1.0 (in addition,
- setting {\tt{"}}params[0]{\tt{"}} to zero will select the number of contributing
- pixels so as to utilise the full width of the kernel, out to where it
- reaches zero). This scheme gives similar results to the
- AST\_\_SINCSINC scheme, which it resembles.
-
- \sstitem
- AST\_\_SINCGAUSS: This scheme uses a kernel of the form
- sinc(pi$*$x).exp(-k$*$x$*$x), with k a positive constant. Here, the sinc()
- kernel is rolled off using a Gaussian envelope which is specified by
- giving its full-width at half-maximum (FWHM) by means of the {\tt{"}}params[1]{\tt{"}}
- value, which should be at least 0.1 (in addition, setting {\tt{"}}params[0]{\tt{"}}
- to zero will select the number of contributing pixels so as to utilise
- the width of the kernel out to where the envelope declines to 1\% of its
- maximum value). On astronomical images and spectra, good results are
- often obtained by approximately matching the FWHM of the
- envelope function, given by {\tt{"}}params[1]{\tt{"}}, to the point spread function
- of the input data. However, there does not seem to be any theoretical
- reason for this.
-
- \sstitem
- AST\_\_SOMB: This scheme uses a somb(pi$*$x) kernel (a {\tt{"}}sombrero{\tt{"}}
- function), where x is the pixel offset from the interpolation point
- and somb(z)=2$*$J1(z)/z (J1 is a Bessel function of the first kind of
- order 1). It is similar to the AST\_\_SINC kernel, and has the same
- parameter usage.
-
- \sstitem
- AST\_\_SOMBCOS: This scheme uses a kernel of the form
- somb(pi$*$x).cos(k$*$pi$*$x), with k a constant, out to the point where
- cos(k$*$pi$*$x) goes to zero, and zero beyond. It is similar to the
- AST\_\_SINCCOS kernel, and has the same parameter usage.
-
- }
- In addition, the following schemes are provided which are not based
- on a 1-dimensional kernel:
-
- \sstitemlist{
-
- \sstitem
- AST\_\_BLOCKAVE: This scheme simply takes an average of all the
- pixels on the input grid in a cube centred on the interpolation
- point. The number of pixels in the cube is determined by the
- value of the first element of the {\tt{"}}params{\tt{"}} array, which gives
- the number of pixels in each dimension on either side of the
- central point. Hence a block of (2 $*$ params[0])$\wedge$ndim\_in
- pixels in the input grid will be examined to determine the
- value of the output pixel. If the variance is not being used
- (var\_in or var\_out = NULL) then all valid pixels in this cube
- will be averaged in to the result with equal weight.
- If variances are being used, then each input pixel will be
- weighted proportionally to the reciprocal of its variance; any
- pixel without a valid variance will be discarded. This scheme
- is suitable where the output grid is much coarser than the
- input grid; if the ratio of pixel sizes is R then a suitable
- value of params[0] may be R/2.
-
- }
- Finally, supplying the following values for {\tt{"}}interp{\tt{"}} allows you
- to implement your own sub-pixel interpolation scheme by means of
- your own function. You should supply a pointer to this function
- via the {\tt{"}}finterp{\tt{"}} parameter:
-
- \sstitemlist{
-
- \sstitem
- AST\_\_UKERN1: In this scheme, you supply a function to evaluate
- your own 1-dimensional interpolation kernel, which is then used
- to perform sub-pixel interpolation (as described above). The
- function you supply should have the same interface as the
- fictitious \htmlref{astUkern1}{astUkern1} function (q.v.). In addition, a value
- should be given via {\tt{"}}params[0]{\tt{"}} to specify the number of
- neighbouring pixels which are to contribute to each interpolated
- value (in the same way as for the pre-defined interpolation
- schemes described above). Other elements of the {\tt{"}}params{\tt{"}} array
- are available to pass values to your interpolation function.
-
- \sstitem
- AST\_\_UINTERP: This is a completely general scheme, in which
- your interpolation function has access to all of the input
- data. This allows you to implement any interpolation algorithm
- you choose, which could (for example) be non-linear, or
- adaptive. In this case, the astResample$<$X$>$ functions play no
- role in the sub-pixel interpolation process and simply handle
- the geometrical transformation of coordinates and other
- housekeeping. The function you supply should have the same
- interface as the fictitious \htmlref{astUinterp}{astUinterp} function (q.v.). In this
- case, the {\tt{"}}params{\tt{"}} parameter is not used by astResample$<$X$>$, but
- is available to pass values to your interpolation function.
- }
- }
- \sstdiytopic{
- Control Flags
- }{
- The following flags are defined in the {\tt{"}}ast.h{\tt{"}} header file and
- may be used to provide additional control over the resampling
- process. Having selected a set of flags, you should supply the
- bitwise OR of their values via the {\tt{"}}flags{\tt{"}} parameter:
-
- \sstitemlist{
-
- \sstitem
- AST\_\_NOBAD: Indicates that any output array elements for which no
- resampled value could be obtained should be left set to the value
- they had on entry to this function. If this flag is not supplied,
- such output array elements are set to the value supplied for
- parameter {\tt{"}}badval{\tt{"}}. Note, this flag cannot be used in conjunction
- with the AST\_\_CONSERVEFLUX flag (an error will be reported if both
- flags are specified).
-
- \sstitem
- AST\_\_URESAMP1, 2, 3 \& 4: A set of four flags which are
- reserved for your own use. They may be used to pass private
- information to any sub-pixel interpolation function which you
- implement yourself. They are ignored by all the pre-defined
- interpolation schemes.
-
- \sstitem
- AST\_\_USEBAD: Indicates that there may be bad pixels in the
- input array(s) which must be recognised by comparing with the
- value given for {\tt{"}}badval{\tt{"}} and propagated to the output array(s).
- If this flag is not set, all input values are treated literally
- and the {\tt{"}}badval{\tt{"}} value is only used for flagging output array
- values.
-
- \sstitem
- AST\_\_CONSERVEFLUX: Indicates that the output pixel values should
- be scaled in such a way as to preserve (approximately) the total data
- value in a feature on the sky. Without this flag, each output pixel
- value represents an instantaneous sample of the input data values at
- the corresponding input position. This is appropriate if the input
- data represents the spatial density of some quantity (e.g. surface
- brightness in Janskys per square arc-second) because the output
- pixel values will have the same normalisation and units as the
- input pixel values. However, if the input data values represent
- flux (or some other physical quantity) per pixel, then the
- AST\_\_CONSERVEFLUX flag could be used. This causes each output
- pixel value to be scaled by the ratio of the output pixel size to
- the input pixel size.
-
- }
- This flag can only be used if the Mapping is succesfully approximated
- by one or more linear transformations. Thus an error will be reported
- if it used when the
- {\tt{"}}tol{\tt{"}} parameter
- is set to zero (which stops the use of linear approximations), or
- if the Mapping is too non-linear to be approximated by a piece-wise
- linear transformation. The ratio of output to input pixel size is
- evaluated once for each panel of the piece-wise linear approximation to
- the Mapping, and is assumed to be constant for all output pixels in the
- panel. The scaling factors for adjacent panels will in general
- differ slightly, and so the joints between panels may be visible when
- viewing the output image at high contrast. If this is a problem,
- reduce the value of the
- {\tt{"}}tol{\tt{"}} parameter
- until the difference between adjacent panels is sufficiently small
- to be insignificant.
-
- Note, this flag cannot be used in conjunction with the AST\_\_NOBAD
- flag (an error will be reported if both flags are specified).
-
- Flux conservation can only be approximate when using a resampling
- algorithm. For accurate flux conservation use the
- astRebin$<$X$>$ or astRebinSeq$<$X$>$ function
- instead.
- }
- \sstdiytopic{
- Propagation of Missing Data
- }{
- Unless the AST\_\_NOBAD flag is specified, instances of missing data
- (bad pixels) in the output grid are
- identified by occurrences of the {\tt{"}}badval{\tt{"}} value in the {\tt{"}}out{\tt{"}}
- array. These may be produced if any of the following happen:
-
- \sstitemlist{
-
- \sstitem
- The input position (the transformed position of the output
- pixel's centre) lies outside the boundary of the grid of input
- pixels.
-
- \sstitem
- The input position lies inside the boundary of a bad input
- pixel. In this context, an input pixel is considered bad if its
- data value is equal to {\tt{"}}badval{\tt{"}} and the AST\_\_USEBAD flag is
- set via the {\tt{"}}flags{\tt{"}} parameter.
- (Positions which have half-integral coordinate values, and
- therefore lie on a pixel boundary, are regarded as lying within
- the pixel with the larger, i.e. more positive, index.)
-
- \sstitem
- The set of neighbouring input pixels (excluding those which
- are bad) is unsuitable for calculating an interpolated
- value. Whether this is true may depend on the sub-pixel
- interpolation scheme in use.
-
- \sstitem
- The interpolated value lies outside the range which can be
- represented using the data type of the {\tt{"}}out{\tt{"}} array.
-
- }
- In addition, associated output variance estimates (if
- calculated) may be declared bad and flagged with the {\tt{"}}badval{\tt{"}}
- value in the {\tt{"}}out\_var{\tt{"}} array under any of the following
- circumstances:
-
- \sstitemlist{
-
- \sstitem
- The associated resampled data value (in the {\tt{"}}out{\tt{"}} array) is bad.
-
- \sstitem
- The set of neighbouring input pixels which contributed to the
- output data value do not all have valid variance estimates
- associated with them. In this context, an input variance
- estimate may be regarded as bad either because it has the value
- {\tt{"}}badval{\tt{"}} (and the AST\_\_USEBAD flag is set), or because it is
- negative.
-
- \sstitem
- The set of neighbouring input pixels for which valid variance
- values are available is unsuitable for calculating an overall
- variance value. Whether this is true may depend on the sub-pixel
- interpolation scheme in use.
-
- \sstitem
- The variance value lies outside the range which can be
- represented using the data type of the {\tt{"}}out\_var{\tt{"}} array.
-
- }
- If the AST\_\_NOBAD flag is specified via
- parameter {\tt{"}}flags{\tt{"}},
- then output array elements that would otherwise be set to
- {\tt{"}}badval{\tt{"}}
- are instead left holding the value they had on entry to this
- function. The number of such array elements is returned as
- the function value.
- }
-}
-\sstroutine{
- astResolve\sstlabel{astResolve}
-}{
- Resolve a vector into two orthogonal components
-}{
- \sstdescription{
- This function resolves a vector into two perpendicular components.
- The vector from point 1 to point 2 is used as the basis vector.
- The vector from point 1 to point 3 is resolved into components
- parallel and perpendicular to this basis vector. The lengths of the
- two components are returned, together with the position of closest
- aproach of the basis vector to point 3.
- }
- \sstsynopsis{
- void astResolve( AstFrame $*$this, const double point1[],
- const double point2[], const double point3[],
- double point4[], double $*$d1, double $*$d2 );
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the \htmlref{Frame}{Frame}.
- }
- \sstsubsection{
- point1
- }{
- An array of double, with one element for each Frame axis
- (\htmlref{Naxes}{Naxes} attribute). This marks the start of the basis vector,
- and of the vector to be resolved.
- }
- \sstsubsection{
- point2
- }{
- An array of double, with one element for each Frame axis
- (Naxes attribute). This marks the end of the basis vector.
- }
- \sstsubsection{
- point3
- }{
- An array of double, with one element for each Frame axis
- (Naxes attribute). This marks the end of the vector to be
- resolved.
- }
- \sstsubsection{
- point4
- }{
- An array of double, with one element for each Frame axis
- in which the coordinates of the point of closest approach of the
- basis vector to point 3 will be returned.
- }
- \sstsubsection{
- d1
- }{
- The address of a location at which to return the distance from
- point 1 to point 4 (that is, the length of the component parallel
- to the basis vector). Positive values are in the same sense as
- movement from point 1 to point 2.
- }
- \sstsubsection{
- d2
- }{
- The address of a location at which to return the distance from
- point 4 to point 3 (that is, the length of the component
- perpendicular to the basis vector). The value is always positive.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Each vector used in this function is the path of
- shortest distance between two points, as defined by the
- \htmlref{astDistance}{astDistance} function.
-
- \sstitem
- This function will return {\tt{"}}bad{\tt{"}} coordinate values (AST\_\_BAD)
- if any of the input coordinates has this value, or if the required
- output values are undefined.
- }
- }
-}
-\sstroutine{
- astRetainFits\sstlabel{astRetainFits}
-}{
- Indicate that the current card in a FitsChan should be retained
-}{
- \sstdescription{
- This function
- stores a flag with the current card in the \htmlref{FitsChan}{FitsChan} indicating that
- the card should not be removed from the FitsChan when an \htmlref{Object}{Object} is
- read from the FitsChan using
- \htmlref{astRead}{astRead}.
-
- Cards that have not been flagged in this way are removed when a
- read operation completes succesfully, but only if the card was used
- in the process of creating the returned AST Object. Any cards that
- are irrelevant to the creation of the AST Object are retained whether
- or not they are flagged.
- }
- \sstsynopsis{
- void astRetainFits( AstFitsChan $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the FitsChan.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function returns without action if the FitsChan is
- initially positioned at the {\tt{"}}end-of-file{\tt{"}} (i.e. if the \htmlref{Card}{Card}
- attribute exceeds the number of cards in the FitsChan).
-
- \sstitem
- The current card is not changed by this function.
- }
- }
-}
-\sstroutine{
- astSame\sstlabel{astSame}
-}{
- Test if two AST pointers refer to the same Object
-}{
- \sstdescription{
- This function returns a boolean result (0 or 1) to indicate
- whether two pointers refer to the same \htmlref{Object}{Object}.
- }
- \sstsynopsis{
- int astSame( AstObject $*$this, AstObject $*$that )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the first Object.
- }
- \sstsubsection{
- that
- }{
- Pointer to the second Object.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This function applies to all Objects.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astSame()
- }{
- One if the two pointers refer to the same Object, otherwise zero.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Two independent Objects that happen to be identical are not
- considered to be the same Object by this function.
-
- \sstitem
- A value of zero will be returned if this function is invoked
- with the AST error status set, or if it should fail for any reason.
- }
- }
-}
-\sstroutine{
- astSelectorMap\sstlabel{astSelectorMap}
-}{
- Create a SelectorMap
-}{
- \sstdescription{
- This function creates a new \htmlref{SelectorMap}{SelectorMap} and optionally initialises
- its attributes.
-
- A SelectorMap is a \htmlref{Mapping}{Mapping} that identifies which \htmlref{Region}{Region} contains
- a given input position.
-
- A SelectorMap encapsulates a number of Regions that all have the same
- number of axes and represent the same coordinate \htmlref{Frame}{Frame}. The number of
- inputs (\htmlref{Nin}{Nin} attribute) of the SelectorMap equals the number of axes
- spanned by one of the encapsulated Region. All SelectorMaps have only
- a single output. SelectorMaps do not define an inverse transformation.
-
- For each input position, the forward transformation of a SelectorMap
- searches through the encapsulated Regions (in the order supplied when
- the SelectorMap was created) until a Region is found which contains
- the input position. The index associated with this Region is
- returned as the SelectorMap output value (the index value is the
- position of the Region within the list of Regions supplied when the
- SelectorMap was created, starting at 1 for the first Region). If an
- input position is not contained within any Region, a value of zero is
- returned by the forward transformation.
-
- If a compound Mapping contains a SelectorMap in series with its own
- inverse, the combination of the two adjacent SelectorMaps will be
- replaced by a \htmlref{UnitMap}{UnitMap} when the compound Mapping is simplified using
- \htmlref{astSimplify}{astSimplify}.
-
- In practice, SelectorMaps are often used in conjunction with SwitchMaps.
- }
- \sstsynopsis{
- AstSelectorMap $*$astSelectorMap( int nreg, AstRegion $*$regs[],
- double badval, const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- nreg
- }{
- The number of supplied Regions.
- }
- \sstsubsection{
- regs
- }{
- An array of pointers to the Regions. All the supplied Regions must
- relate to the same coordinate Frame. The number of axes in this
- coordinate Frame defines the number of inputs for the SelectorMap.
- }
- \sstsubsection{
- badval
- }{
- The value to be returned by the forward transformation of the
- SelectorMap for any input positions that have a bad (AST\_\_BAD)
- value on any axis.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new SelectorMap. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astSelectorMap()
- }{
- A pointer to the new SelectorMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Deep copies are taken of the supplied Regions. This means that
- any subsequent changes made to the component Regions using the
- supplied pointers will have no effect on the SelectorMap.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astSet\sstlabel{astSet}
-}{
- Set attribute values for an Object
-}{
- \sstdescription{
- This function assigns a set of attribute values to an \htmlref{Object}{Object},
- over-riding any previous values. The attributes and their new
- values are specified via a character string, which should
- contain a comma-separated list of the form:
-
- {\tt{"}}attribute\_1 = value\_1, attribute\_2 = value\_2, ... {\tt{"}}
-
- where {\tt{"}}attribute\_n{\tt{"}} specifies an attribute name, and the value
- to the right of each {\tt{"}}={\tt{"}} sign should be a suitable textual
- representation of the value to be assigned. This value will be
- interpreted according to the attribute's data type.
-
- The string supplied may also contain {\tt{"}}printf{\tt{"}}-style format
- specifiers, identified by {\tt{"}}\%{\tt{"}} signs in the usual way. If
- present, these will be substituted by values supplied as
- additional optional arguments (using the normal {\tt{"}}printf{\tt{"}} rules)
- before the string is used.
- }
- \sstsynopsis{
- void astSet( AstObject $*$this, const char $*$settings, ... )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Object.
- }
- \sstsubsection{
- settings
- }{
- Pointer to a null-terminated character string containing a
- comma-separated list of attribute settings in the form described
- above.
- }
- \sstsubsection{
- ...
- }{
- Optional additional arguments which supply values to be
- substituted for any {\tt{"}}printf{\tt{"}}-style format specifiers that
- appear in the {\tt{"}}settings{\tt{"}} string.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This function applies to all Objects.
- }
- }
- \sstexamples{
- \sstexamplesubsection{
- astSet( map, {\tt{"}}\htmlref{Report}{Report} = 1, \htmlref{Zoom}{Zoom} = 25.0{\tt{"}} );
- }{
- Sets the Report attribute for Object {\tt{"}}map{\tt{"}} to the value 1 and
- the Zoom attribute to 25.0.
- }
- \sstexamplesubsection{
- astSet( frame, {\tt{"}}Label( \%d ) =Offset along axis \%d{\tt{"}}, axis, axis );
- }{
- Sets the \htmlref{Label(axis)}{Labelaxis} attribute for Object {\tt{"}}frame{\tt{"}} to a
- suitable string, where the axis number is obtained from
- {\tt{"}}axis{\tt{"}}, a variable of type int.
- }
- \sstexamplesubsection{
- astSet( frame, {\tt{"}}\htmlref{Title}{Title} =\%s{\tt{"}}, mystring );
- }{
- Sets the Title attribute for Object {\tt{"}}frame{\tt{"}} to the contents of
- the string {\tt{"}}mystring{\tt{"}}.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Attribute names are not case sensitive and may be surrounded
- by white space.
-
- \sstitem
- White space may also surround attribute values, where it will
- generally be ignored (except for string-valued attributes where
- it is significant and forms part of the value to be assigned).
-
- \sstitem
- It is not possible to include a comma directly in the value
- assigned to an attribute via the {\tt{"}}settings{\tt{"}} string. To achieve
- this, you should use {\tt{"}}\%s{\tt{"}} format and supply the value as a
- separate additional argument to astSet (or use the astSetC
- function instead).
-
- \sstitem
- The same procedure may be adopted if {\tt{"}}\%{\tt{"}} signs are to be included
- and are not to be interpreted as format specifiers (alternatively,
- the {\tt{"}}printf{\tt{"}} convention of writing {\tt{"}}\%\%{\tt{"}} may be used).
-
- \sstitem
- An error will result if an attempt is made to set a value for
- a read-only attribute.
- }
- }
-}
-\sstroutine{
- astSet$<$X$>$\sstlabel{astSetX}
-}{
- Set an attribute value for an Object
-}{
- \sstdescription{
- This is a family of functions which set a specified attribute
- value for an \htmlref{Object}{Object} using one of several different data
- types. The type is selected by replacing $<$X$>$ in the function name
- by C, D, F, I or L, to supply a value in const char$*$ (i.e. string),
- double, float, int, or long format, respectively.
-
- If possible, the value you supply is converted to the type of
- the attribute. If conversion is not possible, an error will
- result.
- }
- \sstsynopsis{
- void astSet$<$X$>$( AstObject $*$this, const char $*$attrib, $<$X$>$type value )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Object.
- }
- \sstsubsection{
- attrib
- }{
- Pointer to a null-terminated character string containing the
- name of the attribute whose value is to be set.
- }
- \sstsubsection{
- value
- }{
- The value to be set for the attribute, in the data type corresponding
- to $<$X$>$ (or, in the case of astSetC, a pointer to a null-terminated
- character string containing this value).
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- These functions apply to all Objects.
- }
- }
- \sstexamples{
- \sstexamplesubsection{
- astSetI( frame, {\tt{"}}Preserve{\tt{"}}, 1 );
- }{
- Sets the Preserve attribute value for Object {\tt{"}}frame{\tt{"}} to 1.
- }
- \sstexamplesubsection{
- astSetC( plot, {\tt{"}}Format(1){\tt{"}}, {\tt{"}}\%.2g{\tt{"}} );
- }{
- Sets the Format(1) attribute value for Object {\tt{"}}plot{\tt{"}} to the
- character string {\tt{"}}\%.2g{\tt{"}}.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Attribute names are not case sensitive and may be surrounded
- by white space.
-
- \sstitem
- An error will result if an attempt is made to set a value for
- a read-only attribute.
- }
- }
-}
-\sstroutine{
- astSetActiveUnit\sstlabel{astSetActiveUnit}
-}{
- Specify how the Unit attribute should be used
-}{
- \sstdescription{
- This function
- sets the current value of the ActiveUnit flag for a \htmlref{Frame}{Frame}, which
- controls how the Frame behaves when it is used (by
- \htmlref{astFindFrame}{astFindFrame} or \htmlref{astConvert}{astConvert})
- to match another Frame. If the ActiveUnit flag is set in both
- template and target Frames then the returned \htmlref{Mapping}{Mapping} takes into account
- any differences in axis units. The default value for simple Frames is
- zero, which preserves the behaviour of versions of AST prior to
- version 2.0.
-
- If the ActiveUnit flag of either Frame is
- zero,
- then the Mapping will ignore any difference in the Unit attributes of
- corresponding template and target axes. In this mode, the Unit
- attributes are purely descriptive commentary for the benefit of
- human readers and do not influence the Mappings between Frames.
- This is the behaviour which all Frames had in older version of AST,
- prior to the introduction of this attribute.
-
- If the ActiveUnit flag of both Frames is
- non-zero,
- then the Mapping from template to target will take account of any
- difference in the axis Unit attributes, where-ever possible. For
- instance, if corresponding target and template axes have Unit strings of
- {\tt{"}}km{\tt{"}} and {\tt{"}}m{\tt{"}}, then the \htmlref{FrameSet}{FrameSet} class will use a \htmlref{ZoomMap}{ZoomMap} to connect
- them which introduces a scaling of 1000. If no Mapping can be found
- between the corresponding units string, then an error is reported.
- In this mode, it is assumed that values of the Unit attribute conform
- to the syntax for units strings described in the FITS WCS Paper I
- {\tt{"}}Representations of world coordinates in FITS{\tt{"}} (Greisen \& Calabretta).
- Particularly, any of the named unit symbols, functions, operators or
- standard multiplier prefixes listed within that paper can be used within
- a units string. A units string may contain symbols for unit which are
- not listed in the FITS paper, but transformation to any other units
- will then not be possible (except to units which depend only on the
- same unknown units - thus {\tt{"}}flops{\tt{"}} can be transformed to {\tt{"}}Mflops{\tt{"}}
- even though {\tt{"}}flops{\tt{"}} is not a standard FITS unit symbol).
-
- A range of common non-standard variations of unit names and multiplier
- prefixes are also allowed, such as adding an {\tt{"}}s{\tt{"}} to the end of Angstrom,
- using a lower case {\tt{"}}a{\tt{"}} at the start of {\tt{"}}angstrom{\tt{"}}, {\tt{"}}micron{\tt{"}} instead of
- {\tt{"}}um{\tt{"}}, {\tt{"}}sec{\tt{"}} instead of {\tt{"}}s{\tt{"}}, etc.
-
- If the ActiveUnit flag is non-zero, setting a new Unit value for an
- axis may also change its Label and Symbol attributes. For instance, if
- an axis has Unit {\tt{"}}Hz{\tt{"}} and Label {\tt{"}}frequency{\tt{"}}, then changing its Unit to
- {\tt{"}}log(Hz){\tt{"}} will change its Label to {\tt{"}}log( frequency ){\tt{"}}. In addition,
- the \htmlref{Axis}{Axis} Format attribute will be cleared when-ever a new value
- is assigned to the Unit attribute.
-
- Note, if a non-zero value is set for the ActiveUnit flag, then changing a
- Unit value for the current Frame within a FrameSet will result in the
- Frame being re-mapped (that is, the Mappings which define the
- relationships between Frames within the FrameSet will be modified to
- take into account the change in Units).
- }
- \sstsynopsis{
- void astSetActiveUnit( AstFrame $*$this, int value )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Frame.
- }
- \sstsubsection{
- value
- }{
- The new value to use.
- }
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- The ActiveUnit flag for a SkyFrame is always 0 (any value
- supplied using this function is ignored).
- }
- \sstsubsection{
- \htmlref{SpecFrame}{SpecFrame}
- }{
- The ActiveUnit flag for a SpecFrame is always 1 (any value
- supplied using this function is ignored).
- }
- \sstsubsection{
- \htmlref{FluxFrame}{FluxFrame}
- }{
- The ActiveUnit flag for a FluxFrame is always 1 (any value
- supplied using this function is ignored).
- }
- \sstsubsection{
- \htmlref{CmpFrame}{CmpFrame}
- }{
- The default ActiveUnit flag for a CmpFrame is 1 if both of the
- component Frames are using active units, and zero otherwise. When
- a new value is set for the ActiveUnit flag, the flag value
- is propagated to the component Frames. This change will be
- reflected through all references to the component Frames, not
- just those encapsulated within the CmpFrame.
- }
- \sstsubsection{
- \htmlref{Region}{Region}:
- }{
- Regions always use active units if possible.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The ActiveUnit flag resembles a Frame attribute, except that it
- cannot be tested or cleared, and it cannot be accessed using the
- generic \htmlref{astGet$<$X$>$}{astGetX} and \htmlref{astSet$<$X$>$}{astSetX} functions.
-
- \sstitem
- The \htmlref{astGetActiveUnit}{astGetActiveUnit} function can be used to retrieve the current
- value of the ActiveUnit flag.
- }
- }
-}
-\sstroutine{
- astSetFits$<$X$>$\sstlabel{astSetFitsX}
-}{
- Store a keyword value in a FitsChan
-}{
- \sstdescription{
- This is a family of functions which store values for named keywords
- within a \htmlref{FitsChan}{FitsChan} at the current card position. The supplied keyword
- value can either over-write an existing keyword value, or can be
- inserted as a new header card into the FitsChan.
-
- The keyword data type is selected by replacing $<$X$>$ in the function name
- by one of the following strings representing the recognised FITS data
- types:
-
- \sstitemlist{
-
- \sstitem
- CF - Complex floating point values.
-
- \sstitem
- CI - Complex integer values.
-
- \sstitem
- F - Floating point values.
-
- \sstitem
- I - Integer values.
-
- \sstitem
- L - Logical (i.e. boolean) values.
-
- \sstitem
- S - String values.
-
- \sstitem
- CN - A {\tt{"}}CONTINUE{\tt{"}} value, these are treated like string values, but
- are encoded without an equals sign.
-
- }
- The data type of the {\tt{"}}value{\tt{"}} parameter depends on $<$X$>$ as follows:
-
- \sstitemlist{
-
- \sstitem
- CF - {\tt{"}}double $*${\tt{"}} (a pointer to a 2 element array holding the real and
- imaginary parts of the complex value).
-
- \sstitem
- CI - {\tt{"}}int $*${\tt{"}} (a pointer to a 2 element array holding the real and
- imaginary parts of the complex value).
-
- \sstitem
- F - {\tt{"}}double{\tt{"}}.
-
- \sstitem
- I - {\tt{"}}int{\tt{"}}.
-
- \sstitem
- L - {\tt{"}}int{\tt{"}}.
-
- \sstitem
- S - {\tt{"}}const char $*${\tt{"}}.
-
- \sstitem
- CN - {\tt{"}}const char $*${\tt{"}}.
- }
- }
- \sstsynopsis{
- void astSetFits$<$X$>$( AstFitsChan $*$this, const char $*$name, $<$X$>$type value,
- const char $*$comment, int overwrite )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the FitsChan.
- }
- \sstsubsection{
- name
- }{
- Pointer to a null-terminated character string
- containing the FITS keyword name. This may be a complete FITS
- header card, in which case the keyword to use is extracted from
- it. No more than 80 characters are read from this string.
- }
- \sstsubsection{
- value
- }{
- The keyword value to store with the named keyword. The data type
- of this parameter depends on $<$X$>$ as described above.
- }
- \sstsubsection{
- comment
- }{
- A pointer to a null terminated string
- holding a comment to associated with the keyword.
- If a NULL pointer or
- a blank string is supplied, then any comment included in the string
- supplied for the
- {\tt{"}}name{\tt{"}} parameter is used instead. If {\tt{"}}name{\tt{"}}
- contains no comment, then any existing comment in the card being
- over-written is retained. Otherwise, no comment is stored with
- the card.
- }
- \sstsubsection{
- overwrite
- }{
- If non-zero,
- the new card formed from the supplied keyword name, value and comment
- string over-writes the current card, and the current card is
- incremented to refer to the next card (see the {\tt{"}}\htmlref{Card}{Card}{\tt{"}} attribute). If
- zero,
- the new card is inserted in front of the current card and the current
- card is left unchanged. In either case, if the current card on entry
- points to the {\tt{"}}end-of-file{\tt{"}}, the new card is appended to the end of
- the list.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The
- function \htmlref{astSetFitsU}{astSetFitsU}
- can be used to indicate that no value is associated with a keyword.
-
- \sstitem
- The
- function \htmlref{astSetFitsCM}{astSetFitsCM}
- can be used to store a pure comment card (i.e. a card with a blank
- keyword).
-
- \sstitem
- To assign a new value for an existing keyword within a FitsChan,
- first find the card describing the keyword using \htmlref{astFindFits}{astFindFits}, and
- then use one of the astSetFits$<$X$>$ family to over-write the old value.
-
- \sstitem
- If, on exit, there are no cards following the card written by
- this function, then the current card is left pointing at the
- {\tt{"}}end-of-file{\tt{"}}.
-
- \sstitem
- An error will be reported if the keyword name does not conform
- to FITS requirements.
- }
- }
-}
-\sstroutine{
- astSetFitsCM\sstlabel{astSetFitsCM}
-}{
- Store a comment card in a FitsChan
-}{
- \sstdescription{
- This
- function
- stores a comment card ( i.e. a card with no keyword name or equals
- sign) within a \htmlref{FitsChan}{FitsChan} at the current card position. The new card
- can either over-write an existing card, or can be inserted as a new
- card into the FitsChan.
- }
- \sstsynopsis{
- void astSetFitsCM( AstFitsChan $*$this, const char $*$comment,
- int overwrite )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the FitsChan.
- }
- \sstsubsection{
- comment
- }{
- A pointer to a null terminated string
- holding the text of the comment card.
- If a NULL pointer or
- a blank string is supplied, then a totally blank card is produced.
- }
- \sstsubsection{
- overwrite
- }{
- If non-zero,
- the new card over-writes the current card, and the current card is
- incremented to refer to the next card (see the {\tt{"}}\htmlref{Card}{Card}{\tt{"}} attribute). If
- zero,
- the new card is inserted in front of the current card and the current
- card is left unchanged. In either case, if the current card on entry
- points to the {\tt{"}}end-of-file{\tt{"}}, the new card is appended to the end of
- the list.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If, on exit, there are no cards following the card written by
- this function, then the current card is left pointing at the
- {\tt{"}}end-of-file{\tt{"}}.
- }
- }
-}
-\sstroutine{
- astSetFitsU\sstlabel{astSetFitsU}
-}{
- Store an undefined keyword value in a FitsChan
-}{
- \sstdescription{
- This
- function
- stores an undefined value for a named keyword within
- a \htmlref{FitsChan}{FitsChan} at the current card position. The new undefined value
- can either over-write an existing keyword value, or can be inserted
- as a new header card into the FitsChan.
- }
- \sstsynopsis{
- void astSetFitsU( AstFitsChan $*$this, const char $*$name,
- const char $*$comment, int overwrite )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the FitsChan.
- }
- \sstsubsection{
- name
- }{
- Pointer to a null-terminated character string
- containing the FITS keyword name. This may be a complete FITS
- header card, in which case the keyword to use is extracted from
- it. No more than 80 characters are read from this string.
- }
- \sstsubsection{
- comment
- }{
- A pointer to a null terminated string
- holding a comment to associated with the keyword.
- If a NULL pointer or
- a blank string is supplied, then any comment included in the string
- supplied for the
- {\tt{"}}name{\tt{"}} parameter is used instead. If {\tt{"}}name{\tt{"}}
- contains no comment, then any existing comment in the card being
- over-written is retained. Otherwise, no comment is stored with
- the card.
- }
- \sstsubsection{
- overwrite
- }{
- If non-zero,
- the new card formed from the supplied keyword name and comment
- string over-writes the current card, and the current card is
- incremented to refer to the next card (see the {\tt{"}}\htmlref{Card}{Card}{\tt{"}} attribute). If
- zero,
- the new card is inserted in front of the current card and the current
- card is left unchanged. In either case, if the current card on entry
- points to the {\tt{"}}end-of-file{\tt{"}}, the new card is appended to the end of
- the list.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If, on exit, there are no cards following the card written by
- this function, then the current card is left pointing at the
- {\tt{"}}end-of-file{\tt{"}}.
-
- \sstitem
- An error will be reported if the keyword name does not conform
- to FITS requirements.
- }
- }
-}
-\sstroutine{
- astSetRefPos\sstlabel{astSetRefPos}
-}{
- Set the reference position in a specified celestial coordinate system
-}{
- \sstdescription{
- This function
- sets the reference position (see attributes \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec}) using
- axis values (in radians) supplied within the celestial coordinate
- system represented by a supplied \htmlref{SkyFrame}{SkyFrame}.
- }
- \sstsynopsis{
- void astSetRefPos( AstSpecFrame $*$this, AstSkyFrame $*$frm, double lon,
- double lat )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the \htmlref{SpecFrame}{SpecFrame}.
- }
- \sstsubsection{
- frm
- }{
- Pointer to the SkyFrame which defines the celestial coordinate
- system in which the longitude and latitude values are supplied.
- If NULL
- is supplied, then the supplied longitude and latitude values are
- assumed to be FK5 J2000 RA and Dec values.
- }
- \sstsubsection{
- lon
- }{
- The longitude of the reference point, in the coordinate system
- represented by the supplied SkyFrame (radians).
- }
- \sstsubsection{
- lat
- }{
- The latitude of the reference point, in the coordinate system
- represented by the supplied SkyFrame (radians).
- }
- }
-}
-\sstroutine{
- astSetStatus\sstlabel{astSetStatus}
-}{
- Set the AST error status to an explicit value
-}{
- \sstdescription{
- This function sets the AST error status to the value supplied.
- It does not cause any error message to be produced and should
- not be used as part of normal error reporting. Its purpose is
- simply to communicate to AST that an error has occurred in some
- other item of software.
-
- For example, a source or sink function supplied as an argument
- to \htmlref{astChannel}{astChannel} or \htmlref{astFitsChan}{astFitsChan} might use this to signal that an
- input/output error has occurred. AST could then respond by
- terminating the current read or write operation.
- }
- \sstsynopsis{
- void astSetStatus( int status\_value )
- }
- \sstparameters{
- \sstsubsection{
- status\_value
- }{
- The new error status value to be set.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the AST error status is set to an error value, most AST
- functions will not execute and will simply return without
- action. To clear the error status and restore normal behaviour,
- use \htmlref{astClearStatus}{astClearStatus}.
- }
- }
-}
-\sstroutine{
- astSetUnc\sstlabel{astSetUnc}
-}{
- Store uncertainty information in a Region
-}{
- \sstdescription{
- Each \htmlref{Region}{Region} (of any class) can have an {\tt{"}}uncertainty{\tt{"}} which specifies
- the uncertainties associated with the boundary of the Region. This
- information is supplied in the form of a second Region. The uncertainty
- in any point on the boundary of a Region is found by shifting the
- associated {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at the boundary
- point being considered. The area covered by the shifted uncertainty
- Region then represents the uncertainty in the boundary position.
- The uncertainty is assumed to be the same for all points.
-
- The uncertainty is usually specified when the Region is created, but
- this
- function
- allows it to be changed at any time.
- }
- \sstsynopsis{
- void astSetUnc( AstRegion $*$this, AstRegion $*$unc )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Region which is to be assigned a new uncertainty.
- }
- \sstsubsection{
- unc
- }{
- Pointer to the new uncertainty Region. This must be of a class for
- which all instances are centro-symetric (e.g. \htmlref{Box}{Box}, \htmlref{Circle}{Circle}, \htmlref{Ellipse}{Ellipse},
- etc.) or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions.
- A deep copy of the supplied Region will be taken, so subsequent
- changes to the uncertainty Region using the supplied pointer will
- have no effect on the Region
- {\tt{"}}this{\tt{"}}.
- }
- }
-}
-\sstroutine{
- astShiftMap\sstlabel{astShiftMap}
-}{
- Create a ShiftMap
-}{
- \sstdescription{
- This function creates a new \htmlref{ShiftMap}{ShiftMap} and optionally initialises its
- attributes.
-
- A ShiftMap is a linear \htmlref{Mapping}{Mapping} which shifts each axis by a
- specified constant value.
- }
- \sstsynopsis{
- AstShiftMap $*$astShiftMap( int ncoord, const double shift[],
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- ncoord
- }{
- The number of coordinate values for each point to be
- transformed (i.e. the number of dimensions of the space in
- which the points will reside). The same number is applicable
- to both input and output points.
- }
- \sstsubsection{
- shift
- }{
- An array containing the values to be added on to the input
- coordinates in order to create the output coordinates. A separate
- value should be supplied for each coordinate.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new ShiftMap. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astShiftMap()
- }{
- A pointer to the new ShiftMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- astShow\sstlabel{astShow}
-}{
- Display a textual representation of an Object on standard output
-}{
- \sstdescription{
- This function displays a textual description of any AST \htmlref{Object}{Object}
- on standard output. It is provided primarily as an aid to
- debugging.
- }
- \sstsynopsis{
- void astShow( AstObject $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Object to be displayed.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This function applies to all Objects.
- }
- }
-}
-\sstroutine{
- astShowMesh\sstlabel{astShowMesh}
-}{
- Display a mesh of points covering the surface of a Region
-}{
- \sstdescription{
- This function
- writes a table to standard output containing the axis values at a
- mesh of points covering the surface of the supplied \htmlref{Region}{Region}. Each row
- of output contains a tab-separated list of axis values, one for
- each axis in the \htmlref{Frame}{Frame} encapsulated by the Region. The number of
- points in the mesh is determined by the \htmlref{MeshSize}{MeshSize} attribute.
-
- The table is preceeded by a given title string, and followed by a
- single line containing the word {\tt{"}}ENDMESH{\tt{"}}.
- }
- \sstsynopsis{
- void astShowMesh( AstRegion $*$this, int format, const char $*$ttl )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Region.
- }
- \sstsubsection{
- format
- }{
- A boolean value indicating if the displayed axis values should
- be formatted according to the Format attribute associated with
- the Frame's axis. Otherwise, they are displayed as simple
- floating point values.
- }
- \sstsubsection{
- ttl
- }{
- A title to display before displaying the first position.
- }
- }
-}
-\sstroutine{
- astSimplify\sstlabel{astSimplify}
-}{
- Simplify a Mapping
-}{
- \sstdescription{
- This function simplifies a \htmlref{Mapping}{Mapping} (which may be a compound
- Mapping such as a \htmlref{CmpMap}{CmpMap}) to eliminate redundant computational
- steps, or to merge separate steps which can be performed more
- efficiently in a single operation.
-
- As a simple example, a Mapping which multiplied coordinates by
- 5, and then multiplied the result by 10, could be simplified to
- a single step which multiplied by 50. Similarly, a Mapping which
- multiplied by 5, and then divided by 5, could be reduced to a
- simple copying operation.
-
- This function should typically be applied to Mappings which have
- undergone substantial processing or have been formed by merging
- other Mappings. It is of potential benefit, for example, in
- reducing execution time if applied before using a Mapping to
- transform a large number of coordinates.
- }
- \sstsynopsis{
- AstMapping $*$astSimplify( AstMapping $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the original Mapping.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Mapping
- }{
- This function applies to all Mappings.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- If the supplied Mapping is a FrameSet, the returned Mapping
- will be a copy of the supplied FrameSet in which all the
- inter-\htmlref{Frame}{Frame} Mappings have been simplified.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astSimplify()
- }{
- A new pointer to the (possibly simplified) Mapping.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function can safely be applied even to Mappings which
- cannot be simplified. If no simplification is possible, it
- behaves exactly like \htmlref{astClone}{astClone} and returns a pointer to the
- original Mapping.
-
- \sstitem
- The Mapping returned by this function may not be independent
- of the original (even if simplification was possible), and
- modifying it may therefore result in indirect modification of
- the original. If a completely independent result is required, a
- copy should be made using \htmlref{astCopy}{astCopy}.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astSkyFrame\sstlabel{astSkyFrame}
-}{
- Create a SkyFrame
-}{
- \sstdescription{
- This function creates a new \htmlref{SkyFrame}{SkyFrame} and optionally initialises
- its attributes.
-
- A SkyFrame is a specialised form of \htmlref{Frame}{Frame} which describes
- celestial longitude/latitude coordinate systems. The particular
- celestial coordinate system to be represented is specified by
- setting the SkyFrame's \htmlref{System}{System} attribute (currently, the default
- is ICRS) qualified, as necessary, by a mean \htmlref{Equinox}{Equinox} value and/or
- an \htmlref{Epoch}{Epoch}.
-
- For each of the supported celestial coordinate systems, a SkyFrame
- can apply an optional shift of origin to create a coordinate system
- representing offsets within the celestial coordinate system from some
- specified point. This offset coordinate system can also be rotated to
- define new longitude and latitude axes. See attributes SkyRef, \htmlref{SkyRefIs}{SkyRefIs}
- and SkyRefP
-
- All the coordinate values used by a SkyFrame are in
- radians. These may be formatted in more conventional ways for
- display by using \htmlref{astFormat}{astFormat}.
- }
- \sstsynopsis{
- AstSkyFrame $*$astSkyFrame( const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new SkyFrame. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- If no initialisation is required, a zero-length string may be
- supplied.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astSkyFrame()
- }{
- A pointer to the new SkyFrame.
- }
- }
- \sstexamples{
- \sstexamplesubsection{
- frame = astSkyFrame( {\tt{"}}{\tt{"}} );
- }{
- Creates a SkyFrame to describe the default ICRS celestial
- coordinate system.
- }
- \sstexamplesubsection{
- frame = astSkyFrame( {\tt{"}}System = FK5, Equinox = J2005, Digits = 10{\tt{"}} );
- }{
- Creates a SkyFrame to describe the FK5 celestial
- coordinate system, with a mean Equinox of J2005.0.
- Because especially accurate coordinates will be used,
- additional precision (10 digits) has been requested. This will
- be used when coordinate values are formatted for display.
- }
- \sstexamplesubsection{
- frame = astSkyFrame( {\tt{"}}System = FK4, Equinox = 1955-sep-2{\tt{"}} );
- }{
- Creates a SkyFrame to describe the old FK4 celestial
- coordinate system. A default Epoch value (B1950.0) is used,
- but the mean Equinox value is given explicitly as {\tt{"}}1955-sep-2{\tt{"}}.
- }
- \sstexamplesubsection{
- frame = astSkyFrame( {\tt{"}}System = GAPPT, Epoch = \%s{\tt{"}}, date );
- }{
- Creates a SkyFrame to describe the Geocentric Apparent
- celestial coordinate system. The Epoch value, which specifies
- the date of observation, is obtained from a date/time string
- supplied via the string pointer {\tt{"}}date{\tt{"}}.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Currently, the default celestial coordinate system is
- ICRS. However, this default may change in future as new
- astrometric standards evolve. The intention is to track the most
- modern appropriate standard. For this reason, you should use the
- default only if this is what you intend (and can tolerate any
- associated slight change in behaviour with future versions of
- this function). If you intend to use the ICRS system
- indefinitely, then you should specify it explicitly using an
- {\tt{"}}options{\tt{"}} value of {\tt{"}}System=ICRS{\tt{"}}.
-
- \sstitem
- Whichever celestial coordinate system is represented, it will
- have two axes. The first of these will be the longitude axis
- and the second will be the latitude axis. This order can be
- changed using \htmlref{astPermAxes}{astPermAxes} if required.
-
- \sstitem
- When conversion between two SkyFrames is requested (as when
- supplying SkyFrames to \htmlref{astConvert}{astConvert}),
- account will be taken of the nature of the celestial coordinate
- systems they represent, together with any qualifying mean Equinox or
- Epoch values, etc. The \htmlref{AlignSystem}{AlignSystem} attribute will also be taken into
- account. The results will therefore fully reflect the
- relationship between positions on the sky measured in the two
- systems.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astSlaAdd\sstlabel{astSlaAdd}
-}{
- Add a celestial coordinate conversion to an SlaMap
-}{
- \sstdescription{
- This function adds one of the standard celestial coordinate
- system conversions provided by the SLALIB Positional Astronomy
- Library (Starlink User Note SUN/67) to an existing \htmlref{SlaMap}{SlaMap}.
-
- When an SlaMap is first created (using \htmlref{astSlaMap}{astSlaMap}), it simply
- performs a unit (null) \htmlref{Mapping}{Mapping}. By using astSlaAdd (repeatedly
- if necessary), one or more coordinate conversion steps may then
- be added, which the SlaMap will perform in sequence. This allows
- multi-step conversions between a variety of celestial coordinate
- systems to be assembled out of the building blocks provided by
- SLALIB.
-
- Normally, if an SlaMap's \htmlref{Invert}{Invert} attribute is zero (the default),
- then its forward transformation is performed by carrying out
- each of the individual coordinate conversions specified by
- astSlaAdd in the order given (i.e. with the most recently added
- conversion applied last).
-
- This order is reversed if the SlaMap's Invert attribute is
- non-zero (or if the inverse transformation is requested by any
- other means) and each individual coordinate conversion is also
- replaced by its own inverse. This process inverts the overall
- effect of the SlaMap. In this case, the first conversion to be
- applied would be the inverse of the one most recently added.
- }
- \sstsynopsis{
- void astSlaAdd( AstSlaMap $*$this, const char $*$cvt, const double args[] )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the SlaMap.
- }
- \sstsubsection{
- cvt
- }{
- Pointer to a null-terminated string which identifies the
- celestial coordinate conversion to be added to the
- SlaMap. See the {\tt{"}}SLALIB Conversions{\tt{"}} section for details of
- those available.
- }
- \sstsubsection{
- args
- }{
- An array containing argument values for the celestial
- coordinate conversion. The number of arguments required, and
- hence the number of array elements used, depends on the
- conversion specified (see the {\tt{"}}SLALIB Conversions{\tt{"}}
- section). This array is ignored
- and a NULL pointer may be supplied
- if no arguments are needed.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- All coordinate values processed by an SlaMap are in
- radians. The first coordinate is the celestial longitude and the
- second coordinate is the celestial latitude.
-
- \sstitem
- When assembling a multi-stage conversion, it can sometimes be
- difficult to determine the most economical conversion path. For
- example, converting to the standard FK5 coordinate system as an
- intermediate stage is often sensible in formulating the problem,
- but may introduce unnecessary extra conversion steps. A solution
- to this is to include all the steps which are (logically)
- necessary, but then to use \htmlref{astSimplify}{astSimplify} to simplify the resulting
- SlaMap. The simplification process will eliminate any steps
- which turn out not to be needed.
-
- \sstitem
- This function does not check to ensure that the sequence of
- coordinate conversions added to an SlaMap is physically
- meaningful.
- }
- }
- \sstdiytopic{
- SLALIB Conversions
- }{
- The following strings (which are case-insensitive) may be supplied
- via the {\tt{"}}cvt{\tt{"}} parameter to indicate which celestial coordinate
- conversion is to be added to the SlaMap. Each string is derived
- from the name of the SLALIB routine that performs the
- conversion and the relevant documentation (SUN/67) should be
- consulted for details. Where arguments are needed by
- the conversion, they are listed in parentheses. Values for
- these arguments should be given, via the {\tt{"}}args{\tt{"}} array, in the
- order indicated. The argument names match the corresponding
- SLALIB routine arguments and their values should be given using
- exactly the same units, time scale, calendar, etc. as described
- in SUN/67:
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}ADDET{\tt{"}} (EQ): Add E-terms of aberration.
-
- \sstitem
- {\tt{"}}SUBET{\tt{"}} (EQ): Subtract E-terms of aberration.
-
- \sstitem
- {\tt{"}}PREBN{\tt{"}} (BEP0,BEP1): Apply Bessel-Newcomb pre-IAU 1976 (FK4)
- precession model.
-
- \sstitem
- {\tt{"}}PREC{\tt{"}} (EP0,EP1): Apply IAU 1975 (FK5) precession model.
-
- \sstitem
- {\tt{"}}FK45Z{\tt{"}} (BEPOCH): Convert FK4 to FK5 (no proper motion or parallax).
-
- \sstitem
- {\tt{"}}FK54Z{\tt{"}} (BEPOCH): Convert FK5 to FK4 (no proper motion or parallax).
-
- \sstitem
- {\tt{"}}AMP{\tt{"}} (DATE,EQ): Convert geocentric apparent to mean place.
-
- \sstitem
- {\tt{"}}MAP{\tt{"}} (EQ,DATE): Convert mean place to geocentric apparent.
-
- \sstitem
- {\tt{"}}ECLEQ{\tt{"}} (DATE): Convert ecliptic coordinates to FK5 J2000.0 equatorial.
-
- \sstitem
- {\tt{"}}EQECL{\tt{"}} (DATE): Convert equatorial FK5 J2000.0 to ecliptic coordinates.
-
- \sstitem
- {\tt{"}}GALEQ{\tt{"}}: Convert galactic coordinates to FK5 J2000.0 equatorial.
-
- \sstitem
- {\tt{"}}EQGAL{\tt{"}}: Convert FK5 J2000.0 equatorial to galactic coordinates.
-
- \sstitem
- {\tt{"}}HFK5Z{\tt{"}} (JEPOCH): Convert ICRS coordinates to FK5 J2000.0 equatorial.
-
- \sstitem
- {\tt{"}}FK5HZ{\tt{"}} (JEPOCH): Convert FK5 J2000.0 equatorial coordinates to ICRS.
-
- \sstitem
- {\tt{"}}GALSUP{\tt{"}}: Convert galactic to supergalactic coordinates.
-
- \sstitem
- {\tt{"}}SUPGAL{\tt{"}}: Convert supergalactic coordinates to galactic.
-
- \sstitem
- {\tt{"}}J2000H{\tt{"}}: Convert dynamical J2000.0 to ICRS.
-
- \sstitem
- {\tt{"}}HJ2000{\tt{"}}: Convert ICRS to dynamical J2000.0.
-
- \sstitem
- {\tt{"}}R2H{\tt{"}} (LAST): Convert RA to Hour Angle.
-
- \sstitem
- {\tt{"}}H2R{\tt{"}} (LAST): Convert Hour Angle to RA.
-
- }
- For example, to use the {\tt{"}}ADDET{\tt{"}} conversion, which takes a single
- argument EQ, you should consult the documentation for the SLALIB
- routine SLA\_ADDET. This describes the conversion in detail and
- shows that EQ is the Besselian epoch of the mean equator and
- equinox.
- This value should then be supplied to astSlaAdd in args[0].
-
- In addition the following strings may be supplied for more complex
- conversions which do not correspond to any one single SLALIB routine
- (DIURAB is the magnitude of the diurnal aberration vector in units
- of {\tt{"}}day/(2.PI){\tt{"}}, DATE is the Modified Julian Date of the observation,
- and (OBSX,OBSY,OBZ) are the Heliocentric-Aries-Ecliptic cartesian
- coordinates, in metres, of the observer):
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}HPCEQ{\tt{"}} (DATE,OBSX,OBSY,OBSZ): Convert Helioprojective-Cartesian coordinates to J2000.0 equatorial.
-
- \sstitem
- {\tt{"}}EQHPC{\tt{"}} (DATE,OBSX,OBSY,OBSZ): Convert J2000.0 equatorial coordinates to Helioprojective-Cartesian.
-
- \sstitem
- {\tt{"}}HPREQ{\tt{"}} (DATE,OBSX,OBSY,OBSZ): Convert Helioprojective-Radial coordinates to J2000.0 equatorial.
-
- \sstitem
- {\tt{"}}EQHPR{\tt{"}} (DATE,OBSX,OBSY,OBSZ): Convert J2000.0 equatorial coordinates to Helioprojective-Radial.
-
- \sstitem
- {\tt{"}}HEEQ{\tt{"}} (DATE): Convert helio-ecliptic coordinates to J2000.0 equatorial.
-
- \sstitem
- {\tt{"}}EQHE{\tt{"}} (DATE): Convert J2000.0 equatorial coordinates to helio-ecliptic.
-
- \sstitem
- {\tt{"}}H2E{\tt{"}} (LAT,DIRUAB): Convert horizon coordinates to equatorial.
-
- \sstitem
- {\tt{"}}E2H{\tt{"}} (LAT,DIURAB): Convert equatorial coordinates to horizon.
-
- }
- Note, the {\tt{"}}H2E{\tt{"}} and {\tt{"}}E2H{\tt{"}} conversions convert between topocentric
- horizon coordinates (azimuth,elevation), and apparent local equatorial
- coordinates (hour angle,declination). Thus, the effects of diurnal
- aberration are taken into account in the conversions but the effects
- of atmospheric refraction are not.
- }
-}
-\sstroutine{
- astSlaMap\sstlabel{astSlaMap}
-}{
- Create an SlaMap
-}{
- \sstdescription{
- This function creates a new \htmlref{SlaMap}{SlaMap} and optionally initialises
- its attributes.
-
- An SlaMap is a specialised form of \htmlref{Mapping}{Mapping} which can be used to
- represent a sequence of conversions between standard celestial
- (longitude, latitude) coordinate systems.
-
- When an SlaMap is first created, it simply performs a unit
- (null) Mapping on a pair of coordinates. Using the \htmlref{astSlaAdd}{astSlaAdd}
- function, a series of coordinate conversion steps may then be
- added, selected from those provided by the SLALIB Positional
- Astronomy Library (Starlink User Note SUN/67). This allows
- multi-step conversions between a variety of celestial coordinate
- systems to be assembled out of the building blocks provided by
- SLALIB.
-
- For details of the individual coordinate conversions available,
- see the description of the astSlaAdd function.
- }
- \sstsynopsis{
- AstSlaMap $*$astSlaMap( int flags, const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- flags
- }{
- This parameter is reserved for future use and should currently
- always be set to zero.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new SlaMap. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- If no initialisation is required, a zero-length string may be
- supplied.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astSlaMap()
- }{
- A pointer to the new SlaMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes (number of input and output
- coordinates) for an SlaMap are both equal to 2. The first
- coordinate is the celestial longitude and the second coordinate
- is the celestial latitude. All coordinate values are in radians.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astSpecAdd\sstlabel{astSpecAdd}
-}{
- Add a spectral coordinate conversion to a SpecMap
-}{
- \sstdescription{
- This function adds one of the standard spectral coordinate
- system conversions listed below to an existing \htmlref{SpecMap}{SpecMap}.
-
- When a SpecMap is first created (using \htmlref{astSpecMap}{astSpecMap}), it simply
- performs a unit (null) \htmlref{Mapping}{Mapping}. By using astSpecAdd (repeatedly
- if necessary), one or more coordinate conversion steps may then
- be added, which the SpecMap will perform in sequence. This allows
- multi-step conversions between a variety of spectral coordinate
- systems to be assembled out of the building blocks provided by
- this class.
-
- Normally, if a SpecMap's \htmlref{Invert}{Invert} attribute is zero (the default),
- then its forward transformation is performed by carrying out
- each of the individual coordinate conversions specified by
- astSpecAdd in the order given (i.e. with the most recently added
- conversion applied last).
-
- This order is reversed if the SpecMap's Invert attribute is
- non-zero (or if the inverse transformation is requested by any
- other means) and each individual coordinate conversion is also
- replaced by its own inverse. This process inverts the overall
- effect of the SpecMap. In this case, the first conversion to be
- applied would be the inverse of the one most recently added.
- }
- \sstsynopsis{
- void astSpecAdd( AstSpecMap $*$this, const char $*$cvt, const double args[] )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the SpecMap.
- }
- \sstsubsection{
- cvt
- }{
- Pointer to a null-terminated string which identifies the
- spectral coordinate conversion to be added to the
- SpecMap. See the {\tt{"}}Available Conversions{\tt{"}} section for details of
- those available.
- }
- \sstsubsection{
- args
- }{
- An array containing argument values for the spectral
- coordinate conversion. The number of arguments required, and
- hence the number of array elements used, depends on the
- conversion specified (see the {\tt{"}}Available Conversions{\tt{"}}
- section). This array is ignored
- and a NULL pointer may be supplied
- if no arguments are needed.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When assembling a multi-stage conversion, it can sometimes be
- difficult to determine the most economical conversion path. For
- example, when converting between reference frames, converting first
- to the heliographic reference frame as an intermediate stage is often
- sensible in formulating the problem, but may introduce unnecessary
- extra conversion steps. A solution to this is to include all the steps
- which are (logically) necessary, but then to use
- \htmlref{astSimplify}{astSimplify} to simplify the resulting
- SpecMap. The simplification process will eliminate any steps
- which turn out not to be needed.
-
- \sstitem
- This function does not check to ensure that the sequence of
- coordinate conversions added to a SpecMap is physically
- meaningful.
- }
- }
- \sstdiytopic{
- Available Conversions
- }{
- The following strings (which are case-insensitive) may be supplied
- via the {\tt{"}}cvt{\tt{"}} parameter to indicate which spectral coordinate
- conversion is to be added to the SpecMap. Where arguments are needed by
- the conversion, they are listed in parentheses. Values for
- these arguments should be given, via the {\tt{"}}args{\tt{"}} array, in the
- order indicated. Units and argument names are described at the end of
- the list of conversions.
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}FRTOVL{\tt{"}} (RF): Convert frequency to relativistic velocity.
-
- \sstitem
- {\tt{"}}VLTOFR{\tt{"}} (RF): Convert relativistic velocity to Frequency.
-
- \sstitem
- {\tt{"}}ENTOFR{\tt{"}}: Convert energy to frequency.
-
- \sstitem
- {\tt{"}}FRTOEN{\tt{"}}: Convert frequency to energy.
-
- \sstitem
- {\tt{"}}WNTOFR{\tt{"}}: Convert wave number to frequency.
-
- \sstitem
- {\tt{"}}FRTOWN{\tt{"}}: Convert frequency to wave number.
-
- \sstitem
- {\tt{"}}WVTOFR{\tt{"}}: Convert wavelength (vacuum) to frequency.
-
- \sstitem
- {\tt{"}}FRTOWV{\tt{"}}: Convert frequency to wavelength (vacuum).
-
- \sstitem
- {\tt{"}}AWTOFR{\tt{"}}: Convert wavelength (air) to frequency.
-
- \sstitem
- {\tt{"}}FRTOAW{\tt{"}}: Convert frequency to wavelength (air).
-
- \sstitem
- {\tt{"}}VRTOVL{\tt{"}}: Convert radio to relativistic velocity.
-
- \sstitem
- {\tt{"}}VLTOVR{\tt{"}}: Convert relativistic to radio velocity.
-
- \sstitem
- {\tt{"}}VOTOVL{\tt{"}}: Convert optical to relativistic velocity.
-
- \sstitem
- {\tt{"}}VLTOVO{\tt{"}}: Convert relativistic to optical velocity.
-
- \sstitem
- {\tt{"}}ZOTOVL{\tt{"}}: Convert redshift to relativistic velocity.
-
- \sstitem
- {\tt{"}}VLTOZO{\tt{"}}: Convert relativistic velocity to redshift.
-
- \sstitem
- {\tt{"}}BTTOVL{\tt{"}}: Convert beta factor to relativistic velocity.
-
- \sstitem
- {\tt{"}}VLTOBT{\tt{"}}: Convert relativistic velocity to beta factor.
-
- \sstitem
- {\tt{"}}USF2HL{\tt{"}} (VOFF,RA,DEC): Convert frequency from a user-defined
- reference frame to heliocentric.
-
- \sstitem
- {\tt{"}}HLF2US{\tt{"}} (VOFF,RA,DEC): Convert frequency from heliocentric
- reference frame to user-defined.
-
- \sstitem
- {\tt{"}}TPF2HL{\tt{"}} (OBSLON,OBSLAT,OBSALT,EPOCH,RA,DEC): Convert frequency from
- topocentric reference frame to heliocentric.
-
- \sstitem
- {\tt{"}}HLF2TP{\tt{"}} (OBSLON,OBSLAT,OBSALT,EPOCH,RA,DEC): Convert frequency from
- heliocentric reference frame to topocentric.
-
- \sstitem
- {\tt{"}}GEF2HL{\tt{"}} (EPOCH,RA,DEC): Convert frequency from geocentric
- reference frame to heliocentric.
-
- \sstitem
- {\tt{"}}HLF2GE{\tt{"}} (EPOCH,RA,DEC): Convert frequency from
- heliocentric reference frame to geocentric.
-
- \sstitem
- {\tt{"}}BYF2HL{\tt{"}} (EPOCH,RA,DEC): Convert frequency from
- barycentric reference frame to heliocentric.
-
- \sstitem
- {\tt{"}}HLF2BY{\tt{"}} (EPOCH,RA,DEC): Convert frequency from
- heliocentric reference frame to barycentric.
-
- \sstitem
- {\tt{"}}LKF2HL{\tt{"}} (RA,DEC): Convert frequency from kinematic LSR
- reference frame to heliocentric.
-
- \sstitem
- {\tt{"}}HLF2LK{\tt{"}} (RA,DEC): Convert frequency from heliocentric
- reference frame to kinematic LSR.
-
- \sstitem
- {\tt{"}}LDF2HL{\tt{"}} (RA,DEC): Convert frequency from dynamical LSR
- reference frame to heliocentric.
-
- \sstitem
- {\tt{"}}HLF2LD{\tt{"}} (RA,DEC): Convert frequency from heliocentric
- reference frame to dynamical LSR.
-
- \sstitem
- {\tt{"}}LGF2HL{\tt{"}} (RA,DEC): Convert frequency from local group
- reference frame to heliocentric.
-
- \sstitem
- {\tt{"}}HLF2LG{\tt{"}} (RA,DEC): Convert frequency from heliocentric
- reference frame to local group.
-
- \sstitem
- {\tt{"}}GLF2HL{\tt{"}} (RA,DEC): Convert frequency from galactic
- reference frame to heliocentric.
-
- \sstitem
- {\tt{"}}HLF2GL{\tt{"}} (RA,DEC): Convert frequency from heliocentric
- reference frame to galactic.
-
- }
- The units for the values processed by the above conversions are as
- follows:
-
- \sstitemlist{
-
- \sstitem
- all velocities: metres per second (positive if the source receeds from
- the observer).
-
- \sstitem
- frequency: Hertz.
-
- \sstitem
- all wavelengths: metres.
-
- \sstitem
- energy: Joules.
-
- \sstitem
- wave number: cycles per metre.
-
- }
- The arguments used in the above conversions are as follows:
-
- \sstitemlist{
-
- \sstitem
- RF: Rest frequency (Hz).
-
- \sstitem
- OBSALT: Geodetic altitude of observer (IAU 1975, metres).
-
- \sstitem
- OBSLAT: Geodetic latitude of observer (IAU 1975, radians).
-
- \sstitem
- OBSLON: Longitude of observer (radians - positive eastwards).
-
- \sstitem
- EPOCH: \htmlref{Epoch}{Epoch} of observation (UT1 expressed as a Modified Julian Date).
-
- \sstitem
- RA: Right Ascension of source (radians, FK5 J2000).
-
- \sstitem
- DEC: Declination of source (radians, FK5 J2000).
-
- \sstitem
- VOFF: Velocity of the user-defined reference frame, towards the
- position given by RA and DEC, measured in the heliocentric
- reference frame.
-
- }
- If the SpecMap is 3-dimensional, source positions are provided by the
- values supplied to inputs 2 and 3 of the SpecMap (which are simply
- copied to outputs 2 and 3). Note, usable values are still required
- for the RA and DEC arguments in order to define the {\tt{"}}user-defined{\tt{"}}
- reference frame used by USF2HL and HLF2US. However, AST\_\_BAD can be
- supplied for RA and DEC if the user-defined reference frame is not
- required.
- }
-}
-\sstroutine{
- astSpecFluxFrame\sstlabel{astSpecFluxFrame}
-}{
- Create a SpecFluxFrame
-}{
- \sstdescription{
- This function creates a new \htmlref{SpecFluxFrame}{SpecFluxFrame} and optionally initialises
- its attributes.
-
- A SpecFluxFrame combines a \htmlref{SpecFrame}{SpecFrame} and a \htmlref{FluxFrame}{FluxFrame} into a single
- 2-dimensional compound \htmlref{Frame}{Frame}. Such a Frame can for instance be used
- to describe a \htmlref{Plot}{Plot} of a spectrum in which the first axis represents
- spectral position and the second axis represents flux.
- }
- \sstsynopsis{
- AstSpecFluxFrame $*$astSpecFluxFrame( AstSpecFrame $*$frame1, AstFluxFrame $*$frame2,
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- frame1
- }{
- Pointer to the SpecFrame. This will form the first axis in the
- new SpecFluxFrame.
- }
- \sstsubsection{
- frame2
- }{
- Pointer to the FluxFrame. This will form the second axis in the
- new SpecFluxFrame. The {\tt{"}}\htmlref{SpecVal}{SpecVal}{\tt{"}} attribute of this FluxFrame is
- not used by the SpecFluxFrame class and so may be set to AST\_\_BAD
- when the FluxFrame is created.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new SpecFluxFrame. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astSpecFluxFrame()
- }{
- A pointer to the new SpecFluxFrame.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The supplied Frame pointers are stored directly, rather than
- being used to create deep copies of the supplied Frames. This means
- that any subsequent changes made to the Frames via the supplied
- pointers will result in equivalent changes being visible in the
- SpecFluxFrame.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- astSpecFrame\sstlabel{astSpecFrame}
-}{
- Create a SpecFrame
-}{
- \sstdescription{
- This function creates a new \htmlref{SpecFrame}{SpecFrame} and optionally initialises
- its attributes.
-
- A SpecFrame is a specialised form of one-dimensional \htmlref{Frame}{Frame} which
- represents various coordinate systems used to describe positions within
- an electro-magnetic spectrum. The particular coordinate system to be
- used is specified by setting the SpecFrame's \htmlref{System}{System} attribute (the
- default is wavelength) qualified, as necessary, by other attributes
- such as the rest frequency, the standard of rest, the epoch of
- observation, etc (see the description of the System attribute for
- details).
-
- By setting a value for thr \htmlref{SpecOrigin}{SpecOrigin} attribute, a SpecFrame can be made
- to represent offsets from a given spectral position, rather than absolute
- }
- \sstsynopsis{
- AstSpecFrame $*$astSpecFrame( const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new SpecFrame. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- If no initialisation is required, a zero-length string may be
- supplied.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astSpecFrame()
- }{
- A pointer to the new SpecFrame.
- }
- }
- \sstexamples{
- \sstexamplesubsection{
- frame = astSpecFrame( {\tt{"}}{\tt{"}} );
- }{
- Creates a SpecFrame to describe the default wavelength spectral
- coordinate system. The \htmlref{RestFreq}{RestFreq} attribute (rest frequency) is
- unspecified, so it will not be possible to align this SpecFrame
- with another SpecFrame on the basis of a velocity-based system. The
- standard of rest is also unspecified. This means that alignment
- will be possible with other SpecFrames, but no correction will be
- made for Doppler shift caused by change of rest frame during the
- alignment.
- }
- \sstexamplesubsection{
- frame = astSpecFrame( {\tt{"}}System=VELO, RestFreq=1.0E15, \htmlref{StdOfRest}{StdOfRest}=LSRK{\tt{"}} );
- }{
- Creates a SpecFrame describing a apparent radial velocity ({\tt{"}}VELO{\tt{"}}) axis
- with rest frequency 1.0E15 Hz (about 3000 Angstroms), measured
- in the kinematic Local Standard of Rest ({\tt{"}}LSRK{\tt{"}}). Since the
- source position has not been specified (using attributes \htmlref{RefRA}{RefRA} and
- \htmlref{RefDec}{RefDec}), it will only be possible to align this SpecFrame with
- other SpecFrames which are also measured in the LSRK standard of
- rest.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When conversion between two SpecFrames is requested (as when
- supplying SpecFrames to \htmlref{astConvert}{astConvert}),
- account will be taken of the nature of the spectral coordinate systems
- they represent, together with any qualifying rest frequency, standard
- of rest, epoch values, etc. The \htmlref{AlignSystem}{AlignSystem} and \htmlref{AlignStdOfRest}{AlignStdOfRest}
- attributes will also be taken into account. The results will therefore
- fully reflect the relationship between positions measured in the two
- systems. In addition, any difference in the Unit attributes of the two
- systems will also be taken into account.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astSpecMap\sstlabel{astSpecMap}
-}{
- Create a SpecMap
-}{
- \sstdescription{
- This function creates a new \htmlref{SpecMap}{SpecMap} and optionally initialises
- its attributes.
-
- An SpecMap is a specialised form of \htmlref{Mapping}{Mapping} which can be used to
- represent a sequence of conversions between standard spectral
- coordinate systems. This includes conversions between frequency,
- wavelength, and various forms of velocity, as well as conversions
- between different standards of rest.
-
- When a SpecMap is first created, it simply performs a unit
- (null) Mapping. Using the \htmlref{astSpecAdd}{astSpecAdd} function,
- a series of coordinate conversion steps may then be added, selected
- from the list of supported conversions. This allows multi-step
- conversions between a variety of spectral coordinate systems to
- be assembled out of the building blocks provided by this class.
-
- For details of the individual coordinate conversions available,
- see the description of the astSpecAdd function.
-
- Conversions are available to transform between standards of rest.
- Such conversions need to know the source position as an RA and DEC.
- This information can be supplied in the form of parameters for
- the relevant conversions, in which case the SpecMap is 1-dimensional,
- simply transforming the spectral axis values. This means that the
- same source position will always be used by the SpecMap. However, this
- may not be appropriate for an accurate description of a 3-D spectral
- cube, where changes of spatial position can produce significant
- changes in the Doppler shift introduced when transforming between
- standards of rest. For this situation, a 3-dimensional SpecMap can
- be created in which axes 2 and 3 correspond to the source RA and DEC
- The SpecMap simply copies values for axes 2 and 3 from input to
- output).
- }
- \sstsynopsis{
- AstSpecMap $*$astSpecMap( int nin, int flags, const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- nin
- }{
- The number of inputs to the Mapping (this will also equal the
- number of outputs). This value must be either 1 or 3. In either
- case, the first input and output correspoindis the spectral axis.
- For a 3-axis SpecMap, the second and third axes give the RA and
- DEC (J2000 FK5) of the source. This positional information is
- used by conversions which transform between standards of rest,
- and replaces the {\tt{"}}RA{\tt{"}} and {\tt{"}}DEC{\tt{"}} arguments for the individual
- conversions listed in description of the {\tt{"}}SpecAdd{\tt{"}}
- function.
- }
- \sstsubsection{
- flags
- }{
- This parameter is reserved for future use and should currently
- always be set to zero.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new SpecMap. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- If no initialisation is required, a zero-length string may be
- supplied.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astSpecMap()
- }{
- A pointer to the new SpecMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The nature and units of the coordinate values supplied for the
- first input (i.e. the spectral input) of a SpecMap must be appropriate
- to the first conversion step applied by the SpecMap. For instance, if
- the first conversion step is {\tt{"}}FRTOVL{\tt{"}} (frequency to relativistic
- velocity), then the coordinate values for the first input should
- be frequency in units of Hz. Similarly, the nature and units of the
- coordinate values returned by a SpecMap will be determined by the
- last conversion step applied by the SpecMap. For instance, if the
- last conversion step is {\tt{"}}VLTOVO{\tt{"}} (relativistic velocity to optical
- velocity), then the coordinate values for the first output will be optical
- velocity in units of metres per second. See the description of the
- astSpecAdd function for the units expected and returned by each
- conversion.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astSphMap\sstlabel{astSphMap}
-}{
- Create a SphMap
-}{
- \sstdescription{
- This function creates a new \htmlref{SphMap}{SphMap} and optionally initialises
- its attributes.
-
- A SphMap is a \htmlref{Mapping}{Mapping} which transforms points from a
- 3-dimensional Cartesian coordinate system into a 2-dimensional
- spherical coordinate system (longitude and latitude on a unit
- sphere centred at the origin). It works by regarding the input
- coordinates as position vectors and finding their intersection
- with the sphere surface. The inverse transformation always
- produces points which are a unit distance from the origin
- (i.e. unit vectors).
- }
- \sstsynopsis{
- AstSphMap $*$astSphMap( const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new SphMap. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astSphMap()
- }{
- A pointer to the new SphMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The spherical coordinates are longitude (positive
- anti-clockwise looking from the positive latitude pole) and
- latitude. The Cartesian coordinates are right-handed, with the x
- axis (axis 1) at zero longitude and latitude, and the z axis
- (axis 3) at the positive latitude pole.
-
- \sstitem
- At either pole, the longitude is set to the value of the
- \htmlref{PolarLong}{PolarLong} attribute.
-
- \sstitem
- If the Cartesian coordinates are all zero, then the longitude
- and latitude are set to the value AST\_\_BAD.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- astStatus\sstlabel{astStatus}
-}{
- Obtain the current AST error status value
-}{
- \sstdescription{
- This function returns the current value of the AST error status.
- }
- \sstsynopsis{
- int astStatus
- }
- \sstreturnedvalue{
- \sstsubsection{
- astStatus
- }{
- The AST error status value.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the AST error status is set to an error value (after an
- error), most AST functions will not execute and will simply
- return without action. To clear the error status and restore
- normal behaviour, use \htmlref{astClearStatus}{astClearStatus}.
- }
- }
-}
-\sstroutine{
- astStcCatalogEntryLocation\sstlabel{astStcCatalogEntryLocation}
-}{
- Create a StcCatalogEntryLocation
-}{
- \sstdescription{
- This function creates a new \htmlref{StcCatalogEntryLocation}{StcCatalogEntryLocation} and optionally initialises its
- attributes.
-
- The StcCatalogEntryLocation class is a sub-class of \htmlref{Stc}{Stc} used to describe
- the coverage of the datasets contained in some VO resource.
-
- See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
- }
- \sstsynopsis{
- AstStcCatalogEntryLocation $*$astStcCatalogEntryLocation( AstRegion $*$region,
- int ncoords, AstKeyMap $*$coords[], const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- region
- }{
- Pointer to the encapsulated \htmlref{Region}{Region}.
- }
- \sstsubsection{
- ncoords
- }{
- The length of the {\tt{"}}coords{\tt{"}} array. Supply zero if {\tt{"}}coords{\tt{"}} is NULL.
- }
- \sstsubsection{
- coords
- }{
- Pointer to an array holding {\tt{"}}ncoords{\tt{"}} AstKeyMap pointers (if {\tt{"}}ncoords{\tt{"}}
- is zero, the supplied value is ignored). Each supplied \htmlref{KeyMap}{KeyMap}
- describes the contents of a single STC $<$AstroCoords$>$ element, and
- should have elements with keys given by constants AST\_\_STCNAME,
- AST\_\_STCVALUE, AST\_\_STCERROR, AST\_\_STCRES, AST\_\_STCSIZE,
- AST\_\_STCPIXSZ. Any of these elements may be omitted, but no other
- elements should be included. If supplied, the AST\_\_STCNAME element
- should be a vector of character string pointers holding the {\tt{"}}Name{\tt{"}}
- item for each axis in the coordinate system represented by
- {\tt{"}}region{\tt{"}}.
- Any other supplied elements should be scalar elements, each holding
- a pointer to a Region describing the associated item of ancillary
- information (error, resolution, size, pixel size or value). These
- Regions should describe a volume within the coordinate system
- represented by {\tt{"}}region{\tt{"}}.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new StcCatalogEntryLocation. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astStcCatalogEntryLocation()
- }{
- A pointer to the new StcCatalogEntryLocation.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A deep copy is taken of the supplied Region. This means that
- any subsequent changes made to the encapsulated Region using the
- supplied pointer will have no effect on the Stc.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astStcObsDataLocation\sstlabel{astStcObsDataLocation}
-}{
- Create a StcObsDataLocation
-}{
- \sstdescription{
- This function creates a new \htmlref{StcObsDataLocation}{StcObsDataLocation} and optionally initialises its
- attributes.
-
- The StcObsDataLocation class is a sub-class of \htmlref{Stc}{Stc} used to describe
- the coverage of the datasets contained in some VO resource.
-
- See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
- }
- \sstsynopsis{
- AstStcObsDataLocation $*$astStcObsDataLocation( AstRegion $*$region,
- int ncoords, AstKeyMap $*$coords[], const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- region
- }{
- Pointer to the encapsulated \htmlref{Region}{Region}.
- }
- \sstsubsection{
- ncoords
- }{
- The length of the {\tt{"}}coords{\tt{"}} array. Supply zero if {\tt{"}}coords{\tt{"}} is NULL.
- }
- \sstsubsection{
- coords
- }{
- Pointer to an array holding {\tt{"}}ncoords{\tt{"}} AstKeyMap pointers (if {\tt{"}}ncoords{\tt{"}}
- is zero, the supplied value is ignored). Each supplied \htmlref{KeyMap}{KeyMap}
- describes the contents of a single STC $<$AstroCoords$>$ element, and
- should have elements with keys given by constants AST\_\_STCNAME,
- AST\_\_STCVALUE, AST\_\_STCERROR, AST\_\_STCRES, AST\_\_STCSIZE,
- AST\_\_STCPIXSZ. Any of these elements may be omitted, but no other
- elements should be included. If supplied, the AST\_\_STCNAME element
- should be a vector of character string pointers holding the {\tt{"}}Name{\tt{"}}
- item for each axis in the coordinate system represented by
- {\tt{"}}region{\tt{"}}.
- Any other supplied elements should be scalar elements, each holding
- a pointer to a Region describing the associated item of ancillary
- information (error, resolution, size, pixel size or value). These
- Regions should describe a volume within the coordinate system
- represented by {\tt{"}}region{\tt{"}}.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new StcObsDataLocation. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astStcObsDataLocation()
- }{
- A pointer to the new StcObsDataLocation.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A deep copy is taken of the supplied Region. This means that
- any subsequent changes made to the encapsulated Region using the
- supplied pointer will have no effect on the Stc.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astStcResourceProfile\sstlabel{astStcResourceProfile}
-}{
- Create a StcResourceProfile
-}{
- \sstdescription{
- This function creates a new \htmlref{StcResourceProfile}{StcResourceProfile} and optionally initialises its
- attributes.
-
- The StcResourceProfile class is a sub-class of \htmlref{Stc}{Stc} used to describe
- the coverage of the datasets contained in some VO resource.
-
- See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
- }
- \sstsynopsis{
- AstStcResourceProfile $*$astStcResourceProfile( AstRegion $*$region,
- int ncoords, AstKeyMap $*$coords[], const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- region
- }{
- Pointer to the encapsulated \htmlref{Region}{Region}.
- }
- \sstsubsection{
- ncoords
- }{
- The length of the {\tt{"}}coords{\tt{"}} array. Supply zero if {\tt{"}}coords{\tt{"}} is NULL.
- }
- \sstsubsection{
- coords
- }{
- Pointer to an array holding {\tt{"}}ncoords{\tt{"}} AstKeyMap pointers (if {\tt{"}}ncoords{\tt{"}}
- is zero, the supplied value is ignored). Each supplied \htmlref{KeyMap}{KeyMap}
- describes the contents of a single STC $<$AstroCoords$>$ element, and
- should have elements with keys given by constants AST\_\_STCNAME,
- AST\_\_STCVALUE, AST\_\_STCERROR, AST\_\_STCRES, AST\_\_STCSIZE,
- AST\_\_STCPIXSZ. Any of these elements may be omitted, but no other
- elements should be included. If supplied, the AST\_\_STCNAME element
- should be a vector of character string pointers holding the {\tt{"}}Name{\tt{"}}
- item for each axis in the coordinate system represented by
- {\tt{"}}region{\tt{"}}.
- Any other supplied elements should be scalar elements, each holding
- a pointer to a Region describing the associated item of ancillary
- information (error, resolution, size, pixel size or value). These
- Regions should describe a volume within the coordinate system
- represented by {\tt{"}}region{\tt{"}}.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new StcResourceProfile. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astStcResourceProfile()
- }{
- A pointer to the new StcResourceProfile.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A deep copy is taken of the supplied Region. This means that
- any subsequent changes made to the encapsulated Region using the
- supplied pointer will have no effect on the Stc.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- astStcSearchLocation\sstlabel{astStcSearchLocation}
-}{
- Create a StcSearchLocation
-}{
- \sstdescription{
- This function creates a new \htmlref{StcSearchLocation}{StcSearchLocation} and optionally initialises its
- attributes.
-
- The StcSearchLocation class is a sub-class of \htmlref{Stc}{Stc} used to describe
- the coverage of a VO query.
-
- See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
- }
- \sstsynopsis{
- AstStcResourceProfile $*$astStcSearchLocation( AstRegion $*$region,
- int ncoords, AstKeyMap $*$coords[], const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- region
- }{
- Pointer to the encapsulated \htmlref{Region}{Region}.
- }
- \sstsubsection{
- ncoords
- }{
- The length of the {\tt{"}}coords{\tt{"}} array. Supply zero if {\tt{"}}coords{\tt{"}} is NULL.
- }
- \sstsubsection{
- coords
- }{
- Pointer to an array holding {\tt{"}}ncoords{\tt{"}} AstKeyMap pointers (if {\tt{"}}ncoords{\tt{"}}
- is zero, the supplied value is ignored). Each supplied \htmlref{KeyMap}{KeyMap}
- describes the contents of a single STC $<$AstroCoords$>$ element, and
- should have elements with keys given by constants AST\_\_STCNAME,
- AST\_\_STCVALUE, AST\_\_STCERROR, AST\_\_STCRES, AST\_\_STCSIZE,
- AST\_\_STCPIXSZ. Any of these elements may be omitted, but no other
- elements should be included. If supplied, the AST\_\_STCNAME element
- should be a vector of character string pointers holding the {\tt{"}}Name{\tt{"}}
- item for each axis in the coordinate system represented by
- {\tt{"}}region{\tt{"}}.
- Any other supplied elements should be scalar elements, each holding
- a pointer to a Region describing the associated item of ancillary
- information (error, resolution, size, pixel size or value). These
- Regions should describe a volume within the coordinate system
- represented by {\tt{"}}region{\tt{"}}.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new StcSearchLocation. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astStcSearchLocation()
- }{
- A pointer to the new StcSearchLocation.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A deep copy is taken of the supplied Region. This means that
- any subsequent changes made to the encapsulated Region using the
- supplied pointer will have no effect on the Stc.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- astStcsChan\sstlabel{astStcsChan}
-}{
- Create an StcsChan
-}{
- \sstdescription{
- This function creates a new \htmlref{StcsChan}{StcsChan} and optionally initialises
- its attributes.
-
- A StcsChan is a specialised form of \htmlref{Channel}{Channel} which supports STC-S
- I/O operations. Writing an \htmlref{Object}{Object} to an StcsChan (using
- \htmlref{astWrite}{astWrite}) will, if the Object is suitable, generate an
- STC-S description of that Object, and reading from an StcsChan will
- create a new Object from its STC-S description.
-
- Normally, when you use an StcsChan, you should provide {\tt{"}}source{\tt{"}}
- and {\tt{"}}sink{\tt{"}} functions which connect it to an external data store
- by reading and writing the resulting text. These functions
- should perform any conversions needed between external character
- encodings and the internal ASCII encoding. If no such functions
- are supplied, a Channel will read from standard input and write
- to standard output.
- }
- \sstsynopsis{
- AstStcsChan $*$astStcsChan( const char $*$($*$ source)( void ),
- void ($*$ sink)( const char $*$ ),
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- source
- }{
- Pointer to a source function that takes no arguments and
- returns a pointer to a null-terminated string. This function
- will be used by the StcsChan to obtain lines of input text. On
- each invocation, it should return a pointer to the next input
- line read from some external data store, and a NULL pointer
- when there are no more lines to read.
-
- If {\tt{"}}source{\tt{"}} is NULL, the Channel will read from standard
- input instead.
- }
- \sstsubsection{
- sink
- }{
- Pointer to a sink function that takes a pointer to a
- null-terminated string as an argument and returns void. This
- function will be used by the StcsChan to deliver lines of
- output text. On each invocation, it should deliver the
- contents of the string supplied to some external data store.
-
- If {\tt{"}}sink{\tt{"}} is NULL, the StcsChan will write to standard output
- instead.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new StcsChan. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astStcsChan()
- }{
- A pointer to the new StcsChan.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the external data source or sink uses a character encoding
- other than ASCII, the supplied source and sink functions should
- translate between the external character encoding and the internal
- ASCII encoding used by AST.
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astStripEscapes\sstlabel{astStripEscapes}
-}{
- Remove AST escape sequences from a string
-}{
- \sstdescription{
- This function removes AST escape sequences from a supplied string,
- returning the resulting text as the function value. The behaviour
- of this function can be controlled by invoking the
- \htmlref{astEscapes}{astEscapes} function,
- which can be used to supress or enable the removal of escape
- sequences by this function.
-
- AST escape sequences are used by the \htmlref{Plot}{Plot} class to modify the
- appearance and position of sub-strings within a plotted text string.
- See the {\tt{"}}\htmlref{Escape}{Escape}{\tt{"}} attribute for further information.
- }
- \sstsynopsis{
- const char $*$astStripEscapes( const char $*$text )
- }
- \sstparameters{
- \sstsubsection{
- text
- }{
- Pointer to the string to be checked.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astStripEscapes()
- }{
- Pointer to the modified string. If no escape sequences were found
- in the supplied string, then a copy of the supplied pointer is
- returned. Otherwise, the pointer will point to a static buffer
- holding the modified text. This text will be over-written by
- subsequent invocations of this function. If the astEscapes function
- has been called indicating that escape sequences should not be
- stripped, then the supplied string is returned without change.
- }
- }
-}
-\sstroutine{
- astSwitchMap\sstlabel{astSwitchMap}
-}{
- Create a SwitchMap
-}{
- \sstdescription{
- This function creates a new \htmlref{SwitchMap}{SwitchMap} and optionally initialises
- its attributes.
-
- A SwitchMap is a \htmlref{Mapping}{Mapping} which represents a set of alternate
- Mappings, each of which is used to transform positions within a
- particular region of the input or output coordinate system of the
- SwitchMap.
-
- A SwitchMap can encapsulate any number of Mappings, but they must
- all have the same number of inputs (\htmlref{Nin}{Nin} attribute value) and the
- same number of outputs (\htmlref{Nout}{Nout} attribute value). The SwitchMap itself
- inherits these same values for its Nin and Nout attributes. Each of
- these Mappings represents a {\tt{"}}route{\tt{"}} through the switch, and are
- referred to as {\tt{"}}route{\tt{"}} Mappings below. Each route Mapping transforms
- positions between the input and output coordinate space of the entire
- SwitchMap, but only one Mapping will be used to transform any given
- position. The selection of the appropriate route Mapping to use with
- any given input position is made by another Mapping, called the
- {\tt{"}}selector{\tt{"}} Mapping. Each SwitchMap encapsulates two selector
- Mappings in addition to its route Mappings; one for use with the
- SwitchMap's forward transformation (called the {\tt{"}}forward selector
- Mapping{\tt{"}}), and one for use with the SwitchMap's inverse transformation
- (called the {\tt{"}}inverse selector Mapping{\tt{"}}). The forward selector Mapping
- must have the same number of inputs as the route Mappings, but
- should have only one output. Likewise, the inverse selector Mapping
- must have the same number of outputs as the route Mappings, but
- should have only one input.
-
- When the SwitchMap is used to transform a position in the forward
- direction (from input to output), each supplied input position is
- first transformed by the forward transformation of the forward selector
- Mapping. This produces a single output value for each input position
- referred to as the selector value. The nearest integer to the selector
- value is found, and is used to index the array of route Mappings (the
- first supplied route Mapping has index 1, the second route Mapping has
- index 2, etc). If the nearest integer to the selector value is less
- than 1 or greater than the number of route Mappings, then the SwitchMap
- output position is set to a value of AST\_\_BAD on every axis. Otherwise,
- the forward transformation of the selected route Mapping is used to
- transform the supplied input position to produce the SwitchMap output
- position.
-
- When the SwitchMap is used to transform a position in the inverse
- direction (from {\tt{"}}output{\tt{"}} to {\tt{"}}input{\tt{"}}), each supplied {\tt{"}}output{\tt{"}} position
- is first transformed by the inverse transformation of the inverse
- selector Mapping. This produces a selector value for each {\tt{"}}output{\tt{"}}
- position. Again, the nearest integer to the selector value is found,
- and is used to index the array of route Mappings. If this selector
- index value is within the bounds of the array of route Mappings, then
- the inverse transformation of the selected route Mapping is used to
- transform the supplied {\tt{"}}output{\tt{"}} position to produce the SwitchMap
- {\tt{"}}input{\tt{"}} position. If the selector index value is outside the bounds
- of the array of route Mappings, then the SwitchMap {\tt{"}}input{\tt{"}} position is
- set to a value of AST\_\_BAD on every axis.
-
- In practice, appropriate selector Mappings should be chosen to
- associate a different route Mapping with each region of coordinate
- space. Note that the \htmlref{SelectorMap}{SelectorMap} class of Mapping is particularly
- appropriate for this purpose.
-
- If a compound Mapping contains a SwitchMap in series with its own
- inverse, the combination of the two adjacent SwitchMaps will be
- replaced by a \htmlref{UnitMap}{UnitMap} when the compound Mapping is simplified using
- \htmlref{astSimplify}{astSimplify}.
- }
- \sstsynopsis{
- AstSwitchMap $*$astSwitchMap( AstMapping $*$fsmap, AstMapping $*$ismap,
- int nroute, AstMapping $*$routemaps[],
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- fsmap
- }{
- Pointer to the forward selector Mapping. This must have a
- defined forward transformation, but need not have a defined
- inverse transformation. It must have one output, and the number of
- inputs must match the number of inputs of each of the supplied
- route Mappings.
- NULL
- may be supplied, in which case the SwitchMap will have an undefined
- forward Mapping.
- }
- \sstsubsection{
- ismap
- }{
- Pointer to the inverse selector Mapping. This must have a
- defined inverse transformation, but need not have a defined
- forward transformation. It must have one input, and the number of
- outputs must match the number of outputs of each of the supplied
- route Mappings.
- NULL
- may be supplied, in which case the SwitchMap will have an undefined
- inverse Mapping.
- }
- \sstsubsection{
- nroute
- }{
- The number of supplied route Mappings.
- }
- \sstsubsection{
- routemaps
- }{
- An array of pointers to the route Mappings. All the supplied
- route Mappings must have common values for the Nin and Nout
- attributes, and these values define the number of inputs and
- outputs of the SwitchMap.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new SwitchMap. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astSwitchMap()
- }{
- A pointer to the new SwitchMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Note that the component Mappings supplied are not copied by
- astSwitchMap (the new SwitchMap simply retains a reference to
- them). They may continue to be used for other purposes, but
- should not be deleted. If a SwitchMap containing a copy of its
- component Mappings is required, then a copy of the SwitchMap should
- be made using \htmlref{astCopy}{astCopy}.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astTest\sstlabel{astTest}
-}{
- Test if an Object attribute value is set
-}{
- \sstdescription{
- This function returns a boolean result (0 or 1) to indicate
- whether a value has been explicitly set for one of an \htmlref{Object}{Object}'s
- attributes.
- }
- \sstsynopsis{
- int astTest( AstObject $*$this, const char $*$attrib )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Object.
- }
- \sstsubsection{
- attrib
- }{
- Pointer to a null-terminated character string containing
- the name of the attribute to be tested.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This function applies to all Objects.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astTest()
- }{
- One if a value has previously been explicitly set for the attribute
- (and hasn't been cleared), otherwise zero.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Attribute names are not case sensitive and may be surrounded
- by white space.
-
- \sstitem
- A value of zero will be returned if this function is invoked
- with the AST error status set, or if it should fail for any reason.
-
- \sstitem
- A value of zero will also be returned if this function is used
- to test a read-only attribute, although no error will result.
- }
- }
-}
-\sstroutine{
- astTestFits\sstlabel{astTestFits}
-}{
- See if a named keyword has a defined value in a FitsChan
-}{
- \sstdescription{
- This function serches for a named keyword in a \htmlref{FitsChan}{FitsChan}. If found,
- and if the keyword has a value associated with it, a
- non-zero
- value is returned. If the keyword is not found, or if it does not
- have an associated value, a
- zero
- value is returned.
- }
- \sstsynopsis{
- int astTestFits( AstFitsChan $*$this, const char $*$name, int $*$there )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the FitsChan.
- }
- \sstsubsection{
- name
- }{
- Pointer to a null-terminated character string
- containing the FITS keyword name. This may be a complete FITS
- header card, in which case the keyword to use is extracted from
- it. No more than 80 characters are read from this string.
- }
- \sstsubsection{
- there
- }{
- Pointer to an integer which will be returned holding a non-zero
- value if the keyword was found in the header, and zero otherwise.
- This parameter allows a distinction to be made between the case
- where a keyword is not present, and the case where a keyword is
- present but has no associated value.
- A NULL pointer may be supplied if this information is not
- required.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astTestFits()
- }{
- A value of zero
- is returned if the keyword was not found in the FitsChan or has
- no associated value. Otherwise, a value of
- one
- is returned.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The current card is left unchanged by this function.
-
- \sstitem
- The card following the current card is checked first. If this is
- not the required card, then the rest of the FitsChan is searched,
- starting with the first card added to the FitsChan. Therefore cards
- should be accessed in the order they are stored in the FitsChan (if
- possible) as this will minimise the time spent searching for cards.
-
- \sstitem
- An error will be reported if the keyword name does not conform
- to FITS requirements.
-
- \sstitem
- Zero
- is returned as the function value if an error has already occurred,
- or if this function should fail for any reason.
- }
- }
-}
-\sstroutine{
- astText\sstlabel{astText}
-}{
- Draw a text string for a Plot
-}{
- \sstdescription{
- This function draws a string of text at a position specified in
- the physical coordinate system of a \htmlref{Plot}{Plot}. The physical position
- is transformed into graphical coordinates to determine where the
- text should appear within the plotting area.
- }
- \sstsynopsis{
- void astText( AstPlot $*$this, const char $*$text, const double pos[],
- const float up[], const char $*$just )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Plot.
- }
- \sstsubsection{
- text
- }{
- Pointer to a null-terminated character string containing the
- text to be drawn. Trailing white space is ignored.
- }
- \sstsubsection{
- pos
- }{
- An array, with one element for each axis of the Plot, giving
- the physical coordinates of the point where the reference
- position of the text string is to be placed.
- }
- \sstsubsection{
- up
- }{
- An array holding the components of a vector in the {\tt{"}}up{\tt{"}}
- direction of the text (in graphical coordinates). For
- example, to get horizontal text, the vector \{0.0f,1.0f\} should
- be supplied. For a basic Plot, 2 values should be supplied. For
- a \htmlref{Plot3D}{Plot3D}, 3 values should be supplied, and the actual up vector
- used is the projection of the supplied up vector onto the text plane
- specified by the current value of the Plot3D's Norm attribute.
- }
- \sstsubsection{
- just
- }{
- Pointer to a null-terminated character string identifying the
- reference point for the text being drawn. The first character in
- this string identifies the reference position in the {\tt{"}}up{\tt{"}} direction
- and may be {\tt{"}}B{\tt{"}} (baseline), {\tt{"}}C{\tt{"}} (centre), {\tt{"}}T{\tt{"}} (top) or {\tt{"}}M{\tt{"}} (bottom).
- The second character identifies the side-to-side reference position
- and may be {\tt{"}}L{\tt{"}} (left), {\tt{"}}C{\tt{"}} (centre) or {\tt{"}}R{\tt{"}} (right ). The string is
- case-insensitive, and only the first two characters are significant.
-
- For example, a value of {\tt{"}}BL{\tt{"}} means that the left end of the
- baseline of the original (un-rotated) text is to be drawn at the
- position given by {\tt{"}}pos{\tt{"}}.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The Plot3D class currently does not interpret graphical escape
- sequences contained within text displayed using this method.
-
- \sstitem
- Text is not drawn at positions which have any coordinate equal
- to the value AST\_\_BAD (or where the transformation into
- graphical coordinates yields coordinates containing the value
- AST\_\_BAD).
-
- \sstitem
- If the plotting position is clipped (see \htmlref{astClip}{astClip}), then no
- text is drawn.
-
- \sstitem
- An error results if the base \htmlref{Frame}{Frame} of the Plot is not
- 2-dimensional or (for a Plot3D) 3-dimensional.
-
- \sstitem
- An error also results if the transformation between the
- current and base Frames of the Plot is not defined (i.e. the
- Plot's \htmlref{TranInverse}{TranInverse} attribute is zero).
- }
- }
-}
-\sstroutine{
- astThread\sstlabel{astThread}
-}{
- Determine the thread that owns an Object
-}{
- \sstdescription{
- Returns an integer that indicates whether the supplied \htmlref{Object}{Object} (or
- Object pointer) is currently unlocked, or is currently locked by
- the running thread, or another thread.
- }
- \sstsynopsis{
- int astThread( AstObject $*$this, int ptr )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Object to be checked.
- }
- \sstsubsection{
- ptr
- }{
- If non-zero, returns information about the supplied Object
- pointer, rather than the Object structure itself. See {\tt{"}}Object
- Pointers and Structures{\tt{"}} below.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astThread()
- }{
- A value of AST\_\_UNLOCKED is returned if the Object (or pointer)
- is currently unlocked (i.e. has been unlocked using \htmlref{astUnlock}{astUnlock}
- but has not yet been locked using \htmlref{astLock}{astLock}). A value of
- AST\_\_RUNNING is returned if the Object (or pointer) is currently
- locked by the running thread. A value of AST\_\_OTHER is returned
- if the Object (or pointer) is currently locked by the another
- thread.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function attempts to execute even if the global error
- status is set, but no further error report will be made if it
- subsequently fails under these circumstances.
-
- \sstitem
- This function is only available in the C interface.
-
- \sstitem
- This function always returns AST\_\_RUNNING if the AST library has
- been built without POSIX thread support (i.e. the {\tt{"}}-with-pthreads{\tt{"}}
- option was not specified when running the {\tt{"}}configure{\tt{"}} script).
- }
- }
- \sstdiytopic{
- Object Pointers and Structures
- }{
- At any one time, an AST Object can have several distinct pointers,
- any one of which can be used to access the Object structure. For
- instance, the \htmlref{astClone}{astClone} function will produce a new distinct pointer
- for a given Object. In fact, an AST {\tt{"}}pointer{\tt{"}} is not a real pointer
- at all - it is an identifier for a {\tt{"}}handle{\tt{"}} structure, encoded to
- make it look like a pointer. Each handle contains (amongst othere
- things) a {\tt{"}}real{\tt{"}} pointer to the Object structure. This allows more
- than one handle to refer to the same Object structure. So when you
- call astClone (for instance) you get back an identifier for a new
- handle that refers to the same Object as the supplied handle.
-
- In order to use an Object for anything useful, it must be locked
- for use by the running thread (either implicitly at creation or
- explicitly using astLock). The identity of the thread is stored in
- both the Object structure, and in the handle that was passed to
- astLock (or returned by the constructor function). Thus it is
- possible for a thread to have active pointers for Objects that are
- currently locked by another thread. In general, if such a pointer is
- passed to an AST function an error will be reported indicating that
- the Object is currently locked by another thread. The two exceptions
- to this is that \htmlref{astAnnul}{astAnnul} can be used to annull such a pointer, and
- this function can be used to return information about the pointer.
-
- The other practical consequence of this is that when \htmlref{astEnd}{astEnd} is
- called, all active pointers currently owned by the running thread
- (at the current context level) are annulled. This includes pointers
- for Objects that are currently locked by other threads.
-
- If the {\tt{"}}ptr{\tt{"}} parameter is zero, then the returned value describes
- the Object structure itself. If {\tt{"}}ptr{\tt{"}} is non-zero, then the returned
- value describes the supplied Object pointer (i.e. handle), rather
- than the Object structure.
- }
-}
-\sstroutine{
- astTimeAdd\sstlabel{astTimeAdd}
-}{
- Add a time coordinate conversion to a TimeMap
-}{
- \sstdescription{
- This function adds one of the standard time coordinate
- system conversions listed below to an existing \htmlref{TimeMap}{TimeMap}.
-
- When a TimeMap is first created (using \htmlref{astTimeMap}{astTimeMap}), it simply
- performs a unit (null) \htmlref{Mapping}{Mapping}. By using astTimeAdd (repeatedly
- if necessary), one or more coordinate conversion steps may then
- be added, which the TimeMap will perform in sequence. This allows
- multi-step conversions between a variety of time coordinate
- systems to be assembled out of the building blocks provided by
- this class.
-
- Normally, if a TimeMap's \htmlref{Invert}{Invert} attribute is zero (the default),
- then its forward transformation is performed by carrying out
- each of the individual coordinate conversions specified by
- astTimeAdd in the order given (i.e. with the most recently added
- conversion applied last).
-
- This order is reversed if the TimeMap's Invert attribute is
- non-zero (or if the inverse transformation is requested by any
- other means) and each individual coordinate conversion is also
- replaced by its own inverse. This process inverts the overall
- effect of the TimeMap. In this case, the first conversion to be
- applied would be the inverse of the one most recently added.
- }
- \sstsynopsis{
- void astTimeAdd( AstTimeMap $*$this, const char $*$cvt, const double args[] )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the TimeMap.
- }
- \sstsubsection{
- cvt
- }{
- Pointer to a null-terminated string which identifies the
- time coordinate conversion to be added to the
- TimeMap. See the {\tt{"}}Available Conversions{\tt{"}} section for details of
- those available.
- }
- \sstsubsection{
- args
- }{
- An array containing argument values for the time
- coordinate conversion. The number of arguments required, and
- hence the number of array elements used, depends on the
- conversion specified (see the {\tt{"}}Available Conversions{\tt{"}}
- section). This array is ignored
- and a NULL pointer may be supplied
- if no arguments are needed.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When assembling a multi-stage conversion, it can sometimes be
- difficult to determine the most economical conversion path. A solution
- to this is to include all the steps which are (logically) necessary,
- but then to use
- \htmlref{astSimplify}{astSimplify} to simplify the resulting
- TimeMap. The simplification process will eliminate any steps
- which turn out not to be needed.
-
- \sstitem
- This function does not check to ensure that the sequence of
- coordinate conversions added to a TimeMap is physically
- meaningful.
- }
- }
- \sstdiytopic{
- Available Conversions
- }{
- The following strings (which are case-insensitive) may be supplied
- via the {\tt{"}}cvt{\tt{"}} parameter to indicate which time coordinate
- conversion is to be added to the TimeMap. Where arguments are needed by
- the conversion, they are listed in parentheses. Values for
- these arguments should be given, via the {\tt{"}}args{\tt{"}} array, in the
- order indicated. Units and argument names are described at the end of
- the list of conversions, and {\tt{"}}MJD{\tt{"}} means Modified Julian Date.
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}MJDTOMJD{\tt{"}} (MJDOFF1,MJDOFF2): Convert MJD from one offset to another.
-
- \sstitem
- {\tt{"}}MJDTOJD{\tt{"}} (MJDOFF,JDOFF): Convert MJD to Julian Date.
-
- \sstitem
- {\tt{"}}JDTOMJD{\tt{"}} (JDOFF,MJDOFF): Convert Julian Date to MJD.
-
- \sstitem
- {\tt{"}}MJDTOBEP{\tt{"}} (MJDOFF,BEPOFF): Convert MJD to Besselian epoch.
-
- \sstitem
- {\tt{"}}BEPTOMJD{\tt{"}} (BEPOFF,MJDOFF): Convert Besselian epoch to MJD.
-
- \sstitem
- {\tt{"}}MJDTOJEP{\tt{"}} (MJDOFF,JEPOFF): Convert MJD to Julian epoch.
-
- \sstitem
- {\tt{"}}JEPTOMJD{\tt{"}} (JEPOFF,MJDOFF): Convert Julian epoch to MJD.
-
- \sstitem
- {\tt{"}}TAITOUTC{\tt{"}} (MJDOFF): Convert a TAI MJD to a UTC MJD.
-
- \sstitem
- {\tt{"}}UTCTOTAI{\tt{"}} (MJDOFF): Convert a UTC MJD to a TAI MJD.
-
- \sstitem
- {\tt{"}}TAITOTT{\tt{"}} (MJDOFF): Convert a TAI MJD to a TT MJD.
-
- \sstitem
- {\tt{"}}TTTOTAI{\tt{"}} (MJDOFF): Convert a TT MJD to a TAI MJD.
-
- \sstitem
- {\tt{"}}TTTOTDB{\tt{"}} (MJDOFF, OBSLON, OBSLAT, OBSALT): Convert a TT MJD to a TDB MJD.
-
- \sstitem
- {\tt{"}}TDBTOTT{\tt{"}} (MJDOFF, OBSLON, OBSLAT, OBSALT): Convert a TDB MJD to a TT MJD.
-
- \sstitem
- {\tt{"}}TTTOTCG{\tt{"}} (MJDOFF): Convert a TT MJD to a TCG MJD.
-
- \sstitem
- {\tt{"}}TCGTOTT{\tt{"}} (MJDOFF): Convert a TCG MJD to a TT MJD.
-
- \sstitem
- {\tt{"}}TDBTOTCB{\tt{"}} (MJDOFF): Convert a TDB MJD to a TCB MJD.
-
- \sstitem
- {\tt{"}}TCBTOTDB{\tt{"}} (MJDOFF): Convert a TCB MJD to a TDB MJD.
-
- \sstitem
- {\tt{"}}UTTOGMST{\tt{"}} (MJDOFF): Convert a UT MJD to a GMST MJD.
-
- \sstitem
- {\tt{"}}GMSTTOUT{\tt{"}} (MJDOFF): Convert a GMST MJD to a UT MJD.
-
- \sstitem
- {\tt{"}}GMSTTOLMST{\tt{"}} (MJDOFF, OBSLON, OBSLAT): Convert a GMST MJD to a LMST MJD.
-
- \sstitem
- {\tt{"}}LMSTTOGMST{\tt{"}} (MJDOFF, OBSLON, OBSLAT): Convert a LMST MJD to a GMST MJD.
-
- \sstitem
- {\tt{"}}LASTTOLMST{\tt{"}} (MJDOFF, OBSLON, OBSLAT): Convert a GMST MJD to a LMST MJD.
-
- \sstitem
- {\tt{"}}LMSTTOLAST{\tt{"}} (MJDOFF, OBSLON, OBSLAT): Convert a LMST MJD to a GMST MJD.
-
- \sstitem
- {\tt{"}}UTTOUTC{\tt{"}} (DUT1): Convert a UT1 MJD to a UTC MJD.
-
- \sstitem
- {\tt{"}}UTCTOUT{\tt{"}} (DUT1): Convert a UTC MJD to a UT1 MJD.
-
- \sstitem
- {\tt{"}}LTTOUTC{\tt{"}} (LTOFF): Convert a Local Time MJD to a UTC MJD.
-
- \sstitem
- {\tt{"}}UTCTOLT{\tt{"}} (LTOFF): Convert a UTC MJD to a Local Time MJD.
-
- }
- The units for the values processed by the above conversions are as
- follows:
-
- \sstitemlist{
-
- \sstitem
- Julian epochs and offsets: Julian years
-
- \sstitem
- Besselian epochs and offsets: Tropical years
-
- \sstitem
- Modified Julian Dates and offsets: days
-
- \sstitem
- Julian Dates and offsets: days
-
- }
- The arguments used in the above conversions are the zero-points
- used by the
- astTransform function.
- The axis values supplied and returned by
- astTransform
- are offsets away from these zero-points:
-
- \sstitemlist{
-
- \sstitem
- MJDOFF: The zero-point being used with MJD values.
-
- \sstitem
- JDOFF: The zero-point being used with Julian Date values.
-
- \sstitem
- BEPOFF: The zero-point being used with Besselian epoch values.
-
- \sstitem
- JEPOFF: The zero-point being used with Julian epoch values.
-
- \sstitem
- OBSLON: Observer longitude in radians ($+$ve westwards).
-
- \sstitem
- OBSLAT: Observer geodetic latitude (IAU 1975) in radians ($+$ve northwards).
-
- \sstitem
- OBSALT: Observer geodetic altitude (IAU 1975) in metres.
-
- \sstitem
- DUT1: The UT1-UTC value to use.
-
- \sstitem
- LTOFF: The offset between Local Time and UTC (in hours, positive
- for time zones east of Greenwich).
- }
- }
-}
-\sstroutine{
- astTimeFrame\sstlabel{astTimeFrame}
-}{
- Create a TimeFrame
-}{
- \sstdescription{
- This function creates a new \htmlref{TimeFrame}{TimeFrame} and optionally initialises
- its attributes.
-
- A TimeFrame is a specialised form of one-dimensional \htmlref{Frame}{Frame} which
- represents various coordinate systems used to describe positions in
- time.
-
- A TimeFrame represents a moment in time as either an Modified Julian
- Date (MJD), a Julian Date (JD), a Besselian epoch or a Julian epoch,
- as determined by the \htmlref{System}{System} attribute. Optionally, a zero point can be
- specified (using attribute \htmlref{TimeOrigin}{TimeOrigin}) which results in the TimeFrame
- representing time offsets from the specified zero point.
-
- Even though JD and MJD are defined as being in units of days, the
- TimeFrame class allows other units to be used (via the Unit attribute)
- on the basis of simple scalings (60 seconds = 1 minute, 60 minutes = 1
- hour, 24 hours = 1 day, 365.25 days = 1 year). Likewise, Julian epochs
- can be described in units other than the usual years. Besselian epoch
- are always represented in units of (tropical) years.
-
- The \htmlref{TimeScale}{TimeScale} attribute allows the time scale to be specified (that
- is, the physical proces used to define the rate of flow of time).
- MJD, JD and Julian epoch can be used to represent a time in any
- supported time scale. However, Besselian epoch may only be used with the
- {\tt{"}}TT{\tt{"}} (Terrestrial Time) time scale. The list of supported time scales
- includes universal time and siderial time. Strictly, these represent
- angles rather than time scales, but are included in the list since
- they are in common use and are often thought of as time scales.
-
- When a time value is formatted it can be formated either as a simple
- floating point value, or as a Gregorian date (see the Format
- attribute).
- }
- \sstsynopsis{
- AstTimeFrame $*$astTimeFrame( const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new TimeFrame. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- If no initialisation is required, a zero-length string may be
- supplied.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astTimeFrame()
- }{
- A pointer to the new TimeFrame.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When conversion between two TimeFrames is requested (as when
- supplying TimeFrames to \htmlref{astConvert}{astConvert}),
- account will be taken of the nature of the time coordinate systems
- they represent, together with any qualifying time scale, offset,
- unit, etc. The \htmlref{AlignSystem}{AlignSystem} and \htmlref{AlignTimeScale}{AlignTimeScale} attributes will also be
- taken into account.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astTimeMap\sstlabel{astTimeMap}
-}{
- Create a TimeMap
-}{
- \sstdescription{
- This function creates a new \htmlref{TimeMap}{TimeMap} and optionally initialises
- its attributes.
-
- A TimeMap is a specialised form of 1-dimensional \htmlref{Mapping}{Mapping} which can be
- used to represent a sequence of conversions between standard time
- coordinate systems.
-
- When a TimeMap is first created, it simply performs a unit
- (null) Mapping. Using the \htmlref{astTimeAdd}{astTimeAdd}
- function, a series of coordinate conversion steps may then be
- added. This allows multi-step conversions between a variety of
- time coordinate systems to be assembled out of a set of building
- blocks.
-
- For details of the individual coordinate conversions available,
- see the description of the astTimeAdd function.
- }
- \sstsynopsis{
- AstTimeMap $*$astTimeMap( int flags, const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- flags
- }{
- This parameter is reserved for future use and should currently
- always be set to zero.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new TimeMap. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- If no initialisation is required, a zero-length string may be
- supplied.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astTimeMap()
- }{
- A pointer to the new TimeMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The nature and units of the coordinate values supplied for the
- first input (i.e. the time input) of a TimeMap must be appropriate
- to the first conversion step applied by the TimeMap. For instance, if
- the first conversion step is {\tt{"}}MJDTOBEP{\tt{"}} (Modified Julian Date to
- Besselian epoch) then the coordinate values for the first input should
- be date in units of days. Similarly, the nature and units of the
- coordinate values returned by a TimeMap will be determined by the
- last conversion step applied by the TimeMap.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astTran1\sstlabel{astTran1}
-}{
- Transform 1-dimensional coordinates
-}{
- \sstdescription{
- This function applies a \htmlref{Mapping}{Mapping} to transform the coordinates of
- a set of points in one dimension.
- }
- \sstsynopsis{
- void astTran1( AstMapping $*$this, int npoint, const double xin[],
- int forward, double xout[] )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Mapping to be applied.
- }
- \sstsubsection{
- npoint
- }{
- The number of points to be transformed.
- }
- \sstsubsection{
- xin
- }{
- An array of {\tt{"}}npoint{\tt{"}} coordinate values for the input
- (untransformed) points.
- }
- \sstsubsection{
- forward
- }{
- A non-zero value indicates that the Mapping's forward
- coordinate transformation is to be applied, while a zero
- value indicates that the inverse transformation should be
- used.
- }
- \sstsubsection{
- xout
- }{
- An array (with {\tt{"}}npoint{\tt{"}} elements) into which the
- coordinates of the output (transformed) points will be written.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The Mapping supplied must have the value 1 for both its \htmlref{Nin}{Nin}
- and \htmlref{Nout}{Nout} attributes.
- }
- }
-}
-\sstroutine{
- astTran2\sstlabel{astTran2}
-}{
- Transform 2-dimensional coordinates
-}{
- \sstdescription{
- This function applies a \htmlref{Mapping}{Mapping} to transform the coordinates of
- a set of points in two dimensions.
- }
- \sstsynopsis{
- void astTran2( AstMapping $*$this,
- int npoint, const double xin[], const double yin[],
- int forward, double xout[], double yout[] )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Mapping to be applied.
- }
- \sstsubsection{
- npoint
- }{
- The number of points to be transformed.
- }
- \sstsubsection{
- xin
- }{
- An array of {\tt{"}}npoint{\tt{"}} X-coordinate values for the input
- (untransformed) points.
- }
- \sstsubsection{
- yin
- }{
- An array of {\tt{"}}npoint{\tt{"}} Y-coordinate values for the input
- (untransformed) points.
- }
- \sstsubsection{
- forward
- }{
- A non-zero value indicates that the Mapping's forward
- coordinate transformation is to be applied, while a zero
- value indicates that the inverse transformation should be
- used.
- }
- \sstsubsection{
- xout
- }{
- An array (with {\tt{"}}npoint{\tt{"}} elements) into which the
- X-coordinates of the output (transformed) points will be written.
- }
- \sstsubsection{
- yout
- }{
- An array (with {\tt{"}}npoint{\tt{"}} elements) into which the
- Y-coordinates of the output (transformed) points will be written.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The Mapping supplied must have the value 2 for both its \htmlref{Nin}{Nin}
- and \htmlref{Nout}{Nout} attributes.
- }
- }
-}
-\sstroutine{
- astTranGrid\sstlabel{astTranGrid}
-}{
- Transform a grid of positions
-}{
- \sstdescription{
- This function uses the supplied \htmlref{Mapping}{Mapping} to transforms a regular square
- grid of points covering a specified box. It attempts to do this
- quickly by first approximating the Mapping with a linear transformation
- applied over the whole region of the input grid which is being used.
- If this proves to be insufficiently accurate, the input region is
- sub-divided into two along its largest dimension and the process is
- repeated within each of the resulting sub-regions. This process of
- sub-division continues until a sufficiently good linear approximation
- is found, or the region to which it is being applied becomes too small
- (in which case the original Mapping is used directly).
- }
- \sstsynopsis{
- void astTranGrid( AstMapping $*$this, int ncoord\_in,
- const int lbnd[], const int ubnd[],
- double tol, int maxpix, int forward,
- int ncoord\_out, int outdim, double $*$out );
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Mapping to be applied.
- }
- \sstsubsection{
- ncoord\_in
- }{
- The number of coordinates being supplied for each box corner
- (i.e. the number of dimensions of the space in which the
- input points reside).
- }
- \sstsubsection{
- lbnd
- }{
- Pointer to an array of integers, with {\tt{"}}ncoord\_in{\tt{"}} elements,
- containing the coordinates of the centre of the first pixel
- in the input grid along each dimension.
- }
- \sstsubsection{
- ubnd
- }{
- Pointer to an array of integers, with {\tt{"}}ncoord\_in{\tt{"}} elements,
- containing the coordinates of the centre of the last pixel in
- the input grid along each dimension.
-
- Note that {\tt{"}}lbnd{\tt{"}} and {\tt{"}}ubnd{\tt{"}} together define the shape
- and size of the input grid, its extent along a particular
- (j'th) dimension being ubnd[j]-lbnd[j]$+$1 (assuming the
- index {\tt{"}}j{\tt{"}} to be zero-based). They also define
- the input grid's coordinate system, each pixel having unit
- extent along each dimension with integral coordinate values
- at its centre.
- }
- \sstsubsection{
- tol
- }{
- The maximum tolerable geometrical distortion which may be
- introduced as a result of approximating non-linear Mappings
- by a set of piece-wise linear transformations. This should be
- expressed as a displacement within the output coordinate system
- of the Mapping.
-
- If piece-wise linear approximation is not required, a value
- of zero may be given. This will ensure that the Mapping is
- used without any approximation, but may increase execution
- time.
-
- If the value is too high, discontinuities between the linear
- approximations used in adjacent panel will be higher. If this
- is a problem, reduce the tolerance value used.
- }
- \sstsubsection{
- maxpix
- }{
- A value which specifies an initial scale size (in input grid points)
- for the adaptive algorithm which approximates non-linear Mappings
- with piece-wise linear transformations. Normally, this should
- be a large value (larger than any dimension of the region of
- the input grid being used). In this case, a first attempt to
- approximate the Mapping by a linear transformation will be
- made over the entire input region.
-
- If a smaller value is used, the input region will first be
- divided into sub-regions whose size does not exceed {\tt{"}}maxpix{\tt{"}}
- grid points in any dimension. Only at this point will attempts
- at approximation commence.
-
- This value may occasionally be useful in preventing false
- convergence of the adaptive algorithm in cases where the
- Mapping appears approximately linear on large scales, but has
- irregularities (e.g. holes) on smaller scales. A value of,
- say, 50 to 100 grid points can also be employed as a safeguard
- in general-purpose software, since the effect on performance is
- minimal.
-
- If too small a value is given, it will have the effect of
- inhibiting linear approximation altogether (equivalent to
- setting {\tt{"}}tol{\tt{"}} to zero). Although this may degrade
- performance, accurate results will still be obtained.
- }
- \sstsubsection{
- forward
- }{
- A non-zero value indicates that the Mapping's forward
- coordinate transformation is to be applied, while a zero
- value indicates that the inverse transformation should be
- used.
- }
- \sstsubsection{
- ncoord\_out
- }{
- The number of coordinates being generated by the Mapping for
- each output point (i.e. the number of dimensions of the
- space in which the output points reside). This need not be
- the same as {\tt{"}}ncoord\_in{\tt{"}}.
- }
- \sstsubsection{
- outdim
- }{
- The number of elements along the second dimension of the {\tt{"}}out{\tt{"}}
- array (which will contain the output coordinates). The value
- given should not be less than the number of points in the grid.
- }
- \sstsubsection{
- out
- }{
- The address of the first element in a 2-dimensional array of
- shape {\tt{"}}[ncoord\_out][outdim]{\tt{"}}, into
- which the coordinates of the output (transformed) points will
- be written. These will be stored such that the value of
- coordinate number {\tt{"}}coord{\tt{"}} for output point number {\tt{"}}point{\tt{"}}
- will be found in element {\tt{"}}out[coord][point]{\tt{"}}.
- The points are ordered such that the first axis of the input
- grid changes most rapidly. For example, if the input grid is
- 2-dimensional and extends from (2,-1) to (3,1), the output
- points will be stored in the order (2,-1), (3, -1), (2,0), (3,0),
- (2,1), (3,1).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the forward coordinate transformation is being applied, the
- Mapping supplied must have the value of {\tt{"}}ncoord\_in{\tt{"}} for its \htmlref{Nin}{Nin}
- attribute and the value of {\tt{"}}ncoord\_out{\tt{"}} for its \htmlref{Nout}{Nout} attribute. If
- the inverse transformation is being applied, these values should
- be reversed.
- }
- }
-}
-\sstroutine{
- astTranMap\sstlabel{astTranMap}
-}{
- Create a TranMap
-}{
- \sstdescription{
- This function creates a new \htmlref{TranMap}{TranMap} and optionally initialises
- its attributes.
-
- A TranMap is a \htmlref{Mapping}{Mapping} which combines the forward transformation of
- a supplied Mapping with the inverse transformation of another
- supplied Mapping, ignoring the un-used transformation in each
- Mapping (indeed the un-used transformation need not exist).
-
- When the forward transformation of the TranMap is referred to, the
- transformation actually used is the forward transformation of the
- first Mapping supplied when the TranMap was constructed. Likewise,
- when the inverse transformation of the TranMap is referred to, the
- transformation actually used is the inverse transformation of the
- second Mapping supplied when the TranMap was constructed.
- }
- \sstsynopsis{
- AstTranMap $*$astTranMap( AstMapping $*$map1, AstMapping $*$map2,
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- map1
- }{
- Pointer to the first component Mapping, which defines the
- forward transformation.
- }
- \sstsubsection{
- map2
- }{
- Pointer to the second component Mapping, which defines the
- inverse transformation.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new TranMap. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astTranMap()
- }{
- A pointer to the new TranMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The number of output coordinates generated by the two Mappings
- (their \htmlref{Nout}{Nout} attribute) must be equal, as must the number of input
- coordinates accepted by each Mapping (their \htmlref{Nin}{Nin} attribute).
-
- \sstitem
- The forward transformation of the first Mapping must exist.
-
- \sstitem
- The inverse transformation of the second Mapping must exist.
-
- \sstitem
- Note that the component Mappings supplied are not copied by
- astTranMap (the new TranMap simply retains a reference to
- them). They may continue to be used for other purposes, but
- should not be deleted. If a TranMap containing a copy of its
- component Mappings is required, then a copy of the TranMap should
- be made using \htmlref{astCopy}{astCopy}.
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- astTranN\sstlabel{astTranN}
-}{
- Transform N-dimensional coordinates
-}{
- \sstdescription{
- This function applies a \htmlref{Mapping}{Mapping} to transform the coordinates of
- a set of points in an arbitrary number of dimensions. It is the
- appropriate routine to use if the coordinates are not purely 1-
- or 2-dimensional and are stored in a single array (which they
- need not fill completely).
-
- If the coordinates are not stored in a single array, then the
- \htmlref{astTranP}{astTranP} function might be more suitable.
- }
- \sstsynopsis{
- void astTranN( AstMapping $*$this, int npoint,
- int ncoord\_in, int indim, const double $*$in,
- int forward,
- int ncoord\_out, int outdim, double $*$out )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Mapping to be applied.
- }
- \sstsubsection{
- npoint
- }{
- The number of points to be transformed.
- }
- \sstsubsection{
- ncoord\_in
- }{
- The number of coordinates being supplied for each input point
- (i.e. the number of dimensions of the space in which the
- input points reside).
- }
- \sstsubsection{
- indim
- }{
- The number of elements along the second dimension of the {\tt{"}}in{\tt{"}}
- array (which contains the input coordinates). This value is
- required so that the coordinate values can be correctly
- located if they do not entirely fill this array. The value
- given should not be less than {\tt{"}}npoint{\tt{"}}.
- }
- \sstsubsection{
- in
- }{
- The address of the first element in a 2-dimensional array of
- shape {\tt{"}}[ncoord\_in][indim]{\tt{"}},
- containing the coordinates of the input (untransformed)
- points. These should be stored such that the value of
- coordinate number {\tt{"}}coord{\tt{"}} for input point number {\tt{"}}point{\tt{"}} is
- found in element {\tt{"}}in[coord][point]{\tt{"}}.
- }
- \sstsubsection{
- forward
- }{
- A non-zero value indicates that the Mapping's forward
- coordinate transformation is to be applied, while a zero
- value indicates that the inverse transformation should be
- used.
- }
- \sstsubsection{
- ncoord\_out
- }{
- The number of coordinates being generated by the Mapping for
- each output point (i.e. the number of dimensions of the
- space in which the output points reside). This need not be
- the same as {\tt{"}}ncoord\_in{\tt{"}}.
- }
- \sstsubsection{
- outdim
- }{
- The number of elements along the second dimension of the {\tt{"}}out{\tt{"}}
- array (which will contain the output coordinates). This value
- is required so that the coordinate values can be correctly
- located if they will not entirely fill this array. The value
- given should not be less than {\tt{"}}npoint{\tt{"}}.
- }
- \sstsubsection{
- out
- }{
- The address of the first element in a 2-dimensional array of
- shape {\tt{"}}[ncoord\_out][outdim]{\tt{"}}, into
- which the coordinates of the output (transformed) points will
- be written. These will be stored such that the value of
- coordinate number {\tt{"}}coord{\tt{"}} for output point number {\tt{"}}point{\tt{"}}
- will be found in element {\tt{"}}out[coord][point]{\tt{"}}.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the forward coordinate transformation is being applied, the
- Mapping supplied must have the value of {\tt{"}}ncoord\_in{\tt{"}} for its \htmlref{Nin}{Nin}
- attribute and the value of {\tt{"}}ncoord\_out{\tt{"}} for its \htmlref{Nout}{Nout} attribute. If
- the inverse transformation is being applied, these values should
- be reversed.
- }
- }
-}
-\sstroutine{
- astTranP\sstlabel{astTranP}
-}{
- Transform N-dimensional coordinates held in separate arrays
-}{
- \sstdescription{
- This function applies a \htmlref{Mapping}{Mapping} to transform the coordinates of
- a set of points in an arbitrary number of dimensions. It is the
- appropriate routine to use if the coordinates are not purely 1-
- or 2-dimensional and are stored in separate arrays, since each
- coordinate array is located by supplying a separate pointer to
- it.
-
- If the coordinates are stored in a single (2-dimensional) array,
- then the \htmlref{astTranN}{astTranN} function might be more suitable.
- }
- \sstsynopsis{
- void astTranP( AstMapping $*$this, int npoint,
- int ncoord\_in, const double $*$ptr\_in[],
- int forward, int ncoord\_out, double $*$ptr\_out[] )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Mapping to be applied.
- }
- \sstsubsection{
- npoint
- }{
- The number of points to be transformed.
- }
- \sstsubsection{
- ncoord\_in
- }{
- The number of coordinates being supplied for each input point
- (i.e. the number of dimensions of the space in which the
- input points reside).
- }
- \sstsubsection{
- ptr\_in
- }{
- An array of pointers to double, with {\tt{"}}ncoord\_in{\tt{"}}
- elements. Element {\tt{"}}ptr\_in[coord]{\tt{"}} should point at the first
- element of an array of double (with {\tt{"}}npoint{\tt{"}} elements) which
- contain the values of coordinate number {\tt{"}}coord{\tt{"}} for each
- input (untransformed) point. The value of coordinate number
- {\tt{"}}coord{\tt{"}} for input point number {\tt{"}}point{\tt{"}} is therefore given by
- {\tt{"}}ptr\_in[coord][point]{\tt{"}} (assuming both indices are
- zero-based).
- }
- \sstsubsection{
- forward
- }{
- A non-zero value indicates that the Mapping's forward
- coordinate transformation is to be applied, while a zero
- value indicates that the inverse transformation should be
- used.
- }
- \sstsubsection{
- ncoord\_out
- }{
- The number of coordinates being generated by the Mapping for
- each output point (i.e. the number of dimensions of the space
- in which the output points reside). This need not be the same
- as {\tt{"}}ncoord\_in{\tt{"}}.
- }
- \sstsubsection{
- ptr\_out
- }{
- An array of pointers to double, with {\tt{"}}ncoord\_out{\tt{"}}
- elements. Element {\tt{"}}ptr\_out[coord]{\tt{"}} should point at the first
- element of an array of double (with {\tt{"}}npoint{\tt{"}} elements) into
- which the values of coordinate number {\tt{"}}coord{\tt{"}} for each output
- (transformed) point will be written. The value of coordinate
- number {\tt{"}}coord{\tt{"}} for output point number {\tt{"}}point{\tt{"}} will therefore
- be found in {\tt{"}}ptr\_out[coord][point]{\tt{"}}.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the forward coordinate transformation is being applied, the
- Mapping supplied must have the value of {\tt{"}}ncoord\_in{\tt{"}} for its \htmlref{Nin}{Nin}
- attribute and the value of {\tt{"}}ncoord\_out{\tt{"}} for its \htmlref{Nout}{Nout}
- attribute. If the inverse transformation is being applied, these
- values should be reversed.
-
- \sstitem
- This routine is not available in the Fortran 77 interface to
- the AST library.
- }
- }
-}
-\sstroutine{
- astTune\sstlabel{astTune}
-}{
- Set or get an AST global tuning parameter
-}{
- \sstdescription{
- This function returns the current value of an AST global tuning
- parameter, optionally storing a new value for the parameter.
- }
- \sstsynopsis{
- int astTune( const char $*$name, int value )
- }
- \sstparameters{
- \sstsubsection{
- name
- }{
- The name of the tuning parameter (case-insensitive).
- }
- \sstsubsection{
- value
- }{
- The new value for the tuning parameter. If this is AST\_\_TUNULL,
- the existing current value will be retained.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astTune()
- }{
- The original value of the tuning parameter. A default value will
- be returned if no value has been set for the parameter.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function attempts to execute even if the AST error
- status is set
- on entry, although no further error report will be
- made if it subsequently fails under these circumstances.
-
- \sstitem
- All threads in a process share the same AST tuning parameters
- values.
- }
- }
- \sstdiylist{
- Tuning Parameters
- }{
- \sstsubsection{
- ObjectCaching
- }{
- A boolean flag which indicates what should happen
- to the memory occupied by an AST \htmlref{Object}{Object} when the Object is deleted
- (i.e. when its reference count falls to zero or it is deleted using
- \htmlref{astDelete}{astDelete}).
- If this is zero, the memory is simply freed using the systems {\tt{"}}free{\tt{"}}
- function. If it is non-zero, the memory is not freed. Instead a
- pointer to it is stored in a pool of such pointers, all of which
- refer to allocated but currently unused blocks of memory. This allows
- AST to speed up subsequent Object creation by re-using previously
- allocated memory blocks rather than allocating new memory using the
- systems malloc function. The default value for this parameter is
- zero. Setting it to a non-zero value will result in Object memory
- being cached in future. Setting it back to zero causes any memory
- blocks currently in the pool to be freed. Note, this tuning parameter
- only controls the caching of memory used to store AST Objects. To
- cache other memory blocks allocated by AST, use MemoryCaching.
- }
- \sstsubsection{
- MemoryCaching
- }{
- A boolean flag similar to ObjectCaching except
- that it controls caching of all memory blocks of less than 300 bytes
- allocated by AST (whether for internal or external use), not just
- memory used to store AST Objects.
- }
- }
-}
-\sstroutine{
- astUinterp\sstlabel{astUinterp}
-}{
- Perform sub-pixel interpolation on a grid of data
-}{
- \sstdescription{
- This is a fictitious function which does not actually
- exist. Instead, this description constitutes a template so that
- you may implement a function with this interface for yourself
- (and give it any name you wish). A pointer to such a function
- may be passed via the {\tt{"}}finterp{\tt{"}} parameter of the \htmlref{astResample$<$X$>$}{astResampleX}
- functions (q.v.) in order to perform sub-pixel interpolation
- during resampling of gridded data (you must also set the
- {\tt{"}}interp{\tt{"}} parameter of astResample$<$X$>$ to the value
- AST\_\_UINTERP). This allows you to use your own interpolation
- algorithm in addition to those which are pre-defined.
-
- The function interpolates an input grid of data (and,
- optionally, processes associated statistical variance estimates)
- at a specified set of points.
- }
- \sstsynopsis{
- void astUinterp( int ndim\_in, const int lbnd\_in[], const int ubnd\_in[],
- const $<$Xtype$>$ in[], const $<$Xtype$>$ in\_var[],
- int npoint, const int offset[],
- const double $*$const coords[], const double params[],
- int flags, $<$Xtype$>$ badval,
- $<$Xtype$>$ out[], $<$Xtype$>$ out\_var[], int $*$nbad )
- }
- \sstparameters{
- \sstsubsection{
- ndim\_in
- }{
- The number of dimensions in the input grid. This will be at
- least one.
- }
- \sstsubsection{
- lbnd\_in
- }{
- Pointer to an array of integers, with {\tt{"}}ndim\_in{\tt{"}} elements,
- containing the coordinates of the centre of the first pixel
- in the input grid along each dimension.
- }
- \sstsubsection{
- ubnd\_in
- }{
- Pointer to an array of integers, with {\tt{"}}ndim\_in{\tt{"}} elements,
- containing the coordinates of the centre of the last pixel in
- the input grid along each dimension.
-
- Note that {\tt{"}}lbnd\_in{\tt{"}} and {\tt{"}}ubnd\_in{\tt{"}} together define the shape,
- size and coordinate system of the input grid in the same
- way as they do in astResample$<$X$>$.
- }
- \sstsubsection{
- in
- }{
- Pointer to an array, with one element for each pixel in the
- input grid, containing the input data. This will be the same
- array as was passed to astResample$<$X$>$ via the {\tt{"}}in{\tt{"}} parameter.
- The numerical type of this array should match that of the
- data being processed.
- }
- \sstsubsection{
- in\_var
- }{
- Pointer to an optional second array with the same size and
- type as the {\tt{"}}in{\tt{"}} array. If given, this will contain the set
- of variance values associated with the input data and will be
- the same array as was passed to astResample$<$X$>$ via the
- {\tt{"}}in\_var{\tt{"}} parameter.
-
- If no variance values are being processed, this will be a
- NULL pointer.
- }
- \sstsubsection{
- npoint
- }{
- The number of points at which the input grid is to be
- interpolated. This will be at least one.
- }
- \sstsubsection{
- offset
- }{
- Pointer to an array of integers with {\tt{"}}npoint{\tt{"}} elements. For
- each interpolation point, this will contain the zero-based
- index in the {\tt{"}}out{\tt{"}} (and {\tt{"}}out\_var{\tt{"}}) array(s) at which the
- interpolated value (and its variance, if required) should be
- stored. For example, the interpolated value for point number
- {\tt{"}}point{\tt{"}} should be stored in {\tt{"}}out[offset[point]]{\tt{"}} (assuming
- the index {\tt{"}}point{\tt{"}} is zero-based).
- }
- \sstsubsection{
- coords
- }{
- An array of pointers to double, with {\tt{"}}ndim\_in{\tt{"}}
- elements. Element {\tt{"}}coords[coord]{\tt{"}} will point at the first
- element of an array of double (with {\tt{"}}npoint{\tt{"}} elements) which
- contains the values of coordinate number {\tt{"}}coord{\tt{"}} for each
- interpolation point. The value of coordinate number {\tt{"}}coord{\tt{"}}
- for interpolation point number {\tt{"}}point{\tt{"}} is therefore given by
- {\tt{"}}coords[coord][point]{\tt{"}} (assuming both indices are
- zero-based).
-
- If any interpolation point has any of its coordinates equal
- to the value AST\_\_BAD (as defined in the {\tt{"}}ast.h{\tt{"}} header
- file), then the corresponding output data (and variance)
- should either be set to the value given by {\tt{"}}badval{\tt{"}},
- or left unchanged, depending on whether the AST\_\_NOBAD flag is
- specified by {\tt{"}}flags{\tt{"}}.
- }
- \sstsubsection{
- params
- }{
- This will be a pointer to the same array as was given via the
- {\tt{"}}params{\tt{"}} parameter of astResample$<$X$>$. You may use this to
- pass any additional parameter values required by your
- interpolation algorithm.
- }
- \sstsubsection{
- flags
- }{
- This will be the same value as was given via the {\tt{"}}flags{\tt{"}}
- parameter of astResample$<$X$>$. You may test this value to
- provide additional control over the operation of your
- resampling algorithm. Note that the special flag values
- AST\_\_URESAMP1, 2, 3 \& 4 are reserved for you to use for your
- own purposes and will not clash with other pre-defined flag
- values (see astResample$<$X$>$).
- }
- \sstsubsection{
- badval
- }{
- This will be the same value as was given via the {\tt{"}}badval{\tt{"}}
- parameter of astResample$<$X$>$, and will have the same numerical
- type as the data being processed (i.e. as elements of the
- {\tt{"}}in{\tt{"}} array). It should be used to test for bad pixels in the
- input grid (but only if the AST\_\_USEBAD flag is set via the
- {\tt{"}}flags{\tt{"}} parameter) and (unless the AST\_\_NOBAD flag is set in
- {\tt{"}}flags{\tt{"}}) for identifying bad output values in
- the {\tt{"}}out{\tt{"}} (and {\tt{"}}out\_var{\tt{"}}) array(s).
- }
- \sstsubsection{
- out
- }{
- Pointer to an array with the same numerical type as the {\tt{"}}in{\tt{"}}
- array, into which the interpolated data values should be
- returned. Note that details of the storage order and number
- of dimensions of this array are not required, since the
- {\tt{"}}offset{\tt{"}} array contains all necessary information about where
- each returned value should be stored.
-
- In general, not all elements of this array (or the {\tt{"}}out\_var{\tt{"}}
- array below) may be used in any particular invocation of the
- function. Those which are not used should be returned
- unchanged.
- }
- \sstsubsection{
- out\_var
- }{
- Pointer to an optional array with the same type and size as
- the {\tt{"}}out{\tt{"}} array, into which variance estimates for the
- resampled values should be returned. This array will only be
- given if the {\tt{"}}in\_var{\tt{"}} array has also been given.
-
- If given, it is addressed in exactly the same way (via the
- {\tt{"}}offset{\tt{"}} array) as the {\tt{"}}out{\tt{"}} array. The values returned
- should be estimates of the statistical variance of the
- corresponding values in the {\tt{"}}out{\tt{"}} array, on the assumption
- that all errors in input data values are statistically
- independent and that their variance estimates may simply be
- summed (with appropriate weighting factors).
-
- If no output variance estimates are required, a NULL pointer
- will be given.
- }
- \sstsubsection{
- nbad
- }{
- Pointer to an int in which to return the number of interpolation
- points at
- which no valid interpolated value could be obtained. The maximum
- value that should be returned is {\tt{"}}npoint{\tt{"}}, and the minimum is
- zero (indicating that all output values were successfully
- obtained).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The data type $<$Xtype$>$ indicates the numerical type of the data
- being processed, as for astResample$<$X$>$.
-
- \sstitem
- This function will typically be invoked more than once for each
- invocation of astResample$<$X$>$.
-
- \sstitem
- If an error occurs within this function, it should use
- \htmlref{astSetStatus}{astSetStatus} to set the AST error status to an error value.
- This will cause an immediate return from astResample$<$X$>$. The error
- value AST\_\_UINER is available for this purpose, but other values may
- also be used (e.g. if you wish to distinguish different types of
- error).
- }
- }
-}
-\sstroutine{
- astUkern1\sstlabel{astUkern1}
-}{
- 1-dimensional sub-pixel interpolation kernel
-}{
- \sstdescription{
- This is a fictitious function which does not actually
- exist. Instead, this description constitutes a template so that
- you may implement a function with this interface for yourself
- (and give it any name you wish). A pointer to such a function
- may be passed via the {\tt{"}}finterp{\tt{"}} parameter of the \htmlref{astResample$<$X$>$}{astResampleX}
- functions (q.v.) in order to supply a 1-dimensional
- interpolation kernel to the algorithm which performs sub-pixel
- interpolation during resampling of gridded data (you must also
- set the {\tt{"}}interp{\tt{"}} parameter of astResample$<$X$>$ to the value
- AST\_\_UKERN1). This allows you to use your own interpolation
- kernel in addition to those which are pre-defined.
-
- The function calculates the value of a 1-dimensional sub-pixel
- interpolation kernel. This determines how the weight given to
- neighbouring pixels in calculating an interpolated value depends
- on the pixel's offset from the interpolation point. In more than
- one dimension, the weight assigned to a pixel is formed by
- evaluating this 1-dimensional kernel using the offset along each
- dimension in turn. The product of the returned values is then
- used as the pixel weight.
- }
- \sstsynopsis{
- void astUkern1( double offset, const double params[], int flags,
- double $*$value )
- }
- \sstparameters{
- \sstsubsection{
- offset
- }{
- This will be the offset of the pixel from the interpolation
- point, measured in pixels. This value may be positive or
- negative, but for most practical interpolation schemes its
- sign should be ignored.
- }
- \sstsubsection{
- params
- }{
- This will be a pointer to the same array as was given via the
- {\tt{"}}params{\tt{"}} parameter of astResample$<$X$>$. You may use this to
- pass any additional parameter values required by your kernel,
- but note that {\tt{"}}params[0]{\tt{"}} will already have been used to specify
- the number of neighbouring pixels which contribute to the
- interpolated value.
- }
- \sstsubsection{
- flags
- }{
- This will be the same value as was given via the {\tt{"}}flags{\tt{"}}
- parameter of astResample$<$X$>$. You may test this value to
- provide additional control over the operation of your
- function. Note that the special flag values AST\_\_URESAMP1, 2,
- 3 \& 4 are reserved for you to use for your own purposes and
- will not clash with other pre-defined flag
- values (see astResample$<$X$>$).
- }
- \sstsubsection{
- value
- }{
- Pointer to a double to receive the calculated kernel value,
- which may be positive or negative.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Not all functions make good interpolation kernels. In general,
- acceptable kernels tend to be symmetrical about zero, to have a
- positive peak (usually unity) at zero, and to evaluate to zero
- whenever the pixel offset has any other integral value (this
- ensures that the interpolated values pass through the original
- data). An interpolation kernel may or may not have regions with
- negative values. You should consult a good book on image
- processing for more details.
-
- \sstitem
- If an error occurs within this function, it should use
- \htmlref{astSetStatus}{astSetStatus} to set the AST error status to an error value.
- This will cause an immediate return from astResample$<$X$>$. The error
- value AST\_\_UK1ER is available for this purpose, but other values may
- also be used (e.g. if you wish to distinguish different types of
- error).
- }
- }
-}
-\sstroutine{
- astUnformat\sstlabel{astUnformat}
-}{
- Read a formatted coordinate value for a Frame axis
-}{
- \sstdescription{
- This function reads a formatted coordinate value (given as a
- character string) for a \htmlref{Frame}{Frame} axis and returns the equivalent
- numerical (double) value. It also returns the number of
- characters read from the string.
-
- The principle use of this function is in decoding user-supplied
- input which contains formatted coordinate values. Free-format
- input is supported as far as possible. If input is ambiguous, it
- is interpreted with reference to the Frame's attributes (in
- particular, the Format string associated with the Frame's
- axis). This function is, in essence, the inverse of \htmlref{astFormat}{astFormat}.
- }
- \sstsynopsis{
- int astUnformat( AstFrame $*$this, int axis, const char $*$string,
- double $*$value )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Frame.
- }
- \sstsubsection{
- axis
- }{
- The number of the Frame axis for which a coordinate value is to
- be read (axis numbering starts at 1 for the first axis).
- }
- \sstsubsection{
- string
- }{
- Pointer to a null-terminated character string containing the
- formatted coordinate value.
- This string may contain additional information following the
- value to be read, in which case reading stops at the first
- character which cannot be interpreted as part of the value.
- Any white space before or after the value is discarded.
- }
- \sstsubsection{
- value
- }{
- Pointer to a double in which the coordinate value read will be
- returned.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- This function applies to all Frames. See the {\tt{"}}Frame Input
- Format{\tt{"}} section below for details of the input formats
- accepted by a basic Frame.
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- The SkyFrame class re-defines the input format to be suitable
- for representing angles and times, with the resulting
- coordinate value returned in radians. See the {\tt{"}}SkyFrame
- Input Format{\tt{"}} section below for details of the formats
- accepted.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The input formats accepted by a FrameSet are determined by
- its current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astUnformat()
- }{
- The number of characters read from the string in order to
- obtain the coordinate value. This will include any white
- space which occurs before or after the value.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A function value of zero (and no coordinate value) will be
- returned, without error, if the string supplied does not contain
- a suitably formatted value.
-
- \sstitem
- Beware that it is possible for a formatting error part-way
- through an input string to terminate input before it has been
- completely read, but to yield a coordinate value that appears
- valid. For example, if a user types {\tt{"}}1.5r6{\tt{"}} instead of {\tt{"}}1.5e6{\tt{"}},
- the {\tt{"}}r{\tt{"}} will terminate input, giving an incorrect coordinate
- value of 1.5. It is therefore most important to check the return
- value of this function to ensure that the correct number of
- characters have been read.
-
- \sstitem
- An error will result if a value is read which appears to have
- the correct format, but which cannot be converted into a valid
- coordinate value (for instance, because the value of one or more
- of its fields is invalid).
-
- \sstitem
- The string {\tt{"}}$<$bad$>${\tt{"}} is recognised as a special case and will
- yield the coordinate value AST\_\_BAD without error. The test for
- this string is case-insensitive and also permits embedded white
- space.
-
- \sstitem
- A function result of zero will be returned and no coordinate
- value will be returned via the {\tt{"}}value{\tt{"}} pointer if this function
- is invoked with the AST error status set, or if it should fail
- for any reason.
- }
- }
- \sstdiytopic{
- Frame Input Format
- }{
- The input format accepted for a basic Frame axis is as follows:
- \sstitemlist{
-
- \sstitem
- An optional sign, followed by:
-
- \sstitem
- A sequence of one or more digits possibly containing a decimal point,
- followed by:
-
- \sstitem
- An optional exponent field.
-
- \sstitem
- The exponent field, if present, consists of {\tt{"}}E{\tt{"}} or {\tt{"}}e{\tt{"}}
- followed by a possibly signed integer.
-
- }
- Examples of acceptable Frame input formats include:
- \sstitemlist{
-
- \sstitem
- 99
-
- \sstitem
- 1.25
-
- \sstitem
- -1.6
-
- \sstitem
- 1E8
-
- \sstitem
- -.99e-17
-
- \sstitem
- $<$bad$>$
- }
- }
- \sstdiytopic{
- SkyFrame Input Format
- }{
- The input format accepted for a SkyFrame axis is as follows:
- \sstitemlist{
-
- \sstitem
- An optional sign, followed by between one and three fields
- representing either degrees, arc-minutes, arc-seconds or hours,
- minutes, seconds (e.g. {\tt{"}}-12 42 03{\tt{"}}).
-
- \sstitem
- Each field should consist of a sequence of one or more digits,
- which may include leading zeros. At most one field may contain a
- decimal point, in which case it is taken to be the final field
- (e.g. decimal degrees might be given as {\tt{"}}124.707{\tt{"}}, while degrees
- and decimal arc-minutes might be given as {\tt{"}}-13 33.8{\tt{"}}).
-
- \sstitem
- The first field given may take any value, allowing angles and
- times outside the conventional ranges to be
- represented. However, subsequent fields must have values of less
- than 60 (e.g. {\tt{"}}720 45 31{\tt{"}} is valid, whereas {\tt{"}}11 45 61{\tt{"}} is not).
-
- \sstitem
- Fields may be separated by white space or by {\tt{"}}:{\tt{"}} (colon), but
- the choice of separator must be used consistently throughout the
- value. Additional white space may be present around fields and
- separators (e.g. {\tt{"}}- 2: 04 : 7.1{\tt{"}}).
-
- \sstitem
- The following field identification characters may be used as
- separators to replace either of those above (or may be appended
- to the final field), in order to identify the field to which
- they are appended: {\tt{"}}d{\tt{"}}---degrees; {\tt{"}}h{\tt{"}}---hours; {\tt{"}}m{\tt{"}}---minutes of
- arc or time; {\tt{"}}s{\tt{"}}---seconds of arc or time; {\tt{"}}'{\tt{"}} (single
- quote)---minutes of arc; {\tt{"}}{\tt{"}}{\tt{"}} (double quote)---seconds of arc.
- Either lower or upper case may be used. Fields must be given in
- order of decreasing significance (e.g. {\tt{"}}-11D 3' 14.4{\tt{"}}{\tt{"}} or
- {\tt{"}}22h14m11.2s{\tt{"}}).
-
- \sstitem
- The presence of any of the field identification characters
- {\tt{"}}d{\tt{"}}, {\tt{"}}'{\tt{"}} (single quote) or {\tt{"}}{\tt{"}}{\tt{"}} (double quote) indicates that the
- value is to be interpreted as an angle. Conversely, the presence
- of {\tt{"}}h{\tt{"}} indicates that it is to be interpreted as a time (with 24
- hours corresponding to 360 degrees). Incompatible angle/time
- identification characters may not be mixed (e.g. {\tt{"}}10h14'3{\tt{"}}{\tt{"}} is
- not valid). The remaining field identification characters and
- separators do not specify a preference for an angle or a time
- and may be used with either.
-
- \sstitem
- If no preference for an angle or a time is expressed anywhere
- within the value, it is interpreted as an angle if the Format
- attribute string associated with the SkyFrame axis generates an
- angle and as a time otherwise. This ensures that values produced
- by astFormat are correctly interpreted by astUnformat.
-
- \sstitem
- Fields may be omitted, in which case they default to zero. The
- remaining fields may be identified by using appropriate field
- identification characters (see above) and/or by adding extra
- colon separators (e.g. {\tt{"}}-05m13s{\tt{"}} is equivalent to {\tt{"}}-:05:13{\tt{"}}). If
- a field is not identified explicitly, it is assumed that
- adjacent fields have been given, after taking account of any
- extra separator characters (e.g. {\tt{"}}14:25.4s{\tt{"}} specifies minutes
- and seconds, while {\tt{"}}14::25.4s{\tt{"}} specifies degrees and seconds).
-
- \sstitem
- If fields are omitted in such a way that the remaining ones
- cannot be identified uniquely (e.g. {\tt{"}}01:02{\tt{"}}), then the first
- field (either given explicitly or implied by an extra leading
- colon separator) is taken to be the most significant field that
- astFormat would produce when formatting a value (using the
- Format attribute associated with the SkyFrame axis). By
- default, this means that the first field will normally be
- interpreted as degrees or hours. However, if this does not
- result in consistent field identification, then the last field
- (either given explicitly or implied by an extra trailing colon
- separator) is taken to to be the least significant field that
- astFormat would produce.
-
- }
- This final convention is intended to ensure that values formatted
- by astFormat which contain less than three fields will be
- correctly interpreted if read back using astUnformat, even if
- they do not contain field identification characters.
-
- Examples of acceptable SkyFrame input formats (with
- interpretation in parentheses) include:
- \sstitemlist{
-
- \sstitem
- -14d 13m 22.2s (-14d 13' 22.2{\tt{"}})
-
- \sstitem
- $+$ 12:34:56.7 (12d 34' 56.7{\tt{"}} or 12h 34m 56.7s)
-
- \sstitem
- 001 : 02 : 03.4 (1d 02' 03.4{\tt{"}} or 1h 02m 03.4s)
-
- \sstitem
- 22h 30 (22h 30m 00s)
-
- \sstitem
- 136::10{\tt{"}} (136d 00' 10{\tt{"}} or 136h 00m 10s)
-
- \sstitem
- -14M 27S (-0d 14' 27{\tt{"}} or -0h 14m 27s)
-
- \sstitem
- -:14: (-0d 14' 00{\tt{"}} or -0h 14m 00s)
-
- \sstitem
- -::4.1 (-0d 00' 04.1{\tt{"}} or -0h 00m 04.1s)
-
- \sstitem
- .9{\tt{"}} (0d 00' 00.9{\tt{"}})
-
- \sstitem
- d12m (0d 12' 00{\tt{"}})
-
- \sstitem
- H 12:22.3s (0h 12m 22.3s)
-
- \sstitem
- $<$bad$>$ (AST\_\_BAD)
-
- }
- Where alternative interpretations are shown, the choice of angle or
- time depends on the associated \htmlref{Format(axis)}{Formataxis} attribute.
- }
-}
-\sstroutine{
- astUnitMap\sstlabel{astUnitMap}
-}{
- Create a UnitMap
-}{
- \sstdescription{
- This function creates a new \htmlref{UnitMap}{UnitMap} and optionally initialises
- its attributes.
-
- A UnitMap is a unit (null) \htmlref{Mapping}{Mapping} that has no effect on the
- coordinates supplied to it. They are simply copied. This can be
- useful if a Mapping is required (e.g. to pass to another
- function) but you do not want it to have any effect.
- }
- \sstsynopsis{
- AstUnitMap $*$astUnitMap( int ncoord, const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- ncoord
- }{
- The number of input and output coordinates (these numbers are
- necessarily the same).
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new UnitMap. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astUnitMap()
- }{
- A pointer to the new UnitMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astUnlock\sstlabel{astUnlock}
-}{
- Unlock an Object for use by other threads
-}{
- \sstdescription{
- Unlocks an \htmlref{Object}{Object} previously locked using \htmlref{astLock}{astLock}, so that other
- threads can use the Object. See astLock for further details.
- }
- \sstsynopsis{
- void astUnlock( AstObject $*$this, int report )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Object to be unlocked.
- }
- \sstsubsection{
- report
- }{
- If non-zero, an error will be reported if the supplied Object,
- or any Object contained within the supplied Object, is not
- currently locked by the running thread. If zero, such Objects
- will be left unchanged, and no error will be reported.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- This function applies to all Objects.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function attempts to execute even if the global error
- status is set, but no further error report will be made if it
- subsequently fails under these circumstances.
-
- \sstitem
- All unlocked Objects are excluded from AST context handling until
- they are re-locked using astLock.
-
- \sstitem
- This function is only available in the C interface.
-
- \sstitem
- This function returns without action if the Object is not currently
- locked by any thread. If it is locked by the running thread, it is
- unlocked. If it is locked by another thread, an error will be reported
- if {\tt{"}}error{\tt{"}} is non-zero.
-
- \sstitem
- This function returns without action if the AST library has
- been built without POSIX thread support (i.e. the {\tt{"}}-with-pthreads{\tt{"}}
- option was not specified when running the {\tt{"}}configure{\tt{"}} script).
- }
- }
-}
-\sstroutine{
- astVersion\sstlabel{astVersion}
-}{
- Return the version of the AST library being used
-}{
- \sstdescription{
- This macro invokes a function which
- returns an integer representing the version of the AST library
- being used. The library version is formatted as a string such as
- {\tt{"}}2.0-7{\tt{"}} which contains integers representing the {\tt{"}}major version{\tt{"}} (2),
- the {\tt{"}}minor version{\tt{"}} (0) and the {\tt{"}}release{\tt{"}} (7). The integer returned
- by this function combines all three integers together into a single
- integer using the expresion:
-
- (major version)$*$1E6 $+$ (minor version)$*$1E3 $+$ (release)
- }
- \sstsynopsis{
- int astVersion
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{Object}{Object}
- }{
- This macro applies to all Objects.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astVersion
- }{
- The major version, minor version and release numbers for the AST
- library, encoded as a single integer.
- }
- }
-}
-\sstroutine{
- astWarnings\sstlabel{astWarnings}
-}{
- Returns any warnings issued by the previous read or write operation
-}{
- \sstdescription{
- This function returns an AST \htmlref{KeyMap}{KeyMap} object holding the text of any
- warnings issued as a result of the previous invocation of the
- \htmlref{astRead}{astRead} or \htmlref{astWrite}{astWrite}
- function on the \htmlref{Channel}{Channel}. If no warnings were issued, a
- a NULL value
- will be returned.
-
- Such warnings are non-fatal and will not prevent the
- read or write operation succeeding. However, the converted object
- may not be identical to the original object in all respects.
- Differences which would usually be deemed as insignificant in most
- usual cases will generate a warning, whereas more significant
- differences will generate an error.
-
- The {\tt{"}}\htmlref{Strict}{Strict}{\tt{"}} attribute allows this warning facility to be switched
- off, so that a fatal error is always reported for any conversion
- error.
- }
- \sstsynopsis{
- AstKeyMap $*$astWarnings( AstChannel $*$this )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Channel.
- }
- }
- \sstapplicability{
- \sstsubsection{
- Channel
- }{
- The basic Channel class generates a warning when ever an
- un-recognised item is encountered whilst reading an \htmlref{Object}{Object} from
- an external data source. If Strict is zero (the default), then
- unexpected items in the Object description are simply ignored,
- and any remaining items are used to construct the returned
- Object. If Strict is non-zero, an error will be reported and a
- NULL Object pointer returned if any unexpected items are
- encountered.
-
- As AST continues to be developed, new attributes are added
- occasionally to selected classes. If an older version of AST is
- used to read external Object descriptions created by a more
- recent version of AST, then the Channel class will, by default,
- ignore the new attributes, using the remaining attributes to
- construct the Object. This is usually a good thing. However,
- since external Object descriptions are often stored in plain
- text, it is possible to edit them using a text editor. This
- gives rise to the possibility of genuine errors in the
- description due to finger-slips, typos, or simple
- mis-understanding. Such inappropriate attributes will be ignored
- if Strict is left at its default zero value. This will cause the
- mis-spelled attribute to revert to its default value,
- potentially causing subtle changes in the behaviour of
- application software. If such an effect is suspected, the Strict
- attribute can be set non-zero, resulting in the erroneous
- attribute being identified in an error message.
- }
- \sstsubsection{
- \htmlref{FitsChan}{FitsChan}
- }{
- The returned KeyMap will contain warnings for all conditions
- listed in the \htmlref{Warnings}{Warnings} attribute.
- }
- \sstsubsection{
- \htmlref{XmlChan}{XmlChan}
- }{
- Reports conversion errors that result in what are usally
- insignificant changes.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astWarnings()
- }{
- A pointer to the KeyMap holding the warning messages, or
- NULL
- if no warnings were issued during the previous read operation.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The returned KeyMap uses keys of the form {\tt{"}}Warning\_1{\tt{"}},
- {\tt{"}}Warning\_2{\tt{"}}, etc.
-
- \sstitem
- A value of
- NULL will be returned if this function is invoked with the AST
- error status set,
- or if it should fail for any reason.
- }
- }
-}
-\sstroutine{
- astWatch\sstlabel{astWatch}
-}{
- Identify a new error status variable for the AST library
-}{
- \sstdescription{
- This function allows a new error status variable to be accessed
- by the AST library when checking for and reporting error
- conditions.
-
- By default, the library uses an internal integer error status
- which is set to an error value if an error occurs. Use of
- astWatch allows the internal error status to be replaced by an
- integer variable of your choosing, so that the AST library can
- share its error status directly with other code which uses the
- same error detection convention.
-
- If an alternative error status variable is supplied, it is used
- by all related AST functions and macros (e.g. \htmlref{astOK}{astOK}, \htmlref{astStatus}{astStatus}
- and \htmlref{astClearStatus}{astClearStatus}).
- }
- \sstsynopsis{
- int $*$astWatch( int $*$status\_ptr )
- }
- \sstparameters{
- \sstsubsection{
- status\_ptr
- }{
- Pointer to an int whose value is to be used subsequently as
- the AST inherited status value. If a NULL pointer is supplied,
- the AST library will revert to using its own internal error status.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astWatch()
- }{
- Address of the previous error status variable. This may later
- be passed back to astWatch to restore the previous behaviour
- of the library. (Note that on the first invocation of
- astWatch the returned value will be the address of the
- internal error status variable.)
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This function is not available in the FORTRAN 77 interface to
- the AST library.
- }
- }
-}
-\sstroutine{
- astWcsMap\sstlabel{astWcsMap}
-}{
- Create a WcsMap
-}{
- \sstdescription{
- This function creates a new \htmlref{WcsMap}{WcsMap} and optionally initialises its
- attributes.
-
- A WcsMap is used to represent sky coordinate projections as
- described in the (draft) FITS world coordinate system (FITS-WCS)
- paper by E.W. Griesen and M. Calabretta (A \& A, in preparation).
- This paper defines a set of functions, or sky projections, which
- transform longitude-latitude pairs representing spherical
- celestial coordinates into corresponding pairs of Cartesian
- coordinates (and vice versa).
-
- A WcsMap is a specialised form of \htmlref{Mapping}{Mapping} which implements these
- sky projections and applies them to a specified pair of coordinates.
- All the projections in the FITS-WCS paper are supported, plus the now
- deprecated {\tt{"}}TAN with polynomial correction terms{\tt{"}} projection which
- is refered to here by the code {\tt{"}}TPN{\tt{"}}. Using the FITS-WCS terminology,
- the transformation is between {\tt{"}}native spherical{\tt{"}} and {\tt{"}}projection
- plane{\tt{"}} coordinates. These coordinates may, optionally, be embedded in
- a space with more than two dimensions, the remaining coordinates being
- copied unchanged. Note, however, that for consistency with other AST
- facilities, a WcsMap handles coordinates that represent angles
- in radians (rather than the degrees used by FITS-WCS).
-
- The type of FITS-WCS projection to be used and the coordinates
- (axes) to which it applies are specified when a WcsMap is first
- created. The projection type may subsequently be determined
- using the \htmlref{WcsType}{WcsType} attribute and the coordinates on which it acts
- may be determined using the \htmlref{WcsAxis(lonlat)}{WcsAxislonlat} attribute.
-
- Each WcsMap also allows up to 100 {\tt{"}}projection parameters{\tt{"}} to be
- associated with each axis. These specify the precise form of the
- projection, and are accessed using \htmlref{PVi\_m}{PVi_m} attribute, where {\tt{"}}i{\tt{"}} is
- the integer axis index (starting at 1), and m is an integer
- {\tt{"}}parameter index{\tt{"}} in the range 0 to 99. The number of projection
- parameters required by each projection, and their meanings, are
- dependent upon the projection type (most projections either do not
- use any projection parameters, or use parameters 1 and 2 associated
- with the latitude axis). Before creating a WcsMap you should consult
- the FITS-WCS paper for details of which projection parameters are
- required, and which have defaults. When creating the WcsMap, you must
- explicitly set values for all those required projection parameters
- which do not have defaults defined in this paper.
- }
- \sstsynopsis{
- AstWcsMap $*$astWcsMap( int ncoord, int type, int lonax, int latax,
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- ncoord
- }{
- The number of coordinate values for each point to be
- transformed (i.e. the number of dimensions of the space in
- which the points will reside). This must be at least 2. The
- same number is applicable to both input and output points.
- }
- \sstsubsection{
- type
- }{
- The type of FITS-WCS projection to apply. This should be
- given using a macro value such as AST\_\_TAN (for a tangent
- plane projection), where the characters following the double
- underscore give the projection type code (in upper case) as
- used in the FITS-WCS {\tt{"}}CTYPEi{\tt{"}} keyword. You should consult the
- FITS-WCS paper for a list of the available projections. The
- additional code of AST\_\_TPN can be supplied which represents a
- TAN projection with polynomial correction terms as defined in an
- early draft of the FITS-WCS paper.
- }
- \sstsubsection{
- lonax
- }{
- The index of the longitude axis. This should lie in the range
- 1 to {\tt{"}}ncoord{\tt{"}}.
- }
- \sstsubsection{
- latax
- }{
- The index of the latitude axis. This should lie in the range
- 1 to {\tt{"}}ncoord{\tt{"}} and be distinct from {\tt{"}}lonax{\tt{"}}.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new WcsMap. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-
- If the sky projection to be implemented requires projection
- parameter values to be set, then this should normally be done
- here via the PVi\_m attribute (see the {\tt{"}}Examples{\tt{"}}
- section). Setting values for these parameters is mandatory if
- they do not have default values (as defined in the FITS-WCS
- paper).
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astWcsMap()
- }{
- A pointer to the new WcsMap.
- }
- }
- \sstexamples{
- \sstexamplesubsection{
- wcsmap = astWcsMap( 2, AST\_\_MER, 1, 2, {\tt{"}}{\tt{"}} );
- }{
- Creates a WcsMap that implements a FITS-WCS Mercator
- projection on pairs of coordinates, with coordinates 1 and 2
- representing the longitude and latitude respectively. Note
- that the FITS-WCS Mercator projection does not require any
- projection parameters.
- }
- \sstexamplesubsection{
- wcsmap = astWcsMap( 3, AST\_\_COE, 2, 3, {\tt{"}}PV3\_1=40.0{\tt{"}} );
- }{
- Creates a WcsMap that implements a FITS-WCS conical equal
- area projection. The WcsMap acts on points in a 3-dimensional
- space; coordinates 2 and 3 represent longitude and latitude
- respectively, while the values of coordinate 1 are copied
- unchanged. \htmlref{Projection}{Projection} parameter 1 associatyed with the latitude
- axis (corresponding to FITS keyword {\tt{"}}PV3\_1{\tt{"}}) is required and has
- no default, so is set explicitly to 40.0 degrees. Projection
- parameter 2 (corresponding to FITS keyword {\tt{"}}PV3\_2{\tt{"}}) is required
- but has a default of zero, so need not be specified.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The forward transformation of a WcsMap converts between
- FITS-WCS {\tt{"}}native spherical{\tt{"}} and {\tt{"}}relative physical{\tt{"}} coordinates,
- while the inverse transformation converts in the opposite
- direction. This arrangement may be reversed, if required, by
- using \htmlref{astInvert}{astInvert} or by setting the \htmlref{Invert}{Invert} attribute to a non-zero
- value.
-
- \sstitem
- If any set of coordinates cannot be transformed (for example,
- many projections do not cover the entire celestial sphere), then
- a WcsMap will yield coordinate values of AST\_\_BAD.
-
- \sstitem
- The validity of any projection parameters given via the PVi\_m
- parameter in the {\tt{"}}options{\tt{"}} string is not checked by this
- function. However, their validity is checked when the resulting
- WcsMap is used to transform coordinates, and an error will
- result if the projection parameters do not satisfy all the
- required constraints (as defined in the FITS-WCS paper).
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- astWinMap\sstlabel{astWinMap}
-}{
- Create a WinMap
-}{
- \sstdescription{
- This function creates a new \htmlref{WinMap}{WinMap} and optionally initialises its
- attributes.
-
- A Winmap is a linear \htmlref{Mapping}{Mapping} which transforms a rectangular
- window in one coordinate system into a similar window in another
- coordinate system by scaling and shifting each axis (the window
- edges being parallel to the coordinate axes).
-
- A WinMap is specified by giving the coordinates of two opposite
- corners (A and B) of the window in both the input and output
- coordinate systems.
- }
- \sstsynopsis{
- AstWinMap $*$astWinMap( int ncoord,
- const double ina[], const double inb[],
- const double outa[], const double outb[],
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- ncoord
- }{
- The number of coordinate values for each point to be
- transformed (i.e. the number of dimensions of the space in
- which the points will reside). The same number is applicable
- to both input and output points.
- }
- \sstsubsection{
- ina
- }{
- An array containing the {\tt{"}}ncoord{\tt{"}}
- coordinates of corner A of the window in the input coordinate
- system.
- }
- \sstsubsection{
- inb
- }{
- An array containing the {\tt{"}}ncoord{\tt{"}}
- coordinates of corner B of the window in the input coordinate
- system.
- }
- \sstsubsection{
- outa
- }{
- An array containing the {\tt{"}}ncoord{\tt{"}}
- coordinates of corner A of the window in the output coordinate
- system.
- }
- \sstsubsection{
- outb
- }{
- An array containing the {\tt{"}}ncoord{\tt{"}}
- coordinates of corner B of the window in the output coordinate
- system.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new WinMap. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astWinMap()
- }{
- A pointer to the new WinMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\sstroutine{
- astWrite\sstlabel{astWrite}
-}{
- Write an Object to a Channel
-}{
- \sstdescription{
- This function writes an \htmlref{Object}{Object} to a \htmlref{Channel}{Channel}, appending it to any
- previous Objects written to that Channel.
- }
- \sstsynopsis{
- int astWrite( AstChannel $*$this, AstObject $*$object )
- }
- \sstparameters{
- \sstsubsection{
- this
- }{
- Pointer to the Channel.
- }
- \sstsubsection{
- object
- }{
- Pointer to the Object which is to be written.
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astWrite()
- }{
- The number of Objects written to the Channel by this
- invocation of astWrite (normally, this will be one).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A value of zero will be returned if this function is invoked
- with the AST error status set, or if it should fail for any
- reason.
-
- \sstitem
- Invoking this function will usually cause the sink function
- associated with the channel to be called in order to transfer a
- textual description of the supplied object to some external data
- store. However, the \htmlref{FitsChan}{FitsChan} class behaves differently. Invoking
- this function on a FitsChan causes new FITS header cards to be
- added to an internal buffer (the sink function is not invoked).
- This buffer is written out through the sink function only when the
- FitsChan is deleted.
- }
- }
-}
-\sstroutine{
- astXmlChan\sstlabel{astXmlChan}
-}{
- Create an XmlChan
-}{
- \sstdescription{
- This function creates a new \htmlref{XmlChan}{XmlChan} and optionally initialises
- its attributes.
-
- A XmlChan is a specialised form of \htmlref{Channel}{Channel} which supports XML I/O
- operations. Writing an \htmlref{Object}{Object} to an XmlChan (using
- \htmlref{astWrite}{astWrite}) will, if the Object is suitable, generate an
- XML description of that Object, and reading from an XmlChan will
- create a new Object from its XML description.
-
- Normally, when you use an XmlChan, you should provide {\tt{"}}source{\tt{"}}
- and {\tt{"}}sink{\tt{"}} functions which connect it to an external data store
- by reading and writing the resulting XML text. By default, however,
- a Channel will read from standard input and write to standard
- output.
- }
- \sstsynopsis{
- AstXmlChan $*$astXmlChan( const char $*$($*$ source)( void ),
- void ($*$ sink)( const char $*$ ),
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- source
- }{
- Pointer to a source function that takes no arguments and
- returns a pointer to a null-terminated string. This function
- will be used by the XmlChan to obtain lines of input text. On
- each invocation, it should return a pointer to the next input
- line read from some external XML data store, and a NULL pointer
- when there are no more lines to read.
-
- If {\tt{"}}source{\tt{"}} is NULL, the Channel will read from standard
- input instead.
- }
- \sstsubsection{
- sink
- }{
- Pointer to a sink function that takes a pointer to a
- null-terminated string as an argument and returns void. This
- function will be used by the XmlChan to deliver lines of
- output text. On each invocation, it should deliver the
- contents of the string supplied to some external XML data store.
-
- If {\tt{"}}sink{\tt{"}} is NULL, the XmlChan will write to standard output
- instead.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new XmlChan. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astXmlChan()
- }{
- A pointer to the new XmlChan.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the external data source or sink uses a character encoding
- other than ASCII, the supplied source and sink functions should
- translate between the external character encoding and the internal
- ASCII encoding used by AST.
-
- \sstitem
- A null Object pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
-}
-\sstroutine{
- astZoomMap\sstlabel{astZoomMap}
-}{
- Create a ZoomMap
-}{
- \sstdescription{
- This function creates a new \htmlref{ZoomMap}{ZoomMap} and optionally initialises its
- attributes.
-
- A ZoomMap is a \htmlref{Mapping}{Mapping} which {\tt{"}}zooms{\tt{"}} a set of points about the
- origin by multiplying all coordinate values by the same scale
- factor (the inverse transformation is performed by dividing by
- this scale factor).
- }
- \sstsynopsis{
- AstZoomMap $*$astZoomMap( int ncoord, double zoom,
- const char $*$options, ... )
- }
- \sstparameters{
- \sstsubsection{
- ncoord
- }{
- The number of coordinate values for each point to be
- transformed (i.e. the number of dimensions of the space in
- which the points will reside). The same number is applicable
- to both input and output points.
- }
- \sstsubsection{
- zoom
- }{
- Initial scale factor by which coordinate values should be
- multiplied (by the forward transformation) or divided (by the
- inverse transformation). This factor may subsequently be
- changed via the ZoomMap's \htmlref{Zoom}{Zoom} attribute. It may be positive
- or negative, but should not be zero.
- }
- \sstsubsection{
- options
- }{
- Pointer to a null-terminated string containing an optional
- comma-separated list of attribute assignments to be used for
- initialising the new ZoomMap. The syntax used is identical to
- that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
- specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
- }
- \sstsubsection{
- ...
- }{
- If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
- an optional list of additional arguments may follow it in
- order to supply values to be substituted for these
- specifiers. The rules for supplying these are identical to
- those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
- function).
- }
- }
- \sstreturnedvalue{
- \sstsubsection{
- astZoomMap()
- }{
- A pointer to the new ZoomMap.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
- function is invoked with the AST error status set, or if it
- should fail for any reason.
- }
- }
- \sstdiytopic{
- Status Handling
- }{
- The protected interface to this function includes an extra
- parameter at the end of the parameter list descirbed above. This
- parameter is a pointer to the integer inherited status
- variable: {\tt{"}}int $*$status{\tt{"}}.
- }
-}
-\normalsize
-
-\cleardoublepage
-\section{\label{ss:attributedescriptions}AST Attribute Descriptions}
-\small
-\sstroutine{
- Abbrev(axis)\sstlabel{Abbrevaxis}
-}{
- Abbreviate leading fields within numerical axis labels?
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
- whether matching leading fields should be removed from adjacent
- numerical axis labels. It takes a separate value for each physical
- axis of a \htmlref{Plot}{Plot} so that, for instance, the setting {\tt{"}}Abbrev(2)=0{\tt{"}}
- specifies that matching leading fields should not be removed on
- the second axis.
-
- If the Abbrev value of a Plot is non-zero (the default), then
- leading fields will be removed from adjacent axis labels if they
- are equal.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}Abbrev{\tt{"}} instead of
- {\tt{"}}Abbrev(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
- the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
- {\tt{"}}test{\tt{"}} operation will use just the Abbrev(1) value.
- }
- }
-}
-\sstroutine{
- Adaptive\sstlabel{Adaptive}
-}{
- Should the area adapt to changes in the coordinate system?
-}{
- \sstdescription{
- The coordinate system represented by a \htmlref{Region}{Region} may be changed by
- assigning new values to attributes such as \htmlref{System}{System}, Unit, etc.
- For instance, a Region representing an area on the sky in ICRS
- coordinates may have its System attribute changed so that it
- represents (say) Galactic coordinates instead of ICRS. This
- attribute controls what happens when the coordinate system
- represented by a Region is changed in this way.
-
- If Adaptive is non-zero (the default), then area represented by the
- Region adapts to the new coordinate system. That is, the numerical
- values which define the area represented by the Region are changed
- by mapping them from the old coordinate system into the new coordinate
- system. Thus the Region continues to represent the same physical
- area.
-
- If Adaptive is zero, then area represented by the Region does not adapt
- to the new coordinate system. That is, the numerical values which
- define the area represented by the Region are left unchanged. Thus
- the physical area represented by the Region will usually change.
-
- As an example, consider a Region describe a range of wavelength from
- 2000 Angstrom to 4000 Angstrom. If the Unit attribute for the Region
- is changed from Angstrom to {\tt{"}}nm{\tt{"}} (nanometre), what happens depends
- on the setting of Adaptive. If Adaptive is non-zero, the \htmlref{Mapping}{Mapping}
- from the old to the new coordinate system is found. In this case it
- is a simple scaling by a factor of 0.1 (since 1 Angstrom is 0.1 nm).
- This Mapping is then used to modify the numerical values within the
- Region, changing 2000 to 200 and 4000 to 400. Thus the modified
- region represents 200 nm to 400 nm, the same physical space as
- the original 2000 Angstrom to 4000 Angstrom. However, if Adaptive
- had been zero, then the numerical values would not have been changed,
- resulting in the final Region representing 2000 nm to 4000 nm.
-
- Setting Adaptive to zero can be necessary if you want correct
- inaccurate attribute settings in an existing Region. For instance,
- when creating a Region you may not know what \htmlref{Epoch}{Epoch} value to use, so
- you would leave Epoch unset resulting in some default value being used.
- If at some later point in the application, the correct Epoch value
- is determined, you could assign the correct value to the Epoch
- attribute. However, you would first need to set Adaptive temporarily
- to zero, because otherwise the area represented by the Region would
- be Mapped from the spurious default Epoch to the new correct Epoch,
- which is not what is required.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Region
- }{
- All Regions have this attribute.
- }
- }
-}
-\sstroutine{
- AlignOffset\sstlabel{AlignOffset}
-}{
- Align SkyFrames using the offset coordinate system?
-}{
- \sstdescription{
- This attribute is a boolean value which controls how a \htmlref{SkyFrame}{SkyFrame}
- behaves when it is used (by
- \htmlref{astFindFrame}{astFindFrame} or \htmlref{astConvert}{astConvert}) as a template to match another (target)
- SkyFrame. It determines the coordinate system in which the two
- SkyFrames are aligned if a match occurs.
-
- If the template and target SkyFrames both have defined offset coordinate
- systems (i.e. the \htmlref{SkyRefIs}{SkyRefIs} attribute is set to either {\tt{"}}Origin{\tt{"}} or {\tt{"}}
- Pole{\tt{"}}), and they both have a non-zero value for AlignOffset, then
- alignment occurs within the offset coordinate systems (that is, a
- \htmlref{UnitMap}{UnitMap} will always be used to align the two SkyFrames). If either
- the template or target SkyFrame has zero (the default value) for
- AlignOffset, or if either SkyFrame has SkyRefIs set to {\tt{"}}Ignored{\tt{"}}, then
- alignment occurring within the coordinate system specified by the
- \htmlref{AlignSystem}{AlignSystem} attribute.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- SkyFrame
- }{
- All SkyFrames have this attribute.
- }
- }
-}
-\sstroutine{
- AlignSideBand\sstlabel{AlignSideBand}
-}{
- Should the SideBand attribute be taken into account when aligning
- this \htmlref{DSBSpecFrame}{DSBSpecFrame} with another DSBSpecFrame?
-}{
- \sstdescription{
- This attribute controls how a DSBSpecFrame behaves when an attempt
- is made to align it with another DSBSpecFrame using
- \htmlref{astFindFrame}{astFindFrame} or \htmlref{astConvert}{astConvert}.
- If both DSBSpecFrames have a non-zero value for AlignSideBand, the
- value of the \htmlref{SideBand}{SideBand} attribute in each DSBSpecFrame is used so that
- alignment occurs between sidebands. That is, if one DSBSpecFrame
- represents USB and the other represents LSB then
- astFindFrame and astConvert
- will recognise that the DSBSpecFrames represent different sidebands
- and will take this into account when constructing the \htmlref{Mapping}{Mapping} that
- maps positions in one DSBSpecFrame into the other. If AlignSideBand
- in either DSBSpecFrame is set to zero, then the values of the SideBand
- attributes are ignored. In the above example, this would result in a
- frequency in the first DSBSpecFrame being mapped onto the same
- frequency in the second DSBSpecFrame, even though those frequencies
- refer to different sidebands. In other words, if either AlignSideBand
- attribute is zero, then the two DSBSpecFrames aligns like basic
- SpecFrames. The default value for AlignSideBand is zero.
-
- When astFindFrame or astConvert
- is used on two DSBSpecFrames (potentially describing different spectral
- coordinate systems and/or sidebands), it returns a Mapping which can be
- used to transform a position in one DSBSpecFrame into the corresponding
- position in the other. The Mapping is made up of the following steps in
- the indicated order:
-
- \sstitemlist{
-
- \sstitem
- If both DSBSpecFrames have a value of 1 for the AlignSideBand
- attribute, map values from the target's current sideband (given by its
- SideBand attribute) to the observed sideband (whether USB or LSB). If
- the target already represents the observed sideband, this step will
- leave the values unchanged. If either of the two DSBSpecFrames have a
- value of zero for its AlignSideBand attribute, then this step is omitted.
-
- \sstitem
- Map the values from the spectral system of the target to the spectral
- system of the template. This Mapping takes into account all the
- inherited \htmlref{SpecFrame}{SpecFrame} attributes such as \htmlref{System}{System}, \htmlref{StdOfRest}{StdOfRest}, Unit, etc.
-
- \sstitem
- If both DSBSpecFrames have a value of 1 for the AlignSideBand
- attribute, map values from the result's observed sideband to the
- result's current sideband (given by its SideBand attribute). If the
- result already represents the observed sideband, this step will leave
- the values unchanged. If either of the two DSBSpecFrames have a value
- of zero for its AlignSideBand attribute, then this step is omitted.
- }
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- DSBSpecFrame
- }{
- All DSBSpecFrames have this attribute.
- }
- }
-}
-\sstroutine{
- AlignSpecOffset\sstlabel{AlignSpecOffset}
-}{
- Align SpecFrames using the offset coordinate system?
-}{
- \sstdescription{
- This attribute is a boolean value which controls how a \htmlref{SpecFrame}{SpecFrame}
- behaves when it is used (by
- \htmlref{astFindFrame}{astFindFrame} or \htmlref{astConvert}{astConvert}) as a template to match another (target)
- SpecFrame. It determines whether alignment occurs between the offset
- values defined by the current value of the SpecOffset attribute, or
- between the corresponding absolute spectral values.
-
- The default value of zero results in the two SpecFrames being aligned
- so that a given absolute spectral value in one is mapped to the same
- absolute value in the other. A non-zero value results in the SpecFrames
- being aligned so that a given offset value in one is mapped to the same
- offset value in the other.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- SpecFrame
- }{
- All SpecFrames have this attribute.
- }
- }
-}
-\sstroutine{
- AlignStdOfRest\sstlabel{AlignStdOfRest}
-}{
- Standard of rest to use when aligning SpecFrames
-}{
- \sstdescription{
- This attribute controls how a \htmlref{SpecFrame}{SpecFrame} behaves when it is used (by
- \htmlref{astFindFrame}{astFindFrame} or \htmlref{astConvert}{astConvert}) as a template to match another (target)
- SpecFrame. It identifies the standard of rest in which alignment is
- to occur. See the \htmlref{StdOfRest}{StdOfRest} attribute for a desription of the values
- which may be assigned to this attribute. The default AlignStdOfRest
- value is {\tt{"}}Helio{\tt{"}} (heliographic).
-
- When astFindFrame or astConvert is used on two SpecFrames (potentially
- describing different spectral coordinate systems), it returns a \htmlref{Mapping}{Mapping}
- which can be used to transform a position in one SpecFrame into the
- corresponding position in the other. The Mapping is made up of the
- following steps in the indicated order:
-
- \sstitemlist{
-
- \sstitem
- Map values from the system used by the target (wavelength,
- apparent radial velocity, etc) to the system specified by the
- \htmlref{AlignSystem}{AlignSystem} attribute, using the target's rest frequency if necessary.
-
- \sstitem
- Map these values from the target's standard of rest to the standard of
- rest specified by the AlignStdOfRest attribute, using the \htmlref{Epoch}{Epoch}, \htmlref{ObsLat}{ObsLat},
- \htmlref{ObsLon}{ObsLon}, \htmlref{ObsAlt}{ObsAlt}, \htmlref{RefDec}{RefDec} and \htmlref{RefRA}{RefRA} attributes of the target to define the
- two standards of rest.
-
- \sstitem
- Map these values from the standard of rest specified by the
- AlignStdOfRest attribute, to the template's standard of rest, using the
- Epoch, ObsLat, ObsLon, ObsAlt, RefDec and RefRA attributes of the
- template to define the two standards of rest.
-
- \sstitem
- Map these values from the system specified by the AlignSystem
- attribute, to the system used by the template, using the template's
- rest frequency if necessary.
- }
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- SpecFrame
- }{
- All SpecFrames have this attribute.
- }
- }
-}
-\sstroutine{
- AlignSystem\sstlabel{AlignSystem}
-}{
- Coordinate system in which to align the Frame
-}{
- \sstdescription{
- This attribute controls how a \htmlref{Frame}{Frame} behaves when it is used (by
- \htmlref{astFindFrame}{astFindFrame} or \htmlref{astConvert}{astConvert}) as a template to match another (target)
- Frame. It identifies the coordinate system in which the two Frames
- will be aligned by the match.
-
- The values which may be assigned to this attribute, and its default
- value, depend on the class of Frame and are described in the
- {\tt{"}}Applicability{\tt{"}} section below. In general, the AlignSystem attribute
- will accept any of the values which may be assigned to the \htmlref{System}{System}
- attribute.
-
- The \htmlref{Mapping}{Mapping} returned by AST\_FINDFRAME or AST\_CONVERT will use the
- coordinate system specified by the AlignSystem attribute as an
- intermediate coordinate system. The total returned Mapping will first
- map positions from the first Frame into this intermediate coordinate
- system, using the attributes of the first Frame. It will then map
- these positions from the intermediate coordinate system into the
- second Frame, using the attributes of the second Frame.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The AlignSystem attribute for a basic Frame always equals {\tt{"}}Cartesian{\tt{"}},
- and may not be altered.
- }
- \sstsubsection{
- \htmlref{CmpFrame}{CmpFrame}
- }{
- The AlignSystem attribute for a CmpFrame always equals {\tt{"}}Compound{\tt{"}},
- and may not be altered.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The AlignSystem attribute of a FrameSet is the same as that of its
- current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- The default AlignSystem attribute for a SkyFrame is {\tt{"}}ICRS{\tt{"}}.
- }
- \sstsubsection{
- \htmlref{SpecFrame}{SpecFrame}
- }{
- The default AlignSystem attribute for a SpecFrame is {\tt{"}}Wave{\tt{"}}
- (wavelength).
- }
- \sstsubsection{
- \htmlref{TimeFrame}{TimeFrame}
- }{
- The default AlignSystem attribute for a TimeFrame is {\tt{"}}MJD{\tt{"}}.
- }
- }
-}
-\sstroutine{
- AlignTimeScale\sstlabel{AlignTimeScale}
-}{
- Time scale to use when aligning TimeFrames
-}{
- \sstdescription{
- This attribute controls how a \htmlref{TimeFrame}{TimeFrame} behaves when it is used (by
- \htmlref{astFindFrame}{astFindFrame} or \htmlref{astConvert}{astConvert}) as a template to match another (target)
- TimeFrame. It identifies the time scale in which alignment is
- to occur. See the \htmlref{TimeScale}{TimeScale} attribute for a desription of the values
- which may be assigned to this attribute. The default AlignTimeScale
- value depends on the current value of TimeScale: if TimeScale is
- UT1, GMST, LMST or LAST, the default for AlignTimeScale is UT1, for all
- other TimeScales the default is TAI.
-
- When astFindFrame or astConvert is used on two TimeFrames (potentially
- describing different time coordinate systems), it returns a \htmlref{Mapping}{Mapping}
- which can be used to transform a position in one TimeFrame into the
- corresponding position in the other. The Mapping is made up of the
- following steps in the indicated order:
-
- \sstitemlist{
-
- \sstitem
- Map values from the system used by the target (MJD, JD, etc) to the
- system specified by the \htmlref{AlignSystem}{AlignSystem} attribute.
-
- \sstitem
- Map these values from the target's time scale to the time scale
- specified by the AlignTimeScale attribute.
-
- \sstitem
- Map these values from the time scale specified by the AlignTimeScale
- attribute, to the template's time scale.
-
- \sstitem
- Map these values from the system specified by the AlignSystem
- attribute, to the system used by the template.
- }
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- TimeFrame
- }{
- All TimeFrames have this attribute.
- }
- }
-}
-\sstroutine{
- AllWarnings\sstlabel{AllWarnings}
-}{
- A list of all currently available condition names
-}{
- \sstdescription{
- This read-only attribute is a space separated list of all the conditions
- names recognized by the \htmlref{Warnings}{Warnings} attribute. The names are listed
- below.
- }
- \sstattributetype{
- String, read-only
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{FitsChan}{FitsChan}
- }{
- All FitsChans have this attribute.
- }
- }
- \sstdiytopic{
- Conditions
- }{
- The following conditions are currently recognised (all are
- case-insensitive):
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}BadCel{\tt{"}}: This condition arises when reading a \htmlref{FrameSet}{FrameSet} from a
- non-Native encoded FitsChan if an unknown celestial co-ordinate
- system is specified by the CTYPE keywords.
-
- \sstitem
- {\tt{"}}BadCTYPE{\tt{"}}: This condition arises when reading a FrameSet from a
- non-Native encoded FitsChan if an illegal algorithm code is specified
- by a CTYPE keyword, and the illegal code can be converted to an
- equivalent legal code.
-
- \sstitem
- {\tt{"}}BadLat{\tt{"}}: This condition arises when reading a FrameSet from a
- non-Native encoded FitsChan if the latitude of the reference point
- has an absolute value greater than 90 degrees. The actual absolute
- value used is set to exactly 90 degrees in these cases.
-
- \sstitem
- {\tt{"}}BadMat{\tt{"}}: This condition arises if the matrix describing the
- transformation from pixel offsets to intermediate world coordinates
- cannot be inverted. This matrix describes the scaling, rotation, shear,
- etc., applied to the pixel axes, and is specified by keywords such as
- PCi\_j, CDi\_j, CROTA, etc. For example, the matrix will not be invertable
- if any rows or columns consist entirely of zeros. The FITS-WCS Paper I
- {\tt{"}}Representation of World Coordinates in FITS{\tt{"}} by Greisen \& Calabretta
- requires that this matrix be invertable. Many operations (such as
- grid plotting) will not be possible if the matrix cannot be inverted.
-
- \sstitem
- {\tt{"}}BadPV{\tt{"}}: This condition arises when reading a FrameSet from a
- non-Native encoded FitsChan. It is issued if a \htmlref{PVi\_m}{PVi_m} header is found
- that refers to a projection parameter that is not used by the
- projection type specified by CTYPE.
-
- \sstitem
- {\tt{"}}BadVal{\tt{"}}: This condition arises when reading a FrameSet from a
- non-Native encoded FitsChan if it is not possible to convert the
- value of a FITS keywords to the expected type. For instance, this
- can occur if the FITS header contains a string value for a keyword
- which should have a floating point value, or if the keyword has no
- value at all (i.e. is a comment card).
-
- \sstitem
- {\tt{"}}Distortion{\tt{"}}: This condition arises when reading a FrameSet from a
- non-Native encoded FitsChan if any of the CTYPE keywords specify an
- unsupported distortion code using the {\tt{"}}4-3-3{\tt{"}} format specified in
- FITS-WCS paper IV. Such distortion codes are ignored.
-
- \sstitem
- {\tt{"}}NoCTYPE{\tt{"}}: This condition arises if a default CTYPE value is used
- within \htmlref{astRead}{astRead}, due to no value being present in the supplied FitsChan.
- This condition is only tested for when using non-Native encodings.
-
- \sstitem
- {\tt{"}}NoEquinox{\tt{"}}: This condition arises if a default equinox value is used
- within astRead, due to no value being present in the supplied FitsChan.
- This condition is only tested for when using non-Native encodings.
-
- \sstitem
- {\tt{"}}NoRadesys{\tt{"}}: This condition arises if a default reference frame is
- used for an equatorial co-ordinate system within astRead, due to no
- value being present in the supplied FitsChan. This condition is only
- tested for when using non-Native encodings.
-
- \sstitem
- {\tt{"}}NoLonpole{\tt{"}}: This condition arises if a default value is used for
- the LONPOLE keyword within astRead, due to no value being present
- in the supplied FitsChan. This condition is only tested for when
- using non-Native encodings.
-
- \sstitem
- {\tt{"}}NoLatpole{\tt{"}}: This condition arises if a default value is used for
- the LATPOLE keyword within astRead, due to no value being present
- in the supplied FitsChan. This condition is only tested for when
- using non-Native encodings.
-
- \sstitem
- {\tt{"}}NoMjd-obs{\tt{"}}: This condition arises if a default value is used for
- the date of observation within astRead, due to no value being present
- in the supplied FitsChan. This condition is only tested for when using
- non-Native encodings.
-
- \sstitem
- {\tt{"}}Tnx{\tt{"}}: This condition arises if a FrameSet is read from a FITS
- header containing an IRAF {\tt{"}}TNX{\tt{"}} projection which includes terms
- not supproted by AST. Such terms are ignored and so the resulting
- FrameSet may be inaccurate.
-
- \sstitem
- {\tt{"}}Zpx{\tt{"}}: This condition arises if a FrameSet is read from a FITS
- header containing an IRAF {\tt{"}}ZPX{\tt{"}} projection which includes {\tt{"}}lngcor{\tt{"}}
- or {\tt{"}}latcor{\tt{"}} correction terms. These terms are not supported by AST
- and are ignored. The resulting FrameSet may therefore be inaccurate.
- }
- }
-}
-\sstroutine{
- AsTime(axis)\sstlabel{AsTimeaxis}
-}{
- Format celestal coordinates as times?
-}{
- \sstdescription{
- This attribute specifies the default style of formatting to be
- used (e.g. by \htmlref{astFormat}{astFormat}) for the celestial coordinate values
- described by a \htmlref{SkyFrame}{SkyFrame}. It takes a separate boolean value for
- each SkyFrame axis so that, for instance, the setting
- {\tt{"}}AsTime(2)=0{\tt{"}} specifies the default formatting style for
- celestial latitude values.
-
- If the AsTime attribute for a SkyFrame axis is zero, then
- coordinates on that axis will be formatted as angles by default
- (using degrees, minutes and seconds), otherwise they will be
- formatted as times (using hours, minutes and seconds).
-
- The default value of AsTime is chosen according to the sky
- coordinate system being represented, as determined by the
- SkyFrame's \htmlref{System}{System} attribute. This ensures, for example, that
- right ascension values will be formatted as times by default,
- following normal conventions.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- SkyFrame
- }{
- All SkyFrames have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The AsTime attribute operates by changing the default value of
- the corresponding \htmlref{Format(axis)}{Formataxis} attribute. This, in turn, may
- also affect the value of the \htmlref{Unit(axis)}{Unitaxis} attribute.
-
- \sstitem
- Only the default style of formatting is affected by the AsTime
- value. If an explicit Format(axis) value is set, it will
- over-ride any effect from the AsTime attribute.
- }
- }
-}
-\sstroutine{
- Base\sstlabel{Base}
-}{
- FrameSet base Frame index
-}{
- \sstdescription{
- This attribute gives the index of the \htmlref{Frame}{Frame} which is to be
- regarded as the {\tt{"}}base{\tt{"}} Frame within a \htmlref{FrameSet}{FrameSet}. The default is
- the first Frame added to the FrameSet when it is created (this
- Frame always has an index of 1).
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- FrameSet
- }{
- All FrameSets have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Inverting a FrameSet (inverting the boolean sense of its
- \htmlref{Invert}{Invert} attribute, with the \htmlref{astInvert}{astInvert} function for example) will
- interchange the values of its Base and \htmlref{Current}{Current} attributes.
- }
- }
-}
-\sstroutine{
- Border\sstlabel{Border}
-}{
- Draw a border around valid regions of a Plot?
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
- whether a border is drawn around regions corresponding to the
- valid physical coordinates of a \htmlref{Plot}{Plot} (c.f. \htmlref{astBorder}{astBorder}).
-
- If the Border value of a Plot is non-zero, then this border will
- be drawn as part of the grid. Otherwise, the border is not drawn
- (although axis labels and tick marks will still appear, unless
- other relevant Plot attributes indicate that they should
- not). The default behaviour is to draw the border if tick marks
- and numerical labels will be drawn around the edges of the
- plotting area (see the \htmlref{Labelling}{Labelling} attribute), but to omit it
- otherwise.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
-}
-\sstroutine{
- Bottom(axis)\sstlabel{Bottomaxis}
-}{
- Lowest axis value to display
-}{
- \sstdescription{
- This attribute gives the lowest axis value to be displayed (for
- instance, by the \htmlref{astGrid}{astGrid} method).
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{Frame}{Frame}
- }{
- The default supplied by the Frame class is to display all axis
- values, without any limit.
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- The SkyFrame class re-defines the default Bottom value to -90 degrees
- for latitude axes, and 0 degrees for co-latitude axes. The
- default for longitude axes is to display all axis values.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When specifying this attribute by name, it should be
- subscripted with the number of the Frame axis to which it
- applies.
- }
- }
-}
-\sstroutine{
- Bounded\sstlabel{Bounded}
-}{
- Is the Region bounded?
-}{
- \sstdescription{
- This is a read-only attribute indicating if the \htmlref{Region}{Region} is bounded.
- A Region is bounded if it is contained entirely within some
- finite-size bounding box.
- }
- \sstattributetype{
- Integer (boolean), read-only.
- }
- \sstapplicability{
- \sstsubsection{
- Region
- }{
- All Regions have this attribute.
- }
- }
-}
-\sstroutine{
- CDMatrix\sstlabel{CDMatrix}
-}{
- Use CDi\_j keywords to represent pixel scaling, rotation, etc?
-}{
- \sstdescription{
- This attribute is a boolean value which specifies how the linear
- transformation from pixel coordinates to intermediate world
- coordinates should be represented within a \htmlref{FitsChan}{FitsChan} when using
- FITS-WCS encoding. This transformation describes the scaling,
- rotation, shear, etc., of the pixel axes.
-
- If the attribute has a non-zero value then the transformation is
- represented by a set of CDi\_j keywords representing a square matrix
- (where {\tt{"}}i{\tt{"}} is the index of an intermediate world coordinate axis
- and {\tt{"}}j{\tt{"}} is the index of a pixel axis). If the attribute has a zero
- value the transformation is represented by a set of PCi\_j keywords
- (which also represent a square matrix) together with a corresponding
- set of CDELTi keywords representing the axis scalings. See FITS-WCS
- paper II {\tt{"}}Representation of Celestial Coordinates in FITS{\tt{"}} by
- M. Calabretta \& E.W. Greisen, for a complete description of these two
- schemes.
-
- The default value of the CDMatrix attribute is determined by the
- contents of the FitsChan at the time the attribute is accessed. If
- the FitsChan contains any CDi\_j keywords then the default value is
- non-zero. Otherwise it is zero. Note, reading a \htmlref{FrameSet}{FrameSet} from a
- FitsChan will in general consume any CDi\_j keywords present in the
- FitsChan. Thus the default value for CDMatrix following a read will
- usually be zero, even if the FitsChan originally contained some
- CDi\_j keywords. This behaviour is similar to that of the \htmlref{Encoding}{Encoding}
- attribute, the default value for which is determined by the contents
- of the FitsChan at the time the attribute is accessed. If you wish
- to retain the original value of the CDMatrix attribute (that is,
- the value before reading the FrameSet) then you should enquire the
- default value before doing the read, and then set that value
- explicitly.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- FitsChan
- }{
- All FitsChans have this attribute.
- }
- }
-}
-\sstroutine{
- CarLin\sstlabel{CarLin}
-}{
- Ignore spherical rotations on CAR projections?
-}{
- \sstdescription{
- This attribute is a boolean value which specifies how FITS {\tt{"}}CAR{\tt{"}}
- (plate carree, or {\tt{"}}Cartesian{\tt{"}}) projections should be treated when
- reading a \htmlref{FrameSet}{FrameSet} from a foreign encoded FITS header. If zero (the
- default), it is assumed that the CAR projection conforms to the
- conventions described in the FITS world coordinate system (FITS-WCS)
- paper II {\tt{"}}Representation of Celestial Coordinates in FITS{\tt{"}} by
- M. Calabretta \& E.W. Greisen. If CarLin is non-zero, then these
- conventions are ignored, and it is assumed that the mapping from pixel
- coordinates to celestial coordinates is a simple linear transformation
- (hence the attribute name {\tt{"}}CarLin{\tt{"}}). This is appropriate for some older
- FITS data which claims to have a {\tt{"}}CAR{\tt{"}} projection, but which in fact do
- not conform to the conventions of the FITS-WCS paper. Furthermore, if
- CarLin is non-zero, it is assumed that CDELT and CD keywords are
- in units of degrees rather than radians (as required by the
- FITS-WCS papers).
-
- The FITS-WCS paper specifies that headers which include a CAR projection
- represent a linear mapping from pixel coordinates to {\tt{"}}native spherical
- coordinates{\tt{"}}, NOT celestial coordinates. An extra mapping is then
- required from native spherical to celestial. This mapping is a 3D
- rotation and so the overall \htmlref{Mapping}{Mapping} from pixel to celestial coordinates
- is NOT linear. See the FITS-WCS papers for further details.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{FitsChan}{FitsChan}
- }{
- All FitsChans have this attribute.
- }
- }
-}
-\sstroutine{
- Card\sstlabel{Card}
-}{
- Index of current FITS card in a FitsChan
-}{
- \sstdescription{
- This attribute gives the index of the {\tt{"}}current{\tt{"}} FITS header card
- within a \htmlref{FitsChan}{FitsChan}, the first card having an index of 1. The
- choice of current card affects the behaviour of functions that
- access the contents of the FitsChan, such as \htmlref{astDelFits}{astDelFits},
- \htmlref{astFindFits}{astFindFits} and \htmlref{astPutFits}{astPutFits}.
-
- A value assigned to Card will position the FitsChan at any
- desired point, so that a particular card within it can be
- accessed. Alternatively, the value of Card may be enquired in
- order to determine the current position of a FitsChan.
-
- The default value of Card is 1. This means that clearing
- this attribute (using \htmlref{astClear}{astClear}) effectively {\tt{"}}rewinds{\tt{"}} the
- FitsChan, so that the first card is accessed next. If Card is
- set to a value which exceeds the total number of cards in the
- FitsChan (as given by its \htmlref{Ncard}{Ncard} attribute), it is regarded as
- pointing at the {\tt{"}}end-of-file{\tt{"}}. In this case, the value returned
- in response to an enquiry is always one more than the number of
- cards in the FitsChan.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- FitsChan
- }{
- All FitsChans have this attribute.
- }
- }
-}
-\sstroutine{
- Class\sstlabel{Class}
-}{
- Object class name
-}{
- \sstdescription{
- This attribute gives the name of the class to which an \htmlref{Object}{Object}
- belongs.
- }
- \sstattributetype{
- Character string, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- All Objects have this attribute.
- }
- }
-}
-\sstroutine{
- Clean\sstlabel{Clean}
-}{
- Remove cards used whilst reading even if an error occurs?
-}{
- \sstdescription{
- This attribute indicates whether or not cards should be removed from
- the \htmlref{FitsChan}{FitsChan} if an error occurs within
- \htmlref{astRead}{astRead}.
- A succesful read on a FitsChan always results in the removal of
- the cards which were involved in the description of the returned
- \htmlref{Object}{Object}. However, in the event of an error during the read (for instance
- if the cards in the FitsChan have illegal values, or if some required
- cards are missing) no cards will be removed from the FitsChan if
- the Clean attribute is zero (the default). If Clean is non-zero then
- any cards which were used in the aborted attempt to read an object
- will be removed.
-
- This provides a means of {\tt{"}}cleaning{\tt{"}} a FitsChan of WCS related cards
- which works even in the event of the cards not forming a legal WCS
- description.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- FitsChan
- }{
- All FitsChans have this attribute.
- }
- }
-}
-\sstroutine{
- Clip\sstlabel{Clip}
-}{
- Clip lines and/or markers at the Plot boundary?
-}{
- \sstdescription{
- This attribute controls whether curves and markers are clipped at the
- boundary of the graphics box specified when the \htmlref{Plot}{Plot} was created. A
- value of 3 implies both markers and curves are clipped at the Plot
- boundary. A value of 2 implies markers are clipped, but not curves. A
- value of 1 implies curves are clipped, but not markers. A value of
- zero implies neither curves nor markers are clipped. The default
- value is 1. Note, this attributes controls only the clipping
- performed internally within AST. The underlying graphics system may
- also apply clipping. In such cases, removing clipping using this
- attribute does not guarantee that no clipping will be visible in the
- final plot.
-
- The \htmlref{astClip}{astClip} function
- can be used to establish generalised clipping within arbitrary
- regions of the Plot.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
-}
-\sstroutine{
- ClipOp\sstlabel{ClipOp}
-}{
- Combine Plot clipping limits using a boolean OR?
-}{
- \sstdescription{
- This attribute controls how the clipping limits specified for
- each axis of a \htmlref{Plot}{Plot} (using the \htmlref{astClip}{astClip} function) are
- combined. This, in turn, determines which parts of the graphical
- output will be visible.
-
- If the ClipOp attribute of a Plot is zero (the default),
- graphical output is visible only if it satisfies the clipping
- limits on all the axes of the clipping \htmlref{Frame}{Frame} (a boolean
- AND). Otherwise, if ClipOp is non-zero, output is visible if it
- satisfies the clipping limits on one or more axes (a boolean
- OR).
-
- An important use of this attribute is to allow areas of a Plot
- to be left clear (e.g. as a background for some text). To
- achieve this, the lower and upper clipping bounds supplied to
- astClip should be reversed, and the ClipOp attribute of the
- Plot should be set to a non-zero value.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
-}
-\sstroutine{
- Closed\sstlabel{Closed}
-}{
- Should the boundary be considered to be inside the region?
-}{
- \sstdescription{
- This attribute controls whether points on the boundary of a \htmlref{Region}{Region}
- are considered to be inside or outside the region. If the attribute
- value is non-zero (the default), points on the boundary are considered
- to be inside the region (that is, the Region is {\tt{"}}closed{\tt{"}}). However,
- if the attribute value is zero, points on the bounary are considered
- to be outside the region.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Region
- }{
- All Regions have this attribute.
- }
- \sstsubsection{
- \htmlref{PointList}{PointList}
- }{
- The value of the Closed attribute is ignored by PointList regions.
- If the PointList region has not been negated, then it is always
- assumed to be closed. If the PointList region has been negated, then
- it is always assumed to be open. This is required since points
- have zero volume and therefore consist entirely of boundary.
- }
- \sstsubsection{
- \htmlref{CmpRegion}{CmpRegion}
- }{
- The default Closed value for a CmpRegion is the Closed value of its
- first component Region.
- }
- \sstsubsection{
- \htmlref{Stc}{Stc}
- }{
- The default Closed value for an Stc is the Closed value of its
- encapsulated Region.
- }
- }
-}
-\sstroutine{
- Colour(element)\sstlabel{Colourelement}
-}{
- Colour index for a Plot element
-}{
- \sstdescription{
- This attribute determines the colour index used when drawing
- each element of graphical output produced by a \htmlref{Plot}{Plot}. It takes a
- separate value for each graphical element so that, for instance,
- the setting {\tt{"}}Colour(title)=2{\tt{"}} causes the Plot title to be drawn
- using colour index 2. The synonym {\tt{"}}Color{\tt{"}} may also be used.
-
- The range of integer colour indices available and their
- appearance is determined by the underlying graphics system. The
- default behaviour is for all graphical elements to be drawn
- using the default colour index supplied by this graphics system
- (normally, this is likely to result in white plotting on a black
- background, or vice versa).
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- For a list of the graphical elements available, see the
- description of the Plot class.
-
- \sstitem
- If no graphical element is specified, (e.g. {\tt{"}}Colour{\tt{"}} instead
- of {\tt{"}}Colour(title){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will
- affect the attribute value of all graphical elements, while a
- {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}} operation will use just the Colour(TextLab)
- value.
- }
- }
-}
-\sstroutine{
- Comment\sstlabel{Comment}
-}{
- Include textual comments in output?
-}{
- \sstdescription{
- This is a boolean attribute which controls whether textual
- comments are to be included in the output generated by a
- \htmlref{Channel}{Channel}. If included, they will describe what each item of
- output represents.
-
- If Comment is non-zero, then comments will be included. If
- it is zero, comments will be omitted.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Channel
- }{
- The default value is non-zero for a normal Channel.
- }
- \sstsubsection{
- \htmlref{FitsChan}{FitsChan}
- }{
- The default value is non-zero for a FitsChan.
- }
- \sstsubsection{
- \htmlref{XmlChan}{XmlChan}
- }{
- The default value is zero for an XmlChan.
- }
- }
-}
-\sstroutine{
- Current\sstlabel{Current}
-}{
- FrameSet current Frame index
-}{
- \sstdescription{
- This attribute gives the index of the \htmlref{Frame}{Frame} which is to be
- regarded as the {\tt{"}}current{\tt{"}} Frame within a \htmlref{FrameSet}{FrameSet}. The default
- is the most recent Frame added to the FrameSet (this Frame
- always has an index equal to the FrameSet's \htmlref{Nframe}{Nframe} attribute).
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- FrameSet
- }{
- All FrameSets have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Inverting a FrameSet (inverting the boolean sense of its
- \htmlref{Invert}{Invert} attribute, with the \htmlref{astInvert}{astInvert} function for example) will
- interchange the values of its \htmlref{Base}{Base} and Current attributes.
- }
- }
-}
-\sstroutine{
- DSBCentre\sstlabel{DSBCentre}
-}{
- The central position of interest in a dual sideband spectrum
-}{
- \sstdescription{
- This attribute specifies the central position of interest in a dual
- sideband spectrum. Its sole use is to determine the local oscillator
- frequency (the frequency which marks the boundary between the lower
- and upper sidebands). See the description of the \htmlref{IF}{IF} (intermediate
- frequency) attribute for details of how the local oscillator frequency
- is calculated. The sideband containing this central position is
- referred to as the {\tt{"}}observed{\tt{"}} sideband, and the other sideband as
- the {\tt{"}}image{\tt{"}} sideband.
-
- The value is accessed as a position in the spectral system
- represented by the \htmlref{SpecFrame}{SpecFrame} attributes inherited by this class, but
- is stored internally as topocentric frequency. Thus, if the \htmlref{System}{System}
- attribute of the \htmlref{DSBSpecFrame}{DSBSpecFrame} is set to {\tt{"}}VRAD{\tt{"}}, the Unit attribute
- set to {\tt{"}}m/s{\tt{"}} and the \htmlref{StdOfRest}{StdOfRest} attribute set to {\tt{"}}LSRK{\tt{"}}, then values
- for the DSBCentre attribute should be supplied as radio velocity in
- units of {\tt{"}}m/s{\tt{"}} relative to the kinematic LSR (alternative units may
- be used by appending a suitable units string to the end of the value).
- This value is then converted to topocentric frequency and stored. If
- (say) the Unit attribute is subsequently changed to {\tt{"}}km/s{\tt{"}} before
- retrieving the current value of the DSBCentre attribute, the stored
- topocentric frequency will be converted back to LSRK radio velocity,
- this time in units of {\tt{"}}km/s{\tt{"}}, before being returned.
-
- The default value for this attribute is 30 GHz.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- DSBSpecFrame
- }{
- All DSBSpecFrames have this attribute.
- }
- }
- \sstdiytopic{
- Note
- }{
- \sstitemlist{
-
- \sstitem
- The attributes which define the transformation to or from topocentric
- frequency should be assigned their correct values before accessing
- this attribute. These potentially include System, Unit, StdOfRest,
- \htmlref{ObsLon}{ObsLon}, \htmlref{ObsLat}{ObsLat}, \htmlref{ObsAlt}{ObsAlt}, \htmlref{Epoch}{Epoch}, \htmlref{RefRA}{RefRA}, \htmlref{RefDec}{RefDec} and \htmlref{RestFreq}{RestFreq}.
- }
- }
-}
-\sstroutine{
- DefB1950\sstlabel{DefB1950}
-}{
- Use FK4 B1950 as defaults?
-}{
- \sstdescription{
- This attribute is a boolean value which specifies a default equinox
- and reference frame to use when reading a \htmlref{FrameSet}{FrameSet} from a \htmlref{FitsChan}{FitsChan}
- with a foreign (i.e. non-native) encoding. It is only used if the FITS
- header contains RA and DEC axes but contains no information about the
- reference frame or equinox. If this is the case, then values of FK4 and
- B1950 are assumed if the DefB1950 attribute has a non-zero value and
- ICRS is assumed if DefB1950 is zero. The default value for DefB1950
- depends on the value of the \htmlref{Encoding}{Encoding} attribute: for FITS-WCS encoding
- the default is zero, and for all other encodings it is one.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- FitsChan
- }{
- All FitsChans have this attribute.
- }
- }
-}
-\sstroutine{
- Digits/Digits(axis)\sstlabel{DigitsDigitsaxis}
-}{
- Number of digits of precision
-}{
- \sstdescription{
- This attribute specifies how many digits of precision are
- required by default when a coordinate value is formatted for a
- \htmlref{Frame}{Frame} axis (e.g. using \htmlref{astFormat}{astFormat}). Its value may be set either
- for a Frame as a whole, or (by subscripting the attribute name
- with the number of an axis) for each axis individually. Any
- value set for an individual axis will over-ride the value for
- the Frame as a whole.
-
- Note that the Digits value acts only as a means of determining a
- default Format string. Its effects are over-ridden if a Format
- string is set explicitly for an axis. However, if the Format
- attribute specifies the precision using the string {\tt{"}}.$*${\tt{"}}, then
- the Digits attribute is used to determine the number of decimal
- places to produce.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The default Digits value supplied by the Frame class is 7. If
- a value less than 1 is supplied, then 1 is used instead.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Digits attribute of a FrameSet (or one of its axes) is
- the same as that of its current Frame (as specified by the
- \htmlref{Current}{Current} attribute).
- }
- \sstsubsection{
- \htmlref{Plot}{Plot}
- }{
- The default Digits value used by the Plot class when drawing
- annotated axis labels is the smallest value which results in all
- adjacent labels being distinct.
- }
- \sstsubsection{
- \htmlref{TimeFrame}{TimeFrame}
- }{
- The Digits attribute is ignored when a TimeFrame formats a value
- as a date and time string (see the Format attribute).
- }
- }
-}
-\sstroutine{
- Direction(axis)\sstlabel{Directionaxis}
-}{
- Display axis in conventional direction?
-}{
- \sstdescription{
- This attribute is a boolean value which suggests how the axes of
- a \htmlref{Frame}{Frame} should be displayed (e.g.) in graphical output. By
- default, it has the value one, indicating that they should be
- shown in the conventional sense (increasing left to right for an
- abscissa, and bottom to top for an ordinate). If set to zero,
- this attribute indicates that the direction should be reversed,
- as would often be done for an astronomical magnitude or a right
- ascension axis.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The default Direction value supplied by the Frame class is 1,
- indicating that all axes should be displayed in the
- conventional direction.
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- The SkyFrame class re-defines the default Direction value to
- suggest that certain axes (e.g. right ascension) should be
- plotted in reverse when appropriate.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Direction attribute of a FrameSet axis is the same as
- that of its current Frame (as specified by the \htmlref{Current}{Current}
- attribute).
- }
- \sstsubsection{
- \htmlref{Plot}{Plot}
- }{
- The Direction attribute of the base Frame in a Plot is set to
- indicate the sense of the two graphics axes, as implied by the
- graphics bounding box supplied when the Plot was created.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When specifying this attribute by name, it should be
- subscripted with the number of the Frame axis to which it
- applies.
-
- \sstitem
- The Direction attribute does not directly affect the behaviour
- of the AST library. Instead, it serves as a hint to applications
- programs about the orientation in which they may wish to display
- any data associated with the Frame. Applications are free to
- ignore this hint if they wish.
- }
- }
-}
-\sstroutine{
- Disco\sstlabel{Disco}
-}{
- PcdMap pincushion/barrel distortion coefficient
-}{
- \sstdescription{
- This attribute specifies the pincushion/barrel distortion coefficient
- used by a \htmlref{PcdMap}{PcdMap}. This coefficient is set when the PcdMap is created,
- but may later be modified. If the attribute is cleared, its default
- value is zero, which gives no distortion. For pincushion distortion,
- the value should be positive. For barrel distortion, it should be
- negative.
-
- Note that the forward transformation of a PcdMap applies the
- distortion specified by this attribute and the inverse
- transformation removes this distortion. If the PcdMap is inverted
- (e.g. using \htmlref{astInvert}{astInvert}), then the forward transformation will
- remove the distortion and the inverse transformation will apply
- it. The distortion itself will still be given by the same value of
- Disco.
- }
- \sstattributetype{
- Double precision.
- }
- \sstapplicability{
- \sstsubsection{
- PcdMap
- }{
- All PcdMaps have this attribute.
- }
- }
-}
-\sstroutine{
- Domain\sstlabel{Domain}
-}{
- Coordinate system domain
-}{
- \sstdescription{
- This attribute contains a string which identifies the physical
- domain of the coordinate system that a \htmlref{Frame}{Frame} describes.
-
- The Domain attribute also controls how a Frame behaves when it is
- used (by \htmlref{astFindFrame}{astFindFrame}) as a template to match another (target)
- Frame. It does this by specifying the Domain that the target
- Frame should have in order to match the template. If the Domain
- value in the template Frame is set, then only targets with the
- same Domain value will be matched. If the template's Domain
- value is not set, however, then the target's Domain will be
- ignored.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The default Domain value supplied by the Frame class is an
- empty string.
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- The SkyFrame class re-defines the default Domain value to be
- {\tt{"}}SKY{\tt{"}}.
- }
- \sstsubsection{
- \htmlref{CmpFrame}{CmpFrame}
- }{
- The CmpFrame class re-defines the default Domain value to be
- of the form {\tt{"}}$<$dom1$>$-$<$dom2$>${\tt{"}}, where $<$dom1$>$ and $<$dom2$>$ are the
- Domains of the two component Frames. If both these Domains are
- blank, then the string {\tt{"}}CMP{\tt{"}} is used as the default Domain name.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Domain attribute of a FrameSet is the same as that of its
- current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- \sstsubsection{
- \htmlref{SpecFrame}{SpecFrame}
- }{
- The SpecFrame class re-defines the default Domain value to be
- {\tt{"}}SPECTRUM{\tt{"}}.
- }
- \sstsubsection{
- \htmlref{DSBSpecFrame}{DSBSpecFrame}
- }{
- The DSBSpecFrame class re-defines the default Domain value to be
- {\tt{"}}DSBSPECTRUM{\tt{"}}.
- }
- \sstsubsection{
- \htmlref{FluxFrame}{FluxFrame}
- }{
- The FluxFrame class re-defines the default Domain value to be
- {\tt{"}}FLUX{\tt{"}}.
- }
- \sstsubsection{
- \htmlref{SpecFluxFrame}{SpecFluxFrame}
- }{
- The FluxFrame class re-defines the default Domain value to be
- {\tt{"}}SPECTRUM-FLUX{\tt{"}}.
- }
- \sstsubsection{
- \htmlref{TimeFrame}{TimeFrame}
- }{
- The TimeFrame class re-defines the default Domain value to be
- {\tt{"}}TIME{\tt{"}}.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- All Domain values are converted to upper case and white space
- is removed before use.
- }
- }
-}
-\sstroutine{
- DrawAxes(axis)\sstlabel{DrawAxesaxis}
-}{
- Draw axes for a Plot?
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
- whether curves representing coordinate axes should be drawn.
- It takes a separate value for each physical axis of a
- \htmlref{Plot}{Plot} so that, for instance, the setting {\tt{"}}DrawAxes(2)=0{\tt{"}}
- specifies that no axis should be drawn for the second axis.
-
- If drawn, these axis lines will pass through any tick marks
- associated with numerical labels drawn to mark values on the
- axes. The location of these tick marks and labels (and hence the
- axis lines) is determined by the Plot's \htmlref{LabelAt(axis)}{LabelAtaxis} attribute.
-
- If the DrawAxes value of a Plot is non-zero (the default), then
- axis lines will be drawn, otherwise they will be omitted.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- \htmlref{Axis}{Axis} lines are drawn independently of any coordinate grid
- lines (see the \htmlref{Grid}{Grid} attribute) so grid lines may be used to
- substitute for axis lines if required.
-
- \sstitem
- In some circumstances, numerical labels and tick marks are
- drawn around the edges of the plotting area (see the \htmlref{Labelling}{Labelling}
- attribute). In this case, the value of the DrawAxes attribute
- is ignored.
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}DrawAxes{\tt{"}} instead of
- {\tt{"}}DrawAxes(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
- the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
- {\tt{"}}test{\tt{"}} operation will use just the DrawAxes(1) value.
- }
- }
-}
-\sstroutine{
- DrawTitle\sstlabel{DrawTitle}
-}{
- Draw a title for a Plot?
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
- whether a title is drawn.
-
- If the DrawTitle value of a \htmlref{Plot}{Plot} is non-zero (the default), then
- the title will be drawn, otherwise it will be omitted.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- \sstsubsection{
- \htmlref{Plot3D}{Plot3D}
- }{
- The Plot3D class ignores this attributes, assuming a value of
- zero.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The text used for the title is obtained from the Plot's \htmlref{Title}{Title}
- attribute.
-
- \sstitem
- The vertical placement of the title can be controlled using
- the \htmlref{TitleGap}{TitleGap} attribute.
- }
- }
-}
-\sstroutine{
- Dut1\sstlabel{Dut1}
-}{
- The UT1-UTC correction
-}{
- \sstdescription{
- This attribute is used when calculating the Local Apparent Sidereal
- Time corresponding to \htmlref{SkyFrame}{SkyFrame}'s \htmlref{Epoch}{Epoch} value (used when converting
- positions to or from the {\tt{"}}AzEl{\tt{"}} system). It should be set to the
- difference, in seconds, between the UT1 and UTC timescales at the
- moment in time represented by the SkyFrame's Epoch attribute. The
- value to use is unpredictable and depends on changes in the earth's
- rotation speed. Values for UT1-UTC can be obtained from the
- International Earth Rotation and Reference Systems Service
- (IERS) at http://www.iers.org/.
-
- Currently, the correction is always less than 1 second. This is
- ensured by the occasional introduction of leap seconds into the UTC
- timescale. Therefore no great error will usually result if no value
- is assigned to this attribute (in which case a default value of
- zero is used). However, it is possible that a decision may be taken
- at some time in the future to abandon the introduction of leap
- seconds, in which case the DUT correction could grow to significant
- sizes.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{Frame}{Frame}
- }{
- All Frames have this attribute.
- }
- }
-}
-\sstroutine{
- Edge(axis)\sstlabel{Edgeaxis}
-}{
- Which edges to label in a Plot
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
- which edges of a \htmlref{Plot}{Plot} are used for displaying numerical and
- descriptive axis labels. It takes a separate value for each
- physical axis of the Plot so that, for instance, the setting
- {\tt{"}}Edge(2)=left{\tt{"}} specifies which edge to use to display labels for
- the second axis.
-
- The values {\tt{"}}left{\tt{"}}, {\tt{"}}top{\tt{"}}, {\tt{"}}right{\tt{"}} and {\tt{"}}bottom{\tt{"}} (or any
- abbreviation) can be supplied for this attribute. The default is
- usually {\tt{"}}bottom{\tt{"}} for the first axis and {\tt{"}}left{\tt{"}} for the second
- axis. However, if exterior labelling was requested (see the
- \htmlref{Labelling}{Labelling} attribute) but cannot be produced using these default
- Edge values, then the default values will be swapped if this
- enables exterior labelling to be produced.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- \sstsubsection{
- \htmlref{Plot3D}{Plot3D}
- }{
- The Plot3D class ignores this attributes. Instead it uses its
- own \htmlref{RootCorner}{RootCorner} attribute to determine which edges of the 3D plot
- to label.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- In some circumstances, numerical labels will be drawn along
- internal grid lines instead of at the edges of the plotting area
- (see the Labelling attribute). In this case, the Edge attribute
- only affects the placement of the descriptive labels (these are
- drawn at the edges of the plotting area, rather than along the
- axis lines).
- }
- }
-}
-\sstroutine{
- Encoding\sstlabel{Encoding}
-}{
- System for encoding Objects as FITS headers
-}{
- \sstdescription{
- This attribute specifies the encoding system to use when AST
- Objects are stored as FITS header cards in a \htmlref{FitsChan}{FitsChan}. It
- affects the behaviour of the \htmlref{astWrite}{astWrite} and \htmlref{astRead}{astRead} functions when
- they are used to transfer any AST \htmlref{Object}{Object} to or from an external
- representation consisting of FITS header cards (i.e. whenever a
- write or read operation is performed using a FitsChan as the I/O
- \htmlref{Channel}{Channel}).
-
- There are several ways (conventions) by which coordinate system
- information may be represented in the form of FITS headers and
- the Encoding attribute is used to specify which of these should
- be used. The encoding options available are outlined in the
- {\tt{"}}Encodings Available{\tt{"}} section below, and in more detail in the
- sections which follow.
-
- Encoding systems differ in the range of possible Objects
- (e.g. classes) they can represent, in the restrictions they
- place on these Objects (e.g. compatibility with some
- externally-defined coordinate system model) and in the number of
- Objects that can be stored together in any particular set of
- FITS header cards (e.g. multiple Objects, or only a single
- Object). The choice of encoding also affects the range of
- external applications which can potentially read and interpret
- the FITS header cards produced.
-
- The encoding options available are not necessarily mutually
- exclusive, and it may sometimes be possible to store multiple
- Objects (or the same Object several times) using different
- encodings within the same set of FITS header cards. This
- possibility increases the likelihood of other applications being
- able to read and interpret the information.
-
- By default, a FitsChan will attempt to determine which encoding
- system is already in use, and will set the default Encoding
- value accordingly (so that subsequent I/O operations adopt the
- same conventions). It does this by looking for certain critical
- FITS keywords which only occur in particular encodings. For
- details of how this works, see the {\tt{"}}Choice of Default Encoding{\tt{"}}
- section below. If you wish to ensure that a particular encoding
- system is used, independently of any FITS cards already present,
- you should set an explicit Encoding value yourself.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- FitsChan
- }{
- All FitsChans have this attribute.
- }
- }
- \sstdiytopic{
- Encodings Available
- }{
- The Encoding attribute can take any of the following (case
- insensitive) string values to select the corresponding encoding
- system:
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}DSS{\tt{"}}: Encodes coordinate system information in FITS header
- cards using the convention developed at the Space Telescope
- Science Institute (STScI) for the Digitised Sky Survey (DSS)
- astrometric plate calibrations. The main advantages of this
- encoding are that FITS images which use it are widely available
- and it is understood by a number of important and
- well-established astronomy applications. For further details,
- see the section {\tt{"}}The DSS Encoding{\tt{"}} below.
-
- \sstitem
- {\tt{"}}FITS-WCS{\tt{"}}: Encodes coordinate system information in FITS
- header cards using the conventions described in the FITS
- world coordinate system (FITS-WCS) papers by E.W. Greisen,
- M. Calabretta, et al. The main advantages of this encoding are that
- it should be understood by any FITS-WCS compliant application and
- is likely to be adopted widely for FITS data in future. For further
- details, see the section {\tt{"}}The FITS-WCS Encoding{\tt{"}} below.
-
- \sstitem
- {\tt{"}}FITS-PC{\tt{"}}: Encodes coordinate system information in FITS
- header cards using the conventions described in an earlier draft
- of the FITS world coordinate system papers by E.W. Greisen and
- M. Calabretta. This encoding uses a combination of CDELTi and
- PCiiijjj keywords to describe the scale and rotation of the pixel
- axes. This encoding is included to support existing data and
- software which uses these now superceded conventions. In general,
- the {\tt{"}}FITS-WCS{\tt{"}} encoding (which uses CDi\_j or PCi\_j keywords to
- describe the scale and rotation) should be used in preference to
- {\tt{"}}FITS-PC{\tt{"}}.
-
- \sstitem
- {\tt{"}}FITS-IRAF{\tt{"}}: Encodes coordinate system information in FITS
- header cards using the conventions described in the document
- {\tt{"}}World Coordinate Systems Representations Within the FITS
- Format{\tt{"}} by R.J. Hanisch and D.G. Wells, 1988. This encoding is
- currently employed by the IRAF data analysis facility, so its
- use will facilitate data exchange with IRAF. Its main advantages
- are that it is a stable convention which approximates to a
- subset of the propsed FITS-WCS encoding (above). This makes it
- suitable as an interim method for storing coordinate system
- information in FITS headers until the FITS-WCS encoding becomes
- stable. Since many datasets currently use the FITS-IRAF
- encoding, conversion of data from FITS-IRAF to the final form of
- FITS-WCS is likely to be well supported.
-
- \sstitem
- {\tt{"}}FITS-AIPS{\tt{"}}: Encodes coordinate system information in FITS
- header cards using the conventions originally introduced by the
- AIPS data analysis facility. This is base on the use of CDELTi and
- CROTAi keuwords to desribe the scale and rotation of each axis.
- These conventions have been superceded but are still widely used.
-
- \sstitem
- {\tt{"}}FITS-AIPS$+$$+${\tt{"}}: Encodes coordinate system information in FITS
- header cards using the conventions used by the AIPS$+$$+$ project.
- This is an extension of FITS-AIPS which includes some of the
- features of FITS-IRAF and FITS-PC.
-
- \sstitem
- {\tt{"}}FITS-CLASS{\tt{"}}: Encodes coordinate system information in FITS
- header cards using the conventions used by the CLASS project.
- CLASS is a software package for reducing single-dish radio and
- sub-mm spectroscopic data. See the section {\tt{"}}CLASS FITS format{\tt{"}} at
- http://www.iram.fr/IRAMFR/GILDAS/doc/html/class-html/.
-
- \sstitem
- {\tt{"}}NATIVE{\tt{"}}: Encodes AST Objects in FITS header cards using a
- convention which is private to the AST library (but adheres to
- the general FITS standard) and which uses FITS keywords that
- will not clash with other encoding systems. The main advantages
- of this are that any class of AST Object may be encoded, and any
- (reasonable) number of Objects may be stored sequentially in the
- same FITS header. This makes FITS headers an almost loss-less
- communication path for passing AST Objects between applications
- (although all such applications must, of course, make use of the
- AST library to interpret the information). For further details,
- see the section {\tt{"}}The NATIVE Encoding{\tt{"}} below.
- }
- }
- \sstdiytopic{
- Choice of Default Encoding
- }{
- If the Encoding attribute of a FitsChan is not set, the default
- value it takes is determined by the presence of certain critical
- FITS keywords within the FitsChan. The sequence of decisions
- used to arrive at the default value is as follows:
-
- \sstitemlist{
-
- \sstitem
- If the FitsChan contains any keywords beginning with the
- string {\tt{"}}BEGAST{\tt{"}}, then NATIVE encoding is used,
-
- \sstitem
- Otherwise, FITS-CLASS is used if the FitsChan contains a DELTAV
- keyword and a keyword of the form VELO-xxx, where xxx indicates one
- of the rest frames used by class (e.g. {\tt{"}}VELO-LSR{\tt{"}}).
-
- \sstitem
- Otherwise, if the FitsChan contains a CTYPE keyword which
- represents a spectral axis using the conventions of the AIPS and
- AIPS$+$$+$ projects (e.g. {\tt{"}}FELO-LSR{\tt{"}}, etc), then one of FITS-AIPS or
- FITS-AIPS$+$$+$ encoding is used. FITS-AIPS$+$$+$ is used if any of the
- keywords CDi\_j, PROJP, LONPOLE or LATPOLE are
- found in the FitsChan. Otherwise FITS-AIPS is used.
-
- \sstitem
- Otherwise, if the FitsChan contains a keyword of the form
- {\tt{"}}PCiiijjj{\tt{"}}, where {\tt{"}}i{\tt{"}} and {\tt{"}}j{\tt{"}} are single digits, then
- FITS-PC encoding is used,
-
- \sstitem
- Otherwise, if the FitsChan contains a keyword of the form
- {\tt{"}}CDiiijjj{\tt{"}}, where {\tt{"}}i{\tt{"}} and {\tt{"}}j{\tt{"}} are single digits, then
- FITS-IRAF encoding is used,
-
- \sstitem
- Otherwise, if the FitsChan contains a keyword of the form
- {\tt{"}}CDi\_j{\tt{"}}, and at least one of RADECSYS, PROJPi, or CjVALi
- where {\tt{"}}i{\tt{"}} and {\tt{"}}j{\tt{"}} are single digits, then FITS-IRAF encoding is
- used.
-
- \sstitem
- Otherwise, if the FitsChan contains any keywords of the form
- PROJPi, CjVALi or RADECSYS, where {\tt{"}}i{\tt{"}} and {\tt{"}}j{\tt{"}} are single digits,
- then FITS-PC encoding is used.
-
- \sstitem
- Otherwise, if the FitsChan contains a keyword of the form
- CROTAi, where {\tt{"}}i{\tt{"}} is a single digit, then FITS-AIPS encoding is
- used.
-
- \sstitem
- Otherwise, if the FitsChan contains a keyword of the form
- CRVALi, where {\tt{"}}i{\tt{"}} is a single digit, then FITS-WCS encoding is
- used.
-
- \sstitem
- Otherwise, if the FitsChan contains the {\tt{"}}PLTRAH{\tt{"}} keyword, then
- DSS encoding is used,
-
- \sstitem
- Otherwise, if none of these conditions is met (as would be the
- case when using an empty FitsChan), then NATIVE encoding is
- used.
-
- }
- Except for the NATIVE and DSS encodings, all the above checks
- also require that the header contains at least one CTYPE, CRPIX and
- CRVAL keyword (otherwise the checking process continues to the next
- case).
-
- Setting an explicit value for the Encoding attribute always
- over-rides this default behaviour.
-
- Note that when writing information to a FitsChan, the choice of
- encoding will depend greatly on the type of application you
- expect to be reading the information in future. If you do not
- know this, there may sometimes be an advantage in writing the
- information several times, using a different encoding on each
- occasion.
- }
- \sstdiytopic{
- The DSS Encoding
- }{
- The DSS encoding uses FITS header cards to store a multi-term
- polynomial which relates pixel positions on a digitised
- photographic plate to celestial coordinates (right ascension and
- declination). This encoding may only be used to store a single
- AST Object in any set of FITS header cards, and that Object must
- be a \htmlref{FrameSet}{FrameSet} which conforms to the STScI/DSS coordinate system
- model (this means the \htmlref{Mapping}{Mapping} which relates its base and current
- Frames must include either a \htmlref{DssMap}{DssMap} or a \htmlref{WcsMap}{WcsMap} with type
- AST\_\_TAN or AST\_\_TPN).
-
- When reading a DSS encoded Object (using astRead), the FitsChan
- concerned must initially be positioned at the first card (its
- \htmlref{Card}{Card} attribute must equal 1) and the result of the read, if
- successful, will always be a pointer to a FrameSet. The base
- \htmlref{Frame}{Frame} of this FrameSet represents DSS pixel coordinates, and the
- current Frame represents DSS celestial coordinates. Such a read
- is always destructive and causes the FITS header cards required
- for the construction of the FrameSet to be removed from the
- FitsChan, which is then left positioned at the {\tt{"}}end-of-file{\tt{"}}. A
- subsequent read using the same encoding will therefore not
- return another FrameSet, even if the FitsChan is rewound.
-
- When astWrite is used to store a FrameSet using DSS encoding,
- an attempt is first made to simplify the FrameSet to see if it
- conforms to the DSS model. Specifically, the current Frame must
- be a FK5 \htmlref{SkyFrame}{SkyFrame}; the projection must be a tangent plane
- (gnomonic) projection with polynomial corrections conforming to
- DSS requirements, and north must be parallel to the second base
- Frame axis.
-
- If the simplification process succeeds, a description of the
- FrameSet is written to the FitsChan using appropriate DSS FITS
- header cards. The base Frame of the FrameSet is used to form the
- DSS pixel coordinate system and the current Frame gives the DSS
- celestial coordinate system. A successful write operation will
- over-write any existing DSS encoded data in the FitsChan, but
- will not affect other (non-DSS) header cards. If a destructive
- read of a DSS encoded Object has previously occurred, then an
- attempt will be made to store the FITS header cards back in
- their original locations.
-
- If an attempt to simplify a FrameSet to conform to the DSS model
- fails (or if the Object supplied is not a FrameSet), then no
- data will be written to the FitsChan and astWrite will return
- zero. No error will result.
- }
- \sstdiytopic{
- The FITS-WCS Encoding
- }{
- The FITS-WCS convention uses FITS header cards to describe the
- relationship between pixels in an image (not necessarily
- 2-dimensional) and one or more related {\tt{"}}world coordinate systems{\tt{"}}.
- The FITS-WCS encoding may only be used to store a single AST Object
- in any set of FITS header cards, and that Object must be a FrameSet
- which conforms to the FITS-WCS model (the FrameSet may, however,
- contain multiple Frames which will be result in multiple FITS
- {\tt{"}}alternate axis descriptions{\tt{"}}). Details of the use made by this
- Encoding of the conventions described in the FITS-WCS papers are
- given in the appendix {\tt{"}}FITS-WCS Coverage{\tt{"}} of this document. A few
- main points are described below.
-
- The rotation and scaling of the intermediate world coordinate system
- can be specified using either {\tt{"}}CDi\_j{\tt{"}} keywords, or {\tt{"}}PCi\_j{\tt{"}} together
- with {\tt{"}}CDELTi{\tt{"}} keywords. When writing a FrameSet to a FitsChan, the
- the value of the \htmlref{CDMatrix}{CDMatrix} attribute of the FitsChan determines
- which system is used.
-
- In addition, this encoding supports the {\tt{"}}TAN with polynomial correction
- terms{\tt{"}} projection which was included in a draft of the FITS-WCS paper,
- but was not present in the final version. A {\tt{"}}TAN with polynomial
- correction terms{\tt{"}} projection is represented using a WcsMap with type
- AST\_\_TPN (rather than AST\_\_TAN which is used to represent simple
- TAN projections). When reading a FITS header, a CTYPE keyword value
- including a {\tt{"}}-TAN{\tt{"}} code results in an AST\_\_TPN projection if there are
- any projection parameters (given by the \htmlref{PVi\_m}{PVi_m} keywords) associated with
- the latitude axis, or if there are projection parameters associated
- with the longitude axis for m greater than 4. When writing a
- FrameSet to a FITS header, an AST\_\_TPN projection gives rise to a
- CTYPE value including the normal {\tt{"}}-TAN{\tt{"}} code, but the projection
- parameters are stored in keywords with names {\tt{"}}QVi\_m{\tt{"}}, instead of the
- usual {\tt{"}}PVi\_m{\tt{"}}. Since these QV parameters are not part of the
- FITS-WCS standard they will be ignored by other non-AST software,
- resulting in the WCS being interpreted as a simple TAN projection
- without any corrections. This should be seen as an interim solution
- until such time as an agreed method for describing projection
- distortions within FITS-WCS has been published.
-
- AST extends the range of celestial coordinate sytstems which may be
- described using this encoding by inclusion of the allowing the use of
- {\tt{"}}AZ--{\tt{"}} and {\tt{"}}EL--{\tt{"}} as the coordinate specification within CTYPE
- values. These form a longitude/latitude pair of axes which describe
- azimuth and elevation. The geographic position of the observer
- should be supplied using the OBSGEO-X/Y/Z keywords described in FITS-WCS
- paper III. Currently, a simple model is used which includes diurnal
- aberration, but ignores atmospheric refraction, polar motion, etc.
- These may be added in a leter release.
-
- When reading a FITS-WCS encoded Object (using astRead), the FitsChan
- concerned must initially be positioned at the first card (its
- Card attribute must equal 1) and the result of the read, if
- successful, will always be a pointer to a FrameSet. The base
- Frame of this FrameSet represents FITS-WCS pixel coordinates,
- and the current Frame represents the physical coordinate system
- described by the FITS-WCS primary axis descriptions. If
- secondary axis descriptions are also present, then the FrameSet
- may contain additional (non-current) Frames which represent
- these. Such a read is always destructive and causes the FITS
- header cards required for the construction of the FrameSet to be
- removed from the FitsChan, which is then left positioned at the
- {\tt{"}}end-of-file{\tt{"}}. A subsequent read using the same encoding will
- therefore not return another FrameSet, even if the FitsChan is
- rewound.
-
- When astWrite is used to store a FrameSet using FITS-WCS
- encoding, an attempt is first made to simplify the FrameSet to
- see if it conforms to the FITS-WCS model. If this simplification
- process succeeds (as it often should, as the model is reasonably
- flexible), a description of the FrameSet is written to the
- FitsChan using appropriate FITS header cards. The base Frame of
- the FrameSet is used to form the FITS-WCS pixel coordinate
- system and the current Frame gives the physical coordinate
- system to be described by the FITS-WCS primary axis
- descriptions. Any additional Frames in the FrameSet may be used
- to construct secondary axis descriptions, where appropriate.
-
- A successful write operation will over-write any existing
- FITS-WCS encoded data in the FitsChan, but will not affect other
- (non-FITS-WCS) header cards. If a destructive read of a FITS-WCS
- encoded Object has previously occurred, then an attempt will be
- made to store the FITS header cards back in their original
- locations. Otherwise, the new cards will be inserted following
- any other FITS-WCS related header cards present or, failing
- that, in front of the current card (as given by the Card
- attribute).
-
- If an attempt to simplify a FrameSet to conform to the FITS-WCS
- model fails (or if the Object supplied is not a FrameSet), then
- no data will be written to the FitsChan and astWrite will
- return zero. No error will result.
- }
- \sstdiytopic{
- The FITS-IRAF Encoding
- }{
- The FITS-IRAF encoding can, for most purposes, be considered as
- a subset of the FITS-WCS encoding (above), although it differs
- in the details of the FITS keywords used. It is used in exactly
- the same way and has the same restrictions, but with the
- addition of the following:
-
- \sstitemlist{
-
- \sstitem
- The only celestial coordinate systems that may be represented
- are equatorial, galactic and ecliptic,
-
- \sstitem
- Sky projections can be represented only if any associated
- projection parameters are set to their default values.
-
- \sstitem
- Secondary axis descriptions are not supported, so when writing
- a FrameSet to a FitsChan, only information from the base and
- current Frames will be stored.
-
- }
- Note that this encoding is provided mainly as an interim measure to
- provide a more stable alternative to the FITS-WCS encoding until the
- FITS standard for encoding WCS information is finalised. The name
- {\tt{"}}FITS-IRAF{\tt{"}} indicates the general keyword conventions used and does
- not imply that this encoding will necessarily support all features of
- the WCS scheme used by IRAF software. Nevertheless, an attempt has
- been made to support a few such features where they are known to be
- used by important sources of data.
-
- When writing a FrameSet using the FITS-IRAF encoding, axis rotations
- are specified by a matrix of FITS keywords of the form {\tt{"}}CDi\_j{\tt{"}}, where
- {\tt{"}}i{\tt{"}} and {\tt{"}}j{\tt{"}} are single digits. The alternative form {\tt{"}}CDiiijjj{\tt{"}}, which
- is also in use, is recognised when reading an Object, but is never
- written.
-
- In addition, the experimental IRAF {\tt{"}}ZPX{\tt{"}} and {\tt{"}}TNX{\tt{"}} sky projections will
- be accepted when reading, but will never be written (the corresponding
- FITS {\tt{"}}ZPN{\tt{"}} or {\tt{"}}distorted TAN{\tt{"}} projection being used instead). However,
- there are restrictions on the use of these experimental projections.
- For {\tt{"}}ZPX{\tt{"}}, longitude and latitude correction surfaces (appearing as
- {\tt{"}}lngcor{\tt{"}} or {\tt{"}}latcor{\tt{"}} terms in the IRAF-specific {\tt{"}}WAT{\tt{"}} keywords) are
- not supported. For {\tt{"}}TNX{\tt{"}} projections, only cubic surfaces encoded as
- simple polynomials with {\tt{"}}half cross-terms{\tt{"}} are supported. If an
- un-usable {\tt{"}}TNX{\tt{"}} or {\tt{"}}ZPX{\tt{"}} projection is encountered while reading
- from a FitsChan, a simpler form of TAN or ZPN projection is used
- which ignores the unsupported features and may therefore be
- inaccurate. If this happens, a warning message is added to the
- contents of the FitsChan as a set of cards using the keyword {\tt{"}}ASTWARN{\tt{"}}.
-
- You should not normally attempt to mix the foreign FITS encodings within
- the same FitsChan, since there is a risk that keyword clashes may occur.
- }
- \sstdiytopic{
- The FITS-PC Encoding
- }{
- The FITS-PC encoding can, for most purposes, be considered as
- equivalent to the FITS-WCS encoding (above), although it differs
- in the details of the FITS keywords used. It is used in exactly
- the same way and has the same restrictions.
- }
- \sstdiytopic{
- The FITS-AIPS Encoding
- }{
- The FITS-AIPS encoding can, for most purposes, be considered as
- equivalent to the FITS-WCS encoding (above), although it differs
- in the details of the FITS keywords used. It is used in exactly
- the same way and has the same restrictions, but with the
- addition of the following:
-
- \sstitemlist{
-
- \sstitem
- The only celestial coordinate systems that may be represented
- are equatorial, galactic and ecliptic,
-
- \sstitem
- Spectral axes can only be represented if they represent
- frequency, radio velocity or optical velocity, and are linearly
- sampled in frequency. In addition, the standard of rest
- must be LSRK, LSRD, barycentric or geocentric.
-
- \sstitem
- Sky projections can be represented only if any associated
- projection parameters are set to their default values.
-
- \sstitem
- The AIT, SFL and MER projections can only be written if the CRVAL
- keywords are zero for both longitude and latitude axes.
-
- \sstitem
- Secondary axis descriptions are not supported, so when writing
- a FrameSet to a FitsChan, only information from the base and
- current Frames will be stored.
-
- \sstitem
- If there are more than 2 axes in the base and current Frames, any
- rotation must be restricted to the celestial plane, and must involve
- no shear.
- }
- }
- \sstdiytopic{
- The FITS-AIPS$+$$+$ Encoding
- }{
- The FITS-AIPS$+$$+$ encoding is based on the FITS-AIPS encoding, but
- includes some features of the FITS-IRAF and FITS-PC encodings.
- Specifically, any celestial projections supported by FITS-PC may be
- used, including those which require parameterisation, and the axis
- rotation and scaling may be specified using CDi\_j keywords. When
- writing a FITS header, rotation will be specified using CROTA/CDELT
- keywords if possible, otherwise CDi\_j keywords will be used instead.
- }
- \sstdiytopic{
- The FITS-CLASS Encoding
- }{
- The FITS-CLASS encoding uses the conventions of the CLASS project.
- These are described in the section {\tt{"}}Developer Manual{\tt{"}}/{\tt{"}}CLASS FITS
- Format{\tt{"}} contained in the CLASS documentation at:
-
- http://www.iram.fr/IRAMFR/GILDAS/doc/html/class-html/class.html.
-
- This encoding is similar to FITS-AIPS with the following restrictions:
-
- \sstitemlist{
-
- \sstitem
- When a \htmlref{SpecFrame}{SpecFrame} is created by reading a FITS-CLASS header, the
- attributes describing the observer's position (\htmlref{ObsLat}{ObsLat}, \htmlref{ObsLon}{ObsLon} and
- \htmlref{ObsAlt}{ObsAlt}) are left unset because the CLASS encoding does not specify
- these values. Conversions to or from the topocentric standard of rest
- will therefore be inaccurate (typically by up to about 0.5 km/s)
- unless suitable values are assigned to these attributes after the
- FrameSet has been created.
-
- \sstitem
- When writing a FrameSet to a FITS-CLASS header, the current Frame
- in the FrameSet must have at least 3 WCS axes, of which one must be
- a linear spectral axis. The spectral axis in the created header will
- always describe frequency. If the spectral axis in the supplied
- FrameSet refers to some other system (e.g. radio velocity, etc),
- then it will be converted to frequency.
-
- \sstitem
- There must be a pair of celestial axes - either (RA,Dec) or
- (GLON,GLAT). RA and Dec must be either FK4/B1950 or FK5/J2000.
-
- \sstitem
- A limited range of projection codes (TAN, ARC, STG, AIT, SFL, SIN)
- can be used. For AIT and SFL, the reference point must be at the
- origin of longitude and latitude. For SIN, the associated projection
- parameters must both be zero.
-
- \sstitem
- No rotation of the celestial axes is allowed, unless the spatial
- axes are degenerate (i.e. cover only a single pixel).
-
- \sstitem
- The frequency axis in the created header will always describe
- frequency in the source rest frame. If the supplied FrameSet uses
- some other standard of rest then suitable conversion will be applied.
-
- \sstitem
- The source velocity must be defined. In other words, the SpecFrame
- attributes \htmlref{SourceVel}{SourceVel} and \htmlref{SourceVRF}{SourceVRF} must have been assigned values.
-
- \sstitem
- The frequency axis in a FITS-CLASS header does not represent
- absolute frequency, but instead represents offsets from the rest
- frequency in the standard of rest of the source.
-
- }
- When writing a FrameSet out using FITS-CLASS encoding, the current
- Frame may be temporarily modified if this will allow the header
- to be produced. If this is done, the associated pixel-$>$WCS Mapping
- will also be modified to take account of the changes to the Frame.
- The modifications performed include re-ordering axes (WCS axes, not
- pixel axes), changing spectral coordinate system and standard of
- rest, changing the celestial coordinate system and reference equinox,
- and changing axis units.
- }
- \sstdiytopic{
- The NATIVE Encoding
- }{
- The NATIVE encoding may be used to store a description of any
- class of AST Object in the form of FITS header cards, and (for
- most practical purposes) any number of these Object descriptions
- may be stored within a single set of FITS cards. If multiple
- Object descriptions are stored, they are written and read
- sequentially. The NATIVE encoding makes use of unique FITS
- keywords which are designed not to clash with keywords that have
- already been used for other purposes (if a potential clash is
- detected, an alternative keyword is constructed to avoid the
- clash).
-
- When reading a NATIVE encoded object from a FitsChan (using
- astRead), FITS header cards are read, starting at the current
- card (as determined by the Card attribute), until the start of
- the next Object description is found. This description is then
- read and converted into an AST Object, for which a pointer is
- returned. Such a read is always destructive and causes all the
- FITS header cards involved in the Object description to be
- removed from the FitsChan, which is left positioned at the
- following card.
-
- The Object returned may be of any class, depending on the
- description that was read, and other AST routines may be used to
- validate it (for example, by examining its \htmlref{Class}{Class} or \htmlref{ID}{ID} attribute
- using astGetC). If further NATIVE encoded Object descriptions
- exist in the FitsChan, subsequent calls to astRead will return
- the Objects they describe in sequence (and destroy their
- descriptions) until no more remain between the current card and
- the {\tt{"}}end-of-file{\tt{"}}.
-
- When astWrite is used to write an Object using NATIVE encoding,
- a description of the Object is inserted immediately before the
- current card (as determined by the Card attribute). Multiple
- Object descriptions may be written in this way and are stored
- separately (and sequentially if the Card attribute is not
- modified between the writes). A write operation using the NATIVE
- encoding does not over-write previously written Object
- descriptions. Note, however, that subsequent behaviour is
- undefined if an Object description is written inside a
- previously-written description, so this should be avoided.
-
- When an Object is written to a FitsChan using NATIVE encoding,
- astWrite should (barring errors) always transfer data and
- return a value of 1.
- }
-}
-\sstroutine{
- Epoch\sstlabel{Epoch}
-}{
- Epoch of observation
-}{
- \sstdescription{
- This attribute is used to qualify the coordinate systems described by
- a \htmlref{Frame}{Frame}, by giving the moment in time when the coordinates are known
- to be correct. Often, this will be the date of observation, and is
- important in cases where coordinates systems move with respect to each
- other over the course of time.
-
- The Epoch attribute is stored as a Modified Julian Date, but
- when setting its value it may be given in a variety of
- formats. See the {\tt{"}}Input Formats{\tt{"}} section (below) for details.
- Strictly, the Epoch value should be supplied in the TDB timescale,
- but for some purposes (for instance, for converting sky positions
- between different types of equatorial system) the timescale is not
- significant, and UTC may be used.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- All Frames have this attribute. The basic Frame class provides
- a default of J2000.0 (Julian) but makes no use of the Epoch value.
- This is because the Frame class does not distinguish between
- different Cartesian coordinate systems (see the \htmlref{System}{System} attribute).
- }
- \sstsubsection{
- \htmlref{CmpFrame}{CmpFrame}
- }{
- The default Epoch value for a CmpFrame is selected as follows;
- if the Epoch attribute has been set in the first component Frame
- then the Epoch value from the first component Frame is used as
- the default for the CmpFrame. Otherwise, if the Epoch attribute has
- been set in the second component Frame then the Epoch value from the
- second component Frame is used as the default for the CmpFrame.
- Otherwise, the default Epoch value from the first component
- Frame is used as the default for the CmpFrame. When the Epoch
- attribute of a CmpFrame is set or cleared, it is also set or
- cleared in the two component Frames.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Epoch attribute of a FrameSet is the same as that of its current
- Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- The coordinates of sources within a SkyFrame can changed with time
- for various reasons, including: (i) changing aberration of light
- caused by the observer's velocity (e.g. due to the Earth's motion
- around the Sun), (ii) changing gravitational deflection by the Sun
- due to changes in the observer's position with time, (iii) fictitious
- motion due to rotation of non-inertial coordinate systems (e.g. the
- old FK4 system), and (iv) proper motion of the source itself (although
- this last effect is not handled by the SkyFrame class because it
- affects individual sources rather than the coordinate system as
- a whole).
-
- The default Epoch value in a SkyFrame is B1950.0 (Besselian) for the
- old FK4-based coordinate systems (see the System attribute) and
- J2000.0 (Julian) for all others.
-
- Care must be taken to distinguish the Epoch value, which relates to
- motion (or apparent motion) of the source, from the superficially
- similar \htmlref{Equinox}{Equinox} value. The latter is used to qualify a coordinate
- system which is itself in motion in a (notionally) predictable way
- as a result of being referred to a slowly moving reference plane
- (e.g. the equator).
-
- See the description of the System attribute for details of which
- qualifying attributes apply to each celestial coordinate system.
- }
- \sstsubsection{
- \htmlref{TimeFrame}{TimeFrame}
- }{
- A TimeFrame describes a general time axis and so cannot be completely
- characterised by a single Epoch value. For this reason the TimeFrame
- class makes no use of the Epoch attribute. However, user code can
- still make use of the attribute if necessary to represent a {\tt{"}}typical{\tt{"}}
- time spanned by the TimeFrame. The default Epoch value for a TimeFrame
- will be the TDB equivalent of the current value of the TimeFrame's
- \htmlref{TimeOrigin}{TimeOrigin} attribute. If no value has been set for TimeOrigin,
- then the default Epoch value is J2000.0.
- }
- }
- \sstdiytopic{
- Input Formats
- }{
- The formats accepted when setting an Epoch value are listed
- below. They are all case-insensitive and are generally tolerant
- of extra white space and alternative field delimiters:
-
- \sstitemlist{
-
- \sstitem
- Besselian Epoch: Expressed in decimal years, with or without
- decimal places ({\tt{"}}B1950{\tt{"}} or {\tt{"}}B1976.13{\tt{"}} for example).
-
- \sstitem
- Julian Epoch: Expressed in decimal years, with or without
- decimal places ({\tt{"}}J2000{\tt{"}} or {\tt{"}}J2100.9{\tt{"}} for example).
-
- \sstitem
- Year: Decimal years, with or without decimal places ({\tt{"}}1996.8{\tt{"}}
- for example). Such values are interpreted as a Besselian epoch
- (see above) if less than 1984.0 and as a Julian epoch otherwise.
-
- \sstitem
- Julian Date: With or without decimal places ({\tt{"}}JD 2454321.9{\tt{"}} for
- example).
-
- \sstitem
- Modified Julian Date: With or without decimal places
- ({\tt{"}}MJD 54321.4{\tt{"}} for example).
-
- \sstitem
- Gregorian Calendar Date: With the month expressed either as an
- integer or a 3-character abbreviation, and with optional decimal
- places to represent a fraction of a day ({\tt{"}}1996-10-2{\tt{"}} or
- {\tt{"}}1996-Oct-2.6{\tt{"}} for example). If no fractional part of a day is
- given, the time refers to the start of the day (zero hours).
-
- \sstitem
- Gregorian Date and Time: Any calendar date (as above) but with
- a fraction of a day expressed as hours, minutes and seconds
- ({\tt{"}}1996-Oct-2 12:13:56.985{\tt{"}} for example). The date and time can be
- separated by a space or by a {\tt{"}}T{\tt{"}} (as used by ISO8601 format).
- }
- }
- \sstdiytopic{
- Output Format
- }{
- When enquiring Epoch values, the format used is the {\tt{"}}Year{\tt{"}}
- format described under {\tt{"}}Input Formats{\tt{"}}. This is a value in
- decimal years which will be a Besselian epoch if less than
- 1984.0 and a Julian epoch otherwise. By omitting any character
- prefix, this format allows the Epoch value to be obtained as
- either a character string or a floating point value.
- }
-}
-\sstroutine{
- Equinox\sstlabel{Equinox}
-}{
- Epoch of the mean equinox
-}{
- \sstdescription{
- This attribute is used to qualify those celestial coordinate
- systems described by a \htmlref{SkyFrame}{SkyFrame} which are notionally based on
- the ecliptic (the plane of the Earth's orbit around the Sun)
- and/or the Earth's equator.
-
- Both of these planes are in motion and their positions are
- difficult to specify precisely. In practice, therefore, a model
- ecliptic and/or equator are used instead. These, together with
- the point on the sky that defines the coordinate origin (the
- intersection of the two planes termed the {\tt{"}}mean equinox{\tt{"}}) move
- with time according to some model which removes the more rapid
- fluctuations. The SkyFrame class supports both the FK4 and
- FK5 models.
-
- The position of a fixed source expressed in any of these
- coordinate systems will appear to change with time due to
- movement of the coordinate system itself (rather than motion of
- the source). Such coordinate systems must therefore be
- qualified by a moment in time (the {\tt{"}}epoch of the mean equinox{\tt{"}}
- or {\tt{"}}equinox{\tt{"}} for short) which allows the position of the model
- coordinate system on the sky to be determined. This is the role
- of the Equinox attribute.
-
- The Equinox attribute is stored as a Modified Julian Date, but
- when setting or getting its value you may use the same formats
- as for the \htmlref{Epoch}{Epoch} attribute (q.v.).
-
- The default Equinox value is B1950.0 (Besselian) for the old
- FK4-based coordinate systems (see the \htmlref{System}{System} attribute) and
- J2000.0 (Julian) for all others.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- SkyFrame
- }{
- All SkyFrames have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Care must be taken to distinguish the Equinox value, which
- relates to the definition of a time-dependent coordinate system
- (based on solar system reference planes which are in motion),
- from the superficially similar Epoch value. The latter is used
- to qualify coordinate systems where the positions of sources
- change with time (or appear to do so) for a variety of other
- reasons, such as aberration of light caused by the observer's
- motion, etc.
-
- \sstitem
- See the description of the System attribute for details of
- which qualifying attributes apply to each celestial coordinate
- system.
- }
- }
-}
-\sstroutine{
- Escape\sstlabel{Escape}
-}{
- Allow changes of character attributes within strings?
-}{
- \sstdescription{
- This attribute controls the appearance of text strings and numerical
- labels drawn by the \htmlref{astGrid}{astGrid} and (for the \htmlref{Plot}{Plot} class) \htmlref{astText}{astText} functions,
- by determining if any escape sequences contained within the strings
- should be used to control the appearance of the text, or should
- be printed literally. Note, the \htmlref{Plot3D}{Plot3D} class only interprets escape
- sequences within the
- astGrid function.
-
- If the Escape value of a Plot is one (the default), then any
- escape sequences in text strings produce the effects described
- below when printed. Otherwise, they are printed literally.
-
- See also the \htmlref{astEscapes}{astEscapes} function.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstdiytopic{
- Escape Sequences
- }{
- Escape sequences are introduced into the text string by a percent
- {\tt{"}}\%{\tt{"}} character. Any unrecognised, illegal or incomplete escape sequences
- are printed literally. The following escape sequences are
- currently recognised ({\tt{"}}...{\tt{"}} represents a string of one or more
- decimal digits):
-
- \%\% - Print a literal {\tt{"}}\%{\tt{"}} character.
-
- \%$\wedge$...$+$ - Draw subsequent characters as super-scripts. The digits
- {\tt{"}}...{\tt{"}} give the distance from the base-line of {\tt{"}}normal{\tt{"}}
- text to the base-line of the super-script text, scaled
- so that a value of {\tt{"}}100{\tt{"}} corresponds to the height of
- {\tt{"}}normal{\tt{"}} text.
- \%$\wedge$$+$ - Draw subsequent characters with the normal base-line.
-
- \%v...$+$ - Draw subsequent characters as sub-scripts. The digits
- {\tt{"}}...{\tt{"}} give the distance from the base-line of {\tt{"}}normal{\tt{"}}
- text to the base-line of the sub-script text, scaled
- so that a value of {\tt{"}}100{\tt{"}} corresponds to the height of
- {\tt{"}}normal{\tt{"}} text.
-
- \%v$+$ - Draw subsequent characters with the normal base-line
- (equivalent to \%$\wedge$$+$).
-
- \%$>$...$+$ - Leave a gap before drawing subsequent characters.
- The digits {\tt{"}}...{\tt{"}} give the size of the gap, scaled
- so that a value of {\tt{"}}100{\tt{"}} corresponds to the height of
- {\tt{"}}normal{\tt{"}} text.
-
- \%$<$...$+$ - Move backwards before drawing subsequent characters.
- The digits {\tt{"}}...{\tt{"}} give the size of the movement, scaled
- so that a value of {\tt{"}}100{\tt{"}} corresponds to the height of
- {\tt{"}}normal{\tt{"}} text.
-
- \%s...$+$ - Change the Size attribute for subsequent characters. The
- digits {\tt{"}}...{\tt{"}} give the new Size as a fraction of the
- {\tt{"}}normal{\tt{"}} Size, scaled so that a value of {\tt{"}}100{\tt{"}} corresponds
- to 1.0;
-
- \%s$+$ - Reset the Size attribute to its {\tt{"}}normal{\tt{"}} value.
-
- \%w...$+$ - Change the Width attribute for subsequent characters. The
- digits {\tt{"}}...{\tt{"}} give the new width as a fraction of the
- {\tt{"}}normal{\tt{"}} Width, scaled so that a value of {\tt{"}}100{\tt{"}} corresponds
- to 1.0;
-
- \%w$+$ - Reset the Size attribute to its {\tt{"}}normal{\tt{"}} value.
-
- \%f...$+$ - Change the Font attribute for subsequent characters. The
- digits {\tt{"}}...{\tt{"}} give the new Font value.
-
- \%f$+$ - Reset the Font attribute to its {\tt{"}}normal{\tt{"}} value.
-
- \%c...$+$ - Change the Colour attribute for subsequent characters. The
- digits {\tt{"}}...{\tt{"}} give the new Colour value.
-
- \%c$+$ - Reset the Colour attribute to its {\tt{"}}normal{\tt{"}} value.
-
- \%t...$+$ - Change the Style attribute for subsequent characters. The
- digits {\tt{"}}...{\tt{"}} give the new Style value.
-
- \%t$+$ - Reset the Style attribute to its {\tt{"}}normal{\tt{"}} value.
-
- \%h$+$ - Remember the current horizontal position (see {\tt{"}}\%g$+${\tt{"}})
-
- \%g$+$ - Go to the horizontal position of the previous {\tt{"}}\%h$+${\tt{"}} (if any).
-
- \%- - Push the current graphics attribute values onto the top of
- the stack (see {\tt{"}}\%$+${\tt{"}}).
-
- \%$+$ - Pop attributes values of the top the stack (see {\tt{"}}\%-{\tt{"}}). If
- the stack is empty, {\tt{"}}normal{\tt{"}} attribute values are restored.
- }
-}
-\sstroutine{
- FillFactor\sstlabel{FillFactor}
-}{
- Fraction of the Region which is of interest
-}{
- \sstdescription{
- This attribute indicates the fraction of the \htmlref{Region}{Region} which is of
- interest. AST does not use this attribute internally for any purpose.
- Typically, it could be used to indicate the fraction of the Region for
- which data is available.
-
- The supplied value must be in the range 0.0 to 1.0, and the default
- value is 1.0 (except as noted below).
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- Region
- }{
- All Regions have this attribute.
- }
- \sstsubsection{
- \htmlref{CmpRegion}{CmpRegion}
- }{
- The default FillFactor for a CmpRegion is the FillFactor of its
- first component Region.
- }
- \sstsubsection{
- \htmlref{Prism}{Prism}
- }{
- The default FillFactor for a Prism is the product of the
- FillFactors of its two component Regions.
- }
- \sstsubsection{
- \htmlref{Stc}{Stc}
- }{
- The default FillFactor for an Stc is the FillFactor of its
- encapsulated Region.
- }
- }
-}
-\sstroutine{
- FitsDigits\sstlabel{FitsDigits}
-}{
- Digits of precision for floating point FITS values
-}{
- \sstdescription{
- This attribute gives the number of significant decimal digits to
- use when formatting floating point values for inclusion in the
- FITS header cards within a \htmlref{FitsChan}{FitsChan}.
-
- By default, a positive value is used which results in no loss of
- information, assuming that the value's precision is double.
- Usually, this causes no problems.
-
- However, to adhere strictly to the recommendations of the FITS
- standard, the width of the formatted value (including sign,
- decimal point and exponent) ought not to be more than 20
- characters. If you are concerned about this, you should set
- FitsDigits to a negative value, such as -15. In this case, the
- absolute value ($+$15) indicates the maximum number of significant
- digits to use, but the actual number used may be fewer than this
- to ensure that the FITS recommendations are satisfied. When
- using this approach, the resulting number of significant digits
- may depend on the value being formatted and on the presence of
- any sign, decimal point or exponent.
-
- The value of this attribute is effective when FITS header cards
- are output, either using
- \htmlref{astFindFits}{astFindFits} or by the action of the FitsChan's sink function
- when it is finally deleted.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- FitsChan
- }{
- All FitsChans have this attribute.
- }
- }
-}
-\sstroutine{
- Font(element)\sstlabel{Fontelement}
-}{
- Character font for a Plot element
-}{
- \sstdescription{
- This attribute determines the character font index used when
- drawing each element of graphical output produced by a \htmlref{Plot}{Plot}. It
- takes a separate value for each graphical element so that, for
- instance, the setting {\tt{"}}Font(title)=2{\tt{"}} causes the Plot title to
- be drawn using font number 2.
-
- The range of integer font indices available and the appearance
- of the resulting text is determined by the underlying graphics
- system. The default behaviour is for all graphical elements to
- be drawn using the default font supplied by this graphics
- system.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- For a list of the graphical elements available, see the
- description of the Plot class.
-
- \sstitem
- If no graphical element is specified, (e.g. {\tt{"}}Font{\tt{"}} instead
- of {\tt{"}}Font(title){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will
- affect the attribute value of all graphical elements, while a
- {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}} operation will use just the Font(TextLab)
- value.
- }
- }
-}
-\sstroutine{
- Format(axis)\sstlabel{Formataxis}
-}{
- Format specification for axis values
-}{
- \sstdescription{
- This attribute specifies the format to be used when displaying
- coordinate values associated with a particular \htmlref{Frame}{Frame} axis
- (i.e. to convert values from binary to character form). It is
- interpreted by the \htmlref{astFormat}{astFormat} function and determines the
- formatting which it applies.
-
- If no Format value is set for a Frame axis, a default value is
- supplied instead. This is based on the value of the Digits, or
- Digits(axis), attribute and is chosen so that it displays the
- requested number of digits of precision.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The Frame class interprets this attribute as a format
- specification string to be passed to the C {\tt{"}}printf{\tt{"}} function
- (e.g. {\tt{"}}\%1.7G{\tt{"}}) in order to format a single coordinate value
- (supplied as a double precision number).
-
- When supplying a value for this attribute, beware that the
- {\tt{"}}\%{\tt{"}} character may be interpreted directly as a format
- specification by some printf-like functions (such as
- \htmlref{astSet}{astSet}). You may need to double it (i.e. use {\tt{"}}\%\%{\tt{"}}) to avoid
- this.
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- The SkyFrame class re-defines the syntax and default value of
- the Format string to allow the formatting of sexagesimal
- values as appropriate for the particular celestial coordinate
- system being represented. The syntax of SkyFrame Format
- strings is described (below) in the {\tt{"}}SkyFrame Formats{\tt{"}}
- section.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Format attribute of a FrameSet axis is the same as that
- of its current Frame (as specified by the \htmlref{Current}{Current}
- attribute). Note that the syntax of the Format string is also
- determined by the current Frame.
- }
- \sstsubsection{
- \htmlref{TimeFrame}{TimeFrame}
- }{
- The TimeFrame class extends the syntax of the Format string to
- allow the formatting of TimeFrame axis values as Gregorian calendar
- dates and times. The syntax of TimeFrame Format strings is described
- (below) in the {\tt{"}}TimeFrame Formats{\tt{"}} section.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When specifying this attribute by name, it should be
- subscripted with the number of the Frame axis to which it
- applies.
- }
- }
- \sstdiytopic{
- SkyFrame Formats
- }{
- The Format string supplied for a SkyFrame should contain zero or
- more of the following characters. These may occur in any order,
- but the following is recommended for clarity:
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}$+${\tt{"}}: Indicates that a plus sign should be prefixed to positive
- values. By default, no plus sign is used.
-
- \sstitem
- {\tt{"}}z{\tt{"}}: Indicates that leading zeros should be prefixed to the
- value so that the first field is of constant width, as would be
- required in a fixed-width table (leading zeros are always
- prefixed to any fields that follow). By default, no leading
- zeros are added.
-
- \sstitem
- {\tt{"}}i{\tt{"}}: Use the standard ISO field separator (a colon) between
- fields. This is the default behaviour.
-
- \sstitem
- {\tt{"}}b{\tt{"}}: Use a blank to separate fields.
-
- \sstitem
- {\tt{"}}l{\tt{"}}: Use a letter ({\tt{"}}h{\tt{"}}/{\tt{"}}d{\tt{"}}, {\tt{"}}m{\tt{"}} or {\tt{"}}s{\tt{"}} as appropriate) to
- separate fields.
-
- \sstitem
- {\tt{"}}g{\tt{"}}: Use a letter and symbols to separate fields ({\tt{"}}h{\tt{"}}/{\tt{"}}d{\tt{"}}, {\tt{"}}m{\tt{"}} or {\tt{"}}s{\tt{"}},
- etc, as appropriate), but include escape sequences in the formatted
- value so that the \htmlref{Plot}{Plot} class will draw the separators as small
- super-scripts.
-
- \sstitem
- {\tt{"}}d{\tt{"}}: Include a degrees field. Expressing the angle purely in
- degrees is also the default if none of {\tt{"}}h{\tt{"}}, {\tt{"}}m{\tt{"}}, {\tt{"}}s{\tt{"}} or {\tt{"}}t{\tt{"}} are
- given.
-
- \sstitem
- {\tt{"}}h{\tt{"}}: Express the angle as a time and include an hours field
- (where 24 hours correspond to 360 degrees). Expressing the angle
- purely in hours is also the default if {\tt{"}}t{\tt{"}} is given without
- either {\tt{"}}m{\tt{"}} or {\tt{"}}s{\tt{"}}.
-
- \sstitem
- {\tt{"}}m{\tt{"}}: Include a minutes field. By default this is not included.
-
- \sstitem
- {\tt{"}}s{\tt{"}}: Include a seconds field. By default this is not included.
- This request is ignored if {\tt{"}}d{\tt{"}} or {\tt{"}}h{\tt{"}} is given, unless a minutes
- field is also included.
-
- \sstitem
- {\tt{"}}t{\tt{"}}: Express the angle as a time (where 24 hours correspond to
- 360 degrees). This option is ignored if either {\tt{"}}d{\tt{"}} or {\tt{"}}h{\tt{"}} is
- given and is intended for use where the value is to be expressed
- purely in minutes and/or seconds of time (with no hours
- field). If {\tt{"}}t{\tt{"}} is given without {\tt{"}}d{\tt{"}}, {\tt{"}}h{\tt{"}}, {\tt{"}}m{\tt{"}} or {\tt{"}}s{\tt{"}} being
- present, then it is equivalent to {\tt{"}}h{\tt{"}}.
-
- \sstitem
- {\tt{"}}.{\tt{"}}: Indicates that decimal places are to be given for the
- final field in the formatted string (whichever field this
- is). The {\tt{"}}.{\tt{"}} should be followed immediately by an unsigned
- integer which gives the number of decimal places required, or by an
- asterisk. If an asterisk is supplied, a default number of decimal
- places is used which is based on the value of the Digits
- attribute.
-
- }
- All of the above format specifiers are case-insensitive. If
- several characters make conflicting requests (e.g. if both {\tt{"}}i{\tt{"}}
- and {\tt{"}}b{\tt{"}} appear), then the character occurring last takes
- precedence, except that {\tt{"}}d{\tt{"}} and {\tt{"}}h{\tt{"}} always override {\tt{"}}t{\tt{"}}.
-
- If the format string starts with a percentage sign (\%), then the
- whole format string is assumed to conform to the syntax defined by
- the Frame class, and the axis values is formated as a decimal
- radians value.
- }
- \sstdiytopic{
- TimeFrame Formats
- }{
- The Format string supplied for a TimeFrame should either use the
- syntax defined by the base Frame class (i.e. a C {\tt{"}}printf{\tt{"}} format
- string), or the extended {\tt{"}}iso{\tt{"}} syntax described below (the default
- value is inherited from the Frame class):
-
- \sstitemlist{
-
- \sstitem
- C {\tt{"}}printf{\tt{"}} syntax: If the Format string is a C {\tt{"}}printf{\tt{"}} format
- description such as {\tt{"}}\%1.7G{\tt{"}}, the TimeFrame axis value will be
- formatted without change as a floating point value using this format.
- The formatted string will thus represent an offset from the zero point
- specified by the TimeFrame's \htmlref{TimeOrigin}{TimeOrigin} attribute, measured in
- units given by the TimeFrame's Unit attribute.
-
- \sstitem
- {\tt{"}}iso{\tt{"}} syntax: This is used to format a TimeFrame axis value as a
- Gregorian date followed by an optional time of day. If the Format
- value commences with the string {\tt{"}}iso{\tt{"}} then the TimeFrame axis value
- will be converted to an absolute MJD, including the addition of the
- current TimeOrigin value, and then formatted as a Gregorian date
- using the format {\tt{"}}yyyy-mm-dd{\tt{"}}. Optionally, the Format value may
- include an integer precision following the {\tt{"}}iso{\tt{"}} specification (e.g.
- {\tt{"}}iso.2{\tt{"}}), in which case the time of day will be appended to the
- formatted date (if no time of day is included, the date field is
- rounded to the nearest day). The integer value in the Format string
- indicates the number of decimal places to use in the seconds field. For
- instance, a Format value of {\tt{"}}iso.0{\tt{"}} produces a time of day of the form
- {\tt{"}}hh:mm:ss{\tt{"}}, and a Format value of {\tt{"}}iso.2{\tt{"}} produces a time of day of the
- form {\tt{"}}hh:mm:ss.ss{\tt{"}}. The date and time fields will be separated by a
- space unless 'T' is appended to the end of string, in which case
- the letter T (upper case) will be used as the separator. The value of
- the Digits attribute is ignored when using this {\tt{"}}iso{\tt{"}} format.
- }
- }
-}
-\sstroutine{
- Full\sstlabel{Full}
-}{
- Set level of output detail
-}{
- \sstdescription{
- This attribute is a three-state flag and takes values of -1, 0
- or $+$1. It controls the amount of information included in the
- output generated by a \htmlref{Channel}{Channel}.
-
- If Full is zero, then a modest amount of
- non-essential but useful information will be included in the
- output. If Full is negative, all non-essential information will
- be suppressed to minimise the amount of output, while if it is
- positive, the output will include the maximum amount of detailed
- information about the \htmlref{Object}{Object} being written.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- Channel
- }{
- The default value is zero for a normal Channel.
- }
- \sstsubsection{
- \htmlref{FitsChan}{FitsChan}
- }{
- The default value is zero for a FitsChan.
- }
- \sstsubsection{
- \htmlref{XmlChan}{XmlChan}
- }{
- The default value is -1 for an XmlChan.
- }
- \sstsubsection{
- \htmlref{StcsChan}{StcsChan}
- }{
- The default value is zero for an StcsChan. Set a positive value
- to cause default values to be included in STC-S descriptions.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- All positive values supplied for this attribute are converted
- to $+$1 and all negative values are converted to -1.
- }
- }
-}
-\sstroutine{
- Gap(axis)\sstlabel{Gapaxis}
-}{
- Interval between linearly spaced major axis values of a Plot
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
- the linear interval between the {\tt{"}}major{\tt{"}} axis values of a \htmlref{Plot}{Plot}, at
- which (for example) major tick marks are drawn. It takes a separate
- value for each physical axis of the Plot so that, for instance,
- the setting {\tt{"}}Gap(2)=3.0{\tt{"}} specifies the difference between adjacent major
- values along the second axis. The Gap attribute is only used when
- the LogTicks attribute indicates that the spacing between major axis
- values is to be linear. If major axis values are logarithmically spaced
- then the gap is specified using attribute LogGap.
-
- The Gap value supplied will usually be rounded to the nearest
- {\tt{"}}nice{\tt{"}} value, suitable (e.g.) for generating axis labels, before
- use. To avoid this {\tt{"}}nicing{\tt{"}} you should set an explicit format
- for the axis using the \htmlref{Format(axis)}{Formataxis} or \htmlref{Digits/Digits(axis)}{DigitsDigitsaxis}
- attribute. The default behaviour is for the Plot to generate its
- own Gap value when required, based on the range of axis values
- to be represented.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The Gap value should use the same units as are used internally
- for storing coordinate values on the corresponding axis. For
- example, with a celestial coordinate system, the Gap value
- should be in radians, not hours or degrees.
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}Gap{\tt{"}} instead of {\tt{"}}Gap(2){\tt{"}}),
- then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the attribute
- value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}} operation
- will use just the Gap(1) value.
- }
- }
-}
-\sstroutine{
- Grf\sstlabel{Grf}
-}{
- Use Grf functions registered through astGrfSet?
-}{
- \sstdescription{
- This attribute selects the functions which are used to draw graphics by
- the \htmlref{Plot}{Plot} class. If it is zero, then the functions in the graphics
- interface selected at link-time are used (see the \htmlref{ast\_link}{ast_link} script).
- Otherwise, functions registered using \htmlref{astGrfSet}{astGrfSet} are used. In this
- case, if a function is needed which has not been registered,
- then the function in the graphics interface selected at link-time is
- used.
-
- The default is to use the graphics interface
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- \sstsubsection{
- \htmlref{Plot3D}{Plot3D}
- }{
- The Plot3D class ignores this attributes, assuming a value of
- zero.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The value of this attribute is not saved when the Plot is written
- out through a \htmlref{Channel}{Channel} to an external data store. On re-loading such
- a Plot using \htmlref{astRead}{astRead}, the attribute will be cleared, resulting in the
- graphics interface selected at link-time being used.
- }
- }
-}
-\sstroutine{
- Grid\sstlabel{Grid}
-}{
- Draw grid lines for a Plot?
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
- whether grid lines (a grid of curves marking the {\tt{"}}major{\tt{"}} values
- on each axis) are drawn across the plotting area.
-
- If the Grid value of a \htmlref{Plot}{Plot} is non-zero, then grid lines will be
- drawn. Otherwise, short tick marks on the axes are used to mark
- the major axis values. The default behaviour is to use tick
- marks if the entire plotting area is filled by valid physical
- coordinates, but to draw grid lines otherwise.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The spacing between major axis values, which determines the
- spacing of grid lines, may be set using the \htmlref{Gap(axis)}{Gapaxis} attribute.
- }
- }
-}
-\sstroutine{
- GrismAlpha\sstlabel{GrismAlpha}
-}{
- The angle of incidence of the incoming light on the grating surface
-}{
- \sstdescription{
- This attribute holds the angle between the incoming light and the
- normal to the grating surface, in radians. The default value is 0.
- }
- \sstattributetype{
- Double precision.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{GrismMap}{GrismMap}
- }{
- All GrismMaps have this attribute.
- }
- }
-}
-\sstroutine{
- GrismEps\sstlabel{GrismEps}
-}{
- The angle between the normal and the dispersion plane
-}{
- \sstdescription{
- This attribute holds the angle (in radians) between the normal to
- the grating or exit prism face, and the dispersion plane. The
- dispersion plane is the plane spanned by the incoming and outgoing
- ray. The default value is 0.0.
- }
- \sstattributetype{
- Double precision.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{GrismMap}{GrismMap}
- }{
- All GrismMaps have this attribute.
- }
- }
-}
-\sstroutine{
- GrismG\sstlabel{GrismG}
-}{
- The grating ruling density
-}{
- \sstdescription{
- This attribute holds the number of grating rulings per unit length.
- The unit of length used should be consistent with the units used
- for attributes \htmlref{GrismWaveR}{GrismWaveR} and \htmlref{GrismNRP}{GrismNRP}. The default value is 0.0.
- (the appropriate value for a pure prism disperser with no grating).
- }
- \sstattributetype{
- Double precision.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{GrismMap}{GrismMap}
- }{
- All GrismMaps have this attribute.
- }
- }
-}
-\sstroutine{
- GrismM\sstlabel{GrismM}
-}{
- The interference order
-}{
- \sstdescription{
- This attribute holds the interference order being considered.
- The default value is 0.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{GrismMap}{GrismMap}
- }{
- All GrismMaps have this attribute.
- }
- }
-}
-\sstroutine{
- GrismNR\sstlabel{GrismNR}
-}{
- The refractive index at the reference wavelength
-}{
- \sstdescription{
- This attribute holds refractive index of the grism material at the
- reference wavelength (given by attribute \htmlref{GrismWaveR}{GrismWaveR}). The default
- value is 1.0.
- }
- \sstattributetype{
- Double precision.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{GrismMap}{GrismMap}
- }{
- All GrismMaps have this attribute.
- }
- }
-}
-\sstroutine{
- GrismNRP\sstlabel{GrismNRP}
-}{
- The rate of change of refractive index with wavelength
-}{
- \sstdescription{
- This attribute holds the rate of change of the refractive index of the
- grism material with respect to wavelength at the reference wavelength
- (given by attribute \htmlref{GrismWaveR}{GrismWaveR}). The default value is 0.0 (the
- appropriate value for a pure grating disperser with no prism). The
- units of this attribute should be consistent with those of attributes
- GrismWaveR and \htmlref{GrismG}{GrismG}.
- }
- \sstattributetype{
- Double precision.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{GrismMap}{GrismMap}
- }{
- All GrismMaps have this attribute.
- }
- }
-}
-\sstroutine{
- GrismTheta\sstlabel{GrismTheta}
-}{
- Angle between normal to detector plane and reference ray
-}{
- \sstdescription{
- This attribute gives the angle of incidence of light of the
- reference wavelength (given by attribute \htmlref{GrismWaveR}{GrismWaveR}) onto the
- detector. Specifically, it holds the angle (in radians) between
- the normal to the detector plane and an incident ray at the reference
- wavelength. The default value is 0.0.
- }
- \sstattributetype{
- Double precision.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{GrismMap}{GrismMap}
- }{
- All GrismMaps have this attribute.
- }
- }
-}
-\sstroutine{
- GrismWaveR\sstlabel{GrismWaveR}
-}{
- The reference wavelength
-}{
- \sstdescription{
- This attribute holds reference wavelength. The default value is
- 5000 (Angstrom). The units of this attribute should be consistent with
- those of attributes \htmlref{GrismNRP}{GrismNRP} and \htmlref{GrismG}{GrismG}.
- }
- \sstattributetype{
- Double precision.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{GrismMap}{GrismMap}
- }{
- All GrismMaps have this attribute.
- }
- }
-}
-\sstroutine{
- ID\sstlabel{ID}
-}{
- Object identification string
-}{
- \sstdescription{
- This attribute contains a string which may be used to identify
- the \htmlref{Object}{Object} to which it is attached. There is no restriction on
- the contents of this string, which is not used internally by the
- AST library, and is simply returned without change when
- required. The default value is an empty string.
-
- An identification string can be valuable when, for example,
- several Objects have been stored in a file (using \htmlref{astWrite}{astWrite}) and
- are later retrieved (using \htmlref{astRead}{astRead}). Consistent use of the ID
- attribute allows the retrieved Objects to be identified without
- depending simply on the order in which they were stored.
-
- This attribute may also be useful during debugging, to
- distinguish similar Objects when using \htmlref{astShow}{astShow} to display them.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- All Objects have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Unlike most other attributes, the value of the ID attribute is
- not transferred when an Object is copied. Instead, its value is
- undefined (and therefore defaults to an empty string) in any
- copy. However, it is retained in any external representation of
- an Object produced by the astWrite function.
- }
- }
-}
-\sstroutine{
- IF\sstlabel{IF}
-}{
- The intermediate frequency in a dual sideband spectrum
-}{
- \sstdescription{
- This attribute specifies the (topocentric) intermediate frequency in
- a dual sideband spectrum. Its sole use is to determine the local
- oscillator (LO) frequency (the frequency which marks the boundary
- between the lower and upper sidebands). The LO frequency is
- equal to the sum of the centre frequency and the intermediate
- frequency. Here, the {\tt{"}}centre frequency{\tt{"}} is the topocentric
- frequency in Hz corresponding to the current value of the \htmlref{DSBCentre}{DSBCentre}
- attribute. The value of the IF attribute may be positive or
- negative: a positive value results in the LO frequency being above
- the central frequency, whilst a negative IF value results in the LO
- frequency being below the central frequency. The sign of the IF
- attribute value determines the default value for the \htmlref{SideBand}{SideBand}
- attribute.
-
- When setting a new value for this attribute, the units in which the
- frequency value is supplied may be indicated by appending a suitable
- string to the end of the formatted value. If the units are not
- specified, then the supplied value is assumed to be in units of GHz.
- For instance, the following strings all result in an IF of 4 GHz being
- used: {\tt{"}}4.0{\tt{"}}, {\tt{"}}4.0 GHz{\tt{"}}, {\tt{"}}4.0E9 Hz{\tt{"}}, etc.
-
- When getting the value of this attribute, the returned value is
- always in units of GHz. The default value for this attribute is 4 GHz.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{DSBSpecFrame}{DSBSpecFrame}
- }{
- All DSBSpecFrames have this attribute.
- }
- }
-}
-\sstroutine{
- Ident\sstlabel{Ident}
-}{
- Permanent Object identification string
-}{
- \sstdescription{
- This attribute is like the \htmlref{ID}{ID} attribute, in that it contains a
- string which may be used to identify the \htmlref{Object}{Object} to which it is
- attached. The only difference between ID and Ident is that Ident
- is transferred when an Object is copied, but ID is not.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- All Objects have this attribute.
- }
- }
-}
-\sstroutine{
- ImagFreq\sstlabel{ImagFreq}
-}{
- The image sideband equivalent of the rest frequency
-}{
- \sstdescription{
- This is a read-only attribute giving the frequency which
- corresponds to the rest frequency but is in the opposite sideband.
-
- The value is calculated by first transforming the rest frequency
- (given by the \htmlref{RestFreq}{RestFreq} attribute) from the standard of rest of the
- source (given by the \htmlref{SourceVel}{SourceVel} and \htmlref{SourceVRF}{SourceVRF} attributes) to the
- standard of rest of the observer (i.e. the topocentric standard of
- rest). The resulting topocentric frequency is assumed to be in the
- same sideband as the value given for the \htmlref{DSBCentre}{DSBCentre} attribute (the
- {\tt{"}}observed{\tt{"}} sideband), and is transformed to the other sideband (the
- {\tt{"}}image{\tt{"}} sideband). The new frequency is converted back to the standard
- of rest of the source, and the resulting value is returned as the
- attribute value, in units of GHz.
- }
- \sstattributetype{
- Floating point, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{DSBSpecFrame}{DSBSpecFrame}
- }{
- All DSBSpecFrames have this attribute.
- }
- }
-}
-\sstroutine{
- IntraFlag\sstlabel{IntraFlag}
-}{
- IntraMap identification string
-}{
- \sstdescription{
- This attribute allows an \htmlref{IntraMap}{IntraMap} to be flagged so that it is
- distinguishable from other IntraMaps. The transformation function
- associated with the IntraMap may then enquire the value of this
- attribute and adapt the transformation it provides according to the
- particular IntraMap involved.
-
- Although this is a string attribute, it may often be useful to store
- numerical values here, encoded as a character string, and to use these
- as data within the transformation function. Note, however, that this
- mechanism is not suitable for transferring large amounts of data (more
- than about 1000 characters) to an IntraMap. For that purpose, global
- variables are recommended, although the IntraFlag value can be used to
- supplement this approach. The default IntraFlag value is an empty
- string.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- IntraMap
- }{
- All IntraMaps have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A pair of IntraMaps whose transformations may potentially cancel
- cannot be simplified to produce a \htmlref{UnitMap}{UnitMap} (e.g. using \htmlref{astSimplify}{astSimplify})
- unless they have the same IntraFlag values. The test for equality is
- case-sensitive.
- }
- }
-}
-\sstroutine{
- Invert\sstlabel{Invert}
-}{
- Mapping inversion flag
-}{
- \sstdescription{
- This attribute controls which one of a \htmlref{Mapping}{Mapping}'s two possible
- coordinate transformations is considered the {\tt{"}}forward{\tt{"}}
- transformation (the other being the {\tt{"}}inverse{\tt{"}}
- transformation). If the attribute value is zero (the default),
- the Mapping's behaviour will be the same as when it was first
- created. However, if it is non-zero, its two transformations
- will be inter-changed, so that the Mapping displays the inverse
- of its original behaviour.
-
- Inverting the boolean sense of the Invert attribute will cause
- the values of a Mapping's \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes to be
- interchanged. The values of its \htmlref{TranForward}{TranForward} and \htmlref{TranInverse}{TranInverse}
- attributes will also be interchanged. This operation may be
- performed with the \htmlref{astInvert}{astInvert} function.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Mapping
- }{
- All Mappings have this attribute.
- }
- \sstsubsection{
- \htmlref{UnitMap}{UnitMap}
- }{
- The value of the Invert attribute has no effect on the
- behaviour of a UnitMap.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- Inverting the boolean sense of the Invert attribute for a
- FrameSet will cause its base and current Frames (and its \htmlref{Base}{Base}
- and \htmlref{Current}{Current} attributes) to be interchanged. This, in turn,
- may affect other properties and attributes of the FrameSet
- (such as Nin, Nout, \htmlref{Naxes}{Naxes}, TranForward, TranInverse,
- etc.). The Invert attribute of a FrameSet is not itself
- affected by selecting a new base or current \htmlref{Frame}{Frame}.
- }
- }
-}
-\sstroutine{
- Invisible\sstlabel{Invisible}
-}{
- Draw graphics using invisible ink?
-}{
- \sstdescription{
- This attribute controls the appearance of all graphics produced by
- \htmlref{Plot}{Plot} methods by determining whether graphics should be visible or
- invisible.
-
- If the Invisible value of a Plot is non-zero, then all the Plot
- methods which normally generate graphical output do not do so (you
- can think of them drawing with {\tt{"}}invisible ink{\tt{"}}). Such methods do,
- however, continue to do all the calculations which would be needed to
- produce the graphics. In particular, the bounding box enclosing the
- graphics is still calculated and can be retrieved as normal using
- \htmlref{astBoundingBox}{astBoundingBox}. The default value is zero, resulting in all methods
- drawing graphics as normal, using visible ink.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
-}
-\sstroutine{
- IsLinear\sstlabel{IsLinear}
-}{
- Is the Mapping linear?
-}{
- \sstdescription{
- This attribute indicates whether a \htmlref{Mapping}{Mapping} is an instance of a
- class that always represents a linear transformation. Note, some
- Mapping classes can represent linear or non-linear transformations
- (the \htmlref{MathMap}{MathMap} class for instance). Such classes have a zero value for
- the IsLinear attribute. Specific instances of such classes can be
- tested for linearity using the
- \htmlref{astLinearApprox}{astLinearApprox} function.
- AST\_LINEARAPPROX routine.
- }
- \sstattributetype{
- Integer (boolean), read-only.
- }
- \sstapplicability{
- \sstsubsection{
- Mapping
- }{
- All Mappings have this attribute.
- }
- \sstsubsection{
- \htmlref{CmpMap}{CmpMap}
- }{
- The IsLinear value for a CmpMap is determined by the classes
- of the encapsulated Mappings. For instance, a CmpMap that combines
- a \htmlref{ZoomMap}{ZoomMap} and a \htmlref{ShiftMap}{ShiftMap} will have a non-zero value for its IsLinear
- attribute, but a CmpMap that contains a MathMap will have a
- value of zero for its IsLinear attribute.
- }
- \sstsubsection{
- \htmlref{Frame}{Frame}
- }{
- The IsLinear value for a Frame is 1 (since a Frame is equivalent
- to a \htmlref{UnitMap}{UnitMap}).
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The IsLinear value for a FrameSet is obtained from the Mapping
- from the base Frame to the current Frame.
- }
- }
-}
-\sstroutine{
- IsSimple\sstlabel{IsSimple}
-}{
- Has the Mapping been simplified?
-}{
- \sstdescription{
- This attribute indicates whether a \htmlref{Mapping}{Mapping} has been simplified
- by the
- \htmlref{astSimplify}{astSimplify}
- method. If the IsSimple value is non-zero, then the Mapping has
- been simplified and so there is nothing to be gained by simplifying
- it again. Indeed, the
- astSimplify
- method will immediately return the Mapping unchanged if the IsSimple
- attribute indicates that the Mapping has already been simplified.
- }
- \sstattributetype{
- Integer (boolean), read-only.
- }
- \sstapplicability{
- \sstsubsection{
- Mapping
- }{
- All Mappings have this attribute.
- }
- \sstsubsection{
- \htmlref{Frame}{Frame}
- }{
- All classes of Frame return zero for the IsSimple attribute.
- This is because changes can be made to a Frame which affect the
- Mapping represented by the Frame, and so there can be no
- guarantee that the Mapping may not need re-simplifying. Most
- non-Frame Mappings, on the other hand, are immutable and so when
- they are simplified it is certain that they weill remain in a
- simple state.
- }
- }
-}
-\sstroutine{
- Iwc\sstlabel{Iwc}
-}{
- Include a Frame representing FITS-WCS intermediate world coordinates?
-}{
- \sstdescription{
- This attribute is a boolean value which is used when a \htmlref{FrameSet}{FrameSet} is
- read from a \htmlref{FitsChan}{FitsChan} with a foreign FITS encoding (e.g. FITS-WCS) using
- \htmlref{astRead}{astRead}.
- If it has a non-zero value then the returned FrameSet will include
- Frames representing {\tt{"}}intermediate world coordinates{\tt{"}} (IWC). These
- Frames will have \htmlref{Domain}{Domain} name {\tt{"}}IWC{\tt{"}} for primary axis descriptions, and
- {\tt{"}}IWCa{\tt{"}} for secondary axis descriptions, where {\tt{"}}a{\tt{"}} is replaced by
- the single alternate axis description character, as used in the
- FITS-WCS header. The default value for {\tt{"}}Iwc{\tt{"}} is zero.
-
- FITS-WCS paper 1 defines IWC as a Cartesian coordinate system with one
- axis for each WCS axis, and is the coordinate system produced by the
- rotation matrix (represented by FITS keyword PCi\_j, CDi\_j, etc).
- For instance, for a 2-D FITS-WCS header describing projected
- celestial longitude and latitude, the intermediate world
- coordinates represent offsets in degrees from the reference point
- within the plane of projection.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- FitsChan
- }{
- All FitsChans have this attribute.
- }
- }
-}
-\sstroutine{
- KeyError\sstlabel{KeyError}
-}{
- Report an error when getting the value of a non-existant KeyMap entry?
-}{
- \sstdescription{
- This attribute is a boolean value which controls how the
- astMapGet...
- functions behave if the requested key is not found in the \htmlref{KeyMap}{KeyMap}.
- If KeyError is zero (the default), then these functions will return
- zero
- but no error will be reported. If KeyError is non-zero, then the
- same values are returned but an error is also reported.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- KeyMap
- }{
- All KeyMaps have this attribute.
- }
- }
-}
-\sstroutine{
- LTOffset\sstlabel{LTOffset}
-}{
- The offset from UTC to Local Time, in hours
-}{
- \sstdescription{
- This specifies the offset from UTC to Local Time, in hours (fractional
- hours can be supplied). It is positive for time zones east of Greenwich.
- AST uses the figure as given, without making any attempt to correct for
- daylight saving. The default value is zero.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{TimeFrame}{TimeFrame}
- }{
- All TimeFrames have this attribute.
- }
- }
-}
-\sstroutine{
- Label(axis)\sstlabel{Labelaxis}
-}{
- Axis label
-}{
- \sstdescription{
- This attribute specifies a label to be attached to each axis of
- a \htmlref{Frame}{Frame} when it is represented (e.g.) in graphical output.
-
- If a Label value has not been set for a Frame axis, then a
- suitable default is supplied.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The default supplied by the Frame class is the string {\tt{"}}\htmlref{Axis}{Axis}
- $<$n$>${\tt{"}}, where $<$n$>$ is 1, 2, etc. for each successive axis.
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- The SkyFrame class re-defines the default Label value
- (e.g. to {\tt{"}}Right ascension{\tt{"}} or {\tt{"}}Galactic latitude{\tt{"}}) as
- appropriate for the particular celestial coordinate system
- being represented.
- }
- \sstsubsection{
- \htmlref{TimeFrame}{TimeFrame}
- }{
- The TimeFrame class re-defines the default Label value as
- appropriate for the particular time system being represented.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Label attribute of a FrameSet axis is the same as that of
- its current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Axis labels are intended purely for interpretation by human
- readers and not by software.
-
- \sstitem
- When specifying this attribute by name, it should be
- subscripted with the number of the Frame axis to which it
- applies.
- }
- }
-}
-\sstroutine{
- LabelAt(axis)\sstlabel{LabelAtaxis}
-}{
- Where to place numerical labels for a Plot
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
- where numerical axis labels and associated tick marks are
- placed. It takes a separate value for each physical axis of a
- \htmlref{Plot}{Plot} so that, for instance, the setting {\tt{"}}LabelAt(2)=10.0{\tt{"}}
- specifies where the numerical labels and tick marks for the
- second axis should be drawn.
-
- For each axis, the LabelAt value gives the value on the other
- axis at which numerical labels and tick marks should be placed
- (remember that Plots suitable for use with astGrid may only
- have two axes). For example, in a celestial (RA,Dec) coordinate
- system, LabelAt(1) gives a Dec value which defines a line (of
- constant Dec) along which the numerical RA labels and their
- associated tick marks will be drawn. Similarly, LabelAt(2) gives
- the RA value at which the Dec labels and ticks will be drawn.
-
- The default bahaviour is for the Plot to generate its own
- position for numerical labels and tick marks.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The LabelAt value should use the same units as are used
- internally for storing coordinate values on the appropriate
- axis. For example, with a celestial coordinate system, the
- LabelAt value should be in radians, not hours or degrees.
-
- \sstitem
- Normally, the LabelAt value also determines where the lines
- representing coordinate axes will be drawn, so that the tick
- marks will lie on these lines (but also see the DrawAxes
- attribute).
-
- \sstitem
- In some circumstances, numerical labels and tick marks are
- drawn around the edges of the plotting area (see the \htmlref{Labelling}{Labelling}
- attribute). In this case, the value of the LabelAt attribute is
- ignored.
- }
- }
-}
-\sstroutine{
- LabelUnits(axis)\sstlabel{LabelUnitsaxis}
-}{
- Use axis unit descriptions in a Plot?
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
- whether the descriptive labels drawn for each axis of a \htmlref{Plot}{Plot}
- should include a description of the units being used on the
- axis. It takes a separate value for each physical axis of a
- Plot so that, for instance, the setting {\tt{"}}LabelUnits(2)=1{\tt{"}}
- specifies that a unit description should be included in the
- label for the second axis.
-
- If the LabelUnits value of a Plot axis is non-zero, a unit
- description will be included in the descriptive label for that
- axis, otherwise it will be omitted. The default behaviour is to
- include a unit description unless the current \htmlref{Frame}{Frame} of the Plot
- is a \htmlref{SkyFrame}{SkyFrame} representing equatorial, ecliptic, galactic or
- supergalactic coordinates, in which case it is omitted.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The text used for the unit description is obtained from the
- Plot's \htmlref{Unit(axis)}{Unitaxis} attribute.
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}LabelUnits{\tt{"}} instead of
- {\tt{"}}LabelUnits(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
- the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
- {\tt{"}}test{\tt{"}} operation will use just the LabelUnits(1) value.
-
- \sstitem
- If the current Frame of the Plot is not a SkyFrame, but includes
- axes which were extracted from a SkyFrame, then the default behaviour
- is to include a unit description only for those axes which were not
- extracted from a SkyFrame.
- }
- }
-}
-\sstroutine{
- LabelUp(axis)\sstlabel{LabelUpaxis}
-}{
- Draw numerical Plot labels upright?
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
- whether the numerical labels for each axis of a \htmlref{Plot}{Plot} should be
- drawn upright or not. It takes a separate value for each
- physical axis of a Plot so that, for instance, the setting
- {\tt{"}}LabelUp(2)=1{\tt{"}} specifies that numerical labels for the second
- axis should be drawn upright.
-
- If the LabelUp value of a Plot axis is non-zero, it causes
- numerical labels for that axis to be plotted upright (i.e. as
- normal, horizontal text), otherwise labels are drawn parallel to
- the axis to which they apply.
-
- The default is to produce upright labels if the labels are placed
- around the edge of the plot, and to produce labels that follow the
- axes if the labels are placed within the interior of the plot (see
- attribute \htmlref{Labelling}{Labelling}).
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- In some circumstances, numerical labels and tick marks are
- drawn around the edges of the plotting area (see the Labelling
- attribute). In this case, the value of the LabelUp attribute is
- ignored.
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}LabelUp{\tt{"}} instead of
- {\tt{"}}LabelUp(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the
- attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
- operation will use just the LabelUp(1) value.
- }
- }
-}
-\sstroutine{
- Labelling\sstlabel{Labelling}
-}{
- Label and tick placement option for a Plot
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
- the strategy for placing numerical labels and tick marks for a \htmlref{Plot}{Plot}.
-
- If the Labelling value of a Plot is {\tt{"}}exterior{\tt{"}} (the default), then
- numerical labels and their associated tick marks are placed
- around the edges of the plotting area, if possible. If this is
- not possible, or if the Labelling value is {\tt{"}}interior{\tt{"}}, then they
- are placed along grid lines inside the plotting area.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The \htmlref{LabelAt(axis)}{LabelAtaxis} attribute may be used to determine the exact
- placement of labels and tick marks that are drawn inside the
- plotting area.
- }
- }
-}
-\sstroutine{
- LatAxis\sstlabel{LatAxis}
-}{
- Index of the latitude axis
-}{
- \sstdescription{
- This read-only attribute gives the index (1 or 2) of the latitude
- axis within the \htmlref{SkyFrame}{SkyFrame} (taking into account any current axis
- permutations).
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- SkyFrame
- }{
- All SkyFrames have this attribute.
- }
- }
-}
-\sstroutine{
- ListSize\sstlabel{ListSize}
-}{
- Number of points in a PointList
-}{
- \sstdescription{
- This is a read-only attribute giving the number of points in a
- \htmlref{PointList}{PointList}. This value is determined when the PointList is created.
- }
- \sstattributetype{
- Integer, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- PointList
- }{
- All PointLists have this attribute.
- }
- }
-}
-\sstroutine{
- LogGap(axis)\sstlabel{LogGapaxis}
-}{
- Interval between major axis values of a Plot
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
- the logarithmic interval between the {\tt{"}}major{\tt{"}} axis values of a \htmlref{Plot}{Plot}, at
- which (for example) major tick marks are drawn. It takes a separate
- value for each physical axis of the Plot so that, for instance,
- the setting {\tt{"}}LogGap(2)=100.0{\tt{"}} specifies the ratio between adjacent major
- values along the second axis. The LogGap attribute is only used when
- the LogTicks attribute indicates that the spacing between major axis
- values is to be logarithmic. If major axis values are linearly spaced
- then the gap is specified using attribute Gap.
-
- The LogGap value supplied will be rounded to the nearest power of 10.
- The reciprocal of the supplied value may be used if this is necessary
- to produce usable major axis values. If a zero or negative value is
- supplied, an error will be reported when the grid is drawn. The default
- behaviour is for the Plot to generate its own LogGap value when
- required, based on the range of axis values to be represented.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The LogGap value is a ratio between axis values and is therefore
- dimensionless.
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}LogGap{\tt{"}} instead of {\tt{"}}LogGap(2){\tt{"}}),
- then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the attribute
- value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}} operation
- will use just the LogGap(1) value.
- }
- }
-}
-\sstroutine{
- LogLabel(axis)\sstlabel{LogLabelaxis}
-}{
- Use exponential format for numerical axis labels?
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
- whether the numerical axis labels should be in normal decimal form
- or should be represented as 10 raised to the appropriate power.
- That is, an axis value of 1000.0 will be drawn as {\tt{"}}1000.0{\tt{"}} if
- LogLabel is zero, but as {\tt{"}}10$\wedge$3{\tt{"}} if LogLabel is non-zero. If
- graphical escape sequences are supported (see attribute \htmlref{Escape}{Escape}),
- the power in such exponential labels will be drawn as a small
- superscript instead of using a {\tt{"}}$\wedge${\tt{"}} character to represent
- exponentiation.
-
- The default is to produce exponential labels if the major tick
- marks are logarithmically spaced (see the LogTicks attribute).
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{Plot}{Plot}
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}LogLabel{\tt{"}} instead of
- {\tt{"}}LogLabel(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the
- attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
- operation will use just the LogLabel(1) value.
- }
- }
-}
-\sstroutine{
- LogPlot(axis)\sstlabel{LogPlotaxis}
-}{
- Map the plot logarithmically onto the screen?
-}{
- \sstdescription{
- This attribute controls the appearance of all graphics produced by
- the \htmlref{Plot}{Plot}, by determining whether the axes of the plotting surface
- are mapped logarithmically or linearly onto the base \htmlref{Frame}{Frame} of the
- \htmlref{FrameSet}{FrameSet} supplied when the Plot was constructed. It takes a separate
- value for each axis of the graphics coordinate system (i.e. the
- base Frame in the Plot) so that, for instance, the setting
- {\tt{"}}LogPlot(2)=1{\tt{"}} specifies that the second axis of the graphics
- coordinate system (usually the vertical axis) should be mapped
- logarithmically onto the second axis of the base Frame of the
- FrameSet supplied when the Plot was constructed.
-
- If the LogPlot value of a Plot axis is non-zero, it causes that
- axis to be mapped logarithmically, otherwise (the default) the axis
- is mapped linearly.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The setting of the LogPlot attribute provides the default value
- for the related LogTicks attribute. By selecting suitable values for
- LogPlot and LogTicks, it is possible to have tick marks which are evenly
- spaced in value but which are mapped logarithmically onto the screen
- (and vice-versa).
-
- \sstitem
- An axis may only be mapped logarithmically if the visible part of
- the axis does not include the value zero. The visible part of the
- axis is that part which is mapped onto the plotting area, and is
- measured within the base Frame of the FrameSet which was supplied when
- the Plot was constructed. Any attempt to set LogPlot to a non-zero value
- will be ignored (without error) if the visible part of the axis
- includes the value zero
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}LogPlot{\tt{"}} instead of
- {\tt{"}}LogPlot(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the
- attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
- operation will use just the LogPlot(1) value.
- }
- }
-}
-\sstroutine{
- LogTicks(axis)\sstlabel{LogTicksaxis}
-}{
- Space the major tick marks logarithmically?
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
- whether the major tick marks should be spaced logarithmically or
- linearly in axis value. It takes a separate value for each physical
- axis of the \htmlref{Plot}{Plot} so that, for instance, the setting {\tt{"}}LogTicks(2)=1{\tt{"}}
- specifies that the major tick marks on the second axis should be
- spaced logarithmically.
-
- If the LogTicks value for a physical axis is non-zero, the major
- tick marks on that axis will be spaced logarithmically (that is,
- there will be a constant ratio between the axis values at adjacent
- major tick marks). An error will be reported if the dynamic range of
- the axis (the ratio of the largest to smallest displayed axis value)
- is less than 10.0. If the LogTicks value is zero, the major tick marks
- will be evenly spaced (that is, there will be a constant difference
- between the axis values at adjacent major tick marks). The default is
- to produce logarithmically spaced tick marks if the corresponding
- LogPlot attribute is non-zero and the ratio of maximum axis value
- to minimum axis value is 100 or more. If either of these conditions
- is not met, the default is to produce linearly spaced tick marks.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The setting of the LogTicks attribute does not affect the mapping
- of the plot onto the screen, which is controlled by attribute LogPlot.
- By selecting suitable values for LogPlot and LogTicks, it is possible to
- have tick marks which are evenly spaced in value but which are mapped
- logarithmically onto the screen (and vica-versa).
-
- \sstitem
- An error will be reported when drawing an annotated axis grid if
- the visible part of the physical axis includes the value zero.
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}LogTicks{\tt{"}} instead of
- {\tt{"}}LogTicks(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the
- attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
- operation will use just the LogTicks(1) value.
- }
- }
-}
-\sstroutine{
- LonAxis\sstlabel{LonAxis}
-}{
- Index of the longitude axis
-}{
- \sstdescription{
- This read-only attribute gives the index (1 or 2) of the longitude
- axis within the \htmlref{SkyFrame}{SkyFrame} (taking into account any current axis
- permutations).
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- SkyFrame
- }{
- All SkyFrames have this attribute.
- }
- }
-}
-\sstroutine{
- LutInterp\sstlabel{LutInterp}
-}{
- Look-up table interpolation method
-}{
- \sstdescription{
- This attribute indicates the method to be used when finding the
- output value of a \htmlref{LutMap}{LutMap} for an input value part way between two
- table entries. If it is set to 0 (the default) then linear
- interpolation is used. Otherwise, nearest neighbour interpolation
- is used.
-
- Using nearest neighbour interpolation causes AST\_\_BAD to be returned
- for any point which falls outside the bounds of the table. Linear
- interpolation results in an extrapolated value being returned based
- on the two end entries in the table.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- LutMap
- }{
- All LutMaps have this attribute.
- }
- }
-}
-\sstroutine{
- MajTickLen(axis)\sstlabel{MajTickLenaxis}
-}{
- Length of major tick marks for a Plot
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
- the length of the major tick marks drawn on the axes of a \htmlref{Plot}{Plot}.
- It takes a separate value for each physical axis of the Plot so
- that, for instance, the setting {\tt{"}}MajTickLen(2)=0{\tt{"}} specifies the
- length of the major tick marks drawn on the second axis.
-
- The MajTickLen value should be given as a fraction of the
- minimum dimension of the plotting area. Negative values cause
- major tick marks to be placed on the outside of the
- corresponding grid line or axis (but subject to any clipping
- imposed by the underlying graphics system), while positive
- values cause them to be placed on the inside.
-
- The default behaviour depends on whether a coordinate grid is
- drawn inside the plotting area (see the \htmlref{Grid}{Grid} attribute). If so,
- the default MajTickLen value is zero (so that major ticks are
- not drawn), otherwise the default is $+$0.015.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}MajTickLen{\tt{"}} instead of
- {\tt{"}}MajTickLen(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
- the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
- operation will use just the MajTickLen(1) value.
- }
- }
-}
-\sstroutine{
- MatchEnd\sstlabel{MatchEnd}
-}{
- Match trailing axes?
-}{
- \sstdescription{
- This attribute is a boolean value which controls how a \htmlref{Frame}{Frame}
- behaves when it is used (by \htmlref{astFindFrame}{astFindFrame}) as a template to match
- another (target) Frame. It applies only in the case where a
- match occurs between template and target Frames with different
- numbers of axes.
-
- If the MatchEnd value of the template Frame is zero, then the
- axes which occur first in the target Frame will be matched and
- any trailing axes (in either the target or template) will be
- disregarded. If it is non-zero, the final axes in each Frame
- will be matched and any un-matched leading axes will be
- disregarded instead.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The default MatchEnd value for a Frame is zero, so that
- trailing axes are disregarded.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The MatchEnd attribute of a FrameSet is the same as that of
- its current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- }
-}
-\sstroutine{
- MaxAxes\sstlabel{MaxAxes}
-}{
- Maximum number of Frame axes to match
-}{
- \sstdescription{
- This attribute controls how a \htmlref{Frame}{Frame} behaves when it is used (by
- \htmlref{astFindFrame}{astFindFrame}) as a template to match another (target) Frame. It
- specifies the maximum number of axes that the target Frame may
- have in order to match the template.
-
- Normally, this value will equal the number of Frame axes, so
- that a template Frame will only match another Frame with the
- same number of axes as itself. By setting a different value,
- however, the matching process may be used to identify Frames
- with specified numbers of axes.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The default MaxAxes value for a Frame is equal to the number
- of Frame axes (\htmlref{Naxes}{Naxes} attribute).
- }
- \sstsubsection{
- \htmlref{CmpFrame}{CmpFrame}
- }{
- The MaxAxes attribute of a CmpFrame defaults to a large number
- (1000000) which is much larger than any likely number of axes in
- a Frame. Combined with the \htmlref{MinAxes}{MinAxes} default of zero (for a
- CmpFrame), this means that the default behaviour for a CmpFrame
- is to match any target Frame that consists of a subset of the
- axes in the template CmpFrame. To change this so that a CmpFrame
- will only match Frames that have the same number of axes, you
- should set the CmpFrame MaxAxes and MinAxes attributes to the
- number of axes in the CmpFrame.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The MaxAxes attribute of a FrameSet is the same as that of
- its current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When setting a MaxAxes value, the value of the MinAxes
- attribute may also be silently changed so that it remains
- consistent with (i.e. does not exceed) the new value. The
- default MaxAxes value may also be reduced to remain consistent
- with the MinAxes value.
-
- \sstitem
- If a template Frame is used to match a target with a different
- number of axes, the \htmlref{MatchEnd}{MatchEnd} attribute of the template is used
- to determine how the individual axes of each Frame should match.
- }
- }
-}
-\sstroutine{
- MeshSize\sstlabel{MeshSize}
-}{
- Number of points used to represent the boundary of a Region
-}{
- \sstdescription{
- This attribute controls how many points are used when creating a
- mesh of points covering the boundary of a \htmlref{Region}{Region}. This mesh is used
- primarily when testing for overlap with a second Region: each point in
- the mesh is checked to see if it is inside or outside the second Region.
- Thus, the reliability of the overlap check depends on the value assigned
- to this attribute. If the value used is very low, it is possible for
- overlaps to go unnoticed. High values produce more reliable results, but
- can result in the overlap test being very slow. The default value is 200
- for two dimensional Regions and 2000 for three or more dimensional
- Regions (this attribute is not used for 1-dimensional regions since the
- boundary of a simple 1-d Region can only ever have two points). A
- value of five is used if the supplied value is less than five.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- Region
- }{
- All Regions have this attribute.
- }
- \sstsubsection{
- \htmlref{CmpRegion}{CmpRegion}
- }{
- The default MeshSize for a CmpRegion is the MeshSize of its
- first component Region.
- }
- \sstsubsection{
- \htmlref{Stc}{Stc}
- }{
- The default MeshSize for an Stc is the MeshSize of its
- encapsulated Region.
- }
- }
-}
-\sstroutine{
- MinAxes\sstlabel{MinAxes}
-}{
- Minimum number of Frame axes to match
-}{
- \sstdescription{
- This attribute controls how a \htmlref{Frame}{Frame} behaves when it is used (by
- \htmlref{astFindFrame}{astFindFrame}) as a template to match another (target) Frame. It
- specifies the minimum number of axes that the target Frame may
- have in order to match the template.
-
- Normally, this value will equal the number of Frame axes, so
- that a template Frame will only match another Frame with the
- same number of axes as itself. By setting a different value,
- however, the matching process may be used to identify Frames
- with specified numbers of axes.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The default MinAxes value for a Frame is equal to the number
- of Frame axes (\htmlref{Naxes}{Naxes} attribute).
- }
- \sstsubsection{
- \htmlref{CmpFrame}{CmpFrame}
- }{
- The MinAxes attribute of a CmpFrame defaults to zero. Combined
- with the \htmlref{MaxAxes}{MaxAxes} default of 1000000 (for a CmpFrame), this means
- that the default behaviour for a CmpFrame is to match any target
- Frame that consists of a subset of the axes in the template
- CmpFrame. To change this so that a CmpFrame will only match Frames
- that have the same number of axes, you should set the CmpFrame
- MinAxes and MaxAxes attributes to the number of axes in the CmpFrame.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The MinAxes attribute of a FrameSet is the same as that of
- its current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When setting a MinAxes value, the value of the MaxAxes
- attribute may also be silently changed so that it remains
- consistent with (i.e. is not less than) the new value. The
- default MinAxes value may also be reduced to remain consistent
- with the MaxAxes value.
-
- \sstitem
- If a template Frame is used to match a target with a different
- number of axes, the \htmlref{MatchEnd}{MatchEnd} attribute of the template is used
- to determine how the individual axes of each Frame should match.
- }
- }
-}
-\sstroutine{
- MinTick(axis)\sstlabel{MinTickaxis}
-}{
- Density of minor tick marks for a Plot
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
- the density of minor tick marks which appear between the major
- axis values of a \htmlref{Plot}{Plot}. It takes a separate value for each
- physical axis of a Plot so that, for instance, the setting
- {\tt{"}}MinTick(2)=2{\tt{"}} specifies the density of minor tick marks along
- the second axis.
-
- The value supplied should be the number of minor divisions
- required between each pair of major axis values, this being one
- more than the number of minor tick marks to be drawn. By
- default, a value is chosen that depends on the gap between major
- axis values and the nature of the axis.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}MinTick{\tt{"}} instead of
- {\tt{"}}MinTick(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
- the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
- {\tt{"}}test{\tt{"}} operation will use just the MinTick(1) value.
- }
- }
-}
-\sstroutine{
- MinTickLen(axis)\sstlabel{MinTickLenaxis}
-}{
- Length of minor tick marks for a Plot
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
- the length of the minor tick marks drawn on the axes of a \htmlref{Plot}{Plot}.
- It takes a separate value for each physical axis of the Plot so
- that, for instance, the setting {\tt{"}}MinTickLen(2)=0{\tt{"}} specifies the
- length of the minor tick marks drawn on the second axis.
-
- The MinTickLen value should be given as a fraction of the
- minimum dimension of the plotting area. Negative values cause
- minor tick marks to be placed on the outside of the
- corresponding grid line or axis (but subject to any clipping
- imposed by the underlying graphics system), while positive
- values cause them to be placed on the inside.
-
- The default value is $+$0.007.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The number of minor tick marks drawn is determined by the
- Plot's \htmlref{MinTick(axis)}{MinTickaxis} attribute.
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}MinTickLen{\tt{"}} instead of
- {\tt{"}}MinTickLen(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
- the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
- operation will use just the MinTickLen(1) value.
- }
- }
-}
-\sstroutine{
- NatLat\sstlabel{NatLat}
-}{
- Native latitude of the reference point of a FITS-WCS projection
-}{
- \sstdescription{
- This attribute gives the latitude of the reference point of the
- FITS-WCS projection implemented by a \htmlref{WcsMap}{WcsMap}. The value is in
- radians in the {\tt{"}}native spherical{\tt{"}} coordinate system. This value is
- fixed for most projections, for instance it is PI/2 (90 degrees)
- for all zenithal projections. For some projections (e.g. the conics)
- the value is not fixed, but is specified by parameter one on the
- latitude axis.
-
- FITS-WCS paper II introduces the concept of a {\tt{"}}fiducial point{\tt{"}}
- which is logical distinct from the projection reference point.
- It is easy to confuse the use of these two points. The fiducial
- point is the point which has celestial coordinates given by the
- CRVAL FITS keywords. The native spherical coordinates for this point
- default to the values of the NatLat and \htmlref{NatLon}{NatLon}, but these defaults
- mey be over-ridden by values stored in the PVi\_j keywords. Put
- another way, the CRVAL keywords will by default give the celestial
- coordinates of the projection reference point, but may refer to
- some other point if alternative native longitude and latitude values
- are provided through the PVi\_j keywords.
-
- The NatLat attribute is read-only.
- }
- \sstattributetype{
- Floating point, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- WcsMap
- }{
- All WcsMaps have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A default value of AST\_\_BAD is used if no latitude value is available.
- }
- }
-}
-\sstroutine{
- NatLon\sstlabel{NatLon}
-}{
- Native longitude of the reference point of a FITS-WCS projection
-}{
- \sstdescription{
- This attribute gives the longitude of the reference point of the
- FITS-WCS projection implemented by a \htmlref{WcsMap}{WcsMap}. The value is in
- radians in the {\tt{"}}native spherical{\tt{"}} coordinate system, and will
- usually be zero. See the description of attribute \htmlref{NatLat}{NatLat} for further
- information.
-
- The NatLon attribute is read-only.
- }
- \sstattributetype{
- Floating point, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- WcsMap
- }{
- All WcsMaps have this attribute.
- }
- }
-}
-\sstroutine{
- Naxes\sstlabel{Naxes}
-}{
- Number of Frame axes
-}{
- \sstdescription{
- This is a read-only attribute giving the number of axes in a
- \htmlref{Frame}{Frame} (i.e. the number of dimensions of the coordinate space
- which the Frame describes). This value is determined when the
- Frame is created.
- }
- \sstattributetype{
- Integer, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- All Frames have this attribute.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Naxes attribute of a FrameSet is the same as that of its
- current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- \sstsubsection{
- \htmlref{CmpFrame}{CmpFrame}
- }{
- The Naxes attribute of a CmpFrame is equal to the sum of the
- Naxes values of its two component Frames.
- }
- }
-}
-\sstroutine{
- Ncard\sstlabel{Ncard}
-}{
- Number of FITS header cards in a FitsChan
-}{
- \sstdescription{
- This attribute gives the total number of FITS header cards
- stored in a \htmlref{FitsChan}{FitsChan}. It is updated as cards are added or
- deleted.
- }
- \sstattributetype{
- Integer, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- FitsChan
- }{
- All FitsChans have this attribute.
- }
- }
-}
-\sstroutine{
- NegLon\sstlabel{NegLon}
-}{
- Display negative longitude values?
-}{
- \sstdescription{
- This attribute is a boolean value which controls how longitude values
- are normalized for display by \htmlref{astNorm}{astNorm}.
-
- If the NegLon attribute is zero, then normalized
- longitude values will be in the range zero to 2.pi. If NegLon is
- non-zero, then normalized longitude values will be in the range -pi
- to pi.
-
- The default value depends on the current value of the \htmlref{SkyRefIs}{SkyRefIs}
- attribute, If SkyRefIs has a value of {\tt{"}}Origin{\tt{"}}, then the default for
- NegLon is one, otherwise the default is zero.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- All SkyFrames have this attribute.
- }
- }
-}
-\sstroutine{
- Negated\sstlabel{Negated}
-}{
- Region negation flag
-}{
- \sstdescription{
- This attribute controls whether a \htmlref{Region}{Region} represents the {\tt{"}}inside{\tt{"}} or
- the {\tt{"}}outside{\tt{"}} of the area which was supplied when the Region was
- created. If the attribute value is zero (the default), the Region
- represents the inside of the original area. However, if it is non-zero,
- it represents the outside of the original area. The value of this
- attribute may be toggled using the
- \htmlref{astNegate}{astNegate} function.
-
- Note, whether the boundary is considered to be inside the Region or
- not is controlled by the \htmlref{Closed}{Closed} attribute. Changing the value of
- the Negated attribute does not change the value of the Closed attribute.
- Thus, if Region is closed, then the boundary of the Region will be
- inside the Region, whatever the setting of the Negated attribute.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Region
- }{
- All Regions have this attribute.
- }
- }
-}
-\sstroutine{
- Nframe\sstlabel{Nframe}
-}{
- Number of Frames in a FrameSet
-}{
- \sstdescription{
- This attrbute gives the number of Frames in a \htmlref{FrameSet}{FrameSet}. This
- value will change as Frames are added or removed, but will
- always be at least one.
- }
- \sstattributetype{
- Integer, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- FrameSet
- }{
- All FrameSets have this attribute.
- }
- }
-}
-\sstroutine{
- Nin\sstlabel{Nin}
-}{
- Number of input coordinates for a Mapping
-}{
- \sstdescription{
- This attribute gives the number of coordinate values required to
- specify an input point for a \htmlref{Mapping}{Mapping} (i.e. the number of
- dimensions of the space in which the Mapping's input points
- reside).
- }
- \sstattributetype{
- Integer, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- Mapping
- }{
- All Mappings have this attribute.
- }
- \sstsubsection{
- \htmlref{CmpMap}{CmpMap}
- }{
- If a CmpMap's component Mappings are joined in series, then
- its Nin attribute is equal to the Nin attribute of the first
- component (or to the \htmlref{Nout}{Nout} attribute of the second component
- if the the CmpMap's \htmlref{Invert}{Invert} attribute is non-zero).
-
- If a CmpMap's component Mappings are joined in parallel, then
- its Nin attribute is given by the sum of the Nin attributes
- of each component (or to the sum of their Nout attributes if
- the CmpMap's Invert attribute is non-zero).
- }
- \sstsubsection{
- \htmlref{Frame}{Frame}
- }{
- The Nin attribute for a Frame is always equal to the number
- of Frame axes (\htmlref{Naxes}{Naxes} attribute).
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Nin attribute of a FrameSet is equal to the number of
- axes (Naxes attribute) of its base Frame (as specified by the
- FrameSet's \htmlref{Base}{Base} attribute). The Nin attribute value may
- therefore change if a new base Frame is selected.
- }
- }
-}
-\sstroutine{
- Nobject\sstlabel{Nobject}
-}{
- Number of Objects in class
-}{
- \sstdescription{
- This attribute gives the total number of Objects currently in
- existence in the same class as the \htmlref{Object}{Object} whose attribute value
- is requested. This count does not include Objects which belong
- to derived (more specialised) classes.
-
- This attribute is mainly intended for debugging. It can be used
- to detect whether Objects which should have been deleted have,
- in fact, been deleted.
- }
- \sstattributetype{
- Integer, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- All Objects have this attribute.
- }
- }
-}
-\sstroutine{
- Norm(axis)\sstlabel{Normaxis}
-}{
- Specifies the plane upon which a Plot3D draws text and markers
-}{
- \sstdescription{
- This attribute controls the appearance of text and markers drawn
- by a \htmlref{Plot3D}{Plot3D}. It specifies the orientation of the plane upon which
- text and markers will be drawn by all subsequent invocations of the
- \htmlref{astText}{astText} and \htmlref{astMark}{astMark} functions.
-
- When setting or getting the Norm attribute, the attribute name must
- be qualified by an axis index in the range 1 to 3. The 3 elements of
- the Norm attribute are together interpreted as a vector in 3D graphics
- coordinates that is normal to the plane upon which text and marks
- should be drawn. When testing or clearing the attribute, the axis
- index is optional. If no index is supplied, then clearing the Norm
- attribute will clear all three elements, and testing the Norm attribute
- will return a non-zero value if any of the three elements are set.
-
- The default value is 1.0 for each of the 3 elements. The length of
- the vector is insignificant, but an error will be reported when
- attempting to draw text or markers if the vector has zero length.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{Plot}{Plot}
- }{
- All Plot3Ds have this attribute.
- }
- }
-}
-\sstroutine{
- NormUnit(axis)\sstlabel{NormUnitaxis}
-}{
- Normalised Axis physical units
-}{
- \sstdescription{
- The value of this read-only attribute is derived from the current
- value of the Unit attribute. It will represent an equivalent system
- of units to the Unit attribute, but will potentially be simplified.
- For instance, if Unit is set to {\tt{"}}s$*$(m/s){\tt{"}}, the NormUnit value will
- be {\tt{"}}m{\tt{"}}. If no simplification can be performed, the value of the
- NormUnit attribute will equal that of the Unit attribute.
- }
- \sstattributetype{
- String, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{Frame}{Frame}
- }{
- All Frames have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When specifying this attribute by name, it should be
- subscripted with the number of the Frame axis to which it
- applies.
- }
- }
-}
-\sstroutine{
- Nout\sstlabel{Nout}
-}{
- Number of output coordinates for a Mapping
-}{
- \sstdescription{
- This attribute gives the number of coordinate values generated
- by a \htmlref{Mapping}{Mapping} to specify each output point (i.e. the number of
- dimensions of the space in which the Mapping's output points
- reside).
- }
- \sstattributetype{
- Integer, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- Mapping
- }{
- All Mappings have this attribute.
- }
- \sstsubsection{
- \htmlref{CmpMap}{CmpMap}
- }{
- If a CmpMap's component Mappings are joined in series, then
- its Nout attribute is equal to the Nout attribute of the
- second component (or to the \htmlref{Nin}{Nin} attribute of the first
- component if the the CmpMap's \htmlref{Invert}{Invert} attribute is non-zero).
-
- If a CmpMap's component Mappings are joined in parallel, then
- its Nout attribute is given by the sum of the Nout attributes
- of each component (or to the sum of their Nin attributes if
- the CmpMap's Invert attribute is non-zero).
- }
- \sstsubsection{
- \htmlref{Frame}{Frame}
- }{
- The Nout attribute for a Frame is always equal to the number
- of Frame axes (\htmlref{Naxes}{Naxes} attribute).
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Nout attribute of a FrameSet is equal to the number of
- FrameSet axes (Naxes attribute) which, in turn, is equal to
- the Naxes attribute of the FrameSet's current Frame (as
- specified by the \htmlref{Current}{Current} attribute). The Nout attribute value
- may therefore change if a new current Frame is selected.
- }
- }
-}
-\sstroutine{
- NumLab(axis)\sstlabel{NumLabaxis}
-}{
- Draw numerical axis labels for a Plot?
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
- whether labels should be drawn to represent the numerical values
- along each axis of a \htmlref{Plot}{Plot}. It takes a separate value for each
- physical axis of a Plot so that, for instance, the setting
- {\tt{"}}NumLab(2)=1{\tt{"}} specifies that numerical labels should be drawn
- for the second axis.
-
- If the NumLab value of a Plot axis is non-zero (the default),
- then numerical labels will be drawn for that axis, otherwise
- they will be omitted.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The drawing of associated descriptive axis labels for a Plot
- (describing the quantity being plotted along each axis) is
- controlled by the \htmlref{TextLab(axis)}{TextLabaxis} attribute.
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}NumLab{\tt{"}} instead of
- {\tt{"}}NumLab(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the
- attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
- operation will use just the NumLab(1) value.
- }
- }
-}
-\sstroutine{
- NumLabGap(axis)\sstlabel{NumLabGapaxis}
-}{
- Spacing of numerical labels for a Plot
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
- where numerical axis labels are placed relative to the axes they
- describe. It takes a separate value for each physical axis of a
- \htmlref{Plot}{Plot} so that, for instance, the setting {\tt{"}}NumLabGap(2)=-0.01{\tt{"}}
- specifies where the numerical label for the second axis should
- be drawn.
-
- For each axis, the NumLabGap value gives the spacing between the
- axis line (or edge of the plotting area, if appropriate) and the
- nearest edge of the corresponding numerical axis
- labels. Positive values cause the descriptive label to be placed
- on the opposite side of the line to the default tick marks,
- while negative values cause it to be placed on the same side.
-
- The NumLabGap value should be given as a fraction of the minimum
- dimension of the plotting area, the default value being $+$0.01.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}NumLabGap{\tt{"}} instead of
- {\tt{"}}NumLabGap(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
- the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
- {\tt{"}}test{\tt{"}} operation will use just the NumLabGap(1) value.
- }
- }
-}
-\sstroutine{
- ObjSize\sstlabel{ObjSize}
-}{
- The in-memory size of the Object
-}{
- \sstdescription{
- This attribute gives the total number of bytes of memory used by
- the \htmlref{Object}{Object}. This includes any Objects which are encapsulated within
- the supplied Object.
- }
- \sstattributetype{
- Integer, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- All Objects have this attribute.
- }
- }
-}
-\sstroutine{
- ObsAlt\sstlabel{ObsAlt}
-}{
- The geodetic altitude of the observer
-}{
- \sstdescription{
- This attribute specifies the geodetic altitude of the observer, in
- metres, relative to the IAU 1976 reference ellipsoid. The basic \htmlref{Frame}{Frame}
- class makes no use of this attribute, but specialised subclasses of
- Frame may use it. For instance, the \htmlref{SpecFrame}{SpecFrame}, \htmlref{SkyFrame}{SkyFrame} and \htmlref{TimeFrame}{TimeFrame}
- classes use it. The default value is zero.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- All Frames have this attribute.
- }
- \sstsubsection{
- SpecFrame
- }{
- Together with the \htmlref{ObsLon}{ObsLon}, \htmlref{Epoch}{Epoch}, \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec} attributes,
- it defines the Doppler shift introduced by the observers diurnal
- motion around the earths axis, which is needed when converting to
- or from the topocentric standard of rest. The maximum velocity
- error which can be caused by an incorrect value is 0.5 km/s. The
- default value for the attribute is zero.
- }
- \sstsubsection{
- TimeFrame
- }{
- Together with the ObsLon attribute, it is used when converting
- between certain time scales (TDB, TCB, LMST, LAST)
- }
- }
-}
-\sstroutine{
- ObsLat\sstlabel{ObsLat}
-}{
- The geodetic latitude of the observer
-}{
- \sstdescription{
- This attribute specifies the geodetic latitude of the observer, in
- degrees, relative to the IAU 1976 reference ellipsoid. The basic \htmlref{Frame}{Frame}
- class makes no use of this attribute, but specialised subclasses of
- Frame may use it. For instance, the \htmlref{SpecFrame}{SpecFrame}, \htmlref{SkyFrame}{SkyFrame} and \htmlref{TimeFrame}{TimeFrame}
- classes use it. The default value is zero.
-
- The value is stored internally in radians, but is converted to and
- from a degrees string for access. Some example input formats are:
- {\tt{"}}22:19:23.2{\tt{"}}, {\tt{"}}22 19 23.2{\tt{"}}, {\tt{"}}22:19.387{\tt{"}}, {\tt{"}}22.32311{\tt{"}}, {\tt{"}}N22.32311{\tt{"}},
- {\tt{"}}-45.6{\tt{"}}, {\tt{"}}S45.6{\tt{"}}. As indicated, the sign of the latitude can
- optionally be indicated using characters {\tt{"}}N{\tt{"}} and {\tt{"}}S{\tt{"}} in place of the
- usual {\tt{"}}$+${\tt{"}} and {\tt{"}}-{\tt{"}}. When converting the stored value to a string, the
- format {\tt{"}}[s]dd:mm:ss.ss{\tt{"}} is used, when {\tt{"}}[s]{\tt{"}} is {\tt{"}}N{\tt{"}} or {\tt{"}}S{\tt{"}}.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- All Frames have this attribute.
- }
- \sstsubsection{
- SpecFrame
- }{
- Together with the \htmlref{ObsLon}{ObsLon}, \htmlref{Epoch}{Epoch}, \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec} attributes,
- it defines the Doppler shift introduced by the observers diurnal
- motion around the earths axis, which is needed when converting to
- or from the topocentric standard of rest. The maximum velocity
- error which can be caused by an incorrect value is 0.5 km/s. The
- default value for the attribute is zero.
- }
- \sstsubsection{
- TimeFrame
- }{
- Together with the ObsLon attribute, it is used when converting
- between certain time scales (TDB, TCB, LMST, LAST)
- }
- }
-}
-\sstroutine{
- ObsLon\sstlabel{ObsLon}
-}{
- The geodetic longitude of the observer
-}{
- \sstdescription{
- This attribute specifies the geodetic (or equivalently, geocentric)
- longitude of the observer, in degrees, measured positive eastwards.
- See also attribute \htmlref{ObsLat}{ObsLat}. The basic \htmlref{Frame}{Frame} class makes no use of this
- attribute, but specialised subclasses of Frame may use it. For instance,
- the \htmlref{SpecFrame}{SpecFrame}, \htmlref{SkyFrame}{SkyFrame} and \htmlref{TimeFrame}{TimeFrame} classes use it. The default value
- is zero.
-
- The value is stored internally in radians, but is converted to and
- from a degrees string for access. Some example input formats are:
- {\tt{"}}155:19:23.2{\tt{"}}, {\tt{"}}155 19 23.2{\tt{"}}, {\tt{"}}155:19.387{\tt{"}}, {\tt{"}}155.32311{\tt{"}}, {\tt{"}}E155.32311{\tt{"}},
- {\tt{"}}-204.67689{\tt{"}}, {\tt{"}}W204.67689{\tt{"}}. As indicated, the sign of the longitude can
- optionally be indicated using characters {\tt{"}}E{\tt{"}} and {\tt{"}}W{\tt{"}} in place of the
- usual {\tt{"}}$+${\tt{"}} and {\tt{"}}-{\tt{"}}. When converting the stored value to a string, the
- format {\tt{"}}[s]ddd:mm:ss.ss{\tt{"}} is used, when {\tt{"}}[s]{\tt{"}} is {\tt{"}}E{\tt{"}} or {\tt{"}}W{\tt{"}} and the
- numerical value is chosen to be less than 180 degrees.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- All Frames have this attribute.
- }
- \sstsubsection{
- SpecFrame
- }{
- Together with the ObsLon, \htmlref{Epoch}{Epoch}, \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec} attributes,
- it defines the Doppler shift introduced by the observers diurnal
- motion around the earths axis, which is needed when converting to
- or from the topocentric standard of rest. The maximum velocity
- error which can be caused by an incorrect value is 0.5 km/s. The
- default value for the attribute is zero.
- }
- \sstsubsection{
- TimeFrame
- }{
- Together with the ObsLon attribute, it is used when converting
- between certain time scales (TDB, TCB, LMST, LAST)
- }
- }
-}
-\sstroutine{
- PVMax(i)\sstlabel{PVMaxi}
-}{
- Maximum number of FITS-WCS projection parameters
-}{
- \sstdescription{
- This attribute specifies the largest legal index for a PV projection
- parameter attached to a specified axis of the \htmlref{WcsMap}{WcsMap} (i.e. the
- largest legal value for {\tt{"}}m{\tt{"}} when accessing the {\tt{"}}\htmlref{PVi\_m}{PVi_m}{\tt{"}} attribute).
- The axis index is specified by i, and should be in the range 1 to 99.
- The value for each axis is determined by the projection type specified
- when the WcsMap
- is first created using \htmlref{astWcsMap}{astWcsMap} and cannot subsequently be
- changed.
- }
- \sstattributetype{
- Integer, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- WcsMap
- }{
- All WcsMaps have this attribute.
- }
- }
-}
-\sstroutine{
- PVi\_m\sstlabel{PVi_m}
-}{
- FITS-WCS projection parameters
-}{
- \sstdescription{
- This attribute specifies the projection parameter values to be
- used by a \htmlref{WcsMap}{WcsMap} when implementing a FITS-WCS sky projection.
- Each PV attribute name should include two integers, i and m,
- separated by an underscore. The axis index is specified
- by i, and should be in the range 1 to 99. The parameter number
- is specified by m, and should be in the range 0 to 99. For
- example, {\tt{"}}PV2\_1=45.0{\tt{"}} would specify a value for projection
- parameter 1 of axis 2 in a WcsMap.
-
- These projection parameters correspond exactly to the values
- stored using the FITS-WCS keywords {\tt{"}}PV1\_1{\tt{"}}, {\tt{"}}PV1\_2{\tt{"}}, etc. This
- means that projection parameters which correspond to angles must
- be given in degrees (despite the fact that the angular
- coordinates and other attributes used by a WcsMap are in
- radians).
-
- The set of projection parameters used by a WcsMap depends on the
- type of projection, which is determined by its \htmlref{WcsType}{WcsType}
- parameter. Most projections either do not require projection
- parameters, or use parameters 1 and 2 associated with the latitude
- axis. You should consult the FITS-WCS paper for details.
-
- Some projection parameters have default values (as defined in
- the FITS-WCS paper) which apply if no explicit value is given.
- You may omit setting a value for these {\tt{"}}optional{\tt{"}} parameters and the
- default will apply. Some projection parameters, however, have no
- default and a value must be explicitly supplied. This is most
- conveniently
- done using the {\tt{"}}options{\tt{"}} argument of \htmlref{astWcsMap}{astWcsMap} (q.v.) when a WcsMap
- is first created. An error will result when a WcsMap is used to
- transform coordinates if any of its required projection
- parameters has not been set and lacks a default value.
-
- A {\tt{"}}get{\tt{"}} operation for a parameter which has not been assigned a value
- will return the default value defined in the FITS-WCS paper, or
- AST\_\_BAD if the paper indicates that the parameter has no default.
- A default value of zero is returned for parameters which are not
- accessed by the projection.
-
- Note, the FITS-WCS paper reserves parameters 1 and 2 on the longitude
- axis to hold the native longitude and latitude of the fiducial
- point of the projection, in degrees. The default values for these
- parameters are determined by the projection type. The AST-specific
- TPN projection does not use this convention - all projection
- parameters for both axes are used to represent polynomical correction
- terms, and the native longitude and latitude at the fiducial point may
- not be changed from the default values of zero and 90 degrees.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- WcsMap
- }{
- All WcsMaps have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the projection parameter values given for a WcsMap do not
- satisfy all the required constraints (as defined in the FITS-WCS
- paper), then an error will result when the WcsMap is used to
- transform coordinates.
- }
- }
-}
-\sstroutine{
- PcdCen(axis)\sstlabel{PcdCenaxis}
-}{
- Centre coordinates of pincushion/barrel distortion
-}{
- \sstdescription{
- This attribute specifies the centre of the pincushion/barrel
- distortion implemented by a \htmlref{PcdMap}{PcdMap}. It takes a separate value for
- each axis of the PcdMap so that, for instance, the settings
- {\tt{"}}PcdCen(1)=345.0,PcdCen(2)=-104.4{\tt{"}} specify that the pincushion
- distortion is centred at positions of 345.0 and -104.4 on axes 1 and 2
- respectively. This attribute is set when a PcdMap is created, but may
- later be modified. If the attribute is cleared, the default value for
- both axes is zero.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- PcdMap
- }{
- All PcdMaps have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}PcdCen{\tt{"}} instead of
- {\tt{"}}PcdCen(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
- the attribute value of both axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
- operation will use just the PcdCen(1) value.
- }
- }
-}
-\sstroutine{
- Permute\sstlabel{Permute}
-}{
- Permute axis order?
-}{
- \sstdescription{
- This attribute is a boolean value which controls how a \htmlref{Frame}{Frame}
- behaves when it is used (by \htmlref{astFindFrame}{astFindFrame}) as a template to match
- another (target) Frame. It specifies whether the axis order of
- the target Frame may be permuted in order to obtain a match.
-
- If the template's Permute value is zero, it will match a target
- only if it can do so without changing the order of its
- axes. Otherwise, it will attempt to permute the target's axes as
- necessary.
-
- The default value is 1, so that axis permutation will be attempted.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- All Frames have this attribute. However, the Frame class
- effectively ignores this attribute and behaves as if it has
- the value 1. This is because the axes of a basic Frame are
- not distinguishable and will always match any other Frame
- whatever their order.
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- Unlike a basic Frame, the SkyFrame class makes use of this
- attribute.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Permute attribute of a FrameSet is the same as that of
- its current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- }
-}
-\sstroutine{
- PolarLong\sstlabel{PolarLong}
-}{
- The longitude value to assign to either pole
-}{
- \sstdescription{
- This attribute holds the longitude value, in radians, to be
- returned when a Cartesian position corresponding to either the north
- or south pole is transformed into spherical coordinates. The
- default value is zero.
- }
- \sstattributetype{
- Double precision.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{SphMap}{SphMap}
- }{
- All SphMaps have this attribute.
- }
- }
-}
-\sstroutine{
- PreserveAxes\sstlabel{PreserveAxes}
-}{
- Preserve axes?
-}{
- \sstdescription{
- This attribute controls how a \htmlref{Frame}{Frame} behaves when it is used (by
- \htmlref{astFindFrame}{astFindFrame}) as a template to match another (target) Frame. It
- determines which axes appear (and in what order) in the {\tt{"}}result{\tt{"}}
- Frame produced.
-
- If PreserveAxes is zero in the template Frame, then the result
- Frame will have the same number (and order) of axes as the
- template. If it is non-zero, however, the axes of the target
- Frame will be preserved, so that the result Frame will have the
- same number (and order) of axes as the target.
-
- The default value is zero, so that target axes are not preserved
- and the result Frame resembles the template.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- All Frames have this attribute.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The PreserveAxes attribute of a FrameSet is the same as that
- of its current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- }
-}
-\sstroutine{
- ProjP(m)\sstlabel{ProjPm}
-}{
- FITS-WCS projection parameters
-}{
- \sstdescription{
- This attribute provides aliases for the PV attributes, which
- specifies the projection parameter values to be used by a \htmlref{WcsMap}{WcsMap}
- when implementing a FITS-WCS sky projection. ProjP is retained for
- compatibility with previous versions of FITS-WCS and AST. New
- applications should use the PV attibute instead.
-
- Attributes ProjP(0) to ProjP(9) correspond to attributes PV$<$axlat$>$\_0
- to PV$<$axlat$>$\_9, where $<$axlat$>$ is replaced by the index of the
- latitude axis (given by attribute WcsAxis(2)). See PV for further
- details.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- WcsMap
- }{
- All WcsMaps have this attribute.
- }
- }
-}
-\sstroutine{
- Projection\sstlabel{Projection}
-}{
- Sky projection description
-}{
- \sstdescription{
- This attribute provides a place to store a description of the
- type of sky projection used when a \htmlref{SkyFrame}{SkyFrame} is attached to a
- 2-dimensional object, such as an image or plotting surface. For
- example, typical values might be {\tt{"}}orthographic{\tt{"}}, {\tt{"}}Hammer-Aitoff{\tt{"}}
- or {\tt{"}}cylindrical equal area{\tt{"}}.
-
- The Projection value is purely descriptive and does not affect
- the celestial coordinate system represented by the SkyFrame in
- any way. If it is set to a non-blank string, the description
- provided may be used when forming the default value for the
- SkyFrame's \htmlref{Title}{Title} attribute (so that typically it will appear in
- graphical output, for instance). The default value is an empty
- string.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- SkyFrame
- }{
- All SkyFrames have this attribute.
- }
- }
-}
-\sstroutine{
- RefCount\sstlabel{RefCount}
-}{
- Count of active Object pointers
-}{
- \sstdescription{
- This attribute gives the number of active pointers associated
- with an \htmlref{Object}{Object}. It is modified whenever pointers are created or
- annulled (by \htmlref{astClone}{astClone}, \htmlref{astAnnul}{astAnnul} or \htmlref{astEnd}{astEnd} for example). The count
- includes the initial pointer issued when the Object was created.
-
- If the reference count for an Object falls to zero as the result
- of annulling a pointer to it, then the Object will be deleted.
- }
- \sstattributetype{
- Integer, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- All Objects have this attribute.
- }
- }
-}
-\sstroutine{
- RefDec\sstlabel{RefDec}
-}{
- The declination of the reference point
-}{
- \sstdescription{
- This attribute specifies the FK5 J2000.0 declination of a reference
- point on the sky. See the description of attribute \htmlref{RefRA}{RefRA} for details.
- The default RefDec is {\tt{"}}0:0:0{\tt{"}}.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{SpecFrame}{SpecFrame}
- }{
- All SpecFrames have this attribute.
- }
- }
-}
-\sstroutine{
- RefRA\sstlabel{RefRA}
-}{
- The right ascension of the reference point
-}{
- \sstdescription{
- This attribute, together with the \htmlref{RefDec}{RefDec} attribute, specifies the FK5
- J2000.0 coordinates of a reference point on the sky. For 1-dimensional
- spectra, this should normally be the position of the source. For
- spectral data with spatial coverage (spectral cubes, etc), this should
- be close to centre of the spatial coverage. It is used to define the
- correction for Doppler shift to be applied when using the
- \htmlref{astFindFrame}{astFindFrame} or \htmlref{astConvert}{astConvert}
- method to convert between different standards of rest.
-
- The \htmlref{SpecFrame}{SpecFrame} class assumes this velocity correction is spatially
- invariant. If a single SpecFrame is used (for instance, as a
- component of a \htmlref{CmpFrame}{CmpFrame}) to describe spectral values at different
- points on the sky, then it is assumes that the doppler shift at any
- spatial position is the same as at the reference position. The
- maximum velocity error introduced by this assumption is of the order
- of V$*$SIN(FOV), where FOV is the angular field of view, and V is the
- relative velocity of the two standards of rest. As an example, when
- correcting from the observers rest frame (i.e. the topocentric rest
- frame) to the kinematic local standard of rest the maximum value of V
- is about 20 km/s, so for 5 arc-minute field of view the maximum velocity
- error introduced by the correction will be about 0.03 km/s. As another
- example, the maximum error when correcting from the observers rest frame
- to the local group is about 5 km/s over a 1 degree field of view.
-
- The RefRA and RefDec attributes are stored internally in radians, but
- are converted to and from a string for access. The format {\tt{"}}hh:mm:ss.ss{\tt{"}}
- is used for RefRA, and {\tt{"}}dd:mm:ss.s{\tt{"}} is used for RefDec. The methods
- \htmlref{astSetRefPos}{astSetRefPos} and \htmlref{astGetRefPos}{astGetRefPos} may be used to access the values of
- these attributes directly as unformatted values in radians.
-
- The default for RefRA is {\tt{"}}0:0:0{\tt{"}}.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- SpecFrame
- }{
- All SpecFrames have this attribute.
- }
- }
-}
-\sstroutine{
- RegionClass\sstlabel{RegionClass}
-}{
- The AST class name of the Region encapsulated within an Stc
-}{
- \sstdescription{
- This is a read-only attribute giving the AST class name of the
- \htmlref{Region}{Region} encapsulated within an \htmlref{Stc}{Stc} (that is, the class of the Region
- which was supplied when the Stc was created).
- }
- \sstattributetype{
- String, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- Stc
- }{
- All Stc objects this attribute.
- }
- }
-}
-\sstroutine{
- Report\sstlabel{Report}
-}{
- Report transformed coordinates?
-}{
- \sstdescription{
- This attribute controls whether coordinate values are reported
- whenever a \htmlref{Mapping}{Mapping} is used to transform a set of points. If its
- value is zero (the default), no report is made. However, if it
- is non-zero, the coordinates of each point are reported (both
- before and after transformation) by writing them to standard
- output.
-
- This attribute is provided as an aid to debugging, and to avoid
- having to report values explicitly in simple programs.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Mapping
- }{
- All Mappings have this attribute.
- }
- \sstsubsection{
- \htmlref{CmpMap}{CmpMap}
- }{
- When applied to a compound Mapping (CmpMap), only the Report
- attribute of the CmpMap, and not those of its component
- Mappings, is used. Coordinate information is never reported
- for the component Mappings individually, only for the
- complete CmpMap.
- }
- \sstsubsection{
- \htmlref{Frame}{Frame}
- }{
- When applied to any Frame, the formatting capabilities of the
- Frame (as provided by the \htmlref{astFormat}{astFormat} function) will be used to
- format the reported coordinates.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- When applied to any FrameSet, the formatting capabilities of
- the base and current Frames will be used (as above) to
- individually format the input and output coordinates, as
- appropriate. The Report attribute of a FrameSet is not itself
- affected by selecting a new base or current Frame, but the
- resulting formatting capabilities may be.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Unlike most other attributes, the value of the Report
- attribute is not transferred when a Mapping is copied. Instead,
- its value is undefined (and therefore defaults to zero) in any
- copy. Similarly, it becomes undefined in any external
- representation of a Mapping produced by the \htmlref{astWrite}{astWrite} function.
- }
- }
-}
-\sstroutine{
- ReportLevel\sstlabel{ReportLevel}
-}{
- Determines which read/write conditions are reported
-}{
- \sstdescription{
- This attribute determines which, if any, of the conditions that occur
- whilst reading or writing an \htmlref{Object}{Object} should be reported. These
- conditions will generate either a fatal error or a warning, as
- determined by attribute \htmlref{Strict}{Strict}. ReportLevel can take any of the
- following values:
-
- 0 - Do not report any conditions.
-
- 1 - \htmlref{Report}{Report} only conditions where significant information content has been
- changed. For instance, an unsupported time-scale has been replaced by a
- supported near-equivalent time-scale. Another example is if a basic
- \htmlref{Channel}{Channel} unexpected encounters data items that may have been introduced
- by later versions of AST.
-
- 2 - Report the above, and in addition report significant default
- values. For instance, if no time-scale was specified when reading an
- Object from an external data source, report the default time-scale
- that is being used.
-
- 3 - Report the above, and in addition report any other potentially
- interesting conditions that have no significant effect on the
- conversion. For instance, report if a time-scale of {\tt{"}}TT{\tt{"}}
- (terrestrial time) is used in place of {\tt{"}}ET{\tt{"}} (ephemeris time). This
- change has no signficiant effect because ET is the predecessor of,
- and is continuous with, TT. Synonyms such as {\tt{"}}IAT{\tt{"}} and {\tt{"}}TAI{\tt{"}} are
- another example.
-
- The default value is 1. Note, there are many other conditions that
- can occur whilst reading or writing an Object that completely
- prevent the conversion taking place. Such conditions will always
- generate errors, irrespective of the ReportLevel and Strict attributes.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Channel
- }{
- All Channels have this attribute.
- }
- \sstsubsection{
- \htmlref{FitsChan}{FitsChan}
- }{
- All the conditions selected by the FitsChan \htmlref{Warnings}{Warnings} attribute are
- reported at level 1.
- }
- }
-}
-\sstroutine{
- RestFreq\sstlabel{RestFreq}
-}{
- The rest frequency
-}{
- \sstdescription{
- This attribute specifies the frequency corresponding to zero
- velocity. It is used when converting between between velocity-based
- coordinate systems and and other coordinate systems (such as frequency,
- wavelength, energy, etc). The default value is 1.0E5 GHz.
-
- When setting a new value for this attribute, the new value can be
- supplied either directly as a frequency, or indirectly as a wavelength
- or energy, in which case the supplied value is converted to a frequency
- before being stored. The nature of the supplied value is indicated by
- appending text to the end of the numerical value indicating the units in
- which the value is supplied. If the units are not specified, then the
- supplied value is assumed to be a frequency in units of GHz. If the
- supplied unit is a unit of frequency, the supplied value is assumed to
- be a frequency in the given units. If the supplied unit is a unit of
- length, the supplied value is assumed to be a (vacuum) wavelength. If
- the supplied unit is a unit of energy, the supplied value is assumed to
- be an energy. For instance, the following strings all result in
- a rest frequency of around 1.4E14 Hz being used: {\tt{"}}1.4E5{\tt{"}}, {\tt{"}}1.4E14 Hz{\tt{"}},
- {\tt{"}}1.4E14 s$*$$*$-1{\tt{"}}, {\tt{"}}1.4E5 GHz{\tt{"}}, {\tt{"}}2.14E-6 m{\tt{"}}, {\tt{"}}21400 Angstrom{\tt{"}}, {\tt{"}}9.28E-20 J{\tt{"}},
- {\tt{"}}9.28E-13 erg{\tt{"}}, {\tt{"}}0.58 eV{\tt{"}}, etc.
-
- When getting the value of this attribute, the returned value is
- always a frequency in units of GHz.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{SpecFrame}{SpecFrame}
- }{
- All SpecFrames have this attribute.
- }
- }
-}
-\sstroutine{
- RootCorner\sstlabel{RootCorner}
-}{
- Specifies which edges of the 3D box should be annotated
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
- which edges of the cube enclosing the 3D graphics space are used
- for displaying numerical and descriptive axis labels. The attribute
- value identifies one of the eight corners of the cube within
- which graphics are being drawn (i.e. the cube specified by the
- {\tt{"}}graphbox{\tt{"}} parameter when \htmlref{astPlot3D}{astPlot3D}
- was called tp create the \htmlref{Plot3D}{Plot3D}). \htmlref{Axis}{Axis} labels and tick marks will
- be placed on the three cube edges that meet at the given corner.
-
- The attribute value should consist of three character, each of
- which must be either {\tt{"}}U{\tt{"}} or {\tt{"}}L{\tt{"}}. The first character in the string
- specifies the position of the corner on the first graphics axis.
- If the character is {\tt{"}}U{\tt{"}} then the corner is at the upper bound on the
- first graphics axis. If it is {\tt{"}}L{\tt{"}}, then the corner is at the lower
- bound on the first axis. Likewise, the second and third characters
- in the string specify the location of the corner on the second and
- third graphics axes.
-
- For instance, corner {\tt{"}}LLL{\tt{"}} is the corner that is at the lower bound
- on all three graphics axes, and corner {\tt{"}}ULU{\tt{"}} is at the upper bound
- on axes 1 and 3 but at the lower bound on axis 2.
-
- The default value is {\tt{"}}LLL{\tt{"}}.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Plot3D
- }{
- All Plot3Ds have this attribute.
- }
- }
-}
-\sstroutine{
- Seed\sstlabel{Seed}
-}{
- Random number seed for a MathMap
-}{
- \sstdescription{
- This attribute, which may take any integer value, determines the
- sequence of random numbers produced by the random number functions in
- \htmlref{MathMap}{MathMap} expressions. It is set to an unpredictable default value when
- a MathMap is created, so that by default each MathMap uses a different
- set of random numbers.
-
- If required, you may set this Seed attribute to a value of your
- choosing in order to produce repeatable behaviour from the random
- number functions. You may also enquire the Seed value (e.g. if an
- initially unpredictable value has been used) and then use it to
- reproduce the resulting sequence of random numbers, either from the
- same MathMap or from another one.
-
- Clearing the Seed attribute gives it a new unpredictable default
- value.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- MathMap
- }{
- All MathMaps have this attribute.
- }
- }
-}
-\sstroutine{
- SideBand\sstlabel{SideBand}
-}{
- Indicates which sideband a dual sideband spectrum represents
-}{
- \sstdescription{
- This attribute indicates whether the \htmlref{DSBSpecFrame}{DSBSpecFrame} currently
- represents its lower or upper sideband, or an offset from the local
- oscillator frequency. When querying the current value, the returned
- string is always one of {\tt{"}}usb{\tt{"}} (for upper sideband), {\tt{"}}lsb{\tt{"}} (for lower
- sideband), or {\tt{"}}lo{\tt{"}} (for offset from the local oscillator frequency).
- When setting a new value, any of the strings {\tt{"}}lsb{\tt{"}}, {\tt{"}}usb{\tt{"}}, {\tt{"}}observed{\tt{"}},
- {\tt{"}}image{\tt{"}} or {\tt{"}}lo{\tt{"}} may be supplied (case insensitive). The {\tt{"}}observed{\tt{"}}
- sideband is which ever sideband (upper or lower) contains the central
- spectral position given by attribute \htmlref{DSBCentre}{DSBCentre}, and the {\tt{"}}image{\tt{"}}
- sideband is the other sideband. It is the sign of the \htmlref{IF}{IF} attribute
- which determines if the observed sideband is the upper or lower
- sideband. The default value for SideBand is the observed sideband.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- DSBSpecFrame
- }{
- All DSBSpecFrames have this attribute.
- }
- }
-}
-\sstroutine{
- SimpFI\sstlabel{SimpFI}
-}{
- Forward-inverse MathMap pairs simplify?
-}{
- \sstdescription{
- This attribute should be set to a non-zero value if applying a
- \htmlref{MathMap}{MathMap}'s forward transformation, followed immediately by the matching
- inverse transformation will always restore the original set of
- coordinates. It indicates that AST may replace such a sequence of
- operations by an identity \htmlref{Mapping}{Mapping} (a \htmlref{UnitMap}{UnitMap}) if it is encountered
- while simplifying a compound Mapping (e.g. using \htmlref{astSimplify}{astSimplify}).
-
- By default, the SimpFI attribute is zero, so that AST will not perform
- this simplification unless you have set SimpFI to indicate that it is
- safe to do so.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- MathMap
- }{
- All MathMaps have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- For simplification to occur, the two MathMaps must be in series and
- be identical (with textually identical transformation
- functions). Functional equivalence is not sufficient.
-
- \sstitem
- The consent of both MathMaps is required before simplification can
- take place. If either has a SimpFI value of zero, then simplification
- will not occur.
-
- \sstitem
- The SimpFI attribute controls simplification only in the case where
- a MathMap's forward transformation is followed by the matching inverse
- transformation. It does not apply if an inverse transformation is
- followed by a forward transformation. This latter case is controlled
- by the \htmlref{SimpIF}{SimpIF} attribute.
-
- \sstitem
- The {\tt{"}}forward{\tt{"}} and {\tt{"}}inverse{\tt{"}} transformations referred to are those
- defined when the MathMap is created (corresponding to the {\tt{"}}fwd{\tt{"}} and
- {\tt{"}}inv{\tt{"}} parameters of its constructor function). If the MathMap is
- inverted (i.e. its \htmlref{Invert}{Invert} attribute is non-zero), then the role of the
- SimpFI and SimpIF attributes will be interchanged.
- }
- }
-}
-\sstroutine{
- SimpIF\sstlabel{SimpIF}
-}{
- Inverse-forward MathMap pairs simplify?
-}{
- \sstdescription{
- This attribute should be set to a non-zero value if applying a
- \htmlref{MathMap}{MathMap}'s inverse transformation, followed immediately by the matching
- forward transformation will always restore the original set of
- coordinates. It indicates that AST may replace such a sequence of
- operations by an identity \htmlref{Mapping}{Mapping} (a \htmlref{UnitMap}{UnitMap}) if it is encountered
- while simplifying a compound Mapping (e.g. using \htmlref{astSimplify}{astSimplify}).
-
- By default, the SimpIF attribute is zero, so that AST will not perform
- this simplification unless you have set SimpIF to indicate that it is
- safe to do so.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- MathMap
- }{
- All MathMaps have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- For simplification to occur, the two MathMaps must be in series and
- be identical (with textually identical transformation
- functions). Functional equivalence is not sufficient.
-
- \sstitem
- The consent of both MathMaps is required before simplification can
- take place. If either has a SimpIF value of zero, then simplification
- will not occur.
-
- \sstitem
- The SimpIF attribute controls simplification only in the case where
- a MathMap's inverse transformation is followed by the matching forward
- transformation. It does not apply if a forward transformation is
- followed by an inverse transformation. This latter case is controlled
- by the \htmlref{SimpFI}{SimpFI} attribute.
-
- \sstitem
- The {\tt{"}}forward{\tt{"}} and {\tt{"}}inverse{\tt{"}} transformations referred to are those
- defined when the MathMap is created (corresponding to the {\tt{"}}fwd{\tt{"}} and
- {\tt{"}}inv{\tt{"}} parameters of its constructor function). If the MathMap is
- inverted (i.e. its \htmlref{Invert}{Invert} attribute is non-zero), then the role of the
- SimpFI and SimpIF attributes will be interchanged.
- }
- }
-}
-\sstroutine{
- Size(element)\sstlabel{Sizeelement}
-}{
- Character size for a Plot element
-}{
- \sstdescription{
- This attribute determines the character size used when drawing
- each element of graphical output produced by a \htmlref{Plot}{Plot}. It takes a
- separate value for each graphical element so that, for instance,
- the setting {\tt{"}}Size(title)=2.0{\tt{"}} causes the Plot title to be drawn
- using twice the default character size.
-
- The range of character sizes available and the appearance of the
- resulting text is determined by the underlying graphics system.
- The default behaviour is for all graphical elements to be drawn
- using the default character size supplied by this graphics
- system.
- }
- \sstattributetype{
- Floating Point.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- For a list of the graphical elements available, see the
- description of the Plot class.
-
- \sstitem
- If no graphical element is specified, (e.g. {\tt{"}}Size{\tt{"}} instead
- of {\tt{"}}Size(title){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will
- affect the attribute value of all graphical elements, while a
- {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}} operation will use just the Size(TextLab)
- value.
- }
- }
-}
-\sstroutine{
- SizeGuess\sstlabel{SizeGuess}
-}{
- The expected size of the KeyMap
-}{
- \sstdescription{
- This is attribute gives an estimate of the number of entries that
- will be stored in the \htmlref{KeyMap}{KeyMap}. It is used to tune the internal
- properties of the KeyMap for speed and efficiency. A larger value
- will result in faster access at the expense of increased memory
- requirements. However if the SizeGuess value is much larger than
- the actual size of the KeyMap, then there will be little, if any,
- speed gained by making the SizeGuess even larger. The default value
- is 300.
-
- The value of this attribute can only be changed if the KeyMap is
- empty. Its value can be set conveniently when creating the KeyMap.
- An error will be reported if an attempt is made to set or clear the
- attribute when the KeyMap contains any entries.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- KeyMap
- }{
- All KeyMaps have this attribute.
- }
- }
-}
-\sstroutine{
- Skip\sstlabel{Skip}
-}{
- Skip irrelevant data?
-}{
- \sstdescription{
- This is a boolean attribute which indicates whether the \htmlref{Object}{Object}
- data being read through a \htmlref{Channel}{Channel} are inter-mixed with other,
- irrelevant, external data.
-
- If Skip is zero (the default), then the source of input data is
- expected to contain descriptions of AST Objects and comments and
- nothing else (if anything else is read, an error will
- result). If Skip is non-zero, then any non-Object data
- encountered between Objects will be ignored and simply skipped
- over in order to reach the next Object.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Channel
- }{
- All Channels have this attribute.
- }
- \sstsubsection{
- \htmlref{FitsChan}{FitsChan}
- }{
- The FitsChan class sets the default value of this attribute
- to 1, so that all irrelevant FITS headers will normally be
- ignored.
- }
- }
-}
-\sstroutine{
- SkyRef(axis)\sstlabel{SkyRefaxis}
-}{
- Position defining the offset coordinate system
-}{
- \sstdescription{
- This attribute allows a \htmlref{SkyFrame}{SkyFrame} to represent offsets, rather than
- absolute axis values, within the coordinate system specified by the
- \htmlref{System}{System} attribute. If supplied, SkyRef should be set to hold the
- longitude and latitude of a point within the coordinate system
- specified by the System attribute. The coordinate system represented
- by the SkyFrame will then be rotated in order to put the specified
- position at either the pole or the origin of the new coordinate system
- (as indicated by the \htmlref{SkyRefIs}{SkyRefIs} attribute). The orientation of the
- modified coordinate system is then controlled using the SkyRefP
- attribute.
-
- If an integer axis index is included in the attribute name (e.g.
- {\tt{"}}SkyRef(1){\tt{"}}) then the attribute value should be supplied as a single
- floating point axis value, in radians, when setting a value for the
- attribute, and will be returned in the same form when getting the value
- of the attribute. In this case the integer axis index should be {\tt{"}}1{\tt{"}}
- or {\tt{"}}2{\tt{"}} (the values to use for longitude and latitue axes are
- given by the \htmlref{LonAxis}{LonAxis} and \htmlref{LatAxis}{LatAxis} attributes).
-
- If no axis index is included in the attribute name (e.g. {\tt{"}}SkyRef{\tt{"}}) then
- the attribute value should be supplied as a character string
- containing two formatted axis values (an axis 1 value followed by a
- comma, followed by an axis 2 value). The same form
- will be used when getting the value of the attribute.
-
- The default values for SkyRef are zero longitude and zero latitude.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- SkyFrame
- }{
- All SkyFrames have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the System attribute of the SkyFrame is changed, any position
- given for SkyRef is transformed into the new System.
-
- \sstitem
- If a value has been assigned to SkyRef attribute, then
- the default values for certain attributes are changed as follows:
- the default axis Labels for the SkyFrame are modified by appending
- {\tt{"}} offset{\tt{"}} to the end, the default axis Symbols for the SkyFrame are
- modified by prepending the character {\tt{"}}D{\tt{"}} to the start, and the
- default title is modified by replacing the projection information by the
- origin information.
- }
- }
- \sstdiytopic{
- Aligning SkyFrames with Offset Coordinate Systems
- }{
- The offset coordinate system within a SkyFrame should normally be
- considered as a superficial {\tt{"}}re-badging{\tt{"}} of the axes of the coordinate
- system specified by the System attribute - it merely provides an
- alternative numerical {\tt{"}}label{\tt{"}} for each position in the System coordinate
- system. The SkyFrame retains full knowledge of the celestial coordinate
- system on which the offset coordinate system is based (given by the
- System attribute). For instance, the SkyFrame retains knowledge of the
- way that one celestial coordinate system may {\tt{"}}drift{\tt{"}} with respect to
- another over time. Normally, if you attempt to align two SkyFrames (e.g.
- using the \htmlref{astConvert}{astConvert} or \htmlref{astFindFrame}{astFindFrame} routine),
- the effect of any offset coordinate system defined in either SkyFrame
- will be removed, resulting in alignment being performed in the
- celestial coordinate system given by the \htmlref{AlignSystem}{AlignSystem} attribute.
- However, by setting the \htmlref{AlignOffset}{AlignOffset} attribute ot a non-zero value, it
- is possible to change this behaviour so that the effect of the offset
- coordinate system is not removed when aligning two SkyFrames.
- }
-}
-\sstroutine{
- SkyRefIs\sstlabel{SkyRefIs}
-}{
- Selects the nature of the offset coordinate system
-}{
- \sstdescription{
- This attribute controls how the values supplied for the SkyRef and
- SkyRefP attributes are used. These three attributes together allow
- a \htmlref{SkyFrame}{SkyFrame} to represent offsets relative to some specified origin
- or pole within the coordinate system specified by the \htmlref{System}{System} attribute,
- rather than absolute axis values. SkyRefIs can take one of the
- case-insensitive values {\tt{"}}Origin{\tt{"}}, {\tt{"}}Pole{\tt{"}} or {\tt{"}}Ignored{\tt{"}}.
-
- If SkyRefIs is set to {\tt{"}}Origin{\tt{"}}, then the coordinate system
- represented by the SkyFrame is modified to put the origin of longitude
- and latitude at the position specified by the SkyRef attribute.
-
- If SkyRefIs is set to {\tt{"}}Pole{\tt{"}}, then the coordinate system represented
- by the SkyFrame is modified to put the north pole at the position
- specified by the SkyRef attribute.
-
- If SkyRefIs is set to {\tt{"}}Ignored{\tt{"}} (the default), then any value set for the
- SkyRef attribute is ignored, and the SkyFrame represents the coordinate
- system specified by the System attribute directly without any rotation.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- SkyFrame
- }{
- All SkyFrames have this attribute.
- }
- }
-}
-\sstroutine{
- SkyRefP(axis)\sstlabel{SkyRefPaxis}
-}{
- Position on primary meridian of offset coordinate system
-}{
- \sstdescription{
- This attribute is used to control the orientation of the offset
- coordinate system defined by attributes SkyRef and \htmlref{SkyRefIs}{SkyRefIs}. If used,
- it should be set to hold the longitude and latitude of a point within
- the coordinate system specified by the \htmlref{System}{System} attribute. The offset
- coordinate system represented by the \htmlref{SkyFrame}{SkyFrame} will then be rotated in
- order to put the position supplied for SkyRefP on the zero longitude
- meridian. This rotation is about an axis from the centre of the
- celestial sphere to the point specified by the SkyRef attribute.
- The default value for SkyRefP is usually the north pole (that is, a
- latitude of $+$90 degrees in the coordinate system specified by the System
- attribute). The exception to this is if the SkyRef attribute is
- itself set to either the north or south pole. In these cases the
- default for SkyRefP is the origin (that is, a (0,0) in the coordinate
- system specified by the System attribute).
-
- If an integer axis index is included in the attribute name (e.g.
- {\tt{"}}SkyRefP(1){\tt{"}}) then the attribute value should be supplied as a single
- floating point axis value, in radians, when setting a value for the
- attribute, and will be returned in the same form when getting the value
- of the attribute. In this case the integer axis index should be {\tt{"}}1{\tt{"}}
- or {\tt{"}}2{\tt{"}} (the values to use for longitude and latitue axes are
- given by the \htmlref{LonAxis}{LonAxis} and \htmlref{LatAxis}{LatAxis} attributes).
-
- If no axis index is included in the attribute name (e.g. {\tt{"}}SkyRefP{\tt{"}}) then
- the attribute value should be supplied as a character string
- containing two formatted axis values (an axis 1 value followed by a
- comma, followed by an axis 2 value). The same form
- will be used when getting the value of the attribute.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- SkyFrame
- }{
- All SkyFrames have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If the position given by the SkyRef attribute defines the origin
- of the offset coordinate system (that is, if the SkyRefIs attribute
- is set to {\tt{"}}origin{\tt{"}}), then there will in general be two orientations
- which will put the supplied SkyRefP position on the zero longitude
- meridian. The orientation which is actually used is the one which
- gives the SkyRefP position a positive latitude in the offset coordinate
- system (the other possible orientation would give the SkyRefP position
- a negative latitude).
-
- \sstitem
- An error will be reported if an attempt is made to use a
- SkyRefP value which is co-incident with SkyRef or with the point
- diametrically opposite to SkyRef on the celestial sphere. The
- reporting of this error is deferred until the SkyRef and SkyRefP
- attribute values are used within a calculation.
-
- \sstitem
- If the System attribute of the SkyFrame is changed, any position
- given for SkyRefP is transformed into the new System.
- }
- }
-}
-\sstroutine{
- SourceSys\sstlabel{SourceSys}
-}{
- Spectral system in which the source velocity is stored
-}{
- \sstdescription{
- This attribute identifies the spectral system in which the
- \htmlref{SourceVel}{SourceVel} attribute value (the source velocity) is supplied and
- returned. It can be one of the following:
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}VRAD{\tt{"}} or {\tt{"}}VRADIO{\tt{"}}: Radio velocity (km/s)
-
- \sstitem
- {\tt{"}}VOPT{\tt{"}} or {\tt{"}}VOPTICAL{\tt{"}}: Optical velocity (km/s)
-
- \sstitem
- {\tt{"}}ZOPT{\tt{"}} or {\tt{"}}REDSHIFT{\tt{"}}: Redshift (dimensionless)
-
- \sstitem
- {\tt{"}}BETA{\tt{"}}: Beta factor (dimensionless)
-
- \sstitem
- {\tt{"}}VELO{\tt{"}} or {\tt{"}}VREL{\tt{"}}: Apparent radial ({\tt{"}}relativistic{\tt{"}}) velocity (km/s)
-
- }
- When setting a new value for the SourceVel attribute, the source
- velocity should be supplied in the spectral system indicated
- by this attribute. Likewise, when getting the value of the SourceVel
- attribute, the velocity will be returned in this spectral system.
-
- If the value of SourceSys is changed, the value stored for SourceVel
- will be converted from the old to the new spectral systems.
-
- The default value is {\tt{"}}VELO{\tt{"}} (apparent radial velocity).
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{SpecFrame}{SpecFrame}
- }{
- All SpecFrames have this attribute.
- }
- }
-}
-\sstroutine{
- SourceVRF\sstlabel{SourceVRF}
-}{
- Rest frame in which the source velocity is stored
-}{
- \sstdescription{
- This attribute identifies the rest frame in which the source
- velocity or redshift is stored (the source velocity or redshift is
- accessed using attribute \htmlref{SourceVel}{SourceVel}). When setting a new value for the
- SourceVel attribute, the source velocity or redshift should be supplied
- in the rest frame indicated by this attribute. Likewise, when getting
- the value of the SourceVel attribute, the velocity or redshift will be
- returned in this rest frame.
-
- If the value of SourceVRF is changed, the value stored for SourceVel
- will be converted from the old to the new rest frame.
-
- The values which can be supplied are the same as for the \htmlref{StdOfRest}{StdOfRest}
- attribute (except that SourceVRF cannot be set to {\tt{"}}Source{\tt{"}}). The
- default value is {\tt{"}}Helio{\tt{"}}.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{SpecFrame}{SpecFrame}
- }{
- All SpecFrames have this attribute.
- }
- }
-}
-\sstroutine{
- SourceVel\sstlabel{SourceVel}
-}{
- The source velocity
-}{
- \sstdescription{
- This attribute (together with \htmlref{SourceSys}{SourceSys}, \htmlref{SourceVRF}{SourceVRF}, \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec})
- defines the {\tt{"}}Source{\tt{"}} standard of rest (see attribute \htmlref{StdOfRest}{StdOfRest}). This is
- a rest frame which is moving towards the position given by RefRA and
- RefDec at a velocity given by SourceVel. A positive value means
- the source is moving away from the observer. When a new value is
- assigned to this attribute, the supplied value is assumed to refer
- to the spectral system specified by the SourceSys attribute. For
- instance, the SourceVel value may be supplied as a radio velocity, a
- redshift, a beta factor, etc. Similarly, when the current value of
- the SourceVel attribute is obtained, the returned value will refer
- to the spectral system specified by the SourceSys value. If the
- SourceSys value is changed, any value previously stored for the SourceVel
- attribute will be changed automatically from the old spectral system
- to the new spectral system.
-
- When setting a value for SourceVel, the value should be supplied in the
- rest frame specified by the SourceVRF attribute. Likewise, when getting
- the value of SourceVel, it will be returned in the rest frame specified
- by the SourceVRF attribute.
-
- The default SourceVel value is zero.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{SpecFrame}{SpecFrame}
- }{
- All SpecFrames have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- It is important to set an appropriate value for SourceVRF and
- SourceSys before setting a value for SourceVel. If a new value is later
- set for SourceVRF or SourceSys, the value stored for SourceVel will
- simultaneously be changed to the new standard of rest or spectral
- system.
- }
- }
-}
-\sstroutine{
- SpecOrigin\sstlabel{SpecOrigin}
-}{
- The zero point for SpecFrame axis values
-}{
- \sstdescription{
- This specifies the origin from which all spectral values are measured.
- The default value (zero) results in the \htmlref{SpecFrame}{SpecFrame} describing
- absolute spectral values in the system given by the \htmlref{System}{System} attribute
- (e.g. frequency, velocity, etc). If a SpecFrame is to be used to
- describe offset from some origin, the SpecOrigin attribute
- should be set to hold the required origin value. The SpecOrigin value
- stored inside the SpecFrame structure is modified whenever SpecFrame
- attribute values are changed so that it refers to the original spectral
- position.
-
- When setting a new value for this attribute, the supplied value is assumed
- to be in the system, units and standard of rest described by the SpecFrame.
- Likewise, when getting the value of this attribute, the value is returned
- in the system, units and standard of rest described by the SpecFrame. If
- any of these attributes are changed, then any previously stored SpecOrigin
- value will also be changed so that refers to the new system, units or
- standard of rest.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- SpecFrame
- }{
- All SpecFrames have this attribute.
- }
- }
-}
-\sstroutine{
- SpecVal\sstlabel{SpecVal}
-}{
- The spectral position at which flux values are measured
-}{
- \sstdescription{
- This attribute specifies the spectral position (frequency, wavelength,
- etc.), at which the values described by the \htmlref{FluxFrame}{FluxFrame} are measured.
- It is used when determining the \htmlref{Mapping}{Mapping} between between FluxFrames.
-
- The default value and spectral system used for this attribute are
- both specified when the FluxFrame is created.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- FluxFrame
- }{
- All FluxFrames have this attribute.
- }
- }
-}
-\sstroutine{
- StcsArea\sstlabel{StcsArea}
-}{
- Return the CoordinateArea component when reading an STC-S document?
-}{
- \sstdescription{
- This is a boolean attribute which controls what is returned
- by the
- \htmlref{astRead}{astRead}
- function when it is used to read from an \htmlref{StcsChan}{StcsChan}.
- If StcsArea is set non-zero (the default), then a \htmlref{Region}{Region}
- representing the STC CoordinateArea will be returned by
- astRead.
- If StcsArea is set to zero, then the STC CoordinateArea
- will not be returned.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- StcsChan
- }{
- All StcsChans have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Other attributes such as \htmlref{StcsCoords}{StcsCoords} and \htmlref{StcsProps}{StcsProps} can be used to
- specify other Objects to be returned by
- astRead.
- If more than one of these attributes is set non-zero, then the
- actual \htmlref{Object}{Object} returned by
- astRead
- will be a \htmlref{KeyMap}{KeyMap}, containing the requested Objects. In this
- case, the Region representing the STC CoordinateArea will be
- stored in the returned KeyMap using the key {\tt{"}}AREA{\tt{"}}. If StcsArea
- is the only attribute to be set non-zero, then the Object returned by
- astRead
- will be the CoordinateArea Region itself.
-
- \sstitem
- The class of Region used to represent the CoordinateArea for each
- STC-S sub-phrase is determined by the first word in the
- sub-phrase (the {\tt{"}}sub-phrase identifier{\tt{"}}). The individual sub-phrase
- Regions are combined into a single \htmlref{Prism}{Prism}, which is then simplified
- using \htmlref{astSimplify}{astSimplify}
- to form the returned region.
-
- \sstitem
- Sub-phrases that represent a single value ( that is, have
- identifiers {\tt{"}}Time{\tt{"}}, {\tt{"}}Position{\tt{"}}, {\tt{"}}Spectral{\tt{"}} or {\tt{"}}Redshift{\tt{"}} ) are
- considered to be be part of the STC CoordinateArea component.
-
- \sstitem
- The \htmlref{TimeFrame}{TimeFrame} used to represent a time STC-S sub-phrase will have
- its \htmlref{TimeOrigin}{TimeOrigin} attribute set to the sub-phrase start time. If no
- start time is specified by the sub-phrase, then the stop time will be
- used instead. If no stop time is specified by the sub-phrase, then
- the single time value specified in the sub-phrase will be used
- instead. Subsequently clearing the TimeOrigin attribute (or setting
- its value to zero) will cause the TimeFrame to reprsent absolute times.
-
- \sstitem
- The \htmlref{Epoch}{Epoch} attribute for the returned Region is set in the same
- way as the TimeOrigin attribute (see above).
- }
- }
-}
-\sstroutine{
- StcsCoords\sstlabel{StcsCoords}
-}{
- Return the Coordinates component when reading an STC-S document?
-}{
- \sstdescription{
- This is a boolean attribute which controls what is returned
- by the
- \htmlref{astRead}{astRead}
- function when it is used to read from an \htmlref{StcsChan}{StcsChan}.
- If StcsCoords is set non-zero, then a \htmlref{PointList}{PointList}
- representing the STC Coordinates will be returned by
- astRead.
- If StcsCoords is set to zero (the default), then the STC
- Coordinates will not be returned.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- StcsChan
- }{
- All StcsChans have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Other attributes such as \htmlref{StcsArea}{StcsArea} and \htmlref{StcsProps}{StcsProps} can be used to
- specify other Objects to be returned by
- astRead.
- If more than one of these attributes is set non-zero, then the
- actual \htmlref{Object}{Object} returned by
- astRead
- will be a \htmlref{KeyMap}{KeyMap}, containing the requested Objects. In this
- case, the PointList representing the STC Coordinates will be
- stored in the returned KeyMap using the key {\tt{"}}COORDS{\tt{"}}. If StcsCoords
- is the only attribute to be set non-zero, then the Object returned by
- astRead
- will be the Coordinates PointList itself.
-
- \sstitem
- The Coordinates component is specified by the additional axis
- values embedded within the body of each STC-S sub-phrase that
- represents an extended area. Sub-phrases that represent a single
- value ( that is, have identifiers {\tt{"}}Time{\tt{"}}, {\tt{"}}Position{\tt{"}}, {\tt{"}}Spectral{\tt{"}}
- or {\tt{"}}Redshift{\tt{"}} ) are not considered to be be part of the STC
- Coordinates component.
-
- \sstitem
- If the STC-S documents does not contain a Coordinates component,
- then a NULL object pointer
- will be returned by
- astRead
- if the Coordinates component is the only object being returned. If
- other objects are also being returned (see attributes StcsProps and
- StcsArea), then the returned KeyMap will contain a {\tt{"}}COORDS{\tt{"}} key
- only if the Coordinates component is read succesfully.
-
- \sstitem
- The \htmlref{TimeFrame}{TimeFrame} used to represent a time STC-S sub-phrase will have
- its \htmlref{TimeOrigin}{TimeOrigin} attribute set to the sub-phrase start time. If no
- start time is specified by the sub-phrase, then the stop time will be
- used instead. If no stop time is specified by the sub-phrase, then
- the single time value specified in the sub-phrase will be used
- instead. Subsequently clearing the TimeOrigin attribute (or setting
- its value to zero) will cause the TimeFrame to reprsent absolute times.
-
- \sstitem
- The \htmlref{Epoch}{Epoch} attribute for the returned \htmlref{Region}{Region} is set in the same
- way as the TimeOrigin attribute (see above).
- }
- }
-}
-\sstroutine{
- StcsIndent\sstlabel{StcsIndent}
-}{
- Controls indentation and line splitting of output text
-}{
- \sstdescription{
- This attribute controls how the STC-S text is written out to the
- sink function when writing an AST object to an \htmlref{StcsChan}{StcsChan}. If it is
- zero (the default) the entire STC-S description is written out by a
- single invocation of the sink function. The text supplied to the
- sink function will not contain any linefeed characters, and each
- pair of adjacent words will be separated by a single space. The
- text may thus be arbitrarily large and the \htmlref{StcsLength}{StcsLength} attribute is
- ignored.
-
- If StcsIndent is non-zero, then the text is written out via
- multiple calls to the sink function, each call corresponding to a
- single {\tt{"}}line{\tt{"}} of text (although no line feed characters will be
- inserted by AST). The complete STC-S description is broken into
- lines so that:
-
- \sstitemlist{
-
- \sstitem
- the line length specified by attribute StcsLength is not exceeded
-
- \sstitem
- each sub-phrase (time, space, etc.) starts on a new line
-
- \sstitem
- each argument in a compound spatial region starts on a new line
-
- }
- If this causes a sub-phrase to extend to two or more lines, then the
- second and subsequent lines will be indented by three spaces compared
- to the first line. In addition, lines within a compound spatial region
- will have extra indentation to highlight the nesting produced by the
- parentheses. Each new level of nesting will be indented by a further
- three spaces.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- StcsChan
- }{
- All StcsChans have this attribute.
- }
- }
-}
-\sstroutine{
- StcsLength\sstlabel{StcsLength}
-}{
- Controls output line length
-}{
- \sstdescription{
- This attribute specifies the maximum length to use when writing out
- text through the sink function supplied when the \htmlref{StcsChan}{StcsChan} was created.
- It is ignored if the \htmlref{StcsIndent}{StcsIndent} attribute is zero (in which case
- the text supplied to the sink function can be of any length). The
- default value is 70.
-
- The number of characters in each string written out through the sink
- function will not usually be greater than the value of this attribute
- (but may be less). However, if any single word in the STC-S
- description exceeds the specified length, then the word will be
- written out as a single line.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- StcsChan
- }{
- All StcsChans have this attribute.
- }
- }
-}
-\sstroutine{
- StcsProps\sstlabel{StcsProps}
-}{
- Return all properties when reading an STC-S document?
-}{
- \sstdescription{
- This is a boolean attribute which controls what is returned
- by the
- \htmlref{astRead}{astRead}
- function when it is used to read from an \htmlref{StcsChan}{StcsChan}.
- If StcsProps is set non-zero, then a \htmlref{KeyMap}{KeyMap} containing all the
- properties read from the STC-S document will be returned by
- astRead.
- If StcsProps is set to zero (the default), then the properties
- will not be returned.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- StcsChan
- }{
- All StcsChans have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- Other attributes such as \htmlref{StcsCoords}{StcsCoords} and \htmlref{StcsArea}{StcsArea} can be used to
- specify other Objects to be returned by
- astRead.
- If more than one of these attributes is set non-zero, then the
- actual \htmlref{Object}{Object} returned by
- astRead
- will be a KeyMap containing the requested Objects. In this
- case, the properties KeyMap will be stored in the returned KeyMap
- using the key {\tt{"}}PROPS{\tt{"}}. If StcsProps is the only attribute to be
- set non-zero, then the Object returned by
- astRead
- will be the properties KeyMap itself.
-
- \sstitem
- The KeyMap containing the properties will have entries for one or
- more of the following keys: {\tt{"}}TIME\_PROPS{\tt{"}}, {\tt{"}}SPACE\_PROPS{\tt{"}}, {\tt{"}}SPECTRAL\_PROPS{\tt{"}}
- and {\tt{"}}REDSHIFT\_PROPS{\tt{"}}. Each of these entries will be another KeyMap
- containing the properties of the corresponding STC-S sub-phrase.
- }
- }
-}
-\sstroutine{
- StdOfRest\sstlabel{StdOfRest}
-}{
- Standard of rest
-}{
- \sstdescription{
- This attribute identifies the standard of rest to which the spectral
- axis values of a \htmlref{SpecFrame}{SpecFrame} refer, and may take any of the values
- listed in the {\tt{"}}Standards of Rest{\tt{"}} section (below).
-
- The default StdOfRest value is {\tt{"}}Helio{\tt{"}}.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- SpecFrame
- }{
- All SpecFrames have this attribute.
- }
- }
- \sstdiytopic{
- Standards of Rest
- }{
- The SpecFrame class supports the following StdOfRest values (all are
- case-insensitive):
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}Topocentric{\tt{"}}, {\tt{"}}Topocent{\tt{"}} or {\tt{"}}Topo{\tt{"}}: The observers rest-frame (assumed
- to be on the surface of the earth). Spectra recorded in this standard of
- rest suffer a Doppler shift which varies over the course of a day
- because of the rotation of the observer around the axis of the earth.
- This standard of rest must be qualified using the \htmlref{ObsLat}{ObsLat}, \htmlref{ObsLon}{ObsLon},
- \htmlref{ObsAlt}{ObsAlt}, \htmlref{Epoch}{Epoch}, \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec} attributes.
-
- \sstitem
- {\tt{"}}Geocentric{\tt{"}}, {\tt{"}}Geocentr{\tt{"}} or {\tt{"}}Geo{\tt{"}}: The rest-frame of the earth centre.
- Spectra recorded in this standard of rest suffer a Doppler shift which
- varies over the course of a year because of the rotation of the earth
- around the Sun. This standard of rest must be qualified using the Epoch,
- RefRA and RefDec attributes.
-
- \sstitem
- {\tt{"}}Barycentric{\tt{"}}, {\tt{"}}Barycent{\tt{"}} or {\tt{"}}Bary{\tt{"}}: The rest-frame of the solar-system
- barycentre. Spectra recorded in this standard of rest suffer a Doppler
- shift which depends both on the velocity of the Sun through the Local
- Standard of Rest, and on the movement of the planets through the solar
- system. This standard of rest must be qualified using the Epoch, RefRA
- and RefDec attributes.
-
- \sstitem
- {\tt{"}}Heliocentric{\tt{"}}, {\tt{"}}Heliocen{\tt{"}} or {\tt{"}}Helio{\tt{"}}: The rest-frame of the Sun.
- Spectra recorded in this standard of rest suffer a Doppler shift which
- depends on the velocity of the Sun through the Local Standard of Rest.
- This standard of rest must be qualified using the RefRA and RefDec
- attributes.
-
- \sstitem
- {\tt{"}}LSRK{\tt{"}}, {\tt{"}}LSR{\tt{"}}: The rest-frame of the kinematical Local Standard of
- Rest. Spectra recorded in this standard of rest suffer a Doppler shift
- which depends on the velocity of the kinematical Local Standard of Rest
- through the galaxy. This standard of rest must be qualified using the
- RefRA and RefDec attributes.
-
- \sstitem
- {\tt{"}}LSRD{\tt{"}}: The rest-frame of the dynamical Local Standard of Rest. Spectra
- recorded in this standard of rest suffer a Doppler shift which depends
- on the velocity of the dynamical Local Standard of Rest through the
- galaxy. This standard of rest must be qualified using the RefRA and
- RefDec attributes.
-
- \sstitem
- {\tt{"}}Galactic{\tt{"}}, {\tt{"}}Galactoc{\tt{"}} or {\tt{"}}Gal{\tt{"}}: The rest-frame of the galactic centre.
- Spectra recorded in this standard of rest suffer a Doppler shift which
- depends on the velocity of the galactic centre through the local group.
- This standard of rest must be qualified using the RefRA and RefDec
- attributes.
-
- \sstitem
- {\tt{"}}Local\_group{\tt{"}}, {\tt{"}}Localgrp{\tt{"}} or {\tt{"}}LG{\tt{"}}: The rest-frame of the local group.
- This standard of rest must be qualified using the RefRA and RefDec
- attributes.
-
- \sstitem
- {\tt{"}}Source{\tt{"}}, or {\tt{"}}src{\tt{"}}: The rest-frame of the source. This standard of
- rest must be qualified using the RefRA, RefDec and \htmlref{SourceVel}{SourceVel} attributes.
-
- }
- Where more than one alternative \htmlref{System}{System} value is shown above, the
- first of these will be returned when an enquiry is made.
- }
-}
-\sstroutine{
- Strict\sstlabel{Strict}
-}{
- Report an error if any unexpeted data items are found?
-}{
- \sstdescription{
- This is a boolean attribute which indicates whether a warning
- rather than an error should be issed for insignificant conversion
- problems. If it is set non-zero, then fatal errors are issued
- instead of warnings, resulting in the
- AST error status being set.
- If Strict is zero (the default), then execution continues after minor
- conversion problems, and a warning message is added to the \htmlref{Channel}{Channel}
- structure. Such messages can be retrieved using the
- \htmlref{astWarnings}{astWarnings}
- function.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Channel
- }{
- All Channels have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This attribute was introduced in AST version 5.0. Prior to this
- version of AST unexpected data items read by a basic Channel always
- caused an error to be reported. So applications linked against
- versions of AST prior to version 5.0 may not be able to read \htmlref{Object}{Object}
- descriptions created by later versions of AST, if the Object's class
- description has changed.
- }
- }
-}
-\sstroutine{
- Style(element)\sstlabel{Styleelement}
-}{
- Line style for a Plot element
-}{
- \sstdescription{
- This attribute determines the line style used when drawing each
- element of graphical output produced by a \htmlref{Plot}{Plot}. It takes a
- separate value for each graphical element so that, for instance,
- the setting {\tt{"}}Style(border)=2{\tt{"}} causes the Plot border to be drawn
- using line style 2 (which might result in, say, a dashed line).
-
- The range of integer line styles available and their appearance
- is determined by the underlying graphics system. The default
- behaviour is for all graphical elements to be drawn using the
- default line style supplied by this graphics system (normally,
- this is likely to give a solid line).
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- For a list of the graphical elements available, see the
- description of the Plot class.
-
- \sstitem
- If no graphical element is specified, (e.g. {\tt{"}}Style{\tt{"}} instead of
- {\tt{"}}Style(border){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
- the attribute value of all graphical elements, while a {\tt{"}}get{\tt{"}} or
- {\tt{"}}test{\tt{"}} operation will use just the Style(\htmlref{Border}{Border}) value.
- }
- }
-}
-\sstroutine{
- Symbol(axis)\sstlabel{Symbolaxis}
-}{
- Axis symbol
-}{
- \sstdescription{
- This attribute specifies a short-form symbol to be used to
- represent coordinate values for a particular axis of a
- \htmlref{Frame}{Frame}. This might be used (e.g.) in algebraic expressions where
- a full description of the axis would be inappropriate. Examples
- include {\tt{"}}RA{\tt{"}} and {\tt{"}}Dec{\tt{"}} (for Right Ascension and Declination).
-
- If a Symbol value has not been set for a Frame axis, then a
- suitable default is supplied.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The default Symbol value supplied by the Frame class is the
- string {\tt{"}}$<$\htmlref{Domain}{Domain}$>$$<$n$>${\tt{"}}, where $<$n$>$ is 1, 2, etc. for successive
- axes, and $<$Domain$>$ is the value of the Frame's Domain
- attribute (truncated if necessary so that the final string
- does not exceed 15 characters). If no Domain value has been
- set, {\tt{"}}x{\tt{"}} is used as the $<$Domain$>$ value in constructing this
- default string.
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- The SkyFrame class re-defines the default Symbol value
- (e.g. to {\tt{"}}RA{\tt{"}} or {\tt{"}}Dec{\tt{"}}) as appropriate for the particular
- celestial coordinate system being represented.
- }
- \sstsubsection{
- \htmlref{TimeFrame}{TimeFrame}
- }{
- The TimeFrame class re-defines the default Symbol value as
- appropriate for the particular time system being represented.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Symbol attribute of a FrameSet axis is the same as that
- of its current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When specifying this attribute by name, it should be
- subscripted with the number of the Frame axis to which it
- applies.
- }
- }
-}
-\sstroutine{
- System\sstlabel{System}
-}{
- Coordinate system used to describe positions within the domain
-}{
- \sstdescription{
- In general it is possible for positions within a given physical
- domain to be described using one of several different coordinate
- systems. For instance, the \htmlref{SkyFrame}{SkyFrame} class can use galactic
- coordinates, equatorial coordinates, etc, to describe positions on
- the sky. As another example, the \htmlref{SpecFrame}{SpecFrame} class can use frequency,
- wavelength, velocity, etc, to describe a position within an
- electromagnetic spectrum. The System attribute identifies the particular
- coordinate system represented by a \htmlref{Frame}{Frame}. Each class of Frame
- defines a set of acceptable values for this attribute, as listed
- below (all are case insensitive). Where more than one alternative
- System value is shown, the first of will be returned when an
- enquiry is made.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The System attribute for a basic Frame always equals {\tt{"}}Cartesian{\tt{"}},
- and may not be altered.
- }
- \sstsubsection{
- \htmlref{CmpFrame}{CmpFrame}
- }{
- The System attribute for a CmpFrame always equals {\tt{"}}Compound{\tt{"}},
- and may not be altered. In addition, the CmpFrame class allows
- the System attribute to be referenced for a component Frame by
- including the index of an axis within the required component
- Frame. For instance, {\tt{"}}System(3){\tt{"}} refers to the System attribute
- of the component Frame which includes axis 3 of the CmpFrame.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The System attribute of a FrameSet is the same as that of its
- current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- \sstsubsection{
- SkyFrame
- }{
- The SkyFrame class supports the following System values and
- associated celestial coordinate systems:
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}AZEL{\tt{"}}: Horizon coordinates. The longitude axis is azimuth
- such that geographic north has an azimuth of zero and geographic
- east has an azimuth of $+$PI/2 radians. The zenith has elevation
- $+$PI/2. When converting to and from other celestial coordinate
- systems, no corrections are applied for atmospheric refraction
- or polar motion (however, a correction for diurnal aberattion is
- applied). Note, unlike most other
- celestial coordinate systems, this system is right handed. Also,
- unlike other SkyFrame systems, the AzEl system is sensitive to
- the timescale in which the \htmlref{Epoch}{Epoch} value is supplied. This is
- because of the gross diurnal rotation which this system undergoes,
- causing a small change in time to translate to a large rotation.
- When converting to or from an AzEl system, the Epoch value for
- both source and destination SkyFrames should be supplied in the
- TDB timescale. The difference between TDB and TT is between 1
- and 2 milliseconds, and so a TT value can usually be supplied in
- place of a TDB value. The TT timescale is related to TAI via
- TT = TAI $+$ 32.184 seconds.
-
- \sstitem
- {\tt{"}}ECLIPTIC{\tt{"}}: Ecliptic coordinates (IAU 1980), referred to the
- ecliptic and mean equinox specified by the qualifying \htmlref{Equinox}{Equinox}
- value.
-
- \sstitem
- {\tt{"}}FK4{\tt{"}}: The old FK4 (barycentric) equatorial coordinate system,
- which should be qualified by an Equinox value. The underlying
- model on which this is based is non-inertial and rotates slowly
- with time, so for accurate work FK4 coordinate systems should
- also be qualified by an Epoch value.
-
- \sstitem
- {\tt{"}}FK4-NO-E{\tt{"}} or {\tt{"}}FK4\_NO\_E{\tt{"}}: The old FK4 (barycentric) equatorial
- system but without the {\tt{"}}E-terms of aberration{\tt{"}} (e.g. some radio
- catalogues). This coordinate system should also be qualified by
- both an Equinox and an Epoch value.
-
- \sstitem
- {\tt{"}}FK5{\tt{"}} or {\tt{"}}EQUATORIAL{\tt{"}}: The modern FK5 (barycentric) equatorial
- coordinate system. This should be qualified by an Equinox value.
-
- \sstitem
- {\tt{"}}GALACTIC{\tt{"}}: Galactic coordinates (IAU 1958).
-
- \sstitem
- {\tt{"}}GAPPT{\tt{"}}, {\tt{"}}GEOCENTRIC{\tt{"}} or {\tt{"}}APPARENT{\tt{"}}: The geocentric apparent
- equatorial coordinate system, which gives the apparent positions
- of sources relative to the true plane of the Earth's equator and
- the equinox (the coordinate origin) at a time specified by the
- qualifying Epoch value. (Note that no Equinox is needed to
- qualify this coordinate system because no model {\tt{"}}mean equinox{\tt{"}}
- is involved.) These coordinates give the apparent right
- ascension and declination of a source for a specified date of
- observation, and therefore form an approximate basis for
- pointing a telescope. Note, however, that they are applicable to
- a fictitious observer at the Earth's centre, and therefore
- ignore such effects as atmospheric refraction and the (normally
- much smaller) aberration of light due to the rotational velocity
- of the Earth's surface. Geocentric apparent coordinates are
- derived from the standard FK5 (J2000.0) barycentric coordinates
- by taking account of the gravitational deflection of light by
- the Sun (usually small), the aberration of light caused by the
- motion of the Earth's centre with respect to the barycentre
- (larger), and the precession and nutation of the Earth's spin
- axis (normally larger still).
-
- \sstitem
- {\tt{"}}HELIOECLIPTIC{\tt{"}}: Ecliptic coordinates (IAU 1980), referred to the
- ecliptic and mean equinox of J2000.0, in which an offset is added to
- the longitude value which results in the centre of the sun being at
- zero longitude at the date given by the Epoch attribute. Attempts to
- set a value for the Equinox attribute will be ignored, since this
- system is always referred to J2000.0.
-
- \sstitem
- {\tt{"}}ICRS{\tt{"}}: The Internation Celestial Reference System, realised
- through the Hipparcos catalogue. Whilst not an equatorial system
- by definition, the ICRS is very close to the FK5 (J2000) system
- and is usually treated as an equatorial system. The distinction
- between ICRS and FK5 (J2000) only becomes important when accuracies
- of 50 milli-arcseconds or better are required. ICRS need not be
- qualified by an Equinox value.
-
- \sstitem
- {\tt{"}}J2000{\tt{"}}: An equatorial coordinate system based on the mean
- dynamical equator and equinox of the J2000 epoch. The dynamical
- equator and equinox differ slightly from those used by the FK5
- model, and so a {\tt{"}}J2000{\tt{"}} SkyFrame will differ slightly from an
- {\tt{"}}FK5(Equinox=J2000){\tt{"}} SkyFrame. The J2000 System need not be
- qualified by an Equinox value
-
- \sstitem
- {\tt{"}}SUPERGALACTIC{\tt{"}}: De Vaucouleurs Supergalactic coordinates.
-
- \sstitem
- {\tt{"}}UNKNOWN{\tt{"}}: Any other general spherical coordinate system. No
- \htmlref{Mapping}{Mapping} can be created between a pair of SkyFrames if either of the
- SkyFrames has System set to {\tt{"}}Unknown{\tt{"}}.
-
- }
- Currently, the default System value is {\tt{"}}ICRS{\tt{"}}. However, this
- default may change in future as new astrometric standards
- evolve. The intention is to track the most modern appropriate
- standard. For this reason, you should use the default only if
- this is what you intend (and can tolerate any associated slight
- change in future). If you intend to use the ICRS system
- indefinitely, then you should specify it explicitly.
- }
- \sstsubsection{
- SpecFrame
- }{
- The SpecFrame class supports the following System values and
- associated spectral coordinate systems (the default is {\tt{"}}WAVE{\tt{"}} -
- wavelength). They are all defined in FITS-WCS paper III:
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}FREQ{\tt{"}}: Frequency (GHz)
-
- \sstitem
- {\tt{"}}ENER{\tt{"}} or {\tt{"}}ENERGY{\tt{"}}: Energy (J)
-
- \sstitem
- {\tt{"}}WAVN{\tt{"}} or {\tt{"}}WAVENUM{\tt{"}}: Wave-number (1/m)
-
- \sstitem
- {\tt{"}}WAVE{\tt{"}} or {\tt{"}}WAVELEN{\tt{"}}: Vacuum wave-length (Angstrom)
-
- \sstitem
- {\tt{"}}AWAV{\tt{"}} or {\tt{"}}AIRWAVE{\tt{"}}: Wave-length in air (Angstrom)
-
- \sstitem
- {\tt{"}}VRAD{\tt{"}} or {\tt{"}}VRADIO{\tt{"}}: Radio velocity (km/s)
-
- \sstitem
- {\tt{"}}VOPT{\tt{"}} or {\tt{"}}VOPTICAL{\tt{"}}: Optical velocity (km/s)
-
- \sstitem
- {\tt{"}}ZOPT{\tt{"}} or {\tt{"}}REDSHIFT{\tt{"}}: Redshift (dimensionless)
-
- \sstitem
- {\tt{"}}BETA{\tt{"}}: Beta factor (dimensionless)
-
- \sstitem
- {\tt{"}}VELO{\tt{"}} or {\tt{"}}VREL{\tt{"}}: Apparent radial ({\tt{"}}relativistic{\tt{"}}) velocity (km/s)
-
- }
- The default value for the Unit attribute for each system is shown
- in parentheses. Note that the default value for the ActiveUnit flag
- is non-zero
- for a SpecFrame, meaning that changes to the Unit attribute for
- a SpecFrame will result in the SpecFrame being re-mapped within
- its enclosing FrameSet in order to reflect the change in units
- (see \htmlref{astSetActiveUnit}{astSetActiveUnit} function for further information).
- }
- \sstsubsection{
- \htmlref{TimeFrame}{TimeFrame}
- }{
- The TimeFrame class supports the following System values and
- associated coordinate systems (the default is {\tt{"}}MJD{\tt{"}}):
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}MJD{\tt{"}}: Modified Julian Date (d)
-
- \sstitem
- {\tt{"}}JD{\tt{"}}: Julian Date (d)
-
- \sstitem
- {\tt{"}}JEPOCH{\tt{"}}: Julian epoch (yr)
-
- \sstitem
- {\tt{"}}BEPOCH{\tt{"}}: Besselian (yr)
-
- }
- The default value for the Unit attribute for each system is shown
- in parentheses. Strictly, these systems should not allow changes
- to be made to the units. For instance, the usual definition of
- {\tt{"}}MJD{\tt{"}} and {\tt{"}}JD{\tt{"}} include the statement that the values will be in
- units of days. However, AST does allow the use of other units
- with all the above supported systems (except BEPOCH), on the
- understanding that conversion to the {\tt{"}}correct{\tt{"}} units involves
- nothing more than a simple scaling (1 yr = 365.25 d, 1 d = 24 h,
- 1 h = 60 min, 1 min = 60 s). Besselian epoch values are defined
- in terms of tropical years of 365.2422 days, rather than the
- usual Julian year of 365.25 days. Therefore, to avoid any
- confusion, the Unit attribute is automatically cleared to {\tt{"}}yr{\tt{"}} when
- a System value of BEPOCH System is selected, and an error is
- reported if any attempt is subsequently made to change the Unit
- attribute.
-
- Note that the default value for the ActiveUnit flag
- is non-zero
- for a TimeFrame, meaning that changes to the Unit attribute for
- a TimeFrame will result in the TimeFrame being re-mapped within
- its enclosing FrameSet in order to reflect the change in units
- (see astSetActiveUnit function for further information).
- }
- \sstsubsection{
- \htmlref{FluxFrame}{FluxFrame}
- }{
- The FluxFrame class supports the following System values and
- associated systems for measuring observed value:
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}FLXDN{\tt{"}}: Flux per unit frequency (W/m$\wedge$2/Hz)
-
- \sstitem
- {\tt{"}}FLXDNW{\tt{"}}: Flux per unit wavelength (W/m$\wedge$2/Angstrom)
-
- \sstitem
- {\tt{"}}SFCBR{\tt{"}}: Surface brightness in frequency units (W/m$\wedge$2/Hz/arcmin$*$$*$2)
-
- \sstitem
- {\tt{"}}SFCBRW{\tt{"}}: Surface brightness in wavelength units (W/m$\wedge$2/Angstrom/arcmin$*$$*$2)
-
- }
- The above lists specified the default units for each System. If an
- explicit value is set for the Unit attribute but no value is set
- for System, then the default System value is determined by the Unit
- string (if the units are not appropriate for describing any of the
- supported Systems then an error will be reported when an attempt is
- made to access the System value). If no value has been specified for
- either Unit or System, then System=FLXDN and Unit=W/m$\wedge$2/Hz are
- used.
- }
- }
-}
-\sstroutine{
- TextLab(axis)\sstlabel{TextLabaxis}
-}{
- Draw descriptive axis labels for a Plot?
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
- whether textual labels should be drawn to describe the quantity
- being represented on each axis of a \htmlref{Plot}{Plot}. It takes a separate
- value for each physical axis of a Plot so that, for instance,
- the setting {\tt{"}}TextLab(2)=1{\tt{"}} specifies that descriptive labels
- should be drawn for the second axis.
-
- If the TextLab value of a Plot axis is non-zero, then
- descriptive labels will be drawn for that axis, otherwise they
- will be omitted. The default behaviour is to draw descriptive
- labels if tick marks and numerical labels are being drawn around
- the edges of the plotting area (see the \htmlref{Labelling}{Labelling} attribute),
- but to omit them otherwise.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The text used for the descriptive labels is derived from the
- Plot's \htmlref{Label(axis)}{Labelaxis} attribute, together with its \htmlref{Unit(axis)}{Unitaxis}
- attribute if appropriate (see the \htmlref{LabelUnits(axis)}{LabelUnitsaxis} attribute).
-
- \sstitem
- The drawing of numerical axis labels for a Plot (which
- indicate values on the axis) is controlled by the \htmlref{NumLab(axis)}{NumLabaxis}
- attribute.
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}TextLab{\tt{"}} instead of
- {\tt{"}}TextLab(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
- the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
- {\tt{"}}test{\tt{"}} operation will use just the TextLab(1) value.
- }
- }
-}
-\sstroutine{
- TextLabGap(axis)\sstlabel{TextLabGapaxis}
-}{
- Spacing of descriptive axis labels for a Plot
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
- where descriptive axis labels are placed relative to the axes they
- describe. It takes a separate value for each physical axis of a
- \htmlref{Plot}{Plot} so that, for instance, the setting {\tt{"}}TextLabGap(2)=0.01{\tt{"}}
- specifies where the descriptive label for the second axis should
- be drawn.
-
- For each axis, the TextLabGap value gives the spacing between the
- descriptive label and the edge of a box enclosing all other parts
- of the annotated grid (excluding other descriptive labels). The gap
- is measured to the nearest edge of the label (i.e. the top or the
- bottom). Positive values cause the descriptive label to be placed
- outside the bounding box, while negative values cause it to be placed
- inside.
-
- The TextLabGap value should be given as a fraction of the minimum
- dimension of the plotting area, the default value being $+$0.01.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- If drawn, descriptive labels are always placed at the edges of
- the plotting area, even although the corresponding numerical
- labels may be drawn along axis lines in the interior of the
- plotting area (see the \htmlref{Labelling}{Labelling} attribute).
-
- \sstitem
- If no axis is specified, (e.g. {\tt{"}}TextLabGap{\tt{"}} instead of
- {\tt{"}}TextLabGap(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
- the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
- {\tt{"}}test{\tt{"}} operation will use just the TextLabGap(1) value.
- }
- }
-}
-\sstroutine{
- TickAll\sstlabel{TickAll}
-}{
- Draw tick marks on all edges of a Plot?
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
- whether tick marks should be drawn on all edges of a \htmlref{Plot}{Plot}.
-
- If the TickAll value of a Plot is non-zero (the default), then
- tick marks will be drawn on all edges of the Plot. Otherwise,
- they will be drawn only on those edges where the numerical and
- descriptive axis labels are drawn (see the \htmlref{Edge(axis)}{Edgeaxis}
- attribute).
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- In some circumstances, numerical labels and tick marks are
- drawn along grid lines inside the plotting area, rather than
- around its edges (see the \htmlref{Labelling}{Labelling} attribute). In this case,
- the value of the TickAll attribute is ignored.
- }
- }
-}
-\sstroutine{
- TimeOrigin\sstlabel{TimeOrigin}
-}{
- The zero point for TimeFrame axis values
-}{
- \sstdescription{
- This specifies the origin from which all time values are measured.
- The default value (zero) results in the \htmlref{TimeFrame}{TimeFrame} describing
- absolute time values in the system given by the \htmlref{System}{System} attribute
- (e.g. MJD, Julian epoch, etc). If a TimeFrame is to be used to
- describe elapsed time since some origin, the TimeOrigin attribute
- should be set to hold the required origin value. The TimeOrigin value
- stored inside the TimeFrame structure is modified whenever TimeFrame
- attribute values are changed so that it refers to the original moment
- in time.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- TimeFrame
- }{
- All TimeFrames have this attribute.
- }
- }
- \sstdiytopic{
- Input Formats
- }{
- The formats accepted when setting a TimeOrigin value are listed
- below. They are all case-insensitive and are generally tolerant
- of extra white space and alternative field delimiters:
-
- \sstitemlist{
-
- \sstitem
- Besselian \htmlref{Epoch}{Epoch}: Expressed in decimal years, with or without
- decimal places ({\tt{"}}B1950{\tt{"}} or {\tt{"}}B1976.13{\tt{"}} for example).
-
- \sstitem
- Julian Epoch: Expressed in decimal years, with or without
- decimal places ({\tt{"}}J2000{\tt{"}} or {\tt{"}}J2100.9{\tt{"}} for example).
-
- \sstitem
- Units: An unqualified decimal value is interpreted as a value in
- the system specified by the TimeFrame's System attribute, in the
- units given by the TimeFrame's Unit attribute. Alternatively, an
- appropriate unit string can be appended to the end of the floating
- point value ({\tt{"}}123.4 d{\tt{"}} for example), in which case the supplied value
- is scaled into the units specified by the Unit attribute.
-
- \sstitem
- Julian Date: With or without decimal places ({\tt{"}}JD 2454321.9{\tt{"}} for
- example).
-
- \sstitem
- Modified Julian Date: With or without decimal places
- ({\tt{"}}MJD 54321.4{\tt{"}} for example).
-
- \sstitem
- Gregorian Calendar Date: With the month expressed either as an
- integer or a 3-character abbreviation, and with optional decimal
- places to represent a fraction of a day ({\tt{"}}1996-10-2{\tt{"}} or
- {\tt{"}}1996-Oct-2.6{\tt{"}} for example). If no fractional part of a day is
- given, the time refers to the start of the day (zero hours).
-
- \sstitem
- Gregorian Date and Time: Any calendar date (as above) but with
- a fraction of a day expressed as hours, minutes and seconds
- ({\tt{"}}1996-Oct-2 12:13:56.985{\tt{"}} for example). The date and time can be
- separated by a space or by a {\tt{"}}T{\tt{"}} (as used by ISO8601 format).
- }
- }
- \sstdiytopic{
- Output Format
- }{
- When enquiring TimeOrigin values, the returned formatted floating
- point value represents a value in the TimeFrame's System, in the unit
- specified by the TimeFrame's Unit attribute.
- }
-}
-\sstroutine{
- TimeScale\sstlabel{TimeScale}
-}{
- Time scale
-}{
- \sstdescription{
- This attribute identifies the time scale to which the time axis values
- of a \htmlref{TimeFrame}{TimeFrame} refer, and may take any of the values listed in the
- {\tt{"}}Time Scales{\tt{"}} section (below).
-
- The default TimeScale value depends on the current \htmlref{System}{System} value; if
- the current TimeFrame system is {\tt{"}}Besselian epoch{\tt{"}} the default is
- {\tt{"}}TT{\tt{"}}, otherwise it is {\tt{"}}TAI{\tt{"}}. Note, if the System attribute is set
- so that the TimeFrame represents Besselian \htmlref{Epoch}{Epoch}, then an error
- will be reported if an attempt is made to set the TimeScale to
- anything other than TT.
-
- Note, the supported time scales fall into two groups. The first group
- containing UT1, GMST, LAST and LMST define time in terms of the
- orientation of the earth. The second group (containing all the remaining
- time scales) define time in terms of an atomic process. Since the rate of
- rotation of the earth varies in an unpredictable way, conversion between
- two timescales in different groups relies on a value being supplied for
- the \htmlref{Dut1}{Dut1} attribute (defined by the parent \htmlref{Frame}{Frame} class). This attribute
- specifies the difference between the UT1 and UTC time scales, in seconds,
- and defaults to zero. See the documentation for the Dut1 attribute for
- further details.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- TimeFrame
- }{
- All TimeFrames have this attribute.
- }
- }
- \sstdiytopic{
- Time Scales
- }{
- The TimeFrame class supports the following TimeScale values (all are
- case-insensitive):
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}TAI{\tt{"}} - International Atomic Time
-
- \sstitem
- {\tt{"}}UTC{\tt{"}} - Coordinated Universal Time
-
- \sstitem
- {\tt{"}}UT1{\tt{"}} - Universal Time
-
- \sstitem
- {\tt{"}}GMST{\tt{"}} - Greenwich Mean Sidereal Time
-
- \sstitem
- {\tt{"}}LAST{\tt{"}} - Local Apparent Sidereal Time
-
- \sstitem
- {\tt{"}}LMST{\tt{"}} - Local Mean Sidereal Time
-
- \sstitem
- {\tt{"}}TT{\tt{"}} - Terrestrial Time
-
- \sstitem
- {\tt{"}}TDB{\tt{"}} - Barycentric Dynamical Time
-
- \sstitem
- {\tt{"}}TCB{\tt{"}} - Barycentric Coordinate Time
-
- \sstitem
- {\tt{"}}TCG{\tt{"}} - Geocentric Coordinate Time
-
- \sstitem
- {\tt{"}}LT{\tt{"}} - Local Time (the offset from UTC is given by attribute \htmlref{LTOffset}{LTOffset})
-
- }
- An very informative description of these and other time scales is
- available at http://www.ucolick.org/$\sim$sla/leapsecs/timescales.html.
- }
- \sstdiytopic{
- UTC \htmlref{Warnings}{Warnings}
- }{
- UTC should ideally be expressed using separate hours, minutes and
- seconds fields (or at least in seconds for a given date) if leap seconds
- are to be taken into account. Since the TimeFrame class represents
- each moment in time using a single floating point number (the axis value)
- there will be an ambiguity during a leap second. Thus an error of up to
- 1 second can result when using AST to convert a UTC time to another
- time scale if the time occurs within a leap second. Leap seconds
- occur at most twice a year, and are introduced to take account of
- variation in the rotation of the earth. The most recent leap second
- occurred on 1st January 1999. Although in the vast majority of cases
- leap second ambiguities won't matter, there are potential problems in
- on-line data acquisition systems and in critical applications involving
- taking the difference between two times.
- }
-}
-\sstroutine{
- Title\sstlabel{Title}
-}{
- Frame title
-}{
- \sstdescription{
- This attribute holds a string which is used as a title in (e.g.)
- graphical output to describe the coordinate system which a \htmlref{Frame}{Frame}
- represents. Examples might be {\tt{"}}Detector Coordinates{\tt{"}} or
- {\tt{"}}Galactic Coordinates{\tt{"}}.
-
- If a Title value has not been set for a Frame, then a suitable
- default is supplied, depending on the class of the Frame.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The default supplied by the Frame class is {\tt{"}}$<$n$>$-d coordinate
- system{\tt{"}}, where $<$n$>$ is the number of Frame axes (\htmlref{Naxes}{Naxes}
- attribute).
- }
- \sstsubsection{
- \htmlref{CmpFrame}{CmpFrame}
- }{
- The CmpFrame class re-defines the default Title value to be
- {\tt{"}}$<$n$>$-d compound coordinate system{\tt{"}}, where $<$n$>$ is the number
- of CmpFrame axes (Naxes attribute).
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Title attribute of a FrameSet is the same as that of its
- current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- A Frame's Title is intended purely for interpretation by human
- readers and not by software.
- }
- }
-}
-\sstroutine{
- TitleGap\sstlabel{TitleGap}
-}{
- Vertical spacing for a Plot title
-}{
- \sstdescription{
- This attribute controls the appearance of an annotated
- coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
- where the title of a \htmlref{Plot}{Plot} is drawn.
-
- Its value gives the spacing between the bottom edge of the title
- and the top edge of a bounding box containing all the other parts
- of the annotated grid. Positive values cause the title to be
- drawn outside the box, while negative values cause it to be drawn
- inside.
-
- The TitleGap value should be given as a fraction of the minimum
- dimension of the plotting area, the default value being $+$0.05.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- \sstsubsection{
- \htmlref{Plot3D}{Plot3D}
- }{
- The Plot3D class ignores this attributes since it does not draw
- a \htmlref{Title}{Title}.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The text used for the title is obtained from the Plot's Title
- attribute.
- }
- }
-}
-\sstroutine{
- Tol\sstlabel{Tol}
-}{
- Plotting tolerance
-}{
- \sstdescription{
- This attribute specifies the plotting tolerance (or resolution)
- to be used for the graphical output produced by a \htmlref{Plot}{Plot}. Smaller
- values will result in smoother and more accurate curves being
- drawn, but may slow down the plotting process. Conversely,
- larger values may speed up the plotting process in cases where
- high resolution is not required.
-
- The Tol value should be given as a fraction of the minimum
- dimension of the plotting area, and should lie in the range
- from 1.0e-7 to 1.0. By default, a value of 0.01 is used.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
-}
-\sstroutine{
- Top(axis)\sstlabel{Topaxis}
-}{
- Highest axis value to display
-}{
- \sstdescription{
- This attribute gives the highest axis value to be displayed (for
- instance, by the \htmlref{astGrid}{astGrid} method).
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{Frame}{Frame}
- }{
- The default supplied by the Frame class is to display all axis
- values, without any limit.
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- The SkyFrame class re-defines the default Top value to $+$90 degrees
- for latitude axes, and 180 degrees for co-latitude axes. The
- default for longitude axes is to display all axis values.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When specifying this attribute by name, it should be
- subscripted with the number of the Frame axis to which it
- applies.
- }
- }
-}
-\sstroutine{
- TranForward\sstlabel{TranForward}
-}{
- Forward transformation defined?
-}{
- \sstdescription{
- This attribute indicates whether a \htmlref{Mapping}{Mapping} is able to transform
- coordinates in the {\tt{"}}forward{\tt{"}} direction (i.e. converting input
- coordinates into output coordinates). If this attribute is
- non-zero, the forward transformation is available. Otherwise, it
- is not.
- }
- \sstattributetype{
- Integer (boolean), read-only.
- }
- \sstapplicability{
- \sstsubsection{
- Mapping
- }{
- All Mappings have this attribute.
- }
- \sstsubsection{
- \htmlref{CmpMap}{CmpMap}
- }{
- The TranForward attribute value for a CmpMap is given by the
- boolean AND of the value for each component Mapping.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The TranForward attribute of a FrameSet applies to the
- transformation which converts between the FrameSet's base
- \htmlref{Frame}{Frame} and its current Frame (as specified by the \htmlref{Base}{Base} and
- \htmlref{Current}{Current} attributes). This value is given by the boolean AND
- of the TranForward values which apply to each of the
- individual sub-Mappings required to perform this conversion.
- The TranForward attribute value for a FrameSet may therefore
- change if a new Base or Current Frame is selected.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- An error will result if a Mapping with a TranForward value of
- zero is used to transform coordinates in the forward direction.
- }
- }
-}
-\sstroutine{
- TranInverse\sstlabel{TranInverse}
-}{
- Inverse transformation defined?
-}{
- \sstdescription{
- This attribute indicates whether a \htmlref{Mapping}{Mapping} is able to transform
- coordinates in the {\tt{"}}inverse{\tt{"}} direction (i.e. converting output
- coordinates back into input coordinates). If this attribute is
- non-zero, the inverse transformation is available. Otherwise, it
- is not.
- }
- \sstattributetype{
- Integer (boolean), readonly.
- }
- \sstapplicability{
- \sstsubsection{
- Mapping
- }{
- All Mappings have this attribute.
- }
- \sstsubsection{
- \htmlref{CmpMap}{CmpMap}
- }{
- The TranInverse attribute value for a CmpMap is given by the
- boolean AND of the value for each component Mapping.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The TranInverse attribute of a FrameSet applies to the
- transformation which converts between the FrameSet's current
- \htmlref{Frame}{Frame} and its base Frame (as specified by the \htmlref{Current}{Current} and
- \htmlref{Base}{Base} attributes). This value is given by the boolean AND of
- the TranInverse values which apply to each of the individual
- sub-Mappings required to perform this conversion.
- The TranInverse attribute value for a FrameSet may therefore
- change if a new Base or Current Frame is selected.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- An error will result if a Mapping with a TranInverse value of
- zero is used to transform coordinates in the inverse direction.
- }
- }
-}
-\sstroutine{
- Unit(axis)\sstlabel{Unitaxis}
-}{
- Axis physical units
-}{
- \sstdescription{
- This attribute contains a textual representation of the physical
- units used to represent coordinate values on a particular axis
- of a \htmlref{Frame}{Frame}. The \htmlref{astSetActiveUnit}{astSetActiveUnit} function controls how the Unit values
- are used.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Frame
- }{
- The default supplied by the Frame class is an empty string.
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- The SkyFrame class re-defines the default Unit value (e.g. to
- {\tt{"}}hh:mm:ss.sss{\tt{"}}) to describe the character string returned by
- the \htmlref{astFormat}{astFormat} function when formatting coordinate values.
- }
- \sstsubsection{
- \htmlref{SpecFrame}{SpecFrame}
- }{
- The SpecFrame class re-defines the default Unit value so that it
- is appropriate for the current \htmlref{System}{System} value. See the System
- attribute for details. An error will be reported if an attempt
- is made to use an inappropriate Unit.
- }
- \sstsubsection{
- \htmlref{TimeFrame}{TimeFrame}
- }{
- The TimeFrame class re-defines the default Unit value so that it
- is appropriate for the current System value. See the System
- attribute for details. An error will be reported if an attempt
- is made to use an inappropriate Unit (e.g. {\tt{"}}km{\tt{"}}).
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The Unit attribute of a FrameSet axis is the same as that of
- its current Frame (as specified by the \htmlref{Current}{Current} attribute).
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When specifying this attribute by name, it should be
- subscripted with the number of the Frame axis to which it
- applies.
- }
- }
-}
-\sstroutine{
- UnitRadius\sstlabel{UnitRadius}
-}{
- SphMap input vectors lie on a unit sphere?
-}{
- \sstdescription{
- This is a boolean attribute which indicates whether the
- 3-dimensional vectors which are supplied as input to a \htmlref{SphMap}{SphMap}
- are known to always have unit length, so that they lie on a unit
- sphere centred on the origin.
-
- If this condition is true (indicated by setting UnitRadius
- non-zero), it implies that a \htmlref{CmpMap}{CmpMap} which is composed of a
- SphMap applied in the forward direction followed by a similar
- SphMap applied in the inverse direction may be simplified
- (e.g. by \htmlref{astSimplify}{astSimplify}) to become a \htmlref{UnitMap}{UnitMap}. This is because the
- input and output vectors will both have unit length and will
- therefore have the same coordinate values.
-
- If UnitRadius is zero (the default), then although the output
- vector produced by the CmpMap (above) will still have unit
- length, the input vector may not have. This will, in general,
- change the coordinate values, so it prevents the pair of SphMaps
- being simplified.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- SphMap
- }{
- All SphMaps have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- This attribute is intended mainly for use when SphMaps are
- involved in a sequence of Mappings which project (e.g.) a
- dataset on to the celestial sphere. By regarding the celestial
- sphere as a unit sphere (and setting UnitRadius to be non-zero)
- it becomes possible to cancel the SphMaps present, along with
- associated sky projections, when two datasets are aligned using
- celestial coordinates. This often considerably improves
- performance.
-
- \sstitem
- Such a situations often arises when interpreting FITS data and
- is handled automatically by the \htmlref{FitsChan}{FitsChan} class.
-
- \sstitem
- The value of the UnitRadius attribute is used only to control
- the simplification of Mappings and has no effect on the value of
- the coordinates transformed by a SphMap. The lengths of the
- input 3-dimensional Cartesian vectors supplied are always
- ignored, even if UnitRadius is non-zero.
- }
- }
-}
-\sstroutine{
- UseDefs\sstlabel{UseDefs}
-}{
- Use default values for unspecified attributes?
-}{
- \sstdescription{
- This attribute specifies whether default values should be used
- internally for object attributes which have not been assigned a
- value explicitly. If a non-zero value (the default) is supplied for
- UseDefs, then default values will be used for attributes which have
- not explicitly been assigned a value. If zero is supplied for UseDefs,
- then an error will be reported if an attribute for which no explicit
- value has been supplied is needed internally within AST.
-
- Many attributes (including the UseDefs attribute itself) are unaffected
- by the setting of the UseDefs attribute, and default values will always
- be used without error for such attributes. The {\tt{"}}Applicability:{\tt{"}} section
- below lists the attributes which are affected by the setting of UseDefs.
-
- Note, UseDefs only affects access to attributes internally within
- AST. The public accessor functions such as
- astGetC
- is unaffected by the UseDefs attribute - default values will always
- be returned if no value has been set. Application code should use the
- \htmlref{astTest}{astTest}
- function if required to determine if a value has been set for an
- attribute.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- \htmlref{Object}{Object}
- }{
- All Objects have this attribute, but ignore its setting except
- as described below for individual classes.
- }
- \sstsubsection{
- \htmlref{FrameSet}{FrameSet}
- }{
- The default value of UseDefs for a FrameSet is redefined to be
- the UseDefs value of its current \htmlref{Frame}{Frame}.
- }
- \sstsubsection{
- \htmlref{CmpFrame}{CmpFrame}
- }{
- The default value of UseDefs for a CmpFrame is redefined to be
- the UseDefs value of its first component Frame.
- }
- \sstsubsection{
- \htmlref{Region}{Region}
- }{
- The default value of UseDefs for a Region is redefined to be
- the UseDefs value of its encapsulated Frame.
- }
- \sstsubsection{
- Frame
- }{
- If UseDefs is zero, an error is reported when aligning Frames if the
- \htmlref{Epoch}{Epoch}, \htmlref{ObsLat}{ObsLat} or \htmlref{ObsLon}{ObsLon} attribute is required but has not been
- assigned a value explicitly.
- }
- \sstsubsection{
- \htmlref{SkyFrame}{SkyFrame}
- }{
- If UseDefs is zero, an error is reported when aligning SkyFrames
- if any of the following attributes are required but have not been
- assigned a value explicitly: Epoch, \htmlref{Equinox}{Equinox}.
- }
- \sstsubsection{
- \htmlref{SpecFrame}{SpecFrame}
- }{
- If UseDefs is zero, an error is reported when aligning SpecFrames
- if any of the following attributes are required but have not been
- assigned a value explicitly: Epoch, \htmlref{RefRA}{RefRA}, \htmlref{RefDec}{RefDec}, \htmlref{RestFreq}{RestFreq},
- \htmlref{SourceVel}{SourceVel}, \htmlref{StdOfRest}{StdOfRest}.
- }
- \sstsubsection{
- \htmlref{DSBSpecFrame}{DSBSpecFrame}
- }{
- If UseDefs is zero, an error is reported when aligning DSBSpecFrames
- or when accessing the \htmlref{ImagFreq}{ImagFreq} attribute if any of the following
- attributes are required but have not been assigned a value explicitly:
- Epoch, \htmlref{DSBCentre}{DSBCentre}, \htmlref{IF}{IF}.
- }
- }
-}
-\sstroutine{
- Warnings\sstlabel{Warnings}
-}{
- Controls the issuing of warnings about various conditions
-}{
- \sstdescription{
- This attribute controls the issuing of warnings about selected
- conditions when an \htmlref{Object}{Object} or keyword is read from or written to a
- \htmlref{FitsChan}{FitsChan}. The value supplied for the Warnings attribute should
- consist of a space separated list of condition names (see the
- \htmlref{AllWarnings}{AllWarnings} attribute for a list of the currently defined names).
- Each name indicates a condition which should be reported. The default
- value for Warnings is the string {\tt{"}}Tnx Zpx BadCel BadMat BadPV BadCTYPE{\tt{"}}.
-
- The text of any warning will be stored within the FitsChan in the
- form of one or more new header cards with keyword ASTWARN. If
- required, applications can check the FitsChan for ASTWARN cards
- (using \htmlref{astFindFits}{astFindFits}) after the call to \htmlref{astRead}{astRead} or \htmlref{astWrite}{astWrite} has been
- performed, and report the text of any such cards to the user. ASTWARN
- cards will be propagated to any output header unless they are
- deleted from the FitsChan using \htmlref{astDelFits}{astDelFits}.
- }
- \sstattributetype{
- String
- }
- \sstapplicability{
- \sstsubsection{
- FitsChan
- }{
- All FitsChans have this attribute.
- }
- }
- \sstnotes{
- This attribute only controls the warnings that are to be stored as
- a set of header cards in the FitsChan as described above. It has no
- effect on the storage of warnings in the parent \htmlref{Channel}{Channel} structure.
- All warnings are stored in the parent Channel structure, from where
- they can be retrieved using the
- \htmlref{astWarnings}{astWarnings}
- function.
- }
-}
-\sstroutine{
- WcsAxis(lonlat)\sstlabel{WcsAxislonlat}
-}{
- FITS-WCS projection axes
-}{
- \sstdescription{
- This attribute gives the indices of the longitude and latitude
- coordinates of the FITS-WCS projection within the coordinate
- space used by a \htmlref{WcsMap}{WcsMap}. These indices are defined when the
- WcsMap is first created using \htmlref{astWcsMap}{astWcsMap} and cannot
- subsequently be altered.
-
- If {\tt{"}}lonlat{\tt{"}} is 1, the index of the longitude axis is
- returned. Otherwise, if it is 2, the index of the latitude axis
- is returned.
- }
- \sstattributetype{
- Integer, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- WcsMap
- }{
- All WcsMaps have this attribute.
- }
- }
-}
-\sstroutine{
- WcsType\sstlabel{WcsType}
-}{
- FITS-WCS projection type
-}{
- \sstdescription{
- This attribute specifies which type of FITS-WCS projection will
- be performed by a \htmlref{WcsMap}{WcsMap}. The value is specified when a WcsMap
- is first created using \htmlref{astWcsMap}{astWcsMap} and cannot subsequently be
- changed.
-
- The values used are represented by macros with names of
- the form {\tt{"}}AST\_\_XXX{\tt{"}}, where {\tt{"}}XXX{\tt{"}} is the (upper case) 3-character
- code used by the FITS-WCS {\tt{"}}CTYPEi{\tt{"}} keyword to identify the
- projection. For example, possible values are AST\_\_TAN (for the
- tangent plane or gnomonic projection) and AST\_\_AIT (for the
- Hammer-Aitoff projection). AST\_\_TPN is an exception in that it
- is not part of the FITS-WCS standard (it represents a TAN
- projection with polynomial correction terms as defined in an early
- draft of the FITS-WCS paper).
- }
- \sstattributetype{
- Integer, read-only.
- }
- \sstapplicability{
- \sstsubsection{
- WcsMap
- }{
- All WcsMaps have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- For a list of available projections, see the FITS-WCS paper.
- }
- }
-}
-\sstroutine{
- Width(element)\sstlabel{Widthelement}
-}{
- Line width for a Plot element
-}{
- \sstdescription{
- This attribute determines the line width used when drawing each
- element of graphical output produced by a \htmlref{Plot}{Plot}. It takes a
- separate value for each graphical element so that, for instance,
- the setting {\tt{"}}Width(border)=2.0{\tt{"}} causes the Plot border to be
- drawn using a line width of 2.0. A value of 1.0 results in a
- line thickness which is approximately 0.0005 times the length of
- the diagonal of the entire display surface.
-
- The actual appearance of lines drawn with any particular width,
- and the range of available widths, is determined by the
- underlying graphics system. The default behaviour is for all
- graphical elements to be drawn using the default line width
- supplied by this graphics system. This will not necessarily
- correspond to a Width value of 1.0.
- }
- \sstattributetype{
- Floating point.
- }
- \sstapplicability{
- \sstsubsection{
- Plot
- }{
- All Plots have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- For a list of the graphical elements available, see the
- description of the Plot class.
-
- \sstitem
- If no graphical element is specified, (e.g. {\tt{"}}Width{\tt{"}} instead of
- {\tt{"}}Width(border){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
- the attribute value of all graphical elements, while a {\tt{"}}get{\tt{"}} or
- {\tt{"}}test{\tt{"}} operation will use just the Width(\htmlref{Border}{Border}) value.
- }
- }
-}
-\sstroutine{
- XmlFormat\sstlabel{XmlFormat}
-}{
- System for formatting Objects as XML
-}{
- \sstdescription{
- This attribute specifies the formatting system to use when AST
- Objects are written out as XML through an \htmlref{XmlChan}{XmlChan}. It
- affects the behaviour of the \htmlref{astWrite}{astWrite} function when
- they are used to transfer any AST \htmlref{Object}{Object} to or from an external
- XML representation.
-
- The XmlChan class allows AST objects to be represented in the form
- of XML in several ways (conventions) and the XmlFormat attribute is
- used to specify which of these should be used. The formatting options
- available are outlined in the {\tt{"}}Formats Available{\tt{"}} section below.
-
- By default, an XmlChan will attempt to determine which format system
- is already in use, and will set the default XmlFormat value
- accordingly (so that subsequent I/O operations adopt the same
- conventions). It does this by looking for certain critical items
- which only occur in particular formats. For details of how this
- works, see the {\tt{"}}Choice of Default Format{\tt{"}} section below. If you wish
- to ensure that a particular format system is used, independently of
- any XML already read, you should set an explicit XmlFormat value
- yourself.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- XmlChan
- }{
- All XmlChans have this attribute.
- }
- }
- \sstdiytopic{
- Formats Available
- }{
- The XmlFormat attribute can take any of the following (case
- insensitive) string values to select the corresponding formatting
- system:
-
- \sstitemlist{
-
- \sstitem
- {\tt{"}}NATIVE{\tt{"}}: This is a direct conversion to XML of the heirarchical
- format used by a standard XML channel (and also by the NATIVE
- encoding of a \htmlref{FitsChan}{FitsChan}).
-
- \sstitem
- {\tt{"}}QUOTED{\tt{"}}: This is the same as NATIVE format except that extra
- information is included which allows client code to convert the
- XML into a form which can be read by a standard AST \htmlref{Channel}{Channel}. This
- extra information indicates which AST attribute values should be
- enclosed in quotes before being passed to a Channel.
-
- \sstitem
- {\tt{"}}IVOA{\tt{"}}: This is a format that uses an early draft of the STC-X schema
- developed by the International Virtual Observatory Alliance (IVOA -
- see {\tt{"}}http://www.ivoa.net/{\tt{"}}) to describe coordinate systems, regions,
- mappings, etc. Support is limited to V1.20 described at
- {\tt{"}}http://www.ivoa.net/Documents/WD/STC/STC-20050225.html{\tt{"}}. Since the
- version of STC-X finally adopted by the IVOA differs in several
- significant respects from V1.20, this format is now mainly of
- historical interest. Note, the alternative {\tt{"}}STC-S{\tt{"}} format (a
- simpler non-XML encoding of the STC metadata) is supported by the
- \htmlref{StcsChan}{StcsChan} class.
- }
- }
- \sstdiytopic{
- Choice of Default Format;
- }{
- If the XmlFormat attribute of an XmlChan is not set, the default
- value it takes is determined by the presence of certain critical
- items within the document most recently read using
- \htmlref{astRead}{astRead}.
- The sequence of decision used to arrive at the default value is as
- follows:
-
- \sstitemlist{
-
- \sstitem
- If the previous document read contained any elements in any of the STC
- namespaces ({\tt{"}}urn:nvo-stc{\tt{"}}, {\tt{"}}urn:nvo-coords{\tt{"}} or {\tt{"}}urn:nvo-region{\tt{"}}), then
- the default value is IVOA.
-
- \sstitem
- If the previous document read contained any elements in the AST
- namespace which had an associated XML attribute called {\tt{"}}quoted{\tt{"}}, then
- the default value is QUOTED.
-
- \sstitem
- Otherwise, if none of these conditions is met (as would be the
- case if no document had yet been read), then NATIVE format is
- used.
-
- }
- Setting an explicit value for the XmlFormat attribute always
- over-rides this default behaviour.
- }
- \sstdiytopic{
- The IVOA Format
- }{
- The IVOA support caters only for certain parts of V1.20 of the
- draft Space-Time Coordinate (STC) schema (see
- http://www.ivoa.net/Documents/WD/STC/STC-20050225.html). Note, this
- draft has now been superceded by an officially adopted version that
- differs in several significant respects from V1.20. Consequently,
- the {\tt{"}}IVOA{\tt{"}} XmlChan format is of historical interest only.
-
- The following points should be noted when using an XmlChan to read
- or write STC information (note, this list is currently incomplete):
-
- \sstitemlist{
-
- \sstitem
- Objects can currently only be read using this format, not written.
-
- \sstitem
- The AST object generated by reading an $<$STCMetadata$>$ element will
- be an instance of one of the AST {\tt{"}}\htmlref{Stc}{Stc}{\tt{"}} classes: \htmlref{StcResourceProfile}{StcResourceProfile},
- \htmlref{StcSearchLocation}{StcSearchLocation}, \htmlref{StcCatalogEntryLocation}{StcCatalogEntryLocation}, \htmlref{StcObsDataLocation}{StcObsDataLocation}.
-
- \sstitem
- When reading an $<$STCMetadata$>$ element, the axes in the returned
- AST Object will be in the order space, time, spectral, redshift,
- irrespective of the order in which the axes occur in the $<$STCMetadata$>$
- element. If the supplied $<$STCMetadata$>$ element does not contain all of
- these axes, the returned AST Object will also omit them, but the
- ordering of those axes which are present will be as stated above. If
- the spatial frame represents a celestial coordinate system the
- spatial axes will be in the order (longitude, latitude).
-
- \sstitem
- Until such time as the AST \htmlref{TimeFrame}{TimeFrame} is complete, a simple
- 1-dimensional \htmlref{Frame}{Frame} (with \htmlref{Domain}{Domain} set to TIME) will be used to
- represent the STC $<$TimeFrame$>$ element. Consequently, most of the
- information within a $<$TimeFrame$>$ element is currently ignored.
-
- \sstitem
- $<$SpaceFrame$>$ elements can only be read if they describe a celestial
- longitude and latitude axes supported by the AST \htmlref{SkyFrame}{SkyFrame} class. The
- space axes will be returned in the order (longitude, latitude).
-
- \sstitem
- Velocities associated with SpaceFrames cannot be read.
-
- \sstitem
- Any $<$GenericCoordFrame$>$ elements within an $<$AstroCoordSystem$>$ element
- are currently ignored.
-
- \sstitem
- Any second or subsequent $<$AstroCoordSystem$>$ found within an
- STCMetaData element is ignored.
-
- \sstitem
- Any second or subsequent $<$AstroCoordArea$>$ found within an
- STCMetaData element is ignored.
-
- \sstitem
- Any $<$OffsetCenter$>$ found within a $<$SpaceFrame$>$ is ignored.
-
- \sstitem
- Any CoordFlavor element found within a $<$SpaceFrame$>$ is ignored.
-
- \sstitem
- $<$SpaceFrame$>$ elements can only be read if they refer to
- one of the following space reference frames: ICRS, GALACTIC\_II,
- SUPER\_GALACTIC, HEE, FK4, FK5, ECLIPTIC.
-
- \sstitem
- $<$SpaceFrame$>$ elements can only be read if the reference
- position is TOPOCENTER. Also, any planetary ephemeris is ignored.
-
- \sstitem
- Regions: there is currently no support for STC regions of type
- Sector, ConvexHull or SkyIndex.
-
- \sstitem
- The AST \htmlref{Region}{Region} read from a CoordInterval element is considered to
- be open if either the lo\_include or the hi\_include attribute is
- set to false.
-
- \sstitem
- $<$RegionFile$>$ elements are not supported.
-
- \sstitem
- Vertices within $<$\htmlref{Polygon}{Polygon}$>$ elements are always considered to be
- joined using great circles (that is, $<$SmallCircle$>$ elements are
- ignored).
- }
- }
-}
-\sstroutine{
- XmlIndent\sstlabel{XmlIndent}
-}{
- Controls output of indentation and line feeds
-}{
- \sstdescription{
- This attribute controls the appearance of the XML produced when an
- AST object is written to an \htmlref{XmlChan}{XmlChan}. If it is non-zero, then extra
- linefeed characters will be inserted as necessary to ensure that each
- XML tag starts on a new line, and each tag will be indented to show
- its depth in the containment hierarchy. If XmlIndent is zero (the
- default), then no linefeeds or indentation strings will be added to
- output text.
- }
- \sstattributetype{
- Integer (boolean).
- }
- \sstapplicability{
- \sstsubsection{
- XmlChan
- }{
- All XmlChans have this attribute.
- }
- }
-}
-\sstroutine{
- XmlLength\sstlabel{XmlLength}
-}{
- Controls output buffer length
-}{
- \sstdescription{
- This attribute specifies the maximum length to use when writing out
- text through the sink function supplied when the \htmlref{XmlChan}{XmlChan} was created.
-
- The number of characters in each string written out through the sink
- function will not be greater than the value of this attribute (but
- may be less). A value of zero (the default) means there is no limit -
- each string can be of any length.
- }
- \sstattributetype{
- Integer.
- }
- \sstapplicability{
- \sstsubsection{
- XmlChan
- }{
- All XmlChans have this attribute.
- }
- }
-}
-\sstroutine{
- XmlPrefix\sstlabel{XmlPrefix}
-}{
- The namespace prefix to use when writing
-}{
- \sstdescription{
- This attribute is a string which is to be used as the namespace
- prefix for all XML elements created as a result of writing an AST
- \htmlref{Object}{Object} out through an \htmlref{XmlChan}{XmlChan}. The URI associated with the namespace
- prefix is given by the symbolic constant AST\_\_XMLNS defined in
- ast.h.
- A definition of the namespace prefix is included in each top-level
- element produced by the XmlChan.
-
- The default value is a blank string which causes no prefix to be
- used. In this case each top-level element will set the default
- namespace to be the value of AST\_\_XMLNS.
- }
- \sstattributetype{
- String.
- }
- \sstapplicability{
- \sstsubsection{
- Object
- }{
- All Objects have this attribute.
- }
- }
-}
-\sstroutine{
- Zoom\sstlabel{Zoom}
-}{
- ZoomMap scale factor
-}{
- \sstdescription{
- This attribute holds the \htmlref{ZoomMap}{ZoomMap} scale factor, by which
- coordinate values are multiplied (by the forward transformation)
- or divided (by the inverse transformation). This factor is set
- when a ZoomMap is created, but may later be modified. The
- default value is unity.
-
- Note that if a ZoomMap is inverted (e.g. by using \htmlref{astInvert}{astInvert}),
- then the reciprocal of this zoom factor will, in effect, be
- used.
- }
- \sstattributetype{
- Double precision.
- }
- \sstapplicability{
- \sstsubsection{
- ZoomMap
- }{
- All ZoomMaps have this attribute.
- }
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- The Zoom attribute may not be set to zero.
- }
- }
-}
-\normalsize
-
-\cleardoublepage
-\section{\label{ss:classdescriptions}AST Class Descriptions}
-\small
-\sstroutine{
- Axis\sstlabel{Axis}
-}{
- Store axis information
-}{
- \sstdescription{
- The Axis class is used to store information associated with a
- particular axis of a \htmlref{Frame}{Frame}. It is used internally by the AST
- library and has no constructor function. You should encounter it
- only within textual output (e.g. from \htmlref{astWrite}{astWrite}).
- }
- \sstconstructor{
- None.
- }
- \sstdiytopic{
- Inheritance
- }{
- The Axis class inherits from the \htmlref{Object}{Object} class.
- }
-}
-\sstroutine{
- Box\sstlabel{Box}
-}{
- A box region with sides parallel to the axes of a Frame
-}{
- \sstdescription{
- The Box class implements a \htmlref{Region}{Region} which represents a box with sides
- parallel to the axes of a \htmlref{Frame}{Frame} (i.e. an area which encloses a given
- range of values on each axis). A Box is similar to an \htmlref{Interval}{Interval}, the
- only real difference being that the Interval class allows some axis
- limits to be unspecified. Note, a Box will only look like a box if
- the Frame geometry is approximately flat. For instance, a Box centred
- close to a pole in a \htmlref{SkyFrame}{SkyFrame} will look more like a fan than a box
- (the \htmlref{Polygon}{Polygon} class can be used to create a box-like region close to a
- pole).
- }
- \sstconstructor{
- \htmlref{astBox}{astBox}
- }
- \sstdiytopic{
- Inheritance
- }{
- The Box class inherits from the Region class.
- }
- \sstdiytopic{
- Attributes
- }{
- The Box class does not define any new attributes beyond
- those which are applicable to all Regions.
- }
- \sstdiytopic{
- Functions
- }{
- The Box class does not define any new functions beyond those
- which are applicable to all Regions.
- }
-}
-\sstroutine{
- Channel\sstlabel{Channel}
-}{
- Basic (textual) I/O channel
-}{
- \sstdescription{
- The Channel class implements low-level input/output for the AST
- library. Writing an \htmlref{Object}{Object} to a Channel will generate a textual
- representation of that Object, and reading from a Channel will
- create a new Object from its textual representation.
-
- Normally, when you use a Channel, you should provide {\tt{"}}source{\tt{"}}
- and {\tt{"}}sink{\tt{"}} functions which connect it to an external data store
- by reading and writing the resulting text. By default, however,
- a Channel will read from standard input and write to standard
- output.
- }
- \sstconstructor{
- \htmlref{astChannel}{astChannel}
- }
- \sstdiytopic{
- Inheritance
- }{
- The Channel class inherits from the Object class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Objects, every
- Channel also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{Comment}{Comment}: Include textual comments in output?
-
- \sstitem
- \htmlref{Full}{Full}: Set level of output detail
-
- \sstitem
- \htmlref{ReportLevel}{ReportLevel}: Selects the level of error reporting
-
- \sstitem
- \htmlref{Skip}{Skip}: Skip irrelevant data?
-
- \sstitem
- \htmlref{Strict}{Strict}: Generate errors instead of warnings?
- }
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those functions applicable to all Objects, the
- following functions may also be applied to all Channels:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{astWarnings}{astWarnings}: Return warnings from the previous read or write
-
- \sstitem
- \htmlref{astPutChannelData}{astPutChannelData}: Store data to pass to source or sink functions
-
- \sstitem
- \htmlref{astRead}{astRead}: Read an Object from a Channel
-
- \sstitem
- \htmlref{astWrite}{astWrite}: Write an Object to a Channel
- }
- }
-}
-\sstroutine{
- Circle\sstlabel{Circle}
-}{
- A circular or spherical region within a Frame
-}{
- \sstdescription{
- The Circle class implements a \htmlref{Region}{Region} which represents a circle or
- sphere within a \htmlref{Frame}{Frame}.
- }
- \sstconstructor{
- \htmlref{astCircle}{astCircle}
- }
- \sstdiytopic{
- Inheritance
- }{
- The Circle class inherits from the Region class.
- }
- \sstdiytopic{
- Attributes
- }{
- The Circle class does not define any new attributes beyond
- those which are applicable to all Regions.
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those functions applicable to all Regions, the
- following functions may also be applied to all Circles:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{astCirclePars}{astCirclePars}: Get the geometric parameters of the Circle
-
- \sstitem
- AST\_CIRCLEPARS: Get the geometric parameters of the Circle
- }
- }
-}
-\sstroutine{
- CmpFrame\sstlabel{CmpFrame}
-}{
- Compound Frame
-}{
- \sstdescription{
- A CmpFrame is a compound \htmlref{Frame}{Frame} which allows two component Frames
- (of any class) to be merged together to form a more complex
- Frame. The axes of the two component Frames then appear together
- in the resulting CmpFrame (those of the first Frame, followed by
- those of the second Frame).
-
- Since a CmpFrame is itself a Frame, it can be used as a
- component in forming further CmpFrames. Frames of arbitrary
- complexity may be built from simple individual Frames in this
- way.
-
- Also since a Frame is a \htmlref{Mapping}{Mapping}, a CmpFrame can also be used as a
- Mapping. Normally, a CmpFrame is simply equivalent to a \htmlref{UnitMap}{UnitMap},
- but if either of the component Frames within a CmpFrame is a \htmlref{Region}{Region}
- (a sub-class of Frame), then the CmpFrame will use the Region as a
- Mapping when transforming values for axes described by the Region.
- Thus input axis values corresponding to positions which are outside the
- Region will result in bad output axis values.
- }
- \sstconstructor{
- \htmlref{astCmpFrame}{astCmpFrame}
- }
- \sstdiytopic{
- Inheritance
- }{
- The CmpFrame class inherits from the Frame class.
- }
- \sstdiytopic{
- Attributes
- }{
- The CmpFrame class does not define any new attributes beyond
- those which are applicable to all Frames. However, the attributes
- of the component Frames can be accessed as if they were attributes
- of the CmpFrame. For instance, if a CmpFrame contains a \htmlref{SpecFrame}{SpecFrame}
- and a \htmlref{SkyFrame}{SkyFrame}, then the CmpFrame will recognise the {\tt{"}}\htmlref{Equinox}{Equinox}{\tt{"}}
- attribute and forward access requests to the component SkyFrame.
- Likewise, it will recognise the {\tt{"}}\htmlref{RestFreq}{RestFreq}{\tt{"}} attribute and forward
- access requests to the component SpecFrame. An axis index can
- optionally be appended to the end of any attribute name, in which
- case the request to access the attribute will be forwarded to the
- primary Frame defining the specified axis.
- }
- \sstdiytopic{
- Functions
- }{
- The CmpFrame class does not define any new functions beyond those
- which are applicable to all Frames.
- }
-}
-\sstroutine{
- CmpMap\sstlabel{CmpMap}
-}{
- Compound Mapping
-}{
- \sstdescription{
- A CmpMap is a compound \htmlref{Mapping}{Mapping} which allows two component
- Mappings (of any class) to be connected together to form a more
- complex Mapping. This connection may either be {\tt{"}}in series{\tt{"}}
- (where the first Mapping is used to transform the coordinates of
- each point and the second mapping is then applied to the
- result), or {\tt{"}}in parallel{\tt{"}} (where one Mapping transforms the
- earlier coordinates for each point and the second Mapping
- simultaneously transforms the later coordinates).
-
- Since a CmpMap is itself a Mapping, it can be used as a
- component in forming further CmpMaps. Mappings of arbitrary
- complexity may be built from simple individual Mappings in this
- way.
- }
- \sstconstructor{
- \htmlref{astCmpMap}{astCmpMap}
- }
- \sstdiytopic{
- Inheritance
- }{
- The CmpMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The CmpMap class does not define any new attributes beyond those
- which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The CmpMap class does not define any new functions beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- CmpRegion\sstlabel{CmpRegion}
-}{
- A combination of two regions within a single Frame
-}{
- \sstdescription{
- A CmpRegion is a \htmlref{Region}{Region} which allows two component
- Regions (of any class) to be combined to form a more complex
- Region. This combination may be performed a boolean AND, OR
- or XOR (exclusive OR) operator. If the AND operator is
- used, then a position is inside the CmpRegion only if it is
- inside both of its two component Regions. If the OR operator is
- used, then a position is inside the CmpRegion if it is inside
- either (or both) of its two component Regions. If the XOR operator
- is used, then a position is inside the CmpRegion if it is inside
- one but not both of its two component Regions. Other operators can
- be formed by negating one or both component Regions before using
- them to construct a new CmpRegion.
-
- The two component Region need not refer to the same coordinate
- \htmlref{Frame}{Frame}, but it must be possible for the
- \htmlref{astConvert}{astConvert}
- function to determine a \htmlref{Mapping}{Mapping} between them (an error will be
- reported otherwise when the CmpRegion is created). For instance,
- a CmpRegion may combine a Region defined within an ICRS \htmlref{SkyFrame}{SkyFrame}
- with a Region defined within a Galactic SkyFrame. This is
- acceptable because the SkyFrame class knows how to convert between
- these two systems, and consequently the
- astConvert
- function will also be able to convert between them. In such cases,
- the second component Region will be mapped into the coordinate Frame
- of the first component Region, and the Frame represented by the
- CmpRegion as a whole will be the Frame of the first component Region.
-
- Since a CmpRegion is itself a Region, it can be used as a
- component in forming further CmpRegions. Regions of arbitrary
- complexity may be built from simple individual Regions in this
- way.
- }
- \sstconstructor{
- \htmlref{astCmpRegion}{astCmpRegion}
- }
- \sstdiytopic{
- Inheritance
- }{
- The CmpRegion class inherits from the Region class.
- }
- \sstdiytopic{
- Attributes
- }{
- The CmpRegion class does not define any new attributes beyond those
- which are applicable to all Regions.
- }
- \sstdiytopic{
- Functions
- }{
- The CmpRegion class does not define any new functions beyond those
- which are applicable to all Regions.
- }
-}
-\sstroutine{
- DSBSpecFrame\sstlabel{DSBSpecFrame}
-}{
- Dual sideband spectral coordinate system description
-}{
- \sstdescription{
- A DSBSpecFrame is a specialised form of \htmlref{SpecFrame}{SpecFrame} which represents
- positions in a spectrum obtained using a dual sideband instrument.
- Such an instrument produces a spectrum in which each point contains
- contributions from two distinctly different frequencies, one from
- the {\tt{"}}lower side band{\tt{"}} (LSB) and one from the {\tt{"}}upper side band{\tt{"}} (USB).
- Corresponding LSB and USB frequencies are connected by the fact
- that they are an equal distance on either side of a fixed central
- frequency known as the {\tt{"}}Local Oscillator{\tt{"}} (LO) frequency.
-
- When quoting a position within such a spectrum, it is necessary to
- indicate whether the quoted position is the USB position or the
- corresponding LSB position. The \htmlref{SideBand}{SideBand} attribute provides this
- indication. Another option that the SideBand attribute provides is
- to represent a spectral position by its topocentric offset from the
- LO frequency.
-
- In practice, the LO frequency is specified by giving the distance
- from the LO frequency to some {\tt{"}}central{\tt{"}} spectral position. Typically
- this central position is that of some interesting spectral feature.
- The distance from this central position to the LO frequency is known
- as the {\tt{"}}intermediate frequency{\tt{"}} (\htmlref{IF}{IF}). The value supplied for IF can
- be a signed value in order to indicate whether the LO frequency is
- above or below the central position.
- }
- \sstconstructor{
- \htmlref{astDSBSpecFrame}{astDSBSpecFrame}
- }
- \sstdiytopic{
- Inheritance
- }{
- The DSBSpecFrame class inherits from the SpecFrame class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all SpecFrames, every
- DSBSpecFrame also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AlignSideBand}{AlignSideBand}: Should alignment occur between sidebands?
-
- \sstitem
- \htmlref{DSBCentre}{DSBCentre}: The central position of interest.
-
- \sstitem
- \htmlref{IF}{IF}: The intermediate frequency used to define the LO frequency.
-
- \sstitem
- \htmlref{ImagFreq}{ImagFreq}: The image sideband equivalent of the rest frequency.
-
- \sstitem
- \htmlref{SideBand}{SideBand}: Indicates which sideband the DSBSpecFrame represents.
- }
- }
- \sstdiytopic{
- Functions
- }{
- The DSBSpecFrame class does not define any new functions beyond those
- which are applicable to all SpecFrames.
- }
-}
-\sstroutine{
- DssMap\sstlabel{DssMap}
-}{
- Map points using a Digitised Sky Survey plate solution
-}{
- \sstdescription{
- The DssMap class implements a \htmlref{Mapping}{Mapping} which transforms between
- 2-dimensional pixel coordinates and an equatorial sky coordinate
- system (right ascension and declination) using a Digitised Sky
- Survey (DSS) astrometric plate solution.
-
- The input coordinates are pixel numbers along the first and
- second dimensions of an image, where the centre of the first
- pixel is located at (1,1) and the spacing between pixel centres
- is unity.
-
- The output coordinates are right ascension and declination in
- radians. The celestial coordinate system used (FK4, FK5, etc.)
- is unspecified, and will usually be indicated by appropriate
- keywords in a FITS header.
- }
- \sstconstructor{
- The DssMap class does not have a constructor function. A DssMap
- is created only as a by-product of reading a \htmlref{FrameSet}{FrameSet} (using
- \htmlref{astRead}{astRead}) from a \htmlref{FitsChan}{FitsChan} which contains FITS header cards
- describing a DSS plate solution, and whose \htmlref{Encoding}{Encoding} attribute is
- set to {\tt{"}}DSS{\tt{"}}. The result of such a read, if successful, is a
- FrameSet whose base and current Frames are related by a DssMap.
- }
- \sstdiytopic{
- Inheritance
- }{
- The DssMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The DssMap class does not define any new attributes beyond those
- which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The DssMap class does not define any new functions beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- Ellipse\sstlabel{Ellipse}
-}{
- An elliptical region within a 2-dimensional Frame
-}{
- \sstdescription{
- The Ellipse class implements a \htmlref{Region}{Region} which represents a ellipse
- within a 2-dimensional \htmlref{Frame}{Frame}.
- }
- \sstconstructor{
- \htmlref{astEllipse}{astEllipse}
- }
- \sstdiytopic{
- Inheritance
- }{
- The Ellipse class inherits from the Region class.
- }
- \sstdiytopic{
- Attributes
- }{
- The Ellipse class does not define any new attributes beyond
- those which are applicable to all Regions.
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those functions applicable to all Regions, the
- following functions may also be applied to all Ellipses:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{astEllipsePars}{astEllipsePars}: Get the geometric parameters of the Ellipse
-
- \sstitem
- AST\_ELLIPSEPARS: Get the geometric parameters of the Ellipse
- }
- }
-}
-\sstroutine{
- FitsChan\sstlabel{FitsChan}
-}{
- I/O Channel using FITS header cards to represent Objects
-}{
- \sstdescription{
- A FitsChan is a specialised form of \htmlref{Channel}{Channel} which supports I/O
- operations involving the use of FITS (Flexible Image Transport
- \htmlref{System}{System}) header cards. Writing an \htmlref{Object}{Object} to a FitsChan (using
- \htmlref{astWrite}{astWrite}) will, if the Object is suitable, generate a
- description of that Object composed of FITS header cards, and
- reading from a FitsChan will create a new Object from its FITS
- header card description.
-
- While a FitsChan is active, it represents a buffer which may
- contain zero or more 80-character {\tt{"}}header cards{\tt{"}} conforming to
- FITS conventions. Any sequence of FITS-conforming header cards
- may be stored, apart from the {\tt{"}}END{\tt{"}} card whose existence is
- merely implied. The cards may be accessed in any order by using
- the FitsChan's integer \htmlref{Card}{Card} attribute, which identifies a {\tt{"}}current{\tt{"}}
- card, to which subsequent operations apply. Searches
- based on keyword may be performed (using \htmlref{astFindFits}{astFindFits}), new
- cards may be inserted (\htmlref{astPutFits}{astPutFits}, \htmlref{astPutCards}{astPutCards}, \htmlref{astSetFits$<$X$>$}{astSetFitsX}) and
- existing ones may be deleted (\htmlref{astDelFits}{astDelFits}), extracted (\htmlref{astGetFits$<$X$>$}{astGetFitsX}),
- or changed (astSetFits$<$X$>$).
-
- When you create a FitsChan, you have the option of specifying
- {\tt{"}}source{\tt{"}} and {\tt{"}}sink{\tt{"}} functions which connect it to external data
- stores by reading and writing FITS header cards. If you provide
- a source function, it is used to fill the FitsChan with header cards
- when it is accessed for the first time. If you do not provide a
- source function, the FitsChan remains empty until you explicitly enter
- data into it (e.g. using astPutFits, astPutCards or astWrite). If you
- provide a sink function, it is used to deliver any remaining
- contents of a FitsChan to an external data store when the
- FitsChan is deleted. If you do not provide a sink function, any
- header cards remaining when the FitsChan is deleted will be
- lost, so you should arrange to extract them first if necessary
- (e.g. using astFindFits or \htmlref{astRead}{astRead}).
-
- Coordinate system information may be described using FITS header
- cards using several different conventions, termed
- {\tt{"}}encodings{\tt{"}}. When an AST Object is written to (or read from) a
- FitsChan, the value of the FitsChan's \htmlref{Encoding}{Encoding} attribute
- determines how the Object is converted to (or from) a
- description involving FITS header cards. In general, different
- encodings will result in different sets of header cards to
- describe the same Object. Examples of encodings include the DSS
- encoding (based on conventions used by the STScI Digitised Sky
- Survey data), the FITS-WCS encoding (based on a proposed FITS
- standard) and the NATIVE encoding (a near loss-less way of
- storing AST Objects in FITS headers).
-
- The available encodings differ in the range of Objects they can
- represent, in the number of Object descriptions that can coexist
- in the same FitsChan, and in their accessibility to other
- (external) astronomy applications (see the Encoding attribute
- for details). Encodings are not necessarily mutually exclusive
- and it may sometimes be possible to describe the same Object in
- several ways within a particular set of FITS header cards by
- using several different encodings.
-
- The detailed behaviour of astRead and astWrite, when used with
- a FitsChan, depends on the encoding in use. In general, however,
- all successful use of astRead is destructive, so that FITS header cards
- are consumed in the process of reading an Object, and are
- removed from the FitsChan (this deletion can be prevented for
- specific cards by calling the
- \htmlref{astRetainFits}{astRetainFits} function).
- An unsuccessful call of
- astRead
- (for instance, caused by the FitsChan not containing the necessary
- FITS headers cards needed to create an Object) results in the
- contents of the FitsChan being left unchanged.
-
- If the encoding in use allows only a single Object description
- to be stored in a FitsChan (e.g. the DSS, FITS-WCS and FITS-IRAF
- encodings), then write operations using astWrite will
- over-write any existing Object description using that
- encoding. Otherwise (e.g. the NATIVE encoding), multiple Object
- descriptions are written sequentially and may later be read
- back in the same sequence.
- }
- \sstconstructor{
- \htmlref{astFitsChan}{astFitsChan}
- }
- \sstdiytopic{
- Inheritance
- }{
- The FitsChan class inherits from the Channel class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Channels, every
- FitsChan also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AllWarnings}{AllWarnings}: A list of the available conditions
-
- \sstitem
- \htmlref{Card}{Card}: Index of current FITS card in a FitsChan
-
- \sstitem
- \htmlref{CarLin}{CarLin}: Ignore spherical rotations on CAR projections?
-
- \sstitem
- \htmlref{CDMatrix}{CDMatrix}: Use a CD matrix instead of a PC matrix?
-
- \sstitem
- \htmlref{Clean}{Clean}: Remove cards used whilst reading even if an error occurs?
-
- \sstitem
- \htmlref{DefB1950}{DefB1950}: Use FK4 B1950 as default equatorial coordinates?
-
- \sstitem
- \htmlref{Encoding}{Encoding}: System for encoding Objects as FITS headers
-
- \sstitem
- \htmlref{FitsDigits}{FitsDigits}: Digits of precision for floating-point FITS values
-
- \sstitem
- \htmlref{Iwc}{Iwc}: Add a \htmlref{Frame}{Frame} describing Intermediate World Coords?
-
- \sstitem
- \htmlref{Ncard}{Ncard}: Number of FITS header cards in a FitsChan
-
- \sstitem
- \htmlref{Warnings}{Warnings}: Produces warnings about selected conditions
- }
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those functions applicable to all Channels, the
- following functions may also be applied to all FitsChans:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{astDelFits}{astDelFits}: Delete the current FITS card in a FitsChan
-
- \sstitem
- \htmlref{astFindFits}{astFindFits}: Find a FITS card in a FitsChan by keyword
-
- \sstitem
- \htmlref{astGetFits$<$X$>$}{astGetFitsX}: Get a keyword value from a FitsChan
-
- \sstitem
- \htmlref{astSetFits$<$X$>$}{astSetFitsX}: Store a new keyword value in a FitsChan
-
- \sstitem
- \htmlref{astPurgeWCS}{astPurgeWCS}: Delete all WCS-related cards in a FitsChan
-
- \sstitem
- AST\_PURGEWCS: Delete all WCS-related cards in a FitsChan
-
- \sstitem
- \htmlref{astPutFits}{astPutFits}: Store a FITS header card in a FitsChan
-
- \sstitem
- \htmlref{astPutCards}{astPutCards}: Stores a set of FITS header card in a FitsChan
-
- \sstitem
- \htmlref{astRetainFits}{astRetainFits}: Ensure current card is retained in a FitsChan
-
- \sstitem
- \htmlref{astTestFits}{astTestFits}: Test if a keyword has a defined value in a FitsChan
- }
- }
-}
-\sstroutine{
- FluxFrame\sstlabel{FluxFrame}
-}{
- Measured flux description
-}{
- \sstdescription{
- A FluxFrame is a specialised form of one-dimensional \htmlref{Frame}{Frame} which
- represents various systems used to represent the signal level in an
- observation. The particular coordinate system to be used is specified
- by setting the FluxFrame's \htmlref{System}{System} attribute qualified, as necessary, by
- other attributes such as the units, etc (see the description of the
- System attribute for details).
-
- All flux values are assumed to be measured at the same frequency or
- wavelength (as given by the \htmlref{SpecVal}{SpecVal} attribute). Thus this class is
- more appropriate for use with images rather than spectra.
- }
- \sstconstructor{
- \htmlref{astFluxFrame}{astFluxFrame}
- }
- \sstdiytopic{
- Inheritance
- }{
- The FluxFrame class inherits from the Frame class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Frames, every
- FluxFrame also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{SpecVal}{SpecVal}: The spectral position at which the flux values are measured.
- }
- }
- \sstdiytopic{
- Functions
- }{
- The FluxFrame class does not define any new functions beyond those
- which are applicable to all Frames.
- }
-}
-\sstroutine{
- Frame\sstlabel{Frame}
-}{
- Coordinate system description
-}{
- \sstdescription{
- This class is used to represent coordinate systems. It does this
- in rather the same way that a frame around a graph describes the
- coordinate space in which data are plotted. Consequently, a
- Frame has a \htmlref{Title}{Title} (string) attribute, which describes the
- coordinate space, and contains axes which in turn hold
- information such as Label and Units strings which are used for
- labelling (e.g.) graphical output. In general, however, the
- number of axes is not restricted to two.
-
- Functions are available for converting Frame coordinate values
- into a form suitable for display, and also for calculating
- distances and offsets between positions within the Frame.
-
- Frames may also contain knowledge of how to transform to and
- from related coordinate systems.
- }
- \sstconstructor{
- \htmlref{astFrame}{astFrame}
- }
- \sstnotes{
- \sstitemlist{
-
- \sstitem
- When used as a \htmlref{Mapping}{Mapping}, a Frame implements a unit (null)
- transformation in both the forward and inverse directions
- (equivalent to a \htmlref{UnitMap}{UnitMap}). The \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attribute values are
- both equal to the number of Frame axes.
- }
- }
- \sstdiytopic{
- Inheritance
- }{
- The Frame class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Mappings, every
- Frame also has the following attributes (if the Frame has only one
- axis, the axis specifier can be omited from the following attribute
- names):
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AlignSystem}{AlignSystem}: Coordinate system used to align Frames
-
- \sstitem
- \htmlref{Bottom(axis)}{Bottomaxis}: Lowest axis value to display
-
- \sstitem
- \htmlref{Digits/Digits(axis)}{DigitsDigitsaxis}: Number of digits of precision
-
- \sstitem
- \htmlref{Direction(axis)}{Directionaxis}: Display axis in conventional direction?
-
- \sstitem
- \htmlref{Domain}{Domain}: Coordinate system domain
-
- \sstitem
- \htmlref{Dut1}{Dut1}: Difference between the UT1 and UTC timescale
-
- \sstitem
- \htmlref{Epoch}{Epoch}: Epoch of observation
-
- \sstitem
- \htmlref{Format(axis)}{Formataxis}: Format specification for axis values
-
- \sstitem
- \htmlref{Label(axis)}{Labelaxis}: \htmlref{Axis}{Axis} label
-
- \sstitem
- \htmlref{MatchEnd}{MatchEnd}: Match trailing axes?
-
- \sstitem
- \htmlref{MaxAxes}{MaxAxes}: Maximum number of Frame axes to match
-
- \sstitem
- \htmlref{MinAxes}{MinAxes}: Minimum number of Frame axes to match
-
- \sstitem
- \htmlref{Naxes}{Naxes}: Number of Frame axes
-
- \sstitem
- \htmlref{NormUnit(axis)}{NormUnitaxis}: Normalised axis physical units
-
- \sstitem
- \htmlref{ObsAlt}{ObsAlt}: Geodetic altitude of observer
-
- \sstitem
- \htmlref{ObsLat}{ObsLat}: Geodetic latitude of observer
-
- \sstitem
- \htmlref{ObsLon}{ObsLon}: Geodetic longitude of observer
-
- \sstitem
- \htmlref{Permute}{Permute}: Permute axis order?
-
- \sstitem
- \htmlref{PreserveAxes}{PreserveAxes}: Preserve axes?
-
- \sstitem
- \htmlref{Symbol(axis)}{Symbolaxis}: Axis symbol
-
- \sstitem
- \htmlref{System}{System}: Coordinate system used to describe the domain
-
- \sstitem
- \htmlref{Title}{Title}: Frame title
-
- \sstitem
- \htmlref{Top(axis)}{Topaxis}: Highest axis value to display
-
- \sstitem
- \htmlref{Unit(axis)}{Unitaxis}: Axis physical units
- }
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those functions applicable to all Mappings, the
- following functions may also be applied to all Frames:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{astAngle}{astAngle}: Calculate the angle subtended by two points at a third point
-
- \sstitem
- \htmlref{astAxAngle}{astAxAngle}: Find the angle from an axis, to a line through two points
-
- \sstitem
- \htmlref{astAxDistance}{astAxDistance}: Calculate the distance between two axis values
-
- \sstitem
- \htmlref{astAxOffset}{astAxOffset}: Calculate an offset along an axis
-
- \sstitem
- \htmlref{astConvert}{astConvert}: Determine how to convert between two coordinate systems
-
- \sstitem
- \htmlref{astDistance}{astDistance}: Calculate the distance between two points in a Frame
-
- \sstitem
- \htmlref{astFindFrame}{astFindFrame}: Find a coordinate system with specified characteristics
-
- \sstitem
- \htmlref{astFormat}{astFormat}: Format a coordinate value for a Frame axis
-
- \sstitem
- \htmlref{astGetActiveUnit}{astGetActiveUnit}: Determines how the Unit attribute will be used
-
- \sstitem
- \htmlref{astIntersect}{astIntersect}: Find the intersection between two geodesic curves
-
- \sstitem
- \htmlref{astMatchAxes}{astMatchAxes}: Find any corresponding axes in two Frames
-
- \sstitem
- \htmlref{astNorm}{astNorm}: Normalise a set of Frame coordinates
-
- \sstitem
- \htmlref{astOffset}{astOffset}: Calculate an offset along a geodesic curve
-
- \sstitem
- \htmlref{astOffset2}{astOffset2}: Calculate an offset along a geodesic curve in a 2D Frame
-
- \sstitem
- \htmlref{astPermAxes}{astPermAxes}: Permute the order of a Frame's axes
-
- \sstitem
- \htmlref{astPickAxes}{astPickAxes}: Create a new Frame by picking axes from an existing one
-
- \sstitem
- \htmlref{astResolve}{astResolve}: Resolve a vector into two orthogonal components
-
- \sstitem
- \htmlref{astSetActiveUnit}{astSetActiveUnit}: Specify how the Unit attribute should be used
-
- \sstitem
- \htmlref{astUnformat}{astUnformat}: Read a formatted coordinate value for a Frame axis
- }
- }
-}
-\sstroutine{
- FrameSet\sstlabel{FrameSet}
-}{
- Set of inter-related coordinate systems
-}{
- \sstdescription{
- A FrameSet consists of a set of one or more Frames (which
- describe coordinate systems), connected together by Mappings
- (which describe how the coordinate systems are inter-related). A
- FrameSet makes it possible to obtain a \htmlref{Mapping}{Mapping} between any pair
- of these Frames (i.e. to convert between any of the coordinate
- systems which it describes). The individual Frames are
- identified within the FrameSet by an integer index, with Frames
- being numbered consecutively from one as they are added to the
- FrameSet.
-
- Every FrameSet has a {\tt{"}}base{\tt{"}} \htmlref{Frame}{Frame} and a {\tt{"}}current{\tt{"}} Frame (which
- are allowed to be the same). Any of the Frames may be nominated
- to hold these positions, and the choice is determined by the
- values of the FrameSet's \htmlref{Base}{Base} and \htmlref{Current}{Current} attributes, which hold
- the indices of the relevant Frames. By default, the first Frame
- added to a FrameSet is its base Frame, and the last one added is
- its current Frame.
-
- The base Frame describes the {\tt{"}}native{\tt{"}} coordinate system of
- whatever the FrameSet is used to calibrate (e.g. the pixel
- coordinates of an image) and the current Frame describes the
- {\tt{"}}apparent{\tt{"}} coordinate system in which it should be viewed
- (e.g. displayed, etc.). Any further Frames represent a library
- of alternative coordinate systems, which may be selected by
- making them current.
-
- When a FrameSet is used in a context that requires a Frame,
- (e.g. obtaining its \htmlref{Title}{Title} value, or number of axes), the current
- Frame is used. A FrameSet may therefore be used in place of its
- current Frame in most situations.
-
- When a FrameSet is used in a context that requires a Mapping,
- the Mapping used is the one between its base Frame and its
- current Frame. Thus, a FrameSet may be used to convert {\tt{"}}native{\tt{"}}
- coordinates into {\tt{"}}apparent{\tt{"}} ones, and vice versa. Like any
- Mapping, a FrameSet may also be inverted (see \htmlref{astInvert}{astInvert}), which
- has the effect of interchanging its base and current Frames and
- hence of reversing the Mapping between them.
-
- Regions may be added into a FrameSet (since a \htmlref{Region}{Region} is a type of
- Frame), either explicitly or as components within CmpFrames. In this
- case the Mapping between a pair of Frames within a FrameSet will
- include the effects of the clipping produced by any Regions included
- in the path between the Frames.
- }
- \sstconstructor{
- \htmlref{astFrameSet}{astFrameSet}
- }
- \sstdiytopic{
- Inheritance
- }{
- The FrameSet class inherits from the Frame class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Frames, every
- FrameSet also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{Base}{Base}: FrameSet base Frame index
-
- \sstitem
- \htmlref{Current}{Current}: FrameSet current Frame index
-
- \sstitem
- \htmlref{Nframe}{Nframe}: Number of Frames in a FrameSet
-
- }
- Every FrameSet also inherits any further attributes that belong
- to its current Frame, regardless of that Frame's class. (For
- example, the \htmlref{Equinox}{Equinox} attribute, defined by the \htmlref{SkyFrame}{SkyFrame} class, is
- inherited by any FrameSet which has a SkyFrame as its current
- Frame.) The set of attributes belonging to a FrameSet may therefore
- change when a new current Frame is selected.
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those functions applicable to all Frames, the
- following functions may also be applied to all FrameSets:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{astAddFrame}{astAddFrame}: Add a Frame to a FrameSet to define a new coordinate
- system
-
- \sstitem
- \htmlref{astGetFrame}{astGetFrame}: Obtain a pointer to a specified Frame in a FrameSet
-
- \sstitem
- \htmlref{astGetMapping}{astGetMapping}: Obtain a Mapping between two Frames in a FrameSet
-
- \sstitem
- \htmlref{astRemapFrame}{astRemapFrame}: Modify a Frame's relationship to the other Frames in a
- FrameSet
-
- \sstitem
- \htmlref{astRemoveFrame}{astRemoveFrame}: Remove a Frame from a FrameSet
- }
- }
-}
-\sstroutine{
- GrismMap\sstlabel{GrismMap}
-}{
- Transform 1-dimensional coordinates using a grism dispersion equation
-}{
- \sstdescription{
- A GrismMap is a specialised form of \htmlref{Mapping}{Mapping} which transforms
- 1-dimensional coordinates using the spectral dispersion equation
- described in FITS-WCS paper III {\tt{"}}Representation of spectral
- coordinates in FITS{\tt{"}}. This describes the dispersion produced by
- gratings, prisms and grisms.
-
- When initially created, the forward transformation of a GrismMap
- transforms input {\tt{"}}grism parameter{\tt{"}} values into output wavelength
- values. The {\tt{"}}grism parameter{\tt{"}} is a dimensionless value which is
- linearly related to position on the detector. It is defined in FITS-WCS
- paper III as {\tt{"}}the offset on the detector from the point of intersection
- of the camera axis, measured in units of the effective local length{\tt{"}}.
- The units in which wavelength values are expected or returned is
- determined by the values supplied for the \htmlref{GrismWaveR}{GrismWaveR}, \htmlref{GrismNRP}{GrismNRP} and
- \htmlref{GrismG}{GrismG} attribute: whatever units are used for these attributes will
- also be used for the wavelength values.
- }
- \sstconstructor{
- \htmlref{astGrismMap}{astGrismMap}
- }
- \sstdiytopic{
- Inheritance
- }{
- The GrismMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Mappings, every
- GrismMap also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{GrismNR}{GrismNR}: The refractive index at the reference wavelength
-
- \sstitem
- \htmlref{GrismNRP}{GrismNRP}: Rate of change of refractive index with wavelength
-
- \sstitem
- \htmlref{GrismWaveR}{GrismWaveR}: The reference wavelength
-
- \sstitem
- \htmlref{GrismAlpha}{GrismAlpha}: The angle of incidence of the incoming light
-
- \sstitem
- \htmlref{GrismG}{GrismG}: The grating ruling density
-
- \sstitem
- \htmlref{GrismM}{GrismM}: The interference order
-
- \sstitem
- \htmlref{GrismEps}{GrismEps}: The angle between the normal and the dispersion plane
-
- \sstitem
- \htmlref{GrismTheta}{GrismTheta}: Angle between normal to detector plane and reference ray
- }
- }
- \sstdiytopic{
- Functions
- }{
- The GrismMap class does not define any new functions beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- Interval\sstlabel{Interval}
-}{
- A region representing an interval on one or more axes of a Frame
-}{
- \sstdescription{
- The Interval class implements a \htmlref{Region}{Region} which represents upper
- and/or lower limits on one or more axes of a \htmlref{Frame}{Frame}. For a point to
- be within the region represented by the Interval, the point must
- satisfy all the restrictions placed on all the axes. The point is
- outside the region if it fails to satisfy any one of the restrictions.
- Each axis may have either an upper limit, a lower limit, both or
- neither. If both limits are supplied but are in reverse order (so
- that the lower limit is greater than the upper limit), then the
- interval is an excluded interval, rather than an included interval.
-
- Note, The Interval class makes no allowances for cyclic nature of
- some coordinate systems (such as \htmlref{SkyFrame}{SkyFrame} coordinates). A \htmlref{Box}{Box}
- should usually be used in these cases since this requires the user
- to think about suitable upper and lower limits,
- }
- \sstconstructor{
- \htmlref{astInterval}{astInterval}
- }
- \sstdiytopic{
- Inheritance
- }{
- The Interval class inherits from the Region class.
- }
- \sstdiytopic{
- Attributes
- }{
- The Interval class does not define any new attributes beyond
- those which are applicable to all Regions.
- }
- \sstdiytopic{
- Functions
- }{
- The Interval class does not define any new functions beyond those
- which are applicable to all Regions.
- }
-}
-\sstroutine{
- IntraMap\sstlabel{IntraMap}
-}{
- Map points using a private transformation function
-}{
- \sstdescription{
- The IntraMap class provides a specialised form of \htmlref{Mapping}{Mapping} which
- encapsulates a privately-defined coordinate transformation
- other AST Mapping. This allows you to create Mappings that
- perform any conceivable coordinate transformation.
-
- However, an IntraMap is intended for use within a single program
- or a private suite of software, where all programs have access
- to the same coordinate transformation functions (i.e. can be
- linked against them). IntraMaps should not normally be stored in
- datasets which may be exported for processing by other software,
- since that software will not have the necessary transformation
- functions available, resulting in an error.
-
- You must register any coordinate transformation functions to be
- used using \htmlref{astIntraReg}{astIntraReg} before creating an IntraMap.
- }
- \sstconstructor{
- \htmlref{astIntraMap}{astIntraMap} (also see astIntraReg)
- }
- \sstdiytopic{
- Inheritance
- }{
- The IntraMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Mappings, every
- IntraMap also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{IntraFlag}{IntraFlag}: IntraMap identification string
- }
- }
- \sstdiytopic{
- Functions
- }{
- The IntraMap class does not define any new functions beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- KeyMap\sstlabel{KeyMap}
-}{
- Store a set of key/value pairs
-}{
- \sstdescription{
- The KeyMap class is used to store a set of values with associated keys
- which identify the values. The keys are strings (case-sensitive,
- trailing spaces are ignored), and the data type of the values can be
- integer, floating point,
- void pointer,
- character string or AST \htmlref{Object}{Object} pointer. Each
- value can be a scalar or a one-dimensional vector. A KeyMap is
- conceptually similar to a \htmlref{Mapping}{Mapping} in that a KeyMap transforms an
- input into an output - the input is the key, and the output is the
- value associated with the key. However, this is only a conceptual
- similarity, and it should be noted that the KeyMap class inherits from
- the Object class rather than the Mapping class. The methods of the
- Mapping class cannot be used with a KeyMap.
- }
- \sstconstructor{
- \htmlref{astKeyMap}{astKeyMap}
- }
- \sstdiytopic{
- Inheritance
- }{
- The KeyMap class inherits from the Object class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Objects, every
- KeyMap also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{KeyError}{KeyError}: \htmlref{Report}{Report} an error if the requested key does not exist?
-
- \sstitem
- \htmlref{SizeGuess}{SizeGuess}: The expected size of the KeyMap.
- }
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those functions applicable to all Objects, the
- following functions may also be applied to all KeyMaps:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{astMapGet0$<$X$>$}{astMapGet0X}: Get a named scalar entry from a KeyMap
-
- \sstitem
- \htmlref{astMapGet1$<$X$>$}{astMapGet1X}: Get a named vector entry from a KeyMap
-
- \sstitem
- \htmlref{astMapGetElem$<$X$>$}{astMapGetElemX}: Get an element of a named vector entry from a KeyMap
-
- \sstitem
- \htmlref{astMapHasKey}{astMapHasKey}: Does the KeyMap contain a named entry?
-
- \sstitem
- \htmlref{astMapKey}{astMapKey}: Return the key name at a given index in the KeyMap
-
- \sstitem
- \htmlref{astMapLenC}{astMapLenC}: Get the length of a named character entry in a KeyMap
-
- \sstitem
- \htmlref{astMapLength}{astMapLength}: Get the length of a named entry in a KeyMap
-
- \sstitem
- \htmlref{astMapPut0$<$X$>$}{astMapPut0X}: Add a new scalar entry to a KeyMap
-
- \sstitem
- \htmlref{astMapPut1$<$X$>$}{astMapPut1X}: Add a new vector entry to a KeyMap
-
- \sstitem
- \htmlref{astMapRemove}{astMapRemove}: Removed a named entry from a KeyMap
-
- \sstitem
- \htmlref{astMapSize}{astMapSize}: Get the number of entries in a KeyMap
-
- \sstitem
- \htmlref{astMapType}{astMapType}: Return the data type of a named entry in a map.
- }
- }
-}
-\sstroutine{
- LutMap\sstlabel{LutMap}
-}{
- Transform 1-dimensional coordinates using a lookup table
-}{
- \sstdescription{
- A LutMap is a specialised form of \htmlref{Mapping}{Mapping} which transforms
- 1-dimensional coordinates by using linear interpolation in a
- lookup table.
-
- Each input coordinate value is first scaled to give the index of
- an entry in the table by subtracting a starting value (the input
- coordinate corresponding to the first table entry) and dividing
- by an increment (the difference in input coordinate value
- between adjacent table entries).
-
- The resulting index will usually contain a fractional part, so
- the output coordinate value is then generated by interpolating
- linearly between the appropriate entries in the table. If the
- index lies outside the range of the table, linear extrapolation
- is used based on the two nearest entries (i.e. the two entries
- at the start or end of the table, as appropriate). If either of the
- entries used for the interplation has a value of AST\_\_BAD, then the
- interpolated value is returned as AST\_\_BAD.
-
- If the lookup table entries increase or decrease monotonically (and
- if the table contains no AST\_\_BAD values), then the inverse
- transformation may also be performed.
- }
- \sstconstructor{
- \htmlref{astLutMap}{astLutMap}
- }
- \sstdiytopic{
- Inheritance
- }{
- The LutMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Mappings, every
- LutMap also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{LutInterp}{LutInterp}: The interpolation method to use between table entries.
- }
- }
- \sstdiytopic{
- Functions
- }{
- The LutMap class does not define any new functions beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- Mapping\sstlabel{Mapping}
-}{
- Inter-relate two coordinate systems
-}{
- \sstdescription{
- This class provides the basic facilities for transforming a set
- of coordinates (representing {\tt{"}}input{\tt{"}} points) to give a new set
- of coordinates (representing {\tt{"}}output{\tt{"}} points). It is used to
- describe the relationship which exists between two different
- coordinate systems and to implement operations which make use of
- this (such as transforming coordinates and resampling grids of
- data). However, the Mapping class does not have a constructor
- function of its own, as it is simply a container class for a
- family of specialised Mappings which implement particular types
- of coordinate transformation.
- }
- \sstconstructor{
- None.
- }
- \sstdiytopic{
- Inheritance
- }{
- The Mapping class inherits from the \htmlref{Object}{Object} class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Objects, every
- Mapping also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{Invert}{Invert}: Mapping inversion flag
-
- \sstitem
- \htmlref{IsLinear}{IsLinear}: Is the Mapping linear?
-
- \sstitem
- \htmlref{IsSimple}{IsSimple}: Has the Mapping been simplified?
-
- \sstitem
- \htmlref{Nin}{Nin}: Number of input coordinates for a Mapping
-
- \sstitem
- \htmlref{Nout}{Nout}: Number of output coordinates for a Mapping
-
- \sstitem
- \htmlref{Report}{Report}: Report transformed coordinates?
-
- \sstitem
- \htmlref{TranForward}{TranForward}: Forward transformation defined?
-
- \sstitem
- \htmlref{TranInverse}{TranInverse}: Inverse transformation defined?
- }
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those functions applicable to all Objects, the
- following functions may also be applied to all Mappings:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{astDecompose}{astDecompose}: Decompose a Mapping into two component Mappings
-
- \sstitem
- \htmlref{astTranGrid}{astTranGrid}: Transform a grid of positions
-
- \sstitem
- \htmlref{astInvert}{astInvert}: Invert a Mapping
-
- \sstitem
- \htmlref{astLinearApprox}{astLinearApprox}: Calculate a linear approximation to a Mapping
-
- \sstitem
- \htmlref{astMapBox}{astMapBox}: Find a bounding box for a Mapping
-
- \sstitem
- \htmlref{astMapSplit}{astMapSplit}: Split a Mapping up into parallel component Mappings
-
- \sstitem
- \htmlref{astRate}{astRate}: Calculate the rate of change of a Mapping output
-
- \sstitem
- \htmlref{astRebin$<$X$>$}{astRebinX}: Rebin a region of a data grid
-
- \sstitem
- \htmlref{astResample$<$X$>$}{astResampleX}: Resample a region of a data grid
-
- \sstitem
- \htmlref{astRemoveRegions}{astRemoveRegions}: Remove any Regions from a Mapping
-
- \sstitem
- \htmlref{astSimplify}{astSimplify}: Simplify a Mapping
-
- \sstitem
- \htmlref{astTran1}{astTran1}: Transform 1-dimensional coordinates
-
- \sstitem
- \htmlref{astTran2}{astTran2}: Transform 2-dimensional coordinates
-
- \sstitem
- \htmlref{astTranN}{astTranN}: Transform N-dimensional coordinates
-
- \sstitem
- \htmlref{astTranP}{astTranP}: Transform N-dimensional coordinates held in separate arrays
- }
- }
-}
-\sstroutine{
- MathMap\sstlabel{MathMap}
-}{
- Transform coordinates using mathematical expressions
-}{
- \sstdescription{
- A MathMap is a \htmlref{Mapping}{Mapping} which allows you to specify a set of forward
- and/or inverse transformation functions using arithmetic operations
- and mathematical functions similar to those available in C. The
- MathMap interprets these functions at run-time, whenever its forward
- or inverse transformation is required. Because the functions are not
- compiled in the normal sense (unlike an \htmlref{IntraMap}{IntraMap}), they may be used to
- describe coordinate transformations in a transportable manner. A
- MathMap therefore provides a flexible way of defining new types of
- Mapping whose descriptions may be stored as part of a dataset and
- interpreted by other programs.
- }
- \sstconstructor{
- \htmlref{astMathMap}{astMathMap}
- }
- \sstdiytopic{
- Inheritance
- }{
- The MathMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Mappings, every
- MathMap also has the following attributes:
- \sstitemlist{
-
- \sstitem
- \htmlref{Seed}{Seed}: Random number seed
-
- \sstitem
- \htmlref{SimpFI}{SimpFI}: Forward-inverse MathMap pairs simplify?
-
- \sstitem
- \htmlref{SimpIF}{SimpIF}: Inverse-forward MathMap pairs simplify?
- }
- }
- \sstdiytopic{
- Functions
- }{
- The MathMap class does not define any new functions beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- MatrixMap\sstlabel{MatrixMap}
-}{
- Map coordinates by multiplying by a matrix
-}{
- \sstdescription{
- A MatrixMap is form of \htmlref{Mapping}{Mapping} which performs a general linear
- transformation. Each set of input coordinates, regarded as a
- column-vector, are pre-multiplied by a matrix (whose elements
- are specified when the MatrixMap is created) to give a new
- column-vector containing the output coordinates. If appropriate,
- the inverse transformation may also be performed.
- }
- \sstconstructor{
- \htmlref{astMatrixMap}{astMatrixMap}
- }
- \sstdiytopic{
- Inheritance
- }{
- The MatrixMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The MatrixMap class does not define any new attributes beyond
- those which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The MatrixMap class does not define any new functions beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- NormMap\sstlabel{NormMap}
-}{
- Normalise coordinates using a supplied Frame
-}{
- \sstdescription{
- The NormMap class implements a \htmlref{Mapping}{Mapping} which normalises coordinate
- values using the
- \htmlref{astNorm}{astNorm} function
- of a supplied \htmlref{Frame}{Frame}. The number of inputs and outputs of a NormMap
- are both equal to the number of axes in the supplied Frame.
-
- The forward and inverse transformation of a NormMap are both
- defined but are identical (that is, they do not form a real inverse
- pair in that the inverse transformation does not undo the
- normalisation, instead it reapplies it). However, the
- \htmlref{astSimplify}{astSimplify}
- function will replace neighbouring pairs of forward and inverse
- NormMaps by a single \htmlref{UnitMap}{UnitMap}.
- }
- \sstconstructor{
- \htmlref{astNormMap}{astNormMap}
- }
- \sstdiytopic{
- Inheritance
- }{
- The NormMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The \htmlref{MatrixMap}{MatrixMap} class does not define any new attributes beyond
- those which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The NormMap class does not define any new functions beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- NullRegion\sstlabel{NullRegion}
-}{
- A boundless region within a Frame
-}{
- \sstdescription{
- The NullRegion class implements a \htmlref{Region}{Region} with no bounds within a \htmlref{Frame}{Frame}.
- If the \htmlref{Negated}{Negated} attribute of a NullRegion is false, the NullRegion
- represents a Region containing no points. If the Negated attribute of
- a NullRegion is true, the NullRegion represents an infinite Region
- (that is, all points in the coordinate system are inside the NullRegion).
- }
- \sstconstructor{
- \htmlref{astNullRegion}{astNullRegion}
- }
- \sstdiytopic{
- Inheritance
- }{
- The NullRegion class inherits from the Region class.
- }
- \sstdiytopic{
- Attributes
- }{
- The NullRegion class does not define any new attributes beyond
- those which are applicable to all Regions.
- }
- \sstdiytopic{
- Functions
- }{
- The NullRegion class does not define any new functions beyond those
- which are applicable to all Regions.
- }
-}
-\sstroutine{
- Object\sstlabel{Object}
-}{
- Base class for all AST Objects
-}{
- \sstdescription{
- This class is the base class from which all other classes in the
- AST library are derived. It provides all the basic Object
- behaviour and Object manipulation facilities required throughout
- the library. There is no Object constructor, however, as Objects
- on their own are not useful.
- }
- \sstconstructor{
- None.
- }
- \sstdiytopic{
- Inheritance
- }{
- The Object base class does not inherit from any other class.
- }
- \sstdiytopic{
- Attributes
- }{
- All Objects have the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{Class}{Class}: Object class name
-
- \sstitem
- \htmlref{ID}{ID}: Object identification string
-
- \sstitem
- \htmlref{Ident}{Ident}: Permanent Object identification string
-
- \sstitem
- \htmlref{Nobject}{Nobject}: Number of Objects in class
-
- \sstitem
- \htmlref{ObjSize}{ObjSize}: The in-memory size of the Object in bytes
-
- \sstitem
- \htmlref{RefCount}{RefCount}: Count of active Object pointers
-
- \sstitem
- \htmlref{UseDefs}{UseDefs}: Allow use of default values for Object attributes?
- }
- }
- \sstdiytopic{
- Functions
- }{
- The following functions may be applied to all Objects:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{astAnnul}{astAnnul}: Annul a pointer to an Object
-
- \sstitem
- \htmlref{astBegin}{astBegin}: Begin a new AST context
-
- \sstitem
- \htmlref{astClear}{astClear}: Clear attribute values for an Object
-
- \sstitem
- \htmlref{astClone}{astClone}: Clone a pointer to an Object
-
- \sstitem
- \htmlref{astCopy}{astCopy}: Copy an Object
-
- \sstitem
- \htmlref{astDelete}{astDelete}: Delete an Object
-
- \sstitem
- \htmlref{astEnd}{astEnd}: End an AST context
-
- \sstitem
- \htmlref{astEscapes}{astEscapes}: Control whether graphical escape sequences are removed
-
- \sstitem
- \htmlref{astExempt}{astExempt}: Exempt an Object pointer from AST context handling
-
- \sstitem
- \htmlref{astExport}{astExport}: Export an Object pointer to an outer context
-
- \sstitem
- \htmlref{astGet$<$X$>$}{astGetX}: Get an attribute value for an Object
-
- \sstitem
- \htmlref{astImport}{astImport}: Import an Object pointer to the current context
-
- \sstitem
- \htmlref{astIsA$<$Class$>$}{astIsAClass}: Test class membership
-
- \sstitem
- \htmlref{astLock}{astLock}: Lock an Object for use by the calling thread
-
- \sstitem
- \htmlref{astSame}{astSame}: Do two AST pointers refer to the same Object?
-
- \sstitem
- \htmlref{astSet}{astSet}: Set attribute values for an Object
-
- \sstitem
- \htmlref{astSet$<$X$>$}{astSetX}: Set an attribute value for an Object
-
- \sstitem
- \htmlref{astShow}{astShow}: Display a textual representation of an Object on standard
- output
-
- \sstitem
- \htmlref{astTest}{astTest}: Test if an attribute value is set for an Object
-
- \sstitem
- \htmlref{astTune}{astTune}: Set or get an AST tuning parameter
-
- \sstitem
- \htmlref{astUnlock}{astUnlock}: Unlock an Object for use by other threads
-
- \sstitem
- \htmlref{astVersion}{astVersion}: Return the verson of the AST library being used.
- }
- }
-}
-\sstroutine{
- PcdMap\sstlabel{PcdMap}
-}{
- Apply 2-dimensional pincushion/barrel distortion
-}{
- \sstdescription{
- A PcdMap is a non-linear \htmlref{Mapping}{Mapping} which transforms 2-dimensional
- positions to correct for the radial distortion introduced by some
- cameras and telescopes. This can take the form either of pincushion
- or barrel distortion, and is characterized by a single distortion
- coefficient.
-
- A PcdMap is specified by giving this distortion coefficient and the
- coordinates of the centre of the radial distortion. The forward
- transformation of a PcdMap applies the distortion:
-
- RD = R $*$ ( 1 $+$ C $*$ R $*$ R )
-
- where R is the undistorted radial distance from the distortion
- centre (specified by attribute PcdCen), RD is the radial distance
- from the same centre in the presence of distortion, and C is the
- distortion coefficient (given by attribute \htmlref{Disco}{Disco}).
-
- The inverse transformation of a PcdMap removes the distortion
- produced by the forward transformation. The expression used to derive
- R from RD is an approximate inverse of the expression above.
- }
- \sstconstructor{
- \htmlref{astPcdMap}{astPcdMap}
- }
- \sstdiytopic{
- Inheritance
- }{
- The PcdMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Mappings, every
- PcdMap also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{Disco}{Disco}: PcdMap pincushion/barrel distortion coefficient
-
- \sstitem
- \htmlref{PcdCen(axis)}{PcdCenaxis}: Centre coordinates of pincushion/barrel distortion
- }
- }
- \sstdiytopic{
- Functions
- }{
- The PcdMap class does not define any new functions beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- PermMap\sstlabel{PermMap}
-}{
- Coordinate permutation Mapping
-}{
- \sstdescription{
- A PermMap is a \htmlref{Mapping}{Mapping} which permutes the order of coordinates,
- and possibly also changes the number of coordinates, between its
- input and output.
-
- In addition to permuting the coordinate order, a PermMap may
- also assign constant values to coordinates. This is useful when
- the number of coordinates is being increased as it allows fixed
- values to be assigned to any new ones.
- }
- \sstconstructor{
- \htmlref{astPermMap}{astPermMap}
- }
- \sstdiytopic{
- Inheritance
- }{
- The PermMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The PermMap class does not define any new attributes beyond
- those which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The PermMap class does not define any new functions beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- Plot\sstlabel{Plot}
-}{
- Provide facilities for 2D graphical output
-}{
- \sstdescription{
- This class provides facilities for producing 2D graphical output.
- A Plot is a specialised form of \htmlref{FrameSet}{FrameSet}, in which the base
- \htmlref{Frame}{Frame} describes a {\tt{"}}graphical{\tt{"}} coordinate system and is
- associated with a rectangular plotting area in the underlying
- graphics system. This plotting area is where graphical output
- appears. It is defined when the Plot is created.
-
- The current Frame of a Plot describes a {\tt{"}}physical{\tt{"}} coordinate
- system, which is the coordinate system in which plotting
- operations are specified. The results of each plotting operation
- are automatically transformed into graphical coordinates so as
- to appear in the plotting area (subject to any clipping which
- may be in effect).
-
- Because the \htmlref{Mapping}{Mapping} between physical and graphical coordinates
- may often be non-linear, or even discontinuous, most plotting
- does not result in simple straight lines. The basic plotting
- element is therefore not a straight line, but a geodesic curve
- (see \htmlref{astCurve}{astCurve}, \htmlref{astGenCurve}{astGenCurve} and \htmlref{astPolyCurve}{astPolyCurve}). A Plot also provides facilities for
- drawing markers or symbols (\htmlref{astMark}{astMark}), text (\htmlref{astText}{astText}) and grid lines
- (\htmlref{astGridLine}{astGridLine}). It is also possible to draw curvilinear axes with
- optional coordinate grids (\htmlref{astGrid}{astGrid}).
- A range of Plot attributes is available to allow precise control
- over the appearance of graphical output produced by these
- functions.
-
- You may select different physical coordinate systems in which to
- plot (including the native graphical coordinate system itself)
- by selecting different Frames as the current Frame of a Plot,
- using its \htmlref{Current}{Current} attribute. You may also set up clipping (see
- \htmlref{astClip}{astClip}) to limit the extent of any plotting you perform, and
- this may be done in any of the coordinate systems associated
- with the Plot, not necessarily the one you are plotting in.
-
- Like any FrameSet, a Plot may also be used as a Frame. In this
- case, it behaves like its current Frame, which describes the
- physical coordinate system.
-
- When used as a Mapping, a Plot describes the inter-relation
- between graphical coordinates (its base Frame) and physical
- coordinates (its current Frame). It differs from a normal
- FrameSet, however, in that an attempt to transform points which
- lie in clipped areas of the Plot will result in bad coordinate
- values (AST\_\_BAD).
- }
- \sstconstructor{
- \htmlref{astPlot}{astPlot}
- }
- \sstdiytopic{
- Inheritance
- }{
- The Plot class inherits from the FrameSet class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all FrameSets, every
- Plot also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- Abbrev: Abbreviate leading fields?
-
- \sstitem
- \htmlref{Border}{Border}: Draw a border around valid regions of a Plot?
-
- \sstitem
- \htmlref{Clip}{Clip}: Clip lines and/or markers at the Plot boundary?
-
- \sstitem
- \htmlref{ClipOp}{ClipOp}: Combine Plot clipping limits using a boolean OR?
-
- \sstitem
- \htmlref{Colour(element)}{Colourelement}: Colour index for a Plot element
-
- \sstitem
- \htmlref{DrawAxes(axis)}{DrawAxesaxis}: Draw axes for a Plot?
-
- \sstitem
- \htmlref{DrawTitle}{DrawTitle}: Draw a title for a Plot?
-
- \sstitem
- \htmlref{Escape}{Escape}: Allow changes of character attributes within strings?
-
- \sstitem
- \htmlref{Edge(axis)}{Edgeaxis}: Which edges to label in a Plot
-
- \sstitem
- \htmlref{Font(element)}{Fontelement}: Character font for a Plot element
-
- \sstitem
- \htmlref{Gap(axis)}{Gapaxis}: \htmlref{Interval}{Interval} between linearly spaced major axis values
-
- \sstitem
- \htmlref{Grf}{Grf}: Select the graphics interface to use.
-
- \sstitem
- \htmlref{Grid}{Grid}: Draw grid lines for a Plot?
-
- \sstitem
- \htmlref{Invisible}{Invisible}: Draw graphics in invisible ink?
-
- \sstitem
- \htmlref{LabelAt(axis)}{LabelAtaxis}: Where to place numerical labels for a Plot
-
- \sstitem
- \htmlref{LabelUnits(axis)}{LabelUnitsaxis}: Use axis unit descriptions in a Plot?
-
- \sstitem
- \htmlref{LabelUp(axis)}{LabelUpaxis}: Draw numerical Plot labels upright?
-
- \sstitem
- \htmlref{Labelling}{Labelling}: Label and tick placement option for a Plot
-
- \sstitem
- \htmlref{LogGap(axis)}{LogGapaxis}: Interval between logarithmically spaced major axis values
-
- \sstitem
- \htmlref{LogPlot(axis)}{LogPlotaxis}: Map the plot onto the screen logarithmically?
-
- \sstitem
- \htmlref{LogTicks(axis)}{LogTicksaxis}: Space the major tick marks logarithmically?
-
- \sstitem
- \htmlref{MajTickLen(axis)}{MajTickLenaxis}: Length of major tick marks for a Plot
-
- \sstitem
- \htmlref{MinTickLen(axis)}{MinTickLenaxis}: Length of minor tick marks for a Plot
-
- \sstitem
- \htmlref{MinTick(axis)}{MinTickaxis}: Density of minor tick marks for a Plot
-
- \sstitem
- \htmlref{NumLab(axis)}{NumLabaxis}: Draw numerical axis labels for a Plot?
-
- \sstitem
- \htmlref{NumLabGap(axis)}{NumLabGapaxis}: Spacing of numerical axis labels for a Plot
-
- \sstitem
- \htmlref{Size(element)}{Sizeelement}: Character size for a Plot element
-
- \sstitem
- \htmlref{Style(element)}{Styleelement}: Line style for a Plot element
-
- \sstitem
- \htmlref{TextLab(axis)}{TextLabaxis}: Draw descriptive axis labels for a Plot?
-
- \sstitem
- \htmlref{TextLabGap(axis)}{TextLabGapaxis}: Spacing of descriptive axis labels for a Plot
-
- \sstitem
- \htmlref{TickAll}{TickAll}: Draw tick marks on all edges of a Plot?
-
- \sstitem
- \htmlref{TitleGap}{TitleGap}: Vertical spacing for a Plot title
-
- \sstitem
- \htmlref{Tol}{Tol}: Plotting tolerance
-
- \sstitem
- \htmlref{Width(element)}{Widthelement}: Line width for a Plot element
- }
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those functions applicable to all FrameSets, the
- following functions may also be applied to all Plots:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{astBorder}{astBorder}: Draw a border around valid regions of a Plot
-
- \sstitem
- \htmlref{astBoundingBox}{astBoundingBox}: Returns a bounding box for previously drawn graphics
-
- \sstitem
- \htmlref{astClip}{astClip}: Set up or remove clipping for a Plot
-
- \sstitem
- \htmlref{astCurve}{astCurve}: Draw a geodesic curve
-
- \sstitem
- \htmlref{astGenCurve}{astGenCurve}: Draw a generalized curve
-
- \sstitem
- \htmlref{astGetGrfContext}{astGetGrfContext}: Get the graphics context for a Plot
-
- \sstitem
- \htmlref{astGrfPop}{astGrfPop}: Retrieve previously saved graphics functions
-
- \sstitem
- \htmlref{astGrfPush}{astGrfPush}: Save the current graphics functions
-
- \sstitem
- \htmlref{astGrfSet}{astGrfSet}: Register a graphics routine for use by a Plot
-
- \sstitem
- \htmlref{astGrid}{astGrid}: Draw a set of labelled coordinate axes
-
- \sstitem
- \htmlref{astGridLine}{astGridLine}: Draw a grid line (or axis) for a Plot
-
- \sstitem
- \htmlref{astMark}{astMark}: Draw a set of markers for a Plot
-
- \sstitem
- \htmlref{astPolyCurve}{astPolyCurve}: Draw a series of connected geodesic curves
-
- \sstitem
- \htmlref{astText}{astText}: Draw a text string for a Plot
- }
- }
- \sstdiytopic{
- Graphical Elements
- }{
- The colour index, character font, character size, line style and
- line width used for plotting can be set independently for
- various elements of the graphical output produced by a Plot.
- The different graphical elements are identified by appending the
- strings listed below as subscripts to the Plot attributes
- Colour(element), Font(element), Size(element), Style(element)
- and Width(element). These strings are case-insensitive and
- unambiguous abbreviations may be used. Elements of the graphical
- output which relate to individual axes can be referred to either
- independently (e.g. {\tt{"}}(Grid1){\tt{"}} and {\tt{"}}(Grid2){\tt{"}} ) or together (e.g.
- {\tt{"}}(Grid){\tt{"}}):
-
- \sstitemlist{
-
- \sstitem
- Axes: \htmlref{Axis}{Axis} lines drawn through tick marks using astGrid
-
- \sstitem
- Axis1: Axis line drawn through tick marks on axis 1 using astGrid
-
- \sstitem
- Axis2: Axis line drawn through tick marks on axis 2 using astGrid
-
- \sstitem
- Border: The Plot border drawn using astBorder or astGrid
-
- \sstitem
- Curves: Geodesic curves drawn using astCurve, astGenCurve or astPolyCurve
-
- \sstitem
- Grid: Grid lines drawn using astGridLine or astGrid
-
- \sstitem
- Grid1: Grid lines which cross axis 1, drawn using astGridLine or astGrid
-
- \sstitem
- Grid2: Grid lines which cross axis 2, drawn using astGridLine or astGrid
-
- \sstitem
- Markers: Graphical markers (symbols) drawn using astMark
-
- \sstitem
- NumLab: Numerical axis labels drawn using astGrid
-
- \sstitem
- NumLab1: Numerical labels for axis 1 drawn using astGrid
-
- \sstitem
- NumLab2: Numerical labels for axis 2 drawn using astGrid
-
- \sstitem
- Strings: Text strings drawn using astText
-
- \sstitem
- TextLab: Descriptive axis labels drawn using astGrid
-
- \sstitem
- TextLab1: Descriptive label for axis 1 drawn using astGrid
-
- \sstitem
- TextLab2: Descriptive label for axis 2 drawn using astGrid
-
- \sstitem
- Ticks: Tick marks (both major and minor) drawn using astGrid
-
- \sstitem
- Ticks1: Tick marks (both major and minor) for axis 1 drawn using astGrid
-
- \sstitem
- Ticks2: Tick marks (both major and minor) for axis 2 drawn using astGrid
-
- \sstitem
- \htmlref{Title}{Title}: The Plot title drawn using astGrid
- }
- }
-}
-\sstroutine{
- Plot3D\sstlabel{Plot3D}
-}{
- Provide facilities for 2D graphical output
-}{
- \sstdescription{
- A Plot3D is a specialised form of \htmlref{Plot}{Plot} that provides facilities
- for producing 3D graphical output, including fully annotated 3D
- coordinate grids. The base \htmlref{Frame}{Frame} in a Plot3D describes a 3-dimensional
- {\tt{"}}graphical{\tt{"}} coordinate system. The axes of this coordinate system are
- assumed to be right-handed (that is, if X appears horizontally to the
- right and Y vertically upwards, then Z is out of the screen towards
- the viewer), and are assumed to be equally scaled (that is, the same
- units are used to measure positions on each of the 3 axes). The upper
- and lower bounds of a volume within this graphical coordinate system
- is specified when the Plot3D is created, and all subsequent graphics
- are {\tt{"}}drawn{\tt{"}} in this volume.
-
- The Plot3D class does not itself include any ability to draw on a
- graphics device. Instead it calls upon function in an externally
- supplied module (the {\tt{"}}grf3d{\tt{"}} module) to do the required drawing.
- A module should be written that implements the functions of the
- grf3d interface using the facilities of a specific graphics system
- This module should then be linked into the application so that the
- Plot3D class can use its functions (see the description of the
- \htmlref{ast\_link}{ast_link} commands for details of how to do this). The grf3d interface
- defines a few simple functions for drawing primitives such as straight
- lines, markers and character strings. These functions all accept
- positions in the 3D graphics coordinate system (the base Frame of the
- Plot3D), and so the grf3d module must also manage the projection of
- these 3D coordinates onto the 2D viewing surface, including the choice
- of {\tt{"}}eye{\tt{"}}/{\tt{"}}camera{\tt{"}} position, direction of viewing, etc. The AST
- library includes a sample implementation of the grf3d interface
- based on the PGPLOT graphics system (see file grf3d\_pgplot.c). This
- implementation also serves to document the grf3d interface itself and
- should be consulted for details before writing a new implementation.
-
- The current Frame of a Plot3D describes a {\tt{"}}physical{\tt{"}} 3-dimensional
- coordinate system, which is the coordinate system in which plotting
- operations are specified when invoking the methods of the Plot3D
- class. The results of each plotting operation are automatically
- transformed into 3D graphical coordinates before being plotted
- using the facilities of the grf3d module linked into the application.
-
- You may select different physical coordinate systems in which to
- plot (including the native graphical coordinate system itself)
- by selecting different Frames as the current Frame of a Plot3D,
- using its \htmlref{Current}{Current} attribute.
-
- Like any \htmlref{FrameSet}{FrameSet}, a Plot3D may also be used as a Frame. In this
- case, it behaves like its current Frame, which describes the
- physical coordinate system.
-
- When used as a \htmlref{Mapping}{Mapping}, a Plot3D describes the inter-relation
- between 3D graphical coordinates (its base Frame) and 3D physical
- coordinates (its current Frame).
-
- Although the Plot3D class inherits from the Plot class, several of
- the facilities of the Plot class are not available in the Plot3D
- class, and an error will be reported if any attempt is made to use
- them. Specifically, the Plot3D class does not support clipping
- using the
- \htmlref{astClip}{astClip} function.
- Nor does it support the specification of graphics primitive functions
- at run-time using the
- \htmlref{astGrfSet}{astGrfSet}, \htmlref{astGrfPop}{astGrfPop}, \htmlref{astGrfPush}{astGrfPush} and \htmlref{astGetGrfContext}{astGetGrfContext} functions.
- }
- \sstconstructor{
- \htmlref{astPlot3D}{astPlot3D}
- }
- \sstdiytopic{
- Inheritance
- }{
- The Plot3D class inherits from the Plot class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Plots, every
- Plot3D also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- Norm: Normal vector defining the 2D plane used for text and markers
-
- \sstitem
- \htmlref{RootCorner}{RootCorner}: Specifies which edges of the 3D box should be annotated.
-
- }
- Some attributes of the Plot class refer to specific physical
- coordinate axes (e.g. Gap, LabelUp, DrawAxes, etc). For a basic
- Plot, the axis index must be 1 or 2, but for a Plot3D the axis index
- can be 1, 2 or 3.
-
- Certain Plot attributes are ignored by the Plot3D class (e.g. Edge,
- \htmlref{DrawTitle}{DrawTitle}, \htmlref{TitleGap}{TitleGap}, etc). Consult the Plot attribute documentation
- for details.
- }
- \sstdiytopic{
- Functions
- }{
- The Plot3D class does not define any new functions beyond those
- which are applicable to all Plots. Note, however, that the
- following methods inherited from the Plot class cannot be used with
- a Plot3D and will report an error if called:
- \sstitemlist{
-
- \sstitem
- \htmlref{astBoundingBox}{astBoundingBox}, astClip, \htmlref{astCurve}{astCurve}, \htmlref{astGenCurve}{astGenCurve},
- astGetGrfContext, astGrfPop, astGrfPush, astGrfSet, \htmlref{astGridLine}{astGridLine},
- \htmlref{astPolyCurve}{astPolyCurve}.
- }
- }
-}
-\sstroutine{
- PointList\sstlabel{PointList}
-}{
- A collection of points in a Frame
-}{
- \sstdescription{
- The PointList class implements a \htmlref{Region}{Region} which represents a collection
- of points in a \htmlref{Frame}{Frame}.
- }
- \sstconstructor{
- \htmlref{astPointList}{astPointList}
- }
- \sstdiytopic{
- Inheritance
- }{
- The PointList class inherits from the Region class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Regions, every
- PointList also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{ListSize}{ListSize}: The number of positions stored in the PointList
- }
- }
- \sstdiytopic{
- Functions
- }{
- The PointList class does not define any new functions beyond those
- which are applicable to all Regions.
- }
-}
-\sstroutine{
- PolyMap\sstlabel{PolyMap}
-}{
- Map coordinates using polynomial functions
-}{
- \sstdescription{
- A PolyMap is a form of \htmlref{Mapping}{Mapping} which performs a general polynomial
- transformation. Each output coordinate is a polynomial function of
- all the input coordinates. The coefficients are specified separately
- for each output coordinate. The forward and inverse transformations
- are defined independantly by separate sets of coefficients.
- }
- \sstconstructor{
- \htmlref{astPolyMap}{astPolyMap}
- }
- \sstdiytopic{
- Inheritance
- }{
- The PolyMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The PolyMap class does not define any new attributes beyond
- those which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The PolyMap class does not define any new functions beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- Polygon\sstlabel{Polygon}
-}{
- A polygonal region within a 2-dimensional Frame
-}{
- \sstdescription{
- The Polygon class implements a polygonal area, defined by a
- collection of vertices, within a 2-dimensional \htmlref{Frame}{Frame}. The vertices
- are connected together by geodesic curves within the encapsulated Frame.
- For instance, if the encapsulated Frame is a simple Frame then the
- geodesics will be straight lines, but if the Frame is a \htmlref{SkyFrame}{SkyFrame} then
- the geodesics will be great circles. Note, the vertices must be
- supplied in an order such that the inside of the polygon is to the
- left of the boundary as the vertices are traversed. Supplying them
- in the reverse order will effectively negate the polygon.
-
- Within a SkyFrame, neighbouring vertices are always joined using the
- shortest path. Thus if an edge of 180 degrees or more in length is
- required, it should be split into section each of which is less
- than 180 degrees. The closed path joining all the vertices in order
- will divide the celestial sphere into two disjoint regions. The
- inside of the polygon is the region which is circled in an
- anti-clockwise manner (when viewed from the inside of the celestial
- sphere) when moving through the list of vertices in the order in
- which they were supplied when the Polygon was created (i.e. the
- inside is to the left of the boundary when moving through the
- vertices in the order supplied).
- }
- \sstconstructor{
- \htmlref{astPolygon}{astPolygon}
- }
- \sstdiytopic{
- Inheritance
- }{
- The Polygon class inherits from the \htmlref{Region}{Region} class.
- }
- \sstdiytopic{
- Attributes
- }{
- The Polygon class does not define any new attributes beyond
- those which are applicable to all Regions.
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those functions applicable to all Regions, the
- following functions may also be applied to all Polygons:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{astDownsize}{astDownsize}: Reduce the number of vertices in a Polygon.
-
- \sstitem
- \htmlref{astOutline$<$X$>$}{astOutlineX}: Create a Polygon outlining values in a pixel array
- }
- }
-}
-\sstroutine{
- Prism\sstlabel{Prism}
-}{
- An extrusion of a region into higher dimensions
-}{
- \sstdescription{
- A Prism is a \htmlref{Region}{Region} which represents an extrusion of an existing Region
- into one or more orthogonal dimensions (specified by another Region).
- If the Region to be extruded has N axes, and the Region defining the
- extrusion has M axes, then the resulting Prism will have (M$+$N) axes.
- A point is inside the Prism if the first N axis values correspond to
- a point inside the Region being extruded, and the remaining M axis
- values correspond to a point inside the Region defining the extrusion.
-
- As an example, a cylinder can be represented by extruding an existing
- \htmlref{Circle}{Circle}, using an \htmlref{Interval}{Interval} to define the extrusion. Ih this case, the
- Interval would have a single axis and would specify the upper and
- lower limits of the cylinder along its length.
- }
- \sstconstructor{
- \htmlref{astPrism}{astPrism}
- }
- \sstdiytopic{
- Inheritance
- }{
- The Prism class inherits from the Region class.
- }
- \sstdiytopic{
- Attributes
- }{
- The Prism class does not define any new attributes beyond those
- which are applicable to all Regions.
- }
- \sstdiytopic{
- Functions
- }{
- The Prism class does not define any new functions beyond those
- which are applicable to all Regions.
- }
-}
-\sstroutine{
- RateMap\sstlabel{RateMap}
-}{
- Mapping which represents differentiation
-}{
- \sstdescription{
- A RateMap is a \htmlref{Mapping}{Mapping} which represents a single element of the
- Jacobian matrix of another Mapping. The Mapping for which the
- Jacobian is required is specified when the new RateMap is created,
- and is referred to as the {\tt{"}}encapsulated Mapping{\tt{"}} below.
-
- The number of inputs to a RateMap is the same as the number of inputs
- to its encapsulated Mapping. The number of outputs from a RateMap
- is always one. This one output equals the rate of change of a
- specified output of the encapsulated Mapping with respect to a
- specified input of the encapsulated Mapping (the input and output
- to use are specified when the RateMap is created).
-
- A RateMap which has not been inverted does not define an inverse
- transformation. If a RateMap has been inverted then it will define
- an inverse transformation but not a forward transformation.
- }
- \sstconstructor{
- \htmlref{astRateMap}{astRateMap}
- }
- \sstdiytopic{
- Inheritance
- }{
- The RateMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The RateMap class does not define any new attributes beyond those
- which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The RateMap class does not define any new functions beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- Region\sstlabel{Region}
-}{
- Represents a region within a coordinate system
-}{
- \sstdescription{
- This class provides the basic facilities for describing a region within
- a specified coordinate system. However, the Region class does not
- have a constructor function of its own, as it is simply a container
- class for a family of specialised sub-classes such as \htmlref{Circle}{Circle}, \htmlref{Box}{Box}, etc,
- which implement Regions with particular shapes.
-
- All sub-classes of Region require a \htmlref{Frame}{Frame} to be supplied when the Region
- is created. This Frame describes the coordinate system in which the
- Region is defined, and is referred to as the {\tt{"}}encapsulated Frame{\tt{"}} below.
- Constructors will also typically required one or more positions to be
- supplied which define the location and extent of the region. These
- positions must be supplied within the encapsulated Frame.
-
- The Region class inherits from the Frame class, and so a Region can be
- supplied where-ever a Frame is expected. In these cases, supplying a
- Region is equivalent to supplying a reference to its encapsulated Frame.
- Thus all the methods of the Frame class can be used on the Region class.
- For instance, the
- \htmlref{astFormat}{astFormat} function
- may be used on a Region to format an axis value.
-
- In addition, since Frame inherits from \htmlref{Mapping}{Mapping}, a Region is also a sort
- of Mapping. Transforming positions by supplying a Region to one of the
- astTran$<$X$>$ functions
- is the way to determine if a given position is inside or outside the
- Region. When used as a Mapping, most classes of Frame are equivalent to
- a \htmlref{UnitMap}{UnitMap}. However, the Region class modifies this behaviour so that a
- Region acts like a UnitMap only for input positions which are within the
- area represented by the Region. Input positions which are outside the
- area produce bad output values (i.e. the output values are equal to
- AST\_\_BAD). This behaviour is the same for both the forward and the
- inverse transformation. In this sense the {\tt{"}}inverse transformation{\tt{"}}
- is not a true inverse of the forward transformation, since applying
- the forward transformation to a point outside the Region, and then
- applying the inverse transformation results, in a set of AST\_\_BAD axis
- values rather than the original axis values. If required, the
- \htmlref{astRemoveRegions}{astRemoveRegions}
- function can be used to remove the {\tt{"}}masking{\tt{"}} effect of any Regions
- contained within a compound Mapping or \htmlref{FrameSet}{FrameSet}. It does this by
- replacing each Region with a UnitMap or equivalent Frame (depending
- on the context in which the Region is used).
-
- If the coordinate system represented by the Region is changed (by
- changing the values of one or more of the attribute which the Region
- inherits from its encapsulated Frame), the area represented by
- the Region is mapped into the new coordinate system. For instance, let's
- say a Circle (a subclass of Region) is created, a \htmlref{SkyFrame}{SkyFrame} being
- supplied to the constructor so that the Circle describes a circular
- area on the sky in FK4 equatorial coordinates. Since Region inherits
- from Frame, the Circle will have a \htmlref{System}{System} attribute and this attribute
- will be set to {\tt{"}}FK4{\tt{"}}. If the System attribute of the Region is then
- changed from FK4 to FK5, the circular area represented by the Region
- will automatically be mapped from the FK4 system into the FK5 system.
- In general, changing the coordinate system in this way may result in the
- region changing shape - for instance, a circle may change into an
- ellipse if the transformation from the old to the new coordinate system
- is linear but with different scales on each axis. Thus the specific
- class of a Region cannot be used as a guarantee of the shape in any
- particular coordinate system. If the
- \htmlref{astSimplify}{astSimplify} function
- is used on a Region, it will endeavour to return a new Region of
- a sub-class which accurately describes the shape in the current
- coordinate system of the Region (but this may not always be possible).
-
- It is possible to negate an existing Region so that it represents all
- areas of the encapsulated Frame except for the area specified when
- the Region was created.
- }
- \sstconstructor{
- None.
- }
- \sstdiytopic{
- Inheritance
- }{
- The Region class inherits from the Frame class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Frames, every
- Region also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{Adaptive}{Adaptive}: Should the area adapt to changes in the coordinate system?
-
- \sstitem
- \htmlref{Negated}{Negated}: Has the original region been negated?
-
- \sstitem
- \htmlref{Closed}{Closed}: Should the boundary be considered to be inside the region?
-
- \sstitem
- \htmlref{MeshSize}{MeshSize}: Number of points used to create a mesh covering the Region
-
- \sstitem
- \htmlref{FillFactor}{FillFactor}: Fraction of the Region which is of interest
-
- \sstitem
- \htmlref{Bounded}{Bounded}: Is the Region bounded?
-
- }
- Every Region also inherits any further attributes that belong
- to the encapsulated Frame, regardless of that Frame's class. (For
- example, the \htmlref{Equinox}{Equinox} attribute, defined by the SkyFrame class, is
- inherited by any Region which represents a SkyFrame.)
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those functions applicable to all Frames, the
- following functions may also be applied to all Regions:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{astGetRegionBounds}{astGetRegionBounds}: Get the bounds of a Region
-
- \sstitem
- \htmlref{astGetRegionFrame}{astGetRegionFrame}: Get a copy of the Frame represent by a Region
-
- \sstitem
- \htmlref{astGetRegionPoints}{astGetRegionPoints}: Get the positions that define a Region
-
- \sstitem
- \htmlref{astGetUnc}{astGetUnc}: Obtain uncertainty information from a Region
-
- \sstitem
- \htmlref{astMapRegion}{astMapRegion}: Transform a Region into a new coordinate system
-
- \sstitem
- \htmlref{astNegate}{astNegate}: Toggle the value of the Negated attribute
-
- \sstitem
- \htmlref{astOverlap}{astOverlap}: Determines the nature of the overlap between two Regions
-
- \sstitem
- \htmlref{astMask$<$X$>$}{astMaskX}: Mask a region of a data grid
-
- \sstitem
- \htmlref{astSetUnc}{astSetUnc}: Associate a new uncertainty with a Region
-
- \sstitem
- \htmlref{astShowMesh}{astShowMesh}: Display a mesh of points on the surface of a Region
- }
- }
-}
-\sstroutine{
- SelectorMap\sstlabel{SelectorMap}
-}{
- A Mapping that locates positions within one of a set of alternate
- Regions
-}{
- \sstdescription{
- A SelectorMap is a \htmlref{Mapping}{Mapping} that identifies which \htmlref{Region}{Region} contains
- a given input position.
-
- A SelectorMap encapsulates a number of Regions that all have the same
- number of axes and represent the same coordinate \htmlref{Frame}{Frame}. The number of
- inputs (\htmlref{Nin}{Nin} attribute) of the SelectorMap equals the number of axes
- spanned by one of the encapsulated Region. All SelectorMaps have only
- a single output. SelectorMaps do not define an inverse transformation.
-
- For each input position, the forward transformation of a SelectorMap
- searches through the encapsulated Regions (in the order supplied when
- the SelectorMap was created) until a Region is found which contains
- the input position. The index associated with this Region is
- returned as the SelectorMap output value (the index value is the
- position of the Region within the list of Regions supplied when the
- SelectorMap was created, starting at 1 for the first Region). If an
- input position is not contained within any Region, a value of zero is
- returned by the forward transformation.
-
- If a compound Mapping contains a SelectorMap in series with its own
- inverse, the combination of the two adjacent SelectorMaps will be
- replaced by a \htmlref{UnitMap}{UnitMap} when the compound Mapping is simplified using
- \htmlref{astSimplify}{astSimplify}.
-
- In practice, SelectorMaps are often used in conjunction with SwitchMaps.
- }
- \sstconstructor{
- \htmlref{astSelectorMap}{astSelectorMap}
- }
- \sstdiytopic{
- Inheritance
- }{
- The SelectorMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The SelectorMap class does not define any new attributes beyond those
- which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The SelectorMap class does not define any new functions beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- ShiftMap\sstlabel{ShiftMap}
-}{
- Add a constant value to each coordinate
-}{
- \sstdescription{
- A ShiftMap is a linear \htmlref{Mapping}{Mapping} which shifts each axis by a
- specified constant value.
- }
- \sstconstructor{
- \htmlref{astShiftMap}{astShiftMap}
- }
- \sstdiytopic{
- Inheritance
- }{
- The ShiftMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The ShiftMap class does not define any new attributes beyond those
- which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The ShiftMap class does not define any new functions beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- SkyAxis\sstlabel{SkyAxis}
-}{
- Store celestial axis information
-}{
- \sstdescription{
- The SkyAxis class is used to store information associated with a
- particular axis of a \htmlref{SkyFrame}{SkyFrame}. It is used internally by the AST
- library and has no constructor function. You should encounter it
- only within textual output (e.g. from \htmlref{astWrite}{astWrite}).
- }
- \sstconstructor{
- None.
- }
- \sstdiytopic{
- Inheritance
- }{
- The SkyAxis class inherits from the \htmlref{Axis}{Axis} class.
- }
-}
-\sstroutine{
- SkyFrame\sstlabel{SkyFrame}
-}{
- Celestial coordinate system description
-}{
- \sstdescription{
- A SkyFrame is a specialised form of \htmlref{Frame}{Frame} which describes
- celestial longitude/latitude coordinate systems. The particular
- celestial coordinate system to be represented is specified by
- setting the SkyFrame's \htmlref{System}{System} attribute (currently, the default
- is ICRS) qualified, as necessary, by a mean \htmlref{Equinox}{Equinox} value and/or
- an \htmlref{Epoch}{Epoch}.
-
- For each of the supported celestial coordinate systems, a SkyFrame
- can apply an optional shift of origin to create a coordinate system
- representing offsets within the celestial coordinate system from some
- specified reference point. This offset coordinate system can also be
- rotated to define new longitude and latitude axes. See attributes
- SkyRef, \htmlref{SkyRefIs}{SkyRefIs}, SkyRefP and \htmlref{AlignOffset}{AlignOffset}.
-
- All the coordinate values used by a SkyFrame are in
- radians. These may be formatted in more conventional ways for
- display by using \htmlref{astFormat}{astFormat}.
- }
- \sstconstructor{
- \htmlref{astSkyFrame}{astSkyFrame}
- }
- \sstdiytopic{
- Inheritance
- }{
- The SkyFrame class inherits from the Frame class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Frames, every
- SkyFrame also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AlignOffset}{AlignOffset}: Align SkyFrames using the offset coordinate system?
-
- \sstitem
- \htmlref{AsTime(axis)}{AsTimeaxis}: Format celestial coordinates as times?
-
- \sstitem
- \htmlref{Equinox}{Equinox}: Epoch of the mean equinox
-
- \sstitem
- \htmlref{LatAxis}{LatAxis}: Index of the latitude axis
-
- \sstitem
- \htmlref{LonAxis}{LonAxis}: Index of the longitude axis
-
- \sstitem
- \htmlref{NegLon}{NegLon}: Display longitude values in the range [-pi,pi]?
-
- \sstitem
- \htmlref{Projection}{Projection}: Sky projection description.
-
- \sstitem
- SkyRef: Position defining location of the offset coordinate system
-
- \sstitem
- \htmlref{SkyRefIs}{SkyRefIs}: Selects the nature of the offset coordinate system
-
- \sstitem
- SkyRefP: Position defining orientation of the offset coordinate system
- }
- }
- \sstdiytopic{
- Functions
- }{
- The SkyFrame class does not define any new functions beyond those
- which are applicable to all Frames.
- }
-}
-\sstroutine{
- SlaMap\sstlabel{SlaMap}
-}{
- Sequence of celestial coordinate conversions
-}{
- \sstdescription{
- An SlaMap is a specialised form of \htmlref{Mapping}{Mapping} which can be used to
- represent a sequence of conversions between standard celestial
- (longitude, latitude) coordinate systems.
-
- When an SlaMap is first created, it simply performs a unit
- (null) Mapping on a pair of coordinates. Using the \htmlref{astSlaAdd}{astSlaAdd}
- function, a series of coordinate conversion steps may then be
- added, selected from those provided by the SLALIB Positional
- Astronomy Library (Starlink User Note SUN/67). This allows
- multi-step conversions between a variety of celestial coordinate
- systems to be assembled out of the building blocks provided by
- SLALIB.
-
- For details of the individual coordinate conversions available,
- see the description of the astSlaAdd function.
- }
- \sstconstructor{
- \htmlref{astSlaMap}{astSlaMap} (also see astSlaAdd)
- }
- \sstdiytopic{
- Inheritance
- }{
- The SlaMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The SlaMap class does not define any new attributes beyond those
- which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those functions applicable to all Mappings, the
- following function may also be applied to all SlaMaps:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{astSlaAdd}{astSlaAdd}: Add a celestial coordinate conversion to an SlaMap
- }
- }
-}
-\sstroutine{
- SpecFluxFrame\sstlabel{SpecFluxFrame}
-}{
- Compound spectrum/flux Frame
-}{
- \sstdescription{
- A SpecFluxFrame combines a \htmlref{SpecFrame}{SpecFrame} and a \htmlref{FluxFrame}{FluxFrame} into a single
- 2-dimensional compound \htmlref{Frame}{Frame}. Such a Frame can for instance be used
- to describe a \htmlref{Plot}{Plot} of a spectrum in which the first axis represents
- spectral position and the second axis represents flux.
- }
- \sstconstructor{
- \htmlref{astSpecFluxFrame}{astSpecFluxFrame}
- }
- \sstdiytopic{
- Inheritance
- }{
- The SpecFluxFrame class inherits from the \htmlref{CmpFrame}{CmpFrame} class.
- }
- \sstdiytopic{
- Attributes
- }{
- The SpecFluxFrame class does not define any new attributes beyond
- those which are applicable to all CmpFrames. However, the attributes
- of the component Frames can be accessed as if they were attributes
- of the SpecFluxFrame. For instance, the SpecFluxFrame will recognise
- the {\tt{"}}\htmlref{StdOfRest}{StdOfRest}{\tt{"}} attribute and forward access requests to the component
- SpecFrame. An axis index can optionally be appended to the end of any
- attribute name, in which case the request to access the attribute will
- be forwarded to the primary Frame defining the specified axis.
- }
- \sstdiytopic{
- Functions
- }{
- The SpecFluxFrame class does not define any new functions beyond those
- which are applicable to all CmpFrames.
- }
-}
-\sstroutine{
- SpecFrame\sstlabel{SpecFrame}
-}{
- Spectral coordinate system description
-}{
- \sstdescription{
- A SpecFrame is a specialised form of one-dimensional \htmlref{Frame}{Frame} which
- represents various coordinate systems used to describe positions within
- an electro-magnetic spectrum. The particular coordinate system to be
- used is specified by setting the SpecFrame's \htmlref{System}{System} attribute (the
- default is wavelength) qualified, as necessary, by other attributes
- such as the rest frequency, the standard of rest, the epoch of
- observation, units, etc (see the description of the System attribute
- for details).
-
- By setting a value for thr \htmlref{SpecOrigin}{SpecOrigin} attribute, a SpecFrame can be made
- to represent offsets from a given spectral position, rather than absolute
- spectral values.
- }
- \sstconstructor{
- \htmlref{astSpecFrame}{astSpecFrame}
- }
- \sstdiytopic{
- Inheritance
- }{
- The SpecFrame class inherits from the Frame class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Frames, every
- SpecFrame also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AlignSpecOffset}{AlignSpecOffset}: Align SpecFrames using the offset coordinate system?
-
- \sstitem
- \htmlref{AlignStdOfRest}{AlignStdOfRest}: Standard of rest in which to align SpecFrames
-
- \sstitem
- \htmlref{RefDec}{RefDec}: Declination of the source (FK5 J2000)
-
- \sstitem
- \htmlref{RefRA}{RefRA}: Right ascension of the source (FK5 J2000)
-
- \sstitem
- \htmlref{RestFreq}{RestFreq}: Rest frequency
-
- \sstitem
- \htmlref{SourceSys}{SourceSys}: Source velocity spectral system
-
- \sstitem
- \htmlref{SourceVel}{SourceVel}: Source velocity
-
- \sstitem
- \htmlref{SourceVRF}{SourceVRF}: Source velocity rest frame
-
- \sstitem
- \htmlref{SpecOrigin}{SpecOrigin}: The zero point for SpecFrame axis values
-
- \sstitem
- \htmlref{StdOfRest}{StdOfRest}: Standard of rest
-
- }
- Several of the Frame attributes inherited by the SpecFrame class
- refer to a specific axis of the Frame (for instance \htmlref{Unit(axis)}{Unitaxis},
- \htmlref{Label(axis)}{Labelaxis}, etc). Since a SpecFrame is strictly one-dimensional,
- it allows these attributes to be specified without an axis index.
- So for instance, {\tt{"}}Unit{\tt{"}} is allowed in place of {\tt{"}}Unit(1){\tt{"}}.
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those functions applicable to all Frames, the
- following functions may also be applied to all SpecFrames:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{astSetRefPos}{astSetRefPos}: Set reference position in any celestial system
-
- \sstitem
- \htmlref{astGetRefPos}{astGetRefPos}: Get reference position in any celestial system
- }
- }
-}
-\sstroutine{
- SpecMap\sstlabel{SpecMap}
-}{
- Sequence of spectral coordinate conversions
-}{
- \sstdescription{
- A SpecMap is a specialised form of \htmlref{Mapping}{Mapping} which can be used to
- represent a sequence of conversions between standard spectral
- coordinate systems.
-
- When an SpecMap is first created, it simply performs a unit
- (null) Mapping. Using the \htmlref{astSpecAdd}{astSpecAdd}
- function, a series of coordinate conversion steps may then be
- added. This allows multi-step conversions between a variety of
- spectral coordinate systems to be assembled out of a set of building
- blocks.
-
- Conversions are available to transform between standards of rest.
- Such conversions need to know the source position as an RA and DEC.
- This information can be supplied in the form of parameters for
- the relevant conversions, in which case the SpecMap is 1-dimensional,
- simply transforming the spectral axis values. This means that the
- same source position will always be used by the SpecMap. However, this
- may not be appropriate for an accurate description of a 3-D spectral
- cube, where changes of spatial position can produce significant
- changes in the Doppler shift introduced when transforming between
- standards of rest. For this situation, a 3-dimensional SpecMap can
- be created in which axes 2 and 3 correspond to the source RA and DEC
- The SpecMap simply copies values for axes 2 and 3 from input to
- output), but modifies axis 1 values (the spectral axis) appropriately.
-
- For details of the individual coordinate conversions available,
- see the description of the astSpecAdd function.
- }
- \sstconstructor{
- \htmlref{astSpecMap}{astSpecMap} (also see astSpecAdd)
- }
- \sstdiytopic{
- Inheritance
- }{
- The SpecMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The SpecMap class does not define any new attributes beyond those
- which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those functions applicable to all Mappings, the
- following function may also be applied to all SpecMaps:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{astSpecAdd}{astSpecAdd}: Add a spectral coordinate conversion to an SpecMap
- }
- }
-}
-\sstroutine{
- SphMap\sstlabel{SphMap}
-}{
- Map 3-d Cartesian to 2-d spherical coordinates
-}{
- \sstdescription{
- A SphMap is a \htmlref{Mapping}{Mapping} which transforms points from a
- 3-dimensional Cartesian coordinate system into a 2-dimensional
- spherical coordinate system (longitude and latitude on a unit
- sphere centred at the origin). It works by regarding the input
- coordinates as position vectors and finding their intersection
- with the sphere surface. The inverse transformation always
- produces points which are a unit distance from the origin
- (i.e. unit vectors).
- }
- \sstconstructor{
- \htmlref{astSphMap}{astSphMap}
- }
- \sstdiytopic{
- Inheritance
- }{
- The SphMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Mappings, every
- SphMap also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{UnitRadius}{UnitRadius}: SphMap input vectors lie on a unit sphere?
-
- \sstitem
- \htmlref{PolarLong}{PolarLong}: The longitude value to assign to either pole
- }
- }
- \sstdiytopic{
- Functions
- }{
- The SphMap class does not define any new functions beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- Stc\sstlabel{Stc}
-}{
- Represents an instance of the IVOA STC class
-}{
- \sstdescription{
- The Stc class is an implementation of the IVOA STC class which forms
- part of the IVOA Space-Time Coordinate Metadata system. See:
-
- http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
-
- The Stc class does not have a constructor function of its own, as it
- is simply a container class for a family of specialised sub-classes
- including \htmlref{StcCatalogEntryLocation}{StcCatalogEntryLocation}, \htmlref{StcResourceProfile}{StcResourceProfile}, \htmlref{StcSearchLocation}{StcSearchLocation}
- and \htmlref{StcObsDataLocation}{StcObsDataLocation}.
- }
- \sstconstructor{
- astStc
- }
- \sstdiytopic{
- Inheritance
- }{
- The Stc class inherits from the \htmlref{Region}{Region} class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Regions, every
- Stc also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{RegionClass}{RegionClass}: The class name of the encapsulated Region.
- }
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those functions applicable to all Regions, the
- following functions may also be applied to all Stc's:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{astGetStcRegion}{astGetStcRegion}: Get a pointer to the encapsulated Region
-
- \sstitem
- \htmlref{astGetStcCoord}{astGetStcCoord}: Get information about an AstroCoords element
-
- \sstitem
- \htmlref{astGetStcNCoord}{astGetStcNCoord}: Returns the number of AstroCoords elements in an Stc
- }
- }
-}
-\sstroutine{
- StcCatalogEntryLocation\sstlabel{StcCatalogEntryLocation}
-}{
- Correspond to the IVOA STCCatalogEntryLocation class
-}{
- \sstdescription{
- The StcCatalogEntryLocation class is a sub-class of \htmlref{Stc}{Stc} used to describe
- the coverage of the datasets contained in some VO resource.
-
- See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
- }
- \sstconstructor{
- \htmlref{astStcCatalogEntryLocation}{astStcCatalogEntryLocation}
- }
- \sstdiytopic{
- Inheritance
- }{
- The StcCatalogEntryLocation class inherits from the Stc class.
- }
- \sstdiytopic{
- Attributes
- }{
- The StcCatalogEntryLocation class does not define any new attributes beyond
- those which are applicable to all Stcs.
- }
- \sstdiytopic{
- Functions
- }{
- The StcCatalogEntryLocation class does not define any new functions beyond those
- which are applicable to all Stcs.
- }
-}
-\sstroutine{
- StcObsDataLocation\sstlabel{StcObsDataLocation}
-}{
- Correspond to the IVOA ObsDataLocation class
-}{
- \sstdescription{
- The StcObsDataLocation class is a sub-class of \htmlref{Stc}{Stc} used to describe
- the coordinate space occupied by a particular observational dataset.
-
- See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
-
- An STC ObsDataLocation element specifies the extent of the
- observation within a specified coordinate system, and also specifies
- the observatory location within a second coordinate system.
-
- The AST StcObsDataLocation class inherits from Stc, and therefore
- an StcObsDataLocation can be used directly as an Stc. When used
- in this way, the StcObsDataLocation describes the location of the
- observation (not the observatory).
-
- Eventually, this class will have a method for returning an Stc
- describing the observatory location. However, AST currently does not
- include any classes of \htmlref{Frame}{Frame} for describing terrestrial or solar
- system positions. Therefore, the provision for returning observatory
- location as an Stc is not yet available. However, for terrestrial
- observations, the position of the observatory can still be recorded
- using the \htmlref{ObsLon}{ObsLon} and \htmlref{ObsLat}{ObsLat} attributes of the Frame encapsulated
- within the Stc representing the observation location (this assumes
- the observatory is located at sea level).
- }
- \sstconstructor{
- \htmlref{astStcObsDataLocation}{astStcObsDataLocation}
- }
- \sstdiytopic{
- Inheritance
- }{
- The StcObsDataLocation class inherits from the Stc class.
- }
- \sstdiytopic{
- Attributes
- }{
- The StcObsDataLocation class does not define any new attributes beyond
- those which are applicable to all Stcs.
- }
- \sstdiytopic{
- Functions
- }{
- The StcObsDataLocation class does not define any new functions beyond those
- which are applicable to all Stcs.
- }
-}
-\sstroutine{
- StcResourceProfile\sstlabel{StcResourceProfile}
-}{
- Correspond to the IVOA STCResourceProfile class
-}{
- \sstdescription{
- The StcResourceProfile class is a sub-class of \htmlref{Stc}{Stc} used to describe
- the coverage of the datasets contained in some VO resource.
-
- See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
- }
- \sstconstructor{
- \htmlref{astStcResourceProfile}{astStcResourceProfile}
- }
- \sstdiytopic{
- Inheritance
- }{
- The StcResourceProfile class inherits from the Stc class.
- }
- \sstdiytopic{
- Attributes
- }{
- The StcResourceProfile class does not define any new attributes beyond
- those which are applicable to all Stcs.
- }
- \sstdiytopic{
- Functions
- }{
- The StcResourceProfile class does not define any new functions beyond those
- which are applicable to all Stcs.
- }
-}
-\sstroutine{
- StcSearchLocation\sstlabel{StcSearchLocation}
-}{
- Correspond to the IVOA SearchLocation class
-}{
- \sstdescription{
- The StcSearchLocation class is a sub-class of \htmlref{Stc}{Stc} used to describe
- the coverage of a query.
-
- See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
- }
- \sstconstructor{
- \htmlref{astStcSearchLocation}{astStcSearchLocation}
- }
- \sstdiytopic{
- Inheritance
- }{
- The StcSearchLocation class inherits from the Stc class.
- }
- \sstdiytopic{
- Attributes
- }{
- The StcSearchLocation class does not define any new attributes beyond
- those which are applicable to all Stcs.
- }
- \sstdiytopic{
- Functions
- }{
- The StcSearchLocation class does not define any new functions beyond those
- which are applicable to all Stcs.
- }
-}
-\sstroutine{
- StcsChan\sstlabel{StcsChan}
-}{
- I/O Channel using STC-S to represent Objects
-}{
- \sstdescription{
- A StcsChan is a specialised form of \htmlref{Channel}{Channel} which supports STC-S
- I/O operations. Writing an \htmlref{Object}{Object} to an StcsChan (using
- \htmlref{astWrite}{astWrite}) will, if the Object is suitable, generate an
- STC-S description of that Object, and reading from an StcsChan will
- create a new Object from its STC-S description.
-
- When an STC-S description is read using
- \htmlref{astRead}{astRead},
- the returned AST Object may be 1) a \htmlref{PointList}{PointList} describing the STC
- AstroCoords (i.e. a single point of interest within the coordinate frame
- described by the STC-S description), or 2) a \htmlref{Region}{Region} describing the STC
- AstrCoordsArea (i.e. an area or volume of interest within the coordinate
- frame described by the STC-S description), or 3) a \htmlref{KeyMap}{KeyMap}
- containing the uninterpreted property values read form the STC-S
- description, or 4) a KeyMap containing any combination of the first
- 3 options. The attributes \htmlref{StcsArea}{StcsArea}, \htmlref{StcsCoords}{StcsCoords} and \htmlref{StcsProps}{StcsProps}
- control which of the above is returned by
- astRead.
-
- When an STC-S description is created from an AST Object using
- astWrite,
- the AST Object must be either a Region or a KeyMap. If it is a
- Region, it is assumed to define the AstroCoordsArea or (if the
- Region is a single point) the AstroCoords to write to the STC-S
- description. If the Object is a KeyMap, it may contain an entry
- with the key {\tt{"}}AREA{\tt{"}}, holding a Region to be used to define the
- AstroCoordsArea. It may also contain an entry with the key {\tt{"}}COORDS{\tt{"}},
- holding a Region (a PointList) to be used to create the
- AstroCoords. It may also contain an entry with key {\tt{"}}PROPS{\tt{"}}, holding
- a KeyMap that contains uninterpreted property values to be used as
- defaults for any STC-S properties that are not determined by the
- other supplied Regions. In addition, a KeyMap supplied to
- astWrite
- may itself hold the default STC-S properties (rather than defaults
- being held in a secondary KeyMap, stored as the {\tt{"}}PROPS{\tt{"}} entry in the
- supplied KeyMap).
-
- The
- astRead and astWrite
- functions work together so that any Object returned by
- astRead can immediately be re-written using astWrite.
-
- Normally, when you use an StcsChan, you should provide {\tt{"}}source{\tt{"}}
- and {\tt{"}}sink{\tt{"}} functions which connect it to an external data store
- by reading and writing the resulting text. These functions
- should perform any conversions needed between external character
- encodings and the internal ASCII encoding. If no such functions
- are supplied, a Channel will read from standard input and write
- to standard output.
-
- Support for STC-S is currently based on the IVOA document {\tt{"}}STC-S:
- Space-Time Coordinate (STC) Metadata Linear String Implementation{\tt{"}},
- version 1.30 (dated 5th December 2007), available at
- http://www.ivoa.net/Documents/latest/STC-S.html. Note, this
- document is a recommednation only and does not constitute an accepted
- IVOA standard.
-
- The full text of version 1.30 is supported by the StcsChan class,
- with the following exceptions and provisos:
-
- \sstitemlist{
-
- \sstitem
- When reading an STC-S phrase, case is ignored except when reading
- units strings.
-
- \sstitem
- There is no support for multiple intervals specified within a
- TimeInterval, PositionInterval, SpectralInterval or RedshiftInterval.
-
- \sstitem
- If the ET timescale is specified, TT is used instead.
-
- \sstitem
- If the TEB timescale is specified, TDB is used instead.
-
- \sstitem
- The LOCAL timescale is not supported.
-
- \sstitem
- The AST \htmlref{TimeFrame}{TimeFrame} and \htmlref{SkyFrame}{SkyFrame} classes do not currently allow a
- reference position to be specified. Consequently, any $<$refpos$>$
- specified within the Time or Space sub-phrase of an STC-S document
- is ignored.
-
- \sstitem
- The Convex identifier for the space sub-phrase is not supported.
-
- \sstitem
- The GEO\_C and GEO\_D space frames are not supported.
-
- \sstitem
- The UNITSPHERE and SPHER3 space flavours are not supported.
-
- \sstitem
- If any Error values are supplied in a space sub-phrase, then the
- number of values supplied should equal the number of spatial axes,
- and the values are assumed to specify an error box (i.e. error
- circles, ellipses, etc, are not supported).
-
- \sstitem
- The spectral and redshift sub-phrases do not support the
- following $<$refpos$>$ values: LOCAL\_GROUP\_CENTER, UNKNOWNRefPos,
- EMBARYCENTER, MOON, MERCURY, VENUS, MARS, JUPITER, SATURN, URANUS,
- NEPTUNE, PLUTO.
-
- \sstitem
- Error values are supported but error ranges are not.
-
- \sstitem
- Resolution, PixSize and Size values are ignored.
-
- \sstitem
- Space velocity sub-phrases are ignored.
- }
- }
- \sstconstructor{
- \htmlref{astStcsChan}{astStcsChan}
- }
- \sstdiytopic{
- Inheritance
- }{
- The StcsChan class inherits from the Channel class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Channels, every
- StcsChan also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{StcsArea}{StcsArea}: Return the CoordinateArea component after reading an STC-S?
-
- \sstitem
- \htmlref{StcsCoords}{StcsCoords}: Return the Coordinates component after reading an STC-S?
-
- \sstitem
- \htmlref{StcsIndent}{StcsIndent}: Controls output of indentation and line feeds
-
- \sstitem
- \htmlref{StcsLength}{StcsLength}: Controls output buffer length
-
- \sstitem
- \htmlref{StcsProps}{StcsProps}: Return the STC-S properties after reading an STC-S?
- }
- }
- \sstdiytopic{
- Functions
- }{
- The StcsChan class does not define any new functions beyond those
- which are applicable to all Channels.
- }
-}
-\sstroutine{
- SwitchMap\sstlabel{SwitchMap}
-}{
- A Mapping that encapsulates a set of alternate Mappings
-}{
- \sstdescription{
- A SwitchMap is a \htmlref{Mapping}{Mapping} which represents a set of alternate
- Mappings, each of which is used to transform positions within a
- particular region of the input or output coordinate system of the
- SwitchMap.
-
- A SwitchMap can encapsulate any number of Mappings, but they must
- all have the same number of inputs (\htmlref{Nin}{Nin} attribute value) and the
- same number of outputs (\htmlref{Nout}{Nout} attribute value). The SwitchMap itself
- inherits these same values for its Nin and Nout attributes. Each of
- these Mappings represents a {\tt{"}}route{\tt{"}} through the switch, and are
- referred to as {\tt{"}}route{\tt{"}} Mappings below. Each route Mapping transforms
- positions between the input and output coordinate space of the entire
- SwitchMap, but only one Mapping will be used to transform any given
- position. The selection of the appropriate route Mapping to use with
- any given input position is made by another Mapping, called the
- {\tt{"}}selector{\tt{"}} Mapping. Each SwitchMap encapsulates two selector
- Mappings in addition to its route Mappings; one for use with the
- SwitchMap's forward transformation (called the {\tt{"}}forward selector
- Mapping{\tt{"}}), and one for use with the SwitchMap's inverse transformation
- (called the {\tt{"}}inverse selector Mapping{\tt{"}}). The forward selector Mapping
- must have the same number of inputs as the route Mappings, but
- should have only one output. Likewise, the inverse selector Mapping
- must have the same number of outputs as the route Mappings, but
- should have only one input.
-
- When the SwitchMap is used to transform a position in the forward
- direction (from input to output), each supplied input position is
- first transformed by the forward transformation of the forward selector
- Mapping. This produces a single output value for each input position
- referred to as the selector value. The nearest integer to the selector
- value is found, and is used to index the array of route Mappings (the
- first supplied route Mapping has index 1, the second route Mapping has
- index 2, etc). If the nearest integer to the selector value is less
- than 1 or greater than the number of route Mappings, then the SwitchMap
- output position is set to a value of AST\_\_BAD on every axis. Otherwise,
- the forward transformation of the selected route Mapping is used to
- transform the supplied input position to produce the SwitchMap output
- position.
-
- When the SwitchMap is used to transform a position in the inverse
- direction (from {\tt{"}}output{\tt{"}} to {\tt{"}}input{\tt{"}}), each supplied {\tt{"}}output{\tt{"}} position
- is first transformed by the inverse transformation of the inverse
- selector Mapping. This produces a selector value for each {\tt{"}}output{\tt{"}}
- position. Again, the nearest integer to the selector value is found,
- and is used to index the array of route Mappings. If this selector
- index value is within the bounds of the array of route Mappings, then
- the inverse transformation of the selected route Mapping is used to
- transform the supplied {\tt{"}}output{\tt{"}} position to produce the SwitchMap
- {\tt{"}}input{\tt{"}} position. If the selector index value is outside the bounds
- of the array of route Mappings, then the SwitchMap {\tt{"}}input{\tt{"}} position is
- set to a value of AST\_\_BAD on every axis.
-
- In practice, appropriate selector Mappings should be chosen to
- associate a different route Mapping with each region of coordinate
- space. Note that the \htmlref{SelectorMap}{SelectorMap} class of Mapping is particularly
- appropriate for this purpose.
-
- If a compound Mapping contains a SwitchMap in series with its own
- inverse, the combination of the two adjacent SwitchMaps will be
- replaced by a \htmlref{UnitMap}{UnitMap} when the compound Mapping is simplified using
- \htmlref{astSimplify}{astSimplify}.
- }
- \sstconstructor{
- \htmlref{astSwitchMap}{astSwitchMap}
- }
- \sstdiytopic{
- Inheritance
- }{
- The SwitchMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The SwitchMap class does not define any new attributes beyond those
- which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The SwitchMap class does not define any new functions beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- TimeFrame\sstlabel{TimeFrame}
-}{
- Time coordinate system description
-}{
- \sstdescription{
- A TimeFrame is a specialised form of one-dimensional \htmlref{Frame}{Frame} which
- represents various coordinate systems used to describe positions in
- time.
-
- A TimeFrame represents a moment in time as either an Modified Julian
- Date (MJD), a Julian Date (JD), a Besselian epoch or a Julian epoch,
- as determined by the \htmlref{System}{System} attribute. Optionally, a zero point can be
- specified (using attribute \htmlref{TimeOrigin}{TimeOrigin}) which results in the TimeFrame
- representing time offsets from the specified zero point.
-
- Even though JD and MJD are defined as being in units of days, the
- TimeFrame class allows other units to be used (via the Unit attribute)
- on the basis of simple scalings (60 seconds = 1 minute, 60 minutes = 1
- hour, 24 hours = 1 day, 365.25 days = 1 year). Likewise, Julian epochs
- can be described in units other than the usual years. Besselian epoch
- are always represented in units of (tropical) years.
-
- The \htmlref{TimeScale}{TimeScale} attribute allows the time scale to be specified (that
- is, the physical process used to define the rate of flow of time).
- MJD, JD and Julian epoch can be used to represent a time in any
- supported time scale. However, Besselian epoch may only be used with the
- {\tt{"}}TT{\tt{"}} (Terrestrial Time) time scale. The list of supported time scales
- includes universal time and siderial time. Strictly, these represent
- angles rather than time scales, but are included in the list since
- they are in common use and are often thought of as time scales.
-
- When a time value is formatted it can be formated either as a simple
- floating point value, or as a Gregorian date (see the Format
- attribute).
- }
- \sstconstructor{
- \htmlref{astTimeFrame}{astTimeFrame}
- }
- \sstdiytopic{
- Inheritance
- }{
- The TimeFrame class inherits from the Frame class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Frames, every
- TimeFrame also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{AlignTimeScale}{AlignTimeScale}: Time scale in which to align TimeFrames
-
- \sstitem
- \htmlref{LTOffset}{LTOffset}: The offset of Local Time from UTC, in hours.
-
- \sstitem
- \htmlref{TimeOrigin}{TimeOrigin}: The zero point for TimeFrame axis values
-
- \sstitem
- \htmlref{TimeScale}{TimeScale}: The timescale used by the TimeFrame
-
- }
- Several of the Frame attributes inherited by the TimeFrame class
- refer to a specific axis of the Frame (for instance \htmlref{Unit(axis)}{Unitaxis},
- \htmlref{Label(axis)}{Labelaxis}, etc). Since a TimeFrame is strictly one-dimensional,
- it allows these attributes to be specified without an axis index.
- So for instance, {\tt{"}}Unit{\tt{"}} is allowed in place of {\tt{"}}Unit(1){\tt{"}}.
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those functions applicable to all Frames, the
- following functions may also be applied to all TimeFrames:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{astCurrentTime}{astCurrentTime}: Return the current system time
- }
- }
-}
-\sstroutine{
- TimeMap\sstlabel{TimeMap}
-}{
- Sequence of time coordinate conversions
-}{
- \sstdescription{
- A TimeMap is a specialised form of 1-dimensional \htmlref{Mapping}{Mapping} which can be
- used to represent a sequence of conversions between standard time
- coordinate systems.
-
- When a TimeMap is first created, it simply performs a unit
- (null) Mapping. Using the \htmlref{astTimeAdd}{astTimeAdd}
- function, a series of coordinate conversion steps may then be
- added. This allows multi-step conversions between a variety of
- time coordinate systems to be assembled out of a set of building
- blocks.
-
- For details of the individual coordinate conversions available,
- see the description of the astTimeAdd function.
- }
- \sstconstructor{
- \htmlref{astTimeMap}{astTimeMap} (also see astTimeAdd)
- }
- \sstdiytopic{
- Inheritance
- }{
- The TimeMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The TimeMap class does not define any new attributes beyond those
- which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- In addition to those functions applicable to all Mappings, the
- following function may also be applied to all TimeMaps:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{astTimeAdd}{astTimeAdd}: Add a time coordinate conversion to an TimeMap
- }
- }
-}
-\sstroutine{
- TranMap\sstlabel{TranMap}
-}{
- Mapping with specified forward and inverse transformations
-}{
- \sstdescription{
- A TranMap is a \htmlref{Mapping}{Mapping} which combines the forward transformation of
- a supplied Mapping with the inverse transformation of another
- supplied Mapping, ignoring the un-used transformation in each
- Mapping (indeed the un-used transformation need not exist).
-
- When the forward transformation of the TranMap is referred to, the
- transformation actually used is the forward transformation of the
- first Mapping supplied when the TranMap was constructed. Likewise,
- when the inverse transformation of the TranMap is referred to, the
- transformation actually used is the inverse transformation of the
- second Mapping supplied when the TranMap was constructed.
- }
- \sstconstructor{
- \htmlref{astTranMap}{astTranMap}
- }
- \sstdiytopic{
- Inheritance
- }{
- The TranMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The TranMap class does not define any new attributes beyond those
- which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The TranMap class does not define any new functions beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- UnitMap\sstlabel{UnitMap}
-}{
- Unit (null) Mapping
-}{
- \sstdescription{
- A UnitMap is a unit (null) \htmlref{Mapping}{Mapping} that has no effect on the
- coordinates supplied to it. They are simply copied. This can be
- useful if a Mapping is required (e.g. to pass to another
- function) but you do not want it to have any effect.
- The \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes of a UnitMap are always equal and
- are specified when it is created.
- }
- \sstconstructor{
- \htmlref{astUnitMap}{astUnitMap}
- }
- \sstdiytopic{
- Inheritance
- }{
- The UnitMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The UnitMap class does not define any new attributes beyond
- those which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The UnitMap class does not define any new functions beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- WcsMap\sstlabel{WcsMap}
-}{
- Implement a FITS-WCS sky projection
-}{
- \sstdescription{
- This class is used to represent sky coordinate projections as
- described in the FITS world coordinate system (FITS-WCS) paper II
- {\tt{"}}Representations of Celestial Coordinates in FITS{\tt{"}} by M. Calabretta
- and E.W. Griesen. This paper defines a set of functions, or sky
- projections, which transform longitude-latitude pairs representing
- spherical celestial coordinates into corresponding pairs of Cartesian
- coordinates (and vice versa).
-
- A WcsMap is a specialised form of \htmlref{Mapping}{Mapping} which implements these
- sky projections and applies them to a specified pair of coordinates.
- All the projections in the FITS-WCS paper are supported, plus the now
- deprecated {\tt{"}}TAN with polynomial correction terms{\tt{"}} projection which
- is refered to here by the code {\tt{"}}TPN{\tt{"}}. Using the FITS-WCS terminology,
- the transformation is between {\tt{"}}native spherical{\tt{"}} and {\tt{"}}projection
- plane{\tt{"}} coordinates (also called {\tt{"}}intermediate world coordinates{\tt{"}}.
- These coordinates may, optionally, be embedded in a space with more
- than two dimensions, the remaining coordinates being copied unchanged.
- Note, however, that for consistency with other AST facilities, a
- WcsMap handles coordinates that represent angles in radians (rather
- than the degrees used by FITS-WCS).
-
- The type of FITS-WCS projection to be used and the coordinates
- (axes) to which it applies are specified when a WcsMap is first
- created. The projection type may subsequently be determined
- using the \htmlref{WcsType}{WcsType} attribute and the coordinates on which it acts
- may be determined using the \htmlref{WcsAxis(lonlat)}{WcsAxislonlat} attribute.
-
- Each WcsMap also allows up to 100 {\tt{"}}projection parameters{\tt{"}} to be
- associated with each axis. These specify the precise form of the
- projection, and are accessed using \htmlref{PVi\_m}{PVi_m} attribute, where {\tt{"}}i{\tt{"}} is
- the integer axis index (starting at 1), and m is an integer
- {\tt{"}}parameter index{\tt{"}} in the range 0 to 99. The number of projection
- parameters required by each projection, and their meanings, are
- dependent upon the projection type (most projections either do not
- use any projection parameters, or use parameters 1 and 2 associated
- with the latitude axis). Before creating a WcsMap you should consult
- the FITS-WCS paper for details of which projection parameters are
- required, and which have defaults. When creating the WcsMap, you must
- explicitly set values for all those required projection parameters
- which do not have defaults defined in this paper.
- }
- \sstconstructor{
- \htmlref{astWcsMap}{astWcsMap}
- }
- \sstdiytopic{
- Inheritance
- }{
- The WcsMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Mappings, every
- WcsMap also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{NatLat}{NatLat}: Native latitude of the reference point of a FITS-WCS projection
-
- \sstitem
- \htmlref{NatLon}{NatLon}: Native longitude of the reference point of a FITS-WCS projection
-
- \sstitem
- \htmlref{PVi\_m}{PVi_m}: FITS-WCS projection parameters
-
- \sstitem
- PVMax: Maximum number of FITS-WCS projection parameters
-
- \sstitem
- \htmlref{WcsAxis(lonlat)}{WcsAxislonlat}: FITS-WCS projection axes
-
- \sstitem
- \htmlref{WcsType}{WcsType}: FITS-WCS projection type
- }
- }
- \sstdiytopic{
- Functions
- }{
- The WcsMap class does not define any new functions beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- WinMap\sstlabel{WinMap}
-}{
- Map one window on to another by scaling and shifting each axis
-}{
- \sstdescription{
- A Winmap is a linear \htmlref{Mapping}{Mapping} which transforms a rectangular
- window in one coordinate system into a similar window in another
- coordinate system by scaling and shifting each axis (the window
- edges being parallel to the coordinate axes).
-
- A WinMap is specified by giving the coordinates of two opposite
- corners (A and B) of the window in both the input and output
- coordinate systems.
- }
- \sstconstructor{
- \htmlref{astWinMap}{astWinMap}
- }
- \sstdiytopic{
- Inheritance
- }{
- The WinMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- The WinMap class does not define any new attributes beyond those
- which are applicable to all Mappings.
- }
- \sstdiytopic{
- Functions
- }{
- The WinMap class does not define any new functions beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- XmlChan\sstlabel{XmlChan}
-}{
- I/O Channel using XML to represent Objects
-}{
- \sstdescription{
- A XmlChan is a specialised form of \htmlref{Channel}{Channel} which supports XML I/O
- operations. Writing an \htmlref{Object}{Object} to an XmlChan (using
- \htmlref{astWrite}{astWrite}) will, if the Object is suitable, generate an
- XML description of that Object, and reading from an XmlChan will
- create a new Object from its XML description.
-
- Normally, when you use an XmlChan, you should provide {\tt{"}}source{\tt{"}}
- and {\tt{"}}sink{\tt{"}} functions which connect it to an external data store
- by reading and writing the resulting XML text. These functions
- should perform any conversions needed between external character
- encodings and the internal ASCII encoding. If no such functions
- are supplied, a Channel will read from standard input and write
- to standard output.
- }
- \sstconstructor{
- \htmlref{astXmlChan}{astXmlChan}
- }
- \sstdiytopic{
- Inheritance
- }{
- The XmlChan class inherits from the Channel class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Channels, every
- XmlChan also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{XmlFormat}{XmlFormat}: \htmlref{System}{System} for formatting Objects as XML
-
- \sstitem
- \htmlref{XmlIndent}{XmlIndent}: Controls output of indentation and line feeds
-
- \sstitem
- \htmlref{XmlLength}{XmlLength}: Controls output buffer length
-
- \sstitem
- \htmlref{XmlPrefix}{XmlPrefix}: The namespace prefix to use when writing
- }
- }
- \sstdiytopic{
- Functions
- }{
- The XmlChan class does not define any new functions beyond those
- which are applicable to all Mappings.
- }
-}
-\sstroutine{
- ZoomMap\sstlabel{ZoomMap}
-}{
- Zoom coordinates about the origin
-}{
- \sstdescription{
- The ZoomMap class implements a \htmlref{Mapping}{Mapping} which performs a {\tt{"}}zoom{\tt{"}}
- transformation by multiplying all coordinate values by the same
- scale factor (the inverse transformation is performed by
- dividing by this scale factor). The number of coordinate values
- representing each point is unchanged.
- }
- \sstconstructor{
- \htmlref{astZoomMap}{astZoomMap}
- }
- \sstdiytopic{
- Inheritance
- }{
- The ZoomMap class inherits from the Mapping class.
- }
- \sstdiytopic{
- Attributes
- }{
- In addition to those attributes common to all Mappings, every
- ZoomMap also has the following attributes:
-
- \sstitemlist{
-
- \sstitem
- \htmlref{Zoom}{Zoom}: ZoomMap scale factor
- }
- }
- \sstdiytopic{
- Functions
- }{
- The ZoomMap class does not define any new functions beyond those
- which are applicable to all Mappings.
- }
-}
-\normalsize
-
-\cleardoublepage
-\section{\label{ss:commanddescriptions}UNIX Command Descriptions}
-The commands described here are provided for use from the UNIX shell
-to assist with developing software which uses AST. To use these
-commands, you should ensure that the directory
-``/star/bin''\footnote{Or the equivalent directory if AST is installed
-in a non-standard location.} is on your PATH.
-\small
-\sstroutine{
- ast\_link\sstlabel{ast_link}
-}{
- Link a program with the AST library
-}{
- \sstdescription{
- This command should be used when building programs which use the AST
- library, in order to generate the correct arguments to allow the compiler
- to link your program. The arguments generated are written to standard
- output but may be substituted into the compiler command line in the
- standard UNIX way using backward quotes (see below).
-
- By default, it is assumed that you are building a stand-alone program
- which does not produce graphical output. However, switches are provided
- for linking other types of program.
- }
- \sstinvocation{
- cc program.c -L/star/lib `ast\_link [switches]` -o program
- }
- \sstexamples{
- \sstexamplesubsection{
- cc display.c -L/star/lib `ast\_link -pgplot` -o display
- }{
- Compiles and links a C program called ``display'' which uses
- the standard version of PGPLOT for graphical output.
- }
- \sstexamplesubsection{
- cc plotit.c -L. -L/star/lib `ast\_link -grf` -lgrf -o plotit
- }{
- Compiles and links a C program ``plotit''. The ``-grf''
- switch indicates that graphical output will be delivered through
- a graphical interface which you have implemented yourself, which
- corresponds to the interface required by the current version of AST.
- Here, this interface is supplied by means of the ``-lgrf'' library
- reference.
- }
- \sstexamplesubsection{
- cc plotit.c -L. -L/star/lib `ast\_link -grf\_v2.0` -lgrf -o plotit
- }{
- Compiles and links a C program ``plotit''. The ``-grf\_v2.0''
- switch indicates that graphical output will be delivered through
- a graphical interface which you have implemented yourself, which
- corresponds to the interface required by version 2.0 of AST.
- Here, this interface is supplied by means of the ``-lgrf'' library
- reference.
- }
- }
- \sstdiytopic{
- Switches
- }{
- The following switches may optionally be given to this command to
- modify its behaviour:
-
- \sstitemlist{
-
- \sstitem
- ``-csla'': Ignored. Provided for backward compatibility only.
-
- \sstitem
- ``-fsla'': Ignored. Provided for backward compatibility only.
-
- \sstitem
- ``-ems'': Requests that the program be linked so that error messages
- produced by the AST library are delivered via the Starlink EMS (Error
- Message Service) library (Starlink \htmlref{System}{System} Note SSN/4). By default,
- error messages are simply written to standard error.
-
- \sstitem
- ``-drama'': Requests that the program be linked so that error messages
- produced by the AST library are delivered via the DRAMA Ers (Error
- Reporting Service) library. By default, error messages are simply
- written to standard error.
-
- \sstitem
- ``-grf'': Requests that no arguments be generated to specify which
- 2D graphics system is used to display output from the AST library. You
- should use this option only if you have implemented an interface to a
- new graphics system yourself and wish to provide your own arguments for
- linking with it. This switch differs from the other ``grf'' switches in
- that it assumes that your graphics module implements the complete
- interface required by the current version of AST. If future versions of
- AST introduce new functions to the graphics interface, this switch will
- cause ``unresolved symbol'' errors to occur during linking, warning you
- that you need to implement new functions in your graphics module. To
- avoid such errors, you can use one of the other, version-specific,
- switches in place of the ``-grf'' switch, but these will cause run-time
- errors to be reported if any AST function is invoked which requires
- facilities not in the implemented interface.
-
- \sstitem
- ``-grf\_v2.0'': This switch is equivalent to the ``-mygrf'' switch.
- It indicates that you want to link with your own graphics module
- which implements the 2D graphics interface required by V2.0 of AST.
-
- \sstitem
- ``-grf\_v3.2'': Indicates that you want to link with your own
- graphics module which implements the 2D graphics interface required by
- V3.2 of AST.
-
- \sstitem
- ``-myerr'': Requests that no arguments be generated to specify how
- error messages produced by the AST library should be delivered. You
- should use this option only if you have implemented an interface to a
- new error delivery system yourself and wish to provide your own
- arguments for linking with it.
-
- \sstitem
- ``-mygrf'': This switch has been superceeded by the ``-grf'' switch,
- but is retained in order to allow applications to be linked with a
- graphics module which implements the 2D interface used by AST V2.0. It
- is equivalent to the ``-grf\_v2.0'' switch.
-
- \sstitem
- ``-pgp'': Requests that the program be linked so that 2D
- graphical output from the AST library is displayed via the
- Starlink version of the PGPLOT graphics package (which uses GKS
- for its output). By default, no 2D graphics package is linked and
- this will result in an error at run time if AST routines are
- invoked that attempt to generate graphical output.
-
- \sstitem
- ``-pgplot'': Requests that the program be linked so that 2D
- graphical output from the AST library is displayed via
- the standard (or ``native'') version of the PGPLOT graphics
- package. By default, no 2D graphics package is linked and this will
- result in an error at run time if AST routines are invoked that
- attempt to generate graphical output.
-
- \sstitem
- ``-grf3d'': Requests that no arguments be generated to specify which
- 3D graphics system is used to display output from the AST library. You
- should use this option only if you have implemented an interface to a
- new 3D graphics system yourself and wish to provide your own arguments
- for linking with it.
-
- \sstitem
- ``-pgp3d'': Requests that the program be linked so that 3D
- graphical output from the AST library is displayed via the
- Starlink version of the PGPLOT graphics package (which uses GKS
- for its output). By default, no 3D graphics package is linked and
- this will result in an error at run time if AST routines are
- invoked that attempt to generate graphical output.
-
- \sstitem
- ``-pgplot3d'': Requests that the program be linked so that 3D
- graphical output from the AST library is displayed via
- the standard (or ``native'') version of the PGPLOT graphics
- package. By default, no 3D graphics package is linked and this will
- result in an error at run time if AST routines are invoked that
- attempt to generate graphical output.
- }
- }
- \sstdiytopic{
- SLALIB
- }{
- The AST distribution includes a cut down subset of the C version of
- the SLALIB library written by Pat Wallace. This subset contains only
- the functions needed by the AST library. It is built as part of the
- process of building AST and is distributed under GPL (and is thus
- compatible with the AST license). Previous version of this script
- allowed AST applications to be linked against external SLALIB
- libraries (either Fortran or C) rather than the internal version.
- The current version of this script does not provide this option,
- and always uses the internal SLALIB library. However, for backward
- compatibility, this script still allows the {\tt{"}}-fsla{\tt{"}} and {\tt{"}}-csla{\tt{"}} flags
- (previously used for selecting which version of SLALIB to use) to be
- specified, but they will be ignored.
- }
-}
-\sstroutine{
- ast\_link\_adam\sstlabel{ast_link_adam}
-}{
- Link an ADAM program with the AST library
-}{
- \sstdescription{
- This command should only be used when building Starlink ADAM programs
- which use the AST library, in order to generate the correct arguments
- to allow the ADAM ``alink'' command to link the program. The arguments
- generated are written to standard output but may be substituted into
- the ``alink'' command line in the standard UNIX way using backward
- quotes (see below).
-
- By default, it is assumed that you are building an ADAM program which
- does not produce graphical output. However, switches are provided for
- linking other types of program. This command should not be used when
- building stand-alone (non-ADAM) programs. Use the ``\htmlref{ast\_link}{ast_link}'' command
- instead.
- }
- \sstinvocation{
- alink program.o -L/star/lib `ast\_link\_adam [switches]`
- }
- \sstexamples{
- \sstexamplesubsection{
- alink display.o -L/star/lib `ast\_link\_adam -pgplot`
- }{
- Links an ADAM program ``display'' which uses the standard
- version of PGPLOT for graphical output.
- }
- \sstexamplesubsection{
- alink plotit.o -L. -L/star/lib `ast\_link\_adam -grf` -lgrf
- }{
- Links an ADAM program ``plotit'', written in C. The ``-grf''
- switch indicates that graphical output will be delivered through
- a graphical interface which you have implemented yourself, which
- corresponds to the interface required by the current version of AST.
- Here, this interface is supplied by means of the ``-lgrf'' library
- reference.
- }
- \sstexamplesubsection{
- alink plotit.o -L. -L/star/lib `ast\_link\_adam -grf\_v2.0` -lgrf
- }{
- Links an ADAM program ``plotit'', written in C. The ``-grf\_v2.0''
- switch indicates that graphical output will be delivered through
- a graphical interface which you have implemented yourself, which
- corresponds to the interface required by version 2.0 of AST. Here,
- this interface is supplied by means of the ``-lgrf'' library
- reference.
- }
- }
- \sstdiytopic{
- Switches
- }{
- The following switches may optionally be given to this command to
- modify its behaviour:
-
- \sstitemlist{
-
- \sstitem
- ``-csla'': Ignored. Provided for backward compatibility only.
-
- \sstitem
- ``-fsla'': Ignored. Provided for backward compatibility only.
-
- \sstitem
- ``-grf'': Requests that no arguments be generated to specify which
- 2D graphics system is used to display output from the AST library. You
- should use this option only if you have implemented an interface to a
- new graphics system yourself and wish to provide your own arguments for
- linking with it. This switch differs from the other ``grf'' switches in
- that it assumes that your graphics module implements the complete
- interface required by the current version of AST. If future versions of
- AST introduce new functions to the graphics interface, this switch will
- cause ``unresolved symbol'' errors to occur during linking, warning you
- that you need to implement new functions in your graphics module. To
- avoid such errors, you can use one of the other, version-specific,
- switches in place of the ``-grf'' switch, but these will cause run-time
- errors to be reported if any AST function is invoked which requires
- facilities not in the implemented interface.
-
- \sstitem
- ``-grf\_v2.0'': This switch is equivalent to the ``-mygrf'' switch.
- It indicates that you want to link with your own graphics module which
- implements the 2D graphics interface required by V2.0 of AST.
-
- \sstitem
- ``-grf\_v3.2'': Indicates that you want to link with your own graphics
- module which implements the 2D graphics interface required by V3.2 of AST.
-
- \sstitem
- ``-myerr'': Requests that no arguments be generated to specify how
- error messages produced by the AST library should be delivered. You
- should use this option only if you have implemented an interface to a
- new error delivery system yourself and wish to provide your own
- arguments for linking with it. By default, error messages are delivered
- in the standard ADAM way via the EMS Error Message Service (Starlink
- \htmlref{System}{System} Note SSN/4).
-
- \sstitem
- ``-mygrf'': This switch has been superceeded by the ``-grf'' switch,
- but is retained in order to allow applications to be linked with a
- graphics module which implements the interface used by AST V2.0. It is
- equivalent to the ``-grf\_v2.0'' switch.
-
- \sstitem
- ``-pgp'': Requests that the program be linked so that 2D
- graphical output from the AST library is displayed via the
- Starlink version of the PGPLOT graphics package (which uses GKS
- for its output). By default, no graphics package is linked and
- this will result in an error at run time if AST routines are
- invoked that attempt to generate graphical output.
-
- \sstitem
- ``-pgplot'': Requests that the program be linked so that 2D
- graphical output from the AST library is displayed via the
- standard (or ``native'') version of the PGPLOT graphics
- package. By default, no graphics package is linked and this will
- result in an error at run time if AST routines are invoked that
- attempt to generate graphical output.
-
- \sstitem
- ``-grf3d'': Requests that no arguments be generated to specify which
- 3D graphics system is used to display output from the AST library. You
- should use this option only if you have implemented an interface to a
- new 3D graphics system yourself and wish to provide your own arguments
- for linking with it.
-
- \sstitem
- ``-pgp3d'': Requests that the program be linked so that 3D
- graphical output from the AST library is displayed via the
- Starlink version of the PGPLOT graphics package (which uses GKS
- for its output). By default, no 3D graphics package is linked and
- this will result in an error at run time if AST routines are
- invoked that attempt to generate graphical output.
-
- \sstitem
- ``-pgplot3d'': Requests that the program be linked so that 3D
- graphical output from the AST library is displayed via
- the standard (or ``native'') version of the PGPLOT graphics
- package. By default, no 3D graphics package is linked and this will
- result in an error at run time if AST routines are invoked that
- attempt to generate graphical output.
- }
- }
- \sstdiytopic{
- SLALIB
- }{
- The AST distribution includes a cut down subset of the C version of
- the SLALIB library written by Pat Wallace. This subset contains only
- the functions needed by the AST library. It is built as part of the
- process of building AST and is distributed under GPL (and is thus
- compatible with the AST license). Previous version of this script
- allowed AST applications to be linked against external SLALIB
- libraries (either Fortran or C) rather than the internal version.
- The current version of this script does not provide this option,
- and always uses the internal SLALIB library. However, for backward
- compatibility, this script still allows the {\tt{"}}-fsla{\tt{"}} and {\tt{"}}-csla{\tt{"}} flags
- (previously used for selecting which version of SLALIB to use) to be
- specified, but they will be ignored.
- }
-}
-\normalsize
-
-\newpage
-\section{\xlabel{FitsWcsCoverage}\label{ss:fitswcscoverage}FITS-WCS Coverage}
-
-This appendix gives details of the \htmlref{FitsChan}{FitsChan} class
-implementation of the conventions described in the FITS-WCS papers
-available at
-\htmladdnormallink{http://fits.gsfc.nasa.gov/fits\_wcs.html}
-{http://fits.gsfc.nasa.gov/fits_wcs.html}. These conventions are
-used only if the \htmlref{Encoding}{Encoding} attribute of the FitsChan
-has the value ``FITS-WCS'' (whether set explicitly or defaulted). It
-should always be possible for a \htmlref{FrameSet}{FrameSet} to be read
-(using the
-\htmlref{astRead}{astRead}
-function) from a FitsChan containing a header which conforms to these
-conventions. However, only those FrameSets which are compatible with the
-FITS-WCS model can be \emph{written} to a FitsChan using the
-\htmlref{astWrite}{astWrite}
-function. For instance, if the current \htmlref{Frame}{Frame} of a
-FrameSet is re-mapped using, say, an arbitrary \htmlref{MathMap}{MathMap}
-then the FrameSet will no longer be compatible with the FITS-WCS model,
-and so will not be written out successfully to a FitsChan.
-
-The following sub-sections describe the details of the implementation of
-each of the first four FITS-WCS papers. Here, the term ``pixel axes'' is
-used to refer to the FITS pixel coordinates (i.e. the centre of the
-first image pixel has a value 1.0 on each pixel axis); the term ``IWC
-axes'' is used to refer to the axes of the Intermediate World Coordinate
-system; and the term ``WCS axes'' is used to refer to the axes of the final
-physical coordinate system described by the CTYPE\emph{i} keywords.
-
-\subsection{Paper I - General Linear Coordinates}
-When reading a \htmlref{FrameSet}{FrameSet} from a \htmlref{FitsChan}{FitsChan}, these conventions are used if the CTYPE\emph{i} keyword
-values within the FitsChan do not conform to the conventions described in
-later papers, in which case the axes are assumed to be linear. When
-writing a FrameSet to a FitsChan, these conventions are used for axes
-which are described by a simple \htmlref{Frame}{Frame} (\emph{i.e.} not a
-\htmlref{SkyFrame}{SkyFrame}, \htmlref{SpecFrame}{SpecFrame}, \emph{etc.}).
-
-Table \ref{tab:fitspaper1} describes the use made by AST of each keyword
-defined by FITS-WCS paper I.
-
-\begin{table}[htbp]
-\begin{tabular}{|l|p{2.5in}|p{2.5in}|}
-\hline
-\multicolumn{1}{|c|}{{\bf Keyword}} & \multicolumn{1}{c|}{{\bf Read}}
-& \multicolumn{1}{c|}{{\bf Write}} \\ \hline
-
-\fitskey{WCSAXES\emph{a}}{Ignored.}{Set to the number of axes in the WCS
-Frame - only written if different to NAXIS.}
-
-\fitskey{CRVAL\emph{ia}}{Used to create the pixel to WCS
-\htmlref{Mapping}{Mapping}.}{Always written (see ``Choice of Reference
-Point'' below).}
-
-\fitskey{CRPIX\emph{ja}}{Used to create the pixel to WCS Mapping.}{Always
-written (see ``Choice of Reference Point'' below).}
-
-\fitskey{CDELT\emph{ia}}{Used to create the pixel to WCS Mapping.}{Only
-written if the \htmlref{CDMatrix}{CDMatrix} attribute of the FitsChan is
-set to zero.}
-
-\fitskey{CROTA\emph{i}}{Used to create the pixel to WCS Mapping.}{Only
-written in FITS-AIPS and FITS-AIPS++ encodings.}
-
-\fitskey{CTYPE\emph{ia}}{Used to choose the class and attributes of the
-WCS Frame, and to create the pixel to WCS Mapping (note, ``STOKES'' and
-``COMPLEX'' axes are treated as unknown linear axes).}{Always written
-(see ``Use and Choice of CTYPE keywords'' below).}
-
-\fitskey{CUNIT\emph{ia}}{Used to set the Units attributes
-of the WCS Frame.}{Only written if the Units attribute of the WCS Frame
-has been set explicitly. If so, the Units value for each axis is used as
-the CUNIT value.}
-
-\fitskey{PC\emph{i\_j}\emph{a}}{Used to create the pixel to WCS
-Mapping.}{Only written if the CDMatrix attribute of the FitsChan is set to
-zero.}
-
-\fitskey{CD\emph{i\_j}\emph{a}}{Used to create the pixel to WCS
-Mapping.}{Only written if the CDMatrix attribute of the FitsChan is set to
-a non-zero value.}
-
-\fitskey{PV\emph{i\_ma}}{Ignored for linear axes.}{Not written if the axes
-are linear.}
-
-\fitskey{PS\emph{i\_ma}}{Ignored.}{Not used.}
-
-\fitskey{WCSNAME\emph{a}}{Used to set the \htmlref{Domain}{Domain} attribute
-of the WCS Frame.}{Only written if the Domain attribute of the WCS Frame
-has been set explicitly. If so, the Domain value is used as the WCSNAME
-value.}
-
-\fitskey{CRDER\emph{ia}}{Ignored.}{Not used.}
-
-\fitskey{CSYER\emph{ia}}{Ignored.}{Not used.}
-
-\hline
-\end{tabular}
-\vspace{3.mm}
-\caption{Use of FITS-WCS Paper I keywords}
-\label{tab:fitspaper1}
-\end{table}
-
-\subsubsection{Requirements for a Successful Write Operation}
-When writing a \htmlref{FrameSet}{FrameSet} in which the WCS
-\htmlref{Frame}{Frame} is a simple Frame to a \htmlref{FitsChan}{FitsChan},
-success depends on the \htmlref{Mapping}{Mapping} from pixel coordinates
-(the base Frame in the FrameSet) to the WCS Frame being linear. The write
-operation will fail if this is not the case.
-
-\subsubsection{Use and Choice of CTYPE\emph{i} keywords}
-When reading a \htmlref{FrameSet}{FrameSet} from a \htmlref{FitsChan}{FitsChan} the CTYPE\emph{i} values in the FitsChan are used to set the
-Symbol attributes of the corresponding WCS \htmlref{Frame}{Frame}. The Label attributes of the WCS Frame are set from
-the CNAME\emph{i} keywords, if present in the header. Otherwise they are set
-from the CTYPE\emph{i} comments strings in the header, so long as each
-axis has a unique non-blank comment. Otherwise, the Label attributes are
-set to the CTYPE\emph{i} values. The above procedure is over-ridden if
-the axis types conform to the conventions described in paper II or III,
-as described below.
-
-When writing a FrameSet to a FitsChan, each CTYPE\emph{i} value is set to
-the value of the Symbol attribute of the corresponding axis in the Frame
-being written. If a value has been set explicitly for the axis Label
-attribute, it is used as the axis comment (except that any existing
-comments in the FitsChan take precedence if the keyword value has not
-changed). The above procedure is over-ridden if the Frame is a
-\htmlref{SkyFrame}{SkyFrame} or a \htmlref{SpecFrame}{SpecFrame}, in which
-case the CTYPE\emph{i} value is derived from the \htmlref{System}{System}
-attribute of the Frame and the nature of the pixel to WCS \htmlref{Mapping}{Mapping}
-according to the conventions of papers II and III, as described below.
-
-\subsubsection{Choice of Reference Point}
-When writing a \htmlref{FrameSet}{FrameSet} to a
-\htmlref{FitsChan}{FitsChan}, the pixel coordinates of the
-reference point for linear axes (i.e. the CRPIX\emph{j} values) are
-chosen as follows:
-
-\begin{itemize}
-\item If the FrameSet is being written to a FitsChan which previously
-contained a set of axis descriptions with the same identifying letter,
-then the previous CRVAL\emph{j}values are converted into the coordinate system
-of the \htmlref{Frame}{Frame} being written (if possible). These values are then
-transformed into the pixel Frame, and the closest integer pixel values
-are used as the CRPIX keywords.
-\item If the above step could not be performed for any reason, the
-central pixel is used as the reference point. This requires the image
-dimensions to be present in the FitsChan in the form of a set of
-NAXIS\emph{j} keyword values.
-\item If both the above two steps failed for any axis, then the pixel
-reference position is set to a value of 1.0 on the pixel axis.
-\end{itemize}
-
-The pixel to WCS \htmlref{Mapping}{Mapping} is then used to find the corresponding
-CRVAL\emph{j}values.
-
-Again, the above procedure is over-ridden if the Frame is a
-\htmlref{SkyFrame}{SkyFrame} or a \htmlref{SpecFrame}{SpecFrame}, in which
-case the conventions of papers II and III are used as described below.
-
-
-\subsubsection{Choice of Axis Ordering}
-When reading a \htmlref{FrameSet}{FrameSet} from a
-\htmlref{FitsChan}{FitsChan}, WCS axis $i$ in the current
-\htmlref{Frame}{Frame} of the
-resulting FrameSet corresponds to axis $i$ in the FITS header.
-
-When writing a FrameSet to a FitsChan, the axis ordering for the FITS
-header is chosen to make the CD\emph{i\_j} or PC\emph{i\_j} matrix
-predominately diagonal. This means that the axis numbering in the FITS
-header will not necessarily be the same as that in the AST Frame.
-
-\subsubsection{Alternate Axis Descriptions}
-When reading a \htmlref{FrameSet}{FrameSet} from a
-\htmlref{FitsChan}{FitsChan} which contains alternate axis descriptions,
-each complete set of axis descriptions results in a single \htmlref{Frame}{Frame} being added
-to the final FrameSet, connected via an appropriate
-\htmlref{Mapping}{Mapping} to the base pixel Frame. The \htmlref{Ident}{Ident} attribute of the Frame is set to hold the single alphabetical
-character which is used to identify the set of axis descriptions within
-the FITS header (a single space is used for the primary axis descriptions).
-
-When writing a FrameSet to a FitsChan, it is assumed that the base Frame
-represents pixel coordinates, and the current Frame represents the
-primary axis descriptions. If there are any other Frames present in the
-FrameSet, an attempt is made to create a complete set of ``alternate''
-set of keywords describing each additional Frame. The first character in
-the Ident attribute of the Frame is used as the single character
-descriptor to be appended to the keyword, with the proviso that a given
-character can only be used once. If a second Frame is found with an Ident
-attribute which has already been used, its Ident attribute is ignored and
-the next free character is used instead. Note, failure to write a set of
-alternate axis descriptions does not result in failure of the entire
-write operation: the primary axis descriptions are still written,
-together with any other alternate axis descriptions which can be produced
-successfully.
-
-\subsection{Paper II - Celestial Coordinates}
-These conventions are used when reading a \htmlref{FrameSet}{FrameSet}
-from a \htmlref{FitsChan}{FitsChan} containing appropriate CTYPE\emph{i}
-values, and when writing a FrameSet in which the WCS \htmlref{Frame}{Frame}
-is a \htmlref{SkyFrame}{SkyFrame}.
-
-Table \ref{tab:fitspaper2} describes the use made by AST of each keyword
-whose meaning is defined or extended by FITS-WCS paper II.
-
-\begin{table}[htbp]
-\begin{tabular}{|l|p{2.5in}|p{2.5in}|}
-\hline
-\multicolumn{1}{|c|}{{\bf Keyword}} & \multicolumn{1}{c|}{{\bf Read}}
-& \multicolumn{1}{c|}{{\bf Write}} \\ \hline
-
-\fitskey{CTYPE\emph{ia}}{All coordinate systems and projection types
-listed in paper II are supported (note, ``CUBEFACE'' axes are treated as
-unknown linear axes). In addition, "-HPX" (HEALPix) is supported.}{Determined by the \htmlref{System}{System} attribute
-of the SkyFrame and the \htmlref{WcsType}{WcsType} attribute of the
-\htmlref{WcsMap}{WcsMap} within the FrameSet.}
-
-\fitskey{CUNIT\emph{ia}}{Ignored (assumed to be 'degrees').}{Not written.}
-
-\fitskey{PV\emph{i\_ma}}{Used to create the pixel to WCS \htmlref{Mapping}{Mapping} (values
-are stored as attributes of a WcsMap within this Mapping).}{Values are
-obtained from the WcsMap in the pixel to WCS Mapping.}
-
-\fitskey{LONPOLE\emph{a}}{Used to create the pixel to WCS Mapping. Also
-stored as a \htmlref{PVi\_m}{PVi_m} attribute for the longitude axis of the WcsMap.}{Only
-written if not equal to the default value defined in paper II (see
-``Choice of LONPOLE/LATPOLE'' below).}
-
-\fitskey{LATPOLE\emph{a}}{Used to create the pixel to WCS Mapping. Also
-stored as a PV attribute for the longitude axis of the WcsMap.}{Only
-written if not equal to the default value defined in paper II (see
-``Choice of LONPOLE/LATPOLE'' below).}
-
-\fitskey{RADESYS\emph{a}}{Used to set the attributes of the SkyFrame. All
-values supported except that ecliptic coordinates are currently always
-assumed to be FK5.}{Always written. Determined by the System attribute of
-the SkyFrame.}
-
-\fitskey{EQUINOX\emph{a}}{Used to set the \htmlref{Equinox}{Equinox} attribute
-of the SkyFrame.}{Written if relevant. Determined by the Equinox attribute of
-the SkyFrame.}
-
-\fitskey{EPOCH}{Used to set the Equinox attribute of the SkyFrame.}{Only
-written if using FITS-AIPS and FITS-AIPS++ encodings. Determined by the Equinox attribute
-of the SkyFrame.}
-
-\fitskey{MJD-OBS}{Used to set the \htmlref{Epoch}{Epoch} attribute of the
-SkyFrame. DATE-OBS is used if MJD-OBS is not present. A default value based on
-RADESYS and EQUINOX is used if used if DATE-OBS is not present
-either.}{Determined by the Epoch attribute of the SkyFrame. Only written
-if this attribute has been set to an explicit value (in which case
-DATE-OBS is also written).}
-
-\hline
-\end{tabular}
-\vspace{3.mm}
-\caption{Use of FITS-WCS Paper II keywords}
-\label{tab:fitspaper2}
-\end{table}
-
-\subsubsection{Requirements for a Successful Write Operation}
-When writing a \htmlref{FrameSet}{FrameSet} in which the WCS
-\htmlref{Frame}{Frame} is a \htmlref{SkyFrame}{SkyFrame} to a
-\htmlref{FitsChan}{FitsChan}, success depends on the following conditions
-being met:
-
-\begin{enumerate}
-\item The \htmlref{Mapping}{Mapping} from pixel coordinates (the base Frame
-in the FrameSet) to the WCS SkyFrame includes a \htmlref{WcsMap}{WcsMap}.
-\item The Mapping prior to the WcsMap (\emph{i.e.} from pixel to IWC) is linear.
-\item The Mapping after the WcsMap (\emph{i.e.} from native spherical to
-celestial coordinates) is a spherical rotation for the
-celestial axes, and linear for any other axes.
-\end{enumerate}
-
-If any of the above conditions do not hold, the write operation will be
-unsuccessful.
-
-\subsubsection{Choice of LONPOLE/LATPOLE}
-When writing a \htmlref{FrameSet}{FrameSet} to a \htmlref{FitsChan}{FitsChan},
-the choice of LONPOLE and LATPOLE values is determined as follows:
-
-\begin{enumerate}
-
-\item If the projection represented by the \htmlref{WcsMap}{WcsMap} is
-azimuthal, then any values set for attributes ``PV\emph{i}\_3''
-and ``PV\emph{i}\_4'' (where ``\emph{i}'' is the index of the longitude axis)
-within the WcsMap are used as the LONPOLE and LATPOLE values. Reading a
-FrameSet from a FITS-WCS header
-results in the original LONPOLE and LATPOLE values being stored within a
-WcsMap within the FrameSet. Consequently, if a FrameSet is read from a
-FITS-WCS header and it is subsequently written out to a new FITS-WCS
-header, the original LONPOLE and LATPOLE values will usually be used in
-the new header (the exception being if the WcsMap has been explicitly
-modified before being written out again). Any extra rotation of the sky
-is absorbed into the CD\emph{i\_j} or PC\emph{i\_j} matrix (this is
-possible only if the projection is azimuthal).
-
-\item If the projection represented by the WcsMap is azimuthal but no
-values have been set for the ``PV\emph{i}\_3'' and ``PV\emph{i}\_4''
-attributes within the WcsMap, then the default LONPOLE and LATPOLE values
-are used. This results in no LONPOLE or LATPOLE keywords being stored in
-the header since default values are never stored. Any extra rotation of
-the sky is absorbed into the CD\emph{i\_j} or PC\emph{i\_j} matrix (this
-is possible only if the projection is azimuthal).
-
-\item If the projection represented by the WcsMap is not azimuthal,
-then the values of LONPOLE and LATPOLE are found by transforming the
-coordinates of the celestial north pole (\emph{i.e} longitude zero,
-latitude $+\pi/2$) into native spherical coordinates using the inverse of
-the \htmlref{Mapping}{Mapping} which follows the WcsMap.
-
-\end{enumerate}
-
-\subsubsection{User Defined Fiducial Points}
-When reading a \htmlref{FrameSet}{FrameSet} from a \htmlref{FitsChan}{FitsChan}, projection parameters
-PV\emph{i}\_0, PV\emph{i}\_1 and PV\emph{i}\_2 (for longitude axis
-``\emph{i}'') are used to indicate a user-defined fiducial point as
-described in section 2.5 of paper II. This results in a shift of IWC
-origin being applied \emph{before} the \htmlref{WcsMap}{WcsMap} which converts
-IWC into
-native spherical coordinates. The values of these projection parameters,
-if supplied, are stored as the corresponding \htmlref{PVi\_m}{PVi_m} attributes
-of the WcsMap.
-
-When writing a FrameSet to a FitsChan, the PV attributes of the WcsMap
-determine the native coordinates of the fiducial point (the fixed
-defaults for each projection described in paper II are used if the PV
-attributes of the WcsMap have not been assigned a value). The
-corresponding celestial coordinates are used as the CRVAL\emph{i}
-keywords and the corresponding pixel coordinates as the CRPIX\emph{j}
-keywords.
-
-\subsubsection{Common Non-Standard Features}
-A collection of common non-standard features are supported when reading a
-\htmlref{FrameSet}{FrameSet} from a \htmlref{FitsChan}{FitsChan}, in addition
-to those embodied within the
-available encodings of the FitsChan class. These are translated into the
-equivalent standard features before being used to create a FrameSet.
-Note, the reverse operation is never performed: it is not possible to
-produce non-standard features when writing a FrameSet to a FitsChan
-(other than those embodied in the available encodings of the FitsChan
-class). The supported non-standard features include:
-
-\begin{itemize}
-\item EQUINOX keywords with string values equal to a date preceded
-by the letter B or J (\emph{e.g.} ``B1995.0'').
-
-\item EQUINOX or EPOCH keywords with value zero (these are converted to
-B1950).
-
-\item The IRAF ``ZPX'' projection is represented by a
-\htmlref{WcsMap}{WcsMap} with type of
-AST\_\_ZPN. \htmlref{Projection}{Projection} parameter values are read from any WAT\emph{i\_nnn}
-keywords, and corresponding \htmlref{PVi\_m}{PVi_m} attributes are set in the
-WcsMap. The WAT\emph{i\_nnn} keywords may specify corrections to the basic
-ZPN projection by including ``lngcor'' or ``latcor'' terms. There is no
-direct equivalent in FITS-WCS to these terms and so they are ignored. If
-these correction terms are found, ASTWARN keywords are added to the FitsChan
-containing a warning message (but only if the \htmlref{Warnings}{Warnings}
-attribute of the FitsChan is set appropriately).
-
-\item The IRAF ``TNX'' projection is represented by a WcsMap with type of
-AST\_\_TPN (a distorted TAN projection retained within the WcsMap class
-from an early draft of the FITS-WCS paper II). Projection parameter values
-are read from any WAT\emph{i\_nnn} keywords, and corresponding PV
-attributes are set in the WcsMap. If the TNX projection cannot be
-converted exactly into an AST\_\_TPN projection, ASTWARN keywords are
-added to the FitsChan containing a warning message (but only if the
-Warnings attribute of the FitsChan is set appropriately).
-
-\item ``QV'' parameters for TAN projections (as produced by
-\htmladdnormallink{AUTOASTROM}{http://www.astro.gla.ac.uk/users/norman/star/autoastrom/}
-are renamed to the equivalent ``PV'' parameters.
-
-\end{itemize}
-
-\subsection{Paper III - Spectral Coordinates}
-These conventions are used when reading a \htmlref{FrameSet}{FrameSet}
-from a \htmlref{FitsChan}{FitsChan} which includes appropriate
-CTYPE\emph{i} values, and when writing a FrameSet in which
-the WCS \htmlref{Frame}{Frame} is a \htmlref{SpecFrame}{SpecFrame}.
-
-Table \ref{tab:fitspaper3} describes the use made by AST of each keyword
-whose meaning is defined or extended by FITS-WCS paper III.
-
-\begin{table}[htbp]
-\begin{tabular}{|l|p{2.5in}|p{2.5in}|}
-\hline
-\multicolumn{1}{|c|}{{\bf Keyword}} & \multicolumn{1}{c|}{{\bf Read}}
-& \multicolumn{1}{c|}{{\bf Write}} \\ \hline
-
-\fitskey{CTYPE\emph{ia}}{All coordinate systems and projection types
-listed in paper III are supported, except for the ``-TAB''
-algorithm (the ``-LOG'' algorithm may also be applied to non-spectral linear
-axes).}{Determined by the \htmlref{System}{System} attribute of the
-SpecFrame and the nature of the pixel to SpecFrame
-\htmlref{Mapping}{Mapping}.}
-
-\fitskey{CUNIT\emph{ia}}{Used to set the Units attribute of
-the SpecFrame (note, SpecFrames always have an ``active'' Units attribute
-(see \htmlref{astSetActiveUnit}{astSetActiveUnit}).}{Always written.}
-
-\fitskey{PV\emph{i\_ma}}{Used to create the pixel to WCS Mapping (values
-are stored as attributes of a \htmlref{GrismMap}{GrismMap}).}
-{Set from the attributes of the GrismMap, if present, and if set explicitly.}
-
-\fitskey{SPECSYS\emph{a}}{Used to set the \htmlref{StdOfRest}{StdOfRest}
-attribute of the SpecFrame (all systems are supported except CMBDIPOL).}
-{Set from the StdOfRest attribute of the SpecFrame, but only if it has been
-set explicitly.}
-
-\fitskey{SSYSOBS\emph{a}}{Ignored.}{Never written.}
-
-\fitskey{OBSGEO-X/Y/Z}{Used to set the \htmlref{ObsLon}{ObsLon} and
-\htmlref{ObsLat}{ObsLat} attributes of the Frame (the observers
-height above sea level is ignored).}{Set from the ObsLon and ObsLat
-attributes of the Frame, if they have been set explicitly (it is
-assumed that the observer is at sea level).}
-
-\fitskey{MJD-AVG}{Used to set the \htmlref{Epoch}{Epoch} attributes of
-the SpecFrame.}{Set from the Epoch attribute of the SpecFrame, if it has
-been set explicitly.}
-
-\fitskey{SSYSSRC\emph{a}}{Used to set the \htmlref{SourceVRF}{SourceVRF} attribute of the
-SpecFrame
-(all systems are supported except CMBDIPOL).} {Set from the SourceVRF
-attribute of the SpecFrame.}
-
-\fitskey{ZSOURCE\emph{a}}{Used to set the \htmlref{SourceVel}{SourceVel}
-attribute of the SpecFrame (the SourceVRF attribute
-is first set to the system indicated by the SSYSSRC keyword, and the
-ZSOURCE value is then converted to an apparent radial velocity and stored
-as the SourceVel attribute).}
-{Set from the SourceVel attribute of
-the SpecFrame, if it has been set explicitly (the SourceVel value is
-first converted from apparent radial velocity to redshift).}
-
-\fitskey{VELOSYS\emph{a}}{Ignored.}{Set from the attributes of the
-SpecFrame that define the standard of rest and the observers position.}
-
-\fitskey{RESTFRQ\emph{a}}{Used to set the \htmlref{RestFreq}{RestFreq}
-attribute of the SpecFrame.}{Set from the RestFreq attribute of the
-SpecFrame, but only if the System attribute is not set to
-``WAVE'', ``VOPT'', ``ZOPT'' or ``AWAV'', and only if RestFreq has been set
-explicitly.}
-
-\fitskey{RESTWAV\emph{a}}{Used to set the RestFreq
-attribute of the SpecFrame (after conversion from wavelength to frequency).}
-{Set from the RestFreq attribute of the SpecFrame (after conversion), but only if the
-System attribute is set to ``WAVE'', ``VOPT'', ``ZOPT'' or
-``AWAV'', and only if RestFreq has been set explicitly.}
-
-\fitskey{CNAME\emph{ia}}{Used to set the Label attributes of
-the WCS Frame keywords.}{Set from the Label attributes of the WCS Frame,
-if they have been set explicitly.}
-\hline
-\end{tabular}
-\vspace{3.mm}
-\caption{Use of FITS-WCS Paper III keywords}
-\label{tab:fitspaper3}
-\end{table}
-
-\subsubsection{Requirements for a Successful Write Operation}
-When writing a \htmlref{FrameSet}{FrameSet} in which the WCS \htmlref{Frame}{Frame} is a \htmlref{SpecFrame}{SpecFrame} to a
-\htmlref{FitsChan}{FitsChan}, the write operation is successful only if
-the \htmlref{Mapping}{Mapping} from pixel coordinates (the base Frame
-in the FrameSet) to the SpecFrame satisfies one of the following conditions:
-
-\begin{enumerate}
-\item It is linear.
-\item It is logarithmic.
-\item It is linear if the SpecFrame were to be re-mapped into one of the
-other spectral systems supported by FITS-WCS paper III.
-\item It contains a \htmlref{GrismMap}{GrismMap}, and the Mapping before the GrismMap (from
-pixel coordinates to grism parameter) is linear, and the Mapping after the
-GrismMap is either null or represents a change of spectral system from wavelength (air or
-vacuum) to one of the supported spectral systems.
-\end{enumerate}
-
-If none of the above conditions hold, the write operation will be
-unsuccessful.
-
-\subsubsection{Common Non-Standard Features}
-The following non-standard features are supported when reading spectral
-axes from a \htmlref{FitsChan}{FitsChan}:
-
-\begin{itemize}
-\item Conversion of ``-WAV'', ``-FRQ'' and ``-VEL'' algorithm codes
-(specified in early drafts of paper III) to the corresponding
-``-X2P'' form.
-\item Conversion of ``RESTFREQ'' to ``RESTFRQ''
-\end{itemize}
-
-\subsection{Paper IV - Coordinate Distortions}
-
-This paper proposes that an additional 4 character code be appended to
-the end of the CTYPE\emph{i} keyword to specify the nature of any
-distortion away from the basic algorithm described by the first 8
-characters of the CTYPE\emph{i} value. Currently AST ignores all such
-codes when reading a \htmlref{FrameSet}{FrameSet} from a
-\htmlref{FitsChan}{FitsChan} (except for the ``-SIP'' code
-defined by the SIRTF project - see below). This means that a FrameSet can
-still be read from such headers, but the \htmlref{Mapping}{Mapping} which
-gives the WCS
-position associated with a given pixel position will reflect only the
-basic algorithm and will not include the effects of the distortion.
-
-If such a FrameSet is then written out to a FitsChan, the resulting
-CTYPE\emph{i} keywords will include no distortion code.
-
-\subsubsection{The ``-SIP'' distortion code}
-
-The SIRTF project
-(\htmladdnormallink{http://sirtf.caltech.edu/SSC/}{http://sirtf.caltech.edu/SSC/})
-has developed its own system for encoding 2-dimensional image distortion
-within a FITS header, based on the proposals of paper IV. A description
-of this system is available in \htmladdnormallink
-{http://sirtf.caltech.edu/SSC/documents/WCSkeywords\_v1.3.pdf}
-{http://sirtf.caltech.edu/SSC/documents/WCSkeywords\_v1.3.pdf}. In this
-system, the presence of distortion is indicated by appending the
-distortion code ``-SIP'' to the CTYPE\emph{i} keyword values for the
-celestial axes. The distortion takes the form of a polynomial function
-which is applied to the pixel coordinates, after subtraction of the
-CRPIX\emph{j} values.
-
-This system is a strictly 2 dimensional system. When reading a
-\htmlref{FrameSet}{FrameSet} from a \htmlref{FitsChan}{FitsChan} which
-includes the ``-SIP'' distortion code, AST assumes that it
-is only applied to the first 2 WCS axes in a FITS header (i.e.
-CTYPE1 and CTYPE2). If the ``-SIP'' distortion code is attached to other
-axes, it will be ignored. The distortion itself is represented by a
-\htmlref{PolyMap}{PolyMap} within the resulting FrameSet.
-
-If a FrameSet is read from a FitsChan which includes ``-SIP''
-distortion, and an attempt is then made to write this FrameSet out to a
-FitsChan, the write operation will fail unless the distortion is
-insignificant (\emph{i.e.} is so small that the tests for linearity built
-into AST are passed). In this case, no distortion code will be appended to
-the resulting CTYPE\emph{i} keyword values.
-
-\newpage
-\section{\xlabel{changes_and_new_features}\label{ss:changes}Changes and New Features}
-
-\subsection{Changes Introduced in V1.1}
-
-The following describes the most significant changes which occurred in
-the AST library between versions V1.0 and V1.1 (not the most recent
-version):
-
-\begin{enumerate}
-
-\item A new ``How To\ldots'' section (\secref{ss:howto}) has been
-added to this document. It contains simple recipies for performing
-commonly-required operations using AST.
-
-\item A new \htmlref{astUnformat}{astUnformat} function has been provided to read formatted
-coordinate values for the axes of a \htmlref{Frame}{Frame}
-(\secref{ss:unformattingaxisvalues}). In essence, this function is the
-inverse of \htmlref{astFormat}{astFormat}. It may be used to decode user-supplied formatted
-values representing coordinates, turning them into numerical values
-for processing. Celestial coordinates may also be read using this
-function (\secref{ss:unformattingskyaxisvalues}) and free-format input
-is supported.
-
-\item The Format attribute string used by a \htmlref{SkyFrame}{SkyFrame} when formatting
-celestial coordinate values now allows the degrees/hours field to be
-omitted, so that celestial coordinates may be given in ({\em{e.g.}})
-arc-minutes and/or arc-seconds
-(\secref{ss:formattingskyaxisvalues}). As a result, the degrees/hours
-field is no longer included by default. A new ``t'' format specifier
-has been introduced (see the Format attribute) to allow minutes and/or
-seconds of time to be specified if required.
-
-\item A new function \htmlref{astMapBox}{astMapBox} has been introduced. This allows you to
-find the extent of a ``bounding box'' which just encloses another box
-after it has been transformed by a \htmlref{Mapping}{Mapping}. A typical use might be to
-calculate the size which an image would have if it were transformed by
-the Mapping.
-
-\item A new class of \htmlref{Object}{Object}, the \htmlref{IntraMap}{IntraMap}, has been introduced
-(\secref{ss:intramaps}). This is a specialised form of Mapping which
-encapsulates a privately-defined coordinate transformation function
-({\em{e.g.}}\ written in C) so that it may be used like any other AST
-Mapping. This allows you to create Mappings that perform any
-conceivable coordinate transformation.
-
-\item The internal integrity of a \htmlref{FrameSet}{FrameSet} is now automatically
-preserved whenever changes are made to any attributes which affect the
-current Frame (either by setting or clearing their values). This is
-accomplished by appropriately re-mapping the current Frame to account
-for any change to the coordinate system which it represents
-(\secref{ss:framesetintegrity}).
-
-\item The internal structure of a FrameSet is now automatically tidied
-to eliminate redundant nodes whenever any of its Frames is removed or
-re-mapped. Automatic simplification of any compound Mappings which
-result may also occur. The effect of this change is to prevent the
-accumulation of unnecessary structure in FrameSets which are
-repeatedly modified.
-
-\item Some improvements have been made to the algorithms for
-simplifying compound Mappings, as used by \htmlref{astSimplify}{astSimplify}.
-
-\item The textual representation used for some Objects
-({\em{i.e.}}\ when they are written to a \htmlref{Channel}{Channel}) has changed
-slightly, but remains compatible with earlier versions of AST.
-
-\item Interfaces to the internal functions and macros used by AST for
-handling memory and error conditions are now provided {\em{via}} the
-``ast.h'' header file. This is for the benefit of those writing
-({\em{e.g.}}) new graphics interfaces for AST.
-
-\item A problem has been fixed which could result when using \htmlref{astRead}{astRead}
-to read FITS headers in which the CDELT value is zero. Previously,
-this could produce a Mapping whose inverse transformation was not
-defined and this could unnecessarily restrict the use to which it
-could be put. The problem has been overcome by supplying a suitable
-small CDELT value for FITS axes which have only a single pixel.
-
-\item A bug has been fixed which could occasionally cause a \htmlref{MatrixMap}{MatrixMap}
-to be used with the wrong \htmlref{Invert}{Invert} attribute value when it forms part of
-a compound Mapping which is being simplified using astSimplify.
-
-
-\item A problem has been fixed which could prevent tick marks being
-drawn on a coordinate axis close to a singularity in the coordinate
-system.
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.2}
-
-The following describes the most significant changes which occurred in
-the AST library between versions V1.1 and V1.2 (not the most recent
-version):
-
-\begin{enumerate}
-\item A new function, \htmlref{astPolyCurve}{astPolyCurve}, has been introduced to allow more
-efficient plotting of multiple geodesic curves
-(\secref{ss:plottinggeodesics}).
-
-\item A new set of functions, \htmlref{astResample$<$X$>$}{astResampleX}, has been introduced
-to perform resampling of gridded data such as images
-({\em{i.e.}}\ re-gridding) under the control of a geometrical
-transformation specified by a \htmlref{Mapping}{Mapping}.
-
-\item The command-line options ``$-$pgp'' and ``$-$pgplot'', which
-were previously synonymous when used with the ``\htmlref{ast\_link}{ast_link}'' and
-``\htmlref{ast\_link\_adam}{ast_link_adam}'' commands, are no longer synonymous. The option
-``$-$pgp'' now causes linking with the Starlink version of PGPLOT
-(which uses GKS to generate its output), while ``$-$pgplot'' links
-with the standard (or ``native'') version of PGPLOT.
-
-\item The function \htmlref{astMapBox}{astMapBox} has been changed to execute more quickly,
-although this has been achieved at the cost of some loss of robustness
-when used with difficult Mappings.
-
-\item A new value of ``FITS-IRAF'' has been introduced for the
-\htmlref{Encoding}{Encoding} attribute of a \htmlref{FitsChan}{FitsChan}. This new encoding provides an
-interim solution to the problem of storing coordinate system
-information in FITS headers, until the proposed new FITS-WCS standard
-becomes stable.
-
-\item When a \htmlref{FrameSet}{FrameSet} is created from a set of FITS header cards (by
-reading from a FitsChan using a ``foreign'' encoding), the base \htmlref{Frame}{Frame}
-of the resulting FrameSet now has its \htmlref{Domain}{Domain} attribute set to
-``GRID''. This reflects the fact that this Frame represents FITS data
-grid coordinates (equivalent to FITS pixel coordinates---see
-\secref{ss:domainconventions}). Previously, this Domain value was not
-set.
-
-\item \htmlref{astFindFits}{astFindFits} now ignores trailing spaces in its keyword template.
-
-\item \htmlref{astPutFits}{astPutFits} now recognises ``D'' and ``d'' as valid exponent
-characters in floating point numbers.
-
-\item The FitsChan class is now more tolerant of common minor
-violations of the FITS standard.
-
-\item The FitsChan class now incorporates an improved test for the
-linearity of Mappings, allowing more reliable conversion of AST data
-into FITS (using ``foreign'' FITS encodings).
-
-\item Some further improvements have been made to the algorithms for
-simplifying compound Mappings, as used by \htmlref{astSimplify}{astSimplify}.
-
-\item A new \htmlref{UnitRadius}{UnitRadius} attribute has been added to the \htmlref{SphMap}{SphMap}
-class. This allows improved simplification of compound Mappings
-(CmpMaps) involving SphMaps and typically improves performance when
-handling FITS world coordinate information.
-
-\item A \htmlref{MatrixMap}{MatrixMap} no longer propagates input coordinate values of
-AST\_\_BAD automatically to all output coordinates. If certain output
-coordinates do not depend on the affected input coordinate(s) because
-the relevant matrix elements are zero, then they may now remain valid.
-
-\item A minor bug has been corrected which could cause certain
-projections which involve half the celestial sphere to produce valid
-coordinates for the other (unprojected) half of the sphere as well.
-
-\item A bug has been fixed which could occasionally cause \htmlref{astConvert}{astConvert}
-to think that conversion between a \htmlref{CmpFrame}{CmpFrame} and another Frame was
-possible when, in fact, it wasn't.
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.3}
-
-The following describes the most significant changes which occurred in
-the AST library between versions V1.2 and V1.3 (not the most recent
-version):
-
-\begin{enumerate}
-\item A new set of functions, \htmlref{astResample$<$X$>$}{astResampleX}, has been introduced to
-provide efficient resampling of gridded data, such as spectra and
-images, under the control of a geometrical transformation specified by
-a \htmlref{Mapping}{Mapping}. A variety of sub-pixel interpolation schemes are supported.
-
-\item A new class, \htmlref{PcdMap}{PcdMap}, has been introduced. This is a specialised
-form of Mapping which implements 2-dimensional pincushion or barrel
-distortion.
-
-\item A bug has been fixed which could cause a \htmlref{FitsChan}{FitsChan} to produce too
-many digits when formatting floating point values for inclusion in a
-FITS header if the numerical value was in the range -0.00099999\ldots
-to -0.0001.
-
-\item A bug has been fixed which could cause a FitsChan to lose the
-comment associated with a string value in a FITS header.
-
-\item A FitsChan now reports an error if it reads a FITS header which
-identifies a non-standard sky projection (previously, this was
-accepted without error and a Cartesian projection used instead).
-
-\item A bug has been fixed which could prevent conversion between the
-coordinate systems represented by two CmpFrames. This could only occur
-if the CmpFrames contained a relatively large number of nested Frames.
-
-%\item A bug has been fixed which could cause a program to crash if
-%FrameSets were nested inside each other (for example, if one \htmlref{FrameSet}{FrameSet}
-%had another FrameSet added to it for use as a \htmlref{Frame}{Frame} or Mapping). The
-%problem could only occur if the nested structure was loaded from a data
-%c+
-%file (using \htmlref{astRead}{astRead}).
-%c-
-%f+
-%file (using AST\_READ).
-%f-
-%
-\item Further improvements have been made to the simplification of
-compound Mappings, including fixes for several bugs which could cause
-indefinite looping or unwanted error messages.
-
-\item Some memory leaks have been fixed.
-
-\item A small number of documentation errors have been corrected.
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.4}
-
-The following describes the most significant changes which have occurred
-in the AST library between versions V1.3 and V1.4 (not the most recent
-version):
-
-\begin{enumerate}
-\item A new \htmlref{MathMap}{MathMap} class has been introduced. This is a form of
-\htmlref{Mapping}{Mapping} that allows you to define coordinate transformations in a
-flexible and transportable way using arithmetic operations and
-mathematical functions similar to those available in C.
-
-\item {\bf{WARNING---INCOMPATIBLE CHANGE.}} Transformation functions
-used with the \htmlref{IntraMap}{IntraMap} class (see, for example, \htmlref{astIntraReg}{astIntraReg}) now
-require a ``this'' pointer as their first parameter. {\bf{Existing
-implementations will not continue to work correctly with this version
-of AST unless this parameter is added.}} There is no need for existing
-software to make use of this pointer, but it must be present.
-
-This change has been introduced so that transformation functions can gain
-access to IntraMap attributes.
-
-\item A new \htmlref{IntraFlag}{IntraFlag} attribute has been added to the IntraMap
-class. This allows the transformation functions used by IntraMaps to
-adapt to produce the required transformation on a per-IntraMap basis
-(\secref{ss:intraflag}).
-
-\item The \htmlref{Plot}{Plot} attributes MajTickLen and MinTickLen, which control the
-length of major and minor tick marks on coordinate axes, may now be
-subscripted using an axis number. This allows tick marks of different
-lengths to be used on each axis. It also allows tick marks to be
-suppressed on one axis only by setting the length to zero.
-
-\item The value of the Plot attribute NumLab, which controls the
-plotting of numerical labels on coordinate axes, no longer has any
-effect on whether labelling of a coordinate grid is interior or
-exterior (as controlled by the \htmlref{Labelling}{Labelling} attribute).
-
-\item The \htmlref{FitsChan}{FitsChan} class now provides some support for the
-IRAF-specific ``ZPX'' sky projection, which is converted transparently
-into the equivalent FITS ``ZPN'' projection (see the description of the
-\htmlref{Encoding}{Encoding} attribute for details).
-
-\item The FitsChan class now recognises the coordinate system ``ICRS''
-(International Celestial Reference \htmlref{System}{System}) as equivalent to
-``FK5''. This is an interim measure and full support for the
-(exceedingly small) difference between ICRS and FK5 will be added at a
-future release.
-
-Note that ``ICRS'' is not yet recognised as a coordinate system by other
-classes such as \htmlref{SkyFrame}{SkyFrame}, so this change only facilitates the
-importation of foreign data.
-
-\item A bug in the FitsChan class has been fixed which could result in
-longitude values being incorrect by 180 degrees when using cylindrical
-sky projections, such as the FITS ``CAR'' projection.
-
-\item A bug in the FitsChan class has been fixed which could result in
-the FITS sky projection parameters ProjP(0) to ProjP(9) being
-incorrectly named PROJP1 to PROJP10 when written out as FITS cards.
-
-\item A bug in the FitsChan class has been fixed which could cause
-confusion between the FITS-IRAF and FITS-WCS encoding schemes if both
-a CD matrix and a PC matrix are erroneously present in a FITS header.
-
-\item Some minor memory leaks have been fixed.
-
-\item A small number of documentation errors have been corrected.
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.5}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V1.4 and V1.5 (not the most
-recent version):
-
-\begin{enumerate}
-
-\item The \htmlref{FitsChan}{FitsChan} class has been modified to support the latest draft
-FITS WCS standard, described in the two papers ``Representation of world
-coordinates in FITS'' (E.W.\,Greisen and M.\,Calabretta, dated 30th
-November, 1999), and ``Representation of celestial coordinates in FITS''
-(M.\,Calabretta and E.W.\,Greisen, dated 24th September, 1999). These are
-available at
-\htmladdnormallink{http://www.cv.nrao.edu/fits/documents/wcs/wcs.html}
-{http://www.cv.nrao.edu/fits/documents/wcs/wcs.html}.
-
-The FITS-WCS encoding now uses these updated conventions. The main
-changes are:
-
-\begin{itemize}
-\item Rotation and scaling of pixel axes is now represented by a matrix
-of {\tt CDj\_i} keywords instead of a combination of {\tt PCjjjiii} and
-{\tt CDELTj} keywords.
-\item \htmlref{Projection}{Projection} parameters are now associated with particular axes and
-are represented by {\tt \htmlref{PVi\_m}{PVi_m}} keywords instead of the {\tt PROJPm}
-keywords.
-\item The tangent plane projection (``TAN'') can now include optional
-polynomial correction terms.
-\item An entire set of keywords must be supplied for each set of secondary
-axis descriptions, and each such keyword must finish with a single
-character indicating which set it belongs to. This means that keywords
-which previously occupied eight characters have been shorten to seven to
-leave room for this extra character. Thus {\tt LONGPOLE} has become {\tt
-LONPOLE} and {\tt RADECSYS} has become {\tt RADESYS}.
-\end{itemize}
-
-\item Two new encodings have been added to the FitsChan class:
-\begin{description}
-
-\item [FITS-PC] This encoding uses the conventions of the now superseded
-FITS WCS paper by E.W.\,Greisen and M.\,Calabretta which used keywords
-{\tt CDELTj} and {\tt PCjjjiii} to describe axis scaling and rotation.
-These are the conventions which were used by the FITS-WCS encoding prior
-to version 1.5 of AST. This encoding is provided to allow existing data
-which use these conventions to be read. It should not in general be used
-to create new data.
-
-\item [FITS-AIPS] This encoding is based on the conventions described in the
-document ``Non-linear Coordinate Systems in AIPS'' by Eric W. Greisen
-(revised 9th September, 1994 and available by ftp from fits.cv.nrao.edu
-/fits/documents/wcs/aips27.ps.Z). This encoding uses {\tt CROTAi} and
-{\tt CDELTi} keywords to describe axis rotation and scaling.
-
-\end{description}
-
-\item The FitsChan class now provides some support for the IRAF-specific
-``TNX'' sky projection, which is converted transparently into the
-equivalent FITS ``TAN'' projection (see the description of the \htmlref{Encoding}{Encoding}
-attribute for details).
-
-\item FrameSets originally read from a DSS encoded FITS header can now be
-written out using the FITS-WCS encoding (a TAN projection with correction
-terms will be used) in addition to the DSS encoding. The reverse is also
-possible: FrameSets originally read from a FITS-WCS encoded FITS header
-and which use a TAN projection can now be written out using the DSS
-encoding.
-
-\item The algorithm used by the FitsChan class to verify that a \htmlref{FrameSet}{FrameSet}
-conforms to the FITS-WCS model has been improved so that FrameSets
-including more complex mixtures of parallel and serial Mappings
-can be written out using the FITS-WCS encoding.
-
-\item The FitsChan class has been changed so that long strings included in
-the description of an \htmlref{Object}{Object} can be saved and restored without truncation
-when using the NATIVE encoding. Previously, very long \htmlref{Frame}{Frame} titles,
-mathematical expressions, {\em etc.} were truncated if they exceeded the
-capacity of a single FITS header card. They are now split over several
-header cards so that they can be restored without truncation. Note, this
-facility is only available when using NATIVE encoding.
-
-\item The FitsChan class has a new attribute called \htmlref{Warnings}{Warnings} which
-can be used to select potentially dangerous conditions under which
-warnings should be issued. These conditions include (for instance)
-unsupported features within non-standard projections, missing keywords
-for which default values will be used, {\em etc}.
-
-\item The \htmlref{WcsMap}{WcsMap} class has been changed to support the changes made to the
-FITS-WCS encoding in the FitsChan class:
-\begin{itemize}
-\item Projection parameters are now associated with a particular axis and
-are specified using a new set of attributes called PVj\_m. Here, ``j'' is
-the index of an axis of WcsMap, and ``m'' is the index of the projection
-parameter.
-\item The old attributes ProjP(0) to ProjP(9) are still available but are
-now deprecated in favour of the new PVj\_m attributes. They are interpreted
-as aliases for PV(axlat)\_0 to PV(axlat)\_9, where ``axlat'' is the index of
-the latitude axis.
-\item The GLS projection projection has been renamed as SFL, but the
-AST\_\_GLS type has been retained as an alias for AST\_\_SFL.
-\end{itemize}
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.6}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V1.5 and V1.6:
-
-\begin{enumerate}
-
-\item The C interface to several methods (\htmlref{astTranN}{astTranN}, \htmlref{astMark}{astMark} and
-\htmlref{astPolyCurve}{astPolyCurve}) have been changed to make them easier to call from C++.
-Parameters which previously had type ``double (*)[]'' have been changed
-to the simpler ``double *''. Using the old types may result in non-fatal
-compiler warnings, but should not change the behaviour of the methods.
-
-\item A bug has been fixed in the \htmlref{Plot}{Plot} class which could cause groups
-of tick marks to be skipped when using very small gaps.
-
-\item A bug has been fixed in the Plot class which could cause axes to be
-labeled outside the visible window, resulting in no axes being visible.
-
-\item The FITS-WCS encoding used by the \htmlref{FitsChan}{FitsChan} class now includes the
-WCSNAME keyword. When creating a \htmlref{FrameSet}{FrameSet} from FITS headers, the values of
-the WCSNAME keywords are now used as the \htmlref{Domain}{Domain} names for the corresponding
-Frames in the returned FrameSet. When writing a FrameSet to a FITS header
-the Domain names of each \htmlref{Frame}{Frame} are stored in WCSNAME keywords in the
-header.
-
-\item The FITS-WCS encoding used by the FitsChan class now attempts to
-retain the identification letter associated with multiple axis
-descriptions. When reading a FrameSet from a FITS header, the identification
-letter is stored in the \htmlref{Ident}{Ident} attribute for each Frame. When writing a
-FrameSet to a FITS header, the identification letter is read from the
-Ident attribute of each Frame. The letter to associate with each Frame
-can be changed by assigning a new value to the Frame's Ident attribute.
-
-\item The FITS-WCS, FITS-PC, FITS-IRAF and FITS-AIPS encodings used by the
-FitsChan class now create a \htmlref{SkyFrame}{SkyFrame} with the \htmlref{System}{System} attribute set to
-``Unknown'' if the CTYPE keywords in the supplied header refers to an
-unknown celestial coordinate system. Previously, a Frame was used instead
-of a SkyFrame.
-
-\item The FITS-WCS, FITS-PC, FITS-IRAF and FITS-AIPS encodings used by the
-FitsChan class no longer report an error if the FITS header contains no
-CTYPE keywords. It is assumed that a missing CTYPE keyword implies that
-the world coordinate system is linear and identically equal to
-``intermediate world coordinates''.
-
-\item The new value ``noctype'' is now recognized by the \htmlref{Warnings}{Warnings} attribute
-of the FitsChan class. This value causes warnings to be issued if CTYPE
-keywords are missing from foreign encodings.
-
-\item A new attribute called \htmlref{AllWarnings}{AllWarnings} has been added to the FitsChan
-class. This is a read-only, space separated list of all the known condition
-names which can be specified in the Warnings attribute.
-
-\item The FitsChan class now attempts to assigns a \htmlref{Title}{Title} to each Frame in
-a FrameSet read using a foreign encoding. The Title is based on the Domain
-name of the Frame. If the Frame has no Domain name, the default Title
-supplied by the Frame class is retained.
-
-\item The FitsChan class uses the comments associated with CTYPE
-keywords as axis labels when reading a foreign encoding. This behaviour
-has been modified so that the default labels provided by the Frame class
-are retained (instead of using the CTYPE comments) if any of the CTYPE
-comments are identical.
-
-\item A new ``interpolation'' scheme identified by the symbolic constant
-AST\_\_BLOCKAVE has been added to the AST\_RESAMPLE$<$X$>$ set of
-functions. The new scheme calculates each output pixel value by finding
-the mean of the input pixels in a box centred on the output pixel.
-
-\item The SkyFrame class can now be used to represent an arbitrary spherical
-coordinate system by setting its System attribute to ``Unknown''.
-
-\item The indices of the latitude and longitude axes of a SkyFrame can
-now be found using new read-only attributes \htmlref{LatAxis}{LatAxis} and \htmlref{LonAxis}{LonAxis}. The
-effects of any axis permutation is taken into account.
-
-\item A new attribute called Ident has been added to the \htmlref{Object}{Object} class.
-This serves the same purpose as the existing \htmlref{ID}{ID} attribute, but (unlike ID)
-its value is transferred to the new Object when a copy is made.
-
-\item A bug has been fixed which could prevent complex CmpFrames
-behaving correctly (for instance, resulting in the failure of attempts
-to find a \htmlref{Mapping}{Mapping} between a \htmlref{CmpFrame}{CmpFrame} and itself).
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.7}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V1.6 and V1.7:
-
-\begin{enumerate}
-
-\item The \htmlref{Frame}{Frame} class has a new method called
-\htmlref{astAngle}{astAngle}
-which returns the angle subtended by two points at a third point within a
-2 or 3 dimensional Frame.
-
-\item The Frame class has a new method called
-\htmlref{astOffset2}{astOffset2}
-which calculates a position which is offset away from a given starting
-point by a specified distance along a geodesic curve which passes
-through the starting point at a given position angle. It can only be used
-with 2-dimensional Frames.
-
-\item The Frame class has a new method called
-\htmlref{astAxDistance}{astAxDistance}
-which returns the increment between two supplied axis values. For
-axes belonging to SkyFrames, the returned value is normalized into
-the range $\pm\pi$.
-
-\item The Frame class has a new method called
-\htmlref{astAxOffset}{astAxOffset}
-which returns an axis value a given increment away from a specified axis
-value. For axes belonging to SkyFrames, the returned value is normalized into
-the range $\pm\pi$ (for latitude axes) or zero to $2\pi$ (for longitude
-axes).
-
-\item The \htmlref{Plot}{Plot} class has a new method called
-\htmlref{astGenCurve}{astGenCurve}
-which allows generalised user-defined curves to be drawn. The curve is
-defined by a user-supplied \htmlref{Mapping}{Mapping} which maps distance along the curve
-into the corresponding position in the current Frame of the Plot. The new
-method then maps these current Frame position into graphics coordinates,
-taking care of any non-linearities or discontinuities in the mapping.
-
-\item The Plot class has a new method called
-\htmlref{astGrfSet}{astGrfSet}
-which allows the underlying primitive graphics functions to be selected
-at run-time. Previously, the functions used by the Plot class to produce
-graphics could only be selected at link-time, using the options of the
-\htmlref{ast\_link}{ast_link} command. The new Plot method allows an application to over-ride
-the functions established at link-time, by specifying alternative
-primitive graphics routines. In addition, the two new Plot methods
-\htmlref{astGrfPush}{astGrfPush} and \htmlref{astGrfPop}{astGrfPop}
-allow the current graphics routines to be saved and restore on a
-first-in-last-out stack, allowing temporary changes to be made to the set
-of registered graphics routines.
-
-\item The DrawAxes attribute of the Plot class can now be specified
-independantly for each axis, by appending the axis index to the
-end of the attribute name.
-
-\item A bug has been fixed in the Plot class which could result in axis
-labels being drawn on inappropriate edges of the plotting box when using
-``interior'' labelling.
-
-\item A bug has been fixed in the \htmlref{IntraMap}{IntraMap} class which could cause IntraMaps
-to be corrupted after transforming any points.
-
-\item Bugs have been fixed in the \htmlref{FitsChan}{FitsChan} class which could cause
-inappropriate ordering of headers within a FitsChan when writing or
-reading objects using NATIVE encodings.
-
-\item A bug has been fixed in the FitsChan class which could cause the
-celestial longitude of a pixel to be estimated incorrectly by 180 degrees
-if the reference point is at either the north or the south pole.
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V1.8-2}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V1.7 and V1.8-2:
-
-\begin{enumerate}
-
-\item The \htmlref{SkyFrame}{SkyFrame} class has a new attribute called \htmlref{NegLon}{NegLon} which allows
- longitude values to be displayed in the range $-\pi$ to $+\pi$, instead
- of the usual range zero to $2.\pi$.
-
-\item Some new
-functions (\htmlref{astAngle}{astAngle}, \htmlref{astAxAngle}{astAxAngle}, \htmlref{astResolve}{astResolve}, \htmlref{astOffset2}{astOffset2}, \htmlref{astAxOffset}{astAxOffset},
-\htmlref{astAxDistance}{astAxDistance})
-have been added to the \htmlref{Frame}{Frame} class to allow navigation of the coordinate space
-to be performed without needing to know the underlying geometry
-of the co-ordinate system (for instance, whether it is Cartesian or
-spherical).
-
-Note, version 1.8-1 contained many of these facilities, but
-some have been changed in version 1.8-2. Particularly, positions angles
-are now referred to the second Frame axis for {\em all} classes of Frames
-(including SkyFrames), and the
-astBear function has been replaced by astAxAngle.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.8-3}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V1.8-2 and V1.8-3:
-
-\begin{enumerate}
-
-\item A new method called \htmlref{astDecompose}{astDecompose} has been added to the \htmlref{Mapping}{Mapping} class
-which enables pointers to be obtained to the component parts of \htmlref{CmpMap}{CmpMap} and
-\htmlref{CmpFrame}{CmpFrame} objects.
-
-\item Functions within proj.c and wcstrig.c have been renamed to avoid name
-clashes with functions in more recent versions of Mark Calabretta's wcslib
-library.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.8-4}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V1.8-3 and V1.8-4:
-
-\begin{enumerate}
-
-\item The \htmlref{FitsChan}{FitsChan} class has a new attribute called \htmlref{DefB1950}{DefB1950} which can be
-used to select the default reference frame and equinox to be used if
-a FitsChan with foreign encoding contains no indication of the
-reference frame or equinox.
-
-\item A bug has been fixed in the FitsChan class which could prevent
-\htmlref{astWrite}{astWrite} from creating a set of FITS headers from an otherwise valid
-\htmlref{FrameSet}{FrameSet}, when when using FITS-AIPS encoding.
-
-\item A bug has been fixed in the FitsChan class which could cause
-\htmlref{astRead}{astRead} to mis-interpret the FITS CROTA keyword when using FITS-AIPS
-encoding.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.8-5}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V1.8-4 and V1.8-5:
-
-\begin{enumerate}
-
-\item The \htmlref{Plot}{Plot} class defines new graphical elements Axis1, Axis2,
-Grid1, Grid2, NumLabs1, NumLabs2, TextLab1, TextLab2, Ticks1 and Ticks2.
-These allow graphical attributes (colour, width, etc) to be set for each
-axis individually. Previously, graphical attributes could only be set for
-both axes together, using graphical elements Axes, \htmlref{Grid}{Grid}, NumLabs,
-TextLabs and Ticks.
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V1.8-7}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V1.8-5 and V1.8-7:
-
-\begin{enumerate}
-
-\item A new attribute called \htmlref{CarLin}{CarLin} has been added to the \htmlref{FitsChan}{FitsChan} class
-which controls the way CAR projections are handled when reading a
-\htmlref{FrameSet}{FrameSet} from a non-native FITS header. Some FITS writers use a CAR
-projection to represent a simple linear transformation between pixel
-coordinates and celestial sky coordinates. This is not consistent with
-the definition of the CAR projection in the draft FITS-WCS standard, which
-requires the resultant \htmlref{Mapping}{Mapping} to include a 3D rotation from native
-spherical coordinates to celestial spherical coordinates, thus making the
-Mapping non-linear. Setting CarLin to 1 forces
-\htmlref{astRead}{astRead}
-to ignore the FITS-WCS standard and treat any CAR projections as simple
-linear Mappings from pixel coordinates to celestial coordinates.
-
-\item A bug has been fixed which could result in axis Format attributes
-set by the user being ignored under certain circumstances.
-
-\item A bug in the way tick marks positions are selected in the \htmlref{Plot}{Plot} class
-has been fixed. This bug could result in extra ticks marks being displayed at
-inappropriate positions. This bug manifested itself, for instance, if the
-Mapping represented by the Plot was a simple Cartesian to Polar Mapping.
-In this example, the bug caused tick marks to be drawn at negative radius
-values.
-
-\item A bug has been fixed which could prevent attribute settings from
-being read correctly by
-\htmlref{astSet}{astSet},
-etc., on certain platforms (MacOS, for instance).
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.8-8}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V1.8-7 and V1.8-8:
-
-\begin{enumerate}
-
-\item A bug has been fixed in the \htmlref{FitsChan}{FitsChan} class which could cause
-problems when creating a \htmlref{FrameSet}{FrameSet} from a FITS header containing WCS
-information stored in the form of Digitised Digitised Sky Survey (DSS)
-keywords. These problems only occurred for DSS fields in the southern
-hemisphere, and resulted in pixel positions being mapped to sky positions
-close to the corresponding {\em northern} hemispshere field.
-
-\item A new method called
-\htmlref{astBoundingBox}{astBoundingBox}
-has been added to the \htmlref{Plot}{Plot} class. This method returns the bounding box of
-the previous graphical output produced by a Plot method.
-
-\item A new attribute called \htmlref{Invisible}{Invisible} has been added to the Plot class
-which suppresses the graphical output normally produced by Plot methods.
-All the calculations needed to produce the normal output are still
-performed however, and so the bounding box returned by the new
-astBoundingBox
-method is still usable.
-
-\item Bugs have been fixed related to the appearance of graphical output
-produced by the Plot class. These bugs were to do with the way in which
-graphical elements relating to a specific axis (e.g. {\tt Colour(axis1)}, etc.)
-interacted with the corresponding generic element (e.g.
-{\tt Colour(axes)}, etc.).
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V1.8-13}
-
-The following describes the most significant changes which occurred
-in the AST library between versions V1.8-8 and V1.8-13:
-
-\begin{enumerate}
-
-\item The \htmlref{FitsChan}{FitsChan} class has been modified so that LONPOLE keywords
-are only produced by \htmlref{astWrite}{astWrite} when necessary. For zenithal projections such as
-TAN, the LONPOLE keyword can always take its default value and so is
-not included in the FITS header produced by astWrite.
-Previously, the unnecessary production of a LONPOLE keyword could prevent
-FrameSets being written out using encodings which do not support the
-LONPOLE keyword (such as FITS-IRAF).
-
-\item The FitsChan class has been modified to retain leading and trailing
-spaces within COMMENT cards.
-
-\item The FitsChan class has been modified to only use CTYPE comments as
-axis labels if all non-celestial axes have unique non-blank comments
-(otherwise the CTYPE keyword values are used as labels).
-
-\item The FitsChan class has been modified so that it does not append a
-trailing ``Z'' character to the end of DATE-OBS keyword values.
-
-\item The FitsChan class has been modified to use latest list of FITS-WCS
-projections, as described in the FITS-WCS paper II, ``Representations of
-celestial coordinates in FITS'' (Calabretta \& Greisen, draft dated 23
-April 2002). Support has been retained for the polynomial correction
-terms which previous drafts have allowed to be associated with TAN
-projections.
-
-\item The \htmlref{WcsMap}{WcsMap} class has additional projection types of AST\_\_TPN
-(which implements a distorted TAN projection) and AST\_\_SZP. The AST\_\_TAN
-projection type now represents a simple TAN projection and has no
-associated projection parameters. In addition, the usage of projection
-parameters has been brought into line with the the FITS-WCS paper II.
-
-\item The WcsMap class has been modified so that a ``get'' operation on a
-projection parameter attribute will return the default value defined in the
-FITS-WCS paper II if no value has been set for the attribute. Previously, a
-value of AST\_\_BAD was returned in such a situation.
-
-\item The \htmlref{Frame}{Frame} class has new attributes \htmlref{Top(axis)}{Topaxis} and \htmlref{Bottom(axis)}{Bottomaxis} which
-allow a ``plottable range'' to be specified for each Frame axis. The grid
-produced by the \htmlref{astGrid}{astGrid} method will not extend beyond these limits.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V2.0}
-
-Note, \htmlref{Frame}{Frame} descriptions created using AST V2.0 will not be readable by
-applications linked with earlier versions of AST. This applies to Frame
-descriptions created using:
-\begin{itemize}
-\item the \htmlref{Channel}{Channel} class
-\item the \htmlref{FitsChan}{FitsChan} class if the NATIVE \htmlref{Encoding}{Encoding} is used
-\item the \htmlref{astShow}{astShow} function
-\end{itemize}
-
-Applications must be re-linked with AST V2.0 in order to be able to read
-Frame descriptions created by AST v2.0.
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V1.8-13 and V2.0 (the
-current version):
-
-\begin{enumerate}
-
-\item The default value for the \htmlref{Domain}{Domain} attribute provided by the \htmlref{CmpFrame}{CmpFrame}
-class has been changed from ``CMP'' to a string formed by concatenating
-the Domain attributes of the two component Frames, separated by a minus
-sign. If both component Domains are blank, then the old default of
-``CMP'' is retained for the CmpFrame Domain.
-
-\item The implementation of the
-\htmlref{astWrite}{astWrite} function
-within the FitsChan class has been modified. It will now attempt to
-produce a set of FITS header cards to describe a \htmlref{FrameSet}{FrameSet} even if the
-number of axes in the \htmlref{Current}{Current} Frames is greater than the number in the
-\htmlref{Base}{Base} Frame (that is, if there are more WCS axes than pixel axes). This
-has always been possible with NATIVE encoding, but has not previously
-been possible for foreign encodings. The WCSAXES keyword is used to store
-the number of WCS axes in the FITS header.
-
-\item Another change to the
-astWrite function
-within the FitsChan class is that the ordering of ``foreign'' axes
-(\emph{i.e.} CTYPE keywords) is now chosen to make the CD (or PC) matrix
-as diagonal as possible - any element of axis transposition is removed by
-this re-ordering as recommended in FITS-WCS paper I. Previously the
-ordering was determined by the order of the axes in the Current Frame of
-the supplied FrameSet. This change does not affect NATIVE encoding.
-
-\item Support for spectral coordinate systems has been introduced
-throught the addition of two new classes, \htmlref{SpecFrame}{SpecFrame} and \htmlref{SpecMap}{SpecMap}.
-The SpecFrame is a 1-dimensional Frame which can be used to describe
-positions within an electromagnetic spectrum in various systems
-(wavelength, frequency, various forms of velocity,~{\em{etc.}}) and referred
-to various standards of rest (topocentric, geocentric, heliocentric
-LSRK,~{\em{etc.}}). The SpecMap is a \htmlref{Mapping}{Mapping} which can transform spectral
-axis values between these various systems and standards of rest. Note,
-FitsChans which have a foreign encoding (\emph{i.e.} any encoding other
-than NATIVE) are not yet able to read or write these new classes.
-
-\item Facilities have been added to the Frame class which allow
-differences in axis units to be taken into account when finding a Mapping
-between two Frames. In previous versions of AST, the Unit attribute was a
-purely descriptive item intended only for human readers - changing the
-value of Unit made no difference to the behaviour of the Frame. As of
-version 2.0, the Unit attribute can influence the nature of the Mappings
-between Frames. For instance, if the
-astFindrame or \htmlref{astConvert}{astConvert}
-method is used to find the Mapping between an \htmlref{Axis}{Axis} with Unit set to ``m''
-and another Axis with Unit set to ``km'', then the method will return a
-\htmlref{ZoomMap}{ZoomMap} which introduces a scaling factor of 0.001 between the two axes.
-These facilities assume that units are specified following the rules
-included in FITS-WCS paper I ({\em Representation of World
-Coordinates in FITS}, Greisen \& Calabretta).
-
-In order to minimise the risk of breaking existing software, the default
-behaviour for simple Frames is to ignore the Unit attribute ({\em{i.e.}}
-to retain the previous behaviour). However, the new Frame method
-\htmlref{astSetActiveUnit}{astSetActiveUnit}
-may be used to ``activate'' (or deactivate) the new facilities within a
-specific Frame. Note, the new SpecFrame class is different to the simple
-Frame class in that the new facilities for handling units are always active
-within a SpecFrame.
-
-\item The \htmlref{System}{System} and \htmlref{Epoch}{Epoch} attributes fo the \htmlref{SkyFrame}{SkyFrame} class have been
-moved to the parent Frame class. This enables all sub-classes of Frame
-(such as the new SpecFrame class) to share these attributes, and to provide
-suitable options for each class.
-
-\item The Frame class has a new attribute called \htmlref{AlignSystem}{AlignSystem}, which allows
-control over the alignment process performed by the methods
-\htmlref{astFindFrame}{astFindFrame} and astConvert.
-
-
-\item The CmpFrame class has been modified so that attributes of a
-component Frame can be accessed without needing to extract the Frame first.
-To do this, append an axis index to the end of the attribute name. For
-instance, if a CmpFrame contains a SpecFrame and a SkyFrame (in that order),
-then the \htmlref{StdOfRest}{StdOfRest} attribute of the SpecFrame can be referred to as the
-``StdOfRest(1)'' attribute of the CmpFrame. Likewise, the \htmlref{Equinox}{Equinox} attribute
-of the SkyFrame can be accessed as the ``Equinox(2)'' (or equivalently
-``Equinox(3)'') attribute of the CmpFrame. The ``System(1)'' attribute of the
-CmpFrame will refer to the System attribute of the SpecFrame, whereas the
-``System(2)'' and ``System(3)'' attributes of the CmpFrame will refer to the
-System attribute of the SkyFrame (the ``System'' attribute without an axis
-specifier will refer to the System attribute of the CmpFrame as a whole,
-since System is an attribute of all Frames, and a CmpFrame is a Frame and
-so has its own System value which is independant of the System attributes
-of its component Frames).
-
-\item The algorithms used by the \htmlref{Plot}{Plot} class for determining when to omit
-overlapping axis labels, and the abbreviation of redundant leading fields
-within sexagesimal axis labels, have been improved to avoid some anomolous
-behaviour in previous versions.
-
-\item The curve drawing algorithm used by the Plot class has been
-modified to reduce the chance of it ``missing'' small curve sections,
-such as may be produced if a grid line cuts across the plot very close to
-a corner. Previously, these missed sections could sometimes result in
-axis labels being omitted.
-
-\item A new function
-(\htmlref{astVersion}{astVersion})
-has been added to return the version of the AST library in use.
-
-\item Bugs have been fixed in the Plot class which caused serious problems
-when plotting high precision data. These problems could range from the
-omission of some tick marks to complete failure to produce a plot.
-
-\end{enumerate}
-
-Programs which are statically linked will need to be re-linked in
-order to take advantage of these new facilities.
-
-
-\subsection{Changes Introduced in V3.0}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V2.0 and V3.0:
-
-\begin{enumerate}
-
-\item Many changes have been made in the \htmlref{FitsChan}{FitsChan} class in order to bring
-the FITS-WCS encoding into line with the current versions of the FITS-WCS
-papers (see \htmladdnormallink{http://www.atnf.csiro.au/people/mcalabre/WCS/}
-{http://www.atnf.csiro.au/people/mcalabre/WCS/}):
-
-\begin{itemize}
-
-\item The rotation and scaling of the pixel axes may now be specified using
-either CD\emph{i\_j} keywords, or PC\emph{i\_j} and CDELTj keywords. A new attribute
-called \htmlref{CDMatrix}{CDMatrix} has been added to the FitsChan class to indicate which
-set of keywords should be used when writing a \htmlref{FrameSet}{FrameSet} to a FITS-WCS
-header.
-
-\item The FITS-WCS encoding now supports most of the conventions
-described in FITS-WCS paper III for the description of spectral
-coordinates. The exceptions are that the SSYSOBS keyword is not
-supported, and WCS stored in tabular form (as indicated by the ``-TAB''
-algorithm code) is not supported.
-
-
-\item User-specified fiducial points for WCS projections are now
-supported by FitsChans which use FITS-WCS encoding. This use keywords
-PVi\_0, PVi\_1 and PVi\_2 for the longitude axis.
-
-\item When reading a FITS-WCS header, a FitsChan will now use keywords PVi\_3
-and PVi\_4 for the longitude axis (if present) in preference to any LONPOLE
-and LATPOLE keywords which may be present. When writing a FITS-WCS header,
-both forms are written out.
-
-\item The number of WCS axes is stored in the WCSAXES keyword if its value
-would be different to that of the NAXIS keyword.
-
-\item Helio-ecliptic coordinates are now supported by FitsChans which use
-FITS-WCS encoding. This uses CTYPE codes ``HLON'' and ``HLAT''. The
-resulting \htmlref{SkyFrame}{SkyFrame} will have a \htmlref{System}{System} value of ``HELIOECLIPTIC'', and all
-the usual facilities, such as conversion to other celestial systems, are
-available.
-
-\item The FITS-WCS encoding now supports most of the conventions
-described in FITS-WCS paper III for the description of spectral
-coordinates. The exceptions are that the SSYSOBS keyword is not
-supported, and WCS stored in tabular form (as indicated by the ``-TAB''
-algorithm code) is not supported.
-
-\item When reading a FITS-WCS header, a FitsChan will now ignore any
-distortion codes which are present in CTYPE keywords. Here, a ``distortion
-code'' is the final group of four characters in a CTYPE value of the
-form ``xxxx-yyy-zzz'', as described in FITS-WCS paper IV. The exception
-to this is that the ``-SIP'' distortion code (as used by the SIRTF
-project - see
-\htmladdnormallink{
-http://sirtf.caltech.edu/SSC/documents/WCSkeywords\_v1.3.pdf}{
-http://sirtf.caltech.edu/SSC/documents/WCSkeywords\_v1.3.pdf}) is
-interpreted correctly and results in a \htmlref{PolyMap}{PolyMap} being used to represent
-the distortion in the resulting FrameSet. Note, ``-SIP'' distortion codes
-can only be read, not written. A FrameSet which uses a PolyMap will not
-in general be able to be written out to a FitsChan using any foreign
-encoding (although NATIVE encoding can of course be used).
-
-\item The \htmlref{Warnings}{Warnings} attribute of the FitsChan class now accepts values
-``BadVal'' (which gives warnings about conversion errors when reading
-FITS keyword values), ``Distortion'' (which gives warnings about
-unsupported distortion codes within CTYPE values), and ``BadMat'' (which
-gives a warning if the rotation/scaling matrix cannot be inverted).
-
-\item When writing a FrameSet to a FitsChan which uses a non-Native
-encoding, the comment associated with any card already in the FitsChan
-will be retained if the keyword value being written is the same as the
-keyword value already in the FitsChan.
-
-\item A FrameSet which uses the non-FITS projection type AST\_\_TPN (a TAN
-projection with polynomial distortion terms) can now be written to a
-FitsChan if the \htmlref{Encoding}{Encoding} attribute is set to FITS-WCS. The standard
-``-TAN'' code is used within the CTYPE values, and the distortion
-coefficients are encoded in keywords of the form `` QVi\_ma'', which are
-directly analogous to the standard ``PVi\_ma'' projection parameter keywords.
-Thus a FITS reader which does not recognise the QV keywords will still
-be able to read the header, but the distortion will be ignored.
-
-\item The default value for \htmlref{DefB1950}{DefB1950} attribute now depends on the value
-of the Encoding attribute.
-
-\item A new appendix has been added to SUN/210 and SUN/211 giving details
-of the implementation provided by the FitsChan class of the
-conventions contained in the first four FITS-WCS papers.
-\end{itemize}
-
-\item The SkyFrame class now supports two new coordinate systems ``ICRS''
-and ``HELIOECLIPTIC''. The default for the System attribute for SkyFrames
-has been changed from ``FK5'' to ``ICRS''.
-
-\item The
-\htmlref{astRate}{astRate}
-function has been added which allows an estimate to be made of the rate of
-change of a \htmlref{Mapping}{Mapping} output with respect to one of the Mapping inputs.
-
-\item All attribute names for Frames of any class may now include an optional
-axis specifier. This includes those attributes which describe a property
-of the whole \htmlref{Frame}{Frame}. For instance, the \htmlref{Domain}{Domain} attribute may now be
-specified as ``Domain(1)'' in addition to the simpler ``Domain''. In cases
-such as this, where the attribute describes a property of the whole
-Frame, axis specifiers will usually be ignored. The exception is that a
-\htmlref{CmpFrame}{CmpFrame} will use the presence of an axis specifier to indicate that the
-attribute name relates to the primary Frame containing the specified
-axis, rather than to the CmpFrame as a whole.
-
-\item A new subclass of Mapping, the PolyMap, has been added which
-performs a general N-dimensional polynomial mapping.
-
-\item A new subclass of Mapping, the \htmlref{GrismMap}{GrismMap}, has been added which
-models the spectral dispersion produced by a grating, prism or grism.
-
-\item A new subclass of Mapping, the \htmlref{ShiftMap}{ShiftMap}, has been added which adds
-constant values onto all coordinates (this is equivalent to a \htmlref{WinMap}{WinMap}
-with unit scaling on all axes).
-
-\item Minor bugs have been fixed within the \htmlref{Plot}{Plot} class to do with the choice
-and placement of numerical axis labels.
-
-\item The \htmlref{SphMap}{SphMap} class has a new attribute called \htmlref{PolarLong}{PolarLong} which gives the
-longitude value to be returned when a Cartesian position corresponding to
-either the north or south pole is transformed into spherical coordinates.
-
-\item The \htmlref{WcsMap}{WcsMap} class now assigns a longitude of zero to output
-celestial coordinates which have a latitude of plus or minus 90 degrees.
-
-\item The \htmlref{NatLat}{NatLat} and \htmlref{NatLon}{NatLon} attributes of the WcsMap class have been
-changed so that they now return the fixed native coordinates of the
-projection reference point, rather than the native coordinates of the
-user-defined fiducial point.
-
-\item Notation has been changed in both the WcsMap and FitsChan classes to
-reflect the convention used in the FITS-WCS papers that index ``i'' refers
-to a world coordinate axis, and index ``j'' refers to a pixel axis.
-
-\item Changes have been made to several Mapping classes in order to allow
-the
-\htmlref{astSimplify}{astSimplify}
-function to make simplifications in a \htmlref{CmpMap}{CmpMap} which previously were not
-possible.
-
-\item The \htmlref{SlaMap}{SlaMap} class has been extended by the addition of conversions
-between FK5 and ICRS coordinates, and between FK5 and helio-ecliptic coordinates.
-
-\item The \htmlref{SpecMap}{SpecMap} class has been changed to use the equation for the
-refractive index of air as given in the current version of FITS-WCS paper
-III. Also, the forward and inverse transformations between frequency and
-air-wavelength have been made more compatible by using an iterative
-procedure to calculate the inverse.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V3.1}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V3.0 and V3.1 (the
-current version):
-
-\begin{enumerate}
-\item Addition of a new class called \htmlref{XmlChan}{XmlChan} - a \htmlref{Channel}{Channel} which
-reads and writes AST objects in the form of XML.
-\item A bug has been fixed in the \htmlref{Plot}{Plot} class which could cause incorrect
-graphical attributes to be used for various parts of the plot if either
-axis has no tick marks (i.e. if both major and minor tick marks have zero
-length).
-\end{enumerate}
-
-Programs which are statically linked will need to be re-linked in
-order to take advantage of these new facilities.
-
-
-\subsection{Changes Introduced in V3.2}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V3.1 and V3.2:
-
-\begin{enumerate}
-
-\item A new
-function \htmlref{astPutCards}{astPutCards}
-has been added to the \htmlref{FitsChan}{FitsChan} class. This allows multiple concatenated header
-cards to be stored in a FitsChan in a single call, providing an alternative to
-the existing
-astPutCards function.
-
-\item Some signficant changes have been made to the simplification of Mappings
- which should resultin a greater degree of simplication taking place.Some
- bugs have also been fixed which could result in an infinite loop being
- entered when attempting to simplify certain Mappings.
-
-\item The FitsChan class now translates the spectral algorithm codes
-``-WAV'', ``-FRQ'' and ``-VEL'' (specified in early drafts of paper III) to
-the corresponding ``-X2P'' form when reading a spectral axis description
-from a set of FITS header cards.
-
-\item A bug has been fixed in the FitsChan class which could cause
-keywords associated with alternate axis descriptions to be mis-interpreted.
-
-\item The \htmlref{Plot}{Plot} class now provides facilities for modifying the appearance
-of sub-strings within text strings such as axis labels, titles, \emph{etc},
-by producing super-scripts, sub-scripts, changing the font colour, size,
-\emph{etc}. See attribute \htmlref{Escape}{Escape}.
-
-\item The default value of the \htmlref{Tol}{Tol} attribute of the Plot class has been
-changed from 0.001 to 0.01. This should not usually cause any significant
-visible change to the plot, but should make the plotting faster. You may
-need to set a lower value for Tol if you are producing a particularly
-large plot.
-
-\item The algorithm for finding the default value for the Gap attribute
-has been changed. This attribute specifies the gap between major axis
-values in an annotated grid drawn by the Plot class. The change in
-algorithm may cause the default value to be different to previous versions
-in cirtain circumstances.
-
-\item Some bugs have been fixed in the Plot class which could cause the
-system to hang for a long time while drawing certain all-sky grids
-(notable some of the FITS Quad-cube projections).
-
-\item The \htmlref{SkyAxis}{SkyAxis} class has extended the Format attribute by the addition
-of the ``g'' option. this option is similar to the older ``l'' option in that
-it results in characters (``h'', ``m'', ``s'', \emph{etc}) being used as
-delimiters between the sexagesimal fields of the celestial position. The
-difference is that the ``g'' option includes graphics escape sequences
-in the returned formatted string which result in the field delimiter
-characters being drawn as super-scripts when plotted as numerical axis values
-by a Plot.
-
-\item The Plot class has been extended to include facilities for producing
-logarithmic axes. See attributes LogPlot, LogTicks, LogGap and LogLabel.
-
-\item New functions astGCap and astGScales have been added to the interface
-defined by file \verb+grf.h+. The \htmlref{ast\_link}{ast_link} command has been modified so
-that the \verb+-mygrf+ switch loads dummy versions of the new grf
-functions. This means that applications should continue to build without
-any change. However, the facilities for interpreting escape sequences
-within strings drawn by the Plot class will not be available unless the
-new grf functions are implemented. If you choose to implement them, you
-should modify your linking procedure to use the \verb+-grf+ switch in
-place of the older \verb+-mygrf+ switch. See the description of the ast\_link
-command for details of the new switches. Also note that the astGQch
-function, whilst included in verb+grf.h+ in pervious versions of AST, was
-not actually called. As of this version of AST, calls are made to the
-astGQch function, and so any bugs in the implementation of astGQch may
-cause spurious behaviour when plotting text strings.
-
-\item A new 'static' method called \htmlref{astEscapes}{astEscapes} has been added which is used
-to control and enquire whether astGetC and \htmlref{astFormat}{astFormat} will strip any graphical
-escape sequences which may be present out of the returned value.
-
-\item New attribute \htmlref{XmlPrefix}{XmlPrefix} has been added to the \htmlref{XmlChan}{XmlChan} class. It
-allows XML written by the XmlChan class to include an explicit namespace
-prefix on each element.
-
-\item New attribute \htmlref{XmlFormat}{XmlFormat} has been added to the XmlChan class. It
-specifies the format in which AST objects should be written.
-
-\item A new class of \htmlref{Mapping}{Mapping}, the \htmlref{TranMap}{TranMap}, has been introduced. A TranMap
-takes its forward transformation from an existing Mapping, and its inverse
-transformation from another existing Mapping.
-
-\item A bug has been fixed in \htmlref{WcsMap}{WcsMap} which caused error reports to
-include erroneous axis numbers when referring to missing parameter values.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V3.3}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V3.2 and V3.3:
-
-\begin{enumerate}
-
-\item Options have been added to the \htmlref{SkyFrame}{SkyFrame} class which allows the
-origin
-of celestial coordinates to be moved to any specified point. See the new
-attributes SkyRef, \htmlref{SkyRefIs}{SkyRefIs}, SkyRefP and \htmlref{AlignOffset}{AlignOffset}.
-
-\item An option has been added to the \htmlref{FitsChan}{FitsChan} class which allows extra
-Frames representing cartesian projection plane coordinates (``intermediate
-world coordinates'' in the parlance of FITS-WCS) to be created when
-reading
-WCS information from a foreign FITS header. This option is controlled by
-a new attribute called \htmlref{Iwc}{Iwc}.
-
-\item The FitsChan class which been modified to interpret FITS-WCS CAR
-projection headers correctly if the longitude reference pixel (CRPIX) is
-very large.
-
-\item The FITS-AIPS++ encoding in the FitsChan class now recognised
-spectral axes if they conform to the AIPS convention in which the
-spectral axis is descirbed by a CTYPE keyword od the form "AAAA-BBB"
-where ``AAAA'' is one of FREQ, VELO or FELO, and ``BBB'' is one of LSR, LSD,
-HEL or OBS. Such spectral axes can be both read and written.
-
-\item The FitsChan class now has a FITS-AIPS++ encoding which represents
-WCS information using FITS header cards recognised by the AIPS++ project.
-Support for spectral axes is identical to the FITS-AIPS encoding.
-
-\item The organisation of the AST distribution and the commands for
-building it have been changed. Whereas AST used to be built and installed
-with \verb+./mk build; ./mk install+, it now builds using the more standard
-idiom \verb+./configure; make; make install+. The installation location is
-controlled by the \verb+--prefix+ argument to ./configure (as is usual
-for other packages which use this scheme). Note that the INSTALL environment
-variable now has a \emph{different} meaning to that which it had
-before, and it should generally be \emph{unset}. Also, there is no need to
-set the SYSTEM variable.
-
-\item Shared libraries are now installed in the same directory as the
-static libraries. In addition, links to sharable libraries are installed
-with names which include version information, and ``libtool libraries''
-are also installed (see \htmladdnormallink{http://www.gnu.org/software/libtool/manual.html}{
-http://www.gnu.org/software/libtool/manual.html}).
-
-\item The \verb+ast_dev+ script has been removed. Instead, the location of
-the AST include files should be specified using the -I option when
-compiling.
-
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V3.4}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V3.3 and V3.4:
-
-\begin{enumerate}
-
-\item The \htmlref{Mapping}{Mapping} class has a new method
-(\htmlref{astLinearApprox}{astLinearApprox})
-which calculates the co-efficients of a linear approximation to a Mapping.
-
-\item The Format attribute for simple Frames and SkyFrames has been extended.
-It has always been possible, in both classes, to specify a precision by
-including a dot in the Format value followed by an integer (\emph{e.g.}
-``\verb+dms.1+'' for a \htmlref{SkyFrame}{SkyFrame}, or ``\verb+%.10g+'' for a simple \htmlref{Frame}{Frame}).
-The precision can now also be specified using an asterisk in place of the
-integer (\emph{e.g.} ``\verb+dms.*+'' or ``\verb+%.*g+''). This causes the
-precision to be derived on the basis of the Digits attribute value.
-
-\item The \htmlref{Plot}{Plot} class has been changed so that the default value used for the
-Digits attribute is chosen to be the smallest value which results in no
-pair of adjacent labels being identical. For instance, if an annotated
-grid is being drawn describing a SkyFrame, and the Format(1) value is set
-to ``\verb+hms.*g+'' (the ``g'' causes field delimiters to be drawn as
-superscripts), and the Digits(1) value is unset, then the seconds field
-will have a number of decimal places which results in no pair of labels
-being identical.
-
-\item Addition of a new class classed \htmlref{DSBSpecFrame}{DSBSpecFrame}. This is a
-sub-class of \htmlref{SpecFrame}{SpecFrame} which can be used to describe spectral axes
-associated with dual sideband spectral data.
-
-\item The \htmlref{FitsChan}{FitsChan} class will now read headers which use the old ``-GLS''
-projection code, converting them to the corresponding modern ``-SFL'' code,
-provided that the celestial axes are not rotated.
-
-\item The FitsChan class has a new \htmlref{Encoding}{Encoding}, ``FITS-CLASS'', which allows
-the reading and writing of FITS headers using the conventions of the CLASS
-package - see
-\htmladdnormallink{
-http://www.iram.fr/IRAMFR/GILDAS/doc/html/class-html/class.html}{
-http://www.iram.fr/IRAMFR/GILDAS/doc/html/class-html/class.html}).
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V3.5}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V3.4 and V3.5:
-
-\begin{enumerate}
-
-\item AST now provides facilities for representing regions of various
-shapes within a coordinate system. The \htmlref{Region}{Region} class provides general
-facilities which are independent of the specific shape of region being
-used. Various sub-classes of Region are also now available which provide
-means of creating Regions of specific shape. Facilities provided by the
-Region class include testing points to see if they are inside the
-Region, testing two Regions for overlap, transforming Regions from one
-coordinate system to another \emph{etc}.
-
-\item A new class of 1-dimensional \htmlref{Frame}{Frame} called \htmlref{FluxFrame}{FluxFrame} has been added which
-can be used to describe various systems for describing ovserved value at a
-single fixed spectral position.
-
-\item A new class of 2-dimensional Frame called \htmlref{SpecFluxFrame}{SpecFluxFrame} has been added which
-can be used to describe a 2-d frame spanned by a spectral position axis
-and and an observed value axis.
-
-\item A new class of \htmlref{Mapping}{Mapping} called \htmlref{RateMap}{RateMap} has been added. A RateMap encapsulates
-a previously created Mapping. The inputs of the RateMap correspond to the
-inputs of the encapsulated Mapping. All RateMaps have just a single
-output which correspond to the rate of change of a specified output of
-the encapsulated Mapping with respect to a specified input.
-
-\item The \htmlref{SkyFrame}{SkyFrame} class now supports a value of ``J2000'' for \htmlref{System}{System}.
-This system is an equatorial system based on the mean dynamical equator and
-equinox at J2000, and differs slightly from an FK5(J2000) system.
-
-\item A new class called \htmlref{KeyMap}{KeyMap} has been added. A KeyMap can be used to
-store a collection of vector or scalar values or Objects, indexed by a
-character string rather than an integer.
-
-\item The parameter list for the
-\htmlref{astRate}{astRate}
-method of the Mapping class has been modified. It no longer returns a second
-derivative estimate. Existing code which uses this method will need to be
-changed.
-
-\item Methods
-(astSetFits<X>)
-have been added to the \htmlref{FitsChan}{FitsChan} class to allow values for named
-keywords to be changed or added.
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V3.6}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V3.5 and V3.6:
-
-\begin{enumerate}
-
-\item If the Format attribute associated with an axis of a \htmlref{SkyFrame}{SkyFrame}
-starts with a percent character (``\verb+%+''), then axis values are
-now formatted and unformatted as a decimal radians value, using the
-Format syntax of a simple \htmlref{Frame}{Frame}.
-
-\item The \htmlref{Plot}{Plot} class has a new attribute called \htmlref{Clip}{Clip} which controls the
-clipping performed by AST at the plot boundary.
-
-\item The keys used to label components of the \htmlref{PolyMap}{PolyMap} structure when a
-PolyMap is written out through a \htmlref{Channel}{Channel} have been changed. The new keys
-are shorter than the old keys and so can written succesfully to a \htmlref{FitsChan}{FitsChan}.
-The new PolyMap class always writes new styles keys but can read either
-old or new style keys. Consequently, PolyMap dumps written by this
-version of AST cannot be read by older versions of AST.
-
-\item A mimimal cut down subset of the C version of SLALIB is now
-included with the AST distribution and built as part of building AST.
-This means that it is no longer necessary to have SLALIB installed
-separately at your site. The SLALIB code included with AST is distrubuted
-under the GPL. The default behaviour of the \htmlref{ast\_link}{ast_link} script is now to
-link with this internal slalib subset. However, the ``-csla'' option can
-still be used to force linking with an external full C SLALIB library.
-A new option ``-fsla'' has been introduced which forces linking with the
-external full Fortran SLALIB library.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V3.7}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V3.6 and V3.7:
-
-\begin{enumerate}
-
-\item Support for time coordinate systems has been introduced
-throught the addition of two new classes, \htmlref{TimeFrame}{TimeFrame} and \htmlref{TimeMap}{TimeMap}.
-The TimeFrame is a 1-dimensional \htmlref{Frame}{Frame} which can be used to describe
-moments in time (either absolute or relative) in various systems (MJD,
-Julian \htmlref{Epoch}{Epoch}, \emph{etc.}) and referred to various time scales (TAI, UTC,
-UT1, GMST, \emph{etc}). The TimeMap is a \htmlref{Mapping}{Mapping} which can transform time
-values between these various systems and time scales. Note,
-FitsChans which have a foreign encoding (\emph{i.e.} any encoding other
-than NATIVE) are not able to read or write these new classes.
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V4.0}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V3.7 and V4.0:
-
-\begin{enumerate}
-
-\item Experimental support for reading IVOA Space-Time-Coordinates (STC-X)
-descriptions using the \htmlref{XmlChan}{XmlChan} class has been added. Support is included
-for a subset of V1.20 of the draft STC specification.
-
-\item A new set of methods (AST\_REBIN<X>/astRebin<X>) has been added to
-the \htmlref{Mapping}{Mapping} class. These are flux-conserving alternatives to the existing
-AST\_RESAMPLE<X>/astResample<X> methods.
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V4.1}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V4.0 and V4.1:
-
-\begin{enumerate}
-
-\item A new control flag has been added to the AST\_RESAMPLE<X>/astResample<X>
-functions which produces approximate flux conservation.
-
-\item New constants AST\_\_SOMB and AST\_\_SOMBCOS have been added to
-ast.h. These specify kernels for astResample and astRebin
-based on the ``Sombrero'' function ( $2*J1(x)/x$ where $J1(x)$ is the
-first order Bessel function of the first kind).
-
-\item The \htmlref{SkyFrame}{SkyFrame} class now supports a \htmlref{System}{System} value of AZEL corresponding
-to horizon (azimuth/elevation) coordinates.
-
-\item The \htmlref{FitsChan}{FitsChan} class allows the non-standard strings ``AZ--'' and
-``EL--'' to be used as axis types in FITS-WCS CTYPE keyword values.
-
-\item The \htmlref{Frame}{Frame} class now has attributes \htmlref{ObsLon}{ObsLon} and \htmlref{ObsLat}{ObsLat} to specify
-the geodetic longitude and latitude of the observer.
-
-\item The ClockLon and ClockLat attributes have been removed from the
-\htmlref{TimeFrame}{TimeFrame} class. Likewise, the GeoLon and GeoLat attributes have been
-removed from the \htmlref{SpecFrame}{SpecFrame} class. Both classes now use the ObsLon and
-ObsLat attributes of the parent Frame class instead. However, the old
-attribute names can be used as synonyms for ObsLat and ObsLon. Also,
-dumps created using the old scheme can be read succesfully by AST V4.1
-and converted to the new form.
-
-\item A new
-function \htmlref{astMapSplit}{astMapSplit}
-has been added to the \htmlref{Mapping}{Mapping} class. This splits a Mapping into two component
-Mappings which, when combined in parallel, are equivalent to the original
-Mapping.
-
-\item The default value for the \htmlref{SkyRefIs}{SkyRefIs} attribute has been changed from
-``Origin'' to ``Ignored''. This means that if you want to use a SkyFrame
-to represent offsets from some origin position, you must now set the
-SkyRefIs attribute explicitly to either ``Pole'' or ``Origin'', in
-addition to assigning the required origin position to the SkyRef attribute.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V4.2}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V4.1 and V4.2:
-
-\begin{enumerate}
-
-\item The \htmlref{SideBand}{SideBand} attribute of the \htmlref{DSBSpecFrame}{DSBSpecFrame} class can now take the
-option ``LO'' in addition to ``USB'' and ``LSB''. The new option causes the
-DSBSpecFrame to represent the offset from the local oscillator frequency,
-rather than either of the two sidebands.
-
-\item The \htmlref{FitsChan}{FitsChan} class has been changed so that it writes out a VELOSYS
-keyword when creating a FITS-WCS encoding (VELOSYS indicates the topocentric
-apparent velocity of the standard of rest). FitsChan also strips out VELOSYS
-keywords when reading a \htmlref{FrameSet}{FrameSet} from a FITS-WCS encoding.
-
-\item The FitsChan class has a new method called
-\htmlref{astRetainFits}{astRetainFits}
-that indicates that the current card in the FitsChan should not be
-stripped out of the FitsChan when an AST \htmlref{Object}{Object} is read from the FitsChan.
-Unless this method is used, all cards that were involved in the creation
-of the AST Object will be stripped from the FitsChan afte a read operation.
-
-\item A problem with unaligned memory access that could cause bus errors on
-Solaris has been fixed.
-
-\item A new read-only attribute called \htmlref{ObjSize}{ObjSize} has been added to the base
-Object \htmlref{Class}{Class}. This gives the number of bytes of memory occupied by the
-Object. Note, this is the size of the internal in-memory representation of
-the Object, not the size of the textual representation produced by
-writing the Object out through a \htmlref{Channel}{Channel}.
-
-\item A new function
-\htmlref{astTune}{astTune}
-has been added which can be used to get and set global AST tuning
-parameters. At the moment there are only two such parameter, both of
-which are concerned with memory management within AST.
-
-\item A new method called
-\htmlref{astTranGrid}{astTranGrid}
-has been added to the \htmlref{Mapping}{Mapping} class. This method creates a regular
-grid of points covering a rectangular region within the input space of a
-Mapping, and then transforms this set of points into the output space of the
-Mapping, using a piecewise-continuous linear approximation to the Mapping
-if appropriate in order to achive higher speed.
-
-\item A new subclass of Mapping has been added called \htmlref{SwitchMap}{SwitchMap}. A
-SwitchMap represents several alternate Mappings, each of which is used to
-transforms input positions within a different region of the input
-coordinate space.
-
-\item A new subclass of Mapping has been added called \htmlref{SelectorMap}{SelectorMap}. A
-SelectorMap tests each input position to see if it falls within one of
-several Regions. If it does, the index of the \htmlref{Region}{Region} containing the
-input position is returned as the Mapping output.
-
-\item The behaviour of the
-\htmlref{astConvert}{astConvert}
-method when trying to align a \htmlref{CmpFrame}{CmpFrame} with another \htmlref{Frame}{Frame} has been
-modified. If no conversion between positions in the Frame and CmpFrame
-can be found, an attempt is now made to find a conversion between the
-Frame and one of two component Frames contained within the CmpFrame. Thus
-is should now be possible to align a \htmlref{SkyFrame}{SkyFrame} with a CmpFrame containing a
-SkyFrame and a \htmlref{SpecFrame}{SpecFrame} (for instance). The returned Mapping produces bad
-values for the extra axes (i.e. for the SpecFrame axis in the above example).
-
-\item The ``\htmlref{\htmlref{ast\_link}{ast_link}\_adam}{ast_link_adam}'' and ``ast\_link'' scripts now ignore the
-\verb+-fsla+ and \verb+-csla+ options, and always link against the
-minimal cut-down version of SLALIB distributed as part of AST.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V4.3}
-
-The following describes the most significant changes which occurred in the
-AST library between versions V4.2 and V4.3:
-
-\begin{enumerate}
-
-\item The
-astGetFitsS
-function now strips trailing white space from the returned string, if the
-original string contains 8 or fewer characters
-
-\item The \htmlref{SpecFrame}{SpecFrame} class has a new attribute called \htmlref{SourceSys}{SourceSys} that specified
-whether the \htmlref{SourceVel}{SourceVel} attribute (which specifies the rest frame of the
-source) should be accessed as an apparent radial velocity or a redshift.
-Note, any existing software that assumes that SourceVel always represents
-a velocity in km/s should be changed to allow for the possibility of
-SourceVel representing a redshift value.
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V4.4}
-
-The following describes the most significant changes which occurred in
-the AST library between versions V4.3 and V4.4:
-
-\begin{enumerate}
-
-\item The
-\htmlref{astFindFrame}{astFindFrame}
-function can now be used to search a \htmlref{CmpFrame}{CmpFrame} for an instance of a more
-specialised class of \htmlref{Frame}{Frame} (\htmlref{SkyFrame}{SkyFrame}, \htmlref{TimeFrame}{TimeFrame}, \htmlref{SpecFrame}{SpecFrame}, \htmlref{DSBSpecFrame}{DSBSpecFrame}
-or \htmlref{FluxFrame}{FluxFrame}). That is, if an instance of one of these classes is used as
-the ``template'' when calling
-astFindFrame,
-and the ``target'' being searched is a CmpFrame (or a \htmlref{FrameSet}{FrameSet} in which the
-current Frame is a CmpFrame), then the component Frames within the CmpFrame
-will be searched for an instance of the supplied template Frame, and, if
-found, a suitable \htmlref{Mapping}{Mapping} (which will include a \htmlref{PermMap}{PermMap} to select the
-required axes from the CmpFrame) will be returned by
-astFindFrame.
-Note, for this to work, the \htmlref{MaxAxes}{MaxAxes} and \htmlref{MinAxes}{MinAxes} attributes of the template
-Frame must be set so that they cover a range that includes the number of axes
-in the target CmpFrame.
-
-\item The SkyFrame, SpecFrame, DSBSpecFrame, TimeFrame and FluxFrame classes
-now allow the MaxAxes and MinAxes attributes to be set freely to any value.
-In previous versions of AST, any attempt to change the value of MinAxes
-or MaxAxes was ignored, resulting in them always taking the default values.
-
-\item The DSBSpecFrame class has a new attribute called AlignSB that
-specifies whether or not to take account of the \htmlref{SideBand}{SideBand} attributes when
-aligning two DSBSpecFrames using
-\htmlref{astConvert}{astConvert}.
-
-\item The Frame class has a new attribute called \htmlref{Dut1}{Dut1} that can be used to
-store a value for the difference between the UT1 and UTC timescales at
-the epoch referred to by the Frame.
-
-\item The number of digits used to format the Frame attributes \htmlref{ObsLat}{ObsLat} and
-\htmlref{ObsLon}{ObsLon} has been increased.
-
-\item The use of the SkyFrame attribute \htmlref{AlignOffset}{AlignOffset} has been changed. This
-attribute is used to control how two SkyFrames are aligned by
-astConvert.
-If the template and target SkyFrames both have a non-zero value for
-AlignOffset, then alignment occurs between the offset coordinate systems
-(that is, a \htmlref{UnitMap}{UnitMap} will always be used to align the two SkyFrames).
-
-\item The \htmlref{Plot}{Plot} class has a new attribute called ForceExterior that can be
-used to force exterior (rather than interior) tick marks to be produced.
-By default, exterior ticks are only produced if this would result in
-more than 3 tick marks being drawn.
-
-\item The TimeFrame class now supports conversion between angle based
-timescales such as UT1 and atomic based timescales such as UTC.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V4.5}
-
-The following describes the most significant changes that
-occurred in the AST library between versions V4.4 and V4.5:
-
-\begin{enumerate}
-
-
-
-\item All FITS-CLASS headers are now created with a frequency axis. If the
-\htmlref{FrameSet}{FrameSet} supplied to
-\htmlref{astWrite}{astWrite}
-contains a velocity axis (or any other form
-of spectral axis) it will be converted to an equivalent frequency axis
-before being used to create the FITS-CLASS header.
-
-\item The value stored in the FITS-CLASS keyword ``VELO-LSR'' has been changed
-from the velocity of the source to the velocity of the reference channel.
-
-\item Addition of a new method call
-\htmlref{astPurgeWCS}{astPurgeWCS}
-to the \htmlref{FitsChan}{FitsChan}
-class. This method removes all WCS-related header cards from a FitsChan.
-
-\item The \htmlref{Plot}{Plot} class has a new attribute called GrfContext that can be used
-to comminicate context information between an application and any
-graphics functions registered with the Plot class via the
-\htmlref{astGrfSet}{astGrfSet} function.
-\item Functions registered with the Plot class using
-astGrfSet
-now take a new additional integer parameter, ``grfcon''. The Plot class
-sets this parameter to the value of the Plot's GrfContext attribute before
-calling the graphics function. NOTE, THIS CHANGE WILL REQUIRE EXISTING
-CODE THAT USES
-astGrfSet
-TO BE MODIFIED TO INCLUDE THE NEW PARAMETER.
-\item The
-astRebinSeq functions
-now have an extra parameter that is used to record the total number of input
-data values added into the output array. This is necessary to correct a
-flaw in the calculation of output variances based on the spread of input
-values. NOTE, THIS CHANGE WILL REQUIRE EXISTING CODE TO BE MODIFIED TO
-INCLUDE THE NEW PARAMETER (CALLED "NUSED").
-\item Support has been added for the FITS-WCS ``HPX'' (HEALPix) projection.
-\item A new flag ``AST\_\_VARWGT'' can be supplied to
-astRebinSeq.
-This causes the input data values to be weighted using the reciprocals of
-the input variances (if supplied).
-
-\item The \htmlref{Frame}{Frame} class has a new read-only attribute called NormUnit that
-returns the normalised value of the Unit attribute for an axis. Here,
-``normalisation'' means cancelling redundant units, etc. So for instance, a
-Unit value of ``s*(m/s)'' would result in a NormUnit value of ``m''.
-
-\item A new
-function \htmlref{astShowMesh}{astShowMesh}
-has been added to the \htmlref{Region}{Region} class. It displays a mesh of points covering
-the surface of a Region by writing out a table of axis values to standard
-output.
-
-\item The Plot class now honours the value of the LabelUp attribute even if
-numerical labels are placed around the edge of the Plot. Previously
-LabelUp was only used if the labels were drawn within the interior of
-the plot. The LabelUp attribute controls whether numerical labels are
-drawn horizontally or parallel to the axis they describe.
-
-\item A bug has been fixed that could segmentation violations when setting
-attribute values.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V4.6}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V4.5 and V4.6:
-
-\begin{enumerate}
-
-\item The \htmlref{TimeFrame}{TimeFrame} class now support Local Time as a time scale. The offset
-from UTC to Local Time is specified by a new TimeFrame attribute called
-\htmlref{LTOffset}{LTOffset}.
-
-\item A new class called \htmlref{Plot3D}{Plot3D} has been added. The Plot3D class allows
-the creation of 3-dimensional annotated coordinate grids.
-
-\item A correction for diurnal aberration is now included when
-converting between AZEL and other celestial coordinate systems. The
-correction is based on the value of the \htmlref{ObsLat}{ObsLat} \htmlref{Frame}{Frame} attribute (the
-geodetic latitude of the observer).
-
-\item A bug has been fixed which caused the DUT1 attribute to be ignored
-by the \htmlref{SkyFrame}{SkyFrame} class when finding conversions between AZEL and other
-celestial coordinate systems.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V5.0}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V4.6 and V5.0:
-
-\begin{enumerate}
-
-
-\item The AST library is now thread-safe (assuming that the POSIX pthreads
-library is available when AST is built). Many of the macros defined in
-the ast.h header file have changed. It is therefore necessary to
-re-compile all source code that includes ast.h.
-
-\item New methods \htmlref{astLock}{astLock} and \htmlref{astUnlock}{astUnlock} allow an AST \htmlref{Object}{Object} to be locked
-for exclusive use by a thread.
-
-\item The \htmlref{TimeFrame}{TimeFrame} class now support Local Time as a time scale. The offset
-from UTC to Local Time is specified by a new TimeFrame attribute called
-\htmlref{LTOffset}{LTOffset}.
-
-\item The \htmlref{Channel}{Channel} class has a new attribute called \htmlref{Strict}{Strict} which controls
-whether or not to report an error if unexpected data items are found
-within an AST Object description read from an external data source. Note,
-the default behaviour is now not to report such errors. This differs from
-previous versions of AST which always reported an error is unexpected
-input items were encountered.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V5.1}
-
-The following describes the most significant changes which occurred in the
-AST library between versions V5.0 and V5.1:
-
-\begin{enumerate}
-
-\item The \htmlref{astUnlock}{astUnlock} function now has an extra parameter that controls whether
-or not an error is reported if the \htmlref{Object}{Object} is currently locked by another
-thread.
-
-\item The \htmlref{Prism}{Prism} class has been modified so that any class of \htmlref{Region}{Region} can
-be used to define the extrusion axes. Previously, only a \htmlref{Box}{Box} or \htmlref{Interval}{Interval}
-could be used for this purpose.
-
-\item The values of the AST\_\_THREADSAFE macro (defined in ast.h) have
-been changed from ``yes'' and ``no'' to ``1'' and ``0''.
-
-\item Improvements have been made to the way that Prisms are simplified
-when
-\htmlref{astSimplify}{astSimplify}
-is called. The changes mean that more types of Prism will now simplify
-into a simpler class of Region.
-
-\item The \htmlref{PointList}{PointList} class has a new method,
-astPoints,
-that copies the axis values from the PointList into a supplied array.
-
-\item The PointList class has a new (read-only) attribute, \htmlref{ListSize}{ListSize}, that
-gives the number of points stored in the PointList.
-
-\item The handling of warnings within different classes of \htmlref{Channel}{Channel} has
-been rationalised. The XmlStrict attribute and
-astXmlWarnings
-function have been removed. The same functionality is now available via
-the existing \htmlref{Strict}{Strict} attribute (which has had its remit widened), a new
-attribute called \htmlref{ReportLevel}{ReportLevel}, and the new
-\htmlref{astWarnings}{astWarnings}
-function. This new function can be used on any class of Channel. Teh
-\htmlref{FitsChan}{FitsChan} class retains its long standing ability to store warnings as
-header cards within the FitsChan, but it also now stores warnings in the
-parent Channel structure, from where they can be retrieved using the
-astWarnings
-function.
-
-\item A new function called
-astIntercept
-has been added to the \htmlref{Frame}{Frame} class. This function finds the point of
-intersection beteeen two geodesic curves.
-
-\item A bug in the type-checking of Objects passed as arguments to constructor
-functions has been fixed. This bug could lead to applications crashing or
-showing strange behaviour if an inappropriate class of Object was
-supplied as an argument to a constructor.
-
-\item The
-\htmlref{astPickAxes}{astPickAxes}
-function will now return a Region, if possible, when applied to a Region. If
-this is not possible, a Frame will be returned as before.
-
-\item The default gap size between the ISO date/time labels used by the \htmlref{Plot}{Plot}
-class when displaying an annotated axis described by a \htmlref{TimeFrame}{TimeFrame} has been
-changed. The changes are meant to improve the labelling of calendar time
-axes that span intervals from a day to a few years.
-
-\item A new function called
-\htmlref{astTestFits}{astTestFits}
-has been added to the FitsChan class. This function tests a FitsChan to
-see if it contains a defined value for specified FITS keyword.
-
-\item The AST\_\_UNDEF<X> parameters used to flag undefined FITS keyword values
-have been removed. Use the new
-astTestFits
-function instead.
-
-\item The astIsUndef<X> functions used to test FITS keyword values
-have been removed. Use the new astTestFits function instead.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V5.2}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V5.1 and V5.2:
-
-\begin{enumerate}
-
-\item A new method called
-\htmlref{astSetFitsCM}{astSetFitsCM}
-has been added to the \htmlref{FitsChan}{FitsChan} class. It stores a pure comment card in a
-FitsChan (that is, a card with no keyword name or equals sign).
-
-\item A new attribute called \htmlref{ObsAlt}{ObsAlt} has been added to the \htmlref{Frame}{Frame} class. It
-records the geodetic altitude of the observer, in metres. It defaults to
-zero. It is used when converting times to or from the TDB timescale, or
-converting spectral positions to or from the topocentric rest frame, or
-converting sky positions to or from horizon coordinates. The FitsChan
-class will include its effect when creating a set of values for the
-OBSGEO-X/Y/Z keywords, and will also assign a value to it when reading a
-set of OBSGEO-X/Y/Z keyword values from a FITS header.
-
-\item The \htmlref{TimeMap}{TimeMap} conversions ``TTTOTDB'' and ``TDBTOTT'', and the \htmlref{SpecMap}{SpecMap}
-conversions ``TPF2HL'' and ``HLF2TP'', now have an additional argument -
-the observer's geodetic altitude.
-
-\item The \htmlref{Polygon}{Polygon} class has been modified to make it consistent with the
-IVOA STC definition of a Polygon. Specifically, the inside of a polygon
-is now the area to the left of each edge as the vertices are traversed in
-an anti-clockwise manner, as seen from the inside of the celestial sphere.
-Previously, AST used the anti-clockwise convention, but viewed from the
-outside of the celestial sphere instead of the inside. Any Polygon saved
-using previous versions of AST will be identified and negated automatically
-when read by AST V5.2.
-
-\item A new class of \htmlref{Channel}{Channel}, called \htmlref{StcsChan}{StcsChan}, has been added that allows
-conversion of suitable AST Objects to and from IVOA STC-S format.
-
-\item A new method called
-\htmlref{astRemoveRegions}{astRemoveRegions}
-has been added to the \htmlref{Mapping}{Mapping} class. It searches a (possibly compound)
-Mapping (or Frame) for any instances of the AST \htmlref{Region}{Region} class, and either
-removes them, or replaces them with UnitMaps (or equivalent Frames). It
-can be used to remove the masking effects of Regions from a compound
-Mapping or Frame.
-
-\item A new method called
-\htmlref{astDownsize}{astDownsize}
-has been added to the Polygon class. It produces a new Polygon that
-contains a subset of the vertices in the supplied Polygon. The subset is
-chosen to retain the main features of the supplied Polygion, in so far
-as that is possible, within specified constraints.
-
-\item A new constructor called
-astOutline
-has been added to the Polygon class. Given a 2D data array, it identifies
-the boundary of a region within the array that holds pixels with
-specified values. It then creates a new Polygon to describe this boundary
-to a specified accuracy.
-
-\item A new set of methods, called
-astMapGetElem<X>
-has been added to the \htmlref{KeyMap}{KeyMap} class. They allow a single element of a vector
-valued entry to be returned.
-
-\item A new attribute called \htmlref{KeyError}{KeyError} has been added to the KeyMap \htmlref{Class}{Class}. It
-controls whether the
-astMapGet...
-family of functions report an error if an entry with the requested key does
-not exist in the KeyMap.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V5.3}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V5.2 and V5.3:
-
-\begin{enumerate}
-
-\item The details of how a \htmlref{Frame}{Frame} is aligned with another Frame by the
-\htmlref{astFindFrame}{astFindFrame} and \htmlref{astConvert}{astConvert}
-functions have been changed. The changes mean that a Frame can now be
-aligned with an instance of a sub-class of Frame, so long as the number
-of axes and the \htmlref{Domain}{Domain} values are consistent. For instance, a basic
-2-dimensional Frame with Domain ``SKY'' will now align succesfully with
-a \htmlref{SkyFrame}{SkyFrame}, conversion between the two Frames being achieved using a
-\htmlref{UnitMap}{UnitMap}.
-
-\item The arrays that supply input values for astMapPut1<X> are now
-declared ``const''.
-
-\item Added method
-\htmlref{astMatchAxes}{astMatchAxes}
-to the Frame class. This method allows corresponding axes within two
-Frames to be identified.
-
-\item The
-\htmlref{astAddFrame}{astAddFrame}
-method can now be used to append one or more axes to all Frames in a \htmlref{FrameSet}{FrameSet}.
-\end{enumerate}
-
-\subsection{\xlabel{changes}\xlabel{list_of_most_recent_changes}Changes
-Introduced in V5.3-1}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V5.3 and V5.3-1 (the
-current version):
-
-\begin{enumerate}
-
-\item The \htmlref{StcsChan}{StcsChan} class now ignores case when reading STC-S phrases (except
-that units strings are still case sensitive).
-
-\end{enumerate}
-
-Programs which are statically linked will need to be re-linked in
-order to take advantage of these new facilities.
-
-\end{document}
diff --git a/ast-5.3-1/sun211_figures/cmpframe.eps b/ast-5.3-1/sun211_figures/cmpframe.eps
deleted file mode 100644
index c5b6aaa..0000000
--- a/ast-5.3-1/sun211_figures/cmpframe.eps
+++ /dev/null
@@ -1,931 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 215 202 384 394
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 17:24:02
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-3657.35 3700.55 m
-3657.35 3800.15 3576.95 3880.55 3477.35 3880.55 c
-2396.15 3880.55 l
-2296.55 3880.55 2216.15 3800.15 2216.15 3700.55 c
-2216.15 2210.15 l
-2216.15 2110.55 2296.55 2030.15 2396.15 2030.15 c
-3477.35 2030.15 l
-3576.95 2030.15 3657.35 2110.55 3657.35 2210.15 c
-f*
-1 g
-3592.55 3755.75 m
-3592.55 3854.15 3513.35 3934.55 3413.75 3934.55 c
-2340.95 3934.55 l
-2241.35 3934.55 2162.15 3854.15 2162.15 3755.75 c
-2162.15 2273.75 l
-2162.15 2174.15 2241.35 2094.95 2340.95 2094.95 c
-3413.75 2094.95 l
-3513.35 2094.95 3592.55 2174.15 3592.55 2273.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-3592.55 3755.75 m
-3592.55 3854.15 3513.35 3934.55 3413.75 3934.55 c
-2340.95 3934.55 l
-2241.35 3934.55 2162.15 3854.15 2162.15 3755.75 c
-2162.15 2273.75 l
-2162.15 2174.15 2241.35 2094.95 2340.95 2094.95 c
-3413.75 2094.95 l
-3513.35 2094.95 3592.55 2174.15 3592.55 2273.75 c
-h
-S
-0.564706 g
-3297.35 3532.55 m
-3297.35 3591.35 3250.55 3638.15 3191.75 3638.15 c
-2381.75 3638.15 l
-2322.95 3638.15 2276.15 3591.35 2276.15 3532.55 c
-2276.15 2902.55 l
-2276.15 2843.75 2322.95 2796.95 2381.75 2796.95 c
-3191.75 2796.95 l
-3250.55 2796.95 3297.35 2843.75 3297.35 2902.55 c
-f*
-1 g
-3232.55 3588.95 m
-3232.55 3646.55 3186.95 3692.15 3129.35 3692.15 c
-2325.35 3692.15 l
-2267.75 3692.15 2222.15 3646.55 2222.15 3588.95 c
-2222.15 2964.95 l
-2222.15 2907.35 2267.75 2861.75 2325.35 2861.75 c
-3129.35 2861.75 l
-3186.95 2861.75 3232.55 2907.35 3232.55 2964.95 c
-f*
-0 g
-3232.55 3588.95 m
-3232.55 3646.55 3186.95 3692.15 3129.35 3692.15 c
-2325.35 3692.15 l
-2267.75 3692.15 2222.15 3646.55 2222.15 3588.95 c
-2222.15 2964.95 l
-2222.15 2907.35 2267.75 2861.75 2325.35 2861.75 c
-3129.35 2861.75 l
-3186.95 2861.75 3232.55 2907.35 3232.55 2964.95 c
-h
-S
-3050.15 2847.35 15.5999 849.6 re
-Y
-3057.35 3699.35 m
-3057.35 2854.55 l
-S
-3057.35 3088.55 188.4 248.4 re
-Y
-3057.35 3336.95 m
-3237.35 3096.95 l
-S
-0 0 6120 7920 re
-Y
-3095.75 3338.15 m
-3095.75 3360.95 3077.75 3378.95 3056.15 3378.95 c
-3034.55 3378.95 3016.55 3360.95 3016.55 3338.15 c
-3016.55 3316.55 3034.55 3298.55 3056.15 3298.55 c
-3077.75 3298.55 3095.75 3316.55 3095.75 3338.15 c
-f*
-3275.75 3098.15 m
-3275.75 3120.95 3257.75 3138.95 3236.15 3138.95 c
-3214.55 3138.95 3196.55 3120.95 3196.55 3098.15 c
-3196.55 3076.55 3214.55 3058.55 3236.15 3058.55 c
-3257.75 3058.55 3275.75 3076.55 3275.75 3098.15 c
-f*
-3057.35 3088.55 188.4 248.4 re
-Y
-3057.35 3096.95 m
-3237.35 3336.95 l
-S
-0 0 6120 7920 re
-Y
-3095.75 3098.15 m
-3095.75 3120.95 3077.75 3138.95 3056.15 3138.95 c
-3034.55 3138.95 3016.55 3120.95 3016.55 3098.15 c
-3016.55 3076.55 3034.55 3058.55 3056.15 3058.55 c
-3077.75 3058.55 3095.75 3076.55 3095.75 3098.15 c
-f*
-3275.75 3338.15 m
-3275.75 3360.95 3257.75 3378.95 3236.15 3378.95 c
-3214.55 3378.95 3196.55 3360.95 3196.55 3338.15 c
-3196.55 3316.55 3214.55 3298.55 3236.15 3298.55 c
-3257.75 3298.55 3275.75 3316.55 3275.75 3338.15 c
-f*
-q[1 0 0 1 0 0]concat
-72 100 true[1 0 0 1 -2333 -3514]@85 imagemask
-#CldSIt.M!!!e#S
-5QC``!!!8>!WW3"huE`^^`WUVs82is#N5X^s8W*!!!iQ(s1n[7^]4W>s82j%s6p!ns8V!W!WVop#QOgS
-!!%NH!!iQ'!!!!`rW!3'qu?]s+9)<Gs7cQo!"]*[#QO8n!!!9(^^'nt!!!!(s54.^^]4?7"97iqs*t(L
-!!E8j#QFc(!!!'"p]pg!!!!!"s7ciuz!WW'&qu?]s!!3,t#Q+Q%!!!'"rWi2u!!!!"s8E8uz!WW-(n,NFg
-!!3-!#Oh]n!!!'"rs/#n!!!!$s8N>^z"98B+huE`W!!E9$#N,R^!!!9(rs-=>!!!!0s8N>>z
-+92?G^]4?7!'gM`#J^<>!!%NKrs+&S!!!'"s8N=S!!!!$s8W*!z&-)\/z!'gM`rVuou!!*'!
-s8Duu!!!-$s8W&u!!!!0s8W,sz5QCc`qu?]s!<<*!s7cQo!!iQ(s8Vio!!!Q0s8W,g!!!!`s8W-!n,NFgs8W-!
-s53kW"98E$s8V!W!!iQ(s8W,7!!", at s8W-!J,fR6s8W-!rr<$!J,fQKs8Duu!WW3"s8Vus!!E9$s8W,o
-!!!9(s8W-!n,NG!s8W-!s1eU7&-)\0s8N'!!$D7 at s8Vus!!#7`s8W,g!!!"Ks8W-!^]4?7J,fQKrr<$!
-!<<*!s82is!!*'!s8VQg!!!'"s8W,7!!!!"s8W-!z!WW3"qu?]s!!3-"s6p!g!!!-$s8Tk7!!!!$s8W*!z
-"98E!z!!E9$p](9o!:U*js53kW!!)Kjs8Tk7!!!&h"98CO!!!!"n,r^jz!Up3krVuou!!D]m
-s82is!!!,j"989!!!!!(n,`Rez#Ohcop](9o!"\Q"s7cQo!!!Q!!WVop!!!!@n,WL`z+7K:1
-p](9o!'frQs7cQo!!#7Q!.XbD!!!"Kn,Rt9zs6p"Qqu?]s!WVWh5PtK]!!E8j!$D1?!!!9(n,O!u!!!!0s6p"!rr<$!+91g1#QK;S!.Y%<!!E8Z!!3-"n,NIg
-n,N^ns6p!gJ,TF4s8VQg!'gM`s8RlD!!!Q0s8Virn,NFjs8W,7!Up'h!.Y%J!!2Qh!!!9(huEfI~>
-Q
-q[1 0 0 1 0 0]concat
-76 95 true[1 0 0 1 -2409 -3517]@85 imagemask
-+92B at p`KP9s6q-1
-s8Vj9s8W,g+92B at p`KP9s6pR!s8VQns8W,7!WW3"!!*'!s*t+Ls8DuuJ,fNK!.Y%H!!%NKrr<%Ks82is
-J,fKJ!'gM]!!*'!qu?^]s82iss8Vus!'gM]!!3-"p](:Ys82j!s8VQg!'gM]!!E9$huEaAs82j%s8V!W
-!'gM]!"],0^]4@!s82j-s8RTL!'gM]!$D7 at J,fR6s82j]s8N'!!'gM]!.Y%J!!!!`s82kHs82is!'gM]!<<)s!!!!`
-s82ots7cQo!'gM]!WW2h!!!!`s83!!s53kW!'gM]#QOh^!!!!`s83E-s1eU7!'gM]&-)Z[!!!!`s83u=
-s*t(L!'gM_5QC``!!!!`s8G7_rVuou!'gM`J,fEH!!!!`s8W-!qu?]s!'gM`s8Vio!!!!`s8W-!n,NFg
-!'gM`s8V!W!!!!`s8DuthuE`W!'gM]s8Tk7!!!!`s87BHJ,fQL!'gM]5Q?66!!!!`s83u=z!'gM]&,lP/!!!!`
-s83-"z!'gM]"8i-!!!!!`s82oqz!'gM]!<)ru!!!!`s82kHz!'gM]!'bu6!!!!`s82j=
-^]4?7!'gM]!"[uf!!!!`s82j%n,NFg!'gM]!!Dur!!!!`s82j!qu?]s!'gM]!!3'!!!!!`s82isrr<$!
-!'gM]!!%M!!!!!`s82isJ%u$a!'gM]!!#7Q!!!!`s82is5PP3Y!'gM]!!#7_!!!!`s82isJ,b$!!'gM]!!3-"huEaA
-s82j]s8W*!!'gM]!'gM`rr<$`s82j]s8W*!!'gM]!'gM`rr<$`s82isz!'gM]z!!!!`s82is
-z!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!", at s82isz+92B=z!!", at s82isz+92B=z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 94 true[1 0 0 1 -2489 -3488]@85 imagemask
-!$C\1z!!%NJ
-z!!!'"s*t(L!!!!$s8Tk7z#QOh^z!"],0n,NFg!!", at s7cQo!!!!@s8Vusz5QC9O
-z!'gMAIK0?J!!#7`i'%,@!!!!`s56*Az5QBX`z!'gMA%tFW[!!", at i"(><!!!!@s54-t
-z+917(^]4?7!"]+F"5j.Z!!!9(J-4^0!!!!"rW!&Yz!!!!"n,NFgz!Up'hz!!2ipz!!!#o
-zzp](9oz!;lfsz!!%BHz!!!"HzzIK0?Jz!<)ruz!!*$!
-z!!!'"z!!!!"rr<$!z"93lOz!!E7Oz!!!-$J,fQL!!!!(s1eU7z#QMR>
-z!"]+fz!!!Q0huE`W!!!!0s53kWz+91g1z!$D71z!!#7`n,NFg!!!!`s7cQoz5QCKY
-z!.Y%Hz!!%NKqu?]s!!!$!s82iszs8W&uz!<<)uz!!3-"rVuou!!!'"s8N'!
-!!!!$s8UsVz"98DYJ,fQL!!E9$O+731!!!9(s,V[1!!!!(s8Rkiz&-)Y7^]4?7!"],0#J^<>
-!!", at rr_0Z!!!!@s8E,Yz+92<Bn,NFg!'gM]!Up'h!!#7`quQ9e!!!"Ks82omzJ,f9Dp](9o!.Y%D!;HNo
-!!*'!n,W at d!!!$!s6p#9!!!!"s8VQgIK0?J!WW2X!.FnJ!!3-"huGq@!!!-$s1eV!!!!!$s8Tk7*rl9@
-#QOh>!$;1@!!iQ(J,g[A!!!Q0s*t([J,fQ[s8RTL&&8/F+92?@!"ZjF!$D7@!!!8>!!#7`rVup'huEaA
-s8Duu#N,R^5QC]_!!D]j!.Y%H!!!,j!!%NKqu?^!n,NIgs82is"8Diss8Vus!!iE%!WW3!!!!9'!!iQ(rr<$@rr>:`s8Virs8V"As8W,o"98DZ5QCc`p]LQri'78As7c]rs53~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -2558 -3517]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -2643 -3517]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2706 -3515]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2777 -3517]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2892 -3515]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-92 93 true[1 0 0 1 -2691 -3295]@85 imagemask
-5QCc`s*t(L#QOhn
-5QCc`s*t(L#QOhn5QCc`s*t(L&-)\!!<<*!huE`W+92?@!$D7 at z5QCKY!"],-zJ,f!<!!iQ%
-zJ,eF,!!iQ!zs8Tk7!!iQ!!!!!"s8RTL!!E8j!!!!$s8N'!!!E8j!!!!$s8Duu!!E8j!!!!(
-s82is!!E8j!!!!0s7cQo!!E8j!!!!@s7cQo!!E8j!!!!@s6p!g!!E8j!!!!`s53kW!!E8j!!!"Ks1eU7!!E8j!!!$!
-s*t(L!!E8j!!!'"s*t(L!!E8j!!!'"rr<$!!!E8j!!!-$rVuou!!E8j!!!9(qu?]s!!E8j!!!Q0p](9o
-!!E8j!!!Q0n,NFg!!E8j!!", at n,NFg!!E8j!!#7`huE`W!!E8j!!%NK^]4?7!!E8j!!*'!J,fQL!!E8j
-!!*'!z!!E8j!!3-"z!!E8j!!E9#z!!E8j!!iQ%z!!E8j!!iQ!z!!E8j!"],!z!!E8j
-!$D71z!!E8j!'gMAz!!E8j!'gM!z!!E8j!.Y$!z!!E8j!<<'!z!!E8j!WW-!
-z!!E8j"98?#z!!E8j"989!z!!E8j#QOQ!z!!E9$s8VQgz!!E9$s8V!Wz
-!!E9$s8W&uz!!E9$s8W,Wz!!E9$s8W,oz!!E8j"98E$z!!E8j!!iQ(^]4?7!!E8j!!*'!huE`W
-!!E8j!!", at p](9o!!E8j!!!9(qu?]s!!E8j!!!-$rVuou!!E8j!!!$!rr<$!!!E8j!!!"Ks*t(L!!E8j
-!!!!`s*t(L!!E8j!!!!`s1eU7!!E8j!!!!@s1eU7!!E8j!!!!@s53kW!!E8j!!!!0s53kW!!E8j!!!!0
-s53kW!!E8j!!!!0s53kW!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(
-s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g
-!!E8j!!!!(s6p!g!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!@s1eU7!!E8j
-!!!!@s1eU7!!E8j!!!!`s1eU7!!E8j!!!!`s*t(L!!E8j!!!"Krr<$!!!E8j!!!$!rr<$!!!E8j!!!'"rVuou!!iPn!!!9(qu?]s!!iQ!!!", at n,NFg!!iQ!!!*'!huE`W!"],/!$D7 at J,fQL
-!'gM`s8W-!z"98E$s8W,oz5QCc`s8W,7z5QCc`s8W&uz5QCc`s8RTLz~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -2785 -3295]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-62 107 true[1 0 0 1 -3768 -3293]@85 imagemask
-!!!$!huE`W!!!Q0
-rVuou!!#7`s*t(L!!*'!s53kW!!E9$s7cQo!!iQ(s82is!"],0s8N'!!'gMQ+9-ik!.Y$a"96.:!<<'!
-!<:sW!WW-!!.XJ<!WW&t!'g5Y"98,r!$D+=#QO8n!"]&/#QO8n!"]&/&-(Pf!!iN(+90+V!!iOS+90+V
-!!E7O+90+V!!E8:5Q?66!!E8Z5Q?66!!3,XJ,b$!!!3,XJ,]KK!!3,hJ,]KK!!3,hJ,]KK!!*&os8N'!!!*&os8N'!
-!!*&os8Duu!!*&os8Duu!!*&os8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu
-!!*&ss8Duu!!*&ss8Duu!!*&sJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,t5Q:]`!!3,p5Q:]`
-!!E8r+9)<@!!E8r+9)<@!!E8r+9-ik!!iQ!&-%.[!!iPn#QK;S!"],!#QMR>!"],!"96.:!$D7!!WV'X!$D7!!WV'X
-!'gM!!<;Ng!'gM!!.XbD!.Y$!!'gA]!<<(L!$D1?!WW0"!!iN("98?#!!E7O"98?#!!3,X#QO]%!!%ND
-&-)D)!!", at +91g1!!!9(s8V!W!!!$!s8Tk7!!!!`s8RTL!!!!(s8N'!!!!!(s8Duu!!!!0s82is!!!!@
-s7cQo!!!!`s53kW!!!"Ks1eU7!!!$!rr<$!!!!'"rVuou!!!-$p](9o!!!9(huE`W!!!Q0^]4?7!!", at z!!%NH
-z!!*&oz!!3,Xz!!E8:z!!iN(z!"]&/z!"\u-z!$Ct9z!'frQ
-z!'fBAz!.Vcaz!.TM!!!Dur!<3$!!"]&/!<3$!!$D1?!<)ru!'gJ`!<)ru!.Y"K!<)ru
-!<<'!!<)ru!WW0"!<)ru"98B$!<3$!#QOf(!<3$!&-)V/!.TM!5QC]_!.VcaJ,fEH!'fBBs8Vio!$D+Ds8VQg!"],0s8Tk7!!iQ(s8RTL!!E9$s8Duu!!*'!s6p!g!!#7`s*t(L!!!'"n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-79 106 true[1 0 0 1 -3756 -2453]@85 imagemask
-z!!!!(n,NFg
-z!$D1?"979Z!!!!`rr<0$huE`W!<<(L!WVWh!!!'"s1e[8n,NFg!WW2X!<;fo!!!-$s6p$gp](9o
-#QOhn!<;rs!!!9(s7cSDqu?]s&-)\)!.XtJ!!!Q0s7cRYrVuou+92B=!'gJ`!!",@"8i- at rr<$!5PtQ[
-!$D5k!!#7Y!.4bWs*t(L5O\Z%!"]+F!!#7A!'UAfs1eU7J%u%*!!iP^!!%Ma!$2+Bs53kWIt.M?!!E8j!!%M!!"Ju2
-s6p!grr<$/!!3,h!!*$!!"Ju0s7cQorVup.!!*&o!!)uuzs82itrVuou!!%NH!!2utzJ,TEK
-qu?]s!!#7_!!2utz5Q:]aqu?]s!!",@!!2utz+9-inp](9o!!!Q0J-5QHz&-'EIp](9o
-!!!Q0^]X?3z#QN]an,NFg!!!9(i!8`Oz"97iqn,NFg!!!-$n-AF_z!WVWon,NFg!!!'"p]o^Wz
-!<;g!huE`W!!!$!r"%]cz!.XnWhuE`W!!!"KrX[oez!'gGn^]4?7!!!!`rsumFz!'gJo
-^]4?7!!!!@s.@(,z!$D65^]4?7!!!!0s5/>,z!"]+eJ,fQL!!!!(s8RTLz!!iQ(J,fQL
-!!!!$s8RTLz!!E9$z!!!!"s8N'!z!!3-"zzs8N'!z!!*'!zzs8Duuz
-!!%NJzzJ,TEJz!!#7_zz5Q1W_z!!",=zz+8c*=z!!!Q-
-zz&,ZD-z!!!9%zz#P\9!z!!!,rzz"8Dirz!!!,rz
-z"7Q9jz!!!8nzz#Oh]nz!!!8nzz#N,R^z!!!Pfzz&)[Efz
-!!!Pfzz+2 at jV!!!"D!!"+Vz!-eJD+2 at jV!!!!Y!!#66z!&srY5C`_6!!!!]!!#66
-z!'C5]IfKHK!!!!_!!%KKz!'UA_rr<$!!!!!@!!3'!z!$?^nrVuou!!!!@^^'i=z
-!$CtXqu?]s!!!!0s8Vusz!"],0qu?]s!!!!0s8Vioz!!iQ(p](9o!!!!(s8VQgz!!E9$huE`W!!!!"s8Tk7z!!3-"J,fQLzJ,]KKz!!#7]zz&+BQ!z~>
-Q
-q[1 0 0 1 0 0]concat
-96 93 true[1 0 0 1 -2675 -3060]@85 imagemask
-5QCc`s8V!Wz
-5QCc`s8W+Lz5QCc`s8W,sz!.Y%Ks8W-!J,fQL!$D7 at s8W-!n,NFg!!iQ(!!E9$qu?]s!!E9!
-!!!Q0s*t(L!!E9!!!!$!s53kW!!E8r!!!!@s6p!g!!3,p!!!!(s82is!!3,p!!!!"s8Duu!!3,pz
-J,b$!!!3,pz5QAM!!!3,pz+917!!!3,pz#QO8n!!3,pz"98,r!!3,pz!WW&t!!3,pz
-!<;rs!!3,pz!.XtJ!!3,pz!.Y"K!!3,pz!'gJ`!!3,pz!$D5k!!3,pz!$D6V
-!!3,pz!"]+F!!3,pz!!iP^!!3,pz!!iP^!!3,pz!!iPn!!3,pz!!E8j!!3,p
-z!!E8r!!3,pz!!3,p!!3,pz!!3,p!!3,pz!!3,t!!3,pz!!3,t!!3,pz!!*&s!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!%NJ!!3,pz
-!!%NJ!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!*'!!!3,pz!!*&u!!3,pz!!*&u!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!3-!!!3,pz!!3,t!!3,pz!!3,t!!3,pz
-!!E9!!!3,pz!!E9!!!3,pz!!E8r!!3,pz!!iQ!!!3,pz!!iQ!!!3,pz!"],!!!3,pz
-!"],!!!3,pz!$D7!!!3,pz!$D7!!!3,pz!'gM!!!3,pz!.Y$!!!3,pz!<<(L
-!!3,pz!<<'!!!3,pz!WW-!!!3,pz"989!!!3,pz#QO]%!!3,pz&-)D)!!3,p
-z+91g1!!3,pzJ,eF,!!3,pzs8Tk7!!3,p!!!!"s8N'!!!3,p!!!!(s8Duu!!3,p!!!!@s7cQo!!E8r!!!"Ks6p!g!!E9!!!!-$s1eU7!!iQ%!!", at rr<$!!"],0!!iQ(qu?]s
-!$D7 at s8W-!n,NFg!WW3"s8W-!J,fQL5QCc`s8W,oz5QCc`s8W+Lz5QCc`s8Tk7z~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2777 -3059]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-58 65 true[1 0 0 1 -2839 -3059]@85 imagemask
-!!!'"p](9o!!!Q0
-rr<$!!!#7`s1eU7!!*'!s53kW!!3-"s7cQo!!E9$s82is!"],0s8Duu!$D7 at s8N'!!$D7 at s8RTL!'gM`
-s8Tk7!.Y%H!'fBA!<<)W!!hun!<<(L!!D]j!WW0"!!)co!WW-!!!%BH"989!!!#+]"98,r!!"&?#QO8n
-!!!N0#QN]^!!!6(#QN]^!!!7S&-'EF!!!+O&-%.[!!!&8&-%.[!!!$"&,uV0z+9)<@z+9)<@z+8u6?
-z+8u6?z+8u6?z+8u6?z+8u6?z+8c*=z+8c*=z+8c*=z+8c*=
-z+8c*=z+8c*=z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z#Q+Q%
-z#Q=]'z#Q=]'z"9&9#!!2Qh"9&9#!!i9!!WN-"!"\u-!WN-"!"]&/!<3$!!$D1?!<7QL!$D4@!.TM!!'gJ`!'e7!!'gJ`!$C,!!'gG_!$C,!!'gG_!"\Q!!.XtJ!!i9!!.XnH!!E-!
-!.XbD!!)uu!<;Ng!!%M!!WV'X!!#7Q"96.:!!!Q0s8RTL!!!-$s8Duu!!!$!s7cQo!!!!@s1eU7~>
-Q
-0.564706 g
-3297.35 2610.95 m
-3297.35 2648.15 3267.35 2678.15 3230.15 2678.15 c
-2343.35 2678.15 l
-2306.15 2678.15 2276.15 2648.15 2276.15 2610.95 c
-2276.15 2204.15 l
-2276.15 2166.95 2306.15 2136.95 2343.35 2136.95 c
-3230.15 2136.95 l
-3267.35 2136.95 3297.35 2166.95 3297.35 2204.15 c
-f*
-1 g
-3232.55 2666.15 m
-3232.55 2703.35 3203.75 2732.15 3166.55 2732.15 c
-2288.15 2732.15 l
-2252.15 2732.15 2222.15 2703.35 2222.15 2666.15 c
-2222.15 2267.75 l
-2222.15 2230.55 2252.15 2201.75 2288.15 2201.75 c
-3166.55 2201.75 l
-3202.55 2201.75 3232.55 2230.55 3232.55 2267.75 c
-f*
-0 g
-3232.55 2666.15 m
-3232.55 2703.35 3203.75 2732.15 3166.55 2732.15 c
-2288.15 2732.15 l
-2252.15 2732.15 2222.15 2703.35 2222.15 2666.15 c
-2222.15 2267.75 l
-2222.15 2230.55 2252.15 2201.75 2288.15 2201.75 c
-3166.55 2201.75 l
-3202.55 2201.75 3232.55 2230.55 3232.55 2267.75 c
-h
-S
-3050.15 2187.35 15.5999 549.6 re
-Y
-3057.35 2739.35 m
-3057.35 2194.55 l
-S
-3057.35 2368.55 189.6 15.5999 re
-Y
-3054.95 2376.95 m
-3239.75 2376.95 l
-S
-0 0 6120 7920 re
-Y
-3095.75 2378.15 m
-3095.75 2400.95 3077.75 2418.95 3056.15 2418.95 c
-3034.55 2418.95 3016.55 2400.95 3016.55 2378.15 c
-3016.55 2356.55 3034.55 2338.55 3056.15 2338.55 c
-3077.75 2338.55 3095.75 2356.55 3095.75 2378.15 c
-f*
-3275.75 2378.15 m
-3275.75 2400.95 3257.75 2418.95 3236.15 2418.95 c
-3214.55 2418.95 3196.55 2400.95 3196.55 2378.15 c
-3196.55 2356.55 3214.55 2338.55 3236.15 2338.55 c
-3257.75 2338.55 3275.75 2356.55 3275.75 2378.15 c
-f*
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -2581 -2562]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -2666 -2562]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2729 -2560]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2798 -2562]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2915 -2560]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-130 95 true[1 0 0 1 -2289 -2338]@85 imagemask
-z!&+BQ!!!#7
-zz!!"tYzhuE`Wz!!!"Dz!T3qXzzGQ7^D!!2!Xzz!.4bH
-!!!&hzz!!)os!!!!$n,NFgz!!!#sz"7Q9jzzrVuou!!Durzz
-!WE'!!!!9!zz!!3*"!!!!(p](9oz!!!'"z&,ZD-z!!!!$rr<$!!"\u-zz"93lO
-!!!Q-zz!!iOS!!!!@rVuouz!!!9(J,fQL+8u6?z!!!!(s1eU7!$D1?zz
-&-'EF!!#7`zz!"]+F!!!!`rr<$!z!!!Q0huE`WJ,]KKz!!!!@s53kW!.Y$!z
-z+91g1!!%NKJ,fQLz!$D71!!!$!s*t(Lz!!#7`n,NFgs8Tk7z!!!!`s7cQo!WW28zz
-J,f9D!!3-"^]4?7z!.Y%D!!!'"s53kWz!!%NKqu?^!s8V!Wz!!!$!s82is"98DZz
-zs8Vus!!E8qn,NFgz!<<&t!!!9(p[A._z!!3-!rVup's7>^[z!!!'"r-n\H&-(\b
-z!!!!"s87?H!"]+ip](9oz"989`!!!Q0iV3BQz!!E8r5C`_Us2"U5z!!!-$pcj9/+901Tz
-!!!!(s7d[d!$D5kqu?]sz#QO98^]6V!JGoNKz!"],!+2 at k@s+#Ouz!!!Q0i"*U'J,]Lt
-z!!!!0s54FG!.Y"KIfKHKz+917(huJ9+!'^G`z!$D6V#Oh`nrW#._z!!",@^^'?/
-s8E!_J,fQL!!!!`s*t4@!<;rs++O=kz5Q?69p]:Em!$?^kz!'gL6"8Dosqu at hSz!!%NK!!2iss7cR)
-^]4?7!!!"Krr<)t"98,r&)[EfzJ,]KKqucug!!hE^z!<<#u!;m*%n,N^Oz!!*&u!!*!'
-s6p!nn,NFg!!!'"qu?_G#QN]^"7Q9j!!!!"s82isIh2S;!!D]jz!WW&t!.POZ^]4K3z!!E8r
-!!#5*s1eU8p](9o!!!-$p](:YTDu\,!VcWp!!!!$s6p!g+.rR`!!)osz#QO8n!$AuUJ,fTIz!!iPn!!",@
-rr<$!rVuou!!!9(huE`fs8N'!!.FnJ!!!!0s53kW&-)Y0!!%HJz&-(Pf!!iQ'!!!"Kz!$D6V
-!!!9(rVuou56(Z`!!",@^]4?>s8Duu!'^G`!!!!@s*t(L"989!!!#66z5Q?66!!E9!!!!!@J,fQL
-!'gL6!!!-$p](9o++O=k!!#7`!!!!$s7cQo!"ZjF!!!"Krr<$!"98,r!!!PFzJ,TEJ!!E8j!!!!0huE`W!.XtJ
-!!!9(n,NFg#N,R^!!*&u!!!!(s53kW!!hE^!!!$!qu?]s&-(Pf!!!8nzs82is!"]+f!!!!$n,NFg
-!WW&t!!!Q0^]4?7"7Q9j!!3,p!!!!@s1eU7!!2ip!!!-$p](9o+90+V!!!&p!!!!$s6p!g!'gL6!!!!"
-qu?]s"97ij!!#7`J,fQL!W2ot!!iPn!!!!`rr<$!!!)os!!!9(huE`WJ,]KK!!!#u!!!!0s53kW!.XtJzrVuou
-&-(Pf!!*&uz!<)ru!$D6V!!!$!rVuou!!*$!!!",@^]4?8s8Duu!!!$!!!!!`s1eU7!WW&tz
-s*t(LJ,d:a!!E9!z!<7QL!.Y$a!!!9(rVuou!!*&7!!*'!^]4?>s8Duu!!!'"huElZs53kW+92?@
-!!!!$s7cR)s8Vus!.Y%KhuE`W5QC``J,fQKi",kfs8RTL!WW3"^jlCas54Ffs8W+L!!3-"s1j-as8V!fs8W-!J,fWMs8Tk~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -2423 -2339]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-67 65 true[1 0 0 1 -2484 -2338]@85 imagemask
-z(]XO9z
-!&srYz!!#+]z!!!"HzzIK0?Jz!.FnJz!!*$!z!!!$!z!!!!"
-rr<$!z!WRZMz!!3+Mz!!!-$^]4?7!!!!$s1eU7z#QMR>z!!iP^z!!!Q0
-huE`W!!!!0s6p!gz&-),!z!$D71z!!",?p](9o!!!!`r:g6lz5Q#m/z!'g7+z!!%ND
-HiO-H!!!"Kpc\ZXzs6r2Pz!<;OQz!!3,X*rl9@!!!'"i#_q!!!!!"s54E<z"96.I
-J,fQL!!E8:&&8/F!!!9(J-Wji!!!!(s*t?iz#QK;VhuE`W!"])0"5j.Z!!!Q0!!D]j!!!!@rVuug
-z+8u6 at n,NFg!'gG_!VcWp!!#7]!!)co!!!!`qu?`pzJ+s!DHiO-H!.XbD!.4bH!!*&o!!%HJ!!!$!n,NGPzs6p!g4obQ_!WV'X!'^G`!!3,X!!")@!!!-$huEa!J,fQOs1eU7%tFW[
-#QMR>!"XS[!!iOS!!!PF!!!Q0J,fQS^]4?Fs*t(L#N,R^+9)<@!!hE^!$D4@!!!,j!!#7`!!!!$n,NGQ
-rr<$!"8DirJ,]KK!!Dur!<<'!!!!9%!!3-"J,fQ[rW!3's53kW5Q?6Us8Vus!WW2X+92B=!!3-"hu~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2553 -2339]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-36 95 true[1 0 0 1 -2616 -2340]@85 imagemask
-+92B at n/q]1s6p'h
-s8N'!5QCKY!"]+f!!!9(huE`^s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!iP>!!!9(^]4?Fs1eUVs8Tk7+92AV!$D7@^]4E8s1eU7+90+V!!3,8!!!!`^]4?7#J^<~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2655 -2339]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -2718 -2340]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-66 95 true[1 0 0 1 -2787 -2309]@85 imagemask
-!!!-$huE`W!!!"K
-s8N'!!!!!"s8W,Wz&-)\0qu?]s!$D7 at s8N'!!!%NKs8W,7!!!$!s8W-!n,NFhs8W-!s7cQo"98DZ
-!'gG_!!iQ'!!!'"!!!9(n,NFg5C`_Es1eU7!!hE^&-%.[!!!&h!"])0zp](j(z!-eJSrVuou
-!!#+]&,ZD-!!!!?!!iE%z%KHb3z!"T&7qu?]s!!!6("8i-!!!!!(J-#QJz#ClgRz!!e#SIK0?J
-!!!7S!.OtK!!!!(J,g[Az%tFWjJ,fQL!$?^k#J^<>!!%M!!!D-Z!!!Q0!!!&h"98E$rr<$!F8u:?
-s8N'!!.Y%Ks8W&u!!3-"s8W,s!!!9(s8W-!qu?^-s8W-!s7cQo+92B at s8V!W!$D7 at s8W,7!!#7`s8W-!
-!!!!`s8W-!n,NFg5QCc_z!$D4 at z!!",1z!!!!@huE`Wz&)[Efz!!hE^z!!!,Zz
-!!!!"n,NFgz!:Tsgz!!%6Dz!!!!]zz*WQ0?z!"XS[z!!!8mrVuou
-!!!!$s8V!Wz#QOi!z!"],0rVuou!!#7`!WN-"!!!"KquD5^!!!!"s6p"1huE`W"979Z&+BQ!
-!!E8:!"\i)!!!9(^]4W;!!!!0s*t(Squ?]s&,uV0#Q=]'!$D4@!!E3#!!",?!!!-$!!!!`rVup#rr<$!5Q1W_"9/?$
-!'gA]!!E7O!!#7]!!!-$J,fR6qu?^!s*t(L5PtK]"93lO!'gA]!!E7O!!#7]!!!-$J,fR6p](:!s*t(L
-5PP3Y#QK;S!'g5Y!!iOS!!#7Y!!!9(J,fQkp](:)s*t(L+8>g9&,uV0!$Ct9!"])0!!!Q)!!",@!!!!0
-qu?^=rr<$!#Q+Q%+8u6?!!iE%!'gG_!!!-#!!#7]!!!!$rVuqJs8Tk7!WN-"s8W,7!!*%L!WW3"^]4 at a^]XW:s1eU75N!(Ps8Tk7!"],0s1eU7!!!-$s82iszs8VQgz!'gJ`!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -2857 -2339]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-68 95 true[1 0 0 1 -2897 -2340]@85 imagemask
-J,fQJ"98E$n:1K<
-rWE3#s6pR!s7cSDs8Tk8s8RTL#QOc'!<<'!!!E9!!!%NJ!!!'"p](;DrVup!s7cQo5Q1W_!WVWh!'gA]
-!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]
-!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]
-!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]s
-s6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!
-n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!
-n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!3,h!!#7_!!!'"huEaArr<$"s53kW5QAM!"979Z!'gMA!!E8Z
-!!#7^n,N^n^]4@!rVQX+s1eU75Q(N]5QAM!!'gC2s8W+L!!#7]5QCc`J,fR6r#bt=rr<$!5Pu&ls8Duu
-!'gA`s8Vus!!#7]!WW2p!!!!`quD6HhuE`W5PtKls*t(L!'gA]z!!#7]z!!!!`qu?]sz5PtK]z
-!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz
-5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`
-qu?]sz5PtK]z!'gA]z!!%NHz!!!$!qu?]s!!!"Ks82iszJ,fEHz!'gM]z!!!9(qu?]szs82isz!"\u-z!!!&tzz49,?]!!!!~>
-Q
-3346.55 2079.35 15.5999 1860 re
-Y
-3353.75 3941.75 m
-3353.75 2087.75 l
-S
-3237.35 3328.55 129.6 15.5999 re
-Y
-3234.95 3336.95 m
-3359.75 3336.95 l
-S
-0 0 6120 7920 re
-Y
-3275.75 3338.15 m
-3275.75 3360.95 3257.75 3378.95 3236.15 3378.95 c
-3214.55 3378.95 3196.55 3360.95 3196.55 3338.15 c
-3196.55 3316.55 3214.55 3298.55 3236.15 3298.55 c
-3257.75 3298.55 3275.75 3316.55 3275.75 3338.15 c
-f*
-3395.75 3338.15 m
-3395.75 3360.95 3377.75 3378.95 3356.15 3378.95 c
-3334.55 3378.95 3316.55 3360.95 3316.55 3338.15 c
-3316.55 3316.55 3334.55 3298.55 3356.15 3298.55 c
-3377.75 3298.55 3395.75 3316.55 3395.75 3338.15 c
-f*
-3237.35 3088.55 129.6 15.5999 re
-Y
-3234.95 3096.95 m
-3359.75 3096.95 l
-S
-0 0 6120 7920 re
-Y
-3275.75 3098.15 m
-3275.75 3120.95 3257.75 3138.95 3236.15 3138.95 c
-3214.55 3138.95 3196.55 3120.95 3196.55 3098.15 c
-3196.55 3076.55 3214.55 3058.55 3236.15 3058.55 c
-3257.75 3058.55 3275.75 3076.55 3275.75 3098.15 c
-f*
-3395.75 3098.15 m
-3395.75 3120.95 3377.75 3138.95 3356.15 3138.95 c
-3334.55 3138.95 3316.55 3120.95 3316.55 3098.15 c
-3316.55 3076.55 3334.55 3058.55 3356.15 3058.55 c
-3377.75 3058.55 3395.75 3076.55 3395.75 3098.15 c
-f*
-3237.35 2368.55 129.6 15.5999 re
-Y
-3234.95 2376.95 m
-3359.75 2376.95 l
-S
-0 0 6120 7920 re
-Y
-3275.75 2378.15 m
-3275.75 2400.95 3257.75 2418.95 3236.15 2418.95 c
-3214.55 2418.95 3196.55 2400.95 3196.55 2378.15 c
-3196.55 2356.55 3214.55 2338.55 3236.15 2338.55 c
-3257.75 2338.55 3275.75 2356.55 3275.75 2378.15 c
-f*
-3395.75 2378.15 m
-3395.75 2400.95 3377.75 2418.95 3356.15 2418.95 c
-3334.55 2418.95 3316.55 2400.95 3316.55 2378.15 c
-3316.55 2356.55 3334.55 2338.55 3356.15 2338.55 c
-3377.75 2338.55 3395.75 2356.55 3395.75 2378.15 c
-f*
-3357.35 3328.55 249.6 15.5999 re
-Y
-3354.95 3336.95 m
-3599.75 3336.95 l
-S
-0 0 6120 7920 re
-Y
-3395.75 3338.15 m
-3395.75 3360.95 3377.75 3378.95 3356.15 3378.95 c
-3334.55 3378.95 3316.55 3360.95 3316.55 3338.15 c
-3316.55 3316.55 3334.55 3298.55 3356.15 3298.55 c
-3377.75 3298.55 3395.75 3316.55 3395.75 3338.15 c
-f*
-3635.75 3338.15 m
-3635.75 3360.95 3617.75 3378.95 3596.15 3378.95 c
-3574.55 3378.95 3556.55 3360.95 3556.55 3338.15 c
-3556.55 3316.55 3574.55 3298.55 3596.15 3298.55 c
-3617.75 3298.55 3635.75 3316.55 3635.75 3338.15 c
-f*
-3357.35 2368.55 248.4 188.4 re
-Y
-3357.35 2376.95 m
-3597.35 2556.95 l
-S
-0 0 6120 7920 re
-Y
-3395.75 2378.15 m
-3395.75 2400.95 3377.75 2418.95 3356.15 2418.95 c
-3334.55 2418.95 3316.55 2400.95 3316.55 2378.15 c
-3316.55 2356.55 3334.55 2338.55 3356.15 2338.55 c
-3377.75 2338.55 3395.75 2356.55 3395.75 2378.15 c
-f*
-3635.75 2558.15 m
-3635.75 2580.95 3617.75 2598.95 3596.15 2598.95 c
-3574.55 2598.95 3556.55 2580.95 3556.55 2558.15 c
-3556.55 2536.55 3574.55 2518.55 3596.15 2518.55 c
-3617.75 2518.55 3635.75 2536.55 3635.75 2558.15 c
-f*
-3357.35 2908.55 248.4 188.4 re
-Y
-3357.35 3096.95 m
-3597.35 2916.95 l
-S
-0 0 6120 7920 re
-Y
-3395.75 3098.15 m
-3395.75 3120.95 3377.75 3138.95 3356.15 3138.95 c
-3334.55 3138.95 3316.55 3120.95 3316.55 3098.15 c
-3316.55 3076.55 3334.55 3058.55 3356.15 3058.55 c
-3377.75 3058.55 3395.75 3076.55 3395.75 3098.15 c
-f*
-3635.75 2918.15 m
-3635.75 2940.95 3617.75 2958.95 3596.15 2958.95 c
-3574.55 2958.95 3556.55 2940.95 3556.55 2918.15 c
-3556.55 2896.55 3574.55 2878.55 3596.15 2878.55 c
-3617.75 2878.55 3635.75 2896.55 3635.75 2918.15 c
-f*
-q[1 0 0 1 0 0]concat
-82 74 true[1 0 0 1 -3758 -2873]@85 imagemask
-!!!$!huE`W&&8/F
-!"],/!!!!`n,NFgJ,fP!!!%ND!!!'"s8V!W!<;rs!!E9$s7cQps82is&-(QPqu?j!rVup?s*tX[!!E9#
-!!#7_!!iOS#QOf(!.XnH"96.As8N'!s7cQps54Ffrr<*"p](<on.5R!J-#]>!!%N<&,:X)"979Z!.Xbc
-n/m/cs53kW5PuV]%tFob^]4?Vr'.t-J.M[q!!",?5C`uh&-'EF!"]&nJ-Wk3s*t(L&-%+Z#J_G]J,fQSs*k"N^`WT,
-!!!9(rW!&95Q?66!!E9#!!C#$rr<$!"989!"2I/$!!!!$s82j!^jl at a!!!'"qu?]sJ,]KK!!3,p!!!"K
-rr<$!!<;fo!!%NKzs7cQo!.XtJ!!!$!p](9oJ,TEJ!!%ND!!!$!rVuou!.XbD!!*&uzJ,B9H
-!<<#u!!!!`qu?]ss8Duu!!#7]!!!$!rVuou!'gG_!!*&uz+8u6?!<<#u!!!!@rVuous8Duu!!",@!!!$!rVuou
-!$D4@!!*&uz+9)<@!<<#u!!!!@s*t(Ls8Duu!!", at J,fTLrVuou!'gL6!!*&uz5QAM!!<<#u
-!!!!`s1eU7s8Duu!!#7`huEb,rVuou!'gMA!!%NKzJ,eF,!.Y"K!!!"Ks6p!gJ,]KK!!%KJn,NH<
-rr<$!!.Ot;!!#7`zrr;`n!'gJ`!!!#uJ+s!D5Q?66!!)qHp](:Ys*t(L!W7HF!!", at J,fQMr'1)Z!$D5k!!!&p
-5PtK]&-'EF!!E!\rVup/s1eU7"8Eu;!!!9(^]4?>n/qZ1!!iP^!!!8n+9)<@"979Z!"[uurr<$$s6p!g
-+5d\0J,fWMn,NGQ^^pHq!!*&o!!#7!#QK;S!.XnH!<7QSs1eU75Q1W`rr<0$^]4?Vrr<<'!!E8:!!!Q0
-i#hjs"979Z!!iQ(s7cQps53kW!WW3"n,NLhn,NFgJ,fQ,!!3,h!!!!@s8RTL!<;Ng!!!9(rVuous7cQo!!%N,z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-96 100 true[1 0 0 1 -2325 -3767]@85 imagemask
-z!!!Q)z
-z!!iQ(n,NFgz!.Y%Krr<$!z"98E$s1eU7z+92B at s7cQozJ,fQKs82is!!!!"
-s8W-!s8N'!!!!!(s8W+Ms8Tk7!!!!0s8VQg#QN]^!!!!`s8RTL!<;Ng!!!"Ks8Duu!$D+=!!!$!s7cQo
-!!iK'!!!'"s6p!g!!E6$!!!9(s53kW!!*%L!!!Q0s*t(L!!%Ma!!", at rr<$!!!",!!!", at rr<$!!!!Q!!!#7`rVuou
-!!!9!!!%NKqu?]s!!!-!!!*'!qu?]s!!!'!!!3-"p](9o!!!$!!!3-"p](9o!!!"J!!E9$n,NFg!!!!]
-!!E9$n,NFg!!!!9!!iQ(huE`Wz!!iQ(huE`Wz!"],0huE`Wz!"],0^]4?7z!$D7@
-^]4?7z!$D7@^]4?7z!'gM`^]4?7z!'gM`J,fQLz!'gM`J,fQLz!.Y%KJ,fQLz!.Y%K
-J,fQLz!.Y%KJ,fQLz!<<*!J,fQLz!<<*!J,fQLz!<<*!J,fQLz!<<*!z
-z!<<*!zz!<<*!zz!WW3"zz!WW3"zz!WW3"zz
-!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"zz
-!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"
-zz!<<*!zz!<<*!zz!<<*!zz!<<*!zz!<<*!z
-z!<<*!J,fQLz!.Y%KJ,fQLz!.Y%KJ,fQLz!.Y%KJ,fQLz!'gM`J,fQLz!'gM`J,fQL
-!!!!]!'gM`J,fQL!!!"H!$D7@^]4?7!!!"H!$D7@^]4?7!!!#s!$D7@^]4?7!!!#s!"],0^]4?7!!!&t
-!"],0^]4?7!!!&t!!iQ(huE`W!!!-!!!iQ(huE`W!!!-!!!E9$huE`W!!!9%!!3-"n,NFg!!!Q-!!3-"
-n,NFg!!!Q-!!*'!n,NFg!!",=!!%NKp](9o!!#7]!!%NKp](9o!!#7]!!#7`qu?]s!!%NH!!", at qu?]s!!*&s!!!Q0
-rVuou!!3,t!!!9(rVuou!!E9!!!!-$rr<$!!!iQ%!!!'"s*t(L!"],-!!!$!s1eU7!$D7=!!!"Ks53kW
-!.Y%H!!!!`s6p!g!<<)s!!!!0s7cQo"98E!!!!!(s8Duu&-)\-!!!!"s8RTL5Q?B6zJ,f!=s82oq
-z+92B at s6p$dz#QOi(s*t+Iz!WW3"qu?_Ez!$D7 at huEb)z!!*&s!!!!]~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2426 -3770]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-73 96 true[1 0 0 1 -2543 -3741]@85 imagemask
-+92B at s*t(L!!",@
-s8W+Lz+92B at s*t(L!!", at s8Vioz"98E$^]4?7!!!$!s8RTLz!.Y%Kz!!!!`s8Duu
-z!'gM_z!!!!`s8Duuz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`
-s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82j=
-^]4?7!'gM]!WW&t!!!!`s83-%s*t(L!'gM]&-)[f!!!!`s83u=s6p!g!'gM]J,fQD!!!!`s8;oss8Duu
-!'gM^s8W-!!!!!`s8W!=s8N'!!'gM`n-B!nJ,fR6s8Tk8s8Tk7!'gM`J,oWLhuEaAs8N'!s8V!W!'gM`!!%NKn,NGQ
-s8DuuJ,f!<!'gM]!!#7`p](:Ys82is5QCKY!'gM]!!#7`qu?^]s82is+926=!'gM]!!", at rVup_s82is
-+92<?!'gM]!!", at rVup_s82is+92<?!'gM]!!", at rr<$`s82is&-)Y0!'gM]!!!Q0rr<$`s82is&-)Y0
-!'gM]!!!Q0rr<$`s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6
-s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is
-&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0rr<$`s82is&-)Y0!'gM]!!!Q0rr<$`s82is+92?@
-!'gM]!!", at rr<$`s82is+92<?!'gM]!!", at rVup_s82is+92<?!'gM]!!", at qu?^]s8Duu5QCW]!'gM_!!#7`p](:Ys8N'!5QCKY!'gM`J,k*!n,NGQs8Tk7
-J,f!<!'gM`huNfWhuEaAs8DEfs8V!W!'gM^qud!!^]4 at as8;m-s8RTL!<<)sJ,fQK!!!-$s87BHs8Duu
-+92B=5QCc]!!", at s83u=s7cQo+92B=&-)[f!!", at s83!!s*t(Lz!<<#uz!!!!0^]4?7~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -2619 -3770]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -2706 -3770]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2768 -3768]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2839 -3770]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2955 -3768]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/complex.eps b/ast-5.3-1/sun211_figures/complex.eps
deleted file mode 100644
index 2d8ccb0..0000000
--- a/ast-5.3-1/sun211_figures/complex.eps
+++ /dev/null
@@ -1,1572 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 38 119 571 462
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/05 15:49:04
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5333.75 4140.95 m
-5333.75 4372.55 5145.35 4560.95 4913.75 4560.95 c
-1312.55 4560.95 l
-1080.95 4560.95 892.55 4372.55 892.55 4140.95 c
-892.55 1619.75 l
-892.55 1388.15 1080.95 1199.75 1312.55 1199.75 c
-4913.75 1199.75 l
-5145.35 1199.75 5333.75 1388.15 5333.75 1619.75 c
-f*
-1 g
-5268.95 4196.15 m
-5268.95 4427.75 5081.75 4614.95 4850.15 4614.95 c
-1257.35 4614.95 l
-1025.75 4614.95 838.55 4427.75 838.55 4196.15 c
-838.55 1683.35 l
-838.55 1451.75 1025.75 1264.55 1257.35 1264.55 c
-4850.15 1264.55 l
-5081.75 1264.55 5268.95 1451.75 5268.95 1683.35 c
-f*
-8 w
-1 J
-1 j
-0 g
-5268.95 4196.15 m
-5268.95 4427.75 5081.75 4614.95 4850.15 4614.95 c
-1257.35 4614.95 l
-1025.75 4614.95 838.55 4427.75 838.55 4196.15 c
-838.55 1683.35 l
-838.55 1451.75 1025.75 1264.55 1257.35 1264.55 c
-4850.15 1264.55 l
-5081.75 1264.55 5268.95 1451.75 5268.95 1683.35 c
-h
-S
-0.564706 g
-4913.75 3743.75 m
-4913.75 3896.15 4788.95 4020.95 4636.55 4020.95 c
-2969.75 4020.95 l
-2817.35 4020.95 2692.55 3896.15 2692.55 3743.75 c
-2692.55 1716.95 l
-2692.55 1564.55 2817.35 1439.75 2969.75 1439.75 c
-4636.55 1439.75 l
-4788.95 1439.75 4913.75 1564.55 4913.75 1716.95 c
-f*
-1 g
-4848.95 3798.95 m
-4848.95 3951.35 4725.35 4074.95 4572.95 4074.95 c
-2914.55 4074.95 l
-2762.15 4074.95 2638.55 3951.35 2638.55 3798.95 c
-2638.55 1780.55 l
-2638.55 1628.15 2762.15 1504.55 2914.55 1504.55 c
-4572.95 1504.55 l
-4725.35 1504.55 4848.95 1628.15 4848.95 1780.55 c
-f*
-0 g
-4848.95 3798.95 m
-4848.95 3951.35 4725.35 4074.95 4572.95 4074.95 c
-2914.55 4074.95 l
-2762.15 4074.95 2638.55 3951.35 2638.55 3798.95 c
-2638.55 1780.55 l
-2638.55 1628.15 2762.15 1504.55 2914.55 1504.55 c
-4572.95 1504.55 l
-4725.35 1504.55 4848.95 1628.15 4848.95 1780.55 c
-h
-S
-0.564706 g
-4493.75 2205.35 m
-4493.75 2247.35 4460.15 2280.95 4418.15 2280.95 c
-3188.15 2280.95 l
-3146.15 2280.95 3112.55 2247.35 3112.55 2205.35 c
-3112.55 1755.35 l
-3112.55 1713.35 3146.15 1679.75 3188.15 1679.75 c
-4418.15 1679.75 l
-4460.15 1679.75 4493.75 1713.35 4493.75 1755.35 c
-f*
-1 g
-4428.95 2261.75 m
-4428.95 2302.55 4396.55 2334.95 4354.55 2334.95 c
-3132.95 2334.95 l
-3090.95 2334.95 3058.55 2302.55 3058.55 2261.75 c
-3058.55 1817.75 l
-3058.55 1776.95 3090.95 1744.55 3132.95 1744.55 c
-4354.55 1744.55 l
-4396.55 1744.55 4428.95 1776.95 4428.95 1817.75 c
-f*
-0 g
-4428.95 2261.75 m
-4428.95 2302.55 4396.55 2334.95 4354.55 2334.95 c
-3132.95 2334.95 l
-3090.95 2334.95 3058.55 2302.55 3058.55 2261.75 c
-3058.55 1817.75 l
-3058.55 1776.95 3090.95 1744.55 3132.95 1744.55 c
-4354.55 1744.55 l
-4396.55 1744.55 4428.95 1776.95 4428.95 1817.75 c
-h
-S
-843.35 3052.55 319.2 15.5999 re
-Y
-840.95 3060.95 m
-1155.35 3060.95 l
-S
-0 0 6120 7920 re
-Y
-882.95 3062.15 m
-882.95 3083.75 864.95 3101.75 843.35 3101.75 c
-820.55 3101.75 802.55 3083.75 802.55 3062.15 c
-802.55 3040.55 820.55 3022.55 843.35 3022.55 c
-864.95 3022.55 882.95 3040.55 882.95 3062.15 c
-f*
-1113.35 3012.95 m
-1132.55 3060.95 l
-1113.35 3108.95 l
-1265.75 3060.95 l
-f*
-0.564706 g
-2393.75 3225.35 m
-2393.75 3299.75 2333.75 3360.95 2258.15 3360.95 c
-1448.15 3360.95 l
-1373.75 3360.95 1312.55 3299.75 1312.55 3225.35 c
-1312.55 2355.35 l
-1312.55 2280.95 1373.75 2219.75 1448.15 2219.75 c
-2258.15 2219.75 l
-2333.75 2219.75 2393.75 2280.95 2393.75 2355.35 c
-f*
-1 g
-2328.95 3281.75 m
-2328.95 3354.95 2270.15 3414.95 2195.75 3414.95 c
-1391.75 3414.95 l
-1318.55 3414.95 1258.55 3354.95 1258.55 3281.75 c
-1258.55 2417.75 l
-1258.55 2344.55 1318.55 2284.55 1391.75 2284.55 c
-2195.75 2284.55 l
-2268.95 2284.55 2328.95 2344.55 2328.95 2417.75 c
-f*
-0 g
-2328.95 3281.75 m
-2328.95 3354.95 2270.15 3414.95 2195.75 3414.95 c
-1391.75 3414.95 l
-1318.55 3414.95 1258.55 3354.95 1258.55 3281.75 c
-1258.55 2417.75 l
-1258.55 2344.55 1318.55 2284.55 1391.75 2284.55 c
-2195.75 2284.55 l
-2268.95 2284.55 2328.95 2344.55 2328.95 2417.75 c
-h
-S
-843.35 2632.55 319.2 15.5999 re
-Y
-840.95 2640.95 m
-1155.35 2640.95 l
-S
-0 0 6120 7920 re
-Y
-882.95 2642.15 m
-882.95 2663.75 864.95 2681.75 843.35 2681.75 c
-820.55 2681.75 802.55 2663.75 802.55 2642.15 c
-802.55 2620.55 820.55 2602.55 843.35 2602.55 c
-864.95 2602.55 882.95 2620.55 882.95 2642.15 c
-f*
-1113.35 2592.95 m
-1132.55 2640.95 l
-1113.35 2688.95 l
-1265.75 2640.95 l
-f*
-0.2 i
-1502 2904.14 m
-1502 2822.6 l
-1502 2807.66 1499.88 2805.32 1485.94 2804.42 c
-1485.94 2801 l
-1536.34 2801 l
-1536.34 2804.42 l
-1523.2 2805.32 1521 2807.84 1521 2820.62 c
-1521 2900.54 l
-1521 2913.32 1523.29 2915.66 1536.34 2916.74 c
-1536.34 2920 l
-1500.52 2920 l
-1460.74 2829.26 l
-1419.16 2920 l
-1383.52 2920 l
-1383.52 2917 l
-1398.28 2916.09 1401 2913.89 1401 2900.54 c
-1401 2827.46 l
-1401 2808.92 1398.43 2805.5 1383.16 2804.42 c
-1383.16 2801 l
-1425.46 2801 l
-1425.46 2804 l
-1411.6 2804.73 1409 2808.95 1409 2827.46 c
-1409 2900 l
-1453.72 2801 l
-1456.24 2801 l
-h
-1541.02 2801 m
-f*
-1620.56 2812.88 m
-1617.5 2810.36 1615.34 2809.2 1612.64 2809.2 c
-1608.5 2809.2 1607 2811.78 1607 2819.9 c
-1607 2855 l
-1607 2864.18 1606.16 2869.22 1603.82 2873.36 c
-1600.04 2880.2 1592.3 2883.8 1581.32 2883.8 c
-1572.14 2883.8 1563.5 2881.28 1558.46 2877.14 c
-1553.96 2873.36 1551 2868.14 1551 2863.64 c
-1551 2859.5 1554.46 2855.9 1558.82 2855.9 c
-1563.14 2855.9 1566.92 2859.5 1566.92 2863.46 c
-1566.92 2864.18 1566.74 2865.08 1566.56 2866.34 c
-1566.2 2867.96 1566 2869.4 1566 2870.66 c
-1566 2875.52 1571.77 2879.8 1578.98 2879.8 c
-1587.8 2879.8 1592 2874.47 1592 2864.54 c
-1592 2853.56 l
-1564.76 2842.4 1561.75 2840.96 1554.14 2834.12 c
-1550.18 2830.52 1547.66 2824.4 1547.66 2818.46 c
-1547.66 2807.12 1555.4 2799.2 1566.56 2799.2 c
-1574.48 2799.2 1581.86 2802.98 1592.84 2812.34 c
-1593.74 2802.8 1596.98 2799.2 1604.36 2799.2 c
-1610.48 2799.2 1614.26 2801.36 1620.56 2808.2 c
-h
-1592 2823.14 m
-1592 2817.56 1591.23 2815.94 1587.98 2813.6 c
-1583.66 2811.08 1578.62 2809.2 1574.84 2809.2 c
-1568.54 2809.2 1563.48 2815.51 1563.48 2823.5 c
-1563.48 2824.22 l
-1563.48 2834.84 1570.7 2841.32 1592 2849.24 c
-h
-1620.92 2801 m
-f*
-1622.62 2871.74 m
-1624.24 2871.92 1625.5 2871.92 1627.12 2871.92 c
-1633.24 2871.92 1635 2870.12 1635 2861.66 c
-1635 2777.42 l
-1635 2768.06 1632.94 2766.08 1621.9 2765 c
-1621.9 2762 l
-1665.46 2762 l
-1665.46 2765 l
-1651.96 2765.18 1650 2767.19 1650 2778.68 c
-1650 2806.94 l
-1656.34 2801 1660.4 2799.2 1667.8 2799.2 c
-1689.22 2799.2 1705 2819.36 1705 2845.46 c
-1705 2867.78 1692.65 2883.8 1675.54 2883.8 c
-1665.61 2883.8 1657.8 2879.48 1650 2869.58 c
-1650 2883.44 l
-1648.54 2883.8 l
-1639 2880.02 1632.52 2877.68 1622.62 2874.62 c
-h
-1650 2861.12 m
-1650 2866.52 1659.87 2872.8 1667.98 2872.8 c
-1681.3 2872.8 1690 2859.2 1690 2838.26 c
-1690 2818.46 1681.23 2804.2 1668.34 2804.2 c
-1659.88 2804.2 1650 2811.09 1650 2816.84 c
-h
-1711 2801 m
-f*
-1712.62 2871.74 m
-1714.24 2871.92 1715.5 2871.92 1717.12 2871.92 c
-1723.24 2871.92 1725 2870.12 1725 2861.66 c
-1725 2777.42 l
-1725 2768.06 1722.94 2766.08 1711.9 2765 c
-1711.9 2762 l
-1755.46 2762 l
-1755.46 2765 l
-1741.96 2765.18 1740 2767.19 1740 2778.68 c
-1740 2806.94 l
-1746.34 2801 1750.4 2799.2 1757.8 2799.2 c
-1779.22 2799.2 1795 2819.36 1795 2845.46 c
-1795 2867.78 1782.65 2883.8 1765.54 2883.8 c
-1755.61 2883.8 1747.8 2879.48 1740 2869.58 c
-1740 2883.44 l
-1738.54 2883.8 l
-1729 2880.02 1722.52 2877.68 1712.62 2874.62 c
-h
-1740 2861.12 m
-1740 2866.52 1749.87 2872.8 1757.98 2872.8 c
-1771.3 2872.8 1780 2859.2 1780 2838.26 c
-1780 2818.46 1771.23 2804.2 1758.34 2804.2 c
-1749.88 2804.2 1740 2811.09 1740 2816.84 c
-h
-1801 2801 m
-f*
-1832.5 2883.8 m
-1804.6 2873.9 l
-1804.6 2871.2 l
-1806.04 2871.38 l
-1808.2 2871.74 1810.54 2871.72 1812.16 2871.72 c
-1816.48 2871.72 1818 2868.89 1818 2861.12 c
-1818 2819.36 l
-1818 2806.4 1816.21 2804.42 1803.88 2803.7 c
-1803.88 2801 l
-1846.54 2801 l
-1846.54 2803.7 l
-1834.66 2804.6 1833 2806.4 1833 2819.36 c
-1833 2883.26 l
-h
-1824.22 2924 m
-1819.18 2924 1815 2919.83 1815 2914.76 c
-1815 2909.54 1818.98 2906 1824.04 2906 c
-1829.44 2906 1834 2909.78 1834 2914.76 c
-1834 2919.8 1829.59 2924 1824.22 2924 c
-h
-1851.04 2801 m
-f*
-1853.88 2872.64 m
-1855.14 2873.18 1856.76 2873.36 1858.74 2873.36 c
-1863.78 2873.36 1865 2870.66 1865 2861.84 c
-1865 2817.2 l
-1865 2806.94 1863.09 2804.42 1854.24 2803.7 c
-1854.24 2801 l
-1892.4 2801 l
-1892.4 2803.7 l
-1883.22 2804.42 1880 2806.58 1880 2813.06 c
-1880 2863.64 l
-1888.7 2871.74 1892.95 2873.8 1899.06 2873.8 c
-1907.88 2873.8 1912 2868.25 1912 2856.44 c
-1912 2818.82 l
-1912 2807.48 1909.7 2804.42 1900.86 2803.7 c
-1900.86 2801 l
-1938.3 2801 l
-1938.3 2803.7 l
-1929.48 2804.6 1927 2806.76 1927 2815.58 c
-1927 2856.8 l
-1927 2873.72 1919.2 2883.8 1906.08 2883.8 c
-1897.64 2883.8 1891.94 2880.74 1879.46 2869.22 c
-1879.46 2883.44 l
-1878.72 2883.8 l
-1869.9 2880.56 1863.78 2878.58 1853.88 2875.7 c
-h
-1941 2801 m
-f*
-2025.6 2871 m
-2025.6 2878 l
-2011.74 2878 l
-2008.14 2878 2005.44 2878.5 2001.84 2879.66 c
-1997.88 2881.1 l
-1993.02 2882.9 1988.16 2883.8 1983.48 2883.8 c
-1966.74 2883.8 1953.38 2870.84 1953.38 2854.46 c
-1953.38 2843.12 1958.07 2836.28 1970.16 2830.34 c
-1967.64 2827.82 1965.12 2825.48 1962.42 2823.14 c
-1956.48 2817.92 1954.1 2814.32 1954.1 2810.72 c
-1954.1 2806.76 1956.09 2804.78 1963.68 2801.18 c
-1950.72 2791.82 1946 2785.88 1946 2779.22 c
-1946 2769.68 1959.88 2762 1977.18 2762 c
-1990.14 2762 2003.82 2766.23 2013.18 2773.28 c
-2020.56 2779.04 2024 2784.98 2024 2792.18 c
-2024 2803.34 2015.53 2810.9 2002.2 2811.44 c
-1978.98 2812.52 l
-1969.26 2812.88 1964.94 2814.5 1964.94 2817.38 c
-1964.94 2820.98 1970.88 2827.28 1975.74 2828.72 c
-1979.16 2828.36 l
-1982.4 2828 1984.92 2828 1986 2828 c
-1992.3 2828 1999.32 2830.46 2004.72 2834.84 c
-2011.2 2839.88 2014 2846.36 2014 2855.72 c
-2014 2861 2013.12 2865.18 2010.66 2871 c
-h
-1967.46 2800.64 m
-1973.58 2799.38 1987.8 2798.3 1996.62 2798.3 c
-2013 2798.3 2019 2796.14 2019 2789.48 c
-2019 2779.04 2005.3 2772 1984.74 2772 c
-1968.9 2772 1959 2777.23 1959 2785.16 c
-1959 2789.3 1960.55 2792 1967.46 2800.64 c
-h
-1968.36 2861.84 m
-1968.36 2872.46 1973.4 2878.8 1981.68 2878.8 c
-1987.26 2878.8 1991.94 2875.73 1994.82 2870.3 c
-1998.24 2864 2000 2855.9 2000 2848.52 c
-2000 2838.62 1994.87 2833 1986.9 2833 c
-1975.74 2833 1968.36 2844.43 1968.36 2861.3 c
-h
-2031 2801 m
-f*
-2076 2801 m
-f*
-2203.08 2804.42 m
-2194.98 2804.96 2193.18 2806.76 2186.88 2820.08 c
-2142.06 2922.16 l
-2138.46 2922.16 l
-2101.02 2833.94 l
-2089.5 2807.66 2087.34 2804.96 2078.7 2804.42 c
-2078.7 2801 l
-2114.34 2801 l
-2114.34 2804.82 l
-2105.7 2804.82 2102.1 2807.03 2102.1 2811.8 c
-2102.1 2813.96 2102.64 2816.48 2103.54 2818.82 c
-2111.82 2840 l
-2158.98 2840 l
-2166.36 2822.6 l
-2168.52 2817.56 2169.78 2813.06 2169.78 2810.36 c
-2169.78 2808.74 2168.7 2806.76 2167.26 2806.04 c
-2165.1 2804.78 2163.66 2804.82 2157.18 2804.82 c
-2157.18 2801 l
-2203.08 2801 l
-h
-2114.88 2847 m
-2135.58 2896.76 l
-2156.46 2847 l
-h
-2205.96 2801 m
-f*
-2705.6 4382 m
-2703.98 4422.52 l
-2700.2 4422.52 l
-2699.12 4418.84 2696.24 4416.58 2692.82 4416.58 c
-2691.02 4416.58 2688.5 4417.17 2685.62 4418.36 c
-2676.8 4421.24 2667.98 4422.52 2659.16 4422.52 c
-2645.3 4422.52 2631.08 4417.36 2620.1 4408.46 c
-2606.42 4397.12 2599 4380.02 2599 4359.5 c
-2599 4322.96 2622.96 4298.48 2658.8 4298.48 c
-2679.14 4298.48 2696.96 4306.76 2707.94 4321.34 c
-2704.7 4324.58 l
-2691.38 4311.8 2679.5 4306.48 2664.56 4306.48 c
-2653.76 4306.48 2644.04 4309.69 2636.48 4315.94 c
-2625.86 4324.76 2620 4340.96 2620 4361.84 c
-2620 4394.42 2636.71 4415.52 2662.76 4415.52 c
-2673.2 4415.52 2682.38 4411.73 2689.58 4404.5 c
-2695.34 4398.74 2698.04 4393.7 2701.46 4382 c
-h
-2714.06 4301 m
-f*
-2717.14 4372.64 m
-2719.48 4373.18 2720.92 4373.36 2722.9 4373.36 c
-2727.58 4373.36 2729 4370.48 2729 4361.84 c
-2729 4316.3 l
-2729 4306.58 2726.52 4303.88 2716.6 4303.7 c
-2716.6 4301 l
-2756.56 4301 l
-2756.56 4304 l
-2747.02 4304.35 2744 4306.27 2744 4313.06 c
-2744 4363.82 l
-2744 4364.18 2745.23 4365.44 2746.66 4366.88 c
-2750.98 4371.2 2759.08 4374.8 2765.74 4374.8 c
-2773.48 4374.8 2778 4368.2 2778 4355.54 c
-2778 4316.48 l
-2778 4306.4 2775.93 4304.42 2765.2 4303.7 c
-2765.2 4301 l
-2805.52 4301 l
-2805.52 4304 l
-2795.26 4304.18 2793 4307.17 2793 4318.1 c
-2793 4363.46 l
-2798.28 4371.2 2803.91 4374.8 2812.18 4374.8 c
-2822.44 4374.8 2826 4369.85 2826 4354.64 c
-2826 4316.66 l
-2826 4306.4 2824.52 4304.96 2813.8 4303.7 c
-2813.8 4301 l
-2853.22 4301 l
-2853.22 4303.7 l
-2848.54 4304.06 l
-2843.14 4304.42 2841 4307.66 2841 4314.68 c
-2841 4351.76 l
-2841 4373 2833.91 4383.8 2819.92 4383.8 c
-2809.48 4383.8 2800.3 4379.12 2790.58 4368.68 c
-2787.34 4378.94 2781.22 4383.8 2771.5 4383.8 c
-2763.31 4383.8 2758.57 4381.46 2743.28 4369.94 c
-2743.28 4383.44 l
-2742.34 4383.8 l
-2733.16 4380.38 2727.04 4378.4 2717.14 4375.7 c
-h
-2854.04 4301 m
-f*
-2854.62 4371.74 m
-2856.24 4371.92 2857.5 4371.92 2859.12 4371.92 c
-2865.24 4371.92 2867 4370.12 2867 4361.66 c
-2867 4277.42 l
-2867 4268.06 2864.94 4266.08 2853.9 4265 c
-2853.9 4262 l
-2897.46 4262 l
-2897.46 4265 l
-2883.96 4265.18 2882 4267.19 2882 4278.68 c
-2882 4306.94 l
-2888.34 4301 2892.4 4299.2 2899.8 4299.2 c
-2921.22 4299.2 2937 4319.36 2937 4345.46 c
-2937 4367.78 2924.65 4383.8 2907.54 4383.8 c
-2897.61 4383.8 2889.8 4379.48 2882 4369.58 c
-2882 4383.44 l
-2880.54 4383.8 l
-2871 4380.02 2864.52 4377.68 2854.62 4374.62 c
-h
-2882 4361.12 m
-2882 4366.52 2891.87 4372.8 2899.98 4372.8 c
-2913.3 4372.8 2922 4359.2 2922 4338.26 c
-2922 4318.46 2913.23 4304.2 2900.34 4304.2 c
-2891.88 4304.2 2882 4311.09 2882 4316.84 c
-h
-2943 4301 m
-f*
-3064 4404.14 m
-3064 4322.6 l
-3064 4307.66 3061.88 4305.32 3047.94 4304.42 c
-3047.94 4301 l
-3098.34 4301 l
-3098.34 4304.42 l
-3085.2 4305.32 3083 4307.84 3083 4320.62 c
-3083 4400.54 l
-3083 4413.32 3085.29 4415.66 3098.34 4416.74 c
-3098.34 4420 l
-3062.52 4420 l
-3022.74 4329.26 l
-2981.16 4420 l
-2945.52 4420 l
-2945.52 4417 l
-2960.28 4416.09 2963 4413.89 2963 4400.54 c
-2963 4327.46 l
-2963 4308.92 2960.43 4305.5 2945.16 4304.42 c
-2945.16 4301 l
-2987.46 4301 l
-2987.46 4304 l
-2973.6 4304.73 2971 4308.95 2971 4327.46 c
-2971 4400 l
-3015.72 4301 l
-3018.24 4301 l
-h
-3103.02 4301 m
-f*
-3183.56 4312.88 m
-3180.5 4310.36 3178.34 4309.2 3175.64 4309.2 c
-3171.5 4309.2 3170 4311.78 3170 4319.9 c
-3170 4355 l
-3170 4364.18 3169.16 4369.22 3166.82 4373.36 c
-3163.04 4380.2 3155.3 4383.8 3144.32 4383.8 c
-3135.14 4383.8 3126.5 4381.28 3121.46 4377.14 c
-3116.96 4373.36 3114 4368.14 3114 4363.64 c
-3114 4359.5 3117.46 4355.9 3121.82 4355.9 c
-3126.14 4355.9 3129.92 4359.5 3129.92 4363.46 c
-3129.92 4364.18 3129.74 4365.08 3129.56 4366.34 c
-3129.2 4367.96 3129 4369.4 3129 4370.66 c
-3129 4375.52 3134.77 4379.8 3141.98 4379.8 c
-3150.8 4379.8 3155 4374.47 3155 4364.54 c
-3155 4353.56 l
-3127.76 4342.4 3124.75 4340.96 3117.14 4334.12 c
-3113.18 4330.52 3110.66 4324.4 3110.66 4318.46 c
-3110.66 4307.12 3118.4 4299.2 3129.56 4299.2 c
-3137.48 4299.2 3144.86 4302.98 3155.84 4312.34 c
-3156.74 4302.8 3159.98 4299.2 3167.36 4299.2 c
-3173.48 4299.2 3177.26 4301.36 3183.56 4308.2 c
-h
-3155 4323.14 m
-3155 4317.56 3154.23 4315.94 3150.98 4313.6 c
-3146.66 4311.08 3141.62 4309.2 3137.84 4309.2 c
-3131.54 4309.2 3126.48 4315.51 3126.48 4323.5 c
-3126.48 4324.22 l
-3126.48 4334.84 3133.7 4341.32 3155 4349.24 c
-h
-3183.92 4301 m
-f*
-3184.62 4371.74 m
-3186.24 4371.92 3187.5 4371.92 3189.12 4371.92 c
-3195.24 4371.92 3197 4370.12 3197 4361.66 c
-3197 4277.42 l
-3197 4268.06 3194.94 4266.08 3183.9 4265 c
-3183.9 4262 l
-3227.46 4262 l
-3227.46 4265 l
-3213.96 4265.18 3212 4267.19 3212 4278.68 c
-3212 4306.94 l
-3218.34 4301 3222.4 4299.2 3229.8 4299.2 c
-3251.22 4299.2 3267 4319.36 3267 4345.46 c
-3267 4367.78 3254.65 4383.8 3237.54 4383.8 c
-3227.61 4383.8 3219.8 4379.48 3212 4369.58 c
-3212 4383.44 l
-3210.54 4383.8 l
-3201 4380.02 3194.52 4377.68 3184.62 4374.62 c
-h
-3212 4361.12 m
-3212 4366.52 3221.87 4372.8 3229.98 4372.8 c
-3243.3 4372.8 3252 4359.2 3252 4338.26 c
-3252 4318.46 3243.23 4304.2 3230.34 4304.2 c
-3221.88 4304.2 3212 4311.09 3212 4316.84 c
-h
-3273 4301 m
-f*
-1 i
-423.35 3052.55 319.2 15.5999 re
-Y
-420.95 3060.95 m
-735.35 3060.95 l
-S
-0 0 6120 7920 re
-Y
-462.95 3062.15 m
-462.95 3083.75 444.95 3101.75 423.35 3101.75 c
-400.55 3101.75 382.55 3083.75 382.55 3062.15 c
-382.55 3040.55 400.55 3022.55 423.35 3022.55 c
-444.95 3022.55 462.95 3040.55 462.95 3062.15 c
-f*
-693.35 3012.95 m
-712.55 3060.95 l
-693.35 3108.95 l
-845.75 3060.95 l
-f*
-0.564706 g
-4493.75 3531.35 m
-4493.75 3602.15 4436.15 3660.95 4364.15 3660.95 c
-3242.15 3660.95 l
-3170.15 3660.95 3112.55 3602.15 3112.55 3531.35 c
-3112.55 2752.55 l
-3112.55 2680.55 3170.15 2622.95 3242.15 2622.95 c
-4364.15 2622.95 l
-4436.15 2622.95 4493.75 2680.55 4493.75 2752.55 c
-f*
-1 g
-4428.95 3586.55 m
-4428.95 3657.35 4372.55 3714.95 4300.55 3714.95 c
-3186.95 3714.95 l
-3116.15 3714.95 3058.55 3657.35 3058.55 3586.55 c
-3058.55 2814.95 l
-3058.55 2745.35 3116.15 2687.75 3186.95 2687.75 c
-4300.55 2687.75 l
-4371.35 2687.75 4428.95 2745.35 4428.95 2814.95 c
-f*
-0 g
-4428.95 3586.55 m
-4428.95 3657.35 4372.55 3714.95 4300.55 3714.95 c
-3186.95 3714.95 l
-3116.15 3714.95 3058.55 3657.35 3058.55 3586.55 c
-3058.55 2814.95 l
-3058.55 2745.35 3116.15 2687.75 3186.95 2687.75 c
-4300.55 2687.75 l
-4371.35 2687.75 4428.95 2745.35 4428.95 2814.95 c
-h
-S
-423.35 2632.55 319.2 15.5999 re
-Y
-420.95 2640.95 m
-735.35 2640.95 l
-S
-0 0 6120 7920 re
-Y
-462.95 2642.15 m
-462.95 2663.75 444.95 2681.75 423.35 2681.75 c
-400.55 2681.75 382.55 2663.75 382.55 2642.15 c
-382.55 2620.55 400.55 2602.55 423.35 2602.55 c
-444.95 2602.55 462.95 2620.55 462.95 2642.15 c
-f*
-693.35 2592.95 m
-712.55 2640.95 l
-693.35 2688.95 l
-845.75 2640.95 l
-f*
-2643.35 3232.55 308.4 103.2 re
-Y
-2643.35 3240.95 m
-2943.35 3328.55 l
-S
-0 0 6120 7920 re
-Y
-2682.95 3242.15 m
-2682.95 3263.75 2664.95 3281.75 2643.35 3281.75 c
-2620.55 3281.75 2602.55 3263.75 2602.55 3242.15 c
-2602.55 3220.55 2620.55 3202.55 2643.35 3202.55 c
-2664.95 3202.55 2682.95 3220.55 2682.95 3242.15 c
-f*
-2919.35 3272.15 m
-2925.35 3322.55 l
-2894.15 3362.15 l
-3053.75 3359.75 l
-f*
-2643.35 2812.55 320.4 190.8 re
-Y
-2643.35 2820.95 m
-2955.35 3003.35 l
-S
-0 0 6120 7920 re
-Y
-2682.95 2822.15 m
-2682.95 2843.75 2664.95 2861.75 2643.35 2861.75 c
-2620.55 2861.75 2602.55 2843.75 2602.55 2822.15 c
-2602.55 2800.55 2620.55 2782.55 2643.35 2782.55 c
-2664.95 2782.55 2682.95 2800.55 2682.95 2822.15 c
-f*
-2945.75 2942.15 m
-2937.35 2992.55 l
-2897.75 3024.95 l
-3053.75 3059.75 l
-f*
-0.2 i
-3427 3264.14 m
-3427 3182.6 l
-3427 3167.66 3424.88 3165.32 3410.94 3164.42 c
-3410.94 3161 l
-3461.34 3161 l
-3461.34 3164.42 l
-3448.2 3165.32 3446 3167.84 3446 3180.62 c
-3446 3260.54 l
-3446 3273.32 3448.29 3275.66 3461.34 3276.74 c
-3461.34 3280 l
-3425.52 3280 l
-3385.74 3189.26 l
-3344.16 3280 l
-3308.52 3280 l
-3308.52 3277 l
-3323.28 3276.09 3326 3273.89 3326 3260.54 c
-3326 3187.46 l
-3326 3168.92 3323.43 3165.5 3308.16 3164.42 c
-3308.16 3161 l
-3350.46 3161 l
-3350.46 3164 l
-3336.6 3164.73 3334 3168.95 3334 3187.46 c
-3334 3260 l
-3378.72 3161 l
-3381.24 3161 l
-h
-3466.02 3161 m
-f*
-3546.56 3172.88 m
-3543.5 3170.36 3541.34 3169.2 3538.64 3169.2 c
-3534.5 3169.2 3533 3171.78 3533 3179.9 c
-3533 3215 l
-3533 3224.18 3532.16 3229.22 3529.82 3233.36 c
-3526.04 3240.2 3518.3 3243.8 3507.32 3243.8 c
-3498.14 3243.8 3489.5 3241.28 3484.46 3237.14 c
-3479.96 3233.36 3477 3228.14 3477 3223.64 c
-3477 3219.5 3480.46 3215.9 3484.82 3215.9 c
-3489.14 3215.9 3492.92 3219.5 3492.92 3223.46 c
-3492.92 3224.18 3492.74 3225.08 3492.56 3226.34 c
-3492.2 3227.96 3492 3229.4 3492 3230.66 c
-3492 3235.52 3497.77 3239.8 3504.98 3239.8 c
-3513.8 3239.8 3518 3234.47 3518 3224.54 c
-3518 3213.56 l
-3490.76 3202.4 3487.75 3200.96 3480.14 3194.12 c
-3476.18 3190.52 3473.66 3184.4 3473.66 3178.46 c
-3473.66 3167.12 3481.4 3159.2 3492.56 3159.2 c
-3500.48 3159.2 3507.86 3162.98 3518.84 3172.34 c
-3519.74 3162.8 3522.98 3159.2 3530.36 3159.2 c
-3536.48 3159.2 3540.26 3161.36 3546.56 3168.2 c
-h
-3518 3183.14 m
-3518 3177.56 3517.23 3175.94 3513.98 3173.6 c
-3509.66 3171.08 3504.62 3169.2 3500.84 3169.2 c
-3494.54 3169.2 3489.48 3175.51 3489.48 3183.5 c
-3489.48 3184.22 l
-3489.48 3194.84 3496.7 3201.32 3518 3209.24 c
-h
-3546.92 3161 m
-f*
-3547.62 3231.74 m
-3549.24 3231.92 3550.5 3231.92 3552.12 3231.92 c
-3558.24 3231.92 3560 3230.12 3560 3221.66 c
-3560 3137.42 l
-3560 3128.06 3557.94 3126.08 3546.9 3125 c
-3546.9 3122 l
-3590.46 3122 l
-3590.46 3125 l
-3576.96 3125.18 3575 3127.19 3575 3138.68 c
-3575 3166.94 l
-3581.34 3161 3585.4 3159.2 3592.8 3159.2 c
-3614.22 3159.2 3630 3179.36 3630 3205.46 c
-3630 3227.78 3617.65 3243.8 3600.54 3243.8 c
-3590.61 3243.8 3582.8 3239.48 3575 3229.58 c
-3575 3243.44 l
-3573.54 3243.8 l
-3564 3240.02 3557.52 3237.68 3547.62 3234.62 c
-h
-3575 3221.12 m
-3575 3226.52 3584.87 3232.8 3592.98 3232.8 c
-3606.3 3232.8 3615 3219.2 3615 3198.26 c
-3615 3178.46 3606.23 3164.2 3593.34 3164.2 c
-3584.88 3164.2 3575 3171.09 3575 3176.84 c
-h
-3636 3161 m
-f*
-3637.62 3231.74 m
-3639.24 3231.92 3640.5 3231.92 3642.12 3231.92 c
-3648.24 3231.92 3650 3230.12 3650 3221.66 c
-3650 3137.42 l
-3650 3128.06 3647.94 3126.08 3636.9 3125 c
-3636.9 3122 l
-3680.46 3122 l
-3680.46 3125 l
-3666.96 3125.18 3665 3127.19 3665 3138.68 c
-3665 3166.94 l
-3671.34 3161 3675.4 3159.2 3682.8 3159.2 c
-3704.22 3159.2 3720 3179.36 3720 3205.46 c
-3720 3227.78 3707.65 3243.8 3690.54 3243.8 c
-3680.61 3243.8 3672.8 3239.48 3665 3229.58 c
-3665 3243.44 l
-3663.54 3243.8 l
-3654 3240.02 3647.52 3237.68 3637.62 3234.62 c
-h
-3665 3221.12 m
-3665 3226.52 3674.87 3232.8 3682.98 3232.8 c
-3696.3 3232.8 3705 3219.2 3705 3198.26 c
-3705 3178.46 3696.23 3164.2 3683.34 3164.2 c
-3674.88 3164.2 3665 3171.09 3665 3176.84 c
-h
-3726 3161 m
-f*
-3757.5 3243.8 m
-3729.6 3233.9 l
-3729.6 3231.2 l
-3731.04 3231.38 l
-3733.2 3231.74 3735.54 3231.72 3737.16 3231.72 c
-3741.48 3231.72 3743 3228.89 3743 3221.12 c
-3743 3179.36 l
-3743 3166.4 3741.21 3164.42 3728.88 3163.7 c
-3728.88 3161 l
-3771.54 3161 l
-3771.54 3163.7 l
-3759.66 3164.6 3758 3166.4 3758 3179.36 c
-3758 3243.26 l
-h
-3749.22 3284 m
-3744.18 3284 3740 3279.83 3740 3274.76 c
-3740 3269.54 3743.98 3266 3749.04 3266 c
-3754.44 3266 3759 3269.78 3759 3274.76 c
-3759 3279.8 3754.59 3284 3749.22 3284 c
-h
-3776.04 3161 m
-f*
-3778.88 3232.64 m
-3780.14 3233.18 3781.76 3233.36 3783.74 3233.36 c
-3788.78 3233.36 3790 3230.66 3790 3221.84 c
-3790 3177.2 l
-3790 3166.94 3788.09 3164.42 3779.24 3163.7 c
-3779.24 3161 l
-3817.4 3161 l
-3817.4 3163.7 l
-3808.22 3164.42 3805 3166.58 3805 3173.06 c
-3805 3223.64 l
-3813.7 3231.74 3817.95 3233.8 3824.06 3233.8 c
-3832.88 3233.8 3837 3228.25 3837 3216.44 c
-3837 3178.82 l
-3837 3167.48 3834.7 3164.42 3825.86 3163.7 c
-3825.86 3161 l
-3863.3 3161 l
-3863.3 3163.7 l
-3854.48 3164.6 3852 3166.76 3852 3175.58 c
-3852 3216.8 l
-3852 3233.72 3844.2 3243.8 3831.08 3243.8 c
-3822.64 3243.8 3816.94 3240.74 3804.46 3229.22 c
-3804.46 3243.44 l
-3803.72 3243.8 l
-3794.9 3240.56 3788.78 3238.58 3778.88 3235.7 c
-h
-3866 3161 m
-f*
-3950.6 3231 m
-3950.6 3238 l
-3936.74 3238 l
-3933.14 3238 3930.44 3238.5 3926.84 3239.66 c
-3922.88 3241.1 l
-3918.02 3242.9 3913.16 3243.8 3908.48 3243.8 c
-3891.74 3243.8 3878.38 3230.84 3878.38 3214.46 c
-3878.38 3203.12 3883.07 3196.28 3895.16 3190.34 c
-3892.64 3187.82 3890.12 3185.48 3887.42 3183.14 c
-3881.48 3177.92 3879.1 3174.32 3879.1 3170.72 c
-3879.1 3166.76 3881.09 3164.78 3888.68 3161.18 c
-3875.72 3151.82 3871 3145.88 3871 3139.22 c
-3871 3129.68 3884.88 3122 3902.18 3122 c
-3915.14 3122 3928.82 3126.23 3938.18 3133.28 c
-3945.56 3139.04 3949 3144.98 3949 3152.18 c
-3949 3163.34 3940.53 3170.9 3927.2 3171.44 c
-3903.98 3172.52 l
-3894.26 3172.88 3889.94 3174.5 3889.94 3177.38 c
-3889.94 3180.98 3895.88 3187.28 3900.74 3188.72 c
-3904.16 3188.36 l
-3907.4 3188 3909.92 3188 3911 3188 c
-3917.3 3188 3924.32 3190.46 3929.72 3194.84 c
-3936.2 3199.88 3939 3206.36 3939 3215.72 c
-3939 3221 3938.12 3225.18 3935.66 3231 c
-h
-3892.46 3160.64 m
-3898.58 3159.38 3912.8 3158.3 3921.62 3158.3 c
-3938 3158.3 3944 3156.14 3944 3149.48 c
-3944 3139.04 3930.3 3132 3909.74 3132 c
-3893.9 3132 3884 3137.23 3884 3145.16 c
-3884 3149.3 3885.55 3152 3892.46 3160.64 c
-h
-3893.36 3221.84 m
-3893.36 3232.46 3898.4 3238.8 3906.68 3238.8 c
-3912.26 3238.8 3916.94 3235.73 3919.82 3230.3 c
-3923.24 3224 3925 3215.9 3925 3208.52 c
-3925 3198.62 3919.87 3193 3911.9 3193 c
-3900.74 3193 3893.36 3204.43 3893.36 3221.3 c
-h
-3956 3161 m
-f*
-4001 3161 m
-f*
-4004.06 3280 m
-4004.06 3277 l
-4019.18 3276.09 4021 3274.07 4021 3260.54 c
-4021 3180.62 l
-4021 3167.3 4018.71 3164.96 4004.06 3164.42 c
-4004.06 3161 l
-4064.18 3161 l
-4091 3161 4108 3173.42 4108 3193.4 c
-4108 3201.32 4104.85 3208.52 4098.92 3213.74 c
-4093.52 3218.6 4088.66 3220.94 4076.96 3223.64 c
-4086.32 3225.98 4090.1 3227.78 4094.42 3231.56 c
-4098.92 3235.52 4102 3242.18 4102 3249.56 c
-4102 3269.72 4085.85 3280 4054.46 3280 c
-h
-4040 3219.68 m
-4056.94 3219.68 4064.78 3218.78 4071.56 3216.26 c
-4082 3212.12 4087 3204.74 4087 3193.22 c
-4087 3183.5 4083.23 3176.48 4076.06 3172.34 c
-4070.3 3168.92 4063.1 3168 4050.5 3168 c
-4042.22 3168 4040 3169.55 4040 3175.04 c
-h
-4040 3226.88 m
-4040 3268.1 l
-4040 3271.88 4041.16 3273 4043.66 3273 c
-4051.58 3273 l
-4072.28 3273 4083 3264.71 4083 3248.84 c
-4083 3234.8 4073.55 3226.88 4056.8 3226.88 c
-h
-4121.06 3161 m
-f*
-3487 2064.14 m
-3487 1982.6 l
-3487 1967.66 3484.88 1965.32 3470.94 1964.42 c
-3470.94 1961 l
-3521.34 1961 l
-3521.34 1964.42 l
-3508.2 1965.32 3506 1967.84 3506 1980.62 c
-3506 2060.54 l
-3506 2073.32 3508.29 2075.66 3521.34 2076.74 c
-3521.34 2080 l
-3485.52 2080 l
-3445.74 1989.26 l
-3404.16 2080 l
-3368.52 2080 l
-3368.52 2077 l
-3383.28 2076.09 3386 2073.89 3386 2060.54 c
-3386 1987.46 l
-3386 1968.92 3383.43 1965.5 3368.16 1964.42 c
-3368.16 1961 l
-3410.46 1961 l
-3410.46 1964 l
-3396.6 1964.73 3394 1968.95 3394 1987.46 c
-3394 2060 l
-3438.72 1961 l
-3441.24 1961 l
-h
-3526.02 1961 m
-f*
-3606.56 1972.88 m
-3603.5 1970.36 3601.34 1969.2 3598.64 1969.2 c
-3594.5 1969.2 3593 1971.78 3593 1979.9 c
-3593 2015 l
-3593 2024.18 3592.16 2029.22 3589.82 2033.36 c
-3586.04 2040.2 3578.3 2043.8 3567.32 2043.8 c
-3558.14 2043.8 3549.5 2041.28 3544.46 2037.14 c
-3539.96 2033.36 3537 2028.14 3537 2023.64 c
-3537 2019.5 3540.46 2015.9 3544.82 2015.9 c
-3549.14 2015.9 3552.92 2019.5 3552.92 2023.46 c
-3552.92 2024.18 3552.74 2025.08 3552.56 2026.34 c
-3552.2 2027.96 3552 2029.4 3552 2030.66 c
-3552 2035.52 3557.77 2039.8 3564.98 2039.8 c
-3573.8 2039.8 3578 2034.47 3578 2024.54 c
-3578 2013.56 l
-3550.76 2002.4 3547.75 2000.96 3540.14 1994.12 c
-3536.18 1990.52 3533.66 1984.4 3533.66 1978.46 c
-3533.66 1967.12 3541.4 1959.2 3552.56 1959.2 c
-3560.48 1959.2 3567.86 1962.98 3578.84 1972.34 c
-3579.74 1962.8 3582.98 1959.2 3590.36 1959.2 c
-3596.48 1959.2 3600.26 1961.36 3606.56 1968.2 c
-h
-3578 1983.14 m
-3578 1977.56 3577.23 1975.94 3573.98 1973.6 c
-3569.66 1971.08 3564.62 1969.2 3560.84 1969.2 c
-3554.54 1969.2 3549.48 1975.51 3549.48 1983.5 c
-3549.48 1984.22 l
-3549.48 1994.84 3556.7 2001.32 3578 2009.24 c
-h
-3606.92 1961 m
-f*
-3607.62 2031.74 m
-3609.24 2031.92 3610.5 2031.92 3612.12 2031.92 c
-3618.24 2031.92 3620 2030.12 3620 2021.66 c
-3620 1937.42 l
-3620 1928.06 3617.94 1926.08 3606.9 1925 c
-3606.9 1922 l
-3650.46 1922 l
-3650.46 1925 l
-3636.96 1925.18 3635 1927.19 3635 1938.68 c
-3635 1966.94 l
-3641.34 1961 3645.4 1959.2 3652.8 1959.2 c
-3674.22 1959.2 3690 1979.36 3690 2005.46 c
-3690 2027.78 3677.65 2043.8 3660.54 2043.8 c
-3650.61 2043.8 3642.8 2039.48 3635 2029.58 c
-3635 2043.44 l
-3633.54 2043.8 l
-3624 2040.02 3617.52 2037.68 3607.62 2034.62 c
-h
-3635 2021.12 m
-3635 2026.52 3644.87 2032.8 3652.98 2032.8 c
-3666.3 2032.8 3675 2019.2 3675 1998.26 c
-3675 1978.46 3666.23 1964.2 3653.34 1964.2 c
-3644.88 1964.2 3635 1971.09 3635 1976.84 c
-h
-3696 1961 m
-f*
-3697.62 2031.74 m
-3699.24 2031.92 3700.5 2031.92 3702.12 2031.92 c
-3708.24 2031.92 3710 2030.12 3710 2021.66 c
-3710 1937.42 l
-3710 1928.06 3707.94 1926.08 3696.9 1925 c
-3696.9 1922 l
-3740.46 1922 l
-3740.46 1925 l
-3726.96 1925.18 3725 1927.19 3725 1938.68 c
-3725 1966.94 l
-3731.34 1961 3735.4 1959.2 3742.8 1959.2 c
-3764.22 1959.2 3780 1979.36 3780 2005.46 c
-3780 2027.78 3767.65 2043.8 3750.54 2043.8 c
-3740.61 2043.8 3732.8 2039.48 3725 2029.58 c
-3725 2043.44 l
-3723.54 2043.8 l
-3714 2040.02 3707.52 2037.68 3697.62 2034.62 c
-h
-3725 2021.12 m
-3725 2026.52 3734.87 2032.8 3742.98 2032.8 c
-3756.3 2032.8 3765 2019.2 3765 1998.26 c
-3765 1978.46 3756.23 1964.2 3743.34 1964.2 c
-3734.88 1964.2 3725 1971.09 3725 1976.84 c
-h
-3786 1961 m
-f*
-3817.5 2043.8 m
-3789.6 2033.9 l
-3789.6 2031.2 l
-3791.04 2031.38 l
-3793.2 2031.74 3795.54 2031.72 3797.16 2031.72 c
-3801.48 2031.72 3803 2028.89 3803 2021.12 c
-3803 1979.36 l
-3803 1966.4 3801.21 1964.42 3788.88 1963.7 c
-3788.88 1961 l
-3831.54 1961 l
-3831.54 1963.7 l
-3819.66 1964.6 3818 1966.4 3818 1979.36 c
-3818 2043.26 l
-h
-3809.22 2084 m
-3804.18 2084 3800 2079.83 3800 2074.76 c
-3800 2069.54 3803.98 2066 3809.04 2066 c
-3814.44 2066 3819 2069.78 3819 2074.76 c
-3819 2079.8 3814.59 2084 3809.22 2084 c
-h
-3836.04 1961 m
-f*
-3838.88 2032.64 m
-3840.14 2033.18 3841.76 2033.36 3843.74 2033.36 c
-3848.78 2033.36 3850 2030.66 3850 2021.84 c
-3850 1977.2 l
-3850 1966.94 3848.09 1964.42 3839.24 1963.7 c
-3839.24 1961 l
-3877.4 1961 l
-3877.4 1963.7 l
-3868.22 1964.42 3865 1966.58 3865 1973.06 c
-3865 2023.64 l
-3873.7 2031.74 3877.95 2033.8 3884.06 2033.8 c
-3892.88 2033.8 3897 2028.25 3897 2016.44 c
-3897 1978.82 l
-3897 1967.48 3894.7 1964.42 3885.86 1963.7 c
-3885.86 1961 l
-3923.3 1961 l
-3923.3 1963.7 l
-3914.48 1964.6 3912 1966.76 3912 1975.58 c
-3912 2016.8 l
-3912 2033.72 3904.2 2043.8 3891.08 2043.8 c
-3882.64 2043.8 3876.94 2040.74 3864.46 2029.22 c
-3864.46 2043.44 l
-3863.72 2043.8 l
-3854.9 2040.56 3848.78 2038.58 3838.88 2035.7 c
-h
-3926 1961 m
-f*
-4010.6 2031 m
-4010.6 2038 l
-3996.74 2038 l
-3993.14 2038 3990.44 2038.5 3986.84 2039.66 c
-3982.88 2041.1 l
-3978.02 2042.9 3973.16 2043.8 3968.48 2043.8 c
-3951.74 2043.8 3938.38 2030.84 3938.38 2014.46 c
-3938.38 2003.12 3943.07 1996.28 3955.16 1990.34 c
-3952.64 1987.82 3950.12 1985.48 3947.42 1983.14 c
-3941.48 1977.92 3939.1 1974.32 3939.1 1970.72 c
-3939.1 1966.76 3941.09 1964.78 3948.68 1961.18 c
-3935.72 1951.82 3931 1945.88 3931 1939.22 c
-3931 1929.68 3944.88 1922 3962.18 1922 c
-3975.14 1922 3988.82 1926.23 3998.18 1933.28 c
-4005.56 1939.04 4009 1944.98 4009 1952.18 c
-4009 1963.34 4000.53 1970.9 3987.2 1971.44 c
-3963.98 1972.52 l
-3954.26 1972.88 3949.94 1974.5 3949.94 1977.38 c
-3949.94 1980.98 3955.88 1987.28 3960.74 1988.72 c
-3964.16 1988.36 l
-3967.4 1988 3969.92 1988 3971 1988 c
-3977.3 1988 3984.32 1990.46 3989.72 1994.84 c
-3996.2 1999.88 3999 2006.36 3999 2015.72 c
-3999 2021 3998.12 2025.18 3995.66 2031 c
-h
-3952.46 1960.64 m
-3958.58 1959.38 3972.8 1958.3 3981.62 1958.3 c
-3998 1958.3 4004 1956.14 4004 1949.48 c
-4004 1939.04 3990.3 1932 3969.74 1932 c
-3953.9 1932 3944 1937.23 3944 1945.16 c
-3944 1949.3 3945.55 1952 3952.46 1960.64 c
-h
-3953.36 2021.84 m
-3953.36 2032.46 3958.4 2038.8 3966.68 2038.8 c
-3972.26 2038.8 3976.94 2035.73 3979.82 2030.3 c
-3983.24 2024 3985 2015.9 3985 2008.52 c
-3985 1998.62 3979.87 1993 3971.9 1993 c
-3960.74 1993 3953.36 2004.43 3953.36 2021.3 c
-h
-4016 1961 m
-f*
-4061 1961 m
-f*
-4172.6 2042 m
-4170.98 2082.52 l
-4167.2 2082.52 l
-4166.12 2078.84 4163.24 2076.58 4159.82 2076.58 c
-4158.02 2076.58 4155.5 2077.17 4152.62 2078.36 c
-4143.8 2081.24 4134.98 2082.52 4126.16 2082.52 c
-4112.3 2082.52 4098.08 2077.36 4087.1 2068.46 c
-4073.42 2057.12 4066 2040.02 4066 2019.5 c
-4066 1982.96 4089.96 1958.48 4125.8 1958.48 c
-4146.14 1958.48 4163.96 1966.76 4174.94 1981.34 c
-4171.7 1984.58 l
-4158.38 1971.8 4146.5 1966.48 4131.56 1966.48 c
-4120.76 1966.48 4111.04 1969.69 4103.48 1975.94 c
-4092.86 1984.76 4087 2000.96 4087 2021.84 c
-4087 2054.42 4103.71 2075.52 4129.76 2075.52 c
-4140.2 2075.52 4149.38 2071.73 4156.58 2064.5 c
-4162.34 2058.74 4165.04 2053.7 4168.46 2042 c
-h
-4181.06 1961 m
-f*
-3485.6 3962 m
-3483.98 4002.52 l
-3480.2 4002.52 l
-3479.12 3998.84 3476.24 3996.58 3472.82 3996.58 c
-3471.02 3996.58 3468.5 3997.17 3465.62 3998.36 c
-3456.8 4001.24 3447.98 4002.52 3439.16 4002.52 c
-3425.3 4002.52 3411.08 3997.36 3400.1 3988.46 c
-3386.42 3977.12 3379 3960.02 3379 3939.5 c
-3379 3902.96 3402.96 3878.48 3438.8 3878.48 c
-3459.14 3878.48 3476.96 3886.76 3487.94 3901.34 c
-3484.7 3904.58 l
-3471.38 3891.8 3459.5 3886.48 3444.56 3886.48 c
-3433.76 3886.48 3424.04 3889.69 3416.48 3895.94 c
-3405.86 3904.76 3400 3920.96 3400 3941.84 c
-3400 3974.42 3416.71 3995.52 3442.76 3995.52 c
-3453.2 3995.52 3462.38 3991.73 3469.58 3984.5 c
-3475.34 3978.74 3478.04 3973.7 3481.46 3962 c
-h
-3494.06 3881 m
-f*
-3497.14 3952.64 m
-3499.48 3953.18 3500.92 3953.36 3502.9 3953.36 c
-3507.58 3953.36 3509 3950.48 3509 3941.84 c
-3509 3896.3 l
-3509 3886.58 3506.52 3883.88 3496.6 3883.7 c
-3496.6 3881 l
-3536.56 3881 l
-3536.56 3884 l
-3527.02 3884.35 3524 3886.27 3524 3893.06 c
-3524 3943.82 l
-3524 3944.18 3525.23 3945.44 3526.66 3946.88 c
-3530.98 3951.2 3539.08 3954.8 3545.74 3954.8 c
-3553.48 3954.8 3558 3948.2 3558 3935.54 c
-3558 3896.48 l
-3558 3886.4 3555.93 3884.42 3545.2 3883.7 c
-3545.2 3881 l
-3585.52 3881 l
-3585.52 3884 l
-3575.26 3884.18 3573 3887.17 3573 3898.1 c
-3573 3943.46 l
-3578.28 3951.2 3583.91 3954.8 3592.18 3954.8 c
-3602.44 3954.8 3606 3949.85 3606 3934.64 c
-3606 3896.66 l
-3606 3886.4 3604.52 3884.96 3593.8 3883.7 c
-3593.8 3881 l
-3633.22 3881 l
-3633.22 3883.7 l
-3628.54 3884.06 l
-3623.14 3884.42 3621 3887.66 3621 3894.68 c
-3621 3931.76 l
-3621 3953 3613.91 3963.8 3599.92 3963.8 c
-3589.48 3963.8 3580.3 3959.12 3570.58 3948.68 c
-3567.34 3958.94 3561.22 3963.8 3551.5 3963.8 c
-3543.31 3963.8 3538.57 3961.46 3523.28 3949.94 c
-3523.28 3963.44 l
-3522.34 3963.8 l
-3513.16 3960.38 3507.04 3958.4 3497.14 3955.7 c
-h
-3634.04 3881 m
-f*
-3634.62 3951.74 m
-3636.24 3951.92 3637.5 3951.92 3639.12 3951.92 c
-3645.24 3951.92 3647 3950.12 3647 3941.66 c
-3647 3857.42 l
-3647 3848.06 3644.94 3846.08 3633.9 3845 c
-3633.9 3842 l
-3677.46 3842 l
-3677.46 3845 l
-3663.96 3845.18 3662 3847.19 3662 3858.68 c
-3662 3886.94 l
-3668.34 3881 3672.4 3879.2 3679.8 3879.2 c
-3701.22 3879.2 3717 3899.36 3717 3925.46 c
-3717 3947.78 3704.65 3963.8 3687.54 3963.8 c
-3677.61 3963.8 3669.8 3959.48 3662 3949.58 c
-3662 3963.44 l
-3660.54 3963.8 l
-3651 3960.02 3644.52 3957.68 3634.62 3954.62 c
-h
-3662 3941.12 m
-3662 3946.52 3671.87 3952.8 3679.98 3952.8 c
-3693.3 3952.8 3702 3939.2 3702 3918.26 c
-3702 3898.46 3693.23 3884.2 3680.34 3884.2 c
-3671.88 3884.2 3662 3891.09 3662 3896.84 c
-h
-3723 3881 m
-f*
-3844 3984.14 m
-3844 3902.6 l
-3844 3887.66 3841.88 3885.32 3827.94 3884.42 c
-3827.94 3881 l
-3878.34 3881 l
-3878.34 3884.42 l
-3865.2 3885.32 3863 3887.84 3863 3900.62 c
-3863 3980.54 l
-3863 3993.32 3865.29 3995.66 3878.34 3996.74 c
-3878.34 4000 l
-3842.52 4000 l
-3802.74 3909.26 l
-3761.16 4000 l
-3725.52 4000 l
-3725.52 3997 l
-3740.28 3996.09 3743 3993.89 3743 3980.54 c
-3743 3907.46 l
-3743 3888.92 3740.43 3885.5 3725.16 3884.42 c
-3725.16 3881 l
-3767.46 3881 l
-3767.46 3884 l
-3753.6 3884.73 3751 3888.95 3751 3907.46 c
-3751 3980 l
-3795.72 3881 l
-3798.24 3881 l
-h
-3883.02 3881 m
-f*
-3963.56 3892.88 m
-3960.5 3890.36 3958.34 3889.2 3955.64 3889.2 c
-3951.5 3889.2 3950 3891.78 3950 3899.9 c
-3950 3935 l
-3950 3944.18 3949.16 3949.22 3946.82 3953.36 c
-3943.04 3960.2 3935.3 3963.8 3924.32 3963.8 c
-3915.14 3963.8 3906.5 3961.28 3901.46 3957.14 c
-3896.96 3953.36 3894 3948.14 3894 3943.64 c
-3894 3939.5 3897.46 3935.9 3901.82 3935.9 c
-3906.14 3935.9 3909.92 3939.5 3909.92 3943.46 c
-3909.92 3944.18 3909.74 3945.08 3909.56 3946.34 c
-3909.2 3947.96 3909 3949.4 3909 3950.66 c
-3909 3955.52 3914.77 3959.8 3921.98 3959.8 c
-3930.8 3959.8 3935 3954.47 3935 3944.54 c
-3935 3933.56 l
-3907.76 3922.4 3904.75 3920.96 3897.14 3914.12 c
-3893.18 3910.52 3890.66 3904.4 3890.66 3898.46 c
-3890.66 3887.12 3898.4 3879.2 3909.56 3879.2 c
-3917.48 3879.2 3924.86 3882.98 3935.84 3892.34 c
-3936.74 3882.8 3939.98 3879.2 3947.36 3879.2 c
-3953.48 3879.2 3957.26 3881.36 3963.56 3888.2 c
-h
-3935 3903.14 m
-3935 3897.56 3934.23 3895.94 3930.98 3893.6 c
-3926.66 3891.08 3921.62 3889.2 3917.84 3889.2 c
-3911.54 3889.2 3906.48 3895.51 3906.48 3903.5 c
-3906.48 3904.22 l
-3906.48 3914.84 3913.7 3921.32 3935 3929.24 c
-h
-3963.92 3881 m
-f*
-3964.62 3951.74 m
-3966.24 3951.92 3967.5 3951.92 3969.12 3951.92 c
-3975.24 3951.92 3977 3950.12 3977 3941.66 c
-3977 3857.42 l
-3977 3848.06 3974.94 3846.08 3963.9 3845 c
-3963.9 3842 l
-4007.46 3842 l
-4007.46 3845 l
-3993.96 3845.18 3992 3847.19 3992 3858.68 c
-3992 3886.94 l
-3998.34 3881 4002.4 3879.2 4009.8 3879.2 c
-4031.22 3879.2 4047 3899.36 4047 3925.46 c
-4047 3947.78 4034.65 3963.8 4017.54 3963.8 c
-4007.61 3963.8 3999.8 3959.48 3992 3949.58 c
-3992 3963.44 l
-3990.54 3963.8 l
-3981 3960.02 3974.52 3957.68 3964.62 3954.62 c
-h
-3992 3941.12 m
-3992 3946.52 4001.87 3952.8 4009.98 3952.8 c
-4023.3 3952.8 4032 3939.2 4032 3918.26 c
-4032 3898.46 4023.23 3884.2 4010.34 3884.2 c
-4001.88 3884.2 3992 3891.09 3992 3896.84 c
-h
-4053 3881 m
-f*
-1 i
-4433.75 3262.55 330 104.4 re
-Y
-4433.75 3359.75 m
-4755.35 3270.95 l
-S
-0 0 6120 7920 re
-Y
-4472.15 3360.95 m
-4472.15 3382.55 4454.15 3400.55 4432.55 3400.55 c
-4410.95 3400.55 4392.95 3382.55 4392.95 3360.95 c
-4392.95 3339.35 4410.95 3321.35 4432.55 3321.35 c
-4454.15 3321.35 4472.15 3339.35 4472.15 3360.95 c
-f*
-4706.15 3234.95 m
-4737.35 3275.75 l
-4731.35 3327.35 l
-4865.75 3240.95 l
-f*
-4433.75 2868.95 339.6 190.8 re
-Y
-4433.75 3059.75 m
-4764.95 2877.35 l
-S
-0 0 6120 7920 re
-Y
-4472.15 3060.95 m
-4472.15 3082.55 4454.15 3100.55 4432.55 3100.55 c
-4410.95 3100.55 4392.95 3082.55 4392.95 3060.95 c
-4392.95 3039.35 4410.95 3021.35 4432.55 3021.35 c
-4454.15 3021.35 4472.15 3039.35 4472.15 3060.95 c
-f*
-4709.75 2853.35 m
-4748.15 2885.75 l
-4756.55 2936.15 l
-4865.75 2820.95 l
-f*
-2633.75 2105.75 342 294 re
-Y
-2633.75 2399.75 m
-2967.35 2114.15 l
-S
-0 0 6120 7920 re
-Y
-2672.15 2400.95 m
-2672.15 2422.55 2654.15 2440.55 2632.55 2440.55 c
-2610.95 2440.55 2592.95 2422.55 2592.95 2400.95 c
-2592.95 2379.35 2610.95 2361.35 2632.55 2361.35 c
-2654.15 2361.35 2672.15 2379.35 2672.15 2400.95 c
-f*
-2907.35 2103.35 m
-2951.75 2127.35 l
-2968.55 2174.15 l
-3053.75 2039.75 l
-f*
-4433.75 2031.35 342 295.2 re
-Y
-4433.75 2039.75 m
-4767.35 2326.55 l
-S
-0 0 6120 7920 re
-Y
-4472.15 2040.95 m
-4472.15 2062.55 4454.15 2080.55 4432.55 2080.55 c
-4410.95 2080.55 4392.95 2062.55 4392.95 2040.95 c
-4392.95 2019.35 4410.95 2001.35 4432.55 2001.35 c
-4454.15 2001.35 4472.15 2019.35 4472.15 2040.95 c
-f*
-4768.55 2264.15 m
-4751.75 2312.15 l
-4707.35 2336.15 l
-4853.75 2399.75 l
-f*
-4863.35 3232.55 319.2 15.5999 re
-Y
-4860.95 3240.95 m
-5175.35 3240.95 l
-S
-0 0 6120 7920 re
-Y
-4902.95 3242.15 m
-4902.95 3263.75 4884.95 3281.75 4863.35 3281.75 c
-4840.55 3281.75 4822.55 3263.75 4822.55 3242.15 c
-4822.55 3220.55 4840.55 3202.55 4863.35 3202.55 c
-4884.95 3202.55 4902.95 3220.55 4902.95 3242.15 c
-f*
-5133.35 3192.95 m
-5152.55 3240.95 l
-5133.35 3288.95 l
-5285.75 3240.95 l
-f*
-4863.35 2812.55 319.2 15.5999 re
-Y
-4860.95 2820.95 m
-5175.35 2820.95 l
-S
-0 0 6120 7920 re
-Y
-4902.95 2822.15 m
-4902.95 2843.75 4884.95 2861.75 4863.35 2861.75 c
-4840.55 2861.75 4822.55 2843.75 4822.55 2822.15 c
-4822.55 2800.55 4840.55 2782.55 4863.35 2782.55 c
-4884.95 2782.55 4902.95 2800.55 4902.95 2822.15 c
-f*
-5133.35 2772.95 m
-5152.55 2820.95 l
-5133.35 2868.95 l
-5285.75 2820.95 l
-f*
-4863.35 2392.55 319.2 15.5999 re
-Y
-4860.95 2400.95 m
-5175.35 2400.95 l
-S
-0 0 6120 7920 re
-Y
-4902.95 2402.15 m
-4902.95 2423.75 4884.95 2441.75 4863.35 2441.75 c
-4840.55 2441.75 4822.55 2423.75 4822.55 2402.15 c
-4822.55 2380.55 4840.55 2362.55 4863.35 2362.55 c
-4884.95 2362.55 4902.95 2380.55 4902.95 2402.15 c
-f*
-5133.35 2352.95 m
-5152.55 2400.95 l
-5133.35 2448.95 l
-5285.75 2400.95 l
-f*
-2333.75 3231.35 206.4 16.7996 re
-Y
-2333.75 3239.75 m
-2531.75 3240.95 l
-S
-0 0 6120 7920 re
-Y
-2372.15 3240.95 m
-2372.15 3262.55 2354.15 3280.55 2332.55 3280.55 c
-2310.95 3280.55 2292.95 3262.55 2292.95 3240.95 c
-2292.95 3219.35 2310.95 3201.35 2332.55 3201.35 c
-2354.15 3201.35 2372.15 3219.35 2372.15 3240.95 c
-f*
-2493.35 3192.95 m
-2512.55 3240.95 l
-2493.35 3288.95 l
-2645.75 3240.95 l
-f*
-2333.75 2811.35 206.4 16.7996 re
-Y
-2333.75 2819.75 m
-2531.75 2820.95 l
-S
-0 0 6120 7920 re
-Y
-2372.15 2820.95 m
-2372.15 2842.55 2354.15 2860.55 2332.55 2860.55 c
-2310.95 2860.55 2292.95 2842.55 2292.95 2820.95 c
-2292.95 2799.35 2310.95 2781.35 2332.55 2781.35 c
-2354.15 2781.35 2372.15 2799.35 2372.15 2820.95 c
-f*
-2493.35 2772.95 m
-2512.55 2820.95 l
-2493.35 2868.95 l
-2645.75 2820.95 l
-f*
-2333.75 2391.35 206.4 16.7996 re
-Y
-2333.75 2399.75 m
-2531.75 2400.95 l
-S
-0 0 6120 7920 re
-Y
-2372.15 2400.95 m
-2372.15 2422.55 2354.15 2440.55 2332.55 2440.55 c
-2310.95 2440.55 2292.95 2422.55 2292.95 2400.95 c
-2292.95 2379.35 2310.95 2361.35 2332.55 2361.35 c
-2354.15 2361.35 2372.15 2379.35 2372.15 2400.95 c
-f*
-2493.35 2352.95 m
-2512.55 2400.95 l
-2493.35 2448.95 l
-2645.75 2400.95 l
-f*
-5283.35 3232.55 319.2 15.5999 re
-Y
-5280.95 3240.95 m
-5595.35 3240.95 l
-S
-0 0 6120 7920 re
-Y
-5322.95 3242.15 m
-5322.95 3263.75 5304.95 3281.75 5283.35 3281.75 c
-5260.55 3281.75 5242.55 3263.75 5242.55 3242.15 c
-5242.55 3220.55 5260.55 3202.55 5283.35 3202.55 c
-5304.95 3202.55 5322.95 3220.55 5322.95 3242.15 c
-f*
-5553.35 3192.95 m
-5572.55 3240.95 l
-5553.35 3288.95 l
-5705.75 3240.95 l
-f*
-5283.35 2812.55 319.2 15.5999 re
-Y
-5280.95 2820.95 m
-5595.35 2820.95 l
-S
-0 0 6120 7920 re
-Y
-5322.95 2822.15 m
-5322.95 2843.75 5304.95 2861.75 5283.35 2861.75 c
-5260.55 2861.75 5242.55 2843.75 5242.55 2822.15 c
-5242.55 2800.55 5260.55 2782.55 5283.35 2782.55 c
-5304.95 2782.55 5322.95 2800.55 5322.95 2822.15 c
-f*
-5553.35 2772.95 m
-5572.55 2820.95 l
-5553.35 2868.95 l
-5705.75 2820.95 l
-f*
-5283.35 2392.55 319.2 15.5999 re
-Y
-5280.95 2400.95 m
-5595.35 2400.95 l
-S
-0 0 6120 7920 re
-Y
-5322.95 2402.15 m
-5322.95 2423.75 5304.95 2441.75 5283.35 2441.75 c
-5260.55 2441.75 5242.55 2423.75 5242.55 2402.15 c
-5242.55 2380.55 5260.55 2362.55 5283.35 2362.55 c
-5304.95 2362.55 5322.95 2380.55 5322.95 2402.15 c
-f*
-5553.35 2352.95 m
-5572.55 2400.95 l
-5553.35 2448.95 l
-5705.75 2400.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/frames.eps b/ast-5.3-1/sun211_figures/frames.eps
deleted file mode 100644
index a9ae19f..0000000
--- a/ast-5.3-1/sun211_figures/frames.eps
+++ /dev/null
@@ -1,1095 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 141 322 422 581
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:50:26
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-2266.55 5424.95 m
-2266.55 5477.75 2223.35 5522.15 2169.35 5522.15 c
-1582.55 5522.15 l
-1529.75 5522.15 1485.35 5477.75 1485.35 5424.95 c
-1485.35 4778.15 l
-1485.35 4725.35 1529.75 4680.95 1582.55 4680.95 c
-2169.35 4680.95 l
-2223.35 4680.95 2266.55 4725.35 2266.55 4778.15 c
-f*
-1 g
-2201.75 5480.15 m
-2201.75 5532.95 2159.75 5576.15 2105.75 5576.15 c
-1527.35 5576.15 l
-1474.55 5576.15 1431.35 5532.95 1431.35 5480.15 c
-1431.35 4841.75 l
-1431.35 4788.95 1474.55 4745.75 1527.35 4745.75 c
-2105.75 4745.75 l
-2158.55 4745.75 2201.75 4788.95 2201.75 4841.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-2201.75 5480.15 m
-2201.75 5532.95 2159.75 5576.15 2105.75 5576.15 c
-1527.35 5576.15 l
-1474.55 5576.15 1431.35 5532.95 1431.35 5480.15 c
-1431.35 4841.75 l
-1431.35 4788.95 1474.55 4745.75 1527.35 4745.75 c
-2105.75 4745.75 l
-2158.55 4745.75 2201.75 4788.95 2201.75 4841.75 c
-h
-S
-2019.35 4731.35 15.5999 849.6 re
-Y
-2026.55 5583.35 m
-2026.55 4738.55 l
-S
-2026.55 5212.55 189.6 15.5999 re
-Y
-2024.15 5220.95 m
-2208.95 5220.95 l
-S
-0 0 6120 7920 re
-Y
-2064.95 5222.15 m
-2064.95 5243.75 2046.95 5261.75 2025.35 5261.75 c
-2002.55 5261.75 1984.55 5243.75 1984.55 5222.15 c
-1984.55 5200.55 2002.55 5182.55 2025.35 5182.55 c
-2046.95 5182.55 2064.95 5200.55 2064.95 5222.15 c
-f*
-2244.95 5222.15 m
-2244.95 5243.75 2226.95 5261.75 2205.35 5261.75 c
-2182.55 5261.75 2164.55 5243.75 2164.55 5222.15 c
-2164.55 5200.55 2182.55 5182.55 2205.35 5182.55 c
-2226.95 5182.55 2244.95 5200.55 2244.95 5222.15 c
-f*
-2026.55 4972.55 189.6 15.5999 re
-Y
-2024.15 4980.95 m
-2208.95 4980.95 l
-S
-0 0 6120 7920 re
-Y
-2064.95 4982.15 m
-2064.95 5003.75 2046.95 5021.75 2025.35 5021.75 c
-2002.55 5021.75 1984.55 5003.75 1984.55 4982.15 c
-1984.55 4960.55 2002.55 4942.55 2025.35 4942.55 c
-2046.95 4942.55 2064.95 4960.55 2064.95 4982.15 c
-f*
-2244.95 4982.15 m
-2244.95 5003.75 2226.95 5021.75 2205.35 5021.75 c
-2182.55 5021.75 2164.55 5003.75 2164.55 4982.15 c
-2164.55 4960.55 2182.55 4942.55 2205.35 4942.55 c
-2226.95 4942.55 2244.95 4960.55 2244.95 4982.15 c
-f*
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -1530 -5401]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -1615 -5401]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -1677 -5399]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -1747 -5401]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -1863 -5399]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -1569 -5179]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -1671 -5179]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -1741 -5179]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -1779 -5178]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-39 95 true[1 0 0 1 -1851 -5179]@85 imagemask
-J,fQKrdXtJs8E-#
-s8N'!5QCKY!$D7!!!!Q0huE`^s1eU7#QMR>!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:J-Z+i!8n+^^]8`m
-s1eUVs8Tk7#QOh>!!3-"^]4 at as1eU7+90+V!!iP>!!!'"^]4?7J%u$a!$AuV!!!8>!!!!$^]4?7!.Y%~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -2316 -5179]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-39 95 true[1 0 0 1 -2403 -5179]@85 imagemask
-J,fQKrdXtJs8E-#
-s8N'!5QCKY!$D7!!!!Q0huE`^s1eU7#QMR>!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:J-Z+i!8n+^^]8`m
-s1eUVs8Tk7#QOh>!!3-"^]4 at as1eU7+90+V!!iP>!!!'"^]4?7J%u$a!$AuV!!!8>!!!!$^]4?7!.Y%~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -2316 -4939]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-66 95 true[1 0 0 1 -2387 -4939]@85 imagemask
-&-)\0s8W,W!"],0
-s8W-!huF#^s8W-!s6p!js8W-!s8VQg!WW3"s8W,o!!*'!s8W-!p](;Ds8W-!s7cQo5QCc`s8Vus!$D7@
-s8W,s!!!Q0s8W-!rVup's8W-!s8Duu#J^<>!!)uu!!D-Z!!!!@!!!&hz%fcS0p](9o!!e#S!.4bH
-!!!+O!!#1_!!!!$J,fQkz!Pe[8%tFW[!!'e7!!g:>!!!#7!!!,Zz!!!!"n,NFgz!;HNoz!!%BH
-z!!!!_zz*rl9 at z!"XS[z!!!8>z!!!!(huE`Wz"7Q9jz!!2ip
-z!!!#szzIK0?Jz!'^G`z!!"*kz!!!!@^]4?7z&)[Efz!!hun
-z!!!8nz!!!!$p](9oz!W2otz!!3'!z!!!$!zzIt.M!z!.TM!z!!#7!
-z!!!!`huE`Wz+5d,!z!$C\1z!!!Q)z!!!!0p](9oz&,ZD-z!!iE%
-z!!!9'z!!!!(rVuouz"9/?$z!!E6$z!!!-$J,fQL!!!!$s*t(Lz!WRZM
-z!!3,8z!!!'"^]4?7!!!!"s1eU7z!WTq8z!!3,Xz!!!'"huEfY!!!!"s53k^z!WV'X
-#64`(!!3,X!!e#S!!!'"huF"4!!!!$s53kZ^]4?7"979Z"2Fm:!!E8Z!!D-Z!!!9(huEf9!!!!(s53kX
-n,NFg&-'EF!Up'h!"]+F!!)co!!",@^]4B4!!!!`s1eU7IK0?J5Q?66!.OtK!.Y$!!!#66!!3-"!!!!`
-^]4K:rr<$!+7K7 at s8Duu!"]&/s8Vus!!!9(s8W,s!!!!$s8W-!p](9o!WW3"s6p!g!!*'!s8V!W!!!"Ks8W,7z+92B at z!"],0rVuou!!!-$s7cQozJ,d:az!"\u-!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -1568 -4944]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -1670 -4944]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -1740 -4944]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -1778 -4943]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-66 95 true[1 0 0 1 -1833 -4944]@85 imagemask
-&-)\0s8W,W!"],0
-s8W-!huF#^s8W-!s6p!js8W-!s8VQg!WW3"s8W,o!!*'!s8W-!p](;Ds8W-!s7cQo5QCc`s8Vus!$D7@
-s8W,s!!!Q0s8W-!rVup's8W-!s8Duu#J^<>!!)uu!!D-Z!!!!@!!!&hz%fcS0p](9o!!e#S!.4bH
-!!!+O!!#1_!!!!$J,fQkz!Pe[8%tFW[!!'e7!!g:>!!!#7!!!,Zz!!!!"n,NFgz!;HNoz!!%BH
-z!!!!_zz*rl9 at z!"XS[z!!!8>z!!!!(huE`Wz"7Q9jz!!2ip
-z!!!#szzIK0?Jz!'^G`z!!"*kz!!!!@^]4?7z&)[Efz!!hun
-z!!!8nz!!!!$p](9oz!W2otz!!3'!z!!!$!zzIt.M!z!.TM!z!!#7!
-z!!!!`huE`Wz+5d,!z!$C\1z!!!Q)z!!!!0p](9oz&,ZD-z!!iE%
-z!!!9'z!!!!(rVuouz"9/?$z!!E6$z!!!-$J,fQL!!!!$s*t(Lz!WRZM
-z!!3,8z!!!'"^]4?7!!!!"s1eU7z!WTq8z!!3,Xz!!!'"huEfY!!!!"s53k^z!WV'X
-#64`(!!3,X!!e#S!!!'"huF"4!!!!$s53kZ^]4?7"979Z"2Fm:!!E8Z!!D-Z!!!9(huEf9!!!!(s53kX
-n,NFg&-'EF!Up'h!"]+F!!)co!!",@^]4B4!!!!`s1eU7IK0?J5Q?66!.OtK!.Y$!!!#66!!3-"!!!!`
-^]4K:rr<$!+7K7 at s8Duu!"]&/s8Vus!!!9(s8W,s!!!!$s8W-!p](9o!WW3"s6p!g!!*'!s8V!W!!!"Ks8W,7z+92B at z!"],0rVuou!!!-$s7cQozJ,d:az!"\u-!!!!~>
-Q
-0.564706 g
-4055.75 4824.95 m
-4055.75 4883.75 4008.95 4930.55 3950.15 4930.55 c
-3140.15 4930.55 l
-3081.35 4930.55 3034.55 4883.75 3034.55 4824.95 c
-3034.55 4194.95 l
-3034.55 4136.15 3081.35 4089.35 3140.15 4089.35 c
-3950.15 4089.35 l
-4008.95 4089.35 4055.75 4136.15 4055.75 4194.95 c
-f*
-1 g
-3990.95 4881.35 m
-3990.95 4938.95 3945.35 4984.55 3887.75 4984.55 c
-3083.75 4984.55 l
-3026.15 4984.55 2980.55 4938.95 2980.55 4881.35 c
-2980.55 4257.35 l
-2980.55 4199.75 3026.15 4154.15 3083.75 4154.15 c
-3887.75 4154.15 l
-3945.35 4154.15 3990.95 4199.75 3990.95 4257.35 c
-f*
-0 g
-3990.95 4881.35 m
-3990.95 4938.95 3945.35 4984.55 3887.75 4984.55 c
-3083.75 4984.55 l
-3026.15 4984.55 2980.55 4938.95 2980.55 4881.35 c
-2980.55 4257.35 l
-2980.55 4199.75 3026.15 4154.15 3083.75 4154.15 c
-3887.75 4154.15 l
-3945.35 4154.15 3990.95 4199.75 3990.95 4257.35 c
-h
-S
-3808.55 4139.75 15.5999 849.6 re
-Y
-3815.75 4991.75 m
-3815.75 4146.95 l
-S
-3815.75 4620.95 190.8 15.5999 re
-Y
-3813.35 4629.35 m
-3998.15 4629.35 l
-S
-0 0 6120 7920 re
-Y
-3855.35 4630.55 m
-3855.35 4653.35 3837.35 4671.35 3815.75 4671.35 c
-3792.95 4671.35 3774.95 4653.35 3774.95 4630.55 c
-3774.95 4608.95 3792.95 4590.95 3815.75 4590.95 c
-3837.35 4590.95 3855.35 4608.95 3855.35 4630.55 c
-f*
-4035.35 4630.55 m
-4035.35 4653.35 4017.35 4671.35 3995.75 4671.35 c
-3972.95 4671.35 3954.95 4653.35 3954.95 4630.55 c
-3954.95 4608.95 3972.95 4590.95 3995.75 4590.95 c
-4017.35 4590.95 4035.35 4608.95 4035.35 4630.55 c
-f*
-3815.75 4380.95 190.8 15.5999 re
-Y
-3813.35 4389.35 m
-3998.15 4389.35 l
-S
-0 0 6120 7920 re
-Y
-3855.35 4390.55 m
-3855.35 4413.35 3837.35 4431.35 3815.75 4431.35 c
-3792.95 4431.35 3774.95 4413.35 3774.95 4390.55 c
-3774.95 4368.95 3792.95 4350.95 3815.75 4350.95 c
-3837.35 4350.95 3855.35 4368.95 3855.35 4390.55 c
-f*
-4035.35 4390.55 m
-4035.35 4413.35 4017.35 4431.35 3995.75 4431.35 c
-3972.95 4431.35 3954.95 4413.35 3954.95 4390.55 c
-3954.95 4368.95 3972.95 4350.95 3995.75 4350.95 c
-4017.35 4350.95 4035.35 4368.95 4035.35 4390.55 c
-f*
-q[1 0 0 1 0 0]concat
-72 100 true[1 0 0 1 -3071 -4806]@85 imagemask
-#CldSIt.M!!!e#S
-5QC``!!!8>!WW3"huE`^^`WUVs82is#N5X^s8W*!!!iQ(s1n[7^]4W>s82j%s6p!ns8V!W!WVop#QOgS
-!!%NH!!iQ'!!!!`rW!3'qu?]s+9)<Gs7cQo!"]*[#QO8n!!!9(^^'nt!!!!(s54.^^]4?7"97iqs*t(L
-!!E8j#QFc(!!!'"p]pg!!!!!"s7ciuz!WW'&qu?]s!!3,t#Q+Q%!!!'"rWi2u!!!!"s8E8uz!WW-(n,NFg
-!!3-!#Oh]n!!!'"rs/#n!!!!$s8N>^z"98B+huE`W!!E9$#N,R^!!!9(rs-=>!!!!0s8N>>z
-+92?G^]4?7!'gM`#J^<>!!%NKrs+&S!!!'"s8N=S!!!!$s8W*!z&-)\/z!'gM`rVuou!!*'!
-s8Duu!!!-$s8W&u!!!!0s8W,sz5QCc`qu?]s!<<*!s7cQo!!iQ(s8Vio!!!Q0s8W,g!!!!`s8W-!n,NFgs8W-!
-s53kW"98E$s8V!W!!iQ(s8W,7!!", at s8W-!J,fR6s8W-!rr<$!J,fQKs8Duu!WW3"s8Vus!!E9$s8W,o
-!!!9(s8W-!n,NG!s8W-!s1eU7&-)\0s8N'!!$D7 at s8Vus!!#7`s8W,g!!!"Ks8W-!^]4?7J,fQKrr<$!
-!<<*!s82is!!*'!s8VQg!!!'"s8W,7!!!!"s8W-!z!WW3"qu?]s!!3-"s6p!g!!!-$s8Tk7!!!!$s8W*!z
-"98E!z!!E9$p](9o!:U*js53kW!!)Kjs8Tk7!!!&h"98CO!!!!"n,r^jz!Up3krVuou!!D]m
-s82is!!!,j"989!!!!!(n,`Rez#Ohcop](9o!"\Q"s7cQo!!!Q!!WVop!!!!@n,WL`z+7K:1
-p](9o!'frQs7cQo!!#7Q!.XbD!!!"Kn,Rt9zs6p"Qqu?]s!WVWh5PtK]!!E8j!$D1?!!!9(n,O!u!!!!0s6p"!rr<$!+91g1#QK;S!.Y%<!!E8Z!!3-"n,NIg
-n,N^ns6p!gJ,TF4s8VQg!'gM`s8RlD!!!Q0s8Virn,NFjs8W,7!Up'h!.Y%J!!2Qh!!!9(huEfI~>
-Q
-q[1 0 0 1 0 0]concat
-76 95 true[1 0 0 1 -3149 -4809]@85 imagemask
-+92B at p`KP9s6q-1
-s8Vj9s8W,g+92B at p`KP9s6pR!s8VQns8W,7!WW3"!!*'!s*t+Ls8DuuJ,fNK!.Y%H!!%NKrr<%Ks82is
-J,fKJ!'gM]!!*'!qu?^]s82iss8Vus!'gM]!!3-"p](:Ys82j!s8VQg!'gM]!!E9$huEaAs82j%s8V!W
-!'gM]!"],0^]4@!s82j-s8RTL!'gM]!$D7 at J,fR6s82j]s8N'!!'gM]!.Y%J!!!!`s82kHs82is!'gM]!<<)s!!!!`
-s82ots7cQo!'gM]!WW2h!!!!`s83!!s53kW!'gM]#QOh^!!!!`s83E-s1eU7!'gM]&-)Z[!!!!`s83u=
-s*t(L!'gM_5QC``!!!!`s8G7_rVuou!'gM`J,fEH!!!!`s8W-!qu?]s!'gM`s8Vio!!!!`s8W-!n,NFg
-!'gM`s8V!W!!!!`s8DuthuE`W!'gM]s8Tk7!!!!`s87BHJ,fQL!'gM]5Q?66!!!!`s83u=z!'gM]&,lP/!!!!`
-s83-"z!'gM]"8i-!!!!!`s82oqz!'gM]!<)ru!!!!`s82kHz!'gM]!'bu6!!!!`s82j=
-^]4?7!'gM]!"[uf!!!!`s82j%n,NFg!'gM]!!Dur!!!!`s82j!qu?]s!'gM]!!3'!!!!!`s82isrr<$!
-!'gM]!!%M!!!!!`s82isJ%u$a!'gM]!!#7Q!!!!`s82is5PP3Y!'gM]!!#7_!!!!`s82isJ,b$!!'gM]!!3-"huEaA
-s82j]s8W*!!'gM]!'gM`rr<$`s82j]s8W*!!'gM]!'gM`rr<$`s82isz!'gM]z!!!!`s82is
-z!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!", at s82isz+92B=z!!", at s82isz+92B=z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 94 true[1 0 0 1 -3228 -4780]@85 imagemask
-!$C\1z!!%NJ
-z!!!'"s*t(L!!!!$s8Tk7z#QOh^z!"],0n,NFg!!", at s7cQo!!!!@s8Vusz5QC9O
-z!'gMAIK0?J!!#7`i'%,@!!!!`s56*Az5QBX`z!'gMA%tFW[!!", at i"(><!!!!@s54-t
-z+917(^]4?7!"]+F"5j.Z!!!9(J-4^0!!!!"rW!&Yz!!!!"n,NFgz!Up'hz!!2ipz!!!#o
-zzp](9oz!;lfsz!!%BHz!!!"HzzIK0?Jz!<)ruz!!*$!
-z!!!'"z!!!!"rr<$!z"93lOz!!E7Oz!!!-$J,fQL!!!!(s1eU7z#QMR>
-z!"]+fz!!!Q0huE`W!!!!0s53kWz+91g1z!$D71z!!#7`n,NFg!!!!`s7cQoz5QCKY
-z!.Y%Hz!!%NKqu?]s!!!$!s82iszs8W&uz!<<)uz!!3-"rVuou!!!'"s8N'!
-!!!!$s8UsVz"98DYJ,fQL!!E9$O+731!!!9(s,V[1!!!!(s8Rkiz&-)Y7^]4?7!"],0#J^<>
-!!", at rr_0Z!!!!@s8E,Yz+92<Bn,NFg!'gM]!Up'h!!#7`quQ9e!!!"Ks82omzJ,f9Dp](9o!.Y%D!;HNo
-!!*'!n,W at d!!!$!s6p#9!!!!"s8VQgIK0?J!WW2X!.FnJ!!3-"huGq@!!!-$s1eV!!!!!$s8Tk7*rl9@
-#QOh>!$;1@!!iQ(J,g[A!!!Q0s*t([J,fQ[s8RTL&&8/F+92?@!"ZjF!$D7@!!!8>!!#7`rVup'huEaA
-s8Duu#N,R^5QC]_!!D]j!.Y%H!!!,j!!%NKqu?^!n,NIgs82is"8Diss8Vus!!iE%!WW3!!!!9'!!iQ(rr<$@rr>:`s8Virs8V"As8W,o"98DZ5QCc`p]LQri'78As7c]rs53~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -3297 -4809]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -3383 -4809]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -3445 -4807]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -3515 -4809]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -3631 -4807]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-92 93 true[1 0 0 1 -3429 -4587]@85 imagemask
-5QCc`s*t(L#QOhn
-5QCc`s*t(L#QOhn5QCc`s*t(L&-)\!!<<*!huE`W+92?@!$D7 at z5QCKY!"],-zJ,f!<!!iQ%
-zJ,eF,!!iQ!zs8Tk7!!iQ!!!!!"s8RTL!!E8j!!!!$s8N'!!!E8j!!!!$s8Duu!!E8j!!!!(
-s82is!!E8j!!!!0s7cQo!!E8j!!!!@s7cQo!!E8j!!!!@s6p!g!!E8j!!!!`s53kW!!E8j!!!"Ks1eU7!!E8j!!!$!
-s*t(L!!E8j!!!'"s*t(L!!E8j!!!'"rr<$!!!E8j!!!-$rVuou!!E8j!!!9(qu?]s!!E8j!!!Q0p](9o
-!!E8j!!!Q0n,NFg!!E8j!!", at n,NFg!!E8j!!#7`huE`W!!E8j!!%NK^]4?7!!E8j!!*'!J,fQL!!E8j
-!!*'!z!!E8j!!3-"z!!E8j!!E9#z!!E8j!!iQ%z!!E8j!!iQ!z!!E8j!"],!z!!E8j
-!$D71z!!E8j!'gMAz!!E8j!'gM!z!!E8j!.Y$!z!!E8j!<<'!z!!E8j!WW-!
-z!!E8j"98?#z!!E8j"989!z!!E8j#QOQ!z!!E9$s8VQgz!!E9$s8V!Wz
-!!E9$s8W&uz!!E9$s8W,Wz!!E9$s8W,oz!!E8j"98E$z!!E8j!!iQ(^]4?7!!E8j!!*'!huE`W
-!!E8j!!", at p](9o!!E8j!!!9(qu?]s!!E8j!!!-$rVuou!!E8j!!!$!rr<$!!!E8j!!!"Ks*t(L!!E8j
-!!!!`s*t(L!!E8j!!!!`s1eU7!!E8j!!!!@s1eU7!!E8j!!!!@s53kW!!E8j!!!!0s53kW!!E8j!!!!0
-s53kW!!E8j!!!!0s53kW!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(
-s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g
-!!E8j!!!!(s6p!g!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!@s1eU7!!E8j
-!!!!@s1eU7!!E8j!!!!`s1eU7!!E8j!!!!`s*t(L!!E8j!!!"Krr<$!!!E8j!!!$!rr<$!!!E8j!!!'"rVuou!!iPn!!!9(qu?]s!!iQ!!!", at n,NFg!!iQ!!!*'!huE`W!"],/!$D7 at J,fQL
-!'gM`s8W-!z"98E$s8W,oz5QCc`s8W,7z5QCc`s8W&uz5QCc`s8RTLz~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -3524 -4587]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-82 74 true[1 0 0 1 -4137 -4585]@85 imagemask
-!!!$!huE`W&&8/F
-!"],/!!!!`n,NFgJ,fP!!!%ND!!!'"s8V!W!<;rs!!E9$s7cQps82is&-(QPqu?j!rVup?s*tX[!!E9#
-!!#7_!!iOS#QOf(!.XnH"96.As8N'!s7cQps54Ffrr<*"p](<on.5R!J-#]>!!%N<&,:X)"979Z!.Xbc
-n/m/cs53kW5PuV]%tFob^]4?Vr'.t-J.M[q!!",?5C`uh&-'EF!"]&nJ-Wk3s*t(L&-%+Z#J_G]J,fQSs*k"N^`WT,
-!!!9(rW!&95Q?66!!E9#!!C#$rr<$!"989!"2I/$!!!!$s82j!^jl at a!!!'"qu?]sJ,]KK!!3,p!!!"K
-rr<$!!<;fo!!%NKzs7cQo!.XtJ!!!$!p](9oJ,TEJ!!%ND!!!$!rVuou!.XbD!!*&uzJ,B9H
-!<<#u!!!!`qu?]ss8Duu!!#7]!!!$!rVuou!'gG_!!*&uz+8u6?!<<#u!!!!@rVuous8Duu!!",@!!!$!rVuou
-!$D4@!!*&uz+9)<@!<<#u!!!!@s*t(Ls8Duu!!", at J,fTLrVuou!'gL6!!*&uz5QAM!!<<#u
-!!!!`s1eU7s8Duu!!#7`huEb,rVuou!'gMA!!%NKzJ,eF,!.Y"K!!!"Ks6p!gJ,]KK!!%KJn,NH<
-rr<$!!.Ot;!!#7`zrr;`n!'gJ`!!!#uJ+s!D5Q?66!!)qHp](:Ys*t(L!W7HF!!", at J,fQMr'1)Z!$D5k!!!&p
-5PtK]&-'EF!!E!\rVup/s1eU7"8Eu;!!!9(^]4?>n/qZ1!!iP^!!!8n+9)<@"979Z!"[uurr<$$s6p!g
-+5d\0J,fWMn,NGQ^^pHq!!*&o!!#7!#QK;S!.XnH!<7QSs1eU75Q1W`rr<0$^]4?Vrr<<'!!E8:!!!Q0
-i#hjs"979Z!!iQ(s7cQps53kW!WW3"n,NLhn,NFgJ,fQ,!!3,h!!!!@s8RTL!<;Ng!!!9(rVuous7cQo!!%N,z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-62 107 true[1 0 0 1 -4147 -4345]@85 imagemask
-!!!$!huE`W!!!Q0
-rVuou!!#7`s*t(L!!*'!s53kW!!E9$s7cQo!!iQ(s82is!"],0s8N'!!'gMQ+9-ik!.Y$a"96.:!<<'!
-!<:sW!WW-!!.XJ<!WW&t!'g5Y"98,r!$D+=#QO8n!"]&/#QO8n!"]&/&-(Pf!!iN(+90+V!!iOS+90+V
-!!E7O+90+V!!E8:5Q?66!!E8Z5Q?66!!3,XJ,b$!!!3,XJ,]KK!!3,hJ,]KK!!3,hJ,]KK!!*&os8N'!!!*&os8N'!
-!!*&os8Duu!!*&os8Duu!!*&os8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu
-!!*&ss8Duu!!*&ss8Duu!!*&sJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,t5Q:]`!!3,p5Q:]`
-!!E8r+9)<@!!E8r+9)<@!!E8r+9-ik!!iQ!&-%.[!!iPn#QK;S!"],!#QMR>!"],!"96.:!$D7!!WV'X!$D7!!WV'X
-!'gM!!<;Ng!'gM!!.XbD!.Y$!!'gA]!<<(L!$D1?!WW0"!!iN("98?#!!E7O"98?#!!3,X#QO]%!!%ND
-&-)D)!!", at +91g1!!!9(s8V!W!!!$!s8Tk7!!!!`s8RTL!!!!(s8N'!!!!!(s8Duu!!!!0s82is!!!!@
-s7cQo!!!!`s53kW!!!"Ks1eU7!!!$!rr<$!!!!'"rVuou!!!-$p](9o!!!9(huE`W!!!Q0^]4?7!!", at z!!%NH
-z!!*&oz!!3,Xz!!E8:z!!iN(z!"]&/z!"\u-z!$Ct9z!'frQ
-z!'fBAz!.Vcaz!.TM!!!Dur!<3$!!"]&/!<3$!!$D1?!<)ru!'gJ`!<)ru!.Y"K!<)ru
-!<<'!!<)ru!WW0"!<)ru"98B$!<3$!#QOf(!<3$!&-)V/!.TM!5QC]_!.VcaJ,fEH!'fBBs8Vio!$D+Ds8VQg!"],0s8Tk7!!iQ(s8RTL!!E9$s8Duu!!*'!s6p!g!!#7`s*t(L!!!'"n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-96 93 true[1 0 0 1 -3414 -4352]@85 imagemask
-5QCc`s8V!Wz
-5QCc`s8W+Lz5QCc`s8W,sz!.Y%Ks8W-!J,fQL!$D7 at s8W-!n,NFg!!iQ(!!E9$qu?]s!!E9!
-!!!Q0s*t(L!!E9!!!!$!s53kW!!E8r!!!!@s6p!g!!3,p!!!!(s82is!!3,p!!!!"s8Duu!!3,pz
-J,b$!!!3,pz5QAM!!!3,pz+917!!!3,pz#QO8n!!3,pz"98,r!!3,pz!WW&t!!3,pz
-!<;rs!!3,pz!.XtJ!!3,pz!.Y"K!!3,pz!'gJ`!!3,pz!$D5k!!3,pz!$D6V
-!!3,pz!"]+F!!3,pz!!iP^!!3,pz!!iP^!!3,pz!!iPn!!3,pz!!E8j!!3,p
-z!!E8r!!3,pz!!3,p!!3,pz!!3,p!!3,pz!!3,t!!3,pz!!3,t!!3,pz!!*&s!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!%NJ!!3,pz
-!!%NJ!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!*'!!!3,pz!!*&u!!3,pz!!*&u!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!3-!!!3,pz!!3,t!!3,pz!!3,t!!3,pz
-!!E9!!!3,pz!!E9!!!3,pz!!E8r!!3,pz!!iQ!!!3,pz!!iQ!!!3,pz!"],!!!3,pz
-!"],!!!3,pz!$D7!!!3,pz!$D7!!!3,pz!'gM!!!3,pz!.Y$!!!3,pz!<<(L
-!!3,pz!<<'!!!3,pz!WW-!!!3,pz"989!!!3,pz#QO]%!!3,pz&-)D)!!3,p
-z+91g1!!3,pzJ,eF,!!3,pzs8Tk7!!3,p!!!!"s8N'!!!3,p!!!!(s8Duu!!3,p!!!!@s7cQo!!E8r!!!"Ks6p!g!!E9!!!!-$s1eU7!!iQ%!!", at rr<$!!"],0!!iQ(qu?]s
-!$D7 at s8W-!n,NFg!WW3"s8W-!J,fQL5QCc`s8W,oz5QCc`s8W+Lz5QCc`s8Tk7z~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -3515 -4351]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-58 65 true[1 0 0 1 -3577 -4351]@85 imagemask
-!!!'"p](9o!!!Q0
-rr<$!!!#7`s1eU7!!*'!s53kW!!3-"s7cQo!!E9$s82is!"],0s8Duu!$D7 at s8N'!!$D7 at s8RTL!'gM`
-s8Tk7!.Y%H!'fBA!<<)W!!hun!<<(L!!D]j!WW0"!!)co!WW-!!!%BH"989!!!#+]"98,r!!"&?#QO8n
-!!!N0#QN]^!!!6(#QN]^!!!7S&-'EF!!!+O&-%.[!!!&8&-%.[!!!$"&,uV0z+9)<@z+9)<@z+8u6?
-z+8u6?z+8u6?z+8u6?z+8u6?z+8c*=z+8c*=z+8c*=z+8c*=
-z+8c*=z+8c*=z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z#Q+Q%
-z#Q=]'z#Q=]'z"9&9#!!2Qh"9&9#!!i9!!WN-"!"\u-!WN-"!"]&/!<3$!!$D1?!<7QL!$D4@!.TM!!'gJ`!'e7!!'gJ`!$C,!!'gG_!$C,!!'gG_!"\Q!!.XtJ!!i9!!.XnH!!E-!
-!.XbD!!)uu!<;Ng!!%M!!WV'X!!#7Q"96.:!!!Q0s8RTL!!!-$s8Duu!!!$!s7cQo!!!!@s1eU7~>
-Q
-0.564706 g
-2662.55 3959.75 m
-2662.55 4018.55 2615.75 4065.35 2556.95 4065.35 c
-1746.95 4065.35 l
-1688.15 4065.35 1641.35 4018.55 1641.35 3959.75 c
-1641.35 3329.75 l
-1641.35 3270.95 1688.15 3224.15 1746.95 3224.15 c
-2556.95 3224.15 l
-2615.75 3224.15 2662.55 3270.95 2662.55 3329.75 c
-f*
-1 g
-2597.75 4016.15 m
-2597.75 4073.75 2552.15 4119.35 2494.55 4119.35 c
-1690.55 4119.35 l
-1632.95 4119.35 1587.35 4073.75 1587.35 4016.15 c
-1587.35 3392.15 l
-1587.35 3334.55 1632.95 3288.95 1690.55 3288.95 c
-2494.55 3288.95 l
-2552.15 3288.95 2597.75 3334.55 2597.75 3392.15 c
-f*
-0 g
-2597.75 4016.15 m
-2597.75 4073.75 2552.15 4119.35 2494.55 4119.35 c
-1690.55 4119.35 l
-1632.95 4119.35 1587.35 4073.75 1587.35 4016.15 c
-1587.35 3392.15 l
-1587.35 3334.55 1632.95 3288.95 1690.55 3288.95 c
-2494.55 3288.95 l
-2552.15 3288.95 2597.75 3334.55 2597.75 3392.15 c
-h
-S
-2415.35 3274.55 15.5999 849.6 re
-Y
-2422.55 4127.75 m
-2422.55 3281.75 l
-S
-2422.55 3520.55 177.6 243.6 re
-Y
-2422.55 3764.15 m
-2591.75 3528.95 l
-S
-0 0 6120 7920 re
-Y
-2460.95 3765.35 m
-2460.95 3788.15 2442.95 3806.15 2421.35 3806.15 c
-2398.55 3806.15 2380.55 3788.15 2380.55 3765.35 c
-2380.55 3743.75 2398.55 3725.75 2421.35 3725.75 c
-2442.95 3725.75 2460.95 3743.75 2460.95 3765.35 c
-f*
-2631.35 3528.95 m
-2631.35 3551.75 2613.35 3569.75 2591.75 3569.75 c
-2568.95 3569.75 2550.95 3551.75 2550.95 3528.95 c
-2550.95 3507.35 2568.95 3489.35 2591.75 3489.35 c
-2613.35 3489.35 2631.35 3507.35 2631.35 3528.95 c
-f*
-2422.55 3515.75 182.4 252 re
-Y
-2422.55 3524.15 m
-2596.55 3767.75 l
-S
-0 0 6120 7920 re
-Y
-2460.95 3525.35 m
-2460.95 3548.15 2442.95 3566.15 2421.35 3566.15 c
-2398.55 3566.15 2380.55 3548.15 2380.55 3525.35 c
-2380.55 3503.75 2398.55 3485.75 2421.35 3485.75 c
-2442.95 3485.75 2460.95 3503.75 2460.95 3525.35 c
-f*
-2634.95 3767.75 m
-2634.95 3790.55 2616.95 3808.55 2595.35 3808.55 c
-2572.55 3808.55 2554.55 3790.55 2554.55 3767.75 c
-2554.55 3746.15 2572.55 3728.15 2595.35 3728.15 c
-2616.95 3728.15 2634.95 3746.15 2634.95 3767.75 c
-f*
-q[1 0 0 1 0 0]concat
-72 100 true[1 0 0 1 -1677 -3941]@85 imagemask
-#CldSIt.M!!!e#S
-5QC``!!!8>!WW3"huE`^^`WUVs82is#N5X^s8W*!!!iQ(s1n[7^]4W>s82j%s6p!ns8V!W!WVop#QOgS
-!!%NH!!iQ'!!!!`rW!3'qu?]s+9)<Gs7cQo!"]*[#QO8n!!!9(^^'nt!!!!(s54.^^]4?7"97iqs*t(L
-!!E8j#QFc(!!!'"p]pg!!!!!"s7ciuz!WW'&qu?]s!!3,t#Q+Q%!!!'"rWi2u!!!!"s8E8uz!WW-(n,NFg
-!!3-!#Oh]n!!!'"rs/#n!!!!$s8N>^z"98B+huE`W!!E9$#N,R^!!!9(rs-=>!!!!0s8N>>z
-+92?G^]4?7!'gM`#J^<>!!%NKrs+&S!!!'"s8N=S!!!!$s8W*!z&-)\/z!'gM`rVuou!!*'!
-s8Duu!!!-$s8W&u!!!!0s8W,sz5QCc`qu?]s!<<*!s7cQo!!iQ(s8Vio!!!Q0s8W,g!!!!`s8W-!n,NFgs8W-!
-s53kW"98E$s8V!W!!iQ(s8W,7!!", at s8W-!J,fR6s8W-!rr<$!J,fQKs8Duu!WW3"s8Vus!!E9$s8W,o
-!!!9(s8W-!n,NG!s8W-!s1eU7&-)\0s8N'!!$D7 at s8Vus!!#7`s8W,g!!!"Ks8W-!^]4?7J,fQKrr<$!
-!<<*!s82is!!*'!s8VQg!!!'"s8W,7!!!!"s8W-!z!WW3"qu?]s!!3-"s6p!g!!!-$s8Tk7!!!!$s8W*!z
-"98E!z!!E9$p](9o!:U*js53kW!!)Kjs8Tk7!!!&h"98CO!!!!"n,r^jz!Up3krVuou!!D]m
-s82is!!!,j"989!!!!!(n,`Rez#Ohcop](9o!"\Q"s7cQo!!!Q!!WVop!!!!@n,WL`z+7K:1
-p](9o!'frQs7cQo!!#7Q!.XbD!!!"Kn,Rt9zs6p"Qqu?]s!WVWh5PtK]!!E8j!$D1?!!!9(n,O!u!!!!0s6p"!rr<$!+91g1#QK;S!.Y%<!!E8Z!!3-"n,NIg
-n,N^ns6p!gJ,TF4s8VQg!'gM`s8RlD!!!Q0s8Virn,NFjs8W,7!Up'h!.Y%J!!2Qh!!!9(huEfI~>
-Q
-q[1 0 0 1 0 0]concat
-76 95 true[1 0 0 1 -1755 -3944]@85 imagemask
-+92B at p`KP9s6q-1
-s8Vj9s8W,g+92B at p`KP9s6pR!s8VQns8W,7!WW3"!!*'!s*t+Ls8DuuJ,fNK!.Y%H!!%NKrr<%Ks82is
-J,fKJ!'gM]!!*'!qu?^]s82iss8Vus!'gM]!!3-"p](:Ys82j!s8VQg!'gM]!!E9$huEaAs82j%s8V!W
-!'gM]!"],0^]4@!s82j-s8RTL!'gM]!$D7 at J,fR6s82j]s8N'!!'gM]!.Y%J!!!!`s82kHs82is!'gM]!<<)s!!!!`
-s82ots7cQo!'gM]!WW2h!!!!`s83!!s53kW!'gM]#QOh^!!!!`s83E-s1eU7!'gM]&-)Z[!!!!`s83u=
-s*t(L!'gM_5QC``!!!!`s8G7_rVuou!'gM`J,fEH!!!!`s8W-!qu?]s!'gM`s8Vio!!!!`s8W-!n,NFg
-!'gM`s8V!W!!!!`s8DuthuE`W!'gM]s8Tk7!!!!`s87BHJ,fQL!'gM]5Q?66!!!!`s83u=z!'gM]&,lP/!!!!`
-s83-"z!'gM]"8i-!!!!!`s82oqz!'gM]!<)ru!!!!`s82kHz!'gM]!'bu6!!!!`s82j=
-^]4?7!'gM]!"[uf!!!!`s82j%n,NFg!'gM]!!Dur!!!!`s82j!qu?]s!'gM]!!3'!!!!!`s82isrr<$!
-!'gM]!!%M!!!!!`s82isJ%u$a!'gM]!!#7Q!!!!`s82is5PP3Y!'gM]!!#7_!!!!`s82isJ,b$!!'gM]!!3-"huEaA
-s82j]s8W*!!'gM]!'gM`rr<$`s82j]s8W*!!'gM]!'gM`rr<$`s82isz!'gM]z!!!!`s82is
-z!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!", at s82isz+92B=z!!", at s82isz+92B=z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 94 true[1 0 0 1 -1833 -3915]@85 imagemask
-!$C\1z!!%NJ
-z!!!'"s*t(L!!!!$s8Tk7z#QOh^z!"],0n,NFg!!", at s7cQo!!!!@s8Vusz5QC9O
-z!'gMAIK0?J!!#7`i'%,@!!!!`s56*Az5QBX`z!'gMA%tFW[!!", at i"(><!!!!@s54-t
-z+917(^]4?7!"]+F"5j.Z!!!9(J-4^0!!!!"rW!&Yz!!!!"n,NFgz!Up'hz!!2ipz!!!#o
-zzp](9oz!;lfsz!!%BHz!!!"HzzIK0?Jz!<)ruz!!*$!
-z!!!'"z!!!!"rr<$!z"93lOz!!E7Oz!!!-$J,fQL!!!!(s1eU7z#QMR>
-z!"]+fz!!!Q0huE`W!!!!0s53kWz+91g1z!$D71z!!#7`n,NFg!!!!`s7cQoz5QCKY
-z!.Y%Hz!!%NKqu?]s!!!$!s82iszs8W&uz!<<)uz!!3-"rVuou!!!'"s8N'!
-!!!!$s8UsVz"98DYJ,fQL!!E9$O+731!!!9(s,V[1!!!!(s8Rkiz&-)Y7^]4?7!"],0#J^<>
-!!", at rr_0Z!!!!@s8E,Yz+92<Bn,NFg!'gM]!Up'h!!#7`quQ9e!!!"Ks82omzJ,f9Dp](9o!.Y%D!;HNo
-!!*'!n,W at d!!!$!s6p#9!!!!"s8VQgIK0?J!WW2X!.FnJ!!3-"huGq@!!!-$s1eV!!!!!$s8Tk7*rl9@
-#QOh>!$;1@!!iQ(J,g[A!!!Q0s*t([J,fQ[s8RTL&&8/F+92?@!"ZjF!$D7@!!!8>!!#7`rVup'huEaA
-s8Duu#N,R^5QC]_!!D]j!.Y%H!!!,j!!%NKqu?^!n,NIgs82is"8Diss8Vus!!iE%!WW3!!!!9'!!iQ(rr<$@rr>:`s8Virs8V"As8W,o"98DZ5QCc`p]LQri'78As7c]rs53~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -1904 -3944]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -1988 -3944]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2051 -3942]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2121 -3944]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2238 -3942]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-92 93 true[1 0 0 1 -2036 -3722]@85 imagemask
-5QCc`s*t(L#QOhn
-5QCc`s*t(L#QOhn5QCc`s*t(L&-)\!!<<*!huE`W+92?@!$D7 at z5QCKY!"],-zJ,f!<!!iQ%
-zJ,eF,!!iQ!zs8Tk7!!iQ!!!!!"s8RTL!!E8j!!!!$s8N'!!!E8j!!!!$s8Duu!!E8j!!!!(
-s82is!!E8j!!!!0s7cQo!!E8j!!!!@s7cQo!!E8j!!!!@s6p!g!!E8j!!!!`s53kW!!E8j!!!"Ks1eU7!!E8j!!!$!
-s*t(L!!E8j!!!'"s*t(L!!E8j!!!'"rr<$!!!E8j!!!-$rVuou!!E8j!!!9(qu?]s!!E8j!!!Q0p](9o
-!!E8j!!!Q0n,NFg!!E8j!!", at n,NFg!!E8j!!#7`huE`W!!E8j!!%NK^]4?7!!E8j!!*'!J,fQL!!E8j
-!!*'!z!!E8j!!3-"z!!E8j!!E9#z!!E8j!!iQ%z!!E8j!!iQ!z!!E8j!"],!z!!E8j
-!$D71z!!E8j!'gMAz!!E8j!'gM!z!!E8j!.Y$!z!!E8j!<<'!z!!E8j!WW-!
-z!!E8j"98?#z!!E8j"989!z!!E8j#QOQ!z!!E9$s8VQgz!!E9$s8V!Wz
-!!E9$s8W&uz!!E9$s8W,Wz!!E9$s8W,oz!!E8j"98E$z!!E8j!!iQ(^]4?7!!E8j!!*'!huE`W
-!!E8j!!", at p](9o!!E8j!!!9(qu?]s!!E8j!!!-$rVuou!!E8j!!!$!rr<$!!!E8j!!!"Ks*t(L!!E8j
-!!!!`s*t(L!!E8j!!!!`s1eU7!!E8j!!!!@s1eU7!!E8j!!!!@s53kW!!E8j!!!!0s53kW!!E8j!!!!0
-s53kW!!E8j!!!!0s53kW!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(
-s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g
-!!E8j!!!!(s6p!g!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!@s1eU7!!E8j
-!!!!@s1eU7!!E8j!!!!`s1eU7!!E8j!!!!`s*t(L!!E8j!!!"Krr<$!!!E8j!!!$!rr<$!!!E8j!!!'"rVuou!!iPn!!!9(qu?]s!!iQ!!!", at n,NFg!!iQ!!!*'!huE`W!"],/!$D7 at J,fQL
-!'gM`s8W-!z"98E$s8W,oz5QCc`s8W,7z5QCc`s8W&uz5QCc`s8RTLz~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -2130 -3722]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-62 107 true[1 0 0 1 -2754 -3720]@85 imagemask
-!!!$!huE`W!!!Q0
-rVuou!!#7`s*t(L!!*'!s53kW!!E9$s7cQo!!iQ(s82is!"],0s8N'!!'gMQ+9-ik!.Y$a"96.:!<<'!
-!<:sW!WW-!!.XJ<!WW&t!'g5Y"98,r!$D+=#QO8n!"]&/#QO8n!"]&/&-(Pf!!iN(+90+V!!iOS+90+V
-!!E7O+90+V!!E8:5Q?66!!E8Z5Q?66!!3,XJ,b$!!!3,XJ,]KK!!3,hJ,]KK!!3,hJ,]KK!!*&os8N'!!!*&os8N'!
-!!*&os8Duu!!*&os8Duu!!*&os8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu
-!!*&ss8Duu!!*&ss8Duu!!*&sJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,t5Q:]`!!3,p5Q:]`
-!!E8r+9)<@!!E8r+9)<@!!E8r+9-ik!!iQ!&-%.[!!iPn#QK;S!"],!#QMR>!"],!"96.:!$D7!!WV'X!$D7!!WV'X
-!'gM!!<;Ng!'gM!!.XbD!.Y$!!'gA]!<<(L!$D1?!WW0"!!iN("98?#!!E7O"98?#!!3,X#QO]%!!%ND
-&-)D)!!", at +91g1!!!9(s8V!W!!!$!s8Tk7!!!!`s8RTL!!!!(s8N'!!!!!(s8Duu!!!!0s82is!!!!@
-s7cQo!!!!`s53kW!!!"Ks1eU7!!!$!rr<$!!!!'"rVuou!!!-$p](9o!!!9(huE`W!!!Q0^]4?7!!", at z!!%NH
-z!!*&oz!!3,Xz!!E8:z!!iN(z!"]&/z!"\u-z!$Ct9z!'frQ
-z!'fBAz!.Vcaz!.TM!!!Dur!<3$!!"]&/!<3$!!$D1?!<)ru!'gJ`!<)ru!.Y"K!<)ru
-!<<'!!<)ru!WW0"!<)ru"98B$!<3$!#QOf(!<3$!&-)V/!.TM!5QC]_!.VcaJ,fEH!'fBBs8Vio!$D+Ds8VQg!"],0s8Tk7!!iQ(s8RTL!!E9$s8Duu!!*'!s6p!g!!#7`s*t(L!!!'"n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-82 74 true[1 0 0 1 -2743 -3480]@85 imagemask
-!!!$!huE`W&&8/F
-!"],/!!!!`n,NFgJ,fP!!!%ND!!!'"s8V!W!<;rs!!E9$s7cQps82is&-(QPqu?j!rVup?s*tX[!!E9#
-!!#7_!!iOS#QOf(!.XnH"96.As8N'!s7cQps54Ffrr<*"p](<on.5R!J-#]>!!%N<&,:X)"979Z!.Xbc
-n/m/cs53kW5PuV]%tFob^]4?Vr'.t-J.M[q!!",?5C`uh&-'EF!"]&nJ-Wk3s*t(L&-%+Z#J_G]J,fQSs*k"N^`WT,
-!!!9(rW!&95Q?66!!E9#!!C#$rr<$!"989!"2I/$!!!!$s82j!^jl at a!!!'"qu?]sJ,]KK!!3,p!!!"K
-rr<$!!<;fo!!%NKzs7cQo!.XtJ!!!$!p](9oJ,TEJ!!%ND!!!$!rVuou!.XbD!!*&uzJ,B9H
-!<<#u!!!!`qu?]ss8Duu!!#7]!!!$!rVuou!'gG_!!*&uz+8u6?!<<#u!!!!@rVuous8Duu!!",@!!!$!rVuou
-!$D4@!!*&uz+9)<@!<<#u!!!!@s*t(Ls8Duu!!", at J,fTLrVuou!'gL6!!*&uz5QAM!!<<#u
-!!!!`s1eU7s8Duu!!#7`huEb,rVuou!'gMA!!%NKzJ,eF,!.Y"K!!!"Ks6p!gJ,]KK!!%KJn,NH<
-rr<$!!.Ot;!!#7`zrr;`n!'gJ`!!!#uJ+s!D5Q?66!!)qHp](:Ys*t(L!W7HF!!", at J,fQMr'1)Z!$D5k!!!&p
-5PtK]&-'EF!!E!\rVup/s1eU7"8Eu;!!!9(^]4?>n/qZ1!!iP^!!!8n+9)<@"979Z!"[uurr<$$s6p!g
-+5d\0J,fWMn,NGQ^^pHq!!*&o!!#7!#QK;S!.XnH!<7QSs1eU75Q1W`rr<0$^]4?Vrr<<'!!E8:!!!Q0
-i#hjs"979Z!!iQ(s7cQps53kW!WW3"n,NLhn,NFgJ,fQ,!!3,h!!!!@s8RTL!<;Ng!!!9(rVuous7cQo!!%N,z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-96 93 true[1 0 0 1 -2019 -3487]@85 imagemask
-5QCc`s8V!Wz
-5QCc`s8W+Lz5QCc`s8W,sz!.Y%Ks8W-!J,fQL!$D7 at s8W-!n,NFg!!iQ(!!E9$qu?]s!!E9!
-!!!Q0s*t(L!!E9!!!!$!s53kW!!E8r!!!!@s6p!g!!3,p!!!!(s82is!!3,p!!!!"s8Duu!!3,pz
-J,b$!!!3,pz5QAM!!!3,pz+917!!!3,pz#QO8n!!3,pz"98,r!!3,pz!WW&t!!3,pz
-!<;rs!!3,pz!.XtJ!!3,pz!.Y"K!!3,pz!'gJ`!!3,pz!$D5k!!3,pz!$D6V
-!!3,pz!"]+F!!3,pz!!iP^!!3,pz!!iP^!!3,pz!!iPn!!3,pz!!E8j!!3,p
-z!!E8r!!3,pz!!3,p!!3,pz!!3,p!!3,pz!!3,t!!3,pz!!3,t!!3,pz!!*&s!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!%NJ!!3,pz
-!!%NJ!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!*'!!!3,pz!!*&u!!3,pz!!*&u!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!3-!!!3,pz!!3,t!!3,pz!!3,t!!3,pz
-!!E9!!!3,pz!!E9!!!3,pz!!E8r!!3,pz!!iQ!!!3,pz!!iQ!!!3,pz!"],!!!3,pz
-!"],!!!3,pz!$D7!!!3,pz!$D7!!!3,pz!'gM!!!3,pz!.Y$!!!3,pz!<<(L
-!!3,pz!<<'!!!3,pz!WW-!!!3,pz"989!!!3,pz#QO]%!!3,pz&-)D)!!3,p
-z+91g1!!3,pzJ,eF,!!3,pzs8Tk7!!3,p!!!!"s8N'!!!3,p!!!!(s8Duu!!3,p!!!!@s7cQo!!E8r!!!"Ks6p!g!!E9!!!!-$s1eU7!!iQ%!!", at rr<$!!"],0!!iQ(qu?]s
-!$D7 at s8W-!n,NFg!WW3"s8W-!J,fQL5QCc`s8W,oz5QCc`s8W+Lz5QCc`s8Tk7z~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2121 -3486]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-58 65 true[1 0 0 1 -2184 -3486]@85 imagemask
-!!!'"p](9o!!!Q0
-rr<$!!!#7`s1eU7!!*'!s53kW!!3-"s7cQo!!E9$s82is!"],0s8Duu!$D7 at s8N'!!$D7 at s8RTL!'gM`
-s8Tk7!.Y%H!'fBA!<<)W!!hun!<<(L!!D]j!WW0"!!)co!WW-!!!%BH"989!!!#+]"98,r!!"&?#QO8n
-!!!N0#QN]^!!!6(#QN]^!!!7S&-'EF!!!+O&-%.[!!!&8&-%.[!!!$"&,uV0z+9)<@z+9)<@z+8u6?
-z+8u6?z+8u6?z+8u6?z+8u6?z+8c*=z+8c*=z+8c*=z+8c*=
-z+8c*=z+8c*=z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z#Q+Q%
-z#Q=]'z#Q=]'z"9&9#!!2Qh"9&9#!!i9!!WN-"!"\u-!WN-"!"]&/!<3$!!$D1?!<7QL!$D4@!.TM!!'gJ`!'e7!!'gJ`!$C,!!'gG_!$C,!!'gG_!"\Q!!.XtJ!!i9!!.XnH!!E-!
-!.XbD!!)uu!<;Ng!!%M!!WV'X!!#7Q"96.:!!!Q0s8RTL!!!-$s8Duu!!!$!s7cQo!!!!@s1eU7~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -1413 -5707]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-40 120 true[1 0 0 1 -1483 -5686]@85 imagemask
-$ig8-!"Ju/!!!O[
-!!!!0huE`W"7Q9j!!2ut!!!#uz56(Z`!$?^k!!!Pf!!!!(n,NFg"8Dir!!2ut!!!#szrVuou
-!.OtK!!%M!!!!!`^]4?75MuMA!$C,!!!",1!!!!0p](9o&,6,)!"\u-!!!9'!!!!(rVuou#QFc(!!iN(
-!!!9(J,fQOs*t(L"96.:!!E8:!!!-$huE`Zs53kW"979Z!!3,h!!!'"n,NFhs6p!g!WVop!!3,p!!!'"p](9ps82is
-!WW&t!!3,t!!!$!qu?]ss8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&u!!!$!rr<$!s8N'!!<<'!
-!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!
-!!!$!rr<$!s8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&s!!!$!qu?]ts82is!WW&t!!3,p!!!'"p](9ps7cQo
-!WVWh!!3,h!!!'"n,NFhs53kW"979Z!!E8:!!!-$^]4?:s1eU7"93lO!!iOS!!!9(!!!!(rr<$!#Q=]'
-!"\u-!!!Q-!!!!0p](9o+7K71!$C\1!!",!!!!!`^]4?75JR7!!.TM!!!*$!!!!#u!!!!"qu?]s"8Dir
-!!D]j!!!8^!!!!0^]4?75C`_6!.FnJ!!)os!!!,r!!!!(huE`W&&8/F!"T&0!!!E-!!!!)z~>
-Q
-q[1 0 0 1 0 0]concat
-73 97 true[1 0 0 1 -2960 -5116]@85 imagemask
-!&+BQ&,lP/!!!!]
-!!%NKhuE`W!'UAbs8Vus!!!!`!!iQ(rr<$!!'e7 at s8W,7!!!!`i'6]qs53kW!'g7.^^'o7!!!!`rVqBM
-s82is!'gM`!!3-!!!!!`s8Duus8N'!!'gM_!!*'!J,fR6s8DuuJ,d:a!'gM]!!%NK^]4@!s82is5QBXA
-!'gM]!!#7`n,NGQs82is5QC3Q!'gM]!!#7`p](:Ys82is+92*9!'gM]!!", at qu?^]s82is+926=!'gM]!!", at qu?^]
-s82is+92<?!'gM]!!", at rVup_s82is&-)V/!'gM]!!!Q0rr<$`s82is&-)Y0!'gM]!!!Q0rr<$`s82is
-&-)Y0!'gM]!!!Q0rr<$`s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[
-!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6
-s82is&-)Z[!'gM]!!!Q0s*t)6s82is+92?@!'gM]!!", at rr<$`s82is+92?@!'gM]!!", at rr<$`s82is
-+92<?!'gM]!!", at rVup_s82is5QC]_!'gM]!!#7`rVup_s82is5QCW]!'gM]!!%NKqu?^]s82isJ,f9D
-!'gM_!!%NKp](:Ys8Duus8VQg!'gM`!!3-"n,NGQs8RTMs8V!W!'gM`^]XW:^]4@!s8V!fs8Tk7!'gM`pj`>DJ,fR6
-s8Duts8N'!!'gM]s8W,u!!!!`s87BHs82is!'gM]5QCcQ!!!!`s83E-s53kW!'gM]#QOgS!!!!`s82ot
-qu?]s!'gM]!"ZjF!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!#7`s82isz5QCc]z!!#7`s82isz5QCc]z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-40 120 true[1 0 0 1 -3037 -5095]@85 imagemask
-$ig8-!"Ju/!!!O[
-!!!!0huE`W"7Q9j!!2ut!!!#uz56(Z`!$?^k!!!Pf!!!!(n,NFg"8Dir!!2ut!!!#szrVuou
-!.OtK!!%M!!!!!`^]4?75MuMA!$C,!!!",1!!!!0p](9o&,6,)!"\u-!!!9'!!!!(rVuou#QFc(!!iN(
-!!!9(J,fQOs*t(L"96.:!!E8:!!!-$huE`Zs53kW"979Z!!3,h!!!'"n,NFhs6p!g!WVop!!3,p!!!'"p](9ps82is
-!WW&t!!3,t!!!$!qu?]ss8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&u!!!$!rr<$!s8N'!!<<'!
-!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!
-!!!$!rr<$!s8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&s!!!$!qu?]ts82is!WW&t!!3,p!!!'"p](9ps7cQo
-!WVWh!!3,h!!!'"n,NFhs53kW"979Z!!E8:!!!-$^]4?:s1eU7"93lO!!iOS!!!9(!!!!(rr<$!#Q=]'
-!"\u-!!!Q-!!!!0p](9o+7K71!$C\1!!",!!!!!`^]4?75JR7!!.TM!!!*$!!!!#u!!!!"qu?]s"8Dir
-!!D]j!!!8^!!!!0^]4?75C`_6!.FnJ!!)os!!!,r!!!!(huE`W&&8/F!"T&0!!!E-!!!!)z~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -1580 -4260]@85 imagemask
-!!!!0rVuou!!!$!
-s53kW!!!9(s82is!!", at s8N'!!!%NKs8RTL!!*'!s8V!W!!3-"s8VQg!!iQ(s8Vio!"],0s8W&u!$D7@
-rW3$!!$D7 at n,P\'!'gM`^]5I,!.Y%KJ,fhi!<<*!!!!,Z!<<)u!!!&h!WW2t!!!#W!WW2p!!!!a"98Dr
-z"98Djz#QOh^z#QOh^z#QOh>z&-)[Fz&-)[Fz&-)Z[z&-)Z[z&-)Z[
-z+92?@z+92?@z+92?@z+92?@z+92?@z+92?@z+92<?z+92<?
-z+92<?z+92<?z+92<?z+92<?z+92<?z&-)V/z&-)V/z&-)V/
-z&-)V/z#QOc'!!D]j#QOc'!"]&/#QOc'!$D4@"98?#!'gL6"98B$!'gL6"98B$!.Y$a!WW0"!.Y$a!WW0"!.Y$a!<<'!!.Y$a!.Y$!
-!.Y$a!.Y$!!.Y$a!'gL6!.Y$a!$D6V!.Y$a!"]+F!.Y$!!"]+f!.Y$!!!iP^!.Y"K!!3,h!.Y"K!!*&o
-!<<#u!!%NJ!WW&t!!", at L]@,L!!!Q0s8V!W!!!-$s8Tk7!!!$!s8N'!!!!!0s7cQozIfKHK~>
-Q
-q[1 0 0 1 0 0]concat
-40 120 true[1 0 0 1 -1643 -4239]@85 imagemask
-$ig8-!"Ju/!!!O[
-!!!!0huE`W"7Q9j!!2ut!!!#uz56(Z`!$?^k!!!Pf!!!!(n,NFg"8Dir!!2ut!!!#szrVuou
-!.OtK!!%M!!!!!`^]4?75MuMA!$C,!!!",1!!!!0p](9o&,6,)!"\u-!!!9'!!!!(rVuou#QFc(!!iN(
-!!!9(J,fQOs*t(L"96.:!!E8:!!!-$huE`Zs53kW"979Z!!3,h!!!'"n,NFhs6p!g!WVop!!3,p!!!'"p](9ps82is
-!WW&t!!3,t!!!$!qu?]ss8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&u!!!$!rr<$!s8N'!!<<'!
-!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!
-!!!$!rr<$!s8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&s!!!$!qu?]ts82is!WW&t!!3,p!!!'"p](9ps7cQo
-!WVWh!!3,h!!!'"n,NFhs53kW"979Z!!E8:!!!-$^]4?:s1eU7"93lO!!iOS!!!9(!!!!(rr<$!#Q=]'
-!"\u-!!!Q-!!!!0p](9o+7K71!$C\1!!",!!!!!`^]4?75JR7!!.TM!!!*$!!!!#u!!!!"qu?]s"8Dir
-!!D]j!!!8^!!!!0^]4?75C`_6!.FnJ!!)os!!!,r!!!!(huE`W&&8/F!"T&0!!!E-!!!!)z~>
-Q
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/frameset.eps b/ast-5.3-1/sun211_figures/frameset.eps
deleted file mode 100644
index 6d44d25..0000000
--- a/ast-5.3-1/sun211_figures/frameset.eps
+++ /dev/null
@@ -1,2990 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 107 108 516 547
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 17:14:16
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5153.75 4907.75 m
-5153.75 5184.95 4928.15 5410.55 4650.95 5410.55 c
-1635.35 5410.55 l
-1358.15 5410.55 1132.55 5184.95 1132.55 4907.75 c
-1132.55 1592.15 l
-1132.55 1314.95 1358.15 1089.35 1635.35 1089.35 c
-4650.95 1089.35 l
-4928.15 1089.35 5153.75 1314.95 5153.75 1592.15 c
-f*
-1 g
-5088.95 4964.15 m
-5088.95 5240.15 4864.55 5464.55 4588.55 5464.55 c
-1578.95 5464.55 l
-1302.95 5464.55 1078.55 5240.15 1078.55 4964.15 c
-1078.55 1654.55 l
-1078.55 1378.55 1302.95 1154.15 1578.95 1154.15 c
-4588.55 1154.15 l
-4864.55 1154.15 5088.95 1378.55 5088.95 1654.55 c
-f*
-8 w
-1 J
-1 j
-0 g
-5088.95 4964.15 m
-5088.95 5240.15 4864.55 5464.55 4588.55 5464.55 c
-1578.95 5464.55 l
-1302.95 5464.55 1078.55 5240.15 1078.55 4964.15 c
-1078.55 1654.55 l
-1078.55 1378.55 1302.95 1154.15 1578.95 1154.15 c
-4588.55 1154.15 l
-4864.55 1154.15 5088.95 1378.55 5088.95 1654.55 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1563.35 5256.95 l
-1451.75 5256.95 1360.55 5165.75 1360.55 5055.35 c
-1360.55 4917.35 l
-1360.55 4806.95 1451.75 4715.75 1563.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-f*
-0 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-h
-S
-0.201248 i
-1539.33 5152 m
-1425.22 5152 l
-1425.22 5147 l
-1439.11 5146.2 1443 5143.18 1443 5132.72 c
-1443 5035.32 l
-1443 5024.85 1440.17 5022.64 1425.22 5021.03 c
-1425.22 5016 l
-1497.67 5016 l
-1497.67 5021 l
-1479.15 5021.81 1476 5024.23 1476 5035.32 c
-1476 5082.21 l
-1496.22 5081.81 1503.55 5074.36 1506.32 5051.02 c
-1511.35 5051.02 l
-1511.35 5119.04 l
-1506.32 5119.04 l
-1502.76 5096.1 1495.82 5089.05 1476 5089.05 c
-1476 5135.74 l
-1476 5143.19 1478.52 5145 1488.41 5145 c
-1507.13 5145 1518.8 5141.64 1525.04 5134.74 c
-1529.47 5129.71 1531.68 5124.27 1534.5 5111.59 c
-1539.33 5111.59 l
-h
-1544.96 5016 m
-f*
-1589.19 5109 m
-1550.84 5109 l
-1550.84 5103.95 l
-1559.49 5102.74 1562 5100.12 1562 5092.07 c
-1562 5032.9 l
-1562 5024.65 1559.93 5022.44 1550.84 5020.83 c
-1550.84 5016 l
-1604.37 5016 l
-1604.37 5020.83 l
-1592.09 5021.63 1590 5024.25 1590 5036.73 c
-1590 5074.76 l
-1590 5085.23 1595.49 5093.88 1601.95 5093.88 c
-1603.56 5093.88 1605.37 5092.47 1607.59 5089.25 c
-1611.41 5083.82 1614.43 5082.01 1619.66 5082.01 c
-1627.11 5082.01 1632.34 5087.64 1632.34 5095.29 c
-1632.34 5104.55 1625.5 5111.41 1616.04 5111.41 c
-1606.1 5111.41 1598.54 5106.12 1589.19 5092.27 c
-h
-1634.35 5016 m
-f*
-1729.19 5028.88 m
-1727.18 5026.87 l
-1726.57 5026.26 1725.97 5026.06 1724.96 5026.06 c
-1722.15 5026.06 1721 5027.67 1721 5031.09 c
-1721 5083.62 l
-1721 5100.73 1705.6 5111.42 1680.89 5111.42 c
-1658.15 5111.42 1642.85 5101.06 1642.85 5085.83 c
-1642.85 5077.38 1647.69 5072.55 1655.94 5072.55 c
-1663.99 5072.55 1669.62 5077.38 1669.62 5084.22 c
-1669.62 5087.04 1668.61 5089.66 1666 5092.88 c
-1664.19 5094.89 1663.58 5096.1 1663.58 5097.3 c
-1663.58 5101.53 1669.02 5104.42 1676.26 5104.42 c
-1688.14 5104.42 1693.86 5099.08 1693.86 5087.04 c
-1693.86 5072.35 l
-1669.91 5065.1 1660.29 5061.48 1652.51 5056.45 c
-1643.46 5050.41 1639 5043.37 1639 5034.52 c
-1639 5022.24 1648.27 5013.18 1661.17 5013.18 c
-1672.84 5013.18 1682.1 5017.21 1693.17 5027.27 c
-1695.38 5017.01 1699.81 5013.18 1709.67 5013.18 c
-1718.32 5013.18 1724.56 5016.4 1732.21 5024.65 c
-h
-1693 5036.13 m
-1687.55 5029.89 1683.52 5027.47 1678.68 5027.47 c
-1672.64 5027.47 1668 5032.91 1668 5040.96 c
-1668 5052.63 1676.61 5060.88 1693 5065.31 c
-h
-1734.62 5016 m
-f*
-1776.4 5109 m
-1737.7 5109 l
-1737.7 5103.95 l
-1746.55 5102.74 1749 5100.32 1749 5092.07 c
-1749 5032.9 l
-1749 5024.65 1746.74 5022.44 1737.7 5020.83 c
-1737.7 5016 l
-1786 5016 l
-1786 5020.83 l
-1778.95 5021.84 1777 5024.65 1777 5032.3 c
-1777 5086.03 l
-1777 5087.04 1779.87 5090.66 1782.18 5092.88 c
-1786.4 5096.1 1790.02 5098.42 1793.65 5098.42 c
-1801.5 5098.42 1805 5093.59 1805 5081 c
-1805 5032.3 l
-1805 5024.05 1802.68 5021.43 1794.85 5020.83 c
-1794.85 5016 l
-1841.95 5016 l
-1841.95 5020.83 l
-1834.9 5021.64 1833 5024.65 1833 5032.3 c
-1833 5086.03 l
-1833 5087.04 1835.73 5090.46 1837.92 5092.68 c
-1842.35 5096.1 1845.97 5098.42 1849.59 5098.42 c
-1857.24 5098.42 1860 5093.38 1860 5081 c
-1860 5032.3 l
-1860 5023.85 1857.85 5021.43 1850.4 5020.83 c
-1850.4 5016 l
-1898.3 5016 l
-1898.3 5021 l
-1890.45 5021.4 1888 5023.78 1888 5032.3 c
-1888 5082.81 l
-1888 5100.12 1877.43 5111.42 1861.07 5111.42 c
-1849.59 5111.42 1841.95 5106.73 1831.48 5093.68 c
-1825.44 5106.36 1818.4 5111.42 1805.72 5111.42 c
-1792.95 5111.42 1783.98 5105.91 1776.4 5093.68 c
-h
-1901.64 5016 m
-f*
-1979.9 5041.16 m
-1971.65 5031.29 1965.61 5027.18 1956.96 5027.18 c
-1949.31 5027.18 1943.27 5030.77 1939.25 5037.94 c
-1935.43 5044.54 1933.82 5051.56 1933.01 5066 c
-1983.73 5066 l
-1982.52 5082.36 1979.5 5091.43 1973.26 5099.12 c
-1966.82 5106.96 1957.36 5111.42 1946.09 5111.42 c
-1920.94 5111.42 1904.03 5091.4 1904.03 5061.88 c
-1904.03 5032.5 1920.53 5013.18 1945.49 5013.18 c
-1961.79 5013.18 1971.65 5019.42 1984.73 5038.34 c
-h
-1932 5073 m
-1932.61 5096.96 1936.23 5104.42 1946.09 5104.42 c
-1951.93 5104.42 1955.55 5101.38 1957.16 5095.49 c
-1958.17 5091.67 1958.57 5086.03 1958.97 5075.77 c
-1958.97 5073 l
-h
-1988.35 5016 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -5016]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4722.95 4254.95 m
-4722.95 4366.55 4631.75 4457.75 4520.15 4457.75 c
-4023.35 4457.75 l
-3911.75 4457.75 3820.55 4366.55 3820.55 4254.95 c
-3820.55 4118.15 l
-3820.55 4006.55 3911.75 3915.35 4023.35 3915.35 c
-4520.15 3915.35 l
-4631.75 3915.35 4722.95 4006.55 4722.95 4118.15 c
-f*
-1 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-f*
-16 w
-0 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-h
-S
-0.201248 i
-3999.33 4353 m
-3885.22 4353 l
-3885.22 4348 l
-3899.11 4347.2 3903 4344.18 3903 4333.72 c
-3903 4236.32 l
-3903 4225.85 3900.17 4223.64 3885.22 4222.03 c
-3885.22 4217 l
-3957.67 4217 l
-3957.67 4222 l
-3939.15 4222.81 3936 4225.23 3936 4236.32 c
-3936 4283.21 l
-3956.22 4282.81 3963.55 4275.36 3966.32 4252.02 c
-3971.35 4252.02 l
-3971.35 4320.04 l
-3966.32 4320.04 l
-3962.76 4297.1 3955.82 4290.05 3936 4290.05 c
-3936 4336.74 l
-3936 4344.19 3938.52 4346 3948.41 4346 c
-3967.13 4346 3978.8 4342.64 3985.04 4335.74 c
-3989.47 4330.71 3991.68 4325.27 3994.5 4312.59 c
-3999.33 4312.59 l
-h
-4004.96 4217 m
-f*
-4049.19 4310 m
-4010.84 4310 l
-4010.84 4304.95 l
-4019.49 4303.74 4022 4301.12 4022 4293.07 c
-4022 4233.9 l
-4022 4225.65 4019.93 4223.44 4010.84 4221.83 c
-4010.84 4217 l
-4064.37 4217 l
-4064.37 4221.83 l
-4052.09 4222.63 4050 4225.25 4050 4237.73 c
-4050 4275.76 l
-4050 4286.23 4055.49 4294.88 4061.95 4294.88 c
-4063.56 4294.88 4065.37 4293.47 4067.59 4290.25 c
-4071.41 4284.82 4074.43 4283.01 4079.66 4283.01 c
-4087.11 4283.01 4092.34 4288.64 4092.34 4296.29 c
-4092.34 4305.55 4085.5 4312.41 4076.04 4312.41 c
-4066.1 4312.41 4058.54 4307.12 4049.19 4293.27 c
-h
-4094.35 4217 m
-f*
-4189.19 4229.88 m
-4187.18 4227.87 l
-4186.57 4227.26 4185.97 4227.06 4184.96 4227.06 c
-4182.15 4227.06 4181 4228.67 4181 4232.09 c
-4181 4284.62 l
-4181 4301.73 4165.6 4312.42 4140.89 4312.42 c
-4118.15 4312.42 4102.85 4302.06 4102.85 4286.83 c
-4102.85 4278.38 4107.69 4273.55 4115.94 4273.55 c
-4123.99 4273.55 4129.62 4278.38 4129.62 4285.22 c
-4129.62 4288.04 4128.61 4290.66 4126 4293.88 c
-4124.19 4295.89 4123.58 4297.1 4123.58 4298.3 c
-4123.58 4302.53 4129.02 4305.42 4136.26 4305.42 c
-4148.14 4305.42 4153.86 4300.08 4153.86 4288.04 c
-4153.86 4273.35 l
-4129.91 4266.1 4120.29 4262.48 4112.51 4257.45 c
-4103.46 4251.41 4099 4244.37 4099 4235.52 c
-4099 4223.24 4108.27 4214.18 4121.17 4214.18 c
-4132.84 4214.18 4142.1 4218.21 4153.17 4228.27 c
-4155.38 4218.01 4159.81 4214.18 4169.67 4214.18 c
-4178.32 4214.18 4184.56 4217.4 4192.21 4225.65 c
-h
-4153 4237.13 m
-4147.55 4230.89 4143.52 4228.47 4138.68 4228.47 c
-4132.64 4228.47 4128 4233.91 4128 4241.96 c
-4128 4253.63 4136.61 4261.88 4153 4266.31 c
-h
-4194.62 4217 m
-f*
-4236.4 4310 m
-4197.7 4310 l
-4197.7 4304.95 l
-4206.55 4303.74 4209 4301.32 4209 4293.07 c
-4209 4233.9 l
-4209 4225.65 4206.74 4223.44 4197.7 4221.83 c
-4197.7 4217 l
-4246 4217 l
-4246 4221.83 l
-4238.95 4222.84 4237 4225.65 4237 4233.3 c
-4237 4287.03 l
-4237 4288.04 4239.87 4291.66 4242.18 4293.88 c
-4246.4 4297.1 4250.02 4299.42 4253.65 4299.42 c
-4261.5 4299.42 4265 4294.59 4265 4282 c
-4265 4233.3 l
-4265 4225.05 4262.68 4222.43 4254.85 4221.83 c
-4254.85 4217 l
-4301.95 4217 l
-4301.95 4221.83 l
-4294.9 4222.64 4293 4225.65 4293 4233.3 c
-4293 4287.03 l
-4293 4288.04 4295.73 4291.46 4297.92 4293.68 c
-4302.35 4297.1 4305.97 4299.42 4309.59 4299.42 c
-4317.24 4299.42 4320 4294.38 4320 4282 c
-4320 4233.3 l
-4320 4224.85 4317.85 4222.43 4310.4 4221.83 c
-4310.4 4217 l
-4358.3 4217 l
-4358.3 4222 l
-4350.45 4222.4 4348 4224.78 4348 4233.3 c
-4348 4283.81 l
-4348 4301.12 4337.43 4312.42 4321.07 4312.42 c
-4309.59 4312.42 4301.95 4307.73 4291.48 4294.68 c
-4285.44 4307.36 4278.4 4312.42 4265.72 4312.42 c
-4252.95 4312.42 4243.98 4306.91 4236.4 4294.68 c
-h
-4361.64 4217 m
-f*
-4439.9 4242.16 m
-4431.65 4232.29 4425.61 4228.18 4416.96 4228.18 c
-4409.31 4228.18 4403.27 4231.77 4399.25 4238.94 c
-4395.43 4245.54 4393.82 4252.56 4393.01 4267 c
-4443.73 4267 l
-4442.52 4283.36 4439.5 4292.43 4433.26 4300.12 c
-4426.82 4307.96 4417.36 4312.42 4406.09 4312.42 c
-4380.94 4312.42 4364.03 4292.4 4364.03 4262.88 c
-4364.03 4233.5 4380.53 4214.18 4405.49 4214.18 c
-4421.79 4214.18 4431.65 4220.42 4444.73 4239.34 c
-h
-4392 4274 m
-4392.61 4297.96 4396.23 4305.42 4406.09 4305.42 c
-4411.93 4305.42 4415.55 4302.38 4417.16 4296.49 c
-4418.17 4292.67 4418.57 4287.03 4418.97 4276.77 c
-4418.97 4274 l
-h
-4448.35 4217 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4484 -4215]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-2447.75 1960.55 m
-2447.75 2070.95 2356.55 2162.15 2244.95 2162.15 c
-1749.35 2162.15 l
-1637.75 2162.15 1546.55 2070.95 1546.55 1960.55 c
-1546.55 1822.55 l
-1546.55 1712.15 1637.75 1620.95 1749.35 1620.95 c
-2244.95 1620.95 l
-2356.55 1620.95 2447.75 1712.15 2447.75 1822.55 c
-f*
-1 g
-2378.15 2016.95 m
-2378.15 2123.75 2289.35 2211.35 2180.15 2211.35 c
-1695.35 2211.35 l
-1586.15 2211.35 1497.35 2123.75 1497.35 2016.95 c
-1497.35 1884.95 l
-1497.35 1778.15 1586.15 1690.55 1695.35 1690.55 c
-2180.15 1690.55 l
-2289.35 1690.55 2378.15 1778.15 2378.15 1884.95 c
-f*
-0 g
-2378.15 2016.95 m
-2378.15 2123.75 2289.35 2211.35 2180.15 2211.35 c
-1695.35 2211.35 l
-1586.15 2211.35 1497.35 2123.75 1497.35 2016.95 c
-1497.35 1884.95 l
-1497.35 1778.15 1586.15 1690.55 1695.35 1690.55 c
-2180.15 1690.55 l
-2289.35 1690.55 2378.15 1778.15 2378.15 1884.95 c
-h
-S
-0.201248 i
-1725.33 2057 m
-1611.22 2057 l
-1611.22 2052 l
-1625.11 2051.2 1629 2048.18 1629 2037.72 c
-1629 1940.32 l
-1629 1929.85 1626.17 1927.64 1611.22 1926.03 c
-1611.22 1921 l
-1683.67 1921 l
-1683.67 1926 l
-1665.15 1926.81 1662 1929.23 1662 1940.32 c
-1662 1987.21 l
-1682.22 1986.81 1689.55 1979.36 1692.32 1956.02 c
-1697.35 1956.02 l
-1697.35 2024.04 l
-1692.32 2024.04 l
-1688.76 2001.1 1681.82 1994.05 1662 1994.05 c
-1662 2040.74 l
-1662 2048.19 1664.52 2050 1674.41 2050 c
-1693.13 2050 1704.8 2046.64 1711.04 2039.74 c
-1715.47 2034.71 1717.68 2029.27 1720.5 2016.59 c
-1725.33 2016.59 l
-h
-1730.96 1921 m
-f*
-1774.19 2014 m
-1735.84 2014 l
-1735.84 2008.95 l
-1744.49 2007.74 1747 2005.12 1747 1997.07 c
-1747 1937.9 l
-1747 1929.65 1744.93 1927.44 1735.84 1925.83 c
-1735.84 1921 l
-1789.37 1921 l
-1789.37 1925.83 l
-1777.09 1926.63 1775 1929.25 1775 1941.73 c
-1775 1979.76 l
-1775 1990.23 1780.49 1998.88 1786.95 1998.88 c
-1788.56 1998.88 1790.37 1997.47 1792.59 1994.25 c
-1796.41 1988.82 1799.43 1987.01 1804.66 1987.01 c
-1812.11 1987.01 1817.34 1992.64 1817.34 2000.29 c
-1817.34 2009.55 1810.5 2016.41 1801.04 2016.41 c
-1791.1 2016.41 1783.54 2011.12 1774.19 1997.27 c
-h
-1819.35 1921 m
-f*
-1914.19 1933.88 m
-1912.18 1931.87 l
-1911.57 1931.26 1910.97 1931.06 1909.96 1931.06 c
-1907.15 1931.06 1906 1932.67 1906 1936.09 c
-1906 1988.62 l
-1906 2005.73 1890.6 2016.42 1865.89 2016.42 c
-1843.15 2016.42 1827.85 2006.06 1827.85 1990.83 c
-1827.85 1982.38 1832.69 1977.55 1840.94 1977.55 c
-1848.99 1977.55 1854.62 1982.38 1854.62 1989.22 c
-1854.62 1992.04 1853.61 1994.66 1851 1997.88 c
-1849.19 1999.89 1848.58 2001.1 1848.58 2002.3 c
-1848.58 2006.53 1854.02 2009.42 1861.26 2009.42 c
-1873.14 2009.42 1878.86 2004.08 1878.86 1992.04 c
-1878.86 1977.35 l
-1854.91 1970.1 1845.29 1966.48 1837.51 1961.45 c
-1828.46 1955.41 1824 1948.37 1824 1939.52 c
-1824 1927.24 1833.27 1918.18 1846.17 1918.18 c
-1857.84 1918.18 1867.1 1922.21 1878.17 1932.27 c
-1880.38 1922.01 1884.81 1918.18 1894.67 1918.18 c
-1903.32 1918.18 1909.56 1921.4 1917.21 1929.65 c
-h
-1878 1941.13 m
-1872.55 1934.89 1868.52 1932.47 1863.68 1932.47 c
-1857.64 1932.47 1853 1937.91 1853 1945.96 c
-1853 1957.63 1861.61 1965.88 1878 1970.31 c
-h
-1919.62 1921 m
-f*
-1961.4 2014 m
-1922.7 2014 l
-1922.7 2008.95 l
-1931.55 2007.74 1934 2005.32 1934 1997.07 c
-1934 1937.9 l
-1934 1929.65 1931.74 1927.44 1922.7 1925.83 c
-1922.7 1921 l
-1971 1921 l
-1971 1925.83 l
-1963.95 1926.84 1962 1929.65 1962 1937.3 c
-1962 1991.03 l
-1962 1992.04 1964.87 1995.66 1967.18 1997.88 c
-1971.4 2001.1 1975.02 2003.42 1978.65 2003.42 c
-1986.5 2003.42 1990 1998.59 1990 1986 c
-1990 1937.3 l
-1990 1929.05 1987.68 1926.43 1979.85 1925.83 c
-1979.85 1921 l
-2026.95 1921 l
-2026.95 1925.83 l
-2019.9 1926.64 2018 1929.65 2018 1937.3 c
-2018 1991.03 l
-2018 1992.04 2020.73 1995.46 2022.92 1997.68 c
-2027.35 2001.1 2030.97 2003.42 2034.59 2003.42 c
-2042.24 2003.42 2045 1998.38 2045 1986 c
-2045 1937.3 l
-2045 1928.85 2042.85 1926.43 2035.4 1925.83 c
-2035.4 1921 l
-2083.3 1921 l
-2083.3 1926 l
-2075.45 1926.4 2073 1928.78 2073 1937.3 c
-2073 1987.81 l
-2073 2005.12 2062.43 2016.42 2046.07 2016.42 c
-2034.59 2016.42 2026.95 2011.73 2016.48 1998.68 c
-2010.44 2011.36 2003.4 2016.42 1990.72 2016.42 c
-1977.95 2016.42 1968.98 2010.91 1961.4 1998.68 c
-h
-2086.64 1921 m
-f*
-2165.9 1946.16 m
-2157.65 1936.29 2151.61 1932.18 2142.96 1932.18 c
-2135.31 1932.18 2129.27 1935.77 2125.25 1942.94 c
-2121.43 1949.54 2119.82 1956.56 2119.01 1971 c
-2169.73 1971 l
-2168.52 1987.36 2165.5 1996.43 2159.26 2004.12 c
-2152.82 2011.96 2143.36 2016.42 2132.09 2016.42 c
-2106.94 2016.42 2090.03 1996.4 2090.03 1966.88 c
-2090.03 1937.5 2106.53 1918.18 2131.49 1918.18 c
-2147.79 1918.18 2157.65 1924.42 2170.73 1943.34 c
-h
-2118 1978 m
-2118.61 2001.96 2122.23 2009.42 2132.09 2009.42 c
-2137.93 2009.42 2141.55 2006.38 2143.16 2000.49 c
-2144.17 1996.67 2144.57 1991.03 2144.97 1980.77 c
-2144.97 1978 l
-h
-2174.35 1921 m
-f*
-q[1 0 0 1 0 0]concat
-66 97 true[1 0 0 1 -2209 -1921]@85 imagemask
-z"98D:z
-!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z
-"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$
-s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!
-s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!
-s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7++O=k"98D:!"XS[!!E9$
-^]4n\!!!-$s1eU>huE`Zs8Tk7"7Q9j"98D:!!D]j!!E9$^]4E1!!!-$s1eU7qu?^!s8Tk7!;lfs"98D:!!%HJ!!E9$
-^]4@!!!!-$s1eU75C`_9s8Tk7!$?^k"98D:!!!PF!!E9$^]4?FhuElZs1eU7#Oh]qs8Tk7!!D]j"98D:
-!!!,r!!E9$^]4?8qu?j!s1eU7!;lg!s8Tk7!!%HJ"98D:!!!"K!!E9$^]4?75C`k9s1eU7!$?^ns8Tk7
-!!"+V"98D:!!!!0huj#Z^]4?7#N,^as1eU7!!D]ms8Tk7!!!,r"98D:!!!!"qud!!^]4?7!;ls!s1eU7!!%HMs8Tk7
-!!!"K"98D:z56Lrc^]4?7!$?jns1eU7!!!PIs8Tk7!!!!0j8].pz#NPja^]4?7!!Dims1eU7
-!!!&ss8Tk7!!!!"qu?]3z!<<*!^]4?7!!%NKs1eU7!!!!`s8Tk7z5QCc!z!$D7@^]4?7
-!!!Q0s1eU7!!!!(s8Tk7z#QOh>z!!E9$^]4?7!!!'"s1eU7zs8Tk7z!<<)7z!!%NK^]4?7
-!!!!`s1eU7z+90+Vz!$D6Vz!!!Q0^]4?7!!!!(s1eU7z"96.:z!!E8:!!~>
-Q
-1 i
-0.564706 g
-3804.95 3548.15 m
-3804.95 3658.55 3713.75 3749.75 3602.15 3749.75 c
-3106.55 3749.75 l
-2994.95 3749.75 2903.75 3658.55 2903.75 3548.15 c
-2903.75 3410.15 l
-2903.75 3299.75 2994.95 3208.55 3106.55 3208.55 c
-3602.15 3208.55 l
-3713.75 3208.55 3804.95 3299.75 3804.95 3410.15 c
-f*
-1 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-f*
-8 w
-0 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-h
-S
-0.201248 i
-3082.33 3645 m
-2968.22 3645 l
-2968.22 3640 l
-2982.11 3639.2 2986 3636.18 2986 3625.72 c
-2986 3528.32 l
-2986 3517.85 2983.17 3515.64 2968.22 3514.03 c
-2968.22 3509 l
-3040.67 3509 l
-3040.67 3514 l
-3022.15 3514.81 3019 3517.23 3019 3528.32 c
-3019 3575.21 l
-3039.22 3574.81 3046.55 3567.36 3049.32 3544.02 c
-3054.35 3544.02 l
-3054.35 3612.04 l
-3049.32 3612.04 l
-3045.76 3589.1 3038.82 3582.05 3019 3582.05 c
-3019 3628.74 l
-3019 3636.19 3021.52 3638 3031.41 3638 c
-3050.13 3638 3061.8 3634.64 3068.04 3627.74 c
-3072.47 3622.71 3074.68 3617.27 3077.5 3604.59 c
-3082.33 3604.59 l
-h
-3087.96 3509 m
-f*
-3131.19 3602 m
-3092.84 3602 l
-3092.84 3596.95 l
-3101.49 3595.74 3104 3593.12 3104 3585.07 c
-3104 3525.9 l
-3104 3517.65 3101.93 3515.44 3092.84 3513.83 c
-3092.84 3509 l
-3146.37 3509 l
-3146.37 3513.83 l
-3134.09 3514.63 3132 3517.25 3132 3529.73 c
-3132 3567.76 l
-3132 3578.23 3137.49 3586.88 3143.95 3586.88 c
-3145.56 3586.88 3147.37 3585.47 3149.59 3582.25 c
-3153.41 3576.82 3156.43 3575.01 3161.66 3575.01 c
-3169.11 3575.01 3174.34 3580.64 3174.34 3588.29 c
-3174.34 3597.55 3167.5 3604.41 3158.04 3604.41 c
-3148.1 3604.41 3140.54 3599.12 3131.19 3585.27 c
-h
-3176.35 3509 m
-f*
-3271.19 3521.88 m
-3269.18 3519.87 l
-3268.57 3519.26 3267.97 3519.06 3266.96 3519.06 c
-3264.15 3519.06 3263 3520.67 3263 3524.09 c
-3263 3576.62 l
-3263 3593.73 3247.6 3604.42 3222.89 3604.42 c
-3200.15 3604.42 3184.85 3594.06 3184.85 3578.83 c
-3184.85 3570.38 3189.69 3565.55 3197.94 3565.55 c
-3205.99 3565.55 3211.62 3570.38 3211.62 3577.22 c
-3211.62 3580.04 3210.61 3582.66 3208 3585.88 c
-3206.19 3587.89 3205.58 3589.1 3205.58 3590.3 c
-3205.58 3594.53 3211.02 3597.42 3218.26 3597.42 c
-3230.14 3597.42 3235.86 3592.08 3235.86 3580.04 c
-3235.86 3565.35 l
-3211.91 3558.1 3202.29 3554.48 3194.51 3549.45 c
-3185.46 3543.41 3181 3536.37 3181 3527.52 c
-3181 3515.24 3190.27 3506.18 3203.17 3506.18 c
-3214.84 3506.18 3224.1 3510.21 3235.17 3520.27 c
-3237.38 3510.01 3241.81 3506.18 3251.67 3506.18 c
-3260.32 3506.18 3266.56 3509.4 3274.21 3517.65 c
-h
-3235 3529.13 m
-3229.55 3522.89 3225.52 3520.47 3220.68 3520.47 c
-3214.64 3520.47 3210 3525.91 3210 3533.96 c
-3210 3545.63 3218.61 3553.88 3235 3558.31 c
-h
-3276.62 3509 m
-f*
-3318.4 3602 m
-3279.7 3602 l
-3279.7 3596.95 l
-3288.55 3595.74 3291 3593.32 3291 3585.07 c
-3291 3525.9 l
-3291 3517.65 3288.74 3515.44 3279.7 3513.83 c
-3279.7 3509 l
-3328 3509 l
-3328 3513.83 l
-3320.95 3514.84 3319 3517.65 3319 3525.3 c
-3319 3579.03 l
-3319 3580.04 3321.87 3583.66 3324.18 3585.88 c
-3328.4 3589.1 3332.02 3591.42 3335.65 3591.42 c
-3343.5 3591.42 3347 3586.59 3347 3574 c
-3347 3525.3 l
-3347 3517.05 3344.68 3514.43 3336.85 3513.83 c
-3336.85 3509 l
-3383.95 3509 l
-3383.95 3513.83 l
-3376.9 3514.64 3375 3517.65 3375 3525.3 c
-3375 3579.03 l
-3375 3580.04 3377.73 3583.46 3379.92 3585.68 c
-3384.35 3589.1 3387.97 3591.42 3391.59 3591.42 c
-3399.24 3591.42 3402 3586.38 3402 3574 c
-3402 3525.3 l
-3402 3516.85 3399.85 3514.43 3392.4 3513.83 c
-3392.4 3509 l
-3440.3 3509 l
-3440.3 3514 l
-3432.45 3514.4 3430 3516.78 3430 3525.3 c
-3430 3575.81 l
-3430 3593.12 3419.43 3604.42 3403.07 3604.42 c
-3391.59 3604.42 3383.95 3599.73 3373.48 3586.68 c
-3367.44 3599.36 3360.4 3604.42 3347.72 3604.42 c
-3334.95 3604.42 3325.98 3598.91 3318.4 3586.68 c
-h
-3443.64 3509 m
-f*
-3523.9 3534.16 m
-3515.65 3524.29 3509.61 3520.18 3500.96 3520.18 c
-3493.31 3520.18 3487.27 3523.77 3483.25 3530.94 c
-3479.43 3537.54 3477.82 3544.56 3477.01 3559 c
-3527.73 3559 l
-3526.52 3575.36 3523.5 3584.43 3517.26 3592.12 c
-3510.82 3599.96 3501.36 3604.42 3490.09 3604.42 c
-3464.94 3604.42 3448.03 3584.4 3448.03 3554.88 c
-3448.03 3525.5 3464.53 3506.18 3489.49 3506.18 c
-3505.79 3506.18 3515.65 3512.42 3528.73 3531.34 c
-h
-3476 3566 m
-3476.61 3589.96 3480.23 3597.42 3490.09 3597.42 c
-3495.93 3597.42 3499.55 3594.38 3501.16 3588.49 c
-3502.17 3584.67 3502.57 3579.03 3502.97 3568.77 c
-3502.97 3566 l
-h
-3532.35 3509 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -3509]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-0.564706 g
-3962.15 2110.55 m
-3962.15 2220.95 3870.95 2312.15 3759.35 2312.15 c
-3263.75 2312.15 l
-3152.15 2312.15 3060.95 2220.95 3060.95 2110.55 c
-3060.95 1972.55 l
-3060.95 1862.15 3152.15 1770.95 3263.75 1770.95 c
-3759.35 1770.95 l
-3870.95 1770.95 3962.15 1862.15 3962.15 1972.55 c
-f*
-1 g
-3897.35 2168.15 m
-3897.35 2277.35 3808.55 2366.15 3698.15 2366.15 c
-3207.35 2366.15 l
-3095.75 2366.15 3006.95 2277.35 3006.95 2168.15 c
-3006.95 2033.75 l
-3006.95 1924.55 3095.75 1835.75 3207.35 1835.75 c
-3696.95 1835.75 l
-3808.55 1835.75 3897.35 1924.55 3897.35 2033.75 c
-f*
-0 g
-3897.35 2168.15 m
-3897.35 2277.35 3808.55 2366.15 3698.15 2366.15 c
-3207.35 2366.15 l
-3095.75 2366.15 3006.95 2277.35 3006.95 2168.15 c
-3006.95 2033.75 l
-3006.95 1924.55 3095.75 1835.75 3207.35 1835.75 c
-3696.95 1835.75 l
-3808.55 1835.75 3897.35 1924.55 3897.35 2033.75 c
-h
-S
-0.201248 i
-3239.33 2207 m
-3125.22 2207 l
-3125.22 2202 l
-3139.11 2201.2 3143 2198.18 3143 2187.72 c
-3143 2090.32 l
-3143 2079.85 3140.17 2077.64 3125.22 2076.03 c
-3125.22 2071 l
-3197.67 2071 l
-3197.67 2076 l
-3179.15 2076.81 3176 2079.23 3176 2090.32 c
-3176 2137.21 l
-3196.22 2136.81 3203.55 2129.36 3206.32 2106.02 c
-3211.35 2106.02 l
-3211.35 2174.04 l
-3206.32 2174.04 l
-3202.76 2151.1 3195.82 2144.05 3176 2144.05 c
-3176 2190.74 l
-3176 2198.19 3178.52 2200 3188.41 2200 c
-3207.13 2200 3218.8 2196.64 3225.04 2189.74 c
-3229.47 2184.71 3231.68 2179.27 3234.5 2166.59 c
-3239.33 2166.59 l
-h
-3244.96 2071 m
-f*
-3289.19 2164 m
-3250.84 2164 l
-3250.84 2158.95 l
-3259.49 2157.74 3262 2155.12 3262 2147.07 c
-3262 2087.9 l
-3262 2079.65 3259.93 2077.44 3250.84 2075.83 c
-3250.84 2071 l
-3304.37 2071 l
-3304.37 2075.83 l
-3292.09 2076.63 3290 2079.25 3290 2091.73 c
-3290 2129.76 l
-3290 2140.23 3295.49 2148.88 3301.95 2148.88 c
-3303.56 2148.88 3305.37 2147.47 3307.59 2144.25 c
-3311.41 2138.82 3314.43 2137.01 3319.66 2137.01 c
-3327.11 2137.01 3332.34 2142.64 3332.34 2150.29 c
-3332.34 2159.55 3325.5 2166.41 3316.04 2166.41 c
-3306.1 2166.41 3298.54 2161.12 3289.19 2147.27 c
-h
-3334.35 2071 m
-f*
-3428.19 2083.88 m
-3426.18 2081.87 l
-3425.57 2081.26 3424.97 2081.06 3423.96 2081.06 c
-3421.15 2081.06 3420 2082.67 3420 2086.09 c
-3420 2138.62 l
-3420 2155.73 3404.6 2166.42 3379.89 2166.42 c
-3357.15 2166.42 3341.85 2156.06 3341.85 2140.83 c
-3341.85 2132.38 3346.69 2127.55 3354.94 2127.55 c
-3362.99 2127.55 3368.62 2132.38 3368.62 2139.22 c
-3368.62 2142.04 3367.61 2144.66 3365 2147.88 c
-3363.19 2149.89 3362.58 2151.1 3362.58 2152.3 c
-3362.58 2156.53 3368.02 2159.42 3375.26 2159.42 c
-3387.14 2159.42 3392.86 2154.08 3392.86 2142.04 c
-3392.86 2127.35 l
-3368.91 2120.1 3359.29 2116.48 3351.51 2111.45 c
-3342.46 2105.41 3338 2098.37 3338 2089.52 c
-3338 2077.24 3347.27 2068.18 3360.17 2068.18 c
-3371.84 2068.18 3381.1 2072.21 3392.17 2082.27 c
-3394.38 2072.01 3398.81 2068.18 3408.67 2068.18 c
-3417.32 2068.18 3423.56 2071.4 3431.21 2079.65 c
-h
-3392 2091.13 m
-3386.55 2084.89 3382.52 2082.47 3377.68 2082.47 c
-3371.64 2082.47 3367 2087.91 3367 2095.96 c
-3367 2107.63 3375.61 2115.88 3392 2120.31 c
-h
-3433.62 2071 m
-f*
-3476.4 2164 m
-3437.7 2164 l
-3437.7 2158.95 l
-3446.55 2157.74 3449 2155.32 3449 2147.07 c
-3449 2087.9 l
-3449 2079.65 3446.74 2077.44 3437.7 2075.83 c
-3437.7 2071 l
-3486 2071 l
-3486 2075.83 l
-3478.95 2076.84 3477 2079.65 3477 2087.3 c
-3477 2141.03 l
-3477 2142.04 3479.87 2145.66 3482.18 2147.88 c
-3486.4 2151.1 3490.02 2153.42 3493.65 2153.42 c
-3501.5 2153.42 3505 2148.59 3505 2136 c
-3505 2087.3 l
-3505 2079.05 3502.68 2076.43 3494.85 2075.83 c
-3494.85 2071 l
-3541.95 2071 l
-3541.95 2075.83 l
-3534.9 2076.64 3533 2079.65 3533 2087.3 c
-3533 2141.03 l
-3533 2142.04 3535.73 2145.46 3537.92 2147.68 c
-3542.35 2151.1 3545.97 2153.42 3549.59 2153.42 c
-3557.24 2153.42 3560 2148.38 3560 2136 c
-3560 2087.3 l
-3560 2078.85 3557.85 2076.43 3550.4 2075.83 c
-3550.4 2071 l
-3598.3 2071 l
-3598.3 2076 l
-3590.45 2076.4 3588 2078.78 3588 2087.3 c
-3588 2137.81 l
-3588 2155.12 3577.43 2166.42 3561.07 2166.42 c
-3549.59 2166.42 3541.95 2161.73 3531.48 2148.68 c
-3525.44 2161.36 3518.4 2166.42 3505.72 2166.42 c
-3492.95 2166.42 3483.98 2160.91 3476.4 2148.68 c
-h
-3601.64 2071 m
-f*
-3680.9 2096.16 m
-3672.65 2086.29 3666.61 2082.18 3657.96 2082.18 c
-3650.31 2082.18 3644.27 2085.77 3640.25 2092.94 c
-3636.43 2099.54 3634.82 2106.56 3634.01 2121 c
-3684.73 2121 l
-3683.52 2137.36 3680.5 2146.43 3674.26 2154.12 c
-3667.82 2161.96 3658.36 2166.42 3647.09 2166.42 c
-3621.94 2166.42 3605.03 2146.4 3605.03 2116.88 c
-3605.03 2087.5 3621.53 2068.18 3646.49 2068.18 c
-3662.79 2068.18 3672.65 2074.42 3685.73 2093.34 c
-h
-3633 2128 m
-3633.61 2151.96 3637.23 2159.42 3647.09 2159.42 c
-3652.93 2159.42 3656.55 2156.38 3658.16 2150.49 c
-3659.17 2146.67 3659.57 2141.03 3659.97 2130.77 c
-3659.97 2128 l
-h
-3689.35 2071 m
-f*
-q[1 0 0 1 0 0]concat
-66 96 true[1 0 0 1 -3723 -2070]@85 imagemask
-!!*'!z!!!9(
-s7cQo!!!!`s8W*!zs8W-!^]4?7!WW3"s7cQo!!E9$s8W&u!!!9(s8W-!!!!!0s8W-!s1eU7&-)\0
-s8V!W!$D7 at s56-2!!", at s8N'(p](:9s8Vus!W2ot+92B1!!)uu!$D7 at huEb,!!", at s*t(L5C`_Es8N'!
-!'e7!&-)P-!!"+V!!iQ!!!!!@huElZhuE`W+5d,"s*t(L!"\Q!!&srY!!!Q!z!!!!0p](9oz&,6,)z
-!"\i)z!!!Q-z!!!!0qu?]sz&,ZD-z!$D+=z!!",?z!!!!@rVuouz
-5Q1W_z!'gG_z!!%NJz!!!$!rVuou!!!!"s8Duuz"98?#z!!iQ'z!!!Q0
-rVuou!!!!@s8DuuzJ,fEHz!<<)sz!!E9$qu?]s!!", at s82is!!!$!s8Vio!!!!(s8W,ozJ,fQK
-p](9o5QCc`s6p!hs8W-!s8VQg!WW3"s8W,W!!*'!s8W-!huEcWs8W-!s1eU7s8W-!s8RTL!.Y%Ks8W+L
-!!%NKs8W-!!!!"Ks8W-!rVuouJ,fQKs82is!'gM`s8Vio!!#7`s8W,g!!!!`s8W-!^]4?7+92B at s*t(L
-!$D7 at s8Duu!!", at s8Vio!!!!@s8W,Wz&-)\0z!"],0n,NFg!!!Q0qu?]s!!!!0^]4?7z#J^<>z
-!!g:>z!!!8^z!!!!$huE`Wz"5j.Zz!!D-Zz!!!,jz!!!!"n,NFgz
-!Up'hz!!2Qhz!!!#ozzs8W-!s6p!g!<<*!s8VQg!!*'!s8W,o!!!"Ks8W-!p](9o
-J,fQKs7cQo!.Y%Ks8Vus!!#7`s8W,s!!!!`s8W-!qu?]s5QCc`s8Duu!'gM`s8W&u!!", at s8W,u!!!!@
-s8W-!rr<$!+92B at s8N'!!$D7 at s8W*!!!!Q0s8W-!J,fQ[s8W-!s*t(L&-)\0s8RTL!!iQ(s8W,7~>
-Q
-1 i
-1751.75 4750.55 m
-1751.75 4758.95 1751.75 4758.95 1751.75 4750.55 c
-1751.75 4602.95 1791.35 4461.35 1863.35 4360.55 c
-S
-1804.55 4366.55 m
-1853.75 4382.15 l
-1878.95 4427.75 l
-1940.15 4280.15 l
-f*
-2244.95 3784.55 m
-2334.95 3666.95 2519.75 3582.95 2740.55 3561.35 c
-S
-2699.75 3518.15 m
-2721.35 3564.95 l
-2705.75 3612.95 l
-2854.55 3556.55 l
-f*
-2855.75 3413.75 m
-2625.35 3369.35 2448.95 3267.35 2384.15 3140.15 c
-S
-2360.15 3190.55 m
-2399.75 3158.15 l
-2450.15 3160.55 l
-2357.75 3030.95 l
-f*
-2178.95 2306.15 m
-2232.95 2368.55 2274.95 2441.75 2302.55 2520.95 c
-S
-2168.15 2369.75 m
-2189.75 2322.95 l
-2237.75 2303.75 l
-2097.35 2226.95 l
-f*
-2831.75 5164.55 m
-2729.75 5264.15 2584.55 5321.75 2430.95 5321.75 c
-2326.55 5321.75 2224.55 5295.35 2136.95 5244.95 c
-S
-2766.95 5158.55 m
-2814.95 5174.15 l
-2838.95 5219.75 l
-2902.55 5073.35 l
-f*
-3186.95 4588.55 m
-3275.75 4414.55 3440.15 4289.75 3635.75 4250.15 c
-S
-3591.35 4210.55 m
-3616.55 4256.15 l
-3604.55 4306.55 l
-3748.55 4235.75 l
-f*
-3302.15 3256.55 m
-3302.15 3262.55 3302.15 3262.55 3302.15 3255.35 c
-3302.15 3064.55 3456.95 2896.55 3682.55 2846.15 c
-S
-3638.15 2810.15 m
-3664.55 2853.35 l
-3654.95 2902.55 l
-3797.75 2830.55 l
-f*
-4030.55 2122.55 m
-4202.15 2176.55 4323.35 2344.55 4332.95 2540.15 c
-S
-4058.15 2181.35 m
-4048.55 2130.95 l
-4076.15 2088.95 l
-3917.75 2105.75 l
-f*
-0.564706 g
-3638.15 4764.95 m
-3503.75 4800.95 l
-3599.75 4857.35 l
-3446.15 4865.75 l
-3488.15 4936.55 l
-3340.55 4916.15 l
-3323.75 4986.95 l
-3203.75 4942.55 l
-3128.15 5006.15 l
-3052.55 4942.55 l
-2932.55 4986.95 l
-2914.55 4916.15 l
-2765.75 4936.55 l
-2810.15 4865.75 l
-2656.55 4857.35 l
-2752.55 4800.95 l
-2616.95 4764.95 l
-2752.55 4730.15 l
-2656.55 4673.75 l
-2810.15 4664.15 l
-2765.75 4594.55 l
-2914.55 4614.95 l
-2932.55 4542.95 l
-3052.55 4588.55 l
-3128.15 4524.95 l
-3203.75 4588.55 l
-3323.75 4542.95 l
-3340.55 4614.95 l
-3488.15 4594.55 l
-3446.15 4664.15 l
-3599.75 4673.75 l
-3503.75 4730.15 l
-f*
-1 g
-3578.15 4824.95 m
-3443.75 4860.95 l
-3539.75 4917.35 l
-3386.15 4925.75 l
-3428.15 4996.55 l
-3280.55 4976.15 l
-3263.75 5046.95 l
-3143.75 5002.55 l
-3068.15 5066.15 l
-2992.55 5002.55 l
-2872.55 5046.95 l
-2854.55 4976.15 l
-2705.75 4996.55 l
-2750.15 4925.75 l
-2596.55 4917.35 l
-2692.55 4860.95 l
-2556.95 4824.95 l
-2692.55 4790.15 l
-2596.55 4733.75 l
-2750.15 4724.15 l
-2705.75 4654.55 l
-2854.55 4674.95 l
-2872.55 4602.95 l
-2992.55 4648.55 l
-3068.15 4584.95 l
-3143.75 4648.55 l
-3263.75 4602.95 l
-3280.55 4674.95 l
-3428.15 4654.55 l
-3386.15 4724.15 l
-3539.75 4733.75 l
-3443.75 4790.15 l
-f*
-0 g
-3578.15 4824.95 m
-3443.75 4860.95 l
-3539.75 4917.35 l
-3386.15 4925.75 l
-3428.15 4996.55 l
-3280.55 4976.15 l
-3263.75 5046.95 l
-3143.75 5002.55 l
-3068.15 5066.15 l
-2992.55 5002.55 l
-2872.55 5046.95 l
-2854.55 4976.15 l
-2705.75 4996.55 l
-2750.15 4925.75 l
-2596.55 4917.35 l
-2692.55 4860.95 l
-2556.95 4824.95 l
-2692.55 4790.15 l
-2596.55 4733.75 l
-2750.15 4724.15 l
-2705.75 4654.55 l
-2854.55 4674.95 l
-2872.55 4602.95 l
-2992.55 4648.55 l
-3068.15 4584.95 l
-3143.75 4648.55 l
-3263.75 4602.95 l
-3280.55 4674.95 l
-3428.15 4654.55 l
-3386.15 4724.15 l
-3539.75 4733.75 l
-3443.75 4790.15 l
-3578.15 4824.95 l
-3539.75 4824.95 l
-3417.35 4793.75 l
-3506.15 4740.95 l
-3368.15 4733.75 l
-3408.95 4667.75 l
-3273.35 4685.75 l
-3256.55 4617.35 l
-3141.35 4659.35 l
-3068.15 4596.95 l
-2994.95 4659.35 l
-2879.75 4617.35 l
-2861.75 4685.75 l
-2726.15 4667.75 l
-2766.95 4733.75 l
-2630.15 4740.95 l
-2718.95 4793.75 l
-2596.55 4824.95 l
-2717.75 4857.35 l
-2630.15 4910.15 l
-2766.95 4917.35 l
-2726.15 4983.35 l
-2861.75 4964.15 l
-2879.75 5033.75 l
-2994.95 4990.55 l
-3068.15 5052.95 l
-3141.35 4990.55 l
-3256.55 5033.75 l
-3273.35 4964.15 l
-3408.95 4983.35 l
-3368.15 4917.35 l
-3506.15 4910.15 l
-3417.35 4857.35 l
-3539.75 4824.95 l
-3578.15 4824.95 l
-f*
-0.2 i
-2890.08 4876.76 m
-2870.08 4802.52 l
-2867.52 4793.88 2864.48 4791.64 2854.08 4791 c
-2854.08 4787 l
-2904 4787 l
-2904 4791 l
-2894.72 4791.48 2892.48 4792.76 2892.48 4797.88 c
-2892.48 4799.64 2892.8 4801.4 2893.76 4805.08 c
-2893.92 4805.88 l
-2894.08 4806.68 l
-2913.76 4878.52 l
-2916.16 4886.84 2918.56 4889.08 2926.72 4890.04 c
-2926.72 4894 l
-2892.8 4894 l
-2843.2 4817.24 l
-2834.56 4894 l
-2799.2 4894 l
-2799.2 4890 l
-2809.28 4889.52 2810.72 4888.89 2810.72 4884.44 c
-2810.72 4882.2 2810.08 4879.32 2808.96 4875.16 c
-2791.52 4815.48 l
-2785.12 4794.68 2784 4792.92 2775.36 4791 c
-2775.36 4787 l
-2808.48 4787 l
-2808.48 4791 l
-2798.24 4792.28 2795.68 4794.2 2795.68 4800.76 c
-2795.68 4803.48 2796.48 4807.48 2798.72 4815.48 c
-2814.88 4874.52 l
-2825.6 4785.08 l
-2830.08 4785.08 l
-h
-2922.24 4787 m
-f*
-2991.44 4807.32 m
-2984.88 4798.52 2982.48 4795.76 2979.92 4795.76 c
-2978.64 4795.76 2978 4796.86 2978 4798.52 c
-2978 4802.52 2979.44 4809.08 2983.44 4822.2 c
-2994.8 4859.96 l
-2977.04 4858.84 l
-2974.16 4849.4 l
-2972.72 4857.56 2969.2 4861.08 2962.32 4861.08 c
-2942.64 4861.08 2919 4830.27 2919 4805.24 c
-2919 4793.08 2925.74 4784.92 2935.92 4784.92 c
-2945.68 4784.92 2953.04 4790.68 2962.16 4806.04 c
-2960.24 4799.48 2960 4797.56 2960 4795.32 c
-2960 4789.4 2964.76 4784.76 2970.64 4784.76 c
-2978.16 4784.76 2985.52 4791 2994.8 4804.92 c
-h
-2964.56 4854.2 m
-2968.08 4853.88 2970.56 4851 2970.56 4846.68 c
-2970.56 4837.08 2965.24 4819.32 2958.96 4808.28 c
-2954.64 4800.44 2949.84 4795.92 2945.52 4795.92 c
-2941.36 4795.92 2938 4799.75 2938 4804.92 c
-2938 4813.24 2943.42 4829.24 2950.16 4841.08 c
-2954.96 4849.56 2960.24 4854.52 2964.56 4854.2 c
-h
-3002 4787 m
-f*
-3036.56 4860.92 m
-3020.24 4858.36 3014 4857.4 3005.68 4856.44 c
-3005.68 4852 l
-3012.88 4851.69 3014.32 4851.07 3014.32 4848.12 c
-3014.32 4846.52 3013.04 4840.76 3010.8 4832.44 c
-2994.8 4770.36 l
-2991.76 4759.8 2990.48 4758.84 2982.8 4759 c
-2982.8 4754 l
-3022.64 4754 l
-3022.64 4759 l
-3014.64 4759.14 3012.24 4760.16 3012.24 4763.64 c
-3012.24 4765.88 3013.36 4770.68 3016.4 4781.88 c
-3017.52 4785.72 3017.52 4786.04 3018.16 4788.44 c
-3023.76 4785.56 3025.68 4784.92 3029.04 4784.92 c
-3050.8 4784.92 3073.36 4813.88 3073.36 4841.56 c
-3073.36 4853.4 3066.64 4861.08 3056.08 4861.08 c
-3046.96 4861.08 3039.92 4855.92 3030.48 4842.52 c
-h
-3047.12 4849.56 m
-3051.28 4849.24 3053.68 4845.56 3053.36 4840.44 c
-3052.72 4829.88 3047.6 4814.04 3041.84 4803.64 c
-3036.88 4795 3031.76 4789.92 3026.32 4789.92 c
-3022.8 4789.92 3020.08 4792.75 3020.08 4796.28 c
-3020.08 4799 3021.84 4805.56 3026.16 4820.12 c
-3029.68 4831.8 3031.12 4835.8 3033.52 4839.48 c
-3037.52 4845.72 3042.96 4849.88 3047.12 4849.56 c
-h
-3082 4787 m
-f*
-3117.56 4860.92 m
-3101.24 4858.36 3095 4857.4 3086.68 4856.44 c
-3086.68 4852 l
-3093.88 4851.69 3095.32 4851.07 3095.32 4848.12 c
-3095.32 4846.52 3094.04 4840.76 3091.8 4832.44 c
-3075.8 4770.36 l
-3072.76 4759.8 3071.48 4758.84 3063.8 4759 c
-3063.8 4754 l
-3103.64 4754 l
-3103.64 4759 l
-3095.64 4759.14 3093.24 4760.16 3093.24 4763.64 c
-3093.24 4765.88 3094.36 4770.68 3097.4 4781.88 c
-3098.52 4785.72 3098.52 4786.04 3099.16 4788.44 c
-3104.76 4785.56 3106.68 4784.92 3110.04 4784.92 c
-3131.8 4784.92 3154.36 4813.88 3154.36 4841.56 c
-3154.36 4853.4 3147.64 4861.08 3137.08 4861.08 c
-3127.96 4861.08 3120.92 4855.92 3111.48 4842.52 c
-h
-3128.12 4849.56 m
-3132.28 4849.24 3134.68 4845.56 3134.36 4840.44 c
-3133.72 4829.88 3128.6 4814.04 3122.84 4803.64 c
-3117.88 4795 3112.76 4789.92 3107.32 4789.92 c
-3103.8 4789.92 3101.08 4792.75 3101.08 4796.28 c
-3101.08 4799 3102.84 4805.56 3107.16 4820.12 c
-3110.68 4831.8 3112.12 4835.8 3114.52 4839.48 c
-3118.52 4845.72 3123.96 4849.88 3128.12 4849.56 c
-h
-3163 4787 m
-f*
-3196.56 4809.56 m
-3194.32 4806.36 l
-3190.16 4800.12 3186.48 4796.56 3184.08 4796.56 c
-3182.8 4796.56 3182 4797.77 3182 4799.16 c
-3182 4800.6 3182.62 4804.76 3183.12 4807.48 c
-3197.68 4860.92 l
-3189.22 4859 3178.26 4857.4 3166.04 4856.44 c
-3166.04 4852 l
-3167.44 4852 l
-3172.24 4852 3175.48 4850.44 3175.48 4847.48 c
-3175.48 4846.2 3174.71 4843.8 3173.68 4841.08 c
-3164.4 4806.68 l
-3163.12 4802.04 3163 4797.88 3163 4795.64 c
-3163 4789.56 3167.2 4785.56 3173.36 4785.56 c
-3182.96 4785.56 3188.88 4790.36 3200.08 4807.32 c
-h
-3192.88 4896.4 m
-3187.44 4896.4 3183 4891.46 3183 4886.04 c
-3183 4879.8 3187.26 4875.4 3193.04 4875.4 c
-3199.12 4875.4 3204 4879.86 3204 4885.56 c
-3204 4891.48 3199 4896.4 3192.88 4896.4 c
-h
-3206.48 4787 m
-f*
-3281.36 4808.6 m
-3274.96 4798.68 3272.88 4796.56 3270.16 4796.56 c
-3268.88 4796.56 3268 4797.63 3268 4799.16 c
-3268 4800.76 3268.94 4804.12 3271.92 4813.08 c
-3277.68 4830.52 l
-3280.24 4838.04 3282 4845.08 3282 4848.92 c
-3282 4856.76 3277.78 4861.08 3270.16 4861.08 c
-3264.24 4861.08 3258.48 4858.62 3254.16 4854.36 c
-3248.24 4848.76 3245.2 4844.92 3234.48 4829.08 c
-3244.72 4860.76 l
-3234.48 4858.52 3221.68 4856.92 3212.72 4856.6 c
-3212.72 4851.8 l
-3219.44 4851.65 3221.36 4850.92 3221.36 4848.12 c
-3221.36 4846.2 3219.12 4837.72 3214 4819.64 c
-3210.32 4806.68 3209.2 4802.52 3205.04 4787 c
-3224.4 4787 l
-3231.92 4814.68 3237.68 4828.6 3247.6 4841.56 c
-3250.8 4845.88 3255.76 4849.08 3258.64 4849.08 c
-3260.72 4849.08 3263 4847.63 3263 4846.04 c
-3263 4845.56 3262.54 4844.28 3261.84 4842.68 c
-3253.04 4816.12 l
-3250.48 4808.44 3249 4799.32 3249 4795.16 c
-3249 4789.08 3252.84 4785.56 3259.44 4785.56 c
-3269.04 4785.56 3275.6 4791 3284.88 4806.52 c
-h
-3294.96 4787 m
-f*
-3372.48 4856 m
-3354.72 4856 l
-3349.28 4859.58 3344.48 4861.08 3337.12 4861.08 c
-3317.44 4861.08 3301 4848.05 3301 4831.8 c
-3301 4823.64 3305.35 4817.88 3314.4 4814.2 c
-3301.28 4806.84 3299 4804.6 3299 4798.68 c
-3299 4793.56 3301.89 4790.52 3308.96 4788.12 c
-3299.04 4785.72 3295.84 4784.44 3292 4781.4 c
-3289.44 4779.16 3288 4775.32 3288 4771.48 c
-3288 4761.08 3299.56 4755 3317.76 4755 c
-3340.32 4755 3356 4764.72 3356 4778.52 c
-3356 4788.28 3349.6 4793.56 3332.16 4798.52 c
-3323.68 4800.92 l
-3318.56 4802.36 3315 4804.6 3315 4807 c
-3315 4809.56 3317.68 4812.28 3320 4812.28 c
-3320.8 4812.28 3321.92 4812.24 3323.2 4812.12 c
-3324.96 4811.64 3326.24 4811 3328.16 4811 c
-3335.2 4811 3342.4 4813.09 3348.48 4816.92 c
-3357.76 4822.2 3363 4830.36 3363 4839.96 c
-3363 4842.64 3362.59 4844.32 3361.76 4847 c
-3372.48 4847 l
-h
-3314.4 4786.04 m
-3316.32 4785.88 3328.48 4781.72 3332 4780.12 c
-3336.48 4777.88 3339 4775.16 3339 4771 c
-3339 4763.96 3331.8 4760 3319.36 4760 c
-3308.96 4760 3302 4765.1 3302 4772.44 c
-3302 4775.48 3303.32 4778.2 3306.24 4781.24 c
-3308.32 4783.32 3313.12 4786.2 3314.4 4786.04 c
-h
-3336.8 4856.08 m
-3340.96 4856.08 3344 4852.19 3344 4846.52 c
-3344 4841.08 3342.08 4833.4 3339.36 4827.48 c
-3336 4820.12 3331.84 4816 3326.88 4816 c
-3322.56 4816 3320 4819.52 3320 4825.88 c
-3320 4832.28 3322.79 4842.04 3326.24 4848.12 c
-3329.28 4853.4 3332.64 4856.08 3336.8 4856.08 c
-h
-3376 4787 m
-f*
-1 i
-0.564706 g
-2708.15 3969.35 m
-2573.75 4006.55 l
-2669.75 4061.75 l
-2516.15 4071.35 l
-2558.15 4140.95 l
-2410.55 4120.55 l
-2393.75 4192.55 l
-2273.75 4146.95 l
-2198.15 4210.55 l
-2122.55 4146.95 l
-2002.55 4192.55 l
-1984.55 4120.55 l
-1835.75 4140.95 l
-1880.15 4071.35 l
-1726.55 4061.75 l
-1822.55 4006.55 l
-1686.95 3969.35 l
-1822.55 3934.55 l
-1726.55 3878.15 l
-1880.15 3869.75 l
-1835.75 3800.15 l
-1984.55 3819.35 l
-2002.55 3748.55 l
-2122.55 3792.95 l
-2198.15 3729.35 l
-2273.75 3792.95 l
-2393.75 3748.55 l
-2410.55 3819.35 l
-2558.15 3800.15 l
-2516.15 3869.75 l
-2669.75 3878.15 l
-2573.75 3934.55 l
-f*
-1 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-f*
-0 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-2648.15 4029.35 l
-2609.75 4029.35 l
-2487.35 3998.15 l
-2576.15 3946.55 l
-2438.15 3938.15 l
-2478.95 3872.15 l
-2343.35 3891.35 l
-2326.55 3821.75 l
-2211.35 3864.95 l
-2138.15 3802.55 l
-2064.95 3864.95 l
-1949.75 3821.75 l
-1931.75 3891.35 l
-1796.15 3872.15 l
-1836.95 3938.15 l
-1700.15 3946.55 l
-1788.95 3998.15 l
-1666.55 4029.35 l
-1787.75 4061.75 l
-1700.15 4114.55 l
-1836.95 4121.75 l
-1796.15 4188.95 l
-1931.75 4169.75 l
-1949.75 4238.15 l
-2064.95 4196.15 l
-2138.15 4258.55 l
-2211.35 4196.15 l
-2326.55 4238.15 l
-2343.35 4169.75 l
-2478.95 4188.95 l
-2438.15 4121.75 l
-2576.15 4114.55 l
-2487.35 4061.75 l
-2609.75 4029.35 l
-2648.15 4029.35 l
-f*
-0.2 i
-1960.08 4080.76 m
-1940.08 4006.52 l
-1937.52 3997.88 1934.48 3995.64 1924.08 3995 c
-1924.08 3991 l
-1974 3991 l
-1974 3995 l
-1964.72 3995.48 1962.48 3996.76 1962.48 4001.88 c
-1962.48 4003.64 1962.8 4005.4 1963.76 4009.08 c
-1963.92 4009.88 l
-1964.08 4010.68 l
-1983.76 4082.52 l
-1986.16 4090.84 1988.56 4093.08 1996.72 4094.04 c
-1996.72 4098 l
-1962.8 4098 l
-1913.2 4021.24 l
-1904.56 4098 l
-1869.2 4098 l
-1869.2 4094 l
-1879.28 4093.52 1880.72 4092.89 1880.72 4088.44 c
-1880.72 4086.2 1880.08 4083.32 1878.96 4079.16 c
-1861.52 4019.48 l
-1855.12 3998.68 1854 3996.92 1845.36 3995 c
-1845.36 3991 l
-1878.48 3991 l
-1878.48 3995 l
-1868.24 3996.28 1865.68 3998.2 1865.68 4004.76 c
-1865.68 4007.48 1866.48 4011.48 1868.72 4019.48 c
-1884.88 4078.52 l
-1895.6 3989.08 l
-1900.08 3989.08 l
-h
-1992.24 3991 m
-f*
-2061.44 4011.32 m
-2054.88 4002.52 2052.48 3999.76 2049.92 3999.76 c
-2048.64 3999.76 2048 4000.86 2048 4002.52 c
-2048 4006.52 2049.44 4013.08 2053.44 4026.2 c
-2064.8 4063.96 l
-2047.04 4062.84 l
-2044.16 4053.4 l
-2042.72 4061.56 2039.2 4065.08 2032.32 4065.08 c
-2012.64 4065.08 1989 4034.27 1989 4009.24 c
-1989 3997.08 1995.74 3988.92 2005.92 3988.92 c
-2015.68 3988.92 2023.04 3994.68 2032.16 4010.04 c
-2030.24 4003.48 2030 4001.56 2030 3999.32 c
-2030 3993.4 2034.76 3988.76 2040.64 3988.76 c
-2048.16 3988.76 2055.52 3995 2064.8 4008.92 c
-h
-2034.56 4058.2 m
-2038.08 4057.88 2040.56 4055 2040.56 4050.68 c
-2040.56 4041.08 2035.24 4023.32 2028.96 4012.28 c
-2024.64 4004.44 2019.84 3999.92 2015.52 3999.92 c
-2011.36 3999.92 2008 4003.75 2008 4008.92 c
-2008 4017.24 2013.42 4033.24 2020.16 4045.08 c
-2024.96 4053.56 2030.24 4058.52 2034.56 4058.2 c
-h
-2072 3991 m
-f*
-2106.56 4064.92 m
-2090.24 4062.36 2084 4061.4 2075.68 4060.44 c
-2075.68 4056 l
-2082.88 4055.69 2084.32 4055.07 2084.32 4052.12 c
-2084.32 4050.52 2083.04 4044.76 2080.8 4036.44 c
-2064.8 3974.36 l
-2061.76 3963.8 2060.48 3962.84 2052.8 3963 c
-2052.8 3958 l
-2092.64 3958 l
-2092.64 3963 l
-2084.64 3963.14 2082.24 3964.16 2082.24 3967.64 c
-2082.24 3969.88 2083.36 3974.68 2086.4 3985.88 c
-2087.52 3989.72 2087.52 3990.04 2088.16 3992.44 c
-2093.76 3989.56 2095.68 3988.92 2099.04 3988.92 c
-2120.8 3988.92 2143.36 4017.88 2143.36 4045.56 c
-2143.36 4057.4 2136.64 4065.08 2126.08 4065.08 c
-2116.96 4065.08 2109.92 4059.92 2100.48 4046.52 c
-h
-2117.12 4053.56 m
-2121.28 4053.24 2123.68 4049.56 2123.36 4044.44 c
-2122.72 4033.88 2117.6 4018.04 2111.84 4007.64 c
-2106.88 3999 2101.76 3993.92 2096.32 3993.92 c
-2092.8 3993.92 2090.08 3996.75 2090.08 4000.28 c
-2090.08 4003 2091.84 4009.56 2096.16 4024.12 c
-2099.68 4035.8 2101.12 4039.8 2103.52 4043.48 c
-2107.52 4049.72 2112.96 4053.88 2117.12 4053.56 c
-h
-2152 3991 m
-f*
-2187.56 4064.92 m
-2171.24 4062.36 2165 4061.4 2156.68 4060.44 c
-2156.68 4056 l
-2163.88 4055.69 2165.32 4055.07 2165.32 4052.12 c
-2165.32 4050.52 2164.04 4044.76 2161.8 4036.44 c
-2145.8 3974.36 l
-2142.76 3963.8 2141.48 3962.84 2133.8 3963 c
-2133.8 3958 l
-2173.64 3958 l
-2173.64 3963 l
-2165.64 3963.14 2163.24 3964.16 2163.24 3967.64 c
-2163.24 3969.88 2164.36 3974.68 2167.4 3985.88 c
-2168.52 3989.72 2168.52 3990.04 2169.16 3992.44 c
-2174.76 3989.56 2176.68 3988.92 2180.04 3988.92 c
-2201.8 3988.92 2224.36 4017.88 2224.36 4045.56 c
-2224.36 4057.4 2217.64 4065.08 2207.08 4065.08 c
-2197.96 4065.08 2190.92 4059.92 2181.48 4046.52 c
-h
-2198.12 4053.56 m
-2202.28 4053.24 2204.68 4049.56 2204.36 4044.44 c
-2203.72 4033.88 2198.6 4018.04 2192.84 4007.64 c
-2187.88 3999 2182.76 3993.92 2177.32 3993.92 c
-2173.8 3993.92 2171.08 3996.75 2171.08 4000.28 c
-2171.08 4003 2172.84 4009.56 2177.16 4024.12 c
-2180.68 4035.8 2182.12 4039.8 2184.52 4043.48 c
-2188.52 4049.72 2193.96 4053.88 2198.12 4053.56 c
-h
-2233 3991 m
-f*
-2266.56 4013.56 m
-2264.32 4010.36 l
-2260.16 4004.12 2256.48 4000.56 2254.08 4000.56 c
-2252.8 4000.56 2252 4001.77 2252 4003.16 c
-2252 4004.6 2252.62 4008.76 2253.12 4011.48 c
-2267.68 4064.92 l
-2259.22 4063 2248.26 4061.4 2236.04 4060.44 c
-2236.04 4056 l
-2237.44 4056 l
-2242.24 4056 2245.48 4054.44 2245.48 4051.48 c
-2245.48 4050.2 2244.71 4047.8 2243.68 4045.08 c
-2234.4 4010.68 l
-2233.12 4006.04 2233 4001.88 2233 3999.64 c
-2233 3993.56 2237.2 3989.56 2243.36 3989.56 c
-2252.96 3989.56 2258.88 3994.36 2270.08 4011.32 c
-h
-2262.88 4100.4 m
-2257.44 4100.4 2253 4095.46 2253 4090.04 c
-2253 4083.8 2257.26 4079.4 2263.04 4079.4 c
-2269.12 4079.4 2274 4083.86 2274 4089.56 c
-2274 4095.48 2269 4100.4 2262.88 4100.4 c
-h
-2276.48 3991 m
-f*
-2351.36 4012.6 m
-2344.96 4002.68 2342.88 4000.56 2340.16 4000.56 c
-2338.88 4000.56 2338 4001.63 2338 4003.16 c
-2338 4004.76 2338.94 4008.12 2341.92 4017.08 c
-2347.68 4034.52 l
-2350.24 4042.04 2352 4049.08 2352 4052.92 c
-2352 4060.76 2347.78 4065.08 2340.16 4065.08 c
-2334.24 4065.08 2328.48 4062.62 2324.16 4058.36 c
-2318.24 4052.76 2315.2 4048.92 2304.48 4033.08 c
-2314.72 4064.76 l
-2304.48 4062.52 2291.68 4060.92 2282.72 4060.6 c
-2282.72 4055.8 l
-2289.44 4055.65 2291.36 4054.92 2291.36 4052.12 c
-2291.36 4050.2 2289.12 4041.72 2284 4023.64 c
-2280.32 4010.68 2279.2 4006.52 2275.04 3991 c
-2294.4 3991 l
-2301.92 4018.68 2307.68 4032.6 2317.6 4045.56 c
-2320.8 4049.88 2325.76 4053.08 2328.64 4053.08 c
-2330.72 4053.08 2333 4051.63 2333 4050.04 c
-2333 4049.56 2332.54 4048.28 2331.84 4046.68 c
-2323.04 4020.12 l
-2320.48 4012.44 2319 4003.32 2319 3999.16 c
-2319 3993.08 2322.84 3989.56 2329.44 3989.56 c
-2339.04 3989.56 2345.6 3995 2354.88 4010.52 c
-h
-2364.96 3991 m
-f*
-2442.48 4060 m
-2424.72 4060 l
-2419.28 4063.58 2414.48 4065.08 2407.12 4065.08 c
-2387.44 4065.08 2371 4052.05 2371 4035.8 c
-2371 4027.64 2375.35 4021.88 2384.4 4018.2 c
-2371.28 4010.84 2369 4008.6 2369 4002.68 c
-2369 3997.56 2371.89 3994.52 2378.96 3992.12 c
-2369.04 3989.72 2365.84 3988.44 2362 3985.4 c
-2359.44 3983.16 2358 3979.32 2358 3975.48 c
-2358 3965.08 2369.56 3959 2387.76 3959 c
-2410.32 3959 2426 3968.72 2426 3982.52 c
-2426 3992.28 2419.6 3997.56 2402.16 4002.52 c
-2393.68 4004.92 l
-2388.56 4006.36 2385 4008.6 2385 4011 c
-2385 4013.56 2387.68 4016.28 2390 4016.28 c
-2390.8 4016.28 2391.92 4016.24 2393.2 4016.12 c
-2394.96 4015.64 2396.24 4015 2398.16 4015 c
-2405.2 4015 2412.4 4017.09 2418.48 4020.92 c
-2427.76 4026.2 2433 4034.36 2433 4043.96 c
-2433 4046.64 2432.59 4048.32 2431.76 4051 c
-2442.48 4051 l
-h
-2384.4 3990.04 m
-2386.32 3989.88 2398.48 3985.72 2402 3984.12 c
-2406.48 3981.88 2409 3979.16 2409 3975 c
-2409 3967.96 2401.8 3964 2389.36 3964 c
-2378.96 3964 2372 3969.1 2372 3976.44 c
-2372 3979.48 2373.32 3982.2 2376.24 3985.24 c
-2378.32 3987.32 2383.12 3990.2 2384.4 3990.04 c
-h
-2406.8 4060.08 m
-2410.96 4060.08 2414 4056.19 2414 4050.52 c
-2414 4045.08 2412.08 4037.4 2409.36 4031.48 c
-2406 4024.12 2401.84 4020 2396.88 4020 c
-2392.56 4020 2390 4023.52 2390 4029.88 c
-2390 4036.28 2392.79 4046.04 2396.24 4052.12 c
-2399.28 4057.4 2402.64 4060.08 2406.8 4060.08 c
-h
-2446 3991 m
-f*
-1 i
-0.564706 g
-2894.15 2729.75 m
-2758.55 2765.75 l
-2854.55 2822.15 l
-2700.95 2830.55 l
-2744.15 2901.35 l
-2596.55 2880.95 l
-2578.55 2951.75 l
-2458.55 2907.35 l
-2384.15 2970.95 l
-2307.35 2907.35 l
-2187.35 2951.75 l
-2169.35 2880.95 l
-2020.55 2901.35 l
-2064.95 2830.55 l
-1911.35 2822.15 l
-2007.35 2765.75 l
-1871.75 2729.75 l
-2007.35 2694.95 l
-1911.35 2638.55 l
-2064.95 2630.15 l
-2020.55 2559.35 l
-2169.35 2579.75 l
-2187.35 2508.95 l
-2307.35 2553.35 l
-2384.15 2489.75 l
-2458.55 2553.35 l
-2578.55 2508.95 l
-2596.55 2579.75 l
-2744.15 2559.35 l
-2700.95 2630.15 l
-2854.55 2638.55 l
-2758.55 2694.95 l
-f*
-1 g
-2834.15 2789.75 m
-2698.55 2825.75 l
-2794.55 2882.15 l
-2640.95 2890.55 l
-2684.15 2961.35 l
-2536.55 2940.95 l
-2518.55 3011.75 l
-2398.55 2967.35 l
-2324.15 3030.95 l
-2247.35 2967.35 l
-2127.35 3011.75 l
-2109.35 2940.95 l
-1960.55 2961.35 l
-2004.95 2890.55 l
-1851.35 2882.15 l
-1947.35 2825.75 l
-1811.75 2789.75 l
-1947.35 2754.95 l
-1851.35 2698.55 l
-2004.95 2690.15 l
-1960.55 2619.35 l
-2109.35 2639.75 l
-2127.35 2568.95 l
-2247.35 2613.35 l
-2324.15 2549.75 l
-2398.55 2613.35 l
-2518.55 2568.95 l
-2536.55 2639.75 l
-2684.15 2619.35 l
-2640.95 2690.15 l
-2794.55 2698.55 l
-2698.55 2754.95 l
-f*
-0 g
-2834.15 2789.75 m
-2698.55 2825.75 l
-2794.55 2882.15 l
-2640.95 2890.55 l
-2684.15 2961.35 l
-2536.55 2940.95 l
-2518.55 3011.75 l
-2398.55 2967.35 l
-2324.15 3030.95 l
-2247.35 2967.35 l
-2127.35 3011.75 l
-2109.35 2940.95 l
-1960.55 2961.35 l
-2004.95 2890.55 l
-1851.35 2882.15 l
-1947.35 2825.75 l
-1811.75 2789.75 l
-1947.35 2754.95 l
-1851.35 2698.55 l
-2004.95 2690.15 l
-1960.55 2619.35 l
-2109.35 2639.75 l
-2127.35 2568.95 l
-2247.35 2613.35 l
-2324.15 2549.75 l
-2398.55 2613.35 l
-2518.55 2568.95 l
-2536.55 2639.75 l
-2684.15 2619.35 l
-2640.95 2690.15 l
-2794.55 2698.55 l
-2698.55 2754.95 l
-2834.15 2789.75 l
-2794.55 2789.75 l
-2672.15 2758.55 l
-2760.95 2705.75 l
-2624.15 2698.55 l
-2663.75 2632.55 l
-2528.15 2650.55 l
-2511.35 2582.15 l
-2396.15 2624.15 l
-2324.15 2561.75 l
-2249.75 2624.15 l
-2134.55 2582.15 l
-2117.75 2650.55 l
-1980.95 2632.55 l
-2021.75 2698.55 l
-1884.95 2705.75 l
-1973.75 2758.55 l
-1851.35 2789.75 l
-1972.55 2822.15 l
-1884.95 2874.95 l
-2021.75 2882.15 l
-1980.95 2948.15 l
-2117.75 2930.15 l
-2134.55 2998.55 l
-2249.75 2956.55 l
-2324.15 3018.95 l
-2396.15 2956.55 l
-2511.35 2998.55 l
-2528.15 2930.15 l
-2663.75 2948.15 l
-2624.15 2882.15 l
-2760.95 2874.95 l
-2672.15 2822.15 l
-2794.55 2789.75 l
-2834.15 2789.75 l
-f*
-0.2 i
-2145.08 2840.76 m
-2125.08 2766.52 l
-2122.52 2757.88 2119.48 2755.64 2109.08 2755 c
-2109.08 2751 l
-2159 2751 l
-2159 2755 l
-2149.72 2755.48 2147.48 2756.76 2147.48 2761.88 c
-2147.48 2763.64 2147.8 2765.4 2148.76 2769.08 c
-2148.92 2769.88 l
-2149.08 2770.68 l
-2168.76 2842.52 l
-2171.16 2850.84 2173.56 2853.08 2181.72 2854.04 c
-2181.72 2858 l
-2147.8 2858 l
-2098.2 2781.24 l
-2089.56 2858 l
-2054.2 2858 l
-2054.2 2854 l
-2064.28 2853.52 2065.72 2852.89 2065.72 2848.44 c
-2065.72 2846.2 2065.08 2843.32 2063.96 2839.16 c
-2046.52 2779.48 l
-2040.12 2758.68 2039 2756.92 2030.36 2755 c
-2030.36 2751 l
-2063.48 2751 l
-2063.48 2755 l
-2053.24 2756.28 2050.68 2758.2 2050.68 2764.76 c
-2050.68 2767.48 2051.48 2771.48 2053.72 2779.48 c
-2069.88 2838.52 l
-2080.6 2749.08 l
-2085.08 2749.08 l
-h
-2177.24 2751 m
-f*
-2247.44 2771.32 m
-2240.88 2762.52 2238.48 2759.76 2235.92 2759.76 c
-2234.64 2759.76 2234 2760.86 2234 2762.52 c
-2234 2766.52 2235.44 2773.08 2239.44 2786.2 c
-2250.8 2823.96 l
-2233.04 2822.84 l
-2230.16 2813.4 l
-2228.72 2821.56 2225.2 2825.08 2218.32 2825.08 c
-2198.64 2825.08 2175 2794.27 2175 2769.24 c
-2175 2757.08 2181.74 2748.92 2191.92 2748.92 c
-2201.68 2748.92 2209.04 2754.68 2218.16 2770.04 c
-2216.24 2763.48 2216 2761.56 2216 2759.32 c
-2216 2753.4 2220.76 2748.76 2226.64 2748.76 c
-2234.16 2748.76 2241.52 2755 2250.8 2768.92 c
-h
-2220.56 2818.2 m
-2224.08 2817.88 2226.56 2815 2226.56 2810.68 c
-2226.56 2801.08 2221.24 2783.32 2214.96 2772.28 c
-2210.64 2764.44 2205.84 2759.92 2201.52 2759.92 c
-2197.36 2759.92 2194 2763.75 2194 2768.92 c
-2194 2777.24 2199.42 2793.24 2206.16 2805.08 c
-2210.96 2813.56 2216.24 2818.52 2220.56 2818.2 c
-h
-2258 2751 m
-f*
-2291.56 2824.92 m
-2275.24 2822.36 2269 2821.4 2260.68 2820.44 c
-2260.68 2816 l
-2267.88 2815.69 2269.32 2815.07 2269.32 2812.12 c
-2269.32 2810.52 2268.04 2804.76 2265.8 2796.44 c
-2249.8 2734.36 l
-2246.76 2723.8 2245.48 2722.84 2237.8 2723 c
-2237.8 2718 l
-2277.64 2718 l
-2277.64 2723 l
-2269.64 2723.14 2267.24 2724.16 2267.24 2727.64 c
-2267.24 2729.88 2268.36 2734.68 2271.4 2745.88 c
-2272.52 2749.72 2272.52 2750.04 2273.16 2752.44 c
-2278.76 2749.56 2280.68 2748.92 2284.04 2748.92 c
-2305.8 2748.92 2328.36 2777.88 2328.36 2805.56 c
-2328.36 2817.4 2321.64 2825.08 2311.08 2825.08 c
-2301.96 2825.08 2294.92 2819.92 2285.48 2806.52 c
-h
-2302.12 2813.56 m
-2306.28 2813.24 2308.68 2809.56 2308.36 2804.44 c
-2307.72 2793.88 2302.6 2778.04 2296.84 2767.64 c
-2291.88 2759 2286.76 2753.92 2281.32 2753.92 c
-2277.8 2753.92 2275.08 2756.75 2275.08 2760.28 c
-2275.08 2763 2276.84 2769.56 2281.16 2784.12 c
-2284.68 2795.8 2286.12 2799.8 2288.52 2803.48 c
-2292.52 2809.72 2297.96 2813.88 2302.12 2813.56 c
-h
-2337 2751 m
-f*
-2371.56 2824.92 m
-2355.24 2822.36 2349 2821.4 2340.68 2820.44 c
-2340.68 2816 l
-2347.88 2815.69 2349.32 2815.07 2349.32 2812.12 c
-2349.32 2810.52 2348.04 2804.76 2345.8 2796.44 c
-2329.8 2734.36 l
-2326.76 2723.8 2325.48 2722.84 2317.8 2723 c
-2317.8 2718 l
-2357.64 2718 l
-2357.64 2723 l
-2349.64 2723.14 2347.24 2724.16 2347.24 2727.64 c
-2347.24 2729.88 2348.36 2734.68 2351.4 2745.88 c
-2352.52 2749.72 2352.52 2750.04 2353.16 2752.44 c
-2358.76 2749.56 2360.68 2748.92 2364.04 2748.92 c
-2385.8 2748.92 2408.36 2777.88 2408.36 2805.56 c
-2408.36 2817.4 2401.64 2825.08 2391.08 2825.08 c
-2381.96 2825.08 2374.92 2819.92 2365.48 2806.52 c
-h
-2382.12 2813.56 m
-2386.28 2813.24 2388.68 2809.56 2388.36 2804.44 c
-2387.72 2793.88 2382.6 2778.04 2376.84 2767.64 c
-2371.88 2759 2366.76 2753.92 2361.32 2753.92 c
-2357.8 2753.92 2355.08 2756.75 2355.08 2760.28 c
-2355.08 2763 2356.84 2769.56 2361.16 2784.12 c
-2364.68 2795.8 2366.12 2799.8 2368.52 2803.48 c
-2372.52 2809.72 2377.96 2813.88 2382.12 2813.56 c
-h
-2417 2751 m
-f*
-2452.56 2773.56 m
-2450.32 2770.36 l
-2446.16 2764.12 2442.48 2760.56 2440.08 2760.56 c
-2438.8 2760.56 2438 2761.77 2438 2763.16 c
-2438 2764.6 2438.62 2768.76 2439.12 2771.48 c
-2453.68 2824.92 l
-2445.22 2823 2434.26 2821.4 2422.04 2820.44 c
-2422.04 2816 l
-2423.44 2816 l
-2428.24 2816 2431.48 2814.44 2431.48 2811.48 c
-2431.48 2810.2 2430.71 2807.8 2429.68 2805.08 c
-2420.4 2770.68 l
-2419.12 2766.04 2419 2761.88 2419 2759.64 c
-2419 2753.56 2423.2 2749.56 2429.36 2749.56 c
-2438.96 2749.56 2444.88 2754.36 2456.08 2771.32 c
-h
-2448.88 2860.4 m
-2443.44 2860.4 2439 2855.46 2439 2850.04 c
-2439 2843.8 2443.26 2839.4 2449.04 2839.4 c
-2455.12 2839.4 2460 2843.86 2460 2849.56 c
-2460 2855.48 2455 2860.4 2448.88 2860.4 c
-h
-2462.48 2751 m
-f*
-2536.36 2772.6 m
-2529.96 2762.68 2527.88 2760.56 2525.16 2760.56 c
-2523.88 2760.56 2523 2761.63 2523 2763.16 c
-2523 2764.76 2523.94 2768.12 2526.92 2777.08 c
-2532.68 2794.52 l
-2535.24 2802.04 2537 2809.08 2537 2812.92 c
-2537 2820.76 2532.78 2825.08 2525.16 2825.08 c
-2519.24 2825.08 2513.48 2822.62 2509.16 2818.36 c
-2503.24 2812.76 2500.2 2808.92 2489.48 2793.08 c
-2499.72 2824.76 l
-2489.48 2822.52 2476.68 2820.92 2467.72 2820.6 c
-2467.72 2815.8 l
-2474.44 2815.65 2476.36 2814.92 2476.36 2812.12 c
-2476.36 2810.2 2474.12 2801.72 2469 2783.64 c
-2465.32 2770.68 2464.2 2766.52 2460.04 2751 c
-2479.4 2751 l
-2486.92 2778.68 2492.68 2792.6 2502.6 2805.56 c
-2505.8 2809.88 2510.76 2813.08 2513.64 2813.08 c
-2515.72 2813.08 2518 2811.63 2518 2810.04 c
-2518 2809.56 2517.54 2808.28 2516.84 2806.68 c
-2508.04 2780.12 l
-2505.48 2772.44 2504 2763.32 2504 2759.16 c
-2504 2753.08 2507.84 2749.56 2514.44 2749.56 c
-2524.04 2749.56 2530.6 2755 2539.88 2770.52 c
-h
-2549.96 2751 m
-f*
-2627.48 2820 m
-2609.72 2820 l
-2604.28 2823.58 2599.48 2825.08 2592.12 2825.08 c
-2572.44 2825.08 2556 2812.05 2556 2795.8 c
-2556 2787.64 2560.35 2781.88 2569.4 2778.2 c
-2556.28 2770.84 2554 2768.6 2554 2762.68 c
-2554 2757.56 2556.89 2754.52 2563.96 2752.12 c
-2554.04 2749.72 2550.84 2748.44 2547 2745.4 c
-2544.44 2743.16 2543 2739.32 2543 2735.48 c
-2543 2725.08 2554.56 2719 2572.76 2719 c
-2595.32 2719 2611 2728.72 2611 2742.52 c
-2611 2752.28 2604.6 2757.56 2587.16 2762.52 c
-2578.68 2764.92 l
-2573.56 2766.36 2570 2768.6 2570 2771 c
-2570 2773.56 2572.68 2776.28 2575 2776.28 c
-2575.8 2776.28 2576.92 2776.24 2578.2 2776.12 c
-2579.96 2775.64 2581.24 2775 2583.16 2775 c
-2590.2 2775 2597.4 2777.09 2603.48 2780.92 c
-2612.76 2786.2 2618 2794.36 2618 2803.96 c
-2618 2806.64 2617.59 2808.32 2616.76 2811 c
-2627.48 2811 l
-h
-2569.4 2750.04 m
-2571.32 2749.88 2583.48 2745.72 2587 2744.12 c
-2591.48 2741.88 2594 2739.16 2594 2735 c
-2594 2727.96 2586.8 2724 2574.36 2724 c
-2563.96 2724 2557 2729.1 2557 2736.44 c
-2557 2739.48 2558.32 2742.2 2561.24 2745.24 c
-2563.32 2747.32 2568.12 2750.2 2569.4 2750.04 c
-h
-2591.8 2820.08 m
-2595.96 2820.08 2599 2816.19 2599 2810.52 c
-2599 2805.08 2597.08 2797.4 2594.36 2791.48 c
-2591 2784.12 2586.84 2780 2581.88 2780 c
-2577.56 2780 2575 2783.52 2575 2789.88 c
-2575 2796.28 2577.79 2806.04 2581.24 2812.12 c
-2584.28 2817.4 2587.64 2820.08 2591.8 2820.08 c
-h
-2631 2751 m
-f*
-1 i
-0.564706 g
-4908.95 2769.35 m
-4773.35 2806.55 l
-4869.35 2861.75 l
-4715.75 2871.35 l
-4758.95 2940.95 l
-4611.35 2920.55 l
-4593.35 2992.55 l
-4473.35 2946.95 l
-4398.95 3010.55 l
-4322.15 2946.95 l
-4202.15 2992.55 l
-4185.35 2920.55 l
-4036.55 2940.95 l
-4079.75 2871.35 l
-3926.15 2861.75 l
-4022.15 2806.55 l
-3887.75 2769.35 l
-4022.15 2734.55 l
-3926.15 2678.15 l
-4079.75 2669.75 l
-4036.55 2600.15 l
-4185.35 2619.35 l
-4202.15 2548.55 l
-4322.15 2592.95 l
-4398.95 2529.35 l
-4473.35 2592.95 l
-4593.35 2548.55 l
-4611.35 2619.35 l
-4758.95 2600.15 l
-4715.75 2669.75 l
-4869.35 2678.15 l
-4773.35 2734.55 l
-f*
-1 g
-4848.95 2829.35 m
-4713.35 2866.55 l
-4809.35 2921.75 l
-4655.75 2931.35 l
-4698.95 3000.95 l
-4551.35 2980.55 l
-4533.35 3052.55 l
-4413.35 3006.95 l
-4338.95 3070.55 l
-4262.15 3006.95 l
-4142.15 3052.55 l
-4125.35 2980.55 l
-3976.55 3000.95 l
-4019.75 2931.35 l
-3866.15 2921.75 l
-3962.15 2866.55 l
-3827.75 2829.35 l
-3962.15 2794.55 l
-3866.15 2738.15 l
-4019.75 2729.75 l
-3976.55 2660.15 l
-4125.35 2679.35 l
-4142.15 2608.55 l
-4262.15 2652.95 l
-4338.95 2589.35 l
-4413.35 2652.95 l
-4533.35 2608.55 l
-4551.35 2679.35 l
-4698.95 2660.15 l
-4655.75 2729.75 l
-4809.35 2738.15 l
-4713.35 2794.55 l
-f*
-0 g
-4848.95 2829.35 m
-4713.35 2866.55 l
-4809.35 2921.75 l
-4655.75 2931.35 l
-4698.95 3000.95 l
-4551.35 2980.55 l
-4533.35 3052.55 l
-4413.35 3006.95 l
-4338.95 3070.55 l
-4262.15 3006.95 l
-4142.15 3052.55 l
-4125.35 2980.55 l
-3976.55 3000.95 l
-4019.75 2931.35 l
-3866.15 2921.75 l
-3962.15 2866.55 l
-3827.75 2829.35 l
-3962.15 2794.55 l
-3866.15 2738.15 l
-4019.75 2729.75 l
-3976.55 2660.15 l
-4125.35 2679.35 l
-4142.15 2608.55 l
-4262.15 2652.95 l
-4338.95 2589.35 l
-4413.35 2652.95 l
-4533.35 2608.55 l
-4551.35 2679.35 l
-4698.95 2660.15 l
-4655.75 2729.75 l
-4809.35 2738.15 l
-4713.35 2794.55 l
-4848.95 2829.35 l
-4809.35 2829.35 l
-4686.95 2798.15 l
-4775.75 2746.55 l
-4638.95 2738.15 l
-4678.55 2672.15 l
-4544.15 2691.35 l
-4526.15 2621.75 l
-4410.95 2664.95 l
-4338.95 2602.55 l
-4264.55 2664.95 l
-4149.35 2621.75 l
-4132.55 2691.35 l
-3995.75 2672.15 l
-4037.75 2738.15 l
-3899.75 2746.55 l
-3988.55 2798.15 l
-3866.15 2829.35 l
-3987.35 2861.75 l
-3899.75 2914.55 l
-4037.75 2921.75 l
-3995.75 2988.95 l
-4132.55 2969.75 l
-4149.35 3038.15 l
-4264.55 2996.15 l
-4338.95 3058.55 l
-4410.95 2996.15 l
-4526.15 3038.15 l
-4544.15 2969.75 l
-4678.55 2988.95 l
-4638.95 2921.75 l
-4775.75 2914.55 l
-4686.95 2861.75 l
-4809.35 2829.35 l
-4848.95 2829.35 l
-f*
-0.2 i
-4160.08 2880.76 m
-4140.08 2806.52 l
-4137.52 2797.88 4134.48 2795.64 4124.08 2795 c
-4124.08 2791 l
-4174 2791 l
-4174 2795 l
-4164.72 2795.48 4162.48 2796.76 4162.48 2801.88 c
-4162.48 2803.64 4162.8 2805.4 4163.76 2809.08 c
-4163.92 2809.88 l
-4164.08 2810.68 l
-4183.76 2882.52 l
-4186.16 2890.84 4188.56 2893.08 4196.72 2894.04 c
-4196.72 2898 l
-4162.8 2898 l
-4113.2 2821.24 l
-4104.56 2898 l
-4069.2 2898 l
-4069.2 2894 l
-4079.28 2893.52 4080.72 2892.89 4080.72 2888.44 c
-4080.72 2886.2 4080.08 2883.32 4078.96 2879.16 c
-4061.52 2819.48 l
-4055.12 2798.68 4054 2796.92 4045.36 2795 c
-4045.36 2791 l
-4078.48 2791 l
-4078.48 2795 l
-4068.24 2796.28 4065.68 2798.2 4065.68 2804.76 c
-4065.68 2807.48 4066.48 2811.48 4068.72 2819.48 c
-4084.88 2878.52 l
-4095.6 2789.08 l
-4100.08 2789.08 l
-h
-4192.24 2791 m
-f*
-4262.44 2811.32 m
-4255.88 2802.52 4253.48 2799.76 4250.92 2799.76 c
-4249.64 2799.76 4249 2800.86 4249 2802.52 c
-4249 2806.52 4250.44 2813.08 4254.44 2826.2 c
-4265.8 2863.96 l
-4248.04 2862.84 l
-4245.16 2853.4 l
-4243.72 2861.56 4240.2 2865.08 4233.32 2865.08 c
-4213.64 2865.08 4190 2834.27 4190 2809.24 c
-4190 2797.08 4196.74 2788.92 4206.92 2788.92 c
-4216.68 2788.92 4224.04 2794.68 4233.16 2810.04 c
-4231.24 2803.48 4231 2801.56 4231 2799.32 c
-4231 2793.4 4235.76 2788.76 4241.64 2788.76 c
-4249.16 2788.76 4256.52 2795 4265.8 2808.92 c
-h
-4235.56 2858.2 m
-4239.08 2857.88 4241.56 2855 4241.56 2850.68 c
-4241.56 2841.08 4236.24 2823.32 4229.96 2812.28 c
-4225.64 2804.44 4220.84 2799.92 4216.52 2799.92 c
-4212.36 2799.92 4209 2803.75 4209 2808.92 c
-4209 2817.24 4214.42 2833.24 4221.16 2845.08 c
-4225.96 2853.56 4231.24 2858.52 4235.56 2858.2 c
-h
-4273 2791 m
-f*
-4306.56 2864.92 m
-4290.24 2862.36 4284 2861.4 4275.68 2860.44 c
-4275.68 2856 l
-4282.88 2855.69 4284.32 2855.07 4284.32 2852.12 c
-4284.32 2850.52 4283.04 2844.76 4280.8 2836.44 c
-4264.8 2774.36 l
-4261.76 2763.8 4260.48 2762.84 4252.8 2763 c
-4252.8 2758 l
-4292.64 2758 l
-4292.64 2763 l
-4284.64 2763.14 4282.24 2764.16 4282.24 2767.64 c
-4282.24 2769.88 4283.36 2774.68 4286.4 2785.88 c
-4287.52 2789.72 4287.52 2790.04 4288.16 2792.44 c
-4293.76 2789.56 4295.68 2788.92 4299.04 2788.92 c
-4320.8 2788.92 4343.36 2817.88 4343.36 2845.56 c
-4343.36 2857.4 4336.64 2865.08 4326.08 2865.08 c
-4316.96 2865.08 4309.92 2859.92 4300.48 2846.52 c
-h
-4317.12 2853.56 m
-4321.28 2853.24 4323.68 2849.56 4323.36 2844.44 c
-4322.72 2833.88 4317.6 2818.04 4311.84 2807.64 c
-4306.88 2799 4301.76 2793.92 4296.32 2793.92 c
-4292.8 2793.92 4290.08 2796.75 4290.08 2800.28 c
-4290.08 2803 4291.84 2809.56 4296.16 2824.12 c
-4299.68 2835.8 4301.12 2839.8 4303.52 2843.48 c
-4307.52 2849.72 4312.96 2853.88 4317.12 2853.56 c
-h
-4352 2791 m
-f*
-4386.56 2864.92 m
-4370.24 2862.36 4364 2861.4 4355.68 2860.44 c
-4355.68 2856 l
-4362.88 2855.69 4364.32 2855.07 4364.32 2852.12 c
-4364.32 2850.52 4363.04 2844.76 4360.8 2836.44 c
-4344.8 2774.36 l
-4341.76 2763.8 4340.48 2762.84 4332.8 2763 c
-4332.8 2758 l
-4372.64 2758 l
-4372.64 2763 l
-4364.64 2763.14 4362.24 2764.16 4362.24 2767.64 c
-4362.24 2769.88 4363.36 2774.68 4366.4 2785.88 c
-4367.52 2789.72 4367.52 2790.04 4368.16 2792.44 c
-4373.76 2789.56 4375.68 2788.92 4379.04 2788.92 c
-4400.8 2788.92 4423.36 2817.88 4423.36 2845.56 c
-4423.36 2857.4 4416.64 2865.08 4406.08 2865.08 c
-4396.96 2865.08 4389.92 2859.92 4380.48 2846.52 c
-h
-4397.12 2853.56 m
-4401.28 2853.24 4403.68 2849.56 4403.36 2844.44 c
-4402.72 2833.88 4397.6 2818.04 4391.84 2807.64 c
-4386.88 2799 4381.76 2793.92 4376.32 2793.92 c
-4372.8 2793.92 4370.08 2796.75 4370.08 2800.28 c
-4370.08 2803 4371.84 2809.56 4376.16 2824.12 c
-4379.68 2835.8 4381.12 2839.8 4383.52 2843.48 c
-4387.52 2849.72 4392.96 2853.88 4397.12 2853.56 c
-h
-4432 2791 m
-f*
-4467.56 2813.56 m
-4465.32 2810.36 l
-4461.16 2804.12 4457.48 2800.56 4455.08 2800.56 c
-4453.8 2800.56 4453 2801.77 4453 2803.16 c
-4453 2804.6 4453.62 2808.76 4454.12 2811.48 c
-4468.68 2864.92 l
-4460.22 2863 4449.26 2861.4 4437.04 2860.44 c
-4437.04 2856 l
-4438.44 2856 l
-4443.24 2856 4446.48 2854.44 4446.48 2851.48 c
-4446.48 2850.2 4445.71 2847.8 4444.68 2845.08 c
-4435.4 2810.68 l
-4434.12 2806.04 4434 2801.88 4434 2799.64 c
-4434 2793.56 4438.2 2789.56 4444.36 2789.56 c
-4453.96 2789.56 4459.88 2794.36 4471.08 2811.32 c
-h
-4463.88 2900.4 m
-4458.44 2900.4 4454 2895.46 4454 2890.04 c
-4454 2883.8 4458.26 2879.4 4464.04 2879.4 c
-4470.12 2879.4 4475 2883.86 4475 2889.56 c
-4475 2895.48 4470 2900.4 4463.88 2900.4 c
-h
-4477.48 2791 m
-f*
-4551.36 2812.6 m
-4544.96 2802.68 4542.88 2800.56 4540.16 2800.56 c
-4538.88 2800.56 4538 2801.63 4538 2803.16 c
-4538 2804.76 4538.94 2808.12 4541.92 2817.08 c
-4547.68 2834.52 l
-4550.24 2842.04 4552 2849.08 4552 2852.92 c
-4552 2860.76 4547.78 2865.08 4540.16 2865.08 c
-4534.24 2865.08 4528.48 2862.62 4524.16 2858.36 c
-4518.24 2852.76 4515.2 2848.92 4504.48 2833.08 c
-4514.72 2864.76 l
-4504.48 2862.52 4491.68 2860.92 4482.72 2860.6 c
-4482.72 2855.8 l
-4489.44 2855.65 4491.36 2854.92 4491.36 2852.12 c
-4491.36 2850.2 4489.12 2841.72 4484 2823.64 c
-4480.32 2810.68 4479.2 2806.52 4475.04 2791 c
-4494.4 2791 l
-4501.92 2818.68 4507.68 2832.6 4517.6 2845.56 c
-4520.8 2849.88 4525.76 2853.08 4528.64 2853.08 c
-4530.72 2853.08 4533 2851.63 4533 2850.04 c
-4533 2849.56 4532.54 2848.28 4531.84 2846.68 c
-4523.04 2820.12 l
-4520.48 2812.44 4519 2803.32 4519 2799.16 c
-4519 2793.08 4522.84 2789.56 4529.44 2789.56 c
-4539.04 2789.56 4545.6 2795 4554.88 2810.52 c
-h
-4564.96 2791 m
-f*
-4642.48 2860 m
-4624.72 2860 l
-4619.28 2863.58 4614.48 2865.08 4607.12 2865.08 c
-4587.44 2865.08 4571 2852.05 4571 2835.8 c
-4571 2827.64 4575.35 2821.88 4584.4 2818.2 c
-4571.28 2810.84 4569 2808.6 4569 2802.68 c
-4569 2797.56 4571.89 2794.52 4578.96 2792.12 c
-4569.04 2789.72 4565.84 2788.44 4562 2785.4 c
-4559.44 2783.16 4558 2779.32 4558 2775.48 c
-4558 2765.08 4569.56 2759 4587.76 2759 c
-4610.32 2759 4626 2768.72 4626 2782.52 c
-4626 2792.28 4619.6 2797.56 4602.16 2802.52 c
-4593.68 2804.92 l
-4588.56 2806.36 4585 2808.6 4585 2811 c
-4585 2813.56 4587.68 2816.28 4590 2816.28 c
-4590.8 2816.28 4591.92 2816.24 4593.2 2816.12 c
-4594.96 2815.64 4596.24 2815 4598.16 2815 c
-4605.2 2815 4612.4 2817.09 4618.48 2820.92 c
-4627.76 2826.2 4633 2834.36 4633 2843.96 c
-4633 2846.64 4632.59 2848.32 4631.76 2851 c
-4642.48 2851 l
-h
-4584.4 2790.04 m
-4586.32 2789.88 4598.48 2785.72 4602 2784.12 c
-4606.48 2781.88 4609 2779.16 4609 2775 c
-4609 2767.96 4601.8 2764 4589.36 2764 c
-4578.96 2764 4572 2769.1 4572 2776.44 c
-4572 2779.48 4573.32 2782.2 4576.24 2785.24 c
-4578.32 2787.32 4583.12 2790.2 4584.4 2790.04 c
-h
-4606.8 2860.08 m
-4610.96 2860.08 4614 2856.19 4614 2850.52 c
-4614 2845.08 4612.08 2837.4 4609.36 2831.48 c
-4606 2824.12 4601.84 2820 4596.88 2820 c
-4592.56 2820 4590 2823.52 4590 2829.88 c
-4590 2836.28 4592.79 2846.04 4596.24 2852.12 c
-4599.28 2857.4 4602.64 2860.08 4606.8 2860.08 c
-h
-4646 2791 m
-f*
-1 i
-1 g
-1836.95 1421.75 m
-1919.75 1421.75 l
-1919.75 1268.15 l
-2086.55 1268.15 l
-2086.55 1421.75 l
-2166.95 1421.75 l
-2003.75 1572.95 l
-f*
-0 g
-1836.95 1421.75 m
-1919.75 1421.75 l
-1919.75 1268.15 l
-2086.55 1268.15 l
-2086.55 1421.75 l
-2166.95 1421.75 l
-2003.75 1572.95 l
-1836.95 1421.75 l
-1863.35 1432.55 l
-2003.75 1559.75 l
-2141.75 1432.55 l
-2075.75 1432.55 l
-2075.75 1278.95 l
-1929.35 1278.95 l
-1929.35 1432.55 l
-1863.35 1432.55 l
-1836.95 1421.75 l
-f*
-0.2 i
-2275.88 1447 m
-2275.88 1442 l
-2288.3 1441.29 2292 1438.45 2292 1429.4 c
-2292 1342.28 l
-2292 1333.1 2289.25 1330.94 2275.88 1329.5 c
-2275.88 1325 l
-2333.84 1325 l
-2364.26 1325 2384 1338.5 2384 1358.84 c
-2384 1367.12 2380.73 1374.32 2374.7 1379.9 c
-2368.4 1385.48 2362.28 1388 2349.68 1390.7 c
-2370.56 1396.82 2378 1404.2 2378 1417.88 c
-2378 1436.42 2361.55 1447 2331.5 1447 c
-h
-2321 1386.74 m
-2325.92 1386.74 l
-2344.46 1386.74 2353 1377.2 2353 1357.22 c
-2353 1339.76 2345.77 1331 2331.5 1331 c
-2323.58 1331 2321 1333.99 2321 1341.74 c
-h
-2321 1432.46 m
-2321 1438.94 2323.39 1442 2330.24 1442 c
-2342.84 1442 2349 1434.03 2349 1416.62 c
-2349 1397.72 2343.08 1392.68 2321 1392.14 c
-h
-2393.06 1325 m
-f*
-2478.14 1336.52 m
-2476.34 1334.72 l
-2475.8 1334.18 2475.26 1334 2474.36 1334 c
-2471.84 1334 2471 1335.44 2471 1338.5 c
-2471 1385.48 l
-2471 1400.78 2457.16 1410.16 2434.94 1410.16 c
-2414.6 1410.16 2400.92 1400.97 2400.92 1387.46 c
-2400.92 1379.9 2405.24 1375.58 2412.62 1375.58 c
-2419.82 1375.58 2424.86 1379.9 2424.86 1386.02 c
-2424.86 1388.54 2423.96 1390.88 2421.62 1393.76 c
-2420 1395.56 2419.46 1396.64 2419.46 1397.72 c
-2419.46 1401.5 2424.32 1404.16 2430.8 1404.16 c
-2441.42 1404.16 2446 1399.37 2446 1388.54 c
-2446 1375.4 l
-2424.89 1368.92 2416.41 1365.68 2409.56 1361.18 c
-2401.46 1355.78 2398 1349.48 2398 1341.56 c
-2398 1330.58 2406.07 1322.48 2417.3 1322.48 c
-2427.74 1322.48 2436.02 1326.08 2445.92 1335.08 c
-2447.9 1325.9 2451.86 1322.48 2460.68 1322.48 c
-2468.42 1322.48 2474 1325.36 2480.84 1332.74 c
-h
-2446 1343 m
-2441.04 1337.42 2437.37 1335.26 2432.96 1335.26 c
-2427.56 1335.26 2424 1340.12 2424 1347.32 c
-2424 1357.76 2431.57 1365.14 2446 1369.1 c
-h
-2483 1325 m
-f*
-2544.22 1383.68 m
-2544.22 1409.8 l
-2540.24 1409.8 l
-2539.16 1407.08 2538.08 1406.2 2535.74 1406.2 c
-2534.66 1406.2 2533.04 1406.55 2530.16 1407.44 c
-2524.4 1409.42 2520.26 1410.16 2516.12 1410.16 c
-2499.74 1410.16 2488 1398.99 2488 1383.86 c
-2488 1371.98 2495.34 1363.7 2513.42 1355.96 c
-2525.84 1350.56 2531 1346.06 2531 1340.3 c
-2531 1333.28 2525.48 1328.48 2517.2 1328.48 c
-2504.6 1328.48 2496.32 1336.62 2492.54 1352.36 c
-2487.5 1352.36 l
-2487.5 1322.66 l
-2492 1322.66 l
-2493.98 1326.44 2495.06 1327.7 2496.68 1327.7 c
-2497.58 1327.7 2499.02 1327.34 2500.82 1326.62 c
-2506.04 1324.46 2515.22 1322.48 2520.26 1322.48 c
-2536.64 1322.48 2548 1333.64 2548 1349.84 c
-2548 1362.62 2541.15 1370.54 2523.14 1377.92 c
-2510.9 1383.14 2506 1387.64 2506 1393.76 c
-2506 1399.7 2510.98 1404.16 2517.74 1404.16 c
-2522.6 1404.16 2527.28 1402.19 2531.24 1398.44 c
-2535.02 1394.84 2537 1391.42 2539.7 1383.68 c
-h
-2553.02 1325 m
-f*
-2624.36 1347.5 m
-2616.98 1338.68 2611.58 1335.48 2603.84 1335.48 c
-2597 1335.48 2591.6 1338.53 2588 1344.62 c
-2584.58 1350.36 2583.14 1356.45 2582.42 1369 c
-2627.78 1369 l
-2626.7 1383.99 2624 1392.3 2618.42 1399.34 c
-2612.66 1406.36 2604.2 1410.16 2594.12 1410.16 c
-2571.62 1410.16 2556.5 1392.33 2556.5 1366.04 c
-2556.5 1339.76 2571.26 1322.48 2593.58 1322.48 c
-2608.16 1322.48 2616.98 1328.06 2628.68 1344.98 c
-h
-2581.52 1376 m
-2582.06 1397.42 2585.3 1404.16 2594.12 1404.16 c
-2599.34 1404.16 2602.58 1401.42 2604.02 1396.1 c
-2604.92 1392.68 2605.28 1387.64 2605.64 1378.46 c
-2605.64 1376 l
-h
-2631.92 1325 m
-f*
-2678 1325 m
-f*
-2781.94 1447 m
-2679.88 1447 l
-2679.88 1442 l
-2692.3 1441.29 2696 1438.63 2696 1429.4 c
-2696 1342.28 l
-2696 1332.92 2693.44 1330.94 2679.88 1329.5 c
-2679.88 1325 l
-2744.68 1325 l
-2744.68 1330 l
-2728.12 1330.69 2725 1332.77 2725 1342.28 c
-2725 1384.22 l
-2743.28 1383.86 2749.91 1377.2 2752.42 1356.32 c
-2756.92 1356.32 l
-2756.92 1417.16 l
-2752.42 1417.16 l
-2749.19 1396.64 2742.92 1390.34 2725 1390.34 c
-2725 1432.1 l
-2725 1438.76 2727.32 1441 2736.4 1441 c
-2753.14 1441 2763.58 1437.8 2769.16 1431.2 c
-2773.12 1426.7 2775.1 1421.84 2777.62 1410.5 c
-2781.94 1410.5 l
-h
-2786.98 1325 m
-f*
-2826.28 1408 m
-2792.22 1408 l
-2792.22 1403.66 l
-2799.96 1402.58 2802 1400.24 2802 1393.04 c
-2802 1340.12 l
-2802 1332.74 2800.19 1330.76 2792.22 1329.32 c
-2792.22 1325 l
-2840.1 1325 l
-2840.1 1329.32 l
-2829.12 1330.04 2827 1332.38 2827 1343.54 c
-2827 1377.56 l
-2827 1386.92 2832.02 1394.66 2837.94 1394.66 c
-2839.38 1394.66 2841 1393.4 2842.98 1390.52 c
-2846.4 1385.66 2849.1 1384.04 2853.78 1384.04 c
-2860.44 1384.04 2865.12 1389.08 2865.12 1395.92 c
-2865.12 1404.2 2859 1410.16 2850.54 1410.16 c
-2841.55 1410.16 2834.73 1405.47 2826.28 1393.22 c
-h
-2866.92 1325 m
-f*
-2953.14 1336.52 m
-2951.34 1334.72 l
-2950.8 1334.18 2950.26 1334 2949.36 1334 c
-2946.84 1334 2946 1335.44 2946 1338.5 c
-2946 1385.48 l
-2946 1400.78 2932.16 1410.16 2909.94 1410.16 c
-2889.6 1410.16 2875.92 1400.97 2875.92 1387.46 c
-2875.92 1379.9 2880.24 1375.58 2887.62 1375.58 c
-2894.82 1375.58 2899.86 1379.9 2899.86 1386.02 c
-2899.86 1388.54 2898.96 1390.88 2896.62 1393.76 c
-2895 1395.56 2894.46 1396.64 2894.46 1397.72 c
-2894.46 1401.5 2899.32 1404.16 2905.8 1404.16 c
-2916.42 1404.16 2921 1399.37 2921 1388.54 c
-2921 1375.4 l
-2899.89 1368.92 2891.41 1365.68 2884.56 1361.18 c
-2876.46 1355.78 2873 1349.48 2873 1341.56 c
-2873 1330.58 2881.07 1322.48 2892.3 1322.48 c
-2902.74 1322.48 2911.02 1326.08 2920.92 1335.08 c
-2922.9 1325.9 2926.86 1322.48 2935.68 1322.48 c
-2943.42 1322.48 2949 1325.36 2955.84 1332.74 c
-h
-2921 1343 m
-2916.04 1337.42 2912.37 1335.26 2907.96 1335.26 c
-2902.56 1335.26 2899 1340.12 2899 1347.32 c
-2899 1357.76 2906.57 1365.14 2921 1369.1 c
-h
-2958 1325 m
-f*
-2995.46 1408 m
-2960.73 1408 l
-2960.73 1403.66 l
-2968.65 1402.58 2971 1400.42 2971 1393.04 c
-2971 1340.12 l
-2971 1332.74 2968.95 1330.76 2960.73 1329.32 c
-2960.73 1325 l
-3003.93 1325 l
-3003.93 1329.32 l
-2997.63 1330.22 2996 1332.74 2996 1339.58 c
-2996 1387.64 l
-2996 1388.54 2998.51 1391.78 3000.51 1393.76 c
-3004.29 1396.64 3007.53 1398.16 3010.77 1398.16 c
-3017.79 1398.16 3021 1394 3021 1383.14 c
-3021 1339.58 l
-3021 1332.2 3018.9 1329.86 3011.85 1329.32 c
-3011.85 1325 l
-3053.97 1325 l
-3053.97 1329.32 l
-3047.67 1330.04 3046 1332.74 3046 1339.58 c
-3046 1387.64 l
-3046 1388.54 3048.43 1391.6 3050.37 1393.58 c
-3054.33 1396.64 3057.57 1398.16 3060.81 1398.16 c
-3067.65 1398.16 3070 1393.82 3070 1383.14 c
-3070 1339.58 l
-3070 1332.02 3068.1 1329.86 3061.53 1329.32 c
-3061.53 1325 l
-3104.37 1325 l
-3104.37 1329 l
-3097.35 1329.37 3095 1331.6 3095 1339.58 c
-3095 1384.76 l
-3095 1400.24 3085.6 1410.16 3071.07 1410.16 c
-3060.81 1410.16 3053.97 1406.01 3044.61 1394.48 c
-3039.21 1405.82 3032.91 1410.16 3021.57 1410.16 c
-3010.2 1410.16 3002.21 1405.29 2995.46 1394.48 c
-h
-3107.94 1325 m
-f*
-3180.36 1347.5 m
-3172.98 1338.68 3167.58 1335.48 3159.84 1335.48 c
-3153 1335.48 3147.6 1338.53 3144 1344.62 c
-3140.58 1350.36 3139.14 1356.45 3138.42 1369 c
-3183.78 1369 l
-3182.7 1383.99 3180 1392.3 3174.42 1399.34 c
-3168.66 1406.36 3160.2 1410.16 3150.12 1410.16 c
-3127.62 1410.16 3112.5 1392.33 3112.5 1366.04 c
-3112.5 1339.76 3127.26 1322.48 3149.58 1322.48 c
-3164.16 1322.48 3172.98 1328.06 3184.68 1344.98 c
-h
-3137.52 1376 m
-3138.06 1397.42 3141.3 1404.16 3150.12 1404.16 c
-3155.34 1404.16 3158.58 1401.42 3160.02 1396.1 c
-3160.92 1392.68 3161.28 1387.64 3161.64 1378.46 c
-3161.64 1376 l
-h
-3187.92 1325 m
-f*
-1 i
-2272.55 1289.75 914.4 15.5999 re
-f
-0.2 i
-3784.26 5016.36 m
-3773.64 5005.2 3767.88 5000.88 3759.06 4997.46 c
-3753.84 4995.3 3747.9 4994.58 3742.86 4994.58 c
-3730.98 4994.58 3719.64 5000.74 3714.42 5009.88 c
-3709.2 5019.42 3707 5032.2 3707 5050.38 c
-3707 5087.64 3718.23 5107.7 3739.8 5107.7 c
-3748.26 5107.7 3756 5104.38 3763.74 5097.36 c
-3771.48 5090.52 3775.62 5084.4 3781.92 5070.72 c
-3786.42 5070.72 l
-3786.42 5113.16 l
-3781.56 5113.16 l
-3778.86 5106.43 3777.06 5104.56 3773.64 5104.56 c
-3771.84 5104.56 3769.5 5105.28 3765.36 5107.08 c
-3754.92 5111.4 3746.1 5113.7 3737.46 5113.7 c
-3701.64 5113.7 3675 5085.84 3675 5048.76 c
-3675 5011.68 3701.21 4985.58 3738.54 4985.58 c
-3759.24 4985.58 3771.48 4991.88 3789.66 5011.86 c
-h
-3795.96 4989 m
-f*
-3859.18 4986.66 m
-3866.78 4989.36 3871.02 4990.08 3882.5 4991.34 c
-3893.66 4992.6 l
-3893.66 4997 l
-3885.74 4997.35 3884 4999.63 3884 5007.18 c
-3884 5072 l
-3847.4 5072 l
-3847.4 5067.66 l
-3856.4 5066.94 3859 5064.78 3859 5057.04 c
-3859 5006.1 l
-3852.88 5000.16 3849.18 4998.48 3843.8 4998.48 c
-3836.42 4998.48 3834 5002 3834 5010.96 c
-3834 5072 l
-3799.88 5072 l
-3799.88 5067.66 l
-3807.26 5066.22 3809 5064.6 3809 5057.04 c
-3809 5011.68 l
-3809 4995.84 3817.89 4986.48 3832.64 4986.48 c
-3842.16 4986.48 3848.56 4989.36 3859.18 4998.36 c
-h
-3897.08 4989 m
-f*
-3935.28 5072 m
-3901.22 5072 l
-3901.22 5067.66 l
-3908.96 5066.58 3911 5064.24 3911 5057.04 c
-3911 5004.12 l
-3911 4996.74 3909.19 4994.76 3901.22 4993.32 c
-3901.22 4989 l
-3949.1 4989 l
-3949.1 4993.32 l
-3938.12 4994.04 3936 4996.38 3936 5007.54 c
-3936 5041.56 l
-3936 5050.92 3941.02 5058.66 3946.94 5058.66 c
-3948.38 5058.66 3950 5057.4 3951.98 5054.52 c
-3955.4 5049.66 3958.1 5048.04 3962.78 5048.04 c
-3969.44 5048.04 3974.12 5053.08 3974.12 5059.92 c
-3974.12 5068.2 3968 5074.16 3959.54 5074.16 c
-3950.55 5074.16 3943.73 5069.47 3935.28 5057.22 c
-h
-3975.92 4989 m
-f*
-4016.28 5072 m
-3982.22 5072 l
-3982.22 5067.66 l
-3989.96 5066.58 3992 5064.24 3992 5057.04 c
-3992 5004.12 l
-3992 4996.74 3990.19 4994.76 3982.22 4993.32 c
-3982.22 4989 l
-4030.1 4989 l
-4030.1 4993.32 l
-4019.12 4994.04 4017 4996.38 4017 5007.54 c
-4017 5041.56 l
-4017 5050.92 4022.02 5058.66 4027.94 5058.66 c
-4029.38 5058.66 4031 5057.4 4032.98 5054.52 c
-4036.4 5049.66 4039.1 5048.04 4043.78 5048.04 c
-4050.44 5048.04 4055.12 5053.08 4055.12 5059.92 c
-4055.12 5068.2 4049 5074.16 4040.54 5074.16 c
-4031.55 5074.16 4024.73 5069.47 4016.28 5057.22 c
-h
-4056.92 4989 m
-f*
-4128.36 5011.5 m
-4120.98 5002.68 4115.58 4999.48 4107.84 4999.48 c
-4101 4999.48 4095.6 5002.53 4092 5008.62 c
-4088.58 5014.36 4087.14 5020.45 4086.42 5033 c
-4131.78 5033 l
-4130.7 5047.99 4128 5056.3 4122.42 5063.34 c
-4116.66 5070.36 4108.2 5074.16 4098.12 5074.16 c
-4075.62 5074.16 4060.5 5056.33 4060.5 5030.04 c
-4060.5 5003.76 4075.26 4986.48 4097.58 4986.48 c
-4112.16 4986.48 4120.98 4992.06 4132.68 5008.98 c
-h
-4085.52 5040 m
-4086.06 5061.42 4089.3 5068.16 4098.12 5068.16 c
-4103.34 5068.16 4106.58 5065.42 4108.02 5060.1 c
-4108.92 5056.68 4109.28 5051.64 4109.64 5042.46 c
-4109.64 5040 l
-h
-4135.92 4989 m
-f*
-4173.82 5072 m
-4139.78 5072 l
-4139.78 5067.66 l
-4147.7 5066.4 4149 5064.6 4149 5057.04 c
-4149 5004.12 l
-4149 4996.56 4147.61 4994.94 4139.78 4993.32 c
-4139.78 4989 l
-4183.16 4989 l
-4183.16 4993.32 l
-4176.5 4994.22 4174 4996.92 4174 5003.58 c
-4174 5051.64 l
-4174 5052.36 4175.4 5054.16 4177.4 5055.96 c
-4181.36 5059.92 4185.68 5062.16 4190 5062.16 c
-4196.12 5062.16 4199 5057.27 4199 5047.14 c
-4199 5003.58 l
-4199 4996.92 4196.71 4994.04 4190.72 4993.32 c
-4190.72 4989 l
-4233.02 4989 l
-4233.02 4993.32 l
-4226 4993.86 4224 4996.02 4224 5003.58 c
-4224 5048.76 l
-4224 5064.24 4214.54 5074.16 4199.9 5074.16 c
-4188.96 5074.16 4180.57 5069.11 4173.82 5058.48 c
-h
-4236.08 4989 m
-f*
-4290.9 5072 m
-4274 5072 l
-4274 5102.4 l
-4269.48 5102.4 l
-4258.5 5086.92 4251.3 5078.82 4239.6 5068.92 c
-4239.6 5064 l
-4249 5064 l
-4249 5005.74 l
-4249 4994.04 4256.73 4986.84 4269.12 4986.84 c
-4281.18 4986.84 4288.38 4992.24 4295.76 5007 c
-4291.26 5008.98 l
-4287.66 5002.14 4284.78 4999.84 4281 4999.84 c
-4275.96 4999.84 4274 5002.83 4274 5009.88 c
-4274 5064 l
-4290.9 5064 l
-h
-4295.94 4989 m
-f*
-4341 4989 m
-f*
-4445.94 5111 m
-4343.88 5111 l
-4343.88 5106 l
-4356.3 5105.29 4360 5102.63 4360 5093.4 c
-4360 5006.28 l
-4360 4996.92 4357.44 4994.94 4343.88 4993.5 c
-4343.88 4989 l
-4408.68 4989 l
-4408.68 4994 l
-4392.12 4994.69 4389 4996.77 4389 5006.28 c
-4389 5048.22 l
-4407.28 5047.86 4413.91 5041.2 4416.42 5020.32 c
-4420.92 5020.32 l
-4420.92 5081.16 l
-4416.42 5081.16 l
-4413.19 5060.64 4406.92 5054.34 4389 5054.34 c
-4389 5096.1 l
-4389 5102.76 4391.32 5105 4400.4 5105 c
-4417.14 5105 4427.58 5101.8 4433.16 5095.2 c
-4437.12 5090.7 4439.1 5085.84 4441.62 5074.5 c
-4445.94 5074.5 l
-h
-4450.98 4989 m
-f*
-4490.28 5072 m
-4456.22 5072 l
-4456.22 5067.66 l
-4463.96 5066.58 4466 5064.24 4466 5057.04 c
-4466 5004.12 l
-4466 4996.74 4464.19 4994.76 4456.22 4993.32 c
-4456.22 4989 l
-4504.1 4989 l
-4504.1 4993.32 l
-4493.12 4994.04 4491 4996.38 4491 5007.54 c
-4491 5041.56 l
-4491 5050.92 4496.02 5058.66 4501.94 5058.66 c
-4503.38 5058.66 4505 5057.4 4506.98 5054.52 c
-4510.4 5049.66 4513.1 5048.04 4517.78 5048.04 c
-4524.44 5048.04 4529.12 5053.08 4529.12 5059.92 c
-4529.12 5068.2 4523 5074.16 4514.54 5074.16 c
-4505.55 5074.16 4498.73 5069.47 4490.28 5057.22 c
-h
-4530.92 4989 m
-f*
-4616.14 5000.52 m
-4614.34 4998.72 l
-4613.8 4998.18 4613.26 4998 4612.36 4998 c
-4609.84 4998 4609 4999.44 4609 5002.5 c
-4609 5049.48 l
-4609 5064.78 4595.16 5074.16 4572.94 5074.16 c
-4552.6 5074.16 4538.92 5064.97 4538.92 5051.46 c
-4538.92 5043.9 4543.24 5039.58 4550.62 5039.58 c
-4557.82 5039.58 4562.86 5043.9 4562.86 5050.02 c
-4562.86 5052.54 4561.96 5054.88 4559.62 5057.76 c
-4558 5059.56 4557.46 5060.64 4557.46 5061.72 c
-4557.46 5065.5 4562.32 5068.16 4568.8 5068.16 c
-4579.42 5068.16 4584 5063.37 4584 5052.54 c
-4584 5039.4 l
-4562.89 5032.92 4554.41 5029.68 4547.56 5025.18 c
-4539.46 5019.78 4536 5013.48 4536 5005.56 c
-4536 4994.58 4544.07 4986.48 4555.3 4986.48 c
-4565.74 4986.48 4574.02 4990.08 4583.92 4999.08 c
-4585.9 4989.9 4589.86 4986.48 4598.68 4986.48 c
-4606.42 4986.48 4612 4989.36 4618.84 4996.74 c
-h
-4584 5007 m
-4579.04 5001.42 4575.37 4999.26 4570.96 4999.26 c
-4565.56 4999.26 4562 5004.12 4562 5011.32 c
-4562 5021.76 4569.57 5029.14 4584 5033.1 c
-h
-4621 4989 m
-f*
-4658.46 5072 m
-4623.73 5072 l
-4623.73 5067.66 l
-4631.65 5066.58 4634 5064.42 4634 5057.04 c
-4634 5004.12 l
-4634 4996.74 4631.95 4994.76 4623.73 4993.32 c
-4623.73 4989 l
-4666.93 4989 l
-4666.93 4993.32 l
-4660.63 4994.22 4659 4996.74 4659 5003.58 c
-4659 5051.64 l
-4659 5052.54 4661.51 5055.78 4663.51 5057.76 c
-4667.29 5060.64 4670.53 5062.16 4673.77 5062.16 c
-4680.79 5062.16 4684 5058 4684 5047.14 c
-4684 5003.58 l
-4684 4996.2 4681.9 4993.86 4674.85 4993.32 c
-4674.85 4989 l
-4716.97 4989 l
-4716.97 4993.32 l
-4710.67 4994.04 4709 4996.74 4709 5003.58 c
-4709 5051.64 l
-4709 5052.54 4711.43 5055.6 4713.37 5057.58 c
-4717.33 5060.64 4720.57 5062.16 4723.81 5062.16 c
-4730.65 5062.16 4733 5057.82 4733 5047.14 c
-4733 5003.58 l
-4733 4996.02 4731.1 4993.86 4724.53 4993.32 c
-4724.53 4989 l
-4767.37 4989 l
-4767.37 4993 l
-4760.35 4993.37 4758 4995.6 4758 5003.58 c
-4758 5048.76 l
-4758 5064.24 4748.6 5074.16 4734.07 5074.16 c
-4723.81 5074.16 4716.97 5070.01 4707.61 5058.48 c
-4702.21 5069.82 4695.91 5074.16 4684.57 5074.16 c
-4673.2 5074.16 4665.21 5069.29 4658.46 5058.48 c
-h
-4770.94 4989 m
-f*
-4843.36 5011.5 m
-4835.98 5002.68 4830.58 4999.48 4822.84 4999.48 c
-4816 4999.48 4810.6 5002.53 4807 5008.62 c
-4803.58 5014.36 4802.14 5020.45 4801.42 5033 c
-4846.78 5033 l
-4845.7 5047.99 4843 5056.3 4837.42 5063.34 c
-4831.66 5070.36 4823.2 5074.16 4813.12 5074.16 c
-4790.62 5074.16 4775.5 5056.33 4775.5 5030.04 c
-4775.5 5003.76 4790.26 4986.48 4812.58 4986.48 c
-4827.16 4986.48 4835.98 4992.06 4847.68 5008.98 c
-h
-4800.52 5040 m
-4801.06 5061.42 4804.3 5068.16 4813.12 5068.16 c
-4818.34 5068.16 4821.58 5065.42 4823.02 5060.1 c
-4823.92 5056.68 4824.28 5051.64 4824.64 5042.46 c
-4824.64 5040 l
-h
-4850.92 4989 m
-f*
-1 i
-3665.75 4954.55 1184.4 15.5999 re
-f
-1 g
-4048.55 4732.55 m
-4130.15 4732.55 l
-4130.15 4581.35 l
-4295.75 4581.35 l
-4295.75 4732.55 l
-4378.55 4732.55 l
-4211.75 4886.15 l
-f*
-0 g
-4048.55 4732.55 m
-4130.15 4732.55 l
-4130.15 4581.35 l
-4295.75 4581.35 l
-4295.75 4732.55 l
-4378.55 4732.55 l
-4211.75 4886.15 l
-4048.55 4732.55 l
-4073.75 4742.15 l
-4211.75 4871.75 l
-4353.35 4742.15 l
-4286.15 4742.15 l
-4286.15 4590.95 l
-4139.75 4590.95 l
-4139.75 4742.15 l
-4073.75 4742.15 l
-4048.55 4732.55 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/fronta.eps b/ast-5.3-1/sun211_figures/fronta.eps
deleted file mode 100644
index 0369c80..0000000
--- a/ast-5.3-1/sun211_figures/fronta.eps
+++ /dev/null
@@ -1,6473 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 20 100 530 631
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:47:19
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-1 0 1 rg
-533.21 1777.32 4343.81 4343.81 re
-Y
-4877 5612 m
-4853 5612 l
-S
-4829 5613 m
-4805 5613 l
-S
-4781 5614 m
-4757 5614 l
-S
-4733 5614 m
-4709 5615 l
-S
-4685 5615 m
-4661 5616 l
-S
-4637 5616 m
-4613 5617 l
-S
-4589 5617 m
-4565 5618 l
-S
-4541 5618 m
-4517 5619 l
-S
-4493 5619 m
-4469 5620 l
-S
-4445 5620 m
-4421 5621 l
-S
-4397 5621 m
-4373 5621 l
-S
-4349 5622 m
-4325 5622 l
-S
-4301 5623 m
-4277 5623 l
-S
-4253 5624 m
-4229 5624 l
-S
-4205 5625 m
-4181 5625 l
-S
-4157 5626 m
-4133 5626 l
-S
-4109 5627 m
-4101 5627 l
-4085 5627 l
-S
-4061 5628 m
-4037 5628 l
-S
-4013 5628 m
-3989 5629 l
-S
-3965 5629 m
-3941 5630 l
-S
-3917 5630 m
-3893 5631 l
-S
-3869 5631 m
-3845 5632 l
-S
-3821 5632 m
-3797 5633 l
-S
-3773 5633 m
-3749 5634 l
-S
-3725 5634 m
-3701 5635 l
-S
-3677 5635 m
-3652 5636 l
-S
-3628 5636 m
-3604 5636 l
-S
-3580 5637 m
-3564 5637 l
-3556 5637 l
-S
-3532 5638 m
-3508 5638 l
-S
-3484 5639 m
-3460 5639 l
-S
-3436 5640 m
-3412 5640 l
-S
-3388 5641 m
-3364 5641 l
-S
-3340 5642 m
-3316 5642 l
-S
-3292 5643 m
-3268 5643 l
-S
-3244 5643 m
-3220 5644 l
-S
-3196 5644 m
-3172 5645 l
-S
-3148 5645 m
-3124 5646 l
-S
-3100 5646 m
-3076 5647 l
-S
-3052 5647 m
-3028 5648 l
-S
-3004 5648 m
-2980 5649 l
-S
-2956 5649 m
-2932 5650 l
-S
-2908 5650 m
-2884 5650 l
-S
-2860 5651 m
-2836 5651 l
-S
-2812 5652 m
-2788 5652 l
-S
-2764 5653 m
-2740 5653 l
-S
-2716 5654 m
-2692 5654 l
-S
-2668 5655 m
-2644 5655 l
-S
-2620 5656 m
-2596 5656 l
-S
-2572 5657 m
-2548 5657 l
-S
-2524 5657 m
-2500 5658 l
-S
-2476 5658 m
-2452 5659 l
-S
-2428 5659 m
-2404 5660 l
-S
-2380 5660 m
-2356 5661 l
-S
-2332 5661 m
-2308 5662 l
-S
-2284 5662 m
-2260 5663 l
-S
-2236 5663 m
-2212 5664 l
-S
-2188 5664 m
-2164 5665 l
-S
-2140 5665 m
-2116 5665 l
-S
-2092 5666 m
-2068 5666 l
-S
-2044 5667 m
-2020 5667 l
-S
-1996 5668 m
-1972 5668 l
-S
-1948 5669 m
-1924 5669 l
-S
-1900 5670 m
-1876 5670 l
-S
-1852 5671 m
-1828 5671 l
-S
-1804 5672 m
-1780 5672 l
-S
-1756 5672 m
-1732 5673 l
-S
-1708 5673 m
-1684 5674 l
-S
-1660 5674 m
-1636 5675 l
-S
-1612 5675 m
-1588 5676 l
-S
-1564 5676 m
-1540 5677 l
-S
-1516 5677 m
-1492 5678 l
-S
-1468 5678 m
-1444 5679 l
-S
-1420 5679 m
-1416 5679 l
-1396 5679 l
-S
-1372 5680 m
-1348 5680 l
-S
-1323 5681 m
-1299 5681 l
-S
-1275 5682 m
-1251 5682 l
-S
-1227 5683 m
-1203 5683 l
-S
-1179 5684 m
-1155 5684 l
-S
-1131 5685 m
-1107 5685 l
-S
-1083 5686 m
-1059 5686 l
-S
-1035 5687 m
-1011 5687 l
-S
-987 5687 m
-963 5688 l
-S
-939 5688 m
-915 5689 l
-S
-891 5689 m
-879 5690 l
-867 5690 l
-S
-843 5690 m
-819 5691 l
-S
-795 5691 m
-771 5692 l
-S
-747 5692 m
-723 5693 l
-S
-699 5693 m
-675 5694 l
-S
-651 5694 m
-627 5694 l
-S
-603 5695 m
-579 5695 l
-S
-555 5696 m
-533 5696 l
-S
-4877 4985 m
-4875 4985 l
-S
-4851 4986 m
-4827 4986 l
-S
-4803 4987 m
-4779 4987 l
-S
-4755 4988 m
-4731 4988 l
-S
-4707 4988 m
-4683 4989 l
-S
-4659 4989 m
-4635 4990 l
-S
-4611 4990 m
-4601 4991 l
-4587 4991 l
-S
-4563 4991 m
-4539 4992 l
-S
-4515 4992 m
-4491 4993 l
-S
-4467 4993 m
-4443 4994 l
-S
-4419 4994 m
-4395 4995 l
-S
-4371 4995 m
-4347 4996 l
-S
-4323 4996 m
-4299 4997 l
-S
-4275 4997 m
-4251 4997 l
-S
-4227 4998 m
-4203 4998 l
-S
-4179 4999 m
-4155 4999 l
-S
-4131 5000 m
-4107 5000 l
-S
-4083 5001 m
-4064 5001 l
-4059 5001 l
-S
-4035 5002 m
-4011 5002 l
-S
-3987 5003 m
-3963 5003 l
-S
-3939 5004 m
-3915 5004 l
-S
-3891 5005 m
-3867 5005 l
-S
-3843 5006 m
-3819 5006 l
-S
-3795 5007 m
-3770 5007 l
-S
-3746 5007 m
-3722 5008 l
-S
-3698 5008 m
-3674 5009 l
-S
-3650 5009 m
-3626 5010 l
-S
-3602 5010 m
-3578 5011 l
-S
-3554 5011 m
-3530 5012 l
-S
-3506 5012 m
-3482 5013 l
-S
-3458 5013 m
-3434 5014 l
-S
-3410 5014 m
-3386 5015 l
-S
-3362 5015 m
-3338 5016 l
-S
-3314 5016 m
-3290 5016 l
-S
-3266 5017 m
-3242 5017 l
-S
-3218 5018 m
-3194 5018 l
-S
-3170 5019 m
-3146 5019 l
-S
-3122 5020 m
-3098 5020 l
-S
-3074 5021 m
-3050 5021 l
-S
-3026 5022 m
-3002 5022 l
-S
-2978 5023 m
-2954 5023 l
-S
-2930 5024 m
-2906 5024 l
-S
-2882 5025 m
-2858 5025 l
-S
-2834 5025 m
-2810 5026 l
-S
-2786 5026 m
-2762 5027 l
-S
-2738 5027 m
-2714 5028 l
-S
-2690 5028 m
-2666 5029 l
-S
-2642 5029 m
-2618 5030 l
-S
-2594 5030 m
-2570 5031 l
-S
-2546 5031 m
-2522 5032 l
-S
-2498 5032 m
-2474 5033 l
-S
-2450 5033 m
-2426 5034 l
-S
-2402 5034 m
-2378 5035 l
-S
-2354 5035 m
-2330 5035 l
-S
-2306 5036 m
-2282 5036 l
-S
-2258 5037 m
-2234 5037 l
-S
-2210 5038 m
-2186 5038 l
-S
-2162 5039 m
-2138 5039 l
-S
-2114 5040 m
-2090 5040 l
-S
-2066 5041 m
-2042 5041 l
-S
-2018 5042 m
-1994 5042 l
-S
-1970 5043 m
-1946 5043 l
-S
-1922 5044 m
-1916 5044 l
-1898 5044 l
-S
-1874 5044 m
-1850 5045 l
-S
-1826 5045 m
-1802 5046 l
-S
-1778 5046 m
-1754 5047 l
-S
-1730 5047 m
-1706 5048 l
-S
-1682 5048 m
-1658 5049 l
-S
-1634 5049 m
-1610 5050 l
-S
-1586 5050 m
-1562 5051 l
-S
-1538 5051 m
-1514 5052 l
-S
-1490 5052 m
-1466 5053 l
-S
-1442 5053 m
-1418 5053 l
-S
-1393 5054 m
-1379 5054 l
-1369 5054 l
-S
-1345 5055 m
-1321 5055 l
-S
-1297 5056 m
-1273 5056 l
-S
-1249 5057 m
-1225 5057 l
-S
-1201 5058 m
-1177 5058 l
-S
-1153 5059 m
-1129 5059 l
-S
-1105 5060 m
-1081 5060 l
-S
-1057 5061 m
-1033 5061 l
-S
-1009 5062 m
-985 5062 l
-S
-961 5063 m
-937 5063 l
-S
-913 5063 m
-889 5064 l
-S
-865 5064 m
-842 5065 l
-841 5065 l
-S
-817 5065 m
-793 5066 l
-S
-769 5066 m
-745 5067 l
-S
-721 5067 m
-697 5068 l
-S
-673 5068 m
-649 5069 l
-S
-625 5069 m
-601 5070 l
-S
-577 5070 m
-553 5071 l
-S
-4873 4359 m
-4849 4359 l
-S
-4825 4360 m
-4801 4360 l
-S
-4777 4361 m
-4753 4361 l
-S
-4729 4362 m
-4705 4362 l
-S
-4681 4362 m
-4657 4363 l
-S
-4633 4363 m
-4609 4364 l
-S
-4585 4364 m
-4563 4365 l
-4561 4365 l
-S
-4537 4365 m
-4513 4366 l
-S
-4489 4366 m
-4465 4367 l
-S
-4441 4367 m
-4417 4368 l
-S
-4393 4368 m
-4369 4369 l
-S
-4345 4369 m
-4321 4370 l
-S
-4297 4370 m
-4273 4371 l
-S
-4249 4371 m
-4225 4372 l
-S
-4201 4372 m
-4177 4373 l
-S
-4153 4373 m
-4129 4374 l
-S
-4105 4374 m
-4081 4375 l
-S
-4057 4375 m
-4033 4375 l
-S
-4009 4376 m
-3985 4376 l
-S
-3961 4377 m
-3937 4377 l
-S
-3913 4378 m
-3889 4378 l
-S
-3865 4379 m
-3841 4379 l
-S
-3816 4380 m
-3792 4380 l
-S
-3768 4381 m
-3744 4381 l
-S
-3720 4382 m
-3696 4382 l
-S
-3672 4383 m
-3648 4383 l
-S
-3624 4384 m
-3600 4384 l
-S
-3576 4385 m
-3552 4385 l
-S
-3528 4386 m
-3504 4386 l
-S
-3480 4387 m
-3456 4387 l
-S
-3432 4387 m
-3408 4388 l
-S
-3384 4388 m
-3360 4389 l
-S
-3336 4389 m
-3312 4390 l
-S
-3288 4390 m
-3264 4391 l
-S
-3240 4391 m
-3216 4392 l
-S
-3192 4392 m
-3168 4393 l
-S
-3144 4393 m
-3120 4394 l
-S
-3096 4394 m
-3072 4395 l
-S
-3048 4395 m
-3024 4396 l
-S
-3000 4396 m
-2976 4397 l
-S
-2952 4397 m
-2928 4398 l
-S
-2904 4398 m
-2880 4399 l
-S
-2856 4399 m
-2832 4400 l
-S
-2808 4400 m
-2784 4400 l
-S
-2760 4401 m
-2736 4401 l
-S
-2712 4402 m
-2688 4402 l
-S
-2664 4403 m
-2640 4403 l
-S
-2616 4404 m
-2592 4404 l
-S
-2568 4405 m
-2544 4405 l
-S
-2520 4406 m
-2496 4406 l
-S
-2472 4407 m
-2448 4407 l
-S
-2424 4408 m
-2416 4408 l
-2400 4408 l
-S
-2376 4409 m
-2352 4409 l
-S
-2328 4410 m
-2304 4410 l
-S
-2280 4411 m
-2256 4411 l
-S
-2232 4412 m
-2208 4412 l
-S
-2184 4413 m
-2160 4413 l
-S
-2136 4413 m
-2112 4414 l
-S
-2088 4414 m
-2064 4415 l
-S
-2040 4415 m
-2016 4416 l
-S
-1992 4416 m
-1968 4417 l
-S
-1944 4417 m
-1920 4418 l
-S
-1896 4418 m
-1879 4419 l
-1872 4419 l
-S
-1848 4419 m
-1824 4420 l
-S
-1800 4420 m
-1776 4421 l
-S
-1752 4421 m
-1728 4422 l
-S
-1704 4422 m
-1680 4423 l
-S
-1656 4423 m
-1632 4424 l
-S
-1608 4424 m
-1584 4425 l
-S
-1560 4425 m
-1536 4426 l
-S
-1512 4426 m
-1488 4426 l
-S
-1464 4427 m
-1439 4427 l
-S
-1415 4428 m
-1391 4428 l
-S
-1367 4429 m
-1343 4429 l
-S
-1319 4430 m
-1295 4430 l
-S
-1271 4431 m
-1247 4431 l
-S
-1223 4432 m
-1199 4432 l
-S
-1175 4433 m
-1151 4433 l
-S
-1127 4434 m
-1103 4434 l
-S
-1079 4435 m
-1055 4435 l
-S
-1031 4436 m
-1007 4436 l
-S
-983 4437 m
-959 4437 l
-S
-935 4438 m
-911 4438 l
-S
-887 4439 m
-863 4439 l
-S
-839 4439 m
-815 4440 l
-S
-791 4440 m
-767 4441 l
-S
-743 4441 m
-719 4442 l
-S
-695 4442 m
-671 4443 l
-S
-647 4443 m
-623 4444 l
-S
-599 4444 m
-575 4445 l
-S
-551 4445 m
-533 4446 l
-S
-4877 3732 m
-4871 3732 l
-S
-4847 3733 m
-4823 3733 l
-S
-4799 3734 m
-4775 3734 l
-S
-4751 3735 m
-4727 3735 l
-S
-4703 3735 m
-4679 3736 l
-S
-4655 3736 m
-4631 3737 l
-S
-4607 3737 m
-4583 3738 l
-S
-4559 3738 m
-4535 3739 l
-S
-4511 3739 m
-4487 3740 l
-S
-4463 3740 m
-4439 3741 l
-S
-4415 3741 m
-4391 3742 l
-S
-4367 3742 m
-4343 3743 l
-S
-4319 3743 m
-4295 3744 l
-S
-4271 3744 m
-4247 3745 l
-S
-4223 3745 m
-4199 3746 l
-S
-4175 3746 m
-4151 3747 l
-S
-4127 3747 m
-4103 3748 l
-S
-4079 3748 m
-4055 3749 l
-S
-4031 3749 m
-4007 3750 l
-S
-3983 3750 m
-3959 3751 l
-S
-3935 3751 m
-3911 3752 l
-S
-3887 3752 m
-3863 3753 l
-S
-3839 3753 m
-3814 3754 l
-S
-3790 3754 m
-3766 3755 l
-S
-3742 3755 m
-3718 3755 l
-S
-3694 3756 m
-3670 3756 l
-S
-3646 3757 m
-3622 3757 l
-S
-3598 3758 m
-3574 3758 l
-S
-3550 3759 m
-3526 3759 l
-S
-3502 3760 m
-3478 3760 l
-S
-3454 3761 m
-3451 3761 l
-3430 3761 l
-S
-3406 3762 m
-3382 3762 l
-S
-3358 3763 m
-3334 3763 l
-S
-3310 3764 m
-3286 3764 l
-S
-3262 3765 m
-3238 3765 l
-S
-3214 3766 m
-3190 3766 l
-S
-3166 3767 m
-3142 3767 l
-S
-3118 3768 m
-3094 3768 l
-S
-3070 3769 m
-3046 3769 l
-S
-3022 3770 m
-2998 3770 l
-S
-2974 3771 m
-2950 3771 l
-S
-2926 3772 m
-2914 3772 l
-2902 3772 l
-S
-2878 3773 m
-2854 3773 l
-S
-2830 3774 m
-2806 3774 l
-S
-2782 3775 m
-2758 3775 l
-S
-2734 3776 m
-2710 3776 l
-S
-2686 3776 m
-2662 3777 l
-S
-2638 3777 m
-2614 3778 l
-S
-2590 3778 m
-2566 3779 l
-S
-2542 3779 m
-2518 3780 l
-S
-2494 3780 m
-2470 3781 l
-S
-2446 3781 m
-2422 3782 l
-S
-2398 3782 m
-2378 3783 l
-2374 3783 l
-S
-2350 3783 m
-2326 3784 l
-S
-2302 3784 m
-2278 3785 l
-S
-2254 3785 m
-2230 3786 l
-S
-2206 3786 m
-2182 3787 l
-S
-2158 3787 m
-2134 3788 l
-S
-2110 3788 m
-2086 3789 l
-S
-2062 3789 m
-2038 3790 l
-S
-2014 3790 m
-1990 3791 l
-S
-1966 3791 m
-1942 3792 l
-S
-1918 3792 m
-1894 3793 l
-S
-1870 3793 m
-1846 3794 l
-S
-1822 3794 m
-1798 3795 l
-S
-1774 3795 m
-1750 3796 l
-S
-1726 3796 m
-1702 3796 l
-S
-1678 3797 m
-1654 3797 l
-S
-1630 3798 m
-1606 3798 l
-S
-1582 3799 m
-1558 3799 l
-S
-1534 3800 m
-1510 3800 l
-S
-1486 3801 m
-1462 3801 l
-S
-1438 3802 m
-1414 3802 l
-S
-1389 3803 m
-1365 3803 l
-S
-1341 3804 m
-1317 3804 l
-S
-1293 3805 m
-1269 3805 l
-S
-1245 3806 m
-1221 3806 l
-S
-1197 3807 m
-1173 3807 l
-S
-1149 3808 m
-1125 3808 l
-S
-1101 3809 m
-1077 3809 l
-S
-1053 3810 m
-1029 3810 l
-S
-1005 3811 m
-981 3811 l
-S
-957 3812 m
-933 3812 l
-S
-909 3813 m
-885 3813 l
-S
-861 3814 m
-837 3814 l
-S
-813 3815 m
-789 3815 l
-S
-765 3816 m
-741 3816 l
-S
-717 3817 m
-693 3817 l
-S
-669 3817 m
-645 3818 l
-S
-621 3818 m
-597 3819 l
-S
-573 3819 m
-549 3820 l
-S
-4869 3105 m
-4845 3106 l
-S
-4821 3106 m
-4797 3107 l
-S
-4773 3107 m
-4749 3108 l
-S
-4725 3108 m
-4701 3109 l
-S
-4677 3109 m
-4653 3110 l
-S
-4629 3110 m
-4605 3111 l
-S
-4581 3111 m
-4557 3112 l
-S
-4533 3112 m
-4509 3113 l
-S
-4485 3113 m
-4461 3114 l
-S
-4437 3114 m
-4413 3115 l
-S
-4389 3115 m
-4365 3116 l
-S
-4341 3116 m
-4317 3117 l
-S
-4293 3117 m
-4269 3118 l
-S
-4245 3118 m
-4221 3119 l
-S
-4197 3119 m
-4173 3120 l
-S
-4149 3120 m
-4125 3121 l
-S
-4101 3121 m
-4077 3122 l
-S
-4053 3122 m
-4029 3123 l
-S
-4005 3123 m
-3981 3124 l
-S
-3957 3124 m
-3950 3124 l
-3933 3125 l
-S
-3909 3125 m
-3885 3126 l
-S
-3861 3126 m
-3837 3127 l
-S
-3813 3127 m
-3789 3128 l
-S
-3764 3128 m
-3740 3129 l
-S
-3716 3129 m
-3692 3130 l
-S
-3668 3130 m
-3644 3131 l
-S
-3620 3131 m
-3596 3132 l
-S
-3572 3132 m
-3548 3133 l
-S
-3524 3133 m
-3500 3134 l
-S
-3476 3134 m
-3452 3135 l
-S
-3428 3135 m
-3413 3135 l
-3404 3136 l
-S
-3380 3136 m
-3356 3137 l
-S
-3332 3137 m
-3308 3138 l
-S
-3284 3138 m
-3260 3139 l
-S
-3236 3139 m
-3212 3140 l
-S
-3188 3140 m
-3164 3141 l
-S
-3140 3141 m
-3116 3142 l
-S
-3092 3142 m
-3068 3143 l
-S
-3044 3143 m
-3020 3144 l
-S
-2996 3144 m
-2972 3145 l
-S
-2948 3145 m
-2924 3146 l
-S
-2900 3146 m
-2876 3147 l
-S
-2852 3147 m
-2828 3148 l
-S
-2804 3148 m
-2780 3149 l
-S
-2756 3149 m
-2732 3150 l
-S
-2708 3150 m
-2684 3151 l
-S
-2660 3151 m
-2636 3152 l
-S
-2612 3152 m
-2588 3152 l
-S
-2564 3153 m
-2540 3153 l
-S
-2516 3154 m
-2492 3154 l
-S
-2468 3155 m
-2444 3155 l
-S
-2420 3156 m
-2396 3156 l
-S
-2372 3157 m
-2348 3157 l
-S
-2324 3158 m
-2300 3158 l
-S
-2276 3159 m
-2252 3159 l
-S
-2228 3160 m
-2204 3160 l
-S
-2180 3161 m
-2156 3161 l
-S
-2132 3162 m
-2108 3162 l
-S
-2084 3163 m
-2060 3163 l
-S
-2036 3164 m
-2012 3164 l
-S
-1988 3165 m
-1964 3165 l
-S
-1940 3166 m
-1916 3166 l
-S
-1892 3167 m
-1868 3167 l
-S
-1844 3168 m
-1820 3168 l
-S
-1796 3169 m
-1772 3169 l
-S
-1748 3170 m
-1724 3170 l
-S
-1700 3171 m
-1676 3171 l
-S
-1652 3172 m
-1628 3172 l
-S
-1604 3173 m
-1580 3173 l
-S
-1556 3174 m
-1532 3174 l
-S
-1508 3175 m
-1484 3175 l
-S
-1460 3176 m
-1436 3176 l
-S
-1412 3177 m
-1388 3177 l
-S
-1364 3178 m
-1340 3178 l
-S
-1315 3179 m
-1291 3179 l
-S
-1267 3180 m
-1265 3180 l
-1243 3180 l
-S
-1219 3181 m
-1195 3181 l
-S
-1171 3182 m
-1147 3182 l
-S
-1123 3183 m
-1099 3183 l
-S
-1075 3184 m
-1051 3184 l
-S
-1027 3185 m
-1003 3185 l
-S
-979 3186 m
-955 3186 l
-S
-931 3187 m
-907 3187 l
-S
-883 3188 m
-859 3188 l
-S
-835 3189 m
-811 3189 l
-S
-787 3190 m
-763 3190 l
-S
-739 3191 m
-728 3191 l
-715 3191 l
-S
-691 3192 m
-667 3192 l
-S
-643 3193 m
-619 3193 l
-S
-595 3194 m
-571 3194 l
-S
-547 3195 m
-533 3195 l
-S
-4877 2479 m
-4867 2479 l
-S
-4843 2479 m
-4819 2480 l
-S
-4795 2480 m
-4771 2481 l
-S
-4747 2481 m
-4723 2482 l
-S
-4699 2482 m
-4675 2483 l
-S
-4651 2483 m
-4627 2484 l
-S
-4603 2484 m
-4579 2485 l
-S
-4555 2485 m
-4531 2486 l
-S
-4507 2486 m
-4483 2487 l
-S
-4459 2487 m
-4448 2488 l
-4435 2488 l
-S
-4411 2488 m
-4387 2489 l
-S
-4363 2489 m
-4339 2490 l
-S
-4315 2490 m
-4291 2491 l
-S
-4267 2491 m
-4243 2492 l
-S
-4219 2492 m
-4195 2493 l
-S
-4171 2493 m
-4147 2494 l
-S
-4123 2494 m
-4099 2495 l
-S
-4075 2495 m
-4051 2496 l
-S
-4027 2496 m
-4003 2497 l
-S
-3979 2497 m
-3955 2498 l
-S
-3931 2498 m
-3911 2499 l
-3907 2499 l
-S
-3883 2499 m
-3859 2500 l
-S
-3835 2500 m
-3811 2501 l
-S
-3787 2501 m
-3763 2502 l
-S
-3739 2502 m
-3715 2503 l
-S
-3691 2503 m
-3667 2504 l
-S
-3642 2504 m
-3618 2505 l
-S
-3594 2505 m
-3570 2506 l
-S
-3546 2506 m
-3522 2507 l
-S
-3498 2507 m
-3474 2508 l
-S
-3450 2508 m
-3426 2509 l
-S
-3402 2509 m
-3378 2510 l
-S
-3354 2510 m
-3330 2511 l
-S
-3306 2511 m
-3282 2512 l
-S
-3258 2512 m
-3234 2513 l
-S
-3210 2513 m
-3186 2514 l
-S
-3162 2514 m
-3138 2515 l
-S
-3114 2515 m
-3090 2516 l
-S
-3066 2516 m
-3042 2517 l
-S
-3018 2517 m
-2994 2518 l
-S
-2970 2519 m
-2946 2519 l
-S
-2922 2520 m
-2898 2520 l
-S
-2874 2521 m
-2850 2521 l
-S
-2826 2522 m
-2802 2522 l
-S
-2778 2523 m
-2754 2523 l
-S
-2730 2524 m
-2706 2524 l
-S
-2682 2525 m
-2658 2525 l
-S
-2634 2526 m
-2610 2526 l
-S
-2586 2527 m
-2562 2527 l
-S
-2538 2528 m
-2514 2528 l
-S
-2490 2529 m
-2466 2529 l
-S
-2442 2530 m
-2418 2530 l
-S
-2394 2531 m
-2370 2531 l
-S
-2346 2532 m
-2322 2532 l
-S
-2298 2533 m
-2274 2533 l
-S
-2250 2534 m
-2226 2534 l
-S
-2202 2535 m
-2178 2535 l
-S
-2154 2536 m
-2130 2536 l
-S
-2106 2537 m
-2082 2537 l
-S
-2058 2538 m
-2034 2538 l
-S
-2010 2539 m
-1986 2539 l
-S
-1962 2540 m
-1938 2540 l
-S
-1914 2541 m
-1890 2541 l
-S
-1866 2542 m
-1842 2542 l
-S
-1818 2543 m
-1794 2543 l
-S
-1770 2544 m
-1763 2544 l
-1746 2544 l
-S
-1722 2545 m
-1698 2545 l
-S
-1674 2546 m
-1650 2546 l
-S
-1626 2547 m
-1602 2547 l
-S
-1578 2548 m
-1554 2548 l
-S
-1530 2549 m
-1506 2549 l
-S
-1482 2550 m
-1458 2550 l
-S
-1434 2551 m
-1410 2551 l
-S
-1386 2552 m
-1362 2552 l
-S
-1338 2553 m
-1314 2553 l
-S
-1290 2554 m
-1266 2554 l
-S
-1242 2555 m
-1226 2555 l
-1218 2555 l
-S
-1194 2556 m
-1170 2556 l
-S
-1145 2557 m
-1121 2557 l
-S
-1097 2558 m
-1073 2558 l
-S
-1049 2559 m
-1025 2559 l
-S
-1001 2560 m
-977 2560 l
-S
-953 2561 m
-929 2561 l
-S
-905 2562 m
-881 2562 l
-S
-857 2563 m
-833 2563 l
-S
-809 2564 m
-785 2564 l
-S
-761 2565 m
-737 2565 l
-S
-713 2566 m
-689 2566 l
-S
-665 2567 m
-641 2567 l
-S
-617 2568 m
-593 2568 l
-S
-569 2569 m
-545 2569 l
-S
-4865 1852 m
-4841 1853 l
-S
-4817 1853 m
-4793 1854 l
-S
-4769 1854 m
-4745 1855 l
-S
-4721 1855 m
-4697 1856 l
-S
-4673 1856 m
-4649 1857 l
-S
-4625 1857 m
-4601 1858 l
-S
-4577 1858 m
-4553 1859 l
-S
-4529 1859 m
-4505 1860 l
-S
-4481 1860 m
-4457 1861 l
-S
-4433 1861 m
-4409 1862 l
-S
-4385 1862 m
-4361 1863 l
-S
-4337 1863 m
-4313 1864 l
-S
-4289 1864 m
-4265 1865 l
-S
-4241 1865 m
-4217 1866 l
-S
-4193 1866 m
-4169 1867 l
-S
-4145 1867 m
-4121 1868 l
-S
-4097 1869 m
-4073 1869 l
-S
-4049 1870 m
-4025 1870 l
-S
-4001 1871 m
-3977 1871 l
-S
-3953 1872 m
-3929 1872 l
-S
-3905 1873 m
-3881 1873 l
-S
-3857 1874 m
-3833 1874 l
-S
-3809 1875 m
-3785 1875 l
-S
-3761 1876 m
-3737 1876 l
-S
-3713 1877 m
-3689 1877 l
-S
-3665 1878 m
-3641 1878 l
-S
-3617 1879 m
-3593 1879 l
-S
-3569 1880 m
-3545 1880 l
-S
-3521 1881 m
-3497 1881 l
-S
-3473 1882 m
-3448 1882 l
-S
-3424 1883 m
-3400 1883 l
-S
-3376 1884 m
-3352 1884 l
-S
-3328 1885 m
-3304 1885 l
-S
-3280 1886 m
-3256 1886 l
-S
-3232 1887 m
-3208 1887 l
-S
-3184 1888 m
-3160 1888 l
-S
-3136 1889 m
-3112 1889 l
-S
-3088 1890 m
-3064 1890 l
-S
-3040 1891 m
-3016 1891 l
-S
-2992 1892 m
-2968 1892 l
-S
-2944 1893 m
-2920 1893 l
-S
-2896 1894 m
-2872 1894 l
-S
-2848 1895 m
-2824 1895 l
-S
-2800 1896 m
-2797 1896 l
-2776 1896 l
-S
-2752 1897 m
-2728 1897 l
-S
-2704 1898 m
-2680 1898 l
-S
-2656 1899 m
-2632 1900 l
-S
-2608 1900 m
-2584 1901 l
-S
-2560 1901 m
-2536 1902 l
-S
-2512 1902 m
-2488 1903 l
-S
-2464 1903 m
-2440 1904 l
-S
-2416 1904 m
-2392 1905 l
-S
-2368 1905 m
-2344 1906 l
-S
-2320 1906 m
-2296 1907 l
-S
-2272 1907 m
-2260 1907 l
-2248 1908 l
-S
-2224 1908 m
-2200 1909 l
-S
-2176 1909 m
-2152 1910 l
-S
-2128 1910 m
-2104 1911 l
-S
-2080 1911 m
-2056 1912 l
-S
-2032 1912 m
-2008 1913 l
-S
-1984 1913 m
-1960 1914 l
-S
-1936 1914 m
-1912 1915 l
-S
-1888 1915 m
-1864 1916 l
-S
-1840 1916 m
-1816 1917 l
-S
-1792 1917 m
-1768 1918 l
-S
-1744 1918 m
-1724 1919 l
-1720 1919 l
-S
-1696 1919 m
-1672 1920 l
-S
-1648 1920 m
-1624 1921 l
-S
-1600 1921 m
-1576 1922 l
-S
-1552 1922 m
-1528 1923 l
-S
-1504 1923 m
-1480 1924 l
-S
-1456 1924 m
-1432 1925 l
-S
-1408 1925 m
-1384 1926 l
-S
-1360 1926 m
-1336 1927 l
-S
-1312 1927 m
-1288 1928 l
-S
-1264 1928 m
-1240 1929 l
-S
-1216 1930 m
-1192 1930 l
-S
-1168 1931 m
-1144 1931 l
-S
-1120 1932 m
-1096 1932 l
-S
-1072 1933 m
-1048 1933 l
-S
-1024 1934 m
-1000 1934 l
-S
-976 1935 m
-952 1935 l
-S
-927 1936 m
-903 1936 l
-S
-879 1937 m
-855 1937 l
-S
-831 1938 m
-807 1938 l
-S
-783 1939 m
-759 1939 l
-S
-735 1940 m
-711 1940 l
-S
-687 1941 m
-663 1941 l
-S
-639 1942 m
-615 1942 l
-S
-591 1943 m
-567 1943 l
-S
-543 1944 m
-533 1944 l
-S
-4877 2742 m
-4876 2728 l
-S
-4875 2704 m
-4873 2680 l
-S
-4872 2656 m
-4870 2632 l
-S
-4869 2608 m
-4867 2584 l
-S
-4866 2560 m
-4864 2536 l
-S
-4863 2512 m
-4861 2488 l
-S
-4860 2464 m
-4858 2440 l
-S
-4857 2416 m
-4855 2392 l
-S
-4854 2368 m
-4852 2344 l
-S
-4851 2320 m
-4849 2296 l
-S
-4848 2273 m
-4846 2249 l
-S
-4845 2225 m
-4843 2201 l
-S
-4842 2177 m
-4840 2153 l
-S
-4838 2129 m
-4838 2121 l
-4837 2105 l
-S
-4835 2081 m
-4834 2057 l
-S
-4832 2033 m
-4831 2009 l
-S
-4829 1985 m
-4828 1961 l
-S
-4826 1937 m
-4825 1913 l
-S
-4823 1889 m
-4822 1865 l
-S
-4820 1841 m
-4819 1817 l
-S
-4817 1793 m
-4816 1777 l
-S
-4502 6121 m
-4501 6113 l
-S
-4500 6089 m
-4498 6065 l
-S
-4497 6041 m
-4496 6017 l
-S
-4494 5993 m
-4493 5969 l
-S
-4491 5945 m
-4490 5921 l
-S
-4489 5897 m
-4488 5888 l
-4487 5874 l
-S
-4486 5850 m
-4484 5826 l
-S
-4483 5802 m
-4482 5778 l
-S
-4480 5754 m
-4479 5730 l
-S
-4477 5706 m
-4476 5682 l
-S
-4475 5658 m
-4473 5634 l
-S
-4472 5610 m
-4470 5586 l
-S
-4469 5562 m
-4468 5538 l
-S
-4466 5514 m
-4465 5490 l
-S
-4463 5466 m
-4462 5442 l
-S
-4461 5418 m
-4459 5394 l
-S
-4458 5370 m
-4457 5351 l
-4456 5346 l
-S
-4455 5322 m
-4454 5298 l
-S
-4452 5274 m
-4451 5250 l
-S
-4449 5226 m
-4448 5202 l
-S
-4446 5178 m
-4445 5155 l
-S
-4444 5131 m
-4442 5107 l
-S
-4441 5083 m
-4439 5059 l
-S
-4438 5035 m
-4436 5011 l
-S
-4435 4987 m
-4434 4963 l
-S
-4432 4939 m
-4431 4915 l
-S
-4429 4891 m
-4428 4867 l
-S
-4426 4843 m
-4425 4819 l
-S
-4424 4795 m
-4422 4771 l
-S
-4421 4747 m
-4419 4723 l
-S
-4418 4699 m
-4416 4675 l
-S
-4415 4651 m
-4414 4627 l
-S
-4412 4603 m
-4411 4579 l
-S
-4409 4555 m
-4408 4531 l
-S
-4406 4507 m
-4405 4484 l
-S
-4403 4460 m
-4402 4436 l
-S
-4401 4412 m
-4399 4388 l
-S
-4398 4364 m
-4396 4340 l
-S
-4395 4316 m
-4393 4292 l
-S
-4392 4268 m
-4390 4244 l
-S
-4389 4220 m
-4388 4196 l
-S
-4386 4172 m
-4385 4148 l
-S
-4383 4124 m
-4382 4100 l
-S
-4380 4076 m
-4379 4052 l
-S
-4377 4028 m
-4376 4004 l
-S
-4374 3980 m
-4373 3956 l
-S
-4372 3932 m
-4370 3908 l
-S
-4369 3884 m
-4367 3860 l
-S
-4366 3836 m
-4364 3813 l
-S
-4363 3789 m
-4361 3765 l
-S
-4360 3741 m
-4358 3717 l
-S
-4357 3693 m
-4355 3669 l
-S
-4354 3645 m
-4353 3621 l
-S
-4351 3597 m
-4350 3573 l
-S
-4348 3549 m
-4347 3525 l
-S
-4345 3501 m
-4344 3477 l
-S
-4342 3453 m
-4341 3429 l
-S
-4339 3405 m
-4338 3381 l
-S
-4336 3357 m
-4335 3333 l
-S
-4333 3309 m
-4332 3285 l
-S
-4330 3261 m
-4329 3237 l
-S
-4327 3213 m
-4327 3206 l
-4326 3190 l
-S
-4324 3166 m
-4323 3142 l
-S
-4321 3118 m
-4320 3094 l
-S
-4318 3070 m
-4317 3046 l
-S
-4316 3022 m
-4314 2998 l
-S
-4313 2974 m
-4311 2950 l
-S
-4310 2926 m
-4308 2902 l
-S
-4307 2878 m
-4305 2854 l
-S
-4304 2830 m
-4302 2806 l
-S
-4301 2782 m
-4299 2758 l
-S
-4298 2734 m
-4296 2710 l
-S
-4295 2686 m
-4294 2670 l
-4293 2662 l
-S
-4292 2638 m
-4290 2614 l
-S
-4289 2590 m
-4287 2567 l
-S
-4286 2543 m
-4284 2519 l
-S
-4283 2495 m
-4281 2471 l
-S
-4280 2447 m
-4278 2423 l
-S
-4277 2399 m
-4275 2375 l
-S
-4274 2351 m
-4272 2327 l
-S
-4270 2303 m
-4269 2279 l
-S
-4267 2255 m
-4266 2231 l
-S
-4264 2207 m
-4263 2183 l
-S
-4261 2159 m
-4260 2135 l
-S
-4258 2111 m
-4257 2087 l
-S
-4255 2063 m
-4254 2039 l
-S
-4252 2015 m
-4251 1991 l
-S
-4249 1968 m
-4248 1944 l
-S
-4246 1920 m
-4245 1896 l
-S
-4243 1872 m
-4242 1848 l
-S
-4240 1824 m
-4239 1800 l
-S
-3923 6120 m
-3921 6096 l
-S
-3920 6072 m
-3918 6048 l
-S
-3917 6024 m
-3916 6000 l
-S
-3914 5976 m
-3913 5952 l
-S
-3912 5928 m
-3910 5904 l
-S
-3909 5880 m
-3907 5856 l
-S
-3906 5832 m
-3905 5808 l
-S
-3903 5784 m
-3902 5760 l
-S
-3900 5736 m
-3899 5712 l
-S
-3898 5688 m
-3896 5664 l
-S
-3895 5640 m
-3893 5616 l
-S
-3892 5592 m
-3890 5568 l
-S
-3889 5544 m
-3888 5521 l
-S
-3886 5497 m
-3885 5473 l
-S
-3883 5449 m
-3882 5425 l
-S
-3881 5401 m
-3879 5377 l
-S
-3878 5353 m
-3876 5329 l
-S
-3875 5305 m
-3874 5281 l
-S
-3872 5257 m
-3871 5233 l
-S
-3869 5209 m
-3868 5185 l
-S
-3866 5161 m
-3865 5137 l
-S
-3864 5113 m
-3862 5089 l
-S
-3861 5065 m
-3859 5041 l
-S
-3858 5017 m
-3857 4993 l
-S
-3855 4969 m
-3854 4945 l
-S
-3852 4921 m
-3851 4897 l
-S
-3849 4873 m
-3848 4849 l
-S
-3847 4826 m
-3845 4802 l
-S
-3844 4778 m
-3842 4754 l
-S
-3841 4730 m
-3839 4706 l
-S
-3838 4682 m
-3836 4658 l
-S
-3835 4634 m
-3834 4610 l
-S
-3832 4586 m
-3831 4562 l
-S
-3829 4538 m
-3828 4514 l
-S
-3826 4490 m
-3825 4466 l
-S
-3823 4442 m
-3822 4418 l
-S
-3821 4394 m
-3819 4370 l
-S
-3818 4346 m
-3816 4322 l
-S
-3815 4298 m
-3814 4290 l
-3813 4274 l
-S
-3812 4250 m
-3810 4226 l
-S
-3809 4202 m
-3808 4178 l
-S
-3806 4155 m
-3805 4131 l
-S
-3803 4107 m
-3802 4083 l
-S
-3800 4059 m
-3799 4035 l
-S
-3797 4011 m
-3796 3987 l
-S
-3794 3963 m
-3793 3939 l
-S
-3792 3915 m
-3790 3891 l
-S
-3789 3867 m
-3787 3843 l
-S
-3786 3819 m
-3784 3795 l
-S
-3783 3771 m
-3782 3754 l
-3781 3747 l
-S
-3780 3723 m
-3778 3699 l
-S
-3777 3675 m
-3775 3651 l
-S
-3774 3627 m
-3772 3603 l
-S
-3771 3579 m
-3770 3555 l
-S
-3768 3531 m
-3767 3508 l
-S
-3765 3484 m
-3764 3460 l
-S
-3762 3436 m
-3761 3412 l
-S
-3759 3388 m
-3758 3364 l
-S
-3756 3340 m
-3755 3316 l
-S
-3753 3292 m
-3752 3268 l
-S
-3750 3244 m
-3749 3220 l
-S
-3747 3196 m
-3746 3172 l
-S
-3744 3148 m
-3743 3124 l
-S
-3741 3100 m
-3740 3076 l
-S
-3738 3052 m
-3737 3028 l
-S
-3735 3004 m
-3734 2980 l
-S
-3732 2956 m
-3731 2932 l
-S
-3730 2908 m
-3728 2885 l
-S
-3727 2861 m
-3725 2837 l
-S
-3724 2813 m
-3722 2789 l
-S
-3721 2765 m
-3719 2741 l
-S
-3718 2717 m
-3716 2693 l
-S
-3715 2669 m
-3713 2645 l
-S
-3712 2621 m
-3710 2597 l
-S
-3709 2573 m
-3707 2549 l
-S
-3706 2525 m
-3704 2501 l
-S
-3703 2477 m
-3701 2453 l
-S
-3699 2429 m
-3698 2405 l
-S
-3696 2381 m
-3695 2357 l
-S
-3693 2333 m
-3692 2309 l
-S
-3690 2286 m
-3689 2262 l
-S
-3687 2238 m
-3686 2214 l
-S
-3684 2190 m
-3683 2166 l
-S
-3681 2142 m
-3680 2118 l
-S
-3678 2094 m
-3677 2070 l
-S
-3675 2046 m
-3674 2022 l
-S
-3672 1998 m
-3671 1974 l
-S
-3669 1950 m
-3668 1926 l
-S
-3666 1902 m
-3665 1878 l
-S
-3663 1854 m
-3662 1830 l
-S
-3660 1806 m
-3658 1782 l
-S
-3343 6102 m
-3341 6078 l
-S
-3340 6054 m
-3339 6030 l
-S
-3337 6006 m
-3336 5982 l
-S
-3334 5958 m
-3333 5934 l
-S
-3332 5910 m
-3332 5910 l
-3330 5887 l
-S
-3329 5863 m
-3327 5839 l
-S
-3326 5815 m
-3325 5791 l
-S
-3323 5767 m
-3322 5743 l
-S
-3320 5719 m
-3319 5695 l
-S
-3318 5671 m
-3316 5647 l
-S
-3315 5623 m
-3313 5599 l
-S
-3312 5575 m
-3311 5551 l
-S
-3309 5527 m
-3308 5503 l
-S
-3306 5479 m
-3305 5455 l
-S
-3304 5431 m
-3302 5407 l
-S
-3301 5383 m
-3300 5374 l
-3299 5359 l
-S
-3298 5335 m
-3296 5311 l
-S
-3295 5287 m
-3294 5263 l
-S
-3292 5239 m
-3291 5215 l
-S
-3289 5191 m
-3288 5168 l
-S
-3287 5144 m
-3285 5120 l
-S
-3284 5096 m
-3282 5072 l
-S
-3281 5048 m
-3279 5024 l
-S
-3278 5000 m
-3277 4976 l
-S
-3275 4952 m
-3274 4928 l
-S
-3272 4904 m
-3271 4880 l
-S
-3269 4856 m
-3268 4838 l
-3268 4832 l
-S
-3267 4808 m
-3265 4784 l
-S
-3264 4760 m
-3262 4736 l
-S
-3261 4712 m
-3259 4688 l
-S
-3258 4664 m
-3256 4640 l
-S
-3255 4616 m
-3254 4592 l
-S
-3252 4568 m
-3251 4544 l
-S
-3249 4520 m
-3248 4497 l
-S
-3246 4473 m
-3245 4449 l
-S
-3244 4425 m
-3242 4401 l
-S
-3241 4377 m
-3239 4353 l
-S
-3238 4329 m
-3236 4305 l
-S
-3235 4281 m
-3233 4257 l
-S
-3232 4233 m
-3231 4209 l
-S
-3229 4185 m
-3228 4161 l
-S
-3226 4137 m
-3225 4113 l
-S
-3223 4089 m
-3222 4065 l
-S
-3220 4041 m
-3219 4017 l
-S
-3217 3993 m
-3216 3969 l
-S
-3214 3945 m
-3213 3921 l
-S
-3212 3897 m
-3210 3873 l
-S
-3209 3849 m
-3207 3826 l
-S
-3206 3802 m
-3204 3778 l
-S
-3203 3754 m
-3201 3730 l
-S
-3200 3706 m
-3198 3682 l
-S
-3197 3658 m
-3195 3634 l
-S
-3194 3610 m
-3192 3586 l
-S
-3191 3562 m
-3190 3538 l
-S
-3188 3514 m
-3187 3490 l
-S
-3185 3466 m
-3184 3442 l
-S
-3182 3418 m
-3181 3394 l
-S
-3179 3370 m
-3178 3346 l
-S
-3176 3322 m
-3175 3298 l
-S
-3173 3274 m
-3172 3250 l
-S
-3170 3226 m
-3169 3203 l
-S
-3167 3179 m
-3166 3155 l
-S
-3164 3131 m
-3163 3107 l
-S
-3161 3083 m
-3160 3059 l
-S
-3158 3035 m
-3157 3011 l
-S
-3155 2987 m
-3154 2963 l
-S
-3152 2939 m
-3151 2915 l
-S
-3149 2891 m
-3148 2867 l
-S
-3146 2843 m
-3145 2819 l
-S
-3143 2795 m
-3142 2771 l
-S
-3141 2747 m
-3139 2723 l
-S
-3138 2699 m
-3137 2694 l
-3136 2675 l
-S
-3135 2651 m
-3133 2627 l
-S
-3131 2603 m
-3130 2580 l
-S
-3128 2556 m
-3127 2532 l
-S
-3125 2508 m
-3124 2484 l
-S
-3122 2460 m
-3121 2436 l
-S
-3119 2412 m
-3118 2388 l
-S
-3116 2364 m
-3115 2340 l
-S
-3113 2316 m
-3112 2292 l
-S
-3110 2268 m
-3109 2244 l
-S
-3107 2220 m
-3106 2196 l
-S
-3104 2172 m
-3103 2158 l
-3103 2148 l
-S
-3101 2124 m
-3100 2100 l
-S
-3098 2076 m
-3097 2052 l
-S
-3095 2028 m
-3094 2004 l
-S
-3092 1981 m
-3091 1957 l
-S
-3089 1933 m
-3088 1909 l
-S
-3086 1885 m
-3084 1861 l
-S
-3083 1837 m
-3081 1813 l
-S
-3080 1789 m
-3079 1777 l
-S
-2765 6121 m
-2764 6109 l
-S
-2763 6085 m
-2761 6061 l
-S
-2760 6037 m
-2759 6013 l
-S
-2757 5989 m
-2756 5965 l
-S
-2755 5941 m
-2753 5921 l
-2753 5917 l
-S
-2752 5893 m
-2750 5869 l
-S
-2749 5845 m
-2748 5821 l
-S
-2746 5797 m
-2745 5773 l
-S
-2743 5749 m
-2742 5725 l
-S
-2741 5701 m
-2739 5677 l
-S
-2738 5653 m
-2736 5629 l
-S
-2735 5605 m
-2733 5581 l
-S
-2732 5557 m
-2731 5534 l
-S
-2729 5510 m
-2728 5486 l
-S
-2726 5462 m
-2725 5438 l
-S
-2724 5414 m
-2722 5390 l
-S
-2721 5366 m
-2719 5342 l
-S
-2718 5318 m
-2717 5294 l
-S
-2715 5270 m
-2714 5246 l
-S
-2712 5222 m
-2711 5198 l
-S
-2709 5174 m
-2708 5150 l
-S
-2707 5126 m
-2705 5102 l
-S
-2704 5078 m
-2702 5054 l
-S
-2701 5030 m
-2699 5006 l
-S
-2698 4982 m
-2697 4958 l
-S
-2695 4934 m
-2694 4910 l
-S
-2692 4886 m
-2691 4862 l
-S
-2689 4839 m
-2688 4815 l
-S
-2687 4791 m
-2685 4767 l
-S
-2684 4743 m
-2682 4719 l
-S
-2681 4695 m
-2679 4671 l
-S
-2678 4647 m
-2677 4623 l
-S
-2675 4599 m
-2674 4575 l
-S
-2672 4551 m
-2671 4527 l
-S
-2669 4503 m
-2668 4479 l
-S
-2666 4455 m
-2665 4431 l
-S
-2664 4407 m
-2662 4383 l
-S
-2661 4359 m
-2659 4335 l
-S
-2658 4311 m
-2656 4287 l
-S
-2655 4263 m
-2653 4239 l
-S
-2652 4215 m
-2651 4191 l
-S
-2649 4168 m
-2648 4144 l
-S
-2646 4120 m
-2645 4096 l
-S
-2643 4072 m
-2642 4048 l
-S
-2640 4024 m
-2639 4000 l
-S
-2637 3976 m
-2636 3952 l
-S
-2634 3928 m
-2633 3904 l
-S
-2632 3880 m
-2630 3856 l
-S
-2629 3832 m
-2627 3808 l
-S
-2626 3784 m
-2625 3778 l
-2624 3760 l
-S
-2623 3736 m
-2621 3712 l
-S
-2620 3688 m
-2618 3664 l
-S
-2617 3640 m
-2615 3616 l
-S
-2614 3592 m
-2612 3568 l
-S
-2611 3544 m
-2610 3521 l
-S
-2608 3497 m
-2607 3473 l
-S
-2605 3449 m
-2604 3425 l
-S
-2602 3401 m
-2601 3377 l
-S
-2599 3353 m
-2598 3329 l
-S
-2596 3305 m
-2595 3281 l
-S
-2593 3257 m
-2592 3242 l
-2592 3233 l
-S
-2590 3209 m
-2589 3185 l
-S
-2587 3161 m
-2586 3137 l
-S
-2584 3113 m
-2583 3089 l
-S
-2581 3065 m
-2580 3041 l
-S
-2578 3017 m
-2577 2993 l
-S
-2575 2969 m
-2574 2945 l
-S
-2572 2921 m
-2571 2898 l
-S
-2569 2874 m
-2568 2850 l
-S
-2566 2826 m
-2565 2802 l
-S
-2563 2778 m
-2562 2754 l
-S
-2560 2730 m
-2559 2706 l
-2559 2706 l
-S
-2557 2682 m
-2556 2658 l
-S
-2554 2634 m
-2553 2610 l
-S
-2551 2586 m
-2550 2562 l
-S
-2548 2538 m
-2547 2514 l
-S
-2545 2490 m
-2544 2466 l
-S
-2542 2442 m
-2541 2418 l
-S
-2539 2394 m
-2538 2370 l
-S
-2536 2346 m
-2535 2322 l
-S
-2533 2299 m
-2532 2275 l
-S
-2530 2251 m
-2529 2227 l
-S
-2527 2203 m
-2526 2179 l
-S
-2524 2155 m
-2523 2131 l
-S
-2521 2107 m
-2520 2083 l
-S
-2518 2059 m
-2517 2035 l
-S
-2515 2011 m
-2514 1987 l
-S
-2512 1963 m
-2511 1939 l
-S
-2509 1915 m
-2507 1891 l
-S
-2506 1867 m
-2504 1843 l
-S
-2503 1819 m
-2501 1795 l
-S
-2186 6115 m
-2184 6091 l
-S
-2183 6067 m
-2182 6043 l
-S
-2180 6019 m
-2179 5995 l
-S
-2177 5971 m
-2176 5947 l
-S
-2175 5923 m
-2173 5900 l
-S
-2172 5876 m
-2170 5852 l
-S
-2169 5828 m
-2168 5804 l
-S
-2166 5780 m
-2165 5756 l
-S
-2163 5732 m
-2162 5708 l
-S
-2161 5684 m
-2159 5660 l
-S
-2158 5636 m
-2156 5612 l
-S
-2155 5588 m
-2154 5564 l
-S
-2152 5540 m
-2151 5516 l
-S
-2149 5492 m
-2148 5468 l
-S
-2147 5444 m
-2145 5420 l
-S
-2144 5396 m
-2142 5372 l
-S
-2141 5348 m
-2139 5324 l
-S
-2138 5300 m
-2137 5276 l
-S
-2135 5252 m
-2134 5228 l
-S
-2132 5205 m
-2131 5181 l
-S
-2129 5157 m
-2128 5133 l
-S
-2127 5109 m
-2125 5085 l
-S
-2124 5061 m
-2122 5037 l
-S
-2121 5013 m
-2120 4989 l
-S
-2118 4965 m
-2117 4941 l
-S
-2115 4917 m
-2114 4893 l
-S
-2112 4869 m
-2112 4861 l
-2111 4845 l
-S
-2110 4821 m
-2108 4797 l
-S
-2107 4773 m
-2105 4749 l
-S
-2104 4725 m
-2102 4701 l
-S
-2101 4677 m
-2099 4653 l
-S
-2098 4629 m
-2097 4605 l
-S
-2095 4581 m
-2094 4557 l
-S
-2092 4533 m
-2091 4510 l
-S
-2089 4486 m
-2088 4462 l
-S
-2086 4438 m
-2085 4414 l
-S
-2084 4390 m
-2082 4366 l
-S
-2081 4342 m
-2080 4325 l
-2079 4318 l
-S
-2078 4294 m
-2076 4270 l
-S
-2075 4246 m
-2073 4222 l
-S
-2072 4198 m
-2071 4174 l
-S
-2069 4150 m
-2068 4126 l
-S
-2066 4102 m
-2065 4078 l
-S
-2063 4054 m
-2062 4030 l
-S
-2060 4006 m
-2059 3982 l
-S
-2057 3958 m
-2056 3934 l
-S
-2054 3910 m
-2053 3886 l
-S
-2052 3863 m
-2050 3839 l
-S
-2049 3815 m
-2047 3791 l
-S
-2046 3767 m
-2044 3743 l
-S
-2043 3719 m
-2041 3695 l
-S
-2040 3671 m
-2038 3647 l
-S
-2037 3623 m
-2035 3599 l
-S
-2034 3575 m
-2032 3551 l
-S
-2031 3527 m
-2030 3503 l
-S
-2028 3479 m
-2027 3455 l
-S
-2025 3431 m
-2024 3407 l
-S
-2022 3383 m
-2021 3359 l
-S
-2019 3335 m
-2018 3311 l
-S
-2016 3287 m
-2015 3263 l
-S
-2013 3239 m
-2012 3216 l
-S
-2010 3192 m
-2009 3168 l
-S
-2007 3144 m
-2006 3120 l
-S
-2004 3096 m
-2003 3072 l
-S
-2001 3048 m
-2000 3024 l
-S
-1998 3000 m
-1997 2976 l
-S
-1995 2952 m
-1994 2928 l
-S
-1992 2904 m
-1991 2880 l
-S
-1989 2856 m
-1988 2832 l
-S
-1986 2808 m
-1985 2784 l
-S
-1983 2760 m
-1982 2736 l
-S
-1980 2712 m
-1979 2688 l
-S
-1977 2664 m
-1976 2640 l
-S
-1974 2617 m
-1973 2593 l
-S
-1971 2569 m
-1970 2545 l
-S
-1968 2521 m
-1967 2497 l
-S
-1965 2473 m
-1964 2449 l
-S
-1962 2425 m
-1961 2401 l
-S
-1959 2377 m
-1958 2353 l
-S
-1956 2329 m
-1955 2305 l
-S
-1953 2281 m
-1952 2257 l
-S
-1950 2233 m
-1949 2209 l
-S
-1947 2185 m
-1947 2182 l
-1946 2161 l
-S
-1944 2137 m
-1943 2113 l
-S
-1941 2089 m
-1940 2065 l
-S
-1938 2041 m
-1937 2018 l
-S
-1935 1994 m
-1933 1970 l
-S
-1932 1946 m
-1930 1922 l
-S
-1929 1898 m
-1927 1874 l
-S
-1926 1850 m
-1924 1826 l
-S
-1923 1802 m
-1921 1778 l
-S
-1606 6098 m
-1604 6074 l
-S
-1603 6050 m
-1602 6026 l
-S
-1600 6002 m
-1599 5978 l
-S
-1598 5954 m
-1597 5944 l
-1596 5930 l
-S
-1595 5906 m
-1593 5882 l
-S
-1592 5858 m
-1591 5834 l
-S
-1589 5810 m
-1588 5786 l
-S
-1586 5762 m
-1585 5738 l
-S
-1583 5714 m
-1582 5690 l
-S
-1581 5666 m
-1579 5642 l
-S
-1578 5618 m
-1576 5594 l
-S
-1575 5571 m
-1574 5547 l
-S
-1572 5523 m
-1571 5499 l
-S
-1569 5475 m
-1568 5451 l
-S
-1567 5427 m
-1566 5408 l
-1565 5403 l
-S
-1564 5379 m
-1562 5355 l
-S
-1561 5331 m
-1560 5307 l
-S
-1558 5283 m
-1557 5259 l
-S
-1555 5235 m
-1554 5211 l
-S
-1552 5187 m
-1551 5163 l
-S
-1550 5139 m
-1548 5115 l
-S
-1547 5091 m
-1545 5067 l
-S
-1544 5043 m
-1542 5019 l
-S
-1541 4995 m
-1540 4971 l
-S
-1538 4947 m
-1537 4923 l
-S
-1535 4899 m
-1534 4876 l
-S
-1532 4852 m
-1531 4828 l
-S
-1530 4804 m
-1528 4780 l
-S
-1527 4756 m
-1525 4732 l
-S
-1524 4708 m
-1522 4684 l
-S
-1521 4660 m
-1519 4636 l
-S
-1518 4612 m
-1517 4588 l
-S
-1515 4564 m
-1514 4540 l
-S
-1512 4516 m
-1511 4492 l
-S
-1509 4468 m
-1508 4444 l
-S
-1507 4420 m
-1505 4396 l
-S
-1504 4372 m
-1502 4348 l
-S
-1501 4324 m
-1499 4300 l
-S
-1498 4276 m
-1496 4252 l
-S
-1495 4228 m
-1493 4205 l
-S
-1492 4181 m
-1491 4157 l
-S
-1489 4133 m
-1488 4109 l
-S
-1486 4085 m
-1485 4061 l
-S
-1483 4037 m
-1482 4013 l
-S
-1480 3989 m
-1479 3965 l
-S
-1477 3941 m
-1476 3917 l
-S
-1475 3893 m
-1473 3869 l
-S
-1472 3845 m
-1470 3821 l
-S
-1469 3797 m
-1467 3773 l
-S
-1466 3749 m
-1464 3725 l
-S
-1463 3701 m
-1461 3677 l
-S
-1460 3653 m
-1458 3629 l
-S
-1457 3605 m
-1455 3581 l
-S
-1454 3558 m
-1452 3534 l
-S
-1451 3510 m
-1449 3486 l
-S
-1448 3462 m
-1447 3438 l
-S
-1445 3414 m
-1444 3390 l
-S
-1442 3366 m
-1441 3342 l
-S
-1439 3318 m
-1438 3294 l
-S
-1436 3270 m
-1436 3266 l
-1435 3246 l
-S
-1433 3222 m
-1432 3198 l
-S
-1430 3174 m
-1429 3150 l
-S
-1427 3126 m
-1426 3102 l
-S
-1424 3078 m
-1423 3054 l
-S
-1421 3030 m
-1420 3006 l
-S
-1418 2982 m
-1417 2958 l
-S
-1415 2935 m
-1414 2911 l
-S
-1412 2887 m
-1411 2863 l
-S
-1409 2839 m
-1408 2815 l
-S
-1406 2791 m
-1405 2767 l
-S
-1403 2743 m
-1403 2730 l
-1402 2719 l
-S
-1400 2695 m
-1399 2671 l
-S
-1397 2647 m
-1396 2623 l
-S
-1394 2599 m
-1393 2575 l
-S
-1391 2551 m
-1390 2527 l
-S
-1388 2503 m
-1387 2479 l
-S
-1385 2455 m
-1384 2431 l
-S
-1382 2407 m
-1381 2383 l
-S
-1379 2359 m
-1378 2336 l
-S
-1376 2312 m
-1375 2288 l
-S
-1373 2264 m
-1372 2240 l
-S
-1370 2216 m
-1369 2194 l
-1369 2192 l
-S
-1367 2168 m
-1366 2144 l
-S
-1364 2120 m
-1363 2096 l
-S
-1361 2072 m
-1360 2048 l
-S
-1358 2024 m
-1356 2000 l
-S
-1355 1976 m
-1353 1952 l
-S
-1352 1928 m
-1350 1904 l
-S
-1349 1880 m
-1347 1856 l
-S
-1346 1832 m
-1344 1808 l
-S
-1343 1784 m
-1342 1777 l
-S
-1028 6121 m
-1027 6104 l
-S
-1026 6080 m
-1025 6056 l
-S
-1023 6032 m
-1022 6008 l
-S
-1020 5984 m
-1019 5960 l
-S
-1018 5937 m
-1016 5913 l
-S
-1015 5889 m
-1013 5865 l
-S
-1012 5841 m
-1011 5817 l
-S
-1009 5793 m
-1008 5769 l
-S
-1006 5745 m
-1005 5721 l
-S
-1004 5697 m
-1002 5673 l
-S
-1001 5649 m
-999 5625 l
-S
-998 5601 m
-997 5577 l
-S
-995 5553 m
-994 5529 l
-S
-992 5505 m
-991 5481 l
-S
-990 5457 m
-988 5433 l
-S
-987 5409 m
-985 5385 l
-S
-984 5361 m
-982 5337 l
-S
-981 5313 m
-980 5289 l
-S
-978 5265 m
-977 5242 l
-S
-975 5218 m
-974 5194 l
-S
-972 5170 m
-971 5146 l
-S
-970 5122 m
-968 5098 l
-S
-967 5074 m
-965 5050 l
-S
-964 5026 m
-962 5002 l
-S
-961 4978 m
-960 4954 l
-S
-958 4930 m
-957 4906 l
-S
-955 4882 m
-954 4858 l
-S
-952 4834 m
-951 4810 l
-S
-950 4786 m
-948 4762 l
-S
-947 4738 m
-945 4714 l
-S
-944 4690 m
-942 4666 l
-S
-941 4642 m
-940 4618 l
-S
-938 4594 m
-937 4571 l
-S
-935 4547 m
-934 4523 l
-S
-932 4499 m
-931 4475 l
-S
-929 4451 m
-928 4427 l
-S
-927 4403 m
-925 4379 l
-S
-924 4355 m
-923 4348 l
-922 4331 l
-S
-921 4307 m
-919 4283 l
-S
-918 4259 m
-916 4235 l
-S
-915 4211 m
-913 4187 l
-S
-912 4163 m
-911 4139 l
-S
-909 4115 m
-908 4091 l
-S
-906 4067 m
-905 4043 l
-S
-903 4019 m
-902 3995 l
-S
-900 3971 m
-899 3947 l
-S
-897 3923 m
-896 3900 l
-S
-895 3876 m
-893 3852 l
-S
-892 3828 m
-891 3813 l
-890 3804 l
-S
-889 3780 m
-887 3756 l
-S
-886 3732 m
-884 3708 l
-S
-883 3684 m
-881 3660 l
-S
-880 3636 m
-878 3612 l
-S
-877 3588 m
-875 3564 l
-S
-874 3540 m
-872 3516 l
-S
-871 3492 m
-869 3468 l
-S
-868 3444 m
-867 3420 l
-S
-865 3396 m
-864 3372 l
-S
-862 3348 m
-861 3324 l
-S
-859 3300 m
-858 3278 l
-858 3277 l
-S
-856 3253 m
-855 3229 l
-S
-853 3205 m
-852 3181 l
-S
-850 3157 m
-849 3133 l
-S
-847 3109 m
-846 3085 l
-S
-844 3061 m
-843 3037 l
-S
-841 3013 m
-840 2989 l
-S
-838 2965 m
-837 2941 l
-S
-835 2917 m
-834 2893 l
-S
-832 2869 m
-831 2845 l
-S
-829 2821 m
-828 2797 l
-S
-826 2773 m
-825 2749 l
-S
-823 2725 m
-822 2701 l
-S
-820 2677 m
-819 2654 l
-S
-817 2630 m
-816 2606 l
-S
-814 2582 m
-813 2558 l
-S
-811 2534 m
-810 2510 l
-S
-808 2486 m
-807 2462 l
-S
-805 2438 m
-804 2414 l
-S
-802 2390 m
-801 2366 l
-S
-799 2342 m
-798 2318 l
-S
-796 2294 m
-795 2270 l
-S
-793 2246 m
-792 2222 l
-S
-790 2198 m
-789 2174 l
-S
-787 2150 m
-786 2126 l
-S
-784 2102 m
-782 2078 l
-S
-781 2055 m
-779 2031 l
-S
-778 2007 m
-776 1983 l
-S
-775 1959 m
-773 1935 l
-S
-772 1911 m
-770 1887 l
-S
-769 1863 m
-767 1839 l
-S
-766 1815 m
-764 1791 l
-S
-0 0 1 rg
-4877 6113 m
-4847 6113 l
-S
-4877 5988 m
-4847 5988 l
-S
-4877 5862 m
-4847 5863 l
-S
-4877 5737 m
-4847 5738 l
-S
-4877 5486 m
-4847 5487 l
-S
-4877 5361 m
-4847 5362 l
-S
-4877 5236 m
-4847 5236 l
-S
-4877 5110 m
-4847 5111 l
-S
-4877 4860 m
-4847 4860 l
-S
-4877 4734 m
-4847 4735 l
-S
-4877 4609 m
-4847 4610 l
-S
-4877 4484 m
-4847 4484 l
-S
-4877 4233 m
-4847 4234 l
-S
-4877 4108 m
-4847 4109 l
-S
-4877 3983 m
-4847 3983 l
-S
-4877 3857 m
-4847 3858 l
-S
-4877 3607 m
-4847 3607 l
-S
-4877 3481 m
-4847 3482 l
-S
-4877 3356 m
-4847 3357 l
-S
-4877 3231 m
-4847 3231 l
-S
-4877 2980 m
-4847 2981 l
-S
-4877 2855 m
-4847 2855 l
-S
-4877 2729 m
-4847 2730 l
-S
-4877 2604 m
-4847 2605 l
-S
-4877 2353 m
-4847 2354 l
-S
-4877 2228 m
-4847 2229 l
-S
-4877 2103 m
-4847 2103 l
-S
-4877 1977 m
-4847 1978 l
-S
-4671 1777 m
-4673 1808 l
-S
-4527 1777 m
-4529 1808 l
-S
-4382 1777 m
-4384 1808 l
-S
-4092 1777 m
-4094 1808 l
-S
-3948 1777 m
-3950 1808 l
-S
-3803 1777 m
-3805 1808 l
-S
-3513 1777 m
-3515 1808 l
-S
-3369 1777 m
-3371 1808 l
-S
-3224 1777 m
-3226 1808 l
-S
-2934 1777 m
-2936 1808 l
-S
-2790 1777 m
-2792 1808 l
-S
-2645 1777 m
-2647 1808 l
-S
-2355 1777 m
-2357 1808 l
-S
-2211 1777 m
-2213 1808 l
-S
-2066 1777 m
-2068 1808 l
-S
-1777 1777 m
-1778 1808 l
-S
-1632 1777 m
-1634 1808 l
-S
-1487 1777 m
-1489 1808 l
-S
-1198 1777 m
-1199 1808 l
-S
-1053 1777 m
-1055 1808 l
-S
-908 1777 m
-910 1808 l
-S
-619 1777 m
-621 1808 l
-S
-533 6071 m
-564 6071 l
-S
-533 5946 m
-564 5946 l
-S
-533 5821 m
-564 5821 l
-S
-533 5571 m
-564 5571 l
-S
-533 5446 m
-564 5446 l
-S
-533 5321 m
-564 5321 l
-S
-533 5196 m
-564 5195 l
-S
-533 4946 m
-564 4945 l
-S
-533 4821 m
-564 4820 l
-S
-533 4696 m
-564 4695 l
-S
-533 4571 m
-564 4570 l
-S
-533 4321 m
-564 4320 l
-S
-533 4195 m
-564 4195 l
-S
-533 4070 m
-564 4070 l
-S
-533 3945 m
-564 3945 l
-S
-533 3695 m
-564 3695 l
-S
-533 3570 m
-564 3569 l
-S
-533 3445 m
-564 3444 l
-S
-533 3320 m
-564 3319 l
-S
-533 3070 m
-564 3069 l
-S
-533 2945 m
-564 2944 l
-S
-533 2820 m
-564 2819 l
-S
-533 2695 m
-564 2694 l
-S
-533 2444 m
-564 2444 l
-S
-533 2319 m
-564 2319 l
-S
-533 2194 m
-564 2194 l
-S
-533 2069 m
-564 2068 l
-S
-533 1819 m
-564 1818 l
-S
-4791 6121 m
-4789 6091 l
-S
-4646 6121 m
-4645 6091 l
-S
-4357 6121 m
-4355 6091 l
-S
-4212 6121 m
-4210 6091 l
-S
-4068 6121 m
-4066 6091 l
-S
-3778 6121 m
-3776 6091 l
-S
-3633 6121 m
-3632 6091 l
-S
-3489 6121 m
-3487 6091 l
-S
-3199 6121 m
-3197 6091 l
-S
-3054 6121 m
-3053 6091 l
-S
-2910 6121 m
-2908 6091 l
-S
-2620 6121 m
-2619 6091 l
-S
-2476 6121 m
-2474 6091 l
-S
-2331 6121 m
-2329 6091 l
-S
-2041 6121 m
-2040 6091 l
-S
-1897 6121 m
-1895 6091 l
-S
-1752 6121 m
-1750 6091 l
-S
-1463 6121 m
-1461 6091 l
-S
-1318 6121 m
-1316 6091 l
-S
-1173 6121 m
-1171 6091 l
-S
-884 6121 m
-882 6091 l
-S
-739 6121 m
-737 6091 l
-S
-594 6121 m
-592 6091 l
-S
-4877 1777 m
-4877 2088 l
-4877 2398 l
-4877 2708 l
-4877 3018 l
-4877 3329 l
-4877 3639 l
-4877 3949 l
-4877 4260 l
-4877 4570 l
-4877 4880 l
-4877 5190 l
-4877 5501 l
-4877 5811 l
-4877 6121 l
-S
-4877 6121 m
-4567 6121 l
-4256 6121 l
-3946 6121 l
-3636 6121 l
-3326 6121 l
-3015 6121 l
-2705 6121 l
-2395 6121 l
-2085 6121 l
-1774 6121 l
-1464 6121 l
-1154 6121 l
-843 6121 l
-533 6121 l
-S
-533 6121 m
-533 5811 l
-533 5501 l
-533 5190 l
-533 4880 l
-533 4570 l
-533 4260 l
-533 3949 l
-533 3639 l
-533 3329 l
-533 3018 l
-533 2708 l
-533 2398 l
-533 2088 l
-533 1777 l
-S
-533 1777 m
-843 1777 l
-1154 1777 l
-1464 1777 l
-1774 1777 l
-2085 1777 l
-2395 1777 l
-2705 1777 l
-3015 1777 l
-3326 1777 l
-3636 1777 l
-3946 1777 l
-4256 1777 l
-4567 1777 l
-4877 1777 l
-S
-1 g
-Y
-5029.5 2159.2 m
-4920 2159 l
-4920 2798 l
-5029 2798 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4935 2185 m
-4935 2227 l
-4966 2204 l
-4966 2216 l
-4969 2223 l
-4973 2227 l
-4984 2231 l
-4992 2231 l
-5003 2227 l
-5011 2219 l
-5014 2208 l
-5014 2197 l
-5011 2185 l
-5007 2182 l
-4999 2178 l
-S
-4935 2257 m
-5014 2257 l
-S
-4977 2257 m
-4966 2268 l
-4962 2276 l
-4962 2287 l
-4966 2294 l
-4977 2298 l
-5014 2298 l
-S
-4954 2328 m
-4951 2328 l
-4943 2332 l
-4939 2336 l
-4935 2343 l
-4935 2358 l
-4939 2366 l
-4943 2370 l
-4951 2373 l
-4958 2373 l
-4966 2370 l
-4977 2362 l
-5014 2325 l
-5014 2377 l
-S
-4935 2422 m
-4939 2411 l
-4951 2403 l
-4969 2400 l
-4981 2400 l
-4999 2403 l
-5011 2411 l
-5014 2422 l
-5014 2430 l
-5011 2441 l
-4999 2449 l
-4981 2452 l
-4969 2452 l
-4951 2449 l
-4939 2441 l
-4935 2430 l
-4935 2422 l
-S
-4962 2479 m
-5014 2479 l
-S
-4977 2479 m
-4966 2490 l
-4962 2497 l
-4962 2509 l
-4966 2516 l
-4977 2520 l
-5014 2520 l
-S
-4977 2520 m
-4966 2531 l
-4962 2539 l
-4962 2550 l
-4966 2558 l
-4977 2561 l
-5014 2561 l
-S
-4935 2610 m
-4939 2599 l
-4951 2591 l
-4969 2588 l
-4981 2588 l
-4999 2591 l
-5011 2599 l
-5014 2610 l
-5014 2618 l
-5011 2629 l
-4999 2637 l
-4981 2640 l
-4969 2640 l
-4951 2637 l
-4939 2629 l
-4935 2618 l
-4935 2610 l
-S
-4935 2685 m
-4939 2674 l
-4951 2667 l
-4969 2663 l
-4981 2663 l
-4999 2667 l
-5011 2674 l
-5014 2685 l
-5014 2693 l
-5011 2704 l
-4999 2712 l
-4981 2716 l
-4969 2716 l
-4951 2712 l
-4939 2704 l
-4935 2693 l
-4935 2685 l
-S
-4973 2779 m
-4966 2776 l
-4962 2764 l
-4962 2753 l
-4966 2742 l
-4973 2738 l
-4981 2742 l
-4984 2749 l
-4988 2768 l
-4992 2776 l
-4999 2779 l
-5003 2779 l
-5011 2776 l
-5014 2764 l
-5014 2753 l
-5011 2742 l
-5003 2738 l
-S
-1 g
-Y
-5029.5 3617.3 m
-4920 3617 l
-4920 3847 l
-5029 3847 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4935 3674 m
-4988 3636 l
-4988 3692 l
-S
-4935 3674 m
-5014 3674 l
-S
-4935 3734 m
-4939 3723 l
-4951 3715 l
-4969 3711 l
-4981 3711 l
-4999 3715 l
-5011 3723 l
-5014 3734 l
-5014 3741 l
-5011 3753 l
-4999 3760 l
-4981 3764 l
-4969 3764 l
-4951 3760 l
-4939 3753 l
-4935 3741 l
-4935 3734 l
-S
-4973 3828 m
-4966 3824 l
-4962 3813 l
-4962 3801 l
-4966 3790 l
-4973 3786 l
-4981 3790 l
-4984 3798 l
-4988 3817 l
-4992 3824 l
-4999 3828 l
-5003 3828 l
-5011 3824 l
-5014 3813 l
-5014 3801 l
-5011 3790 l
-5003 3786 l
-S
-1 g
-Y
-5029.5 4870.5 m
-4920 4870 l
-4920 5100 l
-5029 5100 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4954 4893 m
-4951 4893 l
-4943 4897 l
-4939 4901 l
-4935 4908 l
-4935 4923 l
-4939 4931 l
-4943 4934 l
-4951 4938 l
-4958 4938 l
-4966 4934 l
-4977 4927 l
-5014 4889 l
-5014 4942 l
-S
-4935 4987 m
-4939 4976 l
-4951 4968 l
-4969 4964 l
-4981 4964 l
-4999 4968 l
-5011 4976 l
-5014 4987 l
-5014 4995 l
-5011 5006 l
-4999 5013 l
-4981 5017 l
-4969 5017 l
-4951 5013 l
-4939 5006 l
-4935 4995 l
-4935 4987 l
-S
-4973 5081 m
-4966 5077 l
-4962 5066 l
-4962 5055 l
-4966 5043 l
-4973 5040 l
-4981 5043 l
-4984 5051 l
-4988 5070 l
-4992 5077 l
-4999 5081 l
-5003 5081 l
-5011 5077 l
-5014 5066 l
-5014 5055 l
-5011 5043 l
-5003 5040 l
-S
-1 g
-Y
-2562.2 1200.1 m
-2453 1200 l
-2453 1741 l
-2562 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-2468 1256 m
-2521 1219 l
-2521 1275 l
-S
-2468 1256 m
-2547 1256 l
-S
-2483 1305 m
-2480 1313 l
-2468 1324 l
-2547 1324 l
-S
-2495 1377 m
-2498 1373 l
-2502 1377 l
-2498 1381 l
-2495 1377 l
-S
-2540 1377 m
-2543 1373 l
-2547 1377 l
-2543 1381 l
-2540 1377 l
-S
-2468 1414 m
-2468 1456 l
-2498 1433 l
-2498 1444 l
-2502 1452 l
-2506 1456 l
-2517 1459 l
-2525 1459 l
-2536 1456 l
-2543 1448 l
-2547 1437 l
-2547 1426 l
-2543 1414 l
-2540 1411 l
-2532 1407 l
-S
-2468 1505 m
-2472 1493 l
-2483 1486 l
-2502 1482 l
-2513 1482 l
-2532 1486 l
-2543 1493 l
-2547 1505 l
-2547 1512 l
-2543 1523 l
-2532 1531 l
-2513 1535 l
-2502 1535 l
-2483 1531 l
-2472 1523 l
-2468 1512 l
-2468 1505 l
-S
-2495 1565 m
-2498 1561 l
-2502 1565 l
-2498 1568 l
-2495 1565 l
-S
-2540 1565 m
-2543 1561 l
-2547 1565 l
-2543 1568 l
-2540 1565 l
-S
-2468 1617 m
-2472 1606 l
-2483 1599 l
-2502 1595 l
-2513 1595 l
-2532 1599 l
-2543 1606 l
-2547 1617 l
-2547 1625 l
-2543 1636 l
-2532 1644 l
-2513 1647 l
-2502 1647 l
-2483 1644 l
-2472 1636 l
-2468 1625 l
-2468 1617 l
-S
-2468 1693 m
-2472 1681 l
-2483 1674 l
-2502 1670 l
-2513 1670 l
-2532 1674 l
-2543 1681 l
-2547 1693 l
-2547 1700 l
-2543 1711 l
-2532 1719 l
-2513 1723 l
-2502 1723 l
-2483 1719 l
-2472 1711 l
-2468 1700 l
-2468 1693 l
-S
-1 g
-Y
-3141.2 1388.1 m
-3032 1388 l
-3032 1741 l
-3141 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3066 1411 m
-3062 1411 l
-3055 1414 l
-3051 1418 l
-3047 1426 l
-3047 1441 l
-3051 1448 l
-3055 1452 l
-3062 1456 l
-3070 1456 l
-3077 1452 l
-3089 1444 l
-3126 1407 l
-3126 1459 l
-S
-3074 1531 m
-3085 1527 l
-3092 1520 l
-3096 1508 l
-3096 1505 l
-3092 1493 l
-3085 1486 l
-3074 1482 l
-3070 1482 l
-3059 1486 l
-3051 1493 l
-3047 1505 l
-3047 1508 l
-3051 1520 l
-3059 1527 l
-3074 1531 l
-3092 1531 l
-3111 1527 l
-3122 1520 l
-3126 1508 l
-3126 1501 l
-3122 1490 l
-3115 1486 l
-S
-3074 1565 m
-3077 1561 l
-3081 1565 l
-3077 1568 l
-3074 1565 l
-S
-3119 1565 m
-3122 1561 l
-3126 1565 l
-3122 1568 l
-3119 1565 l
-S
-3047 1617 m
-3051 1606 l
-3062 1599 l
-3081 1595 l
-3092 1595 l
-3111 1599 l
-3122 1606 l
-3126 1617 l
-3126 1625 l
-3122 1636 l
-3111 1644 l
-3092 1647 l
-3081 1647 l
-3062 1644 l
-3051 1636 l
-3047 1625 l
-3047 1617 l
-S
-3047 1693 m
-3051 1681 l
-3062 1674 l
-3081 1670 l
-3092 1670 l
-3111 1674 l
-3122 1681 l
-3126 1693 l
-3126 1700 l
-3122 1711 l
-3111 1719 l
-3092 1723 l
-3081 1723 l
-3062 1719 l
-3051 1711 l
-3047 1700 l
-3047 1693 l
-S
-1 g
-Y
-3720.2 1388.1 m
-3611 1388 l
-3611 1741 l
-3720 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3645 1411 m
-3641 1411 l
-3634 1414 l
-3630 1418 l
-3626 1426 l
-3626 1441 l
-3630 1448 l
-3634 1452 l
-3641 1456 l
-3649 1456 l
-3656 1452 l
-3668 1444 l
-3705 1407 l
-3705 1459 l
-S
-3626 1501 m
-3630 1490 l
-3637 1486 l
-3645 1486 l
-3653 1490 l
-3656 1497 l
-3660 1512 l
-3664 1523 l
-3671 1531 l
-3679 1535 l
-3690 1535 l
-3698 1531 l
-3701 1527 l
-3705 1516 l
-3705 1501 l
-3701 1490 l
-3698 1486 l
-3690 1482 l
-3679 1482 l
-3671 1486 l
-3664 1493 l
-3660 1505 l
-3656 1520 l
-3653 1527 l
-3645 1531 l
-3637 1531 l
-3630 1527 l
-3626 1516 l
-3626 1501 l
-S
-3653 1565 m
-3656 1561 l
-3660 1565 l
-3656 1568 l
-3653 1565 l
-S
-3698 1565 m
-3701 1561 l
-3705 1565 l
-3701 1568 l
-3698 1565 l
-S
-3626 1617 m
-3630 1606 l
-3641 1599 l
-3660 1595 l
-3671 1595 l
-3690 1599 l
-3701 1606 l
-3705 1617 l
-3705 1625 l
-3701 1636 l
-3690 1644 l
-3671 1647 l
-3660 1647 l
-3641 1644 l
-3630 1636 l
-3626 1625 l
-3626 1617 l
-S
-3626 1693 m
-3630 1681 l
-3641 1674 l
-3660 1670 l
-3671 1670 l
-3690 1674 l
-3701 1681 l
-3705 1693 l
-3705 1700 l
-3701 1711 l
-3690 1719 l
-3671 1723 l
-3660 1723 l
-3641 1719 l
-3630 1711 l
-3626 1700 l
-3626 1693 l
-S
-1 g
-Y
-4299.2 1388.1 m
-4190 1388 l
-4190 1741 l
-4299 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4224 1411 m
-4220 1411 l
-4213 1414 l
-4209 1418 l
-4205 1426 l
-4205 1441 l
-4209 1448 l
-4213 1452 l
-4220 1456 l
-4228 1456 l
-4235 1452 l
-4247 1444 l
-4284 1407 l
-4284 1459 l
-S
-4205 1535 m
-4284 1497 l
-S
-4205 1482 m
-4205 1535 l
-S
-4231 1565 m
-4235 1561 l
-4239 1565 l
-4235 1568 l
-4231 1565 l
-S
-4277 1565 m
-4280 1561 l
-4284 1565 l
-4280 1568 l
-4277 1565 l
-S
-4205 1617 m
-4209 1606 l
-4220 1599 l
-4239 1595 l
-4250 1595 l
-4269 1599 l
-4280 1606 l
-4284 1617 l
-4284 1625 l
-4280 1636 l
-4269 1644 l
-4250 1647 l
-4239 1647 l
-4220 1644 l
-4209 1636 l
-4205 1625 l
-4205 1617 l
-S
-4205 1693 m
-4209 1681 l
-4220 1674 l
-4239 1670 l
-4250 1670 l
-4269 1674 l
-4280 1681 l
-4284 1693 l
-4284 1700 l
-4280 1711 l
-4269 1719 l
-4250 1723 l
-4239 1723 l
-4220 1719 l
-4209 1711 l
-4205 1700 l
-4205 1693 l
-S
-1 g
-Y
-4878.1 1388.1 m
-4769 1388 l
-4769 1741 l
-4878 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4803 1411 m
-4799 1411 l
-4792 1414 l
-4788 1418 l
-4784 1426 l
-4784 1441 l
-4788 1448 l
-4792 1452 l
-4799 1456 l
-4807 1456 l
-4814 1452 l
-4826 1444 l
-4863 1407 l
-4863 1459 l
-S
-4795 1531 m
-4788 1527 l
-4784 1516 l
-4784 1508 l
-4788 1497 l
-4799 1490 l
-4818 1486 l
-4837 1486 l
-4852 1490 l
-4859 1497 l
-4863 1508 l
-4863 1512 l
-4859 1523 l
-4852 1531 l
-4841 1535 l
-4837 1535 l
-4826 1531 l
-4818 1523 l
-4814 1512 l
-4814 1508 l
-4818 1497 l
-4826 1490 l
-4837 1486 l
-S
-4810 1565 m
-4814 1561 l
-4818 1565 l
-4814 1568 l
-4810 1565 l
-S
-4856 1565 m
-4859 1561 l
-4863 1565 l
-4859 1568 l
-4856 1565 l
-S
-4784 1617 m
-4788 1606 l
-4799 1599 l
-4818 1595 l
-4829 1595 l
-4848 1599 l
-4859 1606 l
-4863 1617 l
-4863 1625 l
-4859 1636 l
-4848 1644 l
-4829 1647 l
-4818 1647 l
-4799 1644 l
-4788 1636 l
-4784 1625 l
-4784 1617 l
-S
-4784 1693 m
-4788 1681 l
-4799 1674 l
-4818 1670 l
-4829 1670 l
-4848 1674 l
-4859 1681 l
-4863 1693 l
-4863 1700 l
-4859 1711 l
-4848 1719 l
-4829 1723 l
-4818 1723 l
-4799 1719 l
-4788 1711 l
-4784 1700 l
-4784 1693 l
-S
-1 g
-Y
-1983.3 1388.1 m
-1874 1388 l
-1874 1741 l
-1983 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-1889 1414 m
-1889 1456 l
-1919 1433 l
-1919 1444 l
-1923 1452 l
-1927 1456 l
-1938 1459 l
-1946 1459 l
-1957 1456 l
-1964 1448 l
-1968 1437 l
-1968 1426 l
-1964 1414 l
-1961 1411 l
-1953 1407 l
-S
-1904 1493 m
-1901 1501 l
-1889 1512 l
-1968 1512 l
-S
-1916 1565 m
-1919 1561 l
-1923 1565 l
-1919 1568 l
-1916 1565 l
-S
-1961 1565 m
-1964 1561 l
-1968 1565 l
-1964 1568 l
-1961 1565 l
-S
-1889 1617 m
-1893 1606 l
-1904 1599 l
-1923 1595 l
-1934 1595 l
-1953 1599 l
-1964 1606 l
-1968 1617 l
-1968 1625 l
-1964 1636 l
-1953 1644 l
-1934 1647 l
-1923 1647 l
-1904 1644 l
-1893 1636 l
-1889 1625 l
-1889 1617 l
-S
-1889 1693 m
-1893 1681 l
-1904 1674 l
-1923 1670 l
-1934 1670 l
-1953 1674 l
-1964 1681 l
-1968 1693 l
-1968 1700 l
-1964 1711 l
-1953 1719 l
-1934 1723 l
-1923 1723 l
-1904 1719 l
-1893 1711 l
-1889 1700 l
-1889 1693 l
-S
-1 g
-Y
-1404.3 1388.1 m
-1295 1388 l
-1295 1741 l
-1404 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-1310 1414 m
-1310 1456 l
-1340 1433 l
-1340 1444 l
-1344 1452 l
-1348 1456 l
-1359 1459 l
-1367 1459 l
-1378 1456 l
-1385 1448 l
-1389 1437 l
-1389 1426 l
-1385 1414 l
-1382 1411 l
-1374 1407 l
-S
-1329 1486 m
-1325 1486 l
-1318 1490 l
-1314 1493 l
-1310 1501 l
-1310 1516 l
-1314 1523 l
-1318 1527 l
-1325 1531 l
-1333 1531 l
-1340 1527 l
-1352 1520 l
-1389 1482 l
-1389 1535 l
-S
-1337 1565 m
-1340 1561 l
-1344 1565 l
-1340 1568 l
-1337 1565 l
-S
-1382 1565 m
-1385 1561 l
-1389 1565 l
-1385 1568 l
-1382 1565 l
-S
-1310 1617 m
-1314 1606 l
-1325 1599 l
-1344 1595 l
-1355 1595 l
-1374 1599 l
-1385 1606 l
-1389 1617 l
-1389 1625 l
-1385 1636 l
-1374 1644 l
-1355 1647 l
-1344 1647 l
-1325 1644 l
-1314 1636 l
-1310 1625 l
-1310 1617 l
-S
-1310 1693 m
-1314 1681 l
-1325 1674 l
-1344 1670 l
-1355 1670 l
-1374 1674 l
-1385 1681 l
-1389 1693 l
-1389 1700 l
-1385 1711 l
-1374 1719 l
-1355 1723 l
-1344 1723 l
-1325 1719 l
-1314 1711 l
-1310 1700 l
-1310 1693 l
-S
-1 g
-Y
-825.3 1388.1 m
-716 1388 l
-716 1741 l
-825 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-731 1414 m
-731 1456 l
-761 1433 l
-761 1444 l
-765 1452 l
-769 1456 l
-780 1459 l
-788 1459 l
-799 1456 l
-807 1448 l
-810 1437 l
-810 1426 l
-807 1414 l
-803 1411 l
-795 1407 l
-S
-731 1490 m
-731 1531 l
-761 1508 l
-761 1520 l
-765 1527 l
-769 1531 l
-780 1535 l
-788 1535 l
-799 1531 l
-807 1523 l
-810 1512 l
-810 1501 l
-807 1490 l
-803 1486 l
-795 1482 l
-S
-758 1565 m
-761 1561 l
-765 1565 l
-761 1568 l
-758 1565 l
-S
-803 1565 m
-807 1561 l
-810 1565 l
-807 1568 l
-803 1565 l
-S
-731 1617 m
-735 1606 l
-746 1599 l
-765 1595 l
-776 1595 l
-795 1599 l
-807 1606 l
-810 1617 l
-810 1625 l
-807 1636 l
-795 1644 l
-776 1647 l
-765 1647 l
-746 1644 l
-735 1636 l
-731 1625 l
-731 1617 l
-S
-731 1693 m
-735 1681 l
-746 1674 l
-765 1670 l
-776 1670 l
-795 1674 l
-807 1681 l
-810 1693 l
-810 1700 l
-807 1711 l
-795 1719 l
-776 1723 l
-765 1723 l
-746 1719 l
-735 1711 l
-731 1700 l
-731 1693 l
-S
-1 g
-Y
-5319.8 3163 m
-5088 3163 l
-5088 4736 l
-5320 4736 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-5119 3194 m
-5251 3194 l
-S
-5119 3194 m
-5119 3251 l
-5126 3269 l
-5132 3276 l
-5144 3282 l
-5157 3282 l
-5169 3276 l
-5176 3269 l
-5182 3251 l
-5182 3194 l
-S
-5182 3238 m
-5251 3282 l
-S
-5119 3320 m
-5126 3326 l
-5119 3332 l
-5113 3326 l
-5119 3320 l
-S
-5163 3326 m
-5251 3326 l
-S
-5163 3445 m
-5263 3445 l
-5282 3439 l
-5288 3432 l
-5295 3420 l
-5295 3401 l
-5288 3389 l
-S
-5182 3445 m
-5169 3432 l
-5163 3420 l
-5163 3401 l
-5169 3389 l
-5182 3376 l
-5201 3370 l
-5213 3370 l
-5232 3376 l
-5245 3389 l
-5251 3401 l
-5251 3420 l
-5245 3432 l
-5232 3445 l
-S
-5119 3495 m
-5251 3495 l
-S
-5188 3495 m
-5169 3514 l
-5163 3526 l
-5163 3545 l
-5169 3558 l
-5188 3564 l
-5251 3564 l
-S
-5119 3620 m
-5226 3620 l
-5245 3627 l
-5251 3639 l
-5251 3652 l
-S
-5163 3602 m
-5163 3645 l
-S
-5163 3858 m
-5251 3858 l
-S
-5182 3858 m
-5169 3846 l
-5163 3833 l
-5163 3815 l
-5169 3802 l
-5182 3789 l
-5201 3783 l
-5213 3783 l
-5232 3789 l
-5245 3802 l
-5251 3815 l
-5251 3833 l
-5245 3846 l
-5232 3858 l
-S
-5182 3971 m
-5169 3965 l
-5163 3946 l
-5163 3927 l
-5169 3909 l
-5182 3902 l
-5194 3909 l
-5201 3921 l
-5207 3952 l
-5213 3965 l
-5226 3971 l
-5232 3971 l
-5245 3965 l
-5251 3946 l
-5251 3927 l
-5245 3909 l
-5232 3902 l
-S
-5182 4084 m
-5169 4071 l
-5163 4059 l
-5163 4040 l
-5169 4028 l
-5182 4015 l
-5201 4009 l
-5213 4009 l
-5232 4015 l
-5245 4028 l
-5251 4040 l
-5251 4059 l
-5245 4071 l
-5232 4084 l
-S
-5201 4122 m
-5201 4197 l
-5188 4197 l
-5176 4190 l
-5169 4184 l
-5163 4172 l
-5163 4153 l
-5169 4140 l
-5182 4128 l
-5201 4122 l
-5213 4122 l
-5232 4128 l
-5245 4140 l
-5251 4153 l
-5251 4172 l
-5245 4184 l
-5232 4197 l
-S
-5163 4241 m
-5251 4241 l
-S
-5188 4241 m
-5169 4259 l
-5163 4272 l
-5163 4291 l
-5169 4303 l
-5188 4309 l
-5251 4309 l
-S
-5182 4422 m
-5169 4416 l
-5163 4397 l
-5163 4378 l
-5169 4360 l
-5182 4353 l
-5194 4360 l
-5201 4372 l
-5207 4403 l
-5213 4416 l
-5226 4422 l
-5232 4422 l
-5245 4416 l
-5251 4397 l
-5251 4378 l
-5245 4360 l
-5232 4353 l
-S
-5119 4460 m
-5126 4466 l
-5119 4472 l
-5113 4466 l
-5119 4460 l
-S
-5163 4466 m
-5251 4466 l
-S
-5163 4541 m
-5169 4529 l
-5182 4516 l
-5201 4510 l
-5213 4510 l
-5232 4516 l
-5245 4529 l
-5251 4541 l
-5251 4560 l
-5245 4573 l
-5232 4585 l
-5213 4591 l
-5201 4591 l
-5182 4585 l
-5169 4573 l
-5163 4560 l
-5163 4541 l
-S
-5163 4635 m
-5251 4635 l
-S
-5188 4635 m
-5169 4654 l
-5163 4667 l
-5163 4685 l
-5169 4698 l
-5188 4704 l
-5251 4704 l
-S
-1 g
-Y
-3240.9 1170.4 m
-3241 982 l
-2170 982 l
-2170 1170 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3210 1014 m
-3210 1145 l
-S
-3210 1014 m
-3166 1014 l
-3147 1020 l
-3134 1033 l
-3128 1045 l
-3122 1064 l
-3122 1095 l
-3128 1114 l
-3134 1127 l
-3147 1139 l
-3166 1145 l
-3210 1145 l
-S
-3084 1095 m
-3009 1095 l
-3009 1083 l
-3015 1070 l
-3022 1064 l
-3034 1058 l
-3053 1058 l
-3066 1064 l
-3078 1076 l
-3084 1095 l
-3084 1108 l
-3078 1127 l
-3066 1139 l
-3053 1145 l
-3034 1145 l
-3022 1139 l
-3009 1127 l
-S
-2896 1076 m
-2909 1064 l
-2921 1058 l
-2940 1058 l
-2953 1064 l
-2965 1076 l
-2972 1095 l
-2972 1108 l
-2965 1127 l
-2953 1139 l
-2940 1145 l
-2921 1145 l
-2909 1139 l
-2896 1127 l
-S
-2853 1014 m
-2853 1145 l
-S
-2809 1014 m
-2802 1020 l
-2796 1014 l
-2802 1008 l
-2809 1014 l
-S
-2802 1058 m
-2802 1145 l
-S
-2752 1058 m
-2752 1145 l
-S
-2752 1083 m
-2733 1064 l
-2721 1058 l
-2702 1058 l
-2690 1064 l
-2683 1083 l
-2683 1145 l
-S
-2564 1058 m
-2564 1145 l
-S
-2564 1076 m
-2577 1064 l
-2589 1058 l
-2608 1058 l
-2621 1064 l
-2633 1076 l
-2639 1095 l
-2639 1108 l
-2633 1127 l
-2621 1139 l
-2608 1145 l
-2589 1145 l
-2577 1139 l
-2564 1127 l
-S
-2508 1014 m
-2508 1120 l
-2502 1139 l
-2489 1145 l
-2477 1145 l
-S
-2527 1058 m
-2483 1058 l
-S
-2445 1014 m
-2439 1020 l
-2433 1014 l
-2439 1008 l
-2445 1014 l
-S
-2439 1058 m
-2439 1145 l
-S
-2364 1058 m
-2376 1064 l
-2389 1076 l
-2395 1095 l
-2395 1108 l
-2389 1127 l
-2376 1139 l
-2364 1145 l
-2345 1145 l
-2333 1139 l
-2320 1127 l
-2314 1108 l
-2314 1095 l
-2320 1076 l
-2333 1064 l
-2345 1058 l
-2364 1058 l
-S
-2270 1058 m
-2270 1145 l
-S
-2270 1083 m
-2251 1064 l
-2239 1058 l
-2220 1058 l
-2207 1064 l
-2201 1083 l
-2201 1145 l
-S
-1 g
-Y
-371.2 1568.5 m
-186 1568 l
-186 6330 l
-371 6330 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-236 1669 m
-226 1664 l
-216 1654 l
-211 1644 l
-211 1624 l
-216 1614 l
-226 1604 l
-236 1599 l
-251 1594 l
-276 1594 l
-291 1599 l
-301 1604 l
-311 1614 l
-316 1624 l
-316 1644 l
-311 1654 l
-301 1664 l
-291 1669 l
-276 1669 l
-S
-276 1644 m
-276 1669 l
-S
-276 1699 m
-276 1759 l
-266 1759 l
-256 1754 l
-251 1749 l
-246 1739 l
-246 1724 l
-251 1714 l
-261 1704 l
-276 1699 l
-286 1699 l
-301 1704 l
-311 1714 l
-316 1724 l
-316 1739 l
-311 1749 l
-301 1759 l
-S
-246 1814 m
-251 1804 l
-261 1794 l
-276 1789 l
-286 1789 l
-301 1794 l
-311 1804 l
-316 1814 l
-316 1829 l
-311 1839 l
-301 1849 l
-286 1854 l
-276 1854 l
-261 1849 l
-251 1839 l
-246 1829 l
-246 1814 l
-S
-261 1944 m
-251 1934 l
-246 1924 l
-246 1909 l
-251 1899 l
-261 1889 l
-276 1884 l
-286 1884 l
-301 1889 l
-311 1899 l
-316 1909 l
-316 1924 l
-311 1934 l
-301 1944 l
-S
-276 1974 m
-276 2035 l
-266 2035 l
-256 2030 l
-251 2025 l
-246 2015 l
-246 2000 l
-251 1990 l
-261 1979 l
-276 1974 l
-286 1974 l
-301 1979 l
-311 1990 l
-316 2000 l
-316 2015 l
-311 2025 l
-301 2035 l
-S
-246 2070 m
-316 2070 l
-S
-266 2070 m
-251 2085 l
-246 2095 l
-246 2110 l
-251 2120 l
-266 2125 l
-316 2125 l
-S
-211 2170 m
-296 2170 l
-311 2175 l
-316 2185 l
-316 2195 l
-S
-246 2155 m
-246 2190 l
-S
-246 2225 m
-316 2225 l
-S
-276 2225 m
-261 2230 l
-251 2240 l
-246 2250 l
-246 2265 l
-S
-211 2285 m
-216 2290 l
-211 2295 l
-206 2290 l
-211 2285 l
-S
-246 2290 m
-316 2290 l
-S
-261 2385 m
-251 2375 l
-246 2365 l
-246 2350 l
-251 2340 l
-261 2330 l
-276 2325 l
-286 2325 l
-301 2330 l
-311 2340 l
-316 2350 l
-316 2365 l
-311 2375 l
-301 2385 l
-S
-246 2556 m
-316 2556 l
-S
-261 2556 m
-251 2546 l
-246 2536 l
-246 2521 l
-251 2511 l
-261 2501 l
-276 2496 l
-286 2496 l
-301 2501 l
-311 2511 l
-316 2521 l
-316 2536 l
-311 2546 l
-301 2556 l
-S
-246 2596 m
-351 2596 l
-S
-261 2596 m
-251 2606 l
-246 2616 l
-246 2631 l
-251 2641 l
-261 2651 l
-276 2656 l
-286 2656 l
-301 2651 l
-311 2641 l
-316 2631 l
-316 2616 l
-311 2606 l
-301 2596 l
-S
-246 2691 m
-351 2691 l
-S
-261 2691 m
-251 2701 l
-246 2711 l
-246 2726 l
-251 2736 l
-261 2746 l
-276 2751 l
-286 2751 l
-301 2746 l
-311 2736 l
-316 2726 l
-316 2711 l
-311 2701 l
-301 2691 l
-S
-246 2842 m
-316 2842 l
-S
-261 2842 m
-251 2832 l
-246 2822 l
-246 2806 l
-251 2796 l
-261 2786 l
-276 2781 l
-286 2781 l
-301 2786 l
-311 2796 l
-316 2806 l
-316 2822 l
-311 2832 l
-301 2842 l
-S
-246 2882 m
-316 2882 l
-S
-276 2882 m
-261 2887 l
-251 2897 l
-246 2907 l
-246 2922 l
-S
-276 2942 m
-276 3002 l
-266 3002 l
-256 2997 l
-251 2992 l
-246 2982 l
-246 2967 l
-251 2957 l
-261 2947 l
-276 2942 l
-286 2942 l
-301 2947 l
-311 2957 l
-316 2967 l
-316 2982 l
-311 2992 l
-301 3002 l
-S
-246 3037 m
-316 3037 l
-S
-266 3037 m
-251 3052 l
-246 3062 l
-246 3077 l
-251 3087 l
-266 3092 l
-316 3092 l
-S
-211 3137 m
-296 3137 l
-311 3142 l
-316 3152 l
-316 3162 l
-S
-246 3122 m
-246 3157 l
-S
-276 3268 m
-276 3328 l
-266 3328 l
-256 3323 l
-251 3318 l
-246 3308 l
-246 3293 l
-251 3283 l
-261 3273 l
-276 3268 l
-286 3268 l
-301 3273 l
-311 3283 l
-316 3293 l
-316 3308 l
-311 3318 l
-301 3328 l
-S
-246 3418 m
-351 3418 l
-S
-261 3418 m
-251 3408 l
-246 3398 l
-246 3383 l
-251 3373 l
-261 3363 l
-276 3358 l
-286 3358 l
-301 3363 l
-311 3373 l
-316 3383 l
-316 3398 l
-311 3408 l
-301 3418 l
-S
-246 3458 m
-296 3458 l
-311 3463 l
-316 3473 l
-316 3488 l
-311 3498 l
-296 3513 l
-S
-246 3513 m
-316 3513 l
-S
-246 3608 m
-316 3608 l
-S
-261 3608 m
-251 3598 l
-246 3588 l
-246 3573 l
-251 3563 l
-261 3553 l
-276 3548 l
-286 3548 l
-301 3553 l
-311 3563 l
-316 3573 l
-316 3588 l
-311 3598 l
-301 3608 l
-S
-211 3654 m
-296 3654 l
-311 3659 l
-316 3669 l
-316 3679 l
-S
-246 3638 m
-246 3674 l
-S
-246 3729 m
-251 3719 l
-261 3709 l
-276 3704 l
-286 3704 l
-301 3709 l
-311 3719 l
-316 3729 l
-316 3744 l
-311 3754 l
-301 3764 l
-286 3769 l
-276 3769 l
-261 3764 l
-251 3754 l
-246 3744 l
-246 3729 l
-S
-246 3804 m
-316 3804 l
-S
-276 3804 m
-261 3809 l
-251 3819 l
-246 3829 l
-246 3844 l
-S
-211 3864 m
-216 3869 l
-211 3874 l
-206 3869 l
-211 3864 l
-S
-246 3869 m
-316 3869 l
-S
-246 3964 m
-316 3964 l
-S
-261 3964 m
-251 3954 l
-246 3944 l
-246 3929 l
-251 3919 l
-261 3909 l
-276 3904 l
-286 3904 l
-301 3909 l
-311 3919 l
-316 3929 l
-316 3944 l
-311 3954 l
-301 3964 l
-S
-211 4004 m
-316 4004 l
-S
-261 4180 m
-251 4170 l
-246 4160 l
-246 4145 l
-251 4135 l
-261 4125 l
-276 4120 l
-286 4120 l
-301 4125 l
-311 4135 l
-316 4145 l
-316 4160 l
-311 4170 l
-301 4180 l
-S
-246 4235 m
-251 4225 l
-261 4215 l
-276 4210 l
-286 4210 l
-301 4215 l
-311 4225 l
-316 4235 l
-316 4250 l
-311 4260 l
-301 4270 l
-286 4275 l
-276 4275 l
-261 4270 l
-251 4260 l
-246 4250 l
-246 4235 l
-S
-246 4330 m
-251 4320 l
-261 4310 l
-276 4305 l
-286 4305 l
-301 4310 l
-311 4320 l
-316 4330 l
-316 4345 l
-311 4355 l
-301 4365 l
-286 4370 l
-276 4370 l
-261 4365 l
-251 4355 l
-246 4345 l
-246 4330 l
-S
-246 4405 m
-316 4405 l
-S
-276 4405 m
-261 4410 l
-251 4420 l
-246 4430 l
-246 4445 l
-S
-211 4526 m
-316 4526 l
-S
-261 4526 m
-251 4516 l
-246 4506 l
-246 4491 l
-251 4481 l
-261 4470 l
-276 4465 l
-286 4465 l
-301 4470 l
-311 4481 l
-316 4491 l
-316 4506 l
-311 4516 l
-301 4526 l
-S
-211 4561 m
-216 4566 l
-211 4571 l
-206 4566 l
-211 4561 l
-S
-246 4566 m
-316 4566 l
-S
-246 4606 m
-316 4606 l
-S
-266 4606 m
-251 4621 l
-246 4631 l
-246 4646 l
-251 4656 l
-266 4661 l
-316 4661 l
-S
-246 4756 m
-316 4756 l
-S
-261 4756 m
-251 4746 l
-246 4736 l
-246 4721 l
-251 4711 l
-261 4701 l
-276 4696 l
-286 4696 l
-301 4701 l
-311 4711 l
-316 4721 l
-316 4736 l
-311 4746 l
-301 4756 l
-S
-211 4801 m
-296 4801 l
-311 4806 l
-316 4816 l
-316 4826 l
-S
-246 4786 m
-246 4821 l
-S
-276 4851 m
-276 4912 l
-266 4912 l
-256 4907 l
-251 4902 l
-246 4892 l
-246 4876 l
-251 4866 l
-261 4856 l
-276 4851 l
-286 4851 l
-301 4856 l
-311 4866 l
-316 4876 l
-316 4892 l
-311 4902 l
-301 4912 l
-S
-261 4997 m
-251 4992 l
-246 4977 l
-246 4962 l
-251 4947 l
-261 4942 l
-271 4947 l
-276 4957 l
-281 4982 l
-286 4992 l
-296 4997 l
-301 4997 l
-311 4992 l
-316 4977 l
-316 4962 l
-311 4947 l
-301 4942 l
-S
-246 5037 m
-251 5032 l
-256 5037 l
-251 5042 l
-246 5037 l
-S
-311 5042 m
-316 5037 l
-311 5032 l
-306 5037 l
-311 5042 l
-321 5042 l
-331 5037 l
-336 5032 l
-S
-276 5157 m
-276 5217 l
-266 5217 l
-256 5212 l
-251 5207 l
-246 5197 l
-246 5182 l
-251 5172 l
-261 5162 l
-276 5157 l
-286 5157 l
-301 5162 l
-311 5172 l
-316 5182 l
-316 5197 l
-311 5207 l
-301 5217 l
-S
-246 5252 m
-351 5252 l
-S
-261 5252 m
-251 5262 l
-246 5272 l
-246 5287 l
-251 5297 l
-261 5308 l
-276 5313 l
-286 5313 l
-301 5308 l
-311 5297 l
-316 5287 l
-316 5272 l
-311 5262 l
-301 5252 l
-S
-246 5368 m
-251 5358 l
-261 5348 l
-276 5343 l
-286 5343 l
-301 5348 l
-311 5358 l
-316 5368 l
-316 5383 l
-311 5393 l
-301 5403 l
-286 5408 l
-276 5408 l
-261 5403 l
-251 5393 l
-246 5383 l
-246 5368 l
-S
-261 5498 m
-251 5488 l
-246 5478 l
-246 5463 l
-251 5453 l
-261 5443 l
-276 5438 l
-286 5438 l
-301 5443 l
-311 5453 l
-316 5463 l
-316 5478 l
-311 5488 l
-301 5498 l
-S
-211 5533 m
-316 5533 l
-S
-266 5533 m
-251 5548 l
-246 5558 l
-246 5573 l
-251 5583 l
-266 5588 l
-316 5588 l
-S
-211 5749 m
-291 5749 l
-306 5744 l
-311 5739 l
-316 5729 l
-316 5718 l
-311 5708 l
-306 5703 l
-291 5698 l
-281 5698 l
-S
-231 5799 m
-226 5809 l
-211 5824 l
-316 5824 l
-S
-246 5949 m
-261 5944 l
-271 5934 l
-276 5919 l
-276 5914 l
-271 5899 l
-261 5889 l
-246 5884 l
-241 5884 l
-226 5889 l
-216 5899 l
-211 5914 l
-211 5919 l
-216 5934 l
-226 5944 l
-246 5949 l
-271 5949 l
-296 5944 l
-311 5934 l
-316 5919 l
-316 5909 l
-311 5894 l
-301 5889 l
-S
-246 6049 m
-261 6044 l
-271 6034 l
-276 6019 l
-276 6014 l
-271 5999 l
-261 5989 l
-246 5984 l
-241 5984 l
-226 5989 l
-216 5999 l
-211 6014 l
-211 6019 l
-216 6034 l
-226 6044 l
-246 6049 l
-271 6049 l
-296 6044 l
-311 6034 l
-316 6019 l
-316 6009 l
-311 5994 l
-301 5989 l
-S
-211 6155 m
-316 6104 l
-S
-211 6084 m
-211 6155 l
-S
-306 6195 m
-311 6190 l
-316 6195 l
-311 6200 l
-306 6195 l
-S
-211 6295 m
-211 6245 l
-256 6240 l
-251 6245 l
-246 6260 l
-246 6275 l
-251 6290 l
-261 6300 l
-276 6305 l
-286 6305 l
-301 6300 l
-311 6290 l
-316 6275 l
-316 6260 l
-311 6245 l
-306 6240 l
-296 6235 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/fronta_bw.eps b/ast-5.3-1/sun211_figures/fronta_bw.eps
deleted file mode 100644
index 73d133f..0000000
--- a/ast-5.3-1/sun211_figures/fronta_bw.eps
+++ /dev/null
@@ -1,6472 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 20 100 530 631
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:47:36
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-4877 5612 m
-4853 5612 l
-S
-4829 5613 m
-4805 5613 l
-S
-4781 5614 m
-4757 5614 l
-S
-4733 5614 m
-4709 5615 l
-S
-4685 5615 m
-4661 5616 l
-S
-4637 5616 m
-4613 5617 l
-S
-4589 5617 m
-4565 5618 l
-S
-4541 5618 m
-4517 5619 l
-S
-4493 5619 m
-4469 5620 l
-S
-4445 5620 m
-4421 5621 l
-S
-4397 5621 m
-4373 5621 l
-S
-4349 5622 m
-4325 5622 l
-S
-4301 5623 m
-4277 5623 l
-S
-4253 5624 m
-4229 5624 l
-S
-4205 5625 m
-4181 5625 l
-S
-4157 5626 m
-4133 5626 l
-S
-4109 5627 m
-4101 5627 l
-4085 5627 l
-S
-4061 5628 m
-4037 5628 l
-S
-4013 5628 m
-3989 5629 l
-S
-3965 5629 m
-3941 5630 l
-S
-3917 5630 m
-3893 5631 l
-S
-3869 5631 m
-3845 5632 l
-S
-3821 5632 m
-3797 5633 l
-S
-3773 5633 m
-3749 5634 l
-S
-3725 5634 m
-3701 5635 l
-S
-3677 5635 m
-3652 5636 l
-S
-3628 5636 m
-3604 5636 l
-S
-3580 5637 m
-3564 5637 l
-3556 5637 l
-S
-3532 5638 m
-3508 5638 l
-S
-3484 5639 m
-3460 5639 l
-S
-3436 5640 m
-3412 5640 l
-S
-3388 5641 m
-3364 5641 l
-S
-3340 5642 m
-3316 5642 l
-S
-3292 5643 m
-3268 5643 l
-S
-3244 5643 m
-3220 5644 l
-S
-3196 5644 m
-3172 5645 l
-S
-3148 5645 m
-3124 5646 l
-S
-3100 5646 m
-3076 5647 l
-S
-3052 5647 m
-3028 5648 l
-S
-3004 5648 m
-2980 5649 l
-S
-2956 5649 m
-2932 5650 l
-S
-2908 5650 m
-2884 5650 l
-S
-2860 5651 m
-2836 5651 l
-S
-2812 5652 m
-2788 5652 l
-S
-2764 5653 m
-2740 5653 l
-S
-2716 5654 m
-2692 5654 l
-S
-2668 5655 m
-2644 5655 l
-S
-2620 5656 m
-2596 5656 l
-S
-2572 5657 m
-2548 5657 l
-S
-2524 5657 m
-2500 5658 l
-S
-2476 5658 m
-2452 5659 l
-S
-2428 5659 m
-2404 5660 l
-S
-2380 5660 m
-2356 5661 l
-S
-2332 5661 m
-2308 5662 l
-S
-2284 5662 m
-2260 5663 l
-S
-2236 5663 m
-2212 5664 l
-S
-2188 5664 m
-2164 5665 l
-S
-2140 5665 m
-2116 5665 l
-S
-2092 5666 m
-2068 5666 l
-S
-2044 5667 m
-2020 5667 l
-S
-1996 5668 m
-1972 5668 l
-S
-1948 5669 m
-1924 5669 l
-S
-1900 5670 m
-1876 5670 l
-S
-1852 5671 m
-1828 5671 l
-S
-1804 5672 m
-1780 5672 l
-S
-1756 5672 m
-1732 5673 l
-S
-1708 5673 m
-1684 5674 l
-S
-1660 5674 m
-1636 5675 l
-S
-1612 5675 m
-1588 5676 l
-S
-1564 5676 m
-1540 5677 l
-S
-1516 5677 m
-1492 5678 l
-S
-1468 5678 m
-1444 5679 l
-S
-1420 5679 m
-1416 5679 l
-1396 5679 l
-S
-1372 5680 m
-1348 5680 l
-S
-1323 5681 m
-1299 5681 l
-S
-1275 5682 m
-1251 5682 l
-S
-1227 5683 m
-1203 5683 l
-S
-1179 5684 m
-1155 5684 l
-S
-1131 5685 m
-1107 5685 l
-S
-1083 5686 m
-1059 5686 l
-S
-1035 5687 m
-1011 5687 l
-S
-987 5687 m
-963 5688 l
-S
-939 5688 m
-915 5689 l
-S
-891 5689 m
-879 5690 l
-867 5690 l
-S
-843 5690 m
-819 5691 l
-S
-795 5691 m
-771 5692 l
-S
-747 5692 m
-723 5693 l
-S
-699 5693 m
-675 5694 l
-S
-651 5694 m
-627 5694 l
-S
-603 5695 m
-579 5695 l
-S
-555 5696 m
-533 5696 l
-S
-4877 4985 m
-4875 4985 l
-S
-4851 4986 m
-4827 4986 l
-S
-4803 4987 m
-4779 4987 l
-S
-4755 4988 m
-4731 4988 l
-S
-4707 4988 m
-4683 4989 l
-S
-4659 4989 m
-4635 4990 l
-S
-4611 4990 m
-4601 4991 l
-4587 4991 l
-S
-4563 4991 m
-4539 4992 l
-S
-4515 4992 m
-4491 4993 l
-S
-4467 4993 m
-4443 4994 l
-S
-4419 4994 m
-4395 4995 l
-S
-4371 4995 m
-4347 4996 l
-S
-4323 4996 m
-4299 4997 l
-S
-4275 4997 m
-4251 4997 l
-S
-4227 4998 m
-4203 4998 l
-S
-4179 4999 m
-4155 4999 l
-S
-4131 5000 m
-4107 5000 l
-S
-4083 5001 m
-4064 5001 l
-4059 5001 l
-S
-4035 5002 m
-4011 5002 l
-S
-3987 5003 m
-3963 5003 l
-S
-3939 5004 m
-3915 5004 l
-S
-3891 5005 m
-3867 5005 l
-S
-3843 5006 m
-3819 5006 l
-S
-3795 5007 m
-3770 5007 l
-S
-3746 5007 m
-3722 5008 l
-S
-3698 5008 m
-3674 5009 l
-S
-3650 5009 m
-3626 5010 l
-S
-3602 5010 m
-3578 5011 l
-S
-3554 5011 m
-3530 5012 l
-S
-3506 5012 m
-3482 5013 l
-S
-3458 5013 m
-3434 5014 l
-S
-3410 5014 m
-3386 5015 l
-S
-3362 5015 m
-3338 5016 l
-S
-3314 5016 m
-3290 5016 l
-S
-3266 5017 m
-3242 5017 l
-S
-3218 5018 m
-3194 5018 l
-S
-3170 5019 m
-3146 5019 l
-S
-3122 5020 m
-3098 5020 l
-S
-3074 5021 m
-3050 5021 l
-S
-3026 5022 m
-3002 5022 l
-S
-2978 5023 m
-2954 5023 l
-S
-2930 5024 m
-2906 5024 l
-S
-2882 5025 m
-2858 5025 l
-S
-2834 5025 m
-2810 5026 l
-S
-2786 5026 m
-2762 5027 l
-S
-2738 5027 m
-2714 5028 l
-S
-2690 5028 m
-2666 5029 l
-S
-2642 5029 m
-2618 5030 l
-S
-2594 5030 m
-2570 5031 l
-S
-2546 5031 m
-2522 5032 l
-S
-2498 5032 m
-2474 5033 l
-S
-2450 5033 m
-2426 5034 l
-S
-2402 5034 m
-2378 5035 l
-S
-2354 5035 m
-2330 5035 l
-S
-2306 5036 m
-2282 5036 l
-S
-2258 5037 m
-2234 5037 l
-S
-2210 5038 m
-2186 5038 l
-S
-2162 5039 m
-2138 5039 l
-S
-2114 5040 m
-2090 5040 l
-S
-2066 5041 m
-2042 5041 l
-S
-2018 5042 m
-1994 5042 l
-S
-1970 5043 m
-1946 5043 l
-S
-1922 5044 m
-1916 5044 l
-1898 5044 l
-S
-1874 5044 m
-1850 5045 l
-S
-1826 5045 m
-1802 5046 l
-S
-1778 5046 m
-1754 5047 l
-S
-1730 5047 m
-1706 5048 l
-S
-1682 5048 m
-1658 5049 l
-S
-1634 5049 m
-1610 5050 l
-S
-1586 5050 m
-1562 5051 l
-S
-1538 5051 m
-1514 5052 l
-S
-1490 5052 m
-1466 5053 l
-S
-1442 5053 m
-1418 5053 l
-S
-1393 5054 m
-1379 5054 l
-1369 5054 l
-S
-1345 5055 m
-1321 5055 l
-S
-1297 5056 m
-1273 5056 l
-S
-1249 5057 m
-1225 5057 l
-S
-1201 5058 m
-1177 5058 l
-S
-1153 5059 m
-1129 5059 l
-S
-1105 5060 m
-1081 5060 l
-S
-1057 5061 m
-1033 5061 l
-S
-1009 5062 m
-985 5062 l
-S
-961 5063 m
-937 5063 l
-S
-913 5063 m
-889 5064 l
-S
-865 5064 m
-842 5065 l
-841 5065 l
-S
-817 5065 m
-793 5066 l
-S
-769 5066 m
-745 5067 l
-S
-721 5067 m
-697 5068 l
-S
-673 5068 m
-649 5069 l
-S
-625 5069 m
-601 5070 l
-S
-577 5070 m
-553 5071 l
-S
-4873 4359 m
-4849 4359 l
-S
-4825 4360 m
-4801 4360 l
-S
-4777 4361 m
-4753 4361 l
-S
-4729 4362 m
-4705 4362 l
-S
-4681 4362 m
-4657 4363 l
-S
-4633 4363 m
-4609 4364 l
-S
-4585 4364 m
-4563 4365 l
-4561 4365 l
-S
-4537 4365 m
-4513 4366 l
-S
-4489 4366 m
-4465 4367 l
-S
-4441 4367 m
-4417 4368 l
-S
-4393 4368 m
-4369 4369 l
-S
-4345 4369 m
-4321 4370 l
-S
-4297 4370 m
-4273 4371 l
-S
-4249 4371 m
-4225 4372 l
-S
-4201 4372 m
-4177 4373 l
-S
-4153 4373 m
-4129 4374 l
-S
-4105 4374 m
-4081 4375 l
-S
-4057 4375 m
-4033 4375 l
-S
-4009 4376 m
-3985 4376 l
-S
-3961 4377 m
-3937 4377 l
-S
-3913 4378 m
-3889 4378 l
-S
-3865 4379 m
-3841 4379 l
-S
-3816 4380 m
-3792 4380 l
-S
-3768 4381 m
-3744 4381 l
-S
-3720 4382 m
-3696 4382 l
-S
-3672 4383 m
-3648 4383 l
-S
-3624 4384 m
-3600 4384 l
-S
-3576 4385 m
-3552 4385 l
-S
-3528 4386 m
-3504 4386 l
-S
-3480 4387 m
-3456 4387 l
-S
-3432 4387 m
-3408 4388 l
-S
-3384 4388 m
-3360 4389 l
-S
-3336 4389 m
-3312 4390 l
-S
-3288 4390 m
-3264 4391 l
-S
-3240 4391 m
-3216 4392 l
-S
-3192 4392 m
-3168 4393 l
-S
-3144 4393 m
-3120 4394 l
-S
-3096 4394 m
-3072 4395 l
-S
-3048 4395 m
-3024 4396 l
-S
-3000 4396 m
-2976 4397 l
-S
-2952 4397 m
-2928 4398 l
-S
-2904 4398 m
-2880 4399 l
-S
-2856 4399 m
-2832 4400 l
-S
-2808 4400 m
-2784 4400 l
-S
-2760 4401 m
-2736 4401 l
-S
-2712 4402 m
-2688 4402 l
-S
-2664 4403 m
-2640 4403 l
-S
-2616 4404 m
-2592 4404 l
-S
-2568 4405 m
-2544 4405 l
-S
-2520 4406 m
-2496 4406 l
-S
-2472 4407 m
-2448 4407 l
-S
-2424 4408 m
-2416 4408 l
-2400 4408 l
-S
-2376 4409 m
-2352 4409 l
-S
-2328 4410 m
-2304 4410 l
-S
-2280 4411 m
-2256 4411 l
-S
-2232 4412 m
-2208 4412 l
-S
-2184 4413 m
-2160 4413 l
-S
-2136 4413 m
-2112 4414 l
-S
-2088 4414 m
-2064 4415 l
-S
-2040 4415 m
-2016 4416 l
-S
-1992 4416 m
-1968 4417 l
-S
-1944 4417 m
-1920 4418 l
-S
-1896 4418 m
-1879 4419 l
-1872 4419 l
-S
-1848 4419 m
-1824 4420 l
-S
-1800 4420 m
-1776 4421 l
-S
-1752 4421 m
-1728 4422 l
-S
-1704 4422 m
-1680 4423 l
-S
-1656 4423 m
-1632 4424 l
-S
-1608 4424 m
-1584 4425 l
-S
-1560 4425 m
-1536 4426 l
-S
-1512 4426 m
-1488 4426 l
-S
-1464 4427 m
-1439 4427 l
-S
-1415 4428 m
-1391 4428 l
-S
-1367 4429 m
-1343 4429 l
-S
-1319 4430 m
-1295 4430 l
-S
-1271 4431 m
-1247 4431 l
-S
-1223 4432 m
-1199 4432 l
-S
-1175 4433 m
-1151 4433 l
-S
-1127 4434 m
-1103 4434 l
-S
-1079 4435 m
-1055 4435 l
-S
-1031 4436 m
-1007 4436 l
-S
-983 4437 m
-959 4437 l
-S
-935 4438 m
-911 4438 l
-S
-887 4439 m
-863 4439 l
-S
-839 4439 m
-815 4440 l
-S
-791 4440 m
-767 4441 l
-S
-743 4441 m
-719 4442 l
-S
-695 4442 m
-671 4443 l
-S
-647 4443 m
-623 4444 l
-S
-599 4444 m
-575 4445 l
-S
-551 4445 m
-533 4446 l
-S
-4877 3732 m
-4871 3732 l
-S
-4847 3733 m
-4823 3733 l
-S
-4799 3734 m
-4775 3734 l
-S
-4751 3735 m
-4727 3735 l
-S
-4703 3735 m
-4679 3736 l
-S
-4655 3736 m
-4631 3737 l
-S
-4607 3737 m
-4583 3738 l
-S
-4559 3738 m
-4535 3739 l
-S
-4511 3739 m
-4487 3740 l
-S
-4463 3740 m
-4439 3741 l
-S
-4415 3741 m
-4391 3742 l
-S
-4367 3742 m
-4343 3743 l
-S
-4319 3743 m
-4295 3744 l
-S
-4271 3744 m
-4247 3745 l
-S
-4223 3745 m
-4199 3746 l
-S
-4175 3746 m
-4151 3747 l
-S
-4127 3747 m
-4103 3748 l
-S
-4079 3748 m
-4055 3749 l
-S
-4031 3749 m
-4007 3750 l
-S
-3983 3750 m
-3959 3751 l
-S
-3935 3751 m
-3911 3752 l
-S
-3887 3752 m
-3863 3753 l
-S
-3839 3753 m
-3814 3754 l
-S
-3790 3754 m
-3766 3755 l
-S
-3742 3755 m
-3718 3755 l
-S
-3694 3756 m
-3670 3756 l
-S
-3646 3757 m
-3622 3757 l
-S
-3598 3758 m
-3574 3758 l
-S
-3550 3759 m
-3526 3759 l
-S
-3502 3760 m
-3478 3760 l
-S
-3454 3761 m
-3451 3761 l
-3430 3761 l
-S
-3406 3762 m
-3382 3762 l
-S
-3358 3763 m
-3334 3763 l
-S
-3310 3764 m
-3286 3764 l
-S
-3262 3765 m
-3238 3765 l
-S
-3214 3766 m
-3190 3766 l
-S
-3166 3767 m
-3142 3767 l
-S
-3118 3768 m
-3094 3768 l
-S
-3070 3769 m
-3046 3769 l
-S
-3022 3770 m
-2998 3770 l
-S
-2974 3771 m
-2950 3771 l
-S
-2926 3772 m
-2914 3772 l
-2902 3772 l
-S
-2878 3773 m
-2854 3773 l
-S
-2830 3774 m
-2806 3774 l
-S
-2782 3775 m
-2758 3775 l
-S
-2734 3776 m
-2710 3776 l
-S
-2686 3776 m
-2662 3777 l
-S
-2638 3777 m
-2614 3778 l
-S
-2590 3778 m
-2566 3779 l
-S
-2542 3779 m
-2518 3780 l
-S
-2494 3780 m
-2470 3781 l
-S
-2446 3781 m
-2422 3782 l
-S
-2398 3782 m
-2378 3783 l
-2374 3783 l
-S
-2350 3783 m
-2326 3784 l
-S
-2302 3784 m
-2278 3785 l
-S
-2254 3785 m
-2230 3786 l
-S
-2206 3786 m
-2182 3787 l
-S
-2158 3787 m
-2134 3788 l
-S
-2110 3788 m
-2086 3789 l
-S
-2062 3789 m
-2038 3790 l
-S
-2014 3790 m
-1990 3791 l
-S
-1966 3791 m
-1942 3792 l
-S
-1918 3792 m
-1894 3793 l
-S
-1870 3793 m
-1846 3794 l
-S
-1822 3794 m
-1798 3795 l
-S
-1774 3795 m
-1750 3796 l
-S
-1726 3796 m
-1702 3796 l
-S
-1678 3797 m
-1654 3797 l
-S
-1630 3798 m
-1606 3798 l
-S
-1582 3799 m
-1558 3799 l
-S
-1534 3800 m
-1510 3800 l
-S
-1486 3801 m
-1462 3801 l
-S
-1438 3802 m
-1414 3802 l
-S
-1389 3803 m
-1365 3803 l
-S
-1341 3804 m
-1317 3804 l
-S
-1293 3805 m
-1269 3805 l
-S
-1245 3806 m
-1221 3806 l
-S
-1197 3807 m
-1173 3807 l
-S
-1149 3808 m
-1125 3808 l
-S
-1101 3809 m
-1077 3809 l
-S
-1053 3810 m
-1029 3810 l
-S
-1005 3811 m
-981 3811 l
-S
-957 3812 m
-933 3812 l
-S
-909 3813 m
-885 3813 l
-S
-861 3814 m
-837 3814 l
-S
-813 3815 m
-789 3815 l
-S
-765 3816 m
-741 3816 l
-S
-717 3817 m
-693 3817 l
-S
-669 3817 m
-645 3818 l
-S
-621 3818 m
-597 3819 l
-S
-573 3819 m
-549 3820 l
-S
-4869 3105 m
-4845 3106 l
-S
-4821 3106 m
-4797 3107 l
-S
-4773 3107 m
-4749 3108 l
-S
-4725 3108 m
-4701 3109 l
-S
-4677 3109 m
-4653 3110 l
-S
-4629 3110 m
-4605 3111 l
-S
-4581 3111 m
-4557 3112 l
-S
-4533 3112 m
-4509 3113 l
-S
-4485 3113 m
-4461 3114 l
-S
-4437 3114 m
-4413 3115 l
-S
-4389 3115 m
-4365 3116 l
-S
-4341 3116 m
-4317 3117 l
-S
-4293 3117 m
-4269 3118 l
-S
-4245 3118 m
-4221 3119 l
-S
-4197 3119 m
-4173 3120 l
-S
-4149 3120 m
-4125 3121 l
-S
-4101 3121 m
-4077 3122 l
-S
-4053 3122 m
-4029 3123 l
-S
-4005 3123 m
-3981 3124 l
-S
-3957 3124 m
-3950 3124 l
-3933 3125 l
-S
-3909 3125 m
-3885 3126 l
-S
-3861 3126 m
-3837 3127 l
-S
-3813 3127 m
-3789 3128 l
-S
-3764 3128 m
-3740 3129 l
-S
-3716 3129 m
-3692 3130 l
-S
-3668 3130 m
-3644 3131 l
-S
-3620 3131 m
-3596 3132 l
-S
-3572 3132 m
-3548 3133 l
-S
-3524 3133 m
-3500 3134 l
-S
-3476 3134 m
-3452 3135 l
-S
-3428 3135 m
-3413 3135 l
-3404 3136 l
-S
-3380 3136 m
-3356 3137 l
-S
-3332 3137 m
-3308 3138 l
-S
-3284 3138 m
-3260 3139 l
-S
-3236 3139 m
-3212 3140 l
-S
-3188 3140 m
-3164 3141 l
-S
-3140 3141 m
-3116 3142 l
-S
-3092 3142 m
-3068 3143 l
-S
-3044 3143 m
-3020 3144 l
-S
-2996 3144 m
-2972 3145 l
-S
-2948 3145 m
-2924 3146 l
-S
-2900 3146 m
-2876 3147 l
-S
-2852 3147 m
-2828 3148 l
-S
-2804 3148 m
-2780 3149 l
-S
-2756 3149 m
-2732 3150 l
-S
-2708 3150 m
-2684 3151 l
-S
-2660 3151 m
-2636 3152 l
-S
-2612 3152 m
-2588 3152 l
-S
-2564 3153 m
-2540 3153 l
-S
-2516 3154 m
-2492 3154 l
-S
-2468 3155 m
-2444 3155 l
-S
-2420 3156 m
-2396 3156 l
-S
-2372 3157 m
-2348 3157 l
-S
-2324 3158 m
-2300 3158 l
-S
-2276 3159 m
-2252 3159 l
-S
-2228 3160 m
-2204 3160 l
-S
-2180 3161 m
-2156 3161 l
-S
-2132 3162 m
-2108 3162 l
-S
-2084 3163 m
-2060 3163 l
-S
-2036 3164 m
-2012 3164 l
-S
-1988 3165 m
-1964 3165 l
-S
-1940 3166 m
-1916 3166 l
-S
-1892 3167 m
-1868 3167 l
-S
-1844 3168 m
-1820 3168 l
-S
-1796 3169 m
-1772 3169 l
-S
-1748 3170 m
-1724 3170 l
-S
-1700 3171 m
-1676 3171 l
-S
-1652 3172 m
-1628 3172 l
-S
-1604 3173 m
-1580 3173 l
-S
-1556 3174 m
-1532 3174 l
-S
-1508 3175 m
-1484 3175 l
-S
-1460 3176 m
-1436 3176 l
-S
-1412 3177 m
-1388 3177 l
-S
-1364 3178 m
-1340 3178 l
-S
-1315 3179 m
-1291 3179 l
-S
-1267 3180 m
-1265 3180 l
-1243 3180 l
-S
-1219 3181 m
-1195 3181 l
-S
-1171 3182 m
-1147 3182 l
-S
-1123 3183 m
-1099 3183 l
-S
-1075 3184 m
-1051 3184 l
-S
-1027 3185 m
-1003 3185 l
-S
-979 3186 m
-955 3186 l
-S
-931 3187 m
-907 3187 l
-S
-883 3188 m
-859 3188 l
-S
-835 3189 m
-811 3189 l
-S
-787 3190 m
-763 3190 l
-S
-739 3191 m
-728 3191 l
-715 3191 l
-S
-691 3192 m
-667 3192 l
-S
-643 3193 m
-619 3193 l
-S
-595 3194 m
-571 3194 l
-S
-547 3195 m
-533 3195 l
-S
-4877 2479 m
-4867 2479 l
-S
-4843 2479 m
-4819 2480 l
-S
-4795 2480 m
-4771 2481 l
-S
-4747 2481 m
-4723 2482 l
-S
-4699 2482 m
-4675 2483 l
-S
-4651 2483 m
-4627 2484 l
-S
-4603 2484 m
-4579 2485 l
-S
-4555 2485 m
-4531 2486 l
-S
-4507 2486 m
-4483 2487 l
-S
-4459 2487 m
-4448 2488 l
-4435 2488 l
-S
-4411 2488 m
-4387 2489 l
-S
-4363 2489 m
-4339 2490 l
-S
-4315 2490 m
-4291 2491 l
-S
-4267 2491 m
-4243 2492 l
-S
-4219 2492 m
-4195 2493 l
-S
-4171 2493 m
-4147 2494 l
-S
-4123 2494 m
-4099 2495 l
-S
-4075 2495 m
-4051 2496 l
-S
-4027 2496 m
-4003 2497 l
-S
-3979 2497 m
-3955 2498 l
-S
-3931 2498 m
-3911 2499 l
-3907 2499 l
-S
-3883 2499 m
-3859 2500 l
-S
-3835 2500 m
-3811 2501 l
-S
-3787 2501 m
-3763 2502 l
-S
-3739 2502 m
-3715 2503 l
-S
-3691 2503 m
-3667 2504 l
-S
-3642 2504 m
-3618 2505 l
-S
-3594 2505 m
-3570 2506 l
-S
-3546 2506 m
-3522 2507 l
-S
-3498 2507 m
-3474 2508 l
-S
-3450 2508 m
-3426 2509 l
-S
-3402 2509 m
-3378 2510 l
-S
-3354 2510 m
-3330 2511 l
-S
-3306 2511 m
-3282 2512 l
-S
-3258 2512 m
-3234 2513 l
-S
-3210 2513 m
-3186 2514 l
-S
-3162 2514 m
-3138 2515 l
-S
-3114 2515 m
-3090 2516 l
-S
-3066 2516 m
-3042 2517 l
-S
-3018 2517 m
-2994 2518 l
-S
-2970 2519 m
-2946 2519 l
-S
-2922 2520 m
-2898 2520 l
-S
-2874 2521 m
-2850 2521 l
-S
-2826 2522 m
-2802 2522 l
-S
-2778 2523 m
-2754 2523 l
-S
-2730 2524 m
-2706 2524 l
-S
-2682 2525 m
-2658 2525 l
-S
-2634 2526 m
-2610 2526 l
-S
-2586 2527 m
-2562 2527 l
-S
-2538 2528 m
-2514 2528 l
-S
-2490 2529 m
-2466 2529 l
-S
-2442 2530 m
-2418 2530 l
-S
-2394 2531 m
-2370 2531 l
-S
-2346 2532 m
-2322 2532 l
-S
-2298 2533 m
-2274 2533 l
-S
-2250 2534 m
-2226 2534 l
-S
-2202 2535 m
-2178 2535 l
-S
-2154 2536 m
-2130 2536 l
-S
-2106 2537 m
-2082 2537 l
-S
-2058 2538 m
-2034 2538 l
-S
-2010 2539 m
-1986 2539 l
-S
-1962 2540 m
-1938 2540 l
-S
-1914 2541 m
-1890 2541 l
-S
-1866 2542 m
-1842 2542 l
-S
-1818 2543 m
-1794 2543 l
-S
-1770 2544 m
-1763 2544 l
-1746 2544 l
-S
-1722 2545 m
-1698 2545 l
-S
-1674 2546 m
-1650 2546 l
-S
-1626 2547 m
-1602 2547 l
-S
-1578 2548 m
-1554 2548 l
-S
-1530 2549 m
-1506 2549 l
-S
-1482 2550 m
-1458 2550 l
-S
-1434 2551 m
-1410 2551 l
-S
-1386 2552 m
-1362 2552 l
-S
-1338 2553 m
-1314 2553 l
-S
-1290 2554 m
-1266 2554 l
-S
-1242 2555 m
-1226 2555 l
-1218 2555 l
-S
-1194 2556 m
-1170 2556 l
-S
-1145 2557 m
-1121 2557 l
-S
-1097 2558 m
-1073 2558 l
-S
-1049 2559 m
-1025 2559 l
-S
-1001 2560 m
-977 2560 l
-S
-953 2561 m
-929 2561 l
-S
-905 2562 m
-881 2562 l
-S
-857 2563 m
-833 2563 l
-S
-809 2564 m
-785 2564 l
-S
-761 2565 m
-737 2565 l
-S
-713 2566 m
-689 2566 l
-S
-665 2567 m
-641 2567 l
-S
-617 2568 m
-593 2568 l
-S
-569 2569 m
-545 2569 l
-S
-4865 1852 m
-4841 1853 l
-S
-4817 1853 m
-4793 1854 l
-S
-4769 1854 m
-4745 1855 l
-S
-4721 1855 m
-4697 1856 l
-S
-4673 1856 m
-4649 1857 l
-S
-4625 1857 m
-4601 1858 l
-S
-4577 1858 m
-4553 1859 l
-S
-4529 1859 m
-4505 1860 l
-S
-4481 1860 m
-4457 1861 l
-S
-4433 1861 m
-4409 1862 l
-S
-4385 1862 m
-4361 1863 l
-S
-4337 1863 m
-4313 1864 l
-S
-4289 1864 m
-4265 1865 l
-S
-4241 1865 m
-4217 1866 l
-S
-4193 1866 m
-4169 1867 l
-S
-4145 1867 m
-4121 1868 l
-S
-4097 1869 m
-4073 1869 l
-S
-4049 1870 m
-4025 1870 l
-S
-4001 1871 m
-3977 1871 l
-S
-3953 1872 m
-3929 1872 l
-S
-3905 1873 m
-3881 1873 l
-S
-3857 1874 m
-3833 1874 l
-S
-3809 1875 m
-3785 1875 l
-S
-3761 1876 m
-3737 1876 l
-S
-3713 1877 m
-3689 1877 l
-S
-3665 1878 m
-3641 1878 l
-S
-3617 1879 m
-3593 1879 l
-S
-3569 1880 m
-3545 1880 l
-S
-3521 1881 m
-3497 1881 l
-S
-3473 1882 m
-3448 1882 l
-S
-3424 1883 m
-3400 1883 l
-S
-3376 1884 m
-3352 1884 l
-S
-3328 1885 m
-3304 1885 l
-S
-3280 1886 m
-3256 1886 l
-S
-3232 1887 m
-3208 1887 l
-S
-3184 1888 m
-3160 1888 l
-S
-3136 1889 m
-3112 1889 l
-S
-3088 1890 m
-3064 1890 l
-S
-3040 1891 m
-3016 1891 l
-S
-2992 1892 m
-2968 1892 l
-S
-2944 1893 m
-2920 1893 l
-S
-2896 1894 m
-2872 1894 l
-S
-2848 1895 m
-2824 1895 l
-S
-2800 1896 m
-2797 1896 l
-2776 1896 l
-S
-2752 1897 m
-2728 1897 l
-S
-2704 1898 m
-2680 1898 l
-S
-2656 1899 m
-2632 1900 l
-S
-2608 1900 m
-2584 1901 l
-S
-2560 1901 m
-2536 1902 l
-S
-2512 1902 m
-2488 1903 l
-S
-2464 1903 m
-2440 1904 l
-S
-2416 1904 m
-2392 1905 l
-S
-2368 1905 m
-2344 1906 l
-S
-2320 1906 m
-2296 1907 l
-S
-2272 1907 m
-2260 1907 l
-2248 1908 l
-S
-2224 1908 m
-2200 1909 l
-S
-2176 1909 m
-2152 1910 l
-S
-2128 1910 m
-2104 1911 l
-S
-2080 1911 m
-2056 1912 l
-S
-2032 1912 m
-2008 1913 l
-S
-1984 1913 m
-1960 1914 l
-S
-1936 1914 m
-1912 1915 l
-S
-1888 1915 m
-1864 1916 l
-S
-1840 1916 m
-1816 1917 l
-S
-1792 1917 m
-1768 1918 l
-S
-1744 1918 m
-1724 1919 l
-1720 1919 l
-S
-1696 1919 m
-1672 1920 l
-S
-1648 1920 m
-1624 1921 l
-S
-1600 1921 m
-1576 1922 l
-S
-1552 1922 m
-1528 1923 l
-S
-1504 1923 m
-1480 1924 l
-S
-1456 1924 m
-1432 1925 l
-S
-1408 1925 m
-1384 1926 l
-S
-1360 1926 m
-1336 1927 l
-S
-1312 1927 m
-1288 1928 l
-S
-1264 1928 m
-1240 1929 l
-S
-1216 1930 m
-1192 1930 l
-S
-1168 1931 m
-1144 1931 l
-S
-1120 1932 m
-1096 1932 l
-S
-1072 1933 m
-1048 1933 l
-S
-1024 1934 m
-1000 1934 l
-S
-976 1935 m
-952 1935 l
-S
-927 1936 m
-903 1936 l
-S
-879 1937 m
-855 1937 l
-S
-831 1938 m
-807 1938 l
-S
-783 1939 m
-759 1939 l
-S
-735 1940 m
-711 1940 l
-S
-687 1941 m
-663 1941 l
-S
-639 1942 m
-615 1942 l
-S
-591 1943 m
-567 1943 l
-S
-543 1944 m
-533 1944 l
-S
-4877 2742 m
-4876 2728 l
-S
-4875 2704 m
-4873 2680 l
-S
-4872 2656 m
-4870 2632 l
-S
-4869 2608 m
-4867 2584 l
-S
-4866 2560 m
-4864 2536 l
-S
-4863 2512 m
-4861 2488 l
-S
-4860 2464 m
-4858 2440 l
-S
-4857 2416 m
-4855 2392 l
-S
-4854 2368 m
-4852 2344 l
-S
-4851 2320 m
-4849 2296 l
-S
-4848 2273 m
-4846 2249 l
-S
-4845 2225 m
-4843 2201 l
-S
-4842 2177 m
-4840 2153 l
-S
-4838 2129 m
-4838 2121 l
-4837 2105 l
-S
-4835 2081 m
-4834 2057 l
-S
-4832 2033 m
-4831 2009 l
-S
-4829 1985 m
-4828 1961 l
-S
-4826 1937 m
-4825 1913 l
-S
-4823 1889 m
-4822 1865 l
-S
-4820 1841 m
-4819 1817 l
-S
-4817 1793 m
-4816 1777 l
-S
-4502 6121 m
-4501 6113 l
-S
-4500 6089 m
-4498 6065 l
-S
-4497 6041 m
-4496 6017 l
-S
-4494 5993 m
-4493 5969 l
-S
-4491 5945 m
-4490 5921 l
-S
-4489 5897 m
-4488 5888 l
-4487 5874 l
-S
-4486 5850 m
-4484 5826 l
-S
-4483 5802 m
-4482 5778 l
-S
-4480 5754 m
-4479 5730 l
-S
-4477 5706 m
-4476 5682 l
-S
-4475 5658 m
-4473 5634 l
-S
-4472 5610 m
-4470 5586 l
-S
-4469 5562 m
-4468 5538 l
-S
-4466 5514 m
-4465 5490 l
-S
-4463 5466 m
-4462 5442 l
-S
-4461 5418 m
-4459 5394 l
-S
-4458 5370 m
-4457 5351 l
-4456 5346 l
-S
-4455 5322 m
-4454 5298 l
-S
-4452 5274 m
-4451 5250 l
-S
-4449 5226 m
-4448 5202 l
-S
-4446 5178 m
-4445 5155 l
-S
-4444 5131 m
-4442 5107 l
-S
-4441 5083 m
-4439 5059 l
-S
-4438 5035 m
-4436 5011 l
-S
-4435 4987 m
-4434 4963 l
-S
-4432 4939 m
-4431 4915 l
-S
-4429 4891 m
-4428 4867 l
-S
-4426 4843 m
-4425 4819 l
-S
-4424 4795 m
-4422 4771 l
-S
-4421 4747 m
-4419 4723 l
-S
-4418 4699 m
-4416 4675 l
-S
-4415 4651 m
-4414 4627 l
-S
-4412 4603 m
-4411 4579 l
-S
-4409 4555 m
-4408 4531 l
-S
-4406 4507 m
-4405 4484 l
-S
-4403 4460 m
-4402 4436 l
-S
-4401 4412 m
-4399 4388 l
-S
-4398 4364 m
-4396 4340 l
-S
-4395 4316 m
-4393 4292 l
-S
-4392 4268 m
-4390 4244 l
-S
-4389 4220 m
-4388 4196 l
-S
-4386 4172 m
-4385 4148 l
-S
-4383 4124 m
-4382 4100 l
-S
-4380 4076 m
-4379 4052 l
-S
-4377 4028 m
-4376 4004 l
-S
-4374 3980 m
-4373 3956 l
-S
-4372 3932 m
-4370 3908 l
-S
-4369 3884 m
-4367 3860 l
-S
-4366 3836 m
-4364 3813 l
-S
-4363 3789 m
-4361 3765 l
-S
-4360 3741 m
-4358 3717 l
-S
-4357 3693 m
-4355 3669 l
-S
-4354 3645 m
-4353 3621 l
-S
-4351 3597 m
-4350 3573 l
-S
-4348 3549 m
-4347 3525 l
-S
-4345 3501 m
-4344 3477 l
-S
-4342 3453 m
-4341 3429 l
-S
-4339 3405 m
-4338 3381 l
-S
-4336 3357 m
-4335 3333 l
-S
-4333 3309 m
-4332 3285 l
-S
-4330 3261 m
-4329 3237 l
-S
-4327 3213 m
-4327 3206 l
-4326 3190 l
-S
-4324 3166 m
-4323 3142 l
-S
-4321 3118 m
-4320 3094 l
-S
-4318 3070 m
-4317 3046 l
-S
-4316 3022 m
-4314 2998 l
-S
-4313 2974 m
-4311 2950 l
-S
-4310 2926 m
-4308 2902 l
-S
-4307 2878 m
-4305 2854 l
-S
-4304 2830 m
-4302 2806 l
-S
-4301 2782 m
-4299 2758 l
-S
-4298 2734 m
-4296 2710 l
-S
-4295 2686 m
-4294 2670 l
-4293 2662 l
-S
-4292 2638 m
-4290 2614 l
-S
-4289 2590 m
-4287 2567 l
-S
-4286 2543 m
-4284 2519 l
-S
-4283 2495 m
-4281 2471 l
-S
-4280 2447 m
-4278 2423 l
-S
-4277 2399 m
-4275 2375 l
-S
-4274 2351 m
-4272 2327 l
-S
-4270 2303 m
-4269 2279 l
-S
-4267 2255 m
-4266 2231 l
-S
-4264 2207 m
-4263 2183 l
-S
-4261 2159 m
-4260 2135 l
-S
-4258 2111 m
-4257 2087 l
-S
-4255 2063 m
-4254 2039 l
-S
-4252 2015 m
-4251 1991 l
-S
-4249 1968 m
-4248 1944 l
-S
-4246 1920 m
-4245 1896 l
-S
-4243 1872 m
-4242 1848 l
-S
-4240 1824 m
-4239 1800 l
-S
-3923 6120 m
-3921 6096 l
-S
-3920 6072 m
-3918 6048 l
-S
-3917 6024 m
-3916 6000 l
-S
-3914 5976 m
-3913 5952 l
-S
-3912 5928 m
-3910 5904 l
-S
-3909 5880 m
-3907 5856 l
-S
-3906 5832 m
-3905 5808 l
-S
-3903 5784 m
-3902 5760 l
-S
-3900 5736 m
-3899 5712 l
-S
-3898 5688 m
-3896 5664 l
-S
-3895 5640 m
-3893 5616 l
-S
-3892 5592 m
-3890 5568 l
-S
-3889 5544 m
-3888 5521 l
-S
-3886 5497 m
-3885 5473 l
-S
-3883 5449 m
-3882 5425 l
-S
-3881 5401 m
-3879 5377 l
-S
-3878 5353 m
-3876 5329 l
-S
-3875 5305 m
-3874 5281 l
-S
-3872 5257 m
-3871 5233 l
-S
-3869 5209 m
-3868 5185 l
-S
-3866 5161 m
-3865 5137 l
-S
-3864 5113 m
-3862 5089 l
-S
-3861 5065 m
-3859 5041 l
-S
-3858 5017 m
-3857 4993 l
-S
-3855 4969 m
-3854 4945 l
-S
-3852 4921 m
-3851 4897 l
-S
-3849 4873 m
-3848 4849 l
-S
-3847 4826 m
-3845 4802 l
-S
-3844 4778 m
-3842 4754 l
-S
-3841 4730 m
-3839 4706 l
-S
-3838 4682 m
-3836 4658 l
-S
-3835 4634 m
-3834 4610 l
-S
-3832 4586 m
-3831 4562 l
-S
-3829 4538 m
-3828 4514 l
-S
-3826 4490 m
-3825 4466 l
-S
-3823 4442 m
-3822 4418 l
-S
-3821 4394 m
-3819 4370 l
-S
-3818 4346 m
-3816 4322 l
-S
-3815 4298 m
-3814 4290 l
-3813 4274 l
-S
-3812 4250 m
-3810 4226 l
-S
-3809 4202 m
-3808 4178 l
-S
-3806 4155 m
-3805 4131 l
-S
-3803 4107 m
-3802 4083 l
-S
-3800 4059 m
-3799 4035 l
-S
-3797 4011 m
-3796 3987 l
-S
-3794 3963 m
-3793 3939 l
-S
-3792 3915 m
-3790 3891 l
-S
-3789 3867 m
-3787 3843 l
-S
-3786 3819 m
-3784 3795 l
-S
-3783 3771 m
-3782 3754 l
-3781 3747 l
-S
-3780 3723 m
-3778 3699 l
-S
-3777 3675 m
-3775 3651 l
-S
-3774 3627 m
-3772 3603 l
-S
-3771 3579 m
-3770 3555 l
-S
-3768 3531 m
-3767 3508 l
-S
-3765 3484 m
-3764 3460 l
-S
-3762 3436 m
-3761 3412 l
-S
-3759 3388 m
-3758 3364 l
-S
-3756 3340 m
-3755 3316 l
-S
-3753 3292 m
-3752 3268 l
-S
-3750 3244 m
-3749 3220 l
-S
-3747 3196 m
-3746 3172 l
-S
-3744 3148 m
-3743 3124 l
-S
-3741 3100 m
-3740 3076 l
-S
-3738 3052 m
-3737 3028 l
-S
-3735 3004 m
-3734 2980 l
-S
-3732 2956 m
-3731 2932 l
-S
-3730 2908 m
-3728 2885 l
-S
-3727 2861 m
-3725 2837 l
-S
-3724 2813 m
-3722 2789 l
-S
-3721 2765 m
-3719 2741 l
-S
-3718 2717 m
-3716 2693 l
-S
-3715 2669 m
-3713 2645 l
-S
-3712 2621 m
-3710 2597 l
-S
-3709 2573 m
-3707 2549 l
-S
-3706 2525 m
-3704 2501 l
-S
-3703 2477 m
-3701 2453 l
-S
-3699 2429 m
-3698 2405 l
-S
-3696 2381 m
-3695 2357 l
-S
-3693 2333 m
-3692 2309 l
-S
-3690 2286 m
-3689 2262 l
-S
-3687 2238 m
-3686 2214 l
-S
-3684 2190 m
-3683 2166 l
-S
-3681 2142 m
-3680 2118 l
-S
-3678 2094 m
-3677 2070 l
-S
-3675 2046 m
-3674 2022 l
-S
-3672 1998 m
-3671 1974 l
-S
-3669 1950 m
-3668 1926 l
-S
-3666 1902 m
-3665 1878 l
-S
-3663 1854 m
-3662 1830 l
-S
-3660 1806 m
-3658 1782 l
-S
-3343 6102 m
-3341 6078 l
-S
-3340 6054 m
-3339 6030 l
-S
-3337 6006 m
-3336 5982 l
-S
-3334 5958 m
-3333 5934 l
-S
-3332 5910 m
-3332 5910 l
-3330 5887 l
-S
-3329 5863 m
-3327 5839 l
-S
-3326 5815 m
-3325 5791 l
-S
-3323 5767 m
-3322 5743 l
-S
-3320 5719 m
-3319 5695 l
-S
-3318 5671 m
-3316 5647 l
-S
-3315 5623 m
-3313 5599 l
-S
-3312 5575 m
-3311 5551 l
-S
-3309 5527 m
-3308 5503 l
-S
-3306 5479 m
-3305 5455 l
-S
-3304 5431 m
-3302 5407 l
-S
-3301 5383 m
-3300 5374 l
-3299 5359 l
-S
-3298 5335 m
-3296 5311 l
-S
-3295 5287 m
-3294 5263 l
-S
-3292 5239 m
-3291 5215 l
-S
-3289 5191 m
-3288 5168 l
-S
-3287 5144 m
-3285 5120 l
-S
-3284 5096 m
-3282 5072 l
-S
-3281 5048 m
-3279 5024 l
-S
-3278 5000 m
-3277 4976 l
-S
-3275 4952 m
-3274 4928 l
-S
-3272 4904 m
-3271 4880 l
-S
-3269 4856 m
-3268 4838 l
-3268 4832 l
-S
-3267 4808 m
-3265 4784 l
-S
-3264 4760 m
-3262 4736 l
-S
-3261 4712 m
-3259 4688 l
-S
-3258 4664 m
-3256 4640 l
-S
-3255 4616 m
-3254 4592 l
-S
-3252 4568 m
-3251 4544 l
-S
-3249 4520 m
-3248 4497 l
-S
-3246 4473 m
-3245 4449 l
-S
-3244 4425 m
-3242 4401 l
-S
-3241 4377 m
-3239 4353 l
-S
-3238 4329 m
-3236 4305 l
-S
-3235 4281 m
-3233 4257 l
-S
-3232 4233 m
-3231 4209 l
-S
-3229 4185 m
-3228 4161 l
-S
-3226 4137 m
-3225 4113 l
-S
-3223 4089 m
-3222 4065 l
-S
-3220 4041 m
-3219 4017 l
-S
-3217 3993 m
-3216 3969 l
-S
-3214 3945 m
-3213 3921 l
-S
-3212 3897 m
-3210 3873 l
-S
-3209 3849 m
-3207 3826 l
-S
-3206 3802 m
-3204 3778 l
-S
-3203 3754 m
-3201 3730 l
-S
-3200 3706 m
-3198 3682 l
-S
-3197 3658 m
-3195 3634 l
-S
-3194 3610 m
-3192 3586 l
-S
-3191 3562 m
-3190 3538 l
-S
-3188 3514 m
-3187 3490 l
-S
-3185 3466 m
-3184 3442 l
-S
-3182 3418 m
-3181 3394 l
-S
-3179 3370 m
-3178 3346 l
-S
-3176 3322 m
-3175 3298 l
-S
-3173 3274 m
-3172 3250 l
-S
-3170 3226 m
-3169 3203 l
-S
-3167 3179 m
-3166 3155 l
-S
-3164 3131 m
-3163 3107 l
-S
-3161 3083 m
-3160 3059 l
-S
-3158 3035 m
-3157 3011 l
-S
-3155 2987 m
-3154 2963 l
-S
-3152 2939 m
-3151 2915 l
-S
-3149 2891 m
-3148 2867 l
-S
-3146 2843 m
-3145 2819 l
-S
-3143 2795 m
-3142 2771 l
-S
-3141 2747 m
-3139 2723 l
-S
-3138 2699 m
-3137 2694 l
-3136 2675 l
-S
-3135 2651 m
-3133 2627 l
-S
-3131 2603 m
-3130 2580 l
-S
-3128 2556 m
-3127 2532 l
-S
-3125 2508 m
-3124 2484 l
-S
-3122 2460 m
-3121 2436 l
-S
-3119 2412 m
-3118 2388 l
-S
-3116 2364 m
-3115 2340 l
-S
-3113 2316 m
-3112 2292 l
-S
-3110 2268 m
-3109 2244 l
-S
-3107 2220 m
-3106 2196 l
-S
-3104 2172 m
-3103 2158 l
-3103 2148 l
-S
-3101 2124 m
-3100 2100 l
-S
-3098 2076 m
-3097 2052 l
-S
-3095 2028 m
-3094 2004 l
-S
-3092 1981 m
-3091 1957 l
-S
-3089 1933 m
-3088 1909 l
-S
-3086 1885 m
-3084 1861 l
-S
-3083 1837 m
-3081 1813 l
-S
-3080 1789 m
-3079 1777 l
-S
-2765 6121 m
-2764 6109 l
-S
-2763 6085 m
-2761 6061 l
-S
-2760 6037 m
-2759 6013 l
-S
-2757 5989 m
-2756 5965 l
-S
-2755 5941 m
-2753 5921 l
-2753 5917 l
-S
-2752 5893 m
-2750 5869 l
-S
-2749 5845 m
-2748 5821 l
-S
-2746 5797 m
-2745 5773 l
-S
-2743 5749 m
-2742 5725 l
-S
-2741 5701 m
-2739 5677 l
-S
-2738 5653 m
-2736 5629 l
-S
-2735 5605 m
-2733 5581 l
-S
-2732 5557 m
-2731 5534 l
-S
-2729 5510 m
-2728 5486 l
-S
-2726 5462 m
-2725 5438 l
-S
-2724 5414 m
-2722 5390 l
-S
-2721 5366 m
-2719 5342 l
-S
-2718 5318 m
-2717 5294 l
-S
-2715 5270 m
-2714 5246 l
-S
-2712 5222 m
-2711 5198 l
-S
-2709 5174 m
-2708 5150 l
-S
-2707 5126 m
-2705 5102 l
-S
-2704 5078 m
-2702 5054 l
-S
-2701 5030 m
-2699 5006 l
-S
-2698 4982 m
-2697 4958 l
-S
-2695 4934 m
-2694 4910 l
-S
-2692 4886 m
-2691 4862 l
-S
-2689 4839 m
-2688 4815 l
-S
-2687 4791 m
-2685 4767 l
-S
-2684 4743 m
-2682 4719 l
-S
-2681 4695 m
-2679 4671 l
-S
-2678 4647 m
-2677 4623 l
-S
-2675 4599 m
-2674 4575 l
-S
-2672 4551 m
-2671 4527 l
-S
-2669 4503 m
-2668 4479 l
-S
-2666 4455 m
-2665 4431 l
-S
-2664 4407 m
-2662 4383 l
-S
-2661 4359 m
-2659 4335 l
-S
-2658 4311 m
-2656 4287 l
-S
-2655 4263 m
-2653 4239 l
-S
-2652 4215 m
-2651 4191 l
-S
-2649 4168 m
-2648 4144 l
-S
-2646 4120 m
-2645 4096 l
-S
-2643 4072 m
-2642 4048 l
-S
-2640 4024 m
-2639 4000 l
-S
-2637 3976 m
-2636 3952 l
-S
-2634 3928 m
-2633 3904 l
-S
-2632 3880 m
-2630 3856 l
-S
-2629 3832 m
-2627 3808 l
-S
-2626 3784 m
-2625 3778 l
-2624 3760 l
-S
-2623 3736 m
-2621 3712 l
-S
-2620 3688 m
-2618 3664 l
-S
-2617 3640 m
-2615 3616 l
-S
-2614 3592 m
-2612 3568 l
-S
-2611 3544 m
-2610 3521 l
-S
-2608 3497 m
-2607 3473 l
-S
-2605 3449 m
-2604 3425 l
-S
-2602 3401 m
-2601 3377 l
-S
-2599 3353 m
-2598 3329 l
-S
-2596 3305 m
-2595 3281 l
-S
-2593 3257 m
-2592 3242 l
-2592 3233 l
-S
-2590 3209 m
-2589 3185 l
-S
-2587 3161 m
-2586 3137 l
-S
-2584 3113 m
-2583 3089 l
-S
-2581 3065 m
-2580 3041 l
-S
-2578 3017 m
-2577 2993 l
-S
-2575 2969 m
-2574 2945 l
-S
-2572 2921 m
-2571 2898 l
-S
-2569 2874 m
-2568 2850 l
-S
-2566 2826 m
-2565 2802 l
-S
-2563 2778 m
-2562 2754 l
-S
-2560 2730 m
-2559 2706 l
-2559 2706 l
-S
-2557 2682 m
-2556 2658 l
-S
-2554 2634 m
-2553 2610 l
-S
-2551 2586 m
-2550 2562 l
-S
-2548 2538 m
-2547 2514 l
-S
-2545 2490 m
-2544 2466 l
-S
-2542 2442 m
-2541 2418 l
-S
-2539 2394 m
-2538 2370 l
-S
-2536 2346 m
-2535 2322 l
-S
-2533 2299 m
-2532 2275 l
-S
-2530 2251 m
-2529 2227 l
-S
-2527 2203 m
-2526 2179 l
-S
-2524 2155 m
-2523 2131 l
-S
-2521 2107 m
-2520 2083 l
-S
-2518 2059 m
-2517 2035 l
-S
-2515 2011 m
-2514 1987 l
-S
-2512 1963 m
-2511 1939 l
-S
-2509 1915 m
-2507 1891 l
-S
-2506 1867 m
-2504 1843 l
-S
-2503 1819 m
-2501 1795 l
-S
-2186 6115 m
-2184 6091 l
-S
-2183 6067 m
-2182 6043 l
-S
-2180 6019 m
-2179 5995 l
-S
-2177 5971 m
-2176 5947 l
-S
-2175 5923 m
-2173 5900 l
-S
-2172 5876 m
-2170 5852 l
-S
-2169 5828 m
-2168 5804 l
-S
-2166 5780 m
-2165 5756 l
-S
-2163 5732 m
-2162 5708 l
-S
-2161 5684 m
-2159 5660 l
-S
-2158 5636 m
-2156 5612 l
-S
-2155 5588 m
-2154 5564 l
-S
-2152 5540 m
-2151 5516 l
-S
-2149 5492 m
-2148 5468 l
-S
-2147 5444 m
-2145 5420 l
-S
-2144 5396 m
-2142 5372 l
-S
-2141 5348 m
-2139 5324 l
-S
-2138 5300 m
-2137 5276 l
-S
-2135 5252 m
-2134 5228 l
-S
-2132 5205 m
-2131 5181 l
-S
-2129 5157 m
-2128 5133 l
-S
-2127 5109 m
-2125 5085 l
-S
-2124 5061 m
-2122 5037 l
-S
-2121 5013 m
-2120 4989 l
-S
-2118 4965 m
-2117 4941 l
-S
-2115 4917 m
-2114 4893 l
-S
-2112 4869 m
-2112 4861 l
-2111 4845 l
-S
-2110 4821 m
-2108 4797 l
-S
-2107 4773 m
-2105 4749 l
-S
-2104 4725 m
-2102 4701 l
-S
-2101 4677 m
-2099 4653 l
-S
-2098 4629 m
-2097 4605 l
-S
-2095 4581 m
-2094 4557 l
-S
-2092 4533 m
-2091 4510 l
-S
-2089 4486 m
-2088 4462 l
-S
-2086 4438 m
-2085 4414 l
-S
-2084 4390 m
-2082 4366 l
-S
-2081 4342 m
-2080 4325 l
-2079 4318 l
-S
-2078 4294 m
-2076 4270 l
-S
-2075 4246 m
-2073 4222 l
-S
-2072 4198 m
-2071 4174 l
-S
-2069 4150 m
-2068 4126 l
-S
-2066 4102 m
-2065 4078 l
-S
-2063 4054 m
-2062 4030 l
-S
-2060 4006 m
-2059 3982 l
-S
-2057 3958 m
-2056 3934 l
-S
-2054 3910 m
-2053 3886 l
-S
-2052 3863 m
-2050 3839 l
-S
-2049 3815 m
-2047 3791 l
-S
-2046 3767 m
-2044 3743 l
-S
-2043 3719 m
-2041 3695 l
-S
-2040 3671 m
-2038 3647 l
-S
-2037 3623 m
-2035 3599 l
-S
-2034 3575 m
-2032 3551 l
-S
-2031 3527 m
-2030 3503 l
-S
-2028 3479 m
-2027 3455 l
-S
-2025 3431 m
-2024 3407 l
-S
-2022 3383 m
-2021 3359 l
-S
-2019 3335 m
-2018 3311 l
-S
-2016 3287 m
-2015 3263 l
-S
-2013 3239 m
-2012 3216 l
-S
-2010 3192 m
-2009 3168 l
-S
-2007 3144 m
-2006 3120 l
-S
-2004 3096 m
-2003 3072 l
-S
-2001 3048 m
-2000 3024 l
-S
-1998 3000 m
-1997 2976 l
-S
-1995 2952 m
-1994 2928 l
-S
-1992 2904 m
-1991 2880 l
-S
-1989 2856 m
-1988 2832 l
-S
-1986 2808 m
-1985 2784 l
-S
-1983 2760 m
-1982 2736 l
-S
-1980 2712 m
-1979 2688 l
-S
-1977 2664 m
-1976 2640 l
-S
-1974 2617 m
-1973 2593 l
-S
-1971 2569 m
-1970 2545 l
-S
-1968 2521 m
-1967 2497 l
-S
-1965 2473 m
-1964 2449 l
-S
-1962 2425 m
-1961 2401 l
-S
-1959 2377 m
-1958 2353 l
-S
-1956 2329 m
-1955 2305 l
-S
-1953 2281 m
-1952 2257 l
-S
-1950 2233 m
-1949 2209 l
-S
-1947 2185 m
-1947 2182 l
-1946 2161 l
-S
-1944 2137 m
-1943 2113 l
-S
-1941 2089 m
-1940 2065 l
-S
-1938 2041 m
-1937 2018 l
-S
-1935 1994 m
-1933 1970 l
-S
-1932 1946 m
-1930 1922 l
-S
-1929 1898 m
-1927 1874 l
-S
-1926 1850 m
-1924 1826 l
-S
-1923 1802 m
-1921 1778 l
-S
-1606 6098 m
-1604 6074 l
-S
-1603 6050 m
-1602 6026 l
-S
-1600 6002 m
-1599 5978 l
-S
-1598 5954 m
-1597 5944 l
-1596 5930 l
-S
-1595 5906 m
-1593 5882 l
-S
-1592 5858 m
-1591 5834 l
-S
-1589 5810 m
-1588 5786 l
-S
-1586 5762 m
-1585 5738 l
-S
-1583 5714 m
-1582 5690 l
-S
-1581 5666 m
-1579 5642 l
-S
-1578 5618 m
-1576 5594 l
-S
-1575 5571 m
-1574 5547 l
-S
-1572 5523 m
-1571 5499 l
-S
-1569 5475 m
-1568 5451 l
-S
-1567 5427 m
-1566 5408 l
-1565 5403 l
-S
-1564 5379 m
-1562 5355 l
-S
-1561 5331 m
-1560 5307 l
-S
-1558 5283 m
-1557 5259 l
-S
-1555 5235 m
-1554 5211 l
-S
-1552 5187 m
-1551 5163 l
-S
-1550 5139 m
-1548 5115 l
-S
-1547 5091 m
-1545 5067 l
-S
-1544 5043 m
-1542 5019 l
-S
-1541 4995 m
-1540 4971 l
-S
-1538 4947 m
-1537 4923 l
-S
-1535 4899 m
-1534 4876 l
-S
-1532 4852 m
-1531 4828 l
-S
-1530 4804 m
-1528 4780 l
-S
-1527 4756 m
-1525 4732 l
-S
-1524 4708 m
-1522 4684 l
-S
-1521 4660 m
-1519 4636 l
-S
-1518 4612 m
-1517 4588 l
-S
-1515 4564 m
-1514 4540 l
-S
-1512 4516 m
-1511 4492 l
-S
-1509 4468 m
-1508 4444 l
-S
-1507 4420 m
-1505 4396 l
-S
-1504 4372 m
-1502 4348 l
-S
-1501 4324 m
-1499 4300 l
-S
-1498 4276 m
-1496 4252 l
-S
-1495 4228 m
-1493 4205 l
-S
-1492 4181 m
-1491 4157 l
-S
-1489 4133 m
-1488 4109 l
-S
-1486 4085 m
-1485 4061 l
-S
-1483 4037 m
-1482 4013 l
-S
-1480 3989 m
-1479 3965 l
-S
-1477 3941 m
-1476 3917 l
-S
-1475 3893 m
-1473 3869 l
-S
-1472 3845 m
-1470 3821 l
-S
-1469 3797 m
-1467 3773 l
-S
-1466 3749 m
-1464 3725 l
-S
-1463 3701 m
-1461 3677 l
-S
-1460 3653 m
-1458 3629 l
-S
-1457 3605 m
-1455 3581 l
-S
-1454 3558 m
-1452 3534 l
-S
-1451 3510 m
-1449 3486 l
-S
-1448 3462 m
-1447 3438 l
-S
-1445 3414 m
-1444 3390 l
-S
-1442 3366 m
-1441 3342 l
-S
-1439 3318 m
-1438 3294 l
-S
-1436 3270 m
-1436 3266 l
-1435 3246 l
-S
-1433 3222 m
-1432 3198 l
-S
-1430 3174 m
-1429 3150 l
-S
-1427 3126 m
-1426 3102 l
-S
-1424 3078 m
-1423 3054 l
-S
-1421 3030 m
-1420 3006 l
-S
-1418 2982 m
-1417 2958 l
-S
-1415 2935 m
-1414 2911 l
-S
-1412 2887 m
-1411 2863 l
-S
-1409 2839 m
-1408 2815 l
-S
-1406 2791 m
-1405 2767 l
-S
-1403 2743 m
-1403 2730 l
-1402 2719 l
-S
-1400 2695 m
-1399 2671 l
-S
-1397 2647 m
-1396 2623 l
-S
-1394 2599 m
-1393 2575 l
-S
-1391 2551 m
-1390 2527 l
-S
-1388 2503 m
-1387 2479 l
-S
-1385 2455 m
-1384 2431 l
-S
-1382 2407 m
-1381 2383 l
-S
-1379 2359 m
-1378 2336 l
-S
-1376 2312 m
-1375 2288 l
-S
-1373 2264 m
-1372 2240 l
-S
-1370 2216 m
-1369 2194 l
-1369 2192 l
-S
-1367 2168 m
-1366 2144 l
-S
-1364 2120 m
-1363 2096 l
-S
-1361 2072 m
-1360 2048 l
-S
-1358 2024 m
-1356 2000 l
-S
-1355 1976 m
-1353 1952 l
-S
-1352 1928 m
-1350 1904 l
-S
-1349 1880 m
-1347 1856 l
-S
-1346 1832 m
-1344 1808 l
-S
-1343 1784 m
-1342 1777 l
-S
-1028 6121 m
-1027 6104 l
-S
-1026 6080 m
-1025 6056 l
-S
-1023 6032 m
-1022 6008 l
-S
-1020 5984 m
-1019 5960 l
-S
-1018 5937 m
-1016 5913 l
-S
-1015 5889 m
-1013 5865 l
-S
-1012 5841 m
-1011 5817 l
-S
-1009 5793 m
-1008 5769 l
-S
-1006 5745 m
-1005 5721 l
-S
-1004 5697 m
-1002 5673 l
-S
-1001 5649 m
-999 5625 l
-S
-998 5601 m
-997 5577 l
-S
-995 5553 m
-994 5529 l
-S
-992 5505 m
-991 5481 l
-S
-990 5457 m
-988 5433 l
-S
-987 5409 m
-985 5385 l
-S
-984 5361 m
-982 5337 l
-S
-981 5313 m
-980 5289 l
-S
-978 5265 m
-977 5242 l
-S
-975 5218 m
-974 5194 l
-S
-972 5170 m
-971 5146 l
-S
-970 5122 m
-968 5098 l
-S
-967 5074 m
-965 5050 l
-S
-964 5026 m
-962 5002 l
-S
-961 4978 m
-960 4954 l
-S
-958 4930 m
-957 4906 l
-S
-955 4882 m
-954 4858 l
-S
-952 4834 m
-951 4810 l
-S
-950 4786 m
-948 4762 l
-S
-947 4738 m
-945 4714 l
-S
-944 4690 m
-942 4666 l
-S
-941 4642 m
-940 4618 l
-S
-938 4594 m
-937 4571 l
-S
-935 4547 m
-934 4523 l
-S
-932 4499 m
-931 4475 l
-S
-929 4451 m
-928 4427 l
-S
-927 4403 m
-925 4379 l
-S
-924 4355 m
-923 4348 l
-922 4331 l
-S
-921 4307 m
-919 4283 l
-S
-918 4259 m
-916 4235 l
-S
-915 4211 m
-913 4187 l
-S
-912 4163 m
-911 4139 l
-S
-909 4115 m
-908 4091 l
-S
-906 4067 m
-905 4043 l
-S
-903 4019 m
-902 3995 l
-S
-900 3971 m
-899 3947 l
-S
-897 3923 m
-896 3900 l
-S
-895 3876 m
-893 3852 l
-S
-892 3828 m
-891 3813 l
-890 3804 l
-S
-889 3780 m
-887 3756 l
-S
-886 3732 m
-884 3708 l
-S
-883 3684 m
-881 3660 l
-S
-880 3636 m
-878 3612 l
-S
-877 3588 m
-875 3564 l
-S
-874 3540 m
-872 3516 l
-S
-871 3492 m
-869 3468 l
-S
-868 3444 m
-867 3420 l
-S
-865 3396 m
-864 3372 l
-S
-862 3348 m
-861 3324 l
-S
-859 3300 m
-858 3278 l
-858 3277 l
-S
-856 3253 m
-855 3229 l
-S
-853 3205 m
-852 3181 l
-S
-850 3157 m
-849 3133 l
-S
-847 3109 m
-846 3085 l
-S
-844 3061 m
-843 3037 l
-S
-841 3013 m
-840 2989 l
-S
-838 2965 m
-837 2941 l
-S
-835 2917 m
-834 2893 l
-S
-832 2869 m
-831 2845 l
-S
-829 2821 m
-828 2797 l
-S
-826 2773 m
-825 2749 l
-S
-823 2725 m
-822 2701 l
-S
-820 2677 m
-819 2654 l
-S
-817 2630 m
-816 2606 l
-S
-814 2582 m
-813 2558 l
-S
-811 2534 m
-810 2510 l
-S
-808 2486 m
-807 2462 l
-S
-805 2438 m
-804 2414 l
-S
-802 2390 m
-801 2366 l
-S
-799 2342 m
-798 2318 l
-S
-796 2294 m
-795 2270 l
-S
-793 2246 m
-792 2222 l
-S
-790 2198 m
-789 2174 l
-S
-787 2150 m
-786 2126 l
-S
-784 2102 m
-782 2078 l
-S
-781 2055 m
-779 2031 l
-S
-778 2007 m
-776 1983 l
-S
-775 1959 m
-773 1935 l
-S
-772 1911 m
-770 1887 l
-S
-769 1863 m
-767 1839 l
-S
-766 1815 m
-764 1791 l
-S
-4877 6113 m
-4847 6113 l
-S
-4877 5988 m
-4847 5988 l
-S
-4877 5862 m
-4847 5863 l
-S
-4877 5737 m
-4847 5738 l
-S
-4877 5486 m
-4847 5487 l
-S
-4877 5361 m
-4847 5362 l
-S
-4877 5236 m
-4847 5236 l
-S
-4877 5110 m
-4847 5111 l
-S
-4877 4860 m
-4847 4860 l
-S
-4877 4734 m
-4847 4735 l
-S
-4877 4609 m
-4847 4610 l
-S
-4877 4484 m
-4847 4484 l
-S
-4877 4233 m
-4847 4234 l
-S
-4877 4108 m
-4847 4109 l
-S
-4877 3983 m
-4847 3983 l
-S
-4877 3857 m
-4847 3858 l
-S
-4877 3607 m
-4847 3607 l
-S
-4877 3481 m
-4847 3482 l
-S
-4877 3356 m
-4847 3357 l
-S
-4877 3231 m
-4847 3231 l
-S
-4877 2980 m
-4847 2981 l
-S
-4877 2855 m
-4847 2855 l
-S
-4877 2729 m
-4847 2730 l
-S
-4877 2604 m
-4847 2605 l
-S
-4877 2353 m
-4847 2354 l
-S
-4877 2228 m
-4847 2229 l
-S
-4877 2103 m
-4847 2103 l
-S
-4877 1977 m
-4847 1978 l
-S
-4671 1777 m
-4673 1808 l
-S
-4527 1777 m
-4529 1808 l
-S
-4382 1777 m
-4384 1808 l
-S
-4092 1777 m
-4094 1808 l
-S
-3948 1777 m
-3950 1808 l
-S
-3803 1777 m
-3805 1808 l
-S
-3513 1777 m
-3515 1808 l
-S
-3369 1777 m
-3371 1808 l
-S
-3224 1777 m
-3226 1808 l
-S
-2934 1777 m
-2936 1808 l
-S
-2790 1777 m
-2792 1808 l
-S
-2645 1777 m
-2647 1808 l
-S
-2355 1777 m
-2357 1808 l
-S
-2211 1777 m
-2213 1808 l
-S
-2066 1777 m
-2068 1808 l
-S
-1777 1777 m
-1778 1808 l
-S
-1632 1777 m
-1634 1808 l
-S
-1487 1777 m
-1489 1808 l
-S
-1198 1777 m
-1199 1808 l
-S
-1053 1777 m
-1055 1808 l
-S
-908 1777 m
-910 1808 l
-S
-619 1777 m
-621 1808 l
-S
-533 6071 m
-564 6071 l
-S
-533 5946 m
-564 5946 l
-S
-533 5821 m
-564 5821 l
-S
-533 5571 m
-564 5571 l
-S
-533 5446 m
-564 5446 l
-S
-533 5321 m
-564 5321 l
-S
-533 5196 m
-564 5195 l
-S
-533 4946 m
-564 4945 l
-S
-533 4821 m
-564 4820 l
-S
-533 4696 m
-564 4695 l
-S
-533 4571 m
-564 4570 l
-S
-533 4321 m
-564 4320 l
-S
-533 4195 m
-564 4195 l
-S
-533 4070 m
-564 4070 l
-S
-533 3945 m
-564 3945 l
-S
-533 3695 m
-564 3695 l
-S
-533 3570 m
-564 3569 l
-S
-533 3445 m
-564 3444 l
-S
-533 3320 m
-564 3319 l
-S
-533 3070 m
-564 3069 l
-S
-533 2945 m
-564 2944 l
-S
-533 2820 m
-564 2819 l
-S
-533 2695 m
-564 2694 l
-S
-533 2444 m
-564 2444 l
-S
-533 2319 m
-564 2319 l
-S
-533 2194 m
-564 2194 l
-S
-533 2069 m
-564 2068 l
-S
-533 1819 m
-564 1818 l
-S
-4791 6121 m
-4789 6091 l
-S
-4646 6121 m
-4645 6091 l
-S
-4357 6121 m
-4355 6091 l
-S
-4212 6121 m
-4210 6091 l
-S
-4068 6121 m
-4066 6091 l
-S
-3778 6121 m
-3776 6091 l
-S
-3633 6121 m
-3632 6091 l
-S
-3489 6121 m
-3487 6091 l
-S
-3199 6121 m
-3197 6091 l
-S
-3054 6121 m
-3053 6091 l
-S
-2910 6121 m
-2908 6091 l
-S
-2620 6121 m
-2619 6091 l
-S
-2476 6121 m
-2474 6091 l
-S
-2331 6121 m
-2329 6091 l
-S
-2041 6121 m
-2040 6091 l
-S
-1897 6121 m
-1895 6091 l
-S
-1752 6121 m
-1750 6091 l
-S
-1463 6121 m
-1461 6091 l
-S
-1318 6121 m
-1316 6091 l
-S
-1173 6121 m
-1171 6091 l
-S
-884 6121 m
-882 6091 l
-S
-739 6121 m
-737 6091 l
-S
-594 6121 m
-592 6091 l
-S
-4877 1777 m
-4877 2088 l
-4877 2398 l
-4877 2708 l
-4877 3018 l
-4877 3329 l
-4877 3639 l
-4877 3949 l
-4877 4260 l
-4877 4570 l
-4877 4880 l
-4877 5190 l
-4877 5501 l
-4877 5811 l
-4877 6121 l
-S
-4877 6121 m
-4567 6121 l
-4256 6121 l
-3946 6121 l
-3636 6121 l
-3326 6121 l
-3015 6121 l
-2705 6121 l
-2395 6121 l
-2085 6121 l
-1774 6121 l
-1464 6121 l
-1154 6121 l
-843 6121 l
-533 6121 l
-S
-533 6121 m
-533 5811 l
-533 5501 l
-533 5190 l
-533 4880 l
-533 4570 l
-533 4260 l
-533 3949 l
-533 3639 l
-533 3329 l
-533 3018 l
-533 2708 l
-533 2398 l
-533 2088 l
-533 1777 l
-S
-533 1777 m
-843 1777 l
-1154 1777 l
-1464 1777 l
-1774 1777 l
-2085 1777 l
-2395 1777 l
-2705 1777 l
-3015 1777 l
-3326 1777 l
-3636 1777 l
-3946 1777 l
-4256 1777 l
-4567 1777 l
-4877 1777 l
-S
-1 g
-Y
-5029.5 2159.2 m
-4920 2159 l
-4920 2798 l
-5029 2798 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4935 2185 m
-4935 2227 l
-4966 2204 l
-4966 2216 l
-4969 2223 l
-4973 2227 l
-4984 2231 l
-4992 2231 l
-5003 2227 l
-5011 2219 l
-5014 2208 l
-5014 2197 l
-5011 2185 l
-5007 2182 l
-4999 2178 l
-S
-4935 2257 m
-5014 2257 l
-S
-4977 2257 m
-4966 2268 l
-4962 2276 l
-4962 2287 l
-4966 2294 l
-4977 2298 l
-5014 2298 l
-S
-4954 2328 m
-4951 2328 l
-4943 2332 l
-4939 2336 l
-4935 2343 l
-4935 2358 l
-4939 2366 l
-4943 2370 l
-4951 2373 l
-4958 2373 l
-4966 2370 l
-4977 2362 l
-5014 2325 l
-5014 2377 l
-S
-4935 2422 m
-4939 2411 l
-4951 2403 l
-4969 2400 l
-4981 2400 l
-4999 2403 l
-5011 2411 l
-5014 2422 l
-5014 2430 l
-5011 2441 l
-4999 2449 l
-4981 2452 l
-4969 2452 l
-4951 2449 l
-4939 2441 l
-4935 2430 l
-4935 2422 l
-S
-4962 2479 m
-5014 2479 l
-S
-4977 2479 m
-4966 2490 l
-4962 2497 l
-4962 2509 l
-4966 2516 l
-4977 2520 l
-5014 2520 l
-S
-4977 2520 m
-4966 2531 l
-4962 2539 l
-4962 2550 l
-4966 2558 l
-4977 2561 l
-5014 2561 l
-S
-4935 2610 m
-4939 2599 l
-4951 2591 l
-4969 2588 l
-4981 2588 l
-4999 2591 l
-5011 2599 l
-5014 2610 l
-5014 2618 l
-5011 2629 l
-4999 2637 l
-4981 2640 l
-4969 2640 l
-4951 2637 l
-4939 2629 l
-4935 2618 l
-4935 2610 l
-S
-4935 2685 m
-4939 2674 l
-4951 2667 l
-4969 2663 l
-4981 2663 l
-4999 2667 l
-5011 2674 l
-5014 2685 l
-5014 2693 l
-5011 2704 l
-4999 2712 l
-4981 2716 l
-4969 2716 l
-4951 2712 l
-4939 2704 l
-4935 2693 l
-4935 2685 l
-S
-4973 2779 m
-4966 2776 l
-4962 2764 l
-4962 2753 l
-4966 2742 l
-4973 2738 l
-4981 2742 l
-4984 2749 l
-4988 2768 l
-4992 2776 l
-4999 2779 l
-5003 2779 l
-5011 2776 l
-5014 2764 l
-5014 2753 l
-5011 2742 l
-5003 2738 l
-S
-1 g
-Y
-5029.5 3617.3 m
-4920 3617 l
-4920 3847 l
-5029 3847 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4935 3674 m
-4988 3636 l
-4988 3692 l
-S
-4935 3674 m
-5014 3674 l
-S
-4935 3734 m
-4939 3723 l
-4951 3715 l
-4969 3711 l
-4981 3711 l
-4999 3715 l
-5011 3723 l
-5014 3734 l
-5014 3741 l
-5011 3753 l
-4999 3760 l
-4981 3764 l
-4969 3764 l
-4951 3760 l
-4939 3753 l
-4935 3741 l
-4935 3734 l
-S
-4973 3828 m
-4966 3824 l
-4962 3813 l
-4962 3801 l
-4966 3790 l
-4973 3786 l
-4981 3790 l
-4984 3798 l
-4988 3817 l
-4992 3824 l
-4999 3828 l
-5003 3828 l
-5011 3824 l
-5014 3813 l
-5014 3801 l
-5011 3790 l
-5003 3786 l
-S
-1 g
-Y
-5029.5 4870.5 m
-4920 4870 l
-4920 5100 l
-5029 5100 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4954 4893 m
-4951 4893 l
-4943 4897 l
-4939 4901 l
-4935 4908 l
-4935 4923 l
-4939 4931 l
-4943 4934 l
-4951 4938 l
-4958 4938 l
-4966 4934 l
-4977 4927 l
-5014 4889 l
-5014 4942 l
-S
-4935 4987 m
-4939 4976 l
-4951 4968 l
-4969 4964 l
-4981 4964 l
-4999 4968 l
-5011 4976 l
-5014 4987 l
-5014 4995 l
-5011 5006 l
-4999 5013 l
-4981 5017 l
-4969 5017 l
-4951 5013 l
-4939 5006 l
-4935 4995 l
-4935 4987 l
-S
-4973 5081 m
-4966 5077 l
-4962 5066 l
-4962 5055 l
-4966 5043 l
-4973 5040 l
-4981 5043 l
-4984 5051 l
-4988 5070 l
-4992 5077 l
-4999 5081 l
-5003 5081 l
-5011 5077 l
-5014 5066 l
-5014 5055 l
-5011 5043 l
-5003 5040 l
-S
-1 g
-Y
-2562.2 1200.1 m
-2453 1200 l
-2453 1741 l
-2562 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2468 1256 m
-2521 1219 l
-2521 1275 l
-S
-2468 1256 m
-2547 1256 l
-S
-2483 1305 m
-2480 1313 l
-2468 1324 l
-2547 1324 l
-S
-2495 1377 m
-2498 1373 l
-2502 1377 l
-2498 1381 l
-2495 1377 l
-S
-2540 1377 m
-2543 1373 l
-2547 1377 l
-2543 1381 l
-2540 1377 l
-S
-2468 1414 m
-2468 1456 l
-2498 1433 l
-2498 1444 l
-2502 1452 l
-2506 1456 l
-2517 1459 l
-2525 1459 l
-2536 1456 l
-2543 1448 l
-2547 1437 l
-2547 1426 l
-2543 1414 l
-2540 1411 l
-2532 1407 l
-S
-2468 1505 m
-2472 1493 l
-2483 1486 l
-2502 1482 l
-2513 1482 l
-2532 1486 l
-2543 1493 l
-2547 1505 l
-2547 1512 l
-2543 1523 l
-2532 1531 l
-2513 1535 l
-2502 1535 l
-2483 1531 l
-2472 1523 l
-2468 1512 l
-2468 1505 l
-S
-2495 1565 m
-2498 1561 l
-2502 1565 l
-2498 1568 l
-2495 1565 l
-S
-2540 1565 m
-2543 1561 l
-2547 1565 l
-2543 1568 l
-2540 1565 l
-S
-2468 1617 m
-2472 1606 l
-2483 1599 l
-2502 1595 l
-2513 1595 l
-2532 1599 l
-2543 1606 l
-2547 1617 l
-2547 1625 l
-2543 1636 l
-2532 1644 l
-2513 1647 l
-2502 1647 l
-2483 1644 l
-2472 1636 l
-2468 1625 l
-2468 1617 l
-S
-2468 1693 m
-2472 1681 l
-2483 1674 l
-2502 1670 l
-2513 1670 l
-2532 1674 l
-2543 1681 l
-2547 1693 l
-2547 1700 l
-2543 1711 l
-2532 1719 l
-2513 1723 l
-2502 1723 l
-2483 1719 l
-2472 1711 l
-2468 1700 l
-2468 1693 l
-S
-1 g
-Y
-3141.2 1388.1 m
-3032 1388 l
-3032 1741 l
-3141 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3066 1411 m
-3062 1411 l
-3055 1414 l
-3051 1418 l
-3047 1426 l
-3047 1441 l
-3051 1448 l
-3055 1452 l
-3062 1456 l
-3070 1456 l
-3077 1452 l
-3089 1444 l
-3126 1407 l
-3126 1459 l
-S
-3074 1531 m
-3085 1527 l
-3092 1520 l
-3096 1508 l
-3096 1505 l
-3092 1493 l
-3085 1486 l
-3074 1482 l
-3070 1482 l
-3059 1486 l
-3051 1493 l
-3047 1505 l
-3047 1508 l
-3051 1520 l
-3059 1527 l
-3074 1531 l
-3092 1531 l
-3111 1527 l
-3122 1520 l
-3126 1508 l
-3126 1501 l
-3122 1490 l
-3115 1486 l
-S
-3074 1565 m
-3077 1561 l
-3081 1565 l
-3077 1568 l
-3074 1565 l
-S
-3119 1565 m
-3122 1561 l
-3126 1565 l
-3122 1568 l
-3119 1565 l
-S
-3047 1617 m
-3051 1606 l
-3062 1599 l
-3081 1595 l
-3092 1595 l
-3111 1599 l
-3122 1606 l
-3126 1617 l
-3126 1625 l
-3122 1636 l
-3111 1644 l
-3092 1647 l
-3081 1647 l
-3062 1644 l
-3051 1636 l
-3047 1625 l
-3047 1617 l
-S
-3047 1693 m
-3051 1681 l
-3062 1674 l
-3081 1670 l
-3092 1670 l
-3111 1674 l
-3122 1681 l
-3126 1693 l
-3126 1700 l
-3122 1711 l
-3111 1719 l
-3092 1723 l
-3081 1723 l
-3062 1719 l
-3051 1711 l
-3047 1700 l
-3047 1693 l
-S
-1 g
-Y
-3720.2 1388.1 m
-3611 1388 l
-3611 1741 l
-3720 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3645 1411 m
-3641 1411 l
-3634 1414 l
-3630 1418 l
-3626 1426 l
-3626 1441 l
-3630 1448 l
-3634 1452 l
-3641 1456 l
-3649 1456 l
-3656 1452 l
-3668 1444 l
-3705 1407 l
-3705 1459 l
-S
-3626 1501 m
-3630 1490 l
-3637 1486 l
-3645 1486 l
-3653 1490 l
-3656 1497 l
-3660 1512 l
-3664 1523 l
-3671 1531 l
-3679 1535 l
-3690 1535 l
-3698 1531 l
-3701 1527 l
-3705 1516 l
-3705 1501 l
-3701 1490 l
-3698 1486 l
-3690 1482 l
-3679 1482 l
-3671 1486 l
-3664 1493 l
-3660 1505 l
-3656 1520 l
-3653 1527 l
-3645 1531 l
-3637 1531 l
-3630 1527 l
-3626 1516 l
-3626 1501 l
-S
-3653 1565 m
-3656 1561 l
-3660 1565 l
-3656 1568 l
-3653 1565 l
-S
-3698 1565 m
-3701 1561 l
-3705 1565 l
-3701 1568 l
-3698 1565 l
-S
-3626 1617 m
-3630 1606 l
-3641 1599 l
-3660 1595 l
-3671 1595 l
-3690 1599 l
-3701 1606 l
-3705 1617 l
-3705 1625 l
-3701 1636 l
-3690 1644 l
-3671 1647 l
-3660 1647 l
-3641 1644 l
-3630 1636 l
-3626 1625 l
-3626 1617 l
-S
-3626 1693 m
-3630 1681 l
-3641 1674 l
-3660 1670 l
-3671 1670 l
-3690 1674 l
-3701 1681 l
-3705 1693 l
-3705 1700 l
-3701 1711 l
-3690 1719 l
-3671 1723 l
-3660 1723 l
-3641 1719 l
-3630 1711 l
-3626 1700 l
-3626 1693 l
-S
-1 g
-Y
-4299.2 1388.1 m
-4190 1388 l
-4190 1741 l
-4299 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4224 1411 m
-4220 1411 l
-4213 1414 l
-4209 1418 l
-4205 1426 l
-4205 1441 l
-4209 1448 l
-4213 1452 l
-4220 1456 l
-4228 1456 l
-4235 1452 l
-4247 1444 l
-4284 1407 l
-4284 1459 l
-S
-4205 1535 m
-4284 1497 l
-S
-4205 1482 m
-4205 1535 l
-S
-4231 1565 m
-4235 1561 l
-4239 1565 l
-4235 1568 l
-4231 1565 l
-S
-4277 1565 m
-4280 1561 l
-4284 1565 l
-4280 1568 l
-4277 1565 l
-S
-4205 1617 m
-4209 1606 l
-4220 1599 l
-4239 1595 l
-4250 1595 l
-4269 1599 l
-4280 1606 l
-4284 1617 l
-4284 1625 l
-4280 1636 l
-4269 1644 l
-4250 1647 l
-4239 1647 l
-4220 1644 l
-4209 1636 l
-4205 1625 l
-4205 1617 l
-S
-4205 1693 m
-4209 1681 l
-4220 1674 l
-4239 1670 l
-4250 1670 l
-4269 1674 l
-4280 1681 l
-4284 1693 l
-4284 1700 l
-4280 1711 l
-4269 1719 l
-4250 1723 l
-4239 1723 l
-4220 1719 l
-4209 1711 l
-4205 1700 l
-4205 1693 l
-S
-1 g
-Y
-4878.1 1388.1 m
-4769 1388 l
-4769 1741 l
-4878 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4803 1411 m
-4799 1411 l
-4792 1414 l
-4788 1418 l
-4784 1426 l
-4784 1441 l
-4788 1448 l
-4792 1452 l
-4799 1456 l
-4807 1456 l
-4814 1452 l
-4826 1444 l
-4863 1407 l
-4863 1459 l
-S
-4795 1531 m
-4788 1527 l
-4784 1516 l
-4784 1508 l
-4788 1497 l
-4799 1490 l
-4818 1486 l
-4837 1486 l
-4852 1490 l
-4859 1497 l
-4863 1508 l
-4863 1512 l
-4859 1523 l
-4852 1531 l
-4841 1535 l
-4837 1535 l
-4826 1531 l
-4818 1523 l
-4814 1512 l
-4814 1508 l
-4818 1497 l
-4826 1490 l
-4837 1486 l
-S
-4810 1565 m
-4814 1561 l
-4818 1565 l
-4814 1568 l
-4810 1565 l
-S
-4856 1565 m
-4859 1561 l
-4863 1565 l
-4859 1568 l
-4856 1565 l
-S
-4784 1617 m
-4788 1606 l
-4799 1599 l
-4818 1595 l
-4829 1595 l
-4848 1599 l
-4859 1606 l
-4863 1617 l
-4863 1625 l
-4859 1636 l
-4848 1644 l
-4829 1647 l
-4818 1647 l
-4799 1644 l
-4788 1636 l
-4784 1625 l
-4784 1617 l
-S
-4784 1693 m
-4788 1681 l
-4799 1674 l
-4818 1670 l
-4829 1670 l
-4848 1674 l
-4859 1681 l
-4863 1693 l
-4863 1700 l
-4859 1711 l
-4848 1719 l
-4829 1723 l
-4818 1723 l
-4799 1719 l
-4788 1711 l
-4784 1700 l
-4784 1693 l
-S
-1 g
-Y
-1983.3 1388.1 m
-1874 1388 l
-1874 1741 l
-1983 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1889 1414 m
-1889 1456 l
-1919 1433 l
-1919 1444 l
-1923 1452 l
-1927 1456 l
-1938 1459 l
-1946 1459 l
-1957 1456 l
-1964 1448 l
-1968 1437 l
-1968 1426 l
-1964 1414 l
-1961 1411 l
-1953 1407 l
-S
-1904 1493 m
-1901 1501 l
-1889 1512 l
-1968 1512 l
-S
-1916 1565 m
-1919 1561 l
-1923 1565 l
-1919 1568 l
-1916 1565 l
-S
-1961 1565 m
-1964 1561 l
-1968 1565 l
-1964 1568 l
-1961 1565 l
-S
-1889 1617 m
-1893 1606 l
-1904 1599 l
-1923 1595 l
-1934 1595 l
-1953 1599 l
-1964 1606 l
-1968 1617 l
-1968 1625 l
-1964 1636 l
-1953 1644 l
-1934 1647 l
-1923 1647 l
-1904 1644 l
-1893 1636 l
-1889 1625 l
-1889 1617 l
-S
-1889 1693 m
-1893 1681 l
-1904 1674 l
-1923 1670 l
-1934 1670 l
-1953 1674 l
-1964 1681 l
-1968 1693 l
-1968 1700 l
-1964 1711 l
-1953 1719 l
-1934 1723 l
-1923 1723 l
-1904 1719 l
-1893 1711 l
-1889 1700 l
-1889 1693 l
-S
-1 g
-Y
-1404.3 1388.1 m
-1295 1388 l
-1295 1741 l
-1404 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1310 1414 m
-1310 1456 l
-1340 1433 l
-1340 1444 l
-1344 1452 l
-1348 1456 l
-1359 1459 l
-1367 1459 l
-1378 1456 l
-1385 1448 l
-1389 1437 l
-1389 1426 l
-1385 1414 l
-1382 1411 l
-1374 1407 l
-S
-1329 1486 m
-1325 1486 l
-1318 1490 l
-1314 1493 l
-1310 1501 l
-1310 1516 l
-1314 1523 l
-1318 1527 l
-1325 1531 l
-1333 1531 l
-1340 1527 l
-1352 1520 l
-1389 1482 l
-1389 1535 l
-S
-1337 1565 m
-1340 1561 l
-1344 1565 l
-1340 1568 l
-1337 1565 l
-S
-1382 1565 m
-1385 1561 l
-1389 1565 l
-1385 1568 l
-1382 1565 l
-S
-1310 1617 m
-1314 1606 l
-1325 1599 l
-1344 1595 l
-1355 1595 l
-1374 1599 l
-1385 1606 l
-1389 1617 l
-1389 1625 l
-1385 1636 l
-1374 1644 l
-1355 1647 l
-1344 1647 l
-1325 1644 l
-1314 1636 l
-1310 1625 l
-1310 1617 l
-S
-1310 1693 m
-1314 1681 l
-1325 1674 l
-1344 1670 l
-1355 1670 l
-1374 1674 l
-1385 1681 l
-1389 1693 l
-1389 1700 l
-1385 1711 l
-1374 1719 l
-1355 1723 l
-1344 1723 l
-1325 1719 l
-1314 1711 l
-1310 1700 l
-1310 1693 l
-S
-1 g
-Y
-825.3 1388.1 m
-716 1388 l
-716 1741 l
-825 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-731 1414 m
-731 1456 l
-761 1433 l
-761 1444 l
-765 1452 l
-769 1456 l
-780 1459 l
-788 1459 l
-799 1456 l
-807 1448 l
-810 1437 l
-810 1426 l
-807 1414 l
-803 1411 l
-795 1407 l
-S
-731 1490 m
-731 1531 l
-761 1508 l
-761 1520 l
-765 1527 l
-769 1531 l
-780 1535 l
-788 1535 l
-799 1531 l
-807 1523 l
-810 1512 l
-810 1501 l
-807 1490 l
-803 1486 l
-795 1482 l
-S
-758 1565 m
-761 1561 l
-765 1565 l
-761 1568 l
-758 1565 l
-S
-803 1565 m
-807 1561 l
-810 1565 l
-807 1568 l
-803 1565 l
-S
-731 1617 m
-735 1606 l
-746 1599 l
-765 1595 l
-776 1595 l
-795 1599 l
-807 1606 l
-810 1617 l
-810 1625 l
-807 1636 l
-795 1644 l
-776 1647 l
-765 1647 l
-746 1644 l
-735 1636 l
-731 1625 l
-731 1617 l
-S
-731 1693 m
-735 1681 l
-746 1674 l
-765 1670 l
-776 1670 l
-795 1674 l
-807 1681 l
-810 1693 l
-810 1700 l
-807 1711 l
-795 1719 l
-776 1723 l
-765 1723 l
-746 1719 l
-735 1711 l
-731 1700 l
-731 1693 l
-S
-1 g
-Y
-5319.8 3163 m
-5088 3163 l
-5088 4736 l
-5320 4736 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-5119 3194 m
-5251 3194 l
-S
-5119 3194 m
-5119 3251 l
-5126 3269 l
-5132 3276 l
-5144 3282 l
-5157 3282 l
-5169 3276 l
-5176 3269 l
-5182 3251 l
-5182 3194 l
-S
-5182 3238 m
-5251 3282 l
-S
-5119 3320 m
-5126 3326 l
-5119 3332 l
-5113 3326 l
-5119 3320 l
-S
-5163 3326 m
-5251 3326 l
-S
-5163 3445 m
-5263 3445 l
-5282 3439 l
-5288 3432 l
-5295 3420 l
-5295 3401 l
-5288 3389 l
-S
-5182 3445 m
-5169 3432 l
-5163 3420 l
-5163 3401 l
-5169 3389 l
-5182 3376 l
-5201 3370 l
-5213 3370 l
-5232 3376 l
-5245 3389 l
-5251 3401 l
-5251 3420 l
-5245 3432 l
-5232 3445 l
-S
-5119 3495 m
-5251 3495 l
-S
-5188 3495 m
-5169 3514 l
-5163 3526 l
-5163 3545 l
-5169 3558 l
-5188 3564 l
-5251 3564 l
-S
-5119 3620 m
-5226 3620 l
-5245 3627 l
-5251 3639 l
-5251 3652 l
-S
-5163 3602 m
-5163 3645 l
-S
-5163 3858 m
-5251 3858 l
-S
-5182 3858 m
-5169 3846 l
-5163 3833 l
-5163 3815 l
-5169 3802 l
-5182 3789 l
-5201 3783 l
-5213 3783 l
-5232 3789 l
-5245 3802 l
-5251 3815 l
-5251 3833 l
-5245 3846 l
-5232 3858 l
-S
-5182 3971 m
-5169 3965 l
-5163 3946 l
-5163 3927 l
-5169 3909 l
-5182 3902 l
-5194 3909 l
-5201 3921 l
-5207 3952 l
-5213 3965 l
-5226 3971 l
-5232 3971 l
-5245 3965 l
-5251 3946 l
-5251 3927 l
-5245 3909 l
-5232 3902 l
-S
-5182 4084 m
-5169 4071 l
-5163 4059 l
-5163 4040 l
-5169 4028 l
-5182 4015 l
-5201 4009 l
-5213 4009 l
-5232 4015 l
-5245 4028 l
-5251 4040 l
-5251 4059 l
-5245 4071 l
-5232 4084 l
-S
-5201 4122 m
-5201 4197 l
-5188 4197 l
-5176 4190 l
-5169 4184 l
-5163 4172 l
-5163 4153 l
-5169 4140 l
-5182 4128 l
-5201 4122 l
-5213 4122 l
-5232 4128 l
-5245 4140 l
-5251 4153 l
-5251 4172 l
-5245 4184 l
-5232 4197 l
-S
-5163 4241 m
-5251 4241 l
-S
-5188 4241 m
-5169 4259 l
-5163 4272 l
-5163 4291 l
-5169 4303 l
-5188 4309 l
-5251 4309 l
-S
-5182 4422 m
-5169 4416 l
-5163 4397 l
-5163 4378 l
-5169 4360 l
-5182 4353 l
-5194 4360 l
-5201 4372 l
-5207 4403 l
-5213 4416 l
-5226 4422 l
-5232 4422 l
-5245 4416 l
-5251 4397 l
-5251 4378 l
-5245 4360 l
-5232 4353 l
-S
-5119 4460 m
-5126 4466 l
-5119 4472 l
-5113 4466 l
-5119 4460 l
-S
-5163 4466 m
-5251 4466 l
-S
-5163 4541 m
-5169 4529 l
-5182 4516 l
-5201 4510 l
-5213 4510 l
-5232 4516 l
-5245 4529 l
-5251 4541 l
-5251 4560 l
-5245 4573 l
-5232 4585 l
-5213 4591 l
-5201 4591 l
-5182 4585 l
-5169 4573 l
-5163 4560 l
-5163 4541 l
-S
-5163 4635 m
-5251 4635 l
-S
-5188 4635 m
-5169 4654 l
-5163 4667 l
-5163 4685 l
-5169 4698 l
-5188 4704 l
-5251 4704 l
-S
-1 g
-Y
-3240.9 1170.4 m
-3241 982 l
-2170 982 l
-2170 1170 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3210 1014 m
-3210 1145 l
-S
-3210 1014 m
-3166 1014 l
-3147 1020 l
-3134 1033 l
-3128 1045 l
-3122 1064 l
-3122 1095 l
-3128 1114 l
-3134 1127 l
-3147 1139 l
-3166 1145 l
-3210 1145 l
-S
-3084 1095 m
-3009 1095 l
-3009 1083 l
-3015 1070 l
-3022 1064 l
-3034 1058 l
-3053 1058 l
-3066 1064 l
-3078 1076 l
-3084 1095 l
-3084 1108 l
-3078 1127 l
-3066 1139 l
-3053 1145 l
-3034 1145 l
-3022 1139 l
-3009 1127 l
-S
-2896 1076 m
-2909 1064 l
-2921 1058 l
-2940 1058 l
-2953 1064 l
-2965 1076 l
-2972 1095 l
-2972 1108 l
-2965 1127 l
-2953 1139 l
-2940 1145 l
-2921 1145 l
-2909 1139 l
-2896 1127 l
-S
-2853 1014 m
-2853 1145 l
-S
-2809 1014 m
-2802 1020 l
-2796 1014 l
-2802 1008 l
-2809 1014 l
-S
-2802 1058 m
-2802 1145 l
-S
-2752 1058 m
-2752 1145 l
-S
-2752 1083 m
-2733 1064 l
-2721 1058 l
-2702 1058 l
-2690 1064 l
-2683 1083 l
-2683 1145 l
-S
-2564 1058 m
-2564 1145 l
-S
-2564 1076 m
-2577 1064 l
-2589 1058 l
-2608 1058 l
-2621 1064 l
-2633 1076 l
-2639 1095 l
-2639 1108 l
-2633 1127 l
-2621 1139 l
-2608 1145 l
-2589 1145 l
-2577 1139 l
-2564 1127 l
-S
-2508 1014 m
-2508 1120 l
-2502 1139 l
-2489 1145 l
-2477 1145 l
-S
-2527 1058 m
-2483 1058 l
-S
-2445 1014 m
-2439 1020 l
-2433 1014 l
-2439 1008 l
-2445 1014 l
-S
-2439 1058 m
-2439 1145 l
-S
-2364 1058 m
-2376 1064 l
-2389 1076 l
-2395 1095 l
-2395 1108 l
-2389 1127 l
-2376 1139 l
-2364 1145 l
-2345 1145 l
-2333 1139 l
-2320 1127 l
-2314 1108 l
-2314 1095 l
-2320 1076 l
-2333 1064 l
-2345 1058 l
-2364 1058 l
-S
-2270 1058 m
-2270 1145 l
-S
-2270 1083 m
-2251 1064 l
-2239 1058 l
-2220 1058 l
-2207 1064 l
-2201 1083 l
-2201 1145 l
-S
-1 g
-Y
-371.2 1568.5 m
-186 1568 l
-186 6330 l
-371 6330 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-236 1669 m
-226 1664 l
-216 1654 l
-211 1644 l
-211 1624 l
-216 1614 l
-226 1604 l
-236 1599 l
-251 1594 l
-276 1594 l
-291 1599 l
-301 1604 l
-311 1614 l
-316 1624 l
-316 1644 l
-311 1654 l
-301 1664 l
-291 1669 l
-276 1669 l
-S
-276 1644 m
-276 1669 l
-S
-276 1699 m
-276 1759 l
-266 1759 l
-256 1754 l
-251 1749 l
-246 1739 l
-246 1724 l
-251 1714 l
-261 1704 l
-276 1699 l
-286 1699 l
-301 1704 l
-311 1714 l
-316 1724 l
-316 1739 l
-311 1749 l
-301 1759 l
-S
-246 1814 m
-251 1804 l
-261 1794 l
-276 1789 l
-286 1789 l
-301 1794 l
-311 1804 l
-316 1814 l
-316 1829 l
-311 1839 l
-301 1849 l
-286 1854 l
-276 1854 l
-261 1849 l
-251 1839 l
-246 1829 l
-246 1814 l
-S
-261 1944 m
-251 1934 l
-246 1924 l
-246 1909 l
-251 1899 l
-261 1889 l
-276 1884 l
-286 1884 l
-301 1889 l
-311 1899 l
-316 1909 l
-316 1924 l
-311 1934 l
-301 1944 l
-S
-276 1974 m
-276 2035 l
-266 2035 l
-256 2030 l
-251 2025 l
-246 2015 l
-246 2000 l
-251 1990 l
-261 1979 l
-276 1974 l
-286 1974 l
-301 1979 l
-311 1990 l
-316 2000 l
-316 2015 l
-311 2025 l
-301 2035 l
-S
-246 2070 m
-316 2070 l
-S
-266 2070 m
-251 2085 l
-246 2095 l
-246 2110 l
-251 2120 l
-266 2125 l
-316 2125 l
-S
-211 2170 m
-296 2170 l
-311 2175 l
-316 2185 l
-316 2195 l
-S
-246 2155 m
-246 2190 l
-S
-246 2225 m
-316 2225 l
-S
-276 2225 m
-261 2230 l
-251 2240 l
-246 2250 l
-246 2265 l
-S
-211 2285 m
-216 2290 l
-211 2295 l
-206 2290 l
-211 2285 l
-S
-246 2290 m
-316 2290 l
-S
-261 2385 m
-251 2375 l
-246 2365 l
-246 2350 l
-251 2340 l
-261 2330 l
-276 2325 l
-286 2325 l
-301 2330 l
-311 2340 l
-316 2350 l
-316 2365 l
-311 2375 l
-301 2385 l
-S
-246 2556 m
-316 2556 l
-S
-261 2556 m
-251 2546 l
-246 2536 l
-246 2521 l
-251 2511 l
-261 2501 l
-276 2496 l
-286 2496 l
-301 2501 l
-311 2511 l
-316 2521 l
-316 2536 l
-311 2546 l
-301 2556 l
-S
-246 2596 m
-351 2596 l
-S
-261 2596 m
-251 2606 l
-246 2616 l
-246 2631 l
-251 2641 l
-261 2651 l
-276 2656 l
-286 2656 l
-301 2651 l
-311 2641 l
-316 2631 l
-316 2616 l
-311 2606 l
-301 2596 l
-S
-246 2691 m
-351 2691 l
-S
-261 2691 m
-251 2701 l
-246 2711 l
-246 2726 l
-251 2736 l
-261 2746 l
-276 2751 l
-286 2751 l
-301 2746 l
-311 2736 l
-316 2726 l
-316 2711 l
-311 2701 l
-301 2691 l
-S
-246 2842 m
-316 2842 l
-S
-261 2842 m
-251 2832 l
-246 2822 l
-246 2806 l
-251 2796 l
-261 2786 l
-276 2781 l
-286 2781 l
-301 2786 l
-311 2796 l
-316 2806 l
-316 2822 l
-311 2832 l
-301 2842 l
-S
-246 2882 m
-316 2882 l
-S
-276 2882 m
-261 2887 l
-251 2897 l
-246 2907 l
-246 2922 l
-S
-276 2942 m
-276 3002 l
-266 3002 l
-256 2997 l
-251 2992 l
-246 2982 l
-246 2967 l
-251 2957 l
-261 2947 l
-276 2942 l
-286 2942 l
-301 2947 l
-311 2957 l
-316 2967 l
-316 2982 l
-311 2992 l
-301 3002 l
-S
-246 3037 m
-316 3037 l
-S
-266 3037 m
-251 3052 l
-246 3062 l
-246 3077 l
-251 3087 l
-266 3092 l
-316 3092 l
-S
-211 3137 m
-296 3137 l
-311 3142 l
-316 3152 l
-316 3162 l
-S
-246 3122 m
-246 3157 l
-S
-276 3268 m
-276 3328 l
-266 3328 l
-256 3323 l
-251 3318 l
-246 3308 l
-246 3293 l
-251 3283 l
-261 3273 l
-276 3268 l
-286 3268 l
-301 3273 l
-311 3283 l
-316 3293 l
-316 3308 l
-311 3318 l
-301 3328 l
-S
-246 3418 m
-351 3418 l
-S
-261 3418 m
-251 3408 l
-246 3398 l
-246 3383 l
-251 3373 l
-261 3363 l
-276 3358 l
-286 3358 l
-301 3363 l
-311 3373 l
-316 3383 l
-316 3398 l
-311 3408 l
-301 3418 l
-S
-246 3458 m
-296 3458 l
-311 3463 l
-316 3473 l
-316 3488 l
-311 3498 l
-296 3513 l
-S
-246 3513 m
-316 3513 l
-S
-246 3608 m
-316 3608 l
-S
-261 3608 m
-251 3598 l
-246 3588 l
-246 3573 l
-251 3563 l
-261 3553 l
-276 3548 l
-286 3548 l
-301 3553 l
-311 3563 l
-316 3573 l
-316 3588 l
-311 3598 l
-301 3608 l
-S
-211 3654 m
-296 3654 l
-311 3659 l
-316 3669 l
-316 3679 l
-S
-246 3638 m
-246 3674 l
-S
-246 3729 m
-251 3719 l
-261 3709 l
-276 3704 l
-286 3704 l
-301 3709 l
-311 3719 l
-316 3729 l
-316 3744 l
-311 3754 l
-301 3764 l
-286 3769 l
-276 3769 l
-261 3764 l
-251 3754 l
-246 3744 l
-246 3729 l
-S
-246 3804 m
-316 3804 l
-S
-276 3804 m
-261 3809 l
-251 3819 l
-246 3829 l
-246 3844 l
-S
-211 3864 m
-216 3869 l
-211 3874 l
-206 3869 l
-211 3864 l
-S
-246 3869 m
-316 3869 l
-S
-246 3964 m
-316 3964 l
-S
-261 3964 m
-251 3954 l
-246 3944 l
-246 3929 l
-251 3919 l
-261 3909 l
-276 3904 l
-286 3904 l
-301 3909 l
-311 3919 l
-316 3929 l
-316 3944 l
-311 3954 l
-301 3964 l
-S
-211 4004 m
-316 4004 l
-S
-261 4180 m
-251 4170 l
-246 4160 l
-246 4145 l
-251 4135 l
-261 4125 l
-276 4120 l
-286 4120 l
-301 4125 l
-311 4135 l
-316 4145 l
-316 4160 l
-311 4170 l
-301 4180 l
-S
-246 4235 m
-251 4225 l
-261 4215 l
-276 4210 l
-286 4210 l
-301 4215 l
-311 4225 l
-316 4235 l
-316 4250 l
-311 4260 l
-301 4270 l
-286 4275 l
-276 4275 l
-261 4270 l
-251 4260 l
-246 4250 l
-246 4235 l
-S
-246 4330 m
-251 4320 l
-261 4310 l
-276 4305 l
-286 4305 l
-301 4310 l
-311 4320 l
-316 4330 l
-316 4345 l
-311 4355 l
-301 4365 l
-286 4370 l
-276 4370 l
-261 4365 l
-251 4355 l
-246 4345 l
-246 4330 l
-S
-246 4405 m
-316 4405 l
-S
-276 4405 m
-261 4410 l
-251 4420 l
-246 4430 l
-246 4445 l
-S
-211 4526 m
-316 4526 l
-S
-261 4526 m
-251 4516 l
-246 4506 l
-246 4491 l
-251 4481 l
-261 4470 l
-276 4465 l
-286 4465 l
-301 4470 l
-311 4481 l
-316 4491 l
-316 4506 l
-311 4516 l
-301 4526 l
-S
-211 4561 m
-216 4566 l
-211 4571 l
-206 4566 l
-211 4561 l
-S
-246 4566 m
-316 4566 l
-S
-246 4606 m
-316 4606 l
-S
-266 4606 m
-251 4621 l
-246 4631 l
-246 4646 l
-251 4656 l
-266 4661 l
-316 4661 l
-S
-246 4756 m
-316 4756 l
-S
-261 4756 m
-251 4746 l
-246 4736 l
-246 4721 l
-251 4711 l
-261 4701 l
-276 4696 l
-286 4696 l
-301 4701 l
-311 4711 l
-316 4721 l
-316 4736 l
-311 4746 l
-301 4756 l
-S
-211 4801 m
-296 4801 l
-311 4806 l
-316 4816 l
-316 4826 l
-S
-246 4786 m
-246 4821 l
-S
-276 4851 m
-276 4912 l
-266 4912 l
-256 4907 l
-251 4902 l
-246 4892 l
-246 4876 l
-251 4866 l
-261 4856 l
-276 4851 l
-286 4851 l
-301 4856 l
-311 4866 l
-316 4876 l
-316 4892 l
-311 4902 l
-301 4912 l
-S
-261 4997 m
-251 4992 l
-246 4977 l
-246 4962 l
-251 4947 l
-261 4942 l
-271 4947 l
-276 4957 l
-281 4982 l
-286 4992 l
-296 4997 l
-301 4997 l
-311 4992 l
-316 4977 l
-316 4962 l
-311 4947 l
-301 4942 l
-S
-246 5037 m
-251 5032 l
-256 5037 l
-251 5042 l
-246 5037 l
-S
-311 5042 m
-316 5037 l
-311 5032 l
-306 5037 l
-311 5042 l
-321 5042 l
-331 5037 l
-336 5032 l
-S
-276 5157 m
-276 5217 l
-266 5217 l
-256 5212 l
-251 5207 l
-246 5197 l
-246 5182 l
-251 5172 l
-261 5162 l
-276 5157 l
-286 5157 l
-301 5162 l
-311 5172 l
-316 5182 l
-316 5197 l
-311 5207 l
-301 5217 l
-S
-246 5252 m
-351 5252 l
-S
-261 5252 m
-251 5262 l
-246 5272 l
-246 5287 l
-251 5297 l
-261 5308 l
-276 5313 l
-286 5313 l
-301 5308 l
-311 5297 l
-316 5287 l
-316 5272 l
-311 5262 l
-301 5252 l
-S
-246 5368 m
-251 5358 l
-261 5348 l
-276 5343 l
-286 5343 l
-301 5348 l
-311 5358 l
-316 5368 l
-316 5383 l
-311 5393 l
-301 5403 l
-286 5408 l
-276 5408 l
-261 5403 l
-251 5393 l
-246 5383 l
-246 5368 l
-S
-261 5498 m
-251 5488 l
-246 5478 l
-246 5463 l
-251 5453 l
-261 5443 l
-276 5438 l
-286 5438 l
-301 5443 l
-311 5453 l
-316 5463 l
-316 5478 l
-311 5488 l
-301 5498 l
-S
-211 5533 m
-316 5533 l
-S
-266 5533 m
-251 5548 l
-246 5558 l
-246 5573 l
-251 5583 l
-266 5588 l
-316 5588 l
-S
-211 5749 m
-291 5749 l
-306 5744 l
-311 5739 l
-316 5729 l
-316 5718 l
-311 5708 l
-306 5703 l
-291 5698 l
-281 5698 l
-S
-231 5799 m
-226 5809 l
-211 5824 l
-316 5824 l
-S
-246 5949 m
-261 5944 l
-271 5934 l
-276 5919 l
-276 5914 l
-271 5899 l
-261 5889 l
-246 5884 l
-241 5884 l
-226 5889 l
-216 5899 l
-211 5914 l
-211 5919 l
-216 5934 l
-226 5944 l
-246 5949 l
-271 5949 l
-296 5944 l
-311 5934 l
-316 5919 l
-316 5909 l
-311 5894 l
-301 5889 l
-S
-246 6049 m
-261 6044 l
-271 6034 l
-276 6019 l
-276 6014 l
-271 5999 l
-261 5989 l
-246 5984 l
-241 5984 l
-226 5989 l
-216 5999 l
-211 6014 l
-211 6019 l
-216 6034 l
-226 6044 l
-246 6049 l
-271 6049 l
-296 6044 l
-311 6034 l
-316 6019 l
-316 6009 l
-311 5994 l
-301 5989 l
-S
-211 6155 m
-316 6104 l
-S
-211 6084 m
-211 6155 l
-S
-306 6195 m
-311 6190 l
-316 6195 l
-311 6200 l
-306 6195 l
-S
-211 6295 m
-211 6245 l
-256 6240 l
-251 6245 l
-246 6260 l
-246 6275 l
-251 6290 l
-261 6300 l
-276 6305 l
-286 6305 l
-301 6300 l
-311 6290 l
-316 6275 l
-316 6260 l
-311 6245 l
-306 6240 l
-296 6235 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/frontb.eps b/ast-5.3-1/sun211_figures/frontb.eps
deleted file mode 100644
index 8572584..0000000
--- a/ast-5.3-1/sun211_figures/frontb.eps
+++ /dev/null
@@ -1,21511 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 30 189 477 603
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:07:04
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 1 0 rg
-533.21 1777.32 4343.81 4343.81 re
-Y
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3111 3017 l
-3112 3018 l
-3114 3019 l
-3116 3020 l
-3117 3021 l
-3119 3021 l
-3120 3022 l
-3142 3035 l
-3164 3048 l
-3186 3061 l
-3207 3075 l
-3229 3089 l
-3250 3103 l
-3270 3117 l
-3291 3132 l
-3311 3147 l
-3331 3163 l
-3351 3179 l
-3371 3195 l
-3390 3211 l
-3409 3228 l
-3428 3245 l
-3447 3262 l
-3465 3280 l
-3483 3297 l
-3501 3315 l
-3518 3334 l
-3536 3353 l
-3553 3371 l
-3569 3391 l
-3586 3410 l
-3602 3430 l
-3617 3450 l
-3633 3470 l
-3648 3490 l
-3663 3511 l
-3677 3532 l
-3691 3553 l
-3705 3574 l
-3719 3596 l
-3732 3618 l
-3745 3640 l
-3757 3662 l
-3769 3684 l
-3781 3707 l
-3792 3730 l
-3803 3753 l
-3814 3776 l
-3824 3800 l
-3834 3823 l
-3843 3847 l
-3852 3871 l
-3861 3895 l
-3869 3919 l
-3877 3944 l
-3884 3968 l
-3891 3993 l
-3898 4018 l
-3904 4043 l
-3910 4068 l
-3915 4094 l
-3920 4119 l
-3924 4144 l
-3928 4170 l
-3932 4196 l
-3935 4222 l
-3937 4248 l
-3939 4274 l
-3941 4300 l
-3942 4326 l
-3942 4352 l
-3943 4379 l
-3942 4405 l
-3941 4431 l
-3940 4458 l
-3938 4484 l
-3935 4511 l
-3932 4538 l
-3929 4564 l
-3925 4591 l
-3920 4617 l
-3915 4644 l
-3909 4671 l
-3903 4697 l
-3896 4724 l
-3888 4750 l
-3880 4776 l
-3872 4803 l
-3862 4829 l
-3852 4855 l
-3842 4881 l
-3831 4907 l
-3819 4933 l
-3807 4959 l
-3794 4984 l
-3780 5010 l
-3766 5035 l
-3751 5060 l
-3736 5085 l
-3720 5110 l
-3703 5134 l
-3685 5159 l
-3667 5183 l
-3648 5206 l
-3629 5230 l
-3609 5253 l
-3588 5276 l
-3566 5298 l
-3544 5320 l
-3521 5342 l
-3497 5363 l
-3473 5384 l
-3448 5405 l
-3422 5425 l
-3396 5444 l
-3369 5463 l
-3341 5482 l
-3312 5500 l
-3283 5517 l
-3254 5534 l
-3223 5551 l
-3192 5566 l
-3160 5581 l
-3128 5595 l
-3095 5609 l
-3061 5622 l
-3026 5634 l
-2992 5645 l
-2956 5656 l
-2920 5665 l
-2883 5674 l
-2846 5682 l
-2808 5689 l
-2770 5695 l
-2732 5700 l
-2693 5704 l
-2653 5707 l
-2613 5709 l
-2573 5710 l
-2533 5710 l
-2492 5709 l
-2451 5707 l
-2410 5703 l
-2368 5699 l
-2327 5693 l
-2285 5686 l
-2243 5678 l
-2202 5669 l
-2160 5658 l
-2119 5647 l
-2077 5634 l
-2036 5620 l
-1995 5605 l
-1992 5603 l
-1989 5602 l
-1986 5601 l
-1984 5600 l
-1981 5599 l
-1978 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3110 3018 l
-3110 3019 l
-3111 3021 l
-3112 3022 l
-3112 3023 l
-3113 3025 l
-3113 3026 l
-3122 3046 l
-3129 3067 l
-3137 3087 l
-3145 3108 l
-3152 3129 l
-3159 3150 l
-3166 3171 l
-3172 3192 l
-3179 3213 l
-3185 3234 l
-3191 3256 l
-3196 3277 l
-3202 3299 l
-3207 3320 l
-3212 3342 l
-3217 3364 l
-3222 3386 l
-3226 3408 l
-3230 3430 l
-3234 3452 l
-3238 3475 l
-3242 3497 l
-3245 3519 l
-3248 3542 l
-3251 3564 l
-3254 3587 l
-3257 3610 l
-3259 3632 l
-3261 3655 l
-3263 3678 l
-3265 3700 l
-3266 3723 l
-3268 3746 l
-3269 3769 l
-3270 3792 l
-3270 3815 l
-3271 3838 l
-3271 3861 l
-3271 3884 l
-3271 3907 l
-3271 3929 l
-3270 3952 l
-3269 3975 l
-3268 3998 l
-3267 4021 l
-3266 4044 l
-3264 4067 l
-3263 4090 l
-3261 4113 l
-3259 4136 l
-3256 4158 l
-3254 4181 l
-3251 4204 l
-3248 4227 l
-3245 4249 l
-3242 4272 l
-3238 4294 l
-3234 4317 l
-3230 4339 l
-3226 4362 l
-3222 4384 l
-3217 4406 l
-3212 4429 l
-3207 4451 l
-3202 4473 l
-3197 4495 l
-3191 4517 l
-3186 4538 l
-3180 4560 l
-3173 4582 l
-3167 4603 l
-3160 4625 l
-3154 4646 l
-3146 4667 l
-3139 4688 l
-3132 4709 l
-3124 4730 l
-3116 4751 l
-3108 4771 l
-3100 4792 l
-3092 4812 l
-3083 4832 l
-3074 4852 l
-3065 4872 l
-3055 4892 l
-3046 4912 l
-3036 4931 l
-3026 4950 l
-3016 4970 l
-3005 4989 l
-2995 5007 l
-2984 5026 l
-2973 5044 l
-2962 5063 l
-2950 5081 l
-2938 5099 l
-2926 5116 l
-2914 5134 l
-2902 5151 l
-2889 5168 l
-2876 5185 l
-2863 5202 l
-2849 5218 l
-2836 5234 l
-2822 5250 l
-2808 5266 l
-2793 5281 l
-2778 5296 l
-2764 5311 l
-2748 5326 l
-2733 5340 l
-2717 5355 l
-2701 5368 l
-2685 5382 l
-2668 5395 l
-2652 5408 l
-2634 5421 l
-2617 5433 l
-2599 5445 l
-2581 5457 l
-2563 5468 l
-2544 5479 l
-2526 5489 l
-2506 5499 l
-2487 5509 l
-2467 5519 l
-2447 5528 l
-2426 5536 l
-2405 5544 l
-2384 5552 l
-2362 5559 l
-2340 5566 l
-2318 5572 l
-2295 5578 l
-2272 5583 l
-2248 5587 l
-2224 5591 l
-2200 5595 l
-2175 5598 l
-2150 5600 l
-2124 5601 l
-2098 5602 l
-2072 5602 l
-2045 5602 l
-2017 5600 l
-1989 5598 l
-1987 5598 l
-1985 5598 l
-1983 5597 l
-1981 5597 l
-1979 5597 l
-1977 5597 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3109 3017 l
-3108 3019 l
-3107 3020 l
-3106 3021 l
-3106 3022 l
-3105 3023 l
-3104 3024 l
-3094 3041 l
-3083 3057 l
-3073 3074 l
-3062 3090 l
-3052 3107 l
-3041 3124 l
-3031 3141 l
-3020 3158 l
-3010 3175 l
-2999 3192 l
-2989 3210 l
-2978 3227 l
-2968 3245 l
-2957 3263 l
-2947 3280 l
-2936 3298 l
-2926 3316 l
-2915 3334 l
-2905 3352 l
-2894 3371 l
-2884 3389 l
-2873 3407 l
-2863 3426 l
-2852 3444 l
-2841 3463 l
-2831 3482 l
-2820 3500 l
-2810 3519 l
-2799 3538 l
-2789 3557 l
-2779 3576 l
-2768 3595 l
-2758 3614 l
-2747 3633 l
-2737 3653 l
-2726 3672 l
-2716 3691 l
-2706 3710 l
-2695 3730 l
-2685 3749 l
-2675 3769 l
-2664 3788 l
-2654 3808 l
-2644 3827 l
-2634 3847 l
-2624 3866 l
-2614 3886 l
-2603 3906 l
-2593 3925 l
-2583 3945 l
-2573 3965 l
-2563 3984 l
-2553 4004 l
-2544 4024 l
-2534 4043 l
-2524 4063 l
-2514 4083 l
-2504 4103 l
-2495 4122 l
-2485 4142 l
-2475 4162 l
-2466 4181 l
-2456 4201 l
-2447 4221 l
-2438 4240 l
-2428 4260 l
-2419 4279 l
-2410 4299 l
-2400 4319 l
-2391 4338 l
-2382 4357 l
-2373 4377 l
-2364 4396 l
-2355 4416 l
-2347 4435 l
-2338 4454 l
-2329 4473 l
-2321 4493 l
-2312 4512 l
-2304 4531 l
-2295 4550 l
-2287 4569 l
-2278 4588 l
-2270 4607 l
-2262 4625 l
-2254 4644 l
-2246 4663 l
-2238 4681 l
-2230 4700 l
-2223 4718 l
-2215 4737 l
-2208 4755 l
-2200 4773 l
-2193 4792 l
-2185 4810 l
-2178 4828 l
-2171 4846 l
-2164 4863 l
-2157 4881 l
-2150 4899 l
-2144 4916 l
-2137 4934 l
-2130 4951 l
-2124 4969 l
-2118 4986 l
-2111 5003 l
-2105 5020 l
-2099 5037 l
-2093 5053 l
-2088 5070 l
-2082 5087 l
-2076 5103 l
-2071 5119 l
-2066 5136 l
-2061 5152 l
-2055 5168 l
-2051 5184 l
-2046 5200 l
-2041 5215 l
-2036 5231 l
-2032 5246 l
-2028 5261 l
-2024 5277 l
-2020 5292 l
-2016 5307 l
-2012 5321 l
-2009 5336 l
-2005 5351 l
-2002 5365 l
-1999 5379 l
-1996 5393 l
-1993 5408 l
-1991 5421 l
-1988 5435 l
-1986 5449 l
-1984 5462 l
-1982 5476 l
-1980 5489 l
-1979 5502 l
-1978 5515 l
-1977 5528 l
-1976 5541 l
-1975 5553 l
-1975 5566 l
-1975 5578 l
-1975 5590 l
-1975 5591 l
-1975 5592 l
-1975 5593 l
-1975 5594 l
-1975 5595 l
-1975 5596 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3108 3016 l
-3106 3017 l
-3104 3017 l
-3103 3017 l
-3101 3017 l
-3099 3017 l
-3098 3018 l
-3075 3021 l
-3052 3024 l
-3029 3028 l
-3006 3032 l
-2983 3036 l
-2960 3041 l
-2937 3046 l
-2914 3051 l
-2892 3057 l
-2869 3063 l
-2846 3069 l
-2824 3075 l
-2801 3082 l
-2779 3089 l
-2757 3096 l
-2735 3104 l
-2712 3112 l
-2690 3120 l
-2668 3128 l
-2646 3137 l
-2625 3146 l
-2603 3155 l
-2581 3164 l
-2560 3174 l
-2538 3184 l
-2517 3194 l
-2496 3205 l
-2475 3216 l
-2454 3227 l
-2433 3238 l
-2412 3249 l
-2392 3261 l
-2371 3273 l
-2351 3285 l
-2331 3297 l
-2311 3310 l
-2291 3323 l
-2271 3336 l
-2252 3349 l
-2232 3363 l
-2213 3377 l
-2194 3391 l
-2175 3405 l
-2156 3419 l
-2138 3434 l
-2119 3449 l
-2101 3464 l
-2083 3479 l
-2065 3495 l
-2047 3510 l
-2030 3526 l
-2012 3542 l
-1995 3559 l
-1978 3575 l
-1962 3592 l
-1945 3609 l
-1929 3626 l
-1913 3643 l
-1897 3660 l
-1881 3678 l
-1866 3695 l
-1851 3713 l
-1836 3731 l
-1821 3750 l
-1807 3768 l
-1793 3787 l
-1779 3806 l
-1765 3824 l
-1752 3844 l
-1738 3863 l
-1725 3882 l
-1713 3902 l
-1700 3922 l
-1688 3941 l
-1677 3962 l
-1665 3982 l
-1654 4002 l
-1643 4022 l
-1632 4043 l
-1622 4064 l
-1612 4085 l
-1602 4106 l
-1593 4127 l
-1584 4148 l
-1575 4170 l
-1566 4191 l
-1558 4213 l
-1551 4235 l
-1543 4257 l
-1536 4279 l
-1530 4301 l
-1523 4323 l
-1517 4345 l
-1512 4368 l
-1507 4391 l
-1502 4413 l
-1497 4436 l
-1493 4459 l
-1490 4482 l
-1487 4505 l
-1484 4528 l
-1481 4551 l
-1480 4575 l
-1478 4598 l
-1477 4622 l
-1477 4645 l
-1477 4669 l
-1477 4693 l
-1478 4717 l
-1479 4741 l
-1481 4764 l
-1483 4788 l
-1486 4812 l
-1490 4837 l
-1494 4861 l
-1498 4885 l
-1504 4909 l
-1509 4933 l
-1515 4958 l
-1522 4982 l
-1530 5006 l
-1538 5030 l
-1547 5055 l
-1556 5079 l
-1566 5103 l
-1577 5127 l
-1588 5152 l
-1601 5176 l
-1613 5200 l
-1627 5224 l
-1641 5248 l
-1657 5272 l
-1673 5295 l
-1689 5319 l
-1707 5343 l
-1725 5366 l
-1745 5389 l
-1765 5412 l
-1786 5435 l
-1808 5457 l
-1831 5480 l
-1855 5502 l
-1880 5523 l
-1906 5545 l
-1933 5566 l
-1960 5586 l
-1962 5588 l
-1965 5589 l
-1967 5591 l
-1969 5592 l
-1971 5594 l
-1973 5595 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3108 3015 l
-3106 3014 l
-3104 3014 l
-3103 3013 l
-3101 3012 l
-3100 3011 l
-3098 3010 l
-3076 2998 l
-3053 2987 l
-3030 2975 l
-3007 2965 l
-2984 2954 l
-2961 2944 l
-2938 2934 l
-2914 2925 l
-2890 2916 l
-2866 2907 l
-2842 2899 l
-2818 2891 l
-2794 2883 l
-2769 2876 l
-2745 2869 l
-2720 2863 l
-2695 2857 l
-2671 2852 l
-2646 2846 l
-2620 2842 l
-2595 2837 l
-2570 2833 l
-2545 2830 l
-2519 2827 l
-2494 2824 l
-2468 2822 l
-2443 2820 l
-2417 2819 l
-2392 2818 l
-2366 2817 l
-2340 2817 l
-2315 2818 l
-2289 2818 l
-2263 2820 l
-2237 2821 l
-2211 2824 l
-2186 2826 l
-2160 2829 l
-2134 2833 l
-2109 2837 l
-2083 2842 l
-2057 2847 l
-2032 2852 l
-2006 2858 l
-1981 2865 l
-1955 2872 l
-1930 2879 l
-1905 2887 l
-1880 2896 l
-1855 2905 l
-1830 2914 l
-1805 2925 l
-1780 2935 l
-1756 2946 l
-1732 2958 l
-1707 2970 l
-1683 2983 l
-1660 2996 l
-1636 3010 l
-1612 3024 l
-1589 3039 l
-1566 3054 l
-1543 3070 l
-1521 3087 l
-1499 3104 l
-1477 3122 l
-1455 3140 l
-1433 3159 l
-1412 3178 l
-1391 3198 l
-1371 3218 l
-1351 3239 l
-1331 3261 l
-1312 3283 l
-1293 3306 l
-1274 3329 l
-1256 3353 l
-1238 3378 l
-1221 3403 l
-1204 3429 l
-1188 3455 l
-1172 3482 l
-1156 3509 l
-1142 3537 l
-1128 3565 l
-1114 3594 l
-1101 3624 l
-1089 3654 l
-1077 3685 l
-1066 3716 l
-1055 3748 l
-1046 3780 l
-1037 3812 l
-1028 3846 l
-1021 3879 l
-1014 3914 l
-1008 3948 l
-1003 3983 l
-999 4019 l
-996 4055 l
-993 4091 l
-992 4128 l
-991 4165 l
-992 4202 l
-993 4239 l
-996 4277 l
-999 4315 l
-1003 4354 l
-1009 4392 l
-1015 4431 l
-1023 4470 l
-1032 4509 l
-1041 4548 l
-1052 4587 l
-1065 4625 l
-1078 4664 l
-1092 4703 l
-1108 4742 l
-1124 4780 l
-1142 4818 l
-1161 4856 l
-1181 4894 l
-1202 4931 l
-1225 4968 l
-1248 5004 l
-1273 5040 l
-1298 5075 l
-1325 5110 l
-1353 5144 l
-1382 5178 l
-1412 5210 l
-1442 5242 l
-1474 5273 l
-1507 5304 l
-1540 5333 l
-1575 5361 l
-1610 5389 l
-1646 5415 l
-1682 5441 l
-1719 5465 l
-1757 5488 l
-1796 5511 l
-1835 5532 l
-1874 5552 l
-1914 5571 l
-1955 5588 l
-1957 5589 l
-1960 5591 l
-1963 5592 l
-1966 5593 l
-1969 5594 l
-1972 5595 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3109 3015 l
-3108 3013 l
-3107 3012 l
-3107 3010 l
-3106 3009 l
-3106 3008 l
-3105 3006 l
-3096 2986 l
-3088 2966 l
-3079 2947 l
-3069 2927 l
-3060 2908 l
-3050 2889 l
-3040 2870 l
-3030 2851 l
-3019 2832 l
-3008 2814 l
-2997 2796 l
-2986 2778 l
-2975 2760 l
-2963 2742 l
-2951 2725 l
-2939 2707 l
-2926 2690 l
-2913 2674 l
-2900 2657 l
-2887 2641 l
-2873 2624 l
-2859 2609 l
-2845 2593 l
-2831 2578 l
-2816 2562 l
-2801 2548 l
-2786 2533 l
-2770 2519 l
-2754 2505 l
-2738 2491 l
-2721 2478 l
-2704 2464 l
-2687 2452 l
-2669 2439 l
-2651 2427 l
-2633 2415 l
-2615 2404 l
-2596 2393 l
-2576 2382 l
-2557 2372 l
-2537 2362 l
-2516 2353 l
-2495 2344 l
-2474 2335 l
-2452 2327 l
-2430 2319 l
-2408 2312 l
-2385 2306 l
-2361 2300 l
-2337 2294 l
-2313 2289 l
-2288 2285 l
-2263 2281 l
-2237 2278 l
-2211 2275 l
-2184 2274 l
-2157 2273 l
-2129 2272 l
-2101 2273 l
-2072 2274 l
-2042 2277 l
-2012 2280 l
-1981 2284 l
-1950 2289 l
-1918 2295 l
-1886 2302 l
-1853 2311 l
-1819 2320 l
-1785 2331 l
-1750 2343 l
-1714 2357 l
-1679 2372 l
-1642 2388 l
-1605 2407 l
-1567 2426 l
-1529 2448 l
-1491 2472 l
-1452 2497 l
-1413 2525 l
-1373 2555 l
-1334 2587 l
-1294 2621 l
-1254 2658 l
-1214 2697 l
-1175 2738 l
-1136 2783 l
-1097 2830 l
-1060 2879 l
-1023 2932 l
-987 2987 l
-952 3045 l
-919 3105 l
-888 3169 l
-859 3234 l
-831 3302 l
-829 3307 l
-828 3312 l
-826 3317 l
-824 3322 l
-822 3327 l
-820 3332 l
-819 3337 l
-817 3342 l
-815 3347 l
-813 3352 l
-811 3357 l
-810 3362 l
-808 3367 l
-806 3373 l
-805 3378 l
-803 3383 l
-801 3388 l
-800 3393 l
-798 3398 l
-796 3403 l
-795 3408 l
-793 3414 l
-792 3419 l
-790 3424 l
-789 3429 l
-787 3434 l
-786 3440 l
-784 3445 l
-783 3450 l
-781 3455 l
-780 3461 l
-778 3466 l
-777 3471 l
-775 3476 l
-774 3482 l
-773 3487 l
-771 3492 l
-770 3498 l
-768 3503 l
-767 3508 l
-766 3514 l
-764 3519 l
-763 3524 l
-762 3530 l
-761 3535 l
-759 3540 l
-758 3546 l
-757 3551 l
-756 3557 l
-755 3562 l
-753 3567 l
-752 3573 l
-751 3578 l
-750 3584 l
-749 3589 l
-748 3595 l
-747 3600 l
-746 3606 l
-745 3611 l
-744 3616 l
-743 3622 l
-742 3627 l
-741 3633 l
-740 3638 l
-739 3644 l
-738 3649 l
-737 3655 l
-736 3660 l
-735 3666 l
-734 3672 l
-733 3677 l
-733 3683 l
-732 3688 l
-731 3694 l
-730 3699 l
-729 3705 l
-729 3710 l
-728 3716 l
-727 3722 l
-727 3727 l
-726 3733 l
-725 3738 l
-725 3744 l
-724 3750 l
-723 3755 l
-723 3761 l
-722 3766 l
-722 3772 l
-721 3778 l
-720 3783 l
-720 3789 l
-719 3794 l
-719 3800 l
-719 3806 l
-718 3811 l
-S
-718 3811 m
-718 3817 l
-717 3823 l
-717 3828 l
-716 3834 l
-716 3839 l
-716 3845 l
-715 3851 l
-715 3856 l
-715 3862 l
-715 3868 l
-714 3873 l
-714 3879 l
-714 3885 l
-714 3890 l
-713 3896 l
-713 3902 l
-713 3907 l
-713 3913 l
-713 3918 l
-713 3924 l
-713 3930 l
-713 3935 l
-713 3941 l
-713 3947 l
-713 3952 l
-713 3958 l
-713 3964 l
-713 3969 l
-713 3975 l
-713 3981 l
-713 3986 l
-713 3992 l
-713 3997 l
-713 4003 l
-713 4009 l
-713 4014 l
-714 4020 l
-714 4026 l
-714 4031 l
-714 4037 l
-715 4042 l
-715 4048 l
-715 4054 l
-715 4059 l
-716 4065 l
-716 4071 l
-716 4076 l
-717 4082 l
-717 4087 l
-718 4093 l
-718 4099 l
-718 4104 l
-719 4110 l
-719 4115 l
-720 4121 l
-720 4126 l
-721 4132 l
-721 4137 l
-722 4143 l
-723 4149 l
-723 4154 l
-724 4160 l
-724 4165 l
-725 4171 l
-726 4176 l
-726 4182 l
-727 4187 l
-728 4193 l
-728 4198 l
-729 4204 l
-730 4209 l
-731 4215 l
-731 4220 l
-732 4226 l
-733 4231 l
-734 4237 l
-735 4242 l
-736 4248 l
-737 4253 l
-737 4258 l
-738 4264 l
-739 4269 l
-740 4275 l
-741 4280 l
-742 4285 l
-743 4291 l
-744 4296 l
-745 4302 l
-746 4307 l
-747 4312 l
-748 4318 l
-749 4323 l
-750 4328 l
-751 4334 l
-753 4339 l
-754 4344 l
-755 4350 l
-756 4355 l
-757 4360 l
-758 4365 l
-760 4371 l
-761 4376 l
-762 4381 l
-763 4386 l
-765 4392 l
-766 4397 l
-767 4402 l
-768 4407 l
-770 4412 l
-771 4418 l
-772 4423 l
-774 4428 l
-775 4433 l
-777 4438 l
-778 4443 l
-799 4514 l
-822 4583 l
-848 4649 l
-875 4713 l
-905 4774 l
-936 4833 l
-968 4889 l
-1001 4943 l
-1036 4994 l
-1071 5042 l
-1107 5088 l
-1143 5131 l
-1180 5171 l
-1217 5210 l
-1254 5245 l
-1291 5279 l
-1328 5310 l
-1365 5340 l
-1401 5367 l
-1438 5392 l
-1474 5416 l
-1510 5438 l
-1545 5458 l
-1580 5476 l
-1614 5493 l
-1648 5508 l
-1682 5522 l
-1715 5535 l
-1747 5546 l
-1779 5556 l
-1811 5565 l
-1842 5573 l
-1872 5580 l
-1902 5586 l
-1932 5591 l
-1961 5595 l
-1963 5595 l
-1965 5595 l
-1967 5596 l
-1969 5596 l
-1971 5596 l
-1973 5596 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3110 3015 l
-3111 3014 l
-3111 3013 l
-3112 3012 l
-3113 3010 l
-3114 3009 l
-3114 3008 l
-3125 2992 l
-3135 2976 l
-3146 2960 l
-3156 2945 l
-3166 2929 l
-3176 2914 l
-3187 2899 l
-3197 2884 l
-3207 2869 l
-3217 2854 l
-3228 2839 l
-3238 2825 l
-3248 2811 l
-3258 2796 l
-3268 2782 l
-3278 2769 l
-3288 2755 l
-3298 2741 l
-3308 2728 l
-3318 2715 l
-3328 2702 l
-3338 2689 l
-3348 2676 l
-3358 2664 l
-3368 2652 l
-3378 2639 l
-3388 2628 l
-3398 2616 l
-3408 2604 l
-3417 2593 l
-3427 2582 l
-3437 2571 l
-3447 2560 l
-3457 2550 l
-3466 2539 l
-3476 2529 l
-3486 2519 l
-3496 2510 l
-3506 2500 l
-3515 2491 l
-3525 2482 l
-3535 2473 l
-3545 2465 l
-3555 2457 l
-3565 2449 l
-3574 2441 l
-3584 2434 l
-3594 2427 l
-3604 2420 l
-3614 2413 l
-3625 2407 l
-3635 2401 l
-3645 2395 l
-3656 2390 l
-3666 2385 l
-3677 2380 l
-3687 2376 l
-3698 2372 l
-3709 2368 l
-3721 2365 l
-3732 2362 l
-3744 2360 l
-3755 2358 l
-3768 2357 l
-3780 2356 l
-3793 2356 l
-3806 2356 l
-3819 2357 l
-3833 2359 l
-3848 2361 l
-3863 2364 l
-3878 2368 l
-3895 2373 l
-3912 2379 l
-3930 2386 l
-3949 2395 l
-3969 2405 l
-3991 2416 l
-4014 2430 l
-4038 2446 l
-4065 2465 l
-4093 2486 l
-4125 2511 l
-4159 2541 l
-4196 2576 l
-4238 2618 l
-4283 2669 l
-4287 2673 l
-4290 2677 l
-4294 2681 l
-4297 2685 l
-4301 2689 l
-4304 2693 l
-4308 2698 l
-4312 2702 l
-4315 2706 l
-4319 2711 l
-4323 2716 l
-4326 2720 l
-4330 2725 l
-4334 2730 l
-4338 2734 l
-4342 2739 l
-4346 2744 l
-4349 2749 l
-4353 2755 l
-4357 2760 l
-4361 2765 l
-4365 2770 l
-4369 2776 l
-4373 2781 l
-4378 2787 l
-4382 2793 l
-4386 2798 l
-4390 2804 l
-4394 2810 l
-4399 2816 l
-4403 2822 l
-4407 2829 l
-4411 2835 l
-4416 2841 l
-4420 2848 l
-4425 2855 l
-4429 2861 l
-4434 2868 l
-4438 2875 l
-4443 2882 l
-4447 2889 l
-4452 2897 l
-4456 2904 l
-4461 2912 l
-4466 2919 l
-4470 2927 l
-4475 2935 l
-4480 2943 l
-4485 2951 l
-4489 2960 l
-4494 2968 l
-4499 2977 l
-4504 2986 l
-4509 2994 l
-4514 3003 l
-4519 3013 l
-4524 3022 l
-4529 3032 l
-4534 3041 l
-4539 3051 l
-4544 3061 l
-4549 3071 l
-4554 3082 l
-4559 3092 l
-4564 3103 l
-4569 3114 l
-4574 3125 l
-4579 3136 l
-4584 3148 l
-4589 3159 l
-4594 3171 l
-4599 3183 l
-4605 3196 l
-4610 3208 l
-4615 3221 l
-4620 3234 l
-4625 3247 l
-4630 3261 l
-4635 3274 l
-4640 3288 l
-4645 3302 l
-4649 3317 l
-4654 3331 l
-4659 3346 l
-4664 3362 l
-4669 3377 l
-4673 3393 l
-4678 3409 l
-4682 3425 l
-4687 3441 l
-4691 3458 l
-4695 3475 l
-4700 3493 l
-4704 3510 l
-4708 3528 l
-4712 3547 l
-4715 3565 l
-4719 3584 l
-4723 3603 l
-4726 3623 l
-4729 3643 l
-4732 3663 l
-4735 3683 l
-S
-4735 3683 m
-4738 3704 l
-4741 3725 l
-4743 3747 l
-4745 3768 l
-4747 3790 l
-4749 3813 l
-4751 3835 l
-4752 3858 l
-4753 3881 l
-4754 3905 l
-4754 3929 l
-4755 3953 l
-4755 3978 l
-4754 4002 l
-4754 4027 l
-4753 4053 l
-4751 4078 l
-4750 4104 l
-4748 4130 l
-4745 4157 l
-4743 4183 l
-4740 4210 l
-4736 4237 l
-4732 4264 l
-4728 4292 l
-4723 4319 l
-4718 4347 l
-4713 4375 l
-4707 4403 l
-4701 4431 l
-4694 4459 l
-4686 4488 l
-4679 4516 l
-4671 4545 l
-4662 4573 l
-4653 4602 l
-4643 4630 l
-4633 4659 l
-4623 4687 l
-4612 4716 l
-4600 4744 l
-4589 4772 l
-4576 4800 l
-4564 4828 l
-4550 4856 l
-4537 4883 l
-4523 4911 l
-4509 4938 l
-4494 4965 l
-4479 4992 l
-4463 5018 l
-4447 5044 l
-4431 5070 l
-4414 5095 l
-4397 5121 l
-4380 5146 l
-4363 5170 l
-4345 5194 l
-4327 5218 l
-4309 5241 l
-4290 5264 l
-4271 5287 l
-4252 5309 l
-4233 5331 l
-4214 5352 l
-4195 5373 l
-4175 5393 l
-4155 5413 l
-4136 5433 l
-4116 5452 l
-4096 5471 l
-4076 5489 l
-4056 5507 l
-4036 5524 l
-4016 5541 l
-3996 5558 l
-3976 5574 l
-3956 5589 l
-3936 5604 l
-3916 5619 l
-3896 5634 l
-3876 5648 l
-3856 5661 l
-3837 5674 l
-3817 5687 l
-3798 5700 l
-3778 5712 l
-3759 5723 l
-3740 5735 l
-3721 5746 l
-3702 5756 l
-3684 5767 l
-3665 5777 l
-3647 5786 l
-3629 5795 l
-3611 5804 l
-3593 5813 l
-3575 5822 l
-3558 5830 l
-3540 5838 l
-3523 5845 l
-3506 5852 l
-3489 5859 l
-3473 5866 l
-3456 5873 l
-3440 5879 l
-3424 5885 l
-3408 5891 l
-3392 5897 l
-3377 5902 l
-3362 5907 l
-3346 5912 l
-3331 5917 l
-3317 5922 l
-3302 5926 l
-3288 5931 l
-3273 5935 l
-3259 5939 l
-3246 5943 l
-3232 5946 l
-3218 5950 l
-3205 5953 l
-3192 5956 l
-3179 5960 l
-3166 5963 l
-3153 5965 l
-3141 5968 l
-3128 5971 l
-3116 5973 l
-3104 5976 l
-3092 5978 l
-3081 5980 l
-3069 5982 l
-3058 5984 l
-3046 5986 l
-3035 5988 l
-3024 5989 l
-3014 5991 l
-3003 5993 l
-2992 5994 l
-2982 5995 l
-2972 5997 l
-2962 5998 l
-2952 5999 l
-2942 6000 l
-2932 6001 l
-2923 6002 l
-2913 6003 l
-2904 6004 l
-2895 6005 l
-2885 6006 l
-2876 6006 l
-2868 6007 l
-2859 6008 l
-2850 6008 l
-2842 6009 l
-2833 6009 l
-2825 6009 l
-2817 6010 l
-2809 6010 l
-2801 6010 l
-2793 6011 l
-2785 6011 l
-2777 6011 l
-2770 6011 l
-2762 6011 l
-2755 6011 l
-2747 6012 l
-2740 6012 l
-2733 6012 l
-2726 6012 l
-2719 6011 l
-2712 6011 l
-2705 6011 l
-2699 6011 l
-2692 6011 l
-2685 6011 l
-2679 6011 l
-2673 6010 l
-2666 6010 l
-2660 6010 l
-2654 6010 l
-2648 6009 l
-2642 6009 l
-2636 6009 l
-2630 6008 l
-2624 6008 l
-2618 6008 l
-2613 6007 l
-2607 6007 l
-2601 6006 l
-2596 6006 l
-2590 6006 l
-2585 6005 l
-2580 6005 l
-2575 6004 l
-2569 6004 l
-2564 6003 l
-2559 6003 l
-S
-2559 6003 m
-2554 6002 l
-2549 6002 l
-2544 6001 l
-2539 6001 l
-2535 6000 l
-2530 5999 l
-2468 5991 l
-2415 5981 l
-2369 5971 l
-2328 5960 l
-2292 5950 l
-2260 5939 l
-2232 5928 l
-2206 5918 l
-2184 5907 l
-2163 5896 l
-2144 5886 l
-2127 5875 l
-2112 5865 l
-2098 5855 l
-2085 5844 l
-2073 5834 l
-2063 5823 l
-2053 5813 l
-2044 5803 l
-2036 5792 l
-2028 5782 l
-2021 5771 l
-2015 5761 l
-2010 5750 l
-2004 5739 l
-2000 5728 l
-1996 5717 l
-1992 5706 l
-1989 5695 l
-1986 5684 l
-1983 5673 l
-1981 5661 l
-1979 5650 l
-1978 5638 l
-1977 5626 l
-1976 5615 l
-1975 5603 l
-1975 5602 l
-1975 5601 l
-1975 5600 l
-1975 5599 l
-1975 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3111 3016 l
-3113 3016 l
-3114 3016 l
-3116 3015 l
-3117 3015 l
-3119 3015 l
-3121 3015 l
-3144 3012 l
-3167 3010 l
-3190 3009 l
-3213 3007 l
-3236 3006 l
-3260 3005 l
-3283 3005 l
-3306 3005 l
-3329 3005 l
-3352 3006 l
-3375 3007 l
-3398 3008 l
-3421 3010 l
-3444 3012 l
-3467 3014 l
-3490 3017 l
-3513 3021 l
-3536 3024 l
-3559 3028 l
-3582 3033 l
-3604 3038 l
-3627 3043 l
-3650 3049 l
-3672 3055 l
-3695 3061 l
-3717 3068 l
-3739 3076 l
-3761 3084 l
-3784 3092 l
-3806 3101 l
-3827 3110 l
-3849 3120 l
-3871 3130 l
-3892 3141 l
-3913 3152 l
-3935 3163 l
-3956 3176 l
-3977 3188 l
-3997 3201 l
-4018 3215 l
-4038 3229 l
-4058 3244 l
-4078 3260 l
-4098 3276 l
-4117 3292 l
-4136 3309 l
-4155 3327 l
-4174 3345 l
-4193 3364 l
-4211 3384 l
-4228 3404 l
-4246 3425 l
-4263 3446 l
-4280 3469 l
-4296 3491 l
-4312 3515 l
-4328 3539 l
-4343 3564 l
-4358 3590 l
-4372 3616 l
-4386 3643 l
-4399 3671 l
-4412 3700 l
-4424 3729 l
-4435 3759 l
-4446 3790 l
-4456 3822 l
-4466 3855 l
-4475 3888 l
-4482 3922 l
-4490 3957 l
-4496 3993 l
-4501 4030 l
-4506 4067 l
-4509 4106 l
-4511 4145 l
-4513 4185 l
-4513 4225 l
-4512 4267 l
-4509 4309 l
-4506 4352 l
-4501 4395 l
-4494 4439 l
-4486 4484 l
-4477 4530 l
-4466 4575 l
-4454 4622 l
-4439 4669 l
-4423 4716 l
-4406 4763 l
-4386 4811 l
-4365 4858 l
-4342 4906 l
-4317 4954 l
-4290 5001 l
-4261 5048 l
-4230 5095 l
-4197 5141 l
-4162 5187 l
-4126 5232 l
-4087 5276 l
-4047 5319 l
-4005 5361 l
-3962 5402 l
-3917 5441 l
-3870 5479 l
-3822 5515 l
-3773 5550 l
-3722 5583 l
-3670 5614 l
-3618 5644 l
-3565 5671 l
-3511 5697 l
-3456 5720 l
-3401 5742 l
-3346 5761 l
-3291 5779 l
-3235 5794 l
-3180 5808 l
-3125 5819 l
-3070 5829 l
-3016 5836 l
-2962 5842 l
-2909 5846 l
-2856 5848 l
-2804 5849 l
-2753 5848 l
-2703 5845 l
-2654 5841 l
-2606 5835 l
-2559 5828 l
-2513 5820 l
-2468 5811 l
-2425 5800 l
-2382 5789 l
-2341 5776 l
-2300 5762 l
-2261 5748 l
-2223 5733 l
-2187 5717 l
-2151 5700 l
-2116 5682 l
-2083 5664 l
-2051 5646 l
-2020 5626 l
-1989 5607 l
-1987 5605 l
-1985 5604 l
-1983 5602 l
-1981 5601 l
-1979 5599 l
-1977 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3586 3410 m
-3585 3411 l
-3584 3412 l
-3583 3413 l
-3571 3424 l
-3559 3435 l
-3547 3445 l
-3533 3455 l
-3520 3464 l
-3506 3473 l
-3491 3481 l
-3477 3489 l
-3462 3496 l
-3446 3502 l
-3430 3509 l
-3414 3514 l
-3398 3519 l
-3381 3524 l
-3364 3528 l
-3347 3531 l
-3330 3534 l
-3312 3537 l
-3294 3539 l
-3276 3541 l
-3258 3542 l
-3240 3542 l
-3222 3542 l
-3204 3542 l
-3185 3541 l
-3167 3539 l
-3148 3537 l
-3129 3535 l
-3111 3532 l
-3092 3529 l
-3074 3525 l
-3055 3521 l
-3037 3516 l
-3018 3511 l
-3000 3506 l
-2982 3500 l
-2963 3494 l
-2945 3487 l
-2927 3480 l
-2910 3472 l
-2892 3464 l
-2875 3456 l
-2858 3447 l
-2841 3438 l
-2824 3429 l
-2808 3419 l
-2791 3409 l
-2775 3398 l
-2760 3388 l
-2744 3377 l
-2729 3365 l
-2715 3353 l
-2700 3341 l
-2686 3329 l
-2673 3316 l
-2660 3303 l
-2647 3290 l
-2634 3277 l
-2622 3263 l
-2611 3249 l
-2600 3235 l
-2589 3220 l
-2579 3206 l
-2570 3191 l
-2561 3176 l
-2552 3161 l
-2544 3145 l
-2537 3130 l
-2530 3114 l
-2524 3098 l
-2518 3082 l
-2513 3066 l
-2509 3050 l
-2505 3034 l
-2502 3018 l
-2500 3002 l
-2498 2985 l
-2497 2969 l
-2496 2953 l
-2497 2937 l
-2498 2920 l
-2500 2904 l
-2502 2888 l
-2506 2872 l
-2510 2856 l
-2514 2841 l
-2520 2825 l
-2526 2810 l
-2534 2795 l
-2542 2780 l
-2550 2765 l
-2560 2751 l
-2570 2737 l
-2581 2723 l
-2593 2709 l
-2606 2697 l
-2620 2684 l
-2634 2672 l
-2649 2660 l
-2665 2649 l
-2681 2638 l
-2699 2628 l
-2717 2619 l
-2735 2610 l
-2755 2602 l
-2774 2594 l
-2795 2587 l
-2816 2581 l
-2838 2576 l
-2860 2571 l
-2883 2567 l
-2906 2564 l
-2930 2562 l
-2954 2561 l
-2978 2560 l
-3003 2561 l
-3028 2562 l
-3053 2564 l
-3078 2567 l
-3103 2571 l
-3128 2576 l
-3154 2581 l
-3179 2588 l
-3204 2596 l
-3229 2604 l
-3253 2613 l
-3277 2623 l
-3301 2634 l
-3325 2646 l
-3348 2658 l
-3371 2671 l
-3393 2685 l
-3414 2700 l
-3435 2715 l
-3455 2730 l
-3475 2747 l
-3493 2764 l
-3511 2781 l
-3529 2799 l
-3545 2817 l
-3560 2835 l
-3575 2854 l
-3589 2873 l
-3602 2893 l
-3614 2912 l
-3625 2932 l
-3635 2951 l
-3644 2971 l
-3652 2991 l
-3659 3011 l
-3666 3031 l
-3671 3050 l
-3676 3070 l
-3679 3089 l
-3682 3109 l
-3684 3128 l
-3685 3146 l
-3685 3165 l
-3684 3183 l
-3683 3201 l
-3681 3219 l
-3677 3236 l
-3674 3253 l
-3669 3269 l
-3664 3285 l
-3657 3301 l
-3651 3316 l
-3643 3331 l
-3635 3346 l
-3626 3359 l
-3617 3373 l
-3607 3386 l
-3597 3398 l
-3586 3410 l
-S
-3881 3956 m
-3879 3957 l
-3877 3958 l
-3875 3960 l
-3851 3975 l
-3826 3989 l
-3800 4003 l
-3774 4016 l
-3748 4027 l
-3721 4038 l
-3693 4048 l
-3665 4057 l
-3637 4065 l
-3609 4073 l
-3580 4079 l
-3551 4085 l
-3521 4090 l
-3492 4094 l
-3462 4097 l
-3432 4100 l
-3402 4102 l
-3371 4103 l
-3341 4104 l
-3310 4103 l
-3279 4102 l
-3248 4101 l
-3217 4098 l
-3186 4095 l
-3155 4091 l
-3124 4087 l
-3093 4082 l
-3061 4076 l
-3030 4070 l
-2999 4063 l
-2968 4056 l
-2937 4047 l
-2907 4039 l
-2876 4029 l
-2845 4019 l
-2815 4009 l
-2785 3998 l
-2755 3986 l
-2725 3974 l
-2695 3962 l
-2666 3948 l
-2637 3935 l
-2608 3920 l
-2579 3906 l
-2551 3890 l
-2523 3875 l
-2495 3858 l
-2468 3842 l
-2441 3824 l
-2415 3807 l
-2389 3789 l
-2363 3770 l
-2338 3751 l
-2313 3731 l
-2288 3711 l
-2265 3691 l
-2241 3670 l
-2219 3649 l
-2196 3627 l
-2175 3605 l
-2154 3583 l
-2133 3560 l
-2113 3537 l
-2094 3514 l
-2076 3490 l
-2058 3465 l
-2041 3441 l
-2025 3416 l
-2009 3390 l
-1994 3365 l
-1981 3339 l
-1967 3313 l
-1955 3286 l
-1944 3259 l
-1934 3232 l
-1924 3205 l
-1916 3177 l
-1908 3149 l
-1902 3121 l
-1897 3092 l
-1892 3064 l
-1889 3035 l
-1888 3006 l
-1887 2977 l
-1888 2947 l
-1889 2918 l
-1893 2888 l
-1897 2859 l
-1903 2829 l
-1911 2799 l
-1920 2770 l
-1930 2740 l
-1943 2710 l
-1956 2681 l
-1972 2652 l
-1989 2623 l
-2008 2594 l
-2029 2565 l
-2051 2537 l
-2076 2510 l
-2102 2483 l
-2131 2456 l
-2161 2430 l
-2194 2405 l
-2228 2381 l
-2265 2358 l
-2304 2336 l
-2345 2316 l
-2388 2296 l
-2432 2278 l
-2479 2262 l
-2528 2248 l
-2579 2235 l
-2632 2225 l
-2686 2216 l
-2742 2210 l
-2799 2206 l
-2857 2205 l
-2917 2207 l
-2977 2211 l
-3038 2218 l
-3100 2228 l
-3161 2241 l
-3223 2256 l
-3284 2275 l
-3344 2296 l
-3404 2320 l
-3463 2347 l
-3520 2376 l
-3575 2408 l
-3629 2442 l
-3681 2478 l
-3730 2516 l
-3777 2556 l
-3822 2597 l
-3864 2640 l
-3904 2683 l
-3941 2728 l
-3975 2773 l
-4006 2818 l
-4035 2864 l
-4061 2910 l
-4084 2956 l
-4104 3002 l
-4122 3047 l
-4138 3092 l
-4151 3136 l
-4162 3180 l
-4170 3223 l
-4177 3265 l
-4181 3306 l
-4183 3346 l
-4183 3385 l
-4182 3423 l
-4179 3460 l
-4174 3496 l
-4167 3531 l
-4160 3565 l
-4150 3598 l
-4139 3629 l
-4127 3660 l
-4114 3689 l
-4100 3717 l
-4084 3744 l
-4068 3770 l
-4050 3795 l
-4032 3819 l
-4013 3842 l
-3993 3863 l
-3972 3884 l
-3950 3903 l
-3928 3922 l
-3904 3939 l
-3881 3956 l
-S
-3924 4591 m
-3922 4592 l
-3920 4593 l
-3917 4593 l
-3884 4604 l
-3851 4614 l
-3817 4623 l
-3783 4631 l
-3749 4638 l
-3715 4645 l
-3680 4650 l
-3645 4655 l
-3609 4659 l
-3574 4662 l
-3538 4664 l
-3502 4666 l
-3466 4667 l
-3430 4667 l
-3394 4666 l
-3358 4665 l
-3321 4663 l
-3284 4661 l
-3248 4657 l
-3211 4653 l
-3174 4649 l
-3137 4643 l
-3100 4638 l
-3063 4631 l
-3026 4624 l
-2989 4616 l
-2952 4608 l
-2916 4599 l
-2879 4590 l
-2842 4580 l
-2805 4569 l
-2769 4558 l
-2732 4547 l
-2696 4534 l
-2659 4522 l
-2623 4509 l
-2587 4495 l
-2552 4481 l
-2516 4466 l
-2481 4451 l
-2445 4435 l
-2411 4419 l
-2376 4402 l
-2341 4385 l
-2307 4367 l
-2273 4349 l
-2240 4331 l
-2206 4312 l
-2174 4292 l
-2141 4272 l
-2109 4252 l
-2077 4231 l
-2045 4210 l
-2014 4188 l
-1984 4166 l
-1953 4144 l
-1924 4121 l
-1894 4098 l
-1865 4074 l
-1837 4050 l
-1809 4026 l
-1782 4001 l
-1755 3976 l
-1729 3950 l
-1703 3925 l
-1678 3898 l
-1654 3871 l
-1630 3844 l
-1607 3817 l
-1584 3789 l
-1563 3761 l
-1542 3732 l
-1521 3703 l
-1502 3674 l
-1483 3644 l
-1465 3614 l
-1448 3584 l
-1432 3553 l
-1417 3522 l
-1402 3490 l
-1389 3458 l
-1376 3426 l
-1365 3393 l
-1354 3360 l
-1345 3326 l
-1337 3292 l
-1330 3257 l
-1325 3222 l
-1320 3187 l
-1317 3151 l
-1316 3114 l
-1316 3078 l
-1317 3040 l
-1321 3002 l
-1326 2964 l
-1332 2925 l
-1341 2886 l
-1352 2845 l
-1365 2805 l
-1381 2764 l
-1399 2722 l
-1419 2680 l
-1443 2637 l
-1469 2594 l
-1499 2551 l
-1533 2507 l
-1570 2462 l
-1573 2459 l
-1576 2456 l
-1579 2453 l
-1582 2450 l
-1585 2447 l
-1588 2443 l
-1590 2440 l
-1593 2437 l
-1596 2434 l
-1599 2431 l
-1603 2427 l
-1606 2424 l
-1609 2421 l
-1612 2418 l
-1615 2415 l
-1618 2412 l
-1621 2408 l
-1624 2405 l
-1628 2402 l
-1631 2399 l
-1634 2396 l
-1638 2393 l
-1641 2389 l
-1644 2386 l
-1648 2383 l
-1651 2380 l
-1654 2377 l
-1658 2374 l
-1661 2370 l
-1665 2367 l
-1668 2364 l
-1672 2361 l
-1675 2358 l
-1679 2355 l
-1683 2351 l
-1686 2348 l
-1690 2345 l
-1694 2342 l
-1697 2339 l
-1701 2336 l
-1705 2332 l
-1709 2329 l
-1712 2326 l
-1716 2323 l
-1720 2320 l
-1724 2317 l
-1728 2314 l
-1732 2310 l
-1736 2307 l
-1740 2304 l
-1744 2301 l
-1748 2298 l
-1752 2295 l
-1756 2292 l
-1760 2289 l
-1765 2286 l
-1769 2282 l
-1773 2279 l
-1777 2276 l
-1782 2273 l
-1786 2270 l
-1790 2267 l
-1795 2264 l
-1799 2261 l
-1803 2258 l
-1808 2255 l
-1812 2252 l
-1817 2249 l
-1822 2245 l
-1826 2242 l
-1831 2239 l
-1835 2236 l
-1840 2233 l
-1845 2230 l
-1849 2227 l
-1854 2224 l
-1859 2221 l
-1864 2218 l
-1869 2215 l
-1874 2212 l
-1879 2209 l
-1883 2206 l
-1888 2203 l
-1893 2200 l
-1899 2198 l
-1904 2195 l
-1909 2192 l
-1914 2189 l
-1919 2186 l
-S
-1919 2186 m
-1924 2183 l
-1930 2180 l
-1935 2177 l
-1940 2174 l
-1945 2171 l
-1951 2169 l
-1956 2166 l
-1962 2163 l
-1967 2160 l
-1973 2157 l
-1978 2154 l
-1984 2152 l
-1989 2149 l
-1995 2146 l
-2001 2143 l
-2006 2141 l
-2012 2138 l
-2018 2135 l
-2024 2132 l
-2030 2130 l
-2036 2127 l
-2041 2124 l
-2047 2122 l
-2053 2119 l
-2059 2116 l
-2065 2114 l
-2072 2111 l
-2078 2109 l
-2084 2106 l
-2090 2103 l
-2096 2101 l
-2103 2098 l
-2109 2096 l
-2115 2093 l
-2122 2091 l
-2128 2088 l
-2135 2086 l
-2141 2084 l
-2148 2081 l
-2154 2079 l
-2161 2076 l
-2167 2074 l
-2174 2072 l
-2181 2069 l
-2187 2067 l
-2194 2065 l
-2201 2063 l
-2208 2060 l
-2215 2058 l
-2222 2056 l
-2229 2054 l
-2236 2052 l
-2243 2050 l
-2250 2048 l
-2257 2045 l
-2264 2043 l
-2271 2041 l
-2279 2039 l
-2286 2037 l
-2293 2035 l
-2300 2034 l
-2308 2032 l
-2315 2030 l
-2323 2028 l
-2330 2026 l
-2338 2024 l
-2345 2022 l
-2353 2021 l
-2360 2019 l
-2368 2017 l
-2376 2016 l
-2383 2014 l
-2391 2012 l
-2399 2011 l
-2407 2009 l
-2415 2008 l
-2423 2006 l
-2431 2005 l
-2439 2004 l
-2447 2002 l
-2455 2001 l
-2463 1999 l
-2471 1998 l
-2479 1997 l
-2487 1996 l
-2495 1995 l
-2504 1993 l
-2512 1992 l
-2520 1991 l
-2529 1990 l
-2537 1989 l
-2545 1988 l
-2554 1987 l
-2562 1986 l
-2571 1986 l
-2579 1985 l
-2588 1984 l
-2597 1983 l
-2605 1983 l
-2614 1982 l
-2623 1981 l
-2631 1981 l
-2640 1980 l
-2649 1980 l
-2658 1979 l
-2667 1979 l
-2676 1978 l
-2684 1978 l
-2693 1978 l
-2702 1978 l
-2711 1977 l
-2720 1977 l
-2729 1977 l
-2739 1977 l
-2748 1977 l
-2757 1977 l
-2766 1977 l
-2775 1977 l
-2784 1977 l
-2794 1978 l
-2803 1978 l
-2812 1978 l
-2821 1979 l
-2831 1979 l
-2840 1979 l
-2849 1980 l
-2859 1980 l
-2868 1981 l
-2878 1982 l
-2887 1982 l
-2896 1983 l
-2906 1984 l
-2915 1985 l
-2925 1986 l
-2935 1987 l
-2944 1988 l
-2954 1989 l
-2963 1990 l
-2973 1991 l
-2982 1992 l
-2992 1993 l
-3002 1995 l
-3011 1996 l
-3021 1998 l
-3031 1999 l
-3040 2001 l
-3050 2002 l
-3060 2004 l
-3069 2006 l
-3079 2007 l
-3089 2009 l
-3098 2011 l
-3108 2013 l
-3118 2015 l
-3128 2017 l
-3137 2019 l
-3147 2021 l
-3157 2023 l
-3167 2026 l
-3176 2028 l
-3186 2030 l
-3196 2033 l
-3206 2035 l
-3215 2038 l
-3225 2040 l
-3235 2043 l
-3245 2045 l
-3254 2048 l
-3264 2051 l
-3274 2054 l
-3284 2057 l
-3293 2060 l
-3303 2063 l
-3313 2066 l
-3322 2069 l
-3332 2072 l
-3342 2075 l
-3351 2079 l
-3361 2082 l
-3371 2085 l
-3380 2089 l
-3390 2092 l
-3399 2096 l
-3409 2100 l
-3419 2103 l
-3428 2107 l
-3438 2111 l
-3447 2115 l
-3457 2118 l
-3466 2122 l
-3476 2126 l
-3485 2130 l
-3494 2135 l
-3504 2139 l
-3513 2143 l
-3522 2147 l
-3532 2151 l
-3541 2156 l
-3550 2160 l
-S
-3550 2160 m
-3559 2165 l
-3569 2169 l
-3578 2174 l
-3587 2178 l
-3596 2183 l
-3605 2187 l
-3614 2192 l
-3623 2197 l
-3632 2202 l
-3641 2207 l
-3650 2212 l
-3659 2217 l
-3668 2222 l
-3677 2227 l
-3686 2232 l
-3694 2237 l
-3703 2242 l
-3712 2247 l
-3720 2252 l
-3729 2258 l
-3738 2263 l
-3746 2268 l
-3755 2274 l
-3763 2279 l
-3772 2285 l
-3780 2290 l
-3788 2296 l
-3797 2302 l
-3805 2307 l
-3813 2313 l
-3821 2319 l
-3829 2324 l
-3838 2330 l
-3846 2336 l
-3854 2342 l
-3862 2348 l
-3869 2354 l
-3877 2360 l
-3885 2366 l
-3893 2372 l
-3901 2378 l
-3908 2384 l
-3916 2390 l
-3924 2396 l
-3931 2402 l
-3939 2408 l
-3946 2415 l
-3954 2421 l
-3961 2427 l
-3968 2433 l
-3976 2440 l
-3983 2446 l
-3990 2452 l
-3997 2459 l
-4004 2465 l
-4011 2472 l
-4018 2478 l
-4025 2485 l
-4032 2491 l
-4039 2498 l
-4045 2504 l
-4052 2511 l
-4059 2517 l
-4065 2524 l
-4072 2530 l
-4079 2537 l
-4085 2544 l
-4091 2550 l
-4098 2557 l
-4104 2564 l
-4110 2570 l
-4117 2577 l
-4123 2584 l
-4129 2590 l
-4135 2597 l
-4141 2604 l
-4147 2611 l
-4153 2617 l
-4159 2624 l
-4165 2631 l
-4170 2638 l
-4176 2645 l
-4182 2651 l
-4187 2658 l
-4193 2665 l
-4198 2672 l
-4204 2679 l
-4209 2686 l
-4215 2692 l
-4220 2699 l
-4225 2706 l
-4230 2713 l
-4235 2720 l
-4241 2727 l
-4246 2734 l
-4251 2740 l
-4256 2747 l
-4260 2754 l
-4265 2761 l
-4270 2768 l
-4275 2775 l
-4280 2782 l
-4284 2788 l
-4289 2795 l
-4293 2802 l
-4298 2809 l
-4302 2816 l
-4307 2823 l
-4311 2829 l
-4316 2836 l
-4320 2843 l
-4324 2850 l
-4328 2857 l
-4332 2864 l
-4337 2870 l
-4341 2877 l
-4345 2884 l
-4349 2891 l
-4352 2898 l
-4356 2904 l
-4360 2911 l
-4364 2918 l
-4368 2925 l
-4371 2931 l
-4375 2938 l
-4379 2945 l
-4382 2952 l
-4386 2958 l
-4389 2965 l
-4393 2972 l
-4396 2978 l
-4399 2985 l
-4403 2992 l
-4406 2998 l
-4409 3005 l
-4412 3011 l
-4415 3018 l
-4418 3025 l
-4421 3031 l
-4425 3038 l
-4427 3044 l
-4430 3051 l
-4433 3057 l
-4436 3064 l
-4439 3070 l
-4442 3077 l
-4444 3083 l
-4447 3090 l
-4450 3096 l
-4452 3103 l
-4455 3109 l
-4458 3115 l
-4460 3122 l
-4463 3128 l
-4465 3135 l
-4467 3141 l
-4470 3147 l
-4472 3154 l
-4474 3160 l
-4477 3166 l
-4479 3172 l
-4481 3179 l
-4483 3185 l
-4485 3191 l
-4487 3197 l
-4489 3203 l
-4491 3210 l
-4493 3216 l
-4495 3222 l
-4497 3228 l
-4499 3234 l
-4501 3240 l
-4503 3246 l
-4505 3252 l
-4506 3258 l
-4508 3264 l
-4510 3270 l
-4512 3276 l
-4513 3282 l
-4515 3288 l
-4516 3294 l
-4518 3300 l
-4519 3306 l
-4521 3312 l
-4522 3318 l
-4524 3323 l
-4525 3329 l
-4527 3335 l
-4528 3341 l
-4529 3347 l
-4530 3352 l
-4532 3358 l
-4533 3364 l
-4534 3369 l
-4535 3375 l
-4536 3381 l
-4538 3386 l
-4539 3392 l
-4540 3397 l
-S
-4540 3397 m
-4541 3403 l
-4542 3409 l
-4543 3414 l
-4544 3420 l
-4545 3425 l
-4546 3431 l
-4546 3436 l
-4547 3442 l
-4548 3447 l
-4549 3452 l
-4550 3458 l
-4551 3463 l
-4551 3469 l
-4552 3474 l
-4553 3479 l
-4553 3484 l
-4554 3490 l
-4555 3495 l
-4555 3500 l
-4556 3505 l
-4556 3511 l
-4557 3516 l
-4558 3521 l
-4558 3526 l
-4559 3531 l
-4559 3536 l
-4559 3542 l
-4560 3547 l
-4560 3552 l
-4561 3557 l
-4561 3562 l
-4561 3567 l
-4562 3572 l
-4562 3577 l
-4562 3582 l
-4562 3587 l
-4563 3592 l
-4563 3596 l
-4563 3601 l
-4563 3606 l
-4563 3611 l
-4564 3616 l
-4564 3621 l
-4564 3625 l
-4564 3630 l
-4564 3635 l
-4564 3640 l
-4564 3644 l
-4564 3649 l
-4564 3654 l
-4564 3658 l
-4564 3663 l
-4564 3668 l
-4564 3672 l
-4564 3677 l
-4564 3682 l
-4564 3686 l
-4563 3691 l
-4563 3695 l
-4560 3757 l
-4553 3815 l
-4544 3871 l
-4533 3923 l
-4520 3973 l
-4505 4020 l
-4488 4064 l
-4470 4106 l
-4451 4146 l
-4430 4184 l
-4408 4220 l
-4385 4254 l
-4361 4285 l
-4337 4316 l
-4311 4344 l
-4285 4371 l
-4258 4396 l
-4230 4420 l
-4202 4443 l
-4173 4464 l
-4144 4484 l
-4114 4503 l
-4083 4520 l
-4053 4536 l
-4021 4552 l
-3989 4566 l
-3957 4579 l
-3925 4591 l
-S
-3638 5218 m
-3636 5218 l
-3634 5218 l
-3632 5218 l
-3601 5218 l
-3570 5217 l
-3539 5216 l
-3507 5215 l
-3476 5213 l
-3443 5211 l
-3411 5208 l
-3379 5205 l
-3346 5202 l
-3313 5198 l
-3280 5194 l
-3246 5189 l
-3213 5184 l
-3179 5179 l
-3145 5173 l
-3111 5167 l
-3077 5160 l
-3043 5153 l
-3008 5146 l
-2974 5138 l
-2939 5130 l
-2905 5121 l
-2870 5112 l
-2835 5103 l
-2800 5093 l
-2766 5083 l
-2731 5073 l
-2696 5062 l
-2661 5051 l
-2626 5040 l
-2591 5028 l
-2556 5016 l
-2522 5003 l
-2487 4990 l
-2452 4977 l
-2418 4963 l
-2383 4950 l
-2349 4935 l
-2314 4921 l
-2280 4906 l
-2246 4891 l
-2212 4876 l
-2179 4860 l
-2145 4844 l
-2112 4828 l
-2079 4811 l
-2046 4794 l
-2013 4777 l
-1980 4760 l
-1948 4742 l
-1916 4724 l
-1884 4706 l
-1853 4687 l
-1821 4669 l
-1790 4650 l
-1760 4631 l
-1729 4611 l
-1699 4592 l
-1669 4572 l
-1640 4552 l
-1611 4532 l
-1582 4512 l
-1554 4491 l
-1526 4471 l
-1498 4450 l
-1471 4429 l
-1444 4408 l
-1418 4386 l
-1392 4365 l
-1366 4343 l
-1341 4322 l
-1316 4300 l
-1292 4278 l
-1268 4256 l
-1245 4234 l
-1222 4211 l
-1200 4189 l
-1178 4167 l
-1156 4144 l
-1136 4122 l
-1115 4099 l
-1095 4077 l
-1076 4054 l
-1057 4031 l
-1039 4009 l
-1021 3986 l
-1004 3963 l
-987 3940 l
-971 3918 l
-956 3895 l
-941 3872 l
-926 3850 l
-912 3827 l
-899 3804 l
-886 3782 l
-874 3759 l
-863 3737 l
-852 3714 l
-842 3692 l
-832 3670 l
-823 3648 l
-814 3626 l
-807 3604 l
-799 3582 l
-793 3560 l
-787 3539 l
-781 3517 l
-777 3496 l
-773 3475 l
-769 3454 l
-766 3433 l
-764 3412 l
-763 3391 l
-762 3371 l
-761 3350 l
-762 3330 l
-763 3310 l
-765 3290 l
-767 3270 l
-770 3250 l
-774 3230 l
-779 3210 l
-785 3189 l
-792 3167 l
-802 3140 l
-802 3138 l
-803 3136 l
-804 3134 l
-805 3131 l
-806 3129 l
-807 3126 l
-808 3124 l
-810 3121 l
-811 3118 l
-812 3115 l
-814 3112 l
-815 3108 l
-817 3105 l
-819 3100 l
-820 3096 l
-823 3091 l
-825 3086 l
-828 3080 l
-831 3073 l
-835 3065 l
-840 3055 l
-845 3044 l
-852 3030 l
-862 3011 l
-875 2987 l
-894 2951 l
-896 2948 l
-898 2945 l
-899 2942 l
-901 2938 l
-903 2935 l
-906 2931 l
-908 2927 l
-910 2923 l
-912 2919 l
-915 2915 l
-918 2910 l
-920 2906 l
-923 2901 l
-926 2896 l
-929 2891 l
-933 2885 l
-936 2880 l
-940 2874 l
-944 2868 l
-948 2861 l
-952 2854 l
-956 2847 l
-961 2840 l
-966 2832 l
-972 2823 l
-978 2815 l
-984 2806 l
-990 2796 l
-998 2785 l
-1005 2774 l
-1013 2763 l
-1022 2750 l
-1032 2737 l
-1042 2723 l
-1054 2708 l
-1066 2692 l
-1080 2674 l
-1095 2655 l
-1112 2635 l
-1131 2613 l
-1152 2589 l
-1175 2563 l
-1202 2535 l
-1232 2504 l
-1267 2470 l
-S
-1267 2470 m
-1307 2432 l
-1353 2391 l
-1408 2346 l
-1412 2343 l
-1417 2339 l
-1421 2336 l
-1425 2332 l
-1430 2329 l
-1434 2326 l
-1439 2322 l
-1444 2318 l
-1448 2315 l
-1453 2311 l
-1458 2308 l
-1463 2304 l
-1468 2300 l
-1473 2297 l
-1478 2293 l
-1483 2289 l
-1488 2285 l
-1494 2282 l
-1499 2278 l
-1504 2274 l
-1510 2270 l
-1515 2266 l
-1521 2262 l
-1527 2258 l
-1533 2254 l
-1538 2250 l
-1544 2246 l
-1550 2242 l
-1556 2238 l
-1563 2234 l
-1569 2230 l
-1575 2226 l
-1582 2222 l
-1588 2218 l
-1595 2214 l
-1602 2209 l
-1608 2205 l
-1615 2201 l
-1622 2197 l
-1629 2192 l
-1636 2188 l
-1644 2184 l
-1651 2179 l
-1659 2175 l
-1666 2171 l
-1674 2166 l
-1682 2162 l
-1690 2157 l
-1698 2153 l
-1706 2148 l
-1714 2144 l
-1722 2139 l
-1731 2135 l
-1740 2130 l
-1748 2126 l
-1757 2121 l
-1766 2117 l
-1775 2112 l
-1785 2108 l
-1794 2103 l
-1804 2098 l
-1813 2094 l
-1823 2089 l
-1833 2085 l
-1843 2080 l
-1853 2075 l
-1864 2071 l
-1874 2066 l
-1885 2062 l
-1896 2057 l
-1907 2052 l
-1918 2048 l
-1929 2043 l
-1941 2039 l
-1953 2034 l
-1965 2030 l
-1977 2025 l
-1989 2021 l
-2001 2016 l
-2014 2012 l
-2026 2007 l
-2039 2003 l
-2052 1999 l
-2066 1994 l
-2079 1990 l
-2093 1986 l
-2107 1982 l
-2121 1978 l
-2135 1974 l
-2150 1970 l
-2164 1966 l
-2179 1962 l
-2194 1958 l
-2209 1954 l
-2225 1950 l
-2241 1947 l
-2257 1943 l
-2273 1940 l
-2289 1937 l
-2306 1933 l
-2322 1930 l
-2339 1927 l
-2357 1924 l
-2374 1921 l
-2392 1919 l
-2409 1916 l
-2427 1914 l
-2446 1911 l
-2464 1909 l
-2483 1907 l
-2502 1905 l
-2521 1904 l
-2540 1902 l
-2560 1901 l
-2580 1900 l
-2600 1899 l
-2620 1898 l
-2640 1897 l
-2661 1897 l
-2682 1896 l
-2702 1896 l
-2724 1897 l
-2745 1897 l
-2766 1898 l
-2788 1898 l
-2810 1900 l
-2832 1901 l
-2854 1903 l
-2876 1904 l
-2899 1906 l
-2921 1909 l
-2944 1912 l
-2967 1914 l
-2990 1918 l
-3013 1921 l
-3036 1925 l
-3059 1929 l
-3083 1933 l
-3106 1938 l
-3129 1943 l
-3153 1948 l
-3176 1953 l
-3200 1959 l
-3224 1965 l
-3247 1972 l
-3271 1979 l
-3294 1986 l
-3318 1993 l
-3342 2000 l
-3365 2008 l
-3389 2017 l
-3412 2025 l
-3435 2034 l
-3459 2043 l
-3482 2052 l
-3505 2062 l
-3528 2072 l
-3551 2082 l
-3573 2093 l
-3596 2104 l
-3618 2115 l
-3640 2126 l
-3663 2138 l
-3684 2149 l
-3706 2161 l
-3728 2174 l
-3749 2186 l
-3770 2199 l
-3791 2212 l
-3811 2225 l
-3832 2238 l
-3852 2252 l
-3872 2265 l
-3892 2279 l
-3911 2293 l
-3930 2307 l
-3949 2322 l
-3968 2336 l
-3986 2351 l
-4004 2365 l
-4022 2380 l
-4039 2395 l
-4057 2410 l
-4073 2425 l
-4090 2440 l
-4107 2455 l
-4123 2470 l
-4138 2486 l
-4154 2501 l
-4169 2516 l
-4184 2532 l
-4199 2547 l
-4213 2563 l
-4227 2578 l
-4241 2594 l
-4254 2609 l
-S
-4254 2609 m
-4268 2625 l
-4281 2640 l
-4293 2655 l
-4306 2671 l
-4318 2686 l
-4330 2701 l
-4341 2717 l
-4353 2732 l
-4364 2747 l
-4375 2762 l
-4385 2777 l
-4396 2792 l
-4406 2807 l
-4416 2822 l
-4425 2836 l
-4435 2851 l
-4444 2865 l
-4453 2880 l
-4462 2894 l
-4470 2909 l
-4478 2923 l
-4486 2937 l
-4494 2951 l
-4502 2965 l
-4510 2978 l
-4517 2992 l
-4524 3006 l
-4531 3019 l
-4538 3032 l
-4544 3046 l
-4551 3059 l
-4557 3072 l
-4563 3085 l
-4569 3098 l
-4575 3110 l
-4581 3123 l
-4586 3135 l
-4591 3148 l
-4597 3160 l
-4602 3172 l
-4606 3184 l
-4611 3196 l
-4616 3208 l
-4620 3219 l
-4625 3231 l
-4629 3242 l
-4633 3253 l
-4637 3265 l
-4641 3276 l
-4645 3287 l
-4649 3298 l
-4652 3308 l
-4656 3319 l
-4659 3329 l
-4663 3340 l
-4666 3350 l
-4669 3360 l
-4672 3371 l
-4675 3381 l
-4678 3390 l
-4681 3400 l
-4683 3410 l
-4686 3420 l
-4689 3429 l
-4691 3438 l
-4693 3448 l
-4696 3457 l
-4698 3466 l
-4700 3475 l
-4702 3484 l
-4704 3493 l
-4706 3501 l
-4708 3510 l
-4710 3519 l
-4712 3527 l
-4714 3535 l
-4716 3544 l
-4717 3552 l
-4719 3560 l
-4720 3568 l
-4722 3576 l
-4723 3584 l
-4725 3591 l
-4726 3599 l
-4728 3607 l
-4729 3614 l
-4730 3622 l
-4731 3629 l
-4732 3636 l
-4734 3644 l
-4735 3651 l
-4736 3658 l
-4737 3665 l
-4738 3672 l
-4739 3679 l
-4740 3685 l
-4741 3692 l
-4741 3699 l
-4742 3705 l
-4743 3712 l
-4744 3718 l
-4745 3725 l
-4745 3731 l
-4746 3737 l
-4747 3743 l
-4747 3749 l
-4748 3755 l
-4748 3761 l
-4749 3767 l
-4750 3773 l
-4750 3779 l
-4751 3785 l
-4756 3860 l
-4758 3925 l
-4758 3983 l
-4757 4034 l
-4755 4079 l
-4752 4120 l
-4749 4156 l
-4745 4189 l
-4742 4219 l
-4738 4246 l
-4734 4271 l
-4731 4293 l
-4727 4314 l
-4724 4334 l
-4721 4351 l
-4717 4368 l
-4714 4383 l
-4711 4398 l
-4708 4411 l
-4705 4424 l
-4703 4435 l
-4700 4446 l
-4697 4457 l
-4695 4467 l
-4692 4476 l
-4690 4485 l
-4688 4493 l
-4686 4501 l
-4684 4509 l
-4682 4516 l
-4680 4523 l
-4678 4529 l
-4676 4535 l
-4674 4541 l
-4673 4547 l
-4671 4552 l
-4670 4558 l
-4668 4563 l
-4667 4567 l
-4665 4572 l
-4664 4576 l
-4662 4581 l
-4647 4627 l
-4636 4658 l
-4628 4680 l
-4622 4697 l
-4617 4710 l
-4613 4721 l
-4609 4729 l
-4606 4737 l
-4603 4744 l
-4601 4749 l
-4599 4755 l
-4597 4759 l
-4595 4763 l
-4593 4767 l
-4592 4771 l
-4590 4774 l
-4589 4777 l
-4587 4780 l
-4586 4783 l
-4585 4786 l
-4584 4788 l
-4582 4791 l
-4569 4818 l
-4557 4839 l
-4546 4858 l
-4534 4876 l
-4522 4893 l
-4510 4909 l
-4497 4924 l
-4483 4939 l
-4470 4954 l
-4455 4968 l
-4440 4981 l
-4425 4995 l
-4408 5008 l
-4392 5020 l
-4375 5032 l
-4357 5044 l
-4339 5056 l
-4320 5067 l
-4301 5077 l
-4281 5088 l
-4261 5098 l
-4240 5107 l
-4218 5116 l
-S
-4218 5116 m
-4197 5125 l
-4174 5134 l
-4152 5142 l
-4128 5149 l
-4105 5156 l
-4080 5163 l
-4056 5170 l
-4031 5176 l
-4005 5181 l
-3979 5187 l
-3953 5192 l
-3926 5196 l
-3899 5200 l
-3872 5204 l
-3844 5207 l
-3816 5210 l
-3787 5212 l
-3758 5214 l
-3729 5216 l
-3699 5217 l
-3669 5218 l
-3639 5218 l
-S
-2956 5656 m
-2955 5655 l
-2954 5655 l
-2953 5654 l
-2939 5646 l
-2924 5639 l
-2909 5631 l
-2893 5623 l
-2876 5616 l
-2860 5608 l
-2842 5600 l
-2824 5592 l
-2806 5584 l
-2787 5577 l
-2768 5568 l
-2748 5560 l
-2728 5552 l
-2708 5544 l
-2687 5536 l
-2666 5527 l
-2645 5519 l
-2623 5510 l
-2601 5501 l
-2579 5493 l
-2557 5484 l
-2534 5475 l
-2512 5466 l
-2489 5456 l
-2466 5447 l
-2443 5438 l
-2419 5428 l
-2396 5419 l
-2372 5409 l
-2348 5399 l
-2324 5389 l
-2301 5380 l
-2277 5369 l
-2253 5359 l
-2228 5349 l
-2204 5339 l
-2180 5329 l
-2156 5318 l
-2132 5308 l
-2108 5297 l
-2084 5286 l
-2060 5276 l
-2036 5265 l
-2012 5254 l
-1988 5243 l
-1964 5233 l
-1940 5222 l
-1917 5211 l
-1893 5200 l
-1870 5189 l
-1847 5178 l
-1824 5167 l
-1801 5156 l
-1778 5146 l
-1755 5135 l
-1733 5124 l
-1710 5113 l
-1688 5103 l
-1667 5092 l
-1645 5082 l
-1623 5072 l
-1602 5061 l
-1581 5051 l
-1561 5041 l
-1540 5032 l
-1520 5022 l
-1500 5012 l
-1481 5003 l
-1461 4994 l
-1442 4985 l
-1424 4977 l
-1406 4969 l
-1388 4961 l
-1370 4953 l
-1353 4946 l
-1336 4939 l
-1319 4932 l
-1303 4926 l
-1288 4920 l
-1273 4915 l
-1258 4910 l
-1244 4906 l
-1230 4902 l
-1216 4899 l
-1204 4897 l
-1191 4895 l
-1180 4894 l
-1169 4893 l
-1158 4894 l
-1148 4895 l
-1139 4897 l
-1131 4900 l
-1123 4904 l
-1116 4908 l
-1110 4914 l
-1105 4921 l
-1100 4930 l
-1097 4939 l
-1094 4950 l
-1093 4962 l
-1093 4975 l
-1094 4990 l
-1097 5007 l
-1101 5025 l
-1107 5044 l
-1114 5066 l
-1123 5089 l
-1134 5113 l
-1148 5140 l
-1163 5168 l
-1181 5198 l
-1202 5230 l
-1225 5263 l
-1251 5298 l
-1280 5334 l
-1312 5371 l
-1348 5410 l
-1387 5449 l
-1430 5488 l
-1476 5528 l
-1525 5568 l
-1578 5607 l
-1633 5645 l
-1692 5682 l
-1753 5717 l
-1816 5750 l
-1881 5780 l
-1948 5808 l
-2015 5834 l
-2082 5856 l
-2149 5875 l
-2215 5892 l
-2280 5905 l
-2343 5915 l
-2404 5923 l
-2463 5928 l
-2519 5931 l
-2572 5932 l
-2623 5931 l
-2670 5929 l
-2714 5925 l
-2755 5920 l
-2794 5914 l
-2829 5907 l
-2861 5900 l
-2890 5892 l
-2917 5883 l
-2941 5875 l
-2962 5866 l
-2981 5857 l
-2998 5847 l
-3013 5838 l
-3025 5829 l
-3036 5820 l
-3044 5811 l
-3051 5802 l
-3056 5793 l
-3060 5784 l
-3062 5775 l
-3063 5767 l
-3062 5758 l
-3060 5750 l
-3057 5742 l
-3052 5734 l
-3047 5726 l
-3040 5718 l
-3033 5710 l
-3024 5702 l
-3015 5694 l
-3005 5686 l
-2994 5679 l
-2982 5671 l
-2969 5663 l
-2956 5656 l
-S
-0 g
-3678 4650 m
-3671 4680 l
-S
-3420 4667 m
-3410 4696 l
-S
-2885 4592 m
-2874 4620 l
-S
-2621 4508 m
-2609 4536 l
-S
-2122 4260 m
-2108 4288 l
-S
-1898 4101 m
-1884 4128 l
-S
-1534 3722 m
-1518 3747 l
-S
-1407 3502 m
-1390 3527 l
-S
-1321 2997 m
-1300 3019 l
-S
-1407 2705 m
-1383 2725 l
-S
-2128 2089 m
-2098 2095 l
-S
-2959 1989 m
-2930 1980 l
-S
-4430 3050 m
-4446 3076 l
-S
-4564 3628 m
-4571 3657 l
-S
-4350 4300 m
-4348 4331 l
-S
-4152 4479 m
-4147 4509 l
-S
-3198 3069 m
-3218 3046 l
-S
-3284 3127 m
-3305 3105 l
-S
-3366 3191 m
-3387 3169 l
-S
-3444 3259 m
-3466 3238 l
-S
-3517 3332 m
-3540 3312 l
-S
-3649 3492 m
-3673 3473 l
-S
-3707 3578 m
-3732 3560 l
-S
-3760 3668 m
-3785 3650 l
-S
-3807 3761 m
-3832 3744 l
-S
-3847 3857 m
-3873 3841 l
-S
-3907 4058 m
-3935 4044 l
-S
-3927 4162 m
-3955 4149 l
-S
-3939 4267 m
-3967 4255 l
-S
-3943 4374 m
-3971 4364 l
-S
-3938 4482 m
-3967 4473 l
-S
-3902 4699 m
-3932 4692 l
-S
-3870 4807 m
-3900 4802 l
-S
-3828 4914 m
-3858 4910 l
-S
-3776 5018 m
-3806 5016 l
-S
-3713 5120 m
-3743 5119 l
-S
-3553 5311 m
-3583 5314 l
-S
-3456 5398 m
-3486 5402 l
-S
-3348 5477 m
-3378 5484 l
-S
-3228 5548 m
-3257 5557 l
-S
-3097 5608 m
-3126 5619 l
-S
-2805 5690 m
-2831 5706 l
-S
-2647 5708 m
-2670 5727 l
-S
-2482 5709 m
-2503 5731 l
-S
-2313 5691 m
-2330 5716 l
-S
-2143 5654 m
-2156 5681 l
-S
-3925 4591 m
-3873 4608 l
-3821 4622 l
-3768 4635 l
-3715 4645 l
-3660 4653 l
-3606 4659 l
-3550 4664 l
-3495 4666 l
-3438 4667 l
-3382 4666 l
-3325 4663 l
-3268 4659 l
-3211 4653 l
-3154 4646 l
-S
-3154 4646 m
-3096 4637 l
-3039 4626 l
-2981 4615 l
-2924 4601 l
-2866 4587 l
-2809 4571 l
-2752 4553 l
-2696 4534 l
-2639 4514 l
-2583 4493 l
-2528 4471 l
-2473 4447 l
-2418 4422 l
-2364 4396 l
-S
-2364 4396 m
-2311 4369 l
-2258 4341 l
-2206 4312 l
-2155 4281 l
-2105 4250 l
-2056 4217 l
-2007 4184 l
-1960 4149 l
-1914 4114 l
-1869 4077 l
-1825 4040 l
-1782 4001 l
-1740 3962 l
-1700 3922 l
-S
-1700 3922 m
-1662 3880 l
-1625 3838 l
-1589 3795 l
-1556 3751 l
-1524 3707 l
-1493 3661 l
-1465 3614 l
-1439 3567 l
-1415 3518 l
-1393 3469 l
-1374 3418 l
-1357 3367 l
-1342 3315 l
-1331 3261 l
-S
-1331 3261 m
-1330 3257 l
-1330 3253 l
-1329 3249 l
-1328 3246 l
-1328 3242 l
-1327 3238 l
-1326 3234 l
-1326 3230 l
-1325 3226 l
-1325 3222 l
-1324 3218 l
-1324 3214 l
-1323 3210 l
-1323 3207 l
-1322 3203 l
-1322 3199 l
-1321 3195 l
-1321 3191 l
-1320 3187 l
-1320 3183 l
-1320 3179 l
-1319 3175 l
-1319 3171 l
-1318 3167 l
-1318 3163 l
-1318 3159 l
-1318 3155 l
-1317 3151 l
-1317 3147 l
-1317 3143 l
-1317 3139 l
-1316 3135 l
-1316 3131 l
-1316 3127 l
-1316 3123 l
-1316 3119 l
-1316 3114 l
-1316 3110 l
-1316 3106 l
-1316 3102 l
-1316 3098 l
-1316 3094 l
-1316 3090 l
-1316 3086 l
-1316 3082 l
-1316 3078 l
-1316 3073 l
-1316 3069 l
-1316 3065 l
-1316 3061 l
-1316 3057 l
-1317 3053 l
-1317 3049 l
-1317 3044 l
-1317 3040 l
-1318 3036 l
-1318 3032 l
-1318 3028 l
-1319 3023 l
-1319 3019 l
-1319 3015 l
-1320 3011 l
-1320 3007 l
-1321 3002 l
-1321 2998 l
-1322 2994 l
-1322 2990 l
-1323 2985 l
-1323 2981 l
-1324 2977 l
-1324 2972 l
-1325 2968 l
-1326 2964 l
-1326 2960 l
-1327 2955 l
-1328 2951 l
-1328 2947 l
-1329 2942 l
-1330 2938 l
-1331 2934 l
-1332 2929 l
-1332 2925 l
-1333 2921 l
-1334 2916 l
-1335 2912 l
-1336 2908 l
-1337 2903 l
-1338 2899 l
-1339 2894 l
-1340 2890 l
-1341 2886 l
-1342 2881 l
-1343 2877 l
-1345 2872 l
-1346 2868 l
-1347 2863 l
-1348 2859 l
-1349 2854 l
-1351 2850 l
-1352 2845 l
-1353 2841 l
-1355 2837 l
-1356 2832 l
-1358 2828 l
-1359 2823 l
-1360 2819 l
-1362 2814 l
-1364 2809 l
-1365 2805 l
-1367 2800 l
-1368 2796 l
-1370 2791 l
-1372 2787 l
-1373 2782 l
-1375 2778 l
-1377 2773 l
-1379 2768 l
-1381 2764 l
-1382 2759 l
-1384 2755 l
-1386 2750 l
-1388 2745 l
-1390 2741 l
-1392 2736 l
-1394 2731 l
-1396 2727 l
-1399 2722 l
-1401 2717 l
-1403 2713 l
-1405 2708 l
-1407 2703 l
-1410 2699 l
-1412 2694 l
-1414 2689 l
-1417 2685 l
-1419 2680 l
-1422 2675 l
-1424 2671 l
-1427 2666 l
-1429 2661 l
-1432 2656 l
-1435 2652 l
-1437 2647 l
-1440 2642 l
-1443 2637 l
-1446 2633 l
-1448 2628 l
-1451 2623 l
-1454 2618 l
-1457 2613 l
-1460 2609 l
-1463 2604 l
-1466 2599 l
-1469 2594 l
-1473 2589 l
-1476 2584 l
-1479 2580 l
-1482 2575 l
-1486 2570 l
-1489 2565 l
-1492 2560 l
-1496 2555 l
-1499 2551 l
-1503 2546 l
-1506 2541 l
-1510 2536 l
-1514 2531 l
-1518 2526 l
-1521 2521 l
-1525 2516 l
-1529 2511 l
-1533 2507 l
-1537 2502 l
-1541 2497 l
-1545 2492 l
-1549 2487 l
-1553 2482 l
-1557 2477 l
-1562 2472 l
-1566 2467 l
-1570 2462 l
-1575 2457 l
-1579 2452 l
-1584 2448 l
-1588 2443 l
-1593 2438 l
-1597 2433 l
-1602 2428 l
-1607 2423 l
-1612 2418 l
-1617 2413 l
-1622 2408 l
-1627 2403 l
-1632 2398 l
-1637 2393 l
-1642 2388 l
-S
-1642 2388 m
-1647 2383 l
-1652 2378 l
-1658 2374 l
-1663 2369 l
-1669 2364 l
-1674 2359 l
-1680 2354 l
-1685 2349 l
-1691 2344 l
-1697 2339 l
-1703 2334 l
-1709 2329 l
-1715 2324 l
-1721 2320 l
-1727 2315 l
-1733 2310 l
-1739 2305 l
-1745 2300 l
-1752 2295 l
-1758 2290 l
-1765 2286 l
-1771 2281 l
-1778 2276 l
-1784 2271 l
-1791 2266 l
-1798 2261 l
-1805 2257 l
-1812 2252 l
-1819 2247 l
-1826 2242 l
-1833 2238 l
-1841 2233 l
-1848 2228 l
-1855 2224 l
-1863 2219 l
-1870 2214 l
-1878 2210 l
-1886 2205 l
-1893 2200 l
-1901 2196 l
-1909 2191 l
-1917 2187 l
-1925 2182 l
-1934 2178 l
-1942 2173 l
-1950 2169 l
-1959 2164 l
-1967 2160 l
-1976 2156 l
-1984 2151 l
-1993 2147 l
-2002 2143 l
-2011 2138 l
-2020 2134 l
-2029 2130 l
-2038 2126 l
-2047 2122 l
-2057 2118 l
-2066 2113 l
-2076 2109 l
-2085 2105 l
-2095 2101 l
-2105 2098 l
-2115 2094 l
-2124 2090 l
-2135 2086 l
-2145 2082 l
-2155 2079 l
-2165 2075 l
-2176 2071 l
-2186 2068 l
-2197 2064 l
-2207 2061 l
-2218 2057 l
-2229 2054 l
-2240 2051 l
-2251 2047 l
-2262 2044 l
-2273 2041 l
-2284 2038 l
-2296 2035 l
-2307 2032 l
-2318 2029 l
-2330 2026 l
-2342 2023 l
-2354 2021 l
-2365 2018 l
-2377 2015 l
-2390 2013 l
-2402 2010 l
-2414 2008 l
-2426 2006 l
-2439 2004 l
-2451 2001 l
-2464 1999 l
-2476 1997 l
-2489 1995 l
-2502 1994 l
-2515 1992 l
-2528 1990 l
-2541 1989 l
-2554 1987 l
-2567 1986 l
-2580 1985 l
-2594 1983 l
-2607 1982 l
-2621 1981 l
-2634 1980 l
-2648 1980 l
-2662 1979 l
-2676 1978 l
-2689 1978 l
-2703 1978 l
-2717 1977 l
-2731 1977 l
-2746 1977 l
-2760 1977 l
-2774 1977 l
-2788 1977 l
-2803 1978 l
-2817 1978 l
-2832 1979 l
-2846 1980 l
-2861 1981 l
-2875 1982 l
-2890 1983 l
-2905 1984 l
-2920 1985 l
-2935 1987 l
-2949 1988 l
-2964 1990 l
-2979 1992 l
-2994 1994 l
-3009 1996 l
-3024 1998 l
-3039 2000 l
-3054 2003 l
-3069 2006 l
-3084 2008 l
-3100 2011 l
-3115 2014 l
-3130 2017 l
-3145 2021 l
-3160 2024 l
-3175 2028 l
-3191 2031 l
-3206 2035 l
-3221 2039 l
-3236 2043 l
-3251 2047 l
-3266 2052 l
-3281 2056 l
-3297 2061 l
-3312 2066 l
-3327 2070 l
-3342 2075 l
-3357 2081 l
-3372 2086 l
-3387 2091 l
-3402 2097 l
-3416 2102 l
-3431 2108 l
-3446 2114 l
-3461 2120 l
-3476 2126 l
-3490 2133 l
-3505 2139 l
-3519 2146 l
-3534 2152 l
-3548 2159 l
-3563 2166 l
-3577 2173 l
-3591 2180 l
-3605 2187 l
-3619 2195 l
-3633 2202 l
-3647 2210 l
-3661 2218 l
-3675 2225 l
-3689 2233 l
-3702 2241 l
-3716 2250 l
-3729 2258 l
-3742 2266 l
-3756 2275 l
-3769 2283 l
-3782 2292 l
-3795 2300 l
-3808 2309 l
-3820 2318 l
-3833 2327 l
-3846 2336 l
-3858 2345 l
-3870 2354 l
-3883 2364 l
-3895 2373 l
-S
-3895 2373 m
-3907 2382 l
-3919 2392 l
-3930 2401 l
-3942 2411 l
-3954 2421 l
-3965 2431 l
-3976 2440 l
-3988 2450 l
-3999 2460 l
-4010 2470 l
-4020 2480 l
-4031 2490 l
-4042 2500 l
-4052 2511 l
-4063 2521 l
-4073 2531 l
-4083 2541 l
-4093 2552 l
-4103 2562 l
-4113 2573 l
-4122 2583 l
-4132 2593 l
-4141 2604 l
-4150 2614 l
-4159 2625 l
-4168 2636 l
-4177 2646 l
-4186 2657 l
-4195 2667 l
-4203 2678 l
-4212 2689 l
-4220 2699 l
-4228 2710 l
-4236 2721 l
-4244 2731 l
-4252 2742 l
-4259 2753 l
-4267 2763 l
-4274 2774 l
-4282 2785 l
-4289 2795 l
-4296 2806 l
-4303 2817 l
-4310 2827 l
-4317 2838 l
-4323 2848 l
-4330 2859 l
-4336 2870 l
-4342 2880 l
-4349 2891 l
-4355 2901 l
-4361 2912 l
-4366 2922 l
-4372 2933 l
-4378 2943 l
-4383 2954 l
-4389 2964 l
-4394 2975 l
-4399 2985 l
-4404 2995 l
-4409 3006 l
-4414 3016 l
-4419 3026 l
-4424 3036 l
-4428 3046 l
-4433 3057 l
-4437 3067 l
-4442 3077 l
-4446 3087 l
-4450 3097 l
-4454 3107 l
-4458 3117 l
-4462 3127 l
-4466 3137 l
-4470 3147 l
-4473 3156 l
-4477 3166 l
-4480 3176 l
-4483 3186 l
-4487 3195 l
-4490 3205 l
-4493 3214 l
-4496 3224 l
-4499 3233 l
-4502 3243 l
-4505 3252 l
-4507 3262 l
-4510 3271 l
-4513 3280 l
-4515 3289 l
-4518 3299 l
-4520 3308 l
-4522 3317 l
-4524 3326 l
-4527 3335 l
-4529 3344 l
-4531 3353 l
-4533 3362 l
-4534 3371 l
-4536 3379 l
-4538 3388 l
-4540 3397 l
-4541 3406 l
-4543 3414 l
-4544 3423 l
-4546 3431 l
-4547 3440 l
-4548 3448 l
-4550 3457 l
-4551 3465 l
-4552 3473 l
-4553 3482 l
-4554 3490 l
-4555 3498 l
-4556 3506 l
-4557 3514 l
-4558 3522 l
-4558 3530 l
-4559 3538 l
-4560 3546 l
-4560 3554 l
-4561 3562 l
-4561 3570 l
-4562 3577 l
-4562 3585 l
-4563 3593 l
-4563 3600 l
-4563 3608 l
-4564 3615 l
-4564 3623 l
-4564 3630 l
-4564 3638 l
-4564 3645 l
-4564 3652 l
-4564 3660 l
-4564 3667 l
-4564 3674 l
-4564 3681 l
-4564 3688 l
-4563 3695 l
-4563 3702 l
-4563 3709 l
-4562 3716 l
-4562 3723 l
-4562 3730 l
-4561 3737 l
-4561 3743 l
-4560 3750 l
-4560 3757 l
-4559 3763 l
-4558 3770 l
-4558 3777 l
-4557 3783 l
-4556 3790 l
-4556 3796 l
-4555 3803 l
-4554 3809 l
-4553 3815 l
-4552 3822 l
-4551 3828 l
-4550 3834 l
-4549 3840 l
-4548 3846 l
-4547 3853 l
-4546 3859 l
-4545 3865 l
-4544 3871 l
-4543 3877 l
-4542 3883 l
-4541 3888 l
-4539 3894 l
-4538 3900 l
-4537 3906 l
-4536 3912 l
-4534 3917 l
-4533 3923 l
-4532 3929 l
-4530 3934 l
-4529 3940 l
-4527 3946 l
-4526 3951 l
-4524 3957 l
-4523 3962 l
-4521 3967 l
-4520 3973 l
-4518 3978 l
-4517 3983 l
-4515 3989 l
-4513 3994 l
-4512 3999 l
-4510 4004 l
-4508 4010 l
-4506 4015 l
-4505 4020 l
-4503 4025 l
-4501 4030 l
-S
-4501 4030 m
-4499 4035 l
-4498 4040 l
-4496 4045 l
-4494 4050 l
-4492 4055 l
-4490 4059 l
-4488 4064 l
-4486 4069 l
-4484 4074 l
-4482 4079 l
-4480 4083 l
-4478 4088 l
-4476 4093 l
-4474 4097 l
-4472 4102 l
-4470 4106 l
-4468 4111 l
-4466 4116 l
-4464 4120 l
-4461 4124 l
-4459 4129 l
-4457 4133 l
-4455 4138 l
-4453 4142 l
-4451 4146 l
-4448 4151 l
-4446 4155 l
-4444 4159 l
-4441 4163 l
-4439 4168 l
-4437 4172 l
-4435 4176 l
-4432 4180 l
-4430 4184 l
-4427 4188 l
-4425 4192 l
-4423 4196 l
-4420 4200 l
-4418 4204 l
-4415 4208 l
-4413 4212 l
-4411 4216 l
-4408 4220 l
-4406 4224 l
-4403 4227 l
-4401 4231 l
-4398 4235 l
-4395 4239 l
-4393 4242 l
-4390 4246 l
-4388 4250 l
-4385 4254 l
-4383 4257 l
-4380 4261 l
-4377 4264 l
-4375 4268 l
-4372 4271 l
-4369 4275 l
-4367 4278 l
-4364 4282 l
-4361 4285 l
-4359 4289 l
-4356 4292 l
-4353 4296 l
-4351 4299 l
-4348 4302 l
-4345 4306 l
-4342 4309 l
-4340 4312 l
-4337 4316 l
-4334 4319 l
-4331 4322 l
-4328 4325 l
-4326 4328 l
-4323 4332 l
-4320 4335 l
-4317 4338 l
-4314 4341 l
-4311 4344 l
-4308 4347 l
-4305 4350 l
-4303 4353 l
-4300 4356 l
-4297 4359 l
-4294 4362 l
-4291 4365 l
-4288 4368 l
-4285 4371 l
-4282 4374 l
-4279 4377 l
-4276 4380 l
-4273 4382 l
-4270 4385 l
-4267 4388 l
-4264 4391 l
-4261 4394 l
-4258 4396 l
-4255 4399 l
-4252 4402 l
-4249 4405 l
-4246 4407 l
-4243 4410 l
-4240 4412 l
-4237 4415 l
-4234 4418 l
-4230 4420 l
-4227 4423 l
-4224 4425 l
-4221 4428 l
-4218 4430 l
-4215 4433 l
-4212 4435 l
-4208 4438 l
-4205 4440 l
-4202 4443 l
-4199 4445 l
-4196 4448 l
-4193 4450 l
-4189 4452 l
-4186 4455 l
-4183 4457 l
-4180 4459 l
-4177 4462 l
-4173 4464 l
-4170 4466 l
-4167 4469 l
-4164 4471 l
-4160 4473 l
-4157 4475 l
-4154 4477 l
-4150 4480 l
-4147 4482 l
-4144 4484 l
-4141 4486 l
-4137 4488 l
-4134 4490 l
-4131 4492 l
-4127 4494 l
-4124 4496 l
-4121 4499 l
-4117 4501 l
-4114 4503 l
-4111 4505 l
-4107 4507 l
-4104 4509 l
-4100 4510 l
-4097 4512 l
-4094 4514 l
-4090 4516 l
-4087 4518 l
-4083 4520 l
-4080 4522 l
-4077 4524 l
-4073 4526 l
-4025 4550 l
-3975 4572 l
-3972 4573 l
-3968 4575 l
-3964 4576 l
-3961 4577 l
-3957 4579 l
-3954 4580 l
-3950 4582 l
-3946 4583 l
-3943 4584 l
-3939 4586 l
-3936 4587 l
-3932 4588 l
-3928 4590 l
-3928 4590 l
-3928 4590 l
-3927 4590 l
-3927 4590 l
-3927 4590 l
-3927 4590 l
-3926 4590 l
-3926 4590 l
-3926 4590 l
-3926 4590 l
-3925 4591 l
-3925 4591 l
-3925 4591 l
-S
-3109 3016 m
-3148 3038 l
-3186 3061 l
-3223 3085 l
-3260 3110 l
-3296 3136 l
-3331 3163 l
-3366 3191 l
-3400 3219 l
-3433 3249 l
-3465 3280 l
-3497 3311 l
-3527 3343 l
-3557 3376 l
-3586 3410 l
-S
-3586 3410 m
-3613 3445 l
-3640 3480 l
-3666 3516 l
-3691 3553 l
-3715 3590 l
-3738 3629 l
-3760 3668 l
-3781 3707 l
-3800 3747 l
-3819 3788 l
-3836 3829 l
-3852 3871 l
-3867 3913 l
-3881 3956 l
-S
-3881 3956 m
-3893 3999 l
-3904 4043 l
-3914 4087 l
-3922 4132 l
-3929 4177 l
-3935 4222 l
-3939 4267 l
-3941 4313 l
-3943 4359 l
-3942 4405 l
-3940 4451 l
-3937 4498 l
-3931 4544 l
-3925 4591 l
-S
-3925 4591 m
-3916 4637 l
-3906 4684 l
-3894 4730 l
-3880 4776 l
-3865 4823 l
-3847 4868 l
-3828 4914 l
-3807 4959 l
-3784 5004 l
-3759 5048 l
-3732 5091 l
-3703 5134 l
-3672 5177 l
-3639 5218 l
-S
-3639 5218 m
-3603 5258 l
-3566 5298 l
-3527 5336 l
-3485 5374 l
-3442 5410 l
-3396 5444 l
-3348 5477 l
-3298 5509 l
-3246 5538 l
-3192 5566 l
-3136 5592 l
-3078 5616 l
-3018 5637 l
-2956 5656 l
-S
-2956 5656 m
-2952 5657 l
-2947 5658 l
-2943 5660 l
-2938 5661 l
-2934 5662 l
-2929 5663 l
-2924 5664 l
-2920 5665 l
-2915 5667 l
-2911 5668 l
-2906 5669 l
-2902 5670 l
-2897 5671 l
-2892 5672 l
-2888 5673 l
-2883 5674 l
-2879 5675 l
-2874 5676 l
-2869 5677 l
-2865 5678 l
-2860 5679 l
-2855 5680 l
-2851 5681 l
-2846 5682 l
-2841 5683 l
-2837 5684 l
-2832 5685 l
-2827 5686 l
-2823 5687 l
-2818 5687 l
-2813 5688 l
-2808 5689 l
-2804 5690 l
-2799 5691 l
-2794 5691 l
-2789 5692 l
-2785 5693 l
-2780 5694 l
-2775 5694 l
-2770 5695 l
-2765 5696 l
-2761 5697 l
-2756 5697 l
-2751 5698 l
-2746 5698 l
-2741 5699 l
-2737 5700 l
-2732 5700 l
-2727 5701 l
-2722 5701 l
-2717 5702 l
-2712 5702 l
-2707 5703 l
-2702 5703 l
-2698 5704 l
-2693 5704 l
-2688 5705 l
-2683 5705 l
-2678 5706 l
-2673 5706 l
-2668 5706 l
-2663 5707 l
-2658 5707 l
-2653 5707 l
-2648 5708 l
-2643 5708 l
-2638 5708 l
-2633 5709 l
-2628 5709 l
-2623 5709 l
-2618 5709 l
-2613 5709 l
-2608 5710 l
-2603 5710 l
-2598 5710 l
-2593 5710 l
-2588 5710 l
-2583 5710 l
-2578 5710 l
-2573 5710 l
-2568 5710 l
-2563 5711 l
-2558 5711 l
-2553 5711 l
-2548 5711 l
-2543 5710 l
-2538 5710 l
-2533 5710 l
-2528 5710 l
-2522 5710 l
-2517 5710 l
-2512 5710 l
-2507 5710 l
-2502 5710 l
-2497 5709 l
-2492 5709 l
-2487 5709 l
-2482 5709 l
-2476 5708 l
-2471 5708 l
-2466 5708 l
-2461 5708 l
-2456 5707 l
-2451 5707 l
-2446 5707 l
-2441 5706 l
-2435 5706 l
-2430 5705 l
-2425 5705 l
-2420 5704 l
-2415 5704 l
-2410 5703 l
-2404 5703 l
-2399 5702 l
-2394 5702 l
-2389 5701 l
-2384 5701 l
-2379 5700 l
-2373 5700 l
-2368 5699 l
-2363 5698 l
-2358 5698 l
-2353 5697 l
-2347 5696 l
-2342 5695 l
-2337 5695 l
-2332 5694 l
-2327 5693 l
-2321 5692 l
-2316 5692 l
-2311 5691 l
-2306 5690 l
-2301 5689 l
-2295 5688 l
-2290 5687 l
-2285 5686 l
-2280 5685 l
-2275 5684 l
-2269 5683 l
-2264 5682 l
-2259 5681 l
-2254 5680 l
-2249 5679 l
-2243 5678 l
-2238 5677 l
-2233 5676 l
-2228 5675 l
-2223 5674 l
-2217 5673 l
-2212 5671 l
-2207 5670 l
-2202 5669 l
-2197 5668 l
-2191 5666 l
-2186 5665 l
-2181 5664 l
-2176 5663 l
-2171 5661 l
-2165 5660 l
-2160 5658 l
-2155 5657 l
-2150 5656 l
-2145 5654 l
-2139 5653 l
-2134 5651 l
-2129 5650 l
-2124 5648 l
-2119 5647 l
-2113 5645 l
-2108 5644 l
-2103 5642 l
-2098 5641 l
-2093 5639 l
-2088 5637 l
-2082 5636 l
-2077 5634 l
-2072 5632 l
-2067 5631 l
-2062 5629 l
-2057 5627 l
-2052 5625 l
-2046 5624 l
-2041 5622 l
-2036 5620 l
-2031 5618 l
-2026 5616 l
-2021 5614 l
-2016 5612 l
-2011 5610 l
-2005 5609 l
-2000 5607 l
-1995 5605 l
-1990 5603 l
-1985 5601 l
-1980 5599 l
-1975 5597 l
-S
-0 0 1 rg
-4756 3875 m
-4759 3878 l
-4759 3882 l
-4759 3887 l
-4759 3891 l
-4759 3896 l
-4759 3900 l
-4759 3905 l
-4759 3909 l
-S
-4759 3909 m
-4759 3913 l
-4759 3918 l
-4759 3922 l
-4759 3927 l
-4759 3931 l
-4759 3936 l
-4759 3940 l
-4759 3945 l
-4759 3949 l
-S
-4759 3949 m
-4759 3954 l
-4759 3958 l
-4759 3963 l
-4759 3967 l
-4759 3972 l
-4759 3976 l
-4759 3981 l
-4759 3985 l
-4759 3989 l
-S
-4759 3989 m
-4759 3994 l
-4759 3998 l
-4759 4003 l
-4759 4007 l
-4759 4012 l
-4759 4016 l
-4759 4021 l
-4759 4025 l
-4759 4030 l
-S
-4756 4041 m
-4759 4039 l
-4759 4034 l
-4759 4030 l
-S
-4716 3545 m
-4718 3547 l
-S
-4718 3547 m
-4718 3551 l
-4718 3556 l
-4718 3560 l
-4718 3565 l
-4721 3567 l
-4723 3569 l
-4723 3574 l
-4723 3578 l
-4723 3583 l
-4723 3587 l
-S
-4723 3587 m
-4723 3592 l
-4725 3594 l
-4727 3596 l
-4727 3601 l
-4727 3605 l
-4727 3610 l
-4727 3614 l
-4730 3616 l
-4732 3619 l
-4732 3623 l
-4732 3627 l
-S
-4732 3627 m
-4732 3632 l
-4732 3636 l
-4732 3641 l
-4732 3645 l
-4734 3648 l
-4736 3650 l
-4736 3654 l
-4736 3659 l
-4736 3663 l
-4736 3668 l
-S
-4736 3668 m
-4736 3672 l
-4736 3677 l
-4738 3679 l
-4741 3681 l
-4741 3686 l
-4741 3690 l
-4741 3694 l
-4741 3699 l
-4741 3703 l
-4741 3708 l
-S
-4741 3708 m
-4743 3710 l
-4745 3712 l
-4745 3717 l
-4745 3721 l
-4745 3726 l
-4745 3730 l
-4745 3735 l
-4745 3739 l
-4745 3744 l
-4745 3748 l
-S
-4745 3748 m
-4747 3750 l
-4750 3753 l
-4750 3757 l
-4750 3762 l
-4750 3766 l
-4750 3770 l
-4750 3775 l
-4750 3779 l
-4750 3784 l
-4750 3788 l
-S
-4750 3788 m
-4750 3793 l
-4750 3797 l
-4752 3800 l
-4754 3802 l
-4754 3806 l
-4754 3811 l
-4754 3815 l
-4754 3820 l
-4754 3824 l
-4754 3829 l
-S
-4754 3829 m
-4754 3833 l
-4754 3838 l
-4754 3842 l
-4754 3846 l
-4754 3851 l
-4754 3855 l
-4754 3860 l
-4754 3864 l
-4754 3869 l
-S
-4754 3869 m
-4754 3873 l
-4756 3875 l
-S
-4754 4070 m
-4754 4065 l
-4754 4061 l
-4754 4056 l
-4754 4052 l
-4754 4048 l
-4754 4043 l
-4756 4041 l
-S
-4754 4070 m
-4754 4074 l
-4754 4079 l
-4754 4083 l
-4754 4088 l
-4754 4092 l
-4754 4097 l
-4754 4101 l
-4754 4106 l
-4754 4110 l
-S
-4754 4110 m
-4754 4115 l
-4752 4117 l
-4750 4119 l
-4750 4124 l
-4750 4128 l
-4750 4132 l
-4750 4137 l
-4750 4141 l
-4750 4146 l
-4750 4150 l
-S
-4750 4150 m
-4750 4155 l
-4750 4159 l
-4750 4164 l
-4750 4168 l
-4747 4170 l
-4745 4173 l
-4745 4177 l
-4745 4182 l
-4745 4186 l
-4745 4191 l
-S
-4745 4191 m
-4745 4195 l
-4745 4199 l
-4745 4204 l
-4745 4208 l
-4743 4211 l
-4741 4213 l
-4741 4217 l
-4741 4222 l
-4741 4226 l
-4741 4231 l
-S
-4741 4231 m
-4741 4235 l
-4741 4240 l
-4738 4242 l
-4736 4244 l
-4736 4249 l
-4736 4253 l
-4736 4258 l
-4736 4262 l
-4736 4267 l
-4736 4271 l
-S
-4736 4271 m
-4734 4273 l
-4732 4275 l
-4732 4280 l
-4732 4284 l
-4732 4289 l
-4732 4293 l
-4732 4298 l
-4730 4300 l
-4727 4302 l
-4727 4307 l
-4727 4311 l
-S
-4727 4311 m
-4727 4316 l
-4727 4320 l
-4727 4325 l
-4725 4327 l
-4723 4329 l
-4723 4334 l
-4723 4338 l
-4723 4342 l
-4723 4347 l
-4721 4349 l
-4718 4351 l
-S
-4716 4372 m
-4718 4369 l
-4718 4365 l
-4718 4360 l
-4718 4356 l
-4718 4351 l
-S
-4676 3384 m
-4678 3386 l
-S
-4678 3386 m
-4678 3391 l
-4678 3395 l
-4680 3397 l
-4683 3400 l
-4683 3404 l
-4683 3408 l
-4683 3413 l
-4685 3415 l
-4687 3417 l
-4687 3422 l
-4687 3426 l
-S
-4687 3426 m
-4687 3431 l
-4689 3433 l
-4692 3435 l
-4692 3440 l
-4692 3444 l
-4692 3449 l
-4694 3451 l
-4696 3453 l
-4696 3458 l
-4696 3462 l
-4696 3467 l
-S
-4696 3467 m
-4698 3469 l
-4701 3471 l
-4701 3476 l
-4701 3480 l
-4701 3484 l
-4703 3487 l
-4705 3489 l
-4705 3493 l
-4705 3498 l
-4705 3502 l
-4707 3505 l
-4709 3507 l
-S
-4709 3507 m
-4709 3511 l
-4709 3516 l
-4709 3520 l
-4709 3525 l
-4712 3527 l
-4714 3529 l
-4714 3534 l
-4714 3538 l
-4714 3543 l
-4716 3545 l
-S
-4714 4392 m
-4714 4387 l
-4714 4383 l
-4714 4378 l
-4714 4374 l
-4716 4372 l
-S
-4714 4392 m
-4712 4394 l
-4709 4396 l
-4709 4401 l
-4709 4405 l
-4709 4410 l
-4709 4414 l
-4707 4416 l
-4705 4418 l
-4705 4423 l
-4705 4427 l
-4705 4432 l
-S
-4705 4432 m
-4703 4434 l
-4701 4436 l
-4701 4441 l
-4701 4445 l
-4701 4450 l
-4698 4452 l
-4696 4454 l
-4696 4459 l
-4696 4463 l
-4696 4468 l
-4694 4470 l
-4692 4472 l
-S
-4692 4472 m
-4692 4477 l
-4692 4481 l
-4692 4486 l
-4689 4488 l
-4687 4490 l
-4687 4494 l
-4687 4499 l
-4687 4503 l
-4685 4506 l
-4683 4508 l
-4683 4512 l
-S
-4676 4537 m
-4678 4535 l
-4678 4530 l
-4678 4526 l
-4678 4521 l
-4680 4519 l
-4683 4517 l
-4683 4512 l
-S
-4636 3259 m
-4638 3261 l
-4638 3265 l
-S
-4638 3265 m
-4638 3270 l
-4640 3272 l
-4642 3274 l
-4642 3279 l
-4642 3283 l
-4645 3286 l
-4647 3288 l
-4647 3292 l
-4647 3297 l
-4649 3299 l
-4651 3301 l
-4651 3306 l
-S
-4651 3306 m
-4651 3310 l
-4654 3312 l
-4656 3315 l
-4656 3319 l
-4656 3324 l
-4658 3326 l
-4660 3328 l
-4660 3333 l
-4660 3337 l
-4663 3339 l
-4665 3341 l
-4665 3346 l
-S
-4665 3346 m
-4665 3350 l
-4667 3353 l
-4669 3355 l
-4669 3359 l
-4669 3364 l
-4669 3368 l
-4671 3371 l
-4674 3373 l
-4674 3377 l
-4674 3382 l
-4676 3384 l
-S
-4669 4553 m
-4671 4550 l
-4674 4548 l
-4674 4544 l
-4674 4539 l
-4676 4537 l
-S
-4669 4553 m
-4669 4557 l
-4669 4561 l
-4669 4566 l
-4667 4568 l
-4665 4570 l
-4665 4575 l
-4665 4579 l
-4663 4582 l
-4660 4584 l
-4660 4588 l
-4660 4593 l
-S
-4660 4593 m
-4658 4595 l
-4656 4597 l
-4656 4602 l
-4656 4606 l
-4654 4608 l
-4651 4611 l
-4651 4615 l
-4651 4620 l
-4649 4622 l
-4647 4624 l
-4647 4629 l
-4647 4633 l
-S
-4636 4662 m
-4638 4660 l
-4638 4655 l
-4638 4651 l
-4640 4649 l
-4642 4646 l
-4642 4642 l
-4642 4637 l
-4645 4635 l
-4647 4633 l
-S
-4595 3156 m
-4598 3158 l
-4598 3163 l
-4598 3167 l
-4600 3169 l
-4602 3172 l
-4602 3176 l
-4604 3178 l
-4607 3181 l
-4607 3185 l
-S
-4607 3185 m
-4607 3190 l
-4609 3192 l
-4611 3194 l
-4611 3198 l
-4613 3201 l
-4616 3203 l
-4616 3207 l
-4616 3212 l
-4618 3214 l
-4620 3216 l
-4620 3221 l
-4622 3223 l
-4625 3225 l
-S
-4625 3225 m
-4625 3230 l
-4625 3234 l
-4627 3236 l
-4629 3239 l
-4629 3243 l
-4629 3248 l
-4631 3250 l
-4633 3252 l
-4633 3257 l
-4636 3259 l
-S
-4629 4673 m
-4631 4671 l
-4633 4669 l
-4633 4664 l
-4636 4662 l
-S
-4629 4673 m
-4629 4678 l
-4629 4682 l
-4627 4684 l
-4625 4687 l
-4625 4691 l
-4625 4696 l
-4622 4698 l
-4620 4700 l
-4620 4704 l
-4618 4707 l
-4616 4709 l
-4616 4713 l
-S
-4616 4713 m
-4616 4718 l
-4613 4720 l
-4611 4722 l
-4611 4727 l
-4609 4729 l
-4607 4731 l
-4607 4736 l
-4607 4740 l
-4604 4742 l
-4602 4745 l
-4602 4749 l
-4600 4751 l
-4598 4754 l
-S
-4595 4765 m
-4598 4763 l
-4598 4758 l
-4598 4754 l
-S
-4555 3067 m
-4557 3069 l
-4557 3073 l
-4560 3076 l
-4562 3078 l
-4562 3082 l
-4562 3087 l
-4564 3089 l
-4566 3091 l
-4566 3096 l
-4569 3098 l
-4571 3100 l
-4571 3105 l
-S
-4571 3105 m
-4573 3107 l
-4575 3109 l
-4575 3114 l
-4578 3116 l
-4580 3118 l
-4580 3122 l
-4582 3125 l
-4584 3127 l
-4584 3131 l
-4584 3136 l
-4587 3138 l
-4589 3140 l
-4589 3145 l
-S
-4589 3145 m
-4591 3147 l
-4593 3149 l
-4593 3154 l
-4595 3156 l
-S
-4580 4794 m
-4582 4792 l
-4584 4789 l
-4584 4785 l
-4587 4783 l
-4589 4780 l
-4589 4776 l
-4591 4774 l
-4593 4772 l
-4593 4767 l
-4595 4765 l
-S
-4580 4794 m
-4580 4798 l
-4580 4803 l
-4578 4805 l
-4575 4807 l
-4575 4812 l
-4573 4814 l
-4571 4816 l
-4571 4821 l
-4569 4823 l
-4566 4825 l
-4566 4830 l
-4564 4832 l
-4562 4834 l
-S
-4555 4854 m
-4557 4852 l
-4557 4847 l
-4557 4843 l
-4560 4841 l
-4562 4839 l
-4562 4834 l
-S
-4515 2991 m
-4517 2993 l
-4520 2995 l
-4522 2997 l
-4522 3002 l
-4524 3004 l
-4526 3006 l
-4526 3011 l
-4528 3013 l
-4531 3015 l
-4531 3020 l
-4533 3022 l
-4535 3024 l
-S
-4535 3024 m
-4535 3029 l
-4537 3031 l
-4540 3033 l
-4540 3038 l
-4542 3040 l
-4544 3042 l
-4544 3047 l
-4546 3049 l
-4549 3051 l
-4549 3055 l
-4551 3058 l
-4553 3060 l
-4553 3064 l
-S
-4555 3067 m
-4553 3064 l
-S
-4544 4874 m
-4546 4872 l
-4549 4870 l
-4549 4865 l
-4551 4863 l
-4553 4861 l
-4553 4856 l
-4555 4854 l
-S
-4544 4874 m
-4544 4879 l
-4542 4881 l
-4540 4883 l
-4540 4888 l
-4537 4890 l
-4535 4892 l
-4535 4897 l
-4533 4899 l
-4531 4901 l
-4531 4906 l
-4528 4908 l
-4526 4910 l
-4526 4915 l
-S
-4515 4930 m
-4517 4928 l
-4517 4923 l
-4520 4921 l
-4522 4919 l
-4524 4917 l
-4526 4915 l
-S
-4475 2915 m
-4477 2917 l
-4477 2921 l
-4479 2924 l
-4482 2926 l
-4482 2930 l
-4484 2933 l
-4486 2935 l
-4486 2939 l
-4488 2941 l
-4490 2944 l
-S
-4490 2944 m
-4493 2946 l
-4495 2948 l
-4495 2953 l
-4497 2955 l
-4499 2957 l
-4499 2962 l
-4502 2964 l
-4504 2966 l
-4504 2971 l
-4506 2973 l
-4508 2975 l
-4508 2979 l
-4511 2982 l
-4513 2984 l
-S
-4513 2984 m
-4513 2988 l
-4515 2991 l
-S
-4504 4955 m
-4504 4950 l
-4506 4948 l
-4508 4946 l
-4508 4941 l
-4511 4939 l
-4513 4937 l
-4513 4932 l
-4515 4930 l
-S
-4504 4955 m
-4502 4957 l
-4499 4959 l
-4499 4964 l
-4497 4966 l
-4495 4968 l
-4493 4970 l
-4490 4973 l
-4490 4977 l
-4488 4979 l
-4486 4982 l
-4486 4986 l
-4484 4988 l
-4482 4990 l
-4482 4995 l
-S
-4475 5002 m
-4477 4999 l
-4479 4997 l
-4482 4995 l
-S
-4435 2852 m
-4437 2854 l
-4439 2857 l
-4441 2859 l
-4441 2863 l
-S
-4441 2863 m
-4444 2866 l
-4446 2868 l
-4448 2870 l
-4450 2872 l
-4450 2877 l
-4452 2879 l
-4455 2881 l
-4455 2886 l
-4457 2888 l
-4459 2890 l
-4461 2892 l
-4464 2895 l
-4464 2899 l
-4466 2901 l
-4468 2903 l
-S
-4468 2903 m
-4468 2908 l
-4470 2910 l
-4473 2912 l
-4475 2915 l
-S
-4455 5035 m
-4457 5033 l
-4459 5031 l
-4459 5026 l
-4461 5024 l
-4464 5022 l
-4466 5020 l
-4468 5017 l
-4468 5013 l
-4470 5011 l
-4473 5008 l
-4473 5004 l
-4475 5002 l
-S
-4435 5069 m
-4437 5066 l
-4439 5064 l
-4441 5062 l
-4441 5058 l
-4444 5055 l
-4446 5053 l
-4446 5049 l
-4448 5046 l
-4450 5044 l
-4452 5042 l
-4455 5040 l
-4455 5035 l
-S
-4394 2790 m
-4397 2792 l
-4397 2796 l
-4399 2798 l
-4401 2801 l
-4403 2803 l
-4406 2805 l
-4406 2810 l
-4408 2812 l
-4410 2814 l
-4412 2816 l
-4414 2819 l
-4414 2823 l
-S
-4414 2823 m
-4417 2825 l
-4419 2828 l
-4421 2830 l
-4423 2832 l
-4423 2836 l
-4426 2839 l
-4428 2841 l
-4430 2843 l
-4432 2845 l
-4432 2850 l
-4435 2852 l
-S
-4432 5075 m
-4432 5071 l
-4435 5069 l
-S
-4432 5075 m
-4430 5078 l
-4428 5080 l
-4426 5082 l
-4423 5084 l
-4423 5089 l
-4421 5091 l
-4419 5093 l
-4417 5096 l
-4414 5098 l
-4414 5102 l
-4412 5104 l
-4410 5107 l
-4408 5109 l
-4406 5111 l
-4406 5116 l
-S
-4394 5131 m
-4397 5129 l
-4397 5125 l
-4399 5122 l
-4401 5120 l
-4403 5118 l
-4406 5116 l
-S
-4354 2736 m
-4356 2738 l
-4359 2740 l
-4361 2743 l
-S
-4361 2743 m
-4363 2745 l
-4365 2747 l
-4365 2752 l
-4368 2754 l
-4370 2756 l
-4372 2758 l
-4374 2760 l
-4377 2763 l
-4379 2765 l
-4379 2769 l
-4381 2772 l
-4383 2774 l
-4385 2776 l
-4388 2778 l
-4388 2783 l
-S
-4388 2783 m
-4390 2785 l
-4392 2787 l
-4394 2790 l
-S
-4374 5156 m
-4377 5154 l
-4379 5151 l
-4381 5149 l
-4383 5147 l
-4385 5145 l
-4388 5142 l
-4388 5138 l
-4390 5136 l
-4392 5133 l
-4394 5131 l
-S
-4354 5185 m
-4356 5183 l
-4359 5180 l
-4361 5178 l
-4363 5176 l
-4365 5174 l
-4365 5169 l
-4368 5167 l
-4370 5165 l
-4372 5163 l
-4374 5160 l
-4374 5156 l
-S
-4314 2682 m
-4316 2685 l
-4318 2687 l
-4321 2689 l
-4323 2691 l
-4325 2693 l
-4325 2698 l
-4327 2700 l
-4330 2702 l
-S
-4330 2702 m
-4332 2705 l
-4334 2707 l
-4336 2709 l
-4339 2711 l
-4339 2716 l
-4341 2718 l
-4343 2720 l
-4345 2723 l
-4347 2725 l
-4350 2727 l
-4352 2729 l
-4352 2734 l
-4354 2736 l
-S
-4347 5196 m
-4350 5194 l
-4352 5192 l
-4352 5187 l
-4354 5185 l
-S
-4347 5196 m
-4345 5198 l
-4343 5201 l
-4341 5203 l
-4339 5205 l
-4339 5209 l
-4336 5212 l
-4334 5214 l
-4332 5216 l
-4330 5218 l
-4327 5221 l
-4325 5223 l
-4325 5227 l
-4323 5230 l
-4321 5232 l
-4318 5234 l
-4316 5236 l
-S
-4314 5239 m
-4316 5236 l
-S
-4274 2633 m
-4276 2635 l
-4278 2638 l
-4280 2640 l
-4283 2642 l
-4285 2644 l
-4287 2647 l
-4289 2649 l
-4289 2653 l
-4292 2655 l
-4294 2658 l
-4296 2660 l
-4298 2662 l
-S
-4298 2662 m
-4301 2664 l
-4303 2667 l
-4305 2669 l
-4307 2671 l
-4309 2673 l
-4312 2676 l
-4312 2680 l
-4314 2682 l
-S
-4314 5239 m
-4312 5241 l
-4309 5243 l
-4307 5245 l
-4307 5250 l
-4305 5252 l
-4303 5254 l
-4301 5256 l
-4298 5259 l
-4296 5261 l
-4294 5263 l
-4292 5265 l
-4289 5268 l
-4289 5272 l
-4287 5274 l
-4285 5277 l
-S
-4274 5288 m
-4276 5285 l
-4278 5283 l
-4280 5281 l
-4283 5279 l
-4285 5277 l
-S
-4233 2584 m
-4236 2586 l
-4238 2588 l
-4240 2591 l
-4240 2595 l
-4242 2597 l
-4245 2600 l
-4247 2602 l
-4249 2604 l
-4251 2606 l
-4254 2609 l
-4256 2611 l
-4258 2613 l
-4260 2615 l
-4263 2617 l
-4265 2620 l
-4267 2622 l
-S
-4267 2622 m
-4267 2626 l
-4269 2629 l
-4271 2631 l
-4274 2633 l
-S
-4249 5317 m
-4251 5314 l
-4254 5312 l
-4256 5310 l
-4258 5308 l
-4260 5306 l
-4263 5303 l
-4265 5301 l
-4267 5299 l
-4267 5294 l
-4269 5292 l
-4271 5290 l
-4274 5288 l
-S
-4233 5337 m
-4236 5335 l
-4236 5330 l
-4238 5328 l
-4240 5326 l
-4242 5323 l
-4245 5321 l
-4247 5319 l
-4249 5317 l
-S
-4193 2544 m
-4196 2546 l
-4198 2548 l
-4200 2550 l
-4202 2553 l
-4204 2555 l
-4207 2557 l
-4209 2559 l
-4211 2562 l
-4213 2564 l
-4216 2566 l
-4218 2568 l
-4220 2571 l
-4222 2573 l
-4225 2575 l
-4227 2577 l
-4229 2579 l
-4231 2582 l
-S
-4233 2584 m
-4231 2582 l
-S
-4213 5357 m
-4216 5355 l
-4218 5352 l
-4220 5350 l
-4222 5348 l
-4225 5346 l
-4227 5344 l
-4229 5341 l
-4231 5339 l
-4233 5337 l
-S
-4193 5377 m
-4196 5375 l
-4198 5373 l
-4200 5370 l
-4202 5368 l
-4204 5366 l
-4207 5364 l
-4209 5361 l
-4211 5359 l
-4213 5357 l
-S
-4153 2499 m
-4155 2501 l
-S
-4155 2501 m
-4158 2504 l
-4160 2506 l
-4162 2508 l
-4164 2510 l
-4166 2512 l
-4169 2515 l
-4171 2517 l
-4173 2519 l
-4175 2521 l
-4178 2524 l
-4180 2526 l
-4182 2528 l
-4184 2530 l
-4187 2533 l
-4189 2535 l
-4191 2537 l
-4191 2542 l
-S
-4193 2544 m
-4191 2542 l
-S
-4173 5397 m
-4175 5395 l
-4178 5393 l
-4180 5390 l
-4182 5388 l
-4184 5386 l
-4187 5384 l
-4189 5382 l
-4191 5379 l
-4193 5377 l
-S
-4153 5422 m
-4155 5420 l
-4158 5417 l
-4160 5415 l
-4162 5413 l
-4164 5411 l
-4166 5408 l
-4169 5406 l
-4171 5404 l
-4173 5402 l
-4173 5397 l
-S
-4113 2463 m
-4117 2463 l
-4120 2466 l
-4122 2468 l
-4124 2470 l
-4126 2472 l
-4128 2474 l
-4131 2477 l
-4133 2479 l
-4135 2481 l
-4137 2483 l
-4140 2486 l
-4142 2488 l
-4144 2490 l
-4146 2492 l
-4149 2495 l
-4151 2497 l
-4153 2499 l
-S
-4137 5437 m
-4140 5435 l
-4142 5433 l
-4144 5431 l
-4146 5428 l
-4149 5426 l
-4151 5424 l
-4153 5422 l
-S
-4113 5457 m
-4115 5455 l
-4117 5453 l
-4120 5451 l
-4122 5449 l
-4124 5446 l
-4126 5444 l
-4128 5442 l
-4131 5440 l
-4135 5440 l
-4137 5437 l
-S
-4073 2423 m
-4075 2425 l
-4077 2428 l
-4079 2430 l
-4082 2432 l
-4084 2434 l
-4086 2436 l
-4088 2439 l
-4090 2441 l
-4093 2443 l
-4095 2445 l
-4097 2448 l
-4099 2450 l
-4102 2452 l
-4104 2454 l
-4106 2457 l
-4108 2459 l
-4111 2461 l
-S
-4113 2463 m
-4111 2461 l
-S
-4093 5478 m
-4095 5475 l
-4097 5473 l
-4099 5471 l
-4102 5469 l
-4104 5466 l
-4106 5464 l
-4108 5462 l
-4111 5460 l
-4113 5457 l
-S
-4073 5498 m
-4075 5495 l
-4077 5493 l
-4079 5491 l
-4082 5489 l
-4084 5487 l
-4086 5484 l
-4088 5482 l
-4090 5480 l
-4093 5478 l
-S
-4032 2387 m
-4035 2390 l
-4037 2392 l
-4039 2394 l
-4041 2396 l
-4044 2399 l
-4046 2401 l
-4048 2403 l
-4050 2405 l
-4053 2407 l
-4055 2410 l
-4057 2412 l
-4059 2414 l
-4064 2414 l
-4066 2416 l
-4068 2419 l
-4070 2421 l
-S
-4073 2423 m
-4070 2421 l
-S
-4048 5518 m
-4050 5516 l
-4053 5513 l
-4055 5511 l
-4057 5509 l
-4059 5507 l
-4061 5504 l
-4064 5502 l
-4068 5502 l
-4070 5500 l
-4073 5498 l
-S
-4032 5529 m
-4037 5529 l
-4039 5527 l
-4041 5525 l
-4044 5522 l
-4046 5520 l
-4048 5518 l
-S
-3992 2356 m
-3994 2358 l
-3997 2361 l
-3999 2363 l
-4001 2365 l
-4006 2365 l
-4008 2367 l
-4010 2369 l
-4012 2372 l
-4015 2374 l
-4017 2376 l
-4019 2378 l
-4021 2381 l
-S
-4021 2381 m
-4023 2383 l
-4026 2385 l
-4028 2387 l
-4032 2387 l
-S
-3999 5558 m
-4001 5556 l
-4006 5556 l
-4008 5554 l
-4010 5551 l
-4012 5549 l
-4015 5547 l
-4017 5545 l
-4019 5542 l
-4021 5540 l
-4023 5538 l
-4026 5536 l
-4028 5533 l
-4030 5531 l
-4032 5529 l
-S
-3992 5565 m
-3994 5563 l
-3997 5560 l
-3999 5558 l
-S
-3952 2325 m
-3954 2327 l
-3956 2329 l
-3961 2329 l
-3963 2331 l
-3965 2334 l
-3968 2336 l
-3970 2338 l
-3972 2340 l
-S
-3972 2340 m
-3974 2343 l
-3979 2343 l
-3981 2345 l
-3983 2347 l
-3985 2349 l
-3988 2352 l
-3990 2354 l
-3992 2356 l
-S
-3952 5596 m
-3954 5594 l
-3956 5592 l
-3961 5592 l
-3963 5589 l
-3965 5587 l
-3968 5585 l
-3970 5583 l
-3972 5580 l
-3974 5578 l
-3977 5576 l
-3979 5574 l
-3983 5574 l
-3985 5571 l
-3988 5569 l
-3990 5567 l
-3992 5565 l
-S
-3912 2293 m
-3914 2296 l
-3916 2298 l
-3918 2300 l
-S
-3918 2300 m
-3921 2302 l
-3925 2302 l
-3927 2305 l
-3930 2307 l
-3932 2309 l
-3934 2311 l
-3936 2314 l
-3939 2316 l
-3943 2316 l
-3945 2318 l
-3947 2320 l
-3950 2323 l
-3952 2325 l
-S
-3950 5598 m
-3952 5596 l
-S
-3912 5627 m
-3914 5625 l
-3916 5623 l
-3918 5621 l
-3921 5618 l
-3925 5618 l
-3927 5616 l
-3930 5614 l
-3932 5612 l
-3934 5609 l
-3936 5607 l
-3939 5605 l
-3943 5605 l
-3945 5603 l
-3947 5601 l
-3950 5598 l
-S
-3872 2267 m
-3876 2267 l
-3878 2269 l
-3880 2271 l
-3883 2273 l
-3885 2276 l
-3889 2276 l
-3892 2278 l
-3894 2280 l
-3896 2282 l
-3898 2285 l
-3901 2287 l
-3903 2289 l
-3907 2289 l
-3909 2291 l
-3912 2293 l
-S
-3896 5638 m
-3898 5636 l
-3901 5634 l
-3903 5632 l
-3907 5632 l
-3909 5630 l
-3912 5627 l
-S
-3872 5654 m
-3876 5654 l
-3878 5652 l
-3880 5650 l
-3883 5647 l
-3885 5645 l
-3887 5643 l
-3889 5641 l
-3894 5641 l
-3896 5638 l
-S
-3831 2240 m
-3836 2240 l
-3838 2242 l
-3840 2244 l
-3842 2247 l
-3845 2249 l
-3849 2249 l
-3851 2251 l
-3854 2253 l
-3856 2256 l
-3858 2258 l
-3863 2258 l
-3865 2260 l
-S
-3865 2260 m
-3867 2262 l
-3869 2264 l
-3872 2267 l
-S
-3838 5679 m
-3840 5676 l
-3842 5674 l
-3845 5672 l
-3849 5672 l
-3851 5670 l
-3854 5668 l
-3856 5665 l
-3858 5663 l
-3863 5663 l
-3865 5661 l
-3867 5659 l
-3869 5656 l
-3872 5654 l
-S
-3831 5681 m
-3836 5681 l
-3838 5679 l
-S
-3791 2213 m
-3796 2213 l
-3798 2215 l
-3800 2218 l
-3802 2220 l
-S
-3802 2220 m
-3804 2222 l
-3809 2222 l
-3811 2224 l
-3813 2226 l
-3816 2229 l
-3818 2231 l
-3822 2231 l
-3825 2233 l
-3827 2235 l
-3829 2238 l
-3831 2240 l
-S
-3831 5681 m
-3829 5683 l
-3827 5685 l
-3825 5688 l
-3822 5690 l
-3818 5690 l
-3816 5692 l
-3813 5694 l
-3811 5697 l
-3809 5699 l
-3804 5699 l
-3802 5701 l
-3800 5703 l
-3796 5703 l
-3793 5706 l
-3791 5708 l
-S
-3751 2186 m
-3753 2188 l
-3755 2191 l
-3760 2191 l
-3762 2193 l
-3764 2195 l
-3766 2197 l
-3769 2200 l
-3773 2200 l
-3775 2202 l
-3778 2204 l
-3782 2204 l
-3784 2206 l
-3787 2209 l
-3789 2211 l
-3791 2213 l
-S
-3775 5719 m
-3778 5717 l
-3780 5714 l
-3782 5712 l
-3787 5712 l
-3789 5710 l
-3791 5708 l
-S
-3751 5735 m
-3753 5732 l
-3755 5730 l
-3758 5728 l
-3760 5726 l
-3764 5726 l
-3766 5723 l
-3769 5721 l
-3773 5721 l
-3775 5719 l
-S
-3711 2164 m
-3713 2166 l
-3715 2168 l
-3720 2168 l
-3722 2171 l
-3724 2173 l
-3729 2173 l
-3731 2175 l
-3733 2177 l
-3737 2177 l
-3740 2180 l
-S
-3740 2180 m
-3742 2182 l
-3744 2184 l
-3746 2186 l
-3751 2186 l
-S
-3711 5757 m
-3713 5755 l
-3715 5752 l
-3720 5752 l
-3722 5750 l
-3724 5748 l
-3729 5748 l
-3731 5746 l
-3733 5744 l
-3735 5741 l
-3737 5739 l
-3742 5739 l
-3744 5737 l
-3746 5735 l
-3751 5735 l
-S
-3670 2142 m
-3673 2144 l
-3675 2146 l
-3679 2146 l
-3682 2148 l
-3684 2150 l
-3688 2150 l
-3691 2153 l
-3693 2155 l
-3697 2155 l
-3699 2157 l
-3702 2159 l
-3706 2159 l
-3708 2162 l
-3711 2164 l
-S
-3704 5759 m
-3706 5757 l
-3711 5757 l
-S
-3670 5779 m
-3673 5777 l
-3675 5775 l
-3679 5775 l
-3682 5773 l
-3684 5770 l
-3688 5770 l
-3691 5768 l
-3693 5766 l
-3697 5766 l
-3699 5764 l
-3702 5761 l
-3704 5759 l
-S
-3630 2119 m
-3632 2121 l
-3635 2124 l
-3639 2124 l
-3641 2126 l
-3644 2128 l
-3648 2128 l
-3650 2130 l
-3653 2133 l
-3657 2133 l
-3659 2135 l
-3661 2137 l
-3664 2139 l
-S
-3670 2142 m
-3666 2142 l
-3664 2139 l
-S
-3630 5797 m
-3635 5797 l
-3637 5795 l
-3639 5793 l
-3644 5793 l
-3646 5790 l
-3648 5788 l
-3653 5788 l
-3655 5786 l
-3657 5784 l
-3661 5784 l
-3664 5781 l
-3666 5779 l
-3670 5779 l
-S
-3590 2101 m
-3594 2101 l
-3597 2104 l
-3599 2106 l
-3603 2106 l
-3606 2108 l
-3608 2110 l
-3612 2110 l
-3615 2112 l
-3617 2115 l
-3621 2115 l
-3623 2117 l
-3626 2119 l
-3630 2119 l
-S
-3628 5799 m
-3630 5797 l
-S
-3590 5819 m
-3592 5817 l
-3594 5815 l
-3599 5815 l
-3601 5813 l
-3603 5811 l
-3608 5811 l
-3612 5811 l
-3615 5808 l
-3617 5806 l
-3621 5806 l
-3623 5804 l
-3626 5802 l
-3628 5799 l
-S
-3550 2083 m
-3554 2083 l
-3556 2086 l
-3559 2088 l
-3563 2088 l
-3565 2090 l
-3568 2092 l
-3572 2092 l
-3577 2092 l
-3579 2095 l
-3581 2097 l
-3585 2097 l
-3588 2099 l
-S
-3590 2101 m
-3588 2099 l
-S
-3550 5837 m
-3554 5837 l
-3556 5835 l
-3559 5833 l
-3563 5833 l
-3565 5831 l
-3568 5828 l
-3572 5828 l
-3574 5826 l
-3577 5824 l
-3581 5824 l
-3583 5822 l
-3585 5819 l
-3590 5819 l
-S
-3510 2066 m
-3514 2066 l
-3516 2068 l
-3518 2070 l
-3523 2070 l
-3527 2070 l
-3530 2072 l
-3532 2075 l
-3536 2075 l
-3539 2077 l
-3541 2079 l
-3545 2079 l
-3548 2081 l
-3550 2083 l
-S
-3548 5840 m
-3550 5837 l
-S
-3510 5855 m
-3514 5855 l
-3516 5853 l
-3518 5851 l
-3523 5851 l
-3525 5849 l
-3527 5846 l
-3532 5846 l
-3536 5846 l
-3539 5844 l
-3541 5842 l
-3545 5842 l
-3548 5840 l
-S
-3469 2048 m
-3474 2048 l
-3476 2050 l
-3478 2052 l
-3483 2052 l
-3485 2054 l
-3487 2057 l
-3492 2057 l
-3496 2057 l
-3498 2059 l
-S
-3498 2059 m
-3501 2061 l
-3505 2061 l
-3507 2063 l
-3510 2066 l
-S
-3469 5873 m
-3472 5871 l
-3474 5869 l
-3478 5869 l
-3483 5869 l
-3485 5866 l
-3487 5864 l
-3492 5864 l
-3494 5862 l
-3496 5860 l
-3501 5860 l
-3505 5860 l
-3507 5857 l
-3510 5855 l
-S
-3429 2030 m
-3431 2032 l
-3434 2034 l
-3438 2034 l
-3440 2037 l
-3442 2039 l
-3447 2039 l
-3451 2039 l
-3454 2041 l
-3456 2043 l
-3460 2043 l
-3463 2045 l
-3465 2048 l
-3469 2048 l
-S
-3454 5880 m
-3456 5878 l
-3460 5878 l
-3463 5875 l
-3465 5873 l
-3469 5873 l
-S
-3429 5887 m
-3434 5887 l
-3438 5887 l
-3440 5884 l
-3442 5882 l
-3447 5882 l
-3451 5882 l
-3454 5880 l
-S
-3389 2016 m
-3393 2016 l
-3396 2019 l
-S
-3396 2019 m
-3398 2021 l
-3402 2021 l
-3405 2023 l
-3407 2025 l
-3411 2025 l
-3416 2025 l
-3418 2028 l
-3420 2030 l
-3425 2030 l
-3429 2030 l
-S
-3389 5904 m
-3391 5902 l
-3393 5900 l
-3398 5900 l
-3402 5900 l
-3405 5898 l
-3407 5895 l
-3411 5895 l
-3416 5895 l
-3418 5893 l
-3420 5891 l
-3425 5891 l
-3427 5889 l
-3429 5887 l
-S
-3349 2003 m
-3353 2003 l
-3355 2005 l
-3358 2007 l
-3362 2007 l
-3367 2007 l
-3369 2010 l
-3371 2012 l
-3375 2012 l
-3380 2012 l
-3382 2014 l
-3384 2016 l
-3389 2016 l
-S
-3349 5918 m
-3353 5918 l
-3355 5916 l
-3358 5913 l
-3362 5913 l
-3367 5913 l
-3369 5911 l
-3371 5909 l
-3375 5909 l
-3378 5907 l
-3380 5904 l
-3384 5904 l
-3389 5904 l
-S
-3308 1990 m
-3313 1990 l
-3315 1992 l
-3317 1994 l
-3322 1994 l
-3326 1994 l
-3329 1996 l
-3331 1999 l
-3335 1999 l
-3340 1999 l
-3342 2001 l
-3344 2003 l
-3349 2003 l
-S
-3342 5920 m
-3344 5918 l
-3349 5918 l
-S
-3308 5931 m
-3311 5929 l
-3313 5927 l
-3317 5927 l
-3322 5927 l
-3326 5927 l
-3329 5925 l
-3331 5922 l
-3335 5922 l
-3340 5922 l
-3342 5920 l
-S
-3268 1976 m
-3270 1978 l
-S
-3270 1978 m
-3273 1981 l
-3277 1981 l
-3282 1981 l
-3284 1983 l
-3286 1985 l
-3291 1985 l
-3295 1985 l
-3299 1985 l
-3302 1987 l
-3304 1990 l
-3308 1990 l
-S
-3268 5940 m
-3273 5940 l
-3277 5940 l
-3282 5940 l
-3284 5938 l
-3286 5936 l
-3291 5936 l
-3295 5936 l
-3297 5933 l
-3299 5931 l
-3304 5931 l
-3308 5931 l
-S
-3228 1967 m
-3232 1967 l
-3237 1967 l
-3239 1969 l
-3241 1972 l
-3246 1972 l
-3250 1972 l
-3255 1972 l
-3257 1974 l
-3259 1976 l
-3264 1976 l
-3268 1976 l
-S
-3228 5954 m
-3232 5954 l
-3235 5951 l
-3237 5949 l
-3241 5949 l
-3246 5949 l
-3250 5949 l
-3253 5947 l
-3255 5945 l
-3259 5945 l
-3264 5945 l
-3266 5942 l
-3268 5940 l
-S
-3188 1958 m
-3192 1958 l
-3197 1958 l
-3201 1958 l
-3203 1961 l
-3206 1963 l
-3210 1963 l
-3215 1963 l
-3219 1963 l
-3221 1965 l
-3224 1967 l
-3228 1967 l
-S
-3203 5960 m
-3206 5958 l
-3210 5958 l
-3215 5958 l
-3219 5958 l
-3221 5956 l
-3224 5954 l
-3228 5954 l
-S
-3188 5962 m
-3192 5962 l
-3197 5962 l
-3201 5962 l
-3203 5960 l
-S
-3148 1945 m
-3150 1947 l
-3152 1949 l
-3156 1949 l
-3161 1949 l
-3165 1949 l
-3168 1952 l
-3170 1954 l
-3174 1954 l
-3179 1954 l
-3183 1954 l
-3186 1956 l
-3188 1958 l
-S
-3188 5962 m
-3186 5965 l
-3183 5967 l
-3179 5967 l
-3174 5967 l
-3170 5967 l
-3168 5969 l
-3165 5971 l
-3161 5971 l
-3156 5971 l
-3152 5971 l
-3148 5971 l
-S
-3107 1936 m
-3110 1938 l
-S
-3110 1938 m
-3112 1940 l
-3116 1940 l
-3121 1940 l
-3125 1940 l
-3127 1943 l
-3130 1945 l
-3134 1945 l
-3139 1945 l
-3143 1945 l
-3148 1945 l
-S
-3107 5980 m
-3112 5980 l
-3116 5980 l
-3121 5980 l
-3125 5980 l
-3127 5978 l
-3130 5976 l
-3134 5976 l
-3139 5976 l
-3143 5976 l
-3145 5974 l
-3148 5971 l
-S
-3067 1932 m
-3072 1932 l
-3076 1932 l
-3081 1932 l
-3085 1932 l
-3087 1934 l
-3089 1936 l
-3094 1936 l
-3098 1936 l
-3103 1936 l
-3107 1936 l
-S
-3067 5989 m
-3072 5989 l
-3076 5989 l
-3081 5989 l
-3083 5987 l
-3085 5985 l
-3089 5985 l
-3094 5985 l
-3098 5985 l
-3103 5985 l
-3105 5983 l
-3107 5980 l
-S
-3027 1923 m
-3031 1923 l
-3036 1923 l
-3038 1925 l
-3040 1927 l
-3045 1927 l
-3049 1927 l
-3054 1927 l
-3058 1927 l
-3060 1929 l
-3063 1932 l
-3067 1932 l
-S
-3027 5998 m
-3031 5998 l
-3034 5996 l
-3036 5994 l
-3040 5994 l
-3045 5994 l
-3049 5994 l
-3054 5994 l
-3056 5992 l
-3058 5989 l
-3063 5989 l
-3067 5989 l
-S
-2987 1918 m
-2991 1918 l
-2996 1918 l
-3000 1918 l
-3005 1918 l
-3007 1920 l
-3009 1923 l
-3013 1923 l
-3018 1923 l
-3022 1923 l
-3027 1923 l
-S
-3002 6000 m
-3005 5998 l
-3009 5998 l
-3013 5998 l
-3018 5998 l
-3022 5998 l
-3027 5998 l
-S
-2987 6003 m
-2991 6003 l
-2996 6003 l
-3000 6003 l
-3002 6000 l
-S
-2946 1914 m
-2951 1914 l
-2955 1914 l
-2960 1914 l
-2964 1914 l
-2969 1914 l
-2973 1914 l
-2975 1916 l
-2978 1918 l
-2982 1918 l
-2987 1918 l
-S
-2987 6003 m
-2982 6003 l
-2978 6003 l
-2973 6003 l
-2971 6005 l
-2969 6007 l
-2964 6007 l
-2960 6007 l
-2955 6007 l
-2951 6007 l
-2946 6007 l
-S
-2906 1909 m
-2911 1909 l
-2915 1909 l
-2920 1909 l
-2924 1909 l
-2929 1909 l
-2933 1909 l
-2938 1909 l
-2942 1909 l
-2944 1911 l
-2946 1914 l
-S
-2906 6012 m
-2911 6012 l
-2915 6012 l
-2920 6012 l
-2924 6012 l
-2929 6012 l
-2933 6012 l
-2935 6009 l
-2938 6007 l
-2942 6007 l
-2946 6007 l
-S
-2866 1905 m
-2870 1905 l
-2875 1905 l
-2879 1905 l
-2884 1905 l
-2888 1905 l
-2893 1905 l
-2897 1905 l
-2902 1905 l
-2904 1907 l
-2906 1909 l
-S
-2866 6016 m
-2870 6016 l
-2875 6016 l
-2879 6016 l
-2884 6016 l
-2888 6016 l
-2893 6016 l
-2895 6014 l
-2897 6012 l
-2902 6012 l
-2906 6012 l
-S
-2826 1900 m
-2830 1900 l
-2835 1900 l
-2839 1900 l
-2844 1900 l
-2848 1900 l
-2853 1900 l
-2855 1902 l
-2857 1905 l
-2862 1905 l
-2866 1905 l
-S
-2826 6021 m
-2830 6021 l
-2835 6021 l
-2839 6021 l
-2841 6018 l
-2844 6016 l
-2848 6016 l
-2853 6016 l
-2857 6016 l
-2862 6016 l
-2866 6016 l
-S
-2826 1900 m
-2821 1900 l
-2817 1900 l
-2812 1900 l
-2808 1900 l
-2803 1900 l
-2799 1900 l
-2794 1900 l
-2790 1900 l
-2786 1900 l
-S
-2786 6021 m
-2790 6021 l
-2794 6021 l
-2799 6021 l
-2803 6021 l
-2808 6021 l
-2812 6021 l
-2817 6021 l
-2821 6021 l
-2826 6021 l
-S
-2745 1896 m
-2750 1896 l
-2754 1896 l
-2759 1896 l
-2763 1896 l
-2768 1896 l
-2772 1896 l
-2777 1896 l
-2779 1898 l
-S
-2786 1900 m
-2781 1900 l
-2779 1898 l
-S
-2745 6025 m
-2750 6025 l
-2754 6025 l
-2757 6023 l
-2759 6021 l
-2763 6021 l
-2768 6021 l
-2772 6021 l
-2777 6021 l
-2781 6021 l
-2786 6021 l
-S
-2705 1896 m
-2710 1896 l
-2714 1896 l
-2719 1896 l
-2723 1896 l
-2727 1896 l
-2732 1896 l
-2736 1896 l
-2741 1896 l
-2745 1896 l
-S
-2705 6025 m
-2710 6025 l
-2714 6025 l
-2719 6025 l
-2723 6025 l
-2727 6025 l
-2732 6025 l
-2736 6025 l
-2741 6025 l
-2745 6025 l
-S
-2665 1896 m
-2669 1896 l
-2674 1896 l
-2678 1896 l
-2683 1896 l
-2687 1896 l
-2692 1896 l
-2696 1896 l
-2701 1896 l
-2705 1896 l
-S
-2665 6025 m
-2669 6025 l
-2674 6025 l
-2678 6025 l
-2683 6025 l
-2687 6025 l
-2692 6025 l
-2696 6025 l
-2701 6025 l
-2705 6025 l
-S
-2625 1896 m
-2629 1896 l
-2634 1896 l
-2638 1896 l
-2643 1896 l
-2647 1896 l
-2651 1896 l
-2656 1896 l
-2660 1896 l
-2665 1896 l
-S
-2625 6021 m
-2629 6021 l
-2631 6023 l
-2634 6025 l
-2638 6025 l
-2643 6025 l
-2647 6025 l
-2651 6025 l
-2656 6025 l
-2660 6025 l
-2665 6025 l
-S
-2614 1898 m
-2616 1896 l
-2620 1896 l
-2625 1896 l
-S
-2584 1900 m
-2589 1900 l
-2593 1900 l
-2598 1900 l
-2602 1900 l
-2607 1900 l
-2611 1900 l
-2614 1898 l
-S
-2584 6021 m
-2589 6021 l
-2593 6021 l
-2598 6021 l
-2602 6021 l
-2607 6021 l
-2611 6021 l
-2616 6021 l
-2620 6021 l
-2625 6021 l
-S
-2584 1900 m
-2580 1900 l
-2576 1900 l
-2571 1900 l
-2567 1900 l
-2562 1900 l
-2558 1900 l
-2553 1900 l
-2549 1900 l
-2544 1900 l
-S
-2544 6016 m
-2546 6018 l
-2549 6021 l
-2553 6021 l
-2558 6021 l
-2562 6021 l
-2567 6021 l
-2571 6021 l
-2576 6021 l
-2580 6021 l
-2584 6021 l
-S
-2544 1900 m
-2540 1900 l
-2538 1902 l
-2535 1905 l
-2531 1905 l
-2526 1905 l
-2522 1905 l
-2517 1905 l
-2513 1905 l
-2508 1905 l
-2504 1905 l
-S
-2504 6016 m
-2508 6016 l
-2513 6016 l
-2517 6016 l
-2522 6016 l
-2526 6016 l
-2531 6016 l
-2535 6016 l
-2540 6016 l
-2544 6016 l
-S
-2464 1909 m
-2468 1909 l
-2473 1909 l
-2477 1909 l
-2482 1909 l
-2484 1907 l
-2486 1905 l
-2491 1905 l
-2495 1905 l
-2500 1905 l
-2504 1905 l
-S
-2464 6012 m
-2468 6012 l
-2473 6012 l
-2477 6012 l
-2482 6012 l
-2486 6012 l
-2491 6012 l
-2493 6014 l
-2495 6016 l
-2500 6016 l
-2504 6016 l
-S
-2424 1914 m
-2428 1914 l
-2433 1914 l
-2437 1914 l
-2441 1914 l
-2444 1911 l
-2446 1909 l
-2450 1909 l
-2455 1909 l
-2459 1909 l
-2464 1909 l
-S
-2424 6007 m
-2428 6007 l
-2433 6007 l
-2437 6007 l
-2441 6007 l
-2446 6007 l
-2450 6007 l
-2453 6009 l
-2455 6012 l
-2459 6012 l
-2464 6012 l
-S
-2383 1918 m
-2388 1918 l
-2392 1918 l
-2397 1918 l
-2401 1918 l
-2406 1918 l
-2410 1918 l
-2412 1916 l
-2415 1914 l
-2419 1914 l
-2424 1914 l
-S
-2383 5998 m
-2386 6000 l
-S
-2386 6000 m
-2388 6003 l
-2392 6003 l
-2397 6003 l
-2401 6003 l
-2406 6003 l
-2410 6003 l
-2415 6003 l
-2417 6005 l
-2419 6007 l
-2424 6007 l
-S
-2343 1927 m
-2348 1927 l
-2352 1927 l
-2354 1925 l
-2357 1923 l
-2361 1923 l
-2365 1923 l
-2370 1923 l
-2374 1923 l
-2379 1923 l
-2381 1920 l
-2383 1918 l
-S
-2343 5994 m
-2348 5994 l
-2352 5994 l
-2357 5994 l
-2359 5996 l
-2361 5998 l
-2365 5998 l
-2370 5998 l
-2374 5998 l
-2379 5998 l
-2383 5998 l
-S
-2303 1936 m
-2305 1934 l
-2307 1932 l
-2312 1932 l
-2316 1932 l
-2321 1932 l
-2325 1932 l
-2327 1929 l
-2330 1927 l
-2334 1927 l
-2339 1927 l
-2343 1927 l
-S
-2303 5985 m
-2305 5987 l
-2307 5989 l
-2312 5989 l
-2316 5989 l
-2321 5989 l
-2325 5989 l
-2330 5989 l
-2332 5992 l
-2334 5994 l
-2339 5994 l
-2343 5994 l
-S
-2283 1938 m
-2285 1936 l
-2290 1936 l
-2294 1936 l
-2298 1936 l
-2303 1936 l
-S
-2263 1940 m
-2267 1940 l
-2272 1940 l
-2276 1940 l
-2281 1940 l
-2283 1938 l
-S
-2263 5976 m
-2265 5978 l
-2267 5980 l
-2272 5980 l
-2276 5980 l
-2281 5980 l
-2283 5983 l
-2285 5985 l
-2290 5985 l
-2294 5985 l
-2298 5985 l
-2303 5985 l
-S
-2263 1940 m
-2260 1943 l
-2258 1945 l
-2254 1945 l
-2249 1945 l
-2245 1945 l
-2240 1945 l
-2238 1947 l
-2236 1949 l
-2231 1949 l
-2227 1949 l
-2222 1949 l
-S
-2222 5967 m
-2225 5969 l
-2227 5971 l
-2231 5971 l
-2236 5971 l
-2240 5971 l
-2243 5974 l
-2245 5976 l
-2249 5976 l
-2254 5976 l
-2258 5976 l
-2263 5976 l
-S
-2182 1963 m
-2184 1961 l
-2187 1958 l
-2191 1958 l
-2196 1958 l
-2200 1958 l
-2202 1956 l
-2205 1954 l
-2209 1954 l
-2214 1954 l
-2218 1954 l
-2220 1952 l
-2222 1949 l
-S
-2182 5958 m
-2184 5960 l
-S
-2184 5960 m
-2187 5962 l
-2191 5962 l
-2196 5962 l
-2200 5962 l
-2202 5965 l
-2205 5967 l
-2209 5967 l
-2214 5967 l
-2218 5967 l
-2222 5967 l
-S
-2142 1972 m
-2147 1972 l
-2149 1969 l
-2151 1967 l
-2155 1967 l
-2160 1967 l
-2164 1967 l
-2167 1965 l
-2169 1963 l
-2173 1963 l
-2178 1963 l
-2182 1963 l
-S
-2142 5949 m
-2147 5949 l
-2151 5949 l
-2153 5951 l
-2155 5954 l
-2160 5954 l
-2164 5954 l
-2169 5954 l
-2171 5956 l
-2173 5958 l
-2178 5958 l
-2182 5958 l
-S
-2117 1978 m
-2120 1976 l
-2124 1976 l
-2129 1976 l
-2133 1976 l
-2135 1974 l
-2138 1972 l
-2142 1972 l
-S
-2102 1985 m
-2104 1983 l
-2106 1981 l
-2111 1981 l
-2115 1981 l
-2117 1978 l
-S
-2102 5936 m
-2104 5938 l
-2106 5940 l
-2111 5940 l
-2115 5940 l
-2120 5940 l
-2122 5942 l
-2124 5945 l
-2129 5945 l
-2133 5945 l
-2135 5947 l
-2138 5949 l
-2142 5949 l
-S
-2062 1994 m
-2066 1994 l
-2071 1994 l
-2073 1992 l
-2075 1990 l
-2079 1990 l
-2084 1990 l
-2086 1987 l
-2088 1985 l
-2093 1985 l
-2097 1985 l
-2102 1985 l
-S
-2062 5922 m
-2064 5925 l
-2066 5927 l
-2071 5927 l
-2075 5927 l
-2077 5929 l
-2079 5931 l
-2084 5931 l
-2088 5931 l
-2091 5933 l
-2093 5936 l
-2097 5936 l
-2102 5936 l
-S
-2021 2007 m
-2026 2007 l
-2030 2007 l
-2033 2005 l
-2035 2003 l
-2039 2003 l
-2044 2003 l
-2046 2001 l
-2048 1999 l
-2053 1999 l
-2057 1999 l
-2059 1996 l
-2062 1994 l
-S
-2021 5909 m
-2024 5911 l
-2026 5913 l
-2030 5913 l
-2035 5913 l
-2037 5916 l
-2039 5918 l
-2044 5918 l
-2048 5918 l
-2050 5920 l
-S
-2062 5922 m
-2057 5922 l
-2053 5922 l
-2050 5920 l
-S
-1992 2019 m
-1995 2016 l
-1999 2016 l
-2003 2016 l
-2006 2014 l
-2008 2012 l
-2012 2012 l
-2017 2012 l
-2019 2010 l
-2021 2007 l
-S
-1981 2025 m
-1983 2023 l
-1986 2021 l
-1990 2021 l
-1992 2019 l
-S
-1981 5895 m
-1983 5898 l
-1986 5900 l
-1990 5900 l
-1995 5900 l
-1997 5902 l
-1999 5904 l
-2003 5904 l
-2008 5904 l
-2010 5907 l
-2012 5909 l
-2017 5909 l
-2021 5909 l
-S
-1941 2039 m
-1945 2039 l
-1948 2037 l
-1950 2034 l
-1954 2034 l
-1957 2032 l
-1959 2030 l
-1963 2030 l
-1968 2030 l
-1970 2028 l
-1972 2025 l
-1977 2025 l
-1981 2025 l
-S
-1941 5882 m
-1945 5882 l
-1948 5884 l
-1950 5887 l
-1954 5887 l
-1959 5887 l
-1961 5889 l
-1963 5891 l
-1968 5891 l
-1970 5893 l
-1972 5895 l
-1977 5895 l
-1981 5895 l
-S
-1901 2057 m
-1903 2054 l
-1905 2052 l
-1910 2052 l
-1912 2050 l
-1914 2048 l
-1919 2048 l
-1923 2048 l
-1925 2045 l
-1928 2043 l
-1932 2043 l
-1934 2041 l
-1936 2039 l
-1941 2039 l
-S
-1901 5864 m
-1903 5866 l
-1905 5869 l
-1910 5869 l
-1914 5869 l
-1916 5871 l
-1919 5873 l
-1923 5873 l
-1925 5875 l
-1928 5878 l
-1932 5878 l
-1936 5878 l
-1939 5880 l
-S
-1941 5882 m
-1939 5880 l
-S
-1890 2059 m
-1892 2057 l
-1896 2057 l
-1901 2057 l
-S
-1860 2075 m
-1863 2072 l
-1865 2070 l
-1869 2070 l
-1872 2068 l
-1874 2066 l
-1878 2066 l
-1881 2063 l
-1883 2061 l
-1887 2061 l
-1890 2059 l
-S
-1860 5846 m
-1863 5849 l
-1865 5851 l
-1869 5851 l
-1872 5853 l
-1874 5855 l
-1878 5855 l
-1881 5857 l
-1883 5860 l
-1887 5860 l
-1892 5860 l
-1894 5862 l
-1896 5864 l
-1901 5864 l
-S
-1820 2092 m
-1823 2090 l
-1825 2088 l
-1829 2088 l
-1831 2086 l
-1834 2083 l
-1838 2083 l
-1840 2081 l
-1843 2079 l
-1847 2079 l
-1849 2077 l
-1852 2075 l
-1856 2075 l
-1860 2075 l
-S
-1820 5828 m
-1823 5831 l
-1825 5833 l
-1829 5833 l
-1831 5835 l
-1834 5837 l
-1838 5837 l
-1840 5840 l
-S
-1840 5840 m
-1843 5842 l
-1847 5842 l
-1852 5842 l
-1854 5844 l
-1856 5846 l
-1860 5846 l
-S
-1800 2099 m
-1802 2097 l
-1807 2097 l
-1811 2097 l
-1814 2095 l
-1816 2092 l
-1820 2092 l
-S
-1780 2110 m
-1782 2108 l
-1785 2106 l
-1789 2106 l
-1791 2104 l
-1793 2101 l
-1798 2101 l
-1800 2099 l
-S
-1780 5811 m
-1785 5811 l
-1787 5813 l
-1789 5815 l
-1793 5815 l
-1796 5817 l
-1798 5819 l
-1802 5819 l
-1805 5822 l
-1807 5824 l
-1811 5824 l
-1814 5826 l
-1816 5828 l
-1820 5828 l
-S
-1740 2128 m
-1744 2128 l
-1747 2126 l
-1749 2124 l
-1753 2124 l
-1755 2121 l
-1758 2119 l
-1762 2119 l
-1764 2117 l
-1767 2115 l
-1771 2115 l
-1773 2112 l
-1776 2110 l
-1780 2110 l
-S
-1740 5788 m
-1742 5790 l
-1744 5793 l
-1749 5793 l
-1751 5795 l
-1753 5797 l
-1758 5797 l
-1760 5799 l
-S
-1760 5799 m
-1762 5802 l
-1767 5802 l
-1769 5804 l
-1771 5806 l
-1776 5806 l
-1778 5808 l
-1780 5811 l
-S
-1724 2139 m
-1726 2137 l
-1731 2137 l
-1733 2135 l
-1735 2133 l
-1738 2130 l
-1740 2128 l
-S
-1700 2150 m
-1704 2150 l
-1706 2148 l
-1709 2146 l
-1713 2146 l
-1715 2144 l
-1717 2142 l
-1722 2142 l
-1724 2139 l
-S
-1700 5770 m
-1704 5770 l
-1706 5773 l
-1709 5775 l
-1713 5775 l
-1715 5777 l
-1717 5779 l
-1722 5779 l
-1724 5781 l
-1726 5784 l
-1731 5784 l
-1733 5786 l
-1735 5788 l
-1740 5788 l
-S
-1659 2173 m
-1664 2173 l
-1666 2171 l
-1668 2168 l
-1673 2168 l
-1675 2166 l
-1677 2164 l
-1682 2164 l
-1684 2162 l
-1686 2159 l
-1688 2157 l
-1691 2155 l
-1695 2155 l
-1697 2153 l
-1700 2150 l
-S
-1659 5744 m
-1662 5746 l
-1664 5748 l
-1666 5750 l
-1668 5752 l
-1673 5752 l
-1675 5755 l
-1677 5757 l
-1682 5757 l
-1684 5759 l
-S
-1684 5759 m
-1686 5761 l
-1691 5761 l
-1693 5764 l
-1695 5766 l
-1697 5768 l
-1700 5770 l
-S
-1653 2180 m
-1655 2177 l
-1657 2175 l
-1659 2173 l
-S
-1619 2200 m
-1621 2197 l
-1624 2195 l
-1628 2195 l
-1630 2193 l
-1633 2191 l
-1635 2188 l
-1637 2186 l
-1642 2186 l
-1644 2184 l
-1646 2182 l
-1650 2182 l
-1653 2180 l
-S
-1619 5721 m
-1621 5723 l
-1624 5726 l
-1628 5726 l
-1630 5728 l
-1633 5730 l
-1637 5730 l
-1639 5732 l
-1642 5735 l
-1644 5737 l
-1646 5739 l
-1650 5739 l
-1653 5741 l
-1655 5744 l
-1659 5744 l
-S
-1586 2220 m
-1588 2218 l
-1590 2215 l
-1592 2213 l
-1597 2213 l
-1599 2211 l
-1601 2209 l
-1606 2209 l
-1608 2206 l
-1610 2204 l
-1612 2202 l
-1615 2200 l
-1619 2200 l
-S
-1579 2222 m
-1583 2222 l
-1586 2220 l
-S
-1579 5694 m
-1581 5697 l
-1583 5699 l
-1586 5701 l
-1588 5703 l
-1592 5703 l
-1595 5706 l
-1597 5708 l
-1599 5710 l
-1601 5712 l
-1606 5712 l
-1608 5714 l
-1610 5717 l
-1615 5717 l
-1617 5719 l
-S
-1619 5721 m
-1617 5719 l
-S
-1579 2222 m
-1577 2224 l
-1574 2226 l
-1572 2229 l
-1570 2231 l
-1566 2231 l
-1563 2233 l
-1561 2235 l
-1559 2238 l
-1557 2240 l
-1552 2240 l
-1550 2242 l
-1548 2244 l
-1545 2247 l
-1543 2249 l
-1539 2249 l
-S
-1539 5672 m
-1543 5672 l
-1545 5674 l
-1548 5676 l
-1550 5679 l
-S
-1550 5679 m
-1552 5681 l
-1557 5681 l
-1559 5683 l
-1561 5685 l
-1563 5688 l
-1566 5690 l
-1570 5690 l
-1572 5692 l
-1574 5694 l
-1579 5694 l
-S
-1523 2260 m
-1525 2258 l
-1530 2258 l
-1532 2256 l
-1534 2253 l
-1536 2251 l
-1539 2249 l
-S
-1499 2280 m
-1501 2278 l
-1503 2276 l
-1505 2273 l
-1507 2271 l
-1510 2269 l
-1512 2267 l
-1516 2267 l
-1519 2264 l
-1521 2262 l
-1523 2260 l
-S
-1499 5641 m
-1501 5643 l
-1503 5645 l
-1505 5647 l
-1507 5650 l
-1512 5650 l
-1514 5652 l
-1516 5654 l
-1519 5656 l
-1521 5659 l
-1525 5659 l
-1528 5661 l
-1530 5663 l
-1532 5665 l
-1534 5668 l
-1536 5670 l
-1539 5672 l
-S
-1469 2300 m
-1472 2298 l
-1474 2296 l
-1476 2293 l
-1478 2291 l
-1481 2289 l
-1485 2289 l
-1487 2287 l
-1490 2285 l
-1492 2282 l
-1494 2280 l
-1499 2280 l
-S
-1458 2307 m
-1461 2305 l
-1463 2302 l
-1467 2302 l
-1469 2300 l
-S
-1458 5614 m
-1463 5614 l
-1465 5616 l
-1467 5618 l
-1469 5621 l
-1472 5623 l
-1474 5625 l
-1476 5627 l
-1481 5627 l
-1483 5630 l
-1485 5632 l
-1487 5634 l
-1490 5636 l
-1492 5638 l
-S
-1499 5641 m
-1494 5641 l
-1492 5638 l
-S
-1418 2338 m
-1420 2336 l
-1423 2334 l
-1425 2331 l
-1427 2329 l
-1431 2329 l
-1434 2327 l
-1436 2325 l
-1438 2323 l
-1440 2320 l
-1443 2318 l
-1445 2316 l
-1449 2316 l
-1452 2314 l
-1454 2311 l
-1456 2309 l
-1458 2307 l
-S
-1418 5583 m
-1420 5585 l
-1423 5587 l
-1427 5587 l
-1429 5589 l
-1431 5592 l
-1434 5594 l
-1436 5596 l
-1438 5598 l
-S
-1438 5598 m
-1440 5601 l
-1445 5601 l
-1447 5603 l
-1449 5605 l
-1452 5607 l
-1454 5609 l
-1456 5612 l
-1458 5614 l
-S
-1416 2340 m
-1418 2338 l
-S
-1378 2369 m
-1380 2367 l
-1382 2365 l
-1387 2365 l
-1389 2363 l
-1391 2361 l
-1393 2358 l
-1396 2356 l
-1398 2354 l
-1400 2352 l
-1402 2349 l
-1405 2347 l
-1409 2347 l
-1411 2345 l
-1414 2343 l
-1416 2340 l
-S
-1378 5551 m
-1382 5551 l
-1385 5554 l
-1387 5556 l
-1389 5558 l
-S
-1389 5558 m
-1391 5560 l
-1393 5563 l
-1396 5565 l
-1398 5567 l
-1400 5569 l
-1405 5569 l
-1407 5571 l
-1409 5574 l
-1411 5576 l
-1414 5578 l
-1416 5580 l
-1418 5583 l
-S
-1367 2381 m
-1369 2378 l
-1371 2376 l
-1373 2374 l
-1376 2372 l
-1378 2369 l
-S
-1338 2405 m
-1340 2403 l
-1342 2401 l
-1344 2399 l
-1347 2396 l
-1349 2394 l
-1351 2392 l
-1353 2390 l
-1355 2387 l
-1360 2387 l
-1362 2385 l
-1364 2383 l
-1367 2381 l
-S
-1338 5516 m
-1340 5518 l
-S
-1340 5518 m
-1342 5520 l
-1344 5522 l
-1347 5525 l
-1351 5525 l
-1353 5527 l
-1355 5529 l
-1358 5531 l
-1360 5533 l
-1362 5536 l
-1364 5538 l
-1367 5540 l
-1369 5542 l
-1371 5545 l
-1373 5547 l
-1376 5549 l
-1378 5551 l
-S
-1318 2421 m
-1320 2419 l
-1324 2419 l
-1326 2416 l
-1329 2414 l
-1331 2412 l
-1333 2410 l
-1335 2407 l
-1338 2405 l
-S
-1297 2441 m
-1300 2439 l
-1302 2436 l
-1304 2434 l
-1306 2432 l
-1309 2430 l
-1311 2428 l
-1313 2425 l
-1315 2423 l
-1318 2421 l
-S
-1297 5480 m
-1300 5482 l
-1302 5484 l
-1304 5487 l
-1306 5489 l
-1309 5491 l
-1311 5493 l
-1315 5493 l
-1318 5495 l
-1320 5498 l
-1322 5500 l
-1324 5502 l
-1326 5504 l
-1329 5507 l
-1331 5509 l
-1333 5511 l
-1335 5513 l
-1338 5516 l
-S
-1277 2461 m
-1280 2459 l
-1282 2457 l
-1284 2454 l
-1286 2452 l
-1288 2450 l
-1291 2448 l
-1293 2445 l
-1295 2443 l
-1297 2441 l
-S
-1257 2481 m
-1259 2479 l
-1262 2477 l
-1264 2474 l
-1266 2472 l
-1268 2470 l
-1271 2468 l
-1273 2466 l
-1275 2463 l
-1277 2461 l
-S
-1257 5440 m
-1259 5442 l
-1262 5444 l
-1264 5446 l
-1266 5449 l
-1268 5451 l
-1271 5453 l
-1273 5455 l
-1275 5457 l
-1277 5460 l
-1280 5462 l
-1282 5464 l
-1284 5466 l
-1286 5469 l
-1288 5471 l
-1291 5473 l
-1293 5475 l
-1295 5478 l
-S
-1297 5480 m
-1295 5478 l
-S
-1233 2501 m
-1235 2499 l
-1237 2497 l
-1239 2495 l
-1242 2492 l
-1244 2490 l
-1246 2488 l
-1248 2486 l
-1250 2483 l
-1253 2481 l
-1257 2481 l
-S
-1217 2517 m
-1219 2515 l
-1221 2512 l
-1224 2510 l
-1226 2508 l
-1228 2506 l
-1230 2504 l
-1233 2501 l
-S
-1217 5399 m
-1219 5402 l
-1221 5404 l
-1224 5406 l
-1226 5408 l
-1228 5411 l
-1230 5413 l
-1233 5415 l
-1235 5417 l
-1237 5420 l
-1239 5422 l
-1242 5424 l
-1244 5426 l
-1246 5428 l
-1248 5431 l
-1250 5433 l
-1253 5435 l
-1255 5437 l
-S
-1257 5440 m
-1255 5437 l
-S
-1197 2542 m
-1199 2539 l
-1201 2537 l
-1204 2535 l
-1206 2533 l
-1208 2530 l
-1210 2528 l
-1212 2526 l
-1215 2524 l
-1215 2519 l
-1217 2517 l
-S
-1177 2562 m
-1179 2559 l
-1181 2557 l
-1183 2555 l
-1186 2553 l
-1188 2550 l
-1190 2548 l
-1192 2546 l
-1195 2544 l
-1197 2542 l
-S
-1177 5359 m
-1179 5361 l
-1181 5364 l
-1183 5366 l
-1186 5368 l
-1188 5370 l
-1190 5373 l
-1192 5375 l
-1195 5377 l
-1197 5379 l
-1199 5382 l
-1201 5384 l
-1204 5386 l
-1206 5388 l
-1208 5390 l
-1210 5393 l
-1212 5395 l
-1215 5397 l
-S
-1217 5399 m
-1215 5397 l
-S
-1157 2582 m
-1159 2579 l
-1161 2577 l
-1163 2575 l
-1166 2573 l
-1168 2571 l
-1170 2568 l
-1172 2566 l
-1175 2564 l
-1177 2562 l
-S
-1137 2606 m
-1139 2604 l
-1141 2602 l
-1143 2600 l
-1145 2597 l
-1148 2595 l
-1150 2593 l
-1152 2591 l
-1152 2586 l
-1154 2584 l
-1157 2582 l
-S
-1137 5314 m
-1139 5317 l
-S
-1139 5317 m
-1141 5319 l
-1143 5321 l
-1145 5323 l
-1148 5326 l
-1150 5328 l
-1152 5330 l
-1154 5332 l
-1157 5335 l
-1159 5337 l
-1161 5339 l
-1161 5344 l
-1163 5346 l
-1166 5348 l
-1168 5350 l
-1170 5352 l
-1172 5355 l
-1175 5357 l
-S
-1177 5359 m
-1175 5357 l
-S
-1125 2622 m
-1125 2617 l
-1128 2615 l
-1130 2613 l
-1132 2611 l
-1134 2609 l
-1137 2606 l
-S
-1096 2655 m
-1099 2653 l
-1099 2649 l
-1101 2647 l
-1103 2644 l
-1105 2642 l
-1107 2640 l
-1110 2638 l
-1112 2635 l
-1114 2633 l
-1116 2631 l
-1119 2629 l
-1121 2626 l
-1123 2624 l
-1125 2622 l
-S
-1096 5265 m
-1099 5268 l
-1101 5270 l
-1103 5272 l
-1103 5277 l
-S
-1103 5277 m
-1105 5279 l
-1107 5281 l
-1110 5283 l
-1112 5285 l
-1114 5288 l
-1116 5290 l
-1119 5292 l
-1121 5294 l
-1123 5297 l
-1125 5299 l
-1128 5301 l
-1130 5303 l
-1130 5308 l
-1132 5310 l
-1134 5312 l
-1137 5314 l
-S
-1090 2662 m
-1092 2660 l
-1094 2658 l
-1096 2655 l
-S
-1090 2662 m
-1087 2664 l
-1085 2667 l
-1083 2669 l
-1081 2671 l
-1081 2676 l
-1078 2678 l
-1076 2680 l
-1074 2682 l
-1072 2685 l
-1069 2687 l
-1067 2689 l
-1065 2691 l
-1063 2693 l
-1063 2698 l
-1061 2700 l
-1058 2702 l
-S
-1056 2705 m
-1058 2702 l
-S
-1056 5216 m
-1058 5218 l
-1061 5221 l
-1063 5223 l
-1065 5225 l
-1067 5227 l
-1067 5232 l
-1069 5234 l
-1072 5236 l
-S
-1072 5236 m
-1074 5239 l
-1076 5241 l
-1078 5243 l
-1081 5245 l
-1083 5247 l
-1085 5250 l
-1085 5254 l
-1087 5256 l
-1090 5259 l
-1092 5261 l
-1094 5263 l
-1096 5265 l
-S
-1056 2705 m
-1054 2707 l
-1052 2709 l
-1049 2711 l
-1049 2716 l
-1047 2718 l
-1045 2720 l
-1043 2723 l
-1040 2725 l
-1038 2727 l
-1036 2729 l
-1036 2734 l
-1034 2736 l
-1031 2738 l
-1029 2740 l
-1027 2743 l
-S
-1016 2758 m
-1018 2756 l
-1020 2754 l
-1023 2752 l
-1023 2747 l
-1025 2745 l
-1027 2743 l
-S
-1016 5163 m
-1018 5165 l
-1020 5167 l
-1023 5169 l
-1025 5171 l
-1027 5174 l
-1027 5178 l
-1029 5180 l
-1031 5183 l
-1034 5185 l
-1036 5187 l
-1038 5189 l
-1040 5192 l
-1040 5196 l
-S
-1040 5196 m
-1043 5198 l
-1045 5201 l
-1047 5203 l
-1049 5205 l
-1052 5207 l
-1054 5209 l
-1054 5214 l
-1056 5216 l
-S
-1000 2783 m
-1000 2778 l
-1002 2776 l
-1005 2774 l
-1007 2772 l
-1009 2769 l
-1011 2767 l
-1014 2765 l
-1014 2760 l
-1016 2758 l
-S
-976 2816 m
-978 2814 l
-980 2812 l
-982 2810 l
-982 2805 l
-985 2803 l
-987 2801 l
-989 2798 l
-991 2796 l
-991 2792 l
-994 2790 l
-996 2787 l
-998 2785 l
-1000 2783 l
-S
-976 5104 m
-978 5107 l
-980 5109 l
-982 5111 l
-982 5116 l
-S
-982 5116 m
-985 5118 l
-987 5120 l
-989 5122 l
-991 5125 l
-994 5127 l
-996 5129 l
-996 5133 l
-998 5136 l
-1000 5138 l
-1002 5140 l
-1005 5142 l
-1005 5147 l
-1007 5149 l
-1009 5151 l
-1011 5154 l
-1014 5156 l
-S
-1014 5156 m
-1014 5160 l
-1016 5163 l
-S
-973 2823 m
-973 2819 l
-976 2816 l
-S
-973 2823 m
-971 2825 l
-969 2828 l
-967 2830 l
-964 2832 l
-964 2836 l
-962 2839 l
-960 2841 l
-958 2843 l
-956 2845 l
-956 2850 l
-953 2852 l
-951 2854 l
-951 2859 l
-949 2861 l
-947 2863 l
-S
-935 2879 m
-938 2877 l
-940 2874 l
-942 2872 l
-942 2868 l
-944 2866 l
-947 2863 l
-S
-935 5037 m
-938 5040 l
-938 5044 l
-940 5046 l
-942 5049 l
-942 5053 l
-944 5055 l
-947 5058 l
-949 5060 l
-951 5062 l
-951 5066 l
-953 5069 l
-956 5071 l
-958 5073 l
-960 5075 l
-S
-960 5075 m
-960 5080 l
-962 5082 l
-964 5084 l
-964 5089 l
-967 5091 l
-969 5093 l
-971 5096 l
-973 5098 l
-973 5102 l
-976 5104 l
-S
-920 2903 m
-922 2901 l
-924 2899 l
-926 2897 l
-929 2895 l
-929 2890 l
-931 2888 l
-933 2886 l
-933 2881 l
-935 2879 l
-S
-920 2903 m
-920 2908 l
-918 2910 l
-915 2912 l
-915 2917 l
-913 2919 l
-911 2921 l
-909 2924 l
-906 2926 l
-906 2930 l
-904 2933 l
-902 2935 l
-902 2939 l
-900 2941 l
-897 2944 l
-S
-895 2950 m
-897 2948 l
-897 2944 l
-S
-895 4970 m
-897 4973 l
-897 4977 l
-900 4979 l
-902 4982 l
-902 4986 l
-904 4988 l
-906 4990 l
-909 4993 l
-911 4995 l
-S
-911 4995 m
-911 4999 l
-913 5002 l
-915 5004 l
-915 5008 l
-918 5011 l
-920 5013 l
-922 5015 l
-924 5017 l
-924 5022 l
-926 5024 l
-929 5026 l
-929 5031 l
-931 5033 l
-933 5035 l
-S
-935 5037 m
-933 5035 l
-S
-875 2984 m
-877 2982 l
-880 2979 l
-880 2975 l
-882 2973 l
-884 2971 l
-884 2966 l
-886 2964 l
-888 2962 l
-888 2957 l
-891 2955 l
-893 2953 l
-895 2950 l
-S
-875 2984 m
-875 2988 l
-873 2991 l
-871 2993 l
-871 2997 l
-868 3000 l
-866 3002 l
-866 3006 l
-864 3009 l
-862 3011 l
-862 3015 l
-859 3017 l
-857 3020 l
-857 3024 l
-S
-855 3026 m
-857 3024 l
-S
-855 4894 m
-857 4897 l
-857 4901 l
-859 4903 l
-862 4906 l
-862 4910 l
-864 4912 l
-866 4915 l
-S
-866 4915 m
-866 4919 l
-868 4921 l
-871 4923 l
-871 4928 l
-873 4930 l
-875 4932 l
-875 4937 l
-877 4939 l
-880 4941 l
-880 4946 l
-882 4948 l
-884 4950 l
-884 4955 l
-S
-884 4955 m
-886 4957 l
-888 4959 l
-891 4961 l
-893 4964 l
-893 4968 l
-895 4970 l
-S
-855 3026 m
-853 3029 l
-851 3031 l
-848 3033 l
-848 3038 l
-846 3040 l
-844 3042 l
-844 3047 l
-844 3051 l
-842 3053 l
-839 3055 l
-839 3060 l
-837 3062 l
-835 3064 l
-S
-835 3064 m
-835 3069 l
-833 3071 l
-830 3073 l
-830 3078 l
-828 3080 l
-826 3082 l
-826 3087 l
-824 3089 l
-821 3091 l
-821 3096 l
-819 3098 l
-817 3100 l
-817 3105 l
-S
-815 3107 m
-817 3105 l
-S
-815 4814 m
-817 4816 l
-817 4821 l
-819 4823 l
-821 4825 l
-821 4830 l
-824 4832 l
-826 4834 l
-S
-826 4834 m
-826 4839 l
-828 4841 l
-830 4843 l
-830 4847 l
-833 4850 l
-835 4852 l
-835 4856 l
-837 4859 l
-839 4861 l
-839 4865 l
-842 4868 l
-844 4870 l
-844 4874 l
-S
-844 4874 m
-846 4877 l
-848 4879 l
-848 4883 l
-851 4885 l
-853 4888 l
-853 4892 l
-855 4894 l
-S
-815 3107 m
-813 3109 l
-813 3114 l
-810 3116 l
-808 3118 l
-808 3122 l
-808 3127 l
-806 3129 l
-804 3131 l
-804 3136 l
-801 3138 l
-799 3140 l
-799 3145 l
-S
-799 3145 m
-797 3147 l
-795 3149 l
-795 3154 l
-795 3158 l
-792 3160 l
-790 3163 l
-790 3167 l
-788 3169 l
-786 3172 l
-786 3176 l
-786 3181 l
-783 3183 l
-781 3185 l
-S
-775 3201 m
-777 3198 l
-777 3194 l
-779 3192 l
-781 3190 l
-781 3185 l
-S
-775 4716 m
-777 4718 l
-777 4722 l
-777 4727 l
-779 4729 l
-781 4731 l
-781 4736 l
-783 4738 l
-786 4740 l
-786 4745 l
-786 4749 l
-788 4751 l
-790 4754 l
-S
-790 4754 m
-790 4758 l
-792 4760 l
-795 4763 l
-795 4767 l
-795 4772 l
-797 4774 l
-799 4776 l
-799 4780 l
-801 4783 l
-804 4785 l
-804 4789 l
-806 4792 l
-808 4794 l
-S
-808 4794 m
-808 4798 l
-810 4801 l
-813 4803 l
-813 4807 l
-813 4812 l
-815 4814 l
-S
-768 3225 m
-768 3221 l
-768 3216 l
-770 3214 l
-772 3212 l
-772 3207 l
-772 3203 l
-775 3201 l
-S
-768 3225 m
-766 3227 l
-763 3230 l
-763 3234 l
-761 3236 l
-759 3239 l
-759 3243 l
-759 3248 l
-757 3250 l
-754 3252 l
-754 3257 l
-754 3261 l
-752 3263 l
-750 3265 l
-S
-750 3265 m
-750 3270 l
-750 3274 l
-748 3277 l
-745 3279 l
-745 3283 l
-743 3286 l
-741 3288 l
-741 3292 l
-741 3297 l
-739 3299 l
-737 3301 l
-737 3306 l
-S
-734 3312 m
-737 3310 l
-737 3306 l
-S
-734 4604 m
-737 4606 l
-737 4611 l
-737 4615 l
-739 4617 l
-741 4620 l
-741 4624 l
-741 4629 l
-743 4631 l
-745 4633 l
-S
-745 4633 m
-745 4637 l
-745 4642 l
-748 4644 l
-750 4646 l
-750 4651 l
-750 4655 l
-752 4658 l
-754 4660 l
-754 4664 l
-754 4669 l
-757 4671 l
-759 4673 l
-S
-759 4673 m
-759 4678 l
-759 4682 l
-761 4684 l
-763 4687 l
-763 4691 l
-766 4693 l
-768 4696 l
-768 4700 l
-768 4704 l
-770 4707 l
-772 4709 l
-772 4713 l
-S
-775 4716 m
-772 4713 l
-S
-723 3346 m
-725 3344 l
-728 3341 l
-728 3337 l
-728 3333 l
-728 3328 l
-730 3326 l
-732 3324 l
-732 3319 l
-732 3315 l
-734 3312 l
-S
-723 3346 m
-723 3350 l
-723 3355 l
-721 3357 l
-719 3359 l
-719 3364 l
-719 3368 l
-716 3371 l
-714 3373 l
-714 3377 l
-714 3382 l
-714 3386 l
-S
-714 3386 m
-712 3388 l
-710 3391 l
-710 3395 l
-710 3400 l
-708 3402 l
-705 3404 l
-705 3408 l
-705 3413 l
-705 3417 l
-703 3420 l
-701 3422 l
-701 3426 l
-S
-694 3451 m
-696 3449 l
-696 3444 l
-696 3440 l
-696 3435 l
-699 3433 l
-701 3431 l
-701 3426 l
-S
-694 4470 m
-696 4472 l
-S
-696 4472 m
-696 4477 l
-696 4481 l
-699 4483 l
-701 4486 l
-701 4490 l
-701 4494 l
-701 4499 l
-703 4501 l
-705 4503 l
-705 4508 l
-705 4512 l
-S
-705 4512 m
-705 4517 l
-708 4519 l
-710 4521 l
-710 4526 l
-710 4530 l
-712 4532 l
-714 4535 l
-714 4539 l
-714 4544 l
-714 4548 l
-716 4550 l
-719 4553 l
-S
-719 4553 m
-719 4557 l
-719 4561 l
-721 4564 l
-723 4566 l
-723 4570 l
-723 4575 l
-725 4577 l
-728 4579 l
-728 4584 l
-728 4588 l
-730 4591 l
-732 4593 l
-S
-732 4593 m
-732 4597 l
-732 4602 l
-734 4604 l
-S
-692 3467 m
-692 3462 l
-692 3458 l
-692 3453 l
-694 3451 l
-S
-692 3467 m
-690 3469 l
-687 3471 l
-687 3476 l
-687 3480 l
-687 3484 l
-685 3487 l
-683 3489 l
-683 3493 l
-683 3498 l
-683 3502 l
-683 3507 l
-S
-683 3507 m
-681 3509 l
-678 3511 l
-678 3516 l
-678 3520 l
-678 3525 l
-676 3527 l
-674 3529 l
-674 3534 l
-674 3538 l
-674 3543 l
-674 3547 l
-S
-674 3547 m
-672 3549 l
-670 3551 l
-670 3556 l
-670 3560 l
-670 3565 l
-670 3569 l
-667 3572 l
-665 3574 l
-665 3578 l
-665 3583 l
-665 3587 l
-S
-665 3587 m
-665 3592 l
-665 3596 l
-663 3598 l
-661 3601 l
-661 3605 l
-661 3610 l
-661 3614 l
-661 3619 l
-658 3621 l
-656 3623 l
-656 3627 l
-S
-654 3652 m
-656 3650 l
-656 3645 l
-656 3641 l
-656 3636 l
-656 3632 l
-656 3627 l
-S
-654 4269 m
-656 4271 l
-S
-656 4271 m
-656 4275 l
-656 4280 l
-656 4284 l
-656 4289 l
-656 4293 l
-658 4296 l
-661 4298 l
-661 4302 l
-661 4307 l
-661 4311 l
-S
-661 4311 m
-661 4316 l
-661 4320 l
-663 4322 l
-665 4325 l
-665 4329 l
-665 4334 l
-665 4338 l
-665 4342 l
-665 4347 l
-667 4349 l
-670 4351 l
-S
-670 4351 m
-670 4356 l
-670 4360 l
-670 4365 l
-670 4369 l
-672 4372 l
-674 4374 l
-674 4378 l
-674 4383 l
-674 4387 l
-676 4389 l
-678 4392 l
-S
-678 4392 m
-678 4396 l
-678 4401 l
-678 4405 l
-678 4410 l
-681 4412 l
-683 4414 l
-683 4418 l
-683 4423 l
-683 4427 l
-685 4430 l
-687 4432 l
-S
-687 4432 m
-687 4436 l
-687 4441 l
-687 4445 l
-687 4450 l
-690 4452 l
-692 4454 l
-692 4459 l
-692 4463 l
-692 4468 l
-694 4470 l
-S
-652 3668 m
-652 3663 l
-652 3659 l
-652 3654 l
-654 3652 l
-S
-652 3668 m
-652 3672 l
-652 3677 l
-652 3681 l
-649 3683 l
-647 3686 l
-647 3690 l
-647 3694 l
-647 3699 l
-647 3703 l
-647 3708 l
-S
-647 3708 m
-647 3712 l
-647 3717 l
-645 3719 l
-643 3721 l
-643 3726 l
-643 3730 l
-643 3735 l
-643 3739 l
-643 3744 l
-643 3748 l
-S
-643 3748 m
-643 3753 l
-643 3757 l
-640 3759 l
-638 3762 l
-638 3766 l
-638 3770 l
-638 3775 l
-638 3779 l
-638 3784 l
-638 3788 l
-S
-638 3788 m
-638 3793 l
-638 3797 l
-638 3802 l
-638 3806 l
-638 3811 l
-636 3813 l
-634 3815 l
-634 3820 l
-634 3824 l
-634 3829 l
-S
-634 3829 m
-634 3833 l
-634 3838 l
-634 3842 l
-634 3846 l
-634 3851 l
-634 3855 l
-634 3860 l
-634 3864 l
-634 3869 l
-S
-634 3869 m
-634 3873 l
-634 3878 l
-634 3882 l
-634 3887 l
-634 3891 l
-634 3896 l
-632 3898 l
-629 3900 l
-629 3905 l
-629 3909 l
-S
-629 3909 m
-629 3913 l
-629 3918 l
-629 3922 l
-629 3927 l
-629 3931 l
-629 3936 l
-629 3940 l
-629 3945 l
-629 3949 l
-S
-629 3949 m
-629 3954 l
-629 3958 l
-629 3963 l
-629 3967 l
-629 3972 l
-629 3976 l
-629 3981 l
-629 3985 l
-629 3989 l
-S
-629 3989 m
-629 3994 l
-629 3998 l
-629 4003 l
-629 4007 l
-629 4012 l
-629 4016 l
-629 4021 l
-632 4023 l
-634 4025 l
-634 4030 l
-S
-634 4030 m
-634 4034 l
-634 4039 l
-634 4043 l
-634 4048 l
-634 4052 l
-634 4056 l
-634 4061 l
-634 4065 l
-634 4070 l
-S
-634 4070 m
-634 4074 l
-634 4079 l
-634 4083 l
-634 4088 l
-634 4092 l
-634 4097 l
-634 4101 l
-634 4106 l
-636 4108 l
-638 4110 l
-S
-638 4110 m
-638 4115 l
-638 4119 l
-638 4124 l
-638 4128 l
-638 4132 l
-638 4137 l
-638 4141 l
-638 4146 l
-638 4150 l
-S
-638 4150 m
-638 4155 l
-638 4159 l
-640 4162 l
-643 4164 l
-643 4168 l
-643 4173 l
-643 4177 l
-643 4182 l
-643 4186 l
-643 4191 l
-S
-643 4191 m
-643 4195 l
-643 4199 l
-645 4202 l
-647 4204 l
-647 4208 l
-647 4213 l
-647 4217 l
-647 4222 l
-647 4226 l
-647 4231 l
-S
-647 4231 m
-647 4235 l
-649 4237 l
-652 4240 l
-652 4244 l
-652 4249 l
-652 4253 l
-652 4258 l
-652 4262 l
-652 4267 l
-654 4269 l
-S
-1 g
-3920 4435 m
-3924 4435 l
-3924 4436 l
-3920 4436 l
-3917 4436 m
-3924 4436 l
-3924 4437 l
-3917 4437 l
-3914 4437 m
-3925 4437 l
-3925 4438 l
-3914 4438 l
-3911 4438 m
-3925 4438 l
-3925 4439 l
-3911 4439 l
-3908 4439 m
-3925 4439 l
-3925 4440 l
-3908 4440 l
-3905 4440 m
-3926 4440 l
-3926 4441 l
-3905 4441 l
-3903 4441 m
-3926 4441 l
-3926 4442 l
-3903 4442 l
-3900 4442 m
-3926 4442 l
-3926 4443 l
-3900 4443 l
-3897 4443 m
-3927 4443 l
-3927 4444 l
-3897 4444 l
-3894 4444 m
-3927 4444 l
-3927 4445 l
-3894 4445 l
-3891 4445 m
-3927 4445 l
-3927 4446 l
-3891 4446 l
-3888 4446 m
-3928 4446 l
-3928 4447 l
-3888 4447 l
-3885 4447 m
-3928 4447 l
-3928 4448 l
-3885 4448 l
-3883 4448 m
-3928 4448 l
-3928 4449 l
-3883 4449 l
-3880 4449 m
-3929 4449 l
-3929 4450 l
-3880 4450 l
-3877 4450 m
-3929 4450 l
-3929 4451 l
-3877 4451 l
-3874 4451 m
-3929 4451 l
-3929 4452 l
-3874 4452 l
-3871 4452 m
-3930 4452 l
-3930 4453 l
-3871 4453 l
-3868 4453 m
-3930 4453 l
-3930 4454 l
-3868 4454 l
-3866 4454 m
-3931 4454 l
-3931 4455 l
-3866 4455 l
-3863 4455 m
-3931 4455 l
-3931 4456 l
-3863 4456 l
-3860 4456 m
-3931 4456 l
-3931 4457 l
-3860 4457 l
-3857 4457 m
-3932 4457 l
-3932 4458 l
-3857 4458 l
-3854 4458 m
-3932 4458 l
-3932 4459 l
-3854 4459 l
-3851 4459 m
-3932 4459 l
-3932 4460 l
-3851 4460 l
-3848 4460 m
-3933 4460 l
-3933 4461 l
-3848 4461 l
-3846 4461 m
-3933 4461 l
-3933 4462 l
-3846 4462 l
-3843 4462 m
-3933 4462 l
-3933 4463 l
-3843 4463 l
-3840 4463 m
-3934 4463 l
-3934 4464 l
-3840 4464 l
-3837 4464 m
-3934 4464 l
-3934 4465 l
-3837 4465 l
-3834 4465 m
-3934 4465 l
-3934 4466 l
-3834 4466 l
-3831 4466 m
-3935 4466 l
-3935 4467 l
-3831 4467 l
-3829 4467 m
-3935 4467 l
-3935 4468 l
-3829 4468 l
-3829 4468 m
-3935 4468 l
-3935 4469 l
-3829 4469 l
-3829 4469 m
-3936 4469 l
-3936 4471 l
-3829 4471 l
-3830 4471 m
-3937 4471 l
-3937 4474 l
-3830 4474 l
-3831 4474 m
-3938 4474 l
-3938 4477 l
-3831 4477 l
-3832 4477 m
-3939 4477 l
-3939 4480 l
-3832 4480 l
-3833 4480 m
-3940 4480 l
-3940 4483 l
-3833 4483 l
-3834 4483 m
-3941 4483 l
-3941 4486 l
-3834 4486 l
-3835 4486 m
-3942 4486 l
-3942 4488 l
-3835 4488 l
-3836 4488 m
-3942 4488 l
-3942 4489 l
-3836 4489 l
-3836 4489 m
-3943 4489 l
-3943 4491 l
-3836 4491 l
-3837 4491 m
-3944 4491 l
-3944 4494 l
-3837 4494 l
-3838 4494 m
-3945 4494 l
-3945 4497 l
-3838 4497 l
-3839 4497 m
-3946 4497 l
-3946 4500 l
-3839 4500 l
-3840 4500 m
-3947 4500 l
-3947 4503 l
-3840 4503 l
-3841 4503 m
-3948 4503 l
-3948 4506 l
-3841 4506 l
-3842 4506 m
-3949 4506 l
-3949 4508 l
-3842 4508 l
-3843 4508 m
-3950 4508 l
-3950 4511 l
-3843 4511 l
-3844 4511 m
-3951 4511 l
-3951 4514 l
-3844 4514 l
-3845 4514 m
-3952 4514 l
-3952 4517 l
-3845 4517 l
-3846 4517 m
-3953 4517 l
-3953 4520 l
-3846 4520 l
-3847 4520 m
-3954 4520 l
-3954 4523 l
-3847 4523 l
-3848 4523 m
-3955 4523 l
-3955 4525 l
-3848 4525 l
-3848 4525 m
-3956 4525 l
-3956 4526 l
-3848 4526 l
-3849 4526 m
-3956 4526 l
-3956 4528 l
-3849 4528 l
-3850 4528 m
-3957 4528 l
-3957 4531 l
-3850 4531 l
-3851 4531 m
-3958 4531 l
-3958 4534 l
-3851 4534 l
-3852 4534 m
-3959 4534 l
-3959 4537 l
-3852 4537 l
-3853 4537 m
-3960 4537 l
-3960 4540 l
-3853 4540 l
-3854 4540 m
-3961 4540 l
-3961 4543 l
-3854 4543 l
-3855 4543 m
-3962 4543 l
-3962 4545 l
-3855 4545 l
-3856 4545 m
-3963 4545 l
-3963 4548 l
-3856 4548 l
-3857 4548 m
-3964 4548 l
-3964 4549 l
-3857 4549 l
-3857 4549 m
-3964 4549 l
-3964 4550 l
-3857 4550 l
-3857 4550 m
-3961 4550 l
-3961 4551 l
-3857 4551 l
-3858 4551 m
-3958 4551 l
-3958 4552 l
-3858 4552 l
-3858 4552 m
-3955 4552 l
-3955 4553 l
-3858 4553 l
-3858 4553 m
-3952 4553 l
-3952 4554 l
-3858 4554 l
-3859 4554 m
-3949 4554 l
-3949 4555 l
-3859 4555 l
-3859 4555 m
-3946 4555 l
-3946 4556 l
-3859 4556 l
-3859 4556 m
-3944 4556 l
-3944 4557 l
-3859 4557 l
-3860 4557 m
-3941 4557 l
-3941 4558 l
-3860 4558 l
-3860 4558 m
-3938 4558 l
-3938 4559 l
-3860 4559 l
-3860 4559 m
-3935 4559 l
-3935 4560 l
-3860 4560 l
-3861 4560 m
-3932 4560 l
-3932 4561 l
-3861 4561 l
-3861 4561 m
-3929 4561 l
-3929 4562 l
-3861 4562 l
-3861 4562 m
-3927 4562 l
-3927 4563 l
-3861 4563 l
-3862 4563 m
-3924 4563 l
-3924 4564 l
-3862 4564 l
-3862 4564 m
-3921 4564 l
-3921 4565 l
-3862 4565 l
-3863 4565 m
-3918 4565 l
-3918 4566 l
-3863 4566 l
-3863 4566 m
-3915 4566 l
-3915 4567 l
-3863 4567 l
-3863 4567 m
-3912 4567 l
-3912 4568 l
-3863 4568 l
-3864 4568 m
-3909 4568 l
-3909 4569 l
-3864 4569 l
-3864 4569 m
-3907 4569 l
-3907 4570 l
-3864 4570 l
-3864 4570 m
-3904 4570 l
-3904 4571 l
-3864 4571 l
-3865 4571 m
-3901 4571 l
-3901 4572 l
-3865 4572 l
-3865 4572 m
-3898 4572 l
-3898 4573 l
-3865 4573 l
-3865 4573 m
-3895 4573 l
-3895 4574 l
-3865 4574 l
-3866 4574 m
-3892 4574 l
-3892 4575 l
-3866 4575 l
-3866 4575 m
-3889 4575 l
-3889 4576 l
-3866 4576 l
-3866 4576 m
-3887 4576 l
-3887 4577 l
-3866 4577 l
-3867 4577 m
-3884 4577 l
-3884 4578 l
-3867 4578 l
-3867 4578 m
-3881 4578 l
-3881 4579 l
-3867 4579 l
-3867 4579 m
-3878 4579 l
-3878 4580 l
-3867 4580 l
-3868 4580 m
-3875 4580 l
-3875 4581 l
-3868 4581 l
-3868 4581 m
-3872 4581 l
-3872 4582 l
-3868 4582 l
-Y
-3963.1 4549 m
-3923 4435 l
-3829 4468 l
-3869 4582 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-3885 4466 m
-3899 4465 l
-3911 4475 l
-3921 4493 l
-3926 4505 l
-3928 4526 l
-3925 4540 l
-3914 4548 l
-3906 4551 l
-3893 4551 l
-3881 4542 l
-3870 4524 l
-3866 4512 l
-3863 4491 l
-3867 4476 l
-3877 4468 l
-3885 4466 l
-S
-1 g
-3085 4470 m
-3095 4470 l
-3095 4471 l
-3085 4471 l
-3085 4471 m
-3102 4471 l
-3102 4472 l
-3085 4472 l
-3085 4472 m
-3109 4472 l
-3109 4473 l
-3085 4473 l
-3085 4473 m
-3116 4473 l
-3116 4474 l
-3085 4474 l
-3085 4474 m
-3123 4474 l
-3123 4475 l
-3085 4475 l
-3085 4475 m
-3130 4475 l
-3130 4476 l
-3085 4476 l
-3085 4476 m
-3137 4476 l
-3137 4477 l
-3085 4477 l
-3084 4477 m
-3144 4477 l
-3144 4478 l
-3084 4478 l
-3084 4478 m
-3150 4478 l
-3150 4479 l
-3084 4479 l
-3084 4479 m
-3157 4479 l
-3157 4480 l
-3084 4480 l
-3084 4480 m
-3164 4480 l
-3164 4481 l
-3084 4481 l
-3084 4481 m
-3171 4481 l
-3171 4482 l
-3084 4482 l
-3084 4482 m
-3178 4482 l
-3178 4483 l
-3084 4483 l
-3084 4483 m
-3185 4483 l
-3185 4484 l
-3084 4484 l
-3083 4484 m
-3192 4484 l
-3192 4485 l
-3083 4485 l
-3083 4485 m
-3199 4485 l
-3199 4486 l
-3083 4486 l
-3083 4486 m
-3206 4486 l
-3206 4487 l
-3083 4487 l
-3083 4487 m
-3213 4487 l
-3213 4488 l
-3083 4488 l
-3083 4488 m
-3220 4488 l
-3220 4489 l
-3083 4489 l
-3083 4489 m
-3227 4489 l
-3227 4490 l
-3083 4490 l
-3083 4490 m
-3234 4490 l
-3234 4491 l
-3083 4491 l
-3082 4491 m
-3241 4491 l
-3241 4492 l
-3082 4492 l
-3082 4492 m
-3248 4492 l
-3248 4493 l
-3082 4493 l
-3082 4493 m
-3255 4493 l
-3255 4494 l
-3082 4494 l
-3082 4494 m
-3262 4494 l
-3262 4495 l
-3082 4495 l
-3082 4495 m
-3268 4495 l
-3268 4496 l
-3082 4496 l
-3082 4496 m
-3269 4496 l
-3269 4497 l
-3082 4497 l
-3082 4497 m
-3268 4497 l
-3268 4498 l
-3082 4498 l
-3081 4498 m
-3268 4498 l
-3268 4504 l
-3081 4504 l
-3081 4504 m
-3267 4504 l
-3267 4505 l
-3081 4505 l
-3080 4505 m
-3267 4505 l
-3267 4511 l
-3080 4511 l
-3080 4511 m
-3266 4511 l
-3266 4512 l
-3080 4512 l
-3079 4512 m
-3266 4512 l
-3266 4518 l
-3079 4518 l
-3079 4518 m
-3265 4518 l
-3265 4519 l
-3079 4519 l
-3078 4519 m
-3265 4519 l
-3265 4525 l
-3078 4525 l
-3078 4525 m
-3264 4525 l
-3264 4526 l
-3078 4526 l
-3077 4526 m
-3264 4526 l
-3264 4532 l
-3077 4532 l
-3077 4532 m
-3263 4532 l
-3263 4533 l
-3077 4533 l
-3076 4533 m
-3263 4533 l
-3263 4539 l
-3076 4539 l
-3076 4539 m
-3262 4539 l
-3262 4540 l
-3076 4540 l
-3075 4540 m
-3262 4540 l
-3262 4546 l
-3075 4546 l
-3075 4546 m
-3261 4546 l
-3261 4547 l
-3075 4547 l
-3074 4547 m
-3261 4547 l
-3261 4553 l
-3074 4553 l
-3074 4553 m
-3260 4553 l
-3260 4554 l
-3074 4554 l
-3073 4554 m
-3260 4554 l
-3260 4560 l
-3073 4560 l
-3073 4560 m
-3259 4560 l
-3259 4561 l
-3073 4561 l
-3072 4561 m
-3259 4561 l
-3259 4567 l
-3072 4567 l
-3072 4567 m
-3258 4567 l
-3258 4568 l
-3072 4568 l
-3071 4568 m
-3258 4568 l
-3258 4574 l
-3071 4574 l
-3071 4574 m
-3257 4574 l
-3257 4575 l
-3071 4575 l
-3070 4575 m
-3257 4575 l
-3257 4581 l
-3070 4581 l
-3070 4581 m
-3256 4581 l
-3256 4582 l
-3070 4582 l
-3069 4582 m
-3256 4582 l
-3256 4588 l
-3069 4588 l
-3069 4588 m
-3255 4588 l
-3255 4590 l
-3069 4590 l
-3069 4590 m
-3255 4590 l
-3255 4591 l
-3069 4591 l
-3076 4591 m
-3255 4591 l
-3255 4592 l
-3076 4592 l
-3083 4592 m
-3255 4592 l
-3255 4593 l
-3083 4593 l
-3090 4593 m
-3255 4593 l
-3255 4594 l
-3090 4594 l
-3097 4594 m
-3255 4594 l
-3255 4595 l
-3097 4595 l
-3104 4595 m
-3254 4595 l
-3254 4596 l
-3104 4596 l
-3111 4596 m
-3254 4596 l
-3254 4597 l
-3111 4597 l
-3118 4597 m
-3254 4597 l
-3254 4598 l
-3118 4598 l
-3125 4598 m
-3254 4598 l
-3254 4599 l
-3125 4599 l
-3132 4599 m
-3254 4599 l
-3254 4600 l
-3132 4600 l
-3139 4600 m
-3254 4600 l
-3254 4601 l
-3139 4601 l
-3146 4601 m
-3254 4601 l
-3254 4602 l
-3146 4602 l
-3153 4602 m
-3253 4602 l
-3253 4603 l
-3153 4603 l
-3160 4603 m
-3253 4603 l
-3253 4604 l
-3160 4604 l
-3167 4604 m
-3253 4604 l
-3253 4605 l
-3167 4605 l
-3174 4605 m
-3253 4605 l
-3253 4606 l
-3174 4606 l
-3181 4606 m
-3253 4606 l
-3253 4607 l
-3181 4607 l
-3188 4607 m
-3253 4607 l
-3253 4608 l
-3188 4608 l
-3195 4608 m
-3253 4608 l
-3253 4609 l
-3195 4609 l
-3202 4609 m
-3252 4609 l
-3252 4610 l
-3202 4610 l
-3209 4610 m
-3252 4610 l
-3252 4611 l
-3209 4611 l
-3216 4611 m
-3252 4611 l
-3252 4612 l
-3216 4612 l
-3223 4612 m
-3252 4612 l
-3252 4613 l
-3223 4613 l
-3230 4613 m
-3252 4613 l
-3252 4614 l
-3230 4614 l
-3237 4614 m
-3252 4614 l
-3252 4615 l
-3237 4615 l
-3244 4615 m
-3252 4615 l
-3252 4616 l
-3244 4616 l
-Y
-3086.1 4469.8 m
-3069 4590 l
-3251 4616 l
-3268 4496 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-3133 4582 m
-3100 4518 l
-3162 4527 l
-S
-3133 4582 m
-3146 4495 l
-S
-3224 4595 m
-3183 4589 l
-3184 4552 l
-3188 4556 l
-3199 4562 l
-3212 4564 l
-3225 4562 l
-3234 4555 l
-3240 4543 l
-3241 4534 l
-3239 4521 l
-3232 4512 l
-3220 4506 l
-3208 4504 l
-3195 4507 l
-3190 4510 l
-3185 4518 l
-S
-1 g
-2354 4208 m
-2358 4208 l
-2358 4209 l
-2354 4209 l
-2354 4209 m
-2360 4209 l
-2360 4210 l
-2354 4210 l
-2353 4210 m
-2362 4210 l
-2362 4211 l
-2353 4211 l
-2353 4211 m
-2364 4211 l
-2364 4212 l
-2353 4212 l
-2352 4212 m
-2366 4212 l
-2366 4213 l
-2352 4213 l
-2352 4213 m
-2368 4213 l
-2368 4214 l
-2352 4214 l
-2351 4214 m
-2370 4214 l
-2370 4215 l
-2351 4215 l
-2351 4215 m
-2372 4215 l
-2372 4216 l
-2351 4216 l
-2350 4216 m
-2374 4216 l
-2374 4217 l
-2350 4217 l
-2350 4217 m
-2376 4217 l
-2376 4218 l
-2350 4218 l
-2349 4218 m
-2378 4218 l
-2378 4219 l
-2349 4219 l
-2349 4219 m
-2380 4219 l
-2380 4220 l
-2349 4220 l
-2348 4220 m
-2382 4220 l
-2382 4221 l
-2348 4221 l
-2348 4221 m
-2384 4221 l
-2384 4222 l
-2348 4222 l
-2347 4222 m
-2386 4222 l
-2386 4223 l
-2347 4223 l
-2347 4223 m
-2388 4223 l
-2388 4224 l
-2347 4224 l
-2346 4224 m
-2390 4224 l
-2390 4225 l
-2346 4225 l
-2346 4225 m
-2392 4225 l
-2392 4226 l
-2346 4226 l
-2345 4226 m
-2394 4226 l
-2394 4227 l
-2345 4227 l
-2345 4227 m
-2396 4227 l
-2396 4228 l
-2345 4228 l
-2344 4228 m
-2398 4228 l
-2398 4229 l
-2344 4229 l
-2344 4229 m
-2400 4229 l
-2400 4230 l
-2344 4230 l
-2343 4230 m
-2402 4230 l
-2402 4231 l
-2343 4231 l
-2343 4231 m
-2404 4231 l
-2404 4232 l
-2343 4232 l
-2342 4232 m
-2406 4232 l
-2406 4233 l
-2342 4233 l
-2342 4233 m
-2408 4233 l
-2408 4234 l
-2342 4234 l
-2341 4234 m
-2410 4234 l
-2410 4235 l
-2341 4235 l
-2341 4235 m
-2412 4235 l
-2412 4236 l
-2341 4236 l
-2340 4236 m
-2414 4236 l
-2414 4237 l
-2340 4237 l
-2340 4237 m
-2416 4237 l
-2416 4238 l
-2340 4238 l
-2339 4238 m
-2418 4238 l
-2418 4239 l
-2339 4239 l
-2339 4239 m
-2420 4239 l
-2420 4240 l
-2339 4240 l
-2338 4240 m
-2422 4240 l
-2422 4241 l
-2338 4241 l
-2338 4241 m
-2424 4241 l
-2424 4242 l
-2338 4242 l
-2337 4242 m
-2426 4242 l
-2426 4243 l
-2337 4243 l
-2337 4243 m
-2428 4243 l
-2428 4244 l
-2337 4244 l
-2336 4244 m
-2430 4244 l
-2430 4245 l
-2336 4245 l
-2336 4245 m
-2432 4245 l
-2432 4246 l
-2336 4246 l
-2335 4246 m
-2434 4246 l
-2434 4247 l
-2335 4247 l
-2335 4247 m
-2436 4247 l
-2436 4248 l
-2335 4248 l
-2334 4248 m
-2438 4248 l
-2438 4249 l
-2334 4249 l
-2334 4249 m
-2440 4249 l
-2440 4250 l
-2334 4250 l
-2333 4250 m
-2442 4250 l
-2442 4251 l
-2333 4251 l
-2333 4251 m
-2444 4251 l
-2444 4252 l
-2333 4252 l
-2332 4252 m
-2446 4252 l
-2446 4253 l
-2332 4253 l
-2332 4253 m
-2448 4253 l
-2448 4254 l
-2332 4254 l
-2331 4254 m
-2450 4254 l
-2450 4255 l
-2331 4255 l
-2331 4255 m
-2452 4255 l
-2452 4256 l
-2331 4256 l
-2330 4256 m
-2454 4256 l
-2454 4257 l
-2330 4257 l
-2330 4257 m
-2456 4257 l
-2456 4258 l
-2330 4258 l
-2329 4258 m
-2458 4258 l
-2458 4259 l
-2329 4259 l
-2329 4259 m
-2460 4259 l
-2460 4260 l
-2329 4260 l
-2328 4260 m
-2462 4260 l
-2462 4261 l
-2328 4261 l
-2328 4261 m
-2464 4261 l
-2464 4262 l
-2328 4262 l
-2327 4262 m
-2466 4262 l
-2466 4263 l
-2327 4263 l
-2327 4263 m
-2468 4263 l
-2468 4264 l
-2327 4264 l
-2326 4264 m
-2470 4264 l
-2470 4265 l
-2326 4265 l
-2326 4265 m
-2472 4265 l
-2472 4266 l
-2326 4266 l
-2325 4266 m
-2474 4266 l
-2474 4267 l
-2325 4267 l
-2325 4267 m
-2476 4267 l
-2476 4268 l
-2325 4268 l
-2324 4268 m
-2478 4268 l
-2478 4269 l
-2324 4269 l
-2324 4269 m
-2480 4269 l
-2480 4270 l
-2324 4270 l
-2323 4270 m
-2482 4270 l
-2482 4271 l
-2323 4271 l
-2323 4271 m
-2484 4271 l
-2484 4272 l
-2323 4272 l
-2322 4272 m
-2486 4272 l
-2486 4273 l
-2322 4273 l
-2322 4273 m
-2488 4273 l
-2488 4274 l
-2322 4274 l
-2321 4274 m
-2490 4274 l
-2490 4275 l
-2321 4275 l
-2321 4275 m
-2492 4275 l
-2492 4276 l
-2321 4276 l
-2320 4276 m
-2494 4276 l
-2494 4277 l
-2320 4277 l
-2320 4277 m
-2496 4277 l
-2496 4278 l
-2320 4278 l
-2319 4278 m
-2498 4278 l
-2498 4279 l
-2319 4279 l
-2319 4279 m
-2500 4279 l
-2500 4280 l
-2319 4280 l
-2318 4280 m
-2502 4280 l
-2502 4281 l
-2318 4281 l
-2318 4281 m
-2504 4281 l
-2504 4282 l
-2318 4282 l
-2317 4282 m
-2506 4282 l
-2506 4283 l
-2317 4283 l
-2317 4283 m
-2508 4283 l
-2508 4284 l
-2317 4284 l
-2316 4284 m
-2510 4284 l
-2510 4285 l
-2316 4285 l
-2316 4285 m
-2512 4285 l
-2512 4286 l
-2316 4286 l
-2315 4286 m
-2514 4286 l
-2514 4287 l
-2315 4287 l
-2315 4287 m
-2516 4287 l
-2516 4288 l
-2315 4288 l
-2314 4288 m
-2518 4288 l
-2518 4289 l
-2314 4289 l
-2314 4289 m
-2520 4289 l
-2520 4290 l
-2314 4290 l
-2313 4290 m
-2520 4290 l
-2520 4292 l
-2313 4292 l
-2312 4292 m
-2519 4292 l
-2519 4294 l
-2312 4294 l
-2311 4294 m
-2518 4294 l
-2518 4296 l
-2311 4296 l
-2310 4296 m
-2517 4296 l
-2517 4298 l
-2310 4298 l
-2309 4298 m
-2516 4298 l
-2516 4300 l
-2309 4300 l
-2308 4300 m
-2515 4300 l
-2515 4302 l
-2308 4302 l
-2307 4302 m
-2514 4302 l
-2514 4304 l
-2307 4304 l
-2306 4304 m
-2513 4304 l
-2513 4306 l
-2306 4306 l
-2305 4306 m
-2512 4306 l
-2512 4308 l
-2305 4308 l
-2304 4308 m
-2511 4308 l
-2511 4310 l
-2304 4310 l
-2303 4310 m
-2510 4310 l
-2510 4312 l
-2303 4312 l
-2302 4312 m
-2509 4312 l
-2509 4314 l
-2302 4314 l
-2301 4314 m
-2508 4314 l
-2508 4316 l
-2301 4316 l
-2301 4316 m
-2508 4316 l
-2508 4317 l
-2301 4317 l
-2303 4317 m
-2507 4317 l
-2507 4318 l
-2303 4318 l
-2305 4318 m
-2506 4318 l
-2506 4319 l
-2305 4319 l
-2307 4319 m
-2506 4319 l
-2506 4320 l
-2307 4320 l
-2309 4320 m
-2505 4320 l
-2505 4321 l
-2309 4321 l
-2311 4321 m
-2505 4321 l
-2505 4322 l
-2311 4322 l
-2313 4322 m
-2504 4322 l
-2504 4323 l
-2313 4323 l
-2315 4323 m
-2504 4323 l
-2504 4324 l
-2315 4324 l
-2317 4324 m
-2503 4324 l
-2503 4325 l
-2317 4325 l
-2319 4325 m
-2503 4325 l
-2503 4326 l
-2319 4326 l
-2321 4326 m
-2502 4326 l
-2502 4327 l
-2321 4327 l
-2323 4327 m
-2502 4327 l
-2502 4328 l
-2323 4328 l
-2325 4328 m
-2501 4328 l
-2501 4329 l
-2325 4329 l
-2327 4329 m
-2501 4329 l
-2501 4330 l
-2327 4330 l
-2329 4330 m
-2500 4330 l
-2500 4331 l
-2329 4331 l
-2331 4331 m
-2500 4331 l
-2500 4332 l
-2331 4332 l
-2333 4332 m
-2499 4332 l
-2499 4333 l
-2333 4333 l
-2335 4333 m
-2499 4333 l
-2499 4334 l
-2335 4334 l
-2337 4334 m
-2498 4334 l
-2498 4335 l
-2337 4335 l
-2339 4335 m
-2498 4335 l
-2498 4336 l
-2339 4336 l
-2341 4336 m
-2497 4336 l
-2497 4337 l
-2341 4337 l
-2343 4337 m
-2497 4337 l
-2497 4338 l
-2343 4338 l
-2345 4338 m
-2496 4338 l
-2496 4339 l
-2345 4339 l
-2347 4339 m
-2496 4339 l
-2496 4340 l
-2347 4340 l
-2349 4340 m
-2495 4340 l
-2495 4341 l
-2349 4341 l
-2351 4341 m
-2495 4341 l
-2495 4342 l
-2351 4342 l
-2353 4342 m
-2494 4342 l
-2494 4343 l
-2353 4343 l
-2355 4343 m
-2494 4343 l
-2494 4344 l
-2355 4344 l
-2357 4344 m
-2493 4344 l
-2493 4345 l
-2357 4345 l
-2359 4345 m
-2493 4345 l
-2493 4346 l
-2359 4346 l
-2361 4346 m
-2492 4346 l
-2492 4347 l
-2361 4347 l
-2363 4347 m
-2492 4347 l
-2492 4348 l
-2363 4348 l
-2365 4348 m
-2491 4348 l
-2491 4349 l
-2365 4349 l
-2367 4349 m
-2491 4349 l
-2491 4350 l
-2367 4350 l
-2369 4350 m
-2490 4350 l
-2490 4351 l
-2369 4351 l
-2371 4351 m
-2490 4351 l
-2490 4352 l
-2371 4352 l
-2373 4352 m
-2489 4352 l
-2489 4353 l
-2373 4353 l
-2375 4353 m
-2489 4353 l
-2489 4354 l
-2375 4354 l
-2377 4354 m
-2488 4354 l
-2488 4355 l
-2377 4355 l
-2379 4355 m
-2488 4355 l
-2488 4356 l
-2379 4356 l
-2381 4356 m
-2487 4356 l
-2487 4357 l
-2381 4357 l
-2383 4357 m
-2487 4357 l
-2487 4358 l
-2383 4358 l
-2385 4358 m
-2486 4358 l
-2486 4359 l
-2385 4359 l
-2387 4359 m
-2486 4359 l
-2486 4360 l
-2387 4360 l
-2389 4360 m
-2485 4360 l
-2485 4361 l
-2389 4361 l
-2391 4361 m
-2485 4361 l
-2485 4362 l
-2391 4362 l
-2393 4362 m
-2484 4362 l
-2484 4363 l
-2393 4363 l
-2395 4363 m
-2484 4363 l
-2484 4364 l
-2395 4364 l
-2397 4364 m
-2483 4364 l
-2483 4365 l
-2397 4365 l
-2399 4365 m
-2483 4365 l
-2483 4366 l
-2399 4366 l
-2401 4366 m
-2482 4366 l
-2482 4367 l
-2401 4367 l
-2403 4367 m
-2482 4367 l
-2482 4368 l
-2403 4368 l
-2405 4368 m
-2481 4368 l
-2481 4369 l
-2405 4369 l
-2407 4369 m
-2481 4369 l
-2481 4370 l
-2407 4370 l
-2409 4370 m
-2480 4370 l
-2480 4371 l
-2409 4371 l
-2411 4371 m
-2480 4371 l
-2480 4372 l
-2411 4372 l
-2413 4372 m
-2479 4372 l
-2479 4373 l
-2413 4373 l
-2415 4373 m
-2479 4373 l
-2479 4374 l
-2415 4374 l
-2417 4374 m
-2478 4374 l
-2478 4375 l
-2417 4375 l
-2419 4375 m
-2478 4375 l
-2478 4376 l
-2419 4376 l
-2421 4376 m
-2477 4376 l
-2477 4377 l
-2421 4377 l
-2423 4377 m
-2477 4377 l
-2477 4378 l
-2423 4378 l
-2425 4378 m
-2476 4378 l
-2476 4379 l
-2425 4379 l
-2427 4379 m
-2476 4379 l
-2476 4380 l
-2427 4380 l
-2429 4380 m
-2475 4380 l
-2475 4381 l
-2429 4381 l
-2431 4381 m
-2475 4381 l
-2475 4382 l
-2431 4382 l
-2433 4382 m
-2474 4382 l
-2474 4383 l
-2433 4383 l
-2435 4383 m
-2474 4383 l
-2474 4384 l
-2435 4384 l
-2437 4384 m
-2473 4384 l
-2473 4385 l
-2437 4385 l
-2439 4385 m
-2473 4385 l
-2473 4386 l
-2439 4386 l
-2441 4386 m
-2472 4386 l
-2472 4387 l
-2441 4387 l
-2443 4387 m
-2472 4387 l
-2472 4388 l
-2443 4388 l
-2445 4388 m
-2471 4388 l
-2471 4389 l
-2445 4389 l
-2447 4389 m
-2471 4389 l
-2471 4390 l
-2447 4390 l
-2449 4390 m
-2470 4390 l
-2470 4391 l
-2449 4391 l
-2451 4391 m
-2470 4391 l
-2470 4392 l
-2451 4392 l
-2453 4392 m
-2469 4392 l
-2469 4393 l
-2453 4393 l
-2455 4393 m
-2469 4393 l
-2469 4394 l
-2455 4394 l
-2457 4394 m
-2468 4394 l
-2468 4395 l
-2457 4395 l
-2459 4395 m
-2468 4395 l
-2468 4396 l
-2459 4396 l
-2461 4396 m
-2467 4396 l
-2467 4397 l
-2461 4397 l
-2463 4397 m
-2467 4397 l
-2467 4398 l
-2463 4398 l
-Y
-2355.3 4208 m
-2301 4316 l
-2466 4398 l
-2520 4290 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-2389 4309 m
-2391 4296 l
-2387 4285 l
-2378 4275 l
-2374 4273 l
-2361 4272 l
-2350 4275 l
-2341 4285 l
-2339 4288 l
-2337 4301 l
-2341 4313 l
-2350 4322 l
-2354 4324 l
-2367 4326 l
-2378 4322 l
-2389 4309 l
-2398 4290 l
-2404 4270 l
-2402 4255 l
-2393 4245 l
-2385 4242 l
-2372 4240 l
-2365 4245 l
-S
-2425 4359 m
-2415 4350 l
-2413 4335 l
-2419 4314 l
-2425 4303 l
-2438 4286 l
-2451 4279 l
-2464 4281 l
-2471 4284 l
-2481 4294 l
-2483 4309 l
-2477 4329 l
-2471 4340 l
-2458 4357 l
-2445 4365 l
-2432 4363 l
-2425 4359 l
-S
-1 g
-1733 3720 m
-1736 3720 l
-1736 3721 l
-1733 3721 l
-1732 3721 m
-1737 3721 l
-1737 3722 l
-1732 3722 l
-1731 3722 m
-1738 3722 l
-1738 3723 l
-1731 3723 l
-1730 3723 m
-1739 3723 l
-1739 3724 l
-1730 3724 l
-1729 3724 m
-1740 3724 l
-1740 3725 l
-1729 3725 l
-1728 3725 m
-1741 3725 l
-1741 3726 l
-1728 3726 l
-1727 3726 m
-1742 3726 l
-1742 3727 l
-1727 3727 l
-1726 3727 m
-1742 3727 l
-1742 3728 l
-1726 3728 l
-1725 3728 m
-1743 3728 l
-1743 3729 l
-1725 3729 l
-1723 3729 m
-1744 3729 l
-1744 3730 l
-1723 3730 l
-1722 3730 m
-1745 3730 l
-1745 3731 l
-1722 3731 l
-1721 3731 m
-1746 3731 l
-1746 3732 l
-1721 3732 l
-1720 3732 m
-1747 3732 l
-1747 3733 l
-1720 3733 l
-1719 3733 m
-1748 3733 l
-1748 3734 l
-1719 3734 l
-1718 3734 m
-1749 3734 l
-1749 3735 l
-1718 3735 l
-1717 3735 m
-1750 3735 l
-1750 3736 l
-1717 3736 l
-1716 3736 m
-1751 3736 l
-1751 3737 l
-1716 3737 l
-1715 3737 m
-1752 3737 l
-1752 3738 l
-1715 3738 l
-1714 3738 m
-1753 3738 l
-1753 3739 l
-1714 3739 l
-1713 3739 m
-1754 3739 l
-1754 3740 l
-1713 3740 l
-1712 3740 m
-1755 3740 l
-1755 3741 l
-1712 3741 l
-1711 3741 m
-1756 3741 l
-1756 3742 l
-1711 3742 l
-1710 3742 m
-1757 3742 l
-1757 3743 l
-1710 3743 l
-1709 3743 m
-1758 3743 l
-1758 3744 l
-1709 3744 l
-1708 3744 m
-1759 3744 l
-1759 3745 l
-1708 3745 l
-1707 3745 m
-1760 3745 l
-1760 3746 l
-1707 3746 l
-1706 3746 m
-1761 3746 l
-1761 3747 l
-1706 3747 l
-1705 3747 m
-1762 3747 l
-1762 3748 l
-1705 3748 l
-1704 3748 m
-1763 3748 l
-1763 3749 l
-1704 3749 l
-1703 3749 m
-1764 3749 l
-1764 3750 l
-1703 3750 l
-1702 3750 m
-1765 3750 l
-1765 3751 l
-1702 3751 l
-1701 3751 m
-1766 3751 l
-1766 3752 l
-1701 3752 l
-1700 3752 m
-1767 3752 l
-1767 3753 l
-1700 3753 l
-1699 3753 m
-1768 3753 l
-1768 3754 l
-1699 3754 l
-1697 3754 m
-1769 3754 l
-1769 3755 l
-1697 3755 l
-1696 3755 m
-1770 3755 l
-1770 3756 l
-1696 3756 l
-1695 3756 m
-1771 3756 l
-1771 3757 l
-1695 3757 l
-1694 3757 m
-1772 3757 l
-1772 3758 l
-1694 3758 l
-1693 3758 m
-1773 3758 l
-1773 3759 l
-1693 3759 l
-1692 3759 m
-1774 3759 l
-1774 3760 l
-1692 3760 l
-1691 3760 m
-1775 3760 l
-1775 3761 l
-1691 3761 l
-1690 3761 m
-1776 3761 l
-1776 3762 l
-1690 3762 l
-1689 3762 m
-1776 3762 l
-1776 3763 l
-1689 3763 l
-1688 3763 m
-1777 3763 l
-1777 3764 l
-1688 3764 l
-1687 3764 m
-1778 3764 l
-1778 3765 l
-1687 3765 l
-1686 3765 m
-1779 3765 l
-1779 3766 l
-1686 3766 l
-1685 3766 m
-1780 3766 l
-1780 3767 l
-1685 3767 l
-1684 3767 m
-1781 3767 l
-1781 3768 l
-1684 3768 l
-1683 3768 m
-1782 3768 l
-1782 3769 l
-1683 3769 l
-1682 3769 m
-1783 3769 l
-1783 3770 l
-1682 3770 l
-1681 3770 m
-1784 3770 l
-1784 3771 l
-1681 3771 l
-1680 3771 m
-1785 3771 l
-1785 3772 l
-1680 3772 l
-1679 3772 m
-1786 3772 l
-1786 3773 l
-1679 3773 l
-1678 3773 m
-1787 3773 l
-1787 3774 l
-1678 3774 l
-1677 3774 m
-1788 3774 l
-1788 3775 l
-1677 3775 l
-1676 3775 m
-1789 3775 l
-1789 3776 l
-1676 3776 l
-1675 3776 m
-1790 3776 l
-1790 3777 l
-1675 3777 l
-1674 3777 m
-1791 3777 l
-1791 3778 l
-1674 3778 l
-1673 3778 m
-1792 3778 l
-1792 3779 l
-1673 3779 l
-1671 3779 m
-1793 3779 l
-1793 3780 l
-1671 3780 l
-1670 3780 m
-1794 3780 l
-1794 3781 l
-1670 3781 l
-1669 3781 m
-1795 3781 l
-1795 3782 l
-1669 3782 l
-1668 3782 m
-1796 3782 l
-1796 3783 l
-1668 3783 l
-1667 3783 m
-1797 3783 l
-1797 3784 l
-1667 3784 l
-1666 3784 m
-1798 3784 l
-1798 3785 l
-1666 3785 l
-1665 3785 m
-1799 3785 l
-1799 3786 l
-1665 3786 l
-1664 3786 m
-1800 3786 l
-1800 3787 l
-1664 3787 l
-1663 3787 m
-1801 3787 l
-1801 3788 l
-1663 3788 l
-1662 3788 m
-1802 3788 l
-1802 3789 l
-1662 3789 l
-1661 3789 m
-1803 3789 l
-1803 3790 l
-1661 3790 l
-1660 3790 m
-1804 3790 l
-1804 3791 l
-1660 3791 l
-1659 3791 m
-1805 3791 l
-1805 3792 l
-1659 3792 l
-1658 3792 m
-1806 3792 l
-1806 3793 l
-1658 3793 l
-1657 3793 m
-1807 3793 l
-1807 3794 l
-1657 3794 l
-1656 3794 m
-1808 3794 l
-1808 3795 l
-1656 3795 l
-1655 3795 m
-1809 3795 l
-1809 3796 l
-1655 3796 l
-1654 3796 m
-1810 3796 l
-1810 3797 l
-1654 3797 l
-1653 3797 m
-1810 3797 l
-1810 3798 l
-1653 3798 l
-1652 3798 m
-1811 3798 l
-1811 3799 l
-1652 3799 l
-1651 3799 m
-1812 3799 l
-1812 3800 l
-1651 3800 l
-1650 3800 m
-1813 3800 l
-1813 3801 l
-1650 3801 l
-1649 3801 m
-1814 3801 l
-1814 3802 l
-1649 3802 l
-1648 3802 m
-1815 3802 l
-1815 3803 l
-1648 3803 l
-1647 3803 m
-1816 3803 l
-1816 3804 l
-1647 3804 l
-1647 3804 m
-1817 3804 l
-1817 3805 l
-1647 3805 l
-1647 3805 m
-1818 3805 l
-1818 3806 l
-1647 3806 l
-1648 3806 m
-1819 3806 l
-1819 3807 l
-1648 3807 l
-1649 3807 m
-1820 3807 l
-1820 3808 l
-1649 3808 l
-1650 3808 m
-1821 3808 l
-1821 3809 l
-1650 3809 l
-1651 3809 m
-1822 3809 l
-1822 3810 l
-1651 3810 l
-1652 3810 m
-1823 3810 l
-1823 3811 l
-1652 3811 l
-1653 3811 m
-1824 3811 l
-1824 3812 l
-1653 3812 l
-1654 3812 m
-1825 3812 l
-1825 3813 l
-1654 3813 l
-1655 3813 m
-1826 3813 l
-1826 3814 l
-1655 3814 l
-1656 3814 m
-1827 3814 l
-1827 3815 l
-1656 3815 l
-1657 3815 m
-1828 3815 l
-1828 3816 l
-1657 3816 l
-1658 3816 m
-1829 3816 l
-1829 3817 l
-1658 3817 l
-1659 3817 m
-1830 3817 l
-1830 3818 l
-1659 3818 l
-1660 3818 m
-1831 3818 l
-1831 3819 l
-1660 3819 l
-1661 3819 m
-1832 3819 l
-1832 3820 l
-1661 3820 l
-1662 3820 m
-1833 3820 l
-1833 3821 l
-1662 3821 l
-1663 3821 m
-1834 3821 l
-1834 3822 l
-1663 3822 l
-1664 3822 m
-1835 3822 l
-1835 3823 l
-1664 3823 l
-1665 3823 m
-1836 3823 l
-1836 3824 l
-1665 3824 l
-1666 3824 m
-1837 3824 l
-1837 3825 l
-1666 3825 l
-1667 3825 m
-1838 3825 l
-1838 3826 l
-1667 3826 l
-1668 3826 m
-1839 3826 l
-1839 3827 l
-1668 3827 l
-1669 3827 m
-1840 3827 l
-1840 3828 l
-1669 3828 l
-1670 3828 m
-1841 3828 l
-1841 3829 l
-1670 3829 l
-1671 3829 m
-1842 3829 l
-1842 3830 l
-1671 3830 l
-1672 3830 m
-1843 3830 l
-1843 3831 l
-1672 3831 l
-1673 3831 m
-1844 3831 l
-1844 3832 l
-1673 3832 l
-1674 3832 m
-1844 3832 l
-1844 3833 l
-1674 3833 l
-1675 3833 m
-1845 3833 l
-1845 3834 l
-1675 3834 l
-1676 3834 m
-1846 3834 l
-1846 3835 l
-1676 3835 l
-1677 3835 m
-1847 3835 l
-1847 3836 l
-1677 3836 l
-1678 3836 m
-1848 3836 l
-1848 3837 l
-1678 3837 l
-1679 3837 m
-1849 3837 l
-1849 3838 l
-1679 3838 l
-1680 3838 m
-1850 3838 l
-1850 3839 l
-1680 3839 l
-1681 3839 m
-1851 3839 l
-1851 3840 l
-1681 3840 l
-1682 3840 m
-1852 3840 l
-1852 3841 l
-1682 3841 l
-1682 3841 m
-1853 3841 l
-1853 3842 l
-1682 3842 l
-1683 3842 m
-1854 3842 l
-1854 3843 l
-1683 3843 l
-1684 3843 m
-1855 3843 l
-1855 3844 l
-1684 3844 l
-1685 3844 m
-1856 3844 l
-1856 3845 l
-1685 3845 l
-1686 3845 m
-1857 3845 l
-1857 3846 l
-1686 3846 l
-1687 3846 m
-1858 3846 l
-1858 3847 l
-1687 3847 l
-1688 3847 m
-1859 3847 l
-1859 3848 l
-1688 3848 l
-1689 3848 m
-1860 3848 l
-1860 3849 l
-1689 3849 l
-1690 3849 m
-1861 3849 l
-1861 3850 l
-1690 3850 l
-1691 3850 m
-1862 3850 l
-1862 3851 l
-1691 3851 l
-1692 3851 m
-1863 3851 l
-1863 3852 l
-1692 3852 l
-1693 3852 m
-1864 3852 l
-1864 3853 l
-1693 3853 l
-1694 3853 m
-1865 3853 l
-1865 3854 l
-1694 3854 l
-1695 3854 m
-1866 3854 l
-1866 3855 l
-1695 3855 l
-1696 3855 m
-1867 3855 l
-1867 3856 l
-1696 3856 l
-1697 3856 m
-1868 3856 l
-1868 3857 l
-1697 3857 l
-1698 3857 m
-1869 3857 l
-1869 3858 l
-1698 3858 l
-1699 3858 m
-1870 3858 l
-1870 3859 l
-1699 3859 l
-1700 3859 m
-1871 3859 l
-1871 3860 l
-1700 3860 l
-1701 3860 m
-1872 3860 l
-1872 3861 l
-1701 3861 l
-1702 3861 m
-1873 3861 l
-1873 3862 l
-1702 3862 l
-1703 3862 m
-1874 3862 l
-1874 3863 l
-1703 3863 l
-1704 3863 m
-1875 3863 l
-1875 3864 l
-1704 3864 l
-1705 3864 m
-1876 3864 l
-1876 3865 l
-1705 3865 l
-1706 3865 m
-1877 3865 l
-1877 3866 l
-1706 3866 l
-1707 3866 m
-1878 3866 l
-1878 3867 l
-1707 3867 l
-1708 3867 m
-1878 3867 l
-1878 3868 l
-1708 3868 l
-1709 3868 m
-1879 3868 l
-1879 3869 l
-1709 3869 l
-1710 3869 m
-1880 3869 l
-1880 3870 l
-1710 3870 l
-1711 3870 m
-1881 3870 l
-1881 3871 l
-1711 3871 l
-1712 3871 m
-1882 3871 l
-1882 3872 l
-1712 3872 l
-1713 3872 m
-1883 3872 l
-1883 3873 l
-1713 3873 l
-1714 3873 m
-1884 3873 l
-1884 3874 l
-1714 3874 l
-1715 3874 m
-1885 3874 l
-1885 3875 l
-1715 3875 l
-1716 3875 m
-1886 3875 l
-1886 3876 l
-1716 3876 l
-1717 3876 m
-1887 3876 l
-1887 3877 l
-1717 3877 l
-1718 3877 m
-1888 3877 l
-1888 3878 l
-1718 3878 l
-1718 3878 m
-1889 3878 l
-1889 3879 l
-1718 3879 l
-1719 3879 m
-1890 3879 l
-1890 3880 l
-1719 3880 l
-1720 3880 m
-1891 3880 l
-1891 3881 l
-1720 3881 l
-1721 3881 m
-1892 3881 l
-1892 3882 l
-1721 3882 l
-1722 3882 m
-1893 3882 l
-1893 3883 l
-1722 3883 l
-1723 3883 m
-1894 3883 l
-1894 3884 l
-1723 3884 l
-1724 3884 m
-1895 3884 l
-1895 3885 l
-1724 3885 l
-1725 3885 m
-1896 3885 l
-1896 3886 l
-1725 3886 l
-1726 3886 m
-1897 3886 l
-1897 3887 l
-1726 3887 l
-1727 3887 m
-1898 3887 l
-1898 3888 l
-1727 3888 l
-1728 3888 m
-1899 3888 l
-1899 3889 l
-1728 3889 l
-1729 3889 m
-1900 3889 l
-1900 3890 l
-1729 3890 l
-1730 3890 m
-1901 3890 l
-1901 3891 l
-1730 3891 l
-1731 3891 m
-1902 3891 l
-1902 3892 l
-1731 3892 l
-1732 3892 m
-1903 3892 l
-1903 3893 l
-1732 3893 l
-1733 3893 m
-1904 3893 l
-1904 3894 l
-1733 3894 l
-1734 3894 m
-1905 3894 l
-1905 3895 l
-1734 3895 l
-1735 3895 m
-1906 3895 l
-1906 3896 l
-1735 3896 l
-1736 3896 m
-1907 3896 l
-1907 3897 l
-1736 3897 l
-1737 3897 m
-1908 3897 l
-1908 3898 l
-1737 3898 l
-1738 3898 m
-1909 3898 l
-1909 3899 l
-1738 3899 l
-1739 3899 m
-1910 3899 l
-1910 3900 l
-1739 3900 l
-1740 3900 m
-1911 3900 l
-1911 3901 l
-1740 3901 l
-1741 3901 m
-1912 3901 l
-1912 3902 l
-1741 3902 l
-1742 3902 m
-1913 3902 l
-1913 3903 l
-1742 3903 l
-1743 3903 m
-1912 3903 l
-1912 3904 l
-1743 3904 l
-1744 3904 m
-1911 3904 l
-1911 3905 l
-1744 3905 l
-1745 3905 m
-1910 3905 l
-1910 3906 l
-1745 3906 l
-1746 3906 m
-1909 3906 l
-1909 3907 l
-1746 3907 l
-1747 3907 m
-1908 3907 l
-1908 3908 l
-1747 3908 l
-1748 3908 m
-1907 3908 l
-1907 3909 l
-1748 3909 l
-1749 3909 m
-1906 3909 l
-1906 3910 l
-1749 3910 l
-1750 3910 m
-1905 3910 l
-1905 3911 l
-1750 3911 l
-1751 3911 m
-1904 3911 l
-1904 3912 l
-1751 3912 l
-1752 3912 m
-1903 3912 l
-1903 3913 l
-1752 3913 l
-1753 3913 m
-1902 3913 l
-1902 3914 l
-1753 3914 l
-1753 3914 m
-1901 3914 l
-1901 3915 l
-1753 3915 l
-1754 3915 m
-1900 3915 l
-1900 3916 l
-1754 3916 l
-1755 3916 m
-1899 3916 l
-1899 3917 l
-1755 3917 l
-1756 3917 m
-1898 3917 l
-1898 3918 l
-1756 3918 l
-1757 3918 m
-1897 3918 l
-1897 3919 l
-1757 3919 l
-1758 3919 m
-1896 3919 l
-1896 3920 l
-1758 3920 l
-1759 3920 m
-1895 3920 l
-1895 3921 l
-1759 3921 l
-1760 3921 m
-1894 3921 l
-1894 3922 l
-1760 3922 l
-1761 3922 m
-1893 3922 l
-1893 3923 l
-1761 3923 l
-1762 3923 m
-1892 3923 l
-1892 3924 l
-1762 3924 l
-1763 3924 m
-1891 3924 l
-1891 3925 l
-1763 3925 l
-1764 3925 m
-1890 3925 l
-1890 3926 l
-1764 3926 l
-1765 3926 m
-1889 3926 l
-1889 3927 l
-1765 3927 l
-1766 3927 m
-1888 3927 l
-1888 3928 l
-1766 3928 l
-1767 3928 m
-1887 3928 l
-1887 3929 l
-1767 3929 l
-1768 3929 m
-1886 3929 l
-1886 3930 l
-1768 3930 l
-1769 3930 m
-1885 3930 l
-1885 3931 l
-1769 3931 l
-1770 3931 m
-1883 3931 l
-1883 3932 l
-1770 3932 l
-1771 3932 m
-1882 3932 l
-1882 3933 l
-1771 3933 l
-1772 3933 m
-1881 3933 l
-1881 3934 l
-1772 3934 l
-1773 3934 m
-1880 3934 l
-1880 3935 l
-1773 3935 l
-1774 3935 m
-1879 3935 l
-1879 3936 l
-1774 3936 l
-1775 3936 m
-1878 3936 l
-1878 3937 l
-1775 3937 l
-1776 3937 m
-1877 3937 l
-1877 3938 l
-1776 3938 l
-1777 3938 m
-1876 3938 l
-1876 3939 l
-1777 3939 l
-1778 3939 m
-1875 3939 l
-1875 3940 l
-1778 3940 l
-1779 3940 m
-1874 3940 l
-1874 3941 l
-1779 3941 l
-1780 3941 m
-1873 3941 l
-1873 3942 l
-1780 3942 l
-1781 3942 m
-1872 3942 l
-1872 3943 l
-1781 3943 l
-1782 3943 m
-1871 3943 l
-1871 3944 l
-1782 3944 l
-1783 3944 m
-1870 3944 l
-1870 3945 l
-1783 3945 l
-1784 3945 m
-1869 3945 l
-1869 3946 l
-1784 3946 l
-1785 3946 m
-1868 3946 l
-1868 3947 l
-1785 3947 l
-1786 3947 m
-1867 3947 l
-1867 3948 l
-1786 3948 l
-1787 3948 m
-1866 3948 l
-1866 3949 l
-1787 3949 l
-1788 3949 m
-1865 3949 l
-1865 3950 l
-1788 3950 l
-1789 3950 m
-1864 3950 l
-1864 3951 l
-1789 3951 l
-1789 3951 m
-1863 3951 l
-1863 3952 l
-1789 3952 l
-1790 3952 m
-1862 3952 l
-1862 3953 l
-1790 3953 l
-1791 3953 m
-1861 3953 l
-1861 3954 l
-1791 3954 l
-1792 3954 m
-1860 3954 l
-1860 3955 l
-1792 3955 l
-1793 3955 m
-1859 3955 l
-1859 3956 l
-1793 3956 l
-1794 3956 m
-1858 3956 l
-1858 3957 l
-1794 3957 l
-1795 3957 m
-1857 3957 l
-1857 3958 l
-1795 3958 l
-1796 3958 m
-1856 3958 l
-1856 3959 l
-1796 3959 l
-1797 3959 m
-1854 3959 l
-1854 3960 l
-1797 3960 l
-1798 3960 m
-1853 3960 l
-1853 3961 l
-1798 3961 l
-1799 3961 m
-1852 3961 l
-1852 3962 l
-1799 3962 l
-1800 3962 m
-1851 3962 l
-1851 3963 l
-1800 3963 l
-1801 3963 m
-1850 3963 l
-1850 3964 l
-1801 3964 l
-1802 3964 m
-1849 3964 l
-1849 3965 l
-1802 3965 l
-1803 3965 m
-1848 3965 l
-1848 3966 l
-1803 3966 l
-1804 3966 m
-1847 3966 l
-1847 3967 l
-1804 3967 l
-1805 3967 m
-1846 3967 l
-1846 3968 l
-1805 3968 l
-1806 3968 m
-1845 3968 l
-1845 3969 l
-1806 3969 l
-1807 3969 m
-1844 3969 l
-1844 3970 l
-1807 3970 l
-1808 3970 m
-1843 3970 l
-1843 3971 l
-1808 3971 l
-1809 3971 m
-1842 3971 l
-1842 3972 l
-1809 3972 l
-1810 3972 m
-1841 3972 l
-1841 3973 l
-1810 3973 l
-1811 3973 m
-1840 3973 l
-1840 3974 l
-1811 3974 l
-1812 3974 m
-1839 3974 l
-1839 3975 l
-1812 3975 l
-1813 3975 m
-1838 3975 l
-1838 3976 l
-1813 3976 l
-1814 3976 m
-1837 3976 l
-1837 3977 l
-1814 3977 l
-1815 3977 m
-1836 3977 l
-1836 3978 l
-1815 3978 l
-1816 3978 m
-1835 3978 l
-1835 3979 l
-1816 3979 l
-1817 3979 m
-1834 3979 l
-1834 3980 l
-1817 3980 l
-1818 3980 m
-1833 3980 l
-1833 3981 l
-1818 3981 l
-1819 3981 m
-1832 3981 l
-1832 3982 l
-1819 3982 l
-1820 3982 m
-1831 3982 l
-1831 3983 l
-1820 3983 l
-1821 3983 m
-1830 3983 l
-1830 3984 l
-1821 3984 l
-1822 3984 m
-1829 3984 l
-1829 3985 l
-1822 3985 l
-1823 3985 m
-1828 3985 l
-1828 3986 l
-1823 3986 l
-1824 3986 m
-1827 3986 l
-1827 3987 l
-1824 3987 l
-Y
-1734.3 3720.1 m
-1647 3804 l
-1825 3987 l
-1912 3903 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-1686 3796 m
-1689 3805 l
-1688 3823 l
-1751 3762 l
-S
-1729 3865 m
-1761 3898 l
-1768 3856 l
-1776 3865 l
-1785 3869 l
-1791 3869 l
-1803 3863 l
-1809 3857 l
-1815 3845 l
-1815 3834 l
-1809 3822 l
-1801 3813 l
-1789 3807 l
-1783 3807 l
-1774 3809 l
-S
-1816 3955 m
-1787 3925 l
-1811 3896 l
-1811 3901 l
-1817 3913 l
-1826 3922 l
-1837 3928 l
-1849 3929 l
-1861 3923 l
-1867 3917 l
-1873 3905 l
-1873 3894 l
-1868 3882 l
-1859 3873 l
-1847 3867 l
-1841 3866 l
-1832 3869 l
-S
-1 g
-1467 3111 m
-1471 3111 l
-1471 3112 l
-1467 3112 l
-1462 3112 m
-1471 3112 l
-1471 3113 l
-1462 3113 l
-1456 3113 m
-1471 3113 l
-1471 3114 l
-1456 3114 l
-1451 3114 m
-1471 3114 l
-1471 3115 l
-1451 3115 l
-1446 3115 m
-1472 3115 l
-1472 3116 l
-1446 3116 l
-1441 3116 m
-1472 3116 l
-1472 3117 l
-1441 3117 l
-1435 3117 m
-1472 3117 l
-1472 3118 l
-1435 3118 l
-1430 3118 m
-1472 3118 l
-1472 3119 l
-1430 3119 l
-1425 3119 m
-1472 3119 l
-1472 3120 l
-1425 3120 l
-1419 3120 m
-1472 3120 l
-1472 3121 l
-1419 3121 l
-1414 3121 m
-1473 3121 l
-1473 3122 l
-1414 3122 l
-1409 3122 m
-1473 3122 l
-1473 3123 l
-1409 3123 l
-1403 3123 m
-1473 3123 l
-1473 3124 l
-1403 3124 l
-1398 3124 m
-1473 3124 l
-1473 3125 l
-1398 3125 l
-1393 3125 m
-1473 3125 l
-1473 3126 l
-1393 3126 l
-1388 3126 m
-1474 3126 l
-1474 3127 l
-1388 3127 l
-1382 3127 m
-1474 3127 l
-1474 3128 l
-1382 3128 l
-1377 3128 m
-1474 3128 l
-1474 3129 l
-1377 3129 l
-1372 3129 m
-1474 3129 l
-1474 3130 l
-1372 3130 l
-1366 3130 m
-1474 3130 l
-1474 3131 l
-1366 3131 l
-1361 3131 m
-1475 3131 l
-1475 3132 l
-1361 3132 l
-1356 3132 m
-1475 3132 l
-1475 3133 l
-1356 3133 l
-1351 3133 m
-1475 3133 l
-1475 3134 l
-1351 3134 l
-1351 3134 m
-1475 3134 l
-1475 3137 l
-1351 3137 l
-1351 3137 m
-1476 3137 l
-1476 3140 l
-1351 3140 l
-1352 3140 m
-1476 3140 l
-1476 3142 l
-1352 3142 l
-1352 3142 m
-1477 3142 l
-1477 3145 l
-1352 3145 l
-1353 3145 m
-1477 3145 l
-1477 3147 l
-1353 3147 l
-1353 3147 m
-1478 3147 l
-1478 3150 l
-1353 3150 l
-1354 3150 m
-1478 3150 l
-1478 3153 l
-1354 3153 l
-1354 3153 m
-1479 3153 l
-1479 3156 l
-1354 3156 l
-1355 3156 m
-1479 3156 l
-1479 3158 l
-1355 3158 l
-1355 3158 m
-1480 3158 l
-1480 3161 l
-1355 3161 l
-1356 3161 m
-1480 3161 l
-1480 3163 l
-1356 3163 l
-1356 3163 m
-1481 3163 l
-1481 3166 l
-1356 3166 l
-1357 3166 m
-1481 3166 l
-1481 3169 l
-1357 3169 l
-1357 3169 m
-1482 3169 l
-1482 3172 l
-1357 3172 l
-1358 3172 m
-1482 3172 l
-1482 3174 l
-1358 3174 l
-1358 3174 m
-1483 3174 l
-1483 3177 l
-1358 3177 l
-1359 3177 m
-1483 3177 l
-1483 3180 l
-1359 3180 l
-1359 3180 m
-1484 3180 l
-1484 3182 l
-1359 3182 l
-1360 3182 m
-1484 3182 l
-1484 3185 l
-1360 3185 l
-1360 3185 m
-1485 3185 l
-1485 3188 l
-1360 3188 l
-1361 3188 m
-1485 3188 l
-1485 3190 l
-1361 3190 l
-1361 3190 m
-1486 3190 l
-1486 3193 l
-1361 3193 l
-1362 3193 m
-1486 3193 l
-1486 3196 l
-1362 3196 l
-1362 3196 m
-1487 3196 l
-1487 3198 l
-1362 3198 l
-1363 3198 m
-1487 3198 l
-1487 3201 l
-1363 3201 l
-1363 3201 m
-1488 3201 l
-1488 3204 l
-1363 3204 l
-1364 3204 m
-1488 3204 l
-1488 3206 l
-1364 3206 l
-1364 3206 m
-1489 3206 l
-1489 3209 l
-1364 3209 l
-1365 3209 m
-1489 3209 l
-1489 3212 l
-1365 3212 l
-1365 3212 m
-1490 3212 l
-1490 3214 l
-1365 3214 l
-1366 3214 m
-1490 3214 l
-1490 3217 l
-1366 3217 l
-1366 3217 m
-1491 3217 l
-1491 3220 l
-1366 3220 l
-1367 3220 m
-1491 3220 l
-1491 3222 l
-1367 3222 l
-1367 3222 m
-1492 3222 l
-1492 3225 l
-1367 3225 l
-1368 3225 m
-1492 3225 l
-1492 3228 l
-1368 3228 l
-1368 3228 m
-1493 3228 l
-1493 3230 l
-1368 3230 l
-1369 3230 m
-1493 3230 l
-1493 3233 l
-1369 3233 l
-1369 3233 m
-1494 3233 l
-1494 3236 l
-1369 3236 l
-1370 3236 m
-1494 3236 l
-1494 3238 l
-1370 3238 l
-1370 3238 m
-1495 3238 l
-1495 3241 l
-1370 3241 l
-1371 3241 m
-1495 3241 l
-1495 3244 l
-1371 3244 l
-1371 3244 m
-1496 3244 l
-1496 3246 l
-1371 3246 l
-1372 3246 m
-1496 3246 l
-1496 3249 l
-1372 3249 l
-1372 3249 m
-1497 3249 l
-1497 3252 l
-1372 3252 l
-1373 3252 m
-1497 3252 l
-1497 3254 l
-1373 3254 l
-1373 3254 m
-1498 3254 l
-1498 3257 l
-1373 3257 l
-1374 3257 m
-1498 3257 l
-1498 3260 l
-1374 3260 l
-1374 3260 m
-1499 3260 l
-1499 3262 l
-1374 3262 l
-1375 3262 m
-1499 3262 l
-1499 3265 l
-1375 3265 l
-1375 3265 m
-1500 3265 l
-1500 3267 l
-1375 3267 l
-1376 3267 m
-1500 3267 l
-1500 3271 l
-1376 3271 l
-1376 3271 m
-1501 3271 l
-1501 3273 l
-1376 3273 l
-1377 3273 m
-1501 3273 l
-1501 3276 l
-1377 3276 l
-1377 3276 m
-1502 3276 l
-1502 3278 l
-1377 3278 l
-1378 3278 m
-1502 3278 l
-1502 3281 l
-1378 3281 l
-1378 3281 m
-1503 3281 l
-1503 3283 l
-1378 3283 l
-1379 3283 m
-1503 3283 l
-1503 3287 l
-1379 3287 l
-1379 3287 m
-1504 3287 l
-1504 3289 l
-1379 3289 l
-1380 3289 m
-1504 3289 l
-1504 3292 l
-1380 3292 l
-1380 3292 m
-1505 3292 l
-1505 3294 l
-1380 3294 l
-1381 3294 m
-1505 3294 l
-1505 3297 l
-1381 3297 l
-1381 3297 m
-1506 3297 l
-1506 3299 l
-1381 3299 l
-1382 3299 m
-1506 3299 l
-1506 3303 l
-1382 3303 l
-1382 3303 m
-1507 3303 l
-1507 3305 l
-1382 3305 l
-1383 3305 m
-1507 3305 l
-1507 3308 l
-1383 3308 l
-1383 3308 m
-1508 3308 l
-1508 3310 l
-1383 3310 l
-1384 3310 m
-1508 3310 l
-1508 3313 l
-1384 3313 l
-1384 3313 m
-1509 3313 l
-1509 3315 l
-1384 3315 l
-1385 3315 m
-1509 3315 l
-1509 3319 l
-1385 3319 l
-1385 3319 m
-1510 3319 l
-1510 3321 l
-1385 3321 l
-1386 3321 m
-1510 3321 l
-1510 3324 l
-1386 3324 l
-1386 3324 m
-1511 3324 l
-1511 3326 l
-1386 3326 l
-1387 3326 m
-1511 3326 l
-1511 3329 l
-1387 3329 l
-1387 3329 m
-1512 3329 l
-1512 3331 l
-1387 3331 l
-1388 3331 m
-1512 3331 l
-1512 3335 l
-1388 3335 l
-1388 3335 m
-1513 3335 l
-1513 3337 l
-1388 3337 l
-1389 3337 m
-1513 3337 l
-1513 3340 l
-1389 3340 l
-1389 3340 m
-1514 3340 l
-1514 3342 l
-1389 3342 l
-1390 3342 m
-1514 3342 l
-1514 3345 l
-1390 3345 l
-1390 3345 m
-1515 3345 l
-1515 3347 l
-1390 3347 l
-1391 3347 m
-1515 3347 l
-1515 3351 l
-1391 3351 l
-1391 3351 m
-1516 3351 l
-1516 3353 l
-1391 3353 l
-1392 3353 m
-1516 3353 l
-1516 3356 l
-1392 3356 l
-1392 3356 m
-1517 3356 l
-1517 3358 l
-1392 3358 l
-1393 3358 m
-1517 3358 l
-1517 3362 l
-1393 3362 l
-1393 3362 m
-1518 3362 l
-1518 3363 l
-1393 3363 l
-1394 3363 m
-1512 3363 l
-1512 3364 l
-1394 3364 l
-1394 3364 m
-1507 3364 l
-1507 3365 l
-1394 3365 l
-1394 3365 m
-1501 3365 l
-1501 3366 l
-1394 3366 l
-1394 3366 m
-1496 3366 l
-1496 3367 l
-1394 3367 l
-1394 3367 m
-1490 3367 l
-1490 3368 l
-1394 3368 l
-1394 3368 m
-1485 3368 l
-1485 3369 l
-1394 3369 l
-1395 3369 m
-1480 3369 l
-1480 3370 l
-1395 3370 l
-1395 3370 m
-1474 3370 l
-1474 3371 l
-1395 3371 l
-1395 3371 m
-1469 3371 l
-1469 3372 l
-1395 3372 l
-1395 3372 m
-1463 3372 l
-1463 3373 l
-1395 3373 l
-1395 3373 m
-1458 3373 l
-1458 3374 l
-1395 3374 l
-1396 3374 m
-1453 3374 l
-1453 3375 l
-1396 3375 l
-1396 3375 m
-1447 3375 l
-1447 3376 l
-1396 3376 l
-1396 3376 m
-1442 3376 l
-1442 3377 l
-1396 3377 l
-1396 3377 m
-1436 3377 l
-1436 3378 l
-1396 3378 l
-1396 3378 m
-1431 3378 l
-1431 3379 l
-1396 3379 l
-1397 3379 m
-1426 3379 l
-1426 3380 l
-1397 3380 l
-1397 3380 m
-1420 3380 l
-1420 3381 l
-1397 3381 l
-1397 3381 m
-1415 3381 l
-1415 3382 l
-1397 3382 l
-1397 3382 m
-1409 3382 l
-1409 3383 l
-1397 3383 l
-1397 3383 m
-1404 3383 l
-1404 3384 l
-1397 3384 l
-Y
-1470.2 3111.5 m
-1351 3134 l
-1398 3384 l
-1517 3362 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-1388 3148 m
-1385 3157 l
-1375 3172 l
-1462 3156 l
-S
-1389 3242 m
-1390 3229 l
-1398 3223 l
-1406 3221 l
-1415 3224 l
-1421 3231 l
-1428 3247 l
-1434 3259 l
-1444 3265 l
-1453 3268 l
-1465 3265 l
-1473 3260 l
-1476 3255 l
-1478 3242 l
-1475 3225 l
-1468 3214 l
-1463 3211 l
-1454 3208 l
-1442 3210 l
-1435 3216 l
-1428 3226 l
-1426 3239 l
-1425 3256 l
-1423 3265 l
-1415 3271 l
-1407 3272 l
-1398 3270 l
-1392 3258 l
-1389 3242 l
-S
-1405 3328 m
-1407 3315 l
-1417 3304 l
-1437 3296 l
-1449 3294 l
-1471 3294 l
-1485 3300 l
-1491 3312 l
-1493 3320 l
-1491 3333 l
-1480 3343 l
-1460 3351 l
-1448 3354 l
-1427 3354 l
-1413 3348 l
-1406 3336 l
-1405 3328 l
-S
-1 g
-1766 2327 m
-1769 2327 l
-1769 2328 l
-1766 2328 l
-1765 2328 m
-1770 2328 l
-1770 2329 l
-1765 2329 l
-1764 2329 m
-1771 2329 l
-1771 2330 l
-1764 2330 l
-1763 2330 m
-1772 2330 l
-1772 2331 l
-1763 2331 l
-1762 2331 m
-1773 2331 l
-1773 2332 l
-1762 2332 l
-1761 2332 m
-1774 2332 l
-1774 2333 l
-1761 2333 l
-1760 2333 m
-1775 2333 l
-1775 2334 l
-1760 2334 l
-1759 2334 m
-1776 2334 l
-1776 2335 l
-1759 2335 l
-1758 2335 m
-1777 2335 l
-1777 2336 l
-1758 2336 l
-1757 2336 m
-1778 2336 l
-1778 2337 l
-1757 2337 l
-1756 2337 m
-1779 2337 l
-1779 2338 l
-1756 2338 l
-1755 2338 m
-1780 2338 l
-1780 2339 l
-1755 2339 l
-1754 2339 m
-1781 2339 l
-1781 2340 l
-1754 2340 l
-1753 2340 m
-1782 2340 l
-1782 2341 l
-1753 2341 l
-1752 2341 m
-1783 2341 l
-1783 2342 l
-1752 2342 l
-1751 2342 m
-1784 2342 l
-1784 2343 l
-1751 2343 l
-1750 2343 m
-1785 2343 l
-1785 2344 l
-1750 2344 l
-1749 2344 m
-1786 2344 l
-1786 2345 l
-1749 2345 l
-1748 2345 m
-1787 2345 l
-1787 2346 l
-1748 2346 l
-1747 2346 m
-1788 2346 l
-1788 2347 l
-1747 2347 l
-1746 2347 m
-1789 2347 l
-1789 2348 l
-1746 2348 l
-1745 2348 m
-1790 2348 l
-1790 2349 l
-1745 2349 l
-1744 2349 m
-1791 2349 l
-1791 2350 l
-1744 2350 l
-1743 2350 m
-1792 2350 l
-1792 2351 l
-1743 2351 l
-1742 2351 m
-1793 2351 l
-1793 2352 l
-1742 2352 l
-1741 2352 m
-1794 2352 l
-1794 2353 l
-1741 2353 l
-1739 2353 m
-1795 2353 l
-1795 2354 l
-1739 2354 l
-1738 2354 m
-1796 2354 l
-1796 2355 l
-1738 2355 l
-1737 2355 m
-1796 2355 l
-1796 2356 l
-1737 2356 l
-1736 2356 m
-1797 2356 l
-1797 2357 l
-1736 2357 l
-1735 2357 m
-1798 2357 l
-1798 2358 l
-1735 2358 l
-1734 2358 m
-1799 2358 l
-1799 2359 l
-1734 2359 l
-1733 2359 m
-1800 2359 l
-1800 2360 l
-1733 2360 l
-1732 2360 m
-1801 2360 l
-1801 2361 l
-1732 2361 l
-1731 2361 m
-1802 2361 l
-1802 2362 l
-1731 2362 l
-1730 2362 m
-1803 2362 l
-1803 2363 l
-1730 2363 l
-1729 2363 m
-1804 2363 l
-1804 2364 l
-1729 2364 l
-1728 2364 m
-1805 2364 l
-1805 2365 l
-1728 2365 l
-1727 2365 m
-1806 2365 l
-1806 2366 l
-1727 2366 l
-1726 2366 m
-1807 2366 l
-1807 2367 l
-1726 2367 l
-1725 2367 m
-1808 2367 l
-1808 2368 l
-1725 2368 l
-1724 2368 m
-1809 2368 l
-1809 2369 l
-1724 2369 l
-1723 2369 m
-1810 2369 l
-1810 2370 l
-1723 2370 l
-1722 2370 m
-1811 2370 l
-1811 2371 l
-1722 2371 l
-1721 2371 m
-1812 2371 l
-1812 2372 l
-1721 2372 l
-1720 2372 m
-1813 2372 l
-1813 2373 l
-1720 2373 l
-1719 2373 m
-1814 2373 l
-1814 2374 l
-1719 2374 l
-1718 2374 m
-1815 2374 l
-1815 2375 l
-1718 2375 l
-1717 2375 m
-1816 2375 l
-1816 2376 l
-1717 2376 l
-1716 2376 m
-1817 2376 l
-1817 2377 l
-1716 2377 l
-1715 2377 m
-1818 2377 l
-1818 2378 l
-1715 2378 l
-1714 2378 m
-1819 2378 l
-1819 2379 l
-1714 2379 l
-1712 2379 m
-1820 2379 l
-1820 2380 l
-1712 2380 l
-1711 2380 m
-1821 2380 l
-1821 2381 l
-1711 2381 l
-1710 2381 m
-1822 2381 l
-1822 2382 l
-1710 2382 l
-1709 2382 m
-1823 2382 l
-1823 2383 l
-1709 2383 l
-1708 2383 m
-1823 2383 l
-1823 2384 l
-1708 2384 l
-1707 2384 m
-1824 2384 l
-1824 2385 l
-1707 2385 l
-1706 2385 m
-1825 2385 l
-1825 2386 l
-1706 2386 l
-1705 2386 m
-1826 2386 l
-1826 2387 l
-1705 2387 l
-1704 2387 m
-1827 2387 l
-1827 2388 l
-1704 2388 l
-1703 2388 m
-1828 2388 l
-1828 2389 l
-1703 2389 l
-1702 2389 m
-1829 2389 l
-1829 2390 l
-1702 2390 l
-1701 2390 m
-1830 2390 l
-1830 2391 l
-1701 2391 l
-1700 2391 m
-1831 2391 l
-1831 2392 l
-1700 2392 l
-1699 2392 m
-1832 2392 l
-1832 2393 l
-1699 2393 l
-1698 2393 m
-1833 2393 l
-1833 2394 l
-1698 2394 l
-1697 2394 m
-1834 2394 l
-1834 2395 l
-1697 2395 l
-1696 2395 m
-1835 2395 l
-1835 2396 l
-1696 2396 l
-1695 2396 m
-1836 2396 l
-1836 2397 l
-1695 2397 l
-1694 2397 m
-1837 2397 l
-1837 2398 l
-1694 2398 l
-1693 2398 m
-1838 2398 l
-1838 2399 l
-1693 2399 l
-1692 2399 m
-1839 2399 l
-1839 2400 l
-1692 2400 l
-1691 2400 m
-1840 2400 l
-1840 2401 l
-1691 2401 l
-1690 2401 m
-1841 2401 l
-1841 2402 l
-1690 2402 l
-1689 2402 m
-1842 2402 l
-1842 2403 l
-1689 2403 l
-1688 2403 m
-1843 2403 l
-1843 2404 l
-1688 2404 l
-1687 2404 m
-1844 2404 l
-1844 2405 l
-1687 2405 l
-1686 2405 m
-1845 2405 l
-1845 2406 l
-1686 2406 l
-1684 2406 m
-1846 2406 l
-1846 2407 l
-1684 2407 l
-1683 2407 m
-1847 2407 l
-1847 2408 l
-1683 2408 l
-1682 2408 m
-1848 2408 l
-1848 2409 l
-1682 2409 l
-1681 2409 m
-1849 2409 l
-1849 2410 l
-1681 2410 l
-1680 2410 m
-1850 2410 l
-1850 2411 l
-1680 2411 l
-1679 2411 m
-1850 2411 l
-1850 2412 l
-1679 2412 l
-1678 2412 m
-1851 2412 l
-1851 2413 l
-1678 2413 l
-1677 2413 m
-1852 2413 l
-1852 2414 l
-1677 2414 l
-1676 2414 m
-1853 2414 l
-1853 2415 l
-1676 2415 l
-1675 2415 m
-1852 2415 l
-1852 2416 l
-1675 2416 l
-1674 2416 m
-1851 2416 l
-1851 2417 l
-1674 2417 l
-1673 2417 m
-1850 2417 l
-1850 2418 l
-1673 2418 l
-1672 2418 m
-1849 2418 l
-1849 2419 l
-1672 2419 l
-1671 2419 m
-1848 2419 l
-1848 2420 l
-1671 2420 l
-1670 2420 m
-1847 2420 l
-1847 2421 l
-1670 2421 l
-1669 2421 m
-1846 2421 l
-1846 2422 l
-1669 2422 l
-1668 2422 m
-1845 2422 l
-1845 2423 l
-1668 2423 l
-1667 2423 m
-1844 2423 l
-1844 2424 l
-1667 2424 l
-1666 2424 m
-1843 2424 l
-1843 2425 l
-1666 2425 l
-1665 2425 m
-1842 2425 l
-1842 2426 l
-1665 2426 l
-1664 2426 m
-1841 2426 l
-1841 2427 l
-1664 2427 l
-1663 2427 m
-1840 2427 l
-1840 2428 l
-1663 2428 l
-1662 2428 m
-1839 2428 l
-1839 2429 l
-1662 2429 l
-1661 2429 m
-1838 2429 l
-1838 2430 l
-1661 2430 l
-1660 2430 m
-1837 2430 l
-1837 2431 l
-1660 2431 l
-1659 2431 m
-1836 2431 l
-1836 2432 l
-1659 2432 l
-1657 2432 m
-1835 2432 l
-1835 2433 l
-1657 2433 l
-1656 2433 m
-1834 2433 l
-1834 2434 l
-1656 2434 l
-1655 2434 m
-1833 2434 l
-1833 2435 l
-1655 2435 l
-1654 2435 m
-1832 2435 l
-1832 2436 l
-1654 2436 l
-1653 2436 m
-1831 2436 l
-1831 2437 l
-1653 2437 l
-1652 2437 m
-1830 2437 l
-1830 2438 l
-1652 2438 l
-1651 2438 m
-1829 2438 l
-1829 2439 l
-1651 2439 l
-1650 2439 m
-1827 2439 l
-1827 2440 l
-1650 2440 l
-1649 2440 m
-1826 2440 l
-1826 2441 l
-1649 2441 l
-1648 2441 m
-1825 2441 l
-1825 2442 l
-1648 2442 l
-1647 2442 m
-1824 2442 l
-1824 2443 l
-1647 2443 l
-1646 2443 m
-1823 2443 l
-1823 2444 l
-1646 2444 l
-1645 2444 m
-1822 2444 l
-1822 2445 l
-1645 2445 l
-1644 2445 m
-1821 2445 l
-1821 2446 l
-1644 2446 l
-1643 2446 m
-1820 2446 l
-1820 2447 l
-1643 2447 l
-1642 2447 m
-1819 2447 l
-1819 2448 l
-1642 2448 l
-1641 2448 m
-1818 2448 l
-1818 2449 l
-1641 2449 l
-1640 2449 m
-1817 2449 l
-1817 2450 l
-1640 2450 l
-1639 2450 m
-1816 2450 l
-1816 2451 l
-1639 2451 l
-1638 2451 m
-1815 2451 l
-1815 2452 l
-1638 2452 l
-1637 2452 m
-1814 2452 l
-1814 2453 l
-1637 2453 l
-1636 2453 m
-1813 2453 l
-1813 2454 l
-1636 2454 l
-1635 2454 m
-1812 2454 l
-1812 2455 l
-1635 2455 l
-1634 2455 m
-1811 2455 l
-1811 2456 l
-1634 2456 l
-1633 2456 m
-1810 2456 l
-1810 2457 l
-1633 2457 l
-1632 2457 m
-1809 2457 l
-1809 2458 l
-1632 2458 l
-1631 2458 m
-1808 2458 l
-1808 2459 l
-1631 2459 l
-1629 2459 m
-1807 2459 l
-1807 2460 l
-1629 2460 l
-1628 2460 m
-1806 2460 l
-1806 2461 l
-1628 2461 l
-1627 2461 m
-1805 2461 l
-1805 2462 l
-1627 2462 l
-1626 2462 m
-1804 2462 l
-1804 2463 l
-1626 2463 l
-1625 2463 m
-1803 2463 l
-1803 2464 l
-1625 2464 l
-1624 2464 m
-1802 2464 l
-1802 2465 l
-1624 2465 l
-1623 2465 m
-1801 2465 l
-1801 2466 l
-1623 2466 l
-1622 2466 m
-1799 2466 l
-1799 2467 l
-1622 2467 l
-1621 2467 m
-1798 2467 l
-1798 2468 l
-1621 2468 l
-1620 2468 m
-1797 2468 l
-1797 2469 l
-1620 2469 l
-1619 2469 m
-1796 2469 l
-1796 2470 l
-1619 2470 l
-1618 2470 m
-1795 2470 l
-1795 2471 l
-1618 2471 l
-1617 2471 m
-1794 2471 l
-1794 2472 l
-1617 2472 l
-1616 2472 m
-1793 2472 l
-1793 2473 l
-1616 2473 l
-1615 2473 m
-1792 2473 l
-1792 2474 l
-1615 2474 l
-1614 2474 m
-1791 2474 l
-1791 2475 l
-1614 2475 l
-1613 2475 m
-1790 2475 l
-1790 2476 l
-1613 2476 l
-1612 2476 m
-1789 2476 l
-1789 2477 l
-1612 2477 l
-1611 2477 m
-1788 2477 l
-1788 2478 l
-1611 2478 l
-1610 2478 m
-1787 2478 l
-1787 2479 l
-1610 2479 l
-1609 2479 m
-1786 2479 l
-1786 2480 l
-1609 2480 l
-1608 2480 m
-1785 2480 l
-1785 2481 l
-1608 2481 l
-1607 2481 m
-1784 2481 l
-1784 2482 l
-1607 2482 l
-1606 2482 m
-1783 2482 l
-1783 2483 l
-1606 2483 l
-1605 2483 m
-1782 2483 l
-1782 2484 l
-1605 2484 l
-1604 2484 m
-1781 2484 l
-1781 2485 l
-1604 2485 l
-1602 2485 m
-1780 2485 l
-1780 2486 l
-1602 2486 l
-1601 2486 m
-1779 2486 l
-1779 2487 l
-1601 2487 l
-1600 2487 m
-1778 2487 l
-1778 2488 l
-1600 2488 l
-1599 2488 m
-1777 2488 l
-1777 2489 l
-1599 2489 l
-1598 2489 m
-1776 2489 l
-1776 2490 l
-1598 2490 l
-1597 2490 m
-1775 2490 l
-1775 2491 l
-1597 2491 l
-1596 2491 m
-1774 2491 l
-1774 2492 l
-1596 2492 l
-1595 2492 m
-1773 2492 l
-1773 2493 l
-1595 2493 l
-1594 2493 m
-1771 2493 l
-1771 2494 l
-1594 2494 l
-1593 2494 m
-1770 2494 l
-1770 2495 l
-1593 2495 l
-1592 2495 m
-1769 2495 l
-1769 2496 l
-1592 2496 l
-1591 2496 m
-1768 2496 l
-1768 2497 l
-1591 2497 l
-1590 2497 m
-1767 2497 l
-1767 2498 l
-1590 2498 l
-1589 2498 m
-1766 2498 l
-1766 2499 l
-1589 2499 l
-1588 2499 m
-1765 2499 l
-1765 2500 l
-1588 2500 l
-1587 2500 m
-1764 2500 l
-1764 2501 l
-1587 2501 l
-1586 2501 m
-1763 2501 l
-1763 2502 l
-1586 2502 l
-1585 2502 m
-1762 2502 l
-1762 2503 l
-1585 2503 l
-1584 2503 m
-1761 2503 l
-1761 2504 l
-1584 2504 l
-1583 2504 m
-1760 2504 l
-1760 2505 l
-1583 2505 l
-1582 2505 m
-1759 2505 l
-1759 2506 l
-1582 2506 l
-1581 2506 m
-1758 2506 l
-1758 2507 l
-1581 2507 l
-1580 2507 m
-1757 2507 l
-1757 2508 l
-1580 2508 l
-1579 2508 m
-1756 2508 l
-1756 2509 l
-1579 2509 l
-1578 2509 m
-1755 2509 l
-1755 2510 l
-1578 2510 l
-1577 2510 m
-1754 2510 l
-1754 2511 l
-1577 2511 l
-1576 2511 m
-1753 2511 l
-1753 2512 l
-1576 2512 l
-1576 2512 m
-1752 2512 l
-1752 2513 l
-1576 2513 l
-1576 2513 m
-1751 2513 l
-1751 2514 l
-1576 2514 l
-1577 2514 m
-1750 2514 l
-1750 2515 l
-1577 2515 l
-1578 2515 m
-1749 2515 l
-1749 2516 l
-1578 2516 l
-1579 2516 m
-1748 2516 l
-1748 2517 l
-1579 2517 l
-1580 2517 m
-1747 2517 l
-1747 2518 l
-1580 2518 l
-1581 2518 m
-1746 2518 l
-1746 2519 l
-1581 2519 l
-1582 2519 m
-1745 2519 l
-1745 2520 l
-1582 2520 l
-1583 2520 m
-1743 2520 l
-1743 2521 l
-1583 2521 l
-1584 2521 m
-1742 2521 l
-1742 2522 l
-1584 2522 l
-1585 2522 m
-1741 2522 l
-1741 2523 l
-1585 2523 l
-1586 2523 m
-1740 2523 l
-1740 2524 l
-1586 2524 l
-1587 2524 m
-1739 2524 l
-1739 2525 l
-1587 2525 l
-1588 2525 m
-1738 2525 l
-1738 2526 l
-1588 2526 l
-1589 2526 m
-1737 2526 l
-1737 2527 l
-1589 2527 l
-1590 2527 m
-1736 2527 l
-1736 2528 l
-1590 2528 l
-1591 2528 m
-1735 2528 l
-1735 2529 l
-1591 2529 l
-1592 2529 m
-1734 2529 l
-1734 2530 l
-1592 2530 l
-1593 2530 m
-1733 2530 l
-1733 2531 l
-1593 2531 l
-1594 2531 m
-1732 2531 l
-1732 2532 l
-1594 2532 l
-1595 2532 m
-1731 2532 l
-1731 2533 l
-1595 2533 l
-1596 2533 m
-1730 2533 l
-1730 2534 l
-1596 2534 l
-1597 2534 m
-1729 2534 l
-1729 2535 l
-1597 2535 l
-1597 2535 m
-1728 2535 l
-1728 2536 l
-1597 2536 l
-1598 2536 m
-1727 2536 l
-1727 2537 l
-1598 2537 l
-1599 2537 m
-1726 2537 l
-1726 2538 l
-1599 2538 l
-1600 2538 m
-1725 2538 l
-1725 2539 l
-1600 2539 l
-1601 2539 m
-1724 2539 l
-1724 2540 l
-1601 2540 l
-1602 2540 m
-1723 2540 l
-1723 2541 l
-1602 2541 l
-1603 2541 m
-1722 2541 l
-1722 2542 l
-1603 2542 l
-1604 2542 m
-1721 2542 l
-1721 2543 l
-1604 2543 l
-1605 2543 m
-1720 2543 l
-1720 2544 l
-1605 2544 l
-1606 2544 m
-1719 2544 l
-1719 2545 l
-1606 2545 l
-1607 2545 m
-1718 2545 l
-1718 2546 l
-1607 2546 l
-1608 2546 m
-1717 2546 l
-1717 2547 l
-1608 2547 l
-1609 2547 m
-1715 2547 l
-1715 2548 l
-1609 2548 l
-1610 2548 m
-1714 2548 l
-1714 2549 l
-1610 2549 l
-1611 2549 m
-1713 2549 l
-1713 2550 l
-1611 2550 l
-1612 2550 m
-1712 2550 l
-1712 2551 l
-1612 2551 l
-1613 2551 m
-1711 2551 l
-1711 2552 l
-1613 2552 l
-1614 2552 m
-1710 2552 l
-1710 2553 l
-1614 2553 l
-1615 2553 m
-1709 2553 l
-1709 2554 l
-1615 2554 l
-1616 2554 m
-1708 2554 l
-1708 2555 l
-1616 2555 l
-1617 2555 m
-1707 2555 l
-1707 2556 l
-1617 2556 l
-1618 2556 m
-1706 2556 l
-1706 2557 l
-1618 2557 l
-1618 2557 m
-1705 2557 l
-1705 2558 l
-1618 2558 l
-1619 2558 m
-1704 2558 l
-1704 2559 l
-1619 2559 l
-1620 2559 m
-1703 2559 l
-1703 2560 l
-1620 2560 l
-1621 2560 m
-1702 2560 l
-1702 2561 l
-1621 2561 l
-1622 2561 m
-1701 2561 l
-1701 2562 l
-1622 2562 l
-1623 2562 m
-1700 2562 l
-1700 2563 l
-1623 2563 l
-1624 2563 m
-1699 2563 l
-1699 2564 l
-1624 2564 l
-1625 2564 m
-1698 2564 l
-1698 2565 l
-1625 2565 l
-1626 2565 m
-1697 2565 l
-1697 2566 l
-1626 2566 l
-1627 2566 m
-1696 2566 l
-1696 2567 l
-1627 2567 l
-1628 2567 m
-1695 2567 l
-1695 2568 l
-1628 2568 l
-1629 2568 m
-1694 2568 l
-1694 2569 l
-1629 2569 l
-1630 2569 m
-1693 2569 l
-1693 2570 l
-1630 2570 l
-1631 2570 m
-1692 2570 l
-1692 2571 l
-1631 2571 l
-1632 2571 m
-1691 2571 l
-1691 2572 l
-1632 2572 l
-1633 2572 m
-1690 2572 l
-1690 2573 l
-1633 2573 l
-1634 2573 m
-1689 2573 l
-1689 2574 l
-1634 2574 l
-1635 2574 m
-1687 2574 l
-1687 2575 l
-1635 2575 l
-1636 2575 m
-1686 2575 l
-1686 2576 l
-1636 2576 l
-1637 2576 m
-1685 2576 l
-1685 2577 l
-1637 2577 l
-1638 2577 m
-1684 2577 l
-1684 2578 l
-1638 2578 l
-1639 2578 m
-1683 2578 l
-1683 2579 l
-1639 2579 l
-1639 2579 m
-1682 2579 l
-1682 2580 l
-1639 2580 l
-1640 2580 m
-1681 2580 l
-1681 2581 l
-1640 2581 l
-1641 2581 m
-1680 2581 l
-1680 2582 l
-1641 2582 l
-1642 2582 m
-1679 2582 l
-1679 2583 l
-1642 2583 l
-1643 2583 m
-1678 2583 l
-1678 2584 l
-1643 2584 l
-1644 2584 m
-1677 2584 l
-1677 2585 l
-1644 2585 l
-1645 2585 m
-1676 2585 l
-1676 2586 l
-1645 2586 l
-1646 2586 m
-1675 2586 l
-1675 2587 l
-1646 2587 l
-1647 2587 m
-1674 2587 l
-1674 2588 l
-1647 2588 l
-1648 2588 m
-1673 2588 l
-1673 2589 l
-1648 2589 l
-1649 2589 m
-1672 2589 l
-1672 2590 l
-1649 2590 l
-1650 2590 m
-1671 2590 l
-1671 2591 l
-1650 2591 l
-1651 2591 m
-1670 2591 l
-1670 2592 l
-1651 2592 l
-1652 2592 m
-1669 2592 l
-1669 2593 l
-1652 2593 l
-1653 2593 m
-1668 2593 l
-1668 2594 l
-1653 2594 l
-1654 2594 m
-1667 2594 l
-1667 2595 l
-1654 2595 l
-1655 2595 m
-1666 2595 l
-1666 2596 l
-1655 2596 l
-1656 2596 m
-1665 2596 l
-1665 2597 l
-1656 2597 l
-1657 2597 m
-1664 2597 l
-1664 2598 l
-1657 2598 l
-1658 2598 m
-1663 2598 l
-1663 2599 l
-1658 2599 l
-1659 2599 m
-1662 2599 l
-1662 2600 l
-1659 2600 l
-Y
-1852.4 2414.5 m
-1768 2327 l
-1576 2512 l
-1660 2600 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-1776 2372 m
-1774 2369 l
-1765 2365 l
-1759 2365 l
-1750 2368 l
-1738 2380 l
-1735 2388 l
-1735 2394 l
-1737 2403 l
-1743 2409 l
-1752 2412 l
-1767 2416 l
-1826 2417 l
-1784 2457 l
-S
-1716 2429 m
-1713 2426 l
-1704 2423 l
-1699 2423 l
-1690 2426 l
-1678 2438 l
-1674 2446 l
-1674 2452 l
-1677 2461 l
-1683 2467 l
-1692 2470 l
-1706 2474 l
-1765 2475 l
-1723 2515 l
-S
-1608 2504 m
-1638 2475 l
-1667 2499 l
-1662 2499 l
-1650 2505 l
-1641 2514 l
-1634 2525 l
-1634 2537 l
-1640 2549 l
-1646 2555 l
-1657 2561 l
-1669 2561 l
-1681 2556 l
-1690 2547 l
-1696 2535 l
-1696 2529 l
-1694 2521 l
-S
-1 g
-3771 2313 m
-3774 2313 l
-3774 2314 l
-3771 2314 l
-3770 2314 m
-3776 2314 l
-3776 2315 l
-3770 2315 l
-3769 2315 m
-3777 2315 l
-3777 2316 l
-3769 2316 l
-3769 2316 m
-3778 2316 l
-3778 2317 l
-3769 2317 l
-3768 2317 m
-3779 2317 l
-3779 2318 l
-3768 2318 l
-3767 2318 m
-3781 2318 l
-3781 2319 l
-3767 2319 l
-3766 2319 m
-3782 2319 l
-3782 2320 l
-3766 2320 l
-3766 2320 m
-3783 2320 l
-3783 2321 l
-3766 2321 l
-3765 2321 m
-3785 2321 l
-3785 2322 l
-3765 2322 l
-3764 2322 m
-3786 2322 l
-3786 2323 l
-3764 2323 l
-3763 2323 m
-3787 2323 l
-3787 2324 l
-3763 2324 l
-3763 2324 m
-3789 2324 l
-3789 2325 l
-3763 2325 l
-3762 2325 m
-3790 2325 l
-3790 2326 l
-3762 2326 l
-3761 2326 m
-3791 2326 l
-3791 2327 l
-3761 2327 l
-3760 2327 m
-3792 2327 l
-3792 2328 l
-3760 2328 l
-3760 2328 m
-3794 2328 l
-3794 2329 l
-3760 2329 l
-3759 2329 m
-3795 2329 l
-3795 2330 l
-3759 2330 l
-3758 2330 m
-3796 2330 l
-3796 2331 l
-3758 2331 l
-3757 2331 m
-3798 2331 l
-3798 2332 l
-3757 2332 l
-3756 2332 m
-3799 2332 l
-3799 2333 l
-3756 2333 l
-3756 2333 m
-3800 2333 l
-3800 2334 l
-3756 2334 l
-3755 2334 m
-3801 2334 l
-3801 2335 l
-3755 2335 l
-3754 2335 m
-3803 2335 l
-3803 2336 l
-3754 2336 l
-3753 2336 m
-3804 2336 l
-3804 2337 l
-3753 2337 l
-3753 2337 m
-3805 2337 l
-3805 2338 l
-3753 2338 l
-3752 2338 m
-3807 2338 l
-3807 2339 l
-3752 2339 l
-3751 2339 m
-3808 2339 l
-3808 2340 l
-3751 2340 l
-3750 2340 m
-3809 2340 l
-3809 2341 l
-3750 2341 l
-3750 2341 m
-3811 2341 l
-3811 2342 l
-3750 2342 l
-3749 2342 m
-3812 2342 l
-3812 2343 l
-3749 2343 l
-3748 2343 m
-3813 2343 l
-3813 2344 l
-3748 2344 l
-3747 2344 m
-3814 2344 l
-3814 2345 l
-3747 2345 l
-3747 2345 m
-3816 2345 l
-3816 2346 l
-3747 2346 l
-3746 2346 m
-3817 2346 l
-3817 2347 l
-3746 2347 l
-3745 2347 m
-3818 2347 l
-3818 2348 l
-3745 2348 l
-3744 2348 m
-3820 2348 l
-3820 2349 l
-3744 2349 l
-3744 2349 m
-3821 2349 l
-3821 2350 l
-3744 2350 l
-3743 2350 m
-3822 2350 l
-3822 2351 l
-3743 2351 l
-3742 2351 m
-3824 2351 l
-3824 2352 l
-3742 2352 l
-3741 2352 m
-3825 2352 l
-3825 2353 l
-3741 2353 l
-3740 2353 m
-3826 2353 l
-3826 2354 l
-3740 2354 l
-3740 2354 m
-3827 2354 l
-3827 2355 l
-3740 2355 l
-3739 2355 m
-3829 2355 l
-3829 2356 l
-3739 2356 l
-3738 2356 m
-3830 2356 l
-3830 2357 l
-3738 2357 l
-3737 2357 m
-3831 2357 l
-3831 2358 l
-3737 2358 l
-3737 2358 m
-3833 2358 l
-3833 2359 l
-3737 2359 l
-3736 2359 m
-3834 2359 l
-3834 2360 l
-3736 2360 l
-3735 2360 m
-3835 2360 l
-3835 2361 l
-3735 2361 l
-3734 2361 m
-3837 2361 l
-3837 2362 l
-3734 2362 l
-3734 2362 m
-3838 2362 l
-3838 2363 l
-3734 2363 l
-3733 2363 m
-3839 2363 l
-3839 2364 l
-3733 2364 l
-3732 2364 m
-3840 2364 l
-3840 2365 l
-3732 2365 l
-3731 2365 m
-3842 2365 l
-3842 2366 l
-3731 2366 l
-3731 2366 m
-3843 2366 l
-3843 2367 l
-3731 2367 l
-3730 2367 m
-3844 2367 l
-3844 2368 l
-3730 2368 l
-3729 2368 m
-3846 2368 l
-3846 2369 l
-3729 2369 l
-3728 2369 m
-3847 2369 l
-3847 2370 l
-3728 2370 l
-3727 2370 m
-3848 2370 l
-3848 2371 l
-3727 2371 l
-3727 2371 m
-3850 2371 l
-3850 2372 l
-3727 2372 l
-3726 2372 m
-3851 2372 l
-3851 2373 l
-3726 2373 l
-3725 2373 m
-3852 2373 l
-3852 2374 l
-3725 2374 l
-3724 2374 m
-3853 2374 l
-3853 2375 l
-3724 2375 l
-3724 2375 m
-3855 2375 l
-3855 2376 l
-3724 2376 l
-3723 2376 m
-3856 2376 l
-3856 2377 l
-3723 2377 l
-3722 2377 m
-3857 2377 l
-3857 2378 l
-3722 2378 l
-3721 2378 m
-3859 2378 l
-3859 2379 l
-3721 2379 l
-3721 2379 m
-3860 2379 l
-3860 2380 l
-3721 2380 l
-3720 2380 m
-3861 2380 l
-3861 2381 l
-3720 2381 l
-3719 2381 m
-3862 2381 l
-3862 2382 l
-3719 2382 l
-3718 2382 m
-3864 2382 l
-3864 2383 l
-3718 2383 l
-3718 2383 m
-3865 2383 l
-3865 2384 l
-3718 2384 l
-3717 2384 m
-3866 2384 l
-3866 2385 l
-3717 2385 l
-3716 2385 m
-3868 2385 l
-3868 2386 l
-3716 2386 l
-3715 2386 m
-3869 2386 l
-3869 2387 l
-3715 2387 l
-3715 2387 m
-3870 2387 l
-3870 2388 l
-3715 2388 l
-3714 2388 m
-3872 2388 l
-3872 2389 l
-3714 2389 l
-3713 2389 m
-3873 2389 l
-3873 2390 l
-3713 2390 l
-3712 2390 m
-3874 2390 l
-3874 2391 l
-3712 2391 l
-3711 2391 m
-3875 2391 l
-3875 2392 l
-3711 2392 l
-3711 2392 m
-3877 2392 l
-3877 2393 l
-3711 2393 l
-3710 2393 m
-3878 2393 l
-3878 2394 l
-3710 2394 l
-3709 2394 m
-3879 2394 l
-3879 2395 l
-3709 2395 l
-3708 2395 m
-3881 2395 l
-3881 2396 l
-3708 2396 l
-3708 2396 m
-3882 2396 l
-3882 2397 l
-3708 2397 l
-3707 2397 m
-3883 2397 l
-3883 2398 l
-3707 2398 l
-3706 2398 m
-3885 2398 l
-3885 2399 l
-3706 2399 l
-3705 2399 m
-3886 2399 l
-3886 2400 l
-3705 2400 l
-3705 2400 m
-3887 2400 l
-3887 2401 l
-3705 2401 l
-3704 2401 m
-3888 2401 l
-3888 2402 l
-3704 2402 l
-3703 2402 m
-3890 2402 l
-3890 2403 l
-3703 2403 l
-3702 2403 m
-3891 2403 l
-3891 2404 l
-3702 2404 l
-3702 2404 m
-3892 2404 l
-3892 2405 l
-3702 2405 l
-3701 2405 m
-3894 2405 l
-3894 2406 l
-3701 2406 l
-3700 2406 m
-3895 2406 l
-3895 2407 l
-3700 2407 l
-3699 2407 m
-3896 2407 l
-3896 2408 l
-3699 2408 l
-3699 2408 m
-3898 2408 l
-3898 2409 l
-3699 2409 l
-3699 2409 m
-3899 2409 l
-3899 2410 l
-3699 2410 l
-3700 2410 m
-3900 2410 l
-3900 2411 l
-3700 2411 l
-3701 2411 m
-3901 2411 l
-3901 2412 l
-3701 2412 l
-3702 2412 m
-3903 2412 l
-3903 2413 l
-3702 2413 l
-3704 2413 m
-3904 2413 l
-3904 2414 l
-3704 2414 l
-3705 2414 m
-3905 2414 l
-3905 2415 l
-3705 2415 l
-3706 2415 m
-3907 2415 l
-3907 2416 l
-3706 2416 l
-3708 2416 m
-3908 2416 l
-3908 2417 l
-3708 2417 l
-3709 2417 m
-3909 2417 l
-3909 2418 l
-3709 2418 l
-3710 2418 m
-3911 2418 l
-3911 2419 l
-3710 2419 l
-3712 2419 m
-3912 2419 l
-3912 2420 l
-3712 2420 l
-3713 2420 m
-3913 2420 l
-3913 2421 l
-3713 2421 l
-3714 2421 m
-3914 2421 l
-3914 2422 l
-3714 2422 l
-3715 2422 m
-3916 2422 l
-3916 2423 l
-3715 2423 l
-3717 2423 m
-3917 2423 l
-3917 2424 l
-3717 2424 l
-3718 2424 m
-3918 2424 l
-3918 2425 l
-3718 2425 l
-3719 2425 m
-3920 2425 l
-3920 2426 l
-3719 2426 l
-3721 2426 m
-3921 2426 l
-3921 2427 l
-3721 2427 l
-3722 2427 m
-3922 2427 l
-3922 2428 l
-3722 2428 l
-3723 2428 m
-3923 2428 l
-3923 2429 l
-3723 2429 l
-3725 2429 m
-3925 2429 l
-3925 2430 l
-3725 2430 l
-3726 2430 m
-3926 2430 l
-3926 2431 l
-3726 2431 l
-3727 2431 m
-3927 2431 l
-3927 2432 l
-3727 2432 l
-3728 2432 m
-3929 2432 l
-3929 2433 l
-3728 2433 l
-3730 2433 m
-3930 2433 l
-3930 2434 l
-3730 2434 l
-3731 2434 m
-3931 2434 l
-3931 2435 l
-3731 2435 l
-3732 2435 m
-3933 2435 l
-3933 2436 l
-3732 2436 l
-3734 2436 m
-3934 2436 l
-3934 2437 l
-3734 2437 l
-3735 2437 m
-3935 2437 l
-3935 2438 l
-3735 2438 l
-3736 2438 m
-3936 2438 l
-3936 2439 l
-3736 2439 l
-3738 2439 m
-3938 2439 l
-3938 2440 l
-3738 2440 l
-3739 2440 m
-3939 2440 l
-3939 2441 l
-3739 2441 l
-3740 2441 m
-3940 2441 l
-3940 2442 l
-3740 2442 l
-3741 2442 m
-3942 2442 l
-3942 2443 l
-3741 2443 l
-3743 2443 m
-3943 2443 l
-3943 2444 l
-3743 2444 l
-3744 2444 m
-3944 2444 l
-3944 2445 l
-3744 2445 l
-3745 2445 m
-3946 2445 l
-3946 2446 l
-3745 2446 l
-3747 2446 m
-3947 2446 l
-3947 2447 l
-3747 2447 l
-3748 2447 m
-3948 2447 l
-3948 2448 l
-3748 2448 l
-3749 2448 m
-3949 2448 l
-3949 2449 l
-3749 2449 l
-3751 2449 m
-3951 2449 l
-3951 2450 l
-3751 2450 l
-3752 2450 m
-3952 2450 l
-3952 2451 l
-3752 2451 l
-3753 2451 m
-3953 2451 l
-3953 2452 l
-3753 2452 l
-3754 2452 m
-3955 2452 l
-3955 2453 l
-3754 2453 l
-3756 2453 m
-3956 2453 l
-3956 2454 l
-3756 2454 l
-3757 2454 m
-3957 2454 l
-3957 2455 l
-3757 2455 l
-3758 2455 m
-3959 2455 l
-3959 2456 l
-3758 2456 l
-3760 2456 m
-3960 2456 l
-3960 2457 l
-3760 2457 l
-3761 2457 m
-3961 2457 l
-3961 2458 l
-3761 2458 l
-3762 2458 m
-3962 2458 l
-3962 2459 l
-3762 2459 l
-3764 2459 m
-3964 2459 l
-3964 2460 l
-3764 2460 l
-3765 2460 m
-3965 2460 l
-3965 2461 l
-3765 2461 l
-3766 2461 m
-3966 2461 l
-3966 2462 l
-3766 2462 l
-3767 2462 m
-3968 2462 l
-3968 2463 l
-3767 2463 l
-3769 2463 m
-3969 2463 l
-3969 2464 l
-3769 2464 l
-3770 2464 m
-3970 2464 l
-3970 2465 l
-3770 2465 l
-3771 2465 m
-3972 2465 l
-3972 2466 l
-3771 2466 l
-3773 2466 m
-3973 2466 l
-3973 2467 l
-3773 2467 l
-3774 2467 m
-3974 2467 l
-3974 2468 l
-3774 2468 l
-3775 2468 m
-3975 2468 l
-3975 2469 l
-3775 2469 l
-3777 2469 m
-3977 2469 l
-3977 2470 l
-3777 2470 l
-3778 2470 m
-3978 2470 l
-3978 2471 l
-3778 2471 l
-3779 2471 m
-3979 2471 l
-3979 2472 l
-3779 2472 l
-3780 2472 m
-3981 2472 l
-3981 2473 l
-3780 2473 l
-3782 2473 m
-3982 2473 l
-3982 2474 l
-3782 2474 l
-3783 2474 m
-3983 2474 l
-3983 2475 l
-3783 2475 l
-3784 2475 m
-3984 2475 l
-3984 2476 l
-3784 2476 l
-3786 2476 m
-3984 2476 l
-3984 2477 l
-3786 2477 l
-3787 2477 m
-3984 2477 l
-3984 2478 l
-3787 2478 l
-3788 2478 m
-3983 2478 l
-3983 2479 l
-3788 2479 l
-3790 2479 m
-3982 2479 l
-3982 2480 l
-3790 2480 l
-3791 2480 m
-3981 2480 l
-3981 2481 l
-3791 2481 l
-3792 2481 m
-3981 2481 l
-3981 2482 l
-3792 2482 l
-3793 2482 m
-3980 2482 l
-3980 2483 l
-3793 2483 l
-3795 2483 m
-3979 2483 l
-3979 2484 l
-3795 2484 l
-3796 2484 m
-3978 2484 l
-3978 2485 l
-3796 2485 l
-3797 2485 m
-3978 2485 l
-3978 2486 l
-3797 2486 l
-3799 2486 m
-3977 2486 l
-3977 2487 l
-3799 2487 l
-3800 2487 m
-3976 2487 l
-3976 2488 l
-3800 2488 l
-3801 2488 m
-3975 2488 l
-3975 2489 l
-3801 2489 l
-3803 2489 m
-3975 2489 l
-3975 2490 l
-3803 2490 l
-3804 2490 m
-3974 2490 l
-3974 2491 l
-3804 2491 l
-3805 2491 m
-3973 2491 l
-3973 2492 l
-3805 2492 l
-3806 2492 m
-3972 2492 l
-3972 2493 l
-3806 2493 l
-3808 2493 m
-3972 2493 l
-3972 2494 l
-3808 2494 l
-3809 2494 m
-3971 2494 l
-3971 2495 l
-3809 2495 l
-3810 2495 m
-3970 2495 l
-3970 2496 l
-3810 2496 l
-3812 2496 m
-3969 2496 l
-3969 2497 l
-3812 2497 l
-3813 2497 m
-3969 2497 l
-3969 2498 l
-3813 2498 l
-3814 2498 m
-3968 2498 l
-3968 2499 l
-3814 2499 l
-3816 2499 m
-3967 2499 l
-3967 2500 l
-3816 2500 l
-3817 2500 m
-3966 2500 l
-3966 2501 l
-3817 2501 l
-3818 2501 m
-3965 2501 l
-3965 2502 l
-3818 2502 l
-3819 2502 m
-3965 2502 l
-3965 2503 l
-3819 2503 l
-3821 2503 m
-3964 2503 l
-3964 2504 l
-3821 2504 l
-3822 2504 m
-3963 2504 l
-3963 2505 l
-3822 2505 l
-3823 2505 m
-3962 2505 l
-3962 2506 l
-3823 2506 l
-3825 2506 m
-3962 2506 l
-3962 2507 l
-3825 2507 l
-3826 2507 m
-3961 2507 l
-3961 2508 l
-3826 2508 l
-3827 2508 m
-3960 2508 l
-3960 2509 l
-3827 2509 l
-3829 2509 m
-3959 2509 l
-3959 2510 l
-3829 2510 l
-3830 2510 m
-3959 2510 l
-3959 2511 l
-3830 2511 l
-3831 2511 m
-3958 2511 l
-3958 2512 l
-3831 2512 l
-3832 2512 m
-3957 2512 l
-3957 2513 l
-3832 2513 l
-3834 2513 m
-3956 2513 l
-3956 2514 l
-3834 2514 l
-3835 2514 m
-3956 2514 l
-3956 2515 l
-3835 2515 l
-3836 2515 m
-3955 2515 l
-3955 2516 l
-3836 2516 l
-3838 2516 m
-3954 2516 l
-3954 2517 l
-3838 2517 l
-3839 2517 m
-3953 2517 l
-3953 2518 l
-3839 2518 l
-3840 2518 m
-3953 2518 l
-3953 2519 l
-3840 2519 l
-3842 2519 m
-3952 2519 l
-3952 2520 l
-3842 2520 l
-3843 2520 m
-3951 2520 l
-3951 2521 l
-3843 2521 l
-3844 2521 m
-3950 2521 l
-3950 2522 l
-3844 2522 l
-3845 2522 m
-3950 2522 l
-3950 2523 l
-3845 2523 l
-3847 2523 m
-3949 2523 l
-3949 2524 l
-3847 2524 l
-3848 2524 m
-3948 2524 l
-3948 2525 l
-3848 2525 l
-3849 2525 m
-3947 2525 l
-3947 2526 l
-3849 2526 l
-3851 2526 m
-3946 2526 l
-3946 2527 l
-3851 2527 l
-3852 2527 m
-3946 2527 l
-3946 2528 l
-3852 2528 l
-3853 2528 m
-3945 2528 l
-3945 2529 l
-3853 2529 l
-3855 2529 m
-3944 2529 l
-3944 2530 l
-3855 2530 l
-3856 2530 m
-3943 2530 l
-3943 2531 l
-3856 2531 l
-3857 2531 m
-3943 2531 l
-3943 2532 l
-3857 2532 l
-3858 2532 m
-3942 2532 l
-3942 2533 l
-3858 2533 l
-3860 2533 m
-3941 2533 l
-3941 2534 l
-3860 2534 l
-3861 2534 m
-3940 2534 l
-3940 2535 l
-3861 2535 l
-3862 2535 m
-3940 2535 l
-3940 2536 l
-3862 2536 l
-3864 2536 m
-3939 2536 l
-3939 2537 l
-3864 2537 l
-3865 2537 m
-3938 2537 l
-3938 2538 l
-3865 2538 l
-3866 2538 m
-3937 2538 l
-3937 2539 l
-3866 2539 l
-3868 2539 m
-3937 2539 l
-3937 2540 l
-3868 2540 l
-3869 2540 m
-3936 2540 l
-3936 2541 l
-3869 2541 l
-3870 2541 m
-3935 2541 l
-3935 2542 l
-3870 2542 l
-3871 2542 m
-3934 2542 l
-3934 2543 l
-3871 2543 l
-3873 2543 m
-3934 2543 l
-3934 2544 l
-3873 2544 l
-3874 2544 m
-3933 2544 l
-3933 2545 l
-3874 2545 l
-3875 2545 m
-3932 2545 l
-3932 2546 l
-3875 2546 l
-3877 2546 m
-3931 2546 l
-3931 2547 l
-3877 2547 l
-3878 2547 m
-3931 2547 l
-3931 2548 l
-3878 2548 l
-3879 2548 m
-3930 2548 l
-3930 2549 l
-3879 2549 l
-3881 2549 m
-3929 2549 l
-3929 2550 l
-3881 2550 l
-3882 2550 m
-3928 2550 l
-3928 2551 l
-3882 2551 l
-3883 2551 m
-3927 2551 l
-3927 2552 l
-3883 2552 l
-3884 2552 m
-3927 2552 l
-3927 2553 l
-3884 2553 l
-3886 2553 m
-3926 2553 l
-3926 2554 l
-3886 2554 l
-3887 2554 m
-3925 2554 l
-3925 2555 l
-3887 2555 l
-3888 2555 m
-3924 2555 l
-3924 2556 l
-3888 2556 l
-3890 2556 m
-3924 2556 l
-3924 2557 l
-3890 2557 l
-3891 2557 m
-3923 2557 l
-3923 2558 l
-3891 2558 l
-3892 2558 m
-3922 2558 l
-3922 2559 l
-3892 2559 l
-3894 2559 m
-3921 2559 l
-3921 2560 l
-3894 2560 l
-3895 2560 m
-3921 2560 l
-3921 2561 l
-3895 2561 l
-3896 2561 m
-3920 2561 l
-3920 2562 l
-3896 2562 l
-3897 2562 m
-3919 2562 l
-3919 2563 l
-3897 2563 l
-3899 2563 m
-3918 2563 l
-3918 2564 l
-3899 2564 l
-3900 2564 m
-3918 2564 l
-3918 2565 l
-3900 2565 l
-3901 2565 m
-3917 2565 l
-3917 2566 l
-3901 2566 l
-3903 2566 m
-3916 2566 l
-3916 2567 l
-3903 2567 l
-3904 2567 m
-3915 2567 l
-3915 2568 l
-3904 2568 l
-3905 2568 m
-3915 2568 l
-3915 2569 l
-3905 2569 l
-3907 2569 m
-3914 2569 l
-3914 2570 l
-3907 2570 l
-3908 2570 m
-3913 2570 l
-3913 2571 l
-3908 2571 l
-3909 2571 m
-3912 2571 l
-3912 2572 l
-3909 2572 l
-Y
-3772.3 2312.9 m
-3699 2409 l
-3911 2572 l
-3984 2476 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-3741 2394 m
-3739 2398 l
-3737 2407 l
-3738 2413 l
-3742 2421 l
-3755 2431 l
-3764 2433 l
-3770 2432 l
-3779 2428 l
-3784 2422 l
-3785 2412 l
-3786 2397 l
-3779 2339 l
-3825 2374 l
-S
-3838 2495 m
-3858 2400 l
-S
-3792 2459 m
-3838 2495 l
-S
-3878 2525 m
-3870 2514 l
-3871 2499 l
-3881 2480 l
-3888 2470 l
-3905 2456 l
-3919 2451 l
-3931 2456 l
-3938 2461 l
-3945 2472 l
-3944 2487 l
-3935 2506 l
-3927 2516 l
-3911 2530 l
-3897 2535 l
-3885 2530 l
-3878 2525 l
-S
-1 g
-4405 3855 m
-4409 3855 l
-4409 3856 l
-4405 3856 l
-4405 3856 m
-4412 3856 l
-4412 3857 l
-4405 3857 l
-4404 3857 m
-4415 3857 l
-4415 3858 l
-4404 3858 l
-4404 3858 m
-4418 3858 l
-4418 3859 l
-4404 3859 l
-4404 3859 m
-4421 3859 l
-4421 3860 l
-4404 3860 l
-4403 3860 m
-4424 3860 l
-4424 3861 l
-4403 3861 l
-4403 3861 m
-4427 3861 l
-4427 3862 l
-4403 3862 l
-4403 3862 m
-4429 3862 l
-4429 3863 l
-4403 3863 l
-4402 3863 m
-4432 3863 l
-4432 3864 l
-4402 3864 l
-4402 3864 m
-4435 3864 l
-4435 3865 l
-4402 3865 l
-4402 3865 m
-4438 3865 l
-4438 3866 l
-4402 3866 l
-4401 3866 m
-4441 3866 l
-4441 3867 l
-4401 3867 l
-4401 3867 m
-4444 3867 l
-4444 3868 l
-4401 3868 l
-4401 3868 m
-4447 3868 l
-4447 3869 l
-4401 3869 l
-4400 3869 m
-4449 3869 l
-4449 3870 l
-4400 3870 l
-4400 3870 m
-4452 3870 l
-4452 3871 l
-4400 3871 l
-4399 3871 m
-4455 3871 l
-4455 3872 l
-4399 3872 l
-4399 3872 m
-4458 3872 l
-4458 3873 l
-4399 3873 l
-4399 3873 m
-4461 3873 l
-4461 3874 l
-4399 3874 l
-4398 3874 m
-4464 3874 l
-4464 3875 l
-4398 3875 l
-4398 3875 m
-4467 3875 l
-4467 3876 l
-4398 3876 l
-4398 3876 m
-4469 3876 l
-4469 3877 l
-4398 3877 l
-4397 3877 m
-4472 3877 l
-4472 3878 l
-4397 3878 l
-4397 3878 m
-4475 3878 l
-4475 3879 l
-4397 3879 l
-4397 3879 m
-4478 3879 l
-4478 3880 l
-4397 3880 l
-4396 3880 m
-4481 3880 l
-4481 3881 l
-4396 3881 l
-4396 3881 m
-4484 3881 l
-4484 3882 l
-4396 3882 l
-4396 3882 m
-4487 3882 l
-4487 3883 l
-4396 3883 l
-4395 3883 m
-4489 3883 l
-4489 3884 l
-4395 3884 l
-4395 3884 m
-4492 3884 l
-4492 3885 l
-4395 3885 l
-4395 3885 m
-4495 3885 l
-4495 3886 l
-4395 3886 l
-4394 3886 m
-4498 3886 l
-4498 3887 l
-4394 3887 l
-4394 3887 m
-4501 3887 l
-4501 3888 l
-4394 3888 l
-4393 3888 m
-4504 3888 l
-4504 3889 l
-4393 3889 l
-4393 3889 m
-4507 3889 l
-4507 3890 l
-4393 3890 l
-4393 3890 m
-4509 3890 l
-4509 3891 l
-4393 3891 l
-4392 3891 m
-4512 3891 l
-4512 3892 l
-4392 3892 l
-4392 3892 m
-4515 3892 l
-4515 3893 l
-4392 3893 l
-4392 3893 m
-4518 3893 l
-4518 3894 l
-4392 3894 l
-4391 3894 m
-4521 3894 l
-4521 3895 l
-4391 3895 l
-4391 3895 m
-4521 3895 l
-4521 3897 l
-4391 3897 l
-4390 3897 m
-4520 3897 l
-4520 3899 l
-4390 3899 l
-4390 3899 m
-4519 3899 l
-4519 3900 l
-4390 3900 l
-4389 3900 m
-4519 3900 l
-4519 3902 l
-4389 3902 l
-4389 3902 m
-4518 3902 l
-4518 3903 l
-4389 3903 l
-4388 3903 m
-4518 3903 l
-4518 3905 l
-4388 3905 l
-4387 3905 m
-4517 3905 l
-4517 3908 l
-4387 3908 l
-4386 3908 m
-4516 3908 l
-4516 3911 l
-4386 3911 l
-4385 3911 m
-4515 3911 l
-4515 3914 l
-4385 3914 l
-4384 3914 m
-4514 3914 l
-4514 3917 l
-4384 3917 l
-4383 3917 m
-4513 3917 l
-4513 3919 l
-4383 3919 l
-4383 3919 m
-4512 3919 l
-4512 3920 l
-4383 3920 l
-4382 3920 m
-4512 3920 l
-4512 3922 l
-4382 3922 l
-4381 3922 m
-4511 3922 l
-4511 3925 l
-4381 3925 l
-4380 3925 m
-4510 3925 l
-4510 3928 l
-4380 3928 l
-4379 3928 m
-4509 3928 l
-4509 3931 l
-4379 3931 l
-4378 3931 m
-4508 3931 l
-4508 3934 l
-4378 3934 l
-4377 3934 m
-4507 3934 l
-4507 3937 l
-4377 3937 l
-4376 3937 m
-4506 3937 l
-4506 3939 l
-4376 3939 l
-4375 3939 m
-4505 3939 l
-4505 3942 l
-4375 3942 l
-4374 3942 m
-4504 3942 l
-4504 3945 l
-4374 3945 l
-4373 3945 m
-4503 3945 l
-4503 3948 l
-4373 3948 l
-4372 3948 m
-4502 3948 l
-4502 3951 l
-4372 3951 l
-4371 3951 m
-4501 3951 l
-4501 3954 l
-4371 3954 l
-4370 3954 m
-4500 3954 l
-4500 3956 l
-4370 3956 l
-4369 3956 m
-4500 3956 l
-4500 3957 l
-4369 3957 l
-4369 3957 m
-4499 3957 l
-4499 3959 l
-4369 3959 l
-4368 3959 m
-4498 3959 l
-4498 3962 l
-4368 3962 l
-4367 3962 m
-4497 3962 l
-4497 3965 l
-4367 3965 l
-4366 3965 m
-4496 3965 l
-4496 3968 l
-4366 3968 l
-4365 3968 m
-4495 3968 l
-4495 3971 l
-4365 3971 l
-4364 3971 m
-4494 3971 l
-4494 3973 l
-4364 3973 l
-4363 3973 m
-4494 3973 l
-4494 3974 l
-4363 3974 l
-4363 3974 m
-4493 3974 l
-4493 3976 l
-4363 3976 l
-4362 3976 m
-4492 3976 l
-4492 3979 l
-4362 3979 l
-4361 3979 m
-4491 3979 l
-4491 3982 l
-4361 3982 l
-4360 3982 m
-4490 3982 l
-4490 3985 l
-4360 3985 l
-4359 3985 m
-4489 3985 l
-4489 3988 l
-4359 3988 l
-4358 3988 m
-4488 3988 l
-4488 3990 l
-4358 3990 l
-4357 3990 m
-4488 3990 l
-4488 3991 l
-4357 3991 l
-4357 3991 m
-4487 3991 l
-4487 3993 l
-4357 3993 l
-4356 3993 m
-4487 3993 l
-4487 3994 l
-4356 3994 l
-4356 3994 m
-4486 3994 l
-4486 3996 l
-4356 3996 l
-4355 3996 m
-4485 3996 l
-4485 3999 l
-4355 3999 l
-4354 3999 m
-4484 3999 l
-4484 4002 l
-4354 4002 l
-4353 4002 m
-4483 4002 l
-4483 4005 l
-4353 4005 l
-4352 4005 m
-4482 4005 l
-4482 4007 l
-4352 4007 l
-4351 4007 m
-4482 4007 l
-4482 4008 l
-4351 4008 l
-4351 4008 m
-4481 4008 l
-4481 4010 l
-4351 4010 l
-4350 4010 m
-4481 4010 l
-4481 4011 l
-4350 4011 l
-4350 4011 m
-4480 4011 l
-4480 4013 l
-4350 4013 l
-4349 4013 m
-4480 4013 l
-4480 4014 l
-4349 4014 l
-4349 4014 m
-4479 4014 l
-4479 4016 l
-4349 4016 l
-4348 4016 m
-4478 4016 l
-4478 4019 l
-4348 4019 l
-4347 4019 m
-4477 4019 l
-4477 4022 l
-4347 4022 l
-4346 4022 m
-4476 4022 l
-4476 4024 l
-4346 4024 l
-4345 4024 m
-4476 4024 l
-4476 4025 l
-4345 4025 l
-4345 4025 m
-4475 4025 l
-4475 4027 l
-4345 4027 l
-4344 4027 m
-4475 4027 l
-4475 4028 l
-4344 4028 l
-4344 4028 m
-4474 4028 l
-4474 4030 l
-4344 4030 l
-4343 4030 m
-4474 4030 l
-4474 4031 l
-4343 4031 l
-4343 4031 m
-4473 4031 l
-4473 4033 l
-4343 4033 l
-4342 4033 m
-4472 4033 l
-4472 4036 l
-4342 4036 l
-4341 4036 m
-4471 4036 l
-4471 4039 l
-4341 4039 l
-4340 4039 m
-4470 4039 l
-4470 4041 l
-4340 4041 l
-4339 4041 m
-4470 4041 l
-4470 4042 l
-4339 4042 l
-4339 4042 m
-4469 4042 l
-4469 4044 l
-4339 4044 l
-4338 4044 m
-4469 4044 l
-4469 4045 l
-4338 4045 l
-4338 4045 m
-4468 4045 l
-4468 4047 l
-4338 4047 l
-4337 4047 m
-4468 4047 l
-4468 4048 l
-4337 4048 l
-4337 4048 m
-4467 4048 l
-4467 4050 l
-4337 4050 l
-4336 4050 m
-4467 4050 l
-4467 4051 l
-4336 4051 l
-4336 4051 m
-4466 4051 l
-4466 4053 l
-4336 4053 l
-4335 4053 m
-4465 4053 l
-4465 4056 l
-4335 4056 l
-4334 4056 m
-4464 4056 l
-4464 4058 l
-4334 4058 l
-4333 4058 m
-4464 4058 l
-4464 4059 l
-4333 4059 l
-4333 4059 m
-4463 4059 l
-4463 4061 l
-4333 4061 l
-4332 4061 m
-4463 4061 l
-4463 4062 l
-4332 4062 l
-4332 4062 m
-4462 4062 l
-4462 4064 l
-4332 4064 l
-4331 4064 m
-4462 4064 l
-4462 4065 l
-4331 4065 l
-4331 4065 m
-4461 4065 l
-4461 4067 l
-4331 4067 l
-4330 4067 m
-4461 4067 l
-4461 4068 l
-4330 4068 l
-4330 4068 m
-4460 4068 l
-4460 4070 l
-4330 4070 l
-4329 4070 m
-4460 4070 l
-4460 4071 l
-4329 4071 l
-4329 4071 m
-4459 4071 l
-4459 4073 l
-4329 4073 l
-4328 4073 m
-4458 4073 l
-4458 4075 l
-4328 4075 l
-4327 4075 m
-4458 4075 l
-4458 4076 l
-4327 4076 l
-4327 4076 m
-4457 4076 l
-4457 4078 l
-4327 4078 l
-4326 4078 m
-4457 4078 l
-4457 4079 l
-4326 4079 l
-4326 4079 m
-4456 4079 l
-4456 4081 l
-4326 4081 l
-4325 4081 m
-4456 4081 l
-4456 4082 l
-4325 4082 l
-4325 4082 m
-4455 4082 l
-4455 4084 l
-4325 4084 l
-4324 4084 m
-4455 4084 l
-4455 4085 l
-4324 4085 l
-4324 4085 m
-4454 4085 l
-4454 4087 l
-4324 4087 l
-4323 4087 m
-4454 4087 l
-4454 4088 l
-4323 4088 l
-4323 4088 m
-4453 4088 l
-4453 4090 l
-4323 4090 l
-4322 4090 m
-4452 4090 l
-4452 4092 l
-4322 4092 l
-4321 4092 m
-4452 4092 l
-4452 4093 l
-4321 4093 l
-4321 4093 m
-4451 4093 l
-4451 4095 l
-4321 4095 l
-4320 4095 m
-4451 4095 l
-4451 4096 l
-4320 4096 l
-4320 4096 m
-4450 4096 l
-4450 4098 l
-4320 4098 l
-4319 4098 m
-4450 4098 l
-4450 4099 l
-4319 4099 l
-4319 4099 m
-4449 4099 l
-4449 4101 l
-4319 4101 l
-4318 4101 m
-4449 4101 l
-4449 4102 l
-4318 4102 l
-4318 4102 m
-4448 4102 l
-4448 4104 l
-4318 4104 l
-4317 4104 m
-4448 4104 l
-4448 4105 l
-4317 4105 l
-4317 4105 m
-4447 4105 l
-4447 4107 l
-4317 4107 l
-4317 4107 m
-4447 4107 l
-4447 4108 l
-4317 4108 l
-4319 4108 m
-4446 4108 l
-4446 4109 l
-4319 4109 l
-4322 4109 m
-4446 4109 l
-4446 4110 l
-4322 4110 l
-4325 4110 m
-4445 4110 l
-4445 4111 l
-4325 4111 l
-4328 4111 m
-4445 4111 l
-4445 4112 l
-4328 4112 l
-4331 4112 m
-4445 4112 l
-4445 4113 l
-4331 4113 l
-4334 4113 m
-4444 4113 l
-4444 4114 l
-4334 4114 l
-4337 4114 m
-4444 4114 l
-4444 4115 l
-4337 4115 l
-4340 4115 m
-4444 4115 l
-4444 4116 l
-4340 4116 l
-4342 4116 m
-4443 4116 l
-4443 4117 l
-4342 4117 l
-4345 4117 m
-4443 4117 l
-4443 4118 l
-4345 4118 l
-4348 4118 m
-4443 4118 l
-4443 4119 l
-4348 4119 l
-4351 4119 m
-4442 4119 l
-4442 4120 l
-4351 4120 l
-4354 4120 m
-4442 4120 l
-4442 4121 l
-4354 4121 l
-4357 4121 m
-4442 4121 l
-4442 4122 l
-4357 4122 l
-4360 4122 m
-4441 4122 l
-4441 4123 l
-4360 4123 l
-4363 4123 m
-4441 4123 l
-4441 4124 l
-4363 4124 l
-4365 4124 m
-4441 4124 l
-4441 4125 l
-4365 4125 l
-4368 4125 m
-4440 4125 l
-4440 4126 l
-4368 4126 l
-4371 4126 m
-4440 4126 l
-4440 4127 l
-4371 4127 l
-4374 4127 m
-4440 4127 l
-4440 4128 l
-4374 4128 l
-4377 4128 m
-4439 4128 l
-4439 4129 l
-4377 4129 l
-4380 4129 m
-4439 4129 l
-4439 4130 l
-4380 4130 l
-4383 4130 m
-4438 4130 l
-4438 4131 l
-4383 4131 l
-4386 4131 m
-4438 4131 l
-4438 4132 l
-4386 4132 l
-4388 4132 m
-4438 4132 l
-4438 4133 l
-4388 4133 l
-4391 4133 m
-4437 4133 l
-4437 4134 l
-4391 4134 l
-4394 4134 m
-4437 4134 l
-4437 4135 l
-4394 4135 l
-4397 4135 m
-4437 4135 l
-4437 4136 l
-4397 4136 l
-4400 4136 m
-4436 4136 l
-4436 4137 l
-4400 4137 l
-4403 4137 m
-4436 4137 l
-4436 4138 l
-4403 4138 l
-4406 4138 m
-4436 4138 l
-4436 4139 l
-4406 4139 l
-4409 4139 m
-4435 4139 l
-4435 4140 l
-4409 4140 l
-4411 4140 m
-4435 4140 l
-4435 4141 l
-4411 4141 l
-4414 4141 m
-4435 4141 l
-4435 4142 l
-4414 4142 l
-4417 4142 m
-4434 4142 l
-4434 4143 l
-4417 4143 l
-4420 4143 m
-4434 4143 l
-4434 4144 l
-4420 4144 l
-4423 4144 m
-4434 4144 l
-4434 4145 l
-4423 4145 l
-4426 4145 m
-4433 4145 l
-4433 4146 l
-4426 4146 l
-4429 4146 m
-4433 4146 l
-4433 4147 l
-4429 4147 l
-Y
-4520.4 3895 m
-4406 3855 l
-4317 4107 l
-4432 4147 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-4412 3888 m
-4397 3931 l
-4437 3919 l
-4433 3930 l
-4434 3940 l
-4436 3945 l
-4447 3953 l
-4455 3956 l
-4468 3956 l
-4478 3951 l
-4487 3941 l
-4491 3929 l
-4491 3916 l
-4488 3910 l
-4482 3904 l
-S
-4399 3976 m
-4392 3983 l
-4376 3990 l
-4459 4019 l
-S
-4343 4085 m
-4357 4045 l
-4393 4054 l
-4388 4057 l
-4380 4067 l
-4376 4079 l
-4376 4092 l
-4381 4103 l
-4391 4111 l
-4399 4113 l
-4412 4114 l
-4423 4109 l
-4431 4098 l
-4435 4086 l
-4435 4073 l
-4433 4068 l
-4426 4061 l
-S
-1 g
-2971 2971 m
-2974 2971 l
-2974 2972 l
-2971 2972 l
-2970 2972 m
-2976 2972 l
-2976 2973 l
-2970 2973 l
-2970 2973 m
-2978 2973 l
-2978 2974 l
-2970 2974 l
-2969 2974 m
-2980 2974 l
-2980 2975 l
-2969 2975 l
-2969 2975 m
-2982 2975 l
-2982 2976 l
-2969 2976 l
-2968 2976 m
-2984 2976 l
-2984 2977 l
-2968 2977 l
-2968 2977 m
-2985 2977 l
-2985 2978 l
-2968 2978 l
-2967 2978 m
-2987 2978 l
-2987 2979 l
-2967 2979 l
-2966 2979 m
-2989 2979 l
-2989 2980 l
-2966 2980 l
-2966 2980 m
-2991 2980 l
-2991 2981 l
-2966 2981 l
-2965 2981 m
-2993 2981 l
-2993 2982 l
-2965 2982 l
-2965 2982 m
-2994 2982 l
-2994 2983 l
-2965 2983 l
-2964 2983 m
-2996 2983 l
-2996 2984 l
-2964 2984 l
-2964 2984 m
-2998 2984 l
-2998 2985 l
-2964 2985 l
-2963 2985 m
-3000 2985 l
-3000 2986 l
-2963 2986 l
-2963 2986 m
-3002 2986 l
-3002 2987 l
-2963 2987 l
-2962 2987 m
-3003 2987 l
-3003 2988 l
-2962 2988 l
-2961 2988 m
-3005 2988 l
-3005 2989 l
-2961 2989 l
-2961 2989 m
-3007 2989 l
-3007 2990 l
-2961 2990 l
-2960 2990 m
-3009 2990 l
-3009 2991 l
-2960 2991 l
-2960 2991 m
-3011 2991 l
-3011 2992 l
-2960 2992 l
-2959 2992 m
-3013 2992 l
-3013 2993 l
-2959 2993 l
-2959 2993 m
-3014 2993 l
-3014 2994 l
-2959 2994 l
-2958 2994 m
-3016 2994 l
-3016 2995 l
-2958 2995 l
-2958 2995 m
-3018 2995 l
-3018 2996 l
-2958 2996 l
-2957 2996 m
-3020 2996 l
-3020 2997 l
-2957 2997 l
-2956 2997 m
-3022 2997 l
-3022 2998 l
-2956 2998 l
-2956 2998 m
-3023 2998 l
-3023 2999 l
-2956 2999 l
-2955 2999 m
-3025 2999 l
-3025 3000 l
-2955 3000 l
-2955 3000 m
-3027 3000 l
-3027 3001 l
-2955 3001 l
-2954 3001 m
-3029 3001 l
-3029 3002 l
-2954 3002 l
-2954 3002 m
-3031 3002 l
-3031 3003 l
-2954 3003 l
-2953 3003 m
-3032 3003 l
-3032 3004 l
-2953 3004 l
-2953 3004 m
-3034 3004 l
-3034 3005 l
-2953 3005 l
-2952 3005 m
-3036 3005 l
-3036 3006 l
-2952 3006 l
-2951 3006 m
-3038 3006 l
-3038 3007 l
-2951 3007 l
-2951 3007 m
-3040 3007 l
-3040 3008 l
-2951 3008 l
-2950 3008 m
-3042 3008 l
-3042 3009 l
-2950 3009 l
-2950 3009 m
-3043 3009 l
-3043 3010 l
-2950 3010 l
-2949 3010 m
-3045 3010 l
-3045 3011 l
-2949 3011 l
-2949 3011 m
-3047 3011 l
-3047 3012 l
-2949 3012 l
-2948 3012 m
-3049 3012 l
-3049 3013 l
-2948 3013 l
-2948 3013 m
-3051 3013 l
-3051 3014 l
-2948 3014 l
-2947 3014 m
-3052 3014 l
-3052 3015 l
-2947 3015 l
-2946 3015 m
-3054 3015 l
-3054 3016 l
-2946 3016 l
-2946 3016 m
-3056 3016 l
-3056 3017 l
-2946 3017 l
-2945 3017 m
-3058 3017 l
-3058 3018 l
-2945 3018 l
-2945 3018 m
-3060 3018 l
-3060 3019 l
-2945 3019 l
-2944 3019 m
-3061 3019 l
-3061 3020 l
-2944 3020 l
-2944 3020 m
-3063 3020 l
-3063 3021 l
-2944 3021 l
-2943 3021 m
-3065 3021 l
-3065 3022 l
-2943 3022 l
-2943 3022 m
-3067 3022 l
-3067 3023 l
-2943 3023 l
-2942 3023 m
-3069 3023 l
-3069 3024 l
-2942 3024 l
-2941 3024 m
-3071 3024 l
-3071 3025 l
-2941 3025 l
-2941 3025 m
-3072 3025 l
-3072 3026 l
-2941 3026 l
-2940 3026 m
-3074 3026 l
-3074 3027 l
-2940 3027 l
-2940 3027 m
-3076 3027 l
-3076 3028 l
-2940 3028 l
-2939 3028 m
-3078 3028 l
-3078 3029 l
-2939 3029 l
-2939 3029 m
-3080 3029 l
-3080 3030 l
-2939 3030 l
-2938 3030 m
-3081 3030 l
-3081 3031 l
-2938 3031 l
-2938 3031 m
-3083 3031 l
-3083 3032 l
-2938 3032 l
-2937 3032 m
-3085 3032 l
-3085 3033 l
-2937 3033 l
-2936 3033 m
-3087 3033 l
-3087 3034 l
-2936 3034 l
-2936 3034 m
-3089 3034 l
-3089 3035 l
-2936 3035 l
-2935 3035 m
-3090 3035 l
-3090 3036 l
-2935 3036 l
-2935 3036 m
-3092 3036 l
-3092 3037 l
-2935 3037 l
-2934 3037 m
-3094 3037 l
-3094 3038 l
-2934 3038 l
-2934 3038 m
-3096 3038 l
-3096 3039 l
-2934 3039 l
-2933 3039 m
-3098 3039 l
-3098 3040 l
-2933 3040 l
-2933 3040 m
-3099 3040 l
-3099 3041 l
-2933 3041 l
-2932 3041 m
-3101 3041 l
-3101 3042 l
-2932 3042 l
-2931 3042 m
-3103 3042 l
-3103 3043 l
-2931 3043 l
-2931 3043 m
-3105 3043 l
-3105 3044 l
-2931 3044 l
-2930 3044 m
-3107 3044 l
-3107 3045 l
-2930 3045 l
-2930 3045 m
-3109 3045 l
-3109 3046 l
-2930 3046 l
-2929 3046 m
-3110 3046 l
-3110 3047 l
-2929 3047 l
-2929 3047 m
-3112 3047 l
-3112 3048 l
-2929 3048 l
-2928 3048 m
-3114 3048 l
-3114 3049 l
-2928 3049 l
-2928 3049 m
-3116 3049 l
-3116 3050 l
-2928 3050 l
-2927 3050 m
-3118 3050 l
-3118 3051 l
-2927 3051 l
-2926 3051 m
-3119 3051 l
-3119 3052 l
-2926 3052 l
-2926 3052 m
-3121 3052 l
-3121 3053 l
-2926 3053 l
-2925 3053 m
-3123 3053 l
-3123 3054 l
-2925 3054 l
-2925 3054 m
-3125 3054 l
-3125 3055 l
-2925 3055 l
-2924 3055 m
-3127 3055 l
-3127 3056 l
-2924 3056 l
-2924 3056 m
-3128 3056 l
-3128 3057 l
-2924 3057 l
-2923 3057 m
-3130 3057 l
-3130 3058 l
-2923 3058 l
-2923 3058 m
-3132 3058 l
-3132 3059 l
-2923 3059 l
-2922 3059 m
-3134 3059 l
-3134 3060 l
-2922 3060 l
-2921 3060 m
-3136 3060 l
-3136 3061 l
-2921 3061 l
-2921 3061 m
-3138 3061 l
-3138 3062 l
-2921 3062 l
-2920 3062 m
-3139 3062 l
-3139 3063 l
-2920 3063 l
-2920 3063 m
-3141 3063 l
-3141 3064 l
-2920 3064 l
-2919 3064 m
-3143 3064 l
-3143 3065 l
-2919 3065 l
-2919 3065 m
-3145 3065 l
-3145 3066 l
-2919 3066 l
-2918 3066 m
-3147 3066 l
-3147 3067 l
-2918 3067 l
-2918 3067 m
-3148 3067 l
-3148 3068 l
-2918 3068 l
-2917 3068 m
-3150 3068 l
-3150 3069 l
-2917 3069 l
-2916 3069 m
-3152 3069 l
-3152 3070 l
-2916 3070 l
-2916 3070 m
-3154 3070 l
-3154 3071 l
-2916 3071 l
-2915 3071 m
-3156 3071 l
-3156 3072 l
-2915 3072 l
-2915 3072 m
-3157 3072 l
-3157 3073 l
-2915 3073 l
-2914 3073 m
-3159 3073 l
-3159 3074 l
-2914 3074 l
-2914 3074 m
-3161 3074 l
-3161 3075 l
-2914 3075 l
-2913 3075 m
-3163 3075 l
-3163 3076 l
-2913 3076 l
-2913 3076 m
-3165 3076 l
-3165 3077 l
-2913 3077 l
-2913 3077 m
-3167 3077 l
-3167 3078 l
-2913 3078 l
-2914 3078 m
-3168 3078 l
-3168 3079 l
-2914 3079 l
-2916 3079 m
-3170 3079 l
-3170 3080 l
-2916 3080 l
-2918 3080 m
-3172 3080 l
-3172 3081 l
-2918 3081 l
-2920 3081 m
-3174 3081 l
-3174 3082 l
-2920 3082 l
-2922 3082 m
-3176 3082 l
-3176 3083 l
-2922 3083 l
-2923 3083 m
-3177 3083 l
-3177 3084 l
-2923 3084 l
-2925 3084 m
-3179 3084 l
-3179 3085 l
-2925 3085 l
-2927 3085 m
-3181 3085 l
-3181 3086 l
-2927 3086 l
-2929 3086 m
-3183 3086 l
-3183 3087 l
-2929 3087 l
-2931 3087 m
-3185 3087 l
-3185 3088 l
-2931 3088 l
-2933 3088 m
-3186 3088 l
-3186 3089 l
-2933 3089 l
-2934 3089 m
-3188 3089 l
-3188 3090 l
-2934 3090 l
-2936 3090 m
-3190 3090 l
-3190 3091 l
-2936 3091 l
-2938 3091 m
-3192 3091 l
-3192 3092 l
-2938 3092 l
-2940 3092 m
-3194 3092 l
-3194 3093 l
-2940 3093 l
-2942 3093 m
-3196 3093 l
-3196 3094 l
-2942 3094 l
-2943 3094 m
-3197 3094 l
-3197 3095 l
-2943 3095 l
-2945 3095 m
-3199 3095 l
-3199 3096 l
-2945 3096 l
-2947 3096 m
-3201 3096 l
-3201 3097 l
-2947 3097 l
-2949 3097 m
-3203 3097 l
-3203 3098 l
-2949 3098 l
-2951 3098 m
-3205 3098 l
-3205 3099 l
-2951 3099 l
-2953 3099 m
-3206 3099 l
-3206 3100 l
-2953 3100 l
-2954 3100 m
-3208 3100 l
-3208 3101 l
-2954 3101 l
-2956 3101 m
-3210 3101 l
-3210 3102 l
-2956 3102 l
-2958 3102 m
-3212 3102 l
-3212 3103 l
-2958 3103 l
-2960 3103 m
-3214 3103 l
-3214 3104 l
-2960 3104 l
-2962 3104 m
-3215 3104 l
-3215 3105 l
-2962 3105 l
-2963 3105 m
-3217 3105 l
-3217 3106 l
-2963 3106 l
-2965 3106 m
-3219 3106 l
-3219 3107 l
-2965 3107 l
-2967 3107 m
-3221 3107 l
-3221 3108 l
-2967 3108 l
-2969 3108 m
-3223 3108 l
-3223 3109 l
-2969 3109 l
-2971 3109 m
-3224 3109 l
-3224 3110 l
-2971 3110 l
-2973 3110 m
-3224 3110 l
-3224 3111 l
-2973 3111 l
-2974 3111 m
-3224 3111 l
-3224 3112 l
-2974 3112 l
-2976 3112 m
-3223 3112 l
-3223 3113 l
-2976 3113 l
-2978 3113 m
-3223 3113 l
-3223 3114 l
-2978 3114 l
-2980 3114 m
-3222 3114 l
-3222 3115 l
-2980 3115 l
-2982 3115 m
-3222 3115 l
-3222 3116 l
-2982 3116 l
-2983 3116 m
-3221 3116 l
-3221 3117 l
-2983 3117 l
-2985 3117 m
-3221 3117 l
-3221 3118 l
-2985 3118 l
-2987 3118 m
-3220 3118 l
-3220 3119 l
-2987 3119 l
-2989 3119 m
-3220 3119 l
-3220 3120 l
-2989 3120 l
-2991 3120 m
-3219 3120 l
-3219 3121 l
-2991 3121 l
-2993 3121 m
-3218 3121 l
-3218 3122 l
-2993 3122 l
-2994 3122 m
-3218 3122 l
-3218 3123 l
-2994 3123 l
-2996 3123 m
-3217 3123 l
-3217 3124 l
-2996 3124 l
-2998 3124 m
-3217 3124 l
-3217 3125 l
-2998 3125 l
-3000 3125 m
-3216 3125 l
-3216 3126 l
-3000 3126 l
-3002 3126 m
-3216 3126 l
-3216 3127 l
-3002 3127 l
-3004 3127 m
-3215 3127 l
-3215 3128 l
-3004 3128 l
-3005 3128 m
-3215 3128 l
-3215 3129 l
-3005 3129 l
-3007 3129 m
-3214 3129 l
-3214 3130 l
-3007 3130 l
-3009 3130 m
-3214 3130 l
-3214 3131 l
-3009 3131 l
-3011 3131 m
-3213 3131 l
-3213 3132 l
-3011 3132 l
-3013 3132 m
-3212 3132 l
-3212 3133 l
-3013 3133 l
-3014 3133 m
-3212 3133 l
-3212 3134 l
-3014 3134 l
-3016 3134 m
-3211 3134 l
-3211 3135 l
-3016 3135 l
-3018 3135 m
-3211 3135 l
-3211 3136 l
-3018 3136 l
-3020 3136 m
-3210 3136 l
-3210 3137 l
-3020 3137 l
-3022 3137 m
-3210 3137 l
-3210 3138 l
-3022 3138 l
-3024 3138 m
-3209 3138 l
-3209 3139 l
-3024 3139 l
-3025 3139 m
-3209 3139 l
-3209 3140 l
-3025 3140 l
-3027 3140 m
-3208 3140 l
-3208 3141 l
-3027 3141 l
-3029 3141 m
-3208 3141 l
-3208 3142 l
-3029 3142 l
-3031 3142 m
-3207 3142 l
-3207 3143 l
-3031 3143 l
-3033 3143 m
-3206 3143 l
-3206 3144 l
-3033 3144 l
-3034 3144 m
-3206 3144 l
-3206 3145 l
-3034 3145 l
-3036 3145 m
-3205 3145 l
-3205 3146 l
-3036 3146 l
-3038 3146 m
-3205 3146 l
-3205 3147 l
-3038 3147 l
-3040 3147 m
-3204 3147 l
-3204 3148 l
-3040 3148 l
-3042 3148 m
-3204 3148 l
-3204 3149 l
-3042 3149 l
-3044 3149 m
-3203 3149 l
-3203 3150 l
-3044 3150 l
-3045 3150 m
-3203 3150 l
-3203 3151 l
-3045 3151 l
-3047 3151 m
-3202 3151 l
-3202 3152 l
-3047 3152 l
-3049 3152 m
-3202 3152 l
-3202 3153 l
-3049 3153 l
-3051 3153 m
-3201 3153 l
-3201 3154 l
-3051 3154 l
-3053 3154 m
-3200 3154 l
-3200 3155 l
-3053 3155 l
-3054 3155 m
-3200 3155 l
-3200 3156 l
-3054 3156 l
-3056 3156 m
-3199 3156 l
-3199 3157 l
-3056 3157 l
-3058 3157 m
-3199 3157 l
-3199 3158 l
-3058 3158 l
-3060 3158 m
-3198 3158 l
-3198 3159 l
-3060 3159 l
-3062 3159 m
-3198 3159 l
-3198 3160 l
-3062 3160 l
-3064 3160 m
-3197 3160 l
-3197 3161 l
-3064 3161 l
-3065 3161 m
-3197 3161 l
-3197 3162 l
-3065 3162 l
-3067 3162 m
-3196 3162 l
-3196 3163 l
-3067 3163 l
-3069 3163 m
-3195 3163 l
-3195 3164 l
-3069 3164 l
-3071 3164 m
-3195 3164 l
-3195 3165 l
-3071 3165 l
-3073 3165 m
-3194 3165 l
-3194 3166 l
-3073 3166 l
-3074 3166 m
-3194 3166 l
-3194 3167 l
-3074 3167 l
-3076 3167 m
-3193 3167 l
-3193 3168 l
-3076 3168 l
-3078 3168 m
-3193 3168 l
-3193 3169 l
-3078 3169 l
-3080 3169 m
-3192 3169 l
-3192 3170 l
-3080 3170 l
-3082 3170 m
-3192 3170 l
-3192 3171 l
-3082 3171 l
-3084 3171 m
-3191 3171 l
-3191 3172 l
-3084 3172 l
-3085 3172 m
-3191 3172 l
-3191 3173 l
-3085 3173 l
-3087 3173 m
-3190 3173 l
-3190 3174 l
-3087 3174 l
-3089 3174 m
-3189 3174 l
-3189 3175 l
-3089 3175 l
-3091 3175 m
-3189 3175 l
-3189 3176 l
-3091 3176 l
-3093 3176 m
-3188 3176 l
-3188 3177 l
-3093 3177 l
-3095 3177 m
-3188 3177 l
-3188 3178 l
-3095 3178 l
-3096 3178 m
-3187 3178 l
-3187 3179 l
-3096 3179 l
-3098 3179 m
-3187 3179 l
-3187 3180 l
-3098 3180 l
-3100 3180 m
-3186 3180 l
-3186 3181 l
-3100 3181 l
-3102 3181 m
-3186 3181 l
-3186 3182 l
-3102 3182 l
-3104 3182 m
-3185 3182 l
-3185 3183 l
-3104 3183 l
-3105 3183 m
-3185 3183 l
-3185 3184 l
-3105 3184 l
-3107 3184 m
-3184 3184 l
-3184 3185 l
-3107 3185 l
-3109 3185 m
-3183 3185 l
-3183 3186 l
-3109 3186 l
-3111 3186 m
-3183 3186 l
-3183 3187 l
-3111 3187 l
-3113 3187 m
-3182 3187 l
-3182 3188 l
-3113 3188 l
-3115 3188 m
-3182 3188 l
-3182 3189 l
-3115 3189 l
-3116 3189 m
-3181 3189 l
-3181 3190 l
-3116 3190 l
-3118 3190 m
-3181 3190 l
-3181 3191 l
-3118 3191 l
-3120 3191 m
-3180 3191 l
-3180 3192 l
-3120 3192 l
-3122 3192 m
-3180 3192 l
-3180 3193 l
-3122 3193 l
-3124 3193 m
-3179 3193 l
-3179 3194 l
-3124 3194 l
-3125 3194 m
-3179 3194 l
-3179 3195 l
-3125 3195 l
-3127 3195 m
-3178 3195 l
-3178 3196 l
-3127 3196 l
-3129 3196 m
-3177 3196 l
-3177 3197 l
-3129 3197 l
-3131 3197 m
-3177 3197 l
-3177 3198 l
-3131 3198 l
-3133 3198 m
-3176 3198 l
-3176 3199 l
-3133 3199 l
-3135 3199 m
-3176 3199 l
-3176 3200 l
-3135 3200 l
-3136 3200 m
-3175 3200 l
-3175 3201 l
-3136 3201 l
-3138 3201 m
-3175 3201 l
-3175 3202 l
-3138 3202 l
-3140 3202 m
-3174 3202 l
-3174 3203 l
-3140 3203 l
-3142 3203 m
-3174 3203 l
-3174 3204 l
-3142 3204 l
-3144 3204 m
-3173 3204 l
-3173 3205 l
-3144 3205 l
-3145 3205 m
-3173 3205 l
-3173 3206 l
-3145 3206 l
-3147 3206 m
-3172 3206 l
-3172 3207 l
-3147 3207 l
-3149 3207 m
-3171 3207 l
-3171 3208 l
-3149 3208 l
-3151 3208 m
-3171 3208 l
-3171 3209 l
-3151 3209 l
-3153 3209 m
-3170 3209 l
-3170 3210 l
-3153 3210 l
-3155 3210 m
-3170 3210 l
-3170 3211 l
-3155 3211 l
-3156 3211 m
-3169 3211 l
-3169 3212 l
-3156 3212 l
-3158 3212 m
-3169 3212 l
-3169 3213 l
-3158 3213 l
-3160 3213 m
-3168 3213 l
-3168 3214 l
-3160 3214 l
-3162 3214 m
-3168 3214 l
-3168 3215 l
-3162 3215 l
-3164 3215 m
-3167 3215 l
-3167 3216 l
-3164 3216 l
-Y
-2972 2970.9 m
-2913 3077 l
-3166 3216 l
-3224 3110 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-2964 3028 m
-3030 3065 l
-S
-3093 3124 m
-3095 3111 l
-3092 3099 l
-3083 3090 l
-3079 3088 l
-3066 3085 l
-3055 3088 l
-3045 3097 l
-3043 3101 l
-3041 3114 l
-3044 3125 l
-3053 3135 l
-3057 3137 l
-3070 3139 l
-3081 3136 l
-3093 3124 l
-3103 3105 l
-3109 3085 l
-3108 3070 l
-3099 3060 l
-3092 3056 l
-3079 3054 l
-3071 3059 l
-S
-3126 3175 m
-3117 3166 l
-3116 3151 l
-3122 3130 l
-3128 3119 l
-3142 3103 l
-3156 3096 l
-3169 3099 l
-3176 3103 l
-3185 3112 l
-3186 3127 l
-3180 3148 l
-3174 3159 l
-3160 3175 l
-3146 3182 l
-3133 3179 l
-3126 3175 l
-S
-1 g
-3473 3317 m
-3476 3317 l
-3476 3318 l
-3473 3318 l
-3472 3318 m
-3476 3318 l
-3476 3319 l
-3472 3319 l
-3471 3319 m
-3477 3319 l
-3477 3320 l
-3471 3320 l
-3470 3320 m
-3478 3320 l
-3478 3321 l
-3470 3321 l
-3469 3321 m
-3479 3321 l
-3479 3322 l
-3469 3322 l
-3467 3322 m
-3480 3322 l
-3480 3323 l
-3467 3323 l
-3466 3323 m
-3480 3323 l
-3480 3324 l
-3466 3324 l
-3465 3324 m
-3481 3324 l
-3481 3325 l
-3465 3325 l
-3464 3325 m
-3482 3325 l
-3482 3326 l
-3464 3326 l
-3463 3326 m
-3483 3326 l
-3483 3327 l
-3463 3327 l
-3461 3327 m
-3484 3327 l
-3484 3328 l
-3461 3328 l
-3460 3328 m
-3485 3328 l
-3485 3329 l
-3460 3329 l
-3459 3329 m
-3485 3329 l
-3485 3330 l
-3459 3330 l
-3458 3330 m
-3486 3330 l
-3486 3331 l
-3458 3331 l
-3457 3331 m
-3487 3331 l
-3487 3332 l
-3457 3332 l
-3455 3332 m
-3488 3332 l
-3488 3333 l
-3455 3333 l
-3454 3333 m
-3489 3333 l
-3489 3334 l
-3454 3334 l
-3453 3334 m
-3490 3334 l
-3490 3335 l
-3453 3335 l
-3452 3335 m
-3490 3335 l
-3490 3336 l
-3452 3336 l
-3451 3336 m
-3491 3336 l
-3491 3337 l
-3451 3337 l
-3449 3337 m
-3492 3337 l
-3492 3338 l
-3449 3338 l
-3448 3338 m
-3493 3338 l
-3493 3339 l
-3448 3339 l
-3447 3339 m
-3494 3339 l
-3494 3340 l
-3447 3340 l
-3446 3340 m
-3494 3340 l
-3494 3341 l
-3446 3341 l
-3445 3341 m
-3495 3341 l
-3495 3342 l
-3445 3342 l
-3443 3342 m
-3496 3342 l
-3496 3343 l
-3443 3343 l
-3442 3343 m
-3497 3343 l
-3497 3344 l
-3442 3344 l
-3441 3344 m
-3498 3344 l
-3498 3345 l
-3441 3345 l
-3440 3345 m
-3499 3345 l
-3499 3346 l
-3440 3346 l
-3438 3346 m
-3499 3346 l
-3499 3347 l
-3438 3347 l
-3437 3347 m
-3500 3347 l
-3500 3348 l
-3437 3348 l
-3436 3348 m
-3501 3348 l
-3501 3349 l
-3436 3349 l
-3435 3349 m
-3502 3349 l
-3502 3350 l
-3435 3350 l
-3434 3350 m
-3503 3350 l
-3503 3351 l
-3434 3351 l
-3432 3351 m
-3504 3351 l
-3504 3352 l
-3432 3352 l
-3431 3352 m
-3504 3352 l
-3504 3353 l
-3431 3353 l
-3430 3353 m
-3505 3353 l
-3505 3354 l
-3430 3354 l
-3429 3354 m
-3506 3354 l
-3506 3355 l
-3429 3355 l
-3428 3355 m
-3507 3355 l
-3507 3356 l
-3428 3356 l
-3426 3356 m
-3508 3356 l
-3508 3357 l
-3426 3357 l
-3425 3357 m
-3508 3357 l
-3508 3358 l
-3425 3358 l
-3424 3358 m
-3509 3358 l
-3509 3359 l
-3424 3359 l
-3423 3359 m
-3510 3359 l
-3510 3360 l
-3423 3360 l
-3422 3360 m
-3511 3360 l
-3511 3361 l
-3422 3361 l
-3420 3361 m
-3512 3361 l
-3512 3362 l
-3420 3362 l
-3419 3362 m
-3513 3362 l
-3513 3363 l
-3419 3363 l
-3418 3363 m
-3513 3363 l
-3513 3364 l
-3418 3364 l
-3417 3364 m
-3514 3364 l
-3514 3365 l
-3417 3365 l
-3416 3365 m
-3515 3365 l
-3515 3366 l
-3416 3366 l
-3414 3366 m
-3516 3366 l
-3516 3367 l
-3414 3367 l
-3413 3367 m
-3517 3367 l
-3517 3368 l
-3413 3368 l
-3412 3368 m
-3518 3368 l
-3518 3369 l
-3412 3369 l
-3411 3369 m
-3518 3369 l
-3518 3370 l
-3411 3370 l
-3409 3370 m
-3519 3370 l
-3519 3371 l
-3409 3371 l
-3408 3371 m
-3520 3371 l
-3520 3372 l
-3408 3372 l
-3407 3372 m
-3521 3372 l
-3521 3373 l
-3407 3373 l
-3406 3373 m
-3522 3373 l
-3522 3374 l
-3406 3374 l
-3405 3374 m
-3522 3374 l
-3522 3375 l
-3405 3375 l
-3403 3375 m
-3523 3375 l
-3523 3376 l
-3403 3376 l
-3402 3376 m
-3524 3376 l
-3524 3377 l
-3402 3377 l
-3401 3377 m
-3525 3377 l
-3525 3378 l
-3401 3378 l
-3400 3378 m
-3526 3378 l
-3526 3379 l
-3400 3379 l
-3399 3379 m
-3527 3379 l
-3527 3380 l
-3399 3380 l
-3397 3380 m
-3527 3380 l
-3527 3381 l
-3397 3381 l
-3396 3381 m
-3528 3381 l
-3528 3382 l
-3396 3382 l
-3395 3382 m
-3529 3382 l
-3529 3383 l
-3395 3383 l
-3394 3383 m
-3530 3383 l
-3530 3384 l
-3394 3384 l
-3393 3384 m
-3531 3384 l
-3531 3385 l
-3393 3385 l
-3391 3385 m
-3532 3385 l
-3532 3386 l
-3391 3386 l
-3390 3386 m
-3532 3386 l
-3532 3387 l
-3390 3387 l
-3389 3387 m
-3533 3387 l
-3533 3388 l
-3389 3388 l
-3388 3388 m
-3534 3388 l
-3534 3389 l
-3388 3389 l
-3387 3389 m
-3535 3389 l
-3535 3390 l
-3387 3390 l
-3385 3390 m
-3536 3390 l
-3536 3391 l
-3385 3391 l
-3384 3391 m
-3537 3391 l
-3537 3392 l
-3384 3392 l
-3383 3392 m
-3537 3392 l
-3537 3393 l
-3383 3393 l
-3382 3393 m
-3538 3393 l
-3538 3394 l
-3382 3394 l
-3381 3394 m
-3539 3394 l
-3539 3395 l
-3381 3395 l
-3381 3395 m
-3540 3395 l
-3540 3396 l
-3381 3396 l
-3381 3396 m
-3541 3396 l
-3541 3397 l
-3381 3397 l
-3382 3397 m
-3541 3397 l
-3541 3398 l
-3382 3398 l
-3383 3398 m
-3542 3398 l
-3542 3399 l
-3383 3399 l
-3384 3399 m
-3543 3399 l
-3543 3400 l
-3384 3400 l
-3385 3400 m
-3544 3400 l
-3544 3401 l
-3385 3401 l
-3385 3401 m
-3545 3401 l
-3545 3402 l
-3385 3402 l
-3386 3402 m
-3546 3402 l
-3546 3403 l
-3386 3403 l
-3387 3403 m
-3546 3403 l
-3546 3404 l
-3387 3404 l
-3388 3404 m
-3547 3404 l
-3547 3405 l
-3388 3405 l
-3389 3405 m
-3548 3405 l
-3548 3406 l
-3389 3406 l
-3390 3406 m
-3549 3406 l
-3549 3407 l
-3390 3407 l
-3390 3407 m
-3550 3407 l
-3550 3408 l
-3390 3408 l
-3391 3408 m
-3551 3408 l
-3551 3409 l
-3391 3409 l
-3392 3409 m
-3551 3409 l
-3551 3410 l
-3392 3410 l
-3393 3410 m
-3552 3410 l
-3552 3411 l
-3393 3411 l
-3394 3411 m
-3553 3411 l
-3553 3412 l
-3394 3412 l
-3395 3412 m
-3554 3412 l
-3554 3413 l
-3395 3413 l
-3395 3413 m
-3555 3413 l
-3555 3414 l
-3395 3414 l
-3396 3414 m
-3555 3414 l
-3555 3415 l
-3396 3415 l
-3397 3415 m
-3556 3415 l
-3556 3416 l
-3397 3416 l
-3398 3416 m
-3557 3416 l
-3557 3417 l
-3398 3417 l
-3399 3417 m
-3558 3417 l
-3558 3418 l
-3399 3418 l
-3400 3418 m
-3559 3418 l
-3559 3419 l
-3400 3419 l
-3400 3419 m
-3560 3419 l
-3560 3420 l
-3400 3420 l
-3401 3420 m
-3560 3420 l
-3560 3421 l
-3401 3421 l
-3402 3421 m
-3561 3421 l
-3561 3422 l
-3402 3422 l
-3403 3422 m
-3562 3422 l
-3562 3423 l
-3403 3423 l
-3404 3423 m
-3563 3423 l
-3563 3424 l
-3404 3424 l
-3405 3424 m
-3564 3424 l
-3564 3425 l
-3405 3425 l
-3405 3425 m
-3565 3425 l
-3565 3426 l
-3405 3426 l
-3406 3426 m
-3565 3426 l
-3565 3427 l
-3406 3427 l
-3407 3427 m
-3566 3427 l
-3566 3428 l
-3407 3428 l
-3408 3428 m
-3567 3428 l
-3567 3429 l
-3408 3429 l
-3409 3429 m
-3568 3429 l
-3568 3430 l
-3409 3430 l
-3410 3430 m
-3569 3430 l
-3569 3432 l
-3410 3432 l
-3411 3432 m
-3570 3432 l
-3570 3433 l
-3411 3433 l
-3412 3433 m
-3571 3433 l
-3571 3434 l
-3412 3434 l
-3413 3434 m
-3572 3434 l
-3572 3435 l
-3413 3435 l
-3414 3435 m
-3573 3435 l
-3573 3436 l
-3414 3436 l
-3414 3436 m
-3574 3436 l
-3574 3437 l
-3414 3437 l
-3415 3437 m
-3574 3437 l
-3574 3438 l
-3415 3438 l
-3416 3438 m
-3575 3438 l
-3575 3439 l
-3416 3439 l
-3417 3439 m
-3576 3439 l
-3576 3440 l
-3417 3440 l
-3418 3440 m
-3577 3440 l
-3577 3441 l
-3418 3441 l
-3419 3441 m
-3578 3441 l
-3578 3442 l
-3419 3442 l
-3419 3442 m
-3579 3442 l
-3579 3443 l
-3419 3443 l
-3420 3443 m
-3579 3443 l
-3579 3444 l
-3420 3444 l
-3421 3444 m
-3580 3444 l
-3580 3445 l
-3421 3445 l
-3422 3445 m
-3581 3445 l
-3581 3446 l
-3422 3446 l
-3423 3446 m
-3582 3446 l
-3582 3447 l
-3423 3447 l
-3424 3447 m
-3583 3447 l
-3583 3449 l
-3424 3449 l
-3425 3449 m
-3584 3449 l
-3584 3450 l
-3425 3450 l
-3426 3450 m
-3585 3450 l
-3585 3451 l
-3426 3451 l
-3427 3451 m
-3586 3451 l
-3586 3452 l
-3427 3452 l
-3428 3452 m
-3587 3452 l
-3587 3453 l
-3428 3453 l
-3429 3453 m
-3588 3453 l
-3588 3455 l
-3429 3455 l
-3430 3455 m
-3589 3455 l
-3589 3456 l
-3430 3456 l
-3431 3456 m
-3590 3456 l
-3590 3457 l
-3431 3457 l
-3432 3457 m
-3591 3457 l
-3591 3458 l
-3432 3458 l
-3433 3458 m
-3592 3458 l
-3592 3459 l
-3433 3459 l
-3434 3459 m
-3593 3459 l
-3593 3461 l
-3434 3461 l
-3435 3461 m
-3594 3461 l
-3594 3462 l
-3435 3462 l
-3436 3462 m
-3595 3462 l
-3595 3463 l
-3436 3463 l
-3437 3463 m
-3596 3463 l
-3596 3464 l
-3437 3464 l
-3438 3464 m
-3597 3464 l
-3597 3465 l
-3438 3465 l
-3439 3465 m
-3598 3465 l
-3598 3467 l
-3439 3467 l
-3440 3467 m
-3599 3467 l
-3599 3468 l
-3440 3468 l
-3441 3468 m
-3600 3468 l
-3600 3469 l
-3441 3469 l
-3442 3469 m
-3601 3469 l
-3601 3470 l
-3442 3470 l
-3443 3470 m
-3602 3470 l
-3602 3472 l
-3443 3472 l
-3444 3472 m
-3603 3472 l
-3603 3473 l
-3444 3473 l
-3445 3473 m
-3604 3473 l
-3604 3474 l
-3445 3474 l
-3446 3474 m
-3605 3474 l
-3605 3475 l
-3446 3475 l
-3447 3475 m
-3606 3475 l
-3606 3476 l
-3447 3476 l
-3448 3476 m
-3607 3476 l
-3607 3478 l
-3448 3478 l
-3449 3478 m
-3608 3478 l
-3608 3479 l
-3449 3479 l
-3450 3479 m
-3609 3479 l
-3609 3480 l
-3450 3480 l
-3451 3480 m
-3610 3480 l
-3610 3481 l
-3451 3481 l
-3452 3481 m
-3611 3481 l
-3611 3482 l
-3452 3482 l
-3453 3482 m
-3612 3482 l
-3612 3484 l
-3453 3484 l
-3454 3484 m
-3613 3484 l
-3613 3485 l
-3454 3485 l
-3455 3485 m
-3614 3485 l
-3614 3486 l
-3455 3486 l
-3456 3486 m
-3615 3486 l
-3615 3487 l
-3456 3487 l
-3457 3487 m
-3616 3487 l
-3616 3488 l
-3457 3488 l
-3458 3488 m
-3616 3488 l
-3616 3489 l
-3458 3489 l
-3458 3489 m
-3617 3489 l
-3617 3490 l
-3458 3490 l
-3459 3490 m
-3618 3490 l
-3618 3491 l
-3459 3491 l
-3460 3491 m
-3619 3491 l
-3619 3492 l
-3460 3492 l
-3461 3492 m
-3620 3492 l
-3620 3493 l
-3461 3493 l
-3462 3493 m
-3621 3493 l
-3621 3494 l
-3462 3494 l
-3463 3494 m
-3621 3494 l
-3621 3495 l
-3463 3495 l
-3463 3495 m
-3622 3495 l
-3622 3496 l
-3463 3496 l
-3464 3496 m
-3623 3496 l
-3623 3497 l
-3464 3497 l
-3465 3497 m
-3624 3497 l
-3624 3498 l
-3465 3498 l
-3466 3498 m
-3625 3498 l
-3625 3499 l
-3466 3499 l
-3467 3499 m
-3626 3499 l
-3626 3500 l
-3467 3500 l
-3468 3500 m
-3626 3500 l
-3626 3501 l
-3468 3501 l
-3468 3501 m
-3627 3501 l
-3627 3502 l
-3468 3502 l
-3469 3502 m
-3628 3502 l
-3628 3503 l
-3469 3503 l
-3470 3503 m
-3629 3503 l
-3629 3504 l
-3470 3504 l
-3471 3504 m
-3630 3504 l
-3630 3505 l
-3471 3505 l
-3472 3505 m
-3630 3505 l
-3630 3506 l
-3472 3506 l
-3473 3506 m
-3631 3506 l
-3631 3507 l
-3473 3507 l
-3473 3507 m
-3632 3507 l
-3632 3508 l
-3473 3508 l
-3474 3508 m
-3633 3508 l
-3633 3509 l
-3474 3509 l
-3475 3509 m
-3634 3509 l
-3634 3510 l
-3475 3510 l
-3476 3510 m
-3635 3510 l
-3635 3511 l
-3476 3511 l
-3477 3511 m
-3635 3511 l
-3635 3512 l
-3477 3512 l
-3477 3512 m
-3636 3512 l
-3636 3513 l
-3477 3513 l
-3478 3513 m
-3637 3513 l
-3637 3514 l
-3478 3514 l
-3479 3514 m
-3638 3514 l
-3638 3515 l
-3479 3515 l
-3480 3515 m
-3639 3515 l
-3639 3516 l
-3480 3516 l
-3481 3516 m
-3640 3516 l
-3640 3517 l
-3481 3517 l
-3482 3517 m
-3640 3517 l
-3640 3518 l
-3482 3518 l
-3482 3518 m
-3641 3518 l
-3641 3519 l
-3482 3519 l
-3483 3519 m
-3642 3519 l
-3642 3520 l
-3483 3520 l
-3484 3520 m
-3643 3520 l
-3643 3521 l
-3484 3521 l
-3485 3521 m
-3644 3521 l
-3644 3522 l
-3485 3522 l
-3486 3522 m
-3644 3522 l
-3644 3523 l
-3486 3523 l
-3487 3523 m
-3645 3523 l
-3645 3524 l
-3487 3524 l
-3487 3524 m
-3646 3524 l
-3646 3525 l
-3487 3525 l
-3488 3525 m
-3647 3525 l
-3647 3526 l
-3488 3526 l
-3489 3526 m
-3648 3526 l
-3648 3527 l
-3489 3527 l
-3490 3527 m
-3649 3527 l
-3649 3528 l
-3490 3528 l
-3491 3528 m
-3649 3528 l
-3649 3529 l
-3491 3529 l
-3492 3529 m
-3650 3529 l
-3650 3530 l
-3492 3530 l
-3492 3530 m
-3651 3530 l
-3651 3531 l
-3492 3531 l
-3493 3531 m
-3652 3531 l
-3652 3532 l
-3493 3532 l
-3494 3532 m
-3653 3532 l
-3653 3533 l
-3494 3533 l
-3495 3533 m
-3654 3533 l
-3654 3534 l
-3495 3534 l
-3496 3534 m
-3654 3534 l
-3654 3535 l
-3496 3535 l
-3497 3535 m
-3655 3535 l
-3655 3536 l
-3497 3536 l
-3497 3536 m
-3656 3536 l
-3656 3537 l
-3497 3537 l
-3498 3537 m
-3657 3537 l
-3657 3538 l
-3498 3538 l
-3499 3538 m
-3658 3538 l
-3658 3539 l
-3499 3539 l
-3500 3539 m
-3658 3539 l
-3658 3540 l
-3500 3540 l
-3501 3540 m
-3659 3540 l
-3659 3541 l
-3501 3541 l
-3502 3541 m
-3657 3541 l
-3657 3542 l
-3502 3542 l
-3502 3542 m
-3656 3542 l
-3656 3543 l
-3502 3543 l
-3503 3543 m
-3655 3543 l
-3655 3544 l
-3503 3544 l
-3504 3544 m
-3654 3544 l
-3654 3545 l
-3504 3545 l
-3505 3545 m
-3652 3545 l
-3652 3546 l
-3505 3546 l
-3506 3546 m
-3651 3546 l
-3651 3547 l
-3506 3547 l
-3506 3547 m
-3650 3547 l
-3650 3548 l
-3506 3548 l
-3507 3548 m
-3649 3548 l
-3649 3549 l
-3507 3549 l
-3508 3549 m
-3648 3549 l
-3648 3550 l
-3508 3550 l
-3509 3550 m
-3646 3550 l
-3646 3551 l
-3509 3551 l
-3510 3551 m
-3645 3551 l
-3645 3552 l
-3510 3552 l
-3511 3552 m
-3644 3552 l
-3644 3553 l
-3511 3553 l
-3511 3553 m
-3643 3553 l
-3643 3554 l
-3511 3554 l
-3512 3554 m
-3642 3554 l
-3642 3555 l
-3512 3555 l
-3513 3555 m
-3640 3555 l
-3640 3556 l
-3513 3556 l
-3514 3556 m
-3639 3556 l
-3639 3557 l
-3514 3557 l
-3515 3557 m
-3638 3557 l
-3638 3558 l
-3515 3558 l
-3516 3558 m
-3637 3558 l
-3637 3559 l
-3516 3559 l
-3516 3559 m
-3636 3559 l
-3636 3560 l
-3516 3560 l
-3517 3560 m
-3634 3560 l
-3634 3561 l
-3517 3561 l
-3518 3561 m
-3633 3561 l
-3633 3562 l
-3518 3562 l
-3519 3562 m
-3632 3562 l
-3632 3563 l
-3519 3563 l
-3520 3563 m
-3631 3563 l
-3631 3564 l
-3520 3564 l
-3521 3564 m
-3630 3564 l
-3630 3565 l
-3521 3565 l
-3521 3565 m
-3628 3565 l
-3628 3566 l
-3521 3566 l
-3522 3566 m
-3627 3566 l
-3627 3567 l
-3522 3567 l
-3523 3567 m
-3626 3567 l
-3626 3568 l
-3523 3568 l
-3524 3568 m
-3625 3568 l
-3625 3569 l
-3524 3569 l
-3525 3569 m
-3623 3569 l
-3623 3570 l
-3525 3570 l
-3526 3570 m
-3622 3570 l
-3622 3571 l
-3526 3571 l
-3526 3571 m
-3621 3571 l
-3621 3572 l
-3526 3572 l
-3527 3572 m
-3620 3572 l
-3620 3573 l
-3527 3573 l
-3528 3573 m
-3619 3573 l
-3619 3574 l
-3528 3574 l
-3529 3574 m
-3617 3574 l
-3617 3575 l
-3529 3575 l
-3530 3575 m
-3616 3575 l
-3616 3576 l
-3530 3576 l
-3531 3576 m
-3615 3576 l
-3615 3577 l
-3531 3577 l
-3531 3577 m
-3614 3577 l
-3614 3578 l
-3531 3578 l
-3532 3578 m
-3613 3578 l
-3613 3579 l
-3532 3579 l
-3533 3579 m
-3611 3579 l
-3611 3580 l
-3533 3580 l
-3534 3580 m
-3610 3580 l
-3610 3581 l
-3534 3581 l
-3535 3581 m
-3609 3581 l
-3609 3582 l
-3535 3582 l
-3535 3582 m
-3608 3582 l
-3608 3583 l
-3535 3583 l
-3536 3583 m
-3607 3583 l
-3607 3584 l
-3536 3584 l
-3537 3584 m
-3605 3584 l
-3605 3585 l
-3537 3585 l
-3538 3585 m
-3604 3585 l
-3604 3586 l
-3538 3586 l
-3539 3586 m
-3603 3586 l
-3603 3587 l
-3539 3587 l
-3540 3587 m
-3602 3587 l
-3602 3588 l
-3540 3588 l
-3540 3588 m
-3601 3588 l
-3601 3589 l
-3540 3589 l
-3541 3589 m
-3599 3589 l
-3599 3590 l
-3541 3590 l
-3542 3590 m
-3598 3590 l
-3598 3591 l
-3542 3591 l
-3543 3591 m
-3597 3591 l
-3597 3592 l
-3543 3592 l
-3544 3592 m
-3596 3592 l
-3596 3593 l
-3544 3593 l
-3545 3593 m
-3594 3593 l
-3594 3594 l
-3545 3594 l
-3545 3594 m
-3593 3594 l
-3593 3595 l
-3545 3595 l
-3546 3595 m
-3592 3595 l
-3592 3596 l
-3546 3596 l
-3547 3596 m
-3591 3596 l
-3591 3597 l
-3547 3597 l
-3548 3597 m
-3590 3597 l
-3590 3598 l
-3548 3598 l
-3549 3598 m
-3588 3598 l
-3588 3599 l
-3549 3599 l
-3550 3599 m
-3587 3599 l
-3587 3600 l
-3550 3600 l
-3550 3600 m
-3586 3600 l
-3586 3601 l
-3550 3601 l
-3551 3601 m
-3585 3601 l
-3585 3602 l
-3551 3602 l
-3552 3602 m
-3584 3602 l
-3584 3603 l
-3552 3603 l
-3553 3603 m
-3582 3603 l
-3582 3604 l
-3553 3604 l
-3554 3604 m
-3581 3604 l
-3581 3605 l
-3554 3605 l
-3555 3605 m
-3580 3605 l
-3580 3606 l
-3555 3606 l
-3555 3606 m
-3579 3606 l
-3579 3607 l
-3555 3607 l
-3556 3607 m
-3578 3607 l
-3578 3608 l
-3556 3608 l
-3557 3608 m
-3576 3608 l
-3576 3609 l
-3557 3609 l
-3558 3609 m
-3575 3609 l
-3575 3610 l
-3558 3610 l
-3559 3610 m
-3574 3610 l
-3574 3611 l
-3559 3611 l
-3560 3611 m
-3573 3611 l
-3573 3612 l
-3560 3612 l
-3560 3612 m
-3572 3612 l
-3572 3613 l
-3560 3613 l
-3561 3613 m
-3570 3613 l
-3570 3614 l
-3561 3614 l
-3562 3614 m
-3569 3614 l
-3569 3615 l
-3562 3615 l
-3563 3615 m
-3568 3615 l
-3568 3616 l
-3563 3616 l
-3564 3616 m
-3567 3616 l
-3567 3617 l
-3564 3617 l
-Y
-3474.6 3317.5 m
-3381 3395 l
-3565 3617 l
-3658 3540 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-3446 3368 m
-3494 3426 l
-S
-3518 3515 m
-3509 3517 l
-3498 3510 l
-3492 3503 l
-3488 3491 l
-3492 3476 l
-3505 3460 l
-3522 3447 l
-3537 3439 l
-3549 3440 l
-3560 3447 l
-3563 3451 l
-3567 3463 l
-3566 3475 l
-3559 3486 l
-3556 3488 l
-3544 3493 l
-3532 3492 l
-3521 3485 l
-3518 3482 l
-3513 3470 l
-3515 3458 l
-3522 3447 l
-S
-3543 3564 m
-3538 3552 l
-3542 3538 l
-3556 3521 l
-3566 3513 l
-3584 3503 l
-3599 3502 l
-3611 3509 l
-3616 3515 l
-3621 3527 l
-3616 3542 l
-3603 3558 l
-3593 3566 l
-3574 3576 l
-3559 3578 l
-3548 3571 l
-3543 3564 l
-S
-1 g
-3809 3828 m
-3815 3828 l
-3815 3829 l
-3809 3829 l
-3806 3829 m
-3816 3829 l
-3816 3830 l
-3806 3830 l
-3803 3830 m
-3816 3830 l
-3816 3831 l
-3803 3831 l
-3799 3831 m
-3816 3831 l
-3816 3832 l
-3799 3832 l
-3796 3832 m
-3816 3832 l
-3816 3833 l
-3796 3833 l
-3793 3833 m
-3817 3833 l
-3817 3834 l
-3793 3834 l
-3789 3834 m
-3817 3834 l
-3817 3835 l
-3789 3835 l
-3786 3835 m
-3817 3835 l
-3817 3836 l
-3786 3836 l
-3782 3836 m
-3818 3836 l
-3818 3837 l
-3782 3837 l
-3779 3837 m
-3818 3837 l
-3818 3838 l
-3779 3838 l
-3776 3838 m
-3818 3838 l
-3818 3839 l
-3776 3839 l
-3772 3839 m
-3819 3839 l
-3819 3840 l
-3772 3840 l
-3769 3840 m
-3819 3840 l
-3819 3841 l
-3769 3841 l
-3765 3841 m
-3819 3841 l
-3819 3842 l
-3765 3842 l
-3762 3842 m
-3819 3842 l
-3819 3843 l
-3762 3843 l
-3759 3843 m
-3820 3843 l
-3820 3844 l
-3759 3844 l
-3755 3844 m
-3820 3844 l
-3820 3845 l
-3755 3845 l
-3752 3845 m
-3820 3845 l
-3820 3846 l
-3752 3846 l
-3748 3846 m
-3821 3846 l
-3821 3847 l
-3748 3847 l
-3745 3847 m
-3821 3847 l
-3821 3848 l
-3745 3848 l
-3742 3848 m
-3821 3848 l
-3821 3849 l
-3742 3849 l
-3738 3849 m
-3822 3849 l
-3822 3850 l
-3738 3850 l
-3735 3850 m
-3822 3850 l
-3822 3851 l
-3735 3851 l
-3731 3851 m
-3822 3851 l
-3822 3852 l
-3731 3852 l
-3728 3852 m
-3822 3852 l
-3822 3853 l
-3728 3853 l
-3725 3853 m
-3823 3853 l
-3823 3854 l
-3725 3854 l
-3721 3854 m
-3823 3854 l
-3823 3855 l
-3721 3855 l
-3718 3855 m
-3823 3855 l
-3823 3856 l
-3718 3856 l
-3714 3856 m
-3824 3856 l
-3824 3857 l
-3714 3857 l
-3711 3857 m
-3824 3857 l
-3824 3858 l
-3711 3858 l
-3708 3858 m
-3824 3858 l
-3824 3859 l
-3708 3859 l
-3704 3859 m
-3825 3859 l
-3825 3860 l
-3704 3860 l
-3701 3860 m
-3825 3860 l
-3825 3861 l
-3701 3861 l
-3698 3861 m
-3825 3861 l
-3825 3862 l
-3698 3862 l
-3698 3862 m
-3825 3862 l
-3825 3863 l
-3698 3863 l
-3698 3863 m
-3826 3863 l
-3826 3866 l
-3698 3866 l
-3699 3866 m
-3827 3866 l
-3827 3869 l
-3699 3869 l
-3700 3869 m
-3828 3869 l
-3828 3873 l
-3700 3873 l
-3701 3873 m
-3829 3873 l
-3829 3876 l
-3701 3876 l
-3702 3876 m
-3830 3876 l
-3830 3879 l
-3702 3879 l
-3703 3879 m
-3831 3879 l
-3831 3883 l
-3703 3883 l
-3704 3883 m
-3832 3883 l
-3832 3886 l
-3704 3886 l
-3705 3886 m
-3833 3886 l
-3833 3889 l
-3705 3889 l
-3706 3889 m
-3834 3889 l
-3834 3893 l
-3706 3893 l
-3707 3893 m
-3835 3893 l
-3835 3896 l
-3707 3896 l
-3708 3896 m
-3836 3896 l
-3836 3899 l
-3708 3899 l
-3709 3899 m
-3837 3899 l
-3837 3903 l
-3709 3903 l
-3710 3903 m
-3838 3903 l
-3838 3906 l
-3710 3906 l
-3711 3906 m
-3839 3906 l
-3839 3909 l
-3711 3909 l
-3712 3909 m
-3840 3909 l
-3840 3913 l
-3712 3913 l
-3713 3913 m
-3841 3913 l
-3841 3916 l
-3713 3916 l
-3714 3916 m
-3842 3916 l
-3842 3919 l
-3714 3919 l
-3715 3919 m
-3842 3919 l
-3842 3920 l
-3715 3920 l
-3715 3920 m
-3843 3920 l
-3843 3923 l
-3715 3923 l
-3716 3923 m
-3844 3923 l
-3844 3926 l
-3716 3926 l
-3717 3926 m
-3845 3926 l
-3845 3929 l
-3717 3929 l
-3718 3929 m
-3845 3929 l
-3845 3930 l
-3718 3930 l
-3718 3930 m
-3846 3930 l
-3846 3933 l
-3718 3933 l
-3719 3933 m
-3847 3933 l
-3847 3936 l
-3719 3936 l
-3720 3936 m
-3848 3936 l
-3848 3939 l
-3720 3939 l
-3721 3939 m
-3848 3939 l
-3848 3940 l
-3721 3940 l
-3721 3940 m
-3849 3940 l
-3849 3943 l
-3721 3943 l
-3722 3943 m
-3850 3943 l
-3850 3946 l
-3722 3946 l
-3723 3946 m
-3851 3946 l
-3851 3949 l
-3723 3949 l
-3724 3949 m
-3851 3949 l
-3851 3950 l
-3724 3950 l
-3724 3950 m
-3852 3950 l
-3852 3953 l
-3724 3953 l
-3725 3953 m
-3853 3953 l
-3853 3956 l
-3725 3956 l
-3726 3956 m
-3854 3956 l
-3854 3959 l
-3726 3959 l
-3727 3959 m
-3854 3959 l
-3854 3960 l
-3727 3960 l
-3727 3960 m
-3855 3960 l
-3855 3963 l
-3727 3963 l
-3728 3963 m
-3856 3963 l
-3856 3966 l
-3728 3966 l
-3729 3966 m
-3857 3966 l
-3857 3969 l
-3729 3969 l
-3730 3969 m
-3857 3969 l
-3857 3970 l
-3730 3970 l
-3730 3970 m
-3858 3970 l
-3858 3973 l
-3730 3973 l
-3731 3973 m
-3859 3973 l
-3859 3976 l
-3731 3976 l
-3732 3976 m
-3860 3976 l
-3860 3979 l
-3732 3979 l
-3733 3979 m
-3860 3979 l
-3860 3980 l
-3733 3980 l
-3733 3980 m
-3861 3980 l
-3861 3983 l
-3733 3983 l
-3734 3983 m
-3862 3983 l
-3862 3986 l
-3734 3986 l
-3735 3986 m
-3863 3986 l
-3863 3989 l
-3735 3989 l
-3736 3989 m
-3863 3989 l
-3863 3990 l
-3736 3990 l
-3736 3990 m
-3864 3990 l
-3864 3993 l
-3736 3993 l
-3737 3993 m
-3865 3993 l
-3865 3996 l
-3737 3996 l
-3738 3996 m
-3866 3996 l
-3866 3999 l
-3738 3999 l
-3739 3999 m
-3866 3999 l
-3866 4000 l
-3739 4000 l
-3739 4000 m
-3867 4000 l
-3867 4003 l
-3739 4003 l
-3740 4003 m
-3868 4003 l
-3868 4006 l
-3740 4006 l
-3741 4006 m
-3869 4006 l
-3869 4009 l
-3741 4009 l
-3742 4009 m
-3869 4009 l
-3869 4010 l
-3742 4010 l
-3742 4010 m
-3870 4010 l
-3870 4013 l
-3742 4013 l
-3743 4013 m
-3871 4013 l
-3871 4016 l
-3743 4016 l
-3744 4016 m
-3871 4016 l
-3871 4017 l
-3744 4017 l
-3744 4017 m
-3872 4017 l
-3872 4019 l
-3744 4019 l
-3745 4019 m
-3872 4019 l
-3872 4020 l
-3745 4020 l
-3745 4020 m
-3873 4020 l
-3873 4023 l
-3745 4023 l
-3746 4023 m
-3874 4023 l
-3874 4026 l
-3746 4026 l
-3747 4026 m
-3874 4026 l
-3874 4027 l
-3747 4027 l
-3747 4027 m
-3875 4027 l
-3875 4029 l
-3747 4029 l
-3748 4029 m
-3875 4029 l
-3875 4030 l
-3748 4030 l
-3748 4030 m
-3876 4030 l
-3876 4033 l
-3748 4033 l
-3749 4033 m
-3877 4033 l
-3877 4036 l
-3749 4036 l
-3750 4036 m
-3877 4036 l
-3877 4037 l
-3750 4037 l
-3750 4037 m
-3878 4037 l
-3878 4039 l
-3750 4039 l
-3751 4039 m
-3878 4039 l
-3878 4040 l
-3751 4040 l
-3751 4040 m
-3879 4040 l
-3879 4043 l
-3751 4043 l
-3752 4043 m
-3880 4043 l
-3880 4046 l
-3752 4046 l
-3753 4046 m
-3880 4046 l
-3880 4047 l
-3753 4047 l
-3753 4047 m
-3881 4047 l
-3881 4049 l
-3753 4049 l
-3754 4049 m
-3881 4049 l
-3881 4050 l
-3754 4050 l
-3754 4050 m
-3882 4050 l
-3882 4053 l
-3754 4053 l
-3755 4053 m
-3883 4053 l
-3883 4056 l
-3755 4056 l
-3756 4056 m
-3883 4056 l
-3883 4057 l
-3756 4057 l
-3756 4057 m
-3884 4057 l
-3884 4059 l
-3756 4059 l
-3757 4059 m
-3884 4059 l
-3884 4060 l
-3757 4060 l
-3757 4060 m
-3885 4060 l
-3885 4063 l
-3757 4063 l
-3758 4063 m
-3886 4063 l
-3886 4066 l
-3758 4066 l
-3759 4066 m
-3886 4066 l
-3886 4067 l
-3759 4067 l
-3759 4067 m
-3887 4067 l
-3887 4069 l
-3759 4069 l
-3760 4069 m
-3887 4069 l
-3887 4070 l
-3760 4070 l
-3760 4070 m
-3888 4070 l
-3888 4073 l
-3760 4073 l
-3761 4073 m
-3889 4073 l
-3889 4076 l
-3761 4076 l
-3762 4076 m
-3889 4076 l
-3889 4077 l
-3762 4077 l
-3762 4077 m
-3890 4077 l
-3890 4079 l
-3762 4079 l
-3763 4079 m
-3890 4079 l
-3890 4080 l
-3763 4080 l
-3763 4080 m
-3891 4080 l
-3891 4083 l
-3763 4083 l
-3764 4083 m
-3892 4083 l
-3892 4086 l
-3764 4086 l
-3765 4086 m
-3892 4086 l
-3892 4087 l
-3765 4087 l
-3765 4087 m
-3893 4087 l
-3893 4089 l
-3765 4089 l
-3766 4089 m
-3893 4089 l
-3893 4090 l
-3766 4090 l
-3766 4090 m
-3894 4090 l
-3894 4093 l
-3766 4093 l
-3767 4093 m
-3895 4093 l
-3895 4096 l
-3767 4096 l
-3768 4096 m
-3895 4096 l
-3895 4097 l
-3768 4097 l
-3768 4097 m
-3896 4097 l
-3896 4099 l
-3768 4099 l
-3769 4099 m
-3896 4099 l
-3896 4100 l
-3769 4100 l
-3769 4100 m
-3897 4100 l
-3897 4103 l
-3769 4103 l
-3770 4103 m
-3897 4103 l
-3897 4104 l
-3770 4104 l
-3770 4104 m
-3897 4104 l
-3897 4105 l
-3770 4105 l
-3770 4105 m
-3894 4105 l
-3894 4106 l
-3770 4106 l
-3771 4106 m
-3891 4106 l
-3891 4107 l
-3771 4107 l
-3771 4107 m
-3888 4107 l
-3888 4108 l
-3771 4108 l
-3771 4108 m
-3884 4108 l
-3884 4109 l
-3771 4109 l
-3772 4109 m
-3881 4109 l
-3881 4110 l
-3772 4110 l
-3772 4110 m
-3878 4110 l
-3878 4111 l
-3772 4111 l
-3772 4111 m
-3874 4111 l
-3874 4112 l
-3772 4112 l
-3772 4112 m
-3871 4112 l
-3871 4113 l
-3772 4113 l
-3773 4113 m
-3868 4113 l
-3868 4114 l
-3773 4114 l
-3773 4114 m
-3864 4114 l
-3864 4115 l
-3773 4115 l
-3773 4115 m
-3861 4115 l
-3861 4116 l
-3773 4116 l
-3774 4116 m
-3858 4116 l
-3858 4117 l
-3774 4117 l
-3774 4117 m
-3854 4117 l
-3854 4118 l
-3774 4118 l
-3774 4118 m
-3851 4118 l
-3851 4119 l
-3774 4119 l
-3775 4119 m
-3848 4119 l
-3848 4120 l
-3775 4120 l
-3775 4120 m
-3844 4120 l
-3844 4121 l
-3775 4121 l
-3775 4121 m
-3841 4121 l
-3841 4122 l
-3775 4122 l
-3775 4122 m
-3838 4122 l
-3838 4123 l
-3775 4123 l
-3776 4123 m
-3835 4123 l
-3835 4124 l
-3776 4124 l
-3776 4124 m
-3831 4124 l
-3831 4125 l
-3776 4125 l
-3776 4125 m
-3828 4125 l
-3828 4126 l
-3776 4126 l
-3777 4126 m
-3825 4126 l
-3825 4127 l
-3777 4127 l
-3777 4127 m
-3821 4127 l
-3821 4128 l
-3777 4128 l
-3777 4128 m
-3818 4128 l
-3818 4129 l
-3777 4129 l
-3778 4129 m
-3815 4129 l
-3815 4130 l
-3778 4130 l
-3778 4130 m
-3811 4130 l
-3811 4131 l
-3778 4131 l
-3778 4131 m
-3808 4131 l
-3808 4132 l
-3778 4132 l
-3778 4132 m
-3805 4132 l
-3805 4133 l
-3778 4133 l
-3779 4133 m
-3801 4133 l
-3801 4134 l
-3779 4134 l
-3779 4134 m
-3798 4134 l
-3798 4135 l
-3779 4135 l
-3779 4135 m
-3795 4135 l
-3795 4136 l
-3779 4136 l
-3780 4136 m
-3791 4136 l
-3791 4137 l
-3780 4137 l
-3780 4137 m
-3788 4137 l
-3788 4138 l
-3780 4138 l
-3780 4138 m
-3785 4138 l
-3785 4139 l
-3780 4139 l
-Y
-3814.4 3827.7 m
-3698 3862 l
-3781 4139 l
-3897 4104 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-3768 3863 m
-3790 3935 l
-S
-3753 3986 m
-3766 4030 l
-3791 3996 l
-3794 4008 l
-3801 4015 l
-3806 4018 l
-3819 4018 l
-3827 4016 l
-3838 4008 l
-3843 3998 l
-3844 3985 l
-3840 3973 l
-3833 3962 l
-3827 3959 l
-3818 3957 l
-S
-3781 4082 m
-3782 4069 l
-3791 4057 l
-3810 4047 l
-3822 4043 l
-3843 4041 l
-3858 4046 l
-3865 4057 l
-3868 4065 l
-3867 4078 l
-3858 4089 l
-3839 4099 l
-3827 4103 l
-3806 4105 l
-3791 4101 l
-3784 4090 l
-3781 4082 l
-S
-1 g
-3582 5053 m
-3585 5053 l
-3585 5054 l
-3582 5054 l
-3581 5054 m
-3586 5054 l
-3586 5055 l
-3581 5055 l
-3580 5055 m
-3587 5055 l
-3587 5056 l
-3580 5056 l
-3579 5056 m
-3588 5056 l
-3588 5057 l
-3579 5057 l
-3578 5057 m
-3590 5057 l
-3590 5058 l
-3578 5058 l
-3578 5058 m
-3591 5058 l
-3591 5059 l
-3578 5059 l
-3577 5059 m
-3592 5059 l
-3592 5060 l
-3577 5060 l
-3576 5060 m
-3593 5060 l
-3593 5061 l
-3576 5061 l
-3575 5061 m
-3594 5061 l
-3594 5062 l
-3575 5062 l
-3574 5062 m
-3596 5062 l
-3596 5063 l
-3574 5063 l
-3573 5063 m
-3597 5063 l
-3597 5064 l
-3573 5064 l
-3573 5064 m
-3598 5064 l
-3598 5065 l
-3573 5065 l
-3572 5065 m
-3599 5065 l
-3599 5066 l
-3572 5066 l
-3571 5066 m
-3600 5066 l
-3600 5067 l
-3571 5067 l
-3570 5067 m
-3602 5067 l
-3602 5068 l
-3570 5068 l
-3569 5068 m
-3603 5068 l
-3603 5069 l
-3569 5069 l
-3568 5069 m
-3604 5069 l
-3604 5070 l
-3568 5070 l
-3568 5070 m
-3605 5070 l
-3605 5071 l
-3568 5071 l
-3567 5071 m
-3607 5071 l
-3607 5072 l
-3567 5072 l
-3566 5072 m
-3608 5072 l
-3608 5073 l
-3566 5073 l
-3565 5073 m
-3609 5073 l
-3609 5074 l
-3565 5074 l
-3564 5074 m
-3610 5074 l
-3610 5075 l
-3564 5075 l
-3563 5075 m
-3611 5075 l
-3611 5076 l
-3563 5076 l
-3563 5076 m
-3613 5076 l
-3613 5077 l
-3563 5077 l
-3562 5077 m
-3614 5077 l
-3614 5078 l
-3562 5078 l
-3561 5078 m
-3615 5078 l
-3615 5079 l
-3561 5079 l
-3560 5079 m
-3616 5079 l
-3616 5080 l
-3560 5080 l
-3559 5080 m
-3617 5080 l
-3617 5081 l
-3559 5081 l
-3558 5081 m
-3619 5081 l
-3619 5082 l
-3558 5082 l
-3558 5082 m
-3620 5082 l
-3620 5083 l
-3558 5083 l
-3557 5083 m
-3621 5083 l
-3621 5084 l
-3557 5084 l
-3556 5084 m
-3622 5084 l
-3622 5085 l
-3556 5085 l
-3555 5085 m
-3624 5085 l
-3624 5086 l
-3555 5086 l
-3554 5086 m
-3625 5086 l
-3625 5087 l
-3554 5087 l
-3553 5087 m
-3626 5087 l
-3626 5088 l
-3553 5088 l
-3553 5088 m
-3627 5088 l
-3627 5089 l
-3553 5089 l
-3552 5089 m
-3628 5089 l
-3628 5090 l
-3552 5090 l
-3551 5090 m
-3630 5090 l
-3630 5091 l
-3551 5091 l
-3550 5091 m
-3631 5091 l
-3631 5092 l
-3550 5092 l
-3549 5092 m
-3632 5092 l
-3632 5093 l
-3549 5093 l
-3548 5093 m
-3633 5093 l
-3633 5094 l
-3548 5094 l
-3548 5094 m
-3634 5094 l
-3634 5095 l
-3548 5095 l
-3547 5095 m
-3636 5095 l
-3636 5096 l
-3547 5096 l
-3546 5096 m
-3637 5096 l
-3637 5097 l
-3546 5097 l
-3545 5097 m
-3638 5097 l
-3638 5098 l
-3545 5098 l
-3544 5098 m
-3639 5098 l
-3639 5099 l
-3544 5099 l
-3544 5099 m
-3641 5099 l
-3641 5100 l
-3544 5100 l
-3543 5100 m
-3642 5100 l
-3642 5101 l
-3543 5101 l
-3542 5101 m
-3643 5101 l
-3643 5102 l
-3542 5102 l
-3541 5102 m
-3644 5102 l
-3644 5103 l
-3541 5103 l
-3540 5103 m
-3645 5103 l
-3645 5104 l
-3540 5104 l
-3539 5104 m
-3647 5104 l
-3647 5105 l
-3539 5105 l
-3539 5105 m
-3648 5105 l
-3648 5106 l
-3539 5106 l
-3538 5106 m
-3649 5106 l
-3649 5107 l
-3538 5107 l
-3537 5107 m
-3650 5107 l
-3650 5108 l
-3537 5108 l
-3536 5108 m
-3651 5108 l
-3651 5109 l
-3536 5109 l
-3535 5109 m
-3653 5109 l
-3653 5110 l
-3535 5110 l
-3534 5110 m
-3654 5110 l
-3654 5111 l
-3534 5111 l
-3534 5111 m
-3655 5111 l
-3655 5112 l
-3534 5112 l
-3533 5112 m
-3656 5112 l
-3656 5113 l
-3533 5113 l
-3532 5113 m
-3658 5113 l
-3658 5114 l
-3532 5114 l
-3531 5114 m
-3659 5114 l
-3659 5115 l
-3531 5115 l
-3530 5115 m
-3660 5115 l
-3660 5116 l
-3530 5116 l
-3529 5116 m
-3661 5116 l
-3661 5117 l
-3529 5117 l
-3529 5117 m
-3662 5117 l
-3662 5118 l
-3529 5118 l
-3528 5118 m
-3664 5118 l
-3664 5119 l
-3528 5119 l
-3527 5119 m
-3665 5119 l
-3665 5120 l
-3527 5120 l
-3526 5120 m
-3666 5120 l
-3666 5121 l
-3526 5121 l
-3525 5121 m
-3667 5121 l
-3667 5122 l
-3525 5122 l
-3524 5122 m
-3668 5122 l
-3668 5123 l
-3524 5123 l
-3524 5123 m
-3670 5123 l
-3670 5124 l
-3524 5124 l
-3523 5124 m
-3671 5124 l
-3671 5125 l
-3523 5125 l
-3522 5125 m
-3672 5125 l
-3672 5126 l
-3522 5126 l
-3521 5126 m
-3673 5126 l
-3673 5127 l
-3521 5127 l
-3520 5127 m
-3675 5127 l
-3675 5128 l
-3520 5128 l
-3519 5128 m
-3676 5128 l
-3676 5129 l
-3519 5129 l
-3519 5129 m
-3677 5129 l
-3677 5130 l
-3519 5130 l
-3518 5130 m
-3677 5130 l
-3677 5131 l
-3518 5131 l
-3517 5131 m
-3676 5131 l
-3676 5132 l
-3517 5132 l
-3516 5132 m
-3676 5132 l
-3676 5133 l
-3516 5133 l
-3515 5133 m
-3675 5133 l
-3675 5134 l
-3515 5134 l
-3514 5134 m
-3674 5134 l
-3674 5135 l
-3514 5135 l
-3514 5135 m
-3673 5135 l
-3673 5136 l
-3514 5136 l
-3513 5136 m
-3672 5136 l
-3672 5137 l
-3513 5137 l
-3512 5137 m
-3671 5137 l
-3671 5138 l
-3512 5138 l
-3511 5138 m
-3671 5138 l
-3671 5139 l
-3511 5139 l
-3510 5139 m
-3670 5139 l
-3670 5140 l
-3510 5140 l
-3509 5140 m
-3669 5140 l
-3669 5141 l
-3509 5141 l
-3509 5141 m
-3668 5141 l
-3668 5142 l
-3509 5142 l
-3508 5142 m
-3667 5142 l
-3667 5143 l
-3508 5143 l
-3507 5143 m
-3666 5143 l
-3666 5144 l
-3507 5144 l
-3506 5144 m
-3666 5144 l
-3666 5145 l
-3506 5145 l
-3505 5145 m
-3665 5145 l
-3665 5146 l
-3505 5146 l
-3505 5146 m
-3664 5146 l
-3664 5147 l
-3505 5147 l
-3504 5147 m
-3663 5147 l
-3663 5148 l
-3504 5148 l
-3503 5148 m
-3662 5148 l
-3662 5149 l
-3503 5149 l
-3502 5149 m
-3661 5149 l
-3661 5150 l
-3502 5150 l
-3501 5150 m
-3661 5150 l
-3661 5151 l
-3501 5151 l
-3500 5151 m
-3660 5151 l
-3660 5152 l
-3500 5152 l
-3500 5152 m
-3659 5152 l
-3659 5153 l
-3500 5153 l
-3499 5153 m
-3658 5153 l
-3658 5154 l
-3499 5154 l
-3498 5154 m
-3657 5154 l
-3657 5155 l
-3498 5155 l
-3497 5155 m
-3656 5155 l
-3656 5156 l
-3497 5156 l
-3496 5156 m
-3656 5156 l
-3656 5157 l
-3496 5157 l
-3495 5157 m
-3655 5157 l
-3655 5158 l
-3495 5158 l
-3495 5158 m
-3654 5158 l
-3654 5159 l
-3495 5159 l
-3494 5159 m
-3653 5159 l
-3653 5160 l
-3494 5160 l
-3493 5160 m
-3652 5160 l
-3652 5161 l
-3493 5161 l
-3492 5161 m
-3651 5161 l
-3651 5162 l
-3492 5162 l
-3491 5162 m
-3651 5162 l
-3651 5163 l
-3491 5163 l
-3490 5163 m
-3650 5163 l
-3650 5164 l
-3490 5164 l
-3490 5164 m
-3649 5164 l
-3649 5165 l
-3490 5165 l
-3489 5165 m
-3648 5165 l
-3648 5166 l
-3489 5166 l
-3488 5166 m
-3647 5166 l
-3647 5167 l
-3488 5167 l
-3487 5167 m
-3647 5167 l
-3647 5168 l
-3487 5168 l
-3486 5168 m
-3646 5168 l
-3646 5169 l
-3486 5169 l
-3485 5169 m
-3645 5169 l
-3645 5170 l
-3485 5170 l
-3485 5170 m
-3644 5170 l
-3644 5171 l
-3485 5171 l
-3484 5171 m
-3643 5171 l
-3643 5172 l
-3484 5172 l
-3483 5172 m
-3642 5172 l
-3642 5173 l
-3483 5173 l
-3482 5173 m
-3642 5173 l
-3642 5174 l
-3482 5174 l
-3481 5174 m
-3641 5174 l
-3641 5175 l
-3481 5175 l
-3480 5175 m
-3640 5175 l
-3640 5176 l
-3480 5176 l
-3480 5176 m
-3639 5176 l
-3639 5177 l
-3480 5177 l
-3479 5177 m
-3638 5177 l
-3638 5178 l
-3479 5178 l
-3478 5178 m
-3637 5178 l
-3637 5179 l
-3478 5179 l
-3477 5179 m
-3637 5179 l
-3637 5180 l
-3477 5180 l
-3476 5180 m
-3636 5180 l
-3636 5181 l
-3476 5181 l
-3475 5181 m
-3635 5181 l
-3635 5182 l
-3475 5182 l
-3475 5182 m
-3634 5182 l
-3634 5183 l
-3475 5183 l
-3474 5183 m
-3633 5183 l
-3633 5184 l
-3474 5184 l
-3473 5184 m
-3632 5184 l
-3632 5185 l
-3473 5185 l
-3472 5185 m
-3632 5185 l
-3632 5186 l
-3472 5186 l
-3471 5186 m
-3631 5186 l
-3631 5187 l
-3471 5187 l
-3470 5187 m
-3630 5187 l
-3630 5188 l
-3470 5188 l
-3470 5188 m
-3629 5188 l
-3629 5189 l
-3470 5189 l
-3469 5189 m
-3628 5189 l
-3628 5190 l
-3469 5190 l
-3468 5190 m
-3627 5190 l
-3627 5191 l
-3468 5191 l
-3467 5191 m
-3627 5191 l
-3627 5192 l
-3467 5192 l
-3466 5192 m
-3626 5192 l
-3626 5193 l
-3466 5193 l
-3466 5193 m
-3625 5193 l
-3625 5194 l
-3466 5194 l
-3466 5194 m
-3624 5194 l
-3624 5195 l
-3466 5195 l
-3467 5195 m
-3623 5195 l
-3623 5196 l
-3467 5196 l
-3468 5196 m
-3622 5196 l
-3622 5197 l
-3468 5197 l
-3469 5197 m
-3622 5197 l
-3622 5198 l
-3469 5198 l
-3470 5198 m
-3621 5198 l
-3621 5199 l
-3470 5199 l
-3471 5199 m
-3620 5199 l
-3620 5200 l
-3471 5200 l
-3473 5200 m
-3619 5200 l
-3619 5201 l
-3473 5201 l
-3474 5201 m
-3618 5201 l
-3618 5202 l
-3474 5202 l
-3475 5202 m
-3618 5202 l
-3618 5203 l
-3475 5203 l
-3476 5203 m
-3617 5203 l
-3617 5204 l
-3476 5204 l
-3477 5204 m
-3616 5204 l
-3616 5205 l
-3477 5205 l
-3479 5205 m
-3615 5205 l
-3615 5206 l
-3479 5206 l
-3480 5206 m
-3614 5206 l
-3614 5207 l
-3480 5207 l
-3481 5207 m
-3613 5207 l
-3613 5208 l
-3481 5208 l
-3482 5208 m
-3613 5208 l
-3613 5209 l
-3482 5209 l
-3483 5209 m
-3612 5209 l
-3612 5210 l
-3483 5210 l
-3485 5210 m
-3611 5210 l
-3611 5211 l
-3485 5211 l
-3486 5211 m
-3610 5211 l
-3610 5212 l
-3486 5212 l
-3487 5212 m
-3609 5212 l
-3609 5213 l
-3487 5213 l
-3488 5213 m
-3608 5213 l
-3608 5214 l
-3488 5214 l
-3489 5214 m
-3608 5214 l
-3608 5215 l
-3489 5215 l
-3491 5215 m
-3607 5215 l
-3607 5216 l
-3491 5216 l
-3492 5216 m
-3606 5216 l
-3606 5217 l
-3492 5217 l
-3493 5217 m
-3605 5217 l
-3605 5218 l
-3493 5218 l
-3494 5218 m
-3604 5218 l
-3604 5219 l
-3494 5219 l
-3495 5219 m
-3603 5219 l
-3603 5220 l
-3495 5220 l
-3496 5220 m
-3603 5220 l
-3603 5221 l
-3496 5221 l
-3498 5221 m
-3602 5221 l
-3602 5222 l
-3498 5222 l
-3499 5222 m
-3601 5222 l
-3601 5223 l
-3499 5223 l
-3500 5223 m
-3600 5223 l
-3600 5224 l
-3500 5224 l
-3501 5224 m
-3599 5224 l
-3599 5225 l
-3501 5225 l
-3502 5225 m
-3598 5225 l
-3598 5226 l
-3502 5226 l
-3504 5226 m
-3598 5226 l
-3598 5227 l
-3504 5227 l
-3505 5227 m
-3597 5227 l
-3597 5228 l
-3505 5228 l
-3506 5228 m
-3596 5228 l
-3596 5229 l
-3506 5229 l
-3507 5229 m
-3595 5229 l
-3595 5230 l
-3507 5230 l
-3508 5230 m
-3594 5230 l
-3594 5231 l
-3508 5231 l
-3510 5231 m
-3593 5231 l
-3593 5232 l
-3510 5232 l
-3511 5232 m
-3593 5232 l
-3593 5233 l
-3511 5233 l
-3512 5233 m
-3592 5233 l
-3592 5234 l
-3512 5234 l
-3513 5234 m
-3591 5234 l
-3591 5235 l
-3513 5235 l
-3514 5235 m
-3590 5235 l
-3590 5236 l
-3514 5236 l
-3516 5236 m
-3589 5236 l
-3589 5237 l
-3516 5237 l
-3517 5237 m
-3589 5237 l
-3589 5238 l
-3517 5238 l
-3518 5238 m
-3588 5238 l
-3588 5239 l
-3518 5239 l
-3519 5239 m
-3587 5239 l
-3587 5240 l
-3519 5240 l
-3520 5240 m
-3586 5240 l
-3586 5241 l
-3520 5241 l
-3522 5241 m
-3585 5241 l
-3585 5242 l
-3522 5242 l
-3523 5242 m
-3584 5242 l
-3584 5243 l
-3523 5243 l
-3524 5243 m
-3584 5243 l
-3584 5244 l
-3524 5244 l
-3525 5244 m
-3583 5244 l
-3583 5245 l
-3525 5245 l
-3526 5245 m
-3582 5245 l
-3582 5246 l
-3526 5246 l
-3527 5246 m
-3581 5246 l
-3581 5247 l
-3527 5247 l
-3529 5247 m
-3580 5247 l
-3580 5248 l
-3529 5248 l
-3530 5248 m
-3579 5248 l
-3579 5249 l
-3530 5249 l
-3531 5249 m
-3579 5249 l
-3579 5250 l
-3531 5250 l
-3532 5250 m
-3578 5250 l
-3578 5251 l
-3532 5251 l
-3533 5251 m
-3577 5251 l
-3577 5252 l
-3533 5252 l
-3535 5252 m
-3576 5252 l
-3576 5253 l
-3535 5253 l
-3536 5253 m
-3575 5253 l
-3575 5254 l
-3536 5254 l
-3537 5254 m
-3574 5254 l
-3574 5255 l
-3537 5255 l
-3538 5255 m
-3574 5255 l
-3574 5256 l
-3538 5256 l
-3539 5256 m
-3573 5256 l
-3573 5257 l
-3539 5257 l
-3541 5257 m
-3572 5257 l
-3572 5258 l
-3541 5258 l
-3542 5258 m
-3571 5258 l
-3571 5259 l
-3542 5259 l
-3543 5259 m
-3570 5259 l
-3570 5260 l
-3543 5260 l
-3544 5260 m
-3569 5260 l
-3569 5261 l
-3544 5261 l
-3545 5261 m
-3569 5261 l
-3569 5262 l
-3545 5262 l
-3547 5262 m
-3568 5262 l
-3568 5263 l
-3547 5263 l
-3548 5263 m
-3567 5263 l
-3567 5264 l
-3548 5264 l
-3549 5264 m
-3566 5264 l
-3566 5265 l
-3549 5265 l
-3550 5265 m
-3565 5265 l
-3565 5266 l
-3550 5266 l
-3551 5266 m
-3564 5266 l
-3564 5267 l
-3551 5267 l
-3553 5267 m
-3564 5267 l
-3564 5268 l
-3553 5268 l
-3554 5268 m
-3563 5268 l
-3563 5269 l
-3554 5269 l
-3555 5269 m
-3562 5269 l
-3562 5270 l
-3555 5270 l
-3556 5270 m
-3561 5270 l
-3561 5271 l
-3556 5271 l
-3557 5271 m
-3560 5271 l
-3560 5272 l
-3557 5272 l
-Y
-3676.6 5130.1 m
-3583 5053 l
-3466 5194 l
-3559 5272 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-3578 5086 m
-3548 5121 l
-3590 5123 l
-3582 5133 l
-3580 5142 l
-3580 5148 l
-3587 5159 l
-3594 5165 l
-3606 5169 l
-3618 5168 l
-3629 5161 l
-3637 5152 l
-3642 5139 l
-3641 5133 l
-3638 5125 l
-S
-3514 5163 m
-3525 5156 l
-3540 5158 l
-3559 5168 l
-3568 5176 l
-3582 5192 l
-3586 5207 l
-3581 5219 l
-3576 5226 l
-3565 5233 l
-3550 5231 l
-3531 5221 l
-3521 5213 l
-3508 5196 l
-3504 5182 l
-3508 5170 l
-3514 5163 l
-S
-1 g
-2996 5490 m
-3001 5490 l
-3001 5491 l
-2996 5491 l
-2992 5491 m
-3001 5491 l
-3001 5492 l
-2992 5492 l
-2989 5492 m
-3001 5492 l
-3001 5493 l
-2989 5493 l
-2985 5493 m
-3002 5493 l
-3002 5494 l
-2985 5494 l
-2982 5494 m
-3002 5494 l
-3002 5495 l
-2982 5495 l
-2978 5495 m
-3002 5495 l
-3002 5496 l
-2978 5496 l
-2975 5496 m
-3002 5496 l
-3002 5497 l
-2975 5497 l
-2971 5497 m
-3003 5497 l
-3003 5498 l
-2971 5498 l
-2968 5498 m
-3003 5498 l
-3003 5499 l
-2968 5499 l
-2964 5499 m
-3003 5499 l
-3003 5500 l
-2964 5500 l
-2961 5500 m
-3004 5500 l
-3004 5501 l
-2961 5501 l
-2957 5501 m
-3004 5501 l
-3004 5502 l
-2957 5502 l
-2954 5502 m
-3004 5502 l
-3004 5503 l
-2954 5503 l
-2950 5503 m
-3004 5503 l
-3004 5504 l
-2950 5504 l
-2947 5504 m
-3005 5504 l
-3005 5505 l
-2947 5505 l
-2943 5505 m
-3005 5505 l
-3005 5506 l
-2943 5506 l
-2939 5506 m
-3005 5506 l
-3005 5507 l
-2939 5507 l
-2936 5507 m
-3006 5507 l
-3006 5508 l
-2936 5508 l
-2932 5508 m
-3006 5508 l
-3006 5509 l
-2932 5509 l
-2929 5509 m
-3006 5509 l
-3006 5510 l
-2929 5510 l
-2925 5510 m
-3006 5510 l
-3006 5511 l
-2925 5511 l
-2922 5511 m
-3007 5511 l
-3007 5512 l
-2922 5512 l
-2918 5512 m
-3007 5512 l
-3007 5513 l
-2918 5513 l
-2915 5513 m
-3007 5513 l
-3007 5514 l
-2915 5514 l
-2911 5514 m
-3008 5514 l
-3008 5515 l
-2911 5515 l
-2908 5515 m
-3008 5515 l
-3008 5516 l
-2908 5516 l
-2904 5516 m
-3008 5516 l
-3008 5517 l
-2904 5517 l
-2901 5517 m
-3008 5517 l
-3008 5518 l
-2901 5518 l
-2897 5518 m
-3009 5518 l
-3009 5519 l
-2897 5519 l
-2894 5519 m
-3009 5519 l
-3009 5520 l
-2894 5520 l
-2890 5520 m
-3009 5520 l
-3009 5521 l
-2890 5521 l
-2887 5521 m
-3010 5521 l
-3010 5522 l
-2887 5522 l
-2883 5522 m
-3010 5522 l
-3010 5523 l
-2883 5523 l
-2879 5523 m
-3010 5523 l
-3010 5524 l
-2879 5524 l
-2876 5524 m
-3010 5524 l
-3010 5525 l
-2876 5525 l
-2872 5525 m
-3011 5525 l
-3011 5526 l
-2872 5526 l
-2869 5526 m
-3011 5526 l
-3011 5527 l
-2869 5527 l
-2865 5527 m
-3011 5527 l
-3011 5528 l
-2865 5528 l
-2862 5528 m
-3012 5528 l
-3012 5529 l
-2862 5529 l
-2858 5529 m
-3012 5529 l
-3012 5530 l
-2858 5530 l
-2855 5530 m
-3012 5530 l
-3012 5531 l
-2855 5531 l
-2851 5531 m
-3012 5531 l
-3012 5532 l
-2851 5532 l
-2848 5532 m
-3013 5532 l
-3013 5533 l
-2848 5533 l
-2844 5533 m
-3013 5533 l
-3013 5534 l
-2844 5534 l
-2841 5534 m
-3013 5534 l
-3013 5535 l
-2841 5535 l
-2837 5535 m
-3014 5535 l
-3014 5536 l
-2837 5536 l
-2834 5536 m
-3014 5536 l
-3014 5537 l
-2834 5537 l
-2830 5537 m
-3014 5537 l
-3014 5538 l
-2830 5538 l
-2827 5538 m
-3014 5538 l
-3014 5539 l
-2827 5539 l
-2827 5539 m
-3015 5539 l
-3015 5540 l
-2827 5540 l
-2827 5540 m
-3015 5540 l
-3015 5542 l
-2827 5542 l
-2827 5542 m
-3016 5542 l
-3016 5543 l
-2827 5543 l
-2828 5543 m
-3016 5543 l
-3016 5546 l
-2828 5546 l
-2828 5546 m
-3017 5546 l
-3017 5547 l
-2828 5547 l
-2829 5547 m
-3017 5547 l
-3017 5549 l
-2829 5549 l
-2829 5549 m
-3018 5549 l
-3018 5550 l
-2829 5550 l
-2830 5550 m
-3018 5550 l
-3018 5553 l
-2830 5553 l
-2830 5553 m
-3019 5553 l
-3019 5554 l
-2830 5554 l
-2831 5554 m
-3019 5554 l
-3019 5556 l
-2831 5556 l
-2831 5556 m
-3020 5556 l
-3020 5557 l
-2831 5557 l
-2832 5557 m
-3020 5557 l
-3020 5560 l
-2832 5560 l
-2832 5560 m
-3021 5560 l
-3021 5561 l
-2832 5561 l
-2833 5561 m
-3021 5561 l
-3021 5563 l
-2833 5563 l
-2833 5563 m
-3022 5563 l
-3022 5564 l
-2833 5564 l
-2834 5564 m
-3022 5564 l
-3022 5567 l
-2834 5567 l
-2834 5567 m
-3023 5567 l
-3023 5568 l
-2834 5568 l
-2835 5568 m
-3023 5568 l
-3023 5570 l
-2835 5570 l
-2835 5570 m
-3024 5570 l
-3024 5571 l
-2835 5571 l
-2836 5571 m
-3024 5571 l
-3024 5574 l
-2836 5574 l
-2836 5574 m
-3025 5574 l
-3025 5575 l
-2836 5575 l
-2837 5575 m
-3025 5575 l
-3025 5577 l
-2837 5577 l
-2837 5577 m
-3026 5577 l
-3026 5578 l
-2837 5578 l
-2838 5578 m
-3026 5578 l
-3026 5581 l
-2838 5581 l
-2838 5581 m
-3027 5581 l
-3027 5582 l
-2838 5582 l
-2839 5582 m
-3027 5582 l
-3027 5584 l
-2839 5584 l
-2839 5584 m
-3028 5584 l
-3028 5585 l
-2839 5585 l
-2840 5585 m
-3028 5585 l
-3028 5588 l
-2840 5588 l
-2840 5588 m
-3029 5588 l
-3029 5589 l
-2840 5589 l
-2841 5589 m
-3029 5589 l
-3029 5591 l
-2841 5591 l
-2841 5591 m
-3030 5591 l
-3030 5592 l
-2841 5592 l
-2842 5592 m
-3030 5592 l
-3030 5595 l
-2842 5595 l
-2842 5595 m
-3031 5595 l
-3031 5596 l
-2842 5596 l
-2843 5596 m
-3031 5596 l
-3031 5598 l
-2843 5598 l
-2843 5598 m
-3032 5598 l
-3032 5599 l
-2843 5599 l
-2844 5599 m
-3032 5599 l
-3032 5602 l
-2844 5602 l
-2844 5602 m
-3033 5602 l
-3033 5603 l
-2844 5603 l
-2845 5603 m
-3033 5603 l
-3033 5605 l
-2845 5605 l
-2845 5605 m
-3034 5605 l
-3034 5606 l
-2845 5606 l
-2846 5606 m
-3034 5606 l
-3034 5607 l
-2846 5607 l
-2846 5607 m
-3030 5607 l
-3030 5608 l
-2846 5608 l
-2846 5608 m
-3027 5608 l
-3027 5609 l
-2846 5609 l
-2846 5609 m
-3023 5609 l
-3023 5610 l
-2846 5610 l
-2847 5610 m
-3020 5610 l
-3020 5611 l
-2847 5611 l
-2847 5611 m
-3016 5611 l
-3016 5612 l
-2847 5612 l
-2847 5612 m
-3013 5612 l
-3013 5613 l
-2847 5613 l
-2848 5613 m
-3009 5613 l
-3009 5614 l
-2848 5614 l
-2848 5614 m
-3006 5614 l
-3006 5615 l
-2848 5615 l
-2848 5615 m
-3002 5615 l
-3002 5616 l
-2848 5616 l
-2848 5616 m
-2999 5616 l
-2999 5617 l
-2848 5617 l
-2849 5617 m
-2995 5617 l
-2995 5618 l
-2849 5618 l
-2849 5618 m
-2991 5618 l
-2991 5619 l
-2849 5619 l
-2849 5619 m
-2988 5619 l
-2988 5620 l
-2849 5620 l
-2850 5620 m
-2984 5620 l
-2984 5621 l
-2850 5621 l
-2850 5621 m
-2981 5621 l
-2981 5622 l
-2850 5622 l
-2850 5622 m
-2977 5622 l
-2977 5623 l
-2850 5623 l
-2850 5623 m
-2974 5623 l
-2974 5624 l
-2850 5624 l
-2851 5624 m
-2970 5624 l
-2970 5625 l
-2851 5625 l
-2851 5625 m
-2967 5625 l
-2967 5626 l
-2851 5626 l
-2851 5626 m
-2963 5626 l
-2963 5627 l
-2851 5627 l
-2852 5627 m
-2960 5627 l
-2960 5628 l
-2852 5628 l
-2852 5628 m
-2956 5628 l
-2956 5629 l
-2852 5629 l
-2852 5629 m
-2953 5629 l
-2953 5630 l
-2852 5630 l
-2852 5630 m
-2949 5630 l
-2949 5631 l
-2852 5631 l
-2853 5631 m
-2945 5631 l
-2945 5632 l
-2853 5632 l
-2853 5632 m
-2942 5632 l
-2942 5633 l
-2853 5633 l
-2853 5633 m
-2938 5633 l
-2938 5634 l
-2853 5634 l
-2854 5634 m
-2935 5634 l
-2935 5635 l
-2854 5635 l
-2854 5635 m
-2931 5635 l
-2931 5636 l
-2854 5636 l
-2854 5636 m
-2928 5636 l
-2928 5637 l
-2854 5637 l
-2854 5637 m
-2924 5637 l
-2924 5638 l
-2854 5638 l
-2855 5638 m
-2921 5638 l
-2921 5639 l
-2855 5639 l
-2855 5639 m
-2917 5639 l
-2917 5640 l
-2855 5640 l
-2855 5640 m
-2914 5640 l
-2914 5641 l
-2855 5641 l
-2856 5641 m
-2910 5641 l
-2910 5642 l
-2856 5642 l
-2856 5642 m
-2907 5642 l
-2907 5643 l
-2856 5643 l
-2856 5643 m
-2903 5643 l
-2903 5644 l
-2856 5644 l
-2856 5644 m
-2899 5644 l
-2899 5645 l
-2856 5645 l
-2857 5645 m
-2896 5645 l
-2896 5646 l
-2857 5646 l
-2857 5646 m
-2892 5646 l
-2892 5647 l
-2857 5647 l
-2857 5647 m
-2889 5647 l
-2889 5648 l
-2857 5648 l
-2858 5648 m
-2885 5648 l
-2885 5649 l
-2858 5649 l
-2858 5649 m
-2882 5649 l
-2882 5650 l
-2858 5650 l
-2858 5650 m
-2878 5650 l
-2878 5651 l
-2858 5651 l
-2858 5651 m
-2875 5651 l
-2875 5652 l
-2858 5652 l
-2859 5652 m
-2871 5652 l
-2871 5653 l
-2859 5653 l
-2859 5653 m
-2868 5653 l
-2868 5654 l
-2859 5654 l
-2859 5654 m
-2864 5654 l
-2864 5655 l
-2859 5655 l
-Y
-3033.1 5606.1 m
-3000 5490 l
-2827 5539 l
-2860 5655 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-2940 5537 m
-2941 5528 l
-2952 5521 l
-2960 5518 l
-2973 5519 l
-2985 5529 l
-2995 5548 l
-3000 5568 l
-3001 5585 l
-2995 5595 l
-2984 5603 l
-2980 5604 l
-2967 5603 l
-2957 5597 l
-2949 5586 l
-2948 5582 l
-2949 5569 l
-2955 5559 l
-2965 5551 l
-2969 5550 l
-2983 5551 l
-2993 5557 l
-3000 5568 l
-S
-2884 5540 m
-2897 5541 l
-2909 5550 l
-2918 5569 l
-2922 5581 l
-2923 5603 l
-2919 5617 l
-2908 5624 l
-2900 5627 l
-2887 5626 l
-2875 5616 l
-2866 5597 l
-2862 5585 l
-2860 5564 l
-2865 5550 l
-2876 5542 l
-2884 5540 l
-S
-1 g
-1950 5410 m
-1955 5410 l
-1955 5411 l
-1950 5411 l
-1949 5411 m
-1957 5411 l
-1957 5412 l
-1949 5412 l
-1949 5412 m
-1960 5412 l
-1960 5413 l
-1949 5413 l
-1948 5413 m
-1962 5413 l
-1962 5414 l
-1948 5414 l
-1948 5414 m
-1965 5414 l
-1965 5415 l
-1948 5415 l
-1948 5415 m
-1967 5415 l
-1967 5416 l
-1948 5416 l
-1947 5416 m
-1970 5416 l
-1970 5417 l
-1947 5417 l
-1947 5417 m
-1972 5417 l
-1972 5418 l
-1947 5418 l
-1946 5418 m
-1975 5418 l
-1975 5419 l
-1946 5419 l
-1946 5419 m
-1977 5419 l
-1977 5420 l
-1946 5420 l
-1946 5420 m
-1980 5420 l
-1980 5421 l
-1946 5421 l
-1945 5421 m
-1982 5421 l
-1982 5422 l
-1945 5422 l
-1945 5422 m
-1985 5422 l
-1985 5423 l
-1945 5423 l
-1944 5423 m
-1987 5423 l
-1987 5424 l
-1944 5424 l
-1944 5424 m
-1990 5424 l
-1990 5425 l
-1944 5425 l
-1944 5425 m
-1992 5425 l
-1992 5426 l
-1944 5426 l
-1943 5426 m
-1995 5426 l
-1995 5427 l
-1943 5427 l
-1943 5427 m
-1997 5427 l
-1997 5428 l
-1943 5428 l
-1942 5428 m
-2000 5428 l
-2000 5429 l
-1942 5429 l
-1942 5429 m
-2002 5429 l
-2002 5430 l
-1942 5430 l
-1942 5430 m
-2004 5430 l
-2004 5431 l
-1942 5431 l
-1941 5431 m
-2007 5431 l
-2007 5432 l
-1941 5432 l
-1941 5432 m
-2009 5432 l
-2009 5433 l
-1941 5433 l
-1940 5433 m
-2012 5433 l
-2012 5434 l
-1940 5434 l
-1940 5434 m
-2014 5434 l
-2014 5435 l
-1940 5435 l
-1940 5435 m
-2017 5435 l
-2017 5436 l
-1940 5436 l
-1939 5436 m
-2019 5436 l
-2019 5437 l
-1939 5437 l
-1939 5437 m
-2022 5437 l
-2022 5438 l
-1939 5438 l
-1939 5438 m
-2024 5438 l
-2024 5439 l
-1939 5439 l
-1938 5439 m
-2027 5439 l
-2027 5440 l
-1938 5440 l
-1938 5440 m
-2029 5440 l
-2029 5441 l
-1938 5441 l
-1937 5441 m
-2032 5441 l
-2032 5442 l
-1937 5442 l
-1937 5442 m
-2034 5442 l
-2034 5443 l
-1937 5443 l
-1937 5443 m
-2037 5443 l
-2037 5444 l
-1937 5444 l
-1936 5444 m
-2039 5444 l
-2039 5445 l
-1936 5445 l
-1936 5445 m
-2042 5445 l
-2042 5446 l
-1936 5446 l
-1935 5446 m
-2044 5446 l
-2044 5447 l
-1935 5447 l
-1935 5447 m
-2047 5447 l
-2047 5448 l
-1935 5448 l
-1935 5448 m
-2049 5448 l
-2049 5449 l
-1935 5449 l
-1934 5449 m
-2052 5449 l
-2052 5450 l
-1934 5450 l
-1934 5450 m
-2054 5450 l
-2054 5451 l
-1934 5451 l
-1933 5451 m
-2057 5451 l
-2057 5452 l
-1933 5452 l
-1933 5452 m
-2059 5452 l
-2059 5453 l
-1933 5453 l
-1933 5453 m
-2062 5453 l
-2062 5454 l
-1933 5454 l
-1932 5454 m
-2064 5454 l
-2064 5455 l
-1932 5455 l
-1932 5455 m
-2067 5455 l
-2067 5456 l
-1932 5456 l
-1931 5456 m
-2069 5456 l
-2069 5457 l
-1931 5457 l
-1931 5457 m
-2072 5457 l
-2072 5458 l
-1931 5458 l
-1931 5458 m
-2074 5458 l
-2074 5459 l
-1931 5459 l
-1930 5459 m
-2077 5459 l
-2077 5460 l
-1930 5460 l
-1930 5460 m
-2079 5460 l
-2079 5461 l
-1930 5461 l
-1929 5461 m
-2082 5461 l
-2082 5462 l
-1929 5462 l
-1929 5462 m
-2084 5462 l
-2084 5463 l
-1929 5463 l
-1929 5463 m
-2087 5463 l
-2087 5464 l
-1929 5464 l
-1928 5464 m
-2089 5464 l
-2089 5465 l
-1928 5465 l
-1928 5465 m
-2092 5465 l
-2092 5466 l
-1928 5466 l
-1927 5466 m
-2094 5466 l
-2094 5467 l
-1927 5467 l
-1927 5467 m
-2097 5467 l
-2097 5468 l
-1927 5468 l
-1927 5468 m
-2099 5468 l
-2099 5469 l
-1927 5469 l
-1926 5469 m
-2102 5469 l
-2102 5470 l
-1926 5470 l
-1926 5470 m
-2104 5470 l
-2104 5471 l
-1926 5471 l
-1925 5471 m
-2107 5471 l
-2107 5472 l
-1925 5472 l
-1925 5472 m
-2109 5472 l
-2109 5473 l
-1925 5473 l
-1925 5473 m
-2112 5473 l
-2112 5474 l
-1925 5474 l
-1924 5474 m
-2114 5474 l
-2114 5475 l
-1924 5475 l
-1924 5475 m
-2117 5475 l
-2117 5476 l
-1924 5476 l
-1923 5476 m
-2119 5476 l
-2119 5477 l
-1923 5477 l
-1923 5477 m
-2122 5477 l
-2122 5478 l
-1923 5478 l
-1923 5478 m
-2121 5478 l
-2121 5479 l
-1923 5479 l
-1922 5479 m
-2121 5479 l
-2121 5481 l
-1922 5481 l
-1921 5481 m
-2120 5481 l
-2120 5483 l
-1921 5483 l
-1921 5483 m
-2119 5483 l
-2119 5484 l
-1921 5484 l
-1920 5484 m
-2119 5484 l
-2119 5486 l
-1920 5486 l
-1919 5486 m
-2118 5486 l
-2118 5488 l
-1919 5488 l
-1919 5488 m
-2117 5488 l
-2117 5489 l
-1919 5489 l
-1918 5489 m
-2117 5489 l
-2117 5491 l
-1918 5491 l
-1917 5491 m
-2116 5491 l
-2116 5493 l
-1917 5493 l
-1917 5493 m
-2115 5493 l
-2115 5494 l
-1917 5494 l
-1916 5494 m
-2115 5494 l
-2115 5496 l
-1916 5496 l
-1915 5496 m
-2114 5496 l
-2114 5498 l
-1915 5498 l
-1915 5498 m
-2113 5498 l
-2113 5499 l
-1915 5499 l
-1914 5499 m
-2113 5499 l
-2113 5501 l
-1914 5501 l
-1913 5501 m
-2112 5501 l
-2112 5503 l
-1913 5503 l
-1913 5503 m
-2111 5503 l
-2111 5504 l
-1913 5504 l
-1912 5504 m
-2111 5504 l
-2111 5506 l
-1912 5506 l
-1911 5506 m
-2110 5506 l
-2110 5508 l
-1911 5508 l
-1911 5508 m
-2109 5508 l
-2109 5509 l
-1911 5509 l
-1910 5509 m
-2109 5509 l
-2109 5511 l
-1910 5511 l
-1909 5511 m
-2108 5511 l
-2108 5513 l
-1909 5513 l
-1909 5513 m
-2107 5513 l
-2107 5514 l
-1909 5514 l
-1908 5514 m
-2107 5514 l
-2107 5516 l
-1908 5516 l
-1907 5516 m
-2106 5516 l
-2106 5518 l
-1907 5518 l
-1907 5518 m
-2105 5518 l
-2105 5519 l
-1907 5519 l
-1906 5519 m
-2105 5519 l
-2105 5521 l
-1906 5521 l
-1906 5521 m
-2104 5521 l
-2104 5522 l
-1906 5522 l
-1906 5522 m
-2104 5522 l
-2104 5523 l
-1906 5523 l
-1908 5523 m
-2103 5523 l
-2103 5524 l
-1908 5524 l
-1911 5524 m
-2103 5524 l
-2103 5525 l
-1911 5525 l
-1913 5525 m
-2103 5525 l
-2103 5526 l
-1913 5526 l
-1916 5526 m
-2102 5526 l
-2102 5527 l
-1916 5527 l
-1918 5527 m
-2102 5527 l
-2102 5528 l
-1918 5528 l
-1921 5528 m
-2101 5528 l
-2101 5529 l
-1921 5529 l
-1923 5529 m
-2101 5529 l
-2101 5530 l
-1923 5530 l
-1926 5530 m
-2101 5530 l
-2101 5531 l
-1926 5531 l
-1928 5531 m
-2100 5531 l
-2100 5532 l
-1928 5532 l
-1931 5532 m
-2100 5532 l
-2100 5533 l
-1931 5533 l
-1933 5533 m
-2099 5533 l
-2099 5534 l
-1933 5534 l
-1936 5534 m
-2099 5534 l
-2099 5535 l
-1936 5535 l
-1938 5535 m
-2099 5535 l
-2099 5536 l
-1938 5536 l
-1941 5536 m
-2098 5536 l
-2098 5537 l
-1941 5537 l
-1943 5537 m
-2098 5537 l
-2098 5538 l
-1943 5538 l
-1946 5538 m
-2097 5538 l
-2097 5539 l
-1946 5539 l
-1948 5539 m
-2097 5539 l
-2097 5540 l
-1948 5540 l
-1951 5540 m
-2097 5540 l
-2097 5541 l
-1951 5541 l
-1953 5541 m
-2096 5541 l
-2096 5542 l
-1953 5542 l
-1956 5542 m
-2096 5542 l
-2096 5543 l
-1956 5543 l
-1958 5543 m
-2095 5543 l
-2095 5544 l
-1958 5544 l
-1961 5544 m
-2095 5544 l
-2095 5545 l
-1961 5545 l
-1963 5545 m
-2095 5545 l
-2095 5546 l
-1963 5546 l
-1966 5546 m
-2094 5546 l
-2094 5547 l
-1966 5547 l
-1968 5547 m
-2094 5547 l
-2094 5548 l
-1968 5548 l
-1971 5548 m
-2093 5548 l
-2093 5549 l
-1971 5549 l
-1973 5549 m
-2093 5549 l
-2093 5550 l
-1973 5550 l
-1976 5550 m
-2093 5550 l
-2093 5551 l
-1976 5551 l
-1978 5551 m
-2092 5551 l
-2092 5552 l
-1978 5552 l
-1981 5552 m
-2092 5552 l
-2092 5553 l
-1981 5553 l
-1983 5553 m
-2091 5553 l
-2091 5554 l
-1983 5554 l
-1986 5554 m
-2091 5554 l
-2091 5555 l
-1986 5555 l
-1988 5555 m
-2091 5555 l
-2091 5556 l
-1988 5556 l
-1991 5556 m
-2090 5556 l
-2090 5557 l
-1991 5557 l
-1993 5557 m
-2090 5557 l
-2090 5558 l
-1993 5558 l
-1996 5558 m
-2089 5558 l
-2089 5559 l
-1996 5559 l
-1998 5559 m
-2089 5559 l
-2089 5560 l
-1998 5560 l
-2001 5560 m
-2089 5560 l
-2089 5561 l
-2001 5561 l
-2003 5561 m
-2088 5561 l
-2088 5562 l
-2003 5562 l
-2006 5562 m
-2088 5562 l
-2088 5563 l
-2006 5563 l
-2008 5563 m
-2087 5563 l
-2087 5564 l
-2008 5564 l
-2011 5564 m
-2087 5564 l
-2087 5565 l
-2011 5565 l
-2013 5565 m
-2087 5565 l
-2087 5566 l
-2013 5566 l
-2016 5566 m
-2086 5566 l
-2086 5567 l
-2016 5567 l
-2018 5567 m
-2086 5567 l
-2086 5568 l
-2018 5568 l
-2021 5568 m
-2085 5568 l
-2085 5569 l
-2021 5569 l
-2023 5569 m
-2085 5569 l
-2085 5570 l
-2023 5570 l
-2026 5570 m
-2085 5570 l
-2085 5571 l
-2026 5571 l
-2028 5571 m
-2084 5571 l
-2084 5572 l
-2028 5572 l
-2031 5572 m
-2084 5572 l
-2084 5573 l
-2031 5573 l
-2033 5573 m
-2083 5573 l
-2083 5574 l
-2033 5574 l
-2036 5574 m
-2083 5574 l
-2083 5575 l
-2036 5575 l
-2038 5575 m
-2083 5575 l
-2083 5576 l
-2038 5576 l
-2041 5576 m
-2082 5576 l
-2082 5577 l
-2041 5577 l
-2043 5577 m
-2082 5577 l
-2082 5578 l
-2043 5578 l
-2046 5578 m
-2081 5578 l
-2081 5579 l
-2046 5579 l
-2048 5579 m
-2081 5579 l
-2081 5580 l
-2048 5580 l
-2051 5580 m
-2081 5580 l
-2081 5581 l
-2051 5581 l
-2053 5581 m
-2080 5581 l
-2080 5582 l
-2053 5582 l
-2056 5582 m
-2080 5582 l
-2080 5583 l
-2056 5583 l
-2058 5583 m
-2079 5583 l
-2079 5584 l
-2058 5584 l
-2061 5584 m
-2079 5584 l
-2079 5585 l
-2061 5585 l
-2063 5585 m
-2079 5585 l
-2079 5586 l
-2063 5586 l
-2066 5586 m
-2078 5586 l
-2078 5587 l
-2066 5587 l
-2068 5587 m
-2078 5587 l
-2078 5588 l
-2068 5588 l
-2071 5588 m
-2077 5588 l
-2077 5589 l
-2071 5589 l
-2073 5589 m
-2077 5589 l
-2077 5590 l
-2073 5590 l
-Y
-1950.7 5409.6 m
-1906 5522 l
-2076 5590 l
-2121 5478 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-1993 5507 m
-1993 5494 l
-1989 5483 l
-1979 5475 l
-1975 5473 l
-1962 5472 l
-1951 5477 l
-1942 5487 l
-1941 5491 l
-1940 5504 l
-1944 5515 l
-1955 5524 l
-1958 5525 l
-1972 5526 l
-1982 5521 l
-1993 5507 l
-2000 5488 l
-2004 5467 l
-2001 5452 l
-1991 5444 l
-1983 5441 l
-1970 5440 l
-1963 5446 l
-S
-2032 5555 m
-2022 5546 l
-2019 5531 l
-2023 5510 l
-2027 5499 l
-2039 5481 l
-2052 5472 l
-2065 5473 l
-2072 5476 l
-2083 5485 l
-2086 5500 l
-2082 5521 l
-2077 5532 l
-2065 5550 l
-2053 5559 l
-2040 5558 l
-2032 5555 l
-S
-1 g
-Y
-467.2 2211.2 m
-282 2211 l
-282 5715 l
-467 5715 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-307 2236 m
-412 2236 l
-S
-307 2236 m
-307 2301 l
-S
-357 2236 m
-357 2276 l
-S
-412 2236 m
-412 2301 l
-S
-357 2387 m
-347 2377 l
-342 2367 l
-342 2352 l
-347 2341 l
-357 2331 l
-372 2326 l
-382 2326 l
-397 2331 l
-407 2341 l
-412 2352 l
-412 2367 l
-407 2377 l
-397 2387 l
-S
-307 2422 m
-412 2422 l
-S
-307 2457 m
-312 2462 l
-307 2467 l
-302 2462 l
-307 2457 l
-S
-342 2462 m
-412 2462 l
-S
-342 2502 m
-447 2502 l
-S
-357 2502 m
-347 2512 l
-342 2522 l
-342 2537 l
-347 2547 l
-357 2557 l
-372 2562 l
-382 2562 l
-397 2557 l
-407 2547 l
-412 2537 l
-412 2522 l
-407 2512 l
-397 2502 l
-S
-307 2602 m
-392 2602 l
-407 2607 l
-412 2617 l
-412 2627 l
-S
-342 2587 m
-342 2622 l
-S
-307 2652 m
-312 2657 l
-307 2662 l
-302 2657 l
-307 2652 l
-S
-342 2657 m
-412 2657 l
-S
-357 2752 m
-347 2742 l
-342 2732 l
-342 2717 l
-347 2707 l
-357 2697 l
-372 2692 l
-382 2692 l
-397 2697 l
-407 2707 l
-412 2717 l
-412 2732 l
-407 2742 l
-397 2752 l
-S
-357 2923 m
-347 2913 l
-342 2903 l
-342 2888 l
-347 2878 l
-357 2868 l
-372 2863 l
-382 2863 l
-397 2868 l
-407 2878 l
-412 2888 l
-412 2903 l
-407 2913 l
-397 2923 l
-S
-342 2978 m
-347 2968 l
-357 2958 l
-372 2953 l
-382 2953 l
-397 2958 l
-407 2968 l
-412 2978 l
-412 2993 l
-407 3003 l
-397 3013 l
-382 3018 l
-372 3018 l
-357 3013 l
-347 3003 l
-342 2993 l
-342 2978 l
-S
-342 3073 m
-347 3063 l
-357 3053 l
-372 3048 l
-382 3048 l
-397 3053 l
-407 3063 l
-412 3073 l
-412 3088 l
-407 3098 l
-397 3108 l
-382 3113 l
-372 3113 l
-357 3108 l
-347 3098 l
-342 3088 l
-342 3073 l
-S
-342 3148 m
-412 3148 l
-S
-372 3148 m
-357 3153 l
-347 3163 l
-342 3174 l
-342 3189 l
-S
-307 3269 m
-412 3269 l
-S
-357 3269 m
-347 3259 l
-342 3249 l
-342 3234 l
-347 3224 l
-357 3214 l
-372 3209 l
-382 3209 l
-397 3214 l
-407 3224 l
-412 3234 l
-412 3249 l
-407 3259 l
-397 3269 l
-S
-307 3304 m
-312 3309 l
-307 3314 l
-302 3309 l
-307 3304 l
-S
-342 3309 m
-412 3309 l
-S
-342 3349 m
-412 3349 l
-S
-362 3349 m
-347 3364 l
-342 3374 l
-342 3389 l
-347 3399 l
-362 3404 l
-412 3404 l
-S
-342 3499 m
-412 3499 l
-S
-357 3499 m
-347 3489 l
-342 3479 l
-342 3464 l
-347 3454 l
-357 3444 l
-372 3439 l
-382 3439 l
-397 3444 l
-407 3454 l
-412 3464 l
-412 3479 l
-407 3489 l
-397 3499 l
-S
-307 3544 m
-392 3544 l
-407 3549 l
-412 3559 l
-412 3569 l
-S
-342 3529 m
-342 3564 l
-S
-372 3595 m
-372 3655 l
-362 3655 l
-352 3650 l
-347 3645 l
-342 3635 l
-342 3620 l
-347 3610 l
-357 3600 l
-372 3595 l
-382 3595 l
-397 3600 l
-407 3610 l
-412 3620 l
-412 3635 l
-407 3645 l
-397 3655 l
-S
-357 3740 m
-347 3735 l
-342 3720 l
-342 3705 l
-347 3690 l
-357 3685 l
-367 3690 l
-372 3700 l
-377 3725 l
-382 3735 l
-392 3740 l
-397 3740 l
-407 3735 l
-412 3720 l
-412 3705 l
-407 3690 l
-397 3685 l
-S
-342 3780 m
-347 3775 l
-352 3780 l
-347 3785 l
-342 3780 l
-S
-407 3785 m
-412 3780 l
-407 3775 l
-402 3780 l
-407 3785 l
-417 3785 l
-427 3780 l
-432 3775 l
-S
-342 3905 m
-412 3905 l
-S
-362 3905 m
-347 3920 l
-342 3930 l
-342 3945 l
-347 3955 l
-362 3960 l
-412 3960 l
-S
-362 3960 m
-347 3975 l
-342 3985 l
-342 4000 l
-347 4011 l
-362 4016 l
-412 4016 l
-S
-372 4051 m
-372 4111 l
-362 4111 l
-352 4106 l
-347 4101 l
-342 4091 l
-342 4076 l
-347 4066 l
-357 4056 l
-372 4051 l
-382 4051 l
-397 4056 l
-407 4066 l
-412 4076 l
-412 4091 l
-407 4101 l
-397 4111 l
-S
-342 4201 m
-412 4201 l
-S
-357 4201 m
-347 4191 l
-342 4181 l
-342 4166 l
-347 4156 l
-357 4146 l
-372 4141 l
-382 4141 l
-397 4146 l
-407 4156 l
-412 4166 l
-412 4181 l
-407 4191 l
-397 4201 l
-S
-342 4241 m
-412 4241 l
-S
-362 4241 m
-347 4256 l
-342 4266 l
-342 4281 l
-347 4291 l
-362 4296 l
-412 4296 l
-S
-372 4411 m
-372 4472 l
-362 4472 l
-352 4467 l
-347 4462 l
-342 4452 l
-342 4437 l
-347 4427 l
-357 4417 l
-372 4411 l
-382 4411 l
-397 4417 l
-407 4427 l
-412 4437 l
-412 4452 l
-407 4462 l
-397 4472 l
-S
-342 4562 m
-447 4562 l
-S
-357 4562 m
-347 4552 l
-342 4542 l
-342 4527 l
-347 4517 l
-357 4507 l
-372 4502 l
-382 4502 l
-397 4507 l
-407 4517 l
-412 4527 l
-412 4542 l
-407 4552 l
-397 4562 l
-S
-342 4602 m
-392 4602 l
-407 4607 l
-412 4617 l
-412 4632 l
-407 4642 l
-392 4657 l
-S
-342 4657 m
-412 4657 l
-S
-307 4692 m
-312 4697 l
-307 4702 l
-302 4697 l
-307 4692 l
-S
-342 4697 m
-412 4697 l
-S
-342 4737 m
-412 4737 l
-S
-362 4737 m
-347 4752 l
-342 4762 l
-342 4777 l
-347 4787 l
-362 4792 l
-412 4792 l
-S
-342 4853 m
-347 4843 l
-357 4833 l
-372 4827 l
-382 4827 l
-397 4833 l
-407 4843 l
-412 4853 l
-412 4868 l
-407 4878 l
-397 4888 l
-382 4893 l
-372 4893 l
-357 4888 l
-347 4878 l
-342 4868 l
-342 4853 l
-S
-342 4923 m
-412 4978 l
-S
-342 4978 m
-412 4923 l
-S
-307 5133 m
-387 5133 l
-402 5128 l
-407 5123 l
-412 5113 l
-412 5103 l
-407 5093 l
-402 5088 l
-387 5083 l
-377 5083 l
-S
-332 5173 m
-327 5173 l
-317 5178 l
-312 5183 l
-307 5193 l
-307 5213 l
-312 5223 l
-317 5228 l
-327 5233 l
-337 5233 l
-347 5228 l
-362 5218 l
-412 5168 l
-412 5238 l
-S
-307 5299 m
-312 5284 l
-327 5274 l
-352 5269 l
-367 5269 l
-392 5274 l
-407 5284 l
-412 5299 l
-412 5309 l
-407 5324 l
-392 5334 l
-367 5339 l
-352 5339 l
-327 5334 l
-312 5324 l
-307 5309 l
-307 5299 l
-S
-307 5399 m
-312 5384 l
-327 5374 l
-352 5369 l
-367 5369 l
-392 5374 l
-407 5384 l
-412 5399 l
-412 5409 l
-407 5424 l
-392 5434 l
-367 5439 l
-352 5439 l
-327 5434 l
-312 5424 l
-307 5409 l
-307 5399 l
-S
-307 5499 m
-312 5484 l
-327 5474 l
-352 5469 l
-367 5469 l
-392 5474 l
-407 5484 l
-412 5499 l
-412 5509 l
-407 5524 l
-392 5534 l
-367 5539 l
-352 5539 l
-327 5534 l
-312 5524 l
-307 5509 l
-307 5499 l
-S
-402 5579 m
-407 5574 l
-412 5579 l
-407 5584 l
-402 5579 l
-S
-307 5649 m
-312 5634 l
-327 5624 l
-352 5619 l
-367 5619 l
-392 5624 l
-407 5634 l
-412 5649 l
-412 5659 l
-407 5675 l
-392 5685 l
-367 5690 l
-352 5690 l
-327 5685 l
-312 5675 l
-307 5659 l
-307 5649 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/frontb_bw.eps b/ast-5.3-1/sun211_figures/frontb_bw.eps
deleted file mode 100644
index f7883ed..0000000
--- a/ast-5.3-1/sun211_figures/frontb_bw.eps
+++ /dev/null
@@ -1,21509 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 30 189 477 603
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:07:11
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3111 3017 l
-3112 3018 l
-3114 3019 l
-3116 3020 l
-3117 3021 l
-3119 3021 l
-3120 3022 l
-3142 3035 l
-3164 3048 l
-3186 3061 l
-3207 3075 l
-3229 3089 l
-3250 3103 l
-3270 3117 l
-3291 3132 l
-3311 3147 l
-3331 3163 l
-3351 3179 l
-3371 3195 l
-3390 3211 l
-3409 3228 l
-3428 3245 l
-3447 3262 l
-3465 3280 l
-3483 3297 l
-3501 3315 l
-3518 3334 l
-3536 3353 l
-3553 3371 l
-3569 3391 l
-3586 3410 l
-3602 3430 l
-3617 3450 l
-3633 3470 l
-3648 3490 l
-3663 3511 l
-3677 3532 l
-3691 3553 l
-3705 3574 l
-3719 3596 l
-3732 3618 l
-3745 3640 l
-3757 3662 l
-3769 3684 l
-3781 3707 l
-3792 3730 l
-3803 3753 l
-3814 3776 l
-3824 3800 l
-3834 3823 l
-3843 3847 l
-3852 3871 l
-3861 3895 l
-3869 3919 l
-3877 3944 l
-3884 3968 l
-3891 3993 l
-3898 4018 l
-3904 4043 l
-3910 4068 l
-3915 4094 l
-3920 4119 l
-3924 4144 l
-3928 4170 l
-3932 4196 l
-3935 4222 l
-3937 4248 l
-3939 4274 l
-3941 4300 l
-3942 4326 l
-3942 4352 l
-3943 4379 l
-3942 4405 l
-3941 4431 l
-3940 4458 l
-3938 4484 l
-3935 4511 l
-3932 4538 l
-3929 4564 l
-3925 4591 l
-3920 4617 l
-3915 4644 l
-3909 4671 l
-3903 4697 l
-3896 4724 l
-3888 4750 l
-3880 4776 l
-3872 4803 l
-3862 4829 l
-3852 4855 l
-3842 4881 l
-3831 4907 l
-3819 4933 l
-3807 4959 l
-3794 4984 l
-3780 5010 l
-3766 5035 l
-3751 5060 l
-3736 5085 l
-3720 5110 l
-3703 5134 l
-3685 5159 l
-3667 5183 l
-3648 5206 l
-3629 5230 l
-3609 5253 l
-3588 5276 l
-3566 5298 l
-3544 5320 l
-3521 5342 l
-3497 5363 l
-3473 5384 l
-3448 5405 l
-3422 5425 l
-3396 5444 l
-3369 5463 l
-3341 5482 l
-3312 5500 l
-3283 5517 l
-3254 5534 l
-3223 5551 l
-3192 5566 l
-3160 5581 l
-3128 5595 l
-3095 5609 l
-3061 5622 l
-3026 5634 l
-2992 5645 l
-2956 5656 l
-2920 5665 l
-2883 5674 l
-2846 5682 l
-2808 5689 l
-2770 5695 l
-2732 5700 l
-2693 5704 l
-2653 5707 l
-2613 5709 l
-2573 5710 l
-2533 5710 l
-2492 5709 l
-2451 5707 l
-2410 5703 l
-2368 5699 l
-2327 5693 l
-2285 5686 l
-2243 5678 l
-2202 5669 l
-2160 5658 l
-2119 5647 l
-2077 5634 l
-2036 5620 l
-1995 5605 l
-1992 5603 l
-1989 5602 l
-1986 5601 l
-1984 5600 l
-1981 5599 l
-1978 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3110 3018 l
-3110 3019 l
-3111 3021 l
-3112 3022 l
-3112 3023 l
-3113 3025 l
-3113 3026 l
-3122 3046 l
-3129 3067 l
-3137 3087 l
-3145 3108 l
-3152 3129 l
-3159 3150 l
-3166 3171 l
-3172 3192 l
-3179 3213 l
-3185 3234 l
-3191 3256 l
-3196 3277 l
-3202 3299 l
-3207 3320 l
-3212 3342 l
-3217 3364 l
-3222 3386 l
-3226 3408 l
-3230 3430 l
-3234 3452 l
-3238 3475 l
-3242 3497 l
-3245 3519 l
-3248 3542 l
-3251 3564 l
-3254 3587 l
-3257 3610 l
-3259 3632 l
-3261 3655 l
-3263 3678 l
-3265 3700 l
-3266 3723 l
-3268 3746 l
-3269 3769 l
-3270 3792 l
-3270 3815 l
-3271 3838 l
-3271 3861 l
-3271 3884 l
-3271 3907 l
-3271 3929 l
-3270 3952 l
-3269 3975 l
-3268 3998 l
-3267 4021 l
-3266 4044 l
-3264 4067 l
-3263 4090 l
-3261 4113 l
-3259 4136 l
-3256 4158 l
-3254 4181 l
-3251 4204 l
-3248 4227 l
-3245 4249 l
-3242 4272 l
-3238 4294 l
-3234 4317 l
-3230 4339 l
-3226 4362 l
-3222 4384 l
-3217 4406 l
-3212 4429 l
-3207 4451 l
-3202 4473 l
-3197 4495 l
-3191 4517 l
-3186 4538 l
-3180 4560 l
-3173 4582 l
-3167 4603 l
-3160 4625 l
-3154 4646 l
-3146 4667 l
-3139 4688 l
-3132 4709 l
-3124 4730 l
-3116 4751 l
-3108 4771 l
-3100 4792 l
-3092 4812 l
-3083 4832 l
-3074 4852 l
-3065 4872 l
-3055 4892 l
-3046 4912 l
-3036 4931 l
-3026 4950 l
-3016 4970 l
-3005 4989 l
-2995 5007 l
-2984 5026 l
-2973 5044 l
-2962 5063 l
-2950 5081 l
-2938 5099 l
-2926 5116 l
-2914 5134 l
-2902 5151 l
-2889 5168 l
-2876 5185 l
-2863 5202 l
-2849 5218 l
-2836 5234 l
-2822 5250 l
-2808 5266 l
-2793 5281 l
-2778 5296 l
-2764 5311 l
-2748 5326 l
-2733 5340 l
-2717 5355 l
-2701 5368 l
-2685 5382 l
-2668 5395 l
-2652 5408 l
-2634 5421 l
-2617 5433 l
-2599 5445 l
-2581 5457 l
-2563 5468 l
-2544 5479 l
-2526 5489 l
-2506 5499 l
-2487 5509 l
-2467 5519 l
-2447 5528 l
-2426 5536 l
-2405 5544 l
-2384 5552 l
-2362 5559 l
-2340 5566 l
-2318 5572 l
-2295 5578 l
-2272 5583 l
-2248 5587 l
-2224 5591 l
-2200 5595 l
-2175 5598 l
-2150 5600 l
-2124 5601 l
-2098 5602 l
-2072 5602 l
-2045 5602 l
-2017 5600 l
-1989 5598 l
-1987 5598 l
-1985 5598 l
-1983 5597 l
-1981 5597 l
-1979 5597 l
-1977 5597 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3109 3017 l
-3108 3019 l
-3107 3020 l
-3106 3021 l
-3106 3022 l
-3105 3023 l
-3104 3024 l
-3094 3041 l
-3083 3057 l
-3073 3074 l
-3062 3090 l
-3052 3107 l
-3041 3124 l
-3031 3141 l
-3020 3158 l
-3010 3175 l
-2999 3192 l
-2989 3210 l
-2978 3227 l
-2968 3245 l
-2957 3263 l
-2947 3280 l
-2936 3298 l
-2926 3316 l
-2915 3334 l
-2905 3352 l
-2894 3371 l
-2884 3389 l
-2873 3407 l
-2863 3426 l
-2852 3444 l
-2841 3463 l
-2831 3482 l
-2820 3500 l
-2810 3519 l
-2799 3538 l
-2789 3557 l
-2779 3576 l
-2768 3595 l
-2758 3614 l
-2747 3633 l
-2737 3653 l
-2726 3672 l
-2716 3691 l
-2706 3710 l
-2695 3730 l
-2685 3749 l
-2675 3769 l
-2664 3788 l
-2654 3808 l
-2644 3827 l
-2634 3847 l
-2624 3866 l
-2614 3886 l
-2603 3906 l
-2593 3925 l
-2583 3945 l
-2573 3965 l
-2563 3984 l
-2553 4004 l
-2544 4024 l
-2534 4043 l
-2524 4063 l
-2514 4083 l
-2504 4103 l
-2495 4122 l
-2485 4142 l
-2475 4162 l
-2466 4181 l
-2456 4201 l
-2447 4221 l
-2438 4240 l
-2428 4260 l
-2419 4279 l
-2410 4299 l
-2400 4319 l
-2391 4338 l
-2382 4357 l
-2373 4377 l
-2364 4396 l
-2355 4416 l
-2347 4435 l
-2338 4454 l
-2329 4473 l
-2321 4493 l
-2312 4512 l
-2304 4531 l
-2295 4550 l
-2287 4569 l
-2278 4588 l
-2270 4607 l
-2262 4625 l
-2254 4644 l
-2246 4663 l
-2238 4681 l
-2230 4700 l
-2223 4718 l
-2215 4737 l
-2208 4755 l
-2200 4773 l
-2193 4792 l
-2185 4810 l
-2178 4828 l
-2171 4846 l
-2164 4863 l
-2157 4881 l
-2150 4899 l
-2144 4916 l
-2137 4934 l
-2130 4951 l
-2124 4969 l
-2118 4986 l
-2111 5003 l
-2105 5020 l
-2099 5037 l
-2093 5053 l
-2088 5070 l
-2082 5087 l
-2076 5103 l
-2071 5119 l
-2066 5136 l
-2061 5152 l
-2055 5168 l
-2051 5184 l
-2046 5200 l
-2041 5215 l
-2036 5231 l
-2032 5246 l
-2028 5261 l
-2024 5277 l
-2020 5292 l
-2016 5307 l
-2012 5321 l
-2009 5336 l
-2005 5351 l
-2002 5365 l
-1999 5379 l
-1996 5393 l
-1993 5408 l
-1991 5421 l
-1988 5435 l
-1986 5449 l
-1984 5462 l
-1982 5476 l
-1980 5489 l
-1979 5502 l
-1978 5515 l
-1977 5528 l
-1976 5541 l
-1975 5553 l
-1975 5566 l
-1975 5578 l
-1975 5590 l
-1975 5591 l
-1975 5592 l
-1975 5593 l
-1975 5594 l
-1975 5595 l
-1975 5596 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3108 3016 l
-3106 3017 l
-3104 3017 l
-3103 3017 l
-3101 3017 l
-3099 3017 l
-3098 3018 l
-3075 3021 l
-3052 3024 l
-3029 3028 l
-3006 3032 l
-2983 3036 l
-2960 3041 l
-2937 3046 l
-2914 3051 l
-2892 3057 l
-2869 3063 l
-2846 3069 l
-2824 3075 l
-2801 3082 l
-2779 3089 l
-2757 3096 l
-2735 3104 l
-2712 3112 l
-2690 3120 l
-2668 3128 l
-2646 3137 l
-2625 3146 l
-2603 3155 l
-2581 3164 l
-2560 3174 l
-2538 3184 l
-2517 3194 l
-2496 3205 l
-2475 3216 l
-2454 3227 l
-2433 3238 l
-2412 3249 l
-2392 3261 l
-2371 3273 l
-2351 3285 l
-2331 3297 l
-2311 3310 l
-2291 3323 l
-2271 3336 l
-2252 3349 l
-2232 3363 l
-2213 3377 l
-2194 3391 l
-2175 3405 l
-2156 3419 l
-2138 3434 l
-2119 3449 l
-2101 3464 l
-2083 3479 l
-2065 3495 l
-2047 3510 l
-2030 3526 l
-2012 3542 l
-1995 3559 l
-1978 3575 l
-1962 3592 l
-1945 3609 l
-1929 3626 l
-1913 3643 l
-1897 3660 l
-1881 3678 l
-1866 3695 l
-1851 3713 l
-1836 3731 l
-1821 3750 l
-1807 3768 l
-1793 3787 l
-1779 3806 l
-1765 3824 l
-1752 3844 l
-1738 3863 l
-1725 3882 l
-1713 3902 l
-1700 3922 l
-1688 3941 l
-1677 3962 l
-1665 3982 l
-1654 4002 l
-1643 4022 l
-1632 4043 l
-1622 4064 l
-1612 4085 l
-1602 4106 l
-1593 4127 l
-1584 4148 l
-1575 4170 l
-1566 4191 l
-1558 4213 l
-1551 4235 l
-1543 4257 l
-1536 4279 l
-1530 4301 l
-1523 4323 l
-1517 4345 l
-1512 4368 l
-1507 4391 l
-1502 4413 l
-1497 4436 l
-1493 4459 l
-1490 4482 l
-1487 4505 l
-1484 4528 l
-1481 4551 l
-1480 4575 l
-1478 4598 l
-1477 4622 l
-1477 4645 l
-1477 4669 l
-1477 4693 l
-1478 4717 l
-1479 4741 l
-1481 4764 l
-1483 4788 l
-1486 4812 l
-1490 4837 l
-1494 4861 l
-1498 4885 l
-1504 4909 l
-1509 4933 l
-1515 4958 l
-1522 4982 l
-1530 5006 l
-1538 5030 l
-1547 5055 l
-1556 5079 l
-1566 5103 l
-1577 5127 l
-1588 5152 l
-1601 5176 l
-1613 5200 l
-1627 5224 l
-1641 5248 l
-1657 5272 l
-1673 5295 l
-1689 5319 l
-1707 5343 l
-1725 5366 l
-1745 5389 l
-1765 5412 l
-1786 5435 l
-1808 5457 l
-1831 5480 l
-1855 5502 l
-1880 5523 l
-1906 5545 l
-1933 5566 l
-1960 5586 l
-1962 5588 l
-1965 5589 l
-1967 5591 l
-1969 5592 l
-1971 5594 l
-1973 5595 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3108 3015 l
-3106 3014 l
-3104 3014 l
-3103 3013 l
-3101 3012 l
-3100 3011 l
-3098 3010 l
-3076 2998 l
-3053 2987 l
-3030 2975 l
-3007 2965 l
-2984 2954 l
-2961 2944 l
-2938 2934 l
-2914 2925 l
-2890 2916 l
-2866 2907 l
-2842 2899 l
-2818 2891 l
-2794 2883 l
-2769 2876 l
-2745 2869 l
-2720 2863 l
-2695 2857 l
-2671 2852 l
-2646 2846 l
-2620 2842 l
-2595 2837 l
-2570 2833 l
-2545 2830 l
-2519 2827 l
-2494 2824 l
-2468 2822 l
-2443 2820 l
-2417 2819 l
-2392 2818 l
-2366 2817 l
-2340 2817 l
-2315 2818 l
-2289 2818 l
-2263 2820 l
-2237 2821 l
-2211 2824 l
-2186 2826 l
-2160 2829 l
-2134 2833 l
-2109 2837 l
-2083 2842 l
-2057 2847 l
-2032 2852 l
-2006 2858 l
-1981 2865 l
-1955 2872 l
-1930 2879 l
-1905 2887 l
-1880 2896 l
-1855 2905 l
-1830 2914 l
-1805 2925 l
-1780 2935 l
-1756 2946 l
-1732 2958 l
-1707 2970 l
-1683 2983 l
-1660 2996 l
-1636 3010 l
-1612 3024 l
-1589 3039 l
-1566 3054 l
-1543 3070 l
-1521 3087 l
-1499 3104 l
-1477 3122 l
-1455 3140 l
-1433 3159 l
-1412 3178 l
-1391 3198 l
-1371 3218 l
-1351 3239 l
-1331 3261 l
-1312 3283 l
-1293 3306 l
-1274 3329 l
-1256 3353 l
-1238 3378 l
-1221 3403 l
-1204 3429 l
-1188 3455 l
-1172 3482 l
-1156 3509 l
-1142 3537 l
-1128 3565 l
-1114 3594 l
-1101 3624 l
-1089 3654 l
-1077 3685 l
-1066 3716 l
-1055 3748 l
-1046 3780 l
-1037 3812 l
-1028 3846 l
-1021 3879 l
-1014 3914 l
-1008 3948 l
-1003 3983 l
-999 4019 l
-996 4055 l
-993 4091 l
-992 4128 l
-991 4165 l
-992 4202 l
-993 4239 l
-996 4277 l
-999 4315 l
-1003 4354 l
-1009 4392 l
-1015 4431 l
-1023 4470 l
-1032 4509 l
-1041 4548 l
-1052 4587 l
-1065 4625 l
-1078 4664 l
-1092 4703 l
-1108 4742 l
-1124 4780 l
-1142 4818 l
-1161 4856 l
-1181 4894 l
-1202 4931 l
-1225 4968 l
-1248 5004 l
-1273 5040 l
-1298 5075 l
-1325 5110 l
-1353 5144 l
-1382 5178 l
-1412 5210 l
-1442 5242 l
-1474 5273 l
-1507 5304 l
-1540 5333 l
-1575 5361 l
-1610 5389 l
-1646 5415 l
-1682 5441 l
-1719 5465 l
-1757 5488 l
-1796 5511 l
-1835 5532 l
-1874 5552 l
-1914 5571 l
-1955 5588 l
-1957 5589 l
-1960 5591 l
-1963 5592 l
-1966 5593 l
-1969 5594 l
-1972 5595 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3109 3015 l
-3108 3013 l
-3107 3012 l
-3107 3010 l
-3106 3009 l
-3106 3008 l
-3105 3006 l
-3096 2986 l
-3088 2966 l
-3079 2947 l
-3069 2927 l
-3060 2908 l
-3050 2889 l
-3040 2870 l
-3030 2851 l
-3019 2832 l
-3008 2814 l
-2997 2796 l
-2986 2778 l
-2975 2760 l
-2963 2742 l
-2951 2725 l
-2939 2707 l
-2926 2690 l
-2913 2674 l
-2900 2657 l
-2887 2641 l
-2873 2624 l
-2859 2609 l
-2845 2593 l
-2831 2578 l
-2816 2562 l
-2801 2548 l
-2786 2533 l
-2770 2519 l
-2754 2505 l
-2738 2491 l
-2721 2478 l
-2704 2464 l
-2687 2452 l
-2669 2439 l
-2651 2427 l
-2633 2415 l
-2615 2404 l
-2596 2393 l
-2576 2382 l
-2557 2372 l
-2537 2362 l
-2516 2353 l
-2495 2344 l
-2474 2335 l
-2452 2327 l
-2430 2319 l
-2408 2312 l
-2385 2306 l
-2361 2300 l
-2337 2294 l
-2313 2289 l
-2288 2285 l
-2263 2281 l
-2237 2278 l
-2211 2275 l
-2184 2274 l
-2157 2273 l
-2129 2272 l
-2101 2273 l
-2072 2274 l
-2042 2277 l
-2012 2280 l
-1981 2284 l
-1950 2289 l
-1918 2295 l
-1886 2302 l
-1853 2311 l
-1819 2320 l
-1785 2331 l
-1750 2343 l
-1714 2357 l
-1679 2372 l
-1642 2388 l
-1605 2407 l
-1567 2426 l
-1529 2448 l
-1491 2472 l
-1452 2497 l
-1413 2525 l
-1373 2555 l
-1334 2587 l
-1294 2621 l
-1254 2658 l
-1214 2697 l
-1175 2738 l
-1136 2783 l
-1097 2830 l
-1060 2879 l
-1023 2932 l
-987 2987 l
-952 3045 l
-919 3105 l
-888 3169 l
-859 3234 l
-831 3302 l
-829 3307 l
-828 3312 l
-826 3317 l
-824 3322 l
-822 3327 l
-820 3332 l
-819 3337 l
-817 3342 l
-815 3347 l
-813 3352 l
-811 3357 l
-810 3362 l
-808 3367 l
-806 3373 l
-805 3378 l
-803 3383 l
-801 3388 l
-800 3393 l
-798 3398 l
-796 3403 l
-795 3408 l
-793 3414 l
-792 3419 l
-790 3424 l
-789 3429 l
-787 3434 l
-786 3440 l
-784 3445 l
-783 3450 l
-781 3455 l
-780 3461 l
-778 3466 l
-777 3471 l
-775 3476 l
-774 3482 l
-773 3487 l
-771 3492 l
-770 3498 l
-768 3503 l
-767 3508 l
-766 3514 l
-764 3519 l
-763 3524 l
-762 3530 l
-761 3535 l
-759 3540 l
-758 3546 l
-757 3551 l
-756 3557 l
-755 3562 l
-753 3567 l
-752 3573 l
-751 3578 l
-750 3584 l
-749 3589 l
-748 3595 l
-747 3600 l
-746 3606 l
-745 3611 l
-744 3616 l
-743 3622 l
-742 3627 l
-741 3633 l
-740 3638 l
-739 3644 l
-738 3649 l
-737 3655 l
-736 3660 l
-735 3666 l
-734 3672 l
-733 3677 l
-733 3683 l
-732 3688 l
-731 3694 l
-730 3699 l
-729 3705 l
-729 3710 l
-728 3716 l
-727 3722 l
-727 3727 l
-726 3733 l
-725 3738 l
-725 3744 l
-724 3750 l
-723 3755 l
-723 3761 l
-722 3766 l
-722 3772 l
-721 3778 l
-720 3783 l
-720 3789 l
-719 3794 l
-719 3800 l
-719 3806 l
-718 3811 l
-S
-718 3811 m
-718 3817 l
-717 3823 l
-717 3828 l
-716 3834 l
-716 3839 l
-716 3845 l
-715 3851 l
-715 3856 l
-715 3862 l
-715 3868 l
-714 3873 l
-714 3879 l
-714 3885 l
-714 3890 l
-713 3896 l
-713 3902 l
-713 3907 l
-713 3913 l
-713 3918 l
-713 3924 l
-713 3930 l
-713 3935 l
-713 3941 l
-713 3947 l
-713 3952 l
-713 3958 l
-713 3964 l
-713 3969 l
-713 3975 l
-713 3981 l
-713 3986 l
-713 3992 l
-713 3997 l
-713 4003 l
-713 4009 l
-713 4014 l
-714 4020 l
-714 4026 l
-714 4031 l
-714 4037 l
-715 4042 l
-715 4048 l
-715 4054 l
-715 4059 l
-716 4065 l
-716 4071 l
-716 4076 l
-717 4082 l
-717 4087 l
-718 4093 l
-718 4099 l
-718 4104 l
-719 4110 l
-719 4115 l
-720 4121 l
-720 4126 l
-721 4132 l
-721 4137 l
-722 4143 l
-723 4149 l
-723 4154 l
-724 4160 l
-724 4165 l
-725 4171 l
-726 4176 l
-726 4182 l
-727 4187 l
-728 4193 l
-728 4198 l
-729 4204 l
-730 4209 l
-731 4215 l
-731 4220 l
-732 4226 l
-733 4231 l
-734 4237 l
-735 4242 l
-736 4248 l
-737 4253 l
-737 4258 l
-738 4264 l
-739 4269 l
-740 4275 l
-741 4280 l
-742 4285 l
-743 4291 l
-744 4296 l
-745 4302 l
-746 4307 l
-747 4312 l
-748 4318 l
-749 4323 l
-750 4328 l
-751 4334 l
-753 4339 l
-754 4344 l
-755 4350 l
-756 4355 l
-757 4360 l
-758 4365 l
-760 4371 l
-761 4376 l
-762 4381 l
-763 4386 l
-765 4392 l
-766 4397 l
-767 4402 l
-768 4407 l
-770 4412 l
-771 4418 l
-772 4423 l
-774 4428 l
-775 4433 l
-777 4438 l
-778 4443 l
-799 4514 l
-822 4583 l
-848 4649 l
-875 4713 l
-905 4774 l
-936 4833 l
-968 4889 l
-1001 4943 l
-1036 4994 l
-1071 5042 l
-1107 5088 l
-1143 5131 l
-1180 5171 l
-1217 5210 l
-1254 5245 l
-1291 5279 l
-1328 5310 l
-1365 5340 l
-1401 5367 l
-1438 5392 l
-1474 5416 l
-1510 5438 l
-1545 5458 l
-1580 5476 l
-1614 5493 l
-1648 5508 l
-1682 5522 l
-1715 5535 l
-1747 5546 l
-1779 5556 l
-1811 5565 l
-1842 5573 l
-1872 5580 l
-1902 5586 l
-1932 5591 l
-1961 5595 l
-1963 5595 l
-1965 5595 l
-1967 5596 l
-1969 5596 l
-1971 5596 l
-1973 5596 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3110 3015 l
-3111 3014 l
-3111 3013 l
-3112 3012 l
-3113 3010 l
-3114 3009 l
-3114 3008 l
-3125 2992 l
-3135 2976 l
-3146 2960 l
-3156 2945 l
-3166 2929 l
-3176 2914 l
-3187 2899 l
-3197 2884 l
-3207 2869 l
-3217 2854 l
-3228 2839 l
-3238 2825 l
-3248 2811 l
-3258 2796 l
-3268 2782 l
-3278 2769 l
-3288 2755 l
-3298 2741 l
-3308 2728 l
-3318 2715 l
-3328 2702 l
-3338 2689 l
-3348 2676 l
-3358 2664 l
-3368 2652 l
-3378 2639 l
-3388 2628 l
-3398 2616 l
-3408 2604 l
-3417 2593 l
-3427 2582 l
-3437 2571 l
-3447 2560 l
-3457 2550 l
-3466 2539 l
-3476 2529 l
-3486 2519 l
-3496 2510 l
-3506 2500 l
-3515 2491 l
-3525 2482 l
-3535 2473 l
-3545 2465 l
-3555 2457 l
-3565 2449 l
-3574 2441 l
-3584 2434 l
-3594 2427 l
-3604 2420 l
-3614 2413 l
-3625 2407 l
-3635 2401 l
-3645 2395 l
-3656 2390 l
-3666 2385 l
-3677 2380 l
-3687 2376 l
-3698 2372 l
-3709 2368 l
-3721 2365 l
-3732 2362 l
-3744 2360 l
-3755 2358 l
-3768 2357 l
-3780 2356 l
-3793 2356 l
-3806 2356 l
-3819 2357 l
-3833 2359 l
-3848 2361 l
-3863 2364 l
-3878 2368 l
-3895 2373 l
-3912 2379 l
-3930 2386 l
-3949 2395 l
-3969 2405 l
-3991 2416 l
-4014 2430 l
-4038 2446 l
-4065 2465 l
-4093 2486 l
-4125 2511 l
-4159 2541 l
-4196 2576 l
-4238 2618 l
-4283 2669 l
-4287 2673 l
-4290 2677 l
-4294 2681 l
-4297 2685 l
-4301 2689 l
-4304 2693 l
-4308 2698 l
-4312 2702 l
-4315 2706 l
-4319 2711 l
-4323 2716 l
-4326 2720 l
-4330 2725 l
-4334 2730 l
-4338 2734 l
-4342 2739 l
-4346 2744 l
-4349 2749 l
-4353 2755 l
-4357 2760 l
-4361 2765 l
-4365 2770 l
-4369 2776 l
-4373 2781 l
-4378 2787 l
-4382 2793 l
-4386 2798 l
-4390 2804 l
-4394 2810 l
-4399 2816 l
-4403 2822 l
-4407 2829 l
-4411 2835 l
-4416 2841 l
-4420 2848 l
-4425 2855 l
-4429 2861 l
-4434 2868 l
-4438 2875 l
-4443 2882 l
-4447 2889 l
-4452 2897 l
-4456 2904 l
-4461 2912 l
-4466 2919 l
-4470 2927 l
-4475 2935 l
-4480 2943 l
-4485 2951 l
-4489 2960 l
-4494 2968 l
-4499 2977 l
-4504 2986 l
-4509 2994 l
-4514 3003 l
-4519 3013 l
-4524 3022 l
-4529 3032 l
-4534 3041 l
-4539 3051 l
-4544 3061 l
-4549 3071 l
-4554 3082 l
-4559 3092 l
-4564 3103 l
-4569 3114 l
-4574 3125 l
-4579 3136 l
-4584 3148 l
-4589 3159 l
-4594 3171 l
-4599 3183 l
-4605 3196 l
-4610 3208 l
-4615 3221 l
-4620 3234 l
-4625 3247 l
-4630 3261 l
-4635 3274 l
-4640 3288 l
-4645 3302 l
-4649 3317 l
-4654 3331 l
-4659 3346 l
-4664 3362 l
-4669 3377 l
-4673 3393 l
-4678 3409 l
-4682 3425 l
-4687 3441 l
-4691 3458 l
-4695 3475 l
-4700 3493 l
-4704 3510 l
-4708 3528 l
-4712 3547 l
-4715 3565 l
-4719 3584 l
-4723 3603 l
-4726 3623 l
-4729 3643 l
-4732 3663 l
-4735 3683 l
-S
-4735 3683 m
-4738 3704 l
-4741 3725 l
-4743 3747 l
-4745 3768 l
-4747 3790 l
-4749 3813 l
-4751 3835 l
-4752 3858 l
-4753 3881 l
-4754 3905 l
-4754 3929 l
-4755 3953 l
-4755 3978 l
-4754 4002 l
-4754 4027 l
-4753 4053 l
-4751 4078 l
-4750 4104 l
-4748 4130 l
-4745 4157 l
-4743 4183 l
-4740 4210 l
-4736 4237 l
-4732 4264 l
-4728 4292 l
-4723 4319 l
-4718 4347 l
-4713 4375 l
-4707 4403 l
-4701 4431 l
-4694 4459 l
-4686 4488 l
-4679 4516 l
-4671 4545 l
-4662 4573 l
-4653 4602 l
-4643 4630 l
-4633 4659 l
-4623 4687 l
-4612 4716 l
-4600 4744 l
-4589 4772 l
-4576 4800 l
-4564 4828 l
-4550 4856 l
-4537 4883 l
-4523 4911 l
-4509 4938 l
-4494 4965 l
-4479 4992 l
-4463 5018 l
-4447 5044 l
-4431 5070 l
-4414 5095 l
-4397 5121 l
-4380 5146 l
-4363 5170 l
-4345 5194 l
-4327 5218 l
-4309 5241 l
-4290 5264 l
-4271 5287 l
-4252 5309 l
-4233 5331 l
-4214 5352 l
-4195 5373 l
-4175 5393 l
-4155 5413 l
-4136 5433 l
-4116 5452 l
-4096 5471 l
-4076 5489 l
-4056 5507 l
-4036 5524 l
-4016 5541 l
-3996 5558 l
-3976 5574 l
-3956 5589 l
-3936 5604 l
-3916 5619 l
-3896 5634 l
-3876 5648 l
-3856 5661 l
-3837 5674 l
-3817 5687 l
-3798 5700 l
-3778 5712 l
-3759 5723 l
-3740 5735 l
-3721 5746 l
-3702 5756 l
-3684 5767 l
-3665 5777 l
-3647 5786 l
-3629 5795 l
-3611 5804 l
-3593 5813 l
-3575 5822 l
-3558 5830 l
-3540 5838 l
-3523 5845 l
-3506 5852 l
-3489 5859 l
-3473 5866 l
-3456 5873 l
-3440 5879 l
-3424 5885 l
-3408 5891 l
-3392 5897 l
-3377 5902 l
-3362 5907 l
-3346 5912 l
-3331 5917 l
-3317 5922 l
-3302 5926 l
-3288 5931 l
-3273 5935 l
-3259 5939 l
-3246 5943 l
-3232 5946 l
-3218 5950 l
-3205 5953 l
-3192 5956 l
-3179 5960 l
-3166 5963 l
-3153 5965 l
-3141 5968 l
-3128 5971 l
-3116 5973 l
-3104 5976 l
-3092 5978 l
-3081 5980 l
-3069 5982 l
-3058 5984 l
-3046 5986 l
-3035 5988 l
-3024 5989 l
-3014 5991 l
-3003 5993 l
-2992 5994 l
-2982 5995 l
-2972 5997 l
-2962 5998 l
-2952 5999 l
-2942 6000 l
-2932 6001 l
-2923 6002 l
-2913 6003 l
-2904 6004 l
-2895 6005 l
-2885 6006 l
-2876 6006 l
-2868 6007 l
-2859 6008 l
-2850 6008 l
-2842 6009 l
-2833 6009 l
-2825 6009 l
-2817 6010 l
-2809 6010 l
-2801 6010 l
-2793 6011 l
-2785 6011 l
-2777 6011 l
-2770 6011 l
-2762 6011 l
-2755 6011 l
-2747 6012 l
-2740 6012 l
-2733 6012 l
-2726 6012 l
-2719 6011 l
-2712 6011 l
-2705 6011 l
-2699 6011 l
-2692 6011 l
-2685 6011 l
-2679 6011 l
-2673 6010 l
-2666 6010 l
-2660 6010 l
-2654 6010 l
-2648 6009 l
-2642 6009 l
-2636 6009 l
-2630 6008 l
-2624 6008 l
-2618 6008 l
-2613 6007 l
-2607 6007 l
-2601 6006 l
-2596 6006 l
-2590 6006 l
-2585 6005 l
-2580 6005 l
-2575 6004 l
-2569 6004 l
-2564 6003 l
-2559 6003 l
-S
-2559 6003 m
-2554 6002 l
-2549 6002 l
-2544 6001 l
-2539 6001 l
-2535 6000 l
-2530 5999 l
-2468 5991 l
-2415 5981 l
-2369 5971 l
-2328 5960 l
-2292 5950 l
-2260 5939 l
-2232 5928 l
-2206 5918 l
-2184 5907 l
-2163 5896 l
-2144 5886 l
-2127 5875 l
-2112 5865 l
-2098 5855 l
-2085 5844 l
-2073 5834 l
-2063 5823 l
-2053 5813 l
-2044 5803 l
-2036 5792 l
-2028 5782 l
-2021 5771 l
-2015 5761 l
-2010 5750 l
-2004 5739 l
-2000 5728 l
-1996 5717 l
-1992 5706 l
-1989 5695 l
-1986 5684 l
-1983 5673 l
-1981 5661 l
-1979 5650 l
-1978 5638 l
-1977 5626 l
-1976 5615 l
-1975 5603 l
-1975 5602 l
-1975 5601 l
-1975 5600 l
-1975 5599 l
-1975 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3111 3016 l
-3113 3016 l
-3114 3016 l
-3116 3015 l
-3117 3015 l
-3119 3015 l
-3121 3015 l
-3144 3012 l
-3167 3010 l
-3190 3009 l
-3213 3007 l
-3236 3006 l
-3260 3005 l
-3283 3005 l
-3306 3005 l
-3329 3005 l
-3352 3006 l
-3375 3007 l
-3398 3008 l
-3421 3010 l
-3444 3012 l
-3467 3014 l
-3490 3017 l
-3513 3021 l
-3536 3024 l
-3559 3028 l
-3582 3033 l
-3604 3038 l
-3627 3043 l
-3650 3049 l
-3672 3055 l
-3695 3061 l
-3717 3068 l
-3739 3076 l
-3761 3084 l
-3784 3092 l
-3806 3101 l
-3827 3110 l
-3849 3120 l
-3871 3130 l
-3892 3141 l
-3913 3152 l
-3935 3163 l
-3956 3176 l
-3977 3188 l
-3997 3201 l
-4018 3215 l
-4038 3229 l
-4058 3244 l
-4078 3260 l
-4098 3276 l
-4117 3292 l
-4136 3309 l
-4155 3327 l
-4174 3345 l
-4193 3364 l
-4211 3384 l
-4228 3404 l
-4246 3425 l
-4263 3446 l
-4280 3469 l
-4296 3491 l
-4312 3515 l
-4328 3539 l
-4343 3564 l
-4358 3590 l
-4372 3616 l
-4386 3643 l
-4399 3671 l
-4412 3700 l
-4424 3729 l
-4435 3759 l
-4446 3790 l
-4456 3822 l
-4466 3855 l
-4475 3888 l
-4482 3922 l
-4490 3957 l
-4496 3993 l
-4501 4030 l
-4506 4067 l
-4509 4106 l
-4511 4145 l
-4513 4185 l
-4513 4225 l
-4512 4267 l
-4509 4309 l
-4506 4352 l
-4501 4395 l
-4494 4439 l
-4486 4484 l
-4477 4530 l
-4466 4575 l
-4454 4622 l
-4439 4669 l
-4423 4716 l
-4406 4763 l
-4386 4811 l
-4365 4858 l
-4342 4906 l
-4317 4954 l
-4290 5001 l
-4261 5048 l
-4230 5095 l
-4197 5141 l
-4162 5187 l
-4126 5232 l
-4087 5276 l
-4047 5319 l
-4005 5361 l
-3962 5402 l
-3917 5441 l
-3870 5479 l
-3822 5515 l
-3773 5550 l
-3722 5583 l
-3670 5614 l
-3618 5644 l
-3565 5671 l
-3511 5697 l
-3456 5720 l
-3401 5742 l
-3346 5761 l
-3291 5779 l
-3235 5794 l
-3180 5808 l
-3125 5819 l
-3070 5829 l
-3016 5836 l
-2962 5842 l
-2909 5846 l
-2856 5848 l
-2804 5849 l
-2753 5848 l
-2703 5845 l
-2654 5841 l
-2606 5835 l
-2559 5828 l
-2513 5820 l
-2468 5811 l
-2425 5800 l
-2382 5789 l
-2341 5776 l
-2300 5762 l
-2261 5748 l
-2223 5733 l
-2187 5717 l
-2151 5700 l
-2116 5682 l
-2083 5664 l
-2051 5646 l
-2020 5626 l
-1989 5607 l
-1987 5605 l
-1985 5604 l
-1983 5602 l
-1981 5601 l
-1979 5599 l
-1977 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3586 3410 m
-3585 3411 l
-3584 3412 l
-3583 3413 l
-3571 3424 l
-3559 3435 l
-3547 3445 l
-3533 3455 l
-3520 3464 l
-3506 3473 l
-3491 3481 l
-3477 3489 l
-3462 3496 l
-3446 3502 l
-3430 3509 l
-3414 3514 l
-3398 3519 l
-3381 3524 l
-3364 3528 l
-3347 3531 l
-3330 3534 l
-3312 3537 l
-3294 3539 l
-3276 3541 l
-3258 3542 l
-3240 3542 l
-3222 3542 l
-3204 3542 l
-3185 3541 l
-3167 3539 l
-3148 3537 l
-3129 3535 l
-3111 3532 l
-3092 3529 l
-3074 3525 l
-3055 3521 l
-3037 3516 l
-3018 3511 l
-3000 3506 l
-2982 3500 l
-2963 3494 l
-2945 3487 l
-2927 3480 l
-2910 3472 l
-2892 3464 l
-2875 3456 l
-2858 3447 l
-2841 3438 l
-2824 3429 l
-2808 3419 l
-2791 3409 l
-2775 3398 l
-2760 3388 l
-2744 3377 l
-2729 3365 l
-2715 3353 l
-2700 3341 l
-2686 3329 l
-2673 3316 l
-2660 3303 l
-2647 3290 l
-2634 3277 l
-2622 3263 l
-2611 3249 l
-2600 3235 l
-2589 3220 l
-2579 3206 l
-2570 3191 l
-2561 3176 l
-2552 3161 l
-2544 3145 l
-2537 3130 l
-2530 3114 l
-2524 3098 l
-2518 3082 l
-2513 3066 l
-2509 3050 l
-2505 3034 l
-2502 3018 l
-2500 3002 l
-2498 2985 l
-2497 2969 l
-2496 2953 l
-2497 2937 l
-2498 2920 l
-2500 2904 l
-2502 2888 l
-2506 2872 l
-2510 2856 l
-2514 2841 l
-2520 2825 l
-2526 2810 l
-2534 2795 l
-2542 2780 l
-2550 2765 l
-2560 2751 l
-2570 2737 l
-2581 2723 l
-2593 2709 l
-2606 2697 l
-2620 2684 l
-2634 2672 l
-2649 2660 l
-2665 2649 l
-2681 2638 l
-2699 2628 l
-2717 2619 l
-2735 2610 l
-2755 2602 l
-2774 2594 l
-2795 2587 l
-2816 2581 l
-2838 2576 l
-2860 2571 l
-2883 2567 l
-2906 2564 l
-2930 2562 l
-2954 2561 l
-2978 2560 l
-3003 2561 l
-3028 2562 l
-3053 2564 l
-3078 2567 l
-3103 2571 l
-3128 2576 l
-3154 2581 l
-3179 2588 l
-3204 2596 l
-3229 2604 l
-3253 2613 l
-3277 2623 l
-3301 2634 l
-3325 2646 l
-3348 2658 l
-3371 2671 l
-3393 2685 l
-3414 2700 l
-3435 2715 l
-3455 2730 l
-3475 2747 l
-3493 2764 l
-3511 2781 l
-3529 2799 l
-3545 2817 l
-3560 2835 l
-3575 2854 l
-3589 2873 l
-3602 2893 l
-3614 2912 l
-3625 2932 l
-3635 2951 l
-3644 2971 l
-3652 2991 l
-3659 3011 l
-3666 3031 l
-3671 3050 l
-3676 3070 l
-3679 3089 l
-3682 3109 l
-3684 3128 l
-3685 3146 l
-3685 3165 l
-3684 3183 l
-3683 3201 l
-3681 3219 l
-3677 3236 l
-3674 3253 l
-3669 3269 l
-3664 3285 l
-3657 3301 l
-3651 3316 l
-3643 3331 l
-3635 3346 l
-3626 3359 l
-3617 3373 l
-3607 3386 l
-3597 3398 l
-3586 3410 l
-S
-3881 3956 m
-3879 3957 l
-3877 3958 l
-3875 3960 l
-3851 3975 l
-3826 3989 l
-3800 4003 l
-3774 4016 l
-3748 4027 l
-3721 4038 l
-3693 4048 l
-3665 4057 l
-3637 4065 l
-3609 4073 l
-3580 4079 l
-3551 4085 l
-3521 4090 l
-3492 4094 l
-3462 4097 l
-3432 4100 l
-3402 4102 l
-3371 4103 l
-3341 4104 l
-3310 4103 l
-3279 4102 l
-3248 4101 l
-3217 4098 l
-3186 4095 l
-3155 4091 l
-3124 4087 l
-3093 4082 l
-3061 4076 l
-3030 4070 l
-2999 4063 l
-2968 4056 l
-2937 4047 l
-2907 4039 l
-2876 4029 l
-2845 4019 l
-2815 4009 l
-2785 3998 l
-2755 3986 l
-2725 3974 l
-2695 3962 l
-2666 3948 l
-2637 3935 l
-2608 3920 l
-2579 3906 l
-2551 3890 l
-2523 3875 l
-2495 3858 l
-2468 3842 l
-2441 3824 l
-2415 3807 l
-2389 3789 l
-2363 3770 l
-2338 3751 l
-2313 3731 l
-2288 3711 l
-2265 3691 l
-2241 3670 l
-2219 3649 l
-2196 3627 l
-2175 3605 l
-2154 3583 l
-2133 3560 l
-2113 3537 l
-2094 3514 l
-2076 3490 l
-2058 3465 l
-2041 3441 l
-2025 3416 l
-2009 3390 l
-1994 3365 l
-1981 3339 l
-1967 3313 l
-1955 3286 l
-1944 3259 l
-1934 3232 l
-1924 3205 l
-1916 3177 l
-1908 3149 l
-1902 3121 l
-1897 3092 l
-1892 3064 l
-1889 3035 l
-1888 3006 l
-1887 2977 l
-1888 2947 l
-1889 2918 l
-1893 2888 l
-1897 2859 l
-1903 2829 l
-1911 2799 l
-1920 2770 l
-1930 2740 l
-1943 2710 l
-1956 2681 l
-1972 2652 l
-1989 2623 l
-2008 2594 l
-2029 2565 l
-2051 2537 l
-2076 2510 l
-2102 2483 l
-2131 2456 l
-2161 2430 l
-2194 2405 l
-2228 2381 l
-2265 2358 l
-2304 2336 l
-2345 2316 l
-2388 2296 l
-2432 2278 l
-2479 2262 l
-2528 2248 l
-2579 2235 l
-2632 2225 l
-2686 2216 l
-2742 2210 l
-2799 2206 l
-2857 2205 l
-2917 2207 l
-2977 2211 l
-3038 2218 l
-3100 2228 l
-3161 2241 l
-3223 2256 l
-3284 2275 l
-3344 2296 l
-3404 2320 l
-3463 2347 l
-3520 2376 l
-3575 2408 l
-3629 2442 l
-3681 2478 l
-3730 2516 l
-3777 2556 l
-3822 2597 l
-3864 2640 l
-3904 2683 l
-3941 2728 l
-3975 2773 l
-4006 2818 l
-4035 2864 l
-4061 2910 l
-4084 2956 l
-4104 3002 l
-4122 3047 l
-4138 3092 l
-4151 3136 l
-4162 3180 l
-4170 3223 l
-4177 3265 l
-4181 3306 l
-4183 3346 l
-4183 3385 l
-4182 3423 l
-4179 3460 l
-4174 3496 l
-4167 3531 l
-4160 3565 l
-4150 3598 l
-4139 3629 l
-4127 3660 l
-4114 3689 l
-4100 3717 l
-4084 3744 l
-4068 3770 l
-4050 3795 l
-4032 3819 l
-4013 3842 l
-3993 3863 l
-3972 3884 l
-3950 3903 l
-3928 3922 l
-3904 3939 l
-3881 3956 l
-S
-3924 4591 m
-3922 4592 l
-3920 4593 l
-3917 4593 l
-3884 4604 l
-3851 4614 l
-3817 4623 l
-3783 4631 l
-3749 4638 l
-3715 4645 l
-3680 4650 l
-3645 4655 l
-3609 4659 l
-3574 4662 l
-3538 4664 l
-3502 4666 l
-3466 4667 l
-3430 4667 l
-3394 4666 l
-3358 4665 l
-3321 4663 l
-3284 4661 l
-3248 4657 l
-3211 4653 l
-3174 4649 l
-3137 4643 l
-3100 4638 l
-3063 4631 l
-3026 4624 l
-2989 4616 l
-2952 4608 l
-2916 4599 l
-2879 4590 l
-2842 4580 l
-2805 4569 l
-2769 4558 l
-2732 4547 l
-2696 4534 l
-2659 4522 l
-2623 4509 l
-2587 4495 l
-2552 4481 l
-2516 4466 l
-2481 4451 l
-2445 4435 l
-2411 4419 l
-2376 4402 l
-2341 4385 l
-2307 4367 l
-2273 4349 l
-2240 4331 l
-2206 4312 l
-2174 4292 l
-2141 4272 l
-2109 4252 l
-2077 4231 l
-2045 4210 l
-2014 4188 l
-1984 4166 l
-1953 4144 l
-1924 4121 l
-1894 4098 l
-1865 4074 l
-1837 4050 l
-1809 4026 l
-1782 4001 l
-1755 3976 l
-1729 3950 l
-1703 3925 l
-1678 3898 l
-1654 3871 l
-1630 3844 l
-1607 3817 l
-1584 3789 l
-1563 3761 l
-1542 3732 l
-1521 3703 l
-1502 3674 l
-1483 3644 l
-1465 3614 l
-1448 3584 l
-1432 3553 l
-1417 3522 l
-1402 3490 l
-1389 3458 l
-1376 3426 l
-1365 3393 l
-1354 3360 l
-1345 3326 l
-1337 3292 l
-1330 3257 l
-1325 3222 l
-1320 3187 l
-1317 3151 l
-1316 3114 l
-1316 3078 l
-1317 3040 l
-1321 3002 l
-1326 2964 l
-1332 2925 l
-1341 2886 l
-1352 2845 l
-1365 2805 l
-1381 2764 l
-1399 2722 l
-1419 2680 l
-1443 2637 l
-1469 2594 l
-1499 2551 l
-1533 2507 l
-1570 2462 l
-1573 2459 l
-1576 2456 l
-1579 2453 l
-1582 2450 l
-1585 2447 l
-1588 2443 l
-1590 2440 l
-1593 2437 l
-1596 2434 l
-1599 2431 l
-1603 2427 l
-1606 2424 l
-1609 2421 l
-1612 2418 l
-1615 2415 l
-1618 2412 l
-1621 2408 l
-1624 2405 l
-1628 2402 l
-1631 2399 l
-1634 2396 l
-1638 2393 l
-1641 2389 l
-1644 2386 l
-1648 2383 l
-1651 2380 l
-1654 2377 l
-1658 2374 l
-1661 2370 l
-1665 2367 l
-1668 2364 l
-1672 2361 l
-1675 2358 l
-1679 2355 l
-1683 2351 l
-1686 2348 l
-1690 2345 l
-1694 2342 l
-1697 2339 l
-1701 2336 l
-1705 2332 l
-1709 2329 l
-1712 2326 l
-1716 2323 l
-1720 2320 l
-1724 2317 l
-1728 2314 l
-1732 2310 l
-1736 2307 l
-1740 2304 l
-1744 2301 l
-1748 2298 l
-1752 2295 l
-1756 2292 l
-1760 2289 l
-1765 2286 l
-1769 2282 l
-1773 2279 l
-1777 2276 l
-1782 2273 l
-1786 2270 l
-1790 2267 l
-1795 2264 l
-1799 2261 l
-1803 2258 l
-1808 2255 l
-1812 2252 l
-1817 2249 l
-1822 2245 l
-1826 2242 l
-1831 2239 l
-1835 2236 l
-1840 2233 l
-1845 2230 l
-1849 2227 l
-1854 2224 l
-1859 2221 l
-1864 2218 l
-1869 2215 l
-1874 2212 l
-1879 2209 l
-1883 2206 l
-1888 2203 l
-1893 2200 l
-1899 2198 l
-1904 2195 l
-1909 2192 l
-1914 2189 l
-1919 2186 l
-S
-1919 2186 m
-1924 2183 l
-1930 2180 l
-1935 2177 l
-1940 2174 l
-1945 2171 l
-1951 2169 l
-1956 2166 l
-1962 2163 l
-1967 2160 l
-1973 2157 l
-1978 2154 l
-1984 2152 l
-1989 2149 l
-1995 2146 l
-2001 2143 l
-2006 2141 l
-2012 2138 l
-2018 2135 l
-2024 2132 l
-2030 2130 l
-2036 2127 l
-2041 2124 l
-2047 2122 l
-2053 2119 l
-2059 2116 l
-2065 2114 l
-2072 2111 l
-2078 2109 l
-2084 2106 l
-2090 2103 l
-2096 2101 l
-2103 2098 l
-2109 2096 l
-2115 2093 l
-2122 2091 l
-2128 2088 l
-2135 2086 l
-2141 2084 l
-2148 2081 l
-2154 2079 l
-2161 2076 l
-2167 2074 l
-2174 2072 l
-2181 2069 l
-2187 2067 l
-2194 2065 l
-2201 2063 l
-2208 2060 l
-2215 2058 l
-2222 2056 l
-2229 2054 l
-2236 2052 l
-2243 2050 l
-2250 2048 l
-2257 2045 l
-2264 2043 l
-2271 2041 l
-2279 2039 l
-2286 2037 l
-2293 2035 l
-2300 2034 l
-2308 2032 l
-2315 2030 l
-2323 2028 l
-2330 2026 l
-2338 2024 l
-2345 2022 l
-2353 2021 l
-2360 2019 l
-2368 2017 l
-2376 2016 l
-2383 2014 l
-2391 2012 l
-2399 2011 l
-2407 2009 l
-2415 2008 l
-2423 2006 l
-2431 2005 l
-2439 2004 l
-2447 2002 l
-2455 2001 l
-2463 1999 l
-2471 1998 l
-2479 1997 l
-2487 1996 l
-2495 1995 l
-2504 1993 l
-2512 1992 l
-2520 1991 l
-2529 1990 l
-2537 1989 l
-2545 1988 l
-2554 1987 l
-2562 1986 l
-2571 1986 l
-2579 1985 l
-2588 1984 l
-2597 1983 l
-2605 1983 l
-2614 1982 l
-2623 1981 l
-2631 1981 l
-2640 1980 l
-2649 1980 l
-2658 1979 l
-2667 1979 l
-2676 1978 l
-2684 1978 l
-2693 1978 l
-2702 1978 l
-2711 1977 l
-2720 1977 l
-2729 1977 l
-2739 1977 l
-2748 1977 l
-2757 1977 l
-2766 1977 l
-2775 1977 l
-2784 1977 l
-2794 1978 l
-2803 1978 l
-2812 1978 l
-2821 1979 l
-2831 1979 l
-2840 1979 l
-2849 1980 l
-2859 1980 l
-2868 1981 l
-2878 1982 l
-2887 1982 l
-2896 1983 l
-2906 1984 l
-2915 1985 l
-2925 1986 l
-2935 1987 l
-2944 1988 l
-2954 1989 l
-2963 1990 l
-2973 1991 l
-2982 1992 l
-2992 1993 l
-3002 1995 l
-3011 1996 l
-3021 1998 l
-3031 1999 l
-3040 2001 l
-3050 2002 l
-3060 2004 l
-3069 2006 l
-3079 2007 l
-3089 2009 l
-3098 2011 l
-3108 2013 l
-3118 2015 l
-3128 2017 l
-3137 2019 l
-3147 2021 l
-3157 2023 l
-3167 2026 l
-3176 2028 l
-3186 2030 l
-3196 2033 l
-3206 2035 l
-3215 2038 l
-3225 2040 l
-3235 2043 l
-3245 2045 l
-3254 2048 l
-3264 2051 l
-3274 2054 l
-3284 2057 l
-3293 2060 l
-3303 2063 l
-3313 2066 l
-3322 2069 l
-3332 2072 l
-3342 2075 l
-3351 2079 l
-3361 2082 l
-3371 2085 l
-3380 2089 l
-3390 2092 l
-3399 2096 l
-3409 2100 l
-3419 2103 l
-3428 2107 l
-3438 2111 l
-3447 2115 l
-3457 2118 l
-3466 2122 l
-3476 2126 l
-3485 2130 l
-3494 2135 l
-3504 2139 l
-3513 2143 l
-3522 2147 l
-3532 2151 l
-3541 2156 l
-3550 2160 l
-S
-3550 2160 m
-3559 2165 l
-3569 2169 l
-3578 2174 l
-3587 2178 l
-3596 2183 l
-3605 2187 l
-3614 2192 l
-3623 2197 l
-3632 2202 l
-3641 2207 l
-3650 2212 l
-3659 2217 l
-3668 2222 l
-3677 2227 l
-3686 2232 l
-3694 2237 l
-3703 2242 l
-3712 2247 l
-3720 2252 l
-3729 2258 l
-3738 2263 l
-3746 2268 l
-3755 2274 l
-3763 2279 l
-3772 2285 l
-3780 2290 l
-3788 2296 l
-3797 2302 l
-3805 2307 l
-3813 2313 l
-3821 2319 l
-3829 2324 l
-3838 2330 l
-3846 2336 l
-3854 2342 l
-3862 2348 l
-3869 2354 l
-3877 2360 l
-3885 2366 l
-3893 2372 l
-3901 2378 l
-3908 2384 l
-3916 2390 l
-3924 2396 l
-3931 2402 l
-3939 2408 l
-3946 2415 l
-3954 2421 l
-3961 2427 l
-3968 2433 l
-3976 2440 l
-3983 2446 l
-3990 2452 l
-3997 2459 l
-4004 2465 l
-4011 2472 l
-4018 2478 l
-4025 2485 l
-4032 2491 l
-4039 2498 l
-4045 2504 l
-4052 2511 l
-4059 2517 l
-4065 2524 l
-4072 2530 l
-4079 2537 l
-4085 2544 l
-4091 2550 l
-4098 2557 l
-4104 2564 l
-4110 2570 l
-4117 2577 l
-4123 2584 l
-4129 2590 l
-4135 2597 l
-4141 2604 l
-4147 2611 l
-4153 2617 l
-4159 2624 l
-4165 2631 l
-4170 2638 l
-4176 2645 l
-4182 2651 l
-4187 2658 l
-4193 2665 l
-4198 2672 l
-4204 2679 l
-4209 2686 l
-4215 2692 l
-4220 2699 l
-4225 2706 l
-4230 2713 l
-4235 2720 l
-4241 2727 l
-4246 2734 l
-4251 2740 l
-4256 2747 l
-4260 2754 l
-4265 2761 l
-4270 2768 l
-4275 2775 l
-4280 2782 l
-4284 2788 l
-4289 2795 l
-4293 2802 l
-4298 2809 l
-4302 2816 l
-4307 2823 l
-4311 2829 l
-4316 2836 l
-4320 2843 l
-4324 2850 l
-4328 2857 l
-4332 2864 l
-4337 2870 l
-4341 2877 l
-4345 2884 l
-4349 2891 l
-4352 2898 l
-4356 2904 l
-4360 2911 l
-4364 2918 l
-4368 2925 l
-4371 2931 l
-4375 2938 l
-4379 2945 l
-4382 2952 l
-4386 2958 l
-4389 2965 l
-4393 2972 l
-4396 2978 l
-4399 2985 l
-4403 2992 l
-4406 2998 l
-4409 3005 l
-4412 3011 l
-4415 3018 l
-4418 3025 l
-4421 3031 l
-4425 3038 l
-4427 3044 l
-4430 3051 l
-4433 3057 l
-4436 3064 l
-4439 3070 l
-4442 3077 l
-4444 3083 l
-4447 3090 l
-4450 3096 l
-4452 3103 l
-4455 3109 l
-4458 3115 l
-4460 3122 l
-4463 3128 l
-4465 3135 l
-4467 3141 l
-4470 3147 l
-4472 3154 l
-4474 3160 l
-4477 3166 l
-4479 3172 l
-4481 3179 l
-4483 3185 l
-4485 3191 l
-4487 3197 l
-4489 3203 l
-4491 3210 l
-4493 3216 l
-4495 3222 l
-4497 3228 l
-4499 3234 l
-4501 3240 l
-4503 3246 l
-4505 3252 l
-4506 3258 l
-4508 3264 l
-4510 3270 l
-4512 3276 l
-4513 3282 l
-4515 3288 l
-4516 3294 l
-4518 3300 l
-4519 3306 l
-4521 3312 l
-4522 3318 l
-4524 3323 l
-4525 3329 l
-4527 3335 l
-4528 3341 l
-4529 3347 l
-4530 3352 l
-4532 3358 l
-4533 3364 l
-4534 3369 l
-4535 3375 l
-4536 3381 l
-4538 3386 l
-4539 3392 l
-4540 3397 l
-S
-4540 3397 m
-4541 3403 l
-4542 3409 l
-4543 3414 l
-4544 3420 l
-4545 3425 l
-4546 3431 l
-4546 3436 l
-4547 3442 l
-4548 3447 l
-4549 3452 l
-4550 3458 l
-4551 3463 l
-4551 3469 l
-4552 3474 l
-4553 3479 l
-4553 3484 l
-4554 3490 l
-4555 3495 l
-4555 3500 l
-4556 3505 l
-4556 3511 l
-4557 3516 l
-4558 3521 l
-4558 3526 l
-4559 3531 l
-4559 3536 l
-4559 3542 l
-4560 3547 l
-4560 3552 l
-4561 3557 l
-4561 3562 l
-4561 3567 l
-4562 3572 l
-4562 3577 l
-4562 3582 l
-4562 3587 l
-4563 3592 l
-4563 3596 l
-4563 3601 l
-4563 3606 l
-4563 3611 l
-4564 3616 l
-4564 3621 l
-4564 3625 l
-4564 3630 l
-4564 3635 l
-4564 3640 l
-4564 3644 l
-4564 3649 l
-4564 3654 l
-4564 3658 l
-4564 3663 l
-4564 3668 l
-4564 3672 l
-4564 3677 l
-4564 3682 l
-4564 3686 l
-4563 3691 l
-4563 3695 l
-4560 3757 l
-4553 3815 l
-4544 3871 l
-4533 3923 l
-4520 3973 l
-4505 4020 l
-4488 4064 l
-4470 4106 l
-4451 4146 l
-4430 4184 l
-4408 4220 l
-4385 4254 l
-4361 4285 l
-4337 4316 l
-4311 4344 l
-4285 4371 l
-4258 4396 l
-4230 4420 l
-4202 4443 l
-4173 4464 l
-4144 4484 l
-4114 4503 l
-4083 4520 l
-4053 4536 l
-4021 4552 l
-3989 4566 l
-3957 4579 l
-3925 4591 l
-S
-3638 5218 m
-3636 5218 l
-3634 5218 l
-3632 5218 l
-3601 5218 l
-3570 5217 l
-3539 5216 l
-3507 5215 l
-3476 5213 l
-3443 5211 l
-3411 5208 l
-3379 5205 l
-3346 5202 l
-3313 5198 l
-3280 5194 l
-3246 5189 l
-3213 5184 l
-3179 5179 l
-3145 5173 l
-3111 5167 l
-3077 5160 l
-3043 5153 l
-3008 5146 l
-2974 5138 l
-2939 5130 l
-2905 5121 l
-2870 5112 l
-2835 5103 l
-2800 5093 l
-2766 5083 l
-2731 5073 l
-2696 5062 l
-2661 5051 l
-2626 5040 l
-2591 5028 l
-2556 5016 l
-2522 5003 l
-2487 4990 l
-2452 4977 l
-2418 4963 l
-2383 4950 l
-2349 4935 l
-2314 4921 l
-2280 4906 l
-2246 4891 l
-2212 4876 l
-2179 4860 l
-2145 4844 l
-2112 4828 l
-2079 4811 l
-2046 4794 l
-2013 4777 l
-1980 4760 l
-1948 4742 l
-1916 4724 l
-1884 4706 l
-1853 4687 l
-1821 4669 l
-1790 4650 l
-1760 4631 l
-1729 4611 l
-1699 4592 l
-1669 4572 l
-1640 4552 l
-1611 4532 l
-1582 4512 l
-1554 4491 l
-1526 4471 l
-1498 4450 l
-1471 4429 l
-1444 4408 l
-1418 4386 l
-1392 4365 l
-1366 4343 l
-1341 4322 l
-1316 4300 l
-1292 4278 l
-1268 4256 l
-1245 4234 l
-1222 4211 l
-1200 4189 l
-1178 4167 l
-1156 4144 l
-1136 4122 l
-1115 4099 l
-1095 4077 l
-1076 4054 l
-1057 4031 l
-1039 4009 l
-1021 3986 l
-1004 3963 l
-987 3940 l
-971 3918 l
-956 3895 l
-941 3872 l
-926 3850 l
-912 3827 l
-899 3804 l
-886 3782 l
-874 3759 l
-863 3737 l
-852 3714 l
-842 3692 l
-832 3670 l
-823 3648 l
-814 3626 l
-807 3604 l
-799 3582 l
-793 3560 l
-787 3539 l
-781 3517 l
-777 3496 l
-773 3475 l
-769 3454 l
-766 3433 l
-764 3412 l
-763 3391 l
-762 3371 l
-761 3350 l
-762 3330 l
-763 3310 l
-765 3290 l
-767 3270 l
-770 3250 l
-774 3230 l
-779 3210 l
-785 3189 l
-792 3167 l
-802 3140 l
-802 3138 l
-803 3136 l
-804 3134 l
-805 3131 l
-806 3129 l
-807 3126 l
-808 3124 l
-810 3121 l
-811 3118 l
-812 3115 l
-814 3112 l
-815 3108 l
-817 3105 l
-819 3100 l
-820 3096 l
-823 3091 l
-825 3086 l
-828 3080 l
-831 3073 l
-835 3065 l
-840 3055 l
-845 3044 l
-852 3030 l
-862 3011 l
-875 2987 l
-894 2951 l
-896 2948 l
-898 2945 l
-899 2942 l
-901 2938 l
-903 2935 l
-906 2931 l
-908 2927 l
-910 2923 l
-912 2919 l
-915 2915 l
-918 2910 l
-920 2906 l
-923 2901 l
-926 2896 l
-929 2891 l
-933 2885 l
-936 2880 l
-940 2874 l
-944 2868 l
-948 2861 l
-952 2854 l
-956 2847 l
-961 2840 l
-966 2832 l
-972 2823 l
-978 2815 l
-984 2806 l
-990 2796 l
-998 2785 l
-1005 2774 l
-1013 2763 l
-1022 2750 l
-1032 2737 l
-1042 2723 l
-1054 2708 l
-1066 2692 l
-1080 2674 l
-1095 2655 l
-1112 2635 l
-1131 2613 l
-1152 2589 l
-1175 2563 l
-1202 2535 l
-1232 2504 l
-1267 2470 l
-S
-1267 2470 m
-1307 2432 l
-1353 2391 l
-1408 2346 l
-1412 2343 l
-1417 2339 l
-1421 2336 l
-1425 2332 l
-1430 2329 l
-1434 2326 l
-1439 2322 l
-1444 2318 l
-1448 2315 l
-1453 2311 l
-1458 2308 l
-1463 2304 l
-1468 2300 l
-1473 2297 l
-1478 2293 l
-1483 2289 l
-1488 2285 l
-1494 2282 l
-1499 2278 l
-1504 2274 l
-1510 2270 l
-1515 2266 l
-1521 2262 l
-1527 2258 l
-1533 2254 l
-1538 2250 l
-1544 2246 l
-1550 2242 l
-1556 2238 l
-1563 2234 l
-1569 2230 l
-1575 2226 l
-1582 2222 l
-1588 2218 l
-1595 2214 l
-1602 2209 l
-1608 2205 l
-1615 2201 l
-1622 2197 l
-1629 2192 l
-1636 2188 l
-1644 2184 l
-1651 2179 l
-1659 2175 l
-1666 2171 l
-1674 2166 l
-1682 2162 l
-1690 2157 l
-1698 2153 l
-1706 2148 l
-1714 2144 l
-1722 2139 l
-1731 2135 l
-1740 2130 l
-1748 2126 l
-1757 2121 l
-1766 2117 l
-1775 2112 l
-1785 2108 l
-1794 2103 l
-1804 2098 l
-1813 2094 l
-1823 2089 l
-1833 2085 l
-1843 2080 l
-1853 2075 l
-1864 2071 l
-1874 2066 l
-1885 2062 l
-1896 2057 l
-1907 2052 l
-1918 2048 l
-1929 2043 l
-1941 2039 l
-1953 2034 l
-1965 2030 l
-1977 2025 l
-1989 2021 l
-2001 2016 l
-2014 2012 l
-2026 2007 l
-2039 2003 l
-2052 1999 l
-2066 1994 l
-2079 1990 l
-2093 1986 l
-2107 1982 l
-2121 1978 l
-2135 1974 l
-2150 1970 l
-2164 1966 l
-2179 1962 l
-2194 1958 l
-2209 1954 l
-2225 1950 l
-2241 1947 l
-2257 1943 l
-2273 1940 l
-2289 1937 l
-2306 1933 l
-2322 1930 l
-2339 1927 l
-2357 1924 l
-2374 1921 l
-2392 1919 l
-2409 1916 l
-2427 1914 l
-2446 1911 l
-2464 1909 l
-2483 1907 l
-2502 1905 l
-2521 1904 l
-2540 1902 l
-2560 1901 l
-2580 1900 l
-2600 1899 l
-2620 1898 l
-2640 1897 l
-2661 1897 l
-2682 1896 l
-2702 1896 l
-2724 1897 l
-2745 1897 l
-2766 1898 l
-2788 1898 l
-2810 1900 l
-2832 1901 l
-2854 1903 l
-2876 1904 l
-2899 1906 l
-2921 1909 l
-2944 1912 l
-2967 1914 l
-2990 1918 l
-3013 1921 l
-3036 1925 l
-3059 1929 l
-3083 1933 l
-3106 1938 l
-3129 1943 l
-3153 1948 l
-3176 1953 l
-3200 1959 l
-3224 1965 l
-3247 1972 l
-3271 1979 l
-3294 1986 l
-3318 1993 l
-3342 2000 l
-3365 2008 l
-3389 2017 l
-3412 2025 l
-3435 2034 l
-3459 2043 l
-3482 2052 l
-3505 2062 l
-3528 2072 l
-3551 2082 l
-3573 2093 l
-3596 2104 l
-3618 2115 l
-3640 2126 l
-3663 2138 l
-3684 2149 l
-3706 2161 l
-3728 2174 l
-3749 2186 l
-3770 2199 l
-3791 2212 l
-3811 2225 l
-3832 2238 l
-3852 2252 l
-3872 2265 l
-3892 2279 l
-3911 2293 l
-3930 2307 l
-3949 2322 l
-3968 2336 l
-3986 2351 l
-4004 2365 l
-4022 2380 l
-4039 2395 l
-4057 2410 l
-4073 2425 l
-4090 2440 l
-4107 2455 l
-4123 2470 l
-4138 2486 l
-4154 2501 l
-4169 2516 l
-4184 2532 l
-4199 2547 l
-4213 2563 l
-4227 2578 l
-4241 2594 l
-4254 2609 l
-S
-4254 2609 m
-4268 2625 l
-4281 2640 l
-4293 2655 l
-4306 2671 l
-4318 2686 l
-4330 2701 l
-4341 2717 l
-4353 2732 l
-4364 2747 l
-4375 2762 l
-4385 2777 l
-4396 2792 l
-4406 2807 l
-4416 2822 l
-4425 2836 l
-4435 2851 l
-4444 2865 l
-4453 2880 l
-4462 2894 l
-4470 2909 l
-4478 2923 l
-4486 2937 l
-4494 2951 l
-4502 2965 l
-4510 2978 l
-4517 2992 l
-4524 3006 l
-4531 3019 l
-4538 3032 l
-4544 3046 l
-4551 3059 l
-4557 3072 l
-4563 3085 l
-4569 3098 l
-4575 3110 l
-4581 3123 l
-4586 3135 l
-4591 3148 l
-4597 3160 l
-4602 3172 l
-4606 3184 l
-4611 3196 l
-4616 3208 l
-4620 3219 l
-4625 3231 l
-4629 3242 l
-4633 3253 l
-4637 3265 l
-4641 3276 l
-4645 3287 l
-4649 3298 l
-4652 3308 l
-4656 3319 l
-4659 3329 l
-4663 3340 l
-4666 3350 l
-4669 3360 l
-4672 3371 l
-4675 3381 l
-4678 3390 l
-4681 3400 l
-4683 3410 l
-4686 3420 l
-4689 3429 l
-4691 3438 l
-4693 3448 l
-4696 3457 l
-4698 3466 l
-4700 3475 l
-4702 3484 l
-4704 3493 l
-4706 3501 l
-4708 3510 l
-4710 3519 l
-4712 3527 l
-4714 3535 l
-4716 3544 l
-4717 3552 l
-4719 3560 l
-4720 3568 l
-4722 3576 l
-4723 3584 l
-4725 3591 l
-4726 3599 l
-4728 3607 l
-4729 3614 l
-4730 3622 l
-4731 3629 l
-4732 3636 l
-4734 3644 l
-4735 3651 l
-4736 3658 l
-4737 3665 l
-4738 3672 l
-4739 3679 l
-4740 3685 l
-4741 3692 l
-4741 3699 l
-4742 3705 l
-4743 3712 l
-4744 3718 l
-4745 3725 l
-4745 3731 l
-4746 3737 l
-4747 3743 l
-4747 3749 l
-4748 3755 l
-4748 3761 l
-4749 3767 l
-4750 3773 l
-4750 3779 l
-4751 3785 l
-4756 3860 l
-4758 3925 l
-4758 3983 l
-4757 4034 l
-4755 4079 l
-4752 4120 l
-4749 4156 l
-4745 4189 l
-4742 4219 l
-4738 4246 l
-4734 4271 l
-4731 4293 l
-4727 4314 l
-4724 4334 l
-4721 4351 l
-4717 4368 l
-4714 4383 l
-4711 4398 l
-4708 4411 l
-4705 4424 l
-4703 4435 l
-4700 4446 l
-4697 4457 l
-4695 4467 l
-4692 4476 l
-4690 4485 l
-4688 4493 l
-4686 4501 l
-4684 4509 l
-4682 4516 l
-4680 4523 l
-4678 4529 l
-4676 4535 l
-4674 4541 l
-4673 4547 l
-4671 4552 l
-4670 4558 l
-4668 4563 l
-4667 4567 l
-4665 4572 l
-4664 4576 l
-4662 4581 l
-4647 4627 l
-4636 4658 l
-4628 4680 l
-4622 4697 l
-4617 4710 l
-4613 4721 l
-4609 4729 l
-4606 4737 l
-4603 4744 l
-4601 4749 l
-4599 4755 l
-4597 4759 l
-4595 4763 l
-4593 4767 l
-4592 4771 l
-4590 4774 l
-4589 4777 l
-4587 4780 l
-4586 4783 l
-4585 4786 l
-4584 4788 l
-4582 4791 l
-4569 4818 l
-4557 4839 l
-4546 4858 l
-4534 4876 l
-4522 4893 l
-4510 4909 l
-4497 4924 l
-4483 4939 l
-4470 4954 l
-4455 4968 l
-4440 4981 l
-4425 4995 l
-4408 5008 l
-4392 5020 l
-4375 5032 l
-4357 5044 l
-4339 5056 l
-4320 5067 l
-4301 5077 l
-4281 5088 l
-4261 5098 l
-4240 5107 l
-4218 5116 l
-S
-4218 5116 m
-4197 5125 l
-4174 5134 l
-4152 5142 l
-4128 5149 l
-4105 5156 l
-4080 5163 l
-4056 5170 l
-4031 5176 l
-4005 5181 l
-3979 5187 l
-3953 5192 l
-3926 5196 l
-3899 5200 l
-3872 5204 l
-3844 5207 l
-3816 5210 l
-3787 5212 l
-3758 5214 l
-3729 5216 l
-3699 5217 l
-3669 5218 l
-3639 5218 l
-S
-2956 5656 m
-2955 5655 l
-2954 5655 l
-2953 5654 l
-2939 5646 l
-2924 5639 l
-2909 5631 l
-2893 5623 l
-2876 5616 l
-2860 5608 l
-2842 5600 l
-2824 5592 l
-2806 5584 l
-2787 5577 l
-2768 5568 l
-2748 5560 l
-2728 5552 l
-2708 5544 l
-2687 5536 l
-2666 5527 l
-2645 5519 l
-2623 5510 l
-2601 5501 l
-2579 5493 l
-2557 5484 l
-2534 5475 l
-2512 5466 l
-2489 5456 l
-2466 5447 l
-2443 5438 l
-2419 5428 l
-2396 5419 l
-2372 5409 l
-2348 5399 l
-2324 5389 l
-2301 5380 l
-2277 5369 l
-2253 5359 l
-2228 5349 l
-2204 5339 l
-2180 5329 l
-2156 5318 l
-2132 5308 l
-2108 5297 l
-2084 5286 l
-2060 5276 l
-2036 5265 l
-2012 5254 l
-1988 5243 l
-1964 5233 l
-1940 5222 l
-1917 5211 l
-1893 5200 l
-1870 5189 l
-1847 5178 l
-1824 5167 l
-1801 5156 l
-1778 5146 l
-1755 5135 l
-1733 5124 l
-1710 5113 l
-1688 5103 l
-1667 5092 l
-1645 5082 l
-1623 5072 l
-1602 5061 l
-1581 5051 l
-1561 5041 l
-1540 5032 l
-1520 5022 l
-1500 5012 l
-1481 5003 l
-1461 4994 l
-1442 4985 l
-1424 4977 l
-1406 4969 l
-1388 4961 l
-1370 4953 l
-1353 4946 l
-1336 4939 l
-1319 4932 l
-1303 4926 l
-1288 4920 l
-1273 4915 l
-1258 4910 l
-1244 4906 l
-1230 4902 l
-1216 4899 l
-1204 4897 l
-1191 4895 l
-1180 4894 l
-1169 4893 l
-1158 4894 l
-1148 4895 l
-1139 4897 l
-1131 4900 l
-1123 4904 l
-1116 4908 l
-1110 4914 l
-1105 4921 l
-1100 4930 l
-1097 4939 l
-1094 4950 l
-1093 4962 l
-1093 4975 l
-1094 4990 l
-1097 5007 l
-1101 5025 l
-1107 5044 l
-1114 5066 l
-1123 5089 l
-1134 5113 l
-1148 5140 l
-1163 5168 l
-1181 5198 l
-1202 5230 l
-1225 5263 l
-1251 5298 l
-1280 5334 l
-1312 5371 l
-1348 5410 l
-1387 5449 l
-1430 5488 l
-1476 5528 l
-1525 5568 l
-1578 5607 l
-1633 5645 l
-1692 5682 l
-1753 5717 l
-1816 5750 l
-1881 5780 l
-1948 5808 l
-2015 5834 l
-2082 5856 l
-2149 5875 l
-2215 5892 l
-2280 5905 l
-2343 5915 l
-2404 5923 l
-2463 5928 l
-2519 5931 l
-2572 5932 l
-2623 5931 l
-2670 5929 l
-2714 5925 l
-2755 5920 l
-2794 5914 l
-2829 5907 l
-2861 5900 l
-2890 5892 l
-2917 5883 l
-2941 5875 l
-2962 5866 l
-2981 5857 l
-2998 5847 l
-3013 5838 l
-3025 5829 l
-3036 5820 l
-3044 5811 l
-3051 5802 l
-3056 5793 l
-3060 5784 l
-3062 5775 l
-3063 5767 l
-3062 5758 l
-3060 5750 l
-3057 5742 l
-3052 5734 l
-3047 5726 l
-3040 5718 l
-3033 5710 l
-3024 5702 l
-3015 5694 l
-3005 5686 l
-2994 5679 l
-2982 5671 l
-2969 5663 l
-2956 5656 l
-S
-3678 4650 m
-3671 4680 l
-S
-3420 4667 m
-3410 4696 l
-S
-2885 4592 m
-2874 4620 l
-S
-2621 4508 m
-2609 4536 l
-S
-2122 4260 m
-2108 4288 l
-S
-1898 4101 m
-1884 4128 l
-S
-1534 3722 m
-1518 3747 l
-S
-1407 3502 m
-1390 3527 l
-S
-1321 2997 m
-1300 3019 l
-S
-1407 2705 m
-1383 2725 l
-S
-2128 2089 m
-2098 2095 l
-S
-2959 1989 m
-2930 1980 l
-S
-4430 3050 m
-4446 3076 l
-S
-4564 3628 m
-4571 3657 l
-S
-4350 4300 m
-4348 4331 l
-S
-4152 4479 m
-4147 4509 l
-S
-3198 3069 m
-3218 3046 l
-S
-3284 3127 m
-3305 3105 l
-S
-3366 3191 m
-3387 3169 l
-S
-3444 3259 m
-3466 3238 l
-S
-3517 3332 m
-3540 3312 l
-S
-3649 3492 m
-3673 3473 l
-S
-3707 3578 m
-3732 3560 l
-S
-3760 3668 m
-3785 3650 l
-S
-3807 3761 m
-3832 3744 l
-S
-3847 3857 m
-3873 3841 l
-S
-3907 4058 m
-3935 4044 l
-S
-3927 4162 m
-3955 4149 l
-S
-3939 4267 m
-3967 4255 l
-S
-3943 4374 m
-3971 4364 l
-S
-3938 4482 m
-3967 4473 l
-S
-3902 4699 m
-3932 4692 l
-S
-3870 4807 m
-3900 4802 l
-S
-3828 4914 m
-3858 4910 l
-S
-3776 5018 m
-3806 5016 l
-S
-3713 5120 m
-3743 5119 l
-S
-3553 5311 m
-3583 5314 l
-S
-3456 5398 m
-3486 5402 l
-S
-3348 5477 m
-3378 5484 l
-S
-3228 5548 m
-3257 5557 l
-S
-3097 5608 m
-3126 5619 l
-S
-2805 5690 m
-2831 5706 l
-S
-2647 5708 m
-2670 5727 l
-S
-2482 5709 m
-2503 5731 l
-S
-2313 5691 m
-2330 5716 l
-S
-2143 5654 m
-2156 5681 l
-S
-3925 4591 m
-3873 4608 l
-3821 4622 l
-3768 4635 l
-3715 4645 l
-3660 4653 l
-3606 4659 l
-3550 4664 l
-3495 4666 l
-3438 4667 l
-3382 4666 l
-3325 4663 l
-3268 4659 l
-3211 4653 l
-3154 4646 l
-S
-3154 4646 m
-3096 4637 l
-3039 4626 l
-2981 4615 l
-2924 4601 l
-2866 4587 l
-2809 4571 l
-2752 4553 l
-2696 4534 l
-2639 4514 l
-2583 4493 l
-2528 4471 l
-2473 4447 l
-2418 4422 l
-2364 4396 l
-S
-2364 4396 m
-2311 4369 l
-2258 4341 l
-2206 4312 l
-2155 4281 l
-2105 4250 l
-2056 4217 l
-2007 4184 l
-1960 4149 l
-1914 4114 l
-1869 4077 l
-1825 4040 l
-1782 4001 l
-1740 3962 l
-1700 3922 l
-S
-1700 3922 m
-1662 3880 l
-1625 3838 l
-1589 3795 l
-1556 3751 l
-1524 3707 l
-1493 3661 l
-1465 3614 l
-1439 3567 l
-1415 3518 l
-1393 3469 l
-1374 3418 l
-1357 3367 l
-1342 3315 l
-1331 3261 l
-S
-1331 3261 m
-1330 3257 l
-1330 3253 l
-1329 3249 l
-1328 3246 l
-1328 3242 l
-1327 3238 l
-1326 3234 l
-1326 3230 l
-1325 3226 l
-1325 3222 l
-1324 3218 l
-1324 3214 l
-1323 3210 l
-1323 3207 l
-1322 3203 l
-1322 3199 l
-1321 3195 l
-1321 3191 l
-1320 3187 l
-1320 3183 l
-1320 3179 l
-1319 3175 l
-1319 3171 l
-1318 3167 l
-1318 3163 l
-1318 3159 l
-1318 3155 l
-1317 3151 l
-1317 3147 l
-1317 3143 l
-1317 3139 l
-1316 3135 l
-1316 3131 l
-1316 3127 l
-1316 3123 l
-1316 3119 l
-1316 3114 l
-1316 3110 l
-1316 3106 l
-1316 3102 l
-1316 3098 l
-1316 3094 l
-1316 3090 l
-1316 3086 l
-1316 3082 l
-1316 3078 l
-1316 3073 l
-1316 3069 l
-1316 3065 l
-1316 3061 l
-1316 3057 l
-1317 3053 l
-1317 3049 l
-1317 3044 l
-1317 3040 l
-1318 3036 l
-1318 3032 l
-1318 3028 l
-1319 3023 l
-1319 3019 l
-1319 3015 l
-1320 3011 l
-1320 3007 l
-1321 3002 l
-1321 2998 l
-1322 2994 l
-1322 2990 l
-1323 2985 l
-1323 2981 l
-1324 2977 l
-1324 2972 l
-1325 2968 l
-1326 2964 l
-1326 2960 l
-1327 2955 l
-1328 2951 l
-1328 2947 l
-1329 2942 l
-1330 2938 l
-1331 2934 l
-1332 2929 l
-1332 2925 l
-1333 2921 l
-1334 2916 l
-1335 2912 l
-1336 2908 l
-1337 2903 l
-1338 2899 l
-1339 2894 l
-1340 2890 l
-1341 2886 l
-1342 2881 l
-1343 2877 l
-1345 2872 l
-1346 2868 l
-1347 2863 l
-1348 2859 l
-1349 2854 l
-1351 2850 l
-1352 2845 l
-1353 2841 l
-1355 2837 l
-1356 2832 l
-1358 2828 l
-1359 2823 l
-1360 2819 l
-1362 2814 l
-1364 2809 l
-1365 2805 l
-1367 2800 l
-1368 2796 l
-1370 2791 l
-1372 2787 l
-1373 2782 l
-1375 2778 l
-1377 2773 l
-1379 2768 l
-1381 2764 l
-1382 2759 l
-1384 2755 l
-1386 2750 l
-1388 2745 l
-1390 2741 l
-1392 2736 l
-1394 2731 l
-1396 2727 l
-1399 2722 l
-1401 2717 l
-1403 2713 l
-1405 2708 l
-1407 2703 l
-1410 2699 l
-1412 2694 l
-1414 2689 l
-1417 2685 l
-1419 2680 l
-1422 2675 l
-1424 2671 l
-1427 2666 l
-1429 2661 l
-1432 2656 l
-1435 2652 l
-1437 2647 l
-1440 2642 l
-1443 2637 l
-1446 2633 l
-1448 2628 l
-1451 2623 l
-1454 2618 l
-1457 2613 l
-1460 2609 l
-1463 2604 l
-1466 2599 l
-1469 2594 l
-1473 2589 l
-1476 2584 l
-1479 2580 l
-1482 2575 l
-1486 2570 l
-1489 2565 l
-1492 2560 l
-1496 2555 l
-1499 2551 l
-1503 2546 l
-1506 2541 l
-1510 2536 l
-1514 2531 l
-1518 2526 l
-1521 2521 l
-1525 2516 l
-1529 2511 l
-1533 2507 l
-1537 2502 l
-1541 2497 l
-1545 2492 l
-1549 2487 l
-1553 2482 l
-1557 2477 l
-1562 2472 l
-1566 2467 l
-1570 2462 l
-1575 2457 l
-1579 2452 l
-1584 2448 l
-1588 2443 l
-1593 2438 l
-1597 2433 l
-1602 2428 l
-1607 2423 l
-1612 2418 l
-1617 2413 l
-1622 2408 l
-1627 2403 l
-1632 2398 l
-1637 2393 l
-1642 2388 l
-S
-1642 2388 m
-1647 2383 l
-1652 2378 l
-1658 2374 l
-1663 2369 l
-1669 2364 l
-1674 2359 l
-1680 2354 l
-1685 2349 l
-1691 2344 l
-1697 2339 l
-1703 2334 l
-1709 2329 l
-1715 2324 l
-1721 2320 l
-1727 2315 l
-1733 2310 l
-1739 2305 l
-1745 2300 l
-1752 2295 l
-1758 2290 l
-1765 2286 l
-1771 2281 l
-1778 2276 l
-1784 2271 l
-1791 2266 l
-1798 2261 l
-1805 2257 l
-1812 2252 l
-1819 2247 l
-1826 2242 l
-1833 2238 l
-1841 2233 l
-1848 2228 l
-1855 2224 l
-1863 2219 l
-1870 2214 l
-1878 2210 l
-1886 2205 l
-1893 2200 l
-1901 2196 l
-1909 2191 l
-1917 2187 l
-1925 2182 l
-1934 2178 l
-1942 2173 l
-1950 2169 l
-1959 2164 l
-1967 2160 l
-1976 2156 l
-1984 2151 l
-1993 2147 l
-2002 2143 l
-2011 2138 l
-2020 2134 l
-2029 2130 l
-2038 2126 l
-2047 2122 l
-2057 2118 l
-2066 2113 l
-2076 2109 l
-2085 2105 l
-2095 2101 l
-2105 2098 l
-2115 2094 l
-2124 2090 l
-2135 2086 l
-2145 2082 l
-2155 2079 l
-2165 2075 l
-2176 2071 l
-2186 2068 l
-2197 2064 l
-2207 2061 l
-2218 2057 l
-2229 2054 l
-2240 2051 l
-2251 2047 l
-2262 2044 l
-2273 2041 l
-2284 2038 l
-2296 2035 l
-2307 2032 l
-2318 2029 l
-2330 2026 l
-2342 2023 l
-2354 2021 l
-2365 2018 l
-2377 2015 l
-2390 2013 l
-2402 2010 l
-2414 2008 l
-2426 2006 l
-2439 2004 l
-2451 2001 l
-2464 1999 l
-2476 1997 l
-2489 1995 l
-2502 1994 l
-2515 1992 l
-2528 1990 l
-2541 1989 l
-2554 1987 l
-2567 1986 l
-2580 1985 l
-2594 1983 l
-2607 1982 l
-2621 1981 l
-2634 1980 l
-2648 1980 l
-2662 1979 l
-2676 1978 l
-2689 1978 l
-2703 1978 l
-2717 1977 l
-2731 1977 l
-2746 1977 l
-2760 1977 l
-2774 1977 l
-2788 1977 l
-2803 1978 l
-2817 1978 l
-2832 1979 l
-2846 1980 l
-2861 1981 l
-2875 1982 l
-2890 1983 l
-2905 1984 l
-2920 1985 l
-2935 1987 l
-2949 1988 l
-2964 1990 l
-2979 1992 l
-2994 1994 l
-3009 1996 l
-3024 1998 l
-3039 2000 l
-3054 2003 l
-3069 2006 l
-3084 2008 l
-3100 2011 l
-3115 2014 l
-3130 2017 l
-3145 2021 l
-3160 2024 l
-3175 2028 l
-3191 2031 l
-3206 2035 l
-3221 2039 l
-3236 2043 l
-3251 2047 l
-3266 2052 l
-3281 2056 l
-3297 2061 l
-3312 2066 l
-3327 2070 l
-3342 2075 l
-3357 2081 l
-3372 2086 l
-3387 2091 l
-3402 2097 l
-3416 2102 l
-3431 2108 l
-3446 2114 l
-3461 2120 l
-3476 2126 l
-3490 2133 l
-3505 2139 l
-3519 2146 l
-3534 2152 l
-3548 2159 l
-3563 2166 l
-3577 2173 l
-3591 2180 l
-3605 2187 l
-3619 2195 l
-3633 2202 l
-3647 2210 l
-3661 2218 l
-3675 2225 l
-3689 2233 l
-3702 2241 l
-3716 2250 l
-3729 2258 l
-3742 2266 l
-3756 2275 l
-3769 2283 l
-3782 2292 l
-3795 2300 l
-3808 2309 l
-3820 2318 l
-3833 2327 l
-3846 2336 l
-3858 2345 l
-3870 2354 l
-3883 2364 l
-3895 2373 l
-S
-3895 2373 m
-3907 2382 l
-3919 2392 l
-3930 2401 l
-3942 2411 l
-3954 2421 l
-3965 2431 l
-3976 2440 l
-3988 2450 l
-3999 2460 l
-4010 2470 l
-4020 2480 l
-4031 2490 l
-4042 2500 l
-4052 2511 l
-4063 2521 l
-4073 2531 l
-4083 2541 l
-4093 2552 l
-4103 2562 l
-4113 2573 l
-4122 2583 l
-4132 2593 l
-4141 2604 l
-4150 2614 l
-4159 2625 l
-4168 2636 l
-4177 2646 l
-4186 2657 l
-4195 2667 l
-4203 2678 l
-4212 2689 l
-4220 2699 l
-4228 2710 l
-4236 2721 l
-4244 2731 l
-4252 2742 l
-4259 2753 l
-4267 2763 l
-4274 2774 l
-4282 2785 l
-4289 2795 l
-4296 2806 l
-4303 2817 l
-4310 2827 l
-4317 2838 l
-4323 2848 l
-4330 2859 l
-4336 2870 l
-4342 2880 l
-4349 2891 l
-4355 2901 l
-4361 2912 l
-4366 2922 l
-4372 2933 l
-4378 2943 l
-4383 2954 l
-4389 2964 l
-4394 2975 l
-4399 2985 l
-4404 2995 l
-4409 3006 l
-4414 3016 l
-4419 3026 l
-4424 3036 l
-4428 3046 l
-4433 3057 l
-4437 3067 l
-4442 3077 l
-4446 3087 l
-4450 3097 l
-4454 3107 l
-4458 3117 l
-4462 3127 l
-4466 3137 l
-4470 3147 l
-4473 3156 l
-4477 3166 l
-4480 3176 l
-4483 3186 l
-4487 3195 l
-4490 3205 l
-4493 3214 l
-4496 3224 l
-4499 3233 l
-4502 3243 l
-4505 3252 l
-4507 3262 l
-4510 3271 l
-4513 3280 l
-4515 3289 l
-4518 3299 l
-4520 3308 l
-4522 3317 l
-4524 3326 l
-4527 3335 l
-4529 3344 l
-4531 3353 l
-4533 3362 l
-4534 3371 l
-4536 3379 l
-4538 3388 l
-4540 3397 l
-4541 3406 l
-4543 3414 l
-4544 3423 l
-4546 3431 l
-4547 3440 l
-4548 3448 l
-4550 3457 l
-4551 3465 l
-4552 3473 l
-4553 3482 l
-4554 3490 l
-4555 3498 l
-4556 3506 l
-4557 3514 l
-4558 3522 l
-4558 3530 l
-4559 3538 l
-4560 3546 l
-4560 3554 l
-4561 3562 l
-4561 3570 l
-4562 3577 l
-4562 3585 l
-4563 3593 l
-4563 3600 l
-4563 3608 l
-4564 3615 l
-4564 3623 l
-4564 3630 l
-4564 3638 l
-4564 3645 l
-4564 3652 l
-4564 3660 l
-4564 3667 l
-4564 3674 l
-4564 3681 l
-4564 3688 l
-4563 3695 l
-4563 3702 l
-4563 3709 l
-4562 3716 l
-4562 3723 l
-4562 3730 l
-4561 3737 l
-4561 3743 l
-4560 3750 l
-4560 3757 l
-4559 3763 l
-4558 3770 l
-4558 3777 l
-4557 3783 l
-4556 3790 l
-4556 3796 l
-4555 3803 l
-4554 3809 l
-4553 3815 l
-4552 3822 l
-4551 3828 l
-4550 3834 l
-4549 3840 l
-4548 3846 l
-4547 3853 l
-4546 3859 l
-4545 3865 l
-4544 3871 l
-4543 3877 l
-4542 3883 l
-4541 3888 l
-4539 3894 l
-4538 3900 l
-4537 3906 l
-4536 3912 l
-4534 3917 l
-4533 3923 l
-4532 3929 l
-4530 3934 l
-4529 3940 l
-4527 3946 l
-4526 3951 l
-4524 3957 l
-4523 3962 l
-4521 3967 l
-4520 3973 l
-4518 3978 l
-4517 3983 l
-4515 3989 l
-4513 3994 l
-4512 3999 l
-4510 4004 l
-4508 4010 l
-4506 4015 l
-4505 4020 l
-4503 4025 l
-4501 4030 l
-S
-4501 4030 m
-4499 4035 l
-4498 4040 l
-4496 4045 l
-4494 4050 l
-4492 4055 l
-4490 4059 l
-4488 4064 l
-4486 4069 l
-4484 4074 l
-4482 4079 l
-4480 4083 l
-4478 4088 l
-4476 4093 l
-4474 4097 l
-4472 4102 l
-4470 4106 l
-4468 4111 l
-4466 4116 l
-4464 4120 l
-4461 4124 l
-4459 4129 l
-4457 4133 l
-4455 4138 l
-4453 4142 l
-4451 4146 l
-4448 4151 l
-4446 4155 l
-4444 4159 l
-4441 4163 l
-4439 4168 l
-4437 4172 l
-4435 4176 l
-4432 4180 l
-4430 4184 l
-4427 4188 l
-4425 4192 l
-4423 4196 l
-4420 4200 l
-4418 4204 l
-4415 4208 l
-4413 4212 l
-4411 4216 l
-4408 4220 l
-4406 4224 l
-4403 4227 l
-4401 4231 l
-4398 4235 l
-4395 4239 l
-4393 4242 l
-4390 4246 l
-4388 4250 l
-4385 4254 l
-4383 4257 l
-4380 4261 l
-4377 4264 l
-4375 4268 l
-4372 4271 l
-4369 4275 l
-4367 4278 l
-4364 4282 l
-4361 4285 l
-4359 4289 l
-4356 4292 l
-4353 4296 l
-4351 4299 l
-4348 4302 l
-4345 4306 l
-4342 4309 l
-4340 4312 l
-4337 4316 l
-4334 4319 l
-4331 4322 l
-4328 4325 l
-4326 4328 l
-4323 4332 l
-4320 4335 l
-4317 4338 l
-4314 4341 l
-4311 4344 l
-4308 4347 l
-4305 4350 l
-4303 4353 l
-4300 4356 l
-4297 4359 l
-4294 4362 l
-4291 4365 l
-4288 4368 l
-4285 4371 l
-4282 4374 l
-4279 4377 l
-4276 4380 l
-4273 4382 l
-4270 4385 l
-4267 4388 l
-4264 4391 l
-4261 4394 l
-4258 4396 l
-4255 4399 l
-4252 4402 l
-4249 4405 l
-4246 4407 l
-4243 4410 l
-4240 4412 l
-4237 4415 l
-4234 4418 l
-4230 4420 l
-4227 4423 l
-4224 4425 l
-4221 4428 l
-4218 4430 l
-4215 4433 l
-4212 4435 l
-4208 4438 l
-4205 4440 l
-4202 4443 l
-4199 4445 l
-4196 4448 l
-4193 4450 l
-4189 4452 l
-4186 4455 l
-4183 4457 l
-4180 4459 l
-4177 4462 l
-4173 4464 l
-4170 4466 l
-4167 4469 l
-4164 4471 l
-4160 4473 l
-4157 4475 l
-4154 4477 l
-4150 4480 l
-4147 4482 l
-4144 4484 l
-4141 4486 l
-4137 4488 l
-4134 4490 l
-4131 4492 l
-4127 4494 l
-4124 4496 l
-4121 4499 l
-4117 4501 l
-4114 4503 l
-4111 4505 l
-4107 4507 l
-4104 4509 l
-4100 4510 l
-4097 4512 l
-4094 4514 l
-4090 4516 l
-4087 4518 l
-4083 4520 l
-4080 4522 l
-4077 4524 l
-4073 4526 l
-4025 4550 l
-3975 4572 l
-3972 4573 l
-3968 4575 l
-3964 4576 l
-3961 4577 l
-3957 4579 l
-3954 4580 l
-3950 4582 l
-3946 4583 l
-3943 4584 l
-3939 4586 l
-3936 4587 l
-3932 4588 l
-3928 4590 l
-3928 4590 l
-3928 4590 l
-3927 4590 l
-3927 4590 l
-3927 4590 l
-3927 4590 l
-3926 4590 l
-3926 4590 l
-3926 4590 l
-3926 4590 l
-3925 4591 l
-3925 4591 l
-3925 4591 l
-S
-3109 3016 m
-3148 3038 l
-3186 3061 l
-3223 3085 l
-3260 3110 l
-3296 3136 l
-3331 3163 l
-3366 3191 l
-3400 3219 l
-3433 3249 l
-3465 3280 l
-3497 3311 l
-3527 3343 l
-3557 3376 l
-3586 3410 l
-S
-3586 3410 m
-3613 3445 l
-3640 3480 l
-3666 3516 l
-3691 3553 l
-3715 3590 l
-3738 3629 l
-3760 3668 l
-3781 3707 l
-3800 3747 l
-3819 3788 l
-3836 3829 l
-3852 3871 l
-3867 3913 l
-3881 3956 l
-S
-3881 3956 m
-3893 3999 l
-3904 4043 l
-3914 4087 l
-3922 4132 l
-3929 4177 l
-3935 4222 l
-3939 4267 l
-3941 4313 l
-3943 4359 l
-3942 4405 l
-3940 4451 l
-3937 4498 l
-3931 4544 l
-3925 4591 l
-S
-3925 4591 m
-3916 4637 l
-3906 4684 l
-3894 4730 l
-3880 4776 l
-3865 4823 l
-3847 4868 l
-3828 4914 l
-3807 4959 l
-3784 5004 l
-3759 5048 l
-3732 5091 l
-3703 5134 l
-3672 5177 l
-3639 5218 l
-S
-3639 5218 m
-3603 5258 l
-3566 5298 l
-3527 5336 l
-3485 5374 l
-3442 5410 l
-3396 5444 l
-3348 5477 l
-3298 5509 l
-3246 5538 l
-3192 5566 l
-3136 5592 l
-3078 5616 l
-3018 5637 l
-2956 5656 l
-S
-2956 5656 m
-2952 5657 l
-2947 5658 l
-2943 5660 l
-2938 5661 l
-2934 5662 l
-2929 5663 l
-2924 5664 l
-2920 5665 l
-2915 5667 l
-2911 5668 l
-2906 5669 l
-2902 5670 l
-2897 5671 l
-2892 5672 l
-2888 5673 l
-2883 5674 l
-2879 5675 l
-2874 5676 l
-2869 5677 l
-2865 5678 l
-2860 5679 l
-2855 5680 l
-2851 5681 l
-2846 5682 l
-2841 5683 l
-2837 5684 l
-2832 5685 l
-2827 5686 l
-2823 5687 l
-2818 5687 l
-2813 5688 l
-2808 5689 l
-2804 5690 l
-2799 5691 l
-2794 5691 l
-2789 5692 l
-2785 5693 l
-2780 5694 l
-2775 5694 l
-2770 5695 l
-2765 5696 l
-2761 5697 l
-2756 5697 l
-2751 5698 l
-2746 5698 l
-2741 5699 l
-2737 5700 l
-2732 5700 l
-2727 5701 l
-2722 5701 l
-2717 5702 l
-2712 5702 l
-2707 5703 l
-2702 5703 l
-2698 5704 l
-2693 5704 l
-2688 5705 l
-2683 5705 l
-2678 5706 l
-2673 5706 l
-2668 5706 l
-2663 5707 l
-2658 5707 l
-2653 5707 l
-2648 5708 l
-2643 5708 l
-2638 5708 l
-2633 5709 l
-2628 5709 l
-2623 5709 l
-2618 5709 l
-2613 5709 l
-2608 5710 l
-2603 5710 l
-2598 5710 l
-2593 5710 l
-2588 5710 l
-2583 5710 l
-2578 5710 l
-2573 5710 l
-2568 5710 l
-2563 5711 l
-2558 5711 l
-2553 5711 l
-2548 5711 l
-2543 5710 l
-2538 5710 l
-2533 5710 l
-2528 5710 l
-2522 5710 l
-2517 5710 l
-2512 5710 l
-2507 5710 l
-2502 5710 l
-2497 5709 l
-2492 5709 l
-2487 5709 l
-2482 5709 l
-2476 5708 l
-2471 5708 l
-2466 5708 l
-2461 5708 l
-2456 5707 l
-2451 5707 l
-2446 5707 l
-2441 5706 l
-2435 5706 l
-2430 5705 l
-2425 5705 l
-2420 5704 l
-2415 5704 l
-2410 5703 l
-2404 5703 l
-2399 5702 l
-2394 5702 l
-2389 5701 l
-2384 5701 l
-2379 5700 l
-2373 5700 l
-2368 5699 l
-2363 5698 l
-2358 5698 l
-2353 5697 l
-2347 5696 l
-2342 5695 l
-2337 5695 l
-2332 5694 l
-2327 5693 l
-2321 5692 l
-2316 5692 l
-2311 5691 l
-2306 5690 l
-2301 5689 l
-2295 5688 l
-2290 5687 l
-2285 5686 l
-2280 5685 l
-2275 5684 l
-2269 5683 l
-2264 5682 l
-2259 5681 l
-2254 5680 l
-2249 5679 l
-2243 5678 l
-2238 5677 l
-2233 5676 l
-2228 5675 l
-2223 5674 l
-2217 5673 l
-2212 5671 l
-2207 5670 l
-2202 5669 l
-2197 5668 l
-2191 5666 l
-2186 5665 l
-2181 5664 l
-2176 5663 l
-2171 5661 l
-2165 5660 l
-2160 5658 l
-2155 5657 l
-2150 5656 l
-2145 5654 l
-2139 5653 l
-2134 5651 l
-2129 5650 l
-2124 5648 l
-2119 5647 l
-2113 5645 l
-2108 5644 l
-2103 5642 l
-2098 5641 l
-2093 5639 l
-2088 5637 l
-2082 5636 l
-2077 5634 l
-2072 5632 l
-2067 5631 l
-2062 5629 l
-2057 5627 l
-2052 5625 l
-2046 5624 l
-2041 5622 l
-2036 5620 l
-2031 5618 l
-2026 5616 l
-2021 5614 l
-2016 5612 l
-2011 5610 l
-2005 5609 l
-2000 5607 l
-1995 5605 l
-1990 5603 l
-1985 5601 l
-1980 5599 l
-1975 5597 l
-S
-4756 3875 m
-4759 3878 l
-4759 3882 l
-4759 3887 l
-4759 3891 l
-4759 3896 l
-4759 3900 l
-4759 3905 l
-4759 3909 l
-S
-4759 3909 m
-4759 3913 l
-4759 3918 l
-4759 3922 l
-4759 3927 l
-4759 3931 l
-4759 3936 l
-4759 3940 l
-4759 3945 l
-4759 3949 l
-S
-4759 3949 m
-4759 3954 l
-4759 3958 l
-4759 3963 l
-4759 3967 l
-4759 3972 l
-4759 3976 l
-4759 3981 l
-4759 3985 l
-4759 3989 l
-S
-4759 3989 m
-4759 3994 l
-4759 3998 l
-4759 4003 l
-4759 4007 l
-4759 4012 l
-4759 4016 l
-4759 4021 l
-4759 4025 l
-4759 4030 l
-S
-4756 4041 m
-4759 4039 l
-4759 4034 l
-4759 4030 l
-S
-4716 3545 m
-4718 3547 l
-S
-4718 3547 m
-4718 3551 l
-4718 3556 l
-4718 3560 l
-4718 3565 l
-4721 3567 l
-4723 3569 l
-4723 3574 l
-4723 3578 l
-4723 3583 l
-4723 3587 l
-S
-4723 3587 m
-4723 3592 l
-4725 3594 l
-4727 3596 l
-4727 3601 l
-4727 3605 l
-4727 3610 l
-4727 3614 l
-4730 3616 l
-4732 3619 l
-4732 3623 l
-4732 3627 l
-S
-4732 3627 m
-4732 3632 l
-4732 3636 l
-4732 3641 l
-4732 3645 l
-4734 3648 l
-4736 3650 l
-4736 3654 l
-4736 3659 l
-4736 3663 l
-4736 3668 l
-S
-4736 3668 m
-4736 3672 l
-4736 3677 l
-4738 3679 l
-4741 3681 l
-4741 3686 l
-4741 3690 l
-4741 3694 l
-4741 3699 l
-4741 3703 l
-4741 3708 l
-S
-4741 3708 m
-4743 3710 l
-4745 3712 l
-4745 3717 l
-4745 3721 l
-4745 3726 l
-4745 3730 l
-4745 3735 l
-4745 3739 l
-4745 3744 l
-4745 3748 l
-S
-4745 3748 m
-4747 3750 l
-4750 3753 l
-4750 3757 l
-4750 3762 l
-4750 3766 l
-4750 3770 l
-4750 3775 l
-4750 3779 l
-4750 3784 l
-4750 3788 l
-S
-4750 3788 m
-4750 3793 l
-4750 3797 l
-4752 3800 l
-4754 3802 l
-4754 3806 l
-4754 3811 l
-4754 3815 l
-4754 3820 l
-4754 3824 l
-4754 3829 l
-S
-4754 3829 m
-4754 3833 l
-4754 3838 l
-4754 3842 l
-4754 3846 l
-4754 3851 l
-4754 3855 l
-4754 3860 l
-4754 3864 l
-4754 3869 l
-S
-4754 3869 m
-4754 3873 l
-4756 3875 l
-S
-4754 4070 m
-4754 4065 l
-4754 4061 l
-4754 4056 l
-4754 4052 l
-4754 4048 l
-4754 4043 l
-4756 4041 l
-S
-4754 4070 m
-4754 4074 l
-4754 4079 l
-4754 4083 l
-4754 4088 l
-4754 4092 l
-4754 4097 l
-4754 4101 l
-4754 4106 l
-4754 4110 l
-S
-4754 4110 m
-4754 4115 l
-4752 4117 l
-4750 4119 l
-4750 4124 l
-4750 4128 l
-4750 4132 l
-4750 4137 l
-4750 4141 l
-4750 4146 l
-4750 4150 l
-S
-4750 4150 m
-4750 4155 l
-4750 4159 l
-4750 4164 l
-4750 4168 l
-4747 4170 l
-4745 4173 l
-4745 4177 l
-4745 4182 l
-4745 4186 l
-4745 4191 l
-S
-4745 4191 m
-4745 4195 l
-4745 4199 l
-4745 4204 l
-4745 4208 l
-4743 4211 l
-4741 4213 l
-4741 4217 l
-4741 4222 l
-4741 4226 l
-4741 4231 l
-S
-4741 4231 m
-4741 4235 l
-4741 4240 l
-4738 4242 l
-4736 4244 l
-4736 4249 l
-4736 4253 l
-4736 4258 l
-4736 4262 l
-4736 4267 l
-4736 4271 l
-S
-4736 4271 m
-4734 4273 l
-4732 4275 l
-4732 4280 l
-4732 4284 l
-4732 4289 l
-4732 4293 l
-4732 4298 l
-4730 4300 l
-4727 4302 l
-4727 4307 l
-4727 4311 l
-S
-4727 4311 m
-4727 4316 l
-4727 4320 l
-4727 4325 l
-4725 4327 l
-4723 4329 l
-4723 4334 l
-4723 4338 l
-4723 4342 l
-4723 4347 l
-4721 4349 l
-4718 4351 l
-S
-4716 4372 m
-4718 4369 l
-4718 4365 l
-4718 4360 l
-4718 4356 l
-4718 4351 l
-S
-4676 3384 m
-4678 3386 l
-S
-4678 3386 m
-4678 3391 l
-4678 3395 l
-4680 3397 l
-4683 3400 l
-4683 3404 l
-4683 3408 l
-4683 3413 l
-4685 3415 l
-4687 3417 l
-4687 3422 l
-4687 3426 l
-S
-4687 3426 m
-4687 3431 l
-4689 3433 l
-4692 3435 l
-4692 3440 l
-4692 3444 l
-4692 3449 l
-4694 3451 l
-4696 3453 l
-4696 3458 l
-4696 3462 l
-4696 3467 l
-S
-4696 3467 m
-4698 3469 l
-4701 3471 l
-4701 3476 l
-4701 3480 l
-4701 3484 l
-4703 3487 l
-4705 3489 l
-4705 3493 l
-4705 3498 l
-4705 3502 l
-4707 3505 l
-4709 3507 l
-S
-4709 3507 m
-4709 3511 l
-4709 3516 l
-4709 3520 l
-4709 3525 l
-4712 3527 l
-4714 3529 l
-4714 3534 l
-4714 3538 l
-4714 3543 l
-4716 3545 l
-S
-4714 4392 m
-4714 4387 l
-4714 4383 l
-4714 4378 l
-4714 4374 l
-4716 4372 l
-S
-4714 4392 m
-4712 4394 l
-4709 4396 l
-4709 4401 l
-4709 4405 l
-4709 4410 l
-4709 4414 l
-4707 4416 l
-4705 4418 l
-4705 4423 l
-4705 4427 l
-4705 4432 l
-S
-4705 4432 m
-4703 4434 l
-4701 4436 l
-4701 4441 l
-4701 4445 l
-4701 4450 l
-4698 4452 l
-4696 4454 l
-4696 4459 l
-4696 4463 l
-4696 4468 l
-4694 4470 l
-4692 4472 l
-S
-4692 4472 m
-4692 4477 l
-4692 4481 l
-4692 4486 l
-4689 4488 l
-4687 4490 l
-4687 4494 l
-4687 4499 l
-4687 4503 l
-4685 4506 l
-4683 4508 l
-4683 4512 l
-S
-4676 4537 m
-4678 4535 l
-4678 4530 l
-4678 4526 l
-4678 4521 l
-4680 4519 l
-4683 4517 l
-4683 4512 l
-S
-4636 3259 m
-4638 3261 l
-4638 3265 l
-S
-4638 3265 m
-4638 3270 l
-4640 3272 l
-4642 3274 l
-4642 3279 l
-4642 3283 l
-4645 3286 l
-4647 3288 l
-4647 3292 l
-4647 3297 l
-4649 3299 l
-4651 3301 l
-4651 3306 l
-S
-4651 3306 m
-4651 3310 l
-4654 3312 l
-4656 3315 l
-4656 3319 l
-4656 3324 l
-4658 3326 l
-4660 3328 l
-4660 3333 l
-4660 3337 l
-4663 3339 l
-4665 3341 l
-4665 3346 l
-S
-4665 3346 m
-4665 3350 l
-4667 3353 l
-4669 3355 l
-4669 3359 l
-4669 3364 l
-4669 3368 l
-4671 3371 l
-4674 3373 l
-4674 3377 l
-4674 3382 l
-4676 3384 l
-S
-4669 4553 m
-4671 4550 l
-4674 4548 l
-4674 4544 l
-4674 4539 l
-4676 4537 l
-S
-4669 4553 m
-4669 4557 l
-4669 4561 l
-4669 4566 l
-4667 4568 l
-4665 4570 l
-4665 4575 l
-4665 4579 l
-4663 4582 l
-4660 4584 l
-4660 4588 l
-4660 4593 l
-S
-4660 4593 m
-4658 4595 l
-4656 4597 l
-4656 4602 l
-4656 4606 l
-4654 4608 l
-4651 4611 l
-4651 4615 l
-4651 4620 l
-4649 4622 l
-4647 4624 l
-4647 4629 l
-4647 4633 l
-S
-4636 4662 m
-4638 4660 l
-4638 4655 l
-4638 4651 l
-4640 4649 l
-4642 4646 l
-4642 4642 l
-4642 4637 l
-4645 4635 l
-4647 4633 l
-S
-4595 3156 m
-4598 3158 l
-4598 3163 l
-4598 3167 l
-4600 3169 l
-4602 3172 l
-4602 3176 l
-4604 3178 l
-4607 3181 l
-4607 3185 l
-S
-4607 3185 m
-4607 3190 l
-4609 3192 l
-4611 3194 l
-4611 3198 l
-4613 3201 l
-4616 3203 l
-4616 3207 l
-4616 3212 l
-4618 3214 l
-4620 3216 l
-4620 3221 l
-4622 3223 l
-4625 3225 l
-S
-4625 3225 m
-4625 3230 l
-4625 3234 l
-4627 3236 l
-4629 3239 l
-4629 3243 l
-4629 3248 l
-4631 3250 l
-4633 3252 l
-4633 3257 l
-4636 3259 l
-S
-4629 4673 m
-4631 4671 l
-4633 4669 l
-4633 4664 l
-4636 4662 l
-S
-4629 4673 m
-4629 4678 l
-4629 4682 l
-4627 4684 l
-4625 4687 l
-4625 4691 l
-4625 4696 l
-4622 4698 l
-4620 4700 l
-4620 4704 l
-4618 4707 l
-4616 4709 l
-4616 4713 l
-S
-4616 4713 m
-4616 4718 l
-4613 4720 l
-4611 4722 l
-4611 4727 l
-4609 4729 l
-4607 4731 l
-4607 4736 l
-4607 4740 l
-4604 4742 l
-4602 4745 l
-4602 4749 l
-4600 4751 l
-4598 4754 l
-S
-4595 4765 m
-4598 4763 l
-4598 4758 l
-4598 4754 l
-S
-4555 3067 m
-4557 3069 l
-4557 3073 l
-4560 3076 l
-4562 3078 l
-4562 3082 l
-4562 3087 l
-4564 3089 l
-4566 3091 l
-4566 3096 l
-4569 3098 l
-4571 3100 l
-4571 3105 l
-S
-4571 3105 m
-4573 3107 l
-4575 3109 l
-4575 3114 l
-4578 3116 l
-4580 3118 l
-4580 3122 l
-4582 3125 l
-4584 3127 l
-4584 3131 l
-4584 3136 l
-4587 3138 l
-4589 3140 l
-4589 3145 l
-S
-4589 3145 m
-4591 3147 l
-4593 3149 l
-4593 3154 l
-4595 3156 l
-S
-4580 4794 m
-4582 4792 l
-4584 4789 l
-4584 4785 l
-4587 4783 l
-4589 4780 l
-4589 4776 l
-4591 4774 l
-4593 4772 l
-4593 4767 l
-4595 4765 l
-S
-4580 4794 m
-4580 4798 l
-4580 4803 l
-4578 4805 l
-4575 4807 l
-4575 4812 l
-4573 4814 l
-4571 4816 l
-4571 4821 l
-4569 4823 l
-4566 4825 l
-4566 4830 l
-4564 4832 l
-4562 4834 l
-S
-4555 4854 m
-4557 4852 l
-4557 4847 l
-4557 4843 l
-4560 4841 l
-4562 4839 l
-4562 4834 l
-S
-4515 2991 m
-4517 2993 l
-4520 2995 l
-4522 2997 l
-4522 3002 l
-4524 3004 l
-4526 3006 l
-4526 3011 l
-4528 3013 l
-4531 3015 l
-4531 3020 l
-4533 3022 l
-4535 3024 l
-S
-4535 3024 m
-4535 3029 l
-4537 3031 l
-4540 3033 l
-4540 3038 l
-4542 3040 l
-4544 3042 l
-4544 3047 l
-4546 3049 l
-4549 3051 l
-4549 3055 l
-4551 3058 l
-4553 3060 l
-4553 3064 l
-S
-4555 3067 m
-4553 3064 l
-S
-4544 4874 m
-4546 4872 l
-4549 4870 l
-4549 4865 l
-4551 4863 l
-4553 4861 l
-4553 4856 l
-4555 4854 l
-S
-4544 4874 m
-4544 4879 l
-4542 4881 l
-4540 4883 l
-4540 4888 l
-4537 4890 l
-4535 4892 l
-4535 4897 l
-4533 4899 l
-4531 4901 l
-4531 4906 l
-4528 4908 l
-4526 4910 l
-4526 4915 l
-S
-4515 4930 m
-4517 4928 l
-4517 4923 l
-4520 4921 l
-4522 4919 l
-4524 4917 l
-4526 4915 l
-S
-4475 2915 m
-4477 2917 l
-4477 2921 l
-4479 2924 l
-4482 2926 l
-4482 2930 l
-4484 2933 l
-4486 2935 l
-4486 2939 l
-4488 2941 l
-4490 2944 l
-S
-4490 2944 m
-4493 2946 l
-4495 2948 l
-4495 2953 l
-4497 2955 l
-4499 2957 l
-4499 2962 l
-4502 2964 l
-4504 2966 l
-4504 2971 l
-4506 2973 l
-4508 2975 l
-4508 2979 l
-4511 2982 l
-4513 2984 l
-S
-4513 2984 m
-4513 2988 l
-4515 2991 l
-S
-4504 4955 m
-4504 4950 l
-4506 4948 l
-4508 4946 l
-4508 4941 l
-4511 4939 l
-4513 4937 l
-4513 4932 l
-4515 4930 l
-S
-4504 4955 m
-4502 4957 l
-4499 4959 l
-4499 4964 l
-4497 4966 l
-4495 4968 l
-4493 4970 l
-4490 4973 l
-4490 4977 l
-4488 4979 l
-4486 4982 l
-4486 4986 l
-4484 4988 l
-4482 4990 l
-4482 4995 l
-S
-4475 5002 m
-4477 4999 l
-4479 4997 l
-4482 4995 l
-S
-4435 2852 m
-4437 2854 l
-4439 2857 l
-4441 2859 l
-4441 2863 l
-S
-4441 2863 m
-4444 2866 l
-4446 2868 l
-4448 2870 l
-4450 2872 l
-4450 2877 l
-4452 2879 l
-4455 2881 l
-4455 2886 l
-4457 2888 l
-4459 2890 l
-4461 2892 l
-4464 2895 l
-4464 2899 l
-4466 2901 l
-4468 2903 l
-S
-4468 2903 m
-4468 2908 l
-4470 2910 l
-4473 2912 l
-4475 2915 l
-S
-4455 5035 m
-4457 5033 l
-4459 5031 l
-4459 5026 l
-4461 5024 l
-4464 5022 l
-4466 5020 l
-4468 5017 l
-4468 5013 l
-4470 5011 l
-4473 5008 l
-4473 5004 l
-4475 5002 l
-S
-4435 5069 m
-4437 5066 l
-4439 5064 l
-4441 5062 l
-4441 5058 l
-4444 5055 l
-4446 5053 l
-4446 5049 l
-4448 5046 l
-4450 5044 l
-4452 5042 l
-4455 5040 l
-4455 5035 l
-S
-4394 2790 m
-4397 2792 l
-4397 2796 l
-4399 2798 l
-4401 2801 l
-4403 2803 l
-4406 2805 l
-4406 2810 l
-4408 2812 l
-4410 2814 l
-4412 2816 l
-4414 2819 l
-4414 2823 l
-S
-4414 2823 m
-4417 2825 l
-4419 2828 l
-4421 2830 l
-4423 2832 l
-4423 2836 l
-4426 2839 l
-4428 2841 l
-4430 2843 l
-4432 2845 l
-4432 2850 l
-4435 2852 l
-S
-4432 5075 m
-4432 5071 l
-4435 5069 l
-S
-4432 5075 m
-4430 5078 l
-4428 5080 l
-4426 5082 l
-4423 5084 l
-4423 5089 l
-4421 5091 l
-4419 5093 l
-4417 5096 l
-4414 5098 l
-4414 5102 l
-4412 5104 l
-4410 5107 l
-4408 5109 l
-4406 5111 l
-4406 5116 l
-S
-4394 5131 m
-4397 5129 l
-4397 5125 l
-4399 5122 l
-4401 5120 l
-4403 5118 l
-4406 5116 l
-S
-4354 2736 m
-4356 2738 l
-4359 2740 l
-4361 2743 l
-S
-4361 2743 m
-4363 2745 l
-4365 2747 l
-4365 2752 l
-4368 2754 l
-4370 2756 l
-4372 2758 l
-4374 2760 l
-4377 2763 l
-4379 2765 l
-4379 2769 l
-4381 2772 l
-4383 2774 l
-4385 2776 l
-4388 2778 l
-4388 2783 l
-S
-4388 2783 m
-4390 2785 l
-4392 2787 l
-4394 2790 l
-S
-4374 5156 m
-4377 5154 l
-4379 5151 l
-4381 5149 l
-4383 5147 l
-4385 5145 l
-4388 5142 l
-4388 5138 l
-4390 5136 l
-4392 5133 l
-4394 5131 l
-S
-4354 5185 m
-4356 5183 l
-4359 5180 l
-4361 5178 l
-4363 5176 l
-4365 5174 l
-4365 5169 l
-4368 5167 l
-4370 5165 l
-4372 5163 l
-4374 5160 l
-4374 5156 l
-S
-4314 2682 m
-4316 2685 l
-4318 2687 l
-4321 2689 l
-4323 2691 l
-4325 2693 l
-4325 2698 l
-4327 2700 l
-4330 2702 l
-S
-4330 2702 m
-4332 2705 l
-4334 2707 l
-4336 2709 l
-4339 2711 l
-4339 2716 l
-4341 2718 l
-4343 2720 l
-4345 2723 l
-4347 2725 l
-4350 2727 l
-4352 2729 l
-4352 2734 l
-4354 2736 l
-S
-4347 5196 m
-4350 5194 l
-4352 5192 l
-4352 5187 l
-4354 5185 l
-S
-4347 5196 m
-4345 5198 l
-4343 5201 l
-4341 5203 l
-4339 5205 l
-4339 5209 l
-4336 5212 l
-4334 5214 l
-4332 5216 l
-4330 5218 l
-4327 5221 l
-4325 5223 l
-4325 5227 l
-4323 5230 l
-4321 5232 l
-4318 5234 l
-4316 5236 l
-S
-4314 5239 m
-4316 5236 l
-S
-4274 2633 m
-4276 2635 l
-4278 2638 l
-4280 2640 l
-4283 2642 l
-4285 2644 l
-4287 2647 l
-4289 2649 l
-4289 2653 l
-4292 2655 l
-4294 2658 l
-4296 2660 l
-4298 2662 l
-S
-4298 2662 m
-4301 2664 l
-4303 2667 l
-4305 2669 l
-4307 2671 l
-4309 2673 l
-4312 2676 l
-4312 2680 l
-4314 2682 l
-S
-4314 5239 m
-4312 5241 l
-4309 5243 l
-4307 5245 l
-4307 5250 l
-4305 5252 l
-4303 5254 l
-4301 5256 l
-4298 5259 l
-4296 5261 l
-4294 5263 l
-4292 5265 l
-4289 5268 l
-4289 5272 l
-4287 5274 l
-4285 5277 l
-S
-4274 5288 m
-4276 5285 l
-4278 5283 l
-4280 5281 l
-4283 5279 l
-4285 5277 l
-S
-4233 2584 m
-4236 2586 l
-4238 2588 l
-4240 2591 l
-4240 2595 l
-4242 2597 l
-4245 2600 l
-4247 2602 l
-4249 2604 l
-4251 2606 l
-4254 2609 l
-4256 2611 l
-4258 2613 l
-4260 2615 l
-4263 2617 l
-4265 2620 l
-4267 2622 l
-S
-4267 2622 m
-4267 2626 l
-4269 2629 l
-4271 2631 l
-4274 2633 l
-S
-4249 5317 m
-4251 5314 l
-4254 5312 l
-4256 5310 l
-4258 5308 l
-4260 5306 l
-4263 5303 l
-4265 5301 l
-4267 5299 l
-4267 5294 l
-4269 5292 l
-4271 5290 l
-4274 5288 l
-S
-4233 5337 m
-4236 5335 l
-4236 5330 l
-4238 5328 l
-4240 5326 l
-4242 5323 l
-4245 5321 l
-4247 5319 l
-4249 5317 l
-S
-4193 2544 m
-4196 2546 l
-4198 2548 l
-4200 2550 l
-4202 2553 l
-4204 2555 l
-4207 2557 l
-4209 2559 l
-4211 2562 l
-4213 2564 l
-4216 2566 l
-4218 2568 l
-4220 2571 l
-4222 2573 l
-4225 2575 l
-4227 2577 l
-4229 2579 l
-4231 2582 l
-S
-4233 2584 m
-4231 2582 l
-S
-4213 5357 m
-4216 5355 l
-4218 5352 l
-4220 5350 l
-4222 5348 l
-4225 5346 l
-4227 5344 l
-4229 5341 l
-4231 5339 l
-4233 5337 l
-S
-4193 5377 m
-4196 5375 l
-4198 5373 l
-4200 5370 l
-4202 5368 l
-4204 5366 l
-4207 5364 l
-4209 5361 l
-4211 5359 l
-4213 5357 l
-S
-4153 2499 m
-4155 2501 l
-S
-4155 2501 m
-4158 2504 l
-4160 2506 l
-4162 2508 l
-4164 2510 l
-4166 2512 l
-4169 2515 l
-4171 2517 l
-4173 2519 l
-4175 2521 l
-4178 2524 l
-4180 2526 l
-4182 2528 l
-4184 2530 l
-4187 2533 l
-4189 2535 l
-4191 2537 l
-4191 2542 l
-S
-4193 2544 m
-4191 2542 l
-S
-4173 5397 m
-4175 5395 l
-4178 5393 l
-4180 5390 l
-4182 5388 l
-4184 5386 l
-4187 5384 l
-4189 5382 l
-4191 5379 l
-4193 5377 l
-S
-4153 5422 m
-4155 5420 l
-4158 5417 l
-4160 5415 l
-4162 5413 l
-4164 5411 l
-4166 5408 l
-4169 5406 l
-4171 5404 l
-4173 5402 l
-4173 5397 l
-S
-4113 2463 m
-4117 2463 l
-4120 2466 l
-4122 2468 l
-4124 2470 l
-4126 2472 l
-4128 2474 l
-4131 2477 l
-4133 2479 l
-4135 2481 l
-4137 2483 l
-4140 2486 l
-4142 2488 l
-4144 2490 l
-4146 2492 l
-4149 2495 l
-4151 2497 l
-4153 2499 l
-S
-4137 5437 m
-4140 5435 l
-4142 5433 l
-4144 5431 l
-4146 5428 l
-4149 5426 l
-4151 5424 l
-4153 5422 l
-S
-4113 5457 m
-4115 5455 l
-4117 5453 l
-4120 5451 l
-4122 5449 l
-4124 5446 l
-4126 5444 l
-4128 5442 l
-4131 5440 l
-4135 5440 l
-4137 5437 l
-S
-4073 2423 m
-4075 2425 l
-4077 2428 l
-4079 2430 l
-4082 2432 l
-4084 2434 l
-4086 2436 l
-4088 2439 l
-4090 2441 l
-4093 2443 l
-4095 2445 l
-4097 2448 l
-4099 2450 l
-4102 2452 l
-4104 2454 l
-4106 2457 l
-4108 2459 l
-4111 2461 l
-S
-4113 2463 m
-4111 2461 l
-S
-4093 5478 m
-4095 5475 l
-4097 5473 l
-4099 5471 l
-4102 5469 l
-4104 5466 l
-4106 5464 l
-4108 5462 l
-4111 5460 l
-4113 5457 l
-S
-4073 5498 m
-4075 5495 l
-4077 5493 l
-4079 5491 l
-4082 5489 l
-4084 5487 l
-4086 5484 l
-4088 5482 l
-4090 5480 l
-4093 5478 l
-S
-4032 2387 m
-4035 2390 l
-4037 2392 l
-4039 2394 l
-4041 2396 l
-4044 2399 l
-4046 2401 l
-4048 2403 l
-4050 2405 l
-4053 2407 l
-4055 2410 l
-4057 2412 l
-4059 2414 l
-4064 2414 l
-4066 2416 l
-4068 2419 l
-4070 2421 l
-S
-4073 2423 m
-4070 2421 l
-S
-4048 5518 m
-4050 5516 l
-4053 5513 l
-4055 5511 l
-4057 5509 l
-4059 5507 l
-4061 5504 l
-4064 5502 l
-4068 5502 l
-4070 5500 l
-4073 5498 l
-S
-4032 5529 m
-4037 5529 l
-4039 5527 l
-4041 5525 l
-4044 5522 l
-4046 5520 l
-4048 5518 l
-S
-3992 2356 m
-3994 2358 l
-3997 2361 l
-3999 2363 l
-4001 2365 l
-4006 2365 l
-4008 2367 l
-4010 2369 l
-4012 2372 l
-4015 2374 l
-4017 2376 l
-4019 2378 l
-4021 2381 l
-S
-4021 2381 m
-4023 2383 l
-4026 2385 l
-4028 2387 l
-4032 2387 l
-S
-3999 5558 m
-4001 5556 l
-4006 5556 l
-4008 5554 l
-4010 5551 l
-4012 5549 l
-4015 5547 l
-4017 5545 l
-4019 5542 l
-4021 5540 l
-4023 5538 l
-4026 5536 l
-4028 5533 l
-4030 5531 l
-4032 5529 l
-S
-3992 5565 m
-3994 5563 l
-3997 5560 l
-3999 5558 l
-S
-3952 2325 m
-3954 2327 l
-3956 2329 l
-3961 2329 l
-3963 2331 l
-3965 2334 l
-3968 2336 l
-3970 2338 l
-3972 2340 l
-S
-3972 2340 m
-3974 2343 l
-3979 2343 l
-3981 2345 l
-3983 2347 l
-3985 2349 l
-3988 2352 l
-3990 2354 l
-3992 2356 l
-S
-3952 5596 m
-3954 5594 l
-3956 5592 l
-3961 5592 l
-3963 5589 l
-3965 5587 l
-3968 5585 l
-3970 5583 l
-3972 5580 l
-3974 5578 l
-3977 5576 l
-3979 5574 l
-3983 5574 l
-3985 5571 l
-3988 5569 l
-3990 5567 l
-3992 5565 l
-S
-3912 2293 m
-3914 2296 l
-3916 2298 l
-3918 2300 l
-S
-3918 2300 m
-3921 2302 l
-3925 2302 l
-3927 2305 l
-3930 2307 l
-3932 2309 l
-3934 2311 l
-3936 2314 l
-3939 2316 l
-3943 2316 l
-3945 2318 l
-3947 2320 l
-3950 2323 l
-3952 2325 l
-S
-3950 5598 m
-3952 5596 l
-S
-3912 5627 m
-3914 5625 l
-3916 5623 l
-3918 5621 l
-3921 5618 l
-3925 5618 l
-3927 5616 l
-3930 5614 l
-3932 5612 l
-3934 5609 l
-3936 5607 l
-3939 5605 l
-3943 5605 l
-3945 5603 l
-3947 5601 l
-3950 5598 l
-S
-3872 2267 m
-3876 2267 l
-3878 2269 l
-3880 2271 l
-3883 2273 l
-3885 2276 l
-3889 2276 l
-3892 2278 l
-3894 2280 l
-3896 2282 l
-3898 2285 l
-3901 2287 l
-3903 2289 l
-3907 2289 l
-3909 2291 l
-3912 2293 l
-S
-3896 5638 m
-3898 5636 l
-3901 5634 l
-3903 5632 l
-3907 5632 l
-3909 5630 l
-3912 5627 l
-S
-3872 5654 m
-3876 5654 l
-3878 5652 l
-3880 5650 l
-3883 5647 l
-3885 5645 l
-3887 5643 l
-3889 5641 l
-3894 5641 l
-3896 5638 l
-S
-3831 2240 m
-3836 2240 l
-3838 2242 l
-3840 2244 l
-3842 2247 l
-3845 2249 l
-3849 2249 l
-3851 2251 l
-3854 2253 l
-3856 2256 l
-3858 2258 l
-3863 2258 l
-3865 2260 l
-S
-3865 2260 m
-3867 2262 l
-3869 2264 l
-3872 2267 l
-S
-3838 5679 m
-3840 5676 l
-3842 5674 l
-3845 5672 l
-3849 5672 l
-3851 5670 l
-3854 5668 l
-3856 5665 l
-3858 5663 l
-3863 5663 l
-3865 5661 l
-3867 5659 l
-3869 5656 l
-3872 5654 l
-S
-3831 5681 m
-3836 5681 l
-3838 5679 l
-S
-3791 2213 m
-3796 2213 l
-3798 2215 l
-3800 2218 l
-3802 2220 l
-S
-3802 2220 m
-3804 2222 l
-3809 2222 l
-3811 2224 l
-3813 2226 l
-3816 2229 l
-3818 2231 l
-3822 2231 l
-3825 2233 l
-3827 2235 l
-3829 2238 l
-3831 2240 l
-S
-3831 5681 m
-3829 5683 l
-3827 5685 l
-3825 5688 l
-3822 5690 l
-3818 5690 l
-3816 5692 l
-3813 5694 l
-3811 5697 l
-3809 5699 l
-3804 5699 l
-3802 5701 l
-3800 5703 l
-3796 5703 l
-3793 5706 l
-3791 5708 l
-S
-3751 2186 m
-3753 2188 l
-3755 2191 l
-3760 2191 l
-3762 2193 l
-3764 2195 l
-3766 2197 l
-3769 2200 l
-3773 2200 l
-3775 2202 l
-3778 2204 l
-3782 2204 l
-3784 2206 l
-3787 2209 l
-3789 2211 l
-3791 2213 l
-S
-3775 5719 m
-3778 5717 l
-3780 5714 l
-3782 5712 l
-3787 5712 l
-3789 5710 l
-3791 5708 l
-S
-3751 5735 m
-3753 5732 l
-3755 5730 l
-3758 5728 l
-3760 5726 l
-3764 5726 l
-3766 5723 l
-3769 5721 l
-3773 5721 l
-3775 5719 l
-S
-3711 2164 m
-3713 2166 l
-3715 2168 l
-3720 2168 l
-3722 2171 l
-3724 2173 l
-3729 2173 l
-3731 2175 l
-3733 2177 l
-3737 2177 l
-3740 2180 l
-S
-3740 2180 m
-3742 2182 l
-3744 2184 l
-3746 2186 l
-3751 2186 l
-S
-3711 5757 m
-3713 5755 l
-3715 5752 l
-3720 5752 l
-3722 5750 l
-3724 5748 l
-3729 5748 l
-3731 5746 l
-3733 5744 l
-3735 5741 l
-3737 5739 l
-3742 5739 l
-3744 5737 l
-3746 5735 l
-3751 5735 l
-S
-3670 2142 m
-3673 2144 l
-3675 2146 l
-3679 2146 l
-3682 2148 l
-3684 2150 l
-3688 2150 l
-3691 2153 l
-3693 2155 l
-3697 2155 l
-3699 2157 l
-3702 2159 l
-3706 2159 l
-3708 2162 l
-3711 2164 l
-S
-3704 5759 m
-3706 5757 l
-3711 5757 l
-S
-3670 5779 m
-3673 5777 l
-3675 5775 l
-3679 5775 l
-3682 5773 l
-3684 5770 l
-3688 5770 l
-3691 5768 l
-3693 5766 l
-3697 5766 l
-3699 5764 l
-3702 5761 l
-3704 5759 l
-S
-3630 2119 m
-3632 2121 l
-3635 2124 l
-3639 2124 l
-3641 2126 l
-3644 2128 l
-3648 2128 l
-3650 2130 l
-3653 2133 l
-3657 2133 l
-3659 2135 l
-3661 2137 l
-3664 2139 l
-S
-3670 2142 m
-3666 2142 l
-3664 2139 l
-S
-3630 5797 m
-3635 5797 l
-3637 5795 l
-3639 5793 l
-3644 5793 l
-3646 5790 l
-3648 5788 l
-3653 5788 l
-3655 5786 l
-3657 5784 l
-3661 5784 l
-3664 5781 l
-3666 5779 l
-3670 5779 l
-S
-3590 2101 m
-3594 2101 l
-3597 2104 l
-3599 2106 l
-3603 2106 l
-3606 2108 l
-3608 2110 l
-3612 2110 l
-3615 2112 l
-3617 2115 l
-3621 2115 l
-3623 2117 l
-3626 2119 l
-3630 2119 l
-S
-3628 5799 m
-3630 5797 l
-S
-3590 5819 m
-3592 5817 l
-3594 5815 l
-3599 5815 l
-3601 5813 l
-3603 5811 l
-3608 5811 l
-3612 5811 l
-3615 5808 l
-3617 5806 l
-3621 5806 l
-3623 5804 l
-3626 5802 l
-3628 5799 l
-S
-3550 2083 m
-3554 2083 l
-3556 2086 l
-3559 2088 l
-3563 2088 l
-3565 2090 l
-3568 2092 l
-3572 2092 l
-3577 2092 l
-3579 2095 l
-3581 2097 l
-3585 2097 l
-3588 2099 l
-S
-3590 2101 m
-3588 2099 l
-S
-3550 5837 m
-3554 5837 l
-3556 5835 l
-3559 5833 l
-3563 5833 l
-3565 5831 l
-3568 5828 l
-3572 5828 l
-3574 5826 l
-3577 5824 l
-3581 5824 l
-3583 5822 l
-3585 5819 l
-3590 5819 l
-S
-3510 2066 m
-3514 2066 l
-3516 2068 l
-3518 2070 l
-3523 2070 l
-3527 2070 l
-3530 2072 l
-3532 2075 l
-3536 2075 l
-3539 2077 l
-3541 2079 l
-3545 2079 l
-3548 2081 l
-3550 2083 l
-S
-3548 5840 m
-3550 5837 l
-S
-3510 5855 m
-3514 5855 l
-3516 5853 l
-3518 5851 l
-3523 5851 l
-3525 5849 l
-3527 5846 l
-3532 5846 l
-3536 5846 l
-3539 5844 l
-3541 5842 l
-3545 5842 l
-3548 5840 l
-S
-3469 2048 m
-3474 2048 l
-3476 2050 l
-3478 2052 l
-3483 2052 l
-3485 2054 l
-3487 2057 l
-3492 2057 l
-3496 2057 l
-3498 2059 l
-S
-3498 2059 m
-3501 2061 l
-3505 2061 l
-3507 2063 l
-3510 2066 l
-S
-3469 5873 m
-3472 5871 l
-3474 5869 l
-3478 5869 l
-3483 5869 l
-3485 5866 l
-3487 5864 l
-3492 5864 l
-3494 5862 l
-3496 5860 l
-3501 5860 l
-3505 5860 l
-3507 5857 l
-3510 5855 l
-S
-3429 2030 m
-3431 2032 l
-3434 2034 l
-3438 2034 l
-3440 2037 l
-3442 2039 l
-3447 2039 l
-3451 2039 l
-3454 2041 l
-3456 2043 l
-3460 2043 l
-3463 2045 l
-3465 2048 l
-3469 2048 l
-S
-3454 5880 m
-3456 5878 l
-3460 5878 l
-3463 5875 l
-3465 5873 l
-3469 5873 l
-S
-3429 5887 m
-3434 5887 l
-3438 5887 l
-3440 5884 l
-3442 5882 l
-3447 5882 l
-3451 5882 l
-3454 5880 l
-S
-3389 2016 m
-3393 2016 l
-3396 2019 l
-S
-3396 2019 m
-3398 2021 l
-3402 2021 l
-3405 2023 l
-3407 2025 l
-3411 2025 l
-3416 2025 l
-3418 2028 l
-3420 2030 l
-3425 2030 l
-3429 2030 l
-S
-3389 5904 m
-3391 5902 l
-3393 5900 l
-3398 5900 l
-3402 5900 l
-3405 5898 l
-3407 5895 l
-3411 5895 l
-3416 5895 l
-3418 5893 l
-3420 5891 l
-3425 5891 l
-3427 5889 l
-3429 5887 l
-S
-3349 2003 m
-3353 2003 l
-3355 2005 l
-3358 2007 l
-3362 2007 l
-3367 2007 l
-3369 2010 l
-3371 2012 l
-3375 2012 l
-3380 2012 l
-3382 2014 l
-3384 2016 l
-3389 2016 l
-S
-3349 5918 m
-3353 5918 l
-3355 5916 l
-3358 5913 l
-3362 5913 l
-3367 5913 l
-3369 5911 l
-3371 5909 l
-3375 5909 l
-3378 5907 l
-3380 5904 l
-3384 5904 l
-3389 5904 l
-S
-3308 1990 m
-3313 1990 l
-3315 1992 l
-3317 1994 l
-3322 1994 l
-3326 1994 l
-3329 1996 l
-3331 1999 l
-3335 1999 l
-3340 1999 l
-3342 2001 l
-3344 2003 l
-3349 2003 l
-S
-3342 5920 m
-3344 5918 l
-3349 5918 l
-S
-3308 5931 m
-3311 5929 l
-3313 5927 l
-3317 5927 l
-3322 5927 l
-3326 5927 l
-3329 5925 l
-3331 5922 l
-3335 5922 l
-3340 5922 l
-3342 5920 l
-S
-3268 1976 m
-3270 1978 l
-S
-3270 1978 m
-3273 1981 l
-3277 1981 l
-3282 1981 l
-3284 1983 l
-3286 1985 l
-3291 1985 l
-3295 1985 l
-3299 1985 l
-3302 1987 l
-3304 1990 l
-3308 1990 l
-S
-3268 5940 m
-3273 5940 l
-3277 5940 l
-3282 5940 l
-3284 5938 l
-3286 5936 l
-3291 5936 l
-3295 5936 l
-3297 5933 l
-3299 5931 l
-3304 5931 l
-3308 5931 l
-S
-3228 1967 m
-3232 1967 l
-3237 1967 l
-3239 1969 l
-3241 1972 l
-3246 1972 l
-3250 1972 l
-3255 1972 l
-3257 1974 l
-3259 1976 l
-3264 1976 l
-3268 1976 l
-S
-3228 5954 m
-3232 5954 l
-3235 5951 l
-3237 5949 l
-3241 5949 l
-3246 5949 l
-3250 5949 l
-3253 5947 l
-3255 5945 l
-3259 5945 l
-3264 5945 l
-3266 5942 l
-3268 5940 l
-S
-3188 1958 m
-3192 1958 l
-3197 1958 l
-3201 1958 l
-3203 1961 l
-3206 1963 l
-3210 1963 l
-3215 1963 l
-3219 1963 l
-3221 1965 l
-3224 1967 l
-3228 1967 l
-S
-3203 5960 m
-3206 5958 l
-3210 5958 l
-3215 5958 l
-3219 5958 l
-3221 5956 l
-3224 5954 l
-3228 5954 l
-S
-3188 5962 m
-3192 5962 l
-3197 5962 l
-3201 5962 l
-3203 5960 l
-S
-3148 1945 m
-3150 1947 l
-3152 1949 l
-3156 1949 l
-3161 1949 l
-3165 1949 l
-3168 1952 l
-3170 1954 l
-3174 1954 l
-3179 1954 l
-3183 1954 l
-3186 1956 l
-3188 1958 l
-S
-3188 5962 m
-3186 5965 l
-3183 5967 l
-3179 5967 l
-3174 5967 l
-3170 5967 l
-3168 5969 l
-3165 5971 l
-3161 5971 l
-3156 5971 l
-3152 5971 l
-3148 5971 l
-S
-3107 1936 m
-3110 1938 l
-S
-3110 1938 m
-3112 1940 l
-3116 1940 l
-3121 1940 l
-3125 1940 l
-3127 1943 l
-3130 1945 l
-3134 1945 l
-3139 1945 l
-3143 1945 l
-3148 1945 l
-S
-3107 5980 m
-3112 5980 l
-3116 5980 l
-3121 5980 l
-3125 5980 l
-3127 5978 l
-3130 5976 l
-3134 5976 l
-3139 5976 l
-3143 5976 l
-3145 5974 l
-3148 5971 l
-S
-3067 1932 m
-3072 1932 l
-3076 1932 l
-3081 1932 l
-3085 1932 l
-3087 1934 l
-3089 1936 l
-3094 1936 l
-3098 1936 l
-3103 1936 l
-3107 1936 l
-S
-3067 5989 m
-3072 5989 l
-3076 5989 l
-3081 5989 l
-3083 5987 l
-3085 5985 l
-3089 5985 l
-3094 5985 l
-3098 5985 l
-3103 5985 l
-3105 5983 l
-3107 5980 l
-S
-3027 1923 m
-3031 1923 l
-3036 1923 l
-3038 1925 l
-3040 1927 l
-3045 1927 l
-3049 1927 l
-3054 1927 l
-3058 1927 l
-3060 1929 l
-3063 1932 l
-3067 1932 l
-S
-3027 5998 m
-3031 5998 l
-3034 5996 l
-3036 5994 l
-3040 5994 l
-3045 5994 l
-3049 5994 l
-3054 5994 l
-3056 5992 l
-3058 5989 l
-3063 5989 l
-3067 5989 l
-S
-2987 1918 m
-2991 1918 l
-2996 1918 l
-3000 1918 l
-3005 1918 l
-3007 1920 l
-3009 1923 l
-3013 1923 l
-3018 1923 l
-3022 1923 l
-3027 1923 l
-S
-3002 6000 m
-3005 5998 l
-3009 5998 l
-3013 5998 l
-3018 5998 l
-3022 5998 l
-3027 5998 l
-S
-2987 6003 m
-2991 6003 l
-2996 6003 l
-3000 6003 l
-3002 6000 l
-S
-2946 1914 m
-2951 1914 l
-2955 1914 l
-2960 1914 l
-2964 1914 l
-2969 1914 l
-2973 1914 l
-2975 1916 l
-2978 1918 l
-2982 1918 l
-2987 1918 l
-S
-2987 6003 m
-2982 6003 l
-2978 6003 l
-2973 6003 l
-2971 6005 l
-2969 6007 l
-2964 6007 l
-2960 6007 l
-2955 6007 l
-2951 6007 l
-2946 6007 l
-S
-2906 1909 m
-2911 1909 l
-2915 1909 l
-2920 1909 l
-2924 1909 l
-2929 1909 l
-2933 1909 l
-2938 1909 l
-2942 1909 l
-2944 1911 l
-2946 1914 l
-S
-2906 6012 m
-2911 6012 l
-2915 6012 l
-2920 6012 l
-2924 6012 l
-2929 6012 l
-2933 6012 l
-2935 6009 l
-2938 6007 l
-2942 6007 l
-2946 6007 l
-S
-2866 1905 m
-2870 1905 l
-2875 1905 l
-2879 1905 l
-2884 1905 l
-2888 1905 l
-2893 1905 l
-2897 1905 l
-2902 1905 l
-2904 1907 l
-2906 1909 l
-S
-2866 6016 m
-2870 6016 l
-2875 6016 l
-2879 6016 l
-2884 6016 l
-2888 6016 l
-2893 6016 l
-2895 6014 l
-2897 6012 l
-2902 6012 l
-2906 6012 l
-S
-2826 1900 m
-2830 1900 l
-2835 1900 l
-2839 1900 l
-2844 1900 l
-2848 1900 l
-2853 1900 l
-2855 1902 l
-2857 1905 l
-2862 1905 l
-2866 1905 l
-S
-2826 6021 m
-2830 6021 l
-2835 6021 l
-2839 6021 l
-2841 6018 l
-2844 6016 l
-2848 6016 l
-2853 6016 l
-2857 6016 l
-2862 6016 l
-2866 6016 l
-S
-2826 1900 m
-2821 1900 l
-2817 1900 l
-2812 1900 l
-2808 1900 l
-2803 1900 l
-2799 1900 l
-2794 1900 l
-2790 1900 l
-2786 1900 l
-S
-2786 6021 m
-2790 6021 l
-2794 6021 l
-2799 6021 l
-2803 6021 l
-2808 6021 l
-2812 6021 l
-2817 6021 l
-2821 6021 l
-2826 6021 l
-S
-2745 1896 m
-2750 1896 l
-2754 1896 l
-2759 1896 l
-2763 1896 l
-2768 1896 l
-2772 1896 l
-2777 1896 l
-2779 1898 l
-S
-2786 1900 m
-2781 1900 l
-2779 1898 l
-S
-2745 6025 m
-2750 6025 l
-2754 6025 l
-2757 6023 l
-2759 6021 l
-2763 6021 l
-2768 6021 l
-2772 6021 l
-2777 6021 l
-2781 6021 l
-2786 6021 l
-S
-2705 1896 m
-2710 1896 l
-2714 1896 l
-2719 1896 l
-2723 1896 l
-2727 1896 l
-2732 1896 l
-2736 1896 l
-2741 1896 l
-2745 1896 l
-S
-2705 6025 m
-2710 6025 l
-2714 6025 l
-2719 6025 l
-2723 6025 l
-2727 6025 l
-2732 6025 l
-2736 6025 l
-2741 6025 l
-2745 6025 l
-S
-2665 1896 m
-2669 1896 l
-2674 1896 l
-2678 1896 l
-2683 1896 l
-2687 1896 l
-2692 1896 l
-2696 1896 l
-2701 1896 l
-2705 1896 l
-S
-2665 6025 m
-2669 6025 l
-2674 6025 l
-2678 6025 l
-2683 6025 l
-2687 6025 l
-2692 6025 l
-2696 6025 l
-2701 6025 l
-2705 6025 l
-S
-2625 1896 m
-2629 1896 l
-2634 1896 l
-2638 1896 l
-2643 1896 l
-2647 1896 l
-2651 1896 l
-2656 1896 l
-2660 1896 l
-2665 1896 l
-S
-2625 6021 m
-2629 6021 l
-2631 6023 l
-2634 6025 l
-2638 6025 l
-2643 6025 l
-2647 6025 l
-2651 6025 l
-2656 6025 l
-2660 6025 l
-2665 6025 l
-S
-2614 1898 m
-2616 1896 l
-2620 1896 l
-2625 1896 l
-S
-2584 1900 m
-2589 1900 l
-2593 1900 l
-2598 1900 l
-2602 1900 l
-2607 1900 l
-2611 1900 l
-2614 1898 l
-S
-2584 6021 m
-2589 6021 l
-2593 6021 l
-2598 6021 l
-2602 6021 l
-2607 6021 l
-2611 6021 l
-2616 6021 l
-2620 6021 l
-2625 6021 l
-S
-2584 1900 m
-2580 1900 l
-2576 1900 l
-2571 1900 l
-2567 1900 l
-2562 1900 l
-2558 1900 l
-2553 1900 l
-2549 1900 l
-2544 1900 l
-S
-2544 6016 m
-2546 6018 l
-2549 6021 l
-2553 6021 l
-2558 6021 l
-2562 6021 l
-2567 6021 l
-2571 6021 l
-2576 6021 l
-2580 6021 l
-2584 6021 l
-S
-2544 1900 m
-2540 1900 l
-2538 1902 l
-2535 1905 l
-2531 1905 l
-2526 1905 l
-2522 1905 l
-2517 1905 l
-2513 1905 l
-2508 1905 l
-2504 1905 l
-S
-2504 6016 m
-2508 6016 l
-2513 6016 l
-2517 6016 l
-2522 6016 l
-2526 6016 l
-2531 6016 l
-2535 6016 l
-2540 6016 l
-2544 6016 l
-S
-2464 1909 m
-2468 1909 l
-2473 1909 l
-2477 1909 l
-2482 1909 l
-2484 1907 l
-2486 1905 l
-2491 1905 l
-2495 1905 l
-2500 1905 l
-2504 1905 l
-S
-2464 6012 m
-2468 6012 l
-2473 6012 l
-2477 6012 l
-2482 6012 l
-2486 6012 l
-2491 6012 l
-2493 6014 l
-2495 6016 l
-2500 6016 l
-2504 6016 l
-S
-2424 1914 m
-2428 1914 l
-2433 1914 l
-2437 1914 l
-2441 1914 l
-2444 1911 l
-2446 1909 l
-2450 1909 l
-2455 1909 l
-2459 1909 l
-2464 1909 l
-S
-2424 6007 m
-2428 6007 l
-2433 6007 l
-2437 6007 l
-2441 6007 l
-2446 6007 l
-2450 6007 l
-2453 6009 l
-2455 6012 l
-2459 6012 l
-2464 6012 l
-S
-2383 1918 m
-2388 1918 l
-2392 1918 l
-2397 1918 l
-2401 1918 l
-2406 1918 l
-2410 1918 l
-2412 1916 l
-2415 1914 l
-2419 1914 l
-2424 1914 l
-S
-2383 5998 m
-2386 6000 l
-S
-2386 6000 m
-2388 6003 l
-2392 6003 l
-2397 6003 l
-2401 6003 l
-2406 6003 l
-2410 6003 l
-2415 6003 l
-2417 6005 l
-2419 6007 l
-2424 6007 l
-S
-2343 1927 m
-2348 1927 l
-2352 1927 l
-2354 1925 l
-2357 1923 l
-2361 1923 l
-2365 1923 l
-2370 1923 l
-2374 1923 l
-2379 1923 l
-2381 1920 l
-2383 1918 l
-S
-2343 5994 m
-2348 5994 l
-2352 5994 l
-2357 5994 l
-2359 5996 l
-2361 5998 l
-2365 5998 l
-2370 5998 l
-2374 5998 l
-2379 5998 l
-2383 5998 l
-S
-2303 1936 m
-2305 1934 l
-2307 1932 l
-2312 1932 l
-2316 1932 l
-2321 1932 l
-2325 1932 l
-2327 1929 l
-2330 1927 l
-2334 1927 l
-2339 1927 l
-2343 1927 l
-S
-2303 5985 m
-2305 5987 l
-2307 5989 l
-2312 5989 l
-2316 5989 l
-2321 5989 l
-2325 5989 l
-2330 5989 l
-2332 5992 l
-2334 5994 l
-2339 5994 l
-2343 5994 l
-S
-2283 1938 m
-2285 1936 l
-2290 1936 l
-2294 1936 l
-2298 1936 l
-2303 1936 l
-S
-2263 1940 m
-2267 1940 l
-2272 1940 l
-2276 1940 l
-2281 1940 l
-2283 1938 l
-S
-2263 5976 m
-2265 5978 l
-2267 5980 l
-2272 5980 l
-2276 5980 l
-2281 5980 l
-2283 5983 l
-2285 5985 l
-2290 5985 l
-2294 5985 l
-2298 5985 l
-2303 5985 l
-S
-2263 1940 m
-2260 1943 l
-2258 1945 l
-2254 1945 l
-2249 1945 l
-2245 1945 l
-2240 1945 l
-2238 1947 l
-2236 1949 l
-2231 1949 l
-2227 1949 l
-2222 1949 l
-S
-2222 5967 m
-2225 5969 l
-2227 5971 l
-2231 5971 l
-2236 5971 l
-2240 5971 l
-2243 5974 l
-2245 5976 l
-2249 5976 l
-2254 5976 l
-2258 5976 l
-2263 5976 l
-S
-2182 1963 m
-2184 1961 l
-2187 1958 l
-2191 1958 l
-2196 1958 l
-2200 1958 l
-2202 1956 l
-2205 1954 l
-2209 1954 l
-2214 1954 l
-2218 1954 l
-2220 1952 l
-2222 1949 l
-S
-2182 5958 m
-2184 5960 l
-S
-2184 5960 m
-2187 5962 l
-2191 5962 l
-2196 5962 l
-2200 5962 l
-2202 5965 l
-2205 5967 l
-2209 5967 l
-2214 5967 l
-2218 5967 l
-2222 5967 l
-S
-2142 1972 m
-2147 1972 l
-2149 1969 l
-2151 1967 l
-2155 1967 l
-2160 1967 l
-2164 1967 l
-2167 1965 l
-2169 1963 l
-2173 1963 l
-2178 1963 l
-2182 1963 l
-S
-2142 5949 m
-2147 5949 l
-2151 5949 l
-2153 5951 l
-2155 5954 l
-2160 5954 l
-2164 5954 l
-2169 5954 l
-2171 5956 l
-2173 5958 l
-2178 5958 l
-2182 5958 l
-S
-2117 1978 m
-2120 1976 l
-2124 1976 l
-2129 1976 l
-2133 1976 l
-2135 1974 l
-2138 1972 l
-2142 1972 l
-S
-2102 1985 m
-2104 1983 l
-2106 1981 l
-2111 1981 l
-2115 1981 l
-2117 1978 l
-S
-2102 5936 m
-2104 5938 l
-2106 5940 l
-2111 5940 l
-2115 5940 l
-2120 5940 l
-2122 5942 l
-2124 5945 l
-2129 5945 l
-2133 5945 l
-2135 5947 l
-2138 5949 l
-2142 5949 l
-S
-2062 1994 m
-2066 1994 l
-2071 1994 l
-2073 1992 l
-2075 1990 l
-2079 1990 l
-2084 1990 l
-2086 1987 l
-2088 1985 l
-2093 1985 l
-2097 1985 l
-2102 1985 l
-S
-2062 5922 m
-2064 5925 l
-2066 5927 l
-2071 5927 l
-2075 5927 l
-2077 5929 l
-2079 5931 l
-2084 5931 l
-2088 5931 l
-2091 5933 l
-2093 5936 l
-2097 5936 l
-2102 5936 l
-S
-2021 2007 m
-2026 2007 l
-2030 2007 l
-2033 2005 l
-2035 2003 l
-2039 2003 l
-2044 2003 l
-2046 2001 l
-2048 1999 l
-2053 1999 l
-2057 1999 l
-2059 1996 l
-2062 1994 l
-S
-2021 5909 m
-2024 5911 l
-2026 5913 l
-2030 5913 l
-2035 5913 l
-2037 5916 l
-2039 5918 l
-2044 5918 l
-2048 5918 l
-2050 5920 l
-S
-2062 5922 m
-2057 5922 l
-2053 5922 l
-2050 5920 l
-S
-1992 2019 m
-1995 2016 l
-1999 2016 l
-2003 2016 l
-2006 2014 l
-2008 2012 l
-2012 2012 l
-2017 2012 l
-2019 2010 l
-2021 2007 l
-S
-1981 2025 m
-1983 2023 l
-1986 2021 l
-1990 2021 l
-1992 2019 l
-S
-1981 5895 m
-1983 5898 l
-1986 5900 l
-1990 5900 l
-1995 5900 l
-1997 5902 l
-1999 5904 l
-2003 5904 l
-2008 5904 l
-2010 5907 l
-2012 5909 l
-2017 5909 l
-2021 5909 l
-S
-1941 2039 m
-1945 2039 l
-1948 2037 l
-1950 2034 l
-1954 2034 l
-1957 2032 l
-1959 2030 l
-1963 2030 l
-1968 2030 l
-1970 2028 l
-1972 2025 l
-1977 2025 l
-1981 2025 l
-S
-1941 5882 m
-1945 5882 l
-1948 5884 l
-1950 5887 l
-1954 5887 l
-1959 5887 l
-1961 5889 l
-1963 5891 l
-1968 5891 l
-1970 5893 l
-1972 5895 l
-1977 5895 l
-1981 5895 l
-S
-1901 2057 m
-1903 2054 l
-1905 2052 l
-1910 2052 l
-1912 2050 l
-1914 2048 l
-1919 2048 l
-1923 2048 l
-1925 2045 l
-1928 2043 l
-1932 2043 l
-1934 2041 l
-1936 2039 l
-1941 2039 l
-S
-1901 5864 m
-1903 5866 l
-1905 5869 l
-1910 5869 l
-1914 5869 l
-1916 5871 l
-1919 5873 l
-1923 5873 l
-1925 5875 l
-1928 5878 l
-1932 5878 l
-1936 5878 l
-1939 5880 l
-S
-1941 5882 m
-1939 5880 l
-S
-1890 2059 m
-1892 2057 l
-1896 2057 l
-1901 2057 l
-S
-1860 2075 m
-1863 2072 l
-1865 2070 l
-1869 2070 l
-1872 2068 l
-1874 2066 l
-1878 2066 l
-1881 2063 l
-1883 2061 l
-1887 2061 l
-1890 2059 l
-S
-1860 5846 m
-1863 5849 l
-1865 5851 l
-1869 5851 l
-1872 5853 l
-1874 5855 l
-1878 5855 l
-1881 5857 l
-1883 5860 l
-1887 5860 l
-1892 5860 l
-1894 5862 l
-1896 5864 l
-1901 5864 l
-S
-1820 2092 m
-1823 2090 l
-1825 2088 l
-1829 2088 l
-1831 2086 l
-1834 2083 l
-1838 2083 l
-1840 2081 l
-1843 2079 l
-1847 2079 l
-1849 2077 l
-1852 2075 l
-1856 2075 l
-1860 2075 l
-S
-1820 5828 m
-1823 5831 l
-1825 5833 l
-1829 5833 l
-1831 5835 l
-1834 5837 l
-1838 5837 l
-1840 5840 l
-S
-1840 5840 m
-1843 5842 l
-1847 5842 l
-1852 5842 l
-1854 5844 l
-1856 5846 l
-1860 5846 l
-S
-1800 2099 m
-1802 2097 l
-1807 2097 l
-1811 2097 l
-1814 2095 l
-1816 2092 l
-1820 2092 l
-S
-1780 2110 m
-1782 2108 l
-1785 2106 l
-1789 2106 l
-1791 2104 l
-1793 2101 l
-1798 2101 l
-1800 2099 l
-S
-1780 5811 m
-1785 5811 l
-1787 5813 l
-1789 5815 l
-1793 5815 l
-1796 5817 l
-1798 5819 l
-1802 5819 l
-1805 5822 l
-1807 5824 l
-1811 5824 l
-1814 5826 l
-1816 5828 l
-1820 5828 l
-S
-1740 2128 m
-1744 2128 l
-1747 2126 l
-1749 2124 l
-1753 2124 l
-1755 2121 l
-1758 2119 l
-1762 2119 l
-1764 2117 l
-1767 2115 l
-1771 2115 l
-1773 2112 l
-1776 2110 l
-1780 2110 l
-S
-1740 5788 m
-1742 5790 l
-1744 5793 l
-1749 5793 l
-1751 5795 l
-1753 5797 l
-1758 5797 l
-1760 5799 l
-S
-1760 5799 m
-1762 5802 l
-1767 5802 l
-1769 5804 l
-1771 5806 l
-1776 5806 l
-1778 5808 l
-1780 5811 l
-S
-1724 2139 m
-1726 2137 l
-1731 2137 l
-1733 2135 l
-1735 2133 l
-1738 2130 l
-1740 2128 l
-S
-1700 2150 m
-1704 2150 l
-1706 2148 l
-1709 2146 l
-1713 2146 l
-1715 2144 l
-1717 2142 l
-1722 2142 l
-1724 2139 l
-S
-1700 5770 m
-1704 5770 l
-1706 5773 l
-1709 5775 l
-1713 5775 l
-1715 5777 l
-1717 5779 l
-1722 5779 l
-1724 5781 l
-1726 5784 l
-1731 5784 l
-1733 5786 l
-1735 5788 l
-1740 5788 l
-S
-1659 2173 m
-1664 2173 l
-1666 2171 l
-1668 2168 l
-1673 2168 l
-1675 2166 l
-1677 2164 l
-1682 2164 l
-1684 2162 l
-1686 2159 l
-1688 2157 l
-1691 2155 l
-1695 2155 l
-1697 2153 l
-1700 2150 l
-S
-1659 5744 m
-1662 5746 l
-1664 5748 l
-1666 5750 l
-1668 5752 l
-1673 5752 l
-1675 5755 l
-1677 5757 l
-1682 5757 l
-1684 5759 l
-S
-1684 5759 m
-1686 5761 l
-1691 5761 l
-1693 5764 l
-1695 5766 l
-1697 5768 l
-1700 5770 l
-S
-1653 2180 m
-1655 2177 l
-1657 2175 l
-1659 2173 l
-S
-1619 2200 m
-1621 2197 l
-1624 2195 l
-1628 2195 l
-1630 2193 l
-1633 2191 l
-1635 2188 l
-1637 2186 l
-1642 2186 l
-1644 2184 l
-1646 2182 l
-1650 2182 l
-1653 2180 l
-S
-1619 5721 m
-1621 5723 l
-1624 5726 l
-1628 5726 l
-1630 5728 l
-1633 5730 l
-1637 5730 l
-1639 5732 l
-1642 5735 l
-1644 5737 l
-1646 5739 l
-1650 5739 l
-1653 5741 l
-1655 5744 l
-1659 5744 l
-S
-1586 2220 m
-1588 2218 l
-1590 2215 l
-1592 2213 l
-1597 2213 l
-1599 2211 l
-1601 2209 l
-1606 2209 l
-1608 2206 l
-1610 2204 l
-1612 2202 l
-1615 2200 l
-1619 2200 l
-S
-1579 2222 m
-1583 2222 l
-1586 2220 l
-S
-1579 5694 m
-1581 5697 l
-1583 5699 l
-1586 5701 l
-1588 5703 l
-1592 5703 l
-1595 5706 l
-1597 5708 l
-1599 5710 l
-1601 5712 l
-1606 5712 l
-1608 5714 l
-1610 5717 l
-1615 5717 l
-1617 5719 l
-S
-1619 5721 m
-1617 5719 l
-S
-1579 2222 m
-1577 2224 l
-1574 2226 l
-1572 2229 l
-1570 2231 l
-1566 2231 l
-1563 2233 l
-1561 2235 l
-1559 2238 l
-1557 2240 l
-1552 2240 l
-1550 2242 l
-1548 2244 l
-1545 2247 l
-1543 2249 l
-1539 2249 l
-S
-1539 5672 m
-1543 5672 l
-1545 5674 l
-1548 5676 l
-1550 5679 l
-S
-1550 5679 m
-1552 5681 l
-1557 5681 l
-1559 5683 l
-1561 5685 l
-1563 5688 l
-1566 5690 l
-1570 5690 l
-1572 5692 l
-1574 5694 l
-1579 5694 l
-S
-1523 2260 m
-1525 2258 l
-1530 2258 l
-1532 2256 l
-1534 2253 l
-1536 2251 l
-1539 2249 l
-S
-1499 2280 m
-1501 2278 l
-1503 2276 l
-1505 2273 l
-1507 2271 l
-1510 2269 l
-1512 2267 l
-1516 2267 l
-1519 2264 l
-1521 2262 l
-1523 2260 l
-S
-1499 5641 m
-1501 5643 l
-1503 5645 l
-1505 5647 l
-1507 5650 l
-1512 5650 l
-1514 5652 l
-1516 5654 l
-1519 5656 l
-1521 5659 l
-1525 5659 l
-1528 5661 l
-1530 5663 l
-1532 5665 l
-1534 5668 l
-1536 5670 l
-1539 5672 l
-S
-1469 2300 m
-1472 2298 l
-1474 2296 l
-1476 2293 l
-1478 2291 l
-1481 2289 l
-1485 2289 l
-1487 2287 l
-1490 2285 l
-1492 2282 l
-1494 2280 l
-1499 2280 l
-S
-1458 2307 m
-1461 2305 l
-1463 2302 l
-1467 2302 l
-1469 2300 l
-S
-1458 5614 m
-1463 5614 l
-1465 5616 l
-1467 5618 l
-1469 5621 l
-1472 5623 l
-1474 5625 l
-1476 5627 l
-1481 5627 l
-1483 5630 l
-1485 5632 l
-1487 5634 l
-1490 5636 l
-1492 5638 l
-S
-1499 5641 m
-1494 5641 l
-1492 5638 l
-S
-1418 2338 m
-1420 2336 l
-1423 2334 l
-1425 2331 l
-1427 2329 l
-1431 2329 l
-1434 2327 l
-1436 2325 l
-1438 2323 l
-1440 2320 l
-1443 2318 l
-1445 2316 l
-1449 2316 l
-1452 2314 l
-1454 2311 l
-1456 2309 l
-1458 2307 l
-S
-1418 5583 m
-1420 5585 l
-1423 5587 l
-1427 5587 l
-1429 5589 l
-1431 5592 l
-1434 5594 l
-1436 5596 l
-1438 5598 l
-S
-1438 5598 m
-1440 5601 l
-1445 5601 l
-1447 5603 l
-1449 5605 l
-1452 5607 l
-1454 5609 l
-1456 5612 l
-1458 5614 l
-S
-1416 2340 m
-1418 2338 l
-S
-1378 2369 m
-1380 2367 l
-1382 2365 l
-1387 2365 l
-1389 2363 l
-1391 2361 l
-1393 2358 l
-1396 2356 l
-1398 2354 l
-1400 2352 l
-1402 2349 l
-1405 2347 l
-1409 2347 l
-1411 2345 l
-1414 2343 l
-1416 2340 l
-S
-1378 5551 m
-1382 5551 l
-1385 5554 l
-1387 5556 l
-1389 5558 l
-S
-1389 5558 m
-1391 5560 l
-1393 5563 l
-1396 5565 l
-1398 5567 l
-1400 5569 l
-1405 5569 l
-1407 5571 l
-1409 5574 l
-1411 5576 l
-1414 5578 l
-1416 5580 l
-1418 5583 l
-S
-1367 2381 m
-1369 2378 l
-1371 2376 l
-1373 2374 l
-1376 2372 l
-1378 2369 l
-S
-1338 2405 m
-1340 2403 l
-1342 2401 l
-1344 2399 l
-1347 2396 l
-1349 2394 l
-1351 2392 l
-1353 2390 l
-1355 2387 l
-1360 2387 l
-1362 2385 l
-1364 2383 l
-1367 2381 l
-S
-1338 5516 m
-1340 5518 l
-S
-1340 5518 m
-1342 5520 l
-1344 5522 l
-1347 5525 l
-1351 5525 l
-1353 5527 l
-1355 5529 l
-1358 5531 l
-1360 5533 l
-1362 5536 l
-1364 5538 l
-1367 5540 l
-1369 5542 l
-1371 5545 l
-1373 5547 l
-1376 5549 l
-1378 5551 l
-S
-1318 2421 m
-1320 2419 l
-1324 2419 l
-1326 2416 l
-1329 2414 l
-1331 2412 l
-1333 2410 l
-1335 2407 l
-1338 2405 l
-S
-1297 2441 m
-1300 2439 l
-1302 2436 l
-1304 2434 l
-1306 2432 l
-1309 2430 l
-1311 2428 l
-1313 2425 l
-1315 2423 l
-1318 2421 l
-S
-1297 5480 m
-1300 5482 l
-1302 5484 l
-1304 5487 l
-1306 5489 l
-1309 5491 l
-1311 5493 l
-1315 5493 l
-1318 5495 l
-1320 5498 l
-1322 5500 l
-1324 5502 l
-1326 5504 l
-1329 5507 l
-1331 5509 l
-1333 5511 l
-1335 5513 l
-1338 5516 l
-S
-1277 2461 m
-1280 2459 l
-1282 2457 l
-1284 2454 l
-1286 2452 l
-1288 2450 l
-1291 2448 l
-1293 2445 l
-1295 2443 l
-1297 2441 l
-S
-1257 2481 m
-1259 2479 l
-1262 2477 l
-1264 2474 l
-1266 2472 l
-1268 2470 l
-1271 2468 l
-1273 2466 l
-1275 2463 l
-1277 2461 l
-S
-1257 5440 m
-1259 5442 l
-1262 5444 l
-1264 5446 l
-1266 5449 l
-1268 5451 l
-1271 5453 l
-1273 5455 l
-1275 5457 l
-1277 5460 l
-1280 5462 l
-1282 5464 l
-1284 5466 l
-1286 5469 l
-1288 5471 l
-1291 5473 l
-1293 5475 l
-1295 5478 l
-S
-1297 5480 m
-1295 5478 l
-S
-1233 2501 m
-1235 2499 l
-1237 2497 l
-1239 2495 l
-1242 2492 l
-1244 2490 l
-1246 2488 l
-1248 2486 l
-1250 2483 l
-1253 2481 l
-1257 2481 l
-S
-1217 2517 m
-1219 2515 l
-1221 2512 l
-1224 2510 l
-1226 2508 l
-1228 2506 l
-1230 2504 l
-1233 2501 l
-S
-1217 5399 m
-1219 5402 l
-1221 5404 l
-1224 5406 l
-1226 5408 l
-1228 5411 l
-1230 5413 l
-1233 5415 l
-1235 5417 l
-1237 5420 l
-1239 5422 l
-1242 5424 l
-1244 5426 l
-1246 5428 l
-1248 5431 l
-1250 5433 l
-1253 5435 l
-1255 5437 l
-S
-1257 5440 m
-1255 5437 l
-S
-1197 2542 m
-1199 2539 l
-1201 2537 l
-1204 2535 l
-1206 2533 l
-1208 2530 l
-1210 2528 l
-1212 2526 l
-1215 2524 l
-1215 2519 l
-1217 2517 l
-S
-1177 2562 m
-1179 2559 l
-1181 2557 l
-1183 2555 l
-1186 2553 l
-1188 2550 l
-1190 2548 l
-1192 2546 l
-1195 2544 l
-1197 2542 l
-S
-1177 5359 m
-1179 5361 l
-1181 5364 l
-1183 5366 l
-1186 5368 l
-1188 5370 l
-1190 5373 l
-1192 5375 l
-1195 5377 l
-1197 5379 l
-1199 5382 l
-1201 5384 l
-1204 5386 l
-1206 5388 l
-1208 5390 l
-1210 5393 l
-1212 5395 l
-1215 5397 l
-S
-1217 5399 m
-1215 5397 l
-S
-1157 2582 m
-1159 2579 l
-1161 2577 l
-1163 2575 l
-1166 2573 l
-1168 2571 l
-1170 2568 l
-1172 2566 l
-1175 2564 l
-1177 2562 l
-S
-1137 2606 m
-1139 2604 l
-1141 2602 l
-1143 2600 l
-1145 2597 l
-1148 2595 l
-1150 2593 l
-1152 2591 l
-1152 2586 l
-1154 2584 l
-1157 2582 l
-S
-1137 5314 m
-1139 5317 l
-S
-1139 5317 m
-1141 5319 l
-1143 5321 l
-1145 5323 l
-1148 5326 l
-1150 5328 l
-1152 5330 l
-1154 5332 l
-1157 5335 l
-1159 5337 l
-1161 5339 l
-1161 5344 l
-1163 5346 l
-1166 5348 l
-1168 5350 l
-1170 5352 l
-1172 5355 l
-1175 5357 l
-S
-1177 5359 m
-1175 5357 l
-S
-1125 2622 m
-1125 2617 l
-1128 2615 l
-1130 2613 l
-1132 2611 l
-1134 2609 l
-1137 2606 l
-S
-1096 2655 m
-1099 2653 l
-1099 2649 l
-1101 2647 l
-1103 2644 l
-1105 2642 l
-1107 2640 l
-1110 2638 l
-1112 2635 l
-1114 2633 l
-1116 2631 l
-1119 2629 l
-1121 2626 l
-1123 2624 l
-1125 2622 l
-S
-1096 5265 m
-1099 5268 l
-1101 5270 l
-1103 5272 l
-1103 5277 l
-S
-1103 5277 m
-1105 5279 l
-1107 5281 l
-1110 5283 l
-1112 5285 l
-1114 5288 l
-1116 5290 l
-1119 5292 l
-1121 5294 l
-1123 5297 l
-1125 5299 l
-1128 5301 l
-1130 5303 l
-1130 5308 l
-1132 5310 l
-1134 5312 l
-1137 5314 l
-S
-1090 2662 m
-1092 2660 l
-1094 2658 l
-1096 2655 l
-S
-1090 2662 m
-1087 2664 l
-1085 2667 l
-1083 2669 l
-1081 2671 l
-1081 2676 l
-1078 2678 l
-1076 2680 l
-1074 2682 l
-1072 2685 l
-1069 2687 l
-1067 2689 l
-1065 2691 l
-1063 2693 l
-1063 2698 l
-1061 2700 l
-1058 2702 l
-S
-1056 2705 m
-1058 2702 l
-S
-1056 5216 m
-1058 5218 l
-1061 5221 l
-1063 5223 l
-1065 5225 l
-1067 5227 l
-1067 5232 l
-1069 5234 l
-1072 5236 l
-S
-1072 5236 m
-1074 5239 l
-1076 5241 l
-1078 5243 l
-1081 5245 l
-1083 5247 l
-1085 5250 l
-1085 5254 l
-1087 5256 l
-1090 5259 l
-1092 5261 l
-1094 5263 l
-1096 5265 l
-S
-1056 2705 m
-1054 2707 l
-1052 2709 l
-1049 2711 l
-1049 2716 l
-1047 2718 l
-1045 2720 l
-1043 2723 l
-1040 2725 l
-1038 2727 l
-1036 2729 l
-1036 2734 l
-1034 2736 l
-1031 2738 l
-1029 2740 l
-1027 2743 l
-S
-1016 2758 m
-1018 2756 l
-1020 2754 l
-1023 2752 l
-1023 2747 l
-1025 2745 l
-1027 2743 l
-S
-1016 5163 m
-1018 5165 l
-1020 5167 l
-1023 5169 l
-1025 5171 l
-1027 5174 l
-1027 5178 l
-1029 5180 l
-1031 5183 l
-1034 5185 l
-1036 5187 l
-1038 5189 l
-1040 5192 l
-1040 5196 l
-S
-1040 5196 m
-1043 5198 l
-1045 5201 l
-1047 5203 l
-1049 5205 l
-1052 5207 l
-1054 5209 l
-1054 5214 l
-1056 5216 l
-S
-1000 2783 m
-1000 2778 l
-1002 2776 l
-1005 2774 l
-1007 2772 l
-1009 2769 l
-1011 2767 l
-1014 2765 l
-1014 2760 l
-1016 2758 l
-S
-976 2816 m
-978 2814 l
-980 2812 l
-982 2810 l
-982 2805 l
-985 2803 l
-987 2801 l
-989 2798 l
-991 2796 l
-991 2792 l
-994 2790 l
-996 2787 l
-998 2785 l
-1000 2783 l
-S
-976 5104 m
-978 5107 l
-980 5109 l
-982 5111 l
-982 5116 l
-S
-982 5116 m
-985 5118 l
-987 5120 l
-989 5122 l
-991 5125 l
-994 5127 l
-996 5129 l
-996 5133 l
-998 5136 l
-1000 5138 l
-1002 5140 l
-1005 5142 l
-1005 5147 l
-1007 5149 l
-1009 5151 l
-1011 5154 l
-1014 5156 l
-S
-1014 5156 m
-1014 5160 l
-1016 5163 l
-S
-973 2823 m
-973 2819 l
-976 2816 l
-S
-973 2823 m
-971 2825 l
-969 2828 l
-967 2830 l
-964 2832 l
-964 2836 l
-962 2839 l
-960 2841 l
-958 2843 l
-956 2845 l
-956 2850 l
-953 2852 l
-951 2854 l
-951 2859 l
-949 2861 l
-947 2863 l
-S
-935 2879 m
-938 2877 l
-940 2874 l
-942 2872 l
-942 2868 l
-944 2866 l
-947 2863 l
-S
-935 5037 m
-938 5040 l
-938 5044 l
-940 5046 l
-942 5049 l
-942 5053 l
-944 5055 l
-947 5058 l
-949 5060 l
-951 5062 l
-951 5066 l
-953 5069 l
-956 5071 l
-958 5073 l
-960 5075 l
-S
-960 5075 m
-960 5080 l
-962 5082 l
-964 5084 l
-964 5089 l
-967 5091 l
-969 5093 l
-971 5096 l
-973 5098 l
-973 5102 l
-976 5104 l
-S
-920 2903 m
-922 2901 l
-924 2899 l
-926 2897 l
-929 2895 l
-929 2890 l
-931 2888 l
-933 2886 l
-933 2881 l
-935 2879 l
-S
-920 2903 m
-920 2908 l
-918 2910 l
-915 2912 l
-915 2917 l
-913 2919 l
-911 2921 l
-909 2924 l
-906 2926 l
-906 2930 l
-904 2933 l
-902 2935 l
-902 2939 l
-900 2941 l
-897 2944 l
-S
-895 2950 m
-897 2948 l
-897 2944 l
-S
-895 4970 m
-897 4973 l
-897 4977 l
-900 4979 l
-902 4982 l
-902 4986 l
-904 4988 l
-906 4990 l
-909 4993 l
-911 4995 l
-S
-911 4995 m
-911 4999 l
-913 5002 l
-915 5004 l
-915 5008 l
-918 5011 l
-920 5013 l
-922 5015 l
-924 5017 l
-924 5022 l
-926 5024 l
-929 5026 l
-929 5031 l
-931 5033 l
-933 5035 l
-S
-935 5037 m
-933 5035 l
-S
-875 2984 m
-877 2982 l
-880 2979 l
-880 2975 l
-882 2973 l
-884 2971 l
-884 2966 l
-886 2964 l
-888 2962 l
-888 2957 l
-891 2955 l
-893 2953 l
-895 2950 l
-S
-875 2984 m
-875 2988 l
-873 2991 l
-871 2993 l
-871 2997 l
-868 3000 l
-866 3002 l
-866 3006 l
-864 3009 l
-862 3011 l
-862 3015 l
-859 3017 l
-857 3020 l
-857 3024 l
-S
-855 3026 m
-857 3024 l
-S
-855 4894 m
-857 4897 l
-857 4901 l
-859 4903 l
-862 4906 l
-862 4910 l
-864 4912 l
-866 4915 l
-S
-866 4915 m
-866 4919 l
-868 4921 l
-871 4923 l
-871 4928 l
-873 4930 l
-875 4932 l
-875 4937 l
-877 4939 l
-880 4941 l
-880 4946 l
-882 4948 l
-884 4950 l
-884 4955 l
-S
-884 4955 m
-886 4957 l
-888 4959 l
-891 4961 l
-893 4964 l
-893 4968 l
-895 4970 l
-S
-855 3026 m
-853 3029 l
-851 3031 l
-848 3033 l
-848 3038 l
-846 3040 l
-844 3042 l
-844 3047 l
-844 3051 l
-842 3053 l
-839 3055 l
-839 3060 l
-837 3062 l
-835 3064 l
-S
-835 3064 m
-835 3069 l
-833 3071 l
-830 3073 l
-830 3078 l
-828 3080 l
-826 3082 l
-826 3087 l
-824 3089 l
-821 3091 l
-821 3096 l
-819 3098 l
-817 3100 l
-817 3105 l
-S
-815 3107 m
-817 3105 l
-S
-815 4814 m
-817 4816 l
-817 4821 l
-819 4823 l
-821 4825 l
-821 4830 l
-824 4832 l
-826 4834 l
-S
-826 4834 m
-826 4839 l
-828 4841 l
-830 4843 l
-830 4847 l
-833 4850 l
-835 4852 l
-835 4856 l
-837 4859 l
-839 4861 l
-839 4865 l
-842 4868 l
-844 4870 l
-844 4874 l
-S
-844 4874 m
-846 4877 l
-848 4879 l
-848 4883 l
-851 4885 l
-853 4888 l
-853 4892 l
-855 4894 l
-S
-815 3107 m
-813 3109 l
-813 3114 l
-810 3116 l
-808 3118 l
-808 3122 l
-808 3127 l
-806 3129 l
-804 3131 l
-804 3136 l
-801 3138 l
-799 3140 l
-799 3145 l
-S
-799 3145 m
-797 3147 l
-795 3149 l
-795 3154 l
-795 3158 l
-792 3160 l
-790 3163 l
-790 3167 l
-788 3169 l
-786 3172 l
-786 3176 l
-786 3181 l
-783 3183 l
-781 3185 l
-S
-775 3201 m
-777 3198 l
-777 3194 l
-779 3192 l
-781 3190 l
-781 3185 l
-S
-775 4716 m
-777 4718 l
-777 4722 l
-777 4727 l
-779 4729 l
-781 4731 l
-781 4736 l
-783 4738 l
-786 4740 l
-786 4745 l
-786 4749 l
-788 4751 l
-790 4754 l
-S
-790 4754 m
-790 4758 l
-792 4760 l
-795 4763 l
-795 4767 l
-795 4772 l
-797 4774 l
-799 4776 l
-799 4780 l
-801 4783 l
-804 4785 l
-804 4789 l
-806 4792 l
-808 4794 l
-S
-808 4794 m
-808 4798 l
-810 4801 l
-813 4803 l
-813 4807 l
-813 4812 l
-815 4814 l
-S
-768 3225 m
-768 3221 l
-768 3216 l
-770 3214 l
-772 3212 l
-772 3207 l
-772 3203 l
-775 3201 l
-S
-768 3225 m
-766 3227 l
-763 3230 l
-763 3234 l
-761 3236 l
-759 3239 l
-759 3243 l
-759 3248 l
-757 3250 l
-754 3252 l
-754 3257 l
-754 3261 l
-752 3263 l
-750 3265 l
-S
-750 3265 m
-750 3270 l
-750 3274 l
-748 3277 l
-745 3279 l
-745 3283 l
-743 3286 l
-741 3288 l
-741 3292 l
-741 3297 l
-739 3299 l
-737 3301 l
-737 3306 l
-S
-734 3312 m
-737 3310 l
-737 3306 l
-S
-734 4604 m
-737 4606 l
-737 4611 l
-737 4615 l
-739 4617 l
-741 4620 l
-741 4624 l
-741 4629 l
-743 4631 l
-745 4633 l
-S
-745 4633 m
-745 4637 l
-745 4642 l
-748 4644 l
-750 4646 l
-750 4651 l
-750 4655 l
-752 4658 l
-754 4660 l
-754 4664 l
-754 4669 l
-757 4671 l
-759 4673 l
-S
-759 4673 m
-759 4678 l
-759 4682 l
-761 4684 l
-763 4687 l
-763 4691 l
-766 4693 l
-768 4696 l
-768 4700 l
-768 4704 l
-770 4707 l
-772 4709 l
-772 4713 l
-S
-775 4716 m
-772 4713 l
-S
-723 3346 m
-725 3344 l
-728 3341 l
-728 3337 l
-728 3333 l
-728 3328 l
-730 3326 l
-732 3324 l
-732 3319 l
-732 3315 l
-734 3312 l
-S
-723 3346 m
-723 3350 l
-723 3355 l
-721 3357 l
-719 3359 l
-719 3364 l
-719 3368 l
-716 3371 l
-714 3373 l
-714 3377 l
-714 3382 l
-714 3386 l
-S
-714 3386 m
-712 3388 l
-710 3391 l
-710 3395 l
-710 3400 l
-708 3402 l
-705 3404 l
-705 3408 l
-705 3413 l
-705 3417 l
-703 3420 l
-701 3422 l
-701 3426 l
-S
-694 3451 m
-696 3449 l
-696 3444 l
-696 3440 l
-696 3435 l
-699 3433 l
-701 3431 l
-701 3426 l
-S
-694 4470 m
-696 4472 l
-S
-696 4472 m
-696 4477 l
-696 4481 l
-699 4483 l
-701 4486 l
-701 4490 l
-701 4494 l
-701 4499 l
-703 4501 l
-705 4503 l
-705 4508 l
-705 4512 l
-S
-705 4512 m
-705 4517 l
-708 4519 l
-710 4521 l
-710 4526 l
-710 4530 l
-712 4532 l
-714 4535 l
-714 4539 l
-714 4544 l
-714 4548 l
-716 4550 l
-719 4553 l
-S
-719 4553 m
-719 4557 l
-719 4561 l
-721 4564 l
-723 4566 l
-723 4570 l
-723 4575 l
-725 4577 l
-728 4579 l
-728 4584 l
-728 4588 l
-730 4591 l
-732 4593 l
-S
-732 4593 m
-732 4597 l
-732 4602 l
-734 4604 l
-S
-692 3467 m
-692 3462 l
-692 3458 l
-692 3453 l
-694 3451 l
-S
-692 3467 m
-690 3469 l
-687 3471 l
-687 3476 l
-687 3480 l
-687 3484 l
-685 3487 l
-683 3489 l
-683 3493 l
-683 3498 l
-683 3502 l
-683 3507 l
-S
-683 3507 m
-681 3509 l
-678 3511 l
-678 3516 l
-678 3520 l
-678 3525 l
-676 3527 l
-674 3529 l
-674 3534 l
-674 3538 l
-674 3543 l
-674 3547 l
-S
-674 3547 m
-672 3549 l
-670 3551 l
-670 3556 l
-670 3560 l
-670 3565 l
-670 3569 l
-667 3572 l
-665 3574 l
-665 3578 l
-665 3583 l
-665 3587 l
-S
-665 3587 m
-665 3592 l
-665 3596 l
-663 3598 l
-661 3601 l
-661 3605 l
-661 3610 l
-661 3614 l
-661 3619 l
-658 3621 l
-656 3623 l
-656 3627 l
-S
-654 3652 m
-656 3650 l
-656 3645 l
-656 3641 l
-656 3636 l
-656 3632 l
-656 3627 l
-S
-654 4269 m
-656 4271 l
-S
-656 4271 m
-656 4275 l
-656 4280 l
-656 4284 l
-656 4289 l
-656 4293 l
-658 4296 l
-661 4298 l
-661 4302 l
-661 4307 l
-661 4311 l
-S
-661 4311 m
-661 4316 l
-661 4320 l
-663 4322 l
-665 4325 l
-665 4329 l
-665 4334 l
-665 4338 l
-665 4342 l
-665 4347 l
-667 4349 l
-670 4351 l
-S
-670 4351 m
-670 4356 l
-670 4360 l
-670 4365 l
-670 4369 l
-672 4372 l
-674 4374 l
-674 4378 l
-674 4383 l
-674 4387 l
-676 4389 l
-678 4392 l
-S
-678 4392 m
-678 4396 l
-678 4401 l
-678 4405 l
-678 4410 l
-681 4412 l
-683 4414 l
-683 4418 l
-683 4423 l
-683 4427 l
-685 4430 l
-687 4432 l
-S
-687 4432 m
-687 4436 l
-687 4441 l
-687 4445 l
-687 4450 l
-690 4452 l
-692 4454 l
-692 4459 l
-692 4463 l
-692 4468 l
-694 4470 l
-S
-652 3668 m
-652 3663 l
-652 3659 l
-652 3654 l
-654 3652 l
-S
-652 3668 m
-652 3672 l
-652 3677 l
-652 3681 l
-649 3683 l
-647 3686 l
-647 3690 l
-647 3694 l
-647 3699 l
-647 3703 l
-647 3708 l
-S
-647 3708 m
-647 3712 l
-647 3717 l
-645 3719 l
-643 3721 l
-643 3726 l
-643 3730 l
-643 3735 l
-643 3739 l
-643 3744 l
-643 3748 l
-S
-643 3748 m
-643 3753 l
-643 3757 l
-640 3759 l
-638 3762 l
-638 3766 l
-638 3770 l
-638 3775 l
-638 3779 l
-638 3784 l
-638 3788 l
-S
-638 3788 m
-638 3793 l
-638 3797 l
-638 3802 l
-638 3806 l
-638 3811 l
-636 3813 l
-634 3815 l
-634 3820 l
-634 3824 l
-634 3829 l
-S
-634 3829 m
-634 3833 l
-634 3838 l
-634 3842 l
-634 3846 l
-634 3851 l
-634 3855 l
-634 3860 l
-634 3864 l
-634 3869 l
-S
-634 3869 m
-634 3873 l
-634 3878 l
-634 3882 l
-634 3887 l
-634 3891 l
-634 3896 l
-632 3898 l
-629 3900 l
-629 3905 l
-629 3909 l
-S
-629 3909 m
-629 3913 l
-629 3918 l
-629 3922 l
-629 3927 l
-629 3931 l
-629 3936 l
-629 3940 l
-629 3945 l
-629 3949 l
-S
-629 3949 m
-629 3954 l
-629 3958 l
-629 3963 l
-629 3967 l
-629 3972 l
-629 3976 l
-629 3981 l
-629 3985 l
-629 3989 l
-S
-629 3989 m
-629 3994 l
-629 3998 l
-629 4003 l
-629 4007 l
-629 4012 l
-629 4016 l
-629 4021 l
-632 4023 l
-634 4025 l
-634 4030 l
-S
-634 4030 m
-634 4034 l
-634 4039 l
-634 4043 l
-634 4048 l
-634 4052 l
-634 4056 l
-634 4061 l
-634 4065 l
-634 4070 l
-S
-634 4070 m
-634 4074 l
-634 4079 l
-634 4083 l
-634 4088 l
-634 4092 l
-634 4097 l
-634 4101 l
-634 4106 l
-636 4108 l
-638 4110 l
-S
-638 4110 m
-638 4115 l
-638 4119 l
-638 4124 l
-638 4128 l
-638 4132 l
-638 4137 l
-638 4141 l
-638 4146 l
-638 4150 l
-S
-638 4150 m
-638 4155 l
-638 4159 l
-640 4162 l
-643 4164 l
-643 4168 l
-643 4173 l
-643 4177 l
-643 4182 l
-643 4186 l
-643 4191 l
-S
-643 4191 m
-643 4195 l
-643 4199 l
-645 4202 l
-647 4204 l
-647 4208 l
-647 4213 l
-647 4217 l
-647 4222 l
-647 4226 l
-647 4231 l
-S
-647 4231 m
-647 4235 l
-649 4237 l
-652 4240 l
-652 4244 l
-652 4249 l
-652 4253 l
-652 4258 l
-652 4262 l
-652 4267 l
-654 4269 l
-S
-1 g
-3920 4435 m
-3924 4435 l
-3924 4436 l
-3920 4436 l
-3917 4436 m
-3924 4436 l
-3924 4437 l
-3917 4437 l
-3914 4437 m
-3925 4437 l
-3925 4438 l
-3914 4438 l
-3911 4438 m
-3925 4438 l
-3925 4439 l
-3911 4439 l
-3908 4439 m
-3925 4439 l
-3925 4440 l
-3908 4440 l
-3905 4440 m
-3926 4440 l
-3926 4441 l
-3905 4441 l
-3903 4441 m
-3926 4441 l
-3926 4442 l
-3903 4442 l
-3900 4442 m
-3926 4442 l
-3926 4443 l
-3900 4443 l
-3897 4443 m
-3927 4443 l
-3927 4444 l
-3897 4444 l
-3894 4444 m
-3927 4444 l
-3927 4445 l
-3894 4445 l
-3891 4445 m
-3927 4445 l
-3927 4446 l
-3891 4446 l
-3888 4446 m
-3928 4446 l
-3928 4447 l
-3888 4447 l
-3885 4447 m
-3928 4447 l
-3928 4448 l
-3885 4448 l
-3883 4448 m
-3928 4448 l
-3928 4449 l
-3883 4449 l
-3880 4449 m
-3929 4449 l
-3929 4450 l
-3880 4450 l
-3877 4450 m
-3929 4450 l
-3929 4451 l
-3877 4451 l
-3874 4451 m
-3929 4451 l
-3929 4452 l
-3874 4452 l
-3871 4452 m
-3930 4452 l
-3930 4453 l
-3871 4453 l
-3868 4453 m
-3930 4453 l
-3930 4454 l
-3868 4454 l
-3866 4454 m
-3931 4454 l
-3931 4455 l
-3866 4455 l
-3863 4455 m
-3931 4455 l
-3931 4456 l
-3863 4456 l
-3860 4456 m
-3931 4456 l
-3931 4457 l
-3860 4457 l
-3857 4457 m
-3932 4457 l
-3932 4458 l
-3857 4458 l
-3854 4458 m
-3932 4458 l
-3932 4459 l
-3854 4459 l
-3851 4459 m
-3932 4459 l
-3932 4460 l
-3851 4460 l
-3848 4460 m
-3933 4460 l
-3933 4461 l
-3848 4461 l
-3846 4461 m
-3933 4461 l
-3933 4462 l
-3846 4462 l
-3843 4462 m
-3933 4462 l
-3933 4463 l
-3843 4463 l
-3840 4463 m
-3934 4463 l
-3934 4464 l
-3840 4464 l
-3837 4464 m
-3934 4464 l
-3934 4465 l
-3837 4465 l
-3834 4465 m
-3934 4465 l
-3934 4466 l
-3834 4466 l
-3831 4466 m
-3935 4466 l
-3935 4467 l
-3831 4467 l
-3829 4467 m
-3935 4467 l
-3935 4468 l
-3829 4468 l
-3829 4468 m
-3935 4468 l
-3935 4469 l
-3829 4469 l
-3829 4469 m
-3936 4469 l
-3936 4471 l
-3829 4471 l
-3830 4471 m
-3937 4471 l
-3937 4474 l
-3830 4474 l
-3831 4474 m
-3938 4474 l
-3938 4477 l
-3831 4477 l
-3832 4477 m
-3939 4477 l
-3939 4480 l
-3832 4480 l
-3833 4480 m
-3940 4480 l
-3940 4483 l
-3833 4483 l
-3834 4483 m
-3941 4483 l
-3941 4486 l
-3834 4486 l
-3835 4486 m
-3942 4486 l
-3942 4488 l
-3835 4488 l
-3836 4488 m
-3942 4488 l
-3942 4489 l
-3836 4489 l
-3836 4489 m
-3943 4489 l
-3943 4491 l
-3836 4491 l
-3837 4491 m
-3944 4491 l
-3944 4494 l
-3837 4494 l
-3838 4494 m
-3945 4494 l
-3945 4497 l
-3838 4497 l
-3839 4497 m
-3946 4497 l
-3946 4500 l
-3839 4500 l
-3840 4500 m
-3947 4500 l
-3947 4503 l
-3840 4503 l
-3841 4503 m
-3948 4503 l
-3948 4506 l
-3841 4506 l
-3842 4506 m
-3949 4506 l
-3949 4508 l
-3842 4508 l
-3843 4508 m
-3950 4508 l
-3950 4511 l
-3843 4511 l
-3844 4511 m
-3951 4511 l
-3951 4514 l
-3844 4514 l
-3845 4514 m
-3952 4514 l
-3952 4517 l
-3845 4517 l
-3846 4517 m
-3953 4517 l
-3953 4520 l
-3846 4520 l
-3847 4520 m
-3954 4520 l
-3954 4523 l
-3847 4523 l
-3848 4523 m
-3955 4523 l
-3955 4525 l
-3848 4525 l
-3848 4525 m
-3956 4525 l
-3956 4526 l
-3848 4526 l
-3849 4526 m
-3956 4526 l
-3956 4528 l
-3849 4528 l
-3850 4528 m
-3957 4528 l
-3957 4531 l
-3850 4531 l
-3851 4531 m
-3958 4531 l
-3958 4534 l
-3851 4534 l
-3852 4534 m
-3959 4534 l
-3959 4537 l
-3852 4537 l
-3853 4537 m
-3960 4537 l
-3960 4540 l
-3853 4540 l
-3854 4540 m
-3961 4540 l
-3961 4543 l
-3854 4543 l
-3855 4543 m
-3962 4543 l
-3962 4545 l
-3855 4545 l
-3856 4545 m
-3963 4545 l
-3963 4548 l
-3856 4548 l
-3857 4548 m
-3964 4548 l
-3964 4549 l
-3857 4549 l
-3857 4549 m
-3964 4549 l
-3964 4550 l
-3857 4550 l
-3857 4550 m
-3961 4550 l
-3961 4551 l
-3857 4551 l
-3858 4551 m
-3958 4551 l
-3958 4552 l
-3858 4552 l
-3858 4552 m
-3955 4552 l
-3955 4553 l
-3858 4553 l
-3858 4553 m
-3952 4553 l
-3952 4554 l
-3858 4554 l
-3859 4554 m
-3949 4554 l
-3949 4555 l
-3859 4555 l
-3859 4555 m
-3946 4555 l
-3946 4556 l
-3859 4556 l
-3859 4556 m
-3944 4556 l
-3944 4557 l
-3859 4557 l
-3860 4557 m
-3941 4557 l
-3941 4558 l
-3860 4558 l
-3860 4558 m
-3938 4558 l
-3938 4559 l
-3860 4559 l
-3860 4559 m
-3935 4559 l
-3935 4560 l
-3860 4560 l
-3861 4560 m
-3932 4560 l
-3932 4561 l
-3861 4561 l
-3861 4561 m
-3929 4561 l
-3929 4562 l
-3861 4562 l
-3861 4562 m
-3927 4562 l
-3927 4563 l
-3861 4563 l
-3862 4563 m
-3924 4563 l
-3924 4564 l
-3862 4564 l
-3862 4564 m
-3921 4564 l
-3921 4565 l
-3862 4565 l
-3863 4565 m
-3918 4565 l
-3918 4566 l
-3863 4566 l
-3863 4566 m
-3915 4566 l
-3915 4567 l
-3863 4567 l
-3863 4567 m
-3912 4567 l
-3912 4568 l
-3863 4568 l
-3864 4568 m
-3909 4568 l
-3909 4569 l
-3864 4569 l
-3864 4569 m
-3907 4569 l
-3907 4570 l
-3864 4570 l
-3864 4570 m
-3904 4570 l
-3904 4571 l
-3864 4571 l
-3865 4571 m
-3901 4571 l
-3901 4572 l
-3865 4572 l
-3865 4572 m
-3898 4572 l
-3898 4573 l
-3865 4573 l
-3865 4573 m
-3895 4573 l
-3895 4574 l
-3865 4574 l
-3866 4574 m
-3892 4574 l
-3892 4575 l
-3866 4575 l
-3866 4575 m
-3889 4575 l
-3889 4576 l
-3866 4576 l
-3866 4576 m
-3887 4576 l
-3887 4577 l
-3866 4577 l
-3867 4577 m
-3884 4577 l
-3884 4578 l
-3867 4578 l
-3867 4578 m
-3881 4578 l
-3881 4579 l
-3867 4579 l
-3867 4579 m
-3878 4579 l
-3878 4580 l
-3867 4580 l
-3868 4580 m
-3875 4580 l
-3875 4581 l
-3868 4581 l
-3868 4581 m
-3872 4581 l
-3872 4582 l
-3868 4582 l
-Y
-3963.1 4549 m
-3923 4435 l
-3829 4468 l
-3869 4582 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3885 4466 m
-3899 4465 l
-3911 4475 l
-3921 4493 l
-3926 4505 l
-3928 4526 l
-3925 4540 l
-3914 4548 l
-3906 4551 l
-3893 4551 l
-3881 4542 l
-3870 4524 l
-3866 4512 l
-3863 4491 l
-3867 4476 l
-3877 4468 l
-3885 4466 l
-S
-1 g
-3085 4470 m
-3095 4470 l
-3095 4471 l
-3085 4471 l
-3085 4471 m
-3102 4471 l
-3102 4472 l
-3085 4472 l
-3085 4472 m
-3109 4472 l
-3109 4473 l
-3085 4473 l
-3085 4473 m
-3116 4473 l
-3116 4474 l
-3085 4474 l
-3085 4474 m
-3123 4474 l
-3123 4475 l
-3085 4475 l
-3085 4475 m
-3130 4475 l
-3130 4476 l
-3085 4476 l
-3085 4476 m
-3137 4476 l
-3137 4477 l
-3085 4477 l
-3084 4477 m
-3144 4477 l
-3144 4478 l
-3084 4478 l
-3084 4478 m
-3150 4478 l
-3150 4479 l
-3084 4479 l
-3084 4479 m
-3157 4479 l
-3157 4480 l
-3084 4480 l
-3084 4480 m
-3164 4480 l
-3164 4481 l
-3084 4481 l
-3084 4481 m
-3171 4481 l
-3171 4482 l
-3084 4482 l
-3084 4482 m
-3178 4482 l
-3178 4483 l
-3084 4483 l
-3084 4483 m
-3185 4483 l
-3185 4484 l
-3084 4484 l
-3083 4484 m
-3192 4484 l
-3192 4485 l
-3083 4485 l
-3083 4485 m
-3199 4485 l
-3199 4486 l
-3083 4486 l
-3083 4486 m
-3206 4486 l
-3206 4487 l
-3083 4487 l
-3083 4487 m
-3213 4487 l
-3213 4488 l
-3083 4488 l
-3083 4488 m
-3220 4488 l
-3220 4489 l
-3083 4489 l
-3083 4489 m
-3227 4489 l
-3227 4490 l
-3083 4490 l
-3083 4490 m
-3234 4490 l
-3234 4491 l
-3083 4491 l
-3082 4491 m
-3241 4491 l
-3241 4492 l
-3082 4492 l
-3082 4492 m
-3248 4492 l
-3248 4493 l
-3082 4493 l
-3082 4493 m
-3255 4493 l
-3255 4494 l
-3082 4494 l
-3082 4494 m
-3262 4494 l
-3262 4495 l
-3082 4495 l
-3082 4495 m
-3268 4495 l
-3268 4496 l
-3082 4496 l
-3082 4496 m
-3269 4496 l
-3269 4497 l
-3082 4497 l
-3082 4497 m
-3268 4497 l
-3268 4498 l
-3082 4498 l
-3081 4498 m
-3268 4498 l
-3268 4504 l
-3081 4504 l
-3081 4504 m
-3267 4504 l
-3267 4505 l
-3081 4505 l
-3080 4505 m
-3267 4505 l
-3267 4511 l
-3080 4511 l
-3080 4511 m
-3266 4511 l
-3266 4512 l
-3080 4512 l
-3079 4512 m
-3266 4512 l
-3266 4518 l
-3079 4518 l
-3079 4518 m
-3265 4518 l
-3265 4519 l
-3079 4519 l
-3078 4519 m
-3265 4519 l
-3265 4525 l
-3078 4525 l
-3078 4525 m
-3264 4525 l
-3264 4526 l
-3078 4526 l
-3077 4526 m
-3264 4526 l
-3264 4532 l
-3077 4532 l
-3077 4532 m
-3263 4532 l
-3263 4533 l
-3077 4533 l
-3076 4533 m
-3263 4533 l
-3263 4539 l
-3076 4539 l
-3076 4539 m
-3262 4539 l
-3262 4540 l
-3076 4540 l
-3075 4540 m
-3262 4540 l
-3262 4546 l
-3075 4546 l
-3075 4546 m
-3261 4546 l
-3261 4547 l
-3075 4547 l
-3074 4547 m
-3261 4547 l
-3261 4553 l
-3074 4553 l
-3074 4553 m
-3260 4553 l
-3260 4554 l
-3074 4554 l
-3073 4554 m
-3260 4554 l
-3260 4560 l
-3073 4560 l
-3073 4560 m
-3259 4560 l
-3259 4561 l
-3073 4561 l
-3072 4561 m
-3259 4561 l
-3259 4567 l
-3072 4567 l
-3072 4567 m
-3258 4567 l
-3258 4568 l
-3072 4568 l
-3071 4568 m
-3258 4568 l
-3258 4574 l
-3071 4574 l
-3071 4574 m
-3257 4574 l
-3257 4575 l
-3071 4575 l
-3070 4575 m
-3257 4575 l
-3257 4581 l
-3070 4581 l
-3070 4581 m
-3256 4581 l
-3256 4582 l
-3070 4582 l
-3069 4582 m
-3256 4582 l
-3256 4588 l
-3069 4588 l
-3069 4588 m
-3255 4588 l
-3255 4590 l
-3069 4590 l
-3069 4590 m
-3255 4590 l
-3255 4591 l
-3069 4591 l
-3076 4591 m
-3255 4591 l
-3255 4592 l
-3076 4592 l
-3083 4592 m
-3255 4592 l
-3255 4593 l
-3083 4593 l
-3090 4593 m
-3255 4593 l
-3255 4594 l
-3090 4594 l
-3097 4594 m
-3255 4594 l
-3255 4595 l
-3097 4595 l
-3104 4595 m
-3254 4595 l
-3254 4596 l
-3104 4596 l
-3111 4596 m
-3254 4596 l
-3254 4597 l
-3111 4597 l
-3118 4597 m
-3254 4597 l
-3254 4598 l
-3118 4598 l
-3125 4598 m
-3254 4598 l
-3254 4599 l
-3125 4599 l
-3132 4599 m
-3254 4599 l
-3254 4600 l
-3132 4600 l
-3139 4600 m
-3254 4600 l
-3254 4601 l
-3139 4601 l
-3146 4601 m
-3254 4601 l
-3254 4602 l
-3146 4602 l
-3153 4602 m
-3253 4602 l
-3253 4603 l
-3153 4603 l
-3160 4603 m
-3253 4603 l
-3253 4604 l
-3160 4604 l
-3167 4604 m
-3253 4604 l
-3253 4605 l
-3167 4605 l
-3174 4605 m
-3253 4605 l
-3253 4606 l
-3174 4606 l
-3181 4606 m
-3253 4606 l
-3253 4607 l
-3181 4607 l
-3188 4607 m
-3253 4607 l
-3253 4608 l
-3188 4608 l
-3195 4608 m
-3253 4608 l
-3253 4609 l
-3195 4609 l
-3202 4609 m
-3252 4609 l
-3252 4610 l
-3202 4610 l
-3209 4610 m
-3252 4610 l
-3252 4611 l
-3209 4611 l
-3216 4611 m
-3252 4611 l
-3252 4612 l
-3216 4612 l
-3223 4612 m
-3252 4612 l
-3252 4613 l
-3223 4613 l
-3230 4613 m
-3252 4613 l
-3252 4614 l
-3230 4614 l
-3237 4614 m
-3252 4614 l
-3252 4615 l
-3237 4615 l
-3244 4615 m
-3252 4615 l
-3252 4616 l
-3244 4616 l
-Y
-3086.1 4469.8 m
-3069 4590 l
-3251 4616 l
-3268 4496 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3133 4582 m
-3100 4518 l
-3162 4527 l
-S
-3133 4582 m
-3146 4495 l
-S
-3224 4595 m
-3183 4589 l
-3184 4552 l
-3188 4556 l
-3199 4562 l
-3212 4564 l
-3225 4562 l
-3234 4555 l
-3240 4543 l
-3241 4534 l
-3239 4521 l
-3232 4512 l
-3220 4506 l
-3208 4504 l
-3195 4507 l
-3190 4510 l
-3185 4518 l
-S
-1 g
-2354 4208 m
-2358 4208 l
-2358 4209 l
-2354 4209 l
-2354 4209 m
-2360 4209 l
-2360 4210 l
-2354 4210 l
-2353 4210 m
-2362 4210 l
-2362 4211 l
-2353 4211 l
-2353 4211 m
-2364 4211 l
-2364 4212 l
-2353 4212 l
-2352 4212 m
-2366 4212 l
-2366 4213 l
-2352 4213 l
-2352 4213 m
-2368 4213 l
-2368 4214 l
-2352 4214 l
-2351 4214 m
-2370 4214 l
-2370 4215 l
-2351 4215 l
-2351 4215 m
-2372 4215 l
-2372 4216 l
-2351 4216 l
-2350 4216 m
-2374 4216 l
-2374 4217 l
-2350 4217 l
-2350 4217 m
-2376 4217 l
-2376 4218 l
-2350 4218 l
-2349 4218 m
-2378 4218 l
-2378 4219 l
-2349 4219 l
-2349 4219 m
-2380 4219 l
-2380 4220 l
-2349 4220 l
-2348 4220 m
-2382 4220 l
-2382 4221 l
-2348 4221 l
-2348 4221 m
-2384 4221 l
-2384 4222 l
-2348 4222 l
-2347 4222 m
-2386 4222 l
-2386 4223 l
-2347 4223 l
-2347 4223 m
-2388 4223 l
-2388 4224 l
-2347 4224 l
-2346 4224 m
-2390 4224 l
-2390 4225 l
-2346 4225 l
-2346 4225 m
-2392 4225 l
-2392 4226 l
-2346 4226 l
-2345 4226 m
-2394 4226 l
-2394 4227 l
-2345 4227 l
-2345 4227 m
-2396 4227 l
-2396 4228 l
-2345 4228 l
-2344 4228 m
-2398 4228 l
-2398 4229 l
-2344 4229 l
-2344 4229 m
-2400 4229 l
-2400 4230 l
-2344 4230 l
-2343 4230 m
-2402 4230 l
-2402 4231 l
-2343 4231 l
-2343 4231 m
-2404 4231 l
-2404 4232 l
-2343 4232 l
-2342 4232 m
-2406 4232 l
-2406 4233 l
-2342 4233 l
-2342 4233 m
-2408 4233 l
-2408 4234 l
-2342 4234 l
-2341 4234 m
-2410 4234 l
-2410 4235 l
-2341 4235 l
-2341 4235 m
-2412 4235 l
-2412 4236 l
-2341 4236 l
-2340 4236 m
-2414 4236 l
-2414 4237 l
-2340 4237 l
-2340 4237 m
-2416 4237 l
-2416 4238 l
-2340 4238 l
-2339 4238 m
-2418 4238 l
-2418 4239 l
-2339 4239 l
-2339 4239 m
-2420 4239 l
-2420 4240 l
-2339 4240 l
-2338 4240 m
-2422 4240 l
-2422 4241 l
-2338 4241 l
-2338 4241 m
-2424 4241 l
-2424 4242 l
-2338 4242 l
-2337 4242 m
-2426 4242 l
-2426 4243 l
-2337 4243 l
-2337 4243 m
-2428 4243 l
-2428 4244 l
-2337 4244 l
-2336 4244 m
-2430 4244 l
-2430 4245 l
-2336 4245 l
-2336 4245 m
-2432 4245 l
-2432 4246 l
-2336 4246 l
-2335 4246 m
-2434 4246 l
-2434 4247 l
-2335 4247 l
-2335 4247 m
-2436 4247 l
-2436 4248 l
-2335 4248 l
-2334 4248 m
-2438 4248 l
-2438 4249 l
-2334 4249 l
-2334 4249 m
-2440 4249 l
-2440 4250 l
-2334 4250 l
-2333 4250 m
-2442 4250 l
-2442 4251 l
-2333 4251 l
-2333 4251 m
-2444 4251 l
-2444 4252 l
-2333 4252 l
-2332 4252 m
-2446 4252 l
-2446 4253 l
-2332 4253 l
-2332 4253 m
-2448 4253 l
-2448 4254 l
-2332 4254 l
-2331 4254 m
-2450 4254 l
-2450 4255 l
-2331 4255 l
-2331 4255 m
-2452 4255 l
-2452 4256 l
-2331 4256 l
-2330 4256 m
-2454 4256 l
-2454 4257 l
-2330 4257 l
-2330 4257 m
-2456 4257 l
-2456 4258 l
-2330 4258 l
-2329 4258 m
-2458 4258 l
-2458 4259 l
-2329 4259 l
-2329 4259 m
-2460 4259 l
-2460 4260 l
-2329 4260 l
-2328 4260 m
-2462 4260 l
-2462 4261 l
-2328 4261 l
-2328 4261 m
-2464 4261 l
-2464 4262 l
-2328 4262 l
-2327 4262 m
-2466 4262 l
-2466 4263 l
-2327 4263 l
-2327 4263 m
-2468 4263 l
-2468 4264 l
-2327 4264 l
-2326 4264 m
-2470 4264 l
-2470 4265 l
-2326 4265 l
-2326 4265 m
-2472 4265 l
-2472 4266 l
-2326 4266 l
-2325 4266 m
-2474 4266 l
-2474 4267 l
-2325 4267 l
-2325 4267 m
-2476 4267 l
-2476 4268 l
-2325 4268 l
-2324 4268 m
-2478 4268 l
-2478 4269 l
-2324 4269 l
-2324 4269 m
-2480 4269 l
-2480 4270 l
-2324 4270 l
-2323 4270 m
-2482 4270 l
-2482 4271 l
-2323 4271 l
-2323 4271 m
-2484 4271 l
-2484 4272 l
-2323 4272 l
-2322 4272 m
-2486 4272 l
-2486 4273 l
-2322 4273 l
-2322 4273 m
-2488 4273 l
-2488 4274 l
-2322 4274 l
-2321 4274 m
-2490 4274 l
-2490 4275 l
-2321 4275 l
-2321 4275 m
-2492 4275 l
-2492 4276 l
-2321 4276 l
-2320 4276 m
-2494 4276 l
-2494 4277 l
-2320 4277 l
-2320 4277 m
-2496 4277 l
-2496 4278 l
-2320 4278 l
-2319 4278 m
-2498 4278 l
-2498 4279 l
-2319 4279 l
-2319 4279 m
-2500 4279 l
-2500 4280 l
-2319 4280 l
-2318 4280 m
-2502 4280 l
-2502 4281 l
-2318 4281 l
-2318 4281 m
-2504 4281 l
-2504 4282 l
-2318 4282 l
-2317 4282 m
-2506 4282 l
-2506 4283 l
-2317 4283 l
-2317 4283 m
-2508 4283 l
-2508 4284 l
-2317 4284 l
-2316 4284 m
-2510 4284 l
-2510 4285 l
-2316 4285 l
-2316 4285 m
-2512 4285 l
-2512 4286 l
-2316 4286 l
-2315 4286 m
-2514 4286 l
-2514 4287 l
-2315 4287 l
-2315 4287 m
-2516 4287 l
-2516 4288 l
-2315 4288 l
-2314 4288 m
-2518 4288 l
-2518 4289 l
-2314 4289 l
-2314 4289 m
-2520 4289 l
-2520 4290 l
-2314 4290 l
-2313 4290 m
-2520 4290 l
-2520 4292 l
-2313 4292 l
-2312 4292 m
-2519 4292 l
-2519 4294 l
-2312 4294 l
-2311 4294 m
-2518 4294 l
-2518 4296 l
-2311 4296 l
-2310 4296 m
-2517 4296 l
-2517 4298 l
-2310 4298 l
-2309 4298 m
-2516 4298 l
-2516 4300 l
-2309 4300 l
-2308 4300 m
-2515 4300 l
-2515 4302 l
-2308 4302 l
-2307 4302 m
-2514 4302 l
-2514 4304 l
-2307 4304 l
-2306 4304 m
-2513 4304 l
-2513 4306 l
-2306 4306 l
-2305 4306 m
-2512 4306 l
-2512 4308 l
-2305 4308 l
-2304 4308 m
-2511 4308 l
-2511 4310 l
-2304 4310 l
-2303 4310 m
-2510 4310 l
-2510 4312 l
-2303 4312 l
-2302 4312 m
-2509 4312 l
-2509 4314 l
-2302 4314 l
-2301 4314 m
-2508 4314 l
-2508 4316 l
-2301 4316 l
-2301 4316 m
-2508 4316 l
-2508 4317 l
-2301 4317 l
-2303 4317 m
-2507 4317 l
-2507 4318 l
-2303 4318 l
-2305 4318 m
-2506 4318 l
-2506 4319 l
-2305 4319 l
-2307 4319 m
-2506 4319 l
-2506 4320 l
-2307 4320 l
-2309 4320 m
-2505 4320 l
-2505 4321 l
-2309 4321 l
-2311 4321 m
-2505 4321 l
-2505 4322 l
-2311 4322 l
-2313 4322 m
-2504 4322 l
-2504 4323 l
-2313 4323 l
-2315 4323 m
-2504 4323 l
-2504 4324 l
-2315 4324 l
-2317 4324 m
-2503 4324 l
-2503 4325 l
-2317 4325 l
-2319 4325 m
-2503 4325 l
-2503 4326 l
-2319 4326 l
-2321 4326 m
-2502 4326 l
-2502 4327 l
-2321 4327 l
-2323 4327 m
-2502 4327 l
-2502 4328 l
-2323 4328 l
-2325 4328 m
-2501 4328 l
-2501 4329 l
-2325 4329 l
-2327 4329 m
-2501 4329 l
-2501 4330 l
-2327 4330 l
-2329 4330 m
-2500 4330 l
-2500 4331 l
-2329 4331 l
-2331 4331 m
-2500 4331 l
-2500 4332 l
-2331 4332 l
-2333 4332 m
-2499 4332 l
-2499 4333 l
-2333 4333 l
-2335 4333 m
-2499 4333 l
-2499 4334 l
-2335 4334 l
-2337 4334 m
-2498 4334 l
-2498 4335 l
-2337 4335 l
-2339 4335 m
-2498 4335 l
-2498 4336 l
-2339 4336 l
-2341 4336 m
-2497 4336 l
-2497 4337 l
-2341 4337 l
-2343 4337 m
-2497 4337 l
-2497 4338 l
-2343 4338 l
-2345 4338 m
-2496 4338 l
-2496 4339 l
-2345 4339 l
-2347 4339 m
-2496 4339 l
-2496 4340 l
-2347 4340 l
-2349 4340 m
-2495 4340 l
-2495 4341 l
-2349 4341 l
-2351 4341 m
-2495 4341 l
-2495 4342 l
-2351 4342 l
-2353 4342 m
-2494 4342 l
-2494 4343 l
-2353 4343 l
-2355 4343 m
-2494 4343 l
-2494 4344 l
-2355 4344 l
-2357 4344 m
-2493 4344 l
-2493 4345 l
-2357 4345 l
-2359 4345 m
-2493 4345 l
-2493 4346 l
-2359 4346 l
-2361 4346 m
-2492 4346 l
-2492 4347 l
-2361 4347 l
-2363 4347 m
-2492 4347 l
-2492 4348 l
-2363 4348 l
-2365 4348 m
-2491 4348 l
-2491 4349 l
-2365 4349 l
-2367 4349 m
-2491 4349 l
-2491 4350 l
-2367 4350 l
-2369 4350 m
-2490 4350 l
-2490 4351 l
-2369 4351 l
-2371 4351 m
-2490 4351 l
-2490 4352 l
-2371 4352 l
-2373 4352 m
-2489 4352 l
-2489 4353 l
-2373 4353 l
-2375 4353 m
-2489 4353 l
-2489 4354 l
-2375 4354 l
-2377 4354 m
-2488 4354 l
-2488 4355 l
-2377 4355 l
-2379 4355 m
-2488 4355 l
-2488 4356 l
-2379 4356 l
-2381 4356 m
-2487 4356 l
-2487 4357 l
-2381 4357 l
-2383 4357 m
-2487 4357 l
-2487 4358 l
-2383 4358 l
-2385 4358 m
-2486 4358 l
-2486 4359 l
-2385 4359 l
-2387 4359 m
-2486 4359 l
-2486 4360 l
-2387 4360 l
-2389 4360 m
-2485 4360 l
-2485 4361 l
-2389 4361 l
-2391 4361 m
-2485 4361 l
-2485 4362 l
-2391 4362 l
-2393 4362 m
-2484 4362 l
-2484 4363 l
-2393 4363 l
-2395 4363 m
-2484 4363 l
-2484 4364 l
-2395 4364 l
-2397 4364 m
-2483 4364 l
-2483 4365 l
-2397 4365 l
-2399 4365 m
-2483 4365 l
-2483 4366 l
-2399 4366 l
-2401 4366 m
-2482 4366 l
-2482 4367 l
-2401 4367 l
-2403 4367 m
-2482 4367 l
-2482 4368 l
-2403 4368 l
-2405 4368 m
-2481 4368 l
-2481 4369 l
-2405 4369 l
-2407 4369 m
-2481 4369 l
-2481 4370 l
-2407 4370 l
-2409 4370 m
-2480 4370 l
-2480 4371 l
-2409 4371 l
-2411 4371 m
-2480 4371 l
-2480 4372 l
-2411 4372 l
-2413 4372 m
-2479 4372 l
-2479 4373 l
-2413 4373 l
-2415 4373 m
-2479 4373 l
-2479 4374 l
-2415 4374 l
-2417 4374 m
-2478 4374 l
-2478 4375 l
-2417 4375 l
-2419 4375 m
-2478 4375 l
-2478 4376 l
-2419 4376 l
-2421 4376 m
-2477 4376 l
-2477 4377 l
-2421 4377 l
-2423 4377 m
-2477 4377 l
-2477 4378 l
-2423 4378 l
-2425 4378 m
-2476 4378 l
-2476 4379 l
-2425 4379 l
-2427 4379 m
-2476 4379 l
-2476 4380 l
-2427 4380 l
-2429 4380 m
-2475 4380 l
-2475 4381 l
-2429 4381 l
-2431 4381 m
-2475 4381 l
-2475 4382 l
-2431 4382 l
-2433 4382 m
-2474 4382 l
-2474 4383 l
-2433 4383 l
-2435 4383 m
-2474 4383 l
-2474 4384 l
-2435 4384 l
-2437 4384 m
-2473 4384 l
-2473 4385 l
-2437 4385 l
-2439 4385 m
-2473 4385 l
-2473 4386 l
-2439 4386 l
-2441 4386 m
-2472 4386 l
-2472 4387 l
-2441 4387 l
-2443 4387 m
-2472 4387 l
-2472 4388 l
-2443 4388 l
-2445 4388 m
-2471 4388 l
-2471 4389 l
-2445 4389 l
-2447 4389 m
-2471 4389 l
-2471 4390 l
-2447 4390 l
-2449 4390 m
-2470 4390 l
-2470 4391 l
-2449 4391 l
-2451 4391 m
-2470 4391 l
-2470 4392 l
-2451 4392 l
-2453 4392 m
-2469 4392 l
-2469 4393 l
-2453 4393 l
-2455 4393 m
-2469 4393 l
-2469 4394 l
-2455 4394 l
-2457 4394 m
-2468 4394 l
-2468 4395 l
-2457 4395 l
-2459 4395 m
-2468 4395 l
-2468 4396 l
-2459 4396 l
-2461 4396 m
-2467 4396 l
-2467 4397 l
-2461 4397 l
-2463 4397 m
-2467 4397 l
-2467 4398 l
-2463 4398 l
-Y
-2355.3 4208 m
-2301 4316 l
-2466 4398 l
-2520 4290 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2389 4309 m
-2391 4296 l
-2387 4285 l
-2378 4275 l
-2374 4273 l
-2361 4272 l
-2350 4275 l
-2341 4285 l
-2339 4288 l
-2337 4301 l
-2341 4313 l
-2350 4322 l
-2354 4324 l
-2367 4326 l
-2378 4322 l
-2389 4309 l
-2398 4290 l
-2404 4270 l
-2402 4255 l
-2393 4245 l
-2385 4242 l
-2372 4240 l
-2365 4245 l
-S
-2425 4359 m
-2415 4350 l
-2413 4335 l
-2419 4314 l
-2425 4303 l
-2438 4286 l
-2451 4279 l
-2464 4281 l
-2471 4284 l
-2481 4294 l
-2483 4309 l
-2477 4329 l
-2471 4340 l
-2458 4357 l
-2445 4365 l
-2432 4363 l
-2425 4359 l
-S
-1 g
-1733 3720 m
-1736 3720 l
-1736 3721 l
-1733 3721 l
-1732 3721 m
-1737 3721 l
-1737 3722 l
-1732 3722 l
-1731 3722 m
-1738 3722 l
-1738 3723 l
-1731 3723 l
-1730 3723 m
-1739 3723 l
-1739 3724 l
-1730 3724 l
-1729 3724 m
-1740 3724 l
-1740 3725 l
-1729 3725 l
-1728 3725 m
-1741 3725 l
-1741 3726 l
-1728 3726 l
-1727 3726 m
-1742 3726 l
-1742 3727 l
-1727 3727 l
-1726 3727 m
-1742 3727 l
-1742 3728 l
-1726 3728 l
-1725 3728 m
-1743 3728 l
-1743 3729 l
-1725 3729 l
-1723 3729 m
-1744 3729 l
-1744 3730 l
-1723 3730 l
-1722 3730 m
-1745 3730 l
-1745 3731 l
-1722 3731 l
-1721 3731 m
-1746 3731 l
-1746 3732 l
-1721 3732 l
-1720 3732 m
-1747 3732 l
-1747 3733 l
-1720 3733 l
-1719 3733 m
-1748 3733 l
-1748 3734 l
-1719 3734 l
-1718 3734 m
-1749 3734 l
-1749 3735 l
-1718 3735 l
-1717 3735 m
-1750 3735 l
-1750 3736 l
-1717 3736 l
-1716 3736 m
-1751 3736 l
-1751 3737 l
-1716 3737 l
-1715 3737 m
-1752 3737 l
-1752 3738 l
-1715 3738 l
-1714 3738 m
-1753 3738 l
-1753 3739 l
-1714 3739 l
-1713 3739 m
-1754 3739 l
-1754 3740 l
-1713 3740 l
-1712 3740 m
-1755 3740 l
-1755 3741 l
-1712 3741 l
-1711 3741 m
-1756 3741 l
-1756 3742 l
-1711 3742 l
-1710 3742 m
-1757 3742 l
-1757 3743 l
-1710 3743 l
-1709 3743 m
-1758 3743 l
-1758 3744 l
-1709 3744 l
-1708 3744 m
-1759 3744 l
-1759 3745 l
-1708 3745 l
-1707 3745 m
-1760 3745 l
-1760 3746 l
-1707 3746 l
-1706 3746 m
-1761 3746 l
-1761 3747 l
-1706 3747 l
-1705 3747 m
-1762 3747 l
-1762 3748 l
-1705 3748 l
-1704 3748 m
-1763 3748 l
-1763 3749 l
-1704 3749 l
-1703 3749 m
-1764 3749 l
-1764 3750 l
-1703 3750 l
-1702 3750 m
-1765 3750 l
-1765 3751 l
-1702 3751 l
-1701 3751 m
-1766 3751 l
-1766 3752 l
-1701 3752 l
-1700 3752 m
-1767 3752 l
-1767 3753 l
-1700 3753 l
-1699 3753 m
-1768 3753 l
-1768 3754 l
-1699 3754 l
-1697 3754 m
-1769 3754 l
-1769 3755 l
-1697 3755 l
-1696 3755 m
-1770 3755 l
-1770 3756 l
-1696 3756 l
-1695 3756 m
-1771 3756 l
-1771 3757 l
-1695 3757 l
-1694 3757 m
-1772 3757 l
-1772 3758 l
-1694 3758 l
-1693 3758 m
-1773 3758 l
-1773 3759 l
-1693 3759 l
-1692 3759 m
-1774 3759 l
-1774 3760 l
-1692 3760 l
-1691 3760 m
-1775 3760 l
-1775 3761 l
-1691 3761 l
-1690 3761 m
-1776 3761 l
-1776 3762 l
-1690 3762 l
-1689 3762 m
-1776 3762 l
-1776 3763 l
-1689 3763 l
-1688 3763 m
-1777 3763 l
-1777 3764 l
-1688 3764 l
-1687 3764 m
-1778 3764 l
-1778 3765 l
-1687 3765 l
-1686 3765 m
-1779 3765 l
-1779 3766 l
-1686 3766 l
-1685 3766 m
-1780 3766 l
-1780 3767 l
-1685 3767 l
-1684 3767 m
-1781 3767 l
-1781 3768 l
-1684 3768 l
-1683 3768 m
-1782 3768 l
-1782 3769 l
-1683 3769 l
-1682 3769 m
-1783 3769 l
-1783 3770 l
-1682 3770 l
-1681 3770 m
-1784 3770 l
-1784 3771 l
-1681 3771 l
-1680 3771 m
-1785 3771 l
-1785 3772 l
-1680 3772 l
-1679 3772 m
-1786 3772 l
-1786 3773 l
-1679 3773 l
-1678 3773 m
-1787 3773 l
-1787 3774 l
-1678 3774 l
-1677 3774 m
-1788 3774 l
-1788 3775 l
-1677 3775 l
-1676 3775 m
-1789 3775 l
-1789 3776 l
-1676 3776 l
-1675 3776 m
-1790 3776 l
-1790 3777 l
-1675 3777 l
-1674 3777 m
-1791 3777 l
-1791 3778 l
-1674 3778 l
-1673 3778 m
-1792 3778 l
-1792 3779 l
-1673 3779 l
-1671 3779 m
-1793 3779 l
-1793 3780 l
-1671 3780 l
-1670 3780 m
-1794 3780 l
-1794 3781 l
-1670 3781 l
-1669 3781 m
-1795 3781 l
-1795 3782 l
-1669 3782 l
-1668 3782 m
-1796 3782 l
-1796 3783 l
-1668 3783 l
-1667 3783 m
-1797 3783 l
-1797 3784 l
-1667 3784 l
-1666 3784 m
-1798 3784 l
-1798 3785 l
-1666 3785 l
-1665 3785 m
-1799 3785 l
-1799 3786 l
-1665 3786 l
-1664 3786 m
-1800 3786 l
-1800 3787 l
-1664 3787 l
-1663 3787 m
-1801 3787 l
-1801 3788 l
-1663 3788 l
-1662 3788 m
-1802 3788 l
-1802 3789 l
-1662 3789 l
-1661 3789 m
-1803 3789 l
-1803 3790 l
-1661 3790 l
-1660 3790 m
-1804 3790 l
-1804 3791 l
-1660 3791 l
-1659 3791 m
-1805 3791 l
-1805 3792 l
-1659 3792 l
-1658 3792 m
-1806 3792 l
-1806 3793 l
-1658 3793 l
-1657 3793 m
-1807 3793 l
-1807 3794 l
-1657 3794 l
-1656 3794 m
-1808 3794 l
-1808 3795 l
-1656 3795 l
-1655 3795 m
-1809 3795 l
-1809 3796 l
-1655 3796 l
-1654 3796 m
-1810 3796 l
-1810 3797 l
-1654 3797 l
-1653 3797 m
-1810 3797 l
-1810 3798 l
-1653 3798 l
-1652 3798 m
-1811 3798 l
-1811 3799 l
-1652 3799 l
-1651 3799 m
-1812 3799 l
-1812 3800 l
-1651 3800 l
-1650 3800 m
-1813 3800 l
-1813 3801 l
-1650 3801 l
-1649 3801 m
-1814 3801 l
-1814 3802 l
-1649 3802 l
-1648 3802 m
-1815 3802 l
-1815 3803 l
-1648 3803 l
-1647 3803 m
-1816 3803 l
-1816 3804 l
-1647 3804 l
-1647 3804 m
-1817 3804 l
-1817 3805 l
-1647 3805 l
-1647 3805 m
-1818 3805 l
-1818 3806 l
-1647 3806 l
-1648 3806 m
-1819 3806 l
-1819 3807 l
-1648 3807 l
-1649 3807 m
-1820 3807 l
-1820 3808 l
-1649 3808 l
-1650 3808 m
-1821 3808 l
-1821 3809 l
-1650 3809 l
-1651 3809 m
-1822 3809 l
-1822 3810 l
-1651 3810 l
-1652 3810 m
-1823 3810 l
-1823 3811 l
-1652 3811 l
-1653 3811 m
-1824 3811 l
-1824 3812 l
-1653 3812 l
-1654 3812 m
-1825 3812 l
-1825 3813 l
-1654 3813 l
-1655 3813 m
-1826 3813 l
-1826 3814 l
-1655 3814 l
-1656 3814 m
-1827 3814 l
-1827 3815 l
-1656 3815 l
-1657 3815 m
-1828 3815 l
-1828 3816 l
-1657 3816 l
-1658 3816 m
-1829 3816 l
-1829 3817 l
-1658 3817 l
-1659 3817 m
-1830 3817 l
-1830 3818 l
-1659 3818 l
-1660 3818 m
-1831 3818 l
-1831 3819 l
-1660 3819 l
-1661 3819 m
-1832 3819 l
-1832 3820 l
-1661 3820 l
-1662 3820 m
-1833 3820 l
-1833 3821 l
-1662 3821 l
-1663 3821 m
-1834 3821 l
-1834 3822 l
-1663 3822 l
-1664 3822 m
-1835 3822 l
-1835 3823 l
-1664 3823 l
-1665 3823 m
-1836 3823 l
-1836 3824 l
-1665 3824 l
-1666 3824 m
-1837 3824 l
-1837 3825 l
-1666 3825 l
-1667 3825 m
-1838 3825 l
-1838 3826 l
-1667 3826 l
-1668 3826 m
-1839 3826 l
-1839 3827 l
-1668 3827 l
-1669 3827 m
-1840 3827 l
-1840 3828 l
-1669 3828 l
-1670 3828 m
-1841 3828 l
-1841 3829 l
-1670 3829 l
-1671 3829 m
-1842 3829 l
-1842 3830 l
-1671 3830 l
-1672 3830 m
-1843 3830 l
-1843 3831 l
-1672 3831 l
-1673 3831 m
-1844 3831 l
-1844 3832 l
-1673 3832 l
-1674 3832 m
-1844 3832 l
-1844 3833 l
-1674 3833 l
-1675 3833 m
-1845 3833 l
-1845 3834 l
-1675 3834 l
-1676 3834 m
-1846 3834 l
-1846 3835 l
-1676 3835 l
-1677 3835 m
-1847 3835 l
-1847 3836 l
-1677 3836 l
-1678 3836 m
-1848 3836 l
-1848 3837 l
-1678 3837 l
-1679 3837 m
-1849 3837 l
-1849 3838 l
-1679 3838 l
-1680 3838 m
-1850 3838 l
-1850 3839 l
-1680 3839 l
-1681 3839 m
-1851 3839 l
-1851 3840 l
-1681 3840 l
-1682 3840 m
-1852 3840 l
-1852 3841 l
-1682 3841 l
-1682 3841 m
-1853 3841 l
-1853 3842 l
-1682 3842 l
-1683 3842 m
-1854 3842 l
-1854 3843 l
-1683 3843 l
-1684 3843 m
-1855 3843 l
-1855 3844 l
-1684 3844 l
-1685 3844 m
-1856 3844 l
-1856 3845 l
-1685 3845 l
-1686 3845 m
-1857 3845 l
-1857 3846 l
-1686 3846 l
-1687 3846 m
-1858 3846 l
-1858 3847 l
-1687 3847 l
-1688 3847 m
-1859 3847 l
-1859 3848 l
-1688 3848 l
-1689 3848 m
-1860 3848 l
-1860 3849 l
-1689 3849 l
-1690 3849 m
-1861 3849 l
-1861 3850 l
-1690 3850 l
-1691 3850 m
-1862 3850 l
-1862 3851 l
-1691 3851 l
-1692 3851 m
-1863 3851 l
-1863 3852 l
-1692 3852 l
-1693 3852 m
-1864 3852 l
-1864 3853 l
-1693 3853 l
-1694 3853 m
-1865 3853 l
-1865 3854 l
-1694 3854 l
-1695 3854 m
-1866 3854 l
-1866 3855 l
-1695 3855 l
-1696 3855 m
-1867 3855 l
-1867 3856 l
-1696 3856 l
-1697 3856 m
-1868 3856 l
-1868 3857 l
-1697 3857 l
-1698 3857 m
-1869 3857 l
-1869 3858 l
-1698 3858 l
-1699 3858 m
-1870 3858 l
-1870 3859 l
-1699 3859 l
-1700 3859 m
-1871 3859 l
-1871 3860 l
-1700 3860 l
-1701 3860 m
-1872 3860 l
-1872 3861 l
-1701 3861 l
-1702 3861 m
-1873 3861 l
-1873 3862 l
-1702 3862 l
-1703 3862 m
-1874 3862 l
-1874 3863 l
-1703 3863 l
-1704 3863 m
-1875 3863 l
-1875 3864 l
-1704 3864 l
-1705 3864 m
-1876 3864 l
-1876 3865 l
-1705 3865 l
-1706 3865 m
-1877 3865 l
-1877 3866 l
-1706 3866 l
-1707 3866 m
-1878 3866 l
-1878 3867 l
-1707 3867 l
-1708 3867 m
-1878 3867 l
-1878 3868 l
-1708 3868 l
-1709 3868 m
-1879 3868 l
-1879 3869 l
-1709 3869 l
-1710 3869 m
-1880 3869 l
-1880 3870 l
-1710 3870 l
-1711 3870 m
-1881 3870 l
-1881 3871 l
-1711 3871 l
-1712 3871 m
-1882 3871 l
-1882 3872 l
-1712 3872 l
-1713 3872 m
-1883 3872 l
-1883 3873 l
-1713 3873 l
-1714 3873 m
-1884 3873 l
-1884 3874 l
-1714 3874 l
-1715 3874 m
-1885 3874 l
-1885 3875 l
-1715 3875 l
-1716 3875 m
-1886 3875 l
-1886 3876 l
-1716 3876 l
-1717 3876 m
-1887 3876 l
-1887 3877 l
-1717 3877 l
-1718 3877 m
-1888 3877 l
-1888 3878 l
-1718 3878 l
-1718 3878 m
-1889 3878 l
-1889 3879 l
-1718 3879 l
-1719 3879 m
-1890 3879 l
-1890 3880 l
-1719 3880 l
-1720 3880 m
-1891 3880 l
-1891 3881 l
-1720 3881 l
-1721 3881 m
-1892 3881 l
-1892 3882 l
-1721 3882 l
-1722 3882 m
-1893 3882 l
-1893 3883 l
-1722 3883 l
-1723 3883 m
-1894 3883 l
-1894 3884 l
-1723 3884 l
-1724 3884 m
-1895 3884 l
-1895 3885 l
-1724 3885 l
-1725 3885 m
-1896 3885 l
-1896 3886 l
-1725 3886 l
-1726 3886 m
-1897 3886 l
-1897 3887 l
-1726 3887 l
-1727 3887 m
-1898 3887 l
-1898 3888 l
-1727 3888 l
-1728 3888 m
-1899 3888 l
-1899 3889 l
-1728 3889 l
-1729 3889 m
-1900 3889 l
-1900 3890 l
-1729 3890 l
-1730 3890 m
-1901 3890 l
-1901 3891 l
-1730 3891 l
-1731 3891 m
-1902 3891 l
-1902 3892 l
-1731 3892 l
-1732 3892 m
-1903 3892 l
-1903 3893 l
-1732 3893 l
-1733 3893 m
-1904 3893 l
-1904 3894 l
-1733 3894 l
-1734 3894 m
-1905 3894 l
-1905 3895 l
-1734 3895 l
-1735 3895 m
-1906 3895 l
-1906 3896 l
-1735 3896 l
-1736 3896 m
-1907 3896 l
-1907 3897 l
-1736 3897 l
-1737 3897 m
-1908 3897 l
-1908 3898 l
-1737 3898 l
-1738 3898 m
-1909 3898 l
-1909 3899 l
-1738 3899 l
-1739 3899 m
-1910 3899 l
-1910 3900 l
-1739 3900 l
-1740 3900 m
-1911 3900 l
-1911 3901 l
-1740 3901 l
-1741 3901 m
-1912 3901 l
-1912 3902 l
-1741 3902 l
-1742 3902 m
-1913 3902 l
-1913 3903 l
-1742 3903 l
-1743 3903 m
-1912 3903 l
-1912 3904 l
-1743 3904 l
-1744 3904 m
-1911 3904 l
-1911 3905 l
-1744 3905 l
-1745 3905 m
-1910 3905 l
-1910 3906 l
-1745 3906 l
-1746 3906 m
-1909 3906 l
-1909 3907 l
-1746 3907 l
-1747 3907 m
-1908 3907 l
-1908 3908 l
-1747 3908 l
-1748 3908 m
-1907 3908 l
-1907 3909 l
-1748 3909 l
-1749 3909 m
-1906 3909 l
-1906 3910 l
-1749 3910 l
-1750 3910 m
-1905 3910 l
-1905 3911 l
-1750 3911 l
-1751 3911 m
-1904 3911 l
-1904 3912 l
-1751 3912 l
-1752 3912 m
-1903 3912 l
-1903 3913 l
-1752 3913 l
-1753 3913 m
-1902 3913 l
-1902 3914 l
-1753 3914 l
-1753 3914 m
-1901 3914 l
-1901 3915 l
-1753 3915 l
-1754 3915 m
-1900 3915 l
-1900 3916 l
-1754 3916 l
-1755 3916 m
-1899 3916 l
-1899 3917 l
-1755 3917 l
-1756 3917 m
-1898 3917 l
-1898 3918 l
-1756 3918 l
-1757 3918 m
-1897 3918 l
-1897 3919 l
-1757 3919 l
-1758 3919 m
-1896 3919 l
-1896 3920 l
-1758 3920 l
-1759 3920 m
-1895 3920 l
-1895 3921 l
-1759 3921 l
-1760 3921 m
-1894 3921 l
-1894 3922 l
-1760 3922 l
-1761 3922 m
-1893 3922 l
-1893 3923 l
-1761 3923 l
-1762 3923 m
-1892 3923 l
-1892 3924 l
-1762 3924 l
-1763 3924 m
-1891 3924 l
-1891 3925 l
-1763 3925 l
-1764 3925 m
-1890 3925 l
-1890 3926 l
-1764 3926 l
-1765 3926 m
-1889 3926 l
-1889 3927 l
-1765 3927 l
-1766 3927 m
-1888 3927 l
-1888 3928 l
-1766 3928 l
-1767 3928 m
-1887 3928 l
-1887 3929 l
-1767 3929 l
-1768 3929 m
-1886 3929 l
-1886 3930 l
-1768 3930 l
-1769 3930 m
-1885 3930 l
-1885 3931 l
-1769 3931 l
-1770 3931 m
-1883 3931 l
-1883 3932 l
-1770 3932 l
-1771 3932 m
-1882 3932 l
-1882 3933 l
-1771 3933 l
-1772 3933 m
-1881 3933 l
-1881 3934 l
-1772 3934 l
-1773 3934 m
-1880 3934 l
-1880 3935 l
-1773 3935 l
-1774 3935 m
-1879 3935 l
-1879 3936 l
-1774 3936 l
-1775 3936 m
-1878 3936 l
-1878 3937 l
-1775 3937 l
-1776 3937 m
-1877 3937 l
-1877 3938 l
-1776 3938 l
-1777 3938 m
-1876 3938 l
-1876 3939 l
-1777 3939 l
-1778 3939 m
-1875 3939 l
-1875 3940 l
-1778 3940 l
-1779 3940 m
-1874 3940 l
-1874 3941 l
-1779 3941 l
-1780 3941 m
-1873 3941 l
-1873 3942 l
-1780 3942 l
-1781 3942 m
-1872 3942 l
-1872 3943 l
-1781 3943 l
-1782 3943 m
-1871 3943 l
-1871 3944 l
-1782 3944 l
-1783 3944 m
-1870 3944 l
-1870 3945 l
-1783 3945 l
-1784 3945 m
-1869 3945 l
-1869 3946 l
-1784 3946 l
-1785 3946 m
-1868 3946 l
-1868 3947 l
-1785 3947 l
-1786 3947 m
-1867 3947 l
-1867 3948 l
-1786 3948 l
-1787 3948 m
-1866 3948 l
-1866 3949 l
-1787 3949 l
-1788 3949 m
-1865 3949 l
-1865 3950 l
-1788 3950 l
-1789 3950 m
-1864 3950 l
-1864 3951 l
-1789 3951 l
-1789 3951 m
-1863 3951 l
-1863 3952 l
-1789 3952 l
-1790 3952 m
-1862 3952 l
-1862 3953 l
-1790 3953 l
-1791 3953 m
-1861 3953 l
-1861 3954 l
-1791 3954 l
-1792 3954 m
-1860 3954 l
-1860 3955 l
-1792 3955 l
-1793 3955 m
-1859 3955 l
-1859 3956 l
-1793 3956 l
-1794 3956 m
-1858 3956 l
-1858 3957 l
-1794 3957 l
-1795 3957 m
-1857 3957 l
-1857 3958 l
-1795 3958 l
-1796 3958 m
-1856 3958 l
-1856 3959 l
-1796 3959 l
-1797 3959 m
-1854 3959 l
-1854 3960 l
-1797 3960 l
-1798 3960 m
-1853 3960 l
-1853 3961 l
-1798 3961 l
-1799 3961 m
-1852 3961 l
-1852 3962 l
-1799 3962 l
-1800 3962 m
-1851 3962 l
-1851 3963 l
-1800 3963 l
-1801 3963 m
-1850 3963 l
-1850 3964 l
-1801 3964 l
-1802 3964 m
-1849 3964 l
-1849 3965 l
-1802 3965 l
-1803 3965 m
-1848 3965 l
-1848 3966 l
-1803 3966 l
-1804 3966 m
-1847 3966 l
-1847 3967 l
-1804 3967 l
-1805 3967 m
-1846 3967 l
-1846 3968 l
-1805 3968 l
-1806 3968 m
-1845 3968 l
-1845 3969 l
-1806 3969 l
-1807 3969 m
-1844 3969 l
-1844 3970 l
-1807 3970 l
-1808 3970 m
-1843 3970 l
-1843 3971 l
-1808 3971 l
-1809 3971 m
-1842 3971 l
-1842 3972 l
-1809 3972 l
-1810 3972 m
-1841 3972 l
-1841 3973 l
-1810 3973 l
-1811 3973 m
-1840 3973 l
-1840 3974 l
-1811 3974 l
-1812 3974 m
-1839 3974 l
-1839 3975 l
-1812 3975 l
-1813 3975 m
-1838 3975 l
-1838 3976 l
-1813 3976 l
-1814 3976 m
-1837 3976 l
-1837 3977 l
-1814 3977 l
-1815 3977 m
-1836 3977 l
-1836 3978 l
-1815 3978 l
-1816 3978 m
-1835 3978 l
-1835 3979 l
-1816 3979 l
-1817 3979 m
-1834 3979 l
-1834 3980 l
-1817 3980 l
-1818 3980 m
-1833 3980 l
-1833 3981 l
-1818 3981 l
-1819 3981 m
-1832 3981 l
-1832 3982 l
-1819 3982 l
-1820 3982 m
-1831 3982 l
-1831 3983 l
-1820 3983 l
-1821 3983 m
-1830 3983 l
-1830 3984 l
-1821 3984 l
-1822 3984 m
-1829 3984 l
-1829 3985 l
-1822 3985 l
-1823 3985 m
-1828 3985 l
-1828 3986 l
-1823 3986 l
-1824 3986 m
-1827 3986 l
-1827 3987 l
-1824 3987 l
-Y
-1734.3 3720.1 m
-1647 3804 l
-1825 3987 l
-1912 3903 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1686 3796 m
-1689 3805 l
-1688 3823 l
-1751 3762 l
-S
-1729 3865 m
-1761 3898 l
-1768 3856 l
-1776 3865 l
-1785 3869 l
-1791 3869 l
-1803 3863 l
-1809 3857 l
-1815 3845 l
-1815 3834 l
-1809 3822 l
-1801 3813 l
-1789 3807 l
-1783 3807 l
-1774 3809 l
-S
-1816 3955 m
-1787 3925 l
-1811 3896 l
-1811 3901 l
-1817 3913 l
-1826 3922 l
-1837 3928 l
-1849 3929 l
-1861 3923 l
-1867 3917 l
-1873 3905 l
-1873 3894 l
-1868 3882 l
-1859 3873 l
-1847 3867 l
-1841 3866 l
-1832 3869 l
-S
-1 g
-1467 3111 m
-1471 3111 l
-1471 3112 l
-1467 3112 l
-1462 3112 m
-1471 3112 l
-1471 3113 l
-1462 3113 l
-1456 3113 m
-1471 3113 l
-1471 3114 l
-1456 3114 l
-1451 3114 m
-1471 3114 l
-1471 3115 l
-1451 3115 l
-1446 3115 m
-1472 3115 l
-1472 3116 l
-1446 3116 l
-1441 3116 m
-1472 3116 l
-1472 3117 l
-1441 3117 l
-1435 3117 m
-1472 3117 l
-1472 3118 l
-1435 3118 l
-1430 3118 m
-1472 3118 l
-1472 3119 l
-1430 3119 l
-1425 3119 m
-1472 3119 l
-1472 3120 l
-1425 3120 l
-1419 3120 m
-1472 3120 l
-1472 3121 l
-1419 3121 l
-1414 3121 m
-1473 3121 l
-1473 3122 l
-1414 3122 l
-1409 3122 m
-1473 3122 l
-1473 3123 l
-1409 3123 l
-1403 3123 m
-1473 3123 l
-1473 3124 l
-1403 3124 l
-1398 3124 m
-1473 3124 l
-1473 3125 l
-1398 3125 l
-1393 3125 m
-1473 3125 l
-1473 3126 l
-1393 3126 l
-1388 3126 m
-1474 3126 l
-1474 3127 l
-1388 3127 l
-1382 3127 m
-1474 3127 l
-1474 3128 l
-1382 3128 l
-1377 3128 m
-1474 3128 l
-1474 3129 l
-1377 3129 l
-1372 3129 m
-1474 3129 l
-1474 3130 l
-1372 3130 l
-1366 3130 m
-1474 3130 l
-1474 3131 l
-1366 3131 l
-1361 3131 m
-1475 3131 l
-1475 3132 l
-1361 3132 l
-1356 3132 m
-1475 3132 l
-1475 3133 l
-1356 3133 l
-1351 3133 m
-1475 3133 l
-1475 3134 l
-1351 3134 l
-1351 3134 m
-1475 3134 l
-1475 3137 l
-1351 3137 l
-1351 3137 m
-1476 3137 l
-1476 3140 l
-1351 3140 l
-1352 3140 m
-1476 3140 l
-1476 3142 l
-1352 3142 l
-1352 3142 m
-1477 3142 l
-1477 3145 l
-1352 3145 l
-1353 3145 m
-1477 3145 l
-1477 3147 l
-1353 3147 l
-1353 3147 m
-1478 3147 l
-1478 3150 l
-1353 3150 l
-1354 3150 m
-1478 3150 l
-1478 3153 l
-1354 3153 l
-1354 3153 m
-1479 3153 l
-1479 3156 l
-1354 3156 l
-1355 3156 m
-1479 3156 l
-1479 3158 l
-1355 3158 l
-1355 3158 m
-1480 3158 l
-1480 3161 l
-1355 3161 l
-1356 3161 m
-1480 3161 l
-1480 3163 l
-1356 3163 l
-1356 3163 m
-1481 3163 l
-1481 3166 l
-1356 3166 l
-1357 3166 m
-1481 3166 l
-1481 3169 l
-1357 3169 l
-1357 3169 m
-1482 3169 l
-1482 3172 l
-1357 3172 l
-1358 3172 m
-1482 3172 l
-1482 3174 l
-1358 3174 l
-1358 3174 m
-1483 3174 l
-1483 3177 l
-1358 3177 l
-1359 3177 m
-1483 3177 l
-1483 3180 l
-1359 3180 l
-1359 3180 m
-1484 3180 l
-1484 3182 l
-1359 3182 l
-1360 3182 m
-1484 3182 l
-1484 3185 l
-1360 3185 l
-1360 3185 m
-1485 3185 l
-1485 3188 l
-1360 3188 l
-1361 3188 m
-1485 3188 l
-1485 3190 l
-1361 3190 l
-1361 3190 m
-1486 3190 l
-1486 3193 l
-1361 3193 l
-1362 3193 m
-1486 3193 l
-1486 3196 l
-1362 3196 l
-1362 3196 m
-1487 3196 l
-1487 3198 l
-1362 3198 l
-1363 3198 m
-1487 3198 l
-1487 3201 l
-1363 3201 l
-1363 3201 m
-1488 3201 l
-1488 3204 l
-1363 3204 l
-1364 3204 m
-1488 3204 l
-1488 3206 l
-1364 3206 l
-1364 3206 m
-1489 3206 l
-1489 3209 l
-1364 3209 l
-1365 3209 m
-1489 3209 l
-1489 3212 l
-1365 3212 l
-1365 3212 m
-1490 3212 l
-1490 3214 l
-1365 3214 l
-1366 3214 m
-1490 3214 l
-1490 3217 l
-1366 3217 l
-1366 3217 m
-1491 3217 l
-1491 3220 l
-1366 3220 l
-1367 3220 m
-1491 3220 l
-1491 3222 l
-1367 3222 l
-1367 3222 m
-1492 3222 l
-1492 3225 l
-1367 3225 l
-1368 3225 m
-1492 3225 l
-1492 3228 l
-1368 3228 l
-1368 3228 m
-1493 3228 l
-1493 3230 l
-1368 3230 l
-1369 3230 m
-1493 3230 l
-1493 3233 l
-1369 3233 l
-1369 3233 m
-1494 3233 l
-1494 3236 l
-1369 3236 l
-1370 3236 m
-1494 3236 l
-1494 3238 l
-1370 3238 l
-1370 3238 m
-1495 3238 l
-1495 3241 l
-1370 3241 l
-1371 3241 m
-1495 3241 l
-1495 3244 l
-1371 3244 l
-1371 3244 m
-1496 3244 l
-1496 3246 l
-1371 3246 l
-1372 3246 m
-1496 3246 l
-1496 3249 l
-1372 3249 l
-1372 3249 m
-1497 3249 l
-1497 3252 l
-1372 3252 l
-1373 3252 m
-1497 3252 l
-1497 3254 l
-1373 3254 l
-1373 3254 m
-1498 3254 l
-1498 3257 l
-1373 3257 l
-1374 3257 m
-1498 3257 l
-1498 3260 l
-1374 3260 l
-1374 3260 m
-1499 3260 l
-1499 3262 l
-1374 3262 l
-1375 3262 m
-1499 3262 l
-1499 3265 l
-1375 3265 l
-1375 3265 m
-1500 3265 l
-1500 3267 l
-1375 3267 l
-1376 3267 m
-1500 3267 l
-1500 3271 l
-1376 3271 l
-1376 3271 m
-1501 3271 l
-1501 3273 l
-1376 3273 l
-1377 3273 m
-1501 3273 l
-1501 3276 l
-1377 3276 l
-1377 3276 m
-1502 3276 l
-1502 3278 l
-1377 3278 l
-1378 3278 m
-1502 3278 l
-1502 3281 l
-1378 3281 l
-1378 3281 m
-1503 3281 l
-1503 3283 l
-1378 3283 l
-1379 3283 m
-1503 3283 l
-1503 3287 l
-1379 3287 l
-1379 3287 m
-1504 3287 l
-1504 3289 l
-1379 3289 l
-1380 3289 m
-1504 3289 l
-1504 3292 l
-1380 3292 l
-1380 3292 m
-1505 3292 l
-1505 3294 l
-1380 3294 l
-1381 3294 m
-1505 3294 l
-1505 3297 l
-1381 3297 l
-1381 3297 m
-1506 3297 l
-1506 3299 l
-1381 3299 l
-1382 3299 m
-1506 3299 l
-1506 3303 l
-1382 3303 l
-1382 3303 m
-1507 3303 l
-1507 3305 l
-1382 3305 l
-1383 3305 m
-1507 3305 l
-1507 3308 l
-1383 3308 l
-1383 3308 m
-1508 3308 l
-1508 3310 l
-1383 3310 l
-1384 3310 m
-1508 3310 l
-1508 3313 l
-1384 3313 l
-1384 3313 m
-1509 3313 l
-1509 3315 l
-1384 3315 l
-1385 3315 m
-1509 3315 l
-1509 3319 l
-1385 3319 l
-1385 3319 m
-1510 3319 l
-1510 3321 l
-1385 3321 l
-1386 3321 m
-1510 3321 l
-1510 3324 l
-1386 3324 l
-1386 3324 m
-1511 3324 l
-1511 3326 l
-1386 3326 l
-1387 3326 m
-1511 3326 l
-1511 3329 l
-1387 3329 l
-1387 3329 m
-1512 3329 l
-1512 3331 l
-1387 3331 l
-1388 3331 m
-1512 3331 l
-1512 3335 l
-1388 3335 l
-1388 3335 m
-1513 3335 l
-1513 3337 l
-1388 3337 l
-1389 3337 m
-1513 3337 l
-1513 3340 l
-1389 3340 l
-1389 3340 m
-1514 3340 l
-1514 3342 l
-1389 3342 l
-1390 3342 m
-1514 3342 l
-1514 3345 l
-1390 3345 l
-1390 3345 m
-1515 3345 l
-1515 3347 l
-1390 3347 l
-1391 3347 m
-1515 3347 l
-1515 3351 l
-1391 3351 l
-1391 3351 m
-1516 3351 l
-1516 3353 l
-1391 3353 l
-1392 3353 m
-1516 3353 l
-1516 3356 l
-1392 3356 l
-1392 3356 m
-1517 3356 l
-1517 3358 l
-1392 3358 l
-1393 3358 m
-1517 3358 l
-1517 3362 l
-1393 3362 l
-1393 3362 m
-1518 3362 l
-1518 3363 l
-1393 3363 l
-1394 3363 m
-1512 3363 l
-1512 3364 l
-1394 3364 l
-1394 3364 m
-1507 3364 l
-1507 3365 l
-1394 3365 l
-1394 3365 m
-1501 3365 l
-1501 3366 l
-1394 3366 l
-1394 3366 m
-1496 3366 l
-1496 3367 l
-1394 3367 l
-1394 3367 m
-1490 3367 l
-1490 3368 l
-1394 3368 l
-1394 3368 m
-1485 3368 l
-1485 3369 l
-1394 3369 l
-1395 3369 m
-1480 3369 l
-1480 3370 l
-1395 3370 l
-1395 3370 m
-1474 3370 l
-1474 3371 l
-1395 3371 l
-1395 3371 m
-1469 3371 l
-1469 3372 l
-1395 3372 l
-1395 3372 m
-1463 3372 l
-1463 3373 l
-1395 3373 l
-1395 3373 m
-1458 3373 l
-1458 3374 l
-1395 3374 l
-1396 3374 m
-1453 3374 l
-1453 3375 l
-1396 3375 l
-1396 3375 m
-1447 3375 l
-1447 3376 l
-1396 3376 l
-1396 3376 m
-1442 3376 l
-1442 3377 l
-1396 3377 l
-1396 3377 m
-1436 3377 l
-1436 3378 l
-1396 3378 l
-1396 3378 m
-1431 3378 l
-1431 3379 l
-1396 3379 l
-1397 3379 m
-1426 3379 l
-1426 3380 l
-1397 3380 l
-1397 3380 m
-1420 3380 l
-1420 3381 l
-1397 3381 l
-1397 3381 m
-1415 3381 l
-1415 3382 l
-1397 3382 l
-1397 3382 m
-1409 3382 l
-1409 3383 l
-1397 3383 l
-1397 3383 m
-1404 3383 l
-1404 3384 l
-1397 3384 l
-Y
-1470.2 3111.5 m
-1351 3134 l
-1398 3384 l
-1517 3362 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1388 3148 m
-1385 3157 l
-1375 3172 l
-1462 3156 l
-S
-1389 3242 m
-1390 3229 l
-1398 3223 l
-1406 3221 l
-1415 3224 l
-1421 3231 l
-1428 3247 l
-1434 3259 l
-1444 3265 l
-1453 3268 l
-1465 3265 l
-1473 3260 l
-1476 3255 l
-1478 3242 l
-1475 3225 l
-1468 3214 l
-1463 3211 l
-1454 3208 l
-1442 3210 l
-1435 3216 l
-1428 3226 l
-1426 3239 l
-1425 3256 l
-1423 3265 l
-1415 3271 l
-1407 3272 l
-1398 3270 l
-1392 3258 l
-1389 3242 l
-S
-1405 3328 m
-1407 3315 l
-1417 3304 l
-1437 3296 l
-1449 3294 l
-1471 3294 l
-1485 3300 l
-1491 3312 l
-1493 3320 l
-1491 3333 l
-1480 3343 l
-1460 3351 l
-1448 3354 l
-1427 3354 l
-1413 3348 l
-1406 3336 l
-1405 3328 l
-S
-1 g
-1766 2327 m
-1769 2327 l
-1769 2328 l
-1766 2328 l
-1765 2328 m
-1770 2328 l
-1770 2329 l
-1765 2329 l
-1764 2329 m
-1771 2329 l
-1771 2330 l
-1764 2330 l
-1763 2330 m
-1772 2330 l
-1772 2331 l
-1763 2331 l
-1762 2331 m
-1773 2331 l
-1773 2332 l
-1762 2332 l
-1761 2332 m
-1774 2332 l
-1774 2333 l
-1761 2333 l
-1760 2333 m
-1775 2333 l
-1775 2334 l
-1760 2334 l
-1759 2334 m
-1776 2334 l
-1776 2335 l
-1759 2335 l
-1758 2335 m
-1777 2335 l
-1777 2336 l
-1758 2336 l
-1757 2336 m
-1778 2336 l
-1778 2337 l
-1757 2337 l
-1756 2337 m
-1779 2337 l
-1779 2338 l
-1756 2338 l
-1755 2338 m
-1780 2338 l
-1780 2339 l
-1755 2339 l
-1754 2339 m
-1781 2339 l
-1781 2340 l
-1754 2340 l
-1753 2340 m
-1782 2340 l
-1782 2341 l
-1753 2341 l
-1752 2341 m
-1783 2341 l
-1783 2342 l
-1752 2342 l
-1751 2342 m
-1784 2342 l
-1784 2343 l
-1751 2343 l
-1750 2343 m
-1785 2343 l
-1785 2344 l
-1750 2344 l
-1749 2344 m
-1786 2344 l
-1786 2345 l
-1749 2345 l
-1748 2345 m
-1787 2345 l
-1787 2346 l
-1748 2346 l
-1747 2346 m
-1788 2346 l
-1788 2347 l
-1747 2347 l
-1746 2347 m
-1789 2347 l
-1789 2348 l
-1746 2348 l
-1745 2348 m
-1790 2348 l
-1790 2349 l
-1745 2349 l
-1744 2349 m
-1791 2349 l
-1791 2350 l
-1744 2350 l
-1743 2350 m
-1792 2350 l
-1792 2351 l
-1743 2351 l
-1742 2351 m
-1793 2351 l
-1793 2352 l
-1742 2352 l
-1741 2352 m
-1794 2352 l
-1794 2353 l
-1741 2353 l
-1739 2353 m
-1795 2353 l
-1795 2354 l
-1739 2354 l
-1738 2354 m
-1796 2354 l
-1796 2355 l
-1738 2355 l
-1737 2355 m
-1796 2355 l
-1796 2356 l
-1737 2356 l
-1736 2356 m
-1797 2356 l
-1797 2357 l
-1736 2357 l
-1735 2357 m
-1798 2357 l
-1798 2358 l
-1735 2358 l
-1734 2358 m
-1799 2358 l
-1799 2359 l
-1734 2359 l
-1733 2359 m
-1800 2359 l
-1800 2360 l
-1733 2360 l
-1732 2360 m
-1801 2360 l
-1801 2361 l
-1732 2361 l
-1731 2361 m
-1802 2361 l
-1802 2362 l
-1731 2362 l
-1730 2362 m
-1803 2362 l
-1803 2363 l
-1730 2363 l
-1729 2363 m
-1804 2363 l
-1804 2364 l
-1729 2364 l
-1728 2364 m
-1805 2364 l
-1805 2365 l
-1728 2365 l
-1727 2365 m
-1806 2365 l
-1806 2366 l
-1727 2366 l
-1726 2366 m
-1807 2366 l
-1807 2367 l
-1726 2367 l
-1725 2367 m
-1808 2367 l
-1808 2368 l
-1725 2368 l
-1724 2368 m
-1809 2368 l
-1809 2369 l
-1724 2369 l
-1723 2369 m
-1810 2369 l
-1810 2370 l
-1723 2370 l
-1722 2370 m
-1811 2370 l
-1811 2371 l
-1722 2371 l
-1721 2371 m
-1812 2371 l
-1812 2372 l
-1721 2372 l
-1720 2372 m
-1813 2372 l
-1813 2373 l
-1720 2373 l
-1719 2373 m
-1814 2373 l
-1814 2374 l
-1719 2374 l
-1718 2374 m
-1815 2374 l
-1815 2375 l
-1718 2375 l
-1717 2375 m
-1816 2375 l
-1816 2376 l
-1717 2376 l
-1716 2376 m
-1817 2376 l
-1817 2377 l
-1716 2377 l
-1715 2377 m
-1818 2377 l
-1818 2378 l
-1715 2378 l
-1714 2378 m
-1819 2378 l
-1819 2379 l
-1714 2379 l
-1712 2379 m
-1820 2379 l
-1820 2380 l
-1712 2380 l
-1711 2380 m
-1821 2380 l
-1821 2381 l
-1711 2381 l
-1710 2381 m
-1822 2381 l
-1822 2382 l
-1710 2382 l
-1709 2382 m
-1823 2382 l
-1823 2383 l
-1709 2383 l
-1708 2383 m
-1823 2383 l
-1823 2384 l
-1708 2384 l
-1707 2384 m
-1824 2384 l
-1824 2385 l
-1707 2385 l
-1706 2385 m
-1825 2385 l
-1825 2386 l
-1706 2386 l
-1705 2386 m
-1826 2386 l
-1826 2387 l
-1705 2387 l
-1704 2387 m
-1827 2387 l
-1827 2388 l
-1704 2388 l
-1703 2388 m
-1828 2388 l
-1828 2389 l
-1703 2389 l
-1702 2389 m
-1829 2389 l
-1829 2390 l
-1702 2390 l
-1701 2390 m
-1830 2390 l
-1830 2391 l
-1701 2391 l
-1700 2391 m
-1831 2391 l
-1831 2392 l
-1700 2392 l
-1699 2392 m
-1832 2392 l
-1832 2393 l
-1699 2393 l
-1698 2393 m
-1833 2393 l
-1833 2394 l
-1698 2394 l
-1697 2394 m
-1834 2394 l
-1834 2395 l
-1697 2395 l
-1696 2395 m
-1835 2395 l
-1835 2396 l
-1696 2396 l
-1695 2396 m
-1836 2396 l
-1836 2397 l
-1695 2397 l
-1694 2397 m
-1837 2397 l
-1837 2398 l
-1694 2398 l
-1693 2398 m
-1838 2398 l
-1838 2399 l
-1693 2399 l
-1692 2399 m
-1839 2399 l
-1839 2400 l
-1692 2400 l
-1691 2400 m
-1840 2400 l
-1840 2401 l
-1691 2401 l
-1690 2401 m
-1841 2401 l
-1841 2402 l
-1690 2402 l
-1689 2402 m
-1842 2402 l
-1842 2403 l
-1689 2403 l
-1688 2403 m
-1843 2403 l
-1843 2404 l
-1688 2404 l
-1687 2404 m
-1844 2404 l
-1844 2405 l
-1687 2405 l
-1686 2405 m
-1845 2405 l
-1845 2406 l
-1686 2406 l
-1684 2406 m
-1846 2406 l
-1846 2407 l
-1684 2407 l
-1683 2407 m
-1847 2407 l
-1847 2408 l
-1683 2408 l
-1682 2408 m
-1848 2408 l
-1848 2409 l
-1682 2409 l
-1681 2409 m
-1849 2409 l
-1849 2410 l
-1681 2410 l
-1680 2410 m
-1850 2410 l
-1850 2411 l
-1680 2411 l
-1679 2411 m
-1850 2411 l
-1850 2412 l
-1679 2412 l
-1678 2412 m
-1851 2412 l
-1851 2413 l
-1678 2413 l
-1677 2413 m
-1852 2413 l
-1852 2414 l
-1677 2414 l
-1676 2414 m
-1853 2414 l
-1853 2415 l
-1676 2415 l
-1675 2415 m
-1852 2415 l
-1852 2416 l
-1675 2416 l
-1674 2416 m
-1851 2416 l
-1851 2417 l
-1674 2417 l
-1673 2417 m
-1850 2417 l
-1850 2418 l
-1673 2418 l
-1672 2418 m
-1849 2418 l
-1849 2419 l
-1672 2419 l
-1671 2419 m
-1848 2419 l
-1848 2420 l
-1671 2420 l
-1670 2420 m
-1847 2420 l
-1847 2421 l
-1670 2421 l
-1669 2421 m
-1846 2421 l
-1846 2422 l
-1669 2422 l
-1668 2422 m
-1845 2422 l
-1845 2423 l
-1668 2423 l
-1667 2423 m
-1844 2423 l
-1844 2424 l
-1667 2424 l
-1666 2424 m
-1843 2424 l
-1843 2425 l
-1666 2425 l
-1665 2425 m
-1842 2425 l
-1842 2426 l
-1665 2426 l
-1664 2426 m
-1841 2426 l
-1841 2427 l
-1664 2427 l
-1663 2427 m
-1840 2427 l
-1840 2428 l
-1663 2428 l
-1662 2428 m
-1839 2428 l
-1839 2429 l
-1662 2429 l
-1661 2429 m
-1838 2429 l
-1838 2430 l
-1661 2430 l
-1660 2430 m
-1837 2430 l
-1837 2431 l
-1660 2431 l
-1659 2431 m
-1836 2431 l
-1836 2432 l
-1659 2432 l
-1657 2432 m
-1835 2432 l
-1835 2433 l
-1657 2433 l
-1656 2433 m
-1834 2433 l
-1834 2434 l
-1656 2434 l
-1655 2434 m
-1833 2434 l
-1833 2435 l
-1655 2435 l
-1654 2435 m
-1832 2435 l
-1832 2436 l
-1654 2436 l
-1653 2436 m
-1831 2436 l
-1831 2437 l
-1653 2437 l
-1652 2437 m
-1830 2437 l
-1830 2438 l
-1652 2438 l
-1651 2438 m
-1829 2438 l
-1829 2439 l
-1651 2439 l
-1650 2439 m
-1827 2439 l
-1827 2440 l
-1650 2440 l
-1649 2440 m
-1826 2440 l
-1826 2441 l
-1649 2441 l
-1648 2441 m
-1825 2441 l
-1825 2442 l
-1648 2442 l
-1647 2442 m
-1824 2442 l
-1824 2443 l
-1647 2443 l
-1646 2443 m
-1823 2443 l
-1823 2444 l
-1646 2444 l
-1645 2444 m
-1822 2444 l
-1822 2445 l
-1645 2445 l
-1644 2445 m
-1821 2445 l
-1821 2446 l
-1644 2446 l
-1643 2446 m
-1820 2446 l
-1820 2447 l
-1643 2447 l
-1642 2447 m
-1819 2447 l
-1819 2448 l
-1642 2448 l
-1641 2448 m
-1818 2448 l
-1818 2449 l
-1641 2449 l
-1640 2449 m
-1817 2449 l
-1817 2450 l
-1640 2450 l
-1639 2450 m
-1816 2450 l
-1816 2451 l
-1639 2451 l
-1638 2451 m
-1815 2451 l
-1815 2452 l
-1638 2452 l
-1637 2452 m
-1814 2452 l
-1814 2453 l
-1637 2453 l
-1636 2453 m
-1813 2453 l
-1813 2454 l
-1636 2454 l
-1635 2454 m
-1812 2454 l
-1812 2455 l
-1635 2455 l
-1634 2455 m
-1811 2455 l
-1811 2456 l
-1634 2456 l
-1633 2456 m
-1810 2456 l
-1810 2457 l
-1633 2457 l
-1632 2457 m
-1809 2457 l
-1809 2458 l
-1632 2458 l
-1631 2458 m
-1808 2458 l
-1808 2459 l
-1631 2459 l
-1629 2459 m
-1807 2459 l
-1807 2460 l
-1629 2460 l
-1628 2460 m
-1806 2460 l
-1806 2461 l
-1628 2461 l
-1627 2461 m
-1805 2461 l
-1805 2462 l
-1627 2462 l
-1626 2462 m
-1804 2462 l
-1804 2463 l
-1626 2463 l
-1625 2463 m
-1803 2463 l
-1803 2464 l
-1625 2464 l
-1624 2464 m
-1802 2464 l
-1802 2465 l
-1624 2465 l
-1623 2465 m
-1801 2465 l
-1801 2466 l
-1623 2466 l
-1622 2466 m
-1799 2466 l
-1799 2467 l
-1622 2467 l
-1621 2467 m
-1798 2467 l
-1798 2468 l
-1621 2468 l
-1620 2468 m
-1797 2468 l
-1797 2469 l
-1620 2469 l
-1619 2469 m
-1796 2469 l
-1796 2470 l
-1619 2470 l
-1618 2470 m
-1795 2470 l
-1795 2471 l
-1618 2471 l
-1617 2471 m
-1794 2471 l
-1794 2472 l
-1617 2472 l
-1616 2472 m
-1793 2472 l
-1793 2473 l
-1616 2473 l
-1615 2473 m
-1792 2473 l
-1792 2474 l
-1615 2474 l
-1614 2474 m
-1791 2474 l
-1791 2475 l
-1614 2475 l
-1613 2475 m
-1790 2475 l
-1790 2476 l
-1613 2476 l
-1612 2476 m
-1789 2476 l
-1789 2477 l
-1612 2477 l
-1611 2477 m
-1788 2477 l
-1788 2478 l
-1611 2478 l
-1610 2478 m
-1787 2478 l
-1787 2479 l
-1610 2479 l
-1609 2479 m
-1786 2479 l
-1786 2480 l
-1609 2480 l
-1608 2480 m
-1785 2480 l
-1785 2481 l
-1608 2481 l
-1607 2481 m
-1784 2481 l
-1784 2482 l
-1607 2482 l
-1606 2482 m
-1783 2482 l
-1783 2483 l
-1606 2483 l
-1605 2483 m
-1782 2483 l
-1782 2484 l
-1605 2484 l
-1604 2484 m
-1781 2484 l
-1781 2485 l
-1604 2485 l
-1602 2485 m
-1780 2485 l
-1780 2486 l
-1602 2486 l
-1601 2486 m
-1779 2486 l
-1779 2487 l
-1601 2487 l
-1600 2487 m
-1778 2487 l
-1778 2488 l
-1600 2488 l
-1599 2488 m
-1777 2488 l
-1777 2489 l
-1599 2489 l
-1598 2489 m
-1776 2489 l
-1776 2490 l
-1598 2490 l
-1597 2490 m
-1775 2490 l
-1775 2491 l
-1597 2491 l
-1596 2491 m
-1774 2491 l
-1774 2492 l
-1596 2492 l
-1595 2492 m
-1773 2492 l
-1773 2493 l
-1595 2493 l
-1594 2493 m
-1771 2493 l
-1771 2494 l
-1594 2494 l
-1593 2494 m
-1770 2494 l
-1770 2495 l
-1593 2495 l
-1592 2495 m
-1769 2495 l
-1769 2496 l
-1592 2496 l
-1591 2496 m
-1768 2496 l
-1768 2497 l
-1591 2497 l
-1590 2497 m
-1767 2497 l
-1767 2498 l
-1590 2498 l
-1589 2498 m
-1766 2498 l
-1766 2499 l
-1589 2499 l
-1588 2499 m
-1765 2499 l
-1765 2500 l
-1588 2500 l
-1587 2500 m
-1764 2500 l
-1764 2501 l
-1587 2501 l
-1586 2501 m
-1763 2501 l
-1763 2502 l
-1586 2502 l
-1585 2502 m
-1762 2502 l
-1762 2503 l
-1585 2503 l
-1584 2503 m
-1761 2503 l
-1761 2504 l
-1584 2504 l
-1583 2504 m
-1760 2504 l
-1760 2505 l
-1583 2505 l
-1582 2505 m
-1759 2505 l
-1759 2506 l
-1582 2506 l
-1581 2506 m
-1758 2506 l
-1758 2507 l
-1581 2507 l
-1580 2507 m
-1757 2507 l
-1757 2508 l
-1580 2508 l
-1579 2508 m
-1756 2508 l
-1756 2509 l
-1579 2509 l
-1578 2509 m
-1755 2509 l
-1755 2510 l
-1578 2510 l
-1577 2510 m
-1754 2510 l
-1754 2511 l
-1577 2511 l
-1576 2511 m
-1753 2511 l
-1753 2512 l
-1576 2512 l
-1576 2512 m
-1752 2512 l
-1752 2513 l
-1576 2513 l
-1576 2513 m
-1751 2513 l
-1751 2514 l
-1576 2514 l
-1577 2514 m
-1750 2514 l
-1750 2515 l
-1577 2515 l
-1578 2515 m
-1749 2515 l
-1749 2516 l
-1578 2516 l
-1579 2516 m
-1748 2516 l
-1748 2517 l
-1579 2517 l
-1580 2517 m
-1747 2517 l
-1747 2518 l
-1580 2518 l
-1581 2518 m
-1746 2518 l
-1746 2519 l
-1581 2519 l
-1582 2519 m
-1745 2519 l
-1745 2520 l
-1582 2520 l
-1583 2520 m
-1743 2520 l
-1743 2521 l
-1583 2521 l
-1584 2521 m
-1742 2521 l
-1742 2522 l
-1584 2522 l
-1585 2522 m
-1741 2522 l
-1741 2523 l
-1585 2523 l
-1586 2523 m
-1740 2523 l
-1740 2524 l
-1586 2524 l
-1587 2524 m
-1739 2524 l
-1739 2525 l
-1587 2525 l
-1588 2525 m
-1738 2525 l
-1738 2526 l
-1588 2526 l
-1589 2526 m
-1737 2526 l
-1737 2527 l
-1589 2527 l
-1590 2527 m
-1736 2527 l
-1736 2528 l
-1590 2528 l
-1591 2528 m
-1735 2528 l
-1735 2529 l
-1591 2529 l
-1592 2529 m
-1734 2529 l
-1734 2530 l
-1592 2530 l
-1593 2530 m
-1733 2530 l
-1733 2531 l
-1593 2531 l
-1594 2531 m
-1732 2531 l
-1732 2532 l
-1594 2532 l
-1595 2532 m
-1731 2532 l
-1731 2533 l
-1595 2533 l
-1596 2533 m
-1730 2533 l
-1730 2534 l
-1596 2534 l
-1597 2534 m
-1729 2534 l
-1729 2535 l
-1597 2535 l
-1597 2535 m
-1728 2535 l
-1728 2536 l
-1597 2536 l
-1598 2536 m
-1727 2536 l
-1727 2537 l
-1598 2537 l
-1599 2537 m
-1726 2537 l
-1726 2538 l
-1599 2538 l
-1600 2538 m
-1725 2538 l
-1725 2539 l
-1600 2539 l
-1601 2539 m
-1724 2539 l
-1724 2540 l
-1601 2540 l
-1602 2540 m
-1723 2540 l
-1723 2541 l
-1602 2541 l
-1603 2541 m
-1722 2541 l
-1722 2542 l
-1603 2542 l
-1604 2542 m
-1721 2542 l
-1721 2543 l
-1604 2543 l
-1605 2543 m
-1720 2543 l
-1720 2544 l
-1605 2544 l
-1606 2544 m
-1719 2544 l
-1719 2545 l
-1606 2545 l
-1607 2545 m
-1718 2545 l
-1718 2546 l
-1607 2546 l
-1608 2546 m
-1717 2546 l
-1717 2547 l
-1608 2547 l
-1609 2547 m
-1715 2547 l
-1715 2548 l
-1609 2548 l
-1610 2548 m
-1714 2548 l
-1714 2549 l
-1610 2549 l
-1611 2549 m
-1713 2549 l
-1713 2550 l
-1611 2550 l
-1612 2550 m
-1712 2550 l
-1712 2551 l
-1612 2551 l
-1613 2551 m
-1711 2551 l
-1711 2552 l
-1613 2552 l
-1614 2552 m
-1710 2552 l
-1710 2553 l
-1614 2553 l
-1615 2553 m
-1709 2553 l
-1709 2554 l
-1615 2554 l
-1616 2554 m
-1708 2554 l
-1708 2555 l
-1616 2555 l
-1617 2555 m
-1707 2555 l
-1707 2556 l
-1617 2556 l
-1618 2556 m
-1706 2556 l
-1706 2557 l
-1618 2557 l
-1618 2557 m
-1705 2557 l
-1705 2558 l
-1618 2558 l
-1619 2558 m
-1704 2558 l
-1704 2559 l
-1619 2559 l
-1620 2559 m
-1703 2559 l
-1703 2560 l
-1620 2560 l
-1621 2560 m
-1702 2560 l
-1702 2561 l
-1621 2561 l
-1622 2561 m
-1701 2561 l
-1701 2562 l
-1622 2562 l
-1623 2562 m
-1700 2562 l
-1700 2563 l
-1623 2563 l
-1624 2563 m
-1699 2563 l
-1699 2564 l
-1624 2564 l
-1625 2564 m
-1698 2564 l
-1698 2565 l
-1625 2565 l
-1626 2565 m
-1697 2565 l
-1697 2566 l
-1626 2566 l
-1627 2566 m
-1696 2566 l
-1696 2567 l
-1627 2567 l
-1628 2567 m
-1695 2567 l
-1695 2568 l
-1628 2568 l
-1629 2568 m
-1694 2568 l
-1694 2569 l
-1629 2569 l
-1630 2569 m
-1693 2569 l
-1693 2570 l
-1630 2570 l
-1631 2570 m
-1692 2570 l
-1692 2571 l
-1631 2571 l
-1632 2571 m
-1691 2571 l
-1691 2572 l
-1632 2572 l
-1633 2572 m
-1690 2572 l
-1690 2573 l
-1633 2573 l
-1634 2573 m
-1689 2573 l
-1689 2574 l
-1634 2574 l
-1635 2574 m
-1687 2574 l
-1687 2575 l
-1635 2575 l
-1636 2575 m
-1686 2575 l
-1686 2576 l
-1636 2576 l
-1637 2576 m
-1685 2576 l
-1685 2577 l
-1637 2577 l
-1638 2577 m
-1684 2577 l
-1684 2578 l
-1638 2578 l
-1639 2578 m
-1683 2578 l
-1683 2579 l
-1639 2579 l
-1639 2579 m
-1682 2579 l
-1682 2580 l
-1639 2580 l
-1640 2580 m
-1681 2580 l
-1681 2581 l
-1640 2581 l
-1641 2581 m
-1680 2581 l
-1680 2582 l
-1641 2582 l
-1642 2582 m
-1679 2582 l
-1679 2583 l
-1642 2583 l
-1643 2583 m
-1678 2583 l
-1678 2584 l
-1643 2584 l
-1644 2584 m
-1677 2584 l
-1677 2585 l
-1644 2585 l
-1645 2585 m
-1676 2585 l
-1676 2586 l
-1645 2586 l
-1646 2586 m
-1675 2586 l
-1675 2587 l
-1646 2587 l
-1647 2587 m
-1674 2587 l
-1674 2588 l
-1647 2588 l
-1648 2588 m
-1673 2588 l
-1673 2589 l
-1648 2589 l
-1649 2589 m
-1672 2589 l
-1672 2590 l
-1649 2590 l
-1650 2590 m
-1671 2590 l
-1671 2591 l
-1650 2591 l
-1651 2591 m
-1670 2591 l
-1670 2592 l
-1651 2592 l
-1652 2592 m
-1669 2592 l
-1669 2593 l
-1652 2593 l
-1653 2593 m
-1668 2593 l
-1668 2594 l
-1653 2594 l
-1654 2594 m
-1667 2594 l
-1667 2595 l
-1654 2595 l
-1655 2595 m
-1666 2595 l
-1666 2596 l
-1655 2596 l
-1656 2596 m
-1665 2596 l
-1665 2597 l
-1656 2597 l
-1657 2597 m
-1664 2597 l
-1664 2598 l
-1657 2598 l
-1658 2598 m
-1663 2598 l
-1663 2599 l
-1658 2599 l
-1659 2599 m
-1662 2599 l
-1662 2600 l
-1659 2600 l
-Y
-1852.4 2414.5 m
-1768 2327 l
-1576 2512 l
-1660 2600 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1776 2372 m
-1774 2369 l
-1765 2365 l
-1759 2365 l
-1750 2368 l
-1738 2380 l
-1735 2388 l
-1735 2394 l
-1737 2403 l
-1743 2409 l
-1752 2412 l
-1767 2416 l
-1826 2417 l
-1784 2457 l
-S
-1716 2429 m
-1713 2426 l
-1704 2423 l
-1699 2423 l
-1690 2426 l
-1678 2438 l
-1674 2446 l
-1674 2452 l
-1677 2461 l
-1683 2467 l
-1692 2470 l
-1706 2474 l
-1765 2475 l
-1723 2515 l
-S
-1608 2504 m
-1638 2475 l
-1667 2499 l
-1662 2499 l
-1650 2505 l
-1641 2514 l
-1634 2525 l
-1634 2537 l
-1640 2549 l
-1646 2555 l
-1657 2561 l
-1669 2561 l
-1681 2556 l
-1690 2547 l
-1696 2535 l
-1696 2529 l
-1694 2521 l
-S
-1 g
-3771 2313 m
-3774 2313 l
-3774 2314 l
-3771 2314 l
-3770 2314 m
-3776 2314 l
-3776 2315 l
-3770 2315 l
-3769 2315 m
-3777 2315 l
-3777 2316 l
-3769 2316 l
-3769 2316 m
-3778 2316 l
-3778 2317 l
-3769 2317 l
-3768 2317 m
-3779 2317 l
-3779 2318 l
-3768 2318 l
-3767 2318 m
-3781 2318 l
-3781 2319 l
-3767 2319 l
-3766 2319 m
-3782 2319 l
-3782 2320 l
-3766 2320 l
-3766 2320 m
-3783 2320 l
-3783 2321 l
-3766 2321 l
-3765 2321 m
-3785 2321 l
-3785 2322 l
-3765 2322 l
-3764 2322 m
-3786 2322 l
-3786 2323 l
-3764 2323 l
-3763 2323 m
-3787 2323 l
-3787 2324 l
-3763 2324 l
-3763 2324 m
-3789 2324 l
-3789 2325 l
-3763 2325 l
-3762 2325 m
-3790 2325 l
-3790 2326 l
-3762 2326 l
-3761 2326 m
-3791 2326 l
-3791 2327 l
-3761 2327 l
-3760 2327 m
-3792 2327 l
-3792 2328 l
-3760 2328 l
-3760 2328 m
-3794 2328 l
-3794 2329 l
-3760 2329 l
-3759 2329 m
-3795 2329 l
-3795 2330 l
-3759 2330 l
-3758 2330 m
-3796 2330 l
-3796 2331 l
-3758 2331 l
-3757 2331 m
-3798 2331 l
-3798 2332 l
-3757 2332 l
-3756 2332 m
-3799 2332 l
-3799 2333 l
-3756 2333 l
-3756 2333 m
-3800 2333 l
-3800 2334 l
-3756 2334 l
-3755 2334 m
-3801 2334 l
-3801 2335 l
-3755 2335 l
-3754 2335 m
-3803 2335 l
-3803 2336 l
-3754 2336 l
-3753 2336 m
-3804 2336 l
-3804 2337 l
-3753 2337 l
-3753 2337 m
-3805 2337 l
-3805 2338 l
-3753 2338 l
-3752 2338 m
-3807 2338 l
-3807 2339 l
-3752 2339 l
-3751 2339 m
-3808 2339 l
-3808 2340 l
-3751 2340 l
-3750 2340 m
-3809 2340 l
-3809 2341 l
-3750 2341 l
-3750 2341 m
-3811 2341 l
-3811 2342 l
-3750 2342 l
-3749 2342 m
-3812 2342 l
-3812 2343 l
-3749 2343 l
-3748 2343 m
-3813 2343 l
-3813 2344 l
-3748 2344 l
-3747 2344 m
-3814 2344 l
-3814 2345 l
-3747 2345 l
-3747 2345 m
-3816 2345 l
-3816 2346 l
-3747 2346 l
-3746 2346 m
-3817 2346 l
-3817 2347 l
-3746 2347 l
-3745 2347 m
-3818 2347 l
-3818 2348 l
-3745 2348 l
-3744 2348 m
-3820 2348 l
-3820 2349 l
-3744 2349 l
-3744 2349 m
-3821 2349 l
-3821 2350 l
-3744 2350 l
-3743 2350 m
-3822 2350 l
-3822 2351 l
-3743 2351 l
-3742 2351 m
-3824 2351 l
-3824 2352 l
-3742 2352 l
-3741 2352 m
-3825 2352 l
-3825 2353 l
-3741 2353 l
-3740 2353 m
-3826 2353 l
-3826 2354 l
-3740 2354 l
-3740 2354 m
-3827 2354 l
-3827 2355 l
-3740 2355 l
-3739 2355 m
-3829 2355 l
-3829 2356 l
-3739 2356 l
-3738 2356 m
-3830 2356 l
-3830 2357 l
-3738 2357 l
-3737 2357 m
-3831 2357 l
-3831 2358 l
-3737 2358 l
-3737 2358 m
-3833 2358 l
-3833 2359 l
-3737 2359 l
-3736 2359 m
-3834 2359 l
-3834 2360 l
-3736 2360 l
-3735 2360 m
-3835 2360 l
-3835 2361 l
-3735 2361 l
-3734 2361 m
-3837 2361 l
-3837 2362 l
-3734 2362 l
-3734 2362 m
-3838 2362 l
-3838 2363 l
-3734 2363 l
-3733 2363 m
-3839 2363 l
-3839 2364 l
-3733 2364 l
-3732 2364 m
-3840 2364 l
-3840 2365 l
-3732 2365 l
-3731 2365 m
-3842 2365 l
-3842 2366 l
-3731 2366 l
-3731 2366 m
-3843 2366 l
-3843 2367 l
-3731 2367 l
-3730 2367 m
-3844 2367 l
-3844 2368 l
-3730 2368 l
-3729 2368 m
-3846 2368 l
-3846 2369 l
-3729 2369 l
-3728 2369 m
-3847 2369 l
-3847 2370 l
-3728 2370 l
-3727 2370 m
-3848 2370 l
-3848 2371 l
-3727 2371 l
-3727 2371 m
-3850 2371 l
-3850 2372 l
-3727 2372 l
-3726 2372 m
-3851 2372 l
-3851 2373 l
-3726 2373 l
-3725 2373 m
-3852 2373 l
-3852 2374 l
-3725 2374 l
-3724 2374 m
-3853 2374 l
-3853 2375 l
-3724 2375 l
-3724 2375 m
-3855 2375 l
-3855 2376 l
-3724 2376 l
-3723 2376 m
-3856 2376 l
-3856 2377 l
-3723 2377 l
-3722 2377 m
-3857 2377 l
-3857 2378 l
-3722 2378 l
-3721 2378 m
-3859 2378 l
-3859 2379 l
-3721 2379 l
-3721 2379 m
-3860 2379 l
-3860 2380 l
-3721 2380 l
-3720 2380 m
-3861 2380 l
-3861 2381 l
-3720 2381 l
-3719 2381 m
-3862 2381 l
-3862 2382 l
-3719 2382 l
-3718 2382 m
-3864 2382 l
-3864 2383 l
-3718 2383 l
-3718 2383 m
-3865 2383 l
-3865 2384 l
-3718 2384 l
-3717 2384 m
-3866 2384 l
-3866 2385 l
-3717 2385 l
-3716 2385 m
-3868 2385 l
-3868 2386 l
-3716 2386 l
-3715 2386 m
-3869 2386 l
-3869 2387 l
-3715 2387 l
-3715 2387 m
-3870 2387 l
-3870 2388 l
-3715 2388 l
-3714 2388 m
-3872 2388 l
-3872 2389 l
-3714 2389 l
-3713 2389 m
-3873 2389 l
-3873 2390 l
-3713 2390 l
-3712 2390 m
-3874 2390 l
-3874 2391 l
-3712 2391 l
-3711 2391 m
-3875 2391 l
-3875 2392 l
-3711 2392 l
-3711 2392 m
-3877 2392 l
-3877 2393 l
-3711 2393 l
-3710 2393 m
-3878 2393 l
-3878 2394 l
-3710 2394 l
-3709 2394 m
-3879 2394 l
-3879 2395 l
-3709 2395 l
-3708 2395 m
-3881 2395 l
-3881 2396 l
-3708 2396 l
-3708 2396 m
-3882 2396 l
-3882 2397 l
-3708 2397 l
-3707 2397 m
-3883 2397 l
-3883 2398 l
-3707 2398 l
-3706 2398 m
-3885 2398 l
-3885 2399 l
-3706 2399 l
-3705 2399 m
-3886 2399 l
-3886 2400 l
-3705 2400 l
-3705 2400 m
-3887 2400 l
-3887 2401 l
-3705 2401 l
-3704 2401 m
-3888 2401 l
-3888 2402 l
-3704 2402 l
-3703 2402 m
-3890 2402 l
-3890 2403 l
-3703 2403 l
-3702 2403 m
-3891 2403 l
-3891 2404 l
-3702 2404 l
-3702 2404 m
-3892 2404 l
-3892 2405 l
-3702 2405 l
-3701 2405 m
-3894 2405 l
-3894 2406 l
-3701 2406 l
-3700 2406 m
-3895 2406 l
-3895 2407 l
-3700 2407 l
-3699 2407 m
-3896 2407 l
-3896 2408 l
-3699 2408 l
-3699 2408 m
-3898 2408 l
-3898 2409 l
-3699 2409 l
-3699 2409 m
-3899 2409 l
-3899 2410 l
-3699 2410 l
-3700 2410 m
-3900 2410 l
-3900 2411 l
-3700 2411 l
-3701 2411 m
-3901 2411 l
-3901 2412 l
-3701 2412 l
-3702 2412 m
-3903 2412 l
-3903 2413 l
-3702 2413 l
-3704 2413 m
-3904 2413 l
-3904 2414 l
-3704 2414 l
-3705 2414 m
-3905 2414 l
-3905 2415 l
-3705 2415 l
-3706 2415 m
-3907 2415 l
-3907 2416 l
-3706 2416 l
-3708 2416 m
-3908 2416 l
-3908 2417 l
-3708 2417 l
-3709 2417 m
-3909 2417 l
-3909 2418 l
-3709 2418 l
-3710 2418 m
-3911 2418 l
-3911 2419 l
-3710 2419 l
-3712 2419 m
-3912 2419 l
-3912 2420 l
-3712 2420 l
-3713 2420 m
-3913 2420 l
-3913 2421 l
-3713 2421 l
-3714 2421 m
-3914 2421 l
-3914 2422 l
-3714 2422 l
-3715 2422 m
-3916 2422 l
-3916 2423 l
-3715 2423 l
-3717 2423 m
-3917 2423 l
-3917 2424 l
-3717 2424 l
-3718 2424 m
-3918 2424 l
-3918 2425 l
-3718 2425 l
-3719 2425 m
-3920 2425 l
-3920 2426 l
-3719 2426 l
-3721 2426 m
-3921 2426 l
-3921 2427 l
-3721 2427 l
-3722 2427 m
-3922 2427 l
-3922 2428 l
-3722 2428 l
-3723 2428 m
-3923 2428 l
-3923 2429 l
-3723 2429 l
-3725 2429 m
-3925 2429 l
-3925 2430 l
-3725 2430 l
-3726 2430 m
-3926 2430 l
-3926 2431 l
-3726 2431 l
-3727 2431 m
-3927 2431 l
-3927 2432 l
-3727 2432 l
-3728 2432 m
-3929 2432 l
-3929 2433 l
-3728 2433 l
-3730 2433 m
-3930 2433 l
-3930 2434 l
-3730 2434 l
-3731 2434 m
-3931 2434 l
-3931 2435 l
-3731 2435 l
-3732 2435 m
-3933 2435 l
-3933 2436 l
-3732 2436 l
-3734 2436 m
-3934 2436 l
-3934 2437 l
-3734 2437 l
-3735 2437 m
-3935 2437 l
-3935 2438 l
-3735 2438 l
-3736 2438 m
-3936 2438 l
-3936 2439 l
-3736 2439 l
-3738 2439 m
-3938 2439 l
-3938 2440 l
-3738 2440 l
-3739 2440 m
-3939 2440 l
-3939 2441 l
-3739 2441 l
-3740 2441 m
-3940 2441 l
-3940 2442 l
-3740 2442 l
-3741 2442 m
-3942 2442 l
-3942 2443 l
-3741 2443 l
-3743 2443 m
-3943 2443 l
-3943 2444 l
-3743 2444 l
-3744 2444 m
-3944 2444 l
-3944 2445 l
-3744 2445 l
-3745 2445 m
-3946 2445 l
-3946 2446 l
-3745 2446 l
-3747 2446 m
-3947 2446 l
-3947 2447 l
-3747 2447 l
-3748 2447 m
-3948 2447 l
-3948 2448 l
-3748 2448 l
-3749 2448 m
-3949 2448 l
-3949 2449 l
-3749 2449 l
-3751 2449 m
-3951 2449 l
-3951 2450 l
-3751 2450 l
-3752 2450 m
-3952 2450 l
-3952 2451 l
-3752 2451 l
-3753 2451 m
-3953 2451 l
-3953 2452 l
-3753 2452 l
-3754 2452 m
-3955 2452 l
-3955 2453 l
-3754 2453 l
-3756 2453 m
-3956 2453 l
-3956 2454 l
-3756 2454 l
-3757 2454 m
-3957 2454 l
-3957 2455 l
-3757 2455 l
-3758 2455 m
-3959 2455 l
-3959 2456 l
-3758 2456 l
-3760 2456 m
-3960 2456 l
-3960 2457 l
-3760 2457 l
-3761 2457 m
-3961 2457 l
-3961 2458 l
-3761 2458 l
-3762 2458 m
-3962 2458 l
-3962 2459 l
-3762 2459 l
-3764 2459 m
-3964 2459 l
-3964 2460 l
-3764 2460 l
-3765 2460 m
-3965 2460 l
-3965 2461 l
-3765 2461 l
-3766 2461 m
-3966 2461 l
-3966 2462 l
-3766 2462 l
-3767 2462 m
-3968 2462 l
-3968 2463 l
-3767 2463 l
-3769 2463 m
-3969 2463 l
-3969 2464 l
-3769 2464 l
-3770 2464 m
-3970 2464 l
-3970 2465 l
-3770 2465 l
-3771 2465 m
-3972 2465 l
-3972 2466 l
-3771 2466 l
-3773 2466 m
-3973 2466 l
-3973 2467 l
-3773 2467 l
-3774 2467 m
-3974 2467 l
-3974 2468 l
-3774 2468 l
-3775 2468 m
-3975 2468 l
-3975 2469 l
-3775 2469 l
-3777 2469 m
-3977 2469 l
-3977 2470 l
-3777 2470 l
-3778 2470 m
-3978 2470 l
-3978 2471 l
-3778 2471 l
-3779 2471 m
-3979 2471 l
-3979 2472 l
-3779 2472 l
-3780 2472 m
-3981 2472 l
-3981 2473 l
-3780 2473 l
-3782 2473 m
-3982 2473 l
-3982 2474 l
-3782 2474 l
-3783 2474 m
-3983 2474 l
-3983 2475 l
-3783 2475 l
-3784 2475 m
-3984 2475 l
-3984 2476 l
-3784 2476 l
-3786 2476 m
-3984 2476 l
-3984 2477 l
-3786 2477 l
-3787 2477 m
-3984 2477 l
-3984 2478 l
-3787 2478 l
-3788 2478 m
-3983 2478 l
-3983 2479 l
-3788 2479 l
-3790 2479 m
-3982 2479 l
-3982 2480 l
-3790 2480 l
-3791 2480 m
-3981 2480 l
-3981 2481 l
-3791 2481 l
-3792 2481 m
-3981 2481 l
-3981 2482 l
-3792 2482 l
-3793 2482 m
-3980 2482 l
-3980 2483 l
-3793 2483 l
-3795 2483 m
-3979 2483 l
-3979 2484 l
-3795 2484 l
-3796 2484 m
-3978 2484 l
-3978 2485 l
-3796 2485 l
-3797 2485 m
-3978 2485 l
-3978 2486 l
-3797 2486 l
-3799 2486 m
-3977 2486 l
-3977 2487 l
-3799 2487 l
-3800 2487 m
-3976 2487 l
-3976 2488 l
-3800 2488 l
-3801 2488 m
-3975 2488 l
-3975 2489 l
-3801 2489 l
-3803 2489 m
-3975 2489 l
-3975 2490 l
-3803 2490 l
-3804 2490 m
-3974 2490 l
-3974 2491 l
-3804 2491 l
-3805 2491 m
-3973 2491 l
-3973 2492 l
-3805 2492 l
-3806 2492 m
-3972 2492 l
-3972 2493 l
-3806 2493 l
-3808 2493 m
-3972 2493 l
-3972 2494 l
-3808 2494 l
-3809 2494 m
-3971 2494 l
-3971 2495 l
-3809 2495 l
-3810 2495 m
-3970 2495 l
-3970 2496 l
-3810 2496 l
-3812 2496 m
-3969 2496 l
-3969 2497 l
-3812 2497 l
-3813 2497 m
-3969 2497 l
-3969 2498 l
-3813 2498 l
-3814 2498 m
-3968 2498 l
-3968 2499 l
-3814 2499 l
-3816 2499 m
-3967 2499 l
-3967 2500 l
-3816 2500 l
-3817 2500 m
-3966 2500 l
-3966 2501 l
-3817 2501 l
-3818 2501 m
-3965 2501 l
-3965 2502 l
-3818 2502 l
-3819 2502 m
-3965 2502 l
-3965 2503 l
-3819 2503 l
-3821 2503 m
-3964 2503 l
-3964 2504 l
-3821 2504 l
-3822 2504 m
-3963 2504 l
-3963 2505 l
-3822 2505 l
-3823 2505 m
-3962 2505 l
-3962 2506 l
-3823 2506 l
-3825 2506 m
-3962 2506 l
-3962 2507 l
-3825 2507 l
-3826 2507 m
-3961 2507 l
-3961 2508 l
-3826 2508 l
-3827 2508 m
-3960 2508 l
-3960 2509 l
-3827 2509 l
-3829 2509 m
-3959 2509 l
-3959 2510 l
-3829 2510 l
-3830 2510 m
-3959 2510 l
-3959 2511 l
-3830 2511 l
-3831 2511 m
-3958 2511 l
-3958 2512 l
-3831 2512 l
-3832 2512 m
-3957 2512 l
-3957 2513 l
-3832 2513 l
-3834 2513 m
-3956 2513 l
-3956 2514 l
-3834 2514 l
-3835 2514 m
-3956 2514 l
-3956 2515 l
-3835 2515 l
-3836 2515 m
-3955 2515 l
-3955 2516 l
-3836 2516 l
-3838 2516 m
-3954 2516 l
-3954 2517 l
-3838 2517 l
-3839 2517 m
-3953 2517 l
-3953 2518 l
-3839 2518 l
-3840 2518 m
-3953 2518 l
-3953 2519 l
-3840 2519 l
-3842 2519 m
-3952 2519 l
-3952 2520 l
-3842 2520 l
-3843 2520 m
-3951 2520 l
-3951 2521 l
-3843 2521 l
-3844 2521 m
-3950 2521 l
-3950 2522 l
-3844 2522 l
-3845 2522 m
-3950 2522 l
-3950 2523 l
-3845 2523 l
-3847 2523 m
-3949 2523 l
-3949 2524 l
-3847 2524 l
-3848 2524 m
-3948 2524 l
-3948 2525 l
-3848 2525 l
-3849 2525 m
-3947 2525 l
-3947 2526 l
-3849 2526 l
-3851 2526 m
-3946 2526 l
-3946 2527 l
-3851 2527 l
-3852 2527 m
-3946 2527 l
-3946 2528 l
-3852 2528 l
-3853 2528 m
-3945 2528 l
-3945 2529 l
-3853 2529 l
-3855 2529 m
-3944 2529 l
-3944 2530 l
-3855 2530 l
-3856 2530 m
-3943 2530 l
-3943 2531 l
-3856 2531 l
-3857 2531 m
-3943 2531 l
-3943 2532 l
-3857 2532 l
-3858 2532 m
-3942 2532 l
-3942 2533 l
-3858 2533 l
-3860 2533 m
-3941 2533 l
-3941 2534 l
-3860 2534 l
-3861 2534 m
-3940 2534 l
-3940 2535 l
-3861 2535 l
-3862 2535 m
-3940 2535 l
-3940 2536 l
-3862 2536 l
-3864 2536 m
-3939 2536 l
-3939 2537 l
-3864 2537 l
-3865 2537 m
-3938 2537 l
-3938 2538 l
-3865 2538 l
-3866 2538 m
-3937 2538 l
-3937 2539 l
-3866 2539 l
-3868 2539 m
-3937 2539 l
-3937 2540 l
-3868 2540 l
-3869 2540 m
-3936 2540 l
-3936 2541 l
-3869 2541 l
-3870 2541 m
-3935 2541 l
-3935 2542 l
-3870 2542 l
-3871 2542 m
-3934 2542 l
-3934 2543 l
-3871 2543 l
-3873 2543 m
-3934 2543 l
-3934 2544 l
-3873 2544 l
-3874 2544 m
-3933 2544 l
-3933 2545 l
-3874 2545 l
-3875 2545 m
-3932 2545 l
-3932 2546 l
-3875 2546 l
-3877 2546 m
-3931 2546 l
-3931 2547 l
-3877 2547 l
-3878 2547 m
-3931 2547 l
-3931 2548 l
-3878 2548 l
-3879 2548 m
-3930 2548 l
-3930 2549 l
-3879 2549 l
-3881 2549 m
-3929 2549 l
-3929 2550 l
-3881 2550 l
-3882 2550 m
-3928 2550 l
-3928 2551 l
-3882 2551 l
-3883 2551 m
-3927 2551 l
-3927 2552 l
-3883 2552 l
-3884 2552 m
-3927 2552 l
-3927 2553 l
-3884 2553 l
-3886 2553 m
-3926 2553 l
-3926 2554 l
-3886 2554 l
-3887 2554 m
-3925 2554 l
-3925 2555 l
-3887 2555 l
-3888 2555 m
-3924 2555 l
-3924 2556 l
-3888 2556 l
-3890 2556 m
-3924 2556 l
-3924 2557 l
-3890 2557 l
-3891 2557 m
-3923 2557 l
-3923 2558 l
-3891 2558 l
-3892 2558 m
-3922 2558 l
-3922 2559 l
-3892 2559 l
-3894 2559 m
-3921 2559 l
-3921 2560 l
-3894 2560 l
-3895 2560 m
-3921 2560 l
-3921 2561 l
-3895 2561 l
-3896 2561 m
-3920 2561 l
-3920 2562 l
-3896 2562 l
-3897 2562 m
-3919 2562 l
-3919 2563 l
-3897 2563 l
-3899 2563 m
-3918 2563 l
-3918 2564 l
-3899 2564 l
-3900 2564 m
-3918 2564 l
-3918 2565 l
-3900 2565 l
-3901 2565 m
-3917 2565 l
-3917 2566 l
-3901 2566 l
-3903 2566 m
-3916 2566 l
-3916 2567 l
-3903 2567 l
-3904 2567 m
-3915 2567 l
-3915 2568 l
-3904 2568 l
-3905 2568 m
-3915 2568 l
-3915 2569 l
-3905 2569 l
-3907 2569 m
-3914 2569 l
-3914 2570 l
-3907 2570 l
-3908 2570 m
-3913 2570 l
-3913 2571 l
-3908 2571 l
-3909 2571 m
-3912 2571 l
-3912 2572 l
-3909 2572 l
-Y
-3772.3 2312.9 m
-3699 2409 l
-3911 2572 l
-3984 2476 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3741 2394 m
-3739 2398 l
-3737 2407 l
-3738 2413 l
-3742 2421 l
-3755 2431 l
-3764 2433 l
-3770 2432 l
-3779 2428 l
-3784 2422 l
-3785 2412 l
-3786 2397 l
-3779 2339 l
-3825 2374 l
-S
-3838 2495 m
-3858 2400 l
-S
-3792 2459 m
-3838 2495 l
-S
-3878 2525 m
-3870 2514 l
-3871 2499 l
-3881 2480 l
-3888 2470 l
-3905 2456 l
-3919 2451 l
-3931 2456 l
-3938 2461 l
-3945 2472 l
-3944 2487 l
-3935 2506 l
-3927 2516 l
-3911 2530 l
-3897 2535 l
-3885 2530 l
-3878 2525 l
-S
-1 g
-4405 3855 m
-4409 3855 l
-4409 3856 l
-4405 3856 l
-4405 3856 m
-4412 3856 l
-4412 3857 l
-4405 3857 l
-4404 3857 m
-4415 3857 l
-4415 3858 l
-4404 3858 l
-4404 3858 m
-4418 3858 l
-4418 3859 l
-4404 3859 l
-4404 3859 m
-4421 3859 l
-4421 3860 l
-4404 3860 l
-4403 3860 m
-4424 3860 l
-4424 3861 l
-4403 3861 l
-4403 3861 m
-4427 3861 l
-4427 3862 l
-4403 3862 l
-4403 3862 m
-4429 3862 l
-4429 3863 l
-4403 3863 l
-4402 3863 m
-4432 3863 l
-4432 3864 l
-4402 3864 l
-4402 3864 m
-4435 3864 l
-4435 3865 l
-4402 3865 l
-4402 3865 m
-4438 3865 l
-4438 3866 l
-4402 3866 l
-4401 3866 m
-4441 3866 l
-4441 3867 l
-4401 3867 l
-4401 3867 m
-4444 3867 l
-4444 3868 l
-4401 3868 l
-4401 3868 m
-4447 3868 l
-4447 3869 l
-4401 3869 l
-4400 3869 m
-4449 3869 l
-4449 3870 l
-4400 3870 l
-4400 3870 m
-4452 3870 l
-4452 3871 l
-4400 3871 l
-4399 3871 m
-4455 3871 l
-4455 3872 l
-4399 3872 l
-4399 3872 m
-4458 3872 l
-4458 3873 l
-4399 3873 l
-4399 3873 m
-4461 3873 l
-4461 3874 l
-4399 3874 l
-4398 3874 m
-4464 3874 l
-4464 3875 l
-4398 3875 l
-4398 3875 m
-4467 3875 l
-4467 3876 l
-4398 3876 l
-4398 3876 m
-4469 3876 l
-4469 3877 l
-4398 3877 l
-4397 3877 m
-4472 3877 l
-4472 3878 l
-4397 3878 l
-4397 3878 m
-4475 3878 l
-4475 3879 l
-4397 3879 l
-4397 3879 m
-4478 3879 l
-4478 3880 l
-4397 3880 l
-4396 3880 m
-4481 3880 l
-4481 3881 l
-4396 3881 l
-4396 3881 m
-4484 3881 l
-4484 3882 l
-4396 3882 l
-4396 3882 m
-4487 3882 l
-4487 3883 l
-4396 3883 l
-4395 3883 m
-4489 3883 l
-4489 3884 l
-4395 3884 l
-4395 3884 m
-4492 3884 l
-4492 3885 l
-4395 3885 l
-4395 3885 m
-4495 3885 l
-4495 3886 l
-4395 3886 l
-4394 3886 m
-4498 3886 l
-4498 3887 l
-4394 3887 l
-4394 3887 m
-4501 3887 l
-4501 3888 l
-4394 3888 l
-4393 3888 m
-4504 3888 l
-4504 3889 l
-4393 3889 l
-4393 3889 m
-4507 3889 l
-4507 3890 l
-4393 3890 l
-4393 3890 m
-4509 3890 l
-4509 3891 l
-4393 3891 l
-4392 3891 m
-4512 3891 l
-4512 3892 l
-4392 3892 l
-4392 3892 m
-4515 3892 l
-4515 3893 l
-4392 3893 l
-4392 3893 m
-4518 3893 l
-4518 3894 l
-4392 3894 l
-4391 3894 m
-4521 3894 l
-4521 3895 l
-4391 3895 l
-4391 3895 m
-4521 3895 l
-4521 3897 l
-4391 3897 l
-4390 3897 m
-4520 3897 l
-4520 3899 l
-4390 3899 l
-4390 3899 m
-4519 3899 l
-4519 3900 l
-4390 3900 l
-4389 3900 m
-4519 3900 l
-4519 3902 l
-4389 3902 l
-4389 3902 m
-4518 3902 l
-4518 3903 l
-4389 3903 l
-4388 3903 m
-4518 3903 l
-4518 3905 l
-4388 3905 l
-4387 3905 m
-4517 3905 l
-4517 3908 l
-4387 3908 l
-4386 3908 m
-4516 3908 l
-4516 3911 l
-4386 3911 l
-4385 3911 m
-4515 3911 l
-4515 3914 l
-4385 3914 l
-4384 3914 m
-4514 3914 l
-4514 3917 l
-4384 3917 l
-4383 3917 m
-4513 3917 l
-4513 3919 l
-4383 3919 l
-4383 3919 m
-4512 3919 l
-4512 3920 l
-4383 3920 l
-4382 3920 m
-4512 3920 l
-4512 3922 l
-4382 3922 l
-4381 3922 m
-4511 3922 l
-4511 3925 l
-4381 3925 l
-4380 3925 m
-4510 3925 l
-4510 3928 l
-4380 3928 l
-4379 3928 m
-4509 3928 l
-4509 3931 l
-4379 3931 l
-4378 3931 m
-4508 3931 l
-4508 3934 l
-4378 3934 l
-4377 3934 m
-4507 3934 l
-4507 3937 l
-4377 3937 l
-4376 3937 m
-4506 3937 l
-4506 3939 l
-4376 3939 l
-4375 3939 m
-4505 3939 l
-4505 3942 l
-4375 3942 l
-4374 3942 m
-4504 3942 l
-4504 3945 l
-4374 3945 l
-4373 3945 m
-4503 3945 l
-4503 3948 l
-4373 3948 l
-4372 3948 m
-4502 3948 l
-4502 3951 l
-4372 3951 l
-4371 3951 m
-4501 3951 l
-4501 3954 l
-4371 3954 l
-4370 3954 m
-4500 3954 l
-4500 3956 l
-4370 3956 l
-4369 3956 m
-4500 3956 l
-4500 3957 l
-4369 3957 l
-4369 3957 m
-4499 3957 l
-4499 3959 l
-4369 3959 l
-4368 3959 m
-4498 3959 l
-4498 3962 l
-4368 3962 l
-4367 3962 m
-4497 3962 l
-4497 3965 l
-4367 3965 l
-4366 3965 m
-4496 3965 l
-4496 3968 l
-4366 3968 l
-4365 3968 m
-4495 3968 l
-4495 3971 l
-4365 3971 l
-4364 3971 m
-4494 3971 l
-4494 3973 l
-4364 3973 l
-4363 3973 m
-4494 3973 l
-4494 3974 l
-4363 3974 l
-4363 3974 m
-4493 3974 l
-4493 3976 l
-4363 3976 l
-4362 3976 m
-4492 3976 l
-4492 3979 l
-4362 3979 l
-4361 3979 m
-4491 3979 l
-4491 3982 l
-4361 3982 l
-4360 3982 m
-4490 3982 l
-4490 3985 l
-4360 3985 l
-4359 3985 m
-4489 3985 l
-4489 3988 l
-4359 3988 l
-4358 3988 m
-4488 3988 l
-4488 3990 l
-4358 3990 l
-4357 3990 m
-4488 3990 l
-4488 3991 l
-4357 3991 l
-4357 3991 m
-4487 3991 l
-4487 3993 l
-4357 3993 l
-4356 3993 m
-4487 3993 l
-4487 3994 l
-4356 3994 l
-4356 3994 m
-4486 3994 l
-4486 3996 l
-4356 3996 l
-4355 3996 m
-4485 3996 l
-4485 3999 l
-4355 3999 l
-4354 3999 m
-4484 3999 l
-4484 4002 l
-4354 4002 l
-4353 4002 m
-4483 4002 l
-4483 4005 l
-4353 4005 l
-4352 4005 m
-4482 4005 l
-4482 4007 l
-4352 4007 l
-4351 4007 m
-4482 4007 l
-4482 4008 l
-4351 4008 l
-4351 4008 m
-4481 4008 l
-4481 4010 l
-4351 4010 l
-4350 4010 m
-4481 4010 l
-4481 4011 l
-4350 4011 l
-4350 4011 m
-4480 4011 l
-4480 4013 l
-4350 4013 l
-4349 4013 m
-4480 4013 l
-4480 4014 l
-4349 4014 l
-4349 4014 m
-4479 4014 l
-4479 4016 l
-4349 4016 l
-4348 4016 m
-4478 4016 l
-4478 4019 l
-4348 4019 l
-4347 4019 m
-4477 4019 l
-4477 4022 l
-4347 4022 l
-4346 4022 m
-4476 4022 l
-4476 4024 l
-4346 4024 l
-4345 4024 m
-4476 4024 l
-4476 4025 l
-4345 4025 l
-4345 4025 m
-4475 4025 l
-4475 4027 l
-4345 4027 l
-4344 4027 m
-4475 4027 l
-4475 4028 l
-4344 4028 l
-4344 4028 m
-4474 4028 l
-4474 4030 l
-4344 4030 l
-4343 4030 m
-4474 4030 l
-4474 4031 l
-4343 4031 l
-4343 4031 m
-4473 4031 l
-4473 4033 l
-4343 4033 l
-4342 4033 m
-4472 4033 l
-4472 4036 l
-4342 4036 l
-4341 4036 m
-4471 4036 l
-4471 4039 l
-4341 4039 l
-4340 4039 m
-4470 4039 l
-4470 4041 l
-4340 4041 l
-4339 4041 m
-4470 4041 l
-4470 4042 l
-4339 4042 l
-4339 4042 m
-4469 4042 l
-4469 4044 l
-4339 4044 l
-4338 4044 m
-4469 4044 l
-4469 4045 l
-4338 4045 l
-4338 4045 m
-4468 4045 l
-4468 4047 l
-4338 4047 l
-4337 4047 m
-4468 4047 l
-4468 4048 l
-4337 4048 l
-4337 4048 m
-4467 4048 l
-4467 4050 l
-4337 4050 l
-4336 4050 m
-4467 4050 l
-4467 4051 l
-4336 4051 l
-4336 4051 m
-4466 4051 l
-4466 4053 l
-4336 4053 l
-4335 4053 m
-4465 4053 l
-4465 4056 l
-4335 4056 l
-4334 4056 m
-4464 4056 l
-4464 4058 l
-4334 4058 l
-4333 4058 m
-4464 4058 l
-4464 4059 l
-4333 4059 l
-4333 4059 m
-4463 4059 l
-4463 4061 l
-4333 4061 l
-4332 4061 m
-4463 4061 l
-4463 4062 l
-4332 4062 l
-4332 4062 m
-4462 4062 l
-4462 4064 l
-4332 4064 l
-4331 4064 m
-4462 4064 l
-4462 4065 l
-4331 4065 l
-4331 4065 m
-4461 4065 l
-4461 4067 l
-4331 4067 l
-4330 4067 m
-4461 4067 l
-4461 4068 l
-4330 4068 l
-4330 4068 m
-4460 4068 l
-4460 4070 l
-4330 4070 l
-4329 4070 m
-4460 4070 l
-4460 4071 l
-4329 4071 l
-4329 4071 m
-4459 4071 l
-4459 4073 l
-4329 4073 l
-4328 4073 m
-4458 4073 l
-4458 4075 l
-4328 4075 l
-4327 4075 m
-4458 4075 l
-4458 4076 l
-4327 4076 l
-4327 4076 m
-4457 4076 l
-4457 4078 l
-4327 4078 l
-4326 4078 m
-4457 4078 l
-4457 4079 l
-4326 4079 l
-4326 4079 m
-4456 4079 l
-4456 4081 l
-4326 4081 l
-4325 4081 m
-4456 4081 l
-4456 4082 l
-4325 4082 l
-4325 4082 m
-4455 4082 l
-4455 4084 l
-4325 4084 l
-4324 4084 m
-4455 4084 l
-4455 4085 l
-4324 4085 l
-4324 4085 m
-4454 4085 l
-4454 4087 l
-4324 4087 l
-4323 4087 m
-4454 4087 l
-4454 4088 l
-4323 4088 l
-4323 4088 m
-4453 4088 l
-4453 4090 l
-4323 4090 l
-4322 4090 m
-4452 4090 l
-4452 4092 l
-4322 4092 l
-4321 4092 m
-4452 4092 l
-4452 4093 l
-4321 4093 l
-4321 4093 m
-4451 4093 l
-4451 4095 l
-4321 4095 l
-4320 4095 m
-4451 4095 l
-4451 4096 l
-4320 4096 l
-4320 4096 m
-4450 4096 l
-4450 4098 l
-4320 4098 l
-4319 4098 m
-4450 4098 l
-4450 4099 l
-4319 4099 l
-4319 4099 m
-4449 4099 l
-4449 4101 l
-4319 4101 l
-4318 4101 m
-4449 4101 l
-4449 4102 l
-4318 4102 l
-4318 4102 m
-4448 4102 l
-4448 4104 l
-4318 4104 l
-4317 4104 m
-4448 4104 l
-4448 4105 l
-4317 4105 l
-4317 4105 m
-4447 4105 l
-4447 4107 l
-4317 4107 l
-4317 4107 m
-4447 4107 l
-4447 4108 l
-4317 4108 l
-4319 4108 m
-4446 4108 l
-4446 4109 l
-4319 4109 l
-4322 4109 m
-4446 4109 l
-4446 4110 l
-4322 4110 l
-4325 4110 m
-4445 4110 l
-4445 4111 l
-4325 4111 l
-4328 4111 m
-4445 4111 l
-4445 4112 l
-4328 4112 l
-4331 4112 m
-4445 4112 l
-4445 4113 l
-4331 4113 l
-4334 4113 m
-4444 4113 l
-4444 4114 l
-4334 4114 l
-4337 4114 m
-4444 4114 l
-4444 4115 l
-4337 4115 l
-4340 4115 m
-4444 4115 l
-4444 4116 l
-4340 4116 l
-4342 4116 m
-4443 4116 l
-4443 4117 l
-4342 4117 l
-4345 4117 m
-4443 4117 l
-4443 4118 l
-4345 4118 l
-4348 4118 m
-4443 4118 l
-4443 4119 l
-4348 4119 l
-4351 4119 m
-4442 4119 l
-4442 4120 l
-4351 4120 l
-4354 4120 m
-4442 4120 l
-4442 4121 l
-4354 4121 l
-4357 4121 m
-4442 4121 l
-4442 4122 l
-4357 4122 l
-4360 4122 m
-4441 4122 l
-4441 4123 l
-4360 4123 l
-4363 4123 m
-4441 4123 l
-4441 4124 l
-4363 4124 l
-4365 4124 m
-4441 4124 l
-4441 4125 l
-4365 4125 l
-4368 4125 m
-4440 4125 l
-4440 4126 l
-4368 4126 l
-4371 4126 m
-4440 4126 l
-4440 4127 l
-4371 4127 l
-4374 4127 m
-4440 4127 l
-4440 4128 l
-4374 4128 l
-4377 4128 m
-4439 4128 l
-4439 4129 l
-4377 4129 l
-4380 4129 m
-4439 4129 l
-4439 4130 l
-4380 4130 l
-4383 4130 m
-4438 4130 l
-4438 4131 l
-4383 4131 l
-4386 4131 m
-4438 4131 l
-4438 4132 l
-4386 4132 l
-4388 4132 m
-4438 4132 l
-4438 4133 l
-4388 4133 l
-4391 4133 m
-4437 4133 l
-4437 4134 l
-4391 4134 l
-4394 4134 m
-4437 4134 l
-4437 4135 l
-4394 4135 l
-4397 4135 m
-4437 4135 l
-4437 4136 l
-4397 4136 l
-4400 4136 m
-4436 4136 l
-4436 4137 l
-4400 4137 l
-4403 4137 m
-4436 4137 l
-4436 4138 l
-4403 4138 l
-4406 4138 m
-4436 4138 l
-4436 4139 l
-4406 4139 l
-4409 4139 m
-4435 4139 l
-4435 4140 l
-4409 4140 l
-4411 4140 m
-4435 4140 l
-4435 4141 l
-4411 4141 l
-4414 4141 m
-4435 4141 l
-4435 4142 l
-4414 4142 l
-4417 4142 m
-4434 4142 l
-4434 4143 l
-4417 4143 l
-4420 4143 m
-4434 4143 l
-4434 4144 l
-4420 4144 l
-4423 4144 m
-4434 4144 l
-4434 4145 l
-4423 4145 l
-4426 4145 m
-4433 4145 l
-4433 4146 l
-4426 4146 l
-4429 4146 m
-4433 4146 l
-4433 4147 l
-4429 4147 l
-Y
-4520.4 3895 m
-4406 3855 l
-4317 4107 l
-4432 4147 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4412 3888 m
-4397 3931 l
-4437 3919 l
-4433 3930 l
-4434 3940 l
-4436 3945 l
-4447 3953 l
-4455 3956 l
-4468 3956 l
-4478 3951 l
-4487 3941 l
-4491 3929 l
-4491 3916 l
-4488 3910 l
-4482 3904 l
-S
-4399 3976 m
-4392 3983 l
-4376 3990 l
-4459 4019 l
-S
-4343 4085 m
-4357 4045 l
-4393 4054 l
-4388 4057 l
-4380 4067 l
-4376 4079 l
-4376 4092 l
-4381 4103 l
-4391 4111 l
-4399 4113 l
-4412 4114 l
-4423 4109 l
-4431 4098 l
-4435 4086 l
-4435 4073 l
-4433 4068 l
-4426 4061 l
-S
-1 g
-2971 2971 m
-2974 2971 l
-2974 2972 l
-2971 2972 l
-2970 2972 m
-2976 2972 l
-2976 2973 l
-2970 2973 l
-2970 2973 m
-2978 2973 l
-2978 2974 l
-2970 2974 l
-2969 2974 m
-2980 2974 l
-2980 2975 l
-2969 2975 l
-2969 2975 m
-2982 2975 l
-2982 2976 l
-2969 2976 l
-2968 2976 m
-2984 2976 l
-2984 2977 l
-2968 2977 l
-2968 2977 m
-2985 2977 l
-2985 2978 l
-2968 2978 l
-2967 2978 m
-2987 2978 l
-2987 2979 l
-2967 2979 l
-2966 2979 m
-2989 2979 l
-2989 2980 l
-2966 2980 l
-2966 2980 m
-2991 2980 l
-2991 2981 l
-2966 2981 l
-2965 2981 m
-2993 2981 l
-2993 2982 l
-2965 2982 l
-2965 2982 m
-2994 2982 l
-2994 2983 l
-2965 2983 l
-2964 2983 m
-2996 2983 l
-2996 2984 l
-2964 2984 l
-2964 2984 m
-2998 2984 l
-2998 2985 l
-2964 2985 l
-2963 2985 m
-3000 2985 l
-3000 2986 l
-2963 2986 l
-2963 2986 m
-3002 2986 l
-3002 2987 l
-2963 2987 l
-2962 2987 m
-3003 2987 l
-3003 2988 l
-2962 2988 l
-2961 2988 m
-3005 2988 l
-3005 2989 l
-2961 2989 l
-2961 2989 m
-3007 2989 l
-3007 2990 l
-2961 2990 l
-2960 2990 m
-3009 2990 l
-3009 2991 l
-2960 2991 l
-2960 2991 m
-3011 2991 l
-3011 2992 l
-2960 2992 l
-2959 2992 m
-3013 2992 l
-3013 2993 l
-2959 2993 l
-2959 2993 m
-3014 2993 l
-3014 2994 l
-2959 2994 l
-2958 2994 m
-3016 2994 l
-3016 2995 l
-2958 2995 l
-2958 2995 m
-3018 2995 l
-3018 2996 l
-2958 2996 l
-2957 2996 m
-3020 2996 l
-3020 2997 l
-2957 2997 l
-2956 2997 m
-3022 2997 l
-3022 2998 l
-2956 2998 l
-2956 2998 m
-3023 2998 l
-3023 2999 l
-2956 2999 l
-2955 2999 m
-3025 2999 l
-3025 3000 l
-2955 3000 l
-2955 3000 m
-3027 3000 l
-3027 3001 l
-2955 3001 l
-2954 3001 m
-3029 3001 l
-3029 3002 l
-2954 3002 l
-2954 3002 m
-3031 3002 l
-3031 3003 l
-2954 3003 l
-2953 3003 m
-3032 3003 l
-3032 3004 l
-2953 3004 l
-2953 3004 m
-3034 3004 l
-3034 3005 l
-2953 3005 l
-2952 3005 m
-3036 3005 l
-3036 3006 l
-2952 3006 l
-2951 3006 m
-3038 3006 l
-3038 3007 l
-2951 3007 l
-2951 3007 m
-3040 3007 l
-3040 3008 l
-2951 3008 l
-2950 3008 m
-3042 3008 l
-3042 3009 l
-2950 3009 l
-2950 3009 m
-3043 3009 l
-3043 3010 l
-2950 3010 l
-2949 3010 m
-3045 3010 l
-3045 3011 l
-2949 3011 l
-2949 3011 m
-3047 3011 l
-3047 3012 l
-2949 3012 l
-2948 3012 m
-3049 3012 l
-3049 3013 l
-2948 3013 l
-2948 3013 m
-3051 3013 l
-3051 3014 l
-2948 3014 l
-2947 3014 m
-3052 3014 l
-3052 3015 l
-2947 3015 l
-2946 3015 m
-3054 3015 l
-3054 3016 l
-2946 3016 l
-2946 3016 m
-3056 3016 l
-3056 3017 l
-2946 3017 l
-2945 3017 m
-3058 3017 l
-3058 3018 l
-2945 3018 l
-2945 3018 m
-3060 3018 l
-3060 3019 l
-2945 3019 l
-2944 3019 m
-3061 3019 l
-3061 3020 l
-2944 3020 l
-2944 3020 m
-3063 3020 l
-3063 3021 l
-2944 3021 l
-2943 3021 m
-3065 3021 l
-3065 3022 l
-2943 3022 l
-2943 3022 m
-3067 3022 l
-3067 3023 l
-2943 3023 l
-2942 3023 m
-3069 3023 l
-3069 3024 l
-2942 3024 l
-2941 3024 m
-3071 3024 l
-3071 3025 l
-2941 3025 l
-2941 3025 m
-3072 3025 l
-3072 3026 l
-2941 3026 l
-2940 3026 m
-3074 3026 l
-3074 3027 l
-2940 3027 l
-2940 3027 m
-3076 3027 l
-3076 3028 l
-2940 3028 l
-2939 3028 m
-3078 3028 l
-3078 3029 l
-2939 3029 l
-2939 3029 m
-3080 3029 l
-3080 3030 l
-2939 3030 l
-2938 3030 m
-3081 3030 l
-3081 3031 l
-2938 3031 l
-2938 3031 m
-3083 3031 l
-3083 3032 l
-2938 3032 l
-2937 3032 m
-3085 3032 l
-3085 3033 l
-2937 3033 l
-2936 3033 m
-3087 3033 l
-3087 3034 l
-2936 3034 l
-2936 3034 m
-3089 3034 l
-3089 3035 l
-2936 3035 l
-2935 3035 m
-3090 3035 l
-3090 3036 l
-2935 3036 l
-2935 3036 m
-3092 3036 l
-3092 3037 l
-2935 3037 l
-2934 3037 m
-3094 3037 l
-3094 3038 l
-2934 3038 l
-2934 3038 m
-3096 3038 l
-3096 3039 l
-2934 3039 l
-2933 3039 m
-3098 3039 l
-3098 3040 l
-2933 3040 l
-2933 3040 m
-3099 3040 l
-3099 3041 l
-2933 3041 l
-2932 3041 m
-3101 3041 l
-3101 3042 l
-2932 3042 l
-2931 3042 m
-3103 3042 l
-3103 3043 l
-2931 3043 l
-2931 3043 m
-3105 3043 l
-3105 3044 l
-2931 3044 l
-2930 3044 m
-3107 3044 l
-3107 3045 l
-2930 3045 l
-2930 3045 m
-3109 3045 l
-3109 3046 l
-2930 3046 l
-2929 3046 m
-3110 3046 l
-3110 3047 l
-2929 3047 l
-2929 3047 m
-3112 3047 l
-3112 3048 l
-2929 3048 l
-2928 3048 m
-3114 3048 l
-3114 3049 l
-2928 3049 l
-2928 3049 m
-3116 3049 l
-3116 3050 l
-2928 3050 l
-2927 3050 m
-3118 3050 l
-3118 3051 l
-2927 3051 l
-2926 3051 m
-3119 3051 l
-3119 3052 l
-2926 3052 l
-2926 3052 m
-3121 3052 l
-3121 3053 l
-2926 3053 l
-2925 3053 m
-3123 3053 l
-3123 3054 l
-2925 3054 l
-2925 3054 m
-3125 3054 l
-3125 3055 l
-2925 3055 l
-2924 3055 m
-3127 3055 l
-3127 3056 l
-2924 3056 l
-2924 3056 m
-3128 3056 l
-3128 3057 l
-2924 3057 l
-2923 3057 m
-3130 3057 l
-3130 3058 l
-2923 3058 l
-2923 3058 m
-3132 3058 l
-3132 3059 l
-2923 3059 l
-2922 3059 m
-3134 3059 l
-3134 3060 l
-2922 3060 l
-2921 3060 m
-3136 3060 l
-3136 3061 l
-2921 3061 l
-2921 3061 m
-3138 3061 l
-3138 3062 l
-2921 3062 l
-2920 3062 m
-3139 3062 l
-3139 3063 l
-2920 3063 l
-2920 3063 m
-3141 3063 l
-3141 3064 l
-2920 3064 l
-2919 3064 m
-3143 3064 l
-3143 3065 l
-2919 3065 l
-2919 3065 m
-3145 3065 l
-3145 3066 l
-2919 3066 l
-2918 3066 m
-3147 3066 l
-3147 3067 l
-2918 3067 l
-2918 3067 m
-3148 3067 l
-3148 3068 l
-2918 3068 l
-2917 3068 m
-3150 3068 l
-3150 3069 l
-2917 3069 l
-2916 3069 m
-3152 3069 l
-3152 3070 l
-2916 3070 l
-2916 3070 m
-3154 3070 l
-3154 3071 l
-2916 3071 l
-2915 3071 m
-3156 3071 l
-3156 3072 l
-2915 3072 l
-2915 3072 m
-3157 3072 l
-3157 3073 l
-2915 3073 l
-2914 3073 m
-3159 3073 l
-3159 3074 l
-2914 3074 l
-2914 3074 m
-3161 3074 l
-3161 3075 l
-2914 3075 l
-2913 3075 m
-3163 3075 l
-3163 3076 l
-2913 3076 l
-2913 3076 m
-3165 3076 l
-3165 3077 l
-2913 3077 l
-2913 3077 m
-3167 3077 l
-3167 3078 l
-2913 3078 l
-2914 3078 m
-3168 3078 l
-3168 3079 l
-2914 3079 l
-2916 3079 m
-3170 3079 l
-3170 3080 l
-2916 3080 l
-2918 3080 m
-3172 3080 l
-3172 3081 l
-2918 3081 l
-2920 3081 m
-3174 3081 l
-3174 3082 l
-2920 3082 l
-2922 3082 m
-3176 3082 l
-3176 3083 l
-2922 3083 l
-2923 3083 m
-3177 3083 l
-3177 3084 l
-2923 3084 l
-2925 3084 m
-3179 3084 l
-3179 3085 l
-2925 3085 l
-2927 3085 m
-3181 3085 l
-3181 3086 l
-2927 3086 l
-2929 3086 m
-3183 3086 l
-3183 3087 l
-2929 3087 l
-2931 3087 m
-3185 3087 l
-3185 3088 l
-2931 3088 l
-2933 3088 m
-3186 3088 l
-3186 3089 l
-2933 3089 l
-2934 3089 m
-3188 3089 l
-3188 3090 l
-2934 3090 l
-2936 3090 m
-3190 3090 l
-3190 3091 l
-2936 3091 l
-2938 3091 m
-3192 3091 l
-3192 3092 l
-2938 3092 l
-2940 3092 m
-3194 3092 l
-3194 3093 l
-2940 3093 l
-2942 3093 m
-3196 3093 l
-3196 3094 l
-2942 3094 l
-2943 3094 m
-3197 3094 l
-3197 3095 l
-2943 3095 l
-2945 3095 m
-3199 3095 l
-3199 3096 l
-2945 3096 l
-2947 3096 m
-3201 3096 l
-3201 3097 l
-2947 3097 l
-2949 3097 m
-3203 3097 l
-3203 3098 l
-2949 3098 l
-2951 3098 m
-3205 3098 l
-3205 3099 l
-2951 3099 l
-2953 3099 m
-3206 3099 l
-3206 3100 l
-2953 3100 l
-2954 3100 m
-3208 3100 l
-3208 3101 l
-2954 3101 l
-2956 3101 m
-3210 3101 l
-3210 3102 l
-2956 3102 l
-2958 3102 m
-3212 3102 l
-3212 3103 l
-2958 3103 l
-2960 3103 m
-3214 3103 l
-3214 3104 l
-2960 3104 l
-2962 3104 m
-3215 3104 l
-3215 3105 l
-2962 3105 l
-2963 3105 m
-3217 3105 l
-3217 3106 l
-2963 3106 l
-2965 3106 m
-3219 3106 l
-3219 3107 l
-2965 3107 l
-2967 3107 m
-3221 3107 l
-3221 3108 l
-2967 3108 l
-2969 3108 m
-3223 3108 l
-3223 3109 l
-2969 3109 l
-2971 3109 m
-3224 3109 l
-3224 3110 l
-2971 3110 l
-2973 3110 m
-3224 3110 l
-3224 3111 l
-2973 3111 l
-2974 3111 m
-3224 3111 l
-3224 3112 l
-2974 3112 l
-2976 3112 m
-3223 3112 l
-3223 3113 l
-2976 3113 l
-2978 3113 m
-3223 3113 l
-3223 3114 l
-2978 3114 l
-2980 3114 m
-3222 3114 l
-3222 3115 l
-2980 3115 l
-2982 3115 m
-3222 3115 l
-3222 3116 l
-2982 3116 l
-2983 3116 m
-3221 3116 l
-3221 3117 l
-2983 3117 l
-2985 3117 m
-3221 3117 l
-3221 3118 l
-2985 3118 l
-2987 3118 m
-3220 3118 l
-3220 3119 l
-2987 3119 l
-2989 3119 m
-3220 3119 l
-3220 3120 l
-2989 3120 l
-2991 3120 m
-3219 3120 l
-3219 3121 l
-2991 3121 l
-2993 3121 m
-3218 3121 l
-3218 3122 l
-2993 3122 l
-2994 3122 m
-3218 3122 l
-3218 3123 l
-2994 3123 l
-2996 3123 m
-3217 3123 l
-3217 3124 l
-2996 3124 l
-2998 3124 m
-3217 3124 l
-3217 3125 l
-2998 3125 l
-3000 3125 m
-3216 3125 l
-3216 3126 l
-3000 3126 l
-3002 3126 m
-3216 3126 l
-3216 3127 l
-3002 3127 l
-3004 3127 m
-3215 3127 l
-3215 3128 l
-3004 3128 l
-3005 3128 m
-3215 3128 l
-3215 3129 l
-3005 3129 l
-3007 3129 m
-3214 3129 l
-3214 3130 l
-3007 3130 l
-3009 3130 m
-3214 3130 l
-3214 3131 l
-3009 3131 l
-3011 3131 m
-3213 3131 l
-3213 3132 l
-3011 3132 l
-3013 3132 m
-3212 3132 l
-3212 3133 l
-3013 3133 l
-3014 3133 m
-3212 3133 l
-3212 3134 l
-3014 3134 l
-3016 3134 m
-3211 3134 l
-3211 3135 l
-3016 3135 l
-3018 3135 m
-3211 3135 l
-3211 3136 l
-3018 3136 l
-3020 3136 m
-3210 3136 l
-3210 3137 l
-3020 3137 l
-3022 3137 m
-3210 3137 l
-3210 3138 l
-3022 3138 l
-3024 3138 m
-3209 3138 l
-3209 3139 l
-3024 3139 l
-3025 3139 m
-3209 3139 l
-3209 3140 l
-3025 3140 l
-3027 3140 m
-3208 3140 l
-3208 3141 l
-3027 3141 l
-3029 3141 m
-3208 3141 l
-3208 3142 l
-3029 3142 l
-3031 3142 m
-3207 3142 l
-3207 3143 l
-3031 3143 l
-3033 3143 m
-3206 3143 l
-3206 3144 l
-3033 3144 l
-3034 3144 m
-3206 3144 l
-3206 3145 l
-3034 3145 l
-3036 3145 m
-3205 3145 l
-3205 3146 l
-3036 3146 l
-3038 3146 m
-3205 3146 l
-3205 3147 l
-3038 3147 l
-3040 3147 m
-3204 3147 l
-3204 3148 l
-3040 3148 l
-3042 3148 m
-3204 3148 l
-3204 3149 l
-3042 3149 l
-3044 3149 m
-3203 3149 l
-3203 3150 l
-3044 3150 l
-3045 3150 m
-3203 3150 l
-3203 3151 l
-3045 3151 l
-3047 3151 m
-3202 3151 l
-3202 3152 l
-3047 3152 l
-3049 3152 m
-3202 3152 l
-3202 3153 l
-3049 3153 l
-3051 3153 m
-3201 3153 l
-3201 3154 l
-3051 3154 l
-3053 3154 m
-3200 3154 l
-3200 3155 l
-3053 3155 l
-3054 3155 m
-3200 3155 l
-3200 3156 l
-3054 3156 l
-3056 3156 m
-3199 3156 l
-3199 3157 l
-3056 3157 l
-3058 3157 m
-3199 3157 l
-3199 3158 l
-3058 3158 l
-3060 3158 m
-3198 3158 l
-3198 3159 l
-3060 3159 l
-3062 3159 m
-3198 3159 l
-3198 3160 l
-3062 3160 l
-3064 3160 m
-3197 3160 l
-3197 3161 l
-3064 3161 l
-3065 3161 m
-3197 3161 l
-3197 3162 l
-3065 3162 l
-3067 3162 m
-3196 3162 l
-3196 3163 l
-3067 3163 l
-3069 3163 m
-3195 3163 l
-3195 3164 l
-3069 3164 l
-3071 3164 m
-3195 3164 l
-3195 3165 l
-3071 3165 l
-3073 3165 m
-3194 3165 l
-3194 3166 l
-3073 3166 l
-3074 3166 m
-3194 3166 l
-3194 3167 l
-3074 3167 l
-3076 3167 m
-3193 3167 l
-3193 3168 l
-3076 3168 l
-3078 3168 m
-3193 3168 l
-3193 3169 l
-3078 3169 l
-3080 3169 m
-3192 3169 l
-3192 3170 l
-3080 3170 l
-3082 3170 m
-3192 3170 l
-3192 3171 l
-3082 3171 l
-3084 3171 m
-3191 3171 l
-3191 3172 l
-3084 3172 l
-3085 3172 m
-3191 3172 l
-3191 3173 l
-3085 3173 l
-3087 3173 m
-3190 3173 l
-3190 3174 l
-3087 3174 l
-3089 3174 m
-3189 3174 l
-3189 3175 l
-3089 3175 l
-3091 3175 m
-3189 3175 l
-3189 3176 l
-3091 3176 l
-3093 3176 m
-3188 3176 l
-3188 3177 l
-3093 3177 l
-3095 3177 m
-3188 3177 l
-3188 3178 l
-3095 3178 l
-3096 3178 m
-3187 3178 l
-3187 3179 l
-3096 3179 l
-3098 3179 m
-3187 3179 l
-3187 3180 l
-3098 3180 l
-3100 3180 m
-3186 3180 l
-3186 3181 l
-3100 3181 l
-3102 3181 m
-3186 3181 l
-3186 3182 l
-3102 3182 l
-3104 3182 m
-3185 3182 l
-3185 3183 l
-3104 3183 l
-3105 3183 m
-3185 3183 l
-3185 3184 l
-3105 3184 l
-3107 3184 m
-3184 3184 l
-3184 3185 l
-3107 3185 l
-3109 3185 m
-3183 3185 l
-3183 3186 l
-3109 3186 l
-3111 3186 m
-3183 3186 l
-3183 3187 l
-3111 3187 l
-3113 3187 m
-3182 3187 l
-3182 3188 l
-3113 3188 l
-3115 3188 m
-3182 3188 l
-3182 3189 l
-3115 3189 l
-3116 3189 m
-3181 3189 l
-3181 3190 l
-3116 3190 l
-3118 3190 m
-3181 3190 l
-3181 3191 l
-3118 3191 l
-3120 3191 m
-3180 3191 l
-3180 3192 l
-3120 3192 l
-3122 3192 m
-3180 3192 l
-3180 3193 l
-3122 3193 l
-3124 3193 m
-3179 3193 l
-3179 3194 l
-3124 3194 l
-3125 3194 m
-3179 3194 l
-3179 3195 l
-3125 3195 l
-3127 3195 m
-3178 3195 l
-3178 3196 l
-3127 3196 l
-3129 3196 m
-3177 3196 l
-3177 3197 l
-3129 3197 l
-3131 3197 m
-3177 3197 l
-3177 3198 l
-3131 3198 l
-3133 3198 m
-3176 3198 l
-3176 3199 l
-3133 3199 l
-3135 3199 m
-3176 3199 l
-3176 3200 l
-3135 3200 l
-3136 3200 m
-3175 3200 l
-3175 3201 l
-3136 3201 l
-3138 3201 m
-3175 3201 l
-3175 3202 l
-3138 3202 l
-3140 3202 m
-3174 3202 l
-3174 3203 l
-3140 3203 l
-3142 3203 m
-3174 3203 l
-3174 3204 l
-3142 3204 l
-3144 3204 m
-3173 3204 l
-3173 3205 l
-3144 3205 l
-3145 3205 m
-3173 3205 l
-3173 3206 l
-3145 3206 l
-3147 3206 m
-3172 3206 l
-3172 3207 l
-3147 3207 l
-3149 3207 m
-3171 3207 l
-3171 3208 l
-3149 3208 l
-3151 3208 m
-3171 3208 l
-3171 3209 l
-3151 3209 l
-3153 3209 m
-3170 3209 l
-3170 3210 l
-3153 3210 l
-3155 3210 m
-3170 3210 l
-3170 3211 l
-3155 3211 l
-3156 3211 m
-3169 3211 l
-3169 3212 l
-3156 3212 l
-3158 3212 m
-3169 3212 l
-3169 3213 l
-3158 3213 l
-3160 3213 m
-3168 3213 l
-3168 3214 l
-3160 3214 l
-3162 3214 m
-3168 3214 l
-3168 3215 l
-3162 3215 l
-3164 3215 m
-3167 3215 l
-3167 3216 l
-3164 3216 l
-Y
-2972 2970.9 m
-2913 3077 l
-3166 3216 l
-3224 3110 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2964 3028 m
-3030 3065 l
-S
-3093 3124 m
-3095 3111 l
-3092 3099 l
-3083 3090 l
-3079 3088 l
-3066 3085 l
-3055 3088 l
-3045 3097 l
-3043 3101 l
-3041 3114 l
-3044 3125 l
-3053 3135 l
-3057 3137 l
-3070 3139 l
-3081 3136 l
-3093 3124 l
-3103 3105 l
-3109 3085 l
-3108 3070 l
-3099 3060 l
-3092 3056 l
-3079 3054 l
-3071 3059 l
-S
-3126 3175 m
-3117 3166 l
-3116 3151 l
-3122 3130 l
-3128 3119 l
-3142 3103 l
-3156 3096 l
-3169 3099 l
-3176 3103 l
-3185 3112 l
-3186 3127 l
-3180 3148 l
-3174 3159 l
-3160 3175 l
-3146 3182 l
-3133 3179 l
-3126 3175 l
-S
-1 g
-3473 3317 m
-3476 3317 l
-3476 3318 l
-3473 3318 l
-3472 3318 m
-3476 3318 l
-3476 3319 l
-3472 3319 l
-3471 3319 m
-3477 3319 l
-3477 3320 l
-3471 3320 l
-3470 3320 m
-3478 3320 l
-3478 3321 l
-3470 3321 l
-3469 3321 m
-3479 3321 l
-3479 3322 l
-3469 3322 l
-3467 3322 m
-3480 3322 l
-3480 3323 l
-3467 3323 l
-3466 3323 m
-3480 3323 l
-3480 3324 l
-3466 3324 l
-3465 3324 m
-3481 3324 l
-3481 3325 l
-3465 3325 l
-3464 3325 m
-3482 3325 l
-3482 3326 l
-3464 3326 l
-3463 3326 m
-3483 3326 l
-3483 3327 l
-3463 3327 l
-3461 3327 m
-3484 3327 l
-3484 3328 l
-3461 3328 l
-3460 3328 m
-3485 3328 l
-3485 3329 l
-3460 3329 l
-3459 3329 m
-3485 3329 l
-3485 3330 l
-3459 3330 l
-3458 3330 m
-3486 3330 l
-3486 3331 l
-3458 3331 l
-3457 3331 m
-3487 3331 l
-3487 3332 l
-3457 3332 l
-3455 3332 m
-3488 3332 l
-3488 3333 l
-3455 3333 l
-3454 3333 m
-3489 3333 l
-3489 3334 l
-3454 3334 l
-3453 3334 m
-3490 3334 l
-3490 3335 l
-3453 3335 l
-3452 3335 m
-3490 3335 l
-3490 3336 l
-3452 3336 l
-3451 3336 m
-3491 3336 l
-3491 3337 l
-3451 3337 l
-3449 3337 m
-3492 3337 l
-3492 3338 l
-3449 3338 l
-3448 3338 m
-3493 3338 l
-3493 3339 l
-3448 3339 l
-3447 3339 m
-3494 3339 l
-3494 3340 l
-3447 3340 l
-3446 3340 m
-3494 3340 l
-3494 3341 l
-3446 3341 l
-3445 3341 m
-3495 3341 l
-3495 3342 l
-3445 3342 l
-3443 3342 m
-3496 3342 l
-3496 3343 l
-3443 3343 l
-3442 3343 m
-3497 3343 l
-3497 3344 l
-3442 3344 l
-3441 3344 m
-3498 3344 l
-3498 3345 l
-3441 3345 l
-3440 3345 m
-3499 3345 l
-3499 3346 l
-3440 3346 l
-3438 3346 m
-3499 3346 l
-3499 3347 l
-3438 3347 l
-3437 3347 m
-3500 3347 l
-3500 3348 l
-3437 3348 l
-3436 3348 m
-3501 3348 l
-3501 3349 l
-3436 3349 l
-3435 3349 m
-3502 3349 l
-3502 3350 l
-3435 3350 l
-3434 3350 m
-3503 3350 l
-3503 3351 l
-3434 3351 l
-3432 3351 m
-3504 3351 l
-3504 3352 l
-3432 3352 l
-3431 3352 m
-3504 3352 l
-3504 3353 l
-3431 3353 l
-3430 3353 m
-3505 3353 l
-3505 3354 l
-3430 3354 l
-3429 3354 m
-3506 3354 l
-3506 3355 l
-3429 3355 l
-3428 3355 m
-3507 3355 l
-3507 3356 l
-3428 3356 l
-3426 3356 m
-3508 3356 l
-3508 3357 l
-3426 3357 l
-3425 3357 m
-3508 3357 l
-3508 3358 l
-3425 3358 l
-3424 3358 m
-3509 3358 l
-3509 3359 l
-3424 3359 l
-3423 3359 m
-3510 3359 l
-3510 3360 l
-3423 3360 l
-3422 3360 m
-3511 3360 l
-3511 3361 l
-3422 3361 l
-3420 3361 m
-3512 3361 l
-3512 3362 l
-3420 3362 l
-3419 3362 m
-3513 3362 l
-3513 3363 l
-3419 3363 l
-3418 3363 m
-3513 3363 l
-3513 3364 l
-3418 3364 l
-3417 3364 m
-3514 3364 l
-3514 3365 l
-3417 3365 l
-3416 3365 m
-3515 3365 l
-3515 3366 l
-3416 3366 l
-3414 3366 m
-3516 3366 l
-3516 3367 l
-3414 3367 l
-3413 3367 m
-3517 3367 l
-3517 3368 l
-3413 3368 l
-3412 3368 m
-3518 3368 l
-3518 3369 l
-3412 3369 l
-3411 3369 m
-3518 3369 l
-3518 3370 l
-3411 3370 l
-3409 3370 m
-3519 3370 l
-3519 3371 l
-3409 3371 l
-3408 3371 m
-3520 3371 l
-3520 3372 l
-3408 3372 l
-3407 3372 m
-3521 3372 l
-3521 3373 l
-3407 3373 l
-3406 3373 m
-3522 3373 l
-3522 3374 l
-3406 3374 l
-3405 3374 m
-3522 3374 l
-3522 3375 l
-3405 3375 l
-3403 3375 m
-3523 3375 l
-3523 3376 l
-3403 3376 l
-3402 3376 m
-3524 3376 l
-3524 3377 l
-3402 3377 l
-3401 3377 m
-3525 3377 l
-3525 3378 l
-3401 3378 l
-3400 3378 m
-3526 3378 l
-3526 3379 l
-3400 3379 l
-3399 3379 m
-3527 3379 l
-3527 3380 l
-3399 3380 l
-3397 3380 m
-3527 3380 l
-3527 3381 l
-3397 3381 l
-3396 3381 m
-3528 3381 l
-3528 3382 l
-3396 3382 l
-3395 3382 m
-3529 3382 l
-3529 3383 l
-3395 3383 l
-3394 3383 m
-3530 3383 l
-3530 3384 l
-3394 3384 l
-3393 3384 m
-3531 3384 l
-3531 3385 l
-3393 3385 l
-3391 3385 m
-3532 3385 l
-3532 3386 l
-3391 3386 l
-3390 3386 m
-3532 3386 l
-3532 3387 l
-3390 3387 l
-3389 3387 m
-3533 3387 l
-3533 3388 l
-3389 3388 l
-3388 3388 m
-3534 3388 l
-3534 3389 l
-3388 3389 l
-3387 3389 m
-3535 3389 l
-3535 3390 l
-3387 3390 l
-3385 3390 m
-3536 3390 l
-3536 3391 l
-3385 3391 l
-3384 3391 m
-3537 3391 l
-3537 3392 l
-3384 3392 l
-3383 3392 m
-3537 3392 l
-3537 3393 l
-3383 3393 l
-3382 3393 m
-3538 3393 l
-3538 3394 l
-3382 3394 l
-3381 3394 m
-3539 3394 l
-3539 3395 l
-3381 3395 l
-3381 3395 m
-3540 3395 l
-3540 3396 l
-3381 3396 l
-3381 3396 m
-3541 3396 l
-3541 3397 l
-3381 3397 l
-3382 3397 m
-3541 3397 l
-3541 3398 l
-3382 3398 l
-3383 3398 m
-3542 3398 l
-3542 3399 l
-3383 3399 l
-3384 3399 m
-3543 3399 l
-3543 3400 l
-3384 3400 l
-3385 3400 m
-3544 3400 l
-3544 3401 l
-3385 3401 l
-3385 3401 m
-3545 3401 l
-3545 3402 l
-3385 3402 l
-3386 3402 m
-3546 3402 l
-3546 3403 l
-3386 3403 l
-3387 3403 m
-3546 3403 l
-3546 3404 l
-3387 3404 l
-3388 3404 m
-3547 3404 l
-3547 3405 l
-3388 3405 l
-3389 3405 m
-3548 3405 l
-3548 3406 l
-3389 3406 l
-3390 3406 m
-3549 3406 l
-3549 3407 l
-3390 3407 l
-3390 3407 m
-3550 3407 l
-3550 3408 l
-3390 3408 l
-3391 3408 m
-3551 3408 l
-3551 3409 l
-3391 3409 l
-3392 3409 m
-3551 3409 l
-3551 3410 l
-3392 3410 l
-3393 3410 m
-3552 3410 l
-3552 3411 l
-3393 3411 l
-3394 3411 m
-3553 3411 l
-3553 3412 l
-3394 3412 l
-3395 3412 m
-3554 3412 l
-3554 3413 l
-3395 3413 l
-3395 3413 m
-3555 3413 l
-3555 3414 l
-3395 3414 l
-3396 3414 m
-3555 3414 l
-3555 3415 l
-3396 3415 l
-3397 3415 m
-3556 3415 l
-3556 3416 l
-3397 3416 l
-3398 3416 m
-3557 3416 l
-3557 3417 l
-3398 3417 l
-3399 3417 m
-3558 3417 l
-3558 3418 l
-3399 3418 l
-3400 3418 m
-3559 3418 l
-3559 3419 l
-3400 3419 l
-3400 3419 m
-3560 3419 l
-3560 3420 l
-3400 3420 l
-3401 3420 m
-3560 3420 l
-3560 3421 l
-3401 3421 l
-3402 3421 m
-3561 3421 l
-3561 3422 l
-3402 3422 l
-3403 3422 m
-3562 3422 l
-3562 3423 l
-3403 3423 l
-3404 3423 m
-3563 3423 l
-3563 3424 l
-3404 3424 l
-3405 3424 m
-3564 3424 l
-3564 3425 l
-3405 3425 l
-3405 3425 m
-3565 3425 l
-3565 3426 l
-3405 3426 l
-3406 3426 m
-3565 3426 l
-3565 3427 l
-3406 3427 l
-3407 3427 m
-3566 3427 l
-3566 3428 l
-3407 3428 l
-3408 3428 m
-3567 3428 l
-3567 3429 l
-3408 3429 l
-3409 3429 m
-3568 3429 l
-3568 3430 l
-3409 3430 l
-3410 3430 m
-3569 3430 l
-3569 3432 l
-3410 3432 l
-3411 3432 m
-3570 3432 l
-3570 3433 l
-3411 3433 l
-3412 3433 m
-3571 3433 l
-3571 3434 l
-3412 3434 l
-3413 3434 m
-3572 3434 l
-3572 3435 l
-3413 3435 l
-3414 3435 m
-3573 3435 l
-3573 3436 l
-3414 3436 l
-3414 3436 m
-3574 3436 l
-3574 3437 l
-3414 3437 l
-3415 3437 m
-3574 3437 l
-3574 3438 l
-3415 3438 l
-3416 3438 m
-3575 3438 l
-3575 3439 l
-3416 3439 l
-3417 3439 m
-3576 3439 l
-3576 3440 l
-3417 3440 l
-3418 3440 m
-3577 3440 l
-3577 3441 l
-3418 3441 l
-3419 3441 m
-3578 3441 l
-3578 3442 l
-3419 3442 l
-3419 3442 m
-3579 3442 l
-3579 3443 l
-3419 3443 l
-3420 3443 m
-3579 3443 l
-3579 3444 l
-3420 3444 l
-3421 3444 m
-3580 3444 l
-3580 3445 l
-3421 3445 l
-3422 3445 m
-3581 3445 l
-3581 3446 l
-3422 3446 l
-3423 3446 m
-3582 3446 l
-3582 3447 l
-3423 3447 l
-3424 3447 m
-3583 3447 l
-3583 3449 l
-3424 3449 l
-3425 3449 m
-3584 3449 l
-3584 3450 l
-3425 3450 l
-3426 3450 m
-3585 3450 l
-3585 3451 l
-3426 3451 l
-3427 3451 m
-3586 3451 l
-3586 3452 l
-3427 3452 l
-3428 3452 m
-3587 3452 l
-3587 3453 l
-3428 3453 l
-3429 3453 m
-3588 3453 l
-3588 3455 l
-3429 3455 l
-3430 3455 m
-3589 3455 l
-3589 3456 l
-3430 3456 l
-3431 3456 m
-3590 3456 l
-3590 3457 l
-3431 3457 l
-3432 3457 m
-3591 3457 l
-3591 3458 l
-3432 3458 l
-3433 3458 m
-3592 3458 l
-3592 3459 l
-3433 3459 l
-3434 3459 m
-3593 3459 l
-3593 3461 l
-3434 3461 l
-3435 3461 m
-3594 3461 l
-3594 3462 l
-3435 3462 l
-3436 3462 m
-3595 3462 l
-3595 3463 l
-3436 3463 l
-3437 3463 m
-3596 3463 l
-3596 3464 l
-3437 3464 l
-3438 3464 m
-3597 3464 l
-3597 3465 l
-3438 3465 l
-3439 3465 m
-3598 3465 l
-3598 3467 l
-3439 3467 l
-3440 3467 m
-3599 3467 l
-3599 3468 l
-3440 3468 l
-3441 3468 m
-3600 3468 l
-3600 3469 l
-3441 3469 l
-3442 3469 m
-3601 3469 l
-3601 3470 l
-3442 3470 l
-3443 3470 m
-3602 3470 l
-3602 3472 l
-3443 3472 l
-3444 3472 m
-3603 3472 l
-3603 3473 l
-3444 3473 l
-3445 3473 m
-3604 3473 l
-3604 3474 l
-3445 3474 l
-3446 3474 m
-3605 3474 l
-3605 3475 l
-3446 3475 l
-3447 3475 m
-3606 3475 l
-3606 3476 l
-3447 3476 l
-3448 3476 m
-3607 3476 l
-3607 3478 l
-3448 3478 l
-3449 3478 m
-3608 3478 l
-3608 3479 l
-3449 3479 l
-3450 3479 m
-3609 3479 l
-3609 3480 l
-3450 3480 l
-3451 3480 m
-3610 3480 l
-3610 3481 l
-3451 3481 l
-3452 3481 m
-3611 3481 l
-3611 3482 l
-3452 3482 l
-3453 3482 m
-3612 3482 l
-3612 3484 l
-3453 3484 l
-3454 3484 m
-3613 3484 l
-3613 3485 l
-3454 3485 l
-3455 3485 m
-3614 3485 l
-3614 3486 l
-3455 3486 l
-3456 3486 m
-3615 3486 l
-3615 3487 l
-3456 3487 l
-3457 3487 m
-3616 3487 l
-3616 3488 l
-3457 3488 l
-3458 3488 m
-3616 3488 l
-3616 3489 l
-3458 3489 l
-3458 3489 m
-3617 3489 l
-3617 3490 l
-3458 3490 l
-3459 3490 m
-3618 3490 l
-3618 3491 l
-3459 3491 l
-3460 3491 m
-3619 3491 l
-3619 3492 l
-3460 3492 l
-3461 3492 m
-3620 3492 l
-3620 3493 l
-3461 3493 l
-3462 3493 m
-3621 3493 l
-3621 3494 l
-3462 3494 l
-3463 3494 m
-3621 3494 l
-3621 3495 l
-3463 3495 l
-3463 3495 m
-3622 3495 l
-3622 3496 l
-3463 3496 l
-3464 3496 m
-3623 3496 l
-3623 3497 l
-3464 3497 l
-3465 3497 m
-3624 3497 l
-3624 3498 l
-3465 3498 l
-3466 3498 m
-3625 3498 l
-3625 3499 l
-3466 3499 l
-3467 3499 m
-3626 3499 l
-3626 3500 l
-3467 3500 l
-3468 3500 m
-3626 3500 l
-3626 3501 l
-3468 3501 l
-3468 3501 m
-3627 3501 l
-3627 3502 l
-3468 3502 l
-3469 3502 m
-3628 3502 l
-3628 3503 l
-3469 3503 l
-3470 3503 m
-3629 3503 l
-3629 3504 l
-3470 3504 l
-3471 3504 m
-3630 3504 l
-3630 3505 l
-3471 3505 l
-3472 3505 m
-3630 3505 l
-3630 3506 l
-3472 3506 l
-3473 3506 m
-3631 3506 l
-3631 3507 l
-3473 3507 l
-3473 3507 m
-3632 3507 l
-3632 3508 l
-3473 3508 l
-3474 3508 m
-3633 3508 l
-3633 3509 l
-3474 3509 l
-3475 3509 m
-3634 3509 l
-3634 3510 l
-3475 3510 l
-3476 3510 m
-3635 3510 l
-3635 3511 l
-3476 3511 l
-3477 3511 m
-3635 3511 l
-3635 3512 l
-3477 3512 l
-3477 3512 m
-3636 3512 l
-3636 3513 l
-3477 3513 l
-3478 3513 m
-3637 3513 l
-3637 3514 l
-3478 3514 l
-3479 3514 m
-3638 3514 l
-3638 3515 l
-3479 3515 l
-3480 3515 m
-3639 3515 l
-3639 3516 l
-3480 3516 l
-3481 3516 m
-3640 3516 l
-3640 3517 l
-3481 3517 l
-3482 3517 m
-3640 3517 l
-3640 3518 l
-3482 3518 l
-3482 3518 m
-3641 3518 l
-3641 3519 l
-3482 3519 l
-3483 3519 m
-3642 3519 l
-3642 3520 l
-3483 3520 l
-3484 3520 m
-3643 3520 l
-3643 3521 l
-3484 3521 l
-3485 3521 m
-3644 3521 l
-3644 3522 l
-3485 3522 l
-3486 3522 m
-3644 3522 l
-3644 3523 l
-3486 3523 l
-3487 3523 m
-3645 3523 l
-3645 3524 l
-3487 3524 l
-3487 3524 m
-3646 3524 l
-3646 3525 l
-3487 3525 l
-3488 3525 m
-3647 3525 l
-3647 3526 l
-3488 3526 l
-3489 3526 m
-3648 3526 l
-3648 3527 l
-3489 3527 l
-3490 3527 m
-3649 3527 l
-3649 3528 l
-3490 3528 l
-3491 3528 m
-3649 3528 l
-3649 3529 l
-3491 3529 l
-3492 3529 m
-3650 3529 l
-3650 3530 l
-3492 3530 l
-3492 3530 m
-3651 3530 l
-3651 3531 l
-3492 3531 l
-3493 3531 m
-3652 3531 l
-3652 3532 l
-3493 3532 l
-3494 3532 m
-3653 3532 l
-3653 3533 l
-3494 3533 l
-3495 3533 m
-3654 3533 l
-3654 3534 l
-3495 3534 l
-3496 3534 m
-3654 3534 l
-3654 3535 l
-3496 3535 l
-3497 3535 m
-3655 3535 l
-3655 3536 l
-3497 3536 l
-3497 3536 m
-3656 3536 l
-3656 3537 l
-3497 3537 l
-3498 3537 m
-3657 3537 l
-3657 3538 l
-3498 3538 l
-3499 3538 m
-3658 3538 l
-3658 3539 l
-3499 3539 l
-3500 3539 m
-3658 3539 l
-3658 3540 l
-3500 3540 l
-3501 3540 m
-3659 3540 l
-3659 3541 l
-3501 3541 l
-3502 3541 m
-3657 3541 l
-3657 3542 l
-3502 3542 l
-3502 3542 m
-3656 3542 l
-3656 3543 l
-3502 3543 l
-3503 3543 m
-3655 3543 l
-3655 3544 l
-3503 3544 l
-3504 3544 m
-3654 3544 l
-3654 3545 l
-3504 3545 l
-3505 3545 m
-3652 3545 l
-3652 3546 l
-3505 3546 l
-3506 3546 m
-3651 3546 l
-3651 3547 l
-3506 3547 l
-3506 3547 m
-3650 3547 l
-3650 3548 l
-3506 3548 l
-3507 3548 m
-3649 3548 l
-3649 3549 l
-3507 3549 l
-3508 3549 m
-3648 3549 l
-3648 3550 l
-3508 3550 l
-3509 3550 m
-3646 3550 l
-3646 3551 l
-3509 3551 l
-3510 3551 m
-3645 3551 l
-3645 3552 l
-3510 3552 l
-3511 3552 m
-3644 3552 l
-3644 3553 l
-3511 3553 l
-3511 3553 m
-3643 3553 l
-3643 3554 l
-3511 3554 l
-3512 3554 m
-3642 3554 l
-3642 3555 l
-3512 3555 l
-3513 3555 m
-3640 3555 l
-3640 3556 l
-3513 3556 l
-3514 3556 m
-3639 3556 l
-3639 3557 l
-3514 3557 l
-3515 3557 m
-3638 3557 l
-3638 3558 l
-3515 3558 l
-3516 3558 m
-3637 3558 l
-3637 3559 l
-3516 3559 l
-3516 3559 m
-3636 3559 l
-3636 3560 l
-3516 3560 l
-3517 3560 m
-3634 3560 l
-3634 3561 l
-3517 3561 l
-3518 3561 m
-3633 3561 l
-3633 3562 l
-3518 3562 l
-3519 3562 m
-3632 3562 l
-3632 3563 l
-3519 3563 l
-3520 3563 m
-3631 3563 l
-3631 3564 l
-3520 3564 l
-3521 3564 m
-3630 3564 l
-3630 3565 l
-3521 3565 l
-3521 3565 m
-3628 3565 l
-3628 3566 l
-3521 3566 l
-3522 3566 m
-3627 3566 l
-3627 3567 l
-3522 3567 l
-3523 3567 m
-3626 3567 l
-3626 3568 l
-3523 3568 l
-3524 3568 m
-3625 3568 l
-3625 3569 l
-3524 3569 l
-3525 3569 m
-3623 3569 l
-3623 3570 l
-3525 3570 l
-3526 3570 m
-3622 3570 l
-3622 3571 l
-3526 3571 l
-3526 3571 m
-3621 3571 l
-3621 3572 l
-3526 3572 l
-3527 3572 m
-3620 3572 l
-3620 3573 l
-3527 3573 l
-3528 3573 m
-3619 3573 l
-3619 3574 l
-3528 3574 l
-3529 3574 m
-3617 3574 l
-3617 3575 l
-3529 3575 l
-3530 3575 m
-3616 3575 l
-3616 3576 l
-3530 3576 l
-3531 3576 m
-3615 3576 l
-3615 3577 l
-3531 3577 l
-3531 3577 m
-3614 3577 l
-3614 3578 l
-3531 3578 l
-3532 3578 m
-3613 3578 l
-3613 3579 l
-3532 3579 l
-3533 3579 m
-3611 3579 l
-3611 3580 l
-3533 3580 l
-3534 3580 m
-3610 3580 l
-3610 3581 l
-3534 3581 l
-3535 3581 m
-3609 3581 l
-3609 3582 l
-3535 3582 l
-3535 3582 m
-3608 3582 l
-3608 3583 l
-3535 3583 l
-3536 3583 m
-3607 3583 l
-3607 3584 l
-3536 3584 l
-3537 3584 m
-3605 3584 l
-3605 3585 l
-3537 3585 l
-3538 3585 m
-3604 3585 l
-3604 3586 l
-3538 3586 l
-3539 3586 m
-3603 3586 l
-3603 3587 l
-3539 3587 l
-3540 3587 m
-3602 3587 l
-3602 3588 l
-3540 3588 l
-3540 3588 m
-3601 3588 l
-3601 3589 l
-3540 3589 l
-3541 3589 m
-3599 3589 l
-3599 3590 l
-3541 3590 l
-3542 3590 m
-3598 3590 l
-3598 3591 l
-3542 3591 l
-3543 3591 m
-3597 3591 l
-3597 3592 l
-3543 3592 l
-3544 3592 m
-3596 3592 l
-3596 3593 l
-3544 3593 l
-3545 3593 m
-3594 3593 l
-3594 3594 l
-3545 3594 l
-3545 3594 m
-3593 3594 l
-3593 3595 l
-3545 3595 l
-3546 3595 m
-3592 3595 l
-3592 3596 l
-3546 3596 l
-3547 3596 m
-3591 3596 l
-3591 3597 l
-3547 3597 l
-3548 3597 m
-3590 3597 l
-3590 3598 l
-3548 3598 l
-3549 3598 m
-3588 3598 l
-3588 3599 l
-3549 3599 l
-3550 3599 m
-3587 3599 l
-3587 3600 l
-3550 3600 l
-3550 3600 m
-3586 3600 l
-3586 3601 l
-3550 3601 l
-3551 3601 m
-3585 3601 l
-3585 3602 l
-3551 3602 l
-3552 3602 m
-3584 3602 l
-3584 3603 l
-3552 3603 l
-3553 3603 m
-3582 3603 l
-3582 3604 l
-3553 3604 l
-3554 3604 m
-3581 3604 l
-3581 3605 l
-3554 3605 l
-3555 3605 m
-3580 3605 l
-3580 3606 l
-3555 3606 l
-3555 3606 m
-3579 3606 l
-3579 3607 l
-3555 3607 l
-3556 3607 m
-3578 3607 l
-3578 3608 l
-3556 3608 l
-3557 3608 m
-3576 3608 l
-3576 3609 l
-3557 3609 l
-3558 3609 m
-3575 3609 l
-3575 3610 l
-3558 3610 l
-3559 3610 m
-3574 3610 l
-3574 3611 l
-3559 3611 l
-3560 3611 m
-3573 3611 l
-3573 3612 l
-3560 3612 l
-3560 3612 m
-3572 3612 l
-3572 3613 l
-3560 3613 l
-3561 3613 m
-3570 3613 l
-3570 3614 l
-3561 3614 l
-3562 3614 m
-3569 3614 l
-3569 3615 l
-3562 3615 l
-3563 3615 m
-3568 3615 l
-3568 3616 l
-3563 3616 l
-3564 3616 m
-3567 3616 l
-3567 3617 l
-3564 3617 l
-Y
-3474.6 3317.5 m
-3381 3395 l
-3565 3617 l
-3658 3540 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3446 3368 m
-3494 3426 l
-S
-3518 3515 m
-3509 3517 l
-3498 3510 l
-3492 3503 l
-3488 3491 l
-3492 3476 l
-3505 3460 l
-3522 3447 l
-3537 3439 l
-3549 3440 l
-3560 3447 l
-3563 3451 l
-3567 3463 l
-3566 3475 l
-3559 3486 l
-3556 3488 l
-3544 3493 l
-3532 3492 l
-3521 3485 l
-3518 3482 l
-3513 3470 l
-3515 3458 l
-3522 3447 l
-S
-3543 3564 m
-3538 3552 l
-3542 3538 l
-3556 3521 l
-3566 3513 l
-3584 3503 l
-3599 3502 l
-3611 3509 l
-3616 3515 l
-3621 3527 l
-3616 3542 l
-3603 3558 l
-3593 3566 l
-3574 3576 l
-3559 3578 l
-3548 3571 l
-3543 3564 l
-S
-1 g
-3809 3828 m
-3815 3828 l
-3815 3829 l
-3809 3829 l
-3806 3829 m
-3816 3829 l
-3816 3830 l
-3806 3830 l
-3803 3830 m
-3816 3830 l
-3816 3831 l
-3803 3831 l
-3799 3831 m
-3816 3831 l
-3816 3832 l
-3799 3832 l
-3796 3832 m
-3816 3832 l
-3816 3833 l
-3796 3833 l
-3793 3833 m
-3817 3833 l
-3817 3834 l
-3793 3834 l
-3789 3834 m
-3817 3834 l
-3817 3835 l
-3789 3835 l
-3786 3835 m
-3817 3835 l
-3817 3836 l
-3786 3836 l
-3782 3836 m
-3818 3836 l
-3818 3837 l
-3782 3837 l
-3779 3837 m
-3818 3837 l
-3818 3838 l
-3779 3838 l
-3776 3838 m
-3818 3838 l
-3818 3839 l
-3776 3839 l
-3772 3839 m
-3819 3839 l
-3819 3840 l
-3772 3840 l
-3769 3840 m
-3819 3840 l
-3819 3841 l
-3769 3841 l
-3765 3841 m
-3819 3841 l
-3819 3842 l
-3765 3842 l
-3762 3842 m
-3819 3842 l
-3819 3843 l
-3762 3843 l
-3759 3843 m
-3820 3843 l
-3820 3844 l
-3759 3844 l
-3755 3844 m
-3820 3844 l
-3820 3845 l
-3755 3845 l
-3752 3845 m
-3820 3845 l
-3820 3846 l
-3752 3846 l
-3748 3846 m
-3821 3846 l
-3821 3847 l
-3748 3847 l
-3745 3847 m
-3821 3847 l
-3821 3848 l
-3745 3848 l
-3742 3848 m
-3821 3848 l
-3821 3849 l
-3742 3849 l
-3738 3849 m
-3822 3849 l
-3822 3850 l
-3738 3850 l
-3735 3850 m
-3822 3850 l
-3822 3851 l
-3735 3851 l
-3731 3851 m
-3822 3851 l
-3822 3852 l
-3731 3852 l
-3728 3852 m
-3822 3852 l
-3822 3853 l
-3728 3853 l
-3725 3853 m
-3823 3853 l
-3823 3854 l
-3725 3854 l
-3721 3854 m
-3823 3854 l
-3823 3855 l
-3721 3855 l
-3718 3855 m
-3823 3855 l
-3823 3856 l
-3718 3856 l
-3714 3856 m
-3824 3856 l
-3824 3857 l
-3714 3857 l
-3711 3857 m
-3824 3857 l
-3824 3858 l
-3711 3858 l
-3708 3858 m
-3824 3858 l
-3824 3859 l
-3708 3859 l
-3704 3859 m
-3825 3859 l
-3825 3860 l
-3704 3860 l
-3701 3860 m
-3825 3860 l
-3825 3861 l
-3701 3861 l
-3698 3861 m
-3825 3861 l
-3825 3862 l
-3698 3862 l
-3698 3862 m
-3825 3862 l
-3825 3863 l
-3698 3863 l
-3698 3863 m
-3826 3863 l
-3826 3866 l
-3698 3866 l
-3699 3866 m
-3827 3866 l
-3827 3869 l
-3699 3869 l
-3700 3869 m
-3828 3869 l
-3828 3873 l
-3700 3873 l
-3701 3873 m
-3829 3873 l
-3829 3876 l
-3701 3876 l
-3702 3876 m
-3830 3876 l
-3830 3879 l
-3702 3879 l
-3703 3879 m
-3831 3879 l
-3831 3883 l
-3703 3883 l
-3704 3883 m
-3832 3883 l
-3832 3886 l
-3704 3886 l
-3705 3886 m
-3833 3886 l
-3833 3889 l
-3705 3889 l
-3706 3889 m
-3834 3889 l
-3834 3893 l
-3706 3893 l
-3707 3893 m
-3835 3893 l
-3835 3896 l
-3707 3896 l
-3708 3896 m
-3836 3896 l
-3836 3899 l
-3708 3899 l
-3709 3899 m
-3837 3899 l
-3837 3903 l
-3709 3903 l
-3710 3903 m
-3838 3903 l
-3838 3906 l
-3710 3906 l
-3711 3906 m
-3839 3906 l
-3839 3909 l
-3711 3909 l
-3712 3909 m
-3840 3909 l
-3840 3913 l
-3712 3913 l
-3713 3913 m
-3841 3913 l
-3841 3916 l
-3713 3916 l
-3714 3916 m
-3842 3916 l
-3842 3919 l
-3714 3919 l
-3715 3919 m
-3842 3919 l
-3842 3920 l
-3715 3920 l
-3715 3920 m
-3843 3920 l
-3843 3923 l
-3715 3923 l
-3716 3923 m
-3844 3923 l
-3844 3926 l
-3716 3926 l
-3717 3926 m
-3845 3926 l
-3845 3929 l
-3717 3929 l
-3718 3929 m
-3845 3929 l
-3845 3930 l
-3718 3930 l
-3718 3930 m
-3846 3930 l
-3846 3933 l
-3718 3933 l
-3719 3933 m
-3847 3933 l
-3847 3936 l
-3719 3936 l
-3720 3936 m
-3848 3936 l
-3848 3939 l
-3720 3939 l
-3721 3939 m
-3848 3939 l
-3848 3940 l
-3721 3940 l
-3721 3940 m
-3849 3940 l
-3849 3943 l
-3721 3943 l
-3722 3943 m
-3850 3943 l
-3850 3946 l
-3722 3946 l
-3723 3946 m
-3851 3946 l
-3851 3949 l
-3723 3949 l
-3724 3949 m
-3851 3949 l
-3851 3950 l
-3724 3950 l
-3724 3950 m
-3852 3950 l
-3852 3953 l
-3724 3953 l
-3725 3953 m
-3853 3953 l
-3853 3956 l
-3725 3956 l
-3726 3956 m
-3854 3956 l
-3854 3959 l
-3726 3959 l
-3727 3959 m
-3854 3959 l
-3854 3960 l
-3727 3960 l
-3727 3960 m
-3855 3960 l
-3855 3963 l
-3727 3963 l
-3728 3963 m
-3856 3963 l
-3856 3966 l
-3728 3966 l
-3729 3966 m
-3857 3966 l
-3857 3969 l
-3729 3969 l
-3730 3969 m
-3857 3969 l
-3857 3970 l
-3730 3970 l
-3730 3970 m
-3858 3970 l
-3858 3973 l
-3730 3973 l
-3731 3973 m
-3859 3973 l
-3859 3976 l
-3731 3976 l
-3732 3976 m
-3860 3976 l
-3860 3979 l
-3732 3979 l
-3733 3979 m
-3860 3979 l
-3860 3980 l
-3733 3980 l
-3733 3980 m
-3861 3980 l
-3861 3983 l
-3733 3983 l
-3734 3983 m
-3862 3983 l
-3862 3986 l
-3734 3986 l
-3735 3986 m
-3863 3986 l
-3863 3989 l
-3735 3989 l
-3736 3989 m
-3863 3989 l
-3863 3990 l
-3736 3990 l
-3736 3990 m
-3864 3990 l
-3864 3993 l
-3736 3993 l
-3737 3993 m
-3865 3993 l
-3865 3996 l
-3737 3996 l
-3738 3996 m
-3866 3996 l
-3866 3999 l
-3738 3999 l
-3739 3999 m
-3866 3999 l
-3866 4000 l
-3739 4000 l
-3739 4000 m
-3867 4000 l
-3867 4003 l
-3739 4003 l
-3740 4003 m
-3868 4003 l
-3868 4006 l
-3740 4006 l
-3741 4006 m
-3869 4006 l
-3869 4009 l
-3741 4009 l
-3742 4009 m
-3869 4009 l
-3869 4010 l
-3742 4010 l
-3742 4010 m
-3870 4010 l
-3870 4013 l
-3742 4013 l
-3743 4013 m
-3871 4013 l
-3871 4016 l
-3743 4016 l
-3744 4016 m
-3871 4016 l
-3871 4017 l
-3744 4017 l
-3744 4017 m
-3872 4017 l
-3872 4019 l
-3744 4019 l
-3745 4019 m
-3872 4019 l
-3872 4020 l
-3745 4020 l
-3745 4020 m
-3873 4020 l
-3873 4023 l
-3745 4023 l
-3746 4023 m
-3874 4023 l
-3874 4026 l
-3746 4026 l
-3747 4026 m
-3874 4026 l
-3874 4027 l
-3747 4027 l
-3747 4027 m
-3875 4027 l
-3875 4029 l
-3747 4029 l
-3748 4029 m
-3875 4029 l
-3875 4030 l
-3748 4030 l
-3748 4030 m
-3876 4030 l
-3876 4033 l
-3748 4033 l
-3749 4033 m
-3877 4033 l
-3877 4036 l
-3749 4036 l
-3750 4036 m
-3877 4036 l
-3877 4037 l
-3750 4037 l
-3750 4037 m
-3878 4037 l
-3878 4039 l
-3750 4039 l
-3751 4039 m
-3878 4039 l
-3878 4040 l
-3751 4040 l
-3751 4040 m
-3879 4040 l
-3879 4043 l
-3751 4043 l
-3752 4043 m
-3880 4043 l
-3880 4046 l
-3752 4046 l
-3753 4046 m
-3880 4046 l
-3880 4047 l
-3753 4047 l
-3753 4047 m
-3881 4047 l
-3881 4049 l
-3753 4049 l
-3754 4049 m
-3881 4049 l
-3881 4050 l
-3754 4050 l
-3754 4050 m
-3882 4050 l
-3882 4053 l
-3754 4053 l
-3755 4053 m
-3883 4053 l
-3883 4056 l
-3755 4056 l
-3756 4056 m
-3883 4056 l
-3883 4057 l
-3756 4057 l
-3756 4057 m
-3884 4057 l
-3884 4059 l
-3756 4059 l
-3757 4059 m
-3884 4059 l
-3884 4060 l
-3757 4060 l
-3757 4060 m
-3885 4060 l
-3885 4063 l
-3757 4063 l
-3758 4063 m
-3886 4063 l
-3886 4066 l
-3758 4066 l
-3759 4066 m
-3886 4066 l
-3886 4067 l
-3759 4067 l
-3759 4067 m
-3887 4067 l
-3887 4069 l
-3759 4069 l
-3760 4069 m
-3887 4069 l
-3887 4070 l
-3760 4070 l
-3760 4070 m
-3888 4070 l
-3888 4073 l
-3760 4073 l
-3761 4073 m
-3889 4073 l
-3889 4076 l
-3761 4076 l
-3762 4076 m
-3889 4076 l
-3889 4077 l
-3762 4077 l
-3762 4077 m
-3890 4077 l
-3890 4079 l
-3762 4079 l
-3763 4079 m
-3890 4079 l
-3890 4080 l
-3763 4080 l
-3763 4080 m
-3891 4080 l
-3891 4083 l
-3763 4083 l
-3764 4083 m
-3892 4083 l
-3892 4086 l
-3764 4086 l
-3765 4086 m
-3892 4086 l
-3892 4087 l
-3765 4087 l
-3765 4087 m
-3893 4087 l
-3893 4089 l
-3765 4089 l
-3766 4089 m
-3893 4089 l
-3893 4090 l
-3766 4090 l
-3766 4090 m
-3894 4090 l
-3894 4093 l
-3766 4093 l
-3767 4093 m
-3895 4093 l
-3895 4096 l
-3767 4096 l
-3768 4096 m
-3895 4096 l
-3895 4097 l
-3768 4097 l
-3768 4097 m
-3896 4097 l
-3896 4099 l
-3768 4099 l
-3769 4099 m
-3896 4099 l
-3896 4100 l
-3769 4100 l
-3769 4100 m
-3897 4100 l
-3897 4103 l
-3769 4103 l
-3770 4103 m
-3897 4103 l
-3897 4104 l
-3770 4104 l
-3770 4104 m
-3897 4104 l
-3897 4105 l
-3770 4105 l
-3770 4105 m
-3894 4105 l
-3894 4106 l
-3770 4106 l
-3771 4106 m
-3891 4106 l
-3891 4107 l
-3771 4107 l
-3771 4107 m
-3888 4107 l
-3888 4108 l
-3771 4108 l
-3771 4108 m
-3884 4108 l
-3884 4109 l
-3771 4109 l
-3772 4109 m
-3881 4109 l
-3881 4110 l
-3772 4110 l
-3772 4110 m
-3878 4110 l
-3878 4111 l
-3772 4111 l
-3772 4111 m
-3874 4111 l
-3874 4112 l
-3772 4112 l
-3772 4112 m
-3871 4112 l
-3871 4113 l
-3772 4113 l
-3773 4113 m
-3868 4113 l
-3868 4114 l
-3773 4114 l
-3773 4114 m
-3864 4114 l
-3864 4115 l
-3773 4115 l
-3773 4115 m
-3861 4115 l
-3861 4116 l
-3773 4116 l
-3774 4116 m
-3858 4116 l
-3858 4117 l
-3774 4117 l
-3774 4117 m
-3854 4117 l
-3854 4118 l
-3774 4118 l
-3774 4118 m
-3851 4118 l
-3851 4119 l
-3774 4119 l
-3775 4119 m
-3848 4119 l
-3848 4120 l
-3775 4120 l
-3775 4120 m
-3844 4120 l
-3844 4121 l
-3775 4121 l
-3775 4121 m
-3841 4121 l
-3841 4122 l
-3775 4122 l
-3775 4122 m
-3838 4122 l
-3838 4123 l
-3775 4123 l
-3776 4123 m
-3835 4123 l
-3835 4124 l
-3776 4124 l
-3776 4124 m
-3831 4124 l
-3831 4125 l
-3776 4125 l
-3776 4125 m
-3828 4125 l
-3828 4126 l
-3776 4126 l
-3777 4126 m
-3825 4126 l
-3825 4127 l
-3777 4127 l
-3777 4127 m
-3821 4127 l
-3821 4128 l
-3777 4128 l
-3777 4128 m
-3818 4128 l
-3818 4129 l
-3777 4129 l
-3778 4129 m
-3815 4129 l
-3815 4130 l
-3778 4130 l
-3778 4130 m
-3811 4130 l
-3811 4131 l
-3778 4131 l
-3778 4131 m
-3808 4131 l
-3808 4132 l
-3778 4132 l
-3778 4132 m
-3805 4132 l
-3805 4133 l
-3778 4133 l
-3779 4133 m
-3801 4133 l
-3801 4134 l
-3779 4134 l
-3779 4134 m
-3798 4134 l
-3798 4135 l
-3779 4135 l
-3779 4135 m
-3795 4135 l
-3795 4136 l
-3779 4136 l
-3780 4136 m
-3791 4136 l
-3791 4137 l
-3780 4137 l
-3780 4137 m
-3788 4137 l
-3788 4138 l
-3780 4138 l
-3780 4138 m
-3785 4138 l
-3785 4139 l
-3780 4139 l
-Y
-3814.4 3827.7 m
-3698 3862 l
-3781 4139 l
-3897 4104 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3768 3863 m
-3790 3935 l
-S
-3753 3986 m
-3766 4030 l
-3791 3996 l
-3794 4008 l
-3801 4015 l
-3806 4018 l
-3819 4018 l
-3827 4016 l
-3838 4008 l
-3843 3998 l
-3844 3985 l
-3840 3973 l
-3833 3962 l
-3827 3959 l
-3818 3957 l
-S
-3781 4082 m
-3782 4069 l
-3791 4057 l
-3810 4047 l
-3822 4043 l
-3843 4041 l
-3858 4046 l
-3865 4057 l
-3868 4065 l
-3867 4078 l
-3858 4089 l
-3839 4099 l
-3827 4103 l
-3806 4105 l
-3791 4101 l
-3784 4090 l
-3781 4082 l
-S
-1 g
-3582 5053 m
-3585 5053 l
-3585 5054 l
-3582 5054 l
-3581 5054 m
-3586 5054 l
-3586 5055 l
-3581 5055 l
-3580 5055 m
-3587 5055 l
-3587 5056 l
-3580 5056 l
-3579 5056 m
-3588 5056 l
-3588 5057 l
-3579 5057 l
-3578 5057 m
-3590 5057 l
-3590 5058 l
-3578 5058 l
-3578 5058 m
-3591 5058 l
-3591 5059 l
-3578 5059 l
-3577 5059 m
-3592 5059 l
-3592 5060 l
-3577 5060 l
-3576 5060 m
-3593 5060 l
-3593 5061 l
-3576 5061 l
-3575 5061 m
-3594 5061 l
-3594 5062 l
-3575 5062 l
-3574 5062 m
-3596 5062 l
-3596 5063 l
-3574 5063 l
-3573 5063 m
-3597 5063 l
-3597 5064 l
-3573 5064 l
-3573 5064 m
-3598 5064 l
-3598 5065 l
-3573 5065 l
-3572 5065 m
-3599 5065 l
-3599 5066 l
-3572 5066 l
-3571 5066 m
-3600 5066 l
-3600 5067 l
-3571 5067 l
-3570 5067 m
-3602 5067 l
-3602 5068 l
-3570 5068 l
-3569 5068 m
-3603 5068 l
-3603 5069 l
-3569 5069 l
-3568 5069 m
-3604 5069 l
-3604 5070 l
-3568 5070 l
-3568 5070 m
-3605 5070 l
-3605 5071 l
-3568 5071 l
-3567 5071 m
-3607 5071 l
-3607 5072 l
-3567 5072 l
-3566 5072 m
-3608 5072 l
-3608 5073 l
-3566 5073 l
-3565 5073 m
-3609 5073 l
-3609 5074 l
-3565 5074 l
-3564 5074 m
-3610 5074 l
-3610 5075 l
-3564 5075 l
-3563 5075 m
-3611 5075 l
-3611 5076 l
-3563 5076 l
-3563 5076 m
-3613 5076 l
-3613 5077 l
-3563 5077 l
-3562 5077 m
-3614 5077 l
-3614 5078 l
-3562 5078 l
-3561 5078 m
-3615 5078 l
-3615 5079 l
-3561 5079 l
-3560 5079 m
-3616 5079 l
-3616 5080 l
-3560 5080 l
-3559 5080 m
-3617 5080 l
-3617 5081 l
-3559 5081 l
-3558 5081 m
-3619 5081 l
-3619 5082 l
-3558 5082 l
-3558 5082 m
-3620 5082 l
-3620 5083 l
-3558 5083 l
-3557 5083 m
-3621 5083 l
-3621 5084 l
-3557 5084 l
-3556 5084 m
-3622 5084 l
-3622 5085 l
-3556 5085 l
-3555 5085 m
-3624 5085 l
-3624 5086 l
-3555 5086 l
-3554 5086 m
-3625 5086 l
-3625 5087 l
-3554 5087 l
-3553 5087 m
-3626 5087 l
-3626 5088 l
-3553 5088 l
-3553 5088 m
-3627 5088 l
-3627 5089 l
-3553 5089 l
-3552 5089 m
-3628 5089 l
-3628 5090 l
-3552 5090 l
-3551 5090 m
-3630 5090 l
-3630 5091 l
-3551 5091 l
-3550 5091 m
-3631 5091 l
-3631 5092 l
-3550 5092 l
-3549 5092 m
-3632 5092 l
-3632 5093 l
-3549 5093 l
-3548 5093 m
-3633 5093 l
-3633 5094 l
-3548 5094 l
-3548 5094 m
-3634 5094 l
-3634 5095 l
-3548 5095 l
-3547 5095 m
-3636 5095 l
-3636 5096 l
-3547 5096 l
-3546 5096 m
-3637 5096 l
-3637 5097 l
-3546 5097 l
-3545 5097 m
-3638 5097 l
-3638 5098 l
-3545 5098 l
-3544 5098 m
-3639 5098 l
-3639 5099 l
-3544 5099 l
-3544 5099 m
-3641 5099 l
-3641 5100 l
-3544 5100 l
-3543 5100 m
-3642 5100 l
-3642 5101 l
-3543 5101 l
-3542 5101 m
-3643 5101 l
-3643 5102 l
-3542 5102 l
-3541 5102 m
-3644 5102 l
-3644 5103 l
-3541 5103 l
-3540 5103 m
-3645 5103 l
-3645 5104 l
-3540 5104 l
-3539 5104 m
-3647 5104 l
-3647 5105 l
-3539 5105 l
-3539 5105 m
-3648 5105 l
-3648 5106 l
-3539 5106 l
-3538 5106 m
-3649 5106 l
-3649 5107 l
-3538 5107 l
-3537 5107 m
-3650 5107 l
-3650 5108 l
-3537 5108 l
-3536 5108 m
-3651 5108 l
-3651 5109 l
-3536 5109 l
-3535 5109 m
-3653 5109 l
-3653 5110 l
-3535 5110 l
-3534 5110 m
-3654 5110 l
-3654 5111 l
-3534 5111 l
-3534 5111 m
-3655 5111 l
-3655 5112 l
-3534 5112 l
-3533 5112 m
-3656 5112 l
-3656 5113 l
-3533 5113 l
-3532 5113 m
-3658 5113 l
-3658 5114 l
-3532 5114 l
-3531 5114 m
-3659 5114 l
-3659 5115 l
-3531 5115 l
-3530 5115 m
-3660 5115 l
-3660 5116 l
-3530 5116 l
-3529 5116 m
-3661 5116 l
-3661 5117 l
-3529 5117 l
-3529 5117 m
-3662 5117 l
-3662 5118 l
-3529 5118 l
-3528 5118 m
-3664 5118 l
-3664 5119 l
-3528 5119 l
-3527 5119 m
-3665 5119 l
-3665 5120 l
-3527 5120 l
-3526 5120 m
-3666 5120 l
-3666 5121 l
-3526 5121 l
-3525 5121 m
-3667 5121 l
-3667 5122 l
-3525 5122 l
-3524 5122 m
-3668 5122 l
-3668 5123 l
-3524 5123 l
-3524 5123 m
-3670 5123 l
-3670 5124 l
-3524 5124 l
-3523 5124 m
-3671 5124 l
-3671 5125 l
-3523 5125 l
-3522 5125 m
-3672 5125 l
-3672 5126 l
-3522 5126 l
-3521 5126 m
-3673 5126 l
-3673 5127 l
-3521 5127 l
-3520 5127 m
-3675 5127 l
-3675 5128 l
-3520 5128 l
-3519 5128 m
-3676 5128 l
-3676 5129 l
-3519 5129 l
-3519 5129 m
-3677 5129 l
-3677 5130 l
-3519 5130 l
-3518 5130 m
-3677 5130 l
-3677 5131 l
-3518 5131 l
-3517 5131 m
-3676 5131 l
-3676 5132 l
-3517 5132 l
-3516 5132 m
-3676 5132 l
-3676 5133 l
-3516 5133 l
-3515 5133 m
-3675 5133 l
-3675 5134 l
-3515 5134 l
-3514 5134 m
-3674 5134 l
-3674 5135 l
-3514 5135 l
-3514 5135 m
-3673 5135 l
-3673 5136 l
-3514 5136 l
-3513 5136 m
-3672 5136 l
-3672 5137 l
-3513 5137 l
-3512 5137 m
-3671 5137 l
-3671 5138 l
-3512 5138 l
-3511 5138 m
-3671 5138 l
-3671 5139 l
-3511 5139 l
-3510 5139 m
-3670 5139 l
-3670 5140 l
-3510 5140 l
-3509 5140 m
-3669 5140 l
-3669 5141 l
-3509 5141 l
-3509 5141 m
-3668 5141 l
-3668 5142 l
-3509 5142 l
-3508 5142 m
-3667 5142 l
-3667 5143 l
-3508 5143 l
-3507 5143 m
-3666 5143 l
-3666 5144 l
-3507 5144 l
-3506 5144 m
-3666 5144 l
-3666 5145 l
-3506 5145 l
-3505 5145 m
-3665 5145 l
-3665 5146 l
-3505 5146 l
-3505 5146 m
-3664 5146 l
-3664 5147 l
-3505 5147 l
-3504 5147 m
-3663 5147 l
-3663 5148 l
-3504 5148 l
-3503 5148 m
-3662 5148 l
-3662 5149 l
-3503 5149 l
-3502 5149 m
-3661 5149 l
-3661 5150 l
-3502 5150 l
-3501 5150 m
-3661 5150 l
-3661 5151 l
-3501 5151 l
-3500 5151 m
-3660 5151 l
-3660 5152 l
-3500 5152 l
-3500 5152 m
-3659 5152 l
-3659 5153 l
-3500 5153 l
-3499 5153 m
-3658 5153 l
-3658 5154 l
-3499 5154 l
-3498 5154 m
-3657 5154 l
-3657 5155 l
-3498 5155 l
-3497 5155 m
-3656 5155 l
-3656 5156 l
-3497 5156 l
-3496 5156 m
-3656 5156 l
-3656 5157 l
-3496 5157 l
-3495 5157 m
-3655 5157 l
-3655 5158 l
-3495 5158 l
-3495 5158 m
-3654 5158 l
-3654 5159 l
-3495 5159 l
-3494 5159 m
-3653 5159 l
-3653 5160 l
-3494 5160 l
-3493 5160 m
-3652 5160 l
-3652 5161 l
-3493 5161 l
-3492 5161 m
-3651 5161 l
-3651 5162 l
-3492 5162 l
-3491 5162 m
-3651 5162 l
-3651 5163 l
-3491 5163 l
-3490 5163 m
-3650 5163 l
-3650 5164 l
-3490 5164 l
-3490 5164 m
-3649 5164 l
-3649 5165 l
-3490 5165 l
-3489 5165 m
-3648 5165 l
-3648 5166 l
-3489 5166 l
-3488 5166 m
-3647 5166 l
-3647 5167 l
-3488 5167 l
-3487 5167 m
-3647 5167 l
-3647 5168 l
-3487 5168 l
-3486 5168 m
-3646 5168 l
-3646 5169 l
-3486 5169 l
-3485 5169 m
-3645 5169 l
-3645 5170 l
-3485 5170 l
-3485 5170 m
-3644 5170 l
-3644 5171 l
-3485 5171 l
-3484 5171 m
-3643 5171 l
-3643 5172 l
-3484 5172 l
-3483 5172 m
-3642 5172 l
-3642 5173 l
-3483 5173 l
-3482 5173 m
-3642 5173 l
-3642 5174 l
-3482 5174 l
-3481 5174 m
-3641 5174 l
-3641 5175 l
-3481 5175 l
-3480 5175 m
-3640 5175 l
-3640 5176 l
-3480 5176 l
-3480 5176 m
-3639 5176 l
-3639 5177 l
-3480 5177 l
-3479 5177 m
-3638 5177 l
-3638 5178 l
-3479 5178 l
-3478 5178 m
-3637 5178 l
-3637 5179 l
-3478 5179 l
-3477 5179 m
-3637 5179 l
-3637 5180 l
-3477 5180 l
-3476 5180 m
-3636 5180 l
-3636 5181 l
-3476 5181 l
-3475 5181 m
-3635 5181 l
-3635 5182 l
-3475 5182 l
-3475 5182 m
-3634 5182 l
-3634 5183 l
-3475 5183 l
-3474 5183 m
-3633 5183 l
-3633 5184 l
-3474 5184 l
-3473 5184 m
-3632 5184 l
-3632 5185 l
-3473 5185 l
-3472 5185 m
-3632 5185 l
-3632 5186 l
-3472 5186 l
-3471 5186 m
-3631 5186 l
-3631 5187 l
-3471 5187 l
-3470 5187 m
-3630 5187 l
-3630 5188 l
-3470 5188 l
-3470 5188 m
-3629 5188 l
-3629 5189 l
-3470 5189 l
-3469 5189 m
-3628 5189 l
-3628 5190 l
-3469 5190 l
-3468 5190 m
-3627 5190 l
-3627 5191 l
-3468 5191 l
-3467 5191 m
-3627 5191 l
-3627 5192 l
-3467 5192 l
-3466 5192 m
-3626 5192 l
-3626 5193 l
-3466 5193 l
-3466 5193 m
-3625 5193 l
-3625 5194 l
-3466 5194 l
-3466 5194 m
-3624 5194 l
-3624 5195 l
-3466 5195 l
-3467 5195 m
-3623 5195 l
-3623 5196 l
-3467 5196 l
-3468 5196 m
-3622 5196 l
-3622 5197 l
-3468 5197 l
-3469 5197 m
-3622 5197 l
-3622 5198 l
-3469 5198 l
-3470 5198 m
-3621 5198 l
-3621 5199 l
-3470 5199 l
-3471 5199 m
-3620 5199 l
-3620 5200 l
-3471 5200 l
-3473 5200 m
-3619 5200 l
-3619 5201 l
-3473 5201 l
-3474 5201 m
-3618 5201 l
-3618 5202 l
-3474 5202 l
-3475 5202 m
-3618 5202 l
-3618 5203 l
-3475 5203 l
-3476 5203 m
-3617 5203 l
-3617 5204 l
-3476 5204 l
-3477 5204 m
-3616 5204 l
-3616 5205 l
-3477 5205 l
-3479 5205 m
-3615 5205 l
-3615 5206 l
-3479 5206 l
-3480 5206 m
-3614 5206 l
-3614 5207 l
-3480 5207 l
-3481 5207 m
-3613 5207 l
-3613 5208 l
-3481 5208 l
-3482 5208 m
-3613 5208 l
-3613 5209 l
-3482 5209 l
-3483 5209 m
-3612 5209 l
-3612 5210 l
-3483 5210 l
-3485 5210 m
-3611 5210 l
-3611 5211 l
-3485 5211 l
-3486 5211 m
-3610 5211 l
-3610 5212 l
-3486 5212 l
-3487 5212 m
-3609 5212 l
-3609 5213 l
-3487 5213 l
-3488 5213 m
-3608 5213 l
-3608 5214 l
-3488 5214 l
-3489 5214 m
-3608 5214 l
-3608 5215 l
-3489 5215 l
-3491 5215 m
-3607 5215 l
-3607 5216 l
-3491 5216 l
-3492 5216 m
-3606 5216 l
-3606 5217 l
-3492 5217 l
-3493 5217 m
-3605 5217 l
-3605 5218 l
-3493 5218 l
-3494 5218 m
-3604 5218 l
-3604 5219 l
-3494 5219 l
-3495 5219 m
-3603 5219 l
-3603 5220 l
-3495 5220 l
-3496 5220 m
-3603 5220 l
-3603 5221 l
-3496 5221 l
-3498 5221 m
-3602 5221 l
-3602 5222 l
-3498 5222 l
-3499 5222 m
-3601 5222 l
-3601 5223 l
-3499 5223 l
-3500 5223 m
-3600 5223 l
-3600 5224 l
-3500 5224 l
-3501 5224 m
-3599 5224 l
-3599 5225 l
-3501 5225 l
-3502 5225 m
-3598 5225 l
-3598 5226 l
-3502 5226 l
-3504 5226 m
-3598 5226 l
-3598 5227 l
-3504 5227 l
-3505 5227 m
-3597 5227 l
-3597 5228 l
-3505 5228 l
-3506 5228 m
-3596 5228 l
-3596 5229 l
-3506 5229 l
-3507 5229 m
-3595 5229 l
-3595 5230 l
-3507 5230 l
-3508 5230 m
-3594 5230 l
-3594 5231 l
-3508 5231 l
-3510 5231 m
-3593 5231 l
-3593 5232 l
-3510 5232 l
-3511 5232 m
-3593 5232 l
-3593 5233 l
-3511 5233 l
-3512 5233 m
-3592 5233 l
-3592 5234 l
-3512 5234 l
-3513 5234 m
-3591 5234 l
-3591 5235 l
-3513 5235 l
-3514 5235 m
-3590 5235 l
-3590 5236 l
-3514 5236 l
-3516 5236 m
-3589 5236 l
-3589 5237 l
-3516 5237 l
-3517 5237 m
-3589 5237 l
-3589 5238 l
-3517 5238 l
-3518 5238 m
-3588 5238 l
-3588 5239 l
-3518 5239 l
-3519 5239 m
-3587 5239 l
-3587 5240 l
-3519 5240 l
-3520 5240 m
-3586 5240 l
-3586 5241 l
-3520 5241 l
-3522 5241 m
-3585 5241 l
-3585 5242 l
-3522 5242 l
-3523 5242 m
-3584 5242 l
-3584 5243 l
-3523 5243 l
-3524 5243 m
-3584 5243 l
-3584 5244 l
-3524 5244 l
-3525 5244 m
-3583 5244 l
-3583 5245 l
-3525 5245 l
-3526 5245 m
-3582 5245 l
-3582 5246 l
-3526 5246 l
-3527 5246 m
-3581 5246 l
-3581 5247 l
-3527 5247 l
-3529 5247 m
-3580 5247 l
-3580 5248 l
-3529 5248 l
-3530 5248 m
-3579 5248 l
-3579 5249 l
-3530 5249 l
-3531 5249 m
-3579 5249 l
-3579 5250 l
-3531 5250 l
-3532 5250 m
-3578 5250 l
-3578 5251 l
-3532 5251 l
-3533 5251 m
-3577 5251 l
-3577 5252 l
-3533 5252 l
-3535 5252 m
-3576 5252 l
-3576 5253 l
-3535 5253 l
-3536 5253 m
-3575 5253 l
-3575 5254 l
-3536 5254 l
-3537 5254 m
-3574 5254 l
-3574 5255 l
-3537 5255 l
-3538 5255 m
-3574 5255 l
-3574 5256 l
-3538 5256 l
-3539 5256 m
-3573 5256 l
-3573 5257 l
-3539 5257 l
-3541 5257 m
-3572 5257 l
-3572 5258 l
-3541 5258 l
-3542 5258 m
-3571 5258 l
-3571 5259 l
-3542 5259 l
-3543 5259 m
-3570 5259 l
-3570 5260 l
-3543 5260 l
-3544 5260 m
-3569 5260 l
-3569 5261 l
-3544 5261 l
-3545 5261 m
-3569 5261 l
-3569 5262 l
-3545 5262 l
-3547 5262 m
-3568 5262 l
-3568 5263 l
-3547 5263 l
-3548 5263 m
-3567 5263 l
-3567 5264 l
-3548 5264 l
-3549 5264 m
-3566 5264 l
-3566 5265 l
-3549 5265 l
-3550 5265 m
-3565 5265 l
-3565 5266 l
-3550 5266 l
-3551 5266 m
-3564 5266 l
-3564 5267 l
-3551 5267 l
-3553 5267 m
-3564 5267 l
-3564 5268 l
-3553 5268 l
-3554 5268 m
-3563 5268 l
-3563 5269 l
-3554 5269 l
-3555 5269 m
-3562 5269 l
-3562 5270 l
-3555 5270 l
-3556 5270 m
-3561 5270 l
-3561 5271 l
-3556 5271 l
-3557 5271 m
-3560 5271 l
-3560 5272 l
-3557 5272 l
-Y
-3676.6 5130.1 m
-3583 5053 l
-3466 5194 l
-3559 5272 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3578 5086 m
-3548 5121 l
-3590 5123 l
-3582 5133 l
-3580 5142 l
-3580 5148 l
-3587 5159 l
-3594 5165 l
-3606 5169 l
-3618 5168 l
-3629 5161 l
-3637 5152 l
-3642 5139 l
-3641 5133 l
-3638 5125 l
-S
-3514 5163 m
-3525 5156 l
-3540 5158 l
-3559 5168 l
-3568 5176 l
-3582 5192 l
-3586 5207 l
-3581 5219 l
-3576 5226 l
-3565 5233 l
-3550 5231 l
-3531 5221 l
-3521 5213 l
-3508 5196 l
-3504 5182 l
-3508 5170 l
-3514 5163 l
-S
-1 g
-2996 5490 m
-3001 5490 l
-3001 5491 l
-2996 5491 l
-2992 5491 m
-3001 5491 l
-3001 5492 l
-2992 5492 l
-2989 5492 m
-3001 5492 l
-3001 5493 l
-2989 5493 l
-2985 5493 m
-3002 5493 l
-3002 5494 l
-2985 5494 l
-2982 5494 m
-3002 5494 l
-3002 5495 l
-2982 5495 l
-2978 5495 m
-3002 5495 l
-3002 5496 l
-2978 5496 l
-2975 5496 m
-3002 5496 l
-3002 5497 l
-2975 5497 l
-2971 5497 m
-3003 5497 l
-3003 5498 l
-2971 5498 l
-2968 5498 m
-3003 5498 l
-3003 5499 l
-2968 5499 l
-2964 5499 m
-3003 5499 l
-3003 5500 l
-2964 5500 l
-2961 5500 m
-3004 5500 l
-3004 5501 l
-2961 5501 l
-2957 5501 m
-3004 5501 l
-3004 5502 l
-2957 5502 l
-2954 5502 m
-3004 5502 l
-3004 5503 l
-2954 5503 l
-2950 5503 m
-3004 5503 l
-3004 5504 l
-2950 5504 l
-2947 5504 m
-3005 5504 l
-3005 5505 l
-2947 5505 l
-2943 5505 m
-3005 5505 l
-3005 5506 l
-2943 5506 l
-2939 5506 m
-3005 5506 l
-3005 5507 l
-2939 5507 l
-2936 5507 m
-3006 5507 l
-3006 5508 l
-2936 5508 l
-2932 5508 m
-3006 5508 l
-3006 5509 l
-2932 5509 l
-2929 5509 m
-3006 5509 l
-3006 5510 l
-2929 5510 l
-2925 5510 m
-3006 5510 l
-3006 5511 l
-2925 5511 l
-2922 5511 m
-3007 5511 l
-3007 5512 l
-2922 5512 l
-2918 5512 m
-3007 5512 l
-3007 5513 l
-2918 5513 l
-2915 5513 m
-3007 5513 l
-3007 5514 l
-2915 5514 l
-2911 5514 m
-3008 5514 l
-3008 5515 l
-2911 5515 l
-2908 5515 m
-3008 5515 l
-3008 5516 l
-2908 5516 l
-2904 5516 m
-3008 5516 l
-3008 5517 l
-2904 5517 l
-2901 5517 m
-3008 5517 l
-3008 5518 l
-2901 5518 l
-2897 5518 m
-3009 5518 l
-3009 5519 l
-2897 5519 l
-2894 5519 m
-3009 5519 l
-3009 5520 l
-2894 5520 l
-2890 5520 m
-3009 5520 l
-3009 5521 l
-2890 5521 l
-2887 5521 m
-3010 5521 l
-3010 5522 l
-2887 5522 l
-2883 5522 m
-3010 5522 l
-3010 5523 l
-2883 5523 l
-2879 5523 m
-3010 5523 l
-3010 5524 l
-2879 5524 l
-2876 5524 m
-3010 5524 l
-3010 5525 l
-2876 5525 l
-2872 5525 m
-3011 5525 l
-3011 5526 l
-2872 5526 l
-2869 5526 m
-3011 5526 l
-3011 5527 l
-2869 5527 l
-2865 5527 m
-3011 5527 l
-3011 5528 l
-2865 5528 l
-2862 5528 m
-3012 5528 l
-3012 5529 l
-2862 5529 l
-2858 5529 m
-3012 5529 l
-3012 5530 l
-2858 5530 l
-2855 5530 m
-3012 5530 l
-3012 5531 l
-2855 5531 l
-2851 5531 m
-3012 5531 l
-3012 5532 l
-2851 5532 l
-2848 5532 m
-3013 5532 l
-3013 5533 l
-2848 5533 l
-2844 5533 m
-3013 5533 l
-3013 5534 l
-2844 5534 l
-2841 5534 m
-3013 5534 l
-3013 5535 l
-2841 5535 l
-2837 5535 m
-3014 5535 l
-3014 5536 l
-2837 5536 l
-2834 5536 m
-3014 5536 l
-3014 5537 l
-2834 5537 l
-2830 5537 m
-3014 5537 l
-3014 5538 l
-2830 5538 l
-2827 5538 m
-3014 5538 l
-3014 5539 l
-2827 5539 l
-2827 5539 m
-3015 5539 l
-3015 5540 l
-2827 5540 l
-2827 5540 m
-3015 5540 l
-3015 5542 l
-2827 5542 l
-2827 5542 m
-3016 5542 l
-3016 5543 l
-2827 5543 l
-2828 5543 m
-3016 5543 l
-3016 5546 l
-2828 5546 l
-2828 5546 m
-3017 5546 l
-3017 5547 l
-2828 5547 l
-2829 5547 m
-3017 5547 l
-3017 5549 l
-2829 5549 l
-2829 5549 m
-3018 5549 l
-3018 5550 l
-2829 5550 l
-2830 5550 m
-3018 5550 l
-3018 5553 l
-2830 5553 l
-2830 5553 m
-3019 5553 l
-3019 5554 l
-2830 5554 l
-2831 5554 m
-3019 5554 l
-3019 5556 l
-2831 5556 l
-2831 5556 m
-3020 5556 l
-3020 5557 l
-2831 5557 l
-2832 5557 m
-3020 5557 l
-3020 5560 l
-2832 5560 l
-2832 5560 m
-3021 5560 l
-3021 5561 l
-2832 5561 l
-2833 5561 m
-3021 5561 l
-3021 5563 l
-2833 5563 l
-2833 5563 m
-3022 5563 l
-3022 5564 l
-2833 5564 l
-2834 5564 m
-3022 5564 l
-3022 5567 l
-2834 5567 l
-2834 5567 m
-3023 5567 l
-3023 5568 l
-2834 5568 l
-2835 5568 m
-3023 5568 l
-3023 5570 l
-2835 5570 l
-2835 5570 m
-3024 5570 l
-3024 5571 l
-2835 5571 l
-2836 5571 m
-3024 5571 l
-3024 5574 l
-2836 5574 l
-2836 5574 m
-3025 5574 l
-3025 5575 l
-2836 5575 l
-2837 5575 m
-3025 5575 l
-3025 5577 l
-2837 5577 l
-2837 5577 m
-3026 5577 l
-3026 5578 l
-2837 5578 l
-2838 5578 m
-3026 5578 l
-3026 5581 l
-2838 5581 l
-2838 5581 m
-3027 5581 l
-3027 5582 l
-2838 5582 l
-2839 5582 m
-3027 5582 l
-3027 5584 l
-2839 5584 l
-2839 5584 m
-3028 5584 l
-3028 5585 l
-2839 5585 l
-2840 5585 m
-3028 5585 l
-3028 5588 l
-2840 5588 l
-2840 5588 m
-3029 5588 l
-3029 5589 l
-2840 5589 l
-2841 5589 m
-3029 5589 l
-3029 5591 l
-2841 5591 l
-2841 5591 m
-3030 5591 l
-3030 5592 l
-2841 5592 l
-2842 5592 m
-3030 5592 l
-3030 5595 l
-2842 5595 l
-2842 5595 m
-3031 5595 l
-3031 5596 l
-2842 5596 l
-2843 5596 m
-3031 5596 l
-3031 5598 l
-2843 5598 l
-2843 5598 m
-3032 5598 l
-3032 5599 l
-2843 5599 l
-2844 5599 m
-3032 5599 l
-3032 5602 l
-2844 5602 l
-2844 5602 m
-3033 5602 l
-3033 5603 l
-2844 5603 l
-2845 5603 m
-3033 5603 l
-3033 5605 l
-2845 5605 l
-2845 5605 m
-3034 5605 l
-3034 5606 l
-2845 5606 l
-2846 5606 m
-3034 5606 l
-3034 5607 l
-2846 5607 l
-2846 5607 m
-3030 5607 l
-3030 5608 l
-2846 5608 l
-2846 5608 m
-3027 5608 l
-3027 5609 l
-2846 5609 l
-2846 5609 m
-3023 5609 l
-3023 5610 l
-2846 5610 l
-2847 5610 m
-3020 5610 l
-3020 5611 l
-2847 5611 l
-2847 5611 m
-3016 5611 l
-3016 5612 l
-2847 5612 l
-2847 5612 m
-3013 5612 l
-3013 5613 l
-2847 5613 l
-2848 5613 m
-3009 5613 l
-3009 5614 l
-2848 5614 l
-2848 5614 m
-3006 5614 l
-3006 5615 l
-2848 5615 l
-2848 5615 m
-3002 5615 l
-3002 5616 l
-2848 5616 l
-2848 5616 m
-2999 5616 l
-2999 5617 l
-2848 5617 l
-2849 5617 m
-2995 5617 l
-2995 5618 l
-2849 5618 l
-2849 5618 m
-2991 5618 l
-2991 5619 l
-2849 5619 l
-2849 5619 m
-2988 5619 l
-2988 5620 l
-2849 5620 l
-2850 5620 m
-2984 5620 l
-2984 5621 l
-2850 5621 l
-2850 5621 m
-2981 5621 l
-2981 5622 l
-2850 5622 l
-2850 5622 m
-2977 5622 l
-2977 5623 l
-2850 5623 l
-2850 5623 m
-2974 5623 l
-2974 5624 l
-2850 5624 l
-2851 5624 m
-2970 5624 l
-2970 5625 l
-2851 5625 l
-2851 5625 m
-2967 5625 l
-2967 5626 l
-2851 5626 l
-2851 5626 m
-2963 5626 l
-2963 5627 l
-2851 5627 l
-2852 5627 m
-2960 5627 l
-2960 5628 l
-2852 5628 l
-2852 5628 m
-2956 5628 l
-2956 5629 l
-2852 5629 l
-2852 5629 m
-2953 5629 l
-2953 5630 l
-2852 5630 l
-2852 5630 m
-2949 5630 l
-2949 5631 l
-2852 5631 l
-2853 5631 m
-2945 5631 l
-2945 5632 l
-2853 5632 l
-2853 5632 m
-2942 5632 l
-2942 5633 l
-2853 5633 l
-2853 5633 m
-2938 5633 l
-2938 5634 l
-2853 5634 l
-2854 5634 m
-2935 5634 l
-2935 5635 l
-2854 5635 l
-2854 5635 m
-2931 5635 l
-2931 5636 l
-2854 5636 l
-2854 5636 m
-2928 5636 l
-2928 5637 l
-2854 5637 l
-2854 5637 m
-2924 5637 l
-2924 5638 l
-2854 5638 l
-2855 5638 m
-2921 5638 l
-2921 5639 l
-2855 5639 l
-2855 5639 m
-2917 5639 l
-2917 5640 l
-2855 5640 l
-2855 5640 m
-2914 5640 l
-2914 5641 l
-2855 5641 l
-2856 5641 m
-2910 5641 l
-2910 5642 l
-2856 5642 l
-2856 5642 m
-2907 5642 l
-2907 5643 l
-2856 5643 l
-2856 5643 m
-2903 5643 l
-2903 5644 l
-2856 5644 l
-2856 5644 m
-2899 5644 l
-2899 5645 l
-2856 5645 l
-2857 5645 m
-2896 5645 l
-2896 5646 l
-2857 5646 l
-2857 5646 m
-2892 5646 l
-2892 5647 l
-2857 5647 l
-2857 5647 m
-2889 5647 l
-2889 5648 l
-2857 5648 l
-2858 5648 m
-2885 5648 l
-2885 5649 l
-2858 5649 l
-2858 5649 m
-2882 5649 l
-2882 5650 l
-2858 5650 l
-2858 5650 m
-2878 5650 l
-2878 5651 l
-2858 5651 l
-2858 5651 m
-2875 5651 l
-2875 5652 l
-2858 5652 l
-2859 5652 m
-2871 5652 l
-2871 5653 l
-2859 5653 l
-2859 5653 m
-2868 5653 l
-2868 5654 l
-2859 5654 l
-2859 5654 m
-2864 5654 l
-2864 5655 l
-2859 5655 l
-Y
-3033.1 5606.1 m
-3000 5490 l
-2827 5539 l
-2860 5655 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2940 5537 m
-2941 5528 l
-2952 5521 l
-2960 5518 l
-2973 5519 l
-2985 5529 l
-2995 5548 l
-3000 5568 l
-3001 5585 l
-2995 5595 l
-2984 5603 l
-2980 5604 l
-2967 5603 l
-2957 5597 l
-2949 5586 l
-2948 5582 l
-2949 5569 l
-2955 5559 l
-2965 5551 l
-2969 5550 l
-2983 5551 l
-2993 5557 l
-3000 5568 l
-S
-2884 5540 m
-2897 5541 l
-2909 5550 l
-2918 5569 l
-2922 5581 l
-2923 5603 l
-2919 5617 l
-2908 5624 l
-2900 5627 l
-2887 5626 l
-2875 5616 l
-2866 5597 l
-2862 5585 l
-2860 5564 l
-2865 5550 l
-2876 5542 l
-2884 5540 l
-S
-1 g
-1950 5410 m
-1955 5410 l
-1955 5411 l
-1950 5411 l
-1949 5411 m
-1957 5411 l
-1957 5412 l
-1949 5412 l
-1949 5412 m
-1960 5412 l
-1960 5413 l
-1949 5413 l
-1948 5413 m
-1962 5413 l
-1962 5414 l
-1948 5414 l
-1948 5414 m
-1965 5414 l
-1965 5415 l
-1948 5415 l
-1948 5415 m
-1967 5415 l
-1967 5416 l
-1948 5416 l
-1947 5416 m
-1970 5416 l
-1970 5417 l
-1947 5417 l
-1947 5417 m
-1972 5417 l
-1972 5418 l
-1947 5418 l
-1946 5418 m
-1975 5418 l
-1975 5419 l
-1946 5419 l
-1946 5419 m
-1977 5419 l
-1977 5420 l
-1946 5420 l
-1946 5420 m
-1980 5420 l
-1980 5421 l
-1946 5421 l
-1945 5421 m
-1982 5421 l
-1982 5422 l
-1945 5422 l
-1945 5422 m
-1985 5422 l
-1985 5423 l
-1945 5423 l
-1944 5423 m
-1987 5423 l
-1987 5424 l
-1944 5424 l
-1944 5424 m
-1990 5424 l
-1990 5425 l
-1944 5425 l
-1944 5425 m
-1992 5425 l
-1992 5426 l
-1944 5426 l
-1943 5426 m
-1995 5426 l
-1995 5427 l
-1943 5427 l
-1943 5427 m
-1997 5427 l
-1997 5428 l
-1943 5428 l
-1942 5428 m
-2000 5428 l
-2000 5429 l
-1942 5429 l
-1942 5429 m
-2002 5429 l
-2002 5430 l
-1942 5430 l
-1942 5430 m
-2004 5430 l
-2004 5431 l
-1942 5431 l
-1941 5431 m
-2007 5431 l
-2007 5432 l
-1941 5432 l
-1941 5432 m
-2009 5432 l
-2009 5433 l
-1941 5433 l
-1940 5433 m
-2012 5433 l
-2012 5434 l
-1940 5434 l
-1940 5434 m
-2014 5434 l
-2014 5435 l
-1940 5435 l
-1940 5435 m
-2017 5435 l
-2017 5436 l
-1940 5436 l
-1939 5436 m
-2019 5436 l
-2019 5437 l
-1939 5437 l
-1939 5437 m
-2022 5437 l
-2022 5438 l
-1939 5438 l
-1939 5438 m
-2024 5438 l
-2024 5439 l
-1939 5439 l
-1938 5439 m
-2027 5439 l
-2027 5440 l
-1938 5440 l
-1938 5440 m
-2029 5440 l
-2029 5441 l
-1938 5441 l
-1937 5441 m
-2032 5441 l
-2032 5442 l
-1937 5442 l
-1937 5442 m
-2034 5442 l
-2034 5443 l
-1937 5443 l
-1937 5443 m
-2037 5443 l
-2037 5444 l
-1937 5444 l
-1936 5444 m
-2039 5444 l
-2039 5445 l
-1936 5445 l
-1936 5445 m
-2042 5445 l
-2042 5446 l
-1936 5446 l
-1935 5446 m
-2044 5446 l
-2044 5447 l
-1935 5447 l
-1935 5447 m
-2047 5447 l
-2047 5448 l
-1935 5448 l
-1935 5448 m
-2049 5448 l
-2049 5449 l
-1935 5449 l
-1934 5449 m
-2052 5449 l
-2052 5450 l
-1934 5450 l
-1934 5450 m
-2054 5450 l
-2054 5451 l
-1934 5451 l
-1933 5451 m
-2057 5451 l
-2057 5452 l
-1933 5452 l
-1933 5452 m
-2059 5452 l
-2059 5453 l
-1933 5453 l
-1933 5453 m
-2062 5453 l
-2062 5454 l
-1933 5454 l
-1932 5454 m
-2064 5454 l
-2064 5455 l
-1932 5455 l
-1932 5455 m
-2067 5455 l
-2067 5456 l
-1932 5456 l
-1931 5456 m
-2069 5456 l
-2069 5457 l
-1931 5457 l
-1931 5457 m
-2072 5457 l
-2072 5458 l
-1931 5458 l
-1931 5458 m
-2074 5458 l
-2074 5459 l
-1931 5459 l
-1930 5459 m
-2077 5459 l
-2077 5460 l
-1930 5460 l
-1930 5460 m
-2079 5460 l
-2079 5461 l
-1930 5461 l
-1929 5461 m
-2082 5461 l
-2082 5462 l
-1929 5462 l
-1929 5462 m
-2084 5462 l
-2084 5463 l
-1929 5463 l
-1929 5463 m
-2087 5463 l
-2087 5464 l
-1929 5464 l
-1928 5464 m
-2089 5464 l
-2089 5465 l
-1928 5465 l
-1928 5465 m
-2092 5465 l
-2092 5466 l
-1928 5466 l
-1927 5466 m
-2094 5466 l
-2094 5467 l
-1927 5467 l
-1927 5467 m
-2097 5467 l
-2097 5468 l
-1927 5468 l
-1927 5468 m
-2099 5468 l
-2099 5469 l
-1927 5469 l
-1926 5469 m
-2102 5469 l
-2102 5470 l
-1926 5470 l
-1926 5470 m
-2104 5470 l
-2104 5471 l
-1926 5471 l
-1925 5471 m
-2107 5471 l
-2107 5472 l
-1925 5472 l
-1925 5472 m
-2109 5472 l
-2109 5473 l
-1925 5473 l
-1925 5473 m
-2112 5473 l
-2112 5474 l
-1925 5474 l
-1924 5474 m
-2114 5474 l
-2114 5475 l
-1924 5475 l
-1924 5475 m
-2117 5475 l
-2117 5476 l
-1924 5476 l
-1923 5476 m
-2119 5476 l
-2119 5477 l
-1923 5477 l
-1923 5477 m
-2122 5477 l
-2122 5478 l
-1923 5478 l
-1923 5478 m
-2121 5478 l
-2121 5479 l
-1923 5479 l
-1922 5479 m
-2121 5479 l
-2121 5481 l
-1922 5481 l
-1921 5481 m
-2120 5481 l
-2120 5483 l
-1921 5483 l
-1921 5483 m
-2119 5483 l
-2119 5484 l
-1921 5484 l
-1920 5484 m
-2119 5484 l
-2119 5486 l
-1920 5486 l
-1919 5486 m
-2118 5486 l
-2118 5488 l
-1919 5488 l
-1919 5488 m
-2117 5488 l
-2117 5489 l
-1919 5489 l
-1918 5489 m
-2117 5489 l
-2117 5491 l
-1918 5491 l
-1917 5491 m
-2116 5491 l
-2116 5493 l
-1917 5493 l
-1917 5493 m
-2115 5493 l
-2115 5494 l
-1917 5494 l
-1916 5494 m
-2115 5494 l
-2115 5496 l
-1916 5496 l
-1915 5496 m
-2114 5496 l
-2114 5498 l
-1915 5498 l
-1915 5498 m
-2113 5498 l
-2113 5499 l
-1915 5499 l
-1914 5499 m
-2113 5499 l
-2113 5501 l
-1914 5501 l
-1913 5501 m
-2112 5501 l
-2112 5503 l
-1913 5503 l
-1913 5503 m
-2111 5503 l
-2111 5504 l
-1913 5504 l
-1912 5504 m
-2111 5504 l
-2111 5506 l
-1912 5506 l
-1911 5506 m
-2110 5506 l
-2110 5508 l
-1911 5508 l
-1911 5508 m
-2109 5508 l
-2109 5509 l
-1911 5509 l
-1910 5509 m
-2109 5509 l
-2109 5511 l
-1910 5511 l
-1909 5511 m
-2108 5511 l
-2108 5513 l
-1909 5513 l
-1909 5513 m
-2107 5513 l
-2107 5514 l
-1909 5514 l
-1908 5514 m
-2107 5514 l
-2107 5516 l
-1908 5516 l
-1907 5516 m
-2106 5516 l
-2106 5518 l
-1907 5518 l
-1907 5518 m
-2105 5518 l
-2105 5519 l
-1907 5519 l
-1906 5519 m
-2105 5519 l
-2105 5521 l
-1906 5521 l
-1906 5521 m
-2104 5521 l
-2104 5522 l
-1906 5522 l
-1906 5522 m
-2104 5522 l
-2104 5523 l
-1906 5523 l
-1908 5523 m
-2103 5523 l
-2103 5524 l
-1908 5524 l
-1911 5524 m
-2103 5524 l
-2103 5525 l
-1911 5525 l
-1913 5525 m
-2103 5525 l
-2103 5526 l
-1913 5526 l
-1916 5526 m
-2102 5526 l
-2102 5527 l
-1916 5527 l
-1918 5527 m
-2102 5527 l
-2102 5528 l
-1918 5528 l
-1921 5528 m
-2101 5528 l
-2101 5529 l
-1921 5529 l
-1923 5529 m
-2101 5529 l
-2101 5530 l
-1923 5530 l
-1926 5530 m
-2101 5530 l
-2101 5531 l
-1926 5531 l
-1928 5531 m
-2100 5531 l
-2100 5532 l
-1928 5532 l
-1931 5532 m
-2100 5532 l
-2100 5533 l
-1931 5533 l
-1933 5533 m
-2099 5533 l
-2099 5534 l
-1933 5534 l
-1936 5534 m
-2099 5534 l
-2099 5535 l
-1936 5535 l
-1938 5535 m
-2099 5535 l
-2099 5536 l
-1938 5536 l
-1941 5536 m
-2098 5536 l
-2098 5537 l
-1941 5537 l
-1943 5537 m
-2098 5537 l
-2098 5538 l
-1943 5538 l
-1946 5538 m
-2097 5538 l
-2097 5539 l
-1946 5539 l
-1948 5539 m
-2097 5539 l
-2097 5540 l
-1948 5540 l
-1951 5540 m
-2097 5540 l
-2097 5541 l
-1951 5541 l
-1953 5541 m
-2096 5541 l
-2096 5542 l
-1953 5542 l
-1956 5542 m
-2096 5542 l
-2096 5543 l
-1956 5543 l
-1958 5543 m
-2095 5543 l
-2095 5544 l
-1958 5544 l
-1961 5544 m
-2095 5544 l
-2095 5545 l
-1961 5545 l
-1963 5545 m
-2095 5545 l
-2095 5546 l
-1963 5546 l
-1966 5546 m
-2094 5546 l
-2094 5547 l
-1966 5547 l
-1968 5547 m
-2094 5547 l
-2094 5548 l
-1968 5548 l
-1971 5548 m
-2093 5548 l
-2093 5549 l
-1971 5549 l
-1973 5549 m
-2093 5549 l
-2093 5550 l
-1973 5550 l
-1976 5550 m
-2093 5550 l
-2093 5551 l
-1976 5551 l
-1978 5551 m
-2092 5551 l
-2092 5552 l
-1978 5552 l
-1981 5552 m
-2092 5552 l
-2092 5553 l
-1981 5553 l
-1983 5553 m
-2091 5553 l
-2091 5554 l
-1983 5554 l
-1986 5554 m
-2091 5554 l
-2091 5555 l
-1986 5555 l
-1988 5555 m
-2091 5555 l
-2091 5556 l
-1988 5556 l
-1991 5556 m
-2090 5556 l
-2090 5557 l
-1991 5557 l
-1993 5557 m
-2090 5557 l
-2090 5558 l
-1993 5558 l
-1996 5558 m
-2089 5558 l
-2089 5559 l
-1996 5559 l
-1998 5559 m
-2089 5559 l
-2089 5560 l
-1998 5560 l
-2001 5560 m
-2089 5560 l
-2089 5561 l
-2001 5561 l
-2003 5561 m
-2088 5561 l
-2088 5562 l
-2003 5562 l
-2006 5562 m
-2088 5562 l
-2088 5563 l
-2006 5563 l
-2008 5563 m
-2087 5563 l
-2087 5564 l
-2008 5564 l
-2011 5564 m
-2087 5564 l
-2087 5565 l
-2011 5565 l
-2013 5565 m
-2087 5565 l
-2087 5566 l
-2013 5566 l
-2016 5566 m
-2086 5566 l
-2086 5567 l
-2016 5567 l
-2018 5567 m
-2086 5567 l
-2086 5568 l
-2018 5568 l
-2021 5568 m
-2085 5568 l
-2085 5569 l
-2021 5569 l
-2023 5569 m
-2085 5569 l
-2085 5570 l
-2023 5570 l
-2026 5570 m
-2085 5570 l
-2085 5571 l
-2026 5571 l
-2028 5571 m
-2084 5571 l
-2084 5572 l
-2028 5572 l
-2031 5572 m
-2084 5572 l
-2084 5573 l
-2031 5573 l
-2033 5573 m
-2083 5573 l
-2083 5574 l
-2033 5574 l
-2036 5574 m
-2083 5574 l
-2083 5575 l
-2036 5575 l
-2038 5575 m
-2083 5575 l
-2083 5576 l
-2038 5576 l
-2041 5576 m
-2082 5576 l
-2082 5577 l
-2041 5577 l
-2043 5577 m
-2082 5577 l
-2082 5578 l
-2043 5578 l
-2046 5578 m
-2081 5578 l
-2081 5579 l
-2046 5579 l
-2048 5579 m
-2081 5579 l
-2081 5580 l
-2048 5580 l
-2051 5580 m
-2081 5580 l
-2081 5581 l
-2051 5581 l
-2053 5581 m
-2080 5581 l
-2080 5582 l
-2053 5582 l
-2056 5582 m
-2080 5582 l
-2080 5583 l
-2056 5583 l
-2058 5583 m
-2079 5583 l
-2079 5584 l
-2058 5584 l
-2061 5584 m
-2079 5584 l
-2079 5585 l
-2061 5585 l
-2063 5585 m
-2079 5585 l
-2079 5586 l
-2063 5586 l
-2066 5586 m
-2078 5586 l
-2078 5587 l
-2066 5587 l
-2068 5587 m
-2078 5587 l
-2078 5588 l
-2068 5588 l
-2071 5588 m
-2077 5588 l
-2077 5589 l
-2071 5589 l
-2073 5589 m
-2077 5589 l
-2077 5590 l
-2073 5590 l
-Y
-1950.7 5409.6 m
-1906 5522 l
-2076 5590 l
-2121 5478 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1993 5507 m
-1993 5494 l
-1989 5483 l
-1979 5475 l
-1975 5473 l
-1962 5472 l
-1951 5477 l
-1942 5487 l
-1941 5491 l
-1940 5504 l
-1944 5515 l
-1955 5524 l
-1958 5525 l
-1972 5526 l
-1982 5521 l
-1993 5507 l
-2000 5488 l
-2004 5467 l
-2001 5452 l
-1991 5444 l
-1983 5441 l
-1970 5440 l
-1963 5446 l
-S
-2032 5555 m
-2022 5546 l
-2019 5531 l
-2023 5510 l
-2027 5499 l
-2039 5481 l
-2052 5472 l
-2065 5473 l
-2072 5476 l
-2083 5485 l
-2086 5500 l
-2082 5521 l
-2077 5532 l
-2065 5550 l
-2053 5559 l
-2040 5558 l
-2032 5555 l
-S
-1 g
-Y
-467.2 2211.2 m
-282 2211 l
-282 5715 l
-467 5715 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-307 2236 m
-412 2236 l
-S
-307 2236 m
-307 2301 l
-S
-357 2236 m
-357 2276 l
-S
-412 2236 m
-412 2301 l
-S
-357 2387 m
-347 2377 l
-342 2367 l
-342 2352 l
-347 2341 l
-357 2331 l
-372 2326 l
-382 2326 l
-397 2331 l
-407 2341 l
-412 2352 l
-412 2367 l
-407 2377 l
-397 2387 l
-S
-307 2422 m
-412 2422 l
-S
-307 2457 m
-312 2462 l
-307 2467 l
-302 2462 l
-307 2457 l
-S
-342 2462 m
-412 2462 l
-S
-342 2502 m
-447 2502 l
-S
-357 2502 m
-347 2512 l
-342 2522 l
-342 2537 l
-347 2547 l
-357 2557 l
-372 2562 l
-382 2562 l
-397 2557 l
-407 2547 l
-412 2537 l
-412 2522 l
-407 2512 l
-397 2502 l
-S
-307 2602 m
-392 2602 l
-407 2607 l
-412 2617 l
-412 2627 l
-S
-342 2587 m
-342 2622 l
-S
-307 2652 m
-312 2657 l
-307 2662 l
-302 2657 l
-307 2652 l
-S
-342 2657 m
-412 2657 l
-S
-357 2752 m
-347 2742 l
-342 2732 l
-342 2717 l
-347 2707 l
-357 2697 l
-372 2692 l
-382 2692 l
-397 2697 l
-407 2707 l
-412 2717 l
-412 2732 l
-407 2742 l
-397 2752 l
-S
-357 2923 m
-347 2913 l
-342 2903 l
-342 2888 l
-347 2878 l
-357 2868 l
-372 2863 l
-382 2863 l
-397 2868 l
-407 2878 l
-412 2888 l
-412 2903 l
-407 2913 l
-397 2923 l
-S
-342 2978 m
-347 2968 l
-357 2958 l
-372 2953 l
-382 2953 l
-397 2958 l
-407 2968 l
-412 2978 l
-412 2993 l
-407 3003 l
-397 3013 l
-382 3018 l
-372 3018 l
-357 3013 l
-347 3003 l
-342 2993 l
-342 2978 l
-S
-342 3073 m
-347 3063 l
-357 3053 l
-372 3048 l
-382 3048 l
-397 3053 l
-407 3063 l
-412 3073 l
-412 3088 l
-407 3098 l
-397 3108 l
-382 3113 l
-372 3113 l
-357 3108 l
-347 3098 l
-342 3088 l
-342 3073 l
-S
-342 3148 m
-412 3148 l
-S
-372 3148 m
-357 3153 l
-347 3163 l
-342 3174 l
-342 3189 l
-S
-307 3269 m
-412 3269 l
-S
-357 3269 m
-347 3259 l
-342 3249 l
-342 3234 l
-347 3224 l
-357 3214 l
-372 3209 l
-382 3209 l
-397 3214 l
-407 3224 l
-412 3234 l
-412 3249 l
-407 3259 l
-397 3269 l
-S
-307 3304 m
-312 3309 l
-307 3314 l
-302 3309 l
-307 3304 l
-S
-342 3309 m
-412 3309 l
-S
-342 3349 m
-412 3349 l
-S
-362 3349 m
-347 3364 l
-342 3374 l
-342 3389 l
-347 3399 l
-362 3404 l
-412 3404 l
-S
-342 3499 m
-412 3499 l
-S
-357 3499 m
-347 3489 l
-342 3479 l
-342 3464 l
-347 3454 l
-357 3444 l
-372 3439 l
-382 3439 l
-397 3444 l
-407 3454 l
-412 3464 l
-412 3479 l
-407 3489 l
-397 3499 l
-S
-307 3544 m
-392 3544 l
-407 3549 l
-412 3559 l
-412 3569 l
-S
-342 3529 m
-342 3564 l
-S
-372 3595 m
-372 3655 l
-362 3655 l
-352 3650 l
-347 3645 l
-342 3635 l
-342 3620 l
-347 3610 l
-357 3600 l
-372 3595 l
-382 3595 l
-397 3600 l
-407 3610 l
-412 3620 l
-412 3635 l
-407 3645 l
-397 3655 l
-S
-357 3740 m
-347 3735 l
-342 3720 l
-342 3705 l
-347 3690 l
-357 3685 l
-367 3690 l
-372 3700 l
-377 3725 l
-382 3735 l
-392 3740 l
-397 3740 l
-407 3735 l
-412 3720 l
-412 3705 l
-407 3690 l
-397 3685 l
-S
-342 3780 m
-347 3775 l
-352 3780 l
-347 3785 l
-342 3780 l
-S
-407 3785 m
-412 3780 l
-407 3775 l
-402 3780 l
-407 3785 l
-417 3785 l
-427 3780 l
-432 3775 l
-S
-342 3905 m
-412 3905 l
-S
-362 3905 m
-347 3920 l
-342 3930 l
-342 3945 l
-347 3955 l
-362 3960 l
-412 3960 l
-S
-362 3960 m
-347 3975 l
-342 3985 l
-342 4000 l
-347 4011 l
-362 4016 l
-412 4016 l
-S
-372 4051 m
-372 4111 l
-362 4111 l
-352 4106 l
-347 4101 l
-342 4091 l
-342 4076 l
-347 4066 l
-357 4056 l
-372 4051 l
-382 4051 l
-397 4056 l
-407 4066 l
-412 4076 l
-412 4091 l
-407 4101 l
-397 4111 l
-S
-342 4201 m
-412 4201 l
-S
-357 4201 m
-347 4191 l
-342 4181 l
-342 4166 l
-347 4156 l
-357 4146 l
-372 4141 l
-382 4141 l
-397 4146 l
-407 4156 l
-412 4166 l
-412 4181 l
-407 4191 l
-397 4201 l
-S
-342 4241 m
-412 4241 l
-S
-362 4241 m
-347 4256 l
-342 4266 l
-342 4281 l
-347 4291 l
-362 4296 l
-412 4296 l
-S
-372 4411 m
-372 4472 l
-362 4472 l
-352 4467 l
-347 4462 l
-342 4452 l
-342 4437 l
-347 4427 l
-357 4417 l
-372 4411 l
-382 4411 l
-397 4417 l
-407 4427 l
-412 4437 l
-412 4452 l
-407 4462 l
-397 4472 l
-S
-342 4562 m
-447 4562 l
-S
-357 4562 m
-347 4552 l
-342 4542 l
-342 4527 l
-347 4517 l
-357 4507 l
-372 4502 l
-382 4502 l
-397 4507 l
-407 4517 l
-412 4527 l
-412 4542 l
-407 4552 l
-397 4562 l
-S
-342 4602 m
-392 4602 l
-407 4607 l
-412 4617 l
-412 4632 l
-407 4642 l
-392 4657 l
-S
-342 4657 m
-412 4657 l
-S
-307 4692 m
-312 4697 l
-307 4702 l
-302 4697 l
-307 4692 l
-S
-342 4697 m
-412 4697 l
-S
-342 4737 m
-412 4737 l
-S
-362 4737 m
-347 4752 l
-342 4762 l
-342 4777 l
-347 4787 l
-362 4792 l
-412 4792 l
-S
-342 4853 m
-347 4843 l
-357 4833 l
-372 4827 l
-382 4827 l
-397 4833 l
-407 4843 l
-412 4853 l
-412 4868 l
-407 4878 l
-397 4888 l
-382 4893 l
-372 4893 l
-357 4888 l
-347 4878 l
-342 4868 l
-342 4853 l
-S
-342 4923 m
-412 4978 l
-S
-342 4978 m
-412 4923 l
-S
-307 5133 m
-387 5133 l
-402 5128 l
-407 5123 l
-412 5113 l
-412 5103 l
-407 5093 l
-402 5088 l
-387 5083 l
-377 5083 l
-S
-332 5173 m
-327 5173 l
-317 5178 l
-312 5183 l
-307 5193 l
-307 5213 l
-312 5223 l
-317 5228 l
-327 5233 l
-337 5233 l
-347 5228 l
-362 5218 l
-412 5168 l
-412 5238 l
-S
-307 5299 m
-312 5284 l
-327 5274 l
-352 5269 l
-367 5269 l
-392 5274 l
-407 5284 l
-412 5299 l
-412 5309 l
-407 5324 l
-392 5334 l
-367 5339 l
-352 5339 l
-327 5334 l
-312 5324 l
-307 5309 l
-307 5299 l
-S
-307 5399 m
-312 5384 l
-327 5374 l
-352 5369 l
-367 5369 l
-392 5374 l
-407 5384 l
-412 5399 l
-412 5409 l
-407 5424 l
-392 5434 l
-367 5439 l
-352 5439 l
-327 5434 l
-312 5424 l
-307 5409 l
-307 5399 l
-S
-307 5499 m
-312 5484 l
-327 5474 l
-352 5469 l
-367 5469 l
-392 5474 l
-407 5484 l
-412 5499 l
-412 5509 l
-407 5524 l
-392 5534 l
-367 5539 l
-352 5539 l
-327 5534 l
-312 5524 l
-307 5509 l
-307 5499 l
-S
-402 5579 m
-407 5574 l
-412 5579 l
-407 5584 l
-402 5579 l
-S
-307 5649 m
-312 5634 l
-327 5624 l
-352 5619 l
-367 5619 l
-392 5624 l
-407 5634 l
-412 5649 l
-412 5659 l
-407 5675 l
-392 5685 l
-367 5690 l
-352 5690 l
-327 5685 l
-312 5675 l
-307 5659 l
-307 5649 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/frontc.eps b/ast-5.3-1/sun211_figures/frontc.eps
deleted file mode 100644
index 668c667..0000000
--- a/ast-5.3-1/sun211_figures/frontc.eps
+++ /dev/null
@@ -1,14114 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 22 206 490 605
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:48:28
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-1 0 0 rg
-533.21 1777.32 4343.81 4343.81 re
-Y
-4877 3093 m
-4662 3178 l
-4355 3300 l
-4048 3421 l
-3740 3543 l
-3433 3665 l
-3126 3786 l
-2819 3908 l
-2512 4029 l
-2205 4151 l
-2203 4152 l
-2202 4152 l
-2200 4153 l
-2199 4154 l
-2197 4154 l
-2195 4155 l
-2194 4155 l
-2192 4156 l
-2191 4157 l
-2189 4157 l
-2188 4158 l
-2186 4159 l
-2184 4159 l
-2183 4160 l
-2181 4160 l
-2180 4161 l
-2178 4162 l
-2177 4162 l
-2175 4163 l
-2173 4164 l
-2172 4164 l
-2170 4165 l
-2169 4165 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-4059 1777 m
-4039 1803 l
-3834 2062 l
-3628 2321 l
-3423 2580 l
-3218 2839 l
-3013 3098 l
-2808 3357 l
-2602 3616 l
-2397 3875 l
-2192 4134 l
-2191 4135 l
-2190 4137 l
-2189 4138 l
-2188 4139 l
-2187 4141 l
-2186 4142 l
-2185 4143 l
-2184 4145 l
-2183 4146 l
-2182 4147 l
-2181 4149 l
-2180 4150 l
-2178 4151 l
-2177 4152 l
-2176 4154 l
-2175 4155 l
-2174 4156 l
-2173 4158 l
-2172 4159 l
-2171 4160 l
-2170 4162 l
-2169 4163 l
-2168 4164 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-2519 1777 m
-2510 1837 l
-2462 2164 l
-2414 2491 l
-2365 2818 l
-2317 3145 l
-2269 3472 l
-2221 3799 l
-2172 4125 l
-2172 4127 l
-2172 4129 l
-2172 4130 l
-2171 4132 l
-2171 4134 l
-2171 4135 l
-2171 4137 l
-2171 4139 l
-2170 4140 l
-2170 4142 l
-2170 4144 l
-2170 4146 l
-2169 4147 l
-2169 4149 l
-2169 4151 l
-2169 4152 l
-2168 4154 l
-2168 4156 l
-2168 4157 l
-2168 4159 l
-2167 4161 l
-2167 4162 l
-2167 4164 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1221 1777 m
-1300 1977 l
-1422 2284 l
-1543 2591 l
-1665 2899 l
-1786 3206 l
-1908 3513 l
-2030 3821 l
-2151 4128 l
-2152 4130 l
-2152 4131 l
-2153 4133 l
-2154 4134 l
-2154 4136 l
-2155 4137 l
-2156 4139 l
-2156 4140 l
-2157 4142 l
-2157 4144 l
-2158 4145 l
-2159 4147 l
-2159 4148 l
-2160 4150 l
-2161 4151 l
-2161 4153 l
-2162 4155 l
-2162 4156 l
-2163 4158 l
-2164 4159 l
-2164 4161 l
-2165 4162 l
-2166 4164 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 2871 m
-581 2909 l
-840 3114 l
-1099 3319 l
-1357 3525 l
-1616 3730 l
-1875 3935 l
-2134 4141 l
-2135 4142 l
-2137 4143 l
-2138 4144 l
-2139 4145 l
-2141 4146 l
-2142 4147 l
-2143 4148 l
-2145 4149 l
-2146 4150 l
-2147 4151 l
-2149 4152 l
-2150 4153 l
-2151 4154 l
-2153 4155 l
-2154 4156 l
-2155 4157 l
-2157 4158 l
-2158 4160 l
-2159 4161 l
-2160 4162 l
-2162 4163 l
-2163 4164 l
-2164 4165 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 3925 m
-818 3967 l
-1145 4015 l
-1472 4064 l
-1799 4112 l
-2126 4160 l
-2127 4161 l
-2129 4161 l
-2131 4161 l
-2132 4161 l
-2134 4162 l
-2136 4162 l
-2137 4162 l
-2139 4162 l
-2141 4163 l
-2142 4163 l
-2144 4163 l
-2146 4163 l
-2147 4164 l
-2149 4164 l
-2151 4164 l
-2152 4164 l
-2154 4165 l
-2156 4165 l
-2157 4165 l
-2159 4165 l
-2161 4165 l
-2162 4166 l
-2164 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 4813 m
-592 4790 l
-900 4668 l
-1207 4547 l
-1514 4425 l
-1821 4303 l
-2128 4182 l
-2130 4181 l
-2131 4180 l
-2133 4180 l
-2134 4179 l
-2136 4178 l
-2137 4178 l
-2139 4177 l
-2141 4177 l
-2142 4176 l
-2144 4175 l
-2145 4175 l
-2147 4174 l
-2148 4173 l
-2150 4173 l
-2152 4172 l
-2153 4172 l
-2155 4171 l
-2156 4170 l
-2158 4170 l
-2159 4169 l
-2161 4169 l
-2163 4168 l
-2164 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-618 6121 m
-705 6012 l
-910 5753 l
-1115 5494 l
-1320 5235 l
-1525 4976 l
-1730 4717 l
-1936 4458 l
-2141 4199 l
-2142 4197 l
-2143 4196 l
-2144 4195 l
-2145 4193 l
-2146 4192 l
-2147 4191 l
-2148 4189 l
-2149 4188 l
-2150 4187 l
-2151 4186 l
-2152 4184 l
-2153 4183 l
-2154 4182 l
-2155 4180 l
-2156 4179 l
-2158 4178 l
-2159 4176 l
-2160 4175 l
-2161 4174 l
-2162 4172 l
-2163 4171 l
-2164 4170 l
-2165 4168 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-S
-1878 6121 m
-1919 5842 l
-1967 5515 l
-2016 5188 l
-2064 4861 l
-2112 4534 l
-2160 4207 l
-2161 4206 l
-2161 4204 l
-2161 4202 l
-2161 4201 l
-2162 4199 l
-2162 4197 l
-2162 4196 l
-2162 4194 l
-2163 4192 l
-2163 4191 l
-2163 4189 l
-2163 4187 l
-2164 4186 l
-2164 4184 l
-2164 4182 l
-2164 4181 l
-2165 4179 l
-2165 4177 l
-2165 4176 l
-2165 4174 l
-2166 4172 l
-2166 4171 l
-2166 4169 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-S
-2940 6121 m
-2911 6049 l
-2790 5741 l
-2668 5434 l
-2546 5127 l
-2425 4819 l
-2303 4512 l
-2182 4205 l
-2181 4203 l
-2180 4202 l
-2180 4200 l
-2179 4198 l
-2179 4197 l
-2178 4195 l
-2177 4194 l
-2177 4192 l
-2176 4191 l
-2175 4189 l
-2175 4188 l
-2174 4186 l
-2174 4184 l
-2173 4183 l
-2172 4181 l
-2172 4180 l
-2171 4178 l
-2170 4177 l
-2170 4175 l
-2169 4173 l
-2169 4172 l
-2168 4170 l
-2167 4169 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2166 4166 l
-2166 4166 l
-S
-4631 6121 m
-4529 6040 l
-4270 5835 l
-4011 5629 l
-3752 5424 l
-3493 5219 l
-3234 5013 l
-2975 4808 l
-2717 4603 l
-2458 4397 l
-2199 4192 l
-2197 4191 l
-2196 4190 l
-2195 4189 l
-2194 4188 l
-2192 4187 l
-2191 4186 l
-2190 4185 l
-2188 4184 l
-2187 4183 l
-2186 4182 l
-2184 4180 l
-2183 4179 l
-2182 4178 l
-2180 4177 l
-2179 4176 l
-2178 4175 l
-2176 4174 l
-2175 4173 l
-2174 4172 l
-2172 4171 l
-2171 4170 l
-2170 4169 l
-2168 4168 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4166 l
-2166 4166 l
-S
-4877 4567 m
-4822 4559 l
-4495 4511 l
-4168 4462 l
-3841 4414 l
-3514 4366 l
-3188 4317 l
-2861 4269 l
-2534 4221 l
-2207 4172 l
-2206 4172 l
-2204 4172 l
-2202 4172 l
-2201 4171 l
-2199 4171 l
-2197 4171 l
-2196 4171 l
-2194 4170 l
-2192 4170 l
-2191 4170 l
-2189 4170 l
-2187 4169 l
-2186 4169 l
-2184 4169 l
-2182 4169 l
-2181 4168 l
-2179 4168 l
-2177 4168 l
-2176 4168 l
-2174 4167 l
-2172 4167 l
-2171 4167 l
-2169 4167 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-4877 2504 m
-4876 2503 l
-4872 2496 l
-4868 2489 l
-4864 2482 l
-4860 2476 l
-4855 2469 l
-4851 2462 l
-4847 2456 l
-4843 2449 l
-4838 2442 l
-4834 2436 l
-4830 2429 l
-4826 2423 l
-4821 2416 l
-4817 2409 l
-4812 2403 l
-4808 2396 l
-4804 2390 l
-4799 2383 l
-4795 2377 l
-4790 2370 l
-4786 2364 l
-4781 2357 l
-4777 2351 l
-4772 2344 l
-4768 2338 l
-4763 2331 l
-4759 2325 l
-4754 2318 l
-4750 2312 l
-4745 2306 l
-4740 2299 l
-4736 2293 l
-4731 2286 l
-4726 2280 l
-4722 2274 l
-4717 2267 l
-4712 2261 l
-4708 2255 l
-4703 2248 l
-4698 2242 l
-4693 2236 l
-4689 2230 l
-4684 2223 l
-4679 2217 l
-4674 2211 l
-4669 2205 l
-4664 2198 l
-4659 2192 l
-4655 2186 l
-4650 2180 l
-4645 2174 l
-4640 2168 l
-4635 2161 l
-4630 2155 l
-4625 2149 l
-4620 2143 l
-4615 2137 l
-4610 2131 l
-4605 2125 l
-4600 2119 l
-4595 2113 l
-4589 2107 l
-4584 2101 l
-4579 2095 l
-4574 2089 l
-4569 2083 l
-4564 2077 l
-4559 2071 l
-4553 2065 l
-4548 2059 l
-4543 2053 l
-4538 2047 l
-4532 2041 l
-4527 2036 l
-4522 2030 l
-4517 2024 l
-4511 2018 l
-4506 2012 l
-4501 2006 l
-4495 2001 l
-4490 1995 l
-4484 1989 l
-4479 1983 l
-4474 1978 l
-4468 1972 l
-4463 1966 l
-4457 1960 l
-4452 1955 l
-4446 1949 l
-4441 1943 l
-4435 1938 l
-4430 1932 l
-4424 1927 l
-4419 1921 l
-4413 1915 l
-4407 1910 l
-4402 1904 l
-4396 1899 l
-4391 1893 l
-4385 1888 l
-4379 1882 l
-4374 1877 l
-4368 1871 l
-4362 1866 l
-4357 1860 l
-4351 1855 l
-4345 1849 l
-4339 1844 l
-4334 1839 l
-4328 1833 l
-4322 1828 l
-4316 1823 l
-4310 1817 l
-4305 1812 l
-4299 1807 l
-4293 1801 l
-4287 1796 l
-4281 1791 l
-4275 1786 l
-4269 1780 l
-4266 1777 l
-S
-4675 6121 m
-4678 6117 l
-4683 6111 l
-4688 6104 l
-4693 6098 l
-4698 6092 l
-4702 6086 l
-4707 6079 l
-4712 6073 l
-4717 6067 l
-4721 6060 l
-4726 6054 l
-4731 6048 l
-4735 6041 l
-4740 6035 l
-4745 6028 l
-4749 6022 l
-4754 6016 l
-4758 6009 l
-4763 6003 l
-4767 5996 l
-4772 5990 l
-4776 5983 l
-4781 5977 l
-4785 5970 l
-4790 5964 l
-4794 5957 l
-4799 5951 l
-4803 5944 l
-4808 5938 l
-4812 5931 l
-4816 5925 l
-4821 5918 l
-4825 5911 l
-4829 5905 l
-4834 5898 l
-4838 5892 l
-4842 5885 l
-4846 5878 l
-4851 5872 l
-4855 5865 l
-4859 5858 l
-4863 5852 l
-4867 5845 l
-4872 5838 l
-4876 5831 l
-4877 5829 l
-S
-4854 3102 m
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3101 l
-4853 3101 l
-4853 3101 l
-4853 3100 l
-4853 3100 l
-4853 3099 l
-4853 3099 l
-4852 3098 l
-4852 3098 l
-4852 3097 l
-4852 3097 l
-4852 3096 l
-4851 3096 l
-4849 3089 l
-4846 3082 l
-4843 3076 l
-4841 3069 l
-4838 3063 l
-4835 3056 l
-4832 3049 l
-4830 3043 l
-4827 3036 l
-4824 3029 l
-4821 3023 l
-4818 3016 l
-4816 3010 l
-4813 3003 l
-4810 2997 l
-4807 2990 l
-4804 2983 l
-4801 2977 l
-4798 2970 l
-4795 2964 l
-4792 2957 l
-4789 2951 l
-4786 2944 l
-4783 2938 l
-4780 2931 l
-4777 2925 l
-4774 2918 l
-4771 2912 l
-4768 2905 l
-4764 2899 l
-4761 2893 l
-4758 2886 l
-4755 2880 l
-4752 2873 l
-4748 2867 l
-4745 2860 l
-4742 2854 l
-4739 2848 l
-4735 2841 l
-4732 2835 l
-4729 2829 l
-4726 2822 l
-4722 2816 l
-4719 2809 l
-4715 2803 l
-4712 2797 l
-4709 2791 l
-4705 2784 l
-4702 2778 l
-4698 2772 l
-4695 2765 l
-4691 2759 l
-4688 2753 l
-4684 2747 l
-4681 2740 l
-4677 2734 l
-4674 2728 l
-4670 2722 l
-4667 2715 l
-4663 2709 l
-4659 2703 l
-4656 2697 l
-4652 2691 l
-4648 2684 l
-4645 2678 l
-4641 2672 l
-4637 2666 l
-4634 2660 l
-4630 2654 l
-4626 2648 l
-4622 2642 l
-4619 2635 l
-4615 2629 l
-4611 2623 l
-4607 2617 l
-4603 2611 l
-4599 2605 l
-4596 2599 l
-4592 2593 l
-4588 2587 l
-4584 2581 l
-4580 2575 l
-4576 2569 l
-4572 2563 l
-4568 2557 l
-4564 2551 l
-4560 2545 l
-4556 2539 l
-4552 2533 l
-4548 2527 l
-4544 2522 l
-4540 2516 l
-4536 2510 l
-4531 2504 l
-4527 2498 l
-4523 2492 l
-4519 2486 l
-4515 2481 l
-4511 2475 l
-4506 2469 l
-4502 2463 l
-4498 2457 l
-4494 2452 l
-4489 2446 l
-4485 2440 l
-4481 2434 l
-4477 2428 l
-4472 2423 l
-4468 2417 l
-4464 2411 l
-4459 2406 l
-4455 2400 l
-4451 2394 l
-4446 2389 l
-4442 2383 l
-4437 2377 l
-4433 2372 l
-4428 2366 l
-4424 2360 l
-4419 2355 l
-4415 2349 l
-4410 2344 l
-4406 2338 l
-4401 2333 l
-4397 2327 l
-4392 2321 l
-4388 2316 l
-4383 2310 l
-4378 2305 l
-4374 2299 l
-4369 2294 l
-4365 2289 l
-4360 2283 l
-4355 2278 l
-4351 2272 l
-4346 2267 l
-4341 2261 l
-4336 2256 l
-4332 2251 l
-4327 2245 l
-4322 2240 l
-4317 2235 l
-4313 2229 l
-4308 2224 l
-4303 2219 l
-4298 2213 l
-4293 2208 l
-4288 2203 l
-4283 2197 l
-4279 2192 l
-4274 2187 l
-4269 2182 l
-4264 2177 l
-4259 2171 l
-4254 2166 l
-4249 2161 l
-4244 2156 l
-4239 2151 l
-4234 2146 l
-4229 2140 l
-4224 2135 l
-4219 2130 l
-4214 2125 l
-4209 2120 l
-4204 2115 l
-4199 2110 l
-4194 2105 l
-4188 2100 l
-4183 2095 l
-4178 2090 l
-4173 2085 l
-4168 2080 l
-4163 2075 l
-4157 2070 l
-4152 2065 l
-S
-4152 2065 m
-4147 2060 l
-4142 2055 l
-4137 2050 l
-4131 2045 l
-4126 2041 l
-4121 2036 l
-4115 2031 l
-4110 2026 l
-4105 2021 l
-4100 2016 l
-4094 2012 l
-4089 2007 l
-4083 2002 l
-4078 1997 l
-4073 1993 l
-4067 1988 l
-4062 1983 l
-4056 1978 l
-4051 1974 l
-4046 1969 l
-4040 1964 l
-4035 1960 l
-4029 1955 l
-4024 1951 l
-4018 1946 l
-4013 1941 l
-4007 1937 l
-4002 1932 l
-3996 1928 l
-3991 1923 l
-3985 1919 l
-3979 1914 l
-3974 1910 l
-3968 1905 l
-3963 1901 l
-3957 1896 l
-3951 1892 l
-3946 1887 l
-3940 1883 l
-3934 1879 l
-3929 1874 l
-3923 1870 l
-3917 1865 l
-3912 1861 l
-3906 1857 l
-3900 1852 l
-3894 1848 l
-3889 1844 l
-3883 1840 l
-3877 1835 l
-3871 1831 l
-3866 1827 l
-3860 1823 l
-3854 1818 l
-3848 1814 l
-3842 1810 l
-3836 1806 l
-3831 1802 l
-3825 1798 l
-3819 1794 l
-3813 1790 l
-3807 1785 l
-3801 1781 l
-3795 1777 l
-S
-4297 6121 m
-4298 6120 l
-4302 6115 l
-4307 6110 l
-4312 6105 l
-4317 6099 l
-4322 6094 l
-4326 6088 l
-4331 6083 l
-4336 6078 l
-4341 6072 l
-4345 6067 l
-4350 6062 l
-4355 6056 l
-4359 6051 l
-4364 6045 l
-4369 6040 l
-4373 6034 l
-4378 6029 l
-4383 6023 l
-4387 6018 l
-4392 6012 l
-4396 6007 l
-4401 6001 l
-4405 5996 l
-4410 5990 l
-4414 5985 l
-4419 5979 l
-4423 5973 l
-4428 5968 l
-4432 5962 l
-4437 5956 l
-4441 5951 l
-4446 5945 l
-4450 5940 l
-4454 5934 l
-4459 5928 l
-4463 5922 l
-4468 5917 l
-4472 5911 l
-4476 5905 l
-4480 5900 l
-4485 5894 l
-4489 5888 l
-4493 5882 l
-4498 5877 l
-4502 5871 l
-4506 5865 l
-4510 5859 l
-4514 5853 l
-4519 5847 l
-4523 5842 l
-4527 5836 l
-4531 5830 l
-4535 5824 l
-4539 5818 l
-4543 5812 l
-4547 5806 l
-4551 5800 l
-4555 5795 l
-4560 5789 l
-4564 5783 l
-4568 5777 l
-4572 5771 l
-4575 5765 l
-4579 5759 l
-4583 5753 l
-4587 5747 l
-4591 5741 l
-4595 5735 l
-4599 5729 l
-4603 5723 l
-4607 5717 l
-4611 5711 l
-4614 5704 l
-4618 5698 l
-4622 5692 l
-4626 5686 l
-4629 5680 l
-4633 5674 l
-4637 5668 l
-4641 5662 l
-4644 5656 l
-4648 5649 l
-4652 5643 l
-4655 5637 l
-4659 5631 l
-4663 5625 l
-4666 5619 l
-4670 5612 l
-4673 5606 l
-4677 5600 l
-4681 5594 l
-4684 5587 l
-4688 5581 l
-4691 5575 l
-4695 5569 l
-4698 5562 l
-4701 5556 l
-4705 5550 l
-4708 5543 l
-4712 5537 l
-4715 5531 l
-4718 5524 l
-4722 5518 l
-4725 5512 l
-4729 5505 l
-4732 5499 l
-4735 5493 l
-4738 5486 l
-4742 5480 l
-4745 5474 l
-4748 5467 l
-4751 5461 l
-4755 5454 l
-4758 5448 l
-4761 5441 l
-4764 5435 l
-4767 5429 l
-4770 5422 l
-4773 5416 l
-4777 5409 l
-4780 5403 l
-4783 5396 l
-4786 5390 l
-4789 5383 l
-4792 5377 l
-4795 5370 l
-4798 5364 l
-4801 5357 l
-4804 5351 l
-4807 5344 l
-4809 5337 l
-4812 5331 l
-4815 5324 l
-4818 5318 l
-4821 5311 l
-4824 5305 l
-4827 5298 l
-4829 5291 l
-4832 5285 l
-4835 5278 l
-4838 5271 l
-4840 5265 l
-4843 5258 l
-4846 5252 l
-4848 5245 l
-4851 5238 l
-4854 5232 l
-4856 5225 l
-4859 5218 l
-4862 5212 l
-4864 5205 l
-4867 5198 l
-4869 5191 l
-4872 5185 l
-4874 5178 l
-4877 5171 l
-4877 5171 l
-S
-4877 3162 m
-4877 3162 l
-4874 3155 l
-4872 3149 l
-4869 3142 l
-4867 3135 l
-4864 3129 l
-4862 3122 l
-4859 3115 l
-4856 3109 l
-4854 3102 l
-S
-4585 3208 m
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3207 l
-4584 3207 l
-4584 3206 l
-4584 3206 l
-4584 3205 l
-4584 3205 l
-4584 3205 l
-4583 3204 l
-4583 3204 l
-4583 3203 l
-4583 3203 l
-4581 3197 l
-4578 3191 l
-4576 3185 l
-4573 3179 l
-4571 3173 l
-4568 3167 l
-4566 3161 l
-4563 3155 l
-4561 3149 l
-4558 3143 l
-4556 3137 l
-4553 3131 l
-4551 3125 l
-4548 3119 l
-4545 3114 l
-4543 3108 l
-4540 3102 l
-4538 3096 l
-4535 3090 l
-4532 3084 l
-4529 3078 l
-4527 3072 l
-4524 3067 l
-4521 3061 l
-4519 3055 l
-4516 3049 l
-4513 3043 l
-4510 3037 l
-4507 3032 l
-4505 3026 l
-4502 3020 l
-4499 3014 l
-4496 3008 l
-4493 3003 l
-4490 2997 l
-4487 2991 l
-4484 2985 l
-4482 2980 l
-4479 2974 l
-4476 2968 l
-4473 2962 l
-4470 2957 l
-4467 2951 l
-4464 2945 l
-4461 2939 l
-4458 2934 l
-4454 2928 l
-4451 2922 l
-4448 2917 l
-4445 2911 l
-4442 2905 l
-4439 2900 l
-4436 2894 l
-4433 2889 l
-4429 2883 l
-4426 2877 l
-4423 2872 l
-4420 2866 l
-4417 2860 l
-4413 2855 l
-4410 2849 l
-4407 2844 l
-4404 2838 l
-4400 2833 l
-4397 2827 l
-4394 2822 l
-4390 2816 l
-4387 2811 l
-4384 2805 l
-4380 2800 l
-4377 2794 l
-4373 2789 l
-4370 2783 l
-4366 2778 l
-4363 2772 l
-4360 2767 l
-4356 2761 l
-4353 2756 l
-4349 2750 l
-4346 2745 l
-4342 2740 l
-4339 2734 l
-4335 2729 l
-4331 2723 l
-4328 2718 l
-4324 2713 l
-4321 2707 l
-4317 2702 l
-4313 2697 l
-4310 2691 l
-4306 2686 l
-4302 2681 l
-4299 2675 l
-4295 2670 l
-4291 2665 l
-4287 2660 l
-4284 2654 l
-4280 2649 l
-4276 2644 l
-4272 2639 l
-4269 2633 l
-4265 2628 l
-4261 2623 l
-4257 2618 l
-4253 2613 l
-4249 2607 l
-4246 2602 l
-4242 2597 l
-4238 2592 l
-4234 2587 l
-4230 2582 l
-4226 2577 l
-4222 2571 l
-4218 2566 l
-4214 2561 l
-4210 2556 l
-4206 2551 l
-4202 2546 l
-4198 2541 l
-4194 2536 l
-4190 2531 l
-4186 2526 l
-4182 2521 l
-4178 2516 l
-4174 2511 l
-4170 2506 l
-4166 2501 l
-4161 2496 l
-4157 2491 l
-4153 2486 l
-4149 2481 l
-4145 2476 l
-4141 2471 l
-4136 2467 l
-4132 2462 l
-4128 2457 l
-4124 2452 l
-4119 2447 l
-4115 2442 l
-4111 2437 l
-4107 2433 l
-4102 2428 l
-4098 2423 l
-4094 2418 l
-4089 2413 l
-4085 2409 l
-4081 2404 l
-4076 2399 l
-4072 2394 l
-4067 2390 l
-4063 2385 l
-4059 2380 l
-4054 2376 l
-4050 2371 l
-4045 2366 l
-4041 2362 l
-4036 2357 l
-4032 2352 l
-4027 2348 l
-4023 2343 l
-4018 2338 l
-4014 2334 l
-4009 2329 l
-4005 2325 l
-4000 2320 l
-3995 2316 l
-3991 2311 l
-3986 2307 l
-3982 2302 l
-3977 2298 l
-3972 2293 l
-3968 2289 l
-3963 2284 l
-3958 2280 l
-3954 2275 l
-S
-3954 2275 m
-3949 2271 l
-3944 2266 l
-3940 2262 l
-3935 2258 l
-3930 2253 l
-3925 2249 l
-3921 2244 l
-3916 2240 l
-3911 2236 l
-3906 2231 l
-3901 2227 l
-3897 2223 l
-3892 2218 l
-3887 2214 l
-3882 2210 l
-3877 2206 l
-3872 2201 l
-3867 2197 l
-3863 2193 l
-3858 2189 l
-3853 2185 l
-3848 2180 l
-3843 2176 l
-3838 2172 l
-3833 2168 l
-3828 2164 l
-3823 2160 l
-3818 2156 l
-3813 2152 l
-3808 2147 l
-3803 2143 l
-3798 2139 l
-3793 2135 l
-3788 2131 l
-3783 2127 l
-3778 2123 l
-3773 2119 l
-3768 2115 l
-3763 2111 l
-3758 2107 l
-3752 2103 l
-3747 2099 l
-3742 2096 l
-3737 2092 l
-3732 2088 l
-3727 2084 l
-3722 2080 l
-3716 2076 l
-3711 2072 l
-3706 2068 l
-3701 2065 l
-3696 2061 l
-3690 2057 l
-3685 2053 l
-3680 2049 l
-3675 2046 l
-3669 2042 l
-3664 2038 l
-3659 2035 l
-3654 2031 l
-3648 2027 l
-3643 2024 l
-3638 2020 l
-3632 2016 l
-3627 2013 l
-3622 2009 l
-3616 2005 l
-3611 2002 l
-3606 1998 l
-3600 1995 l
-3595 1991 l
-3589 1988 l
-3584 1984 l
-3579 1980 l
-3573 1977 l
-3568 1974 l
-3562 1970 l
-3557 1967 l
-3551 1963 l
-3546 1960 l
-3540 1956 l
-3535 1953 l
-3529 1949 l
-3524 1946 l
-3518 1943 l
-3513 1939 l
-3507 1936 l
-3502 1933 l
-3496 1929 l
-3491 1926 l
-3485 1923 l
-3480 1920 l
-3474 1916 l
-3468 1913 l
-3463 1910 l
-3457 1907 l
-3452 1903 l
-3446 1900 l
-3440 1897 l
-3435 1894 l
-3429 1891 l
-3424 1888 l
-3418 1885 l
-3412 1881 l
-3407 1878 l
-3401 1875 l
-3395 1872 l
-3390 1869 l
-3384 1866 l
-3378 1863 l
-3372 1860 l
-3367 1857 l
-3361 1854 l
-3355 1851 l
-3349 1848 l
-3344 1845 l
-3338 1842 l
-3332 1840 l
-3326 1837 l
-3321 1834 l
-3315 1831 l
-3309 1828 l
-3303 1825 l
-3297 1822 l
-3292 1820 l
-3286 1817 l
-3280 1814 l
-3274 1811 l
-3268 1809 l
-3262 1806 l
-3257 1803 l
-3251 1800 l
-3245 1798 l
-3239 1795 l
-3233 1792 l
-3227 1790 l
-3221 1787 l
-3215 1785 l
-3210 1782 l
-3204 1779 l
-3199 1777 l
-S
-1133 1777 m
-1133 1778 l
-1127 1780 l
-1121 1783 l
-1115 1785 l
-1109 1788 l
-1104 1791 l
-1098 1793 l
-1092 1796 l
-1086 1798 l
-1080 1801 l
-1074 1804 l
-1068 1807 l
-1062 1809 l
-1057 1812 l
-1051 1815 l
-1045 1818 l
-1039 1820 l
-1033 1823 l
-1028 1826 l
-1022 1829 l
-1016 1832 l
-1010 1835 l
-1004 1837 l
-999 1840 l
-993 1843 l
-987 1846 l
-981 1849 l
-976 1852 l
-970 1855 l
-964 1858 l
-958 1861 l
-953 1864 l
-947 1867 l
-941 1870 l
-936 1873 l
-930 1876 l
-924 1879 l
-919 1882 l
-913 1885 l
-907 1889 l
-902 1892 l
-896 1895 l
-890 1898 l
-885 1901 l
-879 1904 l
-874 1908 l
-868 1911 l
-862 1914 l
-857 1917 l
-851 1920 l
-846 1924 l
-840 1927 l
-835 1930 l
-829 1934 l
-823 1937 l
-818 1940 l
-812 1944 l
-807 1947 l
-801 1950 l
-796 1954 l
-790 1957 l
-785 1961 l
-780 1964 l
-774 1968 l
-769 1971 l
-763 1974 l
-758 1978 l
-752 1981 l
-747 1985 l
-742 1988 l
-736 1992 l
-731 1996 l
-725 1999 l
-720 2003 l
-715 2006 l
-709 2010 l
-704 2014 l
-699 2017 l
-693 2021 l
-688 2025 l
-683 2028 l
-677 2032 l
-672 2036 l
-667 2039 l
-662 2043 l
-656 2047 l
-651 2051 l
-646 2054 l
-641 2058 l
-635 2062 l
-630 2066 l
-625 2069 l
-620 2073 l
-615 2077 l
-609 2081 l
-604 2085 l
-599 2089 l
-594 2093 l
-589 2097 l
-584 2100 l
-579 2104 l
-573 2108 l
-568 2112 l
-563 2116 l
-558 2120 l
-553 2124 l
-548 2128 l
-543 2132 l
-538 2136 l
-533 2140 l
-S
-3884 6121 m
-3886 6119 l
-3891 6115 l
-3896 6111 l
-3901 6106 l
-3906 6102 l
-3910 6098 l
-3915 6093 l
-3920 6089 l
-3925 6085 l
-3930 6080 l
-3934 6076 l
-3939 6072 l
-3944 6067 l
-3948 6063 l
-3953 6058 l
-3958 6054 l
-3962 6050 l
-3967 6045 l
-3972 6041 l
-3976 6036 l
-3981 6032 l
-3986 6027 l
-3990 6023 l
-3995 6018 l
-3999 6013 l
-4004 6009 l
-4009 6004 l
-4013 6000 l
-4018 5995 l
-4022 5991 l
-4027 5986 l
-4031 5981 l
-4036 5977 l
-4040 5972 l
-4045 5967 l
-4049 5963 l
-4054 5958 l
-4058 5953 l
-4062 5949 l
-4067 5944 l
-4071 5939 l
-4076 5935 l
-4080 5930 l
-4084 5925 l
-4089 5920 l
-4093 5915 l
-4097 5911 l
-4102 5906 l
-4106 5901 l
-4110 5896 l
-4115 5891 l
-4119 5887 l
-4123 5882 l
-4127 5877 l
-4132 5872 l
-4136 5867 l
-4140 5862 l
-4144 5857 l
-4148 5852 l
-4153 5847 l
-4157 5843 l
-4161 5838 l
-4165 5833 l
-4169 5828 l
-4173 5823 l
-4177 5818 l
-4182 5813 l
-4186 5808 l
-4190 5803 l
-4194 5798 l
-4198 5793 l
-4202 5788 l
-4206 5783 l
-4210 5777 l
-4214 5772 l
-4218 5767 l
-4222 5762 l
-4226 5757 l
-4230 5752 l
-4234 5747 l
-4237 5742 l
-4241 5737 l
-4245 5731 l
-4249 5726 l
-4253 5721 l
-4257 5716 l
-4261 5711 l
-4264 5706 l
-4268 5700 l
-4272 5695 l
-4276 5690 l
-4280 5685 l
-4283 5679 l
-4287 5674 l
-4291 5669 l
-4295 5664 l
-4298 5658 l
-4302 5653 l
-4306 5648 l
-4309 5642 l
-4313 5637 l
-4317 5632 l
-4320 5626 l
-4324 5621 l
-4327 5616 l
-4331 5610 l
-4335 5605 l
-4338 5600 l
-4342 5594 l
-4345 5589 l
-4349 5583 l
-4352 5578 l
-4356 5572 l
-4359 5567 l
-4363 5562 l
-4366 5556 l
-4370 5551 l
-4373 5545 l
-4376 5540 l
-4380 5534 l
-4383 5529 l
-4387 5523 l
-4390 5518 l
-4393 5512 l
-4397 5507 l
-4400 5501 l
-4403 5496 l
-4406 5490 l
-4410 5484 l
-4413 5479 l
-4416 5473 l
-4419 5468 l
-4423 5462 l
-4426 5457 l
-4429 5451 l
-4432 5445 l
-4435 5440 l
-4439 5434 l
-4442 5428 l
-4445 5423 l
-4448 5417 l
-4451 5411 l
-4454 5406 l
-4457 5400 l
-4460 5394 l
-4463 5389 l
-4466 5383 l
-4469 5377 l
-4472 5372 l
-4475 5366 l
-4478 5360 l
-4481 5354 l
-4484 5349 l
-4487 5343 l
-4490 5337 l
-4493 5331 l
-4496 5326 l
-4499 5320 l
-4501 5314 l
-4504 5308 l
-4507 5302 l
-4510 5297 l
-4513 5291 l
-4516 5285 l
-4518 5279 l
-4521 5273 l
-4524 5267 l
-4526 5261 l
-4529 5256 l
-4532 5250 l
-4535 5244 l
-4537 5238 l
-4540 5232 l
-4543 5226 l
-4545 5220 l
-4548 5214 l
-4550 5208 l
-4553 5203 l
-4555 5197 l
-4558 5191 l
-4561 5185 l
-4563 5179 l
-4566 5173 l
-4568 5167 l
-4571 5161 l
-4573 5155 l
-4575 5149 l
-4578 5143 l
-4580 5137 l
-4583 5131 l
-4585 5125 l
-4587 5119 l
-4590 5113 l
-4592 5107 l
-4594 5101 l
-4597 5095 l
-4599 5089 l
-4601 5083 l
-4604 5077 l
-S
-4604 5077 m
-4606 5071 l
-4608 5065 l
-4610 5059 l
-4612 5053 l
-4615 5047 l
-4617 5040 l
-4619 5034 l
-4621 5028 l
-4623 5022 l
-4625 5016 l
-4627 5010 l
-4630 5004 l
-4632 4998 l
-4634 4992 l
-4636 4986 l
-4638 4979 l
-4640 4973 l
-4642 4967 l
-4644 4961 l
-4646 4955 l
-4648 4949 l
-4650 4942 l
-4651 4936 l
-4653 4930 l
-4655 4924 l
-4657 4918 l
-4659 4912 l
-4661 4905 l
-4663 4899 l
-4664 4893 l
-4666 4887 l
-4668 4881 l
-4670 4874 l
-4672 4868 l
-4673 4862 l
-4675 4856 l
-4677 4850 l
-4678 4843 l
-4680 4837 l
-4682 4831 l
-4683 4825 l
-4685 4818 l
-4687 4812 l
-4688 4806 l
-4690 4800 l
-4691 4793 l
-4693 4787 l
-4694 4781 l
-4696 4774 l
-4697 4768 l
-4699 4762 l
-4700 4756 l
-4702 4749 l
-4703 4743 l
-4705 4737 l
-4706 4730 l
-4707 4724 l
-4709 4718 l
-4710 4711 l
-4712 4705 l
-4713 4699 l
-4714 4693 l
-4715 4686 l
-4717 4680 l
-4718 4674 l
-4719 4667 l
-4720 4661 l
-4722 4655 l
-4723 4648 l
-4724 4642 l
-4725 4636 l
-4726 4629 l
-4728 4623 l
-4729 4616 l
-4730 4610 l
-4731 4604 l
-4732 4597 l
-4733 4591 l
-4734 4585 l
-4735 4578 l
-4736 4572 l
-4737 4565 l
-4738 4559 l
-4739 4553 l
-4740 4546 l
-4741 4540 l
-4742 4534 l
-4743 4527 l
-4744 4521 l
-4744 4514 l
-4745 4508 l
-4746 4502 l
-4747 4495 l
-4748 4489 l
-4749 4482 l
-4749 4476 l
-4750 4470 l
-4751 4463 l
-4752 4457 l
-4752 4450 l
-4753 4444 l
-4754 4437 l
-4754 4431 l
-4755 4425 l
-4756 4418 l
-4756 4412 l
-4757 4405 l
-4757 4399 l
-4758 4392 l
-4759 4386 l
-4759 4380 l
-4760 4373 l
-4760 4367 l
-4761 4360 l
-4761 4354 l
-4762 4347 l
-4762 4341 l
-4762 4334 l
-4763 4328 l
-4763 4322 l
-4764 4315 l
-4764 4309 l
-4764 4302 l
-4765 4296 l
-4765 4289 l
-4765 4283 l
-4765 4276 l
-4766 4270 l
-4766 4264 l
-4766 4257 l
-4766 4251 l
-4767 4244 l
-4767 4238 l
-4767 4231 l
-4767 4225 l
-4767 4218 l
-4767 4212 l
-4768 4205 l
-4768 4199 l
-4768 4193 l
-4768 4186 l
-4768 4180 l
-4768 4173 l
-4768 4167 l
-4768 4160 l
-4768 4154 l
-4768 4147 l
-4768 4141 l
-4768 4134 l
-4768 4128 l
-4767 4122 l
-4767 4115 l
-4767 4109 l
-4767 4102 l
-4767 4096 l
-4767 4089 l
-4766 4083 l
-4766 4076 l
-4766 4070 l
-4766 4063 l
-4766 4057 l
-4765 4051 l
-4765 4044 l
-4765 4038 l
-4764 4031 l
-4764 4025 l
-4764 4018 l
-4763 4012 l
-4763 4005 l
-4762 3999 l
-4762 3993 l
-4762 3986 l
-4761 3980 l
-4761 3973 l
-4760 3967 l
-4760 3960 l
-4759 3954 l
-4759 3947 l
-4758 3941 l
-4757 3935 l
-4757 3928 l
-4756 3922 l
-4756 3915 l
-4755 3909 l
-4754 3902 l
-4754 3896 l
-4753 3890 l
-4752 3883 l
-4752 3877 l
-4751 3870 l
-4750 3864 l
-4749 3858 l
-4749 3851 l
-4748 3845 l
-4747 3838 l
-4746 3832 l
-4745 3826 l
-4745 3819 l
-4744 3813 l
-S
-4744 3813 m
-4743 3806 l
-4742 3800 l
-4741 3794 l
-4740 3787 l
-4739 3781 l
-4738 3774 l
-4737 3768 l
-4736 3762 l
-4735 3755 l
-4734 3749 l
-4733 3742 l
-4732 3736 l
-4731 3730 l
-4730 3723 l
-4729 3717 l
-4728 3711 l
-4726 3704 l
-4725 3698 l
-4724 3692 l
-4723 3685 l
-4722 3679 l
-4721 3673 l
-4719 3666 l
-4718 3660 l
-4717 3654 l
-4715 3647 l
-4714 3641 l
-4713 3635 l
-4712 3628 l
-4710 3622 l
-4709 3616 l
-4707 3609 l
-4706 3603 l
-4705 3597 l
-4703 3590 l
-4702 3584 l
-4700 3578 l
-4699 3572 l
-4697 3565 l
-4696 3559 l
-4694 3553 l
-4693 3546 l
-4691 3540 l
-4690 3534 l
-4688 3528 l
-4687 3521 l
-4685 3515 l
-4683 3509 l
-4682 3503 l
-4680 3496 l
-4678 3490 l
-4677 3484 l
-4675 3478 l
-4673 3471 l
-4672 3465 l
-4670 3459 l
-4668 3453 l
-4666 3447 l
-4665 3440 l
-4663 3434 l
-4661 3428 l
-4659 3422 l
-4657 3416 l
-4655 3409 l
-4653 3403 l
-4652 3397 l
-4650 3391 l
-4648 3385 l
-4646 3379 l
-4644 3372 l
-4642 3366 l
-4640 3360 l
-4638 3354 l
-4636 3348 l
-4634 3342 l
-4632 3336 l
-4630 3330 l
-4628 3323 l
-4625 3317 l
-4623 3311 l
-4621 3305 l
-4619 3299 l
-4617 3293 l
-4615 3287 l
-4613 3281 l
-4610 3275 l
-4608 3269 l
-4606 3263 l
-4604 3257 l
-4601 3251 l
-4599 3244 l
-4597 3238 l
-4594 3232 l
-4592 3226 l
-4590 3220 l
-4587 3214 l
-4585 3208 l
-S
-4316 3315 m
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3314 l
-4316 3314 l
-4316 3314 l
-4316 3314 l
-4316 3313 l
-4316 3313 l
-4315 3313 l
-4315 3312 l
-4315 3312 l
-4315 3311 l
-4315 3311 l
-4315 3311 l
-4315 3310 l
-4314 3310 l
-4312 3305 l
-4310 3299 l
-4308 3294 l
-4306 3289 l
-4304 3283 l
-4301 3278 l
-4299 3273 l
-4297 3267 l
-4295 3262 l
-4293 3257 l
-4290 3252 l
-4288 3246 l
-4255 3173 l
-4219 3101 l
-4181 3031 l
-4140 2961 l
-4097 2893 l
-4052 2827 l
-4004 2762 l
-3954 2699 l
-3902 2638 l
-3848 2579 l
-3792 2521 l
-3734 2466 l
-3674 2412 l
-3612 2361 l
-3549 2312 l
-3484 2265 l
-3417 2220 l
-3349 2178 l
-3279 2138 l
-3208 2101 l
-3135 2066 l
-3062 2033 l
-2987 2003 l
-2912 1976 l
-2835 1952 l
-2758 1930 l
-2680 1911 l
-2602 1894 l
-2522 1880 l
-2443 1869 l
-2363 1861 l
-2283 1856 l
-2203 1853 l
-2122 1853 l
-2042 1856 l
-1962 1862 l
-1882 1870 l
-1803 1881 l
-1724 1895 l
-1645 1912 l
-1567 1932 l
-1490 1954 l
-1414 1979 l
-1338 2006 l
-1264 2036 l
-1190 2069 l
-1118 2104 l
-1047 2142 l
-978 2182 l
-909 2224 l
-843 2269 l
-778 2316 l
-714 2366 l
-653 2417 l
-593 2471 l
-535 2526 l
-533 2528 l
-S
-533 5804 m
-572 5842 l
-631 5896 l
-692 5948 l
-755 5998 l
-819 6046 l
-885 6092 l
-930 6121 l
-S
-3403 6121 m
-3459 6085 l
-3525 6039 l
-3589 5990 l
-3652 5940 l
-3712 5887 l
-3771 5832 l
-3828 5776 l
-3883 5717 l
-3936 5656 l
-3986 5594 l
-4035 5530 l
-4081 5464 l
-4125 5397 l
-4166 5328 l
-4205 5258 l
-4242 5186 l
-4276 5114 l
-4308 5040 l
-4337 4965 l
-4363 4889 l
-4387 4812 l
-4408 4735 l
-4426 4657 l
-4442 4578 l
-4455 4498 l
-4465 4419 l
-4472 4339 l
-4477 4258 l
-4479 4178 l
-4478 4098 l
-4474 4018 l
-4467 3937 l
-4458 3858 l
-4446 3778 l
-4431 3699 l
-4414 3621 l
-4393 3543 l
-4370 3466 l
-4345 3390 l
-4316 3315 l
-S
-4048 3421 m
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4047 3421 l
-4047 3420 l
-4047 3420 l
-4047 3420 l
-4047 3419 l
-4047 3419 l
-4047 3419 l
-4046 3418 l
-4046 3418 l
-4046 3418 l
-4046 3417 l
-4046 3417 l
-4044 3412 l
-4042 3408 l
-4040 3403 l
-4038 3398 l
-4036 3394 l
-4035 3389 l
-4033 3384 l
-4031 3380 l
-4029 3375 l
-4027 3371 l
-4025 3366 l
-4023 3361 l
-3994 3297 l
-3962 3234 l
-3929 3172 l
-3893 3112 l
-3856 3052 l
-3816 2994 l
-3774 2938 l
-3731 2883 l
-3685 2829 l
-3638 2777 l
-3589 2727 l
-3538 2678 l
-3486 2632 l
-3432 2587 l
-3376 2544 l
-3319 2503 l
-3261 2464 l
-3201 2427 l
-3140 2392 l
-3078 2359 l
-3014 2328 l
-2950 2300 l
-2885 2274 l
-2819 2250 l
-2752 2229 l
-2684 2209 l
-2616 2193 l
-2547 2178 l
-2478 2166 l
-2408 2156 l
-2338 2149 l
-2268 2144 l
-2198 2142 l
-2128 2142 l
-2058 2145 l
-1988 2150 l
-1918 2157 l
-1848 2167 l
-1779 2179 l
-1710 2194 l
-1642 2211 l
-1575 2230 l
-1508 2252 l
-1442 2276 l
-1377 2302 l
-1312 2331 l
-1249 2362 l
-1187 2395 l
-1126 2430 l
-1067 2467 l
-1008 2506 l
-951 2547 l
-896 2591 l
-842 2636 l
-790 2683 l
-739 2731 l
-690 2782 l
-643 2834 l
-598 2888 l
-554 2943 l
-533 2972 l
-S
-533 5361 m
-539 5369 l
-582 5425 l
-626 5479 l
-673 5532 l
-721 5583 l
-771 5632 l
-823 5680 l
-876 5726 l
-931 5769 l
-987 5811 l
-1045 5851 l
-1104 5889 l
-1165 5925 l
-1226 5959 l
-1289 5991 l
-1353 6020 l
-1418 6047 l
-1484 6072 l
-1550 6095 l
-1617 6115 l
-1641 6121 l
-S
-2692 6121 m
-2727 6112 l
-2794 6091 l
-2861 6068 l
-2926 6043 l
-2991 6015 l
-3055 5985 l
-3117 5953 l
-3179 5919 l
-3239 5883 l
-3298 5845 l
-3355 5805 l
-3412 5762 l
-3466 5718 l
-3519 5672 l
-3571 5624 l
-3620 5574 l
-3668 5523 l
-3714 5470 l
-3759 5416 l
-3801 5359 l
-3842 5302 l
-3880 5243 l
-3916 5183 l
-3951 5121 l
-3983 5059 l
-4012 4995 l
-4040 4931 l
-4065 4865 l
-4089 4799 l
-4109 4732 l
-4128 4664 l
-4144 4595 l
-4158 4526 l
-4169 4457 l
-4178 4387 l
-4184 4317 l
-4188 4247 l
-4190 4177 l
-4189 4106 l
-4186 4036 l
-4180 3966 l
-4172 3896 l
-4161 3827 l
-4148 3758 l
-4133 3689 l
-4115 3621 l
-4095 3554 l
-4072 3487 l
-4048 3421 l
-S
-3779 3527 m
-3779 3527 l
-3779 3527 l
-3778 3527 l
-3778 3526 l
-3778 3526 l
-3778 3526 l
-3778 3525 l
-3778 3525 l
-3778 3525 l
-3778 3525 l
-3778 3524 l
-3777 3524 l
-3776 3520 l
-3774 3516 l
-3773 3512 l
-3771 3508 l
-3769 3504 l
-3768 3500 l
-3766 3496 l
-3764 3492 l
-3763 3488 l
-3761 3484 l
-3759 3480 l
-3758 3476 l
-3733 3421 l
-3706 3367 l
-3677 3314 l
-3647 3262 l
-3614 3212 l
-3580 3162 l
-3545 3113 l
-3507 3066 l
-3468 3020 l
-3428 2976 l
-3386 2933 l
-3342 2891 l
-3297 2851 l
-3251 2812 l
-3203 2775 l
-3154 2740 l
-3104 2707 l
-3053 2675 l
-3001 2645 l
-2947 2617 l
-2893 2591 l
-2838 2567 l
-2782 2544 l
-2726 2524 l
-2668 2505 l
-2610 2489 l
-2552 2474 l
-2493 2462 l
-2433 2452 l
-2374 2444 l
-2314 2437 l
-2254 2433 l
-2194 2431 l
-2133 2431 l
-2073 2434 l
-2013 2438 l
-1953 2444 l
-1894 2453 l
-1834 2463 l
-1775 2476 l
-1717 2490 l
-1659 2507 l
-1602 2526 l
-1545 2546 l
-1489 2569 l
-1434 2593 l
-1380 2620 l
-1327 2648 l
-1275 2678 l
-1224 2710 l
-1174 2743 l
-1125 2779 l
-1077 2816 l
-1031 2854 l
-986 2895 l
-943 2936 l
-901 2980 l
-861 3024 l
-822 3070 l
-785 3118 l
-749 3166 l
-715 3216 l
-683 3267 l
-653 3319 l
-624 3372 l
-598 3426 l
-573 3481 l
-550 3537 l
-533 3583 l
-S
-533 4749 m
-542 4775 l
-564 4831 l
-588 4886 l
-614 4940 l
-642 4994 l
-672 5046 l
-703 5098 l
-736 5148 l
-771 5197 l
-808 5245 l
-846 5292 l
-886 5337 l
-928 5380 l
-970 5423 l
-1015 5464 l
-1060 5503 l
-1107 5540 l
-1156 5576 l
-1205 5611 l
-1256 5643 l
-1308 5674 l
-1361 5703 l
-1415 5730 l
-1469 5755 l
-1525 5778 l
-1581 5800 l
-1638 5819 l
-1696 5836 l
-1754 5852 l
-1813 5865 l
-1872 5876 l
-1931 5886 l
-1991 5893 l
-2051 5898 l
-2111 5901 l
-2172 5902 l
-2232 5900 l
-2292 5897 l
-2352 5892 l
-2412 5884 l
-2471 5875 l
-2530 5863 l
-2589 5849 l
-2647 5834 l
-2705 5816 l
-2762 5796 l
-2818 5775 l
-2873 5751 l
-2928 5726 l
-2981 5698 l
-3034 5669 l
-3086 5638 l
-3136 5605 l
-3186 5571 l
-3234 5534 l
-3280 5496 l
-3326 5457 l
-3370 5416 l
-3413 5373 l
-3454 5329 l
-3493 5284 l
-3531 5237 l
-3568 5189 l
-3602 5140 l
-3635 5089 l
-3666 5038 l
-3696 4985 l
-3723 4931 l
-3749 4877 l
-3772 4821 l
-3794 4765 l
-3814 4708 l
-3832 4651 l
-3848 4593 l
-3861 4534 l
-3873 4475 l
-3883 4415 l
-3890 4356 l
-3896 4296 l
-3899 4235 l
-3901 4175 l
-3900 4115 l
-3897 4055 l
-3892 3995 l
-3885 3935 l
-3876 3875 l
-3865 3816 l
-3852 3757 l
-3837 3699 l
-3819 3641 l
-3800 3584 l
-3779 3528 l
-S
-3510 3634 m
-3510 3634 l
-3510 3633 l
-3510 3633 l
-3510 3633 l
-3510 3633 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3631 l
-3509 3631 l
-3508 3628 l
-3506 3624 l
-3505 3621 l
-3504 3618 l
-3502 3614 l
-3501 3611 l
-3499 3608 l
-3498 3605 l
-3497 3601 l
-3495 3598 l
-3494 3595 l
-3492 3591 l
-3472 3546 l
-3449 3501 l
-3425 3456 l
-3400 3413 l
-3373 3371 l
-3345 3329 l
-3315 3289 l
-3284 3249 l
-3251 3211 l
-3218 3174 l
-3183 3138 l
-3146 3103 l
-3109 3070 l
-3070 3038 l
-3030 3007 l
-2990 2978 l
-2948 2950 l
-2905 2924 l
-2862 2899 l
-2817 2875 l
-2772 2853 l
-2726 2833 l
-2680 2815 l
-2632 2798 l
-2585 2782 l
-2536 2768 l
-2488 2756 l
-2438 2746 l
-2389 2738 l
-2339 2731 l
-2289 2726 l
-2239 2722 l
-2189 2720 l
-2139 2721 l
-2089 2722 l
-2039 2726 l
-1989 2731 l
-1939 2738 l
-1890 2747 l
-1841 2757 l
-1792 2770 l
-1744 2784 l
-1696 2799 l
-1649 2816 l
-1602 2835 l
-1556 2855 l
-1511 2877 l
-1467 2901 l
-1423 2926 l
-1381 2953 l
-1339 2981 l
-1299 3010 l
-1259 3041 l
-1220 3073 l
-1183 3107 l
-1147 3141 l
-1112 3177 l
-1078 3215 l
-1046 3253 l
-1015 3292 l
-985 3333 l
-957 3375 l
-930 3417 l
-905 3460 l
-881 3505 l
-859 3550 l
-839 3595 l
-820 3642 l
-802 3689 l
-786 3737 l
-772 3785 l
-760 3834 l
-749 3883 l
-740 3932 l
-733 3982 l
-727 4032 l
-724 4082 l
-722 4132 l
-721 4182 l
-723 4232 l
-726 4282 l
-731 4332 l
-737 4382 l
-746 4432 l
-756 4481 l
-768 4530 l
-781 4578 l
-796 4626 l
-813 4673 l
-831 4720 l
-851 4766 l
-873 4811 l
-896 4856 l
-921 4900 l
-947 4943 l
-975 4984 l
-1004 5025 l
-1034 5065 l
-1066 5104 l
-1100 5142 l
-1134 5178 l
-1170 5213 l
-1207 5247 l
-1245 5280 l
-1284 5311 l
-1324 5341 l
-1366 5370 l
-1408 5397 l
-1451 5423 l
-1495 5447 l
-1540 5469 l
-1585 5490 l
-1632 5510 l
-1679 5528 l
-1726 5544 l
-1774 5558 l
-1823 5571 l
-1872 5582 l
-1921 5591 l
-1971 5599 l
-2020 5605 l
-2070 5609 l
-2121 5612 l
-2171 5612 l
-2221 5611 l
-2271 5609 l
-2321 5604 l
-2371 5598 l
-2420 5590 l
-2470 5580 l
-2519 5569 l
-2567 5556 l
-2615 5541 l
-2662 5525 l
-2709 5507 l
-2755 5487 l
-2801 5466 l
-2846 5443 l
-2889 5419 l
-2932 5393 l
-2975 5365 l
-3016 5336 l
-3056 5306 l
-3095 5275 l
-3133 5242 l
-3169 5208 l
-3205 5172 l
-3239 5135 l
-3272 5098 l
-3304 5059 l
-3334 5019 l
-3363 4977 l
-3390 4935 l
-3416 4892 l
-3441 4849 l
-3464 4804 l
-3485 4758 l
-3505 4712 l
-3523 4665 l
-3539 4618 l
-3554 4570 l
-3567 4522 l
-3579 4473 l
-3589 4423 l
-3597 4374 l
-3603 4324 l
-3608 4274 l
-3611 4224 l
-3612 4174 l
-3611 4124 l
-3609 4073 l
-3605 4023 l
-3599 3973 l
-3591 3924 l
-3582 3874 l
-S
-3582 3874 m
-3571 3825 l
-3558 3777 l
-3544 3729 l
-3528 3681 l
-3510 3634 l
-S
-3241 3740 m
-3241 3740 l
-3241 3740 l
-3241 3740 l
-3241 3740 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3738 l
-3241 3738 l
-3240 3738 l
-3239 3735 l
-3238 3733 l
-3237 3730 l
-3236 3727 l
-3235 3725 l
-3234 3722 l
-3233 3720 l
-3232 3717 l
-3231 3714 l
-3229 3712 l
-3228 3709 l
-3227 3706 l
-3211 3670 l
-3193 3634 l
-3174 3598 l
-3153 3564 l
-3132 3530 l
-3109 3497 l
-3085 3464 l
-3060 3433 l
-3034 3402 l
-3007 3373 l
-2979 3344 l
-2950 3316 l
-2920 3289 l
-2889 3264 l
-2858 3239 l
-2825 3216 l
-2792 3193 l
-2757 3172 l
-2723 3152 l
-2687 3134 l
-2651 3116 l
-2614 3100 l
-2577 3085 l
-2539 3071 l
-2501 3059 l
-2462 3048 l
-2423 3038 l
-2384 3030 l
-2344 3023 l
-2305 3018 l
-2265 3014 l
-2225 3011 l
-2185 3010 l
-2144 3010 l
-2104 3011 l
-2064 3014 l
-2024 3018 l
-1985 3024 l
-1945 3031 l
-1906 3039 l
-1867 3049 l
-1828 3060 l
-1790 3072 l
-1752 3086 l
-1715 3101 l
-1678 3118 l
-1642 3135 l
-1607 3154 l
-1572 3174 l
-1538 3195 l
-1505 3218 l
-1472 3241 l
-1440 3266 l
-1410 3292 l
-1380 3319 l
-1351 3346 l
-1323 3375 l
-1296 3405 l
-1270 3436 l
-1245 3467 l
-1221 3500 l
-1199 3533 l
-1178 3567 l
-1157 3602 l
-1138 3637 l
-1121 3673 l
-1104 3710 l
-1089 3747 l
-1075 3785 l
-1062 3823 l
-1051 3861 l
-1041 3900 l
-1033 3939 l
-1026 3979 l
-1020 4019 l
-1015 4059 l
-1012 4099 l
-1011 4139 l
-1010 4179 l
-1011 4219 l
-1014 4259 l
-1018 4299 l
-1023 4339 l
-1030 4379 l
-1038 4418 l
-1047 4457 l
-1058 4496 l
-1070 4534 l
-1084 4572 l
-1098 4609 l
-1114 4646 l
-1132 4682 l
-1150 4718 l
-1170 4753 l
-1191 4787 l
-1213 4821 l
-1236 4854 l
-1261 4885 l
-1286 4916 l
-1313 4947 l
-1340 4976 l
-1369 5004 l
-1399 5031 l
-1429 5057 l
-1460 5082 l
-1493 5106 l
-1526 5129 l
-1560 5151 l
-1594 5171 l
-1629 5191 l
-1665 5209 l
-1702 5226 l
-1739 5241 l
-1776 5255 l
-1814 5268 l
-1853 5280 l
-1892 5290 l
-1931 5299 l
-1970 5306 l
-2010 5313 l
-2050 5317 l
-2090 5321 l
-2130 5323 l
-2170 5323 l
-2210 5322 l
-2250 5320 l
-2290 5317 l
-2330 5312 l
-2370 5305 l
-2409 5297 l
-2448 5288 l
-2487 5278 l
-2525 5266 l
-2563 5253 l
-2601 5239 l
-2638 5223 l
-2674 5206 l
-2710 5188 l
-2745 5168 l
-2779 5147 l
-2813 5126 l
-2846 5102 l
-2878 5078 l
-2909 5053 l
-2939 5027 l
-2969 4999 l
-2997 4971 l
-3025 4942 l
-3051 4911 l
-3076 4880 l
-3101 4848 l
-3124 4815 l
-3146 4782 l
-3166 4747 l
-3186 4712 l
-3204 4676 l
-3221 4640 l
-3237 4603 l
-3252 4566 l
-3265 4528 l
-3277 4489 l
-3287 4451 l
-3296 4411 l
-3304 4372 l
-3311 4332 l
-3316 4293 l
-3319 4253 l
-3322 4212 l
-3323 4172 l
-3322 4132 l
-3320 4092 l
-3317 4052 l
-3312 4012 l
-3306 3972 l
-3299 3933 l
-S
-3299 3933 m
-3290 3894 l
-3280 3855 l
-3268 3816 l
-3256 3778 l
-3241 3741 l
-S
-2973 3847 m
-2973 3847 l
-2972 3847 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3845 l
-2972 3845 l
-2972 3845 l
-2971 3843 l
-2970 3841 l
-2970 3839 l
-2969 3837 l
-2968 3835 l
-2967 3833 l
-2966 3831 l
-2965 3829 l
-2965 3827 l
-2964 3825 l
-2963 3823 l
-2962 3821 l
-2950 3794 l
-2936 3767 l
-2922 3740 l
-2907 3714 l
-2890 3689 l
-2873 3664 l
-2856 3640 l
-2837 3616 l
-2817 3593 l
-2797 3571 l
-2776 3549 l
-2754 3529 l
-2732 3509 l
-2709 3489 l
-2685 3471 l
-2660 3453 l
-2635 3437 l
-2610 3421 l
-2584 3406 l
-2557 3392 l
-2530 3379 l
-2502 3366 l
-2474 3355 l
-2446 3345 l
-2417 3336 l
-2388 3328 l
-2359 3320 l
-2330 3314 l
-2300 3309 l
-2270 3305 l
-2240 3302 l
-2210 3300 l
-2180 3299 l
-2150 3299 l
-2120 3300 l
-2090 3302 l
-2060 3305 l
-2030 3310 l
-2000 3315 l
-1971 3321 l
-1942 3328 l
-1913 3337 l
-1884 3346 l
-1856 3356 l
-1828 3368 l
-1800 3380 l
-1773 3393 l
-1747 3407 l
-1721 3422 l
-1695 3438 l
-1670 3455 l
-1646 3473 l
-1622 3491 l
-1599 3510 l
-1576 3530 l
-1555 3551 l
-1534 3573 l
-1514 3595 l
-1494 3618 l
-1476 3642 l
-1458 3666 l
-1441 3691 l
-1425 3717 l
-1410 3743 l
-1395 3769 l
-1382 3796 l
-1370 3824 l
-1358 3852 l
-1348 3880 l
-1338 3909 l
-1330 3938 l
-1323 3967 l
-1316 3996 l
-1311 4026 l
-1306 4056 l
-1303 4086 l
-1301 4116 l
-1300 4146 l
-1299 4176 l
-1300 4206 l
-1302 4236 l
-1305 4266 l
-1309 4296 l
-1314 4326 l
-1320 4355 l
-1327 4384 l
-1335 4413 l
-1344 4442 l
-1354 4471 l
-1365 4499 l
-1377 4526 l
-1390 4553 l
-1404 4580 l
-1419 4606 l
-1435 4632 l
-1451 4657 l
-1469 4682 l
-1487 4706 l
-1506 4729 l
-1526 4752 l
-1547 4773 l
-1568 4795 l
-1591 4815 l
-1613 4835 l
-1637 4853 l
-1661 4871 l
-1686 4889 l
-1711 4905 l
-1737 4920 l
-1764 4935 l
-1790 4948 l
-1818 4961 l
-1846 4972 l
-1874 4983 l
-1902 4993 l
-1931 5001 l
-1960 5009 l
-1990 5016 l
-2019 5021 l
-2049 5026 l
-2079 5030 l
-2109 5032 l
-2139 5034 l
-2169 5034 l
-2199 5033 l
-2229 5032 l
-2259 5029 l
-2289 5025 l
-2319 5021 l
-2348 5015 l
-2378 5008 l
-2407 5000 l
-2436 4991 l
-2464 4981 l
-2492 4971 l
-2520 4959 l
-2547 4946 l
-2574 4932 l
-2600 4918 l
-2626 4902 l
-2651 4886 l
-2676 4868 l
-2700 4850 l
-2723 4831 l
-2746 4812 l
-2768 4791 l
-2790 4770 l
-2810 4748 l
-2830 4725 l
-2849 4702 l
-2867 4678 l
-2884 4653 l
-2901 4628 l
-2916 4602 l
-2931 4576 l
-2945 4549 l
-2958 4522 l
-2969 4494 l
-2980 4466 l
-2990 4437 l
-2999 4409 l
-3007 4380 l
-3014 4350 l
-3020 4321 l
-3025 4291 l
-3028 4261 l
-3031 4231 l
-3033 4201 l
-3034 4171 l
-3033 4141 l
-3032 4111 l
-3029 4081 l
-3026 4051 l
-3021 4021 l
-3016 3991 l
-S
-3016 3991 m
-3009 3962 l
-3001 3933 l
-2993 3904 l
-2983 3875 l
-2973 3847 l
-S
-2704 3953 m
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3952 l
-2703 3952 l
-2703 3952 l
-2703 3951 l
-2702 3950 l
-2702 3948 l
-2701 3947 l
-2701 3946 l
-2700 3944 l
-2700 3943 l
-2699 3942 l
-2699 3940 l
-2698 3939 l
-2697 3938 l
-2697 3936 l
-2689 3918 l
-2680 3900 l
-2670 3882 l
-2660 3865 l
-2649 3848 l
-2638 3832 l
-2626 3815 l
-2613 3800 l
-2600 3784 l
-2587 3769 l
-2573 3755 l
-2558 3741 l
-2543 3728 l
-2528 3715 l
-2512 3703 l
-2496 3691 l
-2479 3680 l
-2462 3669 l
-2445 3659 l
-2427 3650 l
-2409 3641 l
-2390 3633 l
-2372 3626 l
-2353 3619 l
-2334 3613 l
-2314 3607 l
-2295 3602 l
-2275 3598 l
-2255 3595 l
-2236 3592 l
-2216 3590 l
-2196 3589 l
-2176 3588 l
-2155 3588 l
-2135 3589 l
-2115 3590 l
-2095 3592 l
-2076 3595 l
-2056 3599 l
-2036 3603 l
-2017 3608 l
-1997 3613 l
-1978 3619 l
-1959 3626 l
-1941 3634 l
-1922 3642 l
-1904 3651 l
-1887 3660 l
-1869 3670 l
-1852 3681 l
-1836 3692 l
-1819 3704 l
-1803 3716 l
-1788 3729 l
-1773 3742 l
-1759 3756 l
-1745 3771 l
-1731 3786 l
-1718 3801 l
-1706 3817 l
-1694 3833 l
-1683 3850 l
-1672 3867 l
-1662 3884 l
-1652 3902 l
-1644 3920 l
-1635 3938 l
-1628 3957 l
-1621 3975 l
-1614 3995 l
-1609 4014 l
-1604 4033 l
-1600 4053 l
-1596 4073 l
-1593 4093 l
-1591 4112 l
-1589 4133 l
-1589 4153 l
-1588 4173 l
-1589 4193 l
-1590 4213 l
-1592 4233 l
-1595 4253 l
-1598 4273 l
-1602 4292 l
-1607 4312 l
-1612 4331 l
-1618 4350 l
-1625 4369 l
-1632 4388 l
-1640 4406 l
-1649 4424 l
-1658 4442 l
-1668 4460 l
-1679 4477 l
-1690 4494 l
-1701 4510 l
-1714 4526 l
-1726 4541 l
-1740 4556 l
-1753 4571 l
-1768 4585 l
-1783 4599 l
-1798 4612 l
-1813 4624 l
-1830 4636 l
-1846 4648 l
-1863 4659 l
-1880 4669 l
-1898 4679 l
-1916 4688 l
-1934 4696 l
-1953 4704 l
-1971 4711 l
-1990 4717 l
-2010 4723 l
-2029 4728 l
-2049 4733 l
-2068 4736 l
-2088 4739 l
-2108 4742 l
-2128 4743 l
-2148 4744 l
-2168 4745 l
-2188 4744 l
-2208 4743 l
-2228 4741 l
-2248 4739 l
-2268 4736 l
-2288 4732 l
-2307 4727 l
-2327 4722 l
-2346 4716 l
-2365 4710 l
-2384 4702 l
-2402 4695 l
-2420 4686 l
-2438 4677 l
-2456 4667 l
-2473 4657 l
-2490 4646 l
-2506 4634 l
-2522 4622 l
-2538 4610 l
-2553 4597 l
-2568 4583 l
-2582 4569 l
-2596 4554 l
-2609 4539 l
-2621 4523 l
-2634 4507 l
-2645 4491 l
-2656 4474 l
-2666 4457 l
-2676 4439 l
-2685 4421 l
-2694 4403 l
-2702 4385 l
-2709 4366 l
-2716 4347 l
-2722 4328 l
-2727 4308 l
-2731 4289 l
-2735 4269 l
-2739 4249 l
-2741 4229 l
-2743 4209 l
-2744 4189 l
-2745 4169 l
-2744 4149 l
-2743 4129 l
-2742 4109 l
-2739 4089 l
-2736 4069 l
-2733 4050 l
-S
-2733 4050 m
-2728 4030 l
-2723 4011 l
-2717 3991 l
-2711 3972 l
-2704 3953 l
-S
-2435 4060 m
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2434 4058 l
-2434 4057 l
-2434 4057 l
-2434 4056 l
-2433 4055 l
-2433 4055 l
-2433 4054 l
-2432 4053 l
-2432 4053 l
-2432 4052 l
-2432 4051 l
-2427 4042 l
-2423 4033 l
-2418 4024 l
-2413 4016 l
-2408 4007 l
-2402 3999 l
-2396 3991 l
-2390 3983 l
-2383 3975 l
-2377 3968 l
-2370 3961 l
-2362 3954 l
-2355 3947 l
-2347 3941 l
-2339 3935 l
-2331 3929 l
-2323 3923 l
-2314 3918 l
-2305 3913 l
-2297 3908 l
-2288 3904 l
-2278 3900 l
-2269 3896 l
-2260 3893 l
-2250 3890 l
-2240 3887 l
-2231 3884 l
-2221 3882 l
-2211 3881 l
-2201 3879 l
-2191 3878 l
-2181 3878 l
-2171 3877 l
-2161 3877 l
-2151 3878 l
-2141 3878 l
-2131 3879 l
-2121 3881 l
-2111 3882 l
-2101 3885 l
-2092 3887 l
-2082 3890 l
-2072 3893 l
-2063 3896 l
-2054 3900 l
-2044 3904 l
-2035 3909 l
-2027 3913 l
-2018 3918 l
-2009 3924 l
-2001 3929 l
-1993 3935 l
-1985 3941 l
-1977 3948 l
-1970 3954 l
-1963 3961 l
-1956 3969 l
-1949 3976 l
-1942 3984 l
-1936 3992 l
-1930 4000 l
-1925 4008 l
-1919 4016 l
-1914 4025 l
-1909 4034 l
-1905 4043 l
-1901 4052 l
-1897 4061 l
-1894 4071 l
-1890 4080 l
-1888 4090 l
-1885 4100 l
-1883 4110 l
-1881 4120 l
-1880 4129 l
-1879 4139 l
-1878 4149 l
-1877 4159 l
-1877 4170 l
-1878 4180 l
-1878 4190 l
-1879 4200 l
-1881 4210 l
-1882 4219 l
-1884 4229 l
-1887 4239 l
-1889 4249 l
-1892 4258 l
-1896 4268 l
-1899 4277 l
-1903 4286 l
-1908 4295 l
-1912 4304 l
-1917 4313 l
-1923 4322 l
-1928 4330 l
-1934 4338 l
-1940 4346 l
-1946 4354 l
-1953 4361 l
-1960 4369 l
-1967 4376 l
-1974 4383 l
-1982 4389 l
-1990 4395 l
-1998 4401 l
-2006 4407 l
-2015 4412 l
-2023 4418 l
-2032 4422 l
-2041 4427 l
-2050 4431 l
-2059 4435 l
-2069 4439 l
-2078 4442 l
-2088 4445 l
-2098 4447 l
-2107 4449 l
-2117 4451 l
-2127 4453 l
-2137 4454 l
-2147 4455 l
-2157 4455 l
-2167 4456 l
-2177 4455 l
-2187 4455 l
-2197 4454 l
-2207 4453 l
-2217 4451 l
-2227 4449 l
-2237 4447 l
-2247 4444 l
-2256 4441 l
-2266 4438 l
-2275 4434 l
-2284 4430 l
-2293 4426 l
-2302 4422 l
-2311 4417 l
-2320 4412 l
-2328 4406 l
-2336 4400 l
-2344 4394 l
-2352 4388 l
-2360 4381 l
-2367 4375 l
-2374 4368 l
-2381 4360 l
-2388 4353 l
-2394 4345 l
-2400 4337 l
-2406 4329 l
-2411 4320 l
-2416 4312 l
-2421 4303 l
-2426 4294 l
-2430 4285 l
-2434 4276 l
-2438 4266 l
-2441 4257 l
-2444 4247 l
-2447 4237 l
-2449 4228 l
-2451 4218 l
-2452 4208 l
-2454 4198 l
-2455 4188 l
-2455 4178 l
-2455 4168 l
-2455 4158 l
-2455 4148 l
-2454 4138 l
-2453 4128 l
-2451 4118 l
-2450 4108 l
-S
-2450 4108 m
-2447 4098 l
-2445 4088 l
-2442 4079 l
-2439 4069 l
-2435 4060 l
-S
-2166 4166 m
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1 1 0 rg
-3682 3323 m
-3655 3337 l
-S
-3559 3132 m
-3534 3150 l
-S
-3412 2959 m
-3390 2980 l
-S
-3057 2677 m
-3041 2704 l
-S
-2855 2574 m
-2843 2602 l
-S
-2642 2498 m
-2633 2527 l
-S
-2194 2431 m
-2193 2462 l
-S
-1967 2443 m
-1971 2473 l
-S
-1744 2483 m
-1751 2513 l
-S
-1323 2650 m
-1338 2677 l
-S
-1132 2773 m
-1151 2798 l
-S
-960 2920 m
-981 2942 l
-S
-678 3275 m
-704 3291 l
-S
-575 3477 m
-603 3489 l
-S
-651 5010 m
-678 4995 l
-S
-774 5201 m
-799 5183 l
-S
-921 5374 m
-943 5353 l
-S
-1276 5655 m
-1291 5629 l
-S
-1478 5759 m
-1490 5731 l
-S
-1691 5835 m
-1700 5806 l
-S
-2139 5901 m
-2140 5871 l
-S
-2366 5890 m
-2362 5860 l
-S
-2589 5849 m
-2582 5820 l
-S
-3010 5683 m
-2995 5656 l
-S
-3200 5560 m
-3182 5535 l
-S
-3373 5413 m
-3352 5391 l
-S
-3655 5058 m
-3628 5042 l
-S
-3758 4856 m
-3730 4844 l
-S
-3834 4642 m
-3805 4634 l
-S
-3900 4194 m
-3870 4193 l
-S
-3889 3967 m
-3859 3971 l
-S
-3848 3744 m
-3819 3751 l
-S
-4787 3129 m
-4799 3156 l
-S
-4719 3155 m
-4732 3183 l
-S
-4652 3182 m
-4665 3209 l
-S
-4518 3235 m
-4531 3263 l
-S
-4451 3262 m
-4463 3289 l
-S
-4384 3288 m
-4396 3316 l
-S
-4249 3341 m
-4262 3369 l
-S
-4182 3368 m
-4195 3396 l
-S
-4115 3395 m
-4127 3422 l
-S
-3980 3448 m
-3993 3476 l
-S
-3913 3474 m
-3926 3502 l
-S
-3846 3501 m
-3859 3529 l
-S
-3712 3554 m
-3724 3582 l
-S
-3645 3581 m
-3657 3609 l
-S
-3577 3608 m
-3590 3635 l
-S
-3443 3661 m
-3456 3688 l
-S
-3376 3687 m
-3388 3715 l
-S
-3309 3714 m
-3321 3742 l
-S
-3174 3767 m
-3187 3795 l
-S
-3107 3794 m
-3120 3821 l
-S
-3040 3820 m
-3052 3848 l
-S
-2905 3874 m
-2918 3901 l
-S
-2838 3900 m
-2851 3928 l
-S
-2771 3927 m
-2784 3955 l
-S
-2637 3980 m
-2649 4008 l
-S
-2570 4007 m
-2582 4034 l
-S
-2502 4033 m
-2515 4061 l
-S
-2368 4087 m
-2381 4114 l
-S
-2301 4113 m
-2313 4141 l
-S
-2234 4140 m
-2246 4167 l
-S
-3779 3528 m
-3754 3468 l
-3727 3409 l
-3697 3351 l
-3666 3294 l
-3632 3239 l
-3596 3185 l
-3559 3132 l
-3519 3080 l
-3478 3031 l
-3434 2982 l
-3389 2936 l
-3342 2891 l
-3294 2848 l
-3244 2807 l
-S
-3244 2807 m
-3192 2767 l
-3139 2730 l
-3085 2694 l
-3029 2661 l
-2972 2630 l
-2914 2601 l
-2855 2574 l
-2795 2549 l
-2734 2527 l
-2673 2507 l
-2610 2489 l
-2547 2473 l
-2484 2460 l
-2420 2450 l
-S
-2420 2450 m
-2355 2441 l
-2291 2436 l
-2226 2432 l
-2161 2431 l
-2096 2432 l
-2032 2436 l
-1967 2443 l
-1903 2451 l
-1839 2462 l
-1775 2476 l
-1713 2492 l
-1650 2510 l
-1589 2530 l
-1528 2553 l
-S
-1528 2553 m
-1468 2578 l
-1409 2605 l
-1351 2635 l
-1295 2666 l
-1239 2700 l
-1185 2735 l
-1132 2773 l
-1081 2813 l
-1031 2854 l
-983 2898 l
-936 2943 l
-892 2990 l
-849 3038 l
-807 3088 l
-S
-807 3088 m
-768 3140 l
-731 3193 l
-695 3247 l
-662 3303 l
-631 3360 l
-602 3418 l
-575 3477 l
-550 3537 l
-533 3583 l
-S
-533 4749 m
-554 4805 l
-S
-554 4805 m
-579 4865 l
-606 4924 l
-636 4982 l
-667 5038 l
-701 5094 l
-736 5148 l
-774 5201 l
-814 5252 l
-855 5302 l
-899 5350 l
-944 5397 l
-991 5442 l
-1039 5485 l
-1089 5526 l
-S
-1089 5526 m
-1141 5566 l
-1194 5603 l
-1248 5638 l
-1304 5672 l
-1361 5703 l
-1419 5732 l
-1478 5759 l
-1538 5784 l
-1599 5806 l
-1660 5826 l
-1723 5844 l
-1786 5859 l
-1849 5872 l
-1913 5883 l
-S
-1913 5883 m
-1977 5891 l
-2042 5897 l
-2107 5901 l
-2172 5902 l
-2237 5900 l
-2301 5896 l
-2366 5890 l
-2430 5881 l
-2494 5870 l
-2557 5857 l
-2620 5841 l
-2683 5823 l
-2744 5803 l
-2805 5780 l
-S
-2805 5780 m
-2865 5755 l
-2924 5728 l
-2981 5698 l
-3038 5667 l
-3094 5633 l
-3148 5597 l
-3200 5560 l
-3252 5520 l
-3302 5478 l
-3350 5435 l
-3396 5390 l
-3441 5343 l
-3484 5294 l
-3526 5244 l
-S
-3526 5244 m
-3565 5193 l
-3602 5140 l
-3638 5085 l
-3671 5030 l
-3702 4973 l
-3731 4915 l
-3758 4856 l
-3783 4796 l
-3805 4735 l
-3825 4673 l
-3843 4611 l
-3858 4548 l
-3871 4484 l
-3882 4420 l
-S
-3882 4420 m
-3890 4356 l
-3896 4291 l
-3900 4226 l
-3901 4161 l
-3899 4096 l
-3895 4032 l
-3889 3967 l
-3881 3903 l
-3869 3839 l
-3856 3775 l
-3840 3712 l
-3822 3650 l
-3802 3588 l
-3800 3584 l
-3799 3580 l
-3797 3575 l
-3795 3571 l
-3794 3567 l
-3792 3562 l
-3791 3558 l
-3789 3554 l
-3787 3549 l
-3786 3545 l
-3784 3541 l
-3782 3536 l
-3781 3532 l
-3780 3532 l
-3780 3531 l
-3780 3531 l
-3780 3531 l
-3780 3530 l
-3780 3530 l
-3780 3530 l
-3780 3530 l
-3779 3529 l
-3779 3529 l
-3779 3529 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-S
-4877 3093 m
-4873 3094 l
-4854 3102 l
-S
-4854 3102 m
-4835 3110 l
-4815 3117 l
-4796 3125 l
-4777 3132 l
-4758 3140 l
-4739 3148 l
-4719 3155 l
-4700 3163 l
-4681 3170 l
-4662 3178 l
-4643 3186 l
-4624 3193 l
-4604 3201 l
-4585 3208 l
-S
-4585 3208 m
-4566 3216 l
-4547 3224 l
-4528 3231 l
-4508 3239 l
-4489 3246 l
-4470 3254 l
-4451 3262 l
-4432 3269 l
-4412 3277 l
-4393 3284 l
-4374 3292 l
-4355 3300 l
-4336 3307 l
-4316 3315 l
-S
-4316 3315 m
-4297 3322 l
-4278 3330 l
-4259 3338 l
-4240 3345 l
-4220 3353 l
-4201 3360 l
-4182 3368 l
-4163 3376 l
-4144 3383 l
-4124 3391 l
-4105 3398 l
-4086 3406 l
-4067 3414 l
-4048 3421 l
-S
-4048 3421 m
-4028 3429 l
-4009 3436 l
-3990 3444 l
-3971 3452 l
-3952 3459 l
-3932 3467 l
-3913 3474 l
-3894 3482 l
-3875 3490 l
-3856 3497 l
-3836 3505 l
-3817 3512 l
-3798 3520 l
-3779 3528 l
-S
-3779 3528 m
-3760 3535 l
-3740 3543 l
-3721 3551 l
-3702 3558 l
-3683 3566 l
-3664 3573 l
-3645 3581 l
-3625 3589 l
-3606 3596 l
-3587 3604 l
-3568 3611 l
-3549 3619 l
-3529 3627 l
-3510 3634 l
-S
-3510 3634 m
-3491 3642 l
-3472 3649 l
-3453 3657 l
-3433 3665 l
-3414 3672 l
-3395 3680 l
-3376 3687 l
-3357 3695 l
-3337 3703 l
-3318 3710 l
-3299 3718 l
-3280 3725 l
-3261 3733 l
-3241 3741 l
-S
-3241 3741 m
-3222 3748 l
-3203 3756 l
-3184 3763 l
-3165 3771 l
-3145 3779 l
-3126 3786 l
-3107 3794 l
-3088 3801 l
-3069 3809 l
-3049 3817 l
-3030 3824 l
-3011 3832 l
-2992 3839 l
-2973 3847 l
-S
-2973 3847 m
-2953 3855 l
-2934 3862 l
-2915 3870 l
-2896 3877 l
-2877 3885 l
-2857 3893 l
-2838 3900 l
-2819 3908 l
-2800 3915 l
-2781 3923 l
-2762 3931 l
-2742 3938 l
-2723 3946 l
-2704 3953 l
-S
-2704 3953 m
-2685 3961 l
-2666 3969 l
-2646 3976 l
-2627 3984 l
-2608 3991 l
-2589 3999 l
-2570 4007 l
-2550 4014 l
-2531 4022 l
-2512 4029 l
-2493 4037 l
-2474 4045 l
-2454 4052 l
-2435 4060 l
-S
-2435 4060 m
-2416 4068 l
-2397 4075 l
-2378 4083 l
-2358 4090 l
-2339 4098 l
-2320 4106 l
-2301 4113 l
-2282 4121 l
-2262 4128 l
-2243 4136 l
-2224 4144 l
-2205 4151 l
-2186 4159 l
-2166 4166 l
-S
-2166 4166 m
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1 g
-3911 3420 m
-3914 3420 l
-3914 3421 l
-3911 3421 l
-3908 3421 m
-3914 3421 l
-3914 3422 l
-3908 3422 l
-3906 3422 m
-3915 3422 l
-3915 3423 l
-3906 3423 l
-3903 3423 m
-3915 3423 l
-3915 3424 l
-3903 3424 l
-3901 3424 m
-3916 3424 l
-3916 3425 l
-3901 3425 l
-3898 3425 m
-3916 3425 l
-3916 3426 l
-3898 3426 l
-3896 3426 m
-3916 3426 l
-3916 3427 l
-3896 3427 l
-3893 3427 m
-3917 3427 l
-3917 3428 l
-3893 3428 l
-3891 3428 m
-3917 3428 l
-3917 3429 l
-3891 3429 l
-3888 3429 m
-3918 3429 l
-3918 3430 l
-3888 3430 l
-3886 3430 m
-3918 3430 l
-3918 3431 l
-3886 3431 l
-3883 3431 m
-3918 3431 l
-3918 3432 l
-3883 3432 l
-3881 3432 m
-3919 3432 l
-3919 3433 l
-3881 3433 l
-3878 3433 m
-3919 3433 l
-3919 3434 l
-3878 3434 l
-3876 3434 m
-3920 3434 l
-3920 3435 l
-3876 3435 l
-3873 3435 m
-3920 3435 l
-3920 3436 l
-3873 3436 l
-3871 3436 m
-3920 3436 l
-3920 3437 l
-3871 3437 l
-3868 3437 m
-3921 3437 l
-3921 3438 l
-3868 3438 l
-3866 3438 m
-3921 3438 l
-3921 3439 l
-3866 3439 l
-3863 3439 m
-3922 3439 l
-3922 3440 l
-3863 3440 l
-3861 3440 m
-3922 3440 l
-3922 3441 l
-3861 3441 l
-3858 3441 m
-3922 3441 l
-3922 3442 l
-3858 3442 l
-3856 3442 m
-3923 3442 l
-3923 3443 l
-3856 3443 l
-3853 3443 m
-3923 3443 l
-3923 3444 l
-3853 3444 l
-3851 3444 m
-3924 3444 l
-3924 3445 l
-3851 3445 l
-3848 3445 m
-3924 3445 l
-3924 3446 l
-3848 3446 l
-3846 3446 m
-3924 3446 l
-3924 3447 l
-3846 3447 l
-3843 3447 m
-3925 3447 l
-3925 3448 l
-3843 3448 l
-3841 3448 m
-3925 3448 l
-3925 3449 l
-3841 3449 l
-3838 3449 m
-3926 3449 l
-3926 3450 l
-3838 3450 l
-3836 3450 m
-3926 3450 l
-3926 3451 l
-3836 3451 l
-3833 3451 m
-3926 3451 l
-3926 3452 l
-3833 3452 l
-3831 3452 m
-3927 3452 l
-3927 3453 l
-3831 3453 l
-3828 3453 m
-3927 3453 l
-3927 3454 l
-3828 3454 l
-3826 3454 m
-3927 3454 l
-3927 3455 l
-3826 3455 l
-3823 3455 m
-3928 3455 l
-3928 3456 l
-3823 3456 l
-3821 3456 m
-3928 3456 l
-3928 3457 l
-3821 3457 l
-3818 3457 m
-3929 3457 l
-3929 3458 l
-3818 3458 l
-3816 3458 m
-3929 3458 l
-3929 3459 l
-3816 3459 l
-3813 3459 m
-3929 3459 l
-3929 3460 l
-3813 3460 l
-3811 3460 m
-3930 3460 l
-3930 3461 l
-3811 3461 l
-3808 3461 m
-3930 3461 l
-3930 3462 l
-3808 3462 l
-3806 3462 m
-3931 3462 l
-3931 3463 l
-3806 3463 l
-3803 3463 m
-3931 3463 l
-3931 3464 l
-3803 3464 l
-3801 3464 m
-3931 3464 l
-3931 3465 l
-3801 3465 l
-3801 3465 m
-3932 3465 l
-3932 3467 l
-3801 3467 l
-3801 3467 m
-3933 3467 l
-3933 3468 l
-3801 3468 l
-3802 3468 m
-3933 3468 l
-3933 3470 l
-3802 3470 l
-3802 3470 m
-3934 3470 l
-3934 3471 l
-3802 3471 l
-3803 3471 m
-3934 3471 l
-3934 3472 l
-3803 3472 l
-3803 3472 m
-3935 3472 l
-3935 3473 l
-3803 3473 l
-3804 3473 m
-3935 3473 l
-3935 3475 l
-3804 3475 l
-3804 3475 m
-3936 3475 l
-3936 3476 l
-3804 3476 l
-3805 3476 m
-3936 3476 l
-3936 3477 l
-3805 3477 l
-3805 3477 m
-3937 3477 l
-3937 3478 l
-3805 3478 l
-3806 3478 m
-3937 3478 l
-3937 3480 l
-3806 3480 l
-3806 3480 m
-3938 3480 l
-3938 3481 l
-3806 3481 l
-3807 3481 m
-3938 3481 l
-3938 3482 l
-3807 3482 l
-3807 3482 m
-3939 3482 l
-3939 3483 l
-3807 3483 l
-3808 3483 m
-3939 3483 l
-3939 3485 l
-3808 3485 l
-3808 3485 m
-3940 3485 l
-3940 3486 l
-3808 3486 l
-3809 3486 m
-3940 3486 l
-3940 3487 l
-3809 3487 l
-3809 3487 m
-3941 3487 l
-3941 3488 l
-3809 3488 l
-3810 3488 m
-3941 3488 l
-3941 3490 l
-3810 3490 l
-3810 3490 m
-3942 3490 l
-3942 3491 l
-3810 3491 l
-3811 3491 m
-3942 3491 l
-3942 3492 l
-3811 3492 l
-3811 3492 m
-3943 3492 l
-3943 3493 l
-3811 3493 l
-3812 3493 m
-3943 3493 l
-3943 3495 l
-3812 3495 l
-3812 3495 m
-3944 3495 l
-3944 3496 l
-3812 3496 l
-3813 3496 m
-3944 3496 l
-3944 3497 l
-3813 3497 l
-3813 3497 m
-3945 3497 l
-3945 3498 l
-3813 3498 l
-3814 3498 m
-3945 3498 l
-3945 3500 l
-3814 3500 l
-3814 3500 m
-3946 3500 l
-3946 3501 l
-3814 3501 l
-3815 3501 m
-3946 3501 l
-3946 3502 l
-3815 3502 l
-3815 3502 m
-3947 3502 l
-3947 3503 l
-3815 3503 l
-3816 3503 m
-3947 3503 l
-3947 3505 l
-3816 3505 l
-3816 3505 m
-3948 3505 l
-3948 3506 l
-3816 3506 l
-3817 3506 m
-3948 3506 l
-3948 3507 l
-3817 3507 l
-3817 3507 m
-3949 3507 l
-3949 3508 l
-3817 3508 l
-3818 3508 m
-3949 3508 l
-3949 3510 l
-3818 3510 l
-3818 3510 m
-3950 3510 l
-3950 3511 l
-3818 3511 l
-3819 3511 m
-3950 3511 l
-3950 3512 l
-3819 3512 l
-3819 3512 m
-3950 3512 l
-3950 3513 l
-3819 3513 l
-3820 3513 m
-3950 3513 l
-3950 3514 l
-3820 3514 l
-3820 3514 m
-3948 3514 l
-3948 3515 l
-3820 3515 l
-3820 3515 m
-3946 3515 l
-3946 3516 l
-3820 3516 l
-3821 3516 m
-3943 3516 l
-3943 3517 l
-3821 3517 l
-3821 3517 m
-3941 3517 l
-3941 3518 l
-3821 3518 l
-3822 3518 m
-3938 3518 l
-3938 3519 l
-3822 3519 l
-3822 3519 m
-3936 3519 l
-3936 3520 l
-3822 3520 l
-3822 3520 m
-3933 3520 l
-3933 3521 l
-3822 3521 l
-3823 3521 m
-3931 3521 l
-3931 3522 l
-3823 3522 l
-3823 3522 m
-3928 3522 l
-3928 3523 l
-3823 3523 l
-3824 3523 m
-3926 3523 l
-3926 3524 l
-3824 3524 l
-3824 3524 m
-3923 3524 l
-3923 3525 l
-3824 3525 l
-3824 3525 m
-3921 3525 l
-3921 3526 l
-3824 3526 l
-3825 3526 m
-3918 3526 l
-3918 3527 l
-3825 3527 l
-3825 3527 m
-3916 3527 l
-3916 3528 l
-3825 3528 l
-3826 3528 m
-3913 3528 l
-3913 3529 l
-3826 3529 l
-3826 3529 m
-3911 3529 l
-3911 3530 l
-3826 3530 l
-3826 3530 m
-3908 3530 l
-3908 3531 l
-3826 3531 l
-3827 3531 m
-3906 3531 l
-3906 3532 l
-3827 3532 l
-3827 3532 m
-3903 3532 l
-3903 3533 l
-3827 3533 l
-3828 3533 m
-3901 3533 l
-3901 3534 l
-3828 3534 l
-3828 3534 m
-3898 3534 l
-3898 3535 l
-3828 3535 l
-3828 3535 m
-3896 3535 l
-3896 3536 l
-3828 3536 l
-3829 3536 m
-3893 3536 l
-3893 3537 l
-3829 3537 l
-3829 3537 m
-3891 3537 l
-3891 3538 l
-3829 3538 l
-3830 3538 m
-3888 3538 l
-3888 3539 l
-3830 3539 l
-3830 3539 m
-3886 3539 l
-3886 3540 l
-3830 3540 l
-3830 3540 m
-3883 3540 l
-3883 3541 l
-3830 3541 l
-3831 3541 m
-3881 3541 l
-3881 3542 l
-3831 3542 l
-3831 3542 m
-3878 3542 l
-3878 3543 l
-3831 3543 l
-3832 3543 m
-3876 3543 l
-3876 3544 l
-3832 3544 l
-3832 3544 m
-3873 3544 l
-3873 3545 l
-3832 3545 l
-3832 3545 m
-3871 3545 l
-3871 3546 l
-3832 3546 l
-3833 3546 m
-3868 3546 l
-3868 3547 l
-3833 3547 l
-3833 3547 m
-3866 3547 l
-3866 3548 l
-3833 3548 l
-3834 3548 m
-3863 3548 l
-3863 3549 l
-3834 3549 l
-3834 3549 m
-3861 3549 l
-3861 3550 l
-3834 3550 l
-3834 3550 m
-3858 3550 l
-3858 3551 l
-3834 3551 l
-3835 3551 m
-3856 3551 l
-3856 3552 l
-3835 3552 l
-3835 3552 m
-3853 3552 l
-3853 3553 l
-3835 3553 l
-3836 3553 m
-3851 3553 l
-3851 3554 l
-3836 3554 l
-3836 3554 m
-3848 3554 l
-3848 3555 l
-3836 3555 l
-3836 3555 m
-3846 3555 l
-3846 3556 l
-3836 3556 l
-3837 3556 m
-3843 3556 l
-3843 3557 l
-3837 3557 l
-3837 3557 m
-3841 3557 l
-3841 3558 l
-3837 3558 l
-Y
-3913.2 3420.2 m
-3801 3465 l
-3838 3558 l
-3950 3513 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3833 3502 m
-3832 3488 l
-3841 3476 l
-3859 3464 l
-3870 3460 l
-3891 3456 l
-3906 3459 l
-3915 3469 l
-3918 3477 l
-3919 3490 l
-3910 3502 l
-3892 3514 l
-3880 3519 l
-3860 3523 l
-3845 3519 l
-3836 3509 l
-3833 3502 l
-S
-1 g
-3305 2646 m
-3308 2646 l
-3308 2647 l
-3305 2647 l
-3304 2647 m
-3309 2647 l
-3309 2648 l
-3304 2648 l
-3304 2648 m
-3310 2648 l
-3310 2649 l
-3304 2649 l
-3303 2649 m
-3311 2649 l
-3311 2650 l
-3303 2650 l
-3302 2650 m
-3313 2650 l
-3313 2651 l
-3302 2651 l
-3301 2651 m
-3314 2651 l
-3314 2652 l
-3301 2652 l
-3300 2652 m
-3315 2652 l
-3315 2653 l
-3300 2653 l
-3300 2653 m
-3317 2653 l
-3317 2654 l
-3300 2654 l
-3299 2654 m
-3318 2654 l
-3318 2655 l
-3299 2655 l
-3298 2655 m
-3319 2655 l
-3319 2656 l
-3298 2656 l
-3297 2656 m
-3320 2656 l
-3320 2657 l
-3297 2657 l
-3296 2657 m
-3322 2657 l
-3322 2658 l
-3296 2658 l
-3296 2658 m
-3323 2658 l
-3323 2659 l
-3296 2659 l
-3295 2659 m
-3324 2659 l
-3324 2660 l
-3295 2660 l
-3294 2660 m
-3325 2660 l
-3325 2661 l
-3294 2661 l
-3293 2661 m
-3327 2661 l
-3327 2662 l
-3293 2662 l
-3292 2662 m
-3328 2662 l
-3328 2663 l
-3292 2663 l
-3292 2663 m
-3329 2663 l
-3329 2664 l
-3292 2664 l
-3291 2664 m
-3331 2664 l
-3331 2665 l
-3291 2665 l
-3290 2665 m
-3332 2665 l
-3332 2666 l
-3290 2666 l
-3289 2666 m
-3333 2666 l
-3333 2667 l
-3289 2667 l
-3288 2667 m
-3334 2667 l
-3334 2668 l
-3288 2668 l
-3288 2668 m
-3336 2668 l
-3336 2669 l
-3288 2669 l
-3287 2669 m
-3337 2669 l
-3337 2670 l
-3287 2670 l
-3286 2670 m
-3338 2670 l
-3338 2671 l
-3286 2671 l
-3285 2671 m
-3340 2671 l
-3340 2672 l
-3285 2672 l
-3284 2672 m
-3341 2672 l
-3341 2673 l
-3284 2673 l
-3284 2673 m
-3342 2673 l
-3342 2674 l
-3284 2674 l
-3283 2674 m
-3343 2674 l
-3343 2675 l
-3283 2675 l
-3282 2675 m
-3345 2675 l
-3345 2676 l
-3282 2676 l
-3281 2676 m
-3346 2676 l
-3346 2677 l
-3281 2677 l
-3281 2677 m
-3347 2677 l
-3347 2678 l
-3281 2678 l
-3280 2678 m
-3348 2678 l
-3348 2679 l
-3280 2679 l
-3279 2679 m
-3350 2679 l
-3350 2680 l
-3279 2680 l
-3278 2680 m
-3351 2680 l
-3351 2681 l
-3278 2681 l
-3277 2681 m
-3352 2681 l
-3352 2682 l
-3277 2682 l
-3277 2682 m
-3354 2682 l
-3354 2683 l
-3277 2683 l
-3276 2683 m
-3355 2683 l
-3355 2684 l
-3276 2684 l
-3275 2684 m
-3356 2684 l
-3356 2685 l
-3275 2685 l
-3274 2685 m
-3357 2685 l
-3357 2686 l
-3274 2686 l
-3273 2686 m
-3359 2686 l
-3359 2687 l
-3273 2687 l
-3273 2687 m
-3360 2687 l
-3360 2688 l
-3273 2688 l
-3272 2688 m
-3361 2688 l
-3361 2689 l
-3272 2689 l
-3271 2689 m
-3363 2689 l
-3363 2690 l
-3271 2690 l
-3270 2690 m
-3364 2690 l
-3364 2691 l
-3270 2691 l
-3269 2691 m
-3365 2691 l
-3365 2692 l
-3269 2692 l
-3269 2692 m
-3366 2692 l
-3366 2693 l
-3269 2693 l
-3268 2693 m
-3368 2693 l
-3368 2694 l
-3268 2694 l
-3267 2694 m
-3369 2694 l
-3369 2695 l
-3267 2695 l
-3266 2695 m
-3370 2695 l
-3370 2696 l
-3266 2696 l
-3265 2696 m
-3371 2696 l
-3371 2697 l
-3265 2697 l
-3265 2697 m
-3373 2697 l
-3373 2698 l
-3265 2698 l
-3264 2698 m
-3374 2698 l
-3374 2699 l
-3264 2699 l
-3263 2699 m
-3375 2699 l
-3375 2700 l
-3263 2700 l
-3262 2700 m
-3377 2700 l
-3377 2701 l
-3262 2701 l
-3261 2701 m
-3378 2701 l
-3378 2702 l
-3261 2702 l
-3261 2702 m
-3379 2702 l
-3379 2703 l
-3261 2703 l
-3260 2703 m
-3380 2703 l
-3380 2704 l
-3260 2704 l
-3259 2704 m
-3382 2704 l
-3382 2705 l
-3259 2705 l
-3258 2705 m
-3383 2705 l
-3383 2706 l
-3258 2706 l
-3257 2706 m
-3384 2706 l
-3384 2707 l
-3257 2707 l
-3257 2707 m
-3385 2707 l
-3385 2708 l
-3257 2708 l
-3256 2708 m
-3385 2708 l
-3385 2709 l
-3256 2709 l
-3255 2709 m
-3385 2709 l
-3385 2710 l
-3255 2710 l
-3254 2710 m
-3384 2710 l
-3384 2711 l
-3254 2711 l
-3254 2711 m
-3383 2711 l
-3383 2712 l
-3254 2712 l
-3253 2712 m
-3382 2712 l
-3382 2713 l
-3253 2713 l
-3252 2713 m
-3382 2713 l
-3382 2714 l
-3252 2714 l
-3251 2714 m
-3381 2714 l
-3381 2715 l
-3251 2715 l
-3250 2715 m
-3380 2715 l
-3380 2716 l
-3250 2716 l
-3250 2716 m
-3379 2716 l
-3379 2717 l
-3250 2717 l
-3249 2717 m
-3378 2717 l
-3378 2718 l
-3249 2718 l
-3248 2718 m
-3378 2718 l
-3378 2719 l
-3248 2719 l
-3247 2719 m
-3377 2719 l
-3377 2720 l
-3247 2720 l
-3246 2720 m
-3376 2720 l
-3376 2721 l
-3246 2721 l
-3246 2721 m
-3375 2721 l
-3375 2722 l
-3246 2722 l
-3245 2722 m
-3374 2722 l
-3374 2723 l
-3245 2723 l
-3244 2723 m
-3374 2723 l
-3374 2724 l
-3244 2724 l
-3243 2724 m
-3373 2724 l
-3373 2725 l
-3243 2725 l
-3242 2725 m
-3372 2725 l
-3372 2726 l
-3242 2726 l
-3242 2726 m
-3371 2726 l
-3371 2727 l
-3242 2727 l
-3241 2727 m
-3370 2727 l
-3370 2728 l
-3241 2728 l
-3240 2728 m
-3370 2728 l
-3370 2729 l
-3240 2729 l
-3239 2729 m
-3369 2729 l
-3369 2730 l
-3239 2730 l
-3238 2730 m
-3368 2730 l
-3368 2731 l
-3238 2731 l
-3238 2731 m
-3367 2731 l
-3367 2732 l
-3238 2732 l
-3237 2732 m
-3367 2732 l
-3367 2733 l
-3237 2733 l
-3236 2733 m
-3366 2733 l
-3366 2734 l
-3236 2734 l
-3235 2734 m
-3365 2734 l
-3365 2735 l
-3235 2735 l
-3234 2735 m
-3364 2735 l
-3364 2736 l
-3234 2736 l
-3234 2736 m
-3363 2736 l
-3363 2737 l
-3234 2737 l
-3233 2737 m
-3363 2737 l
-3363 2738 l
-3233 2738 l
-3232 2738 m
-3362 2738 l
-3362 2739 l
-3232 2739 l
-3231 2739 m
-3361 2739 l
-3361 2740 l
-3231 2740 l
-3231 2740 m
-3360 2740 l
-3360 2741 l
-3231 2741 l
-3231 2741 m
-3359 2741 l
-3359 2742 l
-3231 2742 l
-3232 2742 m
-3359 2742 l
-3359 2743 l
-3232 2743 l
-3233 2743 m
-3358 2743 l
-3358 2744 l
-3233 2744 l
-3234 2744 m
-3357 2744 l
-3357 2745 l
-3234 2745 l
-3236 2745 m
-3356 2745 l
-3356 2746 l
-3236 2746 l
-3237 2746 m
-3355 2746 l
-3355 2747 l
-3237 2747 l
-3238 2747 m
-3355 2747 l
-3355 2748 l
-3238 2748 l
-3239 2748 m
-3354 2748 l
-3354 2749 l
-3239 2749 l
-3241 2749 m
-3353 2749 l
-3353 2750 l
-3241 2750 l
-3242 2750 m
-3352 2750 l
-3352 2751 l
-3242 2751 l
-3243 2751 m
-3352 2751 l
-3352 2752 l
-3243 2752 l
-3245 2752 m
-3351 2752 l
-3351 2753 l
-3245 2753 l
-3246 2753 m
-3350 2753 l
-3350 2754 l
-3246 2754 l
-3247 2754 m
-3349 2754 l
-3349 2755 l
-3247 2755 l
-3248 2755 m
-3348 2755 l
-3348 2756 l
-3248 2756 l
-3250 2756 m
-3348 2756 l
-3348 2757 l
-3250 2757 l
-3251 2757 m
-3347 2757 l
-3347 2758 l
-3251 2758 l
-3252 2758 m
-3346 2758 l
-3346 2759 l
-3252 2759 l
-3253 2759 m
-3345 2759 l
-3345 2760 l
-3253 2760 l
-3255 2760 m
-3344 2760 l
-3344 2761 l
-3255 2761 l
-3256 2761 m
-3344 2761 l
-3344 2762 l
-3256 2762 l
-3257 2762 m
-3343 2762 l
-3343 2763 l
-3257 2763 l
-3259 2763 m
-3342 2763 l
-3342 2764 l
-3259 2764 l
-3260 2764 m
-3341 2764 l
-3341 2765 l
-3260 2765 l
-3261 2765 m
-3340 2765 l
-3340 2766 l
-3261 2766 l
-3262 2766 m
-3340 2766 l
-3340 2767 l
-3262 2767 l
-3264 2767 m
-3339 2767 l
-3339 2768 l
-3264 2768 l
-3265 2768 m
-3338 2768 l
-3338 2769 l
-3265 2769 l
-3266 2769 m
-3337 2769 l
-3337 2770 l
-3266 2770 l
-3267 2770 m
-3337 2770 l
-3337 2771 l
-3267 2771 l
-3269 2771 m
-3336 2771 l
-3336 2772 l
-3269 2772 l
-3270 2772 m
-3335 2772 l
-3335 2773 l
-3270 2773 l
-3271 2773 m
-3334 2773 l
-3334 2774 l
-3271 2774 l
-3273 2774 m
-3333 2774 l
-3333 2775 l
-3273 2775 l
-3274 2775 m
-3333 2775 l
-3333 2776 l
-3274 2776 l
-3275 2776 m
-3332 2776 l
-3332 2777 l
-3275 2777 l
-3276 2777 m
-3331 2777 l
-3331 2778 l
-3276 2778 l
-3278 2778 m
-3330 2778 l
-3330 2779 l
-3278 2779 l
-3279 2779 m
-3329 2779 l
-3329 2780 l
-3279 2780 l
-3280 2780 m
-3329 2780 l
-3329 2781 l
-3280 2781 l
-3281 2781 m
-3328 2781 l
-3328 2782 l
-3281 2782 l
-3283 2782 m
-3327 2782 l
-3327 2783 l
-3283 2783 l
-3284 2783 m
-3326 2783 l
-3326 2784 l
-3284 2784 l
-3285 2784 m
-3325 2784 l
-3325 2785 l
-3285 2785 l
-3287 2785 m
-3325 2785 l
-3325 2786 l
-3287 2786 l
-3288 2786 m
-3324 2786 l
-3324 2787 l
-3288 2787 l
-3289 2787 m
-3323 2787 l
-3323 2788 l
-3289 2788 l
-3290 2788 m
-3322 2788 l
-3322 2789 l
-3290 2789 l
-3292 2789 m
-3322 2789 l
-3322 2790 l
-3292 2790 l
-3293 2790 m
-3321 2790 l
-3321 2791 l
-3293 2791 l
-3294 2791 m
-3320 2791 l
-3320 2792 l
-3294 2792 l
-3295 2792 m
-3319 2792 l
-3319 2793 l
-3295 2793 l
-3297 2793 m
-3318 2793 l
-3318 2794 l
-3297 2794 l
-3298 2794 m
-3318 2794 l
-3318 2795 l
-3298 2795 l
-3299 2795 m
-3317 2795 l
-3317 2796 l
-3299 2796 l
-3301 2796 m
-3316 2796 l
-3316 2797 l
-3301 2797 l
-3302 2797 m
-3315 2797 l
-3315 2798 l
-3302 2798 l
-3303 2798 m
-3314 2798 l
-3314 2799 l
-3303 2799 l
-3304 2799 m
-3314 2799 l
-3314 2800 l
-3304 2800 l
-3306 2800 m
-3313 2800 l
-3313 2801 l
-3306 2801 l
-3307 2801 m
-3312 2801 l
-3312 2802 l
-3307 2802 l
-3308 2802 m
-3311 2802 l
-3311 2803 l
-3308 2803 l
-Y
-3306.2 2646.3 m
-3231 2741 l
-3310 2803 l
-3385 2708 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3274 2727 m
-3272 2731 l
-3270 2740 l
-3270 2746 l
-3274 2754 l
-3287 2764 l
-3297 2766 l
-3302 2766 l
-3311 2762 l
-3316 2755 l
-3318 2746 l
-3319 2731 l
-3312 2672 l
-3358 2709 l
-S
-1 g
-2393 2280 m
-2403 2280 l
-2403 2281 l
-2393 2281 l
-2393 2281 m
-2410 2281 l
-2410 2282 l
-2393 2282 l
-2393 2282 m
-2417 2282 l
-2417 2283 l
-2393 2283 l
-2393 2283 m
-2423 2283 l
-2423 2284 l
-2393 2284 l
-2393 2284 m
-2430 2284 l
-2430 2285 l
-2393 2285 l
-2392 2285 m
-2437 2285 l
-2437 2286 l
-2392 2286 l
-2392 2286 m
-2444 2286 l
-2444 2287 l
-2392 2287 l
-2392 2287 m
-2450 2287 l
-2450 2288 l
-2392 2288 l
-2392 2288 m
-2457 2288 l
-2457 2289 l
-2392 2289 l
-2392 2289 m
-2464 2289 l
-2464 2290 l
-2392 2290 l
-2392 2290 m
-2471 2290 l
-2471 2291 l
-2392 2291 l
-2391 2291 m
-2477 2291 l
-2477 2292 l
-2391 2292 l
-2391 2292 m
-2484 2292 l
-2484 2293 l
-2391 2293 l
-2391 2293 m
-2491 2293 l
-2491 2294 l
-2391 2294 l
-2391 2294 m
-2497 2294 l
-2497 2295 l
-2391 2295 l
-2391 2295 m
-2498 2295 l
-2498 2296 l
-2391 2296 l
-2391 2296 m
-2497 2296 l
-2497 2298 l
-2391 2298 l
-2390 2298 m
-2497 2298 l
-2497 2303 l
-2390 2303 l
-2390 2303 m
-2496 2303 l
-2496 2305 l
-2390 2305 l
-2389 2305 m
-2496 2305 l
-2496 2310 l
-2389 2310 l
-2389 2310 m
-2495 2310 l
-2495 2312 l
-2389 2312 l
-2388 2312 m
-2495 2312 l
-2495 2317 l
-2388 2317 l
-2388 2317 m
-2494 2317 l
-2494 2318 l
-2388 2318 l
-2387 2318 m
-2494 2318 l
-2494 2324 l
-2387 2324 l
-2387 2324 m
-2493 2324 l
-2493 2325 l
-2387 2325 l
-2386 2325 m
-2493 2325 l
-2493 2331 l
-2386 2331 l
-2386 2331 m
-2492 2331 l
-2492 2332 l
-2386 2332 l
-2385 2332 m
-2492 2332 l
-2492 2338 l
-2385 2338 l
-2385 2338 m
-2491 2338 l
-2491 2339 l
-2385 2339 l
-2384 2339 m
-2491 2339 l
-2491 2345 l
-2384 2345 l
-2383 2345 m
-2490 2345 l
-2490 2352 l
-2383 2352 l
-2382 2352 m
-2489 2352 l
-2489 2359 l
-2382 2359 l
-2381 2359 m
-2488 2359 l
-2488 2366 l
-2381 2366 l
-2380 2366 m
-2487 2366 l
-2487 2372 l
-2380 2372 l
-2379 2372 m
-2487 2372 l
-2487 2373 l
-2379 2373 l
-2379 2373 m
-2486 2373 l
-2486 2379 l
-2379 2379 l
-2378 2379 m
-2486 2379 l
-2486 2380 l
-2378 2380 l
-2378 2380 m
-2485 2380 l
-2485 2386 l
-2378 2386 l
-2377 2386 m
-2485 2386 l
-2485 2387 l
-2377 2387 l
-2377 2387 m
-2484 2387 l
-2484 2393 l
-2377 2393 l
-2376 2393 m
-2484 2393 l
-2484 2394 l
-2376 2394 l
-2376 2394 m
-2483 2394 l
-2483 2400 l
-2376 2400 l
-2376 2400 m
-2483 2400 l
-2483 2401 l
-2376 2401 l
-2382 2401 m
-2482 2401 l
-2482 2402 l
-2382 2402 l
-2389 2402 m
-2482 2402 l
-2482 2403 l
-2389 2403 l
-2396 2403 m
-2482 2403 l
-2482 2404 l
-2396 2404 l
-2403 2404 m
-2482 2404 l
-2482 2405 l
-2403 2405 l
-2410 2405 m
-2482 2405 l
-2482 2406 l
-2410 2406 l
-2417 2406 m
-2482 2406 l
-2482 2407 l
-2417 2407 l
-2424 2407 m
-2482 2407 l
-2482 2408 l
-2424 2408 l
-2431 2408 m
-2481 2408 l
-2481 2409 l
-2431 2409 l
-2438 2409 m
-2481 2409 l
-2481 2410 l
-2438 2410 l
-2445 2410 m
-2481 2410 l
-2481 2411 l
-2445 2411 l
-2452 2411 m
-2481 2411 l
-2481 2412 l
-2452 2412 l
-2459 2412 m
-2481 2412 l
-2481 2413 l
-2459 2413 l
-2466 2413 m
-2481 2413 l
-2481 2414 l
-2466 2414 l
-2473 2414 m
-2481 2414 l
-2481 2415 l
-2473 2415 l
-Y
-2393.8 2279.7 m
-2376 2400 l
-2480 2415 l
-2497 2295 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-2441 2392 m
-2408 2328 l
-2470 2337 l
-S
-2441 2392 m
-2453 2305 l
-S
-1 g
-1513 2399 m
-1517 2399 l
-1517 2400 l
-1513 2400 l
-1510 2400 m
-1517 2400 l
-1517 2401 l
-1510 2401 l
-1508 2401 m
-1518 2401 l
-1518 2402 l
-1508 2402 l
-1505 2402 m
-1518 2402 l
-1518 2403 l
-1505 2403 l
-1503 2403 m
-1518 2403 l
-1518 2404 l
-1503 2404 l
-1500 2404 m
-1519 2404 l
-1519 2405 l
-1500 2405 l
-1498 2405 m
-1519 2405 l
-1519 2406 l
-1498 2406 l
-1495 2406 m
-1520 2406 l
-1520 2407 l
-1495 2407 l
-1493 2407 m
-1520 2407 l
-1520 2408 l
-1493 2408 l
-1490 2408 m
-1520 2408 l
-1520 2409 l
-1490 2409 l
-1488 2409 m
-1521 2409 l
-1521 2410 l
-1488 2410 l
-1485 2410 m
-1521 2410 l
-1521 2411 l
-1485 2411 l
-1482 2411 m
-1522 2411 l
-1522 2412 l
-1482 2412 l
-1480 2412 m
-1522 2412 l
-1522 2413 l
-1480 2413 l
-1477 2413 m
-1522 2413 l
-1522 2414 l
-1477 2414 l
-1475 2414 m
-1523 2414 l
-1523 2415 l
-1475 2415 l
-1472 2415 m
-1523 2415 l
-1523 2416 l
-1472 2416 l
-1470 2416 m
-1524 2416 l
-1524 2417 l
-1470 2417 l
-1467 2417 m
-1524 2417 l
-1524 2418 l
-1467 2418 l
-1465 2418 m
-1524 2418 l
-1524 2419 l
-1465 2419 l
-1462 2419 m
-1525 2419 l
-1525 2420 l
-1462 2420 l
-1460 2420 m
-1525 2420 l
-1525 2421 l
-1460 2421 l
-1457 2421 m
-1526 2421 l
-1526 2422 l
-1457 2422 l
-1454 2422 m
-1526 2422 l
-1526 2423 l
-1454 2423 l
-1452 2423 m
-1526 2423 l
-1526 2424 l
-1452 2424 l
-1449 2424 m
-1527 2424 l
-1527 2425 l
-1449 2425 l
-1447 2425 m
-1527 2425 l
-1527 2426 l
-1447 2426 l
-1444 2426 m
-1528 2426 l
-1528 2427 l
-1444 2427 l
-1442 2427 m
-1528 2427 l
-1528 2428 l
-1442 2428 l
-1439 2428 m
-1528 2428 l
-1528 2429 l
-1439 2429 l
-1437 2429 m
-1529 2429 l
-1529 2430 l
-1437 2430 l
-1434 2430 m
-1529 2430 l
-1529 2431 l
-1434 2431 l
-1432 2431 m
-1530 2431 l
-1530 2432 l
-1432 2432 l
-1429 2432 m
-1530 2432 l
-1530 2433 l
-1429 2433 l
-1427 2433 m
-1530 2433 l
-1530 2434 l
-1427 2434 l
-1427 2434 m
-1531 2434 l
-1531 2436 l
-1427 2436 l
-1427 2436 m
-1532 2436 l
-1532 2437 l
-1427 2437 l
-1428 2437 m
-1532 2437 l
-1532 2439 l
-1428 2439 l
-1428 2439 m
-1533 2439 l
-1533 2440 l
-1428 2440 l
-1429 2440 m
-1533 2440 l
-1533 2441 l
-1429 2441 l
-1429 2441 m
-1534 2441 l
-1534 2442 l
-1429 2442 l
-1430 2442 m
-1534 2442 l
-1534 2444 l
-1430 2444 l
-1430 2444 m
-1535 2444 l
-1535 2445 l
-1430 2445 l
-1431 2445 m
-1535 2445 l
-1535 2446 l
-1431 2446 l
-1431 2446 m
-1536 2446 l
-1536 2447 l
-1431 2447 l
-1432 2447 m
-1536 2447 l
-1536 2449 l
-1432 2449 l
-1432 2449 m
-1537 2449 l
-1537 2450 l
-1432 2450 l
-1433 2450 m
-1537 2450 l
-1537 2451 l
-1433 2451 l
-1433 2451 m
-1538 2451 l
-1538 2452 l
-1433 2452 l
-1434 2452 m
-1538 2452 l
-1538 2454 l
-1434 2454 l
-1434 2454 m
-1539 2454 l
-1539 2455 l
-1434 2455 l
-1435 2455 m
-1539 2455 l
-1539 2456 l
-1435 2456 l
-1435 2456 m
-1540 2456 l
-1540 2457 l
-1435 2457 l
-1436 2457 m
-1540 2457 l
-1540 2459 l
-1436 2459 l
-1436 2459 m
-1541 2459 l
-1541 2460 l
-1436 2460 l
-1437 2460 m
-1541 2460 l
-1541 2461 l
-1437 2461 l
-1437 2461 m
-1542 2461 l
-1542 2462 l
-1437 2462 l
-1438 2462 m
-1542 2462 l
-1542 2464 l
-1438 2464 l
-1438 2464 m
-1543 2464 l
-1543 2465 l
-1438 2465 l
-1439 2465 m
-1543 2465 l
-1543 2466 l
-1439 2466 l
-1439 2466 m
-1544 2466 l
-1544 2467 l
-1439 2467 l
-1440 2467 m
-1544 2467 l
-1544 2469 l
-1440 2469 l
-1440 2469 m
-1545 2469 l
-1545 2470 l
-1440 2470 l
-1441 2470 m
-1545 2470 l
-1545 2471 l
-1441 2471 l
-1441 2471 m
-1546 2471 l
-1546 2472 l
-1441 2472 l
-1442 2472 m
-1546 2472 l
-1546 2474 l
-1442 2474 l
-1442 2474 m
-1547 2474 l
-1547 2475 l
-1442 2475 l
-1443 2475 m
-1547 2475 l
-1547 2476 l
-1443 2476 l
-1443 2476 m
-1548 2476 l
-1548 2477 l
-1443 2477 l
-1444 2477 m
-1548 2477 l
-1548 2479 l
-1444 2479 l
-1444 2479 m
-1549 2479 l
-1549 2480 l
-1444 2480 l
-1445 2480 m
-1549 2480 l
-1549 2481 l
-1445 2481 l
-1445 2481 m
-1550 2481 l
-1550 2482 l
-1445 2482 l
-1446 2482 m
-1550 2482 l
-1550 2484 l
-1446 2484 l
-1446 2484 m
-1551 2484 l
-1551 2485 l
-1446 2485 l
-1447 2485 m
-1551 2485 l
-1551 2486 l
-1447 2486 l
-1447 2486 m
-1552 2486 l
-1552 2487 l
-1447 2487 l
-1448 2487 m
-1552 2487 l
-1552 2489 l
-1448 2489 l
-1448 2489 m
-1553 2489 l
-1553 2490 l
-1448 2490 l
-1449 2490 m
-1553 2490 l
-1553 2491 l
-1449 2491 l
-1449 2491 m
-1554 2491 l
-1554 2492 l
-1449 2492 l
-1450 2492 m
-1554 2492 l
-1554 2494 l
-1450 2494 l
-1450 2494 m
-1555 2494 l
-1555 2495 l
-1450 2495 l
-1451 2495 m
-1555 2495 l
-1555 2496 l
-1451 2496 l
-1451 2496 m
-1556 2496 l
-1556 2497 l
-1451 2497 l
-1452 2497 m
-1556 2497 l
-1556 2499 l
-1452 2499 l
-1452 2499 m
-1557 2499 l
-1557 2500 l
-1452 2500 l
-1453 2500 m
-1557 2500 l
-1557 2501 l
-1453 2501 l
-1453 2501 m
-1558 2501 l
-1558 2502 l
-1453 2502 l
-1454 2502 m
-1558 2502 l
-1558 2504 l
-1454 2504 l
-1454 2504 m
-1559 2504 l
-1559 2505 l
-1454 2505 l
-1455 2505 m
-1559 2505 l
-1559 2506 l
-1455 2506 l
-1455 2506 m
-1560 2506 l
-1560 2507 l
-1455 2507 l
-1456 2507 m
-1560 2507 l
-1560 2509 l
-1456 2509 l
-1456 2509 m
-1561 2509 l
-1561 2510 l
-1456 2510 l
-1457 2510 m
-1561 2510 l
-1561 2511 l
-1457 2511 l
-1457 2511 m
-1561 2511 l
-1561 2512 l
-1457 2512 l
-1458 2512 m
-1559 2512 l
-1559 2513 l
-1458 2513 l
-1458 2513 m
-1556 2513 l
-1556 2514 l
-1458 2514 l
-1458 2514 m
-1554 2514 l
-1554 2515 l
-1458 2515 l
-1459 2515 m
-1551 2515 l
-1551 2516 l
-1459 2516 l
-1459 2516 m
-1549 2516 l
-1549 2517 l
-1459 2517 l
-1460 2517 m
-1546 2517 l
-1546 2518 l
-1460 2518 l
-1460 2518 m
-1544 2518 l
-1544 2519 l
-1460 2519 l
-1460 2519 m
-1541 2519 l
-1541 2520 l
-1460 2520 l
-1461 2520 m
-1539 2520 l
-1539 2521 l
-1461 2521 l
-1461 2521 m
-1537 2521 l
-1537 2522 l
-1461 2522 l
-1462 2522 m
-1534 2522 l
-1534 2523 l
-1462 2523 l
-1462 2523 m
-1532 2523 l
-1532 2524 l
-1462 2524 l
-1462 2524 m
-1529 2524 l
-1529 2525 l
-1462 2525 l
-1463 2525 m
-1527 2525 l
-1527 2526 l
-1463 2526 l
-1463 2526 m
-1524 2526 l
-1524 2527 l
-1463 2527 l
-1464 2527 m
-1522 2527 l
-1522 2528 l
-1464 2528 l
-1464 2528 m
-1519 2528 l
-1519 2529 l
-1464 2529 l
-1464 2529 m
-1517 2529 l
-1517 2530 l
-1464 2530 l
-1465 2530 m
-1514 2530 l
-1514 2531 l
-1465 2531 l
-1465 2531 m
-1512 2531 l
-1512 2532 l
-1465 2532 l
-1466 2532 m
-1509 2532 l
-1509 2533 l
-1466 2533 l
-1466 2533 m
-1507 2533 l
-1507 2534 l
-1466 2534 l
-1466 2534 m
-1505 2534 l
-1505 2535 l
-1466 2535 l
-1467 2535 m
-1502 2535 l
-1502 2536 l
-1467 2536 l
-1467 2536 m
-1500 2536 l
-1500 2537 l
-1467 2537 l
-1468 2537 m
-1497 2537 l
-1497 2538 l
-1468 2538 l
-1468 2538 m
-1495 2538 l
-1495 2539 l
-1468 2539 l
-1468 2539 m
-1492 2539 l
-1492 2540 l
-1468 2540 l
-1469 2540 m
-1490 2540 l
-1490 2541 l
-1469 2541 l
-1469 2541 m
-1487 2541 l
-1487 2542 l
-1469 2542 l
-1470 2542 m
-1485 2542 l
-1485 2543 l
-1470 2543 l
-1470 2543 m
-1482 2543 l
-1482 2544 l
-1470 2544 l
-1470 2544 m
-1480 2544 l
-1480 2545 l
-1470 2545 l
-1471 2545 m
-1477 2545 l
-1477 2546 l
-1471 2546 l
-1471 2546 m
-1475 2546 l
-1475 2547 l
-1471 2547 l
-Y
-1560.7 2511 m
-1516 2399 l
-1427 2434 l
-1472 2547 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-1461 2452 m
-1462 2443 l
-1472 2434 l
-1479 2431 l
-1493 2430 l
-1505 2439 l
-1517 2457 l
-1524 2476 l
-1527 2493 l
-1522 2504 l
-1512 2513 l
-1508 2514 l
-1495 2515 l
-1484 2510 l
-1475 2500 l
-1474 2496 l
-1473 2483 l
-1478 2472 l
-1488 2464 l
-1492 2462 l
-1505 2461 l
-1516 2466 l
-1524 2476 l
-S
-1 g
-721 2958 m
-724 2958 l
-724 2959 l
-721 2959 l
-720 2959 m
-725 2959 l
-725 2960 l
-720 2960 l
-719 2960 m
-726 2960 l
-726 2961 l
-719 2961 l
-718 2961 m
-728 2961 l
-728 2962 l
-718 2962 l
-718 2962 m
-729 2962 l
-729 2963 l
-718 2963 l
-717 2963 m
-730 2963 l
-730 2964 l
-717 2964 l
-716 2964 m
-731 2964 l
-731 2965 l
-716 2965 l
-715 2965 m
-733 2965 l
-733 2966 l
-715 2966 l
-714 2966 m
-734 2966 l
-734 2967 l
-714 2967 l
-714 2967 m
-735 2967 l
-735 2968 l
-714 2968 l
-713 2968 m
-737 2968 l
-737 2969 l
-713 2969 l
-712 2969 m
-738 2969 l
-738 2970 l
-712 2970 l
-711 2970 m
-739 2970 l
-739 2971 l
-711 2971 l
-710 2971 m
-740 2971 l
-740 2972 l
-710 2972 l
-710 2972 m
-742 2972 l
-742 2973 l
-710 2973 l
-709 2973 m
-743 2973 l
-743 2974 l
-709 2974 l
-708 2974 m
-744 2974 l
-744 2975 l
-708 2975 l
-707 2975 m
-746 2975 l
-746 2976 l
-707 2976 l
-706 2976 m
-747 2976 l
-747 2977 l
-706 2977 l
-706 2977 m
-748 2977 l
-748 2978 l
-706 2978 l
-705 2978 m
-749 2978 l
-749 2979 l
-705 2979 l
-704 2979 m
-751 2979 l
-751 2980 l
-704 2980 l
-703 2980 m
-752 2980 l
-752 2981 l
-703 2981 l
-702 2981 m
-753 2981 l
-753 2982 l
-702 2982 l
-702 2982 m
-754 2982 l
-754 2983 l
-702 2983 l
-701 2983 m
-756 2983 l
-756 2984 l
-701 2984 l
-700 2984 m
-757 2984 l
-757 2985 l
-700 2985 l
-699 2985 m
-758 2985 l
-758 2986 l
-699 2986 l
-698 2986 m
-760 2986 l
-760 2987 l
-698 2987 l
-698 2987 m
-761 2987 l
-761 2988 l
-698 2988 l
-697 2988 m
-762 2988 l
-762 2989 l
-697 2989 l
-696 2989 m
-763 2989 l
-763 2990 l
-696 2990 l
-695 2990 m
-765 2990 l
-765 2991 l
-695 2991 l
-694 2991 m
-766 2991 l
-766 2992 l
-694 2992 l
-694 2992 m
-767 2992 l
-767 2993 l
-694 2993 l
-693 2993 m
-769 2993 l
-769 2994 l
-693 2994 l
-692 2994 m
-770 2994 l
-770 2995 l
-692 2995 l
-691 2995 m
-771 2995 l
-771 2996 l
-691 2996 l
-691 2996 m
-772 2996 l
-772 2997 l
-691 2997 l
-690 2997 m
-774 2997 l
-774 2998 l
-690 2998 l
-689 2998 m
-775 2998 l
-775 2999 l
-689 2999 l
-688 2999 m
-776 2999 l
-776 3000 l
-688 3000 l
-687 3000 m
-778 3000 l
-778 3001 l
-687 3001 l
-687 3001 m
-779 3001 l
-779 3002 l
-687 3002 l
-686 3002 m
-780 3002 l
-780 3003 l
-686 3003 l
-685 3003 m
-781 3003 l
-781 3004 l
-685 3004 l
-684 3004 m
-783 3004 l
-783 3005 l
-684 3005 l
-683 3005 m
-784 3005 l
-784 3006 l
-683 3006 l
-683 3006 m
-785 3006 l
-785 3007 l
-683 3007 l
-682 3007 m
-786 3007 l
-786 3008 l
-682 3008 l
-681 3008 m
-788 3008 l
-788 3009 l
-681 3009 l
-680 3009 m
-789 3009 l
-789 3010 l
-680 3010 l
-679 3010 m
-790 3010 l
-790 3011 l
-679 3011 l
-679 3011 m
-792 3011 l
-792 3012 l
-679 3012 l
-678 3012 m
-793 3012 l
-793 3013 l
-678 3013 l
-677 3013 m
-794 3013 l
-794 3014 l
-677 3014 l
-676 3014 m
-795 3014 l
-795 3015 l
-676 3015 l
-675 3015 m
-797 3015 l
-797 3016 l
-675 3016 l
-675 3016 m
-798 3016 l
-798 3017 l
-675 3017 l
-674 3017 m
-799 3017 l
-799 3018 l
-674 3018 l
-673 3018 m
-801 3018 l
-801 3019 l
-673 3019 l
-672 3019 m
-802 3019 l
-802 3020 l
-672 3020 l
-671 3020 m
-803 3020 l
-803 3021 l
-671 3021 l
-671 3021 m
-804 3021 l
-804 3022 l
-671 3022 l
-670 3022 m
-806 3022 l
-806 3023 l
-670 3023 l
-669 3023 m
-807 3023 l
-807 3024 l
-669 3024 l
-668 3024 m
-808 3024 l
-808 3025 l
-668 3025 l
-667 3025 m
-809 3025 l
-809 3026 l
-667 3026 l
-667 3026 m
-811 3026 l
-811 3027 l
-667 3027 l
-666 3027 m
-812 3027 l
-812 3028 l
-666 3028 l
-665 3028 m
-813 3028 l
-813 3029 l
-665 3029 l
-664 3029 m
-815 3029 l
-815 3030 l
-664 3030 l
-663 3030 m
-816 3030 l
-816 3031 l
-663 3031 l
-663 3031 m
-817 3031 l
-817 3032 l
-663 3032 l
-662 3032 m
-818 3032 l
-818 3033 l
-662 3033 l
-661 3033 m
-817 3033 l
-817 3034 l
-661 3034 l
-660 3034 m
-817 3034 l
-817 3035 l
-660 3035 l
-660 3035 m
-816 3035 l
-816 3036 l
-660 3036 l
-660 3036 m
-815 3036 l
-815 3037 l
-660 3037 l
-661 3037 m
-814 3037 l
-814 3038 l
-661 3038 l
-662 3038 m
-813 3038 l
-813 3039 l
-662 3039 l
-663 3039 m
-813 3039 l
-813 3040 l
-663 3040 l
-665 3040 m
-812 3040 l
-812 3041 l
-665 3041 l
-666 3041 m
-811 3041 l
-811 3042 l
-666 3042 l
-667 3042 m
-810 3042 l
-810 3043 l
-667 3043 l
-668 3043 m
-809 3043 l
-809 3044 l
-668 3044 l
-670 3044 m
-809 3044 l
-809 3045 l
-670 3045 l
-671 3045 m
-808 3045 l
-808 3046 l
-671 3046 l
-672 3046 m
-807 3046 l
-807 3047 l
-672 3047 l
-673 3047 m
-806 3047 l
-806 3048 l
-673 3048 l
-675 3048 m
-805 3048 l
-805 3049 l
-675 3049 l
-676 3049 m
-805 3049 l
-805 3050 l
-676 3050 l
-677 3050 m
-804 3050 l
-804 3051 l
-677 3051 l
-679 3051 m
-803 3051 l
-803 3052 l
-679 3052 l
-680 3052 m
-802 3052 l
-802 3053 l
-680 3053 l
-681 3053 m
-802 3053 l
-802 3054 l
-681 3054 l
-682 3054 m
-801 3054 l
-801 3055 l
-682 3055 l
-684 3055 m
-800 3055 l
-800 3056 l
-684 3056 l
-685 3056 m
-799 3056 l
-799 3057 l
-685 3057 l
-686 3057 m
-798 3057 l
-798 3058 l
-686 3058 l
-687 3058 m
-798 3058 l
-798 3059 l
-687 3059 l
-689 3059 m
-797 3059 l
-797 3060 l
-689 3060 l
-690 3060 m
-796 3060 l
-796 3061 l
-690 3061 l
-691 3061 m
-795 3061 l
-795 3062 l
-691 3062 l
-692 3062 m
-794 3062 l
-794 3063 l
-692 3063 l
-694 3063 m
-794 3063 l
-794 3064 l
-694 3064 l
-695 3064 m
-793 3064 l
-793 3065 l
-695 3065 l
-696 3065 m
-792 3065 l
-792 3066 l
-696 3066 l
-698 3066 m
-791 3066 l
-791 3067 l
-698 3067 l
-699 3067 m
-790 3067 l
-790 3068 l
-699 3068 l
-700 3068 m
-790 3068 l
-790 3069 l
-700 3069 l
-701 3069 m
-789 3069 l
-789 3070 l
-701 3070 l
-703 3070 m
-788 3070 l
-788 3071 l
-703 3071 l
-704 3071 m
-787 3071 l
-787 3072 l
-704 3072 l
-705 3072 m
-786 3072 l
-786 3073 l
-705 3073 l
-706 3073 m
-786 3073 l
-786 3074 l
-706 3074 l
-708 3074 m
-785 3074 l
-785 3075 l
-708 3075 l
-709 3075 m
-784 3075 l
-784 3076 l
-709 3076 l
-710 3076 m
-783 3076 l
-783 3077 l
-710 3077 l
-711 3077 m
-782 3077 l
-782 3078 l
-711 3078 l
-713 3078 m
-782 3078 l
-782 3079 l
-713 3079 l
-714 3079 m
-781 3079 l
-781 3080 l
-714 3080 l
-715 3080 m
-780 3080 l
-780 3081 l
-715 3081 l
-717 3081 m
-779 3081 l
-779 3082 l
-717 3082 l
-718 3082 m
-779 3082 l
-779 3083 l
-718 3083 l
-719 3083 m
-778 3083 l
-778 3084 l
-719 3084 l
-720 3084 m
-777 3084 l
-777 3085 l
-720 3085 l
-722 3085 m
-776 3085 l
-776 3086 l
-722 3086 l
-723 3086 m
-775 3086 l
-775 3087 l
-723 3087 l
-724 3087 m
-775 3087 l
-775 3088 l
-724 3088 l
-725 3088 m
-774 3088 l
-774 3089 l
-725 3089 l
-727 3089 m
-773 3089 l
-773 3090 l
-727 3090 l
-728 3090 m
-772 3090 l
-772 3091 l
-728 3091 l
-729 3091 m
-771 3091 l
-771 3092 l
-729 3092 l
-730 3092 m
-771 3092 l
-771 3093 l
-730 3093 l
-732 3093 m
-770 3093 l
-770 3094 l
-732 3094 l
-733 3094 m
-769 3094 l
-769 3095 l
-733 3095 l
-734 3095 m
-768 3095 l
-768 3096 l
-734 3096 l
-736 3096 m
-767 3096 l
-767 3097 l
-736 3097 l
-737 3097 m
-767 3097 l
-767 3098 l
-737 3098 l
-738 3098 m
-766 3098 l
-766 3099 l
-738 3099 l
-739 3099 m
-765 3099 l
-765 3100 l
-739 3100 l
-741 3100 m
-764 3100 l
-764 3101 l
-741 3101 l
-742 3101 m
-763 3101 l
-763 3102 l
-742 3102 l
-743 3102 m
-763 3102 l
-763 3103 l
-743 3103 l
-744 3103 m
-762 3103 l
-762 3104 l
-744 3104 l
-746 3104 m
-761 3104 l
-761 3105 l
-746 3105 l
-747 3105 m
-760 3105 l
-760 3106 l
-747 3106 l
-748 3106 m
-759 3106 l
-759 3107 l
-748 3107 l
-749 3107 m
-759 3107 l
-759 3108 l
-749 3108 l
-751 3108 m
-758 3108 l
-758 3109 l
-751 3109 l
-752 3109 m
-757 3109 l
-757 3110 l
-752 3110 l
-753 3110 m
-756 3110 l
-756 3111 l
-753 3111 l
-Y
-817.3 3032.5 m
-722 2958 l
-660 3036 l
-755 3111 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-709 3001 m
-720 2993 l
-730 2995 l
-736 3000 l
-740 3009 l
-738 3018 l
-731 3034 l
-727 3046 l
-728 3058 l
-732 3066 l
-742 3074 l
-751 3076 l
-757 3075 l
-768 3068 l
-778 3055 l
-783 3043 l
-782 3037 l
-778 3028 l
-768 3020 l
-759 3019 l
-747 3020 l
-736 3027 l
-723 3038 l
-714 3042 l
-705 3040 l
-699 3035 l
-695 3026 l
-699 3014 l
-709 3001 l
-S
-1 g
-1009 5498 m
-1013 5498 l
-1013 5499 l
-1009 5499 l
-1008 5499 m
-1014 5499 l
-1014 5500 l
-1008 5500 l
-1007 5500 m
-1015 5500 l
-1015 5501 l
-1007 5501 l
-1006 5501 m
-1017 5501 l
-1017 5502 l
-1006 5502 l
-1006 5502 m
-1018 5502 l
-1018 5503 l
-1006 5503 l
-1005 5503 m
-1019 5503 l
-1019 5504 l
-1005 5504 l
-1004 5504 m
-1020 5504 l
-1020 5505 l
-1004 5505 l
-1003 5505 m
-1022 5505 l
-1022 5506 l
-1003 5506 l
-1002 5506 m
-1023 5506 l
-1023 5507 l
-1002 5507 l
-1002 5507 m
-1024 5507 l
-1024 5508 l
-1002 5508 l
-1001 5508 m
-1025 5508 l
-1025 5509 l
-1001 5509 l
-1000 5509 m
-1027 5509 l
-1027 5510 l
-1000 5510 l
-999 5510 m
-1028 5510 l
-1028 5511 l
-999 5511 l
-998 5511 m
-1029 5511 l
-1029 5512 l
-998 5512 l
-998 5512 m
-1030 5512 l
-1030 5513 l
-998 5513 l
-997 5513 m
-1032 5513 l
-1032 5514 l
-997 5514 l
-996 5514 m
-1033 5514 l
-1033 5515 l
-996 5515 l
-995 5515 m
-1034 5515 l
-1034 5516 l
-995 5516 l
-994 5516 m
-1035 5516 l
-1035 5517 l
-994 5517 l
-994 5517 m
-1037 5517 l
-1037 5518 l
-994 5518 l
-993 5518 m
-1038 5518 l
-1038 5519 l
-993 5519 l
-992 5519 m
-1039 5519 l
-1039 5520 l
-992 5520 l
-991 5520 m
-1040 5520 l
-1040 5521 l
-991 5521 l
-990 5521 m
-1042 5521 l
-1042 5522 l
-990 5522 l
-990 5522 m
-1043 5522 l
-1043 5523 l
-990 5523 l
-989 5523 m
-1044 5523 l
-1044 5524 l
-989 5524 l
-988 5524 m
-1045 5524 l
-1045 5525 l
-988 5525 l
-987 5525 m
-1047 5525 l
-1047 5526 l
-987 5526 l
-986 5526 m
-1048 5526 l
-1048 5527 l
-986 5527 l
-986 5527 m
-1049 5527 l
-1049 5528 l
-986 5528 l
-985 5528 m
-1050 5528 l
-1050 5529 l
-985 5529 l
-984 5529 m
-1052 5529 l
-1052 5530 l
-984 5530 l
-983 5530 m
-1053 5530 l
-1053 5531 l
-983 5531 l
-982 5531 m
-1054 5531 l
-1054 5532 l
-982 5532 l
-982 5532 m
-1055 5532 l
-1055 5533 l
-982 5533 l
-981 5533 m
-1057 5533 l
-1057 5534 l
-981 5534 l
-980 5534 m
-1058 5534 l
-1058 5535 l
-980 5535 l
-979 5535 m
-1059 5535 l
-1059 5536 l
-979 5536 l
-978 5536 m
-1061 5536 l
-1061 5537 l
-978 5537 l
-978 5537 m
-1062 5537 l
-1062 5538 l
-978 5538 l
-977 5538 m
-1063 5538 l
-1063 5539 l
-977 5539 l
-976 5539 m
-1064 5539 l
-1064 5540 l
-976 5540 l
-975 5540 m
-1066 5540 l
-1066 5541 l
-975 5541 l
-974 5541 m
-1067 5541 l
-1067 5542 l
-974 5542 l
-974 5542 m
-1068 5542 l
-1068 5543 l
-974 5543 l
-973 5543 m
-1069 5543 l
-1069 5544 l
-973 5544 l
-972 5544 m
-1071 5544 l
-1071 5545 l
-972 5545 l
-971 5545 m
-1072 5545 l
-1072 5546 l
-971 5546 l
-970 5546 m
-1073 5546 l
-1073 5547 l
-970 5547 l
-970 5547 m
-1074 5547 l
-1074 5548 l
-970 5548 l
-969 5548 m
-1076 5548 l
-1076 5549 l
-969 5549 l
-968 5549 m
-1077 5549 l
-1077 5550 l
-968 5550 l
-967 5550 m
-1078 5550 l
-1078 5551 l
-967 5551 l
-966 5551 m
-1079 5551 l
-1079 5552 l
-966 5552 l
-966 5552 m
-1081 5552 l
-1081 5553 l
-966 5553 l
-965 5553 m
-1082 5553 l
-1082 5554 l
-965 5554 l
-964 5554 m
-1083 5554 l
-1083 5555 l
-964 5555 l
-963 5555 m
-1084 5555 l
-1084 5556 l
-963 5556 l
-962 5556 m
-1086 5556 l
-1086 5557 l
-962 5557 l
-962 5557 m
-1087 5557 l
-1087 5558 l
-962 5558 l
-961 5558 m
-1088 5558 l
-1088 5559 l
-961 5559 l
-960 5559 m
-1089 5559 l
-1089 5560 l
-960 5560 l
-959 5560 m
-1091 5560 l
-1091 5561 l
-959 5561 l
-958 5561 m
-1092 5561 l
-1092 5562 l
-958 5562 l
-958 5562 m
-1093 5562 l
-1093 5563 l
-958 5563 l
-957 5563 m
-1094 5563 l
-1094 5564 l
-957 5564 l
-956 5564 m
-1096 5564 l
-1096 5565 l
-956 5565 l
-955 5565 m
-1097 5565 l
-1097 5566 l
-955 5566 l
-954 5566 m
-1098 5566 l
-1098 5567 l
-954 5567 l
-954 5567 m
-1099 5567 l
-1099 5568 l
-954 5568 l
-953 5568 m
-1101 5568 l
-1101 5569 l
-953 5569 l
-952 5569 m
-1102 5569 l
-1102 5570 l
-952 5570 l
-951 5570 m
-1103 5570 l
-1103 5571 l
-951 5571 l
-950 5571 m
-1105 5571 l
-1105 5572 l
-950 5572 l
-950 5572 m
-1106 5572 l
-1106 5573 l
-950 5573 l
-949 5573 m
-1107 5573 l
-1107 5574 l
-949 5574 l
-948 5574 m
-1108 5574 l
-1108 5575 l
-948 5575 l
-947 5575 m
-1110 5575 l
-1110 5576 l
-947 5576 l
-946 5576 m
-1111 5576 l
-1111 5577 l
-946 5577 l
-946 5577 m
-1112 5577 l
-1112 5578 l
-946 5578 l
-945 5578 m
-1113 5578 l
-1113 5579 l
-945 5579 l
-944 5579 m
-1115 5579 l
-1115 5580 l
-944 5580 l
-943 5580 m
-1116 5580 l
-1116 5581 l
-943 5581 l
-942 5581 m
-1117 5581 l
-1117 5582 l
-942 5582 l
-942 5582 m
-1118 5582 l
-1118 5583 l
-942 5583 l
-941 5583 m
-1120 5583 l
-1120 5584 l
-941 5584 l
-940 5584 m
-1121 5584 l
-1121 5585 l
-940 5585 l
-939 5585 m
-1122 5585 l
-1122 5586 l
-939 5586 l
-938 5586 m
-1123 5586 l
-1123 5587 l
-938 5587 l
-938 5587 m
-1125 5587 l
-1125 5588 l
-938 5588 l
-937 5588 m
-1126 5588 l
-1126 5589 l
-937 5589 l
-936 5589 m
-1127 5589 l
-1127 5590 l
-936 5590 l
-935 5590 m
-1128 5590 l
-1128 5591 l
-935 5591 l
-935 5591 m
-1130 5591 l
-1130 5592 l
-935 5592 l
-935 5592 m
-1131 5592 l
-1131 5593 l
-935 5593 l
-936 5593 m
-1132 5593 l
-1132 5594 l
-936 5594 l
-937 5594 m
-1133 5594 l
-1133 5595 l
-937 5595 l
-938 5595 m
-1135 5595 l
-1135 5596 l
-938 5596 l
-939 5596 m
-1136 5596 l
-1136 5597 l
-939 5597 l
-941 5597 m
-1137 5597 l
-1137 5598 l
-941 5598 l
-942 5598 m
-1138 5598 l
-1138 5599 l
-942 5599 l
-943 5599 m
-1140 5599 l
-1140 5600 l
-943 5600 l
-944 5600 m
-1141 5600 l
-1141 5601 l
-944 5601 l
-946 5601 m
-1142 5601 l
-1142 5602 l
-946 5602 l
-947 5602 m
-1143 5602 l
-1143 5603 l
-947 5603 l
-948 5603 m
-1145 5603 l
-1145 5604 l
-948 5604 l
-949 5604 m
-1146 5604 l
-1146 5605 l
-949 5605 l
-951 5605 m
-1147 5605 l
-1147 5606 l
-951 5606 l
-952 5606 m
-1148 5606 l
-1148 5607 l
-952 5607 l
-953 5607 m
-1148 5607 l
-1148 5608 l
-953 5608 l
-954 5608 m
-1148 5608 l
-1148 5609 l
-954 5609 l
-956 5609 m
-1147 5609 l
-1147 5610 l
-956 5610 l
-957 5610 m
-1146 5610 l
-1146 5611 l
-957 5611 l
-958 5611 m
-1145 5611 l
-1145 5612 l
-958 5612 l
-959 5612 m
-1144 5612 l
-1144 5613 l
-959 5613 l
-961 5613 m
-1144 5613 l
-1144 5614 l
-961 5614 l
-962 5614 m
-1143 5614 l
-1143 5615 l
-962 5615 l
-963 5615 m
-1142 5615 l
-1142 5616 l
-963 5616 l
-964 5616 m
-1141 5616 l
-1141 5617 l
-964 5617 l
-966 5617 m
-1140 5617 l
-1140 5618 l
-966 5618 l
-967 5618 m
-1140 5618 l
-1140 5619 l
-967 5619 l
-968 5619 m
-1139 5619 l
-1139 5620 l
-968 5620 l
-969 5620 m
-1138 5620 l
-1138 5621 l
-969 5621 l
-971 5621 m
-1137 5621 l
-1137 5622 l
-971 5622 l
-972 5622 m
-1136 5622 l
-1136 5623 l
-972 5623 l
-973 5623 m
-1136 5623 l
-1136 5624 l
-973 5624 l
-974 5624 m
-1135 5624 l
-1135 5625 l
-974 5625 l
-976 5625 m
-1134 5625 l
-1134 5626 l
-976 5626 l
-977 5626 m
-1133 5626 l
-1133 5627 l
-977 5627 l
-978 5627 m
-1132 5627 l
-1132 5628 l
-978 5628 l
-979 5628 m
-1132 5628 l
-1132 5629 l
-979 5629 l
-981 5629 m
-1131 5629 l
-1131 5630 l
-981 5630 l
-982 5630 m
-1130 5630 l
-1130 5631 l
-982 5631 l
-983 5631 m
-1129 5631 l
-1129 5632 l
-983 5632 l
-984 5632 m
-1128 5632 l
-1128 5633 l
-984 5633 l
-986 5633 m
-1128 5633 l
-1128 5634 l
-986 5634 l
-987 5634 m
-1127 5634 l
-1127 5635 l
-987 5635 l
-988 5635 m
-1126 5635 l
-1126 5636 l
-988 5636 l
-989 5636 m
-1125 5636 l
-1125 5637 l
-989 5637 l
-991 5637 m
-1124 5637 l
-1124 5638 l
-991 5638 l
-992 5638 m
-1124 5638 l
-1124 5639 l
-992 5639 l
-993 5639 m
-1123 5639 l
-1123 5640 l
-993 5640 l
-994 5640 m
-1122 5640 l
-1122 5641 l
-994 5641 l
-996 5641 m
-1121 5641 l
-1121 5642 l
-996 5642 l
-997 5642 m
-1120 5642 l
-1120 5643 l
-997 5643 l
-998 5643 m
-1120 5643 l
-1120 5644 l
-998 5644 l
-999 5644 m
-1119 5644 l
-1119 5645 l
-999 5645 l
-1001 5645 m
-1118 5645 l
-1118 5646 l
-1001 5646 l
-1002 5646 m
-1117 5646 l
-1117 5647 l
-1002 5647 l
-1003 5647 m
-1116 5647 l
-1116 5648 l
-1003 5648 l
-1004 5648 m
-1116 5648 l
-1116 5649 l
-1004 5649 l
-1005 5649 m
-1115 5649 l
-1115 5650 l
-1005 5650 l
-1007 5650 m
-1114 5650 l
-1114 5651 l
-1007 5651 l
-1008 5651 m
-1113 5651 l
-1113 5652 l
-1008 5652 l
-1009 5652 m
-1112 5652 l
-1112 5653 l
-1009 5653 l
-1010 5653 m
-1112 5653 l
-1112 5654 l
-1010 5654 l
-1012 5654 m
-1111 5654 l
-1111 5655 l
-1012 5655 l
-1013 5655 m
-1110 5655 l
-1110 5656 l
-1013 5656 l
-1014 5656 m
-1109 5656 l
-1109 5657 l
-1014 5657 l
-1015 5657 m
-1108 5657 l
-1108 5658 l
-1015 5658 l
-1017 5658 m
-1108 5658 l
-1108 5659 l
-1017 5659 l
-1018 5659 m
-1107 5659 l
-1107 5660 l
-1018 5660 l
-1019 5660 m
-1106 5660 l
-1106 5661 l
-1019 5661 l
-1020 5661 m
-1105 5661 l
-1105 5662 l
-1020 5662 l
-1022 5662 m
-1104 5662 l
-1104 5663 l
-1022 5663 l
-1023 5663 m
-1104 5663 l
-1104 5664 l
-1023 5664 l
-1024 5664 m
-1103 5664 l
-1103 5665 l
-1024 5665 l
-1025 5665 m
-1102 5665 l
-1102 5666 l
-1025 5666 l
-1027 5666 m
-1101 5666 l
-1101 5667 l
-1027 5667 l
-1028 5667 m
-1100 5667 l
-1100 5668 l
-1028 5668 l
-1029 5668 m
-1100 5668 l
-1100 5669 l
-1029 5669 l
-1030 5669 m
-1099 5669 l
-1099 5670 l
-1030 5670 l
-1032 5670 m
-1098 5670 l
-1098 5671 l
-1032 5671 l
-1033 5671 m
-1097 5671 l
-1097 5672 l
-1033 5672 l
-1034 5672 m
-1096 5672 l
-1096 5673 l
-1034 5673 l
-1035 5673 m
-1096 5673 l
-1096 5674 l
-1035 5674 l
-1037 5674 m
-1095 5674 l
-1095 5675 l
-1037 5675 l
-1038 5675 m
-1094 5675 l
-1094 5676 l
-1038 5676 l
-1039 5676 m
-1093 5676 l
-1093 5677 l
-1039 5677 l
-1040 5677 m
-1092 5677 l
-1092 5678 l
-1040 5678 l
-1042 5678 m
-1092 5678 l
-1092 5679 l
-1042 5679 l
-1043 5679 m
-1091 5679 l
-1091 5680 l
-1043 5680 l
-1044 5680 m
-1090 5680 l
-1090 5681 l
-1044 5681 l
-1045 5681 m
-1089 5681 l
-1089 5682 l
-1045 5682 l
-1047 5682 m
-1088 5682 l
-1088 5683 l
-1047 5683 l
-1048 5683 m
-1088 5683 l
-1088 5684 l
-1048 5684 l
-1049 5684 m
-1087 5684 l
-1087 5685 l
-1049 5685 l
-1050 5685 m
-1086 5685 l
-1086 5686 l
-1050 5686 l
-1052 5686 m
-1085 5686 l
-1085 5687 l
-1052 5687 l
-1053 5687 m
-1084 5687 l
-1084 5688 l
-1053 5688 l
-1054 5688 m
-1084 5688 l
-1084 5689 l
-1054 5689 l
-1055 5689 m
-1083 5689 l
-1083 5690 l
-1055 5690 l
-1057 5690 m
-1082 5690 l
-1082 5691 l
-1057 5691 l
-1058 5691 m
-1081 5691 l
-1081 5692 l
-1058 5692 l
-1059 5692 m
-1080 5692 l
-1080 5693 l
-1059 5693 l
-1060 5693 m
-1080 5693 l
-1080 5694 l
-1060 5694 l
-1062 5694 m
-1079 5694 l
-1079 5695 l
-1062 5695 l
-1063 5695 m
-1078 5695 l
-1078 5696 l
-1063 5696 l
-1064 5696 m
-1077 5696 l
-1077 5697 l
-1064 5697 l
-1065 5697 m
-1076 5697 l
-1076 5698 l
-1065 5698 l
-1067 5698 m
-1076 5698 l
-1076 5699 l
-1067 5699 l
-1068 5699 m
-1075 5699 l
-1075 5700 l
-1068 5700 l
-1069 5700 m
-1074 5700 l
-1074 5701 l
-1069 5701 l
-1070 5701 m
-1073 5701 l
-1073 5702 l
-1070 5702 l
-Y
-1010.5 5497.6 m
-935 5592 l
-1072 5702 l
-1148 5607 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-972 5579 m
-976 5588 l
-978 5605 l
-1033 5537 l
-S
-1050 5663 m
-1054 5591 l
-1103 5630 l
-S
-1050 5663 m
-1105 5594 l
-S
-1 g
-1830 5898 m
-1841 5898 l
-1841 5899 l
-1830 5899 l
-1830 5899 m
-1847 5899 l
-1847 5900 l
-1830 5900 l
-1830 5900 m
-1854 5900 l
-1854 5901 l
-1830 5901 l
-1830 5901 m
-1861 5901 l
-1861 5902 l
-1830 5902 l
-1829 5902 m
-1867 5902 l
-1867 5903 l
-1829 5903 l
-1829 5903 m
-1874 5903 l
-1874 5904 l
-1829 5904 l
-1829 5904 m
-1881 5904 l
-1881 5905 l
-1829 5905 l
-1829 5905 m
-1887 5905 l
-1887 5906 l
-1829 5906 l
-1829 5906 m
-1894 5906 l
-1894 5907 l
-1829 5907 l
-1829 5907 m
-1901 5907 l
-1901 5908 l
-1829 5908 l
-1829 5908 m
-1907 5908 l
-1907 5909 l
-1829 5909 l
-1828 5909 m
-1914 5909 l
-1914 5910 l
-1828 5910 l
-1828 5910 m
-1921 5910 l
-1921 5911 l
-1828 5911 l
-1828 5911 m
-1927 5911 l
-1927 5912 l
-1828 5912 l
-1828 5912 m
-1934 5912 l
-1934 5913 l
-1828 5913 l
-1828 5913 m
-1941 5913 l
-1941 5914 l
-1828 5914 l
-1828 5914 m
-1947 5914 l
-1947 5915 l
-1828 5915 l
-1827 5915 m
-1954 5915 l
-1954 5916 l
-1827 5916 l
-1827 5916 m
-1961 5916 l
-1961 5917 l
-1827 5917 l
-1827 5917 m
-1967 5917 l
-1967 5918 l
-1827 5918 l
-1827 5918 m
-1974 5918 l
-1974 5919 l
-1827 5919 l
-1827 5919 m
-1981 5919 l
-1981 5920 l
-1827 5920 l
-1827 5920 m
-1987 5920 l
-1987 5921 l
-1827 5921 l
-1827 5921 m
-1994 5921 l
-1994 5922 l
-1827 5922 l
-1826 5922 m
-2000 5922 l
-2000 5923 l
-1826 5923 l
-1826 5923 m
-2000 5923 l
-2000 5929 l
-1826 5929 l
-1825 5929 m
-2000 5929 l
-2000 5930 l
-1825 5930 l
-1825 5930 m
-1999 5930 l
-1999 5936 l
-1825 5936 l
-1824 5936 m
-1999 5936 l
-1999 5937 l
-1824 5937 l
-1824 5937 m
-1998 5937 l
-1998 5942 l
-1824 5942 l
-1823 5942 m
-1998 5942 l
-1998 5943 l
-1823 5943 l
-1823 5943 m
-1997 5943 l
-1997 5949 l
-1823 5949 l
-1822 5949 m
-1997 5949 l
-1997 5950 l
-1822 5950 l
-1822 5950 m
-1996 5950 l
-1996 5956 l
-1822 5956 l
-1821 5956 m
-1996 5956 l
-1996 5957 l
-1821 5957 l
-1821 5957 m
-1995 5957 l
-1995 5963 l
-1821 5963 l
-1820 5963 m
-1994 5963 l
-1994 5969 l
-1820 5969 l
-1819 5969 m
-1994 5969 l
-1994 5970 l
-1819 5970 l
-1819 5970 m
-1993 5970 l
-1993 5976 l
-1819 5976 l
-1818 5976 m
-1993 5976 l
-1993 5977 l
-1818 5977 l
-1818 5977 m
-1992 5977 l
-1992 5983 l
-1818 5983 l
-1817 5983 m
-1991 5983 l
-1991 5990 l
-1817 5990 l
-1816 5990 m
-1990 5990 l
-1990 5996 l
-1816 5996 l
-1815 5996 m
-1990 5996 l
-1990 5997 l
-1815 5997 l
-1815 5997 m
-1989 5997 l
-1989 6003 l
-1815 6003 l
-1814 6003 m
-1989 6003 l
-1989 6004 l
-1814 6004 l
-1814 6004 m
-1988 6004 l
-1988 6010 l
-1814 6010 l
-1813 6010 m
-1987 6010 l
-1987 6017 l
-1813 6017 l
-1813 6017 m
-1986 6017 l
-1986 6018 l
-1813 6018 l
-1819 6018 m
-1986 6018 l
-1986 6019 l
-1819 6019 l
-1826 6019 m
-1986 6019 l
-1986 6020 l
-1826 6020 l
-1832 6020 m
-1986 6020 l
-1986 6021 l
-1832 6021 l
-1839 6021 m
-1986 6021 l
-1986 6022 l
-1839 6022 l
-1845 6022 m
-1986 6022 l
-1986 6023 l
-1845 6023 l
-1852 6023 m
-1986 6023 l
-1986 6024 l
-1852 6024 l
-1858 6024 m
-1985 6024 l
-1985 6025 l
-1858 6025 l
-1865 6025 m
-1985 6025 l
-1985 6026 l
-1865 6026 l
-1871 6026 m
-1985 6026 l
-1985 6027 l
-1871 6027 l
-1878 6027 m
-1985 6027 l
-1985 6028 l
-1878 6028 l
-1884 6028 m
-1985 6028 l
-1985 6029 l
-1884 6029 l
-1891 6029 m
-1985 6029 l
-1985 6030 l
-1891 6030 l
-1897 6030 m
-1984 6030 l
-1984 6031 l
-1897 6031 l
-1904 6031 m
-1984 6031 l
-1984 6032 l
-1904 6032 l
-1910 6032 m
-1984 6032 l
-1984 6033 l
-1910 6033 l
-1917 6033 m
-1984 6033 l
-1984 6034 l
-1917 6034 l
-1923 6034 m
-1984 6034 l
-1984 6035 l
-1923 6035 l
-1930 6035 m
-1984 6035 l
-1984 6036 l
-1930 6036 l
-1936 6036 m
-1984 6036 l
-1984 6037 l
-1936 6037 l
-1943 6037 m
-1983 6037 l
-1983 6038 l
-1943 6038 l
-1949 6038 m
-1983 6038 l
-1983 6039 l
-1949 6039 l
-1956 6039 m
-1983 6039 l
-1983 6040 l
-1956 6040 l
-1962 6040 m
-1983 6040 l
-1983 6041 l
-1962 6041 l
-1969 6041 m
-1983 6041 l
-1983 6042 l
-1969 6042 l
-1975 6042 m
-1983 6042 l
-1983 6043 l
-1975 6043 l
-Y
-1830.7 5897.6 m
-1813 6017 l
-1982 6043 l
-2000 5923 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-1838 5987 m
-1846 5993 l
-1856 6007 l
-1869 5920 l
-S
-1962 6010 m
-1956 6018 l
-1943 6020 l
-1935 6019 l
-1923 6013 l
-1917 5999 l
-1916 5978 l
-1919 5957 l
-1925 5941 l
-1935 5934 l
-1948 5932 l
-1952 5933 l
-1964 5939 l
-1971 5948 l
-1973 5961 l
-1973 5965 l
-1967 5977 l
-1957 5984 l
-1944 5986 l
-1940 5986 l
-1928 5980 l
-1921 5970 l
-1919 5957 l
-S
-1 g
-2892 5791 m
-2896 5791 l
-2896 5792 l
-2892 5792 l
-2889 5792 m
-2896 5792 l
-2896 5793 l
-2889 5793 l
-2887 5793 m
-2897 5793 l
-2897 5794 l
-2887 5794 l
-2884 5794 m
-2897 5794 l
-2897 5795 l
-2884 5795 l
-2882 5795 m
-2897 5795 l
-2897 5796 l
-2882 5796 l
-2879 5796 m
-2898 5796 l
-2898 5797 l
-2879 5797 l
-2877 5797 m
-2898 5797 l
-2898 5798 l
-2877 5798 l
-2874 5798 m
-2899 5798 l
-2899 5799 l
-2874 5799 l
-2872 5799 m
-2899 5799 l
-2899 5800 l
-2872 5800 l
-2869 5800 m
-2899 5800 l
-2899 5801 l
-2869 5801 l
-2867 5801 m
-2900 5801 l
-2900 5802 l
-2867 5802 l
-2864 5802 m
-2900 5802 l
-2900 5803 l
-2864 5803 l
-2861 5803 m
-2901 5803 l
-2901 5804 l
-2861 5804 l
-2859 5804 m
-2901 5804 l
-2901 5805 l
-2859 5805 l
-2856 5805 m
-2901 5805 l
-2901 5806 l
-2856 5806 l
-2854 5806 m
-2902 5806 l
-2902 5807 l
-2854 5807 l
-2851 5807 m
-2902 5807 l
-2902 5808 l
-2851 5808 l
-2849 5808 m
-2903 5808 l
-2903 5809 l
-2849 5809 l
-2846 5809 m
-2903 5809 l
-2903 5810 l
-2846 5810 l
-2844 5810 m
-2903 5810 l
-2903 5811 l
-2844 5811 l
-2841 5811 m
-2904 5811 l
-2904 5812 l
-2841 5812 l
-2839 5812 m
-2904 5812 l
-2904 5813 l
-2839 5813 l
-2836 5813 m
-2904 5813 l
-2904 5814 l
-2836 5814 l
-2834 5814 m
-2905 5814 l
-2905 5815 l
-2834 5815 l
-2831 5815 m
-2905 5815 l
-2905 5816 l
-2831 5816 l
-2828 5816 m
-2906 5816 l
-2906 5817 l
-2828 5817 l
-2826 5817 m
-2906 5817 l
-2906 5818 l
-2826 5818 l
-2823 5818 m
-2906 5818 l
-2906 5819 l
-2823 5819 l
-2821 5819 m
-2907 5819 l
-2907 5820 l
-2821 5820 l
-2818 5820 m
-2907 5820 l
-2907 5821 l
-2818 5821 l
-2816 5821 m
-2908 5821 l
-2908 5822 l
-2816 5822 l
-2813 5822 m
-2908 5822 l
-2908 5823 l
-2813 5823 l
-2811 5823 m
-2908 5823 l
-2908 5824 l
-2811 5824 l
-2808 5824 m
-2909 5824 l
-2909 5825 l
-2808 5825 l
-2806 5825 m
-2909 5825 l
-2909 5826 l
-2806 5826 l
-2803 5826 m
-2910 5826 l
-2910 5827 l
-2803 5827 l
-2801 5827 m
-2910 5827 l
-2910 5828 l
-2801 5828 l
-2798 5828 m
-2910 5828 l
-2910 5829 l
-2798 5829 l
-2795 5829 m
-2911 5829 l
-2911 5830 l
-2795 5830 l
-2793 5830 m
-2911 5830 l
-2911 5831 l
-2793 5831 l
-2790 5831 m
-2911 5831 l
-2911 5832 l
-2790 5832 l
-2788 5832 m
-2912 5832 l
-2912 5833 l
-2788 5833 l
-2785 5833 m
-2912 5833 l
-2912 5834 l
-2785 5834 l
-2783 5834 m
-2913 5834 l
-2913 5835 l
-2783 5835 l
-2780 5835 m
-2913 5835 l
-2913 5836 l
-2780 5836 l
-2778 5836 m
-2913 5836 l
-2913 5837 l
-2778 5837 l
-2775 5837 m
-2914 5837 l
-2914 5838 l
-2775 5838 l
-2773 5838 m
-2914 5838 l
-2914 5839 l
-2773 5839 l
-2770 5839 m
-2915 5839 l
-2915 5840 l
-2770 5840 l
-2768 5840 m
-2915 5840 l
-2915 5841 l
-2768 5841 l
-2765 5841 m
-2915 5841 l
-2915 5842 l
-2765 5842 l
-2762 5842 m
-2916 5842 l
-2916 5843 l
-2762 5843 l
-2760 5843 m
-2916 5843 l
-2916 5844 l
-2760 5844 l
-2757 5844 m
-2917 5844 l
-2917 5845 l
-2757 5845 l
-2755 5845 m
-2917 5845 l
-2917 5846 l
-2755 5846 l
-2752 5846 m
-2917 5846 l
-2917 5847 l
-2752 5847 l
-2750 5847 m
-2918 5847 l
-2918 5848 l
-2750 5848 l
-2747 5848 m
-2918 5848 l
-2918 5849 l
-2747 5849 l
-2745 5849 m
-2918 5849 l
-2918 5850 l
-2745 5850 l
-2742 5850 m
-2919 5850 l
-2919 5851 l
-2742 5851 l
-2740 5851 m
-2919 5851 l
-2919 5852 l
-2740 5852 l
-2737 5852 m
-2920 5852 l
-2920 5853 l
-2737 5853 l
-2735 5853 m
-2920 5853 l
-2920 5854 l
-2735 5854 l
-2735 5854 m
-2920 5854 l
-2920 5855 l
-2735 5855 l
-2735 5855 m
-2921 5855 l
-2921 5857 l
-2735 5857 l
-2736 5857 m
-2922 5857 l
-2922 5860 l
-2736 5860 l
-2737 5860 m
-2923 5860 l
-2923 5862 l
-2737 5862 l
-2738 5862 m
-2924 5862 l
-2924 5865 l
-2738 5865 l
-2739 5865 m
-2925 5865 l
-2925 5867 l
-2739 5867 l
-2740 5867 m
-2926 5867 l
-2926 5870 l
-2740 5870 l
-2741 5870 m
-2927 5870 l
-2927 5872 l
-2741 5872 l
-2742 5872 m
-2927 5872 l
-2927 5873 l
-2742 5873 l
-2742 5873 m
-2928 5873 l
-2928 5875 l
-2742 5875 l
-2743 5875 m
-2929 5875 l
-2929 5877 l
-2743 5877 l
-2744 5877 m
-2929 5877 l
-2929 5878 l
-2744 5878 l
-2744 5878 m
-2930 5878 l
-2930 5880 l
-2744 5880 l
-2745 5880 m
-2931 5880 l
-2931 5882 l
-2745 5882 l
-2746 5882 m
-2931 5882 l
-2931 5883 l
-2746 5883 l
-2746 5883 m
-2932 5883 l
-2932 5885 l
-2746 5885 l
-2747 5885 m
-2933 5885 l
-2933 5887 l
-2747 5887 l
-2748 5887 m
-2933 5887 l
-2933 5888 l
-2748 5888 l
-2748 5888 m
-2934 5888 l
-2934 5890 l
-2748 5890 l
-2749 5890 m
-2934 5890 l
-2934 5891 l
-2749 5891 l
-2749 5891 m
-2935 5891 l
-2935 5892 l
-2749 5892 l
-2750 5892 m
-2935 5892 l
-2935 5893 l
-2750 5893 l
-2750 5893 m
-2936 5893 l
-2936 5895 l
-2750 5895 l
-2751 5895 m
-2936 5895 l
-2936 5896 l
-2751 5896 l
-2751 5896 m
-2937 5896 l
-2937 5897 l
-2751 5897 l
-2752 5897 m
-2937 5897 l
-2937 5898 l
-2752 5898 l
-2752 5898 m
-2938 5898 l
-2938 5900 l
-2752 5900 l
-2753 5900 m
-2938 5900 l
-2938 5901 l
-2753 5901 l
-2753 5901 m
-2939 5901 l
-2939 5902 l
-2753 5902 l
-2754 5902 m
-2939 5902 l
-2939 5903 l
-2754 5903 l
-2754 5903 m
-2939 5903 l
-2939 5904 l
-2754 5904 l
-2754 5904 m
-2939 5904 l
-2939 5905 l
-2754 5905 l
-2755 5905 m
-2937 5905 l
-2937 5906 l
-2755 5906 l
-2755 5906 m
-2934 5906 l
-2934 5907 l
-2755 5907 l
-2756 5907 m
-2932 5907 l
-2932 5908 l
-2756 5908 l
-2756 5908 m
-2929 5908 l
-2929 5909 l
-2756 5909 l
-2756 5909 m
-2927 5909 l
-2927 5910 l
-2756 5910 l
-2757 5910 m
-2924 5910 l
-2924 5911 l
-2757 5911 l
-2757 5911 m
-2922 5911 l
-2922 5912 l
-2757 5912 l
-2758 5912 m
-2919 5912 l
-2919 5913 l
-2758 5913 l
-2758 5913 m
-2917 5913 l
-2917 5914 l
-2758 5914 l
-2758 5914 m
-2914 5914 l
-2914 5915 l
-2758 5915 l
-2759 5915 m
-2912 5915 l
-2912 5916 l
-2759 5916 l
-2759 5916 m
-2909 5916 l
-2909 5917 l
-2759 5917 l
-2760 5917 m
-2906 5917 l
-2906 5918 l
-2760 5918 l
-2760 5918 m
-2904 5918 l
-2904 5919 l
-2760 5919 l
-2760 5919 m
-2901 5919 l
-2901 5920 l
-2760 5920 l
-2761 5920 m
-2899 5920 l
-2899 5921 l
-2761 5921 l
-2761 5921 m
-2896 5921 l
-2896 5922 l
-2761 5922 l
-2762 5922 m
-2894 5922 l
-2894 5923 l
-2762 5923 l
-2762 5923 m
-2891 5923 l
-2891 5924 l
-2762 5924 l
-2762 5924 m
-2889 5924 l
-2889 5925 l
-2762 5925 l
-2763 5925 m
-2886 5925 l
-2886 5926 l
-2763 5926 l
-2763 5926 m
-2884 5926 l
-2884 5927 l
-2763 5927 l
-2764 5927 m
-2881 5927 l
-2881 5928 l
-2764 5928 l
-2764 5928 m
-2879 5928 l
-2879 5929 l
-2764 5929 l
-2764 5929 m
-2876 5929 l
-2876 5930 l
-2764 5930 l
-2765 5930 m
-2874 5930 l
-2874 5931 l
-2765 5931 l
-2765 5931 m
-2871 5931 l
-2871 5932 l
-2765 5932 l
-2766 5932 m
-2869 5932 l
-2869 5933 l
-2766 5933 l
-2766 5933 m
-2866 5933 l
-2866 5934 l
-2766 5934 l
-2766 5934 m
-2864 5934 l
-2864 5935 l
-2766 5935 l
-2767 5935 m
-2861 5935 l
-2861 5936 l
-2767 5936 l
-2767 5936 m
-2859 5936 l
-2859 5937 l
-2767 5937 l
-2768 5937 m
-2856 5937 l
-2856 5938 l
-2768 5938 l
-2768 5938 m
-2854 5938 l
-2854 5939 l
-2768 5939 l
-2768 5939 m
-2851 5939 l
-2851 5940 l
-2768 5940 l
-2769 5940 m
-2849 5940 l
-2849 5941 l
-2769 5941 l
-2769 5941 m
-2846 5941 l
-2846 5942 l
-2769 5942 l
-2770 5942 m
-2843 5942 l
-2843 5943 l
-2770 5943 l
-2770 5943 m
-2841 5943 l
-2841 5944 l
-2770 5944 l
-2770 5944 m
-2838 5944 l
-2838 5945 l
-2770 5945 l
-2771 5945 m
-2836 5945 l
-2836 5946 l
-2771 5946 l
-2771 5946 m
-2833 5946 l
-2833 5947 l
-2771 5947 l
-2772 5947 m
-2831 5947 l
-2831 5948 l
-2772 5948 l
-2772 5948 m
-2828 5948 l
-2828 5949 l
-2772 5949 l
-2772 5949 m
-2826 5949 l
-2826 5950 l
-2772 5950 l
-2773 5950 m
-2823 5950 l
-2823 5951 l
-2773 5951 l
-2773 5951 m
-2821 5951 l
-2821 5952 l
-2773 5952 l
-2774 5952 m
-2818 5952 l
-2818 5953 l
-2774 5953 l
-2774 5953 m
-2816 5953 l
-2816 5954 l
-2774 5954 l
-2774 5954 m
-2813 5954 l
-2813 5955 l
-2774 5955 l
-2775 5955 m
-2811 5955 l
-2811 5956 l
-2775 5956 l
-2775 5956 m
-2808 5956 l
-2808 5957 l
-2775 5957 l
-2776 5957 m
-2806 5957 l
-2806 5958 l
-2776 5958 l
-2776 5958 m
-2803 5958 l
-2803 5959 l
-2776 5959 l
-2776 5959 m
-2801 5959 l
-2801 5960 l
-2776 5960 l
-2777 5960 m
-2798 5960 l
-2798 5961 l
-2777 5961 l
-2777 5961 m
-2796 5961 l
-2796 5962 l
-2777 5962 l
-2778 5962 m
-2793 5962 l
-2793 5963 l
-2778 5963 l
-2778 5963 m
-2791 5963 l
-2791 5964 l
-2778 5964 l
-2778 5964 m
-2788 5964 l
-2788 5965 l
-2778 5965 l
-2779 5965 m
-2786 5965 l
-2786 5966 l
-2779 5966 l
-2779 5966 m
-2783 5966 l
-2783 5967 l
-2779 5967 l
-Y
-2939 5903.9 m
-2895 5791 l
-2735 5854 l
-2780 5967 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-2887 5830 m
-2878 5829 l
-2862 5822 l
-2894 5904 l
-S
-2796 5848 m
-2809 5847 l
-2816 5854 l
-2819 5861 l
-2818 5871 l
-2812 5878 l
-2798 5888 l
-2788 5896 l
-2783 5907 l
-2782 5916 l
-2787 5928 l
-2794 5934 l
-2799 5936 l
-2812 5936 l
-2828 5930 l
-2838 5921 l
-2840 5916 l
-2841 5906 l
-2837 5895 l
-2830 5889 l
-2819 5884 l
-2806 5885 l
-2789 5887 l
-2779 5886 l
-2772 5880 l
-2769 5872 l
-2770 5863 l
-2780 5854 l
-2796 5848 l
-S
-1 g
-3616 5200 m
-3619 5200 l
-3619 5201 l
-3616 5201 l
-3615 5201 m
-3620 5201 l
-3620 5202 l
-3615 5202 l
-3614 5202 m
-3621 5202 l
-3621 5203 l
-3614 5203 l
-3613 5203 m
-3623 5203 l
-3623 5204 l
-3613 5204 l
-3612 5204 m
-3624 5204 l
-3624 5205 l
-3612 5205 l
-3612 5205 m
-3625 5205 l
-3625 5206 l
-3612 5206 l
-3611 5206 m
-3626 5206 l
-3626 5207 l
-3611 5207 l
-3610 5207 m
-3628 5207 l
-3628 5208 l
-3610 5208 l
-3609 5208 m
-3629 5208 l
-3629 5209 l
-3609 5209 l
-3608 5209 m
-3630 5209 l
-3630 5210 l
-3608 5210 l
-3608 5210 m
-3631 5210 l
-3631 5211 l
-3608 5211 l
-3607 5211 m
-3633 5211 l
-3633 5212 l
-3607 5212 l
-3606 5212 m
-3634 5212 l
-3634 5213 l
-3606 5213 l
-3605 5213 m
-3635 5213 l
-3635 5214 l
-3605 5214 l
-3604 5214 m
-3636 5214 l
-3636 5215 l
-3604 5215 l
-3604 5215 m
-3638 5215 l
-3638 5216 l
-3604 5216 l
-3603 5216 m
-3639 5216 l
-3639 5217 l
-3603 5217 l
-3602 5217 m
-3640 5217 l
-3640 5218 l
-3602 5218 l
-3601 5218 m
-3641 5218 l
-3641 5219 l
-3601 5219 l
-3600 5219 m
-3643 5219 l
-3643 5220 l
-3600 5220 l
-3600 5220 m
-3644 5220 l
-3644 5221 l
-3600 5221 l
-3599 5221 m
-3645 5221 l
-3645 5222 l
-3599 5222 l
-3598 5222 m
-3647 5222 l
-3647 5223 l
-3598 5223 l
-3597 5223 m
-3648 5223 l
-3648 5224 l
-3597 5224 l
-3596 5224 m
-3649 5224 l
-3649 5225 l
-3596 5225 l
-3596 5225 m
-3650 5225 l
-3650 5226 l
-3596 5226 l
-3595 5226 m
-3652 5226 l
-3652 5227 l
-3595 5227 l
-3594 5227 m
-3653 5227 l
-3653 5228 l
-3594 5228 l
-3593 5228 m
-3654 5228 l
-3654 5229 l
-3593 5229 l
-3592 5229 m
-3655 5229 l
-3655 5230 l
-3592 5230 l
-3592 5230 m
-3657 5230 l
-3657 5231 l
-3592 5231 l
-3591 5231 m
-3658 5231 l
-3658 5232 l
-3591 5232 l
-3590 5232 m
-3659 5232 l
-3659 5233 l
-3590 5233 l
-3589 5233 m
-3660 5233 l
-3660 5234 l
-3589 5234 l
-3588 5234 m
-3662 5234 l
-3662 5235 l
-3588 5235 l
-3588 5235 m
-3663 5235 l
-3663 5236 l
-3588 5236 l
-3587 5236 m
-3664 5236 l
-3664 5237 l
-3587 5237 l
-3586 5237 m
-3665 5237 l
-3665 5238 l
-3586 5238 l
-3585 5238 m
-3667 5238 l
-3667 5239 l
-3585 5239 l
-3584 5239 m
-3668 5239 l
-3668 5240 l
-3584 5240 l
-3584 5240 m
-3669 5240 l
-3669 5241 l
-3584 5241 l
-3583 5241 m
-3670 5241 l
-3670 5242 l
-3583 5242 l
-3582 5242 m
-3672 5242 l
-3672 5243 l
-3582 5243 l
-3581 5243 m
-3673 5243 l
-3673 5244 l
-3581 5244 l
-3580 5244 m
-3674 5244 l
-3674 5245 l
-3580 5245 l
-3580 5245 m
-3676 5245 l
-3676 5246 l
-3580 5246 l
-3579 5246 m
-3677 5246 l
-3677 5247 l
-3579 5247 l
-3578 5247 m
-3678 5247 l
-3678 5248 l
-3578 5248 l
-3577 5248 m
-3679 5248 l
-3679 5249 l
-3577 5249 l
-3576 5249 m
-3681 5249 l
-3681 5250 l
-3576 5250 l
-3575 5250 m
-3682 5250 l
-3682 5251 l
-3575 5251 l
-3575 5251 m
-3683 5251 l
-3683 5252 l
-3575 5252 l
-3574 5252 m
-3684 5252 l
-3684 5253 l
-3574 5253 l
-3573 5253 m
-3686 5253 l
-3686 5254 l
-3573 5254 l
-3572 5254 m
-3687 5254 l
-3687 5255 l
-3572 5255 l
-3571 5255 m
-3688 5255 l
-3688 5256 l
-3571 5256 l
-3571 5256 m
-3689 5256 l
-3689 5257 l
-3571 5257 l
-3570 5257 m
-3691 5257 l
-3691 5258 l
-3570 5258 l
-3569 5258 m
-3692 5258 l
-3692 5259 l
-3569 5259 l
-3568 5259 m
-3693 5259 l
-3693 5260 l
-3568 5260 l
-3567 5260 m
-3694 5260 l
-3694 5261 l
-3567 5261 l
-3567 5261 m
-3696 5261 l
-3696 5262 l
-3567 5262 l
-3566 5262 m
-3697 5262 l
-3697 5263 l
-3566 5263 l
-3565 5263 m
-3698 5263 l
-3698 5264 l
-3565 5264 l
-3564 5264 m
-3699 5264 l
-3699 5265 l
-3564 5265 l
-3563 5265 m
-3701 5265 l
-3701 5266 l
-3563 5266 l
-3563 5266 m
-3702 5266 l
-3702 5267 l
-3563 5267 l
-3562 5267 m
-3703 5267 l
-3703 5268 l
-3562 5268 l
-3561 5268 m
-3705 5268 l
-3705 5269 l
-3561 5269 l
-3560 5269 m
-3706 5269 l
-3706 5270 l
-3560 5270 l
-3559 5270 m
-3707 5270 l
-3707 5271 l
-3559 5271 l
-3559 5271 m
-3708 5271 l
-3708 5272 l
-3559 5272 l
-3558 5272 m
-3710 5272 l
-3710 5273 l
-3558 5273 l
-3557 5273 m
-3711 5273 l
-3711 5274 l
-3557 5274 l
-3556 5274 m
-3712 5274 l
-3712 5275 l
-3556 5275 l
-3555 5275 m
-3712 5275 l
-3712 5276 l
-3555 5276 l
-3555 5276 m
-3711 5276 l
-3711 5277 l
-3555 5277 l
-3554 5277 m
-3711 5277 l
-3711 5278 l
-3554 5278 l
-3553 5278 m
-3710 5278 l
-3710 5279 l
-3553 5279 l
-3552 5279 m
-3709 5279 l
-3709 5280 l
-3552 5280 l
-3551 5280 m
-3708 5280 l
-3708 5281 l
-3551 5281 l
-3551 5281 m
-3707 5281 l
-3707 5282 l
-3551 5282 l
-3550 5282 m
-3707 5282 l
-3707 5283 l
-3550 5283 l
-3549 5283 m
-3706 5283 l
-3706 5284 l
-3549 5284 l
-3548 5284 m
-3705 5284 l
-3705 5285 l
-3548 5285 l
-3547 5285 m
-3704 5285 l
-3704 5286 l
-3547 5286 l
-3547 5286 m
-3703 5286 l
-3703 5287 l
-3547 5287 l
-3546 5287 m
-3703 5287 l
-3703 5288 l
-3546 5288 l
-3545 5288 m
-3702 5288 l
-3702 5289 l
-3545 5289 l
-3544 5289 m
-3701 5289 l
-3701 5290 l
-3544 5290 l
-3543 5290 m
-3700 5290 l
-3700 5291 l
-3543 5291 l
-3543 5291 m
-3699 5291 l
-3699 5292 l
-3543 5292 l
-3542 5292 m
-3699 5292 l
-3699 5293 l
-3542 5293 l
-3541 5293 m
-3698 5293 l
-3698 5294 l
-3541 5294 l
-3540 5294 m
-3697 5294 l
-3697 5295 l
-3540 5295 l
-3539 5295 m
-3696 5295 l
-3696 5296 l
-3539 5296 l
-3538 5296 m
-3695 5296 l
-3695 5298 l
-3538 5298 l
-3537 5298 m
-3694 5298 l
-3694 5299 l
-3537 5299 l
-3536 5299 m
-3693 5299 l
-3693 5300 l
-3536 5300 l
-3535 5300 m
-3692 5300 l
-3692 5301 l
-3535 5301 l
-3534 5301 m
-3691 5301 l
-3691 5303 l
-3534 5303 l
-3533 5303 m
-3690 5303 l
-3690 5304 l
-3533 5304 l
-3532 5304 m
-3689 5304 l
-3689 5305 l
-3532 5305 l
-3531 5305 m
-3688 5305 l
-3688 5306 l
-3531 5306 l
-3530 5306 m
-3687 5306 l
-3687 5308 l
-3530 5308 l
-3529 5308 m
-3686 5308 l
-3686 5309 l
-3529 5309 l
-3528 5309 m
-3685 5309 l
-3685 5310 l
-3528 5310 l
-3527 5310 m
-3684 5310 l
-3684 5311 l
-3527 5311 l
-3526 5311 m
-3683 5311 l
-3683 5313 l
-3526 5313 l
-3525 5313 m
-3682 5313 l
-3682 5314 l
-3525 5314 l
-3524 5314 m
-3681 5314 l
-3681 5315 l
-3524 5315 l
-3523 5315 m
-3680 5315 l
-3680 5316 l
-3523 5316 l
-3522 5316 m
-3679 5316 l
-3679 5318 l
-3522 5318 l
-3521 5318 m
-3678 5318 l
-3678 5319 l
-3521 5319 l
-3520 5319 m
-3677 5319 l
-3677 5320 l
-3520 5320 l
-3519 5320 m
-3676 5320 l
-3676 5321 l
-3519 5321 l
-3518 5321 m
-3675 5321 l
-3675 5323 l
-3518 5323 l
-3517 5323 m
-3674 5323 l
-3674 5324 l
-3517 5324 l
-3516 5324 m
-3673 5324 l
-3673 5325 l
-3516 5325 l
-3515 5325 m
-3672 5325 l
-3672 5326 l
-3515 5326 l
-3514 5326 m
-3672 5326 l
-3672 5327 l
-3514 5327 l
-3514 5327 m
-3671 5327 l
-3671 5328 l
-3514 5328 l
-3513 5328 m
-3670 5328 l
-3670 5329 l
-3513 5329 l
-3512 5329 m
-3669 5329 l
-3669 5330 l
-3512 5330 l
-3511 5330 m
-3668 5330 l
-3668 5331 l
-3511 5331 l
-3510 5331 m
-3668 5331 l
-3668 5332 l
-3510 5332 l
-3510 5332 m
-3667 5332 l
-3667 5333 l
-3510 5333 l
-3509 5333 m
-3666 5333 l
-3666 5334 l
-3509 5334 l
-3508 5334 m
-3665 5334 l
-3665 5335 l
-3508 5335 l
-3507 5335 m
-3664 5335 l
-3664 5336 l
-3507 5336 l
-3506 5336 m
-3664 5336 l
-3664 5337 l
-3506 5337 l
-3506 5337 m
-3663 5337 l
-3663 5338 l
-3506 5338 l
-3505 5338 m
-3662 5338 l
-3662 5339 l
-3505 5339 l
-3504 5339 m
-3661 5339 l
-3661 5340 l
-3504 5340 l
-3503 5340 m
-3660 5340 l
-3660 5341 l
-3503 5341 l
-3502 5341 m
-3660 5341 l
-3660 5342 l
-3502 5342 l
-3502 5342 m
-3659 5342 l
-3659 5343 l
-3502 5343 l
-3502 5343 m
-3658 5343 l
-3658 5344 l
-3502 5344 l
-3503 5344 m
-3657 5344 l
-3657 5345 l
-3503 5345 l
-3504 5345 m
-3656 5345 l
-3656 5346 l
-3504 5346 l
-3505 5346 m
-3656 5346 l
-3656 5347 l
-3505 5347 l
-3507 5347 m
-3655 5347 l
-3655 5348 l
-3507 5348 l
-3508 5348 m
-3654 5348 l
-3654 5349 l
-3508 5349 l
-3509 5349 m
-3653 5349 l
-3653 5350 l
-3509 5350 l
-3510 5350 m
-3652 5350 l
-3652 5351 l
-3510 5351 l
-3512 5351 m
-3652 5351 l
-3652 5352 l
-3512 5352 l
-3513 5352 m
-3651 5352 l
-3651 5353 l
-3513 5353 l
-3514 5353 m
-3650 5353 l
-3650 5354 l
-3514 5354 l
-3515 5354 m
-3649 5354 l
-3649 5355 l
-3515 5355 l
-3517 5355 m
-3648 5355 l
-3648 5356 l
-3517 5356 l
-3518 5356 m
-3648 5356 l
-3648 5357 l
-3518 5357 l
-3519 5357 m
-3647 5357 l
-3647 5358 l
-3519 5358 l
-3520 5358 m
-3646 5358 l
-3646 5359 l
-3520 5359 l
-3522 5359 m
-3645 5359 l
-3645 5360 l
-3522 5360 l
-3523 5360 m
-3644 5360 l
-3644 5361 l
-3523 5361 l
-3524 5361 m
-3644 5361 l
-3644 5362 l
-3524 5362 l
-3525 5362 m
-3643 5362 l
-3643 5363 l
-3525 5363 l
-3527 5363 m
-3642 5363 l
-3642 5364 l
-3527 5364 l
-3528 5364 m
-3641 5364 l
-3641 5365 l
-3528 5365 l
-3529 5365 m
-3640 5365 l
-3640 5366 l
-3529 5366 l
-3530 5366 m
-3640 5366 l
-3640 5367 l
-3530 5367 l
-3532 5367 m
-3639 5367 l
-3639 5368 l
-3532 5368 l
-3533 5368 m
-3638 5368 l
-3638 5369 l
-3533 5369 l
-3534 5369 m
-3637 5369 l
-3637 5370 l
-3534 5370 l
-3535 5370 m
-3636 5370 l
-3636 5371 l
-3535 5371 l
-3537 5371 m
-3636 5371 l
-3636 5372 l
-3537 5372 l
-3538 5372 m
-3635 5372 l
-3635 5373 l
-3538 5373 l
-3539 5373 m
-3634 5373 l
-3634 5374 l
-3539 5374 l
-3540 5374 m
-3633 5374 l
-3633 5375 l
-3540 5375 l
-3542 5375 m
-3633 5375 l
-3633 5376 l
-3542 5376 l
-3543 5376 m
-3632 5376 l
-3632 5377 l
-3543 5377 l
-3544 5377 m
-3631 5377 l
-3631 5378 l
-3544 5378 l
-3545 5378 m
-3630 5378 l
-3630 5379 l
-3545 5379 l
-3547 5379 m
-3629 5379 l
-3629 5380 l
-3547 5380 l
-3548 5380 m
-3629 5380 l
-3629 5381 l
-3548 5381 l
-3549 5381 m
-3628 5381 l
-3628 5382 l
-3549 5382 l
-3550 5382 m
-3627 5382 l
-3627 5383 l
-3550 5383 l
-3551 5383 m
-3626 5383 l
-3626 5384 l
-3551 5384 l
-3553 5384 m
-3625 5384 l
-3625 5385 l
-3553 5385 l
-3554 5385 m
-3625 5385 l
-3625 5386 l
-3554 5386 l
-3555 5386 m
-3624 5386 l
-3624 5387 l
-3555 5387 l
-3556 5387 m
-3623 5387 l
-3623 5388 l
-3556 5388 l
-3558 5388 m
-3622 5388 l
-3622 5389 l
-3558 5389 l
-3559 5389 m
-3621 5389 l
-3621 5390 l
-3559 5390 l
-3560 5390 m
-3621 5390 l
-3621 5391 l
-3560 5391 l
-3561 5391 m
-3620 5391 l
-3620 5392 l
-3561 5392 l
-3563 5392 m
-3619 5392 l
-3619 5393 l
-3563 5393 l
-3564 5393 m
-3618 5393 l
-3618 5394 l
-3564 5394 l
-3565 5394 m
-3617 5394 l
-3617 5395 l
-3565 5395 l
-3566 5395 m
-3617 5395 l
-3617 5396 l
-3566 5396 l
-3568 5396 m
-3616 5396 l
-3616 5397 l
-3568 5397 l
-3569 5397 m
-3615 5397 l
-3615 5398 l
-3569 5398 l
-3570 5398 m
-3614 5398 l
-3614 5399 l
-3570 5399 l
-3571 5399 m
-3613 5399 l
-3613 5400 l
-3571 5400 l
-3573 5400 m
-3613 5400 l
-3613 5401 l
-3573 5401 l
-3574 5401 m
-3612 5401 l
-3612 5402 l
-3574 5402 l
-3575 5402 m
-3611 5402 l
-3611 5403 l
-3575 5403 l
-3576 5403 m
-3610 5403 l
-3610 5404 l
-3576 5404 l
-3578 5404 m
-3609 5404 l
-3609 5405 l
-3578 5405 l
-3579 5405 m
-3609 5405 l
-3609 5406 l
-3579 5406 l
-3580 5406 m
-3608 5406 l
-3608 5407 l
-3580 5407 l
-3581 5407 m
-3607 5407 l
-3607 5408 l
-3581 5408 l
-3583 5408 m
-3606 5408 l
-3606 5409 l
-3583 5409 l
-3584 5409 m
-3605 5409 l
-3605 5410 l
-3584 5410 l
-3585 5410 m
-3605 5410 l
-3605 5411 l
-3585 5411 l
-3586 5411 m
-3604 5411 l
-3604 5412 l
-3586 5412 l
-3588 5412 m
-3603 5412 l
-3603 5413 l
-3588 5413 l
-3589 5413 m
-3602 5413 l
-3602 5414 l
-3589 5414 l
-3590 5414 m
-3601 5414 l
-3601 5415 l
-3590 5415 l
-3591 5415 m
-3601 5415 l
-3601 5416 l
-3591 5416 l
-3593 5416 m
-3600 5416 l
-3600 5417 l
-3593 5417 l
-3594 5417 m
-3599 5417 l
-3599 5418 l
-3594 5418 l
-3595 5418 m
-3598 5418 l
-3598 5419 l
-3595 5419 l
-Y
-3711.6 5275 m
-3617 5200 l
-3502 5343 l
-3597 5419 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3631 5243 m
-3627 5240 l
-3618 5238 l
-3612 5239 l
-3604 5243 l
-3593 5256 l
-3592 5265 l
-3592 5271 l
-3596 5279 l
-3603 5284 l
-3612 5286 l
-3627 5288 l
-3685 5281 l
-3649 5327 l
-S
-3549 5311 m
-3560 5304 l
-3575 5305 l
-3594 5315 l
-3604 5323 l
-3618 5339 l
-3622 5353 l
-3618 5366 l
-3613 5372 l
-3602 5380 l
-3587 5378 l
-3568 5369 l
-3558 5361 l
-3544 5344 l
-3539 5330 l
-3544 5318 l
-3549 5311 l
-S
-1 g
-3938 4336 m
-3946 4336 l
-3946 4337 l
-3938 4337 l
-3938 4337 m
-3953 4337 l
-3953 4338 l
-3938 4338 l
-3938 4338 m
-3960 4338 l
-3960 4339 l
-3938 4339 l
-3938 4339 m
-3967 4339 l
-3967 4340 l
-3938 4340 l
-3938 4340 m
-3973 4340 l
-3973 4341 l
-3938 4341 l
-3938 4341 m
-3980 4341 l
-3980 4342 l
-3938 4342 l
-3937 4342 m
-3987 4342 l
-3987 4343 l
-3937 4343 l
-3937 4343 m
-3994 4343 l
-3994 4344 l
-3937 4344 l
-3937 4344 m
-4001 4344 l
-4001 4345 l
-3937 4345 l
-3937 4345 m
-4007 4345 l
-4007 4346 l
-3937 4346 l
-3937 4346 m
-4014 4346 l
-4014 4347 l
-3937 4347 l
-3937 4347 m
-4021 4347 l
-4021 4348 l
-3937 4348 l
-3936 4348 m
-4028 4348 l
-4028 4349 l
-3936 4349 l
-3936 4349 m
-4035 4349 l
-4035 4350 l
-3936 4350 l
-3936 4350 m
-4041 4350 l
-4041 4351 l
-3936 4351 l
-3936 4351 m
-4048 4351 l
-4048 4352 l
-3936 4352 l
-3936 4352 m
-4055 4352 l
-4055 4353 l
-3936 4353 l
-3936 4353 m
-4059 4353 l
-4059 4354 l
-3936 4354 l
-3936 4354 m
-4059 4354 l
-4059 4355 l
-3936 4355 l
-3935 4355 m
-4059 4355 l
-4059 4357 l
-3935 4357 l
-3935 4357 m
-4058 4357 l
-4058 4361 l
-3935 4361 l
-3934 4361 m
-4058 4361 l
-4058 4364 l
-3934 4364 l
-3934 4364 m
-4057 4364 l
-4057 4368 l
-3934 4368 l
-3933 4368 m
-4057 4368 l
-4057 4371 l
-3933 4371 l
-3933 4371 m
-4056 4371 l
-4056 4374 l
-3933 4374 l
-3932 4374 m
-4056 4374 l
-4056 4377 l
-3932 4377 l
-3932 4377 m
-4055 4377 l
-4055 4381 l
-3932 4381 l
-3931 4381 m
-4055 4381 l
-4055 4384 l
-3931 4384 l
-3931 4384 m
-4054 4384 l
-4054 4387 l
-3931 4387 l
-3930 4387 m
-4054 4387 l
-4054 4390 l
-3930 4390 l
-3930 4390 m
-4053 4390 l
-4053 4394 l
-3930 4394 l
-3929 4394 m
-4053 4394 l
-4053 4397 l
-3929 4397 l
-3929 4397 m
-4052 4397 l
-4052 4400 l
-3929 4400 l
-3928 4400 m
-4052 4400 l
-4052 4404 l
-3928 4404 l
-3928 4404 m
-4051 4404 l
-4051 4407 l
-3928 4407 l
-3927 4407 m
-4051 4407 l
-4051 4410 l
-3927 4410 l
-3927 4410 m
-4050 4410 l
-4050 4413 l
-3927 4413 l
-3926 4413 m
-4050 4413 l
-4050 4417 l
-3926 4417 l
-3926 4417 m
-4049 4417 l
-4049 4420 l
-3926 4420 l
-3925 4420 m
-4049 4420 l
-4049 4423 l
-3925 4423 l
-3925 4423 m
-4048 4423 l
-4048 4426 l
-3925 4426 l
-3924 4426 m
-4048 4426 l
-4048 4430 l
-3924 4430 l
-3924 4430 m
-4047 4430 l
-4047 4432 l
-3924 4432 l
-3923 4432 m
-4047 4432 l
-4047 4437 l
-3923 4437 l
-3923 4437 m
-4046 4437 l
-4046 4439 l
-3923 4439 l
-3922 4439 m
-4046 4439 l
-4046 4443 l
-3922 4443 l
-3922 4443 m
-4045 4443 l
-4045 4445 l
-3922 4445 l
-3921 4445 m
-4045 4445 l
-4045 4450 l
-3921 4450 l
-3921 4450 m
-4044 4450 l
-4044 4452 l
-3921 4452 l
-3920 4452 m
-4044 4452 l
-4044 4456 l
-3920 4456 l
-3920 4456 m
-4043 4456 l
-4043 4458 l
-3920 4458 l
-3919 4458 m
-4043 4458 l
-4043 4463 l
-3919 4463 l
-3919 4463 m
-4042 4463 l
-4042 4465 l
-3919 4465 l
-3918 4465 m
-4042 4465 l
-4042 4470 l
-3918 4470 l
-3918 4470 m
-4041 4470 l
-4041 4471 l
-3918 4471 l
-3917 4471 m
-4041 4471 l
-4041 4476 l
-3917 4476 l
-3917 4476 m
-4040 4476 l
-4040 4478 l
-3917 4478 l
-3916 4478 m
-4040 4478 l
-4040 4483 l
-3916 4483 l
-3916 4483 m
-4039 4483 l
-4039 4484 l
-3916 4484 l
-3915 4484 m
-4039 4484 l
-4039 4489 l
-3915 4489 l
-3915 4489 m
-4038 4489 l
-4038 4491 l
-3915 4491 l
-3914 4491 m
-4038 4491 l
-4038 4496 l
-3914 4496 l
-3914 4496 m
-4037 4496 l
-4037 4497 l
-3914 4497 l
-3913 4497 m
-4037 4497 l
-4037 4503 l
-3913 4503 l
-3913 4503 m
-4036 4503 l
-4036 4504 l
-3913 4504 l
-3912 4504 m
-4036 4504 l
-4036 4509 l
-3912 4509 l
-3912 4509 m
-4035 4509 l
-4035 4510 l
-3912 4510 l
-3911 4510 m
-4035 4510 l
-4035 4516 l
-3911 4516 l
-3911 4516 m
-4034 4516 l
-4034 4517 l
-3911 4517 l
-3911 4517 m
-4034 4517 l
-4034 4518 l
-3911 4518 l
-3917 4518 m
-4034 4518 l
-4034 4519 l
-3917 4519 l
-3924 4519 m
-4034 4519 l
-4034 4520 l
-3924 4520 l
-3931 4520 m
-4034 4520 l
-4034 4521 l
-3931 4521 l
-3937 4521 m
-4034 4521 l
-4034 4522 l
-3937 4522 l
-3944 4522 m
-4033 4522 l
-4033 4523 l
-3944 4523 l
-3951 4523 m
-4033 4523 l
-4033 4524 l
-3951 4524 l
-3957 4524 m
-4033 4524 l
-4033 4525 l
-3957 4525 l
-3964 4525 m
-4033 4525 l
-4033 4526 l
-3964 4526 l
-3971 4526 m
-4033 4526 l
-4033 4527 l
-3971 4527 l
-3977 4527 m
-4033 4527 l
-4033 4528 l
-3977 4528 l
-3984 4528 m
-4033 4528 l
-4033 4529 l
-3984 4529 l
-3991 4529 m
-4032 4529 l
-4032 4530 l
-3991 4530 l
-3997 4530 m
-4032 4530 l
-4032 4531 l
-3997 4531 l
-4004 4531 m
-4032 4531 l
-4032 4532 l
-4004 4532 l
-4011 4532 m
-4032 4532 l
-4032 4533 l
-4011 4533 l
-4017 4533 m
-4032 4533 l
-4032 4534 l
-4017 4534 l
-4024 4534 m
-4032 4534 l
-4032 4535 l
-4024 4535 l
-Y
-4058.5 4353.6 m
-3939 4336 l
-3911 4517 l
-4031 4535 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3972 4366 m
-3968 4365 l
-3959 4368 l
-3954 4372 l
-3949 4379 l
-3947 4396 l
-3949 4405 l
-3953 4410 l
-3961 4415 l
-3969 4416 l
-3978 4413 l
-3991 4407 l
-4039 4372 l
-4030 4430 l
-S
-3960 4449 m
-3956 4448 l
-3947 4451 l
-3942 4454 l
-3937 4462 l
-3934 4478 l
-3937 4487 l
-3941 4492 l
-3948 4497 l
-3956 4499 l
-3965 4496 l
-3979 4489 l
-4026 4454 l
-4018 4512 l
-S
-1 g
-2292 3957 m
-2296 3957 l
-2296 3958 l
-2292 3958 l
-2289 3958 m
-2296 3958 l
-2296 3959 l
-2289 3959 l
-2287 3959 m
-2297 3959 l
-2297 3960 l
-2287 3960 l
-2284 3960 m
-2297 3960 l
-2297 3961 l
-2284 3961 l
-2282 3961 m
-2297 3961 l
-2297 3962 l
-2282 3962 l
-2279 3962 m
-2298 3962 l
-2298 3963 l
-2279 3963 l
-2277 3963 m
-2298 3963 l
-2298 3964 l
-2277 3964 l
-2274 3964 m
-2299 3964 l
-2299 3965 l
-2274 3965 l
-2272 3965 m
-2299 3965 l
-2299 3966 l
-2272 3966 l
-2269 3966 m
-2299 3966 l
-2299 3967 l
-2269 3967 l
-2267 3967 m
-2300 3967 l
-2300 3968 l
-2267 3968 l
-2264 3968 m
-2300 3968 l
-2300 3969 l
-2264 3969 l
-2262 3969 m
-2301 3969 l
-2301 3970 l
-2262 3970 l
-2259 3970 m
-2301 3970 l
-2301 3971 l
-2259 3971 l
-2256 3971 m
-2301 3971 l
-2301 3972 l
-2256 3972 l
-2254 3972 m
-2302 3972 l
-2302 3973 l
-2254 3973 l
-2251 3973 m
-2302 3973 l
-2302 3974 l
-2251 3974 l
-2249 3974 m
-2303 3974 l
-2303 3975 l
-2249 3975 l
-2246 3975 m
-2303 3975 l
-2303 3976 l
-2246 3976 l
-2244 3976 m
-2303 3976 l
-2303 3977 l
-2244 3977 l
-2241 3977 m
-2304 3977 l
-2304 3978 l
-2241 3978 l
-2239 3978 m
-2304 3978 l
-2304 3979 l
-2239 3979 l
-2236 3979 m
-2305 3979 l
-2305 3980 l
-2236 3980 l
-2234 3980 m
-2305 3980 l
-2305 3981 l
-2234 3981 l
-2231 3981 m
-2305 3981 l
-2305 3982 l
-2231 3982 l
-2229 3982 m
-2306 3982 l
-2306 3983 l
-2229 3983 l
-2226 3983 m
-2306 3983 l
-2306 3984 l
-2226 3984 l
-2224 3984 m
-2307 3984 l
-2307 3985 l
-2224 3985 l
-2221 3985 m
-2307 3985 l
-2307 3986 l
-2221 3986 l
-2218 3986 m
-2307 3986 l
-2307 3987 l
-2218 3987 l
-2216 3987 m
-2308 3987 l
-2308 3988 l
-2216 3988 l
-2213 3988 m
-2308 3988 l
-2308 3989 l
-2213 3989 l
-2211 3989 m
-2308 3989 l
-2308 3990 l
-2211 3990 l
-2208 3990 m
-2309 3990 l
-2309 3991 l
-2208 3991 l
-2206 3991 m
-2309 3991 l
-2309 3992 l
-2206 3992 l
-2203 3992 m
-2310 3992 l
-2310 3993 l
-2203 3993 l
-2201 3993 m
-2310 3993 l
-2310 3994 l
-2201 3994 l
-2198 3994 m
-2310 3994 l
-2310 3995 l
-2198 3995 l
-2196 3995 m
-2311 3995 l
-2311 3996 l
-2196 3996 l
-2193 3996 m
-2311 3996 l
-2311 3997 l
-2193 3997 l
-2191 3997 m
-2312 3997 l
-2312 3998 l
-2191 3998 l
-2188 3998 m
-2312 3998 l
-2312 3999 l
-2188 3999 l
-2186 3999 m
-2312 3999 l
-2312 4000 l
-2186 4000 l
-2183 4000 m
-2313 4000 l
-2313 4001 l
-2183 4001 l
-2180 4001 m
-2313 4001 l
-2313 4002 l
-2180 4002 l
-2178 4002 m
-2314 4002 l
-2314 4003 l
-2178 4003 l
-2175 4003 m
-2314 4003 l
-2314 4004 l
-2175 4004 l
-2173 4004 m
-2314 4004 l
-2314 4005 l
-2173 4005 l
-2170 4005 m
-2315 4005 l
-2315 4006 l
-2170 4006 l
-2168 4006 m
-2315 4006 l
-2315 4007 l
-2168 4007 l
-2165 4007 m
-2316 4007 l
-2316 4008 l
-2165 4008 l
-2163 4008 m
-2316 4008 l
-2316 4009 l
-2163 4009 l
-2160 4009 m
-2316 4009 l
-2316 4010 l
-2160 4010 l
-2158 4010 m
-2317 4010 l
-2317 4011 l
-2158 4011 l
-2155 4011 m
-2317 4011 l
-2317 4012 l
-2155 4012 l
-2153 4012 m
-2318 4012 l
-2318 4013 l
-2153 4013 l
-2150 4013 m
-2318 4013 l
-2318 4014 l
-2150 4014 l
-2147 4014 m
-2318 4014 l
-2318 4015 l
-2147 4015 l
-2145 4015 m
-2319 4015 l
-2319 4016 l
-2145 4016 l
-2142 4016 m
-2319 4016 l
-2319 4017 l
-2142 4017 l
-2140 4017 m
-2320 4017 l
-2320 4018 l
-2140 4018 l
-2137 4018 m
-2320 4018 l
-2320 4019 l
-2137 4019 l
-2135 4019 m
-2320 4019 l
-2320 4020 l
-2135 4020 l
-2132 4020 m
-2321 4020 l
-2321 4021 l
-2132 4021 l
-2130 4021 m
-2321 4021 l
-2321 4022 l
-2130 4022 l
-2127 4022 m
-2321 4022 l
-2321 4023 l
-2127 4023 l
-2125 4023 m
-2322 4023 l
-2322 4024 l
-2125 4024 l
-2122 4024 m
-2322 4024 l
-2322 4025 l
-2122 4025 l
-2120 4025 m
-2323 4025 l
-2323 4026 l
-2120 4026 l
-2117 4026 m
-2323 4026 l
-2323 4027 l
-2117 4027 l
-2115 4027 m
-2323 4027 l
-2323 4028 l
-2115 4028 l
-2112 4028 m
-2324 4028 l
-2324 4029 l
-2112 4029 l
-2109 4029 m
-2324 4029 l
-2324 4030 l
-2109 4030 l
-2107 4030 m
-2325 4030 l
-2325 4031 l
-2107 4031 l
-2104 4031 m
-2325 4031 l
-2325 4032 l
-2104 4032 l
-2102 4032 m
-2325 4032 l
-2325 4033 l
-2102 4033 l
-2099 4033 m
-2326 4033 l
-2326 4034 l
-2099 4034 l
-2097 4034 m
-2326 4034 l
-2326 4035 l
-2097 4035 l
-2094 4035 m
-2327 4035 l
-2327 4036 l
-2094 4036 l
-2092 4036 m
-2327 4036 l
-2327 4037 l
-2092 4037 l
-2089 4037 m
-2327 4037 l
-2327 4038 l
-2089 4038 l
-2087 4038 m
-2328 4038 l
-2328 4039 l
-2087 4039 l
-2084 4039 m
-2328 4039 l
-2328 4040 l
-2084 4040 l
-2082 4040 m
-2329 4040 l
-2329 4041 l
-2082 4041 l
-2079 4041 m
-2329 4041 l
-2329 4042 l
-2079 4042 l
-2077 4042 m
-2329 4042 l
-2329 4043 l
-2077 4043 l
-2074 4043 m
-2330 4043 l
-2330 4044 l
-2074 4044 l
-2071 4044 m
-2330 4044 l
-2330 4045 l
-2071 4045 l
-2069 4045 m
-2331 4045 l
-2331 4046 l
-2069 4046 l
-2066 4046 m
-2331 4046 l
-2331 4047 l
-2066 4047 l
-2064 4047 m
-2331 4047 l
-2331 4048 l
-2064 4048 l
-2061 4048 m
-2332 4048 l
-2332 4049 l
-2061 4049 l
-2059 4049 m
-2332 4049 l
-2332 4050 l
-2059 4050 l
-2056 4050 m
-2333 4050 l
-2333 4051 l
-2056 4051 l
-2054 4051 m
-2333 4051 l
-2333 4052 l
-2054 4052 l
-2051 4052 m
-2333 4052 l
-2333 4053 l
-2051 4053 l
-2049 4053 m
-2334 4053 l
-2334 4054 l
-2049 4054 l
-2046 4054 m
-2334 4054 l
-2334 4055 l
-2046 4055 l
-2044 4055 m
-2334 4055 l
-2334 4056 l
-2044 4056 l
-2041 4056 m
-2335 4056 l
-2335 4057 l
-2041 4057 l
-2038 4057 m
-2335 4057 l
-2335 4058 l
-2038 4058 l
-2036 4058 m
-2336 4058 l
-2336 4059 l
-2036 4059 l
-2033 4059 m
-2336 4059 l
-2336 4060 l
-2033 4060 l
-2031 4060 m
-2336 4060 l
-2336 4061 l
-2031 4061 l
-2028 4061 m
-2337 4061 l
-2337 4062 l
-2028 4062 l
-2026 4062 m
-2337 4062 l
-2337 4063 l
-2026 4063 l
-2023 4063 m
-2338 4063 l
-2338 4064 l
-2023 4064 l
-2021 4064 m
-2338 4064 l
-2338 4065 l
-2021 4065 l
-2018 4065 m
-2338 4065 l
-2338 4066 l
-2018 4066 l
-2016 4066 m
-2339 4066 l
-2339 4067 l
-2016 4067 l
-2013 4067 m
-2339 4067 l
-2339 4068 l
-2013 4068 l
-2011 4068 m
-2340 4068 l
-2340 4069 l
-2011 4069 l
-2008 4069 m
-2340 4069 l
-2340 4070 l
-2008 4070 l
-2006 4070 m
-2338 4070 l
-2338 4071 l
-2006 4071 l
-2003 4071 m
-2335 4071 l
-2335 4072 l
-2003 4072 l
-2000 4072 m
-2333 4072 l
-2333 4073 l
-2000 4073 l
-1998 4073 m
-2330 4073 l
-2330 4074 l
-1998 4074 l
-1995 4074 m
-2328 4074 l
-2328 4075 l
-1995 4075 l
-1993 4075 m
-2325 4075 l
-2325 4076 l
-1993 4076 l
-1990 4076 m
-2323 4076 l
-2323 4077 l
-1990 4077 l
-1988 4077 m
-2320 4077 l
-2320 4078 l
-1988 4078 l
-1985 4078 m
-2318 4078 l
-2318 4079 l
-1985 4079 l
-1983 4079 m
-2315 4079 l
-2315 4080 l
-1983 4080 l
-1980 4080 m
-2312 4080 l
-2312 4081 l
-1980 4081 l
-1978 4081 m
-2310 4081 l
-2310 4082 l
-1978 4082 l
-1975 4082 m
-2307 4082 l
-2307 4083 l
-1975 4083 l
-1973 4083 m
-2305 4083 l
-2305 4084 l
-1973 4084 l
-1970 4084 m
-2302 4084 l
-2302 4085 l
-1970 4085 l
-1968 4085 m
-2300 4085 l
-2300 4086 l
-1968 4086 l
-1965 4086 m
-2297 4086 l
-2297 4087 l
-1965 4087 l
-1962 4087 m
-2295 4087 l
-2295 4088 l
-1962 4088 l
-1960 4088 m
-2292 4088 l
-2292 4089 l
-1960 4089 l
-1957 4089 m
-2290 4089 l
-2290 4090 l
-1957 4090 l
-1955 4090 m
-2287 4090 l
-2287 4091 l
-1955 4091 l
-1952 4091 m
-2285 4091 l
-2285 4092 l
-1952 4092 l
-1950 4092 m
-2282 4092 l
-2282 4093 l
-1950 4093 l
-1947 4093 m
-2280 4093 l
-2280 4094 l
-1947 4094 l
-1945 4094 m
-2277 4094 l
-2277 4095 l
-1945 4095 l
-1942 4095 m
-2275 4095 l
-2275 4096 l
-1942 4096 l
-1940 4096 m
-2272 4096 l
-2272 4097 l
-1940 4097 l
-1937 4097 m
-2270 4097 l
-2270 4098 l
-1937 4098 l
-1935 4098 m
-2267 4098 l
-2267 4099 l
-1935 4099 l
-1932 4099 m
-2265 4099 l
-2265 4100 l
-1932 4100 l
-1930 4100 m
-2262 4100 l
-2262 4101 l
-1930 4101 l
-1930 4101 m
-2259 4101 l
-2259 4102 l
-1930 4102 l
-1930 4102 m
-2257 4102 l
-2257 4103 l
-1930 4103 l
-1930 4103 m
-2254 4103 l
-2254 4104 l
-1930 4104 l
-1931 4104 m
-2252 4104 l
-2252 4105 l
-1931 4105 l
-1931 4105 m
-2249 4105 l
-2249 4106 l
-1931 4106 l
-1931 4106 m
-2247 4106 l
-2247 4107 l
-1931 4107 l
-1932 4107 m
-2244 4107 l
-2244 4108 l
-1932 4108 l
-1932 4108 m
-2242 4108 l
-2242 4109 l
-1932 4109 l
-1933 4109 m
-2239 4109 l
-2239 4110 l
-1933 4110 l
-1933 4110 m
-2237 4110 l
-2237 4111 l
-1933 4111 l
-1933 4111 m
-2234 4111 l
-2234 4112 l
-1933 4112 l
-1934 4112 m
-2232 4112 l
-2232 4113 l
-1934 4113 l
-1934 4113 m
-2229 4113 l
-2229 4114 l
-1934 4114 l
-1935 4114 m
-2227 4114 l
-2227 4115 l
-1935 4115 l
-1935 4115 m
-2224 4115 l
-2224 4116 l
-1935 4116 l
-1935 4116 m
-2222 4116 l
-2222 4117 l
-1935 4117 l
-1936 4117 m
-2219 4117 l
-2219 4118 l
-1936 4118 l
-1936 4118 m
-2217 4118 l
-2217 4119 l
-1936 4119 l
-1937 4119 m
-2214 4119 l
-2214 4120 l
-1937 4120 l
-1937 4120 m
-2212 4120 l
-2212 4121 l
-1937 4121 l
-1937 4121 m
-2209 4121 l
-2209 4122 l
-1937 4122 l
-1938 4122 m
-2207 4122 l
-2207 4123 l
-1938 4123 l
-1938 4123 m
-2204 4123 l
-2204 4124 l
-1938 4124 l
-1938 4124 m
-2201 4124 l
-2201 4125 l
-1938 4125 l
-1939 4125 m
-2199 4125 l
-2199 4126 l
-1939 4126 l
-1939 4126 m
-2196 4126 l
-2196 4127 l
-1939 4127 l
-1940 4127 m
-2194 4127 l
-2194 4128 l
-1940 4128 l
-1940 4128 m
-2191 4128 l
-2191 4129 l
-1940 4129 l
-1940 4129 m
-2189 4129 l
-2189 4130 l
-1940 4130 l
-1941 4130 m
-2186 4130 l
-2186 4131 l
-1941 4131 l
-1941 4131 m
-2184 4131 l
-2184 4132 l
-1941 4132 l
-1942 4132 m
-2181 4132 l
-2181 4133 l
-1942 4133 l
-1942 4133 m
-2179 4133 l
-2179 4134 l
-1942 4134 l
-1942 4134 m
-2176 4134 l
-2176 4135 l
-1942 4135 l
-1943 4135 m
-2174 4135 l
-2174 4136 l
-1943 4136 l
-1943 4136 m
-2171 4136 l
-2171 4137 l
-1943 4137 l
-1944 4137 m
-2169 4137 l
-2169 4138 l
-1944 4138 l
-1944 4138 m
-2166 4138 l
-2166 4139 l
-1944 4139 l
-1944 4139 m
-2164 4139 l
-2164 4140 l
-1944 4140 l
-1945 4140 m
-2161 4140 l
-2161 4141 l
-1945 4141 l
-1945 4141 m
-2159 4141 l
-2159 4142 l
-1945 4142 l
-1945 4142 m
-2156 4142 l
-2156 4143 l
-1945 4143 l
-1946 4143 m
-2154 4143 l
-2154 4144 l
-1946 4144 l
-1946 4144 m
-2151 4144 l
-2151 4145 l
-1946 4145 l
-1947 4145 m
-2149 4145 l
-2149 4146 l
-1947 4146 l
-1947 4146 m
-2146 4146 l
-2146 4147 l
-1947 4147 l
-1947 4147 m
-2143 4147 l
-2143 4148 l
-1947 4148 l
-1948 4148 m
-2141 4148 l
-2141 4149 l
-1948 4149 l
-1948 4149 m
-2138 4149 l
-2138 4150 l
-1948 4150 l
-1949 4150 m
-2136 4150 l
-2136 4151 l
-1949 4151 l
-1949 4151 m
-2133 4151 l
-2133 4152 l
-1949 4152 l
-1949 4152 m
-2131 4152 l
-2131 4153 l
-1949 4153 l
-1950 4153 m
-2128 4153 l
-2128 4154 l
-1950 4154 l
-1950 4154 m
-2126 4154 l
-2126 4155 l
-1950 4155 l
-1951 4155 m
-2123 4155 l
-2123 4156 l
-1951 4156 l
-1951 4156 m
-2121 4156 l
-2121 4157 l
-1951 4157 l
-1951 4157 m
-2118 4157 l
-2118 4158 l
-1951 4158 l
-1952 4158 m
-2116 4158 l
-2116 4159 l
-1952 4159 l
-1952 4159 m
-2113 4159 l
-2113 4160 l
-1952 4160 l
-1952 4160 m
-2111 4160 l
-2111 4161 l
-1952 4161 l
-1953 4161 m
-2108 4161 l
-2108 4162 l
-1953 4162 l
-1953 4162 m
-2106 4162 l
-2106 4163 l
-1953 4163 l
-1954 4163 m
-2103 4163 l
-2103 4164 l
-1954 4164 l
-1954 4164 m
-2101 4164 l
-2101 4165 l
-1954 4165 l
-1954 4165 m
-2098 4165 l
-2098 4166 l
-1954 4166 l
-1955 4166 m
-2096 4166 l
-2096 4167 l
-1955 4167 l
-1955 4167 m
-2093 4167 l
-2093 4168 l
-1955 4168 l
-1956 4168 m
-2091 4168 l
-2091 4169 l
-1956 4169 l
-1956 4169 m
-2088 4169 l
-2088 4170 l
-1956 4170 l
-1956 4170 m
-2085 4170 l
-2085 4171 l
-1956 4171 l
-1957 4171 m
-2083 4171 l
-2083 4172 l
-1957 4172 l
-1957 4172 m
-2080 4172 l
-2080 4173 l
-1957 4173 l
-1958 4173 m
-2078 4173 l
-2078 4174 l
-1958 4174 l
-1958 4174 m
-2075 4174 l
-2075 4175 l
-1958 4175 l
-1958 4175 m
-2073 4175 l
-2073 4176 l
-1958 4176 l
-1959 4176 m
-2070 4176 l
-2070 4177 l
-1959 4177 l
-1959 4177 m
-2068 4177 l
-2068 4178 l
-1959 4178 l
-1959 4178 m
-2065 4178 l
-2065 4179 l
-1959 4179 l
-1960 4179 m
-2063 4179 l
-2063 4180 l
-1960 4180 l
-1960 4180 m
-2060 4180 l
-2060 4181 l
-1960 4181 l
-1961 4181 m
-2058 4181 l
-2058 4182 l
-1961 4182 l
-1961 4182 m
-2055 4182 l
-2055 4183 l
-1961 4183 l
-1961 4183 m
-2053 4183 l
-2053 4184 l
-1961 4184 l
-1962 4184 m
-2050 4184 l
-2050 4185 l
-1962 4185 l
-1962 4185 m
-2048 4185 l
-2048 4186 l
-1962 4186 l
-1963 4186 m
-2045 4186 l
-2045 4187 l
-1963 4187 l
-1963 4187 m
-2043 4187 l
-2043 4188 l
-1963 4188 l
-1963 4188 m
-2040 4188 l
-2040 4189 l
-1963 4189 l
-1964 4189 m
-2038 4189 l
-2038 4190 l
-1964 4190 l
-1964 4190 m
-2035 4190 l
-2035 4191 l
-1964 4191 l
-1965 4191 m
-2033 4191 l
-2033 4192 l
-1965 4192 l
-1965 4192 m
-2030 4192 l
-2030 4193 l
-1965 4193 l
-1965 4193 m
-2027 4193 l
-2027 4194 l
-1965 4194 l
-1966 4194 m
-2025 4194 l
-2025 4195 l
-1966 4195 l
-1966 4195 m
-2022 4195 l
-2022 4196 l
-1966 4196 l
-1966 4196 m
-2020 4196 l
-2020 4197 l
-1966 4197 l
-1967 4197 m
-2017 4197 l
-2017 4198 l
-1967 4198 l
-1967 4198 m
-2015 4198 l
-2015 4199 l
-1967 4199 l
-1968 4199 m
-2012 4199 l
-2012 4200 l
-1968 4200 l
-1968 4200 m
-2010 4200 l
-2010 4201 l
-1968 4201 l
-1968 4201 m
-2007 4201 l
-2007 4202 l
-1968 4202 l
-1969 4202 m
-2005 4202 l
-2005 4203 l
-1969 4203 l
-1969 4203 m
-2002 4203 l
-2002 4204 l
-1969 4204 l
-1970 4204 m
-2000 4204 l
-2000 4205 l
-1970 4205 l
-1970 4205 m
-1997 4205 l
-1997 4206 l
-1970 4206 l
-1970 4206 m
-1995 4206 l
-1995 4207 l
-1970 4207 l
-1971 4207 m
-1992 4207 l
-1992 4208 l
-1971 4208 l
-1971 4208 m
-1990 4208 l
-1990 4209 l
-1971 4209 l
-1972 4209 m
-1987 4209 l
-1987 4210 l
-1972 4210 l
-1972 4210 m
-1985 4210 l
-1985 4211 l
-1972 4211 l
-1972 4211 m
-1982 4211 l
-1982 4212 l
-1972 4212 l
-1973 4212 m
-1980 4212 l
-1980 4213 l
-1973 4213 l
-1973 4213 m
-1977 4213 l
-1977 4214 l
-1973 4214 l
-Y
-2339.2 4069.2 m
-2295 3957 l
-1930 4101 l
-1974 4214 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-2242 4027 m
-2250 4037 l
-2261 4042 l
-2274 4041 l
-2278 4040 l
-2288 4031 l
-2293 4020 l
-2292 4007 l
-2291 4003 l
-2282 3993 l
-2271 3988 l
-2258 3989 l
-2254 3991 l
-2244 3999 l
-2239 4010 l
-2242 4027 l
-2249 4046 l
-2261 4064 l
-2273 4073 l
-2286 4072 l
-2294 4069 l
-2304 4061 l
-2305 4051 l
-S
-2180 4020 m
-2194 4019 l
-2206 4028 l
-2217 4046 l
-2222 4057 l
-2226 4078 l
-2223 4093 l
-2213 4101 l
-2205 4104 l
-2192 4105 l
-2179 4097 l
-2168 4079 l
-2163 4067 l
-2159 4046 l
-2162 4031 l
-2173 4023 l
-2180 4020 l
-S
-2129 4072 m
-2134 4074 l
-2132 4079 l
-2127 4077 l
-2129 4072 l
-S
-2147 4118 m
-2153 4121 l
-2150 4126 l
-2145 4124 l
-2147 4118 l
-S
-2064 4066 m
-2077 4065 l
-2089 4074 l
-2101 4092 l
-2106 4103 l
-2109 4124 l
-2106 4139 l
-2096 4148 l
-2088 4151 l
-2075 4151 l
-2063 4143 l
-2051 4125 l
-2047 4113 l
-2043 4092 l
-2046 4078 l
-2056 4069 l
-2064 4066 l
-S
-1986 4097 m
-1999 4096 l
-2012 4105 l
-2023 4122 l
-2028 4134 l
-2032 4155 l
-2029 4170 l
-2018 4178 l
-2011 4181 l
-1998 4182 l
-1985 4173 l
-1974 4156 l
-1969 4144 l
-1965 4123 l
-1968 4108 l
-1978 4100 l
-1986 4097 l
-S
-1 g
-2732 3782 m
-2736 3782 l
-2736 3783 l
-2732 3783 l
-2729 3783 m
-2736 3783 l
-2736 3784 l
-2729 3784 l
-2727 3784 m
-2737 3784 l
-2737 3785 l
-2727 3785 l
-2724 3785 m
-2737 3785 l
-2737 3786 l
-2724 3786 l
-2722 3786 m
-2737 3786 l
-2737 3787 l
-2722 3787 l
-2719 3787 m
-2738 3787 l
-2738 3788 l
-2719 3788 l
-2717 3788 m
-2738 3788 l
-2738 3789 l
-2717 3789 l
-2714 3789 m
-2739 3789 l
-2739 3790 l
-2714 3790 l
-2712 3790 m
-2739 3790 l
-2739 3791 l
-2712 3791 l
-2709 3791 m
-2739 3791 l
-2739 3792 l
-2709 3792 l
-2707 3792 m
-2740 3792 l
-2740 3793 l
-2707 3793 l
-2704 3793 m
-2740 3793 l
-2740 3794 l
-2704 3794 l
-2702 3794 m
-2741 3794 l
-2741 3795 l
-2702 3795 l
-2699 3795 m
-2741 3795 l
-2741 3796 l
-2699 3796 l
-2697 3796 m
-2741 3796 l
-2741 3797 l
-2697 3797 l
-2694 3797 m
-2742 3797 l
-2742 3798 l
-2694 3798 l
-2692 3798 m
-2742 3798 l
-2742 3799 l
-2692 3799 l
-2689 3799 m
-2743 3799 l
-2743 3800 l
-2689 3800 l
-2687 3800 m
-2743 3800 l
-2743 3801 l
-2687 3801 l
-2684 3801 m
-2743 3801 l
-2743 3802 l
-2684 3802 l
-2682 3802 m
-2744 3802 l
-2744 3803 l
-2682 3803 l
-2679 3803 m
-2744 3803 l
-2744 3804 l
-2679 3804 l
-2677 3804 m
-2745 3804 l
-2745 3805 l
-2677 3805 l
-2674 3805 m
-2745 3805 l
-2745 3806 l
-2674 3806 l
-2672 3806 m
-2745 3806 l
-2745 3807 l
-2672 3807 l
-2669 3807 m
-2746 3807 l
-2746 3808 l
-2669 3808 l
-2667 3808 m
-2746 3808 l
-2746 3809 l
-2667 3809 l
-2664 3809 m
-2747 3809 l
-2747 3810 l
-2664 3810 l
-2662 3810 m
-2747 3810 l
-2747 3811 l
-2662 3811 l
-2659 3811 m
-2747 3811 l
-2747 3812 l
-2659 3812 l
-2657 3812 m
-2748 3812 l
-2748 3813 l
-2657 3813 l
-2654 3813 m
-2748 3813 l
-2748 3814 l
-2654 3814 l
-2652 3814 m
-2749 3814 l
-2749 3815 l
-2652 3815 l
-2649 3815 m
-2749 3815 l
-2749 3816 l
-2649 3816 l
-2646 3816 m
-2749 3816 l
-2749 3817 l
-2646 3817 l
-2644 3817 m
-2750 3817 l
-2750 3818 l
-2644 3818 l
-2641 3818 m
-2750 3818 l
-2750 3819 l
-2641 3819 l
-2639 3819 m
-2750 3819 l
-2750 3820 l
-2639 3820 l
-2636 3820 m
-2751 3820 l
-2751 3821 l
-2636 3821 l
-2634 3821 m
-2751 3821 l
-2751 3822 l
-2634 3822 l
-2631 3822 m
-2752 3822 l
-2752 3823 l
-2631 3823 l
-2629 3823 m
-2752 3823 l
-2752 3824 l
-2629 3824 l
-2626 3824 m
-2752 3824 l
-2752 3825 l
-2626 3825 l
-2624 3825 m
-2753 3825 l
-2753 3826 l
-2624 3826 l
-2621 3826 m
-2753 3826 l
-2753 3827 l
-2621 3827 l
-2619 3827 m
-2754 3827 l
-2754 3828 l
-2619 3828 l
-2616 3828 m
-2754 3828 l
-2754 3829 l
-2616 3829 l
-2614 3829 m
-2754 3829 l
-2754 3830 l
-2614 3830 l
-2611 3830 m
-2755 3830 l
-2755 3831 l
-2611 3831 l
-2609 3831 m
-2755 3831 l
-2755 3832 l
-2609 3832 l
-2606 3832 m
-2756 3832 l
-2756 3833 l
-2606 3833 l
-2604 3833 m
-2756 3833 l
-2756 3834 l
-2604 3834 l
-2601 3834 m
-2756 3834 l
-2756 3835 l
-2601 3835 l
-2599 3835 m
-2757 3835 l
-2757 3836 l
-2599 3836 l
-2596 3836 m
-2757 3836 l
-2757 3837 l
-2596 3837 l
-2594 3837 m
-2758 3837 l
-2758 3838 l
-2594 3838 l
-2591 3838 m
-2758 3838 l
-2758 3839 l
-2591 3839 l
-2589 3839 m
-2758 3839 l
-2758 3840 l
-2589 3840 l
-2586 3840 m
-2759 3840 l
-2759 3841 l
-2586 3841 l
-2584 3841 m
-2759 3841 l
-2759 3842 l
-2584 3842 l
-2581 3842 m
-2760 3842 l
-2760 3843 l
-2581 3843 l
-2579 3843 m
-2760 3843 l
-2760 3844 l
-2579 3844 l
-2576 3844 m
-2760 3844 l
-2760 3845 l
-2576 3845 l
-2574 3845 m
-2761 3845 l
-2761 3846 l
-2574 3846 l
-2571 3846 m
-2761 3846 l
-2761 3847 l
-2571 3847 l
-2569 3847 m
-2762 3847 l
-2762 3848 l
-2569 3848 l
-2566 3848 m
-2762 3848 l
-2762 3849 l
-2566 3849 l
-2564 3849 m
-2762 3849 l
-2762 3850 l
-2564 3850 l
-2564 3850 m
-2763 3850 l
-2763 3852 l
-2564 3852 l
-2564 3852 m
-2764 3852 l
-2764 3853 l
-2564 3853 l
-2565 3853 m
-2764 3853 l
-2764 3855 l
-2565 3855 l
-2566 3855 m
-2765 3855 l
-2765 3858 l
-2566 3858 l
-2567 3858 m
-2766 3858 l
-2766 3860 l
-2567 3860 l
-2568 3860 m
-2767 3860 l
-2767 3863 l
-2568 3863 l
-2569 3863 m
-2768 3863 l
-2768 3865 l
-2569 3865 l
-2570 3865 m
-2769 3865 l
-2769 3868 l
-2570 3868 l
-2571 3868 m
-2770 3868 l
-2770 3870 l
-2571 3870 l
-2572 3870 m
-2771 3870 l
-2771 3873 l
-2572 3873 l
-2573 3873 m
-2772 3873 l
-2772 3875 l
-2573 3875 l
-2574 3875 m
-2773 3875 l
-2773 3878 l
-2574 3878 l
-2575 3878 m
-2774 3878 l
-2774 3880 l
-2575 3880 l
-2576 3880 m
-2775 3880 l
-2775 3883 l
-2576 3883 l
-2577 3883 m
-2776 3883 l
-2776 3885 l
-2577 3885 l
-2578 3885 m
-2777 3885 l
-2777 3888 l
-2578 3888 l
-2579 3888 m
-2778 3888 l
-2778 3890 l
-2579 3890 l
-2580 3890 m
-2779 3890 l
-2779 3893 l
-2580 3893 l
-2581 3893 m
-2780 3893 l
-2780 3894 l
-2581 3894 l
-2581 3894 m
-2780 3894 l
-2780 3895 l
-2581 3895 l
-2582 3895 m
-2779 3895 l
-2779 3896 l
-2582 3896 l
-2582 3896 m
-2777 3896 l
-2777 3897 l
-2582 3897 l
-2582 3897 m
-2774 3897 l
-2774 3898 l
-2582 3898 l
-2583 3898 m
-2772 3898 l
-2772 3899 l
-2583 3899 l
-2583 3899 m
-2769 3899 l
-2769 3900 l
-2583 3900 l
-2584 3900 m
-2767 3900 l
-2767 3901 l
-2584 3901 l
-2584 3901 m
-2764 3901 l
-2764 3902 l
-2584 3902 l
-2584 3902 m
-2762 3902 l
-2762 3903 l
-2584 3903 l
-2585 3903 m
-2759 3903 l
-2759 3904 l
-2585 3904 l
-2585 3904 m
-2757 3904 l
-2757 3905 l
-2585 3905 l
-2586 3905 m
-2754 3905 l
-2754 3906 l
-2586 3906 l
-2586 3906 m
-2752 3906 l
-2752 3907 l
-2586 3907 l
-2586 3907 m
-2749 3907 l
-2749 3908 l
-2586 3908 l
-2587 3908 m
-2747 3908 l
-2747 3909 l
-2587 3909 l
-2587 3909 m
-2744 3909 l
-2744 3910 l
-2587 3910 l
-2588 3910 m
-2741 3910 l
-2741 3911 l
-2588 3911 l
-2588 3911 m
-2739 3911 l
-2739 3912 l
-2588 3912 l
-2588 3912 m
-2736 3912 l
-2736 3913 l
-2588 3913 l
-2589 3913 m
-2734 3913 l
-2734 3914 l
-2589 3914 l
-2589 3914 m
-2731 3914 l
-2731 3915 l
-2589 3915 l
-2590 3915 m
-2729 3915 l
-2729 3916 l
-2590 3916 l
-2590 3916 m
-2726 3916 l
-2726 3917 l
-2590 3917 l
-2590 3917 m
-2724 3917 l
-2724 3918 l
-2590 3918 l
-2591 3918 m
-2721 3918 l
-2721 3919 l
-2591 3919 l
-2591 3919 m
-2719 3919 l
-2719 3920 l
-2591 3920 l
-2592 3920 m
-2716 3920 l
-2716 3921 l
-2592 3921 l
-2592 3921 m
-2714 3921 l
-2714 3922 l
-2592 3922 l
-2592 3922 m
-2711 3922 l
-2711 3923 l
-2592 3923 l
-2593 3923 m
-2708 3923 l
-2708 3924 l
-2593 3924 l
-2593 3924 m
-2706 3924 l
-2706 3925 l
-2593 3925 l
-2594 3925 m
-2703 3925 l
-2703 3926 l
-2594 3926 l
-2594 3926 m
-2701 3926 l
-2701 3927 l
-2594 3927 l
-2594 3927 m
-2698 3927 l
-2698 3928 l
-2594 3928 l
-2595 3928 m
-2696 3928 l
-2696 3929 l
-2595 3929 l
-2595 3929 m
-2693 3929 l
-2693 3930 l
-2595 3930 l
-2596 3930 m
-2691 3930 l
-2691 3931 l
-2596 3931 l
-2596 3931 m
-2688 3931 l
-2688 3932 l
-2596 3932 l
-2596 3932 m
-2686 3932 l
-2686 3933 l
-2596 3933 l
-2597 3933 m
-2683 3933 l
-2683 3934 l
-2597 3934 l
-2597 3934 m
-2681 3934 l
-2681 3935 l
-2597 3935 l
-2598 3935 m
-2678 3935 l
-2678 3936 l
-2598 3936 l
-2598 3936 m
-2675 3936 l
-2675 3937 l
-2598 3937 l
-2598 3937 m
-2673 3937 l
-2673 3938 l
-2598 3938 l
-2599 3938 m
-2670 3938 l
-2670 3939 l
-2599 3939 l
-2599 3939 m
-2668 3939 l
-2668 3940 l
-2599 3940 l
-2600 3940 m
-2665 3940 l
-2665 3941 l
-2600 3941 l
-2600 3941 m
-2663 3941 l
-2663 3942 l
-2600 3942 l
-2600 3942 m
-2660 3942 l
-2660 3943 l
-2600 3943 l
-2601 3943 m
-2658 3943 l
-2658 3944 l
-2601 3944 l
-2601 3944 m
-2655 3944 l
-2655 3945 l
-2601 3945 l
-2602 3945 m
-2653 3945 l
-2653 3946 l
-2602 3946 l
-2602 3946 m
-2650 3946 l
-2650 3947 l
-2602 3947 l
-2602 3947 m
-2648 3947 l
-2648 3948 l
-2602 3948 l
-2603 3948 m
-2645 3948 l
-2645 3949 l
-2603 3949 l
-2603 3949 m
-2642 3949 l
-2642 3950 l
-2603 3950 l
-2604 3950 m
-2640 3950 l
-2640 3951 l
-2604 3951 l
-2604 3951 m
-2637 3951 l
-2637 3952 l
-2604 3952 l
-2604 3952 m
-2635 3952 l
-2635 3953 l
-2604 3953 l
-2605 3953 m
-2632 3953 l
-2632 3954 l
-2605 3954 l
-2605 3954 m
-2630 3954 l
-2630 3955 l
-2605 3955 l
-2606 3955 m
-2627 3955 l
-2627 3956 l
-2606 3956 l
-2606 3956 m
-2625 3956 l
-2625 3957 l
-2606 3957 l
-2606 3957 m
-2622 3957 l
-2622 3958 l
-2606 3958 l
-2607 3958 m
-2620 3958 l
-2620 3959 l
-2607 3959 l
-2607 3959 m
-2617 3959 l
-2617 3960 l
-2607 3960 l
-2608 3960 m
-2615 3960 l
-2615 3961 l
-2608 3961 l
-2608 3961 m
-2612 3961 l
-2612 3962 l
-2608 3962 l
-Y
-2779.5 3894.8 m
-2735 3782 l
-2564 3850 l
-2609 3962 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-2675 3824 m
-2714 3808 l
-2732 3842 l
-2726 3840 l
-2713 3840 l
-2701 3845 l
-2691 3853 l
-2687 3864 l
-2687 3877 l
-2690 3885 l
-2699 3895 l
-2710 3900 l
-2723 3899 l
-2735 3895 l
-2745 3886 l
-2747 3881 l
-2748 3871 l
-S
-2625 3844 m
-2638 3843 l
-2645 3849 l
-2648 3857 l
-2647 3866 l
-2641 3873 l
-2627 3883 l
-2617 3892 l
-2612 3903 l
-2611 3912 l
-2616 3924 l
-2623 3930 l
-2628 3932 l
-2641 3932 l
-2657 3925 l
-2667 3917 l
-2669 3911 l
-2670 3902 l
-2666 3891 l
-2659 3884 l
-2648 3880 l
-2635 3880 l
-2617 3883 l
-2608 3882 l
-2601 3876 l
-2598 3868 l
-2599 3858 l
-2609 3850 l
-2625 3844 l
-S
-1 g
-3269 3569 m
-3273 3569 l
-3273 3570 l
-3269 3570 l
-3267 3570 m
-3273 3570 l
-3273 3571 l
-3267 3571 l
-3264 3571 m
-3274 3571 l
-3274 3572 l
-3264 3572 l
-3262 3572 m
-3274 3572 l
-3274 3573 l
-3262 3573 l
-3259 3573 m
-3274 3573 l
-3274 3574 l
-3259 3574 l
-3257 3574 m
-3275 3574 l
-3275 3575 l
-3257 3575 l
-3254 3575 m
-3275 3575 l
-3275 3576 l
-3254 3576 l
-3252 3576 m
-3276 3576 l
-3276 3577 l
-3252 3577 l
-3249 3577 m
-3276 3577 l
-3276 3578 l
-3249 3578 l
-3247 3578 m
-3276 3578 l
-3276 3579 l
-3247 3579 l
-3244 3579 m
-3277 3579 l
-3277 3580 l
-3244 3580 l
-3242 3580 m
-3277 3580 l
-3277 3581 l
-3242 3581 l
-3239 3581 m
-3278 3581 l
-3278 3582 l
-3239 3582 l
-3237 3582 m
-3278 3582 l
-3278 3583 l
-3237 3583 l
-3234 3583 m
-3278 3583 l
-3278 3584 l
-3234 3584 l
-3232 3584 m
-3279 3584 l
-3279 3585 l
-3232 3585 l
-3229 3585 m
-3279 3585 l
-3279 3586 l
-3229 3586 l
-3227 3586 m
-3280 3586 l
-3280 3587 l
-3227 3587 l
-3224 3587 m
-3280 3587 l
-3280 3588 l
-3224 3588 l
-3222 3588 m
-3280 3588 l
-3280 3589 l
-3222 3589 l
-3219 3589 m
-3281 3589 l
-3281 3590 l
-3219 3590 l
-3217 3590 m
-3281 3590 l
-3281 3591 l
-3217 3591 l
-3214 3591 m
-3282 3591 l
-3282 3592 l
-3214 3592 l
-3212 3592 m
-3282 3592 l
-3282 3593 l
-3212 3593 l
-3209 3593 m
-3282 3593 l
-3282 3594 l
-3209 3594 l
-3207 3594 m
-3283 3594 l
-3283 3595 l
-3207 3595 l
-3204 3595 m
-3283 3595 l
-3283 3596 l
-3204 3596 l
-3202 3596 m
-3284 3596 l
-3284 3597 l
-3202 3597 l
-3199 3597 m
-3284 3597 l
-3284 3598 l
-3199 3598 l
-3197 3598 m
-3284 3598 l
-3284 3599 l
-3197 3599 l
-3194 3599 m
-3285 3599 l
-3285 3600 l
-3194 3600 l
-3192 3600 m
-3285 3600 l
-3285 3601 l
-3192 3601 l
-3189 3601 m
-3286 3601 l
-3286 3602 l
-3189 3602 l
-3187 3602 m
-3286 3602 l
-3286 3603 l
-3187 3603 l
-3184 3603 m
-3286 3603 l
-3286 3604 l
-3184 3604 l
-3182 3604 m
-3287 3604 l
-3287 3605 l
-3182 3605 l
-3179 3605 m
-3287 3605 l
-3287 3606 l
-3179 3606 l
-3177 3606 m
-3288 3606 l
-3288 3607 l
-3177 3607 l
-3174 3607 m
-3288 3607 l
-3288 3608 l
-3174 3608 l
-3172 3608 m
-3288 3608 l
-3288 3609 l
-3172 3609 l
-3169 3609 m
-3289 3609 l
-3289 3610 l
-3169 3610 l
-3167 3610 m
-3289 3610 l
-3289 3611 l
-3167 3611 l
-3164 3611 m
-3290 3611 l
-3290 3612 l
-3164 3612 l
-3162 3612 m
-3290 3612 l
-3290 3613 l
-3162 3613 l
-3159 3613 m
-3290 3613 l
-3290 3614 l
-3159 3614 l
-3157 3614 m
-3291 3614 l
-3291 3615 l
-3157 3615 l
-3154 3615 m
-3291 3615 l
-3291 3616 l
-3154 3616 l
-3152 3616 m
-3292 3616 l
-3292 3617 l
-3152 3617 l
-3149 3617 m
-3292 3617 l
-3292 3618 l
-3149 3618 l
-3147 3618 m
-3292 3618 l
-3292 3619 l
-3147 3619 l
-3144 3619 m
-3293 3619 l
-3293 3620 l
-3144 3620 l
-3142 3620 m
-3293 3620 l
-3293 3621 l
-3142 3621 l
-3139 3621 m
-3294 3621 l
-3294 3622 l
-3139 3622 l
-3137 3622 m
-3294 3622 l
-3294 3623 l
-3137 3623 l
-3134 3623 m
-3294 3623 l
-3294 3624 l
-3134 3624 l
-3132 3624 m
-3295 3624 l
-3295 3625 l
-3132 3625 l
-3129 3625 m
-3295 3625 l
-3295 3626 l
-3129 3626 l
-3127 3626 m
-3296 3626 l
-3296 3627 l
-3127 3627 l
-3124 3627 m
-3296 3627 l
-3296 3628 l
-3124 3628 l
-3122 3628 m
-3296 3628 l
-3296 3629 l
-3122 3629 l
-3119 3629 m
-3297 3629 l
-3297 3630 l
-3119 3630 l
-3117 3630 m
-3297 3630 l
-3297 3631 l
-3117 3631 l
-3114 3631 m
-3298 3631 l
-3298 3632 l
-3114 3632 l
-3112 3632 m
-3298 3632 l
-3298 3633 l
-3112 3633 l
-3109 3633 m
-3298 3633 l
-3298 3634 l
-3109 3634 l
-3107 3634 m
-3299 3634 l
-3299 3635 l
-3107 3635 l
-3104 3635 m
-3299 3635 l
-3299 3636 l
-3104 3636 l
-3102 3636 m
-3300 3636 l
-3300 3637 l
-3102 3637 l
-3102 3637 m
-3300 3637 l
-3300 3639 l
-3102 3639 l
-3102 3639 m
-3301 3639 l
-3301 3640 l
-3102 3640 l
-3103 3640 m
-3301 3640 l
-3301 3641 l
-3103 3641 l
-3103 3641 m
-3302 3641 l
-3302 3643 l
-3103 3643 l
-3104 3643 m
-3302 3643 l
-3302 3644 l
-3104 3644 l
-3104 3644 m
-3303 3644 l
-3303 3645 l
-3104 3645 l
-3105 3645 m
-3303 3645 l
-3303 3646 l
-3105 3646 l
-3105 3646 m
-3304 3646 l
-3304 3648 l
-3105 3648 l
-3106 3648 m
-3304 3648 l
-3304 3649 l
-3106 3649 l
-3106 3649 m
-3305 3649 l
-3305 3650 l
-3106 3650 l
-3107 3650 m
-3305 3650 l
-3305 3651 l
-3107 3651 l
-3107 3651 m
-3306 3651 l
-3306 3653 l
-3107 3653 l
-3108 3653 m
-3306 3653 l
-3306 3654 l
-3108 3654 l
-3108 3654 m
-3307 3654 l
-3307 3655 l
-3108 3655 l
-3109 3655 m
-3307 3655 l
-3307 3656 l
-3109 3656 l
-3109 3656 m
-3308 3656 l
-3308 3658 l
-3109 3658 l
-3110 3658 m
-3308 3658 l
-3308 3659 l
-3110 3659 l
-3110 3659 m
-3309 3659 l
-3309 3661 l
-3110 3661 l
-3111 3661 m
-3310 3661 l
-3310 3663 l
-3111 3663 l
-3112 3663 m
-3310 3663 l
-3310 3664 l
-3112 3664 l
-3112 3664 m
-3311 3664 l
-3311 3666 l
-3112 3666 l
-3113 3666 m
-3312 3666 l
-3312 3668 l
-3113 3668 l
-3114 3668 m
-3312 3668 l
-3312 3669 l
-3114 3669 l
-3114 3669 m
-3313 3669 l
-3313 3671 l
-3114 3671 l
-3115 3671 m
-3314 3671 l
-3314 3673 l
-3115 3673 l
-3116 3673 m
-3314 3673 l
-3314 3674 l
-3116 3674 l
-3116 3674 m
-3315 3674 l
-3315 3676 l
-3116 3676 l
-3117 3676 m
-3316 3676 l
-3316 3679 l
-3117 3679 l
-3118 3679 m
-3317 3679 l
-3317 3681 l
-3118 3681 l
-3119 3681 m
-3317 3681 l
-3317 3682 l
-3119 3682 l
-3119 3682 m
-3317 3682 l
-3317 3683 l
-3119 3683 l
-3119 3683 m
-3315 3683 l
-3315 3684 l
-3119 3684 l
-3120 3684 m
-3312 3684 l
-3312 3685 l
-3120 3685 l
-3120 3685 m
-3310 3685 l
-3310 3686 l
-3120 3686 l
-3121 3686 m
-3307 3686 l
-3307 3687 l
-3121 3687 l
-3121 3687 m
-3305 3687 l
-3305 3688 l
-3121 3688 l
-3121 3688 m
-3302 3688 l
-3302 3689 l
-3121 3689 l
-3122 3689 m
-3300 3689 l
-3300 3690 l
-3122 3690 l
-3122 3690 m
-3297 3690 l
-3297 3691 l
-3122 3691 l
-3123 3691 m
-3295 3691 l
-3295 3692 l
-3123 3692 l
-3123 3692 m
-3292 3692 l
-3292 3693 l
-3123 3693 l
-3123 3693 m
-3290 3693 l
-3290 3694 l
-3123 3694 l
-3124 3694 m
-3287 3694 l
-3287 3695 l
-3124 3695 l
-3124 3695 m
-3285 3695 l
-3285 3696 l
-3124 3696 l
-3124 3696 m
-3282 3696 l
-3282 3697 l
-3124 3697 l
-3125 3697 m
-3280 3697 l
-3280 3698 l
-3125 3698 l
-3125 3698 m
-3277 3698 l
-3277 3699 l
-3125 3699 l
-3126 3699 m
-3275 3699 l
-3275 3700 l
-3126 3700 l
-3126 3700 m
-3272 3700 l
-3272 3701 l
-3126 3701 l
-3126 3701 m
-3270 3701 l
-3270 3702 l
-3126 3702 l
-3127 3702 m
-3267 3702 l
-3267 3703 l
-3127 3703 l
-3127 3703 m
-3265 3703 l
-3265 3704 l
-3127 3704 l
-3128 3704 m
-3262 3704 l
-3262 3705 l
-3128 3705 l
-3128 3705 m
-3259 3705 l
-3259 3706 l
-3128 3706 l
-3128 3706 m
-3257 3706 l
-3257 3707 l
-3128 3707 l
-3129 3707 m
-3254 3707 l
-3254 3708 l
-3129 3708 l
-3129 3708 m
-3252 3708 l
-3252 3709 l
-3129 3709 l
-3130 3709 m
-3249 3709 l
-3249 3710 l
-3130 3710 l
-3130 3710 m
-3247 3710 l
-3247 3711 l
-3130 3711 l
-3130 3711 m
-3244 3711 l
-3244 3712 l
-3130 3712 l
-3131 3712 m
-3242 3712 l
-3242 3713 l
-3131 3713 l
-3131 3713 m
-3239 3713 l
-3239 3714 l
-3131 3714 l
-3131 3714 m
-3237 3714 l
-3237 3715 l
-3131 3715 l
-3132 3715 m
-3234 3715 l
-3234 3716 l
-3132 3716 l
-3132 3716 m
-3232 3716 l
-3232 3717 l
-3132 3717 l
-3133 3717 m
-3229 3717 l
-3229 3718 l
-3133 3718 l
-3133 3718 m
-3227 3718 l
-3227 3719 l
-3133 3719 l
-3133 3719 m
-3224 3719 l
-3224 3720 l
-3133 3720 l
-3134 3720 m
-3222 3720 l
-3222 3721 l
-3134 3721 l
-3134 3721 m
-3219 3721 l
-3219 3722 l
-3134 3722 l
-3135 3722 m
-3217 3722 l
-3217 3723 l
-3135 3723 l
-3135 3723 m
-3214 3723 l
-3214 3724 l
-3135 3724 l
-3135 3724 m
-3212 3724 l
-3212 3725 l
-3135 3725 l
-3136 3725 m
-3209 3725 l
-3209 3726 l
-3136 3726 l
-3136 3726 m
-3207 3726 l
-3207 3727 l
-3136 3727 l
-3137 3727 m
-3204 3727 l
-3204 3728 l
-3137 3728 l
-3137 3728 m
-3202 3728 l
-3202 3729 l
-3137 3729 l
-3137 3729 m
-3199 3729 l
-3199 3730 l
-3137 3730 l
-3138 3730 m
-3197 3730 l
-3197 3731 l
-3138 3731 l
-3138 3731 m
-3194 3731 l
-3194 3732 l
-3138 3732 l
-3138 3732 m
-3192 3732 l
-3192 3733 l
-3138 3733 l
-3139 3733 m
-3189 3733 l
-3189 3734 l
-3139 3734 l
-3139 3734 m
-3187 3734 l
-3187 3735 l
-3139 3735 l
-3140 3735 m
-3184 3735 l
-3184 3736 l
-3140 3736 l
-3140 3736 m
-3182 3736 l
-3182 3737 l
-3140 3737 l
-3140 3737 m
-3179 3737 l
-3179 3738 l
-3140 3738 l
-3141 3738 m
-3177 3738 l
-3177 3739 l
-3141 3739 l
-3141 3739 m
-3174 3739 l
-3174 3740 l
-3141 3740 l
-3142 3740 m
-3172 3740 l
-3172 3741 l
-3142 3741 l
-3142 3741 m
-3169 3741 l
-3169 3742 l
-3142 3742 l
-3142 3742 m
-3167 3742 l
-3167 3743 l
-3142 3743 l
-3143 3743 m
-3164 3743 l
-3164 3744 l
-3143 3744 l
-3143 3744 m
-3162 3744 l
-3162 3745 l
-3143 3745 l
-3144 3745 m
-3159 3745 l
-3159 3746 l
-3144 3746 l
-3144 3746 m
-3157 3746 l
-3157 3747 l
-3144 3747 l
-3144 3747 m
-3154 3747 l
-3154 3748 l
-3144 3748 l
-3145 3748 m
-3152 3748 l
-3152 3749 l
-3145 3749 l
-3145 3749 m
-3149 3749 l
-3149 3750 l
-3145 3750 l
-Y
-3317 3681.9 m
-3272 3569 l
-3102 3637 l
-3146 3750 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3213 3611 m
-3251 3596 l
-3269 3629 l
-3264 3627 l
-3250 3627 l
-3239 3632 l
-3229 3640 l
-3224 3651 l
-3225 3665 l
-3228 3672 l
-3236 3682 l
-3247 3687 l
-3260 3686 l
-3272 3682 l
-3282 3673 l
-3284 3668 l
-3285 3659 l
-S
-3136 3655 m
-3136 3646 l
-3147 3637 l
-3154 3634 l
-3167 3633 l
-3180 3642 l
-3191 3660 l
-3199 3679 l
-3201 3696 l
-3197 3707 l
-3187 3716 l
-3183 3717 l
-3170 3718 l
-3159 3713 l
-3150 3703 l
-3149 3699 l
-3148 3686 l
-3153 3675 l
-3163 3667 l
-3167 3665 l
-3180 3664 l
-3191 3669 l
-3199 3679 l
-S
-1 g
-4344 3144 m
-4348 3144 l
-4348 3145 l
-4344 3145 l
-4341 3145 m
-4348 3145 l
-4348 3146 l
-4341 3146 l
-4339 3146 m
-4349 3146 l
-4349 3147 l
-4339 3147 l
-4336 3147 m
-4349 3147 l
-4349 3148 l
-4336 3148 l
-4334 3148 m
-4350 3148 l
-4350 3149 l
-4334 3149 l
-4331 3149 m
-4350 3149 l
-4350 3150 l
-4331 3150 l
-4329 3150 m
-4350 3150 l
-4350 3151 l
-4329 3151 l
-4326 3151 m
-4351 3151 l
-4351 3152 l
-4326 3152 l
-4324 3152 m
-4351 3152 l
-4351 3153 l
-4324 3153 l
-4321 3153 m
-4352 3153 l
-4352 3154 l
-4321 3154 l
-4319 3154 m
-4352 3154 l
-4352 3155 l
-4319 3155 l
-4316 3155 m
-4352 3155 l
-4352 3156 l
-4316 3156 l
-4314 3156 m
-4353 3156 l
-4353 3157 l
-4314 3157 l
-4311 3157 m
-4353 3157 l
-4353 3158 l
-4311 3158 l
-4308 3158 m
-4354 3158 l
-4354 3159 l
-4308 3159 l
-4306 3159 m
-4354 3159 l
-4354 3160 l
-4306 3160 l
-4303 3160 m
-4354 3160 l
-4354 3161 l
-4303 3161 l
-4301 3161 m
-4355 3161 l
-4355 3162 l
-4301 3162 l
-4298 3162 m
-4355 3162 l
-4355 3163 l
-4298 3163 l
-4296 3163 m
-4356 3163 l
-4356 3164 l
-4296 3164 l
-4293 3164 m
-4356 3164 l
-4356 3165 l
-4293 3165 l
-4291 3165 m
-4356 3165 l
-4356 3166 l
-4291 3166 l
-4288 3166 m
-4357 3166 l
-4357 3167 l
-4288 3167 l
-4286 3167 m
-4357 3167 l
-4357 3168 l
-4286 3168 l
-4283 3168 m
-4358 3168 l
-4358 3169 l
-4283 3169 l
-4281 3169 m
-4358 3169 l
-4358 3170 l
-4281 3170 l
-4278 3170 m
-4358 3170 l
-4358 3171 l
-4278 3171 l
-4275 3171 m
-4359 3171 l
-4359 3172 l
-4275 3172 l
-4273 3172 m
-4359 3172 l
-4359 3173 l
-4273 3173 l
-4270 3173 m
-4360 3173 l
-4360 3174 l
-4270 3174 l
-4268 3174 m
-4360 3174 l
-4360 3175 l
-4268 3175 l
-4265 3175 m
-4360 3175 l
-4360 3176 l
-4265 3176 l
-4263 3176 m
-4361 3176 l
-4361 3177 l
-4263 3177 l
-4260 3177 m
-4361 3177 l
-4361 3178 l
-4260 3178 l
-4258 3178 m
-4362 3178 l
-4362 3179 l
-4258 3179 l
-4255 3179 m
-4362 3179 l
-4362 3180 l
-4255 3180 l
-4253 3180 m
-4362 3180 l
-4362 3181 l
-4253 3181 l
-4250 3181 m
-4363 3181 l
-4363 3182 l
-4250 3182 l
-4248 3182 m
-4363 3182 l
-4363 3183 l
-4248 3183 l
-4245 3183 m
-4364 3183 l
-4364 3184 l
-4245 3184 l
-4242 3184 m
-4364 3184 l
-4364 3185 l
-4242 3185 l
-4240 3185 m
-4364 3185 l
-4364 3186 l
-4240 3186 l
-4237 3186 m
-4365 3186 l
-4365 3187 l
-4237 3187 l
-4235 3187 m
-4365 3187 l
-4365 3188 l
-4235 3188 l
-4232 3188 m
-4366 3188 l
-4366 3189 l
-4232 3189 l
-4230 3189 m
-4366 3189 l
-4366 3190 l
-4230 3190 l
-4227 3190 m
-4366 3190 l
-4366 3191 l
-4227 3191 l
-4225 3191 m
-4367 3191 l
-4367 3192 l
-4225 3192 l
-4222 3192 m
-4367 3192 l
-4367 3193 l
-4222 3193 l
-4220 3193 m
-4368 3193 l
-4368 3194 l
-4220 3194 l
-4217 3194 m
-4368 3194 l
-4368 3195 l
-4217 3195 l
-4215 3195 m
-4368 3195 l
-4368 3196 l
-4215 3196 l
-4212 3196 m
-4369 3196 l
-4369 3197 l
-4212 3197 l
-4209 3197 m
-4369 3197 l
-4369 3198 l
-4209 3198 l
-4207 3198 m
-4370 3198 l
-4370 3199 l
-4207 3199 l
-4204 3199 m
-4370 3199 l
-4370 3200 l
-4204 3200 l
-4202 3200 m
-4370 3200 l
-4370 3201 l
-4202 3201 l
-4199 3201 m
-4371 3201 l
-4371 3202 l
-4199 3202 l
-4197 3202 m
-4371 3202 l
-4371 3203 l
-4197 3203 l
-4194 3203 m
-4372 3203 l
-4372 3204 l
-4194 3204 l
-4192 3204 m
-4372 3204 l
-4372 3205 l
-4192 3205 l
-4189 3205 m
-4372 3205 l
-4372 3206 l
-4189 3206 l
-4187 3206 m
-4373 3206 l
-4373 3207 l
-4187 3207 l
-4184 3207 m
-4373 3207 l
-4373 3208 l
-4184 3208 l
-4182 3208 m
-4374 3208 l
-4374 3209 l
-4182 3209 l
-4179 3209 m
-4374 3209 l
-4374 3210 l
-4179 3210 l
-4177 3210 m
-4374 3210 l
-4374 3211 l
-4177 3211 l
-4177 3211 m
-4375 3211 l
-4375 3213 l
-4177 3213 l
-4177 3213 m
-4376 3213 l
-4376 3214 l
-4177 3214 l
-4178 3214 m
-4376 3214 l
-4376 3216 l
-4178 3216 l
-4178 3216 m
-4377 3216 l
-4377 3217 l
-4178 3217 l
-4179 3217 m
-4377 3217 l
-4377 3218 l
-4179 3218 l
-4179 3218 m
-4378 3218 l
-4378 3219 l
-4179 3219 l
-4180 3219 m
-4378 3219 l
-4378 3221 l
-4180 3221 l
-4180 3221 m
-4379 3221 l
-4379 3222 l
-4180 3222 l
-4181 3222 m
-4379 3222 l
-4379 3223 l
-4181 3223 l
-4181 3223 m
-4380 3223 l
-4380 3224 l
-4181 3224 l
-4182 3224 m
-4380 3224 l
-4380 3226 l
-4182 3226 l
-4182 3226 m
-4381 3226 l
-4381 3227 l
-4182 3227 l
-4183 3227 m
-4381 3227 l
-4381 3228 l
-4183 3228 l
-4183 3228 m
-4382 3228 l
-4382 3229 l
-4183 3229 l
-4184 3229 m
-4382 3229 l
-4382 3231 l
-4184 3231 l
-4184 3231 m
-4383 3231 l
-4383 3232 l
-4184 3232 l
-4185 3232 m
-4383 3232 l
-4383 3233 l
-4185 3233 l
-4185 3233 m
-4384 3233 l
-4384 3235 l
-4185 3235 l
-4186 3235 m
-4384 3235 l
-4384 3236 l
-4186 3236 l
-4186 3236 m
-4385 3236 l
-4385 3237 l
-4186 3237 l
-4187 3237 m
-4385 3237 l
-4385 3238 l
-4187 3238 l
-4187 3238 m
-4386 3238 l
-4386 3240 l
-4187 3240 l
-4188 3240 m
-4386 3240 l
-4386 3241 l
-4188 3241 l
-4188 3241 m
-4387 3241 l
-4387 3242 l
-4188 3242 l
-4189 3242 m
-4387 3242 l
-4387 3243 l
-4189 3243 l
-4189 3243 m
-4388 3243 l
-4388 3245 l
-4189 3245 l
-4190 3245 m
-4388 3245 l
-4388 3246 l
-4190 3246 l
-4190 3246 m
-4389 3246 l
-4389 3247 l
-4190 3247 l
-4191 3247 m
-4389 3247 l
-4389 3248 l
-4191 3248 l
-4191 3248 m
-4390 3248 l
-4390 3250 l
-4191 3250 l
-4192 3250 m
-4390 3250 l
-4390 3251 l
-4192 3251 l
-4192 3251 m
-4391 3251 l
-4391 3253 l
-4192 3253 l
-4193 3253 m
-4392 3253 l
-4392 3255 l
-4193 3255 l
-4194 3255 m
-4392 3255 l
-4392 3256 l
-4194 3256 l
-4194 3256 m
-4392 3256 l
-4392 3257 l
-4194 3257 l
-4194 3257 m
-4390 3257 l
-4390 3258 l
-4194 3258 l
-4195 3258 m
-4388 3258 l
-4388 3259 l
-4195 3259 l
-4195 3259 m
-4385 3259 l
-4385 3260 l
-4195 3260 l
-4196 3260 m
-4383 3260 l
-4383 3261 l
-4196 3261 l
-4196 3261 m
-4380 3261 l
-4380 3262 l
-4196 3262 l
-4196 3262 m
-4378 3262 l
-4378 3263 l
-4196 3263 l
-4197 3263 m
-4375 3263 l
-4375 3264 l
-4197 3264 l
-4197 3264 m
-4373 3264 l
-4373 3265 l
-4197 3265 l
-4198 3265 m
-4370 3265 l
-4370 3266 l
-4198 3266 l
-4198 3266 m
-4368 3266 l
-4368 3267 l
-4198 3267 l
-4198 3267 m
-4365 3267 l
-4365 3268 l
-4198 3268 l
-4199 3268 m
-4363 3268 l
-4363 3269 l
-4199 3269 l
-4199 3269 m
-4360 3269 l
-4360 3270 l
-4199 3270 l
-4199 3270 m
-4357 3270 l
-4357 3271 l
-4199 3271 l
-4200 3271 m
-4355 3271 l
-4355 3272 l
-4200 3272 l
-4200 3272 m
-4352 3272 l
-4352 3273 l
-4200 3273 l
-4201 3273 m
-4350 3273 l
-4350 3274 l
-4201 3274 l
-4201 3274 m
-4347 3274 l
-4347 3275 l
-4201 3275 l
-4201 3275 m
-4345 3275 l
-4345 3276 l
-4201 3276 l
-4202 3276 m
-4342 3276 l
-4342 3277 l
-4202 3277 l
-4202 3277 m
-4340 3277 l
-4340 3278 l
-4202 3278 l
-4203 3278 m
-4337 3278 l
-4337 3279 l
-4203 3279 l
-4203 3279 m
-4335 3279 l
-4335 3280 l
-4203 3280 l
-4203 3280 m
-4332 3280 l
-4332 3281 l
-4203 3281 l
-4204 3281 m
-4330 3281 l
-4330 3282 l
-4204 3282 l
-4204 3282 m
-4327 3282 l
-4327 3283 l
-4204 3283 l
-4205 3283 m
-4325 3283 l
-4325 3284 l
-4205 3284 l
-4205 3284 m
-4322 3284 l
-4322 3285 l
-4205 3285 l
-4205 3285 m
-4320 3285 l
-4320 3286 l
-4205 3286 l
-4206 3286 m
-4317 3286 l
-4317 3287 l
-4206 3287 l
-4206 3287 m
-4315 3287 l
-4315 3288 l
-4206 3288 l
-4206 3288 m
-4312 3288 l
-4312 3289 l
-4206 3289 l
-4207 3289 m
-4310 3289 l
-4310 3290 l
-4207 3290 l
-4207 3290 m
-4307 3290 l
-4307 3291 l
-4207 3291 l
-4208 3291 m
-4305 3291 l
-4305 3292 l
-4208 3292 l
-4208 3292 m
-4302 3292 l
-4302 3293 l
-4208 3293 l
-4208 3293 m
-4300 3293 l
-4300 3294 l
-4208 3294 l
-4209 3294 m
-4297 3294 l
-4297 3295 l
-4209 3295 l
-4209 3295 m
-4295 3295 l
-4295 3296 l
-4209 3296 l
-4210 3296 m
-4292 3296 l
-4292 3297 l
-4210 3297 l
-4210 3297 m
-4289 3297 l
-4289 3298 l
-4210 3298 l
-4210 3298 m
-4287 3298 l
-4287 3299 l
-4210 3299 l
-4211 3299 m
-4284 3299 l
-4284 3300 l
-4211 3300 l
-4211 3300 m
-4282 3300 l
-4282 3301 l
-4211 3301 l
-4212 3301 m
-4279 3301 l
-4279 3302 l
-4212 3302 l
-4212 3302 m
-4277 3302 l
-4277 3303 l
-4212 3303 l
-4212 3303 m
-4274 3303 l
-4274 3304 l
-4212 3304 l
-4213 3304 m
-4272 3304 l
-4272 3305 l
-4213 3305 l
-4213 3305 m
-4269 3305 l
-4269 3306 l
-4213 3306 l
-4213 3306 m
-4267 3306 l
-4267 3307 l
-4213 3307 l
-4214 3307 m
-4264 3307 l
-4264 3308 l
-4214 3308 l
-4214 3308 m
-4262 3308 l
-4262 3309 l
-4214 3309 l
-4215 3309 m
-4259 3309 l
-4259 3310 l
-4215 3310 l
-4215 3310 m
-4257 3310 l
-4257 3311 l
-4215 3311 l
-4215 3311 m
-4254 3311 l
-4254 3312 l
-4215 3312 l
-4216 3312 m
-4252 3312 l
-4252 3313 l
-4216 3313 l
-4216 3313 m
-4249 3313 l
-4249 3314 l
-4216 3314 l
-4217 3314 m
-4247 3314 l
-4247 3315 l
-4217 3315 l
-4217 3315 m
-4244 3315 l
-4244 3316 l
-4217 3316 l
-4217 3316 m
-4242 3316 l
-4242 3317 l
-4217 3317 l
-4218 3317 m
-4239 3317 l
-4239 3318 l
-4218 3318 l
-4218 3318 m
-4237 3318 l
-4237 3319 l
-4218 3319 l
-4219 3319 m
-4234 3319 l
-4234 3320 l
-4219 3320 l
-4219 3320 m
-4232 3320 l
-4232 3321 l
-4219 3321 l
-4219 3321 m
-4229 3321 l
-4229 3322 l
-4219 3322 l
-4220 3322 m
-4227 3322 l
-4227 3323 l
-4220 3323 l
-4220 3323 m
-4224 3323 l
-4224 3324 l
-4220 3324 l
-Y
-4392 3256.1 m
-4347 3144 l
-4177 3211 l
-4221 3324 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4288 3185 m
-4326 3170 l
-4344 3203 l
-4339 3201 l
-4325 3202 l
-4314 3206 l
-4304 3215 l
-4299 3226 l
-4300 3239 l
-4303 3247 l
-4311 3257 l
-4322 3261 l
-4335 3261 l
-4347 3256 l
-4357 3247 l
-4359 3242 l
-4360 3233 l
-S
-4260 3218 m
-4259 3215 l
-4252 3208 l
-4246 3206 l
-4237 3205 l
-4221 3211 l
-4215 3218 l
-4213 3224 l
-4212 3233 l
-4215 3241 l
-4222 3247 l
-4235 3256 l
-4289 3279 l
-4234 3301 l
-S
-1 g
-4877 2933 m
-4878 2933 l
-4878 2934 l
-4877 2934 l
-4874 2934 m
-4878 2934 l
-4878 2935 l
-4874 2935 l
-4872 2935 m
-4878 2935 l
-4878 2936 l
-4872 2936 l
-4869 2936 m
-4878 2936 l
-4878 2937 l
-4869 2937 l
-4867 2937 m
-4878 2937 l
-4878 2938 l
-4867 2938 l
-4864 2938 m
-4878 2938 l
-4878 2939 l
-4864 2939 l
-4862 2939 m
-4878 2939 l
-4878 2940 l
-4862 2940 l
-4859 2940 m
-4878 2940 l
-4878 2941 l
-4859 2941 l
-4856 2941 m
-4878 2941 l
-4878 2942 l
-4856 2942 l
-4854 2942 m
-4878 2942 l
-4878 2943 l
-4854 2943 l
-4851 2943 m
-4878 2943 l
-4878 2944 l
-4851 2944 l
-4849 2944 m
-4878 2944 l
-4878 2945 l
-4849 2945 l
-4846 2945 m
-4878 2945 l
-4878 2946 l
-4846 2946 l
-4844 2946 m
-4878 2946 l
-4878 2947 l
-4844 2947 l
-4841 2947 m
-4878 2947 l
-4878 2948 l
-4841 2948 l
-4839 2948 m
-4878 2948 l
-4878 2949 l
-4839 2949 l
-4836 2949 m
-4878 2949 l
-4878 2950 l
-4836 2950 l
-4833 2950 m
-4878 2950 l
-4878 2951 l
-4833 2951 l
-4831 2951 m
-4878 2951 l
-4878 2952 l
-4831 2952 l
-4828 2952 m
-4878 2952 l
-4878 2953 l
-4828 2953 l
-4826 2953 m
-4878 2953 l
-4878 2954 l
-4826 2954 l
-4823 2954 m
-4878 2954 l
-4878 2955 l
-4823 2955 l
-4821 2955 m
-4878 2955 l
-4878 2956 l
-4821 2956 l
-4818 2956 m
-4878 2956 l
-4878 2957 l
-4818 2957 l
-4816 2957 m
-4878 2957 l
-4878 2958 l
-4816 2958 l
-4813 2958 m
-4878 2958 l
-4878 2959 l
-4813 2959 l
-4810 2959 m
-4878 2959 l
-4878 2960 l
-4810 2960 l
-4808 2960 m
-4878 2960 l
-4878 2961 l
-4808 2961 l
-4805 2961 m
-4878 2961 l
-4878 2962 l
-4805 2962 l
-4803 2962 m
-4878 2962 l
-4878 2963 l
-4803 2963 l
-4800 2963 m
-4878 2963 l
-4878 2964 l
-4800 2964 l
-4798 2964 m
-4878 2964 l
-4878 2965 l
-4798 2965 l
-4795 2965 m
-4878 2965 l
-4878 2966 l
-4795 2966 l
-4793 2966 m
-4878 2966 l
-4878 2967 l
-4793 2967 l
-4790 2967 m
-4878 2967 l
-4878 2968 l
-4790 2968 l
-4788 2968 m
-4878 2968 l
-4878 2969 l
-4788 2969 l
-4785 2969 m
-4878 2969 l
-4878 2970 l
-4785 2970 l
-4782 2970 m
-4878 2970 l
-4878 2971 l
-4782 2971 l
-4780 2971 m
-4878 2971 l
-4878 2972 l
-4780 2972 l
-4777 2972 m
-4878 2972 l
-4878 2973 l
-4777 2973 l
-4775 2973 m
-4878 2973 l
-4878 2974 l
-4775 2974 l
-4772 2974 m
-4878 2974 l
-4878 2975 l
-4772 2975 l
-4770 2975 m
-4878 2975 l
-4878 2976 l
-4770 2976 l
-4767 2976 m
-4878 2976 l
-4878 2977 l
-4767 2977 l
-4765 2977 m
-4878 2977 l
-4878 2978 l
-4765 2978 l
-4762 2978 m
-4878 2978 l
-4878 2979 l
-4762 2979 l
-4759 2979 m
-4878 2979 l
-4878 2980 l
-4759 2980 l
-4757 2980 m
-4878 2980 l
-4878 2981 l
-4757 2981 l
-4754 2981 m
-4878 2981 l
-4878 2982 l
-4754 2982 l
-4752 2982 m
-4878 2982 l
-4878 2983 l
-4752 2983 l
-4749 2983 m
-4878 2983 l
-4878 2984 l
-4749 2984 l
-4747 2984 m
-4878 2984 l
-4878 2985 l
-4747 2985 l
-4744 2985 m
-4878 2985 l
-4878 2986 l
-4744 2986 l
-4742 2986 m
-4878 2986 l
-4878 2987 l
-4742 2987 l
-4739 2987 m
-4878 2987 l
-4878 2988 l
-4739 2988 l
-4736 2988 m
-4878 2988 l
-4878 2989 l
-4736 2989 l
-4734 2989 m
-4878 2989 l
-4878 2990 l
-4734 2990 l
-4731 2990 m
-4878 2990 l
-4878 2991 l
-4731 2991 l
-4729 2991 m
-4878 2991 l
-4878 2992 l
-4729 2992 l
-4726 2992 m
-4878 2992 l
-4878 2993 l
-4726 2993 l
-4724 2993 m
-4878 2993 l
-4878 2994 l
-4724 2994 l
-4721 2994 m
-4878 2994 l
-4878 2995 l
-4721 2995 l
-4719 2995 m
-4878 2995 l
-4878 2996 l
-4719 2996 l
-4716 2996 m
-4878 2996 l
-4878 2997 l
-4716 2997 l
-4714 2997 m
-4878 2997 l
-4878 2998 l
-4714 2998 l
-4714 2998 m
-4878 2998 l
-4878 2999 l
-4714 2999 l
-4714 2999 m
-4878 2999 l
-4878 3001 l
-4714 3001 l
-4715 3001 m
-4878 3001 l
-4878 3004 l
-4715 3004 l
-4716 3004 m
-4878 3004 l
-4878 3006 l
-4716 3006 l
-4717 3006 m
-4878 3006 l
-4878 3009 l
-4717 3009 l
-4718 3009 m
-4878 3009 l
-4878 3011 l
-4718 3011 l
-4719 3011 m
-4878 3011 l
-4878 3014 l
-4719 3014 l
-4720 3014 m
-4878 3014 l
-4878 3016 l
-4720 3016 l
-4721 3016 m
-4878 3016 l
-4878 3019 l
-4721 3019 l
-4722 3019 m
-4878 3019 l
-4878 3021 l
-4722 3021 l
-4723 3021 m
-4878 3021 l
-4878 3024 l
-4723 3024 l
-4724 3024 m
-4878 3024 l
-4878 3026 l
-4724 3026 l
-4725 3026 m
-4878 3026 l
-4878 3029 l
-4725 3029 l
-4726 3029 m
-4878 3029 l
-4878 3031 l
-4726 3031 l
-4727 3031 m
-4878 3031 l
-4878 3034 l
-4727 3034 l
-4728 3034 m
-4878 3034 l
-4878 3036 l
-4728 3036 l
-4729 3036 m
-4878 3036 l
-4878 3039 l
-4729 3039 l
-4730 3039 m
-4878 3039 l
-4878 3041 l
-4730 3041 l
-4731 3041 m
-4878 3041 l
-4878 3043 l
-4731 3043 l
-4731 3043 m
-4878 3043 l
-4878 3044 l
-4731 3044 l
-4732 3044 m
-4878 3044 l
-4878 3045 l
-4732 3045 l
-4732 3045 m
-4878 3045 l
-4878 3046 l
-4732 3046 l
-4733 3046 m
-4878 3046 l
-4878 3047 l
-4733 3047 l
-4733 3047 m
-4878 3047 l
-4878 3048 l
-4733 3048 l
-4733 3048 m
-4878 3048 l
-4878 3049 l
-4733 3049 l
-4734 3049 m
-4878 3049 l
-4878 3050 l
-4734 3050 l
-4734 3050 m
-4878 3050 l
-4878 3051 l
-4734 3051 l
-4735 3051 m
-4878 3051 l
-4878 3052 l
-4735 3052 l
-4735 3052 m
-4878 3052 l
-4878 3053 l
-4735 3053 l
-4735 3053 m
-4878 3053 l
-4878 3054 l
-4735 3054 l
-4736 3054 m
-4878 3054 l
-4878 3055 l
-4736 3055 l
-4736 3055 m
-4878 3055 l
-4878 3056 l
-4736 3056 l
-4737 3056 m
-4878 3056 l
-4878 3057 l
-4737 3057 l
-4737 3057 m
-4878 3057 l
-4878 3058 l
-4737 3058 l
-4737 3058 m
-4878 3058 l
-4878 3059 l
-4737 3059 l
-4738 3059 m
-4878 3059 l
-4878 3060 l
-4738 3060 l
-4738 3060 m
-4878 3060 l
-4878 3061 l
-4738 3061 l
-4739 3061 m
-4878 3061 l
-4878 3062 l
-4739 3062 l
-4739 3062 m
-4878 3062 l
-4878 3063 l
-4739 3063 l
-4739 3063 m
-4878 3063 l
-4878 3064 l
-4739 3064 l
-4740 3064 m
-4878 3064 l
-4878 3065 l
-4740 3065 l
-4740 3065 m
-4875 3065 l
-4875 3066 l
-4740 3066 l
-4741 3066 m
-4873 3066 l
-4873 3067 l
-4741 3067 l
-4741 3067 m
-4870 3067 l
-4870 3068 l
-4741 3068 l
-4741 3068 m
-4868 3068 l
-4868 3069 l
-4741 3069 l
-4742 3069 m
-4865 3069 l
-4865 3070 l
-4742 3070 l
-4742 3070 m
-4863 3070 l
-4863 3071 l
-4742 3071 l
-4743 3071 m
-4860 3071 l
-4860 3072 l
-4743 3072 l
-4743 3072 m
-4858 3072 l
-4858 3073 l
-4743 3073 l
-4743 3073 m
-4855 3073 l
-4855 3074 l
-4743 3074 l
-4744 3074 m
-4853 3074 l
-4853 3075 l
-4744 3075 l
-4744 3075 m
-4850 3075 l
-4850 3076 l
-4744 3076 l
-4745 3076 m
-4848 3076 l
-4848 3077 l
-4745 3077 l
-4745 3077 m
-4845 3077 l
-4845 3078 l
-4745 3078 l
-4745 3078 m
-4842 3078 l
-4842 3079 l
-4745 3079 l
-4746 3079 m
-4840 3079 l
-4840 3080 l
-4746 3080 l
-4746 3080 m
-4837 3080 l
-4837 3081 l
-4746 3081 l
-4747 3081 m
-4835 3081 l
-4835 3082 l
-4747 3082 l
-4747 3082 m
-4832 3082 l
-4832 3083 l
-4747 3083 l
-4747 3083 m
-4830 3083 l
-4830 3084 l
-4747 3084 l
-4748 3084 m
-4827 3084 l
-4827 3085 l
-4748 3085 l
-4748 3085 m
-4825 3085 l
-4825 3086 l
-4748 3086 l
-4749 3086 m
-4822 3086 l
-4822 3087 l
-4749 3087 l
-4749 3087 m
-4820 3087 l
-4820 3088 l
-4749 3088 l
-4749 3088 m
-4817 3088 l
-4817 3089 l
-4749 3089 l
-4750 3089 m
-4815 3089 l
-4815 3090 l
-4750 3090 l
-4750 3090 m
-4812 3090 l
-4812 3091 l
-4750 3091 l
-4751 3091 m
-4810 3091 l
-4810 3092 l
-4751 3092 l
-4751 3092 m
-4807 3092 l
-4807 3093 l
-4751 3093 l
-4751 3093 m
-4805 3093 l
-4805 3094 l
-4751 3094 l
-4752 3094 m
-4802 3094 l
-4802 3095 l
-4752 3095 l
-4752 3095 m
-4800 3095 l
-4800 3096 l
-4752 3096 l
-4753 3096 m
-4797 3096 l
-4797 3097 l
-4753 3097 l
-4753 3097 m
-4795 3097 l
-4795 3098 l
-4753 3098 l
-4753 3098 m
-4792 3098 l
-4792 3099 l
-4753 3099 l
-4754 3099 m
-4790 3099 l
-4790 3100 l
-4754 3100 l
-4754 3100 m
-4787 3100 l
-4787 3101 l
-4754 3101 l
-4755 3101 m
-4785 3101 l
-4785 3102 l
-4755 3102 l
-4755 3102 m
-4782 3102 l
-4782 3103 l
-4755 3103 l
-4755 3103 m
-4780 3103 l
-4780 3104 l
-4755 3104 l
-4756 3104 m
-4777 3104 l
-4777 3105 l
-4756 3105 l
-4756 3105 m
-4775 3105 l
-4775 3106 l
-4756 3106 l
-4757 3106 m
-4772 3106 l
-4772 3107 l
-4757 3107 l
-4757 3107 m
-4770 3107 l
-4770 3108 l
-4757 3108 l
-4757 3108 m
-4767 3108 l
-4767 3109 l
-4757 3109 l
-4758 3109 m
-4765 3109 l
-4765 3110 l
-4758 3110 l
-4758 3110 m
-4762 3110 l
-4762 3111 l
-4758 3111 l
-Y
-4929.5 3043.2 m
-4885 2931 l
-4714 2998 l
-4759 3111 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4825 2972 m
-4864 2957 l
-4882 2990 l
-4876 2988 l
-4863 2989 l
-4851 2993 l
-4841 3002 l
-4836 3013 l
-4837 3026 l
-4840 3034 l
-4849 3044 l
-4860 3048 l
-4873 3048 l
-4884 3043 l
-4895 3035 l
-4897 3029 l
-4898 3020 l
-S
-4771 2994 m
-4784 2993 l
-4796 3002 l
-4808 3020 l
-4812 3031 l
-4816 3052 l
-4813 3067 l
-4803 3075 l
-4795 3078 l
-4782 3079 l
-4770 3071 l
-4758 3053 l
-4753 3041 l
-4750 3020 l
-4753 3005 l
-4763 2997 l
-4771 2994 l
-S
-1 g
-Y
-362 3391.6 m
-207 3392 l
-207 4507 l
-362 4507 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-228 3413 m
-316 3413 l
-S
-228 3413 m
-228 3467 l
-S
-270 3413 m
-270 3446 l
-S
-228 3488 m
-316 3488 l
-S
-228 3546 m
-287 3488 l
-S
-266 3509 m
-316 3546 l
-S
-228 3621 m
-228 3580 l
-266 3575 l
-262 3580 l
-258 3592 l
-258 3605 l
-262 3617 l
-270 3626 l
-283 3630 l
-291 3630 l
-303 3626 l
-312 3617 l
-316 3605 l
-316 3592 l
-312 3580 l
-308 3575 l
-299 3571 l
-S
-258 3726 m
-345 3726 l
-S
-270 3726 m
-262 3734 l
-258 3742 l
-258 3755 l
-262 3763 l
-270 3772 l
-283 3776 l
-291 3776 l
-303 3772 l
-312 3763 l
-316 3755 l
-316 3742 l
-312 3734 l
-303 3726 l
-S
-258 3822 m
-262 3813 l
-270 3805 l
-283 3801 l
-291 3801 l
-303 3805 l
-312 3813 l
-316 3822 l
-316 3834 l
-312 3843 l
-303 3851 l
-291 3855 l
-283 3855 l
-270 3851 l
-262 3843 l
-258 3834 l
-258 3822 l
-S
-228 3884 m
-316 3884 l
-S
-258 3964 m
-316 3964 l
-S
-270 3964 m
-262 3955 l
-258 3947 l
-258 3935 l
-262 3926 l
-270 3918 l
-283 3914 l
-291 3914 l
-303 3918 l
-312 3926 l
-316 3935 l
-316 3947 l
-312 3955 l
-303 3964 l
-S
-258 3997 m
-316 3997 l
-S
-283 3997 m
-270 4001 l
-262 4010 l
-258 4018 l
-258 4031 l
-S
-258 4118 m
-316 4118 l
-S
-283 4118 m
-270 4123 l
-262 4131 l
-258 4139 l
-258 4152 l
-S
-283 4169 m
-283 4219 l
-274 4219 l
-266 4214 l
-262 4210 l
-258 4202 l
-258 4189 l
-262 4181 l
-270 4173 l
-283 4169 l
-291 4169 l
-303 4173 l
-312 4181 l
-316 4189 l
-316 4202 l
-312 4210 l
-303 4219 l
-S
-258 4294 m
-324 4294 l
-337 4290 l
-341 4285 l
-345 4277 l
-345 4265 l
-341 4256 l
-S
-270 4294 m
-262 4285 l
-258 4277 l
-258 4265 l
-262 4256 l
-270 4248 l
-283 4244 l
-291 4244 l
-303 4248 l
-312 4256 l
-316 4265 l
-316 4277 l
-312 4285 l
-303 4294 l
-S
-228 4323 m
-232 4327 l
-228 4331 l
-224 4327 l
-228 4323 l
-S
-258 4327 m
-316 4327 l
-S
-258 4377 m
-262 4369 l
-270 4361 l
-283 4356 l
-291 4356 l
-303 4361 l
-312 4369 l
-316 4377 l
-316 4390 l
-312 4398 l
-303 4407 l
-291 4411 l
-283 4411 l
-270 4407 l
-262 4398 l
-258 4390 l
-258 4377 l
-S
-258 4440 m
-316 4440 l
-S
-274 4440 m
-262 4453 l
-258 4461 l
-258 4473 l
-262 4482 l
-274 4486 l
-316 4486 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/frontc_bw.eps b/ast-5.3-1/sun211_figures/frontc_bw.eps
deleted file mode 100644
index cf6e8d0..0000000
--- a/ast-5.3-1/sun211_figures/frontc_bw.eps
+++ /dev/null
@@ -1,14113 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 22 206 490 605
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:48:46
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-4877 3093 m
-4662 3178 l
-4355 3300 l
-4048 3421 l
-3740 3543 l
-3433 3665 l
-3126 3786 l
-2819 3908 l
-2512 4029 l
-2205 4151 l
-2203 4152 l
-2202 4152 l
-2200 4153 l
-2199 4154 l
-2197 4154 l
-2195 4155 l
-2194 4155 l
-2192 4156 l
-2191 4157 l
-2189 4157 l
-2188 4158 l
-2186 4159 l
-2184 4159 l
-2183 4160 l
-2181 4160 l
-2180 4161 l
-2178 4162 l
-2177 4162 l
-2175 4163 l
-2173 4164 l
-2172 4164 l
-2170 4165 l
-2169 4165 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-4059 1777 m
-4039 1803 l
-3834 2062 l
-3628 2321 l
-3423 2580 l
-3218 2839 l
-3013 3098 l
-2808 3357 l
-2602 3616 l
-2397 3875 l
-2192 4134 l
-2191 4135 l
-2190 4137 l
-2189 4138 l
-2188 4139 l
-2187 4141 l
-2186 4142 l
-2185 4143 l
-2184 4145 l
-2183 4146 l
-2182 4147 l
-2181 4149 l
-2180 4150 l
-2178 4151 l
-2177 4152 l
-2176 4154 l
-2175 4155 l
-2174 4156 l
-2173 4158 l
-2172 4159 l
-2171 4160 l
-2170 4162 l
-2169 4163 l
-2168 4164 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-2519 1777 m
-2510 1837 l
-2462 2164 l
-2414 2491 l
-2365 2818 l
-2317 3145 l
-2269 3472 l
-2221 3799 l
-2172 4125 l
-2172 4127 l
-2172 4129 l
-2172 4130 l
-2171 4132 l
-2171 4134 l
-2171 4135 l
-2171 4137 l
-2171 4139 l
-2170 4140 l
-2170 4142 l
-2170 4144 l
-2170 4146 l
-2169 4147 l
-2169 4149 l
-2169 4151 l
-2169 4152 l
-2168 4154 l
-2168 4156 l
-2168 4157 l
-2168 4159 l
-2167 4161 l
-2167 4162 l
-2167 4164 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1221 1777 m
-1300 1977 l
-1422 2284 l
-1543 2591 l
-1665 2899 l
-1786 3206 l
-1908 3513 l
-2030 3821 l
-2151 4128 l
-2152 4130 l
-2152 4131 l
-2153 4133 l
-2154 4134 l
-2154 4136 l
-2155 4137 l
-2156 4139 l
-2156 4140 l
-2157 4142 l
-2157 4144 l
-2158 4145 l
-2159 4147 l
-2159 4148 l
-2160 4150 l
-2161 4151 l
-2161 4153 l
-2162 4155 l
-2162 4156 l
-2163 4158 l
-2164 4159 l
-2164 4161 l
-2165 4162 l
-2166 4164 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 2871 m
-581 2909 l
-840 3114 l
-1099 3319 l
-1357 3525 l
-1616 3730 l
-1875 3935 l
-2134 4141 l
-2135 4142 l
-2137 4143 l
-2138 4144 l
-2139 4145 l
-2141 4146 l
-2142 4147 l
-2143 4148 l
-2145 4149 l
-2146 4150 l
-2147 4151 l
-2149 4152 l
-2150 4153 l
-2151 4154 l
-2153 4155 l
-2154 4156 l
-2155 4157 l
-2157 4158 l
-2158 4160 l
-2159 4161 l
-2160 4162 l
-2162 4163 l
-2163 4164 l
-2164 4165 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 3925 m
-818 3967 l
-1145 4015 l
-1472 4064 l
-1799 4112 l
-2126 4160 l
-2127 4161 l
-2129 4161 l
-2131 4161 l
-2132 4161 l
-2134 4162 l
-2136 4162 l
-2137 4162 l
-2139 4162 l
-2141 4163 l
-2142 4163 l
-2144 4163 l
-2146 4163 l
-2147 4164 l
-2149 4164 l
-2151 4164 l
-2152 4164 l
-2154 4165 l
-2156 4165 l
-2157 4165 l
-2159 4165 l
-2161 4165 l
-2162 4166 l
-2164 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 4813 m
-592 4790 l
-900 4668 l
-1207 4547 l
-1514 4425 l
-1821 4303 l
-2128 4182 l
-2130 4181 l
-2131 4180 l
-2133 4180 l
-2134 4179 l
-2136 4178 l
-2137 4178 l
-2139 4177 l
-2141 4177 l
-2142 4176 l
-2144 4175 l
-2145 4175 l
-2147 4174 l
-2148 4173 l
-2150 4173 l
-2152 4172 l
-2153 4172 l
-2155 4171 l
-2156 4170 l
-2158 4170 l
-2159 4169 l
-2161 4169 l
-2163 4168 l
-2164 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-618 6121 m
-705 6012 l
-910 5753 l
-1115 5494 l
-1320 5235 l
-1525 4976 l
-1730 4717 l
-1936 4458 l
-2141 4199 l
-2142 4197 l
-2143 4196 l
-2144 4195 l
-2145 4193 l
-2146 4192 l
-2147 4191 l
-2148 4189 l
-2149 4188 l
-2150 4187 l
-2151 4186 l
-2152 4184 l
-2153 4183 l
-2154 4182 l
-2155 4180 l
-2156 4179 l
-2158 4178 l
-2159 4176 l
-2160 4175 l
-2161 4174 l
-2162 4172 l
-2163 4171 l
-2164 4170 l
-2165 4168 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-S
-1878 6121 m
-1919 5842 l
-1967 5515 l
-2016 5188 l
-2064 4861 l
-2112 4534 l
-2160 4207 l
-2161 4206 l
-2161 4204 l
-2161 4202 l
-2161 4201 l
-2162 4199 l
-2162 4197 l
-2162 4196 l
-2162 4194 l
-2163 4192 l
-2163 4191 l
-2163 4189 l
-2163 4187 l
-2164 4186 l
-2164 4184 l
-2164 4182 l
-2164 4181 l
-2165 4179 l
-2165 4177 l
-2165 4176 l
-2165 4174 l
-2166 4172 l
-2166 4171 l
-2166 4169 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-S
-2940 6121 m
-2911 6049 l
-2790 5741 l
-2668 5434 l
-2546 5127 l
-2425 4819 l
-2303 4512 l
-2182 4205 l
-2181 4203 l
-2180 4202 l
-2180 4200 l
-2179 4198 l
-2179 4197 l
-2178 4195 l
-2177 4194 l
-2177 4192 l
-2176 4191 l
-2175 4189 l
-2175 4188 l
-2174 4186 l
-2174 4184 l
-2173 4183 l
-2172 4181 l
-2172 4180 l
-2171 4178 l
-2170 4177 l
-2170 4175 l
-2169 4173 l
-2169 4172 l
-2168 4170 l
-2167 4169 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2166 4166 l
-2166 4166 l
-S
-4631 6121 m
-4529 6040 l
-4270 5835 l
-4011 5629 l
-3752 5424 l
-3493 5219 l
-3234 5013 l
-2975 4808 l
-2717 4603 l
-2458 4397 l
-2199 4192 l
-2197 4191 l
-2196 4190 l
-2195 4189 l
-2194 4188 l
-2192 4187 l
-2191 4186 l
-2190 4185 l
-2188 4184 l
-2187 4183 l
-2186 4182 l
-2184 4180 l
-2183 4179 l
-2182 4178 l
-2180 4177 l
-2179 4176 l
-2178 4175 l
-2176 4174 l
-2175 4173 l
-2174 4172 l
-2172 4171 l
-2171 4170 l
-2170 4169 l
-2168 4168 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4166 l
-2166 4166 l
-S
-4877 4567 m
-4822 4559 l
-4495 4511 l
-4168 4462 l
-3841 4414 l
-3514 4366 l
-3188 4317 l
-2861 4269 l
-2534 4221 l
-2207 4172 l
-2206 4172 l
-2204 4172 l
-2202 4172 l
-2201 4171 l
-2199 4171 l
-2197 4171 l
-2196 4171 l
-2194 4170 l
-2192 4170 l
-2191 4170 l
-2189 4170 l
-2187 4169 l
-2186 4169 l
-2184 4169 l
-2182 4169 l
-2181 4168 l
-2179 4168 l
-2177 4168 l
-2176 4168 l
-2174 4167 l
-2172 4167 l
-2171 4167 l
-2169 4167 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-4877 2504 m
-4876 2503 l
-4872 2496 l
-4868 2489 l
-4864 2482 l
-4860 2476 l
-4855 2469 l
-4851 2462 l
-4847 2456 l
-4843 2449 l
-4838 2442 l
-4834 2436 l
-4830 2429 l
-4826 2423 l
-4821 2416 l
-4817 2409 l
-4812 2403 l
-4808 2396 l
-4804 2390 l
-4799 2383 l
-4795 2377 l
-4790 2370 l
-4786 2364 l
-4781 2357 l
-4777 2351 l
-4772 2344 l
-4768 2338 l
-4763 2331 l
-4759 2325 l
-4754 2318 l
-4750 2312 l
-4745 2306 l
-4740 2299 l
-4736 2293 l
-4731 2286 l
-4726 2280 l
-4722 2274 l
-4717 2267 l
-4712 2261 l
-4708 2255 l
-4703 2248 l
-4698 2242 l
-4693 2236 l
-4689 2230 l
-4684 2223 l
-4679 2217 l
-4674 2211 l
-4669 2205 l
-4664 2198 l
-4659 2192 l
-4655 2186 l
-4650 2180 l
-4645 2174 l
-4640 2168 l
-4635 2161 l
-4630 2155 l
-4625 2149 l
-4620 2143 l
-4615 2137 l
-4610 2131 l
-4605 2125 l
-4600 2119 l
-4595 2113 l
-4589 2107 l
-4584 2101 l
-4579 2095 l
-4574 2089 l
-4569 2083 l
-4564 2077 l
-4559 2071 l
-4553 2065 l
-4548 2059 l
-4543 2053 l
-4538 2047 l
-4532 2041 l
-4527 2036 l
-4522 2030 l
-4517 2024 l
-4511 2018 l
-4506 2012 l
-4501 2006 l
-4495 2001 l
-4490 1995 l
-4484 1989 l
-4479 1983 l
-4474 1978 l
-4468 1972 l
-4463 1966 l
-4457 1960 l
-4452 1955 l
-4446 1949 l
-4441 1943 l
-4435 1938 l
-4430 1932 l
-4424 1927 l
-4419 1921 l
-4413 1915 l
-4407 1910 l
-4402 1904 l
-4396 1899 l
-4391 1893 l
-4385 1888 l
-4379 1882 l
-4374 1877 l
-4368 1871 l
-4362 1866 l
-4357 1860 l
-4351 1855 l
-4345 1849 l
-4339 1844 l
-4334 1839 l
-4328 1833 l
-4322 1828 l
-4316 1823 l
-4310 1817 l
-4305 1812 l
-4299 1807 l
-4293 1801 l
-4287 1796 l
-4281 1791 l
-4275 1786 l
-4269 1780 l
-4266 1777 l
-S
-4675 6121 m
-4678 6117 l
-4683 6111 l
-4688 6104 l
-4693 6098 l
-4698 6092 l
-4702 6086 l
-4707 6079 l
-4712 6073 l
-4717 6067 l
-4721 6060 l
-4726 6054 l
-4731 6048 l
-4735 6041 l
-4740 6035 l
-4745 6028 l
-4749 6022 l
-4754 6016 l
-4758 6009 l
-4763 6003 l
-4767 5996 l
-4772 5990 l
-4776 5983 l
-4781 5977 l
-4785 5970 l
-4790 5964 l
-4794 5957 l
-4799 5951 l
-4803 5944 l
-4808 5938 l
-4812 5931 l
-4816 5925 l
-4821 5918 l
-4825 5911 l
-4829 5905 l
-4834 5898 l
-4838 5892 l
-4842 5885 l
-4846 5878 l
-4851 5872 l
-4855 5865 l
-4859 5858 l
-4863 5852 l
-4867 5845 l
-4872 5838 l
-4876 5831 l
-4877 5829 l
-S
-4854 3102 m
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3101 l
-4853 3101 l
-4853 3101 l
-4853 3100 l
-4853 3100 l
-4853 3099 l
-4853 3099 l
-4852 3098 l
-4852 3098 l
-4852 3097 l
-4852 3097 l
-4852 3096 l
-4851 3096 l
-4849 3089 l
-4846 3082 l
-4843 3076 l
-4841 3069 l
-4838 3063 l
-4835 3056 l
-4832 3049 l
-4830 3043 l
-4827 3036 l
-4824 3029 l
-4821 3023 l
-4818 3016 l
-4816 3010 l
-4813 3003 l
-4810 2997 l
-4807 2990 l
-4804 2983 l
-4801 2977 l
-4798 2970 l
-4795 2964 l
-4792 2957 l
-4789 2951 l
-4786 2944 l
-4783 2938 l
-4780 2931 l
-4777 2925 l
-4774 2918 l
-4771 2912 l
-4768 2905 l
-4764 2899 l
-4761 2893 l
-4758 2886 l
-4755 2880 l
-4752 2873 l
-4748 2867 l
-4745 2860 l
-4742 2854 l
-4739 2848 l
-4735 2841 l
-4732 2835 l
-4729 2829 l
-4726 2822 l
-4722 2816 l
-4719 2809 l
-4715 2803 l
-4712 2797 l
-4709 2791 l
-4705 2784 l
-4702 2778 l
-4698 2772 l
-4695 2765 l
-4691 2759 l
-4688 2753 l
-4684 2747 l
-4681 2740 l
-4677 2734 l
-4674 2728 l
-4670 2722 l
-4667 2715 l
-4663 2709 l
-4659 2703 l
-4656 2697 l
-4652 2691 l
-4648 2684 l
-4645 2678 l
-4641 2672 l
-4637 2666 l
-4634 2660 l
-4630 2654 l
-4626 2648 l
-4622 2642 l
-4619 2635 l
-4615 2629 l
-4611 2623 l
-4607 2617 l
-4603 2611 l
-4599 2605 l
-4596 2599 l
-4592 2593 l
-4588 2587 l
-4584 2581 l
-4580 2575 l
-4576 2569 l
-4572 2563 l
-4568 2557 l
-4564 2551 l
-4560 2545 l
-4556 2539 l
-4552 2533 l
-4548 2527 l
-4544 2522 l
-4540 2516 l
-4536 2510 l
-4531 2504 l
-4527 2498 l
-4523 2492 l
-4519 2486 l
-4515 2481 l
-4511 2475 l
-4506 2469 l
-4502 2463 l
-4498 2457 l
-4494 2452 l
-4489 2446 l
-4485 2440 l
-4481 2434 l
-4477 2428 l
-4472 2423 l
-4468 2417 l
-4464 2411 l
-4459 2406 l
-4455 2400 l
-4451 2394 l
-4446 2389 l
-4442 2383 l
-4437 2377 l
-4433 2372 l
-4428 2366 l
-4424 2360 l
-4419 2355 l
-4415 2349 l
-4410 2344 l
-4406 2338 l
-4401 2333 l
-4397 2327 l
-4392 2321 l
-4388 2316 l
-4383 2310 l
-4378 2305 l
-4374 2299 l
-4369 2294 l
-4365 2289 l
-4360 2283 l
-4355 2278 l
-4351 2272 l
-4346 2267 l
-4341 2261 l
-4336 2256 l
-4332 2251 l
-4327 2245 l
-4322 2240 l
-4317 2235 l
-4313 2229 l
-4308 2224 l
-4303 2219 l
-4298 2213 l
-4293 2208 l
-4288 2203 l
-4283 2197 l
-4279 2192 l
-4274 2187 l
-4269 2182 l
-4264 2177 l
-4259 2171 l
-4254 2166 l
-4249 2161 l
-4244 2156 l
-4239 2151 l
-4234 2146 l
-4229 2140 l
-4224 2135 l
-4219 2130 l
-4214 2125 l
-4209 2120 l
-4204 2115 l
-4199 2110 l
-4194 2105 l
-4188 2100 l
-4183 2095 l
-4178 2090 l
-4173 2085 l
-4168 2080 l
-4163 2075 l
-4157 2070 l
-4152 2065 l
-S
-4152 2065 m
-4147 2060 l
-4142 2055 l
-4137 2050 l
-4131 2045 l
-4126 2041 l
-4121 2036 l
-4115 2031 l
-4110 2026 l
-4105 2021 l
-4100 2016 l
-4094 2012 l
-4089 2007 l
-4083 2002 l
-4078 1997 l
-4073 1993 l
-4067 1988 l
-4062 1983 l
-4056 1978 l
-4051 1974 l
-4046 1969 l
-4040 1964 l
-4035 1960 l
-4029 1955 l
-4024 1951 l
-4018 1946 l
-4013 1941 l
-4007 1937 l
-4002 1932 l
-3996 1928 l
-3991 1923 l
-3985 1919 l
-3979 1914 l
-3974 1910 l
-3968 1905 l
-3963 1901 l
-3957 1896 l
-3951 1892 l
-3946 1887 l
-3940 1883 l
-3934 1879 l
-3929 1874 l
-3923 1870 l
-3917 1865 l
-3912 1861 l
-3906 1857 l
-3900 1852 l
-3894 1848 l
-3889 1844 l
-3883 1840 l
-3877 1835 l
-3871 1831 l
-3866 1827 l
-3860 1823 l
-3854 1818 l
-3848 1814 l
-3842 1810 l
-3836 1806 l
-3831 1802 l
-3825 1798 l
-3819 1794 l
-3813 1790 l
-3807 1785 l
-3801 1781 l
-3795 1777 l
-S
-4297 6121 m
-4298 6120 l
-4302 6115 l
-4307 6110 l
-4312 6105 l
-4317 6099 l
-4322 6094 l
-4326 6088 l
-4331 6083 l
-4336 6078 l
-4341 6072 l
-4345 6067 l
-4350 6062 l
-4355 6056 l
-4359 6051 l
-4364 6045 l
-4369 6040 l
-4373 6034 l
-4378 6029 l
-4383 6023 l
-4387 6018 l
-4392 6012 l
-4396 6007 l
-4401 6001 l
-4405 5996 l
-4410 5990 l
-4414 5985 l
-4419 5979 l
-4423 5973 l
-4428 5968 l
-4432 5962 l
-4437 5956 l
-4441 5951 l
-4446 5945 l
-4450 5940 l
-4454 5934 l
-4459 5928 l
-4463 5922 l
-4468 5917 l
-4472 5911 l
-4476 5905 l
-4480 5900 l
-4485 5894 l
-4489 5888 l
-4493 5882 l
-4498 5877 l
-4502 5871 l
-4506 5865 l
-4510 5859 l
-4514 5853 l
-4519 5847 l
-4523 5842 l
-4527 5836 l
-4531 5830 l
-4535 5824 l
-4539 5818 l
-4543 5812 l
-4547 5806 l
-4551 5800 l
-4555 5795 l
-4560 5789 l
-4564 5783 l
-4568 5777 l
-4572 5771 l
-4575 5765 l
-4579 5759 l
-4583 5753 l
-4587 5747 l
-4591 5741 l
-4595 5735 l
-4599 5729 l
-4603 5723 l
-4607 5717 l
-4611 5711 l
-4614 5704 l
-4618 5698 l
-4622 5692 l
-4626 5686 l
-4629 5680 l
-4633 5674 l
-4637 5668 l
-4641 5662 l
-4644 5656 l
-4648 5649 l
-4652 5643 l
-4655 5637 l
-4659 5631 l
-4663 5625 l
-4666 5619 l
-4670 5612 l
-4673 5606 l
-4677 5600 l
-4681 5594 l
-4684 5587 l
-4688 5581 l
-4691 5575 l
-4695 5569 l
-4698 5562 l
-4701 5556 l
-4705 5550 l
-4708 5543 l
-4712 5537 l
-4715 5531 l
-4718 5524 l
-4722 5518 l
-4725 5512 l
-4729 5505 l
-4732 5499 l
-4735 5493 l
-4738 5486 l
-4742 5480 l
-4745 5474 l
-4748 5467 l
-4751 5461 l
-4755 5454 l
-4758 5448 l
-4761 5441 l
-4764 5435 l
-4767 5429 l
-4770 5422 l
-4773 5416 l
-4777 5409 l
-4780 5403 l
-4783 5396 l
-4786 5390 l
-4789 5383 l
-4792 5377 l
-4795 5370 l
-4798 5364 l
-4801 5357 l
-4804 5351 l
-4807 5344 l
-4809 5337 l
-4812 5331 l
-4815 5324 l
-4818 5318 l
-4821 5311 l
-4824 5305 l
-4827 5298 l
-4829 5291 l
-4832 5285 l
-4835 5278 l
-4838 5271 l
-4840 5265 l
-4843 5258 l
-4846 5252 l
-4848 5245 l
-4851 5238 l
-4854 5232 l
-4856 5225 l
-4859 5218 l
-4862 5212 l
-4864 5205 l
-4867 5198 l
-4869 5191 l
-4872 5185 l
-4874 5178 l
-4877 5171 l
-4877 5171 l
-S
-4877 3162 m
-4877 3162 l
-4874 3155 l
-4872 3149 l
-4869 3142 l
-4867 3135 l
-4864 3129 l
-4862 3122 l
-4859 3115 l
-4856 3109 l
-4854 3102 l
-S
-4585 3208 m
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3207 l
-4584 3207 l
-4584 3206 l
-4584 3206 l
-4584 3205 l
-4584 3205 l
-4584 3205 l
-4583 3204 l
-4583 3204 l
-4583 3203 l
-4583 3203 l
-4581 3197 l
-4578 3191 l
-4576 3185 l
-4573 3179 l
-4571 3173 l
-4568 3167 l
-4566 3161 l
-4563 3155 l
-4561 3149 l
-4558 3143 l
-4556 3137 l
-4553 3131 l
-4551 3125 l
-4548 3119 l
-4545 3114 l
-4543 3108 l
-4540 3102 l
-4538 3096 l
-4535 3090 l
-4532 3084 l
-4529 3078 l
-4527 3072 l
-4524 3067 l
-4521 3061 l
-4519 3055 l
-4516 3049 l
-4513 3043 l
-4510 3037 l
-4507 3032 l
-4505 3026 l
-4502 3020 l
-4499 3014 l
-4496 3008 l
-4493 3003 l
-4490 2997 l
-4487 2991 l
-4484 2985 l
-4482 2980 l
-4479 2974 l
-4476 2968 l
-4473 2962 l
-4470 2957 l
-4467 2951 l
-4464 2945 l
-4461 2939 l
-4458 2934 l
-4454 2928 l
-4451 2922 l
-4448 2917 l
-4445 2911 l
-4442 2905 l
-4439 2900 l
-4436 2894 l
-4433 2889 l
-4429 2883 l
-4426 2877 l
-4423 2872 l
-4420 2866 l
-4417 2860 l
-4413 2855 l
-4410 2849 l
-4407 2844 l
-4404 2838 l
-4400 2833 l
-4397 2827 l
-4394 2822 l
-4390 2816 l
-4387 2811 l
-4384 2805 l
-4380 2800 l
-4377 2794 l
-4373 2789 l
-4370 2783 l
-4366 2778 l
-4363 2772 l
-4360 2767 l
-4356 2761 l
-4353 2756 l
-4349 2750 l
-4346 2745 l
-4342 2740 l
-4339 2734 l
-4335 2729 l
-4331 2723 l
-4328 2718 l
-4324 2713 l
-4321 2707 l
-4317 2702 l
-4313 2697 l
-4310 2691 l
-4306 2686 l
-4302 2681 l
-4299 2675 l
-4295 2670 l
-4291 2665 l
-4287 2660 l
-4284 2654 l
-4280 2649 l
-4276 2644 l
-4272 2639 l
-4269 2633 l
-4265 2628 l
-4261 2623 l
-4257 2618 l
-4253 2613 l
-4249 2607 l
-4246 2602 l
-4242 2597 l
-4238 2592 l
-4234 2587 l
-4230 2582 l
-4226 2577 l
-4222 2571 l
-4218 2566 l
-4214 2561 l
-4210 2556 l
-4206 2551 l
-4202 2546 l
-4198 2541 l
-4194 2536 l
-4190 2531 l
-4186 2526 l
-4182 2521 l
-4178 2516 l
-4174 2511 l
-4170 2506 l
-4166 2501 l
-4161 2496 l
-4157 2491 l
-4153 2486 l
-4149 2481 l
-4145 2476 l
-4141 2471 l
-4136 2467 l
-4132 2462 l
-4128 2457 l
-4124 2452 l
-4119 2447 l
-4115 2442 l
-4111 2437 l
-4107 2433 l
-4102 2428 l
-4098 2423 l
-4094 2418 l
-4089 2413 l
-4085 2409 l
-4081 2404 l
-4076 2399 l
-4072 2394 l
-4067 2390 l
-4063 2385 l
-4059 2380 l
-4054 2376 l
-4050 2371 l
-4045 2366 l
-4041 2362 l
-4036 2357 l
-4032 2352 l
-4027 2348 l
-4023 2343 l
-4018 2338 l
-4014 2334 l
-4009 2329 l
-4005 2325 l
-4000 2320 l
-3995 2316 l
-3991 2311 l
-3986 2307 l
-3982 2302 l
-3977 2298 l
-3972 2293 l
-3968 2289 l
-3963 2284 l
-3958 2280 l
-3954 2275 l
-S
-3954 2275 m
-3949 2271 l
-3944 2266 l
-3940 2262 l
-3935 2258 l
-3930 2253 l
-3925 2249 l
-3921 2244 l
-3916 2240 l
-3911 2236 l
-3906 2231 l
-3901 2227 l
-3897 2223 l
-3892 2218 l
-3887 2214 l
-3882 2210 l
-3877 2206 l
-3872 2201 l
-3867 2197 l
-3863 2193 l
-3858 2189 l
-3853 2185 l
-3848 2180 l
-3843 2176 l
-3838 2172 l
-3833 2168 l
-3828 2164 l
-3823 2160 l
-3818 2156 l
-3813 2152 l
-3808 2147 l
-3803 2143 l
-3798 2139 l
-3793 2135 l
-3788 2131 l
-3783 2127 l
-3778 2123 l
-3773 2119 l
-3768 2115 l
-3763 2111 l
-3758 2107 l
-3752 2103 l
-3747 2099 l
-3742 2096 l
-3737 2092 l
-3732 2088 l
-3727 2084 l
-3722 2080 l
-3716 2076 l
-3711 2072 l
-3706 2068 l
-3701 2065 l
-3696 2061 l
-3690 2057 l
-3685 2053 l
-3680 2049 l
-3675 2046 l
-3669 2042 l
-3664 2038 l
-3659 2035 l
-3654 2031 l
-3648 2027 l
-3643 2024 l
-3638 2020 l
-3632 2016 l
-3627 2013 l
-3622 2009 l
-3616 2005 l
-3611 2002 l
-3606 1998 l
-3600 1995 l
-3595 1991 l
-3589 1988 l
-3584 1984 l
-3579 1980 l
-3573 1977 l
-3568 1974 l
-3562 1970 l
-3557 1967 l
-3551 1963 l
-3546 1960 l
-3540 1956 l
-3535 1953 l
-3529 1949 l
-3524 1946 l
-3518 1943 l
-3513 1939 l
-3507 1936 l
-3502 1933 l
-3496 1929 l
-3491 1926 l
-3485 1923 l
-3480 1920 l
-3474 1916 l
-3468 1913 l
-3463 1910 l
-3457 1907 l
-3452 1903 l
-3446 1900 l
-3440 1897 l
-3435 1894 l
-3429 1891 l
-3424 1888 l
-3418 1885 l
-3412 1881 l
-3407 1878 l
-3401 1875 l
-3395 1872 l
-3390 1869 l
-3384 1866 l
-3378 1863 l
-3372 1860 l
-3367 1857 l
-3361 1854 l
-3355 1851 l
-3349 1848 l
-3344 1845 l
-3338 1842 l
-3332 1840 l
-3326 1837 l
-3321 1834 l
-3315 1831 l
-3309 1828 l
-3303 1825 l
-3297 1822 l
-3292 1820 l
-3286 1817 l
-3280 1814 l
-3274 1811 l
-3268 1809 l
-3262 1806 l
-3257 1803 l
-3251 1800 l
-3245 1798 l
-3239 1795 l
-3233 1792 l
-3227 1790 l
-3221 1787 l
-3215 1785 l
-3210 1782 l
-3204 1779 l
-3199 1777 l
-S
-1133 1777 m
-1133 1778 l
-1127 1780 l
-1121 1783 l
-1115 1785 l
-1109 1788 l
-1104 1791 l
-1098 1793 l
-1092 1796 l
-1086 1798 l
-1080 1801 l
-1074 1804 l
-1068 1807 l
-1062 1809 l
-1057 1812 l
-1051 1815 l
-1045 1818 l
-1039 1820 l
-1033 1823 l
-1028 1826 l
-1022 1829 l
-1016 1832 l
-1010 1835 l
-1004 1837 l
-999 1840 l
-993 1843 l
-987 1846 l
-981 1849 l
-976 1852 l
-970 1855 l
-964 1858 l
-958 1861 l
-953 1864 l
-947 1867 l
-941 1870 l
-936 1873 l
-930 1876 l
-924 1879 l
-919 1882 l
-913 1885 l
-907 1889 l
-902 1892 l
-896 1895 l
-890 1898 l
-885 1901 l
-879 1904 l
-874 1908 l
-868 1911 l
-862 1914 l
-857 1917 l
-851 1920 l
-846 1924 l
-840 1927 l
-835 1930 l
-829 1934 l
-823 1937 l
-818 1940 l
-812 1944 l
-807 1947 l
-801 1950 l
-796 1954 l
-790 1957 l
-785 1961 l
-780 1964 l
-774 1968 l
-769 1971 l
-763 1974 l
-758 1978 l
-752 1981 l
-747 1985 l
-742 1988 l
-736 1992 l
-731 1996 l
-725 1999 l
-720 2003 l
-715 2006 l
-709 2010 l
-704 2014 l
-699 2017 l
-693 2021 l
-688 2025 l
-683 2028 l
-677 2032 l
-672 2036 l
-667 2039 l
-662 2043 l
-656 2047 l
-651 2051 l
-646 2054 l
-641 2058 l
-635 2062 l
-630 2066 l
-625 2069 l
-620 2073 l
-615 2077 l
-609 2081 l
-604 2085 l
-599 2089 l
-594 2093 l
-589 2097 l
-584 2100 l
-579 2104 l
-573 2108 l
-568 2112 l
-563 2116 l
-558 2120 l
-553 2124 l
-548 2128 l
-543 2132 l
-538 2136 l
-533 2140 l
-S
-3884 6121 m
-3886 6119 l
-3891 6115 l
-3896 6111 l
-3901 6106 l
-3906 6102 l
-3910 6098 l
-3915 6093 l
-3920 6089 l
-3925 6085 l
-3930 6080 l
-3934 6076 l
-3939 6072 l
-3944 6067 l
-3948 6063 l
-3953 6058 l
-3958 6054 l
-3962 6050 l
-3967 6045 l
-3972 6041 l
-3976 6036 l
-3981 6032 l
-3986 6027 l
-3990 6023 l
-3995 6018 l
-3999 6013 l
-4004 6009 l
-4009 6004 l
-4013 6000 l
-4018 5995 l
-4022 5991 l
-4027 5986 l
-4031 5981 l
-4036 5977 l
-4040 5972 l
-4045 5967 l
-4049 5963 l
-4054 5958 l
-4058 5953 l
-4062 5949 l
-4067 5944 l
-4071 5939 l
-4076 5935 l
-4080 5930 l
-4084 5925 l
-4089 5920 l
-4093 5915 l
-4097 5911 l
-4102 5906 l
-4106 5901 l
-4110 5896 l
-4115 5891 l
-4119 5887 l
-4123 5882 l
-4127 5877 l
-4132 5872 l
-4136 5867 l
-4140 5862 l
-4144 5857 l
-4148 5852 l
-4153 5847 l
-4157 5843 l
-4161 5838 l
-4165 5833 l
-4169 5828 l
-4173 5823 l
-4177 5818 l
-4182 5813 l
-4186 5808 l
-4190 5803 l
-4194 5798 l
-4198 5793 l
-4202 5788 l
-4206 5783 l
-4210 5777 l
-4214 5772 l
-4218 5767 l
-4222 5762 l
-4226 5757 l
-4230 5752 l
-4234 5747 l
-4237 5742 l
-4241 5737 l
-4245 5731 l
-4249 5726 l
-4253 5721 l
-4257 5716 l
-4261 5711 l
-4264 5706 l
-4268 5700 l
-4272 5695 l
-4276 5690 l
-4280 5685 l
-4283 5679 l
-4287 5674 l
-4291 5669 l
-4295 5664 l
-4298 5658 l
-4302 5653 l
-4306 5648 l
-4309 5642 l
-4313 5637 l
-4317 5632 l
-4320 5626 l
-4324 5621 l
-4327 5616 l
-4331 5610 l
-4335 5605 l
-4338 5600 l
-4342 5594 l
-4345 5589 l
-4349 5583 l
-4352 5578 l
-4356 5572 l
-4359 5567 l
-4363 5562 l
-4366 5556 l
-4370 5551 l
-4373 5545 l
-4376 5540 l
-4380 5534 l
-4383 5529 l
-4387 5523 l
-4390 5518 l
-4393 5512 l
-4397 5507 l
-4400 5501 l
-4403 5496 l
-4406 5490 l
-4410 5484 l
-4413 5479 l
-4416 5473 l
-4419 5468 l
-4423 5462 l
-4426 5457 l
-4429 5451 l
-4432 5445 l
-4435 5440 l
-4439 5434 l
-4442 5428 l
-4445 5423 l
-4448 5417 l
-4451 5411 l
-4454 5406 l
-4457 5400 l
-4460 5394 l
-4463 5389 l
-4466 5383 l
-4469 5377 l
-4472 5372 l
-4475 5366 l
-4478 5360 l
-4481 5354 l
-4484 5349 l
-4487 5343 l
-4490 5337 l
-4493 5331 l
-4496 5326 l
-4499 5320 l
-4501 5314 l
-4504 5308 l
-4507 5302 l
-4510 5297 l
-4513 5291 l
-4516 5285 l
-4518 5279 l
-4521 5273 l
-4524 5267 l
-4526 5261 l
-4529 5256 l
-4532 5250 l
-4535 5244 l
-4537 5238 l
-4540 5232 l
-4543 5226 l
-4545 5220 l
-4548 5214 l
-4550 5208 l
-4553 5203 l
-4555 5197 l
-4558 5191 l
-4561 5185 l
-4563 5179 l
-4566 5173 l
-4568 5167 l
-4571 5161 l
-4573 5155 l
-4575 5149 l
-4578 5143 l
-4580 5137 l
-4583 5131 l
-4585 5125 l
-4587 5119 l
-4590 5113 l
-4592 5107 l
-4594 5101 l
-4597 5095 l
-4599 5089 l
-4601 5083 l
-4604 5077 l
-S
-4604 5077 m
-4606 5071 l
-4608 5065 l
-4610 5059 l
-4612 5053 l
-4615 5047 l
-4617 5040 l
-4619 5034 l
-4621 5028 l
-4623 5022 l
-4625 5016 l
-4627 5010 l
-4630 5004 l
-4632 4998 l
-4634 4992 l
-4636 4986 l
-4638 4979 l
-4640 4973 l
-4642 4967 l
-4644 4961 l
-4646 4955 l
-4648 4949 l
-4650 4942 l
-4651 4936 l
-4653 4930 l
-4655 4924 l
-4657 4918 l
-4659 4912 l
-4661 4905 l
-4663 4899 l
-4664 4893 l
-4666 4887 l
-4668 4881 l
-4670 4874 l
-4672 4868 l
-4673 4862 l
-4675 4856 l
-4677 4850 l
-4678 4843 l
-4680 4837 l
-4682 4831 l
-4683 4825 l
-4685 4818 l
-4687 4812 l
-4688 4806 l
-4690 4800 l
-4691 4793 l
-4693 4787 l
-4694 4781 l
-4696 4774 l
-4697 4768 l
-4699 4762 l
-4700 4756 l
-4702 4749 l
-4703 4743 l
-4705 4737 l
-4706 4730 l
-4707 4724 l
-4709 4718 l
-4710 4711 l
-4712 4705 l
-4713 4699 l
-4714 4693 l
-4715 4686 l
-4717 4680 l
-4718 4674 l
-4719 4667 l
-4720 4661 l
-4722 4655 l
-4723 4648 l
-4724 4642 l
-4725 4636 l
-4726 4629 l
-4728 4623 l
-4729 4616 l
-4730 4610 l
-4731 4604 l
-4732 4597 l
-4733 4591 l
-4734 4585 l
-4735 4578 l
-4736 4572 l
-4737 4565 l
-4738 4559 l
-4739 4553 l
-4740 4546 l
-4741 4540 l
-4742 4534 l
-4743 4527 l
-4744 4521 l
-4744 4514 l
-4745 4508 l
-4746 4502 l
-4747 4495 l
-4748 4489 l
-4749 4482 l
-4749 4476 l
-4750 4470 l
-4751 4463 l
-4752 4457 l
-4752 4450 l
-4753 4444 l
-4754 4437 l
-4754 4431 l
-4755 4425 l
-4756 4418 l
-4756 4412 l
-4757 4405 l
-4757 4399 l
-4758 4392 l
-4759 4386 l
-4759 4380 l
-4760 4373 l
-4760 4367 l
-4761 4360 l
-4761 4354 l
-4762 4347 l
-4762 4341 l
-4762 4334 l
-4763 4328 l
-4763 4322 l
-4764 4315 l
-4764 4309 l
-4764 4302 l
-4765 4296 l
-4765 4289 l
-4765 4283 l
-4765 4276 l
-4766 4270 l
-4766 4264 l
-4766 4257 l
-4766 4251 l
-4767 4244 l
-4767 4238 l
-4767 4231 l
-4767 4225 l
-4767 4218 l
-4767 4212 l
-4768 4205 l
-4768 4199 l
-4768 4193 l
-4768 4186 l
-4768 4180 l
-4768 4173 l
-4768 4167 l
-4768 4160 l
-4768 4154 l
-4768 4147 l
-4768 4141 l
-4768 4134 l
-4768 4128 l
-4767 4122 l
-4767 4115 l
-4767 4109 l
-4767 4102 l
-4767 4096 l
-4767 4089 l
-4766 4083 l
-4766 4076 l
-4766 4070 l
-4766 4063 l
-4766 4057 l
-4765 4051 l
-4765 4044 l
-4765 4038 l
-4764 4031 l
-4764 4025 l
-4764 4018 l
-4763 4012 l
-4763 4005 l
-4762 3999 l
-4762 3993 l
-4762 3986 l
-4761 3980 l
-4761 3973 l
-4760 3967 l
-4760 3960 l
-4759 3954 l
-4759 3947 l
-4758 3941 l
-4757 3935 l
-4757 3928 l
-4756 3922 l
-4756 3915 l
-4755 3909 l
-4754 3902 l
-4754 3896 l
-4753 3890 l
-4752 3883 l
-4752 3877 l
-4751 3870 l
-4750 3864 l
-4749 3858 l
-4749 3851 l
-4748 3845 l
-4747 3838 l
-4746 3832 l
-4745 3826 l
-4745 3819 l
-4744 3813 l
-S
-4744 3813 m
-4743 3806 l
-4742 3800 l
-4741 3794 l
-4740 3787 l
-4739 3781 l
-4738 3774 l
-4737 3768 l
-4736 3762 l
-4735 3755 l
-4734 3749 l
-4733 3742 l
-4732 3736 l
-4731 3730 l
-4730 3723 l
-4729 3717 l
-4728 3711 l
-4726 3704 l
-4725 3698 l
-4724 3692 l
-4723 3685 l
-4722 3679 l
-4721 3673 l
-4719 3666 l
-4718 3660 l
-4717 3654 l
-4715 3647 l
-4714 3641 l
-4713 3635 l
-4712 3628 l
-4710 3622 l
-4709 3616 l
-4707 3609 l
-4706 3603 l
-4705 3597 l
-4703 3590 l
-4702 3584 l
-4700 3578 l
-4699 3572 l
-4697 3565 l
-4696 3559 l
-4694 3553 l
-4693 3546 l
-4691 3540 l
-4690 3534 l
-4688 3528 l
-4687 3521 l
-4685 3515 l
-4683 3509 l
-4682 3503 l
-4680 3496 l
-4678 3490 l
-4677 3484 l
-4675 3478 l
-4673 3471 l
-4672 3465 l
-4670 3459 l
-4668 3453 l
-4666 3447 l
-4665 3440 l
-4663 3434 l
-4661 3428 l
-4659 3422 l
-4657 3416 l
-4655 3409 l
-4653 3403 l
-4652 3397 l
-4650 3391 l
-4648 3385 l
-4646 3379 l
-4644 3372 l
-4642 3366 l
-4640 3360 l
-4638 3354 l
-4636 3348 l
-4634 3342 l
-4632 3336 l
-4630 3330 l
-4628 3323 l
-4625 3317 l
-4623 3311 l
-4621 3305 l
-4619 3299 l
-4617 3293 l
-4615 3287 l
-4613 3281 l
-4610 3275 l
-4608 3269 l
-4606 3263 l
-4604 3257 l
-4601 3251 l
-4599 3244 l
-4597 3238 l
-4594 3232 l
-4592 3226 l
-4590 3220 l
-4587 3214 l
-4585 3208 l
-S
-4316 3315 m
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3314 l
-4316 3314 l
-4316 3314 l
-4316 3314 l
-4316 3313 l
-4316 3313 l
-4315 3313 l
-4315 3312 l
-4315 3312 l
-4315 3311 l
-4315 3311 l
-4315 3311 l
-4315 3310 l
-4314 3310 l
-4312 3305 l
-4310 3299 l
-4308 3294 l
-4306 3289 l
-4304 3283 l
-4301 3278 l
-4299 3273 l
-4297 3267 l
-4295 3262 l
-4293 3257 l
-4290 3252 l
-4288 3246 l
-4255 3173 l
-4219 3101 l
-4181 3031 l
-4140 2961 l
-4097 2893 l
-4052 2827 l
-4004 2762 l
-3954 2699 l
-3902 2638 l
-3848 2579 l
-3792 2521 l
-3734 2466 l
-3674 2412 l
-3612 2361 l
-3549 2312 l
-3484 2265 l
-3417 2220 l
-3349 2178 l
-3279 2138 l
-3208 2101 l
-3135 2066 l
-3062 2033 l
-2987 2003 l
-2912 1976 l
-2835 1952 l
-2758 1930 l
-2680 1911 l
-2602 1894 l
-2522 1880 l
-2443 1869 l
-2363 1861 l
-2283 1856 l
-2203 1853 l
-2122 1853 l
-2042 1856 l
-1962 1862 l
-1882 1870 l
-1803 1881 l
-1724 1895 l
-1645 1912 l
-1567 1932 l
-1490 1954 l
-1414 1979 l
-1338 2006 l
-1264 2036 l
-1190 2069 l
-1118 2104 l
-1047 2142 l
-978 2182 l
-909 2224 l
-843 2269 l
-778 2316 l
-714 2366 l
-653 2417 l
-593 2471 l
-535 2526 l
-533 2528 l
-S
-533 5804 m
-572 5842 l
-631 5896 l
-692 5948 l
-755 5998 l
-819 6046 l
-885 6092 l
-930 6121 l
-S
-3403 6121 m
-3459 6085 l
-3525 6039 l
-3589 5990 l
-3652 5940 l
-3712 5887 l
-3771 5832 l
-3828 5776 l
-3883 5717 l
-3936 5656 l
-3986 5594 l
-4035 5530 l
-4081 5464 l
-4125 5397 l
-4166 5328 l
-4205 5258 l
-4242 5186 l
-4276 5114 l
-4308 5040 l
-4337 4965 l
-4363 4889 l
-4387 4812 l
-4408 4735 l
-4426 4657 l
-4442 4578 l
-4455 4498 l
-4465 4419 l
-4472 4339 l
-4477 4258 l
-4479 4178 l
-4478 4098 l
-4474 4018 l
-4467 3937 l
-4458 3858 l
-4446 3778 l
-4431 3699 l
-4414 3621 l
-4393 3543 l
-4370 3466 l
-4345 3390 l
-4316 3315 l
-S
-4048 3421 m
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4047 3421 l
-4047 3420 l
-4047 3420 l
-4047 3420 l
-4047 3419 l
-4047 3419 l
-4047 3419 l
-4046 3418 l
-4046 3418 l
-4046 3418 l
-4046 3417 l
-4046 3417 l
-4044 3412 l
-4042 3408 l
-4040 3403 l
-4038 3398 l
-4036 3394 l
-4035 3389 l
-4033 3384 l
-4031 3380 l
-4029 3375 l
-4027 3371 l
-4025 3366 l
-4023 3361 l
-3994 3297 l
-3962 3234 l
-3929 3172 l
-3893 3112 l
-3856 3052 l
-3816 2994 l
-3774 2938 l
-3731 2883 l
-3685 2829 l
-3638 2777 l
-3589 2727 l
-3538 2678 l
-3486 2632 l
-3432 2587 l
-3376 2544 l
-3319 2503 l
-3261 2464 l
-3201 2427 l
-3140 2392 l
-3078 2359 l
-3014 2328 l
-2950 2300 l
-2885 2274 l
-2819 2250 l
-2752 2229 l
-2684 2209 l
-2616 2193 l
-2547 2178 l
-2478 2166 l
-2408 2156 l
-2338 2149 l
-2268 2144 l
-2198 2142 l
-2128 2142 l
-2058 2145 l
-1988 2150 l
-1918 2157 l
-1848 2167 l
-1779 2179 l
-1710 2194 l
-1642 2211 l
-1575 2230 l
-1508 2252 l
-1442 2276 l
-1377 2302 l
-1312 2331 l
-1249 2362 l
-1187 2395 l
-1126 2430 l
-1067 2467 l
-1008 2506 l
-951 2547 l
-896 2591 l
-842 2636 l
-790 2683 l
-739 2731 l
-690 2782 l
-643 2834 l
-598 2888 l
-554 2943 l
-533 2972 l
-S
-533 5361 m
-539 5369 l
-582 5425 l
-626 5479 l
-673 5532 l
-721 5583 l
-771 5632 l
-823 5680 l
-876 5726 l
-931 5769 l
-987 5811 l
-1045 5851 l
-1104 5889 l
-1165 5925 l
-1226 5959 l
-1289 5991 l
-1353 6020 l
-1418 6047 l
-1484 6072 l
-1550 6095 l
-1617 6115 l
-1641 6121 l
-S
-2692 6121 m
-2727 6112 l
-2794 6091 l
-2861 6068 l
-2926 6043 l
-2991 6015 l
-3055 5985 l
-3117 5953 l
-3179 5919 l
-3239 5883 l
-3298 5845 l
-3355 5805 l
-3412 5762 l
-3466 5718 l
-3519 5672 l
-3571 5624 l
-3620 5574 l
-3668 5523 l
-3714 5470 l
-3759 5416 l
-3801 5359 l
-3842 5302 l
-3880 5243 l
-3916 5183 l
-3951 5121 l
-3983 5059 l
-4012 4995 l
-4040 4931 l
-4065 4865 l
-4089 4799 l
-4109 4732 l
-4128 4664 l
-4144 4595 l
-4158 4526 l
-4169 4457 l
-4178 4387 l
-4184 4317 l
-4188 4247 l
-4190 4177 l
-4189 4106 l
-4186 4036 l
-4180 3966 l
-4172 3896 l
-4161 3827 l
-4148 3758 l
-4133 3689 l
-4115 3621 l
-4095 3554 l
-4072 3487 l
-4048 3421 l
-S
-3779 3527 m
-3779 3527 l
-3779 3527 l
-3778 3527 l
-3778 3526 l
-3778 3526 l
-3778 3526 l
-3778 3525 l
-3778 3525 l
-3778 3525 l
-3778 3525 l
-3778 3524 l
-3777 3524 l
-3776 3520 l
-3774 3516 l
-3773 3512 l
-3771 3508 l
-3769 3504 l
-3768 3500 l
-3766 3496 l
-3764 3492 l
-3763 3488 l
-3761 3484 l
-3759 3480 l
-3758 3476 l
-3733 3421 l
-3706 3367 l
-3677 3314 l
-3647 3262 l
-3614 3212 l
-3580 3162 l
-3545 3113 l
-3507 3066 l
-3468 3020 l
-3428 2976 l
-3386 2933 l
-3342 2891 l
-3297 2851 l
-3251 2812 l
-3203 2775 l
-3154 2740 l
-3104 2707 l
-3053 2675 l
-3001 2645 l
-2947 2617 l
-2893 2591 l
-2838 2567 l
-2782 2544 l
-2726 2524 l
-2668 2505 l
-2610 2489 l
-2552 2474 l
-2493 2462 l
-2433 2452 l
-2374 2444 l
-2314 2437 l
-2254 2433 l
-2194 2431 l
-2133 2431 l
-2073 2434 l
-2013 2438 l
-1953 2444 l
-1894 2453 l
-1834 2463 l
-1775 2476 l
-1717 2490 l
-1659 2507 l
-1602 2526 l
-1545 2546 l
-1489 2569 l
-1434 2593 l
-1380 2620 l
-1327 2648 l
-1275 2678 l
-1224 2710 l
-1174 2743 l
-1125 2779 l
-1077 2816 l
-1031 2854 l
-986 2895 l
-943 2936 l
-901 2980 l
-861 3024 l
-822 3070 l
-785 3118 l
-749 3166 l
-715 3216 l
-683 3267 l
-653 3319 l
-624 3372 l
-598 3426 l
-573 3481 l
-550 3537 l
-533 3583 l
-S
-533 4749 m
-542 4775 l
-564 4831 l
-588 4886 l
-614 4940 l
-642 4994 l
-672 5046 l
-703 5098 l
-736 5148 l
-771 5197 l
-808 5245 l
-846 5292 l
-886 5337 l
-928 5380 l
-970 5423 l
-1015 5464 l
-1060 5503 l
-1107 5540 l
-1156 5576 l
-1205 5611 l
-1256 5643 l
-1308 5674 l
-1361 5703 l
-1415 5730 l
-1469 5755 l
-1525 5778 l
-1581 5800 l
-1638 5819 l
-1696 5836 l
-1754 5852 l
-1813 5865 l
-1872 5876 l
-1931 5886 l
-1991 5893 l
-2051 5898 l
-2111 5901 l
-2172 5902 l
-2232 5900 l
-2292 5897 l
-2352 5892 l
-2412 5884 l
-2471 5875 l
-2530 5863 l
-2589 5849 l
-2647 5834 l
-2705 5816 l
-2762 5796 l
-2818 5775 l
-2873 5751 l
-2928 5726 l
-2981 5698 l
-3034 5669 l
-3086 5638 l
-3136 5605 l
-3186 5571 l
-3234 5534 l
-3280 5496 l
-3326 5457 l
-3370 5416 l
-3413 5373 l
-3454 5329 l
-3493 5284 l
-3531 5237 l
-3568 5189 l
-3602 5140 l
-3635 5089 l
-3666 5038 l
-3696 4985 l
-3723 4931 l
-3749 4877 l
-3772 4821 l
-3794 4765 l
-3814 4708 l
-3832 4651 l
-3848 4593 l
-3861 4534 l
-3873 4475 l
-3883 4415 l
-3890 4356 l
-3896 4296 l
-3899 4235 l
-3901 4175 l
-3900 4115 l
-3897 4055 l
-3892 3995 l
-3885 3935 l
-3876 3875 l
-3865 3816 l
-3852 3757 l
-3837 3699 l
-3819 3641 l
-3800 3584 l
-3779 3528 l
-S
-3510 3634 m
-3510 3634 l
-3510 3633 l
-3510 3633 l
-3510 3633 l
-3510 3633 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3631 l
-3509 3631 l
-3508 3628 l
-3506 3624 l
-3505 3621 l
-3504 3618 l
-3502 3614 l
-3501 3611 l
-3499 3608 l
-3498 3605 l
-3497 3601 l
-3495 3598 l
-3494 3595 l
-3492 3591 l
-3472 3546 l
-3449 3501 l
-3425 3456 l
-3400 3413 l
-3373 3371 l
-3345 3329 l
-3315 3289 l
-3284 3249 l
-3251 3211 l
-3218 3174 l
-3183 3138 l
-3146 3103 l
-3109 3070 l
-3070 3038 l
-3030 3007 l
-2990 2978 l
-2948 2950 l
-2905 2924 l
-2862 2899 l
-2817 2875 l
-2772 2853 l
-2726 2833 l
-2680 2815 l
-2632 2798 l
-2585 2782 l
-2536 2768 l
-2488 2756 l
-2438 2746 l
-2389 2738 l
-2339 2731 l
-2289 2726 l
-2239 2722 l
-2189 2720 l
-2139 2721 l
-2089 2722 l
-2039 2726 l
-1989 2731 l
-1939 2738 l
-1890 2747 l
-1841 2757 l
-1792 2770 l
-1744 2784 l
-1696 2799 l
-1649 2816 l
-1602 2835 l
-1556 2855 l
-1511 2877 l
-1467 2901 l
-1423 2926 l
-1381 2953 l
-1339 2981 l
-1299 3010 l
-1259 3041 l
-1220 3073 l
-1183 3107 l
-1147 3141 l
-1112 3177 l
-1078 3215 l
-1046 3253 l
-1015 3292 l
-985 3333 l
-957 3375 l
-930 3417 l
-905 3460 l
-881 3505 l
-859 3550 l
-839 3595 l
-820 3642 l
-802 3689 l
-786 3737 l
-772 3785 l
-760 3834 l
-749 3883 l
-740 3932 l
-733 3982 l
-727 4032 l
-724 4082 l
-722 4132 l
-721 4182 l
-723 4232 l
-726 4282 l
-731 4332 l
-737 4382 l
-746 4432 l
-756 4481 l
-768 4530 l
-781 4578 l
-796 4626 l
-813 4673 l
-831 4720 l
-851 4766 l
-873 4811 l
-896 4856 l
-921 4900 l
-947 4943 l
-975 4984 l
-1004 5025 l
-1034 5065 l
-1066 5104 l
-1100 5142 l
-1134 5178 l
-1170 5213 l
-1207 5247 l
-1245 5280 l
-1284 5311 l
-1324 5341 l
-1366 5370 l
-1408 5397 l
-1451 5423 l
-1495 5447 l
-1540 5469 l
-1585 5490 l
-1632 5510 l
-1679 5528 l
-1726 5544 l
-1774 5558 l
-1823 5571 l
-1872 5582 l
-1921 5591 l
-1971 5599 l
-2020 5605 l
-2070 5609 l
-2121 5612 l
-2171 5612 l
-2221 5611 l
-2271 5609 l
-2321 5604 l
-2371 5598 l
-2420 5590 l
-2470 5580 l
-2519 5569 l
-2567 5556 l
-2615 5541 l
-2662 5525 l
-2709 5507 l
-2755 5487 l
-2801 5466 l
-2846 5443 l
-2889 5419 l
-2932 5393 l
-2975 5365 l
-3016 5336 l
-3056 5306 l
-3095 5275 l
-3133 5242 l
-3169 5208 l
-3205 5172 l
-3239 5135 l
-3272 5098 l
-3304 5059 l
-3334 5019 l
-3363 4977 l
-3390 4935 l
-3416 4892 l
-3441 4849 l
-3464 4804 l
-3485 4758 l
-3505 4712 l
-3523 4665 l
-3539 4618 l
-3554 4570 l
-3567 4522 l
-3579 4473 l
-3589 4423 l
-3597 4374 l
-3603 4324 l
-3608 4274 l
-3611 4224 l
-3612 4174 l
-3611 4124 l
-3609 4073 l
-3605 4023 l
-3599 3973 l
-3591 3924 l
-3582 3874 l
-S
-3582 3874 m
-3571 3825 l
-3558 3777 l
-3544 3729 l
-3528 3681 l
-3510 3634 l
-S
-3241 3740 m
-3241 3740 l
-3241 3740 l
-3241 3740 l
-3241 3740 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3738 l
-3241 3738 l
-3240 3738 l
-3239 3735 l
-3238 3733 l
-3237 3730 l
-3236 3727 l
-3235 3725 l
-3234 3722 l
-3233 3720 l
-3232 3717 l
-3231 3714 l
-3229 3712 l
-3228 3709 l
-3227 3706 l
-3211 3670 l
-3193 3634 l
-3174 3598 l
-3153 3564 l
-3132 3530 l
-3109 3497 l
-3085 3464 l
-3060 3433 l
-3034 3402 l
-3007 3373 l
-2979 3344 l
-2950 3316 l
-2920 3289 l
-2889 3264 l
-2858 3239 l
-2825 3216 l
-2792 3193 l
-2757 3172 l
-2723 3152 l
-2687 3134 l
-2651 3116 l
-2614 3100 l
-2577 3085 l
-2539 3071 l
-2501 3059 l
-2462 3048 l
-2423 3038 l
-2384 3030 l
-2344 3023 l
-2305 3018 l
-2265 3014 l
-2225 3011 l
-2185 3010 l
-2144 3010 l
-2104 3011 l
-2064 3014 l
-2024 3018 l
-1985 3024 l
-1945 3031 l
-1906 3039 l
-1867 3049 l
-1828 3060 l
-1790 3072 l
-1752 3086 l
-1715 3101 l
-1678 3118 l
-1642 3135 l
-1607 3154 l
-1572 3174 l
-1538 3195 l
-1505 3218 l
-1472 3241 l
-1440 3266 l
-1410 3292 l
-1380 3319 l
-1351 3346 l
-1323 3375 l
-1296 3405 l
-1270 3436 l
-1245 3467 l
-1221 3500 l
-1199 3533 l
-1178 3567 l
-1157 3602 l
-1138 3637 l
-1121 3673 l
-1104 3710 l
-1089 3747 l
-1075 3785 l
-1062 3823 l
-1051 3861 l
-1041 3900 l
-1033 3939 l
-1026 3979 l
-1020 4019 l
-1015 4059 l
-1012 4099 l
-1011 4139 l
-1010 4179 l
-1011 4219 l
-1014 4259 l
-1018 4299 l
-1023 4339 l
-1030 4379 l
-1038 4418 l
-1047 4457 l
-1058 4496 l
-1070 4534 l
-1084 4572 l
-1098 4609 l
-1114 4646 l
-1132 4682 l
-1150 4718 l
-1170 4753 l
-1191 4787 l
-1213 4821 l
-1236 4854 l
-1261 4885 l
-1286 4916 l
-1313 4947 l
-1340 4976 l
-1369 5004 l
-1399 5031 l
-1429 5057 l
-1460 5082 l
-1493 5106 l
-1526 5129 l
-1560 5151 l
-1594 5171 l
-1629 5191 l
-1665 5209 l
-1702 5226 l
-1739 5241 l
-1776 5255 l
-1814 5268 l
-1853 5280 l
-1892 5290 l
-1931 5299 l
-1970 5306 l
-2010 5313 l
-2050 5317 l
-2090 5321 l
-2130 5323 l
-2170 5323 l
-2210 5322 l
-2250 5320 l
-2290 5317 l
-2330 5312 l
-2370 5305 l
-2409 5297 l
-2448 5288 l
-2487 5278 l
-2525 5266 l
-2563 5253 l
-2601 5239 l
-2638 5223 l
-2674 5206 l
-2710 5188 l
-2745 5168 l
-2779 5147 l
-2813 5126 l
-2846 5102 l
-2878 5078 l
-2909 5053 l
-2939 5027 l
-2969 4999 l
-2997 4971 l
-3025 4942 l
-3051 4911 l
-3076 4880 l
-3101 4848 l
-3124 4815 l
-3146 4782 l
-3166 4747 l
-3186 4712 l
-3204 4676 l
-3221 4640 l
-3237 4603 l
-3252 4566 l
-3265 4528 l
-3277 4489 l
-3287 4451 l
-3296 4411 l
-3304 4372 l
-3311 4332 l
-3316 4293 l
-3319 4253 l
-3322 4212 l
-3323 4172 l
-3322 4132 l
-3320 4092 l
-3317 4052 l
-3312 4012 l
-3306 3972 l
-3299 3933 l
-S
-3299 3933 m
-3290 3894 l
-3280 3855 l
-3268 3816 l
-3256 3778 l
-3241 3741 l
-S
-2973 3847 m
-2973 3847 l
-2972 3847 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3845 l
-2972 3845 l
-2972 3845 l
-2971 3843 l
-2970 3841 l
-2970 3839 l
-2969 3837 l
-2968 3835 l
-2967 3833 l
-2966 3831 l
-2965 3829 l
-2965 3827 l
-2964 3825 l
-2963 3823 l
-2962 3821 l
-2950 3794 l
-2936 3767 l
-2922 3740 l
-2907 3714 l
-2890 3689 l
-2873 3664 l
-2856 3640 l
-2837 3616 l
-2817 3593 l
-2797 3571 l
-2776 3549 l
-2754 3529 l
-2732 3509 l
-2709 3489 l
-2685 3471 l
-2660 3453 l
-2635 3437 l
-2610 3421 l
-2584 3406 l
-2557 3392 l
-2530 3379 l
-2502 3366 l
-2474 3355 l
-2446 3345 l
-2417 3336 l
-2388 3328 l
-2359 3320 l
-2330 3314 l
-2300 3309 l
-2270 3305 l
-2240 3302 l
-2210 3300 l
-2180 3299 l
-2150 3299 l
-2120 3300 l
-2090 3302 l
-2060 3305 l
-2030 3310 l
-2000 3315 l
-1971 3321 l
-1942 3328 l
-1913 3337 l
-1884 3346 l
-1856 3356 l
-1828 3368 l
-1800 3380 l
-1773 3393 l
-1747 3407 l
-1721 3422 l
-1695 3438 l
-1670 3455 l
-1646 3473 l
-1622 3491 l
-1599 3510 l
-1576 3530 l
-1555 3551 l
-1534 3573 l
-1514 3595 l
-1494 3618 l
-1476 3642 l
-1458 3666 l
-1441 3691 l
-1425 3717 l
-1410 3743 l
-1395 3769 l
-1382 3796 l
-1370 3824 l
-1358 3852 l
-1348 3880 l
-1338 3909 l
-1330 3938 l
-1323 3967 l
-1316 3996 l
-1311 4026 l
-1306 4056 l
-1303 4086 l
-1301 4116 l
-1300 4146 l
-1299 4176 l
-1300 4206 l
-1302 4236 l
-1305 4266 l
-1309 4296 l
-1314 4326 l
-1320 4355 l
-1327 4384 l
-1335 4413 l
-1344 4442 l
-1354 4471 l
-1365 4499 l
-1377 4526 l
-1390 4553 l
-1404 4580 l
-1419 4606 l
-1435 4632 l
-1451 4657 l
-1469 4682 l
-1487 4706 l
-1506 4729 l
-1526 4752 l
-1547 4773 l
-1568 4795 l
-1591 4815 l
-1613 4835 l
-1637 4853 l
-1661 4871 l
-1686 4889 l
-1711 4905 l
-1737 4920 l
-1764 4935 l
-1790 4948 l
-1818 4961 l
-1846 4972 l
-1874 4983 l
-1902 4993 l
-1931 5001 l
-1960 5009 l
-1990 5016 l
-2019 5021 l
-2049 5026 l
-2079 5030 l
-2109 5032 l
-2139 5034 l
-2169 5034 l
-2199 5033 l
-2229 5032 l
-2259 5029 l
-2289 5025 l
-2319 5021 l
-2348 5015 l
-2378 5008 l
-2407 5000 l
-2436 4991 l
-2464 4981 l
-2492 4971 l
-2520 4959 l
-2547 4946 l
-2574 4932 l
-2600 4918 l
-2626 4902 l
-2651 4886 l
-2676 4868 l
-2700 4850 l
-2723 4831 l
-2746 4812 l
-2768 4791 l
-2790 4770 l
-2810 4748 l
-2830 4725 l
-2849 4702 l
-2867 4678 l
-2884 4653 l
-2901 4628 l
-2916 4602 l
-2931 4576 l
-2945 4549 l
-2958 4522 l
-2969 4494 l
-2980 4466 l
-2990 4437 l
-2999 4409 l
-3007 4380 l
-3014 4350 l
-3020 4321 l
-3025 4291 l
-3028 4261 l
-3031 4231 l
-3033 4201 l
-3034 4171 l
-3033 4141 l
-3032 4111 l
-3029 4081 l
-3026 4051 l
-3021 4021 l
-3016 3991 l
-S
-3016 3991 m
-3009 3962 l
-3001 3933 l
-2993 3904 l
-2983 3875 l
-2973 3847 l
-S
-2704 3953 m
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3952 l
-2703 3952 l
-2703 3952 l
-2703 3951 l
-2702 3950 l
-2702 3948 l
-2701 3947 l
-2701 3946 l
-2700 3944 l
-2700 3943 l
-2699 3942 l
-2699 3940 l
-2698 3939 l
-2697 3938 l
-2697 3936 l
-2689 3918 l
-2680 3900 l
-2670 3882 l
-2660 3865 l
-2649 3848 l
-2638 3832 l
-2626 3815 l
-2613 3800 l
-2600 3784 l
-2587 3769 l
-2573 3755 l
-2558 3741 l
-2543 3728 l
-2528 3715 l
-2512 3703 l
-2496 3691 l
-2479 3680 l
-2462 3669 l
-2445 3659 l
-2427 3650 l
-2409 3641 l
-2390 3633 l
-2372 3626 l
-2353 3619 l
-2334 3613 l
-2314 3607 l
-2295 3602 l
-2275 3598 l
-2255 3595 l
-2236 3592 l
-2216 3590 l
-2196 3589 l
-2176 3588 l
-2155 3588 l
-2135 3589 l
-2115 3590 l
-2095 3592 l
-2076 3595 l
-2056 3599 l
-2036 3603 l
-2017 3608 l
-1997 3613 l
-1978 3619 l
-1959 3626 l
-1941 3634 l
-1922 3642 l
-1904 3651 l
-1887 3660 l
-1869 3670 l
-1852 3681 l
-1836 3692 l
-1819 3704 l
-1803 3716 l
-1788 3729 l
-1773 3742 l
-1759 3756 l
-1745 3771 l
-1731 3786 l
-1718 3801 l
-1706 3817 l
-1694 3833 l
-1683 3850 l
-1672 3867 l
-1662 3884 l
-1652 3902 l
-1644 3920 l
-1635 3938 l
-1628 3957 l
-1621 3975 l
-1614 3995 l
-1609 4014 l
-1604 4033 l
-1600 4053 l
-1596 4073 l
-1593 4093 l
-1591 4112 l
-1589 4133 l
-1589 4153 l
-1588 4173 l
-1589 4193 l
-1590 4213 l
-1592 4233 l
-1595 4253 l
-1598 4273 l
-1602 4292 l
-1607 4312 l
-1612 4331 l
-1618 4350 l
-1625 4369 l
-1632 4388 l
-1640 4406 l
-1649 4424 l
-1658 4442 l
-1668 4460 l
-1679 4477 l
-1690 4494 l
-1701 4510 l
-1714 4526 l
-1726 4541 l
-1740 4556 l
-1753 4571 l
-1768 4585 l
-1783 4599 l
-1798 4612 l
-1813 4624 l
-1830 4636 l
-1846 4648 l
-1863 4659 l
-1880 4669 l
-1898 4679 l
-1916 4688 l
-1934 4696 l
-1953 4704 l
-1971 4711 l
-1990 4717 l
-2010 4723 l
-2029 4728 l
-2049 4733 l
-2068 4736 l
-2088 4739 l
-2108 4742 l
-2128 4743 l
-2148 4744 l
-2168 4745 l
-2188 4744 l
-2208 4743 l
-2228 4741 l
-2248 4739 l
-2268 4736 l
-2288 4732 l
-2307 4727 l
-2327 4722 l
-2346 4716 l
-2365 4710 l
-2384 4702 l
-2402 4695 l
-2420 4686 l
-2438 4677 l
-2456 4667 l
-2473 4657 l
-2490 4646 l
-2506 4634 l
-2522 4622 l
-2538 4610 l
-2553 4597 l
-2568 4583 l
-2582 4569 l
-2596 4554 l
-2609 4539 l
-2621 4523 l
-2634 4507 l
-2645 4491 l
-2656 4474 l
-2666 4457 l
-2676 4439 l
-2685 4421 l
-2694 4403 l
-2702 4385 l
-2709 4366 l
-2716 4347 l
-2722 4328 l
-2727 4308 l
-2731 4289 l
-2735 4269 l
-2739 4249 l
-2741 4229 l
-2743 4209 l
-2744 4189 l
-2745 4169 l
-2744 4149 l
-2743 4129 l
-2742 4109 l
-2739 4089 l
-2736 4069 l
-2733 4050 l
-S
-2733 4050 m
-2728 4030 l
-2723 4011 l
-2717 3991 l
-2711 3972 l
-2704 3953 l
-S
-2435 4060 m
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2434 4058 l
-2434 4057 l
-2434 4057 l
-2434 4056 l
-2433 4055 l
-2433 4055 l
-2433 4054 l
-2432 4053 l
-2432 4053 l
-2432 4052 l
-2432 4051 l
-2427 4042 l
-2423 4033 l
-2418 4024 l
-2413 4016 l
-2408 4007 l
-2402 3999 l
-2396 3991 l
-2390 3983 l
-2383 3975 l
-2377 3968 l
-2370 3961 l
-2362 3954 l
-2355 3947 l
-2347 3941 l
-2339 3935 l
-2331 3929 l
-2323 3923 l
-2314 3918 l
-2305 3913 l
-2297 3908 l
-2288 3904 l
-2278 3900 l
-2269 3896 l
-2260 3893 l
-2250 3890 l
-2240 3887 l
-2231 3884 l
-2221 3882 l
-2211 3881 l
-2201 3879 l
-2191 3878 l
-2181 3878 l
-2171 3877 l
-2161 3877 l
-2151 3878 l
-2141 3878 l
-2131 3879 l
-2121 3881 l
-2111 3882 l
-2101 3885 l
-2092 3887 l
-2082 3890 l
-2072 3893 l
-2063 3896 l
-2054 3900 l
-2044 3904 l
-2035 3909 l
-2027 3913 l
-2018 3918 l
-2009 3924 l
-2001 3929 l
-1993 3935 l
-1985 3941 l
-1977 3948 l
-1970 3954 l
-1963 3961 l
-1956 3969 l
-1949 3976 l
-1942 3984 l
-1936 3992 l
-1930 4000 l
-1925 4008 l
-1919 4016 l
-1914 4025 l
-1909 4034 l
-1905 4043 l
-1901 4052 l
-1897 4061 l
-1894 4071 l
-1890 4080 l
-1888 4090 l
-1885 4100 l
-1883 4110 l
-1881 4120 l
-1880 4129 l
-1879 4139 l
-1878 4149 l
-1877 4159 l
-1877 4170 l
-1878 4180 l
-1878 4190 l
-1879 4200 l
-1881 4210 l
-1882 4219 l
-1884 4229 l
-1887 4239 l
-1889 4249 l
-1892 4258 l
-1896 4268 l
-1899 4277 l
-1903 4286 l
-1908 4295 l
-1912 4304 l
-1917 4313 l
-1923 4322 l
-1928 4330 l
-1934 4338 l
-1940 4346 l
-1946 4354 l
-1953 4361 l
-1960 4369 l
-1967 4376 l
-1974 4383 l
-1982 4389 l
-1990 4395 l
-1998 4401 l
-2006 4407 l
-2015 4412 l
-2023 4418 l
-2032 4422 l
-2041 4427 l
-2050 4431 l
-2059 4435 l
-2069 4439 l
-2078 4442 l
-2088 4445 l
-2098 4447 l
-2107 4449 l
-2117 4451 l
-2127 4453 l
-2137 4454 l
-2147 4455 l
-2157 4455 l
-2167 4456 l
-2177 4455 l
-2187 4455 l
-2197 4454 l
-2207 4453 l
-2217 4451 l
-2227 4449 l
-2237 4447 l
-2247 4444 l
-2256 4441 l
-2266 4438 l
-2275 4434 l
-2284 4430 l
-2293 4426 l
-2302 4422 l
-2311 4417 l
-2320 4412 l
-2328 4406 l
-2336 4400 l
-2344 4394 l
-2352 4388 l
-2360 4381 l
-2367 4375 l
-2374 4368 l
-2381 4360 l
-2388 4353 l
-2394 4345 l
-2400 4337 l
-2406 4329 l
-2411 4320 l
-2416 4312 l
-2421 4303 l
-2426 4294 l
-2430 4285 l
-2434 4276 l
-2438 4266 l
-2441 4257 l
-2444 4247 l
-2447 4237 l
-2449 4228 l
-2451 4218 l
-2452 4208 l
-2454 4198 l
-2455 4188 l
-2455 4178 l
-2455 4168 l
-2455 4158 l
-2455 4148 l
-2454 4138 l
-2453 4128 l
-2451 4118 l
-2450 4108 l
-S
-2450 4108 m
-2447 4098 l
-2445 4088 l
-2442 4079 l
-2439 4069 l
-2435 4060 l
-S
-2166 4166 m
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-3682 3323 m
-3655 3337 l
-S
-3559 3132 m
-3534 3150 l
-S
-3412 2959 m
-3390 2980 l
-S
-3057 2677 m
-3041 2704 l
-S
-2855 2574 m
-2843 2602 l
-S
-2642 2498 m
-2633 2527 l
-S
-2194 2431 m
-2193 2462 l
-S
-1967 2443 m
-1971 2473 l
-S
-1744 2483 m
-1751 2513 l
-S
-1323 2650 m
-1338 2677 l
-S
-1132 2773 m
-1151 2798 l
-S
-960 2920 m
-981 2942 l
-S
-678 3275 m
-704 3291 l
-S
-575 3477 m
-603 3489 l
-S
-651 5010 m
-678 4995 l
-S
-774 5201 m
-799 5183 l
-S
-921 5374 m
-943 5353 l
-S
-1276 5655 m
-1291 5629 l
-S
-1478 5759 m
-1490 5731 l
-S
-1691 5835 m
-1700 5806 l
-S
-2139 5901 m
-2140 5871 l
-S
-2366 5890 m
-2362 5860 l
-S
-2589 5849 m
-2582 5820 l
-S
-3010 5683 m
-2995 5656 l
-S
-3200 5560 m
-3182 5535 l
-S
-3373 5413 m
-3352 5391 l
-S
-3655 5058 m
-3628 5042 l
-S
-3758 4856 m
-3730 4844 l
-S
-3834 4642 m
-3805 4634 l
-S
-3900 4194 m
-3870 4193 l
-S
-3889 3967 m
-3859 3971 l
-S
-3848 3744 m
-3819 3751 l
-S
-4787 3129 m
-4799 3156 l
-S
-4719 3155 m
-4732 3183 l
-S
-4652 3182 m
-4665 3209 l
-S
-4518 3235 m
-4531 3263 l
-S
-4451 3262 m
-4463 3289 l
-S
-4384 3288 m
-4396 3316 l
-S
-4249 3341 m
-4262 3369 l
-S
-4182 3368 m
-4195 3396 l
-S
-4115 3395 m
-4127 3422 l
-S
-3980 3448 m
-3993 3476 l
-S
-3913 3474 m
-3926 3502 l
-S
-3846 3501 m
-3859 3529 l
-S
-3712 3554 m
-3724 3582 l
-S
-3645 3581 m
-3657 3609 l
-S
-3577 3608 m
-3590 3635 l
-S
-3443 3661 m
-3456 3688 l
-S
-3376 3687 m
-3388 3715 l
-S
-3309 3714 m
-3321 3742 l
-S
-3174 3767 m
-3187 3795 l
-S
-3107 3794 m
-3120 3821 l
-S
-3040 3820 m
-3052 3848 l
-S
-2905 3874 m
-2918 3901 l
-S
-2838 3900 m
-2851 3928 l
-S
-2771 3927 m
-2784 3955 l
-S
-2637 3980 m
-2649 4008 l
-S
-2570 4007 m
-2582 4034 l
-S
-2502 4033 m
-2515 4061 l
-S
-2368 4087 m
-2381 4114 l
-S
-2301 4113 m
-2313 4141 l
-S
-2234 4140 m
-2246 4167 l
-S
-3779 3528 m
-3754 3468 l
-3727 3409 l
-3697 3351 l
-3666 3294 l
-3632 3239 l
-3596 3185 l
-3559 3132 l
-3519 3080 l
-3478 3031 l
-3434 2982 l
-3389 2936 l
-3342 2891 l
-3294 2848 l
-3244 2807 l
-S
-3244 2807 m
-3192 2767 l
-3139 2730 l
-3085 2694 l
-3029 2661 l
-2972 2630 l
-2914 2601 l
-2855 2574 l
-2795 2549 l
-2734 2527 l
-2673 2507 l
-2610 2489 l
-2547 2473 l
-2484 2460 l
-2420 2450 l
-S
-2420 2450 m
-2355 2441 l
-2291 2436 l
-2226 2432 l
-2161 2431 l
-2096 2432 l
-2032 2436 l
-1967 2443 l
-1903 2451 l
-1839 2462 l
-1775 2476 l
-1713 2492 l
-1650 2510 l
-1589 2530 l
-1528 2553 l
-S
-1528 2553 m
-1468 2578 l
-1409 2605 l
-1351 2635 l
-1295 2666 l
-1239 2700 l
-1185 2735 l
-1132 2773 l
-1081 2813 l
-1031 2854 l
-983 2898 l
-936 2943 l
-892 2990 l
-849 3038 l
-807 3088 l
-S
-807 3088 m
-768 3140 l
-731 3193 l
-695 3247 l
-662 3303 l
-631 3360 l
-602 3418 l
-575 3477 l
-550 3537 l
-533 3583 l
-S
-533 4749 m
-554 4805 l
-S
-554 4805 m
-579 4865 l
-606 4924 l
-636 4982 l
-667 5038 l
-701 5094 l
-736 5148 l
-774 5201 l
-814 5252 l
-855 5302 l
-899 5350 l
-944 5397 l
-991 5442 l
-1039 5485 l
-1089 5526 l
-S
-1089 5526 m
-1141 5566 l
-1194 5603 l
-1248 5638 l
-1304 5672 l
-1361 5703 l
-1419 5732 l
-1478 5759 l
-1538 5784 l
-1599 5806 l
-1660 5826 l
-1723 5844 l
-1786 5859 l
-1849 5872 l
-1913 5883 l
-S
-1913 5883 m
-1977 5891 l
-2042 5897 l
-2107 5901 l
-2172 5902 l
-2237 5900 l
-2301 5896 l
-2366 5890 l
-2430 5881 l
-2494 5870 l
-2557 5857 l
-2620 5841 l
-2683 5823 l
-2744 5803 l
-2805 5780 l
-S
-2805 5780 m
-2865 5755 l
-2924 5728 l
-2981 5698 l
-3038 5667 l
-3094 5633 l
-3148 5597 l
-3200 5560 l
-3252 5520 l
-3302 5478 l
-3350 5435 l
-3396 5390 l
-3441 5343 l
-3484 5294 l
-3526 5244 l
-S
-3526 5244 m
-3565 5193 l
-3602 5140 l
-3638 5085 l
-3671 5030 l
-3702 4973 l
-3731 4915 l
-3758 4856 l
-3783 4796 l
-3805 4735 l
-3825 4673 l
-3843 4611 l
-3858 4548 l
-3871 4484 l
-3882 4420 l
-S
-3882 4420 m
-3890 4356 l
-3896 4291 l
-3900 4226 l
-3901 4161 l
-3899 4096 l
-3895 4032 l
-3889 3967 l
-3881 3903 l
-3869 3839 l
-3856 3775 l
-3840 3712 l
-3822 3650 l
-3802 3588 l
-3800 3584 l
-3799 3580 l
-3797 3575 l
-3795 3571 l
-3794 3567 l
-3792 3562 l
-3791 3558 l
-3789 3554 l
-3787 3549 l
-3786 3545 l
-3784 3541 l
-3782 3536 l
-3781 3532 l
-3780 3532 l
-3780 3531 l
-3780 3531 l
-3780 3531 l
-3780 3530 l
-3780 3530 l
-3780 3530 l
-3780 3530 l
-3779 3529 l
-3779 3529 l
-3779 3529 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-S
-4877 3093 m
-4873 3094 l
-4854 3102 l
-S
-4854 3102 m
-4835 3110 l
-4815 3117 l
-4796 3125 l
-4777 3132 l
-4758 3140 l
-4739 3148 l
-4719 3155 l
-4700 3163 l
-4681 3170 l
-4662 3178 l
-4643 3186 l
-4624 3193 l
-4604 3201 l
-4585 3208 l
-S
-4585 3208 m
-4566 3216 l
-4547 3224 l
-4528 3231 l
-4508 3239 l
-4489 3246 l
-4470 3254 l
-4451 3262 l
-4432 3269 l
-4412 3277 l
-4393 3284 l
-4374 3292 l
-4355 3300 l
-4336 3307 l
-4316 3315 l
-S
-4316 3315 m
-4297 3322 l
-4278 3330 l
-4259 3338 l
-4240 3345 l
-4220 3353 l
-4201 3360 l
-4182 3368 l
-4163 3376 l
-4144 3383 l
-4124 3391 l
-4105 3398 l
-4086 3406 l
-4067 3414 l
-4048 3421 l
-S
-4048 3421 m
-4028 3429 l
-4009 3436 l
-3990 3444 l
-3971 3452 l
-3952 3459 l
-3932 3467 l
-3913 3474 l
-3894 3482 l
-3875 3490 l
-3856 3497 l
-3836 3505 l
-3817 3512 l
-3798 3520 l
-3779 3528 l
-S
-3779 3528 m
-3760 3535 l
-3740 3543 l
-3721 3551 l
-3702 3558 l
-3683 3566 l
-3664 3573 l
-3645 3581 l
-3625 3589 l
-3606 3596 l
-3587 3604 l
-3568 3611 l
-3549 3619 l
-3529 3627 l
-3510 3634 l
-S
-3510 3634 m
-3491 3642 l
-3472 3649 l
-3453 3657 l
-3433 3665 l
-3414 3672 l
-3395 3680 l
-3376 3687 l
-3357 3695 l
-3337 3703 l
-3318 3710 l
-3299 3718 l
-3280 3725 l
-3261 3733 l
-3241 3741 l
-S
-3241 3741 m
-3222 3748 l
-3203 3756 l
-3184 3763 l
-3165 3771 l
-3145 3779 l
-3126 3786 l
-3107 3794 l
-3088 3801 l
-3069 3809 l
-3049 3817 l
-3030 3824 l
-3011 3832 l
-2992 3839 l
-2973 3847 l
-S
-2973 3847 m
-2953 3855 l
-2934 3862 l
-2915 3870 l
-2896 3877 l
-2877 3885 l
-2857 3893 l
-2838 3900 l
-2819 3908 l
-2800 3915 l
-2781 3923 l
-2762 3931 l
-2742 3938 l
-2723 3946 l
-2704 3953 l
-S
-2704 3953 m
-2685 3961 l
-2666 3969 l
-2646 3976 l
-2627 3984 l
-2608 3991 l
-2589 3999 l
-2570 4007 l
-2550 4014 l
-2531 4022 l
-2512 4029 l
-2493 4037 l
-2474 4045 l
-2454 4052 l
-2435 4060 l
-S
-2435 4060 m
-2416 4068 l
-2397 4075 l
-2378 4083 l
-2358 4090 l
-2339 4098 l
-2320 4106 l
-2301 4113 l
-2282 4121 l
-2262 4128 l
-2243 4136 l
-2224 4144 l
-2205 4151 l
-2186 4159 l
-2166 4166 l
-S
-2166 4166 m
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1 g
-3911 3420 m
-3914 3420 l
-3914 3421 l
-3911 3421 l
-3908 3421 m
-3914 3421 l
-3914 3422 l
-3908 3422 l
-3906 3422 m
-3915 3422 l
-3915 3423 l
-3906 3423 l
-3903 3423 m
-3915 3423 l
-3915 3424 l
-3903 3424 l
-3901 3424 m
-3916 3424 l
-3916 3425 l
-3901 3425 l
-3898 3425 m
-3916 3425 l
-3916 3426 l
-3898 3426 l
-3896 3426 m
-3916 3426 l
-3916 3427 l
-3896 3427 l
-3893 3427 m
-3917 3427 l
-3917 3428 l
-3893 3428 l
-3891 3428 m
-3917 3428 l
-3917 3429 l
-3891 3429 l
-3888 3429 m
-3918 3429 l
-3918 3430 l
-3888 3430 l
-3886 3430 m
-3918 3430 l
-3918 3431 l
-3886 3431 l
-3883 3431 m
-3918 3431 l
-3918 3432 l
-3883 3432 l
-3881 3432 m
-3919 3432 l
-3919 3433 l
-3881 3433 l
-3878 3433 m
-3919 3433 l
-3919 3434 l
-3878 3434 l
-3876 3434 m
-3920 3434 l
-3920 3435 l
-3876 3435 l
-3873 3435 m
-3920 3435 l
-3920 3436 l
-3873 3436 l
-3871 3436 m
-3920 3436 l
-3920 3437 l
-3871 3437 l
-3868 3437 m
-3921 3437 l
-3921 3438 l
-3868 3438 l
-3866 3438 m
-3921 3438 l
-3921 3439 l
-3866 3439 l
-3863 3439 m
-3922 3439 l
-3922 3440 l
-3863 3440 l
-3861 3440 m
-3922 3440 l
-3922 3441 l
-3861 3441 l
-3858 3441 m
-3922 3441 l
-3922 3442 l
-3858 3442 l
-3856 3442 m
-3923 3442 l
-3923 3443 l
-3856 3443 l
-3853 3443 m
-3923 3443 l
-3923 3444 l
-3853 3444 l
-3851 3444 m
-3924 3444 l
-3924 3445 l
-3851 3445 l
-3848 3445 m
-3924 3445 l
-3924 3446 l
-3848 3446 l
-3846 3446 m
-3924 3446 l
-3924 3447 l
-3846 3447 l
-3843 3447 m
-3925 3447 l
-3925 3448 l
-3843 3448 l
-3841 3448 m
-3925 3448 l
-3925 3449 l
-3841 3449 l
-3838 3449 m
-3926 3449 l
-3926 3450 l
-3838 3450 l
-3836 3450 m
-3926 3450 l
-3926 3451 l
-3836 3451 l
-3833 3451 m
-3926 3451 l
-3926 3452 l
-3833 3452 l
-3831 3452 m
-3927 3452 l
-3927 3453 l
-3831 3453 l
-3828 3453 m
-3927 3453 l
-3927 3454 l
-3828 3454 l
-3826 3454 m
-3927 3454 l
-3927 3455 l
-3826 3455 l
-3823 3455 m
-3928 3455 l
-3928 3456 l
-3823 3456 l
-3821 3456 m
-3928 3456 l
-3928 3457 l
-3821 3457 l
-3818 3457 m
-3929 3457 l
-3929 3458 l
-3818 3458 l
-3816 3458 m
-3929 3458 l
-3929 3459 l
-3816 3459 l
-3813 3459 m
-3929 3459 l
-3929 3460 l
-3813 3460 l
-3811 3460 m
-3930 3460 l
-3930 3461 l
-3811 3461 l
-3808 3461 m
-3930 3461 l
-3930 3462 l
-3808 3462 l
-3806 3462 m
-3931 3462 l
-3931 3463 l
-3806 3463 l
-3803 3463 m
-3931 3463 l
-3931 3464 l
-3803 3464 l
-3801 3464 m
-3931 3464 l
-3931 3465 l
-3801 3465 l
-3801 3465 m
-3932 3465 l
-3932 3467 l
-3801 3467 l
-3801 3467 m
-3933 3467 l
-3933 3468 l
-3801 3468 l
-3802 3468 m
-3933 3468 l
-3933 3470 l
-3802 3470 l
-3802 3470 m
-3934 3470 l
-3934 3471 l
-3802 3471 l
-3803 3471 m
-3934 3471 l
-3934 3472 l
-3803 3472 l
-3803 3472 m
-3935 3472 l
-3935 3473 l
-3803 3473 l
-3804 3473 m
-3935 3473 l
-3935 3475 l
-3804 3475 l
-3804 3475 m
-3936 3475 l
-3936 3476 l
-3804 3476 l
-3805 3476 m
-3936 3476 l
-3936 3477 l
-3805 3477 l
-3805 3477 m
-3937 3477 l
-3937 3478 l
-3805 3478 l
-3806 3478 m
-3937 3478 l
-3937 3480 l
-3806 3480 l
-3806 3480 m
-3938 3480 l
-3938 3481 l
-3806 3481 l
-3807 3481 m
-3938 3481 l
-3938 3482 l
-3807 3482 l
-3807 3482 m
-3939 3482 l
-3939 3483 l
-3807 3483 l
-3808 3483 m
-3939 3483 l
-3939 3485 l
-3808 3485 l
-3808 3485 m
-3940 3485 l
-3940 3486 l
-3808 3486 l
-3809 3486 m
-3940 3486 l
-3940 3487 l
-3809 3487 l
-3809 3487 m
-3941 3487 l
-3941 3488 l
-3809 3488 l
-3810 3488 m
-3941 3488 l
-3941 3490 l
-3810 3490 l
-3810 3490 m
-3942 3490 l
-3942 3491 l
-3810 3491 l
-3811 3491 m
-3942 3491 l
-3942 3492 l
-3811 3492 l
-3811 3492 m
-3943 3492 l
-3943 3493 l
-3811 3493 l
-3812 3493 m
-3943 3493 l
-3943 3495 l
-3812 3495 l
-3812 3495 m
-3944 3495 l
-3944 3496 l
-3812 3496 l
-3813 3496 m
-3944 3496 l
-3944 3497 l
-3813 3497 l
-3813 3497 m
-3945 3497 l
-3945 3498 l
-3813 3498 l
-3814 3498 m
-3945 3498 l
-3945 3500 l
-3814 3500 l
-3814 3500 m
-3946 3500 l
-3946 3501 l
-3814 3501 l
-3815 3501 m
-3946 3501 l
-3946 3502 l
-3815 3502 l
-3815 3502 m
-3947 3502 l
-3947 3503 l
-3815 3503 l
-3816 3503 m
-3947 3503 l
-3947 3505 l
-3816 3505 l
-3816 3505 m
-3948 3505 l
-3948 3506 l
-3816 3506 l
-3817 3506 m
-3948 3506 l
-3948 3507 l
-3817 3507 l
-3817 3507 m
-3949 3507 l
-3949 3508 l
-3817 3508 l
-3818 3508 m
-3949 3508 l
-3949 3510 l
-3818 3510 l
-3818 3510 m
-3950 3510 l
-3950 3511 l
-3818 3511 l
-3819 3511 m
-3950 3511 l
-3950 3512 l
-3819 3512 l
-3819 3512 m
-3950 3512 l
-3950 3513 l
-3819 3513 l
-3820 3513 m
-3950 3513 l
-3950 3514 l
-3820 3514 l
-3820 3514 m
-3948 3514 l
-3948 3515 l
-3820 3515 l
-3820 3515 m
-3946 3515 l
-3946 3516 l
-3820 3516 l
-3821 3516 m
-3943 3516 l
-3943 3517 l
-3821 3517 l
-3821 3517 m
-3941 3517 l
-3941 3518 l
-3821 3518 l
-3822 3518 m
-3938 3518 l
-3938 3519 l
-3822 3519 l
-3822 3519 m
-3936 3519 l
-3936 3520 l
-3822 3520 l
-3822 3520 m
-3933 3520 l
-3933 3521 l
-3822 3521 l
-3823 3521 m
-3931 3521 l
-3931 3522 l
-3823 3522 l
-3823 3522 m
-3928 3522 l
-3928 3523 l
-3823 3523 l
-3824 3523 m
-3926 3523 l
-3926 3524 l
-3824 3524 l
-3824 3524 m
-3923 3524 l
-3923 3525 l
-3824 3525 l
-3824 3525 m
-3921 3525 l
-3921 3526 l
-3824 3526 l
-3825 3526 m
-3918 3526 l
-3918 3527 l
-3825 3527 l
-3825 3527 m
-3916 3527 l
-3916 3528 l
-3825 3528 l
-3826 3528 m
-3913 3528 l
-3913 3529 l
-3826 3529 l
-3826 3529 m
-3911 3529 l
-3911 3530 l
-3826 3530 l
-3826 3530 m
-3908 3530 l
-3908 3531 l
-3826 3531 l
-3827 3531 m
-3906 3531 l
-3906 3532 l
-3827 3532 l
-3827 3532 m
-3903 3532 l
-3903 3533 l
-3827 3533 l
-3828 3533 m
-3901 3533 l
-3901 3534 l
-3828 3534 l
-3828 3534 m
-3898 3534 l
-3898 3535 l
-3828 3535 l
-3828 3535 m
-3896 3535 l
-3896 3536 l
-3828 3536 l
-3829 3536 m
-3893 3536 l
-3893 3537 l
-3829 3537 l
-3829 3537 m
-3891 3537 l
-3891 3538 l
-3829 3538 l
-3830 3538 m
-3888 3538 l
-3888 3539 l
-3830 3539 l
-3830 3539 m
-3886 3539 l
-3886 3540 l
-3830 3540 l
-3830 3540 m
-3883 3540 l
-3883 3541 l
-3830 3541 l
-3831 3541 m
-3881 3541 l
-3881 3542 l
-3831 3542 l
-3831 3542 m
-3878 3542 l
-3878 3543 l
-3831 3543 l
-3832 3543 m
-3876 3543 l
-3876 3544 l
-3832 3544 l
-3832 3544 m
-3873 3544 l
-3873 3545 l
-3832 3545 l
-3832 3545 m
-3871 3545 l
-3871 3546 l
-3832 3546 l
-3833 3546 m
-3868 3546 l
-3868 3547 l
-3833 3547 l
-3833 3547 m
-3866 3547 l
-3866 3548 l
-3833 3548 l
-3834 3548 m
-3863 3548 l
-3863 3549 l
-3834 3549 l
-3834 3549 m
-3861 3549 l
-3861 3550 l
-3834 3550 l
-3834 3550 m
-3858 3550 l
-3858 3551 l
-3834 3551 l
-3835 3551 m
-3856 3551 l
-3856 3552 l
-3835 3552 l
-3835 3552 m
-3853 3552 l
-3853 3553 l
-3835 3553 l
-3836 3553 m
-3851 3553 l
-3851 3554 l
-3836 3554 l
-3836 3554 m
-3848 3554 l
-3848 3555 l
-3836 3555 l
-3836 3555 m
-3846 3555 l
-3846 3556 l
-3836 3556 l
-3837 3556 m
-3843 3556 l
-3843 3557 l
-3837 3557 l
-3837 3557 m
-3841 3557 l
-3841 3558 l
-3837 3558 l
-Y
-3913.2 3420.2 m
-3801 3465 l
-3838 3558 l
-3950 3513 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3833 3502 m
-3832 3488 l
-3841 3476 l
-3859 3464 l
-3870 3460 l
-3891 3456 l
-3906 3459 l
-3915 3469 l
-3918 3477 l
-3919 3490 l
-3910 3502 l
-3892 3514 l
-3880 3519 l
-3860 3523 l
-3845 3519 l
-3836 3509 l
-3833 3502 l
-S
-1 g
-3305 2646 m
-3308 2646 l
-3308 2647 l
-3305 2647 l
-3304 2647 m
-3309 2647 l
-3309 2648 l
-3304 2648 l
-3304 2648 m
-3310 2648 l
-3310 2649 l
-3304 2649 l
-3303 2649 m
-3311 2649 l
-3311 2650 l
-3303 2650 l
-3302 2650 m
-3313 2650 l
-3313 2651 l
-3302 2651 l
-3301 2651 m
-3314 2651 l
-3314 2652 l
-3301 2652 l
-3300 2652 m
-3315 2652 l
-3315 2653 l
-3300 2653 l
-3300 2653 m
-3317 2653 l
-3317 2654 l
-3300 2654 l
-3299 2654 m
-3318 2654 l
-3318 2655 l
-3299 2655 l
-3298 2655 m
-3319 2655 l
-3319 2656 l
-3298 2656 l
-3297 2656 m
-3320 2656 l
-3320 2657 l
-3297 2657 l
-3296 2657 m
-3322 2657 l
-3322 2658 l
-3296 2658 l
-3296 2658 m
-3323 2658 l
-3323 2659 l
-3296 2659 l
-3295 2659 m
-3324 2659 l
-3324 2660 l
-3295 2660 l
-3294 2660 m
-3325 2660 l
-3325 2661 l
-3294 2661 l
-3293 2661 m
-3327 2661 l
-3327 2662 l
-3293 2662 l
-3292 2662 m
-3328 2662 l
-3328 2663 l
-3292 2663 l
-3292 2663 m
-3329 2663 l
-3329 2664 l
-3292 2664 l
-3291 2664 m
-3331 2664 l
-3331 2665 l
-3291 2665 l
-3290 2665 m
-3332 2665 l
-3332 2666 l
-3290 2666 l
-3289 2666 m
-3333 2666 l
-3333 2667 l
-3289 2667 l
-3288 2667 m
-3334 2667 l
-3334 2668 l
-3288 2668 l
-3288 2668 m
-3336 2668 l
-3336 2669 l
-3288 2669 l
-3287 2669 m
-3337 2669 l
-3337 2670 l
-3287 2670 l
-3286 2670 m
-3338 2670 l
-3338 2671 l
-3286 2671 l
-3285 2671 m
-3340 2671 l
-3340 2672 l
-3285 2672 l
-3284 2672 m
-3341 2672 l
-3341 2673 l
-3284 2673 l
-3284 2673 m
-3342 2673 l
-3342 2674 l
-3284 2674 l
-3283 2674 m
-3343 2674 l
-3343 2675 l
-3283 2675 l
-3282 2675 m
-3345 2675 l
-3345 2676 l
-3282 2676 l
-3281 2676 m
-3346 2676 l
-3346 2677 l
-3281 2677 l
-3281 2677 m
-3347 2677 l
-3347 2678 l
-3281 2678 l
-3280 2678 m
-3348 2678 l
-3348 2679 l
-3280 2679 l
-3279 2679 m
-3350 2679 l
-3350 2680 l
-3279 2680 l
-3278 2680 m
-3351 2680 l
-3351 2681 l
-3278 2681 l
-3277 2681 m
-3352 2681 l
-3352 2682 l
-3277 2682 l
-3277 2682 m
-3354 2682 l
-3354 2683 l
-3277 2683 l
-3276 2683 m
-3355 2683 l
-3355 2684 l
-3276 2684 l
-3275 2684 m
-3356 2684 l
-3356 2685 l
-3275 2685 l
-3274 2685 m
-3357 2685 l
-3357 2686 l
-3274 2686 l
-3273 2686 m
-3359 2686 l
-3359 2687 l
-3273 2687 l
-3273 2687 m
-3360 2687 l
-3360 2688 l
-3273 2688 l
-3272 2688 m
-3361 2688 l
-3361 2689 l
-3272 2689 l
-3271 2689 m
-3363 2689 l
-3363 2690 l
-3271 2690 l
-3270 2690 m
-3364 2690 l
-3364 2691 l
-3270 2691 l
-3269 2691 m
-3365 2691 l
-3365 2692 l
-3269 2692 l
-3269 2692 m
-3366 2692 l
-3366 2693 l
-3269 2693 l
-3268 2693 m
-3368 2693 l
-3368 2694 l
-3268 2694 l
-3267 2694 m
-3369 2694 l
-3369 2695 l
-3267 2695 l
-3266 2695 m
-3370 2695 l
-3370 2696 l
-3266 2696 l
-3265 2696 m
-3371 2696 l
-3371 2697 l
-3265 2697 l
-3265 2697 m
-3373 2697 l
-3373 2698 l
-3265 2698 l
-3264 2698 m
-3374 2698 l
-3374 2699 l
-3264 2699 l
-3263 2699 m
-3375 2699 l
-3375 2700 l
-3263 2700 l
-3262 2700 m
-3377 2700 l
-3377 2701 l
-3262 2701 l
-3261 2701 m
-3378 2701 l
-3378 2702 l
-3261 2702 l
-3261 2702 m
-3379 2702 l
-3379 2703 l
-3261 2703 l
-3260 2703 m
-3380 2703 l
-3380 2704 l
-3260 2704 l
-3259 2704 m
-3382 2704 l
-3382 2705 l
-3259 2705 l
-3258 2705 m
-3383 2705 l
-3383 2706 l
-3258 2706 l
-3257 2706 m
-3384 2706 l
-3384 2707 l
-3257 2707 l
-3257 2707 m
-3385 2707 l
-3385 2708 l
-3257 2708 l
-3256 2708 m
-3385 2708 l
-3385 2709 l
-3256 2709 l
-3255 2709 m
-3385 2709 l
-3385 2710 l
-3255 2710 l
-3254 2710 m
-3384 2710 l
-3384 2711 l
-3254 2711 l
-3254 2711 m
-3383 2711 l
-3383 2712 l
-3254 2712 l
-3253 2712 m
-3382 2712 l
-3382 2713 l
-3253 2713 l
-3252 2713 m
-3382 2713 l
-3382 2714 l
-3252 2714 l
-3251 2714 m
-3381 2714 l
-3381 2715 l
-3251 2715 l
-3250 2715 m
-3380 2715 l
-3380 2716 l
-3250 2716 l
-3250 2716 m
-3379 2716 l
-3379 2717 l
-3250 2717 l
-3249 2717 m
-3378 2717 l
-3378 2718 l
-3249 2718 l
-3248 2718 m
-3378 2718 l
-3378 2719 l
-3248 2719 l
-3247 2719 m
-3377 2719 l
-3377 2720 l
-3247 2720 l
-3246 2720 m
-3376 2720 l
-3376 2721 l
-3246 2721 l
-3246 2721 m
-3375 2721 l
-3375 2722 l
-3246 2722 l
-3245 2722 m
-3374 2722 l
-3374 2723 l
-3245 2723 l
-3244 2723 m
-3374 2723 l
-3374 2724 l
-3244 2724 l
-3243 2724 m
-3373 2724 l
-3373 2725 l
-3243 2725 l
-3242 2725 m
-3372 2725 l
-3372 2726 l
-3242 2726 l
-3242 2726 m
-3371 2726 l
-3371 2727 l
-3242 2727 l
-3241 2727 m
-3370 2727 l
-3370 2728 l
-3241 2728 l
-3240 2728 m
-3370 2728 l
-3370 2729 l
-3240 2729 l
-3239 2729 m
-3369 2729 l
-3369 2730 l
-3239 2730 l
-3238 2730 m
-3368 2730 l
-3368 2731 l
-3238 2731 l
-3238 2731 m
-3367 2731 l
-3367 2732 l
-3238 2732 l
-3237 2732 m
-3367 2732 l
-3367 2733 l
-3237 2733 l
-3236 2733 m
-3366 2733 l
-3366 2734 l
-3236 2734 l
-3235 2734 m
-3365 2734 l
-3365 2735 l
-3235 2735 l
-3234 2735 m
-3364 2735 l
-3364 2736 l
-3234 2736 l
-3234 2736 m
-3363 2736 l
-3363 2737 l
-3234 2737 l
-3233 2737 m
-3363 2737 l
-3363 2738 l
-3233 2738 l
-3232 2738 m
-3362 2738 l
-3362 2739 l
-3232 2739 l
-3231 2739 m
-3361 2739 l
-3361 2740 l
-3231 2740 l
-3231 2740 m
-3360 2740 l
-3360 2741 l
-3231 2741 l
-3231 2741 m
-3359 2741 l
-3359 2742 l
-3231 2742 l
-3232 2742 m
-3359 2742 l
-3359 2743 l
-3232 2743 l
-3233 2743 m
-3358 2743 l
-3358 2744 l
-3233 2744 l
-3234 2744 m
-3357 2744 l
-3357 2745 l
-3234 2745 l
-3236 2745 m
-3356 2745 l
-3356 2746 l
-3236 2746 l
-3237 2746 m
-3355 2746 l
-3355 2747 l
-3237 2747 l
-3238 2747 m
-3355 2747 l
-3355 2748 l
-3238 2748 l
-3239 2748 m
-3354 2748 l
-3354 2749 l
-3239 2749 l
-3241 2749 m
-3353 2749 l
-3353 2750 l
-3241 2750 l
-3242 2750 m
-3352 2750 l
-3352 2751 l
-3242 2751 l
-3243 2751 m
-3352 2751 l
-3352 2752 l
-3243 2752 l
-3245 2752 m
-3351 2752 l
-3351 2753 l
-3245 2753 l
-3246 2753 m
-3350 2753 l
-3350 2754 l
-3246 2754 l
-3247 2754 m
-3349 2754 l
-3349 2755 l
-3247 2755 l
-3248 2755 m
-3348 2755 l
-3348 2756 l
-3248 2756 l
-3250 2756 m
-3348 2756 l
-3348 2757 l
-3250 2757 l
-3251 2757 m
-3347 2757 l
-3347 2758 l
-3251 2758 l
-3252 2758 m
-3346 2758 l
-3346 2759 l
-3252 2759 l
-3253 2759 m
-3345 2759 l
-3345 2760 l
-3253 2760 l
-3255 2760 m
-3344 2760 l
-3344 2761 l
-3255 2761 l
-3256 2761 m
-3344 2761 l
-3344 2762 l
-3256 2762 l
-3257 2762 m
-3343 2762 l
-3343 2763 l
-3257 2763 l
-3259 2763 m
-3342 2763 l
-3342 2764 l
-3259 2764 l
-3260 2764 m
-3341 2764 l
-3341 2765 l
-3260 2765 l
-3261 2765 m
-3340 2765 l
-3340 2766 l
-3261 2766 l
-3262 2766 m
-3340 2766 l
-3340 2767 l
-3262 2767 l
-3264 2767 m
-3339 2767 l
-3339 2768 l
-3264 2768 l
-3265 2768 m
-3338 2768 l
-3338 2769 l
-3265 2769 l
-3266 2769 m
-3337 2769 l
-3337 2770 l
-3266 2770 l
-3267 2770 m
-3337 2770 l
-3337 2771 l
-3267 2771 l
-3269 2771 m
-3336 2771 l
-3336 2772 l
-3269 2772 l
-3270 2772 m
-3335 2772 l
-3335 2773 l
-3270 2773 l
-3271 2773 m
-3334 2773 l
-3334 2774 l
-3271 2774 l
-3273 2774 m
-3333 2774 l
-3333 2775 l
-3273 2775 l
-3274 2775 m
-3333 2775 l
-3333 2776 l
-3274 2776 l
-3275 2776 m
-3332 2776 l
-3332 2777 l
-3275 2777 l
-3276 2777 m
-3331 2777 l
-3331 2778 l
-3276 2778 l
-3278 2778 m
-3330 2778 l
-3330 2779 l
-3278 2779 l
-3279 2779 m
-3329 2779 l
-3329 2780 l
-3279 2780 l
-3280 2780 m
-3329 2780 l
-3329 2781 l
-3280 2781 l
-3281 2781 m
-3328 2781 l
-3328 2782 l
-3281 2782 l
-3283 2782 m
-3327 2782 l
-3327 2783 l
-3283 2783 l
-3284 2783 m
-3326 2783 l
-3326 2784 l
-3284 2784 l
-3285 2784 m
-3325 2784 l
-3325 2785 l
-3285 2785 l
-3287 2785 m
-3325 2785 l
-3325 2786 l
-3287 2786 l
-3288 2786 m
-3324 2786 l
-3324 2787 l
-3288 2787 l
-3289 2787 m
-3323 2787 l
-3323 2788 l
-3289 2788 l
-3290 2788 m
-3322 2788 l
-3322 2789 l
-3290 2789 l
-3292 2789 m
-3322 2789 l
-3322 2790 l
-3292 2790 l
-3293 2790 m
-3321 2790 l
-3321 2791 l
-3293 2791 l
-3294 2791 m
-3320 2791 l
-3320 2792 l
-3294 2792 l
-3295 2792 m
-3319 2792 l
-3319 2793 l
-3295 2793 l
-3297 2793 m
-3318 2793 l
-3318 2794 l
-3297 2794 l
-3298 2794 m
-3318 2794 l
-3318 2795 l
-3298 2795 l
-3299 2795 m
-3317 2795 l
-3317 2796 l
-3299 2796 l
-3301 2796 m
-3316 2796 l
-3316 2797 l
-3301 2797 l
-3302 2797 m
-3315 2797 l
-3315 2798 l
-3302 2798 l
-3303 2798 m
-3314 2798 l
-3314 2799 l
-3303 2799 l
-3304 2799 m
-3314 2799 l
-3314 2800 l
-3304 2800 l
-3306 2800 m
-3313 2800 l
-3313 2801 l
-3306 2801 l
-3307 2801 m
-3312 2801 l
-3312 2802 l
-3307 2802 l
-3308 2802 m
-3311 2802 l
-3311 2803 l
-3308 2803 l
-Y
-3306.2 2646.3 m
-3231 2741 l
-3310 2803 l
-3385 2708 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3274 2727 m
-3272 2731 l
-3270 2740 l
-3270 2746 l
-3274 2754 l
-3287 2764 l
-3297 2766 l
-3302 2766 l
-3311 2762 l
-3316 2755 l
-3318 2746 l
-3319 2731 l
-3312 2672 l
-3358 2709 l
-S
-1 g
-2393 2280 m
-2403 2280 l
-2403 2281 l
-2393 2281 l
-2393 2281 m
-2410 2281 l
-2410 2282 l
-2393 2282 l
-2393 2282 m
-2417 2282 l
-2417 2283 l
-2393 2283 l
-2393 2283 m
-2423 2283 l
-2423 2284 l
-2393 2284 l
-2393 2284 m
-2430 2284 l
-2430 2285 l
-2393 2285 l
-2392 2285 m
-2437 2285 l
-2437 2286 l
-2392 2286 l
-2392 2286 m
-2444 2286 l
-2444 2287 l
-2392 2287 l
-2392 2287 m
-2450 2287 l
-2450 2288 l
-2392 2288 l
-2392 2288 m
-2457 2288 l
-2457 2289 l
-2392 2289 l
-2392 2289 m
-2464 2289 l
-2464 2290 l
-2392 2290 l
-2392 2290 m
-2471 2290 l
-2471 2291 l
-2392 2291 l
-2391 2291 m
-2477 2291 l
-2477 2292 l
-2391 2292 l
-2391 2292 m
-2484 2292 l
-2484 2293 l
-2391 2293 l
-2391 2293 m
-2491 2293 l
-2491 2294 l
-2391 2294 l
-2391 2294 m
-2497 2294 l
-2497 2295 l
-2391 2295 l
-2391 2295 m
-2498 2295 l
-2498 2296 l
-2391 2296 l
-2391 2296 m
-2497 2296 l
-2497 2298 l
-2391 2298 l
-2390 2298 m
-2497 2298 l
-2497 2303 l
-2390 2303 l
-2390 2303 m
-2496 2303 l
-2496 2305 l
-2390 2305 l
-2389 2305 m
-2496 2305 l
-2496 2310 l
-2389 2310 l
-2389 2310 m
-2495 2310 l
-2495 2312 l
-2389 2312 l
-2388 2312 m
-2495 2312 l
-2495 2317 l
-2388 2317 l
-2388 2317 m
-2494 2317 l
-2494 2318 l
-2388 2318 l
-2387 2318 m
-2494 2318 l
-2494 2324 l
-2387 2324 l
-2387 2324 m
-2493 2324 l
-2493 2325 l
-2387 2325 l
-2386 2325 m
-2493 2325 l
-2493 2331 l
-2386 2331 l
-2386 2331 m
-2492 2331 l
-2492 2332 l
-2386 2332 l
-2385 2332 m
-2492 2332 l
-2492 2338 l
-2385 2338 l
-2385 2338 m
-2491 2338 l
-2491 2339 l
-2385 2339 l
-2384 2339 m
-2491 2339 l
-2491 2345 l
-2384 2345 l
-2383 2345 m
-2490 2345 l
-2490 2352 l
-2383 2352 l
-2382 2352 m
-2489 2352 l
-2489 2359 l
-2382 2359 l
-2381 2359 m
-2488 2359 l
-2488 2366 l
-2381 2366 l
-2380 2366 m
-2487 2366 l
-2487 2372 l
-2380 2372 l
-2379 2372 m
-2487 2372 l
-2487 2373 l
-2379 2373 l
-2379 2373 m
-2486 2373 l
-2486 2379 l
-2379 2379 l
-2378 2379 m
-2486 2379 l
-2486 2380 l
-2378 2380 l
-2378 2380 m
-2485 2380 l
-2485 2386 l
-2378 2386 l
-2377 2386 m
-2485 2386 l
-2485 2387 l
-2377 2387 l
-2377 2387 m
-2484 2387 l
-2484 2393 l
-2377 2393 l
-2376 2393 m
-2484 2393 l
-2484 2394 l
-2376 2394 l
-2376 2394 m
-2483 2394 l
-2483 2400 l
-2376 2400 l
-2376 2400 m
-2483 2400 l
-2483 2401 l
-2376 2401 l
-2382 2401 m
-2482 2401 l
-2482 2402 l
-2382 2402 l
-2389 2402 m
-2482 2402 l
-2482 2403 l
-2389 2403 l
-2396 2403 m
-2482 2403 l
-2482 2404 l
-2396 2404 l
-2403 2404 m
-2482 2404 l
-2482 2405 l
-2403 2405 l
-2410 2405 m
-2482 2405 l
-2482 2406 l
-2410 2406 l
-2417 2406 m
-2482 2406 l
-2482 2407 l
-2417 2407 l
-2424 2407 m
-2482 2407 l
-2482 2408 l
-2424 2408 l
-2431 2408 m
-2481 2408 l
-2481 2409 l
-2431 2409 l
-2438 2409 m
-2481 2409 l
-2481 2410 l
-2438 2410 l
-2445 2410 m
-2481 2410 l
-2481 2411 l
-2445 2411 l
-2452 2411 m
-2481 2411 l
-2481 2412 l
-2452 2412 l
-2459 2412 m
-2481 2412 l
-2481 2413 l
-2459 2413 l
-2466 2413 m
-2481 2413 l
-2481 2414 l
-2466 2414 l
-2473 2414 m
-2481 2414 l
-2481 2415 l
-2473 2415 l
-Y
-2393.8 2279.7 m
-2376 2400 l
-2480 2415 l
-2497 2295 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2441 2392 m
-2408 2328 l
-2470 2337 l
-S
-2441 2392 m
-2453 2305 l
-S
-1 g
-1513 2399 m
-1517 2399 l
-1517 2400 l
-1513 2400 l
-1510 2400 m
-1517 2400 l
-1517 2401 l
-1510 2401 l
-1508 2401 m
-1518 2401 l
-1518 2402 l
-1508 2402 l
-1505 2402 m
-1518 2402 l
-1518 2403 l
-1505 2403 l
-1503 2403 m
-1518 2403 l
-1518 2404 l
-1503 2404 l
-1500 2404 m
-1519 2404 l
-1519 2405 l
-1500 2405 l
-1498 2405 m
-1519 2405 l
-1519 2406 l
-1498 2406 l
-1495 2406 m
-1520 2406 l
-1520 2407 l
-1495 2407 l
-1493 2407 m
-1520 2407 l
-1520 2408 l
-1493 2408 l
-1490 2408 m
-1520 2408 l
-1520 2409 l
-1490 2409 l
-1488 2409 m
-1521 2409 l
-1521 2410 l
-1488 2410 l
-1485 2410 m
-1521 2410 l
-1521 2411 l
-1485 2411 l
-1482 2411 m
-1522 2411 l
-1522 2412 l
-1482 2412 l
-1480 2412 m
-1522 2412 l
-1522 2413 l
-1480 2413 l
-1477 2413 m
-1522 2413 l
-1522 2414 l
-1477 2414 l
-1475 2414 m
-1523 2414 l
-1523 2415 l
-1475 2415 l
-1472 2415 m
-1523 2415 l
-1523 2416 l
-1472 2416 l
-1470 2416 m
-1524 2416 l
-1524 2417 l
-1470 2417 l
-1467 2417 m
-1524 2417 l
-1524 2418 l
-1467 2418 l
-1465 2418 m
-1524 2418 l
-1524 2419 l
-1465 2419 l
-1462 2419 m
-1525 2419 l
-1525 2420 l
-1462 2420 l
-1460 2420 m
-1525 2420 l
-1525 2421 l
-1460 2421 l
-1457 2421 m
-1526 2421 l
-1526 2422 l
-1457 2422 l
-1454 2422 m
-1526 2422 l
-1526 2423 l
-1454 2423 l
-1452 2423 m
-1526 2423 l
-1526 2424 l
-1452 2424 l
-1449 2424 m
-1527 2424 l
-1527 2425 l
-1449 2425 l
-1447 2425 m
-1527 2425 l
-1527 2426 l
-1447 2426 l
-1444 2426 m
-1528 2426 l
-1528 2427 l
-1444 2427 l
-1442 2427 m
-1528 2427 l
-1528 2428 l
-1442 2428 l
-1439 2428 m
-1528 2428 l
-1528 2429 l
-1439 2429 l
-1437 2429 m
-1529 2429 l
-1529 2430 l
-1437 2430 l
-1434 2430 m
-1529 2430 l
-1529 2431 l
-1434 2431 l
-1432 2431 m
-1530 2431 l
-1530 2432 l
-1432 2432 l
-1429 2432 m
-1530 2432 l
-1530 2433 l
-1429 2433 l
-1427 2433 m
-1530 2433 l
-1530 2434 l
-1427 2434 l
-1427 2434 m
-1531 2434 l
-1531 2436 l
-1427 2436 l
-1427 2436 m
-1532 2436 l
-1532 2437 l
-1427 2437 l
-1428 2437 m
-1532 2437 l
-1532 2439 l
-1428 2439 l
-1428 2439 m
-1533 2439 l
-1533 2440 l
-1428 2440 l
-1429 2440 m
-1533 2440 l
-1533 2441 l
-1429 2441 l
-1429 2441 m
-1534 2441 l
-1534 2442 l
-1429 2442 l
-1430 2442 m
-1534 2442 l
-1534 2444 l
-1430 2444 l
-1430 2444 m
-1535 2444 l
-1535 2445 l
-1430 2445 l
-1431 2445 m
-1535 2445 l
-1535 2446 l
-1431 2446 l
-1431 2446 m
-1536 2446 l
-1536 2447 l
-1431 2447 l
-1432 2447 m
-1536 2447 l
-1536 2449 l
-1432 2449 l
-1432 2449 m
-1537 2449 l
-1537 2450 l
-1432 2450 l
-1433 2450 m
-1537 2450 l
-1537 2451 l
-1433 2451 l
-1433 2451 m
-1538 2451 l
-1538 2452 l
-1433 2452 l
-1434 2452 m
-1538 2452 l
-1538 2454 l
-1434 2454 l
-1434 2454 m
-1539 2454 l
-1539 2455 l
-1434 2455 l
-1435 2455 m
-1539 2455 l
-1539 2456 l
-1435 2456 l
-1435 2456 m
-1540 2456 l
-1540 2457 l
-1435 2457 l
-1436 2457 m
-1540 2457 l
-1540 2459 l
-1436 2459 l
-1436 2459 m
-1541 2459 l
-1541 2460 l
-1436 2460 l
-1437 2460 m
-1541 2460 l
-1541 2461 l
-1437 2461 l
-1437 2461 m
-1542 2461 l
-1542 2462 l
-1437 2462 l
-1438 2462 m
-1542 2462 l
-1542 2464 l
-1438 2464 l
-1438 2464 m
-1543 2464 l
-1543 2465 l
-1438 2465 l
-1439 2465 m
-1543 2465 l
-1543 2466 l
-1439 2466 l
-1439 2466 m
-1544 2466 l
-1544 2467 l
-1439 2467 l
-1440 2467 m
-1544 2467 l
-1544 2469 l
-1440 2469 l
-1440 2469 m
-1545 2469 l
-1545 2470 l
-1440 2470 l
-1441 2470 m
-1545 2470 l
-1545 2471 l
-1441 2471 l
-1441 2471 m
-1546 2471 l
-1546 2472 l
-1441 2472 l
-1442 2472 m
-1546 2472 l
-1546 2474 l
-1442 2474 l
-1442 2474 m
-1547 2474 l
-1547 2475 l
-1442 2475 l
-1443 2475 m
-1547 2475 l
-1547 2476 l
-1443 2476 l
-1443 2476 m
-1548 2476 l
-1548 2477 l
-1443 2477 l
-1444 2477 m
-1548 2477 l
-1548 2479 l
-1444 2479 l
-1444 2479 m
-1549 2479 l
-1549 2480 l
-1444 2480 l
-1445 2480 m
-1549 2480 l
-1549 2481 l
-1445 2481 l
-1445 2481 m
-1550 2481 l
-1550 2482 l
-1445 2482 l
-1446 2482 m
-1550 2482 l
-1550 2484 l
-1446 2484 l
-1446 2484 m
-1551 2484 l
-1551 2485 l
-1446 2485 l
-1447 2485 m
-1551 2485 l
-1551 2486 l
-1447 2486 l
-1447 2486 m
-1552 2486 l
-1552 2487 l
-1447 2487 l
-1448 2487 m
-1552 2487 l
-1552 2489 l
-1448 2489 l
-1448 2489 m
-1553 2489 l
-1553 2490 l
-1448 2490 l
-1449 2490 m
-1553 2490 l
-1553 2491 l
-1449 2491 l
-1449 2491 m
-1554 2491 l
-1554 2492 l
-1449 2492 l
-1450 2492 m
-1554 2492 l
-1554 2494 l
-1450 2494 l
-1450 2494 m
-1555 2494 l
-1555 2495 l
-1450 2495 l
-1451 2495 m
-1555 2495 l
-1555 2496 l
-1451 2496 l
-1451 2496 m
-1556 2496 l
-1556 2497 l
-1451 2497 l
-1452 2497 m
-1556 2497 l
-1556 2499 l
-1452 2499 l
-1452 2499 m
-1557 2499 l
-1557 2500 l
-1452 2500 l
-1453 2500 m
-1557 2500 l
-1557 2501 l
-1453 2501 l
-1453 2501 m
-1558 2501 l
-1558 2502 l
-1453 2502 l
-1454 2502 m
-1558 2502 l
-1558 2504 l
-1454 2504 l
-1454 2504 m
-1559 2504 l
-1559 2505 l
-1454 2505 l
-1455 2505 m
-1559 2505 l
-1559 2506 l
-1455 2506 l
-1455 2506 m
-1560 2506 l
-1560 2507 l
-1455 2507 l
-1456 2507 m
-1560 2507 l
-1560 2509 l
-1456 2509 l
-1456 2509 m
-1561 2509 l
-1561 2510 l
-1456 2510 l
-1457 2510 m
-1561 2510 l
-1561 2511 l
-1457 2511 l
-1457 2511 m
-1561 2511 l
-1561 2512 l
-1457 2512 l
-1458 2512 m
-1559 2512 l
-1559 2513 l
-1458 2513 l
-1458 2513 m
-1556 2513 l
-1556 2514 l
-1458 2514 l
-1458 2514 m
-1554 2514 l
-1554 2515 l
-1458 2515 l
-1459 2515 m
-1551 2515 l
-1551 2516 l
-1459 2516 l
-1459 2516 m
-1549 2516 l
-1549 2517 l
-1459 2517 l
-1460 2517 m
-1546 2517 l
-1546 2518 l
-1460 2518 l
-1460 2518 m
-1544 2518 l
-1544 2519 l
-1460 2519 l
-1460 2519 m
-1541 2519 l
-1541 2520 l
-1460 2520 l
-1461 2520 m
-1539 2520 l
-1539 2521 l
-1461 2521 l
-1461 2521 m
-1537 2521 l
-1537 2522 l
-1461 2522 l
-1462 2522 m
-1534 2522 l
-1534 2523 l
-1462 2523 l
-1462 2523 m
-1532 2523 l
-1532 2524 l
-1462 2524 l
-1462 2524 m
-1529 2524 l
-1529 2525 l
-1462 2525 l
-1463 2525 m
-1527 2525 l
-1527 2526 l
-1463 2526 l
-1463 2526 m
-1524 2526 l
-1524 2527 l
-1463 2527 l
-1464 2527 m
-1522 2527 l
-1522 2528 l
-1464 2528 l
-1464 2528 m
-1519 2528 l
-1519 2529 l
-1464 2529 l
-1464 2529 m
-1517 2529 l
-1517 2530 l
-1464 2530 l
-1465 2530 m
-1514 2530 l
-1514 2531 l
-1465 2531 l
-1465 2531 m
-1512 2531 l
-1512 2532 l
-1465 2532 l
-1466 2532 m
-1509 2532 l
-1509 2533 l
-1466 2533 l
-1466 2533 m
-1507 2533 l
-1507 2534 l
-1466 2534 l
-1466 2534 m
-1505 2534 l
-1505 2535 l
-1466 2535 l
-1467 2535 m
-1502 2535 l
-1502 2536 l
-1467 2536 l
-1467 2536 m
-1500 2536 l
-1500 2537 l
-1467 2537 l
-1468 2537 m
-1497 2537 l
-1497 2538 l
-1468 2538 l
-1468 2538 m
-1495 2538 l
-1495 2539 l
-1468 2539 l
-1468 2539 m
-1492 2539 l
-1492 2540 l
-1468 2540 l
-1469 2540 m
-1490 2540 l
-1490 2541 l
-1469 2541 l
-1469 2541 m
-1487 2541 l
-1487 2542 l
-1469 2542 l
-1470 2542 m
-1485 2542 l
-1485 2543 l
-1470 2543 l
-1470 2543 m
-1482 2543 l
-1482 2544 l
-1470 2544 l
-1470 2544 m
-1480 2544 l
-1480 2545 l
-1470 2545 l
-1471 2545 m
-1477 2545 l
-1477 2546 l
-1471 2546 l
-1471 2546 m
-1475 2546 l
-1475 2547 l
-1471 2547 l
-Y
-1560.7 2511 m
-1516 2399 l
-1427 2434 l
-1472 2547 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1461 2452 m
-1462 2443 l
-1472 2434 l
-1479 2431 l
-1493 2430 l
-1505 2439 l
-1517 2457 l
-1524 2476 l
-1527 2493 l
-1522 2504 l
-1512 2513 l
-1508 2514 l
-1495 2515 l
-1484 2510 l
-1475 2500 l
-1474 2496 l
-1473 2483 l
-1478 2472 l
-1488 2464 l
-1492 2462 l
-1505 2461 l
-1516 2466 l
-1524 2476 l
-S
-1 g
-721 2958 m
-724 2958 l
-724 2959 l
-721 2959 l
-720 2959 m
-725 2959 l
-725 2960 l
-720 2960 l
-719 2960 m
-726 2960 l
-726 2961 l
-719 2961 l
-718 2961 m
-728 2961 l
-728 2962 l
-718 2962 l
-718 2962 m
-729 2962 l
-729 2963 l
-718 2963 l
-717 2963 m
-730 2963 l
-730 2964 l
-717 2964 l
-716 2964 m
-731 2964 l
-731 2965 l
-716 2965 l
-715 2965 m
-733 2965 l
-733 2966 l
-715 2966 l
-714 2966 m
-734 2966 l
-734 2967 l
-714 2967 l
-714 2967 m
-735 2967 l
-735 2968 l
-714 2968 l
-713 2968 m
-737 2968 l
-737 2969 l
-713 2969 l
-712 2969 m
-738 2969 l
-738 2970 l
-712 2970 l
-711 2970 m
-739 2970 l
-739 2971 l
-711 2971 l
-710 2971 m
-740 2971 l
-740 2972 l
-710 2972 l
-710 2972 m
-742 2972 l
-742 2973 l
-710 2973 l
-709 2973 m
-743 2973 l
-743 2974 l
-709 2974 l
-708 2974 m
-744 2974 l
-744 2975 l
-708 2975 l
-707 2975 m
-746 2975 l
-746 2976 l
-707 2976 l
-706 2976 m
-747 2976 l
-747 2977 l
-706 2977 l
-706 2977 m
-748 2977 l
-748 2978 l
-706 2978 l
-705 2978 m
-749 2978 l
-749 2979 l
-705 2979 l
-704 2979 m
-751 2979 l
-751 2980 l
-704 2980 l
-703 2980 m
-752 2980 l
-752 2981 l
-703 2981 l
-702 2981 m
-753 2981 l
-753 2982 l
-702 2982 l
-702 2982 m
-754 2982 l
-754 2983 l
-702 2983 l
-701 2983 m
-756 2983 l
-756 2984 l
-701 2984 l
-700 2984 m
-757 2984 l
-757 2985 l
-700 2985 l
-699 2985 m
-758 2985 l
-758 2986 l
-699 2986 l
-698 2986 m
-760 2986 l
-760 2987 l
-698 2987 l
-698 2987 m
-761 2987 l
-761 2988 l
-698 2988 l
-697 2988 m
-762 2988 l
-762 2989 l
-697 2989 l
-696 2989 m
-763 2989 l
-763 2990 l
-696 2990 l
-695 2990 m
-765 2990 l
-765 2991 l
-695 2991 l
-694 2991 m
-766 2991 l
-766 2992 l
-694 2992 l
-694 2992 m
-767 2992 l
-767 2993 l
-694 2993 l
-693 2993 m
-769 2993 l
-769 2994 l
-693 2994 l
-692 2994 m
-770 2994 l
-770 2995 l
-692 2995 l
-691 2995 m
-771 2995 l
-771 2996 l
-691 2996 l
-691 2996 m
-772 2996 l
-772 2997 l
-691 2997 l
-690 2997 m
-774 2997 l
-774 2998 l
-690 2998 l
-689 2998 m
-775 2998 l
-775 2999 l
-689 2999 l
-688 2999 m
-776 2999 l
-776 3000 l
-688 3000 l
-687 3000 m
-778 3000 l
-778 3001 l
-687 3001 l
-687 3001 m
-779 3001 l
-779 3002 l
-687 3002 l
-686 3002 m
-780 3002 l
-780 3003 l
-686 3003 l
-685 3003 m
-781 3003 l
-781 3004 l
-685 3004 l
-684 3004 m
-783 3004 l
-783 3005 l
-684 3005 l
-683 3005 m
-784 3005 l
-784 3006 l
-683 3006 l
-683 3006 m
-785 3006 l
-785 3007 l
-683 3007 l
-682 3007 m
-786 3007 l
-786 3008 l
-682 3008 l
-681 3008 m
-788 3008 l
-788 3009 l
-681 3009 l
-680 3009 m
-789 3009 l
-789 3010 l
-680 3010 l
-679 3010 m
-790 3010 l
-790 3011 l
-679 3011 l
-679 3011 m
-792 3011 l
-792 3012 l
-679 3012 l
-678 3012 m
-793 3012 l
-793 3013 l
-678 3013 l
-677 3013 m
-794 3013 l
-794 3014 l
-677 3014 l
-676 3014 m
-795 3014 l
-795 3015 l
-676 3015 l
-675 3015 m
-797 3015 l
-797 3016 l
-675 3016 l
-675 3016 m
-798 3016 l
-798 3017 l
-675 3017 l
-674 3017 m
-799 3017 l
-799 3018 l
-674 3018 l
-673 3018 m
-801 3018 l
-801 3019 l
-673 3019 l
-672 3019 m
-802 3019 l
-802 3020 l
-672 3020 l
-671 3020 m
-803 3020 l
-803 3021 l
-671 3021 l
-671 3021 m
-804 3021 l
-804 3022 l
-671 3022 l
-670 3022 m
-806 3022 l
-806 3023 l
-670 3023 l
-669 3023 m
-807 3023 l
-807 3024 l
-669 3024 l
-668 3024 m
-808 3024 l
-808 3025 l
-668 3025 l
-667 3025 m
-809 3025 l
-809 3026 l
-667 3026 l
-667 3026 m
-811 3026 l
-811 3027 l
-667 3027 l
-666 3027 m
-812 3027 l
-812 3028 l
-666 3028 l
-665 3028 m
-813 3028 l
-813 3029 l
-665 3029 l
-664 3029 m
-815 3029 l
-815 3030 l
-664 3030 l
-663 3030 m
-816 3030 l
-816 3031 l
-663 3031 l
-663 3031 m
-817 3031 l
-817 3032 l
-663 3032 l
-662 3032 m
-818 3032 l
-818 3033 l
-662 3033 l
-661 3033 m
-817 3033 l
-817 3034 l
-661 3034 l
-660 3034 m
-817 3034 l
-817 3035 l
-660 3035 l
-660 3035 m
-816 3035 l
-816 3036 l
-660 3036 l
-660 3036 m
-815 3036 l
-815 3037 l
-660 3037 l
-661 3037 m
-814 3037 l
-814 3038 l
-661 3038 l
-662 3038 m
-813 3038 l
-813 3039 l
-662 3039 l
-663 3039 m
-813 3039 l
-813 3040 l
-663 3040 l
-665 3040 m
-812 3040 l
-812 3041 l
-665 3041 l
-666 3041 m
-811 3041 l
-811 3042 l
-666 3042 l
-667 3042 m
-810 3042 l
-810 3043 l
-667 3043 l
-668 3043 m
-809 3043 l
-809 3044 l
-668 3044 l
-670 3044 m
-809 3044 l
-809 3045 l
-670 3045 l
-671 3045 m
-808 3045 l
-808 3046 l
-671 3046 l
-672 3046 m
-807 3046 l
-807 3047 l
-672 3047 l
-673 3047 m
-806 3047 l
-806 3048 l
-673 3048 l
-675 3048 m
-805 3048 l
-805 3049 l
-675 3049 l
-676 3049 m
-805 3049 l
-805 3050 l
-676 3050 l
-677 3050 m
-804 3050 l
-804 3051 l
-677 3051 l
-679 3051 m
-803 3051 l
-803 3052 l
-679 3052 l
-680 3052 m
-802 3052 l
-802 3053 l
-680 3053 l
-681 3053 m
-802 3053 l
-802 3054 l
-681 3054 l
-682 3054 m
-801 3054 l
-801 3055 l
-682 3055 l
-684 3055 m
-800 3055 l
-800 3056 l
-684 3056 l
-685 3056 m
-799 3056 l
-799 3057 l
-685 3057 l
-686 3057 m
-798 3057 l
-798 3058 l
-686 3058 l
-687 3058 m
-798 3058 l
-798 3059 l
-687 3059 l
-689 3059 m
-797 3059 l
-797 3060 l
-689 3060 l
-690 3060 m
-796 3060 l
-796 3061 l
-690 3061 l
-691 3061 m
-795 3061 l
-795 3062 l
-691 3062 l
-692 3062 m
-794 3062 l
-794 3063 l
-692 3063 l
-694 3063 m
-794 3063 l
-794 3064 l
-694 3064 l
-695 3064 m
-793 3064 l
-793 3065 l
-695 3065 l
-696 3065 m
-792 3065 l
-792 3066 l
-696 3066 l
-698 3066 m
-791 3066 l
-791 3067 l
-698 3067 l
-699 3067 m
-790 3067 l
-790 3068 l
-699 3068 l
-700 3068 m
-790 3068 l
-790 3069 l
-700 3069 l
-701 3069 m
-789 3069 l
-789 3070 l
-701 3070 l
-703 3070 m
-788 3070 l
-788 3071 l
-703 3071 l
-704 3071 m
-787 3071 l
-787 3072 l
-704 3072 l
-705 3072 m
-786 3072 l
-786 3073 l
-705 3073 l
-706 3073 m
-786 3073 l
-786 3074 l
-706 3074 l
-708 3074 m
-785 3074 l
-785 3075 l
-708 3075 l
-709 3075 m
-784 3075 l
-784 3076 l
-709 3076 l
-710 3076 m
-783 3076 l
-783 3077 l
-710 3077 l
-711 3077 m
-782 3077 l
-782 3078 l
-711 3078 l
-713 3078 m
-782 3078 l
-782 3079 l
-713 3079 l
-714 3079 m
-781 3079 l
-781 3080 l
-714 3080 l
-715 3080 m
-780 3080 l
-780 3081 l
-715 3081 l
-717 3081 m
-779 3081 l
-779 3082 l
-717 3082 l
-718 3082 m
-779 3082 l
-779 3083 l
-718 3083 l
-719 3083 m
-778 3083 l
-778 3084 l
-719 3084 l
-720 3084 m
-777 3084 l
-777 3085 l
-720 3085 l
-722 3085 m
-776 3085 l
-776 3086 l
-722 3086 l
-723 3086 m
-775 3086 l
-775 3087 l
-723 3087 l
-724 3087 m
-775 3087 l
-775 3088 l
-724 3088 l
-725 3088 m
-774 3088 l
-774 3089 l
-725 3089 l
-727 3089 m
-773 3089 l
-773 3090 l
-727 3090 l
-728 3090 m
-772 3090 l
-772 3091 l
-728 3091 l
-729 3091 m
-771 3091 l
-771 3092 l
-729 3092 l
-730 3092 m
-771 3092 l
-771 3093 l
-730 3093 l
-732 3093 m
-770 3093 l
-770 3094 l
-732 3094 l
-733 3094 m
-769 3094 l
-769 3095 l
-733 3095 l
-734 3095 m
-768 3095 l
-768 3096 l
-734 3096 l
-736 3096 m
-767 3096 l
-767 3097 l
-736 3097 l
-737 3097 m
-767 3097 l
-767 3098 l
-737 3098 l
-738 3098 m
-766 3098 l
-766 3099 l
-738 3099 l
-739 3099 m
-765 3099 l
-765 3100 l
-739 3100 l
-741 3100 m
-764 3100 l
-764 3101 l
-741 3101 l
-742 3101 m
-763 3101 l
-763 3102 l
-742 3102 l
-743 3102 m
-763 3102 l
-763 3103 l
-743 3103 l
-744 3103 m
-762 3103 l
-762 3104 l
-744 3104 l
-746 3104 m
-761 3104 l
-761 3105 l
-746 3105 l
-747 3105 m
-760 3105 l
-760 3106 l
-747 3106 l
-748 3106 m
-759 3106 l
-759 3107 l
-748 3107 l
-749 3107 m
-759 3107 l
-759 3108 l
-749 3108 l
-751 3108 m
-758 3108 l
-758 3109 l
-751 3109 l
-752 3109 m
-757 3109 l
-757 3110 l
-752 3110 l
-753 3110 m
-756 3110 l
-756 3111 l
-753 3111 l
-Y
-817.3 3032.5 m
-722 2958 l
-660 3036 l
-755 3111 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-709 3001 m
-720 2993 l
-730 2995 l
-736 3000 l
-740 3009 l
-738 3018 l
-731 3034 l
-727 3046 l
-728 3058 l
-732 3066 l
-742 3074 l
-751 3076 l
-757 3075 l
-768 3068 l
-778 3055 l
-783 3043 l
-782 3037 l
-778 3028 l
-768 3020 l
-759 3019 l
-747 3020 l
-736 3027 l
-723 3038 l
-714 3042 l
-705 3040 l
-699 3035 l
-695 3026 l
-699 3014 l
-709 3001 l
-S
-1 g
-1009 5498 m
-1013 5498 l
-1013 5499 l
-1009 5499 l
-1008 5499 m
-1014 5499 l
-1014 5500 l
-1008 5500 l
-1007 5500 m
-1015 5500 l
-1015 5501 l
-1007 5501 l
-1006 5501 m
-1017 5501 l
-1017 5502 l
-1006 5502 l
-1006 5502 m
-1018 5502 l
-1018 5503 l
-1006 5503 l
-1005 5503 m
-1019 5503 l
-1019 5504 l
-1005 5504 l
-1004 5504 m
-1020 5504 l
-1020 5505 l
-1004 5505 l
-1003 5505 m
-1022 5505 l
-1022 5506 l
-1003 5506 l
-1002 5506 m
-1023 5506 l
-1023 5507 l
-1002 5507 l
-1002 5507 m
-1024 5507 l
-1024 5508 l
-1002 5508 l
-1001 5508 m
-1025 5508 l
-1025 5509 l
-1001 5509 l
-1000 5509 m
-1027 5509 l
-1027 5510 l
-1000 5510 l
-999 5510 m
-1028 5510 l
-1028 5511 l
-999 5511 l
-998 5511 m
-1029 5511 l
-1029 5512 l
-998 5512 l
-998 5512 m
-1030 5512 l
-1030 5513 l
-998 5513 l
-997 5513 m
-1032 5513 l
-1032 5514 l
-997 5514 l
-996 5514 m
-1033 5514 l
-1033 5515 l
-996 5515 l
-995 5515 m
-1034 5515 l
-1034 5516 l
-995 5516 l
-994 5516 m
-1035 5516 l
-1035 5517 l
-994 5517 l
-994 5517 m
-1037 5517 l
-1037 5518 l
-994 5518 l
-993 5518 m
-1038 5518 l
-1038 5519 l
-993 5519 l
-992 5519 m
-1039 5519 l
-1039 5520 l
-992 5520 l
-991 5520 m
-1040 5520 l
-1040 5521 l
-991 5521 l
-990 5521 m
-1042 5521 l
-1042 5522 l
-990 5522 l
-990 5522 m
-1043 5522 l
-1043 5523 l
-990 5523 l
-989 5523 m
-1044 5523 l
-1044 5524 l
-989 5524 l
-988 5524 m
-1045 5524 l
-1045 5525 l
-988 5525 l
-987 5525 m
-1047 5525 l
-1047 5526 l
-987 5526 l
-986 5526 m
-1048 5526 l
-1048 5527 l
-986 5527 l
-986 5527 m
-1049 5527 l
-1049 5528 l
-986 5528 l
-985 5528 m
-1050 5528 l
-1050 5529 l
-985 5529 l
-984 5529 m
-1052 5529 l
-1052 5530 l
-984 5530 l
-983 5530 m
-1053 5530 l
-1053 5531 l
-983 5531 l
-982 5531 m
-1054 5531 l
-1054 5532 l
-982 5532 l
-982 5532 m
-1055 5532 l
-1055 5533 l
-982 5533 l
-981 5533 m
-1057 5533 l
-1057 5534 l
-981 5534 l
-980 5534 m
-1058 5534 l
-1058 5535 l
-980 5535 l
-979 5535 m
-1059 5535 l
-1059 5536 l
-979 5536 l
-978 5536 m
-1061 5536 l
-1061 5537 l
-978 5537 l
-978 5537 m
-1062 5537 l
-1062 5538 l
-978 5538 l
-977 5538 m
-1063 5538 l
-1063 5539 l
-977 5539 l
-976 5539 m
-1064 5539 l
-1064 5540 l
-976 5540 l
-975 5540 m
-1066 5540 l
-1066 5541 l
-975 5541 l
-974 5541 m
-1067 5541 l
-1067 5542 l
-974 5542 l
-974 5542 m
-1068 5542 l
-1068 5543 l
-974 5543 l
-973 5543 m
-1069 5543 l
-1069 5544 l
-973 5544 l
-972 5544 m
-1071 5544 l
-1071 5545 l
-972 5545 l
-971 5545 m
-1072 5545 l
-1072 5546 l
-971 5546 l
-970 5546 m
-1073 5546 l
-1073 5547 l
-970 5547 l
-970 5547 m
-1074 5547 l
-1074 5548 l
-970 5548 l
-969 5548 m
-1076 5548 l
-1076 5549 l
-969 5549 l
-968 5549 m
-1077 5549 l
-1077 5550 l
-968 5550 l
-967 5550 m
-1078 5550 l
-1078 5551 l
-967 5551 l
-966 5551 m
-1079 5551 l
-1079 5552 l
-966 5552 l
-966 5552 m
-1081 5552 l
-1081 5553 l
-966 5553 l
-965 5553 m
-1082 5553 l
-1082 5554 l
-965 5554 l
-964 5554 m
-1083 5554 l
-1083 5555 l
-964 5555 l
-963 5555 m
-1084 5555 l
-1084 5556 l
-963 5556 l
-962 5556 m
-1086 5556 l
-1086 5557 l
-962 5557 l
-962 5557 m
-1087 5557 l
-1087 5558 l
-962 5558 l
-961 5558 m
-1088 5558 l
-1088 5559 l
-961 5559 l
-960 5559 m
-1089 5559 l
-1089 5560 l
-960 5560 l
-959 5560 m
-1091 5560 l
-1091 5561 l
-959 5561 l
-958 5561 m
-1092 5561 l
-1092 5562 l
-958 5562 l
-958 5562 m
-1093 5562 l
-1093 5563 l
-958 5563 l
-957 5563 m
-1094 5563 l
-1094 5564 l
-957 5564 l
-956 5564 m
-1096 5564 l
-1096 5565 l
-956 5565 l
-955 5565 m
-1097 5565 l
-1097 5566 l
-955 5566 l
-954 5566 m
-1098 5566 l
-1098 5567 l
-954 5567 l
-954 5567 m
-1099 5567 l
-1099 5568 l
-954 5568 l
-953 5568 m
-1101 5568 l
-1101 5569 l
-953 5569 l
-952 5569 m
-1102 5569 l
-1102 5570 l
-952 5570 l
-951 5570 m
-1103 5570 l
-1103 5571 l
-951 5571 l
-950 5571 m
-1105 5571 l
-1105 5572 l
-950 5572 l
-950 5572 m
-1106 5572 l
-1106 5573 l
-950 5573 l
-949 5573 m
-1107 5573 l
-1107 5574 l
-949 5574 l
-948 5574 m
-1108 5574 l
-1108 5575 l
-948 5575 l
-947 5575 m
-1110 5575 l
-1110 5576 l
-947 5576 l
-946 5576 m
-1111 5576 l
-1111 5577 l
-946 5577 l
-946 5577 m
-1112 5577 l
-1112 5578 l
-946 5578 l
-945 5578 m
-1113 5578 l
-1113 5579 l
-945 5579 l
-944 5579 m
-1115 5579 l
-1115 5580 l
-944 5580 l
-943 5580 m
-1116 5580 l
-1116 5581 l
-943 5581 l
-942 5581 m
-1117 5581 l
-1117 5582 l
-942 5582 l
-942 5582 m
-1118 5582 l
-1118 5583 l
-942 5583 l
-941 5583 m
-1120 5583 l
-1120 5584 l
-941 5584 l
-940 5584 m
-1121 5584 l
-1121 5585 l
-940 5585 l
-939 5585 m
-1122 5585 l
-1122 5586 l
-939 5586 l
-938 5586 m
-1123 5586 l
-1123 5587 l
-938 5587 l
-938 5587 m
-1125 5587 l
-1125 5588 l
-938 5588 l
-937 5588 m
-1126 5588 l
-1126 5589 l
-937 5589 l
-936 5589 m
-1127 5589 l
-1127 5590 l
-936 5590 l
-935 5590 m
-1128 5590 l
-1128 5591 l
-935 5591 l
-935 5591 m
-1130 5591 l
-1130 5592 l
-935 5592 l
-935 5592 m
-1131 5592 l
-1131 5593 l
-935 5593 l
-936 5593 m
-1132 5593 l
-1132 5594 l
-936 5594 l
-937 5594 m
-1133 5594 l
-1133 5595 l
-937 5595 l
-938 5595 m
-1135 5595 l
-1135 5596 l
-938 5596 l
-939 5596 m
-1136 5596 l
-1136 5597 l
-939 5597 l
-941 5597 m
-1137 5597 l
-1137 5598 l
-941 5598 l
-942 5598 m
-1138 5598 l
-1138 5599 l
-942 5599 l
-943 5599 m
-1140 5599 l
-1140 5600 l
-943 5600 l
-944 5600 m
-1141 5600 l
-1141 5601 l
-944 5601 l
-946 5601 m
-1142 5601 l
-1142 5602 l
-946 5602 l
-947 5602 m
-1143 5602 l
-1143 5603 l
-947 5603 l
-948 5603 m
-1145 5603 l
-1145 5604 l
-948 5604 l
-949 5604 m
-1146 5604 l
-1146 5605 l
-949 5605 l
-951 5605 m
-1147 5605 l
-1147 5606 l
-951 5606 l
-952 5606 m
-1148 5606 l
-1148 5607 l
-952 5607 l
-953 5607 m
-1148 5607 l
-1148 5608 l
-953 5608 l
-954 5608 m
-1148 5608 l
-1148 5609 l
-954 5609 l
-956 5609 m
-1147 5609 l
-1147 5610 l
-956 5610 l
-957 5610 m
-1146 5610 l
-1146 5611 l
-957 5611 l
-958 5611 m
-1145 5611 l
-1145 5612 l
-958 5612 l
-959 5612 m
-1144 5612 l
-1144 5613 l
-959 5613 l
-961 5613 m
-1144 5613 l
-1144 5614 l
-961 5614 l
-962 5614 m
-1143 5614 l
-1143 5615 l
-962 5615 l
-963 5615 m
-1142 5615 l
-1142 5616 l
-963 5616 l
-964 5616 m
-1141 5616 l
-1141 5617 l
-964 5617 l
-966 5617 m
-1140 5617 l
-1140 5618 l
-966 5618 l
-967 5618 m
-1140 5618 l
-1140 5619 l
-967 5619 l
-968 5619 m
-1139 5619 l
-1139 5620 l
-968 5620 l
-969 5620 m
-1138 5620 l
-1138 5621 l
-969 5621 l
-971 5621 m
-1137 5621 l
-1137 5622 l
-971 5622 l
-972 5622 m
-1136 5622 l
-1136 5623 l
-972 5623 l
-973 5623 m
-1136 5623 l
-1136 5624 l
-973 5624 l
-974 5624 m
-1135 5624 l
-1135 5625 l
-974 5625 l
-976 5625 m
-1134 5625 l
-1134 5626 l
-976 5626 l
-977 5626 m
-1133 5626 l
-1133 5627 l
-977 5627 l
-978 5627 m
-1132 5627 l
-1132 5628 l
-978 5628 l
-979 5628 m
-1132 5628 l
-1132 5629 l
-979 5629 l
-981 5629 m
-1131 5629 l
-1131 5630 l
-981 5630 l
-982 5630 m
-1130 5630 l
-1130 5631 l
-982 5631 l
-983 5631 m
-1129 5631 l
-1129 5632 l
-983 5632 l
-984 5632 m
-1128 5632 l
-1128 5633 l
-984 5633 l
-986 5633 m
-1128 5633 l
-1128 5634 l
-986 5634 l
-987 5634 m
-1127 5634 l
-1127 5635 l
-987 5635 l
-988 5635 m
-1126 5635 l
-1126 5636 l
-988 5636 l
-989 5636 m
-1125 5636 l
-1125 5637 l
-989 5637 l
-991 5637 m
-1124 5637 l
-1124 5638 l
-991 5638 l
-992 5638 m
-1124 5638 l
-1124 5639 l
-992 5639 l
-993 5639 m
-1123 5639 l
-1123 5640 l
-993 5640 l
-994 5640 m
-1122 5640 l
-1122 5641 l
-994 5641 l
-996 5641 m
-1121 5641 l
-1121 5642 l
-996 5642 l
-997 5642 m
-1120 5642 l
-1120 5643 l
-997 5643 l
-998 5643 m
-1120 5643 l
-1120 5644 l
-998 5644 l
-999 5644 m
-1119 5644 l
-1119 5645 l
-999 5645 l
-1001 5645 m
-1118 5645 l
-1118 5646 l
-1001 5646 l
-1002 5646 m
-1117 5646 l
-1117 5647 l
-1002 5647 l
-1003 5647 m
-1116 5647 l
-1116 5648 l
-1003 5648 l
-1004 5648 m
-1116 5648 l
-1116 5649 l
-1004 5649 l
-1005 5649 m
-1115 5649 l
-1115 5650 l
-1005 5650 l
-1007 5650 m
-1114 5650 l
-1114 5651 l
-1007 5651 l
-1008 5651 m
-1113 5651 l
-1113 5652 l
-1008 5652 l
-1009 5652 m
-1112 5652 l
-1112 5653 l
-1009 5653 l
-1010 5653 m
-1112 5653 l
-1112 5654 l
-1010 5654 l
-1012 5654 m
-1111 5654 l
-1111 5655 l
-1012 5655 l
-1013 5655 m
-1110 5655 l
-1110 5656 l
-1013 5656 l
-1014 5656 m
-1109 5656 l
-1109 5657 l
-1014 5657 l
-1015 5657 m
-1108 5657 l
-1108 5658 l
-1015 5658 l
-1017 5658 m
-1108 5658 l
-1108 5659 l
-1017 5659 l
-1018 5659 m
-1107 5659 l
-1107 5660 l
-1018 5660 l
-1019 5660 m
-1106 5660 l
-1106 5661 l
-1019 5661 l
-1020 5661 m
-1105 5661 l
-1105 5662 l
-1020 5662 l
-1022 5662 m
-1104 5662 l
-1104 5663 l
-1022 5663 l
-1023 5663 m
-1104 5663 l
-1104 5664 l
-1023 5664 l
-1024 5664 m
-1103 5664 l
-1103 5665 l
-1024 5665 l
-1025 5665 m
-1102 5665 l
-1102 5666 l
-1025 5666 l
-1027 5666 m
-1101 5666 l
-1101 5667 l
-1027 5667 l
-1028 5667 m
-1100 5667 l
-1100 5668 l
-1028 5668 l
-1029 5668 m
-1100 5668 l
-1100 5669 l
-1029 5669 l
-1030 5669 m
-1099 5669 l
-1099 5670 l
-1030 5670 l
-1032 5670 m
-1098 5670 l
-1098 5671 l
-1032 5671 l
-1033 5671 m
-1097 5671 l
-1097 5672 l
-1033 5672 l
-1034 5672 m
-1096 5672 l
-1096 5673 l
-1034 5673 l
-1035 5673 m
-1096 5673 l
-1096 5674 l
-1035 5674 l
-1037 5674 m
-1095 5674 l
-1095 5675 l
-1037 5675 l
-1038 5675 m
-1094 5675 l
-1094 5676 l
-1038 5676 l
-1039 5676 m
-1093 5676 l
-1093 5677 l
-1039 5677 l
-1040 5677 m
-1092 5677 l
-1092 5678 l
-1040 5678 l
-1042 5678 m
-1092 5678 l
-1092 5679 l
-1042 5679 l
-1043 5679 m
-1091 5679 l
-1091 5680 l
-1043 5680 l
-1044 5680 m
-1090 5680 l
-1090 5681 l
-1044 5681 l
-1045 5681 m
-1089 5681 l
-1089 5682 l
-1045 5682 l
-1047 5682 m
-1088 5682 l
-1088 5683 l
-1047 5683 l
-1048 5683 m
-1088 5683 l
-1088 5684 l
-1048 5684 l
-1049 5684 m
-1087 5684 l
-1087 5685 l
-1049 5685 l
-1050 5685 m
-1086 5685 l
-1086 5686 l
-1050 5686 l
-1052 5686 m
-1085 5686 l
-1085 5687 l
-1052 5687 l
-1053 5687 m
-1084 5687 l
-1084 5688 l
-1053 5688 l
-1054 5688 m
-1084 5688 l
-1084 5689 l
-1054 5689 l
-1055 5689 m
-1083 5689 l
-1083 5690 l
-1055 5690 l
-1057 5690 m
-1082 5690 l
-1082 5691 l
-1057 5691 l
-1058 5691 m
-1081 5691 l
-1081 5692 l
-1058 5692 l
-1059 5692 m
-1080 5692 l
-1080 5693 l
-1059 5693 l
-1060 5693 m
-1080 5693 l
-1080 5694 l
-1060 5694 l
-1062 5694 m
-1079 5694 l
-1079 5695 l
-1062 5695 l
-1063 5695 m
-1078 5695 l
-1078 5696 l
-1063 5696 l
-1064 5696 m
-1077 5696 l
-1077 5697 l
-1064 5697 l
-1065 5697 m
-1076 5697 l
-1076 5698 l
-1065 5698 l
-1067 5698 m
-1076 5698 l
-1076 5699 l
-1067 5699 l
-1068 5699 m
-1075 5699 l
-1075 5700 l
-1068 5700 l
-1069 5700 m
-1074 5700 l
-1074 5701 l
-1069 5701 l
-1070 5701 m
-1073 5701 l
-1073 5702 l
-1070 5702 l
-Y
-1010.5 5497.6 m
-935 5592 l
-1072 5702 l
-1148 5607 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-972 5579 m
-976 5588 l
-978 5605 l
-1033 5537 l
-S
-1050 5663 m
-1054 5591 l
-1103 5630 l
-S
-1050 5663 m
-1105 5594 l
-S
-1 g
-1830 5898 m
-1841 5898 l
-1841 5899 l
-1830 5899 l
-1830 5899 m
-1847 5899 l
-1847 5900 l
-1830 5900 l
-1830 5900 m
-1854 5900 l
-1854 5901 l
-1830 5901 l
-1830 5901 m
-1861 5901 l
-1861 5902 l
-1830 5902 l
-1829 5902 m
-1867 5902 l
-1867 5903 l
-1829 5903 l
-1829 5903 m
-1874 5903 l
-1874 5904 l
-1829 5904 l
-1829 5904 m
-1881 5904 l
-1881 5905 l
-1829 5905 l
-1829 5905 m
-1887 5905 l
-1887 5906 l
-1829 5906 l
-1829 5906 m
-1894 5906 l
-1894 5907 l
-1829 5907 l
-1829 5907 m
-1901 5907 l
-1901 5908 l
-1829 5908 l
-1829 5908 m
-1907 5908 l
-1907 5909 l
-1829 5909 l
-1828 5909 m
-1914 5909 l
-1914 5910 l
-1828 5910 l
-1828 5910 m
-1921 5910 l
-1921 5911 l
-1828 5911 l
-1828 5911 m
-1927 5911 l
-1927 5912 l
-1828 5912 l
-1828 5912 m
-1934 5912 l
-1934 5913 l
-1828 5913 l
-1828 5913 m
-1941 5913 l
-1941 5914 l
-1828 5914 l
-1828 5914 m
-1947 5914 l
-1947 5915 l
-1828 5915 l
-1827 5915 m
-1954 5915 l
-1954 5916 l
-1827 5916 l
-1827 5916 m
-1961 5916 l
-1961 5917 l
-1827 5917 l
-1827 5917 m
-1967 5917 l
-1967 5918 l
-1827 5918 l
-1827 5918 m
-1974 5918 l
-1974 5919 l
-1827 5919 l
-1827 5919 m
-1981 5919 l
-1981 5920 l
-1827 5920 l
-1827 5920 m
-1987 5920 l
-1987 5921 l
-1827 5921 l
-1827 5921 m
-1994 5921 l
-1994 5922 l
-1827 5922 l
-1826 5922 m
-2000 5922 l
-2000 5923 l
-1826 5923 l
-1826 5923 m
-2000 5923 l
-2000 5929 l
-1826 5929 l
-1825 5929 m
-2000 5929 l
-2000 5930 l
-1825 5930 l
-1825 5930 m
-1999 5930 l
-1999 5936 l
-1825 5936 l
-1824 5936 m
-1999 5936 l
-1999 5937 l
-1824 5937 l
-1824 5937 m
-1998 5937 l
-1998 5942 l
-1824 5942 l
-1823 5942 m
-1998 5942 l
-1998 5943 l
-1823 5943 l
-1823 5943 m
-1997 5943 l
-1997 5949 l
-1823 5949 l
-1822 5949 m
-1997 5949 l
-1997 5950 l
-1822 5950 l
-1822 5950 m
-1996 5950 l
-1996 5956 l
-1822 5956 l
-1821 5956 m
-1996 5956 l
-1996 5957 l
-1821 5957 l
-1821 5957 m
-1995 5957 l
-1995 5963 l
-1821 5963 l
-1820 5963 m
-1994 5963 l
-1994 5969 l
-1820 5969 l
-1819 5969 m
-1994 5969 l
-1994 5970 l
-1819 5970 l
-1819 5970 m
-1993 5970 l
-1993 5976 l
-1819 5976 l
-1818 5976 m
-1993 5976 l
-1993 5977 l
-1818 5977 l
-1818 5977 m
-1992 5977 l
-1992 5983 l
-1818 5983 l
-1817 5983 m
-1991 5983 l
-1991 5990 l
-1817 5990 l
-1816 5990 m
-1990 5990 l
-1990 5996 l
-1816 5996 l
-1815 5996 m
-1990 5996 l
-1990 5997 l
-1815 5997 l
-1815 5997 m
-1989 5997 l
-1989 6003 l
-1815 6003 l
-1814 6003 m
-1989 6003 l
-1989 6004 l
-1814 6004 l
-1814 6004 m
-1988 6004 l
-1988 6010 l
-1814 6010 l
-1813 6010 m
-1987 6010 l
-1987 6017 l
-1813 6017 l
-1813 6017 m
-1986 6017 l
-1986 6018 l
-1813 6018 l
-1819 6018 m
-1986 6018 l
-1986 6019 l
-1819 6019 l
-1826 6019 m
-1986 6019 l
-1986 6020 l
-1826 6020 l
-1832 6020 m
-1986 6020 l
-1986 6021 l
-1832 6021 l
-1839 6021 m
-1986 6021 l
-1986 6022 l
-1839 6022 l
-1845 6022 m
-1986 6022 l
-1986 6023 l
-1845 6023 l
-1852 6023 m
-1986 6023 l
-1986 6024 l
-1852 6024 l
-1858 6024 m
-1985 6024 l
-1985 6025 l
-1858 6025 l
-1865 6025 m
-1985 6025 l
-1985 6026 l
-1865 6026 l
-1871 6026 m
-1985 6026 l
-1985 6027 l
-1871 6027 l
-1878 6027 m
-1985 6027 l
-1985 6028 l
-1878 6028 l
-1884 6028 m
-1985 6028 l
-1985 6029 l
-1884 6029 l
-1891 6029 m
-1985 6029 l
-1985 6030 l
-1891 6030 l
-1897 6030 m
-1984 6030 l
-1984 6031 l
-1897 6031 l
-1904 6031 m
-1984 6031 l
-1984 6032 l
-1904 6032 l
-1910 6032 m
-1984 6032 l
-1984 6033 l
-1910 6033 l
-1917 6033 m
-1984 6033 l
-1984 6034 l
-1917 6034 l
-1923 6034 m
-1984 6034 l
-1984 6035 l
-1923 6035 l
-1930 6035 m
-1984 6035 l
-1984 6036 l
-1930 6036 l
-1936 6036 m
-1984 6036 l
-1984 6037 l
-1936 6037 l
-1943 6037 m
-1983 6037 l
-1983 6038 l
-1943 6038 l
-1949 6038 m
-1983 6038 l
-1983 6039 l
-1949 6039 l
-1956 6039 m
-1983 6039 l
-1983 6040 l
-1956 6040 l
-1962 6040 m
-1983 6040 l
-1983 6041 l
-1962 6041 l
-1969 6041 m
-1983 6041 l
-1983 6042 l
-1969 6042 l
-1975 6042 m
-1983 6042 l
-1983 6043 l
-1975 6043 l
-Y
-1830.7 5897.6 m
-1813 6017 l
-1982 6043 l
-2000 5923 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1838 5987 m
-1846 5993 l
-1856 6007 l
-1869 5920 l
-S
-1962 6010 m
-1956 6018 l
-1943 6020 l
-1935 6019 l
-1923 6013 l
-1917 5999 l
-1916 5978 l
-1919 5957 l
-1925 5941 l
-1935 5934 l
-1948 5932 l
-1952 5933 l
-1964 5939 l
-1971 5948 l
-1973 5961 l
-1973 5965 l
-1967 5977 l
-1957 5984 l
-1944 5986 l
-1940 5986 l
-1928 5980 l
-1921 5970 l
-1919 5957 l
-S
-1 g
-2892 5791 m
-2896 5791 l
-2896 5792 l
-2892 5792 l
-2889 5792 m
-2896 5792 l
-2896 5793 l
-2889 5793 l
-2887 5793 m
-2897 5793 l
-2897 5794 l
-2887 5794 l
-2884 5794 m
-2897 5794 l
-2897 5795 l
-2884 5795 l
-2882 5795 m
-2897 5795 l
-2897 5796 l
-2882 5796 l
-2879 5796 m
-2898 5796 l
-2898 5797 l
-2879 5797 l
-2877 5797 m
-2898 5797 l
-2898 5798 l
-2877 5798 l
-2874 5798 m
-2899 5798 l
-2899 5799 l
-2874 5799 l
-2872 5799 m
-2899 5799 l
-2899 5800 l
-2872 5800 l
-2869 5800 m
-2899 5800 l
-2899 5801 l
-2869 5801 l
-2867 5801 m
-2900 5801 l
-2900 5802 l
-2867 5802 l
-2864 5802 m
-2900 5802 l
-2900 5803 l
-2864 5803 l
-2861 5803 m
-2901 5803 l
-2901 5804 l
-2861 5804 l
-2859 5804 m
-2901 5804 l
-2901 5805 l
-2859 5805 l
-2856 5805 m
-2901 5805 l
-2901 5806 l
-2856 5806 l
-2854 5806 m
-2902 5806 l
-2902 5807 l
-2854 5807 l
-2851 5807 m
-2902 5807 l
-2902 5808 l
-2851 5808 l
-2849 5808 m
-2903 5808 l
-2903 5809 l
-2849 5809 l
-2846 5809 m
-2903 5809 l
-2903 5810 l
-2846 5810 l
-2844 5810 m
-2903 5810 l
-2903 5811 l
-2844 5811 l
-2841 5811 m
-2904 5811 l
-2904 5812 l
-2841 5812 l
-2839 5812 m
-2904 5812 l
-2904 5813 l
-2839 5813 l
-2836 5813 m
-2904 5813 l
-2904 5814 l
-2836 5814 l
-2834 5814 m
-2905 5814 l
-2905 5815 l
-2834 5815 l
-2831 5815 m
-2905 5815 l
-2905 5816 l
-2831 5816 l
-2828 5816 m
-2906 5816 l
-2906 5817 l
-2828 5817 l
-2826 5817 m
-2906 5817 l
-2906 5818 l
-2826 5818 l
-2823 5818 m
-2906 5818 l
-2906 5819 l
-2823 5819 l
-2821 5819 m
-2907 5819 l
-2907 5820 l
-2821 5820 l
-2818 5820 m
-2907 5820 l
-2907 5821 l
-2818 5821 l
-2816 5821 m
-2908 5821 l
-2908 5822 l
-2816 5822 l
-2813 5822 m
-2908 5822 l
-2908 5823 l
-2813 5823 l
-2811 5823 m
-2908 5823 l
-2908 5824 l
-2811 5824 l
-2808 5824 m
-2909 5824 l
-2909 5825 l
-2808 5825 l
-2806 5825 m
-2909 5825 l
-2909 5826 l
-2806 5826 l
-2803 5826 m
-2910 5826 l
-2910 5827 l
-2803 5827 l
-2801 5827 m
-2910 5827 l
-2910 5828 l
-2801 5828 l
-2798 5828 m
-2910 5828 l
-2910 5829 l
-2798 5829 l
-2795 5829 m
-2911 5829 l
-2911 5830 l
-2795 5830 l
-2793 5830 m
-2911 5830 l
-2911 5831 l
-2793 5831 l
-2790 5831 m
-2911 5831 l
-2911 5832 l
-2790 5832 l
-2788 5832 m
-2912 5832 l
-2912 5833 l
-2788 5833 l
-2785 5833 m
-2912 5833 l
-2912 5834 l
-2785 5834 l
-2783 5834 m
-2913 5834 l
-2913 5835 l
-2783 5835 l
-2780 5835 m
-2913 5835 l
-2913 5836 l
-2780 5836 l
-2778 5836 m
-2913 5836 l
-2913 5837 l
-2778 5837 l
-2775 5837 m
-2914 5837 l
-2914 5838 l
-2775 5838 l
-2773 5838 m
-2914 5838 l
-2914 5839 l
-2773 5839 l
-2770 5839 m
-2915 5839 l
-2915 5840 l
-2770 5840 l
-2768 5840 m
-2915 5840 l
-2915 5841 l
-2768 5841 l
-2765 5841 m
-2915 5841 l
-2915 5842 l
-2765 5842 l
-2762 5842 m
-2916 5842 l
-2916 5843 l
-2762 5843 l
-2760 5843 m
-2916 5843 l
-2916 5844 l
-2760 5844 l
-2757 5844 m
-2917 5844 l
-2917 5845 l
-2757 5845 l
-2755 5845 m
-2917 5845 l
-2917 5846 l
-2755 5846 l
-2752 5846 m
-2917 5846 l
-2917 5847 l
-2752 5847 l
-2750 5847 m
-2918 5847 l
-2918 5848 l
-2750 5848 l
-2747 5848 m
-2918 5848 l
-2918 5849 l
-2747 5849 l
-2745 5849 m
-2918 5849 l
-2918 5850 l
-2745 5850 l
-2742 5850 m
-2919 5850 l
-2919 5851 l
-2742 5851 l
-2740 5851 m
-2919 5851 l
-2919 5852 l
-2740 5852 l
-2737 5852 m
-2920 5852 l
-2920 5853 l
-2737 5853 l
-2735 5853 m
-2920 5853 l
-2920 5854 l
-2735 5854 l
-2735 5854 m
-2920 5854 l
-2920 5855 l
-2735 5855 l
-2735 5855 m
-2921 5855 l
-2921 5857 l
-2735 5857 l
-2736 5857 m
-2922 5857 l
-2922 5860 l
-2736 5860 l
-2737 5860 m
-2923 5860 l
-2923 5862 l
-2737 5862 l
-2738 5862 m
-2924 5862 l
-2924 5865 l
-2738 5865 l
-2739 5865 m
-2925 5865 l
-2925 5867 l
-2739 5867 l
-2740 5867 m
-2926 5867 l
-2926 5870 l
-2740 5870 l
-2741 5870 m
-2927 5870 l
-2927 5872 l
-2741 5872 l
-2742 5872 m
-2927 5872 l
-2927 5873 l
-2742 5873 l
-2742 5873 m
-2928 5873 l
-2928 5875 l
-2742 5875 l
-2743 5875 m
-2929 5875 l
-2929 5877 l
-2743 5877 l
-2744 5877 m
-2929 5877 l
-2929 5878 l
-2744 5878 l
-2744 5878 m
-2930 5878 l
-2930 5880 l
-2744 5880 l
-2745 5880 m
-2931 5880 l
-2931 5882 l
-2745 5882 l
-2746 5882 m
-2931 5882 l
-2931 5883 l
-2746 5883 l
-2746 5883 m
-2932 5883 l
-2932 5885 l
-2746 5885 l
-2747 5885 m
-2933 5885 l
-2933 5887 l
-2747 5887 l
-2748 5887 m
-2933 5887 l
-2933 5888 l
-2748 5888 l
-2748 5888 m
-2934 5888 l
-2934 5890 l
-2748 5890 l
-2749 5890 m
-2934 5890 l
-2934 5891 l
-2749 5891 l
-2749 5891 m
-2935 5891 l
-2935 5892 l
-2749 5892 l
-2750 5892 m
-2935 5892 l
-2935 5893 l
-2750 5893 l
-2750 5893 m
-2936 5893 l
-2936 5895 l
-2750 5895 l
-2751 5895 m
-2936 5895 l
-2936 5896 l
-2751 5896 l
-2751 5896 m
-2937 5896 l
-2937 5897 l
-2751 5897 l
-2752 5897 m
-2937 5897 l
-2937 5898 l
-2752 5898 l
-2752 5898 m
-2938 5898 l
-2938 5900 l
-2752 5900 l
-2753 5900 m
-2938 5900 l
-2938 5901 l
-2753 5901 l
-2753 5901 m
-2939 5901 l
-2939 5902 l
-2753 5902 l
-2754 5902 m
-2939 5902 l
-2939 5903 l
-2754 5903 l
-2754 5903 m
-2939 5903 l
-2939 5904 l
-2754 5904 l
-2754 5904 m
-2939 5904 l
-2939 5905 l
-2754 5905 l
-2755 5905 m
-2937 5905 l
-2937 5906 l
-2755 5906 l
-2755 5906 m
-2934 5906 l
-2934 5907 l
-2755 5907 l
-2756 5907 m
-2932 5907 l
-2932 5908 l
-2756 5908 l
-2756 5908 m
-2929 5908 l
-2929 5909 l
-2756 5909 l
-2756 5909 m
-2927 5909 l
-2927 5910 l
-2756 5910 l
-2757 5910 m
-2924 5910 l
-2924 5911 l
-2757 5911 l
-2757 5911 m
-2922 5911 l
-2922 5912 l
-2757 5912 l
-2758 5912 m
-2919 5912 l
-2919 5913 l
-2758 5913 l
-2758 5913 m
-2917 5913 l
-2917 5914 l
-2758 5914 l
-2758 5914 m
-2914 5914 l
-2914 5915 l
-2758 5915 l
-2759 5915 m
-2912 5915 l
-2912 5916 l
-2759 5916 l
-2759 5916 m
-2909 5916 l
-2909 5917 l
-2759 5917 l
-2760 5917 m
-2906 5917 l
-2906 5918 l
-2760 5918 l
-2760 5918 m
-2904 5918 l
-2904 5919 l
-2760 5919 l
-2760 5919 m
-2901 5919 l
-2901 5920 l
-2760 5920 l
-2761 5920 m
-2899 5920 l
-2899 5921 l
-2761 5921 l
-2761 5921 m
-2896 5921 l
-2896 5922 l
-2761 5922 l
-2762 5922 m
-2894 5922 l
-2894 5923 l
-2762 5923 l
-2762 5923 m
-2891 5923 l
-2891 5924 l
-2762 5924 l
-2762 5924 m
-2889 5924 l
-2889 5925 l
-2762 5925 l
-2763 5925 m
-2886 5925 l
-2886 5926 l
-2763 5926 l
-2763 5926 m
-2884 5926 l
-2884 5927 l
-2763 5927 l
-2764 5927 m
-2881 5927 l
-2881 5928 l
-2764 5928 l
-2764 5928 m
-2879 5928 l
-2879 5929 l
-2764 5929 l
-2764 5929 m
-2876 5929 l
-2876 5930 l
-2764 5930 l
-2765 5930 m
-2874 5930 l
-2874 5931 l
-2765 5931 l
-2765 5931 m
-2871 5931 l
-2871 5932 l
-2765 5932 l
-2766 5932 m
-2869 5932 l
-2869 5933 l
-2766 5933 l
-2766 5933 m
-2866 5933 l
-2866 5934 l
-2766 5934 l
-2766 5934 m
-2864 5934 l
-2864 5935 l
-2766 5935 l
-2767 5935 m
-2861 5935 l
-2861 5936 l
-2767 5936 l
-2767 5936 m
-2859 5936 l
-2859 5937 l
-2767 5937 l
-2768 5937 m
-2856 5937 l
-2856 5938 l
-2768 5938 l
-2768 5938 m
-2854 5938 l
-2854 5939 l
-2768 5939 l
-2768 5939 m
-2851 5939 l
-2851 5940 l
-2768 5940 l
-2769 5940 m
-2849 5940 l
-2849 5941 l
-2769 5941 l
-2769 5941 m
-2846 5941 l
-2846 5942 l
-2769 5942 l
-2770 5942 m
-2843 5942 l
-2843 5943 l
-2770 5943 l
-2770 5943 m
-2841 5943 l
-2841 5944 l
-2770 5944 l
-2770 5944 m
-2838 5944 l
-2838 5945 l
-2770 5945 l
-2771 5945 m
-2836 5945 l
-2836 5946 l
-2771 5946 l
-2771 5946 m
-2833 5946 l
-2833 5947 l
-2771 5947 l
-2772 5947 m
-2831 5947 l
-2831 5948 l
-2772 5948 l
-2772 5948 m
-2828 5948 l
-2828 5949 l
-2772 5949 l
-2772 5949 m
-2826 5949 l
-2826 5950 l
-2772 5950 l
-2773 5950 m
-2823 5950 l
-2823 5951 l
-2773 5951 l
-2773 5951 m
-2821 5951 l
-2821 5952 l
-2773 5952 l
-2774 5952 m
-2818 5952 l
-2818 5953 l
-2774 5953 l
-2774 5953 m
-2816 5953 l
-2816 5954 l
-2774 5954 l
-2774 5954 m
-2813 5954 l
-2813 5955 l
-2774 5955 l
-2775 5955 m
-2811 5955 l
-2811 5956 l
-2775 5956 l
-2775 5956 m
-2808 5956 l
-2808 5957 l
-2775 5957 l
-2776 5957 m
-2806 5957 l
-2806 5958 l
-2776 5958 l
-2776 5958 m
-2803 5958 l
-2803 5959 l
-2776 5959 l
-2776 5959 m
-2801 5959 l
-2801 5960 l
-2776 5960 l
-2777 5960 m
-2798 5960 l
-2798 5961 l
-2777 5961 l
-2777 5961 m
-2796 5961 l
-2796 5962 l
-2777 5962 l
-2778 5962 m
-2793 5962 l
-2793 5963 l
-2778 5963 l
-2778 5963 m
-2791 5963 l
-2791 5964 l
-2778 5964 l
-2778 5964 m
-2788 5964 l
-2788 5965 l
-2778 5965 l
-2779 5965 m
-2786 5965 l
-2786 5966 l
-2779 5966 l
-2779 5966 m
-2783 5966 l
-2783 5967 l
-2779 5967 l
-Y
-2939 5903.9 m
-2895 5791 l
-2735 5854 l
-2780 5967 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2887 5830 m
-2878 5829 l
-2862 5822 l
-2894 5904 l
-S
-2796 5848 m
-2809 5847 l
-2816 5854 l
-2819 5861 l
-2818 5871 l
-2812 5878 l
-2798 5888 l
-2788 5896 l
-2783 5907 l
-2782 5916 l
-2787 5928 l
-2794 5934 l
-2799 5936 l
-2812 5936 l
-2828 5930 l
-2838 5921 l
-2840 5916 l
-2841 5906 l
-2837 5895 l
-2830 5889 l
-2819 5884 l
-2806 5885 l
-2789 5887 l
-2779 5886 l
-2772 5880 l
-2769 5872 l
-2770 5863 l
-2780 5854 l
-2796 5848 l
-S
-1 g
-3616 5200 m
-3619 5200 l
-3619 5201 l
-3616 5201 l
-3615 5201 m
-3620 5201 l
-3620 5202 l
-3615 5202 l
-3614 5202 m
-3621 5202 l
-3621 5203 l
-3614 5203 l
-3613 5203 m
-3623 5203 l
-3623 5204 l
-3613 5204 l
-3612 5204 m
-3624 5204 l
-3624 5205 l
-3612 5205 l
-3612 5205 m
-3625 5205 l
-3625 5206 l
-3612 5206 l
-3611 5206 m
-3626 5206 l
-3626 5207 l
-3611 5207 l
-3610 5207 m
-3628 5207 l
-3628 5208 l
-3610 5208 l
-3609 5208 m
-3629 5208 l
-3629 5209 l
-3609 5209 l
-3608 5209 m
-3630 5209 l
-3630 5210 l
-3608 5210 l
-3608 5210 m
-3631 5210 l
-3631 5211 l
-3608 5211 l
-3607 5211 m
-3633 5211 l
-3633 5212 l
-3607 5212 l
-3606 5212 m
-3634 5212 l
-3634 5213 l
-3606 5213 l
-3605 5213 m
-3635 5213 l
-3635 5214 l
-3605 5214 l
-3604 5214 m
-3636 5214 l
-3636 5215 l
-3604 5215 l
-3604 5215 m
-3638 5215 l
-3638 5216 l
-3604 5216 l
-3603 5216 m
-3639 5216 l
-3639 5217 l
-3603 5217 l
-3602 5217 m
-3640 5217 l
-3640 5218 l
-3602 5218 l
-3601 5218 m
-3641 5218 l
-3641 5219 l
-3601 5219 l
-3600 5219 m
-3643 5219 l
-3643 5220 l
-3600 5220 l
-3600 5220 m
-3644 5220 l
-3644 5221 l
-3600 5221 l
-3599 5221 m
-3645 5221 l
-3645 5222 l
-3599 5222 l
-3598 5222 m
-3647 5222 l
-3647 5223 l
-3598 5223 l
-3597 5223 m
-3648 5223 l
-3648 5224 l
-3597 5224 l
-3596 5224 m
-3649 5224 l
-3649 5225 l
-3596 5225 l
-3596 5225 m
-3650 5225 l
-3650 5226 l
-3596 5226 l
-3595 5226 m
-3652 5226 l
-3652 5227 l
-3595 5227 l
-3594 5227 m
-3653 5227 l
-3653 5228 l
-3594 5228 l
-3593 5228 m
-3654 5228 l
-3654 5229 l
-3593 5229 l
-3592 5229 m
-3655 5229 l
-3655 5230 l
-3592 5230 l
-3592 5230 m
-3657 5230 l
-3657 5231 l
-3592 5231 l
-3591 5231 m
-3658 5231 l
-3658 5232 l
-3591 5232 l
-3590 5232 m
-3659 5232 l
-3659 5233 l
-3590 5233 l
-3589 5233 m
-3660 5233 l
-3660 5234 l
-3589 5234 l
-3588 5234 m
-3662 5234 l
-3662 5235 l
-3588 5235 l
-3588 5235 m
-3663 5235 l
-3663 5236 l
-3588 5236 l
-3587 5236 m
-3664 5236 l
-3664 5237 l
-3587 5237 l
-3586 5237 m
-3665 5237 l
-3665 5238 l
-3586 5238 l
-3585 5238 m
-3667 5238 l
-3667 5239 l
-3585 5239 l
-3584 5239 m
-3668 5239 l
-3668 5240 l
-3584 5240 l
-3584 5240 m
-3669 5240 l
-3669 5241 l
-3584 5241 l
-3583 5241 m
-3670 5241 l
-3670 5242 l
-3583 5242 l
-3582 5242 m
-3672 5242 l
-3672 5243 l
-3582 5243 l
-3581 5243 m
-3673 5243 l
-3673 5244 l
-3581 5244 l
-3580 5244 m
-3674 5244 l
-3674 5245 l
-3580 5245 l
-3580 5245 m
-3676 5245 l
-3676 5246 l
-3580 5246 l
-3579 5246 m
-3677 5246 l
-3677 5247 l
-3579 5247 l
-3578 5247 m
-3678 5247 l
-3678 5248 l
-3578 5248 l
-3577 5248 m
-3679 5248 l
-3679 5249 l
-3577 5249 l
-3576 5249 m
-3681 5249 l
-3681 5250 l
-3576 5250 l
-3575 5250 m
-3682 5250 l
-3682 5251 l
-3575 5251 l
-3575 5251 m
-3683 5251 l
-3683 5252 l
-3575 5252 l
-3574 5252 m
-3684 5252 l
-3684 5253 l
-3574 5253 l
-3573 5253 m
-3686 5253 l
-3686 5254 l
-3573 5254 l
-3572 5254 m
-3687 5254 l
-3687 5255 l
-3572 5255 l
-3571 5255 m
-3688 5255 l
-3688 5256 l
-3571 5256 l
-3571 5256 m
-3689 5256 l
-3689 5257 l
-3571 5257 l
-3570 5257 m
-3691 5257 l
-3691 5258 l
-3570 5258 l
-3569 5258 m
-3692 5258 l
-3692 5259 l
-3569 5259 l
-3568 5259 m
-3693 5259 l
-3693 5260 l
-3568 5260 l
-3567 5260 m
-3694 5260 l
-3694 5261 l
-3567 5261 l
-3567 5261 m
-3696 5261 l
-3696 5262 l
-3567 5262 l
-3566 5262 m
-3697 5262 l
-3697 5263 l
-3566 5263 l
-3565 5263 m
-3698 5263 l
-3698 5264 l
-3565 5264 l
-3564 5264 m
-3699 5264 l
-3699 5265 l
-3564 5265 l
-3563 5265 m
-3701 5265 l
-3701 5266 l
-3563 5266 l
-3563 5266 m
-3702 5266 l
-3702 5267 l
-3563 5267 l
-3562 5267 m
-3703 5267 l
-3703 5268 l
-3562 5268 l
-3561 5268 m
-3705 5268 l
-3705 5269 l
-3561 5269 l
-3560 5269 m
-3706 5269 l
-3706 5270 l
-3560 5270 l
-3559 5270 m
-3707 5270 l
-3707 5271 l
-3559 5271 l
-3559 5271 m
-3708 5271 l
-3708 5272 l
-3559 5272 l
-3558 5272 m
-3710 5272 l
-3710 5273 l
-3558 5273 l
-3557 5273 m
-3711 5273 l
-3711 5274 l
-3557 5274 l
-3556 5274 m
-3712 5274 l
-3712 5275 l
-3556 5275 l
-3555 5275 m
-3712 5275 l
-3712 5276 l
-3555 5276 l
-3555 5276 m
-3711 5276 l
-3711 5277 l
-3555 5277 l
-3554 5277 m
-3711 5277 l
-3711 5278 l
-3554 5278 l
-3553 5278 m
-3710 5278 l
-3710 5279 l
-3553 5279 l
-3552 5279 m
-3709 5279 l
-3709 5280 l
-3552 5280 l
-3551 5280 m
-3708 5280 l
-3708 5281 l
-3551 5281 l
-3551 5281 m
-3707 5281 l
-3707 5282 l
-3551 5282 l
-3550 5282 m
-3707 5282 l
-3707 5283 l
-3550 5283 l
-3549 5283 m
-3706 5283 l
-3706 5284 l
-3549 5284 l
-3548 5284 m
-3705 5284 l
-3705 5285 l
-3548 5285 l
-3547 5285 m
-3704 5285 l
-3704 5286 l
-3547 5286 l
-3547 5286 m
-3703 5286 l
-3703 5287 l
-3547 5287 l
-3546 5287 m
-3703 5287 l
-3703 5288 l
-3546 5288 l
-3545 5288 m
-3702 5288 l
-3702 5289 l
-3545 5289 l
-3544 5289 m
-3701 5289 l
-3701 5290 l
-3544 5290 l
-3543 5290 m
-3700 5290 l
-3700 5291 l
-3543 5291 l
-3543 5291 m
-3699 5291 l
-3699 5292 l
-3543 5292 l
-3542 5292 m
-3699 5292 l
-3699 5293 l
-3542 5293 l
-3541 5293 m
-3698 5293 l
-3698 5294 l
-3541 5294 l
-3540 5294 m
-3697 5294 l
-3697 5295 l
-3540 5295 l
-3539 5295 m
-3696 5295 l
-3696 5296 l
-3539 5296 l
-3538 5296 m
-3695 5296 l
-3695 5298 l
-3538 5298 l
-3537 5298 m
-3694 5298 l
-3694 5299 l
-3537 5299 l
-3536 5299 m
-3693 5299 l
-3693 5300 l
-3536 5300 l
-3535 5300 m
-3692 5300 l
-3692 5301 l
-3535 5301 l
-3534 5301 m
-3691 5301 l
-3691 5303 l
-3534 5303 l
-3533 5303 m
-3690 5303 l
-3690 5304 l
-3533 5304 l
-3532 5304 m
-3689 5304 l
-3689 5305 l
-3532 5305 l
-3531 5305 m
-3688 5305 l
-3688 5306 l
-3531 5306 l
-3530 5306 m
-3687 5306 l
-3687 5308 l
-3530 5308 l
-3529 5308 m
-3686 5308 l
-3686 5309 l
-3529 5309 l
-3528 5309 m
-3685 5309 l
-3685 5310 l
-3528 5310 l
-3527 5310 m
-3684 5310 l
-3684 5311 l
-3527 5311 l
-3526 5311 m
-3683 5311 l
-3683 5313 l
-3526 5313 l
-3525 5313 m
-3682 5313 l
-3682 5314 l
-3525 5314 l
-3524 5314 m
-3681 5314 l
-3681 5315 l
-3524 5315 l
-3523 5315 m
-3680 5315 l
-3680 5316 l
-3523 5316 l
-3522 5316 m
-3679 5316 l
-3679 5318 l
-3522 5318 l
-3521 5318 m
-3678 5318 l
-3678 5319 l
-3521 5319 l
-3520 5319 m
-3677 5319 l
-3677 5320 l
-3520 5320 l
-3519 5320 m
-3676 5320 l
-3676 5321 l
-3519 5321 l
-3518 5321 m
-3675 5321 l
-3675 5323 l
-3518 5323 l
-3517 5323 m
-3674 5323 l
-3674 5324 l
-3517 5324 l
-3516 5324 m
-3673 5324 l
-3673 5325 l
-3516 5325 l
-3515 5325 m
-3672 5325 l
-3672 5326 l
-3515 5326 l
-3514 5326 m
-3672 5326 l
-3672 5327 l
-3514 5327 l
-3514 5327 m
-3671 5327 l
-3671 5328 l
-3514 5328 l
-3513 5328 m
-3670 5328 l
-3670 5329 l
-3513 5329 l
-3512 5329 m
-3669 5329 l
-3669 5330 l
-3512 5330 l
-3511 5330 m
-3668 5330 l
-3668 5331 l
-3511 5331 l
-3510 5331 m
-3668 5331 l
-3668 5332 l
-3510 5332 l
-3510 5332 m
-3667 5332 l
-3667 5333 l
-3510 5333 l
-3509 5333 m
-3666 5333 l
-3666 5334 l
-3509 5334 l
-3508 5334 m
-3665 5334 l
-3665 5335 l
-3508 5335 l
-3507 5335 m
-3664 5335 l
-3664 5336 l
-3507 5336 l
-3506 5336 m
-3664 5336 l
-3664 5337 l
-3506 5337 l
-3506 5337 m
-3663 5337 l
-3663 5338 l
-3506 5338 l
-3505 5338 m
-3662 5338 l
-3662 5339 l
-3505 5339 l
-3504 5339 m
-3661 5339 l
-3661 5340 l
-3504 5340 l
-3503 5340 m
-3660 5340 l
-3660 5341 l
-3503 5341 l
-3502 5341 m
-3660 5341 l
-3660 5342 l
-3502 5342 l
-3502 5342 m
-3659 5342 l
-3659 5343 l
-3502 5343 l
-3502 5343 m
-3658 5343 l
-3658 5344 l
-3502 5344 l
-3503 5344 m
-3657 5344 l
-3657 5345 l
-3503 5345 l
-3504 5345 m
-3656 5345 l
-3656 5346 l
-3504 5346 l
-3505 5346 m
-3656 5346 l
-3656 5347 l
-3505 5347 l
-3507 5347 m
-3655 5347 l
-3655 5348 l
-3507 5348 l
-3508 5348 m
-3654 5348 l
-3654 5349 l
-3508 5349 l
-3509 5349 m
-3653 5349 l
-3653 5350 l
-3509 5350 l
-3510 5350 m
-3652 5350 l
-3652 5351 l
-3510 5351 l
-3512 5351 m
-3652 5351 l
-3652 5352 l
-3512 5352 l
-3513 5352 m
-3651 5352 l
-3651 5353 l
-3513 5353 l
-3514 5353 m
-3650 5353 l
-3650 5354 l
-3514 5354 l
-3515 5354 m
-3649 5354 l
-3649 5355 l
-3515 5355 l
-3517 5355 m
-3648 5355 l
-3648 5356 l
-3517 5356 l
-3518 5356 m
-3648 5356 l
-3648 5357 l
-3518 5357 l
-3519 5357 m
-3647 5357 l
-3647 5358 l
-3519 5358 l
-3520 5358 m
-3646 5358 l
-3646 5359 l
-3520 5359 l
-3522 5359 m
-3645 5359 l
-3645 5360 l
-3522 5360 l
-3523 5360 m
-3644 5360 l
-3644 5361 l
-3523 5361 l
-3524 5361 m
-3644 5361 l
-3644 5362 l
-3524 5362 l
-3525 5362 m
-3643 5362 l
-3643 5363 l
-3525 5363 l
-3527 5363 m
-3642 5363 l
-3642 5364 l
-3527 5364 l
-3528 5364 m
-3641 5364 l
-3641 5365 l
-3528 5365 l
-3529 5365 m
-3640 5365 l
-3640 5366 l
-3529 5366 l
-3530 5366 m
-3640 5366 l
-3640 5367 l
-3530 5367 l
-3532 5367 m
-3639 5367 l
-3639 5368 l
-3532 5368 l
-3533 5368 m
-3638 5368 l
-3638 5369 l
-3533 5369 l
-3534 5369 m
-3637 5369 l
-3637 5370 l
-3534 5370 l
-3535 5370 m
-3636 5370 l
-3636 5371 l
-3535 5371 l
-3537 5371 m
-3636 5371 l
-3636 5372 l
-3537 5372 l
-3538 5372 m
-3635 5372 l
-3635 5373 l
-3538 5373 l
-3539 5373 m
-3634 5373 l
-3634 5374 l
-3539 5374 l
-3540 5374 m
-3633 5374 l
-3633 5375 l
-3540 5375 l
-3542 5375 m
-3633 5375 l
-3633 5376 l
-3542 5376 l
-3543 5376 m
-3632 5376 l
-3632 5377 l
-3543 5377 l
-3544 5377 m
-3631 5377 l
-3631 5378 l
-3544 5378 l
-3545 5378 m
-3630 5378 l
-3630 5379 l
-3545 5379 l
-3547 5379 m
-3629 5379 l
-3629 5380 l
-3547 5380 l
-3548 5380 m
-3629 5380 l
-3629 5381 l
-3548 5381 l
-3549 5381 m
-3628 5381 l
-3628 5382 l
-3549 5382 l
-3550 5382 m
-3627 5382 l
-3627 5383 l
-3550 5383 l
-3551 5383 m
-3626 5383 l
-3626 5384 l
-3551 5384 l
-3553 5384 m
-3625 5384 l
-3625 5385 l
-3553 5385 l
-3554 5385 m
-3625 5385 l
-3625 5386 l
-3554 5386 l
-3555 5386 m
-3624 5386 l
-3624 5387 l
-3555 5387 l
-3556 5387 m
-3623 5387 l
-3623 5388 l
-3556 5388 l
-3558 5388 m
-3622 5388 l
-3622 5389 l
-3558 5389 l
-3559 5389 m
-3621 5389 l
-3621 5390 l
-3559 5390 l
-3560 5390 m
-3621 5390 l
-3621 5391 l
-3560 5391 l
-3561 5391 m
-3620 5391 l
-3620 5392 l
-3561 5392 l
-3563 5392 m
-3619 5392 l
-3619 5393 l
-3563 5393 l
-3564 5393 m
-3618 5393 l
-3618 5394 l
-3564 5394 l
-3565 5394 m
-3617 5394 l
-3617 5395 l
-3565 5395 l
-3566 5395 m
-3617 5395 l
-3617 5396 l
-3566 5396 l
-3568 5396 m
-3616 5396 l
-3616 5397 l
-3568 5397 l
-3569 5397 m
-3615 5397 l
-3615 5398 l
-3569 5398 l
-3570 5398 m
-3614 5398 l
-3614 5399 l
-3570 5399 l
-3571 5399 m
-3613 5399 l
-3613 5400 l
-3571 5400 l
-3573 5400 m
-3613 5400 l
-3613 5401 l
-3573 5401 l
-3574 5401 m
-3612 5401 l
-3612 5402 l
-3574 5402 l
-3575 5402 m
-3611 5402 l
-3611 5403 l
-3575 5403 l
-3576 5403 m
-3610 5403 l
-3610 5404 l
-3576 5404 l
-3578 5404 m
-3609 5404 l
-3609 5405 l
-3578 5405 l
-3579 5405 m
-3609 5405 l
-3609 5406 l
-3579 5406 l
-3580 5406 m
-3608 5406 l
-3608 5407 l
-3580 5407 l
-3581 5407 m
-3607 5407 l
-3607 5408 l
-3581 5408 l
-3583 5408 m
-3606 5408 l
-3606 5409 l
-3583 5409 l
-3584 5409 m
-3605 5409 l
-3605 5410 l
-3584 5410 l
-3585 5410 m
-3605 5410 l
-3605 5411 l
-3585 5411 l
-3586 5411 m
-3604 5411 l
-3604 5412 l
-3586 5412 l
-3588 5412 m
-3603 5412 l
-3603 5413 l
-3588 5413 l
-3589 5413 m
-3602 5413 l
-3602 5414 l
-3589 5414 l
-3590 5414 m
-3601 5414 l
-3601 5415 l
-3590 5415 l
-3591 5415 m
-3601 5415 l
-3601 5416 l
-3591 5416 l
-3593 5416 m
-3600 5416 l
-3600 5417 l
-3593 5417 l
-3594 5417 m
-3599 5417 l
-3599 5418 l
-3594 5418 l
-3595 5418 m
-3598 5418 l
-3598 5419 l
-3595 5419 l
-Y
-3711.6 5275 m
-3617 5200 l
-3502 5343 l
-3597 5419 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3631 5243 m
-3627 5240 l
-3618 5238 l
-3612 5239 l
-3604 5243 l
-3593 5256 l
-3592 5265 l
-3592 5271 l
-3596 5279 l
-3603 5284 l
-3612 5286 l
-3627 5288 l
-3685 5281 l
-3649 5327 l
-S
-3549 5311 m
-3560 5304 l
-3575 5305 l
-3594 5315 l
-3604 5323 l
-3618 5339 l
-3622 5353 l
-3618 5366 l
-3613 5372 l
-3602 5380 l
-3587 5378 l
-3568 5369 l
-3558 5361 l
-3544 5344 l
-3539 5330 l
-3544 5318 l
-3549 5311 l
-S
-1 g
-3938 4336 m
-3946 4336 l
-3946 4337 l
-3938 4337 l
-3938 4337 m
-3953 4337 l
-3953 4338 l
-3938 4338 l
-3938 4338 m
-3960 4338 l
-3960 4339 l
-3938 4339 l
-3938 4339 m
-3967 4339 l
-3967 4340 l
-3938 4340 l
-3938 4340 m
-3973 4340 l
-3973 4341 l
-3938 4341 l
-3938 4341 m
-3980 4341 l
-3980 4342 l
-3938 4342 l
-3937 4342 m
-3987 4342 l
-3987 4343 l
-3937 4343 l
-3937 4343 m
-3994 4343 l
-3994 4344 l
-3937 4344 l
-3937 4344 m
-4001 4344 l
-4001 4345 l
-3937 4345 l
-3937 4345 m
-4007 4345 l
-4007 4346 l
-3937 4346 l
-3937 4346 m
-4014 4346 l
-4014 4347 l
-3937 4347 l
-3937 4347 m
-4021 4347 l
-4021 4348 l
-3937 4348 l
-3936 4348 m
-4028 4348 l
-4028 4349 l
-3936 4349 l
-3936 4349 m
-4035 4349 l
-4035 4350 l
-3936 4350 l
-3936 4350 m
-4041 4350 l
-4041 4351 l
-3936 4351 l
-3936 4351 m
-4048 4351 l
-4048 4352 l
-3936 4352 l
-3936 4352 m
-4055 4352 l
-4055 4353 l
-3936 4353 l
-3936 4353 m
-4059 4353 l
-4059 4354 l
-3936 4354 l
-3936 4354 m
-4059 4354 l
-4059 4355 l
-3936 4355 l
-3935 4355 m
-4059 4355 l
-4059 4357 l
-3935 4357 l
-3935 4357 m
-4058 4357 l
-4058 4361 l
-3935 4361 l
-3934 4361 m
-4058 4361 l
-4058 4364 l
-3934 4364 l
-3934 4364 m
-4057 4364 l
-4057 4368 l
-3934 4368 l
-3933 4368 m
-4057 4368 l
-4057 4371 l
-3933 4371 l
-3933 4371 m
-4056 4371 l
-4056 4374 l
-3933 4374 l
-3932 4374 m
-4056 4374 l
-4056 4377 l
-3932 4377 l
-3932 4377 m
-4055 4377 l
-4055 4381 l
-3932 4381 l
-3931 4381 m
-4055 4381 l
-4055 4384 l
-3931 4384 l
-3931 4384 m
-4054 4384 l
-4054 4387 l
-3931 4387 l
-3930 4387 m
-4054 4387 l
-4054 4390 l
-3930 4390 l
-3930 4390 m
-4053 4390 l
-4053 4394 l
-3930 4394 l
-3929 4394 m
-4053 4394 l
-4053 4397 l
-3929 4397 l
-3929 4397 m
-4052 4397 l
-4052 4400 l
-3929 4400 l
-3928 4400 m
-4052 4400 l
-4052 4404 l
-3928 4404 l
-3928 4404 m
-4051 4404 l
-4051 4407 l
-3928 4407 l
-3927 4407 m
-4051 4407 l
-4051 4410 l
-3927 4410 l
-3927 4410 m
-4050 4410 l
-4050 4413 l
-3927 4413 l
-3926 4413 m
-4050 4413 l
-4050 4417 l
-3926 4417 l
-3926 4417 m
-4049 4417 l
-4049 4420 l
-3926 4420 l
-3925 4420 m
-4049 4420 l
-4049 4423 l
-3925 4423 l
-3925 4423 m
-4048 4423 l
-4048 4426 l
-3925 4426 l
-3924 4426 m
-4048 4426 l
-4048 4430 l
-3924 4430 l
-3924 4430 m
-4047 4430 l
-4047 4432 l
-3924 4432 l
-3923 4432 m
-4047 4432 l
-4047 4437 l
-3923 4437 l
-3923 4437 m
-4046 4437 l
-4046 4439 l
-3923 4439 l
-3922 4439 m
-4046 4439 l
-4046 4443 l
-3922 4443 l
-3922 4443 m
-4045 4443 l
-4045 4445 l
-3922 4445 l
-3921 4445 m
-4045 4445 l
-4045 4450 l
-3921 4450 l
-3921 4450 m
-4044 4450 l
-4044 4452 l
-3921 4452 l
-3920 4452 m
-4044 4452 l
-4044 4456 l
-3920 4456 l
-3920 4456 m
-4043 4456 l
-4043 4458 l
-3920 4458 l
-3919 4458 m
-4043 4458 l
-4043 4463 l
-3919 4463 l
-3919 4463 m
-4042 4463 l
-4042 4465 l
-3919 4465 l
-3918 4465 m
-4042 4465 l
-4042 4470 l
-3918 4470 l
-3918 4470 m
-4041 4470 l
-4041 4471 l
-3918 4471 l
-3917 4471 m
-4041 4471 l
-4041 4476 l
-3917 4476 l
-3917 4476 m
-4040 4476 l
-4040 4478 l
-3917 4478 l
-3916 4478 m
-4040 4478 l
-4040 4483 l
-3916 4483 l
-3916 4483 m
-4039 4483 l
-4039 4484 l
-3916 4484 l
-3915 4484 m
-4039 4484 l
-4039 4489 l
-3915 4489 l
-3915 4489 m
-4038 4489 l
-4038 4491 l
-3915 4491 l
-3914 4491 m
-4038 4491 l
-4038 4496 l
-3914 4496 l
-3914 4496 m
-4037 4496 l
-4037 4497 l
-3914 4497 l
-3913 4497 m
-4037 4497 l
-4037 4503 l
-3913 4503 l
-3913 4503 m
-4036 4503 l
-4036 4504 l
-3913 4504 l
-3912 4504 m
-4036 4504 l
-4036 4509 l
-3912 4509 l
-3912 4509 m
-4035 4509 l
-4035 4510 l
-3912 4510 l
-3911 4510 m
-4035 4510 l
-4035 4516 l
-3911 4516 l
-3911 4516 m
-4034 4516 l
-4034 4517 l
-3911 4517 l
-3911 4517 m
-4034 4517 l
-4034 4518 l
-3911 4518 l
-3917 4518 m
-4034 4518 l
-4034 4519 l
-3917 4519 l
-3924 4519 m
-4034 4519 l
-4034 4520 l
-3924 4520 l
-3931 4520 m
-4034 4520 l
-4034 4521 l
-3931 4521 l
-3937 4521 m
-4034 4521 l
-4034 4522 l
-3937 4522 l
-3944 4522 m
-4033 4522 l
-4033 4523 l
-3944 4523 l
-3951 4523 m
-4033 4523 l
-4033 4524 l
-3951 4524 l
-3957 4524 m
-4033 4524 l
-4033 4525 l
-3957 4525 l
-3964 4525 m
-4033 4525 l
-4033 4526 l
-3964 4526 l
-3971 4526 m
-4033 4526 l
-4033 4527 l
-3971 4527 l
-3977 4527 m
-4033 4527 l
-4033 4528 l
-3977 4528 l
-3984 4528 m
-4033 4528 l
-4033 4529 l
-3984 4529 l
-3991 4529 m
-4032 4529 l
-4032 4530 l
-3991 4530 l
-3997 4530 m
-4032 4530 l
-4032 4531 l
-3997 4531 l
-4004 4531 m
-4032 4531 l
-4032 4532 l
-4004 4532 l
-4011 4532 m
-4032 4532 l
-4032 4533 l
-4011 4533 l
-4017 4533 m
-4032 4533 l
-4032 4534 l
-4017 4534 l
-4024 4534 m
-4032 4534 l
-4032 4535 l
-4024 4535 l
-Y
-4058.5 4353.6 m
-3939 4336 l
-3911 4517 l
-4031 4535 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3972 4366 m
-3968 4365 l
-3959 4368 l
-3954 4372 l
-3949 4379 l
-3947 4396 l
-3949 4405 l
-3953 4410 l
-3961 4415 l
-3969 4416 l
-3978 4413 l
-3991 4407 l
-4039 4372 l
-4030 4430 l
-S
-3960 4449 m
-3956 4448 l
-3947 4451 l
-3942 4454 l
-3937 4462 l
-3934 4478 l
-3937 4487 l
-3941 4492 l
-3948 4497 l
-3956 4499 l
-3965 4496 l
-3979 4489 l
-4026 4454 l
-4018 4512 l
-S
-1 g
-2292 3957 m
-2296 3957 l
-2296 3958 l
-2292 3958 l
-2289 3958 m
-2296 3958 l
-2296 3959 l
-2289 3959 l
-2287 3959 m
-2297 3959 l
-2297 3960 l
-2287 3960 l
-2284 3960 m
-2297 3960 l
-2297 3961 l
-2284 3961 l
-2282 3961 m
-2297 3961 l
-2297 3962 l
-2282 3962 l
-2279 3962 m
-2298 3962 l
-2298 3963 l
-2279 3963 l
-2277 3963 m
-2298 3963 l
-2298 3964 l
-2277 3964 l
-2274 3964 m
-2299 3964 l
-2299 3965 l
-2274 3965 l
-2272 3965 m
-2299 3965 l
-2299 3966 l
-2272 3966 l
-2269 3966 m
-2299 3966 l
-2299 3967 l
-2269 3967 l
-2267 3967 m
-2300 3967 l
-2300 3968 l
-2267 3968 l
-2264 3968 m
-2300 3968 l
-2300 3969 l
-2264 3969 l
-2262 3969 m
-2301 3969 l
-2301 3970 l
-2262 3970 l
-2259 3970 m
-2301 3970 l
-2301 3971 l
-2259 3971 l
-2256 3971 m
-2301 3971 l
-2301 3972 l
-2256 3972 l
-2254 3972 m
-2302 3972 l
-2302 3973 l
-2254 3973 l
-2251 3973 m
-2302 3973 l
-2302 3974 l
-2251 3974 l
-2249 3974 m
-2303 3974 l
-2303 3975 l
-2249 3975 l
-2246 3975 m
-2303 3975 l
-2303 3976 l
-2246 3976 l
-2244 3976 m
-2303 3976 l
-2303 3977 l
-2244 3977 l
-2241 3977 m
-2304 3977 l
-2304 3978 l
-2241 3978 l
-2239 3978 m
-2304 3978 l
-2304 3979 l
-2239 3979 l
-2236 3979 m
-2305 3979 l
-2305 3980 l
-2236 3980 l
-2234 3980 m
-2305 3980 l
-2305 3981 l
-2234 3981 l
-2231 3981 m
-2305 3981 l
-2305 3982 l
-2231 3982 l
-2229 3982 m
-2306 3982 l
-2306 3983 l
-2229 3983 l
-2226 3983 m
-2306 3983 l
-2306 3984 l
-2226 3984 l
-2224 3984 m
-2307 3984 l
-2307 3985 l
-2224 3985 l
-2221 3985 m
-2307 3985 l
-2307 3986 l
-2221 3986 l
-2218 3986 m
-2307 3986 l
-2307 3987 l
-2218 3987 l
-2216 3987 m
-2308 3987 l
-2308 3988 l
-2216 3988 l
-2213 3988 m
-2308 3988 l
-2308 3989 l
-2213 3989 l
-2211 3989 m
-2308 3989 l
-2308 3990 l
-2211 3990 l
-2208 3990 m
-2309 3990 l
-2309 3991 l
-2208 3991 l
-2206 3991 m
-2309 3991 l
-2309 3992 l
-2206 3992 l
-2203 3992 m
-2310 3992 l
-2310 3993 l
-2203 3993 l
-2201 3993 m
-2310 3993 l
-2310 3994 l
-2201 3994 l
-2198 3994 m
-2310 3994 l
-2310 3995 l
-2198 3995 l
-2196 3995 m
-2311 3995 l
-2311 3996 l
-2196 3996 l
-2193 3996 m
-2311 3996 l
-2311 3997 l
-2193 3997 l
-2191 3997 m
-2312 3997 l
-2312 3998 l
-2191 3998 l
-2188 3998 m
-2312 3998 l
-2312 3999 l
-2188 3999 l
-2186 3999 m
-2312 3999 l
-2312 4000 l
-2186 4000 l
-2183 4000 m
-2313 4000 l
-2313 4001 l
-2183 4001 l
-2180 4001 m
-2313 4001 l
-2313 4002 l
-2180 4002 l
-2178 4002 m
-2314 4002 l
-2314 4003 l
-2178 4003 l
-2175 4003 m
-2314 4003 l
-2314 4004 l
-2175 4004 l
-2173 4004 m
-2314 4004 l
-2314 4005 l
-2173 4005 l
-2170 4005 m
-2315 4005 l
-2315 4006 l
-2170 4006 l
-2168 4006 m
-2315 4006 l
-2315 4007 l
-2168 4007 l
-2165 4007 m
-2316 4007 l
-2316 4008 l
-2165 4008 l
-2163 4008 m
-2316 4008 l
-2316 4009 l
-2163 4009 l
-2160 4009 m
-2316 4009 l
-2316 4010 l
-2160 4010 l
-2158 4010 m
-2317 4010 l
-2317 4011 l
-2158 4011 l
-2155 4011 m
-2317 4011 l
-2317 4012 l
-2155 4012 l
-2153 4012 m
-2318 4012 l
-2318 4013 l
-2153 4013 l
-2150 4013 m
-2318 4013 l
-2318 4014 l
-2150 4014 l
-2147 4014 m
-2318 4014 l
-2318 4015 l
-2147 4015 l
-2145 4015 m
-2319 4015 l
-2319 4016 l
-2145 4016 l
-2142 4016 m
-2319 4016 l
-2319 4017 l
-2142 4017 l
-2140 4017 m
-2320 4017 l
-2320 4018 l
-2140 4018 l
-2137 4018 m
-2320 4018 l
-2320 4019 l
-2137 4019 l
-2135 4019 m
-2320 4019 l
-2320 4020 l
-2135 4020 l
-2132 4020 m
-2321 4020 l
-2321 4021 l
-2132 4021 l
-2130 4021 m
-2321 4021 l
-2321 4022 l
-2130 4022 l
-2127 4022 m
-2321 4022 l
-2321 4023 l
-2127 4023 l
-2125 4023 m
-2322 4023 l
-2322 4024 l
-2125 4024 l
-2122 4024 m
-2322 4024 l
-2322 4025 l
-2122 4025 l
-2120 4025 m
-2323 4025 l
-2323 4026 l
-2120 4026 l
-2117 4026 m
-2323 4026 l
-2323 4027 l
-2117 4027 l
-2115 4027 m
-2323 4027 l
-2323 4028 l
-2115 4028 l
-2112 4028 m
-2324 4028 l
-2324 4029 l
-2112 4029 l
-2109 4029 m
-2324 4029 l
-2324 4030 l
-2109 4030 l
-2107 4030 m
-2325 4030 l
-2325 4031 l
-2107 4031 l
-2104 4031 m
-2325 4031 l
-2325 4032 l
-2104 4032 l
-2102 4032 m
-2325 4032 l
-2325 4033 l
-2102 4033 l
-2099 4033 m
-2326 4033 l
-2326 4034 l
-2099 4034 l
-2097 4034 m
-2326 4034 l
-2326 4035 l
-2097 4035 l
-2094 4035 m
-2327 4035 l
-2327 4036 l
-2094 4036 l
-2092 4036 m
-2327 4036 l
-2327 4037 l
-2092 4037 l
-2089 4037 m
-2327 4037 l
-2327 4038 l
-2089 4038 l
-2087 4038 m
-2328 4038 l
-2328 4039 l
-2087 4039 l
-2084 4039 m
-2328 4039 l
-2328 4040 l
-2084 4040 l
-2082 4040 m
-2329 4040 l
-2329 4041 l
-2082 4041 l
-2079 4041 m
-2329 4041 l
-2329 4042 l
-2079 4042 l
-2077 4042 m
-2329 4042 l
-2329 4043 l
-2077 4043 l
-2074 4043 m
-2330 4043 l
-2330 4044 l
-2074 4044 l
-2071 4044 m
-2330 4044 l
-2330 4045 l
-2071 4045 l
-2069 4045 m
-2331 4045 l
-2331 4046 l
-2069 4046 l
-2066 4046 m
-2331 4046 l
-2331 4047 l
-2066 4047 l
-2064 4047 m
-2331 4047 l
-2331 4048 l
-2064 4048 l
-2061 4048 m
-2332 4048 l
-2332 4049 l
-2061 4049 l
-2059 4049 m
-2332 4049 l
-2332 4050 l
-2059 4050 l
-2056 4050 m
-2333 4050 l
-2333 4051 l
-2056 4051 l
-2054 4051 m
-2333 4051 l
-2333 4052 l
-2054 4052 l
-2051 4052 m
-2333 4052 l
-2333 4053 l
-2051 4053 l
-2049 4053 m
-2334 4053 l
-2334 4054 l
-2049 4054 l
-2046 4054 m
-2334 4054 l
-2334 4055 l
-2046 4055 l
-2044 4055 m
-2334 4055 l
-2334 4056 l
-2044 4056 l
-2041 4056 m
-2335 4056 l
-2335 4057 l
-2041 4057 l
-2038 4057 m
-2335 4057 l
-2335 4058 l
-2038 4058 l
-2036 4058 m
-2336 4058 l
-2336 4059 l
-2036 4059 l
-2033 4059 m
-2336 4059 l
-2336 4060 l
-2033 4060 l
-2031 4060 m
-2336 4060 l
-2336 4061 l
-2031 4061 l
-2028 4061 m
-2337 4061 l
-2337 4062 l
-2028 4062 l
-2026 4062 m
-2337 4062 l
-2337 4063 l
-2026 4063 l
-2023 4063 m
-2338 4063 l
-2338 4064 l
-2023 4064 l
-2021 4064 m
-2338 4064 l
-2338 4065 l
-2021 4065 l
-2018 4065 m
-2338 4065 l
-2338 4066 l
-2018 4066 l
-2016 4066 m
-2339 4066 l
-2339 4067 l
-2016 4067 l
-2013 4067 m
-2339 4067 l
-2339 4068 l
-2013 4068 l
-2011 4068 m
-2340 4068 l
-2340 4069 l
-2011 4069 l
-2008 4069 m
-2340 4069 l
-2340 4070 l
-2008 4070 l
-2006 4070 m
-2338 4070 l
-2338 4071 l
-2006 4071 l
-2003 4071 m
-2335 4071 l
-2335 4072 l
-2003 4072 l
-2000 4072 m
-2333 4072 l
-2333 4073 l
-2000 4073 l
-1998 4073 m
-2330 4073 l
-2330 4074 l
-1998 4074 l
-1995 4074 m
-2328 4074 l
-2328 4075 l
-1995 4075 l
-1993 4075 m
-2325 4075 l
-2325 4076 l
-1993 4076 l
-1990 4076 m
-2323 4076 l
-2323 4077 l
-1990 4077 l
-1988 4077 m
-2320 4077 l
-2320 4078 l
-1988 4078 l
-1985 4078 m
-2318 4078 l
-2318 4079 l
-1985 4079 l
-1983 4079 m
-2315 4079 l
-2315 4080 l
-1983 4080 l
-1980 4080 m
-2312 4080 l
-2312 4081 l
-1980 4081 l
-1978 4081 m
-2310 4081 l
-2310 4082 l
-1978 4082 l
-1975 4082 m
-2307 4082 l
-2307 4083 l
-1975 4083 l
-1973 4083 m
-2305 4083 l
-2305 4084 l
-1973 4084 l
-1970 4084 m
-2302 4084 l
-2302 4085 l
-1970 4085 l
-1968 4085 m
-2300 4085 l
-2300 4086 l
-1968 4086 l
-1965 4086 m
-2297 4086 l
-2297 4087 l
-1965 4087 l
-1962 4087 m
-2295 4087 l
-2295 4088 l
-1962 4088 l
-1960 4088 m
-2292 4088 l
-2292 4089 l
-1960 4089 l
-1957 4089 m
-2290 4089 l
-2290 4090 l
-1957 4090 l
-1955 4090 m
-2287 4090 l
-2287 4091 l
-1955 4091 l
-1952 4091 m
-2285 4091 l
-2285 4092 l
-1952 4092 l
-1950 4092 m
-2282 4092 l
-2282 4093 l
-1950 4093 l
-1947 4093 m
-2280 4093 l
-2280 4094 l
-1947 4094 l
-1945 4094 m
-2277 4094 l
-2277 4095 l
-1945 4095 l
-1942 4095 m
-2275 4095 l
-2275 4096 l
-1942 4096 l
-1940 4096 m
-2272 4096 l
-2272 4097 l
-1940 4097 l
-1937 4097 m
-2270 4097 l
-2270 4098 l
-1937 4098 l
-1935 4098 m
-2267 4098 l
-2267 4099 l
-1935 4099 l
-1932 4099 m
-2265 4099 l
-2265 4100 l
-1932 4100 l
-1930 4100 m
-2262 4100 l
-2262 4101 l
-1930 4101 l
-1930 4101 m
-2259 4101 l
-2259 4102 l
-1930 4102 l
-1930 4102 m
-2257 4102 l
-2257 4103 l
-1930 4103 l
-1930 4103 m
-2254 4103 l
-2254 4104 l
-1930 4104 l
-1931 4104 m
-2252 4104 l
-2252 4105 l
-1931 4105 l
-1931 4105 m
-2249 4105 l
-2249 4106 l
-1931 4106 l
-1931 4106 m
-2247 4106 l
-2247 4107 l
-1931 4107 l
-1932 4107 m
-2244 4107 l
-2244 4108 l
-1932 4108 l
-1932 4108 m
-2242 4108 l
-2242 4109 l
-1932 4109 l
-1933 4109 m
-2239 4109 l
-2239 4110 l
-1933 4110 l
-1933 4110 m
-2237 4110 l
-2237 4111 l
-1933 4111 l
-1933 4111 m
-2234 4111 l
-2234 4112 l
-1933 4112 l
-1934 4112 m
-2232 4112 l
-2232 4113 l
-1934 4113 l
-1934 4113 m
-2229 4113 l
-2229 4114 l
-1934 4114 l
-1935 4114 m
-2227 4114 l
-2227 4115 l
-1935 4115 l
-1935 4115 m
-2224 4115 l
-2224 4116 l
-1935 4116 l
-1935 4116 m
-2222 4116 l
-2222 4117 l
-1935 4117 l
-1936 4117 m
-2219 4117 l
-2219 4118 l
-1936 4118 l
-1936 4118 m
-2217 4118 l
-2217 4119 l
-1936 4119 l
-1937 4119 m
-2214 4119 l
-2214 4120 l
-1937 4120 l
-1937 4120 m
-2212 4120 l
-2212 4121 l
-1937 4121 l
-1937 4121 m
-2209 4121 l
-2209 4122 l
-1937 4122 l
-1938 4122 m
-2207 4122 l
-2207 4123 l
-1938 4123 l
-1938 4123 m
-2204 4123 l
-2204 4124 l
-1938 4124 l
-1938 4124 m
-2201 4124 l
-2201 4125 l
-1938 4125 l
-1939 4125 m
-2199 4125 l
-2199 4126 l
-1939 4126 l
-1939 4126 m
-2196 4126 l
-2196 4127 l
-1939 4127 l
-1940 4127 m
-2194 4127 l
-2194 4128 l
-1940 4128 l
-1940 4128 m
-2191 4128 l
-2191 4129 l
-1940 4129 l
-1940 4129 m
-2189 4129 l
-2189 4130 l
-1940 4130 l
-1941 4130 m
-2186 4130 l
-2186 4131 l
-1941 4131 l
-1941 4131 m
-2184 4131 l
-2184 4132 l
-1941 4132 l
-1942 4132 m
-2181 4132 l
-2181 4133 l
-1942 4133 l
-1942 4133 m
-2179 4133 l
-2179 4134 l
-1942 4134 l
-1942 4134 m
-2176 4134 l
-2176 4135 l
-1942 4135 l
-1943 4135 m
-2174 4135 l
-2174 4136 l
-1943 4136 l
-1943 4136 m
-2171 4136 l
-2171 4137 l
-1943 4137 l
-1944 4137 m
-2169 4137 l
-2169 4138 l
-1944 4138 l
-1944 4138 m
-2166 4138 l
-2166 4139 l
-1944 4139 l
-1944 4139 m
-2164 4139 l
-2164 4140 l
-1944 4140 l
-1945 4140 m
-2161 4140 l
-2161 4141 l
-1945 4141 l
-1945 4141 m
-2159 4141 l
-2159 4142 l
-1945 4142 l
-1945 4142 m
-2156 4142 l
-2156 4143 l
-1945 4143 l
-1946 4143 m
-2154 4143 l
-2154 4144 l
-1946 4144 l
-1946 4144 m
-2151 4144 l
-2151 4145 l
-1946 4145 l
-1947 4145 m
-2149 4145 l
-2149 4146 l
-1947 4146 l
-1947 4146 m
-2146 4146 l
-2146 4147 l
-1947 4147 l
-1947 4147 m
-2143 4147 l
-2143 4148 l
-1947 4148 l
-1948 4148 m
-2141 4148 l
-2141 4149 l
-1948 4149 l
-1948 4149 m
-2138 4149 l
-2138 4150 l
-1948 4150 l
-1949 4150 m
-2136 4150 l
-2136 4151 l
-1949 4151 l
-1949 4151 m
-2133 4151 l
-2133 4152 l
-1949 4152 l
-1949 4152 m
-2131 4152 l
-2131 4153 l
-1949 4153 l
-1950 4153 m
-2128 4153 l
-2128 4154 l
-1950 4154 l
-1950 4154 m
-2126 4154 l
-2126 4155 l
-1950 4155 l
-1951 4155 m
-2123 4155 l
-2123 4156 l
-1951 4156 l
-1951 4156 m
-2121 4156 l
-2121 4157 l
-1951 4157 l
-1951 4157 m
-2118 4157 l
-2118 4158 l
-1951 4158 l
-1952 4158 m
-2116 4158 l
-2116 4159 l
-1952 4159 l
-1952 4159 m
-2113 4159 l
-2113 4160 l
-1952 4160 l
-1952 4160 m
-2111 4160 l
-2111 4161 l
-1952 4161 l
-1953 4161 m
-2108 4161 l
-2108 4162 l
-1953 4162 l
-1953 4162 m
-2106 4162 l
-2106 4163 l
-1953 4163 l
-1954 4163 m
-2103 4163 l
-2103 4164 l
-1954 4164 l
-1954 4164 m
-2101 4164 l
-2101 4165 l
-1954 4165 l
-1954 4165 m
-2098 4165 l
-2098 4166 l
-1954 4166 l
-1955 4166 m
-2096 4166 l
-2096 4167 l
-1955 4167 l
-1955 4167 m
-2093 4167 l
-2093 4168 l
-1955 4168 l
-1956 4168 m
-2091 4168 l
-2091 4169 l
-1956 4169 l
-1956 4169 m
-2088 4169 l
-2088 4170 l
-1956 4170 l
-1956 4170 m
-2085 4170 l
-2085 4171 l
-1956 4171 l
-1957 4171 m
-2083 4171 l
-2083 4172 l
-1957 4172 l
-1957 4172 m
-2080 4172 l
-2080 4173 l
-1957 4173 l
-1958 4173 m
-2078 4173 l
-2078 4174 l
-1958 4174 l
-1958 4174 m
-2075 4174 l
-2075 4175 l
-1958 4175 l
-1958 4175 m
-2073 4175 l
-2073 4176 l
-1958 4176 l
-1959 4176 m
-2070 4176 l
-2070 4177 l
-1959 4177 l
-1959 4177 m
-2068 4177 l
-2068 4178 l
-1959 4178 l
-1959 4178 m
-2065 4178 l
-2065 4179 l
-1959 4179 l
-1960 4179 m
-2063 4179 l
-2063 4180 l
-1960 4180 l
-1960 4180 m
-2060 4180 l
-2060 4181 l
-1960 4181 l
-1961 4181 m
-2058 4181 l
-2058 4182 l
-1961 4182 l
-1961 4182 m
-2055 4182 l
-2055 4183 l
-1961 4183 l
-1961 4183 m
-2053 4183 l
-2053 4184 l
-1961 4184 l
-1962 4184 m
-2050 4184 l
-2050 4185 l
-1962 4185 l
-1962 4185 m
-2048 4185 l
-2048 4186 l
-1962 4186 l
-1963 4186 m
-2045 4186 l
-2045 4187 l
-1963 4187 l
-1963 4187 m
-2043 4187 l
-2043 4188 l
-1963 4188 l
-1963 4188 m
-2040 4188 l
-2040 4189 l
-1963 4189 l
-1964 4189 m
-2038 4189 l
-2038 4190 l
-1964 4190 l
-1964 4190 m
-2035 4190 l
-2035 4191 l
-1964 4191 l
-1965 4191 m
-2033 4191 l
-2033 4192 l
-1965 4192 l
-1965 4192 m
-2030 4192 l
-2030 4193 l
-1965 4193 l
-1965 4193 m
-2027 4193 l
-2027 4194 l
-1965 4194 l
-1966 4194 m
-2025 4194 l
-2025 4195 l
-1966 4195 l
-1966 4195 m
-2022 4195 l
-2022 4196 l
-1966 4196 l
-1966 4196 m
-2020 4196 l
-2020 4197 l
-1966 4197 l
-1967 4197 m
-2017 4197 l
-2017 4198 l
-1967 4198 l
-1967 4198 m
-2015 4198 l
-2015 4199 l
-1967 4199 l
-1968 4199 m
-2012 4199 l
-2012 4200 l
-1968 4200 l
-1968 4200 m
-2010 4200 l
-2010 4201 l
-1968 4201 l
-1968 4201 m
-2007 4201 l
-2007 4202 l
-1968 4202 l
-1969 4202 m
-2005 4202 l
-2005 4203 l
-1969 4203 l
-1969 4203 m
-2002 4203 l
-2002 4204 l
-1969 4204 l
-1970 4204 m
-2000 4204 l
-2000 4205 l
-1970 4205 l
-1970 4205 m
-1997 4205 l
-1997 4206 l
-1970 4206 l
-1970 4206 m
-1995 4206 l
-1995 4207 l
-1970 4207 l
-1971 4207 m
-1992 4207 l
-1992 4208 l
-1971 4208 l
-1971 4208 m
-1990 4208 l
-1990 4209 l
-1971 4209 l
-1972 4209 m
-1987 4209 l
-1987 4210 l
-1972 4210 l
-1972 4210 m
-1985 4210 l
-1985 4211 l
-1972 4211 l
-1972 4211 m
-1982 4211 l
-1982 4212 l
-1972 4212 l
-1973 4212 m
-1980 4212 l
-1980 4213 l
-1973 4213 l
-1973 4213 m
-1977 4213 l
-1977 4214 l
-1973 4214 l
-Y
-2339.2 4069.2 m
-2295 3957 l
-1930 4101 l
-1974 4214 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2242 4027 m
-2250 4037 l
-2261 4042 l
-2274 4041 l
-2278 4040 l
-2288 4031 l
-2293 4020 l
-2292 4007 l
-2291 4003 l
-2282 3993 l
-2271 3988 l
-2258 3989 l
-2254 3991 l
-2244 3999 l
-2239 4010 l
-2242 4027 l
-2249 4046 l
-2261 4064 l
-2273 4073 l
-2286 4072 l
-2294 4069 l
-2304 4061 l
-2305 4051 l
-S
-2180 4020 m
-2194 4019 l
-2206 4028 l
-2217 4046 l
-2222 4057 l
-2226 4078 l
-2223 4093 l
-2213 4101 l
-2205 4104 l
-2192 4105 l
-2179 4097 l
-2168 4079 l
-2163 4067 l
-2159 4046 l
-2162 4031 l
-2173 4023 l
-2180 4020 l
-S
-2129 4072 m
-2134 4074 l
-2132 4079 l
-2127 4077 l
-2129 4072 l
-S
-2147 4118 m
-2153 4121 l
-2150 4126 l
-2145 4124 l
-2147 4118 l
-S
-2064 4066 m
-2077 4065 l
-2089 4074 l
-2101 4092 l
-2106 4103 l
-2109 4124 l
-2106 4139 l
-2096 4148 l
-2088 4151 l
-2075 4151 l
-2063 4143 l
-2051 4125 l
-2047 4113 l
-2043 4092 l
-2046 4078 l
-2056 4069 l
-2064 4066 l
-S
-1986 4097 m
-1999 4096 l
-2012 4105 l
-2023 4122 l
-2028 4134 l
-2032 4155 l
-2029 4170 l
-2018 4178 l
-2011 4181 l
-1998 4182 l
-1985 4173 l
-1974 4156 l
-1969 4144 l
-1965 4123 l
-1968 4108 l
-1978 4100 l
-1986 4097 l
-S
-1 g
-2732 3782 m
-2736 3782 l
-2736 3783 l
-2732 3783 l
-2729 3783 m
-2736 3783 l
-2736 3784 l
-2729 3784 l
-2727 3784 m
-2737 3784 l
-2737 3785 l
-2727 3785 l
-2724 3785 m
-2737 3785 l
-2737 3786 l
-2724 3786 l
-2722 3786 m
-2737 3786 l
-2737 3787 l
-2722 3787 l
-2719 3787 m
-2738 3787 l
-2738 3788 l
-2719 3788 l
-2717 3788 m
-2738 3788 l
-2738 3789 l
-2717 3789 l
-2714 3789 m
-2739 3789 l
-2739 3790 l
-2714 3790 l
-2712 3790 m
-2739 3790 l
-2739 3791 l
-2712 3791 l
-2709 3791 m
-2739 3791 l
-2739 3792 l
-2709 3792 l
-2707 3792 m
-2740 3792 l
-2740 3793 l
-2707 3793 l
-2704 3793 m
-2740 3793 l
-2740 3794 l
-2704 3794 l
-2702 3794 m
-2741 3794 l
-2741 3795 l
-2702 3795 l
-2699 3795 m
-2741 3795 l
-2741 3796 l
-2699 3796 l
-2697 3796 m
-2741 3796 l
-2741 3797 l
-2697 3797 l
-2694 3797 m
-2742 3797 l
-2742 3798 l
-2694 3798 l
-2692 3798 m
-2742 3798 l
-2742 3799 l
-2692 3799 l
-2689 3799 m
-2743 3799 l
-2743 3800 l
-2689 3800 l
-2687 3800 m
-2743 3800 l
-2743 3801 l
-2687 3801 l
-2684 3801 m
-2743 3801 l
-2743 3802 l
-2684 3802 l
-2682 3802 m
-2744 3802 l
-2744 3803 l
-2682 3803 l
-2679 3803 m
-2744 3803 l
-2744 3804 l
-2679 3804 l
-2677 3804 m
-2745 3804 l
-2745 3805 l
-2677 3805 l
-2674 3805 m
-2745 3805 l
-2745 3806 l
-2674 3806 l
-2672 3806 m
-2745 3806 l
-2745 3807 l
-2672 3807 l
-2669 3807 m
-2746 3807 l
-2746 3808 l
-2669 3808 l
-2667 3808 m
-2746 3808 l
-2746 3809 l
-2667 3809 l
-2664 3809 m
-2747 3809 l
-2747 3810 l
-2664 3810 l
-2662 3810 m
-2747 3810 l
-2747 3811 l
-2662 3811 l
-2659 3811 m
-2747 3811 l
-2747 3812 l
-2659 3812 l
-2657 3812 m
-2748 3812 l
-2748 3813 l
-2657 3813 l
-2654 3813 m
-2748 3813 l
-2748 3814 l
-2654 3814 l
-2652 3814 m
-2749 3814 l
-2749 3815 l
-2652 3815 l
-2649 3815 m
-2749 3815 l
-2749 3816 l
-2649 3816 l
-2646 3816 m
-2749 3816 l
-2749 3817 l
-2646 3817 l
-2644 3817 m
-2750 3817 l
-2750 3818 l
-2644 3818 l
-2641 3818 m
-2750 3818 l
-2750 3819 l
-2641 3819 l
-2639 3819 m
-2750 3819 l
-2750 3820 l
-2639 3820 l
-2636 3820 m
-2751 3820 l
-2751 3821 l
-2636 3821 l
-2634 3821 m
-2751 3821 l
-2751 3822 l
-2634 3822 l
-2631 3822 m
-2752 3822 l
-2752 3823 l
-2631 3823 l
-2629 3823 m
-2752 3823 l
-2752 3824 l
-2629 3824 l
-2626 3824 m
-2752 3824 l
-2752 3825 l
-2626 3825 l
-2624 3825 m
-2753 3825 l
-2753 3826 l
-2624 3826 l
-2621 3826 m
-2753 3826 l
-2753 3827 l
-2621 3827 l
-2619 3827 m
-2754 3827 l
-2754 3828 l
-2619 3828 l
-2616 3828 m
-2754 3828 l
-2754 3829 l
-2616 3829 l
-2614 3829 m
-2754 3829 l
-2754 3830 l
-2614 3830 l
-2611 3830 m
-2755 3830 l
-2755 3831 l
-2611 3831 l
-2609 3831 m
-2755 3831 l
-2755 3832 l
-2609 3832 l
-2606 3832 m
-2756 3832 l
-2756 3833 l
-2606 3833 l
-2604 3833 m
-2756 3833 l
-2756 3834 l
-2604 3834 l
-2601 3834 m
-2756 3834 l
-2756 3835 l
-2601 3835 l
-2599 3835 m
-2757 3835 l
-2757 3836 l
-2599 3836 l
-2596 3836 m
-2757 3836 l
-2757 3837 l
-2596 3837 l
-2594 3837 m
-2758 3837 l
-2758 3838 l
-2594 3838 l
-2591 3838 m
-2758 3838 l
-2758 3839 l
-2591 3839 l
-2589 3839 m
-2758 3839 l
-2758 3840 l
-2589 3840 l
-2586 3840 m
-2759 3840 l
-2759 3841 l
-2586 3841 l
-2584 3841 m
-2759 3841 l
-2759 3842 l
-2584 3842 l
-2581 3842 m
-2760 3842 l
-2760 3843 l
-2581 3843 l
-2579 3843 m
-2760 3843 l
-2760 3844 l
-2579 3844 l
-2576 3844 m
-2760 3844 l
-2760 3845 l
-2576 3845 l
-2574 3845 m
-2761 3845 l
-2761 3846 l
-2574 3846 l
-2571 3846 m
-2761 3846 l
-2761 3847 l
-2571 3847 l
-2569 3847 m
-2762 3847 l
-2762 3848 l
-2569 3848 l
-2566 3848 m
-2762 3848 l
-2762 3849 l
-2566 3849 l
-2564 3849 m
-2762 3849 l
-2762 3850 l
-2564 3850 l
-2564 3850 m
-2763 3850 l
-2763 3852 l
-2564 3852 l
-2564 3852 m
-2764 3852 l
-2764 3853 l
-2564 3853 l
-2565 3853 m
-2764 3853 l
-2764 3855 l
-2565 3855 l
-2566 3855 m
-2765 3855 l
-2765 3858 l
-2566 3858 l
-2567 3858 m
-2766 3858 l
-2766 3860 l
-2567 3860 l
-2568 3860 m
-2767 3860 l
-2767 3863 l
-2568 3863 l
-2569 3863 m
-2768 3863 l
-2768 3865 l
-2569 3865 l
-2570 3865 m
-2769 3865 l
-2769 3868 l
-2570 3868 l
-2571 3868 m
-2770 3868 l
-2770 3870 l
-2571 3870 l
-2572 3870 m
-2771 3870 l
-2771 3873 l
-2572 3873 l
-2573 3873 m
-2772 3873 l
-2772 3875 l
-2573 3875 l
-2574 3875 m
-2773 3875 l
-2773 3878 l
-2574 3878 l
-2575 3878 m
-2774 3878 l
-2774 3880 l
-2575 3880 l
-2576 3880 m
-2775 3880 l
-2775 3883 l
-2576 3883 l
-2577 3883 m
-2776 3883 l
-2776 3885 l
-2577 3885 l
-2578 3885 m
-2777 3885 l
-2777 3888 l
-2578 3888 l
-2579 3888 m
-2778 3888 l
-2778 3890 l
-2579 3890 l
-2580 3890 m
-2779 3890 l
-2779 3893 l
-2580 3893 l
-2581 3893 m
-2780 3893 l
-2780 3894 l
-2581 3894 l
-2581 3894 m
-2780 3894 l
-2780 3895 l
-2581 3895 l
-2582 3895 m
-2779 3895 l
-2779 3896 l
-2582 3896 l
-2582 3896 m
-2777 3896 l
-2777 3897 l
-2582 3897 l
-2582 3897 m
-2774 3897 l
-2774 3898 l
-2582 3898 l
-2583 3898 m
-2772 3898 l
-2772 3899 l
-2583 3899 l
-2583 3899 m
-2769 3899 l
-2769 3900 l
-2583 3900 l
-2584 3900 m
-2767 3900 l
-2767 3901 l
-2584 3901 l
-2584 3901 m
-2764 3901 l
-2764 3902 l
-2584 3902 l
-2584 3902 m
-2762 3902 l
-2762 3903 l
-2584 3903 l
-2585 3903 m
-2759 3903 l
-2759 3904 l
-2585 3904 l
-2585 3904 m
-2757 3904 l
-2757 3905 l
-2585 3905 l
-2586 3905 m
-2754 3905 l
-2754 3906 l
-2586 3906 l
-2586 3906 m
-2752 3906 l
-2752 3907 l
-2586 3907 l
-2586 3907 m
-2749 3907 l
-2749 3908 l
-2586 3908 l
-2587 3908 m
-2747 3908 l
-2747 3909 l
-2587 3909 l
-2587 3909 m
-2744 3909 l
-2744 3910 l
-2587 3910 l
-2588 3910 m
-2741 3910 l
-2741 3911 l
-2588 3911 l
-2588 3911 m
-2739 3911 l
-2739 3912 l
-2588 3912 l
-2588 3912 m
-2736 3912 l
-2736 3913 l
-2588 3913 l
-2589 3913 m
-2734 3913 l
-2734 3914 l
-2589 3914 l
-2589 3914 m
-2731 3914 l
-2731 3915 l
-2589 3915 l
-2590 3915 m
-2729 3915 l
-2729 3916 l
-2590 3916 l
-2590 3916 m
-2726 3916 l
-2726 3917 l
-2590 3917 l
-2590 3917 m
-2724 3917 l
-2724 3918 l
-2590 3918 l
-2591 3918 m
-2721 3918 l
-2721 3919 l
-2591 3919 l
-2591 3919 m
-2719 3919 l
-2719 3920 l
-2591 3920 l
-2592 3920 m
-2716 3920 l
-2716 3921 l
-2592 3921 l
-2592 3921 m
-2714 3921 l
-2714 3922 l
-2592 3922 l
-2592 3922 m
-2711 3922 l
-2711 3923 l
-2592 3923 l
-2593 3923 m
-2708 3923 l
-2708 3924 l
-2593 3924 l
-2593 3924 m
-2706 3924 l
-2706 3925 l
-2593 3925 l
-2594 3925 m
-2703 3925 l
-2703 3926 l
-2594 3926 l
-2594 3926 m
-2701 3926 l
-2701 3927 l
-2594 3927 l
-2594 3927 m
-2698 3927 l
-2698 3928 l
-2594 3928 l
-2595 3928 m
-2696 3928 l
-2696 3929 l
-2595 3929 l
-2595 3929 m
-2693 3929 l
-2693 3930 l
-2595 3930 l
-2596 3930 m
-2691 3930 l
-2691 3931 l
-2596 3931 l
-2596 3931 m
-2688 3931 l
-2688 3932 l
-2596 3932 l
-2596 3932 m
-2686 3932 l
-2686 3933 l
-2596 3933 l
-2597 3933 m
-2683 3933 l
-2683 3934 l
-2597 3934 l
-2597 3934 m
-2681 3934 l
-2681 3935 l
-2597 3935 l
-2598 3935 m
-2678 3935 l
-2678 3936 l
-2598 3936 l
-2598 3936 m
-2675 3936 l
-2675 3937 l
-2598 3937 l
-2598 3937 m
-2673 3937 l
-2673 3938 l
-2598 3938 l
-2599 3938 m
-2670 3938 l
-2670 3939 l
-2599 3939 l
-2599 3939 m
-2668 3939 l
-2668 3940 l
-2599 3940 l
-2600 3940 m
-2665 3940 l
-2665 3941 l
-2600 3941 l
-2600 3941 m
-2663 3941 l
-2663 3942 l
-2600 3942 l
-2600 3942 m
-2660 3942 l
-2660 3943 l
-2600 3943 l
-2601 3943 m
-2658 3943 l
-2658 3944 l
-2601 3944 l
-2601 3944 m
-2655 3944 l
-2655 3945 l
-2601 3945 l
-2602 3945 m
-2653 3945 l
-2653 3946 l
-2602 3946 l
-2602 3946 m
-2650 3946 l
-2650 3947 l
-2602 3947 l
-2602 3947 m
-2648 3947 l
-2648 3948 l
-2602 3948 l
-2603 3948 m
-2645 3948 l
-2645 3949 l
-2603 3949 l
-2603 3949 m
-2642 3949 l
-2642 3950 l
-2603 3950 l
-2604 3950 m
-2640 3950 l
-2640 3951 l
-2604 3951 l
-2604 3951 m
-2637 3951 l
-2637 3952 l
-2604 3952 l
-2604 3952 m
-2635 3952 l
-2635 3953 l
-2604 3953 l
-2605 3953 m
-2632 3953 l
-2632 3954 l
-2605 3954 l
-2605 3954 m
-2630 3954 l
-2630 3955 l
-2605 3955 l
-2606 3955 m
-2627 3955 l
-2627 3956 l
-2606 3956 l
-2606 3956 m
-2625 3956 l
-2625 3957 l
-2606 3957 l
-2606 3957 m
-2622 3957 l
-2622 3958 l
-2606 3958 l
-2607 3958 m
-2620 3958 l
-2620 3959 l
-2607 3959 l
-2607 3959 m
-2617 3959 l
-2617 3960 l
-2607 3960 l
-2608 3960 m
-2615 3960 l
-2615 3961 l
-2608 3961 l
-2608 3961 m
-2612 3961 l
-2612 3962 l
-2608 3962 l
-Y
-2779.5 3894.8 m
-2735 3782 l
-2564 3850 l
-2609 3962 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2675 3824 m
-2714 3808 l
-2732 3842 l
-2726 3840 l
-2713 3840 l
-2701 3845 l
-2691 3853 l
-2687 3864 l
-2687 3877 l
-2690 3885 l
-2699 3895 l
-2710 3900 l
-2723 3899 l
-2735 3895 l
-2745 3886 l
-2747 3881 l
-2748 3871 l
-S
-2625 3844 m
-2638 3843 l
-2645 3849 l
-2648 3857 l
-2647 3866 l
-2641 3873 l
-2627 3883 l
-2617 3892 l
-2612 3903 l
-2611 3912 l
-2616 3924 l
-2623 3930 l
-2628 3932 l
-2641 3932 l
-2657 3925 l
-2667 3917 l
-2669 3911 l
-2670 3902 l
-2666 3891 l
-2659 3884 l
-2648 3880 l
-2635 3880 l
-2617 3883 l
-2608 3882 l
-2601 3876 l
-2598 3868 l
-2599 3858 l
-2609 3850 l
-2625 3844 l
-S
-1 g
-3269 3569 m
-3273 3569 l
-3273 3570 l
-3269 3570 l
-3267 3570 m
-3273 3570 l
-3273 3571 l
-3267 3571 l
-3264 3571 m
-3274 3571 l
-3274 3572 l
-3264 3572 l
-3262 3572 m
-3274 3572 l
-3274 3573 l
-3262 3573 l
-3259 3573 m
-3274 3573 l
-3274 3574 l
-3259 3574 l
-3257 3574 m
-3275 3574 l
-3275 3575 l
-3257 3575 l
-3254 3575 m
-3275 3575 l
-3275 3576 l
-3254 3576 l
-3252 3576 m
-3276 3576 l
-3276 3577 l
-3252 3577 l
-3249 3577 m
-3276 3577 l
-3276 3578 l
-3249 3578 l
-3247 3578 m
-3276 3578 l
-3276 3579 l
-3247 3579 l
-3244 3579 m
-3277 3579 l
-3277 3580 l
-3244 3580 l
-3242 3580 m
-3277 3580 l
-3277 3581 l
-3242 3581 l
-3239 3581 m
-3278 3581 l
-3278 3582 l
-3239 3582 l
-3237 3582 m
-3278 3582 l
-3278 3583 l
-3237 3583 l
-3234 3583 m
-3278 3583 l
-3278 3584 l
-3234 3584 l
-3232 3584 m
-3279 3584 l
-3279 3585 l
-3232 3585 l
-3229 3585 m
-3279 3585 l
-3279 3586 l
-3229 3586 l
-3227 3586 m
-3280 3586 l
-3280 3587 l
-3227 3587 l
-3224 3587 m
-3280 3587 l
-3280 3588 l
-3224 3588 l
-3222 3588 m
-3280 3588 l
-3280 3589 l
-3222 3589 l
-3219 3589 m
-3281 3589 l
-3281 3590 l
-3219 3590 l
-3217 3590 m
-3281 3590 l
-3281 3591 l
-3217 3591 l
-3214 3591 m
-3282 3591 l
-3282 3592 l
-3214 3592 l
-3212 3592 m
-3282 3592 l
-3282 3593 l
-3212 3593 l
-3209 3593 m
-3282 3593 l
-3282 3594 l
-3209 3594 l
-3207 3594 m
-3283 3594 l
-3283 3595 l
-3207 3595 l
-3204 3595 m
-3283 3595 l
-3283 3596 l
-3204 3596 l
-3202 3596 m
-3284 3596 l
-3284 3597 l
-3202 3597 l
-3199 3597 m
-3284 3597 l
-3284 3598 l
-3199 3598 l
-3197 3598 m
-3284 3598 l
-3284 3599 l
-3197 3599 l
-3194 3599 m
-3285 3599 l
-3285 3600 l
-3194 3600 l
-3192 3600 m
-3285 3600 l
-3285 3601 l
-3192 3601 l
-3189 3601 m
-3286 3601 l
-3286 3602 l
-3189 3602 l
-3187 3602 m
-3286 3602 l
-3286 3603 l
-3187 3603 l
-3184 3603 m
-3286 3603 l
-3286 3604 l
-3184 3604 l
-3182 3604 m
-3287 3604 l
-3287 3605 l
-3182 3605 l
-3179 3605 m
-3287 3605 l
-3287 3606 l
-3179 3606 l
-3177 3606 m
-3288 3606 l
-3288 3607 l
-3177 3607 l
-3174 3607 m
-3288 3607 l
-3288 3608 l
-3174 3608 l
-3172 3608 m
-3288 3608 l
-3288 3609 l
-3172 3609 l
-3169 3609 m
-3289 3609 l
-3289 3610 l
-3169 3610 l
-3167 3610 m
-3289 3610 l
-3289 3611 l
-3167 3611 l
-3164 3611 m
-3290 3611 l
-3290 3612 l
-3164 3612 l
-3162 3612 m
-3290 3612 l
-3290 3613 l
-3162 3613 l
-3159 3613 m
-3290 3613 l
-3290 3614 l
-3159 3614 l
-3157 3614 m
-3291 3614 l
-3291 3615 l
-3157 3615 l
-3154 3615 m
-3291 3615 l
-3291 3616 l
-3154 3616 l
-3152 3616 m
-3292 3616 l
-3292 3617 l
-3152 3617 l
-3149 3617 m
-3292 3617 l
-3292 3618 l
-3149 3618 l
-3147 3618 m
-3292 3618 l
-3292 3619 l
-3147 3619 l
-3144 3619 m
-3293 3619 l
-3293 3620 l
-3144 3620 l
-3142 3620 m
-3293 3620 l
-3293 3621 l
-3142 3621 l
-3139 3621 m
-3294 3621 l
-3294 3622 l
-3139 3622 l
-3137 3622 m
-3294 3622 l
-3294 3623 l
-3137 3623 l
-3134 3623 m
-3294 3623 l
-3294 3624 l
-3134 3624 l
-3132 3624 m
-3295 3624 l
-3295 3625 l
-3132 3625 l
-3129 3625 m
-3295 3625 l
-3295 3626 l
-3129 3626 l
-3127 3626 m
-3296 3626 l
-3296 3627 l
-3127 3627 l
-3124 3627 m
-3296 3627 l
-3296 3628 l
-3124 3628 l
-3122 3628 m
-3296 3628 l
-3296 3629 l
-3122 3629 l
-3119 3629 m
-3297 3629 l
-3297 3630 l
-3119 3630 l
-3117 3630 m
-3297 3630 l
-3297 3631 l
-3117 3631 l
-3114 3631 m
-3298 3631 l
-3298 3632 l
-3114 3632 l
-3112 3632 m
-3298 3632 l
-3298 3633 l
-3112 3633 l
-3109 3633 m
-3298 3633 l
-3298 3634 l
-3109 3634 l
-3107 3634 m
-3299 3634 l
-3299 3635 l
-3107 3635 l
-3104 3635 m
-3299 3635 l
-3299 3636 l
-3104 3636 l
-3102 3636 m
-3300 3636 l
-3300 3637 l
-3102 3637 l
-3102 3637 m
-3300 3637 l
-3300 3639 l
-3102 3639 l
-3102 3639 m
-3301 3639 l
-3301 3640 l
-3102 3640 l
-3103 3640 m
-3301 3640 l
-3301 3641 l
-3103 3641 l
-3103 3641 m
-3302 3641 l
-3302 3643 l
-3103 3643 l
-3104 3643 m
-3302 3643 l
-3302 3644 l
-3104 3644 l
-3104 3644 m
-3303 3644 l
-3303 3645 l
-3104 3645 l
-3105 3645 m
-3303 3645 l
-3303 3646 l
-3105 3646 l
-3105 3646 m
-3304 3646 l
-3304 3648 l
-3105 3648 l
-3106 3648 m
-3304 3648 l
-3304 3649 l
-3106 3649 l
-3106 3649 m
-3305 3649 l
-3305 3650 l
-3106 3650 l
-3107 3650 m
-3305 3650 l
-3305 3651 l
-3107 3651 l
-3107 3651 m
-3306 3651 l
-3306 3653 l
-3107 3653 l
-3108 3653 m
-3306 3653 l
-3306 3654 l
-3108 3654 l
-3108 3654 m
-3307 3654 l
-3307 3655 l
-3108 3655 l
-3109 3655 m
-3307 3655 l
-3307 3656 l
-3109 3656 l
-3109 3656 m
-3308 3656 l
-3308 3658 l
-3109 3658 l
-3110 3658 m
-3308 3658 l
-3308 3659 l
-3110 3659 l
-3110 3659 m
-3309 3659 l
-3309 3661 l
-3110 3661 l
-3111 3661 m
-3310 3661 l
-3310 3663 l
-3111 3663 l
-3112 3663 m
-3310 3663 l
-3310 3664 l
-3112 3664 l
-3112 3664 m
-3311 3664 l
-3311 3666 l
-3112 3666 l
-3113 3666 m
-3312 3666 l
-3312 3668 l
-3113 3668 l
-3114 3668 m
-3312 3668 l
-3312 3669 l
-3114 3669 l
-3114 3669 m
-3313 3669 l
-3313 3671 l
-3114 3671 l
-3115 3671 m
-3314 3671 l
-3314 3673 l
-3115 3673 l
-3116 3673 m
-3314 3673 l
-3314 3674 l
-3116 3674 l
-3116 3674 m
-3315 3674 l
-3315 3676 l
-3116 3676 l
-3117 3676 m
-3316 3676 l
-3316 3679 l
-3117 3679 l
-3118 3679 m
-3317 3679 l
-3317 3681 l
-3118 3681 l
-3119 3681 m
-3317 3681 l
-3317 3682 l
-3119 3682 l
-3119 3682 m
-3317 3682 l
-3317 3683 l
-3119 3683 l
-3119 3683 m
-3315 3683 l
-3315 3684 l
-3119 3684 l
-3120 3684 m
-3312 3684 l
-3312 3685 l
-3120 3685 l
-3120 3685 m
-3310 3685 l
-3310 3686 l
-3120 3686 l
-3121 3686 m
-3307 3686 l
-3307 3687 l
-3121 3687 l
-3121 3687 m
-3305 3687 l
-3305 3688 l
-3121 3688 l
-3121 3688 m
-3302 3688 l
-3302 3689 l
-3121 3689 l
-3122 3689 m
-3300 3689 l
-3300 3690 l
-3122 3690 l
-3122 3690 m
-3297 3690 l
-3297 3691 l
-3122 3691 l
-3123 3691 m
-3295 3691 l
-3295 3692 l
-3123 3692 l
-3123 3692 m
-3292 3692 l
-3292 3693 l
-3123 3693 l
-3123 3693 m
-3290 3693 l
-3290 3694 l
-3123 3694 l
-3124 3694 m
-3287 3694 l
-3287 3695 l
-3124 3695 l
-3124 3695 m
-3285 3695 l
-3285 3696 l
-3124 3696 l
-3124 3696 m
-3282 3696 l
-3282 3697 l
-3124 3697 l
-3125 3697 m
-3280 3697 l
-3280 3698 l
-3125 3698 l
-3125 3698 m
-3277 3698 l
-3277 3699 l
-3125 3699 l
-3126 3699 m
-3275 3699 l
-3275 3700 l
-3126 3700 l
-3126 3700 m
-3272 3700 l
-3272 3701 l
-3126 3701 l
-3126 3701 m
-3270 3701 l
-3270 3702 l
-3126 3702 l
-3127 3702 m
-3267 3702 l
-3267 3703 l
-3127 3703 l
-3127 3703 m
-3265 3703 l
-3265 3704 l
-3127 3704 l
-3128 3704 m
-3262 3704 l
-3262 3705 l
-3128 3705 l
-3128 3705 m
-3259 3705 l
-3259 3706 l
-3128 3706 l
-3128 3706 m
-3257 3706 l
-3257 3707 l
-3128 3707 l
-3129 3707 m
-3254 3707 l
-3254 3708 l
-3129 3708 l
-3129 3708 m
-3252 3708 l
-3252 3709 l
-3129 3709 l
-3130 3709 m
-3249 3709 l
-3249 3710 l
-3130 3710 l
-3130 3710 m
-3247 3710 l
-3247 3711 l
-3130 3711 l
-3130 3711 m
-3244 3711 l
-3244 3712 l
-3130 3712 l
-3131 3712 m
-3242 3712 l
-3242 3713 l
-3131 3713 l
-3131 3713 m
-3239 3713 l
-3239 3714 l
-3131 3714 l
-3131 3714 m
-3237 3714 l
-3237 3715 l
-3131 3715 l
-3132 3715 m
-3234 3715 l
-3234 3716 l
-3132 3716 l
-3132 3716 m
-3232 3716 l
-3232 3717 l
-3132 3717 l
-3133 3717 m
-3229 3717 l
-3229 3718 l
-3133 3718 l
-3133 3718 m
-3227 3718 l
-3227 3719 l
-3133 3719 l
-3133 3719 m
-3224 3719 l
-3224 3720 l
-3133 3720 l
-3134 3720 m
-3222 3720 l
-3222 3721 l
-3134 3721 l
-3134 3721 m
-3219 3721 l
-3219 3722 l
-3134 3722 l
-3135 3722 m
-3217 3722 l
-3217 3723 l
-3135 3723 l
-3135 3723 m
-3214 3723 l
-3214 3724 l
-3135 3724 l
-3135 3724 m
-3212 3724 l
-3212 3725 l
-3135 3725 l
-3136 3725 m
-3209 3725 l
-3209 3726 l
-3136 3726 l
-3136 3726 m
-3207 3726 l
-3207 3727 l
-3136 3727 l
-3137 3727 m
-3204 3727 l
-3204 3728 l
-3137 3728 l
-3137 3728 m
-3202 3728 l
-3202 3729 l
-3137 3729 l
-3137 3729 m
-3199 3729 l
-3199 3730 l
-3137 3730 l
-3138 3730 m
-3197 3730 l
-3197 3731 l
-3138 3731 l
-3138 3731 m
-3194 3731 l
-3194 3732 l
-3138 3732 l
-3138 3732 m
-3192 3732 l
-3192 3733 l
-3138 3733 l
-3139 3733 m
-3189 3733 l
-3189 3734 l
-3139 3734 l
-3139 3734 m
-3187 3734 l
-3187 3735 l
-3139 3735 l
-3140 3735 m
-3184 3735 l
-3184 3736 l
-3140 3736 l
-3140 3736 m
-3182 3736 l
-3182 3737 l
-3140 3737 l
-3140 3737 m
-3179 3737 l
-3179 3738 l
-3140 3738 l
-3141 3738 m
-3177 3738 l
-3177 3739 l
-3141 3739 l
-3141 3739 m
-3174 3739 l
-3174 3740 l
-3141 3740 l
-3142 3740 m
-3172 3740 l
-3172 3741 l
-3142 3741 l
-3142 3741 m
-3169 3741 l
-3169 3742 l
-3142 3742 l
-3142 3742 m
-3167 3742 l
-3167 3743 l
-3142 3743 l
-3143 3743 m
-3164 3743 l
-3164 3744 l
-3143 3744 l
-3143 3744 m
-3162 3744 l
-3162 3745 l
-3143 3745 l
-3144 3745 m
-3159 3745 l
-3159 3746 l
-3144 3746 l
-3144 3746 m
-3157 3746 l
-3157 3747 l
-3144 3747 l
-3144 3747 m
-3154 3747 l
-3154 3748 l
-3144 3748 l
-3145 3748 m
-3152 3748 l
-3152 3749 l
-3145 3749 l
-3145 3749 m
-3149 3749 l
-3149 3750 l
-3145 3750 l
-Y
-3317 3681.9 m
-3272 3569 l
-3102 3637 l
-3146 3750 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3213 3611 m
-3251 3596 l
-3269 3629 l
-3264 3627 l
-3250 3627 l
-3239 3632 l
-3229 3640 l
-3224 3651 l
-3225 3665 l
-3228 3672 l
-3236 3682 l
-3247 3687 l
-3260 3686 l
-3272 3682 l
-3282 3673 l
-3284 3668 l
-3285 3659 l
-S
-3136 3655 m
-3136 3646 l
-3147 3637 l
-3154 3634 l
-3167 3633 l
-3180 3642 l
-3191 3660 l
-3199 3679 l
-3201 3696 l
-3197 3707 l
-3187 3716 l
-3183 3717 l
-3170 3718 l
-3159 3713 l
-3150 3703 l
-3149 3699 l
-3148 3686 l
-3153 3675 l
-3163 3667 l
-3167 3665 l
-3180 3664 l
-3191 3669 l
-3199 3679 l
-S
-1 g
-4344 3144 m
-4348 3144 l
-4348 3145 l
-4344 3145 l
-4341 3145 m
-4348 3145 l
-4348 3146 l
-4341 3146 l
-4339 3146 m
-4349 3146 l
-4349 3147 l
-4339 3147 l
-4336 3147 m
-4349 3147 l
-4349 3148 l
-4336 3148 l
-4334 3148 m
-4350 3148 l
-4350 3149 l
-4334 3149 l
-4331 3149 m
-4350 3149 l
-4350 3150 l
-4331 3150 l
-4329 3150 m
-4350 3150 l
-4350 3151 l
-4329 3151 l
-4326 3151 m
-4351 3151 l
-4351 3152 l
-4326 3152 l
-4324 3152 m
-4351 3152 l
-4351 3153 l
-4324 3153 l
-4321 3153 m
-4352 3153 l
-4352 3154 l
-4321 3154 l
-4319 3154 m
-4352 3154 l
-4352 3155 l
-4319 3155 l
-4316 3155 m
-4352 3155 l
-4352 3156 l
-4316 3156 l
-4314 3156 m
-4353 3156 l
-4353 3157 l
-4314 3157 l
-4311 3157 m
-4353 3157 l
-4353 3158 l
-4311 3158 l
-4308 3158 m
-4354 3158 l
-4354 3159 l
-4308 3159 l
-4306 3159 m
-4354 3159 l
-4354 3160 l
-4306 3160 l
-4303 3160 m
-4354 3160 l
-4354 3161 l
-4303 3161 l
-4301 3161 m
-4355 3161 l
-4355 3162 l
-4301 3162 l
-4298 3162 m
-4355 3162 l
-4355 3163 l
-4298 3163 l
-4296 3163 m
-4356 3163 l
-4356 3164 l
-4296 3164 l
-4293 3164 m
-4356 3164 l
-4356 3165 l
-4293 3165 l
-4291 3165 m
-4356 3165 l
-4356 3166 l
-4291 3166 l
-4288 3166 m
-4357 3166 l
-4357 3167 l
-4288 3167 l
-4286 3167 m
-4357 3167 l
-4357 3168 l
-4286 3168 l
-4283 3168 m
-4358 3168 l
-4358 3169 l
-4283 3169 l
-4281 3169 m
-4358 3169 l
-4358 3170 l
-4281 3170 l
-4278 3170 m
-4358 3170 l
-4358 3171 l
-4278 3171 l
-4275 3171 m
-4359 3171 l
-4359 3172 l
-4275 3172 l
-4273 3172 m
-4359 3172 l
-4359 3173 l
-4273 3173 l
-4270 3173 m
-4360 3173 l
-4360 3174 l
-4270 3174 l
-4268 3174 m
-4360 3174 l
-4360 3175 l
-4268 3175 l
-4265 3175 m
-4360 3175 l
-4360 3176 l
-4265 3176 l
-4263 3176 m
-4361 3176 l
-4361 3177 l
-4263 3177 l
-4260 3177 m
-4361 3177 l
-4361 3178 l
-4260 3178 l
-4258 3178 m
-4362 3178 l
-4362 3179 l
-4258 3179 l
-4255 3179 m
-4362 3179 l
-4362 3180 l
-4255 3180 l
-4253 3180 m
-4362 3180 l
-4362 3181 l
-4253 3181 l
-4250 3181 m
-4363 3181 l
-4363 3182 l
-4250 3182 l
-4248 3182 m
-4363 3182 l
-4363 3183 l
-4248 3183 l
-4245 3183 m
-4364 3183 l
-4364 3184 l
-4245 3184 l
-4242 3184 m
-4364 3184 l
-4364 3185 l
-4242 3185 l
-4240 3185 m
-4364 3185 l
-4364 3186 l
-4240 3186 l
-4237 3186 m
-4365 3186 l
-4365 3187 l
-4237 3187 l
-4235 3187 m
-4365 3187 l
-4365 3188 l
-4235 3188 l
-4232 3188 m
-4366 3188 l
-4366 3189 l
-4232 3189 l
-4230 3189 m
-4366 3189 l
-4366 3190 l
-4230 3190 l
-4227 3190 m
-4366 3190 l
-4366 3191 l
-4227 3191 l
-4225 3191 m
-4367 3191 l
-4367 3192 l
-4225 3192 l
-4222 3192 m
-4367 3192 l
-4367 3193 l
-4222 3193 l
-4220 3193 m
-4368 3193 l
-4368 3194 l
-4220 3194 l
-4217 3194 m
-4368 3194 l
-4368 3195 l
-4217 3195 l
-4215 3195 m
-4368 3195 l
-4368 3196 l
-4215 3196 l
-4212 3196 m
-4369 3196 l
-4369 3197 l
-4212 3197 l
-4209 3197 m
-4369 3197 l
-4369 3198 l
-4209 3198 l
-4207 3198 m
-4370 3198 l
-4370 3199 l
-4207 3199 l
-4204 3199 m
-4370 3199 l
-4370 3200 l
-4204 3200 l
-4202 3200 m
-4370 3200 l
-4370 3201 l
-4202 3201 l
-4199 3201 m
-4371 3201 l
-4371 3202 l
-4199 3202 l
-4197 3202 m
-4371 3202 l
-4371 3203 l
-4197 3203 l
-4194 3203 m
-4372 3203 l
-4372 3204 l
-4194 3204 l
-4192 3204 m
-4372 3204 l
-4372 3205 l
-4192 3205 l
-4189 3205 m
-4372 3205 l
-4372 3206 l
-4189 3206 l
-4187 3206 m
-4373 3206 l
-4373 3207 l
-4187 3207 l
-4184 3207 m
-4373 3207 l
-4373 3208 l
-4184 3208 l
-4182 3208 m
-4374 3208 l
-4374 3209 l
-4182 3209 l
-4179 3209 m
-4374 3209 l
-4374 3210 l
-4179 3210 l
-4177 3210 m
-4374 3210 l
-4374 3211 l
-4177 3211 l
-4177 3211 m
-4375 3211 l
-4375 3213 l
-4177 3213 l
-4177 3213 m
-4376 3213 l
-4376 3214 l
-4177 3214 l
-4178 3214 m
-4376 3214 l
-4376 3216 l
-4178 3216 l
-4178 3216 m
-4377 3216 l
-4377 3217 l
-4178 3217 l
-4179 3217 m
-4377 3217 l
-4377 3218 l
-4179 3218 l
-4179 3218 m
-4378 3218 l
-4378 3219 l
-4179 3219 l
-4180 3219 m
-4378 3219 l
-4378 3221 l
-4180 3221 l
-4180 3221 m
-4379 3221 l
-4379 3222 l
-4180 3222 l
-4181 3222 m
-4379 3222 l
-4379 3223 l
-4181 3223 l
-4181 3223 m
-4380 3223 l
-4380 3224 l
-4181 3224 l
-4182 3224 m
-4380 3224 l
-4380 3226 l
-4182 3226 l
-4182 3226 m
-4381 3226 l
-4381 3227 l
-4182 3227 l
-4183 3227 m
-4381 3227 l
-4381 3228 l
-4183 3228 l
-4183 3228 m
-4382 3228 l
-4382 3229 l
-4183 3229 l
-4184 3229 m
-4382 3229 l
-4382 3231 l
-4184 3231 l
-4184 3231 m
-4383 3231 l
-4383 3232 l
-4184 3232 l
-4185 3232 m
-4383 3232 l
-4383 3233 l
-4185 3233 l
-4185 3233 m
-4384 3233 l
-4384 3235 l
-4185 3235 l
-4186 3235 m
-4384 3235 l
-4384 3236 l
-4186 3236 l
-4186 3236 m
-4385 3236 l
-4385 3237 l
-4186 3237 l
-4187 3237 m
-4385 3237 l
-4385 3238 l
-4187 3238 l
-4187 3238 m
-4386 3238 l
-4386 3240 l
-4187 3240 l
-4188 3240 m
-4386 3240 l
-4386 3241 l
-4188 3241 l
-4188 3241 m
-4387 3241 l
-4387 3242 l
-4188 3242 l
-4189 3242 m
-4387 3242 l
-4387 3243 l
-4189 3243 l
-4189 3243 m
-4388 3243 l
-4388 3245 l
-4189 3245 l
-4190 3245 m
-4388 3245 l
-4388 3246 l
-4190 3246 l
-4190 3246 m
-4389 3246 l
-4389 3247 l
-4190 3247 l
-4191 3247 m
-4389 3247 l
-4389 3248 l
-4191 3248 l
-4191 3248 m
-4390 3248 l
-4390 3250 l
-4191 3250 l
-4192 3250 m
-4390 3250 l
-4390 3251 l
-4192 3251 l
-4192 3251 m
-4391 3251 l
-4391 3253 l
-4192 3253 l
-4193 3253 m
-4392 3253 l
-4392 3255 l
-4193 3255 l
-4194 3255 m
-4392 3255 l
-4392 3256 l
-4194 3256 l
-4194 3256 m
-4392 3256 l
-4392 3257 l
-4194 3257 l
-4194 3257 m
-4390 3257 l
-4390 3258 l
-4194 3258 l
-4195 3258 m
-4388 3258 l
-4388 3259 l
-4195 3259 l
-4195 3259 m
-4385 3259 l
-4385 3260 l
-4195 3260 l
-4196 3260 m
-4383 3260 l
-4383 3261 l
-4196 3261 l
-4196 3261 m
-4380 3261 l
-4380 3262 l
-4196 3262 l
-4196 3262 m
-4378 3262 l
-4378 3263 l
-4196 3263 l
-4197 3263 m
-4375 3263 l
-4375 3264 l
-4197 3264 l
-4197 3264 m
-4373 3264 l
-4373 3265 l
-4197 3265 l
-4198 3265 m
-4370 3265 l
-4370 3266 l
-4198 3266 l
-4198 3266 m
-4368 3266 l
-4368 3267 l
-4198 3267 l
-4198 3267 m
-4365 3267 l
-4365 3268 l
-4198 3268 l
-4199 3268 m
-4363 3268 l
-4363 3269 l
-4199 3269 l
-4199 3269 m
-4360 3269 l
-4360 3270 l
-4199 3270 l
-4199 3270 m
-4357 3270 l
-4357 3271 l
-4199 3271 l
-4200 3271 m
-4355 3271 l
-4355 3272 l
-4200 3272 l
-4200 3272 m
-4352 3272 l
-4352 3273 l
-4200 3273 l
-4201 3273 m
-4350 3273 l
-4350 3274 l
-4201 3274 l
-4201 3274 m
-4347 3274 l
-4347 3275 l
-4201 3275 l
-4201 3275 m
-4345 3275 l
-4345 3276 l
-4201 3276 l
-4202 3276 m
-4342 3276 l
-4342 3277 l
-4202 3277 l
-4202 3277 m
-4340 3277 l
-4340 3278 l
-4202 3278 l
-4203 3278 m
-4337 3278 l
-4337 3279 l
-4203 3279 l
-4203 3279 m
-4335 3279 l
-4335 3280 l
-4203 3280 l
-4203 3280 m
-4332 3280 l
-4332 3281 l
-4203 3281 l
-4204 3281 m
-4330 3281 l
-4330 3282 l
-4204 3282 l
-4204 3282 m
-4327 3282 l
-4327 3283 l
-4204 3283 l
-4205 3283 m
-4325 3283 l
-4325 3284 l
-4205 3284 l
-4205 3284 m
-4322 3284 l
-4322 3285 l
-4205 3285 l
-4205 3285 m
-4320 3285 l
-4320 3286 l
-4205 3286 l
-4206 3286 m
-4317 3286 l
-4317 3287 l
-4206 3287 l
-4206 3287 m
-4315 3287 l
-4315 3288 l
-4206 3288 l
-4206 3288 m
-4312 3288 l
-4312 3289 l
-4206 3289 l
-4207 3289 m
-4310 3289 l
-4310 3290 l
-4207 3290 l
-4207 3290 m
-4307 3290 l
-4307 3291 l
-4207 3291 l
-4208 3291 m
-4305 3291 l
-4305 3292 l
-4208 3292 l
-4208 3292 m
-4302 3292 l
-4302 3293 l
-4208 3293 l
-4208 3293 m
-4300 3293 l
-4300 3294 l
-4208 3294 l
-4209 3294 m
-4297 3294 l
-4297 3295 l
-4209 3295 l
-4209 3295 m
-4295 3295 l
-4295 3296 l
-4209 3296 l
-4210 3296 m
-4292 3296 l
-4292 3297 l
-4210 3297 l
-4210 3297 m
-4289 3297 l
-4289 3298 l
-4210 3298 l
-4210 3298 m
-4287 3298 l
-4287 3299 l
-4210 3299 l
-4211 3299 m
-4284 3299 l
-4284 3300 l
-4211 3300 l
-4211 3300 m
-4282 3300 l
-4282 3301 l
-4211 3301 l
-4212 3301 m
-4279 3301 l
-4279 3302 l
-4212 3302 l
-4212 3302 m
-4277 3302 l
-4277 3303 l
-4212 3303 l
-4212 3303 m
-4274 3303 l
-4274 3304 l
-4212 3304 l
-4213 3304 m
-4272 3304 l
-4272 3305 l
-4213 3305 l
-4213 3305 m
-4269 3305 l
-4269 3306 l
-4213 3306 l
-4213 3306 m
-4267 3306 l
-4267 3307 l
-4213 3307 l
-4214 3307 m
-4264 3307 l
-4264 3308 l
-4214 3308 l
-4214 3308 m
-4262 3308 l
-4262 3309 l
-4214 3309 l
-4215 3309 m
-4259 3309 l
-4259 3310 l
-4215 3310 l
-4215 3310 m
-4257 3310 l
-4257 3311 l
-4215 3311 l
-4215 3311 m
-4254 3311 l
-4254 3312 l
-4215 3312 l
-4216 3312 m
-4252 3312 l
-4252 3313 l
-4216 3313 l
-4216 3313 m
-4249 3313 l
-4249 3314 l
-4216 3314 l
-4217 3314 m
-4247 3314 l
-4247 3315 l
-4217 3315 l
-4217 3315 m
-4244 3315 l
-4244 3316 l
-4217 3316 l
-4217 3316 m
-4242 3316 l
-4242 3317 l
-4217 3317 l
-4218 3317 m
-4239 3317 l
-4239 3318 l
-4218 3318 l
-4218 3318 m
-4237 3318 l
-4237 3319 l
-4218 3319 l
-4219 3319 m
-4234 3319 l
-4234 3320 l
-4219 3320 l
-4219 3320 m
-4232 3320 l
-4232 3321 l
-4219 3321 l
-4219 3321 m
-4229 3321 l
-4229 3322 l
-4219 3322 l
-4220 3322 m
-4227 3322 l
-4227 3323 l
-4220 3323 l
-4220 3323 m
-4224 3323 l
-4224 3324 l
-4220 3324 l
-Y
-4392 3256.1 m
-4347 3144 l
-4177 3211 l
-4221 3324 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4288 3185 m
-4326 3170 l
-4344 3203 l
-4339 3201 l
-4325 3202 l
-4314 3206 l
-4304 3215 l
-4299 3226 l
-4300 3239 l
-4303 3247 l
-4311 3257 l
-4322 3261 l
-4335 3261 l
-4347 3256 l
-4357 3247 l
-4359 3242 l
-4360 3233 l
-S
-4260 3218 m
-4259 3215 l
-4252 3208 l
-4246 3206 l
-4237 3205 l
-4221 3211 l
-4215 3218 l
-4213 3224 l
-4212 3233 l
-4215 3241 l
-4222 3247 l
-4235 3256 l
-4289 3279 l
-4234 3301 l
-S
-1 g
-4877 2933 m
-4878 2933 l
-4878 2934 l
-4877 2934 l
-4874 2934 m
-4878 2934 l
-4878 2935 l
-4874 2935 l
-4872 2935 m
-4878 2935 l
-4878 2936 l
-4872 2936 l
-4869 2936 m
-4878 2936 l
-4878 2937 l
-4869 2937 l
-4867 2937 m
-4878 2937 l
-4878 2938 l
-4867 2938 l
-4864 2938 m
-4878 2938 l
-4878 2939 l
-4864 2939 l
-4862 2939 m
-4878 2939 l
-4878 2940 l
-4862 2940 l
-4859 2940 m
-4878 2940 l
-4878 2941 l
-4859 2941 l
-4856 2941 m
-4878 2941 l
-4878 2942 l
-4856 2942 l
-4854 2942 m
-4878 2942 l
-4878 2943 l
-4854 2943 l
-4851 2943 m
-4878 2943 l
-4878 2944 l
-4851 2944 l
-4849 2944 m
-4878 2944 l
-4878 2945 l
-4849 2945 l
-4846 2945 m
-4878 2945 l
-4878 2946 l
-4846 2946 l
-4844 2946 m
-4878 2946 l
-4878 2947 l
-4844 2947 l
-4841 2947 m
-4878 2947 l
-4878 2948 l
-4841 2948 l
-4839 2948 m
-4878 2948 l
-4878 2949 l
-4839 2949 l
-4836 2949 m
-4878 2949 l
-4878 2950 l
-4836 2950 l
-4833 2950 m
-4878 2950 l
-4878 2951 l
-4833 2951 l
-4831 2951 m
-4878 2951 l
-4878 2952 l
-4831 2952 l
-4828 2952 m
-4878 2952 l
-4878 2953 l
-4828 2953 l
-4826 2953 m
-4878 2953 l
-4878 2954 l
-4826 2954 l
-4823 2954 m
-4878 2954 l
-4878 2955 l
-4823 2955 l
-4821 2955 m
-4878 2955 l
-4878 2956 l
-4821 2956 l
-4818 2956 m
-4878 2956 l
-4878 2957 l
-4818 2957 l
-4816 2957 m
-4878 2957 l
-4878 2958 l
-4816 2958 l
-4813 2958 m
-4878 2958 l
-4878 2959 l
-4813 2959 l
-4810 2959 m
-4878 2959 l
-4878 2960 l
-4810 2960 l
-4808 2960 m
-4878 2960 l
-4878 2961 l
-4808 2961 l
-4805 2961 m
-4878 2961 l
-4878 2962 l
-4805 2962 l
-4803 2962 m
-4878 2962 l
-4878 2963 l
-4803 2963 l
-4800 2963 m
-4878 2963 l
-4878 2964 l
-4800 2964 l
-4798 2964 m
-4878 2964 l
-4878 2965 l
-4798 2965 l
-4795 2965 m
-4878 2965 l
-4878 2966 l
-4795 2966 l
-4793 2966 m
-4878 2966 l
-4878 2967 l
-4793 2967 l
-4790 2967 m
-4878 2967 l
-4878 2968 l
-4790 2968 l
-4788 2968 m
-4878 2968 l
-4878 2969 l
-4788 2969 l
-4785 2969 m
-4878 2969 l
-4878 2970 l
-4785 2970 l
-4782 2970 m
-4878 2970 l
-4878 2971 l
-4782 2971 l
-4780 2971 m
-4878 2971 l
-4878 2972 l
-4780 2972 l
-4777 2972 m
-4878 2972 l
-4878 2973 l
-4777 2973 l
-4775 2973 m
-4878 2973 l
-4878 2974 l
-4775 2974 l
-4772 2974 m
-4878 2974 l
-4878 2975 l
-4772 2975 l
-4770 2975 m
-4878 2975 l
-4878 2976 l
-4770 2976 l
-4767 2976 m
-4878 2976 l
-4878 2977 l
-4767 2977 l
-4765 2977 m
-4878 2977 l
-4878 2978 l
-4765 2978 l
-4762 2978 m
-4878 2978 l
-4878 2979 l
-4762 2979 l
-4759 2979 m
-4878 2979 l
-4878 2980 l
-4759 2980 l
-4757 2980 m
-4878 2980 l
-4878 2981 l
-4757 2981 l
-4754 2981 m
-4878 2981 l
-4878 2982 l
-4754 2982 l
-4752 2982 m
-4878 2982 l
-4878 2983 l
-4752 2983 l
-4749 2983 m
-4878 2983 l
-4878 2984 l
-4749 2984 l
-4747 2984 m
-4878 2984 l
-4878 2985 l
-4747 2985 l
-4744 2985 m
-4878 2985 l
-4878 2986 l
-4744 2986 l
-4742 2986 m
-4878 2986 l
-4878 2987 l
-4742 2987 l
-4739 2987 m
-4878 2987 l
-4878 2988 l
-4739 2988 l
-4736 2988 m
-4878 2988 l
-4878 2989 l
-4736 2989 l
-4734 2989 m
-4878 2989 l
-4878 2990 l
-4734 2990 l
-4731 2990 m
-4878 2990 l
-4878 2991 l
-4731 2991 l
-4729 2991 m
-4878 2991 l
-4878 2992 l
-4729 2992 l
-4726 2992 m
-4878 2992 l
-4878 2993 l
-4726 2993 l
-4724 2993 m
-4878 2993 l
-4878 2994 l
-4724 2994 l
-4721 2994 m
-4878 2994 l
-4878 2995 l
-4721 2995 l
-4719 2995 m
-4878 2995 l
-4878 2996 l
-4719 2996 l
-4716 2996 m
-4878 2996 l
-4878 2997 l
-4716 2997 l
-4714 2997 m
-4878 2997 l
-4878 2998 l
-4714 2998 l
-4714 2998 m
-4878 2998 l
-4878 2999 l
-4714 2999 l
-4714 2999 m
-4878 2999 l
-4878 3001 l
-4714 3001 l
-4715 3001 m
-4878 3001 l
-4878 3004 l
-4715 3004 l
-4716 3004 m
-4878 3004 l
-4878 3006 l
-4716 3006 l
-4717 3006 m
-4878 3006 l
-4878 3009 l
-4717 3009 l
-4718 3009 m
-4878 3009 l
-4878 3011 l
-4718 3011 l
-4719 3011 m
-4878 3011 l
-4878 3014 l
-4719 3014 l
-4720 3014 m
-4878 3014 l
-4878 3016 l
-4720 3016 l
-4721 3016 m
-4878 3016 l
-4878 3019 l
-4721 3019 l
-4722 3019 m
-4878 3019 l
-4878 3021 l
-4722 3021 l
-4723 3021 m
-4878 3021 l
-4878 3024 l
-4723 3024 l
-4724 3024 m
-4878 3024 l
-4878 3026 l
-4724 3026 l
-4725 3026 m
-4878 3026 l
-4878 3029 l
-4725 3029 l
-4726 3029 m
-4878 3029 l
-4878 3031 l
-4726 3031 l
-4727 3031 m
-4878 3031 l
-4878 3034 l
-4727 3034 l
-4728 3034 m
-4878 3034 l
-4878 3036 l
-4728 3036 l
-4729 3036 m
-4878 3036 l
-4878 3039 l
-4729 3039 l
-4730 3039 m
-4878 3039 l
-4878 3041 l
-4730 3041 l
-4731 3041 m
-4878 3041 l
-4878 3043 l
-4731 3043 l
-4731 3043 m
-4878 3043 l
-4878 3044 l
-4731 3044 l
-4732 3044 m
-4878 3044 l
-4878 3045 l
-4732 3045 l
-4732 3045 m
-4878 3045 l
-4878 3046 l
-4732 3046 l
-4733 3046 m
-4878 3046 l
-4878 3047 l
-4733 3047 l
-4733 3047 m
-4878 3047 l
-4878 3048 l
-4733 3048 l
-4733 3048 m
-4878 3048 l
-4878 3049 l
-4733 3049 l
-4734 3049 m
-4878 3049 l
-4878 3050 l
-4734 3050 l
-4734 3050 m
-4878 3050 l
-4878 3051 l
-4734 3051 l
-4735 3051 m
-4878 3051 l
-4878 3052 l
-4735 3052 l
-4735 3052 m
-4878 3052 l
-4878 3053 l
-4735 3053 l
-4735 3053 m
-4878 3053 l
-4878 3054 l
-4735 3054 l
-4736 3054 m
-4878 3054 l
-4878 3055 l
-4736 3055 l
-4736 3055 m
-4878 3055 l
-4878 3056 l
-4736 3056 l
-4737 3056 m
-4878 3056 l
-4878 3057 l
-4737 3057 l
-4737 3057 m
-4878 3057 l
-4878 3058 l
-4737 3058 l
-4737 3058 m
-4878 3058 l
-4878 3059 l
-4737 3059 l
-4738 3059 m
-4878 3059 l
-4878 3060 l
-4738 3060 l
-4738 3060 m
-4878 3060 l
-4878 3061 l
-4738 3061 l
-4739 3061 m
-4878 3061 l
-4878 3062 l
-4739 3062 l
-4739 3062 m
-4878 3062 l
-4878 3063 l
-4739 3063 l
-4739 3063 m
-4878 3063 l
-4878 3064 l
-4739 3064 l
-4740 3064 m
-4878 3064 l
-4878 3065 l
-4740 3065 l
-4740 3065 m
-4875 3065 l
-4875 3066 l
-4740 3066 l
-4741 3066 m
-4873 3066 l
-4873 3067 l
-4741 3067 l
-4741 3067 m
-4870 3067 l
-4870 3068 l
-4741 3068 l
-4741 3068 m
-4868 3068 l
-4868 3069 l
-4741 3069 l
-4742 3069 m
-4865 3069 l
-4865 3070 l
-4742 3070 l
-4742 3070 m
-4863 3070 l
-4863 3071 l
-4742 3071 l
-4743 3071 m
-4860 3071 l
-4860 3072 l
-4743 3072 l
-4743 3072 m
-4858 3072 l
-4858 3073 l
-4743 3073 l
-4743 3073 m
-4855 3073 l
-4855 3074 l
-4743 3074 l
-4744 3074 m
-4853 3074 l
-4853 3075 l
-4744 3075 l
-4744 3075 m
-4850 3075 l
-4850 3076 l
-4744 3076 l
-4745 3076 m
-4848 3076 l
-4848 3077 l
-4745 3077 l
-4745 3077 m
-4845 3077 l
-4845 3078 l
-4745 3078 l
-4745 3078 m
-4842 3078 l
-4842 3079 l
-4745 3079 l
-4746 3079 m
-4840 3079 l
-4840 3080 l
-4746 3080 l
-4746 3080 m
-4837 3080 l
-4837 3081 l
-4746 3081 l
-4747 3081 m
-4835 3081 l
-4835 3082 l
-4747 3082 l
-4747 3082 m
-4832 3082 l
-4832 3083 l
-4747 3083 l
-4747 3083 m
-4830 3083 l
-4830 3084 l
-4747 3084 l
-4748 3084 m
-4827 3084 l
-4827 3085 l
-4748 3085 l
-4748 3085 m
-4825 3085 l
-4825 3086 l
-4748 3086 l
-4749 3086 m
-4822 3086 l
-4822 3087 l
-4749 3087 l
-4749 3087 m
-4820 3087 l
-4820 3088 l
-4749 3088 l
-4749 3088 m
-4817 3088 l
-4817 3089 l
-4749 3089 l
-4750 3089 m
-4815 3089 l
-4815 3090 l
-4750 3090 l
-4750 3090 m
-4812 3090 l
-4812 3091 l
-4750 3091 l
-4751 3091 m
-4810 3091 l
-4810 3092 l
-4751 3092 l
-4751 3092 m
-4807 3092 l
-4807 3093 l
-4751 3093 l
-4751 3093 m
-4805 3093 l
-4805 3094 l
-4751 3094 l
-4752 3094 m
-4802 3094 l
-4802 3095 l
-4752 3095 l
-4752 3095 m
-4800 3095 l
-4800 3096 l
-4752 3096 l
-4753 3096 m
-4797 3096 l
-4797 3097 l
-4753 3097 l
-4753 3097 m
-4795 3097 l
-4795 3098 l
-4753 3098 l
-4753 3098 m
-4792 3098 l
-4792 3099 l
-4753 3099 l
-4754 3099 m
-4790 3099 l
-4790 3100 l
-4754 3100 l
-4754 3100 m
-4787 3100 l
-4787 3101 l
-4754 3101 l
-4755 3101 m
-4785 3101 l
-4785 3102 l
-4755 3102 l
-4755 3102 m
-4782 3102 l
-4782 3103 l
-4755 3103 l
-4755 3103 m
-4780 3103 l
-4780 3104 l
-4755 3104 l
-4756 3104 m
-4777 3104 l
-4777 3105 l
-4756 3105 l
-4756 3105 m
-4775 3105 l
-4775 3106 l
-4756 3106 l
-4757 3106 m
-4772 3106 l
-4772 3107 l
-4757 3107 l
-4757 3107 m
-4770 3107 l
-4770 3108 l
-4757 3108 l
-4757 3108 m
-4767 3108 l
-4767 3109 l
-4757 3109 l
-4758 3109 m
-4765 3109 l
-4765 3110 l
-4758 3110 l
-4758 3110 m
-4762 3110 l
-4762 3111 l
-4758 3111 l
-Y
-4929.5 3043.2 m
-4885 2931 l
-4714 2998 l
-4759 3111 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4825 2972 m
-4864 2957 l
-4882 2990 l
-4876 2988 l
-4863 2989 l
-4851 2993 l
-4841 3002 l
-4836 3013 l
-4837 3026 l
-4840 3034 l
-4849 3044 l
-4860 3048 l
-4873 3048 l
-4884 3043 l
-4895 3035 l
-4897 3029 l
-4898 3020 l
-S
-4771 2994 m
-4784 2993 l
-4796 3002 l
-4808 3020 l
-4812 3031 l
-4816 3052 l
-4813 3067 l
-4803 3075 l
-4795 3078 l
-4782 3079 l
-4770 3071 l
-4758 3053 l
-4753 3041 l
-4750 3020 l
-4753 3005 l
-4763 2997 l
-4771 2994 l
-S
-1 g
-Y
-362 3391.6 m
-207 3392 l
-207 4507 l
-362 4507 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-228 3413 m
-316 3413 l
-S
-228 3413 m
-228 3467 l
-S
-270 3413 m
-270 3446 l
-S
-228 3488 m
-316 3488 l
-S
-228 3546 m
-287 3488 l
-S
-266 3509 m
-316 3546 l
-S
-228 3621 m
-228 3580 l
-266 3575 l
-262 3580 l
-258 3592 l
-258 3605 l
-262 3617 l
-270 3626 l
-283 3630 l
-291 3630 l
-303 3626 l
-312 3617 l
-316 3605 l
-316 3592 l
-312 3580 l
-308 3575 l
-299 3571 l
-S
-258 3726 m
-345 3726 l
-S
-270 3726 m
-262 3734 l
-258 3742 l
-258 3755 l
-262 3763 l
-270 3772 l
-283 3776 l
-291 3776 l
-303 3772 l
-312 3763 l
-316 3755 l
-316 3742 l
-312 3734 l
-303 3726 l
-S
-258 3822 m
-262 3813 l
-270 3805 l
-283 3801 l
-291 3801 l
-303 3805 l
-312 3813 l
-316 3822 l
-316 3834 l
-312 3843 l
-303 3851 l
-291 3855 l
-283 3855 l
-270 3851 l
-262 3843 l
-258 3834 l
-258 3822 l
-S
-228 3884 m
-316 3884 l
-S
-258 3964 m
-316 3964 l
-S
-270 3964 m
-262 3955 l
-258 3947 l
-258 3935 l
-262 3926 l
-270 3918 l
-283 3914 l
-291 3914 l
-303 3918 l
-312 3926 l
-316 3935 l
-316 3947 l
-312 3955 l
-303 3964 l
-S
-258 3997 m
-316 3997 l
-S
-283 3997 m
-270 4001 l
-262 4010 l
-258 4018 l
-258 4031 l
-S
-258 4118 m
-316 4118 l
-S
-283 4118 m
-270 4123 l
-262 4131 l
-258 4139 l
-258 4152 l
-S
-283 4169 m
-283 4219 l
-274 4219 l
-266 4214 l
-262 4210 l
-258 4202 l
-258 4189 l
-262 4181 l
-270 4173 l
-283 4169 l
-291 4169 l
-303 4173 l
-312 4181 l
-316 4189 l
-316 4202 l
-312 4210 l
-303 4219 l
-S
-258 4294 m
-324 4294 l
-337 4290 l
-341 4285 l
-345 4277 l
-345 4265 l
-341 4256 l
-S
-270 4294 m
-262 4285 l
-258 4277 l
-258 4265 l
-262 4256 l
-270 4248 l
-283 4244 l
-291 4244 l
-303 4248 l
-312 4256 l
-316 4265 l
-316 4277 l
-312 4285 l
-303 4294 l
-S
-228 4323 m
-232 4327 l
-228 4331 l
-224 4327 l
-228 4323 l
-S
-258 4327 m
-316 4327 l
-S
-258 4377 m
-262 4369 l
-270 4361 l
-283 4356 l
-291 4356 l
-303 4361 l
-312 4369 l
-316 4377 l
-316 4390 l
-312 4398 l
-303 4407 l
-291 4411 l
-283 4411 l
-270 4407 l
-262 4398 l
-258 4390 l
-258 4377 l
-S
-258 4440 m
-316 4440 l
-S
-274 4440 m
-262 4453 l
-258 4461 l
-258 4473 l
-262 4482 l
-274 4486 l
-316 4486 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/fsalign.eps b/ast-5.3-1/sun211_figures/fsalign.eps
deleted file mode 100644
index 197f293..0000000
--- a/ast-5.3-1/sun211_figures/fsalign.eps
+++ /dev/null
@@ -1,5444 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 36 91 566 744
-%..................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/23 16:33:47
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5654.15 3802.55 m
-5654.15 4022.15 5475.35 4200.95 5255.75 4200.95 c
-2070.95 4200.95 l
-1851.35 4200.95 1672.55 4022.15 1672.55 3802.55 c
-1672.55 1598.15 l
-1672.55 1378.55 1851.35 1199.75 2070.95 1199.75 c
-5255.75 1199.75 l
-5475.35 1199.75 5654.15 1378.55 5654.15 1598.15 c
-f*
-1 g
-5589.35 3857.75 m
-5589.35 4077.35 5411.75 4254.95 5192.15 4254.95 c
-2015.75 4254.95 l
-1796.15 4254.95 1618.55 4077.35 1618.55 3857.75 c
-1618.55 1661.75 l
-1618.55 1442.15 1796.15 1264.55 2015.75 1264.55 c
-5192.15 1264.55 l
-5411.75 1264.55 5589.35 1442.15 5589.35 1661.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5589.35 3857.75 m
-5589.35 4077.35 5411.75 4254.95 5192.15 4254.95 c
-2015.75 4254.95 l
-1796.15 4254.95 1618.55 4077.35 1618.55 3857.75 c
-1618.55 1661.75 l
-1618.55 1442.15 1796.15 1264.55 2015.75 1264.55 c
-5192.15 1264.55 l
-5411.75 1264.55 5589.35 1442.15 5589.35 1661.75 c
-h
-S
-0.564706 g
-4634.15 7005.35 m
-4634.15 7212.95 4466.15 7380.95 4258.55 7380.95 c
-1157.75 7380.95 l
-950.15 7380.95 782.15 7212.95 782.15 7005.35 c
-782.15 4755.35 l
-782.15 4547.75 950.15 4379.75 1157.75 4379.75 c
-4258.55 4379.75 l
-4466.15 4379.75 4634.15 4547.75 4634.15 4755.35 c
-f*
-1 g
-4569.35 7061.75 m
-4569.35 7268.15 4402.55 7434.95 4196.15 7434.95 c
-1101.35 7434.95 l
-894.95 7434.95 728.15 7268.15 728.15 7061.75 c
-728.15 4817.75 l
-728.15 4611.35 894.95 4444.55 1101.35 4444.55 c
-4196.15 4444.55 l
-4402.55 4444.55 4569.35 4611.35 4569.35 4817.75 c
-f*
-0 g
-4569.35 7061.75 m
-4569.35 7268.15 4402.55 7434.95 4196.15 7434.95 c
-1101.35 7434.95 l
-894.95 7434.95 728.15 7268.15 728.15 7061.75 c
-728.15 4817.75 l
-728.15 4611.35 894.95 4444.55 1101.35 4444.55 c
-4196.15 4444.55 l
-4402.55 4444.55 4569.35 4611.35 4569.35 4817.75 c
-h
-S
-0.564706 g
-1962.95 7095.35 m
-1962.95 7205.75 1871.75 7296.95 1760.15 7296.95 c
-1263.35 7296.95 l
-1151.75 7296.95 1060.55 7205.75 1060.55 7095.35 c
-1060.55 6957.35 l
-1060.55 6846.95 1151.75 6755.75 1263.35 6755.75 c
-1760.15 6755.75 l
-1871.75 6755.75 1962.95 6846.95 1962.95 6957.35 c
-f*
-1 g
-1898.15 7152.95 m
-1898.15 7262.15 1809.35 7350.95 1697.75 7350.95 c
-1206.95 7350.95 l
-1096.55 7350.95 1006.55 7262.15 1006.55 7152.95 c
-1006.55 7018.55 l
-1006.55 6909.35 1095.35 6820.55 1206.95 6820.55 c
-1697.75 6820.55 l
-1809.35 6820.55 1898.15 6909.35 1898.15 7018.55 c
-f*
-0 g
-1898.15 7152.95 m
-1898.15 7262.15 1809.35 7350.95 1697.75 7350.95 c
-1206.95 7350.95 l
-1096.55 7350.95 1006.55 7262.15 1006.55 7152.95 c
-1006.55 7018.55 l
-1006.55 6909.35 1095.35 6820.55 1206.95 6820.55 c
-1697.75 6820.55 l
-1809.35 6820.55 1898.15 6909.35 1898.15 7018.55 c
-h
-S
-0.201248 i
-1239.33 7192 m
-1125.22 7192 l
-1125.22 7187 l
-1139.11 7186.2 1143 7183.18 1143 7172.72 c
-1143 7075.32 l
-1143 7064.85 1140.17 7062.64 1125.22 7061.03 c
-1125.22 7056 l
-1197.67 7056 l
-1197.67 7061 l
-1179.15 7061.81 1176 7064.23 1176 7075.32 c
-1176 7122.21 l
-1196.22 7121.81 1203.55 7114.36 1206.32 7091.02 c
-1211.35 7091.02 l
-1211.35 7159.04 l
-1206.32 7159.04 l
-1202.76 7136.1 1195.82 7129.05 1176 7129.05 c
-1176 7175.74 l
-1176 7183.19 1178.52 7185 1188.41 7185 c
-1207.13 7185 1218.8 7181.64 1225.04 7174.74 c
-1229.47 7169.71 1231.68 7164.27 1234.5 7151.59 c
-1239.33 7151.59 l
-h
-1244.96 7056 m
-f*
-1289.19 7149 m
-1250.84 7149 l
-1250.84 7143.95 l
-1259.49 7142.74 1262 7140.12 1262 7132.07 c
-1262 7072.9 l
-1262 7064.65 1259.93 7062.44 1250.84 7060.83 c
-1250.84 7056 l
-1304.37 7056 l
-1304.37 7060.83 l
-1292.09 7061.63 1290 7064.25 1290 7076.73 c
-1290 7114.76 l
-1290 7125.23 1295.49 7133.88 1301.95 7133.88 c
-1303.56 7133.88 1305.37 7132.47 1307.59 7129.25 c
-1311.41 7123.82 1314.43 7122.01 1319.66 7122.01 c
-1327.11 7122.01 1332.34 7127.64 1332.34 7135.29 c
-1332.34 7144.55 1325.5 7151.41 1316.04 7151.41 c
-1306.1 7151.41 1298.54 7146.12 1289.19 7132.27 c
-h
-1334.35 7056 m
-f*
-1429.19 7068.88 m
-1427.18 7066.87 l
-1426.57 7066.26 1425.97 7066.06 1424.96 7066.06 c
-1422.15 7066.06 1421 7067.67 1421 7071.09 c
-1421 7123.62 l
-1421 7140.73 1405.6 7151.42 1380.89 7151.42 c
-1358.15 7151.42 1342.85 7141.06 1342.85 7125.83 c
-1342.85 7117.38 1347.69 7112.55 1355.94 7112.55 c
-1363.99 7112.55 1369.62 7117.38 1369.62 7124.22 c
-1369.62 7127.04 1368.61 7129.66 1366 7132.88 c
-1364.19 7134.89 1363.58 7136.1 1363.58 7137.3 c
-1363.58 7141.53 1369.02 7144.42 1376.26 7144.42 c
-1388.14 7144.42 1393.86 7139.08 1393.86 7127.04 c
-1393.86 7112.35 l
-1369.91 7105.1 1360.29 7101.48 1352.51 7096.45 c
-1343.46 7090.41 1339 7083.37 1339 7074.52 c
-1339 7062.24 1348.27 7053.18 1361.17 7053.18 c
-1372.84 7053.18 1382.1 7057.21 1393.17 7067.27 c
-1395.38 7057.01 1399.81 7053.18 1409.67 7053.18 c
-1418.32 7053.18 1424.56 7056.4 1432.21 7064.65 c
-h
-1393 7076.13 m
-1387.55 7069.89 1383.52 7067.47 1378.68 7067.47 c
-1372.64 7067.47 1368 7072.91 1368 7080.96 c
-1368 7092.63 1376.61 7100.88 1393 7105.31 c
-h
-1434.62 7056 m
-f*
-1476.4 7149 m
-1437.7 7149 l
-1437.7 7143.95 l
-1446.55 7142.74 1449 7140.32 1449 7132.07 c
-1449 7072.9 l
-1449 7064.65 1446.74 7062.44 1437.7 7060.83 c
-1437.7 7056 l
-1486 7056 l
-1486 7060.83 l
-1478.95 7061.84 1477 7064.65 1477 7072.3 c
-1477 7126.03 l
-1477 7127.04 1479.87 7130.66 1482.18 7132.88 c
-1486.4 7136.1 1490.02 7138.42 1493.65 7138.42 c
-1501.5 7138.42 1505 7133.59 1505 7121 c
-1505 7072.3 l
-1505 7064.05 1502.68 7061.43 1494.85 7060.83 c
-1494.85 7056 l
-1541.95 7056 l
-1541.95 7060.83 l
-1534.9 7061.64 1533 7064.65 1533 7072.3 c
-1533 7126.03 l
-1533 7127.04 1535.73 7130.46 1537.92 7132.68 c
-1542.35 7136.1 1545.97 7138.42 1549.59 7138.42 c
-1557.24 7138.42 1560 7133.38 1560 7121 c
-1560 7072.3 l
-1560 7063.85 1557.85 7061.43 1550.4 7060.83 c
-1550.4 7056 l
-1598.3 7056 l
-1598.3 7061 l
-1590.45 7061.4 1588 7063.78 1588 7072.3 c
-1588 7122.81 l
-1588 7140.12 1577.43 7151.42 1561.07 7151.42 c
-1549.59 7151.42 1541.95 7146.73 1531.48 7133.68 c
-1525.44 7146.36 1518.4 7151.42 1505.72 7151.42 c
-1492.95 7151.42 1483.98 7145.91 1476.4 7133.68 c
-h
-1601.64 7056 m
-f*
-1679.9 7081.16 m
-1671.65 7071.29 1665.61 7067.18 1656.96 7067.18 c
-1649.31 7067.18 1643.27 7070.77 1639.25 7077.94 c
-1635.43 7084.54 1633.82 7091.56 1633.01 7106 c
-1683.73 7106 l
-1682.52 7122.36 1679.5 7131.43 1673.26 7139.12 c
-1666.82 7146.96 1657.36 7151.42 1646.09 7151.42 c
-1620.94 7151.42 1604.03 7131.4 1604.03 7101.88 c
-1604.03 7072.5 1620.53 7053.18 1645.49 7053.18 c
-1661.79 7053.18 1671.65 7059.42 1684.73 7078.34 c
-h
-1632 7113 m
-1632.61 7136.96 1636.23 7144.42 1646.09 7144.42 c
-1651.93 7144.42 1655.55 7141.38 1657.16 7135.49 c
-1658.17 7131.67 1658.57 7126.03 1658.97 7115.77 c
-1658.97 7113 l
-h
-1688.35 7056 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -1732 -7056]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4422.95 6294.95 m
-4422.95 6406.55 4331.75 6497.75 4220.15 6497.75 c
-3723.35 6497.75 l
-3611.75 6497.75 3520.55 6406.55 3520.55 6294.95 c
-3520.55 6158.15 l
-3520.55 6046.55 3611.75 5955.35 3723.35 5955.35 c
-4220.15 5955.35 l
-4331.75 5955.35 4422.95 6046.55 4422.95 6158.15 c
-f*
-1 g
-4353.35 6351.35 m
-4353.35 6459.35 4264.55 6546.95 4155.35 6546.95 c
-3669.35 6546.95 l
-3560.15 6546.95 3471.35 6459.35 3471.35 6351.35 c
-3471.35 6220.55 l
-3471.35 6112.55 3560.15 6024.95 3669.35 6024.95 c
-4155.35 6024.95 l
-4264.55 6024.95 4353.35 6112.55 4353.35 6220.55 c
-f*
-16 w
-0 g
-4353.35 6351.35 m
-4353.35 6459.35 4264.55 6546.95 4155.35 6546.95 c
-3669.35 6546.95 l
-3560.15 6546.95 3471.35 6459.35 3471.35 6351.35 c
-3471.35 6220.55 l
-3471.35 6112.55 3560.15 6024.95 3669.35 6024.95 c
-4155.35 6024.95 l
-4264.55 6024.95 4353.35 6112.55 4353.35 6220.55 c
-h
-S
-0.201248 i
-3699.33 6393 m
-3585.22 6393 l
-3585.22 6388 l
-3599.11 6387.2 3603 6384.18 3603 6373.72 c
-3603 6276.32 l
-3603 6265.85 3600.17 6263.64 3585.22 6262.03 c
-3585.22 6257 l
-3657.67 6257 l
-3657.67 6262 l
-3639.15 6262.81 3636 6265.23 3636 6276.32 c
-3636 6323.21 l
-3656.22 6322.81 3663.55 6315.36 3666.32 6292.02 c
-3671.35 6292.02 l
-3671.35 6360.04 l
-3666.32 6360.04 l
-3662.76 6337.1 3655.82 6330.05 3636 6330.05 c
-3636 6376.74 l
-3636 6384.19 3638.52 6386 3648.41 6386 c
-3667.13 6386 3678.8 6382.64 3685.04 6375.74 c
-3689.47 6370.71 3691.68 6365.27 3694.5 6352.59 c
-3699.33 6352.59 l
-h
-3704.96 6257 m
-f*
-3749.19 6350 m
-3710.84 6350 l
-3710.84 6344.95 l
-3719.49 6343.74 3722 6341.12 3722 6333.07 c
-3722 6273.9 l
-3722 6265.65 3719.93 6263.44 3710.84 6261.83 c
-3710.84 6257 l
-3764.37 6257 l
-3764.37 6261.83 l
-3752.09 6262.63 3750 6265.25 3750 6277.73 c
-3750 6315.76 l
-3750 6326.23 3755.49 6334.88 3761.95 6334.88 c
-3763.56 6334.88 3765.37 6333.47 3767.59 6330.25 c
-3771.41 6324.82 3774.43 6323.01 3779.66 6323.01 c
-3787.11 6323.01 3792.34 6328.64 3792.34 6336.29 c
-3792.34 6345.55 3785.5 6352.41 3776.04 6352.41 c
-3766.1 6352.41 3758.54 6347.12 3749.19 6333.27 c
-h
-3794.35 6257 m
-f*
-3889.19 6269.88 m
-3887.18 6267.87 l
-3886.57 6267.26 3885.97 6267.06 3884.96 6267.06 c
-3882.15 6267.06 3881 6268.67 3881 6272.09 c
-3881 6324.62 l
-3881 6341.73 3865.6 6352.42 3840.89 6352.42 c
-3818.15 6352.42 3802.85 6342.06 3802.85 6326.83 c
-3802.85 6318.38 3807.69 6313.55 3815.94 6313.55 c
-3823.99 6313.55 3829.62 6318.38 3829.62 6325.22 c
-3829.62 6328.04 3828.61 6330.66 3826 6333.88 c
-3824.19 6335.89 3823.58 6337.1 3823.58 6338.3 c
-3823.58 6342.53 3829.02 6345.42 3836.26 6345.42 c
-3848.14 6345.42 3853.86 6340.08 3853.86 6328.04 c
-3853.86 6313.35 l
-3829.91 6306.1 3820.29 6302.48 3812.51 6297.45 c
-3803.46 6291.41 3799 6284.37 3799 6275.52 c
-3799 6263.24 3808.27 6254.18 3821.17 6254.18 c
-3832.84 6254.18 3842.1 6258.21 3853.17 6268.27 c
-3855.38 6258.01 3859.81 6254.18 3869.67 6254.18 c
-3878.32 6254.18 3884.56 6257.4 3892.21 6265.65 c
-h
-3853 6277.13 m
-3847.55 6270.89 3843.52 6268.47 3838.68 6268.47 c
-3832.64 6268.47 3828 6273.91 3828 6281.96 c
-3828 6293.63 3836.61 6301.88 3853 6306.31 c
-h
-3894.62 6257 m
-f*
-3936.4 6350 m
-3897.7 6350 l
-3897.7 6344.95 l
-3906.55 6343.74 3909 6341.32 3909 6333.07 c
-3909 6273.9 l
-3909 6265.65 3906.74 6263.44 3897.7 6261.83 c
-3897.7 6257 l
-3946 6257 l
-3946 6261.83 l
-3938.95 6262.84 3937 6265.65 3937 6273.3 c
-3937 6327.03 l
-3937 6328.04 3939.87 6331.66 3942.18 6333.88 c
-3946.4 6337.1 3950.02 6339.42 3953.65 6339.42 c
-3961.5 6339.42 3965 6334.59 3965 6322 c
-3965 6273.3 l
-3965 6265.05 3962.68 6262.43 3954.85 6261.83 c
-3954.85 6257 l
-4001.95 6257 l
-4001.95 6261.83 l
-3994.9 6262.64 3993 6265.65 3993 6273.3 c
-3993 6327.03 l
-3993 6328.04 3995.73 6331.46 3997.92 6333.68 c
-4002.35 6337.1 4005.97 6339.42 4009.59 6339.42 c
-4017.24 6339.42 4020 6334.38 4020 6322 c
-4020 6273.3 l
-4020 6264.85 4017.85 6262.43 4010.4 6261.83 c
-4010.4 6257 l
-4058.3 6257 l
-4058.3 6262 l
-4050.45 6262.4 4048 6264.78 4048 6273.3 c
-4048 6323.81 l
-4048 6341.12 4037.43 6352.42 4021.07 6352.42 c
-4009.59 6352.42 4001.95 6347.73 3991.48 6334.68 c
-3985.44 6347.36 3978.4 6352.42 3965.72 6352.42 c
-3952.95 6352.42 3943.98 6346.91 3936.4 6334.68 c
-h
-4061.64 6257 m
-f*
-4139.9 6282.16 m
-4131.65 6272.29 4125.61 6268.18 4116.96 6268.18 c
-4109.31 6268.18 4103.27 6271.77 4099.25 6278.94 c
-4095.43 6285.54 4093.82 6292.56 4093.01 6307 c
-4143.73 6307 l
-4142.52 6323.36 4139.5 6332.43 4133.26 6340.12 c
-4126.82 6347.96 4117.36 6352.42 4106.09 6352.42 c
-4080.94 6352.42 4064.03 6332.4 4064.03 6302.88 c
-4064.03 6273.5 4080.53 6254.18 4105.49 6254.18 c
-4121.79 6254.18 4131.65 6260.42 4144.73 6279.34 c
-h
-4092 6314 m
-4092.61 6337.96 4096.23 6345.42 4106.09 6345.42 c
-4111.93 6345.42 4115.55 6342.38 4117.16 6336.49 c
-4118.17 6332.67 4118.57 6327.03 4118.97 6316.77 c
-4118.97 6314 l
-h
-4148.35 6257 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4184 -6255]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3494.15 5588.15 m
-3494.15 5698.55 3402.95 5789.75 3291.35 5789.75 c
-2795.75 5789.75 l
-2684.15 5789.75 2592.95 5698.55 2592.95 5588.15 c
-2592.95 5450.15 l
-2592.95 5339.75 2684.15 5248.55 2795.75 5248.55 c
-3291.35 5248.55 l
-3402.95 5248.55 3494.15 5339.75 3494.15 5450.15 c
-f*
-1 g
-3414.95 5642.15 m
-3414.95 5745.35 3328.55 5829.35 3221.75 5829.35 c
-2746.55 5829.35 l
-2639.75 5829.35 2553.35 5745.35 2553.35 5642.15 c
-2553.35 5514.95 l
-2553.35 5411.75 2639.75 5327.75 2746.55 5327.75 c
-3221.75 5327.75 l
-3328.55 5327.75 3414.95 5411.75 3414.95 5514.95 c
-f*
-32 w
-0 g
-3414.95 5642.15 m
-3414.95 5745.35 3328.55 5829.35 3221.75 5829.35 c
-2746.55 5829.35 l
-2639.75 5829.35 2553.35 5745.35 2553.35 5642.15 c
-2553.35 5514.95 l
-2553.35 5411.75 2639.75 5327.75 2746.55 5327.75 c
-3221.75 5327.75 l
-3328.55 5327.75 3414.95 5411.75 3414.95 5514.95 c
-h
-S
-0.201248 i
-2782.33 5685 m
-2668.22 5685 l
-2668.22 5680 l
-2682.11 5679.2 2686 5676.18 2686 5665.72 c
-2686 5568.32 l
-2686 5557.85 2683.17 5555.64 2668.22 5554.03 c
-2668.22 5549 l
-2740.67 5549 l
-2740.67 5554 l
-2722.15 5554.81 2719 5557.23 2719 5568.32 c
-2719 5615.21 l
-2739.22 5614.81 2746.55 5607.36 2749.32 5584.02 c
-2754.35 5584.02 l
-2754.35 5652.04 l
-2749.32 5652.04 l
-2745.76 5629.1 2738.82 5622.05 2719 5622.05 c
-2719 5668.74 l
-2719 5676.19 2721.52 5678 2731.41 5678 c
-2750.13 5678 2761.8 5674.64 2768.04 5667.74 c
-2772.47 5662.71 2774.68 5657.27 2777.5 5644.59 c
-2782.33 5644.59 l
-h
-2787.96 5549 m
-f*
-2831.19 5642 m
-2792.84 5642 l
-2792.84 5636.95 l
-2801.49 5635.74 2804 5633.12 2804 5625.07 c
-2804 5565.9 l
-2804 5557.65 2801.93 5555.44 2792.84 5553.83 c
-2792.84 5549 l
-2846.37 5549 l
-2846.37 5553.83 l
-2834.09 5554.63 2832 5557.25 2832 5569.73 c
-2832 5607.76 l
-2832 5618.23 2837.49 5626.88 2843.95 5626.88 c
-2845.56 5626.88 2847.37 5625.47 2849.59 5622.25 c
-2853.41 5616.82 2856.43 5615.01 2861.66 5615.01 c
-2869.11 5615.01 2874.34 5620.64 2874.34 5628.29 c
-2874.34 5637.55 2867.5 5644.41 2858.04 5644.41 c
-2848.1 5644.41 2840.54 5639.12 2831.19 5625.27 c
-h
-2876.35 5549 m
-f*
-2971.19 5561.88 m
-2969.18 5559.87 l
-2968.57 5559.26 2967.97 5559.06 2966.96 5559.06 c
-2964.15 5559.06 2963 5560.67 2963 5564.09 c
-2963 5616.62 l
-2963 5633.73 2947.6 5644.42 2922.89 5644.42 c
-2900.15 5644.42 2884.85 5634.06 2884.85 5618.83 c
-2884.85 5610.38 2889.69 5605.55 2897.94 5605.55 c
-2905.99 5605.55 2911.62 5610.38 2911.62 5617.22 c
-2911.62 5620.04 2910.61 5622.66 2908 5625.88 c
-2906.19 5627.89 2905.58 5629.1 2905.58 5630.3 c
-2905.58 5634.53 2911.02 5637.42 2918.26 5637.42 c
-2930.14 5637.42 2935.86 5632.08 2935.86 5620.04 c
-2935.86 5605.35 l
-2911.91 5598.1 2902.29 5594.48 2894.51 5589.45 c
-2885.46 5583.41 2881 5576.37 2881 5567.52 c
-2881 5555.24 2890.27 5546.18 2903.17 5546.18 c
-2914.84 5546.18 2924.1 5550.21 2935.17 5560.27 c
-2937.38 5550.01 2941.81 5546.18 2951.67 5546.18 c
-2960.32 5546.18 2966.56 5549.4 2974.21 5557.65 c
-h
-2935 5569.13 m
-2929.55 5562.89 2925.52 5560.47 2920.68 5560.47 c
-2914.64 5560.47 2910 5565.91 2910 5573.96 c
-2910 5585.63 2918.61 5593.88 2935 5598.31 c
-h
-2976.62 5549 m
-f*
-3018.4 5642 m
-2979.7 5642 l
-2979.7 5636.95 l
-2988.55 5635.74 2991 5633.32 2991 5625.07 c
-2991 5565.9 l
-2991 5557.65 2988.74 5555.44 2979.7 5553.83 c
-2979.7 5549 l
-3028 5549 l
-3028 5553.83 l
-3020.95 5554.84 3019 5557.65 3019 5565.3 c
-3019 5619.03 l
-3019 5620.04 3021.87 5623.66 3024.18 5625.88 c
-3028.4 5629.1 3032.02 5631.42 3035.65 5631.42 c
-3043.5 5631.42 3047 5626.59 3047 5614 c
-3047 5565.3 l
-3047 5557.05 3044.68 5554.43 3036.85 5553.83 c
-3036.85 5549 l
-3083.95 5549 l
-3083.95 5553.83 l
-3076.9 5554.64 3075 5557.65 3075 5565.3 c
-3075 5619.03 l
-3075 5620.04 3077.73 5623.46 3079.92 5625.68 c
-3084.35 5629.1 3087.97 5631.42 3091.59 5631.42 c
-3099.24 5631.42 3102 5626.38 3102 5614 c
-3102 5565.3 l
-3102 5556.85 3099.85 5554.43 3092.4 5553.83 c
-3092.4 5549 l
-3140.3 5549 l
-3140.3 5554 l
-3132.45 5554.4 3130 5556.78 3130 5565.3 c
-3130 5615.81 l
-3130 5633.12 3119.43 5644.42 3103.07 5644.42 c
-3091.59 5644.42 3083.95 5639.73 3073.48 5626.68 c
-3067.44 5639.36 3060.4 5644.42 3047.72 5644.42 c
-3034.95 5644.42 3025.98 5638.91 3018.4 5626.68 c
-h
-3143.64 5549 m
-f*
-3223.9 5574.16 m
-3215.65 5564.29 3209.61 5560.18 3200.96 5560.18 c
-3193.31 5560.18 3187.27 5563.77 3183.25 5570.94 c
-3179.43 5577.54 3177.82 5584.56 3177.01 5599 c
-3227.73 5599 l
-3226.52 5615.36 3223.5 5624.43 3217.26 5632.12 c
-3210.82 5639.96 3201.36 5644.42 3190.09 5644.42 c
-3164.94 5644.42 3148.03 5624.4 3148.03 5594.88 c
-3148.03 5565.5 3164.53 5546.18 3189.49 5546.18 c
-3205.79 5546.18 3215.65 5552.42 3228.73 5571.34 c
-h
-3176 5606 m
-3176.61 5629.96 3180.23 5637.42 3190.09 5637.42 c
-3195.93 5637.42 3199.55 5634.38 3201.16 5628.49 c
-3202.17 5624.67 3202.57 5619.03 3202.97 5608.77 c
-3202.97 5606 l
-h
-3232.35 5549 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3266 -5549]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-16 w
-1456.55 6790.55 m
-1456.55 6798.95 1456.55 6798.95 1456.55 6790.55 c
-1456.55 6654.95 1490.15 6524.15 1552.55 6426.95 c
-S
-1481.75 6436.55 m
-1541.75 6453.35 l
-1574.15 6506.15 l
-1641.35 6324.95 l
-f*
-1949.75 5826.95 m
-2034.95 5715.35 2206.55 5634.95 2412.95 5608.55 c
-S
-2366.15 5556.95 m
-2392.55 5613.35 l
-2374.55 5672.15 l
-2554.55 5601.35 l
-f*
-8 w
-2531.75 7204.55 m
-2429.75 7304.15 2284.55 7361.75 2130.95 7361.75 c
-2026.55 7361.75 1924.55 7335.35 1836.95 7284.95 c
-S
-2466.95 7198.55 m
-2514.95 7214.15 l
-2538.95 7259.75 l
-2602.55 7113.35 l
-f*
-2886.95 6628.55 m
-2975.75 6454.55 3140.15 6329.75 3335.75 6290.15 c
-S
-3291.35 6250.55 m
-3316.55 6296.15 l
-3304.55 6346.55 l
-3448.55 6275.75 l
-f*
-0.564706 g
-3338.15 6804.95 m
-3203.75 6840.95 l
-3299.75 6897.35 l
-3146.15 6905.75 l
-3188.15 6976.55 l
-3040.55 6956.15 l
-3023.75 7026.95 l
-2903.75 6982.55 l
-2828.15 7046.15 l
-2752.55 6982.55 l
-2632.55 7026.95 l
-2614.55 6956.15 l
-2465.75 6976.55 l
-2510.15 6905.75 l
-2356.55 6897.35 l
-2452.55 6840.95 l
-2316.95 6804.95 l
-2452.55 6770.15 l
-2356.55 6713.75 l
-2510.15 6704.15 l
-2465.75 6634.55 l
-2614.55 6654.95 l
-2632.55 6582.95 l
-2752.55 6628.55 l
-2828.15 6564.95 l
-2903.75 6628.55 l
-3023.75 6582.95 l
-3040.55 6654.95 l
-3188.15 6634.55 l
-3146.15 6704.15 l
-3299.75 6713.75 l
-3203.75 6770.15 l
-f*
-1 g
-3278.15 6864.95 m
-3143.75 6900.95 l
-3239.75 6957.35 l
-3086.15 6965.75 l
-3128.15 7036.55 l
-2980.55 7016.15 l
-2963.75 7086.95 l
-2843.75 7042.55 l
-2768.15 7106.15 l
-2692.55 7042.55 l
-2572.55 7086.95 l
-2554.55 7016.15 l
-2405.75 7036.55 l
-2450.15 6965.75 l
-2296.55 6957.35 l
-2392.55 6900.95 l
-2256.95 6864.95 l
-2392.55 6830.15 l
-2296.55 6773.75 l
-2450.15 6764.15 l
-2405.75 6694.55 l
-2554.55 6714.95 l
-2572.55 6642.95 l
-2692.55 6688.55 l
-2768.15 6624.95 l
-2843.75 6688.55 l
-2963.75 6642.95 l
-2980.55 6714.95 l
-3128.15 6694.55 l
-3086.15 6764.15 l
-3239.75 6773.75 l
-3143.75 6830.15 l
-f*
-0 g
-3278.15 6864.95 m
-3143.75 6900.95 l
-3239.75 6957.35 l
-3086.15 6965.75 l
-3128.15 7036.55 l
-2980.55 7016.15 l
-2963.75 7086.95 l
-2843.75 7042.55 l
-2768.15 7106.15 l
-2692.55 7042.55 l
-2572.55 7086.95 l
-2554.55 7016.15 l
-2405.75 7036.55 l
-2450.15 6965.75 l
-2296.55 6957.35 l
-2392.55 6900.95 l
-2256.95 6864.95 l
-2392.55 6830.15 l
-2296.55 6773.75 l
-2450.15 6764.15 l
-2405.75 6694.55 l
-2554.55 6714.95 l
-2572.55 6642.95 l
-2692.55 6688.55 l
-2768.15 6624.95 l
-2843.75 6688.55 l
-2963.75 6642.95 l
-2980.55 6714.95 l
-3128.15 6694.55 l
-3086.15 6764.15 l
-3239.75 6773.75 l
-3143.75 6830.15 l
-3278.15 6864.95 l
-3239.75 6864.95 l
-3117.35 6833.75 l
-3206.15 6780.95 l
-3068.15 6773.75 l
-3108.95 6707.75 l
-2973.35 6725.75 l
-2956.55 6657.35 l
-2841.35 6699.35 l
-2768.15 6636.95 l
-2694.95 6699.35 l
-2579.75 6657.35 l
-2561.75 6725.75 l
-2426.15 6707.75 l
-2466.95 6773.75 l
-2330.15 6780.95 l
-2418.95 6833.75 l
-2296.55 6864.95 l
-2417.75 6897.35 l
-2330.15 6950.15 l
-2466.95 6957.35 l
-2426.15 7023.35 l
-2561.75 7004.15 l
-2579.75 7073.75 l
-2694.95 7030.55 l
-2768.15 7092.95 l
-2841.35 7030.55 l
-2956.55 7073.75 l
-2973.35 7004.15 l
-3108.95 7023.35 l
-3068.15 6957.35 l
-3206.15 6950.15 l
-3117.35 6897.35 l
-3239.75 6864.95 l
-3278.15 6864.95 l
-f*
-0.2 i
-2590.08 6916.76 m
-2570.08 6842.52 l
-2567.52 6833.88 2564.48 6831.64 2554.08 6831 c
-2554.08 6827 l
-2604 6827 l
-2604 6831 l
-2594.72 6831.48 2592.48 6832.76 2592.48 6837.88 c
-2592.48 6839.64 2592.8 6841.4 2593.76 6845.08 c
-2593.92 6845.88 l
-2594.08 6846.68 l
-2613.76 6918.52 l
-2616.16 6926.84 2618.56 6929.08 2626.72 6930.04 c
-2626.72 6934 l
-2592.8 6934 l
-2543.2 6857.24 l
-2534.56 6934 l
-2499.2 6934 l
-2499.2 6930 l
-2509.28 6929.52 2510.72 6928.89 2510.72 6924.44 c
-2510.72 6922.2 2510.08 6919.32 2508.96 6915.16 c
-2491.52 6855.48 l
-2485.12 6834.68 2484 6832.92 2475.36 6831 c
-2475.36 6827 l
-2508.48 6827 l
-2508.48 6831 l
-2498.24 6832.28 2495.68 6834.2 2495.68 6840.76 c
-2495.68 6843.48 2496.48 6847.48 2498.72 6855.48 c
-2514.88 6914.52 l
-2525.6 6825.08 l
-2530.08 6825.08 l
-h
-2622.24 6827 m
-f*
-2691.44 6847.32 m
-2684.88 6838.52 2682.48 6835.76 2679.92 6835.76 c
-2678.64 6835.76 2678 6836.86 2678 6838.52 c
-2678 6842.52 2679.44 6849.08 2683.44 6862.2 c
-2694.8 6899.96 l
-2677.04 6898.84 l
-2674.16 6889.4 l
-2672.72 6897.56 2669.2 6901.08 2662.32 6901.08 c
-2642.64 6901.08 2619 6870.27 2619 6845.24 c
-2619 6833.08 2625.74 6824.92 2635.92 6824.92 c
-2645.68 6824.92 2653.04 6830.68 2662.16 6846.04 c
-2660.24 6839.48 2660 6837.56 2660 6835.32 c
-2660 6829.4 2664.76 6824.76 2670.64 6824.76 c
-2678.16 6824.76 2685.52 6831 2694.8 6844.92 c
-h
-2664.56 6894.2 m
-2668.08 6893.88 2670.56 6891 2670.56 6886.68 c
-2670.56 6877.08 2665.24 6859.32 2658.96 6848.28 c
-2654.64 6840.44 2649.84 6835.92 2645.52 6835.92 c
-2641.36 6835.92 2638 6839.75 2638 6844.92 c
-2638 6853.24 2643.42 6869.24 2650.16 6881.08 c
-2654.96 6889.56 2660.24 6894.52 2664.56 6894.2 c
-h
-2702 6827 m
-f*
-2736.56 6900.92 m
-2720.24 6898.36 2714 6897.4 2705.68 6896.44 c
-2705.68 6892 l
-2712.88 6891.69 2714.32 6891.07 2714.32 6888.12 c
-2714.32 6886.52 2713.04 6880.76 2710.8 6872.44 c
-2694.8 6810.36 l
-2691.76 6799.8 2690.48 6798.84 2682.8 6799 c
-2682.8 6794 l
-2722.64 6794 l
-2722.64 6799 l
-2714.64 6799.14 2712.24 6800.16 2712.24 6803.64 c
-2712.24 6805.88 2713.36 6810.68 2716.4 6821.88 c
-2717.52 6825.72 2717.52 6826.04 2718.16 6828.44 c
-2723.76 6825.56 2725.68 6824.92 2729.04 6824.92 c
-2750.8 6824.92 2773.36 6853.88 2773.36 6881.56 c
-2773.36 6893.4 2766.64 6901.08 2756.08 6901.08 c
-2746.96 6901.08 2739.92 6895.92 2730.48 6882.52 c
-h
-2747.12 6889.56 m
-2751.28 6889.24 2753.68 6885.56 2753.36 6880.44 c
-2752.72 6869.88 2747.6 6854.04 2741.84 6843.64 c
-2736.88 6835 2731.76 6829.92 2726.32 6829.92 c
-2722.8 6829.92 2720.08 6832.75 2720.08 6836.28 c
-2720.08 6839 2721.84 6845.56 2726.16 6860.12 c
-2729.68 6871.8 2731.12 6875.8 2733.52 6879.48 c
-2737.52 6885.72 2742.96 6889.88 2747.12 6889.56 c
-h
-2782 6827 m
-f*
-2817.56 6900.92 m
-2801.24 6898.36 2795 6897.4 2786.68 6896.44 c
-2786.68 6892 l
-2793.88 6891.69 2795.32 6891.07 2795.32 6888.12 c
-2795.32 6886.52 2794.04 6880.76 2791.8 6872.44 c
-2775.8 6810.36 l
-2772.76 6799.8 2771.48 6798.84 2763.8 6799 c
-2763.8 6794 l
-2803.64 6794 l
-2803.64 6799 l
-2795.64 6799.14 2793.24 6800.16 2793.24 6803.64 c
-2793.24 6805.88 2794.36 6810.68 2797.4 6821.88 c
-2798.52 6825.72 2798.52 6826.04 2799.16 6828.44 c
-2804.76 6825.56 2806.68 6824.92 2810.04 6824.92 c
-2831.8 6824.92 2854.36 6853.88 2854.36 6881.56 c
-2854.36 6893.4 2847.64 6901.08 2837.08 6901.08 c
-2827.96 6901.08 2820.92 6895.92 2811.48 6882.52 c
-h
-2828.12 6889.56 m
-2832.28 6889.24 2834.68 6885.56 2834.36 6880.44 c
-2833.72 6869.88 2828.6 6854.04 2822.84 6843.64 c
-2817.88 6835 2812.76 6829.92 2807.32 6829.92 c
-2803.8 6829.92 2801.08 6832.75 2801.08 6836.28 c
-2801.08 6839 2802.84 6845.56 2807.16 6860.12 c
-2810.68 6871.8 2812.12 6875.8 2814.52 6879.48 c
-2818.52 6885.72 2823.96 6889.88 2828.12 6889.56 c
-h
-2863 6827 m
-f*
-2896.56 6849.56 m
-2894.32 6846.36 l
-2890.16 6840.12 2886.48 6836.56 2884.08 6836.56 c
-2882.8 6836.56 2882 6837.77 2882 6839.16 c
-2882 6840.6 2882.62 6844.76 2883.12 6847.48 c
-2897.68 6900.92 l
-2889.22 6899 2878.26 6897.4 2866.04 6896.44 c
-2866.04 6892 l
-2867.44 6892 l
-2872.24 6892 2875.48 6890.44 2875.48 6887.48 c
-2875.48 6886.2 2874.71 6883.8 2873.68 6881.08 c
-2864.4 6846.68 l
-2863.12 6842.04 2863 6837.88 2863 6835.64 c
-2863 6829.56 2867.2 6825.56 2873.36 6825.56 c
-2882.96 6825.56 2888.88 6830.36 2900.08 6847.32 c
-h
-2892.88 6936.4 m
-2887.44 6936.4 2883 6931.46 2883 6926.04 c
-2883 6919.8 2887.26 6915.4 2893.04 6915.4 c
-2899.12 6915.4 2904 6919.86 2904 6925.56 c
-2904 6931.48 2899 6936.4 2892.88 6936.4 c
-h
-2906.48 6827 m
-f*
-2981.36 6848.6 m
-2974.96 6838.68 2972.88 6836.56 2970.16 6836.56 c
-2968.88 6836.56 2968 6837.63 2968 6839.16 c
-2968 6840.76 2968.94 6844.12 2971.92 6853.08 c
-2977.68 6870.52 l
-2980.24 6878.04 2982 6885.08 2982 6888.92 c
-2982 6896.76 2977.78 6901.08 2970.16 6901.08 c
-2964.24 6901.08 2958.48 6898.62 2954.16 6894.36 c
-2948.24 6888.76 2945.2 6884.92 2934.48 6869.08 c
-2944.72 6900.76 l
-2934.48 6898.52 2921.68 6896.92 2912.72 6896.6 c
-2912.72 6891.8 l
-2919.44 6891.65 2921.36 6890.92 2921.36 6888.12 c
-2921.36 6886.2 2919.12 6877.72 2914 6859.64 c
-2910.32 6846.68 2909.2 6842.52 2905.04 6827 c
-2924.4 6827 l
-2931.92 6854.68 2937.68 6868.6 2947.6 6881.56 c
-2950.8 6885.88 2955.76 6889.08 2958.64 6889.08 c
-2960.72 6889.08 2963 6887.63 2963 6886.04 c
-2963 6885.56 2962.54 6884.28 2961.84 6882.68 c
-2953.04 6856.12 l
-2950.48 6848.44 2949 6839.32 2949 6835.16 c
-2949 6829.08 2952.84 6825.56 2959.44 6825.56 c
-2969.04 6825.56 2975.6 6831 2984.88 6846.52 c
-h
-2994.96 6827 m
-f*
-3072.48 6896 m
-3054.72 6896 l
-3049.28 6899.58 3044.48 6901.08 3037.12 6901.08 c
-3017.44 6901.08 3001 6888.05 3001 6871.8 c
-3001 6863.64 3005.35 6857.88 3014.4 6854.2 c
-3001.28 6846.84 2999 6844.6 2999 6838.68 c
-2999 6833.56 3001.89 6830.52 3008.96 6828.12 c
-2999.04 6825.72 2995.84 6824.44 2992 6821.4 c
-2989.44 6819.16 2988 6815.32 2988 6811.48 c
-2988 6801.08 2999.56 6795 3017.76 6795 c
-3040.32 6795 3056 6804.72 3056 6818.52 c
-3056 6828.28 3049.6 6833.56 3032.16 6838.52 c
-3023.68 6840.92 l
-3018.56 6842.36 3015 6844.6 3015 6847 c
-3015 6849.56 3017.68 6852.28 3020 6852.28 c
-3020.8 6852.28 3021.92 6852.24 3023.2 6852.12 c
-3024.96 6851.64 3026.24 6851 3028.16 6851 c
-3035.2 6851 3042.4 6853.09 3048.48 6856.92 c
-3057.76 6862.2 3063 6870.36 3063 6879.96 c
-3063 6882.64 3062.59 6884.32 3061.76 6887 c
-3072.48 6887 l
-h
-3014.4 6826.04 m
-3016.32 6825.88 3028.48 6821.72 3032 6820.12 c
-3036.48 6817.88 3039 6815.16 3039 6811 c
-3039 6803.96 3031.8 6800 3019.36 6800 c
-3008.96 6800 3002 6805.1 3002 6812.44 c
-3002 6815.48 3003.32 6818.2 3006.24 6821.24 c
-3008.32 6823.32 3013.12 6826.2 3014.4 6826.04 c
-h
-3036.8 6896.08 m
-3040.96 6896.08 3044 6892.19 3044 6886.52 c
-3044 6881.08 3042.08 6873.4 3039.36 6867.48 c
-3036 6860.12 3031.84 6856 3026.88 6856 c
-3022.56 6856 3020 6859.52 3020 6865.88 c
-3020 6872.28 3022.79 6882.04 3026.24 6888.12 c
-3029.28 6893.4 3032.64 6896.08 3036.8 6896.08 c
-h
-3076 6827 m
-f*
-1 i
-0.564706 g
-2408.15 6009.35 m
-2273.75 6046.55 l
-2369.75 6101.75 l
-2216.15 6111.35 l
-2258.15 6180.95 l
-2110.55 6160.55 l
-2093.75 6232.55 l
-1973.75 6186.95 l
-1898.15 6250.55 l
-1822.55 6186.95 l
-1702.55 6232.55 l
-1684.55 6160.55 l
-1535.75 6180.95 l
-1580.15 6111.35 l
-1426.55 6101.75 l
-1522.55 6046.55 l
-1386.95 6009.35 l
-1522.55 5974.55 l
-1426.55 5918.15 l
-1580.15 5909.75 l
-1535.75 5840.15 l
-1684.55 5859.35 l
-1702.55 5788.55 l
-1822.55 5832.95 l
-1898.15 5769.35 l
-1973.75 5832.95 l
-2093.75 5788.55 l
-2110.55 5859.35 l
-2258.15 5840.15 l
-2216.15 5909.75 l
-2369.75 5918.15 l
-2273.75 5974.55 l
-f*
-1 g
-2348.15 6069.35 m
-2213.75 6106.55 l
-2309.75 6161.75 l
-2156.15 6171.35 l
-2198.15 6240.95 l
-2050.55 6220.55 l
-2033.75 6292.55 l
-1913.75 6246.95 l
-1838.15 6310.55 l
-1762.55 6246.95 l
-1642.55 6292.55 l
-1624.55 6220.55 l
-1475.75 6240.95 l
-1520.15 6171.35 l
-1366.55 6161.75 l
-1462.55 6106.55 l
-1326.95 6069.35 l
-1462.55 6034.55 l
-1366.55 5978.15 l
-1520.15 5969.75 l
-1475.75 5900.15 l
-1624.55 5919.35 l
-1642.55 5848.55 l
-1762.55 5892.95 l
-1838.15 5829.35 l
-1913.75 5892.95 l
-2033.75 5848.55 l
-2050.55 5919.35 l
-2198.15 5900.15 l
-2156.15 5969.75 l
-2309.75 5978.15 l
-2213.75 6034.55 l
-f*
-0 g
-2348.15 6069.35 m
-2213.75 6106.55 l
-2309.75 6161.75 l
-2156.15 6171.35 l
-2198.15 6240.95 l
-2050.55 6220.55 l
-2033.75 6292.55 l
-1913.75 6246.95 l
-1838.15 6310.55 l
-1762.55 6246.95 l
-1642.55 6292.55 l
-1624.55 6220.55 l
-1475.75 6240.95 l
-1520.15 6171.35 l
-1366.55 6161.75 l
-1462.55 6106.55 l
-1326.95 6069.35 l
-1462.55 6034.55 l
-1366.55 5978.15 l
-1520.15 5969.75 l
-1475.75 5900.15 l
-1624.55 5919.35 l
-1642.55 5848.55 l
-1762.55 5892.95 l
-1838.15 5829.35 l
-1913.75 5892.95 l
-2033.75 5848.55 l
-2050.55 5919.35 l
-2198.15 5900.15 l
-2156.15 5969.75 l
-2309.75 5978.15 l
-2213.75 6034.55 l
-2348.15 6069.35 l
-2271.35 6069.35 l
-2162.15 6041.75 l
-2242.55 5994.95 l
-2122.55 5987.75 l
-2159.75 5924.15 l
-2036.15 5942.15 l
-2019.35 5874.95 l
-1910.15 5915.75 l
-1838.15 5855.75 l
-1766.15 5915.75 l
-1655.75 5874.95 l
-1640.15 5942.15 l
-1516.55 5924.15 l
-1554.95 5987.75 l
-1433.75 5994.95 l
-1514.15 6041.75 l
-1404.95 6069.35 l
-1514.15 6098.15 l
-1433.75 6146.15 l
-1554.95 6153.35 l
-1516.55 6215.75 l
-1640.15 6198.95 l
-1655.75 6266.15 l
-1766.15 6224.15 l
-1838.15 6284.15 l
-1910.15 6224.15 l
-2019.35 6266.15 l
-2036.15 6198.95 l
-2159.75 6215.75 l
-2122.55 6153.35 l
-2242.55 6146.15 l
-2162.15 6098.15 l
-2271.35 6069.35 l
-2348.15 6069.35 l
-f*
-0.2 i
-1660.08 6120.76 m
-1640.08 6046.52 l
-1637.52 6037.88 1634.48 6035.64 1624.08 6035 c
-1624.08 6031 l
-1674 6031 l
-1674 6035 l
-1664.72 6035.48 1662.48 6036.76 1662.48 6041.88 c
-1662.48 6043.64 1662.8 6045.4 1663.76 6049.08 c
-1663.92 6049.88 l
-1664.08 6050.68 l
-1683.76 6122.52 l
-1686.16 6130.84 1688.56 6133.08 1696.72 6134.04 c
-1696.72 6138 l
-1662.8 6138 l
-1613.2 6061.24 l
-1604.56 6138 l
-1569.2 6138 l
-1569.2 6134 l
-1579.28 6133.52 1580.72 6132.89 1580.72 6128.44 c
-1580.72 6126.2 1580.08 6123.32 1578.96 6119.16 c
-1561.52 6059.48 l
-1555.12 6038.68 1554 6036.92 1545.36 6035 c
-1545.36 6031 l
-1578.48 6031 l
-1578.48 6035 l
-1568.24 6036.28 1565.68 6038.2 1565.68 6044.76 c
-1565.68 6047.48 1566.48 6051.48 1568.72 6059.48 c
-1584.88 6118.52 l
-1595.6 6029.08 l
-1600.08 6029.08 l
-h
-1692.24 6031 m
-f*
-1761.44 6051.32 m
-1754.88 6042.52 1752.48 6039.76 1749.92 6039.76 c
-1748.64 6039.76 1748 6040.86 1748 6042.52 c
-1748 6046.52 1749.44 6053.08 1753.44 6066.2 c
-1764.8 6103.96 l
-1747.04 6102.84 l
-1744.16 6093.4 l
-1742.72 6101.56 1739.2 6105.08 1732.32 6105.08 c
-1712.64 6105.08 1689 6074.27 1689 6049.24 c
-1689 6037.08 1695.74 6028.92 1705.92 6028.92 c
-1715.68 6028.92 1723.04 6034.68 1732.16 6050.04 c
-1730.24 6043.48 1730 6041.56 1730 6039.32 c
-1730 6033.4 1734.76 6028.76 1740.64 6028.76 c
-1748.16 6028.76 1755.52 6035 1764.8 6048.92 c
-h
-1734.56 6098.2 m
-1738.08 6097.88 1740.56 6095 1740.56 6090.68 c
-1740.56 6081.08 1735.24 6063.32 1728.96 6052.28 c
-1724.64 6044.44 1719.84 6039.92 1715.52 6039.92 c
-1711.36 6039.92 1708 6043.75 1708 6048.92 c
-1708 6057.24 1713.42 6073.24 1720.16 6085.08 c
-1724.96 6093.56 1730.24 6098.52 1734.56 6098.2 c
-h
-1772 6031 m
-f*
-1806.56 6104.92 m
-1790.24 6102.36 1784 6101.4 1775.68 6100.44 c
-1775.68 6096 l
-1782.88 6095.69 1784.32 6095.07 1784.32 6092.12 c
-1784.32 6090.52 1783.04 6084.76 1780.8 6076.44 c
-1764.8 6014.36 l
-1761.76 6003.8 1760.48 6002.84 1752.8 6003 c
-1752.8 5998 l
-1792.64 5998 l
-1792.64 6003 l
-1784.64 6003.14 1782.24 6004.16 1782.24 6007.64 c
-1782.24 6009.88 1783.36 6014.68 1786.4 6025.88 c
-1787.52 6029.72 1787.52 6030.04 1788.16 6032.44 c
-1793.76 6029.56 1795.68 6028.92 1799.04 6028.92 c
-1820.8 6028.92 1843.36 6057.88 1843.36 6085.56 c
-1843.36 6097.4 1836.64 6105.08 1826.08 6105.08 c
-1816.96 6105.08 1809.92 6099.92 1800.48 6086.52 c
-h
-1817.12 6093.56 m
-1821.28 6093.24 1823.68 6089.56 1823.36 6084.44 c
-1822.72 6073.88 1817.6 6058.04 1811.84 6047.64 c
-1806.88 6039 1801.76 6033.92 1796.32 6033.92 c
-1792.8 6033.92 1790.08 6036.75 1790.08 6040.28 c
-1790.08 6043 1791.84 6049.56 1796.16 6064.12 c
-1799.68 6075.8 1801.12 6079.8 1803.52 6083.48 c
-1807.52 6089.72 1812.96 6093.88 1817.12 6093.56 c
-h
-1852 6031 m
-f*
-1887.56 6104.92 m
-1871.24 6102.36 1865 6101.4 1856.68 6100.44 c
-1856.68 6096 l
-1863.88 6095.69 1865.32 6095.07 1865.32 6092.12 c
-1865.32 6090.52 1864.04 6084.76 1861.8 6076.44 c
-1845.8 6014.36 l
-1842.76 6003.8 1841.48 6002.84 1833.8 6003 c
-1833.8 5998 l
-1873.64 5998 l
-1873.64 6003 l
-1865.64 6003.14 1863.24 6004.16 1863.24 6007.64 c
-1863.24 6009.88 1864.36 6014.68 1867.4 6025.88 c
-1868.52 6029.72 1868.52 6030.04 1869.16 6032.44 c
-1874.76 6029.56 1876.68 6028.92 1880.04 6028.92 c
-1901.8 6028.92 1924.36 6057.88 1924.36 6085.56 c
-1924.36 6097.4 1917.64 6105.08 1907.08 6105.08 c
-1897.96 6105.08 1890.92 6099.92 1881.48 6086.52 c
-h
-1898.12 6093.56 m
-1902.28 6093.24 1904.68 6089.56 1904.36 6084.44 c
-1903.72 6073.88 1898.6 6058.04 1892.84 6047.64 c
-1887.88 6039 1882.76 6033.92 1877.32 6033.92 c
-1873.8 6033.92 1871.08 6036.75 1871.08 6040.28 c
-1871.08 6043 1872.84 6049.56 1877.16 6064.12 c
-1880.68 6075.8 1882.12 6079.8 1884.52 6083.48 c
-1888.52 6089.72 1893.96 6093.88 1898.12 6093.56 c
-h
-1933 6031 m
-f*
-1966.56 6053.56 m
-1964.32 6050.36 l
-1960.16 6044.12 1956.48 6040.56 1954.08 6040.56 c
-1952.8 6040.56 1952 6041.77 1952 6043.16 c
-1952 6044.6 1952.62 6048.76 1953.12 6051.48 c
-1967.68 6104.92 l
-1959.22 6103 1948.26 6101.4 1936.04 6100.44 c
-1936.04 6096 l
-1937.44 6096 l
-1942.24 6096 1945.48 6094.44 1945.48 6091.48 c
-1945.48 6090.2 1944.71 6087.8 1943.68 6085.08 c
-1934.4 6050.68 l
-1933.12 6046.04 1933 6041.88 1933 6039.64 c
-1933 6033.56 1937.2 6029.56 1943.36 6029.56 c
-1952.96 6029.56 1958.88 6034.36 1970.08 6051.32 c
-h
-1962.88 6140.4 m
-1957.44 6140.4 1953 6135.46 1953 6130.04 c
-1953 6123.8 1957.26 6119.4 1963.04 6119.4 c
-1969.12 6119.4 1974 6123.86 1974 6129.56 c
-1974 6135.48 1969 6140.4 1962.88 6140.4 c
-h
-1976.48 6031 m
-f*
-2051.36 6052.6 m
-2044.96 6042.68 2042.88 6040.56 2040.16 6040.56 c
-2038.88 6040.56 2038 6041.63 2038 6043.16 c
-2038 6044.76 2038.94 6048.12 2041.92 6057.08 c
-2047.68 6074.52 l
-2050.24 6082.04 2052 6089.08 2052 6092.92 c
-2052 6100.76 2047.78 6105.08 2040.16 6105.08 c
-2034.24 6105.08 2028.48 6102.62 2024.16 6098.36 c
-2018.24 6092.76 2015.2 6088.92 2004.48 6073.08 c
-2014.72 6104.76 l
-2004.48 6102.52 1991.68 6100.92 1982.72 6100.6 c
-1982.72 6095.8 l
-1989.44 6095.65 1991.36 6094.92 1991.36 6092.12 c
-1991.36 6090.2 1989.12 6081.72 1984 6063.64 c
-1980.32 6050.68 1979.2 6046.52 1975.04 6031 c
-1994.4 6031 l
-2001.92 6058.68 2007.68 6072.6 2017.6 6085.56 c
-2020.8 6089.88 2025.76 6093.08 2028.64 6093.08 c
-2030.72 6093.08 2033 6091.63 2033 6090.04 c
-2033 6089.56 2032.54 6088.28 2031.84 6086.68 c
-2023.04 6060.12 l
-2020.48 6052.44 2019 6043.32 2019 6039.16 c
-2019 6033.08 2022.84 6029.56 2029.44 6029.56 c
-2039.04 6029.56 2045.6 6035 2054.88 6050.52 c
-h
-2064.96 6031 m
-f*
-2142.48 6100 m
-2124.72 6100 l
-2119.28 6103.58 2114.48 6105.08 2107.12 6105.08 c
-2087.44 6105.08 2071 6092.05 2071 6075.8 c
-2071 6067.64 2075.35 6061.88 2084.4 6058.2 c
-2071.28 6050.84 2069 6048.6 2069 6042.68 c
-2069 6037.56 2071.89 6034.52 2078.96 6032.12 c
-2069.04 6029.72 2065.84 6028.44 2062 6025.4 c
-2059.44 6023.16 2058 6019.32 2058 6015.48 c
-2058 6005.08 2069.56 5999 2087.76 5999 c
-2110.32 5999 2126 6008.72 2126 6022.52 c
-2126 6032.28 2119.6 6037.56 2102.16 6042.52 c
-2093.68 6044.92 l
-2088.56 6046.36 2085 6048.6 2085 6051 c
-2085 6053.56 2087.68 6056.28 2090 6056.28 c
-2090.8 6056.28 2091.92 6056.24 2093.2 6056.12 c
-2094.96 6055.64 2096.24 6055 2098.16 6055 c
-2105.2 6055 2112.4 6057.09 2118.48 6060.92 c
-2127.76 6066.2 2133 6074.36 2133 6083.96 c
-2133 6086.64 2132.59 6088.32 2131.76 6091 c
-2142.48 6091 l
-h
-2084.4 6030.04 m
-2086.32 6029.88 2098.48 6025.72 2102 6024.12 c
-2106.48 6021.88 2109 6019.16 2109 6015 c
-2109 6007.96 2101.8 6004 2089.36 6004 c
-2078.96 6004 2072 6009.1 2072 6016.44 c
-2072 6019.48 2073.32 6022.2 2076.24 6025.24 c
-2078.32 6027.32 2083.12 6030.2 2084.4 6030.04 c
-h
-2106.8 6100.08 m
-2110.96 6100.08 2114 6096.19 2114 6090.52 c
-2114 6085.08 2112.08 6077.4 2109.36 6071.48 c
-2106 6064.12 2101.84 6060 2096.88 6060 c
-2092.56 6060 2090 6063.52 2090 6069.88 c
-2090 6076.28 2092.79 6086.04 2096.24 6092.12 c
-2099.28 6097.4 2102.64 6100.08 2106.8 6100.08 c
-h
-2146 6031 m
-f*
-1 i
-1 g
-3922.55 6609.35 m
-4088.15 6760.55 l
-4006.55 6760.55 l
-4006.55 6914.15 l
-3839.75 6914.15 l
-3839.75 6760.55 l
-3758.15 6760.55 l
-f*
-0 g
-3922.55 6609.35 m
-4088.15 6760.55 l
-4006.55 6760.55 l
-4006.55 6914.15 l
-3839.75 6914.15 l
-3839.75 6760.55 l
-3758.15 6760.55 l
-3922.55 6609.35 l
-3922.55 6623.75 l
-3783.35 6750.95 l
-3849.35 6750.95 l
-3849.35 6904.55 l
-3995.75 6904.55 l
-3995.75 6750.95 l
-4061.75 6750.95 l
-3922.55 6623.75 l
-3922.55 6609.35 l
-f*
-0.2 i
-3475.88 7147 m
-3475.88 7142 l
-3488.3 7141.29 3492 7138.45 3492 7129.4 c
-3492 7042.28 l
-3492 7033.1 3489.25 7030.94 3475.88 7029.5 c
-3475.88 7025 l
-3533.84 7025 l
-3564.26 7025 3584 7038.5 3584 7058.84 c
-3584 7067.12 3580.73 7074.32 3574.7 7079.9 c
-3568.4 7085.48 3562.28 7088 3549.68 7090.7 c
-3570.56 7096.82 3578 7104.2 3578 7117.88 c
-3578 7136.42 3561.55 7147 3531.5 7147 c
-h
-3521 7086.74 m
-3525.92 7086.74 l
-3544.46 7086.74 3553 7077.2 3553 7057.22 c
-3553 7039.76 3545.77 7031 3531.5 7031 c
-3523.58 7031 3521 7033.99 3521 7041.74 c
-h
-3521 7132.46 m
-3521 7138.94 3523.39 7142 3530.24 7142 c
-3542.84 7142 3549 7134.03 3549 7116.62 c
-3549 7097.72 3543.08 7092.68 3521 7092.14 c
-h
-3593.06 7025 m
-f*
-3678.14 7036.52 m
-3676.34 7034.72 l
-3675.8 7034.18 3675.26 7034 3674.36 7034 c
-3671.84 7034 3671 7035.44 3671 7038.5 c
-3671 7085.48 l
-3671 7100.78 3657.16 7110.16 3634.94 7110.16 c
-3614.6 7110.16 3600.92 7100.97 3600.92 7087.46 c
-3600.92 7079.9 3605.24 7075.58 3612.62 7075.58 c
-3619.82 7075.58 3624.86 7079.9 3624.86 7086.02 c
-3624.86 7088.54 3623.96 7090.88 3621.62 7093.76 c
-3620 7095.56 3619.46 7096.64 3619.46 7097.72 c
-3619.46 7101.5 3624.32 7104.16 3630.8 7104.16 c
-3641.42 7104.16 3646 7099.37 3646 7088.54 c
-3646 7075.4 l
-3624.89 7068.92 3616.41 7065.68 3609.56 7061.18 c
-3601.46 7055.78 3598 7049.48 3598 7041.56 c
-3598 7030.58 3606.07 7022.48 3617.3 7022.48 c
-3627.74 7022.48 3636.02 7026.08 3645.92 7035.08 c
-3647.9 7025.9 3651.86 7022.48 3660.68 7022.48 c
-3668.42 7022.48 3674 7025.36 3680.84 7032.74 c
-h
-3646 7043 m
-3641.04 7037.42 3637.37 7035.26 3632.96 7035.26 c
-3627.56 7035.26 3624 7040.12 3624 7047.32 c
-3624 7057.76 3631.57 7065.14 3646 7069.1 c
-h
-3683 7025 m
-f*
-3744.22 7083.68 m
-3744.22 7109.8 l
-3740.24 7109.8 l
-3739.16 7107.08 3738.08 7106.2 3735.74 7106.2 c
-3734.66 7106.2 3733.04 7106.55 3730.16 7107.44 c
-3724.4 7109.42 3720.26 7110.16 3716.12 7110.16 c
-3699.74 7110.16 3688 7098.99 3688 7083.86 c
-3688 7071.98 3695.34 7063.7 3713.42 7055.96 c
-3725.84 7050.56 3731 7046.06 3731 7040.3 c
-3731 7033.28 3725.48 7028.48 3717.2 7028.48 c
-3704.6 7028.48 3696.32 7036.62 3692.54 7052.36 c
-3687.5 7052.36 l
-3687.5 7022.66 l
-3692 7022.66 l
-3693.98 7026.44 3695.06 7027.7 3696.68 7027.7 c
-3697.58 7027.7 3699.02 7027.34 3700.82 7026.62 c
-3706.04 7024.46 3715.22 7022.48 3720.26 7022.48 c
-3736.64 7022.48 3748 7033.64 3748 7049.84 c
-3748 7062.62 3741.15 7070.54 3723.14 7077.92 c
-3710.9 7083.14 3706 7087.64 3706 7093.76 c
-3706 7099.7 3710.98 7104.16 3717.74 7104.16 c
-3722.6 7104.16 3727.28 7102.19 3731.24 7098.44 c
-3735.02 7094.84 3737 7091.42 3739.7 7083.68 c
-h
-3753.02 7025 m
-f*
-3824.36 7047.5 m
-3816.98 7038.68 3811.58 7035.48 3803.84 7035.48 c
-3797 7035.48 3791.6 7038.53 3788 7044.62 c
-3784.58 7050.36 3783.14 7056.45 3782.42 7069 c
-3827.78 7069 l
-3826.7 7083.99 3824 7092.3 3818.42 7099.34 c
-3812.66 7106.36 3804.2 7110.16 3794.12 7110.16 c
-3771.62 7110.16 3756.5 7092.33 3756.5 7066.04 c
-3756.5 7039.76 3771.26 7022.48 3793.58 7022.48 c
-3808.16 7022.48 3816.98 7028.06 3828.68 7044.98 c
-h
-3781.52 7076 m
-3782.06 7097.42 3785.3 7104.16 3794.12 7104.16 c
-3799.34 7104.16 3802.58 7101.42 3804.02 7096.1 c
-3804.92 7092.68 3805.28 7087.64 3805.64 7078.46 c
-3805.64 7076 l
-h
-3831.92 7025 m
-f*
-3878 7025 m
-f*
-3981.94 7147 m
-3879.88 7147 l
-3879.88 7142 l
-3892.3 7141.29 3896 7138.63 3896 7129.4 c
-3896 7042.28 l
-3896 7032.92 3893.44 7030.94 3879.88 7029.5 c
-3879.88 7025 l
-3944.68 7025 l
-3944.68 7030 l
-3928.12 7030.69 3925 7032.77 3925 7042.28 c
-3925 7084.22 l
-3943.28 7083.86 3949.91 7077.2 3952.42 7056.32 c
-3956.92 7056.32 l
-3956.92 7117.16 l
-3952.42 7117.16 l
-3949.19 7096.64 3942.92 7090.34 3925 7090.34 c
-3925 7132.1 l
-3925 7138.76 3927.32 7141 3936.4 7141 c
-3953.14 7141 3963.58 7137.8 3969.16 7131.2 c
-3973.12 7126.7 3975.1 7121.84 3977.62 7110.5 c
-3981.94 7110.5 l
-h
-3986.98 7025 m
-f*
-4026.28 7108 m
-3992.22 7108 l
-3992.22 7103.66 l
-3999.96 7102.58 4002 7100.24 4002 7093.04 c
-4002 7040.12 l
-4002 7032.74 4000.19 7030.76 3992.22 7029.32 c
-3992.22 7025 l
-4040.1 7025 l
-4040.1 7029.32 l
-4029.12 7030.04 4027 7032.38 4027 7043.54 c
-4027 7077.56 l
-4027 7086.92 4032.02 7094.66 4037.94 7094.66 c
-4039.38 7094.66 4041 7093.4 4042.98 7090.52 c
-4046.4 7085.66 4049.1 7084.04 4053.78 7084.04 c
-4060.44 7084.04 4065.12 7089.08 4065.12 7095.92 c
-4065.12 7104.2 4059 7110.16 4050.54 7110.16 c
-4041.55 7110.16 4034.73 7105.47 4026.28 7093.22 c
-h
-4066.92 7025 m
-f*
-4153.14 7036.52 m
-4151.34 7034.72 l
-4150.8 7034.18 4150.26 7034 4149.36 7034 c
-4146.84 7034 4146 7035.44 4146 7038.5 c
-4146 7085.48 l
-4146 7100.78 4132.16 7110.16 4109.94 7110.16 c
-4089.6 7110.16 4075.92 7100.97 4075.92 7087.46 c
-4075.92 7079.9 4080.24 7075.58 4087.62 7075.58 c
-4094.82 7075.58 4099.86 7079.9 4099.86 7086.02 c
-4099.86 7088.54 4098.96 7090.88 4096.62 7093.76 c
-4095 7095.56 4094.46 7096.64 4094.46 7097.72 c
-4094.46 7101.5 4099.32 7104.16 4105.8 7104.16 c
-4116.42 7104.16 4121 7099.37 4121 7088.54 c
-4121 7075.4 l
-4099.89 7068.92 4091.41 7065.68 4084.56 7061.18 c
-4076.46 7055.78 4073 7049.48 4073 7041.56 c
-4073 7030.58 4081.07 7022.48 4092.3 7022.48 c
-4102.74 7022.48 4111.02 7026.08 4120.92 7035.08 c
-4122.9 7025.9 4126.86 7022.48 4135.68 7022.48 c
-4143.42 7022.48 4149 7025.36 4155.84 7032.74 c
-h
-4121 7043 m
-4116.04 7037.42 4112.37 7035.26 4107.96 7035.26 c
-4102.56 7035.26 4099 7040.12 4099 7047.32 c
-4099 7057.76 4106.57 7065.14 4121 7069.1 c
-h
-4158 7025 m
-f*
-4195.46 7108 m
-4160.73 7108 l
-4160.73 7103.66 l
-4168.65 7102.58 4171 7100.42 4171 7093.04 c
-4171 7040.12 l
-4171 7032.74 4168.95 7030.76 4160.73 7029.32 c
-4160.73 7025 l
-4203.93 7025 l
-4203.93 7029.32 l
-4197.63 7030.22 4196 7032.74 4196 7039.58 c
-4196 7087.64 l
-4196 7088.54 4198.51 7091.78 4200.51 7093.76 c
-4204.29 7096.64 4207.53 7098.16 4210.77 7098.16 c
-4217.79 7098.16 4221 7094 4221 7083.14 c
-4221 7039.58 l
-4221 7032.2 4218.9 7029.86 4211.85 7029.32 c
-4211.85 7025 l
-4253.97 7025 l
-4253.97 7029.32 l
-4247.67 7030.04 4246 7032.74 4246 7039.58 c
-4246 7087.64 l
-4246 7088.54 4248.43 7091.6 4250.37 7093.58 c
-4254.33 7096.64 4257.57 7098.16 4260.81 7098.16 c
-4267.65 7098.16 4270 7093.82 4270 7083.14 c
-4270 7039.58 l
-4270 7032.02 4268.1 7029.86 4261.53 7029.32 c
-4261.53 7025 l
-4304.37 7025 l
-4304.37 7029 l
-4297.35 7029.37 4295 7031.6 4295 7039.58 c
-4295 7084.76 l
-4295 7100.24 4285.6 7110.16 4271.07 7110.16 c
-4260.81 7110.16 4253.97 7106.01 4244.61 7094.48 c
-4239.21 7105.82 4232.91 7110.16 4221.57 7110.16 c
-4210.2 7110.16 4202.21 7105.29 4195.46 7094.48 c
-h
-4307.94 7025 m
-f*
-4380.36 7047.5 m
-4372.98 7038.68 4367.58 7035.48 4359.84 7035.48 c
-4353 7035.48 4347.6 7038.53 4344 7044.62 c
-4340.58 7050.36 4339.14 7056.45 4338.42 7069 c
-4383.78 7069 l
-4382.7 7083.99 4380 7092.3 4374.42 7099.34 c
-4368.66 7106.36 4360.2 7110.16 4350.12 7110.16 c
-4327.62 7110.16 4312.5 7092.33 4312.5 7066.04 c
-4312.5 7039.76 4327.26 7022.48 4349.58 7022.48 c
-4364.16 7022.48 4372.98 7028.06 4384.68 7044.98 c
-h
-4337.52 7076 m
-4338.06 7097.42 4341.3 7104.16 4350.12 7104.16 c
-4355.34 7104.16 4358.58 7101.42 4360.02 7096.1 c
-4360.92 7092.68 4361.28 7087.64 4361.64 7078.46 c
-4361.64 7076 l
-h
-4387.92 7025 m
-f*
-1 i
-3472.55 6989.75 914.4 15.5999 re
-f
-0.2 i
-2524.26 4716.36 m
-2513.64 4705.2 2507.88 4700.88 2499.06 4697.46 c
-2493.84 4695.3 2487.9 4694.58 2482.86 4694.58 c
-2470.98 4694.58 2459.64 4700.74 2454.42 4709.88 c
-2449.2 4719.42 2447 4732.2 2447 4750.38 c
-2447 4787.64 2458.23 4807.7 2479.8 4807.7 c
-2488.26 4807.7 2496 4804.38 2503.74 4797.36 c
-2511.48 4790.52 2515.62 4784.4 2521.92 4770.72 c
-2526.42 4770.72 l
-2526.42 4813.16 l
-2521.56 4813.16 l
-2518.86 4806.43 2517.06 4804.56 2513.64 4804.56 c
-2511.84 4804.56 2509.5 4805.28 2505.36 4807.08 c
-2494.92 4811.4 2486.1 4813.7 2477.46 4813.7 c
-2441.64 4813.7 2415 4785.84 2415 4748.76 c
-2415 4711.68 2441.21 4685.58 2478.54 4685.58 c
-2499.24 4685.58 2511.48 4691.88 2529.66 4711.86 c
-h
-2535.96 4689 m
-f*
-2599.18 4686.66 m
-2606.78 4689.36 2611.02 4690.08 2622.5 4691.34 c
-2633.66 4692.6 l
-2633.66 4697 l
-2625.74 4697.35 2624 4699.63 2624 4707.18 c
-2624 4772 l
-2587.4 4772 l
-2587.4 4767.66 l
-2596.4 4766.94 2599 4764.78 2599 4757.04 c
-2599 4706.1 l
-2592.88 4700.16 2589.18 4698.48 2583.8 4698.48 c
-2576.42 4698.48 2574 4702 2574 4710.96 c
-2574 4772 l
-2539.88 4772 l
-2539.88 4767.66 l
-2547.26 4766.22 2549 4764.6 2549 4757.04 c
-2549 4711.68 l
-2549 4695.84 2557.89 4686.48 2572.64 4686.48 c
-2582.16 4686.48 2588.56 4689.36 2599.18 4698.36 c
-h
-2637.08 4689 m
-f*
-2675.28 4772 m
-2641.22 4772 l
-2641.22 4767.66 l
-2648.96 4766.58 2651 4764.24 2651 4757.04 c
-2651 4704.12 l
-2651 4696.74 2649.19 4694.76 2641.22 4693.32 c
-2641.22 4689 l
-2689.1 4689 l
-2689.1 4693.32 l
-2678.12 4694.04 2676 4696.38 2676 4707.54 c
-2676 4741.56 l
-2676 4750.92 2681.02 4758.66 2686.94 4758.66 c
-2688.38 4758.66 2690 4757.4 2691.98 4754.52 c
-2695.4 4749.66 2698.1 4748.04 2702.78 4748.04 c
-2709.44 4748.04 2714.12 4753.08 2714.12 4759.92 c
-2714.12 4768.2 2708 4774.16 2699.54 4774.16 c
-2690.55 4774.16 2683.73 4769.47 2675.28 4757.22 c
-h
-2715.92 4689 m
-f*
-2756.28 4772 m
-2722.22 4772 l
-2722.22 4767.66 l
-2729.96 4766.58 2732 4764.24 2732 4757.04 c
-2732 4704.12 l
-2732 4696.74 2730.19 4694.76 2722.22 4693.32 c
-2722.22 4689 l
-2770.1 4689 l
-2770.1 4693.32 l
-2759.12 4694.04 2757 4696.38 2757 4707.54 c
-2757 4741.56 l
-2757 4750.92 2762.02 4758.66 2767.94 4758.66 c
-2769.38 4758.66 2771 4757.4 2772.98 4754.52 c
-2776.4 4749.66 2779.1 4748.04 2783.78 4748.04 c
-2790.44 4748.04 2795.12 4753.08 2795.12 4759.92 c
-2795.12 4768.2 2789 4774.16 2780.54 4774.16 c
-2771.55 4774.16 2764.73 4769.47 2756.28 4757.22 c
-h
-2796.92 4689 m
-f*
-2868.36 4711.5 m
-2860.98 4702.68 2855.58 4699.48 2847.84 4699.48 c
-2841 4699.48 2835.6 4702.53 2832 4708.62 c
-2828.58 4714.36 2827.14 4720.45 2826.42 4733 c
-2871.78 4733 l
-2870.7 4747.99 2868 4756.3 2862.42 4763.34 c
-2856.66 4770.36 2848.2 4774.16 2838.12 4774.16 c
-2815.62 4774.16 2800.5 4756.33 2800.5 4730.04 c
-2800.5 4703.76 2815.26 4686.48 2837.58 4686.48 c
-2852.16 4686.48 2860.98 4692.06 2872.68 4708.98 c
-h
-2825.52 4740 m
-2826.06 4761.42 2829.3 4768.16 2838.12 4768.16 c
-2843.34 4768.16 2846.58 4765.42 2848.02 4760.1 c
-2848.92 4756.68 2849.28 4751.64 2849.64 4742.46 c
-2849.64 4740 l
-h
-2875.92 4689 m
-f*
-2913.82 4772 m
-2879.78 4772 l
-2879.78 4767.66 l
-2887.7 4766.4 2889 4764.6 2889 4757.04 c
-2889 4704.12 l
-2889 4696.56 2887.61 4694.94 2879.78 4693.32 c
-2879.78 4689 l
-2923.16 4689 l
-2923.16 4693.32 l
-2916.5 4694.22 2914 4696.92 2914 4703.58 c
-2914 4751.64 l
-2914 4752.36 2915.4 4754.16 2917.4 4755.96 c
-2921.36 4759.92 2925.68 4762.16 2930 4762.16 c
-2936.12 4762.16 2939 4757.27 2939 4747.14 c
-2939 4703.58 l
-2939 4696.92 2936.71 4694.04 2930.72 4693.32 c
-2930.72 4689 l
-2973.02 4689 l
-2973.02 4693.32 l
-2966 4693.86 2964 4696.02 2964 4703.58 c
-2964 4748.76 l
-2964 4764.24 2954.54 4774.16 2939.9 4774.16 c
-2928.96 4774.16 2920.57 4769.11 2913.82 4758.48 c
-h
-2976.08 4689 m
-f*
-3030.9 4772 m
-3014 4772 l
-3014 4802.4 l
-3009.48 4802.4 l
-2998.5 4786.92 2991.3 4778.82 2979.6 4768.92 c
-2979.6 4764 l
-2989 4764 l
-2989 4705.74 l
-2989 4694.04 2996.73 4686.84 3009.12 4686.84 c
-3021.18 4686.84 3028.38 4692.24 3035.76 4707 c
-3031.26 4708.98 l
-3027.66 4702.14 3024.78 4699.84 3021 4699.84 c
-3015.96 4699.84 3014 4702.83 3014 4709.88 c
-3014 4764 l
-3030.9 4764 l
-h
-3035.94 4689 m
-f*
-3081 4689 m
-f*
-3185.94 4811 m
-3083.88 4811 l
-3083.88 4806 l
-3096.3 4805.29 3100 4802.63 3100 4793.4 c
-3100 4706.28 l
-3100 4696.92 3097.44 4694.94 3083.88 4693.5 c
-3083.88 4689 l
-3148.68 4689 l
-3148.68 4694 l
-3132.12 4694.69 3129 4696.77 3129 4706.28 c
-3129 4748.22 l
-3147.28 4747.86 3153.91 4741.2 3156.42 4720.32 c
-3160.92 4720.32 l
-3160.92 4781.16 l
-3156.42 4781.16 l
-3153.19 4760.64 3146.92 4754.34 3129 4754.34 c
-3129 4796.1 l
-3129 4802.76 3131.32 4805 3140.4 4805 c
-3157.14 4805 3167.58 4801.8 3173.16 4795.2 c
-3177.12 4790.7 3179.1 4785.84 3181.62 4774.5 c
-3185.94 4774.5 l
-h
-3190.98 4689 m
-f*
-3230.28 4772 m
-3196.22 4772 l
-3196.22 4767.66 l
-3203.96 4766.58 3206 4764.24 3206 4757.04 c
-3206 4704.12 l
-3206 4696.74 3204.19 4694.76 3196.22 4693.32 c
-3196.22 4689 l
-3244.1 4689 l
-3244.1 4693.32 l
-3233.12 4694.04 3231 4696.38 3231 4707.54 c
-3231 4741.56 l
-3231 4750.92 3236.02 4758.66 3241.94 4758.66 c
-3243.38 4758.66 3245 4757.4 3246.98 4754.52 c
-3250.4 4749.66 3253.1 4748.04 3257.78 4748.04 c
-3264.44 4748.04 3269.12 4753.08 3269.12 4759.92 c
-3269.12 4768.2 3263 4774.16 3254.54 4774.16 c
-3245.55 4774.16 3238.73 4769.47 3230.28 4757.22 c
-h
-3270.92 4689 m
-f*
-3356.14 4700.52 m
-3354.34 4698.72 l
-3353.8 4698.18 3353.26 4698 3352.36 4698 c
-3349.84 4698 3349 4699.44 3349 4702.5 c
-3349 4749.48 l
-3349 4764.78 3335.16 4774.16 3312.94 4774.16 c
-3292.6 4774.16 3278.92 4764.97 3278.92 4751.46 c
-3278.92 4743.9 3283.24 4739.58 3290.62 4739.58 c
-3297.82 4739.58 3302.86 4743.9 3302.86 4750.02 c
-3302.86 4752.54 3301.96 4754.88 3299.62 4757.76 c
-3298 4759.56 3297.46 4760.64 3297.46 4761.72 c
-3297.46 4765.5 3302.32 4768.16 3308.8 4768.16 c
-3319.42 4768.16 3324 4763.37 3324 4752.54 c
-3324 4739.4 l
-3302.89 4732.92 3294.41 4729.68 3287.56 4725.18 c
-3279.46 4719.78 3276 4713.48 3276 4705.56 c
-3276 4694.58 3284.07 4686.48 3295.3 4686.48 c
-3305.74 4686.48 3314.02 4690.08 3323.92 4699.08 c
-3325.9 4689.9 3329.86 4686.48 3338.68 4686.48 c
-3346.42 4686.48 3352 4689.36 3358.84 4696.74 c
-h
-3324 4707 m
-3319.04 4701.42 3315.37 4699.26 3310.96 4699.26 c
-3305.56 4699.26 3302 4704.12 3302 4711.32 c
-3302 4721.76 3309.57 4729.14 3324 4733.1 c
-h
-3361 4689 m
-f*
-3398.46 4772 m
-3363.73 4772 l
-3363.73 4767.66 l
-3371.65 4766.58 3374 4764.42 3374 4757.04 c
-3374 4704.12 l
-3374 4696.74 3371.95 4694.76 3363.73 4693.32 c
-3363.73 4689 l
-3406.93 4689 l
-3406.93 4693.32 l
-3400.63 4694.22 3399 4696.74 3399 4703.58 c
-3399 4751.64 l
-3399 4752.54 3401.51 4755.78 3403.51 4757.76 c
-3407.29 4760.64 3410.53 4762.16 3413.77 4762.16 c
-3420.79 4762.16 3424 4758 3424 4747.14 c
-3424 4703.58 l
-3424 4696.2 3421.9 4693.86 3414.85 4693.32 c
-3414.85 4689 l
-3456.97 4689 l
-3456.97 4693.32 l
-3450.67 4694.04 3449 4696.74 3449 4703.58 c
-3449 4751.64 l
-3449 4752.54 3451.43 4755.6 3453.37 4757.58 c
-3457.33 4760.64 3460.57 4762.16 3463.81 4762.16 c
-3470.65 4762.16 3473 4757.82 3473 4747.14 c
-3473 4703.58 l
-3473 4696.02 3471.1 4693.86 3464.53 4693.32 c
-3464.53 4689 l
-3507.37 4689 l
-3507.37 4693 l
-3500.35 4693.37 3498 4695.6 3498 4703.58 c
-3498 4748.76 l
-3498 4764.24 3488.6 4774.16 3474.07 4774.16 c
-3463.81 4774.16 3456.97 4770.01 3447.61 4758.48 c
-3442.21 4769.82 3435.91 4774.16 3424.57 4774.16 c
-3413.2 4774.16 3405.21 4769.29 3398.46 4758.48 c
-h
-3510.94 4689 m
-f*
-3583.36 4711.5 m
-3575.98 4702.68 3570.58 4699.48 3562.84 4699.48 c
-3556 4699.48 3550.6 4702.53 3547 4708.62 c
-3543.58 4714.36 3542.14 4720.45 3541.42 4733 c
-3586.78 4733 l
-3585.7 4747.99 3583 4756.3 3577.42 4763.34 c
-3571.66 4770.36 3563.2 4774.16 3553.12 4774.16 c
-3530.62 4774.16 3515.5 4756.33 3515.5 4730.04 c
-3515.5 4703.76 3530.26 4686.48 3552.58 4686.48 c
-3567.16 4686.48 3575.98 4692.06 3587.68 4708.98 c
-h
-3540.52 4740 m
-3541.06 4761.42 3544.3 4768.16 3553.12 4768.16 c
-3558.34 4768.16 3561.58 4765.42 3563.02 4760.1 c
-3563.92 4756.68 3564.28 4751.64 3564.64 4742.46 c
-3564.64 4740 l
-h
-3590.92 4689 m
-f*
-1 i
-2405.75 4654.55 1184.4 15.5999 re
-f
-1 g
-3014.15 4881.35 m
-3178.55 5032.55 l
-3095.75 5032.55 l
-3095.75 5186.15 l
-2930.15 5186.15 l
-2930.15 5032.55 l
-2847.35 5032.55 l
-f*
-0 g
-3014.15 4881.35 m
-3178.55 5032.55 l
-3095.75 5032.55 l
-3095.75 5186.15 l
-2930.15 5186.15 l
-2930.15 5032.55 l
-2847.35 5032.55 l
-3014.15 4881.35 l
-3014.15 4894.55 l
-2873.75 5021.75 l
-2939.75 5021.75 l
-2939.75 5176.55 l
-3086.15 5176.55 l
-3086.15 5021.75 l
-3152.15 5021.75 l
-3014.15 4894.55 l
-3014.15 4881.35 l
-f*
-0.564706 g
-2922.95 3375.35 m
-2922.95 3485.75 2831.75 3576.95 2720.15 3576.95 c
-2223.35 3576.95 l
-2111.75 3576.95 2020.55 3485.75 2020.55 3375.35 c
-2020.55 3237.35 l
-2020.55 3126.95 2111.75 3035.75 2223.35 3035.75 c
-2720.15 3035.75 l
-2831.75 3035.75 2922.95 3126.95 2922.95 3237.35 c
-f*
-1 g
-2858.15 3432.95 m
-2858.15 3542.15 2769.35 3630.95 2657.75 3630.95 c
-2166.95 3630.95 l
-2056.55 3630.95 1966.55 3542.15 1966.55 3432.95 c
-1966.55 3298.55 l
-1966.55 3189.35 2055.35 3100.55 2166.95 3100.55 c
-2657.75 3100.55 l
-2769.35 3100.55 2858.15 3189.35 2858.15 3298.55 c
-f*
-0 g
-2858.15 3432.95 m
-2858.15 3542.15 2769.35 3630.95 2657.75 3630.95 c
-2166.95 3630.95 l
-2056.55 3630.95 1966.55 3542.15 1966.55 3432.95 c
-1966.55 3298.55 l
-1966.55 3189.35 2055.35 3100.55 2166.95 3100.55 c
-2657.75 3100.55 l
-2769.35 3100.55 2858.15 3189.35 2858.15 3298.55 c
-h
-S
-0.201248 i
-2199.33 3472 m
-2085.22 3472 l
-2085.22 3467 l
-2099.11 3466.2 2103 3463.18 2103 3452.72 c
-2103 3355.32 l
-2103 3344.85 2100.17 3342.64 2085.22 3341.03 c
-2085.22 3336 l
-2157.67 3336 l
-2157.67 3341 l
-2139.15 3341.81 2136 3344.23 2136 3355.32 c
-2136 3402.21 l
-2156.22 3401.81 2163.55 3394.36 2166.32 3371.02 c
-2171.35 3371.02 l
-2171.35 3439.04 l
-2166.32 3439.04 l
-2162.76 3416.1 2155.82 3409.05 2136 3409.05 c
-2136 3455.74 l
-2136 3463.19 2138.52 3465 2148.41 3465 c
-2167.13 3465 2178.8 3461.64 2185.04 3454.74 c
-2189.47 3449.71 2191.68 3444.27 2194.5 3431.59 c
-2199.33 3431.59 l
-h
-2204.96 3336 m
-f*
-2249.19 3429 m
-2210.84 3429 l
-2210.84 3423.95 l
-2219.49 3422.74 2222 3420.12 2222 3412.07 c
-2222 3352.9 l
-2222 3344.65 2219.93 3342.44 2210.84 3340.83 c
-2210.84 3336 l
-2264.37 3336 l
-2264.37 3340.83 l
-2252.09 3341.63 2250 3344.25 2250 3356.73 c
-2250 3394.76 l
-2250 3405.23 2255.49 3413.88 2261.95 3413.88 c
-2263.56 3413.88 2265.37 3412.47 2267.59 3409.25 c
-2271.41 3403.82 2274.43 3402.01 2279.66 3402.01 c
-2287.11 3402.01 2292.34 3407.64 2292.34 3415.29 c
-2292.34 3424.55 2285.5 3431.41 2276.04 3431.41 c
-2266.1 3431.41 2258.54 3426.12 2249.19 3412.27 c
-h
-2294.35 3336 m
-f*
-2389.19 3348.88 m
-2387.18 3346.87 l
-2386.57 3346.26 2385.97 3346.06 2384.96 3346.06 c
-2382.15 3346.06 2381 3347.67 2381 3351.09 c
-2381 3403.62 l
-2381 3420.73 2365.6 3431.42 2340.89 3431.42 c
-2318.15 3431.42 2302.85 3421.06 2302.85 3405.83 c
-2302.85 3397.38 2307.69 3392.55 2315.94 3392.55 c
-2323.99 3392.55 2329.62 3397.38 2329.62 3404.22 c
-2329.62 3407.04 2328.61 3409.66 2326 3412.88 c
-2324.19 3414.89 2323.58 3416.1 2323.58 3417.3 c
-2323.58 3421.53 2329.02 3424.42 2336.26 3424.42 c
-2348.14 3424.42 2353.86 3419.08 2353.86 3407.04 c
-2353.86 3392.35 l
-2329.91 3385.1 2320.29 3381.48 2312.51 3376.45 c
-2303.46 3370.41 2299 3363.37 2299 3354.52 c
-2299 3342.24 2308.27 3333.18 2321.17 3333.18 c
-2332.84 3333.18 2342.1 3337.21 2353.17 3347.27 c
-2355.38 3337.01 2359.81 3333.18 2369.67 3333.18 c
-2378.32 3333.18 2384.56 3336.4 2392.21 3344.65 c
-h
-2353 3356.13 m
-2347.55 3349.89 2343.52 3347.47 2338.68 3347.47 c
-2332.64 3347.47 2328 3352.91 2328 3360.96 c
-2328 3372.63 2336.61 3380.88 2353 3385.31 c
-h
-2394.62 3336 m
-f*
-2436.4 3429 m
-2397.7 3429 l
-2397.7 3423.95 l
-2406.55 3422.74 2409 3420.32 2409 3412.07 c
-2409 3352.9 l
-2409 3344.65 2406.74 3342.44 2397.7 3340.83 c
-2397.7 3336 l
-2446 3336 l
-2446 3340.83 l
-2438.95 3341.84 2437 3344.65 2437 3352.3 c
-2437 3406.03 l
-2437 3407.04 2439.87 3410.66 2442.18 3412.88 c
-2446.4 3416.1 2450.02 3418.42 2453.65 3418.42 c
-2461.5 3418.42 2465 3413.59 2465 3401 c
-2465 3352.3 l
-2465 3344.05 2462.68 3341.43 2454.85 3340.83 c
-2454.85 3336 l
-2501.95 3336 l
-2501.95 3340.83 l
-2494.9 3341.64 2493 3344.65 2493 3352.3 c
-2493 3406.03 l
-2493 3407.04 2495.73 3410.46 2497.92 3412.68 c
-2502.35 3416.1 2505.97 3418.42 2509.59 3418.42 c
-2517.24 3418.42 2520 3413.38 2520 3401 c
-2520 3352.3 l
-2520 3343.85 2517.85 3341.43 2510.4 3340.83 c
-2510.4 3336 l
-2558.3 3336 l
-2558.3 3341 l
-2550.45 3341.4 2548 3343.78 2548 3352.3 c
-2548 3402.81 l
-2548 3420.12 2537.43 3431.42 2521.07 3431.42 c
-2509.59 3431.42 2501.95 3426.73 2491.48 3413.68 c
-2485.44 3426.36 2478.4 3431.42 2465.72 3431.42 c
-2452.95 3431.42 2443.98 3425.91 2436.4 3413.68 c
-h
-2561.64 3336 m
-f*
-2639.9 3361.16 m
-2631.65 3351.29 2625.61 3347.18 2616.96 3347.18 c
-2609.31 3347.18 2603.27 3350.77 2599.25 3357.94 c
-2595.43 3364.54 2593.82 3371.56 2593.01 3386 c
-2643.73 3386 l
-2642.52 3402.36 2639.5 3411.43 2633.26 3419.12 c
-2626.82 3426.96 2617.36 3431.42 2606.09 3431.42 c
-2580.94 3431.42 2564.03 3411.4 2564.03 3381.88 c
-2564.03 3352.5 2580.53 3333.18 2605.49 3333.18 c
-2621.79 3333.18 2631.65 3339.42 2644.73 3358.34 c
-h
-2592 3393 m
-2592.61 3416.96 2596.23 3424.42 2606.09 3424.42 c
-2611.93 3424.42 2615.55 3421.38 2617.16 3415.49 c
-2618.17 3411.67 2618.57 3406.03 2618.97 3395.77 c
-2618.97 3393 l
-h
-2648.35 3336 m
-f*
-q[1 0 0 1 0 0]concat
-66 97 true[1 0 0 1 -2684 -3336]@85 imagemask
-z"98D:z
-!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z
-"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$
-s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!
-s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!
-s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7++O=k"98D:!"XS[!!E9$
-^]4n\!!!-$s1eU>huE`Zs8Tk7"7Q9j"98D:!!D]j!!E9$^]4E1!!!-$s1eU7qu?^!s8Tk7!;lfs"98D:!!%HJ!!E9$
-^]4@!!!!-$s1eU75C`_9s8Tk7!$?^k"98D:!!!PF!!E9$^]4?FhuElZs1eU7#Oh]qs8Tk7!!D]j"98D:
-!!!,r!!E9$^]4?8qu?j!s1eU7!;lg!s8Tk7!!%HJ"98D:!!!"K!!E9$^]4?75C`k9s1eU7!$?^ns8Tk7
-!!"+V"98D:!!!!0huj#Z^]4?7#N,^as1eU7!!D]ms8Tk7!!!,r"98D:!!!!"qud!!^]4?7!;ls!s1eU7!!%HMs8Tk7
-!!!"K"98D:z56Lrc^]4?7!$?jns1eU7!!!PIs8Tk7!!!!0j8].pz#NPja^]4?7!!Dims1eU7
-!!!&ss8Tk7!!!!"qu?]3z!<<*!^]4?7!!%NKs1eU7!!!!`s8Tk7z5QCc!z!$D7@^]4?7
-!!!Q0s1eU7!!!!(s8Tk7z#QOh>z!!E9$^]4?7!!!'"s1eU7zs8Tk7z!<<)7z!!%NK^]4?7
-!!!!`s1eU7z+90+Vz!$D6Vz!!!Q0^]4?7!!!!(s1eU7z"96.:z!!E8:!!~>
-Q
-1 i
-0.564706 g
-5322.95 3054.95 m
-5322.95 3166.55 5231.75 3257.75 5120.15 3257.75 c
-4623.35 3257.75 l
-4511.75 3257.75 4420.55 3166.55 4420.55 3054.95 c
-4420.55 2918.15 l
-4420.55 2806.55 4511.75 2715.35 4623.35 2715.35 c
-5120.15 2715.35 l
-5231.75 2715.35 5322.95 2806.55 5322.95 2918.15 c
-f*
-1 g
-5253.35 3111.35 m
-5253.35 3219.35 5164.55 3306.95 5055.35 3306.95 c
-4569.35 3306.95 l
-4460.15 3306.95 4371.35 3219.35 4371.35 3111.35 c
-4371.35 2980.55 l
-4371.35 2872.55 4460.15 2784.95 4569.35 2784.95 c
-5055.35 2784.95 l
-5164.55 2784.95 5253.35 2872.55 5253.35 2980.55 c
-f*
-16 w
-0 g
-5253.35 3111.35 m
-5253.35 3219.35 5164.55 3306.95 5055.35 3306.95 c
-4569.35 3306.95 l
-4460.15 3306.95 4371.35 3219.35 4371.35 3111.35 c
-4371.35 2980.55 l
-4371.35 2872.55 4460.15 2784.95 4569.35 2784.95 c
-5055.35 2784.95 l
-5164.55 2784.95 5253.35 2872.55 5253.35 2980.55 c
-h
-S
-0.201248 i
-4599.33 3153 m
-4485.22 3153 l
-4485.22 3148 l
-4499.11 3147.2 4503 3144.18 4503 3133.72 c
-4503 3036.32 l
-4503 3025.85 4500.17 3023.64 4485.22 3022.03 c
-4485.22 3017 l
-4557.67 3017 l
-4557.67 3022 l
-4539.15 3022.81 4536 3025.23 4536 3036.32 c
-4536 3083.21 l
-4556.22 3082.81 4563.55 3075.36 4566.32 3052.02 c
-4571.35 3052.02 l
-4571.35 3120.04 l
-4566.32 3120.04 l
-4562.76 3097.1 4555.82 3090.05 4536 3090.05 c
-4536 3136.74 l
-4536 3144.19 4538.52 3146 4548.41 3146 c
-4567.13 3146 4578.8 3142.64 4585.04 3135.74 c
-4589.47 3130.71 4591.68 3125.27 4594.5 3112.59 c
-4599.33 3112.59 l
-h
-4604.96 3017 m
-f*
-4649.19 3110 m
-4610.84 3110 l
-4610.84 3104.95 l
-4619.49 3103.74 4622 3101.12 4622 3093.07 c
-4622 3033.9 l
-4622 3025.65 4619.93 3023.44 4610.84 3021.83 c
-4610.84 3017 l
-4664.37 3017 l
-4664.37 3021.83 l
-4652.09 3022.63 4650 3025.25 4650 3037.73 c
-4650 3075.76 l
-4650 3086.23 4655.49 3094.88 4661.95 3094.88 c
-4663.56 3094.88 4665.37 3093.47 4667.59 3090.25 c
-4671.41 3084.82 4674.43 3083.01 4679.66 3083.01 c
-4687.11 3083.01 4692.34 3088.64 4692.34 3096.29 c
-4692.34 3105.55 4685.5 3112.41 4676.04 3112.41 c
-4666.1 3112.41 4658.54 3107.12 4649.19 3093.27 c
-h
-4694.35 3017 m
-f*
-4789.19 3029.88 m
-4787.18 3027.87 l
-4786.57 3027.26 4785.97 3027.06 4784.96 3027.06 c
-4782.15 3027.06 4781 3028.67 4781 3032.09 c
-4781 3084.62 l
-4781 3101.73 4765.6 3112.42 4740.89 3112.42 c
-4718.15 3112.42 4702.85 3102.06 4702.85 3086.83 c
-4702.85 3078.38 4707.69 3073.55 4715.94 3073.55 c
-4723.99 3073.55 4729.62 3078.38 4729.62 3085.22 c
-4729.62 3088.04 4728.61 3090.66 4726 3093.88 c
-4724.19 3095.89 4723.58 3097.1 4723.58 3098.3 c
-4723.58 3102.53 4729.02 3105.42 4736.26 3105.42 c
-4748.14 3105.42 4753.86 3100.08 4753.86 3088.04 c
-4753.86 3073.35 l
-4729.91 3066.1 4720.29 3062.48 4712.51 3057.45 c
-4703.46 3051.41 4699 3044.37 4699 3035.52 c
-4699 3023.24 4708.27 3014.18 4721.17 3014.18 c
-4732.84 3014.18 4742.1 3018.21 4753.17 3028.27 c
-4755.38 3018.01 4759.81 3014.18 4769.67 3014.18 c
-4778.32 3014.18 4784.56 3017.4 4792.21 3025.65 c
-h
-4753 3037.13 m
-4747.55 3030.89 4743.52 3028.47 4738.68 3028.47 c
-4732.64 3028.47 4728 3033.91 4728 3041.96 c
-4728 3053.63 4736.61 3061.88 4753 3066.31 c
-h
-4794.62 3017 m
-f*
-4836.4 3110 m
-4797.7 3110 l
-4797.7 3104.95 l
-4806.55 3103.74 4809 3101.32 4809 3093.07 c
-4809 3033.9 l
-4809 3025.65 4806.74 3023.44 4797.7 3021.83 c
-4797.7 3017 l
-4846 3017 l
-4846 3021.83 l
-4838.95 3022.84 4837 3025.65 4837 3033.3 c
-4837 3087.03 l
-4837 3088.04 4839.87 3091.66 4842.18 3093.88 c
-4846.4 3097.1 4850.02 3099.42 4853.65 3099.42 c
-4861.5 3099.42 4865 3094.59 4865 3082 c
-4865 3033.3 l
-4865 3025.05 4862.68 3022.43 4854.85 3021.83 c
-4854.85 3017 l
-4901.95 3017 l
-4901.95 3021.83 l
-4894.9 3022.64 4893 3025.65 4893 3033.3 c
-4893 3087.03 l
-4893 3088.04 4895.73 3091.46 4897.92 3093.68 c
-4902.35 3097.1 4905.97 3099.42 4909.59 3099.42 c
-4917.24 3099.42 4920 3094.38 4920 3082 c
-4920 3033.3 l
-4920 3024.85 4917.85 3022.43 4910.4 3021.83 c
-4910.4 3017 l
-4958.3 3017 l
-4958.3 3022 l
-4950.45 3022.4 4948 3024.78 4948 3033.3 c
-4948 3083.81 l
-4948 3101.12 4937.43 3112.42 4921.07 3112.42 c
-4909.59 3112.42 4901.95 3107.73 4891.48 3094.68 c
-4885.44 3107.36 4878.4 3112.42 4865.72 3112.42 c
-4852.95 3112.42 4843.98 3106.91 4836.4 3094.68 c
-h
-4961.64 3017 m
-f*
-5039.9 3042.16 m
-5031.65 3032.29 5025.61 3028.18 5016.96 3028.18 c
-5009.31 3028.18 5003.27 3031.77 4999.25 3038.94 c
-4995.43 3045.54 4993.82 3052.56 4993.01 3067 c
-5043.73 3067 l
-5042.52 3083.36 5039.5 3092.43 5033.26 3100.12 c
-5026.82 3107.96 5017.36 3112.42 5006.09 3112.42 c
-4980.94 3112.42 4964.03 3092.4 4964.03 3062.88 c
-4964.03 3033.5 4980.53 3014.18 5005.49 3014.18 c
-5021.79 3014.18 5031.65 3020.42 5044.73 3039.34 c
-h
-4992 3074 m
-4992.61 3097.96 4996.23 3105.42 5006.09 3105.42 c
-5011.93 3105.42 5015.55 3102.38 5017.16 3096.49 c
-5018.17 3092.67 5018.57 3087.03 5018.97 3076.77 c
-5018.97 3074 l
-h
-5048.35 3017 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -5092 -3017]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-2904.95 2348.15 m
-2904.95 2458.55 2813.75 2549.75 2702.15 2549.75 c
-2206.55 2549.75 l
-2094.95 2549.75 2003.75 2458.55 2003.75 2348.15 c
-2003.75 2210.15 l
-2003.75 2099.75 2094.95 2008.55 2206.55 2008.55 c
-2702.15 2008.55 l
-2813.75 2008.55 2904.95 2099.75 2904.95 2210.15 c
-f*
-1 g
-2825.75 2402.15 m
-2825.75 2505.35 2739.35 2589.35 2632.55 2589.35 c
-2157.35 2589.35 l
-2050.55 2589.35 1964.15 2505.35 1964.15 2402.15 c
-1964.15 2274.95 l
-1964.15 2171.75 2050.55 2087.75 2157.35 2087.75 c
-2632.55 2087.75 l
-2739.35 2087.75 2825.75 2171.75 2825.75 2274.95 c
-f*
-32 w
-0 g
-2825.75 2402.15 m
-2825.75 2505.35 2739.35 2589.35 2632.55 2589.35 c
-2157.35 2589.35 l
-2050.55 2589.35 1964.15 2505.35 1964.15 2402.15 c
-1964.15 2274.95 l
-1964.15 2171.75 2050.55 2087.75 2157.35 2087.75 c
-2632.55 2087.75 l
-2739.35 2087.75 2825.75 2171.75 2825.75 2274.95 c
-h
-S
-0.201248 i
-2182.33 2445 m
-2068.22 2445 l
-2068.22 2440 l
-2082.11 2439.2 2086 2436.18 2086 2425.72 c
-2086 2328.32 l
-2086 2317.85 2083.17 2315.64 2068.22 2314.03 c
-2068.22 2309 l
-2140.67 2309 l
-2140.67 2314 l
-2122.15 2314.81 2119 2317.23 2119 2328.32 c
-2119 2375.21 l
-2139.22 2374.81 2146.55 2367.36 2149.32 2344.02 c
-2154.35 2344.02 l
-2154.35 2412.04 l
-2149.32 2412.04 l
-2145.76 2389.1 2138.82 2382.05 2119 2382.05 c
-2119 2428.74 l
-2119 2436.19 2121.52 2438 2131.41 2438 c
-2150.13 2438 2161.8 2434.64 2168.04 2427.74 c
-2172.47 2422.71 2174.68 2417.27 2177.5 2404.59 c
-2182.33 2404.59 l
-h
-2187.96 2309 m
-f*
-2231.19 2402 m
-2192.84 2402 l
-2192.84 2396.95 l
-2201.49 2395.74 2204 2393.12 2204 2385.07 c
-2204 2325.9 l
-2204 2317.65 2201.93 2315.44 2192.84 2313.83 c
-2192.84 2309 l
-2246.37 2309 l
-2246.37 2313.83 l
-2234.09 2314.63 2232 2317.25 2232 2329.73 c
-2232 2367.76 l
-2232 2378.23 2237.49 2386.88 2243.95 2386.88 c
-2245.56 2386.88 2247.37 2385.47 2249.59 2382.25 c
-2253.41 2376.82 2256.43 2375.01 2261.66 2375.01 c
-2269.11 2375.01 2274.34 2380.64 2274.34 2388.29 c
-2274.34 2397.55 2267.5 2404.41 2258.04 2404.41 c
-2248.1 2404.41 2240.54 2399.12 2231.19 2385.27 c
-h
-2276.35 2309 m
-f*
-2371.19 2321.88 m
-2369.18 2319.87 l
-2368.57 2319.26 2367.97 2319.06 2366.96 2319.06 c
-2364.15 2319.06 2363 2320.67 2363 2324.09 c
-2363 2376.62 l
-2363 2393.73 2347.6 2404.42 2322.89 2404.42 c
-2300.15 2404.42 2284.85 2394.06 2284.85 2378.83 c
-2284.85 2370.38 2289.69 2365.55 2297.94 2365.55 c
-2305.99 2365.55 2311.62 2370.38 2311.62 2377.22 c
-2311.62 2380.04 2310.61 2382.66 2308 2385.88 c
-2306.19 2387.89 2305.58 2389.1 2305.58 2390.3 c
-2305.58 2394.53 2311.02 2397.42 2318.26 2397.42 c
-2330.14 2397.42 2335.86 2392.08 2335.86 2380.04 c
-2335.86 2365.35 l
-2311.91 2358.1 2302.29 2354.48 2294.51 2349.45 c
-2285.46 2343.41 2281 2336.37 2281 2327.52 c
-2281 2315.24 2290.27 2306.18 2303.17 2306.18 c
-2314.84 2306.18 2324.1 2310.21 2335.17 2320.27 c
-2337.38 2310.01 2341.81 2306.18 2351.67 2306.18 c
-2360.32 2306.18 2366.56 2309.4 2374.21 2317.65 c
-h
-2335 2329.13 m
-2329.55 2322.89 2325.52 2320.47 2320.68 2320.47 c
-2314.64 2320.47 2310 2325.91 2310 2333.96 c
-2310 2345.63 2318.61 2353.88 2335 2358.31 c
-h
-2376.62 2309 m
-f*
-2418.4 2402 m
-2379.7 2402 l
-2379.7 2396.95 l
-2388.55 2395.74 2391 2393.32 2391 2385.07 c
-2391 2325.9 l
-2391 2317.65 2388.74 2315.44 2379.7 2313.83 c
-2379.7 2309 l
-2428 2309 l
-2428 2313.83 l
-2420.95 2314.84 2419 2317.65 2419 2325.3 c
-2419 2379.03 l
-2419 2380.04 2421.87 2383.66 2424.18 2385.88 c
-2428.4 2389.1 2432.02 2391.42 2435.65 2391.42 c
-2443.5 2391.42 2447 2386.59 2447 2374 c
-2447 2325.3 l
-2447 2317.05 2444.68 2314.43 2436.85 2313.83 c
-2436.85 2309 l
-2483.95 2309 l
-2483.95 2313.83 l
-2476.9 2314.64 2475 2317.65 2475 2325.3 c
-2475 2379.03 l
-2475 2380.04 2477.73 2383.46 2479.92 2385.68 c
-2484.35 2389.1 2487.97 2391.42 2491.59 2391.42 c
-2499.24 2391.42 2502 2386.38 2502 2374 c
-2502 2325.3 l
-2502 2316.85 2499.85 2314.43 2492.4 2313.83 c
-2492.4 2309 l
-2540.3 2309 l
-2540.3 2314 l
-2532.45 2314.4 2530 2316.78 2530 2325.3 c
-2530 2375.81 l
-2530 2393.12 2519.43 2404.42 2503.07 2404.42 c
-2491.59 2404.42 2483.95 2399.73 2473.48 2386.68 c
-2467.44 2399.36 2460.4 2404.42 2447.72 2404.42 c
-2434.95 2404.42 2425.98 2398.91 2418.4 2386.68 c
-h
-2543.64 2309 m
-f*
-2623.9 2334.16 m
-2615.65 2324.29 2609.61 2320.18 2600.96 2320.18 c
-2593.31 2320.18 2587.27 2323.77 2583.25 2330.94 c
-2579.43 2337.54 2577.82 2344.56 2577.01 2359 c
-2627.73 2359 l
-2626.52 2375.36 2623.5 2384.43 2617.26 2392.12 c
-2610.82 2399.96 2601.36 2404.42 2590.09 2404.42 c
-2564.94 2404.42 2548.03 2384.4 2548.03 2354.88 c
-2548.03 2325.5 2564.53 2306.18 2589.49 2306.18 c
-2605.79 2306.18 2615.65 2312.42 2628.73 2331.34 c
-h
-2576 2366 m
-2576.61 2389.96 2580.23 2397.42 2590.09 2397.42 c
-2595.93 2397.42 2599.55 2394.38 2601.16 2388.49 c
-2602.17 2384.67 2602.57 2379.03 2602.97 2368.77 c
-2602.97 2366 l
-h
-2632.35 2309 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -2666 -2307]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-16 w
-3375.35 2243.75 m
-3324.95 2510.15 3179.75 2691.35 3016.55 2691.35 c
-2968.55 2691.35 2920.55 2675.75 2876.15 2645.75 c
-S
-2870.15 2711.75 m
-2894.15 2654.15 l
-2949.35 2628.95 l
-2776.55 2542.55 l
-f*
-0.564706 g
-4298.15 2844.95 m
-4163.75 2880.95 l
-4259.75 2937.35 l
-4106.15 2945.75 l
-4148.15 3016.55 l
-4000.55 2996.15 l
-3983.75 3066.95 l
-3863.75 3022.55 l
-3788.15 3086.15 l
-3712.55 3022.55 l
-3592.55 3066.95 l
-3574.55 2996.15 l
-3425.75 3016.55 l
-3470.15 2945.75 l
-3316.55 2937.35 l
-3412.55 2880.95 l
-3276.95 2844.95 l
-3412.55 2810.15 l
-3316.55 2753.75 l
-3470.15 2744.15 l
-3425.75 2674.55 l
-3574.55 2694.95 l
-3592.55 2622.95 l
-3712.55 2668.55 l
-3788.15 2604.95 l
-3863.75 2668.55 l
-3983.75 2622.95 l
-4000.55 2694.95 l
-4148.15 2674.55 l
-4106.15 2744.15 l
-4259.75 2753.75 l
-4163.75 2810.15 l
-f*
-1 g
-4238.15 2904.95 m
-4103.75 2940.95 l
-4199.75 2997.35 l
-4046.15 3005.75 l
-4088.15 3076.55 l
-3940.55 3056.15 l
-3923.75 3126.95 l
-3803.75 3082.55 l
-3728.15 3146.15 l
-3652.55 3082.55 l
-3532.55 3126.95 l
-3514.55 3056.15 l
-3365.75 3076.55 l
-3410.15 3005.75 l
-3256.55 2997.35 l
-3352.55 2940.95 l
-3216.95 2904.95 l
-3352.55 2870.15 l
-3256.55 2813.75 l
-3410.15 2804.15 l
-3365.75 2734.55 l
-3514.55 2754.95 l
-3532.55 2682.95 l
-3652.55 2728.55 l
-3728.15 2664.95 l
-3803.75 2728.55 l
-3923.75 2682.95 l
-3940.55 2754.95 l
-4088.15 2734.55 l
-4046.15 2804.15 l
-4199.75 2813.75 l
-4103.75 2870.15 l
-f*
-0 g
-4238.15 2904.95 m
-4103.75 2940.95 l
-4199.75 2997.35 l
-4046.15 3005.75 l
-4088.15 3076.55 l
-3940.55 3056.15 l
-3923.75 3126.95 l
-3803.75 3082.55 l
-3728.15 3146.15 l
-3652.55 3082.55 l
-3532.55 3126.95 l
-3514.55 3056.15 l
-3365.75 3076.55 l
-3410.15 3005.75 l
-3256.55 2997.35 l
-3352.55 2940.95 l
-3216.95 2904.95 l
-3352.55 2870.15 l
-3256.55 2813.75 l
-3410.15 2804.15 l
-3365.75 2734.55 l
-3514.55 2754.95 l
-3532.55 2682.95 l
-3652.55 2728.55 l
-3728.15 2664.95 l
-3803.75 2728.55 l
-3923.75 2682.95 l
-3940.55 2754.95 l
-4088.15 2734.55 l
-4046.15 2804.15 l
-4199.75 2813.75 l
-4103.75 2870.15 l
-4238.15 2904.95 l
-4161.35 2904.95 l
-4052.15 2877.35 l
-4132.55 2829.35 l
-4012.55 2822.15 l
-4049.75 2759.75 l
-3926.15 2777.75 l
-3909.35 2709.35 l
-3800.15 2751.35 l
-3728.15 2691.35 l
-3656.15 2751.35 l
-3545.75 2709.35 l
-3530.15 2777.75 l
-3406.55 2759.75 l
-3444.95 2822.15 l
-3323.75 2829.35 l
-3404.15 2877.35 l
-3294.95 2904.95 l
-3404.15 2933.75 l
-3323.75 2980.55 l
-3444.95 2988.95 l
-3406.55 3051.35 l
-3530.15 3033.35 l
-3545.75 3100.55 l
-3656.15 3059.75 l
-3728.15 3119.75 l
-3800.15 3059.75 l
-3909.35 3100.55 l
-3926.15 3033.35 l
-4049.75 3051.35 l
-4012.55 2988.95 l
-4132.55 2980.55 l
-4052.15 2933.75 l
-4161.35 2904.95 l
-4238.15 2904.95 l
-f*
-0.2 i
-3550.08 2956.76 m
-3530.08 2882.52 l
-3527.52 2873.88 3524.48 2871.64 3514.08 2871 c
-3514.08 2867 l
-3564 2867 l
-3564 2871 l
-3554.72 2871.48 3552.48 2872.76 3552.48 2877.88 c
-3552.48 2879.64 3552.8 2881.4 3553.76 2885.08 c
-3553.92 2885.88 l
-3554.08 2886.68 l
-3573.76 2958.52 l
-3576.16 2966.84 3578.56 2969.08 3586.72 2970.04 c
-3586.72 2974 l
-3552.8 2974 l
-3503.2 2897.24 l
-3494.56 2974 l
-3459.2 2974 l
-3459.2 2970 l
-3469.28 2969.52 3470.72 2968.89 3470.72 2964.44 c
-3470.72 2962.2 3470.08 2959.32 3468.96 2955.16 c
-3451.52 2895.48 l
-3445.12 2874.68 3444 2872.92 3435.36 2871 c
-3435.36 2867 l
-3468.48 2867 l
-3468.48 2871 l
-3458.24 2872.28 3455.68 2874.2 3455.68 2880.76 c
-3455.68 2883.48 3456.48 2887.48 3458.72 2895.48 c
-3474.88 2954.52 l
-3485.6 2865.08 l
-3490.08 2865.08 l
-h
-3582.24 2867 m
-f*
-3651.44 2887.32 m
-3644.88 2878.52 3642.48 2875.76 3639.92 2875.76 c
-3638.64 2875.76 3638 2876.86 3638 2878.52 c
-3638 2882.52 3639.44 2889.08 3643.44 2902.2 c
-3654.8 2939.96 l
-3637.04 2938.84 l
-3634.16 2929.4 l
-3632.72 2937.56 3629.2 2941.08 3622.32 2941.08 c
-3602.64 2941.08 3579 2910.27 3579 2885.24 c
-3579 2873.08 3585.74 2864.92 3595.92 2864.92 c
-3605.68 2864.92 3613.04 2870.68 3622.16 2886.04 c
-3620.24 2879.48 3620 2877.56 3620 2875.32 c
-3620 2869.4 3624.76 2864.76 3630.64 2864.76 c
-3638.16 2864.76 3645.52 2871 3654.8 2884.92 c
-h
-3624.56 2934.2 m
-3628.08 2933.88 3630.56 2931 3630.56 2926.68 c
-3630.56 2917.08 3625.24 2899.32 3618.96 2888.28 c
-3614.64 2880.44 3609.84 2875.92 3605.52 2875.92 c
-3601.36 2875.92 3598 2879.75 3598 2884.92 c
-3598 2893.24 3603.42 2909.24 3610.16 2921.08 c
-3614.96 2929.56 3620.24 2934.52 3624.56 2934.2 c
-h
-3662 2867 m
-f*
-3696.56 2940.92 m
-3680.24 2938.36 3674 2937.4 3665.68 2936.44 c
-3665.68 2932 l
-3672.88 2931.69 3674.32 2931.07 3674.32 2928.12 c
-3674.32 2926.52 3673.04 2920.76 3670.8 2912.44 c
-3654.8 2850.36 l
-3651.76 2839.8 3650.48 2838.84 3642.8 2839 c
-3642.8 2834 l
-3682.64 2834 l
-3682.64 2839 l
-3674.64 2839.14 3672.24 2840.16 3672.24 2843.64 c
-3672.24 2845.88 3673.36 2850.68 3676.4 2861.88 c
-3677.52 2865.72 3677.52 2866.04 3678.16 2868.44 c
-3683.76 2865.56 3685.68 2864.92 3689.04 2864.92 c
-3710.8 2864.92 3733.36 2893.88 3733.36 2921.56 c
-3733.36 2933.4 3726.64 2941.08 3716.08 2941.08 c
-3706.96 2941.08 3699.92 2935.92 3690.48 2922.52 c
-h
-3707.12 2929.56 m
-3711.28 2929.24 3713.68 2925.56 3713.36 2920.44 c
-3712.72 2909.88 3707.6 2894.04 3701.84 2883.64 c
-3696.88 2875 3691.76 2869.92 3686.32 2869.92 c
-3682.8 2869.92 3680.08 2872.75 3680.08 2876.28 c
-3680.08 2879 3681.84 2885.56 3686.16 2900.12 c
-3689.68 2911.8 3691.12 2915.8 3693.52 2919.48 c
-3697.52 2925.72 3702.96 2929.88 3707.12 2929.56 c
-h
-3742 2867 m
-f*
-3777.56 2940.92 m
-3761.24 2938.36 3755 2937.4 3746.68 2936.44 c
-3746.68 2932 l
-3753.88 2931.69 3755.32 2931.07 3755.32 2928.12 c
-3755.32 2926.52 3754.04 2920.76 3751.8 2912.44 c
-3735.8 2850.36 l
-3732.76 2839.8 3731.48 2838.84 3723.8 2839 c
-3723.8 2834 l
-3763.64 2834 l
-3763.64 2839 l
-3755.64 2839.14 3753.24 2840.16 3753.24 2843.64 c
-3753.24 2845.88 3754.36 2850.68 3757.4 2861.88 c
-3758.52 2865.72 3758.52 2866.04 3759.16 2868.44 c
-3764.76 2865.56 3766.68 2864.92 3770.04 2864.92 c
-3791.8 2864.92 3814.36 2893.88 3814.36 2921.56 c
-3814.36 2933.4 3807.64 2941.08 3797.08 2941.08 c
-3787.96 2941.08 3780.92 2935.92 3771.48 2922.52 c
-h
-3788.12 2929.56 m
-3792.28 2929.24 3794.68 2925.56 3794.36 2920.44 c
-3793.72 2909.88 3788.6 2894.04 3782.84 2883.64 c
-3777.88 2875 3772.76 2869.92 3767.32 2869.92 c
-3763.8 2869.92 3761.08 2872.75 3761.08 2876.28 c
-3761.08 2879 3762.84 2885.56 3767.16 2900.12 c
-3770.68 2911.8 3772.12 2915.8 3774.52 2919.48 c
-3778.52 2925.72 3783.96 2929.88 3788.12 2929.56 c
-h
-3823 2867 m
-f*
-3856.56 2889.56 m
-3854.32 2886.36 l
-3850.16 2880.12 3846.48 2876.56 3844.08 2876.56 c
-3842.8 2876.56 3842 2877.77 3842 2879.16 c
-3842 2880.6 3842.62 2884.76 3843.12 2887.48 c
-3857.68 2940.92 l
-3849.22 2939 3838.26 2937.4 3826.04 2936.44 c
-3826.04 2932 l
-3827.44 2932 l
-3832.24 2932 3835.48 2930.44 3835.48 2927.48 c
-3835.48 2926.2 3834.71 2923.8 3833.68 2921.08 c
-3824.4 2886.68 l
-3823.12 2882.04 3823 2877.88 3823 2875.64 c
-3823 2869.56 3827.2 2865.56 3833.36 2865.56 c
-3842.96 2865.56 3848.88 2870.36 3860.08 2887.32 c
-h
-3852.88 2976.4 m
-3847.44 2976.4 3843 2971.46 3843 2966.04 c
-3843 2959.8 3847.26 2955.4 3853.04 2955.4 c
-3859.12 2955.4 3864 2959.86 3864 2965.56 c
-3864 2971.48 3859 2976.4 3852.88 2976.4 c
-h
-3866.48 2867 m
-f*
-3941.36 2888.6 m
-3934.96 2878.68 3932.88 2876.56 3930.16 2876.56 c
-3928.88 2876.56 3928 2877.63 3928 2879.16 c
-3928 2880.76 3928.94 2884.12 3931.92 2893.08 c
-3937.68 2910.52 l
-3940.24 2918.04 3942 2925.08 3942 2928.92 c
-3942 2936.76 3937.78 2941.08 3930.16 2941.08 c
-3924.24 2941.08 3918.48 2938.62 3914.16 2934.36 c
-3908.24 2928.76 3905.2 2924.92 3894.48 2909.08 c
-3904.72 2940.76 l
-3894.48 2938.52 3881.68 2936.92 3872.72 2936.6 c
-3872.72 2931.8 l
-3879.44 2931.65 3881.36 2930.92 3881.36 2928.12 c
-3881.36 2926.2 3879.12 2917.72 3874 2899.64 c
-3870.32 2886.68 3869.2 2882.52 3865.04 2867 c
-3884.4 2867 l
-3891.92 2894.68 3897.68 2908.6 3907.6 2921.56 c
-3910.8 2925.88 3915.76 2929.08 3918.64 2929.08 c
-3920.72 2929.08 3923 2927.63 3923 2926.04 c
-3923 2925.56 3922.54 2924.28 3921.84 2922.68 c
-3913.04 2896.12 l
-3910.48 2888.44 3909 2879.32 3909 2875.16 c
-3909 2869.08 3912.84 2865.56 3919.44 2865.56 c
-3929.04 2865.56 3935.6 2871 3944.88 2886.52 c
-h
-3954.96 2867 m
-f*
-4032.48 2936 m
-4014.72 2936 l
-4009.28 2939.58 4004.48 2941.08 3997.12 2941.08 c
-3977.44 2941.08 3961 2928.05 3961 2911.8 c
-3961 2903.64 3965.35 2897.88 3974.4 2894.2 c
-3961.28 2886.84 3959 2884.6 3959 2878.68 c
-3959 2873.56 3961.89 2870.52 3968.96 2868.12 c
-3959.04 2865.72 3955.84 2864.44 3952 2861.4 c
-3949.44 2859.16 3948 2855.32 3948 2851.48 c
-3948 2841.08 3959.56 2835 3977.76 2835 c
-4000.32 2835 4016 2844.72 4016 2858.52 c
-4016 2868.28 4009.6 2873.56 3992.16 2878.52 c
-3983.68 2880.92 l
-3978.56 2882.36 3975 2884.6 3975 2887 c
-3975 2889.56 3977.68 2892.28 3980 2892.28 c
-3980.8 2892.28 3981.92 2892.24 3983.2 2892.12 c
-3984.96 2891.64 3986.24 2891 3988.16 2891 c
-3995.2 2891 4002.4 2893.09 4008.48 2896.92 c
-4017.76 2902.2 4023 2910.36 4023 2919.96 c
-4023 2922.64 4022.59 2924.32 4021.76 2927 c
-4032.48 2927 l
-h
-3974.4 2866.04 m
-3976.32 2865.88 3988.48 2861.72 3992 2860.12 c
-3996.48 2857.88 3999 2855.16 3999 2851 c
-3999 2843.96 3991.8 2840 3979.36 2840 c
-3968.96 2840 3962 2845.1 3962 2852.44 c
-3962 2855.48 3963.32 2858.2 3966.24 2861.24 c
-3968.32 2863.32 3973.12 2866.2 3974.4 2866.04 c
-h
-3996.8 2936.08 m
-4000.96 2936.08 4004 2932.19 4004 2926.52 c
-4004 2921.08 4002.08 2913.4 3999.36 2907.48 c
-3996 2900.12 3991.84 2896 3986.88 2896 c
-3982.56 2896 3980 2899.52 3980 2905.88 c
-3980 2912.28 3982.79 2922.04 3986.24 2928.12 c
-3989.28 2933.4 3992.64 2936.08 3996.8 2936.08 c
-h
-4036 2867 m
-f*
-1 i
-0.564706 g
-4088.15 3789.35 m
-3953.75 3826.55 l
-4049.75 3881.75 l
-3896.15 3891.35 l
-3938.15 3960.95 l
-3790.55 3940.55 l
-3773.75 4012.55 l
-3653.75 3966.95 l
-3578.15 4030.55 l
-3502.55 3966.95 l
-3382.55 4012.55 l
-3364.55 3940.55 l
-3215.75 3960.95 l
-3260.15 3891.35 l
-3106.55 3881.75 l
-3202.55 3826.55 l
-3066.95 3789.35 l
-3202.55 3754.55 l
-3106.55 3698.15 l
-3260.15 3689.75 l
-3215.75 3620.15 l
-3364.55 3639.35 l
-3382.55 3568.55 l
-3502.55 3612.95 l
-3578.15 3549.35 l
-3653.75 3612.95 l
-3773.75 3568.55 l
-3790.55 3639.35 l
-3938.15 3620.15 l
-3896.15 3689.75 l
-4049.75 3698.15 l
-3953.75 3754.55 l
-f*
-1 g
-4028.15 3849.35 m
-3893.75 3886.55 l
-3989.75 3941.75 l
-3836.15 3951.35 l
-3878.15 4020.95 l
-3730.55 4000.55 l
-3713.75 4072.55 l
-3593.75 4026.95 l
-3518.15 4090.55 l
-3442.55 4026.95 l
-3322.55 4072.55 l
-3304.55 4000.55 l
-3155.75 4020.95 l
-3200.15 3951.35 l
-3046.55 3941.75 l
-3142.55 3886.55 l
-3006.95 3849.35 l
-3142.55 3814.55 l
-3046.55 3758.15 l
-3200.15 3749.75 l
-3155.75 3680.15 l
-3304.55 3699.35 l
-3322.55 3628.55 l
-3442.55 3672.95 l
-3518.15 3609.35 l
-3593.75 3672.95 l
-3713.75 3628.55 l
-3730.55 3699.35 l
-3878.15 3680.15 l
-3836.15 3749.75 l
-3989.75 3758.15 l
-3893.75 3814.55 l
-f*
-0 g
-4028.15 3849.35 m
-3893.75 3886.55 l
-3989.75 3941.75 l
-3836.15 3951.35 l
-3878.15 4020.95 l
-3730.55 4000.55 l
-3713.75 4072.55 l
-3593.75 4026.95 l
-3518.15 4090.55 l
-3442.55 4026.95 l
-3322.55 4072.55 l
-3304.55 4000.55 l
-3155.75 4020.95 l
-3200.15 3951.35 l
-3046.55 3941.75 l
-3142.55 3886.55 l
-3006.95 3849.35 l
-3142.55 3814.55 l
-3046.55 3758.15 l
-3200.15 3749.75 l
-3155.75 3680.15 l
-3304.55 3699.35 l
-3322.55 3628.55 l
-3442.55 3672.95 l
-3518.15 3609.35 l
-3593.75 3672.95 l
-3713.75 3628.55 l
-3730.55 3699.35 l
-3878.15 3680.15 l
-3836.15 3749.75 l
-3989.75 3758.15 l
-3893.75 3814.55 l
-4028.15 3849.35 l
-3951.35 3849.35 l
-3842.15 3821.75 l
-3922.55 3774.95 l
-3802.55 3767.75 l
-3839.75 3704.15 l
-3716.15 3722.15 l
-3699.35 3654.95 l
-3590.15 3695.75 l
-3518.15 3635.75 l
-3446.15 3695.75 l
-3335.75 3654.95 l
-3320.15 3722.15 l
-3196.55 3704.15 l
-3234.95 3767.75 l
-3113.75 3774.95 l
-3194.15 3821.75 l
-3084.95 3849.35 l
-3194.15 3878.15 l
-3113.75 3926.15 l
-3234.95 3933.35 l
-3196.55 3995.75 l
-3320.15 3978.95 l
-3335.75 4046.15 l
-3446.15 4004.15 l
-3518.15 4064.15 l
-3590.15 4004.15 l
-3699.35 4046.15 l
-3716.15 3978.95 l
-3839.75 3995.75 l
-3802.55 3933.35 l
-3922.55 3926.15 l
-3842.15 3878.15 l
-3951.35 3849.35 l
-4028.15 3849.35 l
-f*
-0.2 i
-3340.08 3900.76 m
-3320.08 3826.52 l
-3317.52 3817.88 3314.48 3815.64 3304.08 3815 c
-3304.08 3811 l
-3354 3811 l
-3354 3815 l
-3344.72 3815.48 3342.48 3816.76 3342.48 3821.88 c
-3342.48 3823.64 3342.8 3825.4 3343.76 3829.08 c
-3343.92 3829.88 l
-3344.08 3830.68 l
-3363.76 3902.52 l
-3366.16 3910.84 3368.56 3913.08 3376.72 3914.04 c
-3376.72 3918 l
-3342.8 3918 l
-3293.2 3841.24 l
-3284.56 3918 l
-3249.2 3918 l
-3249.2 3914 l
-3259.28 3913.52 3260.72 3912.89 3260.72 3908.44 c
-3260.72 3906.2 3260.08 3903.32 3258.96 3899.16 c
-3241.52 3839.48 l
-3235.12 3818.68 3234 3816.92 3225.36 3815 c
-3225.36 3811 l
-3258.48 3811 l
-3258.48 3815 l
-3248.24 3816.28 3245.68 3818.2 3245.68 3824.76 c
-3245.68 3827.48 3246.48 3831.48 3248.72 3839.48 c
-3264.88 3898.52 l
-3275.6 3809.08 l
-3280.08 3809.08 l
-h
-3372.24 3811 m
-f*
-3441.44 3831.32 m
-3434.88 3822.52 3432.48 3819.76 3429.92 3819.76 c
-3428.64 3819.76 3428 3820.86 3428 3822.52 c
-3428 3826.52 3429.44 3833.08 3433.44 3846.2 c
-3444.8 3883.96 l
-3427.04 3882.84 l
-3424.16 3873.4 l
-3422.72 3881.56 3419.2 3885.08 3412.32 3885.08 c
-3392.64 3885.08 3369 3854.27 3369 3829.24 c
-3369 3817.08 3375.74 3808.92 3385.92 3808.92 c
-3395.68 3808.92 3403.04 3814.68 3412.16 3830.04 c
-3410.24 3823.48 3410 3821.56 3410 3819.32 c
-3410 3813.4 3414.76 3808.76 3420.64 3808.76 c
-3428.16 3808.76 3435.52 3815 3444.8 3828.92 c
-h
-3414.56 3878.2 m
-3418.08 3877.88 3420.56 3875 3420.56 3870.68 c
-3420.56 3861.08 3415.24 3843.32 3408.96 3832.28 c
-3404.64 3824.44 3399.84 3819.92 3395.52 3819.92 c
-3391.36 3819.92 3388 3823.75 3388 3828.92 c
-3388 3837.24 3393.42 3853.24 3400.16 3865.08 c
-3404.96 3873.56 3410.24 3878.52 3414.56 3878.2 c
-h
-3452 3811 m
-f*
-3486.56 3884.92 m
-3470.24 3882.36 3464 3881.4 3455.68 3880.44 c
-3455.68 3876 l
-3462.88 3875.69 3464.32 3875.07 3464.32 3872.12 c
-3464.32 3870.52 3463.04 3864.76 3460.8 3856.44 c
-3444.8 3794.36 l
-3441.76 3783.8 3440.48 3782.84 3432.8 3783 c
-3432.8 3778 l
-3472.64 3778 l
-3472.64 3783 l
-3464.64 3783.14 3462.24 3784.16 3462.24 3787.64 c
-3462.24 3789.88 3463.36 3794.68 3466.4 3805.88 c
-3467.52 3809.72 3467.52 3810.04 3468.16 3812.44 c
-3473.76 3809.56 3475.68 3808.92 3479.04 3808.92 c
-3500.8 3808.92 3523.36 3837.88 3523.36 3865.56 c
-3523.36 3877.4 3516.64 3885.08 3506.08 3885.08 c
-3496.96 3885.08 3489.92 3879.92 3480.48 3866.52 c
-h
-3497.12 3873.56 m
-3501.28 3873.24 3503.68 3869.56 3503.36 3864.44 c
-3502.72 3853.88 3497.6 3838.04 3491.84 3827.64 c
-3486.88 3819 3481.76 3813.92 3476.32 3813.92 c
-3472.8 3813.92 3470.08 3816.75 3470.08 3820.28 c
-3470.08 3823 3471.84 3829.56 3476.16 3844.12 c
-3479.68 3855.8 3481.12 3859.8 3483.52 3863.48 c
-3487.52 3869.72 3492.96 3873.88 3497.12 3873.56 c
-h
-3532 3811 m
-f*
-3567.56 3884.92 m
-3551.24 3882.36 3545 3881.4 3536.68 3880.44 c
-3536.68 3876 l
-3543.88 3875.69 3545.32 3875.07 3545.32 3872.12 c
-3545.32 3870.52 3544.04 3864.76 3541.8 3856.44 c
-3525.8 3794.36 l
-3522.76 3783.8 3521.48 3782.84 3513.8 3783 c
-3513.8 3778 l
-3553.64 3778 l
-3553.64 3783 l
-3545.64 3783.14 3543.24 3784.16 3543.24 3787.64 c
-3543.24 3789.88 3544.36 3794.68 3547.4 3805.88 c
-3548.52 3809.72 3548.52 3810.04 3549.16 3812.44 c
-3554.76 3809.56 3556.68 3808.92 3560.04 3808.92 c
-3581.8 3808.92 3604.36 3837.88 3604.36 3865.56 c
-3604.36 3877.4 3597.64 3885.08 3587.08 3885.08 c
-3577.96 3885.08 3570.92 3879.92 3561.48 3866.52 c
-h
-3578.12 3873.56 m
-3582.28 3873.24 3584.68 3869.56 3584.36 3864.44 c
-3583.72 3853.88 3578.6 3838.04 3572.84 3827.64 c
-3567.88 3819 3562.76 3813.92 3557.32 3813.92 c
-3553.8 3813.92 3551.08 3816.75 3551.08 3820.28 c
-3551.08 3823 3552.84 3829.56 3557.16 3844.12 c
-3560.68 3855.8 3562.12 3859.8 3564.52 3863.48 c
-3568.52 3869.72 3573.96 3873.88 3578.12 3873.56 c
-h
-3613 3811 m
-f*
-3646.56 3833.56 m
-3644.32 3830.36 l
-3640.16 3824.12 3636.48 3820.56 3634.08 3820.56 c
-3632.8 3820.56 3632 3821.77 3632 3823.16 c
-3632 3824.6 3632.62 3828.76 3633.12 3831.48 c
-3647.68 3884.92 l
-3639.22 3883 3628.26 3881.4 3616.04 3880.44 c
-3616.04 3876 l
-3617.44 3876 l
-3622.24 3876 3625.48 3874.44 3625.48 3871.48 c
-3625.48 3870.2 3624.71 3867.8 3623.68 3865.08 c
-3614.4 3830.68 l
-3613.12 3826.04 3613 3821.88 3613 3819.64 c
-3613 3813.56 3617.2 3809.56 3623.36 3809.56 c
-3632.96 3809.56 3638.88 3814.36 3650.08 3831.32 c
-h
-3642.88 3920.4 m
-3637.44 3920.4 3633 3915.46 3633 3910.04 c
-3633 3903.8 3637.26 3899.4 3643.04 3899.4 c
-3649.12 3899.4 3654 3903.86 3654 3909.56 c
-3654 3915.48 3649 3920.4 3642.88 3920.4 c
-h
-3656.48 3811 m
-f*
-3731.36 3832.6 m
-3724.96 3822.68 3722.88 3820.56 3720.16 3820.56 c
-3718.88 3820.56 3718 3821.63 3718 3823.16 c
-3718 3824.76 3718.94 3828.12 3721.92 3837.08 c
-3727.68 3854.52 l
-3730.24 3862.04 3732 3869.08 3732 3872.92 c
-3732 3880.76 3727.78 3885.08 3720.16 3885.08 c
-3714.24 3885.08 3708.48 3882.62 3704.16 3878.36 c
-3698.24 3872.76 3695.2 3868.92 3684.48 3853.08 c
-3694.72 3884.76 l
-3684.48 3882.52 3671.68 3880.92 3662.72 3880.6 c
-3662.72 3875.8 l
-3669.44 3875.65 3671.36 3874.92 3671.36 3872.12 c
-3671.36 3870.2 3669.12 3861.72 3664 3843.64 c
-3660.32 3830.68 3659.2 3826.52 3655.04 3811 c
-3674.4 3811 l
-3681.92 3838.68 3687.68 3852.6 3697.6 3865.56 c
-3700.8 3869.88 3705.76 3873.08 3708.64 3873.08 c
-3710.72 3873.08 3713 3871.63 3713 3870.04 c
-3713 3869.56 3712.54 3868.28 3711.84 3866.68 c
-3703.04 3840.12 l
-3700.48 3832.44 3699 3823.32 3699 3819.16 c
-3699 3813.08 3702.84 3809.56 3709.44 3809.56 c
-3719.04 3809.56 3725.6 3815 3734.88 3830.52 c
-h
-3744.96 3811 m
-f*
-3822.48 3880 m
-3804.72 3880 l
-3799.28 3883.58 3794.48 3885.08 3787.12 3885.08 c
-3767.44 3885.08 3751 3872.05 3751 3855.8 c
-3751 3847.64 3755.35 3841.88 3764.4 3838.2 c
-3751.28 3830.84 3749 3828.6 3749 3822.68 c
-3749 3817.56 3751.89 3814.52 3758.96 3812.12 c
-3749.04 3809.72 3745.84 3808.44 3742 3805.4 c
-3739.44 3803.16 3738 3799.32 3738 3795.48 c
-3738 3785.08 3749.56 3779 3767.76 3779 c
-3790.32 3779 3806 3788.72 3806 3802.52 c
-3806 3812.28 3799.6 3817.56 3782.16 3822.52 c
-3773.68 3824.92 l
-3768.56 3826.36 3765 3828.6 3765 3831 c
-3765 3833.56 3767.68 3836.28 3770 3836.28 c
-3770.8 3836.28 3771.92 3836.24 3773.2 3836.12 c
-3774.96 3835.64 3776.24 3835 3778.16 3835 c
-3785.2 3835 3792.4 3837.09 3798.48 3840.92 c
-3807.76 3846.2 3813 3854.36 3813 3863.96 c
-3813 3866.64 3812.59 3868.32 3811.76 3871 c
-3822.48 3871 l
-h
-3764.4 3810.04 m
-3766.32 3809.88 3778.48 3805.72 3782 3804.12 c
-3786.48 3801.88 3789 3799.16 3789 3795 c
-3789 3787.96 3781.8 3784 3769.36 3784 c
-3758.96 3784 3752 3789.1 3752 3796.44 c
-3752 3799.48 3753.32 3802.2 3756.24 3805.24 c
-3758.32 3807.32 3763.12 3810.2 3764.4 3810.04 c
-h
-3786.8 3880.08 m
-3790.96 3880.08 3794 3876.19 3794 3870.52 c
-3794 3865.08 3792.08 3857.4 3789.36 3851.48 c
-3786 3844.12 3781.84 3840 3776.88 3840 c
-3772.56 3840 3770 3843.52 3770 3849.88 c
-3770 3856.28 3772.79 3866.04 3776.24 3872.12 c
-3779.28 3877.4 3782.64 3880.08 3786.8 3880.08 c
-h
-3826 3811 m
-f*
-1 i
-1 g
-4822.55 3368.15 m
-4988.15 3521.75 l
-4906.55 3521.75 l
-4906.55 3672.95 l
-4739.75 3672.95 l
-4739.75 3521.75 l
-4658.15 3521.75 l
-f*
-0 g
-4822.55 3368.15 m
-4988.15 3521.75 l
-4906.55 3521.75 l
-4906.55 3672.95 l
-4739.75 3672.95 l
-4739.75 3521.75 l
-4658.15 3521.75 l
-4822.55 3368.15 l
-4822.55 3382.55 l
-4683.35 3512.15 l
-4749.35 3512.15 l
-4749.35 3663.35 l
-4895.75 3663.35 l
-4895.75 3512.15 l
-4964.15 3512.15 l
-4822.55 3382.55 l
-4822.55 3368.15 l
-f*
-0.2 i
-4375.88 3907 m
-4375.88 3902 l
-4388.3 3901.29 4392 3898.45 4392 3889.4 c
-4392 3802.28 l
-4392 3793.1 4389.25 3790.94 4375.88 3789.5 c
-4375.88 3785 l
-4433.84 3785 l
-4464.26 3785 4484 3798.5 4484 3818.84 c
-4484 3827.12 4480.73 3834.32 4474.7 3839.9 c
-4468.4 3845.48 4462.28 3848 4449.68 3850.7 c
-4470.56 3856.82 4478 3864.2 4478 3877.88 c
-4478 3896.42 4461.55 3907 4431.5 3907 c
-h
-4421 3846.74 m
-4425.92 3846.74 l
-4444.46 3846.74 4453 3837.2 4453 3817.22 c
-4453 3799.76 4445.77 3791 4431.5 3791 c
-4423.58 3791 4421 3793.99 4421 3801.74 c
-h
-4421 3892.46 m
-4421 3898.94 4423.39 3902 4430.24 3902 c
-4442.84 3902 4449 3894.03 4449 3876.62 c
-4449 3857.72 4443.08 3852.68 4421 3852.14 c
-h
-4493.06 3785 m
-f*
-4578.14 3796.52 m
-4576.34 3794.72 l
-4575.8 3794.18 4575.26 3794 4574.36 3794 c
-4571.84 3794 4571 3795.44 4571 3798.5 c
-4571 3845.48 l
-4571 3860.78 4557.16 3870.16 4534.94 3870.16 c
-4514.6 3870.16 4500.92 3860.97 4500.92 3847.46 c
-4500.92 3839.9 4505.24 3835.58 4512.62 3835.58 c
-4519.82 3835.58 4524.86 3839.9 4524.86 3846.02 c
-4524.86 3848.54 4523.96 3850.88 4521.62 3853.76 c
-4520 3855.56 4519.46 3856.64 4519.46 3857.72 c
-4519.46 3861.5 4524.32 3864.16 4530.8 3864.16 c
-4541.42 3864.16 4546 3859.37 4546 3848.54 c
-4546 3835.4 l
-4524.89 3828.92 4516.41 3825.68 4509.56 3821.18 c
-4501.46 3815.78 4498 3809.48 4498 3801.56 c
-4498 3790.58 4506.07 3782.48 4517.3 3782.48 c
-4527.74 3782.48 4536.02 3786.08 4545.92 3795.08 c
-4547.9 3785.9 4551.86 3782.48 4560.68 3782.48 c
-4568.42 3782.48 4574 3785.36 4580.84 3792.74 c
-h
-4546 3803 m
-4541.04 3797.42 4537.37 3795.26 4532.96 3795.26 c
-4527.56 3795.26 4524 3800.12 4524 3807.32 c
-4524 3817.76 4531.57 3825.14 4546 3829.1 c
-h
-4583 3785 m
-f*
-4644.22 3843.68 m
-4644.22 3869.8 l
-4640.24 3869.8 l
-4639.16 3867.08 4638.08 3866.2 4635.74 3866.2 c
-4634.66 3866.2 4633.04 3866.55 4630.16 3867.44 c
-4624.4 3869.42 4620.26 3870.16 4616.12 3870.16 c
-4599.74 3870.16 4588 3858.99 4588 3843.86 c
-4588 3831.98 4595.34 3823.7 4613.42 3815.96 c
-4625.84 3810.56 4631 3806.06 4631 3800.3 c
-4631 3793.28 4625.48 3788.48 4617.2 3788.48 c
-4604.6 3788.48 4596.32 3796.62 4592.54 3812.36 c
-4587.5 3812.36 l
-4587.5 3782.66 l
-4592 3782.66 l
-4593.98 3786.44 4595.06 3787.7 4596.68 3787.7 c
-4597.58 3787.7 4599.02 3787.34 4600.82 3786.62 c
-4606.04 3784.46 4615.22 3782.48 4620.26 3782.48 c
-4636.64 3782.48 4648 3793.64 4648 3809.84 c
-4648 3822.62 4641.15 3830.54 4623.14 3837.92 c
-4610.9 3843.14 4606 3847.64 4606 3853.76 c
-4606 3859.7 4610.98 3864.16 4617.74 3864.16 c
-4622.6 3864.16 4627.28 3862.19 4631.24 3858.44 c
-4635.02 3854.84 4637 3851.42 4639.7 3843.68 c
-h
-4653.02 3785 m
-f*
-4724.36 3807.5 m
-4716.98 3798.68 4711.58 3795.48 4703.84 3795.48 c
-4697 3795.48 4691.6 3798.53 4688 3804.62 c
-4684.58 3810.36 4683.14 3816.45 4682.42 3829 c
-4727.78 3829 l
-4726.7 3843.99 4724 3852.3 4718.42 3859.34 c
-4712.66 3866.36 4704.2 3870.16 4694.12 3870.16 c
-4671.62 3870.16 4656.5 3852.33 4656.5 3826.04 c
-4656.5 3799.76 4671.26 3782.48 4693.58 3782.48 c
-4708.16 3782.48 4716.98 3788.06 4728.68 3804.98 c
-h
-4681.52 3836 m
-4682.06 3857.42 4685.3 3864.16 4694.12 3864.16 c
-4699.34 3864.16 4702.58 3861.42 4704.02 3856.1 c
-4704.92 3852.68 4705.28 3847.64 4705.64 3838.46 c
-4705.64 3836 l
-h
-4731.92 3785 m
-f*
-4778 3785 m
-f*
-4881.94 3907 m
-4779.88 3907 l
-4779.88 3902 l
-4792.3 3901.29 4796 3898.63 4796 3889.4 c
-4796 3802.28 l
-4796 3792.92 4793.44 3790.94 4779.88 3789.5 c
-4779.88 3785 l
-4844.68 3785 l
-4844.68 3790 l
-4828.12 3790.69 4825 3792.77 4825 3802.28 c
-4825 3844.22 l
-4843.28 3843.86 4849.91 3837.2 4852.42 3816.32 c
-4856.92 3816.32 l
-4856.92 3877.16 l
-4852.42 3877.16 l
-4849.19 3856.64 4842.92 3850.34 4825 3850.34 c
-4825 3892.1 l
-4825 3898.76 4827.32 3901 4836.4 3901 c
-4853.14 3901 4863.58 3897.8 4869.16 3891.2 c
-4873.12 3886.7 4875.1 3881.84 4877.62 3870.5 c
-4881.94 3870.5 l
-h
-4886.98 3785 m
-f*
-4926.28 3868 m
-4892.22 3868 l
-4892.22 3863.66 l
-4899.96 3862.58 4902 3860.24 4902 3853.04 c
-4902 3800.12 l
-4902 3792.74 4900.19 3790.76 4892.22 3789.32 c
-4892.22 3785 l
-4940.1 3785 l
-4940.1 3789.32 l
-4929.12 3790.04 4927 3792.38 4927 3803.54 c
-4927 3837.56 l
-4927 3846.92 4932.02 3854.66 4937.94 3854.66 c
-4939.38 3854.66 4941 3853.4 4942.98 3850.52 c
-4946.4 3845.66 4949.1 3844.04 4953.78 3844.04 c
-4960.44 3844.04 4965.12 3849.08 4965.12 3855.92 c
-4965.12 3864.2 4959 3870.16 4950.54 3870.16 c
-4941.55 3870.16 4934.73 3865.47 4926.28 3853.22 c
-h
-4966.92 3785 m
-f*
-5053.14 3796.52 m
-5051.34 3794.72 l
-5050.8 3794.18 5050.26 3794 5049.36 3794 c
-5046.84 3794 5046 3795.44 5046 3798.5 c
-5046 3845.48 l
-5046 3860.78 5032.16 3870.16 5009.94 3870.16 c
-4989.6 3870.16 4975.92 3860.97 4975.92 3847.46 c
-4975.92 3839.9 4980.24 3835.58 4987.62 3835.58 c
-4994.82 3835.58 4999.86 3839.9 4999.86 3846.02 c
-4999.86 3848.54 4998.96 3850.88 4996.62 3853.76 c
-4995 3855.56 4994.46 3856.64 4994.46 3857.72 c
-4994.46 3861.5 4999.32 3864.16 5005.8 3864.16 c
-5016.42 3864.16 5021 3859.37 5021 3848.54 c
-5021 3835.4 l
-4999.89 3828.92 4991.41 3825.68 4984.56 3821.18 c
-4976.46 3815.78 4973 3809.48 4973 3801.56 c
-4973 3790.58 4981.07 3782.48 4992.3 3782.48 c
-5002.74 3782.48 5011.02 3786.08 5020.92 3795.08 c
-5022.9 3785.9 5026.86 3782.48 5035.68 3782.48 c
-5043.42 3782.48 5049 3785.36 5055.84 3792.74 c
-h
-5021 3803 m
-5016.04 3797.42 5012.37 3795.26 5007.96 3795.26 c
-5002.56 3795.26 4999 3800.12 4999 3807.32 c
-4999 3817.76 5006.57 3825.14 5021 3829.1 c
-h
-5058 3785 m
-f*
-5095.46 3868 m
-5060.73 3868 l
-5060.73 3863.66 l
-5068.65 3862.58 5071 3860.42 5071 3853.04 c
-5071 3800.12 l
-5071 3792.74 5068.95 3790.76 5060.73 3789.32 c
-5060.73 3785 l
-5103.93 3785 l
-5103.93 3789.32 l
-5097.63 3790.22 5096 3792.74 5096 3799.58 c
-5096 3847.64 l
-5096 3848.54 5098.51 3851.78 5100.51 3853.76 c
-5104.29 3856.64 5107.53 3858.16 5110.77 3858.16 c
-5117.79 3858.16 5121 3854 5121 3843.14 c
-5121 3799.58 l
-5121 3792.2 5118.9 3789.86 5111.85 3789.32 c
-5111.85 3785 l
-5153.97 3785 l
-5153.97 3789.32 l
-5147.67 3790.04 5146 3792.74 5146 3799.58 c
-5146 3847.64 l
-5146 3848.54 5148.43 3851.6 5150.37 3853.58 c
-5154.33 3856.64 5157.57 3858.16 5160.81 3858.16 c
-5167.65 3858.16 5170 3853.82 5170 3843.14 c
-5170 3799.58 l
-5170 3792.02 5168.1 3789.86 5161.53 3789.32 c
-5161.53 3785 l
-5204.37 3785 l
-5204.37 3789 l
-5197.35 3789.37 5195 3791.6 5195 3799.58 c
-5195 3844.76 l
-5195 3860.24 5185.6 3870.16 5171.07 3870.16 c
-5160.81 3870.16 5153.97 3866.01 5144.61 3854.48 c
-5139.21 3865.82 5132.91 3870.16 5121.57 3870.16 c
-5110.2 3870.16 5102.21 3865.29 5095.46 3854.48 c
-h
-5207.94 3785 m
-f*
-5280.36 3807.5 m
-5272.98 3798.68 5267.58 3795.48 5259.84 3795.48 c
-5253 3795.48 5247.6 3798.53 5244 3804.62 c
-5240.58 3810.36 5239.14 3816.45 5238.42 3829 c
-5283.78 3829 l
-5282.7 3843.99 5280 3852.3 5274.42 3859.34 c
-5268.66 3866.36 5260.2 3870.16 5250.12 3870.16 c
-5227.62 3870.16 5212.5 3852.33 5212.5 3826.04 c
-5212.5 3799.76 5227.26 3782.48 5249.58 3782.48 c
-5264.16 3782.48 5272.98 3788.06 5284.68 3804.98 c
-h
-5237.52 3836 m
-5238.06 3857.42 5241.3 3864.16 5250.12 3864.16 c
-5255.34 3864.16 5258.58 3861.42 5260.02 3856.1 c
-5260.92 3852.68 5261.28 3847.64 5261.64 3838.46 c
-5261.64 3836 l
-h
-5287.92 3785 m
-f*
-1 i
-4372.55 3749.75 914.4 15.5999 re
-f
-0.2 i
-1924.26 1536.36 m
-1913.64 1525.2 1907.88 1520.88 1899.06 1517.46 c
-1893.84 1515.3 1887.9 1514.58 1882.86 1514.58 c
-1870.98 1514.58 1859.64 1520.74 1854.42 1529.88 c
-1849.2 1539.42 1847 1552.2 1847 1570.38 c
-1847 1607.64 1858.23 1627.7 1879.8 1627.7 c
-1888.26 1627.7 1896 1624.38 1903.74 1617.36 c
-1911.48 1610.52 1915.62 1604.4 1921.92 1590.72 c
-1926.42 1590.72 l
-1926.42 1633.16 l
-1921.56 1633.16 l
-1918.86 1626.43 1917.06 1624.56 1913.64 1624.56 c
-1911.84 1624.56 1909.5 1625.28 1905.36 1627.08 c
-1894.92 1631.4 1886.1 1633.7 1877.46 1633.7 c
-1841.64 1633.7 1815 1605.84 1815 1568.76 c
-1815 1531.68 1841.21 1505.58 1878.54 1505.58 c
-1899.24 1505.58 1911.48 1511.88 1929.66 1531.86 c
-h
-1935.96 1509 m
-f*
-1999.18 1506.66 m
-2006.78 1509.36 2011.02 1510.08 2022.5 1511.34 c
-2033.66 1512.6 l
-2033.66 1517 l
-2025.74 1517.35 2024 1519.63 2024 1527.18 c
-2024 1592 l
-1987.4 1592 l
-1987.4 1587.66 l
-1996.4 1586.94 1999 1584.78 1999 1577.04 c
-1999 1526.1 l
-1992.88 1520.16 1989.18 1518.48 1983.8 1518.48 c
-1976.42 1518.48 1974 1522 1974 1530.96 c
-1974 1592 l
-1939.88 1592 l
-1939.88 1587.66 l
-1947.26 1586.22 1949 1584.6 1949 1577.04 c
-1949 1531.68 l
-1949 1515.84 1957.89 1506.48 1972.64 1506.48 c
-1982.16 1506.48 1988.56 1509.36 1999.18 1518.36 c
-h
-2037.08 1509 m
-f*
-2075.28 1592 m
-2041.22 1592 l
-2041.22 1587.66 l
-2048.96 1586.58 2051 1584.24 2051 1577.04 c
-2051 1524.12 l
-2051 1516.74 2049.19 1514.76 2041.22 1513.32 c
-2041.22 1509 l
-2089.1 1509 l
-2089.1 1513.32 l
-2078.12 1514.04 2076 1516.38 2076 1527.54 c
-2076 1561.56 l
-2076 1570.92 2081.02 1578.66 2086.94 1578.66 c
-2088.38 1578.66 2090 1577.4 2091.98 1574.52 c
-2095.4 1569.66 2098.1 1568.04 2102.78 1568.04 c
-2109.44 1568.04 2114.12 1573.08 2114.12 1579.92 c
-2114.12 1588.2 2108 1594.16 2099.54 1594.16 c
-2090.55 1594.16 2083.73 1589.47 2075.28 1577.22 c
-h
-2115.92 1509 m
-f*
-2156.28 1592 m
-2122.22 1592 l
-2122.22 1587.66 l
-2129.96 1586.58 2132 1584.24 2132 1577.04 c
-2132 1524.12 l
-2132 1516.74 2130.19 1514.76 2122.22 1513.32 c
-2122.22 1509 l
-2170.1 1509 l
-2170.1 1513.32 l
-2159.12 1514.04 2157 1516.38 2157 1527.54 c
-2157 1561.56 l
-2157 1570.92 2162.02 1578.66 2167.94 1578.66 c
-2169.38 1578.66 2171 1577.4 2172.98 1574.52 c
-2176.4 1569.66 2179.1 1568.04 2183.78 1568.04 c
-2190.44 1568.04 2195.12 1573.08 2195.12 1579.92 c
-2195.12 1588.2 2189 1594.16 2180.54 1594.16 c
-2171.55 1594.16 2164.73 1589.47 2156.28 1577.22 c
-h
-2196.92 1509 m
-f*
-2268.36 1531.5 m
-2260.98 1522.68 2255.58 1519.48 2247.84 1519.48 c
-2241 1519.48 2235.6 1522.53 2232 1528.62 c
-2228.58 1534.36 2227.14 1540.45 2226.42 1553 c
-2271.78 1553 l
-2270.7 1567.99 2268 1576.3 2262.42 1583.34 c
-2256.66 1590.36 2248.2 1594.16 2238.12 1594.16 c
-2215.62 1594.16 2200.5 1576.33 2200.5 1550.04 c
-2200.5 1523.76 2215.26 1506.48 2237.58 1506.48 c
-2252.16 1506.48 2260.98 1512.06 2272.68 1528.98 c
-h
-2225.52 1560 m
-2226.06 1581.42 2229.3 1588.16 2238.12 1588.16 c
-2243.34 1588.16 2246.58 1585.42 2248.02 1580.1 c
-2248.92 1576.68 2249.28 1571.64 2249.64 1562.46 c
-2249.64 1560 l
-h
-2275.92 1509 m
-f*
-2313.82 1592 m
-2279.78 1592 l
-2279.78 1587.66 l
-2287.7 1586.4 2289 1584.6 2289 1577.04 c
-2289 1524.12 l
-2289 1516.56 2287.61 1514.94 2279.78 1513.32 c
-2279.78 1509 l
-2323.16 1509 l
-2323.16 1513.32 l
-2316.5 1514.22 2314 1516.92 2314 1523.58 c
-2314 1571.64 l
-2314 1572.36 2315.4 1574.16 2317.4 1575.96 c
-2321.36 1579.92 2325.68 1582.16 2330 1582.16 c
-2336.12 1582.16 2339 1577.27 2339 1567.14 c
-2339 1523.58 l
-2339 1516.92 2336.71 1514.04 2330.72 1513.32 c
-2330.72 1509 l
-2373.02 1509 l
-2373.02 1513.32 l
-2366 1513.86 2364 1516.02 2364 1523.58 c
-2364 1568.76 l
-2364 1584.24 2354.54 1594.16 2339.9 1594.16 c
-2328.96 1594.16 2320.57 1589.11 2313.82 1578.48 c
-h
-2376.08 1509 m
-f*
-2430.9 1592 m
-2414 1592 l
-2414 1622.4 l
-2409.48 1622.4 l
-2398.5 1606.92 2391.3 1598.82 2379.6 1588.92 c
-2379.6 1584 l
-2389 1584 l
-2389 1525.74 l
-2389 1514.04 2396.73 1506.84 2409.12 1506.84 c
-2421.18 1506.84 2428.38 1512.24 2435.76 1527 c
-2431.26 1528.98 l
-2427.66 1522.14 2424.78 1519.84 2421 1519.84 c
-2415.96 1519.84 2414 1522.83 2414 1529.88 c
-2414 1584 l
-2430.9 1584 l
-h
-2435.94 1509 m
-f*
-2481 1509 m
-f*
-2585.94 1631 m
-2483.88 1631 l
-2483.88 1626 l
-2496.3 1625.29 2500 1622.63 2500 1613.4 c
-2500 1526.28 l
-2500 1516.92 2497.44 1514.94 2483.88 1513.5 c
-2483.88 1509 l
-2548.68 1509 l
-2548.68 1514 l
-2532.12 1514.69 2529 1516.77 2529 1526.28 c
-2529 1568.22 l
-2547.28 1567.86 2553.91 1561.2 2556.42 1540.32 c
-2560.92 1540.32 l
-2560.92 1601.16 l
-2556.42 1601.16 l
-2553.19 1580.64 2546.92 1574.34 2529 1574.34 c
-2529 1616.1 l
-2529 1622.76 2531.32 1625 2540.4 1625 c
-2557.14 1625 2567.58 1621.8 2573.16 1615.2 c
-2577.12 1610.7 2579.1 1605.84 2581.62 1594.5 c
-2585.94 1594.5 l
-h
-2590.98 1509 m
-f*
-2630.28 1592 m
-2596.22 1592 l
-2596.22 1587.66 l
-2603.96 1586.58 2606 1584.24 2606 1577.04 c
-2606 1524.12 l
-2606 1516.74 2604.19 1514.76 2596.22 1513.32 c
-2596.22 1509 l
-2644.1 1509 l
-2644.1 1513.32 l
-2633.12 1514.04 2631 1516.38 2631 1527.54 c
-2631 1561.56 l
-2631 1570.92 2636.02 1578.66 2641.94 1578.66 c
-2643.38 1578.66 2645 1577.4 2646.98 1574.52 c
-2650.4 1569.66 2653.1 1568.04 2657.78 1568.04 c
-2664.44 1568.04 2669.12 1573.08 2669.12 1579.92 c
-2669.12 1588.2 2663 1594.16 2654.54 1594.16 c
-2645.55 1594.16 2638.73 1589.47 2630.28 1577.22 c
-h
-2670.92 1509 m
-f*
-2756.14 1520.52 m
-2754.34 1518.72 l
-2753.8 1518.18 2753.26 1518 2752.36 1518 c
-2749.84 1518 2749 1519.44 2749 1522.5 c
-2749 1569.48 l
-2749 1584.78 2735.16 1594.16 2712.94 1594.16 c
-2692.6 1594.16 2678.92 1584.97 2678.92 1571.46 c
-2678.92 1563.9 2683.24 1559.58 2690.62 1559.58 c
-2697.82 1559.58 2702.86 1563.9 2702.86 1570.02 c
-2702.86 1572.54 2701.96 1574.88 2699.62 1577.76 c
-2698 1579.56 2697.46 1580.64 2697.46 1581.72 c
-2697.46 1585.5 2702.32 1588.16 2708.8 1588.16 c
-2719.42 1588.16 2724 1583.37 2724 1572.54 c
-2724 1559.4 l
-2702.89 1552.92 2694.41 1549.68 2687.56 1545.18 c
-2679.46 1539.78 2676 1533.48 2676 1525.56 c
-2676 1514.58 2684.07 1506.48 2695.3 1506.48 c
-2705.74 1506.48 2714.02 1510.08 2723.92 1519.08 c
-2725.9 1509.9 2729.86 1506.48 2738.68 1506.48 c
-2746.42 1506.48 2752 1509.36 2758.84 1516.74 c
-h
-2724 1527 m
-2719.04 1521.42 2715.37 1519.26 2710.96 1519.26 c
-2705.56 1519.26 2702 1524.12 2702 1531.32 c
-2702 1541.76 2709.57 1549.14 2724 1553.1 c
-h
-2761 1509 m
-f*
-2798.46 1592 m
-2763.73 1592 l
-2763.73 1587.66 l
-2771.65 1586.58 2774 1584.42 2774 1577.04 c
-2774 1524.12 l
-2774 1516.74 2771.95 1514.76 2763.73 1513.32 c
-2763.73 1509 l
-2806.93 1509 l
-2806.93 1513.32 l
-2800.63 1514.22 2799 1516.74 2799 1523.58 c
-2799 1571.64 l
-2799 1572.54 2801.51 1575.78 2803.51 1577.76 c
-2807.29 1580.64 2810.53 1582.16 2813.77 1582.16 c
-2820.79 1582.16 2824 1578 2824 1567.14 c
-2824 1523.58 l
-2824 1516.2 2821.9 1513.86 2814.85 1513.32 c
-2814.85 1509 l
-2856.97 1509 l
-2856.97 1513.32 l
-2850.67 1514.04 2849 1516.74 2849 1523.58 c
-2849 1571.64 l
-2849 1572.54 2851.43 1575.6 2853.37 1577.58 c
-2857.33 1580.64 2860.57 1582.16 2863.81 1582.16 c
-2870.65 1582.16 2873 1577.82 2873 1567.14 c
-2873 1523.58 l
-2873 1516.02 2871.1 1513.86 2864.53 1513.32 c
-2864.53 1509 l
-2907.37 1509 l
-2907.37 1513 l
-2900.35 1513.37 2898 1515.6 2898 1523.58 c
-2898 1568.76 l
-2898 1584.24 2888.6 1594.16 2874.07 1594.16 c
-2863.81 1594.16 2856.97 1590.01 2847.61 1578.48 c
-2842.21 1589.82 2835.91 1594.16 2824.57 1594.16 c
-2813.2 1594.16 2805.21 1589.29 2798.46 1578.48 c
-h
-2910.94 1509 m
-f*
-2983.36 1531.5 m
-2975.98 1522.68 2970.58 1519.48 2962.84 1519.48 c
-2956 1519.48 2950.6 1522.53 2947 1528.62 c
-2943.58 1534.36 2942.14 1540.45 2941.42 1553 c
-2986.78 1553 l
-2985.7 1567.99 2983 1576.3 2977.42 1583.34 c
-2971.66 1590.36 2963.2 1594.16 2953.12 1594.16 c
-2930.62 1594.16 2915.5 1576.33 2915.5 1550.04 c
-2915.5 1523.76 2930.26 1506.48 2952.58 1506.48 c
-2967.16 1506.48 2975.98 1512.06 2987.68 1528.98 c
-h
-2940.52 1560 m
-2941.06 1581.42 2944.3 1588.16 2953.12 1588.16 c
-2958.34 1588.16 2961.58 1585.42 2963.02 1580.1 c
-2963.92 1576.68 2964.28 1571.64 2964.64 1562.46 c
-2964.64 1560 l
-h
-2990.92 1509 m
-f*
-1 i
-1805.75 1474.55 1184.4 15.5999 re
-f
-1 g
-2414.15 1700.15 m
-2577.35 1853.75 l
-2495.75 1853.75 l
-2495.75 2004.95 l
-2330.15 2004.95 l
-2330.15 1853.75 l
-2247.35 1853.75 l
-f*
-0 g
-2414.15 1700.15 m
-2577.35 1853.75 l
-2495.75 1853.75 l
-2495.75 2004.95 l
-2330.15 2004.95 l
-2330.15 1853.75 l
-2247.35 1853.75 l
-2414.15 1700.15 l
-2414.15 1713.35 l
-2272.55 1842.95 l
-2339.75 1842.95 l
-2339.75 1994.15 l
-2486.15 1994.15 l
-2486.15 1842.95 l
-2552.15 1842.95 l
-2414.15 1713.35 l
-2414.15 1700.15 l
-f*
-0.201248 i
-4490.33 1642 m
-4376.22 1642 l
-4376.22 1637 l
-4390.11 1636.2 4394 1633.18 4394 1622.72 c
-4394 1525.32 l
-4394 1514.85 4391.17 1512.64 4376.22 1511.03 c
-4376.22 1506 l
-4448.67 1506 l
-4448.67 1511 l
-4430.15 1511.81 4427 1514.23 4427 1525.32 c
-4427 1572.21 l
-4447.22 1571.81 4454.55 1564.36 4457.32 1541.02 c
-4462.35 1541.02 l
-4462.35 1609.04 l
-4457.32 1609.04 l
-4453.76 1586.1 4446.82 1579.05 4427 1579.05 c
-4427 1625.74 l
-4427 1633.19 4429.52 1635 4439.41 1635 c
-4458.13 1635 4469.8 1631.64 4476.04 1624.74 c
-4480.47 1619.71 4482.68 1614.27 4485.5 1601.59 c
-4490.33 1601.59 l
-h
-4495.96 1506 m
-f*
-4539.19 1599 m
-4500.84 1599 l
-4500.84 1593.95 l
-4509.49 1592.74 4512 1590.12 4512 1582.07 c
-4512 1522.9 l
-4512 1514.65 4509.93 1512.44 4500.84 1510.83 c
-4500.84 1506 l
-4554.37 1506 l
-4554.37 1510.83 l
-4542.09 1511.63 4540 1514.25 4540 1526.73 c
-4540 1564.76 l
-4540 1575.23 4545.49 1583.88 4551.95 1583.88 c
-4553.56 1583.88 4555.37 1582.47 4557.59 1579.25 c
-4561.41 1573.82 4564.43 1572.01 4569.66 1572.01 c
-4577.11 1572.01 4582.34 1577.64 4582.34 1585.29 c
-4582.34 1594.55 4575.5 1601.41 4566.04 1601.41 c
-4556.1 1601.41 4548.54 1596.12 4539.19 1582.27 c
-h
-4584.35 1506 m
-f*
-4679.19 1518.88 m
-4677.18 1516.87 l
-4676.57 1516.26 4675.97 1516.06 4674.96 1516.06 c
-4672.15 1516.06 4671 1517.67 4671 1521.09 c
-4671 1573.62 l
-4671 1590.73 4655.6 1601.42 4630.89 1601.42 c
-4608.15 1601.42 4592.85 1591.06 4592.85 1575.83 c
-4592.85 1567.38 4597.69 1562.55 4605.94 1562.55 c
-4613.99 1562.55 4619.62 1567.38 4619.62 1574.22 c
-4619.62 1577.04 4618.61 1579.66 4616 1582.88 c
-4614.19 1584.89 4613.58 1586.1 4613.58 1587.3 c
-4613.58 1591.53 4619.02 1594.42 4626.26 1594.42 c
-4638.14 1594.42 4643.86 1589.08 4643.86 1577.04 c
-4643.86 1562.35 l
-4619.91 1555.1 4610.29 1551.48 4602.51 1546.45 c
-4593.46 1540.41 4589 1533.37 4589 1524.52 c
-4589 1512.24 4598.27 1503.18 4611.17 1503.18 c
-4622.84 1503.18 4632.1 1507.21 4643.17 1517.27 c
-4645.38 1507.01 4649.81 1503.18 4659.67 1503.18 c
-4668.32 1503.18 4674.56 1506.4 4682.21 1514.65 c
-h
-4643 1526.13 m
-4637.55 1519.89 4633.52 1517.47 4628.68 1517.47 c
-4622.64 1517.47 4618 1522.91 4618 1530.96 c
-4618 1542.63 4626.61 1550.88 4643 1555.31 c
-h
-4684.62 1506 m
-f*
-4725.4 1599 m
-4686.7 1599 l
-4686.7 1593.95 l
-4695.55 1592.74 4698 1590.32 4698 1582.07 c
-4698 1522.9 l
-4698 1514.65 4695.74 1512.44 4686.7 1510.83 c
-4686.7 1506 l
-4735 1506 l
-4735 1510.83 l
-4727.95 1511.84 4726 1514.65 4726 1522.3 c
-4726 1576.03 l
-4726 1577.04 4728.87 1580.66 4731.18 1582.88 c
-4735.4 1586.1 4739.02 1588.42 4742.65 1588.42 c
-4750.5 1588.42 4754 1583.59 4754 1571 c
-4754 1522.3 l
-4754 1514.05 4751.68 1511.43 4743.85 1510.83 c
-4743.85 1506 l
-4790.95 1506 l
-4790.95 1510.83 l
-4783.9 1511.64 4782 1514.65 4782 1522.3 c
-4782 1576.03 l
-4782 1577.04 4784.73 1580.46 4786.92 1582.68 c
-4791.35 1586.1 4794.97 1588.42 4798.59 1588.42 c
-4806.24 1588.42 4809 1583.38 4809 1571 c
-4809 1522.3 l
-4809 1513.85 4806.85 1511.43 4799.4 1510.83 c
-4799.4 1506 l
-4847.3 1506 l
-4847.3 1511 l
-4839.45 1511.4 4837 1513.78 4837 1522.3 c
-4837 1572.81 l
-4837 1590.12 4826.43 1601.42 4810.07 1601.42 c
-4798.59 1601.42 4790.95 1596.73 4780.48 1583.68 c
-4774.44 1596.36 4767.4 1601.42 4754.72 1601.42 c
-4741.95 1601.42 4732.98 1595.91 4725.4 1583.68 c
-h
-4850.64 1506 m
-f*
-4930.9 1531.16 m
-4922.65 1521.29 4916.61 1517.18 4907.96 1517.18 c
-4900.31 1517.18 4894.27 1520.77 4890.25 1527.94 c
-4886.43 1534.54 4884.82 1541.56 4884.01 1556 c
-4934.73 1556 l
-4933.52 1572.36 4930.5 1581.43 4924.26 1589.12 c
-4917.82 1596.96 4908.36 1601.42 4897.09 1601.42 c
-4871.94 1601.42 4855.03 1581.4 4855.03 1551.88 c
-4855.03 1522.5 4871.53 1503.18 4896.49 1503.18 c
-4912.79 1503.18 4922.65 1509.42 4935.73 1528.34 c
-h
-4883 1563 m
-4883.61 1586.96 4887.23 1594.42 4897.09 1594.42 c
-4902.93 1594.42 4906.55 1591.38 4908.16 1585.49 c
-4909.17 1581.67 4909.57 1576.03 4909.97 1565.77 c
-4909.97 1563 l
-h
-4939.35 1506 m
-f*
-5036.16 1601.59 m
-5036.16 1645.22 l
-5030.37 1645.22 l
-5028.96 1639.82 5027.55 1638.42 5023.93 1638.42 c
-5022.12 1638.42 5019.7 1639.03 5015.47 1640.43 c
-5006.22 1643.86 4999.78 1645.02 4991.93 1645.02 c
-4964.56 1645.02 4948 1629.54 4948 1604.01 c
-4948 1598.98 4948.75 1594.75 4950.07 1590.73 c
-4954.29 1580.06 4965.16 1570.6 4982.27 1562.35 c
-4995.75 1555.91 l
-5013.46 1547.46 5018 1542.22 5018 1531.56 c
-5018 1517.67 5008.25 1509.18 4992.94 1509.18 c
-4981.26 1509.18 4971.6 1513.89 4963.96 1523.31 c
-4958.12 1530.75 4955.3 1537.6 4951.88 1551.88 c
-4946.04 1551.88 l
-4946.04 1502.18 l
-4951.88 1502.18 l
-4953.09 1507.41 4954.7 1509.02 4957.92 1509.02 c
-4959.53 1509.02 4961.74 1508.42 4966.17 1507.01 c
-4976.03 1503.59 4983.48 1502.18 4992.33 1502.18 c
-5022.12 1502.18 5042 1519.28 5042 1544.64 c
-5042 1559.73 5033.04 1574.83 5020.1 1581.27 c
-4990.52 1595.96 l
-4974.22 1604.01 4970 1608.84 4970 1618.7 c
-4970 1631.18 4978.37 1638.02 4991.93 1638.02 c
-5000.99 1638.02 5009.44 1634.47 5016.68 1627.55 c
-5023.53 1620.51 5026.75 1614.67 5030.77 1601.59 c
-h
-5050.89 1506 m
-f*
-5129.9 1531.16 m
-5121.65 1521.29 5115.61 1517.18 5106.96 1517.18 c
-5099.31 1517.18 5093.27 1520.77 5089.25 1527.94 c
-5085.43 1534.54 5083.82 1541.56 5083.01 1556 c
-5133.73 1556 l
-5132.52 1572.36 5129.5 1581.43 5123.26 1589.12 c
-5116.82 1596.96 5107.36 1601.42 5096.09 1601.42 c
-5070.94 1601.42 5054.03 1581.4 5054.03 1551.88 c
-5054.03 1522.5 5070.53 1503.18 5095.49 1503.18 c
-5111.79 1503.18 5121.65 1509.42 5134.73 1528.34 c
-h
-5082 1563 m
-5082.61 1586.96 5086.23 1594.42 5096.09 1594.42 c
-5101.93 1594.42 5105.55 1591.38 5107.16 1585.49 c
-5108.17 1581.67 5108.57 1576.03 5108.97 1565.77 c
-5108.97 1563 l
-h
-5138.35 1506 m
-f*
-5199.38 1599 m
-5180 1599 l
-5180 1632.79 l
-5175.43 1632.79 l
-5163.16 1615.48 5155.11 1606.42 5142.02 1595.35 c
-5142.02 1590 l
-5152 1590 l
-5152 1524.72 l
-5152 1511.64 5160.84 1503.59 5175.03 1503.59 c
-5188.51 1503.59 5196.56 1509.62 5204.81 1526.12 c
-5199.78 1528.34 l
-5195.76 1520.69 5192.54 1517.59 5188.31 1517.59 c
-5182.68 1517.59 5180 1521.09 5180 1529.34 c
-5180 1590 l
-5199.38 1590 l
-h
-5205.02 1506 m
-f*
-5255.31 1506 m
-f*
-5258.22 1642 m
-5258.22 1637 l
-5272.11 1636.2 5276 1632.98 5276 1622.72 c
-5276 1525.32 l
-5276 1515.06 5272.97 1512.64 5258.22 1511.03 c
-5258.22 1506 l
-5323.02 1506 l
-5357.03 1506 5380 1521.09 5380 1543.83 c
-5380 1553.09 5376.03 1561.14 5368.71 1567.38 c
-5361.66 1573.62 5354.82 1576.44 5340.73 1579.46 c
-5364.08 1586.3 5373 1594.55 5373 1609.84 c
-5373 1630.57 5354.39 1642 5320.41 1642 c
-h
-5308 1575.03 m
-5314.17 1575.03 l
-5334.9 1575.03 5345 1564.36 5345 1542.02 c
-5345 1522.5 5336.73 1513 5320.41 1513 c
-5311.55 1513 5308 1516.26 5308 1524.72 c
-h
-5308 1626.15 m
-5308 1633.39 5310.85 1636 5319 1636 c
-5333.08 1636 5340 1627.35 5340 1608.44 c
-5340 1587.3 5333.23 1581.67 5308 1581.07 c
-h
-5389.23 1506 m
-f*
-1041.33 4883 m
-927.22 4883 l
-927.22 4878 l
-941.106 4877.2 945 4874.18 945 4863.72 c
-945 4766.32 l
-945 4755.85 942.171 4753.64 927.22 4752.03 c
-927.22 4747 l
-999.67 4747 l
-999.67 4752 l
-981.155 4752.81 978 4755.23 978 4766.32 c
-978 4813.21 l
-998.215 4812.81 1005.55 4805.36 1008.32 4782.02 c
-1013.35 4782.02 l
-1013.35 4850.04 l
-1008.32 4850.04 l
-1004.76 4827.1 997.819 4820.05 978 4820.05 c
-978 4866.74 l
-978 4874.19 980.521 4876 990.412 4876 c
-1009.13 4876 1020.8 4872.64 1027.04 4865.74 c
-1031.47 4860.71 1033.68 4855.27 1036.5 4842.59 c
-1041.33 4842.59 l
-h
-1046.96 4747 m
-f*
-1090.19 4840 m
-1051.84 4840 l
-1051.84 4834.95 l
-1060.49 4833.74 1063 4831.12 1063 4823.07 c
-1063 4763.9 l
-1063 4755.65 1060.93 4753.44 1051.84 4751.83 c
-1051.84 4747 l
-1105.37 4747 l
-1105.37 4751.83 l
-1093.09 4752.63 1091 4755.25 1091 4767.73 c
-1091 4805.76 l
-1091 4816.23 1096.49 4824.88 1102.95 4824.88 c
-1104.56 4824.88 1106.37 4823.47 1108.59 4820.25 c
-1112.41 4814.82 1115.43 4813.01 1120.66 4813.01 c
-1128.11 4813.01 1133.34 4818.64 1133.34 4826.29 c
-1133.34 4835.55 1126.5 4842.41 1117.04 4842.41 c
-1107.1 4842.41 1099.54 4837.12 1090.19 4823.27 c
-h
-1135.35 4747 m
-f*
-1230.19 4759.88 m
-1228.18 4757.87 l
-1227.57 4757.26 1226.97 4757.06 1225.96 4757.06 c
-1223.15 4757.06 1222 4758.67 1222 4762.09 c
-1222 4814.62 l
-1222 4831.73 1206.6 4842.42 1181.89 4842.42 c
-1159.15 4842.42 1143.85 4832.06 1143.85 4816.83 c
-1143.85 4808.38 1148.69 4803.55 1156.94 4803.55 c
-1164.99 4803.55 1170.62 4808.38 1170.62 4815.22 c
-1170.62 4818.04 1169.61 4820.66 1167 4823.88 c
-1165.19 4825.89 1164.58 4827.1 1164.58 4828.3 c
-1164.58 4832.53 1170.02 4835.42 1177.26 4835.42 c
-1189.14 4835.42 1194.86 4830.08 1194.86 4818.04 c
-1194.86 4803.35 l
-1170.91 4796.1 1161.29 4792.48 1153.51 4787.45 c
-1144.46 4781.41 1140 4774.37 1140 4765.52 c
-1140 4753.24 1149.27 4744.18 1162.17 4744.18 c
-1173.84 4744.18 1183.1 4748.21 1194.17 4758.27 c
-1196.38 4748.01 1200.81 4744.18 1210.67 4744.18 c
-1219.32 4744.18 1225.56 4747.4 1233.21 4755.65 c
-h
-1194 4767.13 m
-1188.55 4760.89 1184.52 4758.47 1179.68 4758.47 c
-1173.64 4758.47 1169 4763.91 1169 4771.96 c
-1169 4783.63 1177.61 4791.88 1194 4796.31 c
-h
-1235.62 4747 m
-f*
-1277.4 4840 m
-1238.7 4840 l
-1238.7 4834.95 l
-1247.55 4833.74 1250 4831.32 1250 4823.07 c
-1250 4763.9 l
-1250 4755.65 1247.74 4753.44 1238.7 4751.83 c
-1238.7 4747 l
-1287 4747 l
-1287 4751.83 l
-1279.95 4752.84 1278 4755.65 1278 4763.3 c
-1278 4817.03 l
-1278 4818.04 1280.87 4821.66 1283.18 4823.88 c
-1287.4 4827.1 1291.02 4829.42 1294.65 4829.42 c
-1302.5 4829.42 1306 4824.59 1306 4812 c
-1306 4763.3 l
-1306 4755.05 1303.68 4752.43 1295.85 4751.83 c
-1295.85 4747 l
-1342.95 4747 l
-1342.95 4751.83 l
-1335.9 4752.64 1334 4755.65 1334 4763.3 c
-1334 4817.03 l
-1334 4818.04 1336.73 4821.46 1338.92 4823.68 c
-1343.35 4827.1 1346.97 4829.42 1350.59 4829.42 c
-1358.24 4829.42 1361 4824.38 1361 4812 c
-1361 4763.3 l
-1361 4754.85 1358.85 4752.43 1351.4 4751.83 c
-1351.4 4747 l
-1399.3 4747 l
-1399.3 4752 l
-1391.45 4752.4 1389 4754.78 1389 4763.3 c
-1389 4813.81 l
-1389 4831.12 1378.43 4842.42 1362.07 4842.42 c
-1350.59 4842.42 1342.95 4837.73 1332.48 4824.68 c
-1326.44 4837.36 1319.4 4842.42 1306.72 4842.42 c
-1293.95 4842.42 1284.98 4836.91 1277.4 4824.68 c
-h
-1402.64 4747 m
-f*
-1481.9 4772.16 m
-1473.65 4762.29 1467.61 4758.18 1458.96 4758.18 c
-1451.31 4758.18 1445.27 4761.77 1441.25 4768.94 c
-1437.43 4775.54 1435.82 4782.56 1435.01 4797 c
-1485.73 4797 l
-1484.52 4813.36 1481.5 4822.43 1475.26 4830.12 c
-1468.82 4837.96 1459.36 4842.42 1448.09 4842.42 c
-1422.94 4842.42 1406.03 4822.4 1406.03 4792.88 c
-1406.03 4763.5 1422.53 4744.18 1447.49 4744.18 c
-1463.79 4744.18 1473.65 4750.42 1486.73 4769.34 c
-h
-1434 4804 m
-1434.61 4827.96 1438.23 4835.42 1448.09 4835.42 c
-1453.93 4835.42 1457.55 4832.38 1459.16 4826.49 c
-1460.17 4822.67 1460.57 4817.03 1460.97 4806.77 c
-1460.97 4804 l
-h
-1490.35 4747 m
-f*
-1587.16 4842.59 m
-1587.16 4886.22 l
-1581.37 4886.22 l
-1579.96 4880.82 1578.55 4879.42 1574.93 4879.42 c
-1573.12 4879.42 1570.7 4880.03 1566.47 4881.43 c
-1557.22 4884.86 1550.78 4886.02 1542.93 4886.02 c
-1515.56 4886.02 1499 4870.54 1499 4845.01 c
-1499 4839.98 1499.75 4835.75 1501.07 4831.73 c
-1505.29 4821.06 1516.16 4811.6 1533.27 4803.35 c
-1546.75 4796.91 l
-1564.46 4788.46 1569 4783.22 1569 4772.56 c
-1569 4758.67 1559.25 4750.18 1543.94 4750.18 c
-1532.26 4750.18 1522.6 4754.89 1514.96 4764.31 c
-1509.12 4771.75 1506.3 4778.6 1502.88 4792.88 c
-1497.04 4792.88 l
-1497.04 4743.18 l
-1502.88 4743.18 l
-1504.09 4748.41 1505.7 4750.02 1508.92 4750.02 c
-1510.53 4750.02 1512.74 4749.42 1517.17 4748.01 c
-1527.03 4744.59 1534.48 4743.18 1543.33 4743.18 c
-1573.12 4743.18 1593 4760.28 1593 4785.64 c
-1593 4800.73 1584.04 4815.83 1571.1 4822.27 c
-1541.52 4836.96 l
-1525.22 4845.01 1521 4849.84 1521 4859.7 c
-1521 4872.18 1529.37 4879.02 1542.93 4879.02 c
-1551.99 4879.02 1560.44 4875.47 1567.68 4868.55 c
-1574.53 4861.51 1577.75 4855.67 1581.77 4842.59 c
-h
-1601.89 4747 m
-f*
-1681.9 4772.16 m
-1673.65 4762.29 1667.61 4758.18 1658.96 4758.18 c
-1651.31 4758.18 1645.27 4761.77 1641.25 4768.94 c
-1637.43 4775.54 1635.82 4782.56 1635.01 4797 c
-1685.73 4797 l
-1684.52 4813.36 1681.5 4822.43 1675.26 4830.12 c
-1668.82 4837.96 1659.36 4842.42 1648.09 4842.42 c
-1622.94 4842.42 1606.03 4822.4 1606.03 4792.88 c
-1606.03 4763.5 1622.53 4744.18 1647.49 4744.18 c
-1663.79 4744.18 1673.65 4750.42 1686.73 4769.34 c
-h
-1634 4804 m
-1634.61 4827.96 1638.23 4835.42 1648.09 4835.42 c
-1653.93 4835.42 1657.55 4832.38 1659.16 4826.49 c
-1660.17 4822.67 1660.57 4817.03 1660.97 4806.77 c
-1660.97 4804 l
-h
-1690.35 4747 m
-f*
-1750.38 4840 m
-1731 4840 l
-1731 4873.79 l
-1726.43 4873.79 l
-1714.16 4856.48 1706.11 4847.42 1693.02 4836.35 c
-1693.02 4831 l
-1703 4831 l
-1703 4765.72 l
-1703 4752.64 1711.84 4744.59 1726.03 4744.59 c
-1739.51 4744.59 1747.56 4750.62 1755.81 4767.12 c
-1750.78 4769.34 l
-1746.76 4761.69 1743.54 4758.59 1739.31 4758.59 c
-1733.68 4758.59 1731 4762.09 1731 4770.34 c
-1731 4831 l
-1750.38 4831 l
-h
-1756.02 4747 m
-f*
-1807.31 4747 m
-f*
-1944.66 4752.03 m
-1935.81 4752.03 1933.59 4754.85 1922.72 4780 c
-1877.85 4885.82 l
-1872.21 4885.82 l
-1827.53 4775.58 l
-1819.89 4756.66 1817.47 4753.84 1807.81 4752.03 c
-1807.81 4747 l
-1848.66 4747 l
-1848.66 4752.03 l
-1836.79 4752.84 1832.16 4755.05 1832.16 4760.28 c
-1832.16 4762.9 1833.57 4767.53 1838 4778.6 c
-1841.02 4787 l
-1886.3 4787 l
-1893.14 4770.9 1895.56 4763.76 1895.56 4759.28 c
-1895.56 4754.85 1892.94 4753.04 1885.9 4752.63 c
-1879.46 4752.03 l
-1879.46 4747 l
-1944.66 4747 l
-h
-1844.04 4795 m
-1862.95 4843.4 l
-1883.28 4795 l
-h
-1951.3 4747 m
-f*
-1 i
-32 w
-942.95 6694.55 m
-618.95 6336.95 432.95 5816.15 432.95 5268.95 c
-432.95 4305.35 1001.75 3495.35 1751.75 3390.95 c
-S
-954.95 6592.55 m
-921.35 6668.15 l
-844.55 6699.35 l
-1072.55 6822.95 l
-f*
-1682.15 3323.75 m
-1720.55 3398.15 l
-1697.75 3478.55 l
-1936.55 3378.95 l
-f*
-0.564706 g
-4962.95 2235.35 m
-4962.95 2345.75 4871.75 2436.95 4760.15 2436.95 c
-4263.35 2436.95 l
-4151.75 2436.95 4060.55 2345.75 4060.55 2235.35 c
-4060.55 2097.35 l
-4060.55 1986.95 4151.75 1895.75 4263.35 1895.75 c
-4760.15 1895.75 l
-4871.75 1895.75 4962.95 1986.95 4962.95 2097.35 c
-f*
-1 g
-4898.15 2292.95 m
-4898.15 2402.15 4809.35 2490.95 4697.75 2490.95 c
-4206.95 2490.95 l
-4096.55 2490.95 4006.55 2402.15 4006.55 2292.95 c
-4006.55 2158.55 l
-4006.55 2049.35 4095.35 1960.55 4206.95 1960.55 c
-4697.75 1960.55 l
-4809.35 1960.55 4898.15 2049.35 4898.15 2158.55 c
-f*
-8 w
-0 g
-4898.15 2292.95 m
-4898.15 2402.15 4809.35 2490.95 4697.75 2490.95 c
-4206.95 2490.95 l
-4096.55 2490.95 4006.55 2402.15 4006.55 2292.95 c
-4006.55 2158.55 l
-4006.55 2049.35 4095.35 1960.55 4206.95 1960.55 c
-4697.75 1960.55 l
-4809.35 1960.55 4898.15 2049.35 4898.15 2158.55 c
-h
-S
-0.201248 i
-4239.33 2332 m
-4125.22 2332 l
-4125.22 2327 l
-4139.11 2326.2 4143 2323.18 4143 2312.72 c
-4143 2215.32 l
-4143 2204.85 4140.17 2202.64 4125.22 2201.03 c
-4125.22 2196 l
-4197.67 2196 l
-4197.67 2201 l
-4179.15 2201.81 4176 2204.23 4176 2215.32 c
-4176 2262.21 l
-4196.22 2261.81 4203.55 2254.36 4206.32 2231.02 c
-4211.35 2231.02 l
-4211.35 2299.04 l
-4206.32 2299.04 l
-4202.76 2276.1 4195.82 2269.05 4176 2269.05 c
-4176 2315.74 l
-4176 2323.19 4178.52 2325 4188.41 2325 c
-4207.13 2325 4218.8 2321.64 4225.04 2314.74 c
-4229.47 2309.71 4231.68 2304.27 4234.5 2291.59 c
-4239.33 2291.59 l
-h
-4244.96 2196 m
-f*
-4289.19 2289 m
-4250.84 2289 l
-4250.84 2283.95 l
-4259.49 2282.74 4262 2280.12 4262 2272.07 c
-4262 2212.9 l
-4262 2204.65 4259.93 2202.44 4250.84 2200.83 c
-4250.84 2196 l
-4304.37 2196 l
-4304.37 2200.83 l
-4292.09 2201.63 4290 2204.25 4290 2216.73 c
-4290 2254.76 l
-4290 2265.23 4295.49 2273.88 4301.95 2273.88 c
-4303.56 2273.88 4305.37 2272.47 4307.59 2269.25 c
-4311.41 2263.82 4314.43 2262.01 4319.66 2262.01 c
-4327.11 2262.01 4332.34 2267.64 4332.34 2275.29 c
-4332.34 2284.55 4325.5 2291.41 4316.04 2291.41 c
-4306.1 2291.41 4298.54 2286.12 4289.19 2272.27 c
-h
-4334.35 2196 m
-f*
-4429.19 2208.88 m
-4427.18 2206.87 l
-4426.57 2206.26 4425.97 2206.06 4424.96 2206.06 c
-4422.15 2206.06 4421 2207.67 4421 2211.09 c
-4421 2263.62 l
-4421 2280.73 4405.6 2291.42 4380.89 2291.42 c
-4358.15 2291.42 4342.85 2281.06 4342.85 2265.83 c
-4342.85 2257.38 4347.69 2252.55 4355.94 2252.55 c
-4363.99 2252.55 4369.62 2257.38 4369.62 2264.22 c
-4369.62 2267.04 4368.61 2269.66 4366 2272.88 c
-4364.19 2274.89 4363.58 2276.1 4363.58 2277.3 c
-4363.58 2281.53 4369.02 2284.42 4376.26 2284.42 c
-4388.14 2284.42 4393.86 2279.08 4393.86 2267.04 c
-4393.86 2252.35 l
-4369.91 2245.1 4360.29 2241.48 4352.51 2236.45 c
-4343.46 2230.41 4339 2223.37 4339 2214.52 c
-4339 2202.24 4348.27 2193.18 4361.17 2193.18 c
-4372.84 2193.18 4382.1 2197.21 4393.17 2207.27 c
-4395.38 2197.01 4399.81 2193.18 4409.67 2193.18 c
-4418.32 2193.18 4424.56 2196.4 4432.21 2204.65 c
-h
-4393 2216.13 m
-4387.55 2209.89 4383.52 2207.47 4378.68 2207.47 c
-4372.64 2207.47 4368 2212.91 4368 2220.96 c
-4368 2232.63 4376.61 2240.88 4393 2245.31 c
-h
-4434.62 2196 m
-f*
-4476.4 2289 m
-4437.7 2289 l
-4437.7 2283.95 l
-4446.55 2282.74 4449 2280.32 4449 2272.07 c
-4449 2212.9 l
-4449 2204.65 4446.74 2202.44 4437.7 2200.83 c
-4437.7 2196 l
-4486 2196 l
-4486 2200.83 l
-4478.95 2201.84 4477 2204.65 4477 2212.3 c
-4477 2266.03 l
-4477 2267.04 4479.87 2270.66 4482.18 2272.88 c
-4486.4 2276.1 4490.02 2278.42 4493.65 2278.42 c
-4501.5 2278.42 4505 2273.59 4505 2261 c
-4505 2212.3 l
-4505 2204.05 4502.68 2201.43 4494.85 2200.83 c
-4494.85 2196 l
-4541.95 2196 l
-4541.95 2200.83 l
-4534.9 2201.64 4533 2204.65 4533 2212.3 c
-4533 2266.03 l
-4533 2267.04 4535.73 2270.46 4537.92 2272.68 c
-4542.35 2276.1 4545.97 2278.42 4549.59 2278.42 c
-4557.24 2278.42 4560 2273.38 4560 2261 c
-4560 2212.3 l
-4560 2203.85 4557.85 2201.43 4550.4 2200.83 c
-4550.4 2196 l
-4598.3 2196 l
-4598.3 2201 l
-4590.45 2201.4 4588 2203.78 4588 2212.3 c
-4588 2262.81 l
-4588 2280.12 4577.43 2291.42 4561.07 2291.42 c
-4549.59 2291.42 4541.95 2286.73 4531.48 2273.68 c
-4525.44 2286.36 4518.4 2291.42 4505.72 2291.42 c
-4492.95 2291.42 4483.98 2285.91 4476.4 2273.68 c
-h
-4601.64 2196 m
-f*
-4679.9 2221.16 m
-4671.65 2211.29 4665.61 2207.18 4656.96 2207.18 c
-4649.31 2207.18 4643.27 2210.77 4639.25 2217.94 c
-4635.43 2224.54 4633.82 2231.56 4633.01 2246 c
-4683.73 2246 l
-4682.52 2262.36 4679.5 2271.43 4673.26 2279.12 c
-4666.82 2286.96 4657.36 2291.42 4646.09 2291.42 c
-4620.94 2291.42 4604.03 2271.4 4604.03 2241.88 c
-4604.03 2212.5 4620.53 2193.18 4645.49 2193.18 c
-4661.79 2193.18 4671.65 2199.42 4684.73 2218.34 c
-h
-4632 2253 m
-4632.61 2276.96 4636.23 2284.42 4646.09 2284.42 c
-4651.93 2284.42 4655.55 2281.38 4657.16 2275.49 c
-4658.17 2271.67 4658.57 2266.03 4658.97 2255.77 c
-4658.97 2253 l
-h
-4688.35 2196 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -4724 -2196]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-0.564706 g
-3968.15 1929.35 m
-3833.75 1966.55 l
-3929.75 2021.75 l
-3776.15 2031.35 l
-3818.15 2100.95 l
-3670.55 2080.55 l
-3653.75 2152.55 l
-3533.75 2106.95 l
-3458.15 2170.55 l
-3382.55 2106.95 l
-3262.55 2152.55 l
-3244.55 2080.55 l
-3095.75 2100.95 l
-3140.15 2031.35 l
-2986.55 2021.75 l
-3082.55 1966.55 l
-2946.95 1929.35 l
-3082.55 1894.55 l
-2986.55 1838.15 l
-3140.15 1829.75 l
-3095.75 1760.15 l
-3244.55 1779.35 l
-3262.55 1708.55 l
-3382.55 1752.95 l
-3458.15 1689.35 l
-3533.75 1752.95 l
-3653.75 1708.55 l
-3670.55 1779.35 l
-3818.15 1760.15 l
-3776.15 1829.75 l
-3929.75 1838.15 l
-3833.75 1894.55 l
-f*
-1 g
-3908.15 1989.35 m
-3773.75 2026.55 l
-3869.75 2081.75 l
-3716.15 2091.35 l
-3758.15 2160.95 l
-3610.55 2140.55 l
-3593.75 2212.55 l
-3473.75 2166.95 l
-3398.15 2230.55 l
-3322.55 2166.95 l
-3202.55 2212.55 l
-3184.55 2140.55 l
-3035.75 2160.95 l
-3080.15 2091.35 l
-2926.55 2081.75 l
-3022.55 2026.55 l
-2886.95 1989.35 l
-3022.55 1954.55 l
-2926.55 1898.15 l
-3080.15 1889.75 l
-3035.75 1820.15 l
-3184.55 1839.35 l
-3202.55 1768.55 l
-3322.55 1812.95 l
-3398.15 1749.35 l
-3473.75 1812.95 l
-3593.75 1768.55 l
-3610.55 1839.35 l
-3758.15 1820.15 l
-3716.15 1889.75 l
-3869.75 1898.15 l
-3773.75 1954.55 l
-f*
-0 g
-3908.15 1989.35 m
-3773.75 2026.55 l
-3869.75 2081.75 l
-3716.15 2091.35 l
-3758.15 2160.95 l
-3610.55 2140.55 l
-3593.75 2212.55 l
-3473.75 2166.95 l
-3398.15 2230.55 l
-3322.55 2166.95 l
-3202.55 2212.55 l
-3184.55 2140.55 l
-3035.75 2160.95 l
-3080.15 2091.35 l
-2926.55 2081.75 l
-3022.55 2026.55 l
-2886.95 1989.35 l
-3022.55 1954.55 l
-2926.55 1898.15 l
-3080.15 1889.75 l
-3035.75 1820.15 l
-3184.55 1839.35 l
-3202.55 1768.55 l
-3322.55 1812.95 l
-3398.15 1749.35 l
-3473.75 1812.95 l
-3593.75 1768.55 l
-3610.55 1839.35 l
-3758.15 1820.15 l
-3716.15 1889.75 l
-3869.75 1898.15 l
-3773.75 1954.55 l
-3908.15 1989.35 l
-3831.35 1989.35 l
-3722.15 1961.75 l
-3802.55 1914.95 l
-3682.55 1907.75 l
-3719.75 1844.15 l
-3596.15 1862.15 l
-3579.35 1794.95 l
-3470.15 1835.75 l
-3398.15 1775.75 l
-3326.15 1835.75 l
-3215.75 1794.95 l
-3200.15 1862.15 l
-3076.55 1844.15 l
-3114.95 1907.75 l
-2993.75 1914.95 l
-3074.15 1961.75 l
-2964.95 1989.35 l
-3074.15 2018.15 l
-2993.75 2066.15 l
-3114.95 2073.35 l
-3076.55 2135.75 l
-3200.15 2118.95 l
-3215.75 2186.15 l
-3326.15 2144.15 l
-3398.15 2204.15 l
-3470.15 2144.15 l
-3579.35 2186.15 l
-3596.15 2118.95 l
-3719.75 2135.75 l
-3682.55 2073.35 l
-3802.55 2066.15 l
-3722.15 2018.15 l
-3831.35 1989.35 l
-3908.15 1989.35 l
-f*
-0.2 i
-3220.08 2040.76 m
-3200.08 1966.52 l
-3197.52 1957.88 3194.48 1955.64 3184.08 1955 c
-3184.08 1951 l
-3234 1951 l
-3234 1955 l
-3224.72 1955.48 3222.48 1956.76 3222.48 1961.88 c
-3222.48 1963.64 3222.8 1965.4 3223.76 1969.08 c
-3223.92 1969.88 l
-3224.08 1970.68 l
-3243.76 2042.52 l
-3246.16 2050.84 3248.56 2053.08 3256.72 2054.04 c
-3256.72 2058 l
-3222.8 2058 l
-3173.2 1981.24 l
-3164.56 2058 l
-3129.2 2058 l
-3129.2 2054 l
-3139.28 2053.52 3140.72 2052.89 3140.72 2048.44 c
-3140.72 2046.2 3140.08 2043.32 3138.96 2039.16 c
-3121.52 1979.48 l
-3115.12 1958.68 3114 1956.92 3105.36 1955 c
-3105.36 1951 l
-3138.48 1951 l
-3138.48 1955 l
-3128.24 1956.28 3125.68 1958.2 3125.68 1964.76 c
-3125.68 1967.48 3126.48 1971.48 3128.72 1979.48 c
-3144.88 2038.52 l
-3155.6 1949.08 l
-3160.08 1949.08 l
-h
-3252.24 1951 m
-f*
-3321.44 1971.32 m
-3314.88 1962.52 3312.48 1959.76 3309.92 1959.76 c
-3308.64 1959.76 3308 1960.86 3308 1962.52 c
-3308 1966.52 3309.44 1973.08 3313.44 1986.2 c
-3324.8 2023.96 l
-3307.04 2022.84 l
-3304.16 2013.4 l
-3302.72 2021.56 3299.2 2025.08 3292.32 2025.08 c
-3272.64 2025.08 3249 1994.27 3249 1969.24 c
-3249 1957.08 3255.74 1948.92 3265.92 1948.92 c
-3275.68 1948.92 3283.04 1954.68 3292.16 1970.04 c
-3290.24 1963.48 3290 1961.56 3290 1959.32 c
-3290 1953.4 3294.76 1948.76 3300.64 1948.76 c
-3308.16 1948.76 3315.52 1955 3324.8 1968.92 c
-h
-3294.56 2018.2 m
-3298.08 2017.88 3300.56 2015 3300.56 2010.68 c
-3300.56 2001.08 3295.24 1983.32 3288.96 1972.28 c
-3284.64 1964.44 3279.84 1959.92 3275.52 1959.92 c
-3271.36 1959.92 3268 1963.75 3268 1968.92 c
-3268 1977.24 3273.42 1993.24 3280.16 2005.08 c
-3284.96 2013.56 3290.24 2018.52 3294.56 2018.2 c
-h
-3332 1951 m
-f*
-3366.56 2024.92 m
-3350.24 2022.36 3344 2021.4 3335.68 2020.44 c
-3335.68 2016 l
-3342.88 2015.69 3344.32 2015.07 3344.32 2012.12 c
-3344.32 2010.52 3343.04 2004.76 3340.8 1996.44 c
-3324.8 1934.36 l
-3321.76 1923.8 3320.48 1922.84 3312.8 1923 c
-3312.8 1918 l
-3352.64 1918 l
-3352.64 1923 l
-3344.64 1923.14 3342.24 1924.16 3342.24 1927.64 c
-3342.24 1929.88 3343.36 1934.68 3346.4 1945.88 c
-3347.52 1949.72 3347.52 1950.04 3348.16 1952.44 c
-3353.76 1949.56 3355.68 1948.92 3359.04 1948.92 c
-3380.8 1948.92 3403.36 1977.88 3403.36 2005.56 c
-3403.36 2017.4 3396.64 2025.08 3386.08 2025.08 c
-3376.96 2025.08 3369.92 2019.92 3360.48 2006.52 c
-h
-3377.12 2013.56 m
-3381.28 2013.24 3383.68 2009.56 3383.36 2004.44 c
-3382.72 1993.88 3377.6 1978.04 3371.84 1967.64 c
-3366.88 1959 3361.76 1953.92 3356.32 1953.92 c
-3352.8 1953.92 3350.08 1956.75 3350.08 1960.28 c
-3350.08 1963 3351.84 1969.56 3356.16 1984.12 c
-3359.68 1995.8 3361.12 1999.8 3363.52 2003.48 c
-3367.52 2009.72 3372.96 2013.88 3377.12 2013.56 c
-h
-3412 1951 m
-f*
-3447.56 2024.92 m
-3431.24 2022.36 3425 2021.4 3416.68 2020.44 c
-3416.68 2016 l
-3423.88 2015.69 3425.32 2015.07 3425.32 2012.12 c
-3425.32 2010.52 3424.04 2004.76 3421.8 1996.44 c
-3405.8 1934.36 l
-3402.76 1923.8 3401.48 1922.84 3393.8 1923 c
-3393.8 1918 l
-3433.64 1918 l
-3433.64 1923 l
-3425.64 1923.14 3423.24 1924.16 3423.24 1927.64 c
-3423.24 1929.88 3424.36 1934.68 3427.4 1945.88 c
-3428.52 1949.72 3428.52 1950.04 3429.16 1952.44 c
-3434.76 1949.56 3436.68 1948.92 3440.04 1948.92 c
-3461.8 1948.92 3484.36 1977.88 3484.36 2005.56 c
-3484.36 2017.4 3477.64 2025.08 3467.08 2025.08 c
-3457.96 2025.08 3450.92 2019.92 3441.48 2006.52 c
-h
-3458.12 2013.56 m
-3462.28 2013.24 3464.68 2009.56 3464.36 2004.44 c
-3463.72 1993.88 3458.6 1978.04 3452.84 1967.64 c
-3447.88 1959 3442.76 1953.92 3437.32 1953.92 c
-3433.8 1953.92 3431.08 1956.75 3431.08 1960.28 c
-3431.08 1963 3432.84 1969.56 3437.16 1984.12 c
-3440.68 1995.8 3442.12 1999.8 3444.52 2003.48 c
-3448.52 2009.72 3453.96 2013.88 3458.12 2013.56 c
-h
-3493 1951 m
-f*
-3526.56 1973.56 m
-3524.32 1970.36 l
-3520.16 1964.12 3516.48 1960.56 3514.08 1960.56 c
-3512.8 1960.56 3512 1961.77 3512 1963.16 c
-3512 1964.6 3512.62 1968.76 3513.12 1971.48 c
-3527.68 2024.92 l
-3519.22 2023 3508.26 2021.4 3496.04 2020.44 c
-3496.04 2016 l
-3497.44 2016 l
-3502.24 2016 3505.48 2014.44 3505.48 2011.48 c
-3505.48 2010.2 3504.71 2007.8 3503.68 2005.08 c
-3494.4 1970.68 l
-3493.12 1966.04 3493 1961.88 3493 1959.64 c
-3493 1953.56 3497.2 1949.56 3503.36 1949.56 c
-3512.96 1949.56 3518.88 1954.36 3530.08 1971.32 c
-h
-3522.88 2060.4 m
-3517.44 2060.4 3513 2055.46 3513 2050.04 c
-3513 2043.8 3517.26 2039.4 3523.04 2039.4 c
-3529.12 2039.4 3534 2043.86 3534 2049.56 c
-3534 2055.48 3529 2060.4 3522.88 2060.4 c
-h
-3536.48 1951 m
-f*
-3611.36 1972.6 m
-3604.96 1962.68 3602.88 1960.56 3600.16 1960.56 c
-3598.88 1960.56 3598 1961.63 3598 1963.16 c
-3598 1964.76 3598.94 1968.12 3601.92 1977.08 c
-3607.68 1994.52 l
-3610.24 2002.04 3612 2009.08 3612 2012.92 c
-3612 2020.76 3607.78 2025.08 3600.16 2025.08 c
-3594.24 2025.08 3588.48 2022.62 3584.16 2018.36 c
-3578.24 2012.76 3575.2 2008.92 3564.48 1993.08 c
-3574.72 2024.76 l
-3564.48 2022.52 3551.68 2020.92 3542.72 2020.6 c
-3542.72 2015.8 l
-3549.44 2015.65 3551.36 2014.92 3551.36 2012.12 c
-3551.36 2010.2 3549.12 2001.72 3544 1983.64 c
-3540.32 1970.68 3539.2 1966.52 3535.04 1951 c
-3554.4 1951 l
-3561.92 1978.68 3567.68 1992.6 3577.6 2005.56 c
-3580.8 2009.88 3585.76 2013.08 3588.64 2013.08 c
-3590.72 2013.08 3593 2011.63 3593 2010.04 c
-3593 2009.56 3592.54 2008.28 3591.84 2006.68 c
-3583.04 1980.12 l
-3580.48 1972.44 3579 1963.32 3579 1959.16 c
-3579 1953.08 3582.84 1949.56 3589.44 1949.56 c
-3599.04 1949.56 3605.6 1955 3614.88 1970.52 c
-h
-3624.96 1951 m
-f*
-3702.48 2020 m
-3684.72 2020 l
-3679.28 2023.58 3674.48 2025.08 3667.12 2025.08 c
-3647.44 2025.08 3631 2012.05 3631 1995.8 c
-3631 1987.64 3635.35 1981.88 3644.4 1978.2 c
-3631.28 1970.84 3629 1968.6 3629 1962.68 c
-3629 1957.56 3631.89 1954.52 3638.96 1952.12 c
-3629.04 1949.72 3625.84 1948.44 3622 1945.4 c
-3619.44 1943.16 3618 1939.32 3618 1935.48 c
-3618 1925.08 3629.56 1919 3647.76 1919 c
-3670.32 1919 3686 1928.72 3686 1942.52 c
-3686 1952.28 3679.6 1957.56 3662.16 1962.52 c
-3653.68 1964.92 l
-3648.56 1966.36 3645 1968.6 3645 1971 c
-3645 1973.56 3647.68 1976.28 3650 1976.28 c
-3650.8 1976.28 3651.92 1976.24 3653.2 1976.12 c
-3654.96 1975.64 3656.24 1975 3658.16 1975 c
-3665.2 1975 3672.4 1977.09 3678.48 1980.92 c
-3687.76 1986.2 3693 1994.36 3693 2003.96 c
-3693 2006.64 3692.59 2008.32 3691.76 2011 c
-3702.48 2011 l
-h
-3644.4 1950.04 m
-3646.32 1949.88 3658.48 1945.72 3662 1944.12 c
-3666.48 1941.88 3669 1939.16 3669 1935 c
-3669 1927.96 3661.8 1924 3649.36 1924 c
-3638.96 1924 3632 1929.1 3632 1936.44 c
-3632 1939.48 3633.32 1942.2 3636.24 1945.24 c
-3638.32 1947.32 3643.12 1950.2 3644.4 1950.04 c
-h
-3666.8 2020.08 m
-3670.96 2020.08 3674 2016.19 3674 2010.52 c
-3674 2005.08 3672.08 1997.4 3669.36 1991.48 c
-3666 1984.12 3661.84 1980 3656.88 1980 c
-3652.56 1980 3650 1983.52 3650 1989.88 c
-3650 1996.28 3652.79 2006.04 3656.24 2012.12 c
-3659.28 2017.4 3662.64 2020.08 3666.8 2020.08 c
-h
-3706 1951 m
-f*
-1 i
-16 w
-3681.35 1641.35 m
-3749.75 1571.75 3842.15 1533.35 3938.15 1533.35 c
-4139.75 1533.35 4304.15 1702.55 4304.15 1911.35 c
-4304.15 1926.95 4304.15 1942.55 4301.75 1956.95 c
-S
-3759.35 1642.55 m
-3700.55 1625.75 l
-3668.15 1572.95 l
-3603.35 1756.55 l
-f*
-4449.35 3286.55 m
-4382.15 3365.75 4295.75 3410.15 4204.55 3410.15 c
-4095.35 3410.15 3990.95 3345.35 3922.55 3233.75 c
-S
-3892.55 3297.35 m
-3935.75 3251.75 l
-3996.95 3248.15 l
-3867.35 3104.15 l
-f*
-3825.35 2710.55 m
-3833.75 2628.95 3864.95 2553.35 3911.75 2494.55 c
-S
-3844.55 2488.55 m
-3899.75 2516.15 l
-3921.35 2574.95 l
-4019.75 2406.95 l
-f*
-2993.75 3830.15 m
-2837.75 3830.15 2690.15 3794.15 2579.75 3729.35 c
-S
-2595.35 3800.15 m
-2609.75 3740.15 l
-2661.35 3706.55 l
-2476.55 3647.75 l
-f*
-4568.15 3344.15 m
-4443.35 3527.75 4288.55 3671.75 4116.95 3762.95 c
-S
-4185.35 3790.55 m
-4139.75 3748.55 l
-4134.95 3687.35 l
-3993.35 3819.35 l
-f*
-0.279998 i
-550 3530.52 m
-550 3388 l
-550 3372.32 546.055 3368.96 524.919 3367 c
-524.919 3360 l
-617.878 3360 l
-617.878 3367 l
-596.039 3369.8 593 3372.88 593 3392.76 c
-593 3516.52 l
-593 3536.68 597.24 3540.88 617.878 3542.28 c
-617.878 3549 l
-547.319 3549 l
-491.319 3417.12 l
-435.319 3549 l
-364.48 3549 l
-364.48 3542.28 l
-384.92 3540.6 389 3536.96 389 3522.4 c
-389 3389.4 l
-389 3372.6 385.417 3369.24 363.92 3367 c
-363.92 3360 l
-429.439 3360 l
-429.439 3367 l
-406.479 3368.68 400.999 3374 400.999 3394.72 c
-400.999 3526.32 l
-471.719 3360 l
-479.279 3360 l
-h
-624.318 3360 m
-f*
-682 3489 m
-628.48 3489 l
-628.48 3482.36 l
-640.8 3479.84 643 3477.32 643 3465.84 c
-643 3383.52 l
-643 3372.04 641.082 3369.8 628.48 3366.72 c
-628.48 3360 l
-695.4 3360 l
-695.4 3366.72 l
-685.6 3368.12 682 3372.04 682 3382.68 c
-h
-662.92 3553.2 m
-650.32 3553.2 641 3543.8 641 3531.64 c
-641 3519.32 650.154 3510.2 662.36 3510.2 c
-674.68 3510.2 684 3519.39 684 3531.64 c
-684 3543.68 674.569 3553.2 662.92 3553.2 c
-h
-701.839 3360 m
-f*
-797.12 3451.28 m
-797.12 3491.8 l
-791.04 3491.8 l
-789.36 3487.66 787.68 3486.2 784.04 3486.2 c
-782.36 3486.2 779.84 3486.78 775.36 3488.24 c
-766.4 3491.32 759.96 3492.36 753.52 3492.36 c
-728.04 3492.36 710 3475.03 710 3451.56 c
-710 3433.08 721.353 3420.2 749.32 3408.16 c
-768.64 3399.76 776 3392.76 776 3383.8 c
-776 3372.88 767.68 3365.08 755.2 3365.08 c
-735.6 3365.08 722.72 3377.86 716.841 3402.56 c
-709.001 3402.56 l
-709.001 3356.36 l
-716.001 3356.36 l
-719.081 3362.24 720.761 3364.2 723.281 3364.2 c
-724.681 3364.2 726.921 3363.64 729.721 3362.52 c
-737.841 3359.16 752.121 3356.08 759.96 3356.08 c
-785.44 3356.08 803.001 3373.44 803.001 3398.64 c
-803.001 3418.52 792.383 3430.84 764.44 3442.32 c
-745.401 3450.44 738.001 3457.44 738.001 3466.96 c
-738.001 3476.2 745.654 3483.36 756.041 3483.36 c
-763.601 3483.36 770.881 3480.22 777.041 3474.24 c
-782.92 3468.64 786 3463.32 790.2 3451.28 c
-h
-810.919 3360 m
-f*
-906.12 3451.28 m
-906.12 3491.8 l
-900.04 3491.8 l
-898.36 3487.66 896.68 3486.2 893.04 3486.2 c
-891.36 3486.2 888.84 3486.78 884.36 3488.24 c
-875.4 3491.32 868.96 3492.36 862.52 3492.36 c
-837.04 3492.36 819 3475.03 819 3451.56 c
-819 3433.08 830.353 3420.2 858.32 3408.16 c
-877.64 3399.76 885 3392.76 885 3383.8 c
-885 3372.88 876.68 3365.08 864.2 3365.08 c
-844.6 3365.08 831.72 3377.86 825.841 3402.56 c
-818.001 3402.56 l
-818.001 3356.36 l
-825.001 3356.36 l
-828.081 3362.24 829.761 3364.2 832.281 3364.2 c
-833.681 3364.2 835.921 3363.64 838.721 3362.52 c
-846.841 3359.16 861.121 3356.08 868.96 3356.08 c
-894.44 3356.08 912.001 3373.44 912.001 3398.64 c
-912.001 3418.52 901.383 3430.84 873.44 3442.32 c
-854.401 3450.44 847.001 3457.44 847.001 3466.96 c
-847.001 3476.2 854.654 3483.36 865.041 3483.36 c
-872.601 3483.36 879.881 3480.22 886.041 3474.24 c
-891.92 3468.64 895 3463.32 899.2 3451.28 c
-h
-919.919 3360 m
-f*
-978 3489 m
-924.48 3489 l
-924.48 3482.36 l
-936.8 3479.84 939 3477.32 939 3465.84 c
-939 3383.52 l
-939 3372.04 937.082 3369.8 924.48 3366.72 c
-924.48 3360 l
-991.4 3360 l
-991.4 3366.72 l
-981.6 3368.12 978 3372.04 978 3382.68 c
-h
-958.92 3553.2 m
-946.32 3553.2 937 3543.8 937 3531.64 c
-937 3519.32 946.154 3510.2 958.36 3510.2 c
-970.68 3510.2 980 3519.39 980 3531.64 c
-980 3543.68 970.569 3553.2 958.92 3553.2 c
-h
-997.839 3360 m
-f*
-1056.72 3489 m
-1002.88 3489 l
-1002.88 3482.36 l
-1015.2 3480.4 1018 3477.6 1018 3465.84 c
-1018 3383.52 l
-1018 3371.76 1015.72 3369.24 1002.88 3366.72 c
-1002.88 3360 l
-1070.36 3360 l
-1070.36 3366.72 l
-1060 3368.12 1057 3372.32 1057 3382.68 c
-1057 3457.44 l
-1057 3458.56 1058.81 3461.36 1061.4 3464.16 c
-1067.56 3470.32 1074.28 3474.36 1081 3474.36 c
-1090.52 3474.36 1095 3466.58 1095 3450.44 c
-1095 3382.68 l
-1095 3372.32 1091.44 3367.84 1082.12 3366.72 c
-1082.12 3360 l
-1147.92 3360 l
-1147.92 3366.72 l
-1137 3367.56 1134 3370.92 1134 3382.68 c
-1134 3452.96 l
-1134 3477.04 1119.24 3492.36 1096.4 3492.36 c
-1079.75 3492.36 1066.99 3484.55 1056.72 3468.08 c
-h
-1152.68 3360 m
-f*
-1287.96 3471 m
-1287.96 3486 l
-1251.56 3486 l
-1239.24 3490.68 1231.4 3492.36 1220.2 3492.36 c
-1186.88 3492.36 1164 3473.91 1164 3447.36 c
-1164 3437.84 1167.15 3428.6 1173.44 3420.76 c
-1179.6 3414.04 1184.92 3410.4 1198.08 3404.8 c
-1175.96 3397.52 1165.4 3386.6 1165.4 3372.04 c
-1165.4 3360.56 1170.3 3355.52 1187.72 3349.08 c
-1170.08 3346.56 1161 3339.56 1161 3328.08 c
-1161 3311.84 1181.94 3302 1217.12 3302 c
-1263.88 3302 1288 3316.67 1288 3344.6 c
-1288 3366.16 1270.73 3379 1242.32 3379 c
-1224.12 3379 l
-1201.72 3379 1196.12 3380.97 1196.12 3388.84 c
-1196.12 3397.24 1204.24 3403.12 1215.16 3403.12 c
-1240.64 3403.12 1241.48 3403.12 1250.72 3407.04 c
-1267.8 3414.04 1277 3426.36 1277 3444 c
-1277 3455.02 1273.48 3463.28 1265.28 3471 c
-h
-1243.72 3345 m
-1258.84 3345 1266 3340.66 1266 3331.44 c
-1266 3318.56 1250.64 3311 1223 3311 c
-1198.36 3311 1186 3317.53 1186 3330.04 c
-1186 3335.75 1187.86 3338.74 1195.28 3345 c
-h
-1219.92 3483.36 m
-1233.36 3483.36 1239 3473.11 1239 3447.36 c
-1239 3421.04 1233.87 3410.96 1220.2 3410.96 c
-1206.76 3410.96 1202 3421.04 1202 3447.08 c
-1202 3473.4 1206.96 3483.36 1219.92 3483.36 c
-h
-1293 3360 m
-f*
-717.639 3087.56 m
-709.519 3087.56 l
-699.999 3065.72 694.679 3057.04 684.879 3048.08 c
-673.399 3037.72 657.719 3033 635.879 3033 c
-618.8 3033 614 3036.57 614 3048.36 c
-614 3180.52 l
-614 3201.52 617.886 3205.16 642.039 3206.28 c
-642.039 3213 l
-544.32 3213 l
-544.32 3206 l
-563.36 3204.9 568 3200.48 568 3186.4 c
-568 3050.88 l
-568 3036.6 564.42 3033.52 544.32 3031 c
-544.32 3024 l
-706.159 3024 l
-h
-725.759 3024 m
-f*
-783 3153 m
-729.48 3153 l
-729.48 3146.36 l
-741.8 3143.84 744 3141.32 744 3129.84 c
-744 3047.52 l
-744 3036.04 742.082 3033.8 729.48 3030.72 c
-729.48 3024 l
-796.4 3024 l
-796.4 3030.72 l
-786.6 3032.12 783 3036.04 783 3046.68 c
-h
-763.92 3217.2 m
-751.32 3217.2 742 3207.8 742 3195.64 c
-742 3183.32 751.154 3174.2 763.36 3174.2 c
-775.68 3174.2 785 3183.39 785 3195.64 c
-785 3207.68 775.569 3217.2 763.92 3217.2 c
-h
-802.839 3024 m
-f*
-863.72 3153 m
-809.88 3153 l
-809.88 3146.36 l
-822.2 3144.4 825 3141.6 825 3129.84 c
-825 3047.52 l
-825 3035.76 822.717 3033.24 809.88 3030.72 c
-809.88 3024 l
-877.359 3024 l
-877.359 3030.72 l
-867 3032.12 864 3036.32 864 3046.68 c
-864 3121.44 l
-864 3122.56 865.811 3125.36 868.4 3128.16 c
-874.56 3134.32 881.28 3138.36 888 3138.36 c
-897.52 3138.36 902 3130.58 902 3114.44 c
-902 3046.68 l
-902 3036.32 898.437 3031.84 889.12 3030.72 c
-889.12 3024 l
-954.919 3024 l
-954.919 3030.72 l
-943.999 3031.56 941 3034.92 941 3046.68 c
-941 3116.96 l
-941 3141.04 926.238 3156.36 903.399 3156.36 c
-886.75 3156.36 873.987 3148.55 863.72 3132.08 c
-h
-959.679 3024 m
-f*
-1102.64 3153.08 m
-1042.72 3153.08 l
-1042.72 3146.64 l
-1049.44 3145.52 l
-1056.44 3144.68 1059.24 3142.72 1059.24 3139.08 c
-1059.24 3136.56 1056.44 3131.52 1053.36 3128.44 c
-1018 3092.6 l
-1018 3213 l
-965.16 3213 l
-965.16 3206.56 l
-974.68 3205.72 979 3200.96 979 3190.32 c
-979 3047.52 l
-979 3036.6 974.675 3031.56 965.16 3030.72 c
-965.16 3024 l
-1032.08 3024 l
-1032.08 3030.72 l
-1018.92 3032.68 1018 3034.36 1018 3047.52 c
-1018 3079.44 l
-1023.96 3086.16 l
-1050.56 3048.64 l
-1055.6 3041.64 1057.28 3038.28 1057.28 3036.04 c
-1057.28 3032.68 1053.36 3031 1045.52 3030.72 c
-1045.52 3024 l
-1111.04 3024 l
-1111.04 3031 l
-1107.96 3031 1106.56 3031.78 1104.04 3034.92 c
-1049.72 3109.96 l
-1077.72 3139.36 1085 3144.4 1102.64 3146.64 c
-h
-1114.68 3024 m
-f*
-0.24 i
-4919.04 4974 m
-4919.04 5025.84 l
-4911.96 5025.84 l
-4910.28 5019.55 4908.6 5017.92 4904.28 5017.92 c
-4902.12 5017.92 4899.24 5018.64 4894.2 5020.32 c
-4883.16 5024.4 4875.48 5025.6 4866.12 5025.6 c
-4833.48 5025.6 4814 5007.21 4814 4976.88 c
-4814 4970.88 4814.8 4965.84 4816.2 4961.04 c
-4821.24 4948.32 4834.2 4937.04 4854.6 4927.2 c
-4870.68 4919.52 l
-4891.8 4909.44 4897 4903.2 4897 4890.48 c
-4897 4873.92 4885.46 4863.44 4867.32 4863.44 c
-4853.4 4863.44 4841.88 4869.17 4832.76 4880.64 c
-4825.8 4889.52 4822.44 4897.68 4818.36 4914.72 c
-4811.4 4914.72 l
-4811.4 4855.44 l
-4818.36 4855.44 l
-4819.8 4861.68 4821.72 4863.6 4825.56 4863.6 c
-4827.48 4863.6 4830.12 4862.88 4835.4 4861.2 c
-4847.16 4857.12 4856.04 4855.44 4866.6 4855.44 c
-4902.12 4855.44 4926 4875.84 4926 4906.08 c
-4926 4924.08 4915.25 4942.08 4899.72 4949.76 c
-4864.44 4967.28 l
-4845 4976.88 4840 4982.64 4840 4994.4 c
-4840 5009.28 4849.97 5017.6 4866.12 5017.6 c
-4876.92 5017.6 4887 5013.31 4895.64 5004.96 c
-4903.8 4996.56 4907.64 4989.6 4912.44 4974 c
-h
-4936.44 4860 m
-f*
-4998.96 4973.88 m
-4967.28 4973.88 4944 4949.01 4944 4914.72 c
-4944 4881.36 4967.04 4856.64 4998 4856.64 c
-5029.44 4856.64 5052 4881.36 5052 4914.96 c
-5052 4948.32 5029.06 4973.88 4998.96 4973.88 c
-h
-4998.24 4965.88 m
-5012.4 4965.88 5017 4953.21 5017 4912.32 c
-5017 4876.56 5012.19 4864.64 4998.24 4864.64 c
-4984.32 4864.64 4979 4876.73 4979 4911.12 c
-4979 4937.28 4980.27 4948.08 4984.08 4956.24 c
-4986.72 4962.72 4991.76 4965.88 4998.24 4965.88 c
-h
-5058 4860 m
-f*
-5140.24 4856.88 m
-5150.59 4860.48 5156.36 4861.44 5172 4863.12 c
-5186.88 4864.8 l
-5186.88 4871 l
-5176.32 4871.46 5174 4874.42 5174 4884.24 c
-5174 4971 l
-5125.2 4971 l
-5125.2 4964.88 l
-5137.2 4963.92 5140 4961.04 5140 4950.72 c
-5140 4882.8 l
-5132.11 4874.88 5127.33 4872.64 5120.4 4872.64 c
-5110.56 4872.64 5107 4877.33 5107 4889.28 c
-5107 4971 l
-5061.84 4971 l
-5061.84 4964.88 l
-5071.68 4962.96 5073 4960.8 5073 4950.72 c
-5073 4890.24 l
-5073 4869.12 5085.23 4856.64 5105.52 4856.64 c
-5117.97 4856.64 5126.35 4860.48 5140.24 4872.48 c
-h
-5191.44 4860 m
-f*
-5244.04 4971 m
-5197.96 4971 l
-5197.96 4964.88 l
-5208.28 4963.44 5211 4960.32 5211 4950.72 c
-5211 4880.16 l
-5211 4870.32 5208.59 4867.68 5197.96 4865.76 c
-5197.96 4860 l
-5261.8 4860 l
-5261.8 4865.76 l
-5247.16 4866.72 5245 4869.84 5245 4884.72 c
-5245 4930.08 l
-5245 4942.56 5251.39 4952.88 5258.92 4952.88 c
-5260.84 4952.88 5263 4951.2 5265.64 4947.36 c
-5270.2 4940.88 5273.8 4938.72 5280.04 4938.72 c
-5288.92 4938.72 5295.16 4945.44 5295.16 4954.56 c
-5295.16 4965.6 5287 4973.88 5275.72 4973.88 c
-5263.99 4973.88 5255.07 4967.54 5244.04 4950.96 c
-h
-5297.56 4860 m
-f*
-5396.88 4886.16 m
-5388 4876.08 5381.76 4872.64 5371.92 4872.64 c
-5351.04 4872.64 5338 4893.55 5338 4926.24 c
-5338 4950.96 5345.62 4965.88 5358 4965.88 c
-5361.84 4965.88 5365.44 4964.04 5366.88 4961.52 c
-5368.08 4959.36 5368.08 4959.36 5368.08 4949.28 c
-5368.32 4937.28 5372.4 4932 5381.52 4932 c
-5391.6 4932 5397.84 4937.76 5397.84 4947.12 c
-5397.84 4962 5381.76 4973.88 5360.88 4973.88 c
-5328 4973.88 5304 4948.53 5304 4913.52 c
-5304 4880.16 5325.36 4856.64 5355.36 4856.64 c
-5373.84 4856.64 5387.28 4864.08 5401.2 4881.84 c
-h
-5404.56 4860 m
-f*
-5499.48 4890 m
-5489.64 4878.24 5482.44 4873.64 5472.12 4873.64 c
-5463 4873.64 5455.8 4877.81 5451 4886.16 c
-5446.44 4893.89 5444.52 4902.1 5443.56 4919 c
-5504.04 4919 l
-5502.6 4938.82 5499 4949.81 5491.56 4959.12 c
-5483.88 4968.48 5472.6 4973.88 5459.16 4973.88 c
-5429.16 4973.88 5409 4949.97 5409 4914.72 c
-5409 4879.68 5428.68 4856.64 5458.44 4856.64 c
-5477.88 4856.64 5489.64 4864.08 5505.24 4886.64 c
-h
-5442.36 4928 m
-5443.08 4956.56 5447.4 4965.88 5459.16 4965.88 c
-5466.12 4965.88 5470.44 4962.11 5472.36 4954.8 c
-5473.56 4950.24 5474.04 4943.52 5474.52 4931.28 c
-5474.52 4928 l
-h
-5509.56 4860 m
-f*
-1 i
-4803.35 4811.75 705.6 21.5999 re
-f
-32 w
-3701.75 4956.95 1041.6 457.2 re
-Y
-3701.75 5392.55 m
-4733.75 4979.75 l
-S
-0 0 6120 7920 re
-Y
-3791.75 5439.35 m
-3735.35 5379.35 l
-3735.35 5296.55 l
-3533.75 5459.75 l
-f*
-0.24 i
-449 981.84 m
-449 971.28 443.084 966.48 429.36 966 c
-429.36 960 l
-505.2 960 l
-530.88 960 554.88 969.12 570 984.96 c
-583.92 999.12 592 1019.76 592 1042.8 c
-592 1092.24 558.49 1122 502.56 1122 c
-429.36 1122 l
-429.36 1116.24 l
-444.72 1114.8 449 1111.2 449 1100.16 c
-h
-488 1105.68 m
-488 1111.2 492.854 1114 502.32 1114 c
-519.36 1114 531.36 1106.35 539.76 1090.08 c
-546.48 1077.36 550 1059.84 550 1039.2 c
-550 1016.88 545.379 996.48 537.84 985.68 c
-529.68 974.16 517.92 968 502.08 968 c
-491.28 968 488 971.21 488 982.32 c
-h
-599.28 960 m
-f*
-696.48 990 m
-686.64 978.24 679.44 973.64 669.12 973.64 c
-660 973.64 652.8 977.813 648 986.16 c
-643.44 993.887 641.52 1002.1 640.56 1019 c
-701.04 1019 l
-699.6 1038.82 696 1049.81 688.56 1059.12 c
-680.88 1068.48 669.6 1073.88 656.16 1073.88 c
-626.16 1073.88 606 1049.97 606 1014.72 c
-606 979.68 625.68 956.64 655.44 956.64 c
-674.88 956.64 686.64 964.08 702.24 986.64 c
-h
-639.36 1028 m
-640.08 1056.56 644.4 1065.88 656.16 1065.88 c
-663.12 1065.88 667.44 1062.11 669.36 1054.8 c
-670.56 1050.24 671.04 1043.52 671.52 1031.28 c
-671.52 1028 l
-h
-706.56 960 m
-f*
-788.96 1038.24 m
-788.96 1073.4 l
-783.32 1073.4 l
-781.88 1069.53 780.44 1068.6 777.32 1068.6 c
-775.88 1068.6 773.72 1068.98 769.88 1069.92 c
-762.2 1072.56 756.68 1073.88 751.16 1073.88 c
-729.32 1073.88 713 1058.85 713 1038.48 c
-713 1022.64 722.979 1011.6 747.56 1001.28 c
-764.12 994.08 771 988.08 771 980.4 c
-771 971.04 763.64 964.64 752.6 964.64 c
-735.8 964.64 724.76 975.494 719.72 996.48 c
-713 996.48 l
-713 956.88 l
-719 956.88 l
-721.64 961.92 723.08 963.6 725.24 963.6 c
-726.44 963.6 728.36 963.12 730.76 962.16 c
-737.719 959.28 749.959 956.64 756.679 956.64 c
-778.52 956.64 794 971.52 794 993.12 c
-794 1010.16 784.78 1020.72 760.52 1030.56 c
-744.199 1037.52 737 1043.52 737 1051.68 c
-737 1059.6 743.923 1065.88 753.32 1065.88 c
-759.8 1065.88 766.04 1063.14 771.32 1057.92 c
-776.36 1053.12 779 1048.56 782.6 1038.24 c
-h
-800.36 960 m
-f*
-873.2 1071 m
-851 1071 l
-851 1111.2 l
-844.64 1111.2 l
-830 1090.56 820.4 1079.76 804.8 1066.56 c
-804.8 1060 l
-817 1060 l
-817 982.32 l
-817 966.72 827.427 957.12 844.16 957.12 c
-860.24 957.12 869.84 964.32 879.68 984 c
-873.68 986.64 l
-868.88 977.52 865.04 974.119 860 974.119 c
-853.28 974.119 851 978.211 851 987.84 c
-851 1060 l
-873.2 1060 l
-h
-879.92 960 m
-f*
-929 1071 m
-882.84 1071 l
-882.84 1064.88 l
-893.4 1062.72 895 1060.56 895 1050.72 c
-895 980.16 l
-895 970.32 893.394 968.4 882.84 965.76 c
-882.84 960 l
-940.2 960 l
-940.2 965.76 l
-931.8 966.96 929 970.32 929 979.44 c
-h
-912.36 1125.6 m
-901.56 1125.6 894 1117.54 894 1107.12 c
-894 1096.56 901.663 1088.6 911.88 1088.6 c
-922.44 1088.6 931 1096.54 931 1107.12 c
-931 1117.44 922.661 1125.6 912.36 1125.6 c
-h
-945.72 960 m
-f*
-997.76 1071 m
-952.04 1071 l
-952.04 1064.88 l
-962.6 1063.2 964 1060.8 964 1050.72 c
-964 980.16 l
-964 970.08 962.195 967.92 952.04 965.76 c
-952.04 960 l
-1009.88 960 l
-1009.88 965.76 l
-1001 966.96 998 970.56 998 979.44 c
-998 1043.52 l
-998 1044.48 999.729 1046.88 1002.2 1049.28 c
-1007.48 1054.56 1013.24 1057.88 1019 1057.88 c
-1027.16 1057.88 1031 1051.26 1031 1037.52 c
-1031 979.44 l
-1031 970.56 1027.95 966.72 1019.96 965.76 c
-1019.96 960 l
-1076.36 960 l
-1076.36 965.76 l
-1067 966.48 1065 969.36 1065 979.44 c
-1065 1039.68 l
-1065 1060.32 1052.12 1073.88 1032.2 1073.88 c
-1017.75 1073.88 1006.67 1067.04 997.76 1052.64 c
-h
-1080.44 960 m
-f*
-1193.52 975.36 m
-1191.12 972.96 l
-1190.4 972.24 1189.68 972 1188.48 972 c
-1185.12 972 1184 973.92 1184 978 c
-1184 1040.64 l
-1184 1061.04 1165.54 1073.88 1135.92 1073.88 c
-1108.8 1073.88 1090.56 1061.49 1090.56 1043.28 c
-1090.56 1033.2 1096.32 1027.44 1106.16 1027.44 c
-1115.76 1027.44 1122.48 1033.2 1122.48 1041.36 c
-1122.48 1044.72 1121.28 1047.84 1118.16 1051.68 c
-1116 1054.08 1115.28 1055.52 1115.28 1056.96 c
-1115.28 1062 1121.76 1065.88 1130.4 1065.88 c
-1144.56 1065.88 1151 1059.39 1151 1044.72 c
-1151 1027.2 l
-1122.67 1018.56 1111.28 1014.24 1102.08 1008.24 c
-1091.28 1001.04 1086 992.64 1086 982.08 c
-1086 967.44 1097.04 956.64 1112.4 956.64 c
-1126.32 956.64 1137.36 961.44 1150.56 973.44 c
-1153.2 961.2 1158.48 956.64 1170.24 956.64 c
-1180.56 956.64 1188 960.48 1197.12 970.321 c
-h
-1150 984 m
-1143.64 976.561 1138.93 973.681 1133.28 973.681 c
-1126.08 973.681 1121 980.161 1121 989.761 c
-1121 1003.68 1130.98 1013.52 1150 1018.8 c
-h
-1200 960 m
-f*
-1273.2 1071 m
-1251 1071 l
-1251 1111.2 l
-1244.64 1111.2 l
-1230 1090.56 1220.4 1079.76 1204.8 1066.56 c
-1204.8 1060 l
-1217 1060 l
-1217 982.32 l
-1217 966.72 1227.43 957.12 1244.16 957.12 c
-1260.24 957.12 1269.84 964.32 1279.68 984 c
-1273.68 986.64 l
-1268.88 977.52 1265.04 974.119 1260 974.119 c
-1253.28 974.119 1251 978.211 1251 987.84 c
-1251 1060 l
-1273.2 1060 l
-h
-1279.92 960 m
-f*
-1330 1071 m
-1283.84 1071 l
-1283.84 1064.88 l
-1294.4 1062.72 1296 1060.56 1296 1050.72 c
-1296 980.16 l
-1296 970.32 1294.39 968.4 1283.84 965.76 c
-1283.84 960 l
-1341.2 960 l
-1341.2 965.76 l
-1332.8 966.96 1330 970.32 1330 979.44 c
-h
-1313.36 1125.6 m
-1302.56 1125.6 1295 1117.54 1295 1107.12 c
-1295 1096.56 1302.66 1088.6 1312.88 1088.6 c
-1323.44 1088.6 1332 1096.54 1332 1107.12 c
-1332 1117.44 1323.66 1125.6 1313.36 1125.6 c
-h
-1346.72 960 m
-f*
-1406.96 1073.88 m
-1375.28 1073.88 1352 1049.01 1352 1014.72 c
-1352 981.36 1375.04 956.64 1406 956.64 c
-1437.44 956.64 1460 981.36 1460 1014.96 c
-1460 1048.32 1437.06 1073.88 1406.96 1073.88 c
-h
-1406.24 1065.88 m
-1420.4 1065.88 1425 1053.21 1425 1012.32 c
-1425 976.56 1420.19 964.64 1406.24 964.64 c
-1392.32 964.64 1387 976.734 1387 1011.12 c
-1387 1037.28 1388.27 1048.08 1392.08 1056.24 c
-1394.72 1062.72 1399.76 1065.88 1406.24 1065.88 c
-h
-1466 960 m
-f*
-1516.76 1071 m
-1471.04 1071 l
-1471.04 1064.88 l
-1481.6 1063.2 1483 1060.8 1483 1050.72 c
-1483 980.16 l
-1483 970.08 1481.19 967.92 1471.04 965.76 c
-1471.04 960 l
-1528.88 960 l
-1528.88 965.76 l
-1520 966.96 1517 970.56 1517 979.44 c
-1517 1043.52 l
-1517 1044.48 1518.73 1046.88 1521.2 1049.28 c
-1526.48 1054.56 1532.24 1057.88 1538 1057.88 c
-1546.16 1057.88 1550 1051.26 1550 1037.52 c
-1550 979.44 l
-1550 970.56 1546.95 966.72 1538.96 965.76 c
-1538.96 960 l
-1595.36 960 l
-1595.36 965.76 l
-1586 966.48 1584 969.36 1584 979.44 c
-1584 1039.68 l
-1584 1060.32 1571.12 1073.88 1551.2 1073.88 c
-1536.75 1073.88 1525.67 1067.04 1516.76 1052.64 c
-h
-1599.44 960 m
-f*
-1 i
-425.75 911.751 1172.4 21.5999 re
-f
-1133.75 1190.15 669.6 772.8 re
-Y
-1133.75 1199.75 m
-1793.75 1962.95 l
-S
-0 0 6120 7920 re
-Y
-1809.35 1862.15 m
-1772.15 1936.55 l
-1691.75 1962.95 l
-1913.75 2099.75 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/fsconvert.eps b/ast-5.3-1/sun211_figures/fsconvert.eps
deleted file mode 100644
index cd0d973..0000000
--- a/ast-5.3-1/sun211_figures/fsconvert.eps
+++ /dev/null
@@ -1,1748 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 95 389 528 576
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/23 14:34:13
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5273.75 5475.35 m
-5273.75 5600.15 5172.95 5700.95 5048.15 5700.95 c
-1238.15 5700.95 l
-1113.35 5700.95 1012.55 5600.15 1012.55 5475.35 c
-1012.55 4125.35 l
-1012.55 4000.55 1113.35 3899.75 1238.15 3899.75 c
-5048.15 3899.75 l
-5172.95 3899.75 5273.75 4000.55 5273.75 4125.35 c
-f*
-1 g
-5208.95 5531.75 m
-5208.95 5655.35 5109.35 5754.95 4984.55 5754.95 c
-1182.95 5754.95 l
-1058.15 5754.95 958.55 5655.35 958.55 5531.75 c
-958.55 4187.75 l
-958.55 4064.15 1058.15 3964.55 1182.95 3964.55 c
-4984.55 3964.55 l
-5109.35 3964.55 5208.95 4064.15 5208.95 4187.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5208.95 5531.75 m
-5208.95 5655.35 5109.35 5754.95 4984.55 5754.95 c
-1182.95 5754.95 l
-1058.15 5754.95 958.55 5655.35 958.55 5531.75 c
-958.55 4187.75 l
-958.55 4064.15 1058.15 3964.55 1182.95 3964.55 c
-4984.55 3964.55 l
-5109.35 3964.55 5208.95 4064.15 5208.95 4187.75 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1395.35 5256.95 l
-1283.75 5256.95 1192.55 5165.75 1192.55 5055.35 c
-1192.55 4917.35 l
-1192.55 4806.95 1283.75 4715.75 1395.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1342.55 5306.15 l
-1232.15 5306.15 1143.35 5218.55 1143.35 5111.75 c
-1143.35 4979.75 l
-1143.35 4872.95 1232.15 4785.35 1342.55 4785.35 c
-1994.15 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-f*
-16 w
-0 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1342.55 5306.15 l
-1232.15 5306.15 1143.35 5218.55 1143.35 5111.75 c
-1143.35 4979.75 l
-1143.35 4872.95 1232.15 4785.35 1342.55 4785.35 c
-1994.15 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-h
-S
-0.201248 i
-1339.16 5171.59 m
-1339.16 5215.22 l
-1333.37 5215.22 l
-1331.96 5209.82 1330.55 5208.42 1326.93 5208.42 c
-1325.12 5208.42 1322.7 5209.03 1318.47 5210.43 c
-1309.22 5213.86 1302.78 5215.02 1294.93 5215.02 c
-1267.56 5215.02 1251 5199.54 1251 5174.01 c
-1251 5168.98 1251.75 5164.75 1253.07 5160.73 c
-1257.29 5150.06 1268.16 5140.6 1285.27 5132.35 c
-1298.75 5125.91 l
-1316.46 5117.46 1321 5112.22 1321 5101.56 c
-1321 5087.67 1311.25 5079.18 1295.94 5079.18 c
-1284.26 5079.18 1274.6 5083.89 1266.96 5093.31 c
-1261.12 5100.75 1258.3 5107.6 1254.88 5121.88 c
-1249.04 5121.88 l
-1249.04 5072.18 l
-1254.88 5072.18 l
-1256.09 5077.41 1257.7 5079.02 1260.92 5079.02 c
-1262.53 5079.02 1264.74 5078.42 1269.17 5077.01 c
-1279.03 5073.59 1286.48 5072.18 1295.33 5072.18 c
-1325.12 5072.18 1345 5089.28 1345 5114.64 c
-1345 5129.73 1336.04 5144.83 1323.1 5151.27 c
-1293.52 5165.96 l
-1277.22 5174.01 1273 5178.84 1273 5188.7 c
-1273 5201.18 1281.37 5208.02 1294.93 5208.02 c
-1303.99 5208.02 1312.44 5204.47 1319.68 5197.55 c
-1326.53 5190.51 1329.75 5184.67 1333.77 5171.59 c
-h
-1353.89 5076 m
-f*
-1456.24 5168.78 m
-1413.17 5168.78 l
-1413.17 5164.15 l
-1418 5163.34 l
-1423.03 5162.74 1425.05 5161.33 1425.05 5158.71 c
-1425.05 5156.9 1423.03 5153.28 1420.82 5151.07 c
-1395 5125.31 l
-1395 5212 l
-1357.43 5212 l
-1357.43 5207.21 l
-1364.27 5206.61 1367 5203.19 1367 5195.54 c
-1367 5092.91 l
-1367 5085.06 1364.01 5081.43 1357.43 5080.83 c
-1357.43 5076 l
-1405.53 5076 l
-1405.53 5080.83 l
-1396.07 5082.24 1395 5083.45 1395 5092.91 c
-1395 5115.85 l
-1399.69 5120.68 l
-1418.81 5093.71 l
-1422.43 5088.68 1423.64 5086.26 1423.64 5084.65 c
-1423.64 5082.24 1420.82 5081.03 1415.19 5080.83 c
-1415.19 5076 l
-1462.28 5076 l
-1462.28 5081 l
-1460.06 5081 1459.06 5081.57 1457.25 5083.85 c
-1418.2 5137.78 l
-1438.33 5158.91 1443.56 5162.54 1456.24 5164.15 c
-h
-1464.89 5076 m
-f*
-1561.6 5169 m
-1531.21 5169 l
-1531.21 5163.95 l
-1539.86 5163.54 1542.28 5162.13 1542.28 5157.3 c
-1542.28 5154.89 1541.88 5153.48 1540.07 5148.25 c
-1526.38 5109.61 l
-1511.89 5146.84 l
-1507.87 5157.1 1507.87 5157.1 1507.87 5158.71 c
-1507.87 5161.73 1510.28 5163.34 1515.31 5163.74 c
-1518.53 5163.95 l
-1518.53 5169 l
-1468 5169 l
-1468 5163.95 l
-1472.57 5163.34 1473.82 5162.74 1475.06 5161.13 c
-1476.87 5158.71 1484.32 5142.81 1488.34 5132.75 c
-1512.49 5073.38 l
-1508.87 5062.72 l
-1505.45 5052.66 1500.42 5046 1495.59 5046 c
-1493.78 5046 1492 5047.71 1492 5049.64 c
-1492 5049.84 1492 5050.24 1492.37 5050.84 c
-1492.57 5051.85 1492.77 5052.86 1492.77 5053.66 c
-1492.77 5059.5 1487.94 5063.52 1481.1 5063.52 c
-1473.45 5063.52 1468 5058.29 1468 5050.64 c
-1468 5041.18 1476.14 5035 1487.74 5035 c
-1494.58 5035 1500.42 5037.13 1504.65 5041.39 c
-1508.87 5046.01 1512.9 5054.06 1519.94 5072.98 c
-1549.93 5152.88 l
-1553.35 5161.33 1555.36 5163.14 1561.6 5163.95 c
-h
-1565.62 5076 m
-f*
-1682.33 5212 m
-1568.22 5212 l
-1568.22 5207 l
-1582.11 5206.2 1586 5203.18 1586 5192.72 c
-1586 5095.32 l
-1586 5084.85 1583.17 5082.64 1568.22 5081.03 c
-1568.22 5076 l
-1640.67 5076 l
-1640.67 5081 l
-1622.15 5081.81 1619 5084.23 1619 5095.32 c
-1619 5142.21 l
-1639.22 5141.81 1646.55 5134.36 1649.32 5111.02 c
-1654.35 5111.02 l
-1654.35 5179.04 l
-1649.32 5179.04 l
-1645.76 5156.1 1638.82 5149.05 1619 5149.05 c
-1619 5195.74 l
-1619 5203.19 1621.52 5205 1631.41 5205 c
-1650.13 5205 1661.8 5201.64 1668.04 5194.74 c
-1672.47 5189.71 1674.68 5184.27 1677.5 5171.59 c
-1682.33 5171.59 l
-h
-1687.96 5076 m
-f*
-1731.19 5169 m
-1692.84 5169 l
-1692.84 5163.95 l
-1701.49 5162.74 1704 5160.12 1704 5152.07 c
-1704 5092.9 l
-1704 5084.65 1701.93 5082.44 1692.84 5080.83 c
-1692.84 5076 l
-1746.37 5076 l
-1746.37 5080.83 l
-1734.09 5081.63 1732 5084.25 1732 5096.73 c
-1732 5134.76 l
-1732 5145.23 1737.49 5153.88 1743.95 5153.88 c
-1745.56 5153.88 1747.37 5152.47 1749.59 5149.25 c
-1753.41 5143.82 1756.43 5142.01 1761.66 5142.01 c
-1769.11 5142.01 1774.34 5147.64 1774.34 5155.29 c
-1774.34 5164.55 1767.5 5171.41 1758.04 5171.41 c
-1748.1 5171.41 1740.54 5166.12 1731.19 5152.27 c
-h
-1776.35 5076 m
-f*
-1871.19 5088.88 m
-1869.18 5086.87 l
-1868.57 5086.26 1867.97 5086.06 1866.96 5086.06 c
-1864.15 5086.06 1863 5087.67 1863 5091.09 c
-1863 5143.62 l
-1863 5160.73 1847.6 5171.42 1822.89 5171.42 c
-1800.15 5171.42 1784.85 5161.06 1784.85 5145.83 c
-1784.85 5137.38 1789.69 5132.55 1797.94 5132.55 c
-1805.99 5132.55 1811.62 5137.38 1811.62 5144.22 c
-1811.62 5147.04 1810.61 5149.66 1808 5152.88 c
-1806.19 5154.89 1805.58 5156.1 1805.58 5157.3 c
-1805.58 5161.53 1811.02 5164.42 1818.26 5164.42 c
-1830.14 5164.42 1835.86 5159.08 1835.86 5147.04 c
-1835.86 5132.35 l
-1811.91 5125.1 1802.29 5121.48 1794.51 5116.45 c
-1785.46 5110.41 1781 5103.37 1781 5094.52 c
-1781 5082.24 1790.27 5073.18 1803.17 5073.18 c
-1814.84 5073.18 1824.1 5077.21 1835.17 5087.27 c
-1837.38 5077.01 1841.81 5073.18 1851.67 5073.18 c
-1860.32 5073.18 1866.56 5076.4 1874.21 5084.65 c
-h
-1835 5096.13 m
-1829.55 5089.89 1825.52 5087.47 1820.68 5087.47 c
-1814.64 5087.47 1810 5092.91 1810 5100.96 c
-1810 5112.63 1818.61 5120.88 1835 5125.31 c
-h
-1876.62 5076 m
-f*
-1919.4 5169 m
-1880.7 5169 l
-1880.7 5163.95 l
-1889.55 5162.74 1892 5160.32 1892 5152.07 c
-1892 5092.9 l
-1892 5084.65 1889.74 5082.44 1880.7 5080.83 c
-1880.7 5076 l
-1929 5076 l
-1929 5080.83 l
-1921.95 5081.84 1920 5084.65 1920 5092.3 c
-1920 5146.03 l
-1920 5147.04 1922.87 5150.66 1925.18 5152.88 c
-1929.4 5156.1 1933.02 5158.42 1936.65 5158.42 c
-1944.5 5158.42 1948 5153.59 1948 5141 c
-1948 5092.3 l
-1948 5084.05 1945.68 5081.43 1937.85 5080.83 c
-1937.85 5076 l
-1984.95 5076 l
-1984.95 5080.83 l
-1977.9 5081.64 1976 5084.65 1976 5092.3 c
-1976 5146.03 l
-1976 5147.04 1978.73 5150.46 1980.92 5152.68 c
-1985.35 5156.1 1988.97 5158.42 1992.59 5158.42 c
-2000.24 5158.42 2003 5153.38 2003 5141 c
-2003 5092.3 l
-2003 5083.85 2000.85 5081.43 1993.4 5080.83 c
-1993.4 5076 l
-2041.3 5076 l
-2041.3 5081 l
-2033.45 5081.4 2031 5083.78 2031 5092.3 c
-2031 5142.81 l
-2031 5160.12 2020.43 5171.42 2004.07 5171.42 c
-1992.59 5171.42 1984.95 5166.73 1974.48 5153.68 c
-1968.44 5166.36 1961.4 5171.42 1948.72 5171.42 c
-1935.95 5171.42 1926.98 5165.91 1919.4 5153.68 c
-h
-2044.64 5076 m
-f*
-2122.9 5101.16 m
-2114.65 5091.29 2108.61 5087.18 2099.96 5087.18 c
-2092.31 5087.18 2086.27 5090.77 2082.25 5097.94 c
-2078.43 5104.54 2076.82 5111.56 2076.01 5126 c
-2126.73 5126 l
-2125.52 5142.36 2122.5 5151.43 2116.26 5159.12 c
-2109.82 5166.96 2100.36 5171.42 2089.09 5171.42 c
-2063.94 5171.42 2047.03 5151.4 2047.03 5121.88 c
-2047.03 5092.5 2063.53 5073.18 2088.49 5073.18 c
-2104.79 5073.18 2114.65 5079.42 2127.73 5098.34 c
-h
-2075 5133 m
-2075.61 5156.96 2079.23 5164.42 2089.09 5164.42 c
-2094.93 5164.42 2098.55 5161.38 2100.16 5155.49 c
-2101.17 5151.67 2101.57 5146.03 2101.97 5135.77 c
-2101.97 5133 l
-h
-2131.35 5076 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -1659 -4890]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-5033.75 5048.15 m
-5033.75 5158.55 4942.55 5249.75 4830.95 5249.75 c
-4126.55 5249.75 l
-4014.95 5249.75 3923.75 5158.55 3923.75 5048.15 c
-3923.75 4910.15 l
-3923.75 4799.75 4014.95 4708.55 4126.55 4708.55 c
-4830.95 4708.55 l
-4942.55 4708.55 5033.75 4799.75 5033.75 4910.15 c
-f*
-1 g
-4964.15 5104.55 m
-4964.15 5211.35 4875.35 5298.95 4766.15 5298.95 c
-4073.75 5298.95 l
-3963.35 5298.95 3874.55 5211.35 3874.55 5104.55 c
-3874.55 4972.55 l
-3874.55 4865.75 3963.35 4778.15 4073.75 4778.15 c
-4764.95 4778.15 l
-4875.35 4778.15 4964.15 4865.75 4964.15 4972.55 c
-f*
-0 g
-4964.15 5104.55 m
-4964.15 5211.35 4875.35 5298.95 4766.15 5298.95 c
-4073.75 5298.95 l
-3963.35 5298.95 3874.55 5211.35 3874.55 5104.55 c
-3874.55 4972.55 l
-3874.55 4865.75 3963.35 4778.15 4073.75 4778.15 c
-4764.95 4778.15 l
-4875.35 4778.15 4964.15 4865.75 4964.15 4972.55 c
-h
-S
-0.201248 i
-4082.16 5164.59 m
-4082.16 5208.22 l
-4076.37 5208.22 l
-4074.96 5202.82 4073.55 5201.42 4069.93 5201.42 c
-4068.12 5201.42 4065.7 5202.03 4061.47 5203.43 c
-4052.22 5206.86 4045.78 5208.02 4037.93 5208.02 c
-4010.56 5208.02 3994 5192.54 3994 5167.01 c
-3994 5161.98 3994.75 5157.75 3996.07 5153.73 c
-4000.29 5143.06 4011.16 5133.6 4028.27 5125.35 c
-4041.75 5118.91 l
-4059.46 5110.46 4064 5105.22 4064 5094.56 c
-4064 5080.67 4054.25 5072.18 4038.94 5072.18 c
-4027.26 5072.18 4017.6 5076.89 4009.96 5086.31 c
-4004.12 5093.75 4001.3 5100.6 3997.88 5114.88 c
-3992.04 5114.88 l
-3992.04 5065.18 l
-3997.88 5065.18 l
-3999.09 5070.41 4000.7 5072.02 4003.92 5072.02 c
-4005.53 5072.02 4007.74 5071.42 4012.17 5070.01 c
-4022.03 5066.59 4029.48 5065.18 4038.33 5065.18 c
-4068.12 5065.18 4088 5082.28 4088 5107.64 c
-4088 5122.73 4079.04 5137.83 4066.1 5144.27 c
-4036.52 5158.96 l
-4020.22 5167.01 4016 5171.84 4016 5181.7 c
-4016 5194.18 4024.37 5201.02 4037.93 5201.02 c
-4046.99 5201.02 4055.44 5197.47 4062.68 5190.55 c
-4069.53 5183.51 4072.75 5177.67 4076.77 5164.59 c
-h
-4096.89 5069 m
-f*
-4200.24 5161.78 m
-4157.17 5161.78 l
-4157.17 5157.15 l
-4162 5156.34 l
-4167.03 5155.74 4169.05 5154.33 4169.05 5151.71 c
-4169.05 5149.9 4167.03 5146.28 4164.82 5144.07 c
-4139 5118.31 l
-4139 5205 l
-4101.43 5205 l
-4101.43 5200.21 l
-4108.27 5199.61 4111 5196.19 4111 5188.54 c
-4111 5085.91 l
-4111 5078.06 4108.01 5074.43 4101.43 5073.83 c
-4101.43 5069 l
-4149.53 5069 l
-4149.53 5073.83 l
-4140.07 5075.24 4139 5076.45 4139 5085.91 c
-4139 5108.85 l
-4143.69 5113.68 l
-4162.81 5086.71 l
-4166.43 5081.68 4167.64 5079.26 4167.64 5077.65 c
-4167.64 5075.24 4164.82 5074.03 4159.19 5073.83 c
-4159.19 5069 l
-4206.28 5069 l
-4206.28 5074 l
-4204.06 5074 4203.06 5074.57 4201.25 5076.85 c
-4162.2 5130.78 l
-4182.33 5151.91 4187.56 5155.54 4200.24 5157.15 c
-h
-4208.89 5069 m
-f*
-4303.6 5162 m
-4273.21 5162 l
-4273.21 5156.95 l
-4281.86 5156.54 4284.28 5155.13 4284.28 5150.3 c
-4284.28 5147.89 4283.88 5146.48 4282.07 5141.25 c
-4268.38 5102.61 l
-4253.89 5139.84 l
-4249.87 5150.1 4249.87 5150.1 4249.87 5151.71 c
-4249.87 5154.73 4252.28 5156.34 4257.31 5156.74 c
-4260.53 5156.95 l
-4260.53 5162 l
-4210 5162 l
-4210 5156.95 l
-4214.57 5156.34 4215.82 5155.74 4217.06 5154.13 c
-4218.87 5151.71 4226.32 5135.81 4230.34 5125.75 c
-4254.49 5066.38 l
-4250.87 5055.72 l
-4247.45 5045.66 4242.42 5039 4237.59 5039 c
-4235.78 5039 4234 5040.71 4234 5042.64 c
-4234 5042.84 4234 5043.24 4234.37 5043.84 c
-4234.57 5044.85 4234.77 5045.86 4234.77 5046.66 c
-4234.77 5052.5 4229.94 5056.52 4223.1 5056.52 c
-4215.45 5056.52 4210 5051.29 4210 5043.64 c
-4210 5034.18 4218.14 5028 4229.74 5028 c
-4236.58 5028 4242.42 5030.13 4246.65 5034.39 c
-4250.87 5039.01 4254.9 5047.06 4261.94 5065.98 c
-4291.93 5145.88 l
-4295.35 5154.33 4297.36 5156.14 4303.6 5156.95 c
-h
-4307.62 5069 m
-f*
-4425.33 5205 m
-4311.22 5205 l
-4311.22 5200 l
-4325.11 5199.2 4329 5196.18 4329 5185.72 c
-4329 5088.32 l
-4329 5077.85 4326.17 5075.64 4311.22 5074.03 c
-4311.22 5069 l
-4383.67 5069 l
-4383.67 5074 l
-4365.15 5074.81 4362 5077.23 4362 5088.32 c
-4362 5135.21 l
-4382.22 5134.81 4389.55 5127.36 4392.32 5104.02 c
-4397.35 5104.02 l
-4397.35 5172.04 l
-4392.32 5172.04 l
-4388.76 5149.1 4381.82 5142.05 4362 5142.05 c
-4362 5188.74 l
-4362 5196.19 4364.52 5198 4374.41 5198 c
-4393.13 5198 4404.8 5194.64 4411.04 5187.74 c
-4415.47 5182.71 4417.68 5177.27 4420.5 5164.59 c
-4425.33 5164.59 l
-h
-4430.96 5069 m
-f*
-4474.19 5162 m
-4435.84 5162 l
-4435.84 5156.95 l
-4444.49 5155.74 4447 5153.12 4447 5145.07 c
-4447 5085.9 l
-4447 5077.65 4444.93 5075.44 4435.84 5073.83 c
-4435.84 5069 l
-4489.37 5069 l
-4489.37 5073.83 l
-4477.09 5074.63 4475 5077.25 4475 5089.73 c
-4475 5127.76 l
-4475 5138.23 4480.49 5146.88 4486.95 5146.88 c
-4488.56 5146.88 4490.37 5145.47 4492.59 5142.25 c
-4496.41 5136.82 4499.43 5135.01 4504.66 5135.01 c
-4512.11 5135.01 4517.34 5140.64 4517.34 5148.29 c
-4517.34 5157.55 4510.5 5164.41 4501.04 5164.41 c
-4491.1 5164.41 4483.54 5159.12 4474.19 5145.27 c
-h
-4519.35 5069 m
-f*
-4614.19 5081.88 m
-4612.18 5079.87 l
-4611.57 5079.26 4610.97 5079.06 4609.96 5079.06 c
-4607.15 5079.06 4606 5080.67 4606 5084.09 c
-4606 5136.62 l
-4606 5153.73 4590.6 5164.42 4565.89 5164.42 c
-4543.15 5164.42 4527.85 5154.06 4527.85 5138.83 c
-4527.85 5130.38 4532.69 5125.55 4540.94 5125.55 c
-4548.99 5125.55 4554.62 5130.38 4554.62 5137.22 c
-4554.62 5140.04 4553.61 5142.66 4551 5145.88 c
-4549.19 5147.89 4548.58 5149.1 4548.58 5150.3 c
-4548.58 5154.53 4554.02 5157.42 4561.26 5157.42 c
-4573.14 5157.42 4578.86 5152.08 4578.86 5140.04 c
-4578.86 5125.35 l
-4554.91 5118.1 4545.29 5114.48 4537.51 5109.45 c
-4528.46 5103.41 4524 5096.37 4524 5087.52 c
-4524 5075.24 4533.27 5066.18 4546.17 5066.18 c
-4557.84 5066.18 4567.1 5070.21 4578.17 5080.27 c
-4580.38 5070.01 4584.81 5066.18 4594.67 5066.18 c
-4603.32 5066.18 4609.56 5069.4 4617.21 5077.65 c
-h
-4578 5089.13 m
-4572.55 5082.89 4568.52 5080.47 4563.68 5080.47 c
-4557.64 5080.47 4553 5085.91 4553 5093.96 c
-4553 5105.63 4561.61 5113.88 4578 5118.31 c
-h
-4619.62 5069 m
-f*
-4661.4 5162 m
-4622.7 5162 l
-4622.7 5156.95 l
-4631.55 5155.74 4634 5153.32 4634 5145.07 c
-4634 5085.9 l
-4634 5077.65 4631.74 5075.44 4622.7 5073.83 c
-4622.7 5069 l
-4671 5069 l
-4671 5073.83 l
-4663.95 5074.84 4662 5077.65 4662 5085.3 c
-4662 5139.03 l
-4662 5140.04 4664.87 5143.66 4667.18 5145.88 c
-4671.4 5149.1 4675.02 5151.42 4678.65 5151.42 c
-4686.5 5151.42 4690 5146.59 4690 5134 c
-4690 5085.3 l
-4690 5077.05 4687.68 5074.43 4679.85 5073.83 c
-4679.85 5069 l
-4726.95 5069 l
-4726.95 5073.83 l
-4719.9 5074.64 4718 5077.65 4718 5085.3 c
-4718 5139.03 l
-4718 5140.04 4720.73 5143.46 4722.92 5145.68 c
-4727.35 5149.1 4730.97 5151.42 4734.59 5151.42 c
-4742.24 5151.42 4745 5146.38 4745 5134 c
-4745 5085.3 l
-4745 5076.85 4742.85 5074.43 4735.4 5073.83 c
-4735.4 5069 l
-4783.3 5069 l
-4783.3 5074 l
-4775.45 5074.4 4773 5076.78 4773 5085.3 c
-4773 5135.81 l
-4773 5153.12 4762.43 5164.42 4746.07 5164.42 c
-4734.59 5164.42 4726.95 5159.73 4716.48 5146.68 c
-4710.44 5159.36 4703.4 5164.42 4690.72 5164.42 c
-4677.95 5164.42 4668.98 5158.91 4661.4 5146.68 c
-h
-4786.64 5069 m
-f*
-4865.9 5094.16 m
-4857.65 5084.29 4851.61 5080.18 4842.96 5080.18 c
-4835.31 5080.18 4829.27 5083.77 4825.25 5090.94 c
-4821.43 5097.54 4819.82 5104.56 4819.01 5119 c
-4869.73 5119 l
-4868.52 5135.36 4865.5 5144.43 4859.26 5152.12 c
-4852.82 5159.96 4843.36 5164.42 4832.09 5164.42 c
-4806.94 5164.42 4790.03 5144.4 4790.03 5114.88 c
-4790.03 5085.5 4806.53 5066.18 4831.49 5066.18 c
-4847.79 5066.18 4857.65 5072.42 4870.73 5091.34 c
-h
-4818 5126 m
-4818.61 5149.96 4822.23 5157.42 4832.09 5157.42 c
-4837.93 5157.42 4841.55 5154.38 4843.16 5148.49 c
-4844.17 5144.67 4844.57 5139.03 4844.97 5128.77 c
-4844.97 5126 l
-h
-4874.35 5069 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -4394 -4883]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-8 w
-2175.35 4842.95 m
-2222.15 4748.15 2351.75 4684.55 2496.95 4684.55 c
-2577.35 4684.55 2655.35 4703.75 2717.75 4740.95 c
-S
-2709.35 4683.35 m
-2694.95 4733.75 l
-2650.55 4758.95 l
-2799.35 4816.55 l
-f*
-0.564706 g
-3668.15 4929.35 m
-3533.75 4966.55 l
-3629.75 5021.75 l
-3476.15 5031.35 l
-3518.15 5100.95 l
-3370.55 5080.55 l
-3353.75 5152.55 l
-3233.75 5106.95 l
-3158.15 5170.55 l
-3082.55 5106.95 l
-2962.55 5152.55 l
-2944.55 5080.55 l
-2795.75 5100.95 l
-2840.15 5031.35 l
-2686.55 5021.75 l
-2782.55 4966.55 l
-2646.95 4929.35 l
-2782.55 4894.55 l
-2686.55 4838.15 l
-2840.15 4829.75 l
-2795.75 4760.15 l
-2944.55 4779.35 l
-2962.55 4708.55 l
-3082.55 4752.95 l
-3158.15 4689.35 l
-3233.75 4752.95 l
-3353.75 4708.55 l
-3370.55 4779.35 l
-3518.15 4760.15 l
-3476.15 4829.75 l
-3629.75 4838.15 l
-3533.75 4894.55 l
-f*
-1 g
-3608.15 4989.35 m
-3473.75 5026.55 l
-3569.75 5081.75 l
-3416.15 5091.35 l
-3458.15 5160.95 l
-3310.55 5140.55 l
-3293.75 5212.55 l
-3173.75 5166.95 l
-3098.15 5230.55 l
-3022.55 5166.95 l
-2902.55 5212.55 l
-2884.55 5140.55 l
-2735.75 5160.95 l
-2780.15 5091.35 l
-2626.55 5081.75 l
-2722.55 5026.55 l
-2586.95 4989.35 l
-2722.55 4954.55 l
-2626.55 4898.15 l
-2780.15 4889.75 l
-2735.75 4820.15 l
-2884.55 4839.35 l
-2902.55 4768.55 l
-3022.55 4812.95 l
-3098.15 4749.35 l
-3173.75 4812.95 l
-3293.75 4768.55 l
-3310.55 4839.35 l
-3458.15 4820.15 l
-3416.15 4889.75 l
-3569.75 4898.15 l
-3473.75 4954.55 l
-f*
-0 g
-3608.15 4989.35 m
-3473.75 5026.55 l
-3569.75 5081.75 l
-3416.15 5091.35 l
-3458.15 5160.95 l
-3310.55 5140.55 l
-3293.75 5212.55 l
-3173.75 5166.95 l
-3098.15 5230.55 l
-3022.55 5166.95 l
-2902.55 5212.55 l
-2884.55 5140.55 l
-2735.75 5160.95 l
-2780.15 5091.35 l
-2626.55 5081.75 l
-2722.55 5026.55 l
-2586.95 4989.35 l
-2722.55 4954.55 l
-2626.55 4898.15 l
-2780.15 4889.75 l
-2735.75 4820.15 l
-2884.55 4839.35 l
-2902.55 4768.55 l
-3022.55 4812.95 l
-3098.15 4749.35 l
-3173.75 4812.95 l
-3293.75 4768.55 l
-3310.55 4839.35 l
-3458.15 4820.15 l
-3416.15 4889.75 l
-3569.75 4898.15 l
-3473.75 4954.55 l
-3608.15 4989.35 l
-3569.75 4989.35 l
-3447.35 4958.15 l
-3536.15 4906.55 l
-3398.15 4898.15 l
-3438.95 4832.15 l
-3303.35 4851.35 l
-3286.55 4781.75 l
-3171.35 4824.95 l
-3098.15 4762.55 l
-3024.95 4824.95 l
-2909.75 4781.75 l
-2891.75 4851.35 l
-2756.15 4832.15 l
-2796.95 4898.15 l
-2660.15 4906.55 l
-2748.95 4958.15 l
-2626.55 4989.35 l
-2747.75 5021.75 l
-2660.15 5074.55 l
-2796.95 5081.75 l
-2756.15 5148.95 l
-2891.75 5129.75 l
-2909.75 5198.15 l
-3024.95 5156.15 l
-3098.15 5218.55 l
-3171.35 5156.15 l
-3286.55 5198.15 l
-3303.35 5129.75 l
-3438.95 5148.95 l
-3398.15 5081.75 l
-3536.15 5074.55 l
-3447.35 5021.75 l
-3569.75 4989.35 l
-3608.15 4989.35 l
-f*
-0.2 i
-2920.08 5040.76 m
-2900.08 4966.52 l
-2897.52 4957.88 2894.48 4955.64 2884.08 4955 c
-2884.08 4951 l
-2934 4951 l
-2934 4955 l
-2924.72 4955.48 2922.48 4956.76 2922.48 4961.88 c
-2922.48 4963.64 2922.8 4965.4 2923.76 4969.08 c
-2923.92 4969.88 l
-2924.08 4970.68 l
-2943.76 5042.52 l
-2946.16 5050.84 2948.56 5053.08 2956.72 5054.04 c
-2956.72 5058 l
-2922.8 5058 l
-2873.2 4981.24 l
-2864.56 5058 l
-2829.2 5058 l
-2829.2 5054 l
-2839.28 5053.52 2840.72 5052.89 2840.72 5048.44 c
-2840.72 5046.2 2840.08 5043.32 2838.96 5039.16 c
-2821.52 4979.48 l
-2815.12 4958.68 2814 4956.92 2805.36 4955 c
-2805.36 4951 l
-2838.48 4951 l
-2838.48 4955 l
-2828.24 4956.28 2825.68 4958.2 2825.68 4964.76 c
-2825.68 4967.48 2826.48 4971.48 2828.72 4979.48 c
-2844.88 5038.52 l
-2855.6 4949.08 l
-2860.08 4949.08 l
-h
-2952.24 4951 m
-f*
-3021.44 4971.32 m
-3014.88 4962.52 3012.48 4959.76 3009.92 4959.76 c
-3008.64 4959.76 3008 4960.86 3008 4962.52 c
-3008 4966.52 3009.44 4973.08 3013.44 4986.2 c
-3024.8 5023.96 l
-3007.04 5022.84 l
-3004.16 5013.4 l
-3002.72 5021.56 2999.2 5025.08 2992.32 5025.08 c
-2972.64 5025.08 2949 4994.27 2949 4969.24 c
-2949 4957.08 2955.74 4948.92 2965.92 4948.92 c
-2975.68 4948.92 2983.04 4954.68 2992.16 4970.04 c
-2990.24 4963.48 2990 4961.56 2990 4959.32 c
-2990 4953.4 2994.76 4948.76 3000.64 4948.76 c
-3008.16 4948.76 3015.52 4955 3024.8 4968.92 c
-h
-2994.56 5018.2 m
-2998.08 5017.88 3000.56 5015 3000.56 5010.68 c
-3000.56 5001.08 2995.24 4983.32 2988.96 4972.28 c
-2984.64 4964.44 2979.84 4959.92 2975.52 4959.92 c
-2971.36 4959.92 2968 4963.75 2968 4968.92 c
-2968 4977.24 2973.42 4993.24 2980.16 5005.08 c
-2984.96 5013.56 2990.24 5018.52 2994.56 5018.2 c
-h
-3032 4951 m
-f*
-3066.56 5024.92 m
-3050.24 5022.36 3044 5021.4 3035.68 5020.44 c
-3035.68 5016 l
-3042.88 5015.69 3044.32 5015.07 3044.32 5012.12 c
-3044.32 5010.52 3043.04 5004.76 3040.8 4996.44 c
-3024.8 4934.36 l
-3021.76 4923.8 3020.48 4922.84 3012.8 4923 c
-3012.8 4918 l
-3052.64 4918 l
-3052.64 4923 l
-3044.64 4923.14 3042.24 4924.16 3042.24 4927.64 c
-3042.24 4929.88 3043.36 4934.68 3046.4 4945.88 c
-3047.52 4949.72 3047.52 4950.04 3048.16 4952.44 c
-3053.76 4949.56 3055.68 4948.92 3059.04 4948.92 c
-3080.8 4948.92 3103.36 4977.88 3103.36 5005.56 c
-3103.36 5017.4 3096.64 5025.08 3086.08 5025.08 c
-3076.96 5025.08 3069.92 5019.92 3060.48 5006.52 c
-h
-3077.12 5013.56 m
-3081.28 5013.24 3083.68 5009.56 3083.36 5004.44 c
-3082.72 4993.88 3077.6 4978.04 3071.84 4967.64 c
-3066.88 4959 3061.76 4953.92 3056.32 4953.92 c
-3052.8 4953.92 3050.08 4956.75 3050.08 4960.28 c
-3050.08 4963 3051.84 4969.56 3056.16 4984.12 c
-3059.68 4995.8 3061.12 4999.8 3063.52 5003.48 c
-3067.52 5009.72 3072.96 5013.88 3077.12 5013.56 c
-h
-3112 4951 m
-f*
-3147.56 5024.92 m
-3131.24 5022.36 3125 5021.4 3116.68 5020.44 c
-3116.68 5016 l
-3123.88 5015.69 3125.32 5015.07 3125.32 5012.12 c
-3125.32 5010.52 3124.04 5004.76 3121.8 4996.44 c
-3105.8 4934.36 l
-3102.76 4923.8 3101.48 4922.84 3093.8 4923 c
-3093.8 4918 l
-3133.64 4918 l
-3133.64 4923 l
-3125.64 4923.14 3123.24 4924.16 3123.24 4927.64 c
-3123.24 4929.88 3124.36 4934.68 3127.4 4945.88 c
-3128.52 4949.72 3128.52 4950.04 3129.16 4952.44 c
-3134.76 4949.56 3136.68 4948.92 3140.04 4948.92 c
-3161.8 4948.92 3184.36 4977.88 3184.36 5005.56 c
-3184.36 5017.4 3177.64 5025.08 3167.08 5025.08 c
-3157.96 5025.08 3150.92 5019.92 3141.48 5006.52 c
-h
-3158.12 5013.56 m
-3162.28 5013.24 3164.68 5009.56 3164.36 5004.44 c
-3163.72 4993.88 3158.6 4978.04 3152.84 4967.64 c
-3147.88 4959 3142.76 4953.92 3137.32 4953.92 c
-3133.8 4953.92 3131.08 4956.75 3131.08 4960.28 c
-3131.08 4963 3132.84 4969.56 3137.16 4984.12 c
-3140.68 4995.8 3142.12 4999.8 3144.52 5003.48 c
-3148.52 5009.72 3153.96 5013.88 3158.12 5013.56 c
-h
-3193 4951 m
-f*
-3226.56 4973.56 m
-3224.32 4970.36 l
-3220.16 4964.12 3216.48 4960.56 3214.08 4960.56 c
-3212.8 4960.56 3212 4961.77 3212 4963.16 c
-3212 4964.6 3212.62 4968.76 3213.12 4971.48 c
-3227.68 5024.92 l
-3219.22 5023 3208.26 5021.4 3196.04 5020.44 c
-3196.04 5016 l
-3197.44 5016 l
-3202.24 5016 3205.48 5014.44 3205.48 5011.48 c
-3205.48 5010.2 3204.71 5007.8 3203.68 5005.08 c
-3194.4 4970.68 l
-3193.12 4966.04 3193 4961.88 3193 4959.64 c
-3193 4953.56 3197.2 4949.56 3203.36 4949.56 c
-3212.96 4949.56 3218.88 4954.36 3230.08 4971.32 c
-h
-3222.88 5060.4 m
-3217.44 5060.4 3213 5055.46 3213 5050.04 c
-3213 5043.8 3217.26 5039.4 3223.04 5039.4 c
-3229.12 5039.4 3234 5043.86 3234 5049.56 c
-3234 5055.48 3229 5060.4 3222.88 5060.4 c
-h
-3236.48 4951 m
-f*
-3311.36 4972.6 m
-3304.96 4962.68 3302.88 4960.56 3300.16 4960.56 c
-3298.88 4960.56 3298 4961.63 3298 4963.16 c
-3298 4964.76 3298.94 4968.12 3301.92 4977.08 c
-3307.68 4994.52 l
-3310.24 5002.04 3312 5009.08 3312 5012.92 c
-3312 5020.76 3307.78 5025.08 3300.16 5025.08 c
-3294.24 5025.08 3288.48 5022.62 3284.16 5018.36 c
-3278.24 5012.76 3275.2 5008.92 3264.48 4993.08 c
-3274.72 5024.76 l
-3264.48 5022.52 3251.68 5020.92 3242.72 5020.6 c
-3242.72 5015.8 l
-3249.44 5015.65 3251.36 5014.92 3251.36 5012.12 c
-3251.36 5010.2 3249.12 5001.72 3244 4983.64 c
-3240.32 4970.68 3239.2 4966.52 3235.04 4951 c
-3254.4 4951 l
-3261.92 4978.68 3267.68 4992.6 3277.6 5005.56 c
-3280.8 5009.88 3285.76 5013.08 3288.64 5013.08 c
-3290.72 5013.08 3293 5011.63 3293 5010.04 c
-3293 5009.56 3292.54 5008.28 3291.84 5006.68 c
-3283.04 4980.12 l
-3280.48 4972.44 3279 4963.32 3279 4959.16 c
-3279 4953.08 3282.84 4949.56 3289.44 4949.56 c
-3299.04 4949.56 3305.6 4955 3314.88 4970.52 c
-h
-3324.96 4951 m
-f*
-3402.48 5020 m
-3384.72 5020 l
-3379.28 5023.58 3374.48 5025.08 3367.12 5025.08 c
-3347.44 5025.08 3331 5012.05 3331 4995.8 c
-3331 4987.64 3335.35 4981.88 3344.4 4978.2 c
-3331.28 4970.84 3329 4968.6 3329 4962.68 c
-3329 4957.56 3331.89 4954.52 3338.96 4952.12 c
-3329.04 4949.72 3325.84 4948.44 3322 4945.4 c
-3319.44 4943.16 3318 4939.32 3318 4935.48 c
-3318 4925.08 3329.56 4919 3347.76 4919 c
-3370.32 4919 3386 4928.72 3386 4942.52 c
-3386 4952.28 3379.6 4957.56 3362.16 4962.52 c
-3353.68 4964.92 l
-3348.56 4966.36 3345 4968.6 3345 4971 c
-3345 4973.56 3347.68 4976.28 3350 4976.28 c
-3350.8 4976.28 3351.92 4976.24 3353.2 4976.12 c
-3354.96 4975.64 3356.24 4975 3358.16 4975 c
-3365.2 4975 3372.4 4977.09 3378.48 4980.92 c
-3387.76 4986.2 3393 4994.36 3393 5003.96 c
-3393 5006.64 3392.59 5008.32 3391.76 5011 c
-3402.48 5011 l
-h
-3344.4 4950.04 m
-3346.32 4949.88 3358.48 4945.72 3362 4944.12 c
-3366.48 4941.88 3369 4939.16 3369 4935 c
-3369 4927.96 3361.8 4924 3349.36 4924 c
-3338.96 4924 3332 4929.1 3332 4936.44 c
-3332 4939.48 3333.32 4942.2 3336.24 4945.24 c
-3338.32 4947.32 3343.12 4950.2 3344.4 4950.04 c
-h
-3366.8 5020.08 m
-3370.96 5020.08 3374 5016.19 3374 5010.52 c
-3374 5005.08 3372.08 4997.4 3369.36 4991.48 c
-3366 4984.12 3361.84 4980 3356.88 4980 c
-3352.56 4980 3350 4983.52 3350 4989.88 c
-3350 4996.28 3352.79 5006.04 3356.24 5012.12 c
-3359.28 5017.4 3362.64 5020.08 3366.8 5020.08 c
-h
-3406 4951 m
-f*
-1 i
-1 g
-1515.35 4526.15 m
-1596.95 4526.15 l
-1596.95 4374.95 l
-1763.75 4374.95 l
-1763.75 4526.15 l
-1845.35 4526.15 l
-1680.95 4679.75 l
-f*
-0 g
-1515.35 4526.15 m
-1596.95 4526.15 l
-1596.95 4374.95 l
-1763.75 4374.95 l
-1763.75 4526.15 l
-1845.35 4526.15 l
-1680.95 4679.75 l
-1515.35 4526.15 l
-1539.35 4535.75 l
-1680.95 4666.55 l
-1820.15 4535.75 l
-1754.15 4535.75 l
-1754.15 4384.55 l
-1607.75 4384.55 l
-1607.75 4535.75 l
-1539.35 4535.75 l
-1515.35 4526.15 l
-f*
-0.2 i
-1255.88 4259 m
-1255.88 4254 l
-1268.3 4253.29 1272 4250.45 1272 4241.4 c
-1272 4154.28 l
-1272 4145.1 1269.25 4142.94 1255.88 4141.5 c
-1255.88 4137 l
-1313.84 4137 l
-1344.26 4137 1364 4150.5 1364 4170.84 c
-1364 4179.12 1360.73 4186.32 1354.7 4191.9 c
-1348.4 4197.48 1342.28 4200 1329.68 4202.7 c
-1350.56 4208.82 1358 4216.2 1358 4229.88 c
-1358 4248.42 1341.55 4259 1311.5 4259 c
-h
-1301 4198.74 m
-1305.92 4198.74 l
-1324.46 4198.74 1333 4189.2 1333 4169.22 c
-1333 4151.76 1325.77 4143 1311.5 4143 c
-1303.58 4143 1301 4145.99 1301 4153.74 c
-h
-1301 4244.46 m
-1301 4250.94 1303.39 4254 1310.24 4254 c
-1322.84 4254 1329 4246.03 1329 4228.62 c
-1329 4209.72 1323.08 4204.68 1301 4204.14 c
-h
-1373.06 4137 m
-f*
-1458.14 4148.52 m
-1456.34 4146.72 l
-1455.8 4146.18 1455.26 4146 1454.36 4146 c
-1451.84 4146 1451 4147.44 1451 4150.5 c
-1451 4197.48 l
-1451 4212.78 1437.16 4222.16 1414.94 4222.16 c
-1394.6 4222.16 1380.92 4212.97 1380.92 4199.46 c
-1380.92 4191.9 1385.24 4187.58 1392.62 4187.58 c
-1399.82 4187.58 1404.86 4191.9 1404.86 4198.02 c
-1404.86 4200.54 1403.96 4202.88 1401.62 4205.76 c
-1400 4207.56 1399.46 4208.64 1399.46 4209.72 c
-1399.46 4213.5 1404.32 4216.16 1410.8 4216.16 c
-1421.42 4216.16 1426 4211.37 1426 4200.54 c
-1426 4187.4 l
-1404.89 4180.92 1396.41 4177.68 1389.56 4173.18 c
-1381.46 4167.78 1378 4161.48 1378 4153.56 c
-1378 4142.58 1386.07 4134.48 1397.3 4134.48 c
-1407.74 4134.48 1416.02 4138.08 1425.92 4147.08 c
-1427.9 4137.9 1431.86 4134.48 1440.68 4134.48 c
-1448.42 4134.48 1454 4137.36 1460.84 4144.74 c
-h
-1426 4155 m
-1421.04 4149.42 1417.37 4147.26 1412.96 4147.26 c
-1407.56 4147.26 1404 4152.12 1404 4159.32 c
-1404 4169.76 1411.57 4177.14 1426 4181.1 c
-h
-1463 4137 m
-f*
-1524.22 4195.68 m
-1524.22 4221.8 l
-1520.24 4221.8 l
-1519.16 4219.08 1518.08 4218.2 1515.74 4218.2 c
-1514.66 4218.2 1513.04 4218.55 1510.16 4219.44 c
-1504.4 4221.42 1500.26 4222.16 1496.12 4222.16 c
-1479.74 4222.16 1468 4210.99 1468 4195.86 c
-1468 4183.98 1475.34 4175.7 1493.42 4167.96 c
-1505.84 4162.56 1511 4158.06 1511 4152.3 c
-1511 4145.28 1505.48 4140.48 1497.2 4140.48 c
-1484.6 4140.48 1476.32 4148.62 1472.54 4164.36 c
-1467.5 4164.36 l
-1467.5 4134.66 l
-1472 4134.66 l
-1473.98 4138.44 1475.06 4139.7 1476.68 4139.7 c
-1477.58 4139.7 1479.02 4139.34 1480.82 4138.62 c
-1486.04 4136.46 1495.22 4134.48 1500.26 4134.48 c
-1516.64 4134.48 1528 4145.64 1528 4161.84 c
-1528 4174.62 1521.15 4182.54 1503.14 4189.92 c
-1490.9 4195.14 1486 4199.64 1486 4205.76 c
-1486 4211.7 1490.98 4216.16 1497.74 4216.16 c
-1502.6 4216.16 1507.28 4214.19 1511.24 4210.44 c
-1515.02 4206.84 1517 4203.42 1519.7 4195.68 c
-h
-1533.02 4137 m
-f*
-1604.36 4159.5 m
-1596.98 4150.68 1591.58 4147.48 1583.84 4147.48 c
-1577 4147.48 1571.6 4150.53 1568 4156.62 c
-1564.58 4162.36 1563.14 4168.45 1562.42 4181 c
-1607.78 4181 l
-1606.7 4195.99 1604 4204.3 1598.42 4211.34 c
-1592.66 4218.36 1584.2 4222.16 1574.12 4222.16 c
-1551.62 4222.16 1536.5 4204.33 1536.5 4178.04 c
-1536.5 4151.76 1551.26 4134.48 1573.58 4134.48 c
-1588.16 4134.48 1596.98 4140.06 1608.68 4156.98 c
-h
-1561.52 4188 m
-1562.06 4209.42 1565.3 4216.16 1574.12 4216.16 c
-1579.34 4216.16 1582.58 4213.42 1584.02 4208.1 c
-1584.92 4204.68 1585.28 4199.64 1585.64 4190.46 c
-1585.64 4188 l
-h
-1611.92 4137 m
-f*
-1658 4137 m
-f*
-1761.94 4259 m
-1659.88 4259 l
-1659.88 4254 l
-1672.3 4253.29 1676 4250.63 1676 4241.4 c
-1676 4154.28 l
-1676 4144.92 1673.44 4142.94 1659.88 4141.5 c
-1659.88 4137 l
-1724.68 4137 l
-1724.68 4142 l
-1708.12 4142.69 1705 4144.77 1705 4154.28 c
-1705 4196.22 l
-1723.28 4195.86 1729.91 4189.2 1732.42 4168.32 c
-1736.92 4168.32 l
-1736.92 4229.16 l
-1732.42 4229.16 l
-1729.19 4208.64 1722.92 4202.34 1705 4202.34 c
-1705 4244.1 l
-1705 4250.76 1707.32 4253 1716.4 4253 c
-1733.14 4253 1743.58 4249.8 1749.16 4243.2 c
-1753.12 4238.7 1755.1 4233.84 1757.62 4222.5 c
-1761.94 4222.5 l
-h
-1766.98 4137 m
-f*
-1806.28 4220 m
-1772.22 4220 l
-1772.22 4215.66 l
-1779.96 4214.58 1782 4212.24 1782 4205.04 c
-1782 4152.12 l
-1782 4144.74 1780.19 4142.76 1772.22 4141.32 c
-1772.22 4137 l
-1820.1 4137 l
-1820.1 4141.32 l
-1809.12 4142.04 1807 4144.38 1807 4155.54 c
-1807 4189.56 l
-1807 4198.92 1812.02 4206.66 1817.94 4206.66 c
-1819.38 4206.66 1821 4205.4 1822.98 4202.52 c
-1826.4 4197.66 1829.1 4196.04 1833.78 4196.04 c
-1840.44 4196.04 1845.12 4201.08 1845.12 4207.92 c
-1845.12 4216.2 1839 4222.16 1830.54 4222.16 c
-1821.55 4222.16 1814.73 4217.47 1806.28 4205.22 c
-h
-1846.92 4137 m
-f*
-1933.14 4148.52 m
-1931.34 4146.72 l
-1930.8 4146.18 1930.26 4146 1929.36 4146 c
-1926.84 4146 1926 4147.44 1926 4150.5 c
-1926 4197.48 l
-1926 4212.78 1912.16 4222.16 1889.94 4222.16 c
-1869.6 4222.16 1855.92 4212.97 1855.92 4199.46 c
-1855.92 4191.9 1860.24 4187.58 1867.62 4187.58 c
-1874.82 4187.58 1879.86 4191.9 1879.86 4198.02 c
-1879.86 4200.54 1878.96 4202.88 1876.62 4205.76 c
-1875 4207.56 1874.46 4208.64 1874.46 4209.72 c
-1874.46 4213.5 1879.32 4216.16 1885.8 4216.16 c
-1896.42 4216.16 1901 4211.37 1901 4200.54 c
-1901 4187.4 l
-1879.89 4180.92 1871.41 4177.68 1864.56 4173.18 c
-1856.46 4167.78 1853 4161.48 1853 4153.56 c
-1853 4142.58 1861.07 4134.48 1872.3 4134.48 c
-1882.74 4134.48 1891.02 4138.08 1900.92 4147.08 c
-1902.9 4137.9 1906.86 4134.48 1915.68 4134.48 c
-1923.42 4134.48 1929 4137.36 1935.84 4144.74 c
-h
-1901 4155 m
-1896.04 4149.42 1892.37 4147.26 1887.96 4147.26 c
-1882.56 4147.26 1879 4152.12 1879 4159.32 c
-1879 4169.76 1886.57 4177.14 1901 4181.1 c
-h
-1938 4137 m
-f*
-1975.46 4220 m
-1940.73 4220 l
-1940.73 4215.66 l
-1948.65 4214.58 1951 4212.42 1951 4205.04 c
-1951 4152.12 l
-1951 4144.74 1948.95 4142.76 1940.73 4141.32 c
-1940.73 4137 l
-1983.93 4137 l
-1983.93 4141.32 l
-1977.63 4142.22 1976 4144.74 1976 4151.58 c
-1976 4199.64 l
-1976 4200.54 1978.51 4203.78 1980.51 4205.76 c
-1984.29 4208.64 1987.53 4210.16 1990.77 4210.16 c
-1997.79 4210.16 2001 4206 2001 4195.14 c
-2001 4151.58 l
-2001 4144.2 1998.9 4141.86 1991.85 4141.32 c
-1991.85 4137 l
-2033.97 4137 l
-2033.97 4141.32 l
-2027.67 4142.04 2026 4144.74 2026 4151.58 c
-2026 4199.64 l
-2026 4200.54 2028.43 4203.6 2030.37 4205.58 c
-2034.33 4208.64 2037.57 4210.16 2040.81 4210.16 c
-2047.65 4210.16 2050 4205.82 2050 4195.14 c
-2050 4151.58 l
-2050 4144.02 2048.1 4141.86 2041.53 4141.32 c
-2041.53 4137 l
-2084.37 4137 l
-2084.37 4141 l
-2077.35 4141.37 2075 4143.6 2075 4151.58 c
-2075 4196.76 l
-2075 4212.24 2065.6 4222.16 2051.07 4222.16 c
-2040.81 4222.16 2033.97 4218.01 2024.61 4206.48 c
-2019.21 4217.82 2012.91 4222.16 2001.57 4222.16 c
-1990.2 4222.16 1982.21 4217.29 1975.46 4206.48 c
-h
-2087.94 4137 m
-f*
-2160.36 4159.5 m
-2152.98 4150.68 2147.58 4147.48 2139.84 4147.48 c
-2133 4147.48 2127.6 4150.53 2124 4156.62 c
-2120.58 4162.36 2119.14 4168.45 2118.42 4181 c
-2163.78 4181 l
-2162.7 4195.99 2160 4204.3 2154.42 4211.34 c
-2148.66 4218.36 2140.2 4222.16 2130.12 4222.16 c
-2107.62 4222.16 2092.5 4204.33 2092.5 4178.04 c
-2092.5 4151.76 2107.26 4134.48 2129.58 4134.48 c
-2144.16 4134.48 2152.98 4140.06 2164.68 4156.98 c
-h
-2117.52 4188 m
-2118.06 4209.42 2121.3 4216.16 2130.12 4216.16 c
-2135.34 4216.16 2138.58 4213.42 2140.02 4208.1 c
-2140.92 4204.68 2141.28 4199.64 2141.64 4190.46 c
-2141.64 4188 l
-h
-2167.92 4137 m
-f*
-1 i
-1252.55 4102.55 914.4 15.5999 re
-f
-0.2 i
-3964.26 4176.36 m
-3953.64 4165.2 3947.88 4160.88 3939.06 4157.46 c
-3933.84 4155.3 3927.9 4154.58 3922.86 4154.58 c
-3910.98 4154.58 3899.64 4160.74 3894.42 4169.88 c
-3889.2 4179.42 3887 4192.2 3887 4210.38 c
-3887 4247.64 3898.23 4267.7 3919.8 4267.7 c
-3928.26 4267.7 3936 4264.38 3943.74 4257.36 c
-3951.48 4250.52 3955.62 4244.4 3961.92 4230.72 c
-3966.42 4230.72 l
-3966.42 4273.16 l
-3961.56 4273.16 l
-3958.86 4266.43 3957.06 4264.56 3953.64 4264.56 c
-3951.84 4264.56 3949.5 4265.28 3945.36 4267.08 c
-3934.92 4271.4 3926.1 4273.7 3917.46 4273.7 c
-3881.64 4273.7 3855 4245.84 3855 4208.76 c
-3855 4171.68 3881.21 4145.58 3918.54 4145.58 c
-3939.24 4145.58 3951.48 4151.88 3969.66 4171.86 c
-h
-3975.96 4149 m
-f*
-4039.18 4146.66 m
-4046.78 4149.36 4051.02 4150.08 4062.5 4151.34 c
-4073.66 4152.6 l
-4073.66 4157 l
-4065.74 4157.35 4064 4159.63 4064 4167.18 c
-4064 4232 l
-4027.4 4232 l
-4027.4 4227.66 l
-4036.4 4226.94 4039 4224.78 4039 4217.04 c
-4039 4166.1 l
-4032.88 4160.16 4029.18 4158.48 4023.8 4158.48 c
-4016.42 4158.48 4014 4162 4014 4170.96 c
-4014 4232 l
-3979.88 4232 l
-3979.88 4227.66 l
-3987.26 4226.22 3989 4224.6 3989 4217.04 c
-3989 4171.68 l
-3989 4155.84 3997.89 4146.48 4012.64 4146.48 c
-4022.16 4146.48 4028.56 4149.36 4039.18 4158.36 c
-h
-4077.08 4149 m
-f*
-4115.28 4232 m
-4081.22 4232 l
-4081.22 4227.66 l
-4088.96 4226.58 4091 4224.24 4091 4217.04 c
-4091 4164.12 l
-4091 4156.74 4089.19 4154.76 4081.22 4153.32 c
-4081.22 4149 l
-4129.1 4149 l
-4129.1 4153.32 l
-4118.12 4154.04 4116 4156.38 4116 4167.54 c
-4116 4201.56 l
-4116 4210.92 4121.02 4218.66 4126.94 4218.66 c
-4128.38 4218.66 4130 4217.4 4131.98 4214.52 c
-4135.4 4209.66 4138.1 4208.04 4142.78 4208.04 c
-4149.44 4208.04 4154.12 4213.08 4154.12 4219.92 c
-4154.12 4228.2 4148 4234.16 4139.54 4234.16 c
-4130.55 4234.16 4123.73 4229.47 4115.28 4217.22 c
-h
-4155.92 4149 m
-f*
-4196.28 4232 m
-4162.22 4232 l
-4162.22 4227.66 l
-4169.96 4226.58 4172 4224.24 4172 4217.04 c
-4172 4164.12 l
-4172 4156.74 4170.19 4154.76 4162.22 4153.32 c
-4162.22 4149 l
-4210.1 4149 l
-4210.1 4153.32 l
-4199.12 4154.04 4197 4156.38 4197 4167.54 c
-4197 4201.56 l
-4197 4210.92 4202.02 4218.66 4207.94 4218.66 c
-4209.38 4218.66 4211 4217.4 4212.98 4214.52 c
-4216.4 4209.66 4219.1 4208.04 4223.78 4208.04 c
-4230.44 4208.04 4235.12 4213.08 4235.12 4219.92 c
-4235.12 4228.2 4229 4234.16 4220.54 4234.16 c
-4211.55 4234.16 4204.73 4229.47 4196.28 4217.22 c
-h
-4236.92 4149 m
-f*
-4308.36 4171.5 m
-4300.98 4162.68 4295.58 4159.48 4287.84 4159.48 c
-4281 4159.48 4275.6 4162.53 4272 4168.62 c
-4268.58 4174.36 4267.14 4180.45 4266.42 4193 c
-4311.78 4193 l
-4310.7 4207.99 4308 4216.3 4302.42 4223.34 c
-4296.66 4230.36 4288.2 4234.16 4278.12 4234.16 c
-4255.62 4234.16 4240.5 4216.33 4240.5 4190.04 c
-4240.5 4163.76 4255.26 4146.48 4277.58 4146.48 c
-4292.16 4146.48 4300.98 4152.06 4312.68 4168.98 c
-h
-4265.52 4200 m
-4266.06 4221.42 4269.3 4228.16 4278.12 4228.16 c
-4283.34 4228.16 4286.58 4225.42 4288.02 4220.1 c
-4288.92 4216.68 4289.28 4211.64 4289.64 4202.46 c
-4289.64 4200 l
-h
-4315.92 4149 m
-f*
-4353.82 4232 m
-4319.78 4232 l
-4319.78 4227.66 l
-4327.7 4226.4 4329 4224.6 4329 4217.04 c
-4329 4164.12 l
-4329 4156.56 4327.61 4154.94 4319.78 4153.32 c
-4319.78 4149 l
-4363.16 4149 l
-4363.16 4153.32 l
-4356.5 4154.22 4354 4156.92 4354 4163.58 c
-4354 4211.64 l
-4354 4212.36 4355.4 4214.16 4357.4 4215.96 c
-4361.36 4219.92 4365.68 4222.16 4370 4222.16 c
-4376.12 4222.16 4379 4217.27 4379 4207.14 c
-4379 4163.58 l
-4379 4156.92 4376.71 4154.04 4370.72 4153.32 c
-4370.72 4149 l
-4413.02 4149 l
-4413.02 4153.32 l
-4406 4153.86 4404 4156.02 4404 4163.58 c
-4404 4208.76 l
-4404 4224.24 4394.54 4234.16 4379.9 4234.16 c
-4368.96 4234.16 4360.57 4229.11 4353.82 4218.48 c
-h
-4416.08 4149 m
-f*
-4470.9 4232 m
-4454 4232 l
-4454 4262.4 l
-4449.48 4262.4 l
-4438.5 4246.92 4431.3 4238.82 4419.6 4228.92 c
-4419.6 4224 l
-4429 4224 l
-4429 4165.74 l
-4429 4154.04 4436.73 4146.84 4449.12 4146.84 c
-4461.18 4146.84 4468.38 4152.24 4475.76 4167 c
-4471.26 4168.98 l
-4467.66 4162.14 4464.78 4159.84 4461 4159.84 c
-4455.96 4159.84 4454 4162.83 4454 4169.88 c
-4454 4224 l
-4470.9 4224 l
-h
-4475.94 4149 m
-f*
-4521 4149 m
-f*
-4625.94 4271 m
-4523.88 4271 l
-4523.88 4266 l
-4536.3 4265.29 4540 4262.63 4540 4253.4 c
-4540 4166.28 l
-4540 4156.92 4537.44 4154.94 4523.88 4153.5 c
-4523.88 4149 l
-4588.68 4149 l
-4588.68 4154 l
-4572.12 4154.69 4569 4156.77 4569 4166.28 c
-4569 4208.22 l
-4587.28 4207.86 4593.91 4201.2 4596.42 4180.32 c
-4600.92 4180.32 l
-4600.92 4241.16 l
-4596.42 4241.16 l
-4593.19 4220.64 4586.92 4214.34 4569 4214.34 c
-4569 4256.1 l
-4569 4262.76 4571.32 4265 4580.4 4265 c
-4597.14 4265 4607.58 4261.8 4613.16 4255.2 c
-4617.12 4250.7 4619.1 4245.84 4621.62 4234.5 c
-4625.94 4234.5 l
-h
-4630.98 4149 m
-f*
-4670.28 4232 m
-4636.22 4232 l
-4636.22 4227.66 l
-4643.96 4226.58 4646 4224.24 4646 4217.04 c
-4646 4164.12 l
-4646 4156.74 4644.19 4154.76 4636.22 4153.32 c
-4636.22 4149 l
-4684.1 4149 l
-4684.1 4153.32 l
-4673.12 4154.04 4671 4156.38 4671 4167.54 c
-4671 4201.56 l
-4671 4210.92 4676.02 4218.66 4681.94 4218.66 c
-4683.38 4218.66 4685 4217.4 4686.98 4214.52 c
-4690.4 4209.66 4693.1 4208.04 4697.78 4208.04 c
-4704.44 4208.04 4709.12 4213.08 4709.12 4219.92 c
-4709.12 4228.2 4703 4234.16 4694.54 4234.16 c
-4685.55 4234.16 4678.73 4229.47 4670.28 4217.22 c
-h
-4710.92 4149 m
-f*
-4796.14 4160.52 m
-4794.34 4158.72 l
-4793.8 4158.18 4793.26 4158 4792.36 4158 c
-4789.84 4158 4789 4159.44 4789 4162.5 c
-4789 4209.48 l
-4789 4224.78 4775.16 4234.16 4752.94 4234.16 c
-4732.6 4234.16 4718.92 4224.97 4718.92 4211.46 c
-4718.92 4203.9 4723.24 4199.58 4730.62 4199.58 c
-4737.82 4199.58 4742.86 4203.9 4742.86 4210.02 c
-4742.86 4212.54 4741.96 4214.88 4739.62 4217.76 c
-4738 4219.56 4737.46 4220.64 4737.46 4221.72 c
-4737.46 4225.5 4742.32 4228.16 4748.8 4228.16 c
-4759.42 4228.16 4764 4223.37 4764 4212.54 c
-4764 4199.4 l
-4742.89 4192.92 4734.41 4189.68 4727.56 4185.18 c
-4719.46 4179.78 4716 4173.48 4716 4165.56 c
-4716 4154.58 4724.07 4146.48 4735.3 4146.48 c
-4745.74 4146.48 4754.02 4150.08 4763.92 4159.08 c
-4765.9 4149.9 4769.86 4146.48 4778.68 4146.48 c
-4786.42 4146.48 4792 4149.36 4798.84 4156.74 c
-h
-4764 4167 m
-4759.04 4161.42 4755.37 4159.26 4750.96 4159.26 c
-4745.56 4159.26 4742 4164.12 4742 4171.32 c
-4742 4181.76 4749.57 4189.14 4764 4193.1 c
-h
-4801 4149 m
-f*
-4838.46 4232 m
-4803.73 4232 l
-4803.73 4227.66 l
-4811.65 4226.58 4814 4224.42 4814 4217.04 c
-4814 4164.12 l
-4814 4156.74 4811.95 4154.76 4803.73 4153.32 c
-4803.73 4149 l
-4846.93 4149 l
-4846.93 4153.32 l
-4840.63 4154.22 4839 4156.74 4839 4163.58 c
-4839 4211.64 l
-4839 4212.54 4841.51 4215.78 4843.51 4217.76 c
-4847.29 4220.64 4850.53 4222.16 4853.77 4222.16 c
-4860.79 4222.16 4864 4218 4864 4207.14 c
-4864 4163.58 l
-4864 4156.2 4861.9 4153.86 4854.85 4153.32 c
-4854.85 4149 l
-4896.97 4149 l
-4896.97 4153.32 l
-4890.67 4154.04 4889 4156.74 4889 4163.58 c
-4889 4211.64 l
-4889 4212.54 4891.43 4215.6 4893.37 4217.58 c
-4897.33 4220.64 4900.57 4222.16 4903.81 4222.16 c
-4910.65 4222.16 4913 4217.82 4913 4207.14 c
-4913 4163.58 l
-4913 4156.02 4911.1 4153.86 4904.53 4153.32 c
-4904.53 4149 l
-4947.37 4149 l
-4947.37 4153 l
-4940.35 4153.37 4938 4155.6 4938 4163.58 c
-4938 4208.76 l
-4938 4224.24 4928.6 4234.16 4914.07 4234.16 c
-4903.81 4234.16 4896.97 4230.01 4887.61 4218.48 c
-4882.21 4229.82 4875.91 4234.16 4864.57 4234.16 c
-4853.2 4234.16 4845.21 4229.29 4838.46 4218.48 c
-h
-4950.94 4149 m
-f*
-5023.36 4171.5 m
-5015.98 4162.68 5010.58 4159.48 5002.84 4159.48 c
-4996 4159.48 4990.6 4162.53 4987 4168.62 c
-4983.58 4174.36 4982.14 4180.45 4981.42 4193 c
-5026.78 4193 l
-5025.7 4207.99 5023 4216.3 5017.42 4223.34 c
-5011.66 4230.36 5003.2 4234.16 4993.12 4234.16 c
-4970.62 4234.16 4955.5 4216.33 4955.5 4190.04 c
-4955.5 4163.76 4970.26 4146.48 4992.58 4146.48 c
-5007.16 4146.48 5015.98 4152.06 5027.68 4168.98 c
-h
-4980.52 4200 m
-4981.06 4221.42 4984.3 4228.16 4993.12 4228.16 c
-4998.34 4228.16 5001.58 4225.42 5003.02 4220.1 c
-5003.92 4216.68 5004.28 4211.64 5004.64 4202.46 c
-5004.64 4200 l
-h
-5030.92 4149 m
-f*
-1 i
-3845.75 4114.55 1184.4 15.5999 re
-f
-1 g
-4451.75 4341.35 m
-4618.55 4492.55 l
-4535.75 4492.55 l
-4535.75 4646.15 l
-4370.15 4646.15 l
-4370.15 4492.55 l
-4288.55 4492.55 l
-f*
-0 g
-4451.75 4341.35 m
-4618.55 4492.55 l
-4535.75 4492.55 l
-4535.75 4646.15 l
-4370.15 4646.15 l
-4370.15 4492.55 l
-4288.55 4492.55 l
-4451.75 4341.35 l
-4451.75 4354.55 l
-4313.75 4481.75 l
-4379.75 4481.75 l
-4379.75 4636.55 l
-4526.15 4636.55 l
-4526.15 4481.75 l
-4592.15 4481.75 l
-4451.75 4354.55 l
-4451.75 4341.35 l
-f*
-0.201248 i
-1299.33 5632 m
-1185.22 5632 l
-1185.22 5627 l
-1199.11 5626.2 1203 5623.18 1203 5612.72 c
-1203 5515.32 l
-1203 5504.85 1200.17 5502.64 1185.22 5501.03 c
-1185.22 5496 l
-1257.67 5496 l
-1257.67 5501 l
-1239.15 5501.81 1236 5504.23 1236 5515.32 c
-1236 5562.21 l
-1256.22 5561.81 1263.55 5554.36 1266.32 5531.02 c
-1271.35 5531.02 l
-1271.35 5599.04 l
-1266.32 5599.04 l
-1262.76 5576.1 1255.82 5569.05 1236 5569.05 c
-1236 5615.74 l
-1236 5623.19 1238.52 5625 1248.41 5625 c
-1267.13 5625 1278.8 5621.64 1285.04 5614.74 c
-1289.47 5609.71 1291.68 5604.27 1294.5 5591.59 c
-1299.33 5591.59 l
-h
-1304.96 5496 m
-f*
-1349.19 5589 m
-1310.84 5589 l
-1310.84 5583.95 l
-1319.49 5582.74 1322 5580.12 1322 5572.07 c
-1322 5512.9 l
-1322 5504.65 1319.93 5502.44 1310.84 5500.83 c
-1310.84 5496 l
-1364.37 5496 l
-1364.37 5500.83 l
-1352.09 5501.63 1350 5504.25 1350 5516.73 c
-1350 5554.76 l
-1350 5565.23 1355.49 5573.88 1361.95 5573.88 c
-1363.56 5573.88 1365.37 5572.47 1367.59 5569.25 c
-1371.41 5563.82 1374.43 5562.01 1379.66 5562.01 c
-1387.11 5562.01 1392.34 5567.64 1392.34 5575.29 c
-1392.34 5584.55 1385.5 5591.41 1376.04 5591.41 c
-1366.1 5591.41 1358.54 5586.12 1349.19 5572.27 c
-h
-1394.35 5496 m
-f*
-1489.19 5508.88 m
-1487.18 5506.87 l
-1486.57 5506.26 1485.97 5506.06 1484.96 5506.06 c
-1482.15 5506.06 1481 5507.67 1481 5511.09 c
-1481 5563.62 l
-1481 5580.73 1465.6 5591.42 1440.89 5591.42 c
-1418.15 5591.42 1402.85 5581.06 1402.85 5565.83 c
-1402.85 5557.38 1407.69 5552.55 1415.94 5552.55 c
-1423.99 5552.55 1429.62 5557.38 1429.62 5564.22 c
-1429.62 5567.04 1428.61 5569.66 1426 5572.88 c
-1424.19 5574.89 1423.58 5576.1 1423.58 5577.3 c
-1423.58 5581.53 1429.02 5584.42 1436.26 5584.42 c
-1448.14 5584.42 1453.86 5579.08 1453.86 5567.04 c
-1453.86 5552.35 l
-1429.91 5545.1 1420.29 5541.48 1412.51 5536.45 c
-1403.46 5530.41 1399 5523.37 1399 5514.52 c
-1399 5502.24 1408.27 5493.18 1421.17 5493.18 c
-1432.84 5493.18 1442.1 5497.21 1453.17 5507.27 c
-1455.38 5497.01 1459.81 5493.18 1469.67 5493.18 c
-1478.32 5493.18 1484.56 5496.4 1492.21 5504.65 c
-h
-1453 5516.13 m
-1447.55 5509.89 1443.52 5507.47 1438.68 5507.47 c
-1432.64 5507.47 1428 5512.91 1428 5520.96 c
-1428 5532.63 1436.61 5540.88 1453 5545.31 c
-h
-1494.62 5496 m
-f*
-1536.4 5589 m
-1497.7 5589 l
-1497.7 5583.95 l
-1506.55 5582.74 1509 5580.32 1509 5572.07 c
-1509 5512.9 l
-1509 5504.65 1506.74 5502.44 1497.7 5500.83 c
-1497.7 5496 l
-1546 5496 l
-1546 5500.83 l
-1538.95 5501.84 1537 5504.65 1537 5512.3 c
-1537 5566.03 l
-1537 5567.04 1539.87 5570.66 1542.18 5572.88 c
-1546.4 5576.1 1550.02 5578.42 1553.65 5578.42 c
-1561.5 5578.42 1565 5573.59 1565 5561 c
-1565 5512.3 l
-1565 5504.05 1562.68 5501.43 1554.85 5500.83 c
-1554.85 5496 l
-1601.95 5496 l
-1601.95 5500.83 l
-1594.9 5501.64 1593 5504.65 1593 5512.3 c
-1593 5566.03 l
-1593 5567.04 1595.73 5570.46 1597.92 5572.68 c
-1602.35 5576.1 1605.97 5578.42 1609.59 5578.42 c
-1617.24 5578.42 1620 5573.38 1620 5561 c
-1620 5512.3 l
-1620 5503.85 1617.85 5501.43 1610.4 5500.83 c
-1610.4 5496 l
-1658.3 5496 l
-1658.3 5501 l
-1650.45 5501.4 1648 5503.78 1648 5512.3 c
-1648 5562.81 l
-1648 5580.12 1637.43 5591.42 1621.07 5591.42 c
-1609.59 5591.42 1601.95 5586.73 1591.48 5573.68 c
-1585.44 5586.36 1578.4 5591.42 1565.72 5591.42 c
-1552.95 5591.42 1543.98 5585.91 1536.4 5573.68 c
-h
-1661.64 5496 m
-f*
-1739.9 5521.16 m
-1731.65 5511.29 1725.61 5507.18 1716.96 5507.18 c
-1709.31 5507.18 1703.27 5510.77 1699.25 5517.94 c
-1695.43 5524.54 1693.82 5531.56 1693.01 5546 c
-1743.73 5546 l
-1742.52 5562.36 1739.5 5571.43 1733.26 5579.12 c
-1726.82 5586.96 1717.36 5591.42 1706.09 5591.42 c
-1680.94 5591.42 1664.03 5571.4 1664.03 5541.88 c
-1664.03 5512.5 1680.53 5493.18 1705.49 5493.18 c
-1721.79 5493.18 1731.65 5499.42 1744.73 5518.34 c
-h
-1692 5553 m
-1692.61 5576.96 1696.23 5584.42 1706.09 5584.42 c
-1711.93 5584.42 1715.55 5581.38 1717.16 5575.49 c
-1718.17 5571.67 1718.57 5566.03 1718.97 5555.77 c
-1718.97 5553 l
-h
-1748.35 5496 m
-f*
-1845.16 5591.59 m
-1845.16 5635.22 l
-1839.37 5635.22 l
-1837.96 5629.82 1836.55 5628.42 1832.93 5628.42 c
-1831.12 5628.42 1828.7 5629.03 1824.47 5630.43 c
-1815.22 5633.86 1808.78 5635.02 1800.93 5635.02 c
-1773.56 5635.02 1757 5619.54 1757 5594.01 c
-1757 5588.98 1757.75 5584.75 1759.07 5580.73 c
-1763.29 5570.06 1774.16 5560.6 1791.27 5552.35 c
-1804.75 5545.91 l
-1822.46 5537.46 1827 5532.22 1827 5521.56 c
-1827 5507.67 1817.25 5499.18 1801.94 5499.18 c
-1790.26 5499.18 1780.6 5503.89 1772.96 5513.31 c
-1767.12 5520.75 1764.3 5527.6 1760.88 5541.88 c
-1755.04 5541.88 l
-1755.04 5492.18 l
-1760.88 5492.18 l
-1762.09 5497.41 1763.7 5499.02 1766.92 5499.02 c
-1768.53 5499.02 1770.74 5498.42 1775.17 5497.01 c
-1785.03 5493.59 1792.48 5492.18 1801.33 5492.18 c
-1831.12 5492.18 1851 5509.28 1851 5534.64 c
-1851 5549.73 1842.04 5564.83 1829.1 5571.27 c
-1799.52 5585.96 l
-1783.22 5594.01 1779 5598.84 1779 5608.7 c
-1779 5621.18 1787.37 5628.02 1800.93 5628.02 c
-1809.99 5628.02 1818.44 5624.47 1825.68 5617.55 c
-1832.53 5610.51 1835.75 5604.67 1839.77 5591.59 c
-h
-1859.89 5496 m
-f*
-1940.9 5521.16 m
-1932.65 5511.29 1926.61 5507.18 1917.96 5507.18 c
-1910.31 5507.18 1904.27 5510.77 1900.25 5517.94 c
-1896.43 5524.54 1894.82 5531.56 1894.01 5546 c
-1944.73 5546 l
-1943.52 5562.36 1940.5 5571.43 1934.26 5579.12 c
-1927.82 5586.96 1918.36 5591.42 1907.09 5591.42 c
-1881.94 5591.42 1865.03 5571.4 1865.03 5541.88 c
-1865.03 5512.5 1881.53 5493.18 1906.49 5493.18 c
-1922.79 5493.18 1932.65 5499.42 1945.73 5518.34 c
-h
-1893 5553 m
-1893.61 5576.96 1897.23 5584.42 1907.09 5584.42 c
-1912.93 5584.42 1916.55 5581.38 1918.16 5575.49 c
-1919.17 5571.67 1919.57 5566.03 1919.97 5555.77 c
-1919.97 5553 l
-h
-1949.35 5496 m
-f*
-2010.38 5589 m
-1991 5589 l
-1991 5622.79 l
-1986.43 5622.79 l
-1974.16 5605.48 1966.11 5596.42 1953.02 5585.35 c
-1953.02 5580 l
-1963 5580 l
-1963 5514.72 l
-1963 5501.64 1971.84 5493.59 1986.03 5493.59 c
-1999.51 5493.59 2007.56 5499.62 2015.81 5516.12 c
-2010.78 5518.34 l
-2006.76 5510.69 2003.54 5507.59 1999.31 5507.59 c
-1993.68 5507.59 1991 5511.09 1991 5519.34 c
-1991 5580 l
-2010.38 5580 l
-h
-2016.02 5496 m
-f*
-1 i
-3845.75 5319.35 m
-3800.15 5330.15 3752.15 5336.15 3702.95 5336.15 c
-3534.95 5336.15 3387.35 5266.55 3341.75 5164.55 c
-S
-3790.55 5280.95 m
-3825.35 5319.35 l
-3821.75 5370.95 l
-3951.35 5276.15 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/fsexample.eps b/ast-5.3-1/sun211_figures/fsexample.eps
deleted file mode 100644
index d9d5632..0000000
--- a/ast-5.3-1/sun211_figures/fsexample.eps
+++ /dev/null
@@ -1,1786 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 114 303 503 613
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/11 14:23:38
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5024.15 5691.35 m
-5024.15 5900.15 4854.95 6070.55 4644.95 6070.55 c
-1581.35 6070.55 l
-1372.55 6070.55 1202.15 5900.15 1202.15 5691.35 c
-1202.15 3418.55 l
-1202.15 3208.55 1372.55 3039.35 1581.35 3039.35 c
-4644.95 3039.35 l
-4854.95 3039.35 5024.15 3208.55 5024.15 3418.55 c
-f*
-1 g
-4959.35 5747.75 m
-4959.35 5955.35 4790.15 6124.55 4582.55 6124.55 c
-1526.15 6124.55 l
-1317.35 6124.55 1148.15 5955.35 1148.15 5747.75 c
-1148.15 3480.95 l
-1148.15 3273.35 1317.35 3104.15 1526.15 3104.15 c
-4581.35 3104.15 l
-4790.15 3104.15 4959.35 3273.35 4959.35 3480.95 c
-f*
-8 w
-1 J
-1 j
-0 g
-4959.35 5747.75 m
-4959.35 5955.35 4790.15 6124.55 4582.55 6124.55 c
-1526.15 6124.55 l
-1317.35 6124.55 1148.15 5955.35 1148.15 5747.75 c
-1148.15 3480.95 l
-1148.15 3273.35 1317.35 3104.15 1526.15 3104.15 c
-4581.35 3104.15 l
-4790.15 3104.15 4959.35 3273.35 4959.35 3480.95 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1563.35 5256.95 l
-1451.75 5256.95 1360.55 5165.75 1360.55 5055.35 c
-1360.55 4917.35 l
-1360.55 4806.95 1451.75 4715.75 1563.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1509.35 5306.15 l
-1400.15 5306.15 1311.35 5218.55 1311.35 5111.75 c
-1311.35 4979.75 l
-1311.35 4872.95 1400.15 4785.35 1509.35 4785.35 c
-1995.35 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-f*
-16 w
-0 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1509.35 5306.15 l
-1400.15 5306.15 1311.35 5218.55 1311.35 5111.75 c
-1311.35 4979.75 l
-1311.35 4872.95 1400.15 4785.35 1509.35 4785.35 c
-1995.35 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-h
-S
-0.201248 i
-1539.33 5152 m
-1425.22 5152 l
-1425.22 5147 l
-1439.11 5146.2 1443 5143.18 1443 5132.72 c
-1443 5035.32 l
-1443 5024.85 1440.17 5022.64 1425.22 5021.03 c
-1425.22 5016 l
-1497.67 5016 l
-1497.67 5021 l
-1479.15 5021.81 1476 5024.23 1476 5035.32 c
-1476 5082.21 l
-1496.22 5081.81 1503.55 5074.36 1506.32 5051.02 c
-1511.35 5051.02 l
-1511.35 5119.04 l
-1506.32 5119.04 l
-1502.76 5096.1 1495.82 5089.05 1476 5089.05 c
-1476 5135.74 l
-1476 5143.19 1478.52 5145 1488.41 5145 c
-1507.13 5145 1518.8 5141.64 1525.04 5134.74 c
-1529.47 5129.71 1531.68 5124.27 1534.5 5111.59 c
-1539.33 5111.59 l
-h
-1544.96 5016 m
-f*
-1589.19 5109 m
-1550.84 5109 l
-1550.84 5103.95 l
-1559.49 5102.74 1562 5100.12 1562 5092.07 c
-1562 5032.9 l
-1562 5024.65 1559.93 5022.44 1550.84 5020.83 c
-1550.84 5016 l
-1604.37 5016 l
-1604.37 5020.83 l
-1592.09 5021.63 1590 5024.25 1590 5036.73 c
-1590 5074.76 l
-1590 5085.23 1595.49 5093.88 1601.95 5093.88 c
-1603.56 5093.88 1605.37 5092.47 1607.59 5089.25 c
-1611.41 5083.82 1614.43 5082.01 1619.66 5082.01 c
-1627.11 5082.01 1632.34 5087.64 1632.34 5095.29 c
-1632.34 5104.55 1625.5 5111.41 1616.04 5111.41 c
-1606.1 5111.41 1598.54 5106.12 1589.19 5092.27 c
-h
-1634.35 5016 m
-f*
-1729.19 5028.88 m
-1727.18 5026.87 l
-1726.57 5026.26 1725.97 5026.06 1724.96 5026.06 c
-1722.15 5026.06 1721 5027.67 1721 5031.09 c
-1721 5083.62 l
-1721 5100.73 1705.6 5111.42 1680.89 5111.42 c
-1658.15 5111.42 1642.85 5101.06 1642.85 5085.83 c
-1642.85 5077.38 1647.69 5072.55 1655.94 5072.55 c
-1663.99 5072.55 1669.62 5077.38 1669.62 5084.22 c
-1669.62 5087.04 1668.61 5089.66 1666 5092.88 c
-1664.19 5094.89 1663.58 5096.1 1663.58 5097.3 c
-1663.58 5101.53 1669.02 5104.42 1676.26 5104.42 c
-1688.14 5104.42 1693.86 5099.08 1693.86 5087.04 c
-1693.86 5072.35 l
-1669.91 5065.1 1660.29 5061.48 1652.51 5056.45 c
-1643.46 5050.41 1639 5043.37 1639 5034.52 c
-1639 5022.24 1648.27 5013.18 1661.17 5013.18 c
-1672.84 5013.18 1682.1 5017.21 1693.17 5027.27 c
-1695.38 5017.01 1699.81 5013.18 1709.67 5013.18 c
-1718.32 5013.18 1724.56 5016.4 1732.21 5024.65 c
-h
-1693 5036.13 m
-1687.55 5029.89 1683.52 5027.47 1678.68 5027.47 c
-1672.64 5027.47 1668 5032.91 1668 5040.96 c
-1668 5052.63 1676.61 5060.88 1693 5065.31 c
-h
-1734.62 5016 m
-f*
-1776.4 5109 m
-1737.7 5109 l
-1737.7 5103.95 l
-1746.55 5102.74 1749 5100.32 1749 5092.07 c
-1749 5032.9 l
-1749 5024.65 1746.74 5022.44 1737.7 5020.83 c
-1737.7 5016 l
-1786 5016 l
-1786 5020.83 l
-1778.95 5021.84 1777 5024.65 1777 5032.3 c
-1777 5086.03 l
-1777 5087.04 1779.87 5090.66 1782.18 5092.88 c
-1786.4 5096.1 1790.02 5098.42 1793.65 5098.42 c
-1801.5 5098.42 1805 5093.59 1805 5081 c
-1805 5032.3 l
-1805 5024.05 1802.68 5021.43 1794.85 5020.83 c
-1794.85 5016 l
-1841.95 5016 l
-1841.95 5020.83 l
-1834.9 5021.64 1833 5024.65 1833 5032.3 c
-1833 5086.03 l
-1833 5087.04 1835.73 5090.46 1837.92 5092.68 c
-1842.35 5096.1 1845.97 5098.42 1849.59 5098.42 c
-1857.24 5098.42 1860 5093.38 1860 5081 c
-1860 5032.3 l
-1860 5023.85 1857.85 5021.43 1850.4 5020.83 c
-1850.4 5016 l
-1898.3 5016 l
-1898.3 5021 l
-1890.45 5021.4 1888 5023.78 1888 5032.3 c
-1888 5082.81 l
-1888 5100.12 1877.43 5111.42 1861.07 5111.42 c
-1849.59 5111.42 1841.95 5106.73 1831.48 5093.68 c
-1825.44 5106.36 1818.4 5111.42 1805.72 5111.42 c
-1792.95 5111.42 1783.98 5105.91 1776.4 5093.68 c
-h
-1901.64 5016 m
-f*
-1979.9 5041.16 m
-1971.65 5031.29 1965.61 5027.18 1956.96 5027.18 c
-1949.31 5027.18 1943.27 5030.77 1939.25 5037.94 c
-1935.43 5044.54 1933.82 5051.56 1933.01 5066 c
-1983.73 5066 l
-1982.52 5082.36 1979.5 5091.43 1973.26 5099.12 c
-1966.82 5106.96 1957.36 5111.42 1946.09 5111.42 c
-1920.94 5111.42 1904.03 5091.4 1904.03 5061.88 c
-1904.03 5032.5 1920.53 5013.18 1945.49 5013.18 c
-1961.79 5013.18 1971.65 5019.42 1984.73 5038.34 c
-h
-1932 5073 m
-1932.61 5096.96 1936.23 5104.42 1946.09 5104.42 c
-1951.93 5104.42 1955.55 5101.38 1957.16 5095.49 c
-1958.17 5091.67 1958.57 5086.03 1958.97 5075.77 c
-1958.97 5073 l
-h
-1988.35 5016 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -5016]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4722.95 4254.95 m
-4722.95 4366.55 4631.75 4457.75 4520.15 4457.75 c
-4023.35 4457.75 l
-3911.75 4457.75 3820.55 4366.55 3820.55 4254.95 c
-3820.55 4118.15 l
-3820.55 4006.55 3911.75 3915.35 4023.35 3915.35 c
-4520.15 3915.35 l
-4631.75 3915.35 4722.95 4006.55 4722.95 4118.15 c
-f*
-1 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-f*
-0 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-h
-S
-0.201248 i
-3999.33 4353 m
-3885.22 4353 l
-3885.22 4348 l
-3899.11 4347.2 3903 4344.18 3903 4333.72 c
-3903 4236.32 l
-3903 4225.85 3900.17 4223.64 3885.22 4222.03 c
-3885.22 4217 l
-3957.67 4217 l
-3957.67 4222 l
-3939.15 4222.81 3936 4225.23 3936 4236.32 c
-3936 4283.21 l
-3956.22 4282.81 3963.55 4275.36 3966.32 4252.02 c
-3971.35 4252.02 l
-3971.35 4320.04 l
-3966.32 4320.04 l
-3962.76 4297.1 3955.82 4290.05 3936 4290.05 c
-3936 4336.74 l
-3936 4344.19 3938.52 4346 3948.41 4346 c
-3967.13 4346 3978.8 4342.64 3985.04 4335.74 c
-3989.47 4330.71 3991.68 4325.27 3994.5 4312.59 c
-3999.33 4312.59 l
-h
-4004.96 4217 m
-f*
-4049.19 4310 m
-4010.84 4310 l
-4010.84 4304.95 l
-4019.49 4303.74 4022 4301.12 4022 4293.07 c
-4022 4233.9 l
-4022 4225.65 4019.93 4223.44 4010.84 4221.83 c
-4010.84 4217 l
-4064.37 4217 l
-4064.37 4221.83 l
-4052.09 4222.63 4050 4225.25 4050 4237.73 c
-4050 4275.76 l
-4050 4286.23 4055.49 4294.88 4061.95 4294.88 c
-4063.56 4294.88 4065.37 4293.47 4067.59 4290.25 c
-4071.41 4284.82 4074.43 4283.01 4079.66 4283.01 c
-4087.11 4283.01 4092.34 4288.64 4092.34 4296.29 c
-4092.34 4305.55 4085.5 4312.41 4076.04 4312.41 c
-4066.1 4312.41 4058.54 4307.12 4049.19 4293.27 c
-h
-4094.35 4217 m
-f*
-4189.19 4229.88 m
-4187.18 4227.87 l
-4186.57 4227.26 4185.97 4227.06 4184.96 4227.06 c
-4182.15 4227.06 4181 4228.67 4181 4232.09 c
-4181 4284.62 l
-4181 4301.73 4165.6 4312.42 4140.89 4312.42 c
-4118.15 4312.42 4102.85 4302.06 4102.85 4286.83 c
-4102.85 4278.38 4107.69 4273.55 4115.94 4273.55 c
-4123.99 4273.55 4129.62 4278.38 4129.62 4285.22 c
-4129.62 4288.04 4128.61 4290.66 4126 4293.88 c
-4124.19 4295.89 4123.58 4297.1 4123.58 4298.3 c
-4123.58 4302.53 4129.02 4305.42 4136.26 4305.42 c
-4148.14 4305.42 4153.86 4300.08 4153.86 4288.04 c
-4153.86 4273.35 l
-4129.91 4266.1 4120.29 4262.48 4112.51 4257.45 c
-4103.46 4251.41 4099 4244.37 4099 4235.52 c
-4099 4223.24 4108.27 4214.18 4121.17 4214.18 c
-4132.84 4214.18 4142.1 4218.21 4153.17 4228.27 c
-4155.38 4218.01 4159.81 4214.18 4169.67 4214.18 c
-4178.32 4214.18 4184.56 4217.4 4192.21 4225.65 c
-h
-4153 4237.13 m
-4147.55 4230.89 4143.52 4228.47 4138.68 4228.47 c
-4132.64 4228.47 4128 4233.91 4128 4241.96 c
-4128 4253.63 4136.61 4261.88 4153 4266.31 c
-h
-4194.62 4217 m
-f*
-4236.4 4310 m
-4197.7 4310 l
-4197.7 4304.95 l
-4206.55 4303.74 4209 4301.32 4209 4293.07 c
-4209 4233.9 l
-4209 4225.65 4206.74 4223.44 4197.7 4221.83 c
-4197.7 4217 l
-4246 4217 l
-4246 4221.83 l
-4238.95 4222.84 4237 4225.65 4237 4233.3 c
-4237 4287.03 l
-4237 4288.04 4239.87 4291.66 4242.18 4293.88 c
-4246.4 4297.1 4250.02 4299.42 4253.65 4299.42 c
-4261.5 4299.42 4265 4294.59 4265 4282 c
-4265 4233.3 l
-4265 4225.05 4262.68 4222.43 4254.85 4221.83 c
-4254.85 4217 l
-4301.95 4217 l
-4301.95 4221.83 l
-4294.9 4222.64 4293 4225.65 4293 4233.3 c
-4293 4287.03 l
-4293 4288.04 4295.73 4291.46 4297.92 4293.68 c
-4302.35 4297.1 4305.97 4299.42 4309.59 4299.42 c
-4317.24 4299.42 4320 4294.38 4320 4282 c
-4320 4233.3 l
-4320 4224.85 4317.85 4222.43 4310.4 4221.83 c
-4310.4 4217 l
-4358.3 4217 l
-4358.3 4222 l
-4350.45 4222.4 4348 4224.78 4348 4233.3 c
-4348 4283.81 l
-4348 4301.12 4337.43 4312.42 4321.07 4312.42 c
-4309.59 4312.42 4301.95 4307.73 4291.48 4294.68 c
-4285.44 4307.36 4278.4 4312.42 4265.72 4312.42 c
-4252.95 4312.42 4243.98 4306.91 4236.4 4294.68 c
-h
-4361.64 4217 m
-f*
-4439.9 4242.16 m
-4431.65 4232.29 4425.61 4228.18 4416.96 4228.18 c
-4409.31 4228.18 4403.27 4231.77 4399.25 4238.94 c
-4395.43 4245.54 4393.82 4252.56 4393.01 4267 c
-4443.73 4267 l
-4442.52 4283.36 4439.5 4292.43 4433.26 4300.12 c
-4426.82 4307.96 4417.36 4312.42 4406.09 4312.42 c
-4380.94 4312.42 4364.03 4292.4 4364.03 4262.88 c
-4364.03 4233.5 4380.53 4214.18 4405.49 4214.18 c
-4421.79 4214.18 4431.65 4220.42 4444.73 4239.34 c
-h
-4392 4274 m
-4392.61 4297.96 4396.23 4305.42 4406.09 4305.42 c
-4411.93 4305.42 4415.55 4302.38 4417.16 4296.49 c
-4418.17 4292.67 4418.57 4287.03 4418.97 4276.77 c
-4418.97 4274 l
-h
-4448.35 4217 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4484 -4215]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3804.95 3548.15 m
-3804.95 3658.55 3713.75 3749.75 3602.15 3749.75 c
-3106.55 3749.75 l
-2994.95 3749.75 2903.75 3658.55 2903.75 3548.15 c
-2903.75 3410.15 l
-2903.75 3299.75 2994.95 3208.55 3106.55 3208.55 c
-3602.15 3208.55 l
-3713.75 3208.55 3804.95 3299.75 3804.95 3410.15 c
-f*
-1 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-f*
-8 w
-0 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-h
-S
-0.201248 i
-3082.33 3645 m
-2968.22 3645 l
-2968.22 3640 l
-2982.11 3639.2 2986 3636.18 2986 3625.72 c
-2986 3528.32 l
-2986 3517.85 2983.17 3515.64 2968.22 3514.03 c
-2968.22 3509 l
-3040.67 3509 l
-3040.67 3514 l
-3022.15 3514.81 3019 3517.23 3019 3528.32 c
-3019 3575.21 l
-3039.22 3574.81 3046.55 3567.36 3049.32 3544.02 c
-3054.35 3544.02 l
-3054.35 3612.04 l
-3049.32 3612.04 l
-3045.76 3589.1 3038.82 3582.05 3019 3582.05 c
-3019 3628.74 l
-3019 3636.19 3021.52 3638 3031.41 3638 c
-3050.13 3638 3061.8 3634.64 3068.04 3627.74 c
-3072.47 3622.71 3074.68 3617.27 3077.5 3604.59 c
-3082.33 3604.59 l
-h
-3087.96 3509 m
-f*
-3131.19 3602 m
-3092.84 3602 l
-3092.84 3596.95 l
-3101.49 3595.74 3104 3593.12 3104 3585.07 c
-3104 3525.9 l
-3104 3517.65 3101.93 3515.44 3092.84 3513.83 c
-3092.84 3509 l
-3146.37 3509 l
-3146.37 3513.83 l
-3134.09 3514.63 3132 3517.25 3132 3529.73 c
-3132 3567.76 l
-3132 3578.23 3137.49 3586.88 3143.95 3586.88 c
-3145.56 3586.88 3147.37 3585.47 3149.59 3582.25 c
-3153.41 3576.82 3156.43 3575.01 3161.66 3575.01 c
-3169.11 3575.01 3174.34 3580.64 3174.34 3588.29 c
-3174.34 3597.55 3167.5 3604.41 3158.04 3604.41 c
-3148.1 3604.41 3140.54 3599.12 3131.19 3585.27 c
-h
-3176.35 3509 m
-f*
-3271.19 3521.88 m
-3269.18 3519.87 l
-3268.57 3519.26 3267.97 3519.06 3266.96 3519.06 c
-3264.15 3519.06 3263 3520.67 3263 3524.09 c
-3263 3576.62 l
-3263 3593.73 3247.6 3604.42 3222.89 3604.42 c
-3200.15 3604.42 3184.85 3594.06 3184.85 3578.83 c
-3184.85 3570.38 3189.69 3565.55 3197.94 3565.55 c
-3205.99 3565.55 3211.62 3570.38 3211.62 3577.22 c
-3211.62 3580.04 3210.61 3582.66 3208 3585.88 c
-3206.19 3587.89 3205.58 3589.1 3205.58 3590.3 c
-3205.58 3594.53 3211.02 3597.42 3218.26 3597.42 c
-3230.14 3597.42 3235.86 3592.08 3235.86 3580.04 c
-3235.86 3565.35 l
-3211.91 3558.1 3202.29 3554.48 3194.51 3549.45 c
-3185.46 3543.41 3181 3536.37 3181 3527.52 c
-3181 3515.24 3190.27 3506.18 3203.17 3506.18 c
-3214.84 3506.18 3224.1 3510.21 3235.17 3520.27 c
-3237.38 3510.01 3241.81 3506.18 3251.67 3506.18 c
-3260.32 3506.18 3266.56 3509.4 3274.21 3517.65 c
-h
-3235 3529.13 m
-3229.55 3522.89 3225.52 3520.47 3220.68 3520.47 c
-3214.64 3520.47 3210 3525.91 3210 3533.96 c
-3210 3545.63 3218.61 3553.88 3235 3558.31 c
-h
-3276.62 3509 m
-f*
-3318.4 3602 m
-3279.7 3602 l
-3279.7 3596.95 l
-3288.55 3595.74 3291 3593.32 3291 3585.07 c
-3291 3525.9 l
-3291 3517.65 3288.74 3515.44 3279.7 3513.83 c
-3279.7 3509 l
-3328 3509 l
-3328 3513.83 l
-3320.95 3514.84 3319 3517.65 3319 3525.3 c
-3319 3579.03 l
-3319 3580.04 3321.87 3583.66 3324.18 3585.88 c
-3328.4 3589.1 3332.02 3591.42 3335.65 3591.42 c
-3343.5 3591.42 3347 3586.59 3347 3574 c
-3347 3525.3 l
-3347 3517.05 3344.68 3514.43 3336.85 3513.83 c
-3336.85 3509 l
-3383.95 3509 l
-3383.95 3513.83 l
-3376.9 3514.64 3375 3517.65 3375 3525.3 c
-3375 3579.03 l
-3375 3580.04 3377.73 3583.46 3379.92 3585.68 c
-3384.35 3589.1 3387.97 3591.42 3391.59 3591.42 c
-3399.24 3591.42 3402 3586.38 3402 3574 c
-3402 3525.3 l
-3402 3516.85 3399.85 3514.43 3392.4 3513.83 c
-3392.4 3509 l
-3440.3 3509 l
-3440.3 3514 l
-3432.45 3514.4 3430 3516.78 3430 3525.3 c
-3430 3575.81 l
-3430 3593.12 3419.43 3604.42 3403.07 3604.42 c
-3391.59 3604.42 3383.95 3599.73 3373.48 3586.68 c
-3367.44 3599.36 3360.4 3604.42 3347.72 3604.42 c
-3334.95 3604.42 3325.98 3598.91 3318.4 3586.68 c
-h
-3443.64 3509 m
-f*
-3523.9 3534.16 m
-3515.65 3524.29 3509.61 3520.18 3500.96 3520.18 c
-3493.31 3520.18 3487.27 3523.77 3483.25 3530.94 c
-3479.43 3537.54 3477.82 3544.56 3477.01 3559 c
-3527.73 3559 l
-3526.52 3575.36 3523.5 3584.43 3517.26 3592.12 c
-3510.82 3599.96 3501.36 3604.42 3490.09 3604.42 c
-3464.94 3604.42 3448.03 3584.4 3448.03 3554.88 c
-3448.03 3525.5 3464.53 3506.18 3489.49 3506.18 c
-3505.79 3506.18 3515.65 3512.42 3528.73 3531.34 c
-h
-3476 3566 m
-3476.61 3589.96 3480.23 3597.42 3490.09 3597.42 c
-3495.93 3597.42 3499.55 3594.38 3501.16 3588.49 c
-3502.17 3584.67 3502.57 3579.03 3502.97 3568.77 c
-3502.97 3566 l
-h
-3532.35 3509 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -3509]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-1751.75 4758.95 m
-1754.15 4599.35 1794.95 4446.95 1865.75 4338.95 c
-S
-1809.35 4346.15 m
-1858.55 4359.35 l
-1884.95 4403.75 l
-1940.15 4253.75 l
-f*
-32 w
-2733.35 5222.15 m
-2644.55 5277.35 2538.95 5307.35 2430.95 5307.35 c
-2345.75 5307.35 2260.55 5288.15 2184.95 5253.35 c
-S
-2630.15 5194.55 m
-2703.35 5234.15 l
-2729.75 5314.55 l
-2870.15 5096.15 l
-f*
-0.564706 g
-2708.15 3969.35 m
-2573.75 4006.55 l
-2669.75 4061.75 l
-2516.15 4071.35 l
-2558.15 4140.95 l
-2410.55 4120.55 l
-2393.75 4192.55 l
-2273.75 4146.95 l
-2198.15 4210.55 l
-2122.55 4146.95 l
-2002.55 4192.55 l
-1984.55 4120.55 l
-1835.75 4140.95 l
-1880.15 4071.35 l
-1726.55 4061.75 l
-1822.55 4006.55 l
-1686.95 3969.35 l
-1822.55 3934.55 l
-1726.55 3878.15 l
-1880.15 3869.75 l
-1835.75 3800.15 l
-1984.55 3819.35 l
-2002.55 3748.55 l
-2122.55 3792.95 l
-2198.15 3729.35 l
-2273.75 3792.95 l
-2393.75 3748.55 l
-2410.55 3819.35 l
-2558.15 3800.15 l
-2516.15 3869.75 l
-2669.75 3878.15 l
-2573.75 3934.55 l
-f*
-1 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-f*
-0 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-2648.15 4029.35 l
-2609.75 4029.35 l
-2487.35 3998.15 l
-2576.15 3946.55 l
-2438.15 3938.15 l
-2478.95 3872.15 l
-2343.35 3891.35 l
-2326.55 3821.75 l
-2211.35 3864.95 l
-2138.15 3802.55 l
-2064.95 3864.95 l
-1949.75 3821.75 l
-1931.75 3891.35 l
-1796.15 3872.15 l
-1836.95 3938.15 l
-1700.15 3946.55 l
-1788.95 3998.15 l
-1666.55 4029.35 l
-1787.75 4061.75 l
-1700.15 4114.55 l
-1836.95 4121.75 l
-1796.15 4188.95 l
-1931.75 4169.75 l
-1949.75 4238.15 l
-2064.95 4196.15 l
-2138.15 4258.55 l
-2211.35 4196.15 l
-2326.55 4238.15 l
-2343.35 4169.75 l
-2478.95 4188.95 l
-2438.15 4121.75 l
-2576.15 4114.55 l
-2487.35 4061.75 l
-2609.75 4029.35 l
-2648.15 4029.35 l
-f*
-q[1 0 0 1 0 0]concat
-105 70 true[1 0 0 1 -1998 -3991]@85 imagemask
-!$D7 at rVup's8W+L
-!!!"Ks8W+L!$D7 at s53kW!<<*!s53lAs8W,o!!!'"s8W,g!.Y%Ks82is!WW3"s6p#<s8W,u!!!'"s8W,o
-!.Y%Ks8Duu!WW3"s7cSDs8W-!!!!'"s8W,s!.Y%Ks8N'!!WW3"s82kHs8W-!!!!'"s8W,s!.Y%Ks8N'!
-!<<*!s82j]s8W-!!!!"Ks8W,s!$D7 at s8N'!!.Y%Ks82j=s8W-!!!!!`s8W,o!"],0s8Duu!"],0s6p!js8W,s!!!!$
-s8W,7!!*'!s6p!g!!#7`s1eU7J,fP!z+92B1!!*'!rr<$!!!!9(s7cQps8W&uz"98E!!!E9$
-qu?]s!!!'"s8N'(s8Vioz!.Y%KJ.M\[n,NFg!!!!`s8V"!s8V!Wz!$D7 at n3?sQ^]4?7!!!!(
-s8VkDs8RTLz!!E9$rr<#uz!!!!"s8W-!s8Duuz!!%NKs8W,szz5QCc`s7cQoz!!!Q0
-s8W,gzz#QOi(s53kWz!!!-$s8W,7zz!<<*!s*t(Lz!!!"Ks8W*!z
-z!'gM`rVuouz!!!!0s8Vuszz!!iQ(qu?]sz!!!!0s8W&uzz!$D7@
-rr<$!z!!!!`s8W,7zz!.Y%Ks53kWz!!!$!s8W,ozz!WW3"s82isz!!!-$s8W,u
-zz#QOi(s8RTLz!!!Q0s8W-!^]4?7z+92B at s8VQgz!!#7`s6'F^p](9oz
-J,fPds8W&uz!!*'!s+14Mrr<$!!!!!"s8W*!J,fP!z!!E9$rW#1_s53kW!!!!(s8Vus&-)\!
-z!"],0p](R!s82is!!!"Ks8VQg!WW3"J,fQL!WW3"p](Ers8VQg!!!-$s8Vus"98E$p](9o"98E$rW!3's8Vus!!!-$s8W*!&-)\0rVuou#QOi(rr<T0s8W*!!!!9(s8W+L&-)\0rr<$!
-#QOi(s*tX[s8W*!!!!-$s8W+L#QOi(rr<$!"98E$s1em>s8W+L!!!'"s8W+L#QOi(s*t(L!WW3"s*t4O
-s8W*!!!!$!s8W+L!WW3"rr<$!!.Y%Krr<'!s8W&u!!!!`s8W&u!.Y%Kqu?]s!"],0p](:9s8VQg~>
-Q
-0.2 i
-2136 3991 m
-f*
-2159.52 4088.28 m
-2163.68 4088.92 2166.56 4089.08 2169.6 4089.08 c
-2174.56 4089.08 2176.96 4087.32 2176.96 4083.8 c
-2176.96 4082.84 2176.64 4081.4 2176.32 4079.96 c
-2155.84 4006.52 l
-2153.12 3997.72 2148.32 3995 2136.8 3995 c
-2136.8 3991 l
-2192 3991 l
-2192 3995 l
-2179.36 3995.15 2176.48 3996.38 2176.48 4002.04 c
-2176.48 4003.64 2176.64 4004.12 2178.4 4010.68 c
-2203.04 4100.28 l
-2188.48 4096.76 2178.24 4094.68 2159.84 4091.96 c
-h
-2216 3991 m
-f*
-2268.32 4100.24 m
-2259.52 4100.24 2250.72 4096.09 2243.52 4088.76 c
-2228.64 4073.4 2219 4047.64 2219 4023.96 c
-2219 4002.68 2229.13 3988.76 2244.32 3988.76 c
-2250.88 3988.76 2257.12 3990.84 2263.04 3995.16 c
-2279.52 4007 2292 4036.28 2292 4061.72 c
-2292 4085.08 2282.69 4100.24 2268.32 4100.24 c
-h
-2268 4095.24 m
-2272.96 4095.24 2276 4091.07 2276 4084.12 c
-2276 4080.92 2275.13 4075.48 2273.92 4069.24 c
-2271.2 4056.28 2263.52 4026.68 2260.16 4016.44 c
-2254.56 3999.8 2249.92 3993.76 2243.2 3993.76 c
-2238.4 3993.76 2235 3997.78 2235 4003.96 c
-2235 4013.88 2243.42 4049.4 2251.04 4070.84 c
-2257.12 4088.76 2261.92 4095.24 2268 4095.24 c
-h
-2296 3991 m
-f*
-1 i
-1 g
-4058.15 4720.55 m
-4139.75 4720.55 l
-4139.75 4569.35 l
-4306.55 4569.35 l
-4306.55 4720.55 l
-4388.15 4720.55 l
-4222.55 4874.15 l
-f*
-0 g
-4058.15 4720.55 m
-4139.75 4720.55 l
-4139.75 4569.35 l
-4306.55 4569.35 l
-4306.55 4720.55 l
-4388.15 4720.55 l
-4222.55 4874.15 l
-4058.15 4720.55 l
-4083.35 4731.35 l
-4222.55 4860.95 l
-4364.15 4731.35 l
-4295.75 4731.35 l
-4295.75 4580.15 l
-4149.35 4580.15 l
-4149.35 4731.35 l
-4083.35 4731.35 l
-4058.15 4720.55 l
-f*
-0.2 i
-3755.26 5012.36 m
-3744.64 5001.2 3738.88 4996.88 3730.06 4993.46 c
-3724.84 4991.3 3718.9 4990.58 3713.86 4990.58 c
-3701.98 4990.58 3690.64 4996.74 3685.42 5005.88 c
-3680.2 5015.42 3678 5028.2 3678 5046.38 c
-3678 5083.64 3689.23 5103.7 3710.8 5103.7 c
-3719.26 5103.7 3727 5100.38 3734.74 5093.36 c
-3742.48 5086.52 3746.62 5080.4 3752.92 5066.72 c
-3757.42 5066.72 l
-3757.42 5109.16 l
-3752.56 5109.16 l
-3749.86 5102.43 3748.06 5100.56 3744.64 5100.56 c
-3742.84 5100.56 3740.5 5101.28 3736.36 5103.08 c
-3725.92 5107.4 3717.1 5109.7 3708.46 5109.7 c
-3672.64 5109.7 3646 5081.84 3646 5044.76 c
-3646 5007.68 3672.21 4981.58 3709.54 4981.58 c
-3730.24 4981.58 3742.48 4987.88 3760.66 5007.86 c
-h
-3766.96 4985 m
-f*
-3830.18 4982.66 m
-3837.78 4985.36 3842.02 4986.08 3853.5 4987.34 c
-3864.66 4988.6 l
-3864.66 4993 l
-3856.74 4993.35 3855 4995.63 3855 5003.18 c
-3855 5068 l
-3818.4 5068 l
-3818.4 5063.66 l
-3827.4 5062.94 3830 5060.78 3830 5053.04 c
-3830 5002.1 l
-3823.88 4996.16 3820.18 4994.48 3814.8 4994.48 c
-3807.42 4994.48 3805 4998 3805 5006.96 c
-3805 5068 l
-3770.88 5068 l
-3770.88 5063.66 l
-3778.26 5062.22 3780 5060.6 3780 5053.04 c
-3780 5007.68 l
-3780 4991.84 3788.89 4982.48 3803.64 4982.48 c
-3813.16 4982.48 3819.56 4985.36 3830.18 4994.36 c
-h
-3868.08 4985 m
-f*
-3906.28 5068 m
-3872.22 5068 l
-3872.22 5063.66 l
-3879.96 5062.58 3882 5060.24 3882 5053.04 c
-3882 5000.12 l
-3882 4992.74 3880.19 4990.76 3872.22 4989.32 c
-3872.22 4985 l
-3920.1 4985 l
-3920.1 4989.32 l
-3909.12 4990.04 3907 4992.38 3907 5003.54 c
-3907 5037.56 l
-3907 5046.92 3912.02 5054.66 3917.94 5054.66 c
-3919.38 5054.66 3921 5053.4 3922.98 5050.52 c
-3926.4 5045.66 3929.1 5044.04 3933.78 5044.04 c
-3940.44 5044.04 3945.12 5049.08 3945.12 5055.92 c
-3945.12 5064.2 3939 5070.16 3930.54 5070.16 c
-3921.55 5070.16 3914.73 5065.47 3906.28 5053.22 c
-h
-3946.92 4985 m
-f*
-3987.28 5068 m
-3953.22 5068 l
-3953.22 5063.66 l
-3960.96 5062.58 3963 5060.24 3963 5053.04 c
-3963 5000.12 l
-3963 4992.74 3961.19 4990.76 3953.22 4989.32 c
-3953.22 4985 l
-4001.1 4985 l
-4001.1 4989.32 l
-3990.12 4990.04 3988 4992.38 3988 5003.54 c
-3988 5037.56 l
-3988 5046.92 3993.02 5054.66 3998.94 5054.66 c
-4000.38 5054.66 4002 5053.4 4003.98 5050.52 c
-4007.4 5045.66 4010.1 5044.04 4014.78 5044.04 c
-4021.44 5044.04 4026.12 5049.08 4026.12 5055.92 c
-4026.12 5064.2 4020 5070.16 4011.54 5070.16 c
-4002.55 5070.16 3995.73 5065.47 3987.28 5053.22 c
-h
-4027.92 4985 m
-f*
-4099.36 5007.5 m
-4091.98 4998.68 4086.58 4995.48 4078.84 4995.48 c
-4072 4995.48 4066.6 4998.53 4063 5004.62 c
-4059.58 5010.36 4058.14 5016.45 4057.42 5029 c
-4102.78 5029 l
-4101.7 5043.99 4099 5052.3 4093.42 5059.34 c
-4087.66 5066.36 4079.2 5070.16 4069.12 5070.16 c
-4046.62 5070.16 4031.5 5052.33 4031.5 5026.04 c
-4031.5 4999.76 4046.26 4982.48 4068.58 4982.48 c
-4083.16 4982.48 4091.98 4988.06 4103.68 5004.98 c
-h
-4056.52 5036 m
-4057.06 5057.42 4060.3 5064.16 4069.12 5064.16 c
-4074.34 5064.16 4077.58 5061.42 4079.02 5056.1 c
-4079.92 5052.68 4080.28 5047.64 4080.64 5038.46 c
-4080.64 5036 l
-h
-4106.92 4985 m
-f*
-4144.82 5068 m
-4110.78 5068 l
-4110.78 5063.66 l
-4118.7 5062.4 4120 5060.6 4120 5053.04 c
-4120 5000.12 l
-4120 4992.56 4118.61 4990.94 4110.78 4989.32 c
-4110.78 4985 l
-4154.16 4985 l
-4154.16 4989.32 l
-4147.5 4990.22 4145 4992.92 4145 4999.58 c
-4145 5047.64 l
-4145 5048.36 4146.4 5050.16 4148.4 5051.96 c
-4152.36 5055.92 4156.68 5058.16 4161 5058.16 c
-4167.12 5058.16 4170 5053.27 4170 5043.14 c
-4170 4999.58 l
-4170 4992.92 4167.71 4990.04 4161.72 4989.32 c
-4161.72 4985 l
-4204.02 4985 l
-4204.02 4989.32 l
-4197 4989.86 4195 4992.02 4195 4999.58 c
-4195 5044.76 l
-4195 5060.24 4185.54 5070.16 4170.9 5070.16 c
-4159.96 5070.16 4151.57 5065.11 4144.82 5054.48 c
-h
-4207.08 4985 m
-f*
-4261.9 5068 m
-4245 5068 l
-4245 5098.4 l
-4240.48 5098.4 l
-4229.5 5082.92 4222.3 5074.82 4210.6 5064.92 c
-4210.6 5060 l
-4220 5060 l
-4220 5001.74 l
-4220 4990.04 4227.73 4982.84 4240.12 4982.84 c
-4252.18 4982.84 4259.38 4988.24 4266.76 5003 c
-4262.26 5004.98 l
-4258.66 4998.14 4255.78 4995.84 4252 4995.84 c
-4246.96 4995.84 4245 4998.83 4245 5005.88 c
-4245 5060 l
-4261.9 5060 l
-h
-4266.94 4985 m
-f*
-4312 4985 m
-f*
-4417.94 5107 m
-4315.88 5107 l
-4315.88 5102 l
-4328.3 5101.29 4332 5098.63 4332 5089.4 c
-4332 5002.28 l
-4332 4992.92 4329.44 4990.94 4315.88 4989.5 c
-4315.88 4985 l
-4380.68 4985 l
-4380.68 4990 l
-4364.12 4990.69 4361 4992.77 4361 5002.28 c
-4361 5044.22 l
-4379.28 5043.86 4385.91 5037.2 4388.42 5016.32 c
-4392.92 5016.32 l
-4392.92 5077.16 l
-4388.42 5077.16 l
-4385.19 5056.64 4378.92 5050.34 4361 5050.34 c
-4361 5092.1 l
-4361 5098.76 4363.32 5101 4372.4 5101 c
-4389.14 5101 4399.58 5097.8 4405.16 5091.2 c
-4409.12 5086.7 4411.1 5081.84 4413.62 5070.5 c
-4417.94 5070.5 l
-h
-4422.98 4985 m
-f*
-4461.28 5068 m
-4427.22 5068 l
-4427.22 5063.66 l
-4434.96 5062.58 4437 5060.24 4437 5053.04 c
-4437 5000.12 l
-4437 4992.74 4435.19 4990.76 4427.22 4989.32 c
-4427.22 4985 l
-4475.1 4985 l
-4475.1 4989.32 l
-4464.12 4990.04 4462 4992.38 4462 5003.54 c
-4462 5037.56 l
-4462 5046.92 4467.02 5054.66 4472.94 5054.66 c
-4474.38 5054.66 4476 5053.4 4477.98 5050.52 c
-4481.4 5045.66 4484.1 5044.04 4488.78 5044.04 c
-4495.44 5044.04 4500.12 5049.08 4500.12 5055.92 c
-4500.12 5064.2 4494 5070.16 4485.54 5070.16 c
-4476.55 5070.16 4469.73 5065.47 4461.28 5053.22 c
-h
-4501.92 4985 m
-f*
-4587.14 4996.52 m
-4585.34 4994.72 l
-4584.8 4994.18 4584.26 4994 4583.36 4994 c
-4580.84 4994 4580 4995.44 4580 4998.5 c
-4580 5045.48 l
-4580 5060.78 4566.16 5070.16 4543.94 5070.16 c
-4523.6 5070.16 4509.92 5060.97 4509.92 5047.46 c
-4509.92 5039.9 4514.24 5035.58 4521.62 5035.58 c
-4528.82 5035.58 4533.86 5039.9 4533.86 5046.02 c
-4533.86 5048.54 4532.96 5050.88 4530.62 5053.76 c
-4529 5055.56 4528.46 5056.64 4528.46 5057.72 c
-4528.46 5061.5 4533.32 5064.16 4539.8 5064.16 c
-4550.42 5064.16 4555 5059.37 4555 5048.54 c
-4555 5035.4 l
-4533.89 5028.92 4525.41 5025.68 4518.56 5021.18 c
-4510.46 5015.78 4507 5009.48 4507 5001.56 c
-4507 4990.58 4515.07 4982.48 4526.3 4982.48 c
-4536.74 4982.48 4545.02 4986.08 4554.92 4995.08 c
-4556.9 4985.9 4560.86 4982.48 4569.68 4982.48 c
-4577.42 4982.48 4583 4985.36 4589.84 4992.74 c
-h
-4555 5003 m
-4550.04 4997.42 4546.37 4995.26 4541.96 4995.26 c
-4536.56 4995.26 4533 5000.12 4533 5007.32 c
-4533 5017.76 4540.57 5025.14 4555 5029.1 c
-h
-4592 4985 m
-f*
-4629.46 5068 m
-4594.73 5068 l
-4594.73 5063.66 l
-4602.65 5062.58 4605 5060.42 4605 5053.04 c
-4605 5000.12 l
-4605 4992.74 4602.95 4990.76 4594.73 4989.32 c
-4594.73 4985 l
-4637.93 4985 l
-4637.93 4989.32 l
-4631.63 4990.22 4630 4992.74 4630 4999.58 c
-4630 5047.64 l
-4630 5048.54 4632.51 5051.78 4634.51 5053.76 c
-4638.29 5056.64 4641.53 5058.16 4644.77 5058.16 c
-4651.79 5058.16 4655 5054 4655 5043.14 c
-4655 4999.58 l
-4655 4992.2 4652.9 4989.86 4645.85 4989.32 c
-4645.85 4985 l
-4687.97 4985 l
-4687.97 4989.32 l
-4681.67 4990.04 4680 4992.74 4680 4999.58 c
-4680 5047.64 l
-4680 5048.54 4682.43 5051.6 4684.37 5053.58 c
-4688.33 5056.64 4691.57 5058.16 4694.81 5058.16 c
-4701.65 5058.16 4704 5053.82 4704 5043.14 c
-4704 4999.58 l
-4704 4992.02 4702.1 4989.86 4695.53 4989.32 c
-4695.53 4985 l
-4738.37 4985 l
-4738.37 4989 l
-4731.35 4989.37 4729 4991.6 4729 4999.58 c
-4729 5044.76 l
-4729 5060.24 4719.6 5070.16 4705.07 5070.16 c
-4694.81 5070.16 4687.97 5066.01 4678.61 5054.48 c
-4673.21 5065.82 4666.91 5070.16 4655.57 5070.16 c
-4644.2 5070.16 4636.21 5065.29 4629.46 5054.48 c
-h
-4741.94 4985 m
-f*
-4814.36 5007.5 m
-4806.98 4998.68 4801.58 4995.48 4793.84 4995.48 c
-4787 4995.48 4781.6 4998.53 4778 5004.62 c
-4774.58 5010.36 4773.14 5016.45 4772.42 5029 c
-4817.78 5029 l
-4816.7 5043.99 4814 5052.3 4808.42 5059.34 c
-4802.66 5066.36 4794.2 5070.16 4784.12 5070.16 c
-4761.62 5070.16 4746.5 5052.33 4746.5 5026.04 c
-4746.5 4999.76 4761.26 4982.48 4783.58 4982.48 c
-4798.16 4982.48 4806.98 4988.06 4818.68 5004.98 c
-h
-4771.52 5036 m
-4772.06 5057.42 4775.3 5064.16 4784.12 5064.16 c
-4789.34 5064.16 4792.58 5061.42 4794.02 5056.1 c
-4794.92 5052.68 4795.28 5047.64 4795.64 5038.46 c
-4795.64 5036 l
-h
-4821.92 4985 m
-f*
-1 i
-3636.95 4949.75 1184.4 15.5999 re
-f
-0.2 i
-1323.88 5932 m
-1323.88 5927 l
-1336.3 5926.29 1340 5923.45 1340 5914.4 c
-1340 5827.28 l
-1340 5818.1 1337.25 5815.94 1323.88 5814.5 c
-1323.88 5810 l
-1381.84 5810 l
-1412.26 5810 1432 5823.5 1432 5843.84 c
-1432 5852.12 1428.73 5859.32 1422.7 5864.9 c
-1416.4 5870.48 1410.28 5873 1397.68 5875.7 c
-1418.56 5881.82 1426 5889.2 1426 5902.88 c
-1426 5921.42 1409.55 5932 1379.5 5932 c
-h
-1369 5871.74 m
-1373.92 5871.74 l
-1392.46 5871.74 1401 5862.2 1401 5842.22 c
-1401 5824.76 1393.77 5816 1379.5 5816 c
-1371.58 5816 1369 5818.99 1369 5826.74 c
-h
-1369 5917.46 m
-1369 5923.94 1371.39 5927 1378.24 5927 c
-1390.84 5927 1397 5919.03 1397 5901.62 c
-1397 5882.72 1391.08 5877.68 1369 5877.14 c
-h
-1441.06 5810 m
-f*
-1526.14 5821.52 m
-1524.34 5819.72 l
-1523.8 5819.18 1523.26 5819 1522.36 5819 c
-1519.84 5819 1519 5820.44 1519 5823.5 c
-1519 5870.48 l
-1519 5885.78 1505.16 5895.16 1482.94 5895.16 c
-1462.6 5895.16 1448.92 5885.97 1448.92 5872.46 c
-1448.92 5864.9 1453.24 5860.58 1460.62 5860.58 c
-1467.82 5860.58 1472.86 5864.9 1472.86 5871.02 c
-1472.86 5873.54 1471.96 5875.88 1469.62 5878.76 c
-1468 5880.56 1467.46 5881.64 1467.46 5882.72 c
-1467.46 5886.5 1472.32 5889.16 1478.8 5889.16 c
-1489.42 5889.16 1494 5884.37 1494 5873.54 c
-1494 5860.4 l
-1472.89 5853.92 1464.41 5850.68 1457.56 5846.18 c
-1449.46 5840.78 1446 5834.48 1446 5826.56 c
-1446 5815.58 1454.07 5807.48 1465.3 5807.48 c
-1475.74 5807.48 1484.02 5811.08 1493.92 5820.08 c
-1495.9 5810.9 1499.86 5807.48 1508.68 5807.48 c
-1516.42 5807.48 1522 5810.36 1528.84 5817.74 c
-h
-1494 5828 m
-1489.04 5822.42 1485.37 5820.26 1480.96 5820.26 c
-1475.56 5820.26 1472 5825.12 1472 5832.32 c
-1472 5842.76 1479.57 5850.14 1494 5854.1 c
-h
-1531 5810 m
-f*
-1592.22 5868.68 m
-1592.22 5894.8 l
-1588.24 5894.8 l
-1587.16 5892.08 1586.08 5891.2 1583.74 5891.2 c
-1582.66 5891.2 1581.04 5891.55 1578.16 5892.44 c
-1572.4 5894.42 1568.26 5895.16 1564.12 5895.16 c
-1547.74 5895.16 1536 5883.99 1536 5868.86 c
-1536 5856.98 1543.34 5848.7 1561.42 5840.96 c
-1573.84 5835.56 1579 5831.06 1579 5825.3 c
-1579 5818.28 1573.48 5813.48 1565.2 5813.48 c
-1552.6 5813.48 1544.32 5821.62 1540.54 5837.36 c
-1535.5 5837.36 l
-1535.5 5807.66 l
-1540 5807.66 l
-1541.98 5811.44 1543.06 5812.7 1544.68 5812.7 c
-1545.58 5812.7 1547.02 5812.34 1548.82 5811.62 c
-1554.04 5809.46 1563.22 5807.48 1568.26 5807.48 c
-1584.64 5807.48 1596 5818.64 1596 5834.84 c
-1596 5847.62 1589.15 5855.54 1571.14 5862.92 c
-1558.9 5868.14 1554 5872.64 1554 5878.76 c
-1554 5884.7 1558.98 5889.16 1565.74 5889.16 c
-1570.6 5889.16 1575.28 5887.19 1579.24 5883.44 c
-1583.02 5879.84 1585 5876.42 1587.7 5868.68 c
-h
-1601.02 5810 m
-f*
-1673.36 5832.5 m
-1665.98 5823.68 1660.58 5820.48 1652.84 5820.48 c
-1646 5820.48 1640.6 5823.53 1637 5829.62 c
-1633.58 5835.36 1632.14 5841.45 1631.42 5854 c
-1676.78 5854 l
-1675.7 5868.99 1673 5877.3 1667.42 5884.34 c
-1661.66 5891.36 1653.2 5895.16 1643.12 5895.16 c
-1620.62 5895.16 1605.5 5877.33 1605.5 5851.04 c
-1605.5 5824.76 1620.26 5807.48 1642.58 5807.48 c
-1657.16 5807.48 1665.98 5813.06 1677.68 5829.98 c
-h
-1630.52 5861 m
-1631.06 5882.42 1634.3 5889.16 1643.12 5889.16 c
-1648.34 5889.16 1651.58 5886.42 1653.02 5881.1 c
-1653.92 5877.68 1654.28 5872.64 1654.64 5863.46 c
-1654.64 5861 l
-h
-1680.92 5810 m
-f*
-1726 5810 m
-f*
-1831.94 5932 m
-1729.88 5932 l
-1729.88 5927 l
-1742.3 5926.29 1746 5923.63 1746 5914.4 c
-1746 5827.28 l
-1746 5817.92 1743.44 5815.94 1729.88 5814.5 c
-1729.88 5810 l
-1794.68 5810 l
-1794.68 5815 l
-1778.12 5815.69 1775 5817.77 1775 5827.28 c
-1775 5869.22 l
-1793.28 5868.86 1799.91 5862.2 1802.42 5841.32 c
-1806.92 5841.32 l
-1806.92 5902.16 l
-1802.42 5902.16 l
-1799.19 5881.64 1792.92 5875.34 1775 5875.34 c
-1775 5917.1 l
-1775 5923.76 1777.32 5926 1786.4 5926 c
-1803.14 5926 1813.58 5922.8 1819.16 5916.2 c
-1823.12 5911.7 1825.1 5906.84 1827.62 5895.5 c
-1831.94 5895.5 l
-h
-1836.98 5810 m
-f*
-1875.28 5893 m
-1841.22 5893 l
-1841.22 5888.66 l
-1848.96 5887.58 1851 5885.24 1851 5878.04 c
-1851 5825.12 l
-1851 5817.74 1849.19 5815.76 1841.22 5814.32 c
-1841.22 5810 l
-1889.1 5810 l
-1889.1 5814.32 l
-1878.12 5815.04 1876 5817.38 1876 5828.54 c
-1876 5862.56 l
-1876 5871.92 1881.02 5879.66 1886.94 5879.66 c
-1888.38 5879.66 1890 5878.4 1891.98 5875.52 c
-1895.4 5870.66 1898.1 5869.04 1902.78 5869.04 c
-1909.44 5869.04 1914.12 5874.08 1914.12 5880.92 c
-1914.12 5889.2 1908 5895.16 1899.54 5895.16 c
-1890.55 5895.16 1883.73 5890.47 1875.28 5878.22 c
-h
-1915.92 5810 m
-f*
-2001.14 5821.52 m
-1999.34 5819.72 l
-1998.8 5819.18 1998.26 5819 1997.36 5819 c
-1994.84 5819 1994 5820.44 1994 5823.5 c
-1994 5870.48 l
-1994 5885.78 1980.16 5895.16 1957.94 5895.16 c
-1937.6 5895.16 1923.92 5885.97 1923.92 5872.46 c
-1923.92 5864.9 1928.24 5860.58 1935.62 5860.58 c
-1942.82 5860.58 1947.86 5864.9 1947.86 5871.02 c
-1947.86 5873.54 1946.96 5875.88 1944.62 5878.76 c
-1943 5880.56 1942.46 5881.64 1942.46 5882.72 c
-1942.46 5886.5 1947.32 5889.16 1953.8 5889.16 c
-1964.42 5889.16 1969 5884.37 1969 5873.54 c
-1969 5860.4 l
-1947.89 5853.92 1939.41 5850.68 1932.56 5846.18 c
-1924.46 5840.78 1921 5834.48 1921 5826.56 c
-1921 5815.58 1929.07 5807.48 1940.3 5807.48 c
-1950.74 5807.48 1959.02 5811.08 1968.92 5820.08 c
-1970.9 5810.9 1974.86 5807.48 1983.68 5807.48 c
-1991.42 5807.48 1997 5810.36 2003.84 5817.74 c
-h
-1969 5828 m
-1964.04 5822.42 1960.37 5820.26 1955.96 5820.26 c
-1950.56 5820.26 1947 5825.12 1947 5832.32 c
-1947 5842.76 1954.57 5850.14 1969 5854.1 c
-h
-2006 5810 m
-f*
-2043.46 5893 m
-2008.73 5893 l
-2008.73 5888.66 l
-2016.65 5887.58 2019 5885.42 2019 5878.04 c
-2019 5825.12 l
-2019 5817.74 2016.95 5815.76 2008.73 5814.32 c
-2008.73 5810 l
-2051.93 5810 l
-2051.93 5814.32 l
-2045.63 5815.22 2044 5817.74 2044 5824.58 c
-2044 5872.64 l
-2044 5873.54 2046.51 5876.78 2048.51 5878.76 c
-2052.29 5881.64 2055.53 5883.16 2058.77 5883.16 c
-2065.79 5883.16 2069 5879 2069 5868.14 c
-2069 5824.58 l
-2069 5817.2 2066.9 5814.86 2059.85 5814.32 c
-2059.85 5810 l
-2101.97 5810 l
-2101.97 5814.32 l
-2095.67 5815.04 2094 5817.74 2094 5824.58 c
-2094 5872.64 l
-2094 5873.54 2096.43 5876.6 2098.37 5878.58 c
-2102.33 5881.64 2105.57 5883.16 2108.81 5883.16 c
-2115.65 5883.16 2118 5878.82 2118 5868.14 c
-2118 5824.58 l
-2118 5817.02 2116.1 5814.86 2109.53 5814.32 c
-2109.53 5810 l
-2152.37 5810 l
-2152.37 5814 l
-2145.35 5814.37 2143 5816.6 2143 5824.58 c
-2143 5869.76 l
-2143 5885.24 2133.6 5895.16 2119.07 5895.16 c
-2108.81 5895.16 2101.97 5891.01 2092.61 5879.48 c
-2087.21 5890.82 2080.91 5895.16 2069.57 5895.16 c
-2058.2 5895.16 2050.21 5890.29 2043.46 5879.48 c
-h
-2155.94 5810 m
-f*
-2228.36 5832.5 m
-2220.98 5823.68 2215.58 5820.48 2207.84 5820.48 c
-2201 5820.48 2195.6 5823.53 2192 5829.62 c
-2188.58 5835.36 2187.14 5841.45 2186.42 5854 c
-2231.78 5854 l
-2230.7 5868.99 2228 5877.3 2222.42 5884.34 c
-2216.66 5891.36 2208.2 5895.16 2198.12 5895.16 c
-2175.62 5895.16 2160.5 5877.33 2160.5 5851.04 c
-2160.5 5824.76 2175.26 5807.48 2197.58 5807.48 c
-2212.16 5807.48 2220.98 5813.06 2232.68 5829.98 c
-h
-2185.52 5861 m
-2186.06 5882.42 2189.3 5889.16 2198.12 5889.16 c
-2203.34 5889.16 2206.58 5886.42 2208.02 5881.1 c
-2208.92 5877.68 2209.28 5872.64 2209.64 5863.46 c
-2209.64 5861 l
-h
-2235.92 5810 m
-f*
-1 i
-1320.95 5775.35 914.4 15.5999 re
-f
-1 g
-1773.35 5370.95 m
-1937.75 5522.15 l
-1856.15 5522.15 l
-1856.15 5675.75 l
-1689.35 5675.75 l
-1689.35 5522.15 l
-1607.75 5522.15 l
-f*
-0 g
-1773.35 5370.95 m
-1937.75 5522.15 l
-1856.15 5522.15 l
-1856.15 5675.75 l
-1689.35 5675.75 l
-1689.35 5522.15 l
-1607.75 5522.15 l
-1773.35 5370.95 l
-1773.35 5384.15 l
-1634.15 5512.55 l
-1700.15 5512.55 l
-1700.15 5666.15 l
-1846.55 5666.15 l
-1846.55 5512.55 l
-1912.55 5512.55 l
-1773.35 5384.15 l
-1773.35 5370.95 l
-f*
-0.201248 i
-3939.33 5883 m
-3825.22 5883 l
-3825.22 5878 l
-3839.11 5877.2 3843 5874.18 3843 5863.72 c
-3843 5766.32 l
-3843 5755.85 3840.17 5753.64 3825.22 5752.03 c
-3825.22 5747 l
-3897.67 5747 l
-3897.67 5752 l
-3879.15 5752.81 3876 5755.23 3876 5766.32 c
-3876 5813.21 l
-3896.22 5812.81 3903.55 5805.36 3906.32 5782.02 c
-3911.35 5782.02 l
-3911.35 5850.04 l
-3906.32 5850.04 l
-3902.76 5827.1 3895.82 5820.05 3876 5820.05 c
-3876 5866.74 l
-3876 5874.19 3878.52 5876 3888.41 5876 c
-3907.13 5876 3918.8 5872.64 3925.04 5865.74 c
-3929.47 5860.71 3931.68 5855.27 3934.5 5842.59 c
-3939.33 5842.59 l
-h
-3944.96 5747 m
-f*
-3989.19 5840 m
-3950.84 5840 l
-3950.84 5834.95 l
-3959.49 5833.74 3962 5831.12 3962 5823.07 c
-3962 5763.9 l
-3962 5755.65 3959.93 5753.44 3950.84 5751.83 c
-3950.84 5747 l
-4004.37 5747 l
-4004.37 5751.83 l
-3992.09 5752.63 3990 5755.25 3990 5767.73 c
-3990 5805.76 l
-3990 5816.23 3995.49 5824.88 4001.95 5824.88 c
-4003.56 5824.88 4005.37 5823.47 4007.59 5820.25 c
-4011.41 5814.82 4014.43 5813.01 4019.66 5813.01 c
-4027.11 5813.01 4032.34 5818.64 4032.34 5826.29 c
-4032.34 5835.55 4025.5 5842.41 4016.04 5842.41 c
-4006.1 5842.41 3998.54 5837.12 3989.19 5823.27 c
-h
-4034.35 5747 m
-f*
-4129.19 5759.88 m
-4127.18 5757.87 l
-4126.57 5757.26 4125.97 5757.06 4124.96 5757.06 c
-4122.15 5757.06 4121 5758.67 4121 5762.09 c
-4121 5814.62 l
-4121 5831.73 4105.6 5842.42 4080.89 5842.42 c
-4058.15 5842.42 4042.85 5832.06 4042.85 5816.83 c
-4042.85 5808.38 4047.69 5803.55 4055.94 5803.55 c
-4063.99 5803.55 4069.62 5808.38 4069.62 5815.22 c
-4069.62 5818.04 4068.61 5820.66 4066 5823.88 c
-4064.19 5825.89 4063.58 5827.1 4063.58 5828.3 c
-4063.58 5832.53 4069.02 5835.42 4076.26 5835.42 c
-4088.14 5835.42 4093.86 5830.08 4093.86 5818.04 c
-4093.86 5803.35 l
-4069.91 5796.1 4060.29 5792.48 4052.51 5787.45 c
-4043.46 5781.41 4039 5774.37 4039 5765.52 c
-4039 5753.24 4048.27 5744.18 4061.17 5744.18 c
-4072.84 5744.18 4082.1 5748.21 4093.17 5758.27 c
-4095.38 5748.01 4099.81 5744.18 4109.67 5744.18 c
-4118.32 5744.18 4124.56 5747.4 4132.21 5755.65 c
-h
-4093 5767.13 m
-4087.55 5760.89 4083.52 5758.47 4078.68 5758.47 c
-4072.64 5758.47 4068 5763.91 4068 5771.96 c
-4068 5783.63 4076.61 5791.88 4093 5796.31 c
-h
-4134.62 5747 m
-f*
-4176.4 5840 m
-4137.7 5840 l
-4137.7 5834.95 l
-4146.55 5833.74 4149 5831.32 4149 5823.07 c
-4149 5763.9 l
-4149 5755.65 4146.74 5753.44 4137.7 5751.83 c
-4137.7 5747 l
-4186 5747 l
-4186 5751.83 l
-4178.95 5752.84 4177 5755.65 4177 5763.3 c
-4177 5817.03 l
-4177 5818.04 4179.87 5821.66 4182.18 5823.88 c
-4186.4 5827.1 4190.02 5829.42 4193.65 5829.42 c
-4201.5 5829.42 4205 5824.59 4205 5812 c
-4205 5763.3 l
-4205 5755.05 4202.68 5752.43 4194.85 5751.83 c
-4194.85 5747 l
-4241.95 5747 l
-4241.95 5751.83 l
-4234.9 5752.64 4233 5755.65 4233 5763.3 c
-4233 5817.03 l
-4233 5818.04 4235.73 5821.46 4237.92 5823.68 c
-4242.35 5827.1 4245.97 5829.42 4249.59 5829.42 c
-4257.24 5829.42 4260 5824.38 4260 5812 c
-4260 5763.3 l
-4260 5754.85 4257.85 5752.43 4250.4 5751.83 c
-4250.4 5747 l
-4298.3 5747 l
-4298.3 5752 l
-4290.45 5752.4 4288 5754.78 4288 5763.3 c
-4288 5813.81 l
-4288 5831.12 4277.43 5842.42 4261.07 5842.42 c
-4249.59 5842.42 4241.95 5837.73 4231.48 5824.68 c
-4225.44 5837.36 4218.4 5842.42 4205.72 5842.42 c
-4192.95 5842.42 4183.98 5836.91 4176.4 5824.68 c
-h
-4301.64 5747 m
-f*
-4379.9 5772.16 m
-4371.65 5762.29 4365.61 5758.18 4356.96 5758.18 c
-4349.31 5758.18 4343.27 5761.77 4339.25 5768.94 c
-4335.43 5775.54 4333.82 5782.56 4333.01 5797 c
-4383.73 5797 l
-4382.52 5813.36 4379.5 5822.43 4373.26 5830.12 c
-4366.82 5837.96 4357.36 5842.42 4346.09 5842.42 c
-4320.94 5842.42 4304.03 5822.4 4304.03 5792.88 c
-4304.03 5763.5 4320.53 5744.18 4345.49 5744.18 c
-4361.79 5744.18 4371.65 5750.42 4384.73 5769.34 c
-h
-4332 5804 m
-4332.61 5827.96 4336.23 5835.42 4346.09 5835.42 c
-4351.93 5835.42 4355.55 5832.38 4357.16 5826.49 c
-4358.17 5822.67 4358.57 5817.03 4358.97 5806.77 c
-4358.97 5804 l
-h
-4388.35 5747 m
-f*
-4485.16 5842.59 m
-4485.16 5886.22 l
-4479.37 5886.22 l
-4477.96 5880.82 4476.55 5879.42 4472.93 5879.42 c
-4471.12 5879.42 4468.7 5880.03 4464.47 5881.43 c
-4455.22 5884.86 4448.78 5886.02 4440.93 5886.02 c
-4413.56 5886.02 4397 5870.54 4397 5845.01 c
-4397 5839.98 4397.75 5835.75 4399.07 5831.73 c
-4403.29 5821.06 4414.16 5811.6 4431.27 5803.35 c
-4444.75 5796.91 l
-4462.46 5788.46 4467 5783.22 4467 5772.56 c
-4467 5758.67 4457.25 5750.18 4441.94 5750.18 c
-4430.26 5750.18 4420.6 5754.89 4412.96 5764.31 c
-4407.12 5771.75 4404.3 5778.6 4400.88 5792.88 c
-4395.04 5792.88 l
-4395.04 5743.18 l
-4400.88 5743.18 l
-4402.09 5748.41 4403.7 5750.02 4406.92 5750.02 c
-4408.53 5750.02 4410.74 5749.42 4415.17 5748.01 c
-4425.03 5744.59 4432.48 5743.18 4441.33 5743.18 c
-4471.12 5743.18 4491 5760.28 4491 5785.64 c
-4491 5800.73 4482.04 5815.83 4469.1 5822.27 c
-4439.52 5836.96 l
-4423.22 5845.01 4419 5849.84 4419 5859.7 c
-4419 5872.18 4427.37 5879.02 4440.93 5879.02 c
-4449.99 5879.02 4458.44 5875.47 4465.68 5868.55 c
-4472.53 5861.51 4475.75 5855.67 4479.77 5842.59 c
-h
-4499.89 5747 m
-f*
-4580.9 5772.16 m
-4572.65 5762.29 4566.61 5758.18 4557.96 5758.18 c
-4550.31 5758.18 4544.27 5761.77 4540.25 5768.94 c
-4536.43 5775.54 4534.82 5782.56 4534.01 5797 c
-4584.73 5797 l
-4583.52 5813.36 4580.5 5822.43 4574.26 5830.12 c
-4567.82 5837.96 4558.36 5842.42 4547.09 5842.42 c
-4521.94 5842.42 4505.03 5822.4 4505.03 5792.88 c
-4505.03 5763.5 4521.53 5744.18 4546.49 5744.18 c
-4562.79 5744.18 4572.65 5750.42 4585.73 5769.34 c
-h
-4533 5804 m
-4533.61 5827.96 4537.23 5835.42 4547.09 5835.42 c
-4552.93 5835.42 4556.55 5832.38 4558.16 5826.49 c
-4559.17 5822.67 4559.57 5817.03 4559.97 5806.77 c
-4559.97 5804 l
-h
-4589.35 5747 m
-f*
-4650.38 5840 m
-4631 5840 l
-4631 5873.79 l
-4626.43 5873.79 l
-4614.16 5856.48 4606.11 5847.42 4593.02 5836.35 c
-4593.02 5831 l
-4603 5831 l
-4603 5765.72 l
-4603 5752.64 4611.84 5744.59 4626.03 5744.59 c
-4639.51 5744.59 4647.56 5750.62 4655.81 5767.12 c
-4650.78 5769.34 l
-4646.76 5761.69 4643.54 5758.59 4639.31 5758.59 c
-4633.68 5758.59 4631 5762.09 4631 5770.34 c
-4631 5831 l
-4650.38 5831 l
-h
-4656.02 5747 m
-f*
-1 i
-8 w
-2213.75 3834.95 m
-2280.95 3696.95 2475.35 3592.55 2718.95 3562.55 c
-S
-2678.15 3520.55 m
-2700.95 3567.35 l
-2687.75 3616.55 l
-2835.35 3556.55 l
-f*
-0.564706 g
-3686.15 4768.55 m
-3542.15 4810.55 l
-3645.35 4877.75 l
-3480.95 4887.35 l
-3527.75 4968.95 l
-3369.35 4946.15 l
-3351.35 5030.15 l
-3221.75 4977.35 l
-3143.75 5050.55 l
-3062.15 4977.35 l
-2933.75 5030.15 l
-2914.55 4946.15 l
-2757.35 4968.95 l
-2804.15 4887.35 l
-2639.75 4877.75 l
-2741.75 4810.55 l
-2598.95 4768.55 l
-2741.75 4728.95 l
-2639.75 4661.75 l
-2804.15 4652.15 l
-2757.35 4570.55 l
-2914.55 4594.55 l
-2933.75 4509.35 l
-3062.15 4562.15 l
-3143.75 4488.95 l
-3221.75 4562.15 l
-3351.35 4509.35 l
-3369.35 4594.55 l
-3527.75 4570.55 l
-3480.95 4652.15 l
-3645.35 4661.75 l
-3542.15 4728.95 l
-f*
-1 g
-3626.15 4828.55 m
-3482.15 4870.55 l
-3585.35 4937.75 l
-3420.95 4947.35 l
-3467.75 5028.95 l
-3309.35 5006.15 l
-3291.35 5090.15 l
-3161.75 5037.35 l
-3083.75 5110.55 l
-3002.15 5037.35 l
-2873.75 5090.15 l
-2854.55 5006.15 l
-2697.35 5028.95 l
-2744.15 4947.35 l
-2579.75 4937.75 l
-2681.75 4870.55 l
-2538.95 4828.55 l
-2681.75 4788.95 l
-2579.75 4721.75 l
-2744.15 4712.15 l
-2697.35 4630.55 l
-2854.55 4654.55 l
-2873.75 4569.35 l
-3002.15 4622.15 l
-3083.75 4548.95 l
-3161.75 4622.15 l
-3291.35 4569.35 l
-3309.35 4654.55 l
-3467.75 4630.55 l
-3420.95 4712.15 l
-3585.35 4721.75 l
-3482.15 4788.95 l
-f*
-0 g
-3626.15 4828.55 m
-3482.15 4870.55 l
-3585.35 4937.75 l
-3420.95 4947.35 l
-3467.75 5028.95 l
-3309.35 5006.15 l
-3291.35 5090.15 l
-3161.75 5037.35 l
-3083.75 5110.55 l
-3002.15 5037.35 l
-2873.75 5090.15 l
-2854.55 5006.15 l
-2697.35 5028.95 l
-2744.15 4947.35 l
-2579.75 4937.75 l
-2681.75 4870.55 l
-2538.95 4828.55 l
-2681.75 4788.95 l
-2579.75 4721.75 l
-2744.15 4712.15 l
-2697.35 4630.55 l
-2854.55 4654.55 l
-2873.75 4569.35 l
-3002.15 4622.15 l
-3083.75 4548.95 l
-3161.75 4622.15 l
-3291.35 4569.35 l
-3309.35 4654.55 l
-3467.75 4630.55 l
-3420.95 4712.15 l
-3585.35 4721.75 l
-3482.15 4788.95 l
-3626.15 4828.55 l
-3480.95 4829.75 l
-3386.15 4803.35 l
-3460.55 4754.15 l
-3354.95 4748.15 l
-3392.15 4682.15 l
-3278.15 4700.15 l
-3262.55 4624.55 l
-3153.35 4668.95 l
-3083.75 4601.75 l
-3010.55 4668.95 l
-2902.55 4624.55 l
-2885.75 4700.15 l
-2771.75 4682.15 l
-2810.15 4748.15 l
-2703.35 4754.15 l
-2778.95 4803.35 l
-2684.15 4829.75 l
-2777.75 4857.35 l
-2703.35 4904.15 l
-2810.15 4911.35 l
-2771.75 4977.35 l
-2885.75 4960.55 l
-2902.55 5034.95 l
-3010.55 4990.55 l
-3083.75 5057.75 l
-3153.35 4990.55 l
-3262.55 5034.95 l
-3278.15 4960.55 l
-3392.15 4977.35 l
-3354.95 4911.35 l
-3460.55 4904.15 l
-3387.35 4857.35 l
-3480.95 4829.75 l
-3626.15 4828.55 l
-f*
-q[1 0 0 1 0 0]concat
-105 70 true[1 0 0 1 -2961 -4787]@85 imagemask
-!$D7 at rVup's8W+L
-!!!"Ks8W+L!$D7 at s53kW!<<*!s53lAs8W,o!!!'"s8W,g!.Y%Ks82is!WW3"s6p#<s8W,u!!!'"s8W,o
-!.Y%Ks8Duu!WW3"s7cSDs8W-!!!!'"s8W,s!.Y%Ks8N'!!WW3"s82kHs8W-!!!!'"s8W,s!.Y%Ks8N'!
-!<<*!s82j]s8W-!!!!"Ks8W,s!$D7 at s8N'!!.Y%Ks82j=s8W-!!!!!`s8W,o!"],0s8Duu!"],0s6p!js8W,s!!!!$
-s8W,7!!*'!s6p!g!!#7`s1eU7J,fP!z+92B1!!*'!rr<$!!!!9(s7cQps8W&uz"98E!!!E9$
-qu?]s!!!'"s8N'(s8Vioz!.Y%KJ.M\[n,NFg!!!!`s8V"!s8V!Wz!$D7 at n3?sQ^]4?7!!!!(
-s8VkDs8RTLz!!E9$rr<#uz!!!!"s8W-!s8Duuz!!%NKs8W,szz5QCc`s7cQoz!!!Q0
-s8W,gzz#QOi(s53kWz!!!-$s8W,7zz!<<*!s*t(Lz!!!"Ks8W*!z
-z!'gM`rVuouz!!!!0s8Vuszz!!iQ(qu?]sz!!!!0s8W&uzz!$D7@
-rr<$!z!!!!`s8W,7zz!.Y%Ks53kWz!!!$!s8W,ozz!WW3"s82isz!!!-$s8W,u
-zz#QOi(s8RTLz!!!Q0s8W-!^]4?7z+92B at s8VQgz!!#7`s6'F^p](9oz
-J,fPds8W&uz!!*'!s+14Mrr<$!!!!!"s8W*!J,fP!z!!E9$rW#1_s53kW!!!!(s8Vus&-)\!
-z!"],0p](R!s82is!!!"Ks8VQg!WW3"J,fQL!WW3"p](Ers8VQg!!!-$s8Vus"98E$p](9o"98E$rW!3's8Vus!!!-$s8W*!&-)\0rVuou#QOi(rr<T0s8W*!!!!9(s8W+L&-)\0rr<$!
-#QOi(s*tX[s8W*!!!!-$s8W+L#QOi(rr<$!"98E$s1em>s8W+L!!!'"s8W+L#QOi(s*t(L!WW3"s*t4O
-s8W*!!!!$!s8W+L!WW3"rr<$!!.Y%Krr<'!s8W&u!!!!`s8W&u!.Y%Kqu?]s!"],0p](:9s8VQg~>
-Q
-0.2 i
-3099 4787 m
-f*
-3129.52 4877 m
-3170.16 4877 l
-3175.92 4894 l
-3130.64 4894 l
-3109.68 4846.52 l
-3120.08 4846.04 3125.04 4845.08 3130.96 4842.04 c
-3141.2 4836.92 3147 4827.64 3147 4817.24 c
-3147 4803.48 3136.98 4790.92 3125.68 4790.92 c
-3122.16 4790.92 3120.4 4792.44 3117.04 4798.2 c
-3113.2 4804.6 3110.48 4806.68 3105.68 4806.68 c
-3100.08 4806.68 3096.24 4803 3096.24 4797.56 c
-3096.24 4789.88 3104.56 4784.92 3117.2 4784.92 c
-3143.6 4784.92 3164 4803.32 3164 4827.16 c
-3164 4839.32 3158.69 4849.56 3149.04 4855.96 c
-3143.44 4859.8 3139.12 4861.24 3124.08 4864.44 c
-h
-3178 4787 m
-f*
-1 i
-32 w
-3191.75 4581.35 m
-3269.75 4442.15 3400.55 4336.55 3557.75 4284.95 c
-S
-3483.35 4228.55 m
-3531.35 4298.15 l
-3516.95 4380.95 l
-3742.55 4252.55 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/fsmerge.eps b/ast-5.3-1/sun211_figures/fsmerge.eps
deleted file mode 100644
index 6aa1bfd..0000000
--- a/ast-5.3-1/sun211_figures/fsmerge.eps
+++ /dev/null
@@ -1,5238 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 57 88 535 732
-%..................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/10 16:06:29
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5339.75 6665.75 m
-5339.75 6989.75 5075.75 7253.75 4751.75 7253.75 c
-1220.15 7253.75 l
-896.15 7253.75 632.15 6989.75 632.15 6665.75 c
-632.15 1478.15 l
-632.15 1154.15 896.15 890.151 1220.15 890.151 c
-4751.75 890.151 l
-5075.75 890.151 5339.75 1154.15 5339.75 1478.15 c
-f*
-1 g
-5274.95 6720.95 m
-5274.95 7044.95 5012.15 7307.75 4688.15 7307.75 c
-1164.95 7307.75 l
-840.95 7307.75 578.15 7044.95 578.15 6720.95 c
-578.15 1541.75 l
-578.15 1217.75 840.95 954.95 1164.95 954.95 c
-4688.15 954.95 l
-5012.15 954.95 5274.95 1217.75 5274.95 1541.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5274.95 6720.95 m
-5274.95 7044.95 5012.15 7307.75 4688.15 7307.75 c
-1164.95 7307.75 l
-840.95 7307.75 578.15 7044.95 578.15 6720.95 c
-578.15 1541.75 l
-578.15 1217.75 840.95 954.95 1164.95 954.95 c
-4688.15 954.95 l
-5012.15 954.95 5274.95 1217.75 5274.95 1541.75 c
-h
-S
-1 g
-5054.15 3765.35 m
-5054.15 3972.95 4886.15 4140.95 4678.55 4140.95 c
-1577.75 4140.95 l
-1370.15 4140.95 1202.15 3972.95 1202.15 3765.35 c
-1202.15 1515.35 l
-1202.15 1307.75 1370.15 1139.75 1577.75 1139.75 c
-4678.55 1139.75 l
-4886.15 1139.75 5054.15 1307.75 5054.15 1515.35 c
-f*
-0 g
-1580.15 4130.15 m
-1578.95 4139.75 l
-1514.15 4133.75 l
-1515.35 4122.95 l
-f*
-1515.35 4122.95 m
-1514.15 4133.75 l
-1514.15 4133.75 l
-1516.55 4122.95 l
-f*
-1516.55 4122.95 m
-1514.15 4133.75 l
-1498.55 4130.15 l
-1500.95 4119.35 l
-f*
-1445.75 4104.95 m
-1442.15 4113.35 l
-1390.55 4089.35 l
-1395.35 4080.95 l
-f*
-1395.35 4080.95 m
-1390.55 4089.35 l
-1390.55 4089.35 l
-1397.75 4080.95 l
-f*
-1397.75 4080.95 m
-1390.55 4089.35 l
-1371.35 4076.15 l
-1377.35 4068.95 l
-f*
-1331.75 4031.75 m
-1324.55 4040.15 l
-1290.95 4006.55 l
-1296.95 3998.15 l
-f*
-1296.95 3998.15 m
-1290.95 4006.55 l
-1290.95 4006.55 l
-1299.35 3999.35 l
-f*
-1299.35 3999.35 m
-1290.95 4006.55 l
-1274.15 3980.15 l
-1281.35 3974.15 l
-f*
-1252.55 3924.95 m
-1244.15 3929.75 l
-1226.15 3893.75 l
-1234.55 3890.15 l
-f*
-1234.55 3890.15 m
-1226.15 3893.75 l
-1226.15 3893.75 l
-1235.75 3891.35 l
-f*
-1235.75 3891.35 m
-1226.15 3893.75 l
-1216.55 3854.15 l
-1226.15 3851.75 l
-f*
-1216.55 3794.15 m
-1205.75 3796.55 l
-1203.35 3764.15 l
-1214.15 3762.95 l
-f*
-1214.15 3762.95 m
-1203.35 3764.15 l
-1203.35 3764.15 l
-1214.15 3764.15 l
-f*
-1203.35 3716.15 10.7996 47.9998 re
-f*
-1203.35 3575.75 10.7996 80.3999 re
-f*
-1203.35 3436.55 10.7996 79.2 re
-f*
-1203.35 3296.15 10.7996 80.3999 re
-f*
-1203.35 3155.75 10.7996 80.3999 re
-f*
-1203.35 3016.55 10.7996 79.2 re
-f*
-1203.35 2876.15 10.7996 80.3999 re
-f*
-1203.35 2735.75 10.7996 80.3999 re
-f*
-1203.35 2596.55 10.7996 79.2 re
-f*
-1203.35 2456.15 10.7996 80.3999 re
-f*
-1203.35 2315.75 10.7996 80.3999 re
-f*
-1203.35 2176.55 10.7996 79.2 re
-f*
-1203.35 2036.15 10.7996 80.3999 re
-f*
-1203.35 1895.75 10.7996 80.3999 re
-f*
-1203.35 1756.55 10.7996 79.2 re
-f*
-1203.35 1616.15 10.7996 80.3999 re
-f*
-1203.35 1512.95 10.7996 43.2 re
-f*
-1214.15 1512.95 m
-1203.35 1512.95 l
-1203.35 1512.95 l
-1214.15 1514.15 l
-f*
-1214.15 1514.15 m
-1203.35 1512.95 l
-1206.95 1475.75 l
-1217.75 1476.95 l
-f*
-1227.35 1419.35 m
-1217.75 1416.95 l
-1226.15 1384.55 l
-1235.75 1386.95 l
-f*
-1235.75 1386.95 m
-1226.15 1384.55 l
-1226.15 1384.55 l
-1234.55 1388.15 l
-f*
-1234.55 1388.15 m
-1226.15 1384.55 l
-1246.55 1342.55 l
-1254.95 1347.35 l
-f*
-1284.95 1298.15 m
-1277.75 1292.15 l
-1290.95 1271.75 l
-1299.35 1277.75 l
-f*
-1299.35 1277.75 m
-1290.95 1271.75 l
-1290.95 1271.75 l
-1298.15 1280.15 l
-f*
-1298.15 1280.15 m
-1290.95 1271.75 l
-1329.35 1233.35 l
-1337.75 1240.55 l
-f*
-1383.35 1205.75 m
-1377.35 1198.55 l
-1390.55 1188.95 l
-1397.75 1196.15 l
-f*
-1397.75 1196.15 m
-1390.55 1188.95 l
-1390.55 1188.95 l
-1395.35 1197.35 l
-f*
-1395.35 1197.35 m
-1390.55 1188.95 l
-1446.95 1162.55 l
-1451.75 1170.95 l
-f*
-1508.15 1156.55 m
-1505.75 1146.95 l
-1514.15 1144.55 l
-1516.55 1154.15 l
-f*
-1516.55 1154.15 m
-1514.15 1144.55 l
-1514.15 1144.55 l
-1515.35 1154.15 l
-f*
-1515.35 1154.15 m
-1514.15 1144.55 l
-1578.95 1138.55 l
-1580.15 1148.15 l
-f*
-1580.15 1148.15 m
-1578.95 1138.55 l
-1578.95 1138.55 l
-1578.95 1148.15 l
-f*
-1578.95 1138.55 6 9.6001 re
-f*
-1644.95 1138.55 80.3999 9.6001 re
-f*
-1785.35 1138.55 79.2 9.6001 re
-f*
-1924.55 1138.55 80.3999 9.6001 re
-f*
-2064.95 1138.55 80.3999 9.6001 re
-f*
-2205.35 1138.55 79.2 9.6001 re
-f*
-2344.55 1138.55 80.3999 9.6001 re
-f*
-2484.95 1138.55 80.3999 9.6001 re
-f*
-2625.35 1138.55 79.2002 9.6001 re
-f*
-2764.55 1138.55 80.3999 9.6001 re
-f*
-2904.95 1138.55 80.3999 9.6001 re
-f*
-3045.35 1138.55 79.2002 9.6001 re
-f*
-3184.55 1138.55 80.3999 9.6001 re
-f*
-3324.95 1138.55 80.3999 9.6001 re
-f*
-3465.35 1138.55 79.2 9.6001 re
-f*
-3604.55 1138.55 80.3999 9.6001 re
-f*
-3744.95 1138.55 80.3999 9.6001 re
-f*
-3885.35 1138.55 79.2 9.6001 re
-f*
-4024.55 1138.55 80.3999 9.6001 re
-f*
-4164.95 1138.55 80.3999 9.6001 re
-f*
-4305.35 1138.55 79.2 9.6001 re
-f*
-4444.55 1138.55 80.3999 9.6001 re
-f*
-4584.95 1138.55 80.3999 9.6001 re
-f*
-4724.15 1151.75 m
-4725.35 1142.15 l
-4744.55 1144.55 l
-4743.35 1154.15 l
-f*
-4743.35 1154.15 m
-4744.55 1144.55 l
-4744.55 1144.55 l
-4742.15 1154.15 l
-f*
-4742.15 1154.15 m
-4744.55 1144.55 l
-4803.35 1160.15 l
-4800.95 1169.75 l
-f*
-4853.75 1192.55 m
-4857.35 1182.95 l
-4866.95 1188.95 l
-4863.35 1197.35 l
-f*
-4863.35 1197.35 m
-4866.95 1188.95 l
-4866.95 1188.95 l
-4860.95 1197.35 l
-f*
-4860.95 1197.35 m
-4866.95 1188.95 l
-4920.95 1226.15 l
-4916.15 1234.55 l
-f*
-4916.15 1234.55 m
-4920.95 1226.15 l
-4920.95 1226.15 l
-4913.75 1233.35 l
-f*
-4913.75 1233.35 m
-4920.95 1226.15 l
-4922.15 1227.35 l
-4916.15 1234.55 l
-f*
-4958.15 1277.75 m
-4965.35 1269.35 l
-4967.75 1271.75 l
-4960.55 1280.15 l
-f*
-4960.55 1280.15 m
-4967.75 1271.75 l
-4967.75 1271.75 l
-4958.15 1278.95 l
-f*
-4958.15 1278.95 m
-4967.75 1271.75 l
-5004.95 1325.75 l
-4997.75 1331.75 l
-f*
-4997.75 1331.75 m
-5004.95 1325.75 l
-5004.95 1325.75 l
-4996.55 1329.35 l
-f*
-4996.55 1329.35 m
-5004.95 1325.75 l
-5008.55 1334.15 l
-5000.15 1340.15 l
-f*
-5024.15 1391.75 m
-5033.75 1389.35 l
-5048.15 1448.15 l
-5038.55 1450.55 l
-f*
-5038.55 1450.55 m
-5048.15 1448.15 l
-5048.15 1448.15 l
-5038.55 1449.35 l
-f*
-5038.55 1449.35 m
-5048.15 1448.15 l
-5049.35 1467.35 l
-5039.75 1468.55 l
-f*
-5044.55 1527.35 10.7996 80.3999 re
-f*
-5044.55 1667.75 10.7996 79.2 re
-f*
-5044.55 1806.95 10.7996 80.3999 re
-f*
-5044.55 1947.35 10.7996 80.3999 re
-f*
-5044.55 2087.75 10.7996 79.2 re
-f*
-5044.55 2226.95 10.7996 80.3999 re
-f*
-5044.55 2367.35 10.7996 80.3999 re
-f*
-5044.55 2507.75 10.7996 79.2 re
-f*
-5044.55 2646.95 10.7996 80.3999 re
-f*
-5044.55 2787.35 10.7996 80.3999 re
-f*
-5044.55 2927.75 10.7996 79.2 re
-f*
-5044.55 3066.95 10.7996 80.3999 re
-f*
-5044.55 3207.35 10.7996 80.3999 re
-f*
-5044.55 3347.75 10.7996 79.2 re
-f*
-5044.55 3486.95 10.7996 80.3999 re
-f*
-5044.55 3627.35 10.7996 80.3999 re
-f*
-5044.55 3766.55 m
-5055.35 3767.75 l
-5048.15 3830.15 l
-5038.55 3828.95 l
-f*
-5038.55 3828.95 m
-5048.15 3830.15 l
-5048.15 3830.15 l
-5038.55 3827.75 l
-f*
-5038.55 3827.75 m
-5048.15 3830.15 l
-5044.55 3846.95 l
-5034.95 3844.55 l
-f*
-5018.15 3899.75 m
-5027.75 3903.35 l
-5004.95 3952.55 l
-4996.55 3948.95 l
-f*
-4996.55 3948.95 m
-5004.95 3952.55 l
-5004.95 3952.55 l
-4996.55 3946.55 l
-f*
-4996.55 3946.55 m
-5004.95 3952.55 l
-4989.35 3972.95 l
-4980.95 3968.15 l
-f*
-4946.15 4013.75 m
-4953.35 4019.75 l
-4920.95 4052.15 l
-4913.75 4046.15 l
-f*
-4913.75 4046.15 m
-4920.95 4052.15 l
-4920.95 4052.15 l
-4914.95 4043.75 l
-f*
-4914.95 4043.75 m
-4920.95 4052.15 l
-4893.35 4071.35 l
-4887.35 4062.95 l
-f*
-4838.15 4091.75 m
-4841.75 4101.35 l
-4808.15 4116.95 l
-4804.55 4108.55 l
-f*
-4804.55 4108.55 m
-4808.15 4116.95 l
-4808.15 4116.95 l
-4805.75 4107.35 l
-f*
-4805.75 4107.35 m
-4808.15 4116.95 l
-4767.35 4127.75 l
-4764.95 4118.15 l
-f*
-4707.35 4127.75 m
-4708.55 4137.35 l
-4679.75 4139.75 l
-4678.55 4130.15 l
-f*
-4678.55 4130.15 m
-4679.75 4139.75 l
-4679.75 4139.75 l
-4679.75 4130.15 l
-f*
-4628.15 4130.15 51.5999 9.59961 re
-f*
-4488.95 4130.15 79.2 9.59961 re
-f*
-4348.55 4130.15 80.3999 9.59961 re
-f*
-4208.15 4130.15 80.3999 9.59961 re
-f*
-4068.95 4130.15 79.2 9.59961 re
-f*
-3928.55 4130.15 80.3999 9.59961 re
-f*
-3788.15 4130.15 80.3999 9.59961 re
-f*
-3648.95 4130.15 79.2 9.59961 re
-f*
-3508.55 4130.15 80.3999 9.59961 re
-f*
-3368.15 4130.15 80.3999 9.59961 re
-f*
-3228.95 4130.15 79.2 9.59961 re
-f*
-3088.55 4130.15 80.3999 9.59961 re
-f*
-2948.15 4130.15 80.3999 9.59961 re
-f*
-2808.95 4130.15 79.2 9.59961 re
-f*
-2668.55 4130.15 80.3999 9.59961 re
-f*
-2528.15 4130.15 80.3999 9.59961 re
-f*
-2388.95 4130.15 79.2 9.59961 re
-f*
-2248.55 4130.15 80.3999 9.59961 re
-f*
-2108.15 4130.15 80.3999 9.59961 re
-f*
-1968.95 4130.15 79.2 9.59961 re
-f*
-1828.55 4130.15 80.3999 9.59961 re
-f*
-1688.15 4130.15 80.3999 9.59961 re
-f*
-1578.95 4130.15 49.2002 9.59961 re
-f*
-0.564706 g
-2262.95 6855.35 m
-2262.95 6965.75 2171.75 7056.95 2060.15 7056.95 c
-1563.35 7056.95 l
-1451.75 7056.95 1360.55 6965.75 1360.55 6855.35 c
-1360.55 6717.35 l
-1360.55 6606.95 1451.75 6515.75 1563.35 6515.75 c
-2060.15 6515.75 l
-2171.75 6515.75 2262.95 6606.95 2262.95 6717.35 c
-f*
-1 g
-2198.15 6912.95 m
-2198.15 7022.15 2109.35 7110.95 1997.75 7110.95 c
-1506.95 7110.95 l
-1396.55 7110.95 1306.55 7022.15 1306.55 6912.95 c
-1306.55 6778.55 l
-1306.55 6669.35 1395.35 6580.55 1506.95 6580.55 c
-1997.75 6580.55 l
-2109.35 6580.55 2198.15 6669.35 2198.15 6778.55 c
-f*
-0 g
-2198.15 6912.95 m
-2198.15 7022.15 2109.35 7110.95 1997.75 7110.95 c
-1506.95 7110.95 l
-1396.55 7110.95 1306.55 7022.15 1306.55 6912.95 c
-1306.55 6778.55 l
-1306.55 6669.35 1395.35 6580.55 1506.95 6580.55 c
-1997.75 6580.55 l
-2109.35 6580.55 2198.15 6669.35 2198.15 6778.55 c
-h
-S
-0.201248 i
-1539.33 6952 m
-1425.22 6952 l
-1425.22 6947 l
-1439.11 6946.2 1443 6943.18 1443 6932.72 c
-1443 6835.32 l
-1443 6824.85 1440.17 6822.64 1425.22 6821.03 c
-1425.22 6816 l
-1497.67 6816 l
-1497.67 6821 l
-1479.15 6821.81 1476 6824.23 1476 6835.32 c
-1476 6882.21 l
-1496.22 6881.81 1503.55 6874.36 1506.32 6851.02 c
-1511.35 6851.02 l
-1511.35 6919.04 l
-1506.32 6919.04 l
-1502.76 6896.1 1495.82 6889.05 1476 6889.05 c
-1476 6935.74 l
-1476 6943.19 1478.52 6945 1488.41 6945 c
-1507.13 6945 1518.8 6941.64 1525.04 6934.74 c
-1529.47 6929.71 1531.68 6924.27 1534.5 6911.59 c
-1539.33 6911.59 l
-h
-1544.96 6816 m
-f*
-1589.19 6909 m
-1550.84 6909 l
-1550.84 6903.95 l
-1559.49 6902.74 1562 6900.12 1562 6892.07 c
-1562 6832.9 l
-1562 6824.65 1559.93 6822.44 1550.84 6820.83 c
-1550.84 6816 l
-1604.37 6816 l
-1604.37 6820.83 l
-1592.09 6821.63 1590 6824.25 1590 6836.73 c
-1590 6874.76 l
-1590 6885.23 1595.49 6893.88 1601.95 6893.88 c
-1603.56 6893.88 1605.37 6892.47 1607.59 6889.25 c
-1611.41 6883.82 1614.43 6882.01 1619.66 6882.01 c
-1627.11 6882.01 1632.34 6887.64 1632.34 6895.29 c
-1632.34 6904.55 1625.5 6911.41 1616.04 6911.41 c
-1606.1 6911.41 1598.54 6906.12 1589.19 6892.27 c
-h
-1634.35 6816 m
-f*
-1729.19 6828.88 m
-1727.18 6826.87 l
-1726.57 6826.26 1725.97 6826.06 1724.96 6826.06 c
-1722.15 6826.06 1721 6827.67 1721 6831.09 c
-1721 6883.62 l
-1721 6900.73 1705.6 6911.42 1680.89 6911.42 c
-1658.15 6911.42 1642.85 6901.06 1642.85 6885.83 c
-1642.85 6877.38 1647.69 6872.55 1655.94 6872.55 c
-1663.99 6872.55 1669.62 6877.38 1669.62 6884.22 c
-1669.62 6887.04 1668.61 6889.66 1666 6892.88 c
-1664.19 6894.89 1663.58 6896.1 1663.58 6897.3 c
-1663.58 6901.53 1669.02 6904.42 1676.26 6904.42 c
-1688.14 6904.42 1693.86 6899.08 1693.86 6887.04 c
-1693.86 6872.35 l
-1669.91 6865.1 1660.29 6861.48 1652.51 6856.45 c
-1643.46 6850.41 1639 6843.37 1639 6834.52 c
-1639 6822.24 1648.27 6813.18 1661.17 6813.18 c
-1672.84 6813.18 1682.1 6817.21 1693.17 6827.27 c
-1695.38 6817.01 1699.81 6813.18 1709.67 6813.18 c
-1718.32 6813.18 1724.56 6816.4 1732.21 6824.65 c
-h
-1693 6836.13 m
-1687.55 6829.89 1683.52 6827.47 1678.68 6827.47 c
-1672.64 6827.47 1668 6832.91 1668 6840.96 c
-1668 6852.63 1676.61 6860.88 1693 6865.31 c
-h
-1734.62 6816 m
-f*
-1776.4 6909 m
-1737.7 6909 l
-1737.7 6903.95 l
-1746.55 6902.74 1749 6900.32 1749 6892.07 c
-1749 6832.9 l
-1749 6824.65 1746.74 6822.44 1737.7 6820.83 c
-1737.7 6816 l
-1786 6816 l
-1786 6820.83 l
-1778.95 6821.84 1777 6824.65 1777 6832.3 c
-1777 6886.03 l
-1777 6887.04 1779.87 6890.66 1782.18 6892.88 c
-1786.4 6896.1 1790.02 6898.42 1793.65 6898.42 c
-1801.5 6898.42 1805 6893.59 1805 6881 c
-1805 6832.3 l
-1805 6824.05 1802.68 6821.43 1794.85 6820.83 c
-1794.85 6816 l
-1841.95 6816 l
-1841.95 6820.83 l
-1834.9 6821.64 1833 6824.65 1833 6832.3 c
-1833 6886.03 l
-1833 6887.04 1835.73 6890.46 1837.92 6892.68 c
-1842.35 6896.1 1845.97 6898.42 1849.59 6898.42 c
-1857.24 6898.42 1860 6893.38 1860 6881 c
-1860 6832.3 l
-1860 6823.85 1857.85 6821.43 1850.4 6820.83 c
-1850.4 6816 l
-1898.3 6816 l
-1898.3 6821 l
-1890.45 6821.4 1888 6823.78 1888 6832.3 c
-1888 6882.81 l
-1888 6900.12 1877.43 6911.42 1861.07 6911.42 c
-1849.59 6911.42 1841.95 6906.73 1831.48 6893.68 c
-1825.44 6906.36 1818.4 6911.42 1805.72 6911.42 c
-1792.95 6911.42 1783.98 6905.91 1776.4 6893.68 c
-h
-1901.64 6816 m
-f*
-1979.9 6841.16 m
-1971.65 6831.29 1965.61 6827.18 1956.96 6827.18 c
-1949.31 6827.18 1943.27 6830.77 1939.25 6837.94 c
-1935.43 6844.54 1933.82 6851.56 1933.01 6866 c
-1983.73 6866 l
-1982.52 6882.36 1979.5 6891.43 1973.26 6899.12 c
-1966.82 6906.96 1957.36 6911.42 1946.09 6911.42 c
-1920.94 6911.42 1904.03 6891.4 1904.03 6861.88 c
-1904.03 6832.5 1920.53 6813.18 1945.49 6813.18 c
-1961.79 6813.18 1971.65 6819.42 1984.73 6838.34 c
-h
-1932 6873 m
-1932.61 6896.96 1936.23 6904.42 1946.09 6904.42 c
-1951.93 6904.42 1955.55 6901.38 1957.16 6895.49 c
-1958.17 6891.67 1958.57 6886.03 1958.97 6875.77 c
-1958.97 6873 l
-h
-1988.35 6816 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -6816]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4722.95 6054.95 m
-4722.95 6166.55 4631.75 6257.75 4520.15 6257.75 c
-4023.35 6257.75 l
-3911.75 6257.75 3820.55 6166.55 3820.55 6054.95 c
-3820.55 5918.15 l
-3820.55 5806.55 3911.75 5715.35 4023.35 5715.35 c
-4520.15 5715.35 l
-4631.75 5715.35 4722.95 5806.55 4722.95 5918.15 c
-f*
-1 g
-4653.35 6111.35 m
-4653.35 6219.35 4564.55 6306.95 4455.35 6306.95 c
-3969.35 6306.95 l
-3860.15 6306.95 3771.35 6219.35 3771.35 6111.35 c
-3771.35 5980.55 l
-3771.35 5872.55 3860.15 5784.95 3969.35 5784.95 c
-4455.35 5784.95 l
-4564.55 5784.95 4653.35 5872.55 4653.35 5980.55 c
-f*
-16 w
-0 g
-4653.35 6111.35 m
-4653.35 6219.35 4564.55 6306.95 4455.35 6306.95 c
-3969.35 6306.95 l
-3860.15 6306.95 3771.35 6219.35 3771.35 6111.35 c
-3771.35 5980.55 l
-3771.35 5872.55 3860.15 5784.95 3969.35 5784.95 c
-4455.35 5784.95 l
-4564.55 5784.95 4653.35 5872.55 4653.35 5980.55 c
-h
-S
-0.201248 i
-3999.33 6153 m
-3885.22 6153 l
-3885.22 6148 l
-3899.11 6147.2 3903 6144.18 3903 6133.72 c
-3903 6036.32 l
-3903 6025.85 3900.17 6023.64 3885.22 6022.03 c
-3885.22 6017 l
-3957.67 6017 l
-3957.67 6022 l
-3939.15 6022.81 3936 6025.23 3936 6036.32 c
-3936 6083.21 l
-3956.22 6082.81 3963.55 6075.36 3966.32 6052.02 c
-3971.35 6052.02 l
-3971.35 6120.04 l
-3966.32 6120.04 l
-3962.76 6097.1 3955.82 6090.05 3936 6090.05 c
-3936 6136.74 l
-3936 6144.19 3938.52 6146 3948.41 6146 c
-3967.13 6146 3978.8 6142.64 3985.04 6135.74 c
-3989.47 6130.71 3991.68 6125.27 3994.5 6112.59 c
-3999.33 6112.59 l
-h
-4004.96 6017 m
-f*
-4049.19 6110 m
-4010.84 6110 l
-4010.84 6104.95 l
-4019.49 6103.74 4022 6101.12 4022 6093.07 c
-4022 6033.9 l
-4022 6025.65 4019.93 6023.44 4010.84 6021.83 c
-4010.84 6017 l
-4064.37 6017 l
-4064.37 6021.83 l
-4052.09 6022.63 4050 6025.25 4050 6037.73 c
-4050 6075.76 l
-4050 6086.23 4055.49 6094.88 4061.95 6094.88 c
-4063.56 6094.88 4065.37 6093.47 4067.59 6090.25 c
-4071.41 6084.82 4074.43 6083.01 4079.66 6083.01 c
-4087.11 6083.01 4092.34 6088.64 4092.34 6096.29 c
-4092.34 6105.55 4085.5 6112.41 4076.04 6112.41 c
-4066.1 6112.41 4058.54 6107.12 4049.19 6093.27 c
-h
-4094.35 6017 m
-f*
-4189.19 6029.88 m
-4187.18 6027.87 l
-4186.57 6027.26 4185.97 6027.06 4184.96 6027.06 c
-4182.15 6027.06 4181 6028.67 4181 6032.09 c
-4181 6084.62 l
-4181 6101.73 4165.6 6112.42 4140.89 6112.42 c
-4118.15 6112.42 4102.85 6102.06 4102.85 6086.83 c
-4102.85 6078.38 4107.69 6073.55 4115.94 6073.55 c
-4123.99 6073.55 4129.62 6078.38 4129.62 6085.22 c
-4129.62 6088.04 4128.61 6090.66 4126 6093.88 c
-4124.19 6095.89 4123.58 6097.1 4123.58 6098.3 c
-4123.58 6102.53 4129.02 6105.42 4136.26 6105.42 c
-4148.14 6105.42 4153.86 6100.08 4153.86 6088.04 c
-4153.86 6073.35 l
-4129.91 6066.1 4120.29 6062.48 4112.51 6057.45 c
-4103.46 6051.41 4099 6044.37 4099 6035.52 c
-4099 6023.24 4108.27 6014.18 4121.17 6014.18 c
-4132.84 6014.18 4142.1 6018.21 4153.17 6028.27 c
-4155.38 6018.01 4159.81 6014.18 4169.67 6014.18 c
-4178.32 6014.18 4184.56 6017.4 4192.21 6025.65 c
-h
-4153 6037.13 m
-4147.55 6030.89 4143.52 6028.47 4138.68 6028.47 c
-4132.64 6028.47 4128 6033.91 4128 6041.96 c
-4128 6053.63 4136.61 6061.88 4153 6066.31 c
-h
-4194.62 6017 m
-f*
-4236.4 6110 m
-4197.7 6110 l
-4197.7 6104.95 l
-4206.55 6103.74 4209 6101.32 4209 6093.07 c
-4209 6033.9 l
-4209 6025.65 4206.74 6023.44 4197.7 6021.83 c
-4197.7 6017 l
-4246 6017 l
-4246 6021.83 l
-4238.95 6022.84 4237 6025.65 4237 6033.3 c
-4237 6087.03 l
-4237 6088.04 4239.87 6091.66 4242.18 6093.88 c
-4246.4 6097.1 4250.02 6099.42 4253.65 6099.42 c
-4261.5 6099.42 4265 6094.59 4265 6082 c
-4265 6033.3 l
-4265 6025.05 4262.68 6022.43 4254.85 6021.83 c
-4254.85 6017 l
-4301.95 6017 l
-4301.95 6021.83 l
-4294.9 6022.64 4293 6025.65 4293 6033.3 c
-4293 6087.03 l
-4293 6088.04 4295.73 6091.46 4297.92 6093.68 c
-4302.35 6097.1 4305.97 6099.42 4309.59 6099.42 c
-4317.24 6099.42 4320 6094.38 4320 6082 c
-4320 6033.3 l
-4320 6024.85 4317.85 6022.43 4310.4 6021.83 c
-4310.4 6017 l
-4358.3 6017 l
-4358.3 6022 l
-4350.45 6022.4 4348 6024.78 4348 6033.3 c
-4348 6083.81 l
-4348 6101.12 4337.43 6112.42 4321.07 6112.42 c
-4309.59 6112.42 4301.95 6107.73 4291.48 6094.68 c
-4285.44 6107.36 4278.4 6112.42 4265.72 6112.42 c
-4252.95 6112.42 4243.98 6106.91 4236.4 6094.68 c
-h
-4361.64 6017 m
-f*
-4439.9 6042.16 m
-4431.65 6032.29 4425.61 6028.18 4416.96 6028.18 c
-4409.31 6028.18 4403.27 6031.77 4399.25 6038.94 c
-4395.43 6045.54 4393.82 6052.56 4393.01 6067 c
-4443.73 6067 l
-4442.52 6083.36 4439.5 6092.43 4433.26 6100.12 c
-4426.82 6107.96 4417.36 6112.42 4406.09 6112.42 c
-4380.94 6112.42 4364.03 6092.4 4364.03 6062.88 c
-4364.03 6033.5 4380.53 6014.18 4405.49 6014.18 c
-4421.79 6014.18 4431.65 6020.42 4444.73 6039.34 c
-h
-4392 6074 m
-4392.61 6097.96 4396.23 6105.42 4406.09 6105.42 c
-4411.93 6105.42 4415.55 6102.38 4417.16 6096.49 c
-4418.17 6092.67 4418.57 6087.03 4418.97 6076.77 c
-4418.97 6074 l
-h
-4448.35 6017 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4484 -6015]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3794.15 5348.15 m
-3794.15 5458.55 3702.95 5549.75 3591.35 5549.75 c
-3095.75 5549.75 l
-2984.15 5549.75 2892.95 5458.55 2892.95 5348.15 c
-2892.95 5210.15 l
-2892.95 5099.75 2984.15 5008.55 3095.75 5008.55 c
-3591.35 5008.55 l
-3702.95 5008.55 3794.15 5099.75 3794.15 5210.15 c
-f*
-1 g
-3729.35 5405.75 m
-3729.35 5514.95 3640.55 5603.75 3530.15 5603.75 c
-3039.35 5603.75 l
-2927.75 5603.75 2838.95 5514.95 2838.95 5405.75 c
-2838.95 5271.35 l
-2838.95 5162.15 2927.75 5073.35 3039.35 5073.35 c
-3528.95 5073.35 l
-3640.55 5073.35 3729.35 5162.15 3729.35 5271.35 c
-f*
-8 w
-0 g
-3729.35 5405.75 m
-3729.35 5514.95 3640.55 5603.75 3530.15 5603.75 c
-3039.35 5603.75 l
-2927.75 5603.75 2838.95 5514.95 2838.95 5405.75 c
-2838.95 5271.35 l
-2838.95 5162.15 2927.75 5073.35 3039.35 5073.35 c
-3528.95 5073.35 l
-3640.55 5073.35 3729.35 5162.15 3729.35 5271.35 c
-h
-S
-0.201248 i
-3082.33 5445 m
-2968.22 5445 l
-2968.22 5440 l
-2982.11 5439.2 2986 5436.18 2986 5425.72 c
-2986 5328.32 l
-2986 5317.85 2983.17 5315.64 2968.22 5314.03 c
-2968.22 5309 l
-3040.67 5309 l
-3040.67 5314 l
-3022.15 5314.81 3019 5317.23 3019 5328.32 c
-3019 5375.21 l
-3039.22 5374.81 3046.55 5367.36 3049.32 5344.02 c
-3054.35 5344.02 l
-3054.35 5412.04 l
-3049.32 5412.04 l
-3045.76 5389.1 3038.82 5382.05 3019 5382.05 c
-3019 5428.74 l
-3019 5436.19 3021.52 5438 3031.41 5438 c
-3050.13 5438 3061.8 5434.64 3068.04 5427.74 c
-3072.47 5422.71 3074.68 5417.27 3077.5 5404.59 c
-3082.33 5404.59 l
-h
-3087.96 5309 m
-f*
-3131.19 5402 m
-3092.84 5402 l
-3092.84 5396.95 l
-3101.49 5395.74 3104 5393.12 3104 5385.07 c
-3104 5325.9 l
-3104 5317.65 3101.93 5315.44 3092.84 5313.83 c
-3092.84 5309 l
-3146.37 5309 l
-3146.37 5313.83 l
-3134.09 5314.63 3132 5317.25 3132 5329.73 c
-3132 5367.76 l
-3132 5378.23 3137.49 5386.88 3143.95 5386.88 c
-3145.56 5386.88 3147.37 5385.47 3149.59 5382.25 c
-3153.41 5376.82 3156.43 5375.01 3161.66 5375.01 c
-3169.11 5375.01 3174.34 5380.64 3174.34 5388.29 c
-3174.34 5397.55 3167.5 5404.41 3158.04 5404.41 c
-3148.1 5404.41 3140.54 5399.12 3131.19 5385.27 c
-h
-3176.35 5309 m
-f*
-3271.19 5321.88 m
-3269.18 5319.87 l
-3268.57 5319.26 3267.97 5319.06 3266.96 5319.06 c
-3264.15 5319.06 3263 5320.67 3263 5324.09 c
-3263 5376.62 l
-3263 5393.73 3247.6 5404.42 3222.89 5404.42 c
-3200.15 5404.42 3184.85 5394.06 3184.85 5378.83 c
-3184.85 5370.38 3189.69 5365.55 3197.94 5365.55 c
-3205.99 5365.55 3211.62 5370.38 3211.62 5377.22 c
-3211.62 5380.04 3210.61 5382.66 3208 5385.88 c
-3206.19 5387.89 3205.58 5389.1 3205.58 5390.3 c
-3205.58 5394.53 3211.02 5397.42 3218.26 5397.42 c
-3230.14 5397.42 3235.86 5392.08 3235.86 5380.04 c
-3235.86 5365.35 l
-3211.91 5358.1 3202.29 5354.48 3194.51 5349.45 c
-3185.46 5343.41 3181 5336.37 3181 5327.52 c
-3181 5315.24 3190.27 5306.18 3203.17 5306.18 c
-3214.84 5306.18 3224.1 5310.21 3235.17 5320.27 c
-3237.38 5310.01 3241.81 5306.18 3251.67 5306.18 c
-3260.32 5306.18 3266.56 5309.4 3274.21 5317.65 c
-h
-3235 5329.13 m
-3229.55 5322.89 3225.52 5320.47 3220.68 5320.47 c
-3214.64 5320.47 3210 5325.91 3210 5333.96 c
-3210 5345.63 3218.61 5353.88 3235 5358.31 c
-h
-3276.62 5309 m
-f*
-3318.4 5402 m
-3279.7 5402 l
-3279.7 5396.95 l
-3288.55 5395.74 3291 5393.32 3291 5385.07 c
-3291 5325.9 l
-3291 5317.65 3288.74 5315.44 3279.7 5313.83 c
-3279.7 5309 l
-3328 5309 l
-3328 5313.83 l
-3320.95 5314.84 3319 5317.65 3319 5325.3 c
-3319 5379.03 l
-3319 5380.04 3321.87 5383.66 3324.18 5385.88 c
-3328.4 5389.1 3332.02 5391.42 3335.65 5391.42 c
-3343.5 5391.42 3347 5386.59 3347 5374 c
-3347 5325.3 l
-3347 5317.05 3344.68 5314.43 3336.85 5313.83 c
-3336.85 5309 l
-3383.95 5309 l
-3383.95 5313.83 l
-3376.9 5314.64 3375 5317.65 3375 5325.3 c
-3375 5379.03 l
-3375 5380.04 3377.73 5383.46 3379.92 5385.68 c
-3384.35 5389.1 3387.97 5391.42 3391.59 5391.42 c
-3399.24 5391.42 3402 5386.38 3402 5374 c
-3402 5325.3 l
-3402 5316.85 3399.85 5314.43 3392.4 5313.83 c
-3392.4 5309 l
-3440.3 5309 l
-3440.3 5314 l
-3432.45 5314.4 3430 5316.78 3430 5325.3 c
-3430 5375.81 l
-3430 5393.12 3419.43 5404.42 3403.07 5404.42 c
-3391.59 5404.42 3383.95 5399.73 3373.48 5386.68 c
-3367.44 5399.36 3360.4 5404.42 3347.72 5404.42 c
-3334.95 5404.42 3325.98 5398.91 3318.4 5386.68 c
-h
-3443.64 5309 m
-f*
-3523.9 5334.16 m
-3515.65 5324.29 3509.61 5320.18 3500.96 5320.18 c
-3493.31 5320.18 3487.27 5323.77 3483.25 5330.94 c
-3479.43 5337.54 3477.82 5344.56 3477.01 5359 c
-3527.73 5359 l
-3526.52 5375.36 3523.5 5384.43 3517.26 5392.12 c
-3510.82 5399.96 3501.36 5404.42 3490.09 5404.42 c
-3464.94 5404.42 3448.03 5384.4 3448.03 5354.88 c
-3448.03 5325.5 3464.53 5306.18 3489.49 5306.18 c
-3505.79 5306.18 3515.65 5312.42 3528.73 5331.34 c
-h
-3476 5366 m
-3476.61 5389.96 3480.23 5397.42 3490.09 5397.42 c
-3495.93 5397.42 3499.55 5394.38 3501.16 5388.49 c
-3502.17 5384.67 3502.57 5379.03 3502.97 5368.77 c
-3502.97 5366 l
-h
-3532.35 5309 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -5309]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-1751.75 6550.55 m
-1751.75 6558.95 1751.75 6558.95 1751.75 6550.55 c
-1751.75 6402.95 1791.35 6261.35 1863.35 6160.55 c
-S
-1804.55 6166.55 m
-1853.75 6182.15 l
-1878.95 6227.75 l
-1940.15 6080.15 l
-f*
-2244.95 5584.55 m
-2334.95 5466.95 2519.75 5382.95 2740.55 5361.35 c
-S
-2699.75 5318.15 m
-2721.35 5364.95 l
-2705.75 5412.95 l
-2854.55 5356.55 l
-f*
-2831.75 6964.55 m
-2729.75 7064.15 2584.55 7121.75 2430.95 7121.75 c
-2326.55 7121.75 2224.55 7095.35 2136.95 7044.95 c
-S
-2766.95 6958.55 m
-2814.95 6974.15 l
-2838.95 7019.75 l
-2902.55 6873.35 l
-f*
-3186.95 6388.55 m
-3275.75 6214.55 3440.15 6089.75 3635.75 6050.15 c
-S
-3591.35 6010.55 m
-3616.55 6056.15 l
-3604.55 6106.55 l
-3748.55 6035.75 l
-f*
-0.564706 g
-3638.15 6564.95 m
-3503.75 6600.95 l
-3599.75 6657.35 l
-3446.15 6665.75 l
-3488.15 6736.55 l
-3340.55 6716.15 l
-3323.75 6786.95 l
-3203.75 6742.55 l
-3128.15 6806.15 l
-3052.55 6742.55 l
-2932.55 6786.95 l
-2914.55 6716.15 l
-2765.75 6736.55 l
-2810.15 6665.75 l
-2656.55 6657.35 l
-2752.55 6600.95 l
-2616.95 6564.95 l
-2752.55 6530.15 l
-2656.55 6473.75 l
-2810.15 6464.15 l
-2765.75 6394.55 l
-2914.55 6414.95 l
-2932.55 6342.95 l
-3052.55 6388.55 l
-3128.15 6324.95 l
-3203.75 6388.55 l
-3323.75 6342.95 l
-3340.55 6414.95 l
-3488.15 6394.55 l
-3446.15 6464.15 l
-3599.75 6473.75 l
-3503.75 6530.15 l
-f*
-1 g
-3578.15 6624.95 m
-3443.75 6660.95 l
-3539.75 6717.35 l
-3386.15 6725.75 l
-3428.15 6796.55 l
-3280.55 6776.15 l
-3263.75 6846.95 l
-3143.75 6802.55 l
-3068.15 6866.15 l
-2992.55 6802.55 l
-2872.55 6846.95 l
-2854.55 6776.15 l
-2705.75 6796.55 l
-2750.15 6725.75 l
-2596.55 6717.35 l
-2692.55 6660.95 l
-2556.95 6624.95 l
-2692.55 6590.15 l
-2596.55 6533.75 l
-2750.15 6524.15 l
-2705.75 6454.55 l
-2854.55 6474.95 l
-2872.55 6402.95 l
-2992.55 6448.55 l
-3068.15 6384.95 l
-3143.75 6448.55 l
-3263.75 6402.95 l
-3280.55 6474.95 l
-3428.15 6454.55 l
-3386.15 6524.15 l
-3539.75 6533.75 l
-3443.75 6590.15 l
-f*
-0 g
-3578.15 6624.95 m
-3443.75 6660.95 l
-3539.75 6717.35 l
-3386.15 6725.75 l
-3428.15 6796.55 l
-3280.55 6776.15 l
-3263.75 6846.95 l
-3143.75 6802.55 l
-3068.15 6866.15 l
-2992.55 6802.55 l
-2872.55 6846.95 l
-2854.55 6776.15 l
-2705.75 6796.55 l
-2750.15 6725.75 l
-2596.55 6717.35 l
-2692.55 6660.95 l
-2556.95 6624.95 l
-2692.55 6590.15 l
-2596.55 6533.75 l
-2750.15 6524.15 l
-2705.75 6454.55 l
-2854.55 6474.95 l
-2872.55 6402.95 l
-2992.55 6448.55 l
-3068.15 6384.95 l
-3143.75 6448.55 l
-3263.75 6402.95 l
-3280.55 6474.95 l
-3428.15 6454.55 l
-3386.15 6524.15 l
-3539.75 6533.75 l
-3443.75 6590.15 l
-3578.15 6624.95 l
-3539.75 6624.95 l
-3417.35 6593.75 l
-3506.15 6540.95 l
-3368.15 6533.75 l
-3408.95 6467.75 l
-3273.35 6485.75 l
-3256.55 6417.35 l
-3141.35 6459.35 l
-3068.15 6396.95 l
-2994.95 6459.35 l
-2879.75 6417.35 l
-2861.75 6485.75 l
-2726.15 6467.75 l
-2766.95 6533.75 l
-2630.15 6540.95 l
-2718.95 6593.75 l
-2596.55 6624.95 l
-2717.75 6657.35 l
-2630.15 6710.15 l
-2766.95 6717.35 l
-2726.15 6783.35 l
-2861.75 6764.15 l
-2879.75 6833.75 l
-2994.95 6790.55 l
-3068.15 6852.95 l
-3141.35 6790.55 l
-3256.55 6833.75 l
-3273.35 6764.15 l
-3408.95 6783.35 l
-3368.15 6717.35 l
-3506.15 6710.15 l
-3417.35 6657.35 l
-3539.75 6624.95 l
-3578.15 6624.95 l
-f*
-0.2 i
-2890.08 6676.76 m
-2870.08 6602.52 l
-2867.52 6593.88 2864.48 6591.64 2854.08 6591 c
-2854.08 6587 l
-2904 6587 l
-2904 6591 l
-2894.72 6591.48 2892.48 6592.76 2892.48 6597.88 c
-2892.48 6599.64 2892.8 6601.4 2893.76 6605.08 c
-2893.92 6605.88 l
-2894.08 6606.68 l
-2913.76 6678.52 l
-2916.16 6686.84 2918.56 6689.08 2926.72 6690.04 c
-2926.72 6694 l
-2892.8 6694 l
-2843.2 6617.24 l
-2834.56 6694 l
-2799.2 6694 l
-2799.2 6690 l
-2809.28 6689.52 2810.72 6688.89 2810.72 6684.44 c
-2810.72 6682.2 2810.08 6679.32 2808.96 6675.16 c
-2791.52 6615.48 l
-2785.12 6594.68 2784 6592.92 2775.36 6591 c
-2775.36 6587 l
-2808.48 6587 l
-2808.48 6591 l
-2798.24 6592.28 2795.68 6594.2 2795.68 6600.76 c
-2795.68 6603.48 2796.48 6607.48 2798.72 6615.48 c
-2814.88 6674.52 l
-2825.6 6585.08 l
-2830.08 6585.08 l
-h
-2922.24 6587 m
-f*
-2991.44 6607.32 m
-2984.88 6598.52 2982.48 6595.76 2979.92 6595.76 c
-2978.64 6595.76 2978 6596.86 2978 6598.52 c
-2978 6602.52 2979.44 6609.08 2983.44 6622.2 c
-2994.8 6659.96 l
-2977.04 6658.84 l
-2974.16 6649.4 l
-2972.72 6657.56 2969.2 6661.08 2962.32 6661.08 c
-2942.64 6661.08 2919 6630.27 2919 6605.24 c
-2919 6593.08 2925.74 6584.92 2935.92 6584.92 c
-2945.68 6584.92 2953.04 6590.68 2962.16 6606.04 c
-2960.24 6599.48 2960 6597.56 2960 6595.32 c
-2960 6589.4 2964.76 6584.76 2970.64 6584.76 c
-2978.16 6584.76 2985.52 6591 2994.8 6604.92 c
-h
-2964.56 6654.2 m
-2968.08 6653.88 2970.56 6651 2970.56 6646.68 c
-2970.56 6637.08 2965.24 6619.32 2958.96 6608.28 c
-2954.64 6600.44 2949.84 6595.92 2945.52 6595.92 c
-2941.36 6595.92 2938 6599.75 2938 6604.92 c
-2938 6613.24 2943.42 6629.24 2950.16 6641.08 c
-2954.96 6649.56 2960.24 6654.52 2964.56 6654.2 c
-h
-3002 6587 m
-f*
-3036.56 6660.92 m
-3020.24 6658.36 3014 6657.4 3005.68 6656.44 c
-3005.68 6652 l
-3012.88 6651.69 3014.32 6651.07 3014.32 6648.12 c
-3014.32 6646.52 3013.04 6640.76 3010.8 6632.44 c
-2994.8 6570.36 l
-2991.76 6559.8 2990.48 6558.84 2982.8 6559 c
-2982.8 6554 l
-3022.64 6554 l
-3022.64 6559 l
-3014.64 6559.14 3012.24 6560.16 3012.24 6563.64 c
-3012.24 6565.88 3013.36 6570.68 3016.4 6581.88 c
-3017.52 6585.72 3017.52 6586.04 3018.16 6588.44 c
-3023.76 6585.56 3025.68 6584.92 3029.04 6584.92 c
-3050.8 6584.92 3073.36 6613.88 3073.36 6641.56 c
-3073.36 6653.4 3066.64 6661.08 3056.08 6661.08 c
-3046.96 6661.08 3039.92 6655.92 3030.48 6642.52 c
-h
-3047.12 6649.56 m
-3051.28 6649.24 3053.68 6645.56 3053.36 6640.44 c
-3052.72 6629.88 3047.6 6614.04 3041.84 6603.64 c
-3036.88 6595 3031.76 6589.92 3026.32 6589.92 c
-3022.8 6589.92 3020.08 6592.75 3020.08 6596.28 c
-3020.08 6599 3021.84 6605.56 3026.16 6620.12 c
-3029.68 6631.8 3031.12 6635.8 3033.52 6639.48 c
-3037.52 6645.72 3042.96 6649.88 3047.12 6649.56 c
-h
-3082 6587 m
-f*
-3117.56 6660.92 m
-3101.24 6658.36 3095 6657.4 3086.68 6656.44 c
-3086.68 6652 l
-3093.88 6651.69 3095.32 6651.07 3095.32 6648.12 c
-3095.32 6646.52 3094.04 6640.76 3091.8 6632.44 c
-3075.8 6570.36 l
-3072.76 6559.8 3071.48 6558.84 3063.8 6559 c
-3063.8 6554 l
-3103.64 6554 l
-3103.64 6559 l
-3095.64 6559.14 3093.24 6560.16 3093.24 6563.64 c
-3093.24 6565.88 3094.36 6570.68 3097.4 6581.88 c
-3098.52 6585.72 3098.52 6586.04 3099.16 6588.44 c
-3104.76 6585.56 3106.68 6584.92 3110.04 6584.92 c
-3131.8 6584.92 3154.36 6613.88 3154.36 6641.56 c
-3154.36 6653.4 3147.64 6661.08 3137.08 6661.08 c
-3127.96 6661.08 3120.92 6655.92 3111.48 6642.52 c
-h
-3128.12 6649.56 m
-3132.28 6649.24 3134.68 6645.56 3134.36 6640.44 c
-3133.72 6629.88 3128.6 6614.04 3122.84 6603.64 c
-3117.88 6595 3112.76 6589.92 3107.32 6589.92 c
-3103.8 6589.92 3101.08 6592.75 3101.08 6596.28 c
-3101.08 6599 3102.84 6605.56 3107.16 6620.12 c
-3110.68 6631.8 3112.12 6635.8 3114.52 6639.48 c
-3118.52 6645.72 3123.96 6649.88 3128.12 6649.56 c
-h
-3163 6587 m
-f*
-3196.56 6609.56 m
-3194.32 6606.36 l
-3190.16 6600.12 3186.48 6596.56 3184.08 6596.56 c
-3182.8 6596.56 3182 6597.77 3182 6599.16 c
-3182 6600.6 3182.62 6604.76 3183.12 6607.48 c
-3197.68 6660.92 l
-3189.22 6659 3178.26 6657.4 3166.04 6656.44 c
-3166.04 6652 l
-3167.44 6652 l
-3172.24 6652 3175.48 6650.44 3175.48 6647.48 c
-3175.48 6646.2 3174.71 6643.8 3173.68 6641.08 c
-3164.4 6606.68 l
-3163.12 6602.04 3163 6597.88 3163 6595.64 c
-3163 6589.56 3167.2 6585.56 3173.36 6585.56 c
-3182.96 6585.56 3188.88 6590.36 3200.08 6607.32 c
-h
-3192.88 6696.4 m
-3187.44 6696.4 3183 6691.46 3183 6686.04 c
-3183 6679.8 3187.26 6675.4 3193.04 6675.4 c
-3199.12 6675.4 3204 6679.86 3204 6685.56 c
-3204 6691.48 3199 6696.4 3192.88 6696.4 c
-h
-3206.48 6587 m
-f*
-3281.36 6608.6 m
-3274.96 6598.68 3272.88 6596.56 3270.16 6596.56 c
-3268.88 6596.56 3268 6597.63 3268 6599.16 c
-3268 6600.76 3268.94 6604.12 3271.92 6613.08 c
-3277.68 6630.52 l
-3280.24 6638.04 3282 6645.08 3282 6648.92 c
-3282 6656.76 3277.78 6661.08 3270.16 6661.08 c
-3264.24 6661.08 3258.48 6658.62 3254.16 6654.36 c
-3248.24 6648.76 3245.2 6644.92 3234.48 6629.08 c
-3244.72 6660.76 l
-3234.48 6658.52 3221.68 6656.92 3212.72 6656.6 c
-3212.72 6651.8 l
-3219.44 6651.65 3221.36 6650.92 3221.36 6648.12 c
-3221.36 6646.2 3219.12 6637.72 3214 6619.64 c
-3210.32 6606.68 3209.2 6602.52 3205.04 6587 c
-3224.4 6587 l
-3231.92 6614.68 3237.68 6628.6 3247.6 6641.56 c
-3250.8 6645.88 3255.76 6649.08 3258.64 6649.08 c
-3260.72 6649.08 3263 6647.63 3263 6646.04 c
-3263 6645.56 3262.54 6644.28 3261.84 6642.68 c
-3253.04 6616.12 l
-3250.48 6608.44 3249 6599.32 3249 6595.16 c
-3249 6589.08 3252.84 6585.56 3259.44 6585.56 c
-3269.04 6585.56 3275.6 6591 3284.88 6606.52 c
-h
-3294.96 6587 m
-f*
-3372.48 6656 m
-3354.72 6656 l
-3349.28 6659.58 3344.48 6661.08 3337.12 6661.08 c
-3317.44 6661.08 3301 6648.05 3301 6631.8 c
-3301 6623.64 3305.35 6617.88 3314.4 6614.2 c
-3301.28 6606.84 3299 6604.6 3299 6598.68 c
-3299 6593.56 3301.89 6590.52 3308.96 6588.12 c
-3299.04 6585.72 3295.84 6584.44 3292 6581.4 c
-3289.44 6579.16 3288 6575.32 3288 6571.48 c
-3288 6561.08 3299.56 6555 3317.76 6555 c
-3340.32 6555 3356 6564.72 3356 6578.52 c
-3356 6588.28 3349.6 6593.56 3332.16 6598.52 c
-3323.68 6600.92 l
-3318.56 6602.36 3315 6604.6 3315 6607 c
-3315 6609.56 3317.68 6612.28 3320 6612.28 c
-3320.8 6612.28 3321.92 6612.24 3323.2 6612.12 c
-3324.96 6611.64 3326.24 6611 3328.16 6611 c
-3335.2 6611 3342.4 6613.09 3348.48 6616.92 c
-3357.76 6622.2 3363 6630.36 3363 6639.96 c
-3363 6642.64 3362.59 6644.32 3361.76 6647 c
-3372.48 6647 l
-h
-3314.4 6586.04 m
-3316.32 6585.88 3328.48 6581.72 3332 6580.12 c
-3336.48 6577.88 3339 6575.16 3339 6571 c
-3339 6563.96 3331.8 6560 3319.36 6560 c
-3308.96 6560 3302 6565.1 3302 6572.44 c
-3302 6575.48 3303.32 6578.2 3306.24 6581.24 c
-3308.32 6583.32 3313.12 6586.2 3314.4 6586.04 c
-h
-3336.8 6656.08 m
-3340.96 6656.08 3344 6652.19 3344 6646.52 c
-3344 6641.08 3342.08 6633.4 3339.36 6627.48 c
-3336 6620.12 3331.84 6616 3326.88 6616 c
-3322.56 6616 3320 6619.52 3320 6625.88 c
-3320 6632.28 3322.79 6642.04 3326.24 6648.12 c
-3329.28 6653.4 3332.64 6656.08 3336.8 6656.08 c
-h
-3376 6587 m
-f*
-1 i
-0.564706 g
-2708.15 5769.35 m
-2573.75 5806.55 l
-2669.75 5861.75 l
-2516.15 5871.35 l
-2558.15 5940.95 l
-2410.55 5920.55 l
-2393.75 5992.55 l
-2273.75 5946.95 l
-2198.15 6010.55 l
-2122.55 5946.95 l
-2002.55 5992.55 l
-1984.55 5920.55 l
-1835.75 5940.95 l
-1880.15 5871.35 l
-1726.55 5861.75 l
-1822.55 5806.55 l
-1686.95 5769.35 l
-1822.55 5734.55 l
-1726.55 5678.15 l
-1880.15 5669.75 l
-1835.75 5600.15 l
-1984.55 5619.35 l
-2002.55 5548.55 l
-2122.55 5592.95 l
-2198.15 5529.35 l
-2273.75 5592.95 l
-2393.75 5548.55 l
-2410.55 5619.35 l
-2558.15 5600.15 l
-2516.15 5669.75 l
-2669.75 5678.15 l
-2573.75 5734.55 l
-f*
-1 g
-2648.15 5829.35 m
-2513.75 5866.55 l
-2609.75 5921.75 l
-2456.15 5931.35 l
-2498.15 6000.95 l
-2350.55 5980.55 l
-2333.75 6052.55 l
-2213.75 6006.95 l
-2138.15 6070.55 l
-2062.55 6006.95 l
-1942.55 6052.55 l
-1924.55 5980.55 l
-1775.75 6000.95 l
-1820.15 5931.35 l
-1666.55 5921.75 l
-1762.55 5866.55 l
-1626.95 5829.35 l
-1762.55 5794.55 l
-1666.55 5738.15 l
-1820.15 5729.75 l
-1775.75 5660.15 l
-1924.55 5679.35 l
-1942.55 5608.55 l
-2062.55 5652.95 l
-2138.15 5589.35 l
-2213.75 5652.95 l
-2333.75 5608.55 l
-2350.55 5679.35 l
-2498.15 5660.15 l
-2456.15 5729.75 l
-2609.75 5738.15 l
-2513.75 5794.55 l
-f*
-0 g
-2648.15 5829.35 m
-2513.75 5866.55 l
-2609.75 5921.75 l
-2456.15 5931.35 l
-2498.15 6000.95 l
-2350.55 5980.55 l
-2333.75 6052.55 l
-2213.75 6006.95 l
-2138.15 6070.55 l
-2062.55 6006.95 l
-1942.55 6052.55 l
-1924.55 5980.55 l
-1775.75 6000.95 l
-1820.15 5931.35 l
-1666.55 5921.75 l
-1762.55 5866.55 l
-1626.95 5829.35 l
-1762.55 5794.55 l
-1666.55 5738.15 l
-1820.15 5729.75 l
-1775.75 5660.15 l
-1924.55 5679.35 l
-1942.55 5608.55 l
-2062.55 5652.95 l
-2138.15 5589.35 l
-2213.75 5652.95 l
-2333.75 5608.55 l
-2350.55 5679.35 l
-2498.15 5660.15 l
-2456.15 5729.75 l
-2609.75 5738.15 l
-2513.75 5794.55 l
-2648.15 5829.35 l
-2609.75 5829.35 l
-2487.35 5798.15 l
-2576.15 5746.55 l
-2438.15 5738.15 l
-2478.95 5672.15 l
-2343.35 5691.35 l
-2326.55 5621.75 l
-2211.35 5664.95 l
-2138.15 5602.55 l
-2064.95 5664.95 l
-1949.75 5621.75 l
-1931.75 5691.35 l
-1796.15 5672.15 l
-1836.95 5738.15 l
-1700.15 5746.55 l
-1788.95 5798.15 l
-1666.55 5829.35 l
-1787.75 5861.75 l
-1700.15 5914.55 l
-1836.95 5921.75 l
-1796.15 5988.95 l
-1931.75 5969.75 l
-1949.75 6038.15 l
-2064.95 5996.15 l
-2138.15 6058.55 l
-2211.35 5996.15 l
-2326.55 6038.15 l
-2343.35 5969.75 l
-2478.95 5988.95 l
-2438.15 5921.75 l
-2576.15 5914.55 l
-2487.35 5861.75 l
-2609.75 5829.35 l
-2648.15 5829.35 l
-f*
-0.2 i
-1960.08 5880.76 m
-1940.08 5806.52 l
-1937.52 5797.88 1934.48 5795.64 1924.08 5795 c
-1924.08 5791 l
-1974 5791 l
-1974 5795 l
-1964.72 5795.48 1962.48 5796.76 1962.48 5801.88 c
-1962.48 5803.64 1962.8 5805.4 1963.76 5809.08 c
-1963.92 5809.88 l
-1964.08 5810.68 l
-1983.76 5882.52 l
-1986.16 5890.84 1988.56 5893.08 1996.72 5894.04 c
-1996.72 5898 l
-1962.8 5898 l
-1913.2 5821.24 l
-1904.56 5898 l
-1869.2 5898 l
-1869.2 5894 l
-1879.28 5893.52 1880.72 5892.89 1880.72 5888.44 c
-1880.72 5886.2 1880.08 5883.32 1878.96 5879.16 c
-1861.52 5819.48 l
-1855.12 5798.68 1854 5796.92 1845.36 5795 c
-1845.36 5791 l
-1878.48 5791 l
-1878.48 5795 l
-1868.24 5796.28 1865.68 5798.2 1865.68 5804.76 c
-1865.68 5807.48 1866.48 5811.48 1868.72 5819.48 c
-1884.88 5878.52 l
-1895.6 5789.08 l
-1900.08 5789.08 l
-h
-1992.24 5791 m
-f*
-2061.44 5811.32 m
-2054.88 5802.52 2052.48 5799.76 2049.92 5799.76 c
-2048.64 5799.76 2048 5800.86 2048 5802.52 c
-2048 5806.52 2049.44 5813.08 2053.44 5826.2 c
-2064.8 5863.96 l
-2047.04 5862.84 l
-2044.16 5853.4 l
-2042.72 5861.56 2039.2 5865.08 2032.32 5865.08 c
-2012.64 5865.08 1989 5834.27 1989 5809.24 c
-1989 5797.08 1995.74 5788.92 2005.92 5788.92 c
-2015.68 5788.92 2023.04 5794.68 2032.16 5810.04 c
-2030.24 5803.48 2030 5801.56 2030 5799.32 c
-2030 5793.4 2034.76 5788.76 2040.64 5788.76 c
-2048.16 5788.76 2055.52 5795 2064.8 5808.92 c
-h
-2034.56 5858.2 m
-2038.08 5857.88 2040.56 5855 2040.56 5850.68 c
-2040.56 5841.08 2035.24 5823.32 2028.96 5812.28 c
-2024.64 5804.44 2019.84 5799.92 2015.52 5799.92 c
-2011.36 5799.92 2008 5803.75 2008 5808.92 c
-2008 5817.24 2013.42 5833.24 2020.16 5845.08 c
-2024.96 5853.56 2030.24 5858.52 2034.56 5858.2 c
-h
-2072 5791 m
-f*
-2106.56 5864.92 m
-2090.24 5862.36 2084 5861.4 2075.68 5860.44 c
-2075.68 5856 l
-2082.88 5855.69 2084.32 5855.07 2084.32 5852.12 c
-2084.32 5850.52 2083.04 5844.76 2080.8 5836.44 c
-2064.8 5774.36 l
-2061.76 5763.8 2060.48 5762.84 2052.8 5763 c
-2052.8 5758 l
-2092.64 5758 l
-2092.64 5763 l
-2084.64 5763.14 2082.24 5764.16 2082.24 5767.64 c
-2082.24 5769.88 2083.36 5774.68 2086.4 5785.88 c
-2087.52 5789.72 2087.52 5790.04 2088.16 5792.44 c
-2093.76 5789.56 2095.68 5788.92 2099.04 5788.92 c
-2120.8 5788.92 2143.36 5817.88 2143.36 5845.56 c
-2143.36 5857.4 2136.64 5865.08 2126.08 5865.08 c
-2116.96 5865.08 2109.92 5859.92 2100.48 5846.52 c
-h
-2117.12 5853.56 m
-2121.28 5853.24 2123.68 5849.56 2123.36 5844.44 c
-2122.72 5833.88 2117.6 5818.04 2111.84 5807.64 c
-2106.88 5799 2101.76 5793.92 2096.32 5793.92 c
-2092.8 5793.92 2090.08 5796.75 2090.08 5800.28 c
-2090.08 5803 2091.84 5809.56 2096.16 5824.12 c
-2099.68 5835.8 2101.12 5839.8 2103.52 5843.48 c
-2107.52 5849.72 2112.96 5853.88 2117.12 5853.56 c
-h
-2152 5791 m
-f*
-2187.56 5864.92 m
-2171.24 5862.36 2165 5861.4 2156.68 5860.44 c
-2156.68 5856 l
-2163.88 5855.69 2165.32 5855.07 2165.32 5852.12 c
-2165.32 5850.52 2164.04 5844.76 2161.8 5836.44 c
-2145.8 5774.36 l
-2142.76 5763.8 2141.48 5762.84 2133.8 5763 c
-2133.8 5758 l
-2173.64 5758 l
-2173.64 5763 l
-2165.64 5763.14 2163.24 5764.16 2163.24 5767.64 c
-2163.24 5769.88 2164.36 5774.68 2167.4 5785.88 c
-2168.52 5789.72 2168.52 5790.04 2169.16 5792.44 c
-2174.76 5789.56 2176.68 5788.92 2180.04 5788.92 c
-2201.8 5788.92 2224.36 5817.88 2224.36 5845.56 c
-2224.36 5857.4 2217.64 5865.08 2207.08 5865.08 c
-2197.96 5865.08 2190.92 5859.92 2181.48 5846.52 c
-h
-2198.12 5853.56 m
-2202.28 5853.24 2204.68 5849.56 2204.36 5844.44 c
-2203.72 5833.88 2198.6 5818.04 2192.84 5807.64 c
-2187.88 5799 2182.76 5793.92 2177.32 5793.92 c
-2173.8 5793.92 2171.08 5796.75 2171.08 5800.28 c
-2171.08 5803 2172.84 5809.56 2177.16 5824.12 c
-2180.68 5835.8 2182.12 5839.8 2184.52 5843.48 c
-2188.52 5849.72 2193.96 5853.88 2198.12 5853.56 c
-h
-2233 5791 m
-f*
-2266.56 5813.56 m
-2264.32 5810.36 l
-2260.16 5804.12 2256.48 5800.56 2254.08 5800.56 c
-2252.8 5800.56 2252 5801.77 2252 5803.16 c
-2252 5804.6 2252.62 5808.76 2253.12 5811.48 c
-2267.68 5864.92 l
-2259.22 5863 2248.26 5861.4 2236.04 5860.44 c
-2236.04 5856 l
-2237.44 5856 l
-2242.24 5856 2245.48 5854.44 2245.48 5851.48 c
-2245.48 5850.2 2244.71 5847.8 2243.68 5845.08 c
-2234.4 5810.68 l
-2233.12 5806.04 2233 5801.88 2233 5799.64 c
-2233 5793.56 2237.2 5789.56 2243.36 5789.56 c
-2252.96 5789.56 2258.88 5794.36 2270.08 5811.32 c
-h
-2262.88 5900.4 m
-2257.44 5900.4 2253 5895.46 2253 5890.04 c
-2253 5883.8 2257.26 5879.4 2263.04 5879.4 c
-2269.12 5879.4 2274 5883.86 2274 5889.56 c
-2274 5895.48 2269 5900.4 2262.88 5900.4 c
-h
-2276.48 5791 m
-f*
-2351.36 5812.6 m
-2344.96 5802.68 2342.88 5800.56 2340.16 5800.56 c
-2338.88 5800.56 2338 5801.63 2338 5803.16 c
-2338 5804.76 2338.94 5808.12 2341.92 5817.08 c
-2347.68 5834.52 l
-2350.24 5842.04 2352 5849.08 2352 5852.92 c
-2352 5860.76 2347.78 5865.08 2340.16 5865.08 c
-2334.24 5865.08 2328.48 5862.62 2324.16 5858.36 c
-2318.24 5852.76 2315.2 5848.92 2304.48 5833.08 c
-2314.72 5864.76 l
-2304.48 5862.52 2291.68 5860.92 2282.72 5860.6 c
-2282.72 5855.8 l
-2289.44 5855.65 2291.36 5854.92 2291.36 5852.12 c
-2291.36 5850.2 2289.12 5841.72 2284 5823.64 c
-2280.32 5810.68 2279.2 5806.52 2275.04 5791 c
-2294.4 5791 l
-2301.92 5818.68 2307.68 5832.6 2317.6 5845.56 c
-2320.8 5849.88 2325.76 5853.08 2328.64 5853.08 c
-2330.72 5853.08 2333 5851.63 2333 5850.04 c
-2333 5849.56 2332.54 5848.28 2331.84 5846.68 c
-2323.04 5820.12 l
-2320.48 5812.44 2319 5803.32 2319 5799.16 c
-2319 5793.08 2322.84 5789.56 2329.44 5789.56 c
-2339.04 5789.56 2345.6 5795 2354.88 5810.52 c
-h
-2364.96 5791 m
-f*
-2442.48 5860 m
-2424.72 5860 l
-2419.28 5863.58 2414.48 5865.08 2407.12 5865.08 c
-2387.44 5865.08 2371 5852.05 2371 5835.8 c
-2371 5827.64 2375.35 5821.88 2384.4 5818.2 c
-2371.28 5810.84 2369 5808.6 2369 5802.68 c
-2369 5797.56 2371.89 5794.52 2378.96 5792.12 c
-2369.04 5789.72 2365.84 5788.44 2362 5785.4 c
-2359.44 5783.16 2358 5779.32 2358 5775.48 c
-2358 5765.08 2369.56 5759 2387.76 5759 c
-2410.32 5759 2426 5768.72 2426 5782.52 c
-2426 5792.28 2419.6 5797.56 2402.16 5802.52 c
-2393.68 5804.92 l
-2388.56 5806.36 2385 5808.6 2385 5811 c
-2385 5813.56 2387.68 5816.28 2390 5816.28 c
-2390.8 5816.28 2391.92 5816.24 2393.2 5816.12 c
-2394.96 5815.64 2396.24 5815 2398.16 5815 c
-2405.2 5815 2412.4 5817.09 2418.48 5820.92 c
-2427.76 5826.2 2433 5834.36 2433 5843.96 c
-2433 5846.64 2432.59 5848.32 2431.76 5851 c
-2442.48 5851 l
-h
-2384.4 5790.04 m
-2386.32 5789.88 2398.48 5785.72 2402 5784.12 c
-2406.48 5781.88 2409 5779.16 2409 5775 c
-2409 5767.96 2401.8 5764 2389.36 5764 c
-2378.96 5764 2372 5769.1 2372 5776.44 c
-2372 5779.48 2373.32 5782.2 2376.24 5785.24 c
-2378.32 5787.32 2383.12 5790.2 2384.4 5790.04 c
-h
-2406.8 5860.08 m
-2410.96 5860.08 2414 5856.19 2414 5850.52 c
-2414 5845.08 2412.08 5837.4 2409.36 5831.48 c
-2406 5824.12 2401.84 5820 2396.88 5820 c
-2392.56 5820 2390 5823.52 2390 5829.88 c
-2390 5836.28 2392.79 5846.04 2396.24 5852.12 c
-2399.28 5857.4 2402.64 5860.08 2406.8 5860.08 c
-h
-2446 5791 m
-f*
-1 i
-1 g
-4222.55 6369.35 m
-4388.15 6520.55 l
-4306.55 6520.55 l
-4306.55 6674.15 l
-4139.75 6674.15 l
-4139.75 6520.55 l
-4058.15 6520.55 l
-f*
-0 g
-4222.55 6369.35 m
-4388.15 6520.55 l
-4306.55 6520.55 l
-4306.55 6674.15 l
-4139.75 6674.15 l
-4139.75 6520.55 l
-4058.15 6520.55 l
-4222.55 6369.35 l
-4222.55 6383.75 l
-4083.35 6510.95 l
-4149.35 6510.95 l
-4149.35 6664.55 l
-4295.75 6664.55 l
-4295.75 6510.95 l
-4361.75 6510.95 l
-4222.55 6383.75 l
-4222.55 6369.35 l
-f*
-0.2 i
-3775.88 6907 m
-3775.88 6902 l
-3788.3 6901.29 3792 6898.45 3792 6889.4 c
-3792 6802.28 l
-3792 6793.1 3789.25 6790.94 3775.88 6789.5 c
-3775.88 6785 l
-3833.84 6785 l
-3864.26 6785 3884 6798.5 3884 6818.84 c
-3884 6827.12 3880.73 6834.32 3874.7 6839.9 c
-3868.4 6845.48 3862.28 6848 3849.68 6850.7 c
-3870.56 6856.82 3878 6864.2 3878 6877.88 c
-3878 6896.42 3861.55 6907 3831.5 6907 c
-h
-3821 6846.74 m
-3825.92 6846.74 l
-3844.46 6846.74 3853 6837.2 3853 6817.22 c
-3853 6799.76 3845.77 6791 3831.5 6791 c
-3823.58 6791 3821 6793.99 3821 6801.74 c
-h
-3821 6892.46 m
-3821 6898.94 3823.39 6902 3830.24 6902 c
-3842.84 6902 3849 6894.03 3849 6876.62 c
-3849 6857.72 3843.08 6852.68 3821 6852.14 c
-h
-3893.06 6785 m
-f*
-3978.14 6796.52 m
-3976.34 6794.72 l
-3975.8 6794.18 3975.26 6794 3974.36 6794 c
-3971.84 6794 3971 6795.44 3971 6798.5 c
-3971 6845.48 l
-3971 6860.78 3957.16 6870.16 3934.94 6870.16 c
-3914.6 6870.16 3900.92 6860.97 3900.92 6847.46 c
-3900.92 6839.9 3905.24 6835.58 3912.62 6835.58 c
-3919.82 6835.58 3924.86 6839.9 3924.86 6846.02 c
-3924.86 6848.54 3923.96 6850.88 3921.62 6853.76 c
-3920 6855.56 3919.46 6856.64 3919.46 6857.72 c
-3919.46 6861.5 3924.32 6864.16 3930.8 6864.16 c
-3941.42 6864.16 3946 6859.37 3946 6848.54 c
-3946 6835.4 l
-3924.89 6828.92 3916.41 6825.68 3909.56 6821.18 c
-3901.46 6815.78 3898 6809.48 3898 6801.56 c
-3898 6790.58 3906.07 6782.48 3917.3 6782.48 c
-3927.74 6782.48 3936.02 6786.08 3945.92 6795.08 c
-3947.9 6785.9 3951.86 6782.48 3960.68 6782.48 c
-3968.42 6782.48 3974 6785.36 3980.84 6792.74 c
-h
-3946 6803 m
-3941.04 6797.42 3937.37 6795.26 3932.96 6795.26 c
-3927.56 6795.26 3924 6800.12 3924 6807.32 c
-3924 6817.76 3931.57 6825.14 3946 6829.1 c
-h
-3983 6785 m
-f*
-4044.22 6843.68 m
-4044.22 6869.8 l
-4040.24 6869.8 l
-4039.16 6867.08 4038.08 6866.2 4035.74 6866.2 c
-4034.66 6866.2 4033.04 6866.55 4030.16 6867.44 c
-4024.4 6869.42 4020.26 6870.16 4016.12 6870.16 c
-3999.74 6870.16 3988 6858.99 3988 6843.86 c
-3988 6831.98 3995.34 6823.7 4013.42 6815.96 c
-4025.84 6810.56 4031 6806.06 4031 6800.3 c
-4031 6793.28 4025.48 6788.48 4017.2 6788.48 c
-4004.6 6788.48 3996.32 6796.62 3992.54 6812.36 c
-3987.5 6812.36 l
-3987.5 6782.66 l
-3992 6782.66 l
-3993.98 6786.44 3995.06 6787.7 3996.68 6787.7 c
-3997.58 6787.7 3999.02 6787.34 4000.82 6786.62 c
-4006.04 6784.46 4015.22 6782.48 4020.26 6782.48 c
-4036.64 6782.48 4048 6793.64 4048 6809.84 c
-4048 6822.62 4041.15 6830.54 4023.14 6837.92 c
-4010.9 6843.14 4006 6847.64 4006 6853.76 c
-4006 6859.7 4010.98 6864.16 4017.74 6864.16 c
-4022.6 6864.16 4027.28 6862.19 4031.24 6858.44 c
-4035.02 6854.84 4037 6851.42 4039.7 6843.68 c
-h
-4053.02 6785 m
-f*
-4124.36 6807.5 m
-4116.98 6798.68 4111.58 6795.48 4103.84 6795.48 c
-4097 6795.48 4091.6 6798.53 4088 6804.62 c
-4084.58 6810.36 4083.14 6816.45 4082.42 6829 c
-4127.78 6829 l
-4126.7 6843.99 4124 6852.3 4118.42 6859.34 c
-4112.66 6866.36 4104.2 6870.16 4094.12 6870.16 c
-4071.62 6870.16 4056.5 6852.33 4056.5 6826.04 c
-4056.5 6799.76 4071.26 6782.48 4093.58 6782.48 c
-4108.16 6782.48 4116.98 6788.06 4128.68 6804.98 c
-h
-4081.52 6836 m
-4082.06 6857.42 4085.3 6864.16 4094.12 6864.16 c
-4099.34 6864.16 4102.58 6861.42 4104.02 6856.1 c
-4104.92 6852.68 4105.28 6847.64 4105.64 6838.46 c
-4105.64 6836 l
-h
-4131.92 6785 m
-f*
-4178 6785 m
-f*
-4281.94 6907 m
-4179.88 6907 l
-4179.88 6902 l
-4192.3 6901.29 4196 6898.63 4196 6889.4 c
-4196 6802.28 l
-4196 6792.92 4193.44 6790.94 4179.88 6789.5 c
-4179.88 6785 l
-4244.68 6785 l
-4244.68 6790 l
-4228.12 6790.69 4225 6792.77 4225 6802.28 c
-4225 6844.22 l
-4243.28 6843.86 4249.91 6837.2 4252.42 6816.32 c
-4256.92 6816.32 l
-4256.92 6877.16 l
-4252.42 6877.16 l
-4249.19 6856.64 4242.92 6850.34 4225 6850.34 c
-4225 6892.1 l
-4225 6898.76 4227.32 6901 4236.4 6901 c
-4253.14 6901 4263.58 6897.8 4269.16 6891.2 c
-4273.12 6886.7 4275.1 6881.84 4277.62 6870.5 c
-4281.94 6870.5 l
-h
-4286.98 6785 m
-f*
-4326.28 6868 m
-4292.22 6868 l
-4292.22 6863.66 l
-4299.96 6862.58 4302 6860.24 4302 6853.04 c
-4302 6800.12 l
-4302 6792.74 4300.19 6790.76 4292.22 6789.32 c
-4292.22 6785 l
-4340.1 6785 l
-4340.1 6789.32 l
-4329.12 6790.04 4327 6792.38 4327 6803.54 c
-4327 6837.56 l
-4327 6846.92 4332.02 6854.66 4337.94 6854.66 c
-4339.38 6854.66 4341 6853.4 4342.98 6850.52 c
-4346.4 6845.66 4349.1 6844.04 4353.78 6844.04 c
-4360.44 6844.04 4365.12 6849.08 4365.12 6855.92 c
-4365.12 6864.2 4359 6870.16 4350.54 6870.16 c
-4341.55 6870.16 4334.73 6865.47 4326.28 6853.22 c
-h
-4366.92 6785 m
-f*
-4453.14 6796.52 m
-4451.34 6794.72 l
-4450.8 6794.18 4450.26 6794 4449.36 6794 c
-4446.84 6794 4446 6795.44 4446 6798.5 c
-4446 6845.48 l
-4446 6860.78 4432.16 6870.16 4409.94 6870.16 c
-4389.6 6870.16 4375.92 6860.97 4375.92 6847.46 c
-4375.92 6839.9 4380.24 6835.58 4387.62 6835.58 c
-4394.82 6835.58 4399.86 6839.9 4399.86 6846.02 c
-4399.86 6848.54 4398.96 6850.88 4396.62 6853.76 c
-4395 6855.56 4394.46 6856.64 4394.46 6857.72 c
-4394.46 6861.5 4399.32 6864.16 4405.8 6864.16 c
-4416.42 6864.16 4421 6859.37 4421 6848.54 c
-4421 6835.4 l
-4399.89 6828.92 4391.41 6825.68 4384.56 6821.18 c
-4376.46 6815.78 4373 6809.48 4373 6801.56 c
-4373 6790.58 4381.07 6782.48 4392.3 6782.48 c
-4402.74 6782.48 4411.02 6786.08 4420.92 6795.08 c
-4422.9 6785.9 4426.86 6782.48 4435.68 6782.48 c
-4443.42 6782.48 4449 6785.36 4455.84 6792.74 c
-h
-4421 6803 m
-4416.04 6797.42 4412.37 6795.26 4407.96 6795.26 c
-4402.56 6795.26 4399 6800.12 4399 6807.32 c
-4399 6817.76 4406.57 6825.14 4421 6829.1 c
-h
-4458 6785 m
-f*
-4495.46 6868 m
-4460.73 6868 l
-4460.73 6863.66 l
-4468.65 6862.58 4471 6860.42 4471 6853.04 c
-4471 6800.12 l
-4471 6792.74 4468.95 6790.76 4460.73 6789.32 c
-4460.73 6785 l
-4503.93 6785 l
-4503.93 6789.32 l
-4497.63 6790.22 4496 6792.74 4496 6799.58 c
-4496 6847.64 l
-4496 6848.54 4498.51 6851.78 4500.51 6853.76 c
-4504.29 6856.64 4507.53 6858.16 4510.77 6858.16 c
-4517.79 6858.16 4521 6854 4521 6843.14 c
-4521 6799.58 l
-4521 6792.2 4518.9 6789.86 4511.85 6789.32 c
-4511.85 6785 l
-4553.97 6785 l
-4553.97 6789.32 l
-4547.67 6790.04 4546 6792.74 4546 6799.58 c
-4546 6847.64 l
-4546 6848.54 4548.43 6851.6 4550.37 6853.58 c
-4554.33 6856.64 4557.57 6858.16 4560.81 6858.16 c
-4567.65 6858.16 4570 6853.82 4570 6843.14 c
-4570 6799.58 l
-4570 6792.02 4568.1 6789.86 4561.53 6789.32 c
-4561.53 6785 l
-4604.37 6785 l
-4604.37 6789 l
-4597.35 6789.37 4595 6791.6 4595 6799.58 c
-4595 6844.76 l
-4595 6860.24 4585.6 6870.16 4571.07 6870.16 c
-4560.81 6870.16 4553.97 6866.01 4544.61 6854.48 c
-4539.21 6865.82 4532.91 6870.16 4521.57 6870.16 c
-4510.2 6870.16 4502.21 6865.29 4495.46 6854.48 c
-h
-4607.94 6785 m
-f*
-4680.36 6807.5 m
-4672.98 6798.68 4667.58 6795.48 4659.84 6795.48 c
-4653 6795.48 4647.6 6798.53 4644 6804.62 c
-4640.58 6810.36 4639.14 6816.45 4638.42 6829 c
-4683.78 6829 l
-4682.7 6843.99 4680 6852.3 4674.42 6859.34 c
-4668.66 6866.36 4660.2 6870.16 4650.12 6870.16 c
-4627.62 6870.16 4612.5 6852.33 4612.5 6826.04 c
-4612.5 6799.76 4627.26 6782.48 4649.58 6782.48 c
-4664.16 6782.48 4672.98 6788.06 4684.68 6804.98 c
-h
-4637.52 6836 m
-4638.06 6857.42 4641.3 6864.16 4650.12 6864.16 c
-4655.34 6864.16 4658.58 6861.42 4660.02 6856.1 c
-4660.92 6852.68 4661.28 6847.64 4661.64 6838.46 c
-4661.64 6836 l
-h
-4687.92 6785 m
-f*
-1 i
-3772.55 6749.75 914.4 15.5999 re
-f
-0.2 i
-2678.88 4570.52 m
-2643.78 4570.52 2619 4545.21 2619 4509.12 c
-2619 4472.04 2642.99 4446.48 2677.98 4446.48 c
-2712.54 4446.48 2737 4472.04 2737 4508.58 c
-2737 4524.96 2731.9 4539.9 2722.98 4550.34 c
-2712.18 4563.12 2695.8 4570.52 2678.88 4570.52 c
-h
-2677.44 4563.52 m
-2685.9 4563.52 2693.46 4561.05 2699.94 4556.1 c
-2710.2 4547.46 2716 4530.18 2716 4509.66 c
-2716 4488.06 2711.25 4472.4 2701.56 4462.5 c
-2695.44 4456.38 2687.16 4453.48 2678.16 4453.48 c
-2669.88 4453.48 2662.14 4456.01 2655.84 4461.06 c
-2645.76 4469.34 2640 4487.34 2640 4508.76 c
-2640 4525.86 2644.54 4542.96 2651.34 4551.6 c
-2658 4559.52 2667.72 4563.52 2677.44 4563.52 c
-h
-2742.96 4449 m
-f*
-2746.42 4561.14 m
-2747.5 4561.14 l
-2749.48 4561.32 2751.64 4561.5 2753.08 4561.5 c
-2758.84 4561.5 2761 4558.98 2761 4550.52 c
-2761 4464.66 l
-2761 4454.94 2758.41 4452.6 2746.78 4451.7 c
-2746.78 4449 l
-2789.26 4449 l
-2789.26 4452 l
-2777.74 4452.7 2776 4454.46 2776 4464.12 c
-2776 4571.58 l
-2775.04 4571.94 l
-2765.68 4568.88 2758.84 4567.08 2746.42 4564.02 c
-h
-2793.04 4449 m
-f*
-2854.92 4447.2 m
-2881.38 4456.56 l
-2881.38 4460 l
-2878.32 4459.26 2878.14 4459.82 2877.24 4459.82 c
-2870.76 4459.82 2869 4461.69 2869 4469.52 c
-2869 4571.58 l
-2868.42 4571.94 l
-2859.78 4568.88 2853.48 4567.08 2841.96 4564.02 c
-2841.96 4561.14 l
-2843.4 4561.32 2844.48 4561.32 2845.92 4561.32 c
-2852.58 4561.32 2854 4559.52 2854 4552.14 c
-2854 4524.06 l
-2847.23 4529.82 2842.42 4531.8 2835.3 4531.8 c
-2814.6 4531.8 2798 4511.46 2798 4485.9 c
-2798 4462.86 2811.26 4447.2 2831.16 4447.2 c
-2841.15 4447.2 2847.93 4450.8 2854 4459.26 c
-2854 4447.74 l
-h
-2854 4467.36 m
-2854 4466.1 2853 4464.12 2851.5 4462.32 c
-2848.26 4458.54 2843.76 4456.2 2838.18 4456.2 c
-2823.06 4456.2 2813 4470.74 2813 4493.1 c
-2813 4513.44 2821.95 4526.8 2835.84 4526.8 c
-2845.56 4526.8 2854 4518.32 2854 4508.76 c
-h
-2883 4449 m
-f*
-2928 4449 m
-f*
-3040.6 4530 m
-3038.98 4570.52 l
-3035.2 4570.52 l
-3034.12 4566.84 3031.24 4564.58 3027.82 4564.58 c
-3026.02 4564.58 3023.5 4565.17 3020.62 4566.36 c
-3011.8 4569.24 3002.98 4570.52 2994.16 4570.52 c
-2980.3 4570.52 2966.08 4565.36 2955.1 4556.46 c
-2941.42 4545.12 2934 4528.02 2934 4507.5 c
-2934 4470.96 2957.96 4446.48 2993.8 4446.48 c
-3014.14 4446.48 3031.96 4454.76 3042.94 4469.34 c
-3039.7 4472.58 l
-3026.38 4459.8 3014.5 4454.48 2999.56 4454.48 c
-2988.76 4454.48 2979.04 4457.69 2971.48 4463.94 c
-2960.86 4472.76 2955 4488.96 2955 4509.84 c
-2955 4542.42 2971.71 4563.52 2997.76 4563.52 c
-3008.2 4563.52 3017.38 4559.73 3024.58 4552.5 c
-3030.34 4546.74 3033.04 4541.7 3036.46 4530 c
-h
-3049.06 4449 m
-f*
-3135.22 4458 m
-3134.32 4458 l
-3126.04 4458 3124 4459.98 3124 4468.26 c
-3124 4530 l
-3095.62 4530 l
-3095.62 4527 l
-3106.78 4526.46 3109 4524.65 3109 4515.6 c
-3109 4473.3 l
-3109 4468.44 3108.08 4465.74 3105.88 4464.12 c
-3100.84 4459.8 3095.26 4457.2 3089.68 4457.2 c
-3082.66 4457.2 3077 4463.52 3077 4471.32 c
-3077 4530 l
-3050.62 4530 l
-3050.62 4527.48 l
-3059.26 4526.94 3062 4524.24 3062 4515.96 c
-3062 4470.6 l
-3062 4456.38 3070.55 4447.2 3083.56 4447.2 c
-3090.22 4447.2 3097.24 4450.08 3102.1 4454.94 c
-3109.9 4462.68 l
-3109.9 4447.74 l
-3110.56 4447.38 l
-3119.56 4450.98 3126.04 4452.96 3135.22 4455.48 c
-h
-3139 4449 m
-f*
-3140.26 4519.2 m
-3142.78 4519.74 3144.4 4519.92 3146.56 4519.92 c
-3151.06 4519.92 3153 4517.04 3153 4509.12 c
-3153 4464.12 l
-3153 4455.12 3151.71 4453.86 3139.9 4451.7 c
-3139.9 4449 l
-3183.1 4449 l
-3183.1 4452 l
-3170.86 4452.53 3168 4455.17 3168 4465.2 c
-3168 4505.7 l
-3168 4511.46 3175.44 4520.46 3180.4 4520.46 c
-3181.48 4520.46 3183.1 4519.56 3185.08 4517.76 c
-3187.96 4515.06 3189.94 4514.16 3192.28 4514.16 c
-3196.6 4514.16 3199.3 4517.22 3199.3 4522.26 c
-3199.3 4528.2 3195.52 4531.8 3189.4 4531.8 c
-3181.91 4531.8 3176.92 4527.84 3168 4514.88 c
-3168 4531.44 l
-3166.9 4531.8 l
-3157.36 4528.02 3150.88 4525.5 3140.26 4522.08 c
-h
-3198.94 4449 m
-f*
-3200.26 4519.2 m
-3202.78 4519.74 3204.4 4519.92 3206.56 4519.92 c
-3211.06 4519.92 3213 4517.04 3213 4509.12 c
-3213 4464.12 l
-3213 4455.12 3211.71 4453.86 3199.9 4451.7 c
-3199.9 4449 l
-3243.1 4449 l
-3243.1 4452 l
-3230.86 4452.53 3228 4455.17 3228 4465.2 c
-3228 4505.7 l
-3228 4511.46 3235.44 4520.46 3240.4 4520.46 c
-3241.48 4520.46 3243.1 4519.56 3245.08 4517.76 c
-3247.96 4515.06 3249.94 4514.16 3252.28 4514.16 c
-3256.6 4514.16 3259.3 4517.22 3259.3 4522.26 c
-3259.3 4528.2 3255.52 4531.8 3249.4 4531.8 c
-3241.91 4531.8 3236.92 4527.84 3228 4514.88 c
-3228 4531.44 l
-3226.9 4531.8 l
-3217.36 4528.02 3210.88 4525.5 3200.26 4522.08 c
-h
-3258.94 4449 m
-f*
-3332.44 4478.52 m
-3323.8 4464.84 3316.06 4459.2 3304.54 4459.2 c
-3294.64 4459.2 3287.08 4464.02 3281.86 4474.02 c
-3278.26 4481.08 3276.82 4487.42 3276.46 4499 c
-3331.9 4499 l
-3330.46 4510.63 3328.66 4515.82 3324.16 4521.54 c
-3318.76 4528.02 3310.48 4531.8 3301.12 4531.8 c
-3278.8 4531.8 3263.5 4513.8 3263.5 4487.52 c
-3263.5 4462.68 3276.46 4447.2 3297.16 4447.2 c
-3314.44 4447.2 3327.76 4457.82 3335.32 4477.26 c
-h
-3276.82 4504 m
-3278.8 4518.66 3284.92 4524.8 3295.9 4524.8 c
-3306.88 4524.8 3311.2 4519.74 3313.54 4504 c
-h
-3338.92 4449 m
-f*
-3340.88 4520.64 m
-3342.14 4521.18 3343.76 4521.36 3345.74 4521.36 c
-3350.78 4521.36 3352 4518.66 3352 4509.84 c
-3352 4465.2 l
-3352 4454.94 3350.09 4452.42 3341.24 4451.7 c
-3341.24 4449 l
-3379.4 4449 l
-3379.4 4451.7 l
-3370.22 4452.42 3367 4454.58 3367 4461.06 c
-3367 4511.64 l
-3375.7 4519.74 3379.95 4521.8 3386.06 4521.8 c
-3394.88 4521.8 3399 4516.25 3399 4504.44 c
-3399 4466.82 l
-3399 4455.48 3396.7 4452.42 3387.86 4451.7 c
-3387.86 4449 l
-3425.3 4449 l
-3425.3 4451.7 l
-3416.48 4452.6 3414 4454.76 3414 4463.58 c
-3414 4504.8 l
-3414 4521.72 3406.2 4531.8 3393.08 4531.8 c
-3384.64 4531.8 3378.94 4528.74 3366.46 4517.22 c
-3366.46 4531.44 l
-3365.72 4531.8 l
-3356.9 4528.56 3350.78 4526.58 3340.88 4523.7 c
-h
-3428 4449 m
-f*
-3474 4530 m
-3456 4530 l
-3456 4550.88 l
-3456 4552.68 3455.56 4553.22 3454.46 4553.22 c
-3453.38 4551.42 3452.12 4549.8 3450.86 4548.18 c
-3444.2 4538.28 3438.08 4531.62 3433.4 4528.92 c
-3431.42 4527.66 3430 4526.58 3430 4525.5 c
-3430 4525.29 3430.26 4525.14 3431.06 4525 c
-3441 4525 l
-3441 4470.06 l
-3441 4454.94 3446.26 4447.2 3456.44 4447.2 c
-3465.44 4447.2 3472.28 4451.52 3478.22 4460.88 c
-3475.88 4462.86 l
-3471.92 4458.18 3469.04 4456.2 3465.08 4456.2 c
-3458.42 4456.2 3456 4460.98 3456 4472.76 c
-3456 4525 l
-3474 4525 l
-h
-3478.04 4449 m
-f*
-3524 4449 m
-f*
-3609.22 4490.58 m
-3609.22 4532.34 l
-3605.08 4532.34 l
-3602.92 4517.94 3599.68 4515 3585.28 4515 c
-3560 4515 l
-3560 4555.2 l
-3560 4560.24 3560.77 4561 3564.94 4561 c
-3589.42 4561 l
-3609.76 4561 3613.72 4558.35 3616.78 4542.42 c
-3621.28 4542.42 l
-3620.74 4568 l
-3525.16 4568 l
-3525.16 4564.74 l
-3538.48 4563.66 3541 4561.32 3541 4548.54 c
-3541 4470.6 l
-3541 4455.66 3539 4453.32 3525.16 4452.42 c
-3525.16 4449 l
-3575.56 4449 l
-3575.56 4452 l
-3561.7 4452.74 3560 4455.32 3560 4468.62 c
-3560 4508 l
-3585.28 4508 l
-3599.86 4508 3602.92 4505.28 3605.08 4490.58 c
-h
-3623.08 4449 m
-f*
-3625.26 4519.2 m
-3627.78 4519.74 3629.4 4519.92 3631.56 4519.92 c
-3636.06 4519.92 3638 4517.04 3638 4509.12 c
-3638 4464.12 l
-3638 4455.12 3636.71 4453.86 3624.9 4451.7 c
-3624.9 4449 l
-3668.1 4449 l
-3668.1 4452 l
-3655.86 4452.53 3653 4455.17 3653 4465.2 c
-3653 4505.7 l
-3653 4511.46 3660.44 4520.46 3665.4 4520.46 c
-3666.48 4520.46 3668.1 4519.56 3670.08 4517.76 c
-3672.96 4515.06 3674.94 4514.16 3677.28 4514.16 c
-3681.6 4514.16 3684.3 4517.22 3684.3 4522.26 c
-3684.3 4528.2 3680.52 4531.8 3674.4 4531.8 c
-3666.91 4531.8 3661.92 4527.84 3653 4514.88 c
-3653 4531.44 l
-3651.9 4531.8 l
-3642.36 4528.02 3635.88 4525.5 3625.26 4522.08 c
-h
-3683.94 4449 m
-f*
-3763.56 4460.88 m
-3760.5 4458.36 3758.34 4457.2 3755.64 4457.2 c
-3751.5 4457.2 3750 4459.78 3750 4467.9 c
-3750 4503 l
-3750 4512.18 3749.16 4517.22 3746.82 4521.36 c
-3743.04 4528.2 3735.3 4531.8 3724.32 4531.8 c
-3715.14 4531.8 3706.5 4529.28 3701.46 4525.14 c
-3696.96 4521.36 3694 4516.14 3694 4511.64 c
-3694 4507.5 3697.46 4503.9 3701.82 4503.9 c
-3706.14 4503.9 3709.92 4507.5 3709.92 4511.46 c
-3709.92 4512.18 3709.74 4513.08 3709.56 4514.34 c
-3709.2 4515.96 3709 4517.4 3709 4518.66 c
-3709 4523.52 3714.77 4527.8 3721.98 4527.8 c
-3730.8 4527.8 3735 4522.47 3735 4512.54 c
-3735 4501.56 l
-3707.76 4490.4 3704.75 4488.96 3697.14 4482.12 c
-3693.18 4478.52 3690.66 4472.4 3690.66 4466.46 c
-3690.66 4455.12 3698.4 4447.2 3709.56 4447.2 c
-3717.48 4447.2 3724.86 4450.98 3735.84 4460.34 c
-3736.74 4450.8 3739.98 4447.2 3747.36 4447.2 c
-3753.48 4447.2 3757.26 4449.36 3763.56 4456.2 c
-h
-3735 4471.14 m
-3735 4465.56 3734.23 4463.94 3730.98 4461.6 c
-3726.66 4459.08 3721.62 4457.2 3717.84 4457.2 c
-3711.54 4457.2 3706.48 4463.51 3706.48 4471.5 c
-3706.48 4472.22 l
-3706.48 4482.84 3713.7 4489.32 3735 4497.24 c
-h
-3763.92 4449 m
-f*
-3766.14 4520.64 m
-3768.48 4521.18 3769.92 4521.36 3771.9 4521.36 c
-3776.58 4521.36 3778 4518.48 3778 4509.84 c
-3778 4464.3 l
-3778 4454.58 3775.52 4451.88 3765.6 4451.7 c
-3765.6 4449 l
-3805.56 4449 l
-3805.56 4452 l
-3796.02 4452.35 3793 4454.27 3793 4461.06 c
-3793 4511.82 l
-3793 4512.18 3794.23 4513.44 3795.66 4514.88 c
-3799.98 4519.2 3808.08 4522.8 3814.74 4522.8 c
-3822.48 4522.8 3827 4516.2 3827 4503.54 c
-3827 4464.48 l
-3827 4454.4 3824.93 4452.42 3814.2 4451.7 c
-3814.2 4449 l
-3854.52 4449 l
-3854.52 4452 l
-3844.26 4452.18 3842 4455.17 3842 4466.1 c
-3842 4511.46 l
-3847.28 4519.2 3852.91 4522.8 3861.18 4522.8 c
-3871.44 4522.8 3875 4517.85 3875 4502.64 c
-3875 4464.66 l
-3875 4454.4 3873.52 4452.96 3862.8 4451.7 c
-3862.8 4449 l
-3902.22 4449 l
-3902.22 4451.7 l
-3897.54 4452.06 l
-3892.14 4452.42 3890 4455.66 3890 4462.68 c
-3890 4499.76 l
-3890 4521 3882.91 4531.8 3868.92 4531.8 c
-3858.48 4531.8 3849.3 4527.12 3839.58 4516.68 c
-3836.34 4526.94 3830.22 4531.8 3820.5 4531.8 c
-3812.31 4531.8 3807.57 4529.46 3792.28 4517.94 c
-3792.28 4531.44 l
-3791.34 4531.8 l
-3782.16 4528.38 3776.04 4526.4 3766.14 4523.7 c
-h
-3903.04 4449 m
-f*
-3976.44 4478.52 m
-3967.8 4464.84 3960.06 4459.2 3948.54 4459.2 c
-3938.64 4459.2 3931.08 4464.02 3925.86 4474.02 c
-3922.26 4481.08 3920.82 4487.42 3920.46 4499 c
-3975.9 4499 l
-3974.46 4510.63 3972.66 4515.82 3968.16 4521.54 c
-3962.76 4528.02 3954.48 4531.8 3945.12 4531.8 c
-3922.8 4531.8 3907.5 4513.8 3907.5 4487.52 c
-3907.5 4462.68 3920.46 4447.2 3941.16 4447.2 c
-3958.44 4447.2 3971.76 4457.82 3979.32 4477.26 c
-h
-3920.82 4504 m
-3922.8 4518.66 3928.92 4524.8 3939.9 4524.8 c
-3950.88 4524.8 3955.2 4519.74 3957.54 4504 c
-h
-3982.92 4449 m
-f*
-1 i
-1 g
-3311.75 4641.35 m
-3478.55 4792.55 l
-3395.75 4792.55 l
-3395.75 4946.15 l
-3230.15 4946.15 l
-3230.15 4792.55 l
-3148.55 4792.55 l
-f*
-0 g
-3311.75 4641.35 m
-3478.55 4792.55 l
-3395.75 4792.55 l
-3395.75 4946.15 l
-3230.15 4946.15 l
-3230.15 4792.55 l
-3148.55 4792.55 l
-3311.75 4641.35 l
-3311.75 4654.55 l
-3173.75 4781.75 l
-3239.75 4781.75 l
-3239.75 4936.55 l
-3386.15 4936.55 l
-3386.15 4781.75 l
-3452.15 4781.75 l
-3311.75 4654.55 l
-3311.75 4641.35 l
-f*
-0.564706 g
-2322.95 3735.35 m
-2322.95 3845.75 2231.75 3936.95 2120.15 3936.95 c
-1623.35 3936.95 l
-1511.75 3936.95 1420.55 3845.75 1420.55 3735.35 c
-1420.55 3597.35 l
-1420.55 3486.95 1511.75 3395.75 1623.35 3395.75 c
-2120.15 3395.75 l
-2231.75 3395.75 2322.95 3486.95 2322.95 3597.35 c
-f*
-1 g
-2258.15 3792.95 m
-2258.15 3902.15 2169.35 3990.95 2057.75 3990.95 c
-1566.95 3990.95 l
-1456.55 3990.95 1366.55 3902.15 1366.55 3792.95 c
-1366.55 3658.55 l
-1366.55 3549.35 1455.35 3460.55 1566.95 3460.55 c
-2057.75 3460.55 l
-2169.35 3460.55 2258.15 3549.35 2258.15 3658.55 c
-f*
-0 g
-2258.15 3792.95 m
-2258.15 3902.15 2169.35 3990.95 2057.75 3990.95 c
-1566.95 3990.95 l
-1456.55 3990.95 1366.55 3902.15 1366.55 3792.95 c
-1366.55 3658.55 l
-1366.55 3549.35 1455.35 3460.55 1566.95 3460.55 c
-2057.75 3460.55 l
-2169.35 3460.55 2258.15 3549.35 2258.15 3658.55 c
-h
-S
-0.201248 i
-1599.33 3832 m
-1485.22 3832 l
-1485.22 3827 l
-1499.11 3826.2 1503 3823.18 1503 3812.72 c
-1503 3715.32 l
-1503 3704.85 1500.17 3702.64 1485.22 3701.03 c
-1485.22 3696 l
-1557.67 3696 l
-1557.67 3701 l
-1539.15 3701.81 1536 3704.23 1536 3715.32 c
-1536 3762.21 l
-1556.22 3761.81 1563.55 3754.36 1566.32 3731.02 c
-1571.35 3731.02 l
-1571.35 3799.04 l
-1566.32 3799.04 l
-1562.76 3776.1 1555.82 3769.05 1536 3769.05 c
-1536 3815.74 l
-1536 3823.19 1538.52 3825 1548.41 3825 c
-1567.13 3825 1578.8 3821.64 1585.04 3814.74 c
-1589.47 3809.71 1591.68 3804.27 1594.5 3791.59 c
-1599.33 3791.59 l
-h
-1604.96 3696 m
-f*
-1649.19 3789 m
-1610.84 3789 l
-1610.84 3783.95 l
-1619.49 3782.74 1622 3780.12 1622 3772.07 c
-1622 3712.9 l
-1622 3704.65 1619.93 3702.44 1610.84 3700.83 c
-1610.84 3696 l
-1664.37 3696 l
-1664.37 3700.83 l
-1652.09 3701.63 1650 3704.25 1650 3716.73 c
-1650 3754.76 l
-1650 3765.23 1655.49 3773.88 1661.95 3773.88 c
-1663.56 3773.88 1665.37 3772.47 1667.59 3769.25 c
-1671.41 3763.82 1674.43 3762.01 1679.66 3762.01 c
-1687.11 3762.01 1692.34 3767.64 1692.34 3775.29 c
-1692.34 3784.55 1685.5 3791.41 1676.04 3791.41 c
-1666.1 3791.41 1658.54 3786.12 1649.19 3772.27 c
-h
-1694.35 3696 m
-f*
-1789.19 3708.88 m
-1787.18 3706.87 l
-1786.57 3706.26 1785.97 3706.06 1784.96 3706.06 c
-1782.15 3706.06 1781 3707.67 1781 3711.09 c
-1781 3763.62 l
-1781 3780.73 1765.6 3791.42 1740.89 3791.42 c
-1718.15 3791.42 1702.85 3781.06 1702.85 3765.83 c
-1702.85 3757.38 1707.69 3752.55 1715.94 3752.55 c
-1723.99 3752.55 1729.62 3757.38 1729.62 3764.22 c
-1729.62 3767.04 1728.61 3769.66 1726 3772.88 c
-1724.19 3774.89 1723.58 3776.1 1723.58 3777.3 c
-1723.58 3781.53 1729.02 3784.42 1736.26 3784.42 c
-1748.14 3784.42 1753.86 3779.08 1753.86 3767.04 c
-1753.86 3752.35 l
-1729.91 3745.1 1720.29 3741.48 1712.51 3736.45 c
-1703.46 3730.41 1699 3723.37 1699 3714.52 c
-1699 3702.24 1708.27 3693.18 1721.17 3693.18 c
-1732.84 3693.18 1742.1 3697.21 1753.17 3707.27 c
-1755.38 3697.01 1759.81 3693.18 1769.67 3693.18 c
-1778.32 3693.18 1784.56 3696.4 1792.21 3704.65 c
-h
-1753 3716.13 m
-1747.55 3709.89 1743.52 3707.47 1738.68 3707.47 c
-1732.64 3707.47 1728 3712.91 1728 3720.96 c
-1728 3732.63 1736.61 3740.88 1753 3745.31 c
-h
-1794.62 3696 m
-f*
-1836.4 3789 m
-1797.7 3789 l
-1797.7 3783.95 l
-1806.55 3782.74 1809 3780.32 1809 3772.07 c
-1809 3712.9 l
-1809 3704.65 1806.74 3702.44 1797.7 3700.83 c
-1797.7 3696 l
-1846 3696 l
-1846 3700.83 l
-1838.95 3701.84 1837 3704.65 1837 3712.3 c
-1837 3766.03 l
-1837 3767.04 1839.87 3770.66 1842.18 3772.88 c
-1846.4 3776.1 1850.02 3778.42 1853.65 3778.42 c
-1861.5 3778.42 1865 3773.59 1865 3761 c
-1865 3712.3 l
-1865 3704.05 1862.68 3701.43 1854.85 3700.83 c
-1854.85 3696 l
-1901.95 3696 l
-1901.95 3700.83 l
-1894.9 3701.64 1893 3704.65 1893 3712.3 c
-1893 3766.03 l
-1893 3767.04 1895.73 3770.46 1897.92 3772.68 c
-1902.35 3776.1 1905.97 3778.42 1909.59 3778.42 c
-1917.24 3778.42 1920 3773.38 1920 3761 c
-1920 3712.3 l
-1920 3703.85 1917.85 3701.43 1910.4 3700.83 c
-1910.4 3696 l
-1958.3 3696 l
-1958.3 3701 l
-1950.45 3701.4 1948 3703.78 1948 3712.3 c
-1948 3762.81 l
-1948 3780.12 1937.43 3791.42 1921.07 3791.42 c
-1909.59 3791.42 1901.95 3786.73 1891.48 3773.68 c
-1885.44 3786.36 1878.4 3791.42 1865.72 3791.42 c
-1852.95 3791.42 1843.98 3785.91 1836.4 3773.68 c
-h
-1961.64 3696 m
-f*
-2039.9 3721.16 m
-2031.65 3711.29 2025.61 3707.18 2016.96 3707.18 c
-2009.31 3707.18 2003.27 3710.77 1999.25 3717.94 c
-1995.43 3724.54 1993.82 3731.56 1993.01 3746 c
-2043.73 3746 l
-2042.52 3762.36 2039.5 3771.43 2033.26 3779.12 c
-2026.82 3786.96 2017.36 3791.42 2006.09 3791.42 c
-1980.94 3791.42 1964.03 3771.4 1964.03 3741.88 c
-1964.03 3712.5 1980.53 3693.18 2005.49 3693.18 c
-2021.79 3693.18 2031.65 3699.42 2044.73 3718.34 c
-h
-1992 3753 m
-1992.61 3776.96 1996.23 3784.42 2006.09 3784.42 c
-2011.93 3784.42 2015.55 3781.38 2017.16 3775.49 c
-2018.17 3771.67 2018.57 3766.03 2018.97 3755.77 c
-2018.97 3753 l
-h
-2048.35 3696 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2092 -3696]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4782.95 2934.95 m
-4782.95 3046.55 4691.75 3137.75 4580.15 3137.75 c
-4083.35 3137.75 l
-3971.75 3137.75 3880.55 3046.55 3880.55 2934.95 c
-3880.55 2798.15 l
-3880.55 2686.55 3971.75 2595.35 4083.35 2595.35 c
-4580.15 2595.35 l
-4691.75 2595.35 4782.95 2686.55 4782.95 2798.15 c
-f*
-1 g
-4718.15 2992.55 m
-4718.15 3102.95 4629.35 3191.75 4517.75 3191.75 c
-4026.95 3191.75 l
-3916.55 3191.75 3826.55 3102.95 3826.55 2992.55 c
-3826.55 2859.35 l
-3826.55 2748.95 3915.35 2660.15 4026.95 2660.15 c
-4517.75 2660.15 l
-4629.35 2660.15 4718.15 2748.95 4718.15 2859.35 c
-f*
-0 g
-4718.15 2992.55 m
-4718.15 3102.95 4629.35 3191.75 4517.75 3191.75 c
-4026.95 3191.75 l
-3916.55 3191.75 3826.55 3102.95 3826.55 2992.55 c
-3826.55 2859.35 l
-3826.55 2748.95 3915.35 2660.15 4026.95 2660.15 c
-4517.75 2660.15 l
-4629.35 2660.15 4718.15 2748.95 4718.15 2859.35 c
-h
-S
-0.201248 i
-4059.33 3033 m
-3945.22 3033 l
-3945.22 3028 l
-3959.11 3027.2 3963 3024.18 3963 3013.72 c
-3963 2916.32 l
-3963 2905.85 3960.17 2903.64 3945.22 2902.03 c
-3945.22 2897 l
-4017.67 2897 l
-4017.67 2902 l
-3999.15 2902.81 3996 2905.23 3996 2916.32 c
-3996 2963.21 l
-4016.22 2962.81 4023.55 2955.36 4026.32 2932.02 c
-4031.35 2932.02 l
-4031.35 3000.04 l
-4026.32 3000.04 l
-4022.76 2977.1 4015.82 2970.05 3996 2970.05 c
-3996 3016.74 l
-3996 3024.19 3998.52 3026 4008.41 3026 c
-4027.13 3026 4038.8 3022.64 4045.04 3015.74 c
-4049.47 3010.71 4051.68 3005.27 4054.5 2992.59 c
-4059.33 2992.59 l
-h
-4064.96 2897 m
-f*
-4109.19 2990 m
-4070.84 2990 l
-4070.84 2984.95 l
-4079.49 2983.74 4082 2981.12 4082 2973.07 c
-4082 2913.9 l
-4082 2905.65 4079.93 2903.44 4070.84 2901.83 c
-4070.84 2897 l
-4124.37 2897 l
-4124.37 2901.83 l
-4112.09 2902.63 4110 2905.25 4110 2917.73 c
-4110 2955.76 l
-4110 2966.23 4115.49 2974.88 4121.95 2974.88 c
-4123.56 2974.88 4125.37 2973.47 4127.59 2970.25 c
-4131.41 2964.82 4134.43 2963.01 4139.66 2963.01 c
-4147.11 2963.01 4152.34 2968.64 4152.34 2976.29 c
-4152.34 2985.55 4145.5 2992.41 4136.04 2992.41 c
-4126.1 2992.41 4118.54 2987.12 4109.19 2973.27 c
-h
-4154.35 2897 m
-f*
-4249.19 2909.88 m
-4247.18 2907.87 l
-4246.57 2907.26 4245.97 2907.06 4244.96 2907.06 c
-4242.15 2907.06 4241 2908.67 4241 2912.09 c
-4241 2964.62 l
-4241 2981.73 4225.6 2992.42 4200.89 2992.42 c
-4178.15 2992.42 4162.85 2982.06 4162.85 2966.83 c
-4162.85 2958.38 4167.69 2953.55 4175.94 2953.55 c
-4183.99 2953.55 4189.62 2958.38 4189.62 2965.22 c
-4189.62 2968.04 4188.61 2970.66 4186 2973.88 c
-4184.19 2975.89 4183.58 2977.1 4183.58 2978.3 c
-4183.58 2982.53 4189.02 2985.42 4196.26 2985.42 c
-4208.14 2985.42 4213.86 2980.08 4213.86 2968.04 c
-4213.86 2953.35 l
-4189.91 2946.1 4180.29 2942.48 4172.51 2937.45 c
-4163.46 2931.41 4159 2924.37 4159 2915.52 c
-4159 2903.24 4168.27 2894.18 4181.17 2894.18 c
-4192.84 2894.18 4202.1 2898.21 4213.17 2908.27 c
-4215.38 2898.01 4219.81 2894.18 4229.67 2894.18 c
-4238.32 2894.18 4244.56 2897.4 4252.21 2905.65 c
-h
-4213 2917.13 m
-4207.55 2910.89 4203.52 2908.47 4198.68 2908.47 c
-4192.64 2908.47 4188 2913.91 4188 2921.96 c
-4188 2933.63 4196.61 2941.88 4213 2946.31 c
-h
-4254.62 2897 m
-f*
-4296.4 2990 m
-4257.7 2990 l
-4257.7 2984.95 l
-4266.55 2983.74 4269 2981.32 4269 2973.07 c
-4269 2913.9 l
-4269 2905.65 4266.74 2903.44 4257.7 2901.83 c
-4257.7 2897 l
-4306 2897 l
-4306 2901.83 l
-4298.95 2902.84 4297 2905.65 4297 2913.3 c
-4297 2967.03 l
-4297 2968.04 4299.87 2971.66 4302.18 2973.88 c
-4306.4 2977.1 4310.02 2979.42 4313.65 2979.42 c
-4321.5 2979.42 4325 2974.59 4325 2962 c
-4325 2913.3 l
-4325 2905.05 4322.68 2902.43 4314.85 2901.83 c
-4314.85 2897 l
-4361.95 2897 l
-4361.95 2901.83 l
-4354.9 2902.64 4353 2905.65 4353 2913.3 c
-4353 2967.03 l
-4353 2968.04 4355.73 2971.46 4357.92 2973.68 c
-4362.35 2977.1 4365.97 2979.42 4369.59 2979.42 c
-4377.24 2979.42 4380 2974.38 4380 2962 c
-4380 2913.3 l
-4380 2904.85 4377.85 2902.43 4370.4 2901.83 c
-4370.4 2897 l
-4418.3 2897 l
-4418.3 2902 l
-4410.45 2902.4 4408 2904.78 4408 2913.3 c
-4408 2963.81 l
-4408 2981.12 4397.43 2992.42 4381.07 2992.42 c
-4369.59 2992.42 4361.95 2987.73 4351.48 2974.68 c
-4345.44 2987.36 4338.4 2992.42 4325.72 2992.42 c
-4312.95 2992.42 4303.98 2986.91 4296.4 2974.68 c
-h
-4421.64 2897 m
-f*
-4499.9 2922.16 m
-4491.65 2912.29 4485.61 2908.18 4476.96 2908.18 c
-4469.31 2908.18 4463.27 2911.77 4459.25 2918.94 c
-4455.43 2925.54 4453.82 2932.56 4453.01 2947 c
-4503.73 2947 l
-4502.52 2963.36 4499.5 2972.43 4493.26 2980.12 c
-4486.82 2987.96 4477.36 2992.42 4466.09 2992.42 c
-4440.94 2992.42 4424.03 2972.4 4424.03 2942.88 c
-4424.03 2913.5 4440.53 2894.18 4465.49 2894.18 c
-4481.79 2894.18 4491.65 2900.42 4504.73 2919.34 c
-h
-4452 2954 m
-4452.61 2977.96 4456.23 2985.42 4466.09 2985.42 c
-4471.93 2985.42 4475.55 2982.38 4477.16 2976.49 c
-4478.17 2972.67 4478.57 2967.03 4478.97 2956.77 c
-4478.97 2954 l
-h
-4508.35 2897 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4544 -2895]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3864.95 2228.15 m
-3864.95 2338.55 3773.75 2429.75 3662.15 2429.75 c
-3166.55 2429.75 l
-3054.95 2429.75 2963.75 2338.55 2963.75 2228.15 c
-2963.75 2090.15 l
-2963.75 1979.75 3054.95 1888.55 3166.55 1888.55 c
-3662.15 1888.55 l
-3773.75 1888.55 3864.95 1979.75 3864.95 2090.15 c
-f*
-1 g
-3795.35 2284.55 m
-3795.35 2391.35 3706.55 2478.95 3597.35 2478.95 c
-3112.55 2478.95 l
-3003.35 2478.95 2914.55 2391.35 2914.55 2284.55 c
-2914.55 2152.55 l
-2914.55 2045.75 3003.35 1958.15 3112.55 1958.15 c
-3597.35 1958.15 l
-3706.55 1958.15 3795.35 2045.75 3795.35 2152.55 c
-f*
-16 w
-0 g
-3795.35 2284.55 m
-3795.35 2391.35 3706.55 2478.95 3597.35 2478.95 c
-3112.55 2478.95 l
-3003.35 2478.95 2914.55 2391.35 2914.55 2284.55 c
-2914.55 2152.55 l
-2914.55 2045.75 3003.35 1958.15 3112.55 1958.15 c
-3597.35 1958.15 l
-3706.55 1958.15 3795.35 2045.75 3795.35 2152.55 c
-h
-S
-0.201248 i
-3142.33 2325 m
-3028.22 2325 l
-3028.22 2320 l
-3042.11 2319.2 3046 2316.18 3046 2305.72 c
-3046 2208.32 l
-3046 2197.85 3043.17 2195.64 3028.22 2194.03 c
-3028.22 2189 l
-3100.67 2189 l
-3100.67 2194 l
-3082.15 2194.81 3079 2197.23 3079 2208.32 c
-3079 2255.21 l
-3099.22 2254.81 3106.55 2247.36 3109.32 2224.02 c
-3114.35 2224.02 l
-3114.35 2292.04 l
-3109.32 2292.04 l
-3105.76 2269.1 3098.82 2262.05 3079 2262.05 c
-3079 2308.74 l
-3079 2316.19 3081.52 2318 3091.41 2318 c
-3110.13 2318 3121.8 2314.64 3128.04 2307.74 c
-3132.47 2302.71 3134.68 2297.27 3137.5 2284.59 c
-3142.33 2284.59 l
-h
-3147.96 2189 m
-f*
-3191.19 2282 m
-3152.84 2282 l
-3152.84 2276.95 l
-3161.49 2275.74 3164 2273.12 3164 2265.07 c
-3164 2205.9 l
-3164 2197.65 3161.93 2195.44 3152.84 2193.83 c
-3152.84 2189 l
-3206.37 2189 l
-3206.37 2193.83 l
-3194.09 2194.63 3192 2197.25 3192 2209.73 c
-3192 2247.76 l
-3192 2258.23 3197.49 2266.88 3203.95 2266.88 c
-3205.56 2266.88 3207.37 2265.47 3209.59 2262.25 c
-3213.41 2256.82 3216.43 2255.01 3221.66 2255.01 c
-3229.11 2255.01 3234.34 2260.64 3234.34 2268.29 c
-3234.34 2277.55 3227.5 2284.41 3218.04 2284.41 c
-3208.1 2284.41 3200.54 2279.12 3191.19 2265.27 c
-h
-3236.35 2189 m
-f*
-3331.19 2201.88 m
-3329.18 2199.87 l
-3328.57 2199.26 3327.97 2199.06 3326.96 2199.06 c
-3324.15 2199.06 3323 2200.67 3323 2204.09 c
-3323 2256.62 l
-3323 2273.73 3307.6 2284.42 3282.89 2284.42 c
-3260.15 2284.42 3244.85 2274.06 3244.85 2258.83 c
-3244.85 2250.38 3249.69 2245.55 3257.94 2245.55 c
-3265.99 2245.55 3271.62 2250.38 3271.62 2257.22 c
-3271.62 2260.04 3270.61 2262.66 3268 2265.88 c
-3266.19 2267.89 3265.58 2269.1 3265.58 2270.3 c
-3265.58 2274.53 3271.02 2277.42 3278.26 2277.42 c
-3290.14 2277.42 3295.86 2272.08 3295.86 2260.04 c
-3295.86 2245.35 l
-3271.91 2238.1 3262.29 2234.48 3254.51 2229.45 c
-3245.46 2223.41 3241 2216.37 3241 2207.52 c
-3241 2195.24 3250.27 2186.18 3263.17 2186.18 c
-3274.84 2186.18 3284.1 2190.21 3295.17 2200.27 c
-3297.38 2190.01 3301.81 2186.18 3311.67 2186.18 c
-3320.32 2186.18 3326.56 2189.4 3334.21 2197.65 c
-h
-3295 2209.13 m
-3289.55 2202.89 3285.52 2200.47 3280.68 2200.47 c
-3274.64 2200.47 3270 2205.91 3270 2213.96 c
-3270 2225.63 3278.61 2233.88 3295 2238.31 c
-h
-3336.62 2189 m
-f*
-3378.4 2282 m
-3339.7 2282 l
-3339.7 2276.95 l
-3348.55 2275.74 3351 2273.32 3351 2265.07 c
-3351 2205.9 l
-3351 2197.65 3348.74 2195.44 3339.7 2193.83 c
-3339.7 2189 l
-3388 2189 l
-3388 2193.83 l
-3380.95 2194.84 3379 2197.65 3379 2205.3 c
-3379 2259.03 l
-3379 2260.04 3381.87 2263.66 3384.18 2265.88 c
-3388.4 2269.1 3392.02 2271.42 3395.65 2271.42 c
-3403.5 2271.42 3407 2266.59 3407 2254 c
-3407 2205.3 l
-3407 2197.05 3404.68 2194.43 3396.85 2193.83 c
-3396.85 2189 l
-3443.95 2189 l
-3443.95 2193.83 l
-3436.9 2194.64 3435 2197.65 3435 2205.3 c
-3435 2259.03 l
-3435 2260.04 3437.73 2263.46 3439.92 2265.68 c
-3444.35 2269.1 3447.97 2271.42 3451.59 2271.42 c
-3459.24 2271.42 3462 2266.38 3462 2254 c
-3462 2205.3 l
-3462 2196.85 3459.85 2194.43 3452.4 2193.83 c
-3452.4 2189 l
-3500.3 2189 l
-3500.3 2194 l
-3492.45 2194.4 3490 2196.78 3490 2205.3 c
-3490 2255.81 l
-3490 2273.12 3479.43 2284.42 3463.07 2284.42 c
-3451.59 2284.42 3443.95 2279.73 3433.48 2266.68 c
-3427.44 2279.36 3420.4 2284.42 3407.72 2284.42 c
-3394.95 2284.42 3385.98 2278.91 3378.4 2266.68 c
-h
-3503.64 2189 m
-f*
-3583.9 2214.16 m
-3575.65 2204.29 3569.61 2200.18 3560.96 2200.18 c
-3553.31 2200.18 3547.27 2203.77 3543.25 2210.94 c
-3539.43 2217.54 3537.82 2224.56 3537.01 2239 c
-3587.73 2239 l
-3586.52 2255.36 3583.5 2264.43 3577.26 2272.12 c
-3570.82 2279.96 3561.36 2284.42 3550.09 2284.42 c
-3524.94 2284.42 3508.03 2264.4 3508.03 2234.88 c
-3508.03 2205.5 3524.53 2186.18 3549.49 2186.18 c
-3565.79 2186.18 3575.65 2192.42 3588.73 2211.34 c
-h
-3536 2246 m
-3536.61 2269.96 3540.23 2277.42 3550.09 2277.42 c
-3555.93 2277.42 3559.55 2274.38 3561.16 2268.49 c
-3562.17 2264.67 3562.57 2259.03 3562.97 2248.77 c
-3562.97 2246 l
-h
-3592.35 2189 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3626 -2189]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-8 w
-1811.75 3430.55 m
-1811.75 3438.95 1811.75 3438.95 1811.75 3430.55 c
-1811.75 3282.95 1851.35 3141.35 1923.35 3040.55 c
-S
-1864.55 3046.55 m
-1913.75 3062.15 l
-1938.95 3107.75 l
-2000.15 2960.15 l
-f*
-2304.95 2464.55 m
-2394.95 2346.95 2579.75 2262.95 2800.55 2241.35 c
-S
-2759.75 2198.15 m
-2781.35 2244.95 l
-2765.75 2292.95 l
-2914.55 2236.55 l
-f*
-2891.75 3844.55 m
-2789.75 3944.15 2644.55 4001.75 2490.95 4001.75 c
-2386.55 4001.75 2284.55 3975.35 2196.95 3924.95 c
-S
-2826.95 3838.55 m
-2874.95 3854.15 l
-2898.95 3899.75 l
-2962.55 3753.35 l
-f*
-3246.95 3268.55 m
-3335.75 3094.55 3500.15 2969.75 3695.75 2930.15 c
-S
-3651.35 2890.55 m
-3676.55 2936.15 l
-3664.55 2986.55 l
-3808.55 2915.75 l
-f*
-0.564706 g
-3698.15 3444.95 m
-3563.75 3480.95 l
-3659.75 3537.35 l
-3506.15 3545.75 l
-3548.15 3616.55 l
-3400.55 3596.15 l
-3383.75 3666.95 l
-3263.75 3622.55 l
-3188.15 3686.15 l
-3112.55 3622.55 l
-2992.55 3666.95 l
-2974.55 3596.15 l
-2825.75 3616.55 l
-2870.15 3545.75 l
-2716.55 3537.35 l
-2812.55 3480.95 l
-2676.95 3444.95 l
-2812.55 3410.15 l
-2716.55 3353.75 l
-2870.15 3344.15 l
-2825.75 3274.55 l
-2974.55 3294.95 l
-2992.55 3222.95 l
-3112.55 3268.55 l
-3188.15 3204.95 l
-3263.75 3268.55 l
-3383.75 3222.95 l
-3400.55 3294.95 l
-3548.15 3274.55 l
-3506.15 3344.15 l
-3659.75 3353.75 l
-3563.75 3410.15 l
-f*
-1 g
-3638.15 3504.95 m
-3503.75 3540.95 l
-3599.75 3597.35 l
-3446.15 3605.75 l
-3488.15 3676.55 l
-3340.55 3656.15 l
-3323.75 3726.95 l
-3203.75 3682.55 l
-3128.15 3746.15 l
-3052.55 3682.55 l
-2932.55 3726.95 l
-2914.55 3656.15 l
-2765.75 3676.55 l
-2810.15 3605.75 l
-2656.55 3597.35 l
-2752.55 3540.95 l
-2616.95 3504.95 l
-2752.55 3470.15 l
-2656.55 3413.75 l
-2810.15 3404.15 l
-2765.75 3334.55 l
-2914.55 3354.95 l
-2932.55 3282.95 l
-3052.55 3328.55 l
-3128.15 3264.95 l
-3203.75 3328.55 l
-3323.75 3282.95 l
-3340.55 3354.95 l
-3488.15 3334.55 l
-3446.15 3404.15 l
-3599.75 3413.75 l
-3503.75 3470.15 l
-f*
-0 g
-3638.15 3504.95 m
-3503.75 3540.95 l
-3599.75 3597.35 l
-3446.15 3605.75 l
-3488.15 3676.55 l
-3340.55 3656.15 l
-3323.75 3726.95 l
-3203.75 3682.55 l
-3128.15 3746.15 l
-3052.55 3682.55 l
-2932.55 3726.95 l
-2914.55 3656.15 l
-2765.75 3676.55 l
-2810.15 3605.75 l
-2656.55 3597.35 l
-2752.55 3540.95 l
-2616.95 3504.95 l
-2752.55 3470.15 l
-2656.55 3413.75 l
-2810.15 3404.15 l
-2765.75 3334.55 l
-2914.55 3354.95 l
-2932.55 3282.95 l
-3052.55 3328.55 l
-3128.15 3264.95 l
-3203.75 3328.55 l
-3323.75 3282.95 l
-3340.55 3354.95 l
-3488.15 3334.55 l
-3446.15 3404.15 l
-3599.75 3413.75 l
-3503.75 3470.15 l
-3638.15 3504.95 l
-3599.75 3504.95 l
-3477.35 3473.75 l
-3566.15 3420.95 l
-3428.15 3413.75 l
-3468.95 3347.75 l
-3333.35 3365.75 l
-3316.55 3297.35 l
-3201.35 3339.35 l
-3128.15 3276.95 l
-3054.95 3339.35 l
-2939.75 3297.35 l
-2921.75 3365.75 l
-2786.15 3347.75 l
-2826.95 3413.75 l
-2690.15 3420.95 l
-2778.95 3473.75 l
-2656.55 3504.95 l
-2777.75 3537.35 l
-2690.15 3590.15 l
-2826.95 3597.35 l
-2786.15 3663.35 l
-2921.75 3644.15 l
-2939.75 3713.75 l
-3054.95 3670.55 l
-3128.15 3732.95 l
-3201.35 3670.55 l
-3316.55 3713.75 l
-3333.35 3644.15 l
-3468.95 3663.35 l
-3428.15 3597.35 l
-3566.15 3590.15 l
-3477.35 3537.35 l
-3599.75 3504.95 l
-3638.15 3504.95 l
-f*
-0.2 i
-2950.08 3556.76 m
-2930.08 3482.52 l
-2927.52 3473.88 2924.48 3471.64 2914.08 3471 c
-2914.08 3467 l
-2964 3467 l
-2964 3471 l
-2954.72 3471.48 2952.48 3472.76 2952.48 3477.88 c
-2952.48 3479.64 2952.8 3481.4 2953.76 3485.08 c
-2953.92 3485.88 l
-2954.08 3486.68 l
-2973.76 3558.52 l
-2976.16 3566.84 2978.56 3569.08 2986.72 3570.04 c
-2986.72 3574 l
-2952.8 3574 l
-2903.2 3497.24 l
-2894.56 3574 l
-2859.2 3574 l
-2859.2 3570 l
-2869.28 3569.52 2870.72 3568.89 2870.72 3564.44 c
-2870.72 3562.2 2870.08 3559.32 2868.96 3555.16 c
-2851.52 3495.48 l
-2845.12 3474.68 2844 3472.92 2835.36 3471 c
-2835.36 3467 l
-2868.48 3467 l
-2868.48 3471 l
-2858.24 3472.28 2855.68 3474.2 2855.68 3480.76 c
-2855.68 3483.48 2856.48 3487.48 2858.72 3495.48 c
-2874.88 3554.52 l
-2885.6 3465.08 l
-2890.08 3465.08 l
-h
-2982.24 3467 m
-f*
-3051.44 3487.32 m
-3044.88 3478.52 3042.48 3475.76 3039.92 3475.76 c
-3038.64 3475.76 3038 3476.86 3038 3478.52 c
-3038 3482.52 3039.44 3489.08 3043.44 3502.2 c
-3054.8 3539.96 l
-3037.04 3538.84 l
-3034.16 3529.4 l
-3032.72 3537.56 3029.2 3541.08 3022.32 3541.08 c
-3002.64 3541.08 2979 3510.27 2979 3485.24 c
-2979 3473.08 2985.74 3464.92 2995.92 3464.92 c
-3005.68 3464.92 3013.04 3470.68 3022.16 3486.04 c
-3020.24 3479.48 3020 3477.56 3020 3475.32 c
-3020 3469.4 3024.76 3464.76 3030.64 3464.76 c
-3038.16 3464.76 3045.52 3471 3054.8 3484.92 c
-h
-3024.56 3534.2 m
-3028.08 3533.88 3030.56 3531 3030.56 3526.68 c
-3030.56 3517.08 3025.24 3499.32 3018.96 3488.28 c
-3014.64 3480.44 3009.84 3475.92 3005.52 3475.92 c
-3001.36 3475.92 2998 3479.75 2998 3484.92 c
-2998 3493.24 3003.42 3509.24 3010.16 3521.08 c
-3014.96 3529.56 3020.24 3534.52 3024.56 3534.2 c
-h
-3062 3467 m
-f*
-3096.56 3540.92 m
-3080.24 3538.36 3074 3537.4 3065.68 3536.44 c
-3065.68 3532 l
-3072.88 3531.69 3074.32 3531.07 3074.32 3528.12 c
-3074.32 3526.52 3073.04 3520.76 3070.8 3512.44 c
-3054.8 3450.36 l
-3051.76 3439.8 3050.48 3438.84 3042.8 3439 c
-3042.8 3434 l
-3082.64 3434 l
-3082.64 3439 l
-3074.64 3439.14 3072.24 3440.16 3072.24 3443.64 c
-3072.24 3445.88 3073.36 3450.68 3076.4 3461.88 c
-3077.52 3465.72 3077.52 3466.04 3078.16 3468.44 c
-3083.76 3465.56 3085.68 3464.92 3089.04 3464.92 c
-3110.8 3464.92 3133.36 3493.88 3133.36 3521.56 c
-3133.36 3533.4 3126.64 3541.08 3116.08 3541.08 c
-3106.96 3541.08 3099.92 3535.92 3090.48 3522.52 c
-h
-3107.12 3529.56 m
-3111.28 3529.24 3113.68 3525.56 3113.36 3520.44 c
-3112.72 3509.88 3107.6 3494.04 3101.84 3483.64 c
-3096.88 3475 3091.76 3469.92 3086.32 3469.92 c
-3082.8 3469.92 3080.08 3472.75 3080.08 3476.28 c
-3080.08 3479 3081.84 3485.56 3086.16 3500.12 c
-3089.68 3511.8 3091.12 3515.8 3093.52 3519.48 c
-3097.52 3525.72 3102.96 3529.88 3107.12 3529.56 c
-h
-3142 3467 m
-f*
-3177.56 3540.92 m
-3161.24 3538.36 3155 3537.4 3146.68 3536.44 c
-3146.68 3532 l
-3153.88 3531.69 3155.32 3531.07 3155.32 3528.12 c
-3155.32 3526.52 3154.04 3520.76 3151.8 3512.44 c
-3135.8 3450.36 l
-3132.76 3439.8 3131.48 3438.84 3123.8 3439 c
-3123.8 3434 l
-3163.64 3434 l
-3163.64 3439 l
-3155.64 3439.14 3153.24 3440.16 3153.24 3443.64 c
-3153.24 3445.88 3154.36 3450.68 3157.4 3461.88 c
-3158.52 3465.72 3158.52 3466.04 3159.16 3468.44 c
-3164.76 3465.56 3166.68 3464.92 3170.04 3464.92 c
-3191.8 3464.92 3214.36 3493.88 3214.36 3521.56 c
-3214.36 3533.4 3207.64 3541.08 3197.08 3541.08 c
-3187.96 3541.08 3180.92 3535.92 3171.48 3522.52 c
-h
-3188.12 3529.56 m
-3192.28 3529.24 3194.68 3525.56 3194.36 3520.44 c
-3193.72 3509.88 3188.6 3494.04 3182.84 3483.64 c
-3177.88 3475 3172.76 3469.92 3167.32 3469.92 c
-3163.8 3469.92 3161.08 3472.75 3161.08 3476.28 c
-3161.08 3479 3162.84 3485.56 3167.16 3500.12 c
-3170.68 3511.8 3172.12 3515.8 3174.52 3519.48 c
-3178.52 3525.72 3183.96 3529.88 3188.12 3529.56 c
-h
-3223 3467 m
-f*
-3256.56 3489.56 m
-3254.32 3486.36 l
-3250.16 3480.12 3246.48 3476.56 3244.08 3476.56 c
-3242.8 3476.56 3242 3477.77 3242 3479.16 c
-3242 3480.6 3242.62 3484.76 3243.12 3487.48 c
-3257.68 3540.92 l
-3249.22 3539 3238.26 3537.4 3226.04 3536.44 c
-3226.04 3532 l
-3227.44 3532 l
-3232.24 3532 3235.48 3530.44 3235.48 3527.48 c
-3235.48 3526.2 3234.71 3523.8 3233.68 3521.08 c
-3224.4 3486.68 l
-3223.12 3482.04 3223 3477.88 3223 3475.64 c
-3223 3469.56 3227.2 3465.56 3233.36 3465.56 c
-3242.96 3465.56 3248.88 3470.36 3260.08 3487.32 c
-h
-3252.88 3576.4 m
-3247.44 3576.4 3243 3571.46 3243 3566.04 c
-3243 3559.8 3247.26 3555.4 3253.04 3555.4 c
-3259.12 3555.4 3264 3559.86 3264 3565.56 c
-3264 3571.48 3259 3576.4 3252.88 3576.4 c
-h
-3266.48 3467 m
-f*
-3341.36 3488.6 m
-3334.96 3478.68 3332.88 3476.56 3330.16 3476.56 c
-3328.88 3476.56 3328 3477.63 3328 3479.16 c
-3328 3480.76 3328.94 3484.12 3331.92 3493.08 c
-3337.68 3510.52 l
-3340.24 3518.04 3342 3525.08 3342 3528.92 c
-3342 3536.76 3337.78 3541.08 3330.16 3541.08 c
-3324.24 3541.08 3318.48 3538.62 3314.16 3534.36 c
-3308.24 3528.76 3305.2 3524.92 3294.48 3509.08 c
-3304.72 3540.76 l
-3294.48 3538.52 3281.68 3536.92 3272.72 3536.6 c
-3272.72 3531.8 l
-3279.44 3531.65 3281.36 3530.92 3281.36 3528.12 c
-3281.36 3526.2 3279.12 3517.72 3274 3499.64 c
-3270.32 3486.68 3269.2 3482.52 3265.04 3467 c
-3284.4 3467 l
-3291.92 3494.68 3297.68 3508.6 3307.6 3521.56 c
-3310.8 3525.88 3315.76 3529.08 3318.64 3529.08 c
-3320.72 3529.08 3323 3527.63 3323 3526.04 c
-3323 3525.56 3322.54 3524.28 3321.84 3522.68 c
-3313.04 3496.12 l
-3310.48 3488.44 3309 3479.32 3309 3475.16 c
-3309 3469.08 3312.84 3465.56 3319.44 3465.56 c
-3329.04 3465.56 3335.6 3471 3344.88 3486.52 c
-h
-3354.96 3467 m
-f*
-3432.48 3536 m
-3414.72 3536 l
-3409.28 3539.58 3404.48 3541.08 3397.12 3541.08 c
-3377.44 3541.08 3361 3528.05 3361 3511.8 c
-3361 3503.64 3365.35 3497.88 3374.4 3494.2 c
-3361.28 3486.84 3359 3484.6 3359 3478.68 c
-3359 3473.56 3361.89 3470.52 3368.96 3468.12 c
-3359.04 3465.72 3355.84 3464.44 3352 3461.4 c
-3349.44 3459.16 3348 3455.32 3348 3451.48 c
-3348 3441.08 3359.56 3435 3377.76 3435 c
-3400.32 3435 3416 3444.72 3416 3458.52 c
-3416 3468.28 3409.6 3473.56 3392.16 3478.52 c
-3383.68 3480.92 l
-3378.56 3482.36 3375 3484.6 3375 3487 c
-3375 3489.56 3377.68 3492.28 3380 3492.28 c
-3380.8 3492.28 3381.92 3492.24 3383.2 3492.12 c
-3384.96 3491.64 3386.24 3491 3388.16 3491 c
-3395.2 3491 3402.4 3493.09 3408.48 3496.92 c
-3417.76 3502.2 3423 3510.36 3423 3519.96 c
-3423 3522.64 3422.59 3524.32 3421.76 3527 c
-3432.48 3527 l
-h
-3374.4 3466.04 m
-3376.32 3465.88 3388.48 3461.72 3392 3460.12 c
-3396.48 3457.88 3399 3455.16 3399 3451 c
-3399 3443.96 3391.8 3440 3379.36 3440 c
-3368.96 3440 3362 3445.1 3362 3452.44 c
-3362 3455.48 3363.32 3458.2 3366.24 3461.24 c
-3368.32 3463.32 3373.12 3466.2 3374.4 3466.04 c
-h
-3396.8 3536.08 m
-3400.96 3536.08 3404 3532.19 3404 3526.52 c
-3404 3521.08 3402.08 3513.4 3399.36 3507.48 c
-3396 3500.12 3391.84 3496 3386.88 3496 c
-3382.56 3496 3380 3499.52 3380 3505.88 c
-3380 3512.28 3382.79 3522.04 3386.24 3528.12 c
-3389.28 3533.4 3392.64 3536.08 3396.8 3536.08 c
-h
-3436 3467 m
-f*
-1 i
-0.564706 g
-2768.15 2649.35 m
-2633.75 2686.55 l
-2729.75 2741.75 l
-2576.15 2751.35 l
-2618.15 2820.95 l
-2470.55 2800.55 l
-2453.75 2872.55 l
-2333.75 2826.95 l
-2258.15 2890.55 l
-2182.55 2826.95 l
-2062.55 2872.55 l
-2044.55 2800.55 l
-1895.75 2820.95 l
-1940.15 2751.35 l
-1786.55 2741.75 l
-1882.55 2686.55 l
-1746.95 2649.35 l
-1882.55 2614.55 l
-1786.55 2558.15 l
-1940.15 2549.75 l
-1895.75 2480.15 l
-2044.55 2499.35 l
-2062.55 2428.55 l
-2182.55 2472.95 l
-2258.15 2409.35 l
-2333.75 2472.95 l
-2453.75 2428.55 l
-2470.55 2499.35 l
-2618.15 2480.15 l
-2576.15 2549.75 l
-2729.75 2558.15 l
-2633.75 2614.55 l
-f*
-1 g
-2708.15 2709.35 m
-2573.75 2746.55 l
-2669.75 2801.75 l
-2516.15 2811.35 l
-2558.15 2880.95 l
-2410.55 2860.55 l
-2393.75 2932.55 l
-2273.75 2886.95 l
-2198.15 2950.55 l
-2122.55 2886.95 l
-2002.55 2932.55 l
-1984.55 2860.55 l
-1835.75 2880.95 l
-1880.15 2811.35 l
-1726.55 2801.75 l
-1822.55 2746.55 l
-1686.95 2709.35 l
-1822.55 2674.55 l
-1726.55 2618.15 l
-1880.15 2609.75 l
-1835.75 2540.15 l
-1984.55 2559.35 l
-2002.55 2488.55 l
-2122.55 2532.95 l
-2198.15 2469.35 l
-2273.75 2532.95 l
-2393.75 2488.55 l
-2410.55 2559.35 l
-2558.15 2540.15 l
-2516.15 2609.75 l
-2669.75 2618.15 l
-2573.75 2674.55 l
-f*
-0 g
-2708.15 2709.35 m
-2573.75 2746.55 l
-2669.75 2801.75 l
-2516.15 2811.35 l
-2558.15 2880.95 l
-2410.55 2860.55 l
-2393.75 2932.55 l
-2273.75 2886.95 l
-2198.15 2950.55 l
-2122.55 2886.95 l
-2002.55 2932.55 l
-1984.55 2860.55 l
-1835.75 2880.95 l
-1880.15 2811.35 l
-1726.55 2801.75 l
-1822.55 2746.55 l
-1686.95 2709.35 l
-1822.55 2674.55 l
-1726.55 2618.15 l
-1880.15 2609.75 l
-1835.75 2540.15 l
-1984.55 2559.35 l
-2002.55 2488.55 l
-2122.55 2532.95 l
-2198.15 2469.35 l
-2273.75 2532.95 l
-2393.75 2488.55 l
-2410.55 2559.35 l
-2558.15 2540.15 l
-2516.15 2609.75 l
-2669.75 2618.15 l
-2573.75 2674.55 l
-2708.15 2709.35 l
-2669.75 2709.35 l
-2547.35 2678.15 l
-2636.15 2626.55 l
-2498.15 2618.15 l
-2538.95 2552.15 l
-2403.35 2571.35 l
-2386.55 2501.75 l
-2271.35 2544.95 l
-2198.15 2482.55 l
-2124.95 2544.95 l
-2009.75 2501.75 l
-1991.75 2571.35 l
-1856.15 2552.15 l
-1896.95 2618.15 l
-1760.15 2626.55 l
-1848.95 2678.15 l
-1726.55 2709.35 l
-1847.75 2741.75 l
-1760.15 2794.55 l
-1896.95 2801.75 l
-1856.15 2868.95 l
-1991.75 2849.75 l
-2009.75 2918.15 l
-2124.95 2876.15 l
-2198.15 2938.55 l
-2271.35 2876.15 l
-2386.55 2918.15 l
-2403.35 2849.75 l
-2538.95 2868.95 l
-2498.15 2801.75 l
-2636.15 2794.55 l
-2547.35 2741.75 l
-2669.75 2709.35 l
-2708.15 2709.35 l
-f*
-0.2 i
-2020.08 2760.76 m
-2000.08 2686.52 l
-1997.52 2677.88 1994.48 2675.64 1984.08 2675 c
-1984.08 2671 l
-2034 2671 l
-2034 2675 l
-2024.72 2675.48 2022.48 2676.76 2022.48 2681.88 c
-2022.48 2683.64 2022.8 2685.4 2023.76 2689.08 c
-2023.92 2689.88 l
-2024.08 2690.68 l
-2043.76 2762.52 l
-2046.16 2770.84 2048.56 2773.08 2056.72 2774.04 c
-2056.72 2778 l
-2022.8 2778 l
-1973.2 2701.24 l
-1964.56 2778 l
-1929.2 2778 l
-1929.2 2774 l
-1939.28 2773.52 1940.72 2772.89 1940.72 2768.44 c
-1940.72 2766.2 1940.08 2763.32 1938.96 2759.16 c
-1921.52 2699.48 l
-1915.12 2678.68 1914 2676.92 1905.36 2675 c
-1905.36 2671 l
-1938.48 2671 l
-1938.48 2675 l
-1928.24 2676.28 1925.68 2678.2 1925.68 2684.76 c
-1925.68 2687.48 1926.48 2691.48 1928.72 2699.48 c
-1944.88 2758.52 l
-1955.6 2669.08 l
-1960.08 2669.08 l
-h
-2052.24 2671 m
-f*
-2121.44 2691.32 m
-2114.88 2682.52 2112.48 2679.76 2109.92 2679.76 c
-2108.64 2679.76 2108 2680.86 2108 2682.52 c
-2108 2686.52 2109.44 2693.08 2113.44 2706.2 c
-2124.8 2743.96 l
-2107.04 2742.84 l
-2104.16 2733.4 l
-2102.72 2741.56 2099.2 2745.08 2092.32 2745.08 c
-2072.64 2745.08 2049 2714.27 2049 2689.24 c
-2049 2677.08 2055.74 2668.92 2065.92 2668.92 c
-2075.68 2668.92 2083.04 2674.68 2092.16 2690.04 c
-2090.24 2683.48 2090 2681.56 2090 2679.32 c
-2090 2673.4 2094.76 2668.76 2100.64 2668.76 c
-2108.16 2668.76 2115.52 2675 2124.8 2688.92 c
-h
-2094.56 2738.2 m
-2098.08 2737.88 2100.56 2735 2100.56 2730.68 c
-2100.56 2721.08 2095.24 2703.32 2088.96 2692.28 c
-2084.64 2684.44 2079.84 2679.92 2075.52 2679.92 c
-2071.36 2679.92 2068 2683.75 2068 2688.92 c
-2068 2697.24 2073.42 2713.24 2080.16 2725.08 c
-2084.96 2733.56 2090.24 2738.52 2094.56 2738.2 c
-h
-2132 2671 m
-f*
-2166.56 2744.92 m
-2150.24 2742.36 2144 2741.4 2135.68 2740.44 c
-2135.68 2736 l
-2142.88 2735.69 2144.32 2735.07 2144.32 2732.12 c
-2144.32 2730.52 2143.04 2724.76 2140.8 2716.44 c
-2124.8 2654.36 l
-2121.76 2643.8 2120.48 2642.84 2112.8 2643 c
-2112.8 2638 l
-2152.64 2638 l
-2152.64 2643 l
-2144.64 2643.14 2142.24 2644.16 2142.24 2647.64 c
-2142.24 2649.88 2143.36 2654.68 2146.4 2665.88 c
-2147.52 2669.72 2147.52 2670.04 2148.16 2672.44 c
-2153.76 2669.56 2155.68 2668.92 2159.04 2668.92 c
-2180.8 2668.92 2203.36 2697.88 2203.36 2725.56 c
-2203.36 2737.4 2196.64 2745.08 2186.08 2745.08 c
-2176.96 2745.08 2169.92 2739.92 2160.48 2726.52 c
-h
-2177.12 2733.56 m
-2181.28 2733.24 2183.68 2729.56 2183.36 2724.44 c
-2182.72 2713.88 2177.6 2698.04 2171.84 2687.64 c
-2166.88 2679 2161.76 2673.92 2156.32 2673.92 c
-2152.8 2673.92 2150.08 2676.75 2150.08 2680.28 c
-2150.08 2683 2151.84 2689.56 2156.16 2704.12 c
-2159.68 2715.8 2161.12 2719.8 2163.52 2723.48 c
-2167.52 2729.72 2172.96 2733.88 2177.12 2733.56 c
-h
-2212 2671 m
-f*
-2247.56 2744.92 m
-2231.24 2742.36 2225 2741.4 2216.68 2740.44 c
-2216.68 2736 l
-2223.88 2735.69 2225.32 2735.07 2225.32 2732.12 c
-2225.32 2730.52 2224.04 2724.76 2221.8 2716.44 c
-2205.8 2654.36 l
-2202.76 2643.8 2201.48 2642.84 2193.8 2643 c
-2193.8 2638 l
-2233.64 2638 l
-2233.64 2643 l
-2225.64 2643.14 2223.24 2644.16 2223.24 2647.64 c
-2223.24 2649.88 2224.36 2654.68 2227.4 2665.88 c
-2228.52 2669.72 2228.52 2670.04 2229.16 2672.44 c
-2234.76 2669.56 2236.68 2668.92 2240.04 2668.92 c
-2261.8 2668.92 2284.36 2697.88 2284.36 2725.56 c
-2284.36 2737.4 2277.64 2745.08 2267.08 2745.08 c
-2257.96 2745.08 2250.92 2739.92 2241.48 2726.52 c
-h
-2258.12 2733.56 m
-2262.28 2733.24 2264.68 2729.56 2264.36 2724.44 c
-2263.72 2713.88 2258.6 2698.04 2252.84 2687.64 c
-2247.88 2679 2242.76 2673.92 2237.32 2673.92 c
-2233.8 2673.92 2231.08 2676.75 2231.08 2680.28 c
-2231.08 2683 2232.84 2689.56 2237.16 2704.12 c
-2240.68 2715.8 2242.12 2719.8 2244.52 2723.48 c
-2248.52 2729.72 2253.96 2733.88 2258.12 2733.56 c
-h
-2293 2671 m
-f*
-2326.56 2693.56 m
-2324.32 2690.36 l
-2320.16 2684.12 2316.48 2680.56 2314.08 2680.56 c
-2312.8 2680.56 2312 2681.77 2312 2683.16 c
-2312 2684.6 2312.62 2688.76 2313.12 2691.48 c
-2327.68 2744.92 l
-2319.22 2743 2308.26 2741.4 2296.04 2740.44 c
-2296.04 2736 l
-2297.44 2736 l
-2302.24 2736 2305.48 2734.44 2305.48 2731.48 c
-2305.48 2730.2 2304.71 2727.8 2303.68 2725.08 c
-2294.4 2690.68 l
-2293.12 2686.04 2293 2681.88 2293 2679.64 c
-2293 2673.56 2297.2 2669.56 2303.36 2669.56 c
-2312.96 2669.56 2318.88 2674.36 2330.08 2691.32 c
-h
-2322.88 2780.4 m
-2317.44 2780.4 2313 2775.46 2313 2770.04 c
-2313 2763.8 2317.26 2759.4 2323.04 2759.4 c
-2329.12 2759.4 2334 2763.86 2334 2769.56 c
-2334 2775.48 2329 2780.4 2322.88 2780.4 c
-h
-2336.48 2671 m
-f*
-2411.36 2692.6 m
-2404.96 2682.68 2402.88 2680.56 2400.16 2680.56 c
-2398.88 2680.56 2398 2681.63 2398 2683.16 c
-2398 2684.76 2398.94 2688.12 2401.92 2697.08 c
-2407.68 2714.52 l
-2410.24 2722.04 2412 2729.08 2412 2732.92 c
-2412 2740.76 2407.78 2745.08 2400.16 2745.08 c
-2394.24 2745.08 2388.48 2742.62 2384.16 2738.36 c
-2378.24 2732.76 2375.2 2728.92 2364.48 2713.08 c
-2374.72 2744.76 l
-2364.48 2742.52 2351.68 2740.92 2342.72 2740.6 c
-2342.72 2735.8 l
-2349.44 2735.65 2351.36 2734.92 2351.36 2732.12 c
-2351.36 2730.2 2349.12 2721.72 2344 2703.64 c
-2340.32 2690.68 2339.2 2686.52 2335.04 2671 c
-2354.4 2671 l
-2361.92 2698.68 2367.68 2712.6 2377.6 2725.56 c
-2380.8 2729.88 2385.76 2733.08 2388.64 2733.08 c
-2390.72 2733.08 2393 2731.63 2393 2730.04 c
-2393 2729.56 2392.54 2728.28 2391.84 2726.68 c
-2383.04 2700.12 l
-2380.48 2692.44 2379 2683.32 2379 2679.16 c
-2379 2673.08 2382.84 2669.56 2389.44 2669.56 c
-2399.04 2669.56 2405.6 2675 2414.88 2690.52 c
-h
-2424.96 2671 m
-f*
-2502.48 2740 m
-2484.72 2740 l
-2479.28 2743.58 2474.48 2745.08 2467.12 2745.08 c
-2447.44 2745.08 2431 2732.05 2431 2715.8 c
-2431 2707.64 2435.35 2701.88 2444.4 2698.2 c
-2431.28 2690.84 2429 2688.6 2429 2682.68 c
-2429 2677.56 2431.89 2674.52 2438.96 2672.12 c
-2429.04 2669.72 2425.84 2668.44 2422 2665.4 c
-2419.44 2663.16 2418 2659.32 2418 2655.48 c
-2418 2645.08 2429.56 2639 2447.76 2639 c
-2470.32 2639 2486 2648.72 2486 2662.52 c
-2486 2672.28 2479.6 2677.56 2462.16 2682.52 c
-2453.68 2684.92 l
-2448.56 2686.36 2445 2688.6 2445 2691 c
-2445 2693.56 2447.68 2696.28 2450 2696.28 c
-2450.8 2696.28 2451.92 2696.24 2453.2 2696.12 c
-2454.96 2695.64 2456.24 2695 2458.16 2695 c
-2465.2 2695 2472.4 2697.09 2478.48 2700.92 c
-2487.76 2706.2 2493 2714.36 2493 2723.96 c
-2493 2726.64 2492.59 2728.32 2491.76 2731 c
-2502.48 2731 l
-h
-2444.4 2670.04 m
-2446.32 2669.88 2458.48 2665.72 2462 2664.12 c
-2466.48 2661.88 2469 2659.16 2469 2655 c
-2469 2647.96 2461.8 2644 2449.36 2644 c
-2438.96 2644 2432 2649.1 2432 2656.44 c
-2432 2659.48 2433.32 2662.2 2436.24 2665.24 c
-2438.32 2667.32 2443.12 2670.2 2444.4 2670.04 c
-h
-2466.8 2740.08 m
-2470.96 2740.08 2474 2736.19 2474 2730.52 c
-2474 2725.08 2472.08 2717.4 2469.36 2711.48 c
-2466 2704.12 2461.84 2700 2456.88 2700 c
-2452.56 2700 2450 2703.52 2450 2709.88 c
-2450 2716.28 2452.79 2726.04 2456.24 2732.12 c
-2459.28 2737.4 2462.64 2740.08 2466.8 2740.08 c
-h
-2506 2671 m
-f*
-1 i
-1 g
-4282.55 3248.15 m
-4448.15 3401.75 l
-4366.55 3401.75 l
-4366.55 3552.95 l
-4199.75 3552.95 l
-4199.75 3401.75 l
-4118.15 3401.75 l
-f*
-0 g
-4282.55 3248.15 m
-4448.15 3401.75 l
-4366.55 3401.75 l
-4366.55 3552.95 l
-4199.75 3552.95 l
-4199.75 3401.75 l
-4118.15 3401.75 l
-4282.55 3248.15 l
-4282.55 3262.55 l
-4143.35 3392.15 l
-4209.35 3392.15 l
-4209.35 3543.35 l
-4355.75 3543.35 l
-4355.75 3392.15 l
-4424.15 3392.15 l
-4282.55 3262.55 l
-4282.55 3248.15 l
-f*
-0.2 i
-3770.88 3786.52 m
-3735.78 3786.52 3711 3761.21 3711 3725.12 c
-3711 3688.04 3734.99 3662.48 3769.98 3662.48 c
-3804.54 3662.48 3829 3688.04 3829 3724.58 c
-3829 3740.96 3823.9 3755.9 3814.98 3766.34 c
-3804.18 3779.12 3787.8 3786.52 3770.88 3786.52 c
-h
-3769.44 3779.52 m
-3777.9 3779.52 3785.46 3777.05 3791.94 3772.1 c
-3802.2 3763.46 3808 3746.18 3808 3725.66 c
-3808 3704.06 3803.25 3688.4 3793.56 3678.5 c
-3787.44 3672.38 3779.16 3669.48 3770.16 3669.48 c
-3761.88 3669.48 3754.14 3672.01 3747.84 3677.06 c
-3737.76 3685.34 3732 3703.34 3732 3724.76 c
-3732 3741.86 3736.54 3758.96 3743.34 3767.6 c
-3750 3775.52 3759.72 3779.52 3769.44 3779.52 c
-h
-3834.96 3665 m
-f*
-3838.42 3777.14 m
-3839.5 3777.14 l
-3841.48 3777.32 3843.64 3777.5 3845.08 3777.5 c
-3850.84 3777.5 3853 3774.98 3853 3766.52 c
-3853 3680.66 l
-3853 3670.94 3850.41 3668.6 3838.78 3667.7 c
-3838.78 3665 l
-3881.26 3665 l
-3881.26 3668 l
-3869.74 3668.7 3868 3670.46 3868 3680.12 c
-3868 3787.58 l
-3867.04 3787.94 l
-3857.68 3784.88 3850.84 3783.08 3838.42 3780.02 c
-h
-3885.04 3665 m
-f*
-3946.92 3663.2 m
-3973.38 3672.56 l
-3973.38 3676 l
-3970.32 3675.26 3970.14 3675.82 3969.24 3675.82 c
-3962.76 3675.82 3961 3677.69 3961 3685.52 c
-3961 3787.58 l
-3960.42 3787.94 l
-3951.78 3784.88 3945.48 3783.08 3933.96 3780.02 c
-3933.96 3777.14 l
-3935.4 3777.32 3936.48 3777.32 3937.92 3777.32 c
-3944.58 3777.32 3946 3775.52 3946 3768.14 c
-3946 3740.06 l
-3939.23 3745.82 3934.42 3747.8 3927.3 3747.8 c
-3906.6 3747.8 3890 3727.46 3890 3701.9 c
-3890 3678.86 3903.26 3663.2 3923.16 3663.2 c
-3933.15 3663.2 3939.93 3666.8 3946 3675.26 c
-3946 3663.74 l
-h
-3946 3683.36 m
-3946 3682.1 3945 3680.12 3943.5 3678.32 c
-3940.26 3674.54 3935.76 3672.2 3930.18 3672.2 c
-3915.06 3672.2 3905 3686.74 3905 3709.1 c
-3905 3729.44 3913.95 3742.8 3927.84 3742.8 c
-3937.56 3742.8 3946 3734.32 3946 3724.76 c
-h
-3975 3665 m
-f*
-4020 3665 m
-f*
-4023.06 3784 m
-4023.06 3781 l
-4038.18 3780.09 4040 3778.07 4040 3764.54 c
-4040 3684.62 l
-4040 3671.3 4037.71 3668.96 4023.06 3668.42 c
-4023.06 3665 l
-4083.18 3665 l
-4110 3665 4127 3677.42 4127 3697.4 c
-4127 3705.32 4123.85 3712.52 4117.92 3717.74 c
-4112.52 3722.6 4107.66 3724.94 4095.96 3727.64 c
-4105.32 3729.98 4109.1 3731.78 4113.42 3735.56 c
-4117.92 3739.52 4121 3746.18 4121 3753.56 c
-4121 3773.72 4104.85 3784 4073.46 3784 c
-h
-4059 3723.68 m
-4075.94 3723.68 4083.78 3722.78 4090.56 3720.26 c
-4101 3716.12 4106 3708.74 4106 3697.22 c
-4106 3687.5 4102.23 3680.48 4095.06 3676.34 c
-4089.3 3672.92 4082.1 3672 4069.5 3672 c
-4061.22 3672 4059 3673.55 4059 3679.04 c
-h
-4059 3730.88 m
-4059 3772.1 l
-4059 3775.88 4060.16 3777 4062.66 3777 c
-4070.58 3777 l
-4091.28 3777 4102 3768.71 4102 3752.84 c
-4102 3738.8 4092.55 3730.88 4075.8 3730.88 c
-h
-4140.06 3665 m
-f*
-4219.56 3676.88 m
-4216.5 3674.36 4214.34 3673.2 4211.64 3673.2 c
-4207.5 3673.2 4206 3675.78 4206 3683.9 c
-4206 3719 l
-4206 3728.18 4205.16 3733.22 4202.82 3737.36 c
-4199.04 3744.2 4191.3 3747.8 4180.32 3747.8 c
-4171.14 3747.8 4162.5 3745.28 4157.46 3741.14 c
-4152.96 3737.36 4150 3732.14 4150 3727.64 c
-4150 3723.5 4153.46 3719.9 4157.82 3719.9 c
-4162.14 3719.9 4165.92 3723.5 4165.92 3727.46 c
-4165.92 3728.18 4165.74 3729.08 4165.56 3730.34 c
-4165.2 3731.96 4165 3733.4 4165 3734.66 c
-4165 3739.52 4170.77 3743.8 4177.98 3743.8 c
-4186.8 3743.8 4191 3738.47 4191 3728.54 c
-4191 3717.56 l
-4163.76 3706.4 4160.75 3704.96 4153.14 3698.12 c
-4149.18 3694.52 4146.66 3688.4 4146.66 3682.46 c
-4146.66 3671.12 4154.4 3663.2 4165.56 3663.2 c
-4173.48 3663.2 4180.86 3666.98 4191.84 3676.34 c
-4192.74 3666.8 4195.98 3663.2 4203.36 3663.2 c
-4209.48 3663.2 4213.26 3665.36 4219.56 3672.2 c
-h
-4191 3687.14 m
-4191 3681.56 4190.23 3679.94 4186.98 3677.6 c
-4182.66 3675.08 4177.62 3673.2 4173.84 3673.2 c
-4167.54 3673.2 4162.48 3679.51 4162.48 3687.5 c
-4162.48 3688.22 l
-4162.48 3698.84 4169.7 3705.32 4191 3713.24 c
-h
-4219.92 3665 m
-f*
-4277.06 3721.52 m
-4276.34 3746 l
-4274 3746 l
-4273.64 3745.64 l
-4272.02 3744.38 4271.84 3744.2 4271.12 3744.2 c
-4270.04 3744.2 4268.24 3744.56 4266.26 3745.46 c
-4262.48 3746.9 4258.34 3747.62 4254.02 3747.62 c
-4239.26 3747.62 4229 3738.62 4229 3725.48 c
-4229 3715.4 4234.81 3708.38 4250.24 3699.56 c
-4260.68 3693.62 l
-4266.98 3690.02 4270 3685.7 4270 3680.12 c
-4270 3672.2 4264.26 3667.2 4255.1 3667.2 c
-4242.68 3667.2 4236.38 3674.03 4232.24 3692.36 c
-4229.18 3692.36 l
-4229.18 3664.28 l
-4231.7 3664.28 l
-4232.96 3666.08 4233.68 3666.44 4235.84 3666.44 c
-4237.82 3666.44 4239.8 3666.08 4244.12 3665 c
-4249.16 3663.92 4253.66 3663.2 4257.44 3663.2 c
-4271.12 3663.2 4283 3673.64 4283 3686.24 c
-4283 3695.24 4278.76 3701.18 4267.52 3707.66 c
-4248.08 3719.18 l
-4243.04 3722.06 4240 3726.56 4240 3731.42 c
-4240 3738.8 4245.72 3743.62 4254.2 3743.62 c
-4264.46 3743.62 4269.86 3737.69 4274 3721.52 c
-h
-4290.02 3665 m
-f*
-4363.44 3694.52 m
-4354.8 3680.84 4347.06 3675.2 4335.54 3675.2 c
-4325.64 3675.2 4318.08 3680.02 4312.86 3690.02 c
-4309.26 3697.08 4307.82 3703.42 4307.46 3715 c
-4362.9 3715 l
-4361.46 3726.63 4359.66 3731.82 4355.16 3737.54 c
-4349.76 3744.02 4341.48 3747.8 4332.12 3747.8 c
-4309.8 3747.8 4294.5 3729.8 4294.5 3703.52 c
-4294.5 3678.68 4307.46 3663.2 4328.16 3663.2 c
-4345.44 3663.2 4358.76 3673.82 4366.32 3693.26 c
-h
-4307.82 3720 m
-4309.8 3734.66 4315.92 3740.8 4326.9 3740.8 c
-4337.88 3740.8 4342.2 3735.74 4344.54 3720 c
-h
-4369.92 3665 m
-f*
-4415 3665 m
-f*
-4501.22 3706.58 m
-4501.22 3748.34 l
-4497.08 3748.34 l
-4494.92 3733.94 4491.68 3731 4477.28 3731 c
-4452 3731 l
-4452 3771.2 l
-4452 3776.24 4452.77 3777 4456.94 3777 c
-4481.42 3777 l
-4501.76 3777 4505.72 3774.35 4508.78 3758.42 c
-4513.28 3758.42 l
-4512.74 3784 l
-4417.16 3784 l
-4417.16 3780.74 l
-4430.48 3779.66 4433 3777.32 4433 3764.54 c
-4433 3686.6 l
-4433 3671.66 4431 3669.32 4417.16 3668.42 c
-4417.16 3665 l
-4467.56 3665 l
-4467.56 3668 l
-4453.7 3668.74 4452 3671.32 4452 3684.62 c
-4452 3724 l
-4477.28 3724 l
-4491.86 3724 4494.92 3721.28 4497.08 3706.58 c
-h
-4515.08 3665 m
-f*
-4516.26 3735.2 m
-4518.78 3735.74 4520.4 3735.92 4522.56 3735.92 c
-4527.06 3735.92 4529 3733.04 4529 3725.12 c
-4529 3680.12 l
-4529 3671.12 4527.71 3669.86 4515.9 3667.7 c
-4515.9 3665 l
-4559.1 3665 l
-4559.1 3668 l
-4546.86 3668.53 4544 3671.17 4544 3681.2 c
-4544 3721.7 l
-4544 3727.46 4551.44 3736.46 4556.4 3736.46 c
-4557.48 3736.46 4559.1 3735.56 4561.08 3733.76 c
-4563.96 3731.06 4565.94 3730.16 4568.28 3730.16 c
-4572.6 3730.16 4575.3 3733.22 4575.3 3738.26 c
-4575.3 3744.2 4571.52 3747.8 4565.4 3747.8 c
-4557.91 3747.8 4552.92 3743.84 4544 3730.88 c
-4544 3747.44 l
-4542.9 3747.8 l
-4533.36 3744.02 4526.88 3741.5 4516.26 3738.08 c
-h
-4574.94 3665 m
-f*
-4654.56 3676.88 m
-4651.5 3674.36 4649.34 3673.2 4646.64 3673.2 c
-4642.5 3673.2 4641 3675.78 4641 3683.9 c
-4641 3719 l
-4641 3728.18 4640.16 3733.22 4637.82 3737.36 c
-4634.04 3744.2 4626.3 3747.8 4615.32 3747.8 c
-4606.14 3747.8 4597.5 3745.28 4592.46 3741.14 c
-4587.96 3737.36 4585 3732.14 4585 3727.64 c
-4585 3723.5 4588.46 3719.9 4592.82 3719.9 c
-4597.14 3719.9 4600.92 3723.5 4600.92 3727.46 c
-4600.92 3728.18 4600.74 3729.08 4600.56 3730.34 c
-4600.2 3731.96 4600 3733.4 4600 3734.66 c
-4600 3739.52 4605.77 3743.8 4612.98 3743.8 c
-4621.8 3743.8 4626 3738.47 4626 3728.54 c
-4626 3717.56 l
-4598.76 3706.4 4595.75 3704.96 4588.14 3698.12 c
-4584.18 3694.52 4581.66 3688.4 4581.66 3682.46 c
-4581.66 3671.12 4589.4 3663.2 4600.56 3663.2 c
-4608.48 3663.2 4615.86 3666.98 4626.84 3676.34 c
-4627.74 3666.8 4630.98 3663.2 4638.36 3663.2 c
-4644.48 3663.2 4648.26 3665.36 4654.56 3672.2 c
-h
-4626 3687.14 m
-4626 3681.56 4625.23 3679.94 4621.98 3677.6 c
-4617.66 3675.08 4612.62 3673.2 4608.84 3673.2 c
-4602.54 3673.2 4597.48 3679.51 4597.48 3687.5 c
-4597.48 3688.22 l
-4597.48 3698.84 4604.7 3705.32 4626 3713.24 c
-h
-4654.92 3665 m
-f*
-4658.14 3736.64 m
-4660.48 3737.18 4661.92 3737.36 4663.9 3737.36 c
-4668.58 3737.36 4670 3734.48 4670 3725.84 c
-4670 3680.3 l
-4670 3670.58 4667.52 3667.88 4657.6 3667.7 c
-4657.6 3665 l
-4697.56 3665 l
-4697.56 3668 l
-4688.02 3668.35 4685 3670.27 4685 3677.06 c
-4685 3727.82 l
-4685 3728.18 4686.23 3729.44 4687.66 3730.88 c
-4691.98 3735.2 4700.08 3738.8 4706.74 3738.8 c
-4714.48 3738.8 4719 3732.2 4719 3719.54 c
-4719 3680.48 l
-4719 3670.4 4716.93 3668.42 4706.2 3667.7 c
-4706.2 3665 l
-4746.52 3665 l
-4746.52 3668 l
-4736.26 3668.18 4734 3671.17 4734 3682.1 c
-4734 3727.46 l
-4739.28 3735.2 4744.91 3738.8 4753.18 3738.8 c
-4763.44 3738.8 4767 3733.85 4767 3718.64 c
-4767 3680.66 l
-4767 3670.4 4765.52 3668.96 4754.8 3667.7 c
-4754.8 3665 l
-4794.22 3665 l
-4794.22 3667.7 l
-4789.54 3668.06 l
-4784.14 3668.42 4782 3671.66 4782 3678.68 c
-4782 3715.76 l
-4782 3737 4774.91 3747.8 4760.92 3747.8 c
-4750.48 3747.8 4741.3 3743.12 4731.58 3732.68 c
-4728.34 3742.94 4722.22 3747.8 4712.5 3747.8 c
-4704.31 3747.8 4699.57 3745.46 4684.28 3733.94 c
-4684.28 3747.44 l
-4683.34 3747.8 l
-4674.16 3744.38 4668.04 3742.4 4658.14 3739.7 c
-h
-4795.04 3665 m
-f*
-4868.44 3694.52 m
-4859.8 3680.84 4852.06 3675.2 4840.54 3675.2 c
-4830.64 3675.2 4823.08 3680.02 4817.86 3690.02 c
-4814.26 3697.08 4812.82 3703.42 4812.46 3715 c
-4867.9 3715 l
-4866.46 3726.63 4864.66 3731.82 4860.16 3737.54 c
-4854.76 3744.02 4846.48 3747.8 4837.12 3747.8 c
-4814.8 3747.8 4799.5 3729.8 4799.5 3703.52 c
-4799.5 3678.68 4812.46 3663.2 4833.16 3663.2 c
-4850.44 3663.2 4863.76 3673.82 4871.32 3693.26 c
-h
-4812.82 3720 m
-4814.8 3734.66 4820.92 3740.8 4831.9 3740.8 c
-4842.88 3740.8 4847.2 3735.74 4849.54 3720 c
-h
-4874.92 3665 m
-f*
-2884.26 1356.36 m
-2873.64 1345.2 2867.88 1340.88 2859.06 1337.46 c
-2853.84 1335.3 2847.9 1334.58 2842.86 1334.58 c
-2830.98 1334.58 2819.64 1340.74 2814.42 1349.88 c
-2809.2 1359.42 2807 1372.2 2807 1390.38 c
-2807 1427.64 2818.23 1447.7 2839.8 1447.7 c
-2848.26 1447.7 2856 1444.38 2863.74 1437.36 c
-2871.48 1430.52 2875.62 1424.4 2881.92 1410.72 c
-2886.42 1410.72 l
-2886.42 1453.16 l
-2881.56 1453.16 l
-2878.86 1446.43 2877.06 1444.56 2873.64 1444.56 c
-2871.84 1444.56 2869.5 1445.28 2865.36 1447.08 c
-2854.92 1451.4 2846.1 1453.7 2837.46 1453.7 c
-2801.64 1453.7 2775 1425.84 2775 1388.76 c
-2775 1351.68 2801.21 1325.58 2838.54 1325.58 c
-2859.24 1325.58 2871.48 1331.88 2889.66 1351.86 c
-h
-2895.96 1329 m
-f*
-2959.18 1326.66 m
-2966.78 1329.36 2971.02 1330.08 2982.5 1331.34 c
-2993.66 1332.6 l
-2993.66 1337 l
-2985.74 1337.35 2984 1339.63 2984 1347.18 c
-2984 1412 l
-2947.4 1412 l
-2947.4 1407.66 l
-2956.4 1406.94 2959 1404.78 2959 1397.04 c
-2959 1346.1 l
-2952.88 1340.16 2949.18 1338.48 2943.8 1338.48 c
-2936.42 1338.48 2934 1342 2934 1350.96 c
-2934 1412 l
-2899.88 1412 l
-2899.88 1407.66 l
-2907.26 1406.22 2909 1404.6 2909 1397.04 c
-2909 1351.68 l
-2909 1335.84 2917.89 1326.48 2932.64 1326.48 c
-2942.16 1326.48 2948.56 1329.36 2959.18 1338.36 c
-h
-2997.08 1329 m
-f*
-3035.28 1412 m
-3001.22 1412 l
-3001.22 1407.66 l
-3008.96 1406.58 3011 1404.24 3011 1397.04 c
-3011 1344.12 l
-3011 1336.74 3009.19 1334.76 3001.22 1333.32 c
-3001.22 1329 l
-3049.1 1329 l
-3049.1 1333.32 l
-3038.12 1334.04 3036 1336.38 3036 1347.54 c
-3036 1381.56 l
-3036 1390.92 3041.02 1398.66 3046.94 1398.66 c
-3048.38 1398.66 3050 1397.4 3051.98 1394.52 c
-3055.4 1389.66 3058.1 1388.04 3062.78 1388.04 c
-3069.44 1388.04 3074.12 1393.08 3074.12 1399.92 c
-3074.12 1408.2 3068 1414.16 3059.54 1414.16 c
-3050.55 1414.16 3043.73 1409.47 3035.28 1397.22 c
-h
-3075.92 1329 m
-f*
-3116.28 1412 m
-3082.22 1412 l
-3082.22 1407.66 l
-3089.96 1406.58 3092 1404.24 3092 1397.04 c
-3092 1344.12 l
-3092 1336.74 3090.19 1334.76 3082.22 1333.32 c
-3082.22 1329 l
-3130.1 1329 l
-3130.1 1333.32 l
-3119.12 1334.04 3117 1336.38 3117 1347.54 c
-3117 1381.56 l
-3117 1390.92 3122.02 1398.66 3127.94 1398.66 c
-3129.38 1398.66 3131 1397.4 3132.98 1394.52 c
-3136.4 1389.66 3139.1 1388.04 3143.78 1388.04 c
-3150.44 1388.04 3155.12 1393.08 3155.12 1399.92 c
-3155.12 1408.2 3149 1414.16 3140.54 1414.16 c
-3131.55 1414.16 3124.73 1409.47 3116.28 1397.22 c
-h
-3156.92 1329 m
-f*
-3228.36 1351.5 m
-3220.98 1342.68 3215.58 1339.48 3207.84 1339.48 c
-3201 1339.48 3195.6 1342.53 3192 1348.62 c
-3188.58 1354.36 3187.14 1360.45 3186.42 1373 c
-3231.78 1373 l
-3230.7 1387.99 3228 1396.3 3222.42 1403.34 c
-3216.66 1410.36 3208.2 1414.16 3198.12 1414.16 c
-3175.62 1414.16 3160.5 1396.33 3160.5 1370.04 c
-3160.5 1343.76 3175.26 1326.48 3197.58 1326.48 c
-3212.16 1326.48 3220.98 1332.06 3232.68 1348.98 c
-h
-3185.52 1380 m
-3186.06 1401.42 3189.3 1408.16 3198.12 1408.16 c
-3203.34 1408.16 3206.58 1405.42 3208.02 1400.1 c
-3208.92 1396.68 3209.28 1391.64 3209.64 1382.46 c
-3209.64 1380 l
-h
-3235.92 1329 m
-f*
-3273.82 1412 m
-3239.78 1412 l
-3239.78 1407.66 l
-3247.7 1406.4 3249 1404.6 3249 1397.04 c
-3249 1344.12 l
-3249 1336.56 3247.61 1334.94 3239.78 1333.32 c
-3239.78 1329 l
-3283.16 1329 l
-3283.16 1333.32 l
-3276.5 1334.22 3274 1336.92 3274 1343.58 c
-3274 1391.64 l
-3274 1392.36 3275.4 1394.16 3277.4 1395.96 c
-3281.36 1399.92 3285.68 1402.16 3290 1402.16 c
-3296.12 1402.16 3299 1397.27 3299 1387.14 c
-3299 1343.58 l
-3299 1336.92 3296.71 1334.04 3290.72 1333.32 c
-3290.72 1329 l
-3333.02 1329 l
-3333.02 1333.32 l
-3326 1333.86 3324 1336.02 3324 1343.58 c
-3324 1388.76 l
-3324 1404.24 3314.54 1414.16 3299.9 1414.16 c
-3288.96 1414.16 3280.57 1409.11 3273.82 1398.48 c
-h
-3336.08 1329 m
-f*
-3390.9 1412 m
-3374 1412 l
-3374 1442.4 l
-3369.48 1442.4 l
-3358.5 1426.92 3351.3 1418.82 3339.6 1408.92 c
-3339.6 1404 l
-3349 1404 l
-3349 1345.74 l
-3349 1334.04 3356.73 1326.84 3369.12 1326.84 c
-3381.18 1326.84 3388.38 1332.24 3395.76 1347 c
-3391.26 1348.98 l
-3387.66 1342.14 3384.78 1339.84 3381 1339.84 c
-3375.96 1339.84 3374 1342.83 3374 1349.88 c
-3374 1404 l
-3390.9 1404 l
-h
-3395.94 1329 m
-f*
-3441 1329 m
-f*
-3545.94 1451 m
-3443.88 1451 l
-3443.88 1446 l
-3456.3 1445.29 3460 1442.63 3460 1433.4 c
-3460 1346.28 l
-3460 1336.92 3457.44 1334.94 3443.88 1333.5 c
-3443.88 1329 l
-3508.68 1329 l
-3508.68 1334 l
-3492.12 1334.69 3489 1336.77 3489 1346.28 c
-3489 1388.22 l
-3507.28 1387.86 3513.91 1381.2 3516.42 1360.32 c
-3520.92 1360.32 l
-3520.92 1421.16 l
-3516.42 1421.16 l
-3513.19 1400.64 3506.92 1394.34 3489 1394.34 c
-3489 1436.1 l
-3489 1442.76 3491.32 1445 3500.4 1445 c
-3517.14 1445 3527.58 1441.8 3533.16 1435.2 c
-3537.12 1430.7 3539.1 1425.84 3541.62 1414.5 c
-3545.94 1414.5 l
-h
-3550.98 1329 m
-f*
-3590.28 1412 m
-3556.22 1412 l
-3556.22 1407.66 l
-3563.96 1406.58 3566 1404.24 3566 1397.04 c
-3566 1344.12 l
-3566 1336.74 3564.19 1334.76 3556.22 1333.32 c
-3556.22 1329 l
-3604.1 1329 l
-3604.1 1333.32 l
-3593.12 1334.04 3591 1336.38 3591 1347.54 c
-3591 1381.56 l
-3591 1390.92 3596.02 1398.66 3601.94 1398.66 c
-3603.38 1398.66 3605 1397.4 3606.98 1394.52 c
-3610.4 1389.66 3613.1 1388.04 3617.78 1388.04 c
-3624.44 1388.04 3629.12 1393.08 3629.12 1399.92 c
-3629.12 1408.2 3623 1414.16 3614.54 1414.16 c
-3605.55 1414.16 3598.73 1409.47 3590.28 1397.22 c
-h
-3630.92 1329 m
-f*
-3716.14 1340.52 m
-3714.34 1338.72 l
-3713.8 1338.18 3713.26 1338 3712.36 1338 c
-3709.84 1338 3709 1339.44 3709 1342.5 c
-3709 1389.48 l
-3709 1404.78 3695.16 1414.16 3672.94 1414.16 c
-3652.6 1414.16 3638.92 1404.97 3638.92 1391.46 c
-3638.92 1383.9 3643.24 1379.58 3650.62 1379.58 c
-3657.82 1379.58 3662.86 1383.9 3662.86 1390.02 c
-3662.86 1392.54 3661.96 1394.88 3659.62 1397.76 c
-3658 1399.56 3657.46 1400.64 3657.46 1401.72 c
-3657.46 1405.5 3662.32 1408.16 3668.8 1408.16 c
-3679.42 1408.16 3684 1403.37 3684 1392.54 c
-3684 1379.4 l
-3662.89 1372.92 3654.41 1369.68 3647.56 1365.18 c
-3639.46 1359.78 3636 1353.48 3636 1345.56 c
-3636 1334.58 3644.07 1326.48 3655.3 1326.48 c
-3665.74 1326.48 3674.02 1330.08 3683.92 1339.08 c
-3685.9 1329.9 3689.86 1326.48 3698.68 1326.48 c
-3706.42 1326.48 3712 1329.36 3718.84 1336.74 c
-h
-3684 1347 m
-3679.04 1341.42 3675.37 1339.26 3670.96 1339.26 c
-3665.56 1339.26 3662 1344.12 3662 1351.32 c
-3662 1361.76 3669.57 1369.14 3684 1373.1 c
-h
-3721 1329 m
-f*
-3758.46 1412 m
-3723.73 1412 l
-3723.73 1407.66 l
-3731.65 1406.58 3734 1404.42 3734 1397.04 c
-3734 1344.12 l
-3734 1336.74 3731.95 1334.76 3723.73 1333.32 c
-3723.73 1329 l
-3766.93 1329 l
-3766.93 1333.32 l
-3760.63 1334.22 3759 1336.74 3759 1343.58 c
-3759 1391.64 l
-3759 1392.54 3761.51 1395.78 3763.51 1397.76 c
-3767.29 1400.64 3770.53 1402.16 3773.77 1402.16 c
-3780.79 1402.16 3784 1398 3784 1387.14 c
-3784 1343.58 l
-3784 1336.2 3781.9 1333.86 3774.85 1333.32 c
-3774.85 1329 l
-3816.97 1329 l
-3816.97 1333.32 l
-3810.67 1334.04 3809 1336.74 3809 1343.58 c
-3809 1391.64 l
-3809 1392.54 3811.43 1395.6 3813.37 1397.58 c
-3817.33 1400.64 3820.57 1402.16 3823.81 1402.16 c
-3830.65 1402.16 3833 1397.82 3833 1387.14 c
-3833 1343.58 l
-3833 1336.02 3831.1 1333.86 3824.53 1333.32 c
-3824.53 1329 l
-3867.37 1329 l
-3867.37 1333 l
-3860.35 1333.37 3858 1335.6 3858 1343.58 c
-3858 1388.76 l
-3858 1404.24 3848.6 1414.16 3834.07 1414.16 c
-3823.81 1414.16 3816.97 1410.01 3807.61 1398.48 c
-3802.21 1409.82 3795.91 1414.16 3784.57 1414.16 c
-3773.2 1414.16 3765.21 1409.29 3758.46 1398.48 c
-h
-3870.94 1329 m
-f*
-3943.36 1351.5 m
-3935.98 1342.68 3930.58 1339.48 3922.84 1339.48 c
-3916 1339.48 3910.6 1342.53 3907 1348.62 c
-3903.58 1354.36 3902.14 1360.45 3901.42 1373 c
-3946.78 1373 l
-3945.7 1387.99 3943 1396.3 3937.42 1403.34 c
-3931.66 1410.36 3923.2 1414.16 3913.12 1414.16 c
-3890.62 1414.16 3875.5 1396.33 3875.5 1370.04 c
-3875.5 1343.76 3890.26 1326.48 3912.58 1326.48 c
-3927.16 1326.48 3935.98 1332.06 3947.68 1348.98 c
-h
-3900.52 1380 m
-3901.06 1401.42 3904.3 1408.16 3913.12 1408.16 c
-3918.34 1408.16 3921.58 1405.42 3923.02 1400.1 c
-3923.92 1396.68 3924.28 1391.64 3924.64 1382.46 c
-3924.64 1380 l
-h
-3950.92 1329 m
-f*
-1 i
-2765.75 1294.55 1184.4 15.5999 re
-f
-1 g
-3371.75 1520.15 m
-3538.55 1673.75 l
-3455.75 1673.75 l
-3455.75 1824.95 l
-3290.15 1824.95 l
-3290.15 1673.75 l
-3208.55 1673.75 l
-f*
-0 g
-3371.75 1520.15 m
-3538.55 1673.75 l
-3455.75 1673.75 l
-3455.75 1824.95 l
-3290.15 1824.95 l
-3290.15 1673.75 l
-3208.55 1673.75 l
-3371.75 1520.15 l
-3371.75 1533.35 l
-3233.75 1662.95 l
-3299.75 1662.95 l
-3299.75 1814.15 l
-3446.15 1814.15 l
-3446.15 1662.95 l
-3513.35 1662.95 l
-3371.75 1533.35 l
-3371.75 1520.15 l
-f*
-0.201248 i
-1610.33 1522 m
-1496.22 1522 l
-1496.22 1517 l
-1510.11 1516.2 1514 1513.18 1514 1502.72 c
-1514 1405.32 l
-1514 1394.85 1511.17 1392.64 1496.22 1391.03 c
-1496.22 1386 l
-1568.67 1386 l
-1568.67 1391 l
-1550.15 1391.81 1547 1394.23 1547 1405.32 c
-1547 1452.21 l
-1567.22 1451.81 1574.55 1444.36 1577.32 1421.02 c
-1582.35 1421.02 l
-1582.35 1489.04 l
-1577.32 1489.04 l
-1573.76 1466.1 1566.82 1459.05 1547 1459.05 c
-1547 1505.74 l
-1547 1513.19 1549.52 1515 1559.41 1515 c
-1578.13 1515 1589.8 1511.64 1596.04 1504.74 c
-1600.47 1499.71 1602.68 1494.27 1605.5 1481.59 c
-1610.33 1481.59 l
-h
-1615.96 1386 m
-f*
-1659.19 1479 m
-1620.84 1479 l
-1620.84 1473.95 l
-1629.49 1472.74 1632 1470.12 1632 1462.07 c
-1632 1402.9 l
-1632 1394.65 1629.93 1392.44 1620.84 1390.83 c
-1620.84 1386 l
-1674.37 1386 l
-1674.37 1390.83 l
-1662.09 1391.63 1660 1394.25 1660 1406.73 c
-1660 1444.76 l
-1660 1455.23 1665.49 1463.88 1671.95 1463.88 c
-1673.56 1463.88 1675.37 1462.47 1677.59 1459.25 c
-1681.41 1453.82 1684.43 1452.01 1689.66 1452.01 c
-1697.11 1452.01 1702.34 1457.64 1702.34 1465.29 c
-1702.34 1474.55 1695.5 1481.41 1686.04 1481.41 c
-1676.1 1481.41 1668.54 1476.12 1659.19 1462.27 c
-h
-1704.35 1386 m
-f*
-1799.19 1398.88 m
-1797.18 1396.87 l
-1796.57 1396.26 1795.97 1396.06 1794.96 1396.06 c
-1792.15 1396.06 1791 1397.67 1791 1401.09 c
-1791 1453.62 l
-1791 1470.73 1775.6 1481.42 1750.89 1481.42 c
-1728.15 1481.42 1712.85 1471.06 1712.85 1455.83 c
-1712.85 1447.38 1717.69 1442.55 1725.94 1442.55 c
-1733.99 1442.55 1739.62 1447.38 1739.62 1454.22 c
-1739.62 1457.04 1738.61 1459.66 1736 1462.88 c
-1734.19 1464.89 1733.58 1466.1 1733.58 1467.3 c
-1733.58 1471.53 1739.02 1474.42 1746.26 1474.42 c
-1758.14 1474.42 1763.86 1469.08 1763.86 1457.04 c
-1763.86 1442.35 l
-1739.91 1435.1 1730.29 1431.48 1722.51 1426.45 c
-1713.46 1420.41 1709 1413.37 1709 1404.52 c
-1709 1392.24 1718.27 1383.18 1731.17 1383.18 c
-1742.84 1383.18 1752.1 1387.21 1763.17 1397.27 c
-1765.38 1387.01 1769.81 1383.18 1779.67 1383.18 c
-1788.32 1383.18 1794.56 1386.4 1802.21 1394.65 c
-h
-1763 1406.13 m
-1757.55 1399.89 1753.52 1397.47 1748.68 1397.47 c
-1742.64 1397.47 1738 1402.91 1738 1410.96 c
-1738 1422.63 1746.61 1430.88 1763 1435.31 c
-h
-1804.62 1386 m
-f*
-1845.4 1479 m
-1806.7 1479 l
-1806.7 1473.95 l
-1815.55 1472.74 1818 1470.32 1818 1462.07 c
-1818 1402.9 l
-1818 1394.65 1815.74 1392.44 1806.7 1390.83 c
-1806.7 1386 l
-1855 1386 l
-1855 1390.83 l
-1847.95 1391.84 1846 1394.65 1846 1402.3 c
-1846 1456.03 l
-1846 1457.04 1848.87 1460.66 1851.18 1462.88 c
-1855.4 1466.1 1859.02 1468.42 1862.65 1468.42 c
-1870.5 1468.42 1874 1463.59 1874 1451 c
-1874 1402.3 l
-1874 1394.05 1871.68 1391.43 1863.85 1390.83 c
-1863.85 1386 l
-1910.95 1386 l
-1910.95 1390.83 l
-1903.9 1391.64 1902 1394.65 1902 1402.3 c
-1902 1456.03 l
-1902 1457.04 1904.73 1460.46 1906.92 1462.68 c
-1911.35 1466.1 1914.97 1468.42 1918.59 1468.42 c
-1926.24 1468.42 1929 1463.38 1929 1451 c
-1929 1402.3 l
-1929 1393.85 1926.85 1391.43 1919.4 1390.83 c
-1919.4 1386 l
-1967.3 1386 l
-1967.3 1391 l
-1959.45 1391.4 1957 1393.78 1957 1402.3 c
-1957 1452.81 l
-1957 1470.12 1946.43 1481.42 1930.07 1481.42 c
-1918.59 1481.42 1910.95 1476.73 1900.48 1463.68 c
-1894.44 1476.36 1887.4 1481.42 1874.72 1481.42 c
-1861.95 1481.42 1852.98 1475.91 1845.4 1463.68 c
-h
-1970.64 1386 m
-f*
-2050.9 1411.16 m
-2042.65 1401.29 2036.61 1397.18 2027.96 1397.18 c
-2020.31 1397.18 2014.27 1400.77 2010.25 1407.94 c
-2006.43 1414.54 2004.82 1421.56 2004.01 1436 c
-2054.73 1436 l
-2053.52 1452.36 2050.5 1461.43 2044.26 1469.12 c
-2037.82 1476.96 2028.36 1481.42 2017.09 1481.42 c
-1991.94 1481.42 1975.03 1461.4 1975.03 1431.88 c
-1975.03 1402.5 1991.53 1383.18 2016.49 1383.18 c
-2032.79 1383.18 2042.65 1389.42 2055.73 1408.34 c
-h
-2003 1443 m
-2003.61 1466.96 2007.23 1474.42 2017.09 1474.42 c
-2022.93 1474.42 2026.55 1471.38 2028.16 1465.49 c
-2029.17 1461.67 2029.57 1456.03 2029.97 1445.77 c
-2029.97 1443 l
-h
-2059.35 1386 m
-f*
-2156.16 1481.59 m
-2156.16 1525.22 l
-2150.37 1525.22 l
-2148.96 1519.82 2147.55 1518.42 2143.93 1518.42 c
-2142.12 1518.42 2139.7 1519.03 2135.47 1520.43 c
-2126.22 1523.86 2119.78 1525.02 2111.93 1525.02 c
-2084.56 1525.02 2068 1509.54 2068 1484.01 c
-2068 1478.98 2068.75 1474.75 2070.07 1470.73 c
-2074.29 1460.06 2085.16 1450.6 2102.27 1442.35 c
-2115.75 1435.91 l
-2133.46 1427.46 2138 1422.22 2138 1411.56 c
-2138 1397.67 2128.25 1389.18 2112.94 1389.18 c
-2101.26 1389.18 2091.6 1393.89 2083.96 1403.31 c
-2078.12 1410.75 2075.3 1417.6 2071.88 1431.88 c
-2066.04 1431.88 l
-2066.04 1382.18 l
-2071.88 1382.18 l
-2073.09 1387.41 2074.7 1389.02 2077.92 1389.02 c
-2079.53 1389.02 2081.74 1388.42 2086.17 1387.01 c
-2096.03 1383.59 2103.48 1382.18 2112.33 1382.18 c
-2142.12 1382.18 2162 1399.28 2162 1424.64 c
-2162 1439.73 2153.04 1454.83 2140.1 1461.27 c
-2110.52 1475.96 l
-2094.22 1484.01 2090 1488.84 2090 1498.7 c
-2090 1511.18 2098.37 1518.02 2111.93 1518.02 c
-2120.99 1518.02 2129.44 1514.47 2136.68 1507.55 c
-2143.53 1500.51 2146.75 1494.67 2150.77 1481.59 c
-h
-2170.89 1386 m
-f*
-2249.9 1411.16 m
-2241.65 1401.29 2235.61 1397.18 2226.96 1397.18 c
-2219.31 1397.18 2213.27 1400.77 2209.25 1407.94 c
-2205.43 1414.54 2203.82 1421.56 2203.01 1436 c
-2253.73 1436 l
-2252.52 1452.36 2249.5 1461.43 2243.26 1469.12 c
-2236.82 1476.96 2227.36 1481.42 2216.09 1481.42 c
-2190.94 1481.42 2174.03 1461.4 2174.03 1431.88 c
-2174.03 1402.5 2190.53 1383.18 2215.49 1383.18 c
-2231.79 1383.18 2241.65 1389.42 2254.73 1408.34 c
-h
-2202 1443 m
-2202.61 1466.96 2206.23 1474.42 2216.09 1474.42 c
-2221.93 1474.42 2225.55 1471.38 2227.16 1465.49 c
-2228.17 1461.67 2228.57 1456.03 2228.97 1445.77 c
-2228.97 1443 l
-h
-2258.35 1386 m
-f*
-2319.38 1479 m
-2300 1479 l
-2300 1512.79 l
-2295.43 1512.79 l
-2283.16 1495.48 2275.11 1486.42 2262.02 1475.35 c
-2262.02 1470 l
-2272 1470 l
-2272 1404.72 l
-2272 1391.64 2280.84 1383.59 2295.03 1383.59 c
-2308.51 1383.59 2316.56 1389.62 2324.81 1406.12 c
-2319.78 1408.34 l
-2315.76 1400.69 2312.54 1397.59 2308.31 1397.59 c
-2302.68 1397.59 2300 1401.09 2300 1409.34 c
-2300 1470 l
-2319.38 1470 l
-h
-2325.02 1386 m
-f*
-2375.31 1386 m
-f*
-2378.22 1522 m
-2378.22 1517 l
-2392.11 1516.2 2396 1512.98 2396 1502.72 c
-2396 1405.32 l
-2396 1395.06 2392.97 1392.64 2378.22 1391.03 c
-2378.22 1386 l
-2443.02 1386 l
-2477.03 1386 2500 1401.09 2500 1423.83 c
-2500 1433.09 2496.03 1441.14 2488.71 1447.38 c
-2481.66 1453.62 2474.82 1456.44 2460.73 1459.46 c
-2484.08 1466.3 2493 1474.55 2493 1489.84 c
-2493 1510.57 2474.39 1522 2440.41 1522 c
-h
-2428 1455.03 m
-2434.17 1455.03 l
-2454.9 1455.03 2465 1444.36 2465 1422.02 c
-2465 1402.5 2456.73 1393 2440.41 1393 c
-2431.55 1393 2428 1396.26 2428 1404.72 c
-h
-2428 1506.15 m
-2428 1513.39 2430.85 1516 2439 1516 c
-2453.08 1516 2460 1507.35 2460 1488.44 c
-2460 1467.3 2453.23 1461.67 2428 1461.07 c
-h
-2509.23 1386 m
-f*
-1 i
-0.564706 g
-2228.15 4743.35 m
-2030.15 4823.75 l
-2170.55 4948.55 l
-1944.95 4966.55 l
-2007.35 5121.35 l
-1790.15 5075.75 l
-1763.75 5236.55 l
-1586.15 5135.75 l
-1475.75 5276.15 l
-1364.15 5135.75 l
-1186.55 5236.55 l
-1160.15 5075.75 l
-940.55 5121.35 l
-1005.35 4966.55 l
-778.55 4948.55 l
-920.15 4823.75 l
-720.95 4743.35 l
-920.15 4666.55 l
-778.55 4540.55 l
-1005.35 4523.75 l
-940.55 4368.95 l
-1160.15 4413.35 l
-1186.55 4253.75 l
-1364.15 4353.35 l
-1475.75 4212.95 l
-1586.15 4353.35 l
-1763.75 4253.75 l
-1790.15 4413.35 l
-2007.35 4368.95 l
-1944.95 4523.75 l
-2170.55 4540.55 l
-2030.15 4666.55 l
-f*
-1 g
-2168.15 4803.35 m
-1970.15 4883.75 l
-2110.55 5008.55 l
-1884.95 5026.55 l
-1947.35 5181.35 l
-1730.15 5135.75 l
-1703.75 5296.55 l
-1526.15 5195.75 l
-1415.75 5336.15 l
-1304.15 5195.75 l
-1126.55 5296.55 l
-1100.15 5135.75 l
-880.55 5181.35 l
-945.35 5026.55 l
-718.55 5008.55 l
-860.15 4883.75 l
-660.95 4803.35 l
-860.15 4726.55 l
-718.55 4600.55 l
-945.35 4583.75 l
-880.55 4428.95 l
-1100.15 4473.35 l
-1126.55 4313.75 l
-1304.15 4413.35 l
-1415.75 4272.95 l
-1526.15 4413.35 l
-1703.75 4313.75 l
-1730.15 4473.35 l
-1947.35 4428.95 l
-1884.95 4583.75 l
-2110.55 4600.55 l
-1970.15 4726.55 l
-f*
-0 g
-2168.15 4803.35 m
-1970.15 4883.75 l
-2110.55 5008.55 l
-1884.95 5026.55 l
-1947.35 5181.35 l
-1730.15 5135.75 l
-1703.75 5296.55 l
-1526.15 5195.75 l
-1415.75 5336.15 l
-1304.15 5195.75 l
-1126.55 5296.55 l
-1100.15 5135.75 l
-880.55 5181.35 l
-945.35 5026.55 l
-718.55 5008.55 l
-860.15 4883.75 l
-660.95 4803.35 l
-860.15 4726.55 l
-718.55 4600.55 l
-945.35 4583.75 l
-880.55 4428.95 l
-1100.15 4473.35 l
-1126.55 4313.75 l
-1304.15 4413.35 l
-1415.75 4272.95 l
-1526.15 4413.35 l
-1703.75 4313.75 l
-1730.15 4473.35 l
-1947.35 4428.95 l
-1884.95 4583.75 l
-2110.55 4600.55 l
-1970.15 4726.55 l
-2168.15 4803.35 l
-2060.15 4804.55 l
-1894.55 4739.75 l
-2014.55 4632.95 l
-1827.35 4618.55 l
-1882.55 4481.75 l
-1697.75 4521.35 l
-1673.75 4376.15 l
-1516.55 4464.95 l
-1415.75 4337.75 l
-1313.75 4464.95 l
-1156.55 4376.15 l
-1132.55 4521.35 l
-946.55 4481.75 l
-1001.75 4618.55 l
-814.55 4632.95 l
-934.55 4739.75 l
-770.15 4804.55 l
-934.55 4870.55 l
-814.55 4976.15 l
-1001.75 4990.55 l
-946.55 5127.35 l
-1132.55 5088.95 l
-1156.55 5232.95 l
-1313.75 5144.15 l
-1415.75 5272.55 l
-1516.55 5144.15 l
-1673.75 5232.95 l
-1697.75 5088.95 l
-1882.55 5127.35 l
-1827.35 4990.55 l
-2014.55 4976.15 l
-1894.55 4870.55 l
-2060.15 4804.55 l
-2168.15 4803.35 l
-f*
-0.201248 i
-1328.58 5044 m
-1289.34 5044 l
-1289.34 5038.6 l
-1300.41 5037.6 1302.22 5036.39 1306.04 5027.54 c
-1281.89 4944.82 l
-1274.04 4918.46 1272.64 4916.24 1261.57 4914.03 c
-1261.57 4909 l
-1303.43 4909 l
-1303.43 4914.03 l
-1291.55 4915.04 1287.33 4918.06 1287.33 4925.91 c
-1287.33 4929.73 1288.53 4936.37 1290.95 4944.82 c
-1310.87 5016.47 l
-1362.59 4905.98 l
-1368.23 4905.98 l
-1397.01 5007.81 l
-1404.86 5034.38 1405.86 5035.99 1417.53 5038.6 c
-1417.53 5044 l
-1375.47 5044 l
-1375.47 5038.6 l
-1387.35 5037.6 1391.57 5034.38 1391.57 5026.73 c
-1391.57 5022.91 1390.16 5016.06 1387.95 5007.81 c
-1371.85 4950.05 l
-h
-1412.3 4909 m
-f*
-1475.8 4937.58 m
-1466.54 4923.69 1460.7 4919.38 1452.05 4919.38 c
-1443.6 4919.38 1439 4924.98 1439 4935.77 c
-1439 4938.99 1439.46 4941.6 1440.38 4945.63 c
-1461.31 4949.65 1471.17 4954.08 1481.23 4963.34 c
-1488.27 4969.78 1492 4977.22 1492 4984.47 c
-1492 4994.73 1483.19 5001.62 1470.97 5001.62 c
-1441.79 5001.62 1413 4968.99 1413 4935.97 c
-1413 4918.86 1425.88 4906.38 1443.4 4906.38 c
-1458.89 4906.38 1469.56 4914.23 1481.63 4934.16 c
-h
-1441.79 4952.07 m
-1449.03 4980.04 1458.29 4994.62 1467.95 4994.62 c
-1471.77 4994.62 1473 4992.64 1473 4988.49 c
-1473 4979.64 1469.78 4970.98 1463.72 4964.34 c
-1458.29 4958.51 1453.26 4955.69 1441.79 4952.07 c
-h
-1501.35 4909 m
-f*
-1504.22 4990.91 m
-1509.25 4990.91 1510.86 4990.71 1512.47 4989.3 c
-1516.7 4986.08 1519.52 4967.16 1520.12 4939.19 c
-1520.52 4923.49 l
-1520.52 4922.48 l
-1520.52 4922.28 1520.52 4919.26 1520.32 4915.44 c
-1520.12 4906.38 l
-1525.55 4906.38 l
-1537.02 4923.69 l
-1545.28 4937.58 1552.92 4951.06 1559.77 4963.74 c
-1564.39 4906.38 l
-1569.83 4906.38 l
-1607.06 4945.83 1624 4972.59 1624 4989.5 c
-1624 4996.14 1618.63 5001.62 1612.29 5001.62 c
-1606.25 5001.62 1601.02 4996.15 1601.02 4989.9 c
-1601.02 4986.88 1602.23 4984.27 1605.25 4980.04 c
-1608.06 4976.22 1609 4973.6 1609 4971.59 c
-1609 4965.55 1602.83 4955.89 1585.32 4935.16 c
-1578.88 5001.62 l
-1573.45 5001.62 l
-1556.55 4972.63 1553.33 4966.83 1542.06 4946.63 c
-1541.45 4971.59 1540.04 4984.67 1535.41 5001.98 c
-1527.16 5000.17 1520.92 4999.16 1504.22 4996.34 c
-h
-1635.23 4909 m
-f*
-1215.46 4781.9 m
-1190.3 4688.52 l
-1187.08 4677.65 1183.26 4674.84 1170.18 4674.03 c
-1170.18 4669 l
-1232.97 4669 l
-1232.97 4674 l
-1221.3 4674.61 1218.48 4676.22 1218.48 4682.69 c
-1218.48 4684.9 1218.88 4687.11 1220.09 4691.74 c
-1220.29 4692.75 l
-1220.49 4693.75 l
-1245.24 4784.11 l
-1248.26 4794.58 1251.28 4797.4 1261.55 4798.6 c
-1261.55 4804 l
-1218.88 4804 l
-1156.49 4707.04 l
-1145.63 4804 l
-1101.15 4804 l
-1101.15 4799 l
-1113.83 4798.36 1115.64 4797.51 1115.64 4791.56 c
-1115.64 4788.74 1114.84 4785.12 1113.43 4779.89 c
-1091.49 4704.82 l
-1083.44 4678.66 1082.03 4676.45 1071.16 4674.03 c
-1071.16 4669 l
-1112.82 4669 l
-1112.82 4674.03 l
-1099.94 4675.64 1096.72 4678.06 1096.72 4686.31 c
-1096.72 4689.73 1097.73 4694.76 1100.55 4704.82 c
-1120.87 4779.08 l
-1134.36 4666.59 l
-1139.99 4666.59 l
-h
-1255.91 4669 m
-f*
-1342.34 4694.56 m
-1334.09 4683.49 1331.07 4680.18 1327.85 4680.18 c
-1326.24 4680.18 1326 4681.51 1326 4683.49 c
-1326 4688.52 1327.66 4696.77 1332.28 4713.27 c
-1346.57 4760.77 l
-1324.23 4759.36 l
-1320.61 4747.49 l
-1318.8 4757.75 1314.37 4761.62 1305.71 4761.62 c
-1280.96 4761.62 1251 4723.18 1251 4691.94 c
-1251 4676.65 1259.56 4666.38 1272.51 4666.38 c
-1284.78 4666.38 1294.04 4673.63 1305.51 4692.95 c
-1303.1 4684.7 1303 4682.28 1303 4679.47 c
-1303 4672.02 1308.9 4666.18 1316.18 4666.18 c
-1325.64 4666.18 1334.89 4674.03 1346.57 4691.54 c
-h
-1308.53 4753.52 m
-1312.96 4753.12 1316.28 4749.5 1316.28 4744.07 c
-1316.28 4731.99 1309.5 4709.65 1301.49 4695.77 c
-1296.05 4685.91 1290.02 4680.38 1284.58 4680.38 c
-1279.35 4680.38 1276 4685.14 1276 4691.54 c
-1276 4702 1282.43 4722.13 1290.42 4737.02 c
-1296.46 4747.69 1303.1 4753.93 1308.53 4753.52 c
-h
-1355.62 4669 m
-f*
-1398.47 4761.98 m
-1377.94 4758.76 1370.09 4757.55 1359.63 4756.34 c
-1359.63 4751 l
-1368.68 4750.59 1370.5 4749.77 1370.5 4745.88 c
-1370.5 4743.86 1368.89 4736.62 1366.07 4726.15 c
-1345.94 4648.07 l
-1342.12 4634.79 1340.51 4632.8 1330.85 4633 c
-1330.85 4627 l
-1380.96 4627 l
-1380.96 4633 l
-1370.9 4633.21 1367.88 4634.65 1367.88 4639.62 c
-1367.88 4642.44 1369.29 4648.47 1373.11 4662.56 c
-1374.52 4667.39 1374.52 4667.79 1375.33 4670.81 c
-1382.37 4667.19 1384.78 4666.38 1389.01 4666.38 c
-1416.38 4666.38 1444.76 4702.81 1444.76 4737.63 c
-1444.76 4752.52 1436.3 4761.62 1423.02 4761.62 c
-1411.55 4761.62 1402.7 4755.28 1390.82 4738.83 c
-h
-1411.75 4747.69 m
-1416.98 4747.29 1420 4742.66 1419.6 4736.22 c
-1418.8 4722.93 1412.36 4703.01 1405.11 4689.93 c
-1398.87 4679.06 1392.43 4673.38 1385.59 4673.38 c
-1381.16 4673.38 1377.74 4676.62 1377.74 4680.67 c
-1377.74 4684.09 1379.95 4692.34 1385.39 4710.66 c
-1389.82 4725.35 1391.63 4730.38 1394.65 4735.01 c
-1399.68 4742.86 1406.52 4748.09 1411.75 4747.69 c
-h
-1455.62 4669 m
-f*
-1498.47 4761.98 m
-1477.94 4758.76 1470.09 4757.55 1459.63 4756.34 c
-1459.63 4751 l
-1468.68 4750.59 1470.5 4749.77 1470.5 4745.88 c
-1470.5 4743.86 1468.89 4736.62 1466.07 4726.15 c
-1445.94 4648.07 l
-1442.12 4634.79 1440.51 4632.8 1430.85 4633 c
-1430.85 4627 l
-1480.96 4627 l
-1480.96 4633 l
-1470.9 4633.21 1467.88 4634.65 1467.88 4639.62 c
-1467.88 4642.44 1469.29 4648.47 1473.11 4662.56 c
-1474.52 4667.39 1474.52 4667.79 1475.33 4670.81 c
-1482.37 4667.19 1484.78 4666.38 1489.01 4666.38 c
-1516.38 4666.38 1544.76 4702.81 1544.76 4737.63 c
-1544.76 4752.52 1536.3 4761.62 1523.02 4761.62 c
-1511.55 4761.62 1502.7 4755.28 1490.82 4738.83 c
-h
-1511.75 4747.69 m
-1516.98 4747.29 1520 4742.66 1519.6 4736.22 c
-1518.8 4722.93 1512.36 4703.01 1505.11 4689.93 c
-1498.87 4679.06 1492.43 4673.38 1485.59 4673.38 c
-1481.16 4673.38 1477.74 4676.62 1477.74 4680.67 c
-1477.74 4684.09 1479.95 4692.34 1485.39 4710.66 c
-1489.82 4725.35 1491.63 4730.38 1494.65 4735.01 c
-1499.68 4742.86 1506.52 4748.09 1511.75 4747.69 c
-h
-1555.62 4669 m
-f*
-1598.47 4697.38 m
-1595.65 4693.35 l
-1590.42 4685.5 1585.79 4681.19 1582.77 4681.19 c
-1581.16 4681.19 1580 4682.64 1580 4684.29 c
-1580 4686.11 1580.87 4691.34 1581.56 4694.76 c
-1599.88 4761.98 l
-1589.17 4759.56 1575.29 4757.55 1559.82 4756.34 c
-1559.82 4751 l
-1561.84 4751 l
-1567.88 4751 1571.7 4748.96 1571.7 4745.07 c
-1571.7 4743.46 1570.84 4740.44 1569.69 4737.02 c
-1558.02 4693.75 l
-1556.41 4687.92 1556 4682.69 1556 4679.87 c
-1556 4672.22 1561.39 4667.19 1569.29 4667.19 c
-1581.36 4667.19 1588.81 4673.23 1602.9 4694.56 c
-h
-1593.84 4807.02 m
-1587 4807.02 1581 4800.61 1581 4793.57 c
-1581 4785.72 1586.53 4780.02 1594.04 4780.02 c
-1601.69 4780.02 1608 4785.71 1608 4792.97 c
-1608 4800.42 1601.64 4807.02 1593.84 4807.02 c
-h
-1610.95 4669 m
-f*
-1705.79 4696.17 m
-1697.74 4683.69 1695.12 4681.19 1691.7 4681.19 c
-1690.09 4681.19 1689 4682.47 1689 4684.29 c
-1689 4686.31 1690.18 4690.53 1693.91 4701.8 c
-1701.16 4723.74 l
-1704.38 4733.2 1706 4742.05 1706 4746.88 c
-1706 4756.74 1700.91 4761.62 1691.7 4761.62 c
-1684.25 4761.62 1677.01 4758.73 1671.58 4753.73 c
-1664.13 4746.68 1660.31 4741.85 1646.82 4721.93 c
-1659.7 4761.78 l
-1646.82 4758.96 1630.72 4756.38 1619.45 4755.98 c
-1619.45 4751.04 l
-1627.9 4750.83 1630.32 4749.8 1630.32 4745.88 c
-1630.32 4743.46 1627.5 4732.8 1621.06 4710.05 c
-1616.43 4693.75 1615.02 4688.52 1609.79 4669 c
-1634.14 4669 l
-1643.6 4703.82 1650.85 4721.32 1663.32 4737.63 c
-1667.35 4743.06 1673.59 4747.62 1677.21 4747.62 c
-1679.83 4747.62 1682 4745.54 1682 4743.26 c
-1682 4742.66 1681.69 4741.05 1681.24 4739.03 c
-1670.17 4705.63 l
-1666.95 4695.97 1665 4684.5 1665 4679.26 c
-1665 4671.62 1669.86 4667.19 1678.22 4667.19 c
-1690.29 4667.19 1698.54 4674.03 1710.22 4693.55 c
-h
-1722.89 4669 m
-f*
-1818.2 4755 m
-1795.86 4755 l
-1789.02 4760.07 1782.98 4761.62 1773.72 4761.62 c
-1748.97 4761.62 1729 4745.48 1729 4725.35 c
-1729 4715.09 1734.25 4707.84 1745.14 4703.21 c
-1728.64 4693.96 1726 4691.14 1726 4683.69 c
-1726 4677.25 1729.57 4673.43 1738.3 4670.41 c
-1725.82 4667.39 1721.8 4665.78 1716.97 4661.96 c
-1713.75 4659.14 1711 4654.31 1711 4649.48 c
-1711 4636.4 1725.9 4628 1749.37 4628 c
-1777.75 4628 1798 4640.54 1798 4658.33 c
-1798 4670.61 1789.81 4677.25 1767.48 4683.49 c
-1756.82 4686.51 l
-1750.38 4688.32 1747 4691.14 1747 4694.16 c
-1747 4697.38 1749.78 4700.61 1752.19 4700.61 c
-1753.19 4700.61 1754.6 4700.61 1756.21 4700.6 c
-1758.43 4699.99 1760.04 4699 1762.45 4699 c
-1771.31 4699 1780.36 4701.69 1788.01 4706.63 c
-1799.68 4713.27 1806 4723.54 1806 4735.61 c
-1806 4738.81 1805.57 4740.8 1804.71 4744 c
-1818.2 4744 l
-h
-1745.14 4667.79 m
-1747.56 4667.59 1762.85 4662.36 1767.28 4660.35 c
-1772.92 4657.53 1776 4654.11 1776 4648.88 c
-1776 4640.02 1766.97 4635 1751.38 4635 c
-1738.3 4635 1729 4641.44 1729 4650.69 c
-1729 4654.51 1730.83 4657.93 1734.88 4661.76 c
-1737.5 4664.37 1743.53 4667.99 1745.14 4667.79 c
-h
-1773.32 4754.62 m
-1778.55 4754.62 1782 4750.24 1782 4743.86 c
-1782 4737.02 1779.74 4727.36 1776.54 4719.92 c
-1772.31 4710.66 1767.08 4706 1760.84 4706 c
-1755.41 4706 1752 4710.24 1752 4717.9 c
-1752 4725.95 1755.6 4738.23 1760.04 4745.88 c
-1763.86 4752.52 1768.09 4754.62 1773.32 4754.62 c
-h
-1822.62 4669 m
-f*
-1 i
-32 w
-1580.15 6552.95 m
-1512.95 6454.55 1457.75 6062.15 1438.55 5537.75 c
-S
-1361.75 5567.75 m
-1438.55 5532.95 l
-1517.75 5561.75 l
-1432.55 5316.95 l
-f*
-1110.95 4252.55 m
-1026.95 4064.15 982.55 3862.55 982.55 3657.35 c
-982.55 2787.35 1758.95 2079.35 2723.75 2069.75 c
-S
-2663.75 1992.95 m
-2693.75 2070.95 l
-2661.35 2148.95 l
-2909.75 2075.75 l
-f*
-0.201248 i
-4161.33 5063 m
-4047.22 5063 l
-4047.22 5058 l
-4061.11 5057.2 4065 5054.18 4065 5043.72 c
-4065 4946.32 l
-4065 4935.85 4062.17 4933.64 4047.22 4932.03 c
-4047.22 4927 l
-4119.67 4927 l
-4119.67 4932 l
-4101.15 4932.81 4098 4935.23 4098 4946.32 c
-4098 4993.21 l
-4118.22 4992.81 4125.55 4985.36 4128.32 4962.02 c
-4133.35 4962.02 l
-4133.35 5030.04 l
-4128.32 5030.04 l
-4124.76 5007.1 4117.82 5000.05 4098 5000.05 c
-4098 5046.74 l
-4098 5054.19 4100.52 5056 4110.41 5056 c
-4129.13 5056 4140.8 5052.64 4147.04 5045.74 c
-4151.47 5040.71 4153.68 5035.27 4156.5 5022.59 c
-4161.33 5022.59 l
-h
-4166.96 4927 m
-f*
-4210.19 5020 m
-4171.84 5020 l
-4171.84 5014.95 l
-4180.49 5013.74 4183 5011.12 4183 5003.07 c
-4183 4943.9 l
-4183 4935.65 4180.93 4933.44 4171.84 4931.83 c
-4171.84 4927 l
-4225.37 4927 l
-4225.37 4931.83 l
-4213.09 4932.63 4211 4935.25 4211 4947.73 c
-4211 4985.76 l
-4211 4996.23 4216.49 5004.88 4222.95 5004.88 c
-4224.56 5004.88 4226.37 5003.47 4228.59 5000.25 c
-4232.41 4994.82 4235.43 4993.01 4240.66 4993.01 c
-4248.11 4993.01 4253.34 4998.64 4253.34 5006.29 c
-4253.34 5015.55 4246.5 5022.41 4237.04 5022.41 c
-4227.1 5022.41 4219.54 5017.12 4210.19 5003.27 c
-h
-4255.35 4927 m
-f*
-4350.19 4939.88 m
-4348.18 4937.87 l
-4347.57 4937.26 4346.97 4937.06 4345.96 4937.06 c
-4343.15 4937.06 4342 4938.67 4342 4942.09 c
-4342 4994.62 l
-4342 5011.73 4326.6 5022.42 4301.89 5022.42 c
-4279.15 5022.42 4263.85 5012.06 4263.85 4996.83 c
-4263.85 4988.38 4268.69 4983.55 4276.94 4983.55 c
-4284.99 4983.55 4290.62 4988.38 4290.62 4995.22 c
-4290.62 4998.04 4289.61 5000.66 4287 5003.88 c
-4285.19 5005.89 4284.58 5007.1 4284.58 5008.3 c
-4284.58 5012.53 4290.02 5015.42 4297.26 5015.42 c
-4309.14 5015.42 4314.86 5010.08 4314.86 4998.04 c
-4314.86 4983.35 l
-4290.91 4976.1 4281.29 4972.48 4273.51 4967.45 c
-4264.46 4961.41 4260 4954.37 4260 4945.52 c
-4260 4933.24 4269.27 4924.18 4282.17 4924.18 c
-4293.84 4924.18 4303.1 4928.21 4314.17 4938.27 c
-4316.38 4928.01 4320.81 4924.18 4330.67 4924.18 c
-4339.32 4924.18 4345.56 4927.4 4353.21 4935.65 c
-h
-4314 4947.13 m
-4308.55 4940.89 4304.52 4938.47 4299.68 4938.47 c
-4293.64 4938.47 4289 4943.91 4289 4951.96 c
-4289 4963.63 4297.61 4971.88 4314 4976.31 c
-h
-4355.62 4927 m
-f*
-4397.4 5020 m
-4358.7 5020 l
-4358.7 5014.95 l
-4367.55 5013.74 4370 5011.32 4370 5003.07 c
-4370 4943.9 l
-4370 4935.65 4367.74 4933.44 4358.7 4931.83 c
-4358.7 4927 l
-4407 4927 l
-4407 4931.83 l
-4399.95 4932.84 4398 4935.65 4398 4943.3 c
-4398 4997.03 l
-4398 4998.04 4400.87 5001.66 4403.18 5003.88 c
-4407.4 5007.1 4411.02 5009.42 4414.65 5009.42 c
-4422.5 5009.42 4426 5004.59 4426 4992 c
-4426 4943.3 l
-4426 4935.05 4423.68 4932.43 4415.85 4931.83 c
-4415.85 4927 l
-4462.95 4927 l
-4462.95 4931.83 l
-4455.9 4932.64 4454 4935.65 4454 4943.3 c
-4454 4997.03 l
-4454 4998.04 4456.73 5001.46 4458.92 5003.68 c
-4463.35 5007.1 4466.97 5009.42 4470.59 5009.42 c
-4478.24 5009.42 4481 5004.38 4481 4992 c
-4481 4943.3 l
-4481 4934.85 4478.85 4932.43 4471.4 4931.83 c
-4471.4 4927 l
-4519.3 4927 l
-4519.3 4932 l
-4511.45 4932.4 4509 4934.78 4509 4943.3 c
-4509 4993.81 l
-4509 5011.12 4498.43 5022.42 4482.07 5022.42 c
-4470.59 5022.42 4462.95 5017.73 4452.48 5004.68 c
-4446.44 5017.36 4439.4 5022.42 4426.72 5022.42 c
-4413.95 5022.42 4404.98 5016.91 4397.4 5004.68 c
-h
-4522.64 4927 m
-f*
-4601.9 4952.16 m
-4593.65 4942.29 4587.61 4938.18 4578.96 4938.18 c
-4571.31 4938.18 4565.27 4941.77 4561.25 4948.94 c
-4557.43 4955.54 4555.82 4962.56 4555.01 4977 c
-4605.73 4977 l
-4604.52 4993.36 4601.5 5002.43 4595.26 5010.12 c
-4588.82 5017.96 4579.36 5022.42 4568.09 5022.42 c
-4542.94 5022.42 4526.03 5002.4 4526.03 4972.88 c
-4526.03 4943.5 4542.53 4924.18 4567.49 4924.18 c
-4583.79 4924.18 4593.65 4930.42 4606.73 4949.34 c
-h
-4554 4984 m
-4554.61 5007.96 4558.23 5015.42 4568.09 5015.42 c
-4573.93 5015.42 4577.55 5012.38 4579.16 5006.49 c
-4580.17 5002.67 4580.57 4997.03 4580.97 4986.77 c
-4580.97 4984 l
-h
-4610.35 4927 m
-f*
-4707.16 5022.59 m
-4707.16 5066.22 l
-4701.37 5066.22 l
-4699.96 5060.82 4698.55 5059.42 4694.93 5059.42 c
-4693.12 5059.42 4690.7 5060.03 4686.47 5061.43 c
-4677.22 5064.86 4670.78 5066.02 4662.93 5066.02 c
-4635.56 5066.02 4619 5050.54 4619 5025.01 c
-4619 5019.98 4619.75 5015.75 4621.07 5011.73 c
-4625.29 5001.06 4636.16 4991.6 4653.27 4983.35 c
-4666.75 4976.91 l
-4684.46 4968.46 4689 4963.22 4689 4952.56 c
-4689 4938.67 4679.25 4930.18 4663.94 4930.18 c
-4652.26 4930.18 4642.6 4934.89 4634.96 4944.31 c
-4629.12 4951.75 4626.3 4958.6 4622.88 4972.88 c
-4617.04 4972.88 l
-4617.04 4923.18 l
-4622.88 4923.18 l
-4624.09 4928.41 4625.7 4930.02 4628.92 4930.02 c
-4630.53 4930.02 4632.74 4929.42 4637.17 4928.01 c
-4647.03 4924.59 4654.48 4923.18 4663.33 4923.18 c
-4693.12 4923.18 4713 4940.28 4713 4965.64 c
-4713 4980.73 4704.04 4995.83 4691.1 5002.27 c
-4661.52 5016.96 l
-4645.22 5025.01 4641 5029.84 4641 5039.7 c
-4641 5052.18 4649.37 5059.02 4662.93 5059.02 c
-4671.99 5059.02 4680.44 5055.47 4687.68 5048.55 c
-4694.53 5041.51 4697.75 5035.67 4701.77 5022.59 c
-h
-4721.89 4927 m
-f*
-4801.9 4952.16 m
-4793.65 4942.29 4787.61 4938.18 4778.96 4938.18 c
-4771.31 4938.18 4765.27 4941.77 4761.25 4948.94 c
-4757.43 4955.54 4755.82 4962.56 4755.01 4977 c
-4805.73 4977 l
-4804.52 4993.36 4801.5 5002.43 4795.26 5010.12 c
-4788.82 5017.96 4779.36 5022.42 4768.09 5022.42 c
-4742.94 5022.42 4726.03 5002.4 4726.03 4972.88 c
-4726.03 4943.5 4742.53 4924.18 4767.49 4924.18 c
-4783.79 4924.18 4793.65 4930.42 4806.73 4949.34 c
-h
-4754 4984 m
-4754.61 5007.96 4758.23 5015.42 4768.09 5015.42 c
-4773.93 5015.42 4777.55 5012.38 4779.16 5006.49 c
-4780.17 5002.67 4780.57 4997.03 4780.97 4986.77 c
-4780.97 4984 l
-h
-4810.35 4927 m
-f*
-4870.38 5020 m
-4851 5020 l
-4851 5053.79 l
-4846.43 5053.79 l
-4834.16 5036.48 4826.11 5027.42 4813.02 5016.35 c
-4813.02 5011 l
-4823 5011 l
-4823 4945.72 l
-4823 4932.64 4831.84 4924.59 4846.03 4924.59 c
-4859.51 4924.59 4867.56 4930.62 4875.81 4947.12 c
-4870.78 4949.34 l
-4866.76 4941.69 4863.54 4938.59 4859.31 4938.59 c
-4853.68 4938.59 4851 4942.09 4851 4950.34 c
-4851 5011 l
-4870.38 5011 l
-h
-4876.02 4927 m
-f*
-4927.31 4927 m
-f*
-5064.66 4932.03 m
-5055.81 4932.03 5053.59 4934.85 5042.72 4960 c
-4997.85 5065.82 l
-4992.21 5065.82 l
-4947.53 4955.58 l
-4939.89 4936.66 4937.47 4933.84 4927.81 4932.03 c
-4927.81 4927 l
-4968.66 4927 l
-4968.66 4932.03 l
-4956.79 4932.84 4952.16 4935.05 4952.16 4940.28 c
-4952.16 4942.9 4953.57 4947.53 4958 4958.6 c
-4961.02 4967 l
-5006.3 4967 l
-5013.14 4950.9 5015.56 4943.76 5015.56 4939.28 c
-5015.56 4934.85 5012.94 4933.04 5005.9 4932.63 c
-4999.46 4932.03 l
-4999.46 4927 l
-5064.66 4927 l
-h
-4964.04 4975 m
-4982.95 5023.4 l
-5003.28 4975 l
-h
-5071.3 4927 m
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/fsremap.eps b/ast-5.3-1/sun211_figures/fsremap.eps
deleted file mode 100644
index a3d572a..0000000
--- a/ast-5.3-1/sun211_figures/fsremap.eps
+++ /dev/null
@@ -1,2532 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 107 245 551 547
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/10 17:51:58
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5506.55 5042.15 m
-5506.55 5244.95 5340.95 5410.55 5138.15 5410.55 c
-1500.95 5410.55 l
-1298.15 5410.55 1132.55 5244.95 1132.55 5042.15 c
-1132.55 2828.15 l
-1132.55 2625.35 1298.15 2459.75 1500.95 2459.75 c
-5138.15 2459.75 l
-5340.95 2459.75 5506.55 2625.35 5506.55 2828.15 c
-f*
-1 g
-5441.75 5097.35 m
-5441.75 5300.15 5277.35 5464.55 5074.55 5464.55 c
-1445.75 5464.55 l
-1242.95 5464.55 1078.55 5300.15 1078.55 5097.35 c
-1078.55 2891.75 l
-1078.55 2688.95 1242.95 2524.55 1445.75 2524.55 c
-5074.55 2524.55 l
-5277.35 2524.55 5441.75 2688.95 5441.75 2891.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5441.75 5097.35 m
-5441.75 5300.15 5277.35 5464.55 5074.55 5464.55 c
-1445.75 5464.55 l
-1242.95 5464.55 1078.55 5300.15 1078.55 5097.35 c
-1078.55 2891.75 l
-1078.55 2688.95 1242.95 2524.55 1445.75 2524.55 c
-5074.55 2524.55 l
-5277.35 2524.55 5441.75 2688.95 5441.75 2891.75 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1563.35 5256.95 l
-1451.75 5256.95 1360.55 5165.75 1360.55 5055.35 c
-1360.55 4917.35 l
-1360.55 4806.95 1451.75 4715.75 1563.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-f*
-0 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-h
-S
-0.201248 i
-1539.33 5152 m
-1425.22 5152 l
-1425.22 5147 l
-1439.11 5146.2 1443 5143.18 1443 5132.72 c
-1443 5035.32 l
-1443 5024.85 1440.17 5022.64 1425.22 5021.03 c
-1425.22 5016 l
-1497.67 5016 l
-1497.67 5021 l
-1479.15 5021.81 1476 5024.23 1476 5035.32 c
-1476 5082.21 l
-1496.22 5081.81 1503.55 5074.36 1506.32 5051.02 c
-1511.35 5051.02 l
-1511.35 5119.04 l
-1506.32 5119.04 l
-1502.76 5096.1 1495.82 5089.05 1476 5089.05 c
-1476 5135.74 l
-1476 5143.19 1478.52 5145 1488.41 5145 c
-1507.13 5145 1518.8 5141.64 1525.04 5134.74 c
-1529.47 5129.71 1531.68 5124.27 1534.5 5111.59 c
-1539.33 5111.59 l
-h
-1544.96 5016 m
-f*
-1589.19 5109 m
-1550.84 5109 l
-1550.84 5103.95 l
-1559.49 5102.74 1562 5100.12 1562 5092.07 c
-1562 5032.9 l
-1562 5024.65 1559.93 5022.44 1550.84 5020.83 c
-1550.84 5016 l
-1604.37 5016 l
-1604.37 5020.83 l
-1592.09 5021.63 1590 5024.25 1590 5036.73 c
-1590 5074.76 l
-1590 5085.23 1595.49 5093.88 1601.95 5093.88 c
-1603.56 5093.88 1605.37 5092.47 1607.59 5089.25 c
-1611.41 5083.82 1614.43 5082.01 1619.66 5082.01 c
-1627.11 5082.01 1632.34 5087.64 1632.34 5095.29 c
-1632.34 5104.55 1625.5 5111.41 1616.04 5111.41 c
-1606.1 5111.41 1598.54 5106.12 1589.19 5092.27 c
-h
-1634.35 5016 m
-f*
-1729.19 5028.88 m
-1727.18 5026.87 l
-1726.57 5026.26 1725.97 5026.06 1724.96 5026.06 c
-1722.15 5026.06 1721 5027.67 1721 5031.09 c
-1721 5083.62 l
-1721 5100.73 1705.6 5111.42 1680.89 5111.42 c
-1658.15 5111.42 1642.85 5101.06 1642.85 5085.83 c
-1642.85 5077.38 1647.69 5072.55 1655.94 5072.55 c
-1663.99 5072.55 1669.62 5077.38 1669.62 5084.22 c
-1669.62 5087.04 1668.61 5089.66 1666 5092.88 c
-1664.19 5094.89 1663.58 5096.1 1663.58 5097.3 c
-1663.58 5101.53 1669.02 5104.42 1676.26 5104.42 c
-1688.14 5104.42 1693.86 5099.08 1693.86 5087.04 c
-1693.86 5072.35 l
-1669.91 5065.1 1660.29 5061.48 1652.51 5056.45 c
-1643.46 5050.41 1639 5043.37 1639 5034.52 c
-1639 5022.24 1648.27 5013.18 1661.17 5013.18 c
-1672.84 5013.18 1682.1 5017.21 1693.17 5027.27 c
-1695.38 5017.01 1699.81 5013.18 1709.67 5013.18 c
-1718.32 5013.18 1724.56 5016.4 1732.21 5024.65 c
-h
-1693 5036.13 m
-1687.55 5029.89 1683.52 5027.47 1678.68 5027.47 c
-1672.64 5027.47 1668 5032.91 1668 5040.96 c
-1668 5052.63 1676.61 5060.88 1693 5065.31 c
-h
-1734.62 5016 m
-f*
-1776.4 5109 m
-1737.7 5109 l
-1737.7 5103.95 l
-1746.55 5102.74 1749 5100.32 1749 5092.07 c
-1749 5032.9 l
-1749 5024.65 1746.74 5022.44 1737.7 5020.83 c
-1737.7 5016 l
-1786 5016 l
-1786 5020.83 l
-1778.95 5021.84 1777 5024.65 1777 5032.3 c
-1777 5086.03 l
-1777 5087.04 1779.87 5090.66 1782.18 5092.88 c
-1786.4 5096.1 1790.02 5098.42 1793.65 5098.42 c
-1801.5 5098.42 1805 5093.59 1805 5081 c
-1805 5032.3 l
-1805 5024.05 1802.68 5021.43 1794.85 5020.83 c
-1794.85 5016 l
-1841.95 5016 l
-1841.95 5020.83 l
-1834.9 5021.64 1833 5024.65 1833 5032.3 c
-1833 5086.03 l
-1833 5087.04 1835.73 5090.46 1837.92 5092.68 c
-1842.35 5096.1 1845.97 5098.42 1849.59 5098.42 c
-1857.24 5098.42 1860 5093.38 1860 5081 c
-1860 5032.3 l
-1860 5023.85 1857.85 5021.43 1850.4 5020.83 c
-1850.4 5016 l
-1898.3 5016 l
-1898.3 5021 l
-1890.45 5021.4 1888 5023.78 1888 5032.3 c
-1888 5082.81 l
-1888 5100.12 1877.43 5111.42 1861.07 5111.42 c
-1849.59 5111.42 1841.95 5106.73 1831.48 5093.68 c
-1825.44 5106.36 1818.4 5111.42 1805.72 5111.42 c
-1792.95 5111.42 1783.98 5105.91 1776.4 5093.68 c
-h
-1901.64 5016 m
-f*
-1979.9 5041.16 m
-1971.65 5031.29 1965.61 5027.18 1956.96 5027.18 c
-1949.31 5027.18 1943.27 5030.77 1939.25 5037.94 c
-1935.43 5044.54 1933.82 5051.56 1933.01 5066 c
-1983.73 5066 l
-1982.52 5082.36 1979.5 5091.43 1973.26 5099.12 c
-1966.82 5106.96 1957.36 5111.42 1946.09 5111.42 c
-1920.94 5111.42 1904.03 5091.4 1904.03 5061.88 c
-1904.03 5032.5 1920.53 5013.18 1945.49 5013.18 c
-1961.79 5013.18 1971.65 5019.42 1984.73 5038.34 c
-h
-1932 5073 m
-1932.61 5096.96 1936.23 5104.42 1946.09 5104.42 c
-1951.93 5104.42 1955.55 5101.38 1957.16 5095.49 c
-1958.17 5091.67 1958.57 5086.03 1958.97 5075.77 c
-1958.97 5073 l
-h
-1988.35 5016 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -5016]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-5052.95 3933.35 m
-5052.95 4043.75 4961.75 4134.95 4850.15 4134.95 c
-4353.35 4134.95 l
-4241.75 4134.95 4150.55 4043.75 4150.55 3933.35 c
-4150.55 3795.35 l
-4150.55 3684.95 4241.75 3593.75 4353.35 3593.75 c
-4850.15 3593.75 l
-4961.75 3593.75 5052.95 3684.95 5052.95 3795.35 c
-f*
-1 g
-4983.35 3989.75 m
-4983.35 4096.55 4894.55 4184.15 4785.35 4184.15 c
-4299.35 4184.15 l
-4190.15 4184.15 4101.35 4096.55 4101.35 3989.75 c
-4101.35 3857.75 l
-4101.35 3750.95 4190.15 3663.35 4299.35 3663.35 c
-4785.35 3663.35 l
-4894.55 3663.35 4983.35 3750.95 4983.35 3857.75 c
-f*
-16 w
-0 g
-4983.35 3989.75 m
-4983.35 4096.55 4894.55 4184.15 4785.35 4184.15 c
-4299.35 4184.15 l
-4190.15 4184.15 4101.35 4096.55 4101.35 3989.75 c
-4101.35 3857.75 l
-4101.35 3750.95 4190.15 3663.35 4299.35 3663.35 c
-4785.35 3663.35 l
-4894.55 3663.35 4983.35 3750.95 4983.35 3857.75 c
-h
-S
-0.201248 i
-4329.33 4030 m
-4215.22 4030 l
-4215.22 4025 l
-4229.11 4024.2 4233 4021.18 4233 4010.72 c
-4233 3913.32 l
-4233 3902.85 4230.17 3900.64 4215.22 3899.03 c
-4215.22 3894 l
-4287.67 3894 l
-4287.67 3899 l
-4269.15 3899.81 4266 3902.23 4266 3913.32 c
-4266 3960.21 l
-4286.22 3959.81 4293.55 3952.36 4296.32 3929.02 c
-4301.35 3929.02 l
-4301.35 3997.04 l
-4296.32 3997.04 l
-4292.76 3974.1 4285.82 3967.05 4266 3967.05 c
-4266 4013.74 l
-4266 4021.19 4268.52 4023 4278.41 4023 c
-4297.13 4023 4308.8 4019.64 4315.04 4012.74 c
-4319.47 4007.71 4321.68 4002.27 4324.5 3989.59 c
-4329.33 3989.59 l
-h
-4334.96 3894 m
-f*
-4379.19 3987 m
-4340.84 3987 l
-4340.84 3981.95 l
-4349.49 3980.74 4352 3978.12 4352 3970.07 c
-4352 3910.9 l
-4352 3902.65 4349.93 3900.44 4340.84 3898.83 c
-4340.84 3894 l
-4394.37 3894 l
-4394.37 3898.83 l
-4382.09 3899.63 4380 3902.25 4380 3914.73 c
-4380 3952.76 l
-4380 3963.23 4385.49 3971.88 4391.95 3971.88 c
-4393.56 3971.88 4395.37 3970.47 4397.59 3967.25 c
-4401.41 3961.82 4404.43 3960.01 4409.66 3960.01 c
-4417.11 3960.01 4422.34 3965.64 4422.34 3973.29 c
-4422.34 3982.55 4415.5 3989.41 4406.04 3989.41 c
-4396.1 3989.41 4388.54 3984.12 4379.19 3970.27 c
-h
-4424.35 3894 m
-f*
-4519.19 3906.88 m
-4517.18 3904.87 l
-4516.57 3904.26 4515.97 3904.06 4514.96 3904.06 c
-4512.15 3904.06 4511 3905.67 4511 3909.09 c
-4511 3961.62 l
-4511 3978.73 4495.6 3989.42 4470.89 3989.42 c
-4448.15 3989.42 4432.85 3979.06 4432.85 3963.83 c
-4432.85 3955.38 4437.69 3950.55 4445.94 3950.55 c
-4453.99 3950.55 4459.62 3955.38 4459.62 3962.22 c
-4459.62 3965.04 4458.61 3967.66 4456 3970.88 c
-4454.19 3972.89 4453.58 3974.1 4453.58 3975.3 c
-4453.58 3979.53 4459.02 3982.42 4466.26 3982.42 c
-4478.14 3982.42 4483.86 3977.08 4483.86 3965.04 c
-4483.86 3950.35 l
-4459.91 3943.1 4450.29 3939.48 4442.51 3934.45 c
-4433.46 3928.41 4429 3921.37 4429 3912.52 c
-4429 3900.24 4438.27 3891.18 4451.17 3891.18 c
-4462.84 3891.18 4472.1 3895.21 4483.17 3905.27 c
-4485.38 3895.01 4489.81 3891.18 4499.67 3891.18 c
-4508.32 3891.18 4514.56 3894.4 4522.21 3902.65 c
-h
-4483 3914.13 m
-4477.55 3907.89 4473.52 3905.47 4468.68 3905.47 c
-4462.64 3905.47 4458 3910.91 4458 3918.96 c
-4458 3930.63 4466.61 3938.88 4483 3943.31 c
-h
-4524.62 3894 m
-f*
-4566.4 3987 m
-4527.7 3987 l
-4527.7 3981.95 l
-4536.55 3980.74 4539 3978.32 4539 3970.07 c
-4539 3910.9 l
-4539 3902.65 4536.74 3900.44 4527.7 3898.83 c
-4527.7 3894 l
-4576 3894 l
-4576 3898.83 l
-4568.95 3899.84 4567 3902.65 4567 3910.3 c
-4567 3964.03 l
-4567 3965.04 4569.87 3968.66 4572.18 3970.88 c
-4576.4 3974.1 4580.02 3976.42 4583.65 3976.42 c
-4591.5 3976.42 4595 3971.59 4595 3959 c
-4595 3910.3 l
-4595 3902.05 4592.68 3899.43 4584.85 3898.83 c
-4584.85 3894 l
-4631.95 3894 l
-4631.95 3898.83 l
-4624.9 3899.64 4623 3902.65 4623 3910.3 c
-4623 3964.03 l
-4623 3965.04 4625.73 3968.46 4627.92 3970.68 c
-4632.35 3974.1 4635.97 3976.42 4639.59 3976.42 c
-4647.24 3976.42 4650 3971.38 4650 3959 c
-4650 3910.3 l
-4650 3901.85 4647.85 3899.43 4640.4 3898.83 c
-4640.4 3894 l
-4688.3 3894 l
-4688.3 3899 l
-4680.45 3899.4 4678 3901.78 4678 3910.3 c
-4678 3960.81 l
-4678 3978.12 4667.43 3989.42 4651.07 3989.42 c
-4639.59 3989.42 4631.95 3984.73 4621.48 3971.68 c
-4615.44 3984.36 4608.4 3989.42 4595.72 3989.42 c
-4582.95 3989.42 4573.98 3983.91 4566.4 3971.68 c
-h
-4691.64 3894 m
-f*
-4769.9 3919.16 m
-4761.65 3909.29 4755.61 3905.18 4746.96 3905.18 c
-4739.31 3905.18 4733.27 3908.77 4729.25 3915.94 c
-4725.43 3922.54 4723.82 3929.56 4723.01 3944 c
-4773.73 3944 l
-4772.52 3960.36 4769.5 3969.43 4763.26 3977.12 c
-4756.82 3984.96 4747.36 3989.42 4736.09 3989.42 c
-4710.94 3989.42 4694.03 3969.4 4694.03 3939.88 c
-4694.03 3910.5 4710.53 3891.18 4735.49 3891.18 c
-4751.79 3891.18 4761.65 3897.42 4774.73 3916.34 c
-h
-4722 3951 m
-4722.61 3974.96 4726.23 3982.42 4736.09 3982.42 c
-4741.93 3982.42 4745.55 3979.38 4747.16 3973.49 c
-4748.17 3969.67 4748.57 3964.03 4748.97 3953.77 c
-4748.97 3951 l
-h
-4778.35 3894 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4814 -3892]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3804.95 3548.15 m
-3804.95 3658.55 3713.75 3749.75 3602.15 3749.75 c
-3106.55 3749.75 l
-2994.95 3749.75 2903.75 3658.55 2903.75 3548.15 c
-2903.75 3410.15 l
-2903.75 3299.75 2994.95 3208.55 3106.55 3208.55 c
-3602.15 3208.55 l
-3713.75 3208.55 3804.95 3299.75 3804.95 3410.15 c
-f*
-1 g
-3735.35 3604.55 m
-3735.35 3711.35 3646.55 3798.95 3537.35 3798.95 c
-3052.55 3798.95 l
-2943.35 3798.95 2854.55 3711.35 2854.55 3604.55 c
-2854.55 3472.55 l
-2854.55 3365.75 2943.35 3278.15 3052.55 3278.15 c
-3537.35 3278.15 l
-3646.55 3278.15 3735.35 3365.75 3735.35 3472.55 c
-f*
-0 g
-3735.35 3604.55 m
-3735.35 3711.35 3646.55 3798.95 3537.35 3798.95 c
-3052.55 3798.95 l
-2943.35 3798.95 2854.55 3711.35 2854.55 3604.55 c
-2854.55 3472.55 l
-2854.55 3365.75 2943.35 3278.15 3052.55 3278.15 c
-3537.35 3278.15 l
-3646.55 3278.15 3735.35 3365.75 3735.35 3472.55 c
-h
-S
-0.201248 i
-3082.33 3645 m
-2968.22 3645 l
-2968.22 3640 l
-2982.11 3639.2 2986 3636.18 2986 3625.72 c
-2986 3528.32 l
-2986 3517.85 2983.17 3515.64 2968.22 3514.03 c
-2968.22 3509 l
-3040.67 3509 l
-3040.67 3514 l
-3022.15 3514.81 3019 3517.23 3019 3528.32 c
-3019 3575.21 l
-3039.22 3574.81 3046.55 3567.36 3049.32 3544.02 c
-3054.35 3544.02 l
-3054.35 3612.04 l
-3049.32 3612.04 l
-3045.76 3589.1 3038.82 3582.05 3019 3582.05 c
-3019 3628.74 l
-3019 3636.19 3021.52 3638 3031.41 3638 c
-3050.13 3638 3061.8 3634.64 3068.04 3627.74 c
-3072.47 3622.71 3074.68 3617.27 3077.5 3604.59 c
-3082.33 3604.59 l
-h
-3087.96 3509 m
-f*
-3131.19 3602 m
-3092.84 3602 l
-3092.84 3596.95 l
-3101.49 3595.74 3104 3593.12 3104 3585.07 c
-3104 3525.9 l
-3104 3517.65 3101.93 3515.44 3092.84 3513.83 c
-3092.84 3509 l
-3146.37 3509 l
-3146.37 3513.83 l
-3134.09 3514.63 3132 3517.25 3132 3529.73 c
-3132 3567.76 l
-3132 3578.23 3137.49 3586.88 3143.95 3586.88 c
-3145.56 3586.88 3147.37 3585.47 3149.59 3582.25 c
-3153.41 3576.82 3156.43 3575.01 3161.66 3575.01 c
-3169.11 3575.01 3174.34 3580.64 3174.34 3588.29 c
-3174.34 3597.55 3167.5 3604.41 3158.04 3604.41 c
-3148.1 3604.41 3140.54 3599.12 3131.19 3585.27 c
-h
-3176.35 3509 m
-f*
-3271.19 3521.88 m
-3269.18 3519.87 l
-3268.57 3519.26 3267.97 3519.06 3266.96 3519.06 c
-3264.15 3519.06 3263 3520.67 3263 3524.09 c
-3263 3576.62 l
-3263 3593.73 3247.6 3604.42 3222.89 3604.42 c
-3200.15 3604.42 3184.85 3594.06 3184.85 3578.83 c
-3184.85 3570.38 3189.69 3565.55 3197.94 3565.55 c
-3205.99 3565.55 3211.62 3570.38 3211.62 3577.22 c
-3211.62 3580.04 3210.61 3582.66 3208 3585.88 c
-3206.19 3587.89 3205.58 3589.1 3205.58 3590.3 c
-3205.58 3594.53 3211.02 3597.42 3218.26 3597.42 c
-3230.14 3597.42 3235.86 3592.08 3235.86 3580.04 c
-3235.86 3565.35 l
-3211.91 3558.1 3202.29 3554.48 3194.51 3549.45 c
-3185.46 3543.41 3181 3536.37 3181 3527.52 c
-3181 3515.24 3190.27 3506.18 3203.17 3506.18 c
-3214.84 3506.18 3224.1 3510.21 3235.17 3520.27 c
-3237.38 3510.01 3241.81 3506.18 3251.67 3506.18 c
-3260.32 3506.18 3266.56 3509.4 3274.21 3517.65 c
-h
-3235 3529.13 m
-3229.55 3522.89 3225.52 3520.47 3220.68 3520.47 c
-3214.64 3520.47 3210 3525.91 3210 3533.96 c
-3210 3545.63 3218.61 3553.88 3235 3558.31 c
-h
-3276.62 3509 m
-f*
-3318.4 3602 m
-3279.7 3602 l
-3279.7 3596.95 l
-3288.55 3595.74 3291 3593.32 3291 3585.07 c
-3291 3525.9 l
-3291 3517.65 3288.74 3515.44 3279.7 3513.83 c
-3279.7 3509 l
-3328 3509 l
-3328 3513.83 l
-3320.95 3514.84 3319 3517.65 3319 3525.3 c
-3319 3579.03 l
-3319 3580.04 3321.87 3583.66 3324.18 3585.88 c
-3328.4 3589.1 3332.02 3591.42 3335.65 3591.42 c
-3343.5 3591.42 3347 3586.59 3347 3574 c
-3347 3525.3 l
-3347 3517.05 3344.68 3514.43 3336.85 3513.83 c
-3336.85 3509 l
-3383.95 3509 l
-3383.95 3513.83 l
-3376.9 3514.64 3375 3517.65 3375 3525.3 c
-3375 3579.03 l
-3375 3580.04 3377.73 3583.46 3379.92 3585.68 c
-3384.35 3589.1 3387.97 3591.42 3391.59 3591.42 c
-3399.24 3591.42 3402 3586.38 3402 3574 c
-3402 3525.3 l
-3402 3516.85 3399.85 3514.43 3392.4 3513.83 c
-3392.4 3509 l
-3440.3 3509 l
-3440.3 3514 l
-3432.45 3514.4 3430 3516.78 3430 3525.3 c
-3430 3575.81 l
-3430 3593.12 3419.43 3604.42 3403.07 3604.42 c
-3391.59 3604.42 3383.95 3599.73 3373.48 3586.68 c
-3367.44 3599.36 3360.4 3604.42 3347.72 3604.42 c
-3334.95 3604.42 3325.98 3598.91 3318.4 3586.68 c
-h
-3443.64 3509 m
-f*
-3523.9 3534.16 m
-3515.65 3524.29 3509.61 3520.18 3500.96 3520.18 c
-3493.31 3520.18 3487.27 3523.77 3483.25 3530.94 c
-3479.43 3537.54 3477.82 3544.56 3477.01 3559 c
-3527.73 3559 l
-3526.52 3575.36 3523.5 3584.43 3517.26 3592.12 c
-3510.82 3599.96 3501.36 3604.42 3490.09 3604.42 c
-3464.94 3604.42 3448.03 3584.4 3448.03 3554.88 c
-3448.03 3525.5 3464.53 3506.18 3489.49 3506.18 c
-3505.79 3506.18 3515.65 3512.42 3528.73 3531.34 c
-h
-3476 3566 m
-3476.61 3589.96 3480.23 3597.42 3490.09 3597.42 c
-3495.93 3597.42 3499.55 3594.38 3501.16 3588.49 c
-3502.17 3584.67 3502.57 3579.03 3502.97 3568.77 c
-3502.97 3566 l
-h
-3532.35 3509 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -3509]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-8 w
-1751.75 4750.55 m
-1751.75 4758.95 1751.75 4758.95 1751.75 4750.55 c
-1751.75 4602.95 1791.35 4461.35 1863.35 4360.55 c
-S
-1804.55 4366.55 m
-1853.75 4382.15 l
-1878.95 4427.75 l
-1940.15 4280.15 l
-f*
-2244.95 3784.55 m
-2334.95 3666.95 2519.75 3582.95 2740.55 3561.35 c
-S
-2699.75 3518.15 m
-2721.35 3564.95 l
-2705.75 3612.95 l
-2854.55 3556.55 l
-f*
-2831.75 5164.55 m
-2729.75 5264.15 2584.55 5321.75 2430.95 5321.75 c
-2326.55 5321.75 2224.55 5295.35 2136.95 5244.95 c
-S
-2766.95 5158.55 m
-2814.95 5174.15 l
-2838.95 5219.75 l
-2902.55 5073.35 l
-f*
-32 w
-3062.15 4598.15 m
-3158.15 4380.95 3362.15 4242.95 3585.35 4242.95 c
-3738.95 4242.95 3887.75 4310.15 3995.75 4427.75 c
-S
-4016.15 4337.75 m
-3971.75 4407.35 l
-3891.35 4428.95 l
-4100.15 4582.55 l
-f*
-0.564706 g
-3616.55 4779.35 m
-3480.95 4816.55 l
-3576.95 4871.75 l
-3423.35 4881.35 l
-3466.55 4950.95 l
-3318.95 4930.55 l
-3300.95 5002.55 l
-3180.95 4956.95 l
-3106.55 5020.55 l
-3029.75 4956.95 l
-2909.75 5002.55 l
-2891.75 4930.55 l
-2744.15 4950.95 l
-2787.35 4881.35 l
-2633.75 4871.75 l
-2729.75 4816.55 l
-2595.35 4779.35 l
-2729.75 4744.55 l
-2633.75 4688.15 l
-2787.35 4679.75 l
-2744.15 4610.15 l
-2891.75 4629.35 l
-2909.75 4558.55 l
-3029.75 4602.95 l
-3106.55 4539.35 l
-3180.95 4602.95 l
-3300.95 4558.55 l
-3318.95 4629.35 l
-3466.55 4610.15 l
-3423.35 4679.75 l
-3576.95 4688.15 l
-3480.95 4744.55 l
-f*
-1 g
-3556.55 4839.35 m
-3420.95 4876.55 l
-3516.95 4931.75 l
-3363.35 4941.35 l
-3406.55 5010.95 l
-3258.95 4990.55 l
-3240.95 5062.55 l
-3120.95 5016.95 l
-3046.55 5080.55 l
-2969.75 5016.95 l
-2849.75 5062.55 l
-2831.75 4990.55 l
-2684.15 5010.95 l
-2727.35 4941.35 l
-2573.75 4931.75 l
-2669.75 4876.55 l
-2535.35 4839.35 l
-2669.75 4804.55 l
-2573.75 4748.15 l
-2727.35 4739.75 l
-2684.15 4670.15 l
-2831.75 4689.35 l
-2849.75 4618.55 l
-2969.75 4662.95 l
-3046.55 4599.35 l
-3120.95 4662.95 l
-3240.95 4618.55 l
-3258.95 4689.35 l
-3406.55 4670.15 l
-3363.35 4739.75 l
-3516.95 4748.15 l
-3420.95 4804.55 l
-f*
-0 g
-3556.55 4839.35 m
-3420.95 4876.55 l
-3516.95 4931.75 l
-3363.35 4941.35 l
-3406.55 5010.95 l
-3258.95 4990.55 l
-3240.95 5062.55 l
-3120.95 5016.95 l
-3046.55 5080.55 l
-2969.75 5016.95 l
-2849.75 5062.55 l
-2831.75 4990.55 l
-2684.15 5010.95 l
-2727.35 4941.35 l
-2573.75 4931.75 l
-2669.75 4876.55 l
-2535.35 4839.35 l
-2669.75 4804.55 l
-2573.75 4748.15 l
-2727.35 4739.75 l
-2684.15 4670.15 l
-2831.75 4689.35 l
-2849.75 4618.55 l
-2969.75 4662.95 l
-3046.55 4599.35 l
-3120.95 4662.95 l
-3240.95 4618.55 l
-3258.95 4689.35 l
-3406.55 4670.15 l
-3363.35 4739.75 l
-3516.95 4748.15 l
-3420.95 4804.55 l
-3556.55 4839.35 l
-3516.95 4839.35 l
-3394.55 4808.15 l
-3483.35 4756.55 l
-3346.55 4748.15 l
-3386.15 4682.15 l
-3250.55 4701.35 l
-3233.75 4631.75 l
-3118.55 4674.95 l
-3046.55 4612.55 l
-2972.15 4674.95 l
-2856.95 4631.75 l
-2840.15 4701.35 l
-2703.35 4682.15 l
-2745.35 4748.15 l
-2607.35 4756.55 l
-2696.15 4808.15 l
-2573.75 4839.35 l
-2694.95 4871.75 l
-2607.35 4924.55 l
-2745.35 4931.75 l
-2703.35 4998.95 l
-2840.15 4979.75 l
-2856.95 5048.15 l
-2972.15 5006.15 l
-3046.55 5068.55 l
-3118.55 5006.15 l
-3233.75 5048.15 l
-3250.55 4979.75 l
-3386.15 4998.95 l
-3346.55 4931.75 l
-3483.35 4924.55 l
-3394.55 4871.75 l
-3516.95 4839.35 l
-3556.55 4839.35 l
-f*
-0.2 i
-2867.08 4890.76 m
-2847.08 4816.52 l
-2844.52 4807.88 2841.48 4805.64 2831.08 4805 c
-2831.08 4801 l
-2881 4801 l
-2881 4805 l
-2871.72 4805.48 2869.48 4806.76 2869.48 4811.88 c
-2869.48 4813.64 2869.8 4815.4 2870.76 4819.08 c
-2870.92 4819.88 l
-2871.08 4820.68 l
-2890.76 4892.52 l
-2893.16 4900.84 2895.56 4903.08 2903.72 4904.04 c
-2903.72 4908 l
-2869.8 4908 l
-2820.2 4831.24 l
-2811.56 4908 l
-2776.2 4908 l
-2776.2 4904 l
-2786.28 4903.52 2787.72 4902.89 2787.72 4898.44 c
-2787.72 4896.2 2787.08 4893.32 2785.96 4889.16 c
-2768.52 4829.48 l
-2762.12 4808.68 2761 4806.92 2752.36 4805 c
-2752.36 4801 l
-2785.48 4801 l
-2785.48 4805 l
-2775.24 4806.28 2772.68 4808.2 2772.68 4814.76 c
-2772.68 4817.48 2773.48 4821.48 2775.72 4829.48 c
-2791.88 4888.52 l
-2802.6 4799.08 l
-2807.08 4799.08 l
-h
-2899.24 4801 m
-f*
-2969.44 4821.32 m
-2962.88 4812.52 2960.48 4809.76 2957.92 4809.76 c
-2956.64 4809.76 2956 4810.86 2956 4812.52 c
-2956 4816.52 2957.44 4823.08 2961.44 4836.2 c
-2972.8 4873.96 l
-2955.04 4872.84 l
-2952.16 4863.4 l
-2950.72 4871.56 2947.2 4875.08 2940.32 4875.08 c
-2920.64 4875.08 2897 4844.27 2897 4819.24 c
-2897 4807.08 2903.74 4798.92 2913.92 4798.92 c
-2923.68 4798.92 2931.04 4804.68 2940.16 4820.04 c
-2938.24 4813.48 2938 4811.56 2938 4809.32 c
-2938 4803.4 2942.76 4798.76 2948.64 4798.76 c
-2956.16 4798.76 2963.52 4805 2972.8 4818.92 c
-h
-2942.56 4868.2 m
-2946.08 4867.88 2948.56 4865 2948.56 4860.68 c
-2948.56 4851.08 2943.24 4833.32 2936.96 4822.28 c
-2932.64 4814.44 2927.84 4809.92 2923.52 4809.92 c
-2919.36 4809.92 2916 4813.75 2916 4818.92 c
-2916 4827.24 2921.42 4843.24 2928.16 4855.08 c
-2932.96 4863.56 2938.24 4868.52 2942.56 4868.2 c
-h
-2980 4801 m
-f*
-3013.56 4874.92 m
-2997.24 4872.36 2991 4871.4 2982.68 4870.44 c
-2982.68 4866 l
-2989.88 4865.69 2991.32 4865.07 2991.32 4862.12 c
-2991.32 4860.52 2990.04 4854.76 2987.8 4846.44 c
-2971.8 4784.36 l
-2968.76 4773.8 2967.48 4772.84 2959.8 4773 c
-2959.8 4768 l
-2999.64 4768 l
-2999.64 4773 l
-2991.64 4773.14 2989.24 4774.16 2989.24 4777.64 c
-2989.24 4779.88 2990.36 4784.68 2993.4 4795.88 c
-2994.52 4799.72 2994.52 4800.04 2995.16 4802.44 c
-3000.76 4799.56 3002.68 4798.92 3006.04 4798.92 c
-3027.8 4798.92 3050.36 4827.88 3050.36 4855.56 c
-3050.36 4867.4 3043.64 4875.08 3033.08 4875.08 c
-3023.96 4875.08 3016.92 4869.92 3007.48 4856.52 c
-h
-3024.12 4863.56 m
-3028.28 4863.24 3030.68 4859.56 3030.36 4854.44 c
-3029.72 4843.88 3024.6 4828.04 3018.84 4817.64 c
-3013.88 4809 3008.76 4803.92 3003.32 4803.92 c
-2999.8 4803.92 2997.08 4806.75 2997.08 4810.28 c
-2997.08 4813 2998.84 4819.56 3003.16 4834.12 c
-3006.68 4845.8 3008.12 4849.8 3010.52 4853.48 c
-3014.52 4859.72 3019.96 4863.88 3024.12 4863.56 c
-h
-3059 4801 m
-f*
-3094.56 4874.92 m
-3078.24 4872.36 3072 4871.4 3063.68 4870.44 c
-3063.68 4866 l
-3070.88 4865.69 3072.32 4865.07 3072.32 4862.12 c
-3072.32 4860.52 3071.04 4854.76 3068.8 4846.44 c
-3052.8 4784.36 l
-3049.76 4773.8 3048.48 4772.84 3040.8 4773 c
-3040.8 4768 l
-3080.64 4768 l
-3080.64 4773 l
-3072.64 4773.14 3070.24 4774.16 3070.24 4777.64 c
-3070.24 4779.88 3071.36 4784.68 3074.4 4795.88 c
-3075.52 4799.72 3075.52 4800.04 3076.16 4802.44 c
-3081.76 4799.56 3083.68 4798.92 3087.04 4798.92 c
-3108.8 4798.92 3131.36 4827.88 3131.36 4855.56 c
-3131.36 4867.4 3124.64 4875.08 3114.08 4875.08 c
-3104.96 4875.08 3097.92 4869.92 3088.48 4856.52 c
-h
-3105.12 4863.56 m
-3109.28 4863.24 3111.68 4859.56 3111.36 4854.44 c
-3110.72 4843.88 3105.6 4828.04 3099.84 4817.64 c
-3094.88 4809 3089.76 4803.92 3084.32 4803.92 c
-3080.8 4803.92 3078.08 4806.75 3078.08 4810.28 c
-3078.08 4813 3079.84 4819.56 3084.16 4834.12 c
-3087.68 4845.8 3089.12 4849.8 3091.52 4853.48 c
-3095.52 4859.72 3100.96 4863.88 3105.12 4863.56 c
-h
-3140 4801 m
-f*
-3174.56 4823.56 m
-3172.32 4820.36 l
-3168.16 4814.12 3164.48 4810.56 3162.08 4810.56 c
-3160.8 4810.56 3160 4811.77 3160 4813.16 c
-3160 4814.6 3160.62 4818.76 3161.12 4821.48 c
-3175.68 4874.92 l
-3167.22 4873 3156.26 4871.4 3144.04 4870.44 c
-3144.04 4866 l
-3145.44 4866 l
-3150.24 4866 3153.48 4864.44 3153.48 4861.48 c
-3153.48 4860.2 3152.71 4857.8 3151.68 4855.08 c
-3142.4 4820.68 l
-3141.12 4816.04 3141 4811.88 3141 4809.64 c
-3141 4803.56 3145.2 4799.56 3151.36 4799.56 c
-3160.96 4799.56 3166.88 4804.36 3178.08 4821.32 c
-h
-3170.88 4910.4 m
-3165.44 4910.4 3161 4905.46 3161 4900.04 c
-3161 4893.8 3165.26 4889.4 3171.04 4889.4 c
-3177.12 4889.4 3182 4893.86 3182 4899.56 c
-3182 4905.48 3177 4910.4 3170.88 4910.4 c
-h
-3184.48 4801 m
-f*
-3258.36 4822.6 m
-3251.96 4812.68 3249.88 4810.56 3247.16 4810.56 c
-3245.88 4810.56 3245 4811.63 3245 4813.16 c
-3245 4814.76 3245.94 4818.12 3248.92 4827.08 c
-3254.68 4844.52 l
-3257.24 4852.04 3259 4859.08 3259 4862.92 c
-3259 4870.76 3254.78 4875.08 3247.16 4875.08 c
-3241.24 4875.08 3235.48 4872.62 3231.16 4868.36 c
-3225.24 4862.76 3222.2 4858.92 3211.48 4843.08 c
-3221.72 4874.76 l
-3211.48 4872.52 3198.68 4870.92 3189.72 4870.6 c
-3189.72 4865.8 l
-3196.44 4865.65 3198.36 4864.92 3198.36 4862.12 c
-3198.36 4860.2 3196.12 4851.72 3191 4833.64 c
-3187.32 4820.68 3186.2 4816.52 3182.04 4801 c
-3201.4 4801 l
-3208.92 4828.68 3214.68 4842.6 3224.6 4855.56 c
-3227.8 4859.88 3232.76 4863.08 3235.64 4863.08 c
-3237.72 4863.08 3240 4861.63 3240 4860.04 c
-3240 4859.56 3239.54 4858.28 3238.84 4856.68 c
-3230.04 4830.12 l
-3227.48 4822.44 3226 4813.32 3226 4809.16 c
-3226 4803.08 3229.84 4799.56 3236.44 4799.56 c
-3246.04 4799.56 3252.6 4805 3261.88 4820.52 c
-h
-3271.96 4801 m
-f*
-3349.48 4870 m
-3331.72 4870 l
-3326.28 4873.58 3321.48 4875.08 3314.12 4875.08 c
-3294.44 4875.08 3278 4862.05 3278 4845.8 c
-3278 4837.64 3282.35 4831.88 3291.4 4828.2 c
-3278.28 4820.84 3276 4818.6 3276 4812.68 c
-3276 4807.56 3278.89 4804.52 3285.96 4802.12 c
-3276.04 4799.72 3272.84 4798.44 3269 4795.4 c
-3266.44 4793.16 3265 4789.32 3265 4785.48 c
-3265 4775.08 3276.56 4769 3294.76 4769 c
-3317.32 4769 3333 4778.72 3333 4792.52 c
-3333 4802.28 3326.6 4807.56 3309.16 4812.52 c
-3300.68 4814.92 l
-3295.56 4816.36 3292 4818.6 3292 4821 c
-3292 4823.56 3294.68 4826.28 3297 4826.28 c
-3297.8 4826.28 3298.92 4826.24 3300.2 4826.12 c
-3301.96 4825.64 3303.24 4825 3305.16 4825 c
-3312.2 4825 3319.4 4827.09 3325.48 4830.92 c
-3334.76 4836.2 3340 4844.36 3340 4853.96 c
-3340 4856.64 3339.59 4858.32 3338.76 4861 c
-3349.48 4861 l
-h
-3291.4 4800.04 m
-3293.32 4799.88 3305.48 4795.72 3309 4794.12 c
-3313.48 4791.88 3316 4789.16 3316 4785 c
-3316 4777.96 3308.8 4774 3296.36 4774 c
-3285.96 4774 3279 4779.1 3279 4786.44 c
-3279 4789.48 3280.32 4792.2 3283.24 4795.24 c
-3285.32 4797.32 3290.12 4800.2 3291.4 4800.04 c
-h
-3313.8 4870.08 m
-3317.96 4870.08 3321 4866.19 3321 4860.52 c
-3321 4855.08 3319.08 4847.4 3316.36 4841.48 c
-3313 4834.12 3308.84 4830 3303.88 4830 c
-3299.56 4830 3297 4833.52 3297 4839.88 c
-3297 4846.28 3299.79 4856.04 3303.24 4862.12 c
-3306.28 4867.4 3309.64 4870.08 3313.8 4870.08 c
-h
-3353 4801 m
-f*
-1 i
-0.564706 g
-2708.15 3969.35 m
-2573.75 4006.55 l
-2669.75 4061.75 l
-2516.15 4071.35 l
-2558.15 4140.95 l
-2410.55 4120.55 l
-2393.75 4192.55 l
-2273.75 4146.95 l
-2198.15 4210.55 l
-2122.55 4146.95 l
-2002.55 4192.55 l
-1984.55 4120.55 l
-1835.75 4140.95 l
-1880.15 4071.35 l
-1726.55 4061.75 l
-1822.55 4006.55 l
-1686.95 3969.35 l
-1822.55 3934.55 l
-1726.55 3878.15 l
-1880.15 3869.75 l
-1835.75 3800.15 l
-1984.55 3819.35 l
-2002.55 3748.55 l
-2122.55 3792.95 l
-2198.15 3729.35 l
-2273.75 3792.95 l
-2393.75 3748.55 l
-2410.55 3819.35 l
-2558.15 3800.15 l
-2516.15 3869.75 l
-2669.75 3878.15 l
-2573.75 3934.55 l
-f*
-1 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-f*
-0 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-2648.15 4029.35 l
-2609.75 4029.35 l
-2487.35 3998.15 l
-2576.15 3946.55 l
-2438.15 3938.15 l
-2478.95 3872.15 l
-2343.35 3891.35 l
-2326.55 3821.75 l
-2211.35 3864.95 l
-2138.15 3802.55 l
-2064.95 3864.95 l
-1949.75 3821.75 l
-1931.75 3891.35 l
-1796.15 3872.15 l
-1836.95 3938.15 l
-1700.15 3946.55 l
-1788.95 3998.15 l
-1666.55 4029.35 l
-1787.75 4061.75 l
-1700.15 4114.55 l
-1836.95 4121.75 l
-1796.15 4188.95 l
-1931.75 4169.75 l
-1949.75 4238.15 l
-2064.95 4196.15 l
-2138.15 4258.55 l
-2211.35 4196.15 l
-2326.55 4238.15 l
-2343.35 4169.75 l
-2478.95 4188.95 l
-2438.15 4121.75 l
-2576.15 4114.55 l
-2487.35 4061.75 l
-2609.75 4029.35 l
-2648.15 4029.35 l
-f*
-0.2 i
-1960.08 4080.76 m
-1940.08 4006.52 l
-1937.52 3997.88 1934.48 3995.64 1924.08 3995 c
-1924.08 3991 l
-1974 3991 l
-1974 3995 l
-1964.72 3995.48 1962.48 3996.76 1962.48 4001.88 c
-1962.48 4003.64 1962.8 4005.4 1963.76 4009.08 c
-1963.92 4009.88 l
-1964.08 4010.68 l
-1983.76 4082.52 l
-1986.16 4090.84 1988.56 4093.08 1996.72 4094.04 c
-1996.72 4098 l
-1962.8 4098 l
-1913.2 4021.24 l
-1904.56 4098 l
-1869.2 4098 l
-1869.2 4094 l
-1879.28 4093.52 1880.72 4092.89 1880.72 4088.44 c
-1880.72 4086.2 1880.08 4083.32 1878.96 4079.16 c
-1861.52 4019.48 l
-1855.12 3998.68 1854 3996.92 1845.36 3995 c
-1845.36 3991 l
-1878.48 3991 l
-1878.48 3995 l
-1868.24 3996.28 1865.68 3998.2 1865.68 4004.76 c
-1865.68 4007.48 1866.48 4011.48 1868.72 4019.48 c
-1884.88 4078.52 l
-1895.6 3989.08 l
-1900.08 3989.08 l
-h
-1992.24 3991 m
-f*
-2061.44 4011.32 m
-2054.88 4002.52 2052.48 3999.76 2049.92 3999.76 c
-2048.64 3999.76 2048 4000.86 2048 4002.52 c
-2048 4006.52 2049.44 4013.08 2053.44 4026.2 c
-2064.8 4063.96 l
-2047.04 4062.84 l
-2044.16 4053.4 l
-2042.72 4061.56 2039.2 4065.08 2032.32 4065.08 c
-2012.64 4065.08 1989 4034.27 1989 4009.24 c
-1989 3997.08 1995.74 3988.92 2005.92 3988.92 c
-2015.68 3988.92 2023.04 3994.68 2032.16 4010.04 c
-2030.24 4003.48 2030 4001.56 2030 3999.32 c
-2030 3993.4 2034.76 3988.76 2040.64 3988.76 c
-2048.16 3988.76 2055.52 3995 2064.8 4008.92 c
-h
-2034.56 4058.2 m
-2038.08 4057.88 2040.56 4055 2040.56 4050.68 c
-2040.56 4041.08 2035.24 4023.32 2028.96 4012.28 c
-2024.64 4004.44 2019.84 3999.92 2015.52 3999.92 c
-2011.36 3999.92 2008 4003.75 2008 4008.92 c
-2008 4017.24 2013.42 4033.24 2020.16 4045.08 c
-2024.96 4053.56 2030.24 4058.52 2034.56 4058.2 c
-h
-2072 3991 m
-f*
-2106.56 4064.92 m
-2090.24 4062.36 2084 4061.4 2075.68 4060.44 c
-2075.68 4056 l
-2082.88 4055.69 2084.32 4055.07 2084.32 4052.12 c
-2084.32 4050.52 2083.04 4044.76 2080.8 4036.44 c
-2064.8 3974.36 l
-2061.76 3963.8 2060.48 3962.84 2052.8 3963 c
-2052.8 3958 l
-2092.64 3958 l
-2092.64 3963 l
-2084.64 3963.14 2082.24 3964.16 2082.24 3967.64 c
-2082.24 3969.88 2083.36 3974.68 2086.4 3985.88 c
-2087.52 3989.72 2087.52 3990.04 2088.16 3992.44 c
-2093.76 3989.56 2095.68 3988.92 2099.04 3988.92 c
-2120.8 3988.92 2143.36 4017.88 2143.36 4045.56 c
-2143.36 4057.4 2136.64 4065.08 2126.08 4065.08 c
-2116.96 4065.08 2109.92 4059.92 2100.48 4046.52 c
-h
-2117.12 4053.56 m
-2121.28 4053.24 2123.68 4049.56 2123.36 4044.44 c
-2122.72 4033.88 2117.6 4018.04 2111.84 4007.64 c
-2106.88 3999 2101.76 3993.92 2096.32 3993.92 c
-2092.8 3993.92 2090.08 3996.75 2090.08 4000.28 c
-2090.08 4003 2091.84 4009.56 2096.16 4024.12 c
-2099.68 4035.8 2101.12 4039.8 2103.52 4043.48 c
-2107.52 4049.72 2112.96 4053.88 2117.12 4053.56 c
-h
-2152 3991 m
-f*
-2187.56 4064.92 m
-2171.24 4062.36 2165 4061.4 2156.68 4060.44 c
-2156.68 4056 l
-2163.88 4055.69 2165.32 4055.07 2165.32 4052.12 c
-2165.32 4050.52 2164.04 4044.76 2161.8 4036.44 c
-2145.8 3974.36 l
-2142.76 3963.8 2141.48 3962.84 2133.8 3963 c
-2133.8 3958 l
-2173.64 3958 l
-2173.64 3963 l
-2165.64 3963.14 2163.24 3964.16 2163.24 3967.64 c
-2163.24 3969.88 2164.36 3974.68 2167.4 3985.88 c
-2168.52 3989.72 2168.52 3990.04 2169.16 3992.44 c
-2174.76 3989.56 2176.68 3988.92 2180.04 3988.92 c
-2201.8 3988.92 2224.36 4017.88 2224.36 4045.56 c
-2224.36 4057.4 2217.64 4065.08 2207.08 4065.08 c
-2197.96 4065.08 2190.92 4059.92 2181.48 4046.52 c
-h
-2198.12 4053.56 m
-2202.28 4053.24 2204.68 4049.56 2204.36 4044.44 c
-2203.72 4033.88 2198.6 4018.04 2192.84 4007.64 c
-2187.88 3999 2182.76 3993.92 2177.32 3993.92 c
-2173.8 3993.92 2171.08 3996.75 2171.08 4000.28 c
-2171.08 4003 2172.84 4009.56 2177.16 4024.12 c
-2180.68 4035.8 2182.12 4039.8 2184.52 4043.48 c
-2188.52 4049.72 2193.96 4053.88 2198.12 4053.56 c
-h
-2233 3991 m
-f*
-2266.56 4013.56 m
-2264.32 4010.36 l
-2260.16 4004.12 2256.48 4000.56 2254.08 4000.56 c
-2252.8 4000.56 2252 4001.77 2252 4003.16 c
-2252 4004.6 2252.62 4008.76 2253.12 4011.48 c
-2267.68 4064.92 l
-2259.22 4063 2248.26 4061.4 2236.04 4060.44 c
-2236.04 4056 l
-2237.44 4056 l
-2242.24 4056 2245.48 4054.44 2245.48 4051.48 c
-2245.48 4050.2 2244.71 4047.8 2243.68 4045.08 c
-2234.4 4010.68 l
-2233.12 4006.04 2233 4001.88 2233 3999.64 c
-2233 3993.56 2237.2 3989.56 2243.36 3989.56 c
-2252.96 3989.56 2258.88 3994.36 2270.08 4011.32 c
-h
-2262.88 4100.4 m
-2257.44 4100.4 2253 4095.46 2253 4090.04 c
-2253 4083.8 2257.26 4079.4 2263.04 4079.4 c
-2269.12 4079.4 2274 4083.86 2274 4089.56 c
-2274 4095.48 2269 4100.4 2262.88 4100.4 c
-h
-2276.48 3991 m
-f*
-2351.36 4012.6 m
-2344.96 4002.68 2342.88 4000.56 2340.16 4000.56 c
-2338.88 4000.56 2338 4001.63 2338 4003.16 c
-2338 4004.76 2338.94 4008.12 2341.92 4017.08 c
-2347.68 4034.52 l
-2350.24 4042.04 2352 4049.08 2352 4052.92 c
-2352 4060.76 2347.78 4065.08 2340.16 4065.08 c
-2334.24 4065.08 2328.48 4062.62 2324.16 4058.36 c
-2318.24 4052.76 2315.2 4048.92 2304.48 4033.08 c
-2314.72 4064.76 l
-2304.48 4062.52 2291.68 4060.92 2282.72 4060.6 c
-2282.72 4055.8 l
-2289.44 4055.65 2291.36 4054.92 2291.36 4052.12 c
-2291.36 4050.2 2289.12 4041.72 2284 4023.64 c
-2280.32 4010.68 2279.2 4006.52 2275.04 3991 c
-2294.4 3991 l
-2301.92 4018.68 2307.68 4032.6 2317.6 4045.56 c
-2320.8 4049.88 2325.76 4053.08 2328.64 4053.08 c
-2330.72 4053.08 2333 4051.63 2333 4050.04 c
-2333 4049.56 2332.54 4048.28 2331.84 4046.68 c
-2323.04 4020.12 l
-2320.48 4012.44 2319 4003.32 2319 3999.16 c
-2319 3993.08 2322.84 3989.56 2329.44 3989.56 c
-2339.04 3989.56 2345.6 3995 2354.88 4010.52 c
-h
-2364.96 3991 m
-f*
-2442.48 4060 m
-2424.72 4060 l
-2419.28 4063.58 2414.48 4065.08 2407.12 4065.08 c
-2387.44 4065.08 2371 4052.05 2371 4035.8 c
-2371 4027.64 2375.35 4021.88 2384.4 4018.2 c
-2371.28 4010.84 2369 4008.6 2369 4002.68 c
-2369 3997.56 2371.89 3994.52 2378.96 3992.12 c
-2369.04 3989.72 2365.84 3988.44 2362 3985.4 c
-2359.44 3983.16 2358 3979.32 2358 3975.48 c
-2358 3965.08 2369.56 3959 2387.76 3959 c
-2410.32 3959 2426 3968.72 2426 3982.52 c
-2426 3992.28 2419.6 3997.56 2402.16 4002.52 c
-2393.68 4004.92 l
-2388.56 4006.36 2385 4008.6 2385 4011 c
-2385 4013.56 2387.68 4016.28 2390 4016.28 c
-2390.8 4016.28 2391.92 4016.24 2393.2 4016.12 c
-2394.96 4015.64 2396.24 4015 2398.16 4015 c
-2405.2 4015 2412.4 4017.09 2418.48 4020.92 c
-2427.76 4026.2 2433 4034.36 2433 4043.96 c
-2433 4046.64 2432.59 4048.32 2431.76 4051 c
-2442.48 4051 l
-h
-2384.4 3990.04 m
-2386.32 3989.88 2398.48 3985.72 2402 3984.12 c
-2406.48 3981.88 2409 3979.16 2409 3975 c
-2409 3967.96 2401.8 3964 2389.36 3964 c
-2378.96 3964 2372 3969.1 2372 3976.44 c
-2372 3979.48 2373.32 3982.2 2376.24 3985.24 c
-2378.32 3987.32 2383.12 3990.2 2384.4 3990.04 c
-h
-2406.8 4060.08 m
-2410.96 4060.08 2414 4056.19 2414 4050.52 c
-2414 4045.08 2412.08 4037.4 2409.36 4031.48 c
-2406 4024.12 2401.84 4020 2396.88 4020 c
-2392.56 4020 2390 4023.52 2390 4029.88 c
-2390 4036.28 2392.79 4046.04 2396.24 4052.12 c
-2399.28 4057.4 2402.64 4060.08 2406.8 4060.08 c
-h
-2446 3991 m
-f*
-1 i
-1 g
-4396.55 3387.35 m
-4476.95 3387.35 l
-4476.95 3233.75 l
-4643.75 3233.75 l
-4643.75 3387.35 l
-4726.55 3387.35 l
-4559.75 3538.55 l
-f*
-0 g
-4396.55 3387.35 m
-4476.95 3387.35 l
-4476.95 3233.75 l
-4643.75 3233.75 l
-4643.75 3387.35 l
-4726.55 3387.35 l
-4559.75 3538.55 l
-4396.55 3387.35 l
-4420.55 3396.95 l
-4559.75 3524.15 l
-4700.15 3396.95 l
-4634.15 3396.95 l
-4634.15 3243.35 l
-4487.75 3243.35 l
-4487.75 3396.95 l
-4420.55 3396.95 l
-4396.55 3387.35 l
-f*
-0.2 i
-4135.88 3119 m
-4135.88 3114 l
-4148.3 3113.29 4152 3110.45 4152 3101.4 c
-4152 3014.28 l
-4152 3005.1 4149.25 3002.94 4135.88 3001.5 c
-4135.88 2997 l
-4193.84 2997 l
-4224.26 2997 4244 3010.5 4244 3030.84 c
-4244 3039.12 4240.73 3046.32 4234.7 3051.9 c
-4228.4 3057.48 4222.28 3060 4209.68 3062.7 c
-4230.56 3068.82 4238 3076.2 4238 3089.88 c
-4238 3108.42 4221.55 3119 4191.5 3119 c
-h
-4181 3058.74 m
-4185.92 3058.74 l
-4204.46 3058.74 4213 3049.2 4213 3029.22 c
-4213 3011.76 4205.77 3003 4191.5 3003 c
-4183.58 3003 4181 3005.99 4181 3013.74 c
-h
-4181 3104.46 m
-4181 3110.94 4183.39 3114 4190.24 3114 c
-4202.84 3114 4209 3106.03 4209 3088.62 c
-4209 3069.72 4203.08 3064.68 4181 3064.14 c
-h
-4253.06 2997 m
-f*
-4338.14 3008.52 m
-4336.34 3006.72 l
-4335.8 3006.18 4335.26 3006 4334.36 3006 c
-4331.84 3006 4331 3007.44 4331 3010.5 c
-4331 3057.48 l
-4331 3072.78 4317.16 3082.16 4294.94 3082.16 c
-4274.6 3082.16 4260.92 3072.97 4260.92 3059.46 c
-4260.92 3051.9 4265.24 3047.58 4272.62 3047.58 c
-4279.82 3047.58 4284.86 3051.9 4284.86 3058.02 c
-4284.86 3060.54 4283.96 3062.88 4281.62 3065.76 c
-4280 3067.56 4279.46 3068.64 4279.46 3069.72 c
-4279.46 3073.5 4284.32 3076.16 4290.8 3076.16 c
-4301.42 3076.16 4306 3071.37 4306 3060.54 c
-4306 3047.4 l
-4284.89 3040.92 4276.41 3037.68 4269.56 3033.18 c
-4261.46 3027.78 4258 3021.48 4258 3013.56 c
-4258 3002.58 4266.07 2994.48 4277.3 2994.48 c
-4287.74 2994.48 4296.02 2998.08 4305.92 3007.08 c
-4307.9 2997.9 4311.86 2994.48 4320.68 2994.48 c
-4328.42 2994.48 4334 2997.36 4340.84 3004.74 c
-h
-4306 3015 m
-4301.04 3009.42 4297.37 3007.26 4292.96 3007.26 c
-4287.56 3007.26 4284 3012.12 4284 3019.32 c
-4284 3029.76 4291.57 3037.14 4306 3041.1 c
-h
-4343 2997 m
-f*
-4404.22 3055.68 m
-4404.22 3081.8 l
-4400.24 3081.8 l
-4399.16 3079.08 4398.08 3078.2 4395.74 3078.2 c
-4394.66 3078.2 4393.04 3078.55 4390.16 3079.44 c
-4384.4 3081.42 4380.26 3082.16 4376.12 3082.16 c
-4359.74 3082.16 4348 3070.99 4348 3055.86 c
-4348 3043.98 4355.34 3035.7 4373.42 3027.96 c
-4385.84 3022.56 4391 3018.06 4391 3012.3 c
-4391 3005.28 4385.48 3000.48 4377.2 3000.48 c
-4364.6 3000.48 4356.32 3008.62 4352.54 3024.36 c
-4347.5 3024.36 l
-4347.5 2994.66 l
-4352 2994.66 l
-4353.98 2998.44 4355.06 2999.7 4356.68 2999.7 c
-4357.58 2999.7 4359.02 2999.34 4360.82 2998.62 c
-4366.04 2996.46 4375.22 2994.48 4380.26 2994.48 c
-4396.64 2994.48 4408 3005.64 4408 3021.84 c
-4408 3034.62 4401.15 3042.54 4383.14 3049.92 c
-4370.9 3055.14 4366 3059.64 4366 3065.76 c
-4366 3071.7 4370.98 3076.16 4377.74 3076.16 c
-4382.6 3076.16 4387.28 3074.19 4391.24 3070.44 c
-4395.02 3066.84 4397 3063.42 4399.7 3055.68 c
-h
-4413.02 2997 m
-f*
-4484.36 3019.5 m
-4476.98 3010.68 4471.58 3007.48 4463.84 3007.48 c
-4457 3007.48 4451.6 3010.53 4448 3016.62 c
-4444.58 3022.36 4443.14 3028.45 4442.42 3041 c
-4487.78 3041 l
-4486.7 3055.99 4484 3064.3 4478.42 3071.34 c
-4472.66 3078.36 4464.2 3082.16 4454.12 3082.16 c
-4431.62 3082.16 4416.5 3064.33 4416.5 3038.04 c
-4416.5 3011.76 4431.26 2994.48 4453.58 2994.48 c
-4468.16 2994.48 4476.98 3000.06 4488.68 3016.98 c
-h
-4441.52 3048 m
-4442.06 3069.42 4445.3 3076.16 4454.12 3076.16 c
-4459.34 3076.16 4462.58 3073.42 4464.02 3068.1 c
-4464.92 3064.68 4465.28 3059.64 4465.64 3050.46 c
-4465.64 3048 l
-h
-4491.92 2997 m
-f*
-4538 2997 m
-f*
-4641.94 3119 m
-4539.88 3119 l
-4539.88 3114 l
-4552.3 3113.29 4556 3110.63 4556 3101.4 c
-4556 3014.28 l
-4556 3004.92 4553.44 3002.94 4539.88 3001.5 c
-4539.88 2997 l
-4604.68 2997 l
-4604.68 3002 l
-4588.12 3002.69 4585 3004.77 4585 3014.28 c
-4585 3056.22 l
-4603.28 3055.86 4609.91 3049.2 4612.42 3028.32 c
-4616.92 3028.32 l
-4616.92 3089.16 l
-4612.42 3089.16 l
-4609.19 3068.64 4602.92 3062.34 4585 3062.34 c
-4585 3104.1 l
-4585 3110.76 4587.32 3113 4596.4 3113 c
-4613.14 3113 4623.58 3109.8 4629.16 3103.2 c
-4633.12 3098.7 4635.1 3093.84 4637.62 3082.5 c
-4641.94 3082.5 l
-h
-4646.98 2997 m
-f*
-4686.28 3080 m
-4652.22 3080 l
-4652.22 3075.66 l
-4659.96 3074.58 4662 3072.24 4662 3065.04 c
-4662 3012.12 l
-4662 3004.74 4660.19 3002.76 4652.22 3001.32 c
-4652.22 2997 l
-4700.1 2997 l
-4700.1 3001.32 l
-4689.12 3002.04 4687 3004.38 4687 3015.54 c
-4687 3049.56 l
-4687 3058.92 4692.02 3066.66 4697.94 3066.66 c
-4699.38 3066.66 4701 3065.4 4702.98 3062.52 c
-4706.4 3057.66 4709.1 3056.04 4713.78 3056.04 c
-4720.44 3056.04 4725.12 3061.08 4725.12 3067.92 c
-4725.12 3076.2 4719 3082.16 4710.54 3082.16 c
-4701.55 3082.16 4694.73 3077.47 4686.28 3065.22 c
-h
-4726.92 2997 m
-f*
-4813.14 3008.52 m
-4811.34 3006.72 l
-4810.8 3006.18 4810.26 3006 4809.36 3006 c
-4806.84 3006 4806 3007.44 4806 3010.5 c
-4806 3057.48 l
-4806 3072.78 4792.16 3082.16 4769.94 3082.16 c
-4749.6 3082.16 4735.92 3072.97 4735.92 3059.46 c
-4735.92 3051.9 4740.24 3047.58 4747.62 3047.58 c
-4754.82 3047.58 4759.86 3051.9 4759.86 3058.02 c
-4759.86 3060.54 4758.96 3062.88 4756.62 3065.76 c
-4755 3067.56 4754.46 3068.64 4754.46 3069.72 c
-4754.46 3073.5 4759.32 3076.16 4765.8 3076.16 c
-4776.42 3076.16 4781 3071.37 4781 3060.54 c
-4781 3047.4 l
-4759.89 3040.92 4751.41 3037.68 4744.56 3033.18 c
-4736.46 3027.78 4733 3021.48 4733 3013.56 c
-4733 3002.58 4741.07 2994.48 4752.3 2994.48 c
-4762.74 2994.48 4771.02 2998.08 4780.92 3007.08 c
-4782.9 2997.9 4786.86 2994.48 4795.68 2994.48 c
-4803.42 2994.48 4809 2997.36 4815.84 3004.74 c
-h
-4781 3015 m
-4776.04 3009.42 4772.37 3007.26 4767.96 3007.26 c
-4762.56 3007.26 4759 3012.12 4759 3019.32 c
-4759 3029.76 4766.57 3037.14 4781 3041.1 c
-h
-4818 2997 m
-f*
-4855.46 3080 m
-4820.73 3080 l
-4820.73 3075.66 l
-4828.65 3074.58 4831 3072.42 4831 3065.04 c
-4831 3012.12 l
-4831 3004.74 4828.95 3002.76 4820.73 3001.32 c
-4820.73 2997 l
-4863.93 2997 l
-4863.93 3001.32 l
-4857.63 3002.22 4856 3004.74 4856 3011.58 c
-4856 3059.64 l
-4856 3060.54 4858.51 3063.78 4860.51 3065.76 c
-4864.29 3068.64 4867.53 3070.16 4870.77 3070.16 c
-4877.79 3070.16 4881 3066 4881 3055.14 c
-4881 3011.58 l
-4881 3004.2 4878.9 3001.86 4871.85 3001.32 c
-4871.85 2997 l
-4913.97 2997 l
-4913.97 3001.32 l
-4907.67 3002.04 4906 3004.74 4906 3011.58 c
-4906 3059.64 l
-4906 3060.54 4908.43 3063.6 4910.37 3065.58 c
-4914.33 3068.64 4917.57 3070.16 4920.81 3070.16 c
-4927.65 3070.16 4930 3065.82 4930 3055.14 c
-4930 3011.58 l
-4930 3004.02 4928.1 3001.86 4921.53 3001.32 c
-4921.53 2997 l
-4964.37 2997 l
-4964.37 3001 l
-4957.35 3001.37 4955 3003.6 4955 3011.58 c
-4955 3056.76 l
-4955 3072.24 4945.6 3082.16 4931.07 3082.16 c
-4920.81 3082.16 4913.97 3078.01 4904.61 3066.48 c
-4899.21 3077.82 4892.91 3082.16 4881.57 3082.16 c
-4870.2 3082.16 4862.21 3077.29 4855.46 3066.48 c
-h
-4967.94 2997 m
-f*
-5040.36 3019.5 m
-5032.98 3010.68 5027.58 3007.48 5019.84 3007.48 c
-5013 3007.48 5007.6 3010.53 5004 3016.62 c
-5000.58 3022.36 4999.14 3028.45 4998.42 3041 c
-5043.78 3041 l
-5042.7 3055.99 5040 3064.3 5034.42 3071.34 c
-5028.66 3078.36 5020.2 3082.16 5010.12 3082.16 c
-4987.62 3082.16 4972.5 3064.33 4972.5 3038.04 c
-4972.5 3011.76 4987.26 2994.48 5009.58 2994.48 c
-5024.16 2994.48 5032.98 3000.06 5044.68 3016.98 c
-h
-4997.52 3048 m
-4998.06 3069.42 5001.3 3076.16 5010.12 3076.16 c
-5015.34 3076.16 5018.58 3073.42 5020.02 3068.1 c
-5020.92 3064.68 5021.28 3059.64 5021.64 3050.46 c
-5021.64 3048 l
-h
-5047.92 2997 m
-f*
-1 i
-4132.55 2962.55 914.4 15.5999 re
-f
-0.2 i
-2824.26 2676.36 m
-2813.64 2665.2 2807.88 2660.88 2799.06 2657.46 c
-2793.84 2655.3 2787.9 2654.58 2782.86 2654.58 c
-2770.98 2654.58 2759.64 2660.74 2754.42 2669.88 c
-2749.2 2679.42 2747 2692.2 2747 2710.38 c
-2747 2747.64 2758.23 2767.7 2779.8 2767.7 c
-2788.26 2767.7 2796 2764.38 2803.74 2757.36 c
-2811.48 2750.52 2815.62 2744.4 2821.92 2730.72 c
-2826.42 2730.72 l
-2826.42 2773.16 l
-2821.56 2773.16 l
-2818.86 2766.43 2817.06 2764.56 2813.64 2764.56 c
-2811.84 2764.56 2809.5 2765.28 2805.36 2767.08 c
-2794.92 2771.4 2786.1 2773.7 2777.46 2773.7 c
-2741.64 2773.7 2715 2745.84 2715 2708.76 c
-2715 2671.68 2741.21 2645.58 2778.54 2645.58 c
-2799.24 2645.58 2811.48 2651.88 2829.66 2671.86 c
-h
-2835.96 2649 m
-f*
-2899.18 2646.66 m
-2906.78 2649.36 2911.02 2650.08 2922.5 2651.34 c
-2933.66 2652.6 l
-2933.66 2657 l
-2925.74 2657.35 2924 2659.63 2924 2667.18 c
-2924 2732 l
-2887.4 2732 l
-2887.4 2727.66 l
-2896.4 2726.94 2899 2724.78 2899 2717.04 c
-2899 2666.1 l
-2892.88 2660.16 2889.18 2658.48 2883.8 2658.48 c
-2876.42 2658.48 2874 2662 2874 2670.96 c
-2874 2732 l
-2839.88 2732 l
-2839.88 2727.66 l
-2847.26 2726.22 2849 2724.6 2849 2717.04 c
-2849 2671.68 l
-2849 2655.84 2857.89 2646.48 2872.64 2646.48 c
-2882.16 2646.48 2888.56 2649.36 2899.18 2658.36 c
-h
-2937.08 2649 m
-f*
-2975.28 2732 m
-2941.22 2732 l
-2941.22 2727.66 l
-2948.96 2726.58 2951 2724.24 2951 2717.04 c
-2951 2664.12 l
-2951 2656.74 2949.19 2654.76 2941.22 2653.32 c
-2941.22 2649 l
-2989.1 2649 l
-2989.1 2653.32 l
-2978.12 2654.04 2976 2656.38 2976 2667.54 c
-2976 2701.56 l
-2976 2710.92 2981.02 2718.66 2986.94 2718.66 c
-2988.38 2718.66 2990 2717.4 2991.98 2714.52 c
-2995.4 2709.66 2998.1 2708.04 3002.78 2708.04 c
-3009.44 2708.04 3014.12 2713.08 3014.12 2719.92 c
-3014.12 2728.2 3008 2734.16 2999.54 2734.16 c
-2990.55 2734.16 2983.73 2729.47 2975.28 2717.22 c
-h
-3015.92 2649 m
-f*
-3056.28 2732 m
-3022.22 2732 l
-3022.22 2727.66 l
-3029.96 2726.58 3032 2724.24 3032 2717.04 c
-3032 2664.12 l
-3032 2656.74 3030.19 2654.76 3022.22 2653.32 c
-3022.22 2649 l
-3070.1 2649 l
-3070.1 2653.32 l
-3059.12 2654.04 3057 2656.38 3057 2667.54 c
-3057 2701.56 l
-3057 2710.92 3062.02 2718.66 3067.94 2718.66 c
-3069.38 2718.66 3071 2717.4 3072.98 2714.52 c
-3076.4 2709.66 3079.1 2708.04 3083.78 2708.04 c
-3090.44 2708.04 3095.12 2713.08 3095.12 2719.92 c
-3095.12 2728.2 3089 2734.16 3080.54 2734.16 c
-3071.55 2734.16 3064.73 2729.47 3056.28 2717.22 c
-h
-3096.92 2649 m
-f*
-3168.36 2671.5 m
-3160.98 2662.68 3155.58 2659.48 3147.84 2659.48 c
-3141 2659.48 3135.6 2662.53 3132 2668.62 c
-3128.58 2674.36 3127.14 2680.45 3126.42 2693 c
-3171.78 2693 l
-3170.7 2707.99 3168 2716.3 3162.42 2723.34 c
-3156.66 2730.36 3148.2 2734.16 3138.12 2734.16 c
-3115.62 2734.16 3100.5 2716.33 3100.5 2690.04 c
-3100.5 2663.76 3115.26 2646.48 3137.58 2646.48 c
-3152.16 2646.48 3160.98 2652.06 3172.68 2668.98 c
-h
-3125.52 2700 m
-3126.06 2721.42 3129.3 2728.16 3138.12 2728.16 c
-3143.34 2728.16 3146.58 2725.42 3148.02 2720.1 c
-3148.92 2716.68 3149.28 2711.64 3149.64 2702.46 c
-3149.64 2700 l
-h
-3175.92 2649 m
-f*
-3213.82 2732 m
-3179.78 2732 l
-3179.78 2727.66 l
-3187.7 2726.4 3189 2724.6 3189 2717.04 c
-3189 2664.12 l
-3189 2656.56 3187.61 2654.94 3179.78 2653.32 c
-3179.78 2649 l
-3223.16 2649 l
-3223.16 2653.32 l
-3216.5 2654.22 3214 2656.92 3214 2663.58 c
-3214 2711.64 l
-3214 2712.36 3215.4 2714.16 3217.4 2715.96 c
-3221.36 2719.92 3225.68 2722.16 3230 2722.16 c
-3236.12 2722.16 3239 2717.27 3239 2707.14 c
-3239 2663.58 l
-3239 2656.92 3236.71 2654.04 3230.72 2653.32 c
-3230.72 2649 l
-3273.02 2649 l
-3273.02 2653.32 l
-3266 2653.86 3264 2656.02 3264 2663.58 c
-3264 2708.76 l
-3264 2724.24 3254.54 2734.16 3239.9 2734.16 c
-3228.96 2734.16 3220.57 2729.11 3213.82 2718.48 c
-h
-3276.08 2649 m
-f*
-3330.9 2732 m
-3314 2732 l
-3314 2762.4 l
-3309.48 2762.4 l
-3298.5 2746.92 3291.3 2738.82 3279.6 2728.92 c
-3279.6 2724 l
-3289 2724 l
-3289 2665.74 l
-3289 2654.04 3296.73 2646.84 3309.12 2646.84 c
-3321.18 2646.84 3328.38 2652.24 3335.76 2667 c
-3331.26 2668.98 l
-3327.66 2662.14 3324.78 2659.84 3321 2659.84 c
-3315.96 2659.84 3314 2662.83 3314 2669.88 c
-3314 2724 l
-3330.9 2724 l
-h
-3335.94 2649 m
-f*
-3381 2649 m
-f*
-3485.94 2771 m
-3383.88 2771 l
-3383.88 2766 l
-3396.3 2765.29 3400 2762.63 3400 2753.4 c
-3400 2666.28 l
-3400 2656.92 3397.44 2654.94 3383.88 2653.5 c
-3383.88 2649 l
-3448.68 2649 l
-3448.68 2654 l
-3432.12 2654.69 3429 2656.77 3429 2666.28 c
-3429 2708.22 l
-3447.28 2707.86 3453.91 2701.2 3456.42 2680.32 c
-3460.92 2680.32 l
-3460.92 2741.16 l
-3456.42 2741.16 l
-3453.19 2720.64 3446.92 2714.34 3429 2714.34 c
-3429 2756.1 l
-3429 2762.76 3431.32 2765 3440.4 2765 c
-3457.14 2765 3467.58 2761.8 3473.16 2755.2 c
-3477.12 2750.7 3479.1 2745.84 3481.62 2734.5 c
-3485.94 2734.5 l
-h
-3490.98 2649 m
-f*
-3530.28 2732 m
-3496.22 2732 l
-3496.22 2727.66 l
-3503.96 2726.58 3506 2724.24 3506 2717.04 c
-3506 2664.12 l
-3506 2656.74 3504.19 2654.76 3496.22 2653.32 c
-3496.22 2649 l
-3544.1 2649 l
-3544.1 2653.32 l
-3533.12 2654.04 3531 2656.38 3531 2667.54 c
-3531 2701.56 l
-3531 2710.92 3536.02 2718.66 3541.94 2718.66 c
-3543.38 2718.66 3545 2717.4 3546.98 2714.52 c
-3550.4 2709.66 3553.1 2708.04 3557.78 2708.04 c
-3564.44 2708.04 3569.12 2713.08 3569.12 2719.92 c
-3569.12 2728.2 3563 2734.16 3554.54 2734.16 c
-3545.55 2734.16 3538.73 2729.47 3530.28 2717.22 c
-h
-3570.92 2649 m
-f*
-3656.14 2660.52 m
-3654.34 2658.72 l
-3653.8 2658.18 3653.26 2658 3652.36 2658 c
-3649.84 2658 3649 2659.44 3649 2662.5 c
-3649 2709.48 l
-3649 2724.78 3635.16 2734.16 3612.94 2734.16 c
-3592.6 2734.16 3578.92 2724.97 3578.92 2711.46 c
-3578.92 2703.9 3583.24 2699.58 3590.62 2699.58 c
-3597.82 2699.58 3602.86 2703.9 3602.86 2710.02 c
-3602.86 2712.54 3601.96 2714.88 3599.62 2717.76 c
-3598 2719.56 3597.46 2720.64 3597.46 2721.72 c
-3597.46 2725.5 3602.32 2728.16 3608.8 2728.16 c
-3619.42 2728.16 3624 2723.37 3624 2712.54 c
-3624 2699.4 l
-3602.89 2692.92 3594.41 2689.68 3587.56 2685.18 c
-3579.46 2679.78 3576 2673.48 3576 2665.56 c
-3576 2654.58 3584.07 2646.48 3595.3 2646.48 c
-3605.74 2646.48 3614.02 2650.08 3623.92 2659.08 c
-3625.9 2649.9 3629.86 2646.48 3638.68 2646.48 c
-3646.42 2646.48 3652 2649.36 3658.84 2656.74 c
-h
-3624 2667 m
-3619.04 2661.42 3615.37 2659.26 3610.96 2659.26 c
-3605.56 2659.26 3602 2664.12 3602 2671.32 c
-3602 2681.76 3609.57 2689.14 3624 2693.1 c
-h
-3661 2649 m
-f*
-3698.46 2732 m
-3663.73 2732 l
-3663.73 2727.66 l
-3671.65 2726.58 3674 2724.42 3674 2717.04 c
-3674 2664.12 l
-3674 2656.74 3671.95 2654.76 3663.73 2653.32 c
-3663.73 2649 l
-3706.93 2649 l
-3706.93 2653.32 l
-3700.63 2654.22 3699 2656.74 3699 2663.58 c
-3699 2711.64 l
-3699 2712.54 3701.51 2715.78 3703.51 2717.76 c
-3707.29 2720.64 3710.53 2722.16 3713.77 2722.16 c
-3720.79 2722.16 3724 2718 3724 2707.14 c
-3724 2663.58 l
-3724 2656.2 3721.9 2653.86 3714.85 2653.32 c
-3714.85 2649 l
-3756.97 2649 l
-3756.97 2653.32 l
-3750.67 2654.04 3749 2656.74 3749 2663.58 c
-3749 2711.64 l
-3749 2712.54 3751.43 2715.6 3753.37 2717.58 c
-3757.33 2720.64 3760.57 2722.16 3763.81 2722.16 c
-3770.65 2722.16 3773 2717.82 3773 2707.14 c
-3773 2663.58 l
-3773 2656.02 3771.1 2653.86 3764.53 2653.32 c
-3764.53 2649 l
-3807.37 2649 l
-3807.37 2653 l
-3800.35 2653.37 3798 2655.6 3798 2663.58 c
-3798 2708.76 l
-3798 2724.24 3788.6 2734.16 3774.07 2734.16 c
-3763.81 2734.16 3756.97 2730.01 3747.61 2718.48 c
-3742.21 2729.82 3735.91 2734.16 3724.57 2734.16 c
-3713.2 2734.16 3705.21 2729.29 3698.46 2718.48 c
-h
-3810.94 2649 m
-f*
-3883.36 2671.5 m
-3875.98 2662.68 3870.58 2659.48 3862.84 2659.48 c
-3856 2659.48 3850.6 2662.53 3847 2668.62 c
-3843.58 2674.36 3842.14 2680.45 3841.42 2693 c
-3886.78 2693 l
-3885.7 2707.99 3883 2716.3 3877.42 2723.34 c
-3871.66 2730.36 3863.2 2734.16 3853.12 2734.16 c
-3830.62 2734.16 3815.5 2716.33 3815.5 2690.04 c
-3815.5 2663.76 3830.26 2646.48 3852.58 2646.48 c
-3867.16 2646.48 3875.98 2652.06 3887.68 2668.98 c
-h
-3840.52 2700 m
-3841.06 2721.42 3844.3 2728.16 3853.12 2728.16 c
-3858.34 2728.16 3861.58 2725.42 3863.02 2720.1 c
-3863.92 2716.68 3864.28 2711.64 3864.64 2702.46 c
-3864.64 2700 l
-h
-3890.92 2649 m
-f*
-1 i
-2705.75 2614.55 1184.4 15.5999 re
-f
-1 g
-3311.75 2840.15 m
-3478.55 2993.75 l
-3395.75 2993.75 l
-3395.75 3144.95 l
-3230.15 3144.95 l
-3230.15 2993.75 l
-3148.55 2993.75 l
-f*
-0 g
-3311.75 2840.15 m
-3478.55 2993.75 l
-3395.75 2993.75 l
-3395.75 3144.95 l
-3230.15 3144.95 l
-3230.15 2993.75 l
-3148.55 2993.75 l
-3311.75 2840.15 l
-3311.75 2853.35 l
-3173.75 2982.95 l
-3239.75 2982.95 l
-3239.75 3134.15 l
-3386.15 3134.15 l
-3386.15 2982.95 l
-3453.35 2982.95 l
-3311.75 2853.35 l
-3311.75 2840.15 l
-f*
-0.201248 i
-1359.33 3052 m
-1245.22 3052 l
-1245.22 3047 l
-1259.11 3046.2 1263 3043.18 1263 3032.72 c
-1263 2935.32 l
-1263 2924.85 1260.17 2922.64 1245.22 2921.03 c
-1245.22 2916 l
-1317.67 2916 l
-1317.67 2921 l
-1299.15 2921.81 1296 2924.23 1296 2935.32 c
-1296 2982.21 l
-1316.22 2981.81 1323.55 2974.36 1326.32 2951.02 c
-1331.35 2951.02 l
-1331.35 3019.04 l
-1326.32 3019.04 l
-1322.76 2996.1 1315.82 2989.05 1296 2989.05 c
-1296 3035.74 l
-1296 3043.19 1298.52 3045 1308.41 3045 c
-1327.13 3045 1338.8 3041.64 1345.04 3034.74 c
-1349.47 3029.71 1351.68 3024.27 1354.5 3011.59 c
-1359.33 3011.59 l
-h
-1364.96 2916 m
-f*
-1409.19 3009 m
-1370.84 3009 l
-1370.84 3003.95 l
-1379.49 3002.74 1382 3000.12 1382 2992.07 c
-1382 2932.9 l
-1382 2924.65 1379.93 2922.44 1370.84 2920.83 c
-1370.84 2916 l
-1424.37 2916 l
-1424.37 2920.83 l
-1412.09 2921.63 1410 2924.25 1410 2936.73 c
-1410 2974.76 l
-1410 2985.23 1415.49 2993.88 1421.95 2993.88 c
-1423.56 2993.88 1425.37 2992.47 1427.59 2989.25 c
-1431.41 2983.82 1434.43 2982.01 1439.66 2982.01 c
-1447.11 2982.01 1452.34 2987.64 1452.34 2995.29 c
-1452.34 3004.55 1445.5 3011.41 1436.04 3011.41 c
-1426.1 3011.41 1418.54 3006.12 1409.19 2992.27 c
-h
-1454.35 2916 m
-f*
-1549.19 2928.88 m
-1547.18 2926.87 l
-1546.57 2926.26 1545.97 2926.06 1544.96 2926.06 c
-1542.15 2926.06 1541 2927.67 1541 2931.09 c
-1541 2983.62 l
-1541 3000.73 1525.6 3011.42 1500.89 3011.42 c
-1478.15 3011.42 1462.85 3001.06 1462.85 2985.83 c
-1462.85 2977.38 1467.69 2972.55 1475.94 2972.55 c
-1483.99 2972.55 1489.62 2977.38 1489.62 2984.22 c
-1489.62 2987.04 1488.61 2989.66 1486 2992.88 c
-1484.19 2994.89 1483.58 2996.1 1483.58 2997.3 c
-1483.58 3001.53 1489.02 3004.42 1496.26 3004.42 c
-1508.14 3004.42 1513.86 2999.08 1513.86 2987.04 c
-1513.86 2972.35 l
-1489.91 2965.1 1480.29 2961.48 1472.51 2956.45 c
-1463.46 2950.41 1459 2943.37 1459 2934.52 c
-1459 2922.24 1468.27 2913.18 1481.17 2913.18 c
-1492.84 2913.18 1502.1 2917.21 1513.17 2927.27 c
-1515.38 2917.01 1519.81 2913.18 1529.67 2913.18 c
-1538.32 2913.18 1544.56 2916.4 1552.21 2924.65 c
-h
-1513 2936.13 m
-1507.55 2929.89 1503.52 2927.47 1498.68 2927.47 c
-1492.64 2927.47 1488 2932.91 1488 2940.96 c
-1488 2952.63 1496.61 2960.88 1513 2965.31 c
-h
-1554.62 2916 m
-f*
-1596.4 3009 m
-1557.7 3009 l
-1557.7 3003.95 l
-1566.55 3002.74 1569 3000.32 1569 2992.07 c
-1569 2932.9 l
-1569 2924.65 1566.74 2922.44 1557.7 2920.83 c
-1557.7 2916 l
-1606 2916 l
-1606 2920.83 l
-1598.95 2921.84 1597 2924.65 1597 2932.3 c
-1597 2986.03 l
-1597 2987.04 1599.87 2990.66 1602.18 2992.88 c
-1606.4 2996.1 1610.02 2998.42 1613.65 2998.42 c
-1621.5 2998.42 1625 2993.59 1625 2981 c
-1625 2932.3 l
-1625 2924.05 1622.68 2921.43 1614.85 2920.83 c
-1614.85 2916 l
-1661.95 2916 l
-1661.95 2920.83 l
-1654.9 2921.64 1653 2924.65 1653 2932.3 c
-1653 2986.03 l
-1653 2987.04 1655.73 2990.46 1657.92 2992.68 c
-1662.35 2996.1 1665.97 2998.42 1669.59 2998.42 c
-1677.24 2998.42 1680 2993.38 1680 2981 c
-1680 2932.3 l
-1680 2923.85 1677.85 2921.43 1670.4 2920.83 c
-1670.4 2916 l
-1718.3 2916 l
-1718.3 2921 l
-1710.45 2921.4 1708 2923.78 1708 2932.3 c
-1708 2982.81 l
-1708 3000.12 1697.43 3011.42 1681.07 3011.42 c
-1669.59 3011.42 1661.95 3006.73 1651.48 2993.68 c
-1645.44 3006.36 1638.4 3011.42 1625.72 3011.42 c
-1612.95 3011.42 1603.98 3005.91 1596.4 2993.68 c
-h
-1721.64 2916 m
-f*
-1799.9 2941.16 m
-1791.65 2931.29 1785.61 2927.18 1776.96 2927.18 c
-1769.31 2927.18 1763.27 2930.77 1759.25 2937.94 c
-1755.43 2944.54 1753.82 2951.56 1753.01 2966 c
-1803.73 2966 l
-1802.52 2982.36 1799.5 2991.43 1793.26 2999.12 c
-1786.82 3006.96 1777.36 3011.42 1766.09 3011.42 c
-1740.94 3011.42 1724.03 2991.4 1724.03 2961.88 c
-1724.03 2932.5 1740.53 2913.18 1765.49 2913.18 c
-1781.79 2913.18 1791.65 2919.42 1804.73 2938.34 c
-h
-1752 2973 m
-1752.61 2996.96 1756.23 3004.42 1766.09 3004.42 c
-1771.93 3004.42 1775.55 3001.38 1777.16 2995.49 c
-1778.17 2991.67 1778.57 2986.03 1778.97 2975.77 c
-1778.97 2973 l
-h
-1808.35 2916 m
-f*
-1905.16 3011.59 m
-1905.16 3055.22 l
-1899.37 3055.22 l
-1897.96 3049.82 1896.55 3048.42 1892.93 3048.42 c
-1891.12 3048.42 1888.7 3049.03 1884.47 3050.43 c
-1875.22 3053.86 1868.78 3055.02 1860.93 3055.02 c
-1833.56 3055.02 1817 3039.54 1817 3014.01 c
-1817 3008.98 1817.75 3004.75 1819.07 3000.73 c
-1823.29 2990.06 1834.16 2980.6 1851.27 2972.35 c
-1864.75 2965.91 l
-1882.46 2957.46 1887 2952.22 1887 2941.56 c
-1887 2927.67 1877.25 2919.18 1861.94 2919.18 c
-1850.26 2919.18 1840.6 2923.89 1832.96 2933.31 c
-1827.12 2940.75 1824.3 2947.6 1820.88 2961.88 c
-1815.04 2961.88 l
-1815.04 2912.18 l
-1820.88 2912.18 l
-1822.09 2917.41 1823.7 2919.02 1826.92 2919.02 c
-1828.53 2919.02 1830.74 2918.42 1835.17 2917.01 c
-1845.03 2913.59 1852.48 2912.18 1861.33 2912.18 c
-1891.12 2912.18 1911 2929.28 1911 2954.64 c
-1911 2969.73 1902.04 2984.83 1889.1 2991.27 c
-1859.52 3005.96 l
-1843.22 3014.01 1839 3018.84 1839 3028.7 c
-1839 3041.18 1847.37 3048.02 1860.93 3048.02 c
-1869.99 3048.02 1878.44 3044.47 1885.68 3037.55 c
-1892.53 3030.51 1895.75 3024.67 1899.77 3011.59 c
-h
-1919.89 2916 m
-f*
-2000.9 2941.16 m
-1992.65 2931.29 1986.61 2927.18 1977.96 2927.18 c
-1970.31 2927.18 1964.27 2930.77 1960.25 2937.94 c
-1956.43 2944.54 1954.82 2951.56 1954.01 2966 c
-2004.73 2966 l
-2003.52 2982.36 2000.5 2991.43 1994.26 2999.12 c
-1987.82 3006.96 1978.36 3011.42 1967.09 3011.42 c
-1941.94 3011.42 1925.03 2991.4 1925.03 2961.88 c
-1925.03 2932.5 1941.53 2913.18 1966.49 2913.18 c
-1982.79 2913.18 1992.65 2919.42 2005.73 2938.34 c
-h
-1953 2973 m
-1953.61 2996.96 1957.23 3004.42 1967.09 3004.42 c
-1972.93 3004.42 1976.55 3001.38 1978.16 2995.49 c
-1979.17 2991.67 1979.57 2986.03 1979.97 2975.77 c
-1979.97 2973 l
-h
-2009.35 2916 m
-f*
-2070.38 3009 m
-2051 3009 l
-2051 3042.79 l
-2046.43 3042.79 l
-2034.16 3025.48 2026.11 3016.42 2013.02 3005.35 c
-2013.02 3000 l
-2023 3000 l
-2023 2934.72 l
-2023 2921.64 2031.84 2913.59 2046.03 2913.59 c
-2059.51 2913.59 2067.56 2919.62 2075.81 2936.12 c
-2070.78 2938.34 l
-2066.76 2930.69 2063.54 2927.59 2059.31 2927.59 c
-2053.68 2927.59 2051 2931.09 2051 2939.34 c
-2051 3000 l
-2070.38 3000 l
-h
-2076.02 2916 m
-f*
-1 i
-0.564706 g
-5033.75 4836.95 m
-4866.95 4894.55 l
-4985.75 4983.35 l
-4796.15 4996.55 l
-4848.95 5105.75 l
-4666.55 5074.55 l
-4644.95 5187.35 l
-4496.15 5116.55 l
-4404.95 5216.15 l
-4311.35 5116.55 l
-4162.55 5187.35 l
-4140.95 5074.55 l
-3957.35 5105.75 l
-4011.35 4996.55 l
-3820.55 4983.35 l
-3939.35 4894.55 l
-3773.75 4836.95 l
-3939.35 4781.75 l
-3820.55 4692.95 l
-4011.35 4680.95 l
-3957.35 4570.55 l
-4140.95 4602.95 l
-4162.55 4490.15 l
-4311.35 4560.95 l
-4404.95 4461.35 l
-4496.15 4560.95 l
-4644.95 4490.15 l
-4666.55 4602.95 l
-4848.95 4570.55 l
-4796.15 4680.95 l
-4985.75 4692.95 l
-4866.95 4781.75 l
-f*
-1 g
-4973.75 4896.95 m
-4806.95 4954.55 l
-4925.75 5043.35 l
-4736.15 5056.55 l
-4788.95 5165.75 l
-4606.55 5134.55 l
-4584.95 5247.35 l
-4436.15 5176.55 l
-4344.95 5276.15 l
-4251.35 5176.55 l
-4102.55 5247.35 l
-4080.95 5134.55 l
-3897.35 5165.75 l
-3951.35 5056.55 l
-3760.55 5043.35 l
-3879.35 4954.55 l
-3713.75 4896.95 l
-3879.35 4841.75 l
-3760.55 4752.95 l
-3951.35 4740.95 l
-3897.35 4630.55 l
-4080.95 4662.95 l
-4102.55 4550.15 l
-4251.35 4620.95 l
-4344.95 4521.35 l
-4436.15 4620.95 l
-4584.95 4550.15 l
-4606.55 4662.95 l
-4788.95 4630.55 l
-4736.15 4740.95 l
-4925.75 4752.95 l
-4806.95 4841.75 l
-f*
-0 g
-4973.75 4896.95 m
-4806.95 4954.55 l
-4925.75 5043.35 l
-4736.15 5056.55 l
-4788.95 5165.75 l
-4606.55 5134.55 l
-4584.95 5247.35 l
-4436.15 5176.55 l
-4344.95 5276.15 l
-4251.35 5176.55 l
-4102.55 5247.35 l
-4080.95 5134.55 l
-3897.35 5165.75 l
-3951.35 5056.55 l
-3760.55 5043.35 l
-3879.35 4954.55 l
-3713.75 4896.95 l
-3879.35 4841.75 l
-3760.55 4752.95 l
-3951.35 4740.95 l
-3897.35 4630.55 l
-4080.95 4662.95 l
-4102.55 4550.15 l
-4251.35 4620.95 l
-4344.95 4521.35 l
-4436.15 4620.95 l
-4584.95 4550.15 l
-4606.55 4662.95 l
-4788.95 4630.55 l
-4736.15 4740.95 l
-4925.75 4752.95 l
-4806.95 4841.75 l
-4973.75 4896.95 l
-4850.15 4898.15 l
-4721.75 4856.15 l
-4816.55 4786.55 l
-4674.95 4776.95 l
-4718.15 4683.35 l
-4575.35 4709.75 l
-4554.95 4608.95 l
-4426.55 4670.15 l
-4344.95 4580.15 l
-4259.75 4670.15 l
-4132.55 4608.95 l
-4113.35 4709.75 l
-3966.95 4683.35 l
-4013.75 4776.95 l
-3870.95 4786.55 l
-3964.55 4856.15 l
-3837.35 4898.15 l
-3963.35 4942.55 l
-3870.95 5010.95 l
-4013.75 5019.35 l
-3966.95 5112.95 l
-4113.35 5088.95 l
-4132.55 5188.55 l
-4259.75 5127.35 l
-4344.95 5217.35 l
-4426.55 5127.35 l
-4554.95 5188.55 l
-4575.35 5088.95 l
-4719.35 5112.95 l
-4674.95 5019.35 l
-4816.55 5010.95 l
-4724.15 4942.55 l
-4850.15 4898.15 l
-4973.75 4896.95 l
-f*
-0.2 i
-4251.96 5065 m
-4220.76 5065 l
-4220.76 5061.04 l
-4229.56 5060.24 4231 5059.28 4234.04 5052.24 c
-4214.84 4986.48 l
-4208.6 4965.52 4207.48 4963.76 4198.68 4962 c
-4198.68 4958 l
-4231.96 4958 l
-4231.96 4962 l
-4222.52 4962.8 4219.16 4965.2 4219.16 4971.44 c
-4219.16 4974.48 4220.12 4979.76 4222.04 4986.48 c
-4237.88 5043.44 l
-4279 4955.6 l
-4283.48 4955.6 l
-4306.36 5036.56 l
-4312.6 5057.68 4313.4 5058.96 4322.68 5061.04 c
-4322.68 5065 l
-4289.24 5065 l
-4289.24 5061.04 l
-4298.68 5060.24 4302.04 5057.68 4302.04 5051.6 c
-4302.04 5048.56 4300.92 5043.12 4299.16 5036.56 c
-4286.36 4990.64 l
-h
-4318.52 4958 m
-f*
-4369.72 4980.72 m
-4362.36 4969.68 4357.72 4965.92 4350.84 4965.92 c
-4344.12 4965.92 4341 4970.48 4341 4979.28 c
-4341 4981.84 4341.19 4983.92 4341.56 4987.12 c
-4358.2 4990.32 4366.04 4993.84 4374.04 5001.2 c
-4379.64 5006.32 4383 5012.24 4383 5018 c
-4383 5026.16 4375.83 5032.08 4365.88 5032.08 c
-4342.68 5032.08 4320 5005.92 4320 4979.44 c
-4320 4965.84 4330.15 4955.92 4343.96 4955.92 c
-4356.28 4955.92 4364.76 4962.16 4374.36 4978 c
-h
-4342.68 4992.24 m
-4348.44 5014.48 4355.8 5027.08 4363.48 5027.08 c
-4366.52 5027.08 4368 5025.18 4368 5021.2 c
-4368 5014.16 4365.27 5007.28 4360.12 5002 c
-4355.8 4997.36 4351.8 4995.12 4342.68 4992.24 c
-h
-4390.04 4958 m
-f*
-4391.56 5023.12 m
-4395.56 5023.12 4396.84 5022.96 4398.12 5021.84 c
-4401.48 5019.28 4403.72 5004.24 4404.2 4982 c
-4404.52 4969.52 l
-4404.52 4968.72 l
-4404.52 4968.56 4404.52 4966.16 4404.36 4963.12 c
-4404.2 4955.92 l
-4408.52 4955.92 l
-4417.64 4969.68 l
-4424.2 4980.72 4430.28 4991.44 4435.72 5001.52 c
-4439.4 4955.92 l
-4443.72 4955.92 l
-4473.32 4987.28 4487 5008.56 4487 5022 c
-4487 5027.28 4482.63 5032.08 4477.48 5032.08 c
-4472.68 5032.08 4468.52 5027.52 4468.52 5022.32 c
-4468.52 5019.92 4469.48 5017.84 4471.88 5014.48 c
-4474.12 5011.44 4475 5009.36 4475 5007.76 c
-4475 5002.96 4470.06 4995.28 4456.04 4978.8 c
-4450.92 5032.08 l
-4446.6 5032.08 l
-4433.16 5008.8 4430.6 5004.14 4421.64 4987.92 c
-4421.16 5007.76 4420.04 5018.16 4416.36 5031.92 c
-4409.8 5030.48 4404.84 5029.68 4391.56 5027.44 c
-h
-4495.72 4958 m
-f*
-4162.08 4855.76 m
-4142.08 4781.52 l
-4139.52 4772.88 4136.48 4770.64 4126.08 4770 c
-4126.08 4766 l
-4176 4766 l
-4176 4770 l
-4166.72 4770.48 4164.48 4771.76 4164.48 4776.88 c
-4164.48 4778.64 4164.8 4780.4 4165.76 4784.08 c
-4165.92 4784.88 l
-4166.08 4785.68 l
-4185.76 4857.52 l
-4188.16 4865.84 4190.56 4868.08 4198.72 4869.04 c
-4198.72 4873 l
-4164.8 4873 l
-4115.2 4796.24 l
-4106.56 4873 l
-4071.2 4873 l
-4071.2 4869 l
-4081.28 4868.52 4082.72 4867.89 4082.72 4863.44 c
-4082.72 4861.2 4082.08 4858.32 4080.96 4854.16 c
-4063.52 4794.48 l
-4057.12 4773.68 4056 4771.92 4047.36 4770 c
-4047.36 4766 l
-4080.48 4766 l
-4080.48 4770 l
-4070.24 4771.28 4067.68 4773.2 4067.68 4779.76 c
-4067.68 4782.48 4068.48 4786.48 4070.72 4794.48 c
-4086.88 4853.52 l
-4097.6 4764.08 l
-4102.08 4764.08 l
-h
-4194.24 4766 m
-f*
-4264.44 4786.32 m
-4257.88 4777.52 4255.48 4774.76 4252.92 4774.76 c
-4251.64 4774.76 4251 4775.86 4251 4777.52 c
-4251 4781.52 4252.44 4788.08 4256.44 4801.2 c
-4267.8 4838.96 l
-4250.04 4837.84 l
-4247.16 4828.4 l
-4245.72 4836.56 4242.2 4840.08 4235.32 4840.08 c
-4215.64 4840.08 4192 4809.27 4192 4784.24 c
-4192 4772.08 4198.74 4763.92 4208.92 4763.92 c
-4218.68 4763.92 4226.04 4769.68 4235.16 4785.04 c
-4233.24 4778.48 4233 4776.56 4233 4774.32 c
-4233 4768.4 4237.76 4763.76 4243.64 4763.76 c
-4251.16 4763.76 4258.52 4770 4267.8 4783.92 c
-h
-4237.56 4833.2 m
-4241.08 4832.88 4243.56 4830 4243.56 4825.68 c
-4243.56 4816.08 4238.24 4798.32 4231.96 4787.28 c
-4227.64 4779.44 4222.84 4774.92 4218.52 4774.92 c
-4214.36 4774.92 4211 4778.75 4211 4783.92 c
-4211 4792.24 4216.42 4808.24 4223.16 4820.08 c
-4227.96 4828.56 4233.24 4833.52 4237.56 4833.2 c
-h
-4275 4766 m
-f*
-4309.56 4839.92 m
-4293.24 4837.36 4287 4836.4 4278.68 4835.44 c
-4278.68 4831 l
-4285.88 4830.69 4287.32 4830.07 4287.32 4827.12 c
-4287.32 4825.52 4286.04 4819.76 4283.8 4811.44 c
-4267.8 4749.36 l
-4264.76 4738.8 4263.48 4737.84 4255.8 4738 c
-4255.8 4733 l
-4295.64 4733 l
-4295.64 4738 l
-4287.64 4738.14 4285.24 4739.16 4285.24 4742.64 c
-4285.24 4744.88 4286.36 4749.68 4289.4 4760.88 c
-4290.52 4764.72 4290.52 4765.04 4291.16 4767.44 c
-4296.76 4764.56 4298.68 4763.92 4302.04 4763.92 c
-4323.8 4763.92 4346.36 4792.88 4346.36 4820.56 c
-4346.36 4832.4 4339.64 4840.08 4329.08 4840.08 c
-4319.96 4840.08 4312.92 4834.92 4303.48 4821.52 c
-h
-4320.12 4828.56 m
-4324.28 4828.24 4326.68 4824.56 4326.36 4819.44 c
-4325.72 4808.88 4320.6 4793.04 4314.84 4782.64 c
-4309.88 4774 4304.76 4768.92 4299.32 4768.92 c
-4295.8 4768.92 4293.08 4771.75 4293.08 4775.28 c
-4293.08 4778 4294.84 4784.56 4299.16 4799.12 c
-4302.68 4810.8 4304.12 4814.8 4306.52 4818.48 c
-4310.52 4824.72 4315.96 4828.88 4320.12 4828.56 c
-h
-4355 4766 m
-f*
-4389.56 4839.92 m
-4373.24 4837.36 4367 4836.4 4358.68 4835.44 c
-4358.68 4831 l
-4365.88 4830.69 4367.32 4830.07 4367.32 4827.12 c
-4367.32 4825.52 4366.04 4819.76 4363.8 4811.44 c
-4347.8 4749.36 l
-4344.76 4738.8 4343.48 4737.84 4335.8 4738 c
-4335.8 4733 l
-4375.64 4733 l
-4375.64 4738 l
-4367.64 4738.14 4365.24 4739.16 4365.24 4742.64 c
-4365.24 4744.88 4366.36 4749.68 4369.4 4760.88 c
-4370.52 4764.72 4370.52 4765.04 4371.16 4767.44 c
-4376.76 4764.56 4378.68 4763.92 4382.04 4763.92 c
-4403.8 4763.92 4426.36 4792.88 4426.36 4820.56 c
-4426.36 4832.4 4419.64 4840.08 4409.08 4840.08 c
-4399.96 4840.08 4392.92 4834.92 4383.48 4821.52 c
-h
-4400.12 4828.56 m
-4404.28 4828.24 4406.68 4824.56 4406.36 4819.44 c
-4405.72 4808.88 4400.6 4793.04 4394.84 4782.64 c
-4389.88 4774 4384.76 4768.92 4379.32 4768.92 c
-4375.8 4768.92 4373.08 4771.75 4373.08 4775.28 c
-4373.08 4778 4374.84 4784.56 4379.16 4799.12 c
-4382.68 4810.8 4384.12 4814.8 4386.52 4818.48 c
-4390.52 4824.72 4395.96 4828.88 4400.12 4828.56 c
-h
-4435 4766 m
-f*
-4469.56 4788.56 m
-4467.32 4785.36 l
-4463.16 4779.12 4459.48 4775.56 4457.08 4775.56 c
-4455.8 4775.56 4455 4776.77 4455 4778.16 c
-4455 4779.6 4455.62 4783.76 4456.12 4786.48 c
-4470.68 4839.92 l
-4462.22 4838 4451.26 4836.4 4439.04 4835.44 c
-4439.04 4831 l
-4440.44 4831 l
-4445.24 4831 4448.48 4829.44 4448.48 4826.48 c
-4448.48 4825.2 4447.71 4822.8 4446.68 4820.08 c
-4437.4 4785.68 l
-4436.12 4781.04 4436 4776.88 4436 4774.64 c
-4436 4768.56 4440.2 4764.56 4446.36 4764.56 c
-4455.96 4764.56 4461.88 4769.36 4473.08 4786.32 c
-h
-4465.88 4875.4 m
-4460.44 4875.4 4456 4870.46 4456 4865.04 c
-4456 4858.8 4460.26 4854.4 4466.04 4854.4 c
-4472.12 4854.4 4477 4858.86 4477 4864.56 c
-4477 4870.48 4472 4875.4 4465.88 4875.4 c
-h
-4479.48 4766 m
-f*
-4553.36 4787.6 m
-4546.96 4777.68 4544.88 4775.56 4542.16 4775.56 c
-4540.88 4775.56 4540 4776.63 4540 4778.16 c
-4540 4779.76 4540.94 4783.12 4543.92 4792.08 c
-4549.68 4809.52 l
-4552.24 4817.04 4554 4824.08 4554 4827.92 c
-4554 4835.76 4549.78 4840.08 4542.16 4840.08 c
-4536.24 4840.08 4530.48 4837.62 4526.16 4833.36 c
-4520.24 4827.76 4517.2 4823.92 4506.48 4808.08 c
-4516.72 4839.76 l
-4506.48 4837.52 4493.68 4835.92 4484.72 4835.6 c
-4484.72 4830.8 l
-4491.44 4830.65 4493.36 4829.92 4493.36 4827.12 c
-4493.36 4825.2 4491.12 4816.72 4486 4798.64 c
-4482.32 4785.68 4481.2 4781.52 4477.04 4766 c
-4496.4 4766 l
-4503.92 4793.68 4509.68 4807.6 4519.6 4820.56 c
-4522.8 4824.88 4527.76 4828.08 4530.64 4828.08 c
-4532.72 4828.08 4535 4826.63 4535 4825.04 c
-4535 4824.56 4534.54 4823.28 4533.84 4821.68 c
-4525.04 4795.12 l
-4522.48 4787.44 4521 4778.32 4521 4774.16 c
-4521 4768.08 4524.84 4764.56 4531.44 4764.56 c
-4541.04 4764.56 4547.6 4770 4556.88 4785.52 c
-h
-4566.96 4766 m
-f*
-4644.48 4835 m
-4626.72 4835 l
-4621.28 4838.58 4616.48 4840.08 4609.12 4840.08 c
-4589.44 4840.08 4573 4827.05 4573 4810.8 c
-4573 4802.64 4577.35 4796.88 4586.4 4793.2 c
-4573.28 4785.84 4571 4783.6 4571 4777.68 c
-4571 4772.56 4573.89 4769.52 4580.96 4767.12 c
-4571.04 4764.72 4567.84 4763.44 4564 4760.4 c
-4561.44 4758.16 4560 4754.32 4560 4750.48 c
-4560 4740.08 4571.56 4734 4589.76 4734 c
-4612.32 4734 4628 4743.72 4628 4757.52 c
-4628 4767.28 4621.6 4772.56 4604.16 4777.52 c
-4595.68 4779.92 l
-4590.56 4781.36 4587 4783.6 4587 4786 c
-4587 4788.56 4589.68 4791.28 4592 4791.28 c
-4592.8 4791.28 4593.92 4791.24 4595.2 4791.12 c
-4596.96 4790.64 4598.24 4790 4600.16 4790 c
-4607.2 4790 4614.4 4792.09 4620.48 4795.92 c
-4629.76 4801.2 4635 4809.36 4635 4818.96 c
-4635 4821.64 4634.59 4823.32 4633.76 4826 c
-4644.48 4826 l
-h
-4586.4 4765.04 m
-4588.32 4764.88 4600.48 4760.72 4604 4759.12 c
-4608.48 4756.88 4611 4754.16 4611 4750 c
-4611 4742.96 4603.8 4739 4591.36 4739 c
-4580.96 4739 4574 4744.1 4574 4751.44 c
-4574 4754.48 4575.32 4757.2 4578.24 4760.24 c
-4580.32 4762.32 4585.12 4765.2 4586.4 4765.04 c
-h
-4608.8 4835.08 m
-4612.96 4835.08 4616 4831.19 4616 4825.52 c
-4616 4820.08 4614.08 4812.4 4611.36 4806.48 c
-4608 4799.12 4603.84 4795 4598.88 4795 c
-4594.56 4795 4592 4798.52 4592 4804.88 c
-4592 4811.28 4594.79 4821.04 4598.24 4827.12 c
-4601.28 4832.4 4604.64 4835.08 4608.8 4835.08 c
-h
-4648 4766 m
-f*
-1 i
-5048.15 4276.55 m
-5061.35 4314.95 5067.35 4354.55 5067.35 4395.35 c
-5067.35 4517.75 5010.95 4632.95 4913.75 4706.15 c
-S
-5002.55 4371.35 m
-5055.35 4306.55 l
-5138.15 4295.75 l
-4949.75 4116.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/gridplot.eps b/ast-5.3-1/sun211_figures/gridplot.eps
deleted file mode 100644
index 8d10486..0000000
--- a/ast-5.3-1/sun211_figures/gridplot.eps
+++ /dev/null
@@ -1,16726 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 97 220 409 571
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:41:43
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-1 0 1 rg
-533.21 1777.32 4343.81 4343.81 re
-Y
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2984 3317 l
-2985 3318 l
-2986 3319 l
-2987 3319 l
-2988 3320 l
-2990 3320 l
-2991 3321 l
-3005 3329 l
-3020 3338 l
-3034 3347 l
-3049 3356 l
-3063 3365 l
-3077 3375 l
-3091 3385 l
-3105 3395 l
-3118 3405 l
-3132 3415 l
-3145 3426 l
-3158 3436 l
-3171 3447 l
-3184 3459 l
-3197 3470 l
-3209 3482 l
-3222 3493 l
-3234 3505 l
-3246 3517 l
-3257 3530 l
-3269 3542 l
-3280 3555 l
-3291 3568 l
-3302 3581 l
-3313 3594 l
-3324 3607 l
-3334 3621 l
-3344 3634 l
-3354 3648 l
-3364 3662 l
-3373 3676 l
-3382 3691 l
-3391 3705 l
-3400 3720 l
-3409 3735 l
-3417 3750 l
-3425 3765 l
-3433 3780 l
-3441 3795 l
-3448 3810 l
-3455 3826 l
-3462 3842 l
-3469 3858 l
-3475 3873 l
-3481 3890 l
-3487 3906 l
-3492 3922 l
-3497 3938 l
-3502 3955 l
-3507 3971 l
-3512 3988 l
-3516 4005 l
-3519 4022 l
-3523 4039 l
-3526 4056 l
-3529 4073 l
-3532 4090 l
-3534 4107 l
-3536 4125 l
-3538 4142 l
-3539 4159 l
-3540 4177 l
-3541 4194 l
-3541 4212 l
-3541 4230 l
-3541 4247 l
-3541 4265 l
-3540 4283 l
-3538 4301 l
-3537 4318 l
-3535 4336 l
-3532 4354 l
-3529 4372 l
-3526 4390 l
-3523 4407 l
-3519 4425 l
-3515 4443 l
-3510 4461 l
-3505 4479 l
-3500 4496 l
-3494 4514 l
-3488 4531 l
-3481 4549 l
-3474 4567 l
-3467 4584 l
-3459 4601 l
-3451 4618 l
-3442 4636 l
-3433 4653 l
-3423 4670 l
-3413 4686 l
-3403 4703 l
-3392 4720 l
-3381 4736 l
-3369 4752 l
-3357 4768 l
-3344 4784 l
-3331 4800 l
-3318 4815 l
-3304 4831 l
-3289 4846 l
-3274 4860 l
-3259 4875 l
-3243 4889 l
-3227 4903 l
-3210 4917 l
-3193 4931 l
-3175 4944 l
-3157 4956 l
-3138 4969 l
-3119 4981 l
-3100 4993 l
-3080 5004 l
-3059 5015 l
-3038 5025 l
-3017 5035 l
-2995 5045 l
-2973 5054 l
-2951 5063 l
-2928 5071 l
-2904 5078 l
-2880 5085 l
-2856 5092 l
-2832 5098 l
-2807 5103 l
-2782 5108 l
-2756 5112 l
-2730 5115 l
-2704 5118 l
-2678 5120 l
-2651 5121 l
-2624 5122 l
-2597 5122 l
-2569 5121 l
-2542 5120 l
-2514 5117 l
-2487 5114 l
-2459 5110 l
-2431 5106 l
-2403 5100 l
-2375 5094 l
-2347 5087 l
-2319 5079 l
-2292 5071 l
-2264 5061 l
-2237 5051 l
-2235 5050 l
-2233 5050 l
-2231 5049 l
-2229 5048 l
-2227 5047 l
-2225 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2983 3318 l
-2983 3319 l
-2983 3320 l
-2984 3321 l
-2984 3322 l
-2984 3323 l
-2984 3324 l
-2985 3337 l
-2986 3351 l
-2987 3364 l
-2988 3378 l
-2989 3392 l
-2990 3406 l
-2991 3420 l
-2991 3434 l
-2992 3448 l
-2992 3462 l
-2992 3476 l
-2992 3490 l
-2992 3504 l
-2992 3518 l
-2992 3533 l
-2992 3547 l
-2992 3561 l
-2991 3576 l
-2991 3590 l
-2990 3605 l
-2989 3619 l
-2988 3634 l
-2988 3648 l
-2986 3663 l
-2985 3678 l
-2984 3692 l
-2983 3707 l
-2982 3722 l
-2980 3736 l
-2978 3751 l
-2977 3766 l
-2975 3780 l
-2973 3795 l
-2971 3810 l
-2969 3825 l
-2967 3839 l
-2965 3854 l
-2963 3869 l
-2961 3884 l
-2958 3899 l
-2956 3913 l
-2953 3928 l
-2950 3943 l
-2948 3958 l
-2945 3972 l
-2942 3987 l
-2939 4002 l
-2936 4016 l
-2933 4031 l
-2929 4046 l
-2926 4060 l
-2923 4075 l
-2919 4089 l
-2916 4104 l
-2912 4119 l
-2908 4133 l
-2904 4147 l
-2900 4162 l
-2897 4176 l
-2893 4191 l
-2888 4205 l
-2884 4219 l
-2880 4233 l
-2876 4247 l
-2871 4262 l
-2867 4276 l
-2862 4290 l
-2858 4304 l
-2853 4317 l
-2848 4331 l
-2843 4345 l
-2838 4359 l
-2833 4372 l
-2828 4386 l
-2823 4400 l
-2818 4413 l
-2812 4426 l
-2807 4440 l
-2802 4453 l
-2796 4466 l
-2790 4479 l
-2785 4492 l
-2779 4505 l
-2773 4518 l
-2767 4531 l
-2761 4543 l
-2755 4556 l
-2749 4568 l
-2743 4581 l
-2737 4593 l
-2730 4605 l
-2724 4617 l
-2717 4629 l
-2711 4641 l
-2704 4653 l
-2697 4664 l
-2691 4676 l
-2684 4687 l
-2677 4699 l
-2670 4710 l
-2662 4721 l
-2655 4732 l
-2648 4743 l
-2641 4753 l
-2633 4764 l
-2626 4774 l
-2618 4785 l
-2610 4795 l
-2602 4805 l
-2594 4815 l
-2586 4825 l
-2578 4834 l
-2570 4844 l
-2562 4853 l
-2554 4862 l
-2545 4871 l
-2537 4880 l
-2528 4888 l
-2519 4897 l
-2510 4905 l
-2501 4913 l
-2492 4921 l
-2483 4929 l
-2474 4937 l
-2464 4944 l
-2455 4951 l
-2445 4958 l
-2435 4965 l
-2425 4972 l
-2415 4978 l
-2405 4984 l
-2394 4990 l
-2384 4996 l
-2373 5001 l
-2362 5006 l
-2351 5011 l
-2340 5016 l
-2328 5020 l
-2317 5025 l
-2305 5028 l
-2293 5032 l
-2281 5035 l
-2268 5038 l
-2256 5041 l
-2243 5043 l
-2230 5045 l
-2229 5045 l
-2228 5045 l
-2227 5045 l
-2226 5045 l
-2225 5045 l
-2224 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2982 3317 l
-2981 3318 l
-2980 3318 l
-2979 3318 l
-2978 3319 l
-2977 3319 l
-2976 3320 l
-2963 3325 l
-2950 3331 l
-2936 3336 l
-2923 3342 l
-2910 3348 l
-2896 3355 l
-2883 3361 l
-2870 3368 l
-2857 3374 l
-2844 3381 l
-2831 3388 l
-2818 3396 l
-2805 3403 l
-2792 3410 l
-2779 3418 l
-2766 3426 l
-2754 3434 l
-2741 3442 l
-2728 3450 l
-2716 3458 l
-2703 3467 l
-2691 3475 l
-2678 3484 l
-2666 3493 l
-2654 3502 l
-2642 3511 l
-2630 3520 l
-2618 3529 l
-2606 3539 l
-2594 3548 l
-2582 3558 l
-2570 3567 l
-2559 3577 l
-2547 3587 l
-2535 3597 l
-2524 3608 l
-2513 3618 l
-2501 3628 l
-2490 3639 l
-2479 3649 l
-2468 3660 l
-2457 3671 l
-2446 3682 l
-2436 3693 l
-2425 3704 l
-2415 3715 l
-2404 3726 l
-2394 3737 l
-2384 3749 l
-2373 3760 l
-2363 3772 l
-2353 3783 l
-2344 3795 l
-2334 3807 l
-2324 3819 l
-2315 3831 l
-2305 3843 l
-2296 3855 l
-2287 3867 l
-2278 3879 l
-2269 3892 l
-2260 3904 l
-2252 3916 l
-2243 3929 l
-2235 3942 l
-2226 3954 l
-2218 3967 l
-2210 3980 l
-2202 3992 l
-2194 4005 l
-2187 4018 l
-2179 4031 l
-2172 4044 l
-2165 4057 l
-2158 4070 l
-2151 4083 l
-2144 4096 l
-2137 4110 l
-2131 4123 l
-2125 4136 l
-2118 4150 l
-2112 4163 l
-2107 4176 l
-2101 4190 l
-2095 4203 l
-2090 4217 l
-2085 4231 l
-2080 4244 l
-2075 4258 l
-2070 4271 l
-2066 4285 l
-2062 4299 l
-2058 4312 l
-2054 4326 l
-2050 4340 l
-2046 4354 l
-2043 4368 l
-2040 4381 l
-2037 4395 l
-2034 4409 l
-2032 4423 l
-2029 4437 l
-2027 4451 l
-2025 4465 l
-2024 4479 l
-2022 4493 l
-2021 4507 l
-2020 4521 l
-2019 4535 l
-2019 4548 l
-2019 4562 l
-2019 4576 l
-2019 4590 l
-2019 4604 l
-2020 4618 l
-2021 4632 l
-2022 4646 l
-2024 4660 l
-2026 4674 l
-2028 4688 l
-2031 4702 l
-2033 4716 l
-2036 4730 l
-2040 4744 l
-2044 4758 l
-2048 4771 l
-2052 4785 l
-2057 4799 l
-2062 4813 l
-2068 4827 l
-2073 4840 l
-2080 4854 l
-2086 4868 l
-2094 4881 l
-2101 4895 l
-2109 4908 l
-2117 4922 l
-2126 4935 l
-2136 4949 l
-2146 4962 l
-2156 4975 l
-2167 4988 l
-2178 5001 l
-2190 5014 l
-2203 5027 l
-2216 5039 l
-2217 5040 l
-2218 5041 l
-2219 5042 l
-2220 5043 l
-2221 5044 l
-2222 5045 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2982 3316 l
-2981 3316 l
-2980 3315 l
-2979 3315 l
-2978 3314 l
-2977 3313 l
-2976 3313 l
-2961 3305 l
-2946 3297 l
-2930 3290 l
-2915 3282 l
-2899 3275 l
-2884 3268 l
-2868 3262 l
-2852 3256 l
-2836 3250 l
-2820 3244 l
-2804 3238 l
-2788 3233 l
-2772 3228 l
-2755 3223 l
-2739 3219 l
-2722 3214 l
-2706 3210 l
-2689 3207 l
-2672 3203 l
-2656 3200 l
-2639 3197 l
-2622 3194 l
-2605 3192 l
-2588 3190 l
-2571 3188 l
-2554 3187 l
-2537 3185 l
-2520 3185 l
-2502 3184 l
-2485 3184 l
-2468 3184 l
-2451 3184 l
-2433 3184 l
-2416 3185 l
-2399 3186 l
-2382 3188 l
-2364 3190 l
-2347 3192 l
-2330 3194 l
-2313 3197 l
-2295 3200 l
-2278 3203 l
-2261 3207 l
-2244 3211 l
-2227 3215 l
-2210 3220 l
-2193 3225 l
-2176 3231 l
-2159 3236 l
-2143 3242 l
-2126 3249 l
-2109 3255 l
-2093 3263 l
-2076 3270 l
-2060 3278 l
-2044 3286 l
-2028 3294 l
-2012 3303 l
-1996 3313 l
-1980 3322 l
-1965 3332 l
-1949 3342 l
-1934 3353 l
-1919 3364 l
-1904 3376 l
-1889 3388 l
-1875 3400 l
-1860 3412 l
-1846 3425 l
-1832 3439 l
-1818 3452 l
-1805 3466 l
-1792 3481 l
-1779 3496 l
-1766 3511 l
-1753 3527 l
-1741 3543 l
-1729 3559 l
-1718 3576 l
-1707 3593 l
-1696 3611 l
-1685 3629 l
-1675 3647 l
-1665 3666 l
-1655 3685 l
-1646 3704 l
-1638 3724 l
-1629 3744 l
-1621 3765 l
-1614 3786 l
-1607 3807 l
-1600 3828 l
-1594 3850 l
-1589 3873 l
-1584 3895 l
-1579 3918 l
-1576 3941 l
-1572 3965 l
-1569 3989 l
-1567 4013 l
-1566 4037 l
-1565 4061 l
-1564 4086 l
-1564 4111 l
-1565 4136 l
-1567 4162 l
-1569 4187 l
-1572 4213 l
-1576 4239 l
-1580 4265 l
-1585 4291 l
-1591 4317 l
-1598 4343 l
-1605 4369 l
-1613 4395 l
-1622 4421 l
-1632 4447 l
-1642 4473 l
-1653 4499 l
-1665 4524 l
-1678 4550 l
-1691 4575 l
-1705 4600 l
-1720 4625 l
-1736 4649 l
-1753 4673 l
-1770 4697 l
-1788 4720 l
-1806 4743 l
-1826 4765 l
-1846 4787 l
-1866 4808 l
-1888 4829 l
-1909 4849 l
-1932 4869 l
-1955 4888 l
-1978 4907 l
-2002 4924 l
-2027 4941 l
-2052 4958 l
-2077 4973 l
-2103 4988 l
-2129 5002 l
-2156 5016 l
-2182 5028 l
-2209 5040 l
-2211 5041 l
-2213 5042 l
-2215 5043 l
-2217 5043 l
-2219 5044 l
-2221 5045 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2983 3316 l
-2983 3315 l
-2983 3314 l
-2983 3313 l
-2983 3312 l
-2983 3311 l
-2982 3310 l
-2981 3297 l
-2979 3283 l
-2977 3270 l
-2976 3257 l
-2974 3244 l
-2971 3231 l
-2969 3218 l
-2967 3205 l
-2964 3192 l
-2962 3179 l
-2959 3167 l
-2956 3154 l
-2953 3142 l
-2950 3130 l
-2947 3117 l
-2943 3105 l
-2940 3093 l
-2936 3081 l
-2932 3069 l
-2928 3057 l
-2924 3046 l
-2920 3034 l
-2915 3023 l
-2911 3012 l
-2906 3000 l
-2901 2989 l
-2896 2978 l
-2890 2967 l
-2885 2957 l
-2879 2946 l
-2873 2936 l
-2867 2925 l
-2861 2915 l
-2855 2905 l
-2848 2895 l
-2841 2885 l
-2834 2876 l
-2827 2866 l
-2819 2857 l
-2811 2848 l
-2803 2839 l
-2795 2830 l
-2786 2821 l
-2778 2813 l
-2768 2804 l
-2759 2796 l
-2749 2788 l
-2739 2781 l
-2729 2773 l
-2718 2766 l
-2707 2759 l
-2695 2752 l
-2684 2745 l
-2671 2739 l
-2659 2733 l
-2645 2727 l
-2632 2722 l
-2618 2717 l
-2603 2712 l
-2588 2707 l
-2572 2703 l
-2556 2700 l
-2539 2696 l
-2521 2694 l
-2503 2691 l
-2483 2689 l
-2464 2688 l
-2443 2687 l
-2421 2687 l
-2399 2688 l
-2375 2690 l
-2351 2692 l
-2326 2695 l
-2299 2700 l
-2271 2705 l
-2242 2712 l
-2212 2720 l
-2180 2729 l
-2148 2741 l
-2113 2754 l
-2077 2769 l
-2040 2787 l
-2002 2807 l
-1962 2829 l
-1920 2855 l
-1878 2884 l
-1834 2917 l
-1831 2919 l
-1828 2922 l
-1825 2924 l
-1822 2927 l
-1819 2930 l
-1816 2932 l
-1812 2935 l
-1809 2937 l
-1806 2940 l
-1803 2943 l
-1800 2945 l
-1797 2948 l
-1793 2951 l
-1790 2954 l
-1787 2956 l
-1784 2959 l
-1781 2962 l
-1777 2965 l
-1774 2968 l
-1771 2971 l
-1768 2974 l
-1765 2976 l
-1761 2979 l
-1758 2982 l
-1755 2985 l
-1752 2988 l
-1749 2991 l
-1745 2994 l
-1742 2998 l
-1739 3001 l
-1736 3004 l
-1732 3007 l
-1729 3010 l
-1726 3013 l
-1723 3017 l
-1720 3020 l
-1716 3023 l
-1713 3026 l
-1710 3030 l
-1707 3033 l
-1703 3036 l
-1700 3040 l
-1697 3043 l
-1694 3047 l
-1691 3050 l
-1687 3054 l
-1684 3057 l
-1681 3061 l
-1678 3064 l
-1675 3068 l
-1671 3071 l
-1668 3075 l
-1665 3079 l
-1662 3082 l
-1659 3086 l
-1655 3090 l
-1652 3094 l
-1649 3097 l
-1646 3101 l
-1643 3105 l
-1640 3109 l
-1636 3113 l
-1633 3117 l
-1630 3121 l
-1627 3125 l
-1624 3129 l
-1621 3133 l
-1618 3137 l
-1614 3141 l
-1611 3145 l
-1608 3149 l
-1605 3153 l
-1602 3157 l
-1599 3161 l
-1596 3165 l
-1593 3170 l
-1590 3174 l
-1587 3178 l
-1584 3183 l
-1581 3187 l
-1578 3191 l
-1575 3196 l
-1572 3200 l
-1569 3204 l
-1566 3209 l
-1563 3213 l
-1560 3218 l
-1557 3222 l
-1554 3227 l
-1551 3231 l
-1548 3236 l
-1545 3241 l
-1542 3245 l
-1539 3250 l
-1536 3255 l
-1534 3259 l
-1531 3264 l
-1528 3269 l
-1525 3274 l
-1522 3279 l
-1519 3283 l
-1517 3288 l
-1514 3293 l
-S
-1514 3293 m
-1511 3298 l
-1508 3303 l
-1506 3308 l
-1503 3313 l
-1500 3318 l
-1498 3323 l
-1495 3328 l
-1492 3333 l
-1490 3338 l
-1487 3343 l
-1485 3348 l
-1482 3353 l
-1479 3359 l
-1477 3364 l
-1474 3369 l
-1472 3374 l
-1469 3379 l
-1467 3385 l
-1465 3390 l
-1462 3395 l
-1460 3401 l
-1457 3406 l
-1455 3411 l
-1453 3417 l
-1450 3422 l
-1448 3428 l
-1446 3433 l
-1443 3438 l
-1441 3444 l
-1439 3449 l
-1437 3455 l
-1435 3461 l
-1432 3466 l
-1430 3472 l
-1428 3477 l
-1426 3483 l
-1424 3488 l
-1422 3494 l
-1420 3500 l
-1418 3505 l
-1416 3511 l
-1414 3517 l
-1412 3522 l
-1410 3528 l
-1408 3534 l
-1407 3540 l
-1405 3545 l
-1403 3551 l
-1401 3557 l
-1399 3563 l
-1398 3569 l
-1396 3574 l
-1394 3580 l
-1393 3586 l
-1391 3592 l
-1390 3598 l
-1388 3604 l
-1386 3609 l
-1385 3615 l
-1383 3621 l
-1382 3627 l
-1381 3633 l
-1379 3639 l
-1378 3645 l
-1376 3651 l
-1375 3657 l
-1374 3663 l
-1373 3669 l
-1371 3675 l
-1370 3681 l
-1369 3687 l
-1368 3693 l
-1367 3699 l
-1365 3705 l
-1364 3711 l
-1363 3717 l
-1362 3723 l
-1361 3729 l
-1360 3735 l
-1359 3741 l
-1359 3747 l
-1358 3753 l
-1357 3759 l
-1356 3765 l
-1355 3771 l
-1354 3777 l
-1354 3783 l
-1353 3789 l
-1352 3795 l
-1352 3801 l
-1351 3807 l
-1350 3813 l
-1350 3819 l
-1349 3825 l
-1349 3831 l
-1348 3837 l
-1348 3843 l
-1347 3849 l
-1347 3855 l
-1347 3861 l
-1346 3867 l
-1346 3873 l
-1346 3879 l
-1345 3885 l
-1345 3891 l
-1345 3897 l
-1345 3902 l
-1345 3908 l
-1344 3914 l
-1344 3920 l
-1344 3926 l
-1344 3932 l
-1344 3938 l
-1344 3944 l
-1344 3950 l
-1344 3956 l
-1344 3961 l
-1344 3967 l
-1345 3973 l
-1345 3979 l
-1345 3985 l
-1345 3991 l
-1345 3996 l
-1346 4002 l
-1346 4008 l
-1346 4014 l
-1346 4019 l
-1347 4025 l
-1347 4031 l
-1348 4037 l
-1348 4042 l
-1348 4048 l
-1349 4054 l
-1349 4059 l
-1350 4065 l
-1350 4071 l
-1351 4076 l
-1352 4082 l
-1352 4087 l
-1353 4093 l
-1354 4098 l
-1354 4104 l
-1355 4109 l
-1356 4115 l
-1356 4120 l
-1357 4126 l
-1358 4131 l
-1359 4137 l
-1360 4142 l
-1360 4148 l
-1361 4153 l
-1362 4158 l
-1363 4164 l
-1364 4169 l
-1365 4174 l
-1366 4180 l
-1367 4185 l
-1368 4190 l
-1369 4195 l
-1370 4201 l
-1371 4206 l
-1372 4211 l
-1373 4216 l
-1374 4221 l
-1375 4226 l
-1377 4231 l
-1378 4236 l
-1379 4242 l
-1380 4247 l
-1381 4252 l
-1383 4257 l
-1384 4262 l
-1385 4267 l
-1386 4271 l
-1388 4276 l
-1389 4281 l
-1390 4286 l
-1392 4291 l
-1393 4296 l
-1394 4301 l
-1396 4305 l
-1397 4310 l
-1399 4315 l
-1400 4320 l
-1401 4324 l
-1403 4329 l
-1404 4334 l
-1406 4338 l
-1407 4343 l
-1409 4348 l
-1410 4352 l
-1412 4357 l
-1413 4361 l
-1415 4366 l
-1416 4370 l
-1418 4375 l
-1420 4379 l
-1421 4384 l
-1423 4388 l
-S
-1423 4388 m
-1424 4392 l
-1426 4397 l
-1428 4401 l
-1429 4406 l
-1431 4410 l
-1433 4414 l
-1434 4418 l
-1436 4423 l
-1438 4427 l
-1439 4431 l
-1441 4435 l
-1443 4439 l
-1445 4443 l
-1446 4448 l
-1448 4452 l
-1450 4456 l
-1452 4460 l
-1453 4464 l
-1455 4468 l
-1457 4472 l
-1483 4525 l
-1509 4575 l
-1537 4620 l
-1564 4662 l
-1592 4701 l
-1620 4736 l
-1647 4769 l
-1674 4798 l
-1701 4825 l
-1727 4850 l
-1753 4872 l
-1778 4893 l
-1802 4911 l
-1826 4928 l
-1849 4944 l
-1871 4958 l
-1893 4970 l
-1914 4981 l
-1935 4991 l
-1955 5001 l
-1975 5009 l
-1994 5016 l
-2012 5022 l
-2030 5028 l
-2048 5032 l
-2065 5037 l
-2082 5040 l
-2098 5043 l
-2114 5045 l
-2130 5047 l
-2145 5048 l
-2160 5048 l
-2174 5049 l
-2189 5048 l
-2203 5048 l
-2216 5046 l
-2217 5046 l
-2218 5046 l
-2219 5046 l
-2220 5046 l
-2221 5046 l
-2222 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2984 3316 l
-2985 3316 l
-2986 3316 l
-2987 3315 l
-2988 3315 l
-2989 3315 l
-2990 3314 l
-3003 3309 l
-3017 3304 l
-3030 3299 l
-3044 3295 l
-3058 3291 l
-3071 3286 l
-3085 3282 l
-3099 3279 l
-3113 3275 l
-3126 3272 l
-3140 3268 l
-3154 3265 l
-3168 3263 l
-3182 3260 l
-3195 3258 l
-3209 3255 l
-3223 3254 l
-3237 3252 l
-3251 3250 l
-3265 3249 l
-3279 3248 l
-3293 3247 l
-3307 3247 l
-3321 3247 l
-3335 3247 l
-3349 3247 l
-3363 3247 l
-3377 3248 l
-3391 3249 l
-3405 3251 l
-3419 3252 l
-3433 3254 l
-3447 3257 l
-3461 3259 l
-3475 3262 l
-3489 3265 l
-3502 3269 l
-3516 3273 l
-3530 3277 l
-3544 3281 l
-3558 3286 l
-3572 3292 l
-3586 3297 l
-3600 3304 l
-3614 3310 l
-3627 3317 l
-3641 3324 l
-3655 3332 l
-3668 3341 l
-3682 3349 l
-3695 3359 l
-3709 3368 l
-3722 3379 l
-3736 3389 l
-3749 3401 l
-3762 3413 l
-3775 3425 l
-3788 3438 l
-3801 3452 l
-3814 3467 l
-3826 3482 l
-3839 3498 l
-3851 3514 l
-3863 3532 l
-3875 3550 l
-3886 3569 l
-3897 3588 l
-3908 3609 l
-3919 3631 l
-3929 3653 l
-3939 3677 l
-3949 3701 l
-3958 3727 l
-3966 3753 l
-3974 3781 l
-3981 3809 l
-3988 3839 l
-3993 3870 l
-3998 3903 l
-4002 3936 l
-4005 3971 l
-4007 4006 l
-4007 4043 l
-4007 4082 l
-4005 4121 l
-4001 4161 l
-3996 4203 l
-3989 4245 l
-3980 4289 l
-3969 4333 l
-3957 4378 l
-3942 4423 l
-3925 4469 l
-3905 4515 l
-3884 4561 l
-3860 4607 l
-3834 4653 l
-3805 4698 l
-3774 4742 l
-3741 4785 l
-3706 4827 l
-3669 4868 l
-3631 4907 l
-3590 4944 l
-3549 4979 l
-3506 5012 l
-3462 5043 l
-3417 5072 l
-3372 5098 l
-3327 5122 l
-3281 5144 l
-3236 5163 l
-3190 5181 l
-3146 5196 l
-3101 5209 l
-3058 5220 l
-3015 5229 l
-2973 5236 l
-2932 5242 l
-2892 5246 l
-2854 5248 l
-2816 5249 l
-2779 5249 l
-2744 5247 l
-2710 5245 l
-2677 5241 l
-2645 5237 l
-2615 5232 l
-2585 5226 l
-2557 5219 l
-2529 5211 l
-2503 5203 l
-2478 5195 l
-2454 5186 l
-2430 5176 l
-2408 5167 l
-2387 5156 l
-2366 5146 l
-2346 5135 l
-2327 5124 l
-2309 5112 l
-2292 5101 l
-2276 5089 l
-2260 5077 l
-2245 5064 l
-2230 5052 l
-2229 5051 l
-2228 5050 l
-2227 5049 l
-2226 5048 l
-2225 5047 l
-2224 5047 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-3302 3581 m
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3301 3582 l
-3301 3582 l
-3300 3583 l
-3299 3584 l
-3299 3584 l
-3298 3585 l
-3298 3585 l
-3297 3586 l
-3297 3586 l
-3296 3587 l
-3295 3588 l
-3295 3588 l
-3294 3589 l
-3286 3596 l
-3277 3603 l
-3268 3610 l
-3259 3617 l
-3249 3623 l
-3239 3628 l
-3229 3634 l
-3218 3639 l
-3207 3643 l
-3196 3648 l
-3185 3651 l
-3174 3655 l
-3162 3658 l
-3150 3661 l
-3138 3663 l
-3126 3665 l
-3114 3666 l
-3101 3668 l
-3089 3669 l
-3076 3669 l
-3064 3669 l
-3051 3669 l
-3038 3669 l
-3025 3668 l
-3012 3666 l
-2999 3665 l
-2986 3663 l
-2974 3661 l
-2961 3658 l
-2948 3655 l
-2935 3652 l
-2922 3649 l
-2909 3645 l
-2897 3641 l
-2884 3636 l
-2872 3632 l
-2859 3627 l
-2847 3621 l
-2835 3616 l
-2823 3610 l
-2811 3604 l
-2799 3597 l
-2787 3591 l
-2776 3584 l
-2765 3577 l
-2754 3569 l
-2743 3562 l
-2733 3554 l
-2722 3546 l
-2712 3537 l
-2703 3529 l
-2693 3520 l
-2684 3511 l
-2675 3502 l
-2666 3493 l
-2658 3483 l
-2650 3473 l
-2642 3464 l
-2635 3454 l
-2628 3443 l
-2621 3433 l
-2615 3423 l
-2609 3412 l
-2604 3401 l
-2599 3391 l
-2594 3380 l
-2590 3369 l
-2586 3358 l
-2583 3347 l
-2580 3335 l
-2577 3324 l
-2575 3313 l
-2574 3302 l
-2573 3290 l
-2573 3279 l
-2573 3268 l
-2573 3256 l
-2574 3245 l
-2576 3234 l
-2578 3223 l
-2581 3212 l
-2584 3201 l
-2588 3190 l
-2592 3179 l
-2597 3169 l
-2603 3158 l
-2609 3148 l
-2616 3138 l
-2623 3128 l
-2631 3119 l
-2639 3110 l
-2648 3101 l
-2658 3092 l
-2668 3084 l
-2678 3076 l
-2689 3068 l
-2701 3061 l
-2713 3054 l
-2726 3048 l
-2739 3042 l
-2753 3036 l
-2767 3031 l
-2782 3027 l
-2796 3023 l
-2812 3020 l
-2828 3017 l
-2844 3014 l
-2860 3013 l
-2877 3012 l
-2894 3011 l
-2911 3012 l
-2928 3012 l
-2945 3014 l
-2963 3016 l
-2980 3019 l
-2998 3022 l
-3015 3026 l
-3033 3031 l
-3050 3036 l
-3067 3042 l
-3084 3049 l
-3101 3056 l
-3118 3064 l
-3134 3072 l
-3150 3081 l
-3165 3090 l
-3181 3100 l
-3195 3110 l
-3210 3121 l
-3223 3132 l
-3236 3144 l
-3249 3156 l
-3261 3168 l
-3273 3181 l
-3284 3193 l
-3294 3206 l
-3303 3220 l
-3312 3233 l
-3321 3247 l
-3328 3260 l
-3335 3274 l
-3342 3288 l
-3347 3302 l
-3352 3315 l
-3357 3329 l
-3360 3343 l
-3363 3356 l
-3366 3370 l
-3367 3383 l
-3369 3396 l
-3369 3409 l
-3369 3422 l
-3368 3435 l
-3367 3447 l
-3365 3459 l
-3362 3471 l
-3359 3482 l
-3356 3494 l
-3352 3505 l
-3347 3515 l
-3342 3526 l
-3337 3536 l
-3331 3545 l
-3324 3555 l
-3317 3564 l
-3310 3572 l
-3302 3581 l
-S
-3500 3947 m
-3500 3947 l
-3500 3947 l
-3500 3947 l
-3500 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3498 3948 l
-3496 3949 l
-3495 3950 l
-3494 3951 l
-3493 3951 l
-3492 3952 l
-3490 3953 l
-3489 3954 l
-3488 3954 l
-3487 3955 l
-3486 3956 l
-3484 3957 l
-3483 3957 l
-3466 3968 l
-3448 3977 l
-3430 3986 l
-3412 3994 l
-3393 4002 l
-3374 4008 l
-3354 4015 l
-3335 4020 l
-3315 4025 l
-3295 4030 l
-3275 4034 l
-3254 4037 l
-3234 4040 l
-3213 4042 l
-3192 4044 l
-3171 4045 l
-3149 4045 l
-3128 4045 l
-3107 4045 l
-3085 4044 l
-3064 4042 l
-3042 4041 l
-3021 4038 l
-2999 4035 l
-2977 4032 l
-2956 4028 l
-2934 4024 l
-2913 4019 l
-2891 4014 l
-2870 4008 l
-2848 4002 l
-2827 3996 l
-2806 3989 l
-2785 3981 l
-2764 3974 l
-2743 3966 l
-2722 3957 l
-2701 3948 l
-2681 3939 l
-2661 3929 l
-2641 3919 l
-2621 3909 l
-2601 3898 l
-2582 3887 l
-2563 3876 l
-2544 3864 l
-2526 3852 l
-2507 3839 l
-2489 3826 l
-2472 3813 l
-2454 3800 l
-2437 3786 l
-2421 3772 l
-2405 3758 l
-2389 3743 l
-2373 3728 l
-2358 3713 l
-2343 3697 l
-2329 3681 l
-2315 3665 l
-2302 3649 l
-2289 3632 l
-2277 3615 l
-2265 3598 l
-2254 3581 l
-2243 3563 l
-2233 3545 l
-2224 3527 l
-2215 3509 l
-2207 3490 l
-2199 3472 l
-2192 3453 l
-2186 3433 l
-2181 3414 l
-2176 3395 l
-2172 3375 l
-2169 3355 l
-2166 3335 l
-2165 3315 l
-2164 3295 l
-2164 3274 l
-2166 3254 l
-2168 3233 l
-2171 3213 l
-2175 3192 l
-2180 3172 l
-2186 3151 l
-2194 3130 l
-2202 3110 l
-2212 3089 l
-2223 3069 l
-2235 3049 l
-2249 3029 l
-2264 3009 l
-2280 2990 l
-2297 2971 l
-2316 2952 l
-2336 2934 l
-2358 2916 l
-2382 2899 l
-2406 2883 l
-2433 2867 l
-2461 2853 l
-2490 2839 l
-2521 2826 l
-2553 2814 l
-2586 2804 l
-2622 2795 l
-2658 2787 l
-2695 2781 l
-2734 2777 l
-2774 2774 l
-2814 2773 l
-2856 2775 l
-2898 2778 l
-2940 2783 l
-2983 2790 l
-3026 2799 l
-3068 2810 l
-3111 2824 l
-3153 2839 l
-3194 2856 l
-3234 2876 l
-3273 2897 l
-3312 2920 l
-3348 2944 l
-3383 2970 l
-3417 2997 l
-3449 3025 l
-3479 3054 l
-3507 3084 l
-3533 3115 l
-3557 3146 l
-3580 3178 l
-3600 3209 l
-3618 3241 l
-3634 3273 l
-3649 3305 l
-3662 3336 l
-3672 3368 l
-3681 3398 l
-3689 3429 l
-3695 3458 l
-3699 3487 l
-3701 3516 l
-3703 3544 l
-3703 3571 l
-3701 3597 l
-3699 3623 l
-3695 3647 l
-3690 3671 l
-3684 3694 l
-3677 3717 l
-3669 3738 l
-3661 3759 l
-3651 3779 l
-3640 3798 l
-3629 3816 l
-3617 3834 l
-3605 3851 l
-3591 3867 l
-3577 3882 l
-3563 3896 l
-3548 3910 l
-3532 3923 l
-3516 3935 l
-3500 3947 l
-S
-3529 4372 m
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3526 4373 l
-3525 4374 l
-3523 4374 l
-3521 4375 l
-3520 4375 l
-3518 4376 l
-3516 4376 l
-3515 4377 l
-3513 4377 l
-3511 4378 l
-3510 4378 l
-3508 4379 l
-3507 4380 l
-3483 4387 l
-3460 4393 l
-3436 4399 l
-3413 4404 l
-3389 4408 l
-3364 4412 l
-3340 4415 l
-3316 4418 l
-3291 4420 l
-3266 4421 l
-3241 4422 l
-3216 4423 l
-3191 4423 l
-3166 4422 l
-3140 4421 l
-3115 4420 l
-3090 4418 l
-3064 4415 l
-3038 4412 l
-3013 4409 l
-2987 4405 l
-2961 4401 l
-2936 4396 l
-2910 4391 l
-2884 4385 l
-2859 4379 l
-2833 4372 l
-2808 4366 l
-2782 4358 l
-2757 4351 l
-2731 4343 l
-2706 4334 l
-2681 4325 l
-2656 4316 l
-2631 4306 l
-2606 4297 l
-2581 4286 l
-2557 4276 l
-2532 4265 l
-2508 4253 l
-2484 4242 l
-2460 4229 l
-2436 4217 l
-2413 4204 l
-2390 4191 l
-2367 4178 l
-2344 4164 l
-2322 4150 l
-2299 4136 l
-2277 4121 l
-2256 4107 l
-2234 4091 l
-2213 4076 l
-2192 4060 l
-2172 4044 l
-2152 4028 l
-2132 4011 l
-2113 3994 l
-2094 3977 l
-2075 3959 l
-2057 3942 l
-2039 3923 l
-2022 3905 l
-2005 3887 l
-1989 3868 l
-1973 3849 l
-1957 3829 l
-1942 3809 l
-1928 3790 l
-1914 3769 l
-1901 3749 l
-1888 3728 l
-1876 3707 l
-1864 3686 l
-1853 3664 l
-1843 3642 l
-1833 3620 l
-1824 3598 l
-1816 3575 l
-1809 3552 l
-1802 3529 l
-1797 3505 l
-1792 3481 l
-1788 3457 l
-1785 3432 l
-1783 3407 l
-1782 3382 l
-1782 3356 l
-1783 3330 l
-1785 3304 l
-1789 3277 l
-1794 3250 l
-1800 3222 l
-1808 3194 l
-1818 3166 l
-1829 3137 l
-1842 3108 l
-1858 3079 l
-1875 3049 l
-1895 3019 l
-1917 2989 l
-1941 2958 l
-1969 2927 l
-2000 2896 l
-2034 2865 l
-2072 2835 l
-2114 2805 l
-2117 2803 l
-2120 2801 l
-2123 2798 l
-2127 2796 l
-2130 2794 l
-2133 2792 l
-2136 2790 l
-2140 2788 l
-2143 2786 l
-2146 2784 l
-2150 2782 l
-2153 2780 l
-2156 2778 l
-2160 2775 l
-2163 2773 l
-2167 2771 l
-2170 2769 l
-2174 2767 l
-2177 2765 l
-2181 2763 l
-2185 2761 l
-2188 2759 l
-2192 2757 l
-2195 2755 l
-2199 2753 l
-2203 2751 l
-2207 2749 l
-2210 2747 l
-2214 2745 l
-2218 2743 l
-2222 2741 l
-2226 2739 l
-2229 2737 l
-2233 2735 l
-2237 2734 l
-2241 2732 l
-2245 2730 l
-2249 2728 l
-2253 2726 l
-2257 2724 l
-2261 2722 l
-2265 2720 l
-2270 2718 l
-2274 2717 l
-2278 2715 l
-2282 2713 l
-2286 2711 l
-2291 2709 l
-2295 2708 l
-2299 2706 l
-2304 2704 l
-2308 2702 l
-2312 2700 l
-2317 2699 l
-2321 2697 l
-2326 2695 l
-2330 2694 l
-2335 2692 l
-2339 2690 l
-2344 2689 l
-2348 2687 l
-2353 2685 l
-2358 2684 l
-2362 2682 l
-2367 2681 l
-2372 2679 l
-S
-2372 2679 m
-2376 2677 l
-2381 2676 l
-2386 2674 l
-2391 2673 l
-2396 2671 l
-2400 2670 l
-2405 2668 l
-2410 2667 l
-2415 2666 l
-2420 2664 l
-2425 2663 l
-2430 2661 l
-2435 2660 l
-2440 2659 l
-2446 2657 l
-2451 2656 l
-2456 2655 l
-2461 2653 l
-2466 2652 l
-2472 2651 l
-2477 2650 l
-2482 2649 l
-2487 2647 l
-2493 2646 l
-2498 2645 l
-2504 2644 l
-2509 2643 l
-2514 2642 l
-2520 2641 l
-2525 2640 l
-2531 2639 l
-2537 2638 l
-2542 2637 l
-2548 2636 l
-2553 2635 l
-2559 2634 l
-2565 2633 l
-2570 2633 l
-2576 2632 l
-2582 2631 l
-2588 2630 l
-2593 2630 l
-2599 2629 l
-2605 2628 l
-2611 2627 l
-2617 2627 l
-2623 2626 l
-2629 2626 l
-2635 2625 l
-2641 2625 l
-2647 2624 l
-2653 2624 l
-2659 2623 l
-2665 2623 l
-2671 2623 l
-2677 2622 l
-2683 2622 l
-2689 2622 l
-2696 2621 l
-2702 2621 l
-2708 2621 l
-2714 2621 l
-2721 2621 l
-2727 2621 l
-2733 2621 l
-2739 2621 l
-2746 2621 l
-2752 2621 l
-2759 2621 l
-2765 2621 l
-2771 2621 l
-2778 2621 l
-2784 2621 l
-2791 2622 l
-2797 2622 l
-2804 2622 l
-2810 2623 l
-2817 2623 l
-2823 2623 l
-2830 2624 l
-2836 2624 l
-2843 2625 l
-2850 2625 l
-2856 2626 l
-2863 2627 l
-2869 2627 l
-2876 2628 l
-2883 2629 l
-2889 2630 l
-2896 2631 l
-2903 2631 l
-2909 2632 l
-2916 2633 l
-2923 2634 l
-2929 2635 l
-2936 2636 l
-2943 2637 l
-2950 2639 l
-2956 2640 l
-2963 2641 l
-2970 2642 l
-2977 2644 l
-2983 2645 l
-2990 2646 l
-2997 2648 l
-3004 2649 l
-3010 2651 l
-3017 2652 l
-3024 2654 l
-3031 2655 l
-3038 2657 l
-3044 2659 l
-3051 2660 l
-3058 2662 l
-3065 2664 l
-3071 2666 l
-3078 2668 l
-3085 2670 l
-3092 2672 l
-3098 2674 l
-3105 2676 l
-3112 2678 l
-3119 2680 l
-3125 2682 l
-3132 2684 l
-3139 2687 l
-3146 2689 l
-3152 2691 l
-3159 2694 l
-3166 2696 l
-3172 2698 l
-3179 2701 l
-3186 2703 l
-3192 2706 l
-3199 2709 l
-3205 2711 l
-3212 2714 l
-3219 2717 l
-3225 2719 l
-3232 2722 l
-3238 2725 l
-3245 2728 l
-3251 2731 l
-3258 2734 l
-3264 2737 l
-3271 2740 l
-3277 2743 l
-3284 2746 l
-3290 2749 l
-3296 2752 l
-3303 2755 l
-3309 2758 l
-3315 2762 l
-3322 2765 l
-3328 2768 l
-3334 2772 l
-3340 2775 l
-3347 2778 l
-3353 2782 l
-3359 2785 l
-3365 2789 l
-3371 2792 l
-3377 2796 l
-3383 2800 l
-3389 2803 l
-3395 2807 l
-3401 2811 l
-3407 2814 l
-3413 2818 l
-3419 2822 l
-3425 2826 l
-3431 2829 l
-3437 2833 l
-3442 2837 l
-3448 2841 l
-3454 2845 l
-3460 2849 l
-3465 2853 l
-3471 2857 l
-3476 2861 l
-3482 2865 l
-3488 2869 l
-3493 2873 l
-3499 2878 l
-3504 2882 l
-3509 2886 l
-3515 2890 l
-3520 2894 l
-3525 2899 l
-3531 2903 l
-3536 2907 l
-3541 2911 l
-3546 2916 l
-3551 2920 l
-3556 2925 l
-3562 2929 l
-3567 2933 l
-3572 2938 l
-3577 2942 l
-S
-3577 2942 m
-3581 2947 l
-3586 2951 l
-3591 2956 l
-3596 2960 l
-3601 2965 l
-3606 2969 l
-3610 2974 l
-3615 2978 l
-3620 2983 l
-3624 2987 l
-3629 2992 l
-3633 2996 l
-3638 3001 l
-3642 3006 l
-3647 3010 l
-3651 3015 l
-3655 3020 l
-3660 3024 l
-3664 3029 l
-3668 3034 l
-3672 3038 l
-3676 3043 l
-3681 3048 l
-3685 3052 l
-3689 3057 l
-3693 3062 l
-3697 3067 l
-3701 3071 l
-3705 3076 l
-3708 3081 l
-3712 3086 l
-3716 3090 l
-3720 3095 l
-3724 3100 l
-3727 3105 l
-3731 3109 l
-3734 3114 l
-3738 3119 l
-3742 3124 l
-3745 3128 l
-3749 3133 l
-3752 3138 l
-3755 3143 l
-3759 3147 l
-3762 3152 l
-3765 3157 l
-3769 3162 l
-3772 3166 l
-3775 3171 l
-3778 3176 l
-3781 3181 l
-3784 3185 l
-3787 3190 l
-3791 3195 l
-3793 3200 l
-3796 3204 l
-3799 3209 l
-3802 3214 l
-3805 3219 l
-3808 3223 l
-3811 3228 l
-3813 3233 l
-3816 3238 l
-3819 3242 l
-3821 3247 l
-3824 3252 l
-3827 3256 l
-3829 3261 l
-3832 3266 l
-3834 3270 l
-3837 3275 l
-3839 3280 l
-3842 3284 l
-3844 3289 l
-3846 3294 l
-3849 3298 l
-3851 3303 l
-3853 3307 l
-3855 3312 l
-3858 3317 l
-3860 3321 l
-3862 3326 l
-3864 3330 l
-3866 3335 l
-3868 3339 l
-3870 3344 l
-3872 3348 l
-3874 3353 l
-3876 3358 l
-3878 3362 l
-3880 3366 l
-3882 3371 l
-3883 3375 l
-3885 3380 l
-3887 3384 l
-3889 3389 l
-3890 3393 l
-3892 3398 l
-3894 3402 l
-3895 3406 l
-3897 3411 l
-3899 3415 l
-3900 3419 l
-3902 3424 l
-3903 3428 l
-3905 3432 l
-3906 3437 l
-3907 3441 l
-3909 3445 l
-3910 3450 l
-3912 3454 l
-3913 3458 l
-3914 3462 l
-3916 3467 l
-3917 3471 l
-3918 3475 l
-3919 3479 l
-3920 3483 l
-3922 3488 l
-3923 3492 l
-3924 3496 l
-3925 3500 l
-3926 3504 l
-3927 3508 l
-3928 3512 l
-3929 3516 l
-3930 3520 l
-3931 3524 l
-3932 3528 l
-3933 3532 l
-3934 3536 l
-3935 3540 l
-3936 3544 l
-3937 3548 l
-3938 3552 l
-3938 3556 l
-3939 3560 l
-3940 3564 l
-3941 3568 l
-3941 3572 l
-3942 3576 l
-3950 3629 l
-3956 3679 l
-3958 3727 l
-3957 3772 l
-3955 3815 l
-3950 3855 l
-3944 3893 l
-3936 3930 l
-3926 3964 l
-3916 3996 l
-3904 4027 l
-3891 4055 l
-3877 4083 l
-3863 4108 l
-3847 4133 l
-3831 4156 l
-3814 4177 l
-3797 4197 l
-3779 4217 l
-3760 4235 l
-3741 4252 l
-3722 4268 l
-3702 4283 l
-3681 4297 l
-3661 4310 l
-3640 4322 l
-3618 4334 l
-3596 4344 l
-3574 4354 l
-3552 4363 l
-3529 4372 l
-S
-3338 4792 m
-3338 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3336 4792 l
-3336 4792 l
-3336 4792 l
-3335 4792 l
-3333 4792 l
-3332 4792 l
-3330 4792 l
-3329 4792 l
-3327 4792 l
-3326 4792 l
-3324 4792 l
-3323 4792 l
-3321 4792 l
-3320 4792 l
-3318 4792 l
-3316 4792 l
-3295 4792 l
-3273 4791 l
-3251 4790 l
-3229 4789 l
-3207 4787 l
-3185 4786 l
-3162 4783 l
-3139 4781 l
-3116 4778 l
-3093 4775 l
-3070 4772 l
-3047 4769 l
-3023 4765 l
-3000 4761 l
-2976 4756 l
-2952 4751 l
-2928 4746 l
-2904 4741 l
-2880 4736 l
-2856 4730 l
-2832 4724 l
-2808 4717 l
-2784 4711 l
-2760 4704 l
-2736 4697 l
-2711 4689 l
-2687 4682 l
-2663 4674 l
-2639 4665 l
-2614 4657 l
-2590 4648 l
-2566 4639 l
-2542 4630 l
-2518 4621 l
-2494 4611 l
-2470 4601 l
-2446 4591 l
-2423 4581 l
-2399 4570 l
-2376 4560 l
-2352 4549 l
-2329 4537 l
-2306 4526 l
-2283 4514 l
-2260 4503 l
-2237 4491 l
-2215 4478 l
-2192 4466 l
-2170 4453 l
-2148 4441 l
-2126 4428 l
-2105 4415 l
-2083 4401 l
-2062 4388 l
-2041 4375 l
-2021 4361 l
-2000 4347 l
-1980 4333 l
-1960 4319 l
-1940 4305 l
-1921 4290 l
-1902 4276 l
-1883 4261 l
-1864 4246 l
-1846 4232 l
-1828 4217 l
-1810 4202 l
-1793 4187 l
-1776 4171 l
-1759 4156 l
-1743 4141 l
-1727 4125 l
-1711 4110 l
-1696 4094 l
-1681 4079 l
-1666 4063 l
-1652 4048 l
-1638 4032 l
-1624 4016 l
-1611 4000 l
-1598 3985 l
-1586 3969 l
-1574 3953 l
-1562 3937 l
-1551 3921 l
-1540 3906 l
-1530 3890 l
-1520 3874 l
-1510 3858 l
-1501 3843 l
-1492 3827 l
-1484 3811 l
-1476 3796 l
-1469 3780 l
-1462 3765 l
-1455 3749 l
-1449 3734 l
-1443 3719 l
-1438 3703 l
-1433 3688 l
-1429 3673 l
-1425 3658 l
-1421 3643 l
-1418 3629 l
-1416 3614 l
-1414 3599 l
-1412 3585 l
-1411 3571 l
-1410 3556 l
-1410 3542 l
-1410 3528 l
-1411 3514 l
-1412 3500 l
-1414 3486 l
-1416 3473 l
-1419 3459 l
-1422 3444 l
-1427 3430 l
-1432 3414 l
-1439 3395 l
-1440 3393 l
-1441 3391 l
-1441 3389 l
-1442 3388 l
-1443 3386 l
-1444 3383 l
-1445 3381 l
-1446 3379 l
-1447 3376 l
-1448 3373 l
-1450 3370 l
-1451 3367 l
-1453 3363 l
-1455 3359 l
-1457 3354 l
-1460 3348 l
-1463 3341 l
-1468 3333 l
-1473 3322 l
-1480 3308 l
-1491 3289 l
-1507 3259 l
-1509 3256 l
-1510 3254 l
-1512 3251 l
-1514 3248 l
-1515 3245 l
-1517 3241 l
-1519 3238 l
-1522 3234 l
-1524 3231 l
-1526 3227 l
-1529 3223 l
-1531 3219 l
-1534 3214 l
-1537 3210 l
-1540 3205 l
-1543 3200 l
-1547 3194 l
-1551 3188 l
-1555 3182 l
-1559 3176 l
-1564 3169 l
-1568 3162 l
-1574 3154 l
-1580 3146 l
-1586 3138 l
-1593 3128 l
-1600 3118 l
-1608 3108 l
-1617 3096 l
-1627 3084 l
-1638 3070 l
-S
-1638 3070 m
-1650 3056 l
-1664 3040 l
-1679 3023 l
-1696 3004 l
-1716 2983 l
-1739 2960 l
-1765 2935 l
-1796 2908 l
-1832 2877 l
-1875 2844 l
-1926 2807 l
-1930 2804 l
-1934 2801 l
-1939 2798 l
-1943 2796 l
-1947 2793 l
-1952 2790 l
-1956 2787 l
-1960 2784 l
-1965 2781 l
-1970 2778 l
-1974 2775 l
-1979 2773 l
-1984 2770 l
-1989 2767 l
-1994 2764 l
-1999 2761 l
-2004 2758 l
-2009 2755 l
-2014 2752 l
-2020 2748 l
-2025 2745 l
-2030 2742 l
-2036 2739 l
-2042 2736 l
-2047 2733 l
-2053 2730 l
-2059 2727 l
-2065 2724 l
-2071 2720 l
-2077 2717 l
-2084 2714 l
-2090 2711 l
-2096 2708 l
-2103 2705 l
-2110 2701 l
-2116 2698 l
-2123 2695 l
-2130 2692 l
-2137 2689 l
-2144 2685 l
-2152 2682 l
-2159 2679 l
-2166 2676 l
-2174 2673 l
-2182 2669 l
-2190 2666 l
-2198 2663 l
-2206 2660 l
-2214 2657 l
-2222 2654 l
-2231 2651 l
-2239 2647 l
-2248 2644 l
-2257 2641 l
-2266 2638 l
-2275 2635 l
-2284 2632 l
-2293 2629 l
-2303 2626 l
-2312 2623 l
-2322 2621 l
-2332 2618 l
-2342 2615 l
-2353 2612 l
-2363 2610 l
-2373 2607 l
-2384 2604 l
-2395 2602 l
-2406 2599 l
-2417 2597 l
-2428 2595 l
-2440 2592 l
-2451 2590 l
-2463 2588 l
-2475 2586 l
-2487 2584 l
-2499 2582 l
-2512 2580 l
-2524 2578 l
-2537 2577 l
-2550 2575 l
-2563 2574 l
-2576 2573 l
-2589 2571 l
-2602 2570 l
-2616 2569 l
-2630 2569 l
-2644 2568 l
-2658 2567 l
-2672 2567 l
-2686 2567 l
-2701 2567 l
-2715 2567 l
-2730 2567 l
-2745 2567 l
-2760 2568 l
-2775 2568 l
-2790 2569 l
-2806 2570 l
-2821 2571 l
-2837 2573 l
-2852 2574 l
-2868 2576 l
-2884 2578 l
-2900 2580 l
-2916 2583 l
-2932 2585 l
-2948 2588 l
-2964 2591 l
-2980 2594 l
-2997 2598 l
-3013 2601 l
-3029 2605 l
-3046 2609 l
-3062 2613 l
-3078 2618 l
-3095 2623 l
-3111 2628 l
-3128 2633 l
-3144 2638 l
-3160 2644 l
-3177 2649 l
-3193 2655 l
-3209 2662 l
-3225 2668 l
-3241 2675 l
-3257 2682 l
-3273 2689 l
-3289 2696 l
-3305 2703 l
-3320 2711 l
-3336 2719 l
-3351 2727 l
-3366 2735 l
-3381 2743 l
-3396 2752 l
-3411 2760 l
-3426 2769 l
-3440 2778 l
-3455 2787 l
-3469 2797 l
-3483 2806 l
-3497 2815 l
-3510 2825 l
-3524 2835 l
-3537 2845 l
-3550 2855 l
-3563 2865 l
-3575 2875 l
-3588 2885 l
-3600 2895 l
-3612 2906 l
-3624 2916 l
-3636 2927 l
-3647 2937 l
-3658 2948 l
-3670 2958 l
-3680 2969 l
-3691 2980 l
-3701 2990 l
-3712 3001 l
-3722 3012 l
-3731 3023 l
-3741 3033 l
-3750 3044 l
-3760 3055 l
-3769 3066 l
-3777 3076 l
-3786 3087 l
-3794 3098 l
-3803 3108 l
-3811 3119 l
-3818 3129 l
-3826 3140 l
-3834 3150 l
-3841 3161 l
-3848 3171 l
-3855 3181 l
-3862 3192 l
-3868 3202 l
-3875 3212 l
-3881 3222 l
-3887 3232 l
-3893 3242 l
-3899 3252 l
-3905 3262 l
-3910 3271 l
-3916 3281 l
-S
-3916 3281 m
-3921 3291 l
-3926 3300 l
-3931 3309 l
-3936 3319 l
-3940 3328 l
-3945 3337 l
-3949 3346 l
-3954 3355 l
-3958 3364 l
-3962 3373 l
-3966 3382 l
-3970 3391 l
-3974 3399 l
-3977 3408 l
-3981 3416 l
-3984 3425 l
-3988 3433 l
-3991 3441 l
-3994 3449 l
-3997 3457 l
-4000 3465 l
-4003 3473 l
-4006 3481 l
-4009 3489 l
-4012 3496 l
-4014 3504 l
-4017 3512 l
-4019 3519 l
-4022 3526 l
-4024 3533 l
-4026 3541 l
-4028 3548 l
-4030 3555 l
-4032 3562 l
-4034 3569 l
-4036 3575 l
-4038 3582 l
-4040 3589 l
-4042 3595 l
-4043 3602 l
-4045 3608 l
-4047 3615 l
-4048 3621 l
-4050 3627 l
-4051 3633 l
-4053 3639 l
-4054 3645 l
-4055 3651 l
-4057 3657 l
-4058 3663 l
-4059 3669 l
-4060 3675 l
-4061 3680 l
-4062 3686 l
-4064 3691 l
-4065 3697 l
-4066 3702 l
-4066 3707 l
-4067 3713 l
-4068 3718 l
-4069 3723 l
-4070 3728 l
-4071 3733 l
-4072 3738 l
-4072 3743 l
-4073 3748 l
-4074 3753 l
-4074 3758 l
-4075 3762 l
-4076 3767 l
-4076 3772 l
-4077 3776 l
-4078 3781 l
-4078 3785 l
-4079 3790 l
-4079 3794 l
-4080 3799 l
-4080 3803 l
-4085 3859 l
-4087 3907 l
-4088 3949 l
-4087 3987 l
-4086 4019 l
-4084 4049 l
-4082 4075 l
-4080 4098 l
-4077 4119 l
-4075 4138 l
-4072 4156 l
-4070 4172 l
-4067 4186 l
-4065 4199 l
-4063 4212 l
-4060 4223 l
-4058 4234 l
-4056 4244 l
-4054 4253 l
-4052 4262 l
-4050 4270 l
-4048 4277 l
-4047 4284 l
-4028 4352 l
-4016 4390 l
-4008 4413 l
-4002 4429 l
-3997 4441 l
-3994 4451 l
-3991 4458 l
-3988 4465 l
-3986 4470 l
-3984 4474 l
-3982 4478 l
-3981 4482 l
-3980 4485 l
-3978 4488 l
-3977 4491 l
-3976 4493 l
-3975 4495 l
-3974 4498 l
-3973 4500 l
-3972 4501 l
-3971 4503 l
-3971 4505 l
-3970 4507 l
-3969 4508 l
-3968 4510 l
-3968 4511 l
-3967 4513 l
-3966 4514 l
-3966 4515 l
-3965 4517 l
-3964 4518 l
-3964 4519 l
-3963 4521 l
-3962 4522 l
-3962 4523 l
-3961 4524 l
-3960 4525 l
-3960 4526 l
-3959 4528 l
-3959 4529 l
-3958 4530 l
-3958 4531 l
-3950 4545 l
-3942 4557 l
-3933 4569 l
-3925 4580 l
-3916 4591 l
-3907 4602 l
-3897 4612 l
-3887 4622 l
-3877 4632 l
-3866 4641 l
-3855 4650 l
-3844 4659 l
-3832 4667 l
-3820 4675 l
-3807 4683 l
-3794 4691 l
-3780 4698 l
-3767 4706 l
-3752 4712 l
-3738 4719 l
-3723 4725 l
-3708 4731 l
-3692 4737 l
-3676 4743 l
-3660 4748 l
-3643 4753 l
-3627 4757 l
-3609 4762 l
-3592 4766 l
-3574 4770 l
-3556 4773 l
-3537 4776 l
-3518 4779 l
-3499 4782 l
-3480 4784 l
-3461 4786 l
-3441 4788 l
-3421 4789 l
-3400 4790 l
-3380 4791 l
-3359 4792 l
-3338 4792 l
-S
-2880 5085 m
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2879 5085 l
-2878 5084 l
-2878 5084 l
-2877 5083 l
-2876 5083 l
-2876 5083 l
-2875 5082 l
-2874 5082 l
-2874 5082 l
-2873 5081 l
-2872 5081 l
-2871 5080 l
-2871 5080 l
-2861 5075 l
-2850 5069 l
-2839 5064 l
-2828 5059 l
-2816 5053 l
-2804 5048 l
-2791 5043 l
-2778 5037 l
-2765 5031 l
-2752 5026 l
-2738 5020 l
-2724 5015 l
-2710 5009 l
-2696 5003 l
-2681 4997 l
-2666 4991 l
-2651 4985 l
-2636 4979 l
-2620 4973 l
-2605 4967 l
-2589 4960 l
-2573 4954 l
-2557 4948 l
-2541 4941 l
-2525 4935 l
-2509 4928 l
-2492 4921 l
-2476 4915 l
-2459 4908 l
-2442 4901 l
-2426 4894 l
-2409 4887 l
-2392 4880 l
-2376 4873 l
-2359 4865 l
-2342 4858 l
-2325 4851 l
-2309 4843 l
-2292 4836 l
-2275 4829 l
-2259 4821 l
-2242 4814 l
-2225 4806 l
-2209 4799 l
-2192 4791 l
-2176 4784 l
-2160 4776 l
-2144 4768 l
-2127 4761 l
-2111 4753 l
-2096 4746 l
-2080 4738 l
-2064 4731 l
-2049 4723 l
-2033 4716 l
-2018 4709 l
-2003 4701 l
-1988 4694 l
-1973 4687 l
-1959 4680 l
-1945 4673 l
-1930 4666 l
-1916 4660 l
-1903 4653 l
-1889 4647 l
-1876 4641 l
-1863 4635 l
-1850 4629 l
-1837 4623 l
-1825 4618 l
-1813 4612 l
-1801 4607 l
-1789 4603 l
-1778 4598 l
-1767 4594 l
-1756 4590 l
-1746 4587 l
-1736 4584 l
-1726 4581 l
-1717 4579 l
-1708 4577 l
-1699 4576 l
-1691 4575 l
-1683 4575 l
-1676 4575 l
-1669 4575 l
-1663 4577 l
-1657 4579 l
-1652 4582 l
-1647 4585 l
-1643 4589 l
-1639 4594 l
-1636 4600 l
-1634 4607 l
-1633 4615 l
-1632 4624 l
-1633 4633 l
-1634 4644 l
-1636 4656 l
-1640 4669 l
-1644 4683 l
-1650 4699 l
-1657 4716 l
-1666 4734 l
-1676 4753 l
-1688 4773 l
-1702 4795 l
-1718 4818 l
-1735 4842 l
-1755 4867 l
-1778 4893 l
-1802 4919 l
-1829 4947 l
-1859 4974 l
-1891 5002 l
-1925 5029 l
-1962 5056 l
-2001 5083 l
-2043 5108 l
-2085 5132 l
-2130 5155 l
-2175 5175 l
-2222 5194 l
-2268 5211 l
-2315 5226 l
-2361 5238 l
-2407 5248 l
-2451 5256 l
-2494 5263 l
-2536 5267 l
-2575 5270 l
-2613 5271 l
-2649 5270 l
-2682 5269 l
-2713 5266 l
-2742 5263 l
-2769 5259 l
-2793 5254 l
-2816 5249 l
-2836 5243 l
-2855 5238 l
-2871 5232 l
-2886 5225 l
-2899 5219 l
-2911 5213 l
-2920 5206 l
-2929 5200 l
-2936 5194 l
-2941 5187 l
-2946 5181 l
-2949 5175 l
-2951 5169 l
-2952 5163 l
-2952 5157 l
-2951 5151 l
-2949 5145 l
-2946 5140 l
-2943 5134 l
-2938 5128 l
-2933 5123 l
-2928 5117 l
-2921 5112 l
-2914 5107 l
-2907 5101 l
-2898 5096 l
-2890 5091 l
-2880 5085 l
-S
-0 g
-3421 4402 m
-3413 4431 l
-S
-3307 4418 m
-3299 4448 l
-S
-3191 4423 m
-3182 4452 l
-S
-3073 4416 m
-3063 4445 l
-S
-2953 4399 m
-2942 4428 l
-S
-2714 4337 m
-2703 4365 l
-S
-2598 4293 m
-2586 4321 l
-S
-2484 4242 m
-2471 4269 l
-S
-2374 4183 m
-2361 4210 l
-S
-2270 4117 m
-2256 4144 l
-S
-2081 3965 m
-2067 3992 l
-S
-1999 3880 m
-1984 3906 l
-S
-1928 3790 m
-1912 3815 l
-S
-1868 3693 m
-1851 3718 l
-S
-1822 3590 m
-1804 3615 l
-S
-1781 3365 m
-1761 3387 l
-S
-1796 3241 m
-1774 3262 l
-S
-1842 3108 m
-1819 3128 l
-S
-1933 2968 m
-1908 2985 l
-S
-2086 2825 m
-2058 2838 l
-S
-2673 2622 m
-2643 2620 l
-S
-3103 2675 m
-3081 2654 l
-S
-3509 2886 m
-3537 2898 l
-S
-3785 3187 m
-3805 3210 l
-S
-3920 3482 m
-3933 3510 l
-S
-3939 3918 m
-3942 3948 l
-S
-3887 4065 m
-3887 4095 l
-S
-3814 4177 m
-3812 4207 l
-S
-3728 4263 m
-3725 4293 l
-S
-3633 4326 m
-3627 4356 l
-S
-3043 3352 m
-3063 3330 l
-S
-3100 3391 m
-3121 3369 l
-S
-3155 3434 m
-3177 3413 l
-S
-3207 3480 m
-3230 3459 l
-S
-3256 3529 m
-3279 3509 l
-S
-3345 3636 m
-3369 3617 l
-S
-3384 3693 m
-3409 3676 l
-S
-3419 3753 m
-3445 3737 l
-S
-3450 3816 m
-3476 3800 l
-S
-3477 3880 m
-3504 3865 l
-S
-3518 4015 m
-3545 4002 l
-S
-3531 4084 m
-3559 4072 l
-S
-3539 4155 m
-3567 4144 l
-S
-3541 4227 m
-3570 4217 l
-S
-3538 4299 m
-3567 4290 l
-S
-3514 4445 m
-3544 4438 l
-S
-3493 4517 m
-3523 4512 l
-S
-3465 4588 m
-3495 4585 l
-S
-3430 4658 m
-3460 4656 l
-S
-3387 4726 m
-3418 4726 l
-S
-3281 4854 m
-3311 4857 l
-S
-3216 4913 m
-3246 4917 l
-S
-3143 4966 m
-3173 4973 l
-S
-3063 5013 m
-3092 5022 l
-S
-2975 5053 m
-3003 5064 l
-S
-2779 5108 m
-2805 5124 l
-S
-2673 5120 m
-2697 5139 l
-S
-2563 5121 m
-2584 5142 l
-S
-2450 5109 m
-2468 5133 l
-S
-2336 5084 m
-2350 5111 l
-S
-3529 4372 m
-3483 4387 l
-3436 4399 l
-3389 4408 l
-3340 4415 l
-3291 4420 l
-3241 4422 l
-3191 4423 l
-3140 4421 l
-3090 4418 l
-3038 4412 l
-2987 4405 l
-2936 4396 l
-2884 4385 l
-2833 4372 l
-S
-2833 4372 m
-2782 4358 l
-2731 4343 l
-2681 4325 l
-2631 4306 l
-2581 4286 l
-2532 4265 l
-2484 4242 l
-2436 4217 l
-2390 4191 l
-2344 4164 l
-2299 4136 l
-2256 4107 l
-2213 4076 l
-2172 4044 l
-S
-2172 4044 m
-2132 4011 l
-2094 3977 l
-2057 3942 l
-2022 3905 l
-1989 3868 l
-1957 3829 l
-1928 3790 l
-1901 3749 l
-1876 3707 l
-1853 3664 l
-1833 3620 l
-1832 3617 l
-1831 3614 l
-1829 3610 l
-1828 3607 l
-1827 3604 l
-1826 3601 l
-1824 3598 l
-1823 3594 l
-1822 3591 l
-1821 3588 l
-1820 3585 l
-1819 3581 l
-1817 3578 l
-1816 3575 l
-1815 3572 l
-1814 3568 l
-1813 3565 l
-1812 3562 l
-1811 3558 l
-1810 3555 l
-1809 3552 l
-1808 3549 l
-1807 3545 l
-1806 3542 l
-1805 3539 l
-1804 3535 l
-1803 3532 l
-1802 3529 l
-1801 3525 l
-1801 3522 l
-1800 3518 l
-1799 3515 l
-1798 3512 l
-1797 3508 l
-1797 3505 l
-1796 3501 l
-1795 3498 l
-1794 3495 l
-1794 3491 l
-1793 3488 l
-1792 3484 l
-1792 3481 l
-S
-1792 3481 m
-1791 3477 l
-1790 3474 l
-1790 3471 l
-1789 3467 l
-1789 3464 l
-1788 3460 l
-1788 3457 l
-1787 3453 l
-1787 3450 l
-1786 3446 l
-1786 3443 l
-1785 3439 l
-1785 3436 l
-1785 3432 l
-1784 3428 l
-1784 3425 l
-1784 3421 l
-1783 3418 l
-1783 3414 l
-1783 3411 l
-1783 3407 l
-1782 3403 l
-1782 3400 l
-1782 3396 l
-1782 3393 l
-1782 3389 l
-1782 3385 l
-1782 3382 l
-1781 3378 l
-1781 3374 l
-1781 3371 l
-1781 3367 l
-1781 3364 l
-1781 3360 l
-1782 3356 l
-1782 3352 l
-1782 3349 l
-1782 3345 l
-1782 3341 l
-1782 3338 l
-1782 3334 l
-1783 3330 l
-1783 3326 l
-1783 3323 l
-1784 3319 l
-1784 3315 l
-1784 3311 l
-1785 3308 l
-1785 3304 l
-1786 3300 l
-1786 3296 l
-1787 3292 l
-1787 3289 l
-1788 3285 l
-1788 3281 l
-1789 3277 l
-1789 3273 l
-1790 3269 l
-1791 3265 l
-1791 3262 l
-1792 3258 l
-1793 3254 l
-1794 3250 l
-1795 3246 l
-1795 3242 l
-1796 3238 l
-1797 3234 l
-1798 3230 l
-1799 3226 l
-1800 3222 l
-1801 3218 l
-1802 3214 l
-1803 3210 l
-1805 3206 l
-1806 3202 l
-1807 3198 l
-1808 3194 l
-1809 3190 l
-1811 3186 l
-1812 3182 l
-1814 3178 l
-1815 3174 l
-1816 3170 l
-1818 3166 l
-1819 3162 l
-1821 3158 l
-1822 3154 l
-1824 3150 l
-1826 3146 l
-1827 3142 l
-1829 3137 l
-1831 3133 l
-1833 3129 l
-1835 3125 l
-1836 3121 l
-1838 3117 l
-1840 3113 l
-1842 3108 l
-1844 3104 l
-1846 3100 l
-1849 3096 l
-1851 3092 l
-1853 3087 l
-1855 3083 l
-1858 3079 l
-1860 3075 l
-1862 3070 l
-1865 3066 l
-1867 3062 l
-1870 3058 l
-1872 3053 l
-1875 3049 l
-1878 3045 l
-1880 3041 l
-1883 3036 l
-1886 3032 l
-1889 3028 l
-1892 3023 l
-1895 3019 l
-1898 3015 l
-1901 3010 l
-1904 3006 l
-1907 3002 l
-1910 2997 l
-1913 2993 l
-1917 2989 l
-1920 2984 l
-1923 2980 l
-1927 2975 l
-1930 2971 l
-1934 2967 l
-1938 2962 l
-1941 2958 l
-1945 2953 l
-1949 2949 l
-1953 2945 l
-1957 2940 l
-1961 2936 l
-1965 2931 l
-1969 2927 l
-1973 2923 l
-1978 2918 l
-1982 2914 l
-1986 2909 l
-1991 2905 l
-1995 2901 l
-2000 2896 l
-2005 2892 l
-2009 2887 l
-2014 2883 l
-2019 2879 l
-2024 2874 l
-2029 2870 l
-2034 2865 l
-2039 2861 l
-2045 2857 l
-2050 2852 l
-2055 2848 l
-2061 2844 l
-2066 2839 l
-2072 2835 l
-2078 2831 l
-2084 2826 l
-2090 2822 l
-2096 2818 l
-2102 2813 l
-2108 2809 l
-2114 2805 l
-2120 2801 l
-2127 2796 l
-2133 2792 l
-2140 2788 l
-2146 2784 l
-2153 2780 l
-2160 2775 l
-2167 2771 l
-2174 2767 l
-2181 2763 l
-2188 2759 l
-2195 2755 l
-2203 2751 l
-2210 2747 l
-2218 2743 l
-2226 2739 l
-2233 2735 l
-2241 2732 l
-2249 2728 l
-2257 2724 l
-2265 2720 l
-2274 2717 l
-2282 2713 l
-2291 2709 l
-2299 2706 l
-2308 2702 l
-2317 2699 l
-2326 2695 l
-S
-2326 2695 m
-2335 2692 l
-2344 2689 l
-2353 2685 l
-2362 2682 l
-2372 2679 l
-2381 2676 l
-2391 2673 l
-2400 2670 l
-2410 2667 l
-2420 2664 l
-2430 2661 l
-2440 2659 l
-2451 2656 l
-2461 2653 l
-2472 2651 l
-2482 2649 l
-2493 2646 l
-2504 2644 l
-2514 2642 l
-2525 2640 l
-2537 2638 l
-2548 2636 l
-2559 2634 l
-2570 2633 l
-2582 2631 l
-2593 2630 l
-2605 2628 l
-2617 2627 l
-2629 2626 l
-2641 2625 l
-2653 2624 l
-2665 2623 l
-2677 2622 l
-2689 2622 l
-2702 2621 l
-2714 2621 l
-2727 2621 l
-2739 2621 l
-2752 2621 l
-2765 2621 l
-2778 2621 l
-2791 2622 l
-2804 2622 l
-2817 2623 l
-2830 2624 l
-2843 2625 l
-2856 2626 l
-2869 2627 l
-2883 2629 l
-2896 2631 l
-2909 2632 l
-2923 2634 l
-2936 2636 l
-2950 2639 l
-2963 2641 l
-2977 2644 l
-2990 2646 l
-3004 2649 l
-3017 2652 l
-3031 2655 l
-3044 2659 l
-3058 2662 l
-3071 2666 l
-3085 2670 l
-3098 2674 l
-3112 2678 l
-3125 2682 l
-3139 2687 l
-3152 2691 l
-3166 2696 l
-3179 2701 l
-3192 2706 l
-3205 2711 l
-3219 2717 l
-3232 2722 l
-3245 2728 l
-3258 2734 l
-3271 2740 l
-3284 2746 l
-3296 2752 l
-3309 2758 l
-3322 2765 l
-3334 2772 l
-3347 2778 l
-3359 2785 l
-3371 2792 l
-3383 2800 l
-3395 2807 l
-3407 2814 l
-3419 2822 l
-3431 2829 l
-3442 2837 l
-3454 2845 l
-3465 2853 l
-3476 2861 l
-3488 2869 l
-3499 2878 l
-3509 2886 l
-3520 2894 l
-3531 2903 l
-3541 2911 l
-3551 2920 l
-3562 2929 l
-3572 2938 l
-3581 2947 l
-3591 2956 l
-3601 2965 l
-3610 2974 l
-3620 2983 l
-3629 2992 l
-3638 3001 l
-3647 3010 l
-3655 3020 l
-3664 3029 l
-3672 3038 l
-3681 3048 l
-3689 3057 l
-3697 3067 l
-3705 3076 l
-3712 3086 l
-3720 3095 l
-3727 3105 l
-3734 3114 l
-3742 3124 l
-3749 3133 l
-3755 3143 l
-3762 3152 l
-3769 3162 l
-3775 3171 l
-3781 3181 l
-3787 3190 l
-3793 3200 l
-3799 3209 l
-3805 3219 l
-3811 3228 l
-3816 3238 l
-3821 3247 l
-3827 3256 l
-3832 3266 l
-3837 3275 l
-3842 3284 l
-3846 3294 l
-3851 3303 l
-3855 3312 l
-3860 3321 l
-3864 3330 l
-3868 3339 l
-3872 3348 l
-3876 3358 l
-3880 3366 l
-3883 3375 l
-3887 3384 l
-3890 3393 l
-3894 3402 l
-3897 3411 l
-3900 3419 l
-3903 3428 l
-3906 3437 l
-3909 3445 l
-3912 3454 l
-3914 3462 l
-3917 3471 l
-3919 3479 l
-3922 3488 l
-3924 3496 l
-3926 3504 l
-3928 3512 l
-3930 3520 l
-3932 3528 l
-3934 3536 l
-3936 3544 l
-3938 3552 l
-3939 3560 l
-3941 3568 l
-3942 3576 l
-3944 3583 l
-3945 3591 l
-3946 3599 l
-3947 3606 l
-3948 3614 l
-3949 3621 l
-3950 3629 l
-3951 3636 l
-3952 3643 l
-3953 3650 l
-3954 3658 l
-3954 3665 l
-3955 3672 l
-3956 3679 l
-3956 3686 l
-3956 3693 l
-3957 3700 l
-3957 3706 l
-3957 3713 l
-3958 3720 l
-3958 3727 l
-S
-3958 3727 m
-3958 3733 l
-3958 3740 l
-3958 3746 l
-3958 3753 l
-3958 3759 l
-3958 3765 l
-3957 3772 l
-3957 3778 l
-3957 3784 l
-3956 3790 l
-3956 3797 l
-3956 3803 l
-3955 3809 l
-3955 3815 l
-3954 3821 l
-3954 3826 l
-3953 3832 l
-3952 3838 l
-3952 3844 l
-3951 3849 l
-3950 3855 l
-3949 3861 l
-3948 3866 l
-3948 3872 l
-3947 3877 l
-3946 3883 l
-3945 3888 l
-3944 3893 l
-3943 3899 l
-3942 3904 l
-3940 3909 l
-3939 3914 l
-3938 3919 l
-3937 3924 l
-3936 3930 l
-3934 3935 l
-3933 3940 l
-3932 3944 l
-3931 3949 l
-3929 3954 l
-3928 3959 l
-3926 3964 l
-3925 3968 l
-3923 3973 l
-3922 3978 l
-3920 3982 l
-3919 3987 l
-3917 3992 l
-3916 3996 l
-3914 4001 l
-3912 4005 l
-3911 4009 l
-3909 4014 l
-3907 4018 l
-3906 4022 l
-3904 4027 l
-3902 4031 l
-3900 4035 l
-3899 4039 l
-3897 4043 l
-3895 4047 l
-3893 4051 l
-3891 4055 l
-3889 4059 l
-3887 4063 l
-3885 4067 l
-3883 4071 l
-3881 4075 l
-3879 4079 l
-3877 4083 l
-3875 4086 l
-3873 4090 l
-3871 4094 l
-3869 4097 l
-3867 4101 l
-3865 4105 l
-3863 4108 l
-3860 4112 l
-3858 4115 l
-3856 4119 l
-3854 4122 l
-3852 4126 l
-3849 4129 l
-3847 4133 l
-3845 4136 l
-3843 4139 l
-3840 4143 l
-3838 4146 l
-3836 4149 l
-3833 4152 l
-3831 4156 l
-3829 4159 l
-3826 4162 l
-3824 4165 l
-3821 4168 l
-3819 4171 l
-3817 4174 l
-3814 4177 l
-3812 4180 l
-3809 4183 l
-3807 4186 l
-3804 4189 l
-3802 4192 l
-3799 4195 l
-3797 4197 l
-3794 4200 l
-3792 4203 l
-3789 4206 l
-3787 4209 l
-3784 4211 l
-3781 4214 l
-3779 4217 l
-3776 4219 l
-3774 4222 l
-3771 4225 l
-3768 4227 l
-3766 4230 l
-3763 4232 l
-3760 4235 l
-3758 4237 l
-3755 4240 l
-3752 4242 l
-3749 4245 l
-3747 4247 l
-3744 4249 l
-3741 4252 l
-3738 4254 l
-3736 4256 l
-3733 4259 l
-3730 4261 l
-3727 4263 l
-3725 4266 l
-3722 4268 l
-3719 4270 l
-3716 4272 l
-3713 4274 l
-3710 4276 l
-3708 4279 l
-3705 4281 l
-3702 4283 l
-3699 4285 l
-3696 4287 l
-3693 4289 l
-3690 4291 l
-3687 4293 l
-3684 4295 l
-3681 4297 l
-3679 4299 l
-3676 4301 l
-3673 4303 l
-3670 4304 l
-3667 4306 l
-3664 4308 l
-3661 4310 l
-3658 4312 l
-3655 4314 l
-3652 4315 l
-3649 4317 l
-3646 4319 l
-3643 4321 l
-3640 4322 l
-3637 4324 l
-3634 4326 l
-3631 4327 l
-3627 4329 l
-3624 4331 l
-3621 4332 l
-3618 4334 l
-3615 4335 l
-3612 4337 l
-3609 4338 l
-3606 4340 l
-3603 4341 l
-3600 4343 l
-3596 4344 l
-3593 4346 l
-3590 4347 l
-3587 4349 l
-3584 4350 l
-3581 4352 l
-3578 4353 l
-3574 4354 l
-3571 4356 l
-3568 4357 l
-3565 4358 l
-3562 4360 l
-3558 4361 l
-3555 4362 l
-3552 4363 l
-3549 4365 l
-3546 4366 l
-3542 4367 l
-3539 4368 l
-3536 4370 l
-3533 4371 l
-3532 4371 l
-3532 4371 l
-3532 4371 l
-3532 4371 l
-S
-3532 4371 m
-3532 4371 l
-3531 4371 l
-3531 4371 l
-3531 4371 l
-3531 4371 l
-3530 4372 l
-3530 4372 l
-3530 4372 l
-3530 4372 l
-S
-2983 3317 m
-3009 3332 l
-3034 3347 l
-3060 3363 l
-3084 3380 l
-3108 3397 l
-3132 3415 l
-3155 3434 l
-3178 3453 l
-3200 3473 l
-3222 3493 l
-3243 3514 l
-3263 3536 l
-3283 3558 l
-3302 3581 l
-S
-3302 3581 m
-3321 3604 l
-3339 3628 l
-3356 3652 l
-3373 3676 l
-3389 3702 l
-3405 3727 l
-3419 3753 l
-3433 3780 l
-3446 3807 l
-3459 3834 l
-3470 3862 l
-3481 3890 l
-3491 3918 l
-3500 3947 l
-S
-3500 3947 m
-3508 3976 l
-3516 4005 l
-3522 4034 l
-3528 4064 l
-3532 4094 l
-3536 4125 l
-3539 4155 l
-3541 4186 l
-3541 4216 l
-3541 4247 l
-3540 4278 l
-3537 4310 l
-3534 4341 l
-3529 4372 l
-S
-3529 4372 m
-3524 4403 l
-3517 4434 l
-3509 4465 l
-3500 4496 l
-3489 4527 l
-3478 4558 l
-3465 4588 l
-3451 4618 l
-3435 4648 l
-3418 4678 l
-3400 4707 l
-3381 4736 l
-3360 4764 l
-3338 4792 l
-S
-3338 4792 m
-3314 4819 l
-3289 4846 l
-3263 4871 l
-3235 4896 l
-3206 4921 l
-3175 4944 l
-3143 4966 l
-3110 4987 l
-3075 5007 l
-3038 5025 l
-3001 5043 l
-2962 5058 l
-2922 5073 l
-2880 5085 l
-S
-2880 5085 m
-2838 5096 l
-2794 5105 l
-2750 5113 l
-2704 5118 l
-2658 5121 l
-2610 5122 l
-2563 5121 l
-2514 5117 l
-2466 5111 l
-2417 5103 l
-2368 5093 l
-2319 5079 l
-2271 5064 l
-2223 5046 l
-S
-0 0 1 rg
-4073 3746 m
-4075 3748 l
-S
-4075 3748 m
-4075 3753 l
-4075 3757 l
-4075 3762 l
-4075 3766 l
-4075 3770 l
-4075 3775 l
-4077 3777 l
-4079 3779 l
-4079 3784 l
-4079 3788 l
-S
-4079 3788 m
-4079 3793 l
-4079 3797 l
-4079 3802 l
-4079 3806 l
-4079 3811 l
-4079 3815 l
-4082 3817 l
-4084 3820 l
-4084 3824 l
-4084 3829 l
-S
-4084 3829 m
-4084 3833 l
-4084 3838 l
-4084 3842 l
-4084 3846 l
-4084 3851 l
-4084 3855 l
-4084 3860 l
-4084 3864 l
-4084 3869 l
-S
-4084 3869 m
-4084 3873 l
-4084 3878 l
-4086 3880 l
-4088 3882 l
-4088 3887 l
-4088 3891 l
-4088 3896 l
-4088 3900 l
-4088 3905 l
-4088 3909 l
-S
-4088 3909 m
-4088 3913 l
-4088 3918 l
-4088 3922 l
-4088 3927 l
-4088 3931 l
-4088 3936 l
-4088 3940 l
-4088 3945 l
-4088 3949 l
-S
-4088 3949 m
-4088 3954 l
-4088 3958 l
-4088 3963 l
-4088 3967 l
-4088 3972 l
-4088 3976 l
-4088 3981 l
-4088 3985 l
-4088 3989 l
-S
-4088 3989 m
-4088 3994 l
-4088 3998 l
-4088 4003 l
-4088 4007 l
-4088 4012 l
-4088 4016 l
-4086 4018 l
-4084 4021 l
-4084 4025 l
-4084 4030 l
-S
-4084 4030 m
-4084 4034 l
-4084 4039 l
-4084 4043 l
-4084 4048 l
-4084 4052 l
-4084 4056 l
-4084 4061 l
-4084 4065 l
-4084 4070 l
-S
-4084 4070 m
-4084 4074 l
-4084 4079 l
-4082 4081 l
-4079 4083 l
-4079 4088 l
-4079 4092 l
-4079 4097 l
-4079 4101 l
-4079 4106 l
-4079 4110 l
-S
-4079 4110 m
-4079 4115 l
-4079 4119 l
-4077 4121 l
-4075 4124 l
-4075 4128 l
-4075 4132 l
-4075 4137 l
-4075 4141 l
-4075 4146 l
-4075 4150 l
-S
-4073 4153 m
-4075 4150 l
-S
-4032 3563 m
-4035 3565 l
-4035 3569 l
-4035 3574 l
-4037 3576 l
-4039 3578 l
-4039 3583 l
-4039 3587 l
-S
-4039 3587 m
-4039 3592 l
-4041 3594 l
-4044 3596 l
-4044 3601 l
-4044 3605 l
-4044 3610 l
-4046 3612 l
-4048 3614 l
-4048 3619 l
-4048 3623 l
-4048 3627 l
-S
-4048 3627 m
-4050 3630 l
-4053 3632 l
-4053 3636 l
-4053 3641 l
-4053 3645 l
-4055 3648 l
-4057 3650 l
-4057 3654 l
-4057 3659 l
-4057 3663 l
-4057 3668 l
-S
-4057 3668 m
-4059 3670 l
-4061 3672 l
-4061 3677 l
-4061 3681 l
-4061 3686 l
-4061 3690 l
-4064 3692 l
-4066 3694 l
-4066 3699 l
-4066 3703 l
-4066 3708 l
-S
-4066 3708 m
-4066 3712 l
-4066 3717 l
-4068 3719 l
-4070 3721 l
-4070 3726 l
-4070 3730 l
-4070 3735 l
-4070 3739 l
-4070 3744 l
-4073 3746 l
-S
-4073 4153 m
-4070 4155 l
-4070 4159 l
-4070 4164 l
-4070 4168 l
-4070 4173 l
-4070 4177 l
-4068 4179 l
-4066 4182 l
-4066 4186 l
-4066 4191 l
-S
-4066 4191 m
-4066 4195 l
-4066 4199 l
-4066 4204 l
-4064 4206 l
-4061 4208 l
-4061 4213 l
-4061 4217 l
-4061 4222 l
-4061 4226 l
-4059 4229 l
-4057 4231 l
-S
-4057 4231 m
-4057 4235 l
-4057 4240 l
-4057 4244 l
-4057 4249 l
-4055 4251 l
-4053 4253 l
-4053 4258 l
-4053 4262 l
-4053 4267 l
-4050 4269 l
-4048 4271 l
-S
-4048 4271 m
-4048 4275 l
-4048 4280 l
-4048 4284 l
-4046 4287 l
-4044 4289 l
-4044 4293 l
-4044 4298 l
-4044 4302 l
-4041 4305 l
-4039 4307 l
-4039 4311 l
-S
-4032 4336 m
-4035 4334 l
-4035 4329 l
-4035 4325 l
-4037 4322 l
-4039 4320 l
-4039 4316 l
-4039 4311 l
-S
-3992 3442 m
-3994 3444 l
-3994 3449 l
-3994 3453 l
-3997 3455 l
-3999 3458 l
-3999 3462 l
-3999 3467 l
-S
-3999 3467 m
-4001 3469 l
-4003 3471 l
-4003 3476 l
-4006 3478 l
-4008 3480 l
-4008 3484 l
-4008 3489 l
-4010 3491 l
-4012 3493 l
-4012 3498 l
-4012 3502 l
-4015 3505 l
-4017 3507 l
-S
-4017 3507 m
-4017 3511 l
-4017 3516 l
-4019 3518 l
-4021 3520 l
-4021 3525 l
-4021 3529 l
-4023 3531 l
-4026 3534 l
-4026 3538 l
-4026 3543 l
-4028 3545 l
-4030 3547 l
-S
-4030 3547 m
-4030 3551 l
-4030 3556 l
-4030 3560 l
-4032 3563 l
-S
-4030 4351 m
-4030 4347 l
-4030 4342 l
-4030 4338 l
-4032 4336 l
-S
-4030 4351 m
-4028 4354 l
-4026 4356 l
-4026 4360 l
-4026 4365 l
-4023 4367 l
-4021 4369 l
-4021 4374 l
-4021 4378 l
-4019 4380 l
-4017 4383 l
-4017 4387 l
-4017 4392 l
-S
-4017 4392 m
-4015 4394 l
-4012 4396 l
-4012 4401 l
-4012 4405 l
-4010 4407 l
-4008 4410 l
-4008 4414 l
-4008 4418 l
-4006 4421 l
-4003 4423 l
-4003 4427 l
-4001 4430 l
-3999 4432 l
-S
-3992 4456 m
-3994 4454 l
-3994 4450 l
-3994 4445 l
-3997 4443 l
-3999 4441 l
-3999 4436 l
-3999 4432 l
-S
-3952 3353 m
-3954 3355 l
-3954 3359 l
-3956 3362 l
-3959 3364 l
-3959 3368 l
-3961 3371 l
-3963 3373 l
-3963 3377 l
-3965 3379 l
-3968 3382 l
-3968 3386 l
-S
-3968 3386 m
-3970 3388 l
-3972 3391 l
-3972 3395 l
-3972 3400 l
-3974 3402 l
-3977 3404 l
-3977 3408 l
-3979 3411 l
-3981 3413 l
-3981 3417 l
-3983 3420 l
-3985 3422 l
-3985 3426 l
-S
-3985 3426 m
-3985 3431 l
-3988 3433 l
-3990 3435 l
-3990 3440 l
-3992 3442 l
-S
-3985 4472 m
-3985 4468 l
-3988 4465 l
-3990 4463 l
-3990 4459 l
-3992 4456 l
-S
-3985 4472 m
-3985 4477 l
-3983 4479 l
-3981 4481 l
-3981 4486 l
-3979 4488 l
-3977 4490 l
-3977 4494 l
-3974 4497 l
-3972 4499 l
-3972 4503 l
-3972 4508 l
-3970 4510 l
-3968 4512 l
-S
-3952 4546 m
-3954 4544 l
-3954 4539 l
-3956 4537 l
-3959 4535 l
-3959 4530 l
-3961 4528 l
-3963 4526 l
-3963 4521 l
-3965 4519 l
-3968 4517 l
-3968 4512 l
-S
-3912 3272 m
-3914 3274 l
-3914 3279 l
-3916 3281 l
-3918 3283 l
-3918 3288 l
-3921 3290 l
-3923 3292 l
-3923 3297 l
-3925 3299 l
-3927 3301 l
-3927 3306 l
-S
-3927 3306 m
-3930 3308 l
-3932 3310 l
-3932 3315 l
-3934 3317 l
-3936 3319 l
-3936 3324 l
-3939 3326 l
-3941 3328 l
-3941 3333 l
-3943 3335 l
-3945 3337 l
-3945 3341 l
-3947 3344 l
-3950 3346 l
-S
-3950 3346 m
-3950 3350 l
-3952 3353 l
-S
-3950 4553 m
-3950 4548 l
-3952 4546 l
-S
-3950 4553 m
-3947 4555 l
-3945 4557 l
-3945 4561 l
-3943 4564 l
-3941 4566 l
-3941 4570 l
-3939 4573 l
-3936 4575 l
-3936 4579 l
-3934 4582 l
-3932 4584 l
-3932 4588 l
-3930 4591 l
-3927 4593 l
-S
-3912 4626 m
-3914 4624 l
-3914 4620 l
-3916 4617 l
-3918 4615 l
-3918 4611 l
-3921 4608 l
-3923 4606 l
-3923 4602 l
-3925 4599 l
-3927 4597 l
-3927 4593 l
-S
-3872 3205 m
-3874 3207 l
-3874 3212 l
-3876 3214 l
-3878 3216 l
-3878 3221 l
-3880 3223 l
-3883 3225 l
-S
-3883 3225 m
-3885 3227 l
-3887 3230 l
-3887 3234 l
-3889 3236 l
-3892 3239 l
-3894 3241 l
-3896 3243 l
-3896 3248 l
-3898 3250 l
-3901 3252 l
-3901 3257 l
-3903 3259 l
-3905 3261 l
-3905 3265 l
-S
-3905 3265 m
-3907 3268 l
-3909 3270 l
-3912 3272 l
-S
-3905 4633 m
-3907 4631 l
-3909 4629 l
-3912 4626 l
-S
-3905 4633 m
-3905 4637 l
-3903 4640 l
-3901 4642 l
-3901 4646 l
-3898 4649 l
-3896 4651 l
-3896 4655 l
-3894 4658 l
-3892 4660 l
-3889 4662 l
-3887 4664 l
-3887 4669 l
-3885 4671 l
-3883 4673 l
-S
-3872 4693 m
-3874 4691 l
-3874 4687 l
-3876 4684 l
-3878 4682 l
-3878 4678 l
-3880 4675 l
-3883 4673 l
-S
-3831 3147 m
-3834 3149 l
-3836 3152 l
-3838 3154 l
-3838 3158 l
-3840 3160 l
-3842 3163 l
-3845 3165 l
-3847 3167 l
-3847 3172 l
-3849 3174 l
-3851 3176 l
-3854 3178 l
-3856 3181 l
-3856 3185 l
-S
-3856 3185 m
-3858 3187 l
-3860 3190 l
-3863 3192 l
-3865 3194 l
-3865 3198 l
-3867 3201 l
-3869 3203 l
-3872 3205 l
-S
-3856 4713 m
-3858 4711 l
-3860 4709 l
-3863 4707 l
-3865 4704 l
-3865 4700 l
-3867 4698 l
-3869 4696 l
-3872 4693 l
-S
-3831 4751 m
-3834 4749 l
-3836 4747 l
-3838 4745 l
-3838 4740 l
-3840 4738 l
-3842 4736 l
-3845 4734 l
-3847 4731 l
-3847 4727 l
-3849 4725 l
-3851 4722 l
-3854 4720 l
-3856 4718 l
-3856 4713 l
-S
-3791 3093 m
-3793 3096 l
-3796 3098 l
-3798 3100 l
-3798 3105 l
-S
-3798 3105 m
-3800 3107 l
-3802 3109 l
-3804 3111 l
-3807 3114 l
-3809 3116 l
-3811 3118 l
-3811 3122 l
-3813 3125 l
-3816 3127 l
-3818 3129 l
-3820 3131 l
-3822 3134 l
-3825 3136 l
-3825 3140 l
-3827 3143 l
-3829 3145 l
-S
-3831 3147 m
-3829 3145 l
-S
-3829 4754 m
-3831 4751 l
-S
-3829 4754 m
-3827 4756 l
-3825 4758 l
-3825 4763 l
-3822 4765 l
-3820 4767 l
-3818 4769 l
-3816 4772 l
-3813 4774 l
-3811 4776 l
-3811 4780 l
-3809 4783 l
-3807 4785 l
-3804 4787 l
-3802 4789 l
-3800 4792 l
-3798 4794 l
-S
-3791 4805 m
-3793 4803 l
-3796 4801 l
-3798 4798 l
-3798 4794 l
-S
-3751 3044 m
-3753 3047 l
-3755 3049 l
-3758 3051 l
-3760 3053 l
-3762 3055 l
-3762 3060 l
-3764 3062 l
-3766 3064 l
-S
-3766 3064 m
-3769 3067 l
-3771 3069 l
-3773 3071 l
-3775 3073 l
-3778 3076 l
-3780 3078 l
-3782 3080 l
-3784 3082 l
-3784 3087 l
-3787 3089 l
-3789 3091 l
-3791 3093 l
-S
-3766 4834 m
-3769 4832 l
-3771 4830 l
-3773 4827 l
-3775 4825 l
-3778 4823 l
-3780 4821 l
-3782 4818 l
-3784 4816 l
-3784 4812 l
-3787 4810 l
-3789 4807 l
-3791 4805 l
-S
-3751 4854 m
-3753 4852 l
-3755 4850 l
-3758 4847 l
-3760 4845 l
-3762 4843 l
-3762 4839 l
-3764 4836 l
-3766 4834 l
-S
-3711 3000 m
-3713 3002 l
-3715 3004 l
-3717 3006 l
-3720 3009 l
-3722 3011 l
-3724 3013 l
-3726 3015 l
-3729 3017 l
-3731 3020 l
-3731 3024 l
-S
-3731 3024 m
-3733 3026 l
-3735 3029 l
-3737 3031 l
-3740 3033 l
-3742 3035 l
-3744 3038 l
-3746 3040 l
-3749 3042 l
-3751 3044 l
-S
-3731 4874 m
-3733 4872 l
-3735 4870 l
-3737 4868 l
-3740 4865 l
-3742 4863 l
-3744 4861 l
-3746 4859 l
-3749 4856 l
-3751 4854 l
-S
-3711 4899 m
-3713 4897 l
-3715 4894 l
-3717 4892 l
-3720 4890 l
-3722 4888 l
-3724 4885 l
-3726 4883 l
-3729 4881 l
-3731 4879 l
-3731 4874 l
-S
-3670 2959 m
-3673 2962 l
-3675 2964 l
-3677 2966 l
-3679 2968 l
-3682 2971 l
-3684 2973 l
-3686 2975 l
-3688 2977 l
-3691 2979 l
-3693 2982 l
-3695 2984 l
-S
-3695 2984 m
-3697 2986 l
-3699 2988 l
-3702 2991 l
-3704 2993 l
-3706 2995 l
-3708 2997 l
-3711 3000 l
-S
-3695 4915 m
-3697 4912 l
-3699 4910 l
-3702 4908 l
-3704 4906 l
-3706 4903 l
-3708 4901 l
-3711 4899 l
-S
-3670 4939 m
-3673 4937 l
-3675 4935 l
-3677 4932 l
-3679 4930 l
-3682 4928 l
-3684 4926 l
-3686 4923 l
-3688 4921 l
-3691 4919 l
-3693 4917 l
-3695 4915 l
-S
-3630 2924 m
-3635 2924 l
-3637 2926 l
-3639 2928 l
-3641 2930 l
-3644 2933 l
-3646 2935 l
-3648 2937 l
-3650 2939 l
-3653 2941 l
-3655 2944 l
-S
-3655 2944 m
-3657 2946 l
-3659 2948 l
-3661 2950 l
-3664 2953 l
-3666 2955 l
-3668 2957 l
-3670 2959 l
-S
-3655 4955 m
-3657 4953 l
-3659 4950 l
-3661 4948 l
-3664 4946 l
-3666 4944 l
-3668 4941 l
-3670 4939 l
-S
-3630 4975 m
-3635 4975 l
-3637 4973 l
-3639 4970 l
-3641 4968 l
-3644 4966 l
-3646 4964 l
-3648 4961 l
-3650 4959 l
-3653 4957 l
-3655 4955 l
-S
-3590 2888 m
-3592 2890 l
-3594 2892 l
-3599 2892 l
-3601 2895 l
-3603 2897 l
-3606 2899 l
-3608 2901 l
-3610 2903 l
-S
-3610 2903 m
-3612 2906 l
-3615 2908 l
-3617 2910 l
-3619 2912 l
-3621 2915 l
-3623 2917 l
-3626 2919 l
-3628 2921 l
-3630 2924 l
-S
-3610 4995 m
-3612 4993 l
-3615 4990 l
-3617 4988 l
-3619 4986 l
-3621 4984 l
-3623 4982 l
-3626 4979 l
-3628 4977 l
-3630 4975 l
-S
-3590 5011 m
-3592 5008 l
-3594 5006 l
-3599 5006 l
-3601 5004 l
-3603 5002 l
-3606 4999 l
-3608 4997 l
-3610 4995 l
-S
-3550 2857 m
-3554 2857 l
-3556 2859 l
-3559 2861 l
-3561 2863 l
-S
-3561 2863 m
-3563 2866 l
-3565 2868 l
-3568 2870 l
-3572 2870 l
-3574 2872 l
-3577 2874 l
-3579 2877 l
-3581 2879 l
-3583 2881 l
-3585 2883 l
-3588 2886 l
-3590 2888 l
-S
-3561 5035 m
-3563 5033 l
-3565 5031 l
-3568 5028 l
-3572 5028 l
-3574 5026 l
-3577 5024 l
-3579 5022 l
-3581 5020 l
-3583 5017 l
-3585 5015 l
-3588 5013 l
-3590 5011 l
-S
-3550 5042 m
-3554 5042 l
-3556 5040 l
-3559 5037 l
-3561 5035 l
-S
-3510 2825 m
-3512 2828 l
-3514 2830 l
-3518 2830 l
-3521 2832 l
-3523 2834 l
-3525 2836 l
-3527 2839 l
-3530 2841 l
-3532 2843 l
-3536 2843 l
-3539 2845 l
-3541 2848 l
-3543 2850 l
-3545 2852 l
-3548 2854 l
-3550 2857 l
-S
-3510 5073 m
-3512 5071 l
-3514 5069 l
-3518 5069 l
-3521 5066 l
-3523 5064 l
-3525 5062 l
-3527 5060 l
-3530 5058 l
-3532 5055 l
-3536 5055 l
-3539 5053 l
-3541 5051 l
-3543 5049 l
-3545 5046 l
-3548 5044 l
-3550 5042 l
-S
-3469 2798 m
-3474 2798 l
-3476 2801 l
-3478 2803 l
-3480 2805 l
-3483 2807 l
-3487 2807 l
-3489 2810 l
-3492 2812 l
-3494 2814 l
-3496 2816 l
-3501 2816 l
-3503 2819 l
-3505 2821 l
-3507 2823 l
-S
-3510 2825 m
-3507 2823 l
-S
-3507 5075 m
-3510 5073 l
-S
-3469 5100 m
-3474 5100 l
-3476 5098 l
-3478 5096 l
-3480 5093 l
-3483 5091 l
-3487 5091 l
-3489 5089 l
-3492 5087 l
-3494 5084 l
-3496 5082 l
-3501 5082 l
-3503 5080 l
-3505 5078 l
-3507 5075 l
-S
-3429 2772 m
-3431 2774 l
-3434 2776 l
-3438 2776 l
-3440 2778 l
-3442 2781 l
-3447 2781 l
-3449 2783 l
-S
-3449 2783 m
-3451 2785 l
-3454 2787 l
-3456 2790 l
-3460 2790 l
-3463 2792 l
-3465 2794 l
-3467 2796 l
-3469 2798 l
-S
-3449 5116 m
-3451 5113 l
-3454 5111 l
-3456 5109 l
-3460 5109 l
-3463 5107 l
-3465 5104 l
-3467 5102 l
-3469 5100 l
-S
-3429 5127 m
-3431 5125 l
-3434 5122 l
-3438 5122 l
-3440 5120 l
-3442 5118 l
-3447 5118 l
-3449 5116 l
-S
-3389 2749 m
-3393 2749 l
-3396 2752 l
-3398 2754 l
-3402 2754 l
-3405 2756 l
-3407 2758 l
-3411 2758 l
-3413 2760 l
-3416 2763 l
-3418 2765 l
-3420 2767 l
-3425 2767 l
-3427 2769 l
-3429 2772 l
-S
-3389 5149 m
-3393 5149 l
-3396 5147 l
-3398 5145 l
-3402 5145 l
-3405 5142 l
-3407 5140 l
-3411 5140 l
-3413 5138 l
-3416 5136 l
-3418 5133 l
-3420 5131 l
-3425 5131 l
-3427 5129 l
-3429 5127 l
-S
-3349 2727 m
-3353 2727 l
-3355 2729 l
-3358 2731 l
-3362 2731 l
-3364 2734 l
-3367 2736 l
-3371 2736 l
-3373 2738 l
-3375 2740 l
-3380 2740 l
-3382 2743 l
-S
-3382 2743 m
-3384 2745 l
-3387 2747 l
-3389 2749 l
-S
-3382 5156 m
-3384 5154 l
-3387 5151 l
-3389 5149 l
-S
-3349 5171 m
-3353 5171 l
-3355 5169 l
-3358 5167 l
-3362 5167 l
-3364 5165 l
-3367 5163 l
-3371 5163 l
-3373 5160 l
-3375 5158 l
-3380 5158 l
-3382 5156 l
-S
-3308 2705 m
-3311 2707 l
-3313 2709 l
-3317 2709 l
-3320 2711 l
-3322 2714 l
-3326 2714 l
-3329 2716 l
-3331 2718 l
-3335 2718 l
-3337 2720 l
-3340 2723 l
-3344 2723 l
-3346 2725 l
-3349 2727 l
-S
-3308 5194 m
-3311 5192 l
-3313 5189 l
-3317 5189 l
-3320 5187 l
-3322 5185 l
-3326 5185 l
-3329 5183 l
-3331 5180 l
-3335 5180 l
-3337 5178 l
-3340 5176 l
-3344 5176 l
-3346 5174 l
-3349 5171 l
-S
-3268 2687 m
-3273 2687 l
-3275 2689 l
-3277 2691 l
-3282 2691 l
-3284 2693 l
-3286 2696 l
-3291 2696 l
-3293 2698 l
-3295 2700 l
-3299 2700 l
-3302 2702 l
-S
-3308 2705 m
-3304 2705 l
-3302 2702 l
-S
-3302 5196 m
-3304 5194 l
-3308 5194 l
-S
-3268 5212 m
-3273 5212 l
-3275 5209 l
-3277 5207 l
-3282 5207 l
-3284 5205 l
-3286 5203 l
-3291 5203 l
-3293 5201 l
-3295 5198 l
-3299 5198 l
-3302 5196 l
-S
-3228 2669 m
-3232 2669 l
-3235 2671 l
-3237 2673 l
-3241 2673 l
-3244 2676 l
-3246 2678 l
-3250 2678 l
-3253 2680 l
-3255 2682 l
-3259 2682 l
-3264 2682 l
-3266 2685 l
-3268 2687 l
-S
-3228 5230 m
-3232 5230 l
-3235 5227 l
-3237 5225 l
-3241 5225 l
-3244 5223 l
-3246 5221 l
-3250 5221 l
-3253 5218 l
-3255 5216 l
-3259 5216 l
-3264 5216 l
-3266 5214 l
-3268 5212 l
-S
-3188 2655 m
-3192 2655 l
-3197 2655 l
-3199 2658 l
-3201 2660 l
-3206 2660 l
-3210 2660 l
-3212 2662 l
-S
-3212 2662 m
-3215 2664 l
-3219 2664 l
-3221 2667 l
-3224 2669 l
-3228 2669 l
-S
-3212 5236 m
-3215 5234 l
-3219 5234 l
-3221 5232 l
-3224 5230 l
-3228 5230 l
-S
-3188 5243 m
-3192 5243 l
-3197 5243 l
-3199 5241 l
-3201 5239 l
-3206 5239 l
-3210 5239 l
-3212 5236 l
-S
-3148 2638 m
-3150 2640 l
-3152 2642 l
-3156 2642 l
-3161 2642 l
-3163 2644 l
-3165 2647 l
-3170 2647 l
-3174 2647 l
-3177 2649 l
-3179 2651 l
-3183 2651 l
-3186 2653 l
-3188 2655 l
-S
-3148 5261 m
-3150 5259 l
-3152 5256 l
-3156 5256 l
-3161 5256 l
-3163 5254 l
-3165 5252 l
-3170 5252 l
-3174 5252 l
-3177 5250 l
-3179 5247 l
-3183 5247 l
-3186 5245 l
-3188 5243 l
-S
-3107 2624 m
-3110 2626 l
-3112 2629 l
-3116 2629 l
-3121 2629 l
-3123 2631 l
-3125 2633 l
-3130 2633 l
-3134 2633 l
-3136 2635 l
-3139 2638 l
-3143 2638 l
-3148 2638 l
-S
-3107 5274 m
-3110 5272 l
-3112 5270 l
-3116 5270 l
-3121 5270 l
-3123 5268 l
-3125 5265 l
-3130 5265 l
-3134 5265 l
-3136 5263 l
-3139 5261 l
-3143 5261 l
-3148 5261 l
-S
-3067 2615 m
-3072 2615 l
-3076 2615 l
-3078 2617 l
-3081 2620 l
-3085 2620 l
-3089 2620 l
-3092 2622 l
-S
-3107 2624 m
-3103 2624 l
-3098 2624 l
-3094 2624 l
-3092 2622 l
-S
-3092 5277 m
-3094 5274 l
-3098 5274 l
-3103 5274 l
-3107 5274 l
-S
-3067 5283 m
-3072 5283 l
-3076 5283 l
-3078 5281 l
-3081 5279 l
-3085 5279 l
-3089 5279 l
-3092 5277 l
-S
-3027 2606 m
-3031 2606 l
-3036 2606 l
-3040 2606 l
-3043 2609 l
-3045 2611 l
-3049 2611 l
-3054 2611 l
-3058 2611 l
-3060 2613 l
-3063 2615 l
-3067 2615 l
-S
-3027 5292 m
-3031 5292 l
-3036 5292 l
-3040 5292 l
-3043 5290 l
-3045 5288 l
-3049 5288 l
-3054 5288 l
-3058 5288 l
-3060 5285 l
-3063 5283 l
-3067 5283 l
-S
-2987 2597 m
-2991 2597 l
-2996 2597 l
-3000 2597 l
-3005 2597 l
-3007 2600 l
-3009 2602 l
-3013 2602 l
-3018 2602 l
-3022 2602 l
-3025 2604 l
-3027 2606 l
-S
-2987 5301 m
-2991 5301 l
-2996 5301 l
-3000 5301 l
-3005 5301 l
-3007 5299 l
-3009 5297 l
-3013 5297 l
-3018 5297 l
-3022 5297 l
-3025 5294 l
-3027 5292 l
-S
-2946 2588 m
-2951 2588 l
-2955 2588 l
-2960 2588 l
-2962 2591 l
-2964 2593 l
-2969 2593 l
-2973 2593 l
-2978 2593 l
-2982 2593 l
-2984 2595 l
-2987 2597 l
-S
-2946 5310 m
-2951 5310 l
-2955 5310 l
-2960 5310 l
-2962 5308 l
-2964 5306 l
-2969 5306 l
-2973 5306 l
-2978 5306 l
-2982 5306 l
-2984 5303 l
-2987 5301 l
-S
-2906 2579 m
-2908 2582 l
-S
-2908 2582 m
-2911 2584 l
-2915 2584 l
-2920 2584 l
-2924 2584 l
-2929 2584 l
-2933 2584 l
-2935 2586 l
-2938 2588 l
-2942 2588 l
-2946 2588 l
-S
-2908 5317 m
-2911 5314 l
-2915 5314 l
-2920 5314 l
-2924 5314 l
-2929 5314 l
-2933 5314 l
-2935 5312 l
-2938 5310 l
-2942 5310 l
-2946 5310 l
-S
-2906 5319 m
-2908 5317 l
-S
-2866 2575 m
-2870 2575 l
-2875 2575 l
-2877 2577 l
-2879 2579 l
-2884 2579 l
-2888 2579 l
-2893 2579 l
-2897 2579 l
-2902 2579 l
-2906 2579 l
-S
-2906 5319 m
-2902 5319 l
-2897 5319 l
-2893 5319 l
-2888 5319 l
-2884 5319 l
-2879 5319 l
-2877 5321 l
-2875 5323 l
-2870 5323 l
-2866 5323 l
-S
-2826 2571 m
-2830 2571 l
-2835 2571 l
-2837 2573 l
-2839 2575 l
-2844 2575 l
-2848 2575 l
-2853 2575 l
-2857 2575 l
-2862 2575 l
-2866 2575 l
-S
-2826 5328 m
-2830 5328 l
-2835 5328 l
-2837 5326 l
-2839 5323 l
-2844 5323 l
-2848 5323 l
-2853 5323 l
-2857 5323 l
-2862 5323 l
-2866 5323 l
-S
-2786 2571 m
-2790 2571 l
-2794 2571 l
-2799 2571 l
-2803 2571 l
-2808 2571 l
-2812 2571 l
-2817 2571 l
-2821 2571 l
-2826 2571 l
-S
-2786 5328 m
-2790 5328 l
-2794 5328 l
-2799 5328 l
-2803 5328 l
-2808 5328 l
-2812 5328 l
-2817 5328 l
-2821 5328 l
-2826 5328 l
-S
-2745 2566 m
-2750 2566 l
-2754 2566 l
-2759 2566 l
-2763 2566 l
-2768 2566 l
-2772 2566 l
-2774 2568 l
-2777 2571 l
-2781 2571 l
-2786 2571 l
-S
-2745 5332 m
-2750 5332 l
-2754 5332 l
-2759 5332 l
-2763 5332 l
-2768 5332 l
-2772 5332 l
-2774 5330 l
-2777 5328 l
-2781 5328 l
-2786 5328 l
-S
-2705 2566 m
-2710 2566 l
-2714 2566 l
-2719 2566 l
-2723 2566 l
-2727 2566 l
-2732 2566 l
-2736 2566 l
-2741 2566 l
-2745 2566 l
-S
-2705 5332 m
-2710 5332 l
-2714 5332 l
-2719 5332 l
-2723 5332 l
-2727 5332 l
-2732 5332 l
-2736 5332 l
-2741 5332 l
-2745 5332 l
-S
-2665 2566 m
-2669 2566 l
-2674 2566 l
-2678 2566 l
-2683 2566 l
-2687 2566 l
-2692 2566 l
-2696 2566 l
-2701 2566 l
-2705 2566 l
-S
-2665 5332 m
-2669 5332 l
-2674 5332 l
-2678 5332 l
-2683 5332 l
-2687 5332 l
-2692 5332 l
-2696 5332 l
-2701 5332 l
-2705 5332 l
-S
-2625 2571 m
-2629 2571 l
-2634 2571 l
-2636 2568 l
-2638 2566 l
-2643 2566 l
-2647 2566 l
-2651 2566 l
-2656 2566 l
-2660 2566 l
-2665 2566 l
-S
-2625 5328 m
-2629 5328 l
-2634 5328 l
-2636 5330 l
-2638 5332 l
-2643 5332 l
-2647 5332 l
-2651 5332 l
-2656 5332 l
-2660 5332 l
-2665 5332 l
-S
-2584 2571 m
-2589 2571 l
-2593 2571 l
-2598 2571 l
-2602 2571 l
-2607 2571 l
-2611 2571 l
-2616 2571 l
-2620 2571 l
-2625 2571 l
-S
-2584 5328 m
-2589 5328 l
-2593 5328 l
-2598 5328 l
-2602 5328 l
-2607 5328 l
-2611 5328 l
-2616 5328 l
-2620 5328 l
-2625 5328 l
-S
-2544 2575 m
-2549 2575 l
-2553 2575 l
-2558 2575 l
-2562 2575 l
-2567 2575 l
-2571 2575 l
-2573 2573 l
-2576 2571 l
-2580 2571 l
-2584 2571 l
-S
-2544 5323 m
-2549 5323 l
-2553 5323 l
-2558 5323 l
-2562 5323 l
-2567 5323 l
-2571 5323 l
-2573 5326 l
-2576 5328 l
-2580 5328 l
-2584 5328 l
-S
-2504 2579 m
-2508 2579 l
-2513 2579 l
-2517 2579 l
-2522 2579 l
-2526 2579 l
-2531 2579 l
-2533 2577 l
-2535 2575 l
-2540 2575 l
-2544 2575 l
-S
-2504 5319 m
-2508 5319 l
-2513 5319 l
-2517 5319 l
-2522 5319 l
-2526 5319 l
-2531 5319 l
-2533 5321 l
-2535 5323 l
-2540 5323 l
-2544 5323 l
-S
-2502 2582 m
-2504 2579 l
-S
-2464 2588 m
-2468 2588 l
-2473 2588 l
-2475 2586 l
-2477 2584 l
-2482 2584 l
-2486 2584 l
-2491 2584 l
-2495 2584 l
-2500 2584 l
-2502 2582 l
-S
-2464 5310 m
-2468 5310 l
-2473 5310 l
-2475 5312 l
-2477 5314 l
-2482 5314 l
-2486 5314 l
-2491 5314 l
-2495 5314 l
-2500 5314 l
-2502 5317 l
-S
-2504 5319 m
-2502 5317 l
-S
-2424 2597 m
-2426 2595 l
-2428 2593 l
-2433 2593 l
-2437 2593 l
-2441 2593 l
-2446 2593 l
-2448 2591 l
-2450 2588 l
-2455 2588 l
-2459 2588 l
-2464 2588 l
-S
-2424 5301 m
-2426 5303 l
-2428 5306 l
-2433 5306 l
-2437 5306 l
-2441 5306 l
-2446 5306 l
-2448 5308 l
-2450 5310 l
-2455 5310 l
-2459 5310 l
-2464 5310 l
-S
-2383 2606 m
-2386 2604 l
-2388 2602 l
-2392 2602 l
-2397 2602 l
-2401 2602 l
-2403 2600 l
-2406 2597 l
-2410 2597 l
-2415 2597 l
-2419 2597 l
-2424 2597 l
-S
-2383 5292 m
-2386 5294 l
-2388 5297 l
-2392 5297 l
-2397 5297 l
-2401 5297 l
-2403 5299 l
-2406 5301 l
-2410 5301 l
-2415 5301 l
-2419 5301 l
-2424 5301 l
-S
-2343 2615 m
-2348 2615 l
-2350 2613 l
-2352 2611 l
-2357 2611 l
-2361 2611 l
-2365 2611 l
-2368 2609 l
-2370 2606 l
-2374 2606 l
-2379 2606 l
-2383 2606 l
-S
-2343 5283 m
-2348 5283 l
-2350 5285 l
-2352 5288 l
-2357 5288 l
-2361 5288 l
-2365 5288 l
-2368 5290 l
-2370 5292 l
-2374 5292 l
-2379 5292 l
-2383 5292 l
-S
-2319 2622 m
-2321 2620 l
-2325 2620 l
-2330 2620 l
-2332 2617 l
-2334 2615 l
-2339 2615 l
-2343 2615 l
-S
-2303 2624 m
-2307 2624 l
-2312 2624 l
-2316 2624 l
-2319 2622 l
-S
-2303 5274 m
-2307 5274 l
-2312 5274 l
-2316 5274 l
-2319 5277 l
-S
-2319 5277 m
-2321 5279 l
-2325 5279 l
-2330 5279 l
-2332 5281 l
-2334 5283 l
-2339 5283 l
-2343 5283 l
-S
-2303 2624 m
-2301 2626 l
-2298 2629 l
-2294 2629 l
-2290 2629 l
-2287 2631 l
-2285 2633 l
-2281 2633 l
-2276 2633 l
-2274 2635 l
-2272 2638 l
-2267 2638 l
-2263 2638 l
-S
-2263 5261 m
-2267 5261 l
-2272 5261 l
-2274 5263 l
-2276 5265 l
-2281 5265 l
-2285 5265 l
-2287 5268 l
-2290 5270 l
-2294 5270 l
-2298 5270 l
-2301 5272 l
-2303 5274 l
-S
-2222 2655 m
-2225 2653 l
-2227 2651 l
-2231 2651 l
-2234 2649 l
-2236 2647 l
-2240 2647 l
-2245 2647 l
-2247 2644 l
-2249 2642 l
-2254 2642 l
-2258 2642 l
-2260 2640 l
-2263 2638 l
-S
-2222 5243 m
-2225 5245 l
-2227 5247 l
-2231 5247 l
-2234 5250 l
-2236 5252 l
-2240 5252 l
-2245 5252 l
-2247 5254 l
-2249 5256 l
-2254 5256 l
-2258 5256 l
-2260 5259 l
-2263 5261 l
-S
-2198 2662 m
-2200 2660 l
-2205 2660 l
-2209 2660 l
-2211 2658 l
-2214 2655 l
-2218 2655 l
-2222 2655 l
-S
-2182 2669 m
-2187 2669 l
-2189 2667 l
-2191 2664 l
-2196 2664 l
-2198 2662 l
-S
-2182 5230 m
-2187 5230 l
-2189 5232 l
-2191 5234 l
-2196 5234 l
-2198 5236 l
-S
-2198 5236 m
-2200 5239 l
-2205 5239 l
-2209 5239 l
-2211 5241 l
-2214 5243 l
-2218 5243 l
-2222 5243 l
-S
-2142 2687 m
-2144 2685 l
-2147 2682 l
-2151 2682 l
-2155 2682 l
-2158 2680 l
-2160 2678 l
-2164 2678 l
-2167 2676 l
-2169 2673 l
-2173 2673 l
-2176 2671 l
-2178 2669 l
-2182 2669 l
-S
-2142 5212 m
-2144 5214 l
-2147 5216 l
-2151 5216 l
-2155 5216 l
-2158 5218 l
-2160 5221 l
-2164 5221 l
-2167 5223 l
-2169 5225 l
-2173 5225 l
-2176 5227 l
-2178 5230 l
-2182 5230 l
-S
-2109 2702 m
-2111 2700 l
-2115 2700 l
-2117 2698 l
-2120 2696 l
-2124 2696 l
-2126 2693 l
-2129 2691 l
-2133 2691 l
-2135 2689 l
-2138 2687 l
-2142 2687 l
-S
-2102 2705 m
-2106 2705 l
-2109 2702 l
-S
-2102 5194 m
-2106 5194 l
-2109 5196 l
-S
-2109 5196 m
-2111 5198 l
-2115 5198 l
-2117 5201 l
-2120 5203 l
-2124 5203 l
-2126 5205 l
-2129 5207 l
-2133 5207 l
-2135 5209 l
-2138 5212 l
-2142 5212 l
-S
-2102 2705 m
-2100 2707 l
-2097 2709 l
-2093 2709 l
-2091 2711 l
-2088 2714 l
-2084 2714 l
-2082 2716 l
-2079 2718 l
-2075 2718 l
-2073 2720 l
-2071 2723 l
-2066 2723 l
-2064 2725 l
-2062 2727 l
-S
-2062 5171 m
-2064 5174 l
-2066 5176 l
-2071 5176 l
-2073 5178 l
-2075 5180 l
-2079 5180 l
-2082 5183 l
-2084 5185 l
-2088 5185 l
-2091 5187 l
-2093 5189 l
-2097 5189 l
-2100 5192 l
-2102 5194 l
-S
-2028 2743 m
-2030 2740 l
-2035 2740 l
-2037 2738 l
-2039 2736 l
-2044 2736 l
-2046 2734 l
-2048 2731 l
-2053 2731 l
-2055 2729 l
-2057 2727 l
-2062 2727 l
-S
-2021 2749 m
-2024 2747 l
-2026 2745 l
-2028 2743 l
-S
-2021 5149 m
-2024 5151 l
-2026 5154 l
-2028 5156 l
-S
-2028 5156 m
-2030 5158 l
-2035 5158 l
-2037 5160 l
-2039 5163 l
-2044 5163 l
-2046 5165 l
-2048 5167 l
-2053 5167 l
-2055 5169 l
-2057 5171 l
-2062 5171 l
-S
-1981 2772 m
-1983 2769 l
-1986 2767 l
-1990 2767 l
-1992 2765 l
-1995 2763 l
-1997 2760 l
-1999 2758 l
-2003 2758 l
-2006 2756 l
-2008 2754 l
-2012 2754 l
-2015 2752 l
-2017 2749 l
-2021 2749 l
-S
-1981 5127 m
-1983 5129 l
-1986 5131 l
-1990 5131 l
-1992 5133 l
-1995 5136 l
-1997 5138 l
-1999 5140 l
-2003 5140 l
-2006 5142 l
-2008 5145 l
-2012 5145 l
-2015 5147 l
-2017 5149 l
-2021 5149 l
-S
-1961 2783 m
-1963 2781 l
-1968 2781 l
-1970 2778 l
-1972 2776 l
-1977 2776 l
-1979 2774 l
-1981 2772 l
-S
-1941 2798 m
-1943 2796 l
-1945 2794 l
-1948 2792 l
-1950 2790 l
-1954 2790 l
-1957 2787 l
-1959 2785 l
-1961 2783 l
-S
-1941 5100 m
-1943 5102 l
-1945 5104 l
-1948 5107 l
-1950 5109 l
-1954 5109 l
-1957 5111 l
-1959 5113 l
-1961 5116 l
-S
-1961 5116 m
-1963 5118 l
-1968 5118 l
-1970 5120 l
-1972 5122 l
-1977 5122 l
-1979 5125 l
-1981 5127 l
-S
-1903 2823 m
-1905 2821 l
-1907 2819 l
-1910 2816 l
-1914 2816 l
-1916 2814 l
-1919 2812 l
-1921 2810 l
-1923 2807 l
-1928 2807 l
-1930 2805 l
-1932 2803 l
-1934 2801 l
-1936 2798 l
-1941 2798 l
-S
-1901 2825 m
-1903 2823 l
-S
-1901 5073 m
-1903 5075 l
-S
-1903 5075 m
-1905 5078 l
-1907 5080 l
-1910 5082 l
-1914 5082 l
-1916 5084 l
-1919 5087 l
-1921 5089 l
-1923 5091 l
-1928 5091 l
-1930 5093 l
-1932 5096 l
-1934 5098 l
-1936 5100 l
-1941 5100 l
-S
-1901 2825 m
-1898 2828 l
-1896 2830 l
-1892 2830 l
-1890 2832 l
-1887 2834 l
-1885 2836 l
-1883 2839 l
-1881 2841 l
-1878 2843 l
-1874 2843 l
-1872 2845 l
-1869 2848 l
-1867 2850 l
-1865 2852 l
-1863 2854 l
-1860 2857 l
-S
-1860 5042 m
-1863 5044 l
-1865 5046 l
-1867 5049 l
-1869 5051 l
-1872 5053 l
-1874 5055 l
-1878 5055 l
-1881 5058 l
-1883 5060 l
-1885 5062 l
-1887 5064 l
-1890 5066 l
-1892 5069 l
-1896 5069 l
-1898 5071 l
-1901 5073 l
-S
-1849 2863 m
-1852 2861 l
-1854 2859 l
-1856 2857 l
-1860 2857 l
-S
-1820 2888 m
-1823 2886 l
-1825 2883 l
-1827 2881 l
-1829 2879 l
-1831 2877 l
-1834 2874 l
-1836 2872 l
-1838 2870 l
-1843 2870 l
-1845 2868 l
-1847 2866 l
-1849 2863 l
-S
-1820 5011 m
-1823 5013 l
-1825 5015 l
-1827 5017 l
-1829 5020 l
-1831 5022 l
-1834 5024 l
-1836 5026 l
-1838 5028 l
-1843 5028 l
-1845 5031 l
-1847 5033 l
-1849 5035 l
-S
-1849 5035 m
-1852 5037 l
-1854 5040 l
-1856 5042 l
-1860 5042 l
-S
-1800 2903 m
-1802 2901 l
-1805 2899 l
-1807 2897 l
-1809 2895 l
-1811 2892 l
-1816 2892 l
-1818 2890 l
-1820 2888 l
-S
-1780 2924 m
-1782 2921 l
-1785 2919 l
-1787 2917 l
-1789 2915 l
-1791 2912 l
-1793 2910 l
-1796 2908 l
-1798 2906 l
-1800 2903 l
-S
-1780 4975 m
-1782 4977 l
-1785 4979 l
-1787 4982 l
-1789 4984 l
-1791 4986 l
-1793 4988 l
-1796 4990 l
-1798 4993 l
-1800 4995 l
-S
-1800 4995 m
-1802 4997 l
-1805 4999 l
-1807 5002 l
-1809 5004 l
-1811 5006 l
-1816 5006 l
-1818 5008 l
-1820 5011 l
-S
-1755 2944 m
-1758 2941 l
-1760 2939 l
-1762 2937 l
-1764 2935 l
-1767 2933 l
-1769 2930 l
-1771 2928 l
-1773 2926 l
-1776 2924 l
-1780 2924 l
-S
-1740 2959 m
-1742 2957 l
-1744 2955 l
-1747 2953 l
-1749 2950 l
-1751 2948 l
-1753 2946 l
-1755 2944 l
-S
-1740 4939 m
-1742 4941 l
-1744 4944 l
-1747 4946 l
-1749 4948 l
-1751 4950 l
-1753 4953 l
-1755 4955 l
-S
-1755 4955 m
-1758 4957 l
-1760 4959 l
-1762 4961 l
-1764 4964 l
-1767 4966 l
-1769 4968 l
-1771 4970 l
-1773 4973 l
-1776 4975 l
-1780 4975 l
-S
-1715 2984 m
-1717 2982 l
-1720 2979 l
-1722 2977 l
-1724 2975 l
-1726 2973 l
-1729 2971 l
-1731 2968 l
-1733 2966 l
-1735 2964 l
-1738 2962 l
-1740 2959 l
-S
-1700 3000 m
-1702 2997 l
-1704 2995 l
-1706 2993 l
-1709 2991 l
-1711 2988 l
-1713 2986 l
-1715 2984 l
-S
-1700 4899 m
-1702 4901 l
-1704 4903 l
-1706 4906 l
-1709 4908 l
-1711 4910 l
-1713 4912 l
-1715 4915 l
-S
-1715 4915 m
-1717 4917 l
-1720 4919 l
-1722 4921 l
-1724 4923 l
-1726 4926 l
-1729 4928 l
-1731 4930 l
-1733 4932 l
-1735 4935 l
-1738 4937 l
-1740 4939 l
-S
-1679 3024 m
-1679 3020 l
-1682 3017 l
-1684 3015 l
-1686 3013 l
-1688 3011 l
-1691 3009 l
-1693 3006 l
-1695 3004 l
-1697 3002 l
-1700 3000 l
-S
-1659 3044 m
-1662 3042 l
-1664 3040 l
-1666 3038 l
-1668 3035 l
-1671 3033 l
-1673 3031 l
-1675 3029 l
-1677 3026 l
-1679 3024 l
-S
-1659 4854 m
-1662 4856 l
-1664 4859 l
-1666 4861 l
-1668 4863 l
-1671 4865 l
-1673 4868 l
-1675 4870 l
-1677 4872 l
-1679 4874 l
-S
-1679 4874 m
-1679 4879 l
-1682 4881 l
-1684 4883 l
-1686 4885 l
-1688 4888 l
-1691 4890 l
-1693 4892 l
-1695 4894 l
-1697 4897 l
-1700 4899 l
-S
-1644 3064 m
-1646 3062 l
-1648 3060 l
-1648 3055 l
-1650 3053 l
-1653 3051 l
-1655 3049 l
-1657 3047 l
-1659 3044 l
-S
-1619 3093 m
-1621 3091 l
-1624 3089 l
-1626 3087 l
-1626 3082 l
-1628 3080 l
-1630 3078 l
-1633 3076 l
-1635 3073 l
-1637 3071 l
-1639 3069 l
-1642 3067 l
-1644 3064 l
-S
-1619 4805 m
-1621 4807 l
-1624 4810 l
-1626 4812 l
-1626 4816 l
-1628 4818 l
-1630 4821 l
-1633 4823 l
-1635 4825 l
-1637 4827 l
-1639 4830 l
-1642 4832 l
-1644 4834 l
-S
-1644 4834 m
-1646 4836 l
-1648 4839 l
-1648 4843 l
-1650 4845 l
-1653 4847 l
-1655 4850 l
-1657 4852 l
-1659 4854 l
-S
-1612 3105 m
-1612 3100 l
-1615 3098 l
-1617 3096 l
-1619 3093 l
-S
-1612 3105 m
-1610 3107 l
-1608 3109 l
-1606 3111 l
-1604 3114 l
-1601 3116 l
-1599 3118 l
-1599 3122 l
-1597 3125 l
-1595 3127 l
-1592 3129 l
-1590 3131 l
-1588 3134 l
-1586 3136 l
-1586 3140 l
-1583 3143 l
-1581 3145 l
-S
-1579 3147 m
-1581 3145 l
-S
-1579 4751 m
-1581 4754 l
-S
-1581 4754 m
-1583 4756 l
-1586 4758 l
-1586 4763 l
-1588 4765 l
-1590 4767 l
-1592 4769 l
-1595 4772 l
-1597 4774 l
-1599 4776 l
-1599 4780 l
-1601 4783 l
-1604 4785 l
-1606 4787 l
-1608 4789 l
-1610 4792 l
-1612 4794 l
-S
-1612 4794 m
-1612 4798 l
-1615 4801 l
-1617 4803 l
-1619 4805 l
-S
-1579 3147 m
-1577 3149 l
-1574 3152 l
-1572 3154 l
-1572 3158 l
-1570 3160 l
-1568 3163 l
-1566 3165 l
-1563 3167 l
-1563 3172 l
-1561 3174 l
-1559 3176 l
-1557 3178 l
-1554 3181 l
-1554 3185 l
-S
-1539 3205 m
-1541 3203 l
-1543 3201 l
-1545 3198 l
-1545 3194 l
-1548 3192 l
-1550 3190 l
-1552 3187 l
-1554 3185 l
-S
-1539 4693 m
-1541 4696 l
-1543 4698 l
-1545 4700 l
-1545 4704 l
-1548 4707 l
-1550 4709 l
-1552 4711 l
-1554 4713 l
-S
-1554 4713 m
-1554 4718 l
-1557 4720 l
-1559 4722 l
-1561 4725 l
-1563 4727 l
-1563 4731 l
-1566 4734 l
-1568 4736 l
-1570 4738 l
-1572 4740 l
-1572 4745 l
-1574 4747 l
-1577 4749 l
-1579 4751 l
-S
-1528 3225 m
-1530 3223 l
-1532 3221 l
-1532 3216 l
-1534 3214 l
-1536 3212 l
-1536 3207 l
-1539 3205 l
-S
-1528 3225 m
-1525 3227 l
-1523 3230 l
-1523 3234 l
-1521 3236 l
-1519 3239 l
-1516 3241 l
-1514 3243 l
-1514 3248 l
-1512 3250 l
-1510 3252 l
-1510 3257 l
-1507 3259 l
-1505 3261 l
-1505 3265 l
-S
-1499 3272 m
-1501 3270 l
-1503 3268 l
-1505 3265 l
-S
-1499 4626 m
-1501 4629 l
-1503 4631 l
-1505 4633 l
-S
-1505 4633 m
-1505 4637 l
-1507 4640 l
-1510 4642 l
-1510 4646 l
-1512 4649 l
-1514 4651 l
-1514 4655 l
-1516 4658 l
-1519 4660 l
-1521 4662 l
-1523 4664 l
-1523 4669 l
-1525 4671 l
-1528 4673 l
-S
-1528 4673 m
-1530 4675 l
-1532 4678 l
-1532 4682 l
-1534 4684 l
-1536 4687 l
-1536 4691 l
-1539 4693 l
-S
-1483 3306 m
-1483 3301 l
-1485 3299 l
-1487 3297 l
-1487 3292 l
-1490 3290 l
-1492 3288 l
-1492 3283 l
-1494 3281 l
-1496 3279 l
-1496 3274 l
-1499 3272 l
-S
-1483 3306 m
-1481 3308 l
-1478 3310 l
-1478 3315 l
-1476 3317 l
-1474 3319 l
-1474 3324 l
-1472 3326 l
-1469 3328 l
-1469 3333 l
-1467 3335 l
-1465 3337 l
-1465 3341 l
-1463 3344 l
-1461 3346 l
-S
-1458 3353 m
-1461 3350 l
-1461 3346 l
-S
-1458 4546 m
-1461 4548 l
-1461 4553 l
-S
-1461 4553 m
-1463 4555 l
-1465 4557 l
-1465 4561 l
-1467 4564 l
-1469 4566 l
-1469 4570 l
-1472 4573 l
-1474 4575 l
-1474 4579 l
-1476 4582 l
-1478 4584 l
-1478 4588 l
-1481 4591 l
-1483 4593 l
-S
-1483 4593 m
-1483 4597 l
-1485 4599 l
-1487 4602 l
-1487 4606 l
-1490 4608 l
-1492 4611 l
-1492 4615 l
-1494 4617 l
-1496 4620 l
-1496 4624 l
-1499 4626 l
-S
-1443 3386 m
-1443 3382 l
-1445 3379 l
-1447 3377 l
-1447 3373 l
-1449 3371 l
-1452 3368 l
-1452 3364 l
-1454 3362 l
-1456 3359 l
-1456 3355 l
-1458 3353 l
-S
-1443 3386 m
-1440 3388 l
-1438 3391 l
-1438 3395 l
-1438 3400 l
-1436 3402 l
-1434 3404 l
-1434 3408 l
-1431 3411 l
-1429 3413 l
-1429 3417 l
-1427 3420 l
-1425 3422 l
-1425 3426 l
-S
-1418 3442 m
-1420 3440 l
-1420 3435 l
-1423 3433 l
-1425 3431 l
-1425 3426 l
-S
-1418 4456 m
-1420 4459 l
-1420 4463 l
-1423 4465 l
-1425 4468 l
-1425 4472 l
-S
-1425 4472 m
-1425 4477 l
-1427 4479 l
-1429 4481 l
-1429 4486 l
-1431 4488 l
-1434 4490 l
-1434 4494 l
-1436 4497 l
-1438 4499 l
-1438 4503 l
-1438 4508 l
-1440 4510 l
-1443 4512 l
-S
-1443 4512 m
-1443 4517 l
-1445 4519 l
-1447 4521 l
-1447 4526 l
-1449 4528 l
-1452 4530 l
-1452 4535 l
-1454 4537 l
-1456 4539 l
-1456 4544 l
-1458 4546 l
-S
-1411 3467 m
-1411 3462 l
-1411 3458 l
-1414 3455 l
-1416 3453 l
-1416 3449 l
-1416 3444 l
-1418 3442 l
-S
-1411 3467 m
-1409 3469 l
-1407 3471 l
-1407 3476 l
-1405 3478 l
-1402 3480 l
-1402 3484 l
-1402 3489 l
-1400 3491 l
-1398 3493 l
-1398 3498 l
-1398 3502 l
-1396 3505 l
-1393 3507 l
-S
-1393 3507 m
-1393 3511 l
-1393 3516 l
-1391 3518 l
-1389 3520 l
-1389 3525 l
-1389 3529 l
-1387 3531 l
-1385 3534 l
-1385 3538 l
-1385 3543 l
-1382 3545 l
-1380 3547 l
-S
-1378 3563 m
-1380 3560 l
-1380 3556 l
-1380 3551 l
-1380 3547 l
-S
-1378 4336 m
-1380 4338 l
-1380 4342 l
-1380 4347 l
-1380 4351 l
-S
-1380 4351 m
-1382 4354 l
-1385 4356 l
-1385 4360 l
-1385 4365 l
-1387 4367 l
-1389 4369 l
-1389 4374 l
-1389 4378 l
-1391 4380 l
-1393 4383 l
-1393 4387 l
-1393 4392 l
-S
-1393 4392 m
-1396 4394 l
-1398 4396 l
-1398 4401 l
-1398 4405 l
-1400 4407 l
-1402 4410 l
-1402 4414 l
-1402 4418 l
-1405 4421 l
-1407 4423 l
-1407 4427 l
-1409 4430 l
-1411 4432 l
-S
-1411 4432 m
-1411 4436 l
-1411 4441 l
-1414 4443 l
-1416 4445 l
-1416 4450 l
-1416 4454 l
-1418 4456 l
-S
-1371 3587 m
-1371 3583 l
-1371 3578 l
-1373 3576 l
-1376 3574 l
-1376 3569 l
-1376 3565 l
-1378 3563 l
-S
-1371 3587 m
-1371 3592 l
-1369 3594 l
-1367 3596 l
-1367 3601 l
-1367 3605 l
-1367 3610 l
-1364 3612 l
-1362 3614 l
-1362 3619 l
-1362 3623 l
-1362 3627 l
-S
-1362 3627 m
-1360 3630 l
-1358 3632 l
-1358 3636 l
-1358 3641 l
-1358 3645 l
-1355 3648 l
-1353 3650 l
-1353 3654 l
-1353 3659 l
-1353 3663 l
-1353 3668 l
-S
-1353 3668 m
-1351 3670 l
-1349 3672 l
-1349 3677 l
-1349 3681 l
-1349 3686 l
-1349 3690 l
-1347 3692 l
-1344 3694 l
-1344 3699 l
-1344 3703 l
-1344 3708 l
-S
-1338 3746 m
-1340 3744 l
-1340 3739 l
-1340 3735 l
-1340 3730 l
-1340 3726 l
-1340 3721 l
-1342 3719 l
-1344 3717 l
-1344 3712 l
-1344 3708 l
-S
-1338 4153 m
-1340 4155 l
-1340 4159 l
-1340 4164 l
-1340 4168 l
-1340 4173 l
-1340 4177 l
-1342 4179 l
-1344 4182 l
-1344 4186 l
-1344 4191 l
-S
-1344 4191 m
-1344 4195 l
-1344 4199 l
-1344 4204 l
-1347 4206 l
-1349 4208 l
-1349 4213 l
-1349 4217 l
-1349 4222 l
-1349 4226 l
-1351 4229 l
-1353 4231 l
-S
-1353 4231 m
-1353 4235 l
-1353 4240 l
-1353 4244 l
-1353 4249 l
-1355 4251 l
-1358 4253 l
-1358 4258 l
-1358 4262 l
-1358 4267 l
-1360 4269 l
-1362 4271 l
-S
-1362 4271 m
-1362 4275 l
-1362 4280 l
-1362 4284 l
-1364 4287 l
-1367 4289 l
-1367 4293 l
-1367 4298 l
-1367 4302 l
-1369 4305 l
-1371 4307 l
-1371 4311 l
-S
-1371 4311 m
-1371 4316 l
-1371 4320 l
-1373 4322 l
-1376 4325 l
-1376 4329 l
-1376 4334 l
-1378 4336 l
-S
-1335 3748 m
-1338 3746 l
-S
-1335 3748 m
-1335 3753 l
-1335 3757 l
-1335 3762 l
-1335 3766 l
-1335 3770 l
-1335 3775 l
-1333 3777 l
-1331 3779 l
-1331 3784 l
-1331 3788 l
-S
-1331 3788 m
-1331 3793 l
-1331 3797 l
-1331 3802 l
-1331 3806 l
-1331 3811 l
-1331 3815 l
-1329 3817 l
-1326 3820 l
-1326 3824 l
-1326 3829 l
-S
-1326 3829 m
-1326 3833 l
-1326 3838 l
-1326 3842 l
-1326 3846 l
-1326 3851 l
-1326 3855 l
-1326 3860 l
-1326 3864 l
-1326 3869 l
-S
-1326 3869 m
-1326 3873 l
-1326 3878 l
-1324 3880 l
-1322 3882 l
-1322 3887 l
-1322 3891 l
-1322 3896 l
-1322 3900 l
-1322 3905 l
-1322 3909 l
-S
-1322 3909 m
-1322 3913 l
-1322 3918 l
-1322 3922 l
-1322 3927 l
-1322 3931 l
-1322 3936 l
-1322 3940 l
-1322 3945 l
-1322 3949 l
-S
-1322 3949 m
-1322 3954 l
-1322 3958 l
-1322 3963 l
-1322 3967 l
-1322 3972 l
-1322 3976 l
-1322 3981 l
-1322 3985 l
-1322 3989 l
-S
-1322 3989 m
-1322 3994 l
-1322 3998 l
-1322 4003 l
-1322 4007 l
-1322 4012 l
-1322 4016 l
-1324 4018 l
-1326 4021 l
-1326 4025 l
-1326 4030 l
-S
-1326 4030 m
-1326 4034 l
-1326 4039 l
-1326 4043 l
-1326 4048 l
-1326 4052 l
-1326 4056 l
-1326 4061 l
-1326 4065 l
-1326 4070 l
-S
-1326 4070 m
-1326 4074 l
-1326 4079 l
-1329 4081 l
-1331 4083 l
-1331 4088 l
-1331 4092 l
-1331 4097 l
-1331 4101 l
-1331 4106 l
-1331 4110 l
-S
-1331 4110 m
-1331 4115 l
-1331 4119 l
-1333 4121 l
-1335 4124 l
-1335 4128 l
-1335 4132 l
-1335 4137 l
-1335 4141 l
-1335 4146 l
-1335 4150 l
-S
-1338 4153 m
-1335 4150 l
-S
-1 g
-3879 3594 m
-3928 3594 l
-3928 3595 l
-3879 3595 l
-3842 3595 m
-3928 3595 l
-3928 3596 l
-3842 3596 l
-3806 3596 m
-3928 3596 l
-3928 3597 l
-3806 3597 l
-3806 3597 m
-3928 3597 l
-3928 3614 l
-3806 3614 l
-3806 3614 m
-3929 3614 l
-3929 3636 l
-3806 3636 l
-3807 3636 m
-3929 3636 l
-3929 3655 l
-3807 3655 l
-3807 3655 m
-3930 3655 l
-3930 3674 l
-3807 3674 l
-3808 3674 m
-3930 3674 l
-3930 3696 l
-3808 3696 l
-3808 3696 m
-3931 3696 l
-3931 3712 l
-3808 3712 l
-3809 3712 m
-3931 3712 l
-3931 3737 l
-3809 3737 l
-3809 3737 m
-3932 3737 l
-3932 3750 l
-3809 3750 l
-3810 3750 m
-3932 3750 l
-3932 3778 l
-3810 3778 l
-3810 3778 m
-3933 3778 l
-3933 3788 l
-3810 3788 l
-3811 3788 m
-3933 3788 l
-3933 3819 l
-3811 3819 l
-3811 3819 m
-3934 3819 l
-3934 3826 l
-3811 3826 l
-3812 3826 m
-3934 3826 l
-3934 3861 l
-3812 3861 l
-3812 3861 m
-3934 3861 l
-3934 3862 l
-3812 3862 l
-3812 3862 m
-3894 3862 l
-3894 3863 l
-3812 3863 l
-3812 3863 m
-3854 3863 l
-3854 3864 l
-3812 3864 l
-Y
-3927.5 3593.7 m
-3806 3597 l
-3813 3864 l
-3934 3861 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-3824 3626 m
-3825 3672 l
-3858 3646 l
-3858 3658 l
-3863 3666 l
-3867 3670 l
-3879 3674 l
-3888 3674 l
-3900 3670 l
-3908 3661 l
-3912 3648 l
-3912 3636 l
-3907 3623 l
-3903 3619 l
-3895 3615 l
-S
-3826 3726 m
-3830 3713 l
-3843 3705 l
-3863 3700 l
-3876 3699 l
-3897 3703 l
-3910 3711 l
-3914 3724 l
-3914 3732 l
-3911 3745 l
-3898 3753 l
-3877 3758 l
-3865 3758 l
-3844 3755 l
-3831 3747 l
-3827 3734 l
-3826 3726 l
-S
-3829 3809 m
-3832 3797 l
-3845 3788 l
-3866 3783 l
-3878 3783 l
-3899 3787 l
-3912 3795 l
-3916 3807 l
-3917 3815 l
-3913 3828 l
-3900 3837 l
-3880 3841 l
-3867 3842 l
-3846 3838 l
-3833 3830 l
-3829 3818 l
-3829 3809 l
-S
-1 g
-2463 2687 m
-2467 2687 l
-2467 2688 l
-2463 2688 l
-2460 2688 m
-2467 2688 l
-2467 2689 l
-2460 2689 l
-2458 2689 m
-2468 2689 l
-2468 2690 l
-2458 2690 l
-2455 2690 m
-2468 2690 l
-2468 2691 l
-2455 2691 l
-2453 2691 m
-2468 2691 l
-2468 2692 l
-2453 2692 l
-2450 2692 m
-2469 2692 l
-2469 2693 l
-2450 2693 l
-2448 2693 m
-2469 2693 l
-2469 2694 l
-2448 2694 l
-2445 2694 m
-2470 2694 l
-2470 2695 l
-2445 2695 l
-2442 2695 m
-2470 2695 l
-2470 2696 l
-2442 2696 l
-2440 2696 m
-2470 2696 l
-2470 2697 l
-2440 2697 l
-2437 2697 m
-2471 2697 l
-2471 2698 l
-2437 2698 l
-2435 2698 m
-2471 2698 l
-2471 2699 l
-2435 2699 l
-2432 2699 m
-2472 2699 l
-2472 2700 l
-2432 2700 l
-2430 2700 m
-2472 2700 l
-2472 2701 l
-2430 2701 l
-2427 2701 m
-2472 2701 l
-2472 2702 l
-2427 2702 l
-2424 2702 m
-2473 2702 l
-2473 2703 l
-2424 2703 l
-2422 2703 m
-2473 2703 l
-2473 2704 l
-2422 2704 l
-2419 2704 m
-2473 2704 l
-2473 2705 l
-2419 2705 l
-2417 2705 m
-2474 2705 l
-2474 2706 l
-2417 2706 l
-2414 2706 m
-2474 2706 l
-2474 2707 l
-2414 2707 l
-2412 2707 m
-2475 2707 l
-2475 2708 l
-2412 2708 l
-2409 2708 m
-2475 2708 l
-2475 2709 l
-2409 2709 l
-2406 2709 m
-2475 2709 l
-2475 2710 l
-2406 2710 l
-2404 2710 m
-2476 2710 l
-2476 2711 l
-2404 2711 l
-2401 2711 m
-2476 2711 l
-2476 2712 l
-2401 2712 l
-2399 2712 m
-2477 2712 l
-2477 2713 l
-2399 2713 l
-2396 2713 m
-2477 2713 l
-2477 2714 l
-2396 2714 l
-2394 2714 m
-2477 2714 l
-2477 2715 l
-2394 2715 l
-2391 2715 m
-2478 2715 l
-2478 2716 l
-2391 2716 l
-2388 2716 m
-2478 2716 l
-2478 2717 l
-2388 2717 l
-2386 2717 m
-2479 2717 l
-2479 2718 l
-2386 2718 l
-2383 2718 m
-2479 2718 l
-2479 2719 l
-2383 2719 l
-2381 2719 m
-2479 2719 l
-2479 2720 l
-2381 2720 l
-2378 2720 m
-2480 2720 l
-2480 2721 l
-2378 2721 l
-2376 2721 m
-2480 2721 l
-2480 2722 l
-2376 2722 l
-2373 2722 m
-2480 2722 l
-2480 2723 l
-2373 2723 l
-2371 2723 m
-2481 2723 l
-2481 2724 l
-2371 2724 l
-2368 2724 m
-2481 2724 l
-2481 2725 l
-2368 2725 l
-2365 2725 m
-2482 2725 l
-2482 2726 l
-2365 2726 l
-2363 2726 m
-2482 2726 l
-2482 2727 l
-2363 2727 l
-2360 2727 m
-2482 2727 l
-2482 2728 l
-2360 2728 l
-2358 2728 m
-2483 2728 l
-2483 2729 l
-2358 2729 l
-2355 2729 m
-2483 2729 l
-2483 2730 l
-2355 2730 l
-2353 2730 m
-2484 2730 l
-2484 2731 l
-2353 2731 l
-2350 2731 m
-2484 2731 l
-2484 2732 l
-2350 2732 l
-2347 2732 m
-2484 2732 l
-2484 2733 l
-2347 2733 l
-2345 2733 m
-2485 2733 l
-2485 2734 l
-2345 2734 l
-2342 2734 m
-2485 2734 l
-2485 2735 l
-2342 2735 l
-2340 2735 m
-2486 2735 l
-2486 2736 l
-2340 2736 l
-2337 2736 m
-2486 2736 l
-2486 2737 l
-2337 2737 l
-2335 2737 m
-2486 2737 l
-2486 2738 l
-2335 2738 l
-2332 2738 m
-2487 2738 l
-2487 2739 l
-2332 2739 l
-2329 2739 m
-2487 2739 l
-2487 2740 l
-2329 2740 l
-2327 2740 m
-2487 2740 l
-2487 2741 l
-2327 2741 l
-2324 2741 m
-2488 2741 l
-2488 2742 l
-2324 2742 l
-2322 2742 m
-2488 2742 l
-2488 2743 l
-2322 2743 l
-2319 2743 m
-2489 2743 l
-2489 2744 l
-2319 2744 l
-2317 2744 m
-2489 2744 l
-2489 2745 l
-2317 2745 l
-2314 2745 m
-2489 2745 l
-2489 2746 l
-2314 2746 l
-2311 2746 m
-2490 2746 l
-2490 2747 l
-2311 2747 l
-2309 2747 m
-2490 2747 l
-2490 2748 l
-2309 2748 l
-2306 2748 m
-2491 2748 l
-2491 2749 l
-2306 2749 l
-2304 2749 m
-2491 2749 l
-2491 2750 l
-2304 2750 l
-2301 2750 m
-2491 2750 l
-2491 2751 l
-2301 2751 l
-2299 2751 m
-2492 2751 l
-2492 2752 l
-2299 2752 l
-2296 2752 m
-2492 2752 l
-2492 2753 l
-2296 2753 l
-2294 2753 m
-2493 2753 l
-2493 2754 l
-2294 2754 l
-2291 2754 m
-2493 2754 l
-2493 2755 l
-2291 2755 l
-2288 2755 m
-2493 2755 l
-2493 2756 l
-2288 2756 l
-2286 2756 m
-2494 2756 l
-2494 2757 l
-2286 2757 l
-2283 2757 m
-2494 2757 l
-2494 2758 l
-2283 2758 l
-2281 2758 m
-2494 2758 l
-2494 2759 l
-2281 2759 l
-2278 2759 m
-2495 2759 l
-2495 2760 l
-2278 2760 l
-2276 2760 m
-2495 2760 l
-2495 2761 l
-2276 2761 l
-2273 2761 m
-2496 2761 l
-2496 2762 l
-2273 2762 l
-2270 2762 m
-2496 2762 l
-2496 2763 l
-2270 2763 l
-2268 2763 m
-2496 2763 l
-2496 2764 l
-2268 2764 l
-2265 2764 m
-2497 2764 l
-2497 2765 l
-2265 2765 l
-2263 2765 m
-2497 2765 l
-2497 2766 l
-2263 2766 l
-2260 2766 m
-2498 2766 l
-2498 2767 l
-2260 2767 l
-2258 2767 m
-2498 2767 l
-2498 2768 l
-2258 2768 l
-2255 2768 m
-2498 2768 l
-2498 2769 l
-2255 2769 l
-2252 2769 m
-2499 2769 l
-2499 2770 l
-2252 2770 l
-2250 2770 m
-2499 2770 l
-2499 2771 l
-2250 2771 l
-2247 2771 m
-2500 2771 l
-2500 2772 l
-2247 2772 l
-2245 2772 m
-2500 2772 l
-2500 2773 l
-2245 2773 l
-2242 2773 m
-2500 2773 l
-2500 2774 l
-2242 2774 l
-2240 2774 m
-2501 2774 l
-2501 2775 l
-2240 2775 l
-2237 2775 m
-2501 2775 l
-2501 2776 l
-2237 2776 l
-2234 2776 m
-2501 2776 l
-2501 2777 l
-2234 2777 l
-2232 2777 m
-2502 2777 l
-2502 2778 l
-2232 2778 l
-2229 2778 m
-2502 2778 l
-2502 2779 l
-2229 2779 l
-2227 2779 m
-2503 2779 l
-2503 2780 l
-2227 2780 l
-2224 2780 m
-2503 2780 l
-2503 2781 l
-2224 2781 l
-2222 2781 m
-2503 2781 l
-2503 2782 l
-2222 2782 l
-2219 2782 m
-2504 2782 l
-2504 2783 l
-2219 2783 l
-2217 2783 m
-2504 2783 l
-2504 2784 l
-2217 2784 l
-2217 2784 m
-2505 2784 l
-2505 2787 l
-2217 2787 l
-2218 2787 m
-2506 2787 l
-2506 2789 l
-2218 2789 l
-2218 2789 m
-2507 2789 l
-2507 2790 l
-2218 2790 l
-2219 2790 m
-2507 2790 l
-2507 2792 l
-2219 2792 l
-2220 2792 m
-2508 2792 l
-2508 2795 l
-2220 2795 l
-2221 2795 m
-2509 2795 l
-2509 2797 l
-2221 2797 l
-2222 2797 m
-2510 2797 l
-2510 2800 l
-2222 2800 l
-2223 2800 m
-2510 2800 l
-2510 2801 l
-2223 2801 l
-2223 2801 m
-2508 2801 l
-2508 2802 l
-2223 2802 l
-2224 2802 m
-2505 2802 l
-2505 2803 l
-2224 2803 l
-2224 2803 m
-2503 2803 l
-2503 2804 l
-2224 2804 l
-2224 2804 m
-2500 2804 l
-2500 2805 l
-2224 2805 l
-2225 2805 m
-2498 2805 l
-2498 2806 l
-2225 2806 l
-2225 2806 m
-2495 2806 l
-2495 2807 l
-2225 2807 l
-2225 2807 m
-2492 2807 l
-2492 2808 l
-2225 2808 l
-2226 2808 m
-2490 2808 l
-2490 2809 l
-2226 2809 l
-2226 2809 m
-2487 2809 l
-2487 2810 l
-2226 2810 l
-2227 2810 m
-2485 2810 l
-2485 2811 l
-2227 2811 l
-2227 2811 m
-2482 2811 l
-2482 2812 l
-2227 2812 l
-2227 2812 m
-2480 2812 l
-2480 2813 l
-2227 2813 l
-2228 2813 m
-2477 2813 l
-2477 2814 l
-2228 2814 l
-2228 2814 m
-2474 2814 l
-2474 2815 l
-2228 2815 l
-2229 2815 m
-2472 2815 l
-2472 2816 l
-2229 2816 l
-2229 2816 m
-2469 2816 l
-2469 2817 l
-2229 2817 l
-2229 2817 m
-2467 2817 l
-2467 2818 l
-2229 2818 l
-2230 2818 m
-2464 2818 l
-2464 2819 l
-2230 2819 l
-2230 2819 m
-2462 2819 l
-2462 2820 l
-2230 2820 l
-2231 2820 m
-2459 2820 l
-2459 2821 l
-2231 2821 l
-2231 2821 m
-2457 2821 l
-2457 2822 l
-2231 2822 l
-2231 2822 m
-2454 2822 l
-2454 2823 l
-2231 2823 l
-2232 2823 m
-2451 2823 l
-2451 2824 l
-2232 2824 l
-2232 2824 m
-2449 2824 l
-2449 2825 l
-2232 2825 l
-2232 2825 m
-2446 2825 l
-2446 2826 l
-2232 2826 l
-2233 2826 m
-2444 2826 l
-2444 2827 l
-2233 2827 l
-2233 2827 m
-2441 2827 l
-2441 2828 l
-2233 2828 l
-2234 2828 m
-2439 2828 l
-2439 2829 l
-2234 2829 l
-2234 2829 m
-2436 2829 l
-2436 2830 l
-2234 2830 l
-2234 2830 m
-2433 2830 l
-2433 2831 l
-2234 2831 l
-2235 2831 m
-2431 2831 l
-2431 2832 l
-2235 2832 l
-2235 2832 m
-2428 2832 l
-2428 2833 l
-2235 2833 l
-2236 2833 m
-2426 2833 l
-2426 2834 l
-2236 2834 l
-2236 2834 m
-2423 2834 l
-2423 2835 l
-2236 2835 l
-2236 2835 m
-2421 2835 l
-2421 2836 l
-2236 2836 l
-2237 2836 m
-2418 2836 l
-2418 2837 l
-2237 2837 l
-2237 2837 m
-2415 2837 l
-2415 2838 l
-2237 2838 l
-2238 2838 m
-2413 2838 l
-2413 2839 l
-2238 2839 l
-2238 2839 m
-2410 2839 l
-2410 2840 l
-2238 2840 l
-2238 2840 m
-2408 2840 l
-2408 2841 l
-2238 2841 l
-2239 2841 m
-2405 2841 l
-2405 2842 l
-2239 2842 l
-2239 2842 m
-2403 2842 l
-2403 2843 l
-2239 2843 l
-2239 2843 m
-2400 2843 l
-2400 2844 l
-2239 2844 l
-2240 2844 m
-2397 2844 l
-2397 2845 l
-2240 2845 l
-2240 2845 m
-2395 2845 l
-2395 2846 l
-2240 2846 l
-2241 2846 m
-2392 2846 l
-2392 2847 l
-2241 2847 l
-2241 2847 m
-2390 2847 l
-2390 2848 l
-2241 2848 l
-2241 2848 m
-2387 2848 l
-2387 2849 l
-2241 2849 l
-2242 2849 m
-2385 2849 l
-2385 2850 l
-2242 2850 l
-2242 2850 m
-2382 2850 l
-2382 2851 l
-2242 2851 l
-2243 2851 m
-2380 2851 l
-2380 2852 l
-2243 2852 l
-2243 2852 m
-2377 2852 l
-2377 2853 l
-2243 2853 l
-2243 2853 m
-2374 2853 l
-2374 2854 l
-2243 2854 l
-2244 2854 m
-2372 2854 l
-2372 2855 l
-2244 2855 l
-2244 2855 m
-2369 2855 l
-2369 2856 l
-2244 2856 l
-2245 2856 m
-2367 2856 l
-2367 2857 l
-2245 2857 l
-2245 2857 m
-2364 2857 l
-2364 2858 l
-2245 2858 l
-2245 2858 m
-2362 2858 l
-2362 2859 l
-2245 2859 l
-2246 2859 m
-2359 2859 l
-2359 2860 l
-2246 2860 l
-2246 2860 m
-2356 2860 l
-2356 2861 l
-2246 2861 l
-2246 2861 m
-2354 2861 l
-2354 2862 l
-2246 2862 l
-2247 2862 m
-2351 2862 l
-2351 2863 l
-2247 2863 l
-2247 2863 m
-2349 2863 l
-2349 2864 l
-2247 2864 l
-2248 2864 m
-2346 2864 l
-2346 2865 l
-2248 2865 l
-2248 2865 m
-2344 2865 l
-2344 2866 l
-2248 2866 l
-2248 2866 m
-2341 2866 l
-2341 2867 l
-2248 2867 l
-2249 2867 m
-2338 2867 l
-2338 2868 l
-2249 2868 l
-2249 2868 m
-2336 2868 l
-2336 2869 l
-2249 2869 l
-2250 2869 m
-2333 2869 l
-2333 2870 l
-2250 2870 l
-2250 2870 m
-2331 2870 l
-2331 2871 l
-2250 2871 l
-2250 2871 m
-2328 2871 l
-2328 2872 l
-2250 2872 l
-2251 2872 m
-2326 2872 l
-2326 2873 l
-2251 2873 l
-2251 2873 m
-2323 2873 l
-2323 2874 l
-2251 2874 l
-2252 2874 m
-2321 2874 l
-2321 2875 l
-2252 2875 l
-2252 2875 m
-2318 2875 l
-2318 2876 l
-2252 2876 l
-2252 2876 m
-2315 2876 l
-2315 2877 l
-2252 2877 l
-2253 2877 m
-2313 2877 l
-2313 2878 l
-2253 2878 l
-2253 2878 m
-2310 2878 l
-2310 2879 l
-2253 2879 l
-2253 2879 m
-2308 2879 l
-2308 2880 l
-2253 2880 l
-2254 2880 m
-2305 2880 l
-2305 2881 l
-2254 2881 l
-2254 2881 m
-2303 2881 l
-2303 2882 l
-2254 2882 l
-2255 2882 m
-2300 2882 l
-2300 2883 l
-2255 2883 l
-2255 2883 m
-2297 2883 l
-2297 2884 l
-2255 2884 l
-2255 2884 m
-2295 2884 l
-2295 2885 l
-2255 2885 l
-2256 2885 m
-2292 2885 l
-2292 2886 l
-2256 2886 l
-2256 2886 m
-2290 2886 l
-2290 2887 l
-2256 2887 l
-2257 2887 m
-2287 2887 l
-2287 2888 l
-2257 2888 l
-2257 2888 m
-2285 2888 l
-2285 2889 l
-2257 2889 l
-2257 2889 m
-2282 2889 l
-2282 2890 l
-2257 2890 l
-2258 2890 m
-2279 2890 l
-2279 2891 l
-2258 2891 l
-2258 2891 m
-2277 2891 l
-2277 2892 l
-2258 2892 l
-2259 2892 m
-2274 2892 l
-2274 2893 l
-2259 2893 l
-2259 2893 m
-2272 2893 l
-2272 2894 l
-2259 2894 l
-2259 2894 m
-2269 2894 l
-2269 2895 l
-2259 2895 l
-2260 2895 m
-2267 2895 l
-2267 2896 l
-2260 2896 l
-2260 2896 m
-2264 2896 l
-2264 2897 l
-2260 2897 l
-Y
-2509.9 2800 m
-2466 2687 l
-2217 2784 l
-2261 2897 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-2456 2731 m
-2455 2727 l
-2448 2721 l
-2442 2719 l
-2433 2718 l
-2418 2724 l
-2411 2731 l
-2409 2736 l
-2408 2746 l
-2411 2753 l
-2418 2760 l
-2430 2768 l
-2484 2792 l
-2430 2813 l
-S
-2336 2756 m
-2396 2795 l
-2338 2818 l
-S
-2336 2756 m
-2368 2838 l
-S
-2274 2780 m
-2287 2780 l
-2299 2788 l
-2311 2806 l
-2315 2818 l
-2319 2839 l
-2316 2853 l
-2305 2862 l
-2298 2865 l
-2284 2866 l
-2272 2857 l
-2261 2839 l
-2256 2827 l
-2252 2806 l
-2256 2792 l
-2266 2783 l
-2274 2780 l
-S
-1 g
-1926 3331 m
-1931 3331 l
-1931 3332 l
-1926 3332 l
-1921 3332 m
-1932 3332 l
-1932 3333 l
-1921 3333 l
-1916 3333 m
-1932 3333 l
-1932 3334 l
-1916 3334 l
-1910 3334 m
-1932 3334 l
-1932 3335 l
-1910 3335 l
-1905 3335 m
-1932 3335 l
-1932 3336 l
-1905 3336 l
-1900 3336 m
-1932 3336 l
-1932 3337 l
-1900 3337 l
-1895 3337 m
-1932 3337 l
-1932 3338 l
-1895 3338 l
-1890 3338 m
-1933 3338 l
-1933 3339 l
-1890 3339 l
-1884 3339 m
-1933 3339 l
-1933 3340 l
-1884 3340 l
-1879 3340 m
-1933 3340 l
-1933 3341 l
-1879 3341 l
-1874 3341 m
-1933 3341 l
-1933 3342 l
-1874 3342 l
-1869 3342 m
-1933 3342 l
-1933 3343 l
-1869 3343 l
-1864 3343 m
-1934 3343 l
-1934 3344 l
-1864 3344 l
-1858 3344 m
-1934 3344 l
-1934 3345 l
-1858 3345 l
-1853 3345 m
-1934 3345 l
-1934 3346 l
-1853 3346 l
-1848 3346 m
-1934 3346 l
-1934 3347 l
-1848 3347 l
-1843 3347 m
-1934 3347 l
-1934 3348 l
-1843 3348 l
-1838 3348 m
-1935 3348 l
-1935 3349 l
-1838 3349 l
-1832 3349 m
-1935 3349 l
-1935 3350 l
-1832 3350 l
-1827 3350 m
-1935 3350 l
-1935 3351 l
-1827 3351 l
-1822 3351 m
-1935 3351 l
-1935 3352 l
-1822 3352 l
-1817 3352 m
-1935 3352 l
-1935 3353 l
-1817 3353 l
-1812 3353 m
-1936 3353 l
-1936 3354 l
-1812 3354 l
-1812 3354 m
-1936 3354 l
-1936 3359 l
-1812 3359 l
-1812 3359 m
-1937 3359 l
-1937 3360 l
-1812 3360 l
-1813 3360 m
-1937 3360 l
-1937 3364 l
-1813 3364 l
-1813 3364 m
-1938 3364 l
-1938 3365 l
-1813 3365 l
-1814 3365 m
-1938 3365 l
-1938 3369 l
-1814 3369 l
-1814 3369 m
-1939 3369 l
-1939 3370 l
-1814 3370 l
-1815 3370 m
-1939 3370 l
-1939 3375 l
-1815 3375 l
-1815 3375 m
-1940 3375 l
-1940 3376 l
-1815 3376 l
-1816 3376 m
-1940 3376 l
-1940 3380 l
-1816 3380 l
-1816 3380 m
-1941 3380 l
-1941 3381 l
-1816 3381 l
-1817 3381 m
-1941 3381 l
-1941 3385 l
-1817 3385 l
-1817 3385 m
-1942 3385 l
-1942 3386 l
-1817 3386 l
-1818 3386 m
-1942 3386 l
-1942 3390 l
-1818 3390 l
-1818 3390 m
-1943 3390 l
-1943 3392 l
-1818 3392 l
-1819 3392 m
-1943 3392 l
-1943 3396 l
-1819 3396 l
-1819 3396 m
-1944 3396 l
-1944 3397 l
-1819 3397 l
-1820 3397 m
-1944 3397 l
-1944 3401 l
-1820 3401 l
-1820 3401 m
-1945 3401 l
-1945 3402 l
-1820 3402 l
-1821 3402 m
-1945 3402 l
-1945 3406 l
-1821 3406 l
-1821 3406 m
-1946 3406 l
-1946 3408 l
-1821 3408 l
-1822 3408 m
-1946 3408 l
-1946 3412 l
-1822 3412 l
-1822 3412 m
-1947 3412 l
-1947 3413 l
-1822 3413 l
-1823 3413 m
-1947 3413 l
-1947 3417 l
-1823 3417 l
-1823 3417 m
-1948 3417 l
-1948 3418 l
-1823 3418 l
-1824 3418 m
-1948 3418 l
-1948 3422 l
-1824 3422 l
-1824 3422 m
-1949 3422 l
-1949 3424 l
-1824 3424 l
-1825 3424 m
-1949 3424 l
-1949 3427 l
-1825 3427 l
-1825 3427 m
-1950 3427 l
-1950 3429 l
-1825 3429 l
-1826 3429 m
-1950 3429 l
-1950 3433 l
-1826 3433 l
-1826 3433 m
-1951 3433 l
-1951 3434 l
-1826 3434 l
-1827 3434 m
-1951 3434 l
-1951 3438 l
-1827 3438 l
-1827 3438 m
-1952 3438 l
-1952 3440 l
-1827 3440 l
-1828 3440 m
-1952 3440 l
-1952 3443 l
-1828 3443 l
-1828 3443 m
-1953 3443 l
-1953 3445 l
-1828 3445 l
-1829 3445 m
-1953 3445 l
-1953 3448 l
-1829 3448 l
-1829 3448 m
-1954 3448 l
-1954 3450 l
-1829 3450 l
-1830 3450 m
-1954 3450 l
-1954 3454 l
-1830 3454 l
-1830 3454 m
-1955 3454 l
-1955 3456 l
-1830 3456 l
-1831 3456 m
-1955 3456 l
-1955 3459 l
-1831 3459 l
-1831 3459 m
-1956 3459 l
-1956 3461 l
-1831 3461 l
-1832 3461 m
-1956 3461 l
-1956 3464 l
-1832 3464 l
-1832 3464 m
-1957 3464 l
-1957 3466 l
-1832 3466 l
-1833 3466 m
-1957 3466 l
-1957 3470 l
-1833 3470 l
-1833 3470 m
-1958 3470 l
-1958 3472 l
-1833 3472 l
-1834 3472 m
-1958 3472 l
-1958 3475 l
-1834 3475 l
-1834 3475 m
-1959 3475 l
-1959 3477 l
-1834 3477 l
-1835 3477 m
-1959 3477 l
-1959 3480 l
-1835 3480 l
-1835 3480 m
-1960 3480 l
-1960 3482 l
-1835 3482 l
-1836 3482 m
-1960 3482 l
-1960 3485 l
-1836 3485 l
-1836 3485 m
-1961 3485 l
-1961 3487 l
-1836 3487 l
-1837 3487 m
-1961 3487 l
-1961 3491 l
-1837 3491 l
-1837 3491 m
-1962 3491 l
-1962 3493 l
-1837 3493 l
-1838 3493 m
-1962 3493 l
-1962 3496 l
-1838 3496 l
-1838 3496 m
-1963 3496 l
-1963 3498 l
-1838 3498 l
-1839 3498 m
-1963 3498 l
-1963 3501 l
-1839 3501 l
-1839 3501 m
-1964 3501 l
-1964 3503 l
-1839 3503 l
-1840 3503 m
-1964 3503 l
-1964 3507 l
-1840 3507 l
-1840 3507 m
-1965 3507 l
-1965 3509 l
-1840 3509 l
-1841 3509 m
-1965 3509 l
-1965 3512 l
-1841 3512 l
-1841 3512 m
-1966 3512 l
-1966 3514 l
-1841 3514 l
-1842 3514 m
-1966 3514 l
-1966 3517 l
-1842 3517 l
-1842 3517 m
-1967 3517 l
-1967 3519 l
-1842 3519 l
-1843 3519 m
-1967 3519 l
-1967 3522 l
-1843 3522 l
-1843 3522 m
-1968 3522 l
-1968 3525 l
-1843 3525 l
-1844 3525 m
-1968 3525 l
-1968 3528 l
-1844 3528 l
-1844 3528 m
-1969 3528 l
-1969 3530 l
-1844 3530 l
-1845 3530 m
-1969 3530 l
-1969 3533 l
-1845 3533 l
-1845 3533 m
-1970 3533 l
-1970 3535 l
-1845 3535 l
-1846 3535 m
-1970 3535 l
-1970 3538 l
-1846 3538 l
-1846 3538 m
-1971 3538 l
-1971 3541 l
-1846 3541 l
-1847 3541 m
-1971 3541 l
-1971 3544 l
-1847 3544 l
-1847 3544 m
-1972 3544 l
-1972 3546 l
-1847 3546 l
-1848 3546 m
-1972 3546 l
-1972 3549 l
-1848 3549 l
-1848 3549 m
-1973 3549 l
-1973 3551 l
-1848 3551 l
-1849 3551 m
-1973 3551 l
-1973 3554 l
-1849 3554 l
-1849 3554 m
-1974 3554 l
-1974 3557 l
-1849 3557 l
-1850 3557 m
-1974 3557 l
-1974 3559 l
-1850 3559 l
-1850 3559 m
-1975 3559 l
-1975 3562 l
-1850 3562 l
-1851 3562 m
-1975 3562 l
-1975 3565 l
-1851 3565 l
-1851 3565 m
-1976 3565 l
-1976 3567 l
-1851 3567 l
-1852 3567 m
-1976 3567 l
-1976 3570 l
-1852 3570 l
-1852 3570 m
-1977 3570 l
-1977 3573 l
-1852 3573 l
-1853 3573 m
-1977 3573 l
-1977 3575 l
-1853 3575 l
-1853 3575 m
-1978 3575 l
-1978 3578 l
-1853 3578 l
-1854 3578 m
-1978 3578 l
-1978 3581 l
-1854 3581 l
-1854 3581 m
-1978 3581 l
-1978 3582 l
-1854 3582 l
-1854 3582 m
-1973 3582 l
-1973 3583 l
-1854 3583 l
-1855 3583 m
-1968 3583 l
-1968 3584 l
-1855 3584 l
-1855 3584 m
-1963 3584 l
-1963 3585 l
-1855 3585 l
-1855 3585 m
-1958 3585 l
-1958 3586 l
-1855 3586 l
-1855 3586 m
-1953 3586 l
-1953 3587 l
-1855 3587 l
-1855 3587 m
-1947 3587 l
-1947 3588 l
-1855 3588 l
-1855 3588 m
-1942 3588 l
-1942 3589 l
-1855 3589 l
-1856 3589 m
-1937 3589 l
-1937 3590 l
-1856 3590 l
-1856 3590 m
-1932 3590 l
-1932 3591 l
-1856 3591 l
-1856 3591 m
-1927 3591 l
-1927 3592 l
-1856 3592 l
-1856 3592 m
-1922 3592 l
-1922 3593 l
-1856 3593 l
-1856 3593 m
-1916 3593 l
-1916 3594 l
-1856 3594 l
-1857 3594 m
-1911 3594 l
-1911 3595 l
-1857 3595 l
-1857 3595 m
-1906 3595 l
-1906 3596 l
-1857 3596 l
-1857 3596 m
-1901 3596 l
-1901 3597 l
-1857 3597 l
-1857 3597 m
-1896 3597 l
-1896 3598 l
-1857 3598 l
-1857 3598 m
-1891 3598 l
-1891 3599 l
-1857 3599 l
-1858 3599 m
-1885 3599 l
-1885 3600 l
-1858 3600 l
-1858 3600 m
-1880 3600 l
-1880 3601 l
-1858 3601 l
-1858 3601 m
-1875 3601 l
-1875 3602 l
-1858 3602 l
-1858 3602 m
-1870 3602 l
-1870 3603 l
-1858 3603 l
-1858 3603 m
-1865 3603 l
-1865 3604 l
-1858 3604 l
-Y
-1930.7 3331.2 m
-1812 3354 l
-1859 3604 l
-1978 3581 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-1848 3368 m
-1846 3377 l
-1836 3392 l
-1922 3375 l
-S
-1849 3461 m
-1851 3448 l
-1858 3443 l
-1867 3441 l
-1876 3444 l
-1881 3451 l
-1888 3467 l
-1895 3478 l
-1905 3485 l
-1914 3487 l
-1926 3485 l
-1933 3479 l
-1937 3475 l
-1938 3461 l
-1935 3445 l
-1929 3434 l
-1924 3430 l
-1915 3428 l
-1903 3430 l
-1895 3436 l
-1889 3445 l
-1887 3459 l
-1886 3476 l
-1883 3485 l
-1876 3490 l
-1868 3492 l
-1859 3489 l
-1852 3478 l
-1849 3461 l
-S
-1866 3548 m
-1867 3535 l
-1878 3524 l
-1898 3516 l
-1910 3514 l
-1931 3514 l
-1945 3520 l
-1952 3531 l
-1953 3539 l
-1952 3553 l
-1941 3563 l
-1921 3571 l
-1909 3573 l
-1887 3573 l
-1874 3567 l
-1867 3556 l
-1866 3548 l
-S
-1 g
-2178 3840 m
-2182 3840 l
-2182 3841 l
-2178 3841 l
-2178 3841 m
-2183 3841 l
-2183 3842 l
-2178 3842 l
-2177 3842 m
-2184 3842 l
-2184 3843 l
-2177 3843 l
-2176 3843 m
-2186 3843 l
-2186 3844 l
-2176 3844 l
-2175 3844 m
-2187 3844 l
-2187 3845 l
-2175 3845 l
-2174 3845 m
-2188 3845 l
-2188 3846 l
-2174 3846 l
-2174 3846 m
-2189 3846 l
-2189 3847 l
-2174 3847 l
-2173 3847 m
-2191 3847 l
-2191 3848 l
-2173 3848 l
-2172 3848 m
-2192 3848 l
-2192 3849 l
-2172 3849 l
-2171 3849 m
-2193 3849 l
-2193 3850 l
-2171 3850 l
-2170 3850 m
-2194 3850 l
-2194 3851 l
-2170 3851 l
-2170 3851 m
-2196 3851 l
-2196 3852 l
-2170 3852 l
-2169 3852 m
-2197 3852 l
-2197 3853 l
-2169 3853 l
-2168 3853 m
-2198 3853 l
-2198 3854 l
-2168 3854 l
-2167 3854 m
-2199 3854 l
-2199 3855 l
-2167 3855 l
-2166 3855 m
-2201 3855 l
-2201 3856 l
-2166 3856 l
-2166 3856 m
-2202 3856 l
-2202 3857 l
-2166 3857 l
-2165 3857 m
-2203 3857 l
-2203 3858 l
-2165 3858 l
-2164 3858 m
-2204 3858 l
-2204 3859 l
-2164 3859 l
-2163 3859 m
-2206 3859 l
-2206 3860 l
-2163 3860 l
-2162 3860 m
-2207 3860 l
-2207 3861 l
-2162 3861 l
-2162 3861 m
-2208 3861 l
-2208 3862 l
-2162 3862 l
-2161 3862 m
-2209 3862 l
-2209 3863 l
-2161 3863 l
-2160 3863 m
-2211 3863 l
-2211 3864 l
-2160 3864 l
-2159 3864 m
-2212 3864 l
-2212 3865 l
-2159 3865 l
-2158 3865 m
-2213 3865 l
-2213 3866 l
-2158 3866 l
-2158 3866 m
-2214 3866 l
-2214 3867 l
-2158 3867 l
-2157 3867 m
-2216 3867 l
-2216 3868 l
-2157 3868 l
-2156 3868 m
-2217 3868 l
-2217 3869 l
-2156 3869 l
-2155 3869 m
-2218 3869 l
-2218 3870 l
-2155 3870 l
-2154 3870 m
-2219 3870 l
-2219 3871 l
-2154 3871 l
-2154 3871 m
-2221 3871 l
-2221 3872 l
-2154 3872 l
-2153 3872 m
-2222 3872 l
-2222 3873 l
-2153 3873 l
-2152 3873 m
-2223 3873 l
-2223 3874 l
-2152 3874 l
-2151 3874 m
-2224 3874 l
-2224 3875 l
-2151 3875 l
-2150 3875 m
-2226 3875 l
-2226 3876 l
-2150 3876 l
-2150 3876 m
-2227 3876 l
-2227 3877 l
-2150 3877 l
-2149 3877 m
-2228 3877 l
-2228 3878 l
-2149 3878 l
-2148 3878 m
-2229 3878 l
-2229 3879 l
-2148 3879 l
-2147 3879 m
-2231 3879 l
-2231 3880 l
-2147 3880 l
-2146 3880 m
-2232 3880 l
-2232 3881 l
-2146 3881 l
-2146 3881 m
-2233 3881 l
-2233 3882 l
-2146 3882 l
-2145 3882 m
-2234 3882 l
-2234 3883 l
-2145 3883 l
-2144 3883 m
-2236 3883 l
-2236 3884 l
-2144 3884 l
-2143 3884 m
-2237 3884 l
-2237 3885 l
-2143 3885 l
-2143 3885 m
-2238 3885 l
-2238 3886 l
-2143 3886 l
-2142 3886 m
-2239 3886 l
-2239 3887 l
-2142 3887 l
-2141 3887 m
-2241 3887 l
-2241 3888 l
-2141 3888 l
-2140 3888 m
-2242 3888 l
-2242 3889 l
-2140 3889 l
-2139 3889 m
-2243 3889 l
-2243 3890 l
-2139 3890 l
-2139 3890 m
-2244 3890 l
-2244 3891 l
-2139 3891 l
-2138 3891 m
-2246 3891 l
-2246 3892 l
-2138 3892 l
-2137 3892 m
-2247 3892 l
-2247 3893 l
-2137 3893 l
-2136 3893 m
-2248 3893 l
-2248 3894 l
-2136 3894 l
-2135 3894 m
-2249 3894 l
-2249 3895 l
-2135 3895 l
-2135 3895 m
-2251 3895 l
-2251 3896 l
-2135 3896 l
-2134 3896 m
-2252 3896 l
-2252 3897 l
-2134 3897 l
-2133 3897 m
-2253 3897 l
-2253 3898 l
-2133 3898 l
-2132 3898 m
-2254 3898 l
-2254 3899 l
-2132 3899 l
-2131 3899 m
-2256 3899 l
-2256 3900 l
-2131 3900 l
-2131 3900 m
-2257 3900 l
-2257 3901 l
-2131 3901 l
-2130 3901 m
-2258 3901 l
-2258 3902 l
-2130 3902 l
-2129 3902 m
-2259 3902 l
-2259 3903 l
-2129 3903 l
-2128 3903 m
-2261 3903 l
-2261 3904 l
-2128 3904 l
-2127 3904 m
-2262 3904 l
-2262 3905 l
-2127 3905 l
-2127 3905 m
-2263 3905 l
-2263 3906 l
-2127 3906 l
-2126 3906 m
-2264 3906 l
-2264 3907 l
-2126 3907 l
-2125 3907 m
-2266 3907 l
-2266 3908 l
-2125 3908 l
-2124 3908 m
-2267 3908 l
-2267 3909 l
-2124 3909 l
-2123 3909 m
-2268 3909 l
-2268 3910 l
-2123 3910 l
-2123 3910 m
-2269 3910 l
-2269 3911 l
-2123 3911 l
-2122 3911 m
-2271 3911 l
-2271 3912 l
-2122 3912 l
-2121 3912 m
-2272 3912 l
-2272 3913 l
-2121 3913 l
-2120 3913 m
-2273 3913 l
-2273 3914 l
-2120 3914 l
-2119 3914 m
-2274 3914 l
-2274 3915 l
-2119 3915 l
-2119 3915 m
-2276 3915 l
-2276 3916 l
-2119 3916 l
-2118 3916 m
-2277 3916 l
-2277 3917 l
-2118 3917 l
-2117 3917 m
-2278 3917 l
-2278 3918 l
-2117 3918 l
-2116 3918 m
-2279 3918 l
-2279 3919 l
-2116 3919 l
-2115 3919 m
-2281 3919 l
-2281 3920 l
-2115 3920 l
-2115 3920 m
-2282 3920 l
-2282 3921 l
-2115 3921 l
-2114 3921 m
-2283 3921 l
-2283 3922 l
-2114 3922 l
-2113 3922 m
-2284 3922 l
-2284 3923 l
-2113 3923 l
-2112 3923 m
-2286 3923 l
-2286 3924 l
-2112 3924 l
-2111 3924 m
-2287 3924 l
-2287 3925 l
-2111 3925 l
-2111 3925 m
-2288 3925 l
-2288 3926 l
-2111 3926 l
-2110 3926 m
-2289 3926 l
-2289 3927 l
-2110 3927 l
-2109 3927 m
-2291 3927 l
-2291 3928 l
-2109 3928 l
-2108 3928 m
-2292 3928 l
-2292 3929 l
-2108 3929 l
-2107 3929 m
-2293 3929 l
-2293 3930 l
-2107 3930 l
-2107 3930 m
-2294 3930 l
-2294 3931 l
-2107 3931 l
-2106 3931 m
-2296 3931 l
-2296 3932 l
-2106 3932 l
-2105 3932 m
-2297 3932 l
-2297 3933 l
-2105 3933 l
-2104 3933 m
-2298 3933 l
-2298 3934 l
-2104 3934 l
-2104 3934 m
-2299 3934 l
-2299 3935 l
-2104 3935 l
-2104 3935 m
-2301 3935 l
-2301 3936 l
-2104 3936 l
-2105 3936 m
-2302 3936 l
-2302 3937 l
-2105 3937 l
-2106 3937 m
-2303 3937 l
-2303 3938 l
-2106 3938 l
-2107 3938 m
-2304 3938 l
-2304 3939 l
-2107 3939 l
-2109 3939 m
-2306 3939 l
-2306 3940 l
-2109 3940 l
-2110 3940 m
-2307 3940 l
-2307 3941 l
-2110 3941 l
-2111 3941 m
-2308 3941 l
-2308 3942 l
-2111 3942 l
-2112 3942 m
-2309 3942 l
-2309 3943 l
-2112 3943 l
-2114 3943 m
-2311 3943 l
-2311 3944 l
-2114 3944 l
-2115 3944 m
-2312 3944 l
-2312 3945 l
-2115 3945 l
-2116 3945 m
-2313 3945 l
-2313 3946 l
-2116 3946 l
-2117 3946 m
-2314 3946 l
-2314 3947 l
-2117 3947 l
-2119 3947 m
-2316 3947 l
-2316 3948 l
-2119 3948 l
-2120 3948 m
-2317 3948 l
-2317 3949 l
-2120 3949 l
-2121 3949 m
-2318 3949 l
-2318 3950 l
-2121 3950 l
-2122 3950 m
-2319 3950 l
-2319 3951 l
-2122 3951 l
-2124 3951 m
-2321 3951 l
-2321 3952 l
-2124 3952 l
-2125 3952 m
-2322 3952 l
-2322 3953 l
-2125 3953 l
-2126 3953 m
-2323 3953 l
-2323 3954 l
-2126 3954 l
-2127 3954 m
-2324 3954 l
-2324 3955 l
-2127 3955 l
-2129 3955 m
-2326 3955 l
-2326 3956 l
-2129 3956 l
-2130 3956 m
-2327 3956 l
-2327 3957 l
-2130 3957 l
-2131 3957 m
-2328 3957 l
-2328 3958 l
-2131 3958 l
-2132 3958 m
-2329 3958 l
-2329 3959 l
-2132 3959 l
-2134 3959 m
-2331 3959 l
-2331 3960 l
-2134 3960 l
-2135 3960 m
-2332 3960 l
-2332 3961 l
-2135 3961 l
-2136 3961 m
-2333 3961 l
-2333 3962 l
-2136 3962 l
-2138 3962 m
-2334 3962 l
-2334 3963 l
-2138 3963 l
-2139 3963 m
-2336 3963 l
-2336 3964 l
-2139 3964 l
-2140 3964 m
-2337 3964 l
-2337 3965 l
-2140 3965 l
-2141 3965 m
-2338 3965 l
-2338 3966 l
-2141 3966 l
-2143 3966 m
-2339 3966 l
-2339 3967 l
-2143 3967 l
-2144 3967 m
-2341 3967 l
-2341 3968 l
-2144 3968 l
-2145 3968 m
-2342 3968 l
-2342 3969 l
-2145 3969 l
-2146 3969 m
-2343 3969 l
-2343 3970 l
-2146 3970 l
-2148 3970 m
-2344 3970 l
-2344 3971 l
-2148 3971 l
-2149 3971 m
-2346 3971 l
-2346 3972 l
-2149 3972 l
-2150 3972 m
-2347 3972 l
-2347 3973 l
-2150 3973 l
-2151 3973 m
-2348 3973 l
-2348 3974 l
-2151 3974 l
-2153 3974 m
-2349 3974 l
-2349 3975 l
-2153 3975 l
-2154 3975 m
-2351 3975 l
-2351 3976 l
-2154 3976 l
-2155 3976 m
-2352 3976 l
-2352 3977 l
-2155 3977 l
-2156 3977 m
-2353 3977 l
-2353 3978 l
-2156 3978 l
-2158 3978 m
-2354 3978 l
-2354 3979 l
-2158 3979 l
-2159 3979 m
-2356 3979 l
-2356 3980 l
-2159 3980 l
-2160 3980 m
-2357 3980 l
-2357 3981 l
-2160 3981 l
-2161 3981 m
-2358 3981 l
-2358 3982 l
-2161 3982 l
-2163 3982 m
-2359 3982 l
-2359 3983 l
-2163 3983 l
-2164 3983 m
-2361 3983 l
-2361 3984 l
-2164 3984 l
-2165 3984 m
-2362 3984 l
-2362 3985 l
-2165 3985 l
-2166 3985 m
-2363 3985 l
-2363 3986 l
-2166 3986 l
-2168 3986 m
-2364 3986 l
-2364 3987 l
-2168 3987 l
-2169 3987 m
-2366 3987 l
-2366 3988 l
-2169 3988 l
-2170 3988 m
-2367 3988 l
-2367 3989 l
-2170 3989 l
-2172 3989 m
-2368 3989 l
-2368 3990 l
-2172 3990 l
-2173 3990 m
-2369 3990 l
-2369 3991 l
-2173 3991 l
-2174 3991 m
-2371 3991 l
-2371 3992 l
-2174 3992 l
-2175 3992 m
-2372 3992 l
-2372 3993 l
-2175 3993 l
-2177 3993 m
-2373 3993 l
-2373 3994 l
-2177 3994 l
-2178 3994 m
-2374 3994 l
-2374 3995 l
-2178 3995 l
-2179 3995 m
-2376 3995 l
-2376 3996 l
-2179 3996 l
-2180 3996 m
-2377 3996 l
-2377 3997 l
-2180 3997 l
-2182 3997 m
-2378 3997 l
-2378 3998 l
-2182 3998 l
-2183 3998 m
-2379 3998 l
-2379 3999 l
-2183 3999 l
-2184 3999 m
-2379 3999 l
-2379 4000 l
-2184 4000 l
-2185 4000 m
-2379 4000 l
-2379 4001 l
-2185 4001 l
-2187 4001 m
-2378 4001 l
-2378 4002 l
-2187 4002 l
-2188 4002 m
-2377 4002 l
-2377 4003 l
-2188 4003 l
-2189 4003 m
-2376 4003 l
-2376 4004 l
-2189 4004 l
-2190 4004 m
-2375 4004 l
-2375 4005 l
-2190 4005 l
-2192 4005 m
-2375 4005 l
-2375 4006 l
-2192 4006 l
-2193 4006 m
-2374 4006 l
-2374 4007 l
-2193 4007 l
-2194 4007 m
-2373 4007 l
-2373 4008 l
-2194 4008 l
-2195 4008 m
-2372 4008 l
-2372 4009 l
-2195 4009 l
-2197 4009 m
-2371 4009 l
-2371 4010 l
-2197 4010 l
-2198 4010 m
-2371 4010 l
-2371 4011 l
-2198 4011 l
-2199 4011 m
-2370 4011 l
-2370 4012 l
-2199 4012 l
-2200 4012 m
-2369 4012 l
-2369 4013 l
-2200 4013 l
-2202 4013 m
-2368 4013 l
-2368 4014 l
-2202 4014 l
-2203 4014 m
-2367 4014 l
-2367 4015 l
-2203 4015 l
-2204 4015 m
-2367 4015 l
-2367 4016 l
-2204 4016 l
-2206 4016 m
-2366 4016 l
-2366 4017 l
-2206 4017 l
-2207 4017 m
-2365 4017 l
-2365 4018 l
-2207 4018 l
-2208 4018 m
-2364 4018 l
-2364 4019 l
-2208 4019 l
-2209 4019 m
-2363 4019 l
-2363 4020 l
-2209 4020 l
-2211 4020 m
-2363 4020 l
-2363 4021 l
-2211 4021 l
-2212 4021 m
-2362 4021 l
-2362 4022 l
-2212 4022 l
-2213 4022 m
-2361 4022 l
-2361 4023 l
-2213 4023 l
-2214 4023 m
-2360 4023 l
-2360 4024 l
-2214 4024 l
-2216 4024 m
-2359 4024 l
-2359 4025 l
-2216 4025 l
-2217 4025 m
-2358 4025 l
-2358 4026 l
-2217 4026 l
-2218 4026 m
-2358 4026 l
-2358 4027 l
-2218 4027 l
-2219 4027 m
-2357 4027 l
-2357 4028 l
-2219 4028 l
-2221 4028 m
-2356 4028 l
-2356 4029 l
-2221 4029 l
-2222 4029 m
-2355 4029 l
-2355 4030 l
-2222 4030 l
-2223 4030 m
-2354 4030 l
-2354 4031 l
-2223 4031 l
-2224 4031 m
-2354 4031 l
-2354 4032 l
-2224 4032 l
-2226 4032 m
-2353 4032 l
-2353 4033 l
-2226 4033 l
-2227 4033 m
-2352 4033 l
-2352 4034 l
-2227 4034 l
-2228 4034 m
-2351 4034 l
-2351 4035 l
-2228 4035 l
-2229 4035 m
-2350 4035 l
-2350 4036 l
-2229 4036 l
-2231 4036 m
-2350 4036 l
-2350 4037 l
-2231 4037 l
-2232 4037 m
-2349 4037 l
-2349 4038 l
-2232 4038 l
-2233 4038 m
-2348 4038 l
-2348 4039 l
-2233 4039 l
-2234 4039 m
-2347 4039 l
-2347 4040 l
-2234 4040 l
-2236 4040 m
-2346 4040 l
-2346 4041 l
-2236 4041 l
-2237 4041 m
-2346 4041 l
-2346 4042 l
-2237 4042 l
-2238 4042 m
-2345 4042 l
-2345 4043 l
-2238 4043 l
-2240 4043 m
-2344 4043 l
-2344 4044 l
-2240 4044 l
-2241 4044 m
-2343 4044 l
-2343 4045 l
-2241 4045 l
-2242 4045 m
-2342 4045 l
-2342 4046 l
-2242 4046 l
-2243 4046 m
-2341 4046 l
-2341 4047 l
-2243 4047 l
-2245 4047 m
-2341 4047 l
-2341 4048 l
-2245 4048 l
-2246 4048 m
-2340 4048 l
-2340 4049 l
-2246 4049 l
-2247 4049 m
-2339 4049 l
-2339 4050 l
-2247 4050 l
-2248 4050 m
-2338 4050 l
-2338 4051 l
-2248 4051 l
-2250 4051 m
-2337 4051 l
-2337 4052 l
-2250 4052 l
-2251 4052 m
-2337 4052 l
-2337 4053 l
-2251 4053 l
-2252 4053 m
-2336 4053 l
-2336 4054 l
-2252 4054 l
-2253 4054 m
-2335 4054 l
-2335 4055 l
-2253 4055 l
-2255 4055 m
-2334 4055 l
-2334 4056 l
-2255 4056 l
-2256 4056 m
-2333 4056 l
-2333 4057 l
-2256 4057 l
-2257 4057 m
-2333 4057 l
-2333 4058 l
-2257 4058 l
-2258 4058 m
-2332 4058 l
-2332 4059 l
-2258 4059 l
-2260 4059 m
-2331 4059 l
-2331 4060 l
-2260 4060 l
-2261 4060 m
-2330 4060 l
-2330 4061 l
-2261 4061 l
-2262 4061 m
-2329 4061 l
-2329 4062 l
-2262 4062 l
-2263 4062 m
-2329 4062 l
-2329 4063 l
-2263 4063 l
-2265 4063 m
-2328 4063 l
-2328 4064 l
-2265 4064 l
-2266 4064 m
-2327 4064 l
-2327 4065 l
-2266 4065 l
-2267 4065 m
-2326 4065 l
-2326 4066 l
-2267 4066 l
-2268 4066 m
-2325 4066 l
-2325 4067 l
-2268 4067 l
-2270 4067 m
-2325 4067 l
-2325 4068 l
-2270 4068 l
-2271 4068 m
-2324 4068 l
-2324 4069 l
-2271 4069 l
-2272 4069 m
-2323 4069 l
-2323 4070 l
-2272 4070 l
-2274 4070 m
-2322 4070 l
-2322 4071 l
-2274 4071 l
-2275 4071 m
-2321 4071 l
-2321 4072 l
-2275 4072 l
-2276 4072 m
-2320 4072 l
-2320 4073 l
-2276 4073 l
-2277 4073 m
-2320 4073 l
-2320 4074 l
-2277 4074 l
-2279 4074 m
-2319 4074 l
-2319 4075 l
-2279 4075 l
-2280 4075 m
-2318 4075 l
-2318 4076 l
-2280 4076 l
-2281 4076 m
-2317 4076 l
-2317 4077 l
-2281 4077 l
-2282 4077 m
-2316 4077 l
-2316 4078 l
-2282 4078 l
-2284 4078 m
-2316 4078 l
-2316 4079 l
-2284 4079 l
-2285 4079 m
-2315 4079 l
-2315 4080 l
-2285 4080 l
-2286 4080 m
-2314 4080 l
-2314 4081 l
-2286 4081 l
-2287 4081 m
-2313 4081 l
-2313 4082 l
-2287 4082 l
-2289 4082 m
-2312 4082 l
-2312 4083 l
-2289 4083 l
-2290 4083 m
-2312 4083 l
-2312 4084 l
-2290 4084 l
-2291 4084 m
-2311 4084 l
-2311 4085 l
-2291 4085 l
-2292 4085 m
-2310 4085 l
-2310 4086 l
-2292 4086 l
-2294 4086 m
-2309 4086 l
-2309 4087 l
-2294 4087 l
-2295 4087 m
-2308 4087 l
-2308 4088 l
-2295 4088 l
-2296 4088 m
-2308 4088 l
-2308 4089 l
-2296 4089 l
-2297 4089 m
-2307 4089 l
-2307 4090 l
-2297 4090 l
-2299 4090 m
-2306 4090 l
-2306 4091 l
-2299 4091 l
-2300 4091 m
-2305 4091 l
-2305 4092 l
-2300 4092 l
-2301 4092 m
-2304 4092 l
-2304 4093 l
-2301 4093 l
-Y
-2179.8 3839.8 m
-2104 3935 l
-2303 4093 l
-2379 3999 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-2141 3921 m
-2145 3930 l
-2147 3947 l
-2202 3879 l
-S
-2203 3965 m
-2200 3968 l
-2198 3977 l
-2199 3983 l
-2203 3992 l
-2216 4002 l
-2225 4004 l
-2231 4003 l
-2239 4000 l
-2245 3993 l
-2247 3984 l
-2248 3969 l
-2241 3910 l
-2287 3947 l
-S
-2271 4046 m
-2264 4035 l
-2266 4020 l
-2275 4001 l
-2283 3992 l
-2299 3978 l
-2314 3973 l
-2326 3978 l
-2333 3983 l
-2340 3994 l
-2339 4009 l
-2329 4028 l
-2321 4038 l
-2305 4052 l
-2290 4056 l
-2278 4052 l
-2271 4046 l
-S
-1 g
-2789 4191 m
-2795 4191 l
-2795 4192 l
-2789 4192 l
-2789 4192 m
-2799 4192 l
-2799 4193 l
-2789 4193 l
-2789 4193 m
-2802 4193 l
-2802 4194 l
-2789 4194 l
-2789 4194 m
-2806 4194 l
-2806 4195 l
-2789 4195 l
-2788 4195 m
-2810 4195 l
-2810 4196 l
-2788 4196 l
-2788 4196 m
-2814 4196 l
-2814 4197 l
-2788 4197 l
-2788 4197 m
-2817 4197 l
-2817 4198 l
-2788 4198 l
-2788 4198 m
-2821 4198 l
-2821 4199 l
-2788 4199 l
-2787 4199 m
-2825 4199 l
-2825 4200 l
-2787 4200 l
-2787 4200 m
-2829 4200 l
-2829 4201 l
-2787 4201 l
-2787 4201 m
-2833 4201 l
-2833 4202 l
-2787 4202 l
-2786 4202 m
-2836 4202 l
-2836 4203 l
-2786 4203 l
-2786 4203 m
-2840 4203 l
-2840 4204 l
-2786 4204 l
-2786 4204 m
-2844 4204 l
-2844 4205 l
-2786 4205 l
-2786 4205 m
-2848 4205 l
-2848 4206 l
-2786 4206 l
-2785 4206 m
-2851 4206 l
-2851 4207 l
-2785 4207 l
-2785 4207 m
-2855 4207 l
-2855 4208 l
-2785 4208 l
-2785 4208 m
-2859 4208 l
-2859 4209 l
-2785 4209 l
-2785 4209 m
-2863 4209 l
-2863 4210 l
-2785 4210 l
-2784 4210 m
-2866 4210 l
-2866 4211 l
-2784 4211 l
-2784 4211 m
-2870 4211 l
-2870 4212 l
-2784 4212 l
-2784 4212 m
-2874 4212 l
-2874 4213 l
-2784 4213 l
-2784 4213 m
-2878 4213 l
-2878 4214 l
-2784 4214 l
-2783 4214 m
-2882 4214 l
-2882 4215 l
-2783 4215 l
-2783 4215 m
-2885 4215 l
-2885 4216 l
-2783 4216 l
-2783 4216 m
-2889 4216 l
-2889 4217 l
-2783 4217 l
-2782 4217 m
-2893 4217 l
-2893 4218 l
-2782 4218 l
-2782 4218 m
-2897 4218 l
-2897 4219 l
-2782 4219 l
-2782 4219 m
-2900 4219 l
-2900 4220 l
-2782 4220 l
-2782 4220 m
-2904 4220 l
-2904 4221 l
-2782 4221 l
-2781 4221 m
-2908 4221 l
-2908 4222 l
-2781 4222 l
-2781 4222 m
-2912 4222 l
-2912 4223 l
-2781 4223 l
-2781 4223 m
-2915 4223 l
-2915 4224 l
-2781 4224 l
-2781 4224 m
-2919 4224 l
-2919 4225 l
-2781 4225 l
-2780 4225 m
-2923 4225 l
-2923 4226 l
-2780 4226 l
-2780 4226 m
-2927 4226 l
-2927 4227 l
-2780 4227 l
-2780 4227 m
-2931 4227 l
-2931 4228 l
-2780 4228 l
-2780 4228 m
-2934 4228 l
-2934 4229 l
-2780 4229 l
-2779 4229 m
-2938 4229 l
-2938 4230 l
-2779 4230 l
-2779 4230 m
-2942 4230 l
-2942 4231 l
-2779 4231 l
-2779 4231 m
-2946 4231 l
-2946 4232 l
-2779 4232 l
-2778 4232 m
-2949 4232 l
-2949 4233 l
-2778 4233 l
-2778 4233 m
-2953 4233 l
-2953 4234 l
-2778 4234 l
-2778 4234 m
-2957 4234 l
-2957 4235 l
-2778 4235 l
-2778 4235 m
-2961 4235 l
-2961 4236 l
-2778 4236 l
-2777 4236 m
-2964 4236 l
-2964 4237 l
-2777 4237 l
-2777 4237 m
-2964 4237 l
-2964 4240 l
-2777 4240 l
-2776 4240 m
-2964 4240 l
-2964 4241 l
-2776 4241 l
-2776 4241 m
-2963 4241 l
-2963 4244 l
-2776 4244 l
-2775 4244 m
-2963 4244 l
-2963 4245 l
-2775 4245 l
-2775 4245 m
-2962 4245 l
-2962 4247 l
-2775 4247 l
-2774 4247 m
-2962 4247 l
-2962 4249 l
-2774 4249 l
-2774 4249 m
-2961 4249 l
-2961 4251 l
-2774 4251 l
-2773 4251 m
-2961 4251 l
-2961 4253 l
-2773 4253 l
-2773 4253 m
-2960 4253 l
-2960 4255 l
-2773 4255 l
-2772 4255 m
-2960 4255 l
-2960 4256 l
-2772 4256 l
-2772 4256 m
-2959 4256 l
-2959 4259 l
-2772 4259 l
-2771 4259 m
-2959 4259 l
-2959 4260 l
-2771 4260 l
-2771 4260 m
-2958 4260 l
-2958 4262 l
-2771 4262 l
-2770 4262 m
-2958 4262 l
-2958 4264 l
-2770 4264 l
-2770 4264 m
-2957 4264 l
-2957 4266 l
-2770 4266 l
-2769 4266 m
-2957 4266 l
-2957 4268 l
-2769 4268 l
-2769 4268 m
-2956 4268 l
-2956 4270 l
-2769 4270 l
-2768 4270 m
-2956 4270 l
-2956 4271 l
-2768 4271 l
-2768 4271 m
-2955 4271 l
-2955 4274 l
-2768 4274 l
-2767 4274 m
-2955 4274 l
-2955 4275 l
-2767 4275 l
-2767 4275 m
-2954 4275 l
-2954 4277 l
-2767 4277 l
-2766 4277 m
-2954 4277 l
-2954 4279 l
-2766 4279 l
-2766 4279 m
-2953 4279 l
-2953 4281 l
-2766 4281 l
-2765 4281 m
-2953 4281 l
-2953 4283 l
-2765 4283 l
-2765 4283 m
-2952 4283 l
-2952 4285 l
-2765 4285 l
-2764 4285 m
-2952 4285 l
-2952 4287 l
-2764 4287 l
-2764 4287 m
-2951 4287 l
-2951 4289 l
-2764 4289 l
-2763 4289 m
-2951 4289 l
-2951 4290 l
-2763 4290 l
-2763 4290 m
-2950 4290 l
-2950 4292 l
-2763 4292 l
-2762 4292 m
-2950 4292 l
-2950 4294 l
-2762 4294 l
-2762 4294 m
-2949 4294 l
-2949 4296 l
-2762 4296 l
-2761 4296 m
-2949 4296 l
-2949 4298 l
-2761 4298 l
-2761 4298 m
-2948 4298 l
-2948 4300 l
-2761 4300 l
-2760 4300 m
-2948 4300 l
-2948 4302 l
-2760 4302 l
-2760 4302 m
-2947 4302 l
-2947 4304 l
-2760 4304 l
-2759 4304 m
-2947 4304 l
-2947 4305 l
-2759 4305 l
-2759 4305 m
-2946 4305 l
-2946 4307 l
-2759 4307 l
-2759 4307 m
-2946 4307 l
-2946 4308 l
-2759 4308 l
-2759 4308 m
-2946 4308 l
-2946 4309 l
-2759 4309 l
-2762 4309 m
-2945 4309 l
-2945 4310 l
-2762 4310 l
-2766 4310 m
-2945 4310 l
-2945 4311 l
-2766 4311 l
-2770 4311 m
-2945 4311 l
-2945 4312 l
-2770 4312 l
-2774 4312 m
-2945 4312 l
-2945 4313 l
-2774 4313 l
-2777 4313 m
-2944 4313 l
-2944 4314 l
-2777 4314 l
-2781 4314 m
-2944 4314 l
-2944 4315 l
-2781 4315 l
-2785 4315 m
-2944 4315 l
-2944 4316 l
-2785 4316 l
-2789 4316 m
-2944 4316 l
-2944 4317 l
-2789 4317 l
-2793 4317 m
-2943 4317 l
-2943 4318 l
-2793 4318 l
-2796 4318 m
-2943 4318 l
-2943 4319 l
-2796 4319 l
-2800 4319 m
-2943 4319 l
-2943 4320 l
-2800 4320 l
-2804 4320 m
-2943 4320 l
-2943 4321 l
-2804 4321 l
-2808 4321 m
-2942 4321 l
-2942 4322 l
-2808 4322 l
-2811 4322 m
-2942 4322 l
-2942 4323 l
-2811 4323 l
-2815 4323 m
-2942 4323 l
-2942 4324 l
-2815 4324 l
-2819 4324 m
-2941 4324 l
-2941 4325 l
-2819 4325 l
-2823 4325 m
-2941 4325 l
-2941 4326 l
-2823 4326 l
-2827 4326 m
-2941 4326 l
-2941 4327 l
-2827 4327 l
-2830 4327 m
-2941 4327 l
-2941 4328 l
-2830 4328 l
-2834 4328 m
-2940 4328 l
-2940 4329 l
-2834 4329 l
-2838 4329 m
-2940 4329 l
-2940 4330 l
-2838 4330 l
-2842 4330 m
-2940 4330 l
-2940 4331 l
-2842 4331 l
-2846 4331 m
-2940 4331 l
-2940 4332 l
-2846 4332 l
-2849 4332 m
-2939 4332 l
-2939 4333 l
-2849 4333 l
-2853 4333 m
-2939 4333 l
-2939 4334 l
-2853 4334 l
-2857 4334 m
-2939 4334 l
-2939 4335 l
-2857 4335 l
-2861 4335 m
-2939 4335 l
-2939 4336 l
-2861 4336 l
-2864 4336 m
-2938 4336 l
-2938 4337 l
-2864 4337 l
-2868 4337 m
-2938 4337 l
-2938 4338 l
-2868 4338 l
-2872 4338 m
-2938 4338 l
-2938 4339 l
-2872 4339 l
-2876 4339 m
-2937 4339 l
-2937 4340 l
-2876 4340 l
-2880 4340 m
-2937 4340 l
-2937 4341 l
-2880 4341 l
-2883 4341 m
-2937 4341 l
-2937 4342 l
-2883 4342 l
-2887 4342 m
-2937 4342 l
-2937 4343 l
-2887 4343 l
-2891 4343 m
-2936 4343 l
-2936 4344 l
-2891 4344 l
-2895 4344 m
-2936 4344 l
-2936 4345 l
-2895 4345 l
-2898 4345 m
-2936 4345 l
-2936 4346 l
-2898 4346 l
-2902 4346 m
-2936 4346 l
-2936 4347 l
-2902 4347 l
-2906 4347 m
-2935 4347 l
-2935 4348 l
-2906 4348 l
-2910 4348 m
-2935 4348 l
-2935 4349 l
-2910 4349 l
-2914 4349 m
-2935 4349 l
-2935 4350 l
-2914 4350 l
-2917 4350 m
-2935 4350 l
-2935 4351 l
-2917 4351 l
-2921 4351 m
-2934 4351 l
-2934 4352 l
-2921 4352 l
-2925 4352 m
-2934 4352 l
-2934 4353 l
-2925 4353 l
-2929 4353 m
-2934 4353 l
-2934 4354 l
-2929 4354 l
-Y
-2790.2 4190.9 m
-2759 4308 l
-2933 4354 l
-2964 4237 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-2836 4298 m
-2829 4305 l
-2816 4306 l
-2808 4304 l
-2797 4296 l
-2792 4282 l
-2793 4261 l
-2799 4241 l
-2807 4226 l
-2817 4220 l
-2830 4219 l
-2834 4220 l
-2845 4227 l
-2851 4237 l
-2852 4250 l
-2851 4254 l
-2844 4266 l
-2834 4272 l
-2821 4272 l
-2817 4271 l
-2806 4264 l
-2800 4254 l
-2799 4241 l
-S
-2885 4324 m
-2874 4317 l
-2869 4302 l
-2870 4281 l
-2873 4269 l
-2883 4250 l
-2894 4240 l
-2907 4239 l
-2915 4241 l
-2926 4248 l
-2931 4263 l
-2930 4284 l
-2927 4296 l
-2917 4315 l
-2906 4325 l
-2893 4326 l
-2885 4324 l
-S
-1 g
-3525 4216 m
-3529 4216 l
-3529 4217 l
-3525 4217 l
-3522 4217 m
-3529 4217 l
-3529 4218 l
-3522 4218 l
-3519 4218 m
-3530 4218 l
-3530 4219 l
-3519 4219 l
-3516 4219 m
-3530 4219 l
-3530 4220 l
-3516 4220 l
-3513 4220 m
-3530 4220 l
-3530 4221 l
-3513 4221 l
-3510 4221 m
-3531 4221 l
-3531 4222 l
-3510 4222 l
-3507 4222 m
-3531 4222 l
-3531 4223 l
-3507 4223 l
-3504 4223 m
-3531 4223 l
-3531 4224 l
-3504 4224 l
-3502 4224 m
-3532 4224 l
-3532 4225 l
-3502 4225 l
-3499 4225 m
-3532 4225 l
-3532 4226 l
-3499 4226 l
-3496 4226 m
-3532 4226 l
-3532 4227 l
-3496 4227 l
-3493 4227 m
-3533 4227 l
-3533 4228 l
-3493 4228 l
-3490 4228 m
-3533 4228 l
-3533 4229 l
-3490 4229 l
-3487 4229 m
-3533 4229 l
-3533 4230 l
-3487 4230 l
-3484 4230 m
-3534 4230 l
-3534 4231 l
-3484 4231 l
-3481 4231 m
-3534 4231 l
-3534 4232 l
-3481 4232 l
-3479 4232 m
-3534 4232 l
-3534 4233 l
-3479 4233 l
-3476 4233 m
-3535 4233 l
-3535 4234 l
-3476 4234 l
-3473 4234 m
-3535 4234 l
-3535 4235 l
-3473 4235 l
-3470 4235 m
-3536 4235 l
-3536 4236 l
-3470 4236 l
-3467 4236 m
-3536 4236 l
-3536 4237 l
-3467 4237 l
-3464 4237 m
-3536 4237 l
-3536 4238 l
-3464 4238 l
-3461 4238 m
-3537 4238 l
-3537 4239 l
-3461 4239 l
-3458 4239 m
-3537 4239 l
-3537 4240 l
-3458 4240 l
-3456 4240 m
-3537 4240 l
-3537 4241 l
-3456 4241 l
-3453 4241 m
-3538 4241 l
-3538 4242 l
-3453 4242 l
-3450 4242 m
-3538 4242 l
-3538 4243 l
-3450 4243 l
-3447 4243 m
-3538 4243 l
-3538 4244 l
-3447 4244 l
-3444 4244 m
-3539 4244 l
-3539 4245 l
-3444 4245 l
-3441 4245 m
-3539 4245 l
-3539 4246 l
-3441 4246 l
-3438 4246 m
-3539 4246 l
-3539 4247 l
-3438 4247 l
-3435 4247 m
-3540 4247 l
-3540 4248 l
-3435 4248 l
-3433 4248 m
-3540 4248 l
-3540 4249 l
-3433 4249 l
-3433 4249 m
-3540 4249 l
-3540 4250 l
-3433 4250 l
-3433 4250 m
-3541 4250 l
-3541 4252 l
-3433 4252 l
-3434 4252 m
-3541 4252 l
-3541 4253 l
-3434 4253 l
-3434 4253 m
-3542 4253 l
-3542 4255 l
-3434 4255 l
-3435 4255 m
-3543 4255 l
-3543 4258 l
-3435 4258 l
-3436 4258 m
-3544 4258 l
-3544 4261 l
-3436 4261 l
-3437 4261 m
-3545 4261 l
-3545 4264 l
-3437 4264 l
-3438 4264 m
-3546 4264 l
-3546 4267 l
-3438 4267 l
-3439 4267 m
-3547 4267 l
-3547 4269 l
-3439 4269 l
-3440 4269 m
-3547 4269 l
-3547 4270 l
-3440 4270 l
-3440 4270 m
-3548 4270 l
-3548 4272 l
-3440 4272 l
-3441 4272 m
-3548 4272 l
-3548 4273 l
-3441 4273 l
-3441 4273 m
-3549 4273 l
-3549 4275 l
-3441 4275 l
-3442 4275 m
-3550 4275 l
-3550 4278 l
-3442 4278 l
-3443 4278 m
-3551 4278 l
-3551 4281 l
-3443 4281 l
-3444 4281 m
-3552 4281 l
-3552 4284 l
-3444 4284 l
-3445 4284 m
-3553 4284 l
-3553 4287 l
-3445 4287 l
-3446 4287 m
-3554 4287 l
-3554 4289 l
-3446 4289 l
-3447 4289 m
-3554 4289 l
-3554 4290 l
-3447 4290 l
-3447 4290 m
-3555 4290 l
-3555 4292 l
-3447 4292 l
-3448 4292 m
-3555 4292 l
-3555 4293 l
-3448 4293 l
-3448 4293 m
-3556 4293 l
-3556 4295 l
-3448 4295 l
-3449 4295 m
-3557 4295 l
-3557 4298 l
-3449 4298 l
-3450 4298 m
-3558 4298 l
-3558 4301 l
-3450 4301 l
-3451 4301 m
-3559 4301 l
-3559 4304 l
-3451 4304 l
-3452 4304 m
-3560 4304 l
-3560 4306 l
-3452 4306 l
-3453 4306 m
-3560 4306 l
-3560 4307 l
-3453 4307 l
-3453 4307 m
-3561 4307 l
-3561 4309 l
-3453 4309 l
-3454 4309 m
-3561 4309 l
-3561 4310 l
-3454 4310 l
-3454 4310 m
-3562 4310 l
-3562 4312 l
-3454 4312 l
-3455 4312 m
-3563 4312 l
-3563 4315 l
-3455 4315 l
-3456 4315 m
-3564 4315 l
-3564 4318 l
-3456 4318 l
-3457 4318 m
-3565 4318 l
-3565 4321 l
-3457 4321 l
-3458 4321 m
-3566 4321 l
-3566 4324 l
-3458 4324 l
-3459 4324 m
-3567 4324 l
-3567 4326 l
-3459 4326 l
-3460 4326 m
-3567 4326 l
-3567 4327 l
-3460 4327 l
-3460 4327 m
-3568 4327 l
-3568 4329 l
-3460 4329 l
-3461 4329 m
-3568 4329 l
-3568 4330 l
-3461 4330 l
-3461 4330 m
-3569 4330 l
-3569 4331 l
-3461 4331 l
-3461 4331 m
-3566 4331 l
-3566 4332 l
-3461 4332 l
-3462 4332 m
-3563 4332 l
-3563 4333 l
-3462 4333 l
-3462 4333 m
-3560 4333 l
-3560 4334 l
-3462 4334 l
-3462 4334 m
-3557 4334 l
-3557 4335 l
-3462 4335 l
-3463 4335 m
-3554 4335 l
-3554 4336 l
-3463 4336 l
-3463 4336 m
-3551 4336 l
-3551 4337 l
-3463 4337 l
-3463 4337 m
-3549 4337 l
-3549 4338 l
-3463 4338 l
-3464 4338 m
-3546 4338 l
-3546 4339 l
-3464 4339 l
-3464 4339 m
-3543 4339 l
-3543 4340 l
-3464 4340 l
-3464 4340 m
-3540 4340 l
-3540 4341 l
-3464 4341 l
-3465 4341 m
-3537 4341 l
-3537 4342 l
-3465 4342 l
-3465 4342 m
-3534 4342 l
-3534 4343 l
-3465 4343 l
-3465 4343 m
-3531 4343 l
-3531 4344 l
-3465 4344 l
-3466 4344 m
-3528 4344 l
-3528 4345 l
-3466 4345 l
-3466 4345 m
-3525 4345 l
-3525 4346 l
-3466 4346 l
-3467 4346 m
-3523 4346 l
-3523 4347 l
-3467 4347 l
-3467 4347 m
-3520 4347 l
-3520 4348 l
-3467 4348 l
-3467 4348 m
-3517 4348 l
-3517 4349 l
-3467 4349 l
-3468 4349 m
-3514 4349 l
-3514 4350 l
-3468 4350 l
-3468 4350 m
-3511 4350 l
-3511 4351 l
-3468 4351 l
-3468 4351 m
-3508 4351 l
-3508 4352 l
-3468 4352 l
-3469 4352 m
-3505 4352 l
-3505 4353 l
-3469 4353 l
-3469 4353 m
-3502 4353 l
-3502 4354 l
-3469 4354 l
-3469 4354 m
-3499 4354 l
-3499 4355 l
-3469 4355 l
-3470 4355 m
-3497 4355 l
-3497 4356 l
-3470 4356 l
-3470 4356 m
-3494 4356 l
-3494 4357 l
-3470 4357 l
-3470 4357 m
-3491 4357 l
-3491 4358 l
-3470 4358 l
-3471 4358 m
-3488 4358 l
-3488 4359 l
-3471 4359 l
-3471 4359 m
-3485 4359 l
-3485 4360 l
-3471 4360 l
-3471 4360 m
-3482 4360 l
-3482 4361 l
-3471 4361 l
-3472 4361 m
-3479 4361 l
-3479 4362 l
-3472 4362 l
-3472 4362 m
-3476 4362 l
-3476 4363 l
-3472 4363 l
-Y
-3568 4330.1 m
-3528 4216 l
-3433 4249 l
-3473 4363 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-3490 4247 m
-3503 4246 l
-3515 4256 l
-3526 4274 l
-3530 4286 l
-3533 4307 l
-3530 4321 l
-3519 4329 l
-3511 4332 l
-3498 4332 l
-3486 4323 l
-3475 4305 l
-3471 4293 l
-3468 4272 l
-3472 4257 l
-3482 4249 l
-3490 4247 l
-S
-1 g
-2845 3271 m
-2847 3271 l
-2847 3272 l
-2845 3272 l
-2845 3272 m
-2849 3272 l
-2849 3273 l
-2845 3273 l
-2844 3273 m
-2851 3273 l
-2851 3274 l
-2844 3274 l
-2843 3274 m
-2853 3274 l
-2853 3275 l
-2843 3275 l
-2843 3275 m
-2855 3275 l
-2855 3276 l
-2843 3276 l
-2842 3276 m
-2856 3276 l
-2856 3277 l
-2842 3277 l
-2842 3277 m
-2858 3277 l
-2858 3278 l
-2842 3278 l
-2841 3278 m
-2860 3278 l
-2860 3279 l
-2841 3279 l
-2841 3279 m
-2862 3279 l
-2862 3280 l
-2841 3280 l
-2840 3280 m
-2864 3280 l
-2864 3281 l
-2840 3281 l
-2840 3281 m
-2865 3281 l
-2865 3282 l
-2840 3282 l
-2839 3282 m
-2867 3282 l
-2867 3283 l
-2839 3283 l
-2838 3283 m
-2869 3283 l
-2869 3284 l
-2838 3284 l
-2838 3284 m
-2871 3284 l
-2871 3285 l
-2838 3285 l
-2837 3285 m
-2873 3285 l
-2873 3286 l
-2837 3286 l
-2837 3286 m
-2874 3286 l
-2874 3287 l
-2837 3287 l
-2836 3287 m
-2876 3287 l
-2876 3288 l
-2836 3288 l
-2836 3288 m
-2878 3288 l
-2878 3289 l
-2836 3289 l
-2835 3289 m
-2880 3289 l
-2880 3290 l
-2835 3290 l
-2835 3290 m
-2882 3290 l
-2882 3291 l
-2835 3291 l
-2834 3291 m
-2883 3291 l
-2883 3292 l
-2834 3292 l
-2834 3292 m
-2885 3292 l
-2885 3293 l
-2834 3293 l
-2833 3293 m
-2887 3293 l
-2887 3294 l
-2833 3294 l
-2832 3294 m
-2889 3294 l
-2889 3295 l
-2832 3295 l
-2832 3295 m
-2891 3295 l
-2891 3296 l
-2832 3296 l
-2831 3296 m
-2892 3296 l
-2892 3297 l
-2831 3297 l
-2831 3297 m
-2894 3297 l
-2894 3298 l
-2831 3298 l
-2830 3298 m
-2896 3298 l
-2896 3299 l
-2830 3299 l
-2830 3299 m
-2898 3299 l
-2898 3300 l
-2830 3300 l
-2829 3300 m
-2900 3300 l
-2900 3301 l
-2829 3301 l
-2829 3301 m
-2902 3301 l
-2902 3302 l
-2829 3302 l
-2828 3302 m
-2903 3302 l
-2903 3303 l
-2828 3303 l
-2827 3303 m
-2905 3303 l
-2905 3304 l
-2827 3304 l
-2827 3304 m
-2907 3304 l
-2907 3305 l
-2827 3305 l
-2826 3305 m
-2909 3305 l
-2909 3306 l
-2826 3306 l
-2826 3306 m
-2911 3306 l
-2911 3307 l
-2826 3307 l
-2825 3307 m
-2912 3307 l
-2912 3308 l
-2825 3308 l
-2825 3308 m
-2914 3308 l
-2914 3309 l
-2825 3309 l
-2824 3309 m
-2916 3309 l
-2916 3310 l
-2824 3310 l
-2824 3310 m
-2918 3310 l
-2918 3311 l
-2824 3311 l
-2823 3311 m
-2920 3311 l
-2920 3312 l
-2823 3312 l
-2822 3312 m
-2921 3312 l
-2921 3313 l
-2822 3313 l
-2822 3313 m
-2923 3313 l
-2923 3314 l
-2822 3314 l
-2821 3314 m
-2925 3314 l
-2925 3315 l
-2821 3315 l
-2821 3315 m
-2927 3315 l
-2927 3316 l
-2821 3316 l
-2820 3316 m
-2929 3316 l
-2929 3317 l
-2820 3317 l
-2820 3317 m
-2930 3317 l
-2930 3318 l
-2820 3318 l
-2819 3318 m
-2932 3318 l
-2932 3319 l
-2819 3319 l
-2819 3319 m
-2934 3319 l
-2934 3320 l
-2819 3320 l
-2818 3320 m
-2936 3320 l
-2936 3321 l
-2818 3321 l
-2817 3321 m
-2938 3321 l
-2938 3322 l
-2817 3322 l
-2817 3322 m
-2939 3322 l
-2939 3323 l
-2817 3323 l
-2816 3323 m
-2941 3323 l
-2941 3324 l
-2816 3324 l
-2816 3324 m
-2943 3324 l
-2943 3325 l
-2816 3325 l
-2815 3325 m
-2945 3325 l
-2945 3326 l
-2815 3326 l
-2815 3326 m
-2947 3326 l
-2947 3327 l
-2815 3327 l
-2814 3327 m
-2949 3327 l
-2949 3328 l
-2814 3328 l
-2814 3328 m
-2950 3328 l
-2950 3329 l
-2814 3329 l
-2813 3329 m
-2952 3329 l
-2952 3330 l
-2813 3330 l
-2812 3330 m
-2954 3330 l
-2954 3331 l
-2812 3331 l
-2812 3331 m
-2956 3331 l
-2956 3332 l
-2812 3332 l
-2811 3332 m
-2958 3332 l
-2958 3333 l
-2811 3333 l
-2811 3333 m
-2959 3333 l
-2959 3334 l
-2811 3334 l
-2810 3334 m
-2961 3334 l
-2961 3335 l
-2810 3335 l
-2810 3335 m
-2963 3335 l
-2963 3336 l
-2810 3336 l
-2809 3336 m
-2965 3336 l
-2965 3337 l
-2809 3337 l
-2809 3337 m
-2967 3337 l
-2967 3338 l
-2809 3338 l
-2808 3338 m
-2968 3338 l
-2968 3339 l
-2808 3339 l
-2808 3339 m
-2970 3339 l
-2970 3340 l
-2808 3340 l
-2807 3340 m
-2972 3340 l
-2972 3341 l
-2807 3341 l
-2806 3341 m
-2974 3341 l
-2974 3342 l
-2806 3342 l
-2806 3342 m
-2976 3342 l
-2976 3343 l
-2806 3343 l
-2805 3343 m
-2977 3343 l
-2977 3344 l
-2805 3344 l
-2805 3344 m
-2979 3344 l
-2979 3345 l
-2805 3345 l
-2804 3345 m
-2981 3345 l
-2981 3346 l
-2804 3346 l
-2804 3346 m
-2983 3346 l
-2983 3347 l
-2804 3347 l
-2803 3347 m
-2985 3347 l
-2985 3348 l
-2803 3348 l
-2803 3348 m
-2986 3348 l
-2986 3349 l
-2803 3349 l
-2802 3349 m
-2988 3349 l
-2988 3350 l
-2802 3350 l
-2801 3350 m
-2990 3350 l
-2990 3351 l
-2801 3351 l
-2801 3351 m
-2992 3351 l
-2992 3352 l
-2801 3352 l
-2800 3352 m
-2994 3352 l
-2994 3353 l
-2800 3353 l
-2800 3353 m
-2995 3353 l
-2995 3354 l
-2800 3354 l
-2799 3354 m
-2997 3354 l
-2997 3355 l
-2799 3355 l
-2799 3355 m
-2999 3355 l
-2999 3356 l
-2799 3356 l
-2798 3356 m
-3001 3356 l
-3001 3357 l
-2798 3357 l
-2798 3357 m
-3003 3357 l
-3003 3358 l
-2798 3358 l
-2797 3358 m
-3005 3358 l
-3005 3359 l
-2797 3359 l
-2796 3359 m
-3006 3359 l
-3006 3360 l
-2796 3360 l
-2796 3360 m
-3008 3360 l
-3008 3361 l
-2796 3361 l
-2795 3361 m
-3010 3361 l
-3010 3362 l
-2795 3362 l
-2795 3362 m
-3012 3362 l
-3012 3363 l
-2795 3363 l
-2794 3363 m
-3014 3363 l
-3014 3364 l
-2794 3364 l
-2794 3364 m
-3015 3364 l
-3015 3365 l
-2794 3365 l
-2793 3365 m
-3017 3365 l
-3017 3366 l
-2793 3366 l
-2793 3366 m
-3019 3366 l
-3019 3367 l
-2793 3367 l
-2792 3367 m
-3021 3367 l
-3021 3368 l
-2792 3368 l
-2791 3368 m
-3023 3368 l
-3023 3369 l
-2791 3369 l
-2791 3369 m
-3024 3369 l
-3024 3370 l
-2791 3370 l
-2790 3370 m
-3026 3370 l
-3026 3371 l
-2790 3371 l
-2790 3371 m
-3028 3371 l
-3028 3372 l
-2790 3372 l
-2789 3372 m
-3030 3372 l
-3030 3373 l
-2789 3373 l
-2789 3373 m
-3032 3373 l
-3032 3374 l
-2789 3374 l
-2788 3374 m
-3033 3374 l
-3033 3375 l
-2788 3375 l
-2788 3375 m
-3035 3375 l
-3035 3376 l
-2788 3376 l
-2787 3376 m
-3037 3376 l
-3037 3377 l
-2787 3377 l
-2787 3377 m
-3039 3377 l
-3039 3378 l
-2787 3378 l
-2787 3378 m
-3041 3378 l
-3041 3379 l
-2787 3379 l
-2788 3379 m
-3042 3379 l
-3042 3380 l
-2788 3380 l
-2790 3380 m
-3044 3380 l
-3044 3381 l
-2790 3381 l
-2792 3381 m
-3046 3381 l
-3046 3382 l
-2792 3382 l
-2794 3382 m
-3048 3382 l
-3048 3383 l
-2794 3383 l
-2796 3383 m
-3050 3383 l
-3050 3384 l
-2796 3384 l
-2797 3384 m
-3052 3384 l
-3052 3385 l
-2797 3385 l
-2799 3385 m
-3053 3385 l
-3053 3386 l
-2799 3386 l
-2801 3386 m
-3055 3386 l
-3055 3387 l
-2801 3387 l
-2803 3387 m
-3057 3387 l
-3057 3388 l
-2803 3388 l
-2805 3388 m
-3059 3388 l
-3059 3389 l
-2805 3389 l
-2806 3389 m
-3061 3389 l
-3061 3390 l
-2806 3390 l
-2808 3390 m
-3062 3390 l
-3062 3391 l
-2808 3391 l
-2810 3391 m
-3064 3391 l
-3064 3392 l
-2810 3392 l
-2812 3392 m
-3066 3392 l
-3066 3393 l
-2812 3393 l
-2814 3393 m
-3068 3393 l
-3068 3394 l
-2814 3394 l
-2816 3394 m
-3070 3394 l
-3070 3395 l
-2816 3395 l
-2817 3395 m
-3071 3395 l
-3071 3396 l
-2817 3396 l
-2819 3396 m
-3073 3396 l
-3073 3397 l
-2819 3397 l
-2821 3397 m
-3075 3397 l
-3075 3398 l
-2821 3398 l
-2823 3398 m
-3077 3398 l
-3077 3399 l
-2823 3399 l
-2825 3399 m
-3079 3399 l
-3079 3400 l
-2825 3400 l
-2826 3400 m
-3080 3400 l
-3080 3401 l
-2826 3401 l
-2828 3401 m
-3082 3401 l
-3082 3402 l
-2828 3402 l
-2830 3402 m
-3084 3402 l
-3084 3403 l
-2830 3403 l
-2832 3403 m
-3086 3403 l
-3086 3404 l
-2832 3404 l
-2834 3404 m
-3088 3404 l
-3088 3405 l
-2834 3405 l
-2835 3405 m
-3089 3405 l
-3089 3406 l
-2835 3406 l
-2837 3406 m
-3091 3406 l
-3091 3407 l
-2837 3407 l
-2839 3407 m
-3093 3407 l
-3093 3408 l
-2839 3408 l
-2841 3408 m
-3095 3408 l
-3095 3409 l
-2841 3409 l
-2843 3409 m
-3097 3409 l
-3097 3410 l
-2843 3410 l
-2845 3410 m
-3098 3410 l
-3098 3411 l
-2845 3411 l
-2846 3411 m
-3099 3411 l
-3099 3412 l
-2846 3412 l
-2848 3412 m
-3098 3412 l
-3098 3413 l
-2848 3413 l
-2850 3413 m
-3097 3413 l
-3097 3414 l
-2850 3414 l
-2852 3414 m
-3097 3414 l
-3097 3415 l
-2852 3415 l
-2854 3415 m
-3096 3415 l
-3096 3416 l
-2854 3416 l
-2855 3416 m
-3096 3416 l
-3096 3417 l
-2855 3417 l
-2857 3417 m
-3095 3417 l
-3095 3418 l
-2857 3418 l
-2859 3418 m
-3095 3418 l
-3095 3419 l
-2859 3419 l
-2861 3419 m
-3094 3419 l
-3094 3420 l
-2861 3420 l
-2863 3420 m
-3093 3420 l
-3093 3421 l
-2863 3421 l
-2864 3421 m
-3093 3421 l
-3093 3422 l
-2864 3422 l
-2866 3422 m
-3092 3422 l
-3092 3423 l
-2866 3423 l
-2868 3423 m
-3092 3423 l
-3092 3424 l
-2868 3424 l
-2870 3424 m
-3091 3424 l
-3091 3425 l
-2870 3425 l
-2872 3425 m
-3091 3425 l
-3091 3426 l
-2872 3426 l
-2874 3426 m
-3090 3426 l
-3090 3427 l
-2874 3427 l
-2875 3427 m
-3090 3427 l
-3090 3428 l
-2875 3428 l
-2877 3428 m
-3089 3428 l
-3089 3429 l
-2877 3429 l
-2879 3429 m
-3088 3429 l
-3088 3430 l
-2879 3430 l
-2881 3430 m
-3088 3430 l
-3088 3431 l
-2881 3431 l
-2883 3431 m
-3087 3431 l
-3087 3432 l
-2883 3432 l
-2884 3432 m
-3087 3432 l
-3087 3433 l
-2884 3433 l
-2886 3433 m
-3086 3433 l
-3086 3434 l
-2886 3434 l
-2888 3434 m
-3086 3434 l
-3086 3435 l
-2888 3435 l
-2890 3435 m
-3085 3435 l
-3085 3436 l
-2890 3436 l
-2892 3436 m
-3085 3436 l
-3085 3437 l
-2892 3437 l
-2893 3437 m
-3084 3437 l
-3084 3438 l
-2893 3438 l
-2895 3438 m
-3083 3438 l
-3083 3439 l
-2895 3439 l
-2897 3439 m
-3083 3439 l
-3083 3440 l
-2897 3440 l
-2899 3440 m
-3082 3440 l
-3082 3441 l
-2899 3441 l
-2901 3441 m
-3082 3441 l
-3082 3442 l
-2901 3442 l
-2903 3442 m
-3081 3442 l
-3081 3443 l
-2903 3443 l
-2904 3443 m
-3081 3443 l
-3081 3444 l
-2904 3444 l
-2906 3444 m
-3080 3444 l
-3080 3445 l
-2906 3445 l
-2908 3445 m
-3080 3445 l
-3080 3446 l
-2908 3446 l
-2910 3446 m
-3079 3446 l
-3079 3447 l
-2910 3447 l
-2912 3447 m
-3078 3447 l
-3078 3448 l
-2912 3448 l
-2913 3448 m
-3078 3448 l
-3078 3449 l
-2913 3449 l
-2915 3449 m
-3077 3449 l
-3077 3450 l
-2915 3450 l
-2917 3450 m
-3077 3450 l
-3077 3451 l
-2917 3451 l
-2919 3451 m
-3076 3451 l
-3076 3452 l
-2919 3452 l
-2921 3452 m
-3076 3452 l
-3076 3453 l
-2921 3453 l
-2922 3453 m
-3075 3453 l
-3075 3454 l
-2922 3454 l
-2924 3454 m
-3075 3454 l
-3075 3455 l
-2924 3455 l
-2926 3455 m
-3074 3455 l
-3074 3456 l
-2926 3456 l
-2928 3456 m
-3073 3456 l
-3073 3457 l
-2928 3457 l
-2930 3457 m
-3073 3457 l
-3073 3458 l
-2930 3458 l
-2932 3458 m
-3072 3458 l
-3072 3459 l
-2932 3459 l
-2933 3459 m
-3072 3459 l
-3072 3460 l
-2933 3460 l
-2935 3460 m
-3071 3460 l
-3071 3461 l
-2935 3461 l
-2937 3461 m
-3071 3461 l
-3071 3462 l
-2937 3462 l
-2939 3462 m
-3070 3462 l
-3070 3463 l
-2939 3463 l
-2941 3463 m
-3070 3463 l
-3070 3464 l
-2941 3464 l
-2942 3464 m
-3069 3464 l
-3069 3465 l
-2942 3465 l
-2944 3465 m
-3068 3465 l
-3068 3466 l
-2944 3466 l
-2946 3466 m
-3068 3466 l
-3068 3467 l
-2946 3467 l
-2948 3467 m
-3067 3467 l
-3067 3468 l
-2948 3468 l
-2950 3468 m
-3067 3468 l
-3067 3469 l
-2950 3469 l
-2951 3469 m
-3066 3469 l
-3066 3470 l
-2951 3470 l
-2953 3470 m
-3066 3470 l
-3066 3471 l
-2953 3471 l
-2955 3471 m
-3065 3471 l
-3065 3472 l
-2955 3472 l
-2957 3472 m
-3065 3472 l
-3065 3473 l
-2957 3473 l
-2959 3473 m
-3064 3473 l
-3064 3474 l
-2959 3474 l
-2961 3474 m
-3063 3474 l
-3063 3475 l
-2961 3475 l
-2962 3475 m
-3063 3475 l
-3063 3476 l
-2962 3476 l
-2964 3476 m
-3062 3476 l
-3062 3477 l
-2964 3477 l
-2966 3477 m
-3062 3477 l
-3062 3478 l
-2966 3478 l
-2968 3478 m
-3061 3478 l
-3061 3479 l
-2968 3479 l
-2970 3479 m
-3061 3479 l
-3061 3480 l
-2970 3480 l
-2971 3480 m
-3060 3480 l
-3060 3481 l
-2971 3481 l
-2973 3481 m
-3060 3481 l
-3060 3482 l
-2973 3482 l
-2975 3482 m
-3059 3482 l
-3059 3483 l
-2975 3483 l
-2977 3483 m
-3058 3483 l
-3058 3484 l
-2977 3484 l
-2979 3484 m
-3058 3484 l
-3058 3485 l
-2979 3485 l
-2980 3485 m
-3057 3485 l
-3057 3486 l
-2980 3486 l
-2982 3486 m
-3057 3486 l
-3057 3487 l
-2982 3487 l
-2984 3487 m
-3056 3487 l
-3056 3488 l
-2984 3488 l
-2986 3488 m
-3056 3488 l
-3056 3489 l
-2986 3489 l
-2988 3489 m
-3055 3489 l
-3055 3490 l
-2988 3490 l
-2990 3490 m
-3055 3490 l
-3055 3491 l
-2990 3491 l
-2991 3491 m
-3054 3491 l
-3054 3492 l
-2991 3492 l
-2993 3492 m
-3053 3492 l
-3053 3493 l
-2993 3493 l
-2995 3493 m
-3053 3493 l
-3053 3494 l
-2995 3494 l
-2997 3494 m
-3052 3494 l
-3052 3495 l
-2997 3495 l
-2999 3495 m
-3052 3495 l
-3052 3496 l
-2999 3496 l
-3000 3496 m
-3051 3496 l
-3051 3497 l
-3000 3497 l
-3002 3497 m
-3051 3497 l
-3051 3498 l
-3002 3498 l
-3004 3498 m
-3050 3498 l
-3050 3499 l
-3004 3499 l
-3006 3499 m
-3050 3499 l
-3050 3500 l
-3006 3500 l
-3008 3500 m
-3049 3500 l
-3049 3501 l
-3008 3501 l
-3009 3501 m
-3048 3501 l
-3048 3502 l
-3009 3502 l
-3011 3502 m
-3048 3502 l
-3048 3503 l
-3011 3503 l
-3013 3503 m
-3047 3503 l
-3047 3504 l
-3013 3504 l
-3015 3504 m
-3047 3504 l
-3047 3505 l
-3015 3505 l
-3017 3505 m
-3046 3505 l
-3046 3506 l
-3017 3506 l
-3019 3506 m
-3046 3506 l
-3046 3507 l
-3019 3507 l
-3020 3507 m
-3045 3507 l
-3045 3508 l
-3020 3508 l
-3022 3508 m
-3045 3508 l
-3045 3509 l
-3022 3509 l
-3024 3509 m
-3044 3509 l
-3044 3510 l
-3024 3510 l
-3026 3510 m
-3043 3510 l
-3043 3511 l
-3026 3511 l
-3028 3511 m
-3043 3511 l
-3043 3512 l
-3028 3512 l
-3029 3512 m
-3042 3512 l
-3042 3513 l
-3029 3513 l
-3031 3513 m
-3042 3513 l
-3042 3514 l
-3031 3514 l
-3033 3514 m
-3041 3514 l
-3041 3515 l
-3033 3515 l
-3035 3515 m
-3041 3515 l
-3041 3516 l
-3035 3516 l
-3037 3516 m
-3040 3516 l
-3040 3517 l
-3037 3517 l
-Y
-2845.9 3271.5 m
-2787 3378 l
-3039 3517 l
-3098 3411 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-2838 3329 m
-2904 3366 l
-S
-2967 3424 m
-2969 3411 l
-2966 3400 l
-2957 3390 l
-2953 3388 l
-2940 3386 l
-2929 3389 l
-2919 3398 l
-2917 3402 l
-2915 3415 l
-2918 3426 l
-2927 3436 l
-2931 3438 l
-2944 3440 l
-2955 3437 l
-2967 3424 l
-2977 3406 l
-2983 3386 l
-2982 3371 l
-2973 3361 l
-2966 3357 l
-2953 3354 l
-2945 3360 l
-S
-3000 3476 m
-2991 3466 l
-2990 3451 l
-2996 3431 l
-3002 3420 l
-3016 3404 l
-3029 3397 l
-3042 3399 l
-3050 3403 l
-3059 3413 l
-3060 3428 l
-3054 3448 l
-3047 3459 l
-3034 3476 l
-3020 3483 l
-3007 3480 l
-3000 3476 l
-S
-1 g
-3190 3488 m
-3192 3488 l
-3192 3489 l
-3190 3489 l
-3189 3489 m
-3193 3489 l
-3193 3490 l
-3189 3490 l
-3187 3490 m
-3194 3490 l
-3194 3491 l
-3187 3491 l
-3186 3491 m
-3195 3491 l
-3195 3492 l
-3186 3492 l
-3185 3492 m
-3196 3492 l
-3196 3493 l
-3185 3493 l
-3184 3493 m
-3197 3493 l
-3197 3494 l
-3184 3494 l
-3183 3494 m
-3197 3494 l
-3197 3495 l
-3183 3495 l
-3181 3495 m
-3198 3495 l
-3198 3496 l
-3181 3496 l
-3180 3496 m
-3199 3496 l
-3199 3497 l
-3180 3497 l
-3179 3497 m
-3200 3497 l
-3200 3498 l
-3179 3498 l
-3178 3498 m
-3201 3498 l
-3201 3499 l
-3178 3499 l
-3176 3499 m
-3202 3499 l
-3202 3500 l
-3176 3500 l
-3175 3500 m
-3202 3500 l
-3202 3501 l
-3175 3501 l
-3174 3501 m
-3203 3501 l
-3203 3502 l
-3174 3502 l
-3173 3502 m
-3204 3502 l
-3204 3503 l
-3173 3503 l
-3172 3503 m
-3205 3503 l
-3205 3504 l
-3172 3504 l
-3170 3504 m
-3206 3504 l
-3206 3505 l
-3170 3505 l
-3169 3505 m
-3207 3505 l
-3207 3506 l
-3169 3506 l
-3168 3506 m
-3207 3506 l
-3207 3507 l
-3168 3507 l
-3167 3507 m
-3208 3507 l
-3208 3508 l
-3167 3508 l
-3166 3508 m
-3209 3508 l
-3209 3509 l
-3166 3509 l
-3164 3509 m
-3210 3509 l
-3210 3510 l
-3164 3510 l
-3163 3510 m
-3211 3510 l
-3211 3511 l
-3163 3511 l
-3162 3511 m
-3212 3511 l
-3212 3512 l
-3162 3512 l
-3161 3512 m
-3212 3512 l
-3212 3513 l
-3161 3513 l
-3159 3513 m
-3213 3513 l
-3213 3514 l
-3159 3514 l
-3158 3514 m
-3214 3514 l
-3214 3515 l
-3158 3515 l
-3157 3515 m
-3215 3515 l
-3215 3516 l
-3157 3516 l
-3156 3516 m
-3216 3516 l
-3216 3517 l
-3156 3517 l
-3155 3517 m
-3216 3517 l
-3216 3518 l
-3155 3518 l
-3153 3518 m
-3217 3518 l
-3217 3519 l
-3153 3519 l
-3152 3519 m
-3218 3519 l
-3218 3520 l
-3152 3520 l
-3151 3520 m
-3219 3520 l
-3219 3521 l
-3151 3521 l
-3150 3521 m
-3220 3521 l
-3220 3522 l
-3150 3522 l
-3149 3522 m
-3221 3522 l
-3221 3523 l
-3149 3523 l
-3147 3523 m
-3221 3523 l
-3221 3524 l
-3147 3524 l
-3146 3524 m
-3222 3524 l
-3222 3525 l
-3146 3525 l
-3145 3525 m
-3223 3525 l
-3223 3526 l
-3145 3526 l
-3144 3526 m
-3224 3526 l
-3224 3527 l
-3144 3527 l
-3142 3527 m
-3225 3527 l
-3225 3528 l
-3142 3528 l
-3141 3528 m
-3226 3528 l
-3226 3529 l
-3141 3529 l
-3140 3529 m
-3226 3529 l
-3226 3530 l
-3140 3530 l
-3139 3530 m
-3227 3530 l
-3227 3531 l
-3139 3531 l
-3138 3531 m
-3228 3531 l
-3228 3532 l
-3138 3532 l
-3136 3532 m
-3229 3532 l
-3229 3533 l
-3136 3533 l
-3135 3533 m
-3230 3533 l
-3230 3534 l
-3135 3534 l
-3134 3534 m
-3231 3534 l
-3231 3535 l
-3134 3535 l
-3133 3535 m
-3231 3535 l
-3231 3536 l
-3133 3536 l
-3132 3536 m
-3232 3536 l
-3232 3537 l
-3132 3537 l
-3130 3537 m
-3233 3537 l
-3233 3538 l
-3130 3538 l
-3129 3538 m
-3234 3538 l
-3234 3539 l
-3129 3539 l
-3128 3539 m
-3235 3539 l
-3235 3540 l
-3128 3540 l
-3127 3540 m
-3236 3540 l
-3236 3541 l
-3127 3541 l
-3125 3541 m
-3236 3541 l
-3236 3542 l
-3125 3542 l
-3124 3542 m
-3237 3542 l
-3237 3543 l
-3124 3543 l
-3123 3543 m
-3238 3543 l
-3238 3544 l
-3123 3544 l
-3122 3544 m
-3239 3544 l
-3239 3545 l
-3122 3545 l
-3121 3545 m
-3240 3545 l
-3240 3546 l
-3121 3546 l
-3119 3546 m
-3240 3546 l
-3240 3547 l
-3119 3547 l
-3118 3547 m
-3241 3547 l
-3241 3548 l
-3118 3548 l
-3117 3548 m
-3242 3548 l
-3242 3549 l
-3117 3549 l
-3116 3549 m
-3243 3549 l
-3243 3550 l
-3116 3550 l
-3115 3550 m
-3244 3550 l
-3244 3551 l
-3115 3551 l
-3113 3551 m
-3245 3551 l
-3245 3552 l
-3113 3552 l
-3112 3552 m
-3245 3552 l
-3245 3553 l
-3112 3553 l
-3111 3553 m
-3246 3553 l
-3246 3554 l
-3111 3554 l
-3110 3554 m
-3247 3554 l
-3247 3555 l
-3110 3555 l
-3108 3555 m
-3248 3555 l
-3248 3556 l
-3108 3556 l
-3107 3556 m
-3249 3556 l
-3249 3557 l
-3107 3557 l
-3106 3557 m
-3250 3557 l
-3250 3558 l
-3106 3558 l
-3105 3558 m
-3250 3558 l
-3250 3559 l
-3105 3559 l
-3104 3559 m
-3251 3559 l
-3251 3560 l
-3104 3560 l
-3102 3560 m
-3252 3560 l
-3252 3561 l
-3102 3561 l
-3101 3561 m
-3253 3561 l
-3253 3562 l
-3101 3562 l
-3100 3562 m
-3254 3562 l
-3254 3563 l
-3100 3563 l
-3099 3563 m
-3255 3563 l
-3255 3564 l
-3099 3564 l
-3098 3564 m
-3255 3564 l
-3255 3565 l
-3098 3565 l
-3098 3565 m
-3256 3565 l
-3256 3566 l
-3098 3566 l
-3098 3566 m
-3257 3566 l
-3257 3567 l
-3098 3567 l
-3099 3567 m
-3258 3567 l
-3258 3568 l
-3099 3568 l
-3100 3568 m
-3259 3568 l
-3259 3569 l
-3100 3569 l
-3101 3569 m
-3260 3569 l
-3260 3570 l
-3101 3570 l
-3102 3570 m
-3260 3570 l
-3260 3571 l
-3102 3571 l
-3102 3571 m
-3261 3571 l
-3261 3572 l
-3102 3572 l
-3103 3572 m
-3262 3572 l
-3262 3573 l
-3103 3573 l
-3104 3573 m
-3263 3573 l
-3263 3574 l
-3104 3574 l
-3105 3574 m
-3264 3574 l
-3264 3575 l
-3105 3575 l
-3106 3575 m
-3265 3575 l
-3265 3576 l
-3106 3576 l
-3107 3576 m
-3265 3576 l
-3265 3577 l
-3107 3577 l
-3107 3577 m
-3266 3577 l
-3266 3578 l
-3107 3578 l
-3108 3578 m
-3267 3578 l
-3267 3579 l
-3108 3579 l
-3109 3579 m
-3268 3579 l
-3268 3580 l
-3109 3580 l
-3110 3580 m
-3269 3580 l
-3269 3581 l
-3110 3581 l
-3111 3581 m
-3269 3581 l
-3269 3582 l
-3111 3582 l
-3111 3582 m
-3270 3582 l
-3270 3583 l
-3111 3583 l
-3112 3583 m
-3271 3583 l
-3271 3584 l
-3112 3584 l
-3113 3584 m
-3272 3584 l
-3272 3585 l
-3113 3585 l
-3114 3585 m
-3273 3585 l
-3273 3586 l
-3114 3586 l
-3115 3586 m
-3274 3586 l
-3274 3587 l
-3115 3587 l
-3116 3587 m
-3274 3587 l
-3274 3588 l
-3116 3588 l
-3116 3588 m
-3275 3588 l
-3275 3589 l
-3116 3589 l
-3117 3589 m
-3276 3589 l
-3276 3590 l
-3117 3590 l
-3118 3590 m
-3277 3590 l
-3277 3591 l
-3118 3591 l
-3119 3591 m
-3278 3591 l
-3278 3592 l
-3119 3592 l
-3120 3592 m
-3279 3592 l
-3279 3594 l
-3120 3594 l
-3121 3594 m
-3280 3594 l
-3280 3595 l
-3121 3595 l
-3122 3595 m
-3281 3595 l
-3281 3596 l
-3122 3596 l
-3123 3596 m
-3282 3596 l
-3282 3597 l
-3123 3597 l
-3124 3597 m
-3283 3597 l
-3283 3598 l
-3124 3598 l
-3125 3598 m
-3284 3598 l
-3284 3600 l
-3125 3600 l
-3126 3600 m
-3285 3600 l
-3285 3601 l
-3126 3601 l
-3127 3601 m
-3286 3601 l
-3286 3602 l
-3127 3602 l
-3128 3602 m
-3287 3602 l
-3287 3603 l
-3128 3603 l
-3129 3603 m
-3288 3603 l
-3288 3604 l
-3129 3604 l
-3130 3604 m
-3289 3604 l
-3289 3606 l
-3130 3606 l
-3131 3606 m
-3290 3606 l
-3290 3607 l
-3131 3607 l
-3132 3607 m
-3291 3607 l
-3291 3608 l
-3132 3608 l
-3133 3608 m
-3292 3608 l
-3292 3609 l
-3133 3609 l
-3134 3609 m
-3293 3609 l
-3293 3610 l
-3134 3610 l
-3134 3610 m
-3294 3610 l
-3294 3611 l
-3134 3611 l
-3135 3611 m
-3294 3611 l
-3294 3612 l
-3135 3612 l
-3136 3612 m
-3295 3612 l
-3295 3613 l
-3136 3613 l
-3137 3613 m
-3296 3613 l
-3296 3614 l
-3137 3614 l
-3138 3614 m
-3297 3614 l
-3297 3615 l
-3138 3615 l
-3139 3615 m
-3298 3615 l
-3298 3617 l
-3139 3617 l
-3140 3617 m
-3299 3617 l
-3299 3618 l
-3140 3618 l
-3141 3618 m
-3300 3618 l
-3300 3619 l
-3141 3619 l
-3142 3619 m
-3301 3619 l
-3301 3620 l
-3142 3620 l
-3143 3620 m
-3302 3620 l
-3302 3621 l
-3143 3621 l
-3143 3621 m
-3303 3621 l
-3303 3622 l
-3143 3622 l
-3144 3622 m
-3303 3622 l
-3303 3623 l
-3144 3623 l
-3145 3623 m
-3304 3623 l
-3304 3624 l
-3145 3624 l
-3146 3624 m
-3305 3624 l
-3305 3625 l
-3146 3625 l
-3147 3625 m
-3306 3625 l
-3306 3626 l
-3147 3626 l
-3148 3626 m
-3307 3626 l
-3307 3627 l
-3148 3627 l
-3148 3627 m
-3308 3627 l
-3308 3628 l
-3148 3628 l
-3149 3628 m
-3308 3628 l
-3308 3629 l
-3149 3629 l
-3150 3629 m
-3309 3629 l
-3309 3630 l
-3150 3630 l
-3151 3630 m
-3310 3630 l
-3310 3631 l
-3151 3631 l
-3152 3631 m
-3311 3631 l
-3311 3632 l
-3152 3632 l
-3152 3632 m
-3312 3632 l
-3312 3633 l
-3152 3633 l
-3153 3633 m
-3313 3633 l
-3313 3634 l
-3153 3634 l
-3154 3634 m
-3313 3634 l
-3313 3635 l
-3154 3635 l
-3155 3635 m
-3314 3635 l
-3314 3636 l
-3155 3636 l
-3156 3636 m
-3315 3636 l
-3315 3637 l
-3156 3637 l
-3157 3637 m
-3316 3637 l
-3316 3638 l
-3157 3638 l
-3157 3638 m
-3317 3638 l
-3317 3639 l
-3157 3639 l
-3158 3639 m
-3318 3639 l
-3318 3640 l
-3158 3640 l
-3159 3640 m
-3318 3640 l
-3318 3641 l
-3159 3641 l
-3160 3641 m
-3319 3641 l
-3319 3642 l
-3160 3642 l
-3161 3642 m
-3320 3642 l
-3320 3643 l
-3161 3643 l
-3162 3643 m
-3321 3643 l
-3321 3644 l
-3162 3644 l
-3162 3644 m
-3322 3644 l
-3322 3645 l
-3162 3645 l
-3163 3645 m
-3322 3645 l
-3322 3646 l
-3163 3646 l
-3164 3646 m
-3323 3646 l
-3323 3647 l
-3164 3647 l
-3165 3647 m
-3324 3647 l
-3324 3648 l
-3165 3648 l
-3166 3648 m
-3325 3648 l
-3325 3649 l
-3166 3649 l
-3166 3649 m
-3326 3649 l
-3326 3650 l
-3166 3650 l
-3167 3650 m
-3327 3650 l
-3327 3651 l
-3167 3651 l
-3168 3651 m
-3327 3651 l
-3327 3652 l
-3168 3652 l
-3169 3652 m
-3328 3652 l
-3328 3653 l
-3169 3653 l
-3170 3653 m
-3329 3653 l
-3329 3654 l
-3170 3654 l
-3171 3654 m
-3330 3654 l
-3330 3655 l
-3171 3655 l
-3171 3655 m
-3331 3655 l
-3331 3656 l
-3171 3656 l
-3172 3656 m
-3332 3656 l
-3332 3657 l
-3172 3657 l
-3173 3657 m
-3332 3657 l
-3332 3658 l
-3173 3658 l
-3174 3658 m
-3333 3658 l
-3333 3659 l
-3174 3659 l
-3175 3659 m
-3334 3659 l
-3334 3660 l
-3175 3660 l
-3175 3660 m
-3335 3660 l
-3335 3661 l
-3175 3661 l
-3176 3661 m
-3336 3661 l
-3336 3662 l
-3176 3662 l
-3177 3662 m
-3337 3662 l
-3337 3663 l
-3177 3663 l
-3178 3663 m
-3337 3663 l
-3337 3664 l
-3178 3664 l
-3179 3664 m
-3338 3664 l
-3338 3665 l
-3179 3665 l
-3180 3665 m
-3339 3665 l
-3339 3666 l
-3180 3666 l
-3180 3666 m
-3340 3666 l
-3340 3667 l
-3180 3667 l
-3181 3667 m
-3341 3667 l
-3341 3668 l
-3181 3668 l
-3182 3668 m
-3342 3668 l
-3342 3669 l
-3182 3669 l
-3183 3669 m
-3342 3669 l
-3342 3670 l
-3183 3670 l
-3184 3670 m
-3343 3670 l
-3343 3671 l
-3184 3671 l
-3184 3671 m
-3344 3671 l
-3344 3672 l
-3184 3672 l
-3185 3672 m
-3345 3672 l
-3345 3673 l
-3185 3673 l
-3186 3673 m
-3346 3673 l
-3346 3674 l
-3186 3674 l
-3187 3674 m
-3347 3674 l
-3347 3675 l
-3187 3675 l
-3188 3675 m
-3347 3675 l
-3347 3676 l
-3188 3676 l
-3189 3676 m
-3348 3676 l
-3348 3677 l
-3189 3677 l
-3189 3677 m
-3349 3677 l
-3349 3678 l
-3189 3678 l
-3190 3678 m
-3350 3678 l
-3350 3679 l
-3190 3679 l
-3191 3679 m
-3351 3679 l
-3351 3680 l
-3191 3680 l
-3192 3680 m
-3351 3680 l
-3351 3681 l
-3192 3681 l
-3193 3681 m
-3352 3681 l
-3352 3682 l
-3193 3682 l
-3194 3682 m
-3353 3682 l
-3353 3683 l
-3194 3683 l
-3194 3683 m
-3354 3683 l
-3354 3684 l
-3194 3684 l
-3195 3684 m
-3355 3684 l
-3355 3685 l
-3195 3685 l
-3196 3685 m
-3356 3685 l
-3356 3686 l
-3196 3686 l
-3197 3686 m
-3356 3686 l
-3356 3687 l
-3197 3687 l
-3198 3687 m
-3357 3687 l
-3357 3688 l
-3198 3688 l
-3198 3688 m
-3358 3688 l
-3358 3689 l
-3198 3689 l
-3199 3689 m
-3359 3689 l
-3359 3690 l
-3199 3690 l
-3200 3690 m
-3360 3690 l
-3360 3691 l
-3200 3691 l
-3201 3691 m
-3361 3691 l
-3361 3692 l
-3201 3692 l
-3202 3692 m
-3361 3692 l
-3361 3693 l
-3202 3693 l
-3203 3693 m
-3362 3693 l
-3362 3694 l
-3203 3694 l
-3203 3694 m
-3363 3694 l
-3363 3695 l
-3203 3695 l
-3204 3695 m
-3364 3695 l
-3364 3696 l
-3204 3696 l
-3205 3696 m
-3365 3696 l
-3365 3697 l
-3205 3697 l
-3206 3697 m
-3366 3697 l
-3366 3698 l
-3206 3698 l
-3207 3698 m
-3366 3698 l
-3366 3699 l
-3207 3699 l
-3207 3699 m
-3367 3699 l
-3367 3700 l
-3207 3700 l
-3208 3700 m
-3368 3700 l
-3368 3701 l
-3208 3701 l
-3209 3701 m
-3369 3701 l
-3369 3702 l
-3209 3702 l
-3210 3702 m
-3370 3702 l
-3370 3703 l
-3210 3703 l
-3211 3703 m
-3371 3703 l
-3371 3704 l
-3211 3704 l
-3212 3704 m
-3371 3704 l
-3371 3705 l
-3212 3705 l
-3212 3705 m
-3372 3705 l
-3372 3706 l
-3212 3706 l
-3213 3706 m
-3373 3706 l
-3373 3707 l
-3213 3707 l
-3214 3707 m
-3374 3707 l
-3374 3708 l
-3214 3708 l
-3215 3708 m
-3375 3708 l
-3375 3709 l
-3215 3709 l
-3216 3709 m
-3375 3709 l
-3375 3710 l
-3216 3710 l
-3216 3710 m
-3375 3710 l
-3375 3711 l
-3216 3711 l
-3217 3711 m
-3374 3711 l
-3374 3712 l
-3217 3712 l
-3218 3712 m
-3373 3712 l
-3373 3713 l
-3218 3713 l
-3219 3713 m
-3372 3713 l
-3372 3714 l
-3219 3714 l
-3220 3714 m
-3371 3714 l
-3371 3715 l
-3220 3715 l
-3221 3715 m
-3369 3715 l
-3369 3716 l
-3221 3716 l
-3221 3716 m
-3368 3716 l
-3368 3717 l
-3221 3717 l
-3222 3717 m
-3367 3717 l
-3367 3718 l
-3222 3718 l
-3223 3718 m
-3366 3718 l
-3366 3719 l
-3223 3719 l
-3224 3719 m
-3365 3719 l
-3365 3720 l
-3224 3720 l
-3225 3720 m
-3363 3720 l
-3363 3721 l
-3225 3721 l
-3226 3721 m
-3362 3721 l
-3362 3722 l
-3226 3722 l
-3226 3722 m
-3361 3722 l
-3361 3723 l
-3226 3723 l
-3227 3723 m
-3360 3723 l
-3360 3724 l
-3227 3724 l
-3228 3724 m
-3359 3724 l
-3359 3725 l
-3228 3725 l
-3229 3725 m
-3357 3725 l
-3357 3726 l
-3229 3726 l
-3230 3726 m
-3356 3726 l
-3356 3727 l
-3230 3727 l
-3230 3727 m
-3355 3727 l
-3355 3728 l
-3230 3728 l
-3231 3728 m
-3354 3728 l
-3354 3729 l
-3231 3729 l
-3232 3729 m
-3353 3729 l
-3353 3730 l
-3232 3730 l
-3233 3730 m
-3351 3730 l
-3351 3731 l
-3233 3731 l
-3234 3731 m
-3350 3731 l
-3350 3732 l
-3234 3732 l
-3235 3732 m
-3349 3732 l
-3349 3733 l
-3235 3733 l
-3235 3733 m
-3348 3733 l
-3348 3734 l
-3235 3734 l
-3236 3734 m
-3347 3734 l
-3347 3735 l
-3236 3735 l
-3237 3735 m
-3345 3735 l
-3345 3736 l
-3237 3736 l
-3238 3736 m
-3344 3736 l
-3344 3737 l
-3238 3737 l
-3239 3737 m
-3343 3737 l
-3343 3738 l
-3239 3738 l
-3239 3738 m
-3342 3738 l
-3342 3739 l
-3239 3739 l
-3240 3739 m
-3341 3739 l
-3341 3740 l
-3240 3740 l
-3241 3740 m
-3339 3740 l
-3339 3741 l
-3241 3741 l
-3242 3741 m
-3338 3741 l
-3338 3742 l
-3242 3742 l
-3243 3742 m
-3337 3742 l
-3337 3743 l
-3243 3743 l
-3244 3743 m
-3336 3743 l
-3336 3744 l
-3244 3744 l
-3244 3744 m
-3335 3744 l
-3335 3745 l
-3244 3745 l
-3245 3745 m
-3333 3745 l
-3333 3746 l
-3245 3746 l
-3246 3746 m
-3332 3746 l
-3332 3747 l
-3246 3747 l
-3247 3747 m
-3331 3747 l
-3331 3748 l
-3247 3748 l
-3248 3748 m
-3330 3748 l
-3330 3749 l
-3248 3749 l
-3248 3749 m
-3328 3749 l
-3328 3750 l
-3248 3750 l
-3249 3750 m
-3327 3750 l
-3327 3751 l
-3249 3751 l
-3250 3751 m
-3326 3751 l
-3326 3752 l
-3250 3752 l
-3251 3752 m
-3325 3752 l
-3325 3753 l
-3251 3753 l
-3252 3753 m
-3324 3753 l
-3324 3754 l
-3252 3754 l
-3253 3754 m
-3322 3754 l
-3322 3755 l
-3253 3755 l
-3253 3755 m
-3321 3755 l
-3321 3756 l
-3253 3756 l
-3254 3756 m
-3320 3756 l
-3320 3757 l
-3254 3757 l
-3255 3757 m
-3319 3757 l
-3319 3758 l
-3255 3758 l
-3256 3758 m
-3318 3758 l
-3318 3759 l
-3256 3759 l
-3257 3759 m
-3316 3759 l
-3316 3760 l
-3257 3760 l
-3258 3760 m
-3315 3760 l
-3315 3761 l
-3258 3761 l
-3258 3761 m
-3314 3761 l
-3314 3762 l
-3258 3762 l
-3259 3762 m
-3313 3762 l
-3313 3763 l
-3259 3763 l
-3260 3763 m
-3312 3763 l
-3312 3764 l
-3260 3764 l
-3261 3764 m
-3310 3764 l
-3310 3765 l
-3261 3765 l
-3262 3765 m
-3309 3765 l
-3309 3766 l
-3262 3766 l
-3262 3766 m
-3308 3766 l
-3308 3767 l
-3262 3767 l
-3263 3767 m
-3307 3767 l
-3307 3768 l
-3263 3768 l
-3264 3768 m
-3306 3768 l
-3306 3769 l
-3264 3769 l
-3265 3769 m
-3304 3769 l
-3304 3770 l
-3265 3770 l
-3266 3770 m
-3303 3770 l
-3303 3771 l
-3266 3771 l
-3267 3771 m
-3302 3771 l
-3302 3772 l
-3267 3772 l
-3267 3772 m
-3301 3772 l
-3301 3773 l
-3267 3773 l
-3268 3773 m
-3300 3773 l
-3300 3774 l
-3268 3774 l
-3269 3774 m
-3298 3774 l
-3298 3775 l
-3269 3775 l
-3270 3775 m
-3297 3775 l
-3297 3776 l
-3270 3776 l
-3271 3776 m
-3296 3776 l
-3296 3777 l
-3271 3777 l
-3271 3777 m
-3295 3777 l
-3295 3778 l
-3271 3778 l
-3272 3778 m
-3294 3778 l
-3294 3779 l
-3272 3779 l
-3273 3779 m
-3292 3779 l
-3292 3780 l
-3273 3780 l
-3274 3780 m
-3291 3780 l
-3291 3781 l
-3274 3781 l
-3275 3781 m
-3290 3781 l
-3290 3782 l
-3275 3782 l
-3276 3782 m
-3289 3782 l
-3289 3783 l
-3276 3783 l
-3276 3783 m
-3288 3783 l
-3288 3784 l
-3276 3784 l
-3277 3784 m
-3286 3784 l
-3286 3785 l
-3277 3785 l
-3278 3785 m
-3285 3785 l
-3285 3786 l
-3278 3786 l
-3279 3786 m
-3284 3786 l
-3284 3787 l
-3279 3787 l
-3280 3787 m
-3283 3787 l
-3283 3788 l
-3280 3788 l
-Y
-3191.3 3488.2 m
-3098 3565 l
-3281 3788 l
-3375 3710 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-3163 3539 m
-3211 3597 l
-S
-3235 3685 m
-3226 3687 l
-3214 3680 l
-3209 3674 l
-3204 3662 l
-3209 3647 l
-3222 3631 l
-3238 3617 l
-3254 3610 l
-3266 3611 l
-3277 3618 l
-3279 3621 l
-3284 3634 l
-3283 3645 l
-3276 3657 l
-3273 3659 l
-3260 3664 l
-3249 3663 l
-3238 3656 l
-3235 3653 l
-3230 3640 l
-3231 3629 l
-3238 3617 l
-S
-3260 3735 m
-3255 3723 l
-3259 3708 l
-3273 3692 l
-3282 3684 l
-3301 3674 l
-3316 3672 l
-3327 3679 l
-3333 3686 l
-3337 3698 l
-3333 3712 l
-3320 3729 l
-3310 3737 l
-3291 3747 l
-3276 3749 l
-3265 3742 l
-3260 3735 l
-S
-1 g
-3431 3818 m
-3434 3818 l
-3434 3819 l
-3431 3819 l
-3427 3819 m
-3435 3819 l
-3435 3820 l
-3427 3820 l
-3424 3820 m
-3435 3820 l
-3435 3821 l
-3424 3821 l
-3421 3821 m
-3435 3821 l
-3435 3822 l
-3421 3822 l
-3417 3822 m
-3436 3822 l
-3436 3823 l
-3417 3823 l
-3414 3823 m
-3436 3823 l
-3436 3824 l
-3414 3824 l
-3411 3824 m
-3436 3824 l
-3436 3825 l
-3411 3825 l
-3407 3825 m
-3437 3825 l
-3437 3826 l
-3407 3826 l
-3404 3826 m
-3437 3826 l
-3437 3827 l
-3404 3827 l
-3401 3827 m
-3437 3827 l
-3437 3828 l
-3401 3828 l
-3397 3828 m
-3437 3828 l
-3437 3829 l
-3397 3829 l
-3394 3829 m
-3438 3829 l
-3438 3830 l
-3394 3830 l
-3391 3830 m
-3438 3830 l
-3438 3831 l
-3391 3831 l
-3387 3831 m
-3438 3831 l
-3438 3832 l
-3387 3832 l
-3384 3832 m
-3439 3832 l
-3439 3833 l
-3384 3833 l
-3381 3833 m
-3439 3833 l
-3439 3834 l
-3381 3834 l
-3377 3834 m
-3439 3834 l
-3439 3835 l
-3377 3835 l
-3374 3835 m
-3440 3835 l
-3440 3836 l
-3374 3836 l
-3371 3836 m
-3440 3836 l
-3440 3837 l
-3371 3837 l
-3367 3837 m
-3440 3837 l
-3440 3838 l
-3367 3838 l
-3364 3838 m
-3440 3838 l
-3440 3839 l
-3364 3839 l
-3361 3839 m
-3441 3839 l
-3441 3840 l
-3361 3840 l
-3357 3840 m
-3441 3840 l
-3441 3841 l
-3357 3841 l
-3354 3841 m
-3441 3841 l
-3441 3842 l
-3354 3842 l
-3351 3842 m
-3442 3842 l
-3442 3843 l
-3351 3843 l
-3347 3843 m
-3442 3843 l
-3442 3844 l
-3347 3844 l
-3344 3844 m
-3442 3844 l
-3442 3845 l
-3344 3845 l
-3341 3845 m
-3442 3845 l
-3442 3846 l
-3341 3846 l
-3337 3846 m
-3443 3846 l
-3443 3847 l
-3337 3847 l
-3334 3847 m
-3443 3847 l
-3443 3848 l
-3334 3848 l
-3331 3848 m
-3443 3848 l
-3443 3849 l
-3331 3849 l
-3327 3849 m
-3444 3849 l
-3444 3850 l
-3327 3850 l
-3324 3850 m
-3444 3850 l
-3444 3851 l
-3324 3851 l
-3321 3851 m
-3444 3851 l
-3444 3852 l
-3321 3852 l
-3318 3852 m
-3445 3852 l
-3445 3853 l
-3318 3853 l
-3318 3853 m
-3445 3853 l
-3445 3856 l
-3318 3856 l
-3318 3856 m
-3446 3856 l
-3446 3857 l
-3318 3857 l
-3319 3857 m
-3446 3857 l
-3446 3859 l
-3319 3859 l
-3319 3859 m
-3447 3859 l
-3447 3860 l
-3319 3860 l
-3320 3860 m
-3447 3860 l
-3447 3862 l
-3320 3862 l
-3320 3862 m
-3448 3862 l
-3448 3864 l
-3320 3864 l
-3321 3864 m
-3448 3864 l
-3448 3866 l
-3321 3866 l
-3321 3866 m
-3449 3866 l
-3449 3867 l
-3321 3867 l
-3322 3867 m
-3449 3867 l
-3449 3869 l
-3322 3869 l
-3322 3869 m
-3450 3869 l
-3450 3870 l
-3322 3870 l
-3323 3870 m
-3450 3870 l
-3450 3872 l
-3323 3872 l
-3323 3872 m
-3451 3872 l
-3451 3874 l
-3323 3874 l
-3324 3874 m
-3451 3874 l
-3451 3876 l
-3324 3876 l
-3324 3876 m
-3452 3876 l
-3452 3877 l
-3324 3877 l
-3325 3877 m
-3452 3877 l
-3452 3879 l
-3325 3879 l
-3325 3879 m
-3453 3879 l
-3453 3880 l
-3325 3880 l
-3326 3880 m
-3453 3880 l
-3453 3882 l
-3326 3882 l
-3326 3882 m
-3454 3882 l
-3454 3884 l
-3326 3884 l
-3327 3884 m
-3454 3884 l
-3454 3886 l
-3327 3886 l
-3327 3886 m
-3455 3886 l
-3455 3887 l
-3327 3887 l
-3328 3887 m
-3455 3887 l
-3455 3889 l
-3328 3889 l
-3328 3889 m
-3456 3889 l
-3456 3891 l
-3328 3891 l
-3329 3891 m
-3456 3891 l
-3456 3892 l
-3329 3892 l
-3329 3892 m
-3457 3892 l
-3457 3894 l
-3329 3894 l
-3330 3894 m
-3457 3894 l
-3457 3896 l
-3330 3896 l
-3330 3896 m
-3458 3896 l
-3458 3897 l
-3330 3897 l
-3331 3897 m
-3458 3897 l
-3458 3899 l
-3331 3899 l
-3331 3899 m
-3459 3899 l
-3459 3901 l
-3331 3901 l
-3332 3901 m
-3459 3901 l
-3459 3902 l
-3332 3902 l
-3332 3902 m
-3460 3902 l
-3460 3904 l
-3332 3904 l
-3333 3904 m
-3460 3904 l
-3460 3906 l
-3333 3906 l
-3333 3906 m
-3461 3906 l
-3461 3907 l
-3333 3907 l
-3334 3907 m
-3461 3907 l
-3461 3909 l
-3334 3909 l
-3334 3909 m
-3462 3909 l
-3462 3911 l
-3334 3911 l
-3335 3911 m
-3462 3911 l
-3462 3913 l
-3335 3913 l
-3335 3913 m
-3463 3913 l
-3463 3914 l
-3335 3914 l
-3336 3914 m
-3463 3914 l
-3463 3916 l
-3336 3916 l
-3336 3916 m
-3464 3916 l
-3464 3917 l
-3336 3917 l
-3337 3917 m
-3464 3917 l
-3464 3919 l
-3337 3919 l
-3337 3919 m
-3465 3919 l
-3465 3921 l
-3337 3921 l
-3338 3921 m
-3465 3921 l
-3465 3923 l
-3338 3923 l
-3338 3923 m
-3466 3923 l
-3466 3924 l
-3338 3924 l
-3339 3924 m
-3466 3924 l
-3466 3926 l
-3339 3926 l
-3339 3926 m
-3467 3926 l
-3467 3928 l
-3339 3928 l
-3340 3928 m
-3467 3928 l
-3467 3929 l
-3340 3929 l
-3340 3929 m
-3468 3929 l
-3468 3931 l
-3340 3931 l
-3341 3931 m
-3468 3931 l
-3468 3933 l
-3341 3933 l
-3341 3933 m
-3469 3933 l
-3469 3934 l
-3341 3934 l
-3342 3934 m
-3469 3934 l
-3469 3936 l
-3342 3936 l
-3342 3936 m
-3470 3936 l
-3470 3938 l
-3342 3938 l
-3343 3938 m
-3470 3938 l
-3470 3939 l
-3343 3939 l
-3343 3939 m
-3471 3939 l
-3471 3941 l
-3343 3941 l
-3344 3941 m
-3471 3941 l
-3471 3943 l
-3344 3943 l
-3344 3943 m
-3472 3943 l
-3472 3944 l
-3344 3944 l
-3345 3944 m
-3472 3944 l
-3472 3946 l
-3345 3946 l
-3345 3946 m
-3473 3946 l
-3473 3948 l
-3345 3948 l
-3346 3948 m
-3473 3948 l
-3473 3949 l
-3346 3949 l
-3346 3949 m
-3474 3949 l
-3474 3951 l
-3346 3951 l
-3347 3951 m
-3474 3951 l
-3474 3953 l
-3347 3953 l
-3347 3953 m
-3475 3953 l
-3475 3954 l
-3347 3954 l
-3348 3954 m
-3475 3954 l
-3475 3956 l
-3348 3956 l
-3348 3956 m
-3476 3956 l
-3476 3958 l
-3348 3958 l
-3349 3958 m
-3476 3958 l
-3476 3959 l
-3349 3959 l
-3349 3959 m
-3477 3959 l
-3477 3961 l
-3349 3961 l
-3350 3961 m
-3477 3961 l
-3477 3963 l
-3350 3963 l
-3350 3963 m
-3478 3963 l
-3478 3965 l
-3350 3965 l
-3351 3965 m
-3478 3965 l
-3478 3966 l
-3351 3966 l
-3351 3966 m
-3479 3966 l
-3479 3968 l
-3351 3968 l
-3352 3968 m
-3479 3968 l
-3479 3970 l
-3352 3970 l
-3352 3970 m
-3480 3970 l
-3480 3971 l
-3352 3971 l
-3353 3971 m
-3480 3971 l
-3480 3973 l
-3353 3973 l
-3353 3973 m
-3481 3973 l
-3481 3975 l
-3353 3975 l
-3354 3975 m
-3481 3975 l
-3481 3976 l
-3354 3976 l
-3354 3976 m
-3482 3976 l
-3482 3978 l
-3354 3978 l
-3355 3978 m
-3482 3978 l
-3482 3980 l
-3355 3980 l
-3355 3980 m
-3483 3980 l
-3483 3981 l
-3355 3981 l
-3356 3981 m
-3483 3981 l
-3483 3983 l
-3356 3983 l
-3356 3983 m
-3484 3983 l
-3484 3985 l
-3356 3985 l
-3357 3985 m
-3484 3985 l
-3484 3986 l
-3357 3986 l
-3357 3986 m
-3485 3986 l
-3485 3988 l
-3357 3988 l
-3358 3988 m
-3485 3988 l
-3485 3990 l
-3358 3990 l
-3358 3990 m
-3486 3990 l
-3486 3991 l
-3358 3991 l
-3359 3991 m
-3486 3991 l
-3486 3993 l
-3359 3993 l
-3359 3993 m
-3487 3993 l
-3487 3995 l
-3359 3995 l
-3360 3995 m
-3487 3995 l
-3487 3996 l
-3360 3996 l
-3360 3996 m
-3488 3996 l
-3488 3998 l
-3360 3998 l
-3361 3998 m
-3488 3998 l
-3488 4000 l
-3361 4000 l
-3361 4000 m
-3489 4000 l
-3489 4002 l
-3361 4002 l
-3362 4002 m
-3489 4002 l
-3489 4003 l
-3362 4003 l
-3362 4003 m
-3490 4003 l
-3490 4005 l
-3362 4005 l
-3363 4005 m
-3490 4005 l
-3490 4006 l
-3363 4006 l
-3363 4006 m
-3491 4006 l
-3491 4008 l
-3363 4008 l
-3364 4008 m
-3491 4008 l
-3491 4010 l
-3364 4010 l
-3364 4010 m
-3492 4010 l
-3492 4012 l
-3364 4012 l
-3365 4012 m
-3492 4012 l
-3492 4013 l
-3365 4013 l
-3365 4013 m
-3493 4013 l
-3493 4015 l
-3365 4015 l
-3366 4015 m
-3493 4015 l
-3493 4016 l
-3366 4016 l
-3366 4016 m
-3494 4016 l
-3494 4018 l
-3366 4018 l
-3367 4018 m
-3494 4018 l
-3494 4020 l
-3367 4020 l
-3367 4020 m
-3495 4020 l
-3495 4022 l
-3367 4022 l
-3368 4022 m
-3495 4022 l
-3495 4023 l
-3368 4023 l
-3368 4023 m
-3496 4023 l
-3496 4025 l
-3368 4025 l
-3369 4025 m
-3496 4025 l
-3496 4026 l
-3369 4026 l
-3369 4026 m
-3497 4026 l
-3497 4029 l
-3369 4029 l
-3370 4029 m
-3497 4029 l
-3497 4030 l
-3370 4030 l
-3370 4030 m
-3498 4030 l
-3498 4032 l
-3370 4032 l
-3371 4032 m
-3498 4032 l
-3498 4033 l
-3371 4033 l
-3371 4033 m
-3499 4033 l
-3499 4035 l
-3371 4035 l
-3372 4035 m
-3499 4035 l
-3499 4037 l
-3372 4037 l
-3372 4037 m
-3500 4037 l
-3500 4039 l
-3372 4039 l
-3373 4039 m
-3500 4039 l
-3500 4040 l
-3373 4040 l
-3373 4040 m
-3501 4040 l
-3501 4042 l
-3373 4042 l
-3374 4042 m
-3501 4042 l
-3501 4043 l
-3374 4043 l
-3374 4043 m
-3502 4043 l
-3502 4045 l
-3374 4045 l
-3375 4045 m
-3502 4045 l
-3502 4047 l
-3375 4047 l
-3375 4047 m
-3503 4047 l
-3503 4049 l
-3375 4049 l
-3376 4049 m
-3503 4049 l
-3503 4050 l
-3376 4050 l
-3376 4050 m
-3504 4050 l
-3504 4052 l
-3376 4052 l
-3377 4052 m
-3504 4052 l
-3504 4053 l
-3377 4053 l
-3377 4053 m
-3505 4053 l
-3505 4055 l
-3377 4055 l
-3378 4055 m
-3505 4055 l
-3505 4057 l
-3378 4057 l
-3378 4057 m
-3506 4057 l
-3506 4059 l
-3378 4059 l
-3379 4059 m
-3506 4059 l
-3506 4060 l
-3379 4060 l
-3379 4060 m
-3507 4060 l
-3507 4062 l
-3379 4062 l
-3380 4062 m
-3507 4062 l
-3507 4063 l
-3380 4063 l
-3380 4063 m
-3508 4063 l
-3508 4066 l
-3380 4066 l
-3381 4066 m
-3508 4066 l
-3508 4067 l
-3381 4067 l
-3381 4067 m
-3509 4067 l
-3509 4069 l
-3381 4069 l
-3382 4069 m
-3509 4069 l
-3509 4070 l
-3382 4070 l
-3382 4070 m
-3510 4070 l
-3510 4072 l
-3382 4072 l
-3383 4072 m
-3510 4072 l
-3510 4073 l
-3383 4073 l
-3383 4073 m
-3511 4073 l
-3511 4076 l
-3383 4076 l
-3384 4076 m
-3511 4076 l
-3511 4077 l
-3384 4077 l
-3384 4077 m
-3512 4077 l
-3512 4079 l
-3384 4079 l
-3385 4079 m
-3512 4079 l
-3512 4080 l
-3385 4080 l
-3385 4080 m
-3513 4080 l
-3513 4082 l
-3385 4082 l
-3386 4082 m
-3513 4082 l
-3513 4083 l
-3386 4083 l
-3386 4083 m
-3514 4083 l
-3514 4086 l
-3386 4086 l
-3387 4086 m
-3514 4086 l
-3514 4087 l
-3387 4087 l
-3387 4087 m
-3515 4087 l
-3515 4089 l
-3387 4089 l
-3388 4089 m
-3515 4089 l
-3515 4090 l
-3388 4090 l
-3388 4090 m
-3516 4090 l
-3516 4092 l
-3388 4092 l
-3389 4092 m
-3516 4092 l
-3516 4093 l
-3389 4093 l
-3389 4093 m
-3517 4093 l
-3517 4094 l
-3389 4094 l
-3389 4094 m
-3516 4094 l
-3516 4095 l
-3389 4095 l
-3389 4095 m
-3513 4095 l
-3513 4096 l
-3389 4096 l
-3390 4096 m
-3510 4096 l
-3510 4097 l
-3390 4097 l
-3390 4097 m
-3507 4097 l
-3507 4098 l
-3390 4098 l
-3390 4098 m
-3503 4098 l
-3503 4099 l
-3390 4099 l
-3391 4099 m
-3500 4099 l
-3500 4100 l
-3391 4100 l
-3391 4100 m
-3497 4100 l
-3497 4101 l
-3391 4101 l
-3391 4101 m
-3493 4101 l
-3493 4102 l
-3391 4102 l
-3391 4102 m
-3490 4102 l
-3490 4103 l
-3391 4103 l
-3392 4103 m
-3487 4103 l
-3487 4104 l
-3392 4104 l
-3392 4104 m
-3483 4104 l
-3483 4105 l
-3392 4105 l
-3392 4105 m
-3480 4105 l
-3480 4106 l
-3392 4106 l
-3393 4106 m
-3477 4106 l
-3477 4107 l
-3393 4107 l
-3393 4107 m
-3473 4107 l
-3473 4108 l
-3393 4108 l
-3393 4108 m
-3470 4108 l
-3470 4109 l
-3393 4109 l
-3394 4109 m
-3467 4109 l
-3467 4110 l
-3394 4110 l
-3394 4110 m
-3463 4110 l
-3463 4111 l
-3394 4111 l
-3394 4111 m
-3460 4111 l
-3460 4112 l
-3394 4112 l
-3394 4112 m
-3457 4112 l
-3457 4113 l
-3394 4113 l
-3395 4113 m
-3454 4113 l
-3454 4114 l
-3395 4114 l
-3395 4114 m
-3450 4114 l
-3450 4115 l
-3395 4115 l
-3395 4115 m
-3447 4115 l
-3447 4116 l
-3395 4116 l
-3396 4116 m
-3444 4116 l
-3444 4117 l
-3396 4117 l
-3396 4117 m
-3440 4117 l
-3440 4118 l
-3396 4118 l
-3396 4118 m
-3437 4118 l
-3437 4119 l
-3396 4119 l
-3397 4119 m
-3434 4119 l
-3434 4120 l
-3397 4120 l
-3397 4120 m
-3430 4120 l
-3430 4121 l
-3397 4121 l
-3397 4121 m
-3427 4121 l
-3427 4122 l
-3397 4122 l
-3397 4122 m
-3424 4122 l
-3424 4123 l
-3397 4123 l
-3398 4123 m
-3420 4123 l
-3420 4124 l
-3398 4124 l
-3398 4124 m
-3417 4124 l
-3417 4125 l
-3398 4125 l
-3398 4125 m
-3414 4125 l
-3414 4126 l
-3398 4126 l
-3399 4126 m
-3410 4126 l
-3410 4127 l
-3399 4127 l
-3399 4127 m
-3407 4127 l
-3407 4128 l
-3399 4128 l
-3399 4128 m
-3404 4128 l
-3404 4129 l
-3399 4129 l
-Y
-3433.7 3818.2 m
-3318 3853 l
-3400 4129 l
-3516 4094 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-3388 3854 m
-3409 3926 l
-S
-3372 3976 m
-3385 4020 l
-3410 3987 l
-3414 3999 l
-3420 4005 l
-3425 4008 l
-3438 4009 l
-3446 4006 l
-3457 3999 l
-3463 3988 l
-3463 3975 l
-3460 3963 l
-3452 3952 l
-3447 3949 l
-3438 3948 l
-S
-3401 4072 m
-3401 4059 l
-3411 4047 l
-3430 4037 l
-3442 4034 l
-3463 4032 l
-3477 4036 l
-3485 4047 l
-3487 4055 l
-3487 4068 l
-3477 4080 l
-3458 4090 l
-3446 4093 l
-3425 4095 l
-3411 4091 l
-3403 4080 l
-3401 4072 l
-S
-1 g
-3282 4627 m
-3285 4627 l
-3285 4628 l
-3282 4628 l
-3281 4628 m
-3286 4628 l
-3286 4629 l
-3281 4629 l
-3280 4629 m
-3287 4629 l
-3287 4630 l
-3280 4630 l
-3279 4630 m
-3288 4630 l
-3288 4631 l
-3279 4631 l
-3278 4631 m
-3290 4631 l
-3290 4632 l
-3278 4632 l
-3277 4632 m
-3291 4632 l
-3291 4633 l
-3277 4633 l
-3277 4633 m
-3292 4633 l
-3292 4634 l
-3277 4634 l
-3276 4634 m
-3293 4634 l
-3293 4635 l
-3276 4635 l
-3275 4635 m
-3294 4635 l
-3294 4636 l
-3275 4636 l
-3274 4636 m
-3296 4636 l
-3296 4637 l
-3274 4637 l
-3273 4637 m
-3297 4637 l
-3297 4638 l
-3273 4638 l
-3272 4638 m
-3298 4638 l
-3298 4639 l
-3272 4639 l
-3272 4639 m
-3299 4639 l
-3299 4640 l
-3272 4640 l
-3271 4640 m
-3300 4640 l
-3300 4641 l
-3271 4641 l
-3270 4641 m
-3302 4641 l
-3302 4642 l
-3270 4642 l
-3269 4642 m
-3303 4642 l
-3303 4643 l
-3269 4643 l
-3268 4643 m
-3304 4643 l
-3304 4644 l
-3268 4644 l
-3267 4644 m
-3305 4644 l
-3305 4645 l
-3267 4645 l
-3267 4645 m
-3306 4645 l
-3306 4646 l
-3267 4646 l
-3266 4646 m
-3308 4646 l
-3308 4647 l
-3266 4647 l
-3265 4647 m
-3309 4647 l
-3309 4648 l
-3265 4648 l
-3264 4648 m
-3310 4648 l
-3310 4649 l
-3264 4649 l
-3263 4649 m
-3311 4649 l
-3311 4650 l
-3263 4650 l
-3262 4650 m
-3312 4650 l
-3312 4651 l
-3262 4651 l
-3262 4651 m
-3314 4651 l
-3314 4652 l
-3262 4652 l
-3261 4652 m
-3315 4652 l
-3315 4653 l
-3261 4653 l
-3260 4653 m
-3316 4653 l
-3316 4654 l
-3260 4654 l
-3259 4654 m
-3317 4654 l
-3317 4655 l
-3259 4655 l
-3258 4655 m
-3318 4655 l
-3318 4656 l
-3258 4656 l
-3257 4656 m
-3320 4656 l
-3320 4657 l
-3257 4657 l
-3257 4657 m
-3321 4657 l
-3321 4658 l
-3257 4658 l
-3256 4658 m
-3322 4658 l
-3322 4659 l
-3256 4659 l
-3255 4659 m
-3323 4659 l
-3323 4660 l
-3255 4660 l
-3254 4660 m
-3324 4660 l
-3324 4661 l
-3254 4661 l
-3253 4661 m
-3326 4661 l
-3326 4662 l
-3253 4662 l
-3252 4662 m
-3327 4662 l
-3327 4663 l
-3252 4663 l
-3252 4663 m
-3328 4663 l
-3328 4664 l
-3252 4664 l
-3251 4664 m
-3329 4664 l
-3329 4665 l
-3251 4665 l
-3250 4665 m
-3330 4665 l
-3330 4666 l
-3250 4666 l
-3249 4666 m
-3332 4666 l
-3332 4667 l
-3249 4667 l
-3248 4667 m
-3333 4667 l
-3333 4668 l
-3248 4668 l
-3247 4668 m
-3334 4668 l
-3334 4669 l
-3247 4669 l
-3247 4669 m
-3335 4669 l
-3335 4670 l
-3247 4670 l
-3246 4670 m
-3336 4670 l
-3336 4671 l
-3246 4671 l
-3245 4671 m
-3338 4671 l
-3338 4672 l
-3245 4672 l
-3244 4672 m
-3339 4672 l
-3339 4673 l
-3244 4673 l
-3243 4673 m
-3340 4673 l
-3340 4674 l
-3243 4674 l
-3242 4674 m
-3341 4674 l
-3341 4675 l
-3242 4675 l
-3241 4675 m
-3342 4675 l
-3342 4676 l
-3241 4676 l
-3241 4676 m
-3344 4676 l
-3344 4677 l
-3241 4677 l
-3240 4677 m
-3345 4677 l
-3345 4678 l
-3240 4678 l
-3239 4678 m
-3346 4678 l
-3346 4679 l
-3239 4679 l
-3238 4679 m
-3347 4679 l
-3347 4680 l
-3238 4680 l
-3237 4680 m
-3348 4680 l
-3348 4681 l
-3237 4681 l
-3236 4681 m
-3350 4681 l
-3350 4682 l
-3236 4682 l
-3236 4682 m
-3351 4682 l
-3351 4683 l
-3236 4683 l
-3235 4683 m
-3352 4683 l
-3352 4684 l
-3235 4684 l
-3234 4684 m
-3353 4684 l
-3353 4685 l
-3234 4685 l
-3233 4685 m
-3354 4685 l
-3354 4686 l
-3233 4686 l
-3232 4686 m
-3356 4686 l
-3356 4687 l
-3232 4687 l
-3231 4687 m
-3357 4687 l
-3357 4688 l
-3231 4688 l
-3231 4688 m
-3358 4688 l
-3358 4689 l
-3231 4689 l
-3230 4689 m
-3359 4689 l
-3359 4690 l
-3230 4690 l
-3229 4690 m
-3360 4690 l
-3360 4691 l
-3229 4691 l
-3228 4691 m
-3362 4691 l
-3362 4692 l
-3228 4692 l
-3227 4692 m
-3363 4692 l
-3363 4693 l
-3227 4693 l
-3226 4693 m
-3364 4693 l
-3364 4694 l
-3226 4694 l
-3226 4694 m
-3365 4694 l
-3365 4695 l
-3226 4695 l
-3225 4695 m
-3366 4695 l
-3366 4696 l
-3225 4696 l
-3224 4696 m
-3368 4696 l
-3368 4697 l
-3224 4697 l
-3223 4697 m
-3369 4697 l
-3369 4698 l
-3223 4698 l
-3222 4698 m
-3370 4698 l
-3370 4699 l
-3222 4699 l
-3221 4699 m
-3371 4699 l
-3371 4700 l
-3221 4700 l
-3221 4700 m
-3372 4700 l
-3372 4701 l
-3221 4701 l
-3220 4701 m
-3374 4701 l
-3374 4702 l
-3220 4702 l
-3219 4702 m
-3375 4702 l
-3375 4703 l
-3219 4703 l
-3218 4703 m
-3376 4703 l
-3376 4704 l
-3218 4704 l
-3217 4704 m
-3376 4704 l
-3376 4705 l
-3217 4705 l
-3216 4705 m
-3376 4705 l
-3376 4706 l
-3216 4706 l
-3216 4706 m
-3375 4706 l
-3375 4707 l
-3216 4707 l
-3215 4707 m
-3374 4707 l
-3374 4708 l
-3215 4708 l
-3214 4708 m
-3373 4708 l
-3373 4709 l
-3214 4709 l
-3213 4709 m
-3372 4709 l
-3372 4710 l
-3213 4710 l
-3212 4710 m
-3372 4710 l
-3372 4711 l
-3212 4711 l
-3211 4711 m
-3371 4711 l
-3371 4712 l
-3211 4712 l
-3211 4712 m
-3370 4712 l
-3370 4713 l
-3211 4713 l
-3210 4713 m
-3369 4713 l
-3369 4714 l
-3210 4714 l
-3209 4714 m
-3368 4714 l
-3368 4715 l
-3209 4715 l
-3208 4715 m
-3367 4715 l
-3367 4716 l
-3208 4716 l
-3207 4716 m
-3367 4716 l
-3367 4717 l
-3207 4717 l
-3206 4717 m
-3366 4717 l
-3366 4718 l
-3206 4718 l
-3206 4718 m
-3365 4718 l
-3365 4719 l
-3206 4719 l
-3205 4719 m
-3364 4719 l
-3364 4720 l
-3205 4720 l
-3204 4720 m
-3363 4720 l
-3363 4721 l
-3204 4721 l
-3203 4721 m
-3362 4721 l
-3362 4722 l
-3203 4722 l
-3202 4722 m
-3362 4722 l
-3362 4723 l
-3202 4723 l
-3201 4723 m
-3361 4723 l
-3361 4724 l
-3201 4724 l
-3200 4724 m
-3360 4724 l
-3360 4725 l
-3200 4725 l
-3200 4725 m
-3359 4725 l
-3359 4726 l
-3200 4726 l
-3199 4726 m
-3358 4726 l
-3358 4727 l
-3199 4727 l
-3198 4727 m
-3358 4727 l
-3358 4728 l
-3198 4728 l
-3197 4728 m
-3357 4728 l
-3357 4729 l
-3197 4729 l
-3196 4729 m
-3356 4729 l
-3356 4730 l
-3196 4730 l
-3195 4730 m
-3355 4730 l
-3355 4731 l
-3195 4731 l
-3195 4731 m
-3354 4731 l
-3354 4732 l
-3195 4732 l
-3194 4732 m
-3353 4732 l
-3353 4733 l
-3194 4733 l
-3193 4733 m
-3353 4733 l
-3353 4734 l
-3193 4734 l
-3192 4734 m
-3352 4734 l
-3352 4735 l
-3192 4735 l
-3191 4735 m
-3351 4735 l
-3351 4736 l
-3191 4736 l
-3190 4736 m
-3350 4736 l
-3350 4737 l
-3190 4737 l
-3190 4737 m
-3349 4737 l
-3349 4738 l
-3190 4738 l
-3189 4738 m
-3348 4738 l
-3348 4739 l
-3189 4739 l
-3188 4739 m
-3348 4739 l
-3348 4740 l
-3188 4740 l
-3187 4740 m
-3347 4740 l
-3347 4741 l
-3187 4741 l
-3186 4741 m
-3346 4741 l
-3346 4742 l
-3186 4742 l
-3185 4742 m
-3345 4742 l
-3345 4743 l
-3185 4743 l
-3185 4743 m
-3344 4743 l
-3344 4744 l
-3185 4744 l
-3184 4744 m
-3344 4744 l
-3344 4745 l
-3184 4745 l
-3183 4745 m
-3343 4745 l
-3343 4746 l
-3183 4746 l
-3182 4746 m
-3342 4746 l
-3342 4747 l
-3182 4747 l
-3181 4747 m
-3341 4747 l
-3341 4748 l
-3181 4748 l
-3180 4748 m
-3340 4748 l
-3340 4749 l
-3180 4749 l
-3180 4749 m
-3339 4749 l
-3339 4750 l
-3180 4750 l
-3179 4750 m
-3339 4750 l
-3339 4751 l
-3179 4751 l
-3178 4751 m
-3338 4751 l
-3338 4752 l
-3178 4752 l
-3177 4752 m
-3337 4752 l
-3337 4753 l
-3177 4753 l
-3176 4753 m
-3336 4753 l
-3336 4754 l
-3176 4754 l
-3175 4754 m
-3335 4754 l
-3335 4755 l
-3175 4755 l
-3175 4755 m
-3334 4755 l
-3334 4756 l
-3175 4756 l
-3174 4756 m
-3334 4756 l
-3334 4757 l
-3174 4757 l
-3173 4757 m
-3333 4757 l
-3333 4758 l
-3173 4758 l
-3172 4758 m
-3332 4758 l
-3332 4759 l
-3172 4759 l
-3171 4759 m
-3331 4759 l
-3331 4760 l
-3171 4760 l
-3170 4760 m
-3330 4760 l
-3330 4762 l
-3170 4762 l
-3169 4762 m
-3329 4762 l
-3329 4763 l
-3169 4763 l
-3168 4763 m
-3328 4763 l
-3328 4764 l
-3168 4764 l
-3167 4764 m
-3327 4764 l
-3327 4765 l
-3167 4765 l
-3166 4765 m
-3326 4765 l
-3326 4766 l
-3166 4766 l
-3165 4766 m
-3325 4766 l
-3325 4767 l
-3165 4767 l
-3165 4767 m
-3325 4767 l
-3325 4768 l
-3165 4768 l
-3165 4768 m
-3324 4768 l
-3324 4769 l
-3165 4769 l
-3166 4769 m
-3323 4769 l
-3323 4770 l
-3166 4770 l
-3167 4770 m
-3322 4770 l
-3322 4771 l
-3167 4771 l
-3168 4771 m
-3321 4771 l
-3321 4772 l
-3168 4772 l
-3169 4772 m
-3320 4772 l
-3320 4773 l
-3169 4773 l
-3171 4773 m
-3320 4773 l
-3320 4774 l
-3171 4774 l
-3172 4774 m
-3319 4774 l
-3319 4775 l
-3172 4775 l
-3173 4775 m
-3318 4775 l
-3318 4776 l
-3173 4776 l
-3174 4776 m
-3317 4776 l
-3317 4777 l
-3174 4777 l
-3175 4777 m
-3316 4777 l
-3316 4778 l
-3175 4778 l
-3177 4778 m
-3316 4778 l
-3316 4779 l
-3177 4779 l
-3178 4779 m
-3315 4779 l
-3315 4780 l
-3178 4780 l
-3179 4780 m
-3314 4780 l
-3314 4781 l
-3179 4781 l
-3180 4781 m
-3313 4781 l
-3313 4782 l
-3180 4782 l
-3181 4782 m
-3312 4782 l
-3312 4783 l
-3181 4783 l
-3183 4783 m
-3311 4783 l
-3311 4784 l
-3183 4784 l
-3184 4784 m
-3311 4784 l
-3311 4785 l
-3184 4785 l
-3185 4785 m
-3310 4785 l
-3310 4786 l
-3185 4786 l
-3186 4786 m
-3309 4786 l
-3309 4787 l
-3186 4787 l
-3187 4787 m
-3308 4787 l
-3308 4788 l
-3187 4788 l
-3189 4788 m
-3307 4788 l
-3307 4789 l
-3189 4789 l
-3190 4789 m
-3306 4789 l
-3306 4790 l
-3190 4790 l
-3191 4790 m
-3306 4790 l
-3306 4791 l
-3191 4791 l
-3192 4791 m
-3305 4791 l
-3305 4792 l
-3192 4792 l
-3193 4792 m
-3304 4792 l
-3304 4793 l
-3193 4793 l
-3195 4793 m
-3303 4793 l
-3303 4794 l
-3195 4794 l
-3196 4794 m
-3302 4794 l
-3302 4795 l
-3196 4795 l
-3197 4795 m
-3302 4795 l
-3302 4796 l
-3197 4796 l
-3198 4796 m
-3301 4796 l
-3301 4797 l
-3198 4797 l
-3199 4797 m
-3300 4797 l
-3300 4798 l
-3199 4798 l
-3201 4798 m
-3299 4798 l
-3299 4799 l
-3201 4799 l
-3202 4799 m
-3298 4799 l
-3298 4800 l
-3202 4800 l
-3203 4800 m
-3297 4800 l
-3297 4801 l
-3203 4801 l
-3204 4801 m
-3297 4801 l
-3297 4802 l
-3204 4802 l
-3205 4802 m
-3296 4802 l
-3296 4803 l
-3205 4803 l
-3207 4803 m
-3295 4803 l
-3295 4804 l
-3207 4804 l
-3208 4804 m
-3294 4804 l
-3294 4805 l
-3208 4805 l
-3209 4805 m
-3293 4805 l
-3293 4806 l
-3209 4806 l
-3210 4806 m
-3292 4806 l
-3292 4807 l
-3210 4807 l
-3212 4807 m
-3292 4807 l
-3292 4808 l
-3212 4808 l
-3213 4808 m
-3291 4808 l
-3291 4809 l
-3213 4809 l
-3214 4809 m
-3290 4809 l
-3290 4810 l
-3214 4810 l
-3215 4810 m
-3289 4810 l
-3289 4811 l
-3215 4811 l
-3216 4811 m
-3288 4811 l
-3288 4812 l
-3216 4812 l
-3218 4812 m
-3288 4812 l
-3288 4813 l
-3218 4813 l
-3219 4813 m
-3287 4813 l
-3287 4814 l
-3219 4814 l
-3220 4814 m
-3286 4814 l
-3286 4815 l
-3220 4815 l
-3221 4815 m
-3285 4815 l
-3285 4816 l
-3221 4816 l
-3222 4816 m
-3284 4816 l
-3284 4817 l
-3222 4817 l
-3224 4817 m
-3283 4817 l
-3283 4818 l
-3224 4818 l
-3225 4818 m
-3283 4818 l
-3283 4819 l
-3225 4819 l
-3226 4819 m
-3282 4819 l
-3282 4820 l
-3226 4820 l
-3227 4820 m
-3281 4820 l
-3281 4821 l
-3227 4821 l
-3228 4821 m
-3280 4821 l
-3280 4822 l
-3228 4822 l
-3230 4822 m
-3279 4822 l
-3279 4823 l
-3230 4823 l
-3231 4823 m
-3278 4823 l
-3278 4824 l
-3231 4824 l
-3232 4824 m
-3278 4824 l
-3278 4825 l
-3232 4825 l
-3233 4825 m
-3277 4825 l
-3277 4826 l
-3233 4826 l
-3234 4826 m
-3276 4826 l
-3276 4827 l
-3234 4827 l
-3236 4827 m
-3275 4827 l
-3275 4828 l
-3236 4828 l
-3237 4828 m
-3274 4828 l
-3274 4829 l
-3237 4829 l
-3238 4829 m
-3274 4829 l
-3274 4830 l
-3238 4830 l
-3239 4830 m
-3273 4830 l
-3273 4831 l
-3239 4831 l
-3240 4831 m
-3272 4831 l
-3272 4832 l
-3240 4832 l
-3242 4832 m
-3271 4832 l
-3271 4833 l
-3242 4833 l
-3243 4833 m
-3270 4833 l
-3270 4834 l
-3243 4834 l
-3244 4834 m
-3269 4834 l
-3269 4835 l
-3244 4835 l
-3245 4835 m
-3269 4835 l
-3269 4836 l
-3245 4836 l
-3246 4836 m
-3268 4836 l
-3268 4837 l
-3246 4837 l
-3248 4837 m
-3267 4837 l
-3267 4838 l
-3248 4838 l
-3249 4838 m
-3266 4838 l
-3266 4839 l
-3249 4839 l
-3250 4839 m
-3265 4839 l
-3265 4840 l
-3250 4840 l
-3251 4840 m
-3264 4840 l
-3264 4841 l
-3251 4841 l
-3252 4841 m
-3264 4841 l
-3264 4842 l
-3252 4842 l
-3254 4842 m
-3263 4842 l
-3263 4843 l
-3254 4843 l
-3255 4843 m
-3262 4843 l
-3262 4844 l
-3255 4844 l
-3256 4844 m
-3261 4844 l
-3261 4845 l
-3256 4845 l
-3257 4845 m
-3260 4845 l
-3260 4846 l
-3257 4846 l
-Y
-3375.8 4704.2 m
-3283 4627 l
-3165 4768 l
-3259 4846 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-3277 4660 m
-3247 4695 l
-3289 4698 l
-3281 4707 l
-3279 4716 l
-3280 4722 l
-3287 4733 l
-3293 4739 l
-3305 4743 l
-3317 4742 l
-3328 4735 l
-3336 4726 l
-3341 4713 l
-3341 4708 l
-3337 4699 l
-S
-3213 4737 m
-3224 4730 l
-3239 4732 l
-3258 4742 l
-3267 4750 l
-3281 4767 l
-3285 4781 l
-3280 4793 l
-3275 4800 l
-3264 4807 l
-3249 4805 l
-3230 4795 l
-3220 4787 l
-3207 4770 l
-3203 4756 l
-3207 4744 l
-3213 4737 l
-S
-1 g
-2920 4919 m
-2925 4919 l
-2925 4920 l
-2920 4920 l
-2916 4920 m
-2925 4920 l
-2925 4921 l
-2916 4921 l
-2913 4921 m
-2925 4921 l
-2925 4922 l
-2913 4922 l
-2909 4922 m
-2926 4922 l
-2926 4923 l
-2909 4923 l
-2906 4923 m
-2926 4923 l
-2926 4924 l
-2906 4924 l
-2902 4924 m
-2926 4924 l
-2926 4925 l
-2902 4925 l
-2899 4925 m
-2927 4925 l
-2927 4926 l
-2899 4926 l
-2895 4926 m
-2927 4926 l
-2927 4927 l
-2895 4927 l
-2892 4927 m
-2927 4927 l
-2927 4928 l
-2892 4928 l
-2888 4928 m
-2927 4928 l
-2927 4929 l
-2888 4929 l
-2885 4929 m
-2928 4929 l
-2928 4930 l
-2885 4930 l
-2881 4930 m
-2928 4930 l
-2928 4931 l
-2881 4931 l
-2878 4931 m
-2928 4931 l
-2928 4932 l
-2878 4932 l
-2874 4932 m
-2929 4932 l
-2929 4933 l
-2874 4933 l
-2871 4933 m
-2929 4933 l
-2929 4934 l
-2871 4934 l
-2867 4934 m
-2929 4934 l
-2929 4935 l
-2867 4935 l
-2864 4935 m
-2929 4935 l
-2929 4936 l
-2864 4936 l
-2860 4936 m
-2930 4936 l
-2930 4937 l
-2860 4937 l
-2857 4937 m
-2930 4937 l
-2930 4938 l
-2857 4938 l
-2853 4938 m
-2930 4938 l
-2930 4939 l
-2853 4939 l
-2850 4939 m
-2931 4939 l
-2931 4940 l
-2850 4940 l
-2846 4940 m
-2931 4940 l
-2931 4941 l
-2846 4941 l
-2843 4941 m
-2931 4941 l
-2931 4942 l
-2843 4942 l
-2839 4942 m
-2931 4942 l
-2931 4943 l
-2839 4943 l
-2836 4943 m
-2932 4943 l
-2932 4944 l
-2836 4944 l
-2832 4944 m
-2932 4944 l
-2932 4945 l
-2832 4945 l
-2829 4945 m
-2932 4945 l
-2932 4946 l
-2829 4946 l
-2825 4946 m
-2933 4946 l
-2933 4947 l
-2825 4947 l
-2822 4947 m
-2933 4947 l
-2933 4948 l
-2822 4948 l
-2818 4948 m
-2933 4948 l
-2933 4949 l
-2818 4949 l
-2815 4949 m
-2933 4949 l
-2933 4950 l
-2815 4950 l
-2811 4950 m
-2934 4950 l
-2934 4951 l
-2811 4951 l
-2808 4951 m
-2934 4951 l
-2934 4952 l
-2808 4952 l
-2804 4952 m
-2934 4952 l
-2934 4953 l
-2804 4953 l
-2801 4953 m
-2935 4953 l
-2935 4954 l
-2801 4954 l
-2797 4954 m
-2935 4954 l
-2935 4955 l
-2797 4955 l
-2794 4955 m
-2935 4955 l
-2935 4956 l
-2794 4956 l
-2790 4956 m
-2935 4956 l
-2935 4957 l
-2790 4957 l
-2787 4957 m
-2936 4957 l
-2936 4958 l
-2787 4958 l
-2783 4958 m
-2936 4958 l
-2936 4959 l
-2783 4959 l
-2780 4959 m
-2936 4959 l
-2936 4960 l
-2780 4960 l
-2776 4960 m
-2937 4960 l
-2937 4961 l
-2776 4961 l
-2773 4961 m
-2937 4961 l
-2937 4962 l
-2773 4962 l
-2769 4962 m
-2937 4962 l
-2937 4963 l
-2769 4963 l
-2766 4963 m
-2937 4963 l
-2937 4964 l
-2766 4964 l
-2762 4964 m
-2938 4964 l
-2938 4965 l
-2762 4965 l
-2759 4965 m
-2938 4965 l
-2938 4966 l
-2759 4966 l
-2755 4966 m
-2938 4966 l
-2938 4967 l
-2755 4967 l
-2752 4967 m
-2939 4967 l
-2939 4968 l
-2752 4968 l
-2752 4968 m
-2939 4968 l
-2939 4971 l
-2752 4971 l
-2752 4971 m
-2940 4971 l
-2940 4972 l
-2752 4972 l
-2753 4972 m
-2940 4972 l
-2940 4974 l
-2753 4974 l
-2753 4974 m
-2941 4974 l
-2941 4976 l
-2753 4976 l
-2754 4976 m
-2941 4976 l
-2941 4978 l
-2754 4978 l
-2754 4978 m
-2942 4978 l
-2942 4979 l
-2754 4979 l
-2755 4979 m
-2942 4979 l
-2942 4981 l
-2755 4981 l
-2755 4981 m
-2943 4981 l
-2943 4983 l
-2755 4983 l
-2756 4983 m
-2943 4983 l
-2943 4985 l
-2756 4985 l
-2756 4985 m
-2944 4985 l
-2944 4986 l
-2756 4986 l
-2757 4986 m
-2944 4986 l
-2944 4988 l
-2757 4988 l
-2757 4988 m
-2945 4988 l
-2945 4990 l
-2757 4990 l
-2758 4990 m
-2945 4990 l
-2945 4992 l
-2758 4992 l
-2758 4992 m
-2946 4992 l
-2946 4993 l
-2758 4993 l
-2759 4993 m
-2946 4993 l
-2946 4995 l
-2759 4995 l
-2759 4995 m
-2947 4995 l
-2947 4997 l
-2759 4997 l
-2760 4997 m
-2947 4997 l
-2947 4999 l
-2760 4999 l
-2760 4999 m
-2948 4999 l
-2948 5000 l
-2760 5000 l
-2761 5000 m
-2948 5000 l
-2948 5002 l
-2761 5002 l
-2761 5002 m
-2949 5002 l
-2949 5004 l
-2761 5004 l
-2762 5004 m
-2949 5004 l
-2949 5006 l
-2762 5006 l
-2762 5006 m
-2950 5006 l
-2950 5007 l
-2762 5007 l
-2763 5007 m
-2950 5007 l
-2950 5009 l
-2763 5009 l
-2763 5009 m
-2951 5009 l
-2951 5011 l
-2763 5011 l
-2764 5011 m
-2951 5011 l
-2951 5013 l
-2764 5013 l
-2764 5013 m
-2952 5013 l
-2952 5015 l
-2764 5015 l
-2765 5015 m
-2952 5015 l
-2952 5016 l
-2765 5016 l
-2765 5016 m
-2953 5016 l
-2953 5018 l
-2765 5018 l
-2766 5018 m
-2953 5018 l
-2953 5020 l
-2766 5020 l
-2766 5020 m
-2954 5020 l
-2954 5022 l
-2766 5022 l
-2767 5022 m
-2954 5022 l
-2954 5023 l
-2767 5023 l
-2767 5023 m
-2955 5023 l
-2955 5025 l
-2767 5025 l
-2768 5025 m
-2955 5025 l
-2955 5026 l
-2768 5026 l
-2768 5026 m
-2956 5026 l
-2956 5029 l
-2768 5029 l
-2769 5029 m
-2956 5029 l
-2956 5030 l
-2769 5030 l
-2769 5030 m
-2957 5030 l
-2957 5032 l
-2769 5032 l
-2770 5032 m
-2957 5032 l
-2957 5033 l
-2770 5033 l
-2770 5033 m
-2958 5033 l
-2958 5035 l
-2770 5035 l
-2770 5035 m
-2958 5035 l
-2958 5036 l
-2770 5036 l
-2771 5036 m
-2957 5036 l
-2957 5037 l
-2771 5037 l
-2771 5037 m
-2953 5037 l
-2953 5038 l
-2771 5038 l
-2771 5038 m
-2950 5038 l
-2950 5039 l
-2771 5039 l
-2772 5039 m
-2946 5039 l
-2946 5040 l
-2772 5040 l
-2772 5040 m
-2943 5040 l
-2943 5041 l
-2772 5041 l
-2772 5041 m
-2939 5041 l
-2939 5042 l
-2772 5042 l
-2772 5042 m
-2936 5042 l
-2936 5043 l
-2772 5043 l
-2773 5043 m
-2932 5043 l
-2932 5044 l
-2773 5044 l
-2773 5044 m
-2929 5044 l
-2929 5045 l
-2773 5045 l
-2773 5045 m
-2925 5045 l
-2925 5046 l
-2773 5046 l
-2774 5046 m
-2922 5046 l
-2922 5047 l
-2774 5047 l
-2774 5047 m
-2918 5047 l
-2918 5048 l
-2774 5048 l
-2774 5048 m
-2915 5048 l
-2915 5049 l
-2774 5049 l
-2774 5049 m
-2911 5049 l
-2911 5050 l
-2774 5050 l
-2775 5050 m
-2908 5050 l
-2908 5051 l
-2775 5051 l
-2775 5051 m
-2904 5051 l
-2904 5052 l
-2775 5052 l
-2775 5052 m
-2901 5052 l
-2901 5053 l
-2775 5053 l
-2775 5053 m
-2897 5053 l
-2897 5054 l
-2775 5054 l
-2776 5054 m
-2894 5054 l
-2894 5055 l
-2776 5055 l
-2776 5055 m
-2890 5055 l
-2890 5056 l
-2776 5056 l
-2776 5056 m
-2887 5056 l
-2887 5057 l
-2776 5057 l
-2777 5057 m
-2883 5057 l
-2883 5058 l
-2777 5058 l
-2777 5058 m
-2880 5058 l
-2880 5059 l
-2777 5059 l
-2777 5059 m
-2876 5059 l
-2876 5060 l
-2777 5060 l
-2777 5060 m
-2873 5060 l
-2873 5061 l
-2777 5061 l
-2778 5061 m
-2869 5061 l
-2869 5062 l
-2778 5062 l
-2778 5062 m
-2866 5062 l
-2866 5063 l
-2778 5063 l
-2778 5063 m
-2862 5063 l
-2862 5064 l
-2778 5064 l
-2779 5064 m
-2859 5064 l
-2859 5065 l
-2779 5065 l
-2779 5065 m
-2855 5065 l
-2855 5066 l
-2779 5066 l
-2779 5066 m
-2852 5066 l
-2852 5067 l
-2779 5067 l
-2779 5067 m
-2848 5067 l
-2848 5068 l
-2779 5068 l
-2780 5068 m
-2845 5068 l
-2845 5069 l
-2780 5069 l
-2780 5069 m
-2841 5069 l
-2841 5070 l
-2780 5070 l
-2780 5070 m
-2838 5070 l
-2838 5071 l
-2780 5071 l
-2781 5071 m
-2834 5071 l
-2834 5072 l
-2781 5072 l
-2781 5072 m
-2831 5072 l
-2831 5073 l
-2781 5073 l
-2781 5073 m
-2827 5073 l
-2827 5074 l
-2781 5074 l
-2781 5074 m
-2824 5074 l
-2824 5075 l
-2781 5075 l
-2782 5075 m
-2820 5075 l
-2820 5076 l
-2782 5076 l
-2782 5076 m
-2817 5076 l
-2817 5077 l
-2782 5077 l
-2782 5077 m
-2813 5077 l
-2813 5078 l
-2782 5078 l
-2783 5078 m
-2810 5078 l
-2810 5079 l
-2783 5079 l
-2783 5079 m
-2806 5079 l
-2806 5080 l
-2783 5080 l
-2783 5080 m
-2803 5080 l
-2803 5081 l
-2783 5081 l
-2783 5081 m
-2799 5081 l
-2799 5082 l
-2783 5082 l
-2784 5082 m
-2796 5082 l
-2796 5083 l
-2784 5083 l
-2784 5083 m
-2792 5083 l
-2792 5084 l
-2784 5084 l
-2784 5084 m
-2789 5084 l
-2789 5085 l
-2784 5085 l
-Y
-2957.5 5035.7 m
-2924 4919 l
-2752 4968 l
-2785 5085 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-2864 4967 m
-2866 4958 l
-2877 4950 l
-2885 4948 l
-2898 4948 l
-2909 4958 l
-2919 4977 l
-2925 4997 l
-2925 5014 l
-2920 5025 l
-2909 5032 l
-2905 5033 l
-2892 5033 l
-2881 5027 l
-2874 5016 l
-2873 5012 l
-2873 4999 l
-2879 4989 l
-2890 4981 l
-2894 4980 l
-2907 4981 l
-2917 4986 l
-2925 4997 l
-S
-2808 4970 m
-2822 4970 l
-2833 4980 l
-2843 4999 l
-2846 5011 l
-2848 5032 l
-2843 5046 l
-2832 5054 l
-2824 5056 l
-2811 5056 l
-2800 5046 l
-2790 5027 l
-2787 5015 l
-2785 4994 l
-2789 4979 l
-2800 4972 l
-2808 4970 l
-S
-1 g
-2198 4859 m
-2203 4859 l
-2203 4860 l
-2198 4860 l
-2198 4860 m
-2205 4860 l
-2205 4861 l
-2198 4861 l
-2197 4861 m
-2208 4861 l
-2208 4862 l
-2197 4862 l
-2197 4862 m
-2210 4862 l
-2210 4863 l
-2197 4863 l
-2196 4863 m
-2213 4863 l
-2213 4864 l
-2196 4864 l
-2196 4864 m
-2215 4864 l
-2215 4865 l
-2196 4865 l
-2196 4865 m
-2218 4865 l
-2218 4866 l
-2196 4866 l
-2195 4866 m
-2220 4866 l
-2220 4867 l
-2195 4867 l
-2195 4867 m
-2223 4867 l
-2223 4868 l
-2195 4868 l
-2194 4868 m
-2225 4868 l
-2225 4869 l
-2194 4869 l
-2194 4869 m
-2228 4869 l
-2228 4870 l
-2194 4870 l
-2194 4870 m
-2230 4870 l
-2230 4871 l
-2194 4871 l
-2193 4871 m
-2233 4871 l
-2233 4872 l
-2193 4872 l
-2193 4872 m
-2235 4872 l
-2235 4873 l
-2193 4873 l
-2192 4873 m
-2238 4873 l
-2238 4874 l
-2192 4874 l
-2192 4874 m
-2240 4874 l
-2240 4875 l
-2192 4875 l
-2192 4875 m
-2243 4875 l
-2243 4876 l
-2192 4876 l
-2191 4876 m
-2245 4876 l
-2245 4877 l
-2191 4877 l
-2191 4877 m
-2248 4877 l
-2248 4878 l
-2191 4878 l
-2190 4878 m
-2250 4878 l
-2250 4879 l
-2190 4879 l
-2190 4879 m
-2253 4879 l
-2253 4880 l
-2190 4880 l
-2190 4880 m
-2255 4880 l
-2255 4881 l
-2190 4881 l
-2189 4881 m
-2258 4881 l
-2258 4882 l
-2189 4882 l
-2189 4882 m
-2260 4882 l
-2260 4883 l
-2189 4883 l
-2188 4883 m
-2263 4883 l
-2263 4884 l
-2188 4884 l
-2188 4884 m
-2265 4884 l
-2265 4885 l
-2188 4885 l
-2188 4885 m
-2268 4885 l
-2268 4886 l
-2188 4886 l
-2187 4886 m
-2270 4886 l
-2270 4887 l
-2187 4887 l
-2187 4887 m
-2273 4887 l
-2273 4888 l
-2187 4888 l
-2186 4888 m
-2275 4888 l
-2275 4889 l
-2186 4889 l
-2186 4889 m
-2278 4889 l
-2278 4890 l
-2186 4890 l
-2186 4890 m
-2280 4890 l
-2280 4891 l
-2186 4891 l
-2185 4891 m
-2283 4891 l
-2283 4892 l
-2185 4892 l
-2185 4892 m
-2285 4892 l
-2285 4893 l
-2185 4893 l
-2184 4893 m
-2288 4893 l
-2288 4894 l
-2184 4894 l
-2184 4894 m
-2290 4894 l
-2290 4895 l
-2184 4895 l
-2184 4895 m
-2293 4895 l
-2293 4896 l
-2184 4896 l
-2183 4896 m
-2295 4896 l
-2295 4897 l
-2183 4897 l
-2183 4897 m
-2298 4897 l
-2298 4898 l
-2183 4898 l
-2182 4898 m
-2300 4898 l
-2300 4899 l
-2182 4899 l
-2182 4899 m
-2303 4899 l
-2303 4900 l
-2182 4900 l
-2182 4900 m
-2305 4900 l
-2305 4901 l
-2182 4901 l
-2181 4901 m
-2308 4901 l
-2308 4902 l
-2181 4902 l
-2181 4902 m
-2310 4902 l
-2310 4903 l
-2181 4903 l
-2180 4903 m
-2313 4903 l
-2313 4904 l
-2180 4904 l
-2180 4904 m
-2315 4904 l
-2315 4905 l
-2180 4905 l
-2180 4905 m
-2318 4905 l
-2318 4906 l
-2180 4906 l
-2179 4906 m
-2320 4906 l
-2320 4907 l
-2179 4907 l
-2179 4907 m
-2323 4907 l
-2323 4908 l
-2179 4908 l
-2178 4908 m
-2325 4908 l
-2325 4909 l
-2178 4909 l
-2178 4909 m
-2328 4909 l
-2328 4910 l
-2178 4910 l
-2178 4910 m
-2330 4910 l
-2330 4911 l
-2178 4911 l
-2177 4911 m
-2333 4911 l
-2333 4912 l
-2177 4912 l
-2177 4912 m
-2335 4912 l
-2335 4913 l
-2177 4913 l
-2176 4913 m
-2338 4913 l
-2338 4914 l
-2176 4914 l
-2176 4914 m
-2340 4914 l
-2340 4915 l
-2176 4915 l
-2176 4915 m
-2343 4915 l
-2343 4916 l
-2176 4916 l
-2175 4916 m
-2345 4916 l
-2345 4917 l
-2175 4917 l
-2175 4917 m
-2348 4917 l
-2348 4918 l
-2175 4918 l
-2174 4918 m
-2350 4918 l
-2350 4919 l
-2174 4919 l
-2174 4919 m
-2353 4919 l
-2353 4920 l
-2174 4920 l
-2174 4920 m
-2355 4920 l
-2355 4921 l
-2174 4921 l
-2173 4921 m
-2358 4921 l
-2358 4922 l
-2173 4922 l
-2173 4922 m
-2360 4922 l
-2360 4923 l
-2173 4923 l
-2172 4923 m
-2363 4923 l
-2363 4924 l
-2172 4924 l
-2172 4924 m
-2365 4924 l
-2365 4925 l
-2172 4925 l
-2172 4925 m
-2368 4925 l
-2368 4926 l
-2172 4926 l
-2171 4926 m
-2370 4926 l
-2370 4927 l
-2171 4927 l
-2171 4927 m
-2370 4927 l
-2370 4928 l
-2171 4928 l
-2170 4928 m
-2370 4928 l
-2370 4930 l
-2170 4930 l
-2170 4930 m
-2369 4930 l
-2369 4931 l
-2170 4931 l
-2169 4931 m
-2369 4931 l
-2369 4932 l
-2169 4932 l
-2169 4932 m
-2368 4932 l
-2368 4933 l
-2169 4933 l
-2168 4933 m
-2368 4933 l
-2368 4935 l
-2168 4935 l
-2168 4935 m
-2367 4935 l
-2367 4936 l
-2168 4936 l
-2167 4936 m
-2367 4936 l
-2367 4937 l
-2167 4937 l
-2167 4937 m
-2366 4937 l
-2366 4938 l
-2167 4938 l
-2166 4938 m
-2366 4938 l
-2366 4940 l
-2166 4940 l
-2166 4940 m
-2365 4940 l
-2365 4941 l
-2166 4941 l
-2165 4941 m
-2365 4941 l
-2365 4942 l
-2165 4942 l
-2165 4942 m
-2364 4942 l
-2364 4943 l
-2165 4943 l
-2164 4943 m
-2364 4943 l
-2364 4945 l
-2164 4945 l
-2164 4945 m
-2363 4945 l
-2363 4946 l
-2164 4946 l
-2163 4946 m
-2363 4946 l
-2363 4947 l
-2163 4947 l
-2163 4947 m
-2362 4947 l
-2362 4948 l
-2163 4948 l
-2162 4948 m
-2362 4948 l
-2362 4950 l
-2162 4950 l
-2162 4950 m
-2361 4950 l
-2361 4951 l
-2162 4951 l
-2161 4951 m
-2361 4951 l
-2361 4952 l
-2161 4952 l
-2161 4952 m
-2360 4952 l
-2360 4953 l
-2161 4953 l
-2160 4953 m
-2360 4953 l
-2360 4955 l
-2160 4955 l
-2160 4955 m
-2359 4955 l
-2359 4956 l
-2160 4956 l
-2159 4956 m
-2359 4956 l
-2359 4957 l
-2159 4957 l
-2159 4957 m
-2358 4957 l
-2358 4958 l
-2159 4958 l
-2158 4958 m
-2358 4958 l
-2358 4959 l
-2158 4959 l
-2158 4959 m
-2357 4959 l
-2357 4961 l
-2158 4961 l
-2157 4961 m
-2357 4961 l
-2357 4962 l
-2157 4962 l
-2157 4962 m
-2356 4962 l
-2356 4963 l
-2157 4963 l
-2156 4963 m
-2356 4963 l
-2356 4964 l
-2156 4964 l
-2156 4964 m
-2355 4964 l
-2355 4966 l
-2156 4966 l
-2155 4966 m
-2355 4966 l
-2355 4967 l
-2155 4967 l
-2155 4967 m
-2354 4967 l
-2354 4968 l
-2155 4968 l
-2154 4968 m
-2354 4968 l
-2354 4969 l
-2154 4969 l
-2154 4969 m
-2353 4969 l
-2353 4971 l
-2154 4971 l
-2154 4971 m
-2353 4971 l
-2353 4972 l
-2154 4972 l
-2156 4972 m
-2352 4972 l
-2352 4973 l
-2156 4973 l
-2158 4973 m
-2352 4973 l
-2352 4974 l
-2158 4974 l
-2161 4974 m
-2351 4974 l
-2351 4975 l
-2161 4975 l
-2163 4975 m
-2351 4975 l
-2351 4976 l
-2163 4976 l
-2166 4976 m
-2351 4976 l
-2351 4977 l
-2166 4977 l
-2168 4977 m
-2350 4977 l
-2350 4978 l
-2168 4978 l
-2171 4978 m
-2350 4978 l
-2350 4979 l
-2171 4979 l
-2173 4979 m
-2349 4979 l
-2349 4980 l
-2173 4980 l
-2176 4980 m
-2349 4980 l
-2349 4981 l
-2176 4981 l
-2178 4981 m
-2349 4981 l
-2349 4982 l
-2178 4982 l
-2181 4982 m
-2348 4982 l
-2348 4983 l
-2181 4983 l
-2183 4983 m
-2348 4983 l
-2348 4984 l
-2183 4984 l
-2186 4984 m
-2347 4984 l
-2347 4985 l
-2186 4985 l
-2188 4985 m
-2347 4985 l
-2347 4986 l
-2188 4986 l
-2190 4986 m
-2346 4986 l
-2346 4987 l
-2190 4987 l
-2193 4987 m
-2346 4987 l
-2346 4988 l
-2193 4988 l
-2195 4988 m
-2346 4988 l
-2346 4989 l
-2195 4989 l
-2198 4989 m
-2345 4989 l
-2345 4990 l
-2198 4990 l
-2200 4990 m
-2345 4990 l
-2345 4991 l
-2200 4991 l
-2203 4991 m
-2344 4991 l
-2344 4992 l
-2203 4992 l
-2205 4992 m
-2344 4992 l
-2344 4993 l
-2205 4993 l
-2208 4993 m
-2344 4993 l
-2344 4994 l
-2208 4994 l
-2210 4994 m
-2343 4994 l
-2343 4995 l
-2210 4995 l
-2213 4995 m
-2343 4995 l
-2343 4996 l
-2213 4996 l
-2215 4996 m
-2342 4996 l
-2342 4997 l
-2215 4997 l
-2218 4997 m
-2342 4997 l
-2342 4998 l
-2218 4998 l
-2220 4998 m
-2342 4998 l
-2342 4999 l
-2220 4999 l
-2222 4999 m
-2341 4999 l
-2341 5000 l
-2222 5000 l
-2225 5000 m
-2341 5000 l
-2341 5001 l
-2225 5001 l
-2227 5001 m
-2340 5001 l
-2340 5002 l
-2227 5002 l
-2230 5002 m
-2340 5002 l
-2340 5003 l
-2230 5003 l
-2232 5003 m
-2340 5003 l
-2340 5004 l
-2232 5004 l
-2235 5004 m
-2339 5004 l
-2339 5005 l
-2235 5005 l
-2237 5005 m
-2339 5005 l
-2339 5006 l
-2237 5006 l
-2240 5006 m
-2338 5006 l
-2338 5007 l
-2240 5007 l
-2242 5007 m
-2338 5007 l
-2338 5008 l
-2242 5008 l
-2245 5008 m
-2338 5008 l
-2338 5009 l
-2245 5009 l
-2247 5009 m
-2337 5009 l
-2337 5010 l
-2247 5010 l
-2250 5010 m
-2337 5010 l
-2337 5011 l
-2250 5011 l
-2252 5011 m
-2336 5011 l
-2336 5012 l
-2252 5012 l
-2255 5012 m
-2336 5012 l
-2336 5013 l
-2255 5013 l
-2257 5013 m
-2335 5013 l
-2335 5014 l
-2257 5014 l
-2259 5014 m
-2335 5014 l
-2335 5015 l
-2259 5015 l
-2262 5015 m
-2335 5015 l
-2335 5016 l
-2262 5016 l
-2264 5016 m
-2334 5016 l
-2334 5017 l
-2264 5017 l
-2267 5017 m
-2334 5017 l
-2334 5018 l
-2267 5018 l
-2269 5018 m
-2333 5018 l
-2333 5019 l
-2269 5019 l
-2272 5019 m
-2333 5019 l
-2333 5020 l
-2272 5020 l
-2274 5020 m
-2333 5020 l
-2333 5021 l
-2274 5021 l
-2277 5021 m
-2332 5021 l
-2332 5022 l
-2277 5022 l
-2279 5022 m
-2332 5022 l
-2332 5023 l
-2279 5023 l
-2282 5023 m
-2331 5023 l
-2331 5024 l
-2282 5024 l
-2284 5024 m
-2331 5024 l
-2331 5025 l
-2284 5025 l
-2287 5025 m
-2331 5025 l
-2331 5026 l
-2287 5026 l
-2289 5026 m
-2330 5026 l
-2330 5027 l
-2289 5027 l
-2291 5027 m
-2330 5027 l
-2330 5028 l
-2291 5028 l
-2294 5028 m
-2329 5028 l
-2329 5029 l
-2294 5029 l
-2296 5029 m
-2329 5029 l
-2329 5030 l
-2296 5030 l
-2299 5030 m
-2329 5030 l
-2329 5031 l
-2299 5031 l
-2301 5031 m
-2328 5031 l
-2328 5032 l
-2301 5032 l
-2304 5032 m
-2328 5032 l
-2328 5033 l
-2304 5033 l
-2306 5033 m
-2327 5033 l
-2327 5034 l
-2306 5034 l
-2309 5034 m
-2327 5034 l
-2327 5035 l
-2309 5035 l
-2311 5035 m
-2327 5035 l
-2327 5036 l
-2311 5036 l
-2314 5036 m
-2326 5036 l
-2326 5037 l
-2314 5037 l
-2316 5037 m
-2326 5037 l
-2326 5038 l
-2316 5038 l
-2319 5038 m
-2325 5038 l
-2325 5039 l
-2319 5039 l
-2321 5039 m
-2325 5039 l
-2325 5040 l
-2321 5040 l
-Y
-2199 4858.8 m
-2154 4971 l
-2324 5040 l
-2370 4927 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-2241 4957 m
-2242 4943 l
-2237 4932 l
-2227 4924 l
-2223 4922 l
-2210 4922 l
-2199 4926 l
-2190 4936 l
-2189 4940 l
-2188 4953 l
-2193 4964 l
-2203 4973 l
-2207 4974 l
-2220 4975 l
-2231 4970 l
-2241 4957 l
-2249 4937 l
-2252 4916 l
-2249 4901 l
-2239 4893 l
-2232 4890 l
-2218 4889 l
-2211 4895 l
-S
-2280 5004 m
-2270 4995 l
-2267 4981 l
-2271 4960 l
-2276 4948 l
-2287 4930 l
-2300 4922 l
-2313 4922 l
-2321 4926 l
-2331 4934 l
-2334 4949 l
-2330 4970 l
-2325 4981 l
-2314 4999 l
-2301 5008 l
-2288 5007 l
-2280 5004 l
-S
-1 g
-974 2200 m
-1160 2200 l
-1160 5703 l
-974 5703 l
-Y
-1159.9 2200 m
-974 2200 l
-974 5703 l
-1160 5703 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1000 2225 m
-1105 2225 l
-S
-1000 2225 m
-1000 2290 l
-S
-1050 2225 m
-1050 2265 l
-S
-1105 2225 m
-1105 2290 l
-S
-1050 2375 m
-1040 2365 l
-1035 2355 l
-1035 2340 l
-1040 2330 l
-1050 2320 l
-1065 2315 l
-1075 2315 l
-1090 2320 l
-1100 2330 l
-1105 2340 l
-1105 2355 l
-1100 2365 l
-1090 2375 l
-S
-1000 2411 m
-1105 2411 l
-S
-1000 2446 m
-1005 2451 l
-1000 2456 l
-995 2451 l
-1000 2446 l
-S
-1035 2451 m
-1105 2451 l
-S
-1035 2491 m
-1140 2491 l
-S
-1050 2491 m
-1040 2501 l
-1035 2511 l
-1035 2526 l
-1040 2536 l
-1050 2546 l
-1065 2551 l
-1075 2551 l
-1090 2546 l
-1100 2536 l
-1105 2526 l
-1105 2511 l
-1100 2501 l
-1090 2491 l
-S
-1000 2591 m
-1085 2591 l
-1100 2596 l
-1105 2606 l
-1105 2616 l
-S
-1035 2576 m
-1035 2611 l
-S
-1000 2641 m
-1005 2646 l
-1000 2651 l
-995 2646 l
-1000 2641 l
-S
-1035 2646 m
-1105 2646 l
-S
-1050 2741 m
-1040 2731 l
-1035 2721 l
-1035 2706 l
-1040 2696 l
-1050 2686 l
-1065 2681 l
-1075 2681 l
-1090 2686 l
-1100 2696 l
-1105 2706 l
-1105 2721 l
-1100 2731 l
-1090 2741 l
-S
-1050 2912 m
-1040 2902 l
-1035 2892 l
-1035 2877 l
-1040 2867 l
-1050 2857 l
-1065 2852 l
-1075 2852 l
-1090 2857 l
-1100 2867 l
-1105 2877 l
-1105 2892 l
-1100 2902 l
-1090 2912 l
-S
-1035 2967 m
-1040 2957 l
-1050 2947 l
-1065 2942 l
-1075 2942 l
-1090 2947 l
-1100 2957 l
-1105 2967 l
-1105 2982 l
-1100 2992 l
-1090 3002 l
-1075 3007 l
-1065 3007 l
-1050 3002 l
-1040 2992 l
-1035 2982 l
-1035 2967 l
-S
-1035 3062 m
-1040 3052 l
-1050 3042 l
-1065 3037 l
-1075 3037 l
-1090 3042 l
-1100 3052 l
-1105 3062 l
-1105 3077 l
-1100 3087 l
-1090 3097 l
-1075 3102 l
-1065 3102 l
-1050 3097 l
-1040 3087 l
-1035 3077 l
-1035 3062 l
-S
-1035 3137 m
-1105 3137 l
-S
-1065 3137 m
-1050 3142 l
-1040 3152 l
-1035 3162 l
-1035 3177 l
-S
-1000 3258 m
-1105 3258 l
-S
-1050 3258 m
-1040 3248 l
-1035 3238 l
-1035 3222 l
-1040 3212 l
-1050 3202 l
-1065 3197 l
-1075 3197 l
-1090 3202 l
-1100 3212 l
-1105 3222 l
-1105 3238 l
-1100 3248 l
-1090 3258 l
-S
-1000 3293 m
-1005 3298 l
-1000 3303 l
-995 3298 l
-1000 3293 l
-S
-1035 3298 m
-1105 3298 l
-S
-1035 3338 m
-1105 3338 l
-S
-1055 3338 m
-1040 3353 l
-1035 3363 l
-1035 3378 l
-1040 3388 l
-1055 3393 l
-1105 3393 l
-S
-1035 3488 m
-1105 3488 l
-S
-1050 3488 m
-1040 3478 l
-1035 3468 l
-1035 3453 l
-1040 3443 l
-1050 3433 l
-1065 3428 l
-1075 3428 l
-1090 3433 l
-1100 3443 l
-1105 3453 l
-1105 3468 l
-1100 3478 l
-1090 3488 l
-S
-1000 3533 m
-1085 3533 l
-1100 3538 l
-1105 3548 l
-1105 3558 l
-S
-1035 3518 m
-1035 3553 l
-S
-1065 3583 m
-1065 3643 l
-1055 3643 l
-1045 3638 l
-1040 3633 l
-1035 3623 l
-1035 3608 l
-1040 3598 l
-1050 3588 l
-1065 3583 l
-1075 3583 l
-1090 3588 l
-1100 3598 l
-1105 3608 l
-1105 3623 l
-1100 3633 l
-1090 3643 l
-S
-1050 3729 m
-1040 3724 l
-1035 3709 l
-1035 3694 l
-1040 3679 l
-1050 3674 l
-1060 3679 l
-1065 3689 l
-1070 3714 l
-1075 3724 l
-1085 3729 l
-1090 3729 l
-1100 3724 l
-1105 3709 l
-1105 3694 l
-1100 3679 l
-1090 3674 l
-S
-1035 3769 m
-1040 3764 l
-1045 3769 l
-1040 3774 l
-1035 3769 l
-S
-1100 3774 m
-1105 3769 l
-1100 3764 l
-1095 3769 l
-1100 3774 l
-1110 3774 l
-1120 3769 l
-1125 3764 l
-S
-1035 3894 m
-1105 3894 l
-S
-1055 3894 m
-1040 3909 l
-1035 3919 l
-1035 3934 l
-1040 3944 l
-1055 3949 l
-1105 3949 l
-S
-1055 3949 m
-1040 3964 l
-1035 3974 l
-1035 3989 l
-1040 3999 l
-1055 4004 l
-1105 4004 l
-S
-1065 4039 m
-1065 4100 l
-1055 4100 l
-1045 4095 l
-1040 4090 l
-1035 4080 l
-1035 4065 l
-1040 4054 l
-1050 4044 l
-1065 4039 l
-1075 4039 l
-1090 4044 l
-1100 4054 l
-1105 4065 l
-1105 4080 l
-1100 4090 l
-1090 4100 l
-S
-1035 4190 m
-1105 4190 l
-S
-1050 4190 m
-1040 4180 l
-1035 4170 l
-1035 4155 l
-1040 4145 l
-1050 4135 l
-1065 4130 l
-1075 4130 l
-1090 4135 l
-1100 4145 l
-1105 4155 l
-1105 4170 l
-1100 4180 l
-1090 4190 l
-S
-1035 4230 m
-1105 4230 l
-S
-1055 4230 m
-1040 4245 l
-1035 4255 l
-1035 4270 l
-1040 4280 l
-1055 4285 l
-1105 4285 l
-S
-1065 4400 m
-1065 4460 l
-1055 4460 l
-1045 4455 l
-1040 4450 l
-1035 4440 l
-1035 4425 l
-1040 4415 l
-1050 4405 l
-1065 4400 l
-1075 4400 l
-1090 4405 l
-1100 4415 l
-1105 4425 l
-1105 4440 l
-1100 4450 l
-1090 4460 l
-S
-1035 4551 m
-1140 4551 l
-S
-1050 4551 m
-1040 4541 l
-1035 4531 l
-1035 4516 l
-1040 4506 l
-1050 4496 l
-1065 4491 l
-1075 4491 l
-1090 4496 l
-1100 4506 l
-1105 4516 l
-1105 4531 l
-1100 4541 l
-1090 4551 l
-S
-1035 4591 m
-1085 4591 l
-1100 4596 l
-1105 4606 l
-1105 4621 l
-1100 4631 l
-1085 4646 l
-S
-1035 4646 m
-1105 4646 l
-S
-1000 4681 m
-1005 4686 l
-1000 4691 l
-995 4686 l
-1000 4681 l
-S
-1035 4686 m
-1105 4686 l
-S
-1035 4726 m
-1105 4726 l
-S
-1055 4726 m
-1040 4741 l
-1035 4751 l
-1035 4766 l
-1040 4776 l
-1055 4781 l
-1105 4781 l
-S
-1035 4841 m
-1040 4831 l
-1050 4821 l
-1065 4816 l
-1075 4816 l
-1090 4821 l
-1100 4831 l
-1105 4841 l
-1105 4856 l
-1100 4866 l
-1090 4876 l
-1075 4881 l
-1065 4881 l
-1050 4876 l
-1040 4866 l
-1035 4856 l
-1035 4841 l
-S
-1035 4912 m
-1105 4967 l
-S
-1035 4967 m
-1105 4912 l
-S
-1000 5122 m
-1080 5122 l
-1095 5117 l
-1100 5112 l
-1105 5102 l
-1105 5092 l
-1100 5082 l
-1095 5077 l
-1080 5072 l
-1070 5072 l
-S
-1025 5162 m
-1020 5162 l
-1010 5167 l
-1005 5172 l
-1000 5182 l
-1000 5202 l
-1005 5212 l
-1010 5217 l
-1020 5222 l
-1030 5222 l
-1040 5217 l
-1055 5207 l
-1105 5157 l
-1105 5227 l
-S
-1000 5287 m
-1005 5272 l
-1020 5262 l
-1045 5257 l
-1060 5257 l
-1085 5262 l
-1100 5272 l
-1105 5287 l
-1105 5297 l
-1100 5313 l
-1085 5323 l
-1060 5328 l
-1045 5328 l
-1020 5323 l
-1005 5313 l
-1000 5297 l
-1000 5287 l
-S
-1000 5388 m
-1005 5373 l
-1020 5363 l
-1045 5358 l
-1060 5358 l
-1085 5363 l
-1100 5373 l
-1105 5388 l
-1105 5398 l
-1100 5413 l
-1085 5423 l
-1060 5428 l
-1045 5428 l
-1020 5423 l
-1005 5413 l
-1000 5398 l
-1000 5388 l
-S
-1000 5488 m
-1005 5473 l
-1020 5463 l
-1045 5458 l
-1060 5458 l
-1085 5463 l
-1100 5473 l
-1105 5488 l
-1105 5498 l
-1100 5513 l
-1085 5523 l
-1060 5528 l
-1045 5528 l
-1020 5523 l
-1005 5513 l
-1000 5498 l
-1000 5488 l
-S
-1095 5568 m
-1100 5563 l
-1105 5568 l
-1100 5573 l
-1095 5568 l
-S
-1000 5638 m
-1005 5623 l
-1020 5613 l
-1045 5608 l
-1060 5608 l
-1085 5613 l
-1100 5623 l
-1105 5638 l
-1105 5648 l
-1100 5663 l
-1085 5673 l
-1060 5678 l
-1045 5678 l
-1020 5673 l
-1005 5663 l
-1000 5648 l
-1000 5638 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/gridplot_bw.eps b/ast-5.3-1/sun211_figures/gridplot_bw.eps
deleted file mode 100644
index f2a2dea..0000000
--- a/ast-5.3-1/sun211_figures/gridplot_bw.eps
+++ /dev/null
@@ -1,16724 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 97 220 409 571
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:41:51
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2984 3317 l
-2985 3318 l
-2986 3319 l
-2987 3319 l
-2988 3320 l
-2990 3320 l
-2991 3321 l
-3005 3329 l
-3020 3338 l
-3034 3347 l
-3049 3356 l
-3063 3365 l
-3077 3375 l
-3091 3385 l
-3105 3395 l
-3118 3405 l
-3132 3415 l
-3145 3426 l
-3158 3436 l
-3171 3447 l
-3184 3459 l
-3197 3470 l
-3209 3482 l
-3222 3493 l
-3234 3505 l
-3246 3517 l
-3257 3530 l
-3269 3542 l
-3280 3555 l
-3291 3568 l
-3302 3581 l
-3313 3594 l
-3324 3607 l
-3334 3621 l
-3344 3634 l
-3354 3648 l
-3364 3662 l
-3373 3676 l
-3382 3691 l
-3391 3705 l
-3400 3720 l
-3409 3735 l
-3417 3750 l
-3425 3765 l
-3433 3780 l
-3441 3795 l
-3448 3810 l
-3455 3826 l
-3462 3842 l
-3469 3858 l
-3475 3873 l
-3481 3890 l
-3487 3906 l
-3492 3922 l
-3497 3938 l
-3502 3955 l
-3507 3971 l
-3512 3988 l
-3516 4005 l
-3519 4022 l
-3523 4039 l
-3526 4056 l
-3529 4073 l
-3532 4090 l
-3534 4107 l
-3536 4125 l
-3538 4142 l
-3539 4159 l
-3540 4177 l
-3541 4194 l
-3541 4212 l
-3541 4230 l
-3541 4247 l
-3541 4265 l
-3540 4283 l
-3538 4301 l
-3537 4318 l
-3535 4336 l
-3532 4354 l
-3529 4372 l
-3526 4390 l
-3523 4407 l
-3519 4425 l
-3515 4443 l
-3510 4461 l
-3505 4479 l
-3500 4496 l
-3494 4514 l
-3488 4531 l
-3481 4549 l
-3474 4567 l
-3467 4584 l
-3459 4601 l
-3451 4618 l
-3442 4636 l
-3433 4653 l
-3423 4670 l
-3413 4686 l
-3403 4703 l
-3392 4720 l
-3381 4736 l
-3369 4752 l
-3357 4768 l
-3344 4784 l
-3331 4800 l
-3318 4815 l
-3304 4831 l
-3289 4846 l
-3274 4860 l
-3259 4875 l
-3243 4889 l
-3227 4903 l
-3210 4917 l
-3193 4931 l
-3175 4944 l
-3157 4956 l
-3138 4969 l
-3119 4981 l
-3100 4993 l
-3080 5004 l
-3059 5015 l
-3038 5025 l
-3017 5035 l
-2995 5045 l
-2973 5054 l
-2951 5063 l
-2928 5071 l
-2904 5078 l
-2880 5085 l
-2856 5092 l
-2832 5098 l
-2807 5103 l
-2782 5108 l
-2756 5112 l
-2730 5115 l
-2704 5118 l
-2678 5120 l
-2651 5121 l
-2624 5122 l
-2597 5122 l
-2569 5121 l
-2542 5120 l
-2514 5117 l
-2487 5114 l
-2459 5110 l
-2431 5106 l
-2403 5100 l
-2375 5094 l
-2347 5087 l
-2319 5079 l
-2292 5071 l
-2264 5061 l
-2237 5051 l
-2235 5050 l
-2233 5050 l
-2231 5049 l
-2229 5048 l
-2227 5047 l
-2225 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2983 3318 l
-2983 3319 l
-2983 3320 l
-2984 3321 l
-2984 3322 l
-2984 3323 l
-2984 3324 l
-2985 3337 l
-2986 3351 l
-2987 3364 l
-2988 3378 l
-2989 3392 l
-2990 3406 l
-2991 3420 l
-2991 3434 l
-2992 3448 l
-2992 3462 l
-2992 3476 l
-2992 3490 l
-2992 3504 l
-2992 3518 l
-2992 3533 l
-2992 3547 l
-2992 3561 l
-2991 3576 l
-2991 3590 l
-2990 3605 l
-2989 3619 l
-2988 3634 l
-2988 3648 l
-2986 3663 l
-2985 3678 l
-2984 3692 l
-2983 3707 l
-2982 3722 l
-2980 3736 l
-2978 3751 l
-2977 3766 l
-2975 3780 l
-2973 3795 l
-2971 3810 l
-2969 3825 l
-2967 3839 l
-2965 3854 l
-2963 3869 l
-2961 3884 l
-2958 3899 l
-2956 3913 l
-2953 3928 l
-2950 3943 l
-2948 3958 l
-2945 3972 l
-2942 3987 l
-2939 4002 l
-2936 4016 l
-2933 4031 l
-2929 4046 l
-2926 4060 l
-2923 4075 l
-2919 4089 l
-2916 4104 l
-2912 4119 l
-2908 4133 l
-2904 4147 l
-2900 4162 l
-2897 4176 l
-2893 4191 l
-2888 4205 l
-2884 4219 l
-2880 4233 l
-2876 4247 l
-2871 4262 l
-2867 4276 l
-2862 4290 l
-2858 4304 l
-2853 4317 l
-2848 4331 l
-2843 4345 l
-2838 4359 l
-2833 4372 l
-2828 4386 l
-2823 4400 l
-2818 4413 l
-2812 4426 l
-2807 4440 l
-2802 4453 l
-2796 4466 l
-2790 4479 l
-2785 4492 l
-2779 4505 l
-2773 4518 l
-2767 4531 l
-2761 4543 l
-2755 4556 l
-2749 4568 l
-2743 4581 l
-2737 4593 l
-2730 4605 l
-2724 4617 l
-2717 4629 l
-2711 4641 l
-2704 4653 l
-2697 4664 l
-2691 4676 l
-2684 4687 l
-2677 4699 l
-2670 4710 l
-2662 4721 l
-2655 4732 l
-2648 4743 l
-2641 4753 l
-2633 4764 l
-2626 4774 l
-2618 4785 l
-2610 4795 l
-2602 4805 l
-2594 4815 l
-2586 4825 l
-2578 4834 l
-2570 4844 l
-2562 4853 l
-2554 4862 l
-2545 4871 l
-2537 4880 l
-2528 4888 l
-2519 4897 l
-2510 4905 l
-2501 4913 l
-2492 4921 l
-2483 4929 l
-2474 4937 l
-2464 4944 l
-2455 4951 l
-2445 4958 l
-2435 4965 l
-2425 4972 l
-2415 4978 l
-2405 4984 l
-2394 4990 l
-2384 4996 l
-2373 5001 l
-2362 5006 l
-2351 5011 l
-2340 5016 l
-2328 5020 l
-2317 5025 l
-2305 5028 l
-2293 5032 l
-2281 5035 l
-2268 5038 l
-2256 5041 l
-2243 5043 l
-2230 5045 l
-2229 5045 l
-2228 5045 l
-2227 5045 l
-2226 5045 l
-2225 5045 l
-2224 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2982 3317 l
-2981 3318 l
-2980 3318 l
-2979 3318 l
-2978 3319 l
-2977 3319 l
-2976 3320 l
-2963 3325 l
-2950 3331 l
-2936 3336 l
-2923 3342 l
-2910 3348 l
-2896 3355 l
-2883 3361 l
-2870 3368 l
-2857 3374 l
-2844 3381 l
-2831 3388 l
-2818 3396 l
-2805 3403 l
-2792 3410 l
-2779 3418 l
-2766 3426 l
-2754 3434 l
-2741 3442 l
-2728 3450 l
-2716 3458 l
-2703 3467 l
-2691 3475 l
-2678 3484 l
-2666 3493 l
-2654 3502 l
-2642 3511 l
-2630 3520 l
-2618 3529 l
-2606 3539 l
-2594 3548 l
-2582 3558 l
-2570 3567 l
-2559 3577 l
-2547 3587 l
-2535 3597 l
-2524 3608 l
-2513 3618 l
-2501 3628 l
-2490 3639 l
-2479 3649 l
-2468 3660 l
-2457 3671 l
-2446 3682 l
-2436 3693 l
-2425 3704 l
-2415 3715 l
-2404 3726 l
-2394 3737 l
-2384 3749 l
-2373 3760 l
-2363 3772 l
-2353 3783 l
-2344 3795 l
-2334 3807 l
-2324 3819 l
-2315 3831 l
-2305 3843 l
-2296 3855 l
-2287 3867 l
-2278 3879 l
-2269 3892 l
-2260 3904 l
-2252 3916 l
-2243 3929 l
-2235 3942 l
-2226 3954 l
-2218 3967 l
-2210 3980 l
-2202 3992 l
-2194 4005 l
-2187 4018 l
-2179 4031 l
-2172 4044 l
-2165 4057 l
-2158 4070 l
-2151 4083 l
-2144 4096 l
-2137 4110 l
-2131 4123 l
-2125 4136 l
-2118 4150 l
-2112 4163 l
-2107 4176 l
-2101 4190 l
-2095 4203 l
-2090 4217 l
-2085 4231 l
-2080 4244 l
-2075 4258 l
-2070 4271 l
-2066 4285 l
-2062 4299 l
-2058 4312 l
-2054 4326 l
-2050 4340 l
-2046 4354 l
-2043 4368 l
-2040 4381 l
-2037 4395 l
-2034 4409 l
-2032 4423 l
-2029 4437 l
-2027 4451 l
-2025 4465 l
-2024 4479 l
-2022 4493 l
-2021 4507 l
-2020 4521 l
-2019 4535 l
-2019 4548 l
-2019 4562 l
-2019 4576 l
-2019 4590 l
-2019 4604 l
-2020 4618 l
-2021 4632 l
-2022 4646 l
-2024 4660 l
-2026 4674 l
-2028 4688 l
-2031 4702 l
-2033 4716 l
-2036 4730 l
-2040 4744 l
-2044 4758 l
-2048 4771 l
-2052 4785 l
-2057 4799 l
-2062 4813 l
-2068 4827 l
-2073 4840 l
-2080 4854 l
-2086 4868 l
-2094 4881 l
-2101 4895 l
-2109 4908 l
-2117 4922 l
-2126 4935 l
-2136 4949 l
-2146 4962 l
-2156 4975 l
-2167 4988 l
-2178 5001 l
-2190 5014 l
-2203 5027 l
-2216 5039 l
-2217 5040 l
-2218 5041 l
-2219 5042 l
-2220 5043 l
-2221 5044 l
-2222 5045 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2982 3316 l
-2981 3316 l
-2980 3315 l
-2979 3315 l
-2978 3314 l
-2977 3313 l
-2976 3313 l
-2961 3305 l
-2946 3297 l
-2930 3290 l
-2915 3282 l
-2899 3275 l
-2884 3268 l
-2868 3262 l
-2852 3256 l
-2836 3250 l
-2820 3244 l
-2804 3238 l
-2788 3233 l
-2772 3228 l
-2755 3223 l
-2739 3219 l
-2722 3214 l
-2706 3210 l
-2689 3207 l
-2672 3203 l
-2656 3200 l
-2639 3197 l
-2622 3194 l
-2605 3192 l
-2588 3190 l
-2571 3188 l
-2554 3187 l
-2537 3185 l
-2520 3185 l
-2502 3184 l
-2485 3184 l
-2468 3184 l
-2451 3184 l
-2433 3184 l
-2416 3185 l
-2399 3186 l
-2382 3188 l
-2364 3190 l
-2347 3192 l
-2330 3194 l
-2313 3197 l
-2295 3200 l
-2278 3203 l
-2261 3207 l
-2244 3211 l
-2227 3215 l
-2210 3220 l
-2193 3225 l
-2176 3231 l
-2159 3236 l
-2143 3242 l
-2126 3249 l
-2109 3255 l
-2093 3263 l
-2076 3270 l
-2060 3278 l
-2044 3286 l
-2028 3294 l
-2012 3303 l
-1996 3313 l
-1980 3322 l
-1965 3332 l
-1949 3342 l
-1934 3353 l
-1919 3364 l
-1904 3376 l
-1889 3388 l
-1875 3400 l
-1860 3412 l
-1846 3425 l
-1832 3439 l
-1818 3452 l
-1805 3466 l
-1792 3481 l
-1779 3496 l
-1766 3511 l
-1753 3527 l
-1741 3543 l
-1729 3559 l
-1718 3576 l
-1707 3593 l
-1696 3611 l
-1685 3629 l
-1675 3647 l
-1665 3666 l
-1655 3685 l
-1646 3704 l
-1638 3724 l
-1629 3744 l
-1621 3765 l
-1614 3786 l
-1607 3807 l
-1600 3828 l
-1594 3850 l
-1589 3873 l
-1584 3895 l
-1579 3918 l
-1576 3941 l
-1572 3965 l
-1569 3989 l
-1567 4013 l
-1566 4037 l
-1565 4061 l
-1564 4086 l
-1564 4111 l
-1565 4136 l
-1567 4162 l
-1569 4187 l
-1572 4213 l
-1576 4239 l
-1580 4265 l
-1585 4291 l
-1591 4317 l
-1598 4343 l
-1605 4369 l
-1613 4395 l
-1622 4421 l
-1632 4447 l
-1642 4473 l
-1653 4499 l
-1665 4524 l
-1678 4550 l
-1691 4575 l
-1705 4600 l
-1720 4625 l
-1736 4649 l
-1753 4673 l
-1770 4697 l
-1788 4720 l
-1806 4743 l
-1826 4765 l
-1846 4787 l
-1866 4808 l
-1888 4829 l
-1909 4849 l
-1932 4869 l
-1955 4888 l
-1978 4907 l
-2002 4924 l
-2027 4941 l
-2052 4958 l
-2077 4973 l
-2103 4988 l
-2129 5002 l
-2156 5016 l
-2182 5028 l
-2209 5040 l
-2211 5041 l
-2213 5042 l
-2215 5043 l
-2217 5043 l
-2219 5044 l
-2221 5045 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2983 3316 l
-2983 3315 l
-2983 3314 l
-2983 3313 l
-2983 3312 l
-2983 3311 l
-2982 3310 l
-2981 3297 l
-2979 3283 l
-2977 3270 l
-2976 3257 l
-2974 3244 l
-2971 3231 l
-2969 3218 l
-2967 3205 l
-2964 3192 l
-2962 3179 l
-2959 3167 l
-2956 3154 l
-2953 3142 l
-2950 3130 l
-2947 3117 l
-2943 3105 l
-2940 3093 l
-2936 3081 l
-2932 3069 l
-2928 3057 l
-2924 3046 l
-2920 3034 l
-2915 3023 l
-2911 3012 l
-2906 3000 l
-2901 2989 l
-2896 2978 l
-2890 2967 l
-2885 2957 l
-2879 2946 l
-2873 2936 l
-2867 2925 l
-2861 2915 l
-2855 2905 l
-2848 2895 l
-2841 2885 l
-2834 2876 l
-2827 2866 l
-2819 2857 l
-2811 2848 l
-2803 2839 l
-2795 2830 l
-2786 2821 l
-2778 2813 l
-2768 2804 l
-2759 2796 l
-2749 2788 l
-2739 2781 l
-2729 2773 l
-2718 2766 l
-2707 2759 l
-2695 2752 l
-2684 2745 l
-2671 2739 l
-2659 2733 l
-2645 2727 l
-2632 2722 l
-2618 2717 l
-2603 2712 l
-2588 2707 l
-2572 2703 l
-2556 2700 l
-2539 2696 l
-2521 2694 l
-2503 2691 l
-2483 2689 l
-2464 2688 l
-2443 2687 l
-2421 2687 l
-2399 2688 l
-2375 2690 l
-2351 2692 l
-2326 2695 l
-2299 2700 l
-2271 2705 l
-2242 2712 l
-2212 2720 l
-2180 2729 l
-2148 2741 l
-2113 2754 l
-2077 2769 l
-2040 2787 l
-2002 2807 l
-1962 2829 l
-1920 2855 l
-1878 2884 l
-1834 2917 l
-1831 2919 l
-1828 2922 l
-1825 2924 l
-1822 2927 l
-1819 2930 l
-1816 2932 l
-1812 2935 l
-1809 2937 l
-1806 2940 l
-1803 2943 l
-1800 2945 l
-1797 2948 l
-1793 2951 l
-1790 2954 l
-1787 2956 l
-1784 2959 l
-1781 2962 l
-1777 2965 l
-1774 2968 l
-1771 2971 l
-1768 2974 l
-1765 2976 l
-1761 2979 l
-1758 2982 l
-1755 2985 l
-1752 2988 l
-1749 2991 l
-1745 2994 l
-1742 2998 l
-1739 3001 l
-1736 3004 l
-1732 3007 l
-1729 3010 l
-1726 3013 l
-1723 3017 l
-1720 3020 l
-1716 3023 l
-1713 3026 l
-1710 3030 l
-1707 3033 l
-1703 3036 l
-1700 3040 l
-1697 3043 l
-1694 3047 l
-1691 3050 l
-1687 3054 l
-1684 3057 l
-1681 3061 l
-1678 3064 l
-1675 3068 l
-1671 3071 l
-1668 3075 l
-1665 3079 l
-1662 3082 l
-1659 3086 l
-1655 3090 l
-1652 3094 l
-1649 3097 l
-1646 3101 l
-1643 3105 l
-1640 3109 l
-1636 3113 l
-1633 3117 l
-1630 3121 l
-1627 3125 l
-1624 3129 l
-1621 3133 l
-1618 3137 l
-1614 3141 l
-1611 3145 l
-1608 3149 l
-1605 3153 l
-1602 3157 l
-1599 3161 l
-1596 3165 l
-1593 3170 l
-1590 3174 l
-1587 3178 l
-1584 3183 l
-1581 3187 l
-1578 3191 l
-1575 3196 l
-1572 3200 l
-1569 3204 l
-1566 3209 l
-1563 3213 l
-1560 3218 l
-1557 3222 l
-1554 3227 l
-1551 3231 l
-1548 3236 l
-1545 3241 l
-1542 3245 l
-1539 3250 l
-1536 3255 l
-1534 3259 l
-1531 3264 l
-1528 3269 l
-1525 3274 l
-1522 3279 l
-1519 3283 l
-1517 3288 l
-1514 3293 l
-S
-1514 3293 m
-1511 3298 l
-1508 3303 l
-1506 3308 l
-1503 3313 l
-1500 3318 l
-1498 3323 l
-1495 3328 l
-1492 3333 l
-1490 3338 l
-1487 3343 l
-1485 3348 l
-1482 3353 l
-1479 3359 l
-1477 3364 l
-1474 3369 l
-1472 3374 l
-1469 3379 l
-1467 3385 l
-1465 3390 l
-1462 3395 l
-1460 3401 l
-1457 3406 l
-1455 3411 l
-1453 3417 l
-1450 3422 l
-1448 3428 l
-1446 3433 l
-1443 3438 l
-1441 3444 l
-1439 3449 l
-1437 3455 l
-1435 3461 l
-1432 3466 l
-1430 3472 l
-1428 3477 l
-1426 3483 l
-1424 3488 l
-1422 3494 l
-1420 3500 l
-1418 3505 l
-1416 3511 l
-1414 3517 l
-1412 3522 l
-1410 3528 l
-1408 3534 l
-1407 3540 l
-1405 3545 l
-1403 3551 l
-1401 3557 l
-1399 3563 l
-1398 3569 l
-1396 3574 l
-1394 3580 l
-1393 3586 l
-1391 3592 l
-1390 3598 l
-1388 3604 l
-1386 3609 l
-1385 3615 l
-1383 3621 l
-1382 3627 l
-1381 3633 l
-1379 3639 l
-1378 3645 l
-1376 3651 l
-1375 3657 l
-1374 3663 l
-1373 3669 l
-1371 3675 l
-1370 3681 l
-1369 3687 l
-1368 3693 l
-1367 3699 l
-1365 3705 l
-1364 3711 l
-1363 3717 l
-1362 3723 l
-1361 3729 l
-1360 3735 l
-1359 3741 l
-1359 3747 l
-1358 3753 l
-1357 3759 l
-1356 3765 l
-1355 3771 l
-1354 3777 l
-1354 3783 l
-1353 3789 l
-1352 3795 l
-1352 3801 l
-1351 3807 l
-1350 3813 l
-1350 3819 l
-1349 3825 l
-1349 3831 l
-1348 3837 l
-1348 3843 l
-1347 3849 l
-1347 3855 l
-1347 3861 l
-1346 3867 l
-1346 3873 l
-1346 3879 l
-1345 3885 l
-1345 3891 l
-1345 3897 l
-1345 3902 l
-1345 3908 l
-1344 3914 l
-1344 3920 l
-1344 3926 l
-1344 3932 l
-1344 3938 l
-1344 3944 l
-1344 3950 l
-1344 3956 l
-1344 3961 l
-1344 3967 l
-1345 3973 l
-1345 3979 l
-1345 3985 l
-1345 3991 l
-1345 3996 l
-1346 4002 l
-1346 4008 l
-1346 4014 l
-1346 4019 l
-1347 4025 l
-1347 4031 l
-1348 4037 l
-1348 4042 l
-1348 4048 l
-1349 4054 l
-1349 4059 l
-1350 4065 l
-1350 4071 l
-1351 4076 l
-1352 4082 l
-1352 4087 l
-1353 4093 l
-1354 4098 l
-1354 4104 l
-1355 4109 l
-1356 4115 l
-1356 4120 l
-1357 4126 l
-1358 4131 l
-1359 4137 l
-1360 4142 l
-1360 4148 l
-1361 4153 l
-1362 4158 l
-1363 4164 l
-1364 4169 l
-1365 4174 l
-1366 4180 l
-1367 4185 l
-1368 4190 l
-1369 4195 l
-1370 4201 l
-1371 4206 l
-1372 4211 l
-1373 4216 l
-1374 4221 l
-1375 4226 l
-1377 4231 l
-1378 4236 l
-1379 4242 l
-1380 4247 l
-1381 4252 l
-1383 4257 l
-1384 4262 l
-1385 4267 l
-1386 4271 l
-1388 4276 l
-1389 4281 l
-1390 4286 l
-1392 4291 l
-1393 4296 l
-1394 4301 l
-1396 4305 l
-1397 4310 l
-1399 4315 l
-1400 4320 l
-1401 4324 l
-1403 4329 l
-1404 4334 l
-1406 4338 l
-1407 4343 l
-1409 4348 l
-1410 4352 l
-1412 4357 l
-1413 4361 l
-1415 4366 l
-1416 4370 l
-1418 4375 l
-1420 4379 l
-1421 4384 l
-1423 4388 l
-S
-1423 4388 m
-1424 4392 l
-1426 4397 l
-1428 4401 l
-1429 4406 l
-1431 4410 l
-1433 4414 l
-1434 4418 l
-1436 4423 l
-1438 4427 l
-1439 4431 l
-1441 4435 l
-1443 4439 l
-1445 4443 l
-1446 4448 l
-1448 4452 l
-1450 4456 l
-1452 4460 l
-1453 4464 l
-1455 4468 l
-1457 4472 l
-1483 4525 l
-1509 4575 l
-1537 4620 l
-1564 4662 l
-1592 4701 l
-1620 4736 l
-1647 4769 l
-1674 4798 l
-1701 4825 l
-1727 4850 l
-1753 4872 l
-1778 4893 l
-1802 4911 l
-1826 4928 l
-1849 4944 l
-1871 4958 l
-1893 4970 l
-1914 4981 l
-1935 4991 l
-1955 5001 l
-1975 5009 l
-1994 5016 l
-2012 5022 l
-2030 5028 l
-2048 5032 l
-2065 5037 l
-2082 5040 l
-2098 5043 l
-2114 5045 l
-2130 5047 l
-2145 5048 l
-2160 5048 l
-2174 5049 l
-2189 5048 l
-2203 5048 l
-2216 5046 l
-2217 5046 l
-2218 5046 l
-2219 5046 l
-2220 5046 l
-2221 5046 l
-2222 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2984 3316 l
-2985 3316 l
-2986 3316 l
-2987 3315 l
-2988 3315 l
-2989 3315 l
-2990 3314 l
-3003 3309 l
-3017 3304 l
-3030 3299 l
-3044 3295 l
-3058 3291 l
-3071 3286 l
-3085 3282 l
-3099 3279 l
-3113 3275 l
-3126 3272 l
-3140 3268 l
-3154 3265 l
-3168 3263 l
-3182 3260 l
-3195 3258 l
-3209 3255 l
-3223 3254 l
-3237 3252 l
-3251 3250 l
-3265 3249 l
-3279 3248 l
-3293 3247 l
-3307 3247 l
-3321 3247 l
-3335 3247 l
-3349 3247 l
-3363 3247 l
-3377 3248 l
-3391 3249 l
-3405 3251 l
-3419 3252 l
-3433 3254 l
-3447 3257 l
-3461 3259 l
-3475 3262 l
-3489 3265 l
-3502 3269 l
-3516 3273 l
-3530 3277 l
-3544 3281 l
-3558 3286 l
-3572 3292 l
-3586 3297 l
-3600 3304 l
-3614 3310 l
-3627 3317 l
-3641 3324 l
-3655 3332 l
-3668 3341 l
-3682 3349 l
-3695 3359 l
-3709 3368 l
-3722 3379 l
-3736 3389 l
-3749 3401 l
-3762 3413 l
-3775 3425 l
-3788 3438 l
-3801 3452 l
-3814 3467 l
-3826 3482 l
-3839 3498 l
-3851 3514 l
-3863 3532 l
-3875 3550 l
-3886 3569 l
-3897 3588 l
-3908 3609 l
-3919 3631 l
-3929 3653 l
-3939 3677 l
-3949 3701 l
-3958 3727 l
-3966 3753 l
-3974 3781 l
-3981 3809 l
-3988 3839 l
-3993 3870 l
-3998 3903 l
-4002 3936 l
-4005 3971 l
-4007 4006 l
-4007 4043 l
-4007 4082 l
-4005 4121 l
-4001 4161 l
-3996 4203 l
-3989 4245 l
-3980 4289 l
-3969 4333 l
-3957 4378 l
-3942 4423 l
-3925 4469 l
-3905 4515 l
-3884 4561 l
-3860 4607 l
-3834 4653 l
-3805 4698 l
-3774 4742 l
-3741 4785 l
-3706 4827 l
-3669 4868 l
-3631 4907 l
-3590 4944 l
-3549 4979 l
-3506 5012 l
-3462 5043 l
-3417 5072 l
-3372 5098 l
-3327 5122 l
-3281 5144 l
-3236 5163 l
-3190 5181 l
-3146 5196 l
-3101 5209 l
-3058 5220 l
-3015 5229 l
-2973 5236 l
-2932 5242 l
-2892 5246 l
-2854 5248 l
-2816 5249 l
-2779 5249 l
-2744 5247 l
-2710 5245 l
-2677 5241 l
-2645 5237 l
-2615 5232 l
-2585 5226 l
-2557 5219 l
-2529 5211 l
-2503 5203 l
-2478 5195 l
-2454 5186 l
-2430 5176 l
-2408 5167 l
-2387 5156 l
-2366 5146 l
-2346 5135 l
-2327 5124 l
-2309 5112 l
-2292 5101 l
-2276 5089 l
-2260 5077 l
-2245 5064 l
-2230 5052 l
-2229 5051 l
-2228 5050 l
-2227 5049 l
-2226 5048 l
-2225 5047 l
-2224 5047 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-3302 3581 m
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3301 3582 l
-3301 3582 l
-3300 3583 l
-3299 3584 l
-3299 3584 l
-3298 3585 l
-3298 3585 l
-3297 3586 l
-3297 3586 l
-3296 3587 l
-3295 3588 l
-3295 3588 l
-3294 3589 l
-3286 3596 l
-3277 3603 l
-3268 3610 l
-3259 3617 l
-3249 3623 l
-3239 3628 l
-3229 3634 l
-3218 3639 l
-3207 3643 l
-3196 3648 l
-3185 3651 l
-3174 3655 l
-3162 3658 l
-3150 3661 l
-3138 3663 l
-3126 3665 l
-3114 3666 l
-3101 3668 l
-3089 3669 l
-3076 3669 l
-3064 3669 l
-3051 3669 l
-3038 3669 l
-3025 3668 l
-3012 3666 l
-2999 3665 l
-2986 3663 l
-2974 3661 l
-2961 3658 l
-2948 3655 l
-2935 3652 l
-2922 3649 l
-2909 3645 l
-2897 3641 l
-2884 3636 l
-2872 3632 l
-2859 3627 l
-2847 3621 l
-2835 3616 l
-2823 3610 l
-2811 3604 l
-2799 3597 l
-2787 3591 l
-2776 3584 l
-2765 3577 l
-2754 3569 l
-2743 3562 l
-2733 3554 l
-2722 3546 l
-2712 3537 l
-2703 3529 l
-2693 3520 l
-2684 3511 l
-2675 3502 l
-2666 3493 l
-2658 3483 l
-2650 3473 l
-2642 3464 l
-2635 3454 l
-2628 3443 l
-2621 3433 l
-2615 3423 l
-2609 3412 l
-2604 3401 l
-2599 3391 l
-2594 3380 l
-2590 3369 l
-2586 3358 l
-2583 3347 l
-2580 3335 l
-2577 3324 l
-2575 3313 l
-2574 3302 l
-2573 3290 l
-2573 3279 l
-2573 3268 l
-2573 3256 l
-2574 3245 l
-2576 3234 l
-2578 3223 l
-2581 3212 l
-2584 3201 l
-2588 3190 l
-2592 3179 l
-2597 3169 l
-2603 3158 l
-2609 3148 l
-2616 3138 l
-2623 3128 l
-2631 3119 l
-2639 3110 l
-2648 3101 l
-2658 3092 l
-2668 3084 l
-2678 3076 l
-2689 3068 l
-2701 3061 l
-2713 3054 l
-2726 3048 l
-2739 3042 l
-2753 3036 l
-2767 3031 l
-2782 3027 l
-2796 3023 l
-2812 3020 l
-2828 3017 l
-2844 3014 l
-2860 3013 l
-2877 3012 l
-2894 3011 l
-2911 3012 l
-2928 3012 l
-2945 3014 l
-2963 3016 l
-2980 3019 l
-2998 3022 l
-3015 3026 l
-3033 3031 l
-3050 3036 l
-3067 3042 l
-3084 3049 l
-3101 3056 l
-3118 3064 l
-3134 3072 l
-3150 3081 l
-3165 3090 l
-3181 3100 l
-3195 3110 l
-3210 3121 l
-3223 3132 l
-3236 3144 l
-3249 3156 l
-3261 3168 l
-3273 3181 l
-3284 3193 l
-3294 3206 l
-3303 3220 l
-3312 3233 l
-3321 3247 l
-3328 3260 l
-3335 3274 l
-3342 3288 l
-3347 3302 l
-3352 3315 l
-3357 3329 l
-3360 3343 l
-3363 3356 l
-3366 3370 l
-3367 3383 l
-3369 3396 l
-3369 3409 l
-3369 3422 l
-3368 3435 l
-3367 3447 l
-3365 3459 l
-3362 3471 l
-3359 3482 l
-3356 3494 l
-3352 3505 l
-3347 3515 l
-3342 3526 l
-3337 3536 l
-3331 3545 l
-3324 3555 l
-3317 3564 l
-3310 3572 l
-3302 3581 l
-S
-3500 3947 m
-3500 3947 l
-3500 3947 l
-3500 3947 l
-3500 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3498 3948 l
-3496 3949 l
-3495 3950 l
-3494 3951 l
-3493 3951 l
-3492 3952 l
-3490 3953 l
-3489 3954 l
-3488 3954 l
-3487 3955 l
-3486 3956 l
-3484 3957 l
-3483 3957 l
-3466 3968 l
-3448 3977 l
-3430 3986 l
-3412 3994 l
-3393 4002 l
-3374 4008 l
-3354 4015 l
-3335 4020 l
-3315 4025 l
-3295 4030 l
-3275 4034 l
-3254 4037 l
-3234 4040 l
-3213 4042 l
-3192 4044 l
-3171 4045 l
-3149 4045 l
-3128 4045 l
-3107 4045 l
-3085 4044 l
-3064 4042 l
-3042 4041 l
-3021 4038 l
-2999 4035 l
-2977 4032 l
-2956 4028 l
-2934 4024 l
-2913 4019 l
-2891 4014 l
-2870 4008 l
-2848 4002 l
-2827 3996 l
-2806 3989 l
-2785 3981 l
-2764 3974 l
-2743 3966 l
-2722 3957 l
-2701 3948 l
-2681 3939 l
-2661 3929 l
-2641 3919 l
-2621 3909 l
-2601 3898 l
-2582 3887 l
-2563 3876 l
-2544 3864 l
-2526 3852 l
-2507 3839 l
-2489 3826 l
-2472 3813 l
-2454 3800 l
-2437 3786 l
-2421 3772 l
-2405 3758 l
-2389 3743 l
-2373 3728 l
-2358 3713 l
-2343 3697 l
-2329 3681 l
-2315 3665 l
-2302 3649 l
-2289 3632 l
-2277 3615 l
-2265 3598 l
-2254 3581 l
-2243 3563 l
-2233 3545 l
-2224 3527 l
-2215 3509 l
-2207 3490 l
-2199 3472 l
-2192 3453 l
-2186 3433 l
-2181 3414 l
-2176 3395 l
-2172 3375 l
-2169 3355 l
-2166 3335 l
-2165 3315 l
-2164 3295 l
-2164 3274 l
-2166 3254 l
-2168 3233 l
-2171 3213 l
-2175 3192 l
-2180 3172 l
-2186 3151 l
-2194 3130 l
-2202 3110 l
-2212 3089 l
-2223 3069 l
-2235 3049 l
-2249 3029 l
-2264 3009 l
-2280 2990 l
-2297 2971 l
-2316 2952 l
-2336 2934 l
-2358 2916 l
-2382 2899 l
-2406 2883 l
-2433 2867 l
-2461 2853 l
-2490 2839 l
-2521 2826 l
-2553 2814 l
-2586 2804 l
-2622 2795 l
-2658 2787 l
-2695 2781 l
-2734 2777 l
-2774 2774 l
-2814 2773 l
-2856 2775 l
-2898 2778 l
-2940 2783 l
-2983 2790 l
-3026 2799 l
-3068 2810 l
-3111 2824 l
-3153 2839 l
-3194 2856 l
-3234 2876 l
-3273 2897 l
-3312 2920 l
-3348 2944 l
-3383 2970 l
-3417 2997 l
-3449 3025 l
-3479 3054 l
-3507 3084 l
-3533 3115 l
-3557 3146 l
-3580 3178 l
-3600 3209 l
-3618 3241 l
-3634 3273 l
-3649 3305 l
-3662 3336 l
-3672 3368 l
-3681 3398 l
-3689 3429 l
-3695 3458 l
-3699 3487 l
-3701 3516 l
-3703 3544 l
-3703 3571 l
-3701 3597 l
-3699 3623 l
-3695 3647 l
-3690 3671 l
-3684 3694 l
-3677 3717 l
-3669 3738 l
-3661 3759 l
-3651 3779 l
-3640 3798 l
-3629 3816 l
-3617 3834 l
-3605 3851 l
-3591 3867 l
-3577 3882 l
-3563 3896 l
-3548 3910 l
-3532 3923 l
-3516 3935 l
-3500 3947 l
-S
-3529 4372 m
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3526 4373 l
-3525 4374 l
-3523 4374 l
-3521 4375 l
-3520 4375 l
-3518 4376 l
-3516 4376 l
-3515 4377 l
-3513 4377 l
-3511 4378 l
-3510 4378 l
-3508 4379 l
-3507 4380 l
-3483 4387 l
-3460 4393 l
-3436 4399 l
-3413 4404 l
-3389 4408 l
-3364 4412 l
-3340 4415 l
-3316 4418 l
-3291 4420 l
-3266 4421 l
-3241 4422 l
-3216 4423 l
-3191 4423 l
-3166 4422 l
-3140 4421 l
-3115 4420 l
-3090 4418 l
-3064 4415 l
-3038 4412 l
-3013 4409 l
-2987 4405 l
-2961 4401 l
-2936 4396 l
-2910 4391 l
-2884 4385 l
-2859 4379 l
-2833 4372 l
-2808 4366 l
-2782 4358 l
-2757 4351 l
-2731 4343 l
-2706 4334 l
-2681 4325 l
-2656 4316 l
-2631 4306 l
-2606 4297 l
-2581 4286 l
-2557 4276 l
-2532 4265 l
-2508 4253 l
-2484 4242 l
-2460 4229 l
-2436 4217 l
-2413 4204 l
-2390 4191 l
-2367 4178 l
-2344 4164 l
-2322 4150 l
-2299 4136 l
-2277 4121 l
-2256 4107 l
-2234 4091 l
-2213 4076 l
-2192 4060 l
-2172 4044 l
-2152 4028 l
-2132 4011 l
-2113 3994 l
-2094 3977 l
-2075 3959 l
-2057 3942 l
-2039 3923 l
-2022 3905 l
-2005 3887 l
-1989 3868 l
-1973 3849 l
-1957 3829 l
-1942 3809 l
-1928 3790 l
-1914 3769 l
-1901 3749 l
-1888 3728 l
-1876 3707 l
-1864 3686 l
-1853 3664 l
-1843 3642 l
-1833 3620 l
-1824 3598 l
-1816 3575 l
-1809 3552 l
-1802 3529 l
-1797 3505 l
-1792 3481 l
-1788 3457 l
-1785 3432 l
-1783 3407 l
-1782 3382 l
-1782 3356 l
-1783 3330 l
-1785 3304 l
-1789 3277 l
-1794 3250 l
-1800 3222 l
-1808 3194 l
-1818 3166 l
-1829 3137 l
-1842 3108 l
-1858 3079 l
-1875 3049 l
-1895 3019 l
-1917 2989 l
-1941 2958 l
-1969 2927 l
-2000 2896 l
-2034 2865 l
-2072 2835 l
-2114 2805 l
-2117 2803 l
-2120 2801 l
-2123 2798 l
-2127 2796 l
-2130 2794 l
-2133 2792 l
-2136 2790 l
-2140 2788 l
-2143 2786 l
-2146 2784 l
-2150 2782 l
-2153 2780 l
-2156 2778 l
-2160 2775 l
-2163 2773 l
-2167 2771 l
-2170 2769 l
-2174 2767 l
-2177 2765 l
-2181 2763 l
-2185 2761 l
-2188 2759 l
-2192 2757 l
-2195 2755 l
-2199 2753 l
-2203 2751 l
-2207 2749 l
-2210 2747 l
-2214 2745 l
-2218 2743 l
-2222 2741 l
-2226 2739 l
-2229 2737 l
-2233 2735 l
-2237 2734 l
-2241 2732 l
-2245 2730 l
-2249 2728 l
-2253 2726 l
-2257 2724 l
-2261 2722 l
-2265 2720 l
-2270 2718 l
-2274 2717 l
-2278 2715 l
-2282 2713 l
-2286 2711 l
-2291 2709 l
-2295 2708 l
-2299 2706 l
-2304 2704 l
-2308 2702 l
-2312 2700 l
-2317 2699 l
-2321 2697 l
-2326 2695 l
-2330 2694 l
-2335 2692 l
-2339 2690 l
-2344 2689 l
-2348 2687 l
-2353 2685 l
-2358 2684 l
-2362 2682 l
-2367 2681 l
-2372 2679 l
-S
-2372 2679 m
-2376 2677 l
-2381 2676 l
-2386 2674 l
-2391 2673 l
-2396 2671 l
-2400 2670 l
-2405 2668 l
-2410 2667 l
-2415 2666 l
-2420 2664 l
-2425 2663 l
-2430 2661 l
-2435 2660 l
-2440 2659 l
-2446 2657 l
-2451 2656 l
-2456 2655 l
-2461 2653 l
-2466 2652 l
-2472 2651 l
-2477 2650 l
-2482 2649 l
-2487 2647 l
-2493 2646 l
-2498 2645 l
-2504 2644 l
-2509 2643 l
-2514 2642 l
-2520 2641 l
-2525 2640 l
-2531 2639 l
-2537 2638 l
-2542 2637 l
-2548 2636 l
-2553 2635 l
-2559 2634 l
-2565 2633 l
-2570 2633 l
-2576 2632 l
-2582 2631 l
-2588 2630 l
-2593 2630 l
-2599 2629 l
-2605 2628 l
-2611 2627 l
-2617 2627 l
-2623 2626 l
-2629 2626 l
-2635 2625 l
-2641 2625 l
-2647 2624 l
-2653 2624 l
-2659 2623 l
-2665 2623 l
-2671 2623 l
-2677 2622 l
-2683 2622 l
-2689 2622 l
-2696 2621 l
-2702 2621 l
-2708 2621 l
-2714 2621 l
-2721 2621 l
-2727 2621 l
-2733 2621 l
-2739 2621 l
-2746 2621 l
-2752 2621 l
-2759 2621 l
-2765 2621 l
-2771 2621 l
-2778 2621 l
-2784 2621 l
-2791 2622 l
-2797 2622 l
-2804 2622 l
-2810 2623 l
-2817 2623 l
-2823 2623 l
-2830 2624 l
-2836 2624 l
-2843 2625 l
-2850 2625 l
-2856 2626 l
-2863 2627 l
-2869 2627 l
-2876 2628 l
-2883 2629 l
-2889 2630 l
-2896 2631 l
-2903 2631 l
-2909 2632 l
-2916 2633 l
-2923 2634 l
-2929 2635 l
-2936 2636 l
-2943 2637 l
-2950 2639 l
-2956 2640 l
-2963 2641 l
-2970 2642 l
-2977 2644 l
-2983 2645 l
-2990 2646 l
-2997 2648 l
-3004 2649 l
-3010 2651 l
-3017 2652 l
-3024 2654 l
-3031 2655 l
-3038 2657 l
-3044 2659 l
-3051 2660 l
-3058 2662 l
-3065 2664 l
-3071 2666 l
-3078 2668 l
-3085 2670 l
-3092 2672 l
-3098 2674 l
-3105 2676 l
-3112 2678 l
-3119 2680 l
-3125 2682 l
-3132 2684 l
-3139 2687 l
-3146 2689 l
-3152 2691 l
-3159 2694 l
-3166 2696 l
-3172 2698 l
-3179 2701 l
-3186 2703 l
-3192 2706 l
-3199 2709 l
-3205 2711 l
-3212 2714 l
-3219 2717 l
-3225 2719 l
-3232 2722 l
-3238 2725 l
-3245 2728 l
-3251 2731 l
-3258 2734 l
-3264 2737 l
-3271 2740 l
-3277 2743 l
-3284 2746 l
-3290 2749 l
-3296 2752 l
-3303 2755 l
-3309 2758 l
-3315 2762 l
-3322 2765 l
-3328 2768 l
-3334 2772 l
-3340 2775 l
-3347 2778 l
-3353 2782 l
-3359 2785 l
-3365 2789 l
-3371 2792 l
-3377 2796 l
-3383 2800 l
-3389 2803 l
-3395 2807 l
-3401 2811 l
-3407 2814 l
-3413 2818 l
-3419 2822 l
-3425 2826 l
-3431 2829 l
-3437 2833 l
-3442 2837 l
-3448 2841 l
-3454 2845 l
-3460 2849 l
-3465 2853 l
-3471 2857 l
-3476 2861 l
-3482 2865 l
-3488 2869 l
-3493 2873 l
-3499 2878 l
-3504 2882 l
-3509 2886 l
-3515 2890 l
-3520 2894 l
-3525 2899 l
-3531 2903 l
-3536 2907 l
-3541 2911 l
-3546 2916 l
-3551 2920 l
-3556 2925 l
-3562 2929 l
-3567 2933 l
-3572 2938 l
-3577 2942 l
-S
-3577 2942 m
-3581 2947 l
-3586 2951 l
-3591 2956 l
-3596 2960 l
-3601 2965 l
-3606 2969 l
-3610 2974 l
-3615 2978 l
-3620 2983 l
-3624 2987 l
-3629 2992 l
-3633 2996 l
-3638 3001 l
-3642 3006 l
-3647 3010 l
-3651 3015 l
-3655 3020 l
-3660 3024 l
-3664 3029 l
-3668 3034 l
-3672 3038 l
-3676 3043 l
-3681 3048 l
-3685 3052 l
-3689 3057 l
-3693 3062 l
-3697 3067 l
-3701 3071 l
-3705 3076 l
-3708 3081 l
-3712 3086 l
-3716 3090 l
-3720 3095 l
-3724 3100 l
-3727 3105 l
-3731 3109 l
-3734 3114 l
-3738 3119 l
-3742 3124 l
-3745 3128 l
-3749 3133 l
-3752 3138 l
-3755 3143 l
-3759 3147 l
-3762 3152 l
-3765 3157 l
-3769 3162 l
-3772 3166 l
-3775 3171 l
-3778 3176 l
-3781 3181 l
-3784 3185 l
-3787 3190 l
-3791 3195 l
-3793 3200 l
-3796 3204 l
-3799 3209 l
-3802 3214 l
-3805 3219 l
-3808 3223 l
-3811 3228 l
-3813 3233 l
-3816 3238 l
-3819 3242 l
-3821 3247 l
-3824 3252 l
-3827 3256 l
-3829 3261 l
-3832 3266 l
-3834 3270 l
-3837 3275 l
-3839 3280 l
-3842 3284 l
-3844 3289 l
-3846 3294 l
-3849 3298 l
-3851 3303 l
-3853 3307 l
-3855 3312 l
-3858 3317 l
-3860 3321 l
-3862 3326 l
-3864 3330 l
-3866 3335 l
-3868 3339 l
-3870 3344 l
-3872 3348 l
-3874 3353 l
-3876 3358 l
-3878 3362 l
-3880 3366 l
-3882 3371 l
-3883 3375 l
-3885 3380 l
-3887 3384 l
-3889 3389 l
-3890 3393 l
-3892 3398 l
-3894 3402 l
-3895 3406 l
-3897 3411 l
-3899 3415 l
-3900 3419 l
-3902 3424 l
-3903 3428 l
-3905 3432 l
-3906 3437 l
-3907 3441 l
-3909 3445 l
-3910 3450 l
-3912 3454 l
-3913 3458 l
-3914 3462 l
-3916 3467 l
-3917 3471 l
-3918 3475 l
-3919 3479 l
-3920 3483 l
-3922 3488 l
-3923 3492 l
-3924 3496 l
-3925 3500 l
-3926 3504 l
-3927 3508 l
-3928 3512 l
-3929 3516 l
-3930 3520 l
-3931 3524 l
-3932 3528 l
-3933 3532 l
-3934 3536 l
-3935 3540 l
-3936 3544 l
-3937 3548 l
-3938 3552 l
-3938 3556 l
-3939 3560 l
-3940 3564 l
-3941 3568 l
-3941 3572 l
-3942 3576 l
-3950 3629 l
-3956 3679 l
-3958 3727 l
-3957 3772 l
-3955 3815 l
-3950 3855 l
-3944 3893 l
-3936 3930 l
-3926 3964 l
-3916 3996 l
-3904 4027 l
-3891 4055 l
-3877 4083 l
-3863 4108 l
-3847 4133 l
-3831 4156 l
-3814 4177 l
-3797 4197 l
-3779 4217 l
-3760 4235 l
-3741 4252 l
-3722 4268 l
-3702 4283 l
-3681 4297 l
-3661 4310 l
-3640 4322 l
-3618 4334 l
-3596 4344 l
-3574 4354 l
-3552 4363 l
-3529 4372 l
-S
-3338 4792 m
-3338 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3336 4792 l
-3336 4792 l
-3336 4792 l
-3335 4792 l
-3333 4792 l
-3332 4792 l
-3330 4792 l
-3329 4792 l
-3327 4792 l
-3326 4792 l
-3324 4792 l
-3323 4792 l
-3321 4792 l
-3320 4792 l
-3318 4792 l
-3316 4792 l
-3295 4792 l
-3273 4791 l
-3251 4790 l
-3229 4789 l
-3207 4787 l
-3185 4786 l
-3162 4783 l
-3139 4781 l
-3116 4778 l
-3093 4775 l
-3070 4772 l
-3047 4769 l
-3023 4765 l
-3000 4761 l
-2976 4756 l
-2952 4751 l
-2928 4746 l
-2904 4741 l
-2880 4736 l
-2856 4730 l
-2832 4724 l
-2808 4717 l
-2784 4711 l
-2760 4704 l
-2736 4697 l
-2711 4689 l
-2687 4682 l
-2663 4674 l
-2639 4665 l
-2614 4657 l
-2590 4648 l
-2566 4639 l
-2542 4630 l
-2518 4621 l
-2494 4611 l
-2470 4601 l
-2446 4591 l
-2423 4581 l
-2399 4570 l
-2376 4560 l
-2352 4549 l
-2329 4537 l
-2306 4526 l
-2283 4514 l
-2260 4503 l
-2237 4491 l
-2215 4478 l
-2192 4466 l
-2170 4453 l
-2148 4441 l
-2126 4428 l
-2105 4415 l
-2083 4401 l
-2062 4388 l
-2041 4375 l
-2021 4361 l
-2000 4347 l
-1980 4333 l
-1960 4319 l
-1940 4305 l
-1921 4290 l
-1902 4276 l
-1883 4261 l
-1864 4246 l
-1846 4232 l
-1828 4217 l
-1810 4202 l
-1793 4187 l
-1776 4171 l
-1759 4156 l
-1743 4141 l
-1727 4125 l
-1711 4110 l
-1696 4094 l
-1681 4079 l
-1666 4063 l
-1652 4048 l
-1638 4032 l
-1624 4016 l
-1611 4000 l
-1598 3985 l
-1586 3969 l
-1574 3953 l
-1562 3937 l
-1551 3921 l
-1540 3906 l
-1530 3890 l
-1520 3874 l
-1510 3858 l
-1501 3843 l
-1492 3827 l
-1484 3811 l
-1476 3796 l
-1469 3780 l
-1462 3765 l
-1455 3749 l
-1449 3734 l
-1443 3719 l
-1438 3703 l
-1433 3688 l
-1429 3673 l
-1425 3658 l
-1421 3643 l
-1418 3629 l
-1416 3614 l
-1414 3599 l
-1412 3585 l
-1411 3571 l
-1410 3556 l
-1410 3542 l
-1410 3528 l
-1411 3514 l
-1412 3500 l
-1414 3486 l
-1416 3473 l
-1419 3459 l
-1422 3444 l
-1427 3430 l
-1432 3414 l
-1439 3395 l
-1440 3393 l
-1441 3391 l
-1441 3389 l
-1442 3388 l
-1443 3386 l
-1444 3383 l
-1445 3381 l
-1446 3379 l
-1447 3376 l
-1448 3373 l
-1450 3370 l
-1451 3367 l
-1453 3363 l
-1455 3359 l
-1457 3354 l
-1460 3348 l
-1463 3341 l
-1468 3333 l
-1473 3322 l
-1480 3308 l
-1491 3289 l
-1507 3259 l
-1509 3256 l
-1510 3254 l
-1512 3251 l
-1514 3248 l
-1515 3245 l
-1517 3241 l
-1519 3238 l
-1522 3234 l
-1524 3231 l
-1526 3227 l
-1529 3223 l
-1531 3219 l
-1534 3214 l
-1537 3210 l
-1540 3205 l
-1543 3200 l
-1547 3194 l
-1551 3188 l
-1555 3182 l
-1559 3176 l
-1564 3169 l
-1568 3162 l
-1574 3154 l
-1580 3146 l
-1586 3138 l
-1593 3128 l
-1600 3118 l
-1608 3108 l
-1617 3096 l
-1627 3084 l
-1638 3070 l
-S
-1638 3070 m
-1650 3056 l
-1664 3040 l
-1679 3023 l
-1696 3004 l
-1716 2983 l
-1739 2960 l
-1765 2935 l
-1796 2908 l
-1832 2877 l
-1875 2844 l
-1926 2807 l
-1930 2804 l
-1934 2801 l
-1939 2798 l
-1943 2796 l
-1947 2793 l
-1952 2790 l
-1956 2787 l
-1960 2784 l
-1965 2781 l
-1970 2778 l
-1974 2775 l
-1979 2773 l
-1984 2770 l
-1989 2767 l
-1994 2764 l
-1999 2761 l
-2004 2758 l
-2009 2755 l
-2014 2752 l
-2020 2748 l
-2025 2745 l
-2030 2742 l
-2036 2739 l
-2042 2736 l
-2047 2733 l
-2053 2730 l
-2059 2727 l
-2065 2724 l
-2071 2720 l
-2077 2717 l
-2084 2714 l
-2090 2711 l
-2096 2708 l
-2103 2705 l
-2110 2701 l
-2116 2698 l
-2123 2695 l
-2130 2692 l
-2137 2689 l
-2144 2685 l
-2152 2682 l
-2159 2679 l
-2166 2676 l
-2174 2673 l
-2182 2669 l
-2190 2666 l
-2198 2663 l
-2206 2660 l
-2214 2657 l
-2222 2654 l
-2231 2651 l
-2239 2647 l
-2248 2644 l
-2257 2641 l
-2266 2638 l
-2275 2635 l
-2284 2632 l
-2293 2629 l
-2303 2626 l
-2312 2623 l
-2322 2621 l
-2332 2618 l
-2342 2615 l
-2353 2612 l
-2363 2610 l
-2373 2607 l
-2384 2604 l
-2395 2602 l
-2406 2599 l
-2417 2597 l
-2428 2595 l
-2440 2592 l
-2451 2590 l
-2463 2588 l
-2475 2586 l
-2487 2584 l
-2499 2582 l
-2512 2580 l
-2524 2578 l
-2537 2577 l
-2550 2575 l
-2563 2574 l
-2576 2573 l
-2589 2571 l
-2602 2570 l
-2616 2569 l
-2630 2569 l
-2644 2568 l
-2658 2567 l
-2672 2567 l
-2686 2567 l
-2701 2567 l
-2715 2567 l
-2730 2567 l
-2745 2567 l
-2760 2568 l
-2775 2568 l
-2790 2569 l
-2806 2570 l
-2821 2571 l
-2837 2573 l
-2852 2574 l
-2868 2576 l
-2884 2578 l
-2900 2580 l
-2916 2583 l
-2932 2585 l
-2948 2588 l
-2964 2591 l
-2980 2594 l
-2997 2598 l
-3013 2601 l
-3029 2605 l
-3046 2609 l
-3062 2613 l
-3078 2618 l
-3095 2623 l
-3111 2628 l
-3128 2633 l
-3144 2638 l
-3160 2644 l
-3177 2649 l
-3193 2655 l
-3209 2662 l
-3225 2668 l
-3241 2675 l
-3257 2682 l
-3273 2689 l
-3289 2696 l
-3305 2703 l
-3320 2711 l
-3336 2719 l
-3351 2727 l
-3366 2735 l
-3381 2743 l
-3396 2752 l
-3411 2760 l
-3426 2769 l
-3440 2778 l
-3455 2787 l
-3469 2797 l
-3483 2806 l
-3497 2815 l
-3510 2825 l
-3524 2835 l
-3537 2845 l
-3550 2855 l
-3563 2865 l
-3575 2875 l
-3588 2885 l
-3600 2895 l
-3612 2906 l
-3624 2916 l
-3636 2927 l
-3647 2937 l
-3658 2948 l
-3670 2958 l
-3680 2969 l
-3691 2980 l
-3701 2990 l
-3712 3001 l
-3722 3012 l
-3731 3023 l
-3741 3033 l
-3750 3044 l
-3760 3055 l
-3769 3066 l
-3777 3076 l
-3786 3087 l
-3794 3098 l
-3803 3108 l
-3811 3119 l
-3818 3129 l
-3826 3140 l
-3834 3150 l
-3841 3161 l
-3848 3171 l
-3855 3181 l
-3862 3192 l
-3868 3202 l
-3875 3212 l
-3881 3222 l
-3887 3232 l
-3893 3242 l
-3899 3252 l
-3905 3262 l
-3910 3271 l
-3916 3281 l
-S
-3916 3281 m
-3921 3291 l
-3926 3300 l
-3931 3309 l
-3936 3319 l
-3940 3328 l
-3945 3337 l
-3949 3346 l
-3954 3355 l
-3958 3364 l
-3962 3373 l
-3966 3382 l
-3970 3391 l
-3974 3399 l
-3977 3408 l
-3981 3416 l
-3984 3425 l
-3988 3433 l
-3991 3441 l
-3994 3449 l
-3997 3457 l
-4000 3465 l
-4003 3473 l
-4006 3481 l
-4009 3489 l
-4012 3496 l
-4014 3504 l
-4017 3512 l
-4019 3519 l
-4022 3526 l
-4024 3533 l
-4026 3541 l
-4028 3548 l
-4030 3555 l
-4032 3562 l
-4034 3569 l
-4036 3575 l
-4038 3582 l
-4040 3589 l
-4042 3595 l
-4043 3602 l
-4045 3608 l
-4047 3615 l
-4048 3621 l
-4050 3627 l
-4051 3633 l
-4053 3639 l
-4054 3645 l
-4055 3651 l
-4057 3657 l
-4058 3663 l
-4059 3669 l
-4060 3675 l
-4061 3680 l
-4062 3686 l
-4064 3691 l
-4065 3697 l
-4066 3702 l
-4066 3707 l
-4067 3713 l
-4068 3718 l
-4069 3723 l
-4070 3728 l
-4071 3733 l
-4072 3738 l
-4072 3743 l
-4073 3748 l
-4074 3753 l
-4074 3758 l
-4075 3762 l
-4076 3767 l
-4076 3772 l
-4077 3776 l
-4078 3781 l
-4078 3785 l
-4079 3790 l
-4079 3794 l
-4080 3799 l
-4080 3803 l
-4085 3859 l
-4087 3907 l
-4088 3949 l
-4087 3987 l
-4086 4019 l
-4084 4049 l
-4082 4075 l
-4080 4098 l
-4077 4119 l
-4075 4138 l
-4072 4156 l
-4070 4172 l
-4067 4186 l
-4065 4199 l
-4063 4212 l
-4060 4223 l
-4058 4234 l
-4056 4244 l
-4054 4253 l
-4052 4262 l
-4050 4270 l
-4048 4277 l
-4047 4284 l
-4028 4352 l
-4016 4390 l
-4008 4413 l
-4002 4429 l
-3997 4441 l
-3994 4451 l
-3991 4458 l
-3988 4465 l
-3986 4470 l
-3984 4474 l
-3982 4478 l
-3981 4482 l
-3980 4485 l
-3978 4488 l
-3977 4491 l
-3976 4493 l
-3975 4495 l
-3974 4498 l
-3973 4500 l
-3972 4501 l
-3971 4503 l
-3971 4505 l
-3970 4507 l
-3969 4508 l
-3968 4510 l
-3968 4511 l
-3967 4513 l
-3966 4514 l
-3966 4515 l
-3965 4517 l
-3964 4518 l
-3964 4519 l
-3963 4521 l
-3962 4522 l
-3962 4523 l
-3961 4524 l
-3960 4525 l
-3960 4526 l
-3959 4528 l
-3959 4529 l
-3958 4530 l
-3958 4531 l
-3950 4545 l
-3942 4557 l
-3933 4569 l
-3925 4580 l
-3916 4591 l
-3907 4602 l
-3897 4612 l
-3887 4622 l
-3877 4632 l
-3866 4641 l
-3855 4650 l
-3844 4659 l
-3832 4667 l
-3820 4675 l
-3807 4683 l
-3794 4691 l
-3780 4698 l
-3767 4706 l
-3752 4712 l
-3738 4719 l
-3723 4725 l
-3708 4731 l
-3692 4737 l
-3676 4743 l
-3660 4748 l
-3643 4753 l
-3627 4757 l
-3609 4762 l
-3592 4766 l
-3574 4770 l
-3556 4773 l
-3537 4776 l
-3518 4779 l
-3499 4782 l
-3480 4784 l
-3461 4786 l
-3441 4788 l
-3421 4789 l
-3400 4790 l
-3380 4791 l
-3359 4792 l
-3338 4792 l
-S
-2880 5085 m
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2879 5085 l
-2878 5084 l
-2878 5084 l
-2877 5083 l
-2876 5083 l
-2876 5083 l
-2875 5082 l
-2874 5082 l
-2874 5082 l
-2873 5081 l
-2872 5081 l
-2871 5080 l
-2871 5080 l
-2861 5075 l
-2850 5069 l
-2839 5064 l
-2828 5059 l
-2816 5053 l
-2804 5048 l
-2791 5043 l
-2778 5037 l
-2765 5031 l
-2752 5026 l
-2738 5020 l
-2724 5015 l
-2710 5009 l
-2696 5003 l
-2681 4997 l
-2666 4991 l
-2651 4985 l
-2636 4979 l
-2620 4973 l
-2605 4967 l
-2589 4960 l
-2573 4954 l
-2557 4948 l
-2541 4941 l
-2525 4935 l
-2509 4928 l
-2492 4921 l
-2476 4915 l
-2459 4908 l
-2442 4901 l
-2426 4894 l
-2409 4887 l
-2392 4880 l
-2376 4873 l
-2359 4865 l
-2342 4858 l
-2325 4851 l
-2309 4843 l
-2292 4836 l
-2275 4829 l
-2259 4821 l
-2242 4814 l
-2225 4806 l
-2209 4799 l
-2192 4791 l
-2176 4784 l
-2160 4776 l
-2144 4768 l
-2127 4761 l
-2111 4753 l
-2096 4746 l
-2080 4738 l
-2064 4731 l
-2049 4723 l
-2033 4716 l
-2018 4709 l
-2003 4701 l
-1988 4694 l
-1973 4687 l
-1959 4680 l
-1945 4673 l
-1930 4666 l
-1916 4660 l
-1903 4653 l
-1889 4647 l
-1876 4641 l
-1863 4635 l
-1850 4629 l
-1837 4623 l
-1825 4618 l
-1813 4612 l
-1801 4607 l
-1789 4603 l
-1778 4598 l
-1767 4594 l
-1756 4590 l
-1746 4587 l
-1736 4584 l
-1726 4581 l
-1717 4579 l
-1708 4577 l
-1699 4576 l
-1691 4575 l
-1683 4575 l
-1676 4575 l
-1669 4575 l
-1663 4577 l
-1657 4579 l
-1652 4582 l
-1647 4585 l
-1643 4589 l
-1639 4594 l
-1636 4600 l
-1634 4607 l
-1633 4615 l
-1632 4624 l
-1633 4633 l
-1634 4644 l
-1636 4656 l
-1640 4669 l
-1644 4683 l
-1650 4699 l
-1657 4716 l
-1666 4734 l
-1676 4753 l
-1688 4773 l
-1702 4795 l
-1718 4818 l
-1735 4842 l
-1755 4867 l
-1778 4893 l
-1802 4919 l
-1829 4947 l
-1859 4974 l
-1891 5002 l
-1925 5029 l
-1962 5056 l
-2001 5083 l
-2043 5108 l
-2085 5132 l
-2130 5155 l
-2175 5175 l
-2222 5194 l
-2268 5211 l
-2315 5226 l
-2361 5238 l
-2407 5248 l
-2451 5256 l
-2494 5263 l
-2536 5267 l
-2575 5270 l
-2613 5271 l
-2649 5270 l
-2682 5269 l
-2713 5266 l
-2742 5263 l
-2769 5259 l
-2793 5254 l
-2816 5249 l
-2836 5243 l
-2855 5238 l
-2871 5232 l
-2886 5225 l
-2899 5219 l
-2911 5213 l
-2920 5206 l
-2929 5200 l
-2936 5194 l
-2941 5187 l
-2946 5181 l
-2949 5175 l
-2951 5169 l
-2952 5163 l
-2952 5157 l
-2951 5151 l
-2949 5145 l
-2946 5140 l
-2943 5134 l
-2938 5128 l
-2933 5123 l
-2928 5117 l
-2921 5112 l
-2914 5107 l
-2907 5101 l
-2898 5096 l
-2890 5091 l
-2880 5085 l
-S
-3421 4402 m
-3413 4431 l
-S
-3307 4418 m
-3299 4448 l
-S
-3191 4423 m
-3182 4452 l
-S
-3073 4416 m
-3063 4445 l
-S
-2953 4399 m
-2942 4428 l
-S
-2714 4337 m
-2703 4365 l
-S
-2598 4293 m
-2586 4321 l
-S
-2484 4242 m
-2471 4269 l
-S
-2374 4183 m
-2361 4210 l
-S
-2270 4117 m
-2256 4144 l
-S
-2081 3965 m
-2067 3992 l
-S
-1999 3880 m
-1984 3906 l
-S
-1928 3790 m
-1912 3815 l
-S
-1868 3693 m
-1851 3718 l
-S
-1822 3590 m
-1804 3615 l
-S
-1781 3365 m
-1761 3387 l
-S
-1796 3241 m
-1774 3262 l
-S
-1842 3108 m
-1819 3128 l
-S
-1933 2968 m
-1908 2985 l
-S
-2086 2825 m
-2058 2838 l
-S
-2673 2622 m
-2643 2620 l
-S
-3103 2675 m
-3081 2654 l
-S
-3509 2886 m
-3537 2898 l
-S
-3785 3187 m
-3805 3210 l
-S
-3920 3482 m
-3933 3510 l
-S
-3939 3918 m
-3942 3948 l
-S
-3887 4065 m
-3887 4095 l
-S
-3814 4177 m
-3812 4207 l
-S
-3728 4263 m
-3725 4293 l
-S
-3633 4326 m
-3627 4356 l
-S
-3043 3352 m
-3063 3330 l
-S
-3100 3391 m
-3121 3369 l
-S
-3155 3434 m
-3177 3413 l
-S
-3207 3480 m
-3230 3459 l
-S
-3256 3529 m
-3279 3509 l
-S
-3345 3636 m
-3369 3617 l
-S
-3384 3693 m
-3409 3676 l
-S
-3419 3753 m
-3445 3737 l
-S
-3450 3816 m
-3476 3800 l
-S
-3477 3880 m
-3504 3865 l
-S
-3518 4015 m
-3545 4002 l
-S
-3531 4084 m
-3559 4072 l
-S
-3539 4155 m
-3567 4144 l
-S
-3541 4227 m
-3570 4217 l
-S
-3538 4299 m
-3567 4290 l
-S
-3514 4445 m
-3544 4438 l
-S
-3493 4517 m
-3523 4512 l
-S
-3465 4588 m
-3495 4585 l
-S
-3430 4658 m
-3460 4656 l
-S
-3387 4726 m
-3418 4726 l
-S
-3281 4854 m
-3311 4857 l
-S
-3216 4913 m
-3246 4917 l
-S
-3143 4966 m
-3173 4973 l
-S
-3063 5013 m
-3092 5022 l
-S
-2975 5053 m
-3003 5064 l
-S
-2779 5108 m
-2805 5124 l
-S
-2673 5120 m
-2697 5139 l
-S
-2563 5121 m
-2584 5142 l
-S
-2450 5109 m
-2468 5133 l
-S
-2336 5084 m
-2350 5111 l
-S
-3529 4372 m
-3483 4387 l
-3436 4399 l
-3389 4408 l
-3340 4415 l
-3291 4420 l
-3241 4422 l
-3191 4423 l
-3140 4421 l
-3090 4418 l
-3038 4412 l
-2987 4405 l
-2936 4396 l
-2884 4385 l
-2833 4372 l
-S
-2833 4372 m
-2782 4358 l
-2731 4343 l
-2681 4325 l
-2631 4306 l
-2581 4286 l
-2532 4265 l
-2484 4242 l
-2436 4217 l
-2390 4191 l
-2344 4164 l
-2299 4136 l
-2256 4107 l
-2213 4076 l
-2172 4044 l
-S
-2172 4044 m
-2132 4011 l
-2094 3977 l
-2057 3942 l
-2022 3905 l
-1989 3868 l
-1957 3829 l
-1928 3790 l
-1901 3749 l
-1876 3707 l
-1853 3664 l
-1833 3620 l
-1832 3617 l
-1831 3614 l
-1829 3610 l
-1828 3607 l
-1827 3604 l
-1826 3601 l
-1824 3598 l
-1823 3594 l
-1822 3591 l
-1821 3588 l
-1820 3585 l
-1819 3581 l
-1817 3578 l
-1816 3575 l
-1815 3572 l
-1814 3568 l
-1813 3565 l
-1812 3562 l
-1811 3558 l
-1810 3555 l
-1809 3552 l
-1808 3549 l
-1807 3545 l
-1806 3542 l
-1805 3539 l
-1804 3535 l
-1803 3532 l
-1802 3529 l
-1801 3525 l
-1801 3522 l
-1800 3518 l
-1799 3515 l
-1798 3512 l
-1797 3508 l
-1797 3505 l
-1796 3501 l
-1795 3498 l
-1794 3495 l
-1794 3491 l
-1793 3488 l
-1792 3484 l
-1792 3481 l
-S
-1792 3481 m
-1791 3477 l
-1790 3474 l
-1790 3471 l
-1789 3467 l
-1789 3464 l
-1788 3460 l
-1788 3457 l
-1787 3453 l
-1787 3450 l
-1786 3446 l
-1786 3443 l
-1785 3439 l
-1785 3436 l
-1785 3432 l
-1784 3428 l
-1784 3425 l
-1784 3421 l
-1783 3418 l
-1783 3414 l
-1783 3411 l
-1783 3407 l
-1782 3403 l
-1782 3400 l
-1782 3396 l
-1782 3393 l
-1782 3389 l
-1782 3385 l
-1782 3382 l
-1781 3378 l
-1781 3374 l
-1781 3371 l
-1781 3367 l
-1781 3364 l
-1781 3360 l
-1782 3356 l
-1782 3352 l
-1782 3349 l
-1782 3345 l
-1782 3341 l
-1782 3338 l
-1782 3334 l
-1783 3330 l
-1783 3326 l
-1783 3323 l
-1784 3319 l
-1784 3315 l
-1784 3311 l
-1785 3308 l
-1785 3304 l
-1786 3300 l
-1786 3296 l
-1787 3292 l
-1787 3289 l
-1788 3285 l
-1788 3281 l
-1789 3277 l
-1789 3273 l
-1790 3269 l
-1791 3265 l
-1791 3262 l
-1792 3258 l
-1793 3254 l
-1794 3250 l
-1795 3246 l
-1795 3242 l
-1796 3238 l
-1797 3234 l
-1798 3230 l
-1799 3226 l
-1800 3222 l
-1801 3218 l
-1802 3214 l
-1803 3210 l
-1805 3206 l
-1806 3202 l
-1807 3198 l
-1808 3194 l
-1809 3190 l
-1811 3186 l
-1812 3182 l
-1814 3178 l
-1815 3174 l
-1816 3170 l
-1818 3166 l
-1819 3162 l
-1821 3158 l
-1822 3154 l
-1824 3150 l
-1826 3146 l
-1827 3142 l
-1829 3137 l
-1831 3133 l
-1833 3129 l
-1835 3125 l
-1836 3121 l
-1838 3117 l
-1840 3113 l
-1842 3108 l
-1844 3104 l
-1846 3100 l
-1849 3096 l
-1851 3092 l
-1853 3087 l
-1855 3083 l
-1858 3079 l
-1860 3075 l
-1862 3070 l
-1865 3066 l
-1867 3062 l
-1870 3058 l
-1872 3053 l
-1875 3049 l
-1878 3045 l
-1880 3041 l
-1883 3036 l
-1886 3032 l
-1889 3028 l
-1892 3023 l
-1895 3019 l
-1898 3015 l
-1901 3010 l
-1904 3006 l
-1907 3002 l
-1910 2997 l
-1913 2993 l
-1917 2989 l
-1920 2984 l
-1923 2980 l
-1927 2975 l
-1930 2971 l
-1934 2967 l
-1938 2962 l
-1941 2958 l
-1945 2953 l
-1949 2949 l
-1953 2945 l
-1957 2940 l
-1961 2936 l
-1965 2931 l
-1969 2927 l
-1973 2923 l
-1978 2918 l
-1982 2914 l
-1986 2909 l
-1991 2905 l
-1995 2901 l
-2000 2896 l
-2005 2892 l
-2009 2887 l
-2014 2883 l
-2019 2879 l
-2024 2874 l
-2029 2870 l
-2034 2865 l
-2039 2861 l
-2045 2857 l
-2050 2852 l
-2055 2848 l
-2061 2844 l
-2066 2839 l
-2072 2835 l
-2078 2831 l
-2084 2826 l
-2090 2822 l
-2096 2818 l
-2102 2813 l
-2108 2809 l
-2114 2805 l
-2120 2801 l
-2127 2796 l
-2133 2792 l
-2140 2788 l
-2146 2784 l
-2153 2780 l
-2160 2775 l
-2167 2771 l
-2174 2767 l
-2181 2763 l
-2188 2759 l
-2195 2755 l
-2203 2751 l
-2210 2747 l
-2218 2743 l
-2226 2739 l
-2233 2735 l
-2241 2732 l
-2249 2728 l
-2257 2724 l
-2265 2720 l
-2274 2717 l
-2282 2713 l
-2291 2709 l
-2299 2706 l
-2308 2702 l
-2317 2699 l
-2326 2695 l
-S
-2326 2695 m
-2335 2692 l
-2344 2689 l
-2353 2685 l
-2362 2682 l
-2372 2679 l
-2381 2676 l
-2391 2673 l
-2400 2670 l
-2410 2667 l
-2420 2664 l
-2430 2661 l
-2440 2659 l
-2451 2656 l
-2461 2653 l
-2472 2651 l
-2482 2649 l
-2493 2646 l
-2504 2644 l
-2514 2642 l
-2525 2640 l
-2537 2638 l
-2548 2636 l
-2559 2634 l
-2570 2633 l
-2582 2631 l
-2593 2630 l
-2605 2628 l
-2617 2627 l
-2629 2626 l
-2641 2625 l
-2653 2624 l
-2665 2623 l
-2677 2622 l
-2689 2622 l
-2702 2621 l
-2714 2621 l
-2727 2621 l
-2739 2621 l
-2752 2621 l
-2765 2621 l
-2778 2621 l
-2791 2622 l
-2804 2622 l
-2817 2623 l
-2830 2624 l
-2843 2625 l
-2856 2626 l
-2869 2627 l
-2883 2629 l
-2896 2631 l
-2909 2632 l
-2923 2634 l
-2936 2636 l
-2950 2639 l
-2963 2641 l
-2977 2644 l
-2990 2646 l
-3004 2649 l
-3017 2652 l
-3031 2655 l
-3044 2659 l
-3058 2662 l
-3071 2666 l
-3085 2670 l
-3098 2674 l
-3112 2678 l
-3125 2682 l
-3139 2687 l
-3152 2691 l
-3166 2696 l
-3179 2701 l
-3192 2706 l
-3205 2711 l
-3219 2717 l
-3232 2722 l
-3245 2728 l
-3258 2734 l
-3271 2740 l
-3284 2746 l
-3296 2752 l
-3309 2758 l
-3322 2765 l
-3334 2772 l
-3347 2778 l
-3359 2785 l
-3371 2792 l
-3383 2800 l
-3395 2807 l
-3407 2814 l
-3419 2822 l
-3431 2829 l
-3442 2837 l
-3454 2845 l
-3465 2853 l
-3476 2861 l
-3488 2869 l
-3499 2878 l
-3509 2886 l
-3520 2894 l
-3531 2903 l
-3541 2911 l
-3551 2920 l
-3562 2929 l
-3572 2938 l
-3581 2947 l
-3591 2956 l
-3601 2965 l
-3610 2974 l
-3620 2983 l
-3629 2992 l
-3638 3001 l
-3647 3010 l
-3655 3020 l
-3664 3029 l
-3672 3038 l
-3681 3048 l
-3689 3057 l
-3697 3067 l
-3705 3076 l
-3712 3086 l
-3720 3095 l
-3727 3105 l
-3734 3114 l
-3742 3124 l
-3749 3133 l
-3755 3143 l
-3762 3152 l
-3769 3162 l
-3775 3171 l
-3781 3181 l
-3787 3190 l
-3793 3200 l
-3799 3209 l
-3805 3219 l
-3811 3228 l
-3816 3238 l
-3821 3247 l
-3827 3256 l
-3832 3266 l
-3837 3275 l
-3842 3284 l
-3846 3294 l
-3851 3303 l
-3855 3312 l
-3860 3321 l
-3864 3330 l
-3868 3339 l
-3872 3348 l
-3876 3358 l
-3880 3366 l
-3883 3375 l
-3887 3384 l
-3890 3393 l
-3894 3402 l
-3897 3411 l
-3900 3419 l
-3903 3428 l
-3906 3437 l
-3909 3445 l
-3912 3454 l
-3914 3462 l
-3917 3471 l
-3919 3479 l
-3922 3488 l
-3924 3496 l
-3926 3504 l
-3928 3512 l
-3930 3520 l
-3932 3528 l
-3934 3536 l
-3936 3544 l
-3938 3552 l
-3939 3560 l
-3941 3568 l
-3942 3576 l
-3944 3583 l
-3945 3591 l
-3946 3599 l
-3947 3606 l
-3948 3614 l
-3949 3621 l
-3950 3629 l
-3951 3636 l
-3952 3643 l
-3953 3650 l
-3954 3658 l
-3954 3665 l
-3955 3672 l
-3956 3679 l
-3956 3686 l
-3956 3693 l
-3957 3700 l
-3957 3706 l
-3957 3713 l
-3958 3720 l
-3958 3727 l
-S
-3958 3727 m
-3958 3733 l
-3958 3740 l
-3958 3746 l
-3958 3753 l
-3958 3759 l
-3958 3765 l
-3957 3772 l
-3957 3778 l
-3957 3784 l
-3956 3790 l
-3956 3797 l
-3956 3803 l
-3955 3809 l
-3955 3815 l
-3954 3821 l
-3954 3826 l
-3953 3832 l
-3952 3838 l
-3952 3844 l
-3951 3849 l
-3950 3855 l
-3949 3861 l
-3948 3866 l
-3948 3872 l
-3947 3877 l
-3946 3883 l
-3945 3888 l
-3944 3893 l
-3943 3899 l
-3942 3904 l
-3940 3909 l
-3939 3914 l
-3938 3919 l
-3937 3924 l
-3936 3930 l
-3934 3935 l
-3933 3940 l
-3932 3944 l
-3931 3949 l
-3929 3954 l
-3928 3959 l
-3926 3964 l
-3925 3968 l
-3923 3973 l
-3922 3978 l
-3920 3982 l
-3919 3987 l
-3917 3992 l
-3916 3996 l
-3914 4001 l
-3912 4005 l
-3911 4009 l
-3909 4014 l
-3907 4018 l
-3906 4022 l
-3904 4027 l
-3902 4031 l
-3900 4035 l
-3899 4039 l
-3897 4043 l
-3895 4047 l
-3893 4051 l
-3891 4055 l
-3889 4059 l
-3887 4063 l
-3885 4067 l
-3883 4071 l
-3881 4075 l
-3879 4079 l
-3877 4083 l
-3875 4086 l
-3873 4090 l
-3871 4094 l
-3869 4097 l
-3867 4101 l
-3865 4105 l
-3863 4108 l
-3860 4112 l
-3858 4115 l
-3856 4119 l
-3854 4122 l
-3852 4126 l
-3849 4129 l
-3847 4133 l
-3845 4136 l
-3843 4139 l
-3840 4143 l
-3838 4146 l
-3836 4149 l
-3833 4152 l
-3831 4156 l
-3829 4159 l
-3826 4162 l
-3824 4165 l
-3821 4168 l
-3819 4171 l
-3817 4174 l
-3814 4177 l
-3812 4180 l
-3809 4183 l
-3807 4186 l
-3804 4189 l
-3802 4192 l
-3799 4195 l
-3797 4197 l
-3794 4200 l
-3792 4203 l
-3789 4206 l
-3787 4209 l
-3784 4211 l
-3781 4214 l
-3779 4217 l
-3776 4219 l
-3774 4222 l
-3771 4225 l
-3768 4227 l
-3766 4230 l
-3763 4232 l
-3760 4235 l
-3758 4237 l
-3755 4240 l
-3752 4242 l
-3749 4245 l
-3747 4247 l
-3744 4249 l
-3741 4252 l
-3738 4254 l
-3736 4256 l
-3733 4259 l
-3730 4261 l
-3727 4263 l
-3725 4266 l
-3722 4268 l
-3719 4270 l
-3716 4272 l
-3713 4274 l
-3710 4276 l
-3708 4279 l
-3705 4281 l
-3702 4283 l
-3699 4285 l
-3696 4287 l
-3693 4289 l
-3690 4291 l
-3687 4293 l
-3684 4295 l
-3681 4297 l
-3679 4299 l
-3676 4301 l
-3673 4303 l
-3670 4304 l
-3667 4306 l
-3664 4308 l
-3661 4310 l
-3658 4312 l
-3655 4314 l
-3652 4315 l
-3649 4317 l
-3646 4319 l
-3643 4321 l
-3640 4322 l
-3637 4324 l
-3634 4326 l
-3631 4327 l
-3627 4329 l
-3624 4331 l
-3621 4332 l
-3618 4334 l
-3615 4335 l
-3612 4337 l
-3609 4338 l
-3606 4340 l
-3603 4341 l
-3600 4343 l
-3596 4344 l
-3593 4346 l
-3590 4347 l
-3587 4349 l
-3584 4350 l
-3581 4352 l
-3578 4353 l
-3574 4354 l
-3571 4356 l
-3568 4357 l
-3565 4358 l
-3562 4360 l
-3558 4361 l
-3555 4362 l
-3552 4363 l
-3549 4365 l
-3546 4366 l
-3542 4367 l
-3539 4368 l
-3536 4370 l
-3533 4371 l
-3532 4371 l
-3532 4371 l
-3532 4371 l
-3532 4371 l
-S
-3532 4371 m
-3532 4371 l
-3531 4371 l
-3531 4371 l
-3531 4371 l
-3531 4371 l
-3530 4372 l
-3530 4372 l
-3530 4372 l
-3530 4372 l
-S
-2983 3317 m
-3009 3332 l
-3034 3347 l
-3060 3363 l
-3084 3380 l
-3108 3397 l
-3132 3415 l
-3155 3434 l
-3178 3453 l
-3200 3473 l
-3222 3493 l
-3243 3514 l
-3263 3536 l
-3283 3558 l
-3302 3581 l
-S
-3302 3581 m
-3321 3604 l
-3339 3628 l
-3356 3652 l
-3373 3676 l
-3389 3702 l
-3405 3727 l
-3419 3753 l
-3433 3780 l
-3446 3807 l
-3459 3834 l
-3470 3862 l
-3481 3890 l
-3491 3918 l
-3500 3947 l
-S
-3500 3947 m
-3508 3976 l
-3516 4005 l
-3522 4034 l
-3528 4064 l
-3532 4094 l
-3536 4125 l
-3539 4155 l
-3541 4186 l
-3541 4216 l
-3541 4247 l
-3540 4278 l
-3537 4310 l
-3534 4341 l
-3529 4372 l
-S
-3529 4372 m
-3524 4403 l
-3517 4434 l
-3509 4465 l
-3500 4496 l
-3489 4527 l
-3478 4558 l
-3465 4588 l
-3451 4618 l
-3435 4648 l
-3418 4678 l
-3400 4707 l
-3381 4736 l
-3360 4764 l
-3338 4792 l
-S
-3338 4792 m
-3314 4819 l
-3289 4846 l
-3263 4871 l
-3235 4896 l
-3206 4921 l
-3175 4944 l
-3143 4966 l
-3110 4987 l
-3075 5007 l
-3038 5025 l
-3001 5043 l
-2962 5058 l
-2922 5073 l
-2880 5085 l
-S
-2880 5085 m
-2838 5096 l
-2794 5105 l
-2750 5113 l
-2704 5118 l
-2658 5121 l
-2610 5122 l
-2563 5121 l
-2514 5117 l
-2466 5111 l
-2417 5103 l
-2368 5093 l
-2319 5079 l
-2271 5064 l
-2223 5046 l
-S
-4073 3746 m
-4075 3748 l
-S
-4075 3748 m
-4075 3753 l
-4075 3757 l
-4075 3762 l
-4075 3766 l
-4075 3770 l
-4075 3775 l
-4077 3777 l
-4079 3779 l
-4079 3784 l
-4079 3788 l
-S
-4079 3788 m
-4079 3793 l
-4079 3797 l
-4079 3802 l
-4079 3806 l
-4079 3811 l
-4079 3815 l
-4082 3817 l
-4084 3820 l
-4084 3824 l
-4084 3829 l
-S
-4084 3829 m
-4084 3833 l
-4084 3838 l
-4084 3842 l
-4084 3846 l
-4084 3851 l
-4084 3855 l
-4084 3860 l
-4084 3864 l
-4084 3869 l
-S
-4084 3869 m
-4084 3873 l
-4084 3878 l
-4086 3880 l
-4088 3882 l
-4088 3887 l
-4088 3891 l
-4088 3896 l
-4088 3900 l
-4088 3905 l
-4088 3909 l
-S
-4088 3909 m
-4088 3913 l
-4088 3918 l
-4088 3922 l
-4088 3927 l
-4088 3931 l
-4088 3936 l
-4088 3940 l
-4088 3945 l
-4088 3949 l
-S
-4088 3949 m
-4088 3954 l
-4088 3958 l
-4088 3963 l
-4088 3967 l
-4088 3972 l
-4088 3976 l
-4088 3981 l
-4088 3985 l
-4088 3989 l
-S
-4088 3989 m
-4088 3994 l
-4088 3998 l
-4088 4003 l
-4088 4007 l
-4088 4012 l
-4088 4016 l
-4086 4018 l
-4084 4021 l
-4084 4025 l
-4084 4030 l
-S
-4084 4030 m
-4084 4034 l
-4084 4039 l
-4084 4043 l
-4084 4048 l
-4084 4052 l
-4084 4056 l
-4084 4061 l
-4084 4065 l
-4084 4070 l
-S
-4084 4070 m
-4084 4074 l
-4084 4079 l
-4082 4081 l
-4079 4083 l
-4079 4088 l
-4079 4092 l
-4079 4097 l
-4079 4101 l
-4079 4106 l
-4079 4110 l
-S
-4079 4110 m
-4079 4115 l
-4079 4119 l
-4077 4121 l
-4075 4124 l
-4075 4128 l
-4075 4132 l
-4075 4137 l
-4075 4141 l
-4075 4146 l
-4075 4150 l
-S
-4073 4153 m
-4075 4150 l
-S
-4032 3563 m
-4035 3565 l
-4035 3569 l
-4035 3574 l
-4037 3576 l
-4039 3578 l
-4039 3583 l
-4039 3587 l
-S
-4039 3587 m
-4039 3592 l
-4041 3594 l
-4044 3596 l
-4044 3601 l
-4044 3605 l
-4044 3610 l
-4046 3612 l
-4048 3614 l
-4048 3619 l
-4048 3623 l
-4048 3627 l
-S
-4048 3627 m
-4050 3630 l
-4053 3632 l
-4053 3636 l
-4053 3641 l
-4053 3645 l
-4055 3648 l
-4057 3650 l
-4057 3654 l
-4057 3659 l
-4057 3663 l
-4057 3668 l
-S
-4057 3668 m
-4059 3670 l
-4061 3672 l
-4061 3677 l
-4061 3681 l
-4061 3686 l
-4061 3690 l
-4064 3692 l
-4066 3694 l
-4066 3699 l
-4066 3703 l
-4066 3708 l
-S
-4066 3708 m
-4066 3712 l
-4066 3717 l
-4068 3719 l
-4070 3721 l
-4070 3726 l
-4070 3730 l
-4070 3735 l
-4070 3739 l
-4070 3744 l
-4073 3746 l
-S
-4073 4153 m
-4070 4155 l
-4070 4159 l
-4070 4164 l
-4070 4168 l
-4070 4173 l
-4070 4177 l
-4068 4179 l
-4066 4182 l
-4066 4186 l
-4066 4191 l
-S
-4066 4191 m
-4066 4195 l
-4066 4199 l
-4066 4204 l
-4064 4206 l
-4061 4208 l
-4061 4213 l
-4061 4217 l
-4061 4222 l
-4061 4226 l
-4059 4229 l
-4057 4231 l
-S
-4057 4231 m
-4057 4235 l
-4057 4240 l
-4057 4244 l
-4057 4249 l
-4055 4251 l
-4053 4253 l
-4053 4258 l
-4053 4262 l
-4053 4267 l
-4050 4269 l
-4048 4271 l
-S
-4048 4271 m
-4048 4275 l
-4048 4280 l
-4048 4284 l
-4046 4287 l
-4044 4289 l
-4044 4293 l
-4044 4298 l
-4044 4302 l
-4041 4305 l
-4039 4307 l
-4039 4311 l
-S
-4032 4336 m
-4035 4334 l
-4035 4329 l
-4035 4325 l
-4037 4322 l
-4039 4320 l
-4039 4316 l
-4039 4311 l
-S
-3992 3442 m
-3994 3444 l
-3994 3449 l
-3994 3453 l
-3997 3455 l
-3999 3458 l
-3999 3462 l
-3999 3467 l
-S
-3999 3467 m
-4001 3469 l
-4003 3471 l
-4003 3476 l
-4006 3478 l
-4008 3480 l
-4008 3484 l
-4008 3489 l
-4010 3491 l
-4012 3493 l
-4012 3498 l
-4012 3502 l
-4015 3505 l
-4017 3507 l
-S
-4017 3507 m
-4017 3511 l
-4017 3516 l
-4019 3518 l
-4021 3520 l
-4021 3525 l
-4021 3529 l
-4023 3531 l
-4026 3534 l
-4026 3538 l
-4026 3543 l
-4028 3545 l
-4030 3547 l
-S
-4030 3547 m
-4030 3551 l
-4030 3556 l
-4030 3560 l
-4032 3563 l
-S
-4030 4351 m
-4030 4347 l
-4030 4342 l
-4030 4338 l
-4032 4336 l
-S
-4030 4351 m
-4028 4354 l
-4026 4356 l
-4026 4360 l
-4026 4365 l
-4023 4367 l
-4021 4369 l
-4021 4374 l
-4021 4378 l
-4019 4380 l
-4017 4383 l
-4017 4387 l
-4017 4392 l
-S
-4017 4392 m
-4015 4394 l
-4012 4396 l
-4012 4401 l
-4012 4405 l
-4010 4407 l
-4008 4410 l
-4008 4414 l
-4008 4418 l
-4006 4421 l
-4003 4423 l
-4003 4427 l
-4001 4430 l
-3999 4432 l
-S
-3992 4456 m
-3994 4454 l
-3994 4450 l
-3994 4445 l
-3997 4443 l
-3999 4441 l
-3999 4436 l
-3999 4432 l
-S
-3952 3353 m
-3954 3355 l
-3954 3359 l
-3956 3362 l
-3959 3364 l
-3959 3368 l
-3961 3371 l
-3963 3373 l
-3963 3377 l
-3965 3379 l
-3968 3382 l
-3968 3386 l
-S
-3968 3386 m
-3970 3388 l
-3972 3391 l
-3972 3395 l
-3972 3400 l
-3974 3402 l
-3977 3404 l
-3977 3408 l
-3979 3411 l
-3981 3413 l
-3981 3417 l
-3983 3420 l
-3985 3422 l
-3985 3426 l
-S
-3985 3426 m
-3985 3431 l
-3988 3433 l
-3990 3435 l
-3990 3440 l
-3992 3442 l
-S
-3985 4472 m
-3985 4468 l
-3988 4465 l
-3990 4463 l
-3990 4459 l
-3992 4456 l
-S
-3985 4472 m
-3985 4477 l
-3983 4479 l
-3981 4481 l
-3981 4486 l
-3979 4488 l
-3977 4490 l
-3977 4494 l
-3974 4497 l
-3972 4499 l
-3972 4503 l
-3972 4508 l
-3970 4510 l
-3968 4512 l
-S
-3952 4546 m
-3954 4544 l
-3954 4539 l
-3956 4537 l
-3959 4535 l
-3959 4530 l
-3961 4528 l
-3963 4526 l
-3963 4521 l
-3965 4519 l
-3968 4517 l
-3968 4512 l
-S
-3912 3272 m
-3914 3274 l
-3914 3279 l
-3916 3281 l
-3918 3283 l
-3918 3288 l
-3921 3290 l
-3923 3292 l
-3923 3297 l
-3925 3299 l
-3927 3301 l
-3927 3306 l
-S
-3927 3306 m
-3930 3308 l
-3932 3310 l
-3932 3315 l
-3934 3317 l
-3936 3319 l
-3936 3324 l
-3939 3326 l
-3941 3328 l
-3941 3333 l
-3943 3335 l
-3945 3337 l
-3945 3341 l
-3947 3344 l
-3950 3346 l
-S
-3950 3346 m
-3950 3350 l
-3952 3353 l
-S
-3950 4553 m
-3950 4548 l
-3952 4546 l
-S
-3950 4553 m
-3947 4555 l
-3945 4557 l
-3945 4561 l
-3943 4564 l
-3941 4566 l
-3941 4570 l
-3939 4573 l
-3936 4575 l
-3936 4579 l
-3934 4582 l
-3932 4584 l
-3932 4588 l
-3930 4591 l
-3927 4593 l
-S
-3912 4626 m
-3914 4624 l
-3914 4620 l
-3916 4617 l
-3918 4615 l
-3918 4611 l
-3921 4608 l
-3923 4606 l
-3923 4602 l
-3925 4599 l
-3927 4597 l
-3927 4593 l
-S
-3872 3205 m
-3874 3207 l
-3874 3212 l
-3876 3214 l
-3878 3216 l
-3878 3221 l
-3880 3223 l
-3883 3225 l
-S
-3883 3225 m
-3885 3227 l
-3887 3230 l
-3887 3234 l
-3889 3236 l
-3892 3239 l
-3894 3241 l
-3896 3243 l
-3896 3248 l
-3898 3250 l
-3901 3252 l
-3901 3257 l
-3903 3259 l
-3905 3261 l
-3905 3265 l
-S
-3905 3265 m
-3907 3268 l
-3909 3270 l
-3912 3272 l
-S
-3905 4633 m
-3907 4631 l
-3909 4629 l
-3912 4626 l
-S
-3905 4633 m
-3905 4637 l
-3903 4640 l
-3901 4642 l
-3901 4646 l
-3898 4649 l
-3896 4651 l
-3896 4655 l
-3894 4658 l
-3892 4660 l
-3889 4662 l
-3887 4664 l
-3887 4669 l
-3885 4671 l
-3883 4673 l
-S
-3872 4693 m
-3874 4691 l
-3874 4687 l
-3876 4684 l
-3878 4682 l
-3878 4678 l
-3880 4675 l
-3883 4673 l
-S
-3831 3147 m
-3834 3149 l
-3836 3152 l
-3838 3154 l
-3838 3158 l
-3840 3160 l
-3842 3163 l
-3845 3165 l
-3847 3167 l
-3847 3172 l
-3849 3174 l
-3851 3176 l
-3854 3178 l
-3856 3181 l
-3856 3185 l
-S
-3856 3185 m
-3858 3187 l
-3860 3190 l
-3863 3192 l
-3865 3194 l
-3865 3198 l
-3867 3201 l
-3869 3203 l
-3872 3205 l
-S
-3856 4713 m
-3858 4711 l
-3860 4709 l
-3863 4707 l
-3865 4704 l
-3865 4700 l
-3867 4698 l
-3869 4696 l
-3872 4693 l
-S
-3831 4751 m
-3834 4749 l
-3836 4747 l
-3838 4745 l
-3838 4740 l
-3840 4738 l
-3842 4736 l
-3845 4734 l
-3847 4731 l
-3847 4727 l
-3849 4725 l
-3851 4722 l
-3854 4720 l
-3856 4718 l
-3856 4713 l
-S
-3791 3093 m
-3793 3096 l
-3796 3098 l
-3798 3100 l
-3798 3105 l
-S
-3798 3105 m
-3800 3107 l
-3802 3109 l
-3804 3111 l
-3807 3114 l
-3809 3116 l
-3811 3118 l
-3811 3122 l
-3813 3125 l
-3816 3127 l
-3818 3129 l
-3820 3131 l
-3822 3134 l
-3825 3136 l
-3825 3140 l
-3827 3143 l
-3829 3145 l
-S
-3831 3147 m
-3829 3145 l
-S
-3829 4754 m
-3831 4751 l
-S
-3829 4754 m
-3827 4756 l
-3825 4758 l
-3825 4763 l
-3822 4765 l
-3820 4767 l
-3818 4769 l
-3816 4772 l
-3813 4774 l
-3811 4776 l
-3811 4780 l
-3809 4783 l
-3807 4785 l
-3804 4787 l
-3802 4789 l
-3800 4792 l
-3798 4794 l
-S
-3791 4805 m
-3793 4803 l
-3796 4801 l
-3798 4798 l
-3798 4794 l
-S
-3751 3044 m
-3753 3047 l
-3755 3049 l
-3758 3051 l
-3760 3053 l
-3762 3055 l
-3762 3060 l
-3764 3062 l
-3766 3064 l
-S
-3766 3064 m
-3769 3067 l
-3771 3069 l
-3773 3071 l
-3775 3073 l
-3778 3076 l
-3780 3078 l
-3782 3080 l
-3784 3082 l
-3784 3087 l
-3787 3089 l
-3789 3091 l
-3791 3093 l
-S
-3766 4834 m
-3769 4832 l
-3771 4830 l
-3773 4827 l
-3775 4825 l
-3778 4823 l
-3780 4821 l
-3782 4818 l
-3784 4816 l
-3784 4812 l
-3787 4810 l
-3789 4807 l
-3791 4805 l
-S
-3751 4854 m
-3753 4852 l
-3755 4850 l
-3758 4847 l
-3760 4845 l
-3762 4843 l
-3762 4839 l
-3764 4836 l
-3766 4834 l
-S
-3711 3000 m
-3713 3002 l
-3715 3004 l
-3717 3006 l
-3720 3009 l
-3722 3011 l
-3724 3013 l
-3726 3015 l
-3729 3017 l
-3731 3020 l
-3731 3024 l
-S
-3731 3024 m
-3733 3026 l
-3735 3029 l
-3737 3031 l
-3740 3033 l
-3742 3035 l
-3744 3038 l
-3746 3040 l
-3749 3042 l
-3751 3044 l
-S
-3731 4874 m
-3733 4872 l
-3735 4870 l
-3737 4868 l
-3740 4865 l
-3742 4863 l
-3744 4861 l
-3746 4859 l
-3749 4856 l
-3751 4854 l
-S
-3711 4899 m
-3713 4897 l
-3715 4894 l
-3717 4892 l
-3720 4890 l
-3722 4888 l
-3724 4885 l
-3726 4883 l
-3729 4881 l
-3731 4879 l
-3731 4874 l
-S
-3670 2959 m
-3673 2962 l
-3675 2964 l
-3677 2966 l
-3679 2968 l
-3682 2971 l
-3684 2973 l
-3686 2975 l
-3688 2977 l
-3691 2979 l
-3693 2982 l
-3695 2984 l
-S
-3695 2984 m
-3697 2986 l
-3699 2988 l
-3702 2991 l
-3704 2993 l
-3706 2995 l
-3708 2997 l
-3711 3000 l
-S
-3695 4915 m
-3697 4912 l
-3699 4910 l
-3702 4908 l
-3704 4906 l
-3706 4903 l
-3708 4901 l
-3711 4899 l
-S
-3670 4939 m
-3673 4937 l
-3675 4935 l
-3677 4932 l
-3679 4930 l
-3682 4928 l
-3684 4926 l
-3686 4923 l
-3688 4921 l
-3691 4919 l
-3693 4917 l
-3695 4915 l
-S
-3630 2924 m
-3635 2924 l
-3637 2926 l
-3639 2928 l
-3641 2930 l
-3644 2933 l
-3646 2935 l
-3648 2937 l
-3650 2939 l
-3653 2941 l
-3655 2944 l
-S
-3655 2944 m
-3657 2946 l
-3659 2948 l
-3661 2950 l
-3664 2953 l
-3666 2955 l
-3668 2957 l
-3670 2959 l
-S
-3655 4955 m
-3657 4953 l
-3659 4950 l
-3661 4948 l
-3664 4946 l
-3666 4944 l
-3668 4941 l
-3670 4939 l
-S
-3630 4975 m
-3635 4975 l
-3637 4973 l
-3639 4970 l
-3641 4968 l
-3644 4966 l
-3646 4964 l
-3648 4961 l
-3650 4959 l
-3653 4957 l
-3655 4955 l
-S
-3590 2888 m
-3592 2890 l
-3594 2892 l
-3599 2892 l
-3601 2895 l
-3603 2897 l
-3606 2899 l
-3608 2901 l
-3610 2903 l
-S
-3610 2903 m
-3612 2906 l
-3615 2908 l
-3617 2910 l
-3619 2912 l
-3621 2915 l
-3623 2917 l
-3626 2919 l
-3628 2921 l
-3630 2924 l
-S
-3610 4995 m
-3612 4993 l
-3615 4990 l
-3617 4988 l
-3619 4986 l
-3621 4984 l
-3623 4982 l
-3626 4979 l
-3628 4977 l
-3630 4975 l
-S
-3590 5011 m
-3592 5008 l
-3594 5006 l
-3599 5006 l
-3601 5004 l
-3603 5002 l
-3606 4999 l
-3608 4997 l
-3610 4995 l
-S
-3550 2857 m
-3554 2857 l
-3556 2859 l
-3559 2861 l
-3561 2863 l
-S
-3561 2863 m
-3563 2866 l
-3565 2868 l
-3568 2870 l
-3572 2870 l
-3574 2872 l
-3577 2874 l
-3579 2877 l
-3581 2879 l
-3583 2881 l
-3585 2883 l
-3588 2886 l
-3590 2888 l
-S
-3561 5035 m
-3563 5033 l
-3565 5031 l
-3568 5028 l
-3572 5028 l
-3574 5026 l
-3577 5024 l
-3579 5022 l
-3581 5020 l
-3583 5017 l
-3585 5015 l
-3588 5013 l
-3590 5011 l
-S
-3550 5042 m
-3554 5042 l
-3556 5040 l
-3559 5037 l
-3561 5035 l
-S
-3510 2825 m
-3512 2828 l
-3514 2830 l
-3518 2830 l
-3521 2832 l
-3523 2834 l
-3525 2836 l
-3527 2839 l
-3530 2841 l
-3532 2843 l
-3536 2843 l
-3539 2845 l
-3541 2848 l
-3543 2850 l
-3545 2852 l
-3548 2854 l
-3550 2857 l
-S
-3510 5073 m
-3512 5071 l
-3514 5069 l
-3518 5069 l
-3521 5066 l
-3523 5064 l
-3525 5062 l
-3527 5060 l
-3530 5058 l
-3532 5055 l
-3536 5055 l
-3539 5053 l
-3541 5051 l
-3543 5049 l
-3545 5046 l
-3548 5044 l
-3550 5042 l
-S
-3469 2798 m
-3474 2798 l
-3476 2801 l
-3478 2803 l
-3480 2805 l
-3483 2807 l
-3487 2807 l
-3489 2810 l
-3492 2812 l
-3494 2814 l
-3496 2816 l
-3501 2816 l
-3503 2819 l
-3505 2821 l
-3507 2823 l
-S
-3510 2825 m
-3507 2823 l
-S
-3507 5075 m
-3510 5073 l
-S
-3469 5100 m
-3474 5100 l
-3476 5098 l
-3478 5096 l
-3480 5093 l
-3483 5091 l
-3487 5091 l
-3489 5089 l
-3492 5087 l
-3494 5084 l
-3496 5082 l
-3501 5082 l
-3503 5080 l
-3505 5078 l
-3507 5075 l
-S
-3429 2772 m
-3431 2774 l
-3434 2776 l
-3438 2776 l
-3440 2778 l
-3442 2781 l
-3447 2781 l
-3449 2783 l
-S
-3449 2783 m
-3451 2785 l
-3454 2787 l
-3456 2790 l
-3460 2790 l
-3463 2792 l
-3465 2794 l
-3467 2796 l
-3469 2798 l
-S
-3449 5116 m
-3451 5113 l
-3454 5111 l
-3456 5109 l
-3460 5109 l
-3463 5107 l
-3465 5104 l
-3467 5102 l
-3469 5100 l
-S
-3429 5127 m
-3431 5125 l
-3434 5122 l
-3438 5122 l
-3440 5120 l
-3442 5118 l
-3447 5118 l
-3449 5116 l
-S
-3389 2749 m
-3393 2749 l
-3396 2752 l
-3398 2754 l
-3402 2754 l
-3405 2756 l
-3407 2758 l
-3411 2758 l
-3413 2760 l
-3416 2763 l
-3418 2765 l
-3420 2767 l
-3425 2767 l
-3427 2769 l
-3429 2772 l
-S
-3389 5149 m
-3393 5149 l
-3396 5147 l
-3398 5145 l
-3402 5145 l
-3405 5142 l
-3407 5140 l
-3411 5140 l
-3413 5138 l
-3416 5136 l
-3418 5133 l
-3420 5131 l
-3425 5131 l
-3427 5129 l
-3429 5127 l
-S
-3349 2727 m
-3353 2727 l
-3355 2729 l
-3358 2731 l
-3362 2731 l
-3364 2734 l
-3367 2736 l
-3371 2736 l
-3373 2738 l
-3375 2740 l
-3380 2740 l
-3382 2743 l
-S
-3382 2743 m
-3384 2745 l
-3387 2747 l
-3389 2749 l
-S
-3382 5156 m
-3384 5154 l
-3387 5151 l
-3389 5149 l
-S
-3349 5171 m
-3353 5171 l
-3355 5169 l
-3358 5167 l
-3362 5167 l
-3364 5165 l
-3367 5163 l
-3371 5163 l
-3373 5160 l
-3375 5158 l
-3380 5158 l
-3382 5156 l
-S
-3308 2705 m
-3311 2707 l
-3313 2709 l
-3317 2709 l
-3320 2711 l
-3322 2714 l
-3326 2714 l
-3329 2716 l
-3331 2718 l
-3335 2718 l
-3337 2720 l
-3340 2723 l
-3344 2723 l
-3346 2725 l
-3349 2727 l
-S
-3308 5194 m
-3311 5192 l
-3313 5189 l
-3317 5189 l
-3320 5187 l
-3322 5185 l
-3326 5185 l
-3329 5183 l
-3331 5180 l
-3335 5180 l
-3337 5178 l
-3340 5176 l
-3344 5176 l
-3346 5174 l
-3349 5171 l
-S
-3268 2687 m
-3273 2687 l
-3275 2689 l
-3277 2691 l
-3282 2691 l
-3284 2693 l
-3286 2696 l
-3291 2696 l
-3293 2698 l
-3295 2700 l
-3299 2700 l
-3302 2702 l
-S
-3308 2705 m
-3304 2705 l
-3302 2702 l
-S
-3302 5196 m
-3304 5194 l
-3308 5194 l
-S
-3268 5212 m
-3273 5212 l
-3275 5209 l
-3277 5207 l
-3282 5207 l
-3284 5205 l
-3286 5203 l
-3291 5203 l
-3293 5201 l
-3295 5198 l
-3299 5198 l
-3302 5196 l
-S
-3228 2669 m
-3232 2669 l
-3235 2671 l
-3237 2673 l
-3241 2673 l
-3244 2676 l
-3246 2678 l
-3250 2678 l
-3253 2680 l
-3255 2682 l
-3259 2682 l
-3264 2682 l
-3266 2685 l
-3268 2687 l
-S
-3228 5230 m
-3232 5230 l
-3235 5227 l
-3237 5225 l
-3241 5225 l
-3244 5223 l
-3246 5221 l
-3250 5221 l
-3253 5218 l
-3255 5216 l
-3259 5216 l
-3264 5216 l
-3266 5214 l
-3268 5212 l
-S
-3188 2655 m
-3192 2655 l
-3197 2655 l
-3199 2658 l
-3201 2660 l
-3206 2660 l
-3210 2660 l
-3212 2662 l
-S
-3212 2662 m
-3215 2664 l
-3219 2664 l
-3221 2667 l
-3224 2669 l
-3228 2669 l
-S
-3212 5236 m
-3215 5234 l
-3219 5234 l
-3221 5232 l
-3224 5230 l
-3228 5230 l
-S
-3188 5243 m
-3192 5243 l
-3197 5243 l
-3199 5241 l
-3201 5239 l
-3206 5239 l
-3210 5239 l
-3212 5236 l
-S
-3148 2638 m
-3150 2640 l
-3152 2642 l
-3156 2642 l
-3161 2642 l
-3163 2644 l
-3165 2647 l
-3170 2647 l
-3174 2647 l
-3177 2649 l
-3179 2651 l
-3183 2651 l
-3186 2653 l
-3188 2655 l
-S
-3148 5261 m
-3150 5259 l
-3152 5256 l
-3156 5256 l
-3161 5256 l
-3163 5254 l
-3165 5252 l
-3170 5252 l
-3174 5252 l
-3177 5250 l
-3179 5247 l
-3183 5247 l
-3186 5245 l
-3188 5243 l
-S
-3107 2624 m
-3110 2626 l
-3112 2629 l
-3116 2629 l
-3121 2629 l
-3123 2631 l
-3125 2633 l
-3130 2633 l
-3134 2633 l
-3136 2635 l
-3139 2638 l
-3143 2638 l
-3148 2638 l
-S
-3107 5274 m
-3110 5272 l
-3112 5270 l
-3116 5270 l
-3121 5270 l
-3123 5268 l
-3125 5265 l
-3130 5265 l
-3134 5265 l
-3136 5263 l
-3139 5261 l
-3143 5261 l
-3148 5261 l
-S
-3067 2615 m
-3072 2615 l
-3076 2615 l
-3078 2617 l
-3081 2620 l
-3085 2620 l
-3089 2620 l
-3092 2622 l
-S
-3107 2624 m
-3103 2624 l
-3098 2624 l
-3094 2624 l
-3092 2622 l
-S
-3092 5277 m
-3094 5274 l
-3098 5274 l
-3103 5274 l
-3107 5274 l
-S
-3067 5283 m
-3072 5283 l
-3076 5283 l
-3078 5281 l
-3081 5279 l
-3085 5279 l
-3089 5279 l
-3092 5277 l
-S
-3027 2606 m
-3031 2606 l
-3036 2606 l
-3040 2606 l
-3043 2609 l
-3045 2611 l
-3049 2611 l
-3054 2611 l
-3058 2611 l
-3060 2613 l
-3063 2615 l
-3067 2615 l
-S
-3027 5292 m
-3031 5292 l
-3036 5292 l
-3040 5292 l
-3043 5290 l
-3045 5288 l
-3049 5288 l
-3054 5288 l
-3058 5288 l
-3060 5285 l
-3063 5283 l
-3067 5283 l
-S
-2987 2597 m
-2991 2597 l
-2996 2597 l
-3000 2597 l
-3005 2597 l
-3007 2600 l
-3009 2602 l
-3013 2602 l
-3018 2602 l
-3022 2602 l
-3025 2604 l
-3027 2606 l
-S
-2987 5301 m
-2991 5301 l
-2996 5301 l
-3000 5301 l
-3005 5301 l
-3007 5299 l
-3009 5297 l
-3013 5297 l
-3018 5297 l
-3022 5297 l
-3025 5294 l
-3027 5292 l
-S
-2946 2588 m
-2951 2588 l
-2955 2588 l
-2960 2588 l
-2962 2591 l
-2964 2593 l
-2969 2593 l
-2973 2593 l
-2978 2593 l
-2982 2593 l
-2984 2595 l
-2987 2597 l
-S
-2946 5310 m
-2951 5310 l
-2955 5310 l
-2960 5310 l
-2962 5308 l
-2964 5306 l
-2969 5306 l
-2973 5306 l
-2978 5306 l
-2982 5306 l
-2984 5303 l
-2987 5301 l
-S
-2906 2579 m
-2908 2582 l
-S
-2908 2582 m
-2911 2584 l
-2915 2584 l
-2920 2584 l
-2924 2584 l
-2929 2584 l
-2933 2584 l
-2935 2586 l
-2938 2588 l
-2942 2588 l
-2946 2588 l
-S
-2908 5317 m
-2911 5314 l
-2915 5314 l
-2920 5314 l
-2924 5314 l
-2929 5314 l
-2933 5314 l
-2935 5312 l
-2938 5310 l
-2942 5310 l
-2946 5310 l
-S
-2906 5319 m
-2908 5317 l
-S
-2866 2575 m
-2870 2575 l
-2875 2575 l
-2877 2577 l
-2879 2579 l
-2884 2579 l
-2888 2579 l
-2893 2579 l
-2897 2579 l
-2902 2579 l
-2906 2579 l
-S
-2906 5319 m
-2902 5319 l
-2897 5319 l
-2893 5319 l
-2888 5319 l
-2884 5319 l
-2879 5319 l
-2877 5321 l
-2875 5323 l
-2870 5323 l
-2866 5323 l
-S
-2826 2571 m
-2830 2571 l
-2835 2571 l
-2837 2573 l
-2839 2575 l
-2844 2575 l
-2848 2575 l
-2853 2575 l
-2857 2575 l
-2862 2575 l
-2866 2575 l
-S
-2826 5328 m
-2830 5328 l
-2835 5328 l
-2837 5326 l
-2839 5323 l
-2844 5323 l
-2848 5323 l
-2853 5323 l
-2857 5323 l
-2862 5323 l
-2866 5323 l
-S
-2786 2571 m
-2790 2571 l
-2794 2571 l
-2799 2571 l
-2803 2571 l
-2808 2571 l
-2812 2571 l
-2817 2571 l
-2821 2571 l
-2826 2571 l
-S
-2786 5328 m
-2790 5328 l
-2794 5328 l
-2799 5328 l
-2803 5328 l
-2808 5328 l
-2812 5328 l
-2817 5328 l
-2821 5328 l
-2826 5328 l
-S
-2745 2566 m
-2750 2566 l
-2754 2566 l
-2759 2566 l
-2763 2566 l
-2768 2566 l
-2772 2566 l
-2774 2568 l
-2777 2571 l
-2781 2571 l
-2786 2571 l
-S
-2745 5332 m
-2750 5332 l
-2754 5332 l
-2759 5332 l
-2763 5332 l
-2768 5332 l
-2772 5332 l
-2774 5330 l
-2777 5328 l
-2781 5328 l
-2786 5328 l
-S
-2705 2566 m
-2710 2566 l
-2714 2566 l
-2719 2566 l
-2723 2566 l
-2727 2566 l
-2732 2566 l
-2736 2566 l
-2741 2566 l
-2745 2566 l
-S
-2705 5332 m
-2710 5332 l
-2714 5332 l
-2719 5332 l
-2723 5332 l
-2727 5332 l
-2732 5332 l
-2736 5332 l
-2741 5332 l
-2745 5332 l
-S
-2665 2566 m
-2669 2566 l
-2674 2566 l
-2678 2566 l
-2683 2566 l
-2687 2566 l
-2692 2566 l
-2696 2566 l
-2701 2566 l
-2705 2566 l
-S
-2665 5332 m
-2669 5332 l
-2674 5332 l
-2678 5332 l
-2683 5332 l
-2687 5332 l
-2692 5332 l
-2696 5332 l
-2701 5332 l
-2705 5332 l
-S
-2625 2571 m
-2629 2571 l
-2634 2571 l
-2636 2568 l
-2638 2566 l
-2643 2566 l
-2647 2566 l
-2651 2566 l
-2656 2566 l
-2660 2566 l
-2665 2566 l
-S
-2625 5328 m
-2629 5328 l
-2634 5328 l
-2636 5330 l
-2638 5332 l
-2643 5332 l
-2647 5332 l
-2651 5332 l
-2656 5332 l
-2660 5332 l
-2665 5332 l
-S
-2584 2571 m
-2589 2571 l
-2593 2571 l
-2598 2571 l
-2602 2571 l
-2607 2571 l
-2611 2571 l
-2616 2571 l
-2620 2571 l
-2625 2571 l
-S
-2584 5328 m
-2589 5328 l
-2593 5328 l
-2598 5328 l
-2602 5328 l
-2607 5328 l
-2611 5328 l
-2616 5328 l
-2620 5328 l
-2625 5328 l
-S
-2544 2575 m
-2549 2575 l
-2553 2575 l
-2558 2575 l
-2562 2575 l
-2567 2575 l
-2571 2575 l
-2573 2573 l
-2576 2571 l
-2580 2571 l
-2584 2571 l
-S
-2544 5323 m
-2549 5323 l
-2553 5323 l
-2558 5323 l
-2562 5323 l
-2567 5323 l
-2571 5323 l
-2573 5326 l
-2576 5328 l
-2580 5328 l
-2584 5328 l
-S
-2504 2579 m
-2508 2579 l
-2513 2579 l
-2517 2579 l
-2522 2579 l
-2526 2579 l
-2531 2579 l
-2533 2577 l
-2535 2575 l
-2540 2575 l
-2544 2575 l
-S
-2504 5319 m
-2508 5319 l
-2513 5319 l
-2517 5319 l
-2522 5319 l
-2526 5319 l
-2531 5319 l
-2533 5321 l
-2535 5323 l
-2540 5323 l
-2544 5323 l
-S
-2502 2582 m
-2504 2579 l
-S
-2464 2588 m
-2468 2588 l
-2473 2588 l
-2475 2586 l
-2477 2584 l
-2482 2584 l
-2486 2584 l
-2491 2584 l
-2495 2584 l
-2500 2584 l
-2502 2582 l
-S
-2464 5310 m
-2468 5310 l
-2473 5310 l
-2475 5312 l
-2477 5314 l
-2482 5314 l
-2486 5314 l
-2491 5314 l
-2495 5314 l
-2500 5314 l
-2502 5317 l
-S
-2504 5319 m
-2502 5317 l
-S
-2424 2597 m
-2426 2595 l
-2428 2593 l
-2433 2593 l
-2437 2593 l
-2441 2593 l
-2446 2593 l
-2448 2591 l
-2450 2588 l
-2455 2588 l
-2459 2588 l
-2464 2588 l
-S
-2424 5301 m
-2426 5303 l
-2428 5306 l
-2433 5306 l
-2437 5306 l
-2441 5306 l
-2446 5306 l
-2448 5308 l
-2450 5310 l
-2455 5310 l
-2459 5310 l
-2464 5310 l
-S
-2383 2606 m
-2386 2604 l
-2388 2602 l
-2392 2602 l
-2397 2602 l
-2401 2602 l
-2403 2600 l
-2406 2597 l
-2410 2597 l
-2415 2597 l
-2419 2597 l
-2424 2597 l
-S
-2383 5292 m
-2386 5294 l
-2388 5297 l
-2392 5297 l
-2397 5297 l
-2401 5297 l
-2403 5299 l
-2406 5301 l
-2410 5301 l
-2415 5301 l
-2419 5301 l
-2424 5301 l
-S
-2343 2615 m
-2348 2615 l
-2350 2613 l
-2352 2611 l
-2357 2611 l
-2361 2611 l
-2365 2611 l
-2368 2609 l
-2370 2606 l
-2374 2606 l
-2379 2606 l
-2383 2606 l
-S
-2343 5283 m
-2348 5283 l
-2350 5285 l
-2352 5288 l
-2357 5288 l
-2361 5288 l
-2365 5288 l
-2368 5290 l
-2370 5292 l
-2374 5292 l
-2379 5292 l
-2383 5292 l
-S
-2319 2622 m
-2321 2620 l
-2325 2620 l
-2330 2620 l
-2332 2617 l
-2334 2615 l
-2339 2615 l
-2343 2615 l
-S
-2303 2624 m
-2307 2624 l
-2312 2624 l
-2316 2624 l
-2319 2622 l
-S
-2303 5274 m
-2307 5274 l
-2312 5274 l
-2316 5274 l
-2319 5277 l
-S
-2319 5277 m
-2321 5279 l
-2325 5279 l
-2330 5279 l
-2332 5281 l
-2334 5283 l
-2339 5283 l
-2343 5283 l
-S
-2303 2624 m
-2301 2626 l
-2298 2629 l
-2294 2629 l
-2290 2629 l
-2287 2631 l
-2285 2633 l
-2281 2633 l
-2276 2633 l
-2274 2635 l
-2272 2638 l
-2267 2638 l
-2263 2638 l
-S
-2263 5261 m
-2267 5261 l
-2272 5261 l
-2274 5263 l
-2276 5265 l
-2281 5265 l
-2285 5265 l
-2287 5268 l
-2290 5270 l
-2294 5270 l
-2298 5270 l
-2301 5272 l
-2303 5274 l
-S
-2222 2655 m
-2225 2653 l
-2227 2651 l
-2231 2651 l
-2234 2649 l
-2236 2647 l
-2240 2647 l
-2245 2647 l
-2247 2644 l
-2249 2642 l
-2254 2642 l
-2258 2642 l
-2260 2640 l
-2263 2638 l
-S
-2222 5243 m
-2225 5245 l
-2227 5247 l
-2231 5247 l
-2234 5250 l
-2236 5252 l
-2240 5252 l
-2245 5252 l
-2247 5254 l
-2249 5256 l
-2254 5256 l
-2258 5256 l
-2260 5259 l
-2263 5261 l
-S
-2198 2662 m
-2200 2660 l
-2205 2660 l
-2209 2660 l
-2211 2658 l
-2214 2655 l
-2218 2655 l
-2222 2655 l
-S
-2182 2669 m
-2187 2669 l
-2189 2667 l
-2191 2664 l
-2196 2664 l
-2198 2662 l
-S
-2182 5230 m
-2187 5230 l
-2189 5232 l
-2191 5234 l
-2196 5234 l
-2198 5236 l
-S
-2198 5236 m
-2200 5239 l
-2205 5239 l
-2209 5239 l
-2211 5241 l
-2214 5243 l
-2218 5243 l
-2222 5243 l
-S
-2142 2687 m
-2144 2685 l
-2147 2682 l
-2151 2682 l
-2155 2682 l
-2158 2680 l
-2160 2678 l
-2164 2678 l
-2167 2676 l
-2169 2673 l
-2173 2673 l
-2176 2671 l
-2178 2669 l
-2182 2669 l
-S
-2142 5212 m
-2144 5214 l
-2147 5216 l
-2151 5216 l
-2155 5216 l
-2158 5218 l
-2160 5221 l
-2164 5221 l
-2167 5223 l
-2169 5225 l
-2173 5225 l
-2176 5227 l
-2178 5230 l
-2182 5230 l
-S
-2109 2702 m
-2111 2700 l
-2115 2700 l
-2117 2698 l
-2120 2696 l
-2124 2696 l
-2126 2693 l
-2129 2691 l
-2133 2691 l
-2135 2689 l
-2138 2687 l
-2142 2687 l
-S
-2102 2705 m
-2106 2705 l
-2109 2702 l
-S
-2102 5194 m
-2106 5194 l
-2109 5196 l
-S
-2109 5196 m
-2111 5198 l
-2115 5198 l
-2117 5201 l
-2120 5203 l
-2124 5203 l
-2126 5205 l
-2129 5207 l
-2133 5207 l
-2135 5209 l
-2138 5212 l
-2142 5212 l
-S
-2102 2705 m
-2100 2707 l
-2097 2709 l
-2093 2709 l
-2091 2711 l
-2088 2714 l
-2084 2714 l
-2082 2716 l
-2079 2718 l
-2075 2718 l
-2073 2720 l
-2071 2723 l
-2066 2723 l
-2064 2725 l
-2062 2727 l
-S
-2062 5171 m
-2064 5174 l
-2066 5176 l
-2071 5176 l
-2073 5178 l
-2075 5180 l
-2079 5180 l
-2082 5183 l
-2084 5185 l
-2088 5185 l
-2091 5187 l
-2093 5189 l
-2097 5189 l
-2100 5192 l
-2102 5194 l
-S
-2028 2743 m
-2030 2740 l
-2035 2740 l
-2037 2738 l
-2039 2736 l
-2044 2736 l
-2046 2734 l
-2048 2731 l
-2053 2731 l
-2055 2729 l
-2057 2727 l
-2062 2727 l
-S
-2021 2749 m
-2024 2747 l
-2026 2745 l
-2028 2743 l
-S
-2021 5149 m
-2024 5151 l
-2026 5154 l
-2028 5156 l
-S
-2028 5156 m
-2030 5158 l
-2035 5158 l
-2037 5160 l
-2039 5163 l
-2044 5163 l
-2046 5165 l
-2048 5167 l
-2053 5167 l
-2055 5169 l
-2057 5171 l
-2062 5171 l
-S
-1981 2772 m
-1983 2769 l
-1986 2767 l
-1990 2767 l
-1992 2765 l
-1995 2763 l
-1997 2760 l
-1999 2758 l
-2003 2758 l
-2006 2756 l
-2008 2754 l
-2012 2754 l
-2015 2752 l
-2017 2749 l
-2021 2749 l
-S
-1981 5127 m
-1983 5129 l
-1986 5131 l
-1990 5131 l
-1992 5133 l
-1995 5136 l
-1997 5138 l
-1999 5140 l
-2003 5140 l
-2006 5142 l
-2008 5145 l
-2012 5145 l
-2015 5147 l
-2017 5149 l
-2021 5149 l
-S
-1961 2783 m
-1963 2781 l
-1968 2781 l
-1970 2778 l
-1972 2776 l
-1977 2776 l
-1979 2774 l
-1981 2772 l
-S
-1941 2798 m
-1943 2796 l
-1945 2794 l
-1948 2792 l
-1950 2790 l
-1954 2790 l
-1957 2787 l
-1959 2785 l
-1961 2783 l
-S
-1941 5100 m
-1943 5102 l
-1945 5104 l
-1948 5107 l
-1950 5109 l
-1954 5109 l
-1957 5111 l
-1959 5113 l
-1961 5116 l
-S
-1961 5116 m
-1963 5118 l
-1968 5118 l
-1970 5120 l
-1972 5122 l
-1977 5122 l
-1979 5125 l
-1981 5127 l
-S
-1903 2823 m
-1905 2821 l
-1907 2819 l
-1910 2816 l
-1914 2816 l
-1916 2814 l
-1919 2812 l
-1921 2810 l
-1923 2807 l
-1928 2807 l
-1930 2805 l
-1932 2803 l
-1934 2801 l
-1936 2798 l
-1941 2798 l
-S
-1901 2825 m
-1903 2823 l
-S
-1901 5073 m
-1903 5075 l
-S
-1903 5075 m
-1905 5078 l
-1907 5080 l
-1910 5082 l
-1914 5082 l
-1916 5084 l
-1919 5087 l
-1921 5089 l
-1923 5091 l
-1928 5091 l
-1930 5093 l
-1932 5096 l
-1934 5098 l
-1936 5100 l
-1941 5100 l
-S
-1901 2825 m
-1898 2828 l
-1896 2830 l
-1892 2830 l
-1890 2832 l
-1887 2834 l
-1885 2836 l
-1883 2839 l
-1881 2841 l
-1878 2843 l
-1874 2843 l
-1872 2845 l
-1869 2848 l
-1867 2850 l
-1865 2852 l
-1863 2854 l
-1860 2857 l
-S
-1860 5042 m
-1863 5044 l
-1865 5046 l
-1867 5049 l
-1869 5051 l
-1872 5053 l
-1874 5055 l
-1878 5055 l
-1881 5058 l
-1883 5060 l
-1885 5062 l
-1887 5064 l
-1890 5066 l
-1892 5069 l
-1896 5069 l
-1898 5071 l
-1901 5073 l
-S
-1849 2863 m
-1852 2861 l
-1854 2859 l
-1856 2857 l
-1860 2857 l
-S
-1820 2888 m
-1823 2886 l
-1825 2883 l
-1827 2881 l
-1829 2879 l
-1831 2877 l
-1834 2874 l
-1836 2872 l
-1838 2870 l
-1843 2870 l
-1845 2868 l
-1847 2866 l
-1849 2863 l
-S
-1820 5011 m
-1823 5013 l
-1825 5015 l
-1827 5017 l
-1829 5020 l
-1831 5022 l
-1834 5024 l
-1836 5026 l
-1838 5028 l
-1843 5028 l
-1845 5031 l
-1847 5033 l
-1849 5035 l
-S
-1849 5035 m
-1852 5037 l
-1854 5040 l
-1856 5042 l
-1860 5042 l
-S
-1800 2903 m
-1802 2901 l
-1805 2899 l
-1807 2897 l
-1809 2895 l
-1811 2892 l
-1816 2892 l
-1818 2890 l
-1820 2888 l
-S
-1780 2924 m
-1782 2921 l
-1785 2919 l
-1787 2917 l
-1789 2915 l
-1791 2912 l
-1793 2910 l
-1796 2908 l
-1798 2906 l
-1800 2903 l
-S
-1780 4975 m
-1782 4977 l
-1785 4979 l
-1787 4982 l
-1789 4984 l
-1791 4986 l
-1793 4988 l
-1796 4990 l
-1798 4993 l
-1800 4995 l
-S
-1800 4995 m
-1802 4997 l
-1805 4999 l
-1807 5002 l
-1809 5004 l
-1811 5006 l
-1816 5006 l
-1818 5008 l
-1820 5011 l
-S
-1755 2944 m
-1758 2941 l
-1760 2939 l
-1762 2937 l
-1764 2935 l
-1767 2933 l
-1769 2930 l
-1771 2928 l
-1773 2926 l
-1776 2924 l
-1780 2924 l
-S
-1740 2959 m
-1742 2957 l
-1744 2955 l
-1747 2953 l
-1749 2950 l
-1751 2948 l
-1753 2946 l
-1755 2944 l
-S
-1740 4939 m
-1742 4941 l
-1744 4944 l
-1747 4946 l
-1749 4948 l
-1751 4950 l
-1753 4953 l
-1755 4955 l
-S
-1755 4955 m
-1758 4957 l
-1760 4959 l
-1762 4961 l
-1764 4964 l
-1767 4966 l
-1769 4968 l
-1771 4970 l
-1773 4973 l
-1776 4975 l
-1780 4975 l
-S
-1715 2984 m
-1717 2982 l
-1720 2979 l
-1722 2977 l
-1724 2975 l
-1726 2973 l
-1729 2971 l
-1731 2968 l
-1733 2966 l
-1735 2964 l
-1738 2962 l
-1740 2959 l
-S
-1700 3000 m
-1702 2997 l
-1704 2995 l
-1706 2993 l
-1709 2991 l
-1711 2988 l
-1713 2986 l
-1715 2984 l
-S
-1700 4899 m
-1702 4901 l
-1704 4903 l
-1706 4906 l
-1709 4908 l
-1711 4910 l
-1713 4912 l
-1715 4915 l
-S
-1715 4915 m
-1717 4917 l
-1720 4919 l
-1722 4921 l
-1724 4923 l
-1726 4926 l
-1729 4928 l
-1731 4930 l
-1733 4932 l
-1735 4935 l
-1738 4937 l
-1740 4939 l
-S
-1679 3024 m
-1679 3020 l
-1682 3017 l
-1684 3015 l
-1686 3013 l
-1688 3011 l
-1691 3009 l
-1693 3006 l
-1695 3004 l
-1697 3002 l
-1700 3000 l
-S
-1659 3044 m
-1662 3042 l
-1664 3040 l
-1666 3038 l
-1668 3035 l
-1671 3033 l
-1673 3031 l
-1675 3029 l
-1677 3026 l
-1679 3024 l
-S
-1659 4854 m
-1662 4856 l
-1664 4859 l
-1666 4861 l
-1668 4863 l
-1671 4865 l
-1673 4868 l
-1675 4870 l
-1677 4872 l
-1679 4874 l
-S
-1679 4874 m
-1679 4879 l
-1682 4881 l
-1684 4883 l
-1686 4885 l
-1688 4888 l
-1691 4890 l
-1693 4892 l
-1695 4894 l
-1697 4897 l
-1700 4899 l
-S
-1644 3064 m
-1646 3062 l
-1648 3060 l
-1648 3055 l
-1650 3053 l
-1653 3051 l
-1655 3049 l
-1657 3047 l
-1659 3044 l
-S
-1619 3093 m
-1621 3091 l
-1624 3089 l
-1626 3087 l
-1626 3082 l
-1628 3080 l
-1630 3078 l
-1633 3076 l
-1635 3073 l
-1637 3071 l
-1639 3069 l
-1642 3067 l
-1644 3064 l
-S
-1619 4805 m
-1621 4807 l
-1624 4810 l
-1626 4812 l
-1626 4816 l
-1628 4818 l
-1630 4821 l
-1633 4823 l
-1635 4825 l
-1637 4827 l
-1639 4830 l
-1642 4832 l
-1644 4834 l
-S
-1644 4834 m
-1646 4836 l
-1648 4839 l
-1648 4843 l
-1650 4845 l
-1653 4847 l
-1655 4850 l
-1657 4852 l
-1659 4854 l
-S
-1612 3105 m
-1612 3100 l
-1615 3098 l
-1617 3096 l
-1619 3093 l
-S
-1612 3105 m
-1610 3107 l
-1608 3109 l
-1606 3111 l
-1604 3114 l
-1601 3116 l
-1599 3118 l
-1599 3122 l
-1597 3125 l
-1595 3127 l
-1592 3129 l
-1590 3131 l
-1588 3134 l
-1586 3136 l
-1586 3140 l
-1583 3143 l
-1581 3145 l
-S
-1579 3147 m
-1581 3145 l
-S
-1579 4751 m
-1581 4754 l
-S
-1581 4754 m
-1583 4756 l
-1586 4758 l
-1586 4763 l
-1588 4765 l
-1590 4767 l
-1592 4769 l
-1595 4772 l
-1597 4774 l
-1599 4776 l
-1599 4780 l
-1601 4783 l
-1604 4785 l
-1606 4787 l
-1608 4789 l
-1610 4792 l
-1612 4794 l
-S
-1612 4794 m
-1612 4798 l
-1615 4801 l
-1617 4803 l
-1619 4805 l
-S
-1579 3147 m
-1577 3149 l
-1574 3152 l
-1572 3154 l
-1572 3158 l
-1570 3160 l
-1568 3163 l
-1566 3165 l
-1563 3167 l
-1563 3172 l
-1561 3174 l
-1559 3176 l
-1557 3178 l
-1554 3181 l
-1554 3185 l
-S
-1539 3205 m
-1541 3203 l
-1543 3201 l
-1545 3198 l
-1545 3194 l
-1548 3192 l
-1550 3190 l
-1552 3187 l
-1554 3185 l
-S
-1539 4693 m
-1541 4696 l
-1543 4698 l
-1545 4700 l
-1545 4704 l
-1548 4707 l
-1550 4709 l
-1552 4711 l
-1554 4713 l
-S
-1554 4713 m
-1554 4718 l
-1557 4720 l
-1559 4722 l
-1561 4725 l
-1563 4727 l
-1563 4731 l
-1566 4734 l
-1568 4736 l
-1570 4738 l
-1572 4740 l
-1572 4745 l
-1574 4747 l
-1577 4749 l
-1579 4751 l
-S
-1528 3225 m
-1530 3223 l
-1532 3221 l
-1532 3216 l
-1534 3214 l
-1536 3212 l
-1536 3207 l
-1539 3205 l
-S
-1528 3225 m
-1525 3227 l
-1523 3230 l
-1523 3234 l
-1521 3236 l
-1519 3239 l
-1516 3241 l
-1514 3243 l
-1514 3248 l
-1512 3250 l
-1510 3252 l
-1510 3257 l
-1507 3259 l
-1505 3261 l
-1505 3265 l
-S
-1499 3272 m
-1501 3270 l
-1503 3268 l
-1505 3265 l
-S
-1499 4626 m
-1501 4629 l
-1503 4631 l
-1505 4633 l
-S
-1505 4633 m
-1505 4637 l
-1507 4640 l
-1510 4642 l
-1510 4646 l
-1512 4649 l
-1514 4651 l
-1514 4655 l
-1516 4658 l
-1519 4660 l
-1521 4662 l
-1523 4664 l
-1523 4669 l
-1525 4671 l
-1528 4673 l
-S
-1528 4673 m
-1530 4675 l
-1532 4678 l
-1532 4682 l
-1534 4684 l
-1536 4687 l
-1536 4691 l
-1539 4693 l
-S
-1483 3306 m
-1483 3301 l
-1485 3299 l
-1487 3297 l
-1487 3292 l
-1490 3290 l
-1492 3288 l
-1492 3283 l
-1494 3281 l
-1496 3279 l
-1496 3274 l
-1499 3272 l
-S
-1483 3306 m
-1481 3308 l
-1478 3310 l
-1478 3315 l
-1476 3317 l
-1474 3319 l
-1474 3324 l
-1472 3326 l
-1469 3328 l
-1469 3333 l
-1467 3335 l
-1465 3337 l
-1465 3341 l
-1463 3344 l
-1461 3346 l
-S
-1458 3353 m
-1461 3350 l
-1461 3346 l
-S
-1458 4546 m
-1461 4548 l
-1461 4553 l
-S
-1461 4553 m
-1463 4555 l
-1465 4557 l
-1465 4561 l
-1467 4564 l
-1469 4566 l
-1469 4570 l
-1472 4573 l
-1474 4575 l
-1474 4579 l
-1476 4582 l
-1478 4584 l
-1478 4588 l
-1481 4591 l
-1483 4593 l
-S
-1483 4593 m
-1483 4597 l
-1485 4599 l
-1487 4602 l
-1487 4606 l
-1490 4608 l
-1492 4611 l
-1492 4615 l
-1494 4617 l
-1496 4620 l
-1496 4624 l
-1499 4626 l
-S
-1443 3386 m
-1443 3382 l
-1445 3379 l
-1447 3377 l
-1447 3373 l
-1449 3371 l
-1452 3368 l
-1452 3364 l
-1454 3362 l
-1456 3359 l
-1456 3355 l
-1458 3353 l
-S
-1443 3386 m
-1440 3388 l
-1438 3391 l
-1438 3395 l
-1438 3400 l
-1436 3402 l
-1434 3404 l
-1434 3408 l
-1431 3411 l
-1429 3413 l
-1429 3417 l
-1427 3420 l
-1425 3422 l
-1425 3426 l
-S
-1418 3442 m
-1420 3440 l
-1420 3435 l
-1423 3433 l
-1425 3431 l
-1425 3426 l
-S
-1418 4456 m
-1420 4459 l
-1420 4463 l
-1423 4465 l
-1425 4468 l
-1425 4472 l
-S
-1425 4472 m
-1425 4477 l
-1427 4479 l
-1429 4481 l
-1429 4486 l
-1431 4488 l
-1434 4490 l
-1434 4494 l
-1436 4497 l
-1438 4499 l
-1438 4503 l
-1438 4508 l
-1440 4510 l
-1443 4512 l
-S
-1443 4512 m
-1443 4517 l
-1445 4519 l
-1447 4521 l
-1447 4526 l
-1449 4528 l
-1452 4530 l
-1452 4535 l
-1454 4537 l
-1456 4539 l
-1456 4544 l
-1458 4546 l
-S
-1411 3467 m
-1411 3462 l
-1411 3458 l
-1414 3455 l
-1416 3453 l
-1416 3449 l
-1416 3444 l
-1418 3442 l
-S
-1411 3467 m
-1409 3469 l
-1407 3471 l
-1407 3476 l
-1405 3478 l
-1402 3480 l
-1402 3484 l
-1402 3489 l
-1400 3491 l
-1398 3493 l
-1398 3498 l
-1398 3502 l
-1396 3505 l
-1393 3507 l
-S
-1393 3507 m
-1393 3511 l
-1393 3516 l
-1391 3518 l
-1389 3520 l
-1389 3525 l
-1389 3529 l
-1387 3531 l
-1385 3534 l
-1385 3538 l
-1385 3543 l
-1382 3545 l
-1380 3547 l
-S
-1378 3563 m
-1380 3560 l
-1380 3556 l
-1380 3551 l
-1380 3547 l
-S
-1378 4336 m
-1380 4338 l
-1380 4342 l
-1380 4347 l
-1380 4351 l
-S
-1380 4351 m
-1382 4354 l
-1385 4356 l
-1385 4360 l
-1385 4365 l
-1387 4367 l
-1389 4369 l
-1389 4374 l
-1389 4378 l
-1391 4380 l
-1393 4383 l
-1393 4387 l
-1393 4392 l
-S
-1393 4392 m
-1396 4394 l
-1398 4396 l
-1398 4401 l
-1398 4405 l
-1400 4407 l
-1402 4410 l
-1402 4414 l
-1402 4418 l
-1405 4421 l
-1407 4423 l
-1407 4427 l
-1409 4430 l
-1411 4432 l
-S
-1411 4432 m
-1411 4436 l
-1411 4441 l
-1414 4443 l
-1416 4445 l
-1416 4450 l
-1416 4454 l
-1418 4456 l
-S
-1371 3587 m
-1371 3583 l
-1371 3578 l
-1373 3576 l
-1376 3574 l
-1376 3569 l
-1376 3565 l
-1378 3563 l
-S
-1371 3587 m
-1371 3592 l
-1369 3594 l
-1367 3596 l
-1367 3601 l
-1367 3605 l
-1367 3610 l
-1364 3612 l
-1362 3614 l
-1362 3619 l
-1362 3623 l
-1362 3627 l
-S
-1362 3627 m
-1360 3630 l
-1358 3632 l
-1358 3636 l
-1358 3641 l
-1358 3645 l
-1355 3648 l
-1353 3650 l
-1353 3654 l
-1353 3659 l
-1353 3663 l
-1353 3668 l
-S
-1353 3668 m
-1351 3670 l
-1349 3672 l
-1349 3677 l
-1349 3681 l
-1349 3686 l
-1349 3690 l
-1347 3692 l
-1344 3694 l
-1344 3699 l
-1344 3703 l
-1344 3708 l
-S
-1338 3746 m
-1340 3744 l
-1340 3739 l
-1340 3735 l
-1340 3730 l
-1340 3726 l
-1340 3721 l
-1342 3719 l
-1344 3717 l
-1344 3712 l
-1344 3708 l
-S
-1338 4153 m
-1340 4155 l
-1340 4159 l
-1340 4164 l
-1340 4168 l
-1340 4173 l
-1340 4177 l
-1342 4179 l
-1344 4182 l
-1344 4186 l
-1344 4191 l
-S
-1344 4191 m
-1344 4195 l
-1344 4199 l
-1344 4204 l
-1347 4206 l
-1349 4208 l
-1349 4213 l
-1349 4217 l
-1349 4222 l
-1349 4226 l
-1351 4229 l
-1353 4231 l
-S
-1353 4231 m
-1353 4235 l
-1353 4240 l
-1353 4244 l
-1353 4249 l
-1355 4251 l
-1358 4253 l
-1358 4258 l
-1358 4262 l
-1358 4267 l
-1360 4269 l
-1362 4271 l
-S
-1362 4271 m
-1362 4275 l
-1362 4280 l
-1362 4284 l
-1364 4287 l
-1367 4289 l
-1367 4293 l
-1367 4298 l
-1367 4302 l
-1369 4305 l
-1371 4307 l
-1371 4311 l
-S
-1371 4311 m
-1371 4316 l
-1371 4320 l
-1373 4322 l
-1376 4325 l
-1376 4329 l
-1376 4334 l
-1378 4336 l
-S
-1335 3748 m
-1338 3746 l
-S
-1335 3748 m
-1335 3753 l
-1335 3757 l
-1335 3762 l
-1335 3766 l
-1335 3770 l
-1335 3775 l
-1333 3777 l
-1331 3779 l
-1331 3784 l
-1331 3788 l
-S
-1331 3788 m
-1331 3793 l
-1331 3797 l
-1331 3802 l
-1331 3806 l
-1331 3811 l
-1331 3815 l
-1329 3817 l
-1326 3820 l
-1326 3824 l
-1326 3829 l
-S
-1326 3829 m
-1326 3833 l
-1326 3838 l
-1326 3842 l
-1326 3846 l
-1326 3851 l
-1326 3855 l
-1326 3860 l
-1326 3864 l
-1326 3869 l
-S
-1326 3869 m
-1326 3873 l
-1326 3878 l
-1324 3880 l
-1322 3882 l
-1322 3887 l
-1322 3891 l
-1322 3896 l
-1322 3900 l
-1322 3905 l
-1322 3909 l
-S
-1322 3909 m
-1322 3913 l
-1322 3918 l
-1322 3922 l
-1322 3927 l
-1322 3931 l
-1322 3936 l
-1322 3940 l
-1322 3945 l
-1322 3949 l
-S
-1322 3949 m
-1322 3954 l
-1322 3958 l
-1322 3963 l
-1322 3967 l
-1322 3972 l
-1322 3976 l
-1322 3981 l
-1322 3985 l
-1322 3989 l
-S
-1322 3989 m
-1322 3994 l
-1322 3998 l
-1322 4003 l
-1322 4007 l
-1322 4012 l
-1322 4016 l
-1324 4018 l
-1326 4021 l
-1326 4025 l
-1326 4030 l
-S
-1326 4030 m
-1326 4034 l
-1326 4039 l
-1326 4043 l
-1326 4048 l
-1326 4052 l
-1326 4056 l
-1326 4061 l
-1326 4065 l
-1326 4070 l
-S
-1326 4070 m
-1326 4074 l
-1326 4079 l
-1329 4081 l
-1331 4083 l
-1331 4088 l
-1331 4092 l
-1331 4097 l
-1331 4101 l
-1331 4106 l
-1331 4110 l
-S
-1331 4110 m
-1331 4115 l
-1331 4119 l
-1333 4121 l
-1335 4124 l
-1335 4128 l
-1335 4132 l
-1335 4137 l
-1335 4141 l
-1335 4146 l
-1335 4150 l
-S
-1338 4153 m
-1335 4150 l
-S
-1 g
-3879 3594 m
-3928 3594 l
-3928 3595 l
-3879 3595 l
-3842 3595 m
-3928 3595 l
-3928 3596 l
-3842 3596 l
-3806 3596 m
-3928 3596 l
-3928 3597 l
-3806 3597 l
-3806 3597 m
-3928 3597 l
-3928 3614 l
-3806 3614 l
-3806 3614 m
-3929 3614 l
-3929 3636 l
-3806 3636 l
-3807 3636 m
-3929 3636 l
-3929 3655 l
-3807 3655 l
-3807 3655 m
-3930 3655 l
-3930 3674 l
-3807 3674 l
-3808 3674 m
-3930 3674 l
-3930 3696 l
-3808 3696 l
-3808 3696 m
-3931 3696 l
-3931 3712 l
-3808 3712 l
-3809 3712 m
-3931 3712 l
-3931 3737 l
-3809 3737 l
-3809 3737 m
-3932 3737 l
-3932 3750 l
-3809 3750 l
-3810 3750 m
-3932 3750 l
-3932 3778 l
-3810 3778 l
-3810 3778 m
-3933 3778 l
-3933 3788 l
-3810 3788 l
-3811 3788 m
-3933 3788 l
-3933 3819 l
-3811 3819 l
-3811 3819 m
-3934 3819 l
-3934 3826 l
-3811 3826 l
-3812 3826 m
-3934 3826 l
-3934 3861 l
-3812 3861 l
-3812 3861 m
-3934 3861 l
-3934 3862 l
-3812 3862 l
-3812 3862 m
-3894 3862 l
-3894 3863 l
-3812 3863 l
-3812 3863 m
-3854 3863 l
-3854 3864 l
-3812 3864 l
-Y
-3927.5 3593.7 m
-3806 3597 l
-3813 3864 l
-3934 3861 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3824 3626 m
-3825 3672 l
-3858 3646 l
-3858 3658 l
-3863 3666 l
-3867 3670 l
-3879 3674 l
-3888 3674 l
-3900 3670 l
-3908 3661 l
-3912 3648 l
-3912 3636 l
-3907 3623 l
-3903 3619 l
-3895 3615 l
-S
-3826 3726 m
-3830 3713 l
-3843 3705 l
-3863 3700 l
-3876 3699 l
-3897 3703 l
-3910 3711 l
-3914 3724 l
-3914 3732 l
-3911 3745 l
-3898 3753 l
-3877 3758 l
-3865 3758 l
-3844 3755 l
-3831 3747 l
-3827 3734 l
-3826 3726 l
-S
-3829 3809 m
-3832 3797 l
-3845 3788 l
-3866 3783 l
-3878 3783 l
-3899 3787 l
-3912 3795 l
-3916 3807 l
-3917 3815 l
-3913 3828 l
-3900 3837 l
-3880 3841 l
-3867 3842 l
-3846 3838 l
-3833 3830 l
-3829 3818 l
-3829 3809 l
-S
-1 g
-2463 2687 m
-2467 2687 l
-2467 2688 l
-2463 2688 l
-2460 2688 m
-2467 2688 l
-2467 2689 l
-2460 2689 l
-2458 2689 m
-2468 2689 l
-2468 2690 l
-2458 2690 l
-2455 2690 m
-2468 2690 l
-2468 2691 l
-2455 2691 l
-2453 2691 m
-2468 2691 l
-2468 2692 l
-2453 2692 l
-2450 2692 m
-2469 2692 l
-2469 2693 l
-2450 2693 l
-2448 2693 m
-2469 2693 l
-2469 2694 l
-2448 2694 l
-2445 2694 m
-2470 2694 l
-2470 2695 l
-2445 2695 l
-2442 2695 m
-2470 2695 l
-2470 2696 l
-2442 2696 l
-2440 2696 m
-2470 2696 l
-2470 2697 l
-2440 2697 l
-2437 2697 m
-2471 2697 l
-2471 2698 l
-2437 2698 l
-2435 2698 m
-2471 2698 l
-2471 2699 l
-2435 2699 l
-2432 2699 m
-2472 2699 l
-2472 2700 l
-2432 2700 l
-2430 2700 m
-2472 2700 l
-2472 2701 l
-2430 2701 l
-2427 2701 m
-2472 2701 l
-2472 2702 l
-2427 2702 l
-2424 2702 m
-2473 2702 l
-2473 2703 l
-2424 2703 l
-2422 2703 m
-2473 2703 l
-2473 2704 l
-2422 2704 l
-2419 2704 m
-2473 2704 l
-2473 2705 l
-2419 2705 l
-2417 2705 m
-2474 2705 l
-2474 2706 l
-2417 2706 l
-2414 2706 m
-2474 2706 l
-2474 2707 l
-2414 2707 l
-2412 2707 m
-2475 2707 l
-2475 2708 l
-2412 2708 l
-2409 2708 m
-2475 2708 l
-2475 2709 l
-2409 2709 l
-2406 2709 m
-2475 2709 l
-2475 2710 l
-2406 2710 l
-2404 2710 m
-2476 2710 l
-2476 2711 l
-2404 2711 l
-2401 2711 m
-2476 2711 l
-2476 2712 l
-2401 2712 l
-2399 2712 m
-2477 2712 l
-2477 2713 l
-2399 2713 l
-2396 2713 m
-2477 2713 l
-2477 2714 l
-2396 2714 l
-2394 2714 m
-2477 2714 l
-2477 2715 l
-2394 2715 l
-2391 2715 m
-2478 2715 l
-2478 2716 l
-2391 2716 l
-2388 2716 m
-2478 2716 l
-2478 2717 l
-2388 2717 l
-2386 2717 m
-2479 2717 l
-2479 2718 l
-2386 2718 l
-2383 2718 m
-2479 2718 l
-2479 2719 l
-2383 2719 l
-2381 2719 m
-2479 2719 l
-2479 2720 l
-2381 2720 l
-2378 2720 m
-2480 2720 l
-2480 2721 l
-2378 2721 l
-2376 2721 m
-2480 2721 l
-2480 2722 l
-2376 2722 l
-2373 2722 m
-2480 2722 l
-2480 2723 l
-2373 2723 l
-2371 2723 m
-2481 2723 l
-2481 2724 l
-2371 2724 l
-2368 2724 m
-2481 2724 l
-2481 2725 l
-2368 2725 l
-2365 2725 m
-2482 2725 l
-2482 2726 l
-2365 2726 l
-2363 2726 m
-2482 2726 l
-2482 2727 l
-2363 2727 l
-2360 2727 m
-2482 2727 l
-2482 2728 l
-2360 2728 l
-2358 2728 m
-2483 2728 l
-2483 2729 l
-2358 2729 l
-2355 2729 m
-2483 2729 l
-2483 2730 l
-2355 2730 l
-2353 2730 m
-2484 2730 l
-2484 2731 l
-2353 2731 l
-2350 2731 m
-2484 2731 l
-2484 2732 l
-2350 2732 l
-2347 2732 m
-2484 2732 l
-2484 2733 l
-2347 2733 l
-2345 2733 m
-2485 2733 l
-2485 2734 l
-2345 2734 l
-2342 2734 m
-2485 2734 l
-2485 2735 l
-2342 2735 l
-2340 2735 m
-2486 2735 l
-2486 2736 l
-2340 2736 l
-2337 2736 m
-2486 2736 l
-2486 2737 l
-2337 2737 l
-2335 2737 m
-2486 2737 l
-2486 2738 l
-2335 2738 l
-2332 2738 m
-2487 2738 l
-2487 2739 l
-2332 2739 l
-2329 2739 m
-2487 2739 l
-2487 2740 l
-2329 2740 l
-2327 2740 m
-2487 2740 l
-2487 2741 l
-2327 2741 l
-2324 2741 m
-2488 2741 l
-2488 2742 l
-2324 2742 l
-2322 2742 m
-2488 2742 l
-2488 2743 l
-2322 2743 l
-2319 2743 m
-2489 2743 l
-2489 2744 l
-2319 2744 l
-2317 2744 m
-2489 2744 l
-2489 2745 l
-2317 2745 l
-2314 2745 m
-2489 2745 l
-2489 2746 l
-2314 2746 l
-2311 2746 m
-2490 2746 l
-2490 2747 l
-2311 2747 l
-2309 2747 m
-2490 2747 l
-2490 2748 l
-2309 2748 l
-2306 2748 m
-2491 2748 l
-2491 2749 l
-2306 2749 l
-2304 2749 m
-2491 2749 l
-2491 2750 l
-2304 2750 l
-2301 2750 m
-2491 2750 l
-2491 2751 l
-2301 2751 l
-2299 2751 m
-2492 2751 l
-2492 2752 l
-2299 2752 l
-2296 2752 m
-2492 2752 l
-2492 2753 l
-2296 2753 l
-2294 2753 m
-2493 2753 l
-2493 2754 l
-2294 2754 l
-2291 2754 m
-2493 2754 l
-2493 2755 l
-2291 2755 l
-2288 2755 m
-2493 2755 l
-2493 2756 l
-2288 2756 l
-2286 2756 m
-2494 2756 l
-2494 2757 l
-2286 2757 l
-2283 2757 m
-2494 2757 l
-2494 2758 l
-2283 2758 l
-2281 2758 m
-2494 2758 l
-2494 2759 l
-2281 2759 l
-2278 2759 m
-2495 2759 l
-2495 2760 l
-2278 2760 l
-2276 2760 m
-2495 2760 l
-2495 2761 l
-2276 2761 l
-2273 2761 m
-2496 2761 l
-2496 2762 l
-2273 2762 l
-2270 2762 m
-2496 2762 l
-2496 2763 l
-2270 2763 l
-2268 2763 m
-2496 2763 l
-2496 2764 l
-2268 2764 l
-2265 2764 m
-2497 2764 l
-2497 2765 l
-2265 2765 l
-2263 2765 m
-2497 2765 l
-2497 2766 l
-2263 2766 l
-2260 2766 m
-2498 2766 l
-2498 2767 l
-2260 2767 l
-2258 2767 m
-2498 2767 l
-2498 2768 l
-2258 2768 l
-2255 2768 m
-2498 2768 l
-2498 2769 l
-2255 2769 l
-2252 2769 m
-2499 2769 l
-2499 2770 l
-2252 2770 l
-2250 2770 m
-2499 2770 l
-2499 2771 l
-2250 2771 l
-2247 2771 m
-2500 2771 l
-2500 2772 l
-2247 2772 l
-2245 2772 m
-2500 2772 l
-2500 2773 l
-2245 2773 l
-2242 2773 m
-2500 2773 l
-2500 2774 l
-2242 2774 l
-2240 2774 m
-2501 2774 l
-2501 2775 l
-2240 2775 l
-2237 2775 m
-2501 2775 l
-2501 2776 l
-2237 2776 l
-2234 2776 m
-2501 2776 l
-2501 2777 l
-2234 2777 l
-2232 2777 m
-2502 2777 l
-2502 2778 l
-2232 2778 l
-2229 2778 m
-2502 2778 l
-2502 2779 l
-2229 2779 l
-2227 2779 m
-2503 2779 l
-2503 2780 l
-2227 2780 l
-2224 2780 m
-2503 2780 l
-2503 2781 l
-2224 2781 l
-2222 2781 m
-2503 2781 l
-2503 2782 l
-2222 2782 l
-2219 2782 m
-2504 2782 l
-2504 2783 l
-2219 2783 l
-2217 2783 m
-2504 2783 l
-2504 2784 l
-2217 2784 l
-2217 2784 m
-2505 2784 l
-2505 2787 l
-2217 2787 l
-2218 2787 m
-2506 2787 l
-2506 2789 l
-2218 2789 l
-2218 2789 m
-2507 2789 l
-2507 2790 l
-2218 2790 l
-2219 2790 m
-2507 2790 l
-2507 2792 l
-2219 2792 l
-2220 2792 m
-2508 2792 l
-2508 2795 l
-2220 2795 l
-2221 2795 m
-2509 2795 l
-2509 2797 l
-2221 2797 l
-2222 2797 m
-2510 2797 l
-2510 2800 l
-2222 2800 l
-2223 2800 m
-2510 2800 l
-2510 2801 l
-2223 2801 l
-2223 2801 m
-2508 2801 l
-2508 2802 l
-2223 2802 l
-2224 2802 m
-2505 2802 l
-2505 2803 l
-2224 2803 l
-2224 2803 m
-2503 2803 l
-2503 2804 l
-2224 2804 l
-2224 2804 m
-2500 2804 l
-2500 2805 l
-2224 2805 l
-2225 2805 m
-2498 2805 l
-2498 2806 l
-2225 2806 l
-2225 2806 m
-2495 2806 l
-2495 2807 l
-2225 2807 l
-2225 2807 m
-2492 2807 l
-2492 2808 l
-2225 2808 l
-2226 2808 m
-2490 2808 l
-2490 2809 l
-2226 2809 l
-2226 2809 m
-2487 2809 l
-2487 2810 l
-2226 2810 l
-2227 2810 m
-2485 2810 l
-2485 2811 l
-2227 2811 l
-2227 2811 m
-2482 2811 l
-2482 2812 l
-2227 2812 l
-2227 2812 m
-2480 2812 l
-2480 2813 l
-2227 2813 l
-2228 2813 m
-2477 2813 l
-2477 2814 l
-2228 2814 l
-2228 2814 m
-2474 2814 l
-2474 2815 l
-2228 2815 l
-2229 2815 m
-2472 2815 l
-2472 2816 l
-2229 2816 l
-2229 2816 m
-2469 2816 l
-2469 2817 l
-2229 2817 l
-2229 2817 m
-2467 2817 l
-2467 2818 l
-2229 2818 l
-2230 2818 m
-2464 2818 l
-2464 2819 l
-2230 2819 l
-2230 2819 m
-2462 2819 l
-2462 2820 l
-2230 2820 l
-2231 2820 m
-2459 2820 l
-2459 2821 l
-2231 2821 l
-2231 2821 m
-2457 2821 l
-2457 2822 l
-2231 2822 l
-2231 2822 m
-2454 2822 l
-2454 2823 l
-2231 2823 l
-2232 2823 m
-2451 2823 l
-2451 2824 l
-2232 2824 l
-2232 2824 m
-2449 2824 l
-2449 2825 l
-2232 2825 l
-2232 2825 m
-2446 2825 l
-2446 2826 l
-2232 2826 l
-2233 2826 m
-2444 2826 l
-2444 2827 l
-2233 2827 l
-2233 2827 m
-2441 2827 l
-2441 2828 l
-2233 2828 l
-2234 2828 m
-2439 2828 l
-2439 2829 l
-2234 2829 l
-2234 2829 m
-2436 2829 l
-2436 2830 l
-2234 2830 l
-2234 2830 m
-2433 2830 l
-2433 2831 l
-2234 2831 l
-2235 2831 m
-2431 2831 l
-2431 2832 l
-2235 2832 l
-2235 2832 m
-2428 2832 l
-2428 2833 l
-2235 2833 l
-2236 2833 m
-2426 2833 l
-2426 2834 l
-2236 2834 l
-2236 2834 m
-2423 2834 l
-2423 2835 l
-2236 2835 l
-2236 2835 m
-2421 2835 l
-2421 2836 l
-2236 2836 l
-2237 2836 m
-2418 2836 l
-2418 2837 l
-2237 2837 l
-2237 2837 m
-2415 2837 l
-2415 2838 l
-2237 2838 l
-2238 2838 m
-2413 2838 l
-2413 2839 l
-2238 2839 l
-2238 2839 m
-2410 2839 l
-2410 2840 l
-2238 2840 l
-2238 2840 m
-2408 2840 l
-2408 2841 l
-2238 2841 l
-2239 2841 m
-2405 2841 l
-2405 2842 l
-2239 2842 l
-2239 2842 m
-2403 2842 l
-2403 2843 l
-2239 2843 l
-2239 2843 m
-2400 2843 l
-2400 2844 l
-2239 2844 l
-2240 2844 m
-2397 2844 l
-2397 2845 l
-2240 2845 l
-2240 2845 m
-2395 2845 l
-2395 2846 l
-2240 2846 l
-2241 2846 m
-2392 2846 l
-2392 2847 l
-2241 2847 l
-2241 2847 m
-2390 2847 l
-2390 2848 l
-2241 2848 l
-2241 2848 m
-2387 2848 l
-2387 2849 l
-2241 2849 l
-2242 2849 m
-2385 2849 l
-2385 2850 l
-2242 2850 l
-2242 2850 m
-2382 2850 l
-2382 2851 l
-2242 2851 l
-2243 2851 m
-2380 2851 l
-2380 2852 l
-2243 2852 l
-2243 2852 m
-2377 2852 l
-2377 2853 l
-2243 2853 l
-2243 2853 m
-2374 2853 l
-2374 2854 l
-2243 2854 l
-2244 2854 m
-2372 2854 l
-2372 2855 l
-2244 2855 l
-2244 2855 m
-2369 2855 l
-2369 2856 l
-2244 2856 l
-2245 2856 m
-2367 2856 l
-2367 2857 l
-2245 2857 l
-2245 2857 m
-2364 2857 l
-2364 2858 l
-2245 2858 l
-2245 2858 m
-2362 2858 l
-2362 2859 l
-2245 2859 l
-2246 2859 m
-2359 2859 l
-2359 2860 l
-2246 2860 l
-2246 2860 m
-2356 2860 l
-2356 2861 l
-2246 2861 l
-2246 2861 m
-2354 2861 l
-2354 2862 l
-2246 2862 l
-2247 2862 m
-2351 2862 l
-2351 2863 l
-2247 2863 l
-2247 2863 m
-2349 2863 l
-2349 2864 l
-2247 2864 l
-2248 2864 m
-2346 2864 l
-2346 2865 l
-2248 2865 l
-2248 2865 m
-2344 2865 l
-2344 2866 l
-2248 2866 l
-2248 2866 m
-2341 2866 l
-2341 2867 l
-2248 2867 l
-2249 2867 m
-2338 2867 l
-2338 2868 l
-2249 2868 l
-2249 2868 m
-2336 2868 l
-2336 2869 l
-2249 2869 l
-2250 2869 m
-2333 2869 l
-2333 2870 l
-2250 2870 l
-2250 2870 m
-2331 2870 l
-2331 2871 l
-2250 2871 l
-2250 2871 m
-2328 2871 l
-2328 2872 l
-2250 2872 l
-2251 2872 m
-2326 2872 l
-2326 2873 l
-2251 2873 l
-2251 2873 m
-2323 2873 l
-2323 2874 l
-2251 2874 l
-2252 2874 m
-2321 2874 l
-2321 2875 l
-2252 2875 l
-2252 2875 m
-2318 2875 l
-2318 2876 l
-2252 2876 l
-2252 2876 m
-2315 2876 l
-2315 2877 l
-2252 2877 l
-2253 2877 m
-2313 2877 l
-2313 2878 l
-2253 2878 l
-2253 2878 m
-2310 2878 l
-2310 2879 l
-2253 2879 l
-2253 2879 m
-2308 2879 l
-2308 2880 l
-2253 2880 l
-2254 2880 m
-2305 2880 l
-2305 2881 l
-2254 2881 l
-2254 2881 m
-2303 2881 l
-2303 2882 l
-2254 2882 l
-2255 2882 m
-2300 2882 l
-2300 2883 l
-2255 2883 l
-2255 2883 m
-2297 2883 l
-2297 2884 l
-2255 2884 l
-2255 2884 m
-2295 2884 l
-2295 2885 l
-2255 2885 l
-2256 2885 m
-2292 2885 l
-2292 2886 l
-2256 2886 l
-2256 2886 m
-2290 2886 l
-2290 2887 l
-2256 2887 l
-2257 2887 m
-2287 2887 l
-2287 2888 l
-2257 2888 l
-2257 2888 m
-2285 2888 l
-2285 2889 l
-2257 2889 l
-2257 2889 m
-2282 2889 l
-2282 2890 l
-2257 2890 l
-2258 2890 m
-2279 2890 l
-2279 2891 l
-2258 2891 l
-2258 2891 m
-2277 2891 l
-2277 2892 l
-2258 2892 l
-2259 2892 m
-2274 2892 l
-2274 2893 l
-2259 2893 l
-2259 2893 m
-2272 2893 l
-2272 2894 l
-2259 2894 l
-2259 2894 m
-2269 2894 l
-2269 2895 l
-2259 2895 l
-2260 2895 m
-2267 2895 l
-2267 2896 l
-2260 2896 l
-2260 2896 m
-2264 2896 l
-2264 2897 l
-2260 2897 l
-Y
-2509.9 2800 m
-2466 2687 l
-2217 2784 l
-2261 2897 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2456 2731 m
-2455 2727 l
-2448 2721 l
-2442 2719 l
-2433 2718 l
-2418 2724 l
-2411 2731 l
-2409 2736 l
-2408 2746 l
-2411 2753 l
-2418 2760 l
-2430 2768 l
-2484 2792 l
-2430 2813 l
-S
-2336 2756 m
-2396 2795 l
-2338 2818 l
-S
-2336 2756 m
-2368 2838 l
-S
-2274 2780 m
-2287 2780 l
-2299 2788 l
-2311 2806 l
-2315 2818 l
-2319 2839 l
-2316 2853 l
-2305 2862 l
-2298 2865 l
-2284 2866 l
-2272 2857 l
-2261 2839 l
-2256 2827 l
-2252 2806 l
-2256 2792 l
-2266 2783 l
-2274 2780 l
-S
-1 g
-1926 3331 m
-1931 3331 l
-1931 3332 l
-1926 3332 l
-1921 3332 m
-1932 3332 l
-1932 3333 l
-1921 3333 l
-1916 3333 m
-1932 3333 l
-1932 3334 l
-1916 3334 l
-1910 3334 m
-1932 3334 l
-1932 3335 l
-1910 3335 l
-1905 3335 m
-1932 3335 l
-1932 3336 l
-1905 3336 l
-1900 3336 m
-1932 3336 l
-1932 3337 l
-1900 3337 l
-1895 3337 m
-1932 3337 l
-1932 3338 l
-1895 3338 l
-1890 3338 m
-1933 3338 l
-1933 3339 l
-1890 3339 l
-1884 3339 m
-1933 3339 l
-1933 3340 l
-1884 3340 l
-1879 3340 m
-1933 3340 l
-1933 3341 l
-1879 3341 l
-1874 3341 m
-1933 3341 l
-1933 3342 l
-1874 3342 l
-1869 3342 m
-1933 3342 l
-1933 3343 l
-1869 3343 l
-1864 3343 m
-1934 3343 l
-1934 3344 l
-1864 3344 l
-1858 3344 m
-1934 3344 l
-1934 3345 l
-1858 3345 l
-1853 3345 m
-1934 3345 l
-1934 3346 l
-1853 3346 l
-1848 3346 m
-1934 3346 l
-1934 3347 l
-1848 3347 l
-1843 3347 m
-1934 3347 l
-1934 3348 l
-1843 3348 l
-1838 3348 m
-1935 3348 l
-1935 3349 l
-1838 3349 l
-1832 3349 m
-1935 3349 l
-1935 3350 l
-1832 3350 l
-1827 3350 m
-1935 3350 l
-1935 3351 l
-1827 3351 l
-1822 3351 m
-1935 3351 l
-1935 3352 l
-1822 3352 l
-1817 3352 m
-1935 3352 l
-1935 3353 l
-1817 3353 l
-1812 3353 m
-1936 3353 l
-1936 3354 l
-1812 3354 l
-1812 3354 m
-1936 3354 l
-1936 3359 l
-1812 3359 l
-1812 3359 m
-1937 3359 l
-1937 3360 l
-1812 3360 l
-1813 3360 m
-1937 3360 l
-1937 3364 l
-1813 3364 l
-1813 3364 m
-1938 3364 l
-1938 3365 l
-1813 3365 l
-1814 3365 m
-1938 3365 l
-1938 3369 l
-1814 3369 l
-1814 3369 m
-1939 3369 l
-1939 3370 l
-1814 3370 l
-1815 3370 m
-1939 3370 l
-1939 3375 l
-1815 3375 l
-1815 3375 m
-1940 3375 l
-1940 3376 l
-1815 3376 l
-1816 3376 m
-1940 3376 l
-1940 3380 l
-1816 3380 l
-1816 3380 m
-1941 3380 l
-1941 3381 l
-1816 3381 l
-1817 3381 m
-1941 3381 l
-1941 3385 l
-1817 3385 l
-1817 3385 m
-1942 3385 l
-1942 3386 l
-1817 3386 l
-1818 3386 m
-1942 3386 l
-1942 3390 l
-1818 3390 l
-1818 3390 m
-1943 3390 l
-1943 3392 l
-1818 3392 l
-1819 3392 m
-1943 3392 l
-1943 3396 l
-1819 3396 l
-1819 3396 m
-1944 3396 l
-1944 3397 l
-1819 3397 l
-1820 3397 m
-1944 3397 l
-1944 3401 l
-1820 3401 l
-1820 3401 m
-1945 3401 l
-1945 3402 l
-1820 3402 l
-1821 3402 m
-1945 3402 l
-1945 3406 l
-1821 3406 l
-1821 3406 m
-1946 3406 l
-1946 3408 l
-1821 3408 l
-1822 3408 m
-1946 3408 l
-1946 3412 l
-1822 3412 l
-1822 3412 m
-1947 3412 l
-1947 3413 l
-1822 3413 l
-1823 3413 m
-1947 3413 l
-1947 3417 l
-1823 3417 l
-1823 3417 m
-1948 3417 l
-1948 3418 l
-1823 3418 l
-1824 3418 m
-1948 3418 l
-1948 3422 l
-1824 3422 l
-1824 3422 m
-1949 3422 l
-1949 3424 l
-1824 3424 l
-1825 3424 m
-1949 3424 l
-1949 3427 l
-1825 3427 l
-1825 3427 m
-1950 3427 l
-1950 3429 l
-1825 3429 l
-1826 3429 m
-1950 3429 l
-1950 3433 l
-1826 3433 l
-1826 3433 m
-1951 3433 l
-1951 3434 l
-1826 3434 l
-1827 3434 m
-1951 3434 l
-1951 3438 l
-1827 3438 l
-1827 3438 m
-1952 3438 l
-1952 3440 l
-1827 3440 l
-1828 3440 m
-1952 3440 l
-1952 3443 l
-1828 3443 l
-1828 3443 m
-1953 3443 l
-1953 3445 l
-1828 3445 l
-1829 3445 m
-1953 3445 l
-1953 3448 l
-1829 3448 l
-1829 3448 m
-1954 3448 l
-1954 3450 l
-1829 3450 l
-1830 3450 m
-1954 3450 l
-1954 3454 l
-1830 3454 l
-1830 3454 m
-1955 3454 l
-1955 3456 l
-1830 3456 l
-1831 3456 m
-1955 3456 l
-1955 3459 l
-1831 3459 l
-1831 3459 m
-1956 3459 l
-1956 3461 l
-1831 3461 l
-1832 3461 m
-1956 3461 l
-1956 3464 l
-1832 3464 l
-1832 3464 m
-1957 3464 l
-1957 3466 l
-1832 3466 l
-1833 3466 m
-1957 3466 l
-1957 3470 l
-1833 3470 l
-1833 3470 m
-1958 3470 l
-1958 3472 l
-1833 3472 l
-1834 3472 m
-1958 3472 l
-1958 3475 l
-1834 3475 l
-1834 3475 m
-1959 3475 l
-1959 3477 l
-1834 3477 l
-1835 3477 m
-1959 3477 l
-1959 3480 l
-1835 3480 l
-1835 3480 m
-1960 3480 l
-1960 3482 l
-1835 3482 l
-1836 3482 m
-1960 3482 l
-1960 3485 l
-1836 3485 l
-1836 3485 m
-1961 3485 l
-1961 3487 l
-1836 3487 l
-1837 3487 m
-1961 3487 l
-1961 3491 l
-1837 3491 l
-1837 3491 m
-1962 3491 l
-1962 3493 l
-1837 3493 l
-1838 3493 m
-1962 3493 l
-1962 3496 l
-1838 3496 l
-1838 3496 m
-1963 3496 l
-1963 3498 l
-1838 3498 l
-1839 3498 m
-1963 3498 l
-1963 3501 l
-1839 3501 l
-1839 3501 m
-1964 3501 l
-1964 3503 l
-1839 3503 l
-1840 3503 m
-1964 3503 l
-1964 3507 l
-1840 3507 l
-1840 3507 m
-1965 3507 l
-1965 3509 l
-1840 3509 l
-1841 3509 m
-1965 3509 l
-1965 3512 l
-1841 3512 l
-1841 3512 m
-1966 3512 l
-1966 3514 l
-1841 3514 l
-1842 3514 m
-1966 3514 l
-1966 3517 l
-1842 3517 l
-1842 3517 m
-1967 3517 l
-1967 3519 l
-1842 3519 l
-1843 3519 m
-1967 3519 l
-1967 3522 l
-1843 3522 l
-1843 3522 m
-1968 3522 l
-1968 3525 l
-1843 3525 l
-1844 3525 m
-1968 3525 l
-1968 3528 l
-1844 3528 l
-1844 3528 m
-1969 3528 l
-1969 3530 l
-1844 3530 l
-1845 3530 m
-1969 3530 l
-1969 3533 l
-1845 3533 l
-1845 3533 m
-1970 3533 l
-1970 3535 l
-1845 3535 l
-1846 3535 m
-1970 3535 l
-1970 3538 l
-1846 3538 l
-1846 3538 m
-1971 3538 l
-1971 3541 l
-1846 3541 l
-1847 3541 m
-1971 3541 l
-1971 3544 l
-1847 3544 l
-1847 3544 m
-1972 3544 l
-1972 3546 l
-1847 3546 l
-1848 3546 m
-1972 3546 l
-1972 3549 l
-1848 3549 l
-1848 3549 m
-1973 3549 l
-1973 3551 l
-1848 3551 l
-1849 3551 m
-1973 3551 l
-1973 3554 l
-1849 3554 l
-1849 3554 m
-1974 3554 l
-1974 3557 l
-1849 3557 l
-1850 3557 m
-1974 3557 l
-1974 3559 l
-1850 3559 l
-1850 3559 m
-1975 3559 l
-1975 3562 l
-1850 3562 l
-1851 3562 m
-1975 3562 l
-1975 3565 l
-1851 3565 l
-1851 3565 m
-1976 3565 l
-1976 3567 l
-1851 3567 l
-1852 3567 m
-1976 3567 l
-1976 3570 l
-1852 3570 l
-1852 3570 m
-1977 3570 l
-1977 3573 l
-1852 3573 l
-1853 3573 m
-1977 3573 l
-1977 3575 l
-1853 3575 l
-1853 3575 m
-1978 3575 l
-1978 3578 l
-1853 3578 l
-1854 3578 m
-1978 3578 l
-1978 3581 l
-1854 3581 l
-1854 3581 m
-1978 3581 l
-1978 3582 l
-1854 3582 l
-1854 3582 m
-1973 3582 l
-1973 3583 l
-1854 3583 l
-1855 3583 m
-1968 3583 l
-1968 3584 l
-1855 3584 l
-1855 3584 m
-1963 3584 l
-1963 3585 l
-1855 3585 l
-1855 3585 m
-1958 3585 l
-1958 3586 l
-1855 3586 l
-1855 3586 m
-1953 3586 l
-1953 3587 l
-1855 3587 l
-1855 3587 m
-1947 3587 l
-1947 3588 l
-1855 3588 l
-1855 3588 m
-1942 3588 l
-1942 3589 l
-1855 3589 l
-1856 3589 m
-1937 3589 l
-1937 3590 l
-1856 3590 l
-1856 3590 m
-1932 3590 l
-1932 3591 l
-1856 3591 l
-1856 3591 m
-1927 3591 l
-1927 3592 l
-1856 3592 l
-1856 3592 m
-1922 3592 l
-1922 3593 l
-1856 3593 l
-1856 3593 m
-1916 3593 l
-1916 3594 l
-1856 3594 l
-1857 3594 m
-1911 3594 l
-1911 3595 l
-1857 3595 l
-1857 3595 m
-1906 3595 l
-1906 3596 l
-1857 3596 l
-1857 3596 m
-1901 3596 l
-1901 3597 l
-1857 3597 l
-1857 3597 m
-1896 3597 l
-1896 3598 l
-1857 3598 l
-1857 3598 m
-1891 3598 l
-1891 3599 l
-1857 3599 l
-1858 3599 m
-1885 3599 l
-1885 3600 l
-1858 3600 l
-1858 3600 m
-1880 3600 l
-1880 3601 l
-1858 3601 l
-1858 3601 m
-1875 3601 l
-1875 3602 l
-1858 3602 l
-1858 3602 m
-1870 3602 l
-1870 3603 l
-1858 3603 l
-1858 3603 m
-1865 3603 l
-1865 3604 l
-1858 3604 l
-Y
-1930.7 3331.2 m
-1812 3354 l
-1859 3604 l
-1978 3581 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1848 3368 m
-1846 3377 l
-1836 3392 l
-1922 3375 l
-S
-1849 3461 m
-1851 3448 l
-1858 3443 l
-1867 3441 l
-1876 3444 l
-1881 3451 l
-1888 3467 l
-1895 3478 l
-1905 3485 l
-1914 3487 l
-1926 3485 l
-1933 3479 l
-1937 3475 l
-1938 3461 l
-1935 3445 l
-1929 3434 l
-1924 3430 l
-1915 3428 l
-1903 3430 l
-1895 3436 l
-1889 3445 l
-1887 3459 l
-1886 3476 l
-1883 3485 l
-1876 3490 l
-1868 3492 l
-1859 3489 l
-1852 3478 l
-1849 3461 l
-S
-1866 3548 m
-1867 3535 l
-1878 3524 l
-1898 3516 l
-1910 3514 l
-1931 3514 l
-1945 3520 l
-1952 3531 l
-1953 3539 l
-1952 3553 l
-1941 3563 l
-1921 3571 l
-1909 3573 l
-1887 3573 l
-1874 3567 l
-1867 3556 l
-1866 3548 l
-S
-1 g
-2178 3840 m
-2182 3840 l
-2182 3841 l
-2178 3841 l
-2178 3841 m
-2183 3841 l
-2183 3842 l
-2178 3842 l
-2177 3842 m
-2184 3842 l
-2184 3843 l
-2177 3843 l
-2176 3843 m
-2186 3843 l
-2186 3844 l
-2176 3844 l
-2175 3844 m
-2187 3844 l
-2187 3845 l
-2175 3845 l
-2174 3845 m
-2188 3845 l
-2188 3846 l
-2174 3846 l
-2174 3846 m
-2189 3846 l
-2189 3847 l
-2174 3847 l
-2173 3847 m
-2191 3847 l
-2191 3848 l
-2173 3848 l
-2172 3848 m
-2192 3848 l
-2192 3849 l
-2172 3849 l
-2171 3849 m
-2193 3849 l
-2193 3850 l
-2171 3850 l
-2170 3850 m
-2194 3850 l
-2194 3851 l
-2170 3851 l
-2170 3851 m
-2196 3851 l
-2196 3852 l
-2170 3852 l
-2169 3852 m
-2197 3852 l
-2197 3853 l
-2169 3853 l
-2168 3853 m
-2198 3853 l
-2198 3854 l
-2168 3854 l
-2167 3854 m
-2199 3854 l
-2199 3855 l
-2167 3855 l
-2166 3855 m
-2201 3855 l
-2201 3856 l
-2166 3856 l
-2166 3856 m
-2202 3856 l
-2202 3857 l
-2166 3857 l
-2165 3857 m
-2203 3857 l
-2203 3858 l
-2165 3858 l
-2164 3858 m
-2204 3858 l
-2204 3859 l
-2164 3859 l
-2163 3859 m
-2206 3859 l
-2206 3860 l
-2163 3860 l
-2162 3860 m
-2207 3860 l
-2207 3861 l
-2162 3861 l
-2162 3861 m
-2208 3861 l
-2208 3862 l
-2162 3862 l
-2161 3862 m
-2209 3862 l
-2209 3863 l
-2161 3863 l
-2160 3863 m
-2211 3863 l
-2211 3864 l
-2160 3864 l
-2159 3864 m
-2212 3864 l
-2212 3865 l
-2159 3865 l
-2158 3865 m
-2213 3865 l
-2213 3866 l
-2158 3866 l
-2158 3866 m
-2214 3866 l
-2214 3867 l
-2158 3867 l
-2157 3867 m
-2216 3867 l
-2216 3868 l
-2157 3868 l
-2156 3868 m
-2217 3868 l
-2217 3869 l
-2156 3869 l
-2155 3869 m
-2218 3869 l
-2218 3870 l
-2155 3870 l
-2154 3870 m
-2219 3870 l
-2219 3871 l
-2154 3871 l
-2154 3871 m
-2221 3871 l
-2221 3872 l
-2154 3872 l
-2153 3872 m
-2222 3872 l
-2222 3873 l
-2153 3873 l
-2152 3873 m
-2223 3873 l
-2223 3874 l
-2152 3874 l
-2151 3874 m
-2224 3874 l
-2224 3875 l
-2151 3875 l
-2150 3875 m
-2226 3875 l
-2226 3876 l
-2150 3876 l
-2150 3876 m
-2227 3876 l
-2227 3877 l
-2150 3877 l
-2149 3877 m
-2228 3877 l
-2228 3878 l
-2149 3878 l
-2148 3878 m
-2229 3878 l
-2229 3879 l
-2148 3879 l
-2147 3879 m
-2231 3879 l
-2231 3880 l
-2147 3880 l
-2146 3880 m
-2232 3880 l
-2232 3881 l
-2146 3881 l
-2146 3881 m
-2233 3881 l
-2233 3882 l
-2146 3882 l
-2145 3882 m
-2234 3882 l
-2234 3883 l
-2145 3883 l
-2144 3883 m
-2236 3883 l
-2236 3884 l
-2144 3884 l
-2143 3884 m
-2237 3884 l
-2237 3885 l
-2143 3885 l
-2143 3885 m
-2238 3885 l
-2238 3886 l
-2143 3886 l
-2142 3886 m
-2239 3886 l
-2239 3887 l
-2142 3887 l
-2141 3887 m
-2241 3887 l
-2241 3888 l
-2141 3888 l
-2140 3888 m
-2242 3888 l
-2242 3889 l
-2140 3889 l
-2139 3889 m
-2243 3889 l
-2243 3890 l
-2139 3890 l
-2139 3890 m
-2244 3890 l
-2244 3891 l
-2139 3891 l
-2138 3891 m
-2246 3891 l
-2246 3892 l
-2138 3892 l
-2137 3892 m
-2247 3892 l
-2247 3893 l
-2137 3893 l
-2136 3893 m
-2248 3893 l
-2248 3894 l
-2136 3894 l
-2135 3894 m
-2249 3894 l
-2249 3895 l
-2135 3895 l
-2135 3895 m
-2251 3895 l
-2251 3896 l
-2135 3896 l
-2134 3896 m
-2252 3896 l
-2252 3897 l
-2134 3897 l
-2133 3897 m
-2253 3897 l
-2253 3898 l
-2133 3898 l
-2132 3898 m
-2254 3898 l
-2254 3899 l
-2132 3899 l
-2131 3899 m
-2256 3899 l
-2256 3900 l
-2131 3900 l
-2131 3900 m
-2257 3900 l
-2257 3901 l
-2131 3901 l
-2130 3901 m
-2258 3901 l
-2258 3902 l
-2130 3902 l
-2129 3902 m
-2259 3902 l
-2259 3903 l
-2129 3903 l
-2128 3903 m
-2261 3903 l
-2261 3904 l
-2128 3904 l
-2127 3904 m
-2262 3904 l
-2262 3905 l
-2127 3905 l
-2127 3905 m
-2263 3905 l
-2263 3906 l
-2127 3906 l
-2126 3906 m
-2264 3906 l
-2264 3907 l
-2126 3907 l
-2125 3907 m
-2266 3907 l
-2266 3908 l
-2125 3908 l
-2124 3908 m
-2267 3908 l
-2267 3909 l
-2124 3909 l
-2123 3909 m
-2268 3909 l
-2268 3910 l
-2123 3910 l
-2123 3910 m
-2269 3910 l
-2269 3911 l
-2123 3911 l
-2122 3911 m
-2271 3911 l
-2271 3912 l
-2122 3912 l
-2121 3912 m
-2272 3912 l
-2272 3913 l
-2121 3913 l
-2120 3913 m
-2273 3913 l
-2273 3914 l
-2120 3914 l
-2119 3914 m
-2274 3914 l
-2274 3915 l
-2119 3915 l
-2119 3915 m
-2276 3915 l
-2276 3916 l
-2119 3916 l
-2118 3916 m
-2277 3916 l
-2277 3917 l
-2118 3917 l
-2117 3917 m
-2278 3917 l
-2278 3918 l
-2117 3918 l
-2116 3918 m
-2279 3918 l
-2279 3919 l
-2116 3919 l
-2115 3919 m
-2281 3919 l
-2281 3920 l
-2115 3920 l
-2115 3920 m
-2282 3920 l
-2282 3921 l
-2115 3921 l
-2114 3921 m
-2283 3921 l
-2283 3922 l
-2114 3922 l
-2113 3922 m
-2284 3922 l
-2284 3923 l
-2113 3923 l
-2112 3923 m
-2286 3923 l
-2286 3924 l
-2112 3924 l
-2111 3924 m
-2287 3924 l
-2287 3925 l
-2111 3925 l
-2111 3925 m
-2288 3925 l
-2288 3926 l
-2111 3926 l
-2110 3926 m
-2289 3926 l
-2289 3927 l
-2110 3927 l
-2109 3927 m
-2291 3927 l
-2291 3928 l
-2109 3928 l
-2108 3928 m
-2292 3928 l
-2292 3929 l
-2108 3929 l
-2107 3929 m
-2293 3929 l
-2293 3930 l
-2107 3930 l
-2107 3930 m
-2294 3930 l
-2294 3931 l
-2107 3931 l
-2106 3931 m
-2296 3931 l
-2296 3932 l
-2106 3932 l
-2105 3932 m
-2297 3932 l
-2297 3933 l
-2105 3933 l
-2104 3933 m
-2298 3933 l
-2298 3934 l
-2104 3934 l
-2104 3934 m
-2299 3934 l
-2299 3935 l
-2104 3935 l
-2104 3935 m
-2301 3935 l
-2301 3936 l
-2104 3936 l
-2105 3936 m
-2302 3936 l
-2302 3937 l
-2105 3937 l
-2106 3937 m
-2303 3937 l
-2303 3938 l
-2106 3938 l
-2107 3938 m
-2304 3938 l
-2304 3939 l
-2107 3939 l
-2109 3939 m
-2306 3939 l
-2306 3940 l
-2109 3940 l
-2110 3940 m
-2307 3940 l
-2307 3941 l
-2110 3941 l
-2111 3941 m
-2308 3941 l
-2308 3942 l
-2111 3942 l
-2112 3942 m
-2309 3942 l
-2309 3943 l
-2112 3943 l
-2114 3943 m
-2311 3943 l
-2311 3944 l
-2114 3944 l
-2115 3944 m
-2312 3944 l
-2312 3945 l
-2115 3945 l
-2116 3945 m
-2313 3945 l
-2313 3946 l
-2116 3946 l
-2117 3946 m
-2314 3946 l
-2314 3947 l
-2117 3947 l
-2119 3947 m
-2316 3947 l
-2316 3948 l
-2119 3948 l
-2120 3948 m
-2317 3948 l
-2317 3949 l
-2120 3949 l
-2121 3949 m
-2318 3949 l
-2318 3950 l
-2121 3950 l
-2122 3950 m
-2319 3950 l
-2319 3951 l
-2122 3951 l
-2124 3951 m
-2321 3951 l
-2321 3952 l
-2124 3952 l
-2125 3952 m
-2322 3952 l
-2322 3953 l
-2125 3953 l
-2126 3953 m
-2323 3953 l
-2323 3954 l
-2126 3954 l
-2127 3954 m
-2324 3954 l
-2324 3955 l
-2127 3955 l
-2129 3955 m
-2326 3955 l
-2326 3956 l
-2129 3956 l
-2130 3956 m
-2327 3956 l
-2327 3957 l
-2130 3957 l
-2131 3957 m
-2328 3957 l
-2328 3958 l
-2131 3958 l
-2132 3958 m
-2329 3958 l
-2329 3959 l
-2132 3959 l
-2134 3959 m
-2331 3959 l
-2331 3960 l
-2134 3960 l
-2135 3960 m
-2332 3960 l
-2332 3961 l
-2135 3961 l
-2136 3961 m
-2333 3961 l
-2333 3962 l
-2136 3962 l
-2138 3962 m
-2334 3962 l
-2334 3963 l
-2138 3963 l
-2139 3963 m
-2336 3963 l
-2336 3964 l
-2139 3964 l
-2140 3964 m
-2337 3964 l
-2337 3965 l
-2140 3965 l
-2141 3965 m
-2338 3965 l
-2338 3966 l
-2141 3966 l
-2143 3966 m
-2339 3966 l
-2339 3967 l
-2143 3967 l
-2144 3967 m
-2341 3967 l
-2341 3968 l
-2144 3968 l
-2145 3968 m
-2342 3968 l
-2342 3969 l
-2145 3969 l
-2146 3969 m
-2343 3969 l
-2343 3970 l
-2146 3970 l
-2148 3970 m
-2344 3970 l
-2344 3971 l
-2148 3971 l
-2149 3971 m
-2346 3971 l
-2346 3972 l
-2149 3972 l
-2150 3972 m
-2347 3972 l
-2347 3973 l
-2150 3973 l
-2151 3973 m
-2348 3973 l
-2348 3974 l
-2151 3974 l
-2153 3974 m
-2349 3974 l
-2349 3975 l
-2153 3975 l
-2154 3975 m
-2351 3975 l
-2351 3976 l
-2154 3976 l
-2155 3976 m
-2352 3976 l
-2352 3977 l
-2155 3977 l
-2156 3977 m
-2353 3977 l
-2353 3978 l
-2156 3978 l
-2158 3978 m
-2354 3978 l
-2354 3979 l
-2158 3979 l
-2159 3979 m
-2356 3979 l
-2356 3980 l
-2159 3980 l
-2160 3980 m
-2357 3980 l
-2357 3981 l
-2160 3981 l
-2161 3981 m
-2358 3981 l
-2358 3982 l
-2161 3982 l
-2163 3982 m
-2359 3982 l
-2359 3983 l
-2163 3983 l
-2164 3983 m
-2361 3983 l
-2361 3984 l
-2164 3984 l
-2165 3984 m
-2362 3984 l
-2362 3985 l
-2165 3985 l
-2166 3985 m
-2363 3985 l
-2363 3986 l
-2166 3986 l
-2168 3986 m
-2364 3986 l
-2364 3987 l
-2168 3987 l
-2169 3987 m
-2366 3987 l
-2366 3988 l
-2169 3988 l
-2170 3988 m
-2367 3988 l
-2367 3989 l
-2170 3989 l
-2172 3989 m
-2368 3989 l
-2368 3990 l
-2172 3990 l
-2173 3990 m
-2369 3990 l
-2369 3991 l
-2173 3991 l
-2174 3991 m
-2371 3991 l
-2371 3992 l
-2174 3992 l
-2175 3992 m
-2372 3992 l
-2372 3993 l
-2175 3993 l
-2177 3993 m
-2373 3993 l
-2373 3994 l
-2177 3994 l
-2178 3994 m
-2374 3994 l
-2374 3995 l
-2178 3995 l
-2179 3995 m
-2376 3995 l
-2376 3996 l
-2179 3996 l
-2180 3996 m
-2377 3996 l
-2377 3997 l
-2180 3997 l
-2182 3997 m
-2378 3997 l
-2378 3998 l
-2182 3998 l
-2183 3998 m
-2379 3998 l
-2379 3999 l
-2183 3999 l
-2184 3999 m
-2379 3999 l
-2379 4000 l
-2184 4000 l
-2185 4000 m
-2379 4000 l
-2379 4001 l
-2185 4001 l
-2187 4001 m
-2378 4001 l
-2378 4002 l
-2187 4002 l
-2188 4002 m
-2377 4002 l
-2377 4003 l
-2188 4003 l
-2189 4003 m
-2376 4003 l
-2376 4004 l
-2189 4004 l
-2190 4004 m
-2375 4004 l
-2375 4005 l
-2190 4005 l
-2192 4005 m
-2375 4005 l
-2375 4006 l
-2192 4006 l
-2193 4006 m
-2374 4006 l
-2374 4007 l
-2193 4007 l
-2194 4007 m
-2373 4007 l
-2373 4008 l
-2194 4008 l
-2195 4008 m
-2372 4008 l
-2372 4009 l
-2195 4009 l
-2197 4009 m
-2371 4009 l
-2371 4010 l
-2197 4010 l
-2198 4010 m
-2371 4010 l
-2371 4011 l
-2198 4011 l
-2199 4011 m
-2370 4011 l
-2370 4012 l
-2199 4012 l
-2200 4012 m
-2369 4012 l
-2369 4013 l
-2200 4013 l
-2202 4013 m
-2368 4013 l
-2368 4014 l
-2202 4014 l
-2203 4014 m
-2367 4014 l
-2367 4015 l
-2203 4015 l
-2204 4015 m
-2367 4015 l
-2367 4016 l
-2204 4016 l
-2206 4016 m
-2366 4016 l
-2366 4017 l
-2206 4017 l
-2207 4017 m
-2365 4017 l
-2365 4018 l
-2207 4018 l
-2208 4018 m
-2364 4018 l
-2364 4019 l
-2208 4019 l
-2209 4019 m
-2363 4019 l
-2363 4020 l
-2209 4020 l
-2211 4020 m
-2363 4020 l
-2363 4021 l
-2211 4021 l
-2212 4021 m
-2362 4021 l
-2362 4022 l
-2212 4022 l
-2213 4022 m
-2361 4022 l
-2361 4023 l
-2213 4023 l
-2214 4023 m
-2360 4023 l
-2360 4024 l
-2214 4024 l
-2216 4024 m
-2359 4024 l
-2359 4025 l
-2216 4025 l
-2217 4025 m
-2358 4025 l
-2358 4026 l
-2217 4026 l
-2218 4026 m
-2358 4026 l
-2358 4027 l
-2218 4027 l
-2219 4027 m
-2357 4027 l
-2357 4028 l
-2219 4028 l
-2221 4028 m
-2356 4028 l
-2356 4029 l
-2221 4029 l
-2222 4029 m
-2355 4029 l
-2355 4030 l
-2222 4030 l
-2223 4030 m
-2354 4030 l
-2354 4031 l
-2223 4031 l
-2224 4031 m
-2354 4031 l
-2354 4032 l
-2224 4032 l
-2226 4032 m
-2353 4032 l
-2353 4033 l
-2226 4033 l
-2227 4033 m
-2352 4033 l
-2352 4034 l
-2227 4034 l
-2228 4034 m
-2351 4034 l
-2351 4035 l
-2228 4035 l
-2229 4035 m
-2350 4035 l
-2350 4036 l
-2229 4036 l
-2231 4036 m
-2350 4036 l
-2350 4037 l
-2231 4037 l
-2232 4037 m
-2349 4037 l
-2349 4038 l
-2232 4038 l
-2233 4038 m
-2348 4038 l
-2348 4039 l
-2233 4039 l
-2234 4039 m
-2347 4039 l
-2347 4040 l
-2234 4040 l
-2236 4040 m
-2346 4040 l
-2346 4041 l
-2236 4041 l
-2237 4041 m
-2346 4041 l
-2346 4042 l
-2237 4042 l
-2238 4042 m
-2345 4042 l
-2345 4043 l
-2238 4043 l
-2240 4043 m
-2344 4043 l
-2344 4044 l
-2240 4044 l
-2241 4044 m
-2343 4044 l
-2343 4045 l
-2241 4045 l
-2242 4045 m
-2342 4045 l
-2342 4046 l
-2242 4046 l
-2243 4046 m
-2341 4046 l
-2341 4047 l
-2243 4047 l
-2245 4047 m
-2341 4047 l
-2341 4048 l
-2245 4048 l
-2246 4048 m
-2340 4048 l
-2340 4049 l
-2246 4049 l
-2247 4049 m
-2339 4049 l
-2339 4050 l
-2247 4050 l
-2248 4050 m
-2338 4050 l
-2338 4051 l
-2248 4051 l
-2250 4051 m
-2337 4051 l
-2337 4052 l
-2250 4052 l
-2251 4052 m
-2337 4052 l
-2337 4053 l
-2251 4053 l
-2252 4053 m
-2336 4053 l
-2336 4054 l
-2252 4054 l
-2253 4054 m
-2335 4054 l
-2335 4055 l
-2253 4055 l
-2255 4055 m
-2334 4055 l
-2334 4056 l
-2255 4056 l
-2256 4056 m
-2333 4056 l
-2333 4057 l
-2256 4057 l
-2257 4057 m
-2333 4057 l
-2333 4058 l
-2257 4058 l
-2258 4058 m
-2332 4058 l
-2332 4059 l
-2258 4059 l
-2260 4059 m
-2331 4059 l
-2331 4060 l
-2260 4060 l
-2261 4060 m
-2330 4060 l
-2330 4061 l
-2261 4061 l
-2262 4061 m
-2329 4061 l
-2329 4062 l
-2262 4062 l
-2263 4062 m
-2329 4062 l
-2329 4063 l
-2263 4063 l
-2265 4063 m
-2328 4063 l
-2328 4064 l
-2265 4064 l
-2266 4064 m
-2327 4064 l
-2327 4065 l
-2266 4065 l
-2267 4065 m
-2326 4065 l
-2326 4066 l
-2267 4066 l
-2268 4066 m
-2325 4066 l
-2325 4067 l
-2268 4067 l
-2270 4067 m
-2325 4067 l
-2325 4068 l
-2270 4068 l
-2271 4068 m
-2324 4068 l
-2324 4069 l
-2271 4069 l
-2272 4069 m
-2323 4069 l
-2323 4070 l
-2272 4070 l
-2274 4070 m
-2322 4070 l
-2322 4071 l
-2274 4071 l
-2275 4071 m
-2321 4071 l
-2321 4072 l
-2275 4072 l
-2276 4072 m
-2320 4072 l
-2320 4073 l
-2276 4073 l
-2277 4073 m
-2320 4073 l
-2320 4074 l
-2277 4074 l
-2279 4074 m
-2319 4074 l
-2319 4075 l
-2279 4075 l
-2280 4075 m
-2318 4075 l
-2318 4076 l
-2280 4076 l
-2281 4076 m
-2317 4076 l
-2317 4077 l
-2281 4077 l
-2282 4077 m
-2316 4077 l
-2316 4078 l
-2282 4078 l
-2284 4078 m
-2316 4078 l
-2316 4079 l
-2284 4079 l
-2285 4079 m
-2315 4079 l
-2315 4080 l
-2285 4080 l
-2286 4080 m
-2314 4080 l
-2314 4081 l
-2286 4081 l
-2287 4081 m
-2313 4081 l
-2313 4082 l
-2287 4082 l
-2289 4082 m
-2312 4082 l
-2312 4083 l
-2289 4083 l
-2290 4083 m
-2312 4083 l
-2312 4084 l
-2290 4084 l
-2291 4084 m
-2311 4084 l
-2311 4085 l
-2291 4085 l
-2292 4085 m
-2310 4085 l
-2310 4086 l
-2292 4086 l
-2294 4086 m
-2309 4086 l
-2309 4087 l
-2294 4087 l
-2295 4087 m
-2308 4087 l
-2308 4088 l
-2295 4088 l
-2296 4088 m
-2308 4088 l
-2308 4089 l
-2296 4089 l
-2297 4089 m
-2307 4089 l
-2307 4090 l
-2297 4090 l
-2299 4090 m
-2306 4090 l
-2306 4091 l
-2299 4091 l
-2300 4091 m
-2305 4091 l
-2305 4092 l
-2300 4092 l
-2301 4092 m
-2304 4092 l
-2304 4093 l
-2301 4093 l
-Y
-2179.8 3839.8 m
-2104 3935 l
-2303 4093 l
-2379 3999 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2141 3921 m
-2145 3930 l
-2147 3947 l
-2202 3879 l
-S
-2203 3965 m
-2200 3968 l
-2198 3977 l
-2199 3983 l
-2203 3992 l
-2216 4002 l
-2225 4004 l
-2231 4003 l
-2239 4000 l
-2245 3993 l
-2247 3984 l
-2248 3969 l
-2241 3910 l
-2287 3947 l
-S
-2271 4046 m
-2264 4035 l
-2266 4020 l
-2275 4001 l
-2283 3992 l
-2299 3978 l
-2314 3973 l
-2326 3978 l
-2333 3983 l
-2340 3994 l
-2339 4009 l
-2329 4028 l
-2321 4038 l
-2305 4052 l
-2290 4056 l
-2278 4052 l
-2271 4046 l
-S
-1 g
-2789 4191 m
-2795 4191 l
-2795 4192 l
-2789 4192 l
-2789 4192 m
-2799 4192 l
-2799 4193 l
-2789 4193 l
-2789 4193 m
-2802 4193 l
-2802 4194 l
-2789 4194 l
-2789 4194 m
-2806 4194 l
-2806 4195 l
-2789 4195 l
-2788 4195 m
-2810 4195 l
-2810 4196 l
-2788 4196 l
-2788 4196 m
-2814 4196 l
-2814 4197 l
-2788 4197 l
-2788 4197 m
-2817 4197 l
-2817 4198 l
-2788 4198 l
-2788 4198 m
-2821 4198 l
-2821 4199 l
-2788 4199 l
-2787 4199 m
-2825 4199 l
-2825 4200 l
-2787 4200 l
-2787 4200 m
-2829 4200 l
-2829 4201 l
-2787 4201 l
-2787 4201 m
-2833 4201 l
-2833 4202 l
-2787 4202 l
-2786 4202 m
-2836 4202 l
-2836 4203 l
-2786 4203 l
-2786 4203 m
-2840 4203 l
-2840 4204 l
-2786 4204 l
-2786 4204 m
-2844 4204 l
-2844 4205 l
-2786 4205 l
-2786 4205 m
-2848 4205 l
-2848 4206 l
-2786 4206 l
-2785 4206 m
-2851 4206 l
-2851 4207 l
-2785 4207 l
-2785 4207 m
-2855 4207 l
-2855 4208 l
-2785 4208 l
-2785 4208 m
-2859 4208 l
-2859 4209 l
-2785 4209 l
-2785 4209 m
-2863 4209 l
-2863 4210 l
-2785 4210 l
-2784 4210 m
-2866 4210 l
-2866 4211 l
-2784 4211 l
-2784 4211 m
-2870 4211 l
-2870 4212 l
-2784 4212 l
-2784 4212 m
-2874 4212 l
-2874 4213 l
-2784 4213 l
-2784 4213 m
-2878 4213 l
-2878 4214 l
-2784 4214 l
-2783 4214 m
-2882 4214 l
-2882 4215 l
-2783 4215 l
-2783 4215 m
-2885 4215 l
-2885 4216 l
-2783 4216 l
-2783 4216 m
-2889 4216 l
-2889 4217 l
-2783 4217 l
-2782 4217 m
-2893 4217 l
-2893 4218 l
-2782 4218 l
-2782 4218 m
-2897 4218 l
-2897 4219 l
-2782 4219 l
-2782 4219 m
-2900 4219 l
-2900 4220 l
-2782 4220 l
-2782 4220 m
-2904 4220 l
-2904 4221 l
-2782 4221 l
-2781 4221 m
-2908 4221 l
-2908 4222 l
-2781 4222 l
-2781 4222 m
-2912 4222 l
-2912 4223 l
-2781 4223 l
-2781 4223 m
-2915 4223 l
-2915 4224 l
-2781 4224 l
-2781 4224 m
-2919 4224 l
-2919 4225 l
-2781 4225 l
-2780 4225 m
-2923 4225 l
-2923 4226 l
-2780 4226 l
-2780 4226 m
-2927 4226 l
-2927 4227 l
-2780 4227 l
-2780 4227 m
-2931 4227 l
-2931 4228 l
-2780 4228 l
-2780 4228 m
-2934 4228 l
-2934 4229 l
-2780 4229 l
-2779 4229 m
-2938 4229 l
-2938 4230 l
-2779 4230 l
-2779 4230 m
-2942 4230 l
-2942 4231 l
-2779 4231 l
-2779 4231 m
-2946 4231 l
-2946 4232 l
-2779 4232 l
-2778 4232 m
-2949 4232 l
-2949 4233 l
-2778 4233 l
-2778 4233 m
-2953 4233 l
-2953 4234 l
-2778 4234 l
-2778 4234 m
-2957 4234 l
-2957 4235 l
-2778 4235 l
-2778 4235 m
-2961 4235 l
-2961 4236 l
-2778 4236 l
-2777 4236 m
-2964 4236 l
-2964 4237 l
-2777 4237 l
-2777 4237 m
-2964 4237 l
-2964 4240 l
-2777 4240 l
-2776 4240 m
-2964 4240 l
-2964 4241 l
-2776 4241 l
-2776 4241 m
-2963 4241 l
-2963 4244 l
-2776 4244 l
-2775 4244 m
-2963 4244 l
-2963 4245 l
-2775 4245 l
-2775 4245 m
-2962 4245 l
-2962 4247 l
-2775 4247 l
-2774 4247 m
-2962 4247 l
-2962 4249 l
-2774 4249 l
-2774 4249 m
-2961 4249 l
-2961 4251 l
-2774 4251 l
-2773 4251 m
-2961 4251 l
-2961 4253 l
-2773 4253 l
-2773 4253 m
-2960 4253 l
-2960 4255 l
-2773 4255 l
-2772 4255 m
-2960 4255 l
-2960 4256 l
-2772 4256 l
-2772 4256 m
-2959 4256 l
-2959 4259 l
-2772 4259 l
-2771 4259 m
-2959 4259 l
-2959 4260 l
-2771 4260 l
-2771 4260 m
-2958 4260 l
-2958 4262 l
-2771 4262 l
-2770 4262 m
-2958 4262 l
-2958 4264 l
-2770 4264 l
-2770 4264 m
-2957 4264 l
-2957 4266 l
-2770 4266 l
-2769 4266 m
-2957 4266 l
-2957 4268 l
-2769 4268 l
-2769 4268 m
-2956 4268 l
-2956 4270 l
-2769 4270 l
-2768 4270 m
-2956 4270 l
-2956 4271 l
-2768 4271 l
-2768 4271 m
-2955 4271 l
-2955 4274 l
-2768 4274 l
-2767 4274 m
-2955 4274 l
-2955 4275 l
-2767 4275 l
-2767 4275 m
-2954 4275 l
-2954 4277 l
-2767 4277 l
-2766 4277 m
-2954 4277 l
-2954 4279 l
-2766 4279 l
-2766 4279 m
-2953 4279 l
-2953 4281 l
-2766 4281 l
-2765 4281 m
-2953 4281 l
-2953 4283 l
-2765 4283 l
-2765 4283 m
-2952 4283 l
-2952 4285 l
-2765 4285 l
-2764 4285 m
-2952 4285 l
-2952 4287 l
-2764 4287 l
-2764 4287 m
-2951 4287 l
-2951 4289 l
-2764 4289 l
-2763 4289 m
-2951 4289 l
-2951 4290 l
-2763 4290 l
-2763 4290 m
-2950 4290 l
-2950 4292 l
-2763 4292 l
-2762 4292 m
-2950 4292 l
-2950 4294 l
-2762 4294 l
-2762 4294 m
-2949 4294 l
-2949 4296 l
-2762 4296 l
-2761 4296 m
-2949 4296 l
-2949 4298 l
-2761 4298 l
-2761 4298 m
-2948 4298 l
-2948 4300 l
-2761 4300 l
-2760 4300 m
-2948 4300 l
-2948 4302 l
-2760 4302 l
-2760 4302 m
-2947 4302 l
-2947 4304 l
-2760 4304 l
-2759 4304 m
-2947 4304 l
-2947 4305 l
-2759 4305 l
-2759 4305 m
-2946 4305 l
-2946 4307 l
-2759 4307 l
-2759 4307 m
-2946 4307 l
-2946 4308 l
-2759 4308 l
-2759 4308 m
-2946 4308 l
-2946 4309 l
-2759 4309 l
-2762 4309 m
-2945 4309 l
-2945 4310 l
-2762 4310 l
-2766 4310 m
-2945 4310 l
-2945 4311 l
-2766 4311 l
-2770 4311 m
-2945 4311 l
-2945 4312 l
-2770 4312 l
-2774 4312 m
-2945 4312 l
-2945 4313 l
-2774 4313 l
-2777 4313 m
-2944 4313 l
-2944 4314 l
-2777 4314 l
-2781 4314 m
-2944 4314 l
-2944 4315 l
-2781 4315 l
-2785 4315 m
-2944 4315 l
-2944 4316 l
-2785 4316 l
-2789 4316 m
-2944 4316 l
-2944 4317 l
-2789 4317 l
-2793 4317 m
-2943 4317 l
-2943 4318 l
-2793 4318 l
-2796 4318 m
-2943 4318 l
-2943 4319 l
-2796 4319 l
-2800 4319 m
-2943 4319 l
-2943 4320 l
-2800 4320 l
-2804 4320 m
-2943 4320 l
-2943 4321 l
-2804 4321 l
-2808 4321 m
-2942 4321 l
-2942 4322 l
-2808 4322 l
-2811 4322 m
-2942 4322 l
-2942 4323 l
-2811 4323 l
-2815 4323 m
-2942 4323 l
-2942 4324 l
-2815 4324 l
-2819 4324 m
-2941 4324 l
-2941 4325 l
-2819 4325 l
-2823 4325 m
-2941 4325 l
-2941 4326 l
-2823 4326 l
-2827 4326 m
-2941 4326 l
-2941 4327 l
-2827 4327 l
-2830 4327 m
-2941 4327 l
-2941 4328 l
-2830 4328 l
-2834 4328 m
-2940 4328 l
-2940 4329 l
-2834 4329 l
-2838 4329 m
-2940 4329 l
-2940 4330 l
-2838 4330 l
-2842 4330 m
-2940 4330 l
-2940 4331 l
-2842 4331 l
-2846 4331 m
-2940 4331 l
-2940 4332 l
-2846 4332 l
-2849 4332 m
-2939 4332 l
-2939 4333 l
-2849 4333 l
-2853 4333 m
-2939 4333 l
-2939 4334 l
-2853 4334 l
-2857 4334 m
-2939 4334 l
-2939 4335 l
-2857 4335 l
-2861 4335 m
-2939 4335 l
-2939 4336 l
-2861 4336 l
-2864 4336 m
-2938 4336 l
-2938 4337 l
-2864 4337 l
-2868 4337 m
-2938 4337 l
-2938 4338 l
-2868 4338 l
-2872 4338 m
-2938 4338 l
-2938 4339 l
-2872 4339 l
-2876 4339 m
-2937 4339 l
-2937 4340 l
-2876 4340 l
-2880 4340 m
-2937 4340 l
-2937 4341 l
-2880 4341 l
-2883 4341 m
-2937 4341 l
-2937 4342 l
-2883 4342 l
-2887 4342 m
-2937 4342 l
-2937 4343 l
-2887 4343 l
-2891 4343 m
-2936 4343 l
-2936 4344 l
-2891 4344 l
-2895 4344 m
-2936 4344 l
-2936 4345 l
-2895 4345 l
-2898 4345 m
-2936 4345 l
-2936 4346 l
-2898 4346 l
-2902 4346 m
-2936 4346 l
-2936 4347 l
-2902 4347 l
-2906 4347 m
-2935 4347 l
-2935 4348 l
-2906 4348 l
-2910 4348 m
-2935 4348 l
-2935 4349 l
-2910 4349 l
-2914 4349 m
-2935 4349 l
-2935 4350 l
-2914 4350 l
-2917 4350 m
-2935 4350 l
-2935 4351 l
-2917 4351 l
-2921 4351 m
-2934 4351 l
-2934 4352 l
-2921 4352 l
-2925 4352 m
-2934 4352 l
-2934 4353 l
-2925 4353 l
-2929 4353 m
-2934 4353 l
-2934 4354 l
-2929 4354 l
-Y
-2790.2 4190.9 m
-2759 4308 l
-2933 4354 l
-2964 4237 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2836 4298 m
-2829 4305 l
-2816 4306 l
-2808 4304 l
-2797 4296 l
-2792 4282 l
-2793 4261 l
-2799 4241 l
-2807 4226 l
-2817 4220 l
-2830 4219 l
-2834 4220 l
-2845 4227 l
-2851 4237 l
-2852 4250 l
-2851 4254 l
-2844 4266 l
-2834 4272 l
-2821 4272 l
-2817 4271 l
-2806 4264 l
-2800 4254 l
-2799 4241 l
-S
-2885 4324 m
-2874 4317 l
-2869 4302 l
-2870 4281 l
-2873 4269 l
-2883 4250 l
-2894 4240 l
-2907 4239 l
-2915 4241 l
-2926 4248 l
-2931 4263 l
-2930 4284 l
-2927 4296 l
-2917 4315 l
-2906 4325 l
-2893 4326 l
-2885 4324 l
-S
-1 g
-3525 4216 m
-3529 4216 l
-3529 4217 l
-3525 4217 l
-3522 4217 m
-3529 4217 l
-3529 4218 l
-3522 4218 l
-3519 4218 m
-3530 4218 l
-3530 4219 l
-3519 4219 l
-3516 4219 m
-3530 4219 l
-3530 4220 l
-3516 4220 l
-3513 4220 m
-3530 4220 l
-3530 4221 l
-3513 4221 l
-3510 4221 m
-3531 4221 l
-3531 4222 l
-3510 4222 l
-3507 4222 m
-3531 4222 l
-3531 4223 l
-3507 4223 l
-3504 4223 m
-3531 4223 l
-3531 4224 l
-3504 4224 l
-3502 4224 m
-3532 4224 l
-3532 4225 l
-3502 4225 l
-3499 4225 m
-3532 4225 l
-3532 4226 l
-3499 4226 l
-3496 4226 m
-3532 4226 l
-3532 4227 l
-3496 4227 l
-3493 4227 m
-3533 4227 l
-3533 4228 l
-3493 4228 l
-3490 4228 m
-3533 4228 l
-3533 4229 l
-3490 4229 l
-3487 4229 m
-3533 4229 l
-3533 4230 l
-3487 4230 l
-3484 4230 m
-3534 4230 l
-3534 4231 l
-3484 4231 l
-3481 4231 m
-3534 4231 l
-3534 4232 l
-3481 4232 l
-3479 4232 m
-3534 4232 l
-3534 4233 l
-3479 4233 l
-3476 4233 m
-3535 4233 l
-3535 4234 l
-3476 4234 l
-3473 4234 m
-3535 4234 l
-3535 4235 l
-3473 4235 l
-3470 4235 m
-3536 4235 l
-3536 4236 l
-3470 4236 l
-3467 4236 m
-3536 4236 l
-3536 4237 l
-3467 4237 l
-3464 4237 m
-3536 4237 l
-3536 4238 l
-3464 4238 l
-3461 4238 m
-3537 4238 l
-3537 4239 l
-3461 4239 l
-3458 4239 m
-3537 4239 l
-3537 4240 l
-3458 4240 l
-3456 4240 m
-3537 4240 l
-3537 4241 l
-3456 4241 l
-3453 4241 m
-3538 4241 l
-3538 4242 l
-3453 4242 l
-3450 4242 m
-3538 4242 l
-3538 4243 l
-3450 4243 l
-3447 4243 m
-3538 4243 l
-3538 4244 l
-3447 4244 l
-3444 4244 m
-3539 4244 l
-3539 4245 l
-3444 4245 l
-3441 4245 m
-3539 4245 l
-3539 4246 l
-3441 4246 l
-3438 4246 m
-3539 4246 l
-3539 4247 l
-3438 4247 l
-3435 4247 m
-3540 4247 l
-3540 4248 l
-3435 4248 l
-3433 4248 m
-3540 4248 l
-3540 4249 l
-3433 4249 l
-3433 4249 m
-3540 4249 l
-3540 4250 l
-3433 4250 l
-3433 4250 m
-3541 4250 l
-3541 4252 l
-3433 4252 l
-3434 4252 m
-3541 4252 l
-3541 4253 l
-3434 4253 l
-3434 4253 m
-3542 4253 l
-3542 4255 l
-3434 4255 l
-3435 4255 m
-3543 4255 l
-3543 4258 l
-3435 4258 l
-3436 4258 m
-3544 4258 l
-3544 4261 l
-3436 4261 l
-3437 4261 m
-3545 4261 l
-3545 4264 l
-3437 4264 l
-3438 4264 m
-3546 4264 l
-3546 4267 l
-3438 4267 l
-3439 4267 m
-3547 4267 l
-3547 4269 l
-3439 4269 l
-3440 4269 m
-3547 4269 l
-3547 4270 l
-3440 4270 l
-3440 4270 m
-3548 4270 l
-3548 4272 l
-3440 4272 l
-3441 4272 m
-3548 4272 l
-3548 4273 l
-3441 4273 l
-3441 4273 m
-3549 4273 l
-3549 4275 l
-3441 4275 l
-3442 4275 m
-3550 4275 l
-3550 4278 l
-3442 4278 l
-3443 4278 m
-3551 4278 l
-3551 4281 l
-3443 4281 l
-3444 4281 m
-3552 4281 l
-3552 4284 l
-3444 4284 l
-3445 4284 m
-3553 4284 l
-3553 4287 l
-3445 4287 l
-3446 4287 m
-3554 4287 l
-3554 4289 l
-3446 4289 l
-3447 4289 m
-3554 4289 l
-3554 4290 l
-3447 4290 l
-3447 4290 m
-3555 4290 l
-3555 4292 l
-3447 4292 l
-3448 4292 m
-3555 4292 l
-3555 4293 l
-3448 4293 l
-3448 4293 m
-3556 4293 l
-3556 4295 l
-3448 4295 l
-3449 4295 m
-3557 4295 l
-3557 4298 l
-3449 4298 l
-3450 4298 m
-3558 4298 l
-3558 4301 l
-3450 4301 l
-3451 4301 m
-3559 4301 l
-3559 4304 l
-3451 4304 l
-3452 4304 m
-3560 4304 l
-3560 4306 l
-3452 4306 l
-3453 4306 m
-3560 4306 l
-3560 4307 l
-3453 4307 l
-3453 4307 m
-3561 4307 l
-3561 4309 l
-3453 4309 l
-3454 4309 m
-3561 4309 l
-3561 4310 l
-3454 4310 l
-3454 4310 m
-3562 4310 l
-3562 4312 l
-3454 4312 l
-3455 4312 m
-3563 4312 l
-3563 4315 l
-3455 4315 l
-3456 4315 m
-3564 4315 l
-3564 4318 l
-3456 4318 l
-3457 4318 m
-3565 4318 l
-3565 4321 l
-3457 4321 l
-3458 4321 m
-3566 4321 l
-3566 4324 l
-3458 4324 l
-3459 4324 m
-3567 4324 l
-3567 4326 l
-3459 4326 l
-3460 4326 m
-3567 4326 l
-3567 4327 l
-3460 4327 l
-3460 4327 m
-3568 4327 l
-3568 4329 l
-3460 4329 l
-3461 4329 m
-3568 4329 l
-3568 4330 l
-3461 4330 l
-3461 4330 m
-3569 4330 l
-3569 4331 l
-3461 4331 l
-3461 4331 m
-3566 4331 l
-3566 4332 l
-3461 4332 l
-3462 4332 m
-3563 4332 l
-3563 4333 l
-3462 4333 l
-3462 4333 m
-3560 4333 l
-3560 4334 l
-3462 4334 l
-3462 4334 m
-3557 4334 l
-3557 4335 l
-3462 4335 l
-3463 4335 m
-3554 4335 l
-3554 4336 l
-3463 4336 l
-3463 4336 m
-3551 4336 l
-3551 4337 l
-3463 4337 l
-3463 4337 m
-3549 4337 l
-3549 4338 l
-3463 4338 l
-3464 4338 m
-3546 4338 l
-3546 4339 l
-3464 4339 l
-3464 4339 m
-3543 4339 l
-3543 4340 l
-3464 4340 l
-3464 4340 m
-3540 4340 l
-3540 4341 l
-3464 4341 l
-3465 4341 m
-3537 4341 l
-3537 4342 l
-3465 4342 l
-3465 4342 m
-3534 4342 l
-3534 4343 l
-3465 4343 l
-3465 4343 m
-3531 4343 l
-3531 4344 l
-3465 4344 l
-3466 4344 m
-3528 4344 l
-3528 4345 l
-3466 4345 l
-3466 4345 m
-3525 4345 l
-3525 4346 l
-3466 4346 l
-3467 4346 m
-3523 4346 l
-3523 4347 l
-3467 4347 l
-3467 4347 m
-3520 4347 l
-3520 4348 l
-3467 4348 l
-3467 4348 m
-3517 4348 l
-3517 4349 l
-3467 4349 l
-3468 4349 m
-3514 4349 l
-3514 4350 l
-3468 4350 l
-3468 4350 m
-3511 4350 l
-3511 4351 l
-3468 4351 l
-3468 4351 m
-3508 4351 l
-3508 4352 l
-3468 4352 l
-3469 4352 m
-3505 4352 l
-3505 4353 l
-3469 4353 l
-3469 4353 m
-3502 4353 l
-3502 4354 l
-3469 4354 l
-3469 4354 m
-3499 4354 l
-3499 4355 l
-3469 4355 l
-3470 4355 m
-3497 4355 l
-3497 4356 l
-3470 4356 l
-3470 4356 m
-3494 4356 l
-3494 4357 l
-3470 4357 l
-3470 4357 m
-3491 4357 l
-3491 4358 l
-3470 4358 l
-3471 4358 m
-3488 4358 l
-3488 4359 l
-3471 4359 l
-3471 4359 m
-3485 4359 l
-3485 4360 l
-3471 4360 l
-3471 4360 m
-3482 4360 l
-3482 4361 l
-3471 4361 l
-3472 4361 m
-3479 4361 l
-3479 4362 l
-3472 4362 l
-3472 4362 m
-3476 4362 l
-3476 4363 l
-3472 4363 l
-Y
-3568 4330.1 m
-3528 4216 l
-3433 4249 l
-3473 4363 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3490 4247 m
-3503 4246 l
-3515 4256 l
-3526 4274 l
-3530 4286 l
-3533 4307 l
-3530 4321 l
-3519 4329 l
-3511 4332 l
-3498 4332 l
-3486 4323 l
-3475 4305 l
-3471 4293 l
-3468 4272 l
-3472 4257 l
-3482 4249 l
-3490 4247 l
-S
-1 g
-2845 3271 m
-2847 3271 l
-2847 3272 l
-2845 3272 l
-2845 3272 m
-2849 3272 l
-2849 3273 l
-2845 3273 l
-2844 3273 m
-2851 3273 l
-2851 3274 l
-2844 3274 l
-2843 3274 m
-2853 3274 l
-2853 3275 l
-2843 3275 l
-2843 3275 m
-2855 3275 l
-2855 3276 l
-2843 3276 l
-2842 3276 m
-2856 3276 l
-2856 3277 l
-2842 3277 l
-2842 3277 m
-2858 3277 l
-2858 3278 l
-2842 3278 l
-2841 3278 m
-2860 3278 l
-2860 3279 l
-2841 3279 l
-2841 3279 m
-2862 3279 l
-2862 3280 l
-2841 3280 l
-2840 3280 m
-2864 3280 l
-2864 3281 l
-2840 3281 l
-2840 3281 m
-2865 3281 l
-2865 3282 l
-2840 3282 l
-2839 3282 m
-2867 3282 l
-2867 3283 l
-2839 3283 l
-2838 3283 m
-2869 3283 l
-2869 3284 l
-2838 3284 l
-2838 3284 m
-2871 3284 l
-2871 3285 l
-2838 3285 l
-2837 3285 m
-2873 3285 l
-2873 3286 l
-2837 3286 l
-2837 3286 m
-2874 3286 l
-2874 3287 l
-2837 3287 l
-2836 3287 m
-2876 3287 l
-2876 3288 l
-2836 3288 l
-2836 3288 m
-2878 3288 l
-2878 3289 l
-2836 3289 l
-2835 3289 m
-2880 3289 l
-2880 3290 l
-2835 3290 l
-2835 3290 m
-2882 3290 l
-2882 3291 l
-2835 3291 l
-2834 3291 m
-2883 3291 l
-2883 3292 l
-2834 3292 l
-2834 3292 m
-2885 3292 l
-2885 3293 l
-2834 3293 l
-2833 3293 m
-2887 3293 l
-2887 3294 l
-2833 3294 l
-2832 3294 m
-2889 3294 l
-2889 3295 l
-2832 3295 l
-2832 3295 m
-2891 3295 l
-2891 3296 l
-2832 3296 l
-2831 3296 m
-2892 3296 l
-2892 3297 l
-2831 3297 l
-2831 3297 m
-2894 3297 l
-2894 3298 l
-2831 3298 l
-2830 3298 m
-2896 3298 l
-2896 3299 l
-2830 3299 l
-2830 3299 m
-2898 3299 l
-2898 3300 l
-2830 3300 l
-2829 3300 m
-2900 3300 l
-2900 3301 l
-2829 3301 l
-2829 3301 m
-2902 3301 l
-2902 3302 l
-2829 3302 l
-2828 3302 m
-2903 3302 l
-2903 3303 l
-2828 3303 l
-2827 3303 m
-2905 3303 l
-2905 3304 l
-2827 3304 l
-2827 3304 m
-2907 3304 l
-2907 3305 l
-2827 3305 l
-2826 3305 m
-2909 3305 l
-2909 3306 l
-2826 3306 l
-2826 3306 m
-2911 3306 l
-2911 3307 l
-2826 3307 l
-2825 3307 m
-2912 3307 l
-2912 3308 l
-2825 3308 l
-2825 3308 m
-2914 3308 l
-2914 3309 l
-2825 3309 l
-2824 3309 m
-2916 3309 l
-2916 3310 l
-2824 3310 l
-2824 3310 m
-2918 3310 l
-2918 3311 l
-2824 3311 l
-2823 3311 m
-2920 3311 l
-2920 3312 l
-2823 3312 l
-2822 3312 m
-2921 3312 l
-2921 3313 l
-2822 3313 l
-2822 3313 m
-2923 3313 l
-2923 3314 l
-2822 3314 l
-2821 3314 m
-2925 3314 l
-2925 3315 l
-2821 3315 l
-2821 3315 m
-2927 3315 l
-2927 3316 l
-2821 3316 l
-2820 3316 m
-2929 3316 l
-2929 3317 l
-2820 3317 l
-2820 3317 m
-2930 3317 l
-2930 3318 l
-2820 3318 l
-2819 3318 m
-2932 3318 l
-2932 3319 l
-2819 3319 l
-2819 3319 m
-2934 3319 l
-2934 3320 l
-2819 3320 l
-2818 3320 m
-2936 3320 l
-2936 3321 l
-2818 3321 l
-2817 3321 m
-2938 3321 l
-2938 3322 l
-2817 3322 l
-2817 3322 m
-2939 3322 l
-2939 3323 l
-2817 3323 l
-2816 3323 m
-2941 3323 l
-2941 3324 l
-2816 3324 l
-2816 3324 m
-2943 3324 l
-2943 3325 l
-2816 3325 l
-2815 3325 m
-2945 3325 l
-2945 3326 l
-2815 3326 l
-2815 3326 m
-2947 3326 l
-2947 3327 l
-2815 3327 l
-2814 3327 m
-2949 3327 l
-2949 3328 l
-2814 3328 l
-2814 3328 m
-2950 3328 l
-2950 3329 l
-2814 3329 l
-2813 3329 m
-2952 3329 l
-2952 3330 l
-2813 3330 l
-2812 3330 m
-2954 3330 l
-2954 3331 l
-2812 3331 l
-2812 3331 m
-2956 3331 l
-2956 3332 l
-2812 3332 l
-2811 3332 m
-2958 3332 l
-2958 3333 l
-2811 3333 l
-2811 3333 m
-2959 3333 l
-2959 3334 l
-2811 3334 l
-2810 3334 m
-2961 3334 l
-2961 3335 l
-2810 3335 l
-2810 3335 m
-2963 3335 l
-2963 3336 l
-2810 3336 l
-2809 3336 m
-2965 3336 l
-2965 3337 l
-2809 3337 l
-2809 3337 m
-2967 3337 l
-2967 3338 l
-2809 3338 l
-2808 3338 m
-2968 3338 l
-2968 3339 l
-2808 3339 l
-2808 3339 m
-2970 3339 l
-2970 3340 l
-2808 3340 l
-2807 3340 m
-2972 3340 l
-2972 3341 l
-2807 3341 l
-2806 3341 m
-2974 3341 l
-2974 3342 l
-2806 3342 l
-2806 3342 m
-2976 3342 l
-2976 3343 l
-2806 3343 l
-2805 3343 m
-2977 3343 l
-2977 3344 l
-2805 3344 l
-2805 3344 m
-2979 3344 l
-2979 3345 l
-2805 3345 l
-2804 3345 m
-2981 3345 l
-2981 3346 l
-2804 3346 l
-2804 3346 m
-2983 3346 l
-2983 3347 l
-2804 3347 l
-2803 3347 m
-2985 3347 l
-2985 3348 l
-2803 3348 l
-2803 3348 m
-2986 3348 l
-2986 3349 l
-2803 3349 l
-2802 3349 m
-2988 3349 l
-2988 3350 l
-2802 3350 l
-2801 3350 m
-2990 3350 l
-2990 3351 l
-2801 3351 l
-2801 3351 m
-2992 3351 l
-2992 3352 l
-2801 3352 l
-2800 3352 m
-2994 3352 l
-2994 3353 l
-2800 3353 l
-2800 3353 m
-2995 3353 l
-2995 3354 l
-2800 3354 l
-2799 3354 m
-2997 3354 l
-2997 3355 l
-2799 3355 l
-2799 3355 m
-2999 3355 l
-2999 3356 l
-2799 3356 l
-2798 3356 m
-3001 3356 l
-3001 3357 l
-2798 3357 l
-2798 3357 m
-3003 3357 l
-3003 3358 l
-2798 3358 l
-2797 3358 m
-3005 3358 l
-3005 3359 l
-2797 3359 l
-2796 3359 m
-3006 3359 l
-3006 3360 l
-2796 3360 l
-2796 3360 m
-3008 3360 l
-3008 3361 l
-2796 3361 l
-2795 3361 m
-3010 3361 l
-3010 3362 l
-2795 3362 l
-2795 3362 m
-3012 3362 l
-3012 3363 l
-2795 3363 l
-2794 3363 m
-3014 3363 l
-3014 3364 l
-2794 3364 l
-2794 3364 m
-3015 3364 l
-3015 3365 l
-2794 3365 l
-2793 3365 m
-3017 3365 l
-3017 3366 l
-2793 3366 l
-2793 3366 m
-3019 3366 l
-3019 3367 l
-2793 3367 l
-2792 3367 m
-3021 3367 l
-3021 3368 l
-2792 3368 l
-2791 3368 m
-3023 3368 l
-3023 3369 l
-2791 3369 l
-2791 3369 m
-3024 3369 l
-3024 3370 l
-2791 3370 l
-2790 3370 m
-3026 3370 l
-3026 3371 l
-2790 3371 l
-2790 3371 m
-3028 3371 l
-3028 3372 l
-2790 3372 l
-2789 3372 m
-3030 3372 l
-3030 3373 l
-2789 3373 l
-2789 3373 m
-3032 3373 l
-3032 3374 l
-2789 3374 l
-2788 3374 m
-3033 3374 l
-3033 3375 l
-2788 3375 l
-2788 3375 m
-3035 3375 l
-3035 3376 l
-2788 3376 l
-2787 3376 m
-3037 3376 l
-3037 3377 l
-2787 3377 l
-2787 3377 m
-3039 3377 l
-3039 3378 l
-2787 3378 l
-2787 3378 m
-3041 3378 l
-3041 3379 l
-2787 3379 l
-2788 3379 m
-3042 3379 l
-3042 3380 l
-2788 3380 l
-2790 3380 m
-3044 3380 l
-3044 3381 l
-2790 3381 l
-2792 3381 m
-3046 3381 l
-3046 3382 l
-2792 3382 l
-2794 3382 m
-3048 3382 l
-3048 3383 l
-2794 3383 l
-2796 3383 m
-3050 3383 l
-3050 3384 l
-2796 3384 l
-2797 3384 m
-3052 3384 l
-3052 3385 l
-2797 3385 l
-2799 3385 m
-3053 3385 l
-3053 3386 l
-2799 3386 l
-2801 3386 m
-3055 3386 l
-3055 3387 l
-2801 3387 l
-2803 3387 m
-3057 3387 l
-3057 3388 l
-2803 3388 l
-2805 3388 m
-3059 3388 l
-3059 3389 l
-2805 3389 l
-2806 3389 m
-3061 3389 l
-3061 3390 l
-2806 3390 l
-2808 3390 m
-3062 3390 l
-3062 3391 l
-2808 3391 l
-2810 3391 m
-3064 3391 l
-3064 3392 l
-2810 3392 l
-2812 3392 m
-3066 3392 l
-3066 3393 l
-2812 3393 l
-2814 3393 m
-3068 3393 l
-3068 3394 l
-2814 3394 l
-2816 3394 m
-3070 3394 l
-3070 3395 l
-2816 3395 l
-2817 3395 m
-3071 3395 l
-3071 3396 l
-2817 3396 l
-2819 3396 m
-3073 3396 l
-3073 3397 l
-2819 3397 l
-2821 3397 m
-3075 3397 l
-3075 3398 l
-2821 3398 l
-2823 3398 m
-3077 3398 l
-3077 3399 l
-2823 3399 l
-2825 3399 m
-3079 3399 l
-3079 3400 l
-2825 3400 l
-2826 3400 m
-3080 3400 l
-3080 3401 l
-2826 3401 l
-2828 3401 m
-3082 3401 l
-3082 3402 l
-2828 3402 l
-2830 3402 m
-3084 3402 l
-3084 3403 l
-2830 3403 l
-2832 3403 m
-3086 3403 l
-3086 3404 l
-2832 3404 l
-2834 3404 m
-3088 3404 l
-3088 3405 l
-2834 3405 l
-2835 3405 m
-3089 3405 l
-3089 3406 l
-2835 3406 l
-2837 3406 m
-3091 3406 l
-3091 3407 l
-2837 3407 l
-2839 3407 m
-3093 3407 l
-3093 3408 l
-2839 3408 l
-2841 3408 m
-3095 3408 l
-3095 3409 l
-2841 3409 l
-2843 3409 m
-3097 3409 l
-3097 3410 l
-2843 3410 l
-2845 3410 m
-3098 3410 l
-3098 3411 l
-2845 3411 l
-2846 3411 m
-3099 3411 l
-3099 3412 l
-2846 3412 l
-2848 3412 m
-3098 3412 l
-3098 3413 l
-2848 3413 l
-2850 3413 m
-3097 3413 l
-3097 3414 l
-2850 3414 l
-2852 3414 m
-3097 3414 l
-3097 3415 l
-2852 3415 l
-2854 3415 m
-3096 3415 l
-3096 3416 l
-2854 3416 l
-2855 3416 m
-3096 3416 l
-3096 3417 l
-2855 3417 l
-2857 3417 m
-3095 3417 l
-3095 3418 l
-2857 3418 l
-2859 3418 m
-3095 3418 l
-3095 3419 l
-2859 3419 l
-2861 3419 m
-3094 3419 l
-3094 3420 l
-2861 3420 l
-2863 3420 m
-3093 3420 l
-3093 3421 l
-2863 3421 l
-2864 3421 m
-3093 3421 l
-3093 3422 l
-2864 3422 l
-2866 3422 m
-3092 3422 l
-3092 3423 l
-2866 3423 l
-2868 3423 m
-3092 3423 l
-3092 3424 l
-2868 3424 l
-2870 3424 m
-3091 3424 l
-3091 3425 l
-2870 3425 l
-2872 3425 m
-3091 3425 l
-3091 3426 l
-2872 3426 l
-2874 3426 m
-3090 3426 l
-3090 3427 l
-2874 3427 l
-2875 3427 m
-3090 3427 l
-3090 3428 l
-2875 3428 l
-2877 3428 m
-3089 3428 l
-3089 3429 l
-2877 3429 l
-2879 3429 m
-3088 3429 l
-3088 3430 l
-2879 3430 l
-2881 3430 m
-3088 3430 l
-3088 3431 l
-2881 3431 l
-2883 3431 m
-3087 3431 l
-3087 3432 l
-2883 3432 l
-2884 3432 m
-3087 3432 l
-3087 3433 l
-2884 3433 l
-2886 3433 m
-3086 3433 l
-3086 3434 l
-2886 3434 l
-2888 3434 m
-3086 3434 l
-3086 3435 l
-2888 3435 l
-2890 3435 m
-3085 3435 l
-3085 3436 l
-2890 3436 l
-2892 3436 m
-3085 3436 l
-3085 3437 l
-2892 3437 l
-2893 3437 m
-3084 3437 l
-3084 3438 l
-2893 3438 l
-2895 3438 m
-3083 3438 l
-3083 3439 l
-2895 3439 l
-2897 3439 m
-3083 3439 l
-3083 3440 l
-2897 3440 l
-2899 3440 m
-3082 3440 l
-3082 3441 l
-2899 3441 l
-2901 3441 m
-3082 3441 l
-3082 3442 l
-2901 3442 l
-2903 3442 m
-3081 3442 l
-3081 3443 l
-2903 3443 l
-2904 3443 m
-3081 3443 l
-3081 3444 l
-2904 3444 l
-2906 3444 m
-3080 3444 l
-3080 3445 l
-2906 3445 l
-2908 3445 m
-3080 3445 l
-3080 3446 l
-2908 3446 l
-2910 3446 m
-3079 3446 l
-3079 3447 l
-2910 3447 l
-2912 3447 m
-3078 3447 l
-3078 3448 l
-2912 3448 l
-2913 3448 m
-3078 3448 l
-3078 3449 l
-2913 3449 l
-2915 3449 m
-3077 3449 l
-3077 3450 l
-2915 3450 l
-2917 3450 m
-3077 3450 l
-3077 3451 l
-2917 3451 l
-2919 3451 m
-3076 3451 l
-3076 3452 l
-2919 3452 l
-2921 3452 m
-3076 3452 l
-3076 3453 l
-2921 3453 l
-2922 3453 m
-3075 3453 l
-3075 3454 l
-2922 3454 l
-2924 3454 m
-3075 3454 l
-3075 3455 l
-2924 3455 l
-2926 3455 m
-3074 3455 l
-3074 3456 l
-2926 3456 l
-2928 3456 m
-3073 3456 l
-3073 3457 l
-2928 3457 l
-2930 3457 m
-3073 3457 l
-3073 3458 l
-2930 3458 l
-2932 3458 m
-3072 3458 l
-3072 3459 l
-2932 3459 l
-2933 3459 m
-3072 3459 l
-3072 3460 l
-2933 3460 l
-2935 3460 m
-3071 3460 l
-3071 3461 l
-2935 3461 l
-2937 3461 m
-3071 3461 l
-3071 3462 l
-2937 3462 l
-2939 3462 m
-3070 3462 l
-3070 3463 l
-2939 3463 l
-2941 3463 m
-3070 3463 l
-3070 3464 l
-2941 3464 l
-2942 3464 m
-3069 3464 l
-3069 3465 l
-2942 3465 l
-2944 3465 m
-3068 3465 l
-3068 3466 l
-2944 3466 l
-2946 3466 m
-3068 3466 l
-3068 3467 l
-2946 3467 l
-2948 3467 m
-3067 3467 l
-3067 3468 l
-2948 3468 l
-2950 3468 m
-3067 3468 l
-3067 3469 l
-2950 3469 l
-2951 3469 m
-3066 3469 l
-3066 3470 l
-2951 3470 l
-2953 3470 m
-3066 3470 l
-3066 3471 l
-2953 3471 l
-2955 3471 m
-3065 3471 l
-3065 3472 l
-2955 3472 l
-2957 3472 m
-3065 3472 l
-3065 3473 l
-2957 3473 l
-2959 3473 m
-3064 3473 l
-3064 3474 l
-2959 3474 l
-2961 3474 m
-3063 3474 l
-3063 3475 l
-2961 3475 l
-2962 3475 m
-3063 3475 l
-3063 3476 l
-2962 3476 l
-2964 3476 m
-3062 3476 l
-3062 3477 l
-2964 3477 l
-2966 3477 m
-3062 3477 l
-3062 3478 l
-2966 3478 l
-2968 3478 m
-3061 3478 l
-3061 3479 l
-2968 3479 l
-2970 3479 m
-3061 3479 l
-3061 3480 l
-2970 3480 l
-2971 3480 m
-3060 3480 l
-3060 3481 l
-2971 3481 l
-2973 3481 m
-3060 3481 l
-3060 3482 l
-2973 3482 l
-2975 3482 m
-3059 3482 l
-3059 3483 l
-2975 3483 l
-2977 3483 m
-3058 3483 l
-3058 3484 l
-2977 3484 l
-2979 3484 m
-3058 3484 l
-3058 3485 l
-2979 3485 l
-2980 3485 m
-3057 3485 l
-3057 3486 l
-2980 3486 l
-2982 3486 m
-3057 3486 l
-3057 3487 l
-2982 3487 l
-2984 3487 m
-3056 3487 l
-3056 3488 l
-2984 3488 l
-2986 3488 m
-3056 3488 l
-3056 3489 l
-2986 3489 l
-2988 3489 m
-3055 3489 l
-3055 3490 l
-2988 3490 l
-2990 3490 m
-3055 3490 l
-3055 3491 l
-2990 3491 l
-2991 3491 m
-3054 3491 l
-3054 3492 l
-2991 3492 l
-2993 3492 m
-3053 3492 l
-3053 3493 l
-2993 3493 l
-2995 3493 m
-3053 3493 l
-3053 3494 l
-2995 3494 l
-2997 3494 m
-3052 3494 l
-3052 3495 l
-2997 3495 l
-2999 3495 m
-3052 3495 l
-3052 3496 l
-2999 3496 l
-3000 3496 m
-3051 3496 l
-3051 3497 l
-3000 3497 l
-3002 3497 m
-3051 3497 l
-3051 3498 l
-3002 3498 l
-3004 3498 m
-3050 3498 l
-3050 3499 l
-3004 3499 l
-3006 3499 m
-3050 3499 l
-3050 3500 l
-3006 3500 l
-3008 3500 m
-3049 3500 l
-3049 3501 l
-3008 3501 l
-3009 3501 m
-3048 3501 l
-3048 3502 l
-3009 3502 l
-3011 3502 m
-3048 3502 l
-3048 3503 l
-3011 3503 l
-3013 3503 m
-3047 3503 l
-3047 3504 l
-3013 3504 l
-3015 3504 m
-3047 3504 l
-3047 3505 l
-3015 3505 l
-3017 3505 m
-3046 3505 l
-3046 3506 l
-3017 3506 l
-3019 3506 m
-3046 3506 l
-3046 3507 l
-3019 3507 l
-3020 3507 m
-3045 3507 l
-3045 3508 l
-3020 3508 l
-3022 3508 m
-3045 3508 l
-3045 3509 l
-3022 3509 l
-3024 3509 m
-3044 3509 l
-3044 3510 l
-3024 3510 l
-3026 3510 m
-3043 3510 l
-3043 3511 l
-3026 3511 l
-3028 3511 m
-3043 3511 l
-3043 3512 l
-3028 3512 l
-3029 3512 m
-3042 3512 l
-3042 3513 l
-3029 3513 l
-3031 3513 m
-3042 3513 l
-3042 3514 l
-3031 3514 l
-3033 3514 m
-3041 3514 l
-3041 3515 l
-3033 3515 l
-3035 3515 m
-3041 3515 l
-3041 3516 l
-3035 3516 l
-3037 3516 m
-3040 3516 l
-3040 3517 l
-3037 3517 l
-Y
-2845.9 3271.5 m
-2787 3378 l
-3039 3517 l
-3098 3411 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2838 3329 m
-2904 3366 l
-S
-2967 3424 m
-2969 3411 l
-2966 3400 l
-2957 3390 l
-2953 3388 l
-2940 3386 l
-2929 3389 l
-2919 3398 l
-2917 3402 l
-2915 3415 l
-2918 3426 l
-2927 3436 l
-2931 3438 l
-2944 3440 l
-2955 3437 l
-2967 3424 l
-2977 3406 l
-2983 3386 l
-2982 3371 l
-2973 3361 l
-2966 3357 l
-2953 3354 l
-2945 3360 l
-S
-3000 3476 m
-2991 3466 l
-2990 3451 l
-2996 3431 l
-3002 3420 l
-3016 3404 l
-3029 3397 l
-3042 3399 l
-3050 3403 l
-3059 3413 l
-3060 3428 l
-3054 3448 l
-3047 3459 l
-3034 3476 l
-3020 3483 l
-3007 3480 l
-3000 3476 l
-S
-1 g
-3190 3488 m
-3192 3488 l
-3192 3489 l
-3190 3489 l
-3189 3489 m
-3193 3489 l
-3193 3490 l
-3189 3490 l
-3187 3490 m
-3194 3490 l
-3194 3491 l
-3187 3491 l
-3186 3491 m
-3195 3491 l
-3195 3492 l
-3186 3492 l
-3185 3492 m
-3196 3492 l
-3196 3493 l
-3185 3493 l
-3184 3493 m
-3197 3493 l
-3197 3494 l
-3184 3494 l
-3183 3494 m
-3197 3494 l
-3197 3495 l
-3183 3495 l
-3181 3495 m
-3198 3495 l
-3198 3496 l
-3181 3496 l
-3180 3496 m
-3199 3496 l
-3199 3497 l
-3180 3497 l
-3179 3497 m
-3200 3497 l
-3200 3498 l
-3179 3498 l
-3178 3498 m
-3201 3498 l
-3201 3499 l
-3178 3499 l
-3176 3499 m
-3202 3499 l
-3202 3500 l
-3176 3500 l
-3175 3500 m
-3202 3500 l
-3202 3501 l
-3175 3501 l
-3174 3501 m
-3203 3501 l
-3203 3502 l
-3174 3502 l
-3173 3502 m
-3204 3502 l
-3204 3503 l
-3173 3503 l
-3172 3503 m
-3205 3503 l
-3205 3504 l
-3172 3504 l
-3170 3504 m
-3206 3504 l
-3206 3505 l
-3170 3505 l
-3169 3505 m
-3207 3505 l
-3207 3506 l
-3169 3506 l
-3168 3506 m
-3207 3506 l
-3207 3507 l
-3168 3507 l
-3167 3507 m
-3208 3507 l
-3208 3508 l
-3167 3508 l
-3166 3508 m
-3209 3508 l
-3209 3509 l
-3166 3509 l
-3164 3509 m
-3210 3509 l
-3210 3510 l
-3164 3510 l
-3163 3510 m
-3211 3510 l
-3211 3511 l
-3163 3511 l
-3162 3511 m
-3212 3511 l
-3212 3512 l
-3162 3512 l
-3161 3512 m
-3212 3512 l
-3212 3513 l
-3161 3513 l
-3159 3513 m
-3213 3513 l
-3213 3514 l
-3159 3514 l
-3158 3514 m
-3214 3514 l
-3214 3515 l
-3158 3515 l
-3157 3515 m
-3215 3515 l
-3215 3516 l
-3157 3516 l
-3156 3516 m
-3216 3516 l
-3216 3517 l
-3156 3517 l
-3155 3517 m
-3216 3517 l
-3216 3518 l
-3155 3518 l
-3153 3518 m
-3217 3518 l
-3217 3519 l
-3153 3519 l
-3152 3519 m
-3218 3519 l
-3218 3520 l
-3152 3520 l
-3151 3520 m
-3219 3520 l
-3219 3521 l
-3151 3521 l
-3150 3521 m
-3220 3521 l
-3220 3522 l
-3150 3522 l
-3149 3522 m
-3221 3522 l
-3221 3523 l
-3149 3523 l
-3147 3523 m
-3221 3523 l
-3221 3524 l
-3147 3524 l
-3146 3524 m
-3222 3524 l
-3222 3525 l
-3146 3525 l
-3145 3525 m
-3223 3525 l
-3223 3526 l
-3145 3526 l
-3144 3526 m
-3224 3526 l
-3224 3527 l
-3144 3527 l
-3142 3527 m
-3225 3527 l
-3225 3528 l
-3142 3528 l
-3141 3528 m
-3226 3528 l
-3226 3529 l
-3141 3529 l
-3140 3529 m
-3226 3529 l
-3226 3530 l
-3140 3530 l
-3139 3530 m
-3227 3530 l
-3227 3531 l
-3139 3531 l
-3138 3531 m
-3228 3531 l
-3228 3532 l
-3138 3532 l
-3136 3532 m
-3229 3532 l
-3229 3533 l
-3136 3533 l
-3135 3533 m
-3230 3533 l
-3230 3534 l
-3135 3534 l
-3134 3534 m
-3231 3534 l
-3231 3535 l
-3134 3535 l
-3133 3535 m
-3231 3535 l
-3231 3536 l
-3133 3536 l
-3132 3536 m
-3232 3536 l
-3232 3537 l
-3132 3537 l
-3130 3537 m
-3233 3537 l
-3233 3538 l
-3130 3538 l
-3129 3538 m
-3234 3538 l
-3234 3539 l
-3129 3539 l
-3128 3539 m
-3235 3539 l
-3235 3540 l
-3128 3540 l
-3127 3540 m
-3236 3540 l
-3236 3541 l
-3127 3541 l
-3125 3541 m
-3236 3541 l
-3236 3542 l
-3125 3542 l
-3124 3542 m
-3237 3542 l
-3237 3543 l
-3124 3543 l
-3123 3543 m
-3238 3543 l
-3238 3544 l
-3123 3544 l
-3122 3544 m
-3239 3544 l
-3239 3545 l
-3122 3545 l
-3121 3545 m
-3240 3545 l
-3240 3546 l
-3121 3546 l
-3119 3546 m
-3240 3546 l
-3240 3547 l
-3119 3547 l
-3118 3547 m
-3241 3547 l
-3241 3548 l
-3118 3548 l
-3117 3548 m
-3242 3548 l
-3242 3549 l
-3117 3549 l
-3116 3549 m
-3243 3549 l
-3243 3550 l
-3116 3550 l
-3115 3550 m
-3244 3550 l
-3244 3551 l
-3115 3551 l
-3113 3551 m
-3245 3551 l
-3245 3552 l
-3113 3552 l
-3112 3552 m
-3245 3552 l
-3245 3553 l
-3112 3553 l
-3111 3553 m
-3246 3553 l
-3246 3554 l
-3111 3554 l
-3110 3554 m
-3247 3554 l
-3247 3555 l
-3110 3555 l
-3108 3555 m
-3248 3555 l
-3248 3556 l
-3108 3556 l
-3107 3556 m
-3249 3556 l
-3249 3557 l
-3107 3557 l
-3106 3557 m
-3250 3557 l
-3250 3558 l
-3106 3558 l
-3105 3558 m
-3250 3558 l
-3250 3559 l
-3105 3559 l
-3104 3559 m
-3251 3559 l
-3251 3560 l
-3104 3560 l
-3102 3560 m
-3252 3560 l
-3252 3561 l
-3102 3561 l
-3101 3561 m
-3253 3561 l
-3253 3562 l
-3101 3562 l
-3100 3562 m
-3254 3562 l
-3254 3563 l
-3100 3563 l
-3099 3563 m
-3255 3563 l
-3255 3564 l
-3099 3564 l
-3098 3564 m
-3255 3564 l
-3255 3565 l
-3098 3565 l
-3098 3565 m
-3256 3565 l
-3256 3566 l
-3098 3566 l
-3098 3566 m
-3257 3566 l
-3257 3567 l
-3098 3567 l
-3099 3567 m
-3258 3567 l
-3258 3568 l
-3099 3568 l
-3100 3568 m
-3259 3568 l
-3259 3569 l
-3100 3569 l
-3101 3569 m
-3260 3569 l
-3260 3570 l
-3101 3570 l
-3102 3570 m
-3260 3570 l
-3260 3571 l
-3102 3571 l
-3102 3571 m
-3261 3571 l
-3261 3572 l
-3102 3572 l
-3103 3572 m
-3262 3572 l
-3262 3573 l
-3103 3573 l
-3104 3573 m
-3263 3573 l
-3263 3574 l
-3104 3574 l
-3105 3574 m
-3264 3574 l
-3264 3575 l
-3105 3575 l
-3106 3575 m
-3265 3575 l
-3265 3576 l
-3106 3576 l
-3107 3576 m
-3265 3576 l
-3265 3577 l
-3107 3577 l
-3107 3577 m
-3266 3577 l
-3266 3578 l
-3107 3578 l
-3108 3578 m
-3267 3578 l
-3267 3579 l
-3108 3579 l
-3109 3579 m
-3268 3579 l
-3268 3580 l
-3109 3580 l
-3110 3580 m
-3269 3580 l
-3269 3581 l
-3110 3581 l
-3111 3581 m
-3269 3581 l
-3269 3582 l
-3111 3582 l
-3111 3582 m
-3270 3582 l
-3270 3583 l
-3111 3583 l
-3112 3583 m
-3271 3583 l
-3271 3584 l
-3112 3584 l
-3113 3584 m
-3272 3584 l
-3272 3585 l
-3113 3585 l
-3114 3585 m
-3273 3585 l
-3273 3586 l
-3114 3586 l
-3115 3586 m
-3274 3586 l
-3274 3587 l
-3115 3587 l
-3116 3587 m
-3274 3587 l
-3274 3588 l
-3116 3588 l
-3116 3588 m
-3275 3588 l
-3275 3589 l
-3116 3589 l
-3117 3589 m
-3276 3589 l
-3276 3590 l
-3117 3590 l
-3118 3590 m
-3277 3590 l
-3277 3591 l
-3118 3591 l
-3119 3591 m
-3278 3591 l
-3278 3592 l
-3119 3592 l
-3120 3592 m
-3279 3592 l
-3279 3594 l
-3120 3594 l
-3121 3594 m
-3280 3594 l
-3280 3595 l
-3121 3595 l
-3122 3595 m
-3281 3595 l
-3281 3596 l
-3122 3596 l
-3123 3596 m
-3282 3596 l
-3282 3597 l
-3123 3597 l
-3124 3597 m
-3283 3597 l
-3283 3598 l
-3124 3598 l
-3125 3598 m
-3284 3598 l
-3284 3600 l
-3125 3600 l
-3126 3600 m
-3285 3600 l
-3285 3601 l
-3126 3601 l
-3127 3601 m
-3286 3601 l
-3286 3602 l
-3127 3602 l
-3128 3602 m
-3287 3602 l
-3287 3603 l
-3128 3603 l
-3129 3603 m
-3288 3603 l
-3288 3604 l
-3129 3604 l
-3130 3604 m
-3289 3604 l
-3289 3606 l
-3130 3606 l
-3131 3606 m
-3290 3606 l
-3290 3607 l
-3131 3607 l
-3132 3607 m
-3291 3607 l
-3291 3608 l
-3132 3608 l
-3133 3608 m
-3292 3608 l
-3292 3609 l
-3133 3609 l
-3134 3609 m
-3293 3609 l
-3293 3610 l
-3134 3610 l
-3134 3610 m
-3294 3610 l
-3294 3611 l
-3134 3611 l
-3135 3611 m
-3294 3611 l
-3294 3612 l
-3135 3612 l
-3136 3612 m
-3295 3612 l
-3295 3613 l
-3136 3613 l
-3137 3613 m
-3296 3613 l
-3296 3614 l
-3137 3614 l
-3138 3614 m
-3297 3614 l
-3297 3615 l
-3138 3615 l
-3139 3615 m
-3298 3615 l
-3298 3617 l
-3139 3617 l
-3140 3617 m
-3299 3617 l
-3299 3618 l
-3140 3618 l
-3141 3618 m
-3300 3618 l
-3300 3619 l
-3141 3619 l
-3142 3619 m
-3301 3619 l
-3301 3620 l
-3142 3620 l
-3143 3620 m
-3302 3620 l
-3302 3621 l
-3143 3621 l
-3143 3621 m
-3303 3621 l
-3303 3622 l
-3143 3622 l
-3144 3622 m
-3303 3622 l
-3303 3623 l
-3144 3623 l
-3145 3623 m
-3304 3623 l
-3304 3624 l
-3145 3624 l
-3146 3624 m
-3305 3624 l
-3305 3625 l
-3146 3625 l
-3147 3625 m
-3306 3625 l
-3306 3626 l
-3147 3626 l
-3148 3626 m
-3307 3626 l
-3307 3627 l
-3148 3627 l
-3148 3627 m
-3308 3627 l
-3308 3628 l
-3148 3628 l
-3149 3628 m
-3308 3628 l
-3308 3629 l
-3149 3629 l
-3150 3629 m
-3309 3629 l
-3309 3630 l
-3150 3630 l
-3151 3630 m
-3310 3630 l
-3310 3631 l
-3151 3631 l
-3152 3631 m
-3311 3631 l
-3311 3632 l
-3152 3632 l
-3152 3632 m
-3312 3632 l
-3312 3633 l
-3152 3633 l
-3153 3633 m
-3313 3633 l
-3313 3634 l
-3153 3634 l
-3154 3634 m
-3313 3634 l
-3313 3635 l
-3154 3635 l
-3155 3635 m
-3314 3635 l
-3314 3636 l
-3155 3636 l
-3156 3636 m
-3315 3636 l
-3315 3637 l
-3156 3637 l
-3157 3637 m
-3316 3637 l
-3316 3638 l
-3157 3638 l
-3157 3638 m
-3317 3638 l
-3317 3639 l
-3157 3639 l
-3158 3639 m
-3318 3639 l
-3318 3640 l
-3158 3640 l
-3159 3640 m
-3318 3640 l
-3318 3641 l
-3159 3641 l
-3160 3641 m
-3319 3641 l
-3319 3642 l
-3160 3642 l
-3161 3642 m
-3320 3642 l
-3320 3643 l
-3161 3643 l
-3162 3643 m
-3321 3643 l
-3321 3644 l
-3162 3644 l
-3162 3644 m
-3322 3644 l
-3322 3645 l
-3162 3645 l
-3163 3645 m
-3322 3645 l
-3322 3646 l
-3163 3646 l
-3164 3646 m
-3323 3646 l
-3323 3647 l
-3164 3647 l
-3165 3647 m
-3324 3647 l
-3324 3648 l
-3165 3648 l
-3166 3648 m
-3325 3648 l
-3325 3649 l
-3166 3649 l
-3166 3649 m
-3326 3649 l
-3326 3650 l
-3166 3650 l
-3167 3650 m
-3327 3650 l
-3327 3651 l
-3167 3651 l
-3168 3651 m
-3327 3651 l
-3327 3652 l
-3168 3652 l
-3169 3652 m
-3328 3652 l
-3328 3653 l
-3169 3653 l
-3170 3653 m
-3329 3653 l
-3329 3654 l
-3170 3654 l
-3171 3654 m
-3330 3654 l
-3330 3655 l
-3171 3655 l
-3171 3655 m
-3331 3655 l
-3331 3656 l
-3171 3656 l
-3172 3656 m
-3332 3656 l
-3332 3657 l
-3172 3657 l
-3173 3657 m
-3332 3657 l
-3332 3658 l
-3173 3658 l
-3174 3658 m
-3333 3658 l
-3333 3659 l
-3174 3659 l
-3175 3659 m
-3334 3659 l
-3334 3660 l
-3175 3660 l
-3175 3660 m
-3335 3660 l
-3335 3661 l
-3175 3661 l
-3176 3661 m
-3336 3661 l
-3336 3662 l
-3176 3662 l
-3177 3662 m
-3337 3662 l
-3337 3663 l
-3177 3663 l
-3178 3663 m
-3337 3663 l
-3337 3664 l
-3178 3664 l
-3179 3664 m
-3338 3664 l
-3338 3665 l
-3179 3665 l
-3180 3665 m
-3339 3665 l
-3339 3666 l
-3180 3666 l
-3180 3666 m
-3340 3666 l
-3340 3667 l
-3180 3667 l
-3181 3667 m
-3341 3667 l
-3341 3668 l
-3181 3668 l
-3182 3668 m
-3342 3668 l
-3342 3669 l
-3182 3669 l
-3183 3669 m
-3342 3669 l
-3342 3670 l
-3183 3670 l
-3184 3670 m
-3343 3670 l
-3343 3671 l
-3184 3671 l
-3184 3671 m
-3344 3671 l
-3344 3672 l
-3184 3672 l
-3185 3672 m
-3345 3672 l
-3345 3673 l
-3185 3673 l
-3186 3673 m
-3346 3673 l
-3346 3674 l
-3186 3674 l
-3187 3674 m
-3347 3674 l
-3347 3675 l
-3187 3675 l
-3188 3675 m
-3347 3675 l
-3347 3676 l
-3188 3676 l
-3189 3676 m
-3348 3676 l
-3348 3677 l
-3189 3677 l
-3189 3677 m
-3349 3677 l
-3349 3678 l
-3189 3678 l
-3190 3678 m
-3350 3678 l
-3350 3679 l
-3190 3679 l
-3191 3679 m
-3351 3679 l
-3351 3680 l
-3191 3680 l
-3192 3680 m
-3351 3680 l
-3351 3681 l
-3192 3681 l
-3193 3681 m
-3352 3681 l
-3352 3682 l
-3193 3682 l
-3194 3682 m
-3353 3682 l
-3353 3683 l
-3194 3683 l
-3194 3683 m
-3354 3683 l
-3354 3684 l
-3194 3684 l
-3195 3684 m
-3355 3684 l
-3355 3685 l
-3195 3685 l
-3196 3685 m
-3356 3685 l
-3356 3686 l
-3196 3686 l
-3197 3686 m
-3356 3686 l
-3356 3687 l
-3197 3687 l
-3198 3687 m
-3357 3687 l
-3357 3688 l
-3198 3688 l
-3198 3688 m
-3358 3688 l
-3358 3689 l
-3198 3689 l
-3199 3689 m
-3359 3689 l
-3359 3690 l
-3199 3690 l
-3200 3690 m
-3360 3690 l
-3360 3691 l
-3200 3691 l
-3201 3691 m
-3361 3691 l
-3361 3692 l
-3201 3692 l
-3202 3692 m
-3361 3692 l
-3361 3693 l
-3202 3693 l
-3203 3693 m
-3362 3693 l
-3362 3694 l
-3203 3694 l
-3203 3694 m
-3363 3694 l
-3363 3695 l
-3203 3695 l
-3204 3695 m
-3364 3695 l
-3364 3696 l
-3204 3696 l
-3205 3696 m
-3365 3696 l
-3365 3697 l
-3205 3697 l
-3206 3697 m
-3366 3697 l
-3366 3698 l
-3206 3698 l
-3207 3698 m
-3366 3698 l
-3366 3699 l
-3207 3699 l
-3207 3699 m
-3367 3699 l
-3367 3700 l
-3207 3700 l
-3208 3700 m
-3368 3700 l
-3368 3701 l
-3208 3701 l
-3209 3701 m
-3369 3701 l
-3369 3702 l
-3209 3702 l
-3210 3702 m
-3370 3702 l
-3370 3703 l
-3210 3703 l
-3211 3703 m
-3371 3703 l
-3371 3704 l
-3211 3704 l
-3212 3704 m
-3371 3704 l
-3371 3705 l
-3212 3705 l
-3212 3705 m
-3372 3705 l
-3372 3706 l
-3212 3706 l
-3213 3706 m
-3373 3706 l
-3373 3707 l
-3213 3707 l
-3214 3707 m
-3374 3707 l
-3374 3708 l
-3214 3708 l
-3215 3708 m
-3375 3708 l
-3375 3709 l
-3215 3709 l
-3216 3709 m
-3375 3709 l
-3375 3710 l
-3216 3710 l
-3216 3710 m
-3375 3710 l
-3375 3711 l
-3216 3711 l
-3217 3711 m
-3374 3711 l
-3374 3712 l
-3217 3712 l
-3218 3712 m
-3373 3712 l
-3373 3713 l
-3218 3713 l
-3219 3713 m
-3372 3713 l
-3372 3714 l
-3219 3714 l
-3220 3714 m
-3371 3714 l
-3371 3715 l
-3220 3715 l
-3221 3715 m
-3369 3715 l
-3369 3716 l
-3221 3716 l
-3221 3716 m
-3368 3716 l
-3368 3717 l
-3221 3717 l
-3222 3717 m
-3367 3717 l
-3367 3718 l
-3222 3718 l
-3223 3718 m
-3366 3718 l
-3366 3719 l
-3223 3719 l
-3224 3719 m
-3365 3719 l
-3365 3720 l
-3224 3720 l
-3225 3720 m
-3363 3720 l
-3363 3721 l
-3225 3721 l
-3226 3721 m
-3362 3721 l
-3362 3722 l
-3226 3722 l
-3226 3722 m
-3361 3722 l
-3361 3723 l
-3226 3723 l
-3227 3723 m
-3360 3723 l
-3360 3724 l
-3227 3724 l
-3228 3724 m
-3359 3724 l
-3359 3725 l
-3228 3725 l
-3229 3725 m
-3357 3725 l
-3357 3726 l
-3229 3726 l
-3230 3726 m
-3356 3726 l
-3356 3727 l
-3230 3727 l
-3230 3727 m
-3355 3727 l
-3355 3728 l
-3230 3728 l
-3231 3728 m
-3354 3728 l
-3354 3729 l
-3231 3729 l
-3232 3729 m
-3353 3729 l
-3353 3730 l
-3232 3730 l
-3233 3730 m
-3351 3730 l
-3351 3731 l
-3233 3731 l
-3234 3731 m
-3350 3731 l
-3350 3732 l
-3234 3732 l
-3235 3732 m
-3349 3732 l
-3349 3733 l
-3235 3733 l
-3235 3733 m
-3348 3733 l
-3348 3734 l
-3235 3734 l
-3236 3734 m
-3347 3734 l
-3347 3735 l
-3236 3735 l
-3237 3735 m
-3345 3735 l
-3345 3736 l
-3237 3736 l
-3238 3736 m
-3344 3736 l
-3344 3737 l
-3238 3737 l
-3239 3737 m
-3343 3737 l
-3343 3738 l
-3239 3738 l
-3239 3738 m
-3342 3738 l
-3342 3739 l
-3239 3739 l
-3240 3739 m
-3341 3739 l
-3341 3740 l
-3240 3740 l
-3241 3740 m
-3339 3740 l
-3339 3741 l
-3241 3741 l
-3242 3741 m
-3338 3741 l
-3338 3742 l
-3242 3742 l
-3243 3742 m
-3337 3742 l
-3337 3743 l
-3243 3743 l
-3244 3743 m
-3336 3743 l
-3336 3744 l
-3244 3744 l
-3244 3744 m
-3335 3744 l
-3335 3745 l
-3244 3745 l
-3245 3745 m
-3333 3745 l
-3333 3746 l
-3245 3746 l
-3246 3746 m
-3332 3746 l
-3332 3747 l
-3246 3747 l
-3247 3747 m
-3331 3747 l
-3331 3748 l
-3247 3748 l
-3248 3748 m
-3330 3748 l
-3330 3749 l
-3248 3749 l
-3248 3749 m
-3328 3749 l
-3328 3750 l
-3248 3750 l
-3249 3750 m
-3327 3750 l
-3327 3751 l
-3249 3751 l
-3250 3751 m
-3326 3751 l
-3326 3752 l
-3250 3752 l
-3251 3752 m
-3325 3752 l
-3325 3753 l
-3251 3753 l
-3252 3753 m
-3324 3753 l
-3324 3754 l
-3252 3754 l
-3253 3754 m
-3322 3754 l
-3322 3755 l
-3253 3755 l
-3253 3755 m
-3321 3755 l
-3321 3756 l
-3253 3756 l
-3254 3756 m
-3320 3756 l
-3320 3757 l
-3254 3757 l
-3255 3757 m
-3319 3757 l
-3319 3758 l
-3255 3758 l
-3256 3758 m
-3318 3758 l
-3318 3759 l
-3256 3759 l
-3257 3759 m
-3316 3759 l
-3316 3760 l
-3257 3760 l
-3258 3760 m
-3315 3760 l
-3315 3761 l
-3258 3761 l
-3258 3761 m
-3314 3761 l
-3314 3762 l
-3258 3762 l
-3259 3762 m
-3313 3762 l
-3313 3763 l
-3259 3763 l
-3260 3763 m
-3312 3763 l
-3312 3764 l
-3260 3764 l
-3261 3764 m
-3310 3764 l
-3310 3765 l
-3261 3765 l
-3262 3765 m
-3309 3765 l
-3309 3766 l
-3262 3766 l
-3262 3766 m
-3308 3766 l
-3308 3767 l
-3262 3767 l
-3263 3767 m
-3307 3767 l
-3307 3768 l
-3263 3768 l
-3264 3768 m
-3306 3768 l
-3306 3769 l
-3264 3769 l
-3265 3769 m
-3304 3769 l
-3304 3770 l
-3265 3770 l
-3266 3770 m
-3303 3770 l
-3303 3771 l
-3266 3771 l
-3267 3771 m
-3302 3771 l
-3302 3772 l
-3267 3772 l
-3267 3772 m
-3301 3772 l
-3301 3773 l
-3267 3773 l
-3268 3773 m
-3300 3773 l
-3300 3774 l
-3268 3774 l
-3269 3774 m
-3298 3774 l
-3298 3775 l
-3269 3775 l
-3270 3775 m
-3297 3775 l
-3297 3776 l
-3270 3776 l
-3271 3776 m
-3296 3776 l
-3296 3777 l
-3271 3777 l
-3271 3777 m
-3295 3777 l
-3295 3778 l
-3271 3778 l
-3272 3778 m
-3294 3778 l
-3294 3779 l
-3272 3779 l
-3273 3779 m
-3292 3779 l
-3292 3780 l
-3273 3780 l
-3274 3780 m
-3291 3780 l
-3291 3781 l
-3274 3781 l
-3275 3781 m
-3290 3781 l
-3290 3782 l
-3275 3782 l
-3276 3782 m
-3289 3782 l
-3289 3783 l
-3276 3783 l
-3276 3783 m
-3288 3783 l
-3288 3784 l
-3276 3784 l
-3277 3784 m
-3286 3784 l
-3286 3785 l
-3277 3785 l
-3278 3785 m
-3285 3785 l
-3285 3786 l
-3278 3786 l
-3279 3786 m
-3284 3786 l
-3284 3787 l
-3279 3787 l
-3280 3787 m
-3283 3787 l
-3283 3788 l
-3280 3788 l
-Y
-3191.3 3488.2 m
-3098 3565 l
-3281 3788 l
-3375 3710 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3163 3539 m
-3211 3597 l
-S
-3235 3685 m
-3226 3687 l
-3214 3680 l
-3209 3674 l
-3204 3662 l
-3209 3647 l
-3222 3631 l
-3238 3617 l
-3254 3610 l
-3266 3611 l
-3277 3618 l
-3279 3621 l
-3284 3634 l
-3283 3645 l
-3276 3657 l
-3273 3659 l
-3260 3664 l
-3249 3663 l
-3238 3656 l
-3235 3653 l
-3230 3640 l
-3231 3629 l
-3238 3617 l
-S
-3260 3735 m
-3255 3723 l
-3259 3708 l
-3273 3692 l
-3282 3684 l
-3301 3674 l
-3316 3672 l
-3327 3679 l
-3333 3686 l
-3337 3698 l
-3333 3712 l
-3320 3729 l
-3310 3737 l
-3291 3747 l
-3276 3749 l
-3265 3742 l
-3260 3735 l
-S
-1 g
-3431 3818 m
-3434 3818 l
-3434 3819 l
-3431 3819 l
-3427 3819 m
-3435 3819 l
-3435 3820 l
-3427 3820 l
-3424 3820 m
-3435 3820 l
-3435 3821 l
-3424 3821 l
-3421 3821 m
-3435 3821 l
-3435 3822 l
-3421 3822 l
-3417 3822 m
-3436 3822 l
-3436 3823 l
-3417 3823 l
-3414 3823 m
-3436 3823 l
-3436 3824 l
-3414 3824 l
-3411 3824 m
-3436 3824 l
-3436 3825 l
-3411 3825 l
-3407 3825 m
-3437 3825 l
-3437 3826 l
-3407 3826 l
-3404 3826 m
-3437 3826 l
-3437 3827 l
-3404 3827 l
-3401 3827 m
-3437 3827 l
-3437 3828 l
-3401 3828 l
-3397 3828 m
-3437 3828 l
-3437 3829 l
-3397 3829 l
-3394 3829 m
-3438 3829 l
-3438 3830 l
-3394 3830 l
-3391 3830 m
-3438 3830 l
-3438 3831 l
-3391 3831 l
-3387 3831 m
-3438 3831 l
-3438 3832 l
-3387 3832 l
-3384 3832 m
-3439 3832 l
-3439 3833 l
-3384 3833 l
-3381 3833 m
-3439 3833 l
-3439 3834 l
-3381 3834 l
-3377 3834 m
-3439 3834 l
-3439 3835 l
-3377 3835 l
-3374 3835 m
-3440 3835 l
-3440 3836 l
-3374 3836 l
-3371 3836 m
-3440 3836 l
-3440 3837 l
-3371 3837 l
-3367 3837 m
-3440 3837 l
-3440 3838 l
-3367 3838 l
-3364 3838 m
-3440 3838 l
-3440 3839 l
-3364 3839 l
-3361 3839 m
-3441 3839 l
-3441 3840 l
-3361 3840 l
-3357 3840 m
-3441 3840 l
-3441 3841 l
-3357 3841 l
-3354 3841 m
-3441 3841 l
-3441 3842 l
-3354 3842 l
-3351 3842 m
-3442 3842 l
-3442 3843 l
-3351 3843 l
-3347 3843 m
-3442 3843 l
-3442 3844 l
-3347 3844 l
-3344 3844 m
-3442 3844 l
-3442 3845 l
-3344 3845 l
-3341 3845 m
-3442 3845 l
-3442 3846 l
-3341 3846 l
-3337 3846 m
-3443 3846 l
-3443 3847 l
-3337 3847 l
-3334 3847 m
-3443 3847 l
-3443 3848 l
-3334 3848 l
-3331 3848 m
-3443 3848 l
-3443 3849 l
-3331 3849 l
-3327 3849 m
-3444 3849 l
-3444 3850 l
-3327 3850 l
-3324 3850 m
-3444 3850 l
-3444 3851 l
-3324 3851 l
-3321 3851 m
-3444 3851 l
-3444 3852 l
-3321 3852 l
-3318 3852 m
-3445 3852 l
-3445 3853 l
-3318 3853 l
-3318 3853 m
-3445 3853 l
-3445 3856 l
-3318 3856 l
-3318 3856 m
-3446 3856 l
-3446 3857 l
-3318 3857 l
-3319 3857 m
-3446 3857 l
-3446 3859 l
-3319 3859 l
-3319 3859 m
-3447 3859 l
-3447 3860 l
-3319 3860 l
-3320 3860 m
-3447 3860 l
-3447 3862 l
-3320 3862 l
-3320 3862 m
-3448 3862 l
-3448 3864 l
-3320 3864 l
-3321 3864 m
-3448 3864 l
-3448 3866 l
-3321 3866 l
-3321 3866 m
-3449 3866 l
-3449 3867 l
-3321 3867 l
-3322 3867 m
-3449 3867 l
-3449 3869 l
-3322 3869 l
-3322 3869 m
-3450 3869 l
-3450 3870 l
-3322 3870 l
-3323 3870 m
-3450 3870 l
-3450 3872 l
-3323 3872 l
-3323 3872 m
-3451 3872 l
-3451 3874 l
-3323 3874 l
-3324 3874 m
-3451 3874 l
-3451 3876 l
-3324 3876 l
-3324 3876 m
-3452 3876 l
-3452 3877 l
-3324 3877 l
-3325 3877 m
-3452 3877 l
-3452 3879 l
-3325 3879 l
-3325 3879 m
-3453 3879 l
-3453 3880 l
-3325 3880 l
-3326 3880 m
-3453 3880 l
-3453 3882 l
-3326 3882 l
-3326 3882 m
-3454 3882 l
-3454 3884 l
-3326 3884 l
-3327 3884 m
-3454 3884 l
-3454 3886 l
-3327 3886 l
-3327 3886 m
-3455 3886 l
-3455 3887 l
-3327 3887 l
-3328 3887 m
-3455 3887 l
-3455 3889 l
-3328 3889 l
-3328 3889 m
-3456 3889 l
-3456 3891 l
-3328 3891 l
-3329 3891 m
-3456 3891 l
-3456 3892 l
-3329 3892 l
-3329 3892 m
-3457 3892 l
-3457 3894 l
-3329 3894 l
-3330 3894 m
-3457 3894 l
-3457 3896 l
-3330 3896 l
-3330 3896 m
-3458 3896 l
-3458 3897 l
-3330 3897 l
-3331 3897 m
-3458 3897 l
-3458 3899 l
-3331 3899 l
-3331 3899 m
-3459 3899 l
-3459 3901 l
-3331 3901 l
-3332 3901 m
-3459 3901 l
-3459 3902 l
-3332 3902 l
-3332 3902 m
-3460 3902 l
-3460 3904 l
-3332 3904 l
-3333 3904 m
-3460 3904 l
-3460 3906 l
-3333 3906 l
-3333 3906 m
-3461 3906 l
-3461 3907 l
-3333 3907 l
-3334 3907 m
-3461 3907 l
-3461 3909 l
-3334 3909 l
-3334 3909 m
-3462 3909 l
-3462 3911 l
-3334 3911 l
-3335 3911 m
-3462 3911 l
-3462 3913 l
-3335 3913 l
-3335 3913 m
-3463 3913 l
-3463 3914 l
-3335 3914 l
-3336 3914 m
-3463 3914 l
-3463 3916 l
-3336 3916 l
-3336 3916 m
-3464 3916 l
-3464 3917 l
-3336 3917 l
-3337 3917 m
-3464 3917 l
-3464 3919 l
-3337 3919 l
-3337 3919 m
-3465 3919 l
-3465 3921 l
-3337 3921 l
-3338 3921 m
-3465 3921 l
-3465 3923 l
-3338 3923 l
-3338 3923 m
-3466 3923 l
-3466 3924 l
-3338 3924 l
-3339 3924 m
-3466 3924 l
-3466 3926 l
-3339 3926 l
-3339 3926 m
-3467 3926 l
-3467 3928 l
-3339 3928 l
-3340 3928 m
-3467 3928 l
-3467 3929 l
-3340 3929 l
-3340 3929 m
-3468 3929 l
-3468 3931 l
-3340 3931 l
-3341 3931 m
-3468 3931 l
-3468 3933 l
-3341 3933 l
-3341 3933 m
-3469 3933 l
-3469 3934 l
-3341 3934 l
-3342 3934 m
-3469 3934 l
-3469 3936 l
-3342 3936 l
-3342 3936 m
-3470 3936 l
-3470 3938 l
-3342 3938 l
-3343 3938 m
-3470 3938 l
-3470 3939 l
-3343 3939 l
-3343 3939 m
-3471 3939 l
-3471 3941 l
-3343 3941 l
-3344 3941 m
-3471 3941 l
-3471 3943 l
-3344 3943 l
-3344 3943 m
-3472 3943 l
-3472 3944 l
-3344 3944 l
-3345 3944 m
-3472 3944 l
-3472 3946 l
-3345 3946 l
-3345 3946 m
-3473 3946 l
-3473 3948 l
-3345 3948 l
-3346 3948 m
-3473 3948 l
-3473 3949 l
-3346 3949 l
-3346 3949 m
-3474 3949 l
-3474 3951 l
-3346 3951 l
-3347 3951 m
-3474 3951 l
-3474 3953 l
-3347 3953 l
-3347 3953 m
-3475 3953 l
-3475 3954 l
-3347 3954 l
-3348 3954 m
-3475 3954 l
-3475 3956 l
-3348 3956 l
-3348 3956 m
-3476 3956 l
-3476 3958 l
-3348 3958 l
-3349 3958 m
-3476 3958 l
-3476 3959 l
-3349 3959 l
-3349 3959 m
-3477 3959 l
-3477 3961 l
-3349 3961 l
-3350 3961 m
-3477 3961 l
-3477 3963 l
-3350 3963 l
-3350 3963 m
-3478 3963 l
-3478 3965 l
-3350 3965 l
-3351 3965 m
-3478 3965 l
-3478 3966 l
-3351 3966 l
-3351 3966 m
-3479 3966 l
-3479 3968 l
-3351 3968 l
-3352 3968 m
-3479 3968 l
-3479 3970 l
-3352 3970 l
-3352 3970 m
-3480 3970 l
-3480 3971 l
-3352 3971 l
-3353 3971 m
-3480 3971 l
-3480 3973 l
-3353 3973 l
-3353 3973 m
-3481 3973 l
-3481 3975 l
-3353 3975 l
-3354 3975 m
-3481 3975 l
-3481 3976 l
-3354 3976 l
-3354 3976 m
-3482 3976 l
-3482 3978 l
-3354 3978 l
-3355 3978 m
-3482 3978 l
-3482 3980 l
-3355 3980 l
-3355 3980 m
-3483 3980 l
-3483 3981 l
-3355 3981 l
-3356 3981 m
-3483 3981 l
-3483 3983 l
-3356 3983 l
-3356 3983 m
-3484 3983 l
-3484 3985 l
-3356 3985 l
-3357 3985 m
-3484 3985 l
-3484 3986 l
-3357 3986 l
-3357 3986 m
-3485 3986 l
-3485 3988 l
-3357 3988 l
-3358 3988 m
-3485 3988 l
-3485 3990 l
-3358 3990 l
-3358 3990 m
-3486 3990 l
-3486 3991 l
-3358 3991 l
-3359 3991 m
-3486 3991 l
-3486 3993 l
-3359 3993 l
-3359 3993 m
-3487 3993 l
-3487 3995 l
-3359 3995 l
-3360 3995 m
-3487 3995 l
-3487 3996 l
-3360 3996 l
-3360 3996 m
-3488 3996 l
-3488 3998 l
-3360 3998 l
-3361 3998 m
-3488 3998 l
-3488 4000 l
-3361 4000 l
-3361 4000 m
-3489 4000 l
-3489 4002 l
-3361 4002 l
-3362 4002 m
-3489 4002 l
-3489 4003 l
-3362 4003 l
-3362 4003 m
-3490 4003 l
-3490 4005 l
-3362 4005 l
-3363 4005 m
-3490 4005 l
-3490 4006 l
-3363 4006 l
-3363 4006 m
-3491 4006 l
-3491 4008 l
-3363 4008 l
-3364 4008 m
-3491 4008 l
-3491 4010 l
-3364 4010 l
-3364 4010 m
-3492 4010 l
-3492 4012 l
-3364 4012 l
-3365 4012 m
-3492 4012 l
-3492 4013 l
-3365 4013 l
-3365 4013 m
-3493 4013 l
-3493 4015 l
-3365 4015 l
-3366 4015 m
-3493 4015 l
-3493 4016 l
-3366 4016 l
-3366 4016 m
-3494 4016 l
-3494 4018 l
-3366 4018 l
-3367 4018 m
-3494 4018 l
-3494 4020 l
-3367 4020 l
-3367 4020 m
-3495 4020 l
-3495 4022 l
-3367 4022 l
-3368 4022 m
-3495 4022 l
-3495 4023 l
-3368 4023 l
-3368 4023 m
-3496 4023 l
-3496 4025 l
-3368 4025 l
-3369 4025 m
-3496 4025 l
-3496 4026 l
-3369 4026 l
-3369 4026 m
-3497 4026 l
-3497 4029 l
-3369 4029 l
-3370 4029 m
-3497 4029 l
-3497 4030 l
-3370 4030 l
-3370 4030 m
-3498 4030 l
-3498 4032 l
-3370 4032 l
-3371 4032 m
-3498 4032 l
-3498 4033 l
-3371 4033 l
-3371 4033 m
-3499 4033 l
-3499 4035 l
-3371 4035 l
-3372 4035 m
-3499 4035 l
-3499 4037 l
-3372 4037 l
-3372 4037 m
-3500 4037 l
-3500 4039 l
-3372 4039 l
-3373 4039 m
-3500 4039 l
-3500 4040 l
-3373 4040 l
-3373 4040 m
-3501 4040 l
-3501 4042 l
-3373 4042 l
-3374 4042 m
-3501 4042 l
-3501 4043 l
-3374 4043 l
-3374 4043 m
-3502 4043 l
-3502 4045 l
-3374 4045 l
-3375 4045 m
-3502 4045 l
-3502 4047 l
-3375 4047 l
-3375 4047 m
-3503 4047 l
-3503 4049 l
-3375 4049 l
-3376 4049 m
-3503 4049 l
-3503 4050 l
-3376 4050 l
-3376 4050 m
-3504 4050 l
-3504 4052 l
-3376 4052 l
-3377 4052 m
-3504 4052 l
-3504 4053 l
-3377 4053 l
-3377 4053 m
-3505 4053 l
-3505 4055 l
-3377 4055 l
-3378 4055 m
-3505 4055 l
-3505 4057 l
-3378 4057 l
-3378 4057 m
-3506 4057 l
-3506 4059 l
-3378 4059 l
-3379 4059 m
-3506 4059 l
-3506 4060 l
-3379 4060 l
-3379 4060 m
-3507 4060 l
-3507 4062 l
-3379 4062 l
-3380 4062 m
-3507 4062 l
-3507 4063 l
-3380 4063 l
-3380 4063 m
-3508 4063 l
-3508 4066 l
-3380 4066 l
-3381 4066 m
-3508 4066 l
-3508 4067 l
-3381 4067 l
-3381 4067 m
-3509 4067 l
-3509 4069 l
-3381 4069 l
-3382 4069 m
-3509 4069 l
-3509 4070 l
-3382 4070 l
-3382 4070 m
-3510 4070 l
-3510 4072 l
-3382 4072 l
-3383 4072 m
-3510 4072 l
-3510 4073 l
-3383 4073 l
-3383 4073 m
-3511 4073 l
-3511 4076 l
-3383 4076 l
-3384 4076 m
-3511 4076 l
-3511 4077 l
-3384 4077 l
-3384 4077 m
-3512 4077 l
-3512 4079 l
-3384 4079 l
-3385 4079 m
-3512 4079 l
-3512 4080 l
-3385 4080 l
-3385 4080 m
-3513 4080 l
-3513 4082 l
-3385 4082 l
-3386 4082 m
-3513 4082 l
-3513 4083 l
-3386 4083 l
-3386 4083 m
-3514 4083 l
-3514 4086 l
-3386 4086 l
-3387 4086 m
-3514 4086 l
-3514 4087 l
-3387 4087 l
-3387 4087 m
-3515 4087 l
-3515 4089 l
-3387 4089 l
-3388 4089 m
-3515 4089 l
-3515 4090 l
-3388 4090 l
-3388 4090 m
-3516 4090 l
-3516 4092 l
-3388 4092 l
-3389 4092 m
-3516 4092 l
-3516 4093 l
-3389 4093 l
-3389 4093 m
-3517 4093 l
-3517 4094 l
-3389 4094 l
-3389 4094 m
-3516 4094 l
-3516 4095 l
-3389 4095 l
-3389 4095 m
-3513 4095 l
-3513 4096 l
-3389 4096 l
-3390 4096 m
-3510 4096 l
-3510 4097 l
-3390 4097 l
-3390 4097 m
-3507 4097 l
-3507 4098 l
-3390 4098 l
-3390 4098 m
-3503 4098 l
-3503 4099 l
-3390 4099 l
-3391 4099 m
-3500 4099 l
-3500 4100 l
-3391 4100 l
-3391 4100 m
-3497 4100 l
-3497 4101 l
-3391 4101 l
-3391 4101 m
-3493 4101 l
-3493 4102 l
-3391 4102 l
-3391 4102 m
-3490 4102 l
-3490 4103 l
-3391 4103 l
-3392 4103 m
-3487 4103 l
-3487 4104 l
-3392 4104 l
-3392 4104 m
-3483 4104 l
-3483 4105 l
-3392 4105 l
-3392 4105 m
-3480 4105 l
-3480 4106 l
-3392 4106 l
-3393 4106 m
-3477 4106 l
-3477 4107 l
-3393 4107 l
-3393 4107 m
-3473 4107 l
-3473 4108 l
-3393 4108 l
-3393 4108 m
-3470 4108 l
-3470 4109 l
-3393 4109 l
-3394 4109 m
-3467 4109 l
-3467 4110 l
-3394 4110 l
-3394 4110 m
-3463 4110 l
-3463 4111 l
-3394 4111 l
-3394 4111 m
-3460 4111 l
-3460 4112 l
-3394 4112 l
-3394 4112 m
-3457 4112 l
-3457 4113 l
-3394 4113 l
-3395 4113 m
-3454 4113 l
-3454 4114 l
-3395 4114 l
-3395 4114 m
-3450 4114 l
-3450 4115 l
-3395 4115 l
-3395 4115 m
-3447 4115 l
-3447 4116 l
-3395 4116 l
-3396 4116 m
-3444 4116 l
-3444 4117 l
-3396 4117 l
-3396 4117 m
-3440 4117 l
-3440 4118 l
-3396 4118 l
-3396 4118 m
-3437 4118 l
-3437 4119 l
-3396 4119 l
-3397 4119 m
-3434 4119 l
-3434 4120 l
-3397 4120 l
-3397 4120 m
-3430 4120 l
-3430 4121 l
-3397 4121 l
-3397 4121 m
-3427 4121 l
-3427 4122 l
-3397 4122 l
-3397 4122 m
-3424 4122 l
-3424 4123 l
-3397 4123 l
-3398 4123 m
-3420 4123 l
-3420 4124 l
-3398 4124 l
-3398 4124 m
-3417 4124 l
-3417 4125 l
-3398 4125 l
-3398 4125 m
-3414 4125 l
-3414 4126 l
-3398 4126 l
-3399 4126 m
-3410 4126 l
-3410 4127 l
-3399 4127 l
-3399 4127 m
-3407 4127 l
-3407 4128 l
-3399 4128 l
-3399 4128 m
-3404 4128 l
-3404 4129 l
-3399 4129 l
-Y
-3433.7 3818.2 m
-3318 3853 l
-3400 4129 l
-3516 4094 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3388 3854 m
-3409 3926 l
-S
-3372 3976 m
-3385 4020 l
-3410 3987 l
-3414 3999 l
-3420 4005 l
-3425 4008 l
-3438 4009 l
-3446 4006 l
-3457 3999 l
-3463 3988 l
-3463 3975 l
-3460 3963 l
-3452 3952 l
-3447 3949 l
-3438 3948 l
-S
-3401 4072 m
-3401 4059 l
-3411 4047 l
-3430 4037 l
-3442 4034 l
-3463 4032 l
-3477 4036 l
-3485 4047 l
-3487 4055 l
-3487 4068 l
-3477 4080 l
-3458 4090 l
-3446 4093 l
-3425 4095 l
-3411 4091 l
-3403 4080 l
-3401 4072 l
-S
-1 g
-3282 4627 m
-3285 4627 l
-3285 4628 l
-3282 4628 l
-3281 4628 m
-3286 4628 l
-3286 4629 l
-3281 4629 l
-3280 4629 m
-3287 4629 l
-3287 4630 l
-3280 4630 l
-3279 4630 m
-3288 4630 l
-3288 4631 l
-3279 4631 l
-3278 4631 m
-3290 4631 l
-3290 4632 l
-3278 4632 l
-3277 4632 m
-3291 4632 l
-3291 4633 l
-3277 4633 l
-3277 4633 m
-3292 4633 l
-3292 4634 l
-3277 4634 l
-3276 4634 m
-3293 4634 l
-3293 4635 l
-3276 4635 l
-3275 4635 m
-3294 4635 l
-3294 4636 l
-3275 4636 l
-3274 4636 m
-3296 4636 l
-3296 4637 l
-3274 4637 l
-3273 4637 m
-3297 4637 l
-3297 4638 l
-3273 4638 l
-3272 4638 m
-3298 4638 l
-3298 4639 l
-3272 4639 l
-3272 4639 m
-3299 4639 l
-3299 4640 l
-3272 4640 l
-3271 4640 m
-3300 4640 l
-3300 4641 l
-3271 4641 l
-3270 4641 m
-3302 4641 l
-3302 4642 l
-3270 4642 l
-3269 4642 m
-3303 4642 l
-3303 4643 l
-3269 4643 l
-3268 4643 m
-3304 4643 l
-3304 4644 l
-3268 4644 l
-3267 4644 m
-3305 4644 l
-3305 4645 l
-3267 4645 l
-3267 4645 m
-3306 4645 l
-3306 4646 l
-3267 4646 l
-3266 4646 m
-3308 4646 l
-3308 4647 l
-3266 4647 l
-3265 4647 m
-3309 4647 l
-3309 4648 l
-3265 4648 l
-3264 4648 m
-3310 4648 l
-3310 4649 l
-3264 4649 l
-3263 4649 m
-3311 4649 l
-3311 4650 l
-3263 4650 l
-3262 4650 m
-3312 4650 l
-3312 4651 l
-3262 4651 l
-3262 4651 m
-3314 4651 l
-3314 4652 l
-3262 4652 l
-3261 4652 m
-3315 4652 l
-3315 4653 l
-3261 4653 l
-3260 4653 m
-3316 4653 l
-3316 4654 l
-3260 4654 l
-3259 4654 m
-3317 4654 l
-3317 4655 l
-3259 4655 l
-3258 4655 m
-3318 4655 l
-3318 4656 l
-3258 4656 l
-3257 4656 m
-3320 4656 l
-3320 4657 l
-3257 4657 l
-3257 4657 m
-3321 4657 l
-3321 4658 l
-3257 4658 l
-3256 4658 m
-3322 4658 l
-3322 4659 l
-3256 4659 l
-3255 4659 m
-3323 4659 l
-3323 4660 l
-3255 4660 l
-3254 4660 m
-3324 4660 l
-3324 4661 l
-3254 4661 l
-3253 4661 m
-3326 4661 l
-3326 4662 l
-3253 4662 l
-3252 4662 m
-3327 4662 l
-3327 4663 l
-3252 4663 l
-3252 4663 m
-3328 4663 l
-3328 4664 l
-3252 4664 l
-3251 4664 m
-3329 4664 l
-3329 4665 l
-3251 4665 l
-3250 4665 m
-3330 4665 l
-3330 4666 l
-3250 4666 l
-3249 4666 m
-3332 4666 l
-3332 4667 l
-3249 4667 l
-3248 4667 m
-3333 4667 l
-3333 4668 l
-3248 4668 l
-3247 4668 m
-3334 4668 l
-3334 4669 l
-3247 4669 l
-3247 4669 m
-3335 4669 l
-3335 4670 l
-3247 4670 l
-3246 4670 m
-3336 4670 l
-3336 4671 l
-3246 4671 l
-3245 4671 m
-3338 4671 l
-3338 4672 l
-3245 4672 l
-3244 4672 m
-3339 4672 l
-3339 4673 l
-3244 4673 l
-3243 4673 m
-3340 4673 l
-3340 4674 l
-3243 4674 l
-3242 4674 m
-3341 4674 l
-3341 4675 l
-3242 4675 l
-3241 4675 m
-3342 4675 l
-3342 4676 l
-3241 4676 l
-3241 4676 m
-3344 4676 l
-3344 4677 l
-3241 4677 l
-3240 4677 m
-3345 4677 l
-3345 4678 l
-3240 4678 l
-3239 4678 m
-3346 4678 l
-3346 4679 l
-3239 4679 l
-3238 4679 m
-3347 4679 l
-3347 4680 l
-3238 4680 l
-3237 4680 m
-3348 4680 l
-3348 4681 l
-3237 4681 l
-3236 4681 m
-3350 4681 l
-3350 4682 l
-3236 4682 l
-3236 4682 m
-3351 4682 l
-3351 4683 l
-3236 4683 l
-3235 4683 m
-3352 4683 l
-3352 4684 l
-3235 4684 l
-3234 4684 m
-3353 4684 l
-3353 4685 l
-3234 4685 l
-3233 4685 m
-3354 4685 l
-3354 4686 l
-3233 4686 l
-3232 4686 m
-3356 4686 l
-3356 4687 l
-3232 4687 l
-3231 4687 m
-3357 4687 l
-3357 4688 l
-3231 4688 l
-3231 4688 m
-3358 4688 l
-3358 4689 l
-3231 4689 l
-3230 4689 m
-3359 4689 l
-3359 4690 l
-3230 4690 l
-3229 4690 m
-3360 4690 l
-3360 4691 l
-3229 4691 l
-3228 4691 m
-3362 4691 l
-3362 4692 l
-3228 4692 l
-3227 4692 m
-3363 4692 l
-3363 4693 l
-3227 4693 l
-3226 4693 m
-3364 4693 l
-3364 4694 l
-3226 4694 l
-3226 4694 m
-3365 4694 l
-3365 4695 l
-3226 4695 l
-3225 4695 m
-3366 4695 l
-3366 4696 l
-3225 4696 l
-3224 4696 m
-3368 4696 l
-3368 4697 l
-3224 4697 l
-3223 4697 m
-3369 4697 l
-3369 4698 l
-3223 4698 l
-3222 4698 m
-3370 4698 l
-3370 4699 l
-3222 4699 l
-3221 4699 m
-3371 4699 l
-3371 4700 l
-3221 4700 l
-3221 4700 m
-3372 4700 l
-3372 4701 l
-3221 4701 l
-3220 4701 m
-3374 4701 l
-3374 4702 l
-3220 4702 l
-3219 4702 m
-3375 4702 l
-3375 4703 l
-3219 4703 l
-3218 4703 m
-3376 4703 l
-3376 4704 l
-3218 4704 l
-3217 4704 m
-3376 4704 l
-3376 4705 l
-3217 4705 l
-3216 4705 m
-3376 4705 l
-3376 4706 l
-3216 4706 l
-3216 4706 m
-3375 4706 l
-3375 4707 l
-3216 4707 l
-3215 4707 m
-3374 4707 l
-3374 4708 l
-3215 4708 l
-3214 4708 m
-3373 4708 l
-3373 4709 l
-3214 4709 l
-3213 4709 m
-3372 4709 l
-3372 4710 l
-3213 4710 l
-3212 4710 m
-3372 4710 l
-3372 4711 l
-3212 4711 l
-3211 4711 m
-3371 4711 l
-3371 4712 l
-3211 4712 l
-3211 4712 m
-3370 4712 l
-3370 4713 l
-3211 4713 l
-3210 4713 m
-3369 4713 l
-3369 4714 l
-3210 4714 l
-3209 4714 m
-3368 4714 l
-3368 4715 l
-3209 4715 l
-3208 4715 m
-3367 4715 l
-3367 4716 l
-3208 4716 l
-3207 4716 m
-3367 4716 l
-3367 4717 l
-3207 4717 l
-3206 4717 m
-3366 4717 l
-3366 4718 l
-3206 4718 l
-3206 4718 m
-3365 4718 l
-3365 4719 l
-3206 4719 l
-3205 4719 m
-3364 4719 l
-3364 4720 l
-3205 4720 l
-3204 4720 m
-3363 4720 l
-3363 4721 l
-3204 4721 l
-3203 4721 m
-3362 4721 l
-3362 4722 l
-3203 4722 l
-3202 4722 m
-3362 4722 l
-3362 4723 l
-3202 4723 l
-3201 4723 m
-3361 4723 l
-3361 4724 l
-3201 4724 l
-3200 4724 m
-3360 4724 l
-3360 4725 l
-3200 4725 l
-3200 4725 m
-3359 4725 l
-3359 4726 l
-3200 4726 l
-3199 4726 m
-3358 4726 l
-3358 4727 l
-3199 4727 l
-3198 4727 m
-3358 4727 l
-3358 4728 l
-3198 4728 l
-3197 4728 m
-3357 4728 l
-3357 4729 l
-3197 4729 l
-3196 4729 m
-3356 4729 l
-3356 4730 l
-3196 4730 l
-3195 4730 m
-3355 4730 l
-3355 4731 l
-3195 4731 l
-3195 4731 m
-3354 4731 l
-3354 4732 l
-3195 4732 l
-3194 4732 m
-3353 4732 l
-3353 4733 l
-3194 4733 l
-3193 4733 m
-3353 4733 l
-3353 4734 l
-3193 4734 l
-3192 4734 m
-3352 4734 l
-3352 4735 l
-3192 4735 l
-3191 4735 m
-3351 4735 l
-3351 4736 l
-3191 4736 l
-3190 4736 m
-3350 4736 l
-3350 4737 l
-3190 4737 l
-3190 4737 m
-3349 4737 l
-3349 4738 l
-3190 4738 l
-3189 4738 m
-3348 4738 l
-3348 4739 l
-3189 4739 l
-3188 4739 m
-3348 4739 l
-3348 4740 l
-3188 4740 l
-3187 4740 m
-3347 4740 l
-3347 4741 l
-3187 4741 l
-3186 4741 m
-3346 4741 l
-3346 4742 l
-3186 4742 l
-3185 4742 m
-3345 4742 l
-3345 4743 l
-3185 4743 l
-3185 4743 m
-3344 4743 l
-3344 4744 l
-3185 4744 l
-3184 4744 m
-3344 4744 l
-3344 4745 l
-3184 4745 l
-3183 4745 m
-3343 4745 l
-3343 4746 l
-3183 4746 l
-3182 4746 m
-3342 4746 l
-3342 4747 l
-3182 4747 l
-3181 4747 m
-3341 4747 l
-3341 4748 l
-3181 4748 l
-3180 4748 m
-3340 4748 l
-3340 4749 l
-3180 4749 l
-3180 4749 m
-3339 4749 l
-3339 4750 l
-3180 4750 l
-3179 4750 m
-3339 4750 l
-3339 4751 l
-3179 4751 l
-3178 4751 m
-3338 4751 l
-3338 4752 l
-3178 4752 l
-3177 4752 m
-3337 4752 l
-3337 4753 l
-3177 4753 l
-3176 4753 m
-3336 4753 l
-3336 4754 l
-3176 4754 l
-3175 4754 m
-3335 4754 l
-3335 4755 l
-3175 4755 l
-3175 4755 m
-3334 4755 l
-3334 4756 l
-3175 4756 l
-3174 4756 m
-3334 4756 l
-3334 4757 l
-3174 4757 l
-3173 4757 m
-3333 4757 l
-3333 4758 l
-3173 4758 l
-3172 4758 m
-3332 4758 l
-3332 4759 l
-3172 4759 l
-3171 4759 m
-3331 4759 l
-3331 4760 l
-3171 4760 l
-3170 4760 m
-3330 4760 l
-3330 4762 l
-3170 4762 l
-3169 4762 m
-3329 4762 l
-3329 4763 l
-3169 4763 l
-3168 4763 m
-3328 4763 l
-3328 4764 l
-3168 4764 l
-3167 4764 m
-3327 4764 l
-3327 4765 l
-3167 4765 l
-3166 4765 m
-3326 4765 l
-3326 4766 l
-3166 4766 l
-3165 4766 m
-3325 4766 l
-3325 4767 l
-3165 4767 l
-3165 4767 m
-3325 4767 l
-3325 4768 l
-3165 4768 l
-3165 4768 m
-3324 4768 l
-3324 4769 l
-3165 4769 l
-3166 4769 m
-3323 4769 l
-3323 4770 l
-3166 4770 l
-3167 4770 m
-3322 4770 l
-3322 4771 l
-3167 4771 l
-3168 4771 m
-3321 4771 l
-3321 4772 l
-3168 4772 l
-3169 4772 m
-3320 4772 l
-3320 4773 l
-3169 4773 l
-3171 4773 m
-3320 4773 l
-3320 4774 l
-3171 4774 l
-3172 4774 m
-3319 4774 l
-3319 4775 l
-3172 4775 l
-3173 4775 m
-3318 4775 l
-3318 4776 l
-3173 4776 l
-3174 4776 m
-3317 4776 l
-3317 4777 l
-3174 4777 l
-3175 4777 m
-3316 4777 l
-3316 4778 l
-3175 4778 l
-3177 4778 m
-3316 4778 l
-3316 4779 l
-3177 4779 l
-3178 4779 m
-3315 4779 l
-3315 4780 l
-3178 4780 l
-3179 4780 m
-3314 4780 l
-3314 4781 l
-3179 4781 l
-3180 4781 m
-3313 4781 l
-3313 4782 l
-3180 4782 l
-3181 4782 m
-3312 4782 l
-3312 4783 l
-3181 4783 l
-3183 4783 m
-3311 4783 l
-3311 4784 l
-3183 4784 l
-3184 4784 m
-3311 4784 l
-3311 4785 l
-3184 4785 l
-3185 4785 m
-3310 4785 l
-3310 4786 l
-3185 4786 l
-3186 4786 m
-3309 4786 l
-3309 4787 l
-3186 4787 l
-3187 4787 m
-3308 4787 l
-3308 4788 l
-3187 4788 l
-3189 4788 m
-3307 4788 l
-3307 4789 l
-3189 4789 l
-3190 4789 m
-3306 4789 l
-3306 4790 l
-3190 4790 l
-3191 4790 m
-3306 4790 l
-3306 4791 l
-3191 4791 l
-3192 4791 m
-3305 4791 l
-3305 4792 l
-3192 4792 l
-3193 4792 m
-3304 4792 l
-3304 4793 l
-3193 4793 l
-3195 4793 m
-3303 4793 l
-3303 4794 l
-3195 4794 l
-3196 4794 m
-3302 4794 l
-3302 4795 l
-3196 4795 l
-3197 4795 m
-3302 4795 l
-3302 4796 l
-3197 4796 l
-3198 4796 m
-3301 4796 l
-3301 4797 l
-3198 4797 l
-3199 4797 m
-3300 4797 l
-3300 4798 l
-3199 4798 l
-3201 4798 m
-3299 4798 l
-3299 4799 l
-3201 4799 l
-3202 4799 m
-3298 4799 l
-3298 4800 l
-3202 4800 l
-3203 4800 m
-3297 4800 l
-3297 4801 l
-3203 4801 l
-3204 4801 m
-3297 4801 l
-3297 4802 l
-3204 4802 l
-3205 4802 m
-3296 4802 l
-3296 4803 l
-3205 4803 l
-3207 4803 m
-3295 4803 l
-3295 4804 l
-3207 4804 l
-3208 4804 m
-3294 4804 l
-3294 4805 l
-3208 4805 l
-3209 4805 m
-3293 4805 l
-3293 4806 l
-3209 4806 l
-3210 4806 m
-3292 4806 l
-3292 4807 l
-3210 4807 l
-3212 4807 m
-3292 4807 l
-3292 4808 l
-3212 4808 l
-3213 4808 m
-3291 4808 l
-3291 4809 l
-3213 4809 l
-3214 4809 m
-3290 4809 l
-3290 4810 l
-3214 4810 l
-3215 4810 m
-3289 4810 l
-3289 4811 l
-3215 4811 l
-3216 4811 m
-3288 4811 l
-3288 4812 l
-3216 4812 l
-3218 4812 m
-3288 4812 l
-3288 4813 l
-3218 4813 l
-3219 4813 m
-3287 4813 l
-3287 4814 l
-3219 4814 l
-3220 4814 m
-3286 4814 l
-3286 4815 l
-3220 4815 l
-3221 4815 m
-3285 4815 l
-3285 4816 l
-3221 4816 l
-3222 4816 m
-3284 4816 l
-3284 4817 l
-3222 4817 l
-3224 4817 m
-3283 4817 l
-3283 4818 l
-3224 4818 l
-3225 4818 m
-3283 4818 l
-3283 4819 l
-3225 4819 l
-3226 4819 m
-3282 4819 l
-3282 4820 l
-3226 4820 l
-3227 4820 m
-3281 4820 l
-3281 4821 l
-3227 4821 l
-3228 4821 m
-3280 4821 l
-3280 4822 l
-3228 4822 l
-3230 4822 m
-3279 4822 l
-3279 4823 l
-3230 4823 l
-3231 4823 m
-3278 4823 l
-3278 4824 l
-3231 4824 l
-3232 4824 m
-3278 4824 l
-3278 4825 l
-3232 4825 l
-3233 4825 m
-3277 4825 l
-3277 4826 l
-3233 4826 l
-3234 4826 m
-3276 4826 l
-3276 4827 l
-3234 4827 l
-3236 4827 m
-3275 4827 l
-3275 4828 l
-3236 4828 l
-3237 4828 m
-3274 4828 l
-3274 4829 l
-3237 4829 l
-3238 4829 m
-3274 4829 l
-3274 4830 l
-3238 4830 l
-3239 4830 m
-3273 4830 l
-3273 4831 l
-3239 4831 l
-3240 4831 m
-3272 4831 l
-3272 4832 l
-3240 4832 l
-3242 4832 m
-3271 4832 l
-3271 4833 l
-3242 4833 l
-3243 4833 m
-3270 4833 l
-3270 4834 l
-3243 4834 l
-3244 4834 m
-3269 4834 l
-3269 4835 l
-3244 4835 l
-3245 4835 m
-3269 4835 l
-3269 4836 l
-3245 4836 l
-3246 4836 m
-3268 4836 l
-3268 4837 l
-3246 4837 l
-3248 4837 m
-3267 4837 l
-3267 4838 l
-3248 4838 l
-3249 4838 m
-3266 4838 l
-3266 4839 l
-3249 4839 l
-3250 4839 m
-3265 4839 l
-3265 4840 l
-3250 4840 l
-3251 4840 m
-3264 4840 l
-3264 4841 l
-3251 4841 l
-3252 4841 m
-3264 4841 l
-3264 4842 l
-3252 4842 l
-3254 4842 m
-3263 4842 l
-3263 4843 l
-3254 4843 l
-3255 4843 m
-3262 4843 l
-3262 4844 l
-3255 4844 l
-3256 4844 m
-3261 4844 l
-3261 4845 l
-3256 4845 l
-3257 4845 m
-3260 4845 l
-3260 4846 l
-3257 4846 l
-Y
-3375.8 4704.2 m
-3283 4627 l
-3165 4768 l
-3259 4846 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3277 4660 m
-3247 4695 l
-3289 4698 l
-3281 4707 l
-3279 4716 l
-3280 4722 l
-3287 4733 l
-3293 4739 l
-3305 4743 l
-3317 4742 l
-3328 4735 l
-3336 4726 l
-3341 4713 l
-3341 4708 l
-3337 4699 l
-S
-3213 4737 m
-3224 4730 l
-3239 4732 l
-3258 4742 l
-3267 4750 l
-3281 4767 l
-3285 4781 l
-3280 4793 l
-3275 4800 l
-3264 4807 l
-3249 4805 l
-3230 4795 l
-3220 4787 l
-3207 4770 l
-3203 4756 l
-3207 4744 l
-3213 4737 l
-S
-1 g
-2920 4919 m
-2925 4919 l
-2925 4920 l
-2920 4920 l
-2916 4920 m
-2925 4920 l
-2925 4921 l
-2916 4921 l
-2913 4921 m
-2925 4921 l
-2925 4922 l
-2913 4922 l
-2909 4922 m
-2926 4922 l
-2926 4923 l
-2909 4923 l
-2906 4923 m
-2926 4923 l
-2926 4924 l
-2906 4924 l
-2902 4924 m
-2926 4924 l
-2926 4925 l
-2902 4925 l
-2899 4925 m
-2927 4925 l
-2927 4926 l
-2899 4926 l
-2895 4926 m
-2927 4926 l
-2927 4927 l
-2895 4927 l
-2892 4927 m
-2927 4927 l
-2927 4928 l
-2892 4928 l
-2888 4928 m
-2927 4928 l
-2927 4929 l
-2888 4929 l
-2885 4929 m
-2928 4929 l
-2928 4930 l
-2885 4930 l
-2881 4930 m
-2928 4930 l
-2928 4931 l
-2881 4931 l
-2878 4931 m
-2928 4931 l
-2928 4932 l
-2878 4932 l
-2874 4932 m
-2929 4932 l
-2929 4933 l
-2874 4933 l
-2871 4933 m
-2929 4933 l
-2929 4934 l
-2871 4934 l
-2867 4934 m
-2929 4934 l
-2929 4935 l
-2867 4935 l
-2864 4935 m
-2929 4935 l
-2929 4936 l
-2864 4936 l
-2860 4936 m
-2930 4936 l
-2930 4937 l
-2860 4937 l
-2857 4937 m
-2930 4937 l
-2930 4938 l
-2857 4938 l
-2853 4938 m
-2930 4938 l
-2930 4939 l
-2853 4939 l
-2850 4939 m
-2931 4939 l
-2931 4940 l
-2850 4940 l
-2846 4940 m
-2931 4940 l
-2931 4941 l
-2846 4941 l
-2843 4941 m
-2931 4941 l
-2931 4942 l
-2843 4942 l
-2839 4942 m
-2931 4942 l
-2931 4943 l
-2839 4943 l
-2836 4943 m
-2932 4943 l
-2932 4944 l
-2836 4944 l
-2832 4944 m
-2932 4944 l
-2932 4945 l
-2832 4945 l
-2829 4945 m
-2932 4945 l
-2932 4946 l
-2829 4946 l
-2825 4946 m
-2933 4946 l
-2933 4947 l
-2825 4947 l
-2822 4947 m
-2933 4947 l
-2933 4948 l
-2822 4948 l
-2818 4948 m
-2933 4948 l
-2933 4949 l
-2818 4949 l
-2815 4949 m
-2933 4949 l
-2933 4950 l
-2815 4950 l
-2811 4950 m
-2934 4950 l
-2934 4951 l
-2811 4951 l
-2808 4951 m
-2934 4951 l
-2934 4952 l
-2808 4952 l
-2804 4952 m
-2934 4952 l
-2934 4953 l
-2804 4953 l
-2801 4953 m
-2935 4953 l
-2935 4954 l
-2801 4954 l
-2797 4954 m
-2935 4954 l
-2935 4955 l
-2797 4955 l
-2794 4955 m
-2935 4955 l
-2935 4956 l
-2794 4956 l
-2790 4956 m
-2935 4956 l
-2935 4957 l
-2790 4957 l
-2787 4957 m
-2936 4957 l
-2936 4958 l
-2787 4958 l
-2783 4958 m
-2936 4958 l
-2936 4959 l
-2783 4959 l
-2780 4959 m
-2936 4959 l
-2936 4960 l
-2780 4960 l
-2776 4960 m
-2937 4960 l
-2937 4961 l
-2776 4961 l
-2773 4961 m
-2937 4961 l
-2937 4962 l
-2773 4962 l
-2769 4962 m
-2937 4962 l
-2937 4963 l
-2769 4963 l
-2766 4963 m
-2937 4963 l
-2937 4964 l
-2766 4964 l
-2762 4964 m
-2938 4964 l
-2938 4965 l
-2762 4965 l
-2759 4965 m
-2938 4965 l
-2938 4966 l
-2759 4966 l
-2755 4966 m
-2938 4966 l
-2938 4967 l
-2755 4967 l
-2752 4967 m
-2939 4967 l
-2939 4968 l
-2752 4968 l
-2752 4968 m
-2939 4968 l
-2939 4971 l
-2752 4971 l
-2752 4971 m
-2940 4971 l
-2940 4972 l
-2752 4972 l
-2753 4972 m
-2940 4972 l
-2940 4974 l
-2753 4974 l
-2753 4974 m
-2941 4974 l
-2941 4976 l
-2753 4976 l
-2754 4976 m
-2941 4976 l
-2941 4978 l
-2754 4978 l
-2754 4978 m
-2942 4978 l
-2942 4979 l
-2754 4979 l
-2755 4979 m
-2942 4979 l
-2942 4981 l
-2755 4981 l
-2755 4981 m
-2943 4981 l
-2943 4983 l
-2755 4983 l
-2756 4983 m
-2943 4983 l
-2943 4985 l
-2756 4985 l
-2756 4985 m
-2944 4985 l
-2944 4986 l
-2756 4986 l
-2757 4986 m
-2944 4986 l
-2944 4988 l
-2757 4988 l
-2757 4988 m
-2945 4988 l
-2945 4990 l
-2757 4990 l
-2758 4990 m
-2945 4990 l
-2945 4992 l
-2758 4992 l
-2758 4992 m
-2946 4992 l
-2946 4993 l
-2758 4993 l
-2759 4993 m
-2946 4993 l
-2946 4995 l
-2759 4995 l
-2759 4995 m
-2947 4995 l
-2947 4997 l
-2759 4997 l
-2760 4997 m
-2947 4997 l
-2947 4999 l
-2760 4999 l
-2760 4999 m
-2948 4999 l
-2948 5000 l
-2760 5000 l
-2761 5000 m
-2948 5000 l
-2948 5002 l
-2761 5002 l
-2761 5002 m
-2949 5002 l
-2949 5004 l
-2761 5004 l
-2762 5004 m
-2949 5004 l
-2949 5006 l
-2762 5006 l
-2762 5006 m
-2950 5006 l
-2950 5007 l
-2762 5007 l
-2763 5007 m
-2950 5007 l
-2950 5009 l
-2763 5009 l
-2763 5009 m
-2951 5009 l
-2951 5011 l
-2763 5011 l
-2764 5011 m
-2951 5011 l
-2951 5013 l
-2764 5013 l
-2764 5013 m
-2952 5013 l
-2952 5015 l
-2764 5015 l
-2765 5015 m
-2952 5015 l
-2952 5016 l
-2765 5016 l
-2765 5016 m
-2953 5016 l
-2953 5018 l
-2765 5018 l
-2766 5018 m
-2953 5018 l
-2953 5020 l
-2766 5020 l
-2766 5020 m
-2954 5020 l
-2954 5022 l
-2766 5022 l
-2767 5022 m
-2954 5022 l
-2954 5023 l
-2767 5023 l
-2767 5023 m
-2955 5023 l
-2955 5025 l
-2767 5025 l
-2768 5025 m
-2955 5025 l
-2955 5026 l
-2768 5026 l
-2768 5026 m
-2956 5026 l
-2956 5029 l
-2768 5029 l
-2769 5029 m
-2956 5029 l
-2956 5030 l
-2769 5030 l
-2769 5030 m
-2957 5030 l
-2957 5032 l
-2769 5032 l
-2770 5032 m
-2957 5032 l
-2957 5033 l
-2770 5033 l
-2770 5033 m
-2958 5033 l
-2958 5035 l
-2770 5035 l
-2770 5035 m
-2958 5035 l
-2958 5036 l
-2770 5036 l
-2771 5036 m
-2957 5036 l
-2957 5037 l
-2771 5037 l
-2771 5037 m
-2953 5037 l
-2953 5038 l
-2771 5038 l
-2771 5038 m
-2950 5038 l
-2950 5039 l
-2771 5039 l
-2772 5039 m
-2946 5039 l
-2946 5040 l
-2772 5040 l
-2772 5040 m
-2943 5040 l
-2943 5041 l
-2772 5041 l
-2772 5041 m
-2939 5041 l
-2939 5042 l
-2772 5042 l
-2772 5042 m
-2936 5042 l
-2936 5043 l
-2772 5043 l
-2773 5043 m
-2932 5043 l
-2932 5044 l
-2773 5044 l
-2773 5044 m
-2929 5044 l
-2929 5045 l
-2773 5045 l
-2773 5045 m
-2925 5045 l
-2925 5046 l
-2773 5046 l
-2774 5046 m
-2922 5046 l
-2922 5047 l
-2774 5047 l
-2774 5047 m
-2918 5047 l
-2918 5048 l
-2774 5048 l
-2774 5048 m
-2915 5048 l
-2915 5049 l
-2774 5049 l
-2774 5049 m
-2911 5049 l
-2911 5050 l
-2774 5050 l
-2775 5050 m
-2908 5050 l
-2908 5051 l
-2775 5051 l
-2775 5051 m
-2904 5051 l
-2904 5052 l
-2775 5052 l
-2775 5052 m
-2901 5052 l
-2901 5053 l
-2775 5053 l
-2775 5053 m
-2897 5053 l
-2897 5054 l
-2775 5054 l
-2776 5054 m
-2894 5054 l
-2894 5055 l
-2776 5055 l
-2776 5055 m
-2890 5055 l
-2890 5056 l
-2776 5056 l
-2776 5056 m
-2887 5056 l
-2887 5057 l
-2776 5057 l
-2777 5057 m
-2883 5057 l
-2883 5058 l
-2777 5058 l
-2777 5058 m
-2880 5058 l
-2880 5059 l
-2777 5059 l
-2777 5059 m
-2876 5059 l
-2876 5060 l
-2777 5060 l
-2777 5060 m
-2873 5060 l
-2873 5061 l
-2777 5061 l
-2778 5061 m
-2869 5061 l
-2869 5062 l
-2778 5062 l
-2778 5062 m
-2866 5062 l
-2866 5063 l
-2778 5063 l
-2778 5063 m
-2862 5063 l
-2862 5064 l
-2778 5064 l
-2779 5064 m
-2859 5064 l
-2859 5065 l
-2779 5065 l
-2779 5065 m
-2855 5065 l
-2855 5066 l
-2779 5066 l
-2779 5066 m
-2852 5066 l
-2852 5067 l
-2779 5067 l
-2779 5067 m
-2848 5067 l
-2848 5068 l
-2779 5068 l
-2780 5068 m
-2845 5068 l
-2845 5069 l
-2780 5069 l
-2780 5069 m
-2841 5069 l
-2841 5070 l
-2780 5070 l
-2780 5070 m
-2838 5070 l
-2838 5071 l
-2780 5071 l
-2781 5071 m
-2834 5071 l
-2834 5072 l
-2781 5072 l
-2781 5072 m
-2831 5072 l
-2831 5073 l
-2781 5073 l
-2781 5073 m
-2827 5073 l
-2827 5074 l
-2781 5074 l
-2781 5074 m
-2824 5074 l
-2824 5075 l
-2781 5075 l
-2782 5075 m
-2820 5075 l
-2820 5076 l
-2782 5076 l
-2782 5076 m
-2817 5076 l
-2817 5077 l
-2782 5077 l
-2782 5077 m
-2813 5077 l
-2813 5078 l
-2782 5078 l
-2783 5078 m
-2810 5078 l
-2810 5079 l
-2783 5079 l
-2783 5079 m
-2806 5079 l
-2806 5080 l
-2783 5080 l
-2783 5080 m
-2803 5080 l
-2803 5081 l
-2783 5081 l
-2783 5081 m
-2799 5081 l
-2799 5082 l
-2783 5082 l
-2784 5082 m
-2796 5082 l
-2796 5083 l
-2784 5083 l
-2784 5083 m
-2792 5083 l
-2792 5084 l
-2784 5084 l
-2784 5084 m
-2789 5084 l
-2789 5085 l
-2784 5085 l
-Y
-2957.5 5035.7 m
-2924 4919 l
-2752 4968 l
-2785 5085 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2864 4967 m
-2866 4958 l
-2877 4950 l
-2885 4948 l
-2898 4948 l
-2909 4958 l
-2919 4977 l
-2925 4997 l
-2925 5014 l
-2920 5025 l
-2909 5032 l
-2905 5033 l
-2892 5033 l
-2881 5027 l
-2874 5016 l
-2873 5012 l
-2873 4999 l
-2879 4989 l
-2890 4981 l
-2894 4980 l
-2907 4981 l
-2917 4986 l
-2925 4997 l
-S
-2808 4970 m
-2822 4970 l
-2833 4980 l
-2843 4999 l
-2846 5011 l
-2848 5032 l
-2843 5046 l
-2832 5054 l
-2824 5056 l
-2811 5056 l
-2800 5046 l
-2790 5027 l
-2787 5015 l
-2785 4994 l
-2789 4979 l
-2800 4972 l
-2808 4970 l
-S
-1 g
-2198 4859 m
-2203 4859 l
-2203 4860 l
-2198 4860 l
-2198 4860 m
-2205 4860 l
-2205 4861 l
-2198 4861 l
-2197 4861 m
-2208 4861 l
-2208 4862 l
-2197 4862 l
-2197 4862 m
-2210 4862 l
-2210 4863 l
-2197 4863 l
-2196 4863 m
-2213 4863 l
-2213 4864 l
-2196 4864 l
-2196 4864 m
-2215 4864 l
-2215 4865 l
-2196 4865 l
-2196 4865 m
-2218 4865 l
-2218 4866 l
-2196 4866 l
-2195 4866 m
-2220 4866 l
-2220 4867 l
-2195 4867 l
-2195 4867 m
-2223 4867 l
-2223 4868 l
-2195 4868 l
-2194 4868 m
-2225 4868 l
-2225 4869 l
-2194 4869 l
-2194 4869 m
-2228 4869 l
-2228 4870 l
-2194 4870 l
-2194 4870 m
-2230 4870 l
-2230 4871 l
-2194 4871 l
-2193 4871 m
-2233 4871 l
-2233 4872 l
-2193 4872 l
-2193 4872 m
-2235 4872 l
-2235 4873 l
-2193 4873 l
-2192 4873 m
-2238 4873 l
-2238 4874 l
-2192 4874 l
-2192 4874 m
-2240 4874 l
-2240 4875 l
-2192 4875 l
-2192 4875 m
-2243 4875 l
-2243 4876 l
-2192 4876 l
-2191 4876 m
-2245 4876 l
-2245 4877 l
-2191 4877 l
-2191 4877 m
-2248 4877 l
-2248 4878 l
-2191 4878 l
-2190 4878 m
-2250 4878 l
-2250 4879 l
-2190 4879 l
-2190 4879 m
-2253 4879 l
-2253 4880 l
-2190 4880 l
-2190 4880 m
-2255 4880 l
-2255 4881 l
-2190 4881 l
-2189 4881 m
-2258 4881 l
-2258 4882 l
-2189 4882 l
-2189 4882 m
-2260 4882 l
-2260 4883 l
-2189 4883 l
-2188 4883 m
-2263 4883 l
-2263 4884 l
-2188 4884 l
-2188 4884 m
-2265 4884 l
-2265 4885 l
-2188 4885 l
-2188 4885 m
-2268 4885 l
-2268 4886 l
-2188 4886 l
-2187 4886 m
-2270 4886 l
-2270 4887 l
-2187 4887 l
-2187 4887 m
-2273 4887 l
-2273 4888 l
-2187 4888 l
-2186 4888 m
-2275 4888 l
-2275 4889 l
-2186 4889 l
-2186 4889 m
-2278 4889 l
-2278 4890 l
-2186 4890 l
-2186 4890 m
-2280 4890 l
-2280 4891 l
-2186 4891 l
-2185 4891 m
-2283 4891 l
-2283 4892 l
-2185 4892 l
-2185 4892 m
-2285 4892 l
-2285 4893 l
-2185 4893 l
-2184 4893 m
-2288 4893 l
-2288 4894 l
-2184 4894 l
-2184 4894 m
-2290 4894 l
-2290 4895 l
-2184 4895 l
-2184 4895 m
-2293 4895 l
-2293 4896 l
-2184 4896 l
-2183 4896 m
-2295 4896 l
-2295 4897 l
-2183 4897 l
-2183 4897 m
-2298 4897 l
-2298 4898 l
-2183 4898 l
-2182 4898 m
-2300 4898 l
-2300 4899 l
-2182 4899 l
-2182 4899 m
-2303 4899 l
-2303 4900 l
-2182 4900 l
-2182 4900 m
-2305 4900 l
-2305 4901 l
-2182 4901 l
-2181 4901 m
-2308 4901 l
-2308 4902 l
-2181 4902 l
-2181 4902 m
-2310 4902 l
-2310 4903 l
-2181 4903 l
-2180 4903 m
-2313 4903 l
-2313 4904 l
-2180 4904 l
-2180 4904 m
-2315 4904 l
-2315 4905 l
-2180 4905 l
-2180 4905 m
-2318 4905 l
-2318 4906 l
-2180 4906 l
-2179 4906 m
-2320 4906 l
-2320 4907 l
-2179 4907 l
-2179 4907 m
-2323 4907 l
-2323 4908 l
-2179 4908 l
-2178 4908 m
-2325 4908 l
-2325 4909 l
-2178 4909 l
-2178 4909 m
-2328 4909 l
-2328 4910 l
-2178 4910 l
-2178 4910 m
-2330 4910 l
-2330 4911 l
-2178 4911 l
-2177 4911 m
-2333 4911 l
-2333 4912 l
-2177 4912 l
-2177 4912 m
-2335 4912 l
-2335 4913 l
-2177 4913 l
-2176 4913 m
-2338 4913 l
-2338 4914 l
-2176 4914 l
-2176 4914 m
-2340 4914 l
-2340 4915 l
-2176 4915 l
-2176 4915 m
-2343 4915 l
-2343 4916 l
-2176 4916 l
-2175 4916 m
-2345 4916 l
-2345 4917 l
-2175 4917 l
-2175 4917 m
-2348 4917 l
-2348 4918 l
-2175 4918 l
-2174 4918 m
-2350 4918 l
-2350 4919 l
-2174 4919 l
-2174 4919 m
-2353 4919 l
-2353 4920 l
-2174 4920 l
-2174 4920 m
-2355 4920 l
-2355 4921 l
-2174 4921 l
-2173 4921 m
-2358 4921 l
-2358 4922 l
-2173 4922 l
-2173 4922 m
-2360 4922 l
-2360 4923 l
-2173 4923 l
-2172 4923 m
-2363 4923 l
-2363 4924 l
-2172 4924 l
-2172 4924 m
-2365 4924 l
-2365 4925 l
-2172 4925 l
-2172 4925 m
-2368 4925 l
-2368 4926 l
-2172 4926 l
-2171 4926 m
-2370 4926 l
-2370 4927 l
-2171 4927 l
-2171 4927 m
-2370 4927 l
-2370 4928 l
-2171 4928 l
-2170 4928 m
-2370 4928 l
-2370 4930 l
-2170 4930 l
-2170 4930 m
-2369 4930 l
-2369 4931 l
-2170 4931 l
-2169 4931 m
-2369 4931 l
-2369 4932 l
-2169 4932 l
-2169 4932 m
-2368 4932 l
-2368 4933 l
-2169 4933 l
-2168 4933 m
-2368 4933 l
-2368 4935 l
-2168 4935 l
-2168 4935 m
-2367 4935 l
-2367 4936 l
-2168 4936 l
-2167 4936 m
-2367 4936 l
-2367 4937 l
-2167 4937 l
-2167 4937 m
-2366 4937 l
-2366 4938 l
-2167 4938 l
-2166 4938 m
-2366 4938 l
-2366 4940 l
-2166 4940 l
-2166 4940 m
-2365 4940 l
-2365 4941 l
-2166 4941 l
-2165 4941 m
-2365 4941 l
-2365 4942 l
-2165 4942 l
-2165 4942 m
-2364 4942 l
-2364 4943 l
-2165 4943 l
-2164 4943 m
-2364 4943 l
-2364 4945 l
-2164 4945 l
-2164 4945 m
-2363 4945 l
-2363 4946 l
-2164 4946 l
-2163 4946 m
-2363 4946 l
-2363 4947 l
-2163 4947 l
-2163 4947 m
-2362 4947 l
-2362 4948 l
-2163 4948 l
-2162 4948 m
-2362 4948 l
-2362 4950 l
-2162 4950 l
-2162 4950 m
-2361 4950 l
-2361 4951 l
-2162 4951 l
-2161 4951 m
-2361 4951 l
-2361 4952 l
-2161 4952 l
-2161 4952 m
-2360 4952 l
-2360 4953 l
-2161 4953 l
-2160 4953 m
-2360 4953 l
-2360 4955 l
-2160 4955 l
-2160 4955 m
-2359 4955 l
-2359 4956 l
-2160 4956 l
-2159 4956 m
-2359 4956 l
-2359 4957 l
-2159 4957 l
-2159 4957 m
-2358 4957 l
-2358 4958 l
-2159 4958 l
-2158 4958 m
-2358 4958 l
-2358 4959 l
-2158 4959 l
-2158 4959 m
-2357 4959 l
-2357 4961 l
-2158 4961 l
-2157 4961 m
-2357 4961 l
-2357 4962 l
-2157 4962 l
-2157 4962 m
-2356 4962 l
-2356 4963 l
-2157 4963 l
-2156 4963 m
-2356 4963 l
-2356 4964 l
-2156 4964 l
-2156 4964 m
-2355 4964 l
-2355 4966 l
-2156 4966 l
-2155 4966 m
-2355 4966 l
-2355 4967 l
-2155 4967 l
-2155 4967 m
-2354 4967 l
-2354 4968 l
-2155 4968 l
-2154 4968 m
-2354 4968 l
-2354 4969 l
-2154 4969 l
-2154 4969 m
-2353 4969 l
-2353 4971 l
-2154 4971 l
-2154 4971 m
-2353 4971 l
-2353 4972 l
-2154 4972 l
-2156 4972 m
-2352 4972 l
-2352 4973 l
-2156 4973 l
-2158 4973 m
-2352 4973 l
-2352 4974 l
-2158 4974 l
-2161 4974 m
-2351 4974 l
-2351 4975 l
-2161 4975 l
-2163 4975 m
-2351 4975 l
-2351 4976 l
-2163 4976 l
-2166 4976 m
-2351 4976 l
-2351 4977 l
-2166 4977 l
-2168 4977 m
-2350 4977 l
-2350 4978 l
-2168 4978 l
-2171 4978 m
-2350 4978 l
-2350 4979 l
-2171 4979 l
-2173 4979 m
-2349 4979 l
-2349 4980 l
-2173 4980 l
-2176 4980 m
-2349 4980 l
-2349 4981 l
-2176 4981 l
-2178 4981 m
-2349 4981 l
-2349 4982 l
-2178 4982 l
-2181 4982 m
-2348 4982 l
-2348 4983 l
-2181 4983 l
-2183 4983 m
-2348 4983 l
-2348 4984 l
-2183 4984 l
-2186 4984 m
-2347 4984 l
-2347 4985 l
-2186 4985 l
-2188 4985 m
-2347 4985 l
-2347 4986 l
-2188 4986 l
-2190 4986 m
-2346 4986 l
-2346 4987 l
-2190 4987 l
-2193 4987 m
-2346 4987 l
-2346 4988 l
-2193 4988 l
-2195 4988 m
-2346 4988 l
-2346 4989 l
-2195 4989 l
-2198 4989 m
-2345 4989 l
-2345 4990 l
-2198 4990 l
-2200 4990 m
-2345 4990 l
-2345 4991 l
-2200 4991 l
-2203 4991 m
-2344 4991 l
-2344 4992 l
-2203 4992 l
-2205 4992 m
-2344 4992 l
-2344 4993 l
-2205 4993 l
-2208 4993 m
-2344 4993 l
-2344 4994 l
-2208 4994 l
-2210 4994 m
-2343 4994 l
-2343 4995 l
-2210 4995 l
-2213 4995 m
-2343 4995 l
-2343 4996 l
-2213 4996 l
-2215 4996 m
-2342 4996 l
-2342 4997 l
-2215 4997 l
-2218 4997 m
-2342 4997 l
-2342 4998 l
-2218 4998 l
-2220 4998 m
-2342 4998 l
-2342 4999 l
-2220 4999 l
-2222 4999 m
-2341 4999 l
-2341 5000 l
-2222 5000 l
-2225 5000 m
-2341 5000 l
-2341 5001 l
-2225 5001 l
-2227 5001 m
-2340 5001 l
-2340 5002 l
-2227 5002 l
-2230 5002 m
-2340 5002 l
-2340 5003 l
-2230 5003 l
-2232 5003 m
-2340 5003 l
-2340 5004 l
-2232 5004 l
-2235 5004 m
-2339 5004 l
-2339 5005 l
-2235 5005 l
-2237 5005 m
-2339 5005 l
-2339 5006 l
-2237 5006 l
-2240 5006 m
-2338 5006 l
-2338 5007 l
-2240 5007 l
-2242 5007 m
-2338 5007 l
-2338 5008 l
-2242 5008 l
-2245 5008 m
-2338 5008 l
-2338 5009 l
-2245 5009 l
-2247 5009 m
-2337 5009 l
-2337 5010 l
-2247 5010 l
-2250 5010 m
-2337 5010 l
-2337 5011 l
-2250 5011 l
-2252 5011 m
-2336 5011 l
-2336 5012 l
-2252 5012 l
-2255 5012 m
-2336 5012 l
-2336 5013 l
-2255 5013 l
-2257 5013 m
-2335 5013 l
-2335 5014 l
-2257 5014 l
-2259 5014 m
-2335 5014 l
-2335 5015 l
-2259 5015 l
-2262 5015 m
-2335 5015 l
-2335 5016 l
-2262 5016 l
-2264 5016 m
-2334 5016 l
-2334 5017 l
-2264 5017 l
-2267 5017 m
-2334 5017 l
-2334 5018 l
-2267 5018 l
-2269 5018 m
-2333 5018 l
-2333 5019 l
-2269 5019 l
-2272 5019 m
-2333 5019 l
-2333 5020 l
-2272 5020 l
-2274 5020 m
-2333 5020 l
-2333 5021 l
-2274 5021 l
-2277 5021 m
-2332 5021 l
-2332 5022 l
-2277 5022 l
-2279 5022 m
-2332 5022 l
-2332 5023 l
-2279 5023 l
-2282 5023 m
-2331 5023 l
-2331 5024 l
-2282 5024 l
-2284 5024 m
-2331 5024 l
-2331 5025 l
-2284 5025 l
-2287 5025 m
-2331 5025 l
-2331 5026 l
-2287 5026 l
-2289 5026 m
-2330 5026 l
-2330 5027 l
-2289 5027 l
-2291 5027 m
-2330 5027 l
-2330 5028 l
-2291 5028 l
-2294 5028 m
-2329 5028 l
-2329 5029 l
-2294 5029 l
-2296 5029 m
-2329 5029 l
-2329 5030 l
-2296 5030 l
-2299 5030 m
-2329 5030 l
-2329 5031 l
-2299 5031 l
-2301 5031 m
-2328 5031 l
-2328 5032 l
-2301 5032 l
-2304 5032 m
-2328 5032 l
-2328 5033 l
-2304 5033 l
-2306 5033 m
-2327 5033 l
-2327 5034 l
-2306 5034 l
-2309 5034 m
-2327 5034 l
-2327 5035 l
-2309 5035 l
-2311 5035 m
-2327 5035 l
-2327 5036 l
-2311 5036 l
-2314 5036 m
-2326 5036 l
-2326 5037 l
-2314 5037 l
-2316 5037 m
-2326 5037 l
-2326 5038 l
-2316 5038 l
-2319 5038 m
-2325 5038 l
-2325 5039 l
-2319 5039 l
-2321 5039 m
-2325 5039 l
-2325 5040 l
-2321 5040 l
-Y
-2199 4858.8 m
-2154 4971 l
-2324 5040 l
-2370 4927 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2241 4957 m
-2242 4943 l
-2237 4932 l
-2227 4924 l
-2223 4922 l
-2210 4922 l
-2199 4926 l
-2190 4936 l
-2189 4940 l
-2188 4953 l
-2193 4964 l
-2203 4973 l
-2207 4974 l
-2220 4975 l
-2231 4970 l
-2241 4957 l
-2249 4937 l
-2252 4916 l
-2249 4901 l
-2239 4893 l
-2232 4890 l
-2218 4889 l
-2211 4895 l
-S
-2280 5004 m
-2270 4995 l
-2267 4981 l
-2271 4960 l
-2276 4948 l
-2287 4930 l
-2300 4922 l
-2313 4922 l
-2321 4926 l
-2331 4934 l
-2334 4949 l
-2330 4970 l
-2325 4981 l
-2314 4999 l
-2301 5008 l
-2288 5007 l
-2280 5004 l
-S
-1 g
-974 2200 m
-1160 2200 l
-1160 5703 l
-974 5703 l
-Y
-1159.9 2200 m
-974 2200 l
-974 5703 l
-1160 5703 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1000 2225 m
-1105 2225 l
-S
-1000 2225 m
-1000 2290 l
-S
-1050 2225 m
-1050 2265 l
-S
-1105 2225 m
-1105 2290 l
-S
-1050 2375 m
-1040 2365 l
-1035 2355 l
-1035 2340 l
-1040 2330 l
-1050 2320 l
-1065 2315 l
-1075 2315 l
-1090 2320 l
-1100 2330 l
-1105 2340 l
-1105 2355 l
-1100 2365 l
-1090 2375 l
-S
-1000 2411 m
-1105 2411 l
-S
-1000 2446 m
-1005 2451 l
-1000 2456 l
-995 2451 l
-1000 2446 l
-S
-1035 2451 m
-1105 2451 l
-S
-1035 2491 m
-1140 2491 l
-S
-1050 2491 m
-1040 2501 l
-1035 2511 l
-1035 2526 l
-1040 2536 l
-1050 2546 l
-1065 2551 l
-1075 2551 l
-1090 2546 l
-1100 2536 l
-1105 2526 l
-1105 2511 l
-1100 2501 l
-1090 2491 l
-S
-1000 2591 m
-1085 2591 l
-1100 2596 l
-1105 2606 l
-1105 2616 l
-S
-1035 2576 m
-1035 2611 l
-S
-1000 2641 m
-1005 2646 l
-1000 2651 l
-995 2646 l
-1000 2641 l
-S
-1035 2646 m
-1105 2646 l
-S
-1050 2741 m
-1040 2731 l
-1035 2721 l
-1035 2706 l
-1040 2696 l
-1050 2686 l
-1065 2681 l
-1075 2681 l
-1090 2686 l
-1100 2696 l
-1105 2706 l
-1105 2721 l
-1100 2731 l
-1090 2741 l
-S
-1050 2912 m
-1040 2902 l
-1035 2892 l
-1035 2877 l
-1040 2867 l
-1050 2857 l
-1065 2852 l
-1075 2852 l
-1090 2857 l
-1100 2867 l
-1105 2877 l
-1105 2892 l
-1100 2902 l
-1090 2912 l
-S
-1035 2967 m
-1040 2957 l
-1050 2947 l
-1065 2942 l
-1075 2942 l
-1090 2947 l
-1100 2957 l
-1105 2967 l
-1105 2982 l
-1100 2992 l
-1090 3002 l
-1075 3007 l
-1065 3007 l
-1050 3002 l
-1040 2992 l
-1035 2982 l
-1035 2967 l
-S
-1035 3062 m
-1040 3052 l
-1050 3042 l
-1065 3037 l
-1075 3037 l
-1090 3042 l
-1100 3052 l
-1105 3062 l
-1105 3077 l
-1100 3087 l
-1090 3097 l
-1075 3102 l
-1065 3102 l
-1050 3097 l
-1040 3087 l
-1035 3077 l
-1035 3062 l
-S
-1035 3137 m
-1105 3137 l
-S
-1065 3137 m
-1050 3142 l
-1040 3152 l
-1035 3162 l
-1035 3177 l
-S
-1000 3258 m
-1105 3258 l
-S
-1050 3258 m
-1040 3248 l
-1035 3238 l
-1035 3222 l
-1040 3212 l
-1050 3202 l
-1065 3197 l
-1075 3197 l
-1090 3202 l
-1100 3212 l
-1105 3222 l
-1105 3238 l
-1100 3248 l
-1090 3258 l
-S
-1000 3293 m
-1005 3298 l
-1000 3303 l
-995 3298 l
-1000 3293 l
-S
-1035 3298 m
-1105 3298 l
-S
-1035 3338 m
-1105 3338 l
-S
-1055 3338 m
-1040 3353 l
-1035 3363 l
-1035 3378 l
-1040 3388 l
-1055 3393 l
-1105 3393 l
-S
-1035 3488 m
-1105 3488 l
-S
-1050 3488 m
-1040 3478 l
-1035 3468 l
-1035 3453 l
-1040 3443 l
-1050 3433 l
-1065 3428 l
-1075 3428 l
-1090 3433 l
-1100 3443 l
-1105 3453 l
-1105 3468 l
-1100 3478 l
-1090 3488 l
-S
-1000 3533 m
-1085 3533 l
-1100 3538 l
-1105 3548 l
-1105 3558 l
-S
-1035 3518 m
-1035 3553 l
-S
-1065 3583 m
-1065 3643 l
-1055 3643 l
-1045 3638 l
-1040 3633 l
-1035 3623 l
-1035 3608 l
-1040 3598 l
-1050 3588 l
-1065 3583 l
-1075 3583 l
-1090 3588 l
-1100 3598 l
-1105 3608 l
-1105 3623 l
-1100 3633 l
-1090 3643 l
-S
-1050 3729 m
-1040 3724 l
-1035 3709 l
-1035 3694 l
-1040 3679 l
-1050 3674 l
-1060 3679 l
-1065 3689 l
-1070 3714 l
-1075 3724 l
-1085 3729 l
-1090 3729 l
-1100 3724 l
-1105 3709 l
-1105 3694 l
-1100 3679 l
-1090 3674 l
-S
-1035 3769 m
-1040 3764 l
-1045 3769 l
-1040 3774 l
-1035 3769 l
-S
-1100 3774 m
-1105 3769 l
-1100 3764 l
-1095 3769 l
-1100 3774 l
-1110 3774 l
-1120 3769 l
-1125 3764 l
-S
-1035 3894 m
-1105 3894 l
-S
-1055 3894 m
-1040 3909 l
-1035 3919 l
-1035 3934 l
-1040 3944 l
-1055 3949 l
-1105 3949 l
-S
-1055 3949 m
-1040 3964 l
-1035 3974 l
-1035 3989 l
-1040 3999 l
-1055 4004 l
-1105 4004 l
-S
-1065 4039 m
-1065 4100 l
-1055 4100 l
-1045 4095 l
-1040 4090 l
-1035 4080 l
-1035 4065 l
-1040 4054 l
-1050 4044 l
-1065 4039 l
-1075 4039 l
-1090 4044 l
-1100 4054 l
-1105 4065 l
-1105 4080 l
-1100 4090 l
-1090 4100 l
-S
-1035 4190 m
-1105 4190 l
-S
-1050 4190 m
-1040 4180 l
-1035 4170 l
-1035 4155 l
-1040 4145 l
-1050 4135 l
-1065 4130 l
-1075 4130 l
-1090 4135 l
-1100 4145 l
-1105 4155 l
-1105 4170 l
-1100 4180 l
-1090 4190 l
-S
-1035 4230 m
-1105 4230 l
-S
-1055 4230 m
-1040 4245 l
-1035 4255 l
-1035 4270 l
-1040 4280 l
-1055 4285 l
-1105 4285 l
-S
-1065 4400 m
-1065 4460 l
-1055 4460 l
-1045 4455 l
-1040 4450 l
-1035 4440 l
-1035 4425 l
-1040 4415 l
-1050 4405 l
-1065 4400 l
-1075 4400 l
-1090 4405 l
-1100 4415 l
-1105 4425 l
-1105 4440 l
-1100 4450 l
-1090 4460 l
-S
-1035 4551 m
-1140 4551 l
-S
-1050 4551 m
-1040 4541 l
-1035 4531 l
-1035 4516 l
-1040 4506 l
-1050 4496 l
-1065 4491 l
-1075 4491 l
-1090 4496 l
-1100 4506 l
-1105 4516 l
-1105 4531 l
-1100 4541 l
-1090 4551 l
-S
-1035 4591 m
-1085 4591 l
-1100 4596 l
-1105 4606 l
-1105 4621 l
-1100 4631 l
-1085 4646 l
-S
-1035 4646 m
-1105 4646 l
-S
-1000 4681 m
-1005 4686 l
-1000 4691 l
-995 4686 l
-1000 4681 l
-S
-1035 4686 m
-1105 4686 l
-S
-1035 4726 m
-1105 4726 l
-S
-1055 4726 m
-1040 4741 l
-1035 4751 l
-1035 4766 l
-1040 4776 l
-1055 4781 l
-1105 4781 l
-S
-1035 4841 m
-1040 4831 l
-1050 4821 l
-1065 4816 l
-1075 4816 l
-1090 4821 l
-1100 4831 l
-1105 4841 l
-1105 4856 l
-1100 4866 l
-1090 4876 l
-1075 4881 l
-1065 4881 l
-1050 4876 l
-1040 4866 l
-1035 4856 l
-1035 4841 l
-S
-1035 4912 m
-1105 4967 l
-S
-1035 4967 m
-1105 4912 l
-S
-1000 5122 m
-1080 5122 l
-1095 5117 l
-1100 5112 l
-1105 5102 l
-1105 5092 l
-1100 5082 l
-1095 5077 l
-1080 5072 l
-1070 5072 l
-S
-1025 5162 m
-1020 5162 l
-1010 5167 l
-1005 5172 l
-1000 5182 l
-1000 5202 l
-1005 5212 l
-1010 5217 l
-1020 5222 l
-1030 5222 l
-1040 5217 l
-1055 5207 l
-1105 5157 l
-1105 5227 l
-S
-1000 5287 m
-1005 5272 l
-1020 5262 l
-1045 5257 l
-1060 5257 l
-1085 5262 l
-1100 5272 l
-1105 5287 l
-1105 5297 l
-1100 5313 l
-1085 5323 l
-1060 5328 l
-1045 5328 l
-1020 5323 l
-1005 5313 l
-1000 5297 l
-1000 5287 l
-S
-1000 5388 m
-1005 5373 l
-1020 5363 l
-1045 5358 l
-1060 5358 l
-1085 5363 l
-1100 5373 l
-1105 5388 l
-1105 5398 l
-1100 5413 l
-1085 5423 l
-1060 5428 l
-1045 5428 l
-1020 5423 l
-1005 5413 l
-1000 5398 l
-1000 5388 l
-S
-1000 5488 m
-1005 5473 l
-1020 5463 l
-1045 5458 l
-1060 5458 l
-1085 5463 l
-1100 5473 l
-1105 5488 l
-1105 5498 l
-1100 5513 l
-1085 5523 l
-1060 5528 l
-1045 5528 l
-1020 5523 l
-1005 5513 l
-1000 5498 l
-1000 5488 l
-S
-1095 5568 m
-1100 5563 l
-1105 5568 l
-1100 5573 l
-1095 5568 l
-S
-1000 5638 m
-1005 5623 l
-1020 5613 l
-1045 5608 l
-1060 5608 l
-1085 5613 l
-1100 5623 l
-1105 5638 l
-1105 5648 l
-1100 5663 l
-1085 5673 l
-1060 5678 l
-1045 5678 l
-1020 5673 l
-1005 5663 l
-1000 5648 l
-1000 5638 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/mapping.eps b/ast-5.3-1/sun211_figures/mapping.eps
deleted file mode 100644
index 7a88895..0000000
--- a/ast-5.3-1/sun211_figures/mapping.eps
+++ /dev/null
@@ -1,1003 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 118 85 511 258
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/05 15:19:04
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-3923.75 2106.95 m
-3923.75 2181.35 3863.75 2242.55 3788.15 2242.55 c
-2378.15 2242.55 l
-2303.75 2242.55 2242.55 2181.35 2242.55 2106.95 c
-2242.55 1296.95 l
-2242.55 1222.55 2303.75 1161.35 2378.15 1161.35 c
-3788.15 1161.35 l
-3863.75 1161.35 3923.75 1222.55 3923.75 1296.95 c
-f*
-1 g
-3858.95 2163.35 m
-3858.95 2236.55 3798.95 2296.55 3725.75 2296.55 c
-2322.95 2296.55 l
-2248.55 2296.55 2188.55 2236.55 2188.55 2163.35 c
-2188.55 1359.35 l
-2188.55 1286.15 2248.55 1226.15 2321.75 1226.15 c
-3725.75 1226.15 l
-3798.95 1226.15 3858.95 1286.15 3858.95 1359.35 c
-f*
-8 w
-1 J
-1 j
-0 g
-3858.95 2163.35 m
-3858.95 2236.55 3798.95 2296.55 3725.75 2296.55 c
-2322.95 2296.55 l
-2248.55 2296.55 2188.55 2236.55 2188.55 2163.35 c
-2188.55 1359.35 l
-2188.55 1286.15 2248.55 1226.15 2321.75 1226.15 c
-3725.75 1226.15 l
-3798.95 1226.15 3858.95 1286.15 3858.95 1359.35 c
-h
-S
-3863.75 2052.95 318 15.5999 re
-Y
-3861.35 2061.35 m
-4174.55 2061.35 l
-S
-0 0 6120 7920 re
-Y
-3902.15 2061.35 m
-3902.15 2084.15 3884.15 2102.15 3862.55 2102.15 c
-3840.95 2102.15 3822.95 2084.15 3822.95 2061.35 c
-3822.95 2039.75 3840.95 2021.75 3862.55 2021.75 c
-3884.15 2021.75 3902.15 2039.75 3902.15 2061.35 c
-f*
-4133.75 2013.35 m
-4151.75 2061.35 l
-4133.75 2108.15 l
-4286.15 2061.35 l
-f*
-3863.75 1752.95 315.6 15.5999 re
-Y
-3861.35 1761.35 m
-4172.15 1761.35 l
-S
-0 0 6120 7920 re
-Y
-3902.15 1761.35 m
-3902.15 1784.15 3884.15 1802.15 3862.55 1802.15 c
-3840.95 1802.15 3822.95 1784.15 3822.95 1761.35 c
-3822.95 1739.75 3840.95 1721.75 3862.55 1721.75 c
-3884.15 1721.75 3902.15 1739.75 3902.15 1761.35 c
-f*
-4131.35 1713.35 m
-4149.35 1761.35 l
-4131.35 1808.15 l
-4283.75 1761.35 l
-f*
-3863.75 1452.95 318 15.5999 re
-Y
-3861.35 1461.35 m
-4174.55 1461.35 l
-S
-0 0 6120 7920 re
-Y
-3902.15 1461.35 m
-3902.15 1484.15 3884.15 1502.15 3862.55 1502.15 c
-3840.95 1502.15 3822.95 1484.15 3822.95 1461.35 c
-3822.95 1439.75 3840.95 1421.75 3862.55 1421.75 c
-3884.15 1421.75 3902.15 1439.75 3902.15 1461.35 c
-f*
-4133.75 1413.35 m
-4151.75 1461.35 l
-4133.75 1508.15 l
-4286.15 1461.35 l
-f*
-1763.75 2052.95 318 15.5999 re
-Y
-1761.35 2061.35 m
-2074.55 2061.35 l
-S
-0 0 6120 7920 re
-Y
-1802.15 2061.35 m
-1802.15 2084.15 1784.15 2102.15 1762.55 2102.15 c
-1740.95 2102.15 1722.95 2084.15 1722.95 2061.35 c
-1722.95 2039.75 1740.95 2021.75 1762.55 2021.75 c
-1784.15 2021.75 1802.15 2039.75 1802.15 2061.35 c
-f*
-2033.75 2013.35 m
-2051.75 2061.35 l
-2033.75 2108.15 l
-2186.15 2061.35 l
-f*
-1763.75 1452.95 318 15.5999 re
-Y
-1761.35 1461.35 m
-2074.55 1461.35 l
-S
-0 0 6120 7920 re
-Y
-1802.15 1461.35 m
-1802.15 1484.15 1784.15 1502.15 1762.55 1502.15 c
-1740.95 1502.15 1722.95 1484.15 1722.95 1461.35 c
-1722.95 1439.75 1740.95 1421.75 1762.55 1421.75 c
-1784.15 1421.75 1802.15 1439.75 1802.15 1461.35 c
-f*
-2033.75 1413.35 m
-2051.75 1461.35 l
-2033.75 1508.15 l
-2186.15 1461.35 l
-f*
-q[1 0 0 1 0 0]concat
-44 93 true[1 0 0 1 -1379 -1821]@85 imagemask
-+92B at s6q-1s8W,g
-+92B at s6p"Qs8Vus!!iQ(^]4?:s8RTL!!3-"!!!!"s8Duu!!3-!zs8Duu!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!3-!!!!!"s8Duu!!E9$!!!!$s8RTL!"],0^]4B7s8Vus+92B at s6q-1s8W,g+92B at s6p~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -1425 -1821]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-66 94 true[1 0 0 1 -1495 -1791]@85 imagemask
-J,fQKhuE`W!.Y%K
-s53kW!!!Q0s8V!W!!!!"s8VQgz!<<(Lz!!%NKz!!!"KrVuouz5Q1W_z!'gA]
-z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]"979Z!!!!`r"&i*
-z5Q!bGrr<$!!'gC2s8Tk7!!#7^rr>:Q!!!!`s7cR)p](9o5QBXA#Q+Q%!'gM!!!E3#!!#7`J,fWM
-!!!!`rr<$!s*t(L5Q1W_!.Vca!'gA]!!#7A!!#7]!!!!`huEaAqu?]s+7K715PtK]!$Ct9!'gA]!!!Q)!!#7]!!!!0
-qu?^]qu?]s&,ZD-5PtK]!!iK'!'gA]!!!9'!!#7]!!!!(rVup_qu?]s#QFc(5PtK]!!iN(!'gA]!!!-$
-!!#7]!!!!$s*t)6qu?]s"93lO5PtK]!!E7O!'gA]!!!-$J,hh3!!!!$s*t)6qu?]s"96.:5PtK]!!E8:
-!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s"96.:5PtK]!!E8:!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s#QMR>5PtK]!!iP>
-!'gA]!!!9(^]6Us!!!!(s1eV!qu?]s#QMR>5PtK]!"]*[!'gA]!!!Q0J,hh3!!!!0s*t)6qu?]s+9-ik
-5PtK]!$D5k!'gA]!!",@!!#7]!!!!`rr<$`qu?]sJ,]KK5Q1W_!.XtJ!'gJ`!!*&u!!#7`J,fWMqu?^]
-s1eU:s82isJ,eF,#QOQ!!<<#m!"],!!.Y%Hrr at QKn,Rt<r."bHs53lAs85+]s8Tk7#QO]Ds8W+L!!*&s&-)\0!!!!@qud!!rVuou"8i3"s7cQo!!%BHJ,eF,!!!!=!"]*[!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 64 true[1 0 0 1 -1565 -1820]@85 imagemask
-!!!9(J-!Fc!!!!@
-s53qIzJ,f9ErVuou!<<)u!WTq8!!3-"rrN/t!!!-$s8RZMs*t(Ss8W,8s8V!W&-)\0iW&r9!"],!
-#P%il!!!Q0^]F92n,NG1s*t)ts53kW+9)<@+917!!$D4@!"]+F!!#7_!!!9(^]4@!rVup's1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!
-s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$
-^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!
-qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!%NH
-!!!-$^]4 at aqu?^%s1eU7s82is#QMR>!WW&t!"]+F!!iQ%!!%NK^]8laqu at 9-s1eVas82j-s8Tk7~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -1635 -1820]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-88 97 true[1 0 0 1 -1189 -1651]@85 imagemask
-z!$D6Vz
-!!!!$s8W&uz!!#7`s8V!Wz!WW3"s7cQo!!!!(s8W-!rr<$!!!", at s8W-!^]4?7!.Y%KJ-Z,D
-zs8VQg!'g5Y!!!-$s1eU7#Q=]'!!iQ'!!!!"rr<$!&-)D)!!!"K^]4@!s6p!g!!",!!!%NK^]4?7
-!"\Q!!<<(Lz"8Diss8N'!!!!!"qu?ctrVuou!!!"J!!E9!z!!#4`#QOQ!z!$;1Os6p!gz%fd.?
-n,NFg!!!!'!$D7!zz5QAM!z!!!!`s1eU7z!!%NKJ,fQLz!.Y$!zz
-s8N'!z!!!$!rr<$!z!!*'!zz!WW-!z!!!!"s8Duuz!!!'"rVuouz
-!!E9!zz"989!z!!!!$s82isz!!!9(qu?]sz!!iQ!zz#QOQ!z!!!!(s7cQo
-z!!!9(p](9oz!!iQ!zz&-)D)z!!!!0s6p!gz!!!Q0n,NFgz!"],!
-zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0
-s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!z
-z#QO8nz!!!!(s6p!gz!!!9(p](9oz!!iQ!zz#QOQ!z!!!!$s7cQo
-z!!!-$p](9oz!!E9!zz"989!z!!!!"s82isz!$21 at qu?]sz*Wc<?
-z!!!!?!<<#uz!!#1_s8Duuz!'UC4rr<$!z4og*4z!!!"J!'gL6z!!%HJ5Q?66z
-!.4bgs*t(Lzqu at i=^]4?7!!!#s!"]+fz!!2ut#QN]^z"8i-$s6p!g!!!!$qu?j!p](9o
-!!!9%!!3,pz!"\u-!<;rsz+8c*=J,TEJ!!!!`qu?^]rr<$!!!%NH!!", at J,fQL!<;rs!"]+F
-!!!!"s82is#QO8n!!!-$qu?]ts7cQo!!iQ%!!!$!rVuou+926=!!#7`J,fS!s82is!$D71!!E9$qu?]s
-#QOf(+92B=!!!!"s8W-!s5X"W!!!"Ks8W,u!;lfs!!!Q0s8V!WHiO-H!!3-"rVup\z!"]+F!!#+~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -1283 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -1352 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -1422 -1653]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-69 97 true[1 0 0 1 -1469 -1652]@85 imagemask
-!!!'"n,_GI!!!!0
-s8E&sz5QCb7rr<$!!<<*!_>iEn!!3-"s5F"U!!!9(s8VWhs*t([s8W,ps8VQg+926=rVuom!$D7!
-!'gM`p]*PY^]4oFqu?_Hs*t(Ss6p!gJ,]KK"97ij!<<#u!!E8Z!!3,t!!!'"huEfXp](9ps53kXs6p!g
-!WV'X"97ij!!3,X!!E8Z!!!'"huElZhuE`Xs53k^s53kW!WV'X#QMR>!!3,X!!iP>!!!'"huF#^^]4?8s53kfs*t(L
-!WV'X&-%.[!!3,X!"]*[!!!'"huF;fJ,fQMs53kfs*t(L!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"
-s53kfrr<$!!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"s53kfrr<$!!WV'X#QFc(!!3,X!!iN(!!!'"
-huF#^!!!!"s53k^rr<$!!WV'X#QFc(!!3,X!!E6$!!!'"huElZJ,fQMs53kZs*t(L!WV'X!WRZM!!3,X!!3+M!!!'"
-huEfXJ,fQMs53kWs1eU7!WV'X!<9h7!!3,X!!%Ma!!!'"huEb,huE`Xs53kW5MuMA"979Z!$C\1!!E8Z
-!!",1!!!-$huE`fp](:!s53kW#Q+Q%&-(Pf!!E-!!"]+f!!!'!!!", at huE`Ws*t)6s53kW!.Vcas8V!W
-!!#7Q"9&8X!!!!0s8VWhhuE`W#QOh_s53kW!!3-"JcFX.!!!!`rW3&Wz!!!'"huE`W!!!!"s53kWz!WV'X
-z!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kW
-z!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W
-!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!$s53kWz#QN]^z"98DZz!!E9$huE`W
-!!!-$s53kWz5QBXAz!!E8Zz!!!"KhuE`Wz&)[Efz!!2!Xz!!!!A!!~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -1538 -1653]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -1578 -1653]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -1647 -1652]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -1710 -1652]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -1748 -1652]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -1811 -1652]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-96 97 true[1 0 0 1 -4574 -1819]@85 imagemask
-z!"]*[z
-z"98E#zz+92B@^]4?7zs8W-!p](9o!!!!$s8W-!rVuou!!!!0s82lss*t(L!!!!`
-s1eUVs53kW!!!"KrVup#s6p!g!!!'"p](9os82is!!!-$n,NFgJ,TEJ!!!9(^]4?7+9)<@!!!Q0J,fQL
-&-%.[!!", at z#QMR>!!#7_z"979Z!!%NHz!WVWh!!*&oz!WVop!!3,pz!<;rs!!E8jz
-!.XtJ!!E8jz!.XtJ!!iP^z!'gJ`!"]+Fz!'gL6!"]+Fz!$D5k!$D6Vz!$D6V
-!$D5kz!"]+F!'gL6z!"]+f!'gJ`z!!iP^!.Y"Kz!!iPn!.Y"Kz!!iPn!<<#u
-z!!E8r!<<#uz!!E8r!<<#uz!!E8r!WW-!z!!E9!!WW-!z!!3,t!WW&tz!!3,t!WW&t
-z!!3,t"989!z!!3-!"989!z!!3-!"989!z!!3-!"989!z!!3-!"98,rz
-!!*&u"98,rz!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!
-#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!
-#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!
-z!!*&u"989!z!!*&u"989!z!!3-!"989!z!!3-!"989!z!!3-!"989!z
-!!3-!!WW&tz!!3,t!WW&tz!!3,t!WW-!z!!E9!!WW-!z!!E9!!<<#uz!!E8r!<<#uz
-!!E8r!<<'!z!!iQ!!.Y"Kz!!iPn!.Y"Kz!!iPn!'gL6z!!iP^!'gL6z!"]+f
-!$D5kz!"]+F!$D6Vz!$D6V!"]+Fz!$D5k!"]+fz!'gL6!!iP^z!'gJ`!!E8j
-z!.XtJ!!3,hz!.XtJ!!3,pz!<;rs!!*&sz!WVop!!%NHz"97ij!!#7_z"979Z!!", at z#QMR>!!!Q0^]4?7+9-ik!!!9(huE`W
-5Q:]`!!!-$n,NFgJ,TEJ!!!$!qu?]ts7cQo!!!"Krr<$(s6p!g!!!!@s1eUVs1eU7!!!!0s82otrr<$!
-!!!!$s8W-!qu?]szJ,fQKn,NFgz+92B@^]4?7z!WW2tzz!"]*[z~>
-Q
-q[1 0 0 1 0 0]concat
-67 64 true[1 0 0 1 -4675 -1820]@85 imagemask
-!!!9(J-!Fc!!!!@
-s53qIzJ,f9ErVuou!<<)u!WTq8!!3-"rrN/t!!!-$s8RZMs*t(Ss8W,8s8V!W&-)\0iW&r9!"],!
-#P%il!!!Q0^]F92n,NG1s*t)ts53kW+9)<@+917!!$D4@!"]+F!!#7_!!!9(^]4@!rVup's1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!
-s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$
-^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!
-qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!%NH
-!!!-$^]4 at aqu?^%s1eU7s82is#QMR>!WW&t!"]+F!!iQ%!!%NK^]8laqu at 9-s1eVas82j-s8Tk7~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -4745 -1820]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-66 94 true[1 0 0 1 -4784 -1791]@85 imagemask
-J,fQKhuE`W!.Y%K
-s53kW!!!Q0s8V!W!!!!"s8VQgz!<<(Lz!!%NKz!!!"KrVuouz5Q1W_z!'gA]
-z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]"979Z!!!!`r"&i*
-z5Q!bGrr<$!!'gC2s8Tk7!!#7^rr>:Q!!!!`s7cR)p](9o5QBXA#Q+Q%!'gM!!!E3#!!#7`J,fWM
-!!!!`rr<$!s*t(L5Q1W_!.Vca!'gA]!!#7A!!#7]!!!!`huEaAqu?]s+7K715PtK]!$Ct9!'gA]!!!Q)!!#7]!!!!0
-qu?^]qu?]s&,ZD-5PtK]!!iK'!'gA]!!!9'!!#7]!!!!(rVup_qu?]s#QFc(5PtK]!!iN(!'gA]!!!-$
-!!#7]!!!!$s*t)6qu?]s"93lO5PtK]!!E7O!'gA]!!!-$J,hh3!!!!$s*t)6qu?]s"96.:5PtK]!!E8:
-!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s"96.:5PtK]!!E8:!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s#QMR>5PtK]!!iP>
-!'gA]!!!9(^]6Us!!!!(s1eV!qu?]s#QMR>5PtK]!"]*[!'gA]!!!Q0J,hh3!!!!0s*t)6qu?]s+9-ik
-5PtK]!$D5k!'gA]!!",@!!#7]!!!!`rr<$`qu?]sJ,]KK5Q1W_!.XtJ!'gJ`!!*&u!!#7`J,fWMqu?^]
-s1eU:s82isJ,eF,#QOQ!!<<#m!"],!!.Y%Hrr at QKn,Rt<r."bHs53lAs85+]s8Tk7#QO]Ds8W+L!!*&s&-)\0!!!!@qud!!rVuou"8i3"s7cQo!!%BHJ,eF,!!!!=!"]*[!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 64 true[1 0 0 1 -4854 -1820]@85 imagemask
-!!!9(J-!Fc!!!!@
-s53qIzJ,f9ErVuou!<<)u!WTq8!!3-"rrN/t!!!-$s8RZMs*t(Ss8W,8s8V!W&-)\0iW&r9!"],!
-#P%il!!!Q0^]F92n,NG1s*t)ts53kW+9)<@+917!!$D4@!"]+F!!#7_!!!9(^]4@!rVup's1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!
-s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$
-^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!
-qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!%NH
-!!!-$^]4 at aqu?^%s1eU7s82is#QMR>!WW&t!"]+F!!iQ%!!%NK^]8laqu at 9-s1eVas82j-s8Tk7~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -4923 -1820]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-88 97 true[1 0 0 1 -4430 -1651]@85 imagemask
-z!$D6Vz
-!!!!$s8W&uz!!#7`s8V!Wz!WW3"s7cQo!!!!(s8W-!rr<$!!!", at s8W-!^]4?7!.Y%KJ-Z,D
-zs8VQg!'g5Y!!!-$s1eU7#Q=]'!!iQ'!!!!"rr<$!&-)D)!!!"K^]4@!s6p!g!!",!!!%NK^]4?7
-!"\Q!!<<(Lz"8Diss8N'!!!!!"qu?ctrVuou!!!"J!!E9!z!!#4`#QOQ!z!$;1Os6p!gz%fd.?
-n,NFg!!!!'!$D7!zz5QAM!z!!!!`s1eU7z!!%NKJ,fQLz!.Y$!zz
-s8N'!z!!!$!rr<$!z!!*'!zz!WW-!z!!!!"s8Duuz!!!'"rVuouz
-!!E9!zz"989!z!!!!$s82isz!!!9(qu?]sz!!iQ!zz#QOQ!z!!!!(s7cQo
-z!!!9(p](9oz!!iQ!zz&-)D)z!!!!0s6p!gz!!!Q0n,NFgz!"],!
-zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0
-s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!z
-z#QO8nz!!!!(s6p!gz!!!9(p](9oz!!iQ!zz#QOQ!z!!!!$s7cQo
-z!!!-$p](9oz!!E9!zz"989!z!!!!"s82isz!$21 at qu?]sz*Wc<?
-z!!!!?!<<#uz!!#1_s8Duuz!'UC4rr<$!z4og*4z!!!"J!'gL6z!!%HJ5Q?66z
-!.4bgs*t(Lzqu at i=^]4?7!!!#s!"]+fz!!2ut#QN]^z"8i-$s6p!g!!!!$qu?j!p](9o
-!!!9%!!3,pz!"\u-!<;rsz+8c*=J,TEJ!!!!`qu?^]rr<$!!!%NH!!", at J,fQL!<;rs!"]+F
-!!!!"s82is#QO8n!!!-$qu?]ts7cQo!!iQ%!!!$!rVuou+926=!!#7`J,fS!s82is!$D71!!E9$qu?]s
-#QOf(+92B=!!!!"s8W-!s5X"W!!!"Ks8W,u!;lfs!!!Q0s8V!WHiO-H!!3-"rVup\z!"]+F!!#+~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -4524 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -4593 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -4664 -1653]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-69 97 true[1 0 0 1 -4710 -1652]@85 imagemask
-!!!'"n,_GI!!!!0
-s8E&sz5QCb7rr<$!!<<*!_>iEn!!3-"s5F"U!!!9(s8VWhs*t([s8W,ps8VQg+926=rVuom!$D7!
-!'gM`p]*PY^]4oFqu?_Hs*t(Ss6p!gJ,]KK"97ij!<<#u!!E8Z!!3,t!!!'"huEfXp](9ps53kXs6p!g
-!WV'X"97ij!!3,X!!E8Z!!!'"huElZhuE`Xs53k^s53kW!WV'X#QMR>!!3,X!!iP>!!!'"huF#^^]4?8s53kfs*t(L
-!WV'X&-%.[!!3,X!"]*[!!!'"huF;fJ,fQMs53kfs*t(L!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"
-s53kfrr<$!!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"s53kfrr<$!!WV'X#QFc(!!3,X!!iN(!!!'"
-huF#^!!!!"s53k^rr<$!!WV'X#QFc(!!3,X!!E6$!!!'"huElZJ,fQMs53kZs*t(L!WV'X!WRZM!!3,X!!3+M!!!'"
-huEfXJ,fQMs53kWs1eU7!WV'X!<9h7!!3,X!!%Ma!!!'"huEb,huE`Xs53kW5MuMA"979Z!$C\1!!E8Z
-!!",1!!!-$huE`fp](:!s53kW#Q+Q%&-(Pf!!E-!!"]+f!!!'!!!", at huE`Ws*t)6s53kW!.Vcas8V!W
-!!#7Q"9&8X!!!!0s8VWhhuE`W#QOh_s53kW!!3-"JcFX.!!!!`rW3&Wz!!!'"huE`W!!!!"s53kWz!WV'X
-z!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kW
-z!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W
-!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!$s53kWz#QN]^z"98DZz!!E9$huE`W
-!!!-$s53kWz5QBXAz!!E8Zz!!!"KhuE`Wz&)[Efz!!2!Xz!!!!A!!~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -4779 -1653]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -4819 -1653]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -4889 -1652]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -4951 -1652]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -4989 -1652]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -5052 -1652]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-0.201248 i
-2711.08 1704.82 m
-2702.03 1705.43 2700.01 1707.44 2692.97 1722.33 c
-2642.86 1836.42 l
-2638.83 1836.42 l
-2596.97 1737.83 l
-2584.09 1708.45 2581.68 1705.43 2572.02 1704.82 c
-2572.02 1701 l
-2611.87 1701 l
-2611.87 1704.8 l
-2602.21 1704.8 2598.18 1707.42 2598.18 1713.07 c
-2598.18 1715.49 2598.79 1718.31 2599.79 1720.92 c
-2609.05 1745 l
-2661.78 1745 l
-2670.03 1725.15 l
-2672.44 1719.51 2673.85 1714.48 2673.85 1711.46 c
-2673.85 1709.65 2672.64 1707.44 2671.03 1706.63 c
-2668.62 1705.23 2667.01 1704.8 2659.76 1704.8 c
-2659.76 1701 l
-2711.08 1701 l
-h
-2612.47 1753 m
-2635.61 1808.06 l
-2658.96 1753 l
-h
-2714.3 1701 m
-f*
-2763.31 1701 m
-f*
-2898 1816.32 m
-2898 1725.15 l
-2898 1708.45 2895.67 1705.83 2880.33 1704.82 c
-2880.33 1701 l
-2936.68 1701 l
-2936.68 1704.82 l
-2921.99 1705.83 2919 1708.65 2919 1722.94 c
-2919 1812.29 l
-2919 1826.58 2921.64 1829.2 2936.68 1830.4 c
-2936.68 1834 l
-2896.63 1834 l
-2852.15 1732.6 l
-2805.67 1834 l
-2765.82 1834 l
-2765.82 1830 l
-2782.32 1829.02 2785 1826.65 2785 1812.29 c
-2785 1730.58 l
-2785 1709.85 2782.17 1706.03 2765.42 1704.82 c
-2765.42 1701 l
-2812.71 1701 l
-2812.71 1705 l
-2797.21 1705.8 2794 1710.4 2794 1730.58 c
-2794 1811.69 l
-2844.31 1701 l
-2847.12 1701 l
-h
-2941.91 1701 m
-f*
-3029.95 1714.28 m
-3026.53 1711.47 3024.12 1709.99 3021.1 1709.99 c
-3016.47 1709.99 3015 1712.92 3015 1722.13 c
-3015 1761.37 l
-3015 1771.64 3014.01 1777.27 3011.24 1781.9 c
-3007.01 1789.55 2998.36 1794.01 2986.08 1794.01 c
-2975.82 1794.01 2966.16 1791.03 2960.52 1786.13 c
-2955.49 1781.9 2952 1776.07 2952 1771.03 c
-2952 1766.41 2955.94 1762.38 2960.92 1762.38 c
-2965.75 1762.38 2969.98 1766.41 2969.98 1770.83 c
-2969.98 1771.64 2969.78 1772.64 2969.58 1774.05 c
-2969.18 1775.86 2969 1777.47 2969 1778.88 c
-2969 1784.32 2975.43 1789.01 2983.46 1789.01 c
-2993.33 1789.01 2999 1783.08 2999 1772.04 c
-2999 1759.76 l
-2967.83 1747.29 2964.39 1745.68 2955.69 1738.03 c
-2951.26 1734 2948.45 1727.16 2948.45 1720.52 c
-2948.45 1707.84 2957.1 1698.99 2969.58 1698.99 c
-2978.43 1698.99 2986.68 1703.21 2998.96 1713.68 c
-2999.97 1703.01 3003.59 1698.99 3011.84 1698.99 c
-3018.68 1698.99 3022.91 1701.4 3029.95 1709.05 c
-h
-2999 1725.75 m
-2999 1719.51 2997.95 1717.7 2993.53 1715.09 c
-2988.7 1712.27 2983.06 1710.99 2978.84 1710.99 c
-2971.79 1710.99 2966.18 1717.69 2966.18 1726.16 c
-2966.18 1726.96 l
-2966.18 1738.83 2974.49 1746.08 2999 1754.93 c
-h
-3030.35 1701 m
-f*
-3031.81 1780.09 m
-3033.62 1780.29 3035.03 1780.29 3036.84 1780.29 c
-3043.69 1780.29 3045 1778.28 3045 1768.82 c
-3045 1674.64 l
-3045 1664.17 3042.8 1661.96 3031.01 1660.75 c
-3031.01 1658 l
-3079.71 1658 l
-3079.71 1662 l
-3064.61 1662.19 3062 1664.25 3062 1676.05 c
-3062 1707.64 l
-3069.24 1701 3073.87 1698.99 3082.32 1698.99 c
-3106.27 1698.99 3124 1721.53 3124 1750.71 c
-3124 1775.66 3110.16 1794.01 3090.98 1794.01 c
-3079.71 1794.01 3070.85 1789.05 3062 1777.68 c
-3062 1793.17 l
-3060.79 1793.57 l
-3050.12 1789.35 3042.88 1786.73 3031.81 1783.31 c
-h
-3062 1768.22 m
-3062 1774.25 3073.27 1782.01 3082.53 1782.01 c
-3097.42 1782.01 3107 1766.52 3107 1742.66 c
-3107 1720.52 3097.25 1704.99 3082.93 1704.99 c
-3073.47 1704.99 3062 1712.47 3062 1718.71 c
-h
-3130.62 1701 m
-f*
-3130.81 1780.09 m
-3132.62 1780.29 3134.03 1780.29 3135.84 1780.29 c
-3142.69 1780.29 3144 1778.28 3144 1768.82 c
-3144 1674.64 l
-3144 1664.17 3141.8 1661.96 3130.01 1660.75 c
-3130.01 1658 l
-3178.71 1658 l
-3178.71 1662 l
-3163.61 1662.19 3161 1664.25 3161 1676.05 c
-3161 1707.64 l
-3168.24 1701 3172.87 1698.99 3181.32 1698.99 c
-3205.27 1698.99 3223 1721.53 3223 1750.71 c
-3223 1775.66 3209.16 1794.01 3189.98 1794.01 c
-3178.71 1794.01 3169.85 1789.05 3161 1777.68 c
-3161 1793.17 l
-3159.79 1793.57 l
-3149.12 1789.35 3141.88 1786.73 3130.81 1783.31 c
-h
-3161 1768.22 m
-3161 1774.25 3172.27 1782.01 3181.53 1782.01 c
-3196.42 1782.01 3206 1766.52 3206 1742.66 c
-3206 1720.52 3196.25 1704.99 3181.93 1704.99 c
-3172.47 1704.99 3161 1712.47 3161 1718.71 c
-h
-3229.62 1701 m
-f*
-3265.22 1793.57 m
-3234.02 1782.51 l
-3234.02 1779.49 l
-3235.64 1779.69 l
-3238.05 1780.09 3240.67 1779.8 3242.48 1779.8 c
-3247.31 1779.8 3249 1776.71 3249 1768.22 c
-3249 1721.53 l
-3249 1707.04 3247 1704.82 3233.22 1704.02 c
-3233.22 1701 l
-3280.92 1701 l
-3280.92 1704.02 l
-3267.63 1705.02 3266 1707.04 3266 1721.53 c
-3266 1792.97 l
-h
-3255.96 1839 m
-3250.33 1839 3245 1834.12 3245 1828.19 c
-3245 1822.35 3249.73 1818 3255.76 1818 c
-3261.8 1818 3266 1822.4 3266 1828.19 c
-3266 1833.82 3261.47 1839 3255.96 1839 c
-h
-3285.95 1701 m
-f*
-3288.22 1781.1 m
-3289.63 1781.7 3291.44 1781.9 3293.65 1781.9 c
-3299.29 1781.9 3301 1778.88 3301 1769.02 c
-3301 1719.11 l
-3301 1707.64 3298.8 1704.82 3288.62 1704.02 c
-3288.62 1701 l
-3331.29 1701 l
-3331.29 1704.02 l
-3321.02 1704.82 3318 1707.24 3318 1714.48 c
-3318 1771.03 l
-3327.46 1780.09 3332.09 1783.01 3338.73 1783.01 c
-3348.59 1783.01 3353 1776.61 3353 1762.98 c
-3353 1720.92 l
-3353 1708.24 3350.47 1704.82 3340.75 1704.02 c
-3340.75 1701 l
-3382.61 1701 l
-3382.61 1704.02 l
-3372.74 1705.02 3370 1707.44 3370 1717.3 c
-3370 1763.39 l
-3370 1782.3 3361.27 1794.01 3346.58 1794.01 c
-3337.32 1794.01 3331.08 1790.5 3317.4 1777.27 c
-3317.4 1793.17 l
-3315.99 1793.57 l
-3306.13 1789.95 3299.29 1787.74 3288.22 1784.52 c
-h
-3385.62 1701 m
-f*
-3479.59 1779 m
-3479.59 1787 l
-3464.09 1787 l
-3460.07 1787 3457.05 1787.58 3453.02 1788.95 c
-3448.59 1790.56 l
-3443.16 1792.57 3437.73 1794.01 3432.5 1794.01 c
-3413.78 1794.01 3399.25 1779.33 3399.25 1760.77 c
-3399.25 1748.09 3404.38 1740.44 3417.6 1733.8 c
-3414.79 1730.99 3411.97 1728.37 3408.95 1725.75 c
-3402.31 1719.92 3400.06 1715.89 3400.06 1711.87 c
-3400.06 1707.44 3402.19 1705.23 3410.36 1701.2 c
-3395.87 1690.74 3391 1684.1 3391 1676.65 c
-3391 1665.98 3406.33 1657 3425.45 1657 c
-3439.94 1657 3455.24 1661.88 3465.7 1670.01 c
-3473.95 1676.45 3478 1683.09 3478 1691.14 c
-3478 1703.62 3468.45 1712.07 3453.43 1712.67 c
-3427.46 1713.88 l
-3416.6 1714.28 3411.77 1716.09 3411.77 1719.31 c
-3411.77 1723.34 3418.41 1730.38 3423.84 1731.99 c
-3427.67 1731.59 l
-3431.29 1731.19 3434.1 1731 3435.31 1731 c
-3442.36 1731 3450.2 1733.81 3456.24 1738.84 c
-3463.49 1744.47 3466 1751.72 3466 1762.18 c
-3466 1767.99 3465.18 1772.59 3462.88 1779 c
-h
-3414.58 1700.6 m
-3421.43 1699.19 3437.32 1697.98 3447.19 1697.98 c
-3465.5 1697.98 3472 1695.57 3472 1688.12 c
-3472 1676.45 3456.76 1668 3433.9 1668 c
-3416.19 1668 3405 1674.07 3405 1683.29 c
-3405 1687.92 3406.76 1690.94 3414.58 1700.6 c
-h
-3415.59 1769.02 m
-3415.59 1780.9 3421.23 1788.01 3430.48 1788.01 c
-3436.72 1788.01 3441.95 1784.57 3445.17 1778.48 c
-3449 1771.44 3451 1762.38 3451 1754.13 c
-3451 1743.06 3445.25 1736 3436.32 1736 c
-3423.84 1736 3415.59 1749.09 3415.59 1768.42 c
-h
-3485.62 1701 m
-f*
-q[1 0 0 1 0 0]concat
-76 93 true[1 0 0 1 -2731 -2481]@85 imagemask
-5QCc`s*t(L!!#7`
-s8W+Lz5QCc`s*t(L!!!$!s8VQgz!$D7 at z!!!!0s8Duuz!"],-z!!!!(s7cQo
-z!!iQ!z!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz
-!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$
-s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!g
-z!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jzhuE`Zs6p!g!!(pW
-!!E8j!!!!"huE`Zs6p!g!!2!X!!E8j!!!!"huE`Zs6p!g!!2!X!!E8j!!!!"huE`Zs6p!g!!D-Z!!E8j!!!!$huE`Z
-s6p!g!!hE^!!E8j!!!!(huE`Zs6p!g!"[uf!!E8j!!!!`huE`Zs6p!g!WV'X!!E9$s8W-!huE`Zs8W-!
-s8V!W!!E9$s8W-!huE`Zs8W-!s8V!W!!E9$s8W-!huE`Zs6p!g!WV'X!!E8j!!!!`huE`Zs6p!g!$C,!
-!!E8j!!!!0huE`Zs6p!g!!hE^!!E8j!!!!$huE`Zs6p!g!!D-Z!!E8j!!!!$huE`Zs6p!g!!2!X!!E8j!!!!"huE`Z
-s6p!g!!2!X!!E8j!!!!"huE`Zs6p!g!!(pW!!E8jzhuE`Zs6p!gz!!E8jz!!!!$s6p!g
-z!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!g!!!"<
-!!E8jz!,qo?s6p!g!!!#g!!E8jz!:Tsjs6p!g!!!#g!!E8jz!:Tsjs6p!g!!!&h!!E8j
-z!Up'ks6p!g!!!,j!!E8jz"7Q9ms6p!g!!!8n!!iPnz&+BQ(s6p!g!!",1!"],)z
-J+*F[s82is!!iPn!'gM`s8W-!s6p-js8W-!s8W,g5QCc`s8W-!s6r8Qs8W-!s8W,g5QCc`s8W-!s6p~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -2809 -2480]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -2879 -2481]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-97 65 true[1 0 0 1 -2927 -2479]@85 imagemask
-z^]4?7(]XO9
-z!Pe[8!#tt=z!!2!X!!#+]z!!!,Z!!!!_z!!!!$n,NFgIK0?Jz"7Q9j!.OtK
-z!!i9!!!%KKz!!!9!!!!$!z!!!!0qu?]ss*t(Lz&,ZD-!WRZMz!"]&/!!3,8
-z!!",?!!!'"^]4?7!!!!@rr<$$s1eU7z5Q:]`"979Zz!'gL6!!E8Zz!!#7`J,fiSn,NFg!!!"K
-s1eU>s6p!gzJ,d:a&-),!z!<;f/!"],)z!!*&nhuF;ep](9o!!!$!j59nZr;6Np!!!!"
-s5WSK+8l$:z!WV-J!'gC/z!!E8;p]*PRIK0?J!!!-$_"[mopc\ZX!!!!$s+("IJ+,Z&z
-#QK>P!.XK&z!!iOSIK4le*rl9@!!!Q0!.FqJi#dIL!!!!0rr>7`s54E<z&,lPn!WV'g^]4?7!$D1?++aI-
-&&8/F!!",?!$?dl^^%XT!!!!`qu at 7[s*t at 4z5PtKl_uG5hhuE`W!'gA]#KQjp"7Q9j!!%ND!!h]e
-!!2Qh!!!"Kp](EZrr<)hzJ+*F?s8N'"p](9o!<;Ng"98?#!;HNo!!*&g!!3-!!!)co!!!'"huEfX
-qu?_E!!!!"s53kWs82isHiO-H!WV'X!<;rs!.FnJ!!E8:!!%ND!!#1_!!!-$^]4 at ap](:X!!!!(s*t(LJ+s!D*rl9@
-#QK;S!<;Ng!$;1@!!iOS!!*&g!!"*k!!!Q0!!!$!huE`fJ,fQ[rr<$"s53kW%tFW[+9)<@!WV'X!!g:>
-!$D1?!!3,8!!!8>!!",?!!!-$^]4?>huEaAqu?^!s1eU7#N,R^5PtK]#QK;S!!D-Z!.XnH!!iOS!!!,j
-!!%NH!!!9(J,fQOn,NIgqu?^-s*t(L"8Dirs82is+9-ik!!Dur!WW&t!$D6V!!!-!!!E9#!!%NKhuE`frW!3's1e[8s8Duu5Q:^*s8VQns8W+L!<<(L+92B1#QOi(J,oWLJ,~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -3026 -2480]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -3089 -2481]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-69 97 true[1 0 0 1 -3135 -2480]@85 imagemask
-!!!'"n,_GI!!!!0
-s8E&sz5QCb7rr<$!!<<*!_>iEn!!3-"s5F"U!!!9(s8VWhs*t([s8W,ps8VQg+926=rVuom!$D7!
-!'gM`p]*PY^]4oFqu?_Hs*t(Ss6p!gJ,]KK"97ij!<<#u!!E8Z!!3,t!!!'"huEfXp](9ps53kXs6p!g
-!WV'X"97ij!!3,X!!E8Z!!!'"huElZhuE`Xs53k^s53kW!WV'X#QMR>!!3,X!!iP>!!!'"huF#^^]4?8s53kfs*t(L
-!WV'X&-%.[!!3,X!"]*[!!!'"huF;fJ,fQMs53kfs*t(L!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"
-s53kfrr<$!!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"s53kfrr<$!!WV'X#QFc(!!3,X!!iN(!!!'"
-huF#^!!!!"s53k^rr<$!!WV'X#QFc(!!3,X!!E6$!!!'"huElZJ,fQMs53kZs*t(L!WV'X!WRZM!!3,X!!3+M!!!'"
-huEfXJ,fQMs53kWs1eU7!WV'X!<9h7!!3,X!!%Ma!!!'"huEb,huE`Xs53kW5MuMA"979Z!$C\1!!E8Z
-!!",1!!!-$huE`fp](:!s53kW#Q+Q%&-(Pf!!E-!!"]+f!!!'!!!", at huE`Ws*t)6s53kW!.Vcas8V!W
-!!#7Q"9&8X!!!!0s8VWhhuE`W#QOh_s53kW!!3-"JcFX.!!!!`rW3&Wz!!!'"huE`W!!!!"s53kWz!WV'X
-z!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kW
-z!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W
-!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!$s53kWz#QN]^z"98DZz!!E9$huE`W
-!!!-$s53kWz5QBXAz!!E8Zz!!!"KhuE`Wz&)[Efz!!2!Xz!!!!A!!~>
-Q
-q[1 0 0 1 0 0]concat
-44 93 true[1 0 0 1 -2821 -861]@85 imagemask
-+92B at s6q-1s8W,g
-+92B at s6p"Qs8Vus!!iQ(^]4?:s8RTL!!3-"!!!!"s8Duu!!3-!zs8Duu!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!3-!!!!!"s8Duu!!E9$!!!!$s8RTL!"],0^]4B7s8Vus+92B at s6q-1s8W,g+92B at s6p~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -2868 -861]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-67 65 true[1 0 0 1 -2937 -859]@85 imagemask
-z(]XO9z
-!&srYz!!#+]z!!!"HzzIK0?Jz!.FnJz!!*$!z!!!$!z!!!!"
-rr<$!z!WRZMz!!3+Mz!!!-$^]4?7!!!!$s1eU7z#QMR>z!!iP^z!!!Q0
-huE`W!!!!0s6p!gz&-),!z!$D71z!!",?p](9o!!!!`r:g6lz5Q#m/z!'g7+z!!%ND
-HiO-H!!!"Kpc\ZXzs6r2Pz!<;OQz!!3,X*rl9@!!!'"i#_q!!!!!"s54E<z"96.I
-J,fQL!!E8:&&8/F!!!9(J-Wji!!!!(s*t?iz#QK;VhuE`W!"])0"5j.Z!!!Q0!!D]j!!!!@rVuug
-z+8u6 at n,NFg!'gG_!VcWp!!#7]!!)co!!!!`qu?`pzJ+s!DHiO-H!.XbD!.4bH!!*&o!!%HJ!!!$!n,NGPzs6p!g4obQ_!WV'X!'^G`!!3,X!!")@!!!-$huEa!J,fQOs1eU7%tFW[
-#QMR>!"XS[!!iOS!!!PF!!!Q0J,fQS^]4?Fs*t(L#N,R^+9)<@!!hE^!$D4@!!!,j!!#7`!!!!$n,NGQ
-rr<$!"8DirJ,]KK!!Dur!<<'!!!!9%!!3-"J,fQ[rW!3's53kW5Q?6Us8Vus!WW2X+92B=!!3-"hu~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -3007 -860]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -3069 -861]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -3116 -860]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -3171 -860]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-1 i
-16 w
-2513.75 2386.55 896.4 25.2 re
-Y
-2511.35 2399.75 m
-3401.75 2399.75 l
-S
-0 0 6120 7920 re
-Y
-3374.15 2357.75 m
-3387.35 2399.75 l
-3374.15 2441.75 l
-3473.75 2399.75 l
-f*
-2585.75 1006.55 897.6 25.2 re
-Y
-3476.15 1019.75 m
-2583.35 1019.75 l
-S
-0 0 6120 7920 re
-Y
-2613.35 1061.75 m
-2600.15 1019.75 l
-2613.35 977.75 l
-2513.75 1019.75 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/overgrid.eps b/ast-5.3-1/sun211_figures/overgrid.eps
deleted file mode 100644
index 9835925..0000000
--- a/ast-5.3-1/sun211_figures/overgrid.eps
+++ /dev/null
@@ -1,6080 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 17 141 489 645
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1998/06/12 18:39:31
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-543.14 1777.49 4343.48 4343.48 re
-Y
-q[10 0 0 10 0 0]concat
-51 51 8[0.117417 0 0 0.117417 -6.377 -20.871]@85 false 3 colorimage
-a2c6>`PpfpiNfbp
-c-=MC\@ArS[FE^U^:q=q^:p>9U9:Z%U8"BIQ'I&WKp at pgMi3KQ3&gm<z*??.#zzz
-z!&uqt=BJ[*<E2"<3,rqXAnGY;OccH8UrLEodaHRneC<jOm-O**jlPU\hVS2.r5m(&kND$RcHcIi
-s8W-!s8W-!s8W-!s1>nTZEgd<Xf]7K]Y;+o_83t-`l>a,^:h4nZEgd8WMt]0Lm=6jZEgcYF`g\a<<rj9,pai;!!%"Y
-EBZQMzzzz!!$8/>_e)iK7edg&J8eoCMn$-Mi3M#['[`g_qs8,mHs;ecd1nAlL431
-q"XXJkii'Hs4#QJgY:K_s8W-!s8W-!s8W-!s8TI5[$[5JXf\^rSXl[VVnB[TX/i;0[^N$/V50o_['[3'
-P*1][MNX-c>?b<!6ULhR!!WW3!!!!j8P&m^z#mgn<!!!3-"onW'!!!"4BP<<^Mg9Sn'GM6k at q2F7Vk9TRQBmiY
-aiViRcI:7kjlPUdk2tdejkSYHmHs;thVQi7f%\s6s8W-!s8W-!s8W-!s8W+UM2 at CYP(%k/SXl=MW2QD`
-TpqO at ZEgclLkq:[P_Y$LI!g<RAnIX+ScA`j$k*P-4ZsPr('"=7()@Yczzzzz
-Bk_:9L5'kpFrMA>KS5#c['[0GZ_XCmf\"j*e'm%)g>:]CdF$A0mdB6"k2G:Xf%/F0hqul1df9 at Is8W-!s8W-!s8W-!
-N/W^HJUr&jG_q96MMd:dUSEBkJV8]0C2.L#D/E-I;#gRr"U,&Z.Ol&D&c_n3!s8W>'GLNIzz
-!!!6/#64`("9\i-z!/ZPhC2.L;KnUB^)2!Qo_83t!]"5Yk^UUe`e^`4?naYo0lK%$eo()A,gt^T9
-g"tTBe^`4Cp%A at bs8W-!s8W-!s8W-!s.>pUH[C*F?!UuOA6`AEBP;'S:/5M;BjG"M8P)JR!!!-)"?AJ&6psEC!!!TC
-&HDe2zzz"9\i.!<E9)!rr<$$O[>L?XISaCP at IrIt)rH;cAI,LUOY"Y-+qKaN3/lgrmma
-c-=N%n*fB"jm;@#s8W,lp%@_>mG[$_l07I4s8W-!s8W-!s8W-!s8S7FP&>/T;,L1Y6ps."4?5D^4Ztqb
-1c-^5.f]PL!!!!<)]MCA8iARc+!2RV/M-r&!"KJK&J5TTzz!!!!^4ZukJ=!&M+I=6O2R$`/EH$4 at SK7efC
-Q^?4OeC`F+lK[ZWb0&i-jl,1Wp at e4Bk2tacjQ#:\kND$olg*cukjn<8s8W-!s8W-!s8W-!s8W*S1,;Bk
-80]?(/1`=k)]JbWz'bqG`zz9he>E4?Q;29LVB=4$,Ml6pt$T<B)rtz!!!fO(Igk`
-91qoP9heAX:0_%/&eYh"F`i%XHa9r_X/i;?`PoU,^Y%2kcHa_]cd1b9k3;-pkih6ag=l#an+?8EiSibMgY:uWl2Ue`
-s8W-!s8W-!s8W-!.OlnS#mgS3zzzzzz!)ZTjF)uD at Df8-97oN>b8kM]_
-?XJ2.HiO-H%LrtM=''csI!'RSF`hh_LkpG+Hpg at jEH,uCG^-U&[&g at 1bKJ)Qbfnu%hpKj!aN2HajlPRa
-jR2I(lg*lqiSj1kmEX#&g"G'=j5^1>s8W-!s8W-!s8W-!rr<$!zzzzzz+!2Rn77Cs+
-C0Y"K2`EZZ5!ELfA;Z8%G'8%CBk_-iAP5ZhM2@(8H?s=@C4C__WMukUN/W47IZ9>HMMd:ZR at 1On\(THf
-[^NWpe^a!OlcI8jhr!>eq>':>l.atIbfn<&oCLu$in2o9k2th+s8W-!s8W-!s8W-!s8N'!zz
-zzz!!#AR6XF)*A7T4S>$>*5>!YG??=$rVDf:VpNLcW2Vl-G(AS%sEXGD[gZ*CQ_IX[EAOgqp2MMd:6
-F`j:IT");?ZEgdZbKIB(\)ui8n*f_rf%/I)fCAD$kih7)p\4">lh'iAq>'jChVQi7f'DYfs8W-!s8W-!
-s8W-!s8W*!!!#)B4(;Z.2`EYqzz<`W7=DJj]DG\Ll+JqAS_@:="iD1-h\It)s1Ocd&Z[CNiY
-T:_ag]Y();V8:!a]"5J%IX[cURr<4`H?sm[F`kgJaiMQEf%/F(f at T-Gjo>A\cd0r1p%@V8lK76kp\4FTp%@D,jS8NF
-p%A";io85-c2[hDs8W-!s8W-!s8W-!0ekCrBP;:$DJO$'4?P_^1G]CH$X[7J;,L1[7Rgfp at 8g*'H[C*a
-G^, at 5OdVW*UnjfiYHPUO]WA39]tM+j]"5Ja\p&@BBP;'tDf:YrNcoShS"#npdF#5(Z+drdp\4F7f\#`a
-n_DpTiSibNgt_,Wkk=`Dm-O*&kigdUg[aq+`5KUJg=lT,s8W-!s8W-!s8W-!s'B#<KS5#(H$Nq2A8Q1#EH,u*?XGfR
-3HK7_G'8%HDJk#VJTc3[H?smrN/XO,UU[hDZa7!=X/i\;[\BLj]"5J[['YL>KStbH>?b='St<!`X08_1
-]=Y\raN35phX'Uqs8W,alK[Eij6Z.!io8t]kig^Qg$S1om-O*,mdB9$kLnPAl07I4s8W-!s8W-!s8W-!
-s8T'tWL&s<JqAT%I!gs7NbE*>;GpD/Ci"9<G&q_G>?b<LDJk5bLLaq+MMd:dUSGN9]rnN at _o'BmX/i\;[aNUPWiE)*
-Za6$dR#6cYR[T\=TqT*1]=behgY:K<gt_>cmecnYmdBN8o^qhLp#=ujcHa_tk2uI6pupr*jQ,ClnaY8a
-fZ(qNs8W-!s8W-!s8W-!s8W+XN/W.3I#a5IQ^=&%P*23"R#Hu_I=6NeG'8b#MJ?m at 7RfkCUniZsKT1tN
-Q^=&U_SXdNe$HBe]Y(o#bKJ>^d^Q]pW2QYZPa&/HWMukr`l?$2]Y)"o^Zt+LjQ,Cflg*p(m,[6gkND%,rVccrs6f=C
-n*f`2lg*cukiq?rkih6RbKKqcs8W-!s8W-!s8W-!s8W-!Z*CQpO,oZqR%g=LR$a8GZ*AY&HYdM7K7ef>
-P*0QpC2.KuLPLY5I=8&mW5?Eg\[f8UZ*CL9YJ%W_\$ria_o'!o\?E*>Za7!/SXl.8R(U)Ef%/Ec]tNC`
-iV`WOn*f`*j5]e(o]G;ukih6okih*gjT#8[n*f`$h;.,Oj5T(Xg"G'Ys8W-!s8W-!s8W-!s8W-!s/DusSXl=*KnXMd
-EK#j8R at 0IG=]q2^R]39cU8"B=M2 at .KMlNeWXK8LpSt<O)\tc$qUnjg$^V@:g\BE(=daHRU]=ZA6cE++K
-USFTfYHPsc`n]A)dF$@th;.bsp%eFZjlPUcjlQ=6q>0sak2th+s8W&rrVHBekih6nkNDC*n`&Qfs8W-!
-s8W-!s8W-!s8W-!s8T.#X/rD(KnY5&FEE at rM1U>2 at q0#0O,p9>WK3+$R at 0JDX/iP3ZF[WYPa%E?[C*KQ\$riUg=k8l
-]"6;:dFHdt`5KU%[C)TtSr&;\X/i;'Xf]pqce-n&_o'CSk2u7*o&\upmHs<<qtoU at kiV$ioCMS>lg+TN
-s7Z0[naZ/(gY:lQk5YJ]s8W-!s8W-!s8W-!s8W+cQ^<YiN-9AfDf9Pu>?cl<LQdpcVl-GuZEgO3X-f9A
-USFTKPa%K"QBmi&U8"BST:a9Kb1+qjkih6^f at SL#e"WS2Y-+q(V59QHR$jA1bKJ)WdaHe#f\"j/]tM,-daIUQn*'!!
-lg*m.oCM>8m+^:Lr;?Kcp%@D,jRVm4lK[['n*g;Vs8W-!s8W-!s8W-!s8W-!V5:#fWMu/JQ'R`%TqS0]
-XK8M)XI>TH[C*EQ\[f,U[?m5HW2QYXP*2N4TsM)3]"5K*f\#$9h:L91[C*EP\@AH7Vpa#AV5:#cVP^5f
-VT-Wqgt^]5daICEl/^pdiSiban*fB"jo>A\o()A-h;.Memdfr>s8W-!s8UBicL(#ds8W-!s8W-!s8W-!s8W-!s8W-!
-s.c?a^:q=u_SX1,_QL&EP*2!G_o'F2`4s(%`l?$WiShMb^9tAVWiE(nU8#0-\@/iSdaHRpf%.dX`6lu[
-`l?$Cc-=qpfu:qLVP^6Hh;,rb_U?l\o()A9l08!<q!%&-kND$^g=kHAhu*EMp\4FJlg+QLroiS0e^`4,
-hVRGYkPtS^s8W-!s8W-!s8W-!s8W-!s8U[$f"&?%Unjg*`Pog8`O`Xlbfn;ZdaHe#f]2#Pe^`4*gt^B-e&]VOeC<"'
-gt^)rbK at uMhVR,:dF%FOn'B>+b0%l#TqT]Sbd"FXgt^]Eio9"Yj7Dm6j5]1emHs0&l1=N<p at e4WqtoaH
-m-jE3rr2onqYL'bqY9j\aN2H^io:"<s8W-!s8W-!s8W-!s8W-!s8W,;`5L-Re&]VOaN2H_j5\8'aku"5
-cd0qif\"[%e'umsaiVZB_o(6`gXXj)eC<"!f%/C%e^N!rlK[ZqjQ+nCf%&=$dF$@je'ljte\oDEkih7+q>&e"g\^mF
-k2tgnmHs&uk4SE?q"XXJkihC"m/-\Wj5]1_kNDmFs4c;_hr!>ks8W-!s8W-!s8W-!s8W-!s8W-!]tM,%
-b0&/\dbEO2j5]1[j5]7_jkAGBf\"ir`l?Z`f\+s2aiVZbj5\tOh9XEncd0r!jlP+Gf?MRbjQ,Cak2t:I
-fAkoObKJ)WdaI"/hV?oAlg*m0p%@\<m.'W9q>'jSmdBB*lM:8Okih6umdB,qj5T(XgY:K]rVbd:j/oGcs8W-!s8W-!
-s8W-!s8W-!s8W-!s2`:&eC<"2kND*ol.k(Llg*llgt]HN\_Z)tgt^]QmdB2ujkntQe^`3RYHQ^8gXXj)
-jQ,C>_o(-Zf\bTDnaZ/(gY:]GiV<3Cg=k9KmdB6"k4/!3q"XXLlK\0>pu:;mn*f`8naZ2 at o)JaikND$i
-jlQ.,o_SF\m-O*"jQ-@@s8W-!s8W-!s8W-!s8W-!s8W-!s8VBLlJ^^\eC<"Ap at dP,j5oCab0%likNCOOg#M,Qhr!>@
-eC;ppdc09G[C*F)k2u7*o%;UIa2c6ZiSj1kmHEcthr!>Ae^`jGkMtU_lg*lqiSj(elKRQtm-O*)lg+9<
-pA+O[rr2omq>'[To]YN&naZ/Eq"W\$h<jUsf\"jVs8W-!s8W-!s8W-!s8W-!s8W-!s8W,RgY9BR]["gJ
-naZ.qcd2C]pu12j`l?$Cc->J9kjIm,k2tgmm-N!Ac*=OYnaZ/Ao^qA2kiCgcgt^]5daGb>]Dqp2iSibXk2tdejlbgi
-lK[Zpj5^+:rV60_rVc]fp%?tif_>.7o()A-h;.Pgn+QJKqtp9IhVRqup!M17s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!o^qeKp%@1uhWEt_hr!>gqto7,hUpK5g=k9Oo((SkguIGTs8W,dmHrKUf%Ja0o^qe%cd1tE
-m,?p^k2tghkND7"mHs<.mdBN&io91ckktAVb0%l\g=kfUl0.?poCMS2hr!JSj7W*<r;?KhqYK"&gu%#Hm-O)if%0m$
-s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s4Z2\l07Hmj5]OomIp8Io()A"daI"/hWjCkmdBMtgY;/amap(B
-kih6UcHb;'hSd at Ng"G'Rq"Wt4jlGL`mHs<4oCLeoh;$f at hr!>VlKZpMeb8_1lK[ZtkND:$mdp&AoCMSI
-p at e+LoBu&7s8W,np\4O\qX!S8p%A"Xs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8U?gc11>oc-=Mtl06O?ccs_Zh;-o2
-bfno!h=gR9mHs<0n*fi<o$5P+io8tam-Ma3`nT8&h;-oIj5]k,p>Y)ko^qe=kND3um.0`<lg*m3q"XRV
-p@@eFq"XXSnaZMRqu?]ro^qe?l07KulL431mdBNCs8V<Hkgn>9s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
-s8W,UhVR)Eh;R>OdaHS#hVQr=g$.bccHa_kh;.D_lh0rDf%/F>mHr0Cc, at Q=j5]1Gcd1nAlK@?nkih7+q>'dZp\FX\
-j5]1al07a.nb)SJs8W,rqtpEns8Dopp at e4?j5]Usn+#r<q>'jRmHs?0md]i;o^qeUs8W-!s8W-!s8W-!
-s8W-!s8W-!s8W-!s8W-!s8W-!g"G'MoCM84lI+,/iSibQhr"8*q:=-Jm-O)jf at THYmf*4bf\"if]"5r&
-a6DjQmdBN*k2tmkkje35lg*m$l08$>q=4"FmdBMsg=ko[m/I"`l07I!m-Ns"ki_-lmdBN0m-Niqjmr!5lK[[7s8VHP
-m+0b=mHs<@s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s5W/"l07H`f%0-OlIXY>hVR,>e^aEgpZh&/
-q"XXas8V?Jl0 at R!aN2H>_SYa/maft?e'ldqeC='[o'>W-iSibip\3\,ipH.#oCMS1hVRP_lKRQtk2th#
-p\4LZq=!e at mHs<4oCM/.kM+bGg"G'Ys8V?Jl-e#.s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8V3Bjk8>?hr!>X
-m-O**m+9k at m-O*4p at dn@mIp8In*f`+jQ,1ShTF!`jQ,CSf\"p3g?@balK[ZtkNDd at r:TaUp at e4Hm-OB:
-o_SF\o()ABo()8<n)rlsq"XXMlg*g"l2L\]s8W,emdB]<oCr"RkND$]g"HE*s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!s8W-!s8W,^kND3um+gCOj5]1`kihR,naGr8rVc]kqYKs\p\FX\mdBN0m-Mp=bL+_biSibdo((r*k55&Q
-r;?K`o((DafC/1sjlPU_iSjY0qWR/,lg*m1p at de:lKdd%daHS:p%@\<m-jE3lg*m,naY;cg&D!Mp at e4[
-s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!o()A+gY;,_mHX!%kih6nkND$kkPY8Ur;?K]n*fl>
-oChnOcd0r"k2tacjR;R+gt^]AhVRGYkP4iIp%A"Ur;>pJm-F!'io8tmq"XIPoD/4Xm-O**m-Ncmj6>gmlg*lujlQ+*
-oDSXdiSibXk2tdejlu$os8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s6An7n*f`8naZGNq:aQV
-q>'j_qYKF>kj7[&lg*m7r;?!Nm_?NOcd0r8r;>^>k5"iKo^qeCmHsW at p@S"LkND$lkihC"m.^8KlK[['
-n*fuDp=S$Mkih7%oCMeRq>^Kps8W,blg*]qk5+rNjlPUVf\$6(s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
-s8V]^oDejjjlPUsp%A at bs82]js8W-!s8W-!s7c9^gY:K2daH^tf	?oCMSBn*f#cgZ[kbo^qeOq>'^V
-p%S4Ts8W,\jlPXek5"iKlg*m'm-OZJr9ES4hVR,7cHb5#h#73Ml07I4s8U?gc0Xf`kND%.s8W-!s8W-!
-s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,hnaZ&8mcs*&q>'jPlg+9<p?(N"m-O*/naZ#6mHEcteC<!rdaI at Ckf:`a
-h;-o_q>&n(hZ*WUkND$unaZ2 at o)/F`q>'jNl08-Dr:fs[s8W,ko^qkNp?Lr.p at e4[s8VQVn,NFfoCMRs
-bKJo)irB&Ys8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!kih71s8VfdpAb0mrVc]iq"WRs
-gAh3Qs8W,^kNCXUgsjj'm-O**m-OB:o_/"Pj5]1op\3CqgAV!KlK[['n*fW0m-X3-r;?Kcp%A.Vq<I81p%A"Xs8V?J
-l1t/No^qeMp\4U`r;Zfsio8tcmdC,Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8)Tg
-o()AOs8V``o_\O_p%A"FmHsK8o)8Ocs8W,Le^a*UmdBN2mHs<$j5]h*p&+acrr2oVio9e0q=aOUp\4F[
-r;?Tps8;fmrVc]iq"XFNo&Jcjo^qeRr;>dBkjIm,mHs<4oCMVHo^;/8s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!s8W-!s8VHPm,[6gs8W-!s8VQVn+QJKs8W,mp at e+LoB#)qlK[Zoio9Comd9E/jQ,CYhVS,*
-qWdA2rVc]Ykih6okhb1Qlg*m*n*g;Vs82]jp%A"TqtosTo&\upnaZ/8lg+TNs8;fmmHs<'k2u7*o)Jai
-s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,Of\#NUlgF3/q"XX\qYKXJme?JMkih6nkND!ik2G:X
-oCMSGo^q;.k4\NBqtp9`p%A at bs5N%tb0%m,s8V9FkNM-ns8W,`l07m6p&"X`q>'jXoCN"^s7GsUkih6n
-kNDO2p&4jflg*ldeC=Nus8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!kih6sm-OWH
-qu?]rg"G'MoCMkVqt9XTlK[[-p%A%Pp?V&1p at e4AjlPgolf[Hon*f`5mdAuihuE`VlK[[7s8VZ\o(2JEoCMSQrr2fl
-qsNn?p at e4[s8V]^oCDJClK[['n*f>ujN#<]s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!s6oFFnaZ/Bp%A1XqY0aYp%A"Ur;?9^p@@eFjlPUJbfoJAmJm4de^`4Ms8Vlhq"==Qo^qeJ
-o^q,$iS<5DnaZ/?o()h\s8W-!p\4FHl07g2oDJOalg*m9rr2<PmIB`:h;-oQlg+TNs8W-!s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8VWZn`f<&qtp9Mio9e0q<-r(f at SX%dF%FOn*f`6n*f`6n*g;V
-s8W-!naZ/Ir;>gDl21AThVR,Rl07EqkiCgclK[["lK\!4oD\ago^qeUs8W&rrVHBel07HrkihX0oDJOa
-kih71s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,\jlP1Kg%"V&g"G'GmHs`Fq;L;k
-q"XXZq"XIPoD/4XiSibPhVS50rT<8)s8W,fn*g;Vs5rJ+o^qeQqto$uf_YI at p%A"<j5]OomJQn[s8W,h
-naZSVrVuotr;?K`o()28mJm4ds8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
-s8W-!gt^]Eio91ckk+N>o^qe?l08$>q>^Kpp\4F6f at TlqqW6i#o()ADo^qV at n,NFfg=k9[rr2<PmI0N4rr2ofo()DD
-oBbi1s8W,cm-OE<p%S4TmHs<2naZMRqqg2dp at e4+cd2Xks8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!s8W-!s8W-!s8W-!s7lBanaZ/Ao^q;.k4J<<j5]2"s8V<Hkk"E;mdBNCs8VWZn_N$WjlPUm
-n*g;Vs8W-!iSibYkNDO2p&G'lqYL'dr;?<`p[n+Mp at e4CkNDR4pA"FXdF$A>r;?Kjr9!/(s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8V]^oCV\IhVR,`p\4=Po_naes8W,cm-Ns"
-kkb/Pp\4F\rVbm at k55&Qo()AAnaZ8Do[VLBq"XXTo((o(jmhm2iSibdo()GFo^_SDo^qeIoCM>8m.BrB
-hr!>Xm-Ma3`rH)=s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W*~>
-Q
-0.36 w
-1 J
-1 j
-1 0 0 rg
-2283 1777 m
-2286 1812 l
-2290 1870 l
-2293 1927 l
-2296 1985 l
-2299 2042 l
-2301 2100 l
-2302 2158 l
-2303 2216 l
-2303 2274 l
-2302 2332 l
-2301 2390 l
-2299 2448 l
-2297 2506 l
-2294 2564 l
-2291 2622 l
-2287 2680 l
-2282 2738 l
-2277 2796 l
-2271 2854 l
-2265 2913 l
-2258 2971 l
-2250 3029 l
-2242 3087 l
-2233 3145 l
-2223 3202 l
-2213 3260 l
-2203 3318 l
-2192 3376 l
-2180 3433 l
-2167 3491 l
-2154 3548 l
-2141 3606 l
-2126 3663 l
-2112 3720 l
-2096 3777 l
-2080 3834 l
-2063 3891 l
-2046 3948 l
-2028 4004 l
-2010 4061 l
-1991 4117 l
-1971 4173 l
-1951 4229 l
-1930 4284 l
-1909 4340 l
-1887 4395 l
-1865 4451 l
-1841 4505 l
-1818 4560 l
-1816 4564 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1813 4570 l
-1813 4570 l
-S
-1911 1777 m
-1913 1784 l
-1924 1834 l
-1935 1885 l
-1945 1936 l
-1955 1987 l
-1964 2038 l
-1973 2089 l
-1981 2141 l
-1989 2193 l
-1997 2244 l
-2004 2296 l
-2010 2349 l
-2016 2401 l
-2021 2453 l
-2026 2506 l
-2031 2559 l
-2035 2611 l
-2038 2664 l
-2041 2717 l
-2044 2770 l
-2045 2824 l
-2047 2877 l
-2048 2931 l
-2048 2984 l
-2048 3038 l
-2047 3092 l
-2046 3145 l
-2044 3199 l
-2042 3253 l
-2039 3307 l
-2035 3362 l
-2031 3416 l
-2027 3470 l
-2022 3524 l
-2016 3579 l
-2010 3633 l
-2003 3688 l
-1996 3742 l
-1988 3797 l
-1979 3851 l
-1970 3906 l
-1961 3960 l
-1950 4015 l
-1940 4070 l
-1928 4124 l
-1916 4179 l
-1904 4233 l
-1891 4288 l
-1877 4342 l
-1863 4397 l
-1848 4451 l
-1832 4506 l
-1816 4560 l
-1815 4564 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1813 4570 l
-1813 4570 l
-S
-1433 1777 m
-1446 1809 l
-1464 1851 l
-1482 1893 l
-1499 1935 l
-1516 1978 l
-1532 2020 l
-1549 2063 l
-1564 2106 l
-1580 2149 l
-1595 2193 l
-1610 2236 l
-1624 2280 l
-1638 2324 l
-1651 2368 l
-1665 2413 l
-1677 2457 l
-1690 2502 l
-1702 2547 l
-1714 2592 l
-1725 2637 l
-1736 2682 l
-1746 2728 l
-1756 2773 l
-1766 2819 l
-1775 2865 l
-1784 2911 l
-1793 2958 l
-1801 3004 l
-1808 3051 l
-1816 3097 l
-1822 3144 l
-1829 3191 l
-1835 3239 l
-1840 3286 l
-1845 3333 l
-1850 3381 l
-1854 3429 l
-1857 3477 l
-1861 3525 l
-1863 3573 l
-1866 3621 l
-1867 3670 l
-1869 3718 l
-1870 3767 l
-1870 3816 l
-1870 3865 l
-1869 3914 l
-1868 3963 l
-1866 4012 l
-1864 4062 l
-1862 4111 l
-1859 4161 l
-1855 4210 l
-1851 4260 l
-1846 4310 l
-1841 4360 l
-1835 4410 l
-1829 4460 l
-1822 4511 l
-1815 4561 l
-1814 4565 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-732 1777 m
-733 1778 l
-758 1811 l
-782 1843 l
-807 1876 l
-831 1908 l
-855 1941 l
-878 1974 l
-902 2007 l
-925 2041 l
-948 2074 l
-971 2108 l
-993 2141 l
-1015 2175 l
-1037 2209 l
-1059 2243 l
-1081 2278 l
-1102 2312 l
-1123 2347 l
-1143 2382 l
-1164 2417 l
-1184 2452 l
-1204 2487 l
-1224 2522 l
-1243 2558 l
-1262 2593 l
-1281 2629 l
-1300 2665 l
-1318 2701 l
-1336 2738 l
-1354 2774 l
-1371 2811 l
-1388 2847 l
-1405 2884 l
-1422 2921 l
-1438 2958 l
-1454 2995 l
-1470 3033 l
-1485 3070 l
-1500 3108 l
-1515 3146 l
-1530 3184 l
-1544 3222 l
-1558 3260 l
-1571 3299 l
-1584 3338 l
-1597 3376 l
-1610 3415 l
-1622 3454 l
-1634 3493 l
-1645 3533 l
-1657 3572 l
-1667 3612 l
-1678 3651 l
-1688 3691 l
-1698 3731 l
-1707 3772 l
-1716 3812 l
-1725 3852 l
-1733 3893 l
-1741 3934 l
-1749 3975 l
-1756 4016 l
-1763 4057 l
-1769 4098 l
-1775 4140 l
-1781 4181 l
-1786 4223 l
-1791 4265 l
-1795 4307 l
-1799 4349 l
-1803 4392 l
-1806 4434 l
-1809 4477 l
-1811 4519 l
-1813 4562 l
-1813 4565 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 2622 m
-551 2630 l
-577 2656 l
-602 2682 l
-628 2709 l
-653 2736 l
-678 2762 l
-703 2789 l
-728 2816 l
-753 2843 l
-777 2870 l
-801 2897 l
-825 2925 l
-849 2952 l
-873 2979 l
-896 3007 l
-920 3034 l
-943 3062 l
-966 3090 l
-988 3118 l
-1011 3146 l
-1033 3174 l
-1055 3202 l
-1077 3230 l
-1099 3258 l
-1120 3287 l
-1142 3315 l
-1163 3344 l
-1184 3372 l
-1204 3401 l
-1225 3430 l
-1245 3459 l
-1265 3488 l
-1285 3517 l
-1304 3546 l
-1324 3575 l
-1343 3605 l
-1362 3634 l
-1381 3664 l
-1399 3693 l
-1417 3723 l
-1435 3753 l
-1453 3783 l
-1470 3813 l
-1488 3843 l
-1505 3873 l
-1521 3903 l
-1538 3934 l
-1554 3964 l
-1570 3995 l
-1586 4026 l
-1601 4056 l
-1616 4087 l
-1631 4118 l
-1646 4150 l
-1661 4181 l
-1675 4212 l
-1689 4244 l
-1702 4275 l
-1715 4307 l
-1728 4339 l
-1741 4370 l
-1754 4402 l
-1766 4435 l
-1778 4467 l
-1789 4499 l
-1800 4532 l
-1811 4564 l
-1812 4567 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 3506 m
-561 3518 l
-588 3538 l
-615 3558 l
-642 3577 l
-669 3597 l
-696 3616 l
-723 3636 l
-749 3656 l
-776 3675 l
-802 3695 l
-828 3714 l
-854 3734 l
-880 3754 l
-906 3773 l
-932 3793 l
-957 3813 l
-982 3832 l
-1008 3852 l
-1033 3872 l
-1057 3891 l
-1082 3911 l
-1107 3931 l
-1131 3950 l
-1156 3970 l
-1180 3990 l
-1204 4010 l
-1228 4029 l
-1251 4049 l
-1275 4069 l
-1298 4089 l
-1321 4108 l
-1344 4128 l
-1367 4148 l
-1390 4168 l
-1413 4188 l
-1435 4207 l
-1457 4227 l
-1480 4247 l
-1501 4267 l
-1523 4287 l
-1545 4307 l
-1566 4327 l
-1588 4346 l
-1609 4366 l
-1630 4386 l
-1650 4406 l
-1671 4426 l
-1691 4446 l
-1711 4466 l
-1731 4486 l
-1751 4506 l
-1771 4526 l
-1791 4546 l
-1810 4567 l
-1811 4568 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 4183 m
-554 4186 l
-584 4197 l
-615 4208 l
-645 4219 l
-675 4229 l
-705 4240 l
-735 4250 l
-765 4260 l
-795 4271 l
-825 4281 l
-855 4291 l
-884 4301 l
-914 4311 l
-943 4320 l
-973 4330 l
-1002 4340 l
-1031 4349 l
-1060 4358 l
-1089 4368 l
-1118 4377 l
-1147 4386 l
-1176 4395 l
-1204 4403 l
-1233 4412 l
-1261 4421 l
-1290 4429 l
-1318 4438 l
-1346 4446 l
-1374 4454 l
-1402 4462 l
-1430 4470 l
-1457 4478 l
-1485 4486 l
-1513 4493 l
-1540 4501 l
-1567 4508 l
-1595 4515 l
-1622 4523 l
-1649 4530 l
-1676 4536 l
-1702 4543 l
-1729 4550 l
-1756 4556 l
-1782 4563 l
-1809 4569 l
-1810 4570 l
-1812 4570 l
-1812 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 4696 m
-548 4696 l
-582 4697 l
-617 4698 l
-651 4698 l
-685 4699 l
-719 4699 l
-753 4699 l
-788 4698 l
-822 4698 l
-855 4697 l
-889 4696 l
-923 4695 l
-957 4693 l
-990 4692 l
-1024 4690 l
-1058 4688 l
-1091 4685 l
-1124 4683 l
-1158 4680 l
-1191 4677 l
-1224 4674 l
-1257 4670 l
-1290 4666 l
-1323 4663 l
-1356 4658 l
-1389 4654 l
-1421 4649 l
-1454 4644 l
-1487 4639 l
-1519 4633 l
-1551 4628 l
-1584 4622 l
-1616 4615 l
-1648 4609 l
-1680 4602 l
-1712 4595 l
-1744 4587 l
-1776 4580 l
-1808 4572 l
-1810 4571 l
-1812 4571 l
-1812 4570 l
-1812 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 5102 m
-557 5098 l
-596 5089 l
-634 5079 l
-672 5068 l
-710 5058 l
-748 5047 l
-786 5035 l
-823 5024 l
-861 5012 l
-899 4999 l
-936 4987 l
-974 4974 l
-1011 4960 l
-1048 4947 l
-1085 4933 l
-1122 4918 l
-1159 4904 l
-1196 4889 l
-1233 4873 l
-1270 4857 l
-1306 4841 l
-1343 4825 l
-1379 4808 l
-1416 4790 l
-1452 4773 l
-1488 4755 l
-1524 4736 l
-1560 4717 l
-1595 4698 l
-1631 4678 l
-1666 4658 l
-1702 4638 l
-1737 4617 l
-1772 4596 l
-1807 4574 l
-1809 4573 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 5444 m
-564 5435 l
-605 5414 l
-646 5394 l
-687 5373 l
-728 5352 l
-769 5330 l
-810 5308 l
-850 5285 l
-890 5262 l
-931 5239 l
-971 5215 l
-1011 5191 l
-1050 5166 l
-1090 5141 l
-1129 5115 l
-1169 5089 l
-1208 5063 l
-1247 5036 l
-1285 5008 l
-1324 4981 l
-1362 4952 l
-1400 4923 l
-1438 4894 l
-1476 4865 l
-1514 4834 l
-1551 4804 l
-1588 4773 l
-1625 4741 l
-1662 4709 l
-1699 4677 l
-1735 4644 l
-1771 4610 l
-1807 4576 l
-1809 4574 l
-1812 4572 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-S
-543 5757 m
-554 5749 l
-597 5720 l
-640 5690 l
-683 5660 l
-726 5629 l
-768 5598 l
-810 5567 l
-852 5535 l
-893 5502 l
-935 5469 l
-976 5435 l
-1017 5401 l
-1057 5367 l
-1098 5332 l
-1138 5297 l
-1178 5261 l
-1217 5224 l
-1256 5187 l
-1295 5150 l
-1334 5112 l
-1372 5074 l
-1410 5035 l
-1448 4996 l
-1486 4956 l
-1523 4916 l
-1559 4876 l
-1596 4835 l
-1632 4793 l
-1668 4751 l
-1703 4709 l
-1738 4666 l
-1773 4622 l
-1807 4578 l
-1810 4575 l
-1812 4572 l
-1812 4572 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-543 6064 m
-569 6042 l
-613 6005 l
-656 5967 l
-700 5929 l
-742 5890 l
-785 5851 l
-827 5812 l
-868 5772 l
-910 5731 l
-951 5691 l
-991 5649 l
-1031 5607 l
-1071 5565 l
-1110 5522 l
-1149 5479 l
-1188 5436 l
-1226 5392 l
-1264 5347 l
-1301 5302 l
-1338 5257 l
-1375 5211 l
-1411 5165 l
-1446 5118 l
-1482 5071 l
-1516 5024 l
-1551 4976 l
-1584 4928 l
-1618 4879 l
-1651 4830 l
-1683 4781 l
-1715 4731 l
-1746 4681 l
-1777 4630 l
-1808 4579 l
-1810 4576 l
-1812 4572 l
-1812 4572 l
-1812 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-804 6121 m
-831 6091 l
-871 6046 l
-911 6000 l
-950 5954 l
-989 5907 l
-1027 5860 l
-1065 5813 l
-1102 5765 l
-1139 5717 l
-1175 5669 l
-1211 5620 l
-1246 5571 l
-1280 5521 l
-1315 5471 l
-1348 5421 l
-1381 5371 l
-1414 5320 l
-1445 5269 l
-1477 5218 l
-1508 5166 l
-1538 5114 l
-1567 5062 l
-1597 5009 l
-1625 4957 l
-1653 4903 l
-1681 4850 l
-1707 4797 l
-1734 4743 l
-1759 4689 l
-1784 4635 l
-1809 4580 l
-1811 4576 l
-1812 4572 l
-1812 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1061 6121 m
-1070 6107 l
-1104 6057 l
-1138 6007 l
-1171 5956 l
-1203 5905 l
-1235 5854 l
-1266 5803 l
-1297 5751 l
-1327 5700 l
-1356 5648 l
-1384 5596 l
-1412 5544 l
-1440 5491 l
-1467 5439 l
-1493 5386 l
-1518 5333 l
-1543 5280 l
-1567 5227 l
-1591 5173 l
-1614 5120 l
-1636 5066 l
-1658 5013 l
-1679 4959 l
-1700 4905 l
-1720 4851 l
-1739 4797 l
-1758 4743 l
-1776 4689 l
-1793 4634 l
-1810 4580 l
-1811 4576 l
-1813 4572 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1301 6121 m
-1308 6108 l
-1334 6057 l
-1360 6006 l
-1384 5955 l
-1408 5904 l
-1432 5853 l
-1455 5802 l
-1477 5751 l
-1498 5700 l
-1519 5649 l
-1539 5598 l
-1558 5547 l
-1577 5495 l
-1595 5444 l
-1613 5393 l
-1630 5342 l
-1646 5291 l
-1662 5240 l
-1677 5189 l
-1691 5138 l
-1705 5087 l
-1718 5036 l
-1731 4985 l
-1743 4934 l
-1755 4883 l
-1766 4832 l
-1776 4782 l
-1786 4731 l
-1795 4680 l
-1804 4630 l
-1812 4579 l
-1812 4576 l
-1813 4572 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1567 6121 m
-1568 6117 l
-1585 6070 l
-1601 6023 l
-1617 5976 l
-1632 5929 l
-1646 5882 l
-1659 5835 l
-1672 5789 l
-1685 5742 l
-1697 5696 l
-1708 5650 l
-1718 5603 l
-1728 5557 l
-1738 5512 l
-1747 5466 l
-1755 5420 l
-1763 5375 l
-1770 5329 l
-1776 5284 l
-1783 5239 l
-1788 5194 l
-1793 5149 l
-1798 5104 l
-1802 5060 l
-1805 5015 l
-1808 4971 l
-1811 4927 l
-1813 4883 l
-1814 4839 l
-1815 4795 l
-1816 4751 l
-1816 4708 l
-1816 4664 l
-1815 4621 l
-1814 4578 l
-1813 4575 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1922 6121 m
-1923 6116 l
-1930 6076 l
-1937 6037 l
-1943 5998 l
-1949 5959 l
-1954 5921 l
-1958 5882 l
-1962 5844 l
-1966 5806 l
-1969 5768 l
-1971 5730 l
-1973 5693 l
-1975 5655 l
-1976 5618 l
-1976 5581 l
-1976 5544 l
-1976 5508 l
-1975 5471 l
-1974 5435 l
-1972 5399 l
-1970 5363 l
-1967 5327 l
-1964 5292 l
-1961 5256 l
-1957 5221 l
-1953 5186 l
-1948 5150 l
-1943 5116 l
-1938 5081 l
-1932 5046 l
-1926 5012 l
-1920 4978 l
-1913 4943 l
-1906 4909 l
-1898 4875 l
-1890 4842 l
-1882 4808 l
-1874 4774 l
-1865 4741 l
-1855 4708 l
-1846 4675 l
-1836 4642 l
-1826 4609 l
-1815 4576 l
-1814 4574 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-S
-2562 6121 m
-2562 6116 l
-2562 6089 l
-2562 6062 l
-2562 6035 l
-2561 6009 l
-2560 5983 l
-2558 5957 l
-2556 5931 l
-2553 5906 l
-2550 5880 l
-2546 5855 l
-2543 5830 l
-2538 5806 l
-2534 5781 l
-2529 5757 l
-2523 5733 l
-2517 5709 l
-2511 5685 l
-2505 5661 l
-2498 5638 l
-2491 5615 l
-2483 5591 l
-2476 5568 l
-2468 5545 l
-2459 5523 l
-2451 5500 l
-2442 5477 l
-2432 5455 l
-2423 5432 l
-2413 5410 l
-2403 5388 l
-2392 5366 l
-2381 5344 l
-2370 5322 l
-2359 5300 l
-2348 5279 l
-2336 5257 l
-2324 5236 l
-2311 5214 l
-2299 5193 l
-2286 5171 l
-2273 5150 l
-2260 5129 l
-2246 5108 l
-2232 5087 l
-2218 5066 l
-2204 5045 l
-2190 5024 l
-2175 5003 l
-2160 4982 l
-2145 4961 l
-2129 4941 l
-2114 4920 l
-2098 4899 l
-2082 4879 l
-2066 4858 l
-2049 4838 l
-2033 4817 l
-2016 4797 l
-1999 4776 l
-1981 4756 l
-1964 4736 l
-1946 4715 l
-1928 4695 l
-1910 4675 l
-1892 4655 l
-1873 4634 l
-1855 4614 l
-1836 4594 l
-1817 4574 l
-1815 4572 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4570 l
-1813 4570 l
-1813 4570 l
-S
-4454 1777 m
-4454 1785 l
-4454 1798 l
-4454 1810 l
-4454 1822 l
-4453 1834 l
-4453 1847 l
-4453 1859 l
-4453 1871 l
-4452 1882 l
-4452 1894 l
-4452 1906 l
-4451 1918 l
-4451 1929 l
-4451 1941 l
-4450 1952 l
-4450 1964 l
-4449 1975 l
-4449 1986 l
-4448 1998 l
-4448 2009 l
-4447 2020 l
-4447 2031 l
-4446 2042 l
-4446 2053 l
-4445 2064 l
-4445 2075 l
-4444 2086 l
-4443 2096 l
-4443 2107 l
-4442 2118 l
-4442 2128 l
-4441 2139 l
-4440 2149 l
-4440 2159 l
-4439 2170 l
-4428 2309 l
-4415 2438 l
-4401 2558 l
-4385 2670 l
-4369 2775 l
-4352 2874 l
-4334 2966 l
-4316 3052 l
-4297 3134 l
-4278 3210 l
-4259 3283 l
-4240 3351 l
-4221 3416 l
-4201 3477 l
-4182 3534 l
-4163 3589 l
-4143 3641 l
-4124 3691 l
-4105 3738 l
-4085 3783 l
-4066 3825 l
-4047 3866 l
-4028 3905 l
-4009 3942 l
-3990 3977 l
-3971 4011 l
-3952 4043 l
-3933 4074 l
-3914 4104 l
-3895 4132 l
-3876 4159 l
-3858 4185 l
-3839 4210 l
-3820 4234 l
-3801 4257 l
-3783 4279 l
-3764 4300 l
-3745 4320 l
-3726 4340 l
-3708 4358 l
-3689 4376 l
-3670 4393 l
-3651 4410 l
-3633 4425 l
-3614 4441 l
-3595 4455 l
-3576 4469 l
-3557 4482 l
-3538 4495 l
-3519 4507 l
-3500 4519 l
-3481 4531 l
-3462 4541 l
-3442 4552 l
-3423 4561 l
-3404 4571 l
-3384 4580 l
-3365 4589 l
-3345 4597 l
-3325 4605 l
-3306 4612 l
-3286 4619 l
-3266 4626 l
-3246 4632 l
-3226 4638 l
-3206 4644 l
-3186 4649 l
-3165 4654 l
-3145 4659 l
-3125 4663 l
-3104 4668 l
-3083 4671 l
-3063 4675 l
-3042 4678 l
-3021 4681 l
-3000 4684 l
-2979 4687 l
-2958 4689 l
-2936 4691 l
-2915 4693 l
-2894 4694 l
-2872 4696 l
-2850 4697 l
-2828 4698 l
-2807 4698 l
-2785 4699 l
-2762 4699 l
-2740 4699 l
-2718 4699 l
-2696 4699 l
-2673 4698 l
-2650 4697 l
-2628 4696 l
-2605 4695 l
-2582 4694 l
-2559 4692 l
-2536 4690 l
-2513 4689 l
-2489 4686 l
-2466 4684 l
-2442 4682 l
-2418 4679 l
-2395 4676 l
-2371 4674 l
-2347 4670 l
-2323 4667 l
-2298 4664 l
-2274 4660 l
-2250 4657 l
-2225 4653 l
-2201 4649 l
-2176 4644 l
-2151 4640 l
-2126 4636 l
-2101 4631 l
-2076 4626 l
-2050 4621 l
-2025 4616 l
-2000 4611 l
-1974 4606 l
-1948 4601 l
-1922 4595 l
-1896 4589 l
-1870 4583 l
-1844 4577 l
-1818 4571 l
-1816 4571 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-4071 1777 m
-4067 1810 l
-4057 1881 l
-4046 1950 l
-4034 2018 l
-4021 2084 l
-4007 2148 l
-3993 2211 l
-3979 2273 l
-3963 2333 l
-3947 2392 l
-3931 2450 l
-3914 2506 l
-3897 2561 l
-3879 2615 l
-3860 2667 l
-3842 2719 l
-3822 2769 l
-3803 2818 l
-3783 2866 l
-3762 2913 l
-3742 2959 l
-3721 3004 l
-3699 3048 l
-3678 3091 l
-3656 3134 l
-3633 3175 l
-3611 3215 l
-3588 3255 l
-3565 3293 l
-3542 3331 l
-3518 3368 l
-3494 3404 l
-3470 3440 l
-3446 3474 l
-3421 3508 l
-3397 3541 l
-3372 3574 l
-3347 3606 l
-3321 3637 l
-3296 3667 l
-3270 3697 l
-3245 3726 l
-3219 3754 l
-3192 3782 l
-3166 3810 l
-3140 3836 l
-3113 3863 l
-3086 3888 l
-3059 3913 l
-3032 3938 l
-3005 3962 l
-2978 3985 l
-2950 4008 l
-2922 4030 l
-2895 4052 l
-2867 4074 l
-2839 4094 l
-2811 4115 l
-2782 4135 l
-2754 4154 l
-2725 4174 l
-2697 4192 l
-2668 4210 l
-2639 4228 l
-2610 4246 l
-2581 4263 l
-2552 4279 l
-2522 4295 l
-2493 4311 l
-2463 4326 l
-2433 4341 l
-2404 4356 l
-2374 4370 l
-2344 4384 l
-2314 4398 l
-2283 4411 l
-2253 4424 l
-2223 4436 l
-2192 4448 l
-2162 4460 l
-2131 4472 l
-2100 4483 l
-2069 4493 l
-2038 4504 l
-2007 4514 l
-1976 4524 l
-1945 4534 l
-1914 4543 l
-1882 4552 l
-1851 4560 l
-1819 4569 l
-1817 4569 l
-1815 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-3631 1777 m
-3622 1824 l
-3610 1887 l
-3597 1950 l
-3583 2011 l
-3568 2072 l
-3553 2132 l
-3537 2191 l
-3521 2249 l
-3504 2307 l
-3486 2363 l
-3468 2419 l
-3450 2474 l
-3431 2528 l
-3411 2582 l
-3391 2635 l
-3370 2687 l
-3349 2738 l
-3328 2789 l
-3306 2839 l
-3283 2888 l
-3260 2936 l
-3237 2984 l
-3213 3031 l
-3189 3078 l
-3165 3123 l
-3140 3168 l
-3115 3213 l
-3089 3256 l
-3063 3300 l
-3037 3342 l
-3010 3384 l
-2984 3425 l
-2956 3466 l
-2929 3506 l
-2901 3545 l
-2873 3584 l
-2845 3622 l
-2816 3659 l
-2787 3696 l
-2758 3733 l
-2728 3769 l
-2699 3804 l
-2669 3839 l
-2639 3873 l
-2608 3907 l
-2578 3940 l
-2547 3972 l
-2516 4004 l
-2484 4036 l
-2453 4067 l
-2421 4098 l
-2389 4128 l
-2357 4157 l
-2325 4186 l
-2292 4215 l
-2260 4243 l
-2227 4270 l
-2194 4298 l
-2160 4324 l
-2127 4350 l
-2094 4376 l
-2060 4401 l
-2026 4426 l
-1992 4451 l
-1958 4475 l
-1923 4498 l
-1889 4521 l
-1854 4544 l
-1820 4566 l
-1817 4568 l
-1815 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-3251 1777 m
-3241 1834 l
-3230 1898 l
-3218 1960 l
-3205 2023 l
-3192 2084 l
-3178 2146 l
-3164 2206 l
-3149 2266 l
-3133 2326 l
-3116 2385 l
-3099 2444 l
-3082 2502 l
-3063 2559 l
-3045 2616 l
-3025 2673 l
-3005 2728 l
-2985 2784 l
-2964 2839 l
-2942 2893 l
-2920 2947 l
-2898 3000 l
-2875 3052 l
-2851 3105 l
-2827 3156 l
-2803 3207 l
-2778 3258 l
-2753 3308 l
-2727 3357 l
-2700 3406 l
-2674 3454 l
-2647 3502 l
-2619 3549 l
-2591 3596 l
-2563 3642 l
-2534 3688 l
-2505 3733 l
-2476 3778 l
-2446 3822 l
-2416 3866 l
-2386 3909 l
-2355 3951 l
-2324 3993 l
-2292 4035 l
-2260 4076 l
-2228 4117 l
-2196 4157 l
-2163 4196 l
-2130 4235 l
-2096 4274 l
-2063 4312 l
-2029 4349 l
-1995 4386 l
-1960 4423 l
-1926 4459 l
-1891 4494 l
-1855 4529 l
-1820 4564 l
-1817 4566 l
-1815 4569 l
-1815 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2919 1777 m
-2914 1822 l
-2907 1885 l
-2898 1949 l
-2890 2012 l
-2880 2074 l
-2870 2137 l
-2859 2199 l
-2848 2261 l
-2836 2322 l
-2823 2383 l
-2809 2444 l
-2795 2505 l
-2781 2565 l
-2765 2625 l
-2749 2685 l
-2733 2744 l
-2715 2803 l
-2698 2861 l
-2679 2919 l
-2660 2977 l
-2641 3034 l
-2621 3091 l
-2600 3148 l
-2579 3204 l
-2557 3260 l
-2535 3315 l
-2512 3370 l
-2489 3425 l
-2465 3479 l
-2440 3533 l
-2415 3586 l
-2390 3639 l
-2364 3692 l
-2338 3744 l
-2311 3795 l
-2283 3847 l
-2255 3898 l
-2227 3948 l
-2198 3998 l
-2169 4047 l
-2139 4096 l
-2109 4145 l
-2079 4193 l
-2048 4241 l
-2016 4288 l
-1985 4335 l
-1952 4381 l
-1920 4427 l
-1887 4473 l
-1853 4518 l
-1819 4562 l
-1817 4565 l
-1815 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2606 1777 m
-2606 1788 l
-2604 1850 l
-2602 1912 l
-2599 1973 l
-2595 2035 l
-2590 2096 l
-2585 2158 l
-2579 2219 l
-2573 2280 l
-2566 2341 l
-2558 2402 l
-2550 2463 l
-2541 2524 l
-2531 2584 l
-2521 2645 l
-2510 2705 l
-2499 2765 l
-2487 2825 l
-2474 2885 l
-2461 2944 l
-2447 3004 l
-2432 3063 l
-2417 3122 l
-2401 3181 l
-2385 3239 l
-2367 3297 l
-2350 3355 l
-2332 3413 l
-2313 3471 l
-2293 3528 l
-2273 3585 l
-2253 3642 l
-2232 3698 l
-2210 3755 l
-2188 3810 l
-2165 3866 l
-2142 3922 l
-2118 3977 l
-2093 4031 l
-2068 4086 l
-2042 4140 l
-2016 4194 l
-1990 4247 l
-1963 4300 l
-1935 4353 l
-1907 4406 l
-1878 4458 l
-1849 4509 l
-1819 4561 l
-1817 4565 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2890 6121 m
-2892 6118 l
-2906 6096 l
-2920 6075 l
-2934 6054 l
-2948 6032 l
-2962 6011 l
-2976 5989 l
-2990 5968 l
-3003 5946 l
-3017 5924 l
-3031 5902 l
-3044 5880 l
-3058 5858 l
-3071 5836 l
-3084 5814 l
-3097 5792 l
-3111 5770 l
-3124 5748 l
-3137 5725 l
-3150 5703 l
-3162 5681 l
-3175 5658 l
-3188 5635 l
-3200 5613 l
-3213 5590 l
-3225 5567 l
-3238 5545 l
-3250 5522 l
-3262 5499 l
-3274 5476 l
-3286 5453 l
-3298 5430 l
-3310 5407 l
-3322 5384 l
-3334 5360 l
-3345 5337 l
-3357 5314 l
-3368 5291 l
-3380 5267 l
-3391 5244 l
-3402 5220 l
-3413 5197 l
-3424 5173 l
-3435 5150 l
-3446 5126 l
-3457 5103 l
-3468 5079 l
-3478 5055 l
-3489 5032 l
-3499 5008 l
-3509 4984 l
-3519 4961 l
-3530 4937 l
-3540 4913 l
-3549 4889 l
-3559 4865 l
-3569 4841 l
-3579 4817 l
-3588 4793 l
-3598 4769 l
-3607 4745 l
-3616 4721 l
-3625 4697 l
-3634 4673 l
-3643 4649 l
-3652 4625 l
-3661 4601 l
-3670 4577 l
-3678 4553 l
-3687 4529 l
-3695 4505 l
-3704 4481 l
-3712 4457 l
-3720 4433 l
-3728 4409 l
-3736 4385 l
-3744 4361 l
-3751 4337 l
-3759 4312 l
-3766 4288 l
-3774 4264 l
-3781 4240 l
-3788 4216 l
-3796 4192 l
-3803 4168 l
-3810 4144 l
-3816 4120 l
-3823 4096 l
-3830 4072 l
-3836 4048 l
-3843 4024 l
-3849 4000 l
-3855 3976 l
-3861 3953 l
-3868 3929 l
-3874 3905 l
-3879 3881 l
-3885 3857 l
-3891 3833 l
-3896 3810 l
-3902 3786 l
-3907 3762 l
-3913 3738 l
-3918 3715 l
-3923 3691 l
-3928 3668 l
-3933 3644 l
-3938 3621 l
-3942 3597 l
-3947 3574 l
-3952 3550 l
-3956 3527 l
-3960 3504 l
-3965 3480 l
-3969 3457 l
-3973 3434 l
-3977 3411 l
-3981 3387 l
-3985 3364 l
-3989 3341 l
-3992 3318 l
-3996 3295 l
-3999 3272 l
-4003 3249 l
-4006 3227 l
-4009 3204 l
-4012 3181 l
-4015 3158 l
-4018 3136 l
-4021 3113 l
-4024 3091 l
-4026 3068 l
-4029 3046 l
-4032 3023 l
-4034 3001 l
-4036 2979 l
-4039 2957 l
-4041 2934 l
-4043 2912 l
-4045 2890 l
-4047 2868 l
-4049 2846 l
-4051 2825 l
-4052 2803 l
-4054 2781 l
-4055 2759 l
-4057 2738 l
-4058 2716 l
-4060 2695 l
-4061 2673 l
-4062 2652 l
-4063 2631 l
-4064 2609 l
-4065 2588 l
-4066 2567 l
-4067 2546 l
-4068 2525 l
-4068 2504 l
-4069 2483 l
-4069 2462 l
-4070 2442 l
-4070 2421 l
-4070 2401 l
-4071 2380 l
-4071 2360 l
-4071 2339 l
-4071 2319 l
-4071 2299 l
-4071 2279 l
-4071 2259 l
-4071 2239 l
-4070 2219 l
-4070 2199 l
-4069 2179 l
-4069 2159 l
-4068 2140 l
-4068 2120 l
-4067 2100 l
-4066 2081 l
-4066 2062 l
-4065 2042 l
-4064 2023 l
-4063 2004 l
-4062 1985 l
-4061 1966 l
-4060 1947 l
-4059 1928 l
-4057 1910 l
-4056 1891 l
-4055 1872 l
-4053 1854 l
-4052 1835 l
-4050 1817 l
-4049 1799 l
-4047 1781 l
-4047 1777 l
-S
-868 1777 m
-823 1845 l
-772 1921 l
-722 1998 l
-672 2076 l
-623 2155 l
-573 2235 l
-543 2285 l
-S
-2598 6121 m
-2601 6118 l
-2611 6104 l
-2620 6091 l
-2630 6078 l
-2639 6064 l
-2649 6051 l
-2658 6038 l
-2668 6024 l
-2677 6011 l
-2686 5997 l
-2696 5984 l
-2705 5970 l
-2714 5956 l
-2724 5943 l
-2733 5929 l
-2742 5915 l
-2751 5901 l
-2761 5887 l
-2770 5874 l
-2779 5860 l
-2788 5846 l
-2797 5832 l
-2806 5818 l
-2815 5804 l
-2824 5790 l
-2833 5775 l
-2842 5761 l
-2850 5747 l
-2859 5733 l
-2868 5719 l
-2877 5704 l
-2886 5690 l
-2894 5676 l
-2903 5661 l
-2912 5647 l
-2920 5633 l
-2929 5618 l
-2937 5604 l
-2946 5589 l
-2954 5574 l
-2963 5560 l
-2971 5545 l
-2979 5531 l
-2988 5516 l
-2996 5501 l
-3004 5487 l
-3012 5472 l
-3020 5457 l
-3028 5442 l
-3037 5427 l
-3045 5412 l
-3053 5398 l
-3061 5383 l
-3068 5368 l
-3076 5353 l
-3084 5338 l
-3092 5323 l
-3100 5308 l
-3108 5293 l
-3115 5278 l
-3123 5263 l
-3130 5247 l
-3138 5232 l
-3146 5217 l
-3153 5202 l
-3160 5187 l
-3168 5172 l
-3175 5156 l
-3183 5141 l
-3190 5126 l
-3197 5111 l
-3204 5095 l
-3211 5080 l
-3218 5065 l
-3225 5049 l
-3233 5034 l
-3239 5018 l
-3246 5003 l
-3253 4988 l
-3260 4972 l
-3267 4957 l
-3274 4941 l
-3280 4926 l
-3287 4910 l
-3294 4895 l
-3300 4879 l
-3307 4864 l
-3313 4848 l
-3320 4833 l
-3326 4817 l
-3332 4802 l
-3339 4786 l
-3345 4771 l
-3351 4755 l
-3357 4739 l
-3364 4724 l
-3370 4708 l
-3376 4693 l
-3382 4677 l
-3388 4661 l
-3393 4646 l
-3399 4630 l
-3405 4614 l
-3411 4599 l
-3417 4583 l
-3422 4567 l
-3428 4552 l
-3433 4536 l
-3439 4521 l
-3444 4505 l
-3450 4489 l
-3455 4474 l
-3461 4458 l
-3466 4442 l
-3471 4427 l
-3476 4411 l
-3481 4395 l
-3487 4380 l
-3492 4364 l
-3497 4348 l
-3502 4333 l
-3506 4317 l
-3511 4301 l
-3516 4286 l
-3521 4270 l
-3526 4254 l
-3530 4239 l
-3535 4223 l
-3540 4208 l
-3544 4192 l
-3549 4176 l
-3553 4161 l
-3557 4145 l
-3562 4130 l
-3566 4114 l
-3570 4098 l
-3574 4083 l
-3579 4067 l
-3583 4052 l
-3587 4036 l
-3591 4021 l
-3595 4005 l
-3599 3990 l
-3603 3974 l
-3606 3959 l
-3610 3943 l
-3614 3928 l
-3618 3912 l
-3621 3897 l
-3625 3882 l
-3628 3866 l
-3632 3851 l
-3635 3836 l
-3639 3820 l
-3642 3805 l
-3645 3790 l
-3649 3774 l
-3652 3759 l
-3655 3744 l
-3658 3728 l
-3661 3713 l
-3664 3698 l
-3667 3683 l
-3670 3668 l
-3673 3653 l
-3676 3637 l
-3679 3622 l
-3682 3607 l
-3684 3592 l
-3687 3577 l
-3690 3562 l
-3692 3547 l
-3695 3532 l
-3697 3517 l
-3700 3502 l
-3702 3487 l
-3705 3472 l
-3707 3457 l
-3709 3443 l
-3711 3428 l
-3714 3413 l
-3716 3398 l
-3718 3383 l
-3720 3369 l
-3722 3354 l
-3724 3339 l
-3726 3325 l
-3728 3310 l
-3730 3295 l
-3731 3281 l
-3733 3266 l
-3735 3252 l
-3737 3237 l
-3738 3223 l
-3740 3208 l
-3741 3194 l
-3743 3180 l
-3744 3165 l
-3746 3151 l
-S
-3746 3151 m
-3747 3137 l
-3749 3122 l
-3750 3108 l
-3751 3094 l
-3752 3080 l
-3754 3065 l
-3755 3051 l
-3756 3037 l
-3757 3023 l
-3758 3009 l
-3759 2995 l
-3760 2981 l
-3761 2967 l
-3762 2953 l
-3763 2940 l
-3763 2926 l
-3764 2912 l
-3765 2898 l
-3765 2884 l
-3766 2871 l
-3767 2857 l
-3767 2843 l
-3768 2830 l
-3768 2816 l
-3769 2803 l
-3769 2789 l
-3770 2776 l
-3770 2762 l
-3770 2749 l
-3771 2736 l
-3771 2722 l
-3771 2709 l
-3771 2696 l
-3771 2682 l
-3771 2669 l
-3772 2656 l
-3772 2643 l
-3772 2630 l
-3772 2617 l
-3771 2604 l
-3771 2591 l
-3771 2578 l
-3771 2565 l
-3771 2552 l
-3771 2539 l
-3770 2527 l
-3770 2514 l
-3770 2501 l
-3769 2488 l
-3769 2476 l
-3769 2463 l
-3768 2451 l
-3768 2438 l
-3767 2426 l
-3766 2413 l
-3766 2401 l
-3765 2389 l
-3765 2376 l
-3764 2364 l
-3763 2352 l
-3762 2339 l
-3762 2327 l
-3761 2315 l
-3760 2303 l
-3759 2291 l
-3758 2279 l
-3757 2267 l
-3756 2255 l
-3756 2243 l
-3755 2231 l
-3753 2220 l
-3752 2208 l
-3751 2196 l
-3750 2184 l
-3749 2173 l
-3748 2161 l
-3747 2150 l
-3745 2138 l
-3744 2127 l
-3743 2115 l
-3742 2104 l
-3740 2092 l
-3739 2081 l
-3738 2070 l
-3736 2058 l
-3735 2047 l
-3733 2036 l
-3732 2025 l
-3730 2014 l
-3729 2003 l
-3727 1992 l
-3726 1981 l
-3724 1970 l
-3722 1959 l
-3721 1948 l
-3719 1937 l
-3717 1927 l
-3716 1916 l
-3714 1905 l
-3712 1895 l
-3710 1884 l
-3709 1874 l
-3707 1863 l
-3705 1853 l
-3703 1842 l
-3701 1832 l
-3699 1821 l
-3697 1811 l
-3695 1801 l
-3693 1791 l
-3691 1780 l
-3691 1777 l
-S
-1826 1777 m
-1793 1806 l
-1747 1847 l
-1702 1889 l
-1657 1933 l
-1612 1979 l
-1567 2026 l
-1523 2075 l
-1478 2125 l
-1434 2177 l
-1389 2230 l
-1345 2285 l
-1301 2341 l
-1258 2398 l
-1214 2456 l
-1171 2515 l
-1128 2576 l
-1085 2637 l
-1042 2700 l
-1000 2763 l
-958 2827 l
-916 2893 l
-875 2959 l
-834 3025 l
-793 3093 l
-752 3161 l
-712 3230 l
-672 3299 l
-633 3369 l
-594 3439 l
-555 3510 l
-543 3532 l
-S
-2210 6121 m
-2215 6114 l
-2222 6106 l
-2228 6099 l
-2235 6091 l
-2241 6083 l
-2248 6076 l
-2254 6068 l
-2261 6060 l
-2267 6052 l
-2273 6044 l
-2280 6036 l
-2286 6029 l
-2293 6021 l
-2299 6013 l
-2305 6005 l
-2312 5997 l
-2318 5989 l
-2324 5981 l
-2331 5973 l
-2337 5965 l
-2343 5957 l
-2349 5948 l
-2356 5940 l
-2362 5932 l
-2368 5924 l
-2375 5916 l
-2381 5908 l
-2387 5899 l
-2393 5891 l
-2399 5883 l
-2406 5874 l
-2412 5866 l
-2418 5858 l
-2424 5849 l
-2430 5841 l
-2436 5833 l
-2442 5824 l
-2449 5816 l
-2455 5807 l
-2461 5799 l
-2467 5790 l
-2473 5782 l
-2479 5773 l
-2485 5764 l
-2491 5756 l
-2497 5747 l
-2503 5739 l
-2509 5730 l
-2515 5721 l
-2521 5713 l
-2527 5704 l
-2533 5695 l
-2539 5686 l
-2545 5678 l
-2550 5669 l
-2556 5660 l
-2562 5651 l
-2568 5642 l
-2574 5633 l
-2580 5625 l
-2586 5616 l
-2591 5607 l
-2597 5598 l
-2603 5589 l
-2609 5580 l
-2614 5571 l
-2620 5562 l
-2626 5553 l
-2631 5544 l
-2637 5535 l
-2643 5526 l
-2648 5517 l
-2654 5508 l
-2660 5498 l
-2665 5489 l
-2671 5480 l
-2676 5471 l
-2682 5462 l
-2687 5453 l
-2693 5443 l
-2698 5434 l
-2704 5425 l
-2709 5416 l
-2715 5406 l
-2720 5397 l
-2725 5388 l
-2731 5378 l
-2736 5369 l
-2742 5360 l
-2747 5350 l
-2752 5341 l
-2757 5332 l
-2763 5322 l
-2768 5313 l
-2773 5303 l
-2778 5294 l
-2784 5284 l
-2789 5275 l
-2794 5265 l
-2799 5256 l
-2804 5246 l
-2809 5237 l
-2814 5227 l
-2820 5218 l
-2825 5208 l
-2830 5199 l
-2835 5189 l
-2840 5179 l
-2845 5170 l
-2850 5160 l
-2854 5151 l
-2859 5141 l
-2864 5131 l
-2869 5122 l
-2874 5112 l
-2879 5102 l
-2884 5093 l
-2888 5083 l
-2893 5073 l
-2898 5063 l
-2903 5054 l
-2907 5044 l
-2912 5034 l
-2917 5024 l
-2921 5015 l
-2926 5005 l
-2931 4995 l
-2935 4985 l
-2940 4976 l
-2944 4966 l
-2949 4956 l
-2953 4946 l
-2958 4936 l
-2962 4926 l
-2967 4917 l
-2971 4907 l
-2976 4897 l
-2980 4887 l
-2984 4877 l
-2989 4867 l
-2993 4857 l
-2997 4847 l
-3001 4838 l
-3006 4828 l
-3010 4818 l
-3014 4808 l
-3018 4798 l
-3022 4788 l
-3027 4778 l
-3031 4768 l
-3035 4758 l
-3039 4748 l
-3043 4738 l
-3047 4728 l
-3051 4718 l
-3055 4708 l
-3059 4698 l
-3063 4688 l
-3067 4678 l
-3071 4669 l
-3074 4659 l
-3078 4649 l
-3082 4639 l
-3086 4629 l
-3090 4619 l
-3093 4609 l
-3097 4599 l
-3101 4589 l
-3104 4579 l
-3108 4569 l
-3112 4559 l
-3115 4549 l
-3119 4539 l
-3123 4529 l
-3126 4519 l
-3130 4509 l
-3133 4499 l
-3137 4489 l
-3140 4479 l
-3143 4469 l
-3147 4459 l
-3150 4449 l
-3153 4439 l
-3157 4429 l
-3160 4419 l
-3163 4409 l
-3167 4399 l
-3170 4389 l
-3173 4379 l
-3176 4369 l
-3179 4359 l
-3183 4349 l
-3186 4339 l
-3189 4329 l
-3192 4319 l
-3195 4309 l
-3198 4299 l
-3201 4289 l
-3204 4279 l
-S
-3204 4279 m
-3207 4269 l
-3210 4259 l
-3213 4249 l
-3216 4239 l
-3218 4229 l
-3221 4219 l
-3224 4209 l
-3227 4199 l
-3230 4189 l
-3232 4180 l
-3235 4170 l
-3238 4160 l
-3240 4150 l
-3243 4140 l
-3246 4130 l
-3248 4120 l
-3251 4110 l
-3253 4100 l
-3256 4091 l
-3258 4081 l
-3261 4071 l
-3263 4061 l
-3266 4051 l
-3268 4041 l
-3270 4031 l
-3273 4022 l
-3275 4012 l
-3277 4002 l
-3280 3992 l
-3282 3982 l
-3284 3973 l
-3286 3963 l
-3289 3953 l
-3291 3943 l
-3293 3934 l
-3295 3924 l
-3297 3914 l
-3299 3904 l
-3301 3895 l
-3303 3885 l
-3305 3875 l
-3307 3866 l
-3309 3856 l
-3311 3846 l
-3313 3837 l
-3315 3827 l
-3317 3817 l
-3319 3808 l
-3320 3798 l
-3322 3788 l
-3324 3779 l
-3326 3769 l
-3328 3760 l
-3329 3750 l
-3331 3741 l
-3333 3731 l
-3334 3722 l
-3336 3712 l
-3337 3702 l
-3339 3693 l
-3340 3684 l
-3342 3674 l
-3343 3665 l
-3345 3655 l
-3346 3646 l
-3348 3636 l
-3349 3627 l
-3351 3618 l
-3352 3608 l
-3353 3599 l
-3355 3589 l
-3356 3580 l
-3357 3571 l
-3358 3561 l
-3360 3552 l
-3361 3543 l
-3362 3534 l
-3363 3524 l
-3364 3515 l
-3365 3506 l
-3367 3497 l
-3368 3488 l
-3369 3478 l
-3370 3469 l
-3371 3460 l
-3372 3451 l
-3373 3442 l
-3374 3433 l
-3375 3424 l
-3375 3415 l
-3376 3405 l
-3377 3396 l
-3378 3387 l
-3379 3378 l
-3380 3369 l
-3380 3360 l
-3381 3351 l
-3382 3342 l
-3383 3334 l
-3383 3325 l
-3384 3316 l
-3385 3307 l
-3385 3298 l
-3386 3289 l
-3386 3280 l
-3387 3272 l
-3387 3263 l
-3388 3254 l
-3389 3245 l
-3389 3236 l
-3389 3228 l
-3390 3219 l
-3390 3210 l
-3391 3202 l
-3391 3193 l
-3391 3184 l
-3392 3176 l
-3392 3167 l
-3392 3159 l
-3393 3150 l
-3393 3141 l
-3393 3133 l
-3393 3124 l
-3394 3116 l
-3394 3107 l
-3394 3099 l
-3394 3091 l
-3394 3082 l
-3394 3074 l
-3394 3065 l
-3394 3057 l
-3395 3049 l
-3395 3040 l
-3395 3032 l
-3395 3024 l
-3395 3016 l
-3394 3007 l
-3394 2999 l
-3394 2991 l
-3394 2983 l
-3394 2975 l
-3394 2966 l
-3394 2958 l
-3394 2950 l
-3393 2942 l
-3393 2934 l
-3393 2926 l
-3393 2918 l
-3393 2910 l
-3392 2902 l
-3392 2894 l
-3392 2886 l
-3391 2878 l
-3391 2870 l
-3391 2862 l
-3390 2855 l
-3390 2847 l
-3389 2839 l
-3389 2831 l
-3388 2823 l
-3388 2816 l
-3387 2808 l
-3387 2800 l
-3386 2793 l
-3386 2785 l
-3385 2777 l
-3385 2770 l
-3384 2762 l
-3384 2754 l
-3383 2747 l
-3382 2739 l
-3382 2732 l
-3381 2724 l
-3380 2717 l
-3380 2709 l
-3379 2702 l
-3378 2695 l
-3377 2687 l
-3377 2680 l
-3376 2672 l
-3375 2665 l
-3374 2658 l
-3373 2651 l
-3373 2643 l
-3372 2636 l
-3371 2629 l
-3370 2622 l
-3369 2615 l
-3368 2607 l
-3367 2600 l
-3366 2593 l
-3365 2586 l
-3364 2579 l
-3363 2572 l
-3362 2565 l
-3361 2558 l
-3360 2551 l
-3359 2544 l
-3358 2537 l
-S
-3358 2537 m
-3357 2530 l
-3356 2523 l
-3355 2517 l
-3354 2510 l
-3352 2503 l
-3351 2496 l
-3350 2489 l
-3349 2483 l
-3348 2476 l
-3347 2469 l
-3345 2463 l
-3344 2456 l
-3343 2449 l
-3342 2443 l
-3340 2436 l
-3339 2430 l
-3338 2423 l
-3336 2417 l
-3335 2410 l
-3334 2404 l
-3332 2397 l
-3331 2391 l
-3330 2384 l
-3328 2378 l
-3327 2372 l
-3325 2365 l
-3324 2359 l
-3322 2353 l
-3321 2347 l
-3319 2340 l
-3318 2334 l
-3316 2328 l
-3315 2322 l
-3313 2316 l
-3312 2310 l
-3310 2303 l
-3309 2297 l
-3307 2291 l
-3306 2285 l
-3304 2279 l
-3302 2273 l
-3301 2267 l
-3299 2261 l
-3298 2256 l
-3296 2250 l
-3294 2244 l
-3293 2238 l
-3291 2232 l
-3289 2226 l
-3287 2221 l
-3286 2215 l
-3284 2209 l
-3282 2203 l
-3281 2198 l
-3279 2192 l
-3277 2187 l
-3275 2181 l
-3273 2175 l
-3272 2170 l
-3270 2164 l
-3268 2159 l
-3266 2153 l
-3264 2148 l
-3262 2142 l
-3261 2137 l
-3259 2132 l
-3257 2126 l
-3255 2121 l
-3253 2116 l
-3251 2110 l
-3249 2105 l
-3247 2100 l
-3245 2094 l
-3243 2089 l
-3241 2084 l
-3239 2079 l
-3237 2074 l
-3235 2069 l
-3233 2064 l
-3231 2059 l
-3229 2053 l
-3227 2048 l
-3225 2043 l
-3223 2038 l
-3221 2034 l
-3219 2029 l
-3217 2024 l
-3215 2019 l
-3213 2014 l
-3211 2009 l
-3208 2004 l
-3206 1999 l
-3204 1995 l
-3202 1990 l
-3200 1985 l
-3198 1981 l
-3196 1976 l
-3193 1971 l
-3191 1967 l
-3189 1962 l
-3187 1957 l
-3185 1953 l
-3182 1948 l
-3180 1944 l
-3178 1939 l
-3176 1935 l
-3173 1930 l
-3171 1926 l
-3169 1922 l
-3167 1917 l
-3164 1913 l
-3162 1908 l
-3160 1904 l
-3157 1900 l
-3155 1896 l
-3153 1891 l
-3150 1887 l
-3148 1883 l
-3146 1879 l
-3143 1875 l
-3141 1870 l
-3139 1866 l
-3136 1862 l
-3134 1858 l
-3131 1854 l
-3129 1850 l
-3127 1846 l
-3124 1842 l
-3122 1838 l
-3119 1834 l
-3117 1830 l
-3114 1827 l
-3112 1823 l
-3110 1819 l
-3107 1815 l
-3105 1811 l
-3102 1807 l
-3100 1804 l
-3097 1800 l
-3095 1796 l
-3092 1793 l
-3090 1789 l
-3087 1785 l
-3085 1782 l
-3082 1778 l
-3082 1777 l
-S
-2296 2538 m
-2295 2538 l
-2295 2538 l
-2295 2538 l
-2293 2538 l
-2290 2538 l
-2258 2546 l
-2226 2555 l
-2193 2565 l
-2160 2578 l
-2126 2593 l
-2093 2609 l
-2060 2627 l
-2026 2647 l
-1992 2668 l
-1958 2691 l
-1925 2715 l
-1891 2741 l
-1857 2769 l
-1823 2798 l
-1789 2828 l
-1755 2859 l
-1721 2892 l
-1687 2926 l
-1654 2962 l
-1620 2998 l
-1587 3036 l
-1554 3074 l
-1520 3114 l
-1487 3155 l
-1455 3197 l
-1422 3239 l
-1390 3283 l
-1357 3327 l
-1325 3372 l
-1294 3418 l
-1262 3465 l
-1231 3512 l
-1200 3560 l
-1170 3609 l
-1140 3658 l
-1110 3708 l
-1080 3759 l
-1051 3809 l
-1022 3861 l
-994 3912 l
-966 3964 l
-939 4017 l
-912 4070 l
-885 4122 l
-859 4176 l
-834 4229 l
-809 4283 l
-784 4336 l
-760 4390 l
-737 4444 l
-714 4498 l
-692 4552 l
-671 4606 l
-650 4659 l
-630 4713 l
-610 4767 l
-592 4820 l
-574 4873 l
-557 4926 l
-543 4969 l
-S
-1633 6121 m
-1679 6086 l
-1733 6042 l
-1787 5995 l
-1841 5945 l
-1895 5893 l
-1949 5839 l
-2003 5782 l
-2056 5722 l
-2109 5660 l
-2161 5596 l
-2212 5530 l
-2262 5461 l
-2311 5391 l
-2359 5319 l
-2405 5245 l
-2450 5170 l
-2494 5093 l
-2536 5015 l
-2576 4936 l
-2614 4857 l
-2650 4776 l
-2685 4695 l
-2717 4614 l
-2747 4532 l
-2775 4450 l
-2801 4369 l
-2825 4288 l
-2846 4207 l
-2866 4127 l
-2883 4048 l
-2897 3970 l
-2910 3893 l
-2920 3818 l
-2929 3743 l
-2935 3671 l
-2939 3600 l
-2941 3531 l
-2941 3463 l
-2939 3398 l
-2936 3335 l
-2930 3274 l
-2923 3215 l
-2914 3159 l
-2904 3104 l
-2892 3053 l
-2878 3003 l
-2863 2956 l
-2847 2912 l
-2829 2870 l
-2811 2830 l
-2791 2793 l
-2770 2759 l
-2748 2727 l
-2724 2697 l
-2701 2670 l
-2676 2645 l
-2650 2623 l
-2624 2604 l
-2597 2586 l
-2569 2571 l
-2540 2559 l
-2511 2548 l
-2482 2540 l
-2452 2535 l
-2421 2531 l
-2391 2529 l
-2359 2530 l
-2328 2533 l
-2296 2538 l
-S
-2149 3569 m
-2149 3569 l
-2149 3569 l
-2149 3569 l
-2148 3569 l
-2147 3569 l
-2130 3570 l
-2114 3571 l
-2096 3573 l
-2079 3577 l
-2062 3581 l
-2044 3587 l
-2026 3594 l
-2008 3601 l
-1990 3610 l
-1971 3619 l
-1953 3629 l
-1934 3641 l
-1915 3653 l
-1897 3666 l
-1878 3680 l
-1859 3695 l
-1840 3710 l
-1821 3726 l
-1802 3744 l
-1783 3761 l
-1764 3780 l
-1745 3799 l
-1726 3819 l
-1708 3840 l
-1689 3861 l
-1670 3883 l
-1652 3906 l
-1633 3929 l
-1615 3952 l
-1597 3976 l
-1579 4001 l
-1562 4026 l
-1544 4052 l
-1527 4078 l
-1510 4104 l
-1493 4131 l
-1476 4158 l
-1460 4186 l
-1444 4213 l
-1428 4242 l
-1413 4270 l
-1397 4299 l
-1383 4327 l
-1368 4356 l
-1354 4385 l
-1340 4415 l
-1326 4444 l
-1313 4474 l
-1301 4503 l
-1288 4533 l
-1276 4563 l
-1265 4592 l
-1254 4622 l
-1243 4651 l
-1233 4681 l
-1224 4710 l
-1215 4739 l
-1206 4768 l
-1198 4797 l
-1190 4826 l
-1183 4854 l
-1176 4883 l
-1170 4910 l
-1165 4938 l
-1160 4965 l
-1156 4992 l
-1152 5019 l
-1149 5045 l
-1146 5071 l
-1144 5096 l
-1143 5121 l
-1142 5145 l
-1142 5169 l
-1143 5192 l
-1144 5215 l
-1146 5237 l
-1148 5258 l
-1151 5279 l
-1155 5299 l
-1160 5318 l
-1165 5337 l
-1171 5355 l
-1178 5372 l
-1185 5388 l
-1193 5404 l
-1201 5419 l
-1211 5432 l
-1220 5445 l
-1231 5458 l
-1242 5469 l
-1254 5479 l
-1267 5488 l
-1280 5496 l
-1294 5504 l
-1309 5510 l
-1324 5515 l
-1340 5519 l
-1356 5523 l
-1373 5525 l
-1390 5526 l
-1408 5525 l
-1427 5524 l
-1446 5522 l
-1466 5518 l
-1486 5513 l
-1506 5508 l
-1527 5501 l
-1549 5492 l
-1571 5483 l
-1593 5473 l
-1615 5461 l
-1638 5448 l
-1661 5434 l
-1684 5419 l
-1708 5403 l
-1731 5385 l
-1755 5367 l
-1779 5347 l
-1803 5326 l
-1826 5304 l
-1850 5282 l
-1874 5258 l
-1898 5233 l
-1921 5207 l
-1945 5180 l
-1968 5153 l
-1991 5124 l
-2014 5095 l
-2036 5065 l
-2058 5034 l
-2079 5002 l
-2101 4970 l
-2121 4937 l
-2141 4904 l
-2161 4870 l
-2180 4835 l
-2199 4800 l
-2216 4765 l
-2234 4729 l
-2250 4694 l
-2266 4657 l
-2281 4621 l
-2295 4585 l
-2309 4549 l
-2322 4512 l
-2334 4476 l
-2345 4440 l
-2355 4404 l
-2365 4368 l
-2373 4333 l
-2381 4298 l
-2388 4263 l
-2394 4229 l
-2400 4195 l
-2404 4162 l
-2408 4129 l
-2410 4097 l
-2412 4066 l
-2413 4035 l
-2414 4005 l
-2413 3976 l
-2412 3948 l
-2410 3920 l
-2407 3894 l
-2403 3868 l
-2399 3844 l
-2393 3820 l
-2388 3797 l
-2381 3775 l
-2374 3755 l
-2366 3735 l
-2357 3716 l
-2348 3699 l
-2338 3682 l
-2328 3667 l
-2317 3653 l
-2306 3640 l
-2294 3628 l
-2281 3617 l
-2268 3607 l
-2255 3599 l
-2241 3591 l
-2227 3585 l
-2212 3579 l
-2197 3575 l
-2181 3572 l
-2166 3570 l
-2149 3569 l
-S
-0 0 1 rg
-543 1777 m
-853 1777 l
-1164 1777 l
-1474 1777 l
-1784 1777 l
-2094 1777 l
-2405 1777 l
-2715 1777 l
-3025 1777 l
-3335 1777 l
-3646 1777 l
-3956 1777 l
-4266 1777 l
-4288 1777 l
-4310 1777 l
-4333 1777 l
-4355 1777 l
-4377 1777 l
-4399 1777 l
-4421 1777 l
-4443 1777 l
-4466 1777 l
-4488 1777 l
-4489 1777 l
-4491 1777 l
-4492 1777 l
-4494 1777 l
-4496 1777 l
-4497 1777 l
-4499 1777 l
-4500 1777 l
-4502 1777 l
-4502 1777 l
-4502 1777 l
-4502 1777 l
-S
-3299 6121 m
-3299 6121 l
-3299 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3297 6121 l
-3296 6121 l
-3294 6121 l
-3293 6121 l
-3291 6121 l
-3269 6121 l
-3247 6121 l
-3225 6121 l
-3202 6121 l
-3180 6121 l
-3158 6121 l
-3136 6121 l
-3114 6121 l
-3092 6121 l
-3069 6121 l
-3047 6121 l
-3025 6121 l
-2715 6121 l
-2405 6121 l
-2094 6121 l
-1784 6121 l
-1474 6121 l
-1164 6121 l
-853 6121 l
-543 6121 l
-S
-543 6121 m
-543 5811 l
-543 5500 l
-543 5190 l
-543 4880 l
-543 4570 l
-543 4259 l
-543 3949 l
-543 3639 l
-543 3329 l
-543 3018 l
-543 2708 l
-543 2398 l
-543 2088 l
-543 1777 l
-S
-4505 1818 m
-4505 1813 l
-4505 1809 l
-4505 1804 l
-4505 1800 l
-4505 1795 l
-4505 1791 l
-4505 1786 l
-4505 1782 l
-4505 1777 l
-S
-4505 1858 m
-4505 1853 l
-4505 1849 l
-4505 1845 l
-4505 1840 l
-4505 1836 l
-4505 1831 l
-4505 1827 l
-4505 1822 l
-4505 1818 l
-S
-4505 1898 m
-4505 1894 l
-4505 1889 l
-4505 1885 l
-4505 1880 l
-4505 1876 l
-4505 1871 l
-4505 1867 l
-4505 1862 l
-4505 1858 l
-S
-4505 1938 m
-4505 1934 l
-4505 1929 l
-4505 1925 l
-4505 1920 l
-4505 1916 l
-4505 1912 l
-4505 1907 l
-4505 1903 l
-4505 1898 l
-S
-4500 1979 m
-4500 1974 l
-4500 1970 l
-4500 1965 l
-4500 1961 l
-4500 1956 l
-4500 1952 l
-4502 1950 l
-4505 1947 l
-4505 1943 l
-4505 1938 l
-S
-4500 2019 m
-4500 2014 l
-4500 2010 l
-4500 2005 l
-4500 2001 l
-4500 1996 l
-4500 1992 l
-4500 1988 l
-4500 1983 l
-4500 1979 l
-S
-4500 2059 m
-4500 2055 l
-4500 2050 l
-4500 2046 l
-4500 2041 l
-4500 2037 l
-4500 2032 l
-4500 2028 l
-4500 2023 l
-4500 2019 l
-S
-4500 2099 m
-4500 2095 l
-4500 2090 l
-4500 2086 l
-4500 2081 l
-4500 2077 l
-4500 2072 l
-4500 2068 l
-4500 2063 l
-4500 2059 l
-S
-4500 2139 m
-4500 2135 l
-4500 2131 l
-4500 2126 l
-4500 2122 l
-4500 2117 l
-4500 2113 l
-4500 2108 l
-4500 2104 l
-4500 2099 l
-S
-4496 2180 m
-4496 2175 l
-4496 2171 l
-4496 2166 l
-4496 2162 l
-4496 2157 l
-4496 2153 l
-4496 2148 l
-4498 2146 l
-4500 2144 l
-4500 2139 l
-S
-4496 2220 m
-4496 2215 l
-4496 2211 l
-4496 2206 l
-4496 2202 l
-4496 2198 l
-4496 2193 l
-4496 2189 l
-4496 2184 l
-4496 2180 l
-S
-4491 2260 m
-4491 2256 l
-4493 2253 l
-4496 2251 l
-4496 2247 l
-4496 2242 l
-4496 2238 l
-4496 2233 l
-4496 2229 l
-4496 2224 l
-4496 2220 l
-S
-4491 2300 m
-4491 2296 l
-4491 2291 l
-4491 2287 l
-4491 2282 l
-4491 2278 l
-4491 2274 l
-4491 2269 l
-4491 2265 l
-4491 2260 l
-S
-4487 2341 m
-4489 2338 l
-4491 2336 l
-4491 2332 l
-4491 2327 l
-4491 2323 l
-4491 2318 l
-4491 2314 l
-4491 2309 l
-4491 2305 l
-4491 2300 l
-S
-4487 2341 m
-4487 2345 l
-4487 2349 l
-4487 2354 l
-4487 2358 l
-4487 2363 l
-4487 2367 l
-4487 2372 l
-4487 2376 l
-4487 2381 l
-S
-4482 2421 m
-4482 2416 l
-4482 2412 l
-4484 2410 l
-S
-4487 2381 m
-4487 2385 l
-4487 2390 l
-4487 2394 l
-4487 2399 l
-4487 2403 l
-4487 2408 l
-4484 2410 l
-S
-4482 2461 m
-4482 2457 l
-4482 2452 l
-4482 2448 l
-4482 2443 l
-4482 2439 l
-4482 2434 l
-4482 2430 l
-4482 2425 l
-4482 2421 l
-S
-4478 2501 m
-4478 2497 l
-4478 2492 l
-4478 2488 l
-4478 2484 l
-4478 2479 l
-4478 2475 l
-4480 2472 l
-4482 2470 l
-4482 2466 l
-4482 2461 l
-S
-4473 2542 m
-4473 2537 l
-4473 2533 l
-4473 2528 l
-4476 2526 l
-4478 2524 l
-4478 2519 l
-4478 2515 l
-4478 2510 l
-4478 2506 l
-4478 2501 l
-S
-4469 2582 m
-4471 2580 l
-4473 2577 l
-4473 2573 l
-4473 2568 l
-4473 2564 l
-4473 2559 l
-4473 2555 l
-4473 2551 l
-4473 2546 l
-4473 2542 l
-S
-4469 2622 m
-4469 2618 l
-4469 2613 l
-4469 2609 l
-4469 2604 l
-4469 2600 l
-4469 2595 l
-4469 2591 l
-4469 2586 l
-4469 2582 l
-S
-4464 2662 m
-4464 2658 l
-4464 2653 l
-4464 2649 l
-4464 2644 l
-4464 2640 l
-4464 2635 l
-4464 2631 l
-4467 2629 l
-4469 2627 l
-4469 2622 l
-S
-4460 2702 m
-4460 2698 l
-4460 2694 l
-4460 2689 l
-4460 2685 l
-4460 2680 l
-4460 2676 l
-4462 2673 l
-4464 2671 l
-4464 2667 l
-4464 2662 l
-S
-4455 2743 m
-4455 2738 l
-4455 2734 l
-4455 2729 l
-4455 2725 l
-4455 2720 l
-4458 2718 l
-4460 2716 l
-4460 2711 l
-4460 2707 l
-4460 2702 l
-S
-4451 2783 m
-4451 2778 l
-4451 2774 l
-4451 2770 l
-4451 2765 l
-4451 2761 l
-4453 2758 l
-4455 2756 l
-4455 2752 l
-4455 2747 l
-4455 2743 l
-S
-4446 2823 m
-4446 2819 l
-4446 2814 l
-4446 2810 l
-4446 2805 l
-4446 2801 l
-4449 2799 l
-4451 2796 l
-4451 2792 l
-4451 2787 l
-4451 2783 l
-S
-4442 2863 m
-4442 2859 l
-4442 2854 l
-4442 2850 l
-4442 2845 l
-4442 2841 l
-4444 2839 l
-S
-4446 2823 m
-4446 2828 l
-4446 2832 l
-4446 2837 l
-4444 2839 l
-S
-4438 2904 m
-4438 2899 l
-4438 2895 l
-4438 2890 l
-4438 2886 l
-4438 2881 l
-4438 2877 l
-4440 2875 l
-4442 2872 l
-4442 2868 l
-4442 2863 l
-S
-4429 2944 m
-4431 2942 l
-4433 2939 l
-4433 2935 l
-4433 2930 l
-4433 2926 l
-4433 2921 l
-4433 2917 l
-4433 2913 l
-4435 2910 l
-4438 2908 l
-4438 2904 l
-S
-4424 2984 m
-4424 2980 l
-4424 2975 l
-4426 2973 l
-4429 2971 l
-4429 2966 l
-4429 2962 l
-4429 2957 l
-4429 2953 l
-4429 2948 l
-4429 2944 l
-S
-4420 3024 m
-4420 3020 l
-4420 3015 l
-4420 3011 l
-4422 3009 l
-4424 3006 l
-4424 3002 l
-4424 2997 l
-4424 2993 l
-4424 2988 l
-4424 2984 l
-S
-4415 3064 m
-4415 3060 l
-4415 3056 l
-4415 3051 l
-4415 3047 l
-4415 3042 l
-4417 3040 l
-4420 3038 l
-4420 3033 l
-4420 3029 l
-4420 3024 l
-S
-4406 3105 m
-4406 3100 l
-4408 3098 l
-4411 3096 l
-4411 3091 l
-4411 3087 l
-4411 3082 l
-4411 3078 l
-4411 3073 l
-4411 3069 l
-4413 3067 l
-4415 3064 l
-S
-4402 3145 m
-4402 3140 l
-4402 3136 l
-4402 3131 l
-4402 3127 l
-4404 3125 l
-S
-4406 3105 m
-4406 3109 l
-4406 3114 l
-4406 3118 l
-4406 3123 l
-4404 3125 l
-S
-4393 3185 m
-4395 3183 l
-4397 3181 l
-4397 3176 l
-4397 3172 l
-4397 3167 l
-4397 3163 l
-4397 3158 l
-4400 3156 l
-4402 3154 l
-4402 3149 l
-4402 3145 l
-S
-4388 3225 m
-4388 3221 l
-4388 3216 l
-4388 3212 l
-4391 3210 l
-4393 3207 l
-4393 3203 l
-4393 3199 l
-4393 3194 l
-4393 3190 l
-4393 3185 l
-S
-4379 3266 m
-4379 3261 l
-4382 3259 l
-4384 3257 l
-4384 3252 l
-4384 3248 l
-4384 3243 l
-4384 3239 l
-4386 3236 l
-4388 3234 l
-4388 3230 l
-4388 3225 l
-S
-4375 3306 m
-4375 3301 l
-4375 3297 l
-4375 3292 l
-4375 3288 l
-4377 3286 l
-4379 3283 l
-4379 3279 l
-4379 3274 l
-4379 3270 l
-4379 3266 l
-S
-4366 3346 m
-4366 3341 l
-4366 3337 l
-4368 3335 l
-4370 3333 l
-4370 3328 l
-4370 3324 l
-4370 3319 l
-4370 3315 l
-4373 3312 l
-4375 3310 l
-4375 3306 l
-S
-4357 3386 m
-4359 3384 l
-4362 3382 l
-4362 3377 l
-4362 3373 l
-4362 3368 l
-4362 3364 l
-4364 3362 l
-S
-4366 3346 m
-4366 3350 l
-4366 3355 l
-4366 3359 l
-4364 3362 l
-S
-4353 3426 m
-4353 3422 l
-4353 3417 l
-4353 3413 l
-4353 3409 l
-4355 3406 l
-4357 3404 l
-4357 3400 l
-4357 3395 l
-4357 3391 l
-4357 3386 l
-S
-4344 3467 m
-4344 3462 l
-4344 3458 l
-4344 3453 l
-4346 3451 l
-4348 3449 l
-4348 3444 l
-4348 3440 l
-4348 3435 l
-4348 3431 l
-4350 3429 l
-4353 3426 l
-S
-4335 3507 m
-4335 3502 l
-4335 3498 l
-4337 3496 l
-4339 3493 l
-4339 3489 l
-4339 3484 l
-4339 3480 l
-4339 3476 l
-4341 3473 l
-4344 3471 l
-4344 3467 l
-S
-4326 3547 m
-4326 3543 l
-4328 3540 l
-4330 3538 l
-4330 3534 l
-4330 3529 l
-4330 3525 l
-4330 3520 l
-4333 3518 l
-4335 3516 l
-4335 3511 l
-4335 3507 l
-S
-4317 3587 m
-4317 3583 l
-4319 3581 l
-4321 3578 l
-4321 3574 l
-4321 3569 l
-4321 3565 l
-4324 3563 l
-S
-4326 3547 m
-4326 3552 l
-4326 3556 l
-4326 3560 l
-4324 3563 l
-S
-4308 3627 m
-4308 3623 l
-4310 3621 l
-4312 3619 l
-4312 3614 l
-4312 3610 l
-4312 3605 l
-4315 3603 l
-4317 3601 l
-4317 3596 l
-4317 3592 l
-4317 3587 l
-S
-4299 3668 m
-4299 3663 l
-4301 3661 l
-4303 3659 l
-4303 3654 l
-4303 3650 l
-4303 3645 l
-4306 3643 l
-4308 3641 l
-4308 3636 l
-4308 3632 l
-4308 3627 l
-S
-4290 3708 m
-4290 3703 l
-4292 3701 l
-4295 3699 l
-4295 3695 l
-4295 3690 l
-4295 3686 l
-4297 3683 l
-4299 3681 l
-4299 3677 l
-4299 3672 l
-4299 3668 l
-S
-4281 3748 m
-4281 3744 l
-4281 3739 l
-4283 3737 l
-S
-4283 3737 m
-4286 3735 l
-4286 3730 l
-4286 3726 l
-4286 3721 l
-4288 3719 l
-4290 3717 l
-4290 3712 l
-4290 3708 l
-S
-4272 3788 m
-4272 3784 l
-4272 3779 l
-4274 3777 l
-4277 3775 l
-4277 3770 l
-4277 3766 l
-4277 3762 l
-4279 3759 l
-4281 3757 l
-4281 3753 l
-4281 3748 l
-S
-4263 3829 m
-4263 3824 l
-4263 3820 l
-4263 3815 l
-4265 3813 l
-4268 3811 l
-4268 3806 l
-4268 3802 l
-4268 3797 l
-4270 3795 l
-4272 3793 l
-4272 3788 l
-S
-4250 3869 m
-4252 3867 l
-4254 3864 l
-4254 3860 l
-4254 3855 l
-4254 3851 l
-4257 3849 l
-4259 3846 l
-4259 3842 l
-4259 3838 l
-4259 3833 l
-4261 3831 l
-4263 3829 l
-S
-4241 3909 m
-4241 3905 l
-4243 3902 l
-S
-4243 3902 m
-4245 3900 l
-4245 3896 l
-4245 3891 l
-4245 3887 l
-4248 3884 l
-4250 3882 l
-4250 3878 l
-4250 3873 l
-4250 3869 l
-S
-4232 3949 m
-4232 3945 l
-4232 3940 l
-4232 3936 l
-4234 3934 l
-4236 3931 l
-4236 3927 l
-4236 3922 l
-4239 3920 l
-4241 3918 l
-4241 3913 l
-4241 3909 l
-S
-4219 3989 m
-4221 3987 l
-4223 3985 l
-4223 3981 l
-4223 3976 l
-4223 3972 l
-4225 3969 l
-4228 3967 l
-4228 3963 l
-4228 3958 l
-4228 3954 l
-4230 3951 l
-4232 3949 l
-S
-4210 4030 m
-4210 4025 l
-4210 4021 l
-4212 4018 l
-4214 4016 l
-4214 4012 l
-4214 4007 l
-4214 4003 l
-4216 4001 l
-4219 3998 l
-4219 3994 l
-4219 3989 l
-S
-4196 4070 m
-4198 4068 l
-4201 4065 l
-4201 4061 l
-4201 4056 l
-4201 4052 l
-4203 4050 l
-S
-4203 4050 m
-4205 4048 l
-4205 4043 l
-4205 4039 l
-4207 4036 l
-4210 4034 l
-4210 4030 l
-S
-4187 4110 m
-4187 4106 l
-4187 4101 l
-4190 4099 l
-4192 4097 l
-4192 4092 l
-4192 4088 l
-4192 4083 l
-4194 4081 l
-4196 4079 l
-4196 4074 l
-4196 4070 l
-S
-4174 4150 m
-4174 4146 l
-4176 4144 l
-4178 4141 l
-4178 4137 l
-4178 4132 l
-4181 4130 l
-4183 4128 l
-4183 4124 l
-4183 4119 l
-4183 4115 l
-4185 4112 l
-4187 4110 l
-S
-4160 4191 m
-4163 4188 l
-S
-4163 4188 m
-4165 4186 l
-4165 4182 l
-4165 4177 l
-4167 4175 l
-4169 4173 l
-4169 4168 l
-4169 4164 l
-4172 4161 l
-4174 4159 l
-4174 4155 l
-4174 4150 l
-S
-4152 4231 m
-4152 4226 l
-4152 4222 l
-4154 4220 l
-4156 4217 l
-4156 4213 l
-4156 4208 l
-4158 4206 l
-4160 4204 l
-4160 4199 l
-4160 4195 l
-4160 4191 l
-S
-4138 4271 m
-4138 4266 l
-4140 4264 l
-4143 4262 l
-4143 4258 l
-4143 4253 l
-4145 4251 l
-4147 4249 l
-4147 4244 l
-4147 4240 l
-4147 4235 l
-4149 4233 l
-4152 4231 l
-S
-4125 4311 m
-4125 4307 l
-4127 4304 l
-4129 4302 l
-4129 4298 l
-4129 4293 l
-4131 4291 l
-4134 4289 l
-4134 4284 l
-4134 4280 l
-4136 4278 l
-4138 4275 l
-4138 4271 l
-S
-4111 4351 m
-4114 4349 l
-4116 4347 l
-4116 4342 l
-4116 4338 l
-4118 4336 l
-4120 4334 l
-4120 4329 l
-4120 4325 l
-4122 4322 l
-S
-4125 4311 m
-4125 4316 l
-4125 4320 l
-4122 4322 l
-S
-4098 4392 m
-4100 4389 l
-4102 4387 l
-4102 4383 l
-4102 4378 l
-4105 4376 l
-4107 4374 l
-4107 4369 l
-4107 4365 l
-4109 4363 l
-4111 4360 l
-4111 4356 l
-4111 4351 l
-S
-4085 4432 m
-4087 4430 l
-4089 4427 l
-4089 4423 l
-4089 4418 l
-4091 4416 l
-4093 4414 l
-4093 4409 l
-4093 4405 l
-4096 4403 l
-4098 4401 l
-4098 4396 l
-4098 4392 l
-S
-4071 4472 m
-4073 4470 l
-4076 4468 l
-4076 4463 l
-4076 4459 l
-4078 4456 l
-4080 4454 l
-4080 4450 l
-4080 4445 l
-4082 4443 l
-S
-4085 4432 m
-4085 4436 l
-4085 4441 l
-4082 4443 l
-S
-4058 4512 m
-4060 4510 l
-4062 4508 l
-4062 4503 l
-4062 4499 l
-4064 4497 l
-4067 4494 l
-4067 4490 l
-4067 4485 l
-4069 4483 l
-4071 4481 l
-4071 4477 l
-4071 4472 l
-S
-4044 4552 m
-4047 4550 l
-4049 4548 l
-4049 4544 l
-4049 4539 l
-4051 4537 l
-4053 4535 l
-4053 4530 l
-4053 4526 l
-4055 4523 l
-4058 4521 l
-4058 4517 l
-4058 4512 l
-S
-4031 4593 m
-4031 4588 l
-4033 4586 l
-4035 4584 l
-4035 4579 l
-4035 4575 l
-4038 4573 l
-4040 4570 l
-4040 4566 l
-4040 4561 l
-4042 4559 l
-S
-4044 4552 m
-4044 4557 l
-4042 4559 l
-S
-4017 4633 m
-4017 4628 l
-4017 4624 l
-4020 4622 l
-4022 4620 l
-4022 4615 l
-4024 4613 l
-4026 4611 l
-4026 4606 l
-4026 4602 l
-4029 4599 l
-4031 4597 l
-4031 4593 l
-S
-4000 4673 m
-4002 4671 l
-S
-4002 4671 m
-4004 4669 l
-4004 4664 l
-4006 4662 l
-4009 4660 l
-4009 4655 l
-4009 4651 l
-4011 4649 l
-4013 4646 l
-4013 4642 l
-4013 4637 l
-4015 4635 l
-4017 4633 l
-S
-3986 4713 m
-3988 4711 l
-3991 4709 l
-3991 4704 l
-3991 4700 l
-3993 4698 l
-3995 4695 l
-3995 4691 l
-3995 4687 l
-3997 4684 l
-4000 4682 l
-4000 4678 l
-4000 4673 l
-S
-3973 4754 m
-3973 4749 l
-3973 4745 l
-3975 4742 l
-3977 4740 l
-3977 4736 l
-3979 4733 l
-3982 4731 l
-3982 4727 l
-3982 4722 l
-3984 4720 l
-3986 4718 l
-3986 4713 l
-S
-3955 4794 m
-3957 4792 l
-3959 4789 l
-3959 4785 l
-3959 4780 l
-3962 4778 l
-S
-3962 4778 m
-3964 4776 l
-3964 4771 l
-3966 4769 l
-3968 4767 l
-3968 4763 l
-3968 4758 l
-3971 4756 l
-3973 4754 l
-S
-3942 4834 m
-3942 4830 l
-3944 4827 l
-3946 4825 l
-3946 4821 l
-3946 4816 l
-3948 4814 l
-3950 4812 l
-3950 4807 l
-3953 4805 l
-3955 4803 l
-3955 4798 l
-3955 4794 l
-S
-3924 4874 m
-3926 4872 l
-3928 4870 l
-3928 4865 l
-3928 4861 l
-3930 4859 l
-3933 4856 l
-3933 4852 l
-3935 4850 l
-3937 4847 l
-3937 4843 l
-3937 4838 l
-3939 4836 l
-3942 4834 l
-S
-3910 4914 m
-3910 4910 l
-3910 4906 l
-3912 4903 l
-3915 4901 l
-3915 4897 l
-3917 4894 l
-3919 4892 l
-3919 4888 l
-3919 4883 l
-3921 4881 l
-S
-3924 4874 m
-3924 4879 l
-3921 4881 l
-S
-3892 4955 m
-3892 4950 l
-3895 4948 l
-3897 4946 l
-3897 4941 l
-3899 4939 l
-3901 4937 l
-3901 4932 l
-3901 4928 l
-3904 4926 l
-3906 4923 l
-3906 4919 l
-3908 4917 l
-3910 4914 l
-S
-3874 4995 m
-3877 4993 l
-3879 4990 l
-3879 4986 l
-3879 4981 l
-3881 4979 l
-S
-3881 4979 m
-3883 4977 l
-3883 4973 l
-3886 4970 l
-3888 4968 l
-3888 4964 l
-3890 4961 l
-3892 4959 l
-3892 4955 l
-S
-3857 5035 m
-3859 5033 l
-3861 5031 l
-3861 5026 l
-3863 5024 l
-3866 5022 l
-3866 5017 l
-3868 5015 l
-3870 5013 l
-3870 5008 l
-3870 5004 l
-3872 5002 l
-3874 4999 l
-3874 4995 l
-S
-3843 5075 m
-3843 5071 l
-3843 5066 l
-3845 5064 l
-3848 5062 l
-3848 5057 l
-3850 5055 l
-3852 5053 l
-3852 5049 l
-3854 5046 l
-3857 5044 l
-3857 5040 l
-3857 5035 l
-S
-3825 5116 m
-3825 5111 l
-3828 5109 l
-3830 5107 l
-3830 5102 l
-3830 5098 l
-3832 5095 l
-3834 5093 l
-3834 5089 l
-3836 5086 l
-3839 5084 l
-3839 5080 l
-3841 5078 l
-S
-3843 5075 m
-3841 5078 l
-S
-3807 5156 m
-3807 5151 l
-3810 5149 l
-3812 5147 l
-3812 5142 l
-3812 5138 l
-3814 5136 l
-3816 5133 l
-3816 5129 l
-3819 5127 l
-3821 5124 l
-3821 5120 l
-3823 5118 l
-3825 5116 l
-S
-3790 5196 m
-3790 5191 l
-3792 5189 l
-3794 5187 l
-3794 5183 l
-3796 5180 l
-3799 5178 l
-3799 5174 l
-3799 5169 l
-3801 5167 l
-S
-3801 5167 m
-3803 5165 l
-3803 5160 l
-3805 5158 l
-3807 5156 l
-S
-3772 5236 m
-3772 5232 l
-3774 5229 l
-3776 5227 l
-3776 5223 l
-3776 5218 l
-3778 5216 l
-3781 5214 l
-3781 5209 l
-3783 5207 l
-3785 5205 l
-3785 5200 l
-3787 5198 l
-3790 5196 l
-S
-3754 5276 m
-3754 5272 l
-3754 5267 l
-3756 5265 l
-3758 5263 l
-3758 5259 l
-3761 5256 l
-S
-3761 5256 m
-3763 5254 l
-3763 5250 l
-3765 5247 l
-3767 5245 l
-3767 5241 l
-3769 5238 l
-3772 5236 l
-S
-3731 5317 m
-3734 5314 l
-3736 5312 l
-3736 5308 l
-3738 5305 l
-3740 5303 l
-3740 5299 l
-3743 5297 l
-3745 5294 l
-3745 5290 l
-3747 5288 l
-3749 5285 l
-3749 5281 l
-3752 5279 l
-3754 5276 l
-S
-3714 5357 m
-3716 5355 l
-3718 5352 l
-3718 5348 l
-3718 5343 l
-3720 5341 l
-S
-3720 5341 m
-3723 5339 l
-3723 5334 l
-3725 5332 l
-3727 5330 l
-3727 5326 l
-3729 5323 l
-3731 5321 l
-3731 5317 l
-S
-3696 5397 m
-3696 5393 l
-3698 5390 l
-3700 5388 l
-3700 5384 l
-3702 5381 l
-3705 5379 l
-3705 5375 l
-3707 5372 l
-3709 5370 l
-3709 5366 l
-3711 5364 l
-3714 5361 l
-3714 5357 l
-S
-3673 5437 m
-3676 5435 l
-3678 5433 l
-3678 5428 l
-3680 5426 l
-S
-3680 5426 m
-3682 5424 l
-3682 5419 l
-3685 5417 l
-3687 5415 l
-3687 5410 l
-3689 5408 l
-3691 5406 l
-3691 5402 l
-3694 5399 l
-3696 5397 l
-S
-3656 5477 m
-3656 5473 l
-3658 5471 l
-3660 5469 l
-3660 5464 l
-3662 5462 l
-3664 5460 l
-3664 5455 l
-3667 5453 l
-3669 5451 l
-3669 5446 l
-3671 5444 l
-3673 5442 l
-3673 5437 l
-S
-3633 5518 m
-3635 5515 l
-3638 5513 l
-3638 5509 l
-3640 5507 l
-S
-3640 5507 m
-3642 5504 l
-3642 5500 l
-3644 5498 l
-3647 5495 l
-3647 5491 l
-3649 5489 l
-3651 5486 l
-3651 5482 l
-3653 5480 l
-3656 5477 l
-S
-3615 5558 m
-3615 5553 l
-3618 5551 l
-3620 5549 l
-3620 5545 l
-3622 5542 l
-3624 5540 l
-3624 5536 l
-3626 5533 l
-3629 5531 l
-3629 5527 l
-3631 5524 l
-3633 5522 l
-3633 5518 l
-S
-3593 5598 m
-3595 5596 l
-3597 5594 l
-3597 5589 l
-3600 5587 l
-S
-3600 5587 m
-3602 5585 l
-3602 5580 l
-3604 5578 l
-3606 5576 l
-3606 5571 l
-3609 5569 l
-3611 5567 l
-3611 5562 l
-3613 5560 l
-3615 5558 l
-S
-3575 5638 m
-3575 5634 l
-3577 5632 l
-3580 5629 l
-3580 5625 l
-3582 5623 l
-3584 5620 l
-3584 5616 l
-3586 5614 l
-3588 5612 l
-3588 5607 l
-3591 5605 l
-3593 5603 l
-3593 5598 l
-S
-3553 5679 m
-3553 5674 l
-3555 5672 l
-3557 5670 l
-3557 5665 l
-3559 5663 l
-S
-3559 5663 m
-3562 5661 l
-3562 5656 l
-3564 5654 l
-3566 5652 l
-3568 5650 l
-3571 5647 l
-3571 5643 l
-3573 5641 l
-3575 5638 l
-S
-3530 5719 m
-3533 5717 l
-3535 5714 l
-3535 5710 l
-3537 5708 l
-3539 5705 l
-3539 5701 l
-3542 5699 l
-3544 5696 l
-3544 5692 l
-3546 5690 l
-3548 5688 l
-3548 5683 l
-3551 5681 l
-3553 5679 l
-S
-3508 5759 m
-3510 5757 l
-3513 5755 l
-3513 5750 l
-3515 5748 l
-3517 5746 l
-3517 5741 l
-3519 5739 l
-S
-3519 5739 m
-3521 5737 l
-3521 5732 l
-3524 5730 l
-3526 5728 l
-3526 5723 l
-3528 5721 l
-3530 5719 l
-S
-3486 5799 m
-3488 5797 l
-3490 5795 l
-3490 5790 l
-3492 5788 l
-3495 5786 l
-3495 5781 l
-3497 5779 l
-3499 5777 l
-3499 5772 l
-3501 5770 l
-3504 5768 l
-3506 5766 l
-3508 5763 l
-3508 5759 l
-S
-3463 5839 m
-3466 5837 l
-3468 5835 l
-3468 5831 l
-3470 5828 l
-3472 5826 l
-3472 5822 l
-3475 5819 l
-3477 5817 l
-3479 5815 l
-S
-3479 5815 m
-3481 5813 l
-3481 5808 l
-3483 5806 l
-3486 5804 l
-3486 5799 l
-S
-3441 5880 m
-3443 5877 l
-3445 5875 l
-3445 5871 l
-3448 5868 l
-3450 5866 l
-3450 5862 l
-3452 5860 l
-3454 5857 l
-3454 5853 l
-3457 5851 l
-3459 5848 l
-3461 5846 l
-3463 5844 l
-3463 5839 l
-S
-3419 5920 m
-3421 5918 l
-3423 5915 l
-3423 5911 l
-3425 5909 l
-3428 5906 l
-3428 5902 l
-3430 5900 l
-3432 5898 l
-3432 5893 l
-3434 5891 l
-3437 5889 l
-3439 5886 l
-S
-3441 5880 m
-3441 5884 l
-3439 5886 l
-S
-3396 5960 m
-3396 5956 l
-3399 5953 l
-S
-3399 5953 m
-3401 5951 l
-3401 5947 l
-3403 5944 l
-3405 5942 l
-3408 5940 l
-3410 5938 l
-3410 5933 l
-3412 5931 l
-3414 5929 l
-3414 5924 l
-3416 5922 l
-3419 5920 l
-S
-3370 6000 m
-3372 5998 l
-3374 5996 l
-3376 5994 l
-3378 5991 l
-3378 5987 l
-3381 5985 l
-3383 5982 l
-3383 5978 l
-3385 5976 l
-3387 5974 l
-3390 5971 l
-3392 5969 l
-3392 5965 l
-3394 5962 l
-3396 5960 l
-S
-3347 6041 m
-3349 6038 l
-3352 6036 l
-3352 6032 l
-3354 6029 l
-3356 6027 l
-3356 6023 l
-3358 6020 l
-S
-3358 6020 m
-3361 6018 l
-3363 6016 l
-3365 6014 l
-3365 6009 l
-3367 6007 l
-3370 6005 l
-3370 6000 l
-S
-3325 6081 m
-3325 6076 l
-3327 6074 l
-3329 6072 l
-3329 6067 l
-3332 6065 l
-3334 6063 l
-3336 6061 l
-3338 6058 l
-3338 6054 l
-3340 6052 l
-3343 6049 l
-3345 6047 l
-3347 6045 l
-3347 6041 l
-S
-3298 6121 m
-3300 6119 l
-3303 6116 l
-3303 6112 l
-3305 6110 l
-3307 6108 l
-3309 6105 l
-3311 6103 l
-3311 6099 l
-3314 6096 l
-3316 6094 l
-3316 6090 l
-3318 6087 l
-S
-3318 6087 m
-3320 6085 l
-3323 6083 l
-3325 6081 l
-S
-1 g
-Y
-2232.6 1612.9 m
-2233 1734 l
-2333 1734 l
-2333 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2279 1717 m
-2266 1713 l
-2258 1701 l
-2253 1680 l
-2253 1667 l
-2258 1646 l
-2266 1634 l
-2279 1630 l
-2287 1630 l
-2299 1634 l
-2308 1646 l
-2312 1667 l
-2312 1680 l
-2308 1701 l
-2299 1713 l
-2287 1717 l
-2279 1717 l
-S
-1 g
-Y
-1873.8 1612.9 m
-1874 1734 l
-1936 1734 l
-1936 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-1895 1701 m
-1903 1705 l
-1916 1717 l
-1916 1630 l
-S
-1 g
-Y
-1382.7 1612.9 m
-1383 1734 l
-1483 1734 l
-1483 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-1408 1696 m
-1408 1701 l
-1412 1709 l
-1416 1713 l
-1424 1717 l
-1441 1717 l
-1450 1713 l
-1454 1709 l
-1458 1701 l
-1458 1692 l
-1454 1684 l
-1445 1671 l
-1404 1630 l
-1462 1630 l
-S
-1 g
-Y
-682.1 1612.9 m
-682 1734 l
-782 1734 l
-782 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-711 1717 m
-757 1717 l
-732 1684 l
-745 1684 l
-753 1680 l
-757 1676 l
-761 1663 l
-761 1655 l
-757 1642 l
-749 1634 l
-736 1630 l
-724 1630 l
-711 1634 l
-707 1638 l
-703 1646 l
-S
-1 g
-Y
-2514.3 1612.9 m
-2514 1734 l
-2698 1734 l
-2698 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2539 1696 m
-2539 1701 l
-2544 1709 l
-2548 1713 l
-2556 1717 l
-2573 1717 l
-2581 1713 l
-2585 1709 l
-2589 1701 l
-2589 1692 l
-2585 1684 l
-2577 1671 l
-2535 1630 l
-2594 1630 l
-S
-2627 1717 m
-2673 1717 l
-2648 1684 l
-2660 1684 l
-2669 1680 l
-2673 1676 l
-2677 1663 l
-2677 1655 l
-2673 1642 l
-2665 1634 l
-2652 1630 l
-2640 1630 l
-2627 1634 l
-2623 1638 l
-2619 1646 l
-S
-1 g
-Y
-2826.8 1612.9 m
-2827 1734 l
-3011 1734 l
-3011 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2852 1696 m
-2852 1701 l
-2856 1709 l
-2860 1713 l
-2869 1717 l
-2885 1717 l
-2894 1713 l
-2898 1709 l
-2902 1701 l
-2902 1692 l
-2898 1684 l
-2889 1671 l
-2848 1630 l
-2906 1630 l
-S
-2935 1696 m
-2935 1701 l
-2940 1709 l
-2944 1713 l
-2952 1717 l
-2969 1717 l
-2977 1713 l
-2981 1709 l
-2985 1701 l
-2985 1692 l
-2981 1684 l
-2973 1671 l
-2931 1630 l
-2990 1630 l
-S
-1 g
-Y
-3158.7 1612.9 m
-3159 1734 l
-3317 1734 l
-3317 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-3184 1696 m
-3184 1701 l
-3188 1709 l
-3192 1713 l
-3200 1717 l
-3217 1717 l
-3226 1713 l
-3230 1709 l
-3234 1701 l
-3234 1692 l
-3230 1684 l
-3221 1671 l
-3180 1630 l
-3238 1630 l
-S
-3276 1701 m
-3284 1705 l
-3297 1717 l
-3297 1630 l
-S
-1 g
-Y
-3539 1612.9 m
-3539 1734 l
-3723 1734 l
-3723 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-3564 1696 m
-3564 1701 l
-3568 1709 l
-3572 1713 l
-3581 1717 l
-3597 1717 l
-3606 1713 l
-3610 1709 l
-3614 1701 l
-3614 1692 l
-3610 1684 l
-3602 1671 l
-3560 1630 l
-3618 1630 l
-S
-3668 1717 m
-3656 1713 l
-3648 1701 l
-3643 1680 l
-3643 1667 l
-3648 1646 l
-3656 1634 l
-3668 1630 l
-3677 1630 l
-3689 1634 l
-3698 1646 l
-3702 1667 l
-3702 1680 l
-3698 1701 l
-3689 1713 l
-3677 1717 l
-3668 1717 l
-S
-1 g
-Y
-3992.1 1612.9 m
-3992 1734 l
-4159 1734 l
-4159 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-4013 1701 m
-4021 1705 l
-4034 1717 l
-4034 1630 l
-S
-4138 1688 m
-4134 1676 l
-4126 1667 l
-4113 1663 l
-4109 1663 l
-4097 1667 l
-4088 1676 l
-4084 1688 l
-4084 1692 l
-4088 1705 l
-4097 1713 l
-4109 1717 l
-4113 1717 l
-4126 1713 l
-4134 1705 l
-4138 1688 l
-4138 1667 l
-4134 1646 l
-4126 1634 l
-4113 1630 l
-4105 1630 l
-4092 1634 l
-4088 1642 l
-S
-1 g
-Y
-4375 1612.9 m
-4375 1734 l
-4546 1734 l
-4546 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-4396 1701 m
-4404 1705 l
-4417 1717 l
-4417 1630 l
-S
-4488 1717 m
-4475 1713 l
-4471 1705 l
-4471 1696 l
-4475 1688 l
-4484 1684 l
-4500 1680 l
-4513 1676 l
-4521 1667 l
-4525 1659 l
-4525 1646 l
-4521 1638 l
-4517 1634 l
-4504 1630 l
-4488 1630 l
-4475 1634 l
-4471 1638 l
-4467 1646 l
-4467 1659 l
-4471 1667 l
-4479 1676 l
-4492 1680 l
-4509 1684 l
-4517 1688 l
-4521 1696 l
-4521 1705 l
-4517 1713 l
-4504 1717 l
-4488 1717 l
-S
-1 g
-Y
-324.3 2215.9 m
-324 2337 l
-508 2337 l
-508 2216 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-395 2320 m
-354 2320 l
-349 2283 l
-354 2287 l
-366 2291 l
-379 2291 l
-391 2287 l
-399 2279 l
-404 2266 l
-404 2258 l
-399 2245 l
-391 2237 l
-379 2233 l
-366 2233 l
-354 2237 l
-349 2241 l
-345 2249 l
-S
-454 2320 m
-441 2316 l
-433 2304 l
-429 2283 l
-429 2270 l
-433 2249 l
-441 2237 l
-454 2233 l
-462 2233 l
-475 2237 l
-483 2249 l
-487 2270 l
-487 2283 l
-483 2304 l
-475 2316 l
-462 2320 l
-454 2320 l
-S
-1 g
-Y
-328.5 3463.3 m
-328 3584 l
-508 3584 l
-508 3463 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-399 3555 m
-395 3564 l
-383 3568 l
-374 3568 l
-362 3564 l
-354 3551 l
-349 3530 l
-349 3509 l
-354 3493 l
-362 3484 l
-374 3480 l
-379 3480 l
-391 3484 l
-399 3493 l
-404 3505 l
-404 3509 l
-399 3522 l
-391 3530 l
-379 3534 l
-374 3534 l
-362 3530 l
-354 3522 l
-349 3509 l
-S
-454 3568 m
-441 3564 l
-433 3551 l
-429 3530 l
-429 3518 l
-433 3497 l
-441 3484 l
-454 3480 l
-462 3480 l
-475 3484 l
-483 3497 l
-487 3518 l
-487 3530 l
-483 3551 l
-475 3564 l
-462 3568 l
-454 3568 l
-S
-1 g
-Y
-324.3 4900 m
-324 5021 l
-508 5021 l
-508 4900 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-404 5004 m
-362 4917 l
-S
-345 5004 m
-404 5004 l
-S
-454 5004 m
-441 5000 l
-433 4988 l
-429 4967 l
-429 4954 l
-433 4933 l
-441 4921 l
-454 4917 l
-462 4917 l
-475 4921 l
-483 4933 l
-487 4954 l
-487 4967 l
-483 4988 l
-475 5000 l
-462 5004 l
-454 5004 l
-S
-1 g
-Y
-2021.5 1398.2 m
-2022 1553 l
-3070 1553 l
-3070 1398 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2042 1532 m
-2042 1444 l
-S
-2042 1532 m
-2080 1532 l
-2093 1528 l
-2097 1524 l
-2101 1515 l
-2101 1507 l
-2097 1498 l
-2093 1494 l
-2080 1490 l
-2042 1490 l
-S
-2072 1490 m
-2101 1444 l
-S
-2126 1532 m
-2130 1528 l
-2134 1532 l
-2130 1536 l
-2126 1532 l
-S
-2130 1503 m
-2130 1444 l
-S
-2209 1503 m
-2209 1436 l
-2205 1423 l
-2201 1419 l
-2193 1415 l
-2180 1415 l
-2172 1419 l
-S
-2209 1490 m
-2201 1498 l
-2193 1503 l
-2180 1503 l
-2172 1498 l
-2164 1490 l
-2159 1478 l
-2159 1469 l
-2164 1457 l
-2172 1448 l
-2180 1444 l
-2193 1444 l
-2201 1448 l
-2209 1457 l
-S
-2243 1532 m
-2243 1444 l
-S
-2243 1486 m
-2255 1498 l
-2264 1503 l
-2276 1503 l
-2285 1498 l
-2289 1486 l
-2289 1444 l
-S
-2326 1532 m
-2326 1461 l
-2331 1448 l
-2339 1444 l
-2347 1444 l
-S
-2314 1503 m
-2343 1503 l
-S
-2485 1503 m
-2485 1444 l
-S
-2485 1490 m
-2477 1498 l
-2468 1503 l
-2456 1503 l
-2448 1498 l
-2439 1490 l
-2435 1478 l
-2435 1469 l
-2439 1457 l
-2448 1448 l
-2456 1444 l
-2468 1444 l
-2477 1448 l
-2485 1457 l
-S
-2560 1490 m
-2556 1498 l
-2544 1503 l
-2531 1503 l
-2519 1498 l
-2514 1490 l
-2519 1482 l
-2527 1478 l
-2548 1473 l
-2556 1469 l
-2560 1461 l
-2560 1457 l
-2556 1448 l
-2544 1444 l
-2531 1444 l
-2519 1448 l
-2514 1457 l
-S
-2636 1490 m
-2627 1498 l
-2619 1503 l
-2606 1503 l
-2598 1498 l
-2590 1490 l
-2585 1478 l
-2585 1469 l
-2590 1457 l
-2598 1448 l
-2606 1444 l
-2619 1444 l
-2627 1448 l
-2636 1457 l
-S
-2661 1478 m
-2711 1478 l
-2711 1486 l
-2707 1494 l
-2702 1498 l
-2694 1503 l
-2681 1503 l
-2673 1498 l
-2665 1490 l
-2661 1478 l
-2661 1469 l
-2665 1457 l
-2673 1448 l
-2681 1444 l
-2694 1444 l
-2702 1448 l
-2711 1457 l
-S
-2740 1503 m
-2740 1444 l
-S
-2740 1486 m
-2752 1498 l
-2761 1503 l
-2773 1503 l
-2782 1498 l
-2786 1486 l
-2786 1444 l
-S
-2861 1490 m
-2857 1498 l
-2844 1503 l
-2832 1503 l
-2819 1498 l
-2815 1490 l
-2819 1482 l
-2828 1478 l
-2849 1473 l
-2857 1469 l
-2861 1461 l
-2861 1457 l
-2857 1448 l
-2844 1444 l
-2832 1444 l
-2819 1448 l
-2815 1457 l
-S
-2886 1532 m
-2890 1528 l
-2894 1532 l
-2890 1536 l
-2886 1532 l
-S
-2890 1503 m
-2890 1444 l
-S
-2940 1503 m
-2932 1498 l
-2924 1490 l
-2920 1478 l
-2920 1469 l
-2924 1457 l
-2932 1448 l
-2940 1444 l
-2953 1444 l
-2961 1448 l
-2970 1457 l
-2974 1469 l
-2974 1478 l
-2970 1490 l
-2961 1498 l
-2953 1503 l
-2940 1503 l
-S
-3003 1503 m
-3003 1444 l
-S
-3003 1486 m
-3016 1498 l
-3024 1503 l
-3036 1503 l
-3045 1498 l
-3049 1486 l
-3049 1444 l
-S
-1 g
-Y
-285 3592.2 m
-160 3592 l
-160 4306 l
-285 4306 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-181 3613 m
-268 3613 l
-S
-181 3613 m
-181 3642 l
-185 3655 l
-193 3663 l
-201 3667 l
-214 3672 l
-235 3672 l
-247 3667 l
-256 3663 l
-264 3655 l
-268 3642 l
-268 3613 l
-S
-235 3697 m
-235 3747 l
-227 3747 l
-218 3743 l
-214 3738 l
-210 3730 l
-210 3718 l
-214 3709 l
-222 3701 l
-235 3697 l
-243 3697 l
-256 3701 l
-264 3709 l
-268 3718 l
-268 3730 l
-264 3738 l
-256 3747 l
-S
-222 3822 m
-214 3814 l
-210 3805 l
-210 3793 l
-214 3784 l
-222 3776 l
-235 3772 l
-243 3772 l
-256 3776 l
-264 3784 l
-268 3793 l
-268 3805 l
-264 3814 l
-256 3822 l
-S
-181 3851 m
-268 3851 l
-S
-181 3880 m
-185 3885 l
-181 3889 l
-176 3885 l
-181 3880 l
-S
-210 3885 m
-268 3885 l
-S
-210 3918 m
-268 3918 l
-S
-227 3918 m
-214 3931 l
-210 3939 l
-210 3951 l
-214 3960 l
-227 3964 l
-268 3964 l
-S
-210 4043 m
-268 4043 l
-S
-222 4043 m
-214 4035 l
-210 4027 l
-210 4014 l
-214 4006 l
-222 3997 l
-235 3993 l
-243 3993 l
-256 3997 l
-264 4006 l
-268 4014 l
-268 4027 l
-264 4035 l
-256 4043 l
-S
-181 4081 m
-252 4081 l
-264 4085 l
-268 4093 l
-268 4102 l
-S
-210 4068 m
-210 4098 l
-S
-181 4123 m
-185 4127 l
-181 4131 l
-176 4127 l
-181 4123 l
-S
-210 4127 m
-268 4127 l
-S
-210 4177 m
-214 4169 l
-222 4160 l
-235 4156 l
-243 4156 l
-256 4160 l
-264 4169 l
-268 4177 l
-268 4189 l
-264 4198 l
-256 4206 l
-243 4210 l
-235 4210 l
-222 4206 l
-214 4198 l
-210 4189 l
-210 4177 l
-S
-210 4240 m
-268 4240 l
-S
-227 4240 m
-214 4252 l
-210 4261 l
-210 4273 l
-214 4281 l
-227 4286 l
-268 4286 l
-S
-1 g
-Y
-924.3 6283 m
-924 6468 l
-4172 6468 l
-4172 6283 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-949 6443 m
-949 6338 l
-S
-949 6443 m
-1015 6443 l
-S
-949 6393 m
-989 6393 l
-S
-1040 6443 m
-1040 6338 l
-S
-1110 6443 m
-1040 6373 l
-S
-1065 6398 m
-1110 6338 l
-S
-1200 6443 m
-1150 6443 l
-1145 6398 l
-1150 6403 l
-1165 6408 l
-1180 6408 l
-1195 6403 l
-1205 6393 l
-1210 6378 l
-1210 6368 l
-1205 6353 l
-1195 6343 l
-1180 6338 l
-1165 6338 l
-1150 6343 l
-1145 6348 l
-1140 6358 l
-S
-1380 6393 m
-1370 6403 l
-1360 6408 l
-1345 6408 l
-1335 6403 l
-1325 6393 l
-1320 6378 l
-1320 6368 l
-1325 6353 l
-1335 6343 l
-1345 6338 l
-1360 6338 l
-1370 6343 l
-1380 6353 l
-S
-1436 6408 m
-1426 6403 l
-1415 6393 l
-1410 6378 l
-1410 6368 l
-1415 6353 l
-1426 6343 l
-1436 6338 l
-1451 6338 l
-1461 6343 l
-1471 6353 l
-1476 6368 l
-1476 6378 l
-1471 6393 l
-1461 6403 l
-1451 6408 l
-1436 6408 l
-S
-1531 6408 m
-1521 6403 l
-1511 6393 l
-1506 6378 l
-1506 6368 l
-1511 6353 l
-1521 6343 l
-1531 6338 l
-1546 6338 l
-1556 6343 l
-1566 6353 l
-1571 6368 l
-1571 6378 l
-1566 6393 l
-1556 6403 l
-1546 6408 l
-1531 6408 l
-S
-1606 6408 m
-1606 6338 l
-S
-1606 6378 m
-1611 6393 l
-1621 6403 l
-1631 6408 l
-1646 6408 l
-S
-1726 6443 m
-1726 6338 l
-S
-1726 6393 m
-1716 6403 l
-1706 6408 l
-1691 6408 l
-1681 6403 l
-1671 6393 l
-1666 6378 l
-1666 6368 l
-1671 6353 l
-1681 6343 l
-1691 6338 l
-1706 6338 l
-1716 6343 l
-1726 6353 l
-S
-1761 6443 m
-1766 6438 l
-1771 6443 l
-1766 6448 l
-1761 6443 l
-S
-1766 6408 m
-1766 6338 l
-S
-1806 6408 m
-1806 6338 l
-S
-1806 6388 m
-1821 6403 l
-1831 6408 l
-1847 6408 l
-1857 6403 l
-1862 6388 l
-1862 6338 l
-S
-1957 6408 m
-1957 6338 l
-S
-1957 6393 m
-1947 6403 l
-1937 6408 l
-1922 6408 l
-1912 6403 l
-1902 6393 l
-1897 6378 l
-1897 6368 l
-1902 6353 l
-1912 6343 l
-1922 6338 l
-1937 6338 l
-1947 6343 l
-1957 6353 l
-S
-2002 6443 m
-2002 6358 l
-2007 6343 l
-2017 6338 l
-2027 6338 l
-S
-1987 6408 m
-2022 6408 l
-S
-2052 6378 m
-2112 6378 l
-2112 6388 l
-2107 6398 l
-2102 6403 l
-2092 6408 l
-2077 6408 l
-2067 6403 l
-2057 6393 l
-2052 6378 l
-2052 6368 l
-2057 6353 l
-2067 6343 l
-2077 6338 l
-2092 6338 l
-2102 6343 l
-2112 6353 l
-S
-2197 6393 m
-2192 6403 l
-2177 6408 l
-2162 6408 l
-2147 6403 l
-2142 6393 l
-2147 6383 l
-2157 6378 l
-2182 6373 l
-2192 6368 l
-2197 6358 l
-2197 6353 l
-2192 6343 l
-2177 6338 l
-2162 6338 l
-2147 6343 l
-2142 6353 l
-S
-2237 6408 m
-2232 6403 l
-2237 6398 l
-2242 6403 l
-2237 6408 l
-S
-2242 6343 m
-2237 6338 l
-2232 6343 l
-2237 6348 l
-2242 6343 l
-2242 6333 l
-2237 6323 l
-2232 6318 l
-S
-2363 6408 m
-2363 6338 l
-S
-2363 6388 m
-2378 6403 l
-2388 6408 l
-2403 6408 l
-2413 6403 l
-2418 6388 l
-2418 6338 l
-S
-2418 6388 m
-2433 6403 l
-2443 6408 l
-2458 6408 l
-2468 6403 l
-2473 6388 l
-2473 6338 l
-S
-2508 6378 m
-2568 6378 l
-2568 6388 l
-2563 6398 l
-2558 6403 l
-2548 6408 l
-2533 6408 l
-2523 6403 l
-2513 6393 l
-2508 6378 l
-2508 6368 l
-2513 6353 l
-2523 6343 l
-2533 6338 l
-2548 6338 l
-2558 6343 l
-2568 6353 l
-S
-2658 6408 m
-2658 6338 l
-S
-2658 6393 m
-2648 6403 l
-2638 6408 l
-2623 6408 l
-2613 6403 l
-2603 6393 l
-2598 6378 l
-2598 6368 l
-2603 6353 l
-2613 6343 l
-2623 6338 l
-2638 6338 l
-2648 6343 l
-2658 6353 l
-S
-2699 6408 m
-2699 6338 l
-S
-2699 6388 m
-2714 6403 l
-2724 6408 l
-2739 6408 l
-2749 6403 l
-2754 6388 l
-2754 6338 l
-S
-2869 6378 m
-2929 6378 l
-2929 6388 l
-2924 6398 l
-2919 6403 l
-2909 6408 l
-2894 6408 l
-2884 6403 l
-2874 6393 l
-2869 6378 l
-2869 6368 l
-2874 6353 l
-2884 6343 l
-2894 6338 l
-2909 6338 l
-2919 6343 l
-2929 6353 l
-S
-3019 6408 m
-3019 6303 l
-S
-3019 6393 m
-3009 6403 l
-2999 6408 l
-2984 6408 l
-2974 6403 l
-2964 6393 l
-2959 6378 l
-2959 6368 l
-2964 6353 l
-2974 6343 l
-2984 6338 l
-2999 6338 l
-3009 6343 l
-3019 6353 l
-S
-3059 6408 m
-3059 6358 l
-3064 6343 l
-3074 6338 l
-3090 6338 l
-3100 6343 l
-3115 6358 l
-S
-3115 6408 m
-3115 6338 l
-S
-3150 6443 m
-3155 6438 l
-3160 6443 l
-3155 6448 l
-3150 6443 l
-S
-3155 6408 m
-3155 6338 l
-S
-3195 6408 m
-3195 6338 l
-S
-3195 6388 m
-3210 6403 l
-3220 6408 l
-3235 6408 l
-3245 6403 l
-3250 6388 l
-3250 6338 l
-S
-3310 6408 m
-3300 6403 l
-3290 6393 l
-3285 6378 l
-3285 6368 l
-3290 6353 l
-3300 6343 l
-3310 6338 l
-3325 6338 l
-3335 6343 l
-3345 6353 l
-3350 6368 l
-3350 6378 l
-3345 6393 l
-3335 6403 l
-3325 6408 l
-3310 6408 l
-S
-3380 6408 m
-3435 6338 l
-S
-3435 6408 m
-3380 6338 l
-S
-3591 6443 m
-3591 6363 l
-3586 6348 l
-3581 6343 l
-3571 6338 l
-3561 6338 l
-3551 6343 l
-3546 6348 l
-3541 6363 l
-3541 6373 l
-S
-3631 6418 m
-3631 6423 l
-3636 6433 l
-3641 6438 l
-3651 6443 l
-3671 6443 l
-3681 6438 l
-3686 6433 l
-3691 6423 l
-3691 6413 l
-3686 6403 l
-3676 6388 l
-3626 6338 l
-3696 6338 l
-S
-3756 6443 m
-3741 6438 l
-3731 6423 l
-3726 6398 l
-3726 6383 l
-3731 6358 l
-3741 6343 l
-3756 6338 l
-3766 6338 l
-3781 6343 l
-3791 6358 l
-3796 6383 l
-3796 6398 l
-3791 6423 l
-3781 6438 l
-3766 6443 l
-3756 6443 l
-S
-3856 6443 m
-3841 6438 l
-3831 6423 l
-3826 6398 l
-3826 6383 l
-3831 6358 l
-3841 6343 l
-3856 6338 l
-3866 6338 l
-3881 6343 l
-3891 6358 l
-3896 6383 l
-3896 6398 l
-3891 6423 l
-3881 6438 l
-3866 6443 l
-3856 6443 l
-S
-3957 6443 m
-3942 6438 l
-3932 6423 l
-3927 6398 l
-3927 6383 l
-3932 6358 l
-3942 6343 l
-3957 6338 l
-3967 6338 l
-3982 6343 l
-3992 6358 l
-3997 6383 l
-3997 6398 l
-3992 6423 l
-3982 6438 l
-3967 6443 l
-3957 6443 l
-S
-4037 6348 m
-4032 6343 l
-4037 6338 l
-4042 6343 l
-4037 6348 l
-S
-4107 6443 m
-4092 6438 l
-4082 6423 l
-4077 6398 l
-4077 6383 l
-4082 6358 l
-4092 6343 l
-4107 6338 l
-4117 6338 l
-4132 6343 l
-4142 6358 l
-4147 6383 l
-4147 6398 l
-4142 6423 l
-4132 6438 l
-4117 6443 l
-4107 6443 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/overgrid_bw.eps b/ast-5.3-1/sun211_figures/overgrid_bw.eps
deleted file mode 100644
index 7046ecb..0000000
--- a/ast-5.3-1/sun211_figures/overgrid_bw.eps
+++ /dev/null
@@ -1,6001 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 15 138 489 648
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1998/06/15 11:01:49
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-543.14 1777.49 4343.48 4343.48 re
-Y
-q[10 0 0 10 0 0]concat
-51 51 8[0.117417 0 0 0.117417 -6.377 -20.871]@85 image
-ai*)CcFL:2^:pAF
-UQ^:nNA^b:+92BA!!!!W='%;#B9T+/eC<sPjPU!ZlH]G0s8W,5Z`_$V`5KC(Z`&\DZZfIX-3/'Jz
-!!$8[Je2a7NO-R\n':4eqWe+1g&M*Ps8TEmY+;N*W3`7oZ]gB4>X8>n!(Hqg$3150!,%:8'k4,4R*!Y'
-jQ,CTn))XJs8W-!s+lkeSZ&<SZ\Xg$I:o)N$9Jt&'`\46zB8CaNK!VeYg!n^4cL9iOeDJdUs8W-!NIlA1LnfQR
-ChurK"Y1,a"Vh";!!!0&"TSOYCk<UX^:CtgeF2\`p#"H[eFikAs8W+iI9^5dB1urC7K<TR5l_Grz
-"TSN&$=[h'I8Pg,Y0#SCcL9iZs7Pj<lMpnas8S:!;*d9*4#SSh!#nTi+=dF'&-)\1!'=7)I@,5&Jsb'@
-lH/,Ep#P2plK[['s8W-!s"Qti.iSHg'`\469KPp;4%<:0!!!a'9MA,b&9<3*Y/J'-cHbM9lIkY!hq@;ps8W-!.gc7V
-z!!!!rEbn3B9O`DM&6F:#Eeo-0Ed+jmaj/ehalMOOlJM'Ug#W25s8W*!zz+@^0P2F1f3
-G at tP^Lja)kW/Z4bNL790\^]odhtlWkcLp8OjT#8[s8N'!z!!#;i at U*/(@WII!W+W8hY'lMENH1T#
-ZcTc=n'p%ZlLjH8qVTffs8W-!rr>,i2?3^W=)<(nJmrPEJs3OOS\Cl;\UC#hI<*HOeCip_cLpJ`p%@DBp#"'ps8W-!
-0kY<=4#%(O;+>"lI<UmBUTV>6^:CduB6&uUS^+CPqUt>jhq@;flK['k`7b1js8W+(Jp1[?Eah+NGAMkT
-I>t#4Z`^X0\[-mI>b/%#\]Naos6A\6hs/n`n*fPplMpnas8T$bJpiVk;/CGs>\o4*NMF4j`3-GrW3_kI
-R%q4+g"Gijn+HA2cK+iejR:d?s8W-!s,DGdR$3nsI<UK`7\bQpR)IL\^<+m8W0=0Y`4itNjQc$kjT#8Kn*93'lH0)+
-s8W-!Z]1?IR'V3WJs1"eLjc5?\[/HQ\\u%]Z^mJte at si:n)X0&lK[I1n)*3`g&M*Ps8W+tSUtmAQrfZR
-UPOo.Y+<+uUV=:\e at El-UTVPgcJS<kjQ-16jT#8VlK[j!s8W-!s8T7)JoZ[!@[!aMR&I@%PI%g1ft#DX
-`3Z"jY--('`8pUPn+u>1p$2SMn(He%s8W-!s-SdiEa4EaW3`XoUQ_(4URfNVlIj[^Y+qAOajf"s^=;W:lLjGqqXrqB
-lL4cQs8W-!USsBDSZ],_ZamE0W0=!_\_5liZam$aUSt-0g!o<Jhs]Y+p##62s8UC5s8W-!s8W+o^;Rsm
-PJkDRaksh=W2$o0cIBeXaj/SXUYj#>n*9c7jOrGep$2SBeDK?es8W-!s8UTZUVt*]cICP.eDJcteDJBi
-hp1]9adp_`hr!MfjR;C,p%n.Gs8)TgalNL%s8W-!s2<F/alLS$cIp^sai)l^eC<!tlK$IEcIC@^lMB31jR;1&qWdAB
-jQ-?ohuE`Vs8W-!^<+[RjQ,CTfu2RsalM@)cK*L#jQ,"Tajf5*lLjW7qX<_GlL3fpg&L-9s8W-!s8W,@
-eEZ>VlJK/0hs]X`e?7KSjM]a/n(HUpg$e"jqWdq<n*frLlK%X7lK&!Fs8W-!s8VBAeFhn`am.R?hpg05
-ZfLT.akuRPhpg`JlJLmllK\'=s8)ERn+tr1g&M*Ps8W-!s4P-3n':de`6RZ:jQb$sn+Gu,g!mb9hrNk`lK&!As7P(<
-n)*U,qVUtks8W-!s8W-!p%@5'htl6`g$dhZs6nIjp!3$`jQ,dun)Wd1ak>tEp#"j'qYK+,n'qC;s8W-!
-s8W,PlK%F,p!hman(I0_lH\;*g%sdjn+GSqhs/_alK[j2p%A"Hs7Q6Rp&G'ls8W-!s8UC5cK`^#hp1-P
-n*f_jhs//5hrOIkp$1i2lMC2HqX=:\p$1i2n,M\&s8W-!s8W-!s52_keDJsEcJRp[eF1]$jNd&OlMC2MjQc4,s8)cq
-p#PT1qX<nAp&G'ls8W-!s8W-!g%FX[hr":[n'ph+ft#5in)Wd&lK\67n(I"+lK[["n*9!&lMp/!n,NFf
-s8W-!s8W,[lI>+Khph>aqZ#jGai*YteC<sPht>mqp##'"jRrB<n+Gu!g&L?es8W-!s8W-!s8V05hs0[`
-n+H/Bn)WBJjOr5OlK\6=p$25Hn*f`+qWdAGs6oXRjOsS5s8W-!s8W-!s6B(+jQc4&s8)Ebn*eBDht?(,qX<,+jPTh!
-lLjH-eFi+qlL3F+p&G'ls8W-!s8W-!n(I0plK[I,qX=+McK+'Tg#))kp%mt=jSJQGlK[HqlK%X<hrNk`
-s8W-!s8W-!s8W,an*g,+qYKLBlMBt`cMHVup$_SHlK[[2lL4E!lLk#Rs6A\AjOsS5s8W-!s8W-!s8Vcl
-jRrQLs8W,qg!nO/p$^T!p%n at Ss5`8;lL4T7hp1-ZlMo/pjT#8[s8W-!s8W-!s6oFAqWdb7n*f`1eC<d*htl71jR;R6
-qWdqMs7Q'Mp&FL\ouZ:ps8W-!s8W-!s8W-!lMpPWs8(FKs6ALklL4E=jRq4+lL4$,qXs^Mp&F=Rp%A1]
-jR<-Ks8W-!s8W-!s8W,qn,N(Wp$_ALs4$N+n)X0<s53\GqYL6gs8)3Fp&F=Gn+HABs8W-!s8W-!s8W-!
-s8VBFs8VQ\s7Q'GlJM(!jPTh!s6An,lL4cLp%n.<n*9rLn)Ws;s8W-!s8W-!s8W-!s4Q]+qYK[RlK%$`p%@D=qXsmL
-aoCYks6B:RqXsm]lK\'BlI>k6s8W-!s8W-!s8W-!lL4TLg%G47lLji8p#PE!n*f06lMp>Gp&FmWp&F^R
-lL3fUs8W-!s8W-!s8W-!s8W,fn+HPMp%n at SjNd5oeGoC<p%@5"n*g;Vp$25HlMp>Ahs17As8W-!s8W-!
-s8W-!s8VQQqVV/1g!9'Tn*g;Vn+u>Ghs0LflK\'Bp&G'glK\'=lMpnas8W-!s8W-!s8W-!s5_l%g$edpqYKm]hr"Ip
-s6p!Kp%mA<p#PT<s6p!fqXs=Ws8W-!s8W-!s8W-!s8W-!g#))fp$2DRp"B3&n+H/Lg&LO0s6oXGs6oXR
-n*g,1p!3U;s8W-!s8W-!s8W-!s8W,qn+Gc7jT"N<n,Mk6jR<-Khs0n7qYKmXp#PfBcMICus8W-!s8W-!
-s8W-!s8W-!s8Vcbht?[Bs6AnGp&F+Ln*fr!qX<M6hs^7,p%@eHhs\M`s8W-!s8W-!s8W-!s8W-!rr~>
-Q
-5.04 w
-1 J
-1 j
-0 g
-2283 1777 m
-2286 1812 l
-2290 1870 l
-2293 1927 l
-2296 1985 l
-2299 2042 l
-2301 2100 l
-2302 2158 l
-2303 2216 l
-2303 2274 l
-2302 2332 l
-2301 2390 l
-2299 2448 l
-2297 2506 l
-2294 2564 l
-2291 2622 l
-2287 2680 l
-2282 2738 l
-2277 2796 l
-2271 2854 l
-2265 2913 l
-2258 2971 l
-2250 3029 l
-2242 3087 l
-2233 3145 l
-2223 3202 l
-2213 3260 l
-2203 3318 l
-2192 3376 l
-2180 3433 l
-2167 3491 l
-2154 3548 l
-2141 3606 l
-2126 3663 l
-2112 3720 l
-2096 3777 l
-2080 3834 l
-2063 3891 l
-2046 3948 l
-2028 4004 l
-2010 4061 l
-1991 4117 l
-1971 4173 l
-1951 4229 l
-1930 4284 l
-1909 4340 l
-1887 4395 l
-1865 4451 l
-1841 4505 l
-1818 4560 l
-1816 4564 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1813 4570 l
-1813 4570 l
-S
-1911 1777 m
-1913 1784 l
-1924 1834 l
-1935 1885 l
-1945 1936 l
-1955 1987 l
-1964 2038 l
-1973 2089 l
-1981 2141 l
-1989 2193 l
-1997 2244 l
-2004 2296 l
-2010 2349 l
-2016 2401 l
-2021 2453 l
-2026 2506 l
-2031 2559 l
-2035 2611 l
-2038 2664 l
-2041 2717 l
-2044 2770 l
-2045 2824 l
-2047 2877 l
-2048 2931 l
-2048 2984 l
-2048 3038 l
-2047 3092 l
-2046 3145 l
-2044 3199 l
-2042 3253 l
-2039 3307 l
-2035 3362 l
-2031 3416 l
-2027 3470 l
-2022 3524 l
-2016 3579 l
-2010 3633 l
-2003 3688 l
-1996 3742 l
-1988 3797 l
-1979 3851 l
-1970 3906 l
-1961 3960 l
-1950 4015 l
-1940 4070 l
-1928 4124 l
-1916 4179 l
-1904 4233 l
-1891 4288 l
-1877 4342 l
-1863 4397 l
-1848 4451 l
-1832 4506 l
-1816 4560 l
-1815 4564 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1813 4570 l
-1813 4570 l
-S
-1433 1777 m
-1446 1809 l
-1464 1851 l
-1482 1893 l
-1499 1935 l
-1516 1978 l
-1532 2020 l
-1549 2063 l
-1564 2106 l
-1580 2149 l
-1595 2193 l
-1610 2236 l
-1624 2280 l
-1638 2324 l
-1651 2368 l
-1665 2413 l
-1677 2457 l
-1690 2502 l
-1702 2547 l
-1714 2592 l
-1725 2637 l
-1736 2682 l
-1746 2728 l
-1756 2773 l
-1766 2819 l
-1775 2865 l
-1784 2911 l
-1793 2958 l
-1801 3004 l
-1808 3051 l
-1816 3097 l
-1822 3144 l
-1829 3191 l
-1835 3239 l
-1840 3286 l
-1845 3333 l
-1850 3381 l
-1854 3429 l
-1857 3477 l
-1861 3525 l
-1863 3573 l
-1866 3621 l
-1867 3670 l
-1869 3718 l
-1870 3767 l
-1870 3816 l
-1870 3865 l
-1869 3914 l
-1868 3963 l
-1866 4012 l
-1864 4062 l
-1862 4111 l
-1859 4161 l
-1855 4210 l
-1851 4260 l
-1846 4310 l
-1841 4360 l
-1835 4410 l
-1829 4460 l
-1822 4511 l
-1815 4561 l
-1814 4565 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-732 1777 m
-733 1778 l
-758 1811 l
-782 1843 l
-807 1876 l
-831 1908 l
-855 1941 l
-878 1974 l
-902 2007 l
-925 2041 l
-948 2074 l
-971 2108 l
-993 2141 l
-1015 2175 l
-1037 2209 l
-1059 2243 l
-1081 2278 l
-1102 2312 l
-1123 2347 l
-1143 2382 l
-1164 2417 l
-1184 2452 l
-1204 2487 l
-1224 2522 l
-1243 2558 l
-1262 2593 l
-1281 2629 l
-1300 2665 l
-1318 2701 l
-1336 2738 l
-1354 2774 l
-1371 2811 l
-1388 2847 l
-1405 2884 l
-1422 2921 l
-1438 2958 l
-1454 2995 l
-1470 3033 l
-1485 3070 l
-1500 3108 l
-1515 3146 l
-1530 3184 l
-1544 3222 l
-1558 3260 l
-1571 3299 l
-1584 3338 l
-1597 3376 l
-1610 3415 l
-1622 3454 l
-1634 3493 l
-1645 3533 l
-1657 3572 l
-1667 3612 l
-1678 3651 l
-1688 3691 l
-1698 3731 l
-1707 3772 l
-1716 3812 l
-1725 3852 l
-1733 3893 l
-1741 3934 l
-1749 3975 l
-1756 4016 l
-1763 4057 l
-1769 4098 l
-1775 4140 l
-1781 4181 l
-1786 4223 l
-1791 4265 l
-1795 4307 l
-1799 4349 l
-1803 4392 l
-1806 4434 l
-1809 4477 l
-1811 4519 l
-1813 4562 l
-1813 4565 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 2622 m
-551 2630 l
-577 2656 l
-602 2682 l
-628 2709 l
-653 2736 l
-678 2762 l
-703 2789 l
-728 2816 l
-753 2843 l
-777 2870 l
-801 2897 l
-825 2925 l
-849 2952 l
-873 2979 l
-896 3007 l
-920 3034 l
-943 3062 l
-966 3090 l
-988 3118 l
-1011 3146 l
-1033 3174 l
-1055 3202 l
-1077 3230 l
-1099 3258 l
-1120 3287 l
-1142 3315 l
-1163 3344 l
-1184 3372 l
-1204 3401 l
-1225 3430 l
-1245 3459 l
-1265 3488 l
-1285 3517 l
-1304 3546 l
-1324 3575 l
-1343 3605 l
-1362 3634 l
-1381 3664 l
-1399 3693 l
-1417 3723 l
-1435 3753 l
-1453 3783 l
-1470 3813 l
-1488 3843 l
-1505 3873 l
-1521 3903 l
-1538 3934 l
-1554 3964 l
-1570 3995 l
-1586 4026 l
-1601 4056 l
-1616 4087 l
-1631 4118 l
-1646 4150 l
-1661 4181 l
-1675 4212 l
-1689 4244 l
-1702 4275 l
-1715 4307 l
-1728 4339 l
-1741 4370 l
-1754 4402 l
-1766 4435 l
-1778 4467 l
-1789 4499 l
-1800 4532 l
-1811 4564 l
-1812 4567 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 3506 m
-561 3518 l
-588 3538 l
-615 3558 l
-642 3577 l
-669 3597 l
-696 3616 l
-723 3636 l
-749 3656 l
-776 3675 l
-802 3695 l
-828 3714 l
-854 3734 l
-880 3754 l
-906 3773 l
-932 3793 l
-957 3813 l
-982 3832 l
-1008 3852 l
-1033 3872 l
-1057 3891 l
-1082 3911 l
-1107 3931 l
-1131 3950 l
-1156 3970 l
-1180 3990 l
-1204 4010 l
-1228 4029 l
-1251 4049 l
-1275 4069 l
-1298 4089 l
-1321 4108 l
-1344 4128 l
-1367 4148 l
-1390 4168 l
-1413 4188 l
-1435 4207 l
-1457 4227 l
-1480 4247 l
-1501 4267 l
-1523 4287 l
-1545 4307 l
-1566 4327 l
-1588 4346 l
-1609 4366 l
-1630 4386 l
-1650 4406 l
-1671 4426 l
-1691 4446 l
-1711 4466 l
-1731 4486 l
-1751 4506 l
-1771 4526 l
-1791 4546 l
-1810 4567 l
-1811 4568 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 4183 m
-554 4186 l
-584 4197 l
-615 4208 l
-645 4219 l
-675 4229 l
-705 4240 l
-735 4250 l
-765 4260 l
-795 4271 l
-825 4281 l
-855 4291 l
-884 4301 l
-914 4311 l
-943 4320 l
-973 4330 l
-1002 4340 l
-1031 4349 l
-1060 4358 l
-1089 4368 l
-1118 4377 l
-1147 4386 l
-1176 4395 l
-1204 4403 l
-1233 4412 l
-1261 4421 l
-1290 4429 l
-1318 4438 l
-1346 4446 l
-1374 4454 l
-1402 4462 l
-1430 4470 l
-1457 4478 l
-1485 4486 l
-1513 4493 l
-1540 4501 l
-1567 4508 l
-1595 4515 l
-1622 4523 l
-1649 4530 l
-1676 4536 l
-1702 4543 l
-1729 4550 l
-1756 4556 l
-1782 4563 l
-1809 4569 l
-1810 4570 l
-1812 4570 l
-1812 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 4696 m
-548 4696 l
-582 4697 l
-617 4698 l
-651 4698 l
-685 4699 l
-719 4699 l
-753 4699 l
-788 4698 l
-822 4698 l
-855 4697 l
-889 4696 l
-923 4695 l
-957 4693 l
-990 4692 l
-1024 4690 l
-1058 4688 l
-1091 4685 l
-1124 4683 l
-1158 4680 l
-1191 4677 l
-1224 4674 l
-1257 4670 l
-1290 4666 l
-1323 4663 l
-1356 4658 l
-1389 4654 l
-1421 4649 l
-1454 4644 l
-1487 4639 l
-1519 4633 l
-1551 4628 l
-1584 4622 l
-1616 4615 l
-1648 4609 l
-1680 4602 l
-1712 4595 l
-1744 4587 l
-1776 4580 l
-1808 4572 l
-1810 4571 l
-1812 4571 l
-1812 4570 l
-1812 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 5102 m
-557 5098 l
-596 5089 l
-634 5079 l
-672 5068 l
-710 5058 l
-748 5047 l
-786 5035 l
-823 5024 l
-861 5012 l
-899 4999 l
-936 4987 l
-974 4974 l
-1011 4960 l
-1048 4947 l
-1085 4933 l
-1122 4918 l
-1159 4904 l
-1196 4889 l
-1233 4873 l
-1270 4857 l
-1306 4841 l
-1343 4825 l
-1379 4808 l
-1416 4790 l
-1452 4773 l
-1488 4755 l
-1524 4736 l
-1560 4717 l
-1595 4698 l
-1631 4678 l
-1666 4658 l
-1702 4638 l
-1737 4617 l
-1772 4596 l
-1807 4574 l
-1809 4573 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 5444 m
-564 5435 l
-605 5414 l
-646 5394 l
-687 5373 l
-728 5352 l
-769 5330 l
-810 5308 l
-850 5285 l
-890 5262 l
-931 5239 l
-971 5215 l
-1011 5191 l
-1050 5166 l
-1090 5141 l
-1129 5115 l
-1169 5089 l
-1208 5063 l
-1247 5036 l
-1285 5008 l
-1324 4981 l
-1362 4952 l
-1400 4923 l
-1438 4894 l
-1476 4865 l
-1514 4834 l
-1551 4804 l
-1588 4773 l
-1625 4741 l
-1662 4709 l
-1699 4677 l
-1735 4644 l
-1771 4610 l
-1807 4576 l
-1809 4574 l
-1812 4572 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-S
-543 5757 m
-554 5749 l
-597 5720 l
-640 5690 l
-683 5660 l
-726 5629 l
-768 5598 l
-810 5567 l
-852 5535 l
-893 5502 l
-935 5469 l
-976 5435 l
-1017 5401 l
-1057 5367 l
-1098 5332 l
-1138 5297 l
-1178 5261 l
-1217 5224 l
-1256 5187 l
-1295 5150 l
-1334 5112 l
-1372 5074 l
-1410 5035 l
-1448 4996 l
-1486 4956 l
-1523 4916 l
-1559 4876 l
-1596 4835 l
-1632 4793 l
-1668 4751 l
-1703 4709 l
-1738 4666 l
-1773 4622 l
-1807 4578 l
-1810 4575 l
-1812 4572 l
-1812 4572 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-543 6064 m
-569 6042 l
-613 6005 l
-656 5967 l
-700 5929 l
-742 5890 l
-785 5851 l
-827 5812 l
-868 5772 l
-910 5731 l
-951 5691 l
-991 5649 l
-1031 5607 l
-1071 5565 l
-1110 5522 l
-1149 5479 l
-1188 5436 l
-1226 5392 l
-1264 5347 l
-1301 5302 l
-1338 5257 l
-1375 5211 l
-1411 5165 l
-1446 5118 l
-1482 5071 l
-1516 5024 l
-1551 4976 l
-1584 4928 l
-1618 4879 l
-1651 4830 l
-1683 4781 l
-1715 4731 l
-1746 4681 l
-1777 4630 l
-1808 4579 l
-1810 4576 l
-1812 4572 l
-1812 4572 l
-1812 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-804 6121 m
-831 6091 l
-871 6046 l
-911 6000 l
-950 5954 l
-989 5907 l
-1027 5860 l
-1065 5813 l
-1102 5765 l
-1139 5717 l
-1175 5669 l
-1211 5620 l
-1246 5571 l
-1280 5521 l
-1315 5471 l
-1348 5421 l
-1381 5371 l
-1414 5320 l
-1445 5269 l
-1477 5218 l
-1508 5166 l
-1538 5114 l
-1567 5062 l
-1597 5009 l
-1625 4957 l
-1653 4903 l
-1681 4850 l
-1707 4797 l
-1734 4743 l
-1759 4689 l
-1784 4635 l
-1809 4580 l
-1811 4576 l
-1812 4572 l
-1812 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1061 6121 m
-1070 6107 l
-1104 6057 l
-1138 6007 l
-1171 5956 l
-1203 5905 l
-1235 5854 l
-1266 5803 l
-1297 5751 l
-1327 5700 l
-1356 5648 l
-1384 5596 l
-1412 5544 l
-1440 5491 l
-1467 5439 l
-1493 5386 l
-1518 5333 l
-1543 5280 l
-1567 5227 l
-1591 5173 l
-1614 5120 l
-1636 5066 l
-1658 5013 l
-1679 4959 l
-1700 4905 l
-1720 4851 l
-1739 4797 l
-1758 4743 l
-1776 4689 l
-1793 4634 l
-1810 4580 l
-1811 4576 l
-1813 4572 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1301 6121 m
-1308 6108 l
-1334 6057 l
-1360 6006 l
-1384 5955 l
-1408 5904 l
-1432 5853 l
-1455 5802 l
-1477 5751 l
-1498 5700 l
-1519 5649 l
-1539 5598 l
-1558 5547 l
-1577 5495 l
-1595 5444 l
-1613 5393 l
-1630 5342 l
-1646 5291 l
-1662 5240 l
-1677 5189 l
-1691 5138 l
-1705 5087 l
-1718 5036 l
-1731 4985 l
-1743 4934 l
-1755 4883 l
-1766 4832 l
-1776 4782 l
-1786 4731 l
-1795 4680 l
-1804 4630 l
-1812 4579 l
-1812 4576 l
-1813 4572 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1567 6121 m
-1568 6117 l
-1585 6070 l
-1601 6023 l
-1617 5976 l
-1632 5929 l
-1646 5882 l
-1659 5835 l
-1672 5789 l
-1685 5742 l
-1697 5696 l
-1708 5650 l
-1718 5603 l
-1728 5557 l
-1738 5512 l
-1747 5466 l
-1755 5420 l
-1763 5375 l
-1770 5329 l
-1776 5284 l
-1783 5239 l
-1788 5194 l
-1793 5149 l
-1798 5104 l
-1802 5060 l
-1805 5015 l
-1808 4971 l
-1811 4927 l
-1813 4883 l
-1814 4839 l
-1815 4795 l
-1816 4751 l
-1816 4708 l
-1816 4664 l
-1815 4621 l
-1814 4578 l
-1813 4575 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1922 6121 m
-1923 6116 l
-1930 6076 l
-1937 6037 l
-1943 5998 l
-1949 5959 l
-1954 5921 l
-1958 5882 l
-1962 5844 l
-1966 5806 l
-1969 5768 l
-1971 5730 l
-1973 5693 l
-1975 5655 l
-1976 5618 l
-1976 5581 l
-1976 5544 l
-1976 5508 l
-1975 5471 l
-1974 5435 l
-1972 5399 l
-1970 5363 l
-1967 5327 l
-1964 5292 l
-1961 5256 l
-1957 5221 l
-1953 5186 l
-1948 5150 l
-1943 5116 l
-1938 5081 l
-1932 5046 l
-1926 5012 l
-1920 4978 l
-1913 4943 l
-1906 4909 l
-1898 4875 l
-1890 4842 l
-1882 4808 l
-1874 4774 l
-1865 4741 l
-1855 4708 l
-1846 4675 l
-1836 4642 l
-1826 4609 l
-1815 4576 l
-1814 4574 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-S
-2562 6121 m
-2562 6116 l
-2562 6089 l
-2562 6062 l
-2562 6035 l
-2561 6009 l
-2560 5983 l
-2558 5957 l
-2556 5931 l
-2553 5906 l
-2550 5880 l
-2546 5855 l
-2543 5830 l
-2538 5806 l
-2534 5781 l
-2529 5757 l
-2523 5733 l
-2517 5709 l
-2511 5685 l
-2505 5661 l
-2498 5638 l
-2491 5615 l
-2483 5591 l
-2476 5568 l
-2468 5545 l
-2459 5523 l
-2451 5500 l
-2442 5477 l
-2432 5455 l
-2423 5432 l
-2413 5410 l
-2403 5388 l
-2392 5366 l
-2381 5344 l
-2370 5322 l
-2359 5300 l
-2348 5279 l
-2336 5257 l
-2324 5236 l
-2311 5214 l
-2299 5193 l
-2286 5171 l
-2273 5150 l
-2260 5129 l
-2246 5108 l
-2232 5087 l
-2218 5066 l
-2204 5045 l
-2190 5024 l
-2175 5003 l
-2160 4982 l
-2145 4961 l
-2129 4941 l
-2114 4920 l
-2098 4899 l
-2082 4879 l
-2066 4858 l
-2049 4838 l
-2033 4817 l
-2016 4797 l
-1999 4776 l
-1981 4756 l
-1964 4736 l
-1946 4715 l
-1928 4695 l
-1910 4675 l
-1892 4655 l
-1873 4634 l
-1855 4614 l
-1836 4594 l
-1817 4574 l
-1815 4572 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4570 l
-1813 4570 l
-1813 4570 l
-S
-4454 1777 m
-4454 1785 l
-4454 1798 l
-4454 1810 l
-4454 1822 l
-4453 1834 l
-4453 1847 l
-4453 1859 l
-4453 1871 l
-4452 1882 l
-4452 1894 l
-4452 1906 l
-4451 1918 l
-4451 1929 l
-4451 1941 l
-4450 1952 l
-4450 1964 l
-4449 1975 l
-4449 1986 l
-4448 1998 l
-4448 2009 l
-4447 2020 l
-4447 2031 l
-4446 2042 l
-4446 2053 l
-4445 2064 l
-4445 2075 l
-4444 2086 l
-4443 2096 l
-4443 2107 l
-4442 2118 l
-4442 2128 l
-4441 2139 l
-4440 2149 l
-4440 2159 l
-4439 2170 l
-4428 2309 l
-4415 2438 l
-4401 2558 l
-4385 2670 l
-4369 2775 l
-4352 2874 l
-4334 2966 l
-4316 3052 l
-4297 3134 l
-4278 3210 l
-4259 3283 l
-4240 3351 l
-4221 3416 l
-4201 3477 l
-4182 3534 l
-4163 3589 l
-4143 3641 l
-4124 3691 l
-4105 3738 l
-4085 3783 l
-4066 3825 l
-4047 3866 l
-4028 3905 l
-4009 3942 l
-3990 3977 l
-3971 4011 l
-3952 4043 l
-3933 4074 l
-3914 4104 l
-3895 4132 l
-3876 4159 l
-3858 4185 l
-3839 4210 l
-3820 4234 l
-3801 4257 l
-3783 4279 l
-3764 4300 l
-3745 4320 l
-3726 4340 l
-3708 4358 l
-3689 4376 l
-3670 4393 l
-3651 4410 l
-3633 4425 l
-3614 4441 l
-3595 4455 l
-3576 4469 l
-3557 4482 l
-3538 4495 l
-3519 4507 l
-3500 4519 l
-3481 4531 l
-3462 4541 l
-3442 4552 l
-3423 4561 l
-3404 4571 l
-3384 4580 l
-3365 4589 l
-3345 4597 l
-3325 4605 l
-3306 4612 l
-3286 4619 l
-3266 4626 l
-3246 4632 l
-3226 4638 l
-3206 4644 l
-3186 4649 l
-3165 4654 l
-3145 4659 l
-3125 4663 l
-3104 4668 l
-3083 4671 l
-3063 4675 l
-3042 4678 l
-3021 4681 l
-3000 4684 l
-2979 4687 l
-2958 4689 l
-2936 4691 l
-2915 4693 l
-2894 4694 l
-2872 4696 l
-2850 4697 l
-2828 4698 l
-2807 4698 l
-2785 4699 l
-2762 4699 l
-2740 4699 l
-2718 4699 l
-2696 4699 l
-2673 4698 l
-2650 4697 l
-2628 4696 l
-2605 4695 l
-2582 4694 l
-2559 4692 l
-2536 4690 l
-2513 4689 l
-2489 4686 l
-2466 4684 l
-2442 4682 l
-2418 4679 l
-2395 4676 l
-2371 4674 l
-2347 4670 l
-2323 4667 l
-2298 4664 l
-2274 4660 l
-2250 4657 l
-2225 4653 l
-2201 4649 l
-2176 4644 l
-2151 4640 l
-2126 4636 l
-2101 4631 l
-2076 4626 l
-2050 4621 l
-2025 4616 l
-2000 4611 l
-1974 4606 l
-1948 4601 l
-1922 4595 l
-1896 4589 l
-1870 4583 l
-1844 4577 l
-1818 4571 l
-1816 4571 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-4071 1777 m
-4067 1810 l
-4057 1881 l
-4046 1950 l
-4034 2018 l
-4021 2084 l
-4007 2148 l
-3993 2211 l
-3979 2273 l
-3963 2333 l
-3947 2392 l
-3931 2450 l
-3914 2506 l
-3897 2561 l
-3879 2615 l
-3860 2667 l
-3842 2719 l
-3822 2769 l
-3803 2818 l
-3783 2866 l
-3762 2913 l
-3742 2959 l
-3721 3004 l
-3699 3048 l
-3678 3091 l
-3656 3134 l
-3633 3175 l
-3611 3215 l
-3588 3255 l
-3565 3293 l
-3542 3331 l
-3518 3368 l
-3494 3404 l
-3470 3440 l
-3446 3474 l
-3421 3508 l
-3397 3541 l
-3372 3574 l
-3347 3606 l
-3321 3637 l
-3296 3667 l
-3270 3697 l
-3245 3726 l
-3219 3754 l
-3192 3782 l
-3166 3810 l
-3140 3836 l
-3113 3863 l
-3086 3888 l
-3059 3913 l
-3032 3938 l
-3005 3962 l
-2978 3985 l
-2950 4008 l
-2922 4030 l
-2895 4052 l
-2867 4074 l
-2839 4094 l
-2811 4115 l
-2782 4135 l
-2754 4154 l
-2725 4174 l
-2697 4192 l
-2668 4210 l
-2639 4228 l
-2610 4246 l
-2581 4263 l
-2552 4279 l
-2522 4295 l
-2493 4311 l
-2463 4326 l
-2433 4341 l
-2404 4356 l
-2374 4370 l
-2344 4384 l
-2314 4398 l
-2283 4411 l
-2253 4424 l
-2223 4436 l
-2192 4448 l
-2162 4460 l
-2131 4472 l
-2100 4483 l
-2069 4493 l
-2038 4504 l
-2007 4514 l
-1976 4524 l
-1945 4534 l
-1914 4543 l
-1882 4552 l
-1851 4560 l
-1819 4569 l
-1817 4569 l
-1815 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-3631 1777 m
-3622 1824 l
-3610 1887 l
-3597 1950 l
-3583 2011 l
-3568 2072 l
-3553 2132 l
-3537 2191 l
-3521 2249 l
-3504 2307 l
-3486 2363 l
-3468 2419 l
-3450 2474 l
-3431 2528 l
-3411 2582 l
-3391 2635 l
-3370 2687 l
-3349 2738 l
-3328 2789 l
-3306 2839 l
-3283 2888 l
-3260 2936 l
-3237 2984 l
-3213 3031 l
-3189 3078 l
-3165 3123 l
-3140 3168 l
-3115 3213 l
-3089 3256 l
-3063 3300 l
-3037 3342 l
-3010 3384 l
-2984 3425 l
-2956 3466 l
-2929 3506 l
-2901 3545 l
-2873 3584 l
-2845 3622 l
-2816 3659 l
-2787 3696 l
-2758 3733 l
-2728 3769 l
-2699 3804 l
-2669 3839 l
-2639 3873 l
-2608 3907 l
-2578 3940 l
-2547 3972 l
-2516 4004 l
-2484 4036 l
-2453 4067 l
-2421 4098 l
-2389 4128 l
-2357 4157 l
-2325 4186 l
-2292 4215 l
-2260 4243 l
-2227 4270 l
-2194 4298 l
-2160 4324 l
-2127 4350 l
-2094 4376 l
-2060 4401 l
-2026 4426 l
-1992 4451 l
-1958 4475 l
-1923 4498 l
-1889 4521 l
-1854 4544 l
-1820 4566 l
-1817 4568 l
-1815 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-3251 1777 m
-3241 1834 l
-3230 1898 l
-3218 1960 l
-3205 2023 l
-3192 2084 l
-3178 2146 l
-3164 2206 l
-3149 2266 l
-3133 2326 l
-3116 2385 l
-3099 2444 l
-3082 2502 l
-3063 2559 l
-3045 2616 l
-3025 2673 l
-3005 2728 l
-2985 2784 l
-2964 2839 l
-2942 2893 l
-2920 2947 l
-2898 3000 l
-2875 3052 l
-2851 3105 l
-2827 3156 l
-2803 3207 l
-2778 3258 l
-2753 3308 l
-2727 3357 l
-2700 3406 l
-2674 3454 l
-2647 3502 l
-2619 3549 l
-2591 3596 l
-2563 3642 l
-2534 3688 l
-2505 3733 l
-2476 3778 l
-2446 3822 l
-2416 3866 l
-2386 3909 l
-2355 3951 l
-2324 3993 l
-2292 4035 l
-2260 4076 l
-2228 4117 l
-2196 4157 l
-2163 4196 l
-2130 4235 l
-2096 4274 l
-2063 4312 l
-2029 4349 l
-1995 4386 l
-1960 4423 l
-1926 4459 l
-1891 4494 l
-1855 4529 l
-1820 4564 l
-1817 4566 l
-1815 4569 l
-1815 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2919 1777 m
-2914 1822 l
-2907 1885 l
-2898 1949 l
-2890 2012 l
-2880 2074 l
-2870 2137 l
-2859 2199 l
-2848 2261 l
-2836 2322 l
-2823 2383 l
-2809 2444 l
-2795 2505 l
-2781 2565 l
-2765 2625 l
-2749 2685 l
-2733 2744 l
-2715 2803 l
-2698 2861 l
-2679 2919 l
-2660 2977 l
-2641 3034 l
-2621 3091 l
-2600 3148 l
-2579 3204 l
-2557 3260 l
-2535 3315 l
-2512 3370 l
-2489 3425 l
-2465 3479 l
-2440 3533 l
-2415 3586 l
-2390 3639 l
-2364 3692 l
-2338 3744 l
-2311 3795 l
-2283 3847 l
-2255 3898 l
-2227 3948 l
-2198 3998 l
-2169 4047 l
-2139 4096 l
-2109 4145 l
-2079 4193 l
-2048 4241 l
-2016 4288 l
-1985 4335 l
-1952 4381 l
-1920 4427 l
-1887 4473 l
-1853 4518 l
-1819 4562 l
-1817 4565 l
-1815 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2606 1777 m
-2606 1788 l
-2604 1850 l
-2602 1912 l
-2599 1973 l
-2595 2035 l
-2590 2096 l
-2585 2158 l
-2579 2219 l
-2573 2280 l
-2566 2341 l
-2558 2402 l
-2550 2463 l
-2541 2524 l
-2531 2584 l
-2521 2645 l
-2510 2705 l
-2499 2765 l
-2487 2825 l
-2474 2885 l
-2461 2944 l
-2447 3004 l
-2432 3063 l
-2417 3122 l
-2401 3181 l
-2385 3239 l
-2367 3297 l
-2350 3355 l
-2332 3413 l
-2313 3471 l
-2293 3528 l
-2273 3585 l
-2253 3642 l
-2232 3698 l
-2210 3755 l
-2188 3810 l
-2165 3866 l
-2142 3922 l
-2118 3977 l
-2093 4031 l
-2068 4086 l
-2042 4140 l
-2016 4194 l
-1990 4247 l
-1963 4300 l
-1935 4353 l
-1907 4406 l
-1878 4458 l
-1849 4509 l
-1819 4561 l
-1817 4565 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2890 6121 m
-2892 6118 l
-2906 6096 l
-2920 6075 l
-2934 6054 l
-2948 6032 l
-2962 6011 l
-2976 5989 l
-2990 5968 l
-3003 5946 l
-3017 5924 l
-3031 5902 l
-3044 5880 l
-3058 5858 l
-3071 5836 l
-3084 5814 l
-3097 5792 l
-3111 5770 l
-3124 5748 l
-3137 5725 l
-3150 5703 l
-3162 5681 l
-3175 5658 l
-3188 5635 l
-3200 5613 l
-3213 5590 l
-3225 5567 l
-3238 5545 l
-3250 5522 l
-3262 5499 l
-3274 5476 l
-3286 5453 l
-3298 5430 l
-3310 5407 l
-3322 5384 l
-3334 5360 l
-3345 5337 l
-3357 5314 l
-3368 5291 l
-3380 5267 l
-3391 5244 l
-3402 5220 l
-3413 5197 l
-3424 5173 l
-3435 5150 l
-3446 5126 l
-3457 5103 l
-3468 5079 l
-3478 5055 l
-3489 5032 l
-3499 5008 l
-3509 4984 l
-3519 4961 l
-3530 4937 l
-3540 4913 l
-3549 4889 l
-3559 4865 l
-3569 4841 l
-3579 4817 l
-3588 4793 l
-3598 4769 l
-3607 4745 l
-3616 4721 l
-3625 4697 l
-3634 4673 l
-3643 4649 l
-3652 4625 l
-3661 4601 l
-3670 4577 l
-3678 4553 l
-3687 4529 l
-3695 4505 l
-3704 4481 l
-3712 4457 l
-3720 4433 l
-3728 4409 l
-3736 4385 l
-3744 4361 l
-3751 4337 l
-3759 4312 l
-3766 4288 l
-3774 4264 l
-3781 4240 l
-3788 4216 l
-3796 4192 l
-3803 4168 l
-3810 4144 l
-3816 4120 l
-3823 4096 l
-3830 4072 l
-3836 4048 l
-3843 4024 l
-3849 4000 l
-3855 3976 l
-3861 3953 l
-3868 3929 l
-3874 3905 l
-3879 3881 l
-3885 3857 l
-3891 3833 l
-3896 3810 l
-3902 3786 l
-3907 3762 l
-3913 3738 l
-3918 3715 l
-3923 3691 l
-3928 3668 l
-3933 3644 l
-3938 3621 l
-3942 3597 l
-3947 3574 l
-3952 3550 l
-3956 3527 l
-3960 3504 l
-3965 3480 l
-3969 3457 l
-3973 3434 l
-3977 3411 l
-3981 3387 l
-3985 3364 l
-3989 3341 l
-3992 3318 l
-3996 3295 l
-3999 3272 l
-4003 3249 l
-4006 3227 l
-4009 3204 l
-4012 3181 l
-4015 3158 l
-4018 3136 l
-4021 3113 l
-4024 3091 l
-4026 3068 l
-4029 3046 l
-4032 3023 l
-4034 3001 l
-4036 2979 l
-4039 2957 l
-4041 2934 l
-4043 2912 l
-4045 2890 l
-4047 2868 l
-4049 2846 l
-4051 2825 l
-4052 2803 l
-4054 2781 l
-4055 2759 l
-4057 2738 l
-4058 2716 l
-4060 2695 l
-4061 2673 l
-4062 2652 l
-4063 2631 l
-4064 2609 l
-4065 2588 l
-4066 2567 l
-4067 2546 l
-4068 2525 l
-4068 2504 l
-4069 2483 l
-4069 2462 l
-4070 2442 l
-4070 2421 l
-4070 2401 l
-4071 2380 l
-4071 2360 l
-4071 2339 l
-4071 2319 l
-4071 2299 l
-4071 2279 l
-4071 2259 l
-4071 2239 l
-4070 2219 l
-4070 2199 l
-4069 2179 l
-4069 2159 l
-4068 2140 l
-4068 2120 l
-4067 2100 l
-4066 2081 l
-4066 2062 l
-4065 2042 l
-4064 2023 l
-4063 2004 l
-4062 1985 l
-4061 1966 l
-4060 1947 l
-4059 1928 l
-4057 1910 l
-4056 1891 l
-4055 1872 l
-4053 1854 l
-4052 1835 l
-4050 1817 l
-4049 1799 l
-4047 1781 l
-4047 1777 l
-S
-868 1777 m
-823 1845 l
-772 1921 l
-722 1998 l
-672 2076 l
-623 2155 l
-573 2235 l
-543 2285 l
-S
-2598 6121 m
-2601 6118 l
-2611 6104 l
-2620 6091 l
-2630 6078 l
-2639 6064 l
-2649 6051 l
-2658 6038 l
-2668 6024 l
-2677 6011 l
-2686 5997 l
-2696 5984 l
-2705 5970 l
-2714 5956 l
-2724 5943 l
-2733 5929 l
-2742 5915 l
-2751 5901 l
-2761 5887 l
-2770 5874 l
-2779 5860 l
-2788 5846 l
-2797 5832 l
-2806 5818 l
-2815 5804 l
-2824 5790 l
-2833 5775 l
-2842 5761 l
-2850 5747 l
-2859 5733 l
-2868 5719 l
-2877 5704 l
-2886 5690 l
-2894 5676 l
-2903 5661 l
-2912 5647 l
-2920 5633 l
-2929 5618 l
-2937 5604 l
-2946 5589 l
-2954 5574 l
-2963 5560 l
-2971 5545 l
-2979 5531 l
-2988 5516 l
-2996 5501 l
-3004 5487 l
-3012 5472 l
-3020 5457 l
-3028 5442 l
-3037 5427 l
-3045 5412 l
-3053 5398 l
-3061 5383 l
-3068 5368 l
-3076 5353 l
-3084 5338 l
-3092 5323 l
-3100 5308 l
-3108 5293 l
-3115 5278 l
-3123 5263 l
-3130 5247 l
-3138 5232 l
-3146 5217 l
-3153 5202 l
-3160 5187 l
-3168 5172 l
-3175 5156 l
-3183 5141 l
-3190 5126 l
-3197 5111 l
-3204 5095 l
-3211 5080 l
-3218 5065 l
-3225 5049 l
-3233 5034 l
-3239 5018 l
-3246 5003 l
-3253 4988 l
-3260 4972 l
-3267 4957 l
-3274 4941 l
-3280 4926 l
-3287 4910 l
-3294 4895 l
-3300 4879 l
-3307 4864 l
-3313 4848 l
-3320 4833 l
-3326 4817 l
-3332 4802 l
-3339 4786 l
-3345 4771 l
-3351 4755 l
-3357 4739 l
-3364 4724 l
-3370 4708 l
-3376 4693 l
-3382 4677 l
-3388 4661 l
-3393 4646 l
-3399 4630 l
-3405 4614 l
-3411 4599 l
-3417 4583 l
-3422 4567 l
-3428 4552 l
-3433 4536 l
-3439 4521 l
-3444 4505 l
-3450 4489 l
-3455 4474 l
-3461 4458 l
-3466 4442 l
-3471 4427 l
-3476 4411 l
-3481 4395 l
-3487 4380 l
-3492 4364 l
-3497 4348 l
-3502 4333 l
-3506 4317 l
-3511 4301 l
-3516 4286 l
-3521 4270 l
-3526 4254 l
-3530 4239 l
-3535 4223 l
-3540 4208 l
-3544 4192 l
-3549 4176 l
-3553 4161 l
-3557 4145 l
-3562 4130 l
-3566 4114 l
-3570 4098 l
-3574 4083 l
-3579 4067 l
-3583 4052 l
-3587 4036 l
-3591 4021 l
-3595 4005 l
-3599 3990 l
-3603 3974 l
-3606 3959 l
-3610 3943 l
-3614 3928 l
-3618 3912 l
-3621 3897 l
-3625 3882 l
-3628 3866 l
-3632 3851 l
-3635 3836 l
-3639 3820 l
-3642 3805 l
-3645 3790 l
-3649 3774 l
-3652 3759 l
-3655 3744 l
-3658 3728 l
-3661 3713 l
-3664 3698 l
-3667 3683 l
-3670 3668 l
-3673 3653 l
-3676 3637 l
-3679 3622 l
-3682 3607 l
-3684 3592 l
-3687 3577 l
-3690 3562 l
-3692 3547 l
-3695 3532 l
-3697 3517 l
-3700 3502 l
-3702 3487 l
-3705 3472 l
-3707 3457 l
-3709 3443 l
-3711 3428 l
-3714 3413 l
-3716 3398 l
-3718 3383 l
-3720 3369 l
-3722 3354 l
-3724 3339 l
-3726 3325 l
-3728 3310 l
-3730 3295 l
-3731 3281 l
-3733 3266 l
-3735 3252 l
-3737 3237 l
-3738 3223 l
-3740 3208 l
-3741 3194 l
-3743 3180 l
-3744 3165 l
-3746 3151 l
-S
-3746 3151 m
-3747 3137 l
-3749 3122 l
-3750 3108 l
-3751 3094 l
-3752 3080 l
-3754 3065 l
-3755 3051 l
-3756 3037 l
-3757 3023 l
-3758 3009 l
-3759 2995 l
-3760 2981 l
-3761 2967 l
-3762 2953 l
-3763 2940 l
-3763 2926 l
-3764 2912 l
-3765 2898 l
-3765 2884 l
-3766 2871 l
-3767 2857 l
-3767 2843 l
-3768 2830 l
-3768 2816 l
-3769 2803 l
-3769 2789 l
-3770 2776 l
-3770 2762 l
-3770 2749 l
-3771 2736 l
-3771 2722 l
-3771 2709 l
-3771 2696 l
-3771 2682 l
-3771 2669 l
-3772 2656 l
-3772 2643 l
-3772 2630 l
-3772 2617 l
-3771 2604 l
-3771 2591 l
-3771 2578 l
-3771 2565 l
-3771 2552 l
-3771 2539 l
-3770 2527 l
-3770 2514 l
-3770 2501 l
-3769 2488 l
-3769 2476 l
-3769 2463 l
-3768 2451 l
-3768 2438 l
-3767 2426 l
-3766 2413 l
-3766 2401 l
-3765 2389 l
-3765 2376 l
-3764 2364 l
-3763 2352 l
-3762 2339 l
-3762 2327 l
-3761 2315 l
-3760 2303 l
-3759 2291 l
-3758 2279 l
-3757 2267 l
-3756 2255 l
-3756 2243 l
-3755 2231 l
-3753 2220 l
-3752 2208 l
-3751 2196 l
-3750 2184 l
-3749 2173 l
-3748 2161 l
-3747 2150 l
-3745 2138 l
-3744 2127 l
-3743 2115 l
-3742 2104 l
-3740 2092 l
-3739 2081 l
-3738 2070 l
-3736 2058 l
-3735 2047 l
-3733 2036 l
-3732 2025 l
-3730 2014 l
-3729 2003 l
-3727 1992 l
-3726 1981 l
-3724 1970 l
-3722 1959 l
-3721 1948 l
-3719 1937 l
-3717 1927 l
-3716 1916 l
-3714 1905 l
-3712 1895 l
-3710 1884 l
-3709 1874 l
-3707 1863 l
-3705 1853 l
-3703 1842 l
-3701 1832 l
-3699 1821 l
-3697 1811 l
-3695 1801 l
-3693 1791 l
-3691 1780 l
-3691 1777 l
-S
-1826 1777 m
-1793 1806 l
-1747 1847 l
-1702 1889 l
-1657 1933 l
-1612 1979 l
-1567 2026 l
-1523 2075 l
-1478 2125 l
-1434 2177 l
-1389 2230 l
-1345 2285 l
-1301 2341 l
-1258 2398 l
-1214 2456 l
-1171 2515 l
-1128 2576 l
-1085 2637 l
-1042 2700 l
-1000 2763 l
-958 2827 l
-916 2893 l
-875 2959 l
-834 3025 l
-793 3093 l
-752 3161 l
-712 3230 l
-672 3299 l
-633 3369 l
-594 3439 l
-555 3510 l
-543 3532 l
-S
-2210 6121 m
-2215 6114 l
-2222 6106 l
-2228 6099 l
-2235 6091 l
-2241 6083 l
-2248 6076 l
-2254 6068 l
-2261 6060 l
-2267 6052 l
-2273 6044 l
-2280 6036 l
-2286 6029 l
-2293 6021 l
-2299 6013 l
-2305 6005 l
-2312 5997 l
-2318 5989 l
-2324 5981 l
-2331 5973 l
-2337 5965 l
-2343 5957 l
-2349 5948 l
-2356 5940 l
-2362 5932 l
-2368 5924 l
-2375 5916 l
-2381 5908 l
-2387 5899 l
-2393 5891 l
-2399 5883 l
-2406 5874 l
-2412 5866 l
-2418 5858 l
-2424 5849 l
-2430 5841 l
-2436 5833 l
-2442 5824 l
-2449 5816 l
-2455 5807 l
-2461 5799 l
-2467 5790 l
-2473 5782 l
-2479 5773 l
-2485 5764 l
-2491 5756 l
-2497 5747 l
-2503 5739 l
-2509 5730 l
-2515 5721 l
-2521 5713 l
-2527 5704 l
-2533 5695 l
-2539 5686 l
-2545 5678 l
-2550 5669 l
-2556 5660 l
-2562 5651 l
-2568 5642 l
-2574 5633 l
-2580 5625 l
-2586 5616 l
-2591 5607 l
-2597 5598 l
-2603 5589 l
-2609 5580 l
-2614 5571 l
-2620 5562 l
-2626 5553 l
-2631 5544 l
-2637 5535 l
-2643 5526 l
-2648 5517 l
-2654 5508 l
-2660 5498 l
-2665 5489 l
-2671 5480 l
-2676 5471 l
-2682 5462 l
-2687 5453 l
-2693 5443 l
-2698 5434 l
-2704 5425 l
-2709 5416 l
-2715 5406 l
-2720 5397 l
-2725 5388 l
-2731 5378 l
-2736 5369 l
-2742 5360 l
-2747 5350 l
-2752 5341 l
-2757 5332 l
-2763 5322 l
-2768 5313 l
-2773 5303 l
-2778 5294 l
-2784 5284 l
-2789 5275 l
-2794 5265 l
-2799 5256 l
-2804 5246 l
-2809 5237 l
-2814 5227 l
-2820 5218 l
-2825 5208 l
-2830 5199 l
-2835 5189 l
-2840 5179 l
-2845 5170 l
-2850 5160 l
-2854 5151 l
-2859 5141 l
-2864 5131 l
-2869 5122 l
-2874 5112 l
-2879 5102 l
-2884 5093 l
-2888 5083 l
-2893 5073 l
-2898 5063 l
-2903 5054 l
-2907 5044 l
-2912 5034 l
-2917 5024 l
-2921 5015 l
-2926 5005 l
-2931 4995 l
-2935 4985 l
-2940 4976 l
-2944 4966 l
-2949 4956 l
-2953 4946 l
-2958 4936 l
-2962 4926 l
-2967 4917 l
-2971 4907 l
-2976 4897 l
-2980 4887 l
-2984 4877 l
-2989 4867 l
-2993 4857 l
-2997 4847 l
-3001 4838 l
-3006 4828 l
-3010 4818 l
-3014 4808 l
-3018 4798 l
-3022 4788 l
-3027 4778 l
-3031 4768 l
-3035 4758 l
-3039 4748 l
-3043 4738 l
-3047 4728 l
-3051 4718 l
-3055 4708 l
-3059 4698 l
-3063 4688 l
-3067 4678 l
-3071 4669 l
-3074 4659 l
-3078 4649 l
-3082 4639 l
-3086 4629 l
-3090 4619 l
-3093 4609 l
-3097 4599 l
-3101 4589 l
-3104 4579 l
-3108 4569 l
-3112 4559 l
-3115 4549 l
-3119 4539 l
-3123 4529 l
-3126 4519 l
-3130 4509 l
-3133 4499 l
-3137 4489 l
-3140 4479 l
-3143 4469 l
-3147 4459 l
-3150 4449 l
-3153 4439 l
-3157 4429 l
-3160 4419 l
-3163 4409 l
-3167 4399 l
-3170 4389 l
-3173 4379 l
-3176 4369 l
-3179 4359 l
-3183 4349 l
-3186 4339 l
-3189 4329 l
-3192 4319 l
-3195 4309 l
-3198 4299 l
-3201 4289 l
-3204 4279 l
-S
-3204 4279 m
-3207 4269 l
-3210 4259 l
-3213 4249 l
-3216 4239 l
-3218 4229 l
-3221 4219 l
-3224 4209 l
-3227 4199 l
-3230 4189 l
-3232 4180 l
-3235 4170 l
-3238 4160 l
-3240 4150 l
-3243 4140 l
-3246 4130 l
-3248 4120 l
-3251 4110 l
-3253 4100 l
-3256 4091 l
-3258 4081 l
-3261 4071 l
-3263 4061 l
-3266 4051 l
-3268 4041 l
-3270 4031 l
-3273 4022 l
-3275 4012 l
-3277 4002 l
-3280 3992 l
-3282 3982 l
-3284 3973 l
-3286 3963 l
-3289 3953 l
-3291 3943 l
-3293 3934 l
-3295 3924 l
-3297 3914 l
-3299 3904 l
-3301 3895 l
-3303 3885 l
-3305 3875 l
-3307 3866 l
-3309 3856 l
-3311 3846 l
-3313 3837 l
-3315 3827 l
-3317 3817 l
-3319 3808 l
-3320 3798 l
-3322 3788 l
-3324 3779 l
-3326 3769 l
-3328 3760 l
-3329 3750 l
-3331 3741 l
-3333 3731 l
-3334 3722 l
-3336 3712 l
-3337 3702 l
-3339 3693 l
-3340 3684 l
-3342 3674 l
-3343 3665 l
-3345 3655 l
-3346 3646 l
-3348 3636 l
-3349 3627 l
-3351 3618 l
-3352 3608 l
-3353 3599 l
-3355 3589 l
-3356 3580 l
-3357 3571 l
-3358 3561 l
-3360 3552 l
-3361 3543 l
-3362 3534 l
-3363 3524 l
-3364 3515 l
-3365 3506 l
-3367 3497 l
-3368 3488 l
-3369 3478 l
-3370 3469 l
-3371 3460 l
-3372 3451 l
-3373 3442 l
-3374 3433 l
-3375 3424 l
-3375 3415 l
-3376 3405 l
-3377 3396 l
-3378 3387 l
-3379 3378 l
-3380 3369 l
-3380 3360 l
-3381 3351 l
-3382 3342 l
-3383 3334 l
-3383 3325 l
-3384 3316 l
-3385 3307 l
-3385 3298 l
-3386 3289 l
-3386 3280 l
-3387 3272 l
-3387 3263 l
-3388 3254 l
-3389 3245 l
-3389 3236 l
-3389 3228 l
-3390 3219 l
-3390 3210 l
-3391 3202 l
-3391 3193 l
-3391 3184 l
-3392 3176 l
-3392 3167 l
-3392 3159 l
-3393 3150 l
-3393 3141 l
-3393 3133 l
-3393 3124 l
-3394 3116 l
-3394 3107 l
-3394 3099 l
-3394 3091 l
-3394 3082 l
-3394 3074 l
-3394 3065 l
-3394 3057 l
-3395 3049 l
-3395 3040 l
-3395 3032 l
-3395 3024 l
-3395 3016 l
-3394 3007 l
-3394 2999 l
-3394 2991 l
-3394 2983 l
-3394 2975 l
-3394 2966 l
-3394 2958 l
-3394 2950 l
-3393 2942 l
-3393 2934 l
-3393 2926 l
-3393 2918 l
-3393 2910 l
-3392 2902 l
-3392 2894 l
-3392 2886 l
-3391 2878 l
-3391 2870 l
-3391 2862 l
-3390 2855 l
-3390 2847 l
-3389 2839 l
-3389 2831 l
-3388 2823 l
-3388 2816 l
-3387 2808 l
-3387 2800 l
-3386 2793 l
-3386 2785 l
-3385 2777 l
-3385 2770 l
-3384 2762 l
-3384 2754 l
-3383 2747 l
-3382 2739 l
-3382 2732 l
-3381 2724 l
-3380 2717 l
-3380 2709 l
-3379 2702 l
-3378 2695 l
-3377 2687 l
-3377 2680 l
-3376 2672 l
-3375 2665 l
-3374 2658 l
-3373 2651 l
-3373 2643 l
-3372 2636 l
-3371 2629 l
-3370 2622 l
-3369 2615 l
-3368 2607 l
-3367 2600 l
-3366 2593 l
-3365 2586 l
-3364 2579 l
-3363 2572 l
-3362 2565 l
-3361 2558 l
-3360 2551 l
-3359 2544 l
-3358 2537 l
-S
-3358 2537 m
-3357 2530 l
-3356 2523 l
-3355 2517 l
-3354 2510 l
-3352 2503 l
-3351 2496 l
-3350 2489 l
-3349 2483 l
-3348 2476 l
-3347 2469 l
-3345 2463 l
-3344 2456 l
-3343 2449 l
-3342 2443 l
-3340 2436 l
-3339 2430 l
-3338 2423 l
-3336 2417 l
-3335 2410 l
-3334 2404 l
-3332 2397 l
-3331 2391 l
-3330 2384 l
-3328 2378 l
-3327 2372 l
-3325 2365 l
-3324 2359 l
-3322 2353 l
-3321 2347 l
-3319 2340 l
-3318 2334 l
-3316 2328 l
-3315 2322 l
-3313 2316 l
-3312 2310 l
-3310 2303 l
-3309 2297 l
-3307 2291 l
-3306 2285 l
-3304 2279 l
-3302 2273 l
-3301 2267 l
-3299 2261 l
-3298 2256 l
-3296 2250 l
-3294 2244 l
-3293 2238 l
-3291 2232 l
-3289 2226 l
-3287 2221 l
-3286 2215 l
-3284 2209 l
-3282 2203 l
-3281 2198 l
-3279 2192 l
-3277 2187 l
-3275 2181 l
-3273 2175 l
-3272 2170 l
-3270 2164 l
-3268 2159 l
-3266 2153 l
-3264 2148 l
-3262 2142 l
-3261 2137 l
-3259 2132 l
-3257 2126 l
-3255 2121 l
-3253 2116 l
-3251 2110 l
-3249 2105 l
-3247 2100 l
-3245 2094 l
-3243 2089 l
-3241 2084 l
-3239 2079 l
-3237 2074 l
-3235 2069 l
-3233 2064 l
-3231 2059 l
-3229 2053 l
-3227 2048 l
-3225 2043 l
-3223 2038 l
-3221 2034 l
-3219 2029 l
-3217 2024 l
-3215 2019 l
-3213 2014 l
-3211 2009 l
-3208 2004 l
-3206 1999 l
-3204 1995 l
-3202 1990 l
-3200 1985 l
-3198 1981 l
-3196 1976 l
-3193 1971 l
-3191 1967 l
-3189 1962 l
-3187 1957 l
-3185 1953 l
-3182 1948 l
-3180 1944 l
-3178 1939 l
-3176 1935 l
-3173 1930 l
-3171 1926 l
-3169 1922 l
-3167 1917 l
-3164 1913 l
-3162 1908 l
-3160 1904 l
-3157 1900 l
-3155 1896 l
-3153 1891 l
-3150 1887 l
-3148 1883 l
-3146 1879 l
-3143 1875 l
-3141 1870 l
-3139 1866 l
-3136 1862 l
-3134 1858 l
-3131 1854 l
-3129 1850 l
-3127 1846 l
-3124 1842 l
-3122 1838 l
-3119 1834 l
-3117 1830 l
-3114 1827 l
-3112 1823 l
-3110 1819 l
-3107 1815 l
-3105 1811 l
-3102 1807 l
-3100 1804 l
-3097 1800 l
-3095 1796 l
-3092 1793 l
-3090 1789 l
-3087 1785 l
-3085 1782 l
-3082 1778 l
-3082 1777 l
-S
-2296 2538 m
-2295 2538 l
-2295 2538 l
-2295 2538 l
-2293 2538 l
-2290 2538 l
-2258 2546 l
-2226 2555 l
-2193 2565 l
-2160 2578 l
-2126 2593 l
-2093 2609 l
-2060 2627 l
-2026 2647 l
-1992 2668 l
-1958 2691 l
-1925 2715 l
-1891 2741 l
-1857 2769 l
-1823 2798 l
-1789 2828 l
-1755 2859 l
-1721 2892 l
-1687 2926 l
-1654 2962 l
-1620 2998 l
-1587 3036 l
-1554 3074 l
-1520 3114 l
-1487 3155 l
-1455 3197 l
-1422 3239 l
-1390 3283 l
-1357 3327 l
-1325 3372 l
-1294 3418 l
-1262 3465 l
-1231 3512 l
-1200 3560 l
-1170 3609 l
-1140 3658 l
-1110 3708 l
-1080 3759 l
-1051 3809 l
-1022 3861 l
-994 3912 l
-966 3964 l
-939 4017 l
-912 4070 l
-885 4122 l
-859 4176 l
-834 4229 l
-809 4283 l
-784 4336 l
-760 4390 l
-737 4444 l
-714 4498 l
-692 4552 l
-671 4606 l
-650 4659 l
-630 4713 l
-610 4767 l
-592 4820 l
-574 4873 l
-557 4926 l
-543 4969 l
-S
-1633 6121 m
-1679 6086 l
-1733 6042 l
-1787 5995 l
-1841 5945 l
-1895 5893 l
-1949 5839 l
-2003 5782 l
-2056 5722 l
-2109 5660 l
-2161 5596 l
-2212 5530 l
-2262 5461 l
-2311 5391 l
-2359 5319 l
-2405 5245 l
-2450 5170 l
-2494 5093 l
-2536 5015 l
-2576 4936 l
-2614 4857 l
-2650 4776 l
-2685 4695 l
-2717 4614 l
-2747 4532 l
-2775 4450 l
-2801 4369 l
-2825 4288 l
-2846 4207 l
-2866 4127 l
-2883 4048 l
-2897 3970 l
-2910 3893 l
-2920 3818 l
-2929 3743 l
-2935 3671 l
-2939 3600 l
-2941 3531 l
-2941 3463 l
-2939 3398 l
-2936 3335 l
-2930 3274 l
-2923 3215 l
-2914 3159 l
-2904 3104 l
-2892 3053 l
-2878 3003 l
-2863 2956 l
-2847 2912 l
-2829 2870 l
-2811 2830 l
-2791 2793 l
-2770 2759 l
-2748 2727 l
-2724 2697 l
-2701 2670 l
-2676 2645 l
-2650 2623 l
-2624 2604 l
-2597 2586 l
-2569 2571 l
-2540 2559 l
-2511 2548 l
-2482 2540 l
-2452 2535 l
-2421 2531 l
-2391 2529 l
-2359 2530 l
-2328 2533 l
-2296 2538 l
-S
-2149 3569 m
-2149 3569 l
-2149 3569 l
-2149 3569 l
-2148 3569 l
-2147 3569 l
-2130 3570 l
-2114 3571 l
-2096 3573 l
-2079 3577 l
-2062 3581 l
-2044 3587 l
-2026 3594 l
-2008 3601 l
-1990 3610 l
-1971 3619 l
-1953 3629 l
-1934 3641 l
-1915 3653 l
-1897 3666 l
-1878 3680 l
-1859 3695 l
-1840 3710 l
-1821 3726 l
-1802 3744 l
-1783 3761 l
-1764 3780 l
-1745 3799 l
-1726 3819 l
-1708 3840 l
-1689 3861 l
-1670 3883 l
-1652 3906 l
-1633 3929 l
-1615 3952 l
-1597 3976 l
-1579 4001 l
-1562 4026 l
-1544 4052 l
-1527 4078 l
-1510 4104 l
-1493 4131 l
-1476 4158 l
-1460 4186 l
-1444 4213 l
-1428 4242 l
-1413 4270 l
-1397 4299 l
-1383 4327 l
-1368 4356 l
-1354 4385 l
-1340 4415 l
-1326 4444 l
-1313 4474 l
-1301 4503 l
-1288 4533 l
-1276 4563 l
-1265 4592 l
-1254 4622 l
-1243 4651 l
-1233 4681 l
-1224 4710 l
-1215 4739 l
-1206 4768 l
-1198 4797 l
-1190 4826 l
-1183 4854 l
-1176 4883 l
-1170 4910 l
-1165 4938 l
-1160 4965 l
-1156 4992 l
-1152 5019 l
-1149 5045 l
-1146 5071 l
-1144 5096 l
-1143 5121 l
-1142 5145 l
-1142 5169 l
-1143 5192 l
-1144 5215 l
-1146 5237 l
-1148 5258 l
-1151 5279 l
-1155 5299 l
-1160 5318 l
-1165 5337 l
-1171 5355 l
-1178 5372 l
-1185 5388 l
-1193 5404 l
-1201 5419 l
-1211 5432 l
-1220 5445 l
-1231 5458 l
-1242 5469 l
-1254 5479 l
-1267 5488 l
-1280 5496 l
-1294 5504 l
-1309 5510 l
-1324 5515 l
-1340 5519 l
-1356 5523 l
-1373 5525 l
-1390 5526 l
-1408 5525 l
-1427 5524 l
-1446 5522 l
-1466 5518 l
-1486 5513 l
-1506 5508 l
-1527 5501 l
-1549 5492 l
-1571 5483 l
-1593 5473 l
-1615 5461 l
-1638 5448 l
-1661 5434 l
-1684 5419 l
-1708 5403 l
-1731 5385 l
-1755 5367 l
-1779 5347 l
-1803 5326 l
-1826 5304 l
-1850 5282 l
-1874 5258 l
-1898 5233 l
-1921 5207 l
-1945 5180 l
-1968 5153 l
-1991 5124 l
-2014 5095 l
-2036 5065 l
-2058 5034 l
-2079 5002 l
-2101 4970 l
-2121 4937 l
-2141 4904 l
-2161 4870 l
-2180 4835 l
-2199 4800 l
-2216 4765 l
-2234 4729 l
-2250 4694 l
-2266 4657 l
-2281 4621 l
-2295 4585 l
-2309 4549 l
-2322 4512 l
-2334 4476 l
-2345 4440 l
-2355 4404 l
-2365 4368 l
-2373 4333 l
-2381 4298 l
-2388 4263 l
-2394 4229 l
-2400 4195 l
-2404 4162 l
-2408 4129 l
-2410 4097 l
-2412 4066 l
-2413 4035 l
-2414 4005 l
-2413 3976 l
-2412 3948 l
-2410 3920 l
-2407 3894 l
-2403 3868 l
-2399 3844 l
-2393 3820 l
-2388 3797 l
-2381 3775 l
-2374 3755 l
-2366 3735 l
-2357 3716 l
-2348 3699 l
-2338 3682 l
-2328 3667 l
-2317 3653 l
-2306 3640 l
-2294 3628 l
-2281 3617 l
-2268 3607 l
-2255 3599 l
-2241 3591 l
-2227 3585 l
-2212 3579 l
-2197 3575 l
-2181 3572 l
-2166 3570 l
-2149 3569 l
-S
-543 1777 m
-853 1777 l
-1164 1777 l
-1474 1777 l
-1784 1777 l
-2094 1777 l
-2405 1777 l
-2715 1777 l
-3025 1777 l
-3335 1777 l
-3646 1777 l
-3956 1777 l
-4266 1777 l
-4288 1777 l
-4310 1777 l
-4333 1777 l
-4355 1777 l
-4377 1777 l
-4399 1777 l
-4421 1777 l
-4443 1777 l
-4466 1777 l
-4488 1777 l
-4489 1777 l
-4491 1777 l
-4492 1777 l
-4494 1777 l
-4496 1777 l
-4497 1777 l
-4499 1777 l
-4500 1777 l
-4502 1777 l
-4502 1777 l
-4502 1777 l
-4502 1777 l
-S
-3299 6121 m
-3299 6121 l
-3299 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3297 6121 l
-3296 6121 l
-3294 6121 l
-3293 6121 l
-3291 6121 l
-3269 6121 l
-3247 6121 l
-3225 6121 l
-3202 6121 l
-3180 6121 l
-3158 6121 l
-3136 6121 l
-3114 6121 l
-3092 6121 l
-3069 6121 l
-3047 6121 l
-3025 6121 l
-2715 6121 l
-2405 6121 l
-2094 6121 l
-1784 6121 l
-1474 6121 l
-1164 6121 l
-853 6121 l
-543 6121 l
-S
-543 6121 m
-543 5811 l
-543 5500 l
-543 5190 l
-543 4880 l
-543 4570 l
-543 4259 l
-543 3949 l
-543 3639 l
-543 3329 l
-543 3018 l
-543 2708 l
-543 2398 l
-543 2088 l
-543 1777 l
-S
-4505 1818 m
-4505 1813 l
-4505 1809 l
-4505 1804 l
-4505 1800 l
-4505 1795 l
-4505 1791 l
-4505 1786 l
-4505 1782 l
-4505 1777 l
-S
-4505 1858 m
-4505 1853 l
-4505 1849 l
-4505 1845 l
-4505 1840 l
-4505 1836 l
-4505 1831 l
-4505 1827 l
-4505 1822 l
-4505 1818 l
-S
-4505 1898 m
-4505 1894 l
-4505 1889 l
-4505 1885 l
-4505 1880 l
-4505 1876 l
-4505 1871 l
-4505 1867 l
-4505 1862 l
-4505 1858 l
-S
-4505 1938 m
-4505 1934 l
-4505 1929 l
-4505 1925 l
-4505 1920 l
-4505 1916 l
-4505 1912 l
-4505 1907 l
-4505 1903 l
-4505 1898 l
-S
-4500 1979 m
-4500 1974 l
-4500 1970 l
-4500 1965 l
-4500 1961 l
-4500 1956 l
-4500 1952 l
-4502 1950 l
-4505 1947 l
-4505 1943 l
-4505 1938 l
-S
-4500 2019 m
-4500 2014 l
-4500 2010 l
-4500 2005 l
-4500 2001 l
-4500 1996 l
-4500 1992 l
-4500 1988 l
-4500 1983 l
-4500 1979 l
-S
-4500 2059 m
-4500 2055 l
-4500 2050 l
-4500 2046 l
-4500 2041 l
-4500 2037 l
-4500 2032 l
-4500 2028 l
-4500 2023 l
-4500 2019 l
-S
-4500 2099 m
-4500 2095 l
-4500 2090 l
-4500 2086 l
-4500 2081 l
-4500 2077 l
-4500 2072 l
-4500 2068 l
-4500 2063 l
-4500 2059 l
-S
-4500 2139 m
-4500 2135 l
-4500 2131 l
-4500 2126 l
-4500 2122 l
-4500 2117 l
-4500 2113 l
-4500 2108 l
-4500 2104 l
-4500 2099 l
-S
-4496 2180 m
-4496 2175 l
-4496 2171 l
-4496 2166 l
-4496 2162 l
-4496 2157 l
-4496 2153 l
-4496 2148 l
-4498 2146 l
-4500 2144 l
-4500 2139 l
-S
-4496 2220 m
-4496 2215 l
-4496 2211 l
-4496 2206 l
-4496 2202 l
-4496 2198 l
-4496 2193 l
-4496 2189 l
-4496 2184 l
-4496 2180 l
-S
-4491 2260 m
-4491 2256 l
-4493 2253 l
-4496 2251 l
-4496 2247 l
-4496 2242 l
-4496 2238 l
-4496 2233 l
-4496 2229 l
-4496 2224 l
-4496 2220 l
-S
-4491 2300 m
-4491 2296 l
-4491 2291 l
-4491 2287 l
-4491 2282 l
-4491 2278 l
-4491 2274 l
-4491 2269 l
-4491 2265 l
-4491 2260 l
-S
-4487 2341 m
-4489 2338 l
-4491 2336 l
-4491 2332 l
-4491 2327 l
-4491 2323 l
-4491 2318 l
-4491 2314 l
-4491 2309 l
-4491 2305 l
-4491 2300 l
-S
-4487 2341 m
-4487 2345 l
-4487 2349 l
-4487 2354 l
-4487 2358 l
-4487 2363 l
-4487 2367 l
-4487 2372 l
-4487 2376 l
-4487 2381 l
-S
-4482 2421 m
-4482 2416 l
-4482 2412 l
-4484 2410 l
-S
-4487 2381 m
-4487 2385 l
-4487 2390 l
-4487 2394 l
-4487 2399 l
-4487 2403 l
-4487 2408 l
-4484 2410 l
-S
-4482 2461 m
-4482 2457 l
-4482 2452 l
-4482 2448 l
-4482 2443 l
-4482 2439 l
-4482 2434 l
-4482 2430 l
-4482 2425 l
-4482 2421 l
-S
-4478 2501 m
-4478 2497 l
-4478 2492 l
-4478 2488 l
-4478 2484 l
-4478 2479 l
-4478 2475 l
-4480 2472 l
-4482 2470 l
-4482 2466 l
-4482 2461 l
-S
-4473 2542 m
-4473 2537 l
-4473 2533 l
-4473 2528 l
-4476 2526 l
-4478 2524 l
-4478 2519 l
-4478 2515 l
-4478 2510 l
-4478 2506 l
-4478 2501 l
-S
-4469 2582 m
-4471 2580 l
-4473 2577 l
-4473 2573 l
-4473 2568 l
-4473 2564 l
-4473 2559 l
-4473 2555 l
-4473 2551 l
-4473 2546 l
-4473 2542 l
-S
-4469 2622 m
-4469 2618 l
-4469 2613 l
-4469 2609 l
-4469 2604 l
-4469 2600 l
-4469 2595 l
-4469 2591 l
-4469 2586 l
-4469 2582 l
-S
-4464 2662 m
-4464 2658 l
-4464 2653 l
-4464 2649 l
-4464 2644 l
-4464 2640 l
-4464 2635 l
-4464 2631 l
-4467 2629 l
-4469 2627 l
-4469 2622 l
-S
-4460 2702 m
-4460 2698 l
-4460 2694 l
-4460 2689 l
-4460 2685 l
-4460 2680 l
-4460 2676 l
-4462 2673 l
-4464 2671 l
-4464 2667 l
-4464 2662 l
-S
-4455 2743 m
-4455 2738 l
-4455 2734 l
-4455 2729 l
-4455 2725 l
-4455 2720 l
-4458 2718 l
-4460 2716 l
-4460 2711 l
-4460 2707 l
-4460 2702 l
-S
-4451 2783 m
-4451 2778 l
-4451 2774 l
-4451 2770 l
-4451 2765 l
-4451 2761 l
-4453 2758 l
-4455 2756 l
-4455 2752 l
-4455 2747 l
-4455 2743 l
-S
-4446 2823 m
-4446 2819 l
-4446 2814 l
-4446 2810 l
-4446 2805 l
-4446 2801 l
-4449 2799 l
-4451 2796 l
-4451 2792 l
-4451 2787 l
-4451 2783 l
-S
-4442 2863 m
-4442 2859 l
-4442 2854 l
-4442 2850 l
-4442 2845 l
-4442 2841 l
-4444 2839 l
-S
-4446 2823 m
-4446 2828 l
-4446 2832 l
-4446 2837 l
-4444 2839 l
-S
-4438 2904 m
-4438 2899 l
-4438 2895 l
-4438 2890 l
-4438 2886 l
-4438 2881 l
-4438 2877 l
-4440 2875 l
-4442 2872 l
-4442 2868 l
-4442 2863 l
-S
-4429 2944 m
-4431 2942 l
-4433 2939 l
-4433 2935 l
-4433 2930 l
-4433 2926 l
-4433 2921 l
-4433 2917 l
-4433 2913 l
-4435 2910 l
-4438 2908 l
-4438 2904 l
-S
-4424 2984 m
-4424 2980 l
-4424 2975 l
-4426 2973 l
-4429 2971 l
-4429 2966 l
-4429 2962 l
-4429 2957 l
-4429 2953 l
-4429 2948 l
-4429 2944 l
-S
-4420 3024 m
-4420 3020 l
-4420 3015 l
-4420 3011 l
-4422 3009 l
-4424 3006 l
-4424 3002 l
-4424 2997 l
-4424 2993 l
-4424 2988 l
-4424 2984 l
-S
-4415 3064 m
-4415 3060 l
-4415 3056 l
-4415 3051 l
-4415 3047 l
-4415 3042 l
-4417 3040 l
-4420 3038 l
-4420 3033 l
-4420 3029 l
-4420 3024 l
-S
-4406 3105 m
-4406 3100 l
-4408 3098 l
-4411 3096 l
-4411 3091 l
-4411 3087 l
-4411 3082 l
-4411 3078 l
-4411 3073 l
-4411 3069 l
-4413 3067 l
-4415 3064 l
-S
-4402 3145 m
-4402 3140 l
-4402 3136 l
-4402 3131 l
-4402 3127 l
-4404 3125 l
-S
-4406 3105 m
-4406 3109 l
-4406 3114 l
-4406 3118 l
-4406 3123 l
-4404 3125 l
-S
-4393 3185 m
-4395 3183 l
-4397 3181 l
-4397 3176 l
-4397 3172 l
-4397 3167 l
-4397 3163 l
-4397 3158 l
-4400 3156 l
-4402 3154 l
-4402 3149 l
-4402 3145 l
-S
-4388 3225 m
-4388 3221 l
-4388 3216 l
-4388 3212 l
-4391 3210 l
-4393 3207 l
-4393 3203 l
-4393 3199 l
-4393 3194 l
-4393 3190 l
-4393 3185 l
-S
-4379 3266 m
-4379 3261 l
-4382 3259 l
-4384 3257 l
-4384 3252 l
-4384 3248 l
-4384 3243 l
-4384 3239 l
-4386 3236 l
-4388 3234 l
-4388 3230 l
-4388 3225 l
-S
-4375 3306 m
-4375 3301 l
-4375 3297 l
-4375 3292 l
-4375 3288 l
-4377 3286 l
-4379 3283 l
-4379 3279 l
-4379 3274 l
-4379 3270 l
-4379 3266 l
-S
-4366 3346 m
-4366 3341 l
-4366 3337 l
-4368 3335 l
-4370 3333 l
-4370 3328 l
-4370 3324 l
-4370 3319 l
-4370 3315 l
-4373 3312 l
-4375 3310 l
-4375 3306 l
-S
-4357 3386 m
-4359 3384 l
-4362 3382 l
-4362 3377 l
-4362 3373 l
-4362 3368 l
-4362 3364 l
-4364 3362 l
-S
-4366 3346 m
-4366 3350 l
-4366 3355 l
-4366 3359 l
-4364 3362 l
-S
-4353 3426 m
-4353 3422 l
-4353 3417 l
-4353 3413 l
-4353 3409 l
-4355 3406 l
-4357 3404 l
-4357 3400 l
-4357 3395 l
-4357 3391 l
-4357 3386 l
-S
-4344 3467 m
-4344 3462 l
-4344 3458 l
-4344 3453 l
-4346 3451 l
-4348 3449 l
-4348 3444 l
-4348 3440 l
-4348 3435 l
-4348 3431 l
-4350 3429 l
-4353 3426 l
-S
-4335 3507 m
-4335 3502 l
-4335 3498 l
-4337 3496 l
-4339 3493 l
-4339 3489 l
-4339 3484 l
-4339 3480 l
-4339 3476 l
-4341 3473 l
-4344 3471 l
-4344 3467 l
-S
-4326 3547 m
-4326 3543 l
-4328 3540 l
-4330 3538 l
-4330 3534 l
-4330 3529 l
-4330 3525 l
-4330 3520 l
-4333 3518 l
-4335 3516 l
-4335 3511 l
-4335 3507 l
-S
-4317 3587 m
-4317 3583 l
-4319 3581 l
-4321 3578 l
-4321 3574 l
-4321 3569 l
-4321 3565 l
-4324 3563 l
-S
-4326 3547 m
-4326 3552 l
-4326 3556 l
-4326 3560 l
-4324 3563 l
-S
-4308 3627 m
-4308 3623 l
-4310 3621 l
-4312 3619 l
-4312 3614 l
-4312 3610 l
-4312 3605 l
-4315 3603 l
-4317 3601 l
-4317 3596 l
-4317 3592 l
-4317 3587 l
-S
-4299 3668 m
-4299 3663 l
-4301 3661 l
-4303 3659 l
-4303 3654 l
-4303 3650 l
-4303 3645 l
-4306 3643 l
-4308 3641 l
-4308 3636 l
-4308 3632 l
-4308 3627 l
-S
-4290 3708 m
-4290 3703 l
-4292 3701 l
-4295 3699 l
-4295 3695 l
-4295 3690 l
-4295 3686 l
-4297 3683 l
-4299 3681 l
-4299 3677 l
-4299 3672 l
-4299 3668 l
-S
-4281 3748 m
-4281 3744 l
-4281 3739 l
-4283 3737 l
-S
-4283 3737 m
-4286 3735 l
-4286 3730 l
-4286 3726 l
-4286 3721 l
-4288 3719 l
-4290 3717 l
-4290 3712 l
-4290 3708 l
-S
-4272 3788 m
-4272 3784 l
-4272 3779 l
-4274 3777 l
-4277 3775 l
-4277 3770 l
-4277 3766 l
-4277 3762 l
-4279 3759 l
-4281 3757 l
-4281 3753 l
-4281 3748 l
-S
-4263 3829 m
-4263 3824 l
-4263 3820 l
-4263 3815 l
-4265 3813 l
-4268 3811 l
-4268 3806 l
-4268 3802 l
-4268 3797 l
-4270 3795 l
-4272 3793 l
-4272 3788 l
-S
-4250 3869 m
-4252 3867 l
-4254 3864 l
-4254 3860 l
-4254 3855 l
-4254 3851 l
-4257 3849 l
-4259 3846 l
-4259 3842 l
-4259 3838 l
-4259 3833 l
-4261 3831 l
-4263 3829 l
-S
-4241 3909 m
-4241 3905 l
-4243 3902 l
-S
-4243 3902 m
-4245 3900 l
-4245 3896 l
-4245 3891 l
-4245 3887 l
-4248 3884 l
-4250 3882 l
-4250 3878 l
-4250 3873 l
-4250 3869 l
-S
-4232 3949 m
-4232 3945 l
-4232 3940 l
-4232 3936 l
-4234 3934 l
-4236 3931 l
-4236 3927 l
-4236 3922 l
-4239 3920 l
-4241 3918 l
-4241 3913 l
-4241 3909 l
-S
-4219 3989 m
-4221 3987 l
-4223 3985 l
-4223 3981 l
-4223 3976 l
-4223 3972 l
-4225 3969 l
-4228 3967 l
-4228 3963 l
-4228 3958 l
-4228 3954 l
-4230 3951 l
-4232 3949 l
-S
-4210 4030 m
-4210 4025 l
-4210 4021 l
-4212 4018 l
-4214 4016 l
-4214 4012 l
-4214 4007 l
-4214 4003 l
-4216 4001 l
-4219 3998 l
-4219 3994 l
-4219 3989 l
-S
-4196 4070 m
-4198 4068 l
-4201 4065 l
-4201 4061 l
-4201 4056 l
-4201 4052 l
-4203 4050 l
-S
-4203 4050 m
-4205 4048 l
-4205 4043 l
-4205 4039 l
-4207 4036 l
-4210 4034 l
-4210 4030 l
-S
-4187 4110 m
-4187 4106 l
-4187 4101 l
-4190 4099 l
-4192 4097 l
-4192 4092 l
-4192 4088 l
-4192 4083 l
-4194 4081 l
-4196 4079 l
-4196 4074 l
-4196 4070 l
-S
-4174 4150 m
-4174 4146 l
-4176 4144 l
-4178 4141 l
-4178 4137 l
-4178 4132 l
-4181 4130 l
-4183 4128 l
-4183 4124 l
-4183 4119 l
-4183 4115 l
-4185 4112 l
-4187 4110 l
-S
-4160 4191 m
-4163 4188 l
-S
-4163 4188 m
-4165 4186 l
-4165 4182 l
-4165 4177 l
-4167 4175 l
-4169 4173 l
-4169 4168 l
-4169 4164 l
-4172 4161 l
-4174 4159 l
-4174 4155 l
-4174 4150 l
-S
-4152 4231 m
-4152 4226 l
-4152 4222 l
-4154 4220 l
-4156 4217 l
-4156 4213 l
-4156 4208 l
-4158 4206 l
-4160 4204 l
-4160 4199 l
-4160 4195 l
-4160 4191 l
-S
-4138 4271 m
-4138 4266 l
-4140 4264 l
-4143 4262 l
-4143 4258 l
-4143 4253 l
-4145 4251 l
-4147 4249 l
-4147 4244 l
-4147 4240 l
-4147 4235 l
-4149 4233 l
-4152 4231 l
-S
-4125 4311 m
-4125 4307 l
-4127 4304 l
-4129 4302 l
-4129 4298 l
-4129 4293 l
-4131 4291 l
-4134 4289 l
-4134 4284 l
-4134 4280 l
-4136 4278 l
-4138 4275 l
-4138 4271 l
-S
-4111 4351 m
-4114 4349 l
-4116 4347 l
-4116 4342 l
-4116 4338 l
-4118 4336 l
-4120 4334 l
-4120 4329 l
-4120 4325 l
-4122 4322 l
-S
-4125 4311 m
-4125 4316 l
-4125 4320 l
-4122 4322 l
-S
-4098 4392 m
-4100 4389 l
-4102 4387 l
-4102 4383 l
-4102 4378 l
-4105 4376 l
-4107 4374 l
-4107 4369 l
-4107 4365 l
-4109 4363 l
-4111 4360 l
-4111 4356 l
-4111 4351 l
-S
-4085 4432 m
-4087 4430 l
-4089 4427 l
-4089 4423 l
-4089 4418 l
-4091 4416 l
-4093 4414 l
-4093 4409 l
-4093 4405 l
-4096 4403 l
-4098 4401 l
-4098 4396 l
-4098 4392 l
-S
-4071 4472 m
-4073 4470 l
-4076 4468 l
-4076 4463 l
-4076 4459 l
-4078 4456 l
-4080 4454 l
-4080 4450 l
-4080 4445 l
-4082 4443 l
-S
-4085 4432 m
-4085 4436 l
-4085 4441 l
-4082 4443 l
-S
-4058 4512 m
-4060 4510 l
-4062 4508 l
-4062 4503 l
-4062 4499 l
-4064 4497 l
-4067 4494 l
-4067 4490 l
-4067 4485 l
-4069 4483 l
-4071 4481 l
-4071 4477 l
-4071 4472 l
-S
-4044 4552 m
-4047 4550 l
-4049 4548 l
-4049 4544 l
-4049 4539 l
-4051 4537 l
-4053 4535 l
-4053 4530 l
-4053 4526 l
-4055 4523 l
-4058 4521 l
-4058 4517 l
-4058 4512 l
-S
-4031 4593 m
-4031 4588 l
-4033 4586 l
-4035 4584 l
-4035 4579 l
-4035 4575 l
-4038 4573 l
-4040 4570 l
-4040 4566 l
-4040 4561 l
-4042 4559 l
-S
-4044 4552 m
-4044 4557 l
-4042 4559 l
-S
-4017 4633 m
-4017 4628 l
-4017 4624 l
-4020 4622 l
-4022 4620 l
-4022 4615 l
-4024 4613 l
-4026 4611 l
-4026 4606 l
-4026 4602 l
-4029 4599 l
-4031 4597 l
-4031 4593 l
-S
-4000 4673 m
-4002 4671 l
-S
-4002 4671 m
-4004 4669 l
-4004 4664 l
-4006 4662 l
-4009 4660 l
-4009 4655 l
-4009 4651 l
-4011 4649 l
-4013 4646 l
-4013 4642 l
-4013 4637 l
-4015 4635 l
-4017 4633 l
-S
-3986 4713 m
-3988 4711 l
-3991 4709 l
-3991 4704 l
-3991 4700 l
-3993 4698 l
-3995 4695 l
-3995 4691 l
-3995 4687 l
-3997 4684 l
-4000 4682 l
-4000 4678 l
-4000 4673 l
-S
-3973 4754 m
-3973 4749 l
-3973 4745 l
-3975 4742 l
-3977 4740 l
-3977 4736 l
-3979 4733 l
-3982 4731 l
-3982 4727 l
-3982 4722 l
-3984 4720 l
-3986 4718 l
-3986 4713 l
-S
-3955 4794 m
-3957 4792 l
-3959 4789 l
-3959 4785 l
-3959 4780 l
-3962 4778 l
-S
-3962 4778 m
-3964 4776 l
-3964 4771 l
-3966 4769 l
-3968 4767 l
-3968 4763 l
-3968 4758 l
-3971 4756 l
-3973 4754 l
-S
-3942 4834 m
-3942 4830 l
-3944 4827 l
-3946 4825 l
-3946 4821 l
-3946 4816 l
-3948 4814 l
-3950 4812 l
-3950 4807 l
-3953 4805 l
-3955 4803 l
-3955 4798 l
-3955 4794 l
-S
-3924 4874 m
-3926 4872 l
-3928 4870 l
-3928 4865 l
-3928 4861 l
-3930 4859 l
-3933 4856 l
-3933 4852 l
-3935 4850 l
-3937 4847 l
-3937 4843 l
-3937 4838 l
-3939 4836 l
-3942 4834 l
-S
-3910 4914 m
-3910 4910 l
-3910 4906 l
-3912 4903 l
-3915 4901 l
-3915 4897 l
-3917 4894 l
-3919 4892 l
-3919 4888 l
-3919 4883 l
-3921 4881 l
-S
-3924 4874 m
-3924 4879 l
-3921 4881 l
-S
-3892 4955 m
-3892 4950 l
-3895 4948 l
-3897 4946 l
-3897 4941 l
-3899 4939 l
-3901 4937 l
-3901 4932 l
-3901 4928 l
-3904 4926 l
-3906 4923 l
-3906 4919 l
-3908 4917 l
-3910 4914 l
-S
-3874 4995 m
-3877 4993 l
-3879 4990 l
-3879 4986 l
-3879 4981 l
-3881 4979 l
-S
-3881 4979 m
-3883 4977 l
-3883 4973 l
-3886 4970 l
-3888 4968 l
-3888 4964 l
-3890 4961 l
-3892 4959 l
-3892 4955 l
-S
-3857 5035 m
-3859 5033 l
-3861 5031 l
-3861 5026 l
-3863 5024 l
-3866 5022 l
-3866 5017 l
-3868 5015 l
-3870 5013 l
-3870 5008 l
-3870 5004 l
-3872 5002 l
-3874 4999 l
-3874 4995 l
-S
-3843 5075 m
-3843 5071 l
-3843 5066 l
-3845 5064 l
-3848 5062 l
-3848 5057 l
-3850 5055 l
-3852 5053 l
-3852 5049 l
-3854 5046 l
-3857 5044 l
-3857 5040 l
-3857 5035 l
-S
-3825 5116 m
-3825 5111 l
-3828 5109 l
-3830 5107 l
-3830 5102 l
-3830 5098 l
-3832 5095 l
-3834 5093 l
-3834 5089 l
-3836 5086 l
-3839 5084 l
-3839 5080 l
-3841 5078 l
-S
-3843 5075 m
-3841 5078 l
-S
-3807 5156 m
-3807 5151 l
-3810 5149 l
-3812 5147 l
-3812 5142 l
-3812 5138 l
-3814 5136 l
-3816 5133 l
-3816 5129 l
-3819 5127 l
-3821 5124 l
-3821 5120 l
-3823 5118 l
-3825 5116 l
-S
-3790 5196 m
-3790 5191 l
-3792 5189 l
-3794 5187 l
-3794 5183 l
-3796 5180 l
-3799 5178 l
-3799 5174 l
-3799 5169 l
-3801 5167 l
-S
-3801 5167 m
-3803 5165 l
-3803 5160 l
-3805 5158 l
-3807 5156 l
-S
-3772 5236 m
-3772 5232 l
-3774 5229 l
-3776 5227 l
-3776 5223 l
-3776 5218 l
-3778 5216 l
-3781 5214 l
-3781 5209 l
-3783 5207 l
-3785 5205 l
-3785 5200 l
-3787 5198 l
-3790 5196 l
-S
-3754 5276 m
-3754 5272 l
-3754 5267 l
-3756 5265 l
-3758 5263 l
-3758 5259 l
-3761 5256 l
-S
-3761 5256 m
-3763 5254 l
-3763 5250 l
-3765 5247 l
-3767 5245 l
-3767 5241 l
-3769 5238 l
-3772 5236 l
-S
-3731 5317 m
-3734 5314 l
-3736 5312 l
-3736 5308 l
-3738 5305 l
-3740 5303 l
-3740 5299 l
-3743 5297 l
-3745 5294 l
-3745 5290 l
-3747 5288 l
-3749 5285 l
-3749 5281 l
-3752 5279 l
-3754 5276 l
-S
-3714 5357 m
-3716 5355 l
-3718 5352 l
-3718 5348 l
-3718 5343 l
-3720 5341 l
-S
-3720 5341 m
-3723 5339 l
-3723 5334 l
-3725 5332 l
-3727 5330 l
-3727 5326 l
-3729 5323 l
-3731 5321 l
-3731 5317 l
-S
-3696 5397 m
-3696 5393 l
-3698 5390 l
-3700 5388 l
-3700 5384 l
-3702 5381 l
-3705 5379 l
-3705 5375 l
-3707 5372 l
-3709 5370 l
-3709 5366 l
-3711 5364 l
-3714 5361 l
-3714 5357 l
-S
-3673 5437 m
-3676 5435 l
-3678 5433 l
-3678 5428 l
-3680 5426 l
-S
-3680 5426 m
-3682 5424 l
-3682 5419 l
-3685 5417 l
-3687 5415 l
-3687 5410 l
-3689 5408 l
-3691 5406 l
-3691 5402 l
-3694 5399 l
-3696 5397 l
-S
-3656 5477 m
-3656 5473 l
-3658 5471 l
-3660 5469 l
-3660 5464 l
-3662 5462 l
-3664 5460 l
-3664 5455 l
-3667 5453 l
-3669 5451 l
-3669 5446 l
-3671 5444 l
-3673 5442 l
-3673 5437 l
-S
-3633 5518 m
-3635 5515 l
-3638 5513 l
-3638 5509 l
-3640 5507 l
-S
-3640 5507 m
-3642 5504 l
-3642 5500 l
-3644 5498 l
-3647 5495 l
-3647 5491 l
-3649 5489 l
-3651 5486 l
-3651 5482 l
-3653 5480 l
-3656 5477 l
-S
-3615 5558 m
-3615 5553 l
-3618 5551 l
-3620 5549 l
-3620 5545 l
-3622 5542 l
-3624 5540 l
-3624 5536 l
-3626 5533 l
-3629 5531 l
-3629 5527 l
-3631 5524 l
-3633 5522 l
-3633 5518 l
-S
-3593 5598 m
-3595 5596 l
-3597 5594 l
-3597 5589 l
-3600 5587 l
-S
-3600 5587 m
-3602 5585 l
-3602 5580 l
-3604 5578 l
-3606 5576 l
-3606 5571 l
-3609 5569 l
-3611 5567 l
-3611 5562 l
-3613 5560 l
-3615 5558 l
-S
-3575 5638 m
-3575 5634 l
-3577 5632 l
-3580 5629 l
-3580 5625 l
-3582 5623 l
-3584 5620 l
-3584 5616 l
-3586 5614 l
-3588 5612 l
-3588 5607 l
-3591 5605 l
-3593 5603 l
-3593 5598 l
-S
-3553 5679 m
-3553 5674 l
-3555 5672 l
-3557 5670 l
-3557 5665 l
-3559 5663 l
-S
-3559 5663 m
-3562 5661 l
-3562 5656 l
-3564 5654 l
-3566 5652 l
-3568 5650 l
-3571 5647 l
-3571 5643 l
-3573 5641 l
-3575 5638 l
-S
-3530 5719 m
-3533 5717 l
-3535 5714 l
-3535 5710 l
-3537 5708 l
-3539 5705 l
-3539 5701 l
-3542 5699 l
-3544 5696 l
-3544 5692 l
-3546 5690 l
-3548 5688 l
-3548 5683 l
-3551 5681 l
-3553 5679 l
-S
-3508 5759 m
-3510 5757 l
-3513 5755 l
-3513 5750 l
-3515 5748 l
-3517 5746 l
-3517 5741 l
-3519 5739 l
-S
-3519 5739 m
-3521 5737 l
-3521 5732 l
-3524 5730 l
-3526 5728 l
-3526 5723 l
-3528 5721 l
-3530 5719 l
-S
-3486 5799 m
-3488 5797 l
-3490 5795 l
-3490 5790 l
-3492 5788 l
-3495 5786 l
-3495 5781 l
-3497 5779 l
-3499 5777 l
-3499 5772 l
-3501 5770 l
-3504 5768 l
-3506 5766 l
-3508 5763 l
-3508 5759 l
-S
-3463 5839 m
-3466 5837 l
-3468 5835 l
-3468 5831 l
-3470 5828 l
-3472 5826 l
-3472 5822 l
-3475 5819 l
-3477 5817 l
-3479 5815 l
-S
-3479 5815 m
-3481 5813 l
-3481 5808 l
-3483 5806 l
-3486 5804 l
-3486 5799 l
-S
-3441 5880 m
-3443 5877 l
-3445 5875 l
-3445 5871 l
-3448 5868 l
-3450 5866 l
-3450 5862 l
-3452 5860 l
-3454 5857 l
-3454 5853 l
-3457 5851 l
-3459 5848 l
-3461 5846 l
-3463 5844 l
-3463 5839 l
-S
-3419 5920 m
-3421 5918 l
-3423 5915 l
-3423 5911 l
-3425 5909 l
-3428 5906 l
-3428 5902 l
-3430 5900 l
-3432 5898 l
-3432 5893 l
-3434 5891 l
-3437 5889 l
-3439 5886 l
-S
-3441 5880 m
-3441 5884 l
-3439 5886 l
-S
-3396 5960 m
-3396 5956 l
-3399 5953 l
-S
-3399 5953 m
-3401 5951 l
-3401 5947 l
-3403 5944 l
-3405 5942 l
-3408 5940 l
-3410 5938 l
-3410 5933 l
-3412 5931 l
-3414 5929 l
-3414 5924 l
-3416 5922 l
-3419 5920 l
-S
-3370 6000 m
-3372 5998 l
-3374 5996 l
-3376 5994 l
-3378 5991 l
-3378 5987 l
-3381 5985 l
-3383 5982 l
-3383 5978 l
-3385 5976 l
-3387 5974 l
-3390 5971 l
-3392 5969 l
-3392 5965 l
-3394 5962 l
-3396 5960 l
-S
-3347 6041 m
-3349 6038 l
-3352 6036 l
-3352 6032 l
-3354 6029 l
-3356 6027 l
-3356 6023 l
-3358 6020 l
-S
-3358 6020 m
-3361 6018 l
-3363 6016 l
-3365 6014 l
-3365 6009 l
-3367 6007 l
-3370 6005 l
-3370 6000 l
-S
-3325 6081 m
-3325 6076 l
-3327 6074 l
-3329 6072 l
-3329 6067 l
-3332 6065 l
-3334 6063 l
-3336 6061 l
-3338 6058 l
-3338 6054 l
-3340 6052 l
-3343 6049 l
-3345 6047 l
-3347 6045 l
-3347 6041 l
-S
-3298 6121 m
-3300 6119 l
-3303 6116 l
-3303 6112 l
-3305 6110 l
-3307 6108 l
-3309 6105 l
-3311 6103 l
-3311 6099 l
-3314 6096 l
-3316 6094 l
-3316 6090 l
-3318 6087 l
-S
-3318 6087 m
-3320 6085 l
-3323 6083 l
-3325 6081 l
-S
-1 g
-Y
-2232.6 1612.9 m
-2233 1734 l
-2333 1734 l
-2333 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2279 1717 m
-2266 1713 l
-2258 1701 l
-2253 1680 l
-2253 1667 l
-2258 1646 l
-2266 1634 l
-2279 1630 l
-2287 1630 l
-2299 1634 l
-2308 1646 l
-2312 1667 l
-2312 1680 l
-2308 1701 l
-2299 1713 l
-2287 1717 l
-2279 1717 l
-S
-1 g
-Y
-1873.8 1612.9 m
-1874 1734 l
-1936 1734 l
-1936 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-1895 1701 m
-1903 1705 l
-1916 1717 l
-1916 1630 l
-S
-1 g
-Y
-1382.7 1612.9 m
-1383 1734 l
-1483 1734 l
-1483 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-1408 1696 m
-1408 1701 l
-1412 1709 l
-1416 1713 l
-1424 1717 l
-1441 1717 l
-1450 1713 l
-1454 1709 l
-1458 1701 l
-1458 1692 l
-1454 1684 l
-1445 1671 l
-1404 1630 l
-1462 1630 l
-S
-1 g
-Y
-682.1 1612.9 m
-682 1734 l
-782 1734 l
-782 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-711 1717 m
-757 1717 l
-732 1684 l
-745 1684 l
-753 1680 l
-757 1676 l
-761 1663 l
-761 1655 l
-757 1642 l
-749 1634 l
-736 1630 l
-724 1630 l
-711 1634 l
-707 1638 l
-703 1646 l
-S
-1 g
-Y
-2514.3 1612.9 m
-2514 1734 l
-2698 1734 l
-2698 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2539 1696 m
-2539 1701 l
-2544 1709 l
-2548 1713 l
-2556 1717 l
-2573 1717 l
-2581 1713 l
-2585 1709 l
-2589 1701 l
-2589 1692 l
-2585 1684 l
-2577 1671 l
-2535 1630 l
-2594 1630 l
-S
-2627 1717 m
-2673 1717 l
-2648 1684 l
-2660 1684 l
-2669 1680 l
-2673 1676 l
-2677 1663 l
-2677 1655 l
-2673 1642 l
-2665 1634 l
-2652 1630 l
-2640 1630 l
-2627 1634 l
-2623 1638 l
-2619 1646 l
-S
-1 g
-Y
-2826.8 1612.9 m
-2827 1734 l
-3011 1734 l
-3011 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2852 1696 m
-2852 1701 l
-2856 1709 l
-2860 1713 l
-2869 1717 l
-2885 1717 l
-2894 1713 l
-2898 1709 l
-2902 1701 l
-2902 1692 l
-2898 1684 l
-2889 1671 l
-2848 1630 l
-2906 1630 l
-S
-2935 1696 m
-2935 1701 l
-2940 1709 l
-2944 1713 l
-2952 1717 l
-2969 1717 l
-2977 1713 l
-2981 1709 l
-2985 1701 l
-2985 1692 l
-2981 1684 l
-2973 1671 l
-2931 1630 l
-2990 1630 l
-S
-1 g
-Y
-3158.7 1612.9 m
-3159 1734 l
-3317 1734 l
-3317 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-3184 1696 m
-3184 1701 l
-3188 1709 l
-3192 1713 l
-3200 1717 l
-3217 1717 l
-3226 1713 l
-3230 1709 l
-3234 1701 l
-3234 1692 l
-3230 1684 l
-3221 1671 l
-3180 1630 l
-3238 1630 l
-S
-3276 1701 m
-3284 1705 l
-3297 1717 l
-3297 1630 l
-S
-1 g
-Y
-3539 1612.9 m
-3539 1734 l
-3723 1734 l
-3723 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-3564 1696 m
-3564 1701 l
-3568 1709 l
-3572 1713 l
-3581 1717 l
-3597 1717 l
-3606 1713 l
-3610 1709 l
-3614 1701 l
-3614 1692 l
-3610 1684 l
-3602 1671 l
-3560 1630 l
-3618 1630 l
-S
-3668 1717 m
-3656 1713 l
-3648 1701 l
-3643 1680 l
-3643 1667 l
-3648 1646 l
-3656 1634 l
-3668 1630 l
-3677 1630 l
-3689 1634 l
-3698 1646 l
-3702 1667 l
-3702 1680 l
-3698 1701 l
-3689 1713 l
-3677 1717 l
-3668 1717 l
-S
-1 g
-Y
-3992.1 1612.9 m
-3992 1734 l
-4159 1734 l
-4159 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-4013 1701 m
-4021 1705 l
-4034 1717 l
-4034 1630 l
-S
-4138 1688 m
-4134 1676 l
-4126 1667 l
-4113 1663 l
-4109 1663 l
-4097 1667 l
-4088 1676 l
-4084 1688 l
-4084 1692 l
-4088 1705 l
-4097 1713 l
-4109 1717 l
-4113 1717 l
-4126 1713 l
-4134 1705 l
-4138 1688 l
-4138 1667 l
-4134 1646 l
-4126 1634 l
-4113 1630 l
-4105 1630 l
-4092 1634 l
-4088 1642 l
-S
-1 g
-Y
-4375 1612.9 m
-4375 1734 l
-4546 1734 l
-4546 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-4396 1701 m
-4404 1705 l
-4417 1717 l
-4417 1630 l
-S
-4488 1717 m
-4475 1713 l
-4471 1705 l
-4471 1696 l
-4475 1688 l
-4484 1684 l
-4500 1680 l
-4513 1676 l
-4521 1667 l
-4525 1659 l
-4525 1646 l
-4521 1638 l
-4517 1634 l
-4504 1630 l
-4488 1630 l
-4475 1634 l
-4471 1638 l
-4467 1646 l
-4467 1659 l
-4471 1667 l
-4479 1676 l
-4492 1680 l
-4509 1684 l
-4517 1688 l
-4521 1696 l
-4521 1705 l
-4517 1713 l
-4504 1717 l
-4488 1717 l
-S
-1 g
-Y
-324.3 2215.9 m
-324 2337 l
-508 2337 l
-508 2216 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-395 2320 m
-354 2320 l
-349 2283 l
-354 2287 l
-366 2291 l
-379 2291 l
-391 2287 l
-399 2279 l
-404 2266 l
-404 2258 l
-399 2245 l
-391 2237 l
-379 2233 l
-366 2233 l
-354 2237 l
-349 2241 l
-345 2249 l
-S
-454 2320 m
-441 2316 l
-433 2304 l
-429 2283 l
-429 2270 l
-433 2249 l
-441 2237 l
-454 2233 l
-462 2233 l
-475 2237 l
-483 2249 l
-487 2270 l
-487 2283 l
-483 2304 l
-475 2316 l
-462 2320 l
-454 2320 l
-S
-1 g
-Y
-328.5 3463.3 m
-328 3584 l
-508 3584 l
-508 3463 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-399 3555 m
-395 3564 l
-383 3568 l
-374 3568 l
-362 3564 l
-354 3551 l
-349 3530 l
-349 3509 l
-354 3493 l
-362 3484 l
-374 3480 l
-379 3480 l
-391 3484 l
-399 3493 l
-404 3505 l
-404 3509 l
-399 3522 l
-391 3530 l
-379 3534 l
-374 3534 l
-362 3530 l
-354 3522 l
-349 3509 l
-S
-454 3568 m
-441 3564 l
-433 3551 l
-429 3530 l
-429 3518 l
-433 3497 l
-441 3484 l
-454 3480 l
-462 3480 l
-475 3484 l
-483 3497 l
-487 3518 l
-487 3530 l
-483 3551 l
-475 3564 l
-462 3568 l
-454 3568 l
-S
-1 g
-Y
-324.3 4900 m
-324 5021 l
-508 5021 l
-508 4900 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-404 5004 m
-362 4917 l
-S
-345 5004 m
-404 5004 l
-S
-454 5004 m
-441 5000 l
-433 4988 l
-429 4967 l
-429 4954 l
-433 4933 l
-441 4921 l
-454 4917 l
-462 4917 l
-475 4921 l
-483 4933 l
-487 4954 l
-487 4967 l
-483 4988 l
-475 5000 l
-462 5004 l
-454 5004 l
-S
-1 g
-Y
-2021.5 1398.2 m
-2022 1553 l
-3070 1553 l
-3070 1398 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2042 1532 m
-2042 1444 l
-S
-2042 1532 m
-2080 1532 l
-2093 1528 l
-2097 1524 l
-2101 1515 l
-2101 1507 l
-2097 1498 l
-2093 1494 l
-2080 1490 l
-2042 1490 l
-S
-2072 1490 m
-2101 1444 l
-S
-2126 1532 m
-2130 1528 l
-2134 1532 l
-2130 1536 l
-2126 1532 l
-S
-2130 1503 m
-2130 1444 l
-S
-2209 1503 m
-2209 1436 l
-2205 1423 l
-2201 1419 l
-2193 1415 l
-2180 1415 l
-2172 1419 l
-S
-2209 1490 m
-2201 1498 l
-2193 1503 l
-2180 1503 l
-2172 1498 l
-2164 1490 l
-2159 1478 l
-2159 1469 l
-2164 1457 l
-2172 1448 l
-2180 1444 l
-2193 1444 l
-2201 1448 l
-2209 1457 l
-S
-2243 1532 m
-2243 1444 l
-S
-2243 1486 m
-2255 1498 l
-2264 1503 l
-2276 1503 l
-2285 1498 l
-2289 1486 l
-2289 1444 l
-S
-2326 1532 m
-2326 1461 l
-2331 1448 l
-2339 1444 l
-2347 1444 l
-S
-2314 1503 m
-2343 1503 l
-S
-2485 1503 m
-2485 1444 l
-S
-2485 1490 m
-2477 1498 l
-2468 1503 l
-2456 1503 l
-2448 1498 l
-2439 1490 l
-2435 1478 l
-2435 1469 l
-2439 1457 l
-2448 1448 l
-2456 1444 l
-2468 1444 l
-2477 1448 l
-2485 1457 l
-S
-2560 1490 m
-2556 1498 l
-2544 1503 l
-2531 1503 l
-2519 1498 l
-2514 1490 l
-2519 1482 l
-2527 1478 l
-2548 1473 l
-2556 1469 l
-2560 1461 l
-2560 1457 l
-2556 1448 l
-2544 1444 l
-2531 1444 l
-2519 1448 l
-2514 1457 l
-S
-2636 1490 m
-2627 1498 l
-2619 1503 l
-2606 1503 l
-2598 1498 l
-2590 1490 l
-2585 1478 l
-2585 1469 l
-2590 1457 l
-2598 1448 l
-2606 1444 l
-2619 1444 l
-2627 1448 l
-2636 1457 l
-S
-2661 1478 m
-2711 1478 l
-2711 1486 l
-2707 1494 l
-2702 1498 l
-2694 1503 l
-2681 1503 l
-2673 1498 l
-2665 1490 l
-2661 1478 l
-2661 1469 l
-2665 1457 l
-2673 1448 l
-2681 1444 l
-2694 1444 l
-2702 1448 l
-2711 1457 l
-S
-2740 1503 m
-2740 1444 l
-S
-2740 1486 m
-2752 1498 l
-2761 1503 l
-2773 1503 l
-2782 1498 l
-2786 1486 l
-2786 1444 l
-S
-2861 1490 m
-2857 1498 l
-2844 1503 l
-2832 1503 l
-2819 1498 l
-2815 1490 l
-2819 1482 l
-2828 1478 l
-2849 1473 l
-2857 1469 l
-2861 1461 l
-2861 1457 l
-2857 1448 l
-2844 1444 l
-2832 1444 l
-2819 1448 l
-2815 1457 l
-S
-2886 1532 m
-2890 1528 l
-2894 1532 l
-2890 1536 l
-2886 1532 l
-S
-2890 1503 m
-2890 1444 l
-S
-2940 1503 m
-2932 1498 l
-2924 1490 l
-2920 1478 l
-2920 1469 l
-2924 1457 l
-2932 1448 l
-2940 1444 l
-2953 1444 l
-2961 1448 l
-2970 1457 l
-2974 1469 l
-2974 1478 l
-2970 1490 l
-2961 1498 l
-2953 1503 l
-2940 1503 l
-S
-3003 1503 m
-3003 1444 l
-S
-3003 1486 m
-3016 1498 l
-3024 1503 l
-3036 1503 l
-3045 1498 l
-3049 1486 l
-3049 1444 l
-S
-1 g
-Y
-285 3592.2 m
-160 3592 l
-160 4306 l
-285 4306 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-181 3613 m
-268 3613 l
-S
-181 3613 m
-181 3642 l
-185 3655 l
-193 3663 l
-201 3667 l
-214 3672 l
-235 3672 l
-247 3667 l
-256 3663 l
-264 3655 l
-268 3642 l
-268 3613 l
-S
-235 3697 m
-235 3747 l
-227 3747 l
-218 3743 l
-214 3738 l
-210 3730 l
-210 3718 l
-214 3709 l
-222 3701 l
-235 3697 l
-243 3697 l
-256 3701 l
-264 3709 l
-268 3718 l
-268 3730 l
-264 3738 l
-256 3747 l
-S
-222 3822 m
-214 3814 l
-210 3805 l
-210 3793 l
-214 3784 l
-222 3776 l
-235 3772 l
-243 3772 l
-256 3776 l
-264 3784 l
-268 3793 l
-268 3805 l
-264 3814 l
-256 3822 l
-S
-181 3851 m
-268 3851 l
-S
-181 3880 m
-185 3885 l
-181 3889 l
-176 3885 l
-181 3880 l
-S
-210 3885 m
-268 3885 l
-S
-210 3918 m
-268 3918 l
-S
-227 3918 m
-214 3931 l
-210 3939 l
-210 3951 l
-214 3960 l
-227 3964 l
-268 3964 l
-S
-210 4043 m
-268 4043 l
-S
-222 4043 m
-214 4035 l
-210 4027 l
-210 4014 l
-214 4006 l
-222 3997 l
-235 3993 l
-243 3993 l
-256 3997 l
-264 4006 l
-268 4014 l
-268 4027 l
-264 4035 l
-256 4043 l
-S
-181 4081 m
-252 4081 l
-264 4085 l
-268 4093 l
-268 4102 l
-S
-210 4068 m
-210 4098 l
-S
-181 4123 m
-185 4127 l
-181 4131 l
-176 4127 l
-181 4123 l
-S
-210 4127 m
-268 4127 l
-S
-210 4177 m
-214 4169 l
-222 4160 l
-235 4156 l
-243 4156 l
-256 4160 l
-264 4169 l
-268 4177 l
-268 4189 l
-264 4198 l
-256 4206 l
-243 4210 l
-235 4210 l
-222 4206 l
-214 4198 l
-210 4189 l
-210 4177 l
-S
-210 4240 m
-268 4240 l
-S
-227 4240 m
-214 4252 l
-210 4261 l
-210 4273 l
-214 4281 l
-227 4286 l
-268 4286 l
-S
-1 g
-Y
-924.3 6283 m
-924 6468 l
-4172 6468 l
-4172 6283 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-949 6443 m
-949 6338 l
-S
-949 6443 m
-1015 6443 l
-S
-949 6393 m
-989 6393 l
-S
-1040 6443 m
-1040 6338 l
-S
-1110 6443 m
-1040 6373 l
-S
-1065 6398 m
-1110 6338 l
-S
-1200 6443 m
-1150 6443 l
-1145 6398 l
-1150 6403 l
-1165 6408 l
-1180 6408 l
-1195 6403 l
-1205 6393 l
-1210 6378 l
-1210 6368 l
-1205 6353 l
-1195 6343 l
-1180 6338 l
-1165 6338 l
-1150 6343 l
-1145 6348 l
-1140 6358 l
-S
-1380 6393 m
-1370 6403 l
-1360 6408 l
-1345 6408 l
-1335 6403 l
-1325 6393 l
-1320 6378 l
-1320 6368 l
-1325 6353 l
-1335 6343 l
-1345 6338 l
-1360 6338 l
-1370 6343 l
-1380 6353 l
-S
-1436 6408 m
-1426 6403 l
-1415 6393 l
-1410 6378 l
-1410 6368 l
-1415 6353 l
-1426 6343 l
-1436 6338 l
-1451 6338 l
-1461 6343 l
-1471 6353 l
-1476 6368 l
-1476 6378 l
-1471 6393 l
-1461 6403 l
-1451 6408 l
-1436 6408 l
-S
-1531 6408 m
-1521 6403 l
-1511 6393 l
-1506 6378 l
-1506 6368 l
-1511 6353 l
-1521 6343 l
-1531 6338 l
-1546 6338 l
-1556 6343 l
-1566 6353 l
-1571 6368 l
-1571 6378 l
-1566 6393 l
-1556 6403 l
-1546 6408 l
-1531 6408 l
-S
-1606 6408 m
-1606 6338 l
-S
-1606 6378 m
-1611 6393 l
-1621 6403 l
-1631 6408 l
-1646 6408 l
-S
-1726 6443 m
-1726 6338 l
-S
-1726 6393 m
-1716 6403 l
-1706 6408 l
-1691 6408 l
-1681 6403 l
-1671 6393 l
-1666 6378 l
-1666 6368 l
-1671 6353 l
-1681 6343 l
-1691 6338 l
-1706 6338 l
-1716 6343 l
-1726 6353 l
-S
-1761 6443 m
-1766 6438 l
-1771 6443 l
-1766 6448 l
-1761 6443 l
-S
-1766 6408 m
-1766 6338 l
-S
-1806 6408 m
-1806 6338 l
-S
-1806 6388 m
-1821 6403 l
-1831 6408 l
-1847 6408 l
-1857 6403 l
-1862 6388 l
-1862 6338 l
-S
-1957 6408 m
-1957 6338 l
-S
-1957 6393 m
-1947 6403 l
-1937 6408 l
-1922 6408 l
-1912 6403 l
-1902 6393 l
-1897 6378 l
-1897 6368 l
-1902 6353 l
-1912 6343 l
-1922 6338 l
-1937 6338 l
-1947 6343 l
-1957 6353 l
-S
-2002 6443 m
-2002 6358 l
-2007 6343 l
-2017 6338 l
-2027 6338 l
-S
-1987 6408 m
-2022 6408 l
-S
-2052 6378 m
-2112 6378 l
-2112 6388 l
-2107 6398 l
-2102 6403 l
-2092 6408 l
-2077 6408 l
-2067 6403 l
-2057 6393 l
-2052 6378 l
-2052 6368 l
-2057 6353 l
-2067 6343 l
-2077 6338 l
-2092 6338 l
-2102 6343 l
-2112 6353 l
-S
-2197 6393 m
-2192 6403 l
-2177 6408 l
-2162 6408 l
-2147 6403 l
-2142 6393 l
-2147 6383 l
-2157 6378 l
-2182 6373 l
-2192 6368 l
-2197 6358 l
-2197 6353 l
-2192 6343 l
-2177 6338 l
-2162 6338 l
-2147 6343 l
-2142 6353 l
-S
-2237 6408 m
-2232 6403 l
-2237 6398 l
-2242 6403 l
-2237 6408 l
-S
-2242 6343 m
-2237 6338 l
-2232 6343 l
-2237 6348 l
-2242 6343 l
-2242 6333 l
-2237 6323 l
-2232 6318 l
-S
-2363 6408 m
-2363 6338 l
-S
-2363 6388 m
-2378 6403 l
-2388 6408 l
-2403 6408 l
-2413 6403 l
-2418 6388 l
-2418 6338 l
-S
-2418 6388 m
-2433 6403 l
-2443 6408 l
-2458 6408 l
-2468 6403 l
-2473 6388 l
-2473 6338 l
-S
-2508 6378 m
-2568 6378 l
-2568 6388 l
-2563 6398 l
-2558 6403 l
-2548 6408 l
-2533 6408 l
-2523 6403 l
-2513 6393 l
-2508 6378 l
-2508 6368 l
-2513 6353 l
-2523 6343 l
-2533 6338 l
-2548 6338 l
-2558 6343 l
-2568 6353 l
-S
-2658 6408 m
-2658 6338 l
-S
-2658 6393 m
-2648 6403 l
-2638 6408 l
-2623 6408 l
-2613 6403 l
-2603 6393 l
-2598 6378 l
-2598 6368 l
-2603 6353 l
-2613 6343 l
-2623 6338 l
-2638 6338 l
-2648 6343 l
-2658 6353 l
-S
-2699 6408 m
-2699 6338 l
-S
-2699 6388 m
-2714 6403 l
-2724 6408 l
-2739 6408 l
-2749 6403 l
-2754 6388 l
-2754 6338 l
-S
-2869 6378 m
-2929 6378 l
-2929 6388 l
-2924 6398 l
-2919 6403 l
-2909 6408 l
-2894 6408 l
-2884 6403 l
-2874 6393 l
-2869 6378 l
-2869 6368 l
-2874 6353 l
-2884 6343 l
-2894 6338 l
-2909 6338 l
-2919 6343 l
-2929 6353 l
-S
-3019 6408 m
-3019 6303 l
-S
-3019 6393 m
-3009 6403 l
-2999 6408 l
-2984 6408 l
-2974 6403 l
-2964 6393 l
-2959 6378 l
-2959 6368 l
-2964 6353 l
-2974 6343 l
-2984 6338 l
-2999 6338 l
-3009 6343 l
-3019 6353 l
-S
-3059 6408 m
-3059 6358 l
-3064 6343 l
-3074 6338 l
-3090 6338 l
-3100 6343 l
-3115 6358 l
-S
-3115 6408 m
-3115 6338 l
-S
-3150 6443 m
-3155 6438 l
-3160 6443 l
-3155 6448 l
-3150 6443 l
-S
-3155 6408 m
-3155 6338 l
-S
-3195 6408 m
-3195 6338 l
-S
-3195 6388 m
-3210 6403 l
-3220 6408 l
-3235 6408 l
-3245 6403 l
-3250 6388 l
-3250 6338 l
-S
-3310 6408 m
-3300 6403 l
-3290 6393 l
-3285 6378 l
-3285 6368 l
-3290 6353 l
-3300 6343 l
-3310 6338 l
-3325 6338 l
-3335 6343 l
-3345 6353 l
-3350 6368 l
-3350 6378 l
-3345 6393 l
-3335 6403 l
-3325 6408 l
-3310 6408 l
-S
-3380 6408 m
-3435 6338 l
-S
-3435 6408 m
-3380 6338 l
-S
-3591 6443 m
-3591 6363 l
-3586 6348 l
-3581 6343 l
-3571 6338 l
-3561 6338 l
-3551 6343 l
-3546 6348 l
-3541 6363 l
-3541 6373 l
-S
-3631 6418 m
-3631 6423 l
-3636 6433 l
-3641 6438 l
-3651 6443 l
-3671 6443 l
-3681 6438 l
-3686 6433 l
-3691 6423 l
-3691 6413 l
-3686 6403 l
-3676 6388 l
-3626 6338 l
-3696 6338 l
-S
-3756 6443 m
-3741 6438 l
-3731 6423 l
-3726 6398 l
-3726 6383 l
-3731 6358 l
-3741 6343 l
-3756 6338 l
-3766 6338 l
-3781 6343 l
-3791 6358 l
-3796 6383 l
-3796 6398 l
-3791 6423 l
-3781 6438 l
-3766 6443 l
-3756 6443 l
-S
-3856 6443 m
-3841 6438 l
-3831 6423 l
-3826 6398 l
-3826 6383 l
-3831 6358 l
-3841 6343 l
-3856 6338 l
-3866 6338 l
-3881 6343 l
-3891 6358 l
-3896 6383 l
-3896 6398 l
-3891 6423 l
-3881 6438 l
-3866 6443 l
-3856 6443 l
-S
-3957 6443 m
-3942 6438 l
-3932 6423 l
-3927 6398 l
-3927 6383 l
-3932 6358 l
-3942 6343 l
-3957 6338 l
-3967 6338 l
-3982 6343 l
-3992 6358 l
-3997 6383 l
-3997 6398 l
-3992 6423 l
-3982 6438 l
-3967 6443 l
-3957 6443 l
-S
-4037 6348 m
-4032 6343 l
-4037 6338 l
-4042 6343 l
-4037 6348 l
-S
-4107 6443 m
-4092 6438 l
-4082 6423 l
-4077 6398 l
-4077 6383 l
-4082 6358 l
-4092 6343 l
-4107 6338 l
-4117 6338 l
-4132 6343 l
-4142 6358 l
-4147 6383 l
-4147 6398 l
-4142 6423 l
-4132 6438 l
-4117 6443 l
-4107 6443 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/parallel.eps b/ast-5.3-1/sun211_figures/parallel.eps
deleted file mode 100644
index 5baa971..0000000
--- a/ast-5.3-1/sun211_figures/parallel.eps
+++ /dev/null
@@ -1,988 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 152 155 463 420
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/05 14:50:56
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-4253.75 3863.75 m
-4253.75 4016.15 4128.95 4140.95 3976.55 4140.95 c
-2309.75 4140.95 l
-2157.35 4140.95 2032.55 4016.15 2032.55 3863.75 c
-2032.55 1836.95 l
-2032.55 1684.55 2157.35 1559.75 2309.75 1559.75 c
-3976.55 1559.75 l
-4128.95 1559.75 4253.75 1684.55 4253.75 1836.95 c
-f*
-1 g
-4188.95 3918.95 m
-4188.95 4071.35 4065.35 4194.95 3912.95 4194.95 c
-2254.55 4194.95 l
-2102.15 4194.95 1978.55 4071.35 1978.55 3918.95 c
-1978.55 1900.55 l
-1978.55 1748.15 2102.15 1624.55 2254.55 1624.55 c
-3912.95 1624.55 l
-4065.35 1624.55 4188.95 1748.15 4188.95 1900.55 c
-f*
-8 w
-1 J
-1 j
-0 g
-4188.95 3918.95 m
-4188.95 4071.35 4065.35 4194.95 3912.95 4194.95 c
-2254.55 4194.95 l
-2102.15 4194.95 1978.55 4071.35 1978.55 3918.95 c
-1978.55 1900.55 l
-1978.55 1748.15 2102.15 1624.55 2254.55 1624.55 c
-3912.95 1624.55 l
-4065.35 1624.55 4188.95 1748.15 4188.95 1900.55 c
-h
-S
-1983.35 3352.55 308.4 103.2 re
-Y
-1983.35 3360.95 m
-2283.35 3448.55 l
-S
-0 0 6120 7920 re
-Y
-2022.95 3362.15 m
-2022.95 3383.75 2004.95 3401.75 1983.35 3401.75 c
-1960.55 3401.75 1942.55 3383.75 1942.55 3362.15 c
-1942.55 3340.55 1960.55 3322.55 1983.35 3322.55 c
-2004.95 3322.55 2022.95 3340.55 2022.95 3362.15 c
-f*
-2259.35 3392.15 m
-2265.35 3442.55 l
-2234.15 3482.15 l
-2393.75 3479.75 l
-f*
-0.564706 g
-3833.75 3651.35 m
-3833.75 3722.15 3776.15 3780.95 3704.15 3780.95 c
-2582.15 3780.95 l
-2510.15 3780.95 2452.55 3722.15 2452.55 3651.35 c
-2452.55 2872.55 l
-2452.55 2800.55 2510.15 2742.95 2582.15 2742.95 c
-3704.15 2742.95 l
-3776.15 2742.95 3833.75 2800.55 3833.75 2872.55 c
-f*
-1 g
-3768.95 3706.55 m
-3768.95 3777.35 3712.55 3834.95 3640.55 3834.95 c
-2526.95 3834.95 l
-2456.15 3834.95 2398.55 3777.35 2398.55 3706.55 c
-2398.55 2934.95 l
-2398.55 2865.35 2456.15 2807.75 2526.95 2807.75 c
-3640.55 2807.75 l
-3711.35 2807.75 3768.95 2865.35 3768.95 2934.95 c
-f*
-0 g
-3768.95 3706.55 m
-3768.95 3777.35 3712.55 3834.95 3640.55 3834.95 c
-2526.95 3834.95 l
-2456.15 3834.95 2398.55 3777.35 2398.55 3706.55 c
-2398.55 2934.95 l
-2398.55 2865.35 2456.15 2807.75 2526.95 2807.75 c
-3640.55 2807.75 l
-3711.35 2807.75 3768.95 2865.35 3768.95 2934.95 c
-h
-S
-0.564706 g
-3833.75 2325.35 m
-3833.75 2367.35 3800.15 2400.95 3758.15 2400.95 c
-2528.15 2400.95 l
-2486.15 2400.95 2452.55 2367.35 2452.55 2325.35 c
-2452.55 1875.35 l
-2452.55 1833.35 2486.15 1799.75 2528.15 1799.75 c
-3758.15 1799.75 l
-3800.15 1799.75 3833.75 1833.35 3833.75 1875.35 c
-f*
-1 g
-3768.95 2381.75 m
-3768.95 2422.55 3736.55 2454.95 3694.55 2454.95 c
-2472.95 2454.95 l
-2430.95 2454.95 2398.55 2422.55 2398.55 2381.75 c
-2398.55 1937.75 l
-2398.55 1896.95 2430.95 1864.55 2472.95 1864.55 c
-3694.55 1864.55 l
-3736.55 1864.55 3768.95 1896.95 3768.95 1937.75 c
-f*
-0 g
-3768.95 2381.75 m
-3768.95 2422.55 3736.55 2454.95 3694.55 2454.95 c
-2472.95 2454.95 l
-2430.95 2454.95 2398.55 2422.55 2398.55 2381.75 c
-2398.55 1937.75 l
-2398.55 1896.95 2430.95 1864.55 2472.95 1864.55 c
-3694.55 1864.55 l
-3736.55 1864.55 3768.95 1896.95 3768.95 1937.75 c
-h
-S
-1983.35 2932.55 320.4 190.8 re
-Y
-1983.35 2940.95 m
-2295.35 3123.35 l
-S
-0 0 6120 7920 re
-Y
-2022.95 2942.15 m
-2022.95 2963.75 2004.95 2981.75 1983.35 2981.75 c
-1960.55 2981.75 1942.55 2963.75 1942.55 2942.15 c
-1942.55 2920.55 1960.55 2902.55 1983.35 2902.55 c
-2004.95 2902.55 2022.95 2920.55 2022.95 2942.15 c
-f*
-2285.75 3062.15 m
-2277.35 3112.55 l
-2237.75 3144.95 l
-2393.75 3179.75 l
-f*
-0.2 i
-2762 3384.14 m
-2762 3302.6 l
-2762 3287.66 2759.88 3285.32 2745.94 3284.42 c
-2745.94 3281 l
-2796.34 3281 l
-2796.34 3284.42 l
-2783.2 3285.32 2781 3287.84 2781 3300.62 c
-2781 3380.54 l
-2781 3393.32 2783.29 3395.66 2796.34 3396.74 c
-2796.34 3400 l
-2760.52 3400 l
-2720.74 3309.26 l
-2679.16 3400 l
-2643.52 3400 l
-2643.52 3397 l
-2658.28 3396.09 2661 3393.89 2661 3380.54 c
-2661 3307.46 l
-2661 3288.92 2658.43 3285.5 2643.16 3284.42 c
-2643.16 3281 l
-2685.46 3281 l
-2685.46 3284 l
-2671.6 3284.73 2669 3288.95 2669 3307.46 c
-2669 3380 l
-2713.72 3281 l
-2716.24 3281 l
-h
-2801.02 3281 m
-f*
-2880.56 3292.88 m
-2877.5 3290.36 2875.34 3289.2 2872.64 3289.2 c
-2868.5 3289.2 2867 3291.78 2867 3299.9 c
-2867 3335 l
-2867 3344.18 2866.16 3349.22 2863.82 3353.36 c
-2860.04 3360.2 2852.3 3363.8 2841.32 3363.8 c
-2832.14 3363.8 2823.5 3361.28 2818.46 3357.14 c
-2813.96 3353.36 2811 3348.14 2811 3343.64 c
-2811 3339.5 2814.46 3335.9 2818.82 3335.9 c
-2823.14 3335.9 2826.92 3339.5 2826.92 3343.46 c
-2826.92 3344.18 2826.74 3345.08 2826.56 3346.34 c
-2826.2 3347.96 2826 3349.4 2826 3350.66 c
-2826 3355.52 2831.77 3359.8 2838.98 3359.8 c
-2847.8 3359.8 2852 3354.47 2852 3344.54 c
-2852 3333.56 l
-2824.76 3322.4 2821.75 3320.96 2814.14 3314.12 c
-2810.18 3310.52 2807.66 3304.4 2807.66 3298.46 c
-2807.66 3287.12 2815.4 3279.2 2826.56 3279.2 c
-2834.48 3279.2 2841.86 3282.98 2852.84 3292.34 c
-2853.74 3282.8 2856.98 3279.2 2864.36 3279.2 c
-2870.48 3279.2 2874.26 3281.36 2880.56 3288.2 c
-h
-2852 3303.14 m
-2852 3297.56 2851.23 3295.94 2847.98 3293.6 c
-2843.66 3291.08 2838.62 3289.2 2834.84 3289.2 c
-2828.54 3289.2 2823.48 3295.51 2823.48 3303.5 c
-2823.48 3304.22 l
-2823.48 3314.84 2830.7 3321.32 2852 3329.24 c
-h
-2880.92 3281 m
-f*
-2882.62 3351.74 m
-2884.24 3351.92 2885.5 3351.92 2887.12 3351.92 c
-2893.24 3351.92 2895 3350.12 2895 3341.66 c
-2895 3257.42 l
-2895 3248.06 2892.94 3246.08 2881.9 3245 c
-2881.9 3242 l
-2925.46 3242 l
-2925.46 3245 l
-2911.96 3245.18 2910 3247.19 2910 3258.68 c
-2910 3286.94 l
-2916.34 3281 2920.4 3279.2 2927.8 3279.2 c
-2949.22 3279.2 2965 3299.36 2965 3325.46 c
-2965 3347.78 2952.65 3363.8 2935.54 3363.8 c
-2925.61 3363.8 2917.8 3359.48 2910 3349.58 c
-2910 3363.44 l
-2908.54 3363.8 l
-2899 3360.02 2892.52 3357.68 2882.62 3354.62 c
-h
-2910 3341.12 m
-2910 3346.52 2919.87 3352.8 2927.98 3352.8 c
-2941.3 3352.8 2950 3339.2 2950 3318.26 c
-2950 3298.46 2941.23 3284.2 2928.34 3284.2 c
-2919.88 3284.2 2910 3291.09 2910 3296.84 c
-h
-2971 3281 m
-f*
-2972.62 3351.74 m
-2974.24 3351.92 2975.5 3351.92 2977.12 3351.92 c
-2983.24 3351.92 2985 3350.12 2985 3341.66 c
-2985 3257.42 l
-2985 3248.06 2982.94 3246.08 2971.9 3245 c
-2971.9 3242 l
-3015.46 3242 l
-3015.46 3245 l
-3001.96 3245.18 3000 3247.19 3000 3258.68 c
-3000 3286.94 l
-3006.34 3281 3010.4 3279.2 3017.8 3279.2 c
-3039.22 3279.2 3055 3299.36 3055 3325.46 c
-3055 3347.78 3042.65 3363.8 3025.54 3363.8 c
-3015.61 3363.8 3007.8 3359.48 3000 3349.58 c
-3000 3363.44 l
-2998.54 3363.8 l
-2989 3360.02 2982.52 3357.68 2972.62 3354.62 c
-h
-3000 3341.12 m
-3000 3346.52 3009.87 3352.8 3017.98 3352.8 c
-3031.3 3352.8 3040 3339.2 3040 3318.26 c
-3040 3298.46 3031.23 3284.2 3018.34 3284.2 c
-3009.88 3284.2 3000 3291.09 3000 3296.84 c
-h
-3061 3281 m
-f*
-3092.5 3363.8 m
-3064.6 3353.9 l
-3064.6 3351.2 l
-3066.04 3351.38 l
-3068.2 3351.74 3070.54 3351.72 3072.16 3351.72 c
-3076.48 3351.72 3078 3348.89 3078 3341.12 c
-3078 3299.36 l
-3078 3286.4 3076.21 3284.42 3063.88 3283.7 c
-3063.88 3281 l
-3106.54 3281 l
-3106.54 3283.7 l
-3094.66 3284.6 3093 3286.4 3093 3299.36 c
-3093 3363.26 l
-h
-3084.22 3404 m
-3079.18 3404 3075 3399.83 3075 3394.76 c
-3075 3389.54 3078.98 3386 3084.04 3386 c
-3089.44 3386 3094 3389.78 3094 3394.76 c
-3094 3399.8 3089.59 3404 3084.22 3404 c
-h
-3111.04 3281 m
-f*
-3113.88 3352.64 m
-3115.14 3353.18 3116.76 3353.36 3118.74 3353.36 c
-3123.78 3353.36 3125 3350.66 3125 3341.84 c
-3125 3297.2 l
-3125 3286.94 3123.09 3284.42 3114.24 3283.7 c
-3114.24 3281 l
-3152.4 3281 l
-3152.4 3283.7 l
-3143.22 3284.42 3140 3286.58 3140 3293.06 c
-3140 3343.64 l
-3148.7 3351.74 3152.95 3353.8 3159.06 3353.8 c
-3167.88 3353.8 3172 3348.25 3172 3336.44 c
-3172 3298.82 l
-3172 3287.48 3169.7 3284.42 3160.86 3283.7 c
-3160.86 3281 l
-3198.3 3281 l
-3198.3 3283.7 l
-3189.48 3284.6 3187 3286.76 3187 3295.58 c
-3187 3336.8 l
-3187 3353.72 3179.2 3363.8 3166.08 3363.8 c
-3157.64 3363.8 3151.94 3360.74 3139.46 3349.22 c
-3139.46 3363.44 l
-3138.72 3363.8 l
-3129.9 3360.56 3123.78 3358.58 3113.88 3355.7 c
-h
-3201 3281 m
-f*
-3285.6 3351 m
-3285.6 3358 l
-3271.74 3358 l
-3268.14 3358 3265.44 3358.5 3261.84 3359.66 c
-3257.88 3361.1 l
-3253.02 3362.9 3248.16 3363.8 3243.48 3363.8 c
-3226.74 3363.8 3213.38 3350.84 3213.38 3334.46 c
-3213.38 3323.12 3218.07 3316.28 3230.16 3310.34 c
-3227.64 3307.82 3225.12 3305.48 3222.42 3303.14 c
-3216.48 3297.92 3214.1 3294.32 3214.1 3290.72 c
-3214.1 3286.76 3216.09 3284.78 3223.68 3281.18 c
-3210.72 3271.82 3206 3265.88 3206 3259.22 c
-3206 3249.68 3219.88 3242 3237.18 3242 c
-3250.14 3242 3263.82 3246.23 3273.18 3253.28 c
-3280.56 3259.04 3284 3264.98 3284 3272.18 c
-3284 3283.34 3275.53 3290.9 3262.2 3291.44 c
-3238.98 3292.52 l
-3229.26 3292.88 3224.94 3294.5 3224.94 3297.38 c
-3224.94 3300.98 3230.88 3307.28 3235.74 3308.72 c
-3239.16 3308.36 l
-3242.4 3308 3244.92 3308 3246 3308 c
-3252.3 3308 3259.32 3310.46 3264.72 3314.84 c
-3271.2 3319.88 3274 3326.36 3274 3335.72 c
-3274 3341 3273.12 3345.18 3270.66 3351 c
-h
-3227.46 3280.64 m
-3233.58 3279.38 3247.8 3278.3 3256.62 3278.3 c
-3273 3278.3 3279 3276.14 3279 3269.48 c
-3279 3259.04 3265.3 3252 3244.74 3252 c
-3228.9 3252 3219 3257.23 3219 3265.16 c
-3219 3269.3 3220.55 3272 3227.46 3280.64 c
-h
-3228.36 3341.84 m
-3228.36 3352.46 3233.4 3358.8 3241.68 3358.8 c
-3247.26 3358.8 3251.94 3355.73 3254.82 3350.3 c
-3258.24 3344 3260 3335.9 3260 3328.52 c
-3260 3318.62 3254.87 3313 3246.9 3313 c
-3235.74 3313 3228.36 3324.43 3228.36 3341.3 c
-h
-3291 3281 m
-f*
-3336 3281 m
-f*
-3463.08 3284.42 m
-3454.98 3284.96 3453.18 3286.76 3446.88 3300.08 c
-3402.06 3402.16 l
-3398.46 3402.16 l
-3361.02 3313.94 l
-3349.5 3287.66 3347.34 3284.96 3338.7 3284.42 c
-3338.7 3281 l
-3374.34 3281 l
-3374.34 3284.82 l
-3365.7 3284.82 3362.1 3287.03 3362.1 3291.8 c
-3362.1 3293.96 3362.64 3296.48 3363.54 3298.82 c
-3371.82 3320 l
-3418.98 3320 l
-3426.36 3302.6 l
-3428.52 3297.56 3429.78 3293.06 3429.78 3290.36 c
-3429.78 3288.74 3428.7 3286.76 3427.26 3286.04 c
-3425.1 3284.78 3423.66 3284.82 3417.18 3284.82 c
-3417.18 3281 l
-3463.08 3281 l
-h
-3374.88 3327 m
-3395.58 3376.76 l
-3416.46 3327 l
-h
-3465.96 3281 m
-f*
-2827 2184.14 m
-2827 2102.6 l
-2827 2087.66 2824.88 2085.32 2810.94 2084.42 c
-2810.94 2081 l
-2861.34 2081 l
-2861.34 2084.42 l
-2848.2 2085.32 2846 2087.84 2846 2100.62 c
-2846 2180.54 l
-2846 2193.32 2848.29 2195.66 2861.34 2196.74 c
-2861.34 2200 l
-2825.52 2200 l
-2785.74 2109.26 l
-2744.16 2200 l
-2708.52 2200 l
-2708.52 2197 l
-2723.28 2196.09 2726 2193.89 2726 2180.54 c
-2726 2107.46 l
-2726 2088.92 2723.43 2085.5 2708.16 2084.42 c
-2708.16 2081 l
-2750.46 2081 l
-2750.46 2084 l
-2736.6 2084.73 2734 2088.95 2734 2107.46 c
-2734 2180 l
-2778.72 2081 l
-2781.24 2081 l
-h
-2866.02 2081 m
-f*
-2946.56 2092.88 m
-2943.5 2090.36 2941.34 2089.2 2938.64 2089.2 c
-2934.5 2089.2 2933 2091.78 2933 2099.9 c
-2933 2135 l
-2933 2144.18 2932.16 2149.22 2929.82 2153.36 c
-2926.04 2160.2 2918.3 2163.8 2907.32 2163.8 c
-2898.14 2163.8 2889.5 2161.28 2884.46 2157.14 c
-2879.96 2153.36 2877 2148.14 2877 2143.64 c
-2877 2139.5 2880.46 2135.9 2884.82 2135.9 c
-2889.14 2135.9 2892.92 2139.5 2892.92 2143.46 c
-2892.92 2144.18 2892.74 2145.08 2892.56 2146.34 c
-2892.2 2147.96 2892 2149.4 2892 2150.66 c
-2892 2155.52 2897.77 2159.8 2904.98 2159.8 c
-2913.8 2159.8 2918 2154.47 2918 2144.54 c
-2918 2133.56 l
-2890.76 2122.4 2887.75 2120.96 2880.14 2114.12 c
-2876.18 2110.52 2873.66 2104.4 2873.66 2098.46 c
-2873.66 2087.12 2881.4 2079.2 2892.56 2079.2 c
-2900.48 2079.2 2907.86 2082.98 2918.84 2092.34 c
-2919.74 2082.8 2922.98 2079.2 2930.36 2079.2 c
-2936.48 2079.2 2940.26 2081.36 2946.56 2088.2 c
-h
-2918 2103.14 m
-2918 2097.56 2917.23 2095.94 2913.98 2093.6 c
-2909.66 2091.08 2904.62 2089.2 2900.84 2089.2 c
-2894.54 2089.2 2889.48 2095.51 2889.48 2103.5 c
-2889.48 2104.22 l
-2889.48 2114.84 2896.7 2121.32 2918 2129.24 c
-h
-2946.92 2081 m
-f*
-2947.62 2151.74 m
-2949.24 2151.92 2950.5 2151.92 2952.12 2151.92 c
-2958.24 2151.92 2960 2150.12 2960 2141.66 c
-2960 2057.42 l
-2960 2048.06 2957.94 2046.08 2946.9 2045 c
-2946.9 2042 l
-2990.46 2042 l
-2990.46 2045 l
-2976.96 2045.18 2975 2047.19 2975 2058.68 c
-2975 2086.94 l
-2981.34 2081 2985.4 2079.2 2992.8 2079.2 c
-3014.22 2079.2 3030 2099.36 3030 2125.46 c
-3030 2147.78 3017.65 2163.8 3000.54 2163.8 c
-2990.61 2163.8 2982.8 2159.48 2975 2149.58 c
-2975 2163.44 l
-2973.54 2163.8 l
-2964 2160.02 2957.52 2157.68 2947.62 2154.62 c
-h
-2975 2141.12 m
-2975 2146.52 2984.87 2152.8 2992.98 2152.8 c
-3006.3 2152.8 3015 2139.2 3015 2118.26 c
-3015 2098.46 3006.23 2084.2 2993.34 2084.2 c
-2984.88 2084.2 2975 2091.09 2975 2096.84 c
-h
-3036 2081 m
-f*
-3037.62 2151.74 m
-3039.24 2151.92 3040.5 2151.92 3042.12 2151.92 c
-3048.24 2151.92 3050 2150.12 3050 2141.66 c
-3050 2057.42 l
-3050 2048.06 3047.94 2046.08 3036.9 2045 c
-3036.9 2042 l
-3080.46 2042 l
-3080.46 2045 l
-3066.96 2045.18 3065 2047.19 3065 2058.68 c
-3065 2086.94 l
-3071.34 2081 3075.4 2079.2 3082.8 2079.2 c
-3104.22 2079.2 3120 2099.36 3120 2125.46 c
-3120 2147.78 3107.65 2163.8 3090.54 2163.8 c
-3080.61 2163.8 3072.8 2159.48 3065 2149.58 c
-3065 2163.44 l
-3063.54 2163.8 l
-3054 2160.02 3047.52 2157.68 3037.62 2154.62 c
-h
-3065 2141.12 m
-3065 2146.52 3074.87 2152.8 3082.98 2152.8 c
-3096.3 2152.8 3105 2139.2 3105 2118.26 c
-3105 2098.46 3096.23 2084.2 3083.34 2084.2 c
-3074.88 2084.2 3065 2091.09 3065 2096.84 c
-h
-3126 2081 m
-f*
-3157.5 2163.8 m
-3129.6 2153.9 l
-3129.6 2151.2 l
-3131.04 2151.38 l
-3133.2 2151.74 3135.54 2151.72 3137.16 2151.72 c
-3141.48 2151.72 3143 2148.89 3143 2141.12 c
-3143 2099.36 l
-3143 2086.4 3141.21 2084.42 3128.88 2083.7 c
-3128.88 2081 l
-3171.54 2081 l
-3171.54 2083.7 l
-3159.66 2084.6 3158 2086.4 3158 2099.36 c
-3158 2163.26 l
-h
-3149.22 2204 m
-3144.18 2204 3140 2199.83 3140 2194.76 c
-3140 2189.54 3143.98 2186 3149.04 2186 c
-3154.44 2186 3159 2189.78 3159 2194.76 c
-3159 2199.8 3154.59 2204 3149.22 2204 c
-h
-3176.04 2081 m
-f*
-3178.88 2152.64 m
-3180.14 2153.18 3181.76 2153.36 3183.74 2153.36 c
-3188.78 2153.36 3190 2150.66 3190 2141.84 c
-3190 2097.2 l
-3190 2086.94 3188.09 2084.42 3179.24 2083.7 c
-3179.24 2081 l
-3217.4 2081 l
-3217.4 2083.7 l
-3208.22 2084.42 3205 2086.58 3205 2093.06 c
-3205 2143.64 l
-3213.7 2151.74 3217.95 2153.8 3224.06 2153.8 c
-3232.88 2153.8 3237 2148.25 3237 2136.44 c
-3237 2098.82 l
-3237 2087.48 3234.7 2084.42 3225.86 2083.7 c
-3225.86 2081 l
-3263.3 2081 l
-3263.3 2083.7 l
-3254.48 2084.6 3252 2086.76 3252 2095.58 c
-3252 2136.8 l
-3252 2153.72 3244.2 2163.8 3231.08 2163.8 c
-3222.64 2163.8 3216.94 2160.74 3204.46 2149.22 c
-3204.46 2163.44 l
-3203.72 2163.8 l
-3194.9 2160.56 3188.78 2158.58 3178.88 2155.7 c
-h
-3266 2081 m
-f*
-3350.6 2151 m
-3350.6 2158 l
-3336.74 2158 l
-3333.14 2158 3330.44 2158.5 3326.84 2159.66 c
-3322.88 2161.1 l
-3318.02 2162.9 3313.16 2163.8 3308.48 2163.8 c
-3291.74 2163.8 3278.38 2150.84 3278.38 2134.46 c
-3278.38 2123.12 3283.07 2116.28 3295.16 2110.34 c
-3292.64 2107.82 3290.12 2105.48 3287.42 2103.14 c
-3281.48 2097.92 3279.1 2094.32 3279.1 2090.72 c
-3279.1 2086.76 3281.09 2084.78 3288.68 2081.18 c
-3275.72 2071.82 3271 2065.88 3271 2059.22 c
-3271 2049.68 3284.88 2042 3302.18 2042 c
-3315.14 2042 3328.82 2046.23 3338.18 2053.28 c
-3345.56 2059.04 3349 2064.98 3349 2072.18 c
-3349 2083.34 3340.53 2090.9 3327.2 2091.44 c
-3303.98 2092.52 l
-3294.26 2092.88 3289.94 2094.5 3289.94 2097.38 c
-3289.94 2100.98 3295.88 2107.28 3300.74 2108.72 c
-3304.16 2108.36 l
-3307.4 2108 3309.92 2108 3311 2108 c
-3317.3 2108 3324.32 2110.46 3329.72 2114.84 c
-3336.2 2119.88 3339 2126.36 3339 2135.72 c
-3339 2141 3338.12 2145.18 3335.66 2151 c
-h
-3292.46 2080.64 m
-3298.58 2079.38 3312.8 2078.3 3321.62 2078.3 c
-3338 2078.3 3344 2076.14 3344 2069.48 c
-3344 2059.04 3330.3 2052 3309.74 2052 c
-3293.9 2052 3284 2057.23 3284 2065.16 c
-3284 2069.3 3285.55 2072 3292.46 2080.64 c
-h
-3293.36 2141.84 m
-3293.36 2152.46 3298.4 2158.8 3306.68 2158.8 c
-3312.26 2158.8 3316.94 2155.73 3319.82 2150.3 c
-3323.24 2144 3325 2135.9 3325 2128.52 c
-3325 2118.62 3319.87 2113 3311.9 2113 c
-3300.74 2113 3293.36 2124.43 3293.36 2141.3 c
-h
-3356 2081 m
-f*
-3401 2081 m
-f*
-3404.06 2200 m
-3404.06 2197 l
-3419.18 2196.09 3421 2194.07 3421 2180.54 c
-3421 2100.62 l
-3421 2087.3 3418.71 2084.96 3404.06 2084.42 c
-3404.06 2081 l
-3464.18 2081 l
-3491 2081 3508 2093.42 3508 2113.4 c
-3508 2121.32 3504.85 2128.52 3498.92 2133.74 c
-3493.52 2138.6 3488.66 2140.94 3476.96 2143.64 c
-3486.32 2145.98 3490.1 2147.78 3494.42 2151.56 c
-3498.92 2155.52 3502 2162.18 3502 2169.56 c
-3502 2189.72 3485.85 2200 3454.46 2200 c
-h
-3440 2139.68 m
-3456.94 2139.68 3464.78 2138.78 3471.56 2136.26 c
-3482 2132.12 3487 2124.74 3487 2113.22 c
-3487 2103.5 3483.23 2096.48 3476.06 2092.34 c
-3470.3 2088.92 3463.1 2088 3450.5 2088 c
-3442.22 2088 3440 2089.55 3440 2095.04 c
-h
-3440 2146.88 m
-3440 2188.1 l
-3440 2191.88 3441.16 2193 3443.66 2193 c
-3451.58 2193 l
-3472.28 2193 3483 2184.71 3483 2168.84 c
-3483 2154.8 3473.55 2146.88 3456.8 2146.88 c
-h
-3521.06 2081 m
-f*
-2825.6 4082 m
-2823.98 4122.52 l
-2820.2 4122.52 l
-2819.12 4118.84 2816.24 4116.58 2812.82 4116.58 c
-2811.02 4116.58 2808.5 4117.17 2805.62 4118.36 c
-2796.8 4121.24 2787.98 4122.52 2779.16 4122.52 c
-2765.3 4122.52 2751.08 4117.36 2740.1 4108.46 c
-2726.42 4097.12 2719 4080.02 2719 4059.5 c
-2719 4022.96 2742.96 3998.48 2778.8 3998.48 c
-2799.14 3998.48 2816.96 4006.76 2827.94 4021.34 c
-2824.7 4024.58 l
-2811.38 4011.8 2799.5 4006.48 2784.56 4006.48 c
-2773.76 4006.48 2764.04 4009.69 2756.48 4015.94 c
-2745.86 4024.76 2740 4040.96 2740 4061.84 c
-2740 4094.42 2756.71 4115.52 2782.76 4115.52 c
-2793.2 4115.52 2802.38 4111.73 2809.58 4104.5 c
-2815.34 4098.74 2818.04 4093.7 2821.46 4082 c
-h
-2834.06 4001 m
-f*
-2837.14 4072.64 m
-2839.48 4073.18 2840.92 4073.36 2842.9 4073.36 c
-2847.58 4073.36 2849 4070.48 2849 4061.84 c
-2849 4016.3 l
-2849 4006.58 2846.52 4003.88 2836.6 4003.7 c
-2836.6 4001 l
-2876.56 4001 l
-2876.56 4004 l
-2867.02 4004.35 2864 4006.27 2864 4013.06 c
-2864 4063.82 l
-2864 4064.18 2865.23 4065.44 2866.66 4066.88 c
-2870.98 4071.2 2879.08 4074.8 2885.74 4074.8 c
-2893.48 4074.8 2898 4068.2 2898 4055.54 c
-2898 4016.48 l
-2898 4006.4 2895.93 4004.42 2885.2 4003.7 c
-2885.2 4001 l
-2925.52 4001 l
-2925.52 4004 l
-2915.26 4004.18 2913 4007.17 2913 4018.1 c
-2913 4063.46 l
-2918.28 4071.2 2923.91 4074.8 2932.18 4074.8 c
-2942.44 4074.8 2946 4069.85 2946 4054.64 c
-2946 4016.66 l
-2946 4006.4 2944.52 4004.96 2933.8 4003.7 c
-2933.8 4001 l
-2973.22 4001 l
-2973.22 4003.7 l
-2968.54 4004.06 l
-2963.14 4004.42 2961 4007.66 2961 4014.68 c
-2961 4051.76 l
-2961 4073 2953.91 4083.8 2939.92 4083.8 c
-2929.48 4083.8 2920.3 4079.12 2910.58 4068.68 c
-2907.34 4078.94 2901.22 4083.8 2891.5 4083.8 c
-2883.31 4083.8 2878.57 4081.46 2863.28 4069.94 c
-2863.28 4083.44 l
-2862.34 4083.8 l
-2853.16 4080.38 2847.04 4078.4 2837.14 4075.7 c
-h
-2974.04 4001 m
-f*
-2974.62 4071.74 m
-2976.24 4071.92 2977.5 4071.92 2979.12 4071.92 c
-2985.24 4071.92 2987 4070.12 2987 4061.66 c
-2987 3977.42 l
-2987 3968.06 2984.94 3966.08 2973.9 3965 c
-2973.9 3962 l
-3017.46 3962 l
-3017.46 3965 l
-3003.96 3965.18 3002 3967.19 3002 3978.68 c
-3002 4006.94 l
-3008.34 4001 3012.4 3999.2 3019.8 3999.2 c
-3041.22 3999.2 3057 4019.36 3057 4045.46 c
-3057 4067.78 3044.65 4083.8 3027.54 4083.8 c
-3017.61 4083.8 3009.8 4079.48 3002 4069.58 c
-3002 4083.44 l
-3000.54 4083.8 l
-2991 4080.02 2984.52 4077.68 2974.62 4074.62 c
-h
-3002 4061.12 m
-3002 4066.52 3011.87 4072.8 3019.98 4072.8 c
-3033.3 4072.8 3042 4059.2 3042 4038.26 c
-3042 4018.46 3033.23 4004.2 3020.34 4004.2 c
-3011.88 4004.2 3002 4011.09 3002 4016.84 c
-h
-3063 4001 m
-f*
-3184 4104.14 m
-3184 4022.6 l
-3184 4007.66 3181.88 4005.32 3167.94 4004.42 c
-3167.94 4001 l
-3218.34 4001 l
-3218.34 4004.42 l
-3205.2 4005.32 3203 4007.84 3203 4020.62 c
-3203 4100.54 l
-3203 4113.32 3205.29 4115.66 3218.34 4116.74 c
-3218.34 4120 l
-3182.52 4120 l
-3142.74 4029.26 l
-3101.16 4120 l
-3065.52 4120 l
-3065.52 4117 l
-3080.28 4116.09 3083 4113.89 3083 4100.54 c
-3083 4027.46 l
-3083 4008.92 3080.43 4005.5 3065.16 4004.42 c
-3065.16 4001 l
-3107.46 4001 l
-3107.46 4004 l
-3093.6 4004.73 3091 4008.95 3091 4027.46 c
-3091 4100 l
-3135.72 4001 l
-3138.24 4001 l
-h
-3223.02 4001 m
-f*
-3303.56 4012.88 m
-3300.5 4010.36 3298.34 4009.2 3295.64 4009.2 c
-3291.5 4009.2 3290 4011.78 3290 4019.9 c
-3290 4055 l
-3290 4064.18 3289.16 4069.22 3286.82 4073.36 c
-3283.04 4080.2 3275.3 4083.8 3264.32 4083.8 c
-3255.14 4083.8 3246.5 4081.28 3241.46 4077.14 c
-3236.96 4073.36 3234 4068.14 3234 4063.64 c
-3234 4059.5 3237.46 4055.9 3241.82 4055.9 c
-3246.14 4055.9 3249.92 4059.5 3249.92 4063.46 c
-3249.92 4064.18 3249.74 4065.08 3249.56 4066.34 c
-3249.2 4067.96 3249 4069.4 3249 4070.66 c
-3249 4075.52 3254.77 4079.8 3261.98 4079.8 c
-3270.8 4079.8 3275 4074.47 3275 4064.54 c
-3275 4053.56 l
-3247.76 4042.4 3244.75 4040.96 3237.14 4034.12 c
-3233.18 4030.52 3230.66 4024.4 3230.66 4018.46 c
-3230.66 4007.12 3238.4 3999.2 3249.56 3999.2 c
-3257.48 3999.2 3264.86 4002.98 3275.84 4012.34 c
-3276.74 4002.8 3279.98 3999.2 3287.36 3999.2 c
-3293.48 3999.2 3297.26 4001.36 3303.56 4008.2 c
-h
-3275 4023.14 m
-3275 4017.56 3274.23 4015.94 3270.98 4013.6 c
-3266.66 4011.08 3261.62 4009.2 3257.84 4009.2 c
-3251.54 4009.2 3246.48 4015.51 3246.48 4023.5 c
-3246.48 4024.22 l
-3246.48 4034.84 3253.7 4041.32 3275 4049.24 c
-h
-3303.92 4001 m
-f*
-3304.62 4071.74 m
-3306.24 4071.92 3307.5 4071.92 3309.12 4071.92 c
-3315.24 4071.92 3317 4070.12 3317 4061.66 c
-3317 3977.42 l
-3317 3968.06 3314.94 3966.08 3303.9 3965 c
-3303.9 3962 l
-3347.46 3962 l
-3347.46 3965 l
-3333.96 3965.18 3332 3967.19 3332 3978.68 c
-3332 4006.94 l
-3338.34 4001 3342.4 3999.2 3349.8 3999.2 c
-3371.22 3999.2 3387 4019.36 3387 4045.46 c
-3387 4067.78 3374.65 4083.8 3357.54 4083.8 c
-3347.61 4083.8 3339.8 4079.48 3332 4069.58 c
-3332 4083.44 l
-3330.54 4083.8 l
-3321 4080.02 3314.52 4077.68 3304.62 4074.62 c
-h
-3332 4061.12 m
-3332 4066.52 3341.87 4072.8 3349.98 4072.8 c
-3363.3 4072.8 3372 4059.2 3372 4038.26 c
-3372 4018.46 3363.23 4004.2 3350.34 4004.2 c
-3341.88 4004.2 3332 4011.09 3332 4016.84 c
-h
-3393 4001 m
-f*
-1 i
-3773.75 3382.55 330 104.4 re
-Y
-3773.75 3479.75 m
-4095.35 3390.95 l
-S
-0 0 6120 7920 re
-Y
-3812.15 3480.95 m
-3812.15 3502.55 3794.15 3520.55 3772.55 3520.55 c
-3750.95 3520.55 3732.95 3502.55 3732.95 3480.95 c
-3732.95 3459.35 3750.95 3441.35 3772.55 3441.35 c
-3794.15 3441.35 3812.15 3459.35 3812.15 3480.95 c
-f*
-4046.15 3354.95 m
-4077.35 3395.75 l
-4071.35 3447.35 l
-4205.75 3360.95 l
-f*
-3773.75 2988.95 339.6 190.8 re
-Y
-3773.75 3179.75 m
-4104.95 2997.35 l
-S
-0 0 6120 7920 re
-Y
-3812.15 3180.95 m
-3812.15 3202.55 3794.15 3220.55 3772.55 3220.55 c
-3750.95 3220.55 3732.95 3202.55 3732.95 3180.95 c
-3732.95 3159.35 3750.95 3141.35 3772.55 3141.35 c
-3794.15 3141.35 3812.15 3159.35 3812.15 3180.95 c
-f*
-4049.75 2973.35 m
-4088.15 3005.75 l
-4096.55 3056.15 l
-4205.75 2940.95 l
-f*
-1973.75 2225.75 342 294 re
-Y
-1973.75 2519.75 m
-2307.35 2234.15 l
-S
-0 0 6120 7920 re
-Y
-2012.15 2520.95 m
-2012.15 2542.55 1994.15 2560.55 1972.55 2560.55 c
-1950.95 2560.55 1932.95 2542.55 1932.95 2520.95 c
-1932.95 2499.35 1950.95 2481.35 1972.55 2481.35 c
-1994.15 2481.35 2012.15 2499.35 2012.15 2520.95 c
-f*
-2247.35 2223.35 m
-2291.75 2247.35 l
-2308.55 2294.15 l
-2393.75 2159.75 l
-f*
-3773.75 2151.35 342 295.2 re
-Y
-3773.75 2159.75 m
-4107.35 2446.55 l
-S
-0 0 6120 7920 re
-Y
-3812.15 2160.95 m
-3812.15 2182.55 3794.15 2200.55 3772.55 2200.55 c
-3750.95 2200.55 3732.95 2182.55 3732.95 2160.95 c
-3732.95 2139.35 3750.95 2121.35 3772.55 2121.35 c
-3794.15 2121.35 3812.15 2139.35 3812.15 2160.95 c
-f*
-4108.55 2384.15 m
-4091.75 2432.15 l
-4047.35 2456.15 l
-4193.75 2519.75 l
-f*
-4203.35 3352.55 319.2 15.5999 re
-Y
-4200.95 3360.95 m
-4515.35 3360.95 l
-S
-0 0 6120 7920 re
-Y
-4242.95 3362.15 m
-4242.95 3383.75 4224.95 3401.75 4203.35 3401.75 c
-4180.55 3401.75 4162.55 3383.75 4162.55 3362.15 c
-4162.55 3340.55 4180.55 3322.55 4203.35 3322.55 c
-4224.95 3322.55 4242.95 3340.55 4242.95 3362.15 c
-f*
-4473.35 3312.95 m
-4492.55 3360.95 l
-4473.35 3408.95 l
-4625.75 3360.95 l
-f*
-4203.35 2932.55 319.2 15.5999 re
-Y
-4200.95 2940.95 m
-4515.35 2940.95 l
-S
-0 0 6120 7920 re
-Y
-4242.95 2942.15 m
-4242.95 2963.75 4224.95 2981.75 4203.35 2981.75 c
-4180.55 2981.75 4162.55 2963.75 4162.55 2942.15 c
-4162.55 2920.55 4180.55 2902.55 4203.35 2902.55 c
-4224.95 2902.55 4242.95 2920.55 4242.95 2942.15 c
-f*
-4473.35 2892.95 m
-4492.55 2940.95 l
-4473.35 2988.95 l
-4625.75 2940.95 l
-f*
-4203.35 2512.55 319.2 15.5999 re
-Y
-4200.95 2520.95 m
-4515.35 2520.95 l
-S
-0 0 6120 7920 re
-Y
-4242.95 2522.15 m
-4242.95 2543.75 4224.95 2561.75 4203.35 2561.75 c
-4180.55 2561.75 4162.55 2543.75 4162.55 2522.15 c
-4162.55 2500.55 4180.55 2482.55 4203.35 2482.55 c
-4224.95 2482.55 4242.95 2500.55 4242.95 2522.15 c
-f*
-4473.35 2472.95 m
-4492.55 2520.95 l
-4473.35 2568.95 l
-4625.75 2520.95 l
-f*
-1563.35 3352.55 319.2 15.5999 re
-Y
-1560.95 3360.95 m
-1875.35 3360.95 l
-S
-0 0 6120 7920 re
-Y
-1602.95 3362.15 m
-1602.95 3383.75 1584.95 3401.75 1563.35 3401.75 c
-1540.55 3401.75 1522.55 3383.75 1522.55 3362.15 c
-1522.55 3340.55 1540.55 3322.55 1563.35 3322.55 c
-1584.95 3322.55 1602.95 3340.55 1602.95 3362.15 c
-f*
-1833.35 3312.95 m
-1852.55 3360.95 l
-1833.35 3408.95 l
-1985.75 3360.95 l
-f*
-1563.35 2932.55 319.2 15.5999 re
-Y
-1560.95 2940.95 m
-1875.35 2940.95 l
-S
-0 0 6120 7920 re
-Y
-1602.95 2942.15 m
-1602.95 2963.75 1584.95 2981.75 1563.35 2981.75 c
-1540.55 2981.75 1522.55 2963.75 1522.55 2942.15 c
-1522.55 2920.55 1540.55 2902.55 1563.35 2902.55 c
-1584.95 2902.55 1602.95 2920.55 1602.95 2942.15 c
-f*
-1833.35 2892.95 m
-1852.55 2940.95 l
-1833.35 2988.95 l
-1985.75 2940.95 l
-f*
-1563.35 2512.55 319.2 15.5999 re
-Y
-1560.95 2520.95 m
-1875.35 2520.95 l
-S
-0 0 6120 7920 re
-Y
-1602.95 2522.15 m
-1602.95 2543.75 1584.95 2561.75 1563.35 2561.75 c
-1540.55 2561.75 1522.55 2543.75 1522.55 2522.15 c
-1522.55 2500.55 1540.55 2482.55 1563.35 2482.55 c
-1584.95 2482.55 1602.95 2500.55 1602.95 2522.15 c
-f*
-1833.35 2472.95 m
-1852.55 2520.95 l
-1833.35 2568.95 l
-1985.75 2520.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/series.eps b/ast-5.3-1/sun211_figures/series.eps
deleted file mode 100644
index be928fc..0000000
--- a/ast-5.3-1/sun211_figures/series.eps
+++ /dev/null
@@ -1,970 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 44 119 541 306
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:38:48
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5033.75 2775.35 m
-5033.75 2900.15 4932.95 3000.95 4808.15 3000.95 c
-1178.15 3000.95 l
-1053.35 3000.95 952.55 2900.15 952.55 2775.35 c
-952.55 1425.35 l
-952.55 1300.55 1053.35 1199.75 1178.15 1199.75 c
-4808.15 1199.75 l
-4932.95 1199.75 5033.75 1300.55 5033.75 1425.35 c
-f*
-1 g
-4968.95 2831.75 m
-4968.95 2955.35 4869.35 3054.95 4744.55 3054.95 c
-1122.95 3054.95 l
-998.15 3054.95 898.55 2955.35 898.55 2831.75 c
-898.55 1487.75 l
-898.55 1364.15 998.15 1264.55 1122.95 1264.55 c
-4744.55 1264.55 l
-4869.35 1264.55 4968.95 1364.15 4968.95 1487.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-4968.95 2831.75 m
-4968.95 2955.35 4869.35 3054.95 4744.55 3054.95 c
-1122.95 3054.95 l
-998.15 3054.95 898.55 2955.35 898.55 2831.75 c
-898.55 1487.75 l
-898.55 1364.15 998.15 1264.55 1122.95 1264.55 c
-4744.55 1264.55 l
-4869.35 1264.55 4968.95 1364.15 4968.95 1487.75 c
-h
-S
-903.35 2212.55 319.2 15.5999 re
-Y
-900.95 2220.95 m
-1215.35 2220.95 l
-S
-0 0 6120 7920 re
-Y
-942.95 2222.15 m
-942.95 2243.75 924.95 2261.75 903.35 2261.75 c
-880.55 2261.75 862.55 2243.75 862.55 2222.15 c
-862.55 2200.55 880.55 2182.55 903.35 2182.55 c
-924.95 2182.55 942.95 2200.55 942.95 2222.15 c
-f*
-1173.35 2172.95 m
-1192.55 2220.95 l
-1173.35 2268.95 l
-1325.75 2220.95 l
-f*
-0.564706 g
-2793.35 2331.35 m
-2793.35 2402.15 2735.75 2460.95 2663.75 2460.95 c
-1524.95 2460.95 l
-1452.95 2460.95 1395.35 2402.15 1395.35 2331.35 c
-1395.35 1552.55 l
-1395.35 1480.55 1452.95 1422.95 1524.95 1422.95 c
-2663.75 1422.95 l
-2735.75 1422.95 2793.35 1480.55 2793.35 1552.55 c
-f*
-1 g
-2728.55 2386.55 m
-2728.55 2457.35 2672.15 2514.95 2600.15 2514.95 c
-1469.75 2514.95 l
-1398.95 2514.95 1341.35 2457.35 1341.35 2386.55 c
-1341.35 1614.95 l
-1341.35 1545.35 1398.95 1487.75 1469.75 1487.75 c
-2600.15 1487.75 l
-2670.95 1487.75 2728.55 1545.35 2728.55 1614.95 c
-f*
-0 g
-2728.55 2386.55 m
-2728.55 2457.35 2672.15 2514.95 2600.15 2514.95 c
-1469.75 2514.95 l
-1398.95 2514.95 1341.35 2457.35 1341.35 2386.55 c
-1341.35 1614.95 l
-1341.35 1545.35 1398.95 1487.75 1469.75 1487.75 c
-2600.15 1487.75 l
-2670.95 1487.75 2728.55 1545.35 2728.55 1614.95 c
-h
-S
-0.564706 g
-4624.55 2327.75 m
-4624.55 2400.95 4564.55 2460.95 4491.35 2460.95 c
-3359.75 2460.95 l
-3286.55 2460.95 3226.55 2400.95 3226.55 2327.75 c
-3226.55 1527.35 l
-3226.55 1454.15 3286.55 1394.15 3359.75 1394.15 c
-4491.35 1394.15 l
-4564.55 1394.15 4624.55 1454.15 4624.55 1527.35 c
-f*
-1 g
-4559.75 2382.95 m
-4559.75 2456.15 4500.95 2514.95 4427.75 2514.95 c
-3304.55 2514.95 l
-3231.35 2514.95 3172.55 2456.15 3172.55 2382.95 c
-3172.55 1590.95 l
-3172.55 1517.75 3231.35 1458.95 3304.55 1458.95 c
-4427.75 1458.95 l
-4500.95 1458.95 4559.75 1517.75 4559.75 1590.95 c
-f*
-0 g
-4559.75 2382.95 m
-4559.75 2456.15 4500.95 2514.95 4427.75 2514.95 c
-3304.55 2514.95 l
-3231.35 2514.95 3172.55 2456.15 3172.55 2382.95 c
-3172.55 1590.95 l
-3172.55 1517.75 3231.35 1458.95 3304.55 1458.95 c
-4427.75 1458.95 l
-4500.95 1458.95 4559.75 1517.75 4559.75 1590.95 c
-h
-S
-903.35 1792.55 319.2 15.5999 re
-Y
-900.95 1800.95 m
-1215.35 1800.95 l
-S
-0 0 6120 7920 re
-Y
-942.95 1802.15 m
-942.95 1823.75 924.95 1841.75 903.35 1841.75 c
-880.55 1841.75 862.55 1823.75 862.55 1802.15 c
-862.55 1780.55 880.55 1762.55 903.35 1762.55 c
-924.95 1762.55 942.95 1780.55 942.95 1802.15 c
-f*
-1173.35 1752.95 m
-1192.55 1800.95 l
-1173.35 1848.95 l
-1325.75 1800.95 l
-f*
-2724.95 2272.55 340.8 15.5999 re
-Y
-2722.55 2280.95 m
-3058.55 2280.95 l
-S
-0 0 6120 7920 re
-Y
-2763.35 2282.15 m
-2763.35 2303.75 2745.35 2321.75 2723.75 2321.75 c
-2702.15 2321.75 2684.15 2303.75 2684.15 2282.15 c
-2684.15 2260.55 2702.15 2242.55 2723.75 2242.55 c
-2745.35 2242.55 2763.35 2260.55 2763.35 2282.15 c
-f*
-3017.75 2232.95 m
-3035.75 2280.95 l
-3017.75 2328.95 l
-3170.15 2280.95 l
-f*
-2724.95 1672.55 339.6 15.5999 re
-Y
-2722.55 1680.95 m
-3057.35 1680.95 l
-S
-0 0 6120 7920 re
-Y
-2763.35 1682.15 m
-2763.35 1703.75 2745.35 1721.75 2723.75 1721.75 c
-2702.15 1721.75 2684.15 1703.75 2684.15 1682.15 c
-2684.15 1660.55 2702.15 1642.55 2723.75 1642.55 c
-2745.35 1642.55 2763.35 1660.55 2763.35 1682.15 c
-f*
-3016.55 1632.95 m
-3034.55 1680.95 l
-3016.55 1728.95 l
-3168.95 1680.95 l
-f*
-2724.95 1974.95 340.8 15.5999 re
-Y
-2722.55 1983.35 m
-3058.55 1983.35 l
-S
-0 0 6120 7920 re
-Y
-2763.35 1984.55 m
-2763.35 2006.15 2745.35 2024.15 2723.75 2024.15 c
-2702.15 2024.15 2684.15 2006.15 2684.15 1984.55 c
-2684.15 1962.95 2702.15 1944.95 2723.75 1944.95 c
-2745.35 1944.95 2763.35 1962.95 2763.35 1984.55 c
-f*
-3017.75 1936.55 m
-3035.75 1983.35 l
-3017.75 2031.35 l
-3170.15 1983.35 l
-f*
-4558.55 2216.15 304.8 15.5999 re
-Y
-4556.15 2224.55 m
-4856.15 2224.55 l
-S
-0 0 6120 7920 re
-Y
-4596.95 2225.75 m
-4596.95 2247.35 4578.95 2265.35 4557.35 2265.35 c
-4535.75 2265.35 4517.75 2247.35 4517.75 2225.75 c
-4517.75 2204.15 4535.75 2186.15 4557.35 2186.15 c
-4578.95 2186.15 4596.95 2204.15 4596.95 2225.75 c
-f*
-4816.55 2177.75 m
-4834.55 2224.55 l
-4816.55 2272.55 l
-4968.95 2224.55 l
-f*
-4558.55 1791.35 304.8 15.5999 re
-Y
-4556.15 1799.75 m
-4856.15 1799.75 l
-S
-0 0 6120 7920 re
-Y
-4596.95 1800.95 m
-4596.95 1822.55 4578.95 1840.55 4557.35 1840.55 c
-4535.75 1840.55 4517.75 1822.55 4517.75 1800.95 c
-4517.75 1779.35 4535.75 1761.35 4557.35 1761.35 c
-4578.95 1761.35 4596.95 1779.35 4596.95 1800.95 c
-f*
-4816.55 1751.75 m
-4834.55 1799.75 l
-4816.55 1847.75 l
-4968.95 1799.75 l
-f*
-0.2 i
-1742 2064.14 m
-1742 1982.6 l
-1742 1967.66 1739.88 1965.32 1725.94 1964.42 c
-1725.94 1961 l
-1776.34 1961 l
-1776.34 1964.42 l
-1763.2 1965.32 1761 1967.84 1761 1980.62 c
-1761 2060.54 l
-1761 2073.32 1763.29 2075.66 1776.34 2076.74 c
-1776.34 2080 l
-1740.52 2080 l
-1700.74 1989.26 l
-1659.16 2080 l
-1623.52 2080 l
-1623.52 2077 l
-1638.28 2076.09 1641 2073.89 1641 2060.54 c
-1641 1987.46 l
-1641 1968.92 1638.43 1965.5 1623.16 1964.42 c
-1623.16 1961 l
-1665.46 1961 l
-1665.46 1964 l
-1651.6 1964.73 1649 1968.95 1649 1987.46 c
-1649 2060 l
-1693.72 1961 l
-1696.24 1961 l
-h
-1781.02 1961 m
-f*
-1860.56 1972.88 m
-1857.5 1970.36 1855.34 1969.2 1852.64 1969.2 c
-1848.5 1969.2 1847 1971.78 1847 1979.9 c
-1847 2015 l
-1847 2024.18 1846.16 2029.22 1843.82 2033.36 c
-1840.04 2040.2 1832.3 2043.8 1821.32 2043.8 c
-1812.14 2043.8 1803.5 2041.28 1798.46 2037.14 c
-1793.96 2033.36 1791 2028.14 1791 2023.64 c
-1791 2019.5 1794.46 2015.9 1798.82 2015.9 c
-1803.14 2015.9 1806.92 2019.5 1806.92 2023.46 c
-1806.92 2024.18 1806.74 2025.08 1806.56 2026.34 c
-1806.2 2027.96 1806 2029.4 1806 2030.66 c
-1806 2035.52 1811.77 2039.8 1818.98 2039.8 c
-1827.8 2039.8 1832 2034.47 1832 2024.54 c
-1832 2013.56 l
-1804.76 2002.4 1801.75 2000.96 1794.14 1994.12 c
-1790.18 1990.52 1787.66 1984.4 1787.66 1978.46 c
-1787.66 1967.12 1795.4 1959.2 1806.56 1959.2 c
-1814.48 1959.2 1821.86 1962.98 1832.84 1972.34 c
-1833.74 1962.8 1836.98 1959.2 1844.36 1959.2 c
-1850.48 1959.2 1854.26 1961.36 1860.56 1968.2 c
-h
-1832 1983.14 m
-1832 1977.56 1831.23 1975.94 1827.98 1973.6 c
-1823.66 1971.08 1818.62 1969.2 1814.84 1969.2 c
-1808.54 1969.2 1803.48 1975.51 1803.48 1983.5 c
-1803.48 1984.22 l
-1803.48 1994.84 1810.7 2001.32 1832 2009.24 c
-h
-1860.92 1961 m
-f*
-1862.62 2031.74 m
-1864.24 2031.92 1865.5 2031.92 1867.12 2031.92 c
-1873.24 2031.92 1875 2030.12 1875 2021.66 c
-1875 1937.42 l
-1875 1928.06 1872.94 1926.08 1861.9 1925 c
-1861.9 1922 l
-1905.46 1922 l
-1905.46 1925 l
-1891.96 1925.18 1890 1927.19 1890 1938.68 c
-1890 1966.94 l
-1896.34 1961 1900.4 1959.2 1907.8 1959.2 c
-1929.22 1959.2 1945 1979.36 1945 2005.46 c
-1945 2027.78 1932.65 2043.8 1915.54 2043.8 c
-1905.61 2043.8 1897.8 2039.48 1890 2029.58 c
-1890 2043.44 l
-1888.54 2043.8 l
-1879 2040.02 1872.52 2037.68 1862.62 2034.62 c
-h
-1890 2021.12 m
-1890 2026.52 1899.87 2032.8 1907.98 2032.8 c
-1921.3 2032.8 1930 2019.2 1930 1998.26 c
-1930 1978.46 1921.23 1964.2 1908.34 1964.2 c
-1899.88 1964.2 1890 1971.09 1890 1976.84 c
-h
-1951 1961 m
-f*
-1952.62 2031.74 m
-1954.24 2031.92 1955.5 2031.92 1957.12 2031.92 c
-1963.24 2031.92 1965 2030.12 1965 2021.66 c
-1965 1937.42 l
-1965 1928.06 1962.94 1926.08 1951.9 1925 c
-1951.9 1922 l
-1995.46 1922 l
-1995.46 1925 l
-1981.96 1925.18 1980 1927.19 1980 1938.68 c
-1980 1966.94 l
-1986.34 1961 1990.4 1959.2 1997.8 1959.2 c
-2019.22 1959.2 2035 1979.36 2035 2005.46 c
-2035 2027.78 2022.65 2043.8 2005.54 2043.8 c
-1995.61 2043.8 1987.8 2039.48 1980 2029.58 c
-1980 2043.44 l
-1978.54 2043.8 l
-1969 2040.02 1962.52 2037.68 1952.62 2034.62 c
-h
-1980 2021.12 m
-1980 2026.52 1989.87 2032.8 1997.98 2032.8 c
-2011.3 2032.8 2020 2019.2 2020 1998.26 c
-2020 1978.46 2011.23 1964.2 1998.34 1964.2 c
-1989.88 1964.2 1980 1971.09 1980 1976.84 c
-h
-2041 1961 m
-f*
-2072.5 2043.8 m
-2044.6 2033.9 l
-2044.6 2031.2 l
-2046.04 2031.38 l
-2048.2 2031.74 2050.54 2031.72 2052.16 2031.72 c
-2056.48 2031.72 2058 2028.89 2058 2021.12 c
-2058 1979.36 l
-2058 1966.4 2056.21 1964.42 2043.88 1963.7 c
-2043.88 1961 l
-2086.54 1961 l
-2086.54 1963.7 l
-2074.66 1964.6 2073 1966.4 2073 1979.36 c
-2073 2043.26 l
-h
-2064.22 2084 m
-2059.18 2084 2055 2079.83 2055 2074.76 c
-2055 2069.54 2058.98 2066 2064.04 2066 c
-2069.44 2066 2074 2069.78 2074 2074.76 c
-2074 2079.8 2069.59 2084 2064.22 2084 c
-h
-2091.04 1961 m
-f*
-2093.88 2032.64 m
-2095.14 2033.18 2096.76 2033.36 2098.74 2033.36 c
-2103.78 2033.36 2105 2030.66 2105 2021.84 c
-2105 1977.2 l
-2105 1966.94 2103.09 1964.42 2094.24 1963.7 c
-2094.24 1961 l
-2132.4 1961 l
-2132.4 1963.7 l
-2123.22 1964.42 2120 1966.58 2120 1973.06 c
-2120 2023.64 l
-2128.7 2031.74 2132.95 2033.8 2139.06 2033.8 c
-2147.88 2033.8 2152 2028.25 2152 2016.44 c
-2152 1978.82 l
-2152 1967.48 2149.7 1964.42 2140.86 1963.7 c
-2140.86 1961 l
-2178.3 1961 l
-2178.3 1963.7 l
-2169.48 1964.6 2167 1966.76 2167 1975.58 c
-2167 2016.8 l
-2167 2033.72 2159.2 2043.8 2146.08 2043.8 c
-2137.64 2043.8 2131.94 2040.74 2119.46 2029.22 c
-2119.46 2043.44 l
-2118.72 2043.8 l
-2109.9 2040.56 2103.78 2038.58 2093.88 2035.7 c
-h
-2181 1961 m
-f*
-2265.6 2031 m
-2265.6 2038 l
-2251.74 2038 l
-2248.14 2038 2245.44 2038.5 2241.84 2039.66 c
-2237.88 2041.1 l
-2233.02 2042.9 2228.16 2043.8 2223.48 2043.8 c
-2206.74 2043.8 2193.38 2030.84 2193.38 2014.46 c
-2193.38 2003.12 2198.07 1996.28 2210.16 1990.34 c
-2207.64 1987.82 2205.12 1985.48 2202.42 1983.14 c
-2196.48 1977.92 2194.1 1974.32 2194.1 1970.72 c
-2194.1 1966.76 2196.09 1964.78 2203.68 1961.18 c
-2190.72 1951.82 2186 1945.88 2186 1939.22 c
-2186 1929.68 2199.88 1922 2217.18 1922 c
-2230.14 1922 2243.82 1926.23 2253.18 1933.28 c
-2260.56 1939.04 2264 1944.98 2264 1952.18 c
-2264 1963.34 2255.53 1970.9 2242.2 1971.44 c
-2218.98 1972.52 l
-2209.26 1972.88 2204.94 1974.5 2204.94 1977.38 c
-2204.94 1980.98 2210.88 1987.28 2215.74 1988.72 c
-2219.16 1988.36 l
-2222.4 1988 2224.92 1988 2226 1988 c
-2232.3 1988 2239.32 1990.46 2244.72 1994.84 c
-2251.2 1999.88 2254 2006.36 2254 2015.72 c
-2254 2021 2253.12 2025.18 2250.66 2031 c
-h
-2207.46 1960.64 m
-2213.58 1959.38 2227.8 1958.3 2236.62 1958.3 c
-2253 1958.3 2259 1956.14 2259 1949.48 c
-2259 1939.04 2245.3 1932 2224.74 1932 c
-2208.9 1932 2199 1937.23 2199 1945.16 c
-2199 1949.3 2200.55 1952 2207.46 1960.64 c
-h
-2208.36 2021.84 m
-2208.36 2032.46 2213.4 2038.8 2221.68 2038.8 c
-2227.26 2038.8 2231.94 2035.73 2234.82 2030.3 c
-2238.24 2024 2240 2015.9 2240 2008.52 c
-2240 1998.62 2234.87 1993 2226.9 1993 c
-2215.74 1993 2208.36 2004.43 2208.36 2021.3 c
-h
-2271 1961 m
-f*
-2316 1961 m
-f*
-2443.08 1964.42 m
-2434.98 1964.96 2433.18 1966.76 2426.88 1980.08 c
-2382.06 2082.16 l
-2378.46 2082.16 l
-2341.02 1993.94 l
-2329.5 1967.66 2327.34 1964.96 2318.7 1964.42 c
-2318.7 1961 l
-2354.34 1961 l
-2354.34 1964.82 l
-2345.7 1964.82 2342.1 1967.03 2342.1 1971.8 c
-2342.1 1973.96 2342.64 1976.48 2343.54 1978.82 c
-2351.82 2000 l
-2398.98 2000 l
-2406.36 1982.6 l
-2408.52 1977.56 2409.78 1973.06 2409.78 1970.36 c
-2409.78 1968.74 2408.7 1966.76 2407.26 1966.04 c
-2405.1 1964.78 2403.66 1964.82 2397.18 1964.82 c
-2397.18 1961 l
-2443.08 1961 l
-h
-2354.88 2007 m
-2375.58 2056.76 l
-2396.46 2007 l
-h
-2445.96 1961 m
-f*
-3607 2064.14 m
-3607 1982.6 l
-3607 1967.66 3604.88 1965.32 3590.94 1964.42 c
-3590.94 1961 l
-3641.34 1961 l
-3641.34 1964.42 l
-3628.2 1965.32 3626 1967.84 3626 1980.62 c
-3626 2060.54 l
-3626 2073.32 3628.29 2075.66 3641.34 2076.74 c
-3641.34 2080 l
-3605.52 2080 l
-3565.74 1989.26 l
-3524.16 2080 l
-3488.52 2080 l
-3488.52 2077 l
-3503.28 2076.09 3506 2073.89 3506 2060.54 c
-3506 1987.46 l
-3506 1968.92 3503.43 1965.5 3488.16 1964.42 c
-3488.16 1961 l
-3530.46 1961 l
-3530.46 1964 l
-3516.6 1964.73 3514 1968.95 3514 1987.46 c
-3514 2060 l
-3558.72 1961 l
-3561.24 1961 l
-h
-3646.02 1961 m
-f*
-3726.56 1972.88 m
-3723.5 1970.36 3721.34 1969.2 3718.64 1969.2 c
-3714.5 1969.2 3713 1971.78 3713 1979.9 c
-3713 2015 l
-3713 2024.18 3712.16 2029.22 3709.82 2033.36 c
-3706.04 2040.2 3698.3 2043.8 3687.32 2043.8 c
-3678.14 2043.8 3669.5 2041.28 3664.46 2037.14 c
-3659.96 2033.36 3657 2028.14 3657 2023.64 c
-3657 2019.5 3660.46 2015.9 3664.82 2015.9 c
-3669.14 2015.9 3672.92 2019.5 3672.92 2023.46 c
-3672.92 2024.18 3672.74 2025.08 3672.56 2026.34 c
-3672.2 2027.96 3672 2029.4 3672 2030.66 c
-3672 2035.52 3677.77 2039.8 3684.98 2039.8 c
-3693.8 2039.8 3698 2034.47 3698 2024.54 c
-3698 2013.56 l
-3670.76 2002.4 3667.75 2000.96 3660.14 1994.12 c
-3656.18 1990.52 3653.66 1984.4 3653.66 1978.46 c
-3653.66 1967.12 3661.4 1959.2 3672.56 1959.2 c
-3680.48 1959.2 3687.86 1962.98 3698.84 1972.34 c
-3699.74 1962.8 3702.98 1959.2 3710.36 1959.2 c
-3716.48 1959.2 3720.26 1961.36 3726.56 1968.2 c
-h
-3698 1983.14 m
-3698 1977.56 3697.23 1975.94 3693.98 1973.6 c
-3689.66 1971.08 3684.62 1969.2 3680.84 1969.2 c
-3674.54 1969.2 3669.48 1975.51 3669.48 1983.5 c
-3669.48 1984.22 l
-3669.48 1994.84 3676.7 2001.32 3698 2009.24 c
-h
-3726.92 1961 m
-f*
-3727.62 2031.74 m
-3729.24 2031.92 3730.5 2031.92 3732.12 2031.92 c
-3738.24 2031.92 3740 2030.12 3740 2021.66 c
-3740 1937.42 l
-3740 1928.06 3737.94 1926.08 3726.9 1925 c
-3726.9 1922 l
-3770.46 1922 l
-3770.46 1925 l
-3756.96 1925.18 3755 1927.19 3755 1938.68 c
-3755 1966.94 l
-3761.34 1961 3765.4 1959.2 3772.8 1959.2 c
-3794.22 1959.2 3810 1979.36 3810 2005.46 c
-3810 2027.78 3797.65 2043.8 3780.54 2043.8 c
-3770.61 2043.8 3762.8 2039.48 3755 2029.58 c
-3755 2043.44 l
-3753.54 2043.8 l
-3744 2040.02 3737.52 2037.68 3727.62 2034.62 c
-h
-3755 2021.12 m
-3755 2026.52 3764.87 2032.8 3772.98 2032.8 c
-3786.3 2032.8 3795 2019.2 3795 1998.26 c
-3795 1978.46 3786.23 1964.2 3773.34 1964.2 c
-3764.88 1964.2 3755 1971.09 3755 1976.84 c
-h
-3816 1961 m
-f*
-3817.62 2031.74 m
-3819.24 2031.92 3820.5 2031.92 3822.12 2031.92 c
-3828.24 2031.92 3830 2030.12 3830 2021.66 c
-3830 1937.42 l
-3830 1928.06 3827.94 1926.08 3816.9 1925 c
-3816.9 1922 l
-3860.46 1922 l
-3860.46 1925 l
-3846.96 1925.18 3845 1927.19 3845 1938.68 c
-3845 1966.94 l
-3851.34 1961 3855.4 1959.2 3862.8 1959.2 c
-3884.22 1959.2 3900 1979.36 3900 2005.46 c
-3900 2027.78 3887.65 2043.8 3870.54 2043.8 c
-3860.61 2043.8 3852.8 2039.48 3845 2029.58 c
-3845 2043.44 l
-3843.54 2043.8 l
-3834 2040.02 3827.52 2037.68 3817.62 2034.62 c
-h
-3845 2021.12 m
-3845 2026.52 3854.87 2032.8 3862.98 2032.8 c
-3876.3 2032.8 3885 2019.2 3885 1998.26 c
-3885 1978.46 3876.23 1964.2 3863.34 1964.2 c
-3854.88 1964.2 3845 1971.09 3845 1976.84 c
-h
-3906 1961 m
-f*
-3937.5 2043.8 m
-3909.6 2033.9 l
-3909.6 2031.2 l
-3911.04 2031.38 l
-3913.2 2031.74 3915.54 2031.72 3917.16 2031.72 c
-3921.48 2031.72 3923 2028.89 3923 2021.12 c
-3923 1979.36 l
-3923 1966.4 3921.21 1964.42 3908.88 1963.7 c
-3908.88 1961 l
-3951.54 1961 l
-3951.54 1963.7 l
-3939.66 1964.6 3938 1966.4 3938 1979.36 c
-3938 2043.26 l
-h
-3929.22 2084 m
-3924.18 2084 3920 2079.83 3920 2074.76 c
-3920 2069.54 3923.98 2066 3929.04 2066 c
-3934.44 2066 3939 2069.78 3939 2074.76 c
-3939 2079.8 3934.59 2084 3929.22 2084 c
-h
-3956.04 1961 m
-f*
-3958.88 2032.64 m
-3960.14 2033.18 3961.76 2033.36 3963.74 2033.36 c
-3968.78 2033.36 3970 2030.66 3970 2021.84 c
-3970 1977.2 l
-3970 1966.94 3968.09 1964.42 3959.24 1963.7 c
-3959.24 1961 l
-3997.4 1961 l
-3997.4 1963.7 l
-3988.22 1964.42 3985 1966.58 3985 1973.06 c
-3985 2023.64 l
-3993.7 2031.74 3997.95 2033.8 4004.06 2033.8 c
-4012.88 2033.8 4017 2028.25 4017 2016.44 c
-4017 1978.82 l
-4017 1967.48 4014.7 1964.42 4005.86 1963.7 c
-4005.86 1961 l
-4043.3 1961 l
-4043.3 1963.7 l
-4034.48 1964.6 4032 1966.76 4032 1975.58 c
-4032 2016.8 l
-4032 2033.72 4024.2 2043.8 4011.08 2043.8 c
-4002.64 2043.8 3996.94 2040.74 3984.46 2029.22 c
-3984.46 2043.44 l
-3983.72 2043.8 l
-3974.9 2040.56 3968.78 2038.58 3958.88 2035.7 c
-h
-4046 1961 m
-f*
-4130.6 2031 m
-4130.6 2038 l
-4116.74 2038 l
-4113.14 2038 4110.44 2038.5 4106.84 2039.66 c
-4102.88 2041.1 l
-4098.02 2042.9 4093.16 2043.8 4088.48 2043.8 c
-4071.74 2043.8 4058.38 2030.84 4058.38 2014.46 c
-4058.38 2003.12 4063.07 1996.28 4075.16 1990.34 c
-4072.64 1987.82 4070.12 1985.48 4067.42 1983.14 c
-4061.48 1977.92 4059.1 1974.32 4059.1 1970.72 c
-4059.1 1966.76 4061.09 1964.78 4068.68 1961.18 c
-4055.72 1951.82 4051 1945.88 4051 1939.22 c
-4051 1929.68 4064.88 1922 4082.18 1922 c
-4095.14 1922 4108.82 1926.23 4118.18 1933.28 c
-4125.56 1939.04 4129 1944.98 4129 1952.18 c
-4129 1963.34 4120.53 1970.9 4107.2 1971.44 c
-4083.98 1972.52 l
-4074.26 1972.88 4069.94 1974.5 4069.94 1977.38 c
-4069.94 1980.98 4075.88 1987.28 4080.74 1988.72 c
-4084.16 1988.36 l
-4087.4 1988 4089.92 1988 4091 1988 c
-4097.3 1988 4104.32 1990.46 4109.72 1994.84 c
-4116.2 1999.88 4119 2006.36 4119 2015.72 c
-4119 2021 4118.12 2025.18 4115.66 2031 c
-h
-4072.46 1960.64 m
-4078.58 1959.38 4092.8 1958.3 4101.62 1958.3 c
-4118 1958.3 4124 1956.14 4124 1949.48 c
-4124 1939.04 4110.3 1932 4089.74 1932 c
-4073.9 1932 4064 1937.23 4064 1945.16 c
-4064 1949.3 4065.55 1952 4072.46 1960.64 c
-h
-4073.36 2021.84 m
-4073.36 2032.46 4078.4 2038.8 4086.68 2038.8 c
-4092.26 2038.8 4096.94 2035.73 4099.82 2030.3 c
-4103.24 2024 4105 2015.9 4105 2008.52 c
-4105 1998.62 4099.87 1993 4091.9 1993 c
-4080.74 1993 4073.36 2004.43 4073.36 2021.3 c
-h
-4136 1961 m
-f*
-4181 1961 m
-f*
-4184.06 2080 m
-4184.06 2077 l
-4199.18 2076.09 4201 2074.07 4201 2060.54 c
-4201 1980.62 l
-4201 1967.3 4198.71 1964.96 4184.06 1964.42 c
-4184.06 1961 l
-4244.18 1961 l
-4271 1961 4288 1973.42 4288 1993.4 c
-4288 2001.32 4284.85 2008.52 4278.92 2013.74 c
-4273.52 2018.6 4268.66 2020.94 4256.96 2023.64 c
-4266.32 2025.98 4270.1 2027.78 4274.42 2031.56 c
-4278.92 2035.52 4282 2042.18 4282 2049.56 c
-4282 2069.72 4265.85 2080 4234.46 2080 c
-h
-4220 2019.68 m
-4236.94 2019.68 4244.78 2018.78 4251.56 2016.26 c
-4262 2012.12 4267 2004.74 4267 1993.22 c
-4267 1983.5 4263.23 1976.48 4256.06 1972.34 c
-4250.3 1968.92 4243.1 1968 4230.5 1968 c
-4222.22 1968 4220 1969.55 4220 1975.04 c
-h
-4220 2026.88 m
-4220 2068.1 l
-4220 2071.88 4221.16 2073 4223.66 2073 c
-4231.58 2073 l
-4252.28 2073 4263 2064.71 4263 2048.84 c
-4263 2034.8 4253.55 2026.88 4236.8 2026.88 c
-h
-4301.06 1961 m
-f*
-2645.6 2822 m
-2643.98 2862.52 l
-2640.2 2862.52 l
-2639.12 2858.84 2636.24 2856.58 2632.82 2856.58 c
-2631.02 2856.58 2628.5 2857.17 2625.62 2858.36 c
-2616.8 2861.24 2607.98 2862.52 2599.16 2862.52 c
-2585.3 2862.52 2571.08 2857.36 2560.1 2848.46 c
-2546.42 2837.12 2539 2820.02 2539 2799.5 c
-2539 2762.96 2562.96 2738.48 2598.8 2738.48 c
-2619.14 2738.48 2636.96 2746.76 2647.94 2761.34 c
-2644.7 2764.58 l
-2631.38 2751.8 2619.5 2746.48 2604.56 2746.48 c
-2593.76 2746.48 2584.04 2749.69 2576.48 2755.94 c
-2565.86 2764.76 2560 2780.96 2560 2801.84 c
-2560 2834.42 2576.71 2855.52 2602.76 2855.52 c
-2613.2 2855.52 2622.38 2851.73 2629.58 2844.5 c
-2635.34 2838.74 2638.04 2833.7 2641.46 2822 c
-h
-2654.06 2741 m
-f*
-2657.14 2812.64 m
-2659.48 2813.18 2660.92 2813.36 2662.9 2813.36 c
-2667.58 2813.36 2669 2810.48 2669 2801.84 c
-2669 2756.3 l
-2669 2746.58 2666.52 2743.88 2656.6 2743.7 c
-2656.6 2741 l
-2696.56 2741 l
-2696.56 2744 l
-2687.02 2744.35 2684 2746.27 2684 2753.06 c
-2684 2803.82 l
-2684 2804.18 2685.23 2805.44 2686.66 2806.88 c
-2690.98 2811.2 2699.08 2814.8 2705.74 2814.8 c
-2713.48 2814.8 2718 2808.2 2718 2795.54 c
-2718 2756.48 l
-2718 2746.4 2715.93 2744.42 2705.2 2743.7 c
-2705.2 2741 l
-2745.52 2741 l
-2745.52 2744 l
-2735.26 2744.18 2733 2747.17 2733 2758.1 c
-2733 2803.46 l
-2738.28 2811.2 2743.91 2814.8 2752.18 2814.8 c
-2762.44 2814.8 2766 2809.85 2766 2794.64 c
-2766 2756.66 l
-2766 2746.4 2764.52 2744.96 2753.8 2743.7 c
-2753.8 2741 l
-2793.22 2741 l
-2793.22 2743.7 l
-2788.54 2744.06 l
-2783.14 2744.42 2781 2747.66 2781 2754.68 c
-2781 2791.76 l
-2781 2813 2773.91 2823.8 2759.92 2823.8 c
-2749.48 2823.8 2740.3 2819.12 2730.58 2808.68 c
-2727.34 2818.94 2721.22 2823.8 2711.5 2823.8 c
-2703.31 2823.8 2698.57 2821.46 2683.28 2809.94 c
-2683.28 2823.44 l
-2682.34 2823.8 l
-2673.16 2820.38 2667.04 2818.4 2657.14 2815.7 c
-h
-2794.04 2741 m
-f*
-2794.62 2811.74 m
-2796.24 2811.92 2797.5 2811.92 2799.12 2811.92 c
-2805.24 2811.92 2807 2810.12 2807 2801.66 c
-2807 2717.42 l
-2807 2708.06 2804.94 2706.08 2793.9 2705 c
-2793.9 2702 l
-2837.46 2702 l
-2837.46 2705 l
-2823.96 2705.18 2822 2707.19 2822 2718.68 c
-2822 2746.94 l
-2828.34 2741 2832.4 2739.2 2839.8 2739.2 c
-2861.22 2739.2 2877 2759.36 2877 2785.46 c
-2877 2807.78 2864.65 2823.8 2847.54 2823.8 c
-2837.61 2823.8 2829.8 2819.48 2822 2809.58 c
-2822 2823.44 l
-2820.54 2823.8 l
-2811 2820.02 2804.52 2817.68 2794.62 2814.62 c
-h
-2822 2801.12 m
-2822 2806.52 2831.87 2812.8 2839.98 2812.8 c
-2853.3 2812.8 2862 2799.2 2862 2778.26 c
-2862 2758.46 2853.23 2744.2 2840.34 2744.2 c
-2831.88 2744.2 2822 2751.09 2822 2756.84 c
-h
-2883 2741 m
-f*
-3004 2844.14 m
-3004 2762.6 l
-3004 2747.66 3001.88 2745.32 2987.94 2744.42 c
-2987.94 2741 l
-3038.34 2741 l
-3038.34 2744.42 l
-3025.2 2745.32 3023 2747.84 3023 2760.62 c
-3023 2840.54 l
-3023 2853.32 3025.29 2855.66 3038.34 2856.74 c
-3038.34 2860 l
-3002.52 2860 l
-2962.74 2769.26 l
-2921.16 2860 l
-2885.52 2860 l
-2885.52 2857 l
-2900.28 2856.09 2903 2853.89 2903 2840.54 c
-2903 2767.46 l
-2903 2748.92 2900.43 2745.5 2885.16 2744.42 c
-2885.16 2741 l
-2927.46 2741 l
-2927.46 2744 l
-2913.6 2744.73 2911 2748.95 2911 2767.46 c
-2911 2840 l
-2955.72 2741 l
-2958.24 2741 l
-h
-3043.02 2741 m
-f*
-3123.56 2752.88 m
-3120.5 2750.36 3118.34 2749.2 3115.64 2749.2 c
-3111.5 2749.2 3110 2751.78 3110 2759.9 c
-3110 2795 l
-3110 2804.18 3109.16 2809.22 3106.82 2813.36 c
-3103.04 2820.2 3095.3 2823.8 3084.32 2823.8 c
-3075.14 2823.8 3066.5 2821.28 3061.46 2817.14 c
-3056.96 2813.36 3054 2808.14 3054 2803.64 c
-3054 2799.5 3057.46 2795.9 3061.82 2795.9 c
-3066.14 2795.9 3069.92 2799.5 3069.92 2803.46 c
-3069.92 2804.18 3069.74 2805.08 3069.56 2806.34 c
-3069.2 2807.96 3069 2809.4 3069 2810.66 c
-3069 2815.52 3074.77 2819.8 3081.98 2819.8 c
-3090.8 2819.8 3095 2814.47 3095 2804.54 c
-3095 2793.56 l
-3067.76 2782.4 3064.75 2780.96 3057.14 2774.12 c
-3053.18 2770.52 3050.66 2764.4 3050.66 2758.46 c
-3050.66 2747.12 3058.4 2739.2 3069.56 2739.2 c
-3077.48 2739.2 3084.86 2742.98 3095.84 2752.34 c
-3096.74 2742.8 3099.98 2739.2 3107.36 2739.2 c
-3113.48 2739.2 3117.26 2741.36 3123.56 2748.2 c
-h
-3095 2763.14 m
-3095 2757.56 3094.23 2755.94 3090.98 2753.6 c
-3086.66 2751.08 3081.62 2749.2 3077.84 2749.2 c
-3071.54 2749.2 3066.48 2755.51 3066.48 2763.5 c
-3066.48 2764.22 l
-3066.48 2774.84 3073.7 2781.32 3095 2789.24 c
-h
-3123.92 2741 m
-f*
-3124.62 2811.74 m
-3126.24 2811.92 3127.5 2811.92 3129.12 2811.92 c
-3135.24 2811.92 3137 2810.12 3137 2801.66 c
-3137 2717.42 l
-3137 2708.06 3134.94 2706.08 3123.9 2705 c
-3123.9 2702 l
-3167.46 2702 l
-3167.46 2705 l
-3153.96 2705.18 3152 2707.19 3152 2718.68 c
-3152 2746.94 l
-3158.34 2741 3162.4 2739.2 3169.8 2739.2 c
-3191.22 2739.2 3207 2759.36 3207 2785.46 c
-3207 2807.78 3194.65 2823.8 3177.54 2823.8 c
-3167.61 2823.8 3159.8 2819.48 3152 2809.58 c
-3152 2823.44 l
-3150.54 2823.8 l
-3141 2820.02 3134.52 2817.68 3124.62 2814.62 c
-h
-3152 2801.12 m
-3152 2806.52 3161.87 2812.8 3169.98 2812.8 c
-3183.3 2812.8 3192 2799.2 3192 2778.26 c
-3192 2758.46 3183.23 2744.2 3170.34 2744.2 c
-3161.88 2744.2 3152 2751.09 3152 2756.84 c
-h
-3213 2741 m
-f*
-1 i
-483.35 2212.55 319.2 15.5999 re
-Y
-480.95 2220.95 m
-795.35 2220.95 l
-S
-0 0 6120 7920 re
-Y
-522.95 2222.15 m
-522.95 2243.75 504.95 2261.75 483.35 2261.75 c
-460.55 2261.75 442.55 2243.75 442.55 2222.15 c
-442.55 2200.55 460.55 2182.55 483.35 2182.55 c
-504.95 2182.55 522.95 2200.55 522.95 2222.15 c
-f*
-753.35 2172.95 m
-772.55 2220.95 l
-753.35 2268.95 l
-905.75 2220.95 l
-f*
-483.35 1792.55 319.2 15.5999 re
-Y
-480.95 1800.95 m
-795.35 1800.95 l
-S
-0 0 6120 7920 re
-Y
-522.95 1802.15 m
-522.95 1823.75 504.95 1841.75 483.35 1841.75 c
-460.55 1841.75 442.55 1823.75 442.55 1802.15 c
-442.55 1780.55 460.55 1762.55 483.35 1762.55 c
-504.95 1762.55 522.95 1780.55 522.95 1802.15 c
-f*
-753.35 1752.95 m
-772.55 1800.95 l
-753.35 1848.95 l
-905.75 1800.95 l
-f*
-4966.55 2212.55 333.6 16.7996 re
-Y
-4966.55 2222.15 m
-5291.75 2220.95 l
-S
-0 0 6120 7920 re
-Y
-5004.95 2223.35 m
-5004.95 2244.95 4986.95 2262.95 4965.35 2262.95 c
-4942.55 2262.95 4924.55 2244.95 4924.55 2223.35 c
-4924.55 2201.75 4942.55 2183.75 4965.35 2183.75 c
-4986.95 2183.75 5004.95 2201.75 5004.95 2223.35 c
-f*
-5253.35 2172.95 m
-5272.55 2220.95 l
-5253.35 2268.95 l
-5405.75 2220.95 l
-f*
-4968.95 1791.35 330 16.7996 re
-Y
-4968.95 1799.75 m
-5290.55 1800.95 l
-S
-0 0 6120 7920 re
-Y
-5007.35 1800.95 m
-5007.35 1822.55 4989.35 1840.55 4967.75 1840.55 c
-4944.95 1840.55 4926.95 1822.55 4926.95 1800.95 c
-4926.95 1779.35 4944.95 1761.35 4967.75 1761.35 c
-4989.35 1761.35 5007.35 1779.35 5007.35 1800.95 c
-f*
-5253.35 1752.95 m
-5272.55 1800.95 l
-5253.35 1848.95 l
-5405.75 1800.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/simpexamp.eps b/ast-5.3-1/sun211_figures/simpexamp.eps
deleted file mode 100644
index 7f56ceb..0000000
--- a/ast-5.3-1/sun211_figures/simpexamp.eps
+++ /dev/null
@@ -1,1197 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 43 353 522 564
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/19 15:31:00
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-3233.75 5340.95 m
-3233.75 5373.35 3206.15 5400.95 3173.75 5400.95 c
-2452.55 5400.95 l
-2420.15 5400.95 2392.55 5373.35 2392.55 5340.95 c
-2392.55 4979.75 l
-2392.55 4947.35 2420.15 4919.75 2452.55 4919.75 c
-3173.75 4919.75 l
-3206.15 4919.75 3233.75 4947.35 3233.75 4979.75 c
-f*
-1 g
-3168.95 5396.15 m
-3168.95 5428.55 3142.55 5454.95 3110.15 5454.95 c
-2397.35 5454.95 l
-2364.95 5454.95 2338.55 5428.55 2338.55 5396.15 c
-2338.55 5043.35 l
-2338.55 5010.95 2364.95 4984.55 2397.35 4984.55 c
-3110.15 4984.55 l
-3142.55 4984.55 3168.95 5010.95 3168.95 5043.35 c
-f*
-8 w
-1 J
-1 j
-0 g
-3168.95 5396.15 m
-3168.95 5428.55 3142.55 5454.95 3110.15 5454.95 c
-2397.35 5454.95 l
-2364.95 5454.95 2338.55 5428.55 2338.55 5396.15 c
-2338.55 5043.35 l
-2338.55 5010.95 2364.95 4984.55 2397.35 4984.55 c
-3110.15 4984.55 l
-3142.55 4984.55 3168.95 5010.95 3168.95 5043.35 c
-h
-S
-0.564706 g
-2693.75 4320.95 m
-2693.75 4353.35 2667.35 4380.95 2633.75 4380.95 c
-2272.55 4380.95 l
-2240.15 4380.95 2212.55 4353.35 2212.55 4320.95 c
-2212.55 3719.75 l
-2212.55 3687.35 2240.15 3659.75 2272.55 3659.75 c
-2633.75 3659.75 l
-2667.35 3659.75 2693.75 3687.35 2693.75 3719.75 c
-f*
-1 g
-2628.95 4376.15 m
-2628.95 4408.55 2603.75 4434.95 2570.15 4434.95 c
-2217.35 4434.95 l
-2184.95 4434.95 2158.55 4408.55 2158.55 4376.15 c
-2158.55 3783.35 l
-2158.55 3750.95 2184.95 3724.55 2217.35 3724.55 c
-2570.15 3724.55 l
-2602.55 3724.55 2628.95 3750.95 2628.95 3783.35 c
-f*
-0 g
-2628.95 4376.15 m
-2628.95 4408.55 2603.75 4434.95 2570.15 4434.95 c
-2217.35 4434.95 l
-2184.95 4434.95 2158.55 4408.55 2158.55 4376.15 c
-2158.55 3783.35 l
-2158.55 3750.95 2184.95 3724.55 2217.35 3724.55 c
-2570.15 3724.55 l
-2602.55 3724.55 2628.95 3750.95 2628.95 3783.35 c
-h
-S
-0.564706 g
-3473.75 4320.95 m
-3473.75 4353.35 3447.35 4380.95 3413.75 4380.95 c
-3052.55 4380.95 l
-3020.15 4380.95 2992.55 4353.35 2992.55 4320.95 c
-2992.55 3719.75 l
-2992.55 3687.35 3020.15 3659.75 3052.55 3659.75 c
-3413.75 3659.75 l
-3447.35 3659.75 3473.75 3687.35 3473.75 3719.75 c
-f*
-1 g
-3408.95 4376.15 m
-3408.95 4408.55 3383.75 4434.95 3350.15 4434.95 c
-2997.35 4434.95 l
-2964.95 4434.95 2938.55 4408.55 2938.55 4376.15 c
-2938.55 3783.35 l
-2938.55 3750.95 2964.95 3724.55 2997.35 3724.55 c
-3350.15 3724.55 l
-3382.55 3724.55 3408.95 3750.95 3408.95 3783.35 c
-f*
-0 g
-3408.95 4376.15 m
-3408.95 4408.55 3383.75 4434.95 3350.15 4434.95 c
-2997.35 4434.95 l
-2964.95 4434.95 2938.55 4408.55 2938.55 4376.15 c
-2938.55 3783.35 l
-2938.55 3750.95 2964.95 3724.55 2997.35 3724.55 c
-3350.15 3724.55 l
-3382.55 3724.55 3408.95 3750.95 3408.95 3783.35 c
-h
-S
-0.564706 g
-1793.75 5468.15 m
-1793.75 5530.55 1743.35 5580.95 1680.95 5580.95 c
-1005.35 5580.95 l
-942.95 5580.95 892.55 5530.55 892.55 5468.15 c
-892.55 3652.55 l
-892.55 3590.15 942.95 3539.75 1005.35 3539.75 c
-1680.95 3539.75 l
-1743.35 3539.75 1793.75 3590.15 1793.75 3652.55 c
-f*
-1 g
-1728.95 5523.35 m
-1728.95 5584.55 1679.75 5634.95 1618.55 5634.95 c
-948.95 5634.95 l
-887.75 5634.95 838.55 5584.55 838.55 5523.35 c
-838.55 3716.15 l
-838.55 3653.75 887.75 3604.55 948.95 3604.55 c
-1618.55 3604.55 l
-1679.75 3604.55 1728.95 3653.75 1728.95 3716.15 c
-f*
-0 g
-1728.95 5523.35 m
-1728.95 5584.55 1679.75 5634.95 1618.55 5634.95 c
-948.95 5634.95 l
-887.75 5634.95 838.55 5584.55 838.55 5523.35 c
-838.55 3716.15 l
-838.55 3653.75 887.75 3604.55 948.95 3604.55 c
-1618.55 3604.55 l
-1679.75 3604.55 1728.95 3653.75 1728.95 3716.15 c
-h
-S
-473.75 5151.35 254.4 15.5999 re
-Y
-471.35 5159.75 m
-720.95 5159.75 l
-S
-0 0 6120 7920 re
-Y
-512.15 5160.95 m
-512.15 5182.55 494.15 5200.55 472.55 5200.55 c
-450.95 5200.55 432.95 5182.55 432.95 5160.95 c
-432.95 5139.35 450.95 5121.35 472.55 5121.35 c
-494.15 5121.35 512.15 5139.35 512.15 5160.95 c
-f*
-681.35 5111.75 m
-699.35 5159.75 l
-681.35 5207.75 l
-833.75 5159.75 l
-f*
-473.75 4611.35 254.4 15.5999 re
-Y
-471.35 4619.75 m
-720.95 4619.75 l
-S
-0 0 6120 7920 re
-Y
-512.15 4620.95 m
-512.15 4642.55 494.15 4660.55 472.55 4660.55 c
-450.95 4660.55 432.95 4642.55 432.95 4620.95 c
-432.95 4599.35 450.95 4581.35 472.55 4581.35 c
-494.15 4581.35 512.15 4599.35 512.15 4620.95 c
-f*
-681.35 4571.75 m
-699.35 4619.75 l
-681.35 4667.75 l
-833.75 4619.75 l
-f*
-473.75 4071.35 254.4 15.5999 re
-Y
-471.35 4079.75 m
-720.95 4079.75 l
-S
-0 0 6120 7920 re
-Y
-512.15 4080.95 m
-512.15 4102.55 494.15 4120.55 472.55 4120.55 c
-450.95 4120.55 432.95 4102.55 432.95 4080.95 c
-432.95 4059.35 450.95 4041.35 472.55 4041.35 c
-494.15 4041.35 512.15 4059.35 512.15 4080.95 c
-f*
-681.35 4031.75 m
-699.35 4079.75 l
-681.35 4127.75 l
-833.75 4079.75 l
-f*
-1733.75 5151.35 495.6 64.7996 re
-Y
-1733.75 5159.75 m
-2220.95 5208.95 l
-S
-0 0 6120 7920 re
-Y
-1772.15 5160.95 m
-1772.15 5182.55 1754.15 5200.55 1732.55 5200.55 c
-1710.95 5200.55 1692.95 5182.55 1692.95 5160.95 c
-1692.95 5139.35 1710.95 5121.35 1732.55 5121.35 c
-1754.15 5121.35 1772.15 5139.35 1772.15 5160.95 c
-f*
-2186.15 5157.35 m
-2200.55 5206.55 l
-2177.75 5252.15 l
-2333.75 5219.75 l
-f*
-1733.75 4325.75 342 294 re
-Y
-1733.75 4619.75 m
-2067.35 4334.15 l
-S
-0 0 6120 7920 re
-Y
-1772.15 4620.95 m
-1772.15 4642.55 1754.15 4660.55 1732.55 4660.55 c
-1710.95 4660.55 1692.95 4642.55 1692.95 4620.95 c
-1692.95 4599.35 1710.95 4581.35 1732.55 4581.35 c
-1754.15 4581.35 1772.15 4599.35 1772.15 4620.95 c
-f*
-2007.35 4323.35 m
-2051.75 4347.35 l
-2068.55 4394.15 l
-2153.75 4259.75 l
-f*
-1733.75 3935.75 322.8 151.2 re
-Y
-1733.75 4079.75 m
-2048.15 3944.15 l
-S
-0 0 6120 7920 re
-Y
-1772.15 4080.95 m
-1772.15 4102.55 1754.15 4120.55 1732.55 4120.55 c
-1710.95 4120.55 1692.95 4102.55 1692.95 4080.95 c
-1692.95 4059.35 1710.95 4041.35 1732.55 4041.35 c
-1754.15 4041.35 1772.15 4059.35 1772.15 4080.95 c
-f*
-1995.35 3916.55 m
-2031.35 3952.55 l
-2032.55 4002.95 l
-2153.75 3899.75 l
-f*
-833.75 4670.15 811.2 489.6 re
-Y
-833.75 5159.75 m
-1636.55 4678.55 l
-S
-0 0 6120 7920 re
-Y
-872.15 5160.95 m
-872.15 5182.55 854.15 5200.55 832.55 5200.55 c
-810.95 5200.55 792.95 5182.55 792.95 5160.95 c
-792.95 5139.35 810.95 5121.35 832.55 5121.35 c
-854.15 5121.35 872.15 5139.35 872.15 5160.95 c
-f*
-1578.95 4656.95 m
-1618.55 4688.15 l
-1626.95 4738.55 l
-1733.75 4619.75 l
-f*
-833.75 4611.35 811.2 490.8 re
-Y
-833.75 4619.75 m
-1636.55 5102.15 l
-S
-0 0 6120 7920 re
-Y
-872.15 4620.95 m
-872.15 4642.55 854.15 4660.55 832.55 4660.55 c
-810.95 4660.55 792.95 4642.55 792.95 4620.95 c
-792.95 4599.35 810.95 4581.35 832.55 4581.35 c
-854.15 4581.35 872.15 4599.35 872.15 4620.95 c
-f*
-1626.95 5040.95 m
-1618.55 5091.35 l
-1578.95 5122.55 l
-1733.75 5159.75 l
-f*
-833.75 4071.35 795.6 15.5999 re
-Y
-831.35 4079.75 m
-1622.15 4079.75 l
-S
-0 0 6120 7920 re
-Y
-1581.35 4031.75 m
-1599.35 4079.75 l
-1581.35 4127.75 l
-1733.75 4079.75 l
-f*
-0.564706 g
-4853.75 5468.15 m
-4853.75 5530.55 4803.35 5580.95 4740.95 5580.95 c
-4065.35 5580.95 l
-4002.95 5580.95 3952.55 5530.55 3952.55 5468.15 c
-3952.55 3652.55 l
-3952.55 3590.15 4002.95 3539.75 4065.35 3539.75 c
-4740.95 3539.75 l
-4803.35 3539.75 4853.75 3590.15 4853.75 3652.55 c
-f*
-1 g
-4788.95 5523.35 m
-4788.95 5584.55 4739.75 5634.95 4678.55 5634.95 c
-4008.95 5634.95 l
-3947.75 5634.95 3898.55 5584.55 3898.55 5523.35 c
-3898.55 3716.15 l
-3898.55 3653.75 3947.75 3604.55 4008.95 3604.55 c
-4678.55 3604.55 l
-4739.75 3604.55 4788.95 3653.75 4788.95 3716.15 c
-f*
-0 g
-4788.95 5523.35 m
-4788.95 5584.55 4739.75 5634.95 4678.55 5634.95 c
-4008.95 5634.95 l
-3947.75 5634.95 3898.55 5584.55 3898.55 5523.35 c
-3898.55 3716.15 l
-3898.55 3653.75 3947.75 3604.55 4008.95 3604.55 c
-4678.55 3604.55 l
-4739.75 3604.55 4788.95 3653.75 4788.95 3716.15 c
-h
-S
-3173.75 5160.95 613.2 65.9998 re
-Y
-3173.75 5219.75 m
-3778.55 5169.35 l
-S
-0 0 6120 7920 re
-Y
-3212.15 5220.95 m
-3212.15 5242.55 3194.15 5260.55 3172.55 5260.55 c
-3150.95 5260.55 3132.95 5242.55 3132.95 5220.95 c
-3132.95 5199.35 3150.95 5181.35 3172.55 5181.35 c
-3194.15 5181.35 3212.15 5199.35 3212.15 5220.95 c
-f*
-3737.75 5124.95 m
-3759.35 5170.55 l
-3746.15 5219.75 l
-3893.75 5159.75 l
-f*
-3413.75 4251.35 396 301.2 re
-Y
-3413.75 4259.75 m
-3801.35 4552.55 l
-S
-0 0 6120 7920 re
-Y
-3452.15 4260.95 m
-3452.15 4282.55 3434.15 4300.55 3412.55 4300.55 c
-3390.95 4300.55 3372.95 4282.55 3372.95 4260.95 c
-3372.95 4239.35 3390.95 4221.35 3412.55 4221.35 c
-3434.15 4221.35 3452.15 4239.35 3452.15 4260.95 c
-f*
-3800.15 4491.35 m
-3785.75 4539.35 l
-3742.55 4566.95 l
-3893.75 4619.75 l
-f*
-3413.75 3891.35 380.4 156 re
-Y
-3413.75 3899.75 m
-3785.75 4040.15 l
-S
-0 0 6120 7920 re
-Y
-3452.15 3900.95 m
-3452.15 3922.55 3434.15 3940.55 3412.55 3940.55 c
-3390.95 3940.55 3372.95 3922.55 3372.95 3900.95 c
-3372.95 3879.35 3390.95 3861.35 3412.55 3861.35 c
-3434.15 3861.35 3452.15 3879.35 3452.15 3900.95 c
-f*
-3767.75 3981.35 m
-3768.95 4031.75 l
-3734.15 4070.15 l
-3893.75 4079.75 l
-f*
-4793.75 5151.35 315.6 15.5999 re
-Y
-4791.35 5159.75 m
-5102.15 5159.75 l
-S
-0 0 6120 7920 re
-Y
-4832.15 5160.95 m
-4832.15 5182.55 4814.15 5200.55 4792.55 5200.55 c
-4770.95 5200.55 4752.95 5182.55 4752.95 5160.95 c
-4752.95 5139.35 4770.95 5121.35 4792.55 5121.35 c
-4814.15 5121.35 4832.15 5139.35 4832.15 5160.95 c
-f*
-5061.35 5111.75 m
-5079.35 5159.75 l
-5061.35 5207.75 l
-5213.75 5159.75 l
-f*
-4793.75 4611.35 315.6 15.5999 re
-Y
-4791.35 4619.75 m
-5102.15 4619.75 l
-S
-0 0 6120 7920 re
-Y
-4832.15 4620.95 m
-4832.15 4642.55 4814.15 4660.55 4792.55 4660.55 c
-4770.95 4660.55 4752.95 4642.55 4752.95 4620.95 c
-4752.95 4599.35 4770.95 4581.35 4792.55 4581.35 c
-4814.15 4581.35 4832.15 4599.35 4832.15 4620.95 c
-f*
-5061.35 4571.75 m
-5079.35 4619.75 l
-5061.35 4667.75 l
-5213.75 4619.75 l
-f*
-4793.75 4071.35 315.6 15.5999 re
-Y
-4791.35 4079.75 m
-5102.15 4079.75 l
-S
-0 0 6120 7920 re
-Y
-4832.15 4080.95 m
-4832.15 4102.55 4814.15 4120.55 4792.55 4120.55 c
-4770.95 4120.55 4752.95 4102.55 4752.95 4080.95 c
-4752.95 4059.35 4770.95 4041.35 4792.55 4041.35 c
-4814.15 4041.35 4832.15 4059.35 4832.15 4080.95 c
-f*
-5061.35 4031.75 m
-5079.35 4079.75 l
-5061.35 4127.75 l
-5213.75 4079.75 l
-f*
-3893.75 4670.15 811.2 489.6 re
-Y
-3893.75 5159.75 m
-4696.55 4678.55 l
-S
-0 0 6120 7920 re
-Y
-3932.15 5160.95 m
-3932.15 5182.55 3914.15 5200.55 3892.55 5200.55 c
-3870.95 5200.55 3852.95 5182.55 3852.95 5160.95 c
-3852.95 5139.35 3870.95 5121.35 3892.55 5121.35 c
-3914.15 5121.35 3932.15 5139.35 3932.15 5160.95 c
-f*
-4638.95 4656.95 m
-4678.55 4688.15 l
-4686.95 4738.55 l
-4793.75 4619.75 l
-f*
-3893.75 4611.35 811.2 490.8 re
-Y
-3893.75 4619.75 m
-4696.55 5102.15 l
-S
-0 0 6120 7920 re
-Y
-3932.15 4620.95 m
-3932.15 4642.55 3914.15 4660.55 3892.55 4660.55 c
-3870.95 4660.55 3852.95 4642.55 3852.95 4620.95 c
-3852.95 4599.35 3870.95 4581.35 3892.55 4581.35 c
-3914.15 4581.35 3932.15 4599.35 3932.15 4620.95 c
-f*
-4686.95 5040.95 m
-4678.55 5091.35 l
-4638.95 5122.55 l
-4793.75 5159.75 l
-f*
-3893.75 4071.35 795.6 15.5999 re
-Y
-3891.35 4079.75 m
-4682.15 4079.75 l
-S
-0 0 6120 7920 re
-Y
-4641.35 4031.75 m
-4659.35 4079.75 l
-4641.35 4127.75 l
-4793.75 4079.75 l
-f*
-2633.75 4251.35 194.4 15.5999 re
-Y
-2631.35 4259.75 m
-2820.95 4259.75 l
-S
-0 0 6120 7920 re
-Y
-2672.15 4260.95 m
-2672.15 4282.55 2654.15 4300.55 2632.55 4300.55 c
-2610.95 4300.55 2592.95 4282.55 2592.95 4260.95 c
-2592.95 4239.35 2610.95 4221.35 2632.55 4221.35 c
-2654.15 4221.35 2672.15 4239.35 2672.15 4260.95 c
-f*
-2781.35 4211.75 m
-2799.35 4259.75 l
-2781.35 4307.75 l
-2933.75 4259.75 l
-f*
-2633.75 3891.35 194.4 15.5999 re
-Y
-2631.35 3899.75 m
-2820.95 3899.75 l
-S
-0 0 6120 7920 re
-Y
-2672.15 3900.95 m
-2672.15 3922.55 2654.15 3940.55 2632.55 3940.55 c
-2610.95 3940.55 2592.95 3922.55 2592.95 3900.95 c
-2592.95 3879.35 2610.95 3861.35 2632.55 3861.35 c
-2654.15 3861.35 2672.15 3879.35 2672.15 3900.95 c
-f*
-2781.35 3851.75 m
-2799.35 3899.75 l
-2781.35 3947.75 l
-2933.75 3899.75 l
-f*
-q[1 0 0 1 0 0]concat
-89 106 true[1 0 0 1 -939 -5340]@85 imagemask
-"98E$s8Tk7z
-"98E$s8Tk7z"98E$s8Tk7z!'gM`s6p!gz!!E9$rr<$!z!!*'!rVuouz!!%NK
-p](9oz!!#7`p](9oz!!#7`n,NFgz!!#7`n,NFgz!!#7`n,NFgz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at n,NE<z!!", at s8W,uz!!", at s8W-!huE`W!!", at s8W-!qu?]s!!", at s8W-!rr<$!
-!!", at s8W-!s1eU7!!", at qu@9-s6p!g!!", at huEcWs82is!!", at huEa!s8Duu!!", at huE`^s8N'!!!",@
-huE`Xs8RTL!!", at huE`Ws8Tk7!!", at huE`WJ,eF,!!", at huE`W5QC3Q!!", at huE`W+91g1!!", at huE`W
-&-)D)!!", at huE`W#QOQ!!!", at huE`W#QO]%!!", at huE`W"989!!!", at huE`W"98?#!!", at huE`W!WW-!!!", at huE`W
-!WW0"!!", at huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W!<<'!!!", at huE`W!<<(L!!", at huE`W!<<(L
-!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!",@
-huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!WW1M!!", at huE`W!WW0"!!",@
-huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W"98B$!!", at huE`W"98?#!!", at huE`W#QOc'!!", at huE`W
-#QO]%!!", at huE`W&-)P-!!", at huE`W+92*9!!", at huE`W5QCKY!!", at huE`WJ,f!<!!", at huE`Ws8V!W
-!!", at huE`Xs8Tk7!!#7`huE`^s8RTL!!#7`huEaAs8N'!!!%NKn,NLhs82is!!%NKp],gDs6p!g!!*'!s8W-!s53kW
-!!iQ(s8W-!rr<$!!.Y%Ks8W-!qu?]s"98E$s8W-!huE`W"98E$s8W,uz"98E$s8W*!z~>
-Q
-q[1 0 0 1 0 0]concat
-71 76 true[1 0 0 1 -1028 -5338]@85 imagemask
-z56(Z`z
-&-)P-z!.Y%KJ,fQL!!3-"s53kW!!!9(s8Vio!!!!0s8W,uz+92B at rr<$!!.Y%Ks8RTL!!*'!
-s8W,W!!!$!s8W-!n,NFhs8W-!s7cQo"98E$KE(iL!!iQ(n,OR.!!!9(s1eU:rVup/s8N'!!<3$!+926=
-!!%M!!$D79!!!!@J,g\kn,NFg&&800s53kW!!hE^5QAM!!!!,Z!.Y$a!!!!"n,Rt<J,fQL!Up)=rr<$!!!)cos8N'!
-!!!"D!<<#uz495E\z!'C8]qu?]s!!"&?s82is!!!!-!<;foz!!3,pz!!!'"p](9o
-!!!!"s6p!gz!WVWhz!!3,hz!!!'"n,NFg!!!!"s53kWz!WV'Xz!!3,Xz
-!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!<:sWz!!*&Wz
-!!!$!s8W-!s8VQgs8W-!s8W,g!<<*!s8W-!huJ9,s8W-!s53m,s8W-!s8V!WJ)C;,!$D7!!'fBA!!",@
-huH""!!!!@s53lAhuE`W+90+V+7K71!$D6V!$C\1!!#7`^]4o7!!!!`s1eUFp](9o5Q?66#P\9!!'gL6
-!!i9!!!%NKJ,f]L!!!"Krr<$"qu?]ss8N'!!WE'!!<<#u!!*$!!!3,t!!!"KJ,fWMqu?]s5JR7$s7cQo!$C,!&-),!!!!Q)!$D7!!!!!(
-s24m:^]4?7!WW3"s*t(L!!*'!s8Duu!!!!`s8Vioz#QOh^z!!*'!z!!!!$huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-57 74 true[1 0 0 1 -1100 -5340]@85 imagemask
-&-)\0s1eU7&-)\0
-s1eU7&-)\0p](9o!.Y%K^]4?7!"],0z!!iQ'z!!E9!z!!E9!z!!3,tz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,tz!!3,tz!!3-!z!!3-!z!!3-"z!!3-"
-!!)co!!E8uJ-5cN!!E8u^^'i=!!iQ"i",hf#S6t1pcncY&-)\)IfKEJ&-)\)J,fP!"98Dr5QCb6!.Y%D
-+92 at k!"],)&-)Y0!!3,p#QOf(!!%ND"98B$!!!Q)!WW-!!!!,r!<;rs!!!"D!'g5Yz!!@`O~>
-Q
-q[1 0 0 1 0 0]concat
-127 74 true[1 0 0 1 -1154 -5340]@85 imagemask
-#QOi(s+(.Ls8VR!
-s8W,u#QOi(s+(.Ls8VR!s8W,u!WW3"n,P]Qs8E!/s8W,o!"],0J,fWMs7cQoJ,fKJ!!E9$!!!"Ks53kW
-+926=!!E9#!!!"Ks53kW#QOQ!!!3-!!!!!`s1eU7#QOQ!!!3,t!!!!`s1eU7#QO8n!!*&s!!!!@s1eU7
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"979Z!!*&s!!!!`s*t(L"979Z!!*&s!!!!`s1eU7#QN]^!!*&u!!!!`s1eU7#QN]^!!*'!!!!!`s53kW
-#QN]^!!*'!J,fS!s6p!g#QMR>!!3-"^]4 at as7cQo&-'EF!!3,sn,NIgrql`r&-'EF!!3,qp](<or-n\H+9-ik!!E8rrr<*"r',]35Q?66"98Dr5JRO(p`JDos8N'!"98Dr+9"M)p]pg0s8N'!"98Dr
-&-)\0n,r^js8Duu!'gMY"98E$huWlXs82is!!iQ!!WW3"huJ9,s82is!!*&o!.Y%K^]6V!s7cQo!!",9
-!$D7@!!!Q0s53kW!!!,r!"],/!!!-$s1eU7!!!"D!!3,p!!!"Krr<$!z!!!N0!!!!"huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -1277 -5340]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -1427 -5338]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -1491 -5305]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-89 106 true[1 0 0 1 -3999 -5340]@85 imagemask
-"98E$s8Tk7z
-"98E$s8Tk7z"98E$s8Tk7z!'gM`s6p!gz!!E9$rr<$!z!!*'!rVuouz!!%NK
-p](9oz!!#7`p](9oz!!#7`n,NFgz!!#7`n,NFgz!!#7`n,NFgz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at n,NE<z!!", at s8W,uz!!", at s8W-!huE`W!!", at s8W-!qu?]s!!", at s8W-!rr<$!
-!!", at s8W-!s1eU7!!", at qu@9-s6p!g!!", at huEcWs82is!!", at huEa!s8Duu!!", at huE`^s8N'!!!",@
-huE`Xs8RTL!!", at huE`Ws8Tk7!!", at huE`WJ,eF,!!", at huE`W5QC3Q!!", at huE`W+91g1!!", at huE`W
-&-)D)!!", at huE`W#QOQ!!!", at huE`W#QO]%!!", at huE`W"989!!!", at huE`W"98?#!!", at huE`W!WW-!!!", at huE`W
-!WW0"!!", at huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W!<<'!!!", at huE`W!<<(L!!", at huE`W!<<(L
-!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!",@
-huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!WW1M!!", at huE`W!WW0"!!",@
-huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W"98B$!!", at huE`W"98?#!!", at huE`W#QOc'!!", at huE`W
-#QO]%!!", at huE`W&-)P-!!", at huE`W+92*9!!", at huE`W5QCKY!!", at huE`WJ,f!<!!", at huE`Ws8V!W
-!!", at huE`Xs8Tk7!!#7`huE`^s8RTL!!#7`huEaAs8N'!!!%NKn,NLhs82is!!%NKp],gDs6p!g!!*'!s8W-!s53kW
-!!iQ(s8W-!rr<$!!.Y%Ks8W-!qu?]s"98E$s8W-!huE`W"98E$s8W,uz"98E$s8W*!z~>
-Q
-q[1 0 0 1 0 0]concat
-71 76 true[1 0 0 1 -4088 -5338]@85 imagemask
-z56(Z`z
-&-)P-z!.Y%KJ,fQL!!3-"s53kW!!!9(s8Vio!!!!0s8W,uz+92B at rr<$!!.Y%Ks8RTL!!*'!
-s8W,W!!!$!s8W-!n,NFhs8W-!s7cQo"98E$KE(iL!!iQ(n,OR.!!!9(s1eU:rVup/s8N'!!<3$!+926=
-!!%M!!$D79!!!!@J,g\kn,NFg&&800s53kW!!hE^5QAM!!!!,Z!.Y$a!!!!"n,Rt<J,fQL!Up)=rr<$!!!)cos8N'!
-!!!"D!<<#uz495E\z!'C8]qu?]s!!"&?s82is!!!!-!<;foz!!3,pz!!!'"p](9o
-!!!!"s6p!gz!WVWhz!!3,hz!!!'"n,NFg!!!!"s53kWz!WV'Xz!!3,Xz
-!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!<:sWz!!*&Wz
-!!!$!s8W-!s8VQgs8W-!s8W,g!<<*!s8W-!huJ9,s8W-!s53m,s8W-!s8V!WJ)C;,!$D7!!'fBA!!",@
-huH""!!!!@s53lAhuE`W+90+V+7K71!$D6V!$C\1!!#7`^]4o7!!!!`s1eUFp](9o5Q?66#P\9!!'gL6
-!!i9!!!%NKJ,f]L!!!"Krr<$"qu?]ss8N'!!WE'!!<<#u!!*$!!!3,t!!!"KJ,fWMqu?]s5JR7$s7cQo!$C,!&-),!!!!Q)!$D7!!!!!(
-s24m:^]4?7!WW3"s*t(L!!*'!s8Duu!!!!`s8Vioz#QOh^z!!*'!z!!!!$huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-57 74 true[1 0 0 1 -4160 -5340]@85 imagemask
-&-)\0s1eU7&-)\0
-s1eU7&-)\0p](9o!.Y%K^]4?7!"],0z!!iQ'z!!E9!z!!E9!z!!3,tz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,tz!!3,tz!!3-!z!!3-!z!!3-"z!!3-"
-!!)co!!E8uJ-5cN!!E8u^^'i=!!iQ"i",hf#S6t1pcncY&-)\)IfKEJ&-)\)J,fP!"98Dr5QCb6!.Y%D
-+92 at k!"],)&-)Y0!!3,p#QOf(!!%ND"98B$!!!Q)!WW-!!!!,r!<;rs!!!"D!'g5Yz!!@`O~>
-Q
-q[1 0 0 1 0 0]concat
-127 74 true[1 0 0 1 -4214 -5340]@85 imagemask
-#QOi(s+(.Ls8VR!
-s8W,u#QOi(s+(.Ls8VR!s8W,u!WW3"n,P]Qs8E!/s8W,o!"],0J,fWMs7cQoJ,fKJ!!E9$!!!"Ks53kW
-+926=!!E9#!!!"Ks53kW#QOQ!!!3-!!!!!`s1eU7#QOQ!!!3,t!!!!`s1eU7#QO8n!!*&s!!!!@s1eU7
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"979Z!!*&s!!!!`s*t(L"979Z!!*&s!!!!`s1eU7#QN]^!!*&u!!!!`s1eU7#QN]^!!*'!!!!!`s53kW
-#QN]^!!*'!J,fS!s6p!g#QMR>!!3-"^]4 at as7cQo&-'EF!!3,sn,NIgrql`r&-'EF!!3,qp](<or-n\H+9-ik!!E8rrr<*"r',]35Q?66"98Dr5JRO(p`JDos8N'!"98Dr+9"M)p]pg0s8N'!"98Dr
-&-)\0n,r^js8Duu!'gMY"98E$huWlXs82is!!iQ!!WW3"huJ9,s82is!!*&o!.Y%K^]6V!s7cQo!!",9
-!$D7@!!!Q0s53kW!!!,r!"],/!!!-$s1eU7!!!"D!!3,p!!!"Krr<$!z!!!N0!!!!"huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -4337 -5340]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -4487 -5338]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -4551 -5305]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-116 108 true[1 0 0 1 -2464 -5158]@85 imagemask
-z!!#7`qu?]s
-zz#QOi(huE`Wz!!!"Ks8W,szz!!3-"s8W+Lzz#QOi(s8V!Wz
-!!!!@s8W-!s7cQoz!!#7`s8W-!qu?]sz!<<*!!!3-"z!!!!"s8VQg!$D5kz!!!-$
-s*t(L"96.:z!!iQ'zs53kWz&-)P-!!!!`n,NFg!!!!@s7cQo!!!Q)z!!", at n,NFg!!iE%z
-!'gMAz"8i-!zJ,d:a!!!!"rVuou!!!"Ks*t(L!!!$!z!!*'!z!!%KKz!<<'!
-z!.TM!zs8Duuz5C`_6!!!'"rVuou!!!!@^]4?7!!3,tz!!"+Vz"989!z
-!"ZjF!!!!$s82isz&)[Ef!!!-$p](9o!!!!0huE`W!!E8rz!!!Pfz#QOQ!z!!hE^!!!!(s7cQo
-z#Oh]n!!!9(p](9o!!!!(n,NFg!!iPnz!!!8nz#QO8nz!!hun!!!!(s6p!gz
-"7Q9j!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir
-!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$
-p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o
-!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!
-z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz
-&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!
-z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z
-!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!g
-z"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz
-"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir
-!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$
-p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o
-!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!
-z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!9!z
-&-),!z!!iE%!!!!0s6p!gz#Q+Q%!!!Q0n,NFg!!!!(qu?]s!$D71z!!!9%z+92*9
-z!"]&/!!!!@s7cQoz&,lP/!!#7`qu?]s!!!!@rr<$!!'gM]z!!#7`J,fQLs8W*!z
-!.Y$a!!!-$s8Tk7!!!!$s8Vio!.Y%Ks8Duu!!#7`s8RTSs8W-!s53kW!WW3"s6p9ns8W-!huE`Xs8W-!n-B!ns8W,W!!!'"s8W,g~>
-Q
-q[1 0 0 1 0 0]concat
-81 74 true[1 0 0 1 -2579 -5160]@85 imagemask
-"98E$rrN0"s8RTO
-s8W-!!WW3"s*t.Ms8W&us8W-!!!!Q0s1eUFs8V!W!!iQ(!!!-$s*t(L"98?#!!3-"!!!!"s8Duu!<<'!
-!!!'"qu?]ss8N'!!!*&s!!!$!rVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"K
-rVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!
-qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou
-!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ
-!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs
-!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!
-qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou
-!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]s
-s8Duu!!*&u!!!$!qu?]s!<<'!!!*&szs8RTL!<;rs!!!$!s1eU8s82is!!3-"huEfXp](9o!WW2p
-!!E8r!!!!$s8Diq#QOQ!!!!9(r-n\gs6p!g"98E!5Oe^Qn,NFjs8W!=s8W,W!!!-$s83E-s8V!W!!%NK
-r!39%s1eU7!!iQ%"98E$J,fQL!<;rss8W*!z+8c+gs8Duu!!!!$qu at i=p](9o!!!"H!!iP^z!!!Q1!'C5]!!!~>
-Q
-q[1 0 0 1 0 0]concat
-43 109 true[1 0 0 1 -2660 -5160]@85 imagemask
-"98E$s54"Zs8W,W
-!WW3"s1eU>s8Vio!!3-"huE`Ws8Tk7!!%NKJ,fQLJ,b$!!!%NKz5Q:]`!!#7`z5Q:]`!!#7`
-z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z
-5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z
-5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`
-!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`
-z5Q:]`!!#7`z5Q:]`!!%NKzJ,]KK!W`9#!!!,ms8N'!"98E$!!!$!s8N'!!$D7@!!!!$s8N'!!!%NK
-z+9)<@!!!-$z!.OtK!!!!0zzzzzzzzzz
-zzzzzzzzzzzzzzzz
-zzzzz"+U at O!!",1z5PP3Y!!%NHzJ,TEJ!!*'!zs8N'!!!*'!zs8N'!!!*'!zs8N'!!!%NJzJ,TEJ!!#7]z+8>g9!!!Pf!!!~>
-Q
-q[1 0 0 1 0 0]concat
-48 95 true[1 0 0 1 -2704 -5158]@85 imagemask
-!!!!]z"979Z
-!!!9(p](9o+92<?!!#7`s*t(L5QCc!!!%NKs53kWs8W,g!!*'!kP,#Ws8N)s!!3-!!'C5^s82j<!!3,p
-!"T&1s7cQu!!E8r!!!!$s7cQo!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$
-s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$
-s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g
-!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j
-!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!9(s8W,g#QOi(s6p-js8W,g!WW3"s6p#<s8W,g
-!'gMQ!!!!@s6p!g!"],!!!!!(s6p!g!!E8j!!!!"s6p!g!!*&gzJ+*F<!!#7Qz+7K71!!",1
-z&+BQ!!!!8nz#Oh]n!!!,jz!Up'h!!!#gz!:Tsg!!!"<z!&+BQ!!!!A!!!~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -2750 -5160]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -2898 -5158]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -2962 -5125]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-98 106 true[1 0 0 1 -2385 -4560]@85 imagemask
-&-)\0s8W-!s8W,u
-!"],0s8W-!s8W-!rW!3's8W-!s8W-!s8E!'s8W-!s8W-!s8W&u"98E$s8W-!s8W,u!!3-"s8W-!s8W-!
-rW!!!s53kW!!!!`s8N'!s8V!Wz!WW0"!.Y%<z!!#7`!!#7`p](9o!!!!0rr<$`s7cQoz
-#QFc(+926=z!!E6$!"],/z!!!'"!!!Q0rr<$!zs*t(Ss8N'!z!.TM!"98COz!!#66!!3-"
-^]4?7!!!!`J,fWMs1eU7z++O=ks8V!Wz!$?^k!.Y%<z!!!O[!!%NKn,NFg!!!!0J,fR6
-s7cQoz#J^<>+926=z!!g:>!"],/z!!!8>!!!Q0rVuou!!!!$^]4?>s8N'!z"2Fm:
-"98COz!!C":!!E9$J,fQL!!!&8!!!'"s1eU7zzs8V!Wzz!.Y%<zz!!%NKn,NFg
-z!!!!`s7cQozz+926=zz!$D7=zz!!!Q0rVuouz!!!!(s8N'!
-zz"98COzz!!E9$J,fQLz!!!'"s1eU7zzs8V!Wzz!<<)W
-zz!!%NKn,NFgz!!!!`s7cQozz+92*9zz!$D7=zz!!!Q0rVuouz
-!!!!(s8N'!zz#QOf(zz!!E9$J,fQLz!!!'"s1eU7zzs8Tk7z
-z!<<)Wzz!!%NKn,NFgz!!!!`s7cQozz5QCKYzz!$D7=z
-z!!!Q0rVuouz!!!!(s8Duuzz#QOf(zz!!E9$J,fQLz!!!'"s1eU7z!!!!"
-s8Tk7zz!<<)Wzz!!%NKn,NFgz!!!!`s6p!gzz5QCKYzz
-!$D7=zz!!!Q0qu?]sz!!!!(s8Duuzz#QOf(zz!!E9$J,fQLz
-!!!'"s*t(Lz!!!!"s8Tk7zz!<<)Wzz!!%NKhuE`Wz!!!!`s6p!gzz5QCKY
-zz!$D7=zn,NFg!!!Q0qu?]s!:Tsg!!!!0s8Duu!!)coz#QOf(!!!#oz!!E9$
-zGQ7^D!!!'"s*t(L!-eJD!!!!"s8Tk7!!%BHz!<<)W!!!"Hz!!%NKhuE`WHiO-H!!!"K
-s6p!g!.FnJz5QCKY!!%HJz!$D79!!!"Kz!!!Q0qu?]sIfKHK!!!!0s8Duu!'bu6z#QOf(!!#7!z!!E9$!!!!`huE`W!!!-$s*t(L5O\XQ!!!!"s8Tk7!'gA]
-z!<<)7!!#7`z!!%NKhuEaAs53kW!!!"Ks6p!g5QC]_z5QC3Q!$D7 at s8W-!s8W,o!!",@
-s8W-!s8W-!qu?^=s8W-!s8W-!s8Duu+92B at s8W-!s8W&u!$D7 at s8W-!s8W,u!!", at s8W-!s8W-!rVu~>
-Q
-q[1 0 0 1 0 0]concat
-70 76 true[1 0 0 1 -2490 -4558]@85 imagemask
-zp](9oz
-5QBXAz!WW3!z!"],0s*t(L!!#7`s8V!W!!!"Ks5F"Q!!!!"s8E!?qu?]s"98,r#QFc(!!iP^
-!!3+M!!",@^]4B7^]4@!s*t(LJ)C;,J,]KK!'frQ!.XtJ!!",9!!*&s!!!!@qu?ctp](9o&,ZD0s7cQo
-!"]&/"97ij!!!9(!!iPn!!!!(rr<<(huE`W"93l^s53kW!!E7O&-(Pf!!!-$^`WTl!!!!"s1f`V^]4?7!WV(Bs1eU7
-!!3,X5Q?66!!!'"n3?r'!!!!"s6tO<J,fQL!<;P<rr<$!!!*&gJ,]KK!!!$!pj`;Dzs7h*Dz
-!<;iorVuou!!*&os8Duu!!!$!q#C<nzs8;orz!<;usrVuou!!*&ss8Duu!!!$!r;ZZpz
-s8;opz!<;usqu?]s!!*&ss82is!!!$!r;ZZpzs8;opz!WW)tqu?]s!!3,ts82is!!!'"r."VE!!!!"
-s87BEz!WVqEqu?]s!!E8rJ,B9H!!!-$pj`2A!!!!$s7ehVz"98-\qu?]s!!iPn5Q1W_!!!9(
-n/qW0!!!!(s6q-0z&-(Q0rVuou!"]+f&,lP/!!!Q0^^pGF!!!!@s1em>z+9-irs*t(L!'gL6
-"93lO!!#7`!!3,8!!!"KrW!!!^]4?7s8Duus53kW!<;rs!.XJ<!!3,p!!#7Q!!!-$n,NG1qu?^%s53kW&,lP/+90+V!!iN(!'gL6!!!'"
-^]FK7zs8F,?qu?]s!'gM`s6p!g!!!Q0s8Tk7!!!!$s8W*!z!'gMQz!!!#sz~>
-Q
-q[1 0 0 1 0 0]concat
-70 76 true[1 0 0 1 -2570 -4558]@85 imagemask
-zp](9oz
-5QBXAz!WW3!z!"],0s*t(L!!#7`s8V!W!!!"Ks5F"Q!!!!"s8E!?qu?]s"98,r#QFc(!!iP^
-!!3+M!!",@^]4B7^]4@!s*t(LJ)C;,J,]KK!'frQ!.XtJ!!",9!!*&s!!!!@qu?ctp](9o&,ZD0s7cQo
-!"]&/"97ij!!!9(!!iPn!!!!(rr<<(huE`W"93l^s53kW!!E7O&-(Pf!!!-$^`WTl!!!!"s1f`V^]4?7!WV(Bs1eU7
-!!3,X5Q?66!!!'"n3?r'!!!!"s6tO<J,fQL!<;P<rr<$!!!*&gJ,]KK!!!$!pj`;Dzs7h*Dz
-!<;iorVuou!!*&os8Duu!!!$!q#C<nzs8;orz!<;usrVuou!!*&ss8Duu!!!$!r;ZZpz
-s8;opz!<;usqu?]s!!*&ss82is!!!$!r;ZZpzs8;opz!WW)tqu?]s!!3,ts82is!!!'"r."VE!!!!"
-s87BEz!WVqEqu?]s!!E8rJ,B9H!!!-$pj`2A!!!!$s7ehVz"98-\qu?]s!!iPn5Q1W_!!!9(
-n/qW0!!!!(s6q-0z&-(Q0rVuou!"]+f&,lP/!!!Q0^^pGF!!!!@s1em>z+9-irs*t(L!'gL6
-"93lO!!#7`!!3,8!!!"KrW!!!^]4?7s8Duus53kW!<;rs!.XJ<!!3,p!!#7Q!!!-$n,NG1qu?^%s53kW&,lP/+90+V!!iN(!'gL6!!!'"
-^]FK7zs8F,?qu?]s!'gM`s6p!g!!!Q0s8Tk7!!!!$s8W*!z!'gMQz!!!#sz~>
-Q
-q[1 0 0 1 0 0]concat
-127 74 true[1 0 0 1 -2642 -4560]@85 imagemask
-#QOi(s+(.Ls8VR!
-s8W,u#QOi(s+(.Ls8VR!s8W,u!WW3"n,P]Qs8E!/s8W,o!"],0J,fWMs7cQoJ,fKJ!!E9$!!!"Ks53kW
-+926=!!E9#!!!"Ks53kW#QOQ!!!3-!!!!!`s1eU7#QOQ!!!3,t!!!!`s1eU7#QO8n!!*&s!!!!@s1eU7
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"979Z!!*&s!!!!`s*t(L"979Z!!*&s!!!!`s1eU7#QN]^!!*&u!!!!`s1eU7#QN]^!!*'!!!!!`s53kW
-#QN]^!!*'!J,fS!s6p!g#QMR>!!3-"^]4 at as7cQo&-'EF!!3,sn,NIgrql`r&-'EF!!3,qp](<or-n\H+9-ik!!E8rrr<*"r',]35Q?66"98Dr5JRO(p`JDos8N'!"98Dr+9"M)p]pg0s8N'!"98Dr
-&-)\0n,r^js8Duu!'gMY"98E$huWlXs82is!!iQ!!WW3"huJ9,s82is!!*&o!.Y%K^]6V!s7cQo!!",9
-!$D7@!!!Q0s53kW!!!,r!"],/!!!-$s1eU7!!!"D!!3,p!!!"Krr<$!z!!!N0!!!!"huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -2766 -4560]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -2917 -4558]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -2979 -4525]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-51 75 true[1 0 0 1 -3067 -4558]@85 imagemask
-!!!!]!!!!=!$D7!
-!!!u at s8Vus!$D7 at s8N'!+92?Os1eUVs53m,huFl!J,g\\!$D1?!!i9!+8c*="8i- at p](9rrW"&0!!!'"
-!$C\1!!3*"+5d,!!<7Qk^]4?7s*u3,!!!$!^`S(,!!*&7++O=k!<9hVJ,fQLs54t!!!!$!i#_q!!!3,X
-*WQ0?!WV(!!!!!$s54pu!!!9(i#Vju!"]+f)uos=+917=!!!!`s1eU7!!%NK^]4?7!WW28!!!!(s8RTL!!!Q0s*t(L
-!'gM`zs8W*!!!!-$s8Duu!!iQ(qu?]s+92B9!!!"Ks8VQg!!*'!s53kW"98E$J,fQSs8W*!!!!Q0
-s82is!$D7 at n,NFgJ,fQ,!!!$!s8RTL!!*'!rVuou!WW2t!!!!$s8VQg!!!9(s1eU7!!iQ(z&-)V/
-!!!!0s7cQo!!!Q0huE`W!$D6Vz+9-ik!#tt\rr<$!)uq)[!!!!]!$D+=!!#+]+8c*=!'C6'qu?]sHiP8`!!!"H!$Ct9!!%BH&,6,)!;HO)p](9op](j"!!!&p!!i9!!!2ip#Q+Q%"8Diuqu?^!p](Eo
-!!!9!!!3'!!"\i)!<3$!+8>g9J%u&6p](:Yn,`Ra!!", at s8Vio!!iQ(rceDC!WW2h2uipY5Q?66!!~>
-Q
-q[1 0 0 1 0 0]concat
-82 67 true[1 0 0 1 -2313 -4020]@85 imagemask
-&-)\-!!!-$s8N'@
-s8W*!!!iQ(s+!?6s8N'!&-)\0^d%l!rr<$0s8W,75QCc`!!!Q0s8TkVs8W&u!!iQ(s*tX[s82is"98E$
-!!*%Lz!'frQ!.VcazJ)C;,+7K71!!!$!J,fQ[p](9o!!3*"!!!9%z"9&9#!!E3#!!!!(
-qu?]s!WN-"!!!Q)zs*t(L!$C\1!!!"K^]4?75MuMA!!#7A!!!"K^]4?7!$C\1!!*%Lz&,6,)!WN-"!!!!(
-qu?^!rVuou!!!-#!!!Q-z!!3*"!$Ct9z!<9h75O\XQzJ)C<VhuE`W!!!!`n,WL(z
-!!",9!WRZMz!"\u0rr<$!z#Q=u-z!!!!$rt##-z!!!$!TC;g\z!!%NKhuE`W
-z!'gM!zz+9-ikz!!!!0rr<$!z!!!9'zz!!iK'zz&,uV0z!!!!@
-s*t(Lz!!#7`^]4?7z!.Y%,zzs.Ac\z!!!'"&,6,)z!!E3*qu?]sz
-#Q+]'z!!!!@p]:DFz!!#7Q!.Vcaz!.Wo,5MuMAzs1eUVn,NFg!!!'"J,g,Tz
-!!E3#!!iE%z#Q+Q%"9&9#!!!!0p](9prr<$!!!",1!!!$!J,fQL!'fBA!!%MazJ%u$a!'fBA!!!$!J,fQL
-+7K71!!3*"!!!!0p](9o"9&9#!!!9%!!!!(qu?]s!!E3#!!!Q)z!WN-"!<<)u!!!-$s6p!js8W*!
-!"],0qu?j!s8N'!&-)\-!!E9$rr<$0s8Vus"98E$!!!Q0s82j!s8W*!!"],0qu?cts8Duu"98Dj!!~>
-Q
-q[1 0 0 1 0 0]concat
-65 112 true[1 0 0 1 -2408 -4018]@85 imagemask
-!$D79z!!3-"
-s*t(L!!!9(s8Vio!!!!0s8W,uz5QCc`s1eU7!'gM`s8VQg!!%NKs1f`O!!!$!s8N'$rVuous8Vus
-!<3$!!<<)g!!%Ma!!*'!huEa!huEcWs*t(L&+BQ!J,]KK!!i9!!.XnH!!!9%!!#7Q!!!!$rVup'z
-!WE'!z!!*$!z!!!$!J,fQLzJ%u$az!.Vcaz!!#7Az!!!!`huE`Wz5O\XQz
-!$C\1z!!",1z!!!!@p](9oz+8>g9z!"\i)z!!!Q-z!!!!0qu?]sz
-&,ZD-z!"\u-z!!!Q-z!!!!0rVuouz&,lP/z!"]&/z!!!Q/z!!!!0
-rVuouz&,lP/z!$D1?z!!",?z!!!!@rVuouz+8u6?z!$D1?z!!#7_z!!!!`
-rVuouzJ,TEJz!.XtJz!!*&sz!!!$!qu?]s!!!!"s82isz"989!z!!E9!
-z!!!9(p](9o!!!!0s7cQoz+92*9z!.Y%<z!!*'!n,NFg!!!'"s53kW!!!!(s8V!W
-z+92AVz!.Y%KJ,fQL!!3-"s*t(L!!!9(s8N'!!!!!`s8W&u!!!!$s8W,sz5QCc`p](9o#QOi(s6p!g
-#QOi(s8V!W!!iQ(s8W,7!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s82is!!3-"s8Vio!!!'"s8W,Wz
-s8W-!J,fQL!<<*!qu?]s!!%NKs53kW!!!"Ks8N'!z5QC3Qz!'gG_z!!"+Vz!!!!@
-^]4?7z&&8/Fz!"[ufz!!!8^z!!!!(n,NFgz#Oh]nz!!Durz!!!,rz!!!!"
-qu?]sz!W2otz!!)uuz!!!#uzzIfKHKz!.Y%Ks8Tk7!!#7`s8W,W!!!!`
-s8W-!huE`W5QCc`s6p!g!$D7 at s8VQg!!", at s8W,o!!!!0s8W-!p](9o&-)\0s7cQo!!iQ(s8Vus!!!9(
-s8W,s!!!!$s8W-!rVuou"98E$s8Duu!!3-"s8W*!z!!!!0zz#64`(z!!@`Oz!!!$"~>
-Q
-q[1 0 0 1 0 0]concat
-82 67 true[1 0 0 1 -3033 -4020]@85 imagemask
-&-)\-!!!-$s8N'@
-s8W*!!!iQ(s+!?6s8N'!&-)\0^d%l!rr<$0s8W,75QCc`!!!Q0s8TkVs8W&u!!iQ(s*tX[s82is"98E$
-!!*%Lz!'frQ!.VcazJ)C;,+7K71!!!$!J,fQ[p](9o!!3*"!!!9%z"9&9#!!E3#!!!!(
-qu?]s!WN-"!!!Q)zs*t(L!$C\1!!!"K^]4?75MuMA!!#7A!!!"K^]4?7!$C\1!!*%Lz&,6,)!WN-"!!!!(
-qu?^!rVuou!!!-#!!!Q-z!!3*"!$Ct9z!<9h75O\XQzJ)C<VhuE`W!!!!`n,WL(z
-!!",9!WRZMz!"\u0rr<$!z#Q=u-z!!!!$rt##-z!!!$!TC;g\z!!%NKhuE`W
-z!'gM!zz+9-ikz!!!!0rr<$!z!!!9'zz!!iK'zz&,uV0z!!!!@
-s*t(Lz!!#7`^]4?7z!.Y%,zzs.Ac\z!!!'"&,6,)z!!E3*qu?]sz
-#Q+]'z!!!!@p]:DFz!!#7Q!.Vcaz!.Wo,5MuMAzs1eUVn,NFg!!!'"J,g,Tz
-!!E3#!!iE%z#Q+Q%"9&9#!!!!0p](9prr<$!!!",1!!!$!J,fQL!'fBA!!%MazJ%u$a!'fBA!!!$!J,fQL
-+7K71!!3*"!!!!0p](9o"9&9#!!!9%!!!!(qu?]s!!E3#!!!Q)z!WN-"!<<)u!!!-$s6p!js8W*!
-!"],0qu?j!s8N'!&-)\-!!E9$rr<$0s8Vus"98E$!!!Q0s82j!s8W*!!"],0qu?cts8Duu"98Dj!!~>
-Q
-q[1 0 0 1 0 0]concat
-79 110 true[1 0 0 1 -3120 -4018]@85 imagemask
-z&-'EFz
-!!%NKqu?]s!!!!$s8W*!z!"],0s1eU7!!!!`quHcTz!.XJ<5PP3Y!!!$!huFksz!WRZM
-#Q=]'!!!-$!!!-$z#Q=]'!WRZM!!!Q/!!!'"^]4?7+8c*=!<:sW!!#7Y!!!"Kn,NFg5PP3Y!.XJ<
-!!%N<!!!!`p](9os6p!g!'gA]!!*&W!!!!@qu?]ts53kW!$D1?!!3,X!!!!@rVup#s1eU7!"])0!!E8:!!!!0rr<$(
-s1eU7!"]*[!!iOS!!!!(s*t(Ss*t(L!!iOS!"]*[!!!!(s1eUFs*t(L!!iP>!"])0!!!!$s53l!rr<$!
-!!E8Z!$D4@!!!!$s53l!rr<$!!!E8j!'gJ`!!!!$s6p"QrVuou!!3,h!'gG_!!!!"s6p"QrVuou!!3,p
-!.XtJ!!!!"s7cSDrVuou!!3,p!.XtJ!!!!"s7cSDrVuou!!3,p!.XtJ!!!!"s82lsrVuou!!3,t!<;rszs82ls
-qu?]s!!*&s!<;rszs82lsqu?]s!!*&s!<;rszs82lsqu?]s!!*&u!WW&tzs8E'!qu?]s
-!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u
-!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!
-qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E#uqu?]s!!*&s!<;rszs82lsqu?]s
-!!*&s!<;rszs82lsrVuou!!3,t!<<#u!!!!"s82lsrVuou!!3,t!.XtJ!!!!"s7cSDrVuou!!3,p
-!.XtJ!!!!"s7cSDrVuou!!3,p!.XtJ!!!!"s7cRYrVuou!!3,h!'gJ`!!!!$s6p"Qrr<$!!!E8j!$D4@!!!!$s6p"1
-rr<$!!!E8Z!$D4@!!!!$s53l!s*t(L!!iP^!"]*[!!!!(s1eUFs*t(L!!iP>!!iOS!!!!(s*t(Ss1eU7
-!!iOS!!iP>!!!!0s*t(Os1eU7!"])0!!E8:!!!!0rr<$"s53kW!$D1?!!3,X!!!!@rVuous6p!g!'gA]
-!!%N<!!!!`p](9oJ+*F<!'g5Y!!#7Y!!!"Kn,NFg+8c*=!<:sW!!",=!!!$!huE`W&,lP/!WTq8!!!9(!!!-$J,fQL"9/?$#QFc(!!!'"J,g,Zz!<:sW+8c*=
-!!!"Kn,P]Bz!$D+>s53kW!!!!0s8W+Lz!!E9$rr<$!zJ,f9Dz!!!Q0^]4?7~>
-Q
-q[1 0 0 1 0 0]concat
-24 18 true[1 0 0 1 -3209 -4018]@85 imagemask
-!"ZjF5O\Z&p]1?l!WW-"s8E-#rr`<$"98B's8N3$rr`<$!WW-"s8E#uquD6A!'frQ&&8~>
-Q
-q[1 0 0 1 0 0]concat
-71 108 true[1 0 0 1 -3248 -4020]@85 imagemask
-s8W-!s8W,s!<<*!
-s8W-!rW)uus8W-!s8E"Js8W-!s8W*!5QCc`s8W-!!$D7 at s8W-!rr<T0s8W-!s8RTSs8W-!s8W+L"98E$
-s8W-!^]FK8s8W-!s1eX7s8W-!s8Tk7J,fQKs8W,W!'^G`!!!!@huFjLz#Oh^(^]4?7!!2Qh#N,R^
-!!!#g!!D]jzp](Ekz!-eJEqu?]s!!#+]!<)ru!!!!=!!%KKz)uot'z!"Ju/++O=kz!"ZjF
-z!!!8^z!!!!$n,NFgz!VcWpz!!)osz!!!"Jzz56(Z`z!$?^k
-z!!!PFz!!!!(huE`Wz"7Q9jz!!Durz!!!&tzzrVuouz!.OtK
-z!!#66z!!!!@^]4?7z+5d,!z!"[ufz!!!8nz!!!!$p](9oz"8i-!z!!3'!
-z!!!$!zzs*t(Lz!.Vcaz!!%Maz!!!!`huE`Wz+7K71z!$Ct9
-z!!!Q)z!!!!0qu?]sz#Q=]'z!!iK'z!!!9(z!!!!$s*t(Lz"93lO
-z!!3,8z!!!'"^]4?7!!!!"s53kWz!<:sWz!!*&gz!!!$!n,NFgzs6p!gz!<;fo
-z!!%NDz!!!"Kp](9ozJ,B9Hz!.XnHz!!%NHz!!!"Kqu?]szJ,TEJ
-z!.XtJn,NFg!!%NJ!:Tsg!!!"KrW)]nzJ,TFmz!<<#uGQ7^D!!*&u!.4bH!!!$!rW#%\
-zs8E!^z!WW-!56(Z`!!3-!!$;1@!!!-$qu at gh!!!!$s82j=J,fQL#QO]%&&8/F!"],-!"[uf!!", at p](Qg!!!!`s7cR!p](9oJ,f9D"8i-!!<<)g!!E3#!!E9$n,NLh
-J,g,[s53kWs6p#<s8Tk7!.Y%Ks8W,7!!#7`s8W-!J,fR6s8W-!rr<$!+92B at s8Duu!!iQ(s8Vus!!!-$
-s8W,o!!!!"s8W-!huE`W!.Y%Ks1eU7!!#7`s8N'!!!!!0s8Vusz!WW2hz!!#7`z~>
-Q
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/switchmap.c b/ast-5.3-1/switchmap.c
deleted file mode 100644
index d00e4b7..0000000
--- a/ast-5.3-1/switchmap.c
+++ /dev/null
@@ -1,2875 +0,0 @@
-/*
-*class++
-* Name:
-* SwitchMap
-
-* Purpose:
-* A Mapping that encapsulates a set of alternate Mappings.
-
-* Constructor Function:
-c astSwitchMap
-f AST_SWITCHMAP
-
-* Description:
-* A SwitchMap is a Mapping which represents a set of alternate
-* Mappings, each of which is used to transform positions within a
-* particular region of the input or output coordinate system of the
-* SwitchMap.
-*
-* A SwitchMap can encapsulate any number of Mappings, but they must
-* all have the same number of inputs (Nin attribute value) and the
-* same number of outputs (Nout attribute value). The SwitchMap itself
-* inherits these same values for its Nin and Nout attributes. Each of
-* these Mappings represents a "route" through the switch, and are
-* referred to as "route" Mappings below. Each route Mapping transforms
-* positions between the input and output coordinate space of the entire
-* SwitchMap, but only one Mapping will be used to transform any given
-* position. The selection of the appropriate route Mapping to use with
-* any given input position is made by another Mapping, called the
-* "selector" Mapping. Each SwitchMap encapsulates two selector
-* Mappings in addition to its route Mappings; one for use with the
-* SwitchMap's forward transformation (called the "forward selector
-* Mapping"), and one for use with the SwitchMap's inverse transformation
-* (called the "inverse selector Mapping"). The forward selector Mapping
-* must have the same number of inputs as the route Mappings, but
-* should have only one output. Likewise, the inverse selector Mapping
-* must have the same number of outputs as the route Mappings, but
-* should have only one input.
-*
-* When the SwitchMap is used to transform a position in the forward
-* direction (from input to output), each supplied input position is
-* first transformed by the forward transformation of the forward selector
-* Mapping. This produces a single output value for each input position
-* referred to as the selector value. The nearest integer to the selector
-* value is found, and is used to index the array of route Mappings (the
-* first supplied route Mapping has index 1, the second route Mapping has
-* index 2, etc). If the nearest integer to the selector value is less
-* than 1 or greater than the number of route Mappings, then the SwitchMap
-* output position is set to a value of AST__BAD on every axis. Otherwise,
-* the forward transformation of the selected route Mapping is used to
-* transform the supplied input position to produce the SwitchMap output
-* position.
-*
-* When the SwitchMap is used to transform a position in the inverse
-* direction (from "output" to "input"), each supplied "output" position
-* is first transformed by the inverse transformation of the inverse
-* selector Mapping. This produces a selector value for each "output"
-* position. Again, the nearest integer to the selector value is found,
-* and is used to index the array of route Mappings. If this selector
-* index value is within the bounds of the array of route Mappings, then
-* the inverse transformation of the selected route Mapping is used to
-* transform the supplied "output" position to produce the SwitchMap
-* "input" position. If the selector index value is outside the bounds
-* of the array of route Mappings, then the SwitchMap "input" position is
-* set to a value of AST__BAD on every axis.
-*
-* In practice, appropriate selector Mappings should be chosen to
-* associate a different route Mapping with each region of coordinate
-* space. Note that the SelectorMap class of Mapping is particularly
-* appropriate for this purpose.
-*
-* If a compound Mapping contains a SwitchMap in series with its own
-* inverse, the combination of the two adjacent SwitchMaps will be
-* replaced by a UnitMap when the compound Mapping is simplified using
-c astSimplify.
-f AST_SIMPLIFY.
-
-* Inheritance:
-* The SwitchMap class inherits from the Mapping class.
-
-* Attributes:
-* The SwitchMap class does not define any new attributes beyond those
-* which are applicable to all Mappings.
-
-* Functions:
-c The SwitchMap class does not define any new functions beyond those
-f The SwitchMap class does not define any new routines beyond those
-* which are applicable to all Mappings.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 13-MAR-2006 (DSB):
-* Original version.
-* 17-MAR-2006 (DSB):
-* Guard against AST__BAD selector values.
-* 9-MAY-2006 (DSB):
-* Check selector Mapping pointers are not NULL before calling
-* astEqual in Equal.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS SwitchMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "mapping.h" /* Coordinate Mappings (parent class) */
-#include "unitmap.h" /* Unit Mappings */
-#include "channel.h" /* I/O channels */
-#include "switchmap.h" /* Interface definition for this class */
-#include "frame.h" /* Frames */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <string.h>
-#include <stdio.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(SwitchMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(SwitchMap,Class_Init)
-#define class_vtab astGLOBAL(SwitchMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstSwitchMapVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstSwitchMap *astSwitchMapId_( void *, void *, int, void **, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMapping *RemoveRegions( AstMapping *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetObjSize( AstObject *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static AstMapping *GetSelector( AstSwitchMap *, int, int *, int * );
-static AstMapping *GetRoute( AstSwitchMap *, double, int *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Member functions. */
-/* ================= */
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two SwitchMaps are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "switchmap.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* SwitchMap member function (over-rides the astEqual protected
-* method inherited from the astMapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two SwitchMaps are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Object (a SwitchMap).
-* that
-* Pointer to the second Object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the SwitchMaps are equivalent, zero otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstMapping *fsmap1;
- AstMapping *fsmap2;
- AstMapping *ismap1;
- AstMapping *ismap2;
- AstMapping *rmap1;
- AstMapping *rmap2;
- AstSwitchMap *that;
- AstSwitchMap *this;
- int fsinv1;
- int fsinv2;
- int isinv1;
- int i;
- int isinv2;
- int nroute;
- int result;
- int rinv1;
- int rinv2;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain pointers to the two SwitchMap structures. */
- this = (AstSwitchMap *) this_object;
- that = (AstSwitchMap *) that_object;
-
-/* Check the second object is a SwitchMap. We know the first is a
- SwitchMap since we have arrived at this implementation of the virtual
- function. */
- if( astIsASwitchMap( that ) ) {
-
-/* Check they have the same number of route mappings. */
- nroute = this->nroute;
- if( that->nroute == nroute ) {
-
-/* Get the forward selector Mappings from the two SwitchMaps. */
- fsmap1 = GetSelector( this, 1, &fsinv1, status );
- fsmap2 = GetSelector( that, 1, &fsinv2, status );
-
-/* Are they equal? */
- if( ( !fsmap1 && !fsmap2 ) ||
- ( fsmap1 && fsmap2 && astEqual( fsmap1, fsmap2 ) ) ) {
-
-/* Get the inverse selector Mappings from the two SwitchMaps. */
- ismap1 = GetSelector( this, 0, &isinv1, status );
- ismap2 = GetSelector( that, 0, &isinv2, status );
-
-/* Are they equal? */
- if( ( !ismap1 && !ismap2 ) ||
- ( ismap1 && ismap2 && astEqual( ismap1, ismap2 ) ) ) {
-
-/* Loop over the route mappings, breaking as soon as two unequal route
- Mappings are found. Re-instate the original values for the route
- Mapping Invert flag after testing the route Mappings for equality. */
- result = 1;
- for( i = 0; result && i < nroute; i++ ) {
- rmap1 = GetRoute( this, (double) ( i + 1 ), &rinv1, status );
- rmap2 = GetRoute( that, (double) ( i + 1 ), &rinv2, status );
- if( !astEqual( rmap1, rmap2 ) ) result = 0;
- astSetInvert( rmap2, rinv2 );
- astSetInvert( rmap1, rinv1 );
- }
- }
-
-/* Reinstate the invert flags for the inverse selector Mappings. Ensure
- this is done in the opposite order to which the selector Mappings were
- obtained (in case they are in fact the same Mapping). */
- if( ismap2 ) astSetInvert( ismap2, isinv2 );
- if( ismap1 ) astSetInvert( ismap1, isinv1 );
- }
-
-/* Reinstate the invert flags for the forward selector Mappings. Ensure
- this is done in the oppsote order to which the selector Mappings were
- obtained (in case they are in fact the same Mapping). */
- if( fsmap2 ) astSetInvert( fsmap2, fsinv2 );
- if( fsmap1 ) astSetInvert( fsmap1, fsinv1 );
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "switchmap.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* SwitchMap member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied SwitchMap,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the SwitchMap.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstSwitchMap *this;
- int i;
- int result;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the SwitchMap structure. */
- this = (AstSwitchMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by this class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
-
- result += astGetObjSize( this->fsmap );
- result += astGetObjSize( this->ismap );
-
- for( i = 0; i < this->nroute; i++ ) {
- result += astGetObjSize( this->routemap[ i ] );
- }
-
- result += astGetObjSize( this->routeinv );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static AstMapping *GetRoute( AstSwitchMap *this, double sel, int *inv, int *status ){
-/*
-* Name:
-* GetRoute
-
-* Purpose:
-* Return a pointer to a route Mapping, handling all Invert flags.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "switchmap.h"
-* AstMapping *GetRoute( AstSwitchMap *this, double sel, int *inv, int *status )
-
-* Class Membership:
-* SwitchMap method.
-
-* Description:
-* This function returns a pointer to a route Mapping (specified by a
-* floating point selector value) for the given SwitchMap, taking account
-* of the state of the Invert flag of both the route Mapping and the
-* SwitchMap.
-
-* Parameters:
-* this
-* Pointer to the SwitchMap.
-* sel
-* The selector value. The nearest integer value (minus 1) is used
-* to index the array of route Mappings stored in the SwitchMap. A
-* NULL pointer is returned if the selector value is out of range.
-* inv
-* Pointer to an int in which to return the original value of the
-* Invert flag of the returned Mapping. The astSetInvert method
-* should be used to re-instate this value once all use of the Mapping
-* has been completed.
-* status
-* Pointer to the inherited status variable.
-
-* Returns:
-* A pointer to the route Mapping to use. Note, the returned pointer
-* should NOT be annulled when no longer needed. NULL is returned
-* (without error) if the SwitchMap does not have a route Mapping for the
-* requested selector value. The forward transformation of the
-* returned Mapping will implenment the forward transformation of the
-* required route Mapping (and vice-versa).
-
-*/
-
-/* Local Variables: */
- AstMapping *ret;
- int rindex;
-
-/* Initialise */
- ret = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return ret;
-
-/* Check selector value is good. */
- if( sel != AST__BAD ) {
-
-/* Convert the supplied floating point selector value into an integer
- index into the array of route Mappings held in the supplied SwitchMap. */
- rindex = (int)( sel + 0.5 ) - 1;
-
-/* Return the null pointer if the index is out of range. */
- if( rindex >= 0 && rindex < this->nroute ) {
-
-/* Get the required route Mapping. */
- ret = ( this->routemap )[ rindex ];
-
-/* Return its original invert flag. */
- *inv = astGetInvert( ret );
-
-/* Set the Invert flag back to the value it had when the SwitchMap was
- created. */
- astSetInvert( ret, this->routeinv[ rindex ] );
-
-/* If the SwitchMap has since been inverted, also invert the returned
- route Mapping, so that the forward transformation of the returned
- Mapping implements the forward transformation of the supplied
- SwitchMap (and vice-versa). */
- if( astGetInvert( this ) ) astInvert( ret );
- }
- }
-
-/* Return the pointer. */
- return ret;
-
-}
-
-static AstMapping *GetSelector( AstSwitchMap *this, int fwd, int *inv, int *status ){
-/*
-* Name:
-* GetSelector
-
-* Purpose:
-* Return a pointer to a selector Mapping, handling all Invert flags.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "switchmap.h"
-* AstMapping *GetSelector( AstSwitchMap *this, int fwd, int *inv, int *status )
-
-* Class Membership:
-* SwitchMap method.
-
-* Description:
-* This function returns a pointer to either the forward or inverse
-* selector Mapping for the given SwitchMap, taking account of the
-* state of the Invert flag of bothe the selector Mapping and the
-* SwitchMap.
-
-* Parameters:
-* this
-* Pointer to the SwitchMap.
-* fwd
-* If non-zero, return the forward selector Mapping. Otherwise,
-* return the inverse selector Mapping.
-* inv
-* Pointer to an int in which to return the original value of the
-* Invert flag of the returned Mapping. The astSetInvert method
-* should be used to re-instate this value once all use of the Mapping
-* has been completed.
-* status
-* Pointer to the inherited status variable.
-
-* Returns:
-* A pointer to the selector Mapping to use. Note, the returned pointer
-* should NOT be annulled when no longer needed. NULL is returned
-* (without error) if the SwitchMap does not have a Mapping for the
-* requested selector.
-
-*/
-
-/* Local Variables: */
- AstMapping *ret;
- int swinv;
-
-/* Initialise */
- ret = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return ret;
-
-/* See if the SwitchMap has been inverted. */
- swinv = astGetInvert( this );
-
-/* If the SwitchMap has been inverted, the forward and inverse selector
- Mappings should be reversed. */
- if( ( !swinv && !fwd ) || ( swinv && fwd ) ){
- ret = this->ismap;
- if( ret ) {
- *inv = astGetInvert( ret );
- astSetInvert( ret, this->isinv );
- }
-
- } else {
- ret = this->fsmap;
- if( ret ) {
- *inv = astGetInvert( ret );
- astSetInvert( ret, this->fsinv );
- }
- }
-
- if( ret && swinv ) astInvert( ret );
-
-/* Return the pointer. */
- return ret;
-
-}
-
-void astInitSwitchMapVtab_( AstSwitchMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitSwitchMapVtab
-
-* Purpose:
-* Initialise a virtual function table for a SwitchMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "switchmap.h"
-* void astInitSwitchMapVtab( AstSwitchMapVtab *vtab, const char *name )
-
-* Class Membership:
-* SwitchMap vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the SwitchMap class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsASwitchMap) to determine if an object belongs to
- this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
-
-/* None. */
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
-#if defined(THREAD_SAFE)
- parent_managelock = object->ManageLock;
- object->ManageLock = ManageLock;
-#endif
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- object->Equal = Equal;
- mapping->MapMerge = MapMerge;
- mapping->Rate = Rate;
- mapping->RemoveRegions = RemoveRegions;
-
-/* Declare the copy constructor, destructor and class dump function. */
- astSetCopy( vtab, Copy );
- astSetDelete( vtab, Delete );
- astSetDump( vtab, Dump, "SwitchMap", "Alternate regionalised Mapping" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra,
- AstObject **fail, int *status ) {
-/*
-* Name:
-* ManageLock
-
-* Purpose:
-* Manage the thread lock on an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *ManageLock( AstObject *this, int mode, int extra,
-* AstObject **fail, int *status )
-
-* Class Membership:
-* SwitchMap member function (over-rides the astManageLock protected
-* method inherited from the parent class).
-
-* Description:
-* This function manages the thread lock on the supplied Object. The
-* lock can be locked, unlocked or checked by this function as
-* deteremined by parameter "mode". See astLock for details of the way
-* these locks are used.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* mode
-* An integer flag indicating what the function should do:
-*
-* AST__LOCK: Lock the Object for exclusive use by the calling
-* thread. The "extra" value indicates what should be done if the
-* Object is already locked (wait or report an error - see astLock).
-*
-* AST__UNLOCK: Unlock the Object for use by other threads.
-*
-* AST__CHECKLOCK: Check that the object is locked for use by the
-* calling thread (report an error if not).
-* extra
-* Extra mode-specific information.
-* fail
-* If a non-zero function value is returned, a pointer to the
-* Object that caused the failure is returned at "*fail". This may
-* be "this" or it may be an Object contained within "this". Note,
-* the Object's reference count is not incremented, and so the
-* returned pointer should not be annulled. A NULL pointer is
-* returned if this function returns a value of zero.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A local status value:
-* 0 - Success
-* 1 - Could not lock or unlock the object because it was already
-* locked by another thread.
-* 2 - Failed to lock a POSIX mutex
-* 3 - Failed to unlock a POSIX mutex
-* 4 - Bad "mode" value supplied.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-*/
-
-/* Local Variables: */
- AstSwitchMap *this; /* Pointer to SwitchMap structure */
- int i; /* Loop count */
- int result; /* Returned status value */
-
-/* Initialise */
- result = 0;
-
-/* Check the supplied pointer is not NULL. */
- if( !this_object ) return result;
-
-/* Obtain a pointers to the SwitchMap structure. */
- this = (AstSwitchMap *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
- if( !result ) result = (*parent_managelock)( this_object, mode, extra,
- fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
- the supplied Object. */
- if( !result ) result = astManageLock( this->fsmap, mode, extra, fail );
- if( !result ) result = astManageLock( this->ismap, mode, extra, fail );
- for( i = 0; i < this->nroute; i++ ) {
- if( !result ) result = astManageLock( this->routemap[ i ], mode,
- extra, fail );
- }
-
- return result;
-
-}
-#endif
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a SwitchMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* SwitchMap method (over-rides the protected astMapMerge method
-* inherited from the Mapping class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated SwitchMap in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated SwitchMap with one which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated SwitchMap which is to be merged with
-* its neighbours. This should be a cloned copy of the SwitchMap
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* SwitchMap it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated SwitchMap resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstSwitchMap *map;
- AstMapping *new;
- int i;
- int nroute;
- int result;
- int fsinv_old;
- int isinv_old;
- int *rinv_old;
- AstMapping *sfsmap;
- AstMapping *sismap;
- int simp;
- AstMapping **srmap;
- AstSwitchMap *swneb;
- int ilo;
- int equal;
-
-/* Initialise.*/
- result = -1;
-
-/* Check the inherited status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to this SwitchMap, and note the number of route Mappings. */
- map = (AstSwitchMap *) this;
- nroute = map->nroute;
-
-/* Temporarily put the Invert flag of all encapsulated Mappings (both
- route and selector) back to the values they had when the SwitchMap was
- created, noting their current values so that they can be re-instated
- later. If the SwitchMap itself has been inverted, swap all the original
- invert flags. */
- if( map->fsmap ) {
- fsinv_old = astGetInvert( map->fsmap );
- astSetInvert( map->fsmap, map->fsinv );
- } else {
- fsinv_old = 0;
- }
-
- if( map->ismap ) {
- isinv_old = astGetInvert( map->ismap );
- astSetInvert( map->ismap, map->isinv );
- } else {
- isinv_old = 0;
- }
-
- rinv_old = astMalloc( sizeof( int )*nroute );
- if( astOK ) {
- for( i = 0; i < nroute; i++ ) {
- rinv_old[ i ] = astGetInvert( map->routemap[ i ] );
- astSetInvert( map->routemap[ i ], map->routeinv[ i ] );
- }
- }
-
-/* If possible, merge the SwitchMap with a neighbouring SwitchMap. */
-/* =============================================================== */
-/* Only do this if we are combining the Mappings in series. */
- if( series ) {
-
-/* Is the higher neighbour a SwitchMap? If so get a pointer to it, and
- note the index of the lower of the two adjacent SwitchMaps. */
- if( where < ( *nmap - 1 ) &&
- astIsASwitchMap( ( *map_list )[ where + 1 ] ) ){
- swneb = (AstSwitchMap *) ( *map_list )[ where + 1 ];
- ilo = where;
-
-/* If not, is the lower neighbour a SwitchMap? If so get a pointer to it, and
- note the index of the lower of the two adjacent SwitchMaps. */
- } else if( where > 0 &&
- astIsASwitchMap( ( *map_list )[ where - 1 ] ) ){
- swneb = (AstSwitchMap *) ( *map_list )[ where - 1 ];
- ilo = where - 1;
-
- } else {
- swneb = NULL;
- }
-
-/* If a neighbouring SwitchMap was found, we can replace the pair by a
- UnitMap if the two SwitchMaps are equal but have opposite values for
- their Invert flags. Temporarily invert the neighbour, then compare
- the two SwitchMaps for equality, then re-invert the neighbour. */
- if( swneb ) {
- astInvert( swneb );
- equal = astEqual( map, swneb );
- astInvert( swneb );
-
-/* If the two SwitchMaps are equal but opposite, annul the first of the two
- Mappings, and replace it with a UnitMap. Also set the invert flag. */
- if( equal ) {
- new = (AstMapping *) astUnitMap( astGetNin( ( *map_list )[ ilo ] ), "", status );
- (void) astAnnul( ( *map_list )[ ilo ] );
- ( *map_list )[ ilo ] = new;
- ( *invert_list )[ ilo ] = 0;
-
-/* Annul the second of the two Mappings, and shuffle down the rest of the
- list to fill the gap. */
- (void) astAnnul( ( *map_list )[ ilo + 1 ] );
- for ( i = ilo + 2; i < *nmap; i++ ) {
- ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
- ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
- }
-
-/* Clear the vacated element at the end. */
- ( *map_list )[ *nmap - 1 ] = NULL;
- ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
- modified element. */
- ( *nmap )--;
- result = where;
- }
- }
- }
-
-/* Attempt to simplify the SwitchMap on its own. */
-/* ============================================= */
-/* Only do this if no change was made above. */
- if( result == -1 ) {
-
-/* If the SwitchMap is inverted, create an equal SwitchMap which is not
- inverted. To do this, invert and swap the selector Mappings, and
- invert all the route Mappings. We use astSetInvert rather than astInvert
- because two or more more stored pointers may point to the same Mapping
- in which case that Mapping would be inverted more than once with
- unpredictable results. */
- if( ( *invert_list )[ where ] ) {
- if( map->fsmap ) astSetInvert( map->fsmap, !(map->fsinv) );
- if( map->ismap ) astSetInvert( map->ismap, !(map->isinv) );
- for( i = 0; i < nroute; i++ ) {
- astSetInvert( map->routemap[ i ], !(map->routeinv[ i ]) );
- }
-
- new = (AstMapping *) astSwitchMap( map->ismap, map->fsmap, nroute, (void **) map->routemap, "", status );
-
- (void) astAnnul( ( *map_list )[ where ] );
- ( *map_list )[ where ] = (AstMapping *) new;
- ( *invert_list )[ where ] = 0;
- result = where;
-
-/* Otherwise, try to simplify each of the encapsulated Mappings, noting
- if any simplification takes place. */
- } else {
- sfsmap = ( map->fsmap ) ? astSimplify( map->fsmap ) : NULL;
- sismap = ( map->ismap ) ? astSimplify( map->ismap ) : NULL;
- simp = ( sfsmap != map->fsmap ) || ( sismap != map->ismap );
-
- srmap = astMalloc( sizeof( AstMapping * )*nroute );
- if( astOK ) {
- for( i = 0; i < nroute; i++ ) {
- srmap[ i ] = astSimplify( map->routemap[ i ] );
- simp = simp || ( srmap[ i ] != map->routemap[ i ] );
- }
- }
-
-/* If any simplification took place, construct a new SwitchMap from these
- simplified Mappings. */
- if( simp ) {
- (void) astAnnul( ( *map_list )[ where ] );
- ( *map_list )[ where ] = (AstMapping *) astSwitchMap( sfsmap, sismap,
- nroute, (void **) srmap, "", status );
- result = where;
- }
-
-/* Release resources. */
- if( sfsmap ) sfsmap = astAnnul( sfsmap );
- if( sismap ) sismap = astAnnul( sismap );
- if( srmap ) {
- for( i = 0; i < nroute; i++ ) srmap[ i ] = astAnnul( srmap[ i ] );
- srmap = astFree( srmap );
- }
- }
- }
-
-/* Re-instate the original Invert values for the encapsulated Mappings. */
- if( map->fsmap ) astSetInvert( map->fsmap, fsinv_old );
- if( map->ismap ) astSetInvert( map->ismap, isinv_old );
- if( rinv_old ) {
- for( i = 0; i < nroute; i++ ) {
- astSetInvert( map->routemap[ i ], rinv_old[ i ] );
- }
- rinv_old = astFree( rinv_old );
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = -1;
-
-/* Return the result. */
- return result;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-* Name:
-* Rate
-
-* Purpose:
-* Calculate the rate of change of a Mapping output.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "switchmap.h"
-* result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-* Class Membership:
-* SwitchMap member function (overrides the astRate method inherited
-* from the Mapping class ).
-
-* Description:
-* This function returns the rate of change of a specified output of
-* the supplied Mapping with respect to a specified input, at a
-* specified input position. Also evaluates the second derivative.
-
-* Parameters:
-* this
-* Pointer to the Mapping to be applied.
-* at
-* The address of an array holding the axis values at the position
-* at which the rate of change is to be evaluated. The number of
-* elements in this array should equal the number of inputs to the
-* Mapping.
-* ax1
-* The index of the Mapping output for which the rate of change is to
-* be found (output numbering starts at 0 for the first output).
-* ax2
-* The index of the Mapping input which is to be varied in order to
-* find the rate of change (input numbering starts at 0 for the first
-* input).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The rate of change of Mapping output "ax1" with respect to input
-* "ax2", evaluated at "at", or AST__BAD if the value cannot be
-* calculated.
-
-*/
-
-/* Local Variables: */
- AstSwitchMap *map;
- AstMapping *smap;
- AstMapping *rmap;
- double result;
- double sel;
- int fsinv;
- int rinv;
- int nin;
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check inherited status */
- if( !astOK ) return result;
-
-/* Get a pointer to the SwitchMap structure. */
- map = (AstSwitchMap *) this;
-
-/* Get a pointer to the effective foward selector Mapping, and its current
- invert flag (this takes account of whether the SwtichMap has been
- inverted or not). This call resets the selector's invert flag temporarily
- back to the value it had when the SwitchMap was created. */
- smap = GetSelector( map, 1, &fsinv, status );
-
-/* If the SwitchMap has no forward selector Mapping, return AST__BAD. */
- if( smap ) {
-
-/* Get the number of inputs */
- nin = astGetNin( smap );
-
-/* Transform the supplied position using the selector Mapping. The output
- value is the selector value that indicates which route Mapping to use. */
- astTranN( smap, 1, nin, 1, at, 1, 1, 1, &sel );
-
-/* Get the index of the route Mapping to use, and check it is valid (if
- not, return AST__BAD if not). This takes account of whether the
- SwitchMap has been inverted, and also temporarily re-instates the
- original value of the route Mapping's Invert flag . */
- rmap = GetRoute( map, sel, &rinv, status );
- if( rmap ) {
-
-/* Use the astRate method of the route Mapping. */
- result = astRate( rmap, at, ax1, ax2 );
-
-/* Reset the Invert flag for the route Mapping. */
- astSetInvert( rmap, rinv );
- }
-
-/* Reset the Invert flag for the selector Mapping. */
- astSetInvert( smap, fsinv );
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstMapping *RemoveRegions( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* RemoveRegions
-
-* Purpose:
-* Remove any Regions from a Mapping.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "switchmap.h"
-* AstMapping *RemoveRegions( AstMapping *this, int *status )
-
-* Class Membership:
-* SwitchMap method (over-rides the astRemoveRegions method inherited
-* from the Mapping class).
-
-* Description:
-* This function searches the supplied Mapping (which may be a
-* compound Mapping such as a SwitchMap) for any component Mappings
-* that are instances of the AST Region class. It then creates a new
-* Mapping from which all Regions have been removed. If a Region
-* cannot simply be removed (for instance, if it is a component of a
-* parallel SwitchMap), then it is replaced with an equivalent UnitMap
-* in the returned Mapping.
-*
-* The implementation provided by the SwitchMap class invokes the
-* astRemoveRegions method on all the component Mappings, and joins
-* the results together into a new SwitchMap.
-
-* Parameters:
-* this
-* Pointer to the original Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the modified mapping.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstMapping **temp; /* Array of new route Mappings */
- AstMapping *newfsmap; /* New forward selector Mapping */
- AstMapping *newismap; /* New inverse selector Mapping */
- AstMapping *result; /* Result pointer to return */
- AstSwitchMap *new; /* Pointer to new SwitchMap */
- AstSwitchMap *this; /* Pointer to SwitchMap structure */
- int changed; /* Has any mapping been changed? */
- int i; /* Loop count */
- int nax; /* Number of Frame axes */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the SwitchMap. */
- this = (AstSwitchMap *) this_mapping;
-
-/* Allocate an array to hold the modified Mapping pointers. */
- temp = astMalloc( sizeof( AstMapping *)*( this->nroute ) );
- if( astOK ) {
-
-/* Invoke the astRemoveRegions method on all the component Mappings. */
- changed = 0;
- for( i = 0; i < this->nroute; i++ ) {
- temp[ i ] = astRemoveRegions( this->routemap[ i ] );
-
-/* Note if any Mapping was changed. */
- if( temp[ i ] != this->routemap[ i ] ) {
- changed = 1;
-
-/* The implementation of the astRemoveRegions method provided by the
- Region class returns a Frame rather than a UnitMap. But we need
- Mappings here, not Frames. So if the new Mapping is a Frame, replace
- it with an equivalent UnitMap. */
- if( astIsAFrame( temp[ i ] ) ) {
- nax = astGetNin( temp[ i ] );
- (void) astAnnul( temp[ i ] );
- temp[ i ] = (AstMapping *) astUnitMap( nax, " ", status );
- }
- }
- }
-
-/* And on the other ancillary Mappings */
- if( this->fsmap ) {
- newfsmap = astRemoveRegions( this->fsmap );
- if( newfsmap != this->fsmap ) {
- changed = 1;
- if( astIsAFrame( newfsmap ) ) {
- nax = astGetNin( newfsmap );
- (void) astAnnul( newfsmap );
- newfsmap = (AstMapping *) astUnitMap( nax, " ", status );
- }
- }
-
- } else {
- newfsmap = NULL;
- }
-
- if( this->ismap ) {
- newismap = astRemoveRegions( this->ismap );
- if( newismap != this->ismap ) {
- changed = 1;
- if( astIsAFrame( newismap ) ) {
- nax = astGetNin( newismap );
- (void) astAnnul( newismap );
- newismap = (AstMapping *) astUnitMap( nax, " ", status );
- }
- }
-
- } else {
- newismap = NULL;
- }
-
-/* If no component was modified, just return a clone of the supplied
- pointer. */
- if( ! changed ) {
- result = astClone( this );
-
-/* Otherwise, we need to create a new Mapping to return. We take a deep
- copy of the supplied SwitchMap and then modify the Mappings so that
- we retain any extra information in the supplied SwitchMap. */
- } else {
- new = astCopy( this );
-
- for( i = 0; i < this->nroute; i++ ) {
- (void) astAnnul( new->routemap[ i ] );
- new->routemap[ i ] = astClone( temp[ i ] );
- }
-
- if( newfsmap ) {
- (void) astAnnul( new->fsmap );
- new->fsmap = astClone( newfsmap );
- }
-
- if( newismap ) {
- (void) astAnnul( new->ismap );
- new->ismap = astClone( newismap );
- }
-
- result = (AstMapping *) new;
- }
-
-/* Free resources. */
- for( i = 0; i < this->nroute; i++ ) {
- temp[ i ] = astAnnul( temp[ i ] );
- }
-
- if( newfsmap ) newfsmap = astAnnul( newfsmap );
- if( newismap ) newismap = astAnnul( newismap );
- }
-
- temp = astFree( temp );
-
-/* Annul the returned Mapping if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-int astSwitchList_( AstSwitchMap *this, int invert, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*+
-* Name:
-* astSwitchList
-
-* Purpose:
-* Extract the selector and route Mappings from a SwitchMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "switchmap.h"
-* int astSwitchList( AstSwitchMap *this, int invert, int *nmap,
-* AstMapping ***map_list, int **invert_list )
-
-* Class Membership:
-* SwitchMap member function.
-
-* Description:
-* This function extracts the route and selector Mappings form a
-* SwitchMap.
-
-* Parameters:
-* this
-* Pointer to the SwitchMap to be decomposed (it is not actually
-* modified by this function).
-* invert
-* The value to which the SwitchMap's Invert attribute is to be
-* (notionally) set before performing the decomposition. Normally,
-* the value supplied here will be the actual Invert value obtained
-* from the SwitchMap (e.g. using astGetInvert). Sometimes, however,
-* when a SwitchMap is encapsulated within another structure, that
-* structure may retain an Invert value (in order to prevent external
-* interference) which should be used instead.
-*
-* Note that the actual Invert value of the SwitchMap supplied is
-* not used (or modified) by this function.
-* nmap
-* The address of an int in which to return a count of the number of
-* individual Mappings in the decomposition. The supplied value is
-* ignored.
-* map_list
-* Address of a pointer to an array of Mapping pointers. The value
-* supplied on entry is ignored. On exit, it points at a dynamically
-* allocated array containing Mapping pointers ("*nmap" in number) that
-* result from the decomposition requested.
-*
-* The returned Mapping pointers returned will identify the following
-* sequence of Mappings; forward selector mapping (or NULL if the
-* SwitchMap has no forward selector Mapping), inverse selector
-* mapping (or NULL if the SwitchMap has no inverse selector Mapping),
-* the route Mappings in the order they were supplied when the
-* SwitchMap was constructed.
-*
-* All the Mapping pointers returned by this function should be
-* annulled by the caller, using astAnnul, when no longer
-* required. The dynamic array holding these pointers should
-* also be freed, using astFree.
-* invert_list
-* Address of a pointer to an array of int. The value supplied on
-* entry is ignored. On exit, it points at a dynamically allocated
-* array containing Invert attribute values ("*nmap" in number) that
-* result from the decomposition requested.
-*
-* The returned Invert values returned identify the values which must
-* be assigned to the Invert attributes of the corresponding
-* Mappings (whose pointers are in the "*map_list" array) before
-* they are applied. Note that these values may differ from the
-* actual Invert attribute values of these Mappings, which are
-* not relevant.
-*
-* The dynamic array holding these values should be freed by the
-* caller, using astFree, when no longer required.
-
-* Returned Value:
-* The number of route Mappings stored in the SwitchMap.
-
-* Notes:
-* - It is unspecified to what extent the original SwitchMap and the
-* individual (decomposed) Mappings are inter-dependent. Consequently,
-* the individual Mappings cannot be modified without risking
-* modification of the original SwitchMap.
-* - If this function is invoked with the global error status set,
-* or if it should fail for any reason, then the *nmap value, the
-* list of Mapping pointers and the list of Invert values will all
-* be returned unchanged.
-*-
-*/
-
-/* Local Variables: */
- AstMapping *map; /* Pointer to Mapping to return */
- int inv; /* Original Invert flag for Mapping */
- int i; /* Route Mapping index */
- int oldinv; /* Original Invert flag for SwitchMap */
- int result; /* Returned value */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Store the numbe of route Mappings */
- result = this->nroute;
- *nmap = result + 2;
-
-/* Allocate the required arrays. */
- *map_list = astMalloc( sizeof( AstMapping * )*(size_t) *nmap );
- *invert_list = astMalloc( sizeof( int )*(size_t) *nmap );
-
-/* Check the pointers can be used safely. */
- if( astOK ) {
-
-/* Temporaily set the requested Invert flag for the SwitchMap. */
- oldinv = astGetInvert( this );
- astSetInvert( this, invert );
-
-/* Get the forward selector Mapping. */
- map = GetSelector( this, 1, &inv, status );
-
-/* If the SwitchMap has a forward selector Mapping, return a clone of the
- Mapping pointer, and the invert flag to be used with it, then
- re-instate the original invert flag value (which was modified by
- GetSelector). */
- if( map ) {
- ( *map_list )[ 0 ] = astClone( map );
- ( *invert_list )[ 0 ] = astGetInvert( map );
- astSetInvert( map, inv );
-
-/* If the SwitchMap does not has a forward selector Mapping, return a
- NULL pointer. */
- } else {
- ( *map_list )[ 0 ] = NULL;
- ( *invert_list )[ 0 ] = 0;
- }
-
-/* Likewise, get and return the inverse selector Mapping.*/
- map = GetSelector( this, 0, &inv, status );
- if( map ) {
- ( *map_list )[ 1 ] = astClone( map );
- ( *invert_list )[ 1 ] = astGetInvert( map );
- astSetInvert( map, inv );
- } else {
- ( *map_list )[ 1 ] = NULL;
- ( *invert_list )[ 1 ] = 0;
- }
-
-/* Loop round all route Mappings. */
- for( i = 0; i < result; i++ ){
-
-/* Get the next route Mapping. */
- map = GetRoute( this, (double) i + 1.0, &inv, status );
-
-/* If the SwitchMap has a route Mapping for the current selector value,
- return a clone of the Mapping pointer, and the invert flag to be used
- with it, then re-instate the original invert flag value (which was
- modified by GetRoute). */
- if( map ) {
- ( *map_list )[ i + 2 ] = astClone( map );
- ( *invert_list )[ i + 2 ] = astGetInvert( map );
- astSetInvert( map, inv );
-
-/* If the SwitchMap does not has a route Mapping for the current selector
- value, return a NULL pointer. */
- } else {
- ( *map_list )[ i + 2 ] = NULL;
- ( *invert_list )[ i + 2 ] = 0;
- }
-
- }
-
-/* Re-instate the original Ivert flag for the SwitchMap. */
- astSetInvert( this, oldinv );
-
- }
-
-/* If an error has occurred, free the returned arrays. */
- if( !astOK ) {
- *map_list = astFree( *map_list );
- *invert_list= astFree( *invert_list );
- result= 0;
- *nmap = 0;
- }
-
-/* Return the result */
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a SwitchMap to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "switchmap.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* SwitchMap member function (over-rides the astTransform method inherited
-* from the Mapping class).
-
-* Description:
-* This function takes a SwitchMap and a set of points encapsulated in a
-* PointSet and transforms the points so as to apply the required Mapping.
-* This implies applying each of the SwitchMap's component Mappings in turn,
-* either in series or in parallel.
-
-* Parameters:
-* this
-* Pointer to the SwitchMap.
-* in
-* Pointer to the PointSet associated with the input coordinate values.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of coordinates for the SwitchMap being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstMapping *rmap;
- AstMapping *selmap;
- AstPointSet *ps1;
- AstPointSet *ps1a;
- AstPointSet *ps2;
- AstPointSet *ps2a;
- AstPointSet *result;
- AstPointSet *selps;
- AstSwitchMap *map;
- double **in_ptr;
- double **out_ptr;
- double **ptr1;
- double **ptr2;
- double **sel_ptr;
- double *outv;
- double *sel;
- int *popmap;
- int iroute;
- int ipoint;
- int j;
- int k;
- int maxpop;
- int ncin;
- int ncout;
- int npoint;
- int nroute;
- int rindex;
- int rinv;
- int selinv;
- int totpop;
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the SwitchMap. */
- map = (AstSwitchMap *) this;
-
-/* Apply the parent Mapping using the stored pointer to the Transform member
- function inherited from the parent Mapping class. This function validates
- all arguments and generates an output PointSet if necessary, but does not
- actually transform any coordinate values. */
- result = (*parent_transform)( this, in, forward, out, status );
-
-/* We now extend the parent astTransform method by applying the component
- Mappings of the SwitchMap to generate the output coordinate values. */
-
-/* Get the number of input and output coords. */
- if( forward ) {
- ncin = astGetNin( this );
- ncout = astGetNout( this );
- } else {
- ncin = astGetNout( this );
- ncout = astGetNin( this );
- }
-
-/* Get the appropriate selector Mapping. */
- selmap = GetSelector( map, forward, &selinv, status );
-
-/* Transform the supplied positions using the above selector Mapping. */
- selps = astTransform( selmap, in, forward, NULL );
-
-/* Get a pointer to the array holding the selector value. */
- sel_ptr = astGetPoints( selps );
-
-/* Get a pointer to the array holding the input values. */
- in_ptr = astGetPoints( in );
-
-/* Get a pointer to the array in which to store the results, and the total
- number of points being transformed. */
- out_ptr = astGetPoints( result );
- npoint = astGetNpoint( result );
-
-/* We now count how many positions are to be tranformed by each of the
- route Mappings. */
- nroute = map->nroute;
- popmap = astMalloc( sizeof( int )*nroute );
- if( astOK ) {
- for( iroute = 0; iroute < nroute; iroute++ ) popmap[ iroute ] = 0;
-
- sel = sel_ptr[ 0 ];
- for( ipoint = 0; ipoint < npoint; ipoint++,sel++ ) {
- if( *sel != AST__BAD ) {
- rindex = (int)( *sel + 0.5 ) - 1;
- if( rindex >= 0 && rindex < nroute ) ( popmap[ rindex ] )++;
- }
- }
-
-/* Find the number of points transformed by the most popular route Mapping.
- Also find the total number of points transformed by any route Mapping. */
- totpop = 0;
- maxpop = 0;
- for( iroute = 0; iroute < nroute; iroute++ ) {
- if( popmap[ iroute ] > maxpop ) maxpop = popmap[ iroute ];
- totpop += popmap[ iroute ];
- }
- if( maxpop == 0 ) maxpop = 1;
-
-/* If some of the points are not transformed by any route Mapping.
- Initialise the whole output array to hold AST__BAD at every point. */
- if( totpop < npoint ) {
- for( j = 0; j < ncout; j++ ) {
- outv = out_ptr[ j ];
- for( ipoint = 0; ipoint < npoint; ipoint++ ) *(outv++) = AST__BAD;
- }
- }
-
-/* Create a PointSet large enough to hold all the supplied positions
- which are to be transformed by the most popular route Mapping. */
- ps1 = astPointSet( maxpop, ncin, "", status );
- ptr1 = astGetPoints( ps1 );
-
-/* Create a PointSet large enough to hold all the output positions
- created by the most popular route Mapping. */
- ps2 = astPointSet( maxpop, ncout, "", status );
- ptr2 = astGetPoints( ps2 );
- if( astOK ) {
-
-/* Loop round each route Mapping which is used by at least 1 point. */
- for( iroute = 0; iroute < nroute; iroute++ ) {
- if( popmap[ iroute ] >0 ) {
- rmap = GetRoute( map, (double)( iroute + 1 ), &rinv, status );
-
-/* Construct two PointSets of the correct size to hold the input and
- output points to be processed with the current route Mapping. We
- re-use the memory allocated for the largest route Mapping's PointSet. */
- if( popmap[ iroute ] != maxpop ) {
- ps1a = astPointSet( popmap[ iroute ], ncin, "", status );
- astSetPoints( ps1a, ptr1 );
- ps2a = astPointSet( popmap[ iroute ], ncout, "", status );
- astSetPoints( ps2a, ptr2 );
- } else {
- ps1a = astClone( ps1 );
- ps2a = astClone( ps2 );
- }
-
-/* Fill the input PointSet with the input positions which are to be
- transformed using the current route Mapping. */
- sel = sel_ptr[ 0 ];
- k = 0;
- for( ipoint = 0; ipoint < npoint; ipoint++,sel++ ) {
- if( *sel != AST__BAD ) {
- rindex = (int)( *sel + 0.5 ) - 1;
- if( rindex == iroute ) {
- for( j = 0; j < ncin; j++ ) {
- ptr1[ j ][ k ] = in_ptr[ j ][ ipoint ];
- }
- k++;
- }
- }
- }
-
-/* Use the route Mapping to transform this PointSet. */
- (void) astTransform( rmap, ps1a, forward, ps2a );
-
-/* Copy the axis values from the resulting PointSet back into the results
- array. */
- sel = sel_ptr[ 0 ];
- k = 0;
- for( ipoint = 0; ipoint < npoint; ipoint++,sel++ ) {
- if( *sel != AST__BAD ) {
- rindex = (int)( *sel + 0.5 ) - 1;
- if( rindex == iroute ) {
- for( j = 0; j < ncout; j++ ) {
- out_ptr[ j ][ ipoint ] = ptr2[ j ][ k ];
- }
- k++;
- }
- }
- }
-
-/* Free resources. */
- ps1a = astAnnul( ps1a );
- ps2a = astAnnul( ps2a );
-
-/* Re-instate the Invert flag for the route Mapping. */
- astSetInvert( rmap, rinv );
- }
- }
- }
-
-/* Free resources. */
- ps1 = astAnnul( ps1 );
- ps2 = astAnnul( ps2 );
- }
-
- selps = astAnnul( selps );
- popmap = astFree( popmap );
-
-/* Re-instate the Invert flag of the selector Mapping. */
- astSetInvert( selmap, selinv );
-
-/* If an error occurred, clean up by deleting the output PointSet (if
- allocated by this function) and setting a NULL result pointer. */
- if ( !astOK ) {
- if ( !out ) result = astDelete( result );
- result = NULL;
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for SwitchMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for SwitchMap objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - This constructor makes a deep copy, including a copy of the component
-* Mappings within the SwitchMap.
-*/
-
-/* Local Variables: */
- AstSwitchMap *in; /* Pointer to input SwitchMap */
- AstSwitchMap *out; /* Pointer to output SwitchMap */
- int i; /* Loop count */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output SwitchMaps. */
- in = (AstSwitchMap *) objin;
- out = (AstSwitchMap *) objout;
-
-/* For safety, start by clearing any references to the input component
- Mappings,etc, from the output SwitchMap. */
- out->fsmap = NULL;
- out->ismap = NULL;
- out->routemap = NULL;
- out->routeinv = NULL;
-
-/* Make copies of these Mappings, etc, and store pointers to them in the output
- SwitchMap structure. */
- if( in->fsmap ) out->fsmap = astCopy( in->fsmap );
- if( in->ismap ) out->ismap = astCopy( in->ismap );
-
- out->routemap = astMalloc( sizeof( AstMapping * )*( in->nroute ) );
- out->routeinv = astMalloc( sizeof( int )*( in->nroute ) );
- if( astOK ) {
- for( i = 0; i < in->nroute; i++ ) {
- out->routemap[ i ] = astCopy( in->routemap[ i ] );
- out->routeinv[ i ] = in->routeinv[ i ];
- }
- }
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for SwitchMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for SwitchMap objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstSwitchMap *this; /* Pointer to SwitchMap */
- int i;
-
-/* Obtain a pointer to the SwitchMap structure. */
- this = (AstSwitchMap *) obj;
-
-/* Free dynamically allocated resources. */
- if( this->fsmap ) this->fsmap = astAnnul( this->fsmap );
- if( this->ismap ) this->ismap = astAnnul( this->ismap );
- for( i = 0; i < this->nroute; i++ ) {
- this->routemap[ i ] = astAnnul( this->routemap[ i ] );
- }
- this->routemap = astFree( this->routemap );
- this->routeinv = astFree( this->routeinv );
-
-/* Clear the remaining SwitchMap variables. */
- this->nroute = 0;
- this->fsinv = 0;
- this->isinv = 0;
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for SwitchMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the SwitchMap class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the SwitchMap whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstSwitchMap *this;
- int ival;
- int set;
- int i;
- char buf[ 20 ];
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the SwitchMap structure. */
- this = (AstSwitchMap *) this_object;
-
-/* Write out values representing the instance variables for the SwitchMap
- class. Accompany these with appropriate comment strings, possibly
- depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* Forward selector Mapping */
-/* ------------------------ */
- if( this->fsmap ) {
- astWriteObject( channel, "FSMap", 1, 1, this->fsmap,
- "Forward selector Mapping" );
-
-/* Forward selector Invert flag. */
-/* ----------------------------- */
- ival = this->fsinv;
- set = ( ival != 0 );
- astWriteInt( channel, "FSInv", set, 0, ival,
- ival ? "Fwd selector used in inverse direction" :
- "Fwd selector used in forward direction" );
- }
-
-
-/* Inverse selector Mapping */
-/* ------------------------ */
- if( this->ismap ) {
- astWriteObject( channel, "ISMap", 1, 1, this->ismap,
- "Inverse selector Mapping" );
-
-/* Forward selector Invert flag. */
-/* ----------------------------- */
- ival = this->isinv;
- set = ( ival != 0 );
- astWriteInt( channel, "ISInv", set, 0, ival,
- ival ? "Inv selector used in inverse direction" :
- "Inv selector used in forward direction" );
- }
-
-/* Loop to dump each route Mapping and its invert flag. */
-/* ---------------------------------------------------- */
- for( i = 0; i < this->nroute; i++ ) {
- sprintf( buf, "RMap%d", i + 1 );
- astWriteObject( channel, buf, 1, 1, this->routemap[ i ],
- "Route Mapping" );
-
- ival = this->routeinv[ i ];
- set = ( ival != 0 );
- sprintf( buf, "RInv%d", i + 1 );
- astWriteInt( channel, buf, set, 0, ival,
- ival ? "Route Mapping used in inverse direction" :
- "Route Mapping used in forward direction" );
- }
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsASwitchMap and astCheckSwitchMap functions using the
- macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(SwitchMap,Mapping)
-astMAKE_CHECK(SwitchMap)
-
-AstSwitchMap *astSwitchMap_( void *fsmap_void, void *ismap_void, int nroute,
- void **routemaps_void, const char *options, int *status, ...) {
-/*
-*+
-* Name:
-* astSwitchMap
-
-* Purpose:
-* Create a SwitchMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "switchmap.h"
-* AstSwitchMap *astSwitchMap( AstMapping *fsmap, AstMapping *ismap,
-* int nroute, AstMapping **routemaps,
-* const char *options, ... )
-
-* Class Membership:
-* SwitchMap constructor.
-
-* Description:
-* This function creates a new SwitchMap and optionally initialises its
-* attributes.
-
-* Parameters:
-* fsmap
-* Pointer to the forward selector Mapping
-* ismap
-* Pointer to the inverse selector Mapping
-* nroute
-* The number of route Mappings.
-* routemaps
-* An array of pointers to the route Mappings.
-* options
-* Pointer to a null terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new SwitchMap. The syntax used is the same as for the
-* astSet method and may include "printf" format specifiers identified
-* by "%" symbols in the normal way.
-* ...
-* If the "options" string contains "%" format specifiers, then an
-* optional list of arguments may follow it in order to supply values to
-* be substituted for these specifiers. The rules for supplying these
-* are identical to those for the astSet method (and for the C "printf"
-* function).
-
-* Returned Value:
-* A pointer to the new SwitchMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-
-* Implementation Notes:
-* - This function implements the basic SwitchMap constructor which is
-* available via the protected interface to the SwitchMap class. A
-* public interface is provided by the astSwitchMapId_ function.
-* - Because this function has a variable argument list, it is
-* invoked by a macro that evaluates to a function pointer (not a
-* function invocation) and no checking or casting of arguments is
-* performed before the function is invoked. Because of this, the
-* "map1" and "map2" parameters are of type (void *) and are
-* converted and validated within the function itself.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstSwitchMap *new; /* Pointer to new SwitchMap */
- AstMapping *fsmap; /* Pointer to fwd selector Mapping */
- AstMapping *ismap; /* Pointer to inv selector Mapping */
- AstMapping **routemaps; /* Array of route Mapping pointers */
- int i; /* Route Mappings index */
- va_list args; /* Variable argument list */
-
-/* Initialise. */
- new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return new;
-
-/* Report an error if no route Mappings have been supplied. */
- if( nroute <= 0 ) astError( AST__BDPAR, "astSwitchMap(SwitchMap): "
- "Bad number of route Mappings (%d) specified.", status,
- nroute );
-
-/* Otherwise create an array to hold the route Mapping pointers. */
- routemaps = astMalloc( sizeof( AstMapping * )*nroute );
-
-/* Obtain and validate pointers to the Mapping structures provided. */
- if( astOK ) {
- fsmap = fsmap_void ? astCheckMapping( fsmap_void ) : NULL;
- ismap = ismap_void ? astCheckMapping( ismap_void ) : NULL;
- for( i = 0; i < nroute; i++ ) {
- routemaps[ i ] = astCheckMapping( routemaps_void[ i ] );
- }
- }
-
- if ( astOK ) {
-
-/* Initialise the SwitchMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitSwitchMap( NULL, sizeof( AstSwitchMap ), !class_init, &class_vtab,
- "SwitchMap", fsmap, ismap, nroute, routemaps );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new SwitchMap's
- attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Free memory used to hold the route Mapping pointers. */
- routemaps = astFree( routemaps );
-
-/* Return a pointer to the new SwitchMap. */
- return new;
-}
-
-AstSwitchMap *astSwitchMapId_( void *fsmap_void, void *ismap_void, int nroute,
- void **routemaps_void, const char *options, ... ) {
-/*
-*++
-* Name:
-c astSwitchMap
-f AST_SWITCHMAP
-
-* Purpose:
-* Create a SwitchMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "switchmap.h"
-c AstSwitchMap *astSwitchMap( AstMapping *fsmap, AstMapping *ismap,
-c int nroute, AstMapping *routemaps[],
-c const char *options, ... )
-f RESULT = AST_SWITCHMAP( FSMAP, ISMAP, NROUTE, ROUTEMAPS, OPTIONS,
-f STATUS )
-
-* Class Membership:
-* SwitchMap constructor.
-
-* Description:
-* This function creates a new SwitchMap and optionally initialises
-* its attributes.
-*
-* A SwitchMap is a Mapping which represents a set of alternate
-* Mappings, each of which is used to transform positions within a
-* particular region of the input or output coordinate system of the
-* SwitchMap.
-*
-* A SwitchMap can encapsulate any number of Mappings, but they must
-* all have the same number of inputs (Nin attribute value) and the
-* same number of outputs (Nout attribute value). The SwitchMap itself
-* inherits these same values for its Nin and Nout attributes. Each of
-* these Mappings represents a "route" through the switch, and are
-* referred to as "route" Mappings below. Each route Mapping transforms
-* positions between the input and output coordinate space of the entire
-* SwitchMap, but only one Mapping will be used to transform any given
-* position. The selection of the appropriate route Mapping to use with
-* any given input position is made by another Mapping, called the
-* "selector" Mapping. Each SwitchMap encapsulates two selector
-* Mappings in addition to its route Mappings; one for use with the
-* SwitchMap's forward transformation (called the "forward selector
-* Mapping"), and one for use with the SwitchMap's inverse transformation
-* (called the "inverse selector Mapping"). The forward selector Mapping
-* must have the same number of inputs as the route Mappings, but
-* should have only one output. Likewise, the inverse selector Mapping
-* must have the same number of outputs as the route Mappings, but
-* should have only one input.
-*
-* When the SwitchMap is used to transform a position in the forward
-* direction (from input to output), each supplied input position is
-* first transformed by the forward transformation of the forward selector
-* Mapping. This produces a single output value for each input position
-* referred to as the selector value. The nearest integer to the selector
-* value is found, and is used to index the array of route Mappings (the
-* first supplied route Mapping has index 1, the second route Mapping has
-* index 2, etc). If the nearest integer to the selector value is less
-* than 1 or greater than the number of route Mappings, then the SwitchMap
-* output position is set to a value of AST__BAD on every axis. Otherwise,
-* the forward transformation of the selected route Mapping is used to
-* transform the supplied input position to produce the SwitchMap output
-* position.
-*
-* When the SwitchMap is used to transform a position in the inverse
-* direction (from "output" to "input"), each supplied "output" position
-* is first transformed by the inverse transformation of the inverse
-* selector Mapping. This produces a selector value for each "output"
-* position. Again, the nearest integer to the selector value is found,
-* and is used to index the array of route Mappings. If this selector
-* index value is within the bounds of the array of route Mappings, then
-* the inverse transformation of the selected route Mapping is used to
-* transform the supplied "output" position to produce the SwitchMap
-* "input" position. If the selector index value is outside the bounds
-* of the array of route Mappings, then the SwitchMap "input" position is
-* set to a value of AST__BAD on every axis.
-*
-* In practice, appropriate selector Mappings should be chosen to
-* associate a different route Mapping with each region of coordinate
-* space. Note that the SelectorMap class of Mapping is particularly
-* appropriate for this purpose.
-*
-* If a compound Mapping contains a SwitchMap in series with its own
-* inverse, the combination of the two adjacent SwitchMaps will be
-* replaced by a UnitMap when the compound Mapping is simplified using
-c astSimplify.
-f AST_SIMPLIFY.
-
-* Parameters:
-c fsmap
-f FSMAP = INTEGER (Given)
-* Pointer to the forward selector Mapping. This must have a
-* defined forward transformation, but need not have a defined
-* inverse transformation. It must have one output, and the number of
-* inputs must match the number of inputs of each of the supplied
-* route Mappings.
-c NULL
-f AST__NULL
-* may be supplied, in which case the SwitchMap will have an undefined
-* forward Mapping.
-c ismap
-f ISMAP = INTEGER (Given)
-* Pointer to the inverse selector Mapping. This must have a
-* defined inverse transformation, but need not have a defined
-* forward transformation. It must have one input, and the number of
-* outputs must match the number of outputs of each of the supplied
-* route Mappings.
-c NULL
-f AST__NULL
-* may be supplied, in which case the SwitchMap will have an undefined
-* inverse Mapping.
-c nroute
-f NROUTE = INTEGER (Given)
-* The number of supplied route Mappings.
-c routemaps
-f ROUTEMAPS( NROUTE ) = INTEGER (Given)
-* An array of pointers to the route Mappings. All the supplied
-* route Mappings must have common values for the Nin and Nout
-* attributes, and these values define the number of inputs and
-* outputs of the SwitchMap.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new SwitchMap. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new SwitchMap. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astSwitchMap()
-f AST_SWITCHMAP = INTEGER
-* A pointer to the new SwitchMap.
-
-* Notes:
-c - Note that the component Mappings supplied are not copied by
-c astSwitchMap (the new SwitchMap simply retains a reference to
-c them). They may continue to be used for other purposes, but
-c should not be deleted. If a SwitchMap containing a copy of its
-c component Mappings is required, then a copy of the SwitchMap should
-c be made using astCopy.
-f - Note that the component Mappings supplied are not copied by
-f AST_SWITCHMAP (the new SwitchMap simply retains a reference to
-f them). They may continue to be used for other purposes, but
-f should not be deleted. If a SwitchMap containing a copy of its
-f component Mappings is required, then a copy of the SwitchMap should
-f be made using AST_COPY.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-
-* Implementation Notes:
-* - This function implements the external (public) interface to
-* the astSwitchMap constructor function. It returns an ID value
-* (instead of a true C pointer) to external users, and must be
-* provided because astSwitchMap_ has a variable argument list which
-* cannot be encapsulated in a macro (where this conversion would
-* otherwise occur).
-* - Because no checking or casting of arguments is performed
-* before the function is invoked, the "map1" and "map2" parameters
-* are of type (void *) and are converted from an ID value to a
-* pointer and validated within the function itself.
-* - The variable argument list also prevents this function from
-* invoking astSwitchMap_ directly, so it must be a re-implementation
-* of it in all respects, except for the conversions between IDs
-* and pointers on input/output of Objects.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstSwitchMap *new; /* Pointer to new SwitchMap */
- AstMapping *fsmap; /* Pointer to fwd selector Mapping */
- AstMapping *ismap; /* Pointer to inv selector Mapping */
- AstMapping **routemaps; /* Array of route Mapping pointers */
- int i; /* Route Mappings index */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialise. */
- new = NULL;
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return new;
-
-/* Report an error if no route Mappings have been supplied. */
- if( nroute <= 0 ) astError( AST__BDPAR, "astSwitchMap(SwitchMap): "
- " Bad number of route Mappings (%d) specified.", status,
- nroute );
-
-/* Otherwise create an array to hold the route Mapping pointers. */
- routemaps = astMalloc( sizeof( AstMapping * )*nroute );
-
-/* Obtain and validate pointers to the Mapping structures provided. */
- if( astOK ) {
- fsmap = fsmap_void ? astCheckMapping( astMakePointer(fsmap_void) ) : NULL;
- ismap = ismap_void ? astCheckMapping( astMakePointer(ismap_void) ) : NULL;
- for( i = 0; i < nroute; i++ ) {
- routemaps[ i ] = astVerifyMapping( astMakePointer(routemaps_void[ i ]) );
- }
- }
-
- if ( astOK ) {
-
-/* Initialise the SwitchMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitSwitchMap( NULL, sizeof( AstSwitchMap ), !class_init, &class_vtab,
- "SwitchMap", fsmap, ismap, nroute, routemaps );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new SwitchMap's
- attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Free memory used to hold the route Mapping pointers. */
- routemaps = astFree( routemaps );
-
-/* Return an ID value for the new SwitchMap. */
- return astMakeId( new );
-}
-
-AstSwitchMap *astInitSwitchMap_( void *mem, size_t size, int init,
- AstSwitchMapVtab *vtab, const char *name,
- AstMapping *fsmap, AstMapping *ismap,
- int nroute, AstMapping **routemaps, int *status ) {
-/*
-*+
-* Name:
-* astInitSwitchMap
-
-* Purpose:
-* Initialise a SwitchMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "switchmap.h"
-* AstSwitchMap *astInitSwitchMap( void *mem, size_t size, int init,
-* AstSwitchMapVtab *vtab, const char *name,
-* AstMapping *fsmap, AstMapping *ismap,
-* int nroute, AstMapping **routemaps )
-
-* Class Membership:
-* SwitchMap initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new SwitchMap object. It allocates memory (if necessary) to
-* accommodate the SwitchMap plus any additional data associated with the
-* derived class. It then initialises a SwitchMap structure at the start
-* of this memory. If the "init" flag is set, it also initialises the
-* contents of a virtual function table for a SwitchMap at the start of
-* the memory passed via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the SwitchMap is to be initialised.
-* This must be of sufficient size to accommodate the SwitchMap data
-* (sizeof(SwitchMap)) plus any data used by the derived class. If a
-* value of NULL is given, this function will allocate the memory itself
-* using the "size" parameter to determine its size.
-* size
-* The amount of memory used by the SwitchMap (plus derived class
-* data). This will be used to allocate memory if a value of NULL is
-* given for the "mem" parameter. This value is also stored in the
-* SwitchMap structure, so a valid value must be supplied even if not
-* required for allocating memory.
-* init
-* A logical flag indicating if the SwitchMap's virtual function table
-* is to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new SwitchMap.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the Object
-* astClass function).
-* fsmap
-* Pointer to the forward selector Mapping.
-* ismap
-* Pointer to the inverse selector Mapping.
-* nroute
-* The number of route Mappings supplied.
-* routemaps
-* An array holdiong pointers to the route Mappings.
-
-* Returned Value:
-* A pointer to the new SwitchMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstSwitchMap *new; /* Pointer to new SwitchMap */
- int i; /* Loop count */
- int nin; /* No. input coordinates for SwitchMap */
- int nout; /* No. output coordinates for SwitchMap */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitSwitchMapVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Check that all route Mappings have common values for Nin and Nout.*/
- nin = astGetNin( routemaps[ 0 ] );
- nout = astGetNout( routemaps[ 0 ] );
- for( i = 1; i < nroute; i++ ) {
- if( nin != astGetNin( routemaps[ i ] ) ){
- if( astOK ) {
- astError( AST__BADNI, "astInitSwitchMap(%s): Route Mapping "
- "number %d has %d input(s) but the first route "
- "Mapping has %d input(s).", status, name, i + 1,
- astGetNin( routemaps[ i ] ), nin );
- }
-
- } else if( nout != astGetNout( routemaps[ i ] ) ){
- if( astOK ) {
- astError( AST__BADNO, "astInitSwitchMap(%s): Route Mapping "
- "number %d has %d output(s) but the first route "
- "Mapping has %d output(s).", status, name, i + 1,
- astGetNin( routemaps[ i ] ), nin );
- }
- }
- }
-
-/* If supplied, report an error if fsmap has no forward transformation,
- or if it has an incorrect number of inputs or output. */
- if( fsmap && astOK ) {
- if( !astGetTranForward( fsmap ) ) {
- astError( AST__INTRD, "astInitSwitchMap(%s): The forward selector Mapping "
- "is not able to transform coordinates in the forward direction.", status,
- name );
-
- } else if( astGetNin( fsmap ) != nin ){
- astError( AST__BADNI, "astInitSwitchMap(%s): The forward selector "
- "Mapping has %d input(s) but the SwitchMap has %d "
- "input(s).", status, name, astGetNin( fsmap ), nin );
-
- } else if( astGetNout( fsmap ) != 1 ){
- astError( AST__BADNO, "astInitSwitchMap(%s): The forward selector "
- "Mapping has %d outputs but should only have 1.", status, name,
- astGetNout( fsmap ) );
- }
- }
-
-/* If supplied, report an error if ismap has no inverse transformation,
- or if it has an incorrect number of inputs or outputs. */
- if( ismap && astOK ) {
- if( !astGetTranInverse( ismap ) ) {
- astError( AST__INTRD, "astInitSwitchMap(%s): The inverse selector Mapping "
- "is not able to transform coordinates in the inverse direction.", status,
- name );
- } else if( nout != astGetNout( ismap ) ){
- astError( AST__BADNO, "astInitSwitchMap(%s): The inverse selector "
- "Mapping has %d output(s) but the SwitchMap has %d "
- "output(s).", status, name, astGetNout( ismap ), nout );
-
- } else if( astGetNin( ismap ) != 1 ){
- astError( AST__BADNI, "astInitSwitchMap(%s): The inverse selector "
- "Mapping has %d inputs but should only have 1.", status, name,
- astGetNin( ismap ) );
-
- }
- }
-
-/* Report an error if neither ismap nor fsmap were supplied. */
- if( !fsmap && !ismap && astOK ) {
- astError( AST__INTRD, "astInitSwitchMap(%s): No selector Mappings "
- "supplied.", status, name );
- }
-
-/* Initialise a Mapping structure (the parent class) as the first component
- within the SwitchMap structure, allocating memory if necessary. Specify
- the number of input and output coordinates and in which directions the
- Mapping should be defined. */
- if ( astOK ) {
- new = (AstSwitchMap *) astInitMapping( mem, size, 0,
- (AstMappingVtab *) vtab, name,
- nin, nout,
- ( fsmap != NULL ),
- ( ismap != NULL ) );
- if ( astOK ) {
-
-/* Initialise the SwitchMap data. */
-/* --------------------------- */
-/* Store pointers to the selector Mappings. */
- new->fsmap = fsmap ? astClone( fsmap ) : NULL;
- new->ismap = ismap ? astClone( ismap ) : NULL;
-
-/* Save the initial values of the inversion flags for these Mappings. */
- new->fsinv = fsmap ? astGetInvert( fsmap ) : 0;
- new->isinv = ismap ? astGetInvert( ismap ) : 0;
-
-/* Create arrays for the route Mappings. */
- new->routemap = astMalloc( sizeof( AstMapping * )*nroute );
- new->routeinv = astMalloc( sizeof( int )*nroute );
-
-/* Store pointers to the route Mappings and their invert flags. */
- if( astOK ) {
- new->nroute = nroute;
- for( i = 0; i < nroute; i++ ) {
- new->routemap[ i ] = astClone( routemaps[ i ] );
- new->routeinv[ i ] = astGetInvert( routemaps[ i ] );
- }
- } else {
- new->nroute = 0;
- }
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstSwitchMap *astLoadSwitchMap_( void *mem, size_t size,
- AstSwitchMapVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadSwitchMap
-
-* Purpose:
-* Load a SwitchMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "switchmap.h"
-* AstSwitchMap *astLoadSwitchMap( void *mem, size_t size,
-* AstSwitchMapVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* SwitchMap loader.
-
-* Description:
-* This function is provided to load a new SwitchMap using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* SwitchMap structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a SwitchMap at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the SwitchMap is to be
-* loaded. This must be of sufficient size to accommodate the
-* SwitchMap data (sizeof(SwitchMap)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the SwitchMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the SwitchMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstSwitchMap) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new SwitchMap. If this is NULL, a pointer to
-* the (static) virtual function table for the SwitchMap class is
-* used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "SwitchMap" is used instead.
-
-* Returned Value:
-* A pointer to the new SwitchMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstSwitchMap *new;
- AstMapping *rmap;
- int i;
- char buf[ 20 ];
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this SwitchMap. In this case the
- SwitchMap belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstSwitchMap );
- vtab = &class_vtab;
- name = "SwitchMap";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitSwitchMapVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built SwitchMap. */
- new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
- channel );
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "SwitchMap" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* Forward Selector Mapping and its Invert flag. */
-/* --------------------------------------------- */
- new->fsmap = astReadObject( channel, "fsmap", NULL );
- new->fsinv = astReadInt( channel, "fsinv", 0 );
- new->fsinv = ( new->fsinv != 0 );
-
-/* Inverse Selector Mapping and its Invert flag. */
-/* --------------------------------------------- */
- new->ismap = astReadObject( channel, "ismap", NULL );
- new->isinv = astReadInt( channel, "isinv", new->fsinv );
- new->isinv = ( new->isinv != 0 );
-
-/* Loop to load each route Mapping and its invert flag. */
-/* ---------------------------------------------------- */
- new->routemap = NULL;
- new->routeinv = NULL;
- i = 0;
- while( astOK ) {
- sprintf( buf, "rmap%d", i + 1 );
- rmap = astReadObject( channel, buf, NULL );
- if( rmap ) {
- new->routemap = astGrow( new->routemap, i + 1, sizeof( AstMapping *) );
- new->routeinv = astGrow( new->routeinv, i + 1, sizeof( int ) );
- if( astOK ) {
- new->routemap[ i ] = rmap;
- sprintf( buf, "rinv%d", i + 1 );
- new->routeinv[ i ] = astReadInt( channel, buf, 0 );
- new->routeinv[ i ] = ( new->routeinv[ i ] != 0 );
- i++;
- }
- } else {
- break;
- }
- }
-
-/* Number of route Mappings. */
- new->nroute = i;
-
-/* If an error occurred, clean up by deleting the new SwitchMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new SwitchMap pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-/* None. */
-
-
-
-
diff --git a/ast-5.3-1/switchmap.h b/ast-5.3-1/switchmap.h
deleted file mode 100644
index 3a30f4b..0000000
--- a/ast-5.3-1/switchmap.h
+++ /dev/null
@@ -1,289 +0,0 @@
-#if !defined( SWITCHMAP_INCLUDED ) /* Include this file only once */
-#define SWITCHMAP_INCLUDED
-/*
-*+
-* Name:
-* switchmap.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the SwitchMap class.
-
-* Invocation:
-* #include "switchmap.h"
-
-* Description:
-* This include file defines the interface to the SwitchMap class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-
-* Inheritance:
-* The SwitchMap class inherits from the Mapping class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* None.
-
-* Methods Over-Ridden:
-* Public:
-* None.
-*
-* Protected:
-* astMapMerge
-* Merge a SwitchMap within a sequence of Mappings.
-* astTransform
-* Transform a set of points.
-
-* New Methods Defined:
-* Public:
-* None.
-*
-* Protected:
-* None.
-
-* Other Class Functions:
-* Public:
-* astIsASwitchMap
-* Test class membership.
-* astSwitchMap
-* Create a SwitchMap.
-*
-* Protected:
-* astCheckSwitchMap
-* Validate class membership.
-* astInitSwitchMap
-* Initialise a SwitchMap.
-* astInitSwitchMapVtab
-* Initialise the virtual function table for the SwitchMap class.
-* astLoadSwitchMap
-* Load a SwitchMap.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstSwitchMap
-* SwitchMap object type.
-*
-* Protected:
-* AstSwitchMapVtab
-* SwitchMap virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 13-MAR-2006 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h" /* Coordinate Mappings (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* SwitchMap structure. */
-/* ----------------- */
-/* This structure contains all information that is unique to each
- object in the class (e.g. its instance variables). */
-typedef struct AstSwitchMap {
-
-/* Attributes inherited from the parent class. */
- AstMapping mapping; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- AstMapping *fsmap; /* Pointer to forward selector Mapping */
- AstMapping *ismap; /* Pointer to inverse selector Mapping */
- int fsinv; /* Inversion flag for forward selector Mapping */
- int isinv; /* Inversion flag for inverse selector Mapping */
- int nroute; /* The number of route Mappings in the SwitchMap */
- AstMapping **routemap; /* Array of route Mapping pointers */
- int *routeinv; /* Array of inversion flags for route Mappings */
-} AstSwitchMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstSwitchMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstMappingVtab mapping_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-/* None. */
-} AstSwitchMapVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstSwitchMapGlobals {
- AstSwitchMapVtab Class_Vtab;
- int Class_Init;
-} AstSwitchMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitSwitchMapGlobals_( AstSwitchMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(SwitchMap) /* Check class membership */
-astPROTO_ISA(SwitchMap) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstSwitchMap *astSwitchMap_( void *, void *, int, void **, const char *, int *, ...);
-#else
-AstSwitchMap *astSwitchMapId_( void *, void *, int, void **, const char *, ... )__attribute__((format(printf,5,6)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstSwitchMap *astInitSwitchMap_( void *, size_t, int, AstSwitchMapVtab *,
- const char *, AstMapping *, AstMapping *,
- int, AstMapping **, int * );
-
-/* Vtab initialiser. */
-void astInitSwitchMapVtab_( AstSwitchMapVtab *, const char *, int * );
-
-/* Loader. */
-AstSwitchMap *astLoadSwitchMap_( void *, size_t, AstSwitchMapVtab *,
- const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-#if defined(astCLASS) /* Protected */
-
-int astSwitchList_( AstSwitchMap *, int, int *, AstMapping ***, int **, int * );
-
-#endif
-
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckSwitchMap(this) astINVOKE_CHECK(SwitchMap,this,0)
-#define astVerifySwitchMap(this) astINVOKE_CHECK(SwitchMap,this,1)
-
-/* Test class membership. */
-#define astIsASwitchMap(this) astINVOKE_ISA(SwitchMap,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astSwitchMap astINVOKE(F,astSwitchMap_)
-#else
-#define astSwitchMap astINVOKE(F,astSwitchMapId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitSwitchMap(mem,size,init,vtab,name,fsmap,ismap,nroute,routemaps) \
-astINVOKE(O,astInitSwitchMap_(mem,size,init,vtab,name,astCheckMapping(fsmap),\
- astCheckMapping(ismap),nroute,routemaps,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitSwitchMapVtab(vtab,name) astINVOKE(V,astInitSwitchMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadSwitchMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadSwitchMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-
-#define astSwitchList astSwitchList_
-
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckSwitchMap to validate SwitchMap pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-/* None. */
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/timeframe.c b/ast-5.3-1/timeframe.c
deleted file mode 100644
index 3f3462a..0000000
--- a/ast-5.3-1/timeframe.c
+++ /dev/null
@@ -1,6957 +0,0 @@
-/*
-*class++
-* Name:
-* TimeFrame
-
-* Purpose:
-* Time coordinate system description.
-
-* Constructor Function:
-c astTimeFrame
-f AST_TIMEFRAME
-
-* Description:
-* A TimeFrame is a specialised form of one-dimensional Frame which
-* represents various coordinate systems used to describe positions in
-* time.
-*
-* A TimeFrame represents a moment in time as either an Modified Julian
-* Date (MJD), a Julian Date (JD), a Besselian epoch or a Julian epoch,
-* as determined by the System attribute. Optionally, a zero point can be
-* specified (using attribute TimeOrigin) which results in the TimeFrame
-* representing time offsets from the specified zero point.
-*
-* Even though JD and MJD are defined as being in units of days, the
-* TimeFrame class allows other units to be used (via the Unit attribute)
-* on the basis of simple scalings (60 seconds = 1 minute, 60 minutes = 1
-* hour, 24 hours = 1 day, 365.25 days = 1 year). Likewise, Julian epochs
-* can be described in units other than the usual years. Besselian epoch
-* are always represented in units of (tropical) years.
-*
-* The TimeScale attribute allows the time scale to be specified (that
-* is, the physical process used to define the rate of flow of time).
-* MJD, JD and Julian epoch can be used to represent a time in any
-* supported time scale. However, Besselian epoch may only be used with the
-* "TT" (Terrestrial Time) time scale. The list of supported time scales
-* includes universal time and siderial time. Strictly, these represent
-* angles rather than time scales, but are included in the list since
-* they are in common use and are often thought of as time scales.
-*
-* When a time value is formatted it can be formated either as a simple
-* floating point value, or as a Gregorian date (see the Format
-* attribute).
-
-* Inheritance:
-* The TimeFrame class inherits from the Frame class.
-
-* Attributes:
-* In addition to those attributes common to all Frames, every
-* TimeFrame also has the following attributes:
-*
-* - AlignTimeScale: Time scale in which to align TimeFrames
-* - LTOffset: The offset of Local Time from UTC, in hours.
-* - TimeOrigin: The zero point for TimeFrame axis values
-* - TimeScale: The timescale used by the TimeFrame
-*
-* Several of the Frame attributes inherited by the TimeFrame class
-* refer to a specific axis of the Frame (for instance Unit(axis),
-* Label(axis), etc). Since a TimeFrame is strictly one-dimensional,
-* it allows these attributes to be specified without an axis index.
-* So for instance, "Unit" is allowed in place of "Unit(1)".
-
-* Functions:
-c In addition to those functions applicable to all Frames, the
-c following functions may also be applied to all TimeFrames:
-f In addition to those routines applicable to all Frames, the
-f following routines may also be applied to all TimeFrames:
-*
-c - astCurrentTime: Return the current system time
-f - AST_CURRENTTIME: Return the current system time
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* NG: Norman Gray (Starlink)
-* DSB: David Berry (Starlink)
-
-* History:
-* XX-Aug-2003 (NG):
-* Original version, drawing heavily on specframe.c.
-* 20-MAY-2005 (NG):
-* Merged into main AST system.
-* 25-MAY-2005 (DSB):
-* Extensive modifications to add extra timescales, unit support,
-* support for relative times, etc, and to make it more like the
-* other AST Frame classes.
-* 12-AUG-2005 (DSB):
-* Remove ClockLon and ClockLat attributes. Use the new ObsLon and
-* ObsLat attributes in the parent Frame class instead. Note, for
-* backward compatibility the public attribute accessors and the
-* astLoadTimeFrame functions still recogonise ClockLon and ClockLat,
-* but use the ObsLat/ObsLon attributes internally.
-* 1-MAR-2006 (DSB):
-* Replace astSetPermMap within DEBUG blocks by astBeginPM/astEndPM.
-* 29-JUN-2006 (DSB):
-* - Activate astAbbrev function for abbreviating leading fields in
-* plot labels.
-* - Include TimeOrigin in default Label.
-* 30-JUN-2006 (DSB):
-* When splitting a date/time string into fields, allow each field
-* to include a decimal point.
-* 30-JUN-2006 (DSB):
-* Allow astAbbrev to have a null "str1" value.
-* 16-OCT-2006 (DSB):
-* Allow conversions between UTC and UT1 (using the new Frame attribute
-* 1-NOV-2006 (DSB):
-* Correct sign of longitude passed to TimeMap contrutcorss in
-* function MakeMap.
-* 31-JAN-2007 (DSB):
-* Modified so that a TimeFrame can be used as a template to find a
-* TimeFrame contained within a CmpFrame. This involves changes in
-* Match and the removal of the local versions of SetMaxAxes and
-* SetMinAxes.
-* 3-SEP-2007 (DSB):
-* In SubFrame, since AlignSystem is extended by the TimeFrame class
-* it needs to be cleared before invoking the parent SubFrame
-* method in cases where the result Frame is not a TimeFrame.
-* 2-OCT-2007 (DSB):
-* In Overlay, clear AlignSystem as well as System before calling
-* the parent overlay method.
-* 2-OCT-2007 (DSB):
-* Added "LT" (Local Time) time scale.
-* 9-DEC-2008 (DSB):
-* Ensure Format string pointer is used correctly.
-* 19-JAN-2009 (DSB):
-* Ensure "<bad>" is returned by astFormat if the axis value is bad.
-* 31-MAR-2009 (DSB):
-* Extend TimeFrame "iso" Format to allow it to specify the character to
-* place between the time and date strings.
-* 15-APR-2009 (DSB):
-* Increase the number of nice calendar time axis gaps allowed by
-* the Gap function. Previously, there was a jump from 1 day to 1
-* year making it difficult to plot calendar axes covering time
-* ranges of the order of 0.5 to 2 years. Now, nice numbers of days
-* are allowed as intermediate gaps. Since months do not all have
-* the same number of days, this means that the day number at major
-* ticks will bounce around a bit.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS TimeFrame
-
-/* Define the first and last acceptable System values. */
-#define FIRST_SYSTEM AST__MJD
-#define LAST_SYSTEM AST__BEPOCH
-
-/* Define the first and last acceptable TimeScale values. */
-#define FIRST_TS AST__TAI
-#define LAST_TS AST__LT
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
- compare bad values directory because of the danger of floating point
- exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E3*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* The supported time scales fall into two groups. Time scales in the
- first group depend on the clock position. That is, transformation
- between a time scale in one group and a timescale in the other group
- requires the clock position, as does transformation between two time
- scales within the first group. Define a macro which tests if a given
- timescale belongs to the first group. */
-#define CLOCK_SCALE(ts) \
- ( ( ts == AST__LMST || \
- ts == AST__LAST || \
- ts == AST__TDB || \
- ts == AST__TCB ) ? 1 : 0 )
-
-
-/* Define a macro which tests if a given timescale requires a Dut1 value
- in order to convert from the timescale to UTC. */
-#define DUT1_SCALE(ts) \
- ( ( ts == AST__LMST || \
- ts == AST__LAST || \
- ts == AST__GMST || \
- ts == AST__UT1 ) ? 1 : 0 )
-
-/* Define a macro which tests if a given timescale requires a LTOffset value
- in order to convert from the timescale to UTC. */
-#define LTOFFSET_SCALE(ts) \
- ( ( ts == AST__LT ) ? 1 : 0 )
-
-/* The Unix epoch (00:00:00 UTC 1 January 1970 AD) as an absolute MJD in
- the UTC timescale. */
-#define UNIX_EPOCH 40587.0
-
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "unit.h" /* Units management facilities */
-#include "globals.h" /* Thread-safe global data access */
-#include "object.h" /* Base Object class */
-#include "timemap.h" /* Time coordinate Mappings */
-#include "frame.h" /* Parent Frame class */
-#include "timeframe.h" /* Interface definition for this class */
-#include "mapping.h" /* Coordinate Mappings */
-#include "cmpmap.h" /* Compound Mappings */
-#include "unitmap.h" /* Unit Mappings */
-#include "shiftmap.h" /* Shift of origins */
-#include "pal.h" /* SlaLib interface */
-
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stddef.h>
-#include <math.h>
-#include <time.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are used or extended by this
- class. */
-static AstSystemType (* parent_getalignsystem)( AstFrame *, int * );
-static AstSystemType (* parent_getsystem)( AstFrame *, int * );
-static double (* parent_gap)( AstFrame *, int, double, int *, int * );
-static const char *(* parent_abbrev)( AstFrame *, int, const char *, const char *, const char *, int * );
-static const char *(* parent_format)( AstFrame *, int, double, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static const char *(* parent_getdomain)( AstFrame *, int * );
-static const char *(* parent_getlabel)( AstFrame *, int, int * );
-static const char *(* parent_getsymbol)( AstFrame *, int, int * );
-static const char *(* parent_gettitle)( AstFrame *, int * );
-static const char *(* parent_getunit)( AstFrame *, int, int * );
-static double (* parent_getepoch)( AstFrame *, int * );
-static int (* parent_match)( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int (* parent_subframe)( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static int (* parent_unformat)( AstFrame *, int, const char *, double *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_clearsystem)( AstFrame *, int * );
-static void (* parent_overlay)( AstFrame *, const int *, AstFrame *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static void (* parent_setsystem)( AstFrame *, AstSystemType, int * );
-static void (* parent_setunit)( AstFrame *, int, const char *, int * );
-
-/* The Unix epoch (00:00:00 UTC 1 January 1970 AD) as an absolute MJD in
- the TAI timescale. */
-static double tai_epoch;
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->Format_Buff[ 0 ] = 0; \
- globals->GetAttrib_Buff[ 0 ] = 0; \
- globals->GetLabel_Buff[ 0 ] = 0; \
- globals->GetSymbol_Buff[ 0 ] = 0; \
- globals->GetTitle_Buff[ 0 ] = 0; \
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(TimeFrame)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(TimeFrame,Class_Init)
-#define class_vtab astGLOBAL(TimeFrame,Class_Vtab)
-#define format_buff astGLOBAL(TimeFrame,Format_Buff)
-#define getattrib_buff astGLOBAL(TimeFrame,GetAttrib_Buff)
-#define getlabel_buff astGLOBAL(TimeFrame,GetLabel_Buff)
-#define getsymbol_buff astGLOBAL(TimeFrame,GetSymbol_Buff)
-#define gettitle_buff astGLOBAL(TimeFrame,GetTitle_Buff)
-
-
-
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX2 pthread_mutex_lock( &mutex2 );
-#define UNLOCK_MUTEX2 pthread_mutex_unlock( &mutex2 );
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-/* Buffers for strings returned by various functions. */
-static char getattrib_buff[ AST__TIMEFRAME_GETATTRIB_BUFF_LEN + 1 ];
-static char format_buff[ AST__TIMEFRAME_FORMAT_BUFF_LEN + 1 ];
-static char getlabel_buff[ AST__TIMEFRAME_GETLABEL_BUFF_LEN + 1 ];
-static char getsymbol_buff[ AST__TIMEFRAME_GETSYMBOL_BUFF_LEN + 1 ];
-static char gettitle_buff[ AST__TIMEFRAME_GETTITLE_BUFF_LEN + 1 ];
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstTimeFrameVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-
-#endif
-
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMapping *MakeMap( AstTimeFrame *, AstSystemType, AstSystemType, AstTimeScaleType, AstTimeScaleType, double, double, const char *, const char *, const char *, int * );
-static AstSystemType GetAlignSystem( AstFrame *, int * );
-static AstSystemType SystemCode( AstFrame *, const char *, int * );
-static AstSystemType ValidateSystem( AstFrame *, AstSystemType, const char *, int * );
-static AstTimeScaleType TimeScaleCode( const char *, int * );
-static const char *DefUnit( AstSystemType, const char *, const char *, int * );
-static const char *Format( AstFrame *, int, double, int * );
-static const char *GetDomain( AstFrame *, int * );
-static const char *GetLabel( AstFrame *, int, int * );
-static const char *GetSymbol( AstFrame *, int, int * );
-static const char *GetTitle( AstFrame *, int * );
-static const char *GetUnit( AstFrame *, int, int * );
-static const char *SystemLabel( AstSystemType, int * );
-static const char *SystemString( AstFrame *, AstSystemType, int * );
-static const char *TimeScaleString( AstTimeScaleType, int * );
-static double CurrentTime( AstTimeFrame *, int * );
-static double FromMJD( AstTimeFrame *, double, int * );
-static double GetEpoch( AstFrame *, int * );
-static double GetTimeOriginCur( AstTimeFrame *, int * );
-static double ToMJD( AstSystemType, double, int * );
-static double ToUnits( AstTimeFrame *, const char *, double, const char *, int * );
-static int DateFormat( const char *, int *, char *, int * );
-static int GetActiveUnit( AstFrame *, int * );
-static int MakeTimeMapping( AstTimeFrame *, AstTimeFrame *, AstTimeFrame *, int, AstMapping **, int * );
-static int Match( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int SubFrame( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int TestActiveUnit( AstFrame *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void OriginScale( AstTimeFrame *, AstTimeScaleType, const char *, int * );
-static void OriginSystem( AstTimeFrame *, AstSystemType, const char *, int * );
-static void Overlay( AstFrame *, const int *, AstFrame *, int * );
-static void SetUnit( AstFrame *, int, const char *, int * );
-static void VerifyAttrs( AstTimeFrame *, const char *, const char *, const char *, int * );
-static AstMapping *ToMJDMap( AstSystemType, double, int * );
-static int Unformat( AstFrame *, int, const char *, double *, int * );
-static const char *Abbrev( AstFrame *, int, const char *, const char *, const char *, int * );
-static double Gap( AstFrame *, int, double, int *, int * );
-
-static AstSystemType GetSystem( AstFrame *, int * );
-static void SetSystem( AstFrame *, AstSystemType, int * );
-static void ClearSystem( AstFrame *, int * );
-
-static double GetTimeOrigin( AstTimeFrame *, int * );
-static int TestTimeOrigin( AstTimeFrame *, int * );
-static void ClearTimeOrigin( AstTimeFrame *, int * );
-static void SetTimeOrigin( AstTimeFrame *, double, int * );
-
-static double GetLTOffset( AstTimeFrame *, int * );
-static int TestLTOffset( AstTimeFrame *, int * );
-static void ClearLTOffset( AstTimeFrame *, int * );
-static void SetLTOffset( AstTimeFrame *, double, int * );
-
-static const char *GetAttrib( AstObject *, const char *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-
-static AstTimeScaleType GetAlignTimeScale( AstTimeFrame *, int * );
-static int TestAlignTimeScale( AstTimeFrame *, int * );
-static void ClearAlignTimeScale( AstTimeFrame *, int * );
-static void SetAlignTimeScale( AstTimeFrame *, AstTimeScaleType, int * );
-
-static AstTimeScaleType GetTimeScale( AstTimeFrame *, int * );
-static int TestTimeScale( AstTimeFrame *, int * );
-static void ClearTimeScale( AstTimeFrame *, int * );
-static void SetTimeScale( AstTimeFrame *, AstTimeScaleType, int * );
-
-/* Member functions. */
-/* ================= */
-static const char *Abbrev( AstFrame *this_frame, int axis, const char *fmt,
- const char *str1, const char *str2, int *status ) {
-/*
-* Name:
-* Abbrev
-
-* Purpose:
-* Abbreviate a formatted Frame axis value by skipping leading fields.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* const char *Abbrev( AstFrame *this, int axis, const char *fmt,
-* const char *str1, const char *str2, int *status )
-
-* Class Membership:
-* TimeFrame member function (over-rides the astAbbrev protected
-* method inherited from the Frame class).
-
-* Description:
-* This function compares two Frame axis values that have been
-* formatted (using astFormat) and determines if they have any
-* redundant leading fields (i.e. leading fields in common which
-* can be suppressed when tabulating the values or plotting them on
-* the axis of a graph).
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* axis
-* The number of the Frame axis for which the values have been
-* formatted (axis numbering starts at zero for the first axis).
-* fmt
-* Pointer to a constant null-terminated string containing the
-* format specification used to format the two values.
-* str1
-* Pointer to a constant null-terminated string containing the
-* first formatted value. If this is null, the returned pointer
-* points to the start of the final field in str2.
-* str2
-* Pointer to a constant null-terminated string containing the
-* second formatted value.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer into the "str2" string which locates the first
-* character in the first field that differs between the two
-* formatted values.
-*
-* If the two values have no leading fields in common, the returned
-* value will point at the start of string "str2". If the two
-* values are equal, it will point at the terminating null at the
-* end of this string.
-
-* Notes:
-* - This function assumes that the format specification used was
-* the same when both values were formatted and that they both
-* apply to the same Frame axis.
-* - A pointer to the start of "str2" will be returned if this
-* function is invoked with the global error status set, or if it
-* should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- const char *p1;
- const char *p2;
- const char *result;
- int df;
- int nc1;
- int nc2;
- int ndp;
-
-/* Initialise. */
- result = str2;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Validate the axis index. */
- astValidateAxis( this_frame, axis, "astAbbrev" );
-
-/* Use the parent astAbbrev function unless the Format attribute indicates
- that axis values are to be formatted as multi-field date/time strings. */
- df = DateFormat( fmt, &ndp, NULL, status );
- if( !df ) {
- result = (*parent_abbrev)( this_frame, axis, fmt, str1, str2, status );
-
-/* Otherwise, if no "str1" string was supplied find the start of the
- last field in "str2". */
- } else if( !str1 ){
-
-/* Initialise a pointer to the start of the next field in the "str2" string
- (skip leading spaces). */
- p2 = str2;
- while( *p2 && isspace( *p2 ) ) p2++;
-
-/* Check the entire string, saving the start of the next field as the
- returned pointer. */
- while( *p2 ) {
- result = p2;
-
-/* Each field in a date/time field consists of digits only (and maybe a
- decimal point). Find the number of leading digits/dots in this field
- and increment the point to the following character (the first delimiter
- character). */
- p2 += strspn( p2, "0123456789." );
-
-/* Skip inter-field (non-numeric) delimiters. */
- p2 += strcspn( p2, "0123456789." );
- }
-
-/* Otherwise, if an "str1" string was supplied find the start of the
- first differing field in "str2". */
- } else {
-
-/* Initialise pointers to the start of the next field in each string
- (skip leading spaces). */
- p1 = str1;
- p2 = str2;
- while( *p1 && isspace( *p1 ) ) p1++;
- while( *p2 && isspace( *p2 ) ) p2++;
-
-/* Check the entire string */
- result = p2;
- while( *p1 && *p2 ) {
-
-/* Each field in a date/time field consists of digits only (and maybe a
- decimal point). Find the number of leading digits/dots in each string */
- nc1 = strspn( p1, "0123456789." );
- nc2 = strspn( p2, "0123456789." );
-
-/* If the next field has different lengths in the two strings, or of the
- content of the fields differ, break out of th eloop, leaving "result"
- pointing to the start of the current field. */
- if( nc1 != nc2 || strncmp( p1, p2, nc1 ) ) {
- break;
-
-/* If the next field is identical in the two strings, skip to the
- character following the end of the field. */
- } else {
- p1 += nc1;
- p2 += nc2;
-
-/* Skip inter-field (non-numeric) delimiters. */
- p1 += strcspn( p1, "0123456789." );
- p2 += strcspn( p2, "0123456789." );
- }
-
-/* Prepare to check the next field. */
- result = p2;
- }
- }
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) result = str2;
-
-/* Return the result. */
- return result;
-}
-
-static int DateFormat( const char *fmt, int *ndp, char *sep, int *status ){
-/*
-* Name:
-* DateFormat
-
-* Purpose:
-* Determine if TimeFrame values should be formatted as a date.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* int DateFormat( const char *fmt, int *ndp, char *sep, int *status )
-
-* Class Membership:
-* TimeFrame member function
-
-* Description:
-* This function returns a flag indicating if the supplied Format string
-* requires the TimeFrame value to be formatted as a date and/or time of
-* day.
-
-* Parameters:
-* fmt
-* Pointer to Format string.
-* ndp
-* A pointer to an integer in which is returned a value indicating
-* if a time is required as well as a date. A value of -1 will be
-* returned in no time is required, otherwise the returned value will
-* equal the number of decimal places required for the seconds field.
-* ndp
-* A pointer to a char in which is returned the character that
-* should be used to separate the date and time fields. Ignored if
-* NULL.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the formatted TimeFrame value should include a date.
-
-*/
-
-/* Local Variables: */
- const char *c;
- int nc;
- int result;
-
-/* Initialise */
- result = 0;
- *ndp = -1;
-
-/* Check the Format string */
- if( fmt ) {
-
-/* Find the first non-white character */
- c = fmt;
- while( *c && isspace( *c ) ) c++;
-
-/* If the first non-white character starts the string "iso"
- assume a date is required. If so see if a time is also required
- (indicated by 1 dot following) and how many seconds of precision are
- required (the interegr following the dot). */
- if( !strncmp( c, "iso", 3 ) ) {
- result = 1;
- if( sscanf( c, "iso.%d%n", ndp, &nc ) == 1 ) {
-
-/* Check the separate character (if any) at the end of the format string.
- Only "T" is allowed. A space is used if no separator is given. */
- if( sep ) *sep = ( c[ nc ] == 'T' || c[ nc ] == 't' ) ? 'T' : ' ';
-
- } else {
- *ndp = -1;
- }
- }
- }
-
- return result;
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a TimeFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* TimeFrame member function (over-rides the astClearAttrib protected
-* method inherited from the Frame class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* TimeFrame, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This function uses one-based axis numbering so that it is
-* suitable for external (public) use.
-*/
-
-/* Local Variables: */
- AstTimeFrame *this; /* Pointer to the TimeFrame structure */
- char *new_attrib; /* Pointer value to new attribute name */
- int len; /* Length of attrib string */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the TimeFrame structure. */
- this = (AstTimeFrame *) this_object;
-
-/* Obtain the length of the "attrib" string. */
- len = strlen( attrib );
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* First look for axis attributes defined by the Frame class. Since a
- TimeFrame has only 1 axis, we allow these attributes to be specified
- without a trailing "(axis)" string. */
- if ( !strcmp( attrib, "direction" ) ||
- !strcmp( attrib, "bottom" ) ||
- !strcmp( attrib, "top" ) ||
- !strcmp( attrib, "format" ) ||
- !strcmp( attrib, "label" ) ||
- !strcmp( attrib, "symbol" ) ||
- !strcmp( attrib, "unit" ) ) {
-
-/* Create a new attribute name from the original by appending the string
- "(1)" and then use the parent ClearAttrib method. */
- new_attrib = astMalloc( len + 4 );
- if( new_attrib ) {
- memcpy( new_attrib, attrib, len );
- memcpy( new_attrib + len, "(1)", 4 );
- (*parent_clearattrib)( this_object, new_attrib, status );
- new_attrib = astFree( new_attrib );
- }
-
-/* AlignTimeScale. */
-/* --------------- */
- } else if ( !strcmp( attrib, "aligntimescale" ) ) {
- astClearAlignTimeScale( this );
-
-/* ClockLat. */
-/* --------- */
-/* Retained for backward compatibility with older versions of AST in which
- TimeFrame had ClockLon/Lat attributes (now ObsLon/Lat are used instead). */
- } else if ( !strcmp( attrib, "clocklat" ) ) {
- astClearAttrib( this, "obslat" );
-
-/* ClockLon. */
-/* --------- */
-/* Retained for backward compatibility with older versions of AST in which
- TimeFrame had ClockLon/Lat attributes (now ObsLon/Lat are used instead). */
- } else if ( !strcmp( attrib, "clocklon" ) ) {
- astClearAttrib( this, "obslon" );
-
-/* LTOffset. */
-/* --------- */
- } else if ( !strcmp( attrib, "ltoffset" ) ) {
- astClearLTOffset( this );
-
-/* TimeOrigin. */
-/* ---------- */
- } else if ( !strcmp( attrib, "timeorigin" ) ) {
- astClearTimeOrigin( this );
-
-/* TimeScale. */
-/* ---------- */
- } else if ( !strcmp( attrib, "timescale" ) ) {
- astClearTimeScale( this );
-
-/* If the attribute is not recognised, pass it on to the parent method
- for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static void ClearSystem( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* ClearSystem
-
-* Purpose:
-* Clear the System attribute for a TimeFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* void ClearSystem( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* TimeFrame member function (over-rides the astClearSystem protected
-* method inherited from the Frame class).
-
-* Description:
-* This function clears the System attribute for a TimeFrame.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstSystemType oldsys; /* System before clearing */
- AstTimeFrame *this; /* Pointer to TimeFrame structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the TimeFrame structure. */
- this = (AstTimeFrame *) this_frame;
-
-/* Save the original system */
- oldsys = astGetSystem( this_frame );
-
-/* Use the parent ClearSystem method to clear the System value. */
- (*parent_clearsystem)( this_frame, status );
-
-/* Do nothing more if the system has not actually changed. */
- if( astGetSystem( this_frame ) != oldsys ) {
-
-/* Modify the TimeOrigin value to use the new System */
- OriginSystem( this, oldsys, "astClearSystem", status );
-
-/* Clear attributes which have system-specific defaults. */
- astClearLabel( this_frame, 0 );
- astClearSymbol( this_frame, 0 );
- astClearTitle( this_frame );
-
-/* If the old system was BEPOCH also clear units and timescale. This is
- because we need to ensure that TimeScale=TT and Unit=yr will be used
- in future (these are the only acceptable values for System=BEPOCH). */
- if( oldsys == AST__BEPOCH ) {
- astClearUnit( this_frame, 0 );
- astClearTimeScale( (AstTimeFrame *) this_frame );
- }
- }
-}
-
-static void ClearTimeScale( AstTimeFrame *this, int *status ) {
-/*
-*+
-* Name:
-* astClearTimeScale
-
-* Purpose:
-* Clear the TimeScale attribute for a TimeFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "timeframe.h"
-* void astClearTimeScale( AstTimeFrame *this )
-
-* Class Membership:
-* TimeFrame virtual function
-
-* Description:
-* This function clears the TimeScale attribute for a TimeFrame.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* If the System is currently set to BEPOCH, then the TimeScale will
- either be set to TT or will be unset (since SetTimeScale will not
- allow any other value than TT if the System is BEPOCH). Therefore, if
- System is BEPOCH, we will not need to modify the TimeOrigin value,
- since it will already be appropriate. Otherwise, we modify the
- TimeOrigin value stored in the TimeFrame structure to refer to the
- default timescale (TAI or TT). */
- if( astGetSystem( this ) != AST__BEPOCH ) OriginScale( this, AST__TAI,
- "astClearTimeScale", status );
-
-/* Store a bad value for the timescale in the TimeFrame structure. */
- this->timescale = AST__BADTS;
-}
-
-static double CurrentTime( AstTimeFrame *this, int *status ){
-/*
-*++
-* Name:
-c astCurrentTime
-f AST_CURRENTTIME
-
-* Purpose:
-* Return the current system time.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "timeframe.h"
-c double astCurrentTime( AstTimeFrame *this )
-f RESULT = AST_CURRENTTIME( THIS, STATUS )
-
-* Class Membership:
-* TimeFrame method.
-
-* Description:
-c This function
-f This routine
-* returns the current system time, represented in the form specified
-* by the supplied TimeFrame. That is, the returned floating point
-* value should be interpreted using the attribute values of the
-* TimeFrame. This includes System, TimeOrigin, LTOffset, TimeScale,
-* and Unit.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the TimeFrame.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astCurrentTime()
-f AST_CURRENTTIME = DOUBLE
-c A TimeFrame axis value representing the current system time.
-
-* Notes:
-* - Values of AST__BAD will be returned if this function is
-c invoked with the AST error status set, or if it should fail for
-f invoked with STATUS set to an error value, or if it should fail for
-* any reason.
-* - It is assumes that the system time (returned by the C time()
-* function) follows the POSIX standard, representing a continuous
-* monotonic increasing count of SI seconds since the epoch 00:00:00
-* UTC 1 January 1970 AD (equivalent to TAI with a constant offset).
-* Resolution is one second.
-* - An error will be reported if the TimeFrame has a TimeScale value
-* which cannot be converted to TAI (e.g. "angular" systems such as
-* UT1, GMST, LMST and LAST).
-* - Any inaccuracy in the system clock will be reflected in the value
-* returned by this function.
-*--
-*/
-
-/* Local Constants: */
-
-/* Local Variables: */
- AstMapping *map;
- double result;
- double systime;
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a Mapping from the system time (TAI seconds relative to "tai_epoch")
- to the system represented by the supplied TimeFrame. */
- map = MakeMap( this, AST__MJD, astGetSystem( this ),
- AST__TAI, astGetTimeScale( this ),
- tai_epoch, astGetTimeOrigin( this ),
- "s", astGetUnit( this, 0 ), "astCurrentTime", status );
- if( !map ) {
- astError( AST__INCTS, "astCurrentTime(%s): Cannot convert the "
- "current system time to the required timescale (%s).", status,
- astGetClass( this ),
- TimeScaleString( astGetTimeScale( this ), status ) );
-
-/* Get the system time. The "time" function returns a "time_t" which may be
- encoded in any way. We use "difftime" to convert this into a floating
- point number of seconds by taking the difference between the current
- time and zero time. This assumes nothing about the structure of a
- "time_t" except that zero can be cast into a time_t representing
- the epoch. */
- } else {
- systime = difftime( time( NULL ), (time_t) 0 );
-
-/* Use the Mapping to convert the time into the requied system. */
- astTran1( map, 1, &systime, 1, &result );
-
-/* Free resources */
- map = astAnnul( map );
- }
-
-/* Set result to AST__BAD if an error occurred. */
- if( !astOK ) result = AST__BAD;
-
-/* Return the result. */
- return result;
-}
-
-static const char *DefUnit( AstSystemType system, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* DefUnit
-
-* Purpose:
-* Return the default units for a time coordinate system type.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* const char *DefUnit( AstSystemType system, const char *method,
-* const char *class, int *status )
-
-* Class Membership:
-* TimeFrame member function.
-
-* Description:
-* This function returns a textual representation of the default
-* units associated with the specified time coordinate system.
-
-* Parameters:
-* system
-* The time coordinate system.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A string describing the default units. This string follows the
-* units syntax described in FITS WCS paper I "Representations of world
-* coordinates in FITS" (Greisen & Calabretta).
-
-* Notes:
-* - A NULL pointer is returned if this function is invoked with
-* the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- const char *result; /* Value to return */
-
-/* Initialize */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get an identifier for the default units. */
- if( system == AST__MJD ) {
- result = "d";
- } else if( system == AST__JD ) {
- result = "d";
- } else if( system == AST__BEPOCH ) {
- result = "yr";
- } else if( system == AST__JEPOCH ) {
- result = "yr";
-
-/* Report an error if the coordinate system was not recognised. */
- } else {
- astError( AST__SCSIN, "%s(%s): Corrupt %s contains illegal System "
- "identification code (%d).", status, method, class, class,
- (int) system );
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *Format( AstFrame *this_frame, int axis, double value, int *status ) {
-/*
-* Name:
-* Format
-
-* Purpose:
-* Format a coordinate value for a TimeFrame axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* const char *Format( AstFrame *this, int axis, double value, int *status )
-
-* Class Membership:
-* TimeFrame member function (over-rides the astFormat method inherited
-* from the Frame class).
-
-* Description:
-* This function returns a pointer to a string containing the formatted
-* (character) version of a coordinate value for a TimeFrame axis. The
-* formatting applied is that specified by a previous invocation of the
-* astSetFormat method. A suitable default format is applied if necessary.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-* axis
-* The number of the axis (zero-based) for which formatting is to be
-* performed.
-* value
-* The coordinate value to be formatted, in radians.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a null-terminated string containing the formatted value.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS
- AstMapping *map;
- AstSystemType sys;
- AstTimeFrame *this;
- AstTimeScaleType ts;
- char *d;
- char sep;
- char tbuf[ 100 ];
- char sign[ 2 ];
- const char *fmt;
- const char *result;
- const char *u;
- double fd;
- double mjd;
- double off;
- int df;
- int id;
- int ihmsf[ 4 ];
- int im;
- int iy;
- int j;
- int ndp;
- int tlen;
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_frame);
-
-/* Obtain a pointer to the TimeFrame structure. */
- this = (AstTimeFrame *) this_frame;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis, "astFormat" );
-
-/* Check if a bad coordinate value was supplied and return a pointer to an
- appropriate string if necessary. */
- if ( value == AST__BAD ) {
- result = "<bad>";
- } else {
-
-/* If the format string does not indicate a date/time format, invoke the
- parent Format method. */
- fmt = astGetFormat( this, 0 );
- df = DateFormat( fmt, &ndp, &sep, status );
- if( !df ) {
- result = (*parent_format)( this_frame, axis, value, status );
-
-/* Otherwise, format the value as a date/time */
- } else {
-
-/* Convert the value to an absolute MJD in units of days. */
- ts = astGetTimeScale( this );
- sys = astGetSystem( this );
- off = astGetTimeOrigin( this );
- u = astGetUnit( this, 0 );
- map = MakeMap( this, sys, AST__MJD, ts, ts, off, 0.0, u, "d",
- "astFormat", status );
- if( map ) {
- astTran1( map, 1, &value, 1, &mjd );
- map = astAnnul( map );
-
-/* If no time fields will be produced, round to the nearest day. */
- if( ndp < 0 ) mjd = (int) ( mjd + 0.5 );
-
-/* Convert the MJD into a set of numeric date fields, plus day fraction,
- and format them. */
- palSlaDjcl( mjd, &iy, &im, &id, &fd, &j );
- d = format_buff;
- d += sprintf( d, "%4d-%2.2d-%2.2d", iy, im, id );
-
-/* If required, convert the day fraction into a set of numerical time
- fields. */
- if( ndp >= 0 ) {
- palSlaDd2tf( ndp, fd, sign, ihmsf );
-
-/* Format the time fields. */
- if( ndp > 0 ) {
- tlen = sprintf( tbuf, "%c%2.2d:%2.2d:%2.2d.%*.*d", sep,
- ihmsf[0], ihmsf[1], ihmsf[2], ndp, ndp,
- ihmsf[3] );
- } else {
- tlen = sprintf( tbuf, "%c%2.2d:%2.2d:%2.2d", sep, ihmsf[0],
- ihmsf[1], ihmsf[2] );
- }
-
-/* Add in the formatted time. */
- d += sprintf( d, "%s", tbuf );
-
- }
- result = format_buff;
- }
- }
- }
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-static double FromMJD( AstTimeFrame *this, double oldval, int *status ){
-/*
-*
-* Name:
-* FromMJD
-
-* Purpose:
-* Convert a supplied MJD value to the System of the supplied TimeFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* double FromMJD( AstTimeFrame *this, double oldval, int *status )
-
-* Class Membership:
-* TimeFrame member function
-
-* Description:
-* This function converts the supplied time value from an MJD to
-* the System of the supplied TimeFrame.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-* oldval
-* The value to be converted. It is assume to be an absolute MJD
-* value (i.e. zero offset) in units of days.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The converted value (with zero offset), in the default units
-* associated with the System of "this".
-
-*/
-
-/* Local Variables: */
- AstTimeMap *timemap;
- AstSystemType newsys;
- double args[ 2 ];
- double result;
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get the System attribute from the supplied TimeFrame. */
- newsys = astGetSystem( this );
-
-/* If this is MJD just return the value unchanged. */
- if( newsys == AST__MJD ) {
- result = oldval;
-
-/* Otherwise create a TimeMap wich converts from the MJD to the required
- system, and use it to transform the supplied value. */
- } else {
- timemap = astTimeMap( 0, "", status );
-
-/* The supplied and returned values are assumed to have zero offset.*/
- args[ 0 ] = 0.0;
- args[ 1 ] = 0.0;
-
-/* If required, add a TimeMap conversion which converts from MJD to the
- new system. */
- if( newsys == AST__JD ) {
- astTimeAdd( timemap, "MJDTOJD", args );
-
- } else if( newsys == AST__JEPOCH ) {
- astTimeAdd( timemap, "MJDTOJEP", args );
-
- } else if( newsys == AST__BEPOCH ) {
- astTimeAdd( timemap, "MJDTOBEP", args );
- }
-
-/* Use the TimeMap to convert the supplied value. */
- astTran1( timemap, 1, &oldval, 1, &result );
-
-/* Free resources */
- timemap = astAnnul( timemap );
-
- }
-
-/* Return the result */
- return result;
-}
-
-
-static double Gap( AstFrame *this_frame, int axis, double gap, int *ntick, int *status ) {
-/*
-* Name:
-* Gap
-
-* Purpose:
-* Find a "nice" gap for tabulating Frame axis values.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* double Gap( AstFrame *this, int axis, double gap, int *ntick, int *status )
-
-* Class Membership:
-* TimeFrame member function (over-rides the astGap protected
-* method inherited from the Frame class).
-
-* This function returns a gap size which produces a nicely spaced
-* series of formatted values for a Frame axis, the returned gap
-* size being as close as possible to the supplied target gap
-* size. It also returns a convenient number of divisions into
-* which the gap can be divided.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* axis
-* The number of the axis (zero-based) for which a gap is to be found.
-* gap
-* The target gap size.
-* ntick
-* Address of an int in which to return a convenient number of
-* divisions into which the gap can be divided.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The nice gap size.
-
-* Notes:
-* - A value of zero is returned if the target gap size is zero.
-* - A negative gap size is returned if the supplied gap size is negative.
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstMapping *map;
- AstTimeFrame *this;
- AstTimeScaleType ts;
- const char *fmt;
- double mjdgap;
- double result;
- double xin[2];
- double xout[2];
- int df;
- int ndp;
-
-/* Initialise. */
- result = 0.0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Validate the axis index. */
- astValidateAxis( this_frame, axis, "astGap" );
-
-/* Obtain a pointer to the TimeFrame structure. */
- this = (AstTimeFrame *) this_frame;
-
-/* Use the parent astGap function unless the Format attribute indicates
- that axis values are to be formatted as multi-field date/time strings. */
- fmt = astGetFormat( this, 0 );
- df = DateFormat( fmt, &ndp, NULL, status );
- if( !df ) {
- result = (*parent_gap)( this_frame, axis, gap, ntick, status );
-
-/* Otherwise. */
- } else {
-
-/* Get a Mapping which converts TimeFrame values to MJD values. */
- ts = astGetTimeScale( this );
- map = MakeMap( this, astGetSystem( this ), AST__MJD, ts, ts,
- astGetTimeOrigin( this ), 0.0, astGetUnit( this, 0 ),
- "d", "astGap", status );
- if( map ) {
-
-/* Use it to transform two TimeFrame times to MJD. The first is the
- current time, and the second is the current time plus the target gap. */
- xin[ 0 ] = astCurrentTime( this );
- xin[ 1 ] = xin[ 0 ] + gap;
- astTran1( map, 2, xin, 1, xout );
-
-/* Find the target MJD gap. */
- mjdgap = xout[ 1 ] - xout[ 0 ];
-
-/* If it is 1 year or more, use the parent astGap method to find a nice
- number of years, and convert back to days. */
- if( mjdgap >= 365.25 ) {
- mjdgap = 365.25*(*parent_gap)( this_frame, axis, mjdgap/365.25, ntick, status );
-
-/* If it is more than 270 days days use 1 year. */
- } else if( mjdgap > 270.0 ) {
- mjdgap = 365.25;
- *ntick = 4;
-
-/* If it is more than 150 days days use 180 days (roughly half a year).
- Use 6 divisions (30 days each, or roughly 1 month). */
- } else if( mjdgap > 150.0 ) {
- mjdgap = 180.0;
- *ntick = 6;
-
-/* If it is more than 90 days days use 120 days (roughly 4 months). */
- } else if( mjdgap > 90.0 ) {
- mjdgap = 120.0;
- *ntick = 4;
-
-/* If it is more than 45 days days use 60 days (roughly 2 months). */
- } else if( mjdgap > 45.0 ) {
- mjdgap = 60.0;
- *ntick = 2;
-
-/* If it is more than 22 days days use 30 days (roughly one month). Use 3
- ten day divisions. */
- } else if( mjdgap > 22.0 ) {
- mjdgap = 30.0;
- *ntick = 3;
-
-/* If it is more than 12 days days use 15 days (roughly half a month). */
- } else if( mjdgap > 12.0 ) {
- mjdgap = 15.0;
- *ntick = 3;
-
-/* If it is more than 7.5 days days use 10 days, with 5 two-day divisions. */
- } else if( mjdgap > 7.5 ) {
- mjdgap = 10.0;
- *ntick = 5;
-
-/* If it is more than 4.5 days days use 5 days. */
- } else if( mjdgap > 4.5 ) {
- mjdgap = 5.0;
- *ntick = 5;
-
-/* If it is more than 3 days days use 4 days. */
- } else if( mjdgap > 3.0 ) {
- mjdgap = 4.0;
- *ntick = 4;
-
-/* If it is more than 1.5 days days use 2 days. */
- } else if( mjdgap > 1.5 ) {
- mjdgap = 2.0;
- *ntick = 2;
-
-/* If it is more than 0.5 of a day use 1 day. */
- } else if( mjdgap > 0.5 ) {
- mjdgap = 1.0;
- *ntick = 4;
-
-/* Otherwise, if the format indicates that no time field is allowed,
- use 1 day. */
- } else if( ndp < 0 ) {
- mjdgap = 1.0;
- *ntick = 2;
-
-/* Otherwise (i.e. if the target gap is 0.5 day or less and the format
- indicates that a time field is allowed), choose a value which looks
- nice. */
- } else if( mjdgap >= 6.0/24.0 ) { /* 12 hours */
- mjdgap = 12.0/24.0;
- *ntick = 4;
-
- } else if( mjdgap >= 3.0/24.0 ) { /* 6 hours */
- mjdgap = 6.0/24.0;
- *ntick = 3;
-
- } else if( mjdgap >= 1.0/24.0 ) { /* 2 hours */
- mjdgap = 2.0/24.0;
- *ntick = 4;
-
- } else if( mjdgap >= 15.0/1440.0 ) { /* 30 minutes */
- mjdgap = 30.0/1440.0;
- *ntick = 3;
-
- } else if( mjdgap >= 5.0/1440.0 ) { /* 10 minutes */
- mjdgap = 10.0/1440.0;
- *ntick = 5;
-
- } else if( mjdgap >= 0.5/1440.0 ) { /* 1 minute */
- mjdgap = 1.0/1440.0;
- *ntick = 4;
-
- } else if( mjdgap >= 15.0/86400.0 ) { /* 30 seconds */
- mjdgap = 30.0/86400.0;
- *ntick = 3;
-
- } else if( mjdgap >= 5.0/86400.0 ) { /* 10 seconds */
- mjdgap = 10.0/86400.0;
- *ntick = 5;
-
- } else if( mjdgap >= 0.5/86400.0 ) { /* 1 second */
- mjdgap = 1.0/86400.0;
- *ntick = 4;
-
- } else { /* Less than 1 second */
- mjdgap = 86400.0*(*parent_gap)( this_frame, axis, mjdgap/86400.0, ntick, status );
-
- }
-
-/* Convert the MJD gap back into the system of the supplied TimeFrame. */
- xout[ 1 ] = xout[ 0 ] + mjdgap;
- astTran1( map, 2, xout, 0, xin );
- result = xin[ 1 ] - xin[ 0 ];
-
-/* Free resources */
- map = astAnnul( map );
-
-/* If no Mapping could be found, use the parent astGap method. */
- } else {
- result = (*parent_gap)( this_frame, axis, gap, ntick, status );
- }
- }
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) result = 0.0;
-
-/* Return the result. */
- return result;
-}
-
-static int GetActiveUnit( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetActiveUnit
-
-* Purpose:
-* Obtain the value of the ActiveUnit flag for a TimeFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* int GetActiveUnit( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* TimeFrame member function (over-rides the astGetActiveUnit protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns the value of the ActiveUnit flag for a
-* TimeFrame, which is always 1.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The value to use for the ActiveUnit flag (1).
-
-*/
- return 1;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a TimeFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* TimeFrame member function (over-rides the protected astGetAttrib
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a TimeFrame, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - This function uses one-based axis numbering so that it is
-* suitable for external (public) use.
-* - The returned string pointer may point at memory allocated
-* within the TimeFrame, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the TimeFrame. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstTimeFrame *this; /* Pointer to the TimeFrame structure */
- AstTimeScaleType ts; /* Time scale */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- char *new_attrib; /* Pointer value to new attribute name */
- const char *result; /* Pointer value to return */
- double dval; /* Attribute value */
- int len; /* Length of attrib string */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the TimeFrame structure. */
- this = (AstTimeFrame *) this_object;
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null-terminated string in an appropriate
- format. Set "result" to point at the result string. */
-
-/* First look for axis attributes defined by the Frame class. Since a
- TimeFrame has only 1 axis, we allow these attributes to be specified
- without a trailing "(axis)" string. */
- if ( !strcmp( attrib, "direction" ) ||
- !strcmp( attrib, "bottom" ) ||
- !strcmp( attrib, "top" ) ||
- !strcmp( attrib, "format" ) ||
- !strcmp( attrib, "label" ) ||
- !strcmp( attrib, "symbol" ) ||
- !strcmp( attrib, "unit" ) ) {
-
-/* Create a new attribute name from the original by appending the string
- "(1)" and then use the parent GetAttrib method. */
- new_attrib = astMalloc( len + 4 );
- if( new_attrib ) {
- memcpy( new_attrib, attrib, len );
- memcpy( new_attrib + len, "(1)", 4 );
- result = (*parent_getattrib)( this_object, new_attrib, status );
- new_attrib = astFree( new_attrib );
- }
-
-/* AlignTimeScale. */
-/* --------------- */
-/* Obtain the AlignTimeScale code and convert to a string. */
- } else if ( !strcmp( attrib, "aligntimescale" ) ) {
- ts = astGetAlignTimeScale( this );
- if ( astOK ) {
- result = TimeScaleString( ts, status );
-
-/* Report an error if the value was not recognised. */
- if ( !result ) {
- astError( AST__SCSIN,
- "astGetAttrib(%s): Corrupt %s contains invalid AlignTimeScale "
- "identification code (%d).", status, astGetClass( this ),
- astGetClass( this ), (int) ts );
- }
- }
-
-/* ClockLat. */
-/* ------- */
- } else if ( !strcmp( attrib, "clocklat" ) ) {
- result = astGetAttrib( this, "obslat" );
-
-/* ClockLon. */
-/* ------- */
- } else if ( !strcmp( attrib, "clocklon" ) ) {
- result = astGetAttrib( this, "obslon" );
-
-/* TimeOrigin. */
-/* ----------- */
- } else if ( !strcmp( attrib, "timeorigin" ) ) {
- dval = GetTimeOriginCur( this, status );
- if( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* LTOffset. */
-/* --------- */
- } else if ( !strcmp( attrib, "ltoffset" ) ) {
- dval = astGetLTOffset( this );
- if( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* TimeScale. */
-/* ---------- */
-/* Obtain the TimeScale code and convert to a string. */
- } else if ( !strcmp( attrib, "timescale" ) ) {
- ts = astGetTimeScale( this );
- if ( astOK ) {
- result = TimeScaleString( ts, status );
-
-/* Report an error if the value was not recognised. */
- if ( !result ) {
- astError( AST__SCSIN,
- "astGetAttrib(%s): Corrupt %s contains invalid TimeScale "
- "identification code (%d).", status, astGetClass( this ),
- astGetClass( this ), (int) ts );
- }
- }
-
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-}
-
-static double GetTimeOriginCur( AstTimeFrame *this, int *status ) {
-/*
-* Name:
-* GetTimeOriginCur
-
-* Purpose:
-* Obtain the TimeOrigin attribute for a TimeFrame in current units.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* double GetTimeOriginCur( AstTimeFrame *this, int *status )
-
-* Class Membership:
-* TimeFrame virtual function
-
-* Description:
-* This function returns the TimeOrigin attribute for a TimeFrame, in
-* the current units of the TimeFrame. The protected astGetTimeOrigin
-* method can be used to obtain the time origin in the default units of
-* the TimeFrame's System.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The TimeOrigin value, in the units, system and timescale specified
-* by the current values of the Unit, System and TimeScale attributes
-* within "this".
-
-* Notes:
-* - AST__BAD is returned if this function is invoked with
-* the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstMapping *map;
- const char *cur;
- const char *def;
- double result;
- double defval;
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get the value in the default units */
- result = astGetTimeOrigin( this );
-
-/* If non-zero we convert to the current units.*/
- if( result != 0.0 && result != AST__BAD ) {
-
-/* Get the default units for the TimeFrame's System. */
- def = DefUnit( astGetSystem( this ), "astGetTimeOrigin", "TimeFrame", status );
-
-/* Get the current units from the TimeFrame. */
- cur = astGetUnit( this, 0 );
-
-/* If the units differ, get a Mapping from default to current units. */
- if( cur && def ){
- if( strcmp( cur, def ) ) {
- map = astUnitMapper( def, cur, NULL, NULL );
-
-/* Report an error if the units are incompatible. */
- if( !map ) {
- astError( AST__BADUN, "%s(%s): The current units (%s) are not suitable "
- "for a TimeFrame.", status, "astGetTimeOrigin", astGetClass( this ),
- cur );
-
-/* Otherwise, transform the stored origin value.*/
- } else {
- defval = result;
- astTran1( map, 1, &defval, 1, &result );
- map = astAnnul( map );
- }
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetDomain( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetDomain
-
-* Purpose:
-* Obtain a pointer to the Domain attribute string for a TimeFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* const char *GetDomain( AstFrame *this, int *status )
-
-* Class Membership:
-* TimeFrame member function (over-rides the astGetDomain protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a pointer to the Domain attribute string
-* for a TimeFrame.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a constant null-terminated string containing the
-* Domain value.
-
-* Notes:
-* - The returned pointer or the string it refers to may become
-* invalid following further invocation of this function or
-* modification of the TimeFrame.
-* - A NULL pointer is returned if this function is invoked with
-* the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstTimeFrame *this; /* Pointer to TimeFrame structure */
- const char *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the TimeFrame structure. */
- this = (AstTimeFrame *) this_frame;
-
-/* If a Domain attribute string has been set, invoke the parent method
- to obtain a pointer to it. */
- if ( astTestDomain( this ) ) {
- result = (*parent_getdomain)( this_frame, status );
-
-/* Otherwise, provide a pointer to a suitable default string. */
- } else {
- result = "TIME";
- }
-
-/* Return the result. */
- return result;
-}
-
-static double GetEpoch( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetEpoch
-
-* Purpose:
-* Get a value for the Epoch attribute of a TimeFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* double GetEpoch( AstFrame *this, int *status )
-
-* Class Membership:
-* TimeFrame member function (over-rides the astGetEpoch method
-* inherited from the Frame class).
-
-* Description:
-* This function returns a value for the Epoch attribute of a
-* TimeFrame.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Epoch attribute value.
-
-* Notes:
-* - A value of AST__BAD will be returned if this function is invoked
-* with the global error status set or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstMapping *map;
- AstSystemType sys;
- AstTimeFrame *this;
- AstTimeScaleType ts;
- const char *u;
- double oldval;
- double result;
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the TimeFrame structure. */
- this = (AstTimeFrame *) this_frame;
-
-/* If an Epoch attribute value has been set, invoke the parent method
- to obtain it. */
- if ( astTestEpoch( this ) ) {
- result = (*parent_getepoch)( this_frame, status );
-
-/* Otherwise, if the TimeOrigin value is set in the TimeFrame,
- return it, converted to an absolute TDB MJD. */
- } else if( astTestTimeOrigin( this ) ){
-
-/* Get the required properties of the TimeFrame. */
- oldval = astGetTimeOrigin( this );
- ts = astGetTimeScale( this );
- sys = astGetSystem( this );
- u = DefUnit( sys, "astGetEpoch", "TimeFrame", status );
-
-/* Epoch is defined as a TDB value. If the timescale is stored in an angular
- timescale such as UT1, then we would not normally be able to convert it
- to TDB since knowledge of DUT1 is required (the difference between UTC
- and UT1). Since the default Epoch value is not critical we assume a DUT1
- value of zero in this case. We first map the stored value to UT1 then
- from UTC to TDB (using the approximation UT1 == UTC). */
- if( ts == AST__UT1 || ts == AST__GMST ||
- ts == AST__LAST || ts == AST__LMST ) {
- map = MakeMap( this, sys, AST__MJD, ts, AST__UT1, 0.0, 0.0, u,
- "d", "astGetEpoch", status );
- if( map ) {
- astTran1( map, 1, &oldval, 1, &result );
- map = astAnnul( map );
-
-/* Update the values to use when converting to TBD. */
- oldval = result;
- ts = AST__UTC;
- sys = AST__MJD;
- u = "d";
-
- } else if( astOK ) {
- astError( AST__INTER, "astGetEpoch(%s): No Mapping from %s to "
- "UT1 (AST internal programming error).", status,
- astGetClass( this ), TimeScaleString( ts, status ) );
- }
- }
-
-/* Now convert to TDB */
- map = MakeMap( this, sys, AST__MJD, ts, AST__TDB, 0.0, 0.0, u,
- "d", "astGetEpoch", status );
- if( map ) {
- oldval = astGetTimeOrigin( this );
- astTran1( map, 1, &oldval, 1, &result );
- map = astAnnul( map );
-
- } else if( astOK ) {
- astError( AST__INTER, "astGetEpoch(%s): No Mapping from %s to "
- "TDB (AST internal programming error).", status,
- astGetClass( this ), TimeScaleString( ts, status ) );
- }
-
-/* Otherwise, return the default Epoch value from the parent Frame. */
- } else {
- result = (*parent_getepoch)( this_frame, status );
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetLabel( AstFrame *this, int axis, int *status ) {
-/*
-* Name:
-* GetLabel
-
-* Purpose:
-* Access the Label string for a TimeFrame axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* const char *GetLabel( AstFrame *this, int axis, int *status )
-
-* Class Membership:
-* TimeFrame member function (over-rides the astGetLabel method inherited
-* from the Frame class).
-
-* Description:
-* This function returns a pointer to the Label string for a specified axis
-* of a TimeFrame.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-* axis
-* Axis index (zero-based) identifying the axis for which information is
-* required.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a constant null-terminated character string containing the
-* requested information.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstMapping *map; /* Mapping between units */
- AstSystemType system; /* Code identifying type of time coordinates */
- char *new_lab; /* Modified label string */
- const char *fmt; /* Pointer to original Format string */
- const char *result; /* Pointer to label string */
- double ltoff; /* Local Time offset from UTC (hours) */
- double orig; /* Time origin (seconds) */
- int fmtSet; /* Was Format attribute set? */
- int ndp; /* Number of decimal places for seconds field */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Initialise. */
- result = NULL;
-
-/* Validate the axis index. */
- astValidateAxis( this, axis, "astGetLabel" );
-
-/* Check if a value has been set for the required axis label string. If so,
- invoke the parent astGetLabel method to obtain a pointer to it. */
- if ( astTestLabel( this, axis ) ) {
- result = (*parent_getlabel)( this, axis, status );
-
-/* Otherwise, provide a suitable default label. */
- } else {
-
-/* If the Format attribute indicates that time values will be formatted
- as dates, then choose a suitable label. */
- fmt = astGetFormat( this, 0 );
- if( DateFormat( fmt, &ndp, NULL, status ) ) {
- result = ( ndp >= 0 ) ? "Date/Time" : "Date";
-
-/* Otherwise, identify the time coordinate system described by the
- TimeFrame. */
- } else {
- system = astGetSystem( this );
-
-/* If OK, supply a pointer to a suitable default label string. */
- if ( astOK ) {
- result = strcpy( getlabel_buff, SystemLabel( system, status ) );
- getlabel_buff[ 0 ] = toupper( getlabel_buff[ 0 ] );
-
-/* If a non-zero TimeOrigin has been specified, include the offset now as a
- date/time string. */
- orig = astGetTimeOrigin( this );
- if( orig != 0.0 ) {
-
-/* Save the Format attribute, and then temporarily set it to give a date/time
- string. */
- fmt = astStore( NULL, fmt, strlen( fmt ) + 1 );
- fmtSet = astTestFormat( this, 0 );
- astSetFormat( this, 0, "iso.0" );
-
-/* Format the origin value as an absolute time and append it to the
- returned label string. Note, the origin always corresponds to a
- TimeFrame axis value of zero. */
- sprintf( getlabel_buff + strlen( getlabel_buff ), " offset from %s",
- astFormat( this, 0, 0.0 ) );
-
-/* Re-instate the original Format value. */
- if( fmtSet ) {
- astSetFormat( this, 0, fmt );
- } else {
- astClearFormat( this, 0 );
- }
-
-/* Free the memory holding the copy of the format string. */
- fmt = astFree( (char *) fmt );
-
-/* If the time of day is "00:00:00", remove it. */
- if( !strcmp( getlabel_buff + strlen( getlabel_buff ) - 8, "00:00:00" ) ) {
- getlabel_buff[ strlen( getlabel_buff ) - 8 ] = 0;
- }
- }
-
-/* Modify this default to take account of the current value of the Unit
- attribute, if set. */
- if( astTestUnit( this, axis ) ) {
-
-/* Find a Mapping from the default Units for the current System, to the
- units indicated by the Unit attribute. This Mapping is used to modify
- the existing default label appropriately. For instance, if the default
- units is "yr" and the actual units is "log(yr)", then the default label
- of "Julian epoch" is changed to "log( Julian epoch )". */
- map = astUnitMapper( DefUnit( system, "astGetLabel",
- astGetClass( this ), status ),
- astGetUnit( this, axis ), result,
- &new_lab );
- if( new_lab ) {
- result = strcpy( getlabel_buff, new_lab );
- new_lab = astFree( new_lab );
- }
-
-/* Annul the unused Mapping. */
- if( map ) map = astAnnul( map );
- }
- }
- }
-
-/* If the time is a Local Time, indicate the offset from UTC. */
- if( astGetTimeScale( this ) == AST__LT ) {
- ltoff = astGetLTOffset( this );
- if( ltoff >= 0.0 ) {
- sprintf( getlabel_buff, "%s (UTC+%g)", result, ltoff );
- } else {
- sprintf( getlabel_buff, "%s (UTC-%g)", result, -ltoff );
- }
- result = getlabel_buff;
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetSymbol( AstFrame *this, int axis, int *status ) {
-/*
-* Name:
-* GetSymbol
-
-* Purpose:
-* Obtain a pointer to the Symbol string for a TimeFrame axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* const char *GetSymbol( AstFrame *this, int axis, int *status )
-
-* Class Membership:
-* TimeFrame member function (over-rides the astGetSymbol method inherited
-* from the Frame class).
-
-* Description:
-* This function returns a pointer to the Symbol string for a specified axis
-* of a TimeFrame.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-* axis
-* Axis index (zero-based) identifying the axis for which information is
-* required.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a constant null-terminated character string containing the
-* requested information.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstMapping *map; /* Mapping between units */
- AstSystemType system; /* Code identifying type of sky coordinates */
- char *new_sym; /* Modified symbol string */
- const char *result; /* Pointer to symbol string */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Initialise. */
- result = NULL;
-
-/* Validate the axis index. */
- astValidateAxis( this, axis, "astGetSymbol" );
-
-/* Check if a value has been set for the required axis symbol string. If so,
- invoke the parent astGetSymbol method to obtain a pointer to it. */
- if ( astTestSymbol( this, axis ) ) {
- result = (*parent_getsymbol)( this, axis, status );
-
-/* Otherwise, identify the sky coordinate system described by the TimeFrame. */
- } else {
- system = astGetSystem( this );
-
-/* If OK, supply a pointer to a suitable default Symbol string. */
- if ( astOK ) {
-
- if( system == AST__MJD ) {
- result = "MJD";
- } else if( system == AST__JD ) {
- result = "JD";
- } else if( system == AST__BEPOCH ) {
- result = "BEP";
- } else if( system == AST__JEPOCH ) {
- result = "JEP";
-
-/* Report an error if the coordinate system was not recognised. */
- } else {
- astError( AST__SCSIN, "astGetSymbol(%s): Corrupt %s contains "
- "invalid System identification code (%d).", status,
- astGetClass( this ), astGetClass( this ), (int) system );
- }
-
-/* Modify this default to take account of the current value of the Unit
- attribute, if set. */
- if( astTestUnit( this, axis ) ) {
-
-/* Find a Mapping from the default Units for the current System, to the
- units indicated by the Unit attribute. This Mapping is used to modify
- the existing default symbol appropriately. For instance, if the default
- units is "yr" and the actual units is "log(yr)", then the default symbol
- of "JEP" is changed to "log( JEP )". */
- map = astUnitMapper( DefUnit( system, "astGetSymbol",
- astGetClass( this ), status ),
- astGetUnit( this, axis ), result,
- &new_sym );
- if( new_sym ) {
- result = strcpy( getsymbol_buff, new_sym );
- new_sym = astFree( new_sym );
- }
-
-/* Annul the unused Mapping. */
- if( map ) map = astAnnul( map );
-
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstSystemType GetAlignSystem( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetAlignSystem
-
-* Purpose:
-* Obtain the AlignSystem attribute for a TimeFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "Specframe.h"
-* AstSystemType GetAlignSystem( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* TimeFrame member function (over-rides the astGetAlignSystem protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns the AlignSystem attribute for a TimeFrame.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The AlignSystem value.
-
-*/
-
-/* Local Variables: */
- AstTimeFrame *this; /* Pointer to TimeFrame structure */
- AstSystemType result; /* Value to return */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the TimeFrame structure. */
- this = (AstTimeFrame *) this_frame;
-
-/* If a AlignSystem attribute has been set, invoke the parent method to obtain
- it. */
- if ( astTestAlignSystem( this ) ) {
- result = (*parent_getalignsystem)( this_frame, status );
-
-/* Otherwise, provide a suitable default. */
- } else {
- result = AST__MJD;
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstTimeScaleType GetAlignTimeScale( AstTimeFrame *this, int *status ) {
-/*
-*+
-* Name:
-* astGetAlignTimeScale
-
-* Purpose:
-* Obtain the AlignTimeScale attribute for a TimeFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "timeframe.h"
-* AstTimeScaleType GetAlignTimeScale( AstTimeFrame *this )
-
-* Class Membership:
-* TimeFrame virtual function
-
-* Description:
-* This function returns the System attribute for a TimeFrame.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-
-* Returned Value:
-* The System value.
-
-* Notes:
-* - AST__BADTS is returned if this function is invoked with
-* the global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstTimeScaleType result;
- AstTimeScaleType ts;
-
-/* Initialise. */
- result = AST__BADTS;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If a value has been set, return it. */
- if( this->aligntimescale != AST__BADTS ) {
- result = this->aligntimescale;
-
-/* Otherwise, return a default depending on the current TimeScale value */
- } else {
- ts = astGetTimeScale( this );
- if ( ts == AST__UT1 || ts == AST__LAST || ts == AST__LMST || ts == AST__GMST ) {
- result = AST__UT1;
- } else {
- result = AST__TAI;
- }
-
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstSystemType GetSystem( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetSystem
-
-* Purpose:
-* Obtain the System attribute for a TimeFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* AstSystemType GetSystem( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* TimeFrame member function (over-rides the astGetSystem protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns the System attribute for a TimeFrame.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The System value.
-
-* Notes:
-* - AST__BADSYSTEM is returned if this function is invoked with
-* the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstTimeFrame *this; /* Pointer to TimeFrame structure */
- AstSystemType result; /* Value to return */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the TimeFrame structure. */
- this = (AstTimeFrame *) this_frame;
-
-/* If a System attribute has been set, invoke the parent method to obtain
- it. */
- if ( astTestSystem( this ) ) {
- result = (*parent_getsystem)( this_frame, status );
-
-/* Otherwise, provide a suitable default. */
- } else {
- result = AST__MJD;
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstTimeScaleType GetTimeScale( AstTimeFrame *this, int *status ) {
-/*
-*+
-* Name:
-* astGetTimeScale
-
-* Purpose:
-* Obtain the TimeScale attribute for a TimeFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "timeframe.h"
-* AstTimeScaleType GetTimeScale( AstTimeFrame *this )
-
-* Class Membership:
-* TimeFrame virtual function
-
-* Description:
-* This function returns the System attribute for a TimeFrame.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-
-* Returned Value:
-* The System value.
-
-* Notes:
-* - AST__BADTS is returned if this function is invoked with
-* the global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstTimeScaleType result;
-
-/* Initialise. */
- result = AST__BADTS;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If a value has been set, return it. */
- if( this->timescale != AST__BADTS ) {
- result = this->timescale;
-
-/* Otherwise, return a default depending on the current System value. */
- } else {
- if ( astGetSystem( this ) == AST__BEPOCH ) {
- result = AST__TT;
- } else {
- result = AST__TAI;
- }
-
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetTitle( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* GetTitle
-
-* Purpose:
-* Obtain a pointer to the Title string for a TimeFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* const char *GetTitle( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* TimeFrame member function (over-rides the astGetTitle method inherited
-* from the Frame class).
-
-* Description:
-* This function returns a pointer to the Title string for a TimeFrame.
-* A pointer to a suitable default string is returned if no Title value has
-* previously been set.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a null-terminated character string containing the requested
-* information.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstSystemType system; /* Code identifying type of coordinates */
- AstTimeScaleType ts; /* Time scale value */
- AstTimeFrame *this; /* Pointer to TimeFrame structure */
- const char *fmt; /* Pointer to original Format string */
- const char *result; /* Pointer to result string */
- double ltoff; /* Local Time offset from UTC (hours) */
- double orig; /* Time origin (seconds) */
- int fmtSet; /* Was Format attribute set? */
- int nc; /* No. of characters added */
- int ndp; /* Number of decimal places */
- int pos; /* Buffer position to enter text */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_frame);
-
-/* Initialise. */
- result = NULL;
-
-/* Obtain a pointer to the TimeFrame structure. */
- this = (AstTimeFrame *) this_frame;
-
-/* See if a Title string has been set. If so, use the parent astGetTitle
- method to obtain a pointer to it. */
- if ( astTestTitle( this ) ) {
- result = (*parent_gettitle)( this_frame, status );
-
-/* Otherwise, we will generate a default Title string. Obtain the values of the
- TimeFrame's attributes that determine what this string will be. */
- } else {
- system = astGetSystem( this );
- orig = GetTimeOriginCur( this, status );
- ts = astGetTimeScale( this );
- if ( astOK ) {
- result = gettitle_buff;
-
-/* Begin with the system's default label. */
- pos = sprintf( gettitle_buff, "%s", SystemLabel( system, status ) );
- gettitle_buff[ 0 ] = toupper( gettitle_buff[ 0 ] );
-
-/* Append the time scale code, if a value has been set for the timescale.
- Do not do this if the system is BEPOCH since BEPOCH can only be used
- with the TT timescale. */
- if( system != AST__BEPOCH && astTestTimeScale( this ) ) {
- nc = sprintf( gettitle_buff + pos, " [%s", TimeScaleString( ts, status ) );
- pos += nc;
-
-/* For Local Time, include the offset from UTC. */
- if( ts == AST__LT ) {
- ltoff = astGetLTOffset( this );
- if( ltoff >= 0.0 ) {
- nc = sprintf( gettitle_buff + pos, " (UTC+%g)", ltoff );
- } else {
- nc = sprintf( gettitle_buff + pos, " (UTC-%g)", -ltoff );
- }
- pos += nc;
- }
-
-/* Close the brackets. */
- nc = sprintf( gettitle_buff + pos, "]" );
- pos += nc;
- }
-
-/* If a non-zero offset has been specified, and the Format attribute does
- not indicate a date string (which is always absolute), include the
- offset now as a date/time string. */
- fmt = astGetFormat( this, 0 );
- if( orig != 0.0 && !DateFormat( fmt, &ndp, NULL, status ) ) {
-
-/* Save the Format attribute, and then temporarily set it to give a date/time
- string. */
- fmt = astStore( NULL, fmt, strlen( fmt ) + 1 );
- fmtSet = astTestFormat( this, 0 );
- astSetFormat( this, 0, "iso.0" );
-
-/* Format the origin value as an absolute time and append it to the
- returned title string. Note, the origin always corresponds to a
- TimeFrame axis value of zero. */
- nc = sprintf( gettitle_buff+pos, " offset from %s",
- astFormat( this, 0, 0.0 ) );
- pos += nc;
-
-/* Re-instate the original Format value. */
- if( fmtSet ) {
- astSetFormat( this, 0, fmt );
- } else {
- astClearFormat( this, 0 );
- }
-
-/* Free the Format string copy. */
- fmt = astFree( (char *) fmt );
-
- }
- }
- }
-
-/* If an error occurred, clear the returned pointer value. */
- if ( !astOK ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-static const char *GetUnit( AstFrame *this_frame, int axis, int *status ) {
-/*
-* Name:
-* GetUnit
-
-* Purpose:
-* Obtain a pointer to the Unit string for a TimeFrame's axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* const char *GetUnit( AstFrame *this_frame, int axis )
-
-* Class Membership:
-* TimeFrame member function (over-rides the astGetUnit method inherited
-* from the Frame class).
-
-* Description:
-* This function returns a pointer to the Unit string for a specified axis
-* of a TimeFrame. If the Unit attribute has not been set for the axis, a
-* pointer to a suitable default string is returned instead.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-* axis
-* The number of the axis (zero-based) for which information is required.
-
-* Returned Value:
-* A pointer to a null-terminated string containing the Unit value.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstTimeFrame *this; /* Pointer to the TimeFrame structure */
- AstSystemType system; /* The TimeFrame's System value */
- const char *result; /* Pointer value to return */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the TimeFrame structure. */
- this = (AstTimeFrame *) this_frame;
-
-/* Validate the axis index. */
- astValidateAxis( this, axis, "astGetUnit" );
-
-/* If a value has been set for the Unit attribute, use the parent
- GetUnit method to return a pointer to the required Unit string. */
- if( astTestUnit( this, axis ) ){
- result = (*parent_getunit)( this_frame, axis, status );
-
-/* Otherwise, identify the time coordinate system described by the
- TimeFrame. */
- } else {
- system = astGetSystem( this );
-
-/* Return a string describing the default units. */
- result = DefUnit( system, "astGetUnit", astGetClass( this ), status );
- }
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-void astInitTimeFrameVtab_( AstTimeFrameVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitTimeFrameVtab
-
-* Purpose:
-* Initialise a virtual function table for a TimeFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "timeframe.h"
-* void astInitTimeFrameVtab( AstTimeFrameVtab *vtab, const char *name )
-
-* Class Membership:
-* TimeFrame vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the TimeFrame class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstFrameVtab *frame; /* Pointer to Frame component of Vtab */
- AstMapping *map; /* Temporary Maping */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- double utc_epoch; /* Unix epoch as a UTC MJD */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitFrameVtab( (AstFrameVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsATimeFrame) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstFrameVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
-
- vtab->ClearAlignTimeScale = ClearAlignTimeScale;
- vtab->TestAlignTimeScale = TestAlignTimeScale;
- vtab->GetAlignTimeScale = GetAlignTimeScale;
- vtab->SetAlignTimeScale = SetAlignTimeScale;
-
- vtab->ClearTimeOrigin = ClearTimeOrigin;
- vtab->TestTimeOrigin = TestTimeOrigin;
- vtab->GetTimeOrigin = GetTimeOrigin;
- vtab->SetTimeOrigin = SetTimeOrigin;
-
- vtab->ClearLTOffset = ClearLTOffset;
- vtab->TestLTOffset = TestLTOffset;
- vtab->GetLTOffset = GetLTOffset;
- vtab->SetLTOffset = SetLTOffset;
-
- vtab->ClearTimeScale = ClearTimeScale;
- vtab->TestTimeScale = TestTimeScale;
- vtab->GetTimeScale = GetTimeScale;
- vtab->SetTimeScale = SetTimeScale;
-
- vtab->CurrentTime = CurrentTime;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- frame = (AstFrameVtab *) vtab;
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
- parent_getdomain = frame->GetDomain;
- frame->GetDomain = GetDomain;
-
- parent_getsystem = frame->GetSystem;
- frame->GetSystem = GetSystem;
- parent_setsystem = frame->SetSystem;
- frame->SetSystem = SetSystem;
- parent_clearsystem = frame->ClearSystem;
- frame->ClearSystem = ClearSystem;
-
- parent_getalignsystem = frame->GetAlignSystem;
- frame->GetAlignSystem = GetAlignSystem;
-
- parent_getlabel = frame->GetLabel;
- frame->GetLabel = GetLabel;
-
- parent_getsymbol = frame->GetSymbol;
- frame->GetSymbol = GetSymbol;
-
- parent_gettitle = frame->GetTitle;
- frame->GetTitle = GetTitle;
-
- parent_getepoch = frame->GetEpoch;
- frame->GetEpoch = GetEpoch;
-
- parent_getunit = frame->GetUnit;
- frame->GetUnit = GetUnit;
-
- parent_setunit = frame->SetUnit;
- frame->SetUnit = SetUnit;
-
- parent_match = frame->Match;
- frame->Match = Match;
-
- parent_overlay = frame->Overlay;
- frame->Overlay = Overlay;
-
- parent_subframe = frame->SubFrame;
- frame->SubFrame = SubFrame;
-
- parent_format = frame->Format;
- frame->Format = Format;
-
- parent_unformat = frame->Unformat;
- frame->Unformat = Unformat;
-
- parent_abbrev = frame->Abbrev;
- frame->Abbrev = Abbrev;
-
- parent_gap = frame->Gap;
- frame->Gap = Gap;
-
-/* Store replacement pointers for methods which will be over-ridden by new
- member functions implemented here. */
- frame->GetActiveUnit = GetActiveUnit;
- frame->TestActiveUnit = TestActiveUnit;
- frame->ValidateSystem = ValidateSystem;
- frame->SystemString = SystemString;
- frame->SystemCode = SystemCode;
-
-/* Declare the copy constructor, destructor and class dump
- function. */
- astSetDump( vtab, Dump, "TimeFrame",
- "Description of time coordinate system" );
-
-/* Convert the Unix Epoch (00:00:00 UTC 1 January 1970 AD) from UTC to TAI. */
- LOCK_MUTEX2
- map = MakeMap( NULL, AST__MJD, AST__MJD, AST__UTC, AST__TAI,
- 0.0, 0.0, "d", "d", "astInitTimeFrameVtab", status );
- utc_epoch = UNIX_EPOCH;
- astTran1( map, 1, &utc_epoch, 1, &tai_epoch );
- map = astAnnul( map );
- UNLOCK_MUTEX2
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static AstMapping *MakeMap( AstTimeFrame *this, AstSystemType sys1,
- AstSystemType sys2, AstTimeScaleType ts1,
- AstTimeScaleType ts2, double off1, double off2,
- const char *unit1, const char *unit2,
- const char *method, int *status ){
-/*
-* Name:
-* MakeMap
-
-* Purpose:
-* Make a Mapping between stated timescales and systems.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* AstMapping *MakeMap( AstTimeFrame *this, AstSystemType sys1,
-* AstSystemType sys2, AstTimeScaleType ts1,
-* AstTimeScaleType ts2, double off1, double off2,
-* const char *unit1, const char unit2,
-* const char *method, int *status )
-
-* Class Membership:
-* TimeFrame member function
-
-* Description:
-* This function creates a Mapping from a stated pair of System and
-* TimeScale to another stated pair.
-
-* Parameters:
-* this
-* A TimeFrame which specifies extra attributes (the clock position,
-* time zone, etc) for both input and output.
-* sys1
-* The input System.
-* sys2
-* The output System.
-* ts1
-* The input System.
-* ts2
-* The output System.
-* off1
-* The axis offset used with the input, in the defaults units
-* associated with "sys1".
-* off2
-* The axis offset used with the output, in the defaults units
-* associated with "sys2".
-* unit1
-* The input units.
-* unit2
-* The output units.
-* method
-* A string containing the method name to include in error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Mapping. NULL if the timescales were
-* incompatible.
-
-*/
-
-
-/* Local Variables: */
- AstMapping *result;
- AstMapping *tmap;
- AstMapping *tmap2;
- AstMapping *umap;
- AstMapping *umap1;
- AstMapping *umap2;
- AstTimeMap *timemap;
- const char *du;
- double args[ 4 ];
- double args_lt[ 1 ];
- double args_ut[ 1 ];
- double shift;
-
-/* Check the global error status. */
- result = NULL;
- if ( !astOK ) return result;
-
-/* If the timescales are equal... */
- if( ts1 == ts2 ) {
-
-/* and the time systems are equal... */
- if( sys1 == sys2 ) {
-
-/* and the time offsets are equal... */
- if( EQUAL( off1, off2 ) ) {
-
-/* and the units are equal, return a UnitMap. */
- if( !strcmp( unit1, unit2 ) ) {
- result = (AstMapping *) astUnitMap( 1, "", status );
-
-/* If only the units differ, return the appropriate units Mapping. */
- } else {
- result = astUnitMapper( unit1, unit2, NULL, NULL );
- }
-
-/* If the time offsets differ... */
- } else {
-
-/* Transform the difference in offsets from the default units associated
- with the (common) system, to the units associated with the output. */
- shift = off1 - off2;
- du = DefUnit( sys1, method, "TimeFrame", status );
- if( du && strcmp( du, unit2 ) && shift != 0.0 ) {
- umap = astUnitMapper( DefUnit( sys1, method, "TimeFrame", status ),
- unit2, NULL, NULL );
- astTran1( umap, 1, &shift, 1, &shift );
- umap = astAnnul( umap );
- }
-
-/* Create a ShiftMap to apply the shift. */
- result = (AstMapping *) astShiftMap( 1, &shift, "", status );
-
-/* If the input and output units also differ, include the appropriate units
- Mapping. */
- if( strcmp( unit1, unit2 ) ) {
- umap = astUnitMapper( unit1, unit2, NULL, NULL );
- tmap = (AstMapping *) astCmpMap( umap, result, 1, "", status );
- umap = astAnnul( umap );
- (void) astAnnul( result );
- result = tmap;
- }
- }
- }
- }
-
-/* If the systems and/or timescales differ, we convert first from the
- input frame to a common frame, then from the common frame to the output
- frame. */
- if( !result ) {
-
-/* First, a Mapping from the input units to the default units for the
- input System (these are the units expected by the TimeMap conversions). */
- umap1 = astUnitMapper( unit1, DefUnit( sys1, method, "TimeFrame", status ),
- NULL, NULL );
-
-/* Now create a null TimeMap. */
- timemap = astTimeMap( 0, "", status );
-
-/* Store the input time offsets to use. They correspond to the same moment in
- time (the second is the MJD equivalent of the first). */
- args[ 0 ] = off1;
- args[ 1 ] = ToMJD( sys1, off1, status );
-
-/* Add a conversion from the input System to MJD. */
- if( sys1 == AST__JD ) {
- astTimeAdd( timemap, "JDTOMJD", args );
-
- } else if( sys1 == AST__JEPOCH ) {
- astTimeAdd( timemap, "JEPTOMJD", args );
-
- } else if( sys1 == AST__BEPOCH ) {
- astTimeAdd( timemap, "BEPTOMJD", args );
- }
-
-/* All timescale conversions except UTTOUTC and UTCTOUT require the input (MJD)
- offset as the first argument. In general, the observers longitude, latitude
- and altitude are also needed. The Frame class stores longitude values in a
- +ve eastwards sense, but the TimeMap class needs +ve westwards, so negate
- the longitude. */
- args[ 0 ] = args[ 1 ];
- args[ 1 ] = this ? -astGetObsLon( this ) : 0.0;
- args[ 2 ] = this ? astGetObsLat( this ) : 0.0;
- args[ 3 ] = this ? astGetObsAlt( this ) : 0.0;
-
-/* The UTTOUTC and UTCTOUT conversions required just the DUT1 value. */
- args_ut[ 0 ] = this ? astGetDut1( this ) : 0.0;
-
-/* The LTTOUTC and UTCTOLT conversions required just the time zone
- correction. */
- args_lt[ 0 ] = this ? astGetLTOffset( this ) : 0.0;
-
-/* If the input and output timescales differ, now add a conversion from the
- input timescale to TAI. */
- if( ts1 != ts2 ) {
- if( ts1 == AST__TAI ) {
-
- } else if( ts1 == AST__UTC ) {
- astTimeAdd( timemap, "UTCTOTAI", args );
-
- } else if( ts1 == AST__TT ) {
- astTimeAdd( timemap, "TTTOTAI", args );
-
- } else if( ts1 == AST__TDB ) {
- astTimeAdd( timemap, "TDBTOTT", args );
- astTimeAdd( timemap, "TTTOTAI", args );
-
- } else if( ts1 == AST__TCG ) {
- astTimeAdd( timemap, "TCGTOTT", args );
- astTimeAdd( timemap, "TTTOTAI", args );
-
- } else if( ts1 == AST__LT ) {
- astTimeAdd( timemap, "LTTOUTC", args_lt );
- astTimeAdd( timemap, "UTCTOTAI", args );
-
- } else if( ts1 == AST__TCB ) {
- astTimeAdd( timemap, "TCBTOTDB", args );
- astTimeAdd( timemap, "TDBTOTT", args );
- astTimeAdd( timemap, "TTTOTAI", args );
-
- } else if( ts1 == AST__UT1 ) {
- astTimeAdd( timemap, "UTTOUTC", args_ut );
- astTimeAdd( timemap, "UTCTOTAI", args );
-
- } else if( ts1 == AST__GMST ) {
- astTimeAdd( timemap, "GMSTTOUT", args );
- astTimeAdd( timemap, "UTTOUTC", args_ut );
- astTimeAdd( timemap, "UTCTOTAI", args );
-
- } else if( ts1 == AST__LAST ) {
- astTimeAdd( timemap, "LASTTOLMST", args );
- astTimeAdd( timemap, "LMSTTOGMST", args );
- astTimeAdd( timemap, "GMSTTOUT", args );
- astTimeAdd( timemap, "UTTOUTC", args_ut );
- astTimeAdd( timemap, "UTCTOTAI", args );
-
- } else if( ts1 == AST__LMST ) {
- astTimeAdd( timemap, "LMSTTOGMST", args );
- astTimeAdd( timemap, "GMSTTOUT", args );
- astTimeAdd( timemap, "UTTOUTC", args_ut );
- astTimeAdd( timemap, "UTCTOTAI", args );
- }
-
-/* Now add a conversion from TAI to the output timescale. */
- if( ts2 == AST__TAI ) {
-
- } else if( ts2 == AST__UTC ) {
- astTimeAdd( timemap, "TAITOUTC", args );
-
- } else if( ts2 == AST__TT ) {
- astTimeAdd( timemap, "TAITOTT", args );
-
- } else if( ts2 == AST__TDB ) {
- astTimeAdd( timemap, "TAITOTT", args );
- astTimeAdd( timemap, "TTTOTDB", args );
-
- } else if( ts2 == AST__TCG ) {
- astTimeAdd( timemap, "TAITOTT", args );
- astTimeAdd( timemap, "TTTOTCG", args );
-
- } else if( ts2 == AST__TCB ) {
- astTimeAdd( timemap, "TAITOTT", args );
- astTimeAdd( timemap, "TTTOTDB", args );
- astTimeAdd( timemap, "TDBTOTCB", args );
-
- } else if( ts2 == AST__UT1 ) {
- astTimeAdd( timemap, "TAITOUTC", args );
- astTimeAdd( timemap, "UTCTOUT", args_ut );
-
- } else if( ts2 == AST__GMST ) {
- astTimeAdd( timemap, "TAITOUTC", args );
- astTimeAdd( timemap, "UTCTOUT", args_ut );
- astTimeAdd( timemap, "UTTOGMST", args );
-
- } else if( ts2 == AST__LAST ) {
- astTimeAdd( timemap, "TAITOUTC", args );
- astTimeAdd( timemap, "UTCTOUT", args_ut );
- astTimeAdd( timemap, "UTTOGMST", args );
- astTimeAdd( timemap, "GMSTTOLMST", args );
- astTimeAdd( timemap, "LMSTTOLAST", args );
-
- } else if( ts2 == AST__LMST ) {
- astTimeAdd( timemap, "TAITOUTC", args );
- astTimeAdd( timemap, "UTCTOUT", args_ut );
- astTimeAdd( timemap, "UTTOGMST", args );
- astTimeAdd( timemap, "GMSTTOLMST", args );
-
- } else if( ts2 == AST__LT ) {
- astTimeAdd( timemap, "TAITOUTC", args );
- astTimeAdd( timemap, "UTCTOLT", args_lt );
-
- }
- }
-
-/* Add a conversion from MJD to the output System, if needed. */
- args[ 1 ] = off2;
- if( sys2 == AST__MJD ) {
- if( args[ 0 ] != off2 ) astTimeAdd( timemap, "MJDTOMJD", args );
-
- } else if( sys2 == AST__JD ) {
- astTimeAdd( timemap, "MJDTOJD", args );
-
- } else if( sys2 == AST__JEPOCH ) {
- astTimeAdd( timemap, "MJDTOJEP", args );
-
- } else if( sys2 == AST__BEPOCH ) {
- astTimeAdd( timemap, "MJDTOBEP", args );
- }
-
-/* Now, create a Mapping from the default units for the output System (these
- are the units produced by the TimeMap conversions) to the requested
- output units. */
- umap2 = astUnitMapper( DefUnit( sys2, method, "TimeFrame", status ), unit2,
- NULL, NULL );
-
-/* If OK, combine the Mappings in series. Note, umap1 and umap2 should
- always be non-NULL because the suitablity of units strings is checked
- within OriginSystem - called from within SetSystem. */
- if( umap1 && umap2 ) {
- tmap = (AstMapping *) astCmpMap( umap1, timemap, 1, "", status );
- tmap2 = (AstMapping *) astCmpMap( tmap, umap2, 1, "", status );
- tmap = astAnnul( tmap );
- result = astSimplify( tmap2 );
- tmap2 = astAnnul( tmap2 );
- }
-
-/* Free remaining resources */
- if( umap1 ) umap1 = astAnnul( umap1 );
- if( umap2 ) umap2 = astAnnul( umap2 );
- timemap = astAnnul( timemap );
- }
-
-/* Return NULL if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-
-}
-
-static int MakeTimeMapping( AstTimeFrame *target, AstTimeFrame *result,
- AstTimeFrame *align_frm, int report,
- AstMapping **map, int *status ) {
-/*
-* Name:
-* MakeTimeMapping
-
-* Purpose:
-* Generate a Mapping between two TimeFrames.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* int MakeTimeMapping( AstTimeFrame *target, AstTimeFrame *result,
-* AstTimeFrame *align_frm, int report,
-* AstMapping **map, int *status ) {
-
-* Class Membership:
-* TimeFrame member function.
-
-* Description:
-* This function takes two TimeFrames and generates a Mapping that
-* converts between them, taking account of differences in their
-* coordinate systems, offsets, timescales, units, etc.
-
-* Parameters:
-* target
-* Pointer to the first TimeFrame.
-* result
-* Pointer to the second TimeFrame.
-* align_frm
-* A TimeFrame defining the system and time scale in which to
-* align the target and result TimeFrames. The AlignSystem and
-* AlignTimeScale attributes are used for this purpose.
-* report
-* Should errors be reported if no match is possible? These reports
-* will describe why no match was possible.
-* map
-* Pointer to a location which is to receive a pointer to the
-* returned Mapping. The forward transformation of this Mapping
-* will convert from "target" coordinates to "result"
-* coordinates, and the inverse transformation will convert in
-* the opposite direction (all coordinate values in radians).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the Mapping could be generated, or zero if the two
-* TimeFrames are sufficiently un-related that no meaningful Mapping
-* can be produced (albeit an "unmeaningful" Mapping will be returned
-* in this case, which will need to be annulled).
-
-* Notes:
-* A value of zero is returned if this function is invoked with the
-* global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstMapping *map1; /* Intermediate Mapping */
- AstMapping *map2; /* Intermediate Mapping */
- AstMapping *tmap; /* Intermediate Mapping */
- AstSystemType sys1; /* Code to identify input system */
- AstSystemType sys2; /* Code to identify output system */
- AstTimeScaleType align_ts; /* Alignment time scale */
- AstTimeScaleType ts1; /* Input time scale */
- AstTimeScaleType ts2; /* Output time scale */
- const char *align_unit; /* Units used for alignment */
- const char *u1; /* Input target units */
- const char *u2; /* Output target units */
- double align_off; /* Axis offset */
- double ltoff1; /* Input axis Local Time offset */
- double ltoff2; /* Output axis Local Time offset */
- double off1; /* Input axis offset */
- double off2; /* Output axis offset */
- int arclk; /* Align->result depends on clock position? */
- int ardut; /* Align->result depends on Dut1? */
- int arlto; /* Align->result depends on LT offset? */
- int clkdiff; /* Do target and result clock positions differ? */
- int dut1diff; /* Do target and result Dut1 values differ? */
- int ltodiff; /* Do target and result LTOffset values differ? */
- int match; /* Mapping can be generated? */
- int taclk; /* Target->align depends on clock position? */
- int tadut; /* Target->align depends on Dut1? */
- int talto; /* Target->align depends on LT offset? */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Initialise the returned values. */
- match = 0;
- *map = NULL;
-
-/* Get the required properties of the input (target) TimeFrame */
- sys1 = astGetSystem( target );
- ts1 = astGetTimeScale( target );
- off1 = astGetTimeOrigin( target );
- u1 = astGetUnit( target, 0 );
- ltoff1= astGetLTOffset( target );
-
-/* Get the required properties of the output (result) TimeFrame */
- sys2 = astGetSystem( result );
- ts2 = astGetTimeScale( result );
- off2 = astGetTimeOrigin( result );
- u2 = astGetUnit( result, 0 );
- ltoff2= astGetLTOffset( result );
-
-/* Get the timescale in which alignment is to be performed. The alignment
- System does not matter since they all supported time systems are linearly
- related, and so the choice of alignment System has no effect on the total
- Mapping. We arbitrarily choose MJD as the alignment System (if needed). */
- align_ts = astGetAlignTimeScale( align_frm );
-
-/* The main difference between this function and the MakeMap function is
- that this function takes account of the requested alignment frame. But
- the alignment Frame only makes a difference to the overall Mapping if
- 1) the observer's positions are different in the target and result Frame,
- and 2) one or both of the Mappings to or from the alignment frame depends
- on the observer's position. If either of these 2 conditions is not met,
- then the alignment frame can be ignored, and the simpler MakeMap function
- can be called. See if the observer's positions differ. */
- clkdiff = ( astGetObsLon( target ) != astGetObsLon( result ) ||
- astGetObsLat( target ) != astGetObsLat( result ) ||
- astGetObsAlt( target ) != astGetObsAlt( result ) );
-
-/* See if the Mapping from target to alignment frame depends on the
- observer's position. */
- taclk = CLOCK_SCALE( ts1 ) || CLOCK_SCALE( align_ts );
-
-/* See if the Mapping from alignment to result frame depends on the
- observer's position. */
- arclk = CLOCK_SCALE( align_ts ) || CLOCK_SCALE( ts2 );
-
-/* In addition, the alignment frame is significant if either of the Mappings
- depends on DUT1 and the values of the DUT1 attribute are different for the
- two TimeFrames. */
- dut1diff = ( astGetDut1( target ) != astGetDut1( result ) );
- tadut = DUT1_SCALE( ts1 ) != DUT1_SCALE( align_ts );
- ardut = DUT1_SCALE( align_ts ) != DUT1_SCALE( ts2 );
-
-/* In addition, the alignment frame is significant if either of the Mappings
- depends on LTOffset and the values of the LTOffset attribute are different
- for the two TimeFrames. */
- ltodiff = ( ltoff1 != ltoff2 );
- talto = LTOFFSET_SCALE( ts1 ) != LTOFFSET_SCALE( align_ts );
- arlto = LTOFFSET_SCALE( align_ts ) != LTOFFSET_SCALE( ts2 );
-
-/* If the alignment frame can be ignored, use MakeMap */
- if( ( !clkdiff || !( taclk || arclk ) ) &&
- ( !ltodiff || !( talto || arlto ) ) &&
- ( !dut1diff || !( tadut || ardut ) ) ) {
- *map = MakeMap( target, sys1, sys2, ts1, ts2, off1, off2, u1, u2,
- "astSubFrame", status );
- if( *map ) match = 1;
-
-/* Otherwise, we create the Mapping in two parts; first a Mapping from
- the target Frame to the alignment Frame (using the target clock, dut1
- and ltoffset), then a Mapping from the alignment Frame to the results
- Frame (using the result clock, dut1 and ltoffset). */
- } else {
-
-/* Create a Mapping from target units/system/timescale/offset to MJD in
- the alignment timescale with default units and offset equal to the MJD
- equivalent of the target offset. */
- align_off = ToMJD( sys1, off1, status );
- align_unit = DefUnit( AST__MJD, "MakeTimeMap", "TimeFrame", status );
- map1 = MakeMap( target, sys1, AST__MJD, ts1, align_ts, off1, align_off,
- u1, align_unit, "MakeTimeMap", status );
-
-/* Report an error if the timescales were incompatible. */
- if( !map1 ){
- match = 0;
- if( report && astOK ) {
- astError( AST__INCTS, "astMatch(%s): Alignment in requested "
- "timescale (%s) is not possible since one or both of the "
- "TimeFrames being aligned refer to the %s timescale.", status,
- astGetClass( target ), TimeScaleString( align_ts, status ),
- TimeScaleString( ts1, status ) );
- }
- }
-
-/* We now create a Mapping that converts from the alignment System (MJD),
- TimeScale and offset to the result coordinate system. */
- map2 = MakeMap( result, AST__MJD, sys2, align_ts, ts2, align_off, off2,
- align_unit, u2, "MakeTimeMap", status );
-
-/* Report an error if the timescales were incompatible. */
- if( !map2 ){
- match = 0;
- if( report && astOK ) {
- astError( AST__INCTS, "astMatch(%s): Alignment in requested "
- "timescale (%s) is not possible since one or both of the "
- "TimeFrames being aligned refer to the %s timescale.", status,
- astGetClass( result ), TimeScaleString( align_ts, status ),
- TimeScaleString( ts2, status ) );
- }
- }
-
-/* Combine these two Mappings. */
- if( map1 && map2 ) {
- match = 1;
- tmap = (AstMapping *) astCmpMap( map1, map2, 1, "", status );
- *map = astSimplify( tmap );
- tmap = astAnnul( tmap );
- }
-
-/* Free resources. */
- if( map1 ) map1 = astAnnul( map1 );
- if( map2 ) map2 = astAnnul( map2 );
- }
-
-/* If an error occurred, annul the returned Mapping and clear the returned
- values. */
- if ( !astOK ) {
- *map = astAnnul( *map );
- match = 0;
- }
-
-/* Return the result. */
- return match;
-}
-
-static int Match( AstFrame *template_frame, AstFrame *target,
- int **template_axes, int **target_axes, AstMapping **map,
- AstFrame **result, int *status ) {
-/*
-* Name:
-* Match
-
-* Purpose:
-* Determine if conversion is possible between two coordinate systems.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* int Match( AstFrame *template, AstFrame *target,
-* int **template_axes, int **target_axes,
-* AstMapping **map, AstFrame **result, int *status )
-
-* Class Membership:
-* TimeFrame member function (over-rides the protected astMatch method
-* inherited from the Frame class).
-
-* Description:
-* This function matches a "template" TimeFrame to a "target" Frame and
-* determines whether it is possible to convert coordinates between them.
-* If it is, a mapping that performs the transformation is returned along
-* with a new Frame that describes the coordinate system that results when
-* this mapping is applied to the "target" coordinate system. In addition,
-* information is returned to allow the axes in this "result" Frame to be
-* associated with the corresponding axes in the "target" and "template"
-* Frames from which they are derived.
-
-* Parameters:
-* template
-* Pointer to the template TimeFrame. This describes the coordinate
-* system (or set of possible coordinate systems) into which we wish to
-* convert our coordinates.
-* target
-* Pointer to the target Frame. This describes the coordinate system in
-* which we already have coordinates.
-* template_axes
-* Address of a location where a pointer to int will be returned if the
-* requested coordinate conversion is possible. This pointer will point
-* at a dynamically allocated array of integers with one element for each
-* axis of the "result" Frame (see below). It must be freed by the caller
-* (using astFree) when no longer required.
-*
-* For each axis in the result Frame, the corresponding element of this
-* array will return the index of the template TimeFrame axis from
-* which it is derived. If it is not derived from any template
-* TimeFrame axis, a value of -1 will be returned instead.
-* target_axes
-* Address of a location where a pointer to int will be returned if the
-* requested coordinate conversion is possible. This pointer will point
-* at a dynamically allocated array of integers with one element for each
-* axis of the "result" Frame (see below). It must be freed by the caller
-* (using astFree) when no longer required.
-*
-* For each axis in the result Frame, the corresponding element of this
-* array will return the index of the target Frame axis from which it
-* is derived. If it is not derived from any target Frame axis, a value
-* of -1 will be returned instead.
-* map
-* Address of a location where a pointer to a new Mapping will be
-* returned if the requested coordinate conversion is possible. If
-* returned, the forward transformation of this Mapping may be used to
-* convert coordinates between the "target" Frame and the "result"
-* Frame (see below) and the inverse transformation will convert in the
-* opposite direction.
-* result
-* Address of a location where a pointer to a new Frame will be returned
-* if the requested coordinate conversion is possible. If returned, this
-* Frame describes the coordinate system that results from applying the
-* returned Mapping (above) to the "target" coordinate system. In
-* general, this Frame will combine attributes from (and will therefore
-* be more specific than) both the target and the template Frames. In
-* particular, when the template allows the possibility of transformaing
-* to any one of a set of alternative coordinate systems, the "result"
-* Frame will indicate which of the alternatives was used.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if the requested coordinate conversion is
-* possible. Otherwise zero is returned (this will not in itself result in
-* an error condition).
-
-* Notes:
-* - A value of zero will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-
-* Implementation Notes:
-* This implementation addresses the matching of a TimeFrame class
-* object to any other class of Frame. A TimeFrame will match any class
-* of TimeFrame (i.e. possibly from a derived class) but will not match
-* a less specialised class of Frame.
-*/
-
- AstFrame *frame0; /* Pointer to Frame underlying axis 0 */
- AstTimeFrame *template; /* Pointer to template TimeFrame structure */
- int iaxis0; /* Axis index underlying axis 0 */
- int iaxis; /* Axis index */
- int match; /* Coordinate conversion possible? */
- int target_axis0; /* Index of TimeFrame axis in the target */
- int target_naxes; /* Number of target axes */
-
-/* Initialise the returned values. */
- *template_axes = NULL;
- *target_axes = NULL;
- *map = NULL;
- *result = NULL;
- match = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return match;
-
-/* Obtain a pointer to the template TimeFrame structure. */
- template = (AstTimeFrame *) template_frame;
-
-/* Obtain the number of axes in the target Frame. */
- target_naxes = astGetNaxes( target );
-
-/* The first criterion for a match is that the template matches as a
- Frame class object. This ensures that the number of axes (1) and
- domain, etc. of the target Frame are suitable. Invoke the parent
- "astMatch" method to verify this. */
- match = (*parent_match)( template_frame, target,
- template_axes, target_axes, map, result, status );
-
-/* If a match was found, annul the returned objects, which are not
- needed, but keep the memory allocated for the axis association
- arrays, which we will re-use. */
- if ( astOK && match ) {
- *map = astAnnul( *map );
- *result = astAnnul( *result );
- }
-
-/* If OK so far, obtain pointers to the primary Frames which underlie
- all target axes. Stop when a TimeFrame axis is found. */
- if ( match && astOK ) {
- match = 0;
- for( iaxis = 0; iaxis < target_naxes; iaxis++ ) {
- astPrimaryFrame( target, iaxis, &frame0, &iaxis0 );
- if( astIsATimeFrame( frame0 ) ) {
- frame0 = astAnnul( frame0 );
- target_axis0 = iaxis;
- match = 1;
- break;
- } else {
- frame0 = astAnnul( frame0 );
- }
- }
- }
-
-/* Check at least one TimeFrame axis was found it the target. Store the
- axis associataions. */
- if( match && astOK ) {
- (*template_axes)[ 0 ] = 0;
- (*target_axes)[ 0 ] = target_axis0;
-
-/* Use the target's "astSubFrame" method to create a new Frame (the
- result Frame) with copies of the target axes in the required
- order. This process also overlays the template attributes on to the
- target Frame and returns a Mapping between the target and result
- Frames which effects the required coordinate conversion. */
- match = astSubFrame( target, template, 1, *target_axes, *template_axes,
- map, result );
- }
-
-/* If an error occurred, or conversion to the result Frame's coordinate
- system was not possible, then free all memory, annul the returned
- objects, and reset the returned value. */
- if ( !astOK || !match ) {
- *template_axes = astFree( *template_axes );
- *target_axes = astFree( *target_axes );
- if( *map ) *map = astAnnul( *map );
- if( *result ) *result = astAnnul( *result );
- match = 0;
- }
-
-/* Return the result. */
- return match;
-}
-
-static void OriginScale( AstTimeFrame *this, AstTimeScaleType newts,
- const char *method, int *status ){
-/*
-* Name:
-* OriginScale
-
-* Purpose:
-* Convert the TimeOrigin in a TimeFrame to a new timescale.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* void OriginScale( AstTimeFrame *this, AstTimeScaleType newts,
-* const char *method, int *status )
-
-* Class Membership:
-* TimeFrame member function
-
-* Description:
-* This function converts the value of the TimeOrigin attribute stored
-* within a supplied TimeFrame from the timescale currently associated
-* with the TimeFrame, to the new timescale indicated by "newts".
-
-* Parameters:
-* this
-* Point to the TimeFrame. On entry, the TimeOrigin value is
-* assumed to refer to the timescale given by the astGetTimeScale
-* method. On exit, the TimeOrigin value refers to the timescale
-* supplied in "newts". The TimeScale attribute of the TimeFrame
-* should then be modified in order to keep things consistent.
-* newts
-* The timescale to which the TimeOrigin value stored within "this"
-* should refer on exit.
-* method
-* Pointer to a string holding the name of the method to be
-* included in any error messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-
-/* Local Variables: */
- AstMapping *map;
- AstSystemType sys;
- AstTimeScaleType oldts;
- const char *u;
- double newval;
- double oldval;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Do nothing if the TimeOrigin attribute has not been assigned a value. */
- if( astTestTimeOrigin( this ) ) {
-
-/* Do nothing if the Scale will not change. */
- oldts = astGetTimeScale( this );
- if( newts != oldts ) {
-
-/* Create a Mapping to perform the TimeScale change. */
- sys = astGetSystem( this );
- u = DefUnit( sys, method, "TimeFrame", status ),
- map = MakeMap( this, sys, sys, oldts, newts, 0.0, 0.0, u, u,
- method, status );
-
-/* Use the Mapping to convert the stored TimeOrigin value. */
- if( map ) {
- oldval = astGetTimeOrigin( this );
- astTran1( map, 1, &oldval, 1, &newval );
-
-/* Store the new value */
- astSetTimeOrigin( this, newval );
-
-/* Free resources */
- map = astAnnul( map );
-
- } else if( astOK ) {
- astError( AST__INCTS, "%s(%s): Cannot convert the TimeOrigin "
- "value to a different timescale because of "
- "incompatible time scales.", status, method,
- astGetClass( this ) );
- }
- }
- }
-}
-
-static void OriginSystem( AstTimeFrame *this, AstSystemType oldsys,
- const char *method, int *status ){
-/*
-* Name:
-* OriginSystem
-
-* Purpose:
-* Convert the TimeOrigin in a TimeFrame to a new System.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* void OriginSystem( AstTimeFrame *this, AstSystemType oldsys,
-* const char *method, int *status )
-
-* Class Membership:
-* TimeFrame member function
-
-* Description:
-* This function converts the value of the TimeOrigin attribute stored
-* within a supplied TimeFrame from its original System, etc, to the
-* System, etc, currently associated with the TimeFrame.
-
-* Parameters:
-* this
-* Point to the TimeFrame. On entry, the TimeOrigin value is
-* assumed to refer to the System given by "oldsys", etc. On exit, the
-* TimeOrigin value refers to the System returned by the astGetSystem
-* method, etc.
-* oldsys
-* The System to which the TimeOrigin value stored within "this"
-* refers on entry.
-* method
-* A string containing the method name for error messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstMapping *map;
- AstSystemType newsys;
- AstTimeScaleType ts;
- const char *oldu;
- const char *newu;
- double newval;
- double oldval;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Do nothing if the TimeOrigin attribute has not been assigned a value. */
- if( astTestTimeOrigin( this ) ) {
-
-/* Do nothing if the System has not changed. */
- newsys = astGetSystem( this );
- if( oldsys != newsys ) {
-
-/* Create a Mapping to perform the System change. */
- ts = astGetTimeScale( this );
- oldu = DefUnit( oldsys, method, "TimeFrame", status ),
- newu = DefUnit( newsys, method, "TimeFrame", status ),
- map = MakeMap( this, oldsys, newsys, ts, ts, 0.0, 0.0, oldu, newu,
- method, status );
-
-/* Use the Mapping to convert the stored TimeOrigin value. */
- if( map ) {
- oldval = astGetTimeOrigin( this );
- astTran1( map, 1, &oldval, 1, &newval );
-
-/* Store the new value */
- astSetTimeOrigin( this, newval );
-
-/* Free resources */
- map = astAnnul( map );
-
- } else if( astOK ) {
- astError( AST__INCTS, "%s(%s): Cannot convert the TimeOrigin "
- "value to a different System because of incompatible "
- "time scales.", status, method, astGetClass( this ) );
- }
- }
- }
-}
-
-static void Overlay( AstFrame *template, const int *template_axes,
- AstFrame *result, int *status ) {
-/*
-* Name:
-* Overlay
-
-* Purpose:
-* Overlay the attributes of a template TimeFrame on to another Frame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* void Overlay( AstFrame *template, const int *template_axes,
-* AstFrame *result, int *status )
-
-* Class Membership:
-* TimeFrame member function (over-rides the protected astOverlay method
-* inherited from the Frame class).
-
-* Description:
-* This function overlays attributes of a TimeFrame (the "template") on to
-* another Frame, so as to over-ride selected attributes of that second
-* Frame. Normally only those attributes which have been specifically set
-* in the template will be transferred. This implements a form of
-* defaulting, in which a Frame acquires attributes from the template, but
-* retains its original attributes (as the default) if new values have not
-* previously been explicitly set in the template.
-*
-* Note that if the result Frame is a TimeFrame and a change of time
-* coordinate system occurs as a result of overlaying its System
-* attribute, then some of its original attribute values may no
-* longer be appropriate (e.g. the Title, or attributes describing
-* its axes). In this case, these will be cleared before overlaying
-* any new values.
-
-* Parameters:
-* template
-* Pointer to the template TimeFrame, for which values should have been
-* explicitly set for any attribute which is to be transferred.
-* template_axes
-* Pointer to an array of int, with one element for each axis of the
-* "result" Frame (see below). For each axis in the result frame, the
-* corresponding element of this array should contain the (zero-based)
-* index of the template axis to which it corresponds. This array is used
-* to establish from which template axis any axis-dependent attributes
-* should be obtained.
-*
-* If any axis in the result Frame is not associated with a template
-* axis, the corresponding element of this array should be set to -1.
-*
-* If a NULL pointer is supplied, the template and result axis
-* indicies are assumed to be identical.
-* result
-* Pointer to the Frame which is to receive the new attribute values.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - In general, if the result Frame is not from the same class as the
-* template TimeFrame, or from a class derived from it, then attributes may
-* exist in the template TimeFrame which do not exist in the result Frame.
-* In this case, these attributes will not be transferred.
-*/
-
-
-/* Local Variables: */
- const char *new_class; /* Pointer to template class string */
- const char *old_class; /* Pointer to result class string */
- const char *method; /* Pointer to method string */
- AstSystemType new_alignsystem;/* Code identifying new alignment coords */
- AstSystemType new_system; /* Code identifying new cordinates */
- AstSystemType old_system; /* Code identifying old coordinates */
- int resetSystem; /* Was the template System value cleared? */
- int timeframe; /* Result Frame is a TimeFrame? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Initialise strings used in error messages. */
- new_class = astGetClass( template );
- old_class = astGetClass( result );
- method = "astOverlay";
-
-/* Get the old and new systems. */
- old_system = astGetSystem( result );
- new_system = astGetSystem( template );
-
-/* If the result Frame is a TimeFrame, we must test to see if overlaying its
- System attribute will change the type of coordinate system it describes.
- Determine the value of this attribute for the result and template
- TimeFrames. */
- resetSystem = 0;
- timeframe = astIsATimeFrame( result );
- if( timeframe ) {
-
-/* If the coordinate system will change, any value already set for the result
- TimeFrame's Title, etc, will no longer be appropriate, so clear it. */
- if ( new_system != old_system ) {
- astClearTitle( result );
- astClearLabel( result, 0 );
- astClearSymbol( result, 0 );
- }
-
-/* If the result Frame is not a TimeFrame, we must temporarily clear the
- System and AlignSystem values since the values used by this class are only
- appropriate to this class. */
- } else {
- if( astTestSystem( template ) ) {
- astClearSystem( template );
-
- new_alignsystem = astGetAlignSystem( template );
- astClearAlignSystem( template );
-
- resetSystem = 1;
- }
- }
-
-/* Invoke the parent class astOverlay method to transfer attributes inherited
- from the parent class. */
- (*parent_overlay)( template, template_axes, result, status );
-
-/* Reset the System and AlignSystem values if necessary */
- if( resetSystem ) {
- astSetSystem( template, new_system );
- astSetAlignSystem( template, new_alignsystem );
- }
-
-/* Check if the result Frame is a TimeFrame or from a class derived from
- TimeFrame. If not, we cannot transfer TimeFrame attributes to it as it is
- insufficiently specialised. In this case simply omit these attributes. */
- if ( timeframe && astOK ) {
-
-/* Define macros that test whether an attribute is set in the template and,
- if so, transfers its value to the result. */
-#define OVERLAY(attribute) \
- if ( astTest##attribute( template ) ) { \
- astSet##attribute( result, astGet##attribute( template ) ); \
- }
-
-/* Use the macro to transfer each TimeFrame attribute in turn. Note,
- SourceVRF must be overlayed before SourceVel. Otherwise the stored value
- for SourceVel would be changed from the default SourceVRF to the specified
- SourceVRF when SourceVRF was overlayed. */
- OVERLAY(AlignTimeScale)
- OVERLAY(LTOffset)
- OVERLAY(TimeOrigin)
- OVERLAY(TimeScale)
- }
-
-/* Undefine macros local to this function. */
-#undef OVERLAY
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a TimeFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* void SetAttrib( AstObject *this, const char *setting, int *status )
-
-* Class Membership:
-* TimeFrame member function (extends the astSetAttrib method inherited from
-* the Mapping class).
-
-* Description:
-* This function assigns an attribute value for a TimeFrame, the attribute
-* and its value being specified by means of a string of the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in lower
-* case with no white space present. The value to the right of the "="
-* should be a suitable textual representation of the value to be assigned
-* and this will be interpreted according to the attribute's data type.
-* White space surrounding the value is only significant for string
-* attributes.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-* setting
-* Pointer to a null terminated string specifying the new attribute
-* value.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This protected method is intended to be invoked by the Object astSet
-* method and makes additional attributes accessible to it.
-*/
-
-/* Local Vaiables: */
- AstTimeFrame *this; /* Pointer to the TimeFrame structure */
- AstTimeScaleType ts; /* time scale type code */
- char *a; /* Pointer to next character */
- char *new_setting; /* Pointer value to new attribute setting */
- double dval; /* Double atribute value */
- double mjd; /* MJD read from setting */
- double origin; /* TimeOrigin value */
- int len; /* Length of setting string */
- int namelen; /* Length of attribute name in setting */
- int nc; /* Number of characters read by astSscanf */
- int off; /* Offset of attribute value */
- int rep; /* Original error reporting state */
- int ulen; /* Used length of setting string */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the TimeFrame structure. */
- this = (AstTimeFrame *) this_object;
-
-/* Obtain the length of the setting string. */
- len = strlen( setting );
-
-/* Obtain the used length of the setting string. */
- ulen = astChrLen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse the
- setting string and extract the attribute value (or an offset to it in the
- case of string values). In each case, use the value set in "nc" to check
- that the entire string was matched. Once a value has been obtained, use the
- appropriate method to set it. */
-
-/* First look for axis attributes defined by the Frame class. Since a
- TimeFrame has only 1 axis, we allow these attributes to be specified
- without a trailing "(axis)" string. */
- if ( !strncmp( setting, "direction=", 10 ) ||
- !strncmp( setting, "bottom=", 7 ) ||
- !strncmp( setting, "top=", 4 ) ||
- !strncmp( setting, "format=", 7 ) ||
- !strncmp( setting, "label=", 6 ) ||
- !strncmp( setting, "symbol=", 7 ) ||
- !strncmp( setting, "unit=", 5 ) ) {
-
-/* Create a new setting string from the original by appending the string
- "(1)" to the end of the attribute name and then use the parent SetAttrib
- method. */
- new_setting = astMalloc( len + 4 );
- if( new_setting ) {
- memcpy( new_setting, setting, len + 1 );
- a = strchr( new_setting, '=' );
- namelen = a - new_setting;
- memcpy( a, "(1)", 4 );
- a += 3;
- strcpy( a, setting + namelen );
- (*parent_setattrib)( this_object, new_setting, status );
- new_setting = astFree( new_setting );
- }
-
-/* AlignTimeScale. */
-/* --------------- */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "aligntimescale=%n%*s %n", &off, &nc ) )
- && ( nc >= len ) ) {
-
-/* Convert the string to a TimeScale code before use. */
- ts = TimeScaleCode( setting + off, status );
- if ( ts != AST__BADTS ) {
- astSetAlignTimeScale( this, ts );
-
-/* Report an error if the string value wasn't recognised. */
- } else {
- astError( AST__ATTIN, "astSetAttrib(%s): Invalid time scale "
- "description \"%s\".", status, astGetClass( this ), setting+off );
- }
-
-/* ClockLat. */
-/* ------- */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "clocklat=%n%*s %n", &off, &nc ) )
- && ( nc >= 7 ) ) {
- new_setting = astMalloc( sizeof( char )*(size_t) len + 1 );
- new_setting[ 0 ] = 'o';
- new_setting[ 1 ] = 'b';
- new_setting[ 2 ] = 's';
- strcpy( new_setting + 3, setting + 5 );
- astSetAttrib( this, new_setting );
- new_setting = astFree( new_setting );
-
-/* ClockLon. */
-/* ------- */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "clocklon=%n%*s %n", &off, &nc ) )
- && ( nc >= 7 ) ) {
- new_setting = astMalloc( sizeof( char )*(size_t) len + 1 );
- new_setting[ 0 ] = 'o';
- new_setting[ 1 ] = 'b';
- new_setting[ 2 ] = 's';
- strcpy( new_setting + 3, setting + 5 );
- astSetAttrib( this, new_setting );
- new_setting = astFree( new_setting );
-
-/* LTOffset */
-/* -------- */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "ltoffset= %lg %n", &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetLTOffset( this, dval );
-
-/* TimeOrigin */
-/* ---------- */
-
-/* Floating-point without any units indication - assume the current Unit
- value. */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "timeorigin= %lg %n", &dval, &nc ) )
- && ( nc >= len ) ) {
-
- astSetTimeOrigin( this, ToUnits( this, astGetUnit( this, 0 ), dval,
- "astSetTimeOrigin", status ) );
-
-/* Floating-point with units. */
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "timeorigin= %lg %n%*s %n", &dval, &off, &nc ) )
- && ( nc >= len ) ) {
-
-/* Defer error reporting in case a date string was given which starts
- with a floating point number, then convert the supplied value to the
- default units for the TimeFrame's System. */
- rep = astReporting( 0 );
- origin = ToUnits( this, setting + off, dval, "astSetTimeOrigin", status );
- if( !astOK ) astClearStatus;
- astReporting( rep );
-
-/* If the origin was converted, store it. */
- if( origin != AST__BAD ) {
- astSetTimeOrigin( this, origin );
-
-/* Otherwise, interpret the string as a date. Convert first to MJD then to
- default system. */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "timeorigin=%n%*[^\n]%n", &off, &nc ) )
- && ( nc >= len ) ) {
- mjd = astReadDateTime( setting + off );
- if ( astOK ) {
- astSetTimeOrigin( this, FromMJD( this, mjd, status ) );
-
-/* Report contextual information if the conversion failed. */
- } else {
- astError( AST__ATTIN, "astSetAttrib(%s): Invalid TimeOrigin value "
- "\"%s\" given.", status, astGetClass( this ), setting + off );
- }
- }
-
-/* String (assumed to be a date). Convert first to MJD then to default
- system. */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "timeorigin=%n%*[^\n]%n", &off, &nc ) )
- && ( nc >= len ) ) {
- mjd = astReadDateTime( setting + off );
- if ( astOK ) {
- astSetTimeOrigin( this, FromMJD( this, mjd, status ) );
-
-/* Report contextual information if the conversion failed. */
- } else {
- astError( AST__ATTIN, "astSetAttrib(%s): Invalid TimeOrigin value "
- "\"%s\" given.", status, astGetClass( this ), setting + off );
- }
-
-/* TimeScale. */
-/* ---------- */
- } else if ( nc = 0,
- ( 0 == astSscanf( setting, "timescale=%n%*s %n", &off, &nc ) )
- && ( nc >= len ) ) {
-
-/* Convert the string to a TimeScale code before use. */
- ts = TimeScaleCode( setting + off, status );
- if ( ts != AST__BADTS ) {
- astSetTimeScale( this, ts );
-
-/* Report an error if the string value wasn't recognised. */
- } else {
- astError( AST__ATTIN, "astSetAttrib(%s): Invalid time scale "
- "description \"%s\".", status, astGetClass( this ), setting + off );
- }
-
-/* Pass any unrecognised setting to the parent method for further
- interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-}
-
-static void SetSystem( AstFrame *this_frame, AstSystemType newsys, int *status ) {
-/*
-* Name:
-* SetSystem
-
-* Purpose:
-* Set the System attribute for a TimeFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* void SetSystem( AstFrame *this_frame, AstSystemType newsys, int *status )
-
-* Class Membership:
-* TimeFrame member function (over-rides the astSetSystem protected
-* method inherited from the Frame class).
-
-* Description:
-* This function sets the System attribute for a TimeFrame.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-* newsys
-* The new System value to be stored.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstTimeFrame *this; /* Pointer to TimeFrame structure */
- AstSystemType oldsys; /* Original System value */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the TimeFrame structure. */
- this = (AstTimeFrame *) this_frame;
-
-/* If we are changing the System to BEPOCH, set the Unit attribute to
- "yr" and TimeScale to "TT". */
- if( newsys == AST__BEPOCH ) {
- astSetUnit( this_frame, 0, "yr" );
- astSetTimeScale( (AstTimeFrame *) this_frame, AST__TT );
- }
-
-/* Save the original System value */
- oldsys = astGetSystem( this_frame );
-
-/* Use the parent SetSystem method to store the new System value. */
- (*parent_setsystem)( this_frame, newsys, status );
-
-/* If the system has changed... */
- if( oldsys != newsys ) {
-
-/* Modify the stored TimeOrigin. */
- OriginSystem( this, oldsys, "astSetSystem", status );
-
-/* Clear all attributes which have system-specific defaults. */
- astClearLabel( this_frame, 0 );
- astClearSymbol( this_frame, 0 );
- astClearTitle( this_frame );
- }
-}
-
-static void SetTimeScale( AstTimeFrame *this, AstTimeScaleType value, int *status ) {
-/*
-*+
-* Name:
-* astSetTimeScale
-
-* Purpose:
-* Set the TimeScale attribute for a TimeFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "timeframe.h"
-* void astSetTimeScale( AstTimeFrame *this, AstTimeScaleType value )
-
-* Class Membership:
-* TimeFrame virtual function
-
-* Description:
-* This function set a new value for the TimeScale attribute for a
-* TimeFrame.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-* value
-* The new value.
-
-*-
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Verify the supplied timescale value */
- if( value < FIRST_TS || value > LAST_TS ) {
- astError( AST__ATTIN, "%s(%s): Bad value (%d) given for TimeScale "
- "attribute.", status, "astSetTimeScale", astGetClass( this ),
- (int) value );
-
-/* Report an error if System is set to BEPOCH and an in appropriate
- TimeScale was supplied. */
- } else if( astGetSystem( this ) == AST__BEPOCH &&
- value != AST__TT ) {
- astError( AST__ATTIN, "%s(%s): Supplied TimeScale (%s) cannot be "
- "used because the %s represents Besselian Epoch which "
- "is defined in terms of TT.", status, "astSetTimeScale",
- astGetClass( this ), TimeScaleString( value, status ),
- astGetClass( this ) );
-
-/* Otherwise set the new TimeScale */
- } else {
-
-/* Modify the TimeOrigin value stored in the TimeFrame structure to refer
- to the new timescale. */
- OriginScale( this, value, "astSetTimeScale", status );
-
-/* Store the new value for the timescale in the TimeFrame structure. */
- this->timescale = value;
-
- }
-}
-
-static void SetUnit( AstFrame *this_frame, int axis, const char *value, int *status ) {
-/*
-* Name:
-* SetUnit
-
-* Purpose:
-* Set a pointer to the Unit string for a TimeFrame's axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* void SetUnit( AstFrame *this_frame, int axis, const char *value )
-
-* Class Membership:
-* TimeFrame member function (over-rides the astSetUnit method inherited
-* from the Frame class).
-
-* Description:
-* This function stores a pointer to the Unit string for a specified axis
-* of a TimeFrame. It also stores the string in the "usedunits" array
-* in the TimeFrame structure, in the element associated with the
-* current System.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-* axis
-* The number of the axis (zero-based) for which information is required.
-* unit
-* The new string to store.
-*/
-
-/* Local Variables: */
- AstTimeFrame *this;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the TimeFrame structure. */
- this = (AstTimeFrame *) this_frame;
-
-/* Validate the axis index. */
- astValidateAxis( this, axis, "astSetUnit" );
-
-/* Report an error if System is set to BEPOCH and an in appropriate
- Unit was supplied. */
- if( astGetSystem( this ) == AST__BEPOCH && strcmp( "yr", value ) ) {
- astError( AST__ATTIN, "astSetUnit(%s): Supplied Unit (%s) cannot "
- "be used because the %s represents Besselian Epoch which "
- "is defined in units of years (yr).", status, astGetClass( this ),
- value, astGetClass( this ) );
-
-/* Otherwise use the parent SetUnit method to store the value in the Axis
- structure */
- } else {
- (*parent_setunit)( this_frame, axis, value, status );
- }
-}
-
-static AstTimeScaleType TimeScaleCode( const char *ts, int *status ) {
-/*
-* Name:
-* TimeScaleCode
-
-* Purpose:
-* Convert a string into a time scale type code.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* AstTimeScaleType TimeScaleCode( const char *ts )
-
-* Class Membership:
-* TimeFrame member function.
-
-* Description:
-* This function converts a string used for the external description of
-* a time scale into a TimeFrame time scale type code (TimeScale attribute
-* value). It is the inverse of the TimeScaleString function.
-
-* Parameters:
-* ts
-* Pointer to a constant null-terminated string containing the
-* external description of the time scale.
-
-* Returned Value:
-* The TimeScale type code.
-
-* Notes:
-* - A value of AST__BADTS is returned if the time scale
-* description was not recognised. This does not produce an error.
-* - A value of AST__BADTS is also returned if this function
-* is invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- AstTimeScaleType result; /* Result value to return */
-
-/* Initialise. */
- result = AST__BADTS;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Match the timescale string against each possibility and assign the
- result. */
- if ( astChrMatch( "TAI", ts ) ) {
- result = AST__TAI;
-
- } else if ( astChrMatch( "UTC", ts ) ) {
- result = AST__UTC;
-
- } else if ( astChrMatch( "UT1", ts ) ) {
- result = AST__UT1;
-
- } else if ( astChrMatch( "GMST", ts ) ) {
- result = AST__GMST;
-
- } else if ( astChrMatch( "LAST", ts ) ) {
- result = AST__LAST;
-
- } else if ( astChrMatch( "LMST", ts ) ) {
- result = AST__LMST;
-
- } else if ( astChrMatch( "TT", ts ) ) {
- result = AST__TT;
-
- } else if ( astChrMatch( "TDB", ts ) ) {
- result = AST__TDB;
-
- } else if ( astChrMatch( "TCG", ts ) ) {
- result = AST__TCG;
-
- } else if ( astChrMatch( "TCB", ts ) ) {
- result = AST__TCB;
-
- } else if ( astChrMatch( "LT", ts ) ) {
- result = AST__LT;
-
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *TimeScaleString( AstTimeScaleType ts, int *status ) {
-/*
-* Name:
-* TimeScaleString
-
-* Purpose:
-* Convert a time scale type code into a string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* const char *TimeScaleString( AstTimeScaleType ts, int *status )
-
-* Class Membership:
-* TimeFrame member function.
-
-* Description:
-* This function converts a TimeFrame time scale type code (TimeScale
-* attribute value) into a string suitable for use as an external
-* representation of the time scale type.
-
-* Parameters:
-* ts
-* The time scale type code.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a constant null-terminated string containing the
-* textual equivalent of the type code supplied.
-
-* Notes:
-* - A NULL pointer value is returned if the time scale
-* code was not recognised. This does not produce an error.
-* - A NULL pointer value is also returned if this function is
-* invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- const char *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Match the timescale value against each possibility and convert to a
- string pointer. */
- switch ( ts ) {
-
- case AST__TAI:
- result = "TAI";
- break;
-
- case AST__UTC:
- result = "UTC";
- break;
-
- case AST__UT1:
- result = "UT1";
- break;
-
- case AST__GMST:
- result = "GMST";
- break;
-
- case AST__LAST:
- result = "LAST";
- break;
-
- case AST__LMST:
- result = "LMST";
- break;
-
- case AST__TT:
- result = "TT";
- break;
-
- case AST__TDB:
- result = "TDB";
- break;
-
- case AST__TCB:
- result = "TCB";
- break;
-
- case AST__TCG:
- result = "TCG";
- break;
-
- case AST__LT:
- result = "LT";
- break;
-
- }
-
-/* Return the result pointer. */
- return result;
-}
-
-static int SubFrame( AstFrame *target_frame, AstFrame *template,
- int result_naxes, const int *target_axes,
- const int *template_axes, AstMapping **map,
- AstFrame **result, int *status ) {
-/*
-* Name:
-* SubFrame
-
-* Purpose:
-* Select axes from a TimeFrame and convert to the new coordinate
-* system.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* int SubFrame( AstFrame *target, AstFrame *template,
-* int result_naxes, const int *target_axes,
-* const int *template_axes, AstMapping **map,
-* AstFrame **result, int *status )
-
-* Class Membership:
-* TimeFrame member function (over-rides the protected astSubFrame
-* method inherited from the Frame class).
-
-* Description:
-* This function selects a requested sub-set (or super-set) of the axes
-* from a "target" TimeFrame and creates a new Frame with copies of
-* the selected axes assembled in the requested order. It then
-* optionally overlays the attributes of a "template" Frame on to the
-* result. It returns both the resulting Frame and a Mapping that
-* describes how to convert between the coordinate systems described by
-* the target and result Frames. If necessary, this Mapping takes
-* account of any differences in the Frames' attributes due to the
-* influence of the template.
-
-* Parameters:
-* target
-* Pointer to the target TimeFrame, from which axes are to be
-* selected.
-* template
-* Pointer to the template Frame, from which new attributes for the
-* result Frame are to be obtained. Optionally, this may be NULL, in
-* which case no overlaying of template attributes will be performed.
-* result_naxes
-* Number of axes to be selected from the target Frame. This number may
-* be greater than or less than the number of axes in this Frame (or
-* equal).
-* target_axes
-* Pointer to an array of int with result_naxes elements, giving a list
-* of the (zero-based) axis indices of the axes to be selected from the
-* target TimeFrame. The order in which these are given determines
-* the order in which the axes appear in the result Frame. If any of the
-* values in this array is set to -1, the corresponding result axis will
-* not be derived from the target Frame, but will be assigned default
-* attributes instead.
-* template_axes
-* Pointer to an array of int with result_naxes elements. This should
-* contain a list of the template axes (given as zero-based axis indices)
-* with which the axes of the result Frame are to be associated. This
-* array determines which axes are used when overlaying axis-dependent
-* attributes of the template on to the result. If any element of this
-* array is set to -1, the corresponding result axis will not receive any
-* template attributes.
-*
-* If the template argument is given as NULL, this array is not used and
-* a NULL pointer may also be supplied here.
-* map
-* Address of a location to receive a pointer to the returned Mapping.
-* The forward transformation of this Mapping will describe how to
-* convert coordinates from the coordinate system described by the target
-* TimeFrame to that described by the result Frame. The inverse
-* transformation will convert in the opposite direction.
-* result
-* Address of a location to receive a pointer to the result Frame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value is returned if coordinate conversion is possible
-* between the target and the result Frame. Otherwise zero is returned and
-* *map and *result are returned as NULL (but this will not in itself
-* result in an error condition). In general, coordinate conversion should
-* always be possible if no template Frame is supplied but may not always
-* be possible otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-
-* Implementation Notes:
-* - This implementation addresses the selection of axes from a
-* TimeFrame object. This results in another object of the same class
-* only if the single TimeFrame axis is selected exactly once.
-* Otherwise, the result is a Frame class object which inherits the
-* TimeFrame's axis information (if appropriate) but none of the other
-* properties of a TimeFrame.
-* - In the event that a TimeFrame results, the returned Mapping will
-* take proper account of the relationship between the target and result
-* coordinate systems.
-* - In the event that a Frame class object results, the returned Mapping
-* will only represent a selection/permutation of axes.
-
-* Implementation Deficiencies:
-* - Any axis selection is currently permitted. Probably this should be
-* restricted so that each axis can only be selected once. The
-* astValidateAxisSelection method will do this but currently there are bugs
-* in the CmpFrame class that cause axis selections which will not pass this
-* test. Install the validation when these are fixed.
-*/
-
-/* Local Variables: */
- AstTimeFrame *target; /* Pointer to the TimeFrame structure */
- AstTimeFrame *temp; /* Pointer to copy of target TimeFrame */
- AstTimeFrame *align_frm; /* Frame in which to align the TimeFrames */
- int match; /* Coordinate conversion is possible? */
-
-/* Initialise the returned values. */
- *map = NULL;
- *result = NULL;
- match = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return match;
-
-/* Obtain a pointer to the target TimeFrame structure. */
- target = (AstTimeFrame *) target_frame;
-
-/* Result is a TimeFrame. */
-/* -------------------------- */
-/* Check if the result Frame is to have one axis obtained by selecting
- the single target TimeFrame axis. If so, the result will also be
- a TimeFrame. */
- if ( ( result_naxes == 1 ) && ( target_axes[ 0 ] == 0 ) ) {
-
-/* Form the result from a copy of the target. */
- *result = astCopy( target );
-
-/* If required, overlay the template attributes on to the result TimeFrame.
- Also choose the Frame which defined the alignment system and time scale
- (via its AlignSystem and AlignTimeScale attributes) in which to align the
- two TimeFrames. This is the template (if there is a template). */
- if ( template ) {
- astOverlay( template, template_axes, *result );
- if( astIsATimeFrame( template ) ) {
- align_frm = astClone( template );
- } else {
- align_frm = astClone( target );
- }
-
-/* If no template was supplied, align in the System and TimeScale of the
- target. */
- } else {
- VerifyAttrs( target, "convert between different time systems",
- "TimeScale", "astMatch", status );
- align_frm = astClone( target );
- }
-
-/* Generate a Mapping that takes account of changes in the sky coordinate
- system (equinox, epoch, etc.) between the target TimeFrame and the result
- TimeFrame. If this Mapping can be generated, set "match" to indicate that
- coordinate conversion is possible. */
- match = ( MakeTimeMapping( target, (AstTimeFrame *) *result,
- align_frm, 0, map, status ) != 0 );
-
-/* Free resources. */
- align_frm = astAnnul( align_frm );
-
-/* Result is not a TimeFrame. */
-/* ------------------------------ */
-/* In this case, we select axes as if the target were from the Frame
- class. However, since the resulting data will then be separated
- from their enclosing TimeFrame, default attribute values may differ
- if the methods for obtaining them were over-ridden by the TimeFrame
- class. To overcome this, we ensure that these values are explicitly
- set for the result Frame (rather than relying on their defaults). */
- } else {
-
-/* Make a temporary copy of the target TimeFrame. We will explicitly
- set the attribute values in this copy so as not to modify the original. */
- temp = astCopy( target );
-
-/* Define a macro to test if an attribute is set. If not, set it
- explicitly to its default value. */
-#define SET(attribute) \
- if ( !astTest##attribute( temp ) ) { \
- astSet##attribute( temp, astGet##attribute( temp ) ); \
- }
-
-/* Set attribute values which apply to the Frame as a whole and which
- we want to retain, but whose defaults are over-ridden by the
- TimeFrame class. */
- SET(Domain)
- SET(Title)
-
-/* Define a macro to test if an attribute is set for axis zero (the only
- axis of a TimeFrame). If not, set it explicitly to its default value. */
-#define SET_AXIS(attribute) \
- if ( !astTest##attribute( temp, 0 ) ) { \
- astSet##attribute( temp, 0, \
- astGet##attribute( temp, 0 ) ); \
- }
-
-/* Use this macro to set explicit values for all the axis attributes
- for which the TimeFrame class over-rides the default value. */
- SET_AXIS(Label)
- SET_AXIS(Symbol)
- SET_AXIS(Unit)
-
-/* Clear attributes which have an extended range of values allowed by
- this class. */
- astClearSystem( temp );
- astClearAlignSystem( temp );
-
-/* Invoke the astSubFrame method inherited from the Frame class to
- produce the result Frame by selecting the required set of axes and
- overlaying the template Frame's attributes. */
- match = (*parent_subframe)( (AstFrame *) temp, template,
- result_naxes, target_axes, template_axes,
- map, result, status );
-
-/* Delete the temporary copy of the target TimeFrame. */
- temp = astDelete( temp );
- }
-
-/* If an error occurred or no match was found, annul the returned
- objects and reset the returned result. */
- if ( !astOK || !match ) {
- if( *map ) *map = astAnnul( *map );
- if( *result ) *result = astAnnul( *result );
- match = 0;
- }
-
-/* Return the result. */
- return match;
-
-/* Undefine macros local to this function. */
-#undef SET
-#undef SET_AXIS
-}
-
-static AstSystemType SystemCode( AstFrame *this, const char *system, int *status ) {
-/*
-* Name:
-* SystemCode
-
-* Purpose:
-* Convert a string into a coordinate system type code.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* AstSystemType SystemCode( AstFrame *this, const char *system, int *status )
-
-* Class Membership:
-* TimeFrame member function (over-rides the astSystemCode method
-* inherited from the Frame class).
-
-* Description:
-* This function converts a string used for the external description of
-* a coordinate system into a TimeFrame coordinate system type code
-* (System attribute value). It is the inverse of the astSystemString
-* function.
-
-* Parameters:
-* this
-* The Frame.
-* system
-* Pointer to a constant null-terminated string containing the
-* external description of the sky coordinate system.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The System type code.
-
-* Notes:
-* - A value of AST__BADSYSTEM is returned if the sky coordinate
-* system description was not recognised. This does not produce an
-* error.
-* - A value of AST__BADSYSTEM is also returned if this function
-* is invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- AstSystemType result; /* Result value to return */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Match the "system" string against each possibility and assign the
- result. */
- if ( astChrMatch( "MJD", system ) || astChrMatch( "Modified Julian Date", system ) ) {
- result = AST__MJD;
-
- } else if ( astChrMatch( "JD", system ) || astChrMatch( "Julian Date", system ) ) {
- result = AST__JD;
-
- } else if ( astChrMatch( "BEPOCH", system ) || astChrMatch( "Besselian Epoch", system ) ) {
- result = AST__BEPOCH;
-
- } else if ( astChrMatch( "JEPOCH", system ) || astChrMatch( "Julian Epoch", system ) ) {
- result = AST__JEPOCH;
-
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *SystemLabel( AstSystemType system, int *status ) {
-/*
-* Name:
-* SystemLabel
-
-* Purpose:
-* Return a label for a coordinate system type code.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* const char *SystemLabel( AstSystemType system, int *status )
-
-* Class Membership:
-* TimeFrame member function.
-
-* Description:
-* This function converts a TimeFrame coordinate system type code
-* (System attribute value) into a descriptive string for human readers.
-
-* Parameters:
-* system
-* The coordinate system type code.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a constant null-terminated string containing the
-* textual equivalent of the type code supplied.
-
-* Notes:
-* - A NULL pointer value is returned if the sky coordinate system
-* code was not recognised. This does not produce an error.
-* - A NULL pointer value is also returned if this function is
-* invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- const char *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Match the "system" value against each possibility and convert to a
- string pointer. */
- switch ( system ) {
-
- case AST__MJD:
- result = "Modified Julian Date";
- break;
-
- case AST__JD:
- result = "Julian Date";
- break;
-
- case AST__JEPOCH:
- result = "Julian Epoch";
- break;
-
- case AST__BEPOCH:
- result = "Besselian Epoch";
- break;
-
- }
-
-/* Return the result pointer. */
- return result;
-}
-
-static const char *SystemString( AstFrame *this, AstSystemType system, int *status ) {
-/*
-* Name:
-* SystemString
-
-* Purpose:
-* Convert a coordinate system type code into a string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* const char *SystemString( AstFrame *this, AstSystemType system, int *status )
-
-* Class Membership:
-* TimeFrame member function (over-rides the astSystemString method
-* inherited from the Frame class).
-
-* Description:
-* This function converts a TimeFrame coordinate system type code
-* (System attribute value) into a string suitable for use as an
-* external representation of the coordinate system type.
-
-* Parameters:
-* this
-* The Frame.
-* system
-* The coordinate system type code.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a constant null-terminated string containing the
-* textual equivalent of the type code supplied.
-
-* Notes:
-* - A NULL pointer value is returned if the sky coordinate system
-* code was not recognised. This does not produce an error.
-* - A NULL pointer value is also returned if this function is
-* invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- const char *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Match the "system" value against each possibility and convert to a
- string pointer. (Where possible, return the same string as would be
- used in the FITS WCS representation of the coordinate system). */
- switch ( system ) {
-
- case AST__MJD:
- result = "MJD";
- break;
-
- case AST__JD:
- result = "JD";
- break;
-
- case AST__JEPOCH:
- result = "JEPOCH";
- break;
-
- case AST__BEPOCH:
- result = "BEPOCH";
- break;
- }
-
-/* Return the result pointer. */
- return result;
-}
-
-static int TestActiveUnit( AstFrame *this_frame, int *status ) {
-/*
-* Name:
-* TestActiveUnit
-
-* Purpose:
-* Test the ActiveUnit flag for a TimeFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* int TestActiveUnit( AstFrame *this_frame, int *status )
-
-* Class Membership:
-* TimeFrame member function (over-rides the astTestActiveUnit protected
-* method inherited from the Frame class).
-
-* Description:
-* This function test the value of the ActiveUnit flag for a TimeFrame,
-* which is always "unset".
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The result of the test (0).
-
-*/
- return 0;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a TimeFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* TimeFrame member function (over-rides the astTestAttrib protected
-* method inherited from the Frame class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a TimeFrame's attributes.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - This function uses one-based axis numbering so that it is
-* suitable for external (public) use.
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstTimeFrame *this; /* Pointer to the TimeFrame structure */
- char *new_attrib; /* Pointer value to new attribute name */
- int len; /* Length of attrib string */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the TimeFrame structure. */
- this = (AstTimeFrame *) this_object;
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* First look for axis attributes defined by the Frame class. Since a
- TimeFrame has only 1 axis, we allow these attributes to be specified
- without a trailing "(axis)" string. */
- if ( !strcmp( attrib, "direction" ) ||
- !strcmp( attrib, "bottom" ) ||
- !strcmp( attrib, "top" ) ||
- !strcmp( attrib, "format" ) ||
- !strcmp( attrib, "label" ) ||
- !strcmp( attrib, "symbol" ) ||
- !strcmp( attrib, "unit" ) ) {
-
-/* Create a new attribute name from the original by appending the string
- "(1)" and then use the parent TestAttrib method. */
- new_attrib = astMalloc( len + 4 );
- if( new_attrib ) {
- memcpy( new_attrib, attrib, len );
- memcpy( new_attrib + len, "(1)", 4 );
- result = (*parent_testattrib)( this_object, new_attrib, status );
- new_attrib = astFree( new_attrib );
- }
-
-/* AlignTimeScale. */
-/* --------------- */
- } else if ( !strcmp( attrib, "aligntimescale" ) ) {
- result = astTestAlignTimeScale( this );
-
-/* ClockLat. */
-/* ------- */
- } else if ( !strcmp( attrib, "clocklat" ) ) {
- result = astTestAttrib( this, "obslat" );
-
-/* ClockLon. */
-/* ------- */
- } else if ( !strcmp( attrib, "clocklon" ) ) {
- result = astTestAttrib( this, "obslon" );
-
-/* LTOffset. */
-/* --------- */
- } else if ( !strcmp( attrib, "ltoffset" ) ) {
- result = astTestLTOffset( this );
-
-/* TimeOrigin. */
-/* --------- */
- } else if ( !strcmp( attrib, "timeorigin" ) ) {
- result = astTestTimeOrigin( this );
-
-/* TimeScale. */
-/* ---------- */
- } else if ( !strcmp( attrib, "timescale" ) ) {
- result = astTestTimeScale( this );
-
-/* If the attribute is not recognised, pass it on to the parent method
- for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static double ToMJD( AstSystemType oldsys, double oldval, int *status ){
-/*
-* Name:
-* ToMJD
-
-* Purpose:
-* Convert a time value from TimeFrame's System to MJD.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* double ToMJD( AstSystemType oldsys, double oldval, int *status ){
-
-* Class Membership:
-* TimeFrame member function
-
-* Description:
-* This function converts the supplied value from the supplied System
-* to an MJD.
-
-* Parameters:
-* oldsys
-* The System in which the oldval is supplied.
-* oldval
-* The value to convert, assumed to be in the default units
-* associated with "oldsys".
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The MJD value corresponding to "oldval"
-
-* Notes:
-* - Both old and new value are assumed to be absolute (i.e. have zero
-* offset).
-
-*/
-
-/* Local Variables; */
- AstMapping *map;
- double result;
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If the old system is MJD just return the value unchanged. */
- if( oldsys == AST__MJD ) {
- result = oldval;
-
-/* Otherwise create a TimeMap wich converts from the TimeFrame system to
- MJD, and use it to transform the supplied value. */
- } else {
- map = ToMJDMap( oldsys, 0.0, status );
-
-/* Use the TimeMap to convert the supplied value. */
- astTran1( map, 1, &oldval, 1, &result );
-
-/* Free resources */
- map = astAnnul( map );
-
- }
-
-/* Return the result */
- return result;
-}
-
-static AstMapping *ToMJDMap( AstSystemType oldsys, double off, int *status ){
-/*
-* Name:
-* ToMJDMap
-
-* Purpose:
-* Create a Mapping from a specified System to MJD.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* AstMapping *ToMJDMap( AstSystemType oldsys, double off, int *status ){
-
-* Class Membership:
-* TimeFrame member function
-
-* Description:
-* This function creates a Mapping which converts from the supplied
-* system and offset to absolute MJD.
-
-* Parameters:
-* oldsys
-* The System in which the oldval is supplied.
-* off
-* The axis offset used with the old System, assumed to be in the
-* default system associated with oldsys.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Mapping.
-
-*/
-
-/* Local Variables; */
- AstTimeMap *timemap;
- double args[ 2 ];
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Create a null TimeMap */
- timemap = astTimeMap( 0, "", status );
-
-/* Set the offsets for the supplied and returned values. */
- args[ 0 ] = off;
- args[ 1 ] = 0.0;
-
-/* If required, add a TimeMap conversion which converts from the TimeFrame
- system to MJD. */
- if( oldsys == AST__MJD ) {
-/* if( off != 0.0 ) astTimeAdd( timemap, "MJDTOMJD", args ); */
- astTimeAdd( timemap, "MJDTOMJD", args );
-
- } else if( oldsys == AST__JD ) {
- astTimeAdd( timemap, "JDTOMJD", args );
-
- } else if( oldsys == AST__JEPOCH ) {
- astTimeAdd( timemap, "JEPTOMJD", args );
-
- } else if( oldsys == AST__BEPOCH ) {
- astTimeAdd( timemap, "BEPTOMJD", args );
- }
-
-/* Return the result */
- return (AstMapping *) timemap;
-}
-
-static double ToUnits( AstTimeFrame *this, const char *oldunit, double oldval,
- const char *method, int *status ){
-/*
-*
-* Name:
-* ToUnits
-
-* Purpose:
-* Convert a supplied time value to the default units of the supplied TimeFrame.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* double ToUnits( AstTimeFrame *this, const char *oldunit, double oldval,
-* const char *method, int *status )
-
-* Class Membership:
-* TimeFrame member function
-
-* Description:
-* This function converts the supplied time value from the supplied
-* units to the default units associated with the supplied TimeFrame's
-* System.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-* oldunit
-* The units in which "oldval" is supplied.
-* oldval
-* The value to be converted.
-* method
-* Pointer to a string holding the name of the method to be
-* included in any error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The converted value.
-
-*/
-
-/* Local Variables: */
- AstMapping *map;
- const char *defunit;
- double result;
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get default units associated with the System attribute of the supplied
- TimeFrame, and find a Mapping from the old units to the default. */
- defunit = DefUnit( astGetSystem( this ), method, "TimeFrame", status );
- map = astUnitMapper( oldunit, defunit, NULL, NULL );
- if( map ) {
-
-/* Use the Mapping to convert the supplied value. */
- astTran1( map, 1, &oldval, 1, &result );
-
-/* Free resources. */
- map = astAnnul( map );
-
-/* Report an error if no conversion is possible. */
- } else if( astOK ){
- astError( AST__BADUN, "%s(%s): Cannot convert the supplied attribute "
- "value from units of %s to %s.", status, method, astGetClass( this ),
- oldunit, defunit );
- }
-
-/* Return the result */
- return result;
-}
-
-static int Unformat( AstFrame *this_frame, int axis, const char *string,
- double *value, int *status ) {
-/*
-* Name:
-* Unformat
-
-* Purpose:
-* Read a formatted coordinate value for a TimeFrame axis.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* int Unformat( AstFrame *this, int axis, const char *string,
-* double *value, int *status )
-
-* Class Membership:
-* TimeFrame member function (over-rides the public astUnformat
-* method inherited from the Frame class).
-
-* Description:
-* This function reads a formatted coordinate value for a TimeFrame
-* axis (supplied as a string) and returns the equivalent numerical
-* value as a double. It also returns the number of characters read
-* from the string.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-* axis
-* The number of the TimeFrame axis for which the coordinate
-* value is to be read (axis numbering starts at zero for the
-* first axis).
-* string
-* Pointer to a constant null-terminated string containing the
-* formatted coordinate value.
-* value
-* Pointer to a double in which the coordinate value read will
-* be returned.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The number of characters read from the string to obtain the
-* coordinate value.
-
-* Notes:
-* - Any white space at the beginning of the string will be
-* skipped, as also will any trailing white space following the
-* coordinate value read. The function's return value will reflect
-* this.
-* - A function value of zero (and no coordinate value) will be
-* returned, without error, if the string supplied does not contain
-* a suitably formatted value.
-* - The string "<bad>" is recognised as a special case and will
-* generate the value AST__BAD, without error. The test for this
-* string is case-insensitive and permits embedded white space.
-* - A function result of zero will be returned and no coordinate
-* value will be returned via the "value" pointer if this function
-* is invoked with the global error status set, or if it should
-* fail for any reason.
-*/
-
-/* Local Variables: */
- AstMapping *map;
- AstTimeFrame *this;
- AstTimeScaleType ts1;
- AstTimeScaleType ts2;
- const char *c;
- char *old_fmt;
- char *str;
- const char *txt;
- double mjd;
- double val1;
- int l;
- int lt;
- int nc1;
- int nc;
- int ndp;
- int rep;
-
-/* Initialise. */
- nc = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return nc;
-
-/* Obtain a pointer to the TimeFrame structure. */
- this = (AstTimeFrame *) this_frame;
-
-/* Validate the axis index. */
- (void) astValidateAxis( this, axis, "astUnformat" );
-
-/* First attempt to read the value using the parent unformat method, and
- note how many characters were used. We temporarily clear the Format
- attribute if it has been set to a date format, since the parent Frame
- class does not understand date format.*/
- txt = astGetFormat( this, axis );
- if( DateFormat( txt, &ndp, NULL, status ) ) {
- old_fmt = astStore( NULL, txt, strlen( txt ) + 1 );
- astClearFormat( this, axis );
- } else {
- old_fmt = NULL;
- }
-
- nc1 = (*parent_unformat)( this_frame, axis, string, &val1, status );
-
-/* Re-instate the original Format */
- if( old_fmt ) {
- astSetFormat( this,axis, old_fmt );
- old_fmt = astFree( old_fmt );
- }
-
-/* The astReadDateTime function (defined within frame.c) does not allow
- for any extra text to be appended to the end of the formatted date/time
- (AST__BAD is returned if any such extra text is present). But astUnformat
- is contracted to allow such text. So we need to make multiple attempts
- at reading the date/time in order to find the longest leading string
- which gives a non-bad value. First take a copy of the supplied string
- si we can terminate it at any point we wish. */
- l = astChrLen( string );
- str = astStore( NULL, string, l + 1 );
-
-/* Now attempt to read an ISO date from the start of the string. We
- switch off error reporting to avoid reports of unsuitable syntax. */
- rep = astReporting( 0 );
-
-/* Attempt to read a date/time from the whol string. If this fails
- terminate the string in order to make it one character shorter and try
- again. */
- for( lt = l; lt > 0; lt-- ) {
- str[ lt ] = 0;
- mjd = astReadDateTime( str );
- if( !astOK ) astClearStatus;
- if( mjd != AST__BAD ) break;
- }
-
-/* Re-instate error reporting. */
- astReporting( rep );
-
-/* Free resources. */
- str = astFree( str );
-
-/* If the whole non-blank start of the string was consumed, add on any
- trailing white space. */
- if( lt >= l ) lt = strlen( string );
-
-/* If no date/time could be read, or if reading the value as a
- floating point value was at least as good, return the floating point
- value (assumed to be in the system and units of the TimeFrame. */
- if( mjd == AST__BAD || nc1 >= l ) {
- *value = val1;
- nc = nc1;
-
-/* Otherwise, if a date/time was read convert it to the TimeFrame system,
- etc. */
- } else if( mjd != AST__BAD ) {
-
-/* Save the number of character read from the supplied string. */
- nc = lt;
-
-/* We require a value in the timescale of the supplied TimeFrame. Get
- this TimeScale. */
- ts2 = astGetTimeScale( this );
-
-/* If the supplied string gave the date/time as a Besselian epoch, the
- input timescale is TT, otherwise it is assumed to be the TimeScale of
- the TimeFrame. Locate the first non-space character. */
- c = string;
- while( *c && isspace( *c ) ) c++;
-
-/* If the first non-space is a "B", assuming a TT timescale. Otherwise
- assume the timescale of the supplied TimeFrame. */
- ts1 = ( *c == 'B' || *c == 'b' ) ? AST__TT : ts2;
-
-/* Create the Mapping and use it to transform the mjd value. */
- map = MakeMap( this, AST__MJD, astGetSystem( this ), ts1, ts2,
- 0.0, astGetTimeOrigin( this ), "d",
- astGetUnit( this, 0 ), "astFormat", status );
- if( map ) {
- astTran1( map, 1, &mjd, 1, value );
- map = astAnnul( map );
- } else {
- astError( AST__INCTS, "astUnformat(%s): Cannot convert the "
- "supplied date/time string (%s) to the required "
- "timescale (%s).", status, astGetClass( this ), string,
- TimeScaleString( ts2, status ) );
- }
- }
-
-/* Return the number of characters read. */
- return nc;
-}
-
-static int ValidateSystem( AstFrame *this, AstSystemType system, const char *method, int *status ) {
-/*
-*
-* Name:
-* ValidateSystem
-
-* Purpose:
-* Validate a value for a Frame's System attribute.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "timeframe.h"
-* int ValidateSystem( AstFrame *this, AstSystemType system,
-* const char *method, int *status )
-
-* Class Membership:
-* TimeFrame member function (over-rides the astValidateSystem method
-* inherited from the Frame class).
-
-* Description:
-* This function checks the validity of the supplied system value.
-* If the value is valid, it is returned unchanged. Otherwise, an
-* error is reported and a value of AST__BADSYSTEM is returned.
-
-* Parameters:
-* this
-* Pointer to the Frame.
-* system
-* The system value to be checked.
-* method
-* Pointer to a constant null-terminated character string
-* containing the name of the method that invoked this function
-* to validate an axis index. This method name is used solely
-* for constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The validated system value.
-
-* Notes:
-* - A value of AST__BADSYSTEM will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstSystemType result; /* Validated system value */
-
-/* Initialise. */
- result = AST__BADSYSTEM;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If the value is out of bounds, report an error. */
- if ( system < FIRST_SYSTEM || system > LAST_SYSTEM ) {
- astError( AST__AXIIN, "%s(%s): Bad value (%d) given for the System "
- "or AlignSystem attribute of a %s.", status, method,
- astGetClass( this ), (int) system, astGetClass( this ) );
-
-/* Otherwise, return the supplied value. */
- } else {
- result = system;
- }
-
-/* Return the result. */
- return result;
-}
-
-static void VerifyAttrs( AstTimeFrame *this, const char *purp,
- const char *attrs, const char *method, int *status ) {
-/*
-* Name:
-* VerifyAttrs
-
-* Purpose:
-* Verify that usable attribute values are available.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timeframe.h"
-* void VerifyAttrs( AstTimeFrame *this, const char *purp,
-* const char *attrs, const char *method, int *status )
-
-* Class Membership:
-* TimeFrame member function
-
-* Description:
-* This function tests each attribute listed in "attrs". It returns
-* without action if 1) an explicit value has been set for each attribute
-* or 2) the UseDefs attribute of the supplied TimeFrame is non-zero.
-*
-* If UseDefs is zero (indicating that default values should not be
-* used for attributes), and any of the named attributes does not have
-* an explicitly set value, then an error is reported.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame.
-* purp
-* Pointer to a text string containing a message which will be
-* included in any error report. This shouldindicate the purpose
-* for which the attribute value is required.
-* attrs
-* A string holding a space separated list of attribute names.
-* method
-* A string holding the name of the calling method for use in error
-* messages.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- const char *a;
- const char *desc;
- const char *p;
- int len;
- int set;
- int state;
-
-/* Check inherited status */
- if( !astOK ) return;
-
-/* Stop compiler warnings about uninitialised variables */
- a = NULL;
- desc = NULL;
- len = 0;
- set = 0;
-
-/* If the TimeFrame has a non-zero value for its UseDefs attribute, then
- all attributes are assumed to have usable values, since the defaults
- will be used if no explicit value has been set. So we only need to do
- any checks if UseDefs is zero. */
- if( !astGetUseDefs( this ) ) {
-
-/* Loop round the "attrs" string identifying the start and length of each
- non-blank word in the string. */
- state = 0;
- p = attrs;
- while( 1 ) {
- if( state == 0 ) {
- if( !isspace( *p ) ) {
- a = p;
- len = 1;
- state = 1;
- }
- } else {
- if( isspace( *p ) || !*p ) {
-
-/* The end of a word has just been reached. Compare it to each known
- attribute value. Get a flag indicating if the attribute has a set
- value, and a string describing the attribute.*/
- if( len > 0 ) {
-
- if( !strncmp( "ObsLat", a, len ) ) {
- set = astTestObsLat( this );
- desc = "observer latitude";
-
- } else if( !strncmp( "ObsLon", a, len ) ) {
- set = astTestObsLon( this );
- desc = "observer longitude";
-
- } else if( !strncmp( "ObsAlt", a, len ) ) {
- set = astTestObsAlt( this );
- desc = "observer altitude";
-
- } else if( !strncmp( "Dut1", a, len ) ) {
- set = astTestDut1( this );
- desc = "UT1-UTC correction";
-
- } else if( !strncmp( "TimeOrigin", a, len ) ) {
- set = astTestTimeOrigin( this );
- desc = "time offset";
-
- } else if( !strncmp( "LTOffset", a, len ) ) {
- set = astTestLTOffset( this );
- desc = "local time offset";
-
- } else if( !strncmp( "TimeScale", a, len ) ) {
- set = astTestTimeScale( this );
- desc = "time scale";
-
- } else {
- astError( AST__INTER, "VerifyAttrs(TimeFrame): "
- "Unknown attribute name \"%.*s\" supplied (AST "
- "internal programming error).", status, len, a );
- }
-
-/* If the attribute does not have a set value, report an error. */
- if( !set && astOK ) {
- astError( AST__NOVAL, "%s(%s): Cannot %s.", status, method,
- astGetClass( this ), purp );
- astError( AST__NOVAL, "No value has been set for "
- "the AST \"%.*s\" attribute (%s).", status, len, a,
- desc );
- }
-
-/* Continue the word search algorithm. */
- }
- len = 0;
- state = 0;
- } else {
- len++;
- }
- }
- if( !*(p++) ) break;
- }
- }
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-
-/*
-*att++
-* Name:
-* TimeOrigin
-
-* Purpose:
-* The zero point for TimeFrame axis values
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This specifies the origin from which all time values are measured.
-* The default value (zero) results in the TimeFrame describing
-* absolute time values in the system given by the System attribute
-* (e.g. MJD, Julian epoch, etc). If a TimeFrame is to be used to
-* describe elapsed time since some origin, the TimeOrigin attribute
-* should be set to hold the required origin value. The TimeOrigin value
-* stored inside the TimeFrame structure is modified whenever TimeFrame
-* attribute values are changed so that it refers to the original moment
-* in time.
-*
-* Input Formats:
-* The formats accepted when setting a TimeOrigin value are listed
-* below. They are all case-insensitive and are generally tolerant
-* of extra white space and alternative field delimiters:
-*
-* - Besselian Epoch: Expressed in decimal years, with or without
-* decimal places ("B1950" or "B1976.13" for example).
-*
-* - Julian Epoch: Expressed in decimal years, with or without
-* decimal places ("J2000" or "J2100.9" for example).
-*
-* - Units: An unqualified decimal value is interpreted as a value in
-* the system specified by the TimeFrame's System attribute, in the
-* units given by the TimeFrame's Unit attribute. Alternatively, an
-* appropriate unit string can be appended to the end of the floating
-* point value ("123.4 d" for example), in which case the supplied value
-* is scaled into the units specified by the Unit attribute.
-*
-* - Julian Date: With or without decimal places ("JD 2454321.9" for
-* example).
-*
-* - Modified Julian Date: With or without decimal places
-* ("MJD 54321.4" for example).
-*
-* - Gregorian Calendar Date: With the month expressed either as an
-* integer or a 3-character abbreviation, and with optional decimal
-* places to represent a fraction of a day ("1996-10-2" or
-* "1996-Oct-2.6" for example). If no fractional part of a day is
-* given, the time refers to the start of the day (zero hours).
-*
-* - Gregorian Date and Time: Any calendar date (as above) but with
-* a fraction of a day expressed as hours, minutes and seconds
-* ("1996-Oct-2 12:13:56.985" for example). The date and time can be
-* separated by a space or by a "T" (as used by ISO8601 format).
-
-* Output Format:
-* When enquiring TimeOrigin values, the returned formatted floating
-* point value represents a value in the TimeFrame's System, in the unit
-* specified by the TimeFrame's Unit attribute.
-
-* Applicability:
-* TimeFrame
-* All TimeFrames have this attribute.
-
-*att--
-*/
-/* The time origin, stored internally in the default units associated
- with the current System value. Clear the TimeOrigin value by setting it
- to AST__BAD, which gives 0.0 as the default value. Any value is acceptable. */
-astMAKE_CLEAR(TimeFrame,TimeOrigin,timeorigin,AST__BAD)
-astMAKE_GET(TimeFrame,TimeOrigin,double,0.0,((this->timeorigin!=AST__BAD)?this->timeorigin:0.0))
-astMAKE_SET(TimeFrame,TimeOrigin,double,timeorigin,value)
-astMAKE_TEST(TimeFrame,TimeOrigin,( this->timeorigin != AST__BAD ))
-
-/*
-*att++
-* Name:
-* LTOffset
-
-* Purpose:
-* The offset from UTC to Local Time, in hours.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This specifies the offset from UTC to Local Time, in hours (fractional
-* hours can be supplied). It is positive for time zones east of Greenwich.
-* AST uses the figure as given, without making any attempt to correct for
-* daylight saving. The default value is zero.
-
-* Applicability:
-* TimeFrame
-* All TimeFrames have this attribute.
-
-*att--
-*/
-astMAKE_CLEAR(TimeFrame,LTOffset,ltoffset,AST__BAD)
-astMAKE_GET(TimeFrame,LTOffset,double,0.0,((this->ltoffset!=AST__BAD)?this->ltoffset:0.0))
-astMAKE_SET(TimeFrame,LTOffset,double,ltoffset,value)
-astMAKE_TEST(TimeFrame,LTOffset,( this->ltoffset != AST__BAD ))
-
-/*
-*att++
-* Name:
-* AlignTimeScale
-
-* Purpose:
-* Time scale to use when aligning TimeFrames.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute controls how a TimeFrame behaves when it is used (by
-c astFindFrame or astConvert) as a template to match another (target)
-f AST_FINDFRAME or AST_CONVERT) as a template to match another (target)
-* TimeFrame. It identifies the time scale in which alignment is
-* to occur. See the TimeScale attribute for a desription of the values
-* which may be assigned to this attribute. The default AlignTimeScale
-* value depends on the current value of TimeScale: if TimeScale is
-* UT1, GMST, LMST or LAST, the default for AlignTimeScale is UT1, for all
-* other TimeScales the default is TAI.
-*
-c When astFindFrame or astConvert is used on two TimeFrames (potentially
-f When AST_FindFrame or AST_CONVERT is used on two TimeFrames (potentially
-* describing different time coordinate systems), it returns a Mapping
-* which can be used to transform a position in one TimeFrame into the
-* corresponding position in the other. The Mapping is made up of the
-* following steps in the indicated order:
-*
-* - Map values from the system used by the target (MJD, JD, etc) to the
-* system specified by the AlignSystem attribute.
-*
-* - Map these values from the target's time scale to the time scale
-* specified by the AlignTimeScale attribute.
-*
-* - Map these values from the time scale specified by the AlignTimeScale
-* attribute, to the template's time scale.
-*
-* - Map these values from the system specified by the AlignSystem
-* attribute, to the system used by the template.
-
-* Applicability:
-* TimeFrame
-* All TimeFrames have this attribute.
-
-*att--
-*/
-astMAKE_TEST(TimeFrame,AlignTimeScale,( this->aligntimescale != AST__BADTS ))
-astMAKE_CLEAR(TimeFrame,AlignTimeScale,aligntimescale,AST__BADTS)
-astMAKE_SET(TimeFrame,AlignTimeScale,AstTimeScaleType,aligntimescale,(
- ( ( value >= FIRST_TS ) && ( value <= LAST_TS ) ) ?
- value :
- ( astError( AST__ATTIN, "%s(%s): Bad value (%d) "
- "given for AlignTimeScale attribute.", status,
- "astSetAlignTimeScale", astGetClass( this ), (int) value ),
-
-/* Leave the value unchanged on error. */
- this->aligntimescale ) ) )
-
-/*
-*att++
-* Name:
-* TimeScale
-
-* Purpose:
-* Time scale.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute identifies the time scale to which the time axis values
-* of a TimeFrame refer, and may take any of the values listed in the
-* "Time Scales" section (below).
-*
-* The default TimeScale value depends on the current System value; if
-* the current TimeFrame system is "Besselian epoch" the default is
-* "TT", otherwise it is "TAI". Note, if the System attribute is set
-* so that the TimeFrame represents Besselian Epoch, then an error
-* will be reported if an attempt is made to set the TimeScale to
-* anything other than TT.
-*
-* Note, the supported time scales fall into two groups. The first group
-* containing UT1, GMST, LAST and LMST define time in terms of the
-* orientation of the earth. The second group (containing all the remaining
-* time scales) define time in terms of an atomic process. Since the rate of
-* rotation of the earth varies in an unpredictable way, conversion between
-* two timescales in different groups relies on a value being supplied for
-* the Dut1 attribute (defined by the parent Frame class). This attribute
-* specifies the difference between the UT1 and UTC time scales, in seconds,
-* and defaults to zero. See the documentation for the Dut1 attribute for
-* further details.
-
-* Applicability:
-* TimeFrame
-* All TimeFrames have this attribute.
-
-* Time Scales:
-* The TimeFrame class supports the following TimeScale values (all are
-* case-insensitive):
-*
-* - "TAI" - International Atomic Time
-* - "UTC" - Coordinated Universal Time
-* - "UT1" - Universal Time
-* - "GMST" - Greenwich Mean Sidereal Time
-* - "LAST" - Local Apparent Sidereal Time
-* - "LMST" - Local Mean Sidereal Time
-* - "TT" - Terrestrial Time
-* - "TDB" - Barycentric Dynamical Time
-* - "TCB" - Barycentric Coordinate Time
-* - "TCG" - Geocentric Coordinate Time
-* - "LT" - Local Time (the offset from UTC is given by attribute LTOffset)
-*
-* An very informative description of these and other time scales is
-* available at http://www.ucolick.org/~sla/leapsecs/timescales.html.
-
-* UTC Warnings:
-* UTC should ideally be expressed using separate hours, minutes and
-* seconds fields (or at least in seconds for a given date) if leap seconds
-* are to be taken into account. Since the TimeFrame class represents
-* each moment in time using a single floating point number (the axis value)
-* there will be an ambiguity during a leap second. Thus an error of up to
-* 1 second can result when using AST to convert a UTC time to another
-* time scale if the time occurs within a leap second. Leap seconds
-* occur at most twice a year, and are introduced to take account of
-* variation in the rotation of the earth. The most recent leap second
-* occurred on 1st January 1999. Although in the vast majority of cases
-* leap second ambiguities won't matter, there are potential problems in
-* on-line data acquisition systems and in critical applications involving
-* taking the difference between two times.
-
-*att--
-*/
-astMAKE_TEST(TimeFrame,TimeScale,( this->timescale != AST__BADTS ))
-
-/* Copy constructor. */
-/* ----------------- */
-
-/* Destructor. */
-/* ----------- */
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for TimeFrame objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the TimeFrame class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the TimeFrame whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstTimeFrame *this; /* Pointer to the TimeFrame structure */
- AstTimeScaleType ts; /* TimeScale attribute value */
- const char *sval; /* Pointer to string value */
- double dval; /* Double value */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the TimeFrame structure. */
- this = (AstTimeFrame *) this_object;
-
-/* Write out values representing the instance variables for the
- TimeFrame class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* TimeScale. */
-/* ---------- */
- set = TestTimeScale( this, status );
- ts = set ? GetTimeScale( this, status ) : astGetTimeScale( this );
-
-/* If set, convert explicitly to a string for the external
- representation. */
- sval = "";
- if ( set ) {
- if ( astOK ) {
- sval = TimeScaleString( ts, status );
-
-/* Report an error if the TimeScale value was not recognised. */
- if ( !sval ) {
- astError( AST__SCSIN,
- "%s(%s): Corrupt %s contains invalid time scale "
- "identification code (%d).", status, "astWrite",
- astGetClass( channel ), astGetClass( this ), (int) ts );
- }
- }
-
-/* If not set, use astGetAttrib which returns a string value using
- (possibly over-ridden) methods. */
- } else {
- sval = astGetAttrib( this_object, "timescale" );
- }
-
-/* Write out the value. */
- astWriteString( channel, "TmScl", set, 1, sval, "Time scale" );
-
-/* AlignTimeScale. */
-/* --------------- */
- set = TestAlignTimeScale( this, status );
- ts = set ? GetAlignTimeScale( this, status ) : astGetAlignTimeScale( this );
-
-/* If set, convert explicitly to a string for the external representation. */
- if ( set ) {
- if ( astOK ) {
- sval = TimeScaleString( ts, status );
-
-/* Report an error if the TimeScale value was not recognised. */
- if ( !sval ) {
- astError( AST__SCSIN,
- "%s(%s): Corrupt %s contains invalid alignment time "
- "scale identification code (%d).", status, "astWrite",
- astGetClass( channel ), astGetClass( this ), (int) ts );
- }
- }
-
-/* If not set, use astGetAttrib which returns a string value using
- (possibly over-ridden) methods. */
- } else {
- sval = astGetAttrib( this_object, "aligntimescale" );
- }
-
-/* Write out the value. */
- astWriteString( channel, "ATmScl", set, 0, sval, "Alignment time scale" );
-
-/* TimeOrigin. */
-/* ----------- */
- set = TestTimeOrigin( this, status );
- dval = set ? GetTimeOrigin( this, status ) : astGetTimeOrigin( this );
- astWriteDouble( channel, "TmOrg", set, 0, dval, "Time offset" );
-
-/* LTOffset. */
-/* --------- */
- set = TestLTOffset( this, status );
- dval = set ? GetLTOffset( this, status ) : astGetLTOffset( this );
- astWriteDouble( channel, "LTOff", set, 0, dval, "Local Time offset from UTC" );
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsATimeFrame and astCheckTimeFrame functions using the
- macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(TimeFrame,Frame)
-astMAKE_CHECK(TimeFrame)
-
-AstTimeFrame *astTimeFrame_( const char *options, int *status, ...) {
-/*
-*+
-* Name:
-* astTimeFrame
-
-* Purpose:
-* Create a TimeFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "timeframe.h"
-* AstTimeFrame *astTimeFrame( const char *options, int *status, ... )
-
-* Class Membership:
-* TimeFrame constructor.
-
-* Description:
-* This function creates a new TimeFrame and optionally initialises its
-* attributes.
-
-* Parameters:
-* options
-* Pointer to a null terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new TimeFrame. The syntax used is the same as for the
-* astSet method and may include "printf" format specifiers identified
-* by "%" symbols in the normal way.
-* status
-* Pointer to the inherited status variable.
-* ...
-* If the "options" string contains "%" format specifiers, then an
-* optional list of arguments may follow it in order to supply values to
-* be substituted for these specifiers. The rules for supplying these
-* are identical to those for the astSet method (and for the C "printf"
-* function).
-
-* Returned Value:
-* A pointer to the new TimeFrame.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-
-* Implementation Notes:
-* - This function implements the basic TimeFrame constructor which
-* is available via the protected interface to the TimeFrame class.
-* A public interface is provided by the astTimeFrameId_ function.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMapping *um; /* Mapping from default to actual units */
- AstTimeFrame *new; /* Pointer to new TimeFrame */
- AstSystemType s; /* System */
- const char *u; /* Units string */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the TimeFrame, allocating memory and initialising the virtual
- function table as well if necessary. */
- new = astInitTimeFrame( NULL, sizeof( AstTimeFrame ), !class_init,
- &class_vtab, "TimeFrame" );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new TimeFrame's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* Check the Units are appropriate for the System. */
- u = astGetUnit( new, 0 );
- s = astGetSystem( new );
- um = astUnitMapper( DefUnit( s, "astTimeFrame", "TimeFrame", status ),
- u, NULL, NULL );
- if( um ) {
- um = astAnnul( um );
- } else {
- astError( AST__BADUN, "astTimeFrame: Inappropriate units (%s) "
- "specified for a %s axis.", status, u, SystemLabel( s, status ) );
- }
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new TimeFrame. */
- return new;
-}
-
-AstTimeFrame *astInitTimeFrame_( void *mem, size_t size, int init,
- AstTimeFrameVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitTimeFrame
-
-* Purpose:
-* Initialise a TimeFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "timeframe.h"
-* AstTimeFrame *astInitTimeFrame( void *mem, size_t size, int init,
-* AstFrameVtab *vtab, const char *name )
-
-* Class Membership:
-* TimeFrame initialiser.
-
-* Description:
-* This function is provided for use by class implementations to
-* initialise a new TimeFrame object. It allocates memory (if
-* necessary) to accommodate the TimeFrame plus any additional data
-* associated with the derived class. It then initialises a
-* TimeFrame structure at the start of this memory. If the "init"
-* flag is set, it also initialises the contents of a virtual function
-* table for a TimeFrame at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the TimeFrame is to be
-* created. This must be of sufficient size to accommodate the
-* TimeFrame data (sizeof(TimeFrame)) plus any data used by
-* the derived class. If a value of NULL is given, this function
-* will allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the TimeFrame (plus derived
-* class data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also stored
-* in the TimeFrame structure, so a valid value must be supplied
-* even if not required for allocating memory.
-* init
-* A logical flag indicating if the TimeFrame's virtual function
-* table is to be initialised. If this value is non-zero, the
-* virtual function table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new TimeFrame.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object belongs
-* (it is this pointer value that will subsequently be returned by
-* the astGetClass method).
-
-* Returned Value:
-* A pointer to the new TimeFrame.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstTimeFrame *new; /* Pointer to the new TimeFrame */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitTimeFrameVtab( vtab, name );
-
-/* Initialise a 1D Frame structure (the parent class) as the first component
- within the TimeFrame structure, allocating memory if necessary. */
- new = (AstTimeFrame *) astInitFrame( mem, size, 0,
- (AstFrameVtab *) vtab, name, 1 );
-
- if ( astOK ) {
-
-/* Initialise the TimeFrame data. */
-/* ----------------------------- */
-/* Initialise all attributes to their "undefined" values. */
- new->timeorigin = AST__BAD;
- new->ltoffset = AST__BAD;
- new->timescale = AST__BADTS;
- new->aligntimescale = AST__BADTS;
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
-
- }
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstTimeFrame *astLoadTimeFrame_( void *mem, size_t size,
- AstTimeFrameVtab *vtab,
- const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadTimeFrame
-
-* Purpose:
-* Load a TimeFrame.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "timeframe.h"
-* AstTimeFrame *astLoadTimeFrame( void *mem, size_t size,
-* AstTimeFrameVtab *vtab,
-* const char *name, AstChannel *channel )
-
-* Class Membership:
-* TimeFrame loader.
-
-* Description:
-* This function is provided to load a new TimeFrame using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* TimeFrame structure in this memory, using data read from the
-* input Channel.
-
-* Parameters:
-* mem
-* A pointer to the memory into which the TimeFrame is to be
-* loaded. This must be of sufficient size to accommodate the
-* TimeFrame data (sizeof(TimeFrame)) plus any data used by
-* derived classes. If a value of NULL is given, this function
-* will allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the TimeFrame (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the TimeFrame structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstTimeFrame) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new TimeFrame. If this is NULL, a pointer
-* to the (static) virtual function table for the TimeFrame class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "TimeFrame" is used instead.
-
-* Returned Value:
-* A pointer to the new TimeFrame.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstTimeFrame *new; /* Pointer to the new TimeFrame */
- char *sval; /* Pointer to string value */
- double obslat; /* Value for ObsLat attribute */
- double obslon; /* Value for ObsLon attribute */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this TimeFrame. In this case the
- TimeFrame belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstTimeFrame );
- vtab = &class_vtab;
- name = "TimeFrame";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitTimeFrameVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built TimeFrame. */
- new = astLoadFrame( mem, size, (AstFrameVtab *) vtab, name,
- channel );
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "TimeFrame" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* TimeScale. */
-/* ---------- */
-/* Set the default and read the external representation as a string. */
- new->timescale = AST__BADTS;
- sval = astReadString( channel, "tmscl", NULL );
-
-/* If a value was read, convert from a string to a TimeScale code. */
- if ( sval ) {
- if ( astOK ) {
- new->timescale = TimeScaleCode( sval, status );
-
-/* Report an error if the value wasn't recognised. */
- if ( new->timescale == AST__BADTS ) {
- astError( AST__ATTIN,
- "astRead(%s): Invalid time scale description "
- "\"%s\".", status, astGetClass( channel ), sval );
- }
- }
-
-/* Free the string value. */
- sval = astFree( sval );
- }
-
-/* AlignTimeScale. */
-/* --------------- */
-/* Set the default and read the external representation as a string. */
- new->aligntimescale = AST__BADTS;
- sval = astReadString( channel, "atmscl", NULL );
-
-/* If a value was read, convert from a string to a TimeScale code. */
- if ( sval ) {
- if ( astOK ) {
- new->aligntimescale = TimeScaleCode( sval, status );
-
-/* Report an error if the value wasn't recognised. */
- if ( new->aligntimescale == AST__BADTS ) {
- astError( AST__ATTIN,
- "astRead(%s): Invalid alignment time scale "
- "description \"%s\".", status, astGetClass( channel ), sval );
- }
- }
-
-/* Free the string value. */
- sval = astFree( sval );
- }
-
-/* ClockLat. */
-/* --------- */
-/* Retained for backward compatibility with older versions of AST in
- which TimeFrame had a ClockLat attribute (now ObsLat is used instead). */
- if( !astTestObsLat( new ) ) {
- obslat = astReadDouble( channel, "cllat", AST__BAD );
- if ( obslat != AST__BAD ) astSetObsLat( new, obslat );
- }
-
-/* ClockLon. */
-/* ------- */
-/* Retained for backward compatibility with older versions of AST in
- which TimeFrame had a ClockLon attribute (now ObsLon is used instead). */
- if( !astTestObsLon( new ) ) {
- obslon = astReadDouble( channel, "cllon", AST__BAD );
- if ( obslon != AST__BAD ) astSetObsLon( new, obslon );
- }
-
-/* TimeOrigin. */
-/* --------- */
- new->timeorigin = astReadDouble( channel, "tmorg", AST__BAD );
- if ( TestTimeOrigin( new, status ) ) SetTimeOrigin( new, new->timeorigin, status );
-
-/* LTOffset. */
-/* --------- */
- new->ltoffset = astReadDouble( channel, "ltoff", AST__BAD );
- if ( TestLTOffset( new, status ) ) SetLTOffset( new, new->ltoffset, status );
-
-/* If an error occurred, clean up by deleting the new TimeFrame. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new TimeFrame pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-void astSetTimeScale_( AstTimeFrame *this, AstTimeScaleType value, int *status ){
- if ( !astOK ) return;
- (**astMEMBER(this,TimeFrame,SetTimeScale))(this,value, status );
-}
-
-void astClearTimeScale_( AstTimeFrame *this, int *status ){
- if ( !astOK ) return;
- (**astMEMBER(this,TimeFrame,ClearTimeScale))(this, status );
-}
-
-AstTimeScaleType astGetAlignTimeScale_( AstTimeFrame *this, int *status ) {
- if ( !astOK ) return AST__BADTS;
- return (**astMEMBER(this,TimeFrame,GetAlignTimeScale))(this, status );
-}
-
-AstTimeScaleType astGetTimeScale_( AstTimeFrame *this, int *status ) {
- if ( !astOK ) return AST__BADTS;
- return (**astMEMBER(this,TimeFrame,GetTimeScale))(this, status );
-}
-
-double astCurrentTime_( AstTimeFrame *this, int *status ){
- if ( !astOK ) return AST__BAD;
- return (**astMEMBER(this,TimeFrame,CurrentTime))(this, status );
-}
-
-
-
-/* Special public interface functions. */
-/* =================================== */
-/* These provide the public interface to certain special functions
- whose public interface cannot be handled using macros (such as
- astINVOKE) alone. In general, they are named after the
- corresponding protected version of the function, but with "Id"
- appended to the name. */
-
-/* Public Interface Function Prototypes. */
-/* ------------------------------------- */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstTimeFrame *astTimeFrameId_( const char *, ... );
-
-/* Special interface function implementations. */
-/* ------------------------------------------- */
-AstTimeFrame *astTimeFrameId_( const char *options, ... ) {
-/*
-*++
-* Name:
-c astTimeFrame
-f AST_TIMEFRAME
-
-* Purpose:
-* Create a TimeFrame.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "timeframe.h"
-c AstTimeFrame *astTimeFrame( const char *options, ... )
-f RESULT = AST_TIMEFRAME( OPTIONS, STATUS )
-
-* Class Membership:
-* TimeFrame constructor.
-
-* Description:
-* This function creates a new TimeFrame and optionally initialises
-* its attributes.
-*
-* A TimeFrame is a specialised form of one-dimensional Frame which
-* represents various coordinate systems used to describe positions in
-* time.
-*
-* A TimeFrame represents a moment in time as either an Modified Julian
-* Date (MJD), a Julian Date (JD), a Besselian epoch or a Julian epoch,
-* as determined by the System attribute. Optionally, a zero point can be
-* specified (using attribute TimeOrigin) which results in the TimeFrame
-* representing time offsets from the specified zero point.
-*
-* Even though JD and MJD are defined as being in units of days, the
-* TimeFrame class allows other units to be used (via the Unit attribute)
-* on the basis of simple scalings (60 seconds = 1 minute, 60 minutes = 1
-* hour, 24 hours = 1 day, 365.25 days = 1 year). Likewise, Julian epochs
-* can be described in units other than the usual years. Besselian epoch
-* are always represented in units of (tropical) years.
-*
-* The TimeScale attribute allows the time scale to be specified (that
-* is, the physical proces used to define the rate of flow of time).
-* MJD, JD and Julian epoch can be used to represent a time in any
-* supported time scale. However, Besselian epoch may only be used with the
-* "TT" (Terrestrial Time) time scale. The list of supported time scales
-* includes universal time and siderial time. Strictly, these represent
-* angles rather than time scales, but are included in the list since
-* they are in common use and are often thought of as time scales.
-*
-* When a time value is formatted it can be formated either as a simple
-* floating point value, or as a Gregorian date (see the Format
-* attribute).
-
-* Parameters:
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new TimeFrame. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-c If no initialisation is required, a zero-length string may be
-c supplied.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new TimeFrame. The syntax used is identical to that for the
-f AST_SET routine. If no initialisation is required, a blank
-f value may be supplied.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astTimeFrame()
-f AST_TIMEFRAME = INTEGER
-* A pointer to the new TimeFrame.
-
-* Notes:
-* - When conversion between two TimeFrames is requested (as when
-c supplying TimeFrames to astConvert),
-f supplying TimeFrames AST_CONVERT),
-* account will be taken of the nature of the time coordinate systems
-* they represent, together with any qualifying time scale, offset,
-* unit, etc. The AlignSystem and AlignTimeScale attributes will also be
-* taken into account.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-
-* Implementation Notes:
-* - This function implements the external (public) interface to
-* the astTimeFrame constructor function. It returns an ID value
-* (instead of a true C pointer) to external users, and must be
-* provided because astTimeFrame_ has a variable argument list which
-* cannot be encapsulated in a macro (where this conversion would
-* otherwise occur).
-* - The variable argument list also prevents this function from
-* invoking astTimeFrame_ directly, so it must be a
-* re-implementation of it in all respects, except for the final
-* conversion of the result to an ID value.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMapping *um; /* Mapping from default to actual units */
- AstTimeFrame *new; /* Pointer to new TimeFrame */
- AstSystemType s; /* System */
- const char *u; /* Units string */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the TimeFrame, allocating memory and initialising the virtual
- function table as well if necessary. */
- new = astInitTimeFrame( NULL, sizeof( AstTimeFrame ), !class_init,
- &class_vtab, "TimeFrame" );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new TimeFrame's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* Check the Units are appropriate for the System. */
- u = astGetUnit( new, 0 );
- s = astGetSystem( new );
- um = astUnitMapper( DefUnit( s, "astTimeFrame", "TimeFrame", status ),
- u, NULL, NULL );
- if( um ) {
- um = astAnnul( um );
- } else {
- astError( AST__BADUN, "astTimeFrame: Inappropriate units (%s) "
- "specified for a %s axis.", status, u, SystemLabel( s, status ) );
- }
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new TimeFrame. */
- return astMakeId( new );
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/timeframe.h b/ast-5.3-1/timeframe.h
deleted file mode 100644
index 36739af..0000000
--- a/ast-5.3-1/timeframe.h
+++ /dev/null
@@ -1,320 +0,0 @@
-#if !defined( TIMEFRAME_INCLUDED ) /* Include this file only once */
-#define TIMEFRAME_INCLUDED
-/*
-*+
-* Name:
-* timeframe.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the TimeFrame class.
-
-* Invocation:
-* #include "timeframe.h"
-
-* Description:
-* This include file defines the interface to the TimeFrame class
-* and provides the type definitions, function prototypes and
-* macros, etc. needed to use this class.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 20-MAY-2005 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h" /* Base Object class */
-#include "frame.h" /* Parent Frame class */
-#include "skyframe.h" /* Celestial coordinate systems */
-
-/* Macros. */
-/* ======= */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-
-#if defined(astCLASS) /* Protected */
-
-/* Values used to represent different System attribute values. */
-#define AST__MJD 1
-#define AST__JD 2
-#define AST__JEPOCH 3
-#define AST__BEPOCH 4
-
-/* Values used to represent different TimeScale attribute values. */
-#define AST__BADTS 0
-#define AST__TAI 1
-#define AST__UTC 2
-#define AST__UT1 3
-#define AST__GMST 4
-#define AST__LAST 5
-#define AST__LMST 6
-#define AST__TT 7
-#define AST__TDB 8
-#define AST__TCB 9
-#define AST__TCG 10
-#define AST__LT 11
-
-/* Define constants used to size global arrays in this module. */
-#define AST__TIMEFRAME_FORMAT_BUFF_LEN 200
-#define AST__TIMEFRAME_GETATTRIB_BUFF_LEN 50
-#define AST__TIMEFRAME_GETLABEL_BUFF_LEN 200
-#define AST__TIMEFRAME_GETSYMBOL_BUFF_LEN 20
-#define AST__TIMEFRAME_GETTITLE_BUFF_LEN 200
-
-#endif
-
-/* Type Definitions. */
-/* ================= */
-
-/* Integer type used to store the TimeScale attribute. */
-typedef int AstTimeScaleType;
-
-/* TimeFrame structure. */
-/* ------------------- */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstTimeFrame {
-
-/* Attributes inherited from the parent class. */
- AstFrame frame; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- double ltoffset; /* Offset from UTC to Local Time */
- double timeorigin; /* Zero point for time axis */
- AstTimeScaleType timescale; /* Time scale */
- AstTimeScaleType aligntimescale; /* Alignment time scale */
-} AstTimeFrame;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all objects in the
- class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstTimeFrameVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstFrameVtab frame_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- double (* CurrentTime)( AstTimeFrame *, int * );
-
- double (* GetLTOffset)( AstTimeFrame *, int * );
- int (* TestLTOffset)( AstTimeFrame *, int * );
- void (* ClearLTOffset)( AstTimeFrame *, int * );
- void (* SetLTOffset)( AstTimeFrame *, double, int * );
-
- double (* GetTimeOrigin)( AstTimeFrame *, int * );
- int (* TestTimeOrigin)( AstTimeFrame *, int * );
- void (* ClearTimeOrigin)( AstTimeFrame *, int * );
- void (* SetTimeOrigin)( AstTimeFrame *, double, int * );
-
- AstTimeScaleType (* GetTimeScale)( AstTimeFrame *, int * );
- int (* TestTimeScale)( AstTimeFrame *, int * );
- void (* ClearTimeScale)( AstTimeFrame *, int * );
- void (* SetTimeScale)( AstTimeFrame *, AstTimeScaleType, int * );
-
- AstTimeScaleType (* GetAlignTimeScale)( AstTimeFrame *, int * );
- int (* TestAlignTimeScale)( AstTimeFrame *, int * );
- void (* ClearAlignTimeScale)( AstTimeFrame *, int * );
- void (* SetAlignTimeScale)( AstTimeFrame *, AstTimeScaleType, int * );
-
-} AstTimeFrameVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstTimeFrameGlobals {
- AstTimeFrameVtab Class_Vtab;
- int Class_Init;
- char Format_Buff[ AST__TIMEFRAME_FORMAT_BUFF_LEN + 1 ];
- char GetAttrib_Buff[ AST__TIMEFRAME_GETATTRIB_BUFF_LEN + 1 ];
- char GetLabel_Buff[ AST__TIMEFRAME_GETLABEL_BUFF_LEN + 1 ];
- char GetSymbol_Buff[ AST__TIMEFRAME_GETSYMBOL_BUFF_LEN + 1 ];
- char GetTitle_Buff[ AST__TIMEFRAME_GETTITLE_BUFF_LEN + 1 ];
-} AstTimeFrameGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(TimeFrame) /* Check class membership */
-astPROTO_ISA(TimeFrame) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected */
-AstTimeFrame *astTimeFrame_( const char *, int *, ...);
-#else
-AstTimeFrame *astTimeFrameId_( const char *, ... );
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstTimeFrame *astInitTimeFrame_( void *, size_t, int, AstTimeFrameVtab *,
- const char *, int * );
-
-/* Vtab initialiser. */
-void astInitTimeFrameVtab_( AstTimeFrameVtab *, const char *, int * );
-
-/* Loader. */
-AstTimeFrame *astLoadTimeFrame_( void *, size_t, AstTimeFrameVtab *,
- const char *, AstChannel *channel, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitTimeFrameGlobals_( AstTimeFrameGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-double astCurrentTime_( AstTimeFrame *, int * );
-
-#if defined(astCLASS) /* Protected */
-
-double astGetLTOffset_( AstTimeFrame *, int * );
-int astTestLTOffset_( AstTimeFrame *, int * );
-void astClearLTOffset_( AstTimeFrame *, int * );
-void astSetLTOffset_( AstTimeFrame *, double, int * );
-
-double astGetTimeOrigin_( AstTimeFrame *, int * );
-int astTestTimeOrigin_( AstTimeFrame *, int * );
-void astClearTimeOrigin_( AstTimeFrame *, int * );
-void astSetTimeOrigin_( AstTimeFrame *, double, int * );
-
-AstTimeScaleType astGetTimeScale_( AstTimeFrame *, int * );
-int astTestTimeScale_( AstTimeFrame *, int * );
-void astClearTimeScale_( AstTimeFrame *, int * );
-void astSetTimeScale_( AstTimeFrame *, AstTimeScaleType, int * );
-
-AstTimeScaleType astGetAlignTimeScale_( AstTimeFrame *, int * );
-int astTestAlignTimeScale_( AstTimeFrame *, int * );
-void astClearAlignTimeScale_( AstTimeFrame *, int * );
-void astSetAlignTimeScale_( AstTimeFrame *, AstTimeScaleType, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckTimeFrame(this) astINVOKE_CHECK(TimeFrame,this,0)
-#define astVerifyTimeFrame(this) astINVOKE_CHECK(TimeFrame,this,1)
-
-/* Test class membership. */
-#define astIsATimeFrame(this) astINVOKE_ISA(TimeFrame,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected */
-#define astTimeFrame astINVOKE(F,astTimeFrame_)
-#else
-#define astTimeFrame astINVOKE(F,astTimeFrameId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitTimeFrame(mem,size,init,vtab,name) \
-astINVOKE(O,astInitTimeFrame_(mem,size,init,vtab,name,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitTimeFrameVtab(vtab,name) astINVOKE(V,astInitTimeFrameVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadTimeFrame(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadTimeFrame_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-
-/* None. */
-
-/* Interfaces to protected member functions. */
-/* ----------------------------------------- */
-/* Here we make use of astCheckTimeFrame to validate TimeFrame pointers
- before use. This provides a contextual error report if a pointer to
- the wrong sort of object is supplied. */
-
-#define astCurrentTime(this) astINVOKE(V,astCurrentTime_(astCheckTimeFrame(this),STATUS_PTR))
-
-#if defined(astCLASS) /* Protected */
-
-#define astGetTimeOrigin(this) astINVOKE(V,astGetTimeOrigin_(astCheckTimeFrame(this),STATUS_PTR))
-#define astTestTimeOrigin(this) astINVOKE(V,astTestTimeOrigin_(astCheckTimeFrame(this),STATUS_PTR))
-#define astClearTimeOrigin(this) astINVOKE(V,astClearTimeOrigin_(astCheckTimeFrame(this),STATUS_PTR))
-#define astSetTimeOrigin(this,value) astINVOKE(V,astSetTimeOrigin_(astCheckTimeFrame(this),value,STATUS_PTR))
-
-#define astGetLTOffset(this) astINVOKE(V,astGetLTOffset_(astCheckTimeFrame(this),STATUS_PTR))
-#define astTestLTOffset(this) astINVOKE(V,astTestLTOffset_(astCheckTimeFrame(this),STATUS_PTR))
-#define astClearLTOffset(this) astINVOKE(V,astClearLTOffset_(astCheckTimeFrame(this),STATUS_PTR))
-#define astSetLTOffset(this,value) astINVOKE(V,astSetLTOffset_(astCheckTimeFrame(this),value,STATUS_PTR))
-
-#define astGetTimeScale(this) astINVOKE(V,astGetTimeScale_(astCheckTimeFrame(this),STATUS_PTR))
-#define astTestTimeScale(this) astINVOKE(V,astTestTimeScale_(astCheckTimeFrame(this),STATUS_PTR))
-#define astClearTimeScale(this) astINVOKE(V,astClearTimeScale_(astCheckTimeFrame(this),STATUS_PTR))
-#define astSetTimeScale(this,value) astINVOKE(V,astSetTimeScale_(astCheckTimeFrame(this),value,STATUS_PTR))
-
-#define astGetAlignTimeScale(this) astINVOKE(V,astGetAlignTimeScale_(astCheckTimeFrame(this),STATUS_PTR))
-#define astTestAlignTimeScale(this) astINVOKE(V,astTestAlignTimeScale_(astCheckTimeFrame(this),STATUS_PTR))
-#define astClearAlignTimeScale(this) astINVOKE(V,astClearAlignTimeScale_(astCheckTimeFrame(this),STATUS_PTR))
-#define astSetAlignTimeScale(this,value) astINVOKE(V,astSetAlignTimeScale_(astCheckTimeFrame(this),value,STATUS_PTR))
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/timemap.c b/ast-5.3-1/timemap.c
deleted file mode 100644
index b66e571..0000000
--- a/ast-5.3-1/timemap.c
+++ /dev/null
@@ -1,5180 +0,0 @@
-/*
-*class++
-* Name:
-* TimeMap
-
-* Purpose:
-* Sequence of time coordinate conversions.
-
-* Constructor Function:
-c astTimeMap (also see astTimeAdd)
-f AST_TIMEMAP (also see AST_TIMEADD)
-
-* Description:
-* A TimeMap is a specialised form of 1-dimensional Mapping which can be
-* used to represent a sequence of conversions between standard time
-* coordinate systems.
-*
-* When a TimeMap is first created, it simply performs a unit
-c (null) Mapping. Using the astTimeAdd
-f (null) Mapping. Using the AST_TIMEADD
-c function, a series of coordinate conversion steps may then be
-f routine, a series of coordinate conversion steps may then be
-* added. This allows multi-step conversions between a variety of
-* time coordinate systems to be assembled out of a set of building
-* blocks.
-*
-* For details of the individual coordinate conversions available,
-c see the description of the astTimeAdd function.
-f see the description of the AST_TIMEADD routine.
-
-* Inheritance:
-* The TimeMap class inherits from the Mapping class.
-
-* Attributes:
-* The TimeMap class does not define any new attributes beyond those
-* which are applicable to all Mappings.
-
-* Functions:
-c In addition to those functions applicable to all Mappings, the
-c following function may also be applied to all TimeMaps:
-f In addition to those routines applicable to all Mappings, the
-f following routine may also be applied to all TimeMaps:
-*
-c - astTimeAdd: Add a time coordinate conversion to an TimeMap
-f - AST_TIMEADD: Add a time coordinate conversion to an TimeMap
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2009 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* NG: Norman Gray (Starlink)
-* DSB: David Berry (Starlink)
-
-* History:
-* 5-Sep-2003 (NG):
-* Original version (drawing heavily on specmap.c)
-* 25-MAY-2005 (DSB):
-* Extensive modifications to make it more AST-like.
-* 10-AUG-2005 (DSB):
-* Add 2006 leap second.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 10-MAY-2006 (DSB):
-* Override astEqual.
-* 15-OCT-2006 (DSB):
-* Add conversions between UT1 and UTC (UTTOUTC and UTCTOUT).
-* 3-APR-2008 (DSB):
-* Only call memcpy if the source and destination pointers are
-* different.
-* 15-APR-2008 (DSB):
-* Add missing "break;" statement to "case AST__LMSTTOGMST:"
-* in Transform.
-* 20-MAY-2008 (DSB):
-* Add conversions between Local Time and UTC (LTTOUTC and UTCTOLT).
-* 18-JUN-2009 (DSB):
-* Add OBSALT to argument list for TTTOTDB and TDBTOTT. Change
-* CLOCKLAT/LON to OBSLAT/LON for consistency with other classes.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS TimeMap
-
-/* Codes to identify time coordinate conversions. */
-#define AST__TIME_NULL 0 /* Null value */
-#define AST__MJDTOMJD 1 /* MJD to MJD */
-#define AST__MJDTOJD 2 /* MJD to JD */
-#define AST__JDTOMJD 3 /* JD to MJD */
-#define AST__MJDTOBEP 4 /* MJD to Besselian epoch */
-#define AST__BEPTOMJD 5 /* Besselian epoch to MJD */
-#define AST__MJDTOJEP 6 /* MJD to Julian epoch */
-#define AST__JEPTOMJD 7 /* Julian epoch to MJD */
-#define AST__TAITOUTC 8 /* TAI to UTC */
-#define AST__UTCTOTAI 9 /* UTC to TAI */
-#define AST__TTTOTAI 10 /* TT to TAI */
-#define AST__TAITOTT 11 /* TAI to TT */
-#define AST__TDBTOTT 12 /* TDB to TT */
-#define AST__TTTOTDB 13 /* TT to TDB */
-#define AST__TCGTOTT 14 /* TCG to TT */
-#define AST__TTTOTCG 15 /* TT to TCG */
-#define AST__TCBTOTDB 16 /* TCB to TDB */
-#define AST__TDBTOTCB 17 /* TDB to TCB */
-#define AST__UTTOGMST 18 /* UT to GMST */
-#define AST__GMSTTOUT 19 /* GMST to UT1 */
-#define AST__GMSTTOLMST 20 /* GMST to LMST */
-#define AST__LMSTTOGMST 21 /* LMST to GMST */
-#define AST__LASTTOLMST 22 /* LAST to LMST */
-#define AST__LMSTTOLAST 23 /* LMST to LAST */
-#define AST__UTTOUTC 24 /* UT1 to UTC */
-#define AST__UTCTOUT 25 /* UTC to UT1 */
-#define AST__LTTOUTC 26 /* Local Time to UTC */
-#define AST__UTCTOLT 27 /* UTC to Local Time */
-
-/* Maximum number of arguments required by a conversion. */
-#define MAX_ARGS 6
-
-/* The alphabet (used for generating keywords for arguments). */
-#define ALPHABET "abcdefghijklmnopqrstuvwxyz"
-
-/* Angle conversion */
-#define PI 3.1415926535897932384626433832795028841971693993751
-#define D2PI (2*PI)
-#define PIBY2 (PI/2.0)
-#define D2R (PI/180.0)
-#define R2D (180.0/PI)
-
-/* Other constants */
-#define SPD 86400
-#define LG 6.969290134E-10
-#define LB 1.55051976772E-8
-#define P0 6.55E-5
-#define TTOFF 32.184
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
- compare bad values directory because of the danger of floating point
- exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "pal.h" /* SLALIB interface */
-#include "slamap.h" /* Spatial sla mappings */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "mapping.h" /* Coordinate Mappings (parent class) */
-#include "unitmap.h" /* Unit (null) Mappings */
-#include "timemap.h" /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static double (* parent_rate)( AstMapping *, double *, int, int, int * );
-
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(TimeMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(TimeMap,Class_Init)
-#define class_vtab astGLOBAL(TimeMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstTimeMapVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstTimeMap *astTimeMapId_( int, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *CvtString( int, const char **, int *, int *, const char *[ MAX_ARGS ], int * );
-static double Gmsta( double, double, int, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static double Rcc( double, double, double, double, double, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int CvtCode( const char *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static void AddArgs( int, double *, int * );
-static void AddTimeCvt( AstTimeMap *, int, const double *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void TimeAdd( AstTimeMap *, const char *, const double[], int * );
-
-static int GetObjSize( AstObject *, int * );
-/* Member functions. */
-/* ================= */
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two TimeMaps are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timemap.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* TimeMap member function (over-rides the astEqual protected
-* method inherited from the astMapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two TimeMaps are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Object (a TimeMap).
-* that
-* Pointer to the second Object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the TimeMaps are equivalent, zero otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstTimeMap *that;
- AstTimeMap *this;
- const char *argdesc[ MAX_ARGS ];
- const char *comment;
- int i, j;
- int nargs;
- int nin;
- int nout;
- int result;
- int szargs;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain pointers to the two TimeMap structures. */
- this = (AstTimeMap *) this_object;
- that = (AstTimeMap *) that_object;
-
-/* Check the second object is a TimeMap. We know the first is a
- TimeMap since we have arrived at this implementation of the virtual
- function. */
- if( astIsATimeMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
- nin = astGetNin( this );
- nout = astGetNout( this );
- if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two TimeMaps differ, it may still be possible
- for them to be equivalent. First compare the TimeMaps if their Invert
- flags are the same. In this case all the attributes of the two TimeMaps
- must be identical. */
- if( astGetInvert( this ) == astGetInvert( that ) ) {
- if( this->ncvt == that->ncvt ) {
- result = 1;
- for( i = 0; i < this->ncvt && result; i++ ) {
- if( this->cvttype[ i ] != that->cvttype[ i ] ) {
- result = 0;
- } else {
- CvtString( this->cvttype[ i ], &comment, &nargs, &szargs, argdesc, status );
- for( j = 0; j < nargs; j++ ) {
- if( !astEQUAL( this->cvtargs[ i ][ j ],
- that->cvtargs[ i ][ j ] ) ){
- result = 0;
- break;
- }
- }
- }
- }
- }
-
-/* If the Invert flags for the two TimeMaps differ, the attributes of the two
- TimeMaps must be inversely related to each other. */
- } else {
-
-/* In the specific case of a TimeMap, Invert flags must be equal. */
- result = 0;
-
- }
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timemap.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* TimeMap member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied TimeMap,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the TimeMap.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstTimeMap *this; /* Pointer to TimeMap structure */
- int result; /* Result value to return */
- int cvt; /* Loop counter for coordinate conversions */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the TimeMap structure. */
- this = (AstTimeMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
-
- for ( cvt = 0; cvt < this->ncvt; cvt++ ) {
- result += astTSizeOf( this->cvtargs[ cvt ] );
- }
-
- result += astTSizeOf( this->cvtargs );
- result += astTSizeOf( this->cvttype );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-
-static void AddArgs( int cvttype, double *cvtargs, int *status ) {
-/*
-* Name:
-* AddArgs
-
-* Purpose:
-* Set values for addition conversion arguments.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timemap.h"
-* void AddArgs( int cvttype, double *cvtargs, int *status )
-
-* Class Membership:
-* TimeMap member function.
-
-* Description:
-* This function stores value for additional conversion arguments,
-* based on the values supplied for the user arguments.
-
-* Parameters:
-* cvttype
-* The conversion type.
-* cvtargs
-* The arguments for the conversion.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- double r; /* Distance from Earth axis (AU) */
- double z; /* Distance from plane of Earth equator (AU) */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Test for each valid code value in turn and assign the appropriate
- extra values. */
- switch ( cvttype ) {
-
- case AST__MJDTOMJD:
- cvtargs[ 2 ] = cvtargs[ 0 ] - cvtargs[ 1 ];
- break;
-
- case AST__MJDTOJD:
- cvtargs[ 2 ] = cvtargs[ 0 ] - cvtargs[ 1 ] + 2400000.5;
- break;
-
- case AST__JDTOMJD:
- cvtargs[ 2 ] = cvtargs[ 0 ] - cvtargs[ 1 ] - 2400000.5;
- break;
-
- case AST__MJDTOBEP:
- cvtargs[ 2 ] = palSlaEpb( cvtargs[ 0 ] ) - palSlaEpb( 0.0 ) - cvtargs[ 1 ];
- cvtargs[ 3 ] = palSlaEpb2d( cvtargs[ 1 ] ) - palSlaEpb2d( 0.0 ) - cvtargs[ 0 ];
- break;
-
- case AST__BEPTOMJD:
- cvtargs[ 2 ] = palSlaEpb2d( cvtargs[ 0 ] ) - palSlaEpb2d( 0.0 ) - cvtargs[ 1 ];
- cvtargs[ 3 ] = palSlaEpb( cvtargs[ 1 ] ) - palSlaEpb( 0.0 ) - cvtargs[ 0 ];
- break;
-
- case AST__MJDTOJEP:
- cvtargs[ 2 ] = palSlaEpj( cvtargs[ 0 ] ) - palSlaEpj( 0.0 ) - cvtargs[ 1 ];
- cvtargs[ 3 ] = palSlaEpj2d( cvtargs[ 1 ] ) - palSlaEpj2d( 0.0 ) - cvtargs[ 0 ];
- break;
-
- case AST__JEPTOMJD:
- cvtargs[ 2 ] = palSlaEpj2d( cvtargs[ 0 ] ) - palSlaEpj2d( 0.0 ) - cvtargs[ 1 ];
- cvtargs[ 3 ] = palSlaEpj( cvtargs[ 1 ] ) - palSlaEpj( 0.0 ) - cvtargs[ 0 ];
- break;
-
- case AST__TTTOTDB:
- palSlaGeoc( cvtargs[ 2 ], cvtargs[ 3 ], &r, &z );
- cvtargs[ 4 ] = 0.001*r*AST__AU;
- cvtargs[ 5 ] = 0.001*z*AST__AU;
- break;
-
- case AST__TDBTOTT:
- palSlaGeoc( cvtargs[ 2 ], cvtargs[ 3 ], &r, &z );
- cvtargs[ 4 ] = 0.001*r*AST__AU;
- cvtargs[ 5 ] = 0.001*z*AST__AU;
- break;
-
- case AST__TDBTOTCB:
- cvtargs[ 1 ] = LB*( cvtargs[ 0 ] - (TTOFF/SPD)
- - 43144.0 ) + P0/SPD;
- break;
-
- case AST__TCBTOTDB:
- cvtargs[ 1 ] = LB*( cvtargs[ 0 ] - (TTOFF/SPD)
- - 43144.0 ) + P0/SPD;
- break;
-
- case AST__TTTOTCG:
- cvtargs[ 1 ] = LG*( cvtargs[ 0 ] - (TTOFF/SPD) - 43144.0 );
- break;
-
- case AST__TCGTOTT:
- cvtargs[ 1 ] = LG*( cvtargs[ 0 ] - (TTOFF/SPD) - 43144.0 );
- break;
-
- }
-}
-
-static void AddTimeCvt( AstTimeMap *this, int cvttype, const double *args, int *status ) {
-/*
-* Name:
-* AddTimeCvt
-
-* Purpose:
-* Add a coordinate conversion step to an TimeMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timemap.h"
-* void AddTimeCvt( AstTimeMap *this, int cvttype, const double *args )
-
-* Class Membership:
-* TimeMap member function.
-
-* Description:
-* This function allows one of the supported time coordinate
-* conversions to be appended to a TimeMap. When a TimeMap is first
-* created (using astTimeMap), it simply performs a unit mapping. By
-* using AddTimeCvt repeatedly, a series of coordinate conversions may
-* then be specified which the TimeMap will subsequently perform in
-* sequence. This allows a complex coordinate conversion to be
-* assembled out of the basic building blocks. The TimeMap will also
-* perform the inverse coordinate conversion (applying the individual
-* conversion steps in reverse) if required.
-
-* Parameters:
-* this
-* Pointer to the TimeMap.
-* cvttype
-* A code to identify which time coordinate conversion is to be
-* appended. See the "Coordinate Conversions" section for details
-* of those available.
-* args
-* Pointer to an array of double containing the argument values
-* required to fully specify the required coordinate
-* conversion. The number of arguments depends on the conversion
-* (see the "Coordinate Conversions" section for details). This
-* value is ignored and may be NULL if no arguments are required.
-
-* Returned Value:
-* void.
-
-* Coordinate Conversions:
-* The following values may be supplied for the "cvttype" parameter
-* in order to specify the coordinate conversion to be performed.
-* The argument(s) required to fully specify each conversion are
-* indicated in parentheses after each value, and described at the end
-* of the list. Values for these should be given in the array pointed
-* at by "args".
-*
-* AST__MJDTOMJD( MJDOFF1, MJDOFF2 )
-* Convert Modified Julian Date from one offset to another.
-* AST__MJDTOJD( MJDOFF, JDOFF )
-* Convert Modified Julian Date to Julian Date.
-* AST__JDTOMJD( JDOFF, MJDOFF )
-* Convert Julian Date to Modified Julian Date.
-* AST__MJDTOBEP( MJDOFF, BEPOFF )
-* Convert Modified Julian Date to Besselian epoch.
-* AST__BEPTOMJD( BEPOFF, MJDOFF )
-* Convert Besselian epoch to Modified Julian Date.
-* AST__MJDTOJEP( MJDOFF, JEPOFF )
-* Convert Modified Julian Date to Julian epoch.
-* AST__JEPTOMJD( JEPOFF, MJDOFF )
-* Convert Julian epoch to Modified Julian Date.
-* AST__TAITOUTC( MJDOFF )
-* Convert a TAI MJD to a UTC MJD.
-* AST__UTCTOTAI( MJDOFF )
-* Convert a UTC MJD to a TAI MJD.
-* AST__TAITOTT( MJDOFF )
-* Convert a TAI MJD to a TT MJD.
-* AST__TTTOTAI( MJDOFF )
-* Convert a TT MJD to a TAI MJD.
-* AST__TTTOTDB( MJDOFF, OBSLON, OBSLAT, OBSALT )
-* Convert a TT MJD to a TDB MJD.
-* AST__TDBTOTT( MJDOFF, OBSLON, OBSLAT, OBSALT )
-* Convert a TDB MJD to a TT MJD.
-* AST__TTTOTCG( MJDOFF )
-* Convert a TT MJD to a TCG MJD.
-* AST__TCGTOTT( MJDOFF )
-* Convert a TCG MJD to a TT MJD.
-* AST__TDBTOTCB( MJDOFF)
-* Convert a TAI MJD to a TCB MJD.
-* AST__TCBTOTDB( MJDOFF)
-* Convert a TCB MJD to a TDB MJD.
-* AST__UTTOGMST( MJDOFF )
-* Convert a UT MJD to a GMST MJD.
-* AST__GMSTTOUT( MJDOFF )
-* Convert a GMST MJD to a UT MJD.
-* AST__GMSTTOLMST( MJDOFF, OBSLON, OBSLAT )
-* Convert a GMST MJD to a LMST MJD.
-* AST__LMSTTOGMST( MJDOFF, OBSLON, OBSLAT )
-* Convert a LMST MJD to a GMST MJD.
-* AST__LASTTOLMST( MJDOFF, OBSLON, OBSLAT )
-* Convert a LAST MJD to a LMST MJD.
-* AST__LMSTTOLAST( MJDOFF, OBSLON, OBSLAT )
-* Convert a LMST MJD to a LAST MJD.
-* AST__UTTOUTC( DUT1 )
-* Convert a UT1 MJD to a UTC MJD.
-* AST__UTCTOUT( DUT1 )
-* Convert a UTC MJD to a UT1 MJD.
-* AST__LTTOUTC( LTOFF )
-* Convert a local time MJD to a UTC MJD.
-* AST__UTCTOLT( LTOFF )
-* Convert a UTC MJD to a local time MJD.
-*
-* The units for the values processed by the above conversions are as
-* follows:
-*
-* - MJD, MJDOFF, JD, JDOFF: days
-* - Julian epochs, BEPOFF: Tropical years
-* - Besselian epochs, JEPOFF: Julian years
-*
-* The arguments used in the above conversions are as follows:
-*
-* - MJDOFF: Offset to be added to each MJD value
-* - JDOFF: Offset to be added to each JD value
-* - JEPOFF: Offset to be added to each Julian epoch value
-* - BEPOFF: Offset to be added to each Besselian epoch value
-* - OBSLON: Observer's longitude in radians (+ve westwards)
-* - OBSLAT: Observer's geodetic latitude in radians (+ve northwards)
-* - OBSALT: Observer's geodetic altitude in metres.
-* - DUT1: The value of UT1-UTC
-* - LTOFF: The offset between Local Time and UTC (in hours, positive
-* for time zones east of Greenwich).
-
-* Notes:
-* - The specified conversion is appended only if the TimeMap's
-* Invert attribute is zero. If it is non-zero, this function
-* effectively prefixes the inverse of the conversion specified
-* instead.
-*/
-
-/* Local Variables: */
- const char *argdesc[ MAX_ARGS ]; /* Pointers to argument descriptions */
- const char *comment; /* Pointer to comment string */
- const char *cvt_string; /* Pointer to conversion type string */
- int i; /* Argument index */
- int nargs; /* Number of user-supplied arguments */
- int ncvt; /* Number of coordinate conversions */
- int szargs; /* Size of arguments array */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Validate the coordinate conversion type and obtain the number of
- required user-supplied arguments, and the size of the array in which
- to put the user-supplied arguments (the array may leave room after
- the user-supplied arguments for various useful pre-calculated values). */
- cvt_string = CvtString( cvttype, &comment, &nargs, &szargs, argdesc, status );
-
-/* If the coordinate conversion type was not valid, then report an
- error. */
- if ( astOK && !cvt_string ) {
- astError( AST__TIMIN, "AddTimeCvt(%s): Invalid time coordinate "
- "conversion type (%d).", status, astGetClass( this ),
- (int) cvttype );
- }
-
-/* Note the number of coordinate conversions already stored in the TimeMap. */
- if ( astOK ) {
- ncvt = this->ncvt;
-
-/* Extend the array of conversion types and the array of pointers to
- their argument lists to accommodate the new one. */
- this->cvttype = (int *) astGrow( this->cvttype, ncvt + 1,
- sizeof( int ) );
- this->cvtargs = (double **) astGrow( this->cvtargs, ncvt + 1,
- sizeof( double * ) );
-
-/* Allocate memory for the argument list, putting a pointer to it into
- the TimeMap. */
- this->cvtargs[ ncvt ] = astMalloc( sizeof( double ) * (size_t) szargs );
-
-/* Store the conversion type and increment the conversion count. Also
- copy the supplied arguments into the memory allocated above and put
- suitable values in any elements of the argument array which are beyond
- the end of the user-supplied arguments. These are intermediate values
- calculated on the basis of the user-supplied arguments. */
- if ( astOK ) {
- this->cvttype[ ncvt ] = cvttype;
- for( i = 0; i < nargs; i++ ) this->cvtargs[ ncvt ][ i ] = args[ i ];
- for( i = nargs; i < szargs; i++ ) this->cvtargs[ ncvt ][ i ] = AST__BAD;
- this->ncvt++;
-
-/* Test for each valid code value in turn and assign the appropriate extra values. */
- AddArgs( cvttype, this->cvtargs[ ncvt ], status );
- }
- }
-}
-
-static int CvtCode( const char *cvt_string, int *status ) {
-/*
-* Name:
-* CvtCode
-
-* Purpose:
-* Convert a conversion type from a string representation to a code value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timemap.h"
-* int CvtCode( const char *cvt_string, int *status )
-
-* Class Membership:
-* TimeMap member function.
-
-* Description:
-* This function accepts a string used to repersent one of the
-* TimeMap coordinate conversions and converts it into a code
-* value for internal use.
-
-* Parameters:
-* cvt_string
-* Pointer to a constant null-terminated string representing a
-* time coordinate conversion. This is case sensitive and should
-* contain no unnecessary white space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The equivalent conversion code. If the string was not
-* recognised, the code AST__TIME_NULL is returned, without error.
-
-* Notes:
-* - A value of AST__TIME_NULL will be returned if this function is
-* invoked with the global error status set, or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = AST__TIME_NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Test the string against each recognised value in turn and assign
- the result. */
- if ( astChrMatch( cvt_string, "MJDTOJD" ) ) {
- result = AST__MJDTOJD;
-
- } else if ( astChrMatch( cvt_string, "MJDTOMJD" ) ) {
- result = AST__MJDTOMJD;
-
- } else if ( astChrMatch( cvt_string, "JDTOMJD" ) ) {
- result = AST__JDTOMJD;
-
- } else if ( astChrMatch( cvt_string, "JDTOMJD" ) ) {
- result = AST__JDTOMJD;
-
- } else if ( astChrMatch( cvt_string, "MJDTOBEP" ) ) {
- result = AST__MJDTOBEP;
-
- } else if ( astChrMatch( cvt_string, "BEPTOMJD" ) ) {
- result = AST__BEPTOMJD;
-
- } else if ( astChrMatch( cvt_string, "MJDTOJEP" ) ) {
- result = AST__MJDTOJEP;
-
- } else if ( astChrMatch( cvt_string, "JEPTOMJD" ) ) {
- result = AST__JEPTOMJD;
-
- } else if ( astChrMatch( cvt_string, "TAITOUTC" ) ) {
- result = AST__TAITOUTC;
-
- } else if ( astChrMatch( cvt_string, "UTCTOTAI" ) ) {
- result = AST__UTCTOTAI;
-
- } else if ( astChrMatch( cvt_string, "TAITOTT" ) ) {
- result = AST__TAITOTT;
-
- } else if ( astChrMatch( cvt_string, "TTTOTAI" ) ) {
- result = AST__TTTOTAI;
-
- } else if ( astChrMatch( cvt_string, "TTTOTDB" ) ) {
- result = AST__TTTOTDB;
-
- } else if ( astChrMatch( cvt_string, "TDBTOTT" ) ) {
- result = AST__TDBTOTT;
-
- } else if ( astChrMatch( cvt_string, "TTTOTCG" ) ) {
- result = AST__TTTOTCG;
-
- } else if ( astChrMatch( cvt_string, "TCGTOTT" ) ) {
- result = AST__TCGTOTT;
-
- } else if ( astChrMatch( cvt_string, "TDBTOTCB" ) ) {
- result = AST__TDBTOTCB;
-
- } else if ( astChrMatch( cvt_string, "TCBTOTDB" ) ) {
- result = AST__TCBTOTDB;
-
- } else if ( astChrMatch( cvt_string, "UTTOGMST" ) ) {
- result = AST__UTTOGMST;
-
- } else if ( astChrMatch( cvt_string, "GMSTTOUT" ) ) {
- result = AST__GMSTTOUT;
-
- } else if ( astChrMatch( cvt_string, "GMSTTOLMST" ) ) {
- result = AST__GMSTTOLMST;
-
- } else if ( astChrMatch( cvt_string, "LMSTTOGMST" ) ) {
- result = AST__LMSTTOGMST;
-
- } else if ( astChrMatch( cvt_string, "LASTTOLMST" ) ) {
- result = AST__LASTTOLMST;
-
- } else if ( astChrMatch( cvt_string, "LMSTTOLAST" ) ) {
- result = AST__LMSTTOLAST;
-
- } else if ( astChrMatch( cvt_string, "UTTOUTC" ) ) {
- result = AST__UTTOUTC;
-
- } else if ( astChrMatch( cvt_string, "UTCTOUT" ) ) {
- result = AST__UTCTOUT;
-
- } else if ( astChrMatch( cvt_string, "LTTOUTC" ) ) {
- result = AST__LTTOUTC;
-
- } else if ( astChrMatch( cvt_string, "UTCTOLT" ) ) {
- result = AST__UTCTOLT;
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *CvtString( int cvt_code, const char **comment,
- int *nargs, int *szargs,
- const char *arg[ MAX_ARGS ], int *status ) {
-/*
-* Name:
-* CvtString
-
-* Purpose:
-* Convert a conversion type from a code value to a string representation.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timemap.h"
-* const char *CvtString( int cvt_code, const char **comment, int *nargs,
-* int *szargs, const char *arg[ MAX_ARGS ], int *status )
-
-* Class Membership:
-* TimeMap member function.
-
-* Description:
-* This function accepts a code value used to represent one of the
-* TimeMap coordinate conversions and converts it into an
-* equivalent string representation. It also returns a descriptive
-* comment and information about the arguments required in order to
-* perform the conversion.
-
-* Parameters:
-* cvt_code
-* The conversion code.
-* comment
-* Address of a location to return a pointer to a constant
-* null-terminated string containing a description of the
-* conversion.
-* nargs
-* Address of an int in which to return the number of arguments
-* required from the user in order to perform the conversion (may
-* be zero).
-* szargs
-* Address of an int in which to return the number of arguments
-* associated with the conversion. This may be bigger than "nargs"
-* if the conversion can pre-calculate useful values on the basis
-* of the user-supplied values. Such precalculated values are
-* stored after the last user-supplied argument.
-* arg
-* An array in which to return a pointer to a constant
-* null-terminated string for each argument (above) containing a
-* description of what each argument represents. This includes both
-* user-supplied arguments and pre-calculated values.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a constant null-terminated string representation of
-* the conversion code value supplied. If the code supplied is not
-* valid, a NULL pointer will be returned, without error.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the global error status set, or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- const char *result; /* Result pointer to return */
-
-/* Initialise the returned values. */
- *comment = NULL;
- *nargs = 0;
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Test for each valid code value in turn and assign the appropriate
- return values. */
- switch ( cvt_code ) {
-
- case AST__MJDTOMJD:
- *comment = "Convert MJD between offsets";
- result = "MJDTOMJD";
- *nargs = 2;
- *szargs = 3;
- arg[ 0 ] = "Input MJD offset";
- arg[ 1 ] = "Output MJD offset";
- arg[ 2 ] = "Combined offset";
- break;
-
- case AST__MJDTOJD:
- *comment = "Convert MJD to JD";
- result = "MJDTOJD";
- *nargs = 2;
- *szargs = 3;
- arg[ 0 ] = "MJD offset";
- arg[ 1 ] = "JD offset";
- arg[ 2 ] = "Combined offset";
- break;
-
- case AST__JDTOMJD:
- *comment = "Convert JD to MJD";
- result = "JDTOMJD";
- *nargs = 2;
- *szargs = 3;
- arg[ 0 ] = "JD offset";
- arg[ 1 ] = "MJD offset";
- arg[ 2 ] = "Combined offset";
- break;
-
- case AST__MJDTOBEP:
- *comment = "Convert MJD to Besselian epoch";
- result = "MJDTOBEP";
- *nargs = 2;
- *szargs = 4;
- arg[ 0 ] = "MJD offset";
- arg[ 1 ] = "Besselian epoch offset";
- arg[ 2 ] = "Combined forward offset";
- arg[ 3 ] = "Combined inverse offset";
- break;
-
- case AST__BEPTOMJD:
- *comment = "Convert Besselian epoch to MJD";
- result = "BEPTOMJD";
- *nargs = 2;
- *szargs = 4;
- arg[ 0 ] = "Besselian epoch offset";
- arg[ 1 ] = "MJD offset";
- arg[ 2 ] = "Combined forward offset";
- arg[ 3 ] = "Combined inverse offset";
- break;
-
- case AST__MJDTOJEP:
- *comment = "Convert MJD to Julian epoch";
- result = "MJDTOJEP";
- *nargs = 2;
- *szargs = 4;
- arg[ 0 ] = "MJD offset";
- arg[ 1 ] = "Julian epoch offset";
- arg[ 2 ] = "Combined forward offset";
- arg[ 3 ] = "Combined inverse offset";
- break;
-
- case AST__JEPTOMJD:
- *comment = "Convert Julian epoch to MJD";
- result = "JEPTOMJD";
- *nargs = 2;
- *szargs = 4;
- arg[ 0 ] = "Julian epoch offset";
- arg[ 1 ] = "MJD offset";
- arg[ 2 ] = "Combined forward offset";
- arg[ 3 ] = "Combined inverse offset";
- break;
-
- case AST__TAITOUTC:
- *comment = "Convert TAI to UTC";
- result = "TAITOUTC";
- *nargs = 1;
- *szargs = 1;
- arg[ 0 ] = "MJD offset";
- break;
-
- case AST__UTCTOTAI:
- *comment = "Convert UTC to TAI";
- result = "UTCTOTAI";
- *nargs = 1;
- *szargs = 1;
- arg[ 0 ] = "MJD offset";
- break;
-
- case AST__TAITOTT:
- *comment = "Convert TAI to TT";
- result = "TAITOTT";
- *nargs = 1;
- *szargs = 1;
- arg[ 0 ] = "MJD offset";
- break;
-
- case AST__TTTOTAI:
- *comment = "Convert TT to TAI";
- result = "TTTOTAI";
- *nargs = 1;
- *szargs = 1;
- arg[ 0 ] = "MJD offset";
- break;
-
- case AST__TTTOTDB:
- *comment = "Convert TT to TDB";
- result = "TTTOTDB";
- *nargs = 4;
- *szargs = 6;
- arg[ 0 ] = "MJD offset";
- arg[ 1 ] = "Observer longitude";
- arg[ 2 ] = "Observer latitude";
- arg[ 3 ] = "Observer altitude";
- arg[ 4 ] = "Distance from earth spin axis";
- arg[ 5 ] = "Distance north of equatorial plane";
- break;
-
- case AST__TDBTOTT:
- *comment = "Convert TDB to TT";
- result = "TDBTOTT";
- *nargs = 4;
- *szargs = 6;
- arg[ 0 ] = "MJD offset";
- arg[ 1 ] = "Observer longitude";
- arg[ 2 ] = "Observer latitude";
- arg[ 3 ] = "Observer altitude";
- arg[ 4 ] = "Distance from earth spin axis";
- arg[ 5 ] = "Distance north of equatorial plane";
- break;
-
- case AST__TTTOTCG:
- *comment = "Convert TT to TCG";
- result = "TTTOTCG";
- *nargs = 1;
- *szargs = 2;
- arg[ 0 ] = "MJD offset";
- arg[ 1 ] = "TCG offset";
- break;
-
- case AST__TCGTOTT:
- *comment = "Convert TCG to TT";
- result = "TCGTOTT";
- *nargs = 1;
- *szargs = 2;
- arg[ 0 ] = "MJD offset";
- arg[ 1 ] = "TCG offset";
- break;
-
- case AST__TDBTOTCB:
- *comment = "Convert TDB to TCB";
- result = "TDBTOTCB";
- *nargs = 1;
- *szargs = 2;
- arg[ 0 ] = "MJD offset";
- arg[ 1 ] = "TCB offset";
- break;
-
- case AST__TCBTOTDB:
- *comment = "Convert TCB to TDB";
- result = "TCBTOTDB";
- *nargs = 1;
- *szargs = 2;
- arg[ 0 ] = "MJD offset";
- arg[ 1 ] = "TCB offset";
- break;
-
- case AST__UTTOGMST:
- *comment = "Convert UT to GMST";
- result = "UTTOGMST";
- *nargs = 1;
- *szargs = 1;
- arg[ 0 ] = "MJD offset";
- break;
-
- case AST__GMSTTOUT:
- *comment = "Convert GMST to UT";
- result = "GMSTTOUT";
- *nargs = 1;
- *szargs = 1;
- arg[ 0 ] = "MJD offset";
- break;
-
- case AST__GMSTTOLMST:
- *comment = "Convert GMST to LMST";
- result = "GMSTTOLMST";
- *nargs = 3;
- *szargs = 3;
- arg[ 0 ] = "MJD offset";
- arg[ 1 ] = "Observer longitude";
- arg[ 2 ] = "Observer latitude";
- break;
-
- case AST__LMSTTOGMST:
- *comment = "Convert LMST to GMST";
- result = "LMSTTOGMST";
- *nargs = 3;
- *szargs = 3;
- arg[ 0 ] = "MJD offset";
- arg[ 1 ] = "Observer longitude";
- arg[ 2 ] = "Observer latitude";
- break;
-
- case AST__LASTTOLMST:
- *comment = "Convert LAST to LMST";
- result = "LASTTOLMST";
- *nargs = 3;
- *szargs = 3;
- arg[ 0 ] = "MJD offset";
- arg[ 1 ] = "Observer longitude";
- arg[ 2 ] = "Observer latitude";
- break;
-
- case AST__LMSTTOLAST:
- *comment = "Convert LMST to LAST";
- result = "LMSTTOLAST";
- *nargs = 3;
- *szargs = 3;
- arg[ 0 ] = "MJD offset";
- arg[ 1 ] = "Observer longitude";
- arg[ 2 ] = "Observer latitude";
- break;
-
- case AST__UTTOUTC:
- *comment = "Convert UT1 to UTC";
- result = "UTTOUTC";
- *nargs = 1;
- *szargs = 1;
- arg[ 0 ] = "DUT1";
- break;
-
- case AST__UTCTOUT:
- *comment = "Convert UTC to UT1";
- result = "UTCTOUT";
- *nargs = 1;
- *szargs = 1;
- arg[ 0 ] = "DUT1";
- break;
-
- case AST__LTTOUTC:
- *comment = "Convert Local Time to UTC";
- result = "LTTOUTC";
- *nargs = 1;
- *szargs = 1;
- arg[ 0 ] = "LTOFF";
- break;
-
- case AST__UTCTOLT:
- *comment = "Convert UTC to Local Time";
- result = "UTCTOLT";
- *nargs = 1;
- *szargs = 1;
- arg[ 0 ] = "LTOFF";
- break;
- }
-
-/* Return the result. */
- return result;
-}
-
-double astDat_( double in, int forward, int *status ){
-/*
-*+
-* Name:
-* Dat
-
-* Purpose:
-* Convert between UTC and TAI.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "timemap.h"
-* double astDat( double in, int forward )
-
-* Class Membership:
-* TimeMap member function
-
-* Description:
-* This function returns the difference between Coordinated Universal Time
-* (UTC) and International Atomic Time (TAI), at a given epoch.
-
-* Parameters:
-* in
-* UTC date or TAI time (as selected by "forward"), as an absolute
-* MJD.
-* forward
-* If non-zero, "in" should be a UTC value, and the returned value
-* is TAI-UTC. If zero, "in" should be a TAI value, and the returned
-* value is UTC-TAI.
-
-* Returned Value:
-* Either UTC-TAI or TAI-UTC (as indicated by "forward") in units of
-* seconds.
-
-* Notes:
-* - The UTC is specified to be a date rather than a time to indicate
-* that care needs to be taken not to specify an instant which lies
-* within a leap second. Though in most cases UTC can include the
-* fractional part, correct behaviour on the day of a leap second
-* can only be guaranteed up to the end of the second 23:59:59.
-* - For epochs from 1961 January 1 onwards, the expressions from the
-* file ftp://maia.usno.navy.mil/ser7/tai-utc.dat are used.
-* - The 5ms time step at 1961 January 1 is taken from 2.58.1 (p87) of
-* the 1992 Explanatory Supplement.
-* - UTC began at 1960 January 1.0 (JD 2436934.5) and it is improper
-* to call the routine with an earlier epoch. However, if this
-* is attempted, the TAI-UTC expression for the year 1960 is used.
-
-* Implementation Details:
-* - This function is based on SLA_DAT by P.T.Wallace.
-* - This routine must be updated on each occasion that a leap second is
-* announced
-* - Latest leap second: 2009 January 1
-
-*-
-*/
-
-/* Local Variables: */
- double result;
-
-/* Initialise the returned value. */
- if( in == AST__BAD ) return AST__BAD;
-
-/* First do TAI-UTC at a given UTC
- ------------------------------- */
- if( forward ) {
-
-/* 2009 January 1 */
- if ( in >= 54832.0 ) {
- result = 34.0;
-
-/* 2006 January 1 */
- } else if( in >= 53736.0 ) {
- result = 33.0;
-
-/* 1999 January 1 */
- } else if( in >= 51179.0 ){
- result = 32.0;
-
-/* 1997 July 1 */
- } else if( in >= 50630.0 ){
- result = 31.0;
-
-/* 1996 January 1 */
- } else if( in >= 50083.0 ){
- result = 30.0;
-
-/* 1994 July 1 */
- } else if( in >= 49534.0 ){
- result = 29.0;
-
-/* 1993 July 1 */
- } else if( in >= 49169.0 ){
- result = 28.0;
-
-/* 1992 July 1 */
- } else if( in >= 48804.0 ){
- result = 27.0;
-
-/* 1991 January 1 */
- } else if( in >= 48257.0 ){
- result = 26.0;
-
-/* 1990 January 1 */
- } else if( in >= 47892.0 ){
- result = 25.0;
-
-/* 1988 January 1 */
- } else if( in >= 47161.0 ){
- result = 24.0;
-
-/* 1985 July 1 */
- } else if( in >= 46247.0 ){
- result = 23.0;
-
-/* 1983 July 1 */
- } else if( in >= 45516.0 ){
- result = 22.0;
-
-/* 1982 July 1 */
- } else if( in >= 45151.0 ){
- result = 21.0;
-
-/* 1981 July 1 */
- } else if( in >= 44786.0 ){
- result = 20.0;
-
-/* 1980 January 1 */
- } else if( in >= 44239.0 ){
- result = 19.0;
-
-/* 1979 January 1 */
- } else if( in >= 43874.0 ){
- result = 18.0;
-
-/* 1978 January 1 */
- } else if( in >= 43509.0 ){
- result = 17.0;
-
-/* 1977 January 1 */
- } else if( in >= 43144.0 ){
- result = 16.0;
-
-/* 1976 January 1 */
- } else if( in >= 42778.0 ){
- result = 15.0;
-
-/* 1975 January 1 */
- } else if( in >= 42413.0 ){
- result = 14.0;
-
-/* 1974 January 1 */
- } else if( in >= 42048.0 ){
- result = 13.0;
-
-/* 1973 January 1 */
- } else if( in >= 41683.0 ){
- result = 12.0;
-
-/* 1972 July 1 */
- } else if( in >= 41499.0 ){
- result = 11.0;
-
-/* 1972 January 1 */
- } else if( in >= 41317.0 ){
- result = 10.0;
-
-/* 1968 February 1 */
- } else if( in >= 39887.0 ){
- result = 4.2131700 + ( in - 39126.0 )*0.002592;
-
-/* 1966 January 1 */
- } else if( in >= 39126.0 ){
- result = 4.3131700 + ( in - 39126.0 )*0.002592;
-
-/* 1965 September 1 */
- } else if( in >= 39004.0 ){
- result = 3.8401300 + ( in - 38761.0 )*0.001296;
-
-/* 1965 July 1 */
- } else if( in >= 38942.0 ){
- result = 3.7401300 + ( in - 38761.0 )*0.001296;
-
-/* 1965 March 1 */
- } else if( in >= 38820.0 ){
- result = 3.6401300 + ( in - 38761.0 )*0.001296;
-
-/* 1965 January 1 */
- } else if( in >= 38761.0 ){
- result = 3.5401300 + ( in - 38761.0 )*0.001296;
-
-/* 1964 September 1 */
- } else if( in >= 38639.0 ){
- result = 3.4401300 + ( in - 38761.0 )*0.001296;
-
-/* 1964 April 1 */
- } else if( in >= 38486.0 ){
- result = 3.3401300 + ( in - 38761.0 )*0.001296;
-
-/* 1964 January 1 */
- } else if( in >= 38395.0 ){
- result = 3.2401300 + ( in - 38761.0 )*0.001296;
-
-/* 1963 November 1 */
- } else if( in >= 38334.0 ){
- result = 1.9458580 + ( in - 37665.0 )*0.0011232;
-
-/* 1962 January 1 */
- } else if( in >= 37665.0 ){
- result = 1.8458580 + ( in - 37665.0 )*0.0011232;
-
-/* 1961 August 1 */
- } else if( in >= 37512.0 ){
- result = 1.3728180 + ( in - 37300.0 )*0.001296;
-
-/* 1961 January 1 */
- } else if( in >= 37300.0 ){
- result = 1.4228180 + ( in - 37300.0 )*0.001296;
-
-/* Before that */
- } else {
- result = 1.4178180 + ( in - 37300.0 )*0.001296;
- }
-
-/* Now do UTC-TAI at a given TAI.
- ------------------------------ */
- } else {
-
-
-/* 2009 January 1 */
- if( in >= 54832.0 + 34.0/SPD ) {
- result = -34.0;
-
-/* 2006 January 1 */
- } else if( in >= 53736.0 + 33.0/SPD ){
- result = -33.0;
-
-/* 1999 January 1 */
- } else if( in >= 51179.0 + 32.0/SPD ){
- result = -32.0;
-
-/* 1997 July 1 */
- } else if( in >= 50630.0 + 31.0/SPD ){
- result = -31.0;
-
-/* 1996 January 1 */
- } else if( in >= 50083.0 + 30.0/SPD ){
- result = -30.0;
-
-/* 1994 July 1 */
- } else if( in >= 49534.0 + 29.0/SPD ){
- result = -29.0;
-
-/* 1993 July 1 */
- } else if( in >= 49169.0 + 28.0/SPD ){
- result = -28.0;
-
-/* 1992 July 1 */
- } else if( in >= 48804.0 + 27.0/SPD ){
- result = -27.0;
-
-/* 1991 January 1 */
- } else if( in >= 48257.0 + 26.0/SPD ){
- result = -26.0;
-
-/* 1990 January 1 */
- } else if( in >= 47892.0 + 25.0/SPD ){
- result = -25.0;
-
-/* 1988 January 1 */
- } else if( in >= 47161.0 + 24.0/SPD ){
- result = -24.0;
-
-/* 1985 July 1 */
- } else if( in >= 46247.0 + 23.0/SPD ){
- result = -23.0;
-
-/* 1983 July 1 */
- } else if( in >= 45516.0 + 22.0/SPD ){
- result = -22.0;
-
-/* 1982 July 1 */
- } else if( in >= 45151.0 + 21.0/SPD ){
- result = -21.0;
-
-/* 1981 July 1 */
- } else if( in >= 44786.0 + 20.0/SPD ){
- result = -20.0;
-
-/* 1980 January 1 */
- } else if( in >= 44239.0 + 19.0/SPD ){
- result = -19.0;
-
-/* 1979 January 1 */
- } else if( in >= 43874.0 + 18.0/SPD ){
- result = -18.0;
-
-/* 1978 January 1 */
- } else if( in >= 43509.0 + 17.0/SPD ){
- result = -17.0;
-
-/* 1977 January 1 */
- } else if( in >= 43144.0 + 16.0/SPD ){
- result = -16.0;
-
-/* 1976 January 1 */
- } else if( in >= 42778.0 + 15.0/SPD ){
- result = -15.0;
-
-/* 1975 January 1 */
- } else if( in >= 42413.0 + 14.0/SPD ){
- result = -14.0;
-
-/* 1974 January 1 */
- } else if( in >= 42048.0 + 13.0/SPD ){
- result = -13.0;
-
-/* 1973 January 1 */
- } else if( in >= 41683.0 + 12.0/SPD ){
- result = -12.0;
-
-/* 1972 July 1 */
- } else if( in >= 41499.0 + 11.0/SPD ){
- result = -11.0;
-
-/* 1972 January 1 */
- } else if( in >= 41317.0 + 10.0/SPD ){
- result = -10.0;
-
-/* 1968 February 1 */
- } else if( in >= 39887.0 + ( 4.2131700
- + ( 39887.0 - 39126.0 )*0.002592 )/SPD ){
- result = -( 4.2131700 + ( in - 39126.0 )*0.002592 )/1.02592;
-
-/* 1966 January 1 */
- } else if( in >= 39126.0 + ( 4.3131700
- + ( 39126.0 - 39126.0 )*0.002592 )/SPD ){
- result = -( 4.2131700 + ( in - 39126.0 )*0.002592 )/1.02592;
-
-/* 1965 September 1 */
- } else if( in >= 39004.0 + ( 3.8401300
- + ( 39004.0 - 38761.0 )*0.001296 )/SPD ){
- result = -( 3.8401300 + ( in - 38761.0 )*0.001296 )/1.001296;
-
-/* 1965 July 1 */
- } else if( in >= 38942.0 + ( 3.7401300
- + ( 38942.0 - 38761.0 )*0.001296 )/SPD ){
- result = -( 3.7401300 + ( in - 38761.0 )*0.001296 )/1.01296;
-
-/* 1965 March 1 */
- } else if( in >= 38820.0 + ( 3.6401300
- + ( 38820.0 - 38761.0 )*0.001296 )/SPD ){
- result = -( 3.6401300 + ( in - 38761.0 )*0.001296 )/1.001296;
-
-/* 1965 January 1 */
- } else if( in >= 38761.0 + ( 3.5401300
- + ( 38761.0 - 38761.0 )*0.001296 )/SPD ){
- result = -( 3.5401300 + ( in - 38761.0 )*0.001296 )/1.001296;
-
-/* 1964 September 1 */
- } else if( in >= 38639.0 + ( 3.4401300
- + ( 38639.0 - 38761.0 )*0.001296 )/SPD ){
- result = -( 3.4401300 + ( in - 38761.0 )*0.001296 )/1.001296;
-
-/* 1964 April 1 */
- } else if( in >= 38486.0 + ( 3.3401300
- + ( 38486.0 - 38761.0 )*0.001296 )/SPD ){
- result = -( 3.3401300 + ( in - 38761.0 )*0.001296 )/1.001296;
-
-/* 1964 January 1 */
- } else if( in >= 38395.0 + ( 3.2401300
- + ( 38395.0 - 38761.0 )*0.001296 )/SPD ){
- result = -( 3.2401300 + ( in - 38761.0 )*0.001296 )/1.001296;
-
-/* 1963 November 1 */
- } else if( in >= 38334.0 + ( 1.9458580
- + ( 38334.0 - 37665.0 )*0.0011232 )/SPD ){
- result = -( 1.9458580 + ( in - 37665.0 )*0.0011232 )/1.0011232;
-
-/* 1962 January 1 */
- } else if( in >= 37665.0 + ( 1.8458580
- + ( 37665.0 - 37665.0 )*0.0011232 )/SPD ){
- result = -( 1.8458580 + ( in - 37665.0 )*0.0011232 )/1.0011232;
-
-/* 1961 August 1 */
- } else if( in >= 37512.0 + ( 1.3728180
- + ( 37512.0 - 37300.0 )*0.001296 )/SPD ){
- result = -( 1.3728180 + ( in - 37300.0 )*0.001296 )/1.001296;
-
-/* 1961 January 1 */
- } else if( in >= 37300.0 + ( 1.4228180
- + ( 37300.0 - 37300.0 )*0.001296 )/SPD ){
- result = -( 1.4228180 + ( in - 37300.0 )*0.001296 )/1.001296;
-
-/* Before that */
- } else {
- result = -( 1.4178180 + ( in - 37300.0 )*0.001296 )/1.001296;
- }
- }
-
-/* Return the result */
- return result;
-}
-
-static double Gmsta( double in, double off, int forward, int *status ){
-/*
-* Name:
-* Gmsta
-
-* Purpose:
-* Convert between Universal Time (UT) and Greenwich Mean Sidereal Time (GMST).
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timemap.h"
-* double Gmsta( double in, double off, int forward, int *status ){
-
-* Class Membership:
-* TimeMap member function
-
-* Description:
-* This functions converts between UT and GMST. Both timescales are
-* represented by an MJD, rather than as an angle (as is done by SLALIB)
-* in order to facilitate conversions from GMST to UT1. This means
-* that whole days are retained.
-
-* Parameters:
-* in
-* The time to convert, represented as an offset in days from the MJD
-* zero-point specified by "off". The time is either UT1 or GMST, as
-* selected by "forward").
-* off
-* The MJD value corresponding to a value of 0.0 for "in".
-* forward
-* If non-zero, "in" should be a UT1 value, and the returned value
-* is GMST. If zero, "in" should be a GMST value, and the returned
-* value is UT1.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* An offset in days from the MJD given by "off". When the returned
-* value is added to "off" the sum is a GMST MJD (if "forward" is
-* non-zero), or a UT1 MJD (if "forward" is zero),
-
-* Notes:
-* - This function is based on SLA_GMST by P.T.Wallace.
-
-*/
-
-/* Local Variables: */
- double dgdu;
- double g;
- double result;
- double t;
- double utl;
- int nit;
-
-/* Initialise the returned value. */
- if( in == AST__BAD || off == AST__BAD ) return AST__BAD;
-
-/* First deal with UT1 -> GMST
- --------------------------- */
- if( forward ) {
-
-/* Julian centuries since J2000. */
- t = ( off + in - 51544.5 )/36525.0;
-
-/* GMST at this UT1. */
- result = in + ( 24110.54841 + ( 8640184.812866 + ( 0.093104 -
- 6.2E-6*t )*t )*t )/86400.0;
-
-/* Now deal with GMST -> UT1
- ----------------------- */
- } else {
-
-/* Form an initial guess at the UT1 value using the inverse of a linear
- approximation to the UT1->GMST equation. */
- result = 0.996997348638869*in + 154.49194372222 - 0.00300265136113098*off;
-
-/* Loop round improving the guess, until the guess stops changing, or 10
- iterations have been performed. */
- utl = AST__BAD;
- nit = 0;
- while( result != utl && nit++ < 10 ){
-
-/* Calculate the GMST at the current UT1 guess. */
- t = ( off + result - 51544.5 )/36525.0;
- g = result + ( 24110.54841 + ( 8640184.812866 + ( 0.093104 -
- 6.2E-6*t )*t )*t )/86400.0;
-
-/* Calculate the rate of change of GMST with respect to UT1 at the current
- UT1 guess. */
- dgdu = 1.0 + ( 8640184.812866 +
- ( 0.186208 - 12.4E-6*t )*t)/(36525.0*86400.0);
-
-/* Improve the UT1 guess. */
- utl = result;
- result = result - ( g - in )/dgdu;
- }
- }
-
-/* Return the result */
- return result;
-}
-
-void astInitTimeMapVtab_( AstTimeMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitTimeMapVtab
-
-* Purpose:
-* Initialise a virtual function table for a TimeMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "timemap.h"
-* void astInitTimeMapVtab( AstTimeMapVtab *vtab, const char *name )
-
-* Class Membership:
-* TimeMap vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the TimeMap class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsATimeMap) to determine if an object belongs to
- this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
- vtab->TimeAdd = TimeAdd;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
- parent_rate = mapping->Rate;
- mapping->Rate = Rate;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- object->Equal = Equal;
- mapping->MapMerge = MapMerge;
-
-/* Declare the copy constructor, destructor and class dump
- function. */
- astSetCopy( vtab, Copy );
- astSetDelete( vtab, Delete );
- astSetDump( vtab, Dump, "TimeMap",
- "Conversion between time coordinate systems" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a TimeMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* TimeMap method (over-rides the protected astMapMerge method
-* inherited from the Mapping class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated TimeMap in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated TimeMap with one which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated TimeMap which is to be merged with
-* its neighbours. This should be a cloned copy of the TimeMap
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* TimeMap it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated TimeMap resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstMapping *new; /* Pointer to replacement Mapping */
- AstTimeMap *timemap; /* Pointer to TimeMap */
- const char *argdesc[ MAX_ARGS ]; /* Argument descriptions (junk) */
- const char *class; /* Pointer to Mapping class string */
- const char *comment; /* Pointer to comment string (junk) */
- double (*cvtargs)[ MAX_ARGS ]; /* Pointer to argument arrays */
- double tmp; /* Temporary storage */
- int *cvttype; /* Pointer to transformation type codes */
- int *szarg; /* Pointer to argument count array */
- int done; /* Finished (no further simplification)? */
- int iarg; /* Loop counter for arguments */
- int icvt1; /* Loop initial value */
- int icvt2; /* Loop final value */
- int icvt; /* Loop counter for transformation steps */
- int ikeep; /* Index to store step being kept */
- int imap1; /* Index of first TimeMap to merge */
- int imap2; /* Index of last TimeMap to merge */
- int imap; /* Loop counter for Mappings */
- int inc; /* Increment for transformation step loop */
- int invert; /* TimeMap applied in inverse direction? */
- int istep; /* Loop counter for transformation steps */
- int keep; /* Keep transformation step? */
- int narg; /* Number of user-supplied arguments */
- int ngone; /* Number of Mappings eliminated */
- int nstep0; /* Original number of transformation steps */
- int nstep; /* Total number of transformation steps */
- int result; /* Result value to return */
- int simpler; /* Simplification possible? */
- int unit; /* Replacement Mapping is a UnitMap? */
-
-/* Initialise. */
- result = -1;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* TimeMaps can only be merged if they are in series (or if there is
- only one Mapping present, in which case it makes no difference), so
- do nothing if they are not. */
- if ( series || ( *nmap == 1 ) ) {
-
-/* Initialise the number of transformation steps to be merged to equal
- the number in the nominated TimeMap. */
- nstep = ( (AstTimeMap *) ( *map_list )[ where ] )->ncvt;
-
-/* Search adjacent lower-numbered Mappings until one is found which is
- not a TimeMap. Accumulate the number of transformation steps involved in
- any TimeMaps found. */
- imap1 = where;
- while ( ( imap1 - 1 >= 0 ) && astOK ) {
- class = astGetClass( ( *map_list )[ imap1 - 1 ] );
- if ( !astOK || strcmp( class, "TimeMap" ) ) break;
- nstep += ( (AstTimeMap *) ( *map_list )[ imap1 - 1 ] )->ncvt;
- imap1--;
- }
-
-/* Similarly search adjacent higher-numbered Mappings. */
- imap2 = where;
- while ( ( imap2 + 1 < *nmap ) && astOK ) {
- class = astGetClass( ( *map_list )[ imap2 + 1 ] );
- if ( !astOK || strcmp( class, "TimeMap" ) ) break;
- nstep += ( (AstTimeMap *) ( *map_list )[ imap2 + 1 ] )->ncvt;
- imap2++;
- }
-
-/* Remember the initial number of transformation steps. */
- nstep0 = nstep;
-
-/* Allocate memory for accumulating a list of all the transformation
- steps involved in all the TimeMaps found. */
- cvttype = astMalloc( sizeof( int ) * (size_t) nstep );
- cvtargs = astMalloc( sizeof( double[ MAX_ARGS ] ) * (size_t) nstep );
- szarg = astMalloc( sizeof( int ) * (size_t) nstep );
-
-/* Loop to obtain the transformation data for each TimeMap being merged. */
- nstep = 0;
- for ( imap = imap1; astOK && ( imap <= imap2 ); imap++ ) {
-
-/* Obtain a pointer to the TimeMap and note if it is being applied in
- its inverse direction. */
- timemap = (AstTimeMap *) ( *map_list )[ imap ];
- invert = ( *invert_list )[ imap ];
-
-/* Set up loop limits and an increment to scan the transformation
- steps in each TimeMap in either the forward or reverse direction, as
- dictated by the associated "invert" value. */
- icvt1 = invert ? timemap->ncvt - 1 : 0;
- icvt2 = invert ? -1 : timemap->ncvt;
- inc = invert ? -1 : 1;
-
-/* Loop through each transformation step in the TimeMap. */
- for ( icvt = icvt1; icvt != icvt2; icvt += inc ) {
-
-/* Store the transformation type code and use "CvtString" to determine
- the associated number of arguments. Then store these arguments. */
- cvttype[ nstep ] = timemap->cvttype[ icvt ];
- (void) CvtString( cvttype[ nstep ], &comment,
- &narg, szarg + nstep, argdesc, status );
- if ( !astOK ) break;
- for ( iarg = 0; iarg < szarg[ nstep ]; iarg++ ) {
- cvtargs[ nstep ][ iarg ] = timemap->cvtargs[ icvt ][ iarg ];
- }
-
-/* If the TimeMap is inverted, we must not only accumulate its
- transformation steps in reverse, but also apply them in
- reverse. For some steps this means changing arguments, for some it
- means changing the transformation type code to a complementary
- value, and for others it means both. Define macros to perform each
- of the required changes. */
-
-/* Macro to exchange a transformation type code for its inverse (and
- vice versa). */
-#define SWAP_CODES( code1, code2 ) \
- if ( cvttype[ nstep ] == code1 ) { \
- cvttype[ nstep ] = code2; \
- AddArgs( code2, cvtargs[ nstep ], status ); \
- } else if ( cvttype[ nstep ] == code2 ) { \
- cvttype[ nstep ] = code1; \
- AddArgs( code1, cvtargs[ nstep ], status ); \
- }
-
-/* Macro to exchange a transformation type code for its inverse (and
- vice versa), and swap the order of its 2 arguments. */
-#define SWAP_CODES2( code1, code2 ) \
- if ( cvttype[ nstep ] == code1 ) { \
- cvttype[ nstep ] = code2; \
- tmp = cvtargs[ nstep ][ 0 ]; \
- cvtargs[ nstep ][ 0 ] = cvtargs[ nstep ][ 1 ]; \
- cvtargs[ nstep ][ 1 ] = tmp; \
- AddArgs( cvttype[ nstep ], cvtargs[ nstep ], status ); \
- } else if ( cvttype[ nstep ] == code2 ) { \
- cvttype[ nstep ] = code1; \
- tmp = cvtargs[ nstep ][ 0 ]; \
- cvtargs[ nstep ][ 0 ] = cvtargs[ nstep ][ 1 ]; \
- cvtargs[ nstep ][ 1 ] = tmp; \
- AddArgs( cvttype[ nstep ], cvtargs[ nstep ], status ); \
- }
-
-/* Use these macros to apply the changes where needed. */
- if ( invert ) {
-
-/* Exchange transformation codes for their inverses. */
- SWAP_CODES( AST__TAITOUTC, AST__UTCTOTAI )
- SWAP_CODES( AST__TAITOTT, AST__TTTOTAI )
- SWAP_CODES( AST__TTTOTDB, AST__TDBTOTT )
- SWAP_CODES( AST__TDBTOTCB, AST__TCBTOTDB )
- SWAP_CODES( AST__TTTOTCG, AST__TCGTOTT )
- SWAP_CODES( AST__UTTOGMST, AST__GMSTTOUT )
- SWAP_CODES( AST__GMSTTOLMST, AST__LMSTTOGMST )
- SWAP_CODES( AST__LASTTOLMST, AST__LMSTTOLAST )
- SWAP_CODES( AST__UTTOUTC, AST__UTCTOUT )
- SWAP_CODES( AST__LTTOUTC, AST__UTCTOLT )
-
-/* Exchange transformation codes for their inverses, and swap the offset
- values. */
- SWAP_CODES2( AST__MJDTOMJD, AST__MJDTOMJD )
- SWAP_CODES2( AST__MJDTOJD, AST__JDTOMJD )
- SWAP_CODES2( AST__MJDTOBEP, AST__BEPTOMJD )
- SWAP_CODES2( AST__MJDTOJEP, AST__JEPTOMJD )
-
- }
-
-/* Undefine the local macros. */
-#undef SWAP_CODES
-#undef SWAP_CODES2
-
-/* Count the transformation steps. */
- nstep++;
- }
- }
-
-/* Loop to simplify the sequence of transformation steps until no
- further improvement is possible. */
- done = 0;
- while ( astOK && !done ) {
-
-/* Examine each remaining transformation step in turn. */
- ikeep = -1;
- for ( istep = 0; istep < nstep; istep++ ) {
-
-/* Initially assume we will retain the current step. */
- keep = 1;
-
-/* We can eliminate changes of system which have no effect. */
- if( ( cvttype[ istep ] == AST__MJDTOMJD ||
- cvttype[ istep ] == AST__MJDTOJD ||
- cvttype[ istep ] == AST__JDTOMJD ) &&
- cvtargs[ istep ][ 2 ] == 0.0 ) {
- keep = 0;
-
-/* The only simplifications for the conversions currently in this class act
- to combine adjacent transformation steps, so only apply them while there
- are at least 2 steps left. */
- } else if ( istep < ( nstep - 1 ) ) {
-
-/* Define a macro to test if two adjacent transformation type codes
- have specified values. */
-#define PAIR_CVT( code1, code2 ) \
- ( ( cvttype[ istep ] == code1 ) && \
- ( cvttype[ istep + 1 ] == code2 ) )
-
-/* Define a macro to test if two adjacent transformation type codes
- have specified values, either way round. */
-#define PAIR_CVT2( code1, code2 ) \
- ( ( PAIR_CVT( code1, code2 ) ) || \
- ( PAIR_CVT( code2, code1 ) ) )
-
-/* If a correction is followed by its inverse, and the user-supplied argument
- values are unchanged (we do not need to test values stored in the
- argument array which were not supplied by the user), we can eliminate them.
- First check for conversions which have a single user-supplied argument. */
- if( ( PAIR_CVT2( AST__TAITOUTC, AST__UTCTOTAI ) ||
- PAIR_CVT2( AST__TAITOTT, AST__TTTOTAI ) ||
- PAIR_CVT2( AST__UTTOGMST, AST__GMSTTOUT ) ||
- PAIR_CVT2( AST__TTTOTCG, AST__TCGTOTT ) ||
- PAIR_CVT2( AST__TTTOTCG, AST__TCGTOTT ) ||
- PAIR_CVT2( AST__UTTOUTC, AST__UTCTOUT ) ||
- PAIR_CVT2( AST__LTTOUTC, AST__UTCTOLT ) ) &&
- EQUAL( cvtargs[ istep ][ 0 ],
- cvtargs[ istep + 1 ][ 0 ] ) ) {
- istep++;
- keep = 0;
-
-/* Now check for conversions which have two user-supplied arguments
- (test they are swapped). */
- } else if( ( PAIR_CVT2( AST__MJDTOJD, AST__JDTOMJD ) ||
- PAIR_CVT2( AST__MJDTOMJD, AST__MJDTOMJD ) ||
- PAIR_CVT2( AST__MJDTOBEP, AST__BEPTOMJD ) ||
- PAIR_CVT2( AST__MJDTOJEP, AST__JEPTOMJD ) ) &&
- EQUAL( cvtargs[ istep ][ 0 ],
- cvtargs[ istep + 1 ][ 1 ] ) &&
- EQUAL( cvtargs[ istep ][ 1 ],
- cvtargs[ istep + 1 ][ 0 ] ) ) {
- istep++;
- keep = 0;
-
-/* Now check for conversions which have three user-supplied arguments. */
- } else if( ( PAIR_CVT2( AST__TDBTOTCB, AST__TCBTOTDB ) ||
- PAIR_CVT2( AST__GMSTTOLMST, AST__LMSTTOGMST ) ||
- PAIR_CVT2( AST__LASTTOLMST, AST__LMSTTOLAST ) ) &&
- EQUAL( cvtargs[ istep ][ 0 ],
- cvtargs[ istep + 1 ][ 0 ] ) &&
- EQUAL( cvtargs[ istep ][ 1 ],
- cvtargs[ istep + 1 ][ 1 ] ) &&
- EQUAL( cvtargs[ istep ][ 2 ],
- cvtargs[ istep + 1 ][ 2 ] ) ) {
- istep++;
- keep = 0;
-
-/* Now check for conversions which have four user-supplied arguments. */
- } else if( ( PAIR_CVT2( AST__TTTOTDB, AST__TDBTOTT ) ) &&
- EQUAL( cvtargs[ istep ][ 0 ],
- cvtargs[ istep + 1 ][ 0 ] ) &&
- EQUAL( cvtargs[ istep ][ 1 ],
- cvtargs[ istep + 1 ][ 1 ] ) &&
- EQUAL( cvtargs[ istep ][ 2 ],
- cvtargs[ istep + 1 ][ 2 ] ) &&
- EQUAL( cvtargs[ istep ][ 3 ],
- cvtargs[ istep + 1 ][ 3 ] ) ) {
- istep++;
- keep = 0;
- }
-
-/* Undefine the local macros. */
-#undef PAIR_CVT
-#undef PAIR_CVT2
- }
-
-/* If the current transformation (possibly modified above) is being
- kept, then increment the index that identifies its new location in
- the list of transformation steps. */
- if ( keep ) {
- ikeep++;
-
-/* If the new location is different to its current location, copy the
- transformation data into the new location. */
- if ( ikeep != istep ) {
- cvttype[ ikeep ] = cvttype[ istep ];
- for ( iarg = 0; iarg < szarg[ istep ]; iarg++ ) {
- cvtargs[ ikeep ][ iarg ] = cvtargs[ istep ][ iarg ];
- }
- szarg[ ikeep ] = szarg[ istep ];
- }
- }
- }
-
-/* Note if no simplification was achieved on this iteration (i.e. the
- number of transformation steps was not reduced). This is the signal
- to quit. */
- done = ( ( ikeep + 1 ) >= nstep );
-
-/* Note how many transformation steps now remain. */
- nstep = ikeep + 1;
- }
-
-/* Determine how many Mappings can be eliminated by condensing all
- those considered above into a single Mapping. */
- if ( astOK ) {
- ngone = imap2 - imap1;
-
-/* Determine if the replacement Mapping can be a UnitMap (a null
- Mapping). This will only be the case if all the transformation
- steps were eliminated above. */
- unit = ( nstep == 0 );
-
-/* Determine if simplification is possible. This will be the case if
- (a) Mappings were eliminated ("ngone" is non-zero), or (b) the
- number of transformation steps was reduced, or (c) the TimeMap(s)
- can be replaced by a UnitMap, or (d) if there was initially only
- one TimeMap present, its invert flag was set (this flag will always
- be cleared in the replacement Mapping). */
- simpler = ngone || ( nstep < nstep0 ) || unit ||
- ( *invert_list )[ where ];
-
-/* Do nothing more unless simplification is possible. */
- if ( simpler ) {
-
-/* If the replacement Mapping is a UnitMap, then create it. */
- if ( unit ) {
- new = (AstMapping *)
- astUnitMap( astGetNin( ( *map_list )[ where ] ), "", status );
-
-/* Otherwise, create a replacement TimeMap and add each of the
- remaining transformation steps to it. */
- } else {
- new = (AstMapping *) astTimeMap( 0, "", status );
- for ( istep = 0; istep < nstep; istep++ ) {
- AddTimeCvt( (AstTimeMap *) new, cvttype[ istep ],
- cvtargs[ istep ], status );
- }
- }
-
-/* Annul the pointers to the Mappings being eliminated. */
- if ( astOK ) {
- for ( imap = imap1; imap <= imap2; imap++ ) {
- ( *map_list )[ imap ] = astAnnul( ( *map_list )[ imap ] );
- }
-
-/* Insert the pointer and invert value for the new Mapping. */
- ( *map_list )[ imap1 ] = new;
- ( *invert_list )[ imap1 ] = 0;
-
-/* Move any subsequent Mapping information down to close the gap. */
- for ( imap = imap2 + 1; imap < *nmap; imap++ ) {
- ( *map_list )[ imap - ngone ] = ( *map_list )[ imap ];
- ( *invert_list )[ imap - ngone ] = ( *invert_list )[ imap ];
- }
-
-/* Blank out any information remaining at the end of the arrays. */
- for ( imap = ( *nmap - ngone ); imap < *nmap; imap++ ) {
- ( *map_list )[ imap ] = NULL;
- ( *invert_list )[ imap ] = 0;
- }
-
-/* Decrement the Mapping count and return the index of the first
- Mapping which was eliminated. */
- ( *nmap ) -= ngone;
- result = imap1;
-
-/* If an error occurred, annul the new Mapping pointer. */
- } else {
- new = astAnnul( new );
- }
- }
- }
-
-/* Free the memory used for the transformation steps. */
- cvttype = astFree( cvttype );
- cvtargs = astFree( cvtargs );
- szarg = astFree( szarg );
- }
-
-/* If an error occurred, clear the returned value. */
- if ( !astOK ) result = -1;
-
-/* Return the result. */
- return result;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-* Name:
-* Rate
-
-* Purpose:
-* Calculate the rate of change of a Mapping output.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timemap.h"
-* result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-* Class Membership:
-* TimeMap member function (overrides the astRate method inherited
-* from the Mapping class ).
-
-* Description:
-* This function returns the rate of change of a specified output of
-* the supplied Mapping with respect to a specified input, at a
-* specified input position.
-
-* Parameters:
-* this
-* Pointer to the Mapping to be applied.
-* at
-* The address of an array holding the axis values at the position
-* at which the rate of change is to be evaluated. The number of
-* elements in this array should equal the number of inputs to the
-* Mapping.
-* ax1
-* The index of the Mapping output for which the rate of change is to
-* be found (output numbering starts at 0 for the first output).
-* ax2
-* The index of the Mapping input which is to be varied in order to
-* find the rate of change (input numbering starts at 0 for the first
-* input).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The rate of change of Mapping output "ax1" with respect to input
-* "ax2", evaluated at "at", or AST__BAD if the value cannot be
-* calculated.
-
-* Implementation Deficiencies:
-* The initial version of this implementation only deals with
-* frequency->wavelength conversions. This is because the slowness of
-* the numerical differentiation implemented by the astRate method in
-* the parent Mapping class is cripples conversion between SpecFluxFrames.
-* Such conversions only rely on rate of change of wavelength with
-* respect to frequency. This implementation should be extended when
-* needed.
-
-*/
-
-/* Local Variables: */
- AstTimeMap *map;
- double result;
- int cvt;
- int i;
-
-/* Check inherited status */
- if( !astOK ) return AST__BAD;
-
-/* Get a pointer to the TimeMap structure. */
- map = (AstTimeMap *) this;
-
-/* Initialise the returned value. */
- result = 1.0;
-
-/* Loop round each conversion. */
- for( i = 0; i < map->ncvt; i++ ) {
-
-/* Store the type of the current conversion.*/
- cvt = map->cvttype[ i ];
-
-/* Many of the time conversions are linear. If this is the case, multiply
- the total rate of change by the rate of change for this step. */
- if( cvt == AST__MJDTOBEP ) {
- result *= 1.0/365.242198781;
-
- } else if( cvt == AST__BEPTOMJD ) {
- result *= 365.242198781;
-
- } else if( cvt == AST__MJDTOJEP ) {
- result *= 1.0/365.25;
-
- } else if( cvt == AST__JEPTOMJD ) {
- result *= 365.25;
-
-/* The GMST scales is not linear, so break if we encounter it, and use the
- (numerical) parent astRate method. The other time scale conversions are
- assumed to have a slope of unity. In fact the slope will be ever so
- slightly different to unity. */
- } else if( cvt == AST__UTTOGMST || cvt == AST__GMSTTOUT ) {
- result = AST__BAD;
- break;
- }
- }
-
-/* If this is non-linear TimeMap, use the astRate method inherited from the
- parent Mapping class. */
- if( result == AST__BAD ) result = (*parent_rate)( this, at, ax1, ax2, status );
-
-/* Return the result. */
- return result;
-}
-
-static double Rcc( double tdb, double ut1, double wl, double u, double v, int *status ){
-/*
-* Name:
-* Rcc
-
-* Purpose:
-* Find difference between TDB and TT.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timemap.h"
-* double Rcc( double tdb, double ut1, double wl, double u, double v, int *status )
-
-* Class Membership:
-* TimeMap member function
-
-* Description:
-* Relativistic clock correction: the difference between proper time at
-* a point on the surface of the Earth and coordinate time in the Solar
-* System barycentric space-time frame of reference.
-*
-* The proper time is terrestrial time, TT; the coordinate time is an
-* implementation of barycentric dynamical time, TDB.
-
-* Parameters:
-* tdb
-* TDB as an MJD.
-* ut1
-* Universal time (only the fraction of the day is relevant)
-* wl
-* Observer longitude (radians west)
-* u
-* Observer distance from Earth spin axis (km)
-* v
-* Observer distance north of Earth equatorial plane (km)
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The clock correction, TDB-TT, in seconds. TDB is coordinate time in the
-* solar system barycentre frame of reference, in units chosen to eliminate
-* the scale difference with respect to terrestrial time. TT is the proper
-* time for clocks at mean sea level on the Earth.
-
-* Notes:
-* - This function is a translation of the fortran routine SLA_RCC
-* written by by P.T.Wallace.
-*
-* - The argument TDB is, strictly, the barycentric coordinate time;
-* however, the terrestrial time TT can in practice be used without
-* any significant loss of accuracy.
-*
-* - The result returned by Rcc comprises a main (annual)
-* sinusoidal term of amplitude approximately 0.00166 seconds, plus
-* planetary and lunar terms up to about 20 microseconds, and diurnal
-* terms up to 2 microseconds. The variation arises from the
-* transverse Doppler effect and the gravitational red-shift as the
-* observer varies in speed and moves through different gravitational
-* potentials.
-*
-* - The geocentric model is that of Fairhead & Bretagnon (1990), in
-* its full form. It was supplied by Fairhead (private
-* communication) as a FORTRAN subroutine. The original Fairhead
-* routine used explicit formulae, in such large numbers that
-* problems were experienced with certain compilers (Microsoft
-* Fortran on PC aborted with stack overflow, Convex compiled
-* successfully but extremely slowly). The present implementation is
-* a complete recoding, with the original Fairhead coefficients held
-* in a table. To optimise arithmetic precision, the terms are
-* accumulated in reverse order, smallest first. A number of other
-* coding changes were made, in order to match the calling sequence
-* of previous versions of the present routine, and to comply with
-* Starlink programming standards. The numerical results compared
-* with those from the Fairhead form are essentially unaffected by
-* the changes, the differences being at the 10^-20 sec level.
-*
-* - The topocentric part of the model is from Moyer (1981) and
-* Murray (1983). It is an approximation to the expression
-* ( v / c ) . ( r / c ), where v is the barycentric velocity of
-* the Earth, r is the geocentric position of the observer and
-* c is the speed of light.
-*
-* - During the interval 1950-2050, the absolute accuracy of is better
-* than +/- 3 nanoseconds relative to direct numerical integrations
-* using the JPL DE200/LE200 solar system ephemeris.
-*
-* - The IAU definition of TDB was that it must differ from TT only by
-* periodic terms. Though practical, this is an imprecise definition
-* which ignores the existence of very long-period and secular
-* effects in the dynamics of the solar system. As a consequence,
-* different implementations of TDB will, in general, differ in zero-
-* point and will drift linearly relative to one other.
-*
-* - TDB was, in principle, superseded by new coordinate timescales
-* which the IAU introduced in 1991: geocentric coordinate time,
-* TCG, and barycentric coordinate time, TCB. However, Rcc
-* can be used to implement the periodic part of TCB-TCG.
-
-* References:
-* - Fairhead, L., & Bretagnon, P., Astron.Astrophys., 229, 240-247
-* (1990).
-*
-* - Moyer, T.D., Cel.Mech., 23, 33 (1981).
-*
-* - Murray, C.A., Vectorial Astrometry, Adam Hilger (1983).
-*
-* - Seidelmann, P.K. et al, Explanatory Supplement to the
-* Astronomical Almanac, Chapter 2, University Science Books
-* (1992).
-*
-* - Simon J.L., Bretagnon P., Chapront J., Chapront-Touze M.,
-* Francou G. & Laskar J., Astron.Astrophys., 282, 663-683 (1994).
-*/
-
-
-
-
-
-/* -----------------------------------------------------------------------
-*
-* Fairhead and Bretagnon canonical coefficients
-*
-* 787 sets of three coefficients.
-*
-* Each set is amplitude (microseconds)
-* frequency (radians per Julian millennium since J2000),
-* phase (radians).
-*
-* Sets 0-473 are the T**0 terms,
-* " 474-678 " " T**1 "
-* " 679-763 " " T**2 "
-* " 764-783 " " T**3 "
-* " 784-786 " " T**4 " .
-*/
- static double fairhd[ 787 ][ 3 ] = {
-
- { 1656.674564E-6, 6283.075849991, 6.240054195},
- { 22.417471E-6, 5753.384884897, 4.296977442},
- { 13.839792E-6, 12566.151699983, 6.196904410},
- { 4.770086E-6, 529.690965095, 0.444401603},
- { 4.676740E-6, 6069.776754553, 4.021195093},
- { 2.256707E-6, 213.299095438, 5.543113262},
- { 1.694205E-6, -3.523118349, 5.025132748},
- { 1.554905E-6, 77713.771467920, 5.198467090},
- { 1.276839E-6, 7860.419392439, 5.988822341},
- { 1.193379E-6, 5223.693919802, 3.649823730},
- { 1.115322E-6, 3930.209696220, 1.422745069},
- { 0.794185E-6, 11506.769769794, 2.322313077},
- { 0.447061E-6, 26.298319800, 3.615796498},
- { 0.435206E-6, -398.149003408, 4.349338347},
- { 0.600309E-6, 1577.343542448, 2.678271909},
- { 0.496817E-6, 6208.294251424, 5.696701824},
- { 0.486306E-6, 5884.926846583, 0.520007179},
- { 0.432392E-6, 74.781598567, 2.435898309},
- { 0.468597E-6, 6244.942814354, 5.866398759},
- { 0.375510E-6, 5507.553238667, 4.103476804},
- { 0.243085E-6, -775.522611324, 3.651837925},
- { 0.173435E-6, 18849.227549974, 6.153743485},
- { 0.230685E-6, 5856.477659115, 4.773852582},
- { 0.203747E-6, 12036.460734888, 4.333987818},
- { 0.143935E-6, -796.298006816, 5.957517795},
- { 0.159080E-6, 10977.078804699, 1.890075226},
- { 0.119979E-6, 38.133035638, 4.551585768},
- { 0.118971E-6, 5486.777843175, 1.914547226},
- { 0.116120E-6, 1059.381930189, 0.873504123},
- { 0.137927E-6, 11790.629088659, 1.135934669},
- { 0.098358E-6, 2544.314419883, 0.092793886},
- { 0.101868E-6, -5573.142801634, 5.984503847},
- { 0.080164E-6, 206.185548437, 2.095377709},
- { 0.079645E-6, 4694.002954708, 2.949233637},
- { 0.062617E-6, 20.775395492, 2.654394814},
- { 0.075019E-6, 2942.463423292, 4.980931759},
- { 0.064397E-6, 5746.271337896, 1.280308748},
- { 0.063814E-6, 5760.498431898, 4.167901731},
- { 0.048042E-6, 2146.165416475, 1.495846011},
- { 0.048373E-6, 155.420399434, 2.251573730},
- { 0.058844E-6, 426.598190876, 4.839650148},
- { 0.046551E-6, -0.980321068, 0.921573539},
- { 0.054139E-6, 17260.154654690, 3.411091093},
- { 0.042411E-6, 6275.962302991, 2.869567043},
- { 0.040184E-6, -7.113547001, 3.565975565},
- { 0.036564E-6, 5088.628839767, 3.324679049},
- { 0.040759E-6, 12352.852604545, 3.981496998},
- { 0.036507E-6, 801.820931124, 6.248866009},
- { 0.036955E-6, 3154.687084896, 5.071801441},
- { 0.042732E-6, 632.783739313, 5.720622217},
- { 0.042560E-6, 161000.685737473, 1.270837679},
- { 0.040480E-6, 15720.838784878, 2.546610123},
- { 0.028244E-6, -6286.598968340, 5.069663519},
- { 0.033477E-6, 6062.663207553, 4.144987272},
- { 0.034867E-6, 522.577418094, 5.210064075},
- { 0.032438E-6, 6076.890301554, 0.749317412},
- { 0.030215E-6, 7084.896781115, 3.389610345},
- { 0.029247E-6, -71430.695617928, 4.183178762},
- { 0.033529E-6, 9437.762934887, 2.404714239},
- { 0.032423E-6, 8827.390269875, 5.541473556},
- { 0.027567E-6, 6279.552731642, 5.040846034},
- { 0.029862E-6, 12139.553509107, 1.770181024},
- { 0.022509E-6, 10447.387839604, 1.460726241},
- { 0.020937E-6, 8429.241266467, 0.652303414},
- { 0.020322E-6, 419.484643875, 3.735430632},
- { 0.024816E-6, -1194.447010225, 1.087136918},
- { 0.025196E-6, 1748.016413067, 2.901883301},
- { 0.021691E-6, 14143.495242431, 5.952658009},
- { 0.017673E-6, 6812.766815086, 3.186129845},
- { 0.022567E-6, 6133.512652857, 3.307984806},
- { 0.016155E-6, 10213.285546211, 1.331103168},
- { 0.014751E-6, 1349.867409659, 4.308933301},
- { 0.015949E-6, -220.412642439, 4.005298270},
- { 0.015974E-6, -2352.866153772, 6.145309371},
- { 0.014223E-6, 17789.845619785, 2.104551349},
- { 0.017806E-6, 73.297125859, 3.475975097},
- { 0.013671E-6, -536.804512095, 5.971672571},
- { 0.011942E-6, 8031.092263058, 2.053414715},
- { 0.014318E-6, 16730.463689596, 3.016058075},
- { 0.012462E-6, 103.092774219, 1.737438797},
- { 0.010962E-6, 3.590428652, 2.196567739},
- { 0.015078E-6, 19651.048481098, 3.969480770},
- { 0.010396E-6, 951.718406251, 5.717799605},
- { 0.011707E-6, -4705.732307544, 2.654125618},
- { 0.010453E-6, 5863.591206116, 1.913704550},
- { 0.012420E-6, 4690.479836359, 4.734090399},
- { 0.011847E-6, 5643.178563677, 5.489005403},
- { 0.008610E-6, 3340.612426700, 3.661698944},
- { 0.011622E-6, 5120.601145584, 4.863931876},
- { 0.010825E-6, 553.569402842, 0.842715011},
- { 0.008666E-6, -135.065080035, 3.293406547},
- { 0.009963E-6, 149.563197135, 4.870690598},
- { 0.009858E-6, 6309.374169791, 1.061816410},
- { 0.007959E-6, 316.391869657, 2.465042647},
- { 0.010099E-6, 283.859318865, 1.942176992},
- { 0.007147E-6, -242.728603974, 3.661486981},
- { 0.007505E-6, 5230.807466803, 4.920937029},
- { 0.008323E-6, 11769.853693166, 1.229392026},
- { 0.007490E-6, -6256.777530192, 3.658444681},
- { 0.009370E-6, 149854.400134205, 0.673880395},
- { 0.007117E-6, 38.027672636, 5.294249518},
- { 0.007857E-6, 12168.002696575, 0.525733528},
- { 0.007019E-6, 6206.809778716, 0.837688810},
- { 0.006056E-6, 955.599741609, 4.194535082},
- { 0.008107E-6, 13367.972631107, 3.793235253},
- { 0.006731E-6, 5650.292110678, 5.639906583},
- { 0.007332E-6, 36.648562930, 0.114858677},
- { 0.006366E-6, 4164.311989613, 2.262081818},
- { 0.006858E-6, 5216.580372801, 0.642063318},
- { 0.006919E-6, 6681.224853400, 6.018501522},
- { 0.006826E-6, 7632.943259650, 3.458654112},
- { 0.005308E-6, -1592.596013633, 2.500382359},
- { 0.005096E-6, 11371.704689758, 2.547107806},
- { 0.004841E-6, 5333.900241022, 0.437078094},
- { 0.005582E-6, 5966.683980335, 2.246174308},
- { 0.006304E-6, 11926.254413669, 2.512929171},
- { 0.006603E-6, 23581.258177318, 5.393136889},
- { 0.005123E-6, -1.484472708, 2.999641028},
- { 0.004648E-6, 1589.072895284, 1.275847090},
- { 0.005119E-6, 6438.496249426, 1.486539246},
- { 0.004521E-6, 4292.330832950, 6.140635794},
- { 0.005680E-6, 23013.539539587, 4.557814849},
- { 0.005488E-6, -3.455808046, 0.090675389},
- { 0.004193E-6, 7234.794256242, 4.869091389},
- { 0.003742E-6, 7238.675591600, 4.691976180},
- { 0.004148E-6, -110.206321219, 3.016173439},
- { 0.004553E-6, 11499.656222793, 5.554998314},
- { 0.004892E-6, 5436.993015240, 1.475415597},
- { 0.004044E-6, 4732.030627343, 1.398784824},
- { 0.004164E-6, 12491.370101415, 5.650931916},
- { 0.004349E-6, 11513.883316794, 2.181745369},
- { 0.003919E-6, 12528.018664345, 5.823319737},
- { 0.003129E-6, 6836.645252834, 0.003844094},
- { 0.004080E-6, -7058.598461315, 3.690360123},
- { 0.003270E-6, 76.266071276, 1.517189902},
- { 0.002954E-6, 6283.143160294, 4.447203799},
- { 0.002872E-6, 28.449187468, 1.158692983},
- { 0.002881E-6, 735.876513532, 0.349250250},
- { 0.003279E-6, 5849.364112115, 4.893384368},
- { 0.003625E-6, 6209.778724132, 1.473760578},
- { 0.003074E-6, 949.175608970, 5.185878737},
- { 0.002775E-6, 9917.696874510, 1.030026325},
- { 0.002646E-6, 10973.555686350, 3.918259169},
- { 0.002575E-6, 25132.303399966, 6.109659023},
- { 0.003500E-6, 263.083923373, 1.892100742},
- { 0.002740E-6, 18319.536584880, 4.320519510},
- { 0.002464E-6, 202.253395174, 4.698203059},
- { 0.002409E-6, 2.542797281, 5.325009315},
- { 0.003354E-6, -90955.551694697, 1.942656623},
- { 0.002296E-6, 6496.374945429, 5.061810696},
- { 0.003002E-6, 6172.869528772, 2.797822767},
- { 0.003202E-6, 27511.467873537, 0.531673101},
- { 0.002954E-6, -6283.008539689, 4.533471191},
- { 0.002353E-6, 639.897286314, 3.734548088},
- { 0.002401E-6, 16200.772724501, 2.605547070},
- { 0.003053E-6, 233141.314403759, 3.029030662},
- { 0.003024E-6, 83286.914269554, 2.355556099},
- { 0.002863E-6, 17298.182327326, 5.240963796},
- { 0.002103E-6, -7079.373856808, 5.756641637},
- { 0.002303E-6, 83996.847317911, 2.013686814},
- { 0.002303E-6, 18073.704938650, 1.089100410},
- { 0.002381E-6, 63.735898303, 0.759188178},
- { 0.002493E-6, 6386.168624210, 0.645026535},
- { 0.002366E-6, 3.932153263, 6.215885448},
- { 0.002169E-6, 11015.106477335, 4.845297676},
- { 0.002397E-6, 6243.458341645, 3.809290043},
- { 0.002183E-6, 1162.474704408, 6.179611691},
- { 0.002353E-6, 6246.427287062, 4.781719760},
- { 0.002199E-6, -245.831646229, 5.956152284},
- { 0.001729E-6, 3894.181829542, 1.264976635},
- { 0.001896E-6, -3128.388765096, 4.914231596},
- { 0.002085E-6, 35.164090221, 1.405158503},
- { 0.002024E-6, 14712.317116458, 2.752035928},
- { 0.001737E-6, 6290.189396992, 5.280820144},
- { 0.002229E-6, 491.557929457, 1.571007057},
- { 0.001602E-6, 14314.168113050, 4.203664806},
- { 0.002186E-6, 454.909366527, 1.402101526},
- { 0.001897E-6, 22483.848574493, 4.167932508},
- { 0.001825E-6, -3738.761430108, 0.545828785},
- { 0.001894E-6, 1052.268383188, 5.817167450},
- { 0.001421E-6, 20.355319399, 2.419886601},
- { 0.001408E-6, 10984.192351700, 2.732084787},
- { 0.001847E-6, 10873.986030480, 2.903477885},
- { 0.001391E-6, -8635.942003763, 0.593891500},
- { 0.001388E-6, -7.046236698, 1.166145902},
- { 0.001810E-6, -88860.057071188, 0.487355242},
- { 0.001288E-6, -1990.745017041, 3.913022880},
- { 0.001297E-6, 23543.230504682, 3.063805171},
- { 0.001335E-6, -266.607041722, 3.995764039},
- { 0.001376E-6, 10969.965257698, 5.152914309},
- { 0.001745E-6, 244287.600007027, 3.626395673},
- { 0.001649E-6, 31441.677569757, 1.952049260},
- { 0.001416E-6, 9225.539273283, 4.996408389},
- { 0.001238E-6, 4804.209275927, 5.503379738},
- { 0.001472E-6, 4590.910180489, 4.164913291},
- { 0.001169E-6, 6040.347246017, 5.841719038},
- { 0.001039E-6, 5540.085789459, 2.769753519},
- { 0.001004E-6, -170.672870619, 0.755008103},
- { 0.001284E-6, 10575.406682942, 5.306538209},
- { 0.001278E-6, 71.812653151, 4.713486491},
- { 0.001321E-6, 18209.330263660, 2.624866359},
- { 0.001297E-6, 21228.392023546, 0.382603541},
- { 0.000954E-6, 6282.095528923, 0.882213514},
- { 0.001145E-6, 6058.731054289, 1.169483931},
- { 0.000979E-6, 5547.199336460, 5.448375984},
- { 0.000987E-6, -6262.300454499, 2.656486959},
- { 0.001070E-6, -154717.609887482, 1.827624012},
- { 0.000991E-6, 4701.116501708, 4.387001801},
- { 0.001155E-6, -14.227094002, 3.042700750},
- { 0.001176E-6, 277.034993741, 3.335519004},
- { 0.000890E-6, 13916.019109642, 5.601498297},
- { 0.000884E-6, -1551.045222648, 1.088831705},
- { 0.000876E-6, 5017.508371365, 3.969902609},
- { 0.000806E-6, 15110.466119866, 5.142876744},
- { 0.000773E-6, -4136.910433516, 0.022067765},
- { 0.001077E-6, 175.166059800, 1.844913056},
- { 0.000954E-6, -6284.056171060, 0.968480906},
- { 0.000737E-6, 5326.786694021, 4.923831588},
- { 0.000845E-6, -433.711737877, 4.749245231},
- { 0.000819E-6, 8662.240323563, 5.991247817},
- { 0.000852E-6, 199.072001436, 2.189604979},
- { 0.000723E-6, 17256.631536341, 6.068719637},
- { 0.000940E-6, 6037.244203762, 6.197428148},
- { 0.000885E-6, 11712.955318231, 3.280414875},
- { 0.000706E-6, 12559.038152982, 2.824848947},
- { 0.000732E-6, 2379.164473572, 2.501813417},
- { 0.000764E-6, -6127.655450557, 2.236346329},
- { 0.000908E-6, 131.541961686, 2.521257490},
- { 0.000907E-6, 35371.887265976, 3.370195967},
- { 0.000673E-6, 1066.495477190, 3.876512374},
- { 0.000814E-6, 17654.780539750, 4.627122566},
- { 0.000630E-6, 36.027866677, 0.156368499},
- { 0.000798E-6, 515.463871093, 5.151962502},
- { 0.000798E-6, 148.078724426, 5.909225055},
- { 0.000806E-6, 309.278322656, 6.054064447},
- { 0.000607E-6, -39.617508346, 2.839021623},
- { 0.000601E-6, 412.371096874, 3.984225404},
- { 0.000646E-6, 11403.676995575, 3.852959484},
- { 0.000704E-6, 13521.751441591, 2.300991267},
- { 0.000603E-6, -65147.619767937, 4.140083146},
- { 0.000609E-6, 10177.257679534, 0.437122327},
- { 0.000631E-6, 5767.611978898, 4.026532329},
- { 0.000576E-6, 11087.285125918, 4.760293101},
- { 0.000674E-6, 14945.316173554, 6.270510511},
- { 0.000726E-6, 5429.879468239, 6.039606892},
- { 0.000710E-6, 28766.924424484, 5.672617711},
- { 0.000647E-6, 11856.218651625, 3.397132627},
- { 0.000678E-6, -5481.254918868, 6.249666675},
- { 0.000618E-6, 22003.914634870, 2.466427018},
- { 0.000738E-6, 6134.997125565, 2.242668890},
- { 0.000660E-6, 625.670192312, 5.864091907},
- { 0.000694E-6, 3496.032826134, 2.668309141},
- { 0.000531E-6, 6489.261398429, 1.681888780},
- { 0.000611E-6, -143571.324284214, 2.424978312},
- { 0.000575E-6, 12043.574281889, 4.216492400},
- { 0.000553E-6, 12416.588502848, 4.772158039},
- { 0.000689E-6, 4686.889407707, 6.224271088},
- { 0.000495E-6, 7342.457780181, 3.817285811},
- { 0.000567E-6, 3634.621024518, 1.649264690},
- { 0.000515E-6, 18635.928454536, 3.945345892},
- { 0.000486E-6, -323.505416657, 4.061673868},
- { 0.000662E-6, 25158.601719765, 1.794058369},
- { 0.000509E-6, 846.082834751, 3.053874588},
- { 0.000472E-6, -12569.674818332, 5.112133338},
- { 0.000461E-6, 6179.983075773, 0.513669325},
- { 0.000641E-6, 83467.156352816, 3.210727723},
- { 0.000520E-6, 10344.295065386, 2.445597761},
- { 0.000493E-6, 18422.629359098, 1.676939306},
- { 0.000478E-6, 1265.567478626, 5.487314569},
- { 0.000472E-6, -18.159247265, 1.999707589},
- { 0.000559E-6, 11190.377900137, 5.783236356},
- { 0.000494E-6, 9623.688276691, 3.022645053},
- { 0.000463E-6, 5739.157790895, 1.411223013},
- { 0.000432E-6, 16858.482532933, 1.179256434},
- { 0.000574E-6, 72140.628666286, 1.758191830},
- { 0.000484E-6, 17267.268201691, 3.290589143},
- { 0.000550E-6, 4907.302050146, 0.864024298},
- { 0.000399E-6, 14.977853527, 2.094441910},
- { 0.000491E-6, 224.344795702, 0.878372791},
- { 0.000432E-6, 20426.571092422, 6.003829241},
- { 0.000481E-6, 5749.452731634, 4.309591964},
- { 0.000480E-6, 5757.317038160, 1.142348571},
- { 0.000485E-6, 6702.560493867, 0.210580917},
- { 0.000426E-6, 6055.549660552, 4.274476529},
- { 0.000480E-6, 5959.570433334, 5.031351030},
- { 0.000466E-6, 12562.628581634, 4.959581597},
- { 0.000520E-6, 39302.096962196, 4.788002889},
- { 0.000458E-6, 12132.439962106, 1.880103788},
- { 0.000470E-6, 12029.347187887, 1.405611197},
- { 0.000416E-6, -7477.522860216, 1.082356330},
- { 0.000449E-6, 11609.862544012, 4.179989585},
- { 0.000465E-6, 17253.041107690, 0.353496295},
- { 0.000362E-6, -4535.059436924, 1.583849576},
- { 0.000383E-6, 21954.157609398, 3.747376371},
- { 0.000389E-6, 17.252277143, 1.395753179},
- { 0.000331E-6, 18052.929543158, 0.566790582},
- { 0.000430E-6, 13517.870106233, 0.685827538},
- { 0.000368E-6, -5756.908003246, 0.731374317},
- { 0.000330E-6, 10557.594160824, 3.710043680},
- { 0.000332E-6, 20199.094959633, 1.652901407},
- { 0.000384E-6, 11933.367960670, 5.827781531},
- { 0.000387E-6, 10454.501386605, 2.541182564},
- { 0.000325E-6, 15671.081759407, 2.178850542},
- { 0.000318E-6, 138.517496871, 2.253253037},
- { 0.000305E-6, 9388.005909415, 0.578340206},
- { 0.000352E-6, 5749.861766548, 3.000297967},
- { 0.000311E-6, 6915.859589305, 1.693574249},
- { 0.000297E-6, 24072.921469776, 1.997249392},
- { 0.000363E-6, -640.877607382, 5.071820966},
- { 0.000323E-6, 12592.450019783, 1.072262823},
- { 0.000341E-6, 12146.667056108, 4.700657997},
- { 0.000290E-6, 9779.108676125, 1.812320441},
- { 0.000342E-6, 6132.028180148, 4.322238614},
- { 0.000329E-6, 6268.848755990, 3.033827743},
- { 0.000374E-6, 17996.031168222, 3.388716544},
- { 0.000285E-6, -533.214083444, 4.687313233},
- { 0.000338E-6, 6065.844601290, 0.877776108},
- { 0.000276E-6, 24.298513841, 0.770299429},
- { 0.000336E-6, -2388.894020449, 5.353796034},
- { 0.000290E-6, 3097.883822726, 4.075291557},
- { 0.000318E-6, 709.933048357, 5.941207518},
- { 0.000271E-6, 13095.842665077, 3.208912203},
- { 0.000331E-6, 6073.708907816, 4.007881169},
- { 0.000292E-6, 742.990060533, 2.714333592},
- { 0.000362E-6, 29088.811415985, 3.215977013},
- { 0.000280E-6, 12359.966151546, 0.710872502},
- { 0.000267E-6, 10440.274292604, 4.730108488},
- { 0.000262E-6, 838.969287750, 1.327720272},
- { 0.000250E-6, 16496.361396202, 0.898769761},
- { 0.000325E-6, 20597.243963041, 0.180044365},
- { 0.000268E-6, 6148.010769956, 5.152666276},
- { 0.000284E-6, 5636.065016677, 5.655385808},
- { 0.000301E-6, 6080.822454817, 2.135396205},
- { 0.000294E-6, -377.373607916, 3.708784168},
- { 0.000236E-6, 2118.763860378, 1.733578756},
- { 0.000234E-6, 5867.523359379, 5.575209112},
- { 0.000268E-6, -226858.238553767, 0.069432392},
- { 0.000265E-6, 167283.761587465, 4.369302826},
- { 0.000280E-6, 28237.233459389, 5.304829118},
- { 0.000292E-6, 12345.739057544, 4.096094132},
- { 0.000223E-6, 19800.945956225, 3.069327406},
- { 0.000301E-6, 43232.306658416, 6.205311188},
- { 0.000264E-6, 18875.525869774, 1.417263408},
- { 0.000304E-6, -1823.175188677, 3.409035232},
- { 0.000301E-6, 109.945688789, 0.510922054},
- { 0.000260E-6, 813.550283960, 2.389438934},
- { 0.000299E-6, 316428.228673312, 5.384595078},
- { 0.000211E-6, 5756.566278634, 3.789392838},
- { 0.000209E-6, 5750.203491159, 1.661943545},
- { 0.000240E-6, 12489.885628707, 5.684549045},
- { 0.000216E-6, 6303.851245484, 3.862942261},
- { 0.000203E-6, 1581.959348283, 5.549853589},
- { 0.000200E-6, 5642.198242609, 1.016115785},
- { 0.000197E-6, -70.849445304, 4.690702525},
- { 0.000227E-6, 6287.008003254, 2.911891613},
- { 0.000197E-6, 533.623118358, 1.048982898},
- { 0.000205E-6, -6279.485421340, 1.829362730},
- { 0.000209E-6, -10988.808157535, 2.636140084},
- { 0.000208E-6, -227.526189440, 4.127883842},
- { 0.000191E-6, 415.552490612, 4.401165650},
- { 0.000190E-6, 29296.615389579, 4.175658539},
- { 0.000264E-6, 66567.485864652, 4.601102551},
- { 0.000256E-6, -3646.350377354, 0.506364778},
- { 0.000188E-6, 13119.721102825, 2.032195842},
- { 0.000185E-6, -209.366942175, 4.694756586},
- { 0.000198E-6, 25934.124331089, 3.832703118},
- { 0.000195E-6, 4061.219215394, 3.308463427},
- { 0.000234E-6, 5113.487598583, 1.716090661},
- { 0.000188E-6, 1478.866574064, 5.686865780},
- { 0.000222E-6, 11823.161639450, 1.942386641},
- { 0.000181E-6, 10770.893256262, 1.999482059},
- { 0.000171E-6, 6546.159773364, 1.182807992},
- { 0.000206E-6, 70.328180442, 5.934076062},
- { 0.000169E-6, 20995.392966449, 2.169080622},
- { 0.000191E-6, 10660.686935042, 5.405515999},
- { 0.000228E-6, 33019.021112205, 4.656985514},
- { 0.000184E-6, -4933.208440333, 3.327476868},
- { 0.000220E-6, -135.625325010, 1.765430262},
- { 0.000166E-6, 23141.558382925, 3.454132746},
- { 0.000191E-6, 6144.558353121, 5.020393445},
- { 0.000180E-6, 6084.003848555, 0.602182191},
- { 0.000163E-6, 17782.732072784, 4.960593133},
- { 0.000225E-6, 16460.333529525, 2.596451817},
- { 0.000222E-6, 5905.702242076, 3.731990323},
- { 0.000204E-6, 227.476132789, 5.636192701},
- { 0.000159E-6, 16737.577236597, 3.600691544},
- { 0.000200E-6, 6805.653268085, 0.868220961},
- { 0.000187E-6, 11919.140866668, 2.629456641},
- { 0.000161E-6, 127.471796607, 2.862574720},
- { 0.000205E-6, 6286.666278643, 1.742882331},
- { 0.000189E-6, 153.778810485, 4.812372643},
- { 0.000168E-6, 16723.350142595, 0.027860588},
- { 0.000149E-6, 11720.068865232, 0.659721876},
- { 0.000189E-6, 5237.921013804, 5.245313000},
- { 0.000143E-6, 6709.674040867, 4.317625647},
- { 0.000146E-6, 4487.817406270, 4.815297007},
- { 0.000144E-6, -664.756045130, 5.381366880},
- { 0.000175E-6, 5127.714692584, 4.728443327},
- { 0.000162E-6, 6254.626662524, 1.435132069},
- { 0.000187E-6, 47162.516354635, 1.354371923},
- { 0.000146E-6, 11080.171578918, 3.369695406},
- { 0.000180E-6, -348.924420448, 2.490902145},
- { 0.000148E-6, 151.047669843, 3.799109588},
- { 0.000157E-6, 6197.248551160, 1.284375887},
- { 0.000167E-6, 146.594251718, 0.759969109},
- { 0.000133E-6, -5331.357443741, 5.409701889},
- { 0.000154E-6, 95.979227218, 3.366890614},
- { 0.000148E-6, -6418.140930027, 3.384104996},
- { 0.000128E-6, -6525.804453965, 3.803419985},
- { 0.000130E-6, 11293.470674356, 0.939039445},
- { 0.000152E-6, -5729.506447149, 0.734117523},
- { 0.000138E-6, 210.117701700, 2.564216078},
- { 0.000123E-6, 6066.595360816, 4.517099537},
- { 0.000140E-6, 18451.078546566, 0.642049130},
- { 0.000126E-6, 11300.584221356, 3.485280663},
- { 0.000119E-6, 10027.903195729, 3.217431161},
- { 0.000151E-6, 4274.518310832, 4.404359108},
- { 0.000117E-6, 6072.958148291, 0.366324650},
- { 0.000165E-6, -7668.637425143, 4.298212528},
- { 0.000117E-6, -6245.048177356, 5.379518958},
- { 0.000130E-6, -5888.449964932, 4.527681115},
- { 0.000121E-6, -543.918059096, 6.109429504},
- { 0.000162E-6, 9683.594581116, 5.720092446},
- { 0.000141E-6, 6219.339951688, 0.679068671},
- { 0.000118E-6, 22743.409379516, 4.881123092},
- { 0.000129E-6, 1692.165669502, 0.351407289},
- { 0.000126E-6, 5657.405657679, 5.146592349},
- { 0.000114E-6, 728.762966531, 0.520791814},
- { 0.000120E-6, 52.596639600, 0.948516300},
- { 0.000115E-6, 65.220371012, 3.504914846},
- { 0.000126E-6, 5881.403728234, 5.577502482},
- { 0.000158E-6, 163096.180360983, 2.957128968},
- { 0.000134E-6, 12341.806904281, 2.598576764},
- { 0.000151E-6, 16627.370915377, 3.985702050},
- { 0.000109E-6, 1368.660252845, 0.014730471},
- { 0.000131E-6, 6211.263196841, 0.085077024},
- { 0.000146E-6, 5792.741760812, 0.708426604},
- { 0.000146E-6, -77.750543984, 3.121576600},
- { 0.000107E-6, 5341.013788022, 0.288231904},
- { 0.000138E-6, 6281.591377283, 2.797450317},
- { 0.000113E-6, -6277.552925684, 2.788904128},
- { 0.000115E-6, -525.758811831, 5.895222200},
- { 0.000138E-6, 6016.468808270, 6.096188999},
- { 0.000139E-6, 23539.707386333, 2.028195445},
- { 0.000146E-6, -4176.041342449, 4.660008502},
- { 0.000107E-6, 16062.184526117, 4.066520001},
- { 0.000142E-6, 83783.548222473, 2.936315115},
- { 0.000128E-6, 9380.959672717, 3.223844306},
- { 0.000135E-6, 6205.325306007, 1.638054048},
- { 0.000101E-6, 2699.734819318, 5.481603249},
- { 0.000104E-6, -568.821874027, 2.205734493},
- { 0.000103E-6, 6321.103522627, 2.440421099},
- { 0.000119E-6, 6321.208885629, 2.547496264},
- { 0.000138E-6, 1975.492545856, 2.314608466},
- { 0.000121E-6, 137.033024162, 4.539108237},
- { 0.000123E-6, 19402.796952817, 4.538074405},
- { 0.000119E-6, 22805.735565994, 2.869040566},
- { 0.000133E-6, 64471.991241142, 6.056405489},
- { 0.000129E-6, -85.827298831, 2.540635083},
- { 0.000131E-6, 13613.804277336, 4.005732868},
- { 0.000104E-6, 9814.604100291, 1.959967212},
- { 0.000112E-6, 16097.679950283, 3.589026260},
- { 0.000123E-6, 2107.034507542, 1.728627253},
- { 0.000121E-6, 36949.230808424, 6.072332087},
- { 0.000108E-6, -12539.853380183, 3.716133846},
- { 0.000113E-6, -7875.671863624, 2.725771122},
- { 0.000109E-6, 4171.425536614, 4.033338079},
- { 0.000101E-6, 6247.911759770, 3.441347021},
- { 0.000113E-6, 7330.728427345, 0.656372122},
- { 0.000113E-6, 51092.726050855, 2.791483066},
- { 0.000106E-6, 5621.842923210, 1.815323326},
- { 0.000101E-6, 111.430161497, 5.711033677},
- { 0.000103E-6, 909.818733055, 2.812745443},
- { 0.000101E-6, 1790.642637886, 1.965746028},
- { 102.156724E-6, 6283.075849991, 4.249032005},
- { 1.706807E-6, 12566.151699983, 4.205904248},
- { 0.269668E-6, 213.299095438, 3.400290479},
- { 0.265919E-6, 529.690965095, 5.836047367},
- { 0.210568E-6, -3.523118349, 6.262738348},
- { 0.077996E-6, 5223.693919802, 4.670344204},
- { 0.054764E-6, 1577.343542448, 4.534800170},
- { 0.059146E-6, 26.298319800, 1.083044735},
- { 0.034420E-6, -398.149003408, 5.980077351},
- { 0.032088E-6, 18849.227549974, 4.162913471},
- { 0.033595E-6, 5507.553238667, 5.980162321},
- { 0.029198E-6, 5856.477659115, 0.623811863},
- { 0.027764E-6, 155.420399434, 3.745318113},
- { 0.025190E-6, 5746.271337896, 2.980330535},
- { 0.022997E-6, -796.298006816, 1.174411803},
- { 0.024976E-6, 5760.498431898, 2.467913690},
- { 0.021774E-6, 206.185548437, 3.854787540},
- { 0.017925E-6, -775.522611324, 1.092065955},
- { 0.013794E-6, 426.598190876, 2.699831988},
- { 0.013276E-6, 6062.663207553, 5.845801920},
- { 0.011774E-6, 12036.460734888, 2.292832062},
- { 0.012869E-6, 6076.890301554, 5.333425680},
- { 0.012152E-6, 1059.381930189, 6.222874454},
- { 0.011081E-6, -7.113547001, 5.154724984},
- { 0.010143E-6, 4694.002954708, 4.044013795},
- { 0.009357E-6, 5486.777843175, 3.416081409},
- { 0.010084E-6, 522.577418094, 0.749320262},
- { 0.008587E-6, 10977.078804699, 2.777152598},
- { 0.008628E-6, 6275.962302991, 4.562060226},
- { 0.008158E-6, -220.412642439, 5.806891533},
- { 0.007746E-6, 2544.314419883, 1.603197066},
- { 0.007670E-6, 2146.165416475, 3.000200440},
- { 0.007098E-6, 74.781598567, 0.443725817},
- { 0.006180E-6, -536.804512095, 1.302642751},
- { 0.005818E-6, 5088.628839767, 4.827723531},
- { 0.004945E-6, -6286.598968340, 0.268305170},
- { 0.004774E-6, 1349.867409659, 5.808636673},
- { 0.004687E-6, -242.728603974, 5.154890570},
- { 0.006089E-6, 1748.016413067, 4.403765209},
- { 0.005975E-6, -1194.447010225, 2.583472591},
- { 0.004229E-6, 951.718406251, 0.931172179},
- { 0.005264E-6, 553.569402842, 2.336107252},
- { 0.003049E-6, 5643.178563677, 1.362634430},
- { 0.002974E-6, 6812.766815086, 1.583012668},
- { 0.003403E-6, -2352.866153772, 2.552189886},
- { 0.003030E-6, 419.484643875, 5.286473844},
- { 0.003210E-6, -7.046236698, 1.863796539},
- { 0.003058E-6, 9437.762934887, 4.226420633},
- { 0.002589E-6, 12352.852604545, 1.991935820},
- { 0.002927E-6, 5216.580372801, 2.319951253},
- { 0.002425E-6, 5230.807466803, 3.084752833},
- { 0.002656E-6, 3154.687084896, 2.487447866},
- { 0.002445E-6, 10447.387839604, 2.347139160},
- { 0.002990E-6, 4690.479836359, 6.235872050},
- { 0.002890E-6, 5863.591206116, 0.095197563},
- { 0.002498E-6, 6438.496249426, 2.994779800},
- { 0.001889E-6, 8031.092263058, 3.569003717},
- { 0.002567E-6, 801.820931124, 3.425611498},
- { 0.001803E-6, -71430.695617928, 2.192295512},
- { 0.001782E-6, 3.932153263, 5.180433689},
- { 0.001694E-6, -4705.732307544, 4.641779174},
- { 0.001704E-6, -1592.596013633, 3.997097652},
- { 0.001735E-6, 5849.364112115, 0.417558428},
- { 0.001643E-6, 8429.241266467, 2.180619584},
- { 0.001680E-6, 38.133035638, 4.164529426},
- { 0.002045E-6, 7084.896781115, 0.526323854},
- { 0.001458E-6, 4292.330832950, 1.356098141},
- { 0.001437E-6, 20.355319399, 3.895439360},
- { 0.001738E-6, 6279.552731642, 0.087484036},
- { 0.001367E-6, 14143.495242431, 3.987576591},
- { 0.001344E-6, 7234.794256242, 0.090454338},
- { 0.001438E-6, 11499.656222793, 0.974387904},
- { 0.001257E-6, 6836.645252834, 1.509069366},
- { 0.001358E-6, 11513.883316794, 0.495572260},
- { 0.001628E-6, 7632.943259650, 4.968445721},
- { 0.001169E-6, 103.092774219, 2.838496795},
- { 0.001162E-6, 4164.311989613, 3.408387778},
- { 0.001092E-6, 6069.776754553, 3.617942651},
- { 0.001008E-6, 17789.845619785, 0.286350174},
- { 0.001008E-6, 639.897286314, 1.610762073},
- { 0.000918E-6, 10213.285546211, 5.532798067},
- { 0.001011E-6, -6256.777530192, 0.661826484},
- { 0.000753E-6, 16730.463689596, 3.905030235},
- { 0.000737E-6, 11926.254413669, 4.641956361},
- { 0.000694E-6, 3340.612426700, 2.111120332},
- { 0.000701E-6, 3894.181829542, 2.760823491},
- { 0.000689E-6, -135.065080035, 4.768800780},
- { 0.000700E-6, 13367.972631107, 5.760439898},
- { 0.000664E-6, 6040.347246017, 1.051215840},
- { 0.000654E-6, 5650.292110678, 4.911332503},
- { 0.000788E-6, 6681.224853400, 4.699648011},
- { 0.000628E-6, 5333.900241022, 5.024608847},
- { 0.000755E-6, -110.206321219, 4.370971253},
- { 0.000628E-6, 6290.189396992, 3.660478857},
- { 0.000635E-6, 25132.303399966, 4.121051532},
- { 0.000534E-6, 5966.683980335, 1.173284524},
- { 0.000543E-6, -433.711737877, 0.345585464},
- { 0.000517E-6, -1990.745017041, 5.414571768},
- { 0.000504E-6, 5767.611978898, 2.328281115},
- { 0.000485E-6, 5753.384884897, 1.685874771},
- { 0.000463E-6, 7860.419392439, 5.297703006},
- { 0.000604E-6, 515.463871093, 0.591998446},
- { 0.000443E-6, 12168.002696575, 4.830881244},
- { 0.000570E-6, 199.072001436, 3.899190272},
- { 0.000465E-6, 10969.965257698, 0.476681802},
- { 0.000424E-6, -7079.373856808, 1.112242763},
- { 0.000427E-6, 735.876513532, 1.994214480},
- { 0.000478E-6, -6127.655450557, 3.778025483},
- { 0.000414E-6, 10973.555686350, 5.441088327},
- { 0.000512E-6, 1589.072895284, 0.107123853},
- { 0.000378E-6, 10984.192351700, 0.915087231},
- { 0.000402E-6, 11371.704689758, 4.107281715},
- { 0.000453E-6, 9917.696874510, 1.917490952},
- { 0.000395E-6, 149.563197135, 2.763124165},
- { 0.000371E-6, 5739.157790895, 3.112111866},
- { 0.000350E-6, 11790.629088659, 0.440639857},
- { 0.000356E-6, 6133.512652857, 5.444568842},
- { 0.000344E-6, 412.371096874, 5.676832684},
- { 0.000383E-6, 955.599741609, 5.559734846},
- { 0.000333E-6, 6496.374945429, 0.261537984},
- { 0.000340E-6, 6055.549660552, 5.975534987},
- { 0.000334E-6, 1066.495477190, 2.335063907},
- { 0.000399E-6, 11506.769769794, 5.321230910},
- { 0.000314E-6, 18319.536584880, 2.313312404},
- { 0.000424E-6, 1052.268383188, 1.211961766},
- { 0.000307E-6, 63.735898303, 3.169551388},
- { 0.000329E-6, 29.821438149, 6.106912080},
- { 0.000357E-6, 6309.374169791, 4.223760346},
- { 0.000312E-6, -3738.761430108, 2.180556645},
- { 0.000301E-6, 309.278322656, 1.499984572},
- { 0.000268E-6, 12043.574281889, 2.447520648},
- { 0.000257E-6, 12491.370101415, 3.662331761},
- { 0.000290E-6, 625.670192312, 1.272834584},
- { 0.000256E-6, 5429.879468239, 1.913426912},
- { 0.000339E-6, 3496.032826134, 4.165930011},
- { 0.000283E-6, 3930.209696220, 4.325565754},
- { 0.000241E-6, 12528.018664345, 3.832324536},
- { 0.000304E-6, 4686.889407707, 1.612348468},
- { 0.000259E-6, 16200.772724501, 3.470173146},
- { 0.000238E-6, 12139.553509107, 1.147977842},
- { 0.000236E-6, 6172.869528772, 3.776271728},
- { 0.000296E-6, -7058.598461315, 0.460368852},
- { 0.000306E-6, 10575.406682942, 0.554749016},
- { 0.000251E-6, 17298.182327326, 0.834332510},
- { 0.000290E-6, 4732.030627343, 4.759564091},
- { 0.000261E-6, 5884.926846583, 0.298259862},
- { 0.000249E-6, 5547.199336460, 3.749366406},
- { 0.000213E-6, 11712.955318231, 5.415666119},
- { 0.000223E-6, 4701.116501708, 2.703203558},
- { 0.000268E-6, -640.877607382, 0.283670793},
- { 0.000209E-6, 5636.065016677, 1.238477199},
- { 0.000193E-6, 10177.257679534, 1.943251340},
- { 0.000182E-6, 6283.143160294, 2.456157599},
- { 0.000184E-6, -227.526189440, 5.888038582},
- { 0.000182E-6, -6283.008539689, 0.241332086},
- { 0.000228E-6, -6284.056171060, 2.657323816},
- { 0.000166E-6, 7238.675591600, 5.930629110},
- { 0.000167E-6, 3097.883822726, 5.570955333},
- { 0.000159E-6, -323.505416657, 5.786670700},
- { 0.000154E-6, -4136.910433516, 1.517805532},
- { 0.000176E-6, 12029.347187887, 3.139266834},
- { 0.000167E-6, 12132.439962106, 3.556352289},
- { 0.000153E-6, 202.253395174, 1.463313961},
- { 0.000157E-6, 17267.268201691, 1.586837396},
- { 0.000142E-6, 83996.847317911, 0.022670115},
- { 0.000152E-6, 17260.154654690, 0.708528947},
- { 0.000144E-6, 6084.003848555, 5.187075177},
- { 0.000135E-6, 5756.566278634, 1.993229262},
- { 0.000134E-6, 5750.203491159, 3.457197134},
- { 0.000144E-6, 5326.786694021, 6.066193291},
- { 0.000160E-6, 11015.106477335, 1.710431974},
- { 0.000133E-6, 3634.621024518, 2.836451652},
- { 0.000134E-6, 18073.704938650, 5.453106665},
- { 0.000134E-6, 1162.474704408, 5.326898811},
- { 0.000128E-6, 5642.198242609, 2.511652591},
- { 0.000160E-6, 632.783739313, 5.628785365},
- { 0.000132E-6, 13916.019109642, 0.819294053},
- { 0.000122E-6, 14314.168113050, 5.677408071},
- { 0.000125E-6, 12359.966151546, 5.251984735},
- { 0.000121E-6, 5749.452731634, 2.210924603},
- { 0.000136E-6, -245.831646229, 1.646502367},
- { 0.000120E-6, 5757.317038160, 3.240883049},
- { 0.000134E-6, 12146.667056108, 3.059480037},
- { 0.000137E-6, 6206.809778716, 1.867105418},
- { 0.000141E-6, 17253.041107690, 2.069217456},
- { 0.000129E-6, -7477.522860216, 2.781469314},
- { 0.000116E-6, 5540.085789459, 4.281176991},
- { 0.000116E-6, 9779.108676125, 3.320925381},
- { 0.000129E-6, 5237.921013804, 3.497704076},
- { 0.000113E-6, 5959.570433334, 0.983210840},
- { 0.000122E-6, 6282.095528923, 2.674938860},
- { 0.000140E-6, -11.045700264, 4.957936982},
- { 0.000108E-6, 23543.230504682, 1.390113589},
- { 0.000106E-6, -12569.674818332, 0.429631317},
- { 0.000110E-6, -266.607041722, 5.501340197},
- { 0.000115E-6, 12559.038152982, 4.691456618},
- { 0.000134E-6, -2388.894020449, 0.577313584},
- { 0.000109E-6, 10440.274292604, 6.218148717},
- { 0.000102E-6, -543.918059096, 1.477842615},
- { 0.000108E-6, 21228.392023546, 2.237753948},
- { 0.000101E-6, -4535.059436924, 3.100492232},
- { 0.000103E-6, 76.266071276, 5.594294322},
- { 0.000104E-6, 949.175608970, 5.674287810},
- { 0.000101E-6, 13517.870106233, 2.196632348},
- { 0.000100E-6, 11933.367960670, 4.056084160},
- { 4.322990E-6, 6283.075849991, 2.642893748},
- { 0.406495E-6, 0.000000000, 4.712388980},
- { 0.122605E-6, 12566.151699983, 2.438140634},
- { 0.019476E-6, 213.299095438, 1.642186981},
- { 0.016916E-6, 529.690965095, 4.510959344},
- { 0.013374E-6, -3.523118349, 1.502210314},
- { 0.008042E-6, 26.298319800, 0.478549024},
- { 0.007824E-6, 155.420399434, 5.254710405},
- { 0.004894E-6, 5746.271337896, 4.683210850},
- { 0.004875E-6, 5760.498431898, 0.759507698},
- { 0.004416E-6, 5223.693919802, 6.028853166},
- { 0.004088E-6, -7.113547001, 0.060926389},
- { 0.004433E-6, 77713.771467920, 3.627734103},
- { 0.003277E-6, 18849.227549974, 2.327912542},
- { 0.002703E-6, 6062.663207553, 1.271941729},
- { 0.003435E-6, -775.522611324, 0.747446224},
- { 0.002618E-6, 6076.890301554, 3.633715689},
- { 0.003146E-6, 206.185548437, 5.647874613},
- { 0.002544E-6, 1577.343542448, 6.232904270},
- { 0.002218E-6, -220.412642439, 1.309509946},
- { 0.002197E-6, 5856.477659115, 2.407212349},
- { 0.002897E-6, 5753.384884897, 5.863842246},
- { 0.001766E-6, 426.598190876, 0.754113147},
- { 0.001738E-6, -796.298006816, 2.714942671},
- { 0.001695E-6, 522.577418094, 2.629369842},
- { 0.001584E-6, 5507.553238667, 1.341138229},
- { 0.001503E-6, -242.728603974, 0.377699736},
- { 0.001552E-6, -536.804512095, 2.904684667},
- { 0.001370E-6, -398.149003408, 1.265599125},
- { 0.001889E-6, -5573.142801634, 4.413514859},
- { 0.001722E-6, 6069.776754553, 2.445966339},
- { 0.001124E-6, 1059.381930189, 5.041799657},
- { 0.001258E-6, 553.569402842, 3.849557278},
- { 0.000831E-6, 951.718406251, 2.471094709},
- { 0.000767E-6, 4694.002954708, 5.363125422},
- { 0.000756E-6, 1349.867409659, 1.046195744},
- { 0.000775E-6, -11.045700264, 0.245548001},
- { 0.000597E-6, 2146.165416475, 4.543268798},
- { 0.000568E-6, 5216.580372801, 4.178853144},
- { 0.000711E-6, 1748.016413067, 5.934271972},
- { 0.000499E-6, 12036.460734888, 0.624434410},
- { 0.000671E-6, -1194.447010225, 4.136047594},
- { 0.000488E-6, 5849.364112115, 2.209679987},
- { 0.000621E-6, 6438.496249426, 4.518860804},
- { 0.000495E-6, -6286.598968340, 1.868201275},
- { 0.000456E-6, 5230.807466803, 1.271231591},
- { 0.000451E-6, 5088.628839767, 0.084060889},
- { 0.000435E-6, 5643.178563677, 3.324456609},
- { 0.000387E-6, 10977.078804699, 4.052488477},
- { 0.000547E-6, 161000.685737473, 2.841633844},
- { 0.000522E-6, 3154.687084896, 2.171979966},
- { 0.000375E-6, 5486.777843175, 4.983027306},
- { 0.000421E-6, 5863.591206116, 4.546432249},
- { 0.000439E-6, 7084.896781115, 0.522967921},
- { 0.000309E-6, 2544.314419883, 3.172606705},
- { 0.000347E-6, 4690.479836359, 1.479586566},
- { 0.000317E-6, 801.820931124, 3.553088096},
- { 0.000262E-6, 419.484643875, 0.606635550},
- { 0.000248E-6, 6836.645252834, 3.014082064},
- { 0.000245E-6, -1592.596013633, 5.519526220},
- { 0.000225E-6, 4292.330832950, 2.877956536},
- { 0.000214E-6, 7234.794256242, 1.605227587},
- { 0.000205E-6, 5767.611978898, 0.625804796},
- { 0.000180E-6, 10447.387839604, 3.499954526},
- { 0.000229E-6, 199.072001436, 5.632304604},
- { 0.000214E-6, 639.897286314, 5.960227667},
- { 0.000175E-6, -433.711737877, 2.162417992},
- { 0.000209E-6, 515.463871093, 2.322150893},
- { 0.000173E-6, 6040.347246017, 2.556183691},
- { 0.000184E-6, 6309.374169791, 4.732296790},
- { 0.000227E-6, 149854.400134205, 5.385812217},
- { 0.000154E-6, 8031.092263058, 5.120720920},
- { 0.000151E-6, 5739.157790895, 4.815000443},
- { 0.000197E-6, 7632.943259650, 0.222827271},
- { 0.000197E-6, 74.781598567, 3.910456770},
- { 0.000138E-6, 6055.549660552, 1.397484253},
- { 0.000149E-6, -6127.655450557, 5.333727496},
- { 0.000137E-6, 3894.181829542, 4.281749907},
- { 0.000135E-6, 9437.762934887, 5.979971885},
- { 0.000139E-6, -2352.866153772, 4.715630782},
- { 0.000142E-6, 6812.766815086, 0.513330157},
- { 0.000120E-6, -4705.732307544, 0.194160689},
- { 0.000131E-6, -71430.695617928, 0.000379226},
- { 0.000124E-6, 6279.552731642, 2.122264908},
- { 0.000108E-6, -6256.777530192, 0.883445696},
- { 0.143388E-6, 6283.075849991, 1.131453581},
- { 0.006671E-6, 12566.151699983, 0.775148887},
- { 0.001480E-6, 155.420399434, 0.480016880},
- { 0.000934E-6, 213.299095438, 6.144453084},
- { 0.000795E-6, 529.690965095, 2.941595619},
- { 0.000673E-6, 5746.271337896, 0.120415406},
- { 0.000672E-6, 5760.498431898, 5.317009738},
- { 0.000389E-6, -220.412642439, 3.090323467},
- { 0.000373E-6, 6062.663207553, 3.003551964},
- { 0.000360E-6, 6076.890301554, 1.918913041},
- { 0.000316E-6, -21.340641002, 5.545798121},
- { 0.000315E-6, -242.728603974, 1.884932563},
- { 0.000278E-6, 206.185548437, 1.266254859},
- { 0.000238E-6, -536.804512095, 4.532664830},
- { 0.000185E-6, 522.577418094, 4.578313856},
- { 0.000245E-6, 18849.227549974, 0.587467082},
- { 0.000180E-6, 426.598190876, 5.151178553},
- { 0.000200E-6, 553.569402842, 5.355983739},
- { 0.000141E-6, 5223.693919802, 1.336556009},
- { 0.000104E-6, 5856.477659115, 4.239842759},
- { 0.003826E-6, 6283.075849991, 5.705257275},
- { 0.000303E-6, 12566.151699983, 5.407132842},
- { 0.000209E-6, 155.420399434, 1.989815753}
- };
-
-/* -------------------------------------------------------------------- */
-
-/* Local Variables: */
- double t, tsol, w, elsun, emsun, d, elj, els, wt, w0, w1, w2, w3, w4,
- wf, wj;
- int i;
-
-
-/* Time since J2000.0 in Julian millennia. */
- t = ( tdb - 51544.5 )/365250;
-
-
-
-/* -------------------- Topocentric terms ----------------------------- */
-
-/* Convert UT1 to local solar time in radians. */
- tsol = fmod( ut1, 1.0 )*D2PI - wl;
-
-/* FUNDAMENTAL ARGUMENTS: Simon et al 1994 */
-
-/* Combine time argument (millennia ) with deg/arcsec factor. */
- w = t / 3600.0;
-
-/* Sun Mean Longitude. */
- elsun = fmod( 280.46645683 + 1296027711.03429*w, 360.0 )*D2R;
-
-/* Sun Mean Anomaly. */
- emsun = fmod( 357.52910918 + 1295965810.481*w, 360.0 )*D2R;
-
-/* Mean Elongation of Moon from Sun. */
- d = fmod( 297.85019547 + 16029616012.090*w, 360.0 )*D2R;
-
-/* Mean Longitude of Jupiter. */
- elj = fmod( 34.35151874 + 109306899.89453*w, 360.0 )*D2R;
-
-/* Mean Longitude of Saturn. */
- els = fmod( 50.07744430 + 44046398.47038*w, 360.0 )*D2R;
-
-/* TOPOCENTRIC TERMS: Moyer 1981 and Murray 1983. */
- wt = + 0.00029E-10*u*sin( tsol + elsun - els )
- + 0.00100E-10*u*sin( tsol - 2*emsun )
- + 0.00133E-10*u*sin( tsol - d )
- + 0.00133E-10*u*sin( tsol + elsun - elj )
- - 0.00229E-10*u*sin( tsol + 2*elsun + emsun )
- - 0.0220E-10*v*cos( elsun + emsun )
- + 0.05312E-10*u*sin( tsol - emsun )
- - 0.13677E-10*u*sin( tsol + 2*elsun )
- - 1.3184E-10*v*cos( elsun )
- + 3.17679E-10*u*sin( tsol );
-
-
-
-/* --------------- Fairhead model --------------------------------------- */
-
-/* t**0 */
- w0 = 0;
- for( i = 473; i >= 0; i-- ) {
- w0 = w0 + fairhd[ i ][ 0 ]*sin( fairhd[ i ][ 1 ]*t + fairhd[ i ][ 2 ] );
- }
-
-/* t**1 */
- w1 = 0;
- for( i = 678; i >= 474; i-- ) {
- w1 = w1 + fairhd[ i ][ 0 ]*sin( fairhd[ i ][ 1 ]*t + fairhd[ i ][ 2 ] );
- }
-
-/* t**2 */
- w2 = 0;
- for( i = 763; i >= 679; i-- ) {
- w2 = w2 + fairhd[ i ][ 0 ]*sin( fairhd[ i ][ 1 ]*t + fairhd[ i ][ 2 ] );
- }
-
-/* t**3 */
- w3 = 0;
- for( i = 783; i >= 764; i-- ) {
- w3 = w3 + fairhd[ i ][ 0 ]*sin( fairhd[ i ][ 1 ]*t + fairhd[ i ][ 2 ] );
- }
-
-/* t**4 */
- w4 = 0;
- for( i = 786; i >= 784; i-- ) {
- w4 = w4 + fairhd[ i ][ 0 ]*sin( fairhd[ i ][ 1 ]*t + fairhd[ i ][ 2 ] );
- }
-
-/* Multiply by powers of T and combine. */
- wf = t*( t*( t*( t*w4 + w3 ) + w2 ) + w1 ) + w0;
-
-/* Adjustments to use JPL planetary masses instead of IAU. */
- wj = 0.00065E-6 * sin( 6069.776754 *t + 4.021194 ) +
- 0.00033E-6 * sin( 213.299095 *t + 5.543132 ) +
- ( -0.00196E-6 * sin( 6208.294251 *t + 5.696701 ) ) +
- ( -0.00173E-6 * sin( 74.781599 *t + 2.435900 ) ) +
- 0.03638E-6*t*t;
-
-
-
-/* -------------------------------------------------------------------- */
-
-/* Final result: TDB-TT in seconds. */
- return wt + wf + wj;
-
-}
-
-static void TimeAdd( AstTimeMap *this, const char *cvt, const double args[], int *status ) {
-/*
-*++
-* Name:
-c astTimeAdd
-f AST_TIMEADD
-
-* Purpose:
-* Add a time coordinate conversion to a TimeMap.
-
-* Type:
-* Public virtual function.
-
-* Synopsis:
-c #include "timemap.h"
-c void astTimeAdd( AstTimeMap *this, const char *cvt, const double args[] )
-f CALL AST_TIMEADD( THIS, CVT, ARGS, STATUS )
-
-* Class Membership:
-* TimeMap method.
-
-* Description:
-c This function adds one of the standard time coordinate
-f This routine adds one of the standard time coordinate
-* system conversions listed below to an existing TimeMap.
-*
-c When a TimeMap is first created (using astTimeMap), it simply
-f When a TimeMap is first created (using AST_TIMEMAP), it simply
-c performs a unit (null) Mapping. By using astTimeAdd (repeatedly
-f performs a unit (null) Mapping. By using AST_TIMEADD (repeatedly
-* if necessary), one or more coordinate conversion steps may then
-* be added, which the TimeMap will perform in sequence. This allows
-* multi-step conversions between a variety of time coordinate
-* systems to be assembled out of the building blocks provided by
-* this class.
-*
-* Normally, if a TimeMap's Invert attribute is zero (the default),
-* then its forward transformation is performed by carrying out
-* each of the individual coordinate conversions specified by
-c astTimeAdd in the order given (i.e. with the most recently added
-f AST_TIMEADD in the order given (i.e. with the most recently added
-* conversion applied last).
-*
-* This order is reversed if the TimeMap's Invert attribute is
-* non-zero (or if the inverse transformation is requested by any
-* other means) and each individual coordinate conversion is also
-* replaced by its own inverse. This process inverts the overall
-* effect of the TimeMap. In this case, the first conversion to be
-* applied would be the inverse of the one most recently added.
-
-* Parameters:
-c this
-f THIS = INTEGER (Given)
-* Pointer to the TimeMap.
-c cvt
-f CVT = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string which identifies the
-f A character string which identifies the
-* time coordinate conversion to be added to the
-* TimeMap. See the "Available Conversions" section for details of
-* those available.
-c args
-f ARGS( * ) = DOUBLE PRECISION (Given)
-* An array containing argument values for the time
-* coordinate conversion. The number of arguments required, and
-* hence the number of array elements used, depends on the
-* conversion specified (see the "Available Conversions"
-* section). This array is ignored
-c and a NULL pointer may be supplied
-* if no arguments are needed.
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Notes:
-* - When assembling a multi-stage conversion, it can sometimes be
-* difficult to determine the most economical conversion path. A solution
-* to this is to include all the steps which are (logically) necessary,
-* but then to use
-c astSimplify to simplify the resulting
-f AST_SIMPLIFY to simplify the resulting
-* TimeMap. The simplification process will eliminate any steps
-* which turn out not to be needed.
-c - This function does not check to ensure that the sequence of
-f - This routine does not check to ensure that the sequence of
-* coordinate conversions added to a TimeMap is physically
-* meaningful.
-
-* Available Conversions:
-* The following strings (which are case-insensitive) may be supplied
-c via the "cvt" parameter to indicate which time coordinate
-f via the CVT argument to indicate which time coordinate
-* conversion is to be added to the TimeMap. Where arguments are needed by
-* the conversion, they are listed in parentheses. Values for
-c these arguments should be given, via the "args" array, in the
-f these arguments should be given, via the ARGS array, in the
-* order indicated. Units and argument names are described at the end of
-* the list of conversions, and "MJD" means Modified Julian Date.
-*
-* - "MJDTOMJD" (MJDOFF1,MJDOFF2): Convert MJD from one offset to another.
-* - "MJDTOJD" (MJDOFF,JDOFF): Convert MJD to Julian Date.
-* - "JDTOMJD" (JDOFF,MJDOFF): Convert Julian Date to MJD.
-* - "MJDTOBEP" (MJDOFF,BEPOFF): Convert MJD to Besselian epoch.
-* - "BEPTOMJD" (BEPOFF,MJDOFF): Convert Besselian epoch to MJD.
-* - "MJDTOJEP" (MJDOFF,JEPOFF): Convert MJD to Julian epoch.
-* - "JEPTOMJD" (JEPOFF,MJDOFF): Convert Julian epoch to MJD.
-* - "TAITOUTC" (MJDOFF): Convert a TAI MJD to a UTC MJD.
-* - "UTCTOTAI" (MJDOFF): Convert a UTC MJD to a TAI MJD.
-* - "TAITOTT" (MJDOFF): Convert a TAI MJD to a TT MJD.
-* - "TTTOTAI" (MJDOFF): Convert a TT MJD to a TAI MJD.
-* - "TTTOTDB" (MJDOFF, OBSLON, OBSLAT, OBSALT): Convert a TT MJD to a TDB MJD.
-* - "TDBTOTT" (MJDOFF, OBSLON, OBSLAT, OBSALT): Convert a TDB MJD to a TT MJD.
-* - "TTTOTCG" (MJDOFF): Convert a TT MJD to a TCG MJD.
-* - "TCGTOTT" (MJDOFF): Convert a TCG MJD to a TT MJD.
-* - "TDBTOTCB" (MJDOFF): Convert a TDB MJD to a TCB MJD.
-* - "TCBTOTDB" (MJDOFF): Convert a TCB MJD to a TDB MJD.
-* - "UTTOGMST" (MJDOFF): Convert a UT MJD to a GMST MJD.
-* - "GMSTTOUT" (MJDOFF): Convert a GMST MJD to a UT MJD.
-* - "GMSTTOLMST" (MJDOFF, OBSLON, OBSLAT): Convert a GMST MJD to a LMST MJD.
-* - "LMSTTOGMST" (MJDOFF, OBSLON, OBSLAT): Convert a LMST MJD to a GMST MJD.
-* - "LASTTOLMST" (MJDOFF, OBSLON, OBSLAT): Convert a GMST MJD to a LMST MJD.
-* - "LMSTTOLAST" (MJDOFF, OBSLON, OBSLAT): Convert a LMST MJD to a GMST MJD.
-* - "UTTOUTC" (DUT1): Convert a UT1 MJD to a UTC MJD.
-* - "UTCTOUT" (DUT1): Convert a UTC MJD to a UT1 MJD.
-* - "LTTOUTC" (LTOFF): Convert a Local Time MJD to a UTC MJD.
-* - "UTCTOLT" (LTOFF): Convert a UTC MJD to a Local Time MJD.
-*
-* The units for the values processed by the above conversions are as
-* follows:
-*
-* - Julian epochs and offsets: Julian years
-* - Besselian epochs and offsets: Tropical years
-* - Modified Julian Dates and offsets: days
-* - Julian Dates and offsets: days
-*
-* The arguments used in the above conversions are the zero-points
-* used by the
-c astTransform function.
-f AST_TRANSFORM routine.
-* The axis values supplied and returned by
-c astTransform
-f AST_TRANSFORM
-* are offsets away from these zero-points:
-*
-* - MJDOFF: The zero-point being used with MJD values.
-* - JDOFF: The zero-point being used with Julian Date values.
-* - BEPOFF: The zero-point being used with Besselian epoch values.
-* - JEPOFF: The zero-point being used with Julian epoch values.
-* - OBSLON: Observer longitude in radians (+ve westwards).
-* - OBSLAT: Observer geodetic latitude (IAU 1975) in radians (+ve northwards).
-* - OBSALT: Observer geodetic altitude (IAU 1975) in metres.
-* - DUT1: The UT1-UTC value to use.
-* - LTOFF: The offset between Local Time and UTC (in hours, positive
-* for time zones east of Greenwich).
-*--
-*/
-
-/* Local Variables: */
- int cvttype; /* Conversion type code */
-
-/* Check the inherited status. */
- if ( !astOK ) return;
-
-/* Validate the type string supplied and obtain the equivalent
- conversion type code. */
- cvttype = CvtCode( cvt, status );
-
-/* If the string was not recognised, then report an error. */
- if ( astOK && ( cvttype == AST__TIME_NULL ) ) {
- astError( AST__TIMIN,
- "%s(%s): Invalid TimeMap time coordinate "
- "conversion type \"%s\".", status, "astAddTime", astGetClass( this ), cvt );
- }
-
-/* Add the new conversion to the TimeMap. */
- AddTimeCvt( this, cvttype, args, status );
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a TimeMap to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timemap.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* TimeMap member function (over-rides the astTransform method inherited
-* from the Mapping class).
-
-* Description:
-* This function takes a TimeMap and a set of points encapsulated
-* in a PointSet and transforms the points so as to perform the
-* sequence of time coordinate conversions specified by
-* previous invocations of astTimeAdd.
-
-* Parameters:
-* this
-* Pointer to the TimeMap.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of coordinates for the TimeMap being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstPointSet *result; /* Pointer to output PointSet */
- AstTimeMap *map; /* Pointer to TimeMap to be applied */
- double **ptr_in; /* Pointer to input coordinate data */
- double **ptr_out; /* Pointer to output coordinate data */
- double *args; /* Pointer to argument list for conversion */
- double *time; /* Pointer to output time axis value array */
- double gmstx; /* GMST offset (in days) */
- double tai; /* Absolute TAI value (in days) */
- double tdb; /* Absolute TDB value (in days) */
- double tt; /* Absolute TT value (in days) */
- double utc; /* Absolute UTC value (in days) */
- int ct; /* Conversion type */
- int cvt; /* Loop counter for conversions */
- int end; /* Termination index for conversion loop */
- int inc; /* Increment for conversion loop */
- int ncoord_in; /* Number of coordinates per input point */
- int npoint; /* Number of points */
- int point; /* Loop counter for points */
- int start; /* Starting index for conversion loop */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the TimeMap. */
- map = (AstTimeMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Mapping class. This function validates
- all arguments and generates an output PointSet if necessary, but does not
- actually transform any coordinate values. */
- result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- coordinate conversions needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
- PointSet and obtain pointers for accessing the input and output coordinate
- values. */
- ncoord_in = astGetNcoord( in );
- npoint = astGetNpoint( in );
- ptr_in = astGetPoints( in );
- ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse transformation, according
- to the direction specified and whether the mapping has been inverted. */
- if ( astGetInvert( this ) ) forward = !forward;
-
-/* Transform the coordinate values. */
-/* -------------------------------- */
-/* Use "time" as a synonym for the array of time axis values stored in
- the output PointSet. */
- if ( astOK ) {
- time = ptr_out[ 0 ];
-
-/* Initialise the output coordinate values by copying the input ones. */
- if( time != ptr_in[ 0 ] ) {
- (void) memcpy( time, ptr_in[ 0 ], sizeof( double ) * (size_t) npoint );
- }
-
-/* We will loop to apply each time coordinate conversion in turn to the
- (time) array. However, if the inverse transformation was requested,
- we must loop through these transformations in reverse order, so set up
- appropriate limits and an increment to control this loop. */
- start = forward ? 0 : map->ncvt - 1;
- end = forward ? map->ncvt : -1;
- inc = forward ? 1 : -1;
-
-/* Loop through the coordinate conversions in the required order and obtain a
- pointer to the argument list for the current conversion. */
- for ( cvt = start; cvt != end; cvt += inc ) {
- args = map->cvtargs[ cvt ];
-
-/* Classify the SLALIB sky coordinate conversion to be applied. */
- ct = map->cvttype[ cvt ];
- switch ( ct ) {
-
-/* MJD to MJD. */
-/* ---------- */
- case AST__MJDTOMJD:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] += args[ 2 ];
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] -= args[ 2 ];
- }
- }
- }
- break;
-
-/* MJD to JD. */
-/* ---------- */
- case AST__MJDTOJD:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] += args[ 2 ];
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] -= args[ 2 ];
- }
- }
- }
- break;
-
-/* JD to MJD. */
-/* ---------- */
- case AST__JDTOMJD:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] += args[ 2 ];
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] -= args[ 2 ];
- }
- }
- }
- break;
-
-/* MJD to Besselian epoch. */
-/* ----------------------- */
- case AST__MJDTOBEP:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] = palSlaEpb( time[ point ] ) + args[ 2 ];
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] = palSlaEpb2d( time[ point ] ) + args[ 3 ];
- }
- }
- }
- break;
-
-/* Besselian epoch to MJD. */
-/* ----------------------- */
- case AST__BEPTOMJD:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] = palSlaEpb2d( time[ point ] ) + args[ 2 ];
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] = palSlaEpb( time[ point ] ) + args[ 3 ];
- }
- }
- }
- break;
-
-/* MJD to Julian epoch. */
-/* -------------------- */
- case AST__MJDTOJEP:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] = palSlaEpj( time[ point ] ) + args[ 2 ];
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] = palSlaEpj2d( time[ point ] ) + args[ 3 ];
- }
- }
- }
- break;
-
-/* Julian epoch to MJD. */
-/* -------------------- */
- case AST__JEPTOMJD:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] = palSlaEpj2d( time[ point ] ) + args[ 2 ];
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] = palSlaEpj( time[ point ] ) + args[ 3 ];
- }
- }
- }
- break;
-
-/* TAI to UTC. */
-/* ----------- */
- case AST__TAITOUTC:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] += astDat( time[ point ] +
- args[ 0 ], 0 )/SPD;
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] += astDat( time[ point ] +
- args[ 0 ], 1 )/SPD;
- }
- }
- }
- break;
-
-/* UTC to TAI. */
-/* ----------- */
- case AST__UTCTOTAI:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] += astDat( time[ point ] +
- args[ 0 ], 1 )/SPD;
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] += astDat( time[ point ] +
- args[ 0 ], 0 )/SPD;
- }
- }
- }
- break;
-
-/* TAI to TT. */
-/* ---------- */
- case AST__TAITOTT:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] += (TTOFF/SPD);
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] -= (TTOFF/SPD);
- }
- }
- }
- break;
-
-/* TT to TAI. */
-/* ---------- */
- case AST__TTTOTAI:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] -= (TTOFF/SPD);
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] += (TTOFF/SPD);
- }
- }
- }
- break;
-
-/* TT to TDB. */
-/* ---------- */
-/* For the purpose of estimating TDB-TT, we assume UTC is a good approximation
- to UT1, and that TT is a good approximation to TDB. */
- case AST__TTTOTDB:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- tt = time[ point ] + args[ 0 ];
- tai = tt - (TTOFF/SPD);
- utc = tai + astDat( tai, 0 )/SPD;
- time[ point ] += Rcc( tt, utc, args[ 1 ], args[ 4 ],
- args[ 5 ], status )/SPD;
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- tdb = time[ point ] + args[ 0 ];
- tai = tdb - (TTOFF/SPD);
- utc = tai + astDat( tai, 0 )/SPD;
- time[ point ] -= Rcc( tdb, utc, args[ 1 ], args[ 4 ],
- args[ 5 ], status )/SPD;
- }
- }
- }
- break;
-
-/* TDB to TT. */
-/* ---------- */
-/* For the purpose of estimating TDB-TT, we assume UTC is a good approximation
- to UT1, and that TT is a good approximation to TDB. */
- case AST__TDBTOTT:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- tdb = time[ point ] + args[ 0 ];
- tai = tdb - (TTOFF/SPD);
- utc = tai + astDat( tai, 0 )/SPD;
- time[ point ] -= Rcc( tdb, utc, args[ 1 ], args[ 4 ],
- args[ 5 ], status )/SPD;
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- tt = time[ point ] + args[ 0 ];
- tai = tt - (TTOFF/SPD);
- utc = tai + astDat( tai, 0 )/SPD;
- time[ point ] += Rcc( tt, utc, args[ 1 ], args[ 4 ],
- args[ 5 ], status )/SPD;
- }
- }
- }
- break;
-
-/* TT to TCG. */
-/* ---------- */
- case AST__TTTOTCG:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] += time[ point ]*LG + args[ 1 ];
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] = ( time[ point ] - args[ 1 ] ) /
- ( 1.0 + LG );
- }
- }
- }
- break;
-
-/* TCG to TT. */
-/* ---------- */
- case AST__TCGTOTT:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] = ( time[ point ] - args[ 1 ] ) /
- ( 1.0 + LG );
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] += time[ point ]*LG + args[ 1 ];
- }
- }
- }
- break;
-
-/* TDB to TCB. */
-/* ----------- */
-/* For the purpose of estimating TDB-TT, we assume UTC is a good approximation
- to UT1, and that TT is a good approximation to both TDB and TCB. */
- case AST__TDBTOTCB:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] += time[ point ]*LB + args[ 1 ];
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] = ( time[ point ] - args[ 1 ] ) /
- ( 1.0 + LB );
- }
- }
- }
- break;
-
-/* TCB to TDB. */
-/* ----------- */
-/* For the purpose of estimating TDB-TT, we assume UTC is a good approximation
- to UT1, and that TT is a good approximation to TDB. */
- case AST__TCBTOTDB:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] = ( time[ point ] - args[ 1 ] ) /
- ( 1.0 + LB );
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] += time[ point ]*LB + args[ 1 ];
- }
- }
- }
- break;
-
-/* UT to GMST . */
-/* ------------ */
- case AST__UTTOGMST:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] = Gmsta( time[ point ], args[ 0 ], 1, status );
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] = Gmsta( time[ point ], args[ 0 ], 0, status );
- }
- }
- }
- break;
-
-/* GMST to UT. */
-/* ----------- */
- case AST__GMSTTOUT:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] = Gmsta( time[ point ], args[ 0 ], 0, status );
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] = Gmsta( time[ point ], args[ 0 ], 1, status );
- }
- }
- }
- break;
-
-/* GMST to LMST. */
-/* ------------- */
- case AST__GMSTTOLMST:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] -= args[ 1 ]/D2PI;
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] += args[ 1 ]/D2PI;
- }
- }
- }
- break;
-
-/* LMST to GMST. */
-/* ------------- */
- case AST__LMSTTOGMST:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] += args[ 1 ]/D2PI;
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] -= args[ 1 ]/D2PI;
- }
- }
- }
- break;
-
-/* UT1 to UTC. */
-/* ------------- */
- case AST__UTTOUTC:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] -= args[ 0 ]/86400.0;
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] += args[ 0 ]/86400.0;
- }
- }
- }
- break;
-
-
-/* UTC to UT1. */
-/* ------------- */
- case AST__UTCTOUT:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] += args[ 0 ]/86400.0;
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] -= args[ 0 ]/86400.0;
- }
- }
- }
- break;
-
-/* LT to UTC. */
-/* ---------- */
- case AST__LTTOUTC:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] -= args[ 0 ]/24.0;
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] += args[ 0 ]/24.0;
- }
- }
- }
- break;
-
-
-/* UTC to LT. */
-/* ---------- */
- case AST__UTCTOLT:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] += args[ 0 ]/24.0;
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- time[ point ] -= args[ 0 ]/24.0;
- }
- }
- }
- break;
-
-/* LMST to LAST. */
-/* ------------- */
-/* Calculating the equation of the equinoxes required TDB. So we need to
- convert the given LMST to TDB. We first convert LMST to UT1. UT1 is
- equal to UTC to within 1 second. We then add on 32 seconds to get TAI
- (this value is correct since 1999 - for earlier epochs an error of the
- order of a minute will be introduced in the TAI value). We then add on
- TTOFF seconds to get TT. This TT is then used as an approximation to
- TDB. The total error in TDB is of the order of a few minutes, which
- corresponds to an error of a few tens of microseconds in the equation of
- the equinoxes. The sla precession-nutation model is accurate to around 3
- mas = 200 us, so the error in TDB will be insignificant. */
- case AST__LMSTTOLAST:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- gmstx = time[ point ] + args[ 1 ]/D2PI;
- tdb = Gmsta( gmstx, args[ 0 ], 0, status )
- + args[ 0 ] + (32 + TTOFF)/SPD;
- time[ point ] += palSlaEqeqx( tdb )/D2PI;
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- gmstx = time[ point ] + args[ 1 ]/D2PI;
- tdb = Gmsta( gmstx, args[ 0 ], 0, status )
- + args[ 0 ] + (32+TTOFF)/SPD;
- time[ point ] -= palSlaEqeqx( tdb )/D2PI;
- }
- }
- }
- break;
-
-/* LAST to LMST. */
-/* ------------- */
- case AST__LASTTOLMST:
- if ( forward ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- gmstx = time[ point ] + args[ 1 ]/D2PI;
- tdb = Gmsta( gmstx, args[ 0 ], 0, status )
- + args[ 0 ] + (32+TTOFF)/SPD;
- time[ point ] -= palSlaEqeqx( tdb )/D2PI;
- }
- }
- } else {
- for ( point = 0; point < npoint; point++ ) {
- if ( time[ point ] != AST__BAD ) {
- gmstx = time[ point ] + args[ 1 ]/D2PI;
- tdb = Gmsta( gmstx, args[ 0 ], 0, status )
- + args[ 0 ] + (32 + TTOFF)/SPD;
- time[ point ] += palSlaEqeqx( tdb )/D2PI;
- }
- }
- }
-
- }
- }
- }
-
-/* If an error has occurred and a new PointSet may have been created, then
- clean up by annulling it. In any case, ensure that a NULL result is
- returned.*/
- if ( !astOK ) {
- if ( !out ) result = astAnnul( result );
- result = NULL;
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for TimeMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for TimeMap objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstTimeMap *in; /* Pointer to input TimeMap */
- AstTimeMap *out; /* Pointer to output TimeMap */
- int cvt; /* Loop counter for coordinate conversions */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output TimeMap structures. */
- in = (AstTimeMap *) objin;
- out = (AstTimeMap *) objout;
-
-/* For safety, first clear any references to the input memory from the output
- TimeMap. */
- out->cvtargs = NULL;
- out->cvttype = NULL;
-
-/* Allocate memory for the output array of argument list pointers. */
- out->cvtargs = astMalloc( sizeof( double * ) * (size_t) in->ncvt );
-
-/* If necessary, allocate memory and make a copy of the input array of
- coordinate conversion codes. */
- if ( in->cvttype ) out->cvttype = astStore( NULL, in->cvttype,
- sizeof( int )
- * (size_t) in->ncvt );
-
-/* If OK, loop through each conversion in the input TimeMap and make a copy of
- its argument list, storing the new pointer in the output argument list
- array. */
- if ( astOK ) {
- for ( cvt = 0; cvt < in->ncvt; cvt++ ) {
- out->cvtargs[ cvt ] = astStore( NULL, in->cvtargs[ cvt ],
- astSizeOf( in->cvtargs[ cvt ] ) );
- }
-
-/* If an error occurred while copying the argument lists, loop through the
- conversions again and clean up by ensuring that the new memory allocated for
- each argument list is freed. */
- if ( !astOK ) {
- for ( cvt = 0; cvt < in->ncvt; cvt++ ) {
- out->cvtargs[ cvt ] = astFree( out->cvtargs[ cvt ] );
- }
- }
- }
-
-/* If an error occurred, free all other memory allocated above. */
- if ( !astOK ) {
- out->cvtargs = astFree( out->cvtargs );
- out->cvttype = astFree( out->cvttype );
- }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for TimeMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for TimeMap objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstTimeMap *this; /* Pointer to TimeMap */
- int cvt; /* Loop counter for coordinate conversions */
-
-/* Obtain a pointer to the TimeMap structure. */
- this = (AstTimeMap *) obj;
-
-/* Loop to free the memory containing the argument list for each coordinate
- conversion. */
- for ( cvt = 0; cvt < this->ncvt; cvt++ ) {
- this->cvtargs[ cvt ] = astFree( this->cvtargs[ cvt ] );
- }
-
-/* Free the memory holding the array of conversion types and the array of
- argument list pointers. */
- this->cvtargs = astFree( this->cvtargs );
- this->cvttype = astFree( this->cvttype );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for TimeMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timemap.h"
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the TimeMap class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the TimeMap whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstTimeMap *this; /* Pointer to the TimeMap structure */
- char key[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- const char *argdesc[ MAX_ARGS ]; /* Pointers to argument descriptions */
- const char *comment; /* Pointer to comment string */
- const char *sval; /* Pointer to string value */
- int iarg; /* Loop counter for arguments */
- int icvt; /* Loop counter for conversion steps */
- int ival; /* Integer value */
- int nargs; /* Number of user-supplied arguments */
- int szargs; /* Number of stored arguments */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the TimeMap structure. */
- this = (AstTimeMap *) this_object;
-
-/* Write out values representing the instance variables for the TimeMap
- class. Accompany these with appropriate comment strings, possibly
- depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* Number of conversion steps. */
-/* --------------------------- */
-/* Regard this as "set" if it is non-zero. */
- ival = this->ncvt;
- set = ( ival != 0 );
- astWriteInt( channel, "Ntime", set, 0, ival, "Number of conversion steps" );
-
-/* Write out data for each conversion step... */
- for ( icvt = 0; icvt < this->ncvt; icvt++ ) {
-
-/* Conversion type. */
-/* ---------------- */
-/* Change each conversion type code into an equivalent string and
- obtain associated descriptive information. If the conversion code
- was not recognised, report an error and give up. */
- if ( astOK ) {
- sval = CvtString( this->cvttype[ icvt ], &comment,
- &nargs, &szargs, argdesc, status );
- if ( astOK && !sval ) {
- astError( AST__TIMIN,
- "astWrite(%s): Corrupt %s contains invalid TimeMap "
- "time coordinate conversion code (%d).", status,
- astGetClass( channel ), astGetClass( this ),
- (int) this->cvttype[ icvt ] );
- break;
- }
-
-/* Create an appropriate keyword and write out the conversion code
- information. */
- (void) sprintf( key, "Time%d", icvt + 1 );
- astWriteString( channel, key, 1, 1, sval, comment );
-
-/* Write out data for each conversion argument... */
- for ( iarg = 0; iarg < szargs; iarg++ ) {
-
-/* Arguments. */
-/* ---------- */
-/* Create an appropriate keyword and write out the argument value,
- accompanied by the descriptive comment obtained above. */
- if( this->cvtargs[ icvt ][ iarg ] != AST__BAD ) {
- (void) sprintf( key, "Time%d%c", icvt + 1, ALPHABET[ iarg ] );
- astWriteDouble( channel, key, 1, 1, this->cvtargs[ icvt ][ iarg ],
- argdesc[ iarg ] );
- }
- }
-
-/* Quit looping if an error occurs. */
- if ( !astOK ) break;
- }
- }
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsATimeMap and astCheckTimeMap functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(TimeMap,Mapping)
-astMAKE_CHECK(TimeMap)
-
-AstTimeMap *astTimeMap_( int flags, const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astTimeMap
-f AST_TIMEMAP
-
-* Purpose:
-* Create a TimeMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "timemap.h"
-c AstTimeMap *astTimeMap( int flags, const char *options, ... )
-f RESULT = AST_TIMEMAP( FLAGS, OPTIONS, STATUS )
-
-* Class Membership:
-* TimeMap constructor.
-
-* Description:
-* This function creates a new TimeMap and optionally initialises
-* its attributes.
-*
-* A TimeMap is a specialised form of 1-dimensional Mapping which can be
-* used to represent a sequence of conversions between standard time
-* coordinate systems.
-*
-* When a TimeMap is first created, it simply performs a unit
-c (null) Mapping. Using the astTimeAdd
-f (null) Mapping. Using the AST_TIMEADD
-c function, a series of coordinate conversion steps may then be
-f routine, a series of coordinate conversion steps may then be
-* added. This allows multi-step conversions between a variety of
-* time coordinate systems to be assembled out of a set of building
-* blocks.
-*
-* For details of the individual coordinate conversions available,
-c see the description of the astTimeAdd function.
-f see the description of the AST_TIMEADD routine.
-
-* Parameters:
-c flags
-f FLAGS = INTEGER (Given)
-c This parameter is reserved for future use and should currently
-f This argument is reserved for future use and should currently
-* always be set to zero.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new TimeMap. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-c If no initialisation is required, a zero-length string may be
-c supplied.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new TimeMap. The syntax used is identical to that for the
-f AST_SET routine. If no initialisation is required, a blank
-f value may be supplied.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astTimeMap()
-f AST_TIMEMAP = INTEGER
-* A pointer to the new TimeMap.
-
-* Notes:
-* - The nature and units of the coordinate values supplied for the
-* first input (i.e. the time input) of a TimeMap must be appropriate
-* to the first conversion step applied by the TimeMap. For instance, if
-* the first conversion step is "MJDTOBEP" (Modified Julian Date to
-* Besselian epoch) then the coordinate values for the first input should
-* be date in units of days. Similarly, the nature and units of the
-* coordinate values returned by a TimeMap will be determined by the
-* last conversion step applied by the TimeMap.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstTimeMap *new; /* Pointer to the new TimeMap */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the TimeMap, allocating memory and initialising the virtual
- function table as well if necessary. */
- new = astInitTimeMap( NULL, sizeof( AstTimeMap ), !class_init, &class_vtab,
- "TimeMap", flags );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new TimeMap's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new TimeMap. */
- return new;
-}
-
-AstTimeMap *astTimeMapId_( int flags, const char *options, ... ) {
-/*
-* Name:
-* astTimeMapId_
-
-* Purpose:
-* Create a TimeMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "timemap.h"
-* AstTimeMap *astTimeMapId_( int flags, const char *options, ... )
-
-* Class Membership:
-* TimeMap constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astTimeMap constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astTimeMap_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astTimeMap_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astTimeMap_.
-
-* Returned Value:
-* The ID value associated with the new TimeMap.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstTimeMap *new; /* Pointer to the new TimeMap */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the TimeMap, allocating memory and initialising the virtual
- function table as well if necessary. */
- new = astInitTimeMap( NULL, sizeof( AstTimeMap ), !class_init, &class_vtab,
- "TimeMap", flags );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new TimeMap's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new TimeMap. */
- return astMakeId( new );
-}
-
-AstTimeMap *astInitTimeMap_( void *mem, size_t size, int init,
- AstTimeMapVtab *vtab, const char *name,
- int flags, int *status ) {
-/*
-*+
-* Name:
-* astInitTimeMap
-
-* Purpose:
-* Initialise a TimeMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "timemap.h"
-* AstTimeMap *astInitTimeMap( void *mem, size_t size, int init,
-* AstTimeMapVtab *vtab, const char *name,
-* int flags )
-
-* Class Membership:
-* TimeMap initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new TimeMap object. It allocates memory (if necessary) to accommodate
-* the TimeMap plus any additional data associated with the derived class.
-* It then initialises a TimeMap structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a TimeMap at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the TimeMap is to be initialised.
-* This must be of sufficient size to accommodate the TimeMap data
-* (sizeof(TimeMap)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the TimeMap (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the TimeMap
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the TimeMap's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new TimeMap.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astClass
-* method).
-* flags
-* This parameter is reserved for future use. It is currently ignored.
-
-* Returned Value:
-* A pointer to the new TimeMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstTimeMap *new; /* Pointer to the new TimeMap */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitTimeMapVtab( vtab, name );
-
-/* Initialise a 1D Mapping structure (the parent class) as the first component
- within the TimeMap structure, allocating memory if necessary. Specify that
- the Mapping should be defined in both the forward and inverse directions. */
- new = (AstTimeMap *) astInitMapping( mem, size, 0,
- (AstMappingVtab *) vtab, name,
- 1, 1, 1, 1 );
-
- if ( astOK ) {
-
-/* Initialise the TimeMap data. */
-/* --------------------------- */
-/* The initial state is with no conversions set, in which condition the
- TimeMap simply implements a unit mapping. */
- new->ncvt = 0;
- new->cvtargs = NULL;
- new->cvttype = NULL;
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstTimeMap *astLoadTimeMap_( void *mem, size_t size,
- AstTimeMapVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadTimeMap
-
-* Purpose:
-* Load a TimeMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "timemap.h"
-* AstTimeMap *astLoadTimeMap( void *mem, size_t size,
-* AstTimeMapVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* TimeMap loader.
-
-* Description:
-* This function is provided to load a new TimeMap using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* TimeMap structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a TimeMap at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the TimeMap is to be
-* loaded. This must be of sufficient size to accommodate the
-* TimeMap data (sizeof(TimeMap)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the TimeMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the TimeMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstTimeMap) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new TimeMap. If this is NULL, a pointer to
-* the (static) virtual function table for the TimeMap class is
-* used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "TimeMap" is used instead.
-
-* Returned Value:
-* A pointer to the new TimeMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Constants: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstTimeMap *new; /* Pointer to the new TimeMap */
- char *sval; /* Pointer to string value */
- char key[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- const char *argdesc[ MAX_ARGS ]; /* Pointers to argument descriptions */
- const char *comment; /* Pointer to comment string */
- int iarg; /* Loop counter for arguments */
- int icvt; /* Loop counter for conversion steps */
- int nargs; /* Number of user-supplied arguments */
- int szargs; /* Number of stored arguments */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this TimeMap. In this case the
- TimeMap belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstTimeMap );
- vtab = &class_vtab;
- name = "TimeMap";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitTimeMapVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built TimeMap. */
- new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "TimeMap" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* Number of conversion steps. */
-/* --------------------------- */
-/* Read the number of conversion steps and allocate memory to hold
- data for each step. */
- new->ncvt = astReadInt( channel, "ntime", 0 );
- if ( new->ncvt < 0 ) new->ncvt = 0;
- new->cvttype = astMalloc( sizeof( int ) * (size_t) new->ncvt );
- new->cvtargs = astMalloc( sizeof( double * ) * (size_t) new->ncvt );
-
-/* If an error occurred, ensure that all allocated memory is freed. */
- if ( !astOK ) {
- new->cvttype = astFree( new->cvttype );
- new->cvtargs = astFree( new->cvtargs );
-
-/* Otherwise, initialise the argument pointer array. */
- } else {
- for ( icvt = 0; icvt < new->ncvt; icvt++ ) {
- new->cvtargs[ icvt ] = NULL;
- }
-
-/* Read in data for each conversion step... */
- for ( icvt = 0; icvt < new->ncvt; icvt++ ) {
-
-/* Conversion type. */
-/* ---------------- */
-/* Create an appropriate keyword and read the string representation of
- the conversion type. */
- (void) sprintf( key, "time%d", icvt + 1 );
- sval = astReadString( channel, key, NULL );
-
-/* If no value was read, report an error. */
- if ( astOK ) {
- if ( !sval ) {
- astError( AST__BADIN,
- "astRead(%s): A time coordinate conversion "
- "type is missing from the input TimeMap data.", status,
- astGetClass( channel ) );
-
-/* Otherwise, convert the string representation into the required
- conversion type code. */
- } else {
- new->cvttype[ icvt ] = CvtCode( sval, status );
-
-/* If the string was not recognised, report an error. */
- if ( new->cvttype[ icvt ] == AST__TIME_NULL ) {
- astError( AST__BADIN,
- "astRead(%s): Invalid time conversion "
- "type \"%s\" in TimeMap data.", status,
- astGetClass( channel ), sval );
- }
- }
-
-/* Free the memory holding the string value. */
- sval = astFree( sval );
- }
-
-/* Obtain the number of arguments associated with the conversion and
- allocate memory to hold them. */
- (void) CvtString( new->cvttype[ icvt ], &comment,
- &nargs, &szargs, argdesc, status );
- new->cvtargs[ icvt ] = astMalloc( sizeof( double ) *
- (size_t) szargs );
-
-/* Read in data for each argument... */
- if ( astOK ) {
- for ( iarg = 0; iarg < szargs; iarg++ ) {
-
-/* Arguments. */
-/* ---------- */
-/* Create an appropriate keyword and read each argument value. */
- (void) sprintf( key, "time%d%c", icvt + 1, ALPHABET[ iarg ] );
- new->cvtargs[ icvt ][ iarg ] = astReadDouble( channel, key,
- AST__BAD );
- }
- }
-
-/* Quit looping if an error occurs. */
- if ( !astOK ) break;
- }
- }
-
-/* If an error occurred, clean up by deleting the new TimeMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new TimeMap pointer. */
- return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-void astTimeAdd_( AstTimeMap *this, const char *cvt, const double args[], int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,TimeMap,TimeAdd))( this, cvt, args, status );
-}
-
-
-
-
diff --git a/ast-5.3-1/timemap.h b/ast-5.3-1/timemap.h
deleted file mode 100644
index 8e1c540..0000000
--- a/ast-5.3-1/timemap.h
+++ /dev/null
@@ -1,285 +0,0 @@
-#if !defined( TIMEMAP_INCLUDED ) /* Include this file only once */
-#define TIMEMAP_INCLUDED
-/*
-*+
-* Name:
-* timemap.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the TimeMap class.
-
-* Invocation:
-* #include "timemap.h"
-
-* Description:
-* This include file defines the interface to the TimeMap class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The TimeMap class encapsulates various time coordinate
-* conversions. Since, typically, a sequence of these conversions is
-* required, a TimeMap can be used to accumulate a series of conversions
-* which it then applies in sequence.
-
-* Inheritance:
-* The TimeMap class inherits from the Mapping class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* None.
-
-* Methods Over-Ridden:
-* Public:
-* astTransform
-* Use an TimeMap to transform a set of points.
-
-* Protected:
-* astMapMerge
-* Simplify a sequence of Mappings containing an TimeMap.
-
-* New Methods Defined:
-* Public:
-* astTimeAdd
-* Add a coordinate conversion step to an TimeMap.
-
-* Private:
-* None.
-
-* Other Class Functions:
-* Public:
-* astIsATimeMap
-* Test class membership.
-* astTimeMap
-* Create an TimeMap.
-
-* Protected:
-* astCheckTimeMap
-* Validate class membership.
-* astInitTimeMap
-* Initialise an TimeMap.
-* astLoadTimeMap
-* Load an TimeMap.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstTimeMap
-* TimeMap object type.
-
-* Protected:
-* AstTimeMapVtab
-* TimeMap virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 24-MAY-2005 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* TimeMap structure. */
-/* ----------------- */
-/* This structure contains all information that is unique to each
- object in the class (e.g. its instance variables). */
-typedef struct AstTimeMap {
-
-/* Attributes inherited from the parent class. */
- AstMapping mapping; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- int *cvttype; /* Pointer to array of conversion types */
- double **cvtargs; /* Pointer to argument list pointer array */
- int ncvt; /* Number of conversions to perform */
-} AstTimeMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstTimeMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstMappingVtab mapping_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- void (* TimeAdd)( AstTimeMap *, const char *, const double[], int * );
-} AstTimeMapVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstTimeMapGlobals {
- AstTimeMapVtab Class_Vtab;
- int Class_Init;
-} AstTimeMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitTimeMapGlobals_( AstTimeMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(TimeMap) /* Check class membership */
-astPROTO_ISA(TimeMap) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstTimeMap *astTimeMap_( int, const char *, int *, ...);
-#else
-AstTimeMap *astTimeMapId_( int, const char *, ... )__attribute__((format(printf,2,3)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstTimeMap *astInitTimeMap_( void *, size_t, int, AstTimeMapVtab *,
- const char *, int, int * );
-
-/* Vtab initialiser. */
-void astInitTimeMapVtab_( AstTimeMapVtab *, const char *, int * );
-
-/* Loader. */
-AstTimeMap *astLoadTimeMap_( void *, size_t, AstTimeMapVtab *,
- const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-void astTimeAdd_( AstTimeMap *, const char *, const double[], int * );
-
-#if defined(astCLASS) /* Protected. */
-double astDat_( double, int, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckTimeMap(this) astINVOKE_CHECK(TimeMap,this,0)
-#define astVerifyTimeMap(this) astINVOKE_CHECK(TimeMap,this,1)
-
-/* Test class membership. */
-#define astIsATimeMap(this) astINVOKE_ISA(TimeMap,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astTimeMap astINVOKE(F,astTimeMap_)
-#else
-#define astTimeMap astINVOKE(F,astTimeMapId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitTimeMap(mem,size,init,vtab,name,flags) \
-astINVOKE(O,astInitTimeMap_(mem,size,init,vtab,name,flags,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitTimeMapVtab(vtab,name) astINVOKE(V,astInitTimeMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadTimeMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadTimeMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckTimeMap to validate TimeMap pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-#define astTimeAdd(this,cvt,args) \
-astINVOKE(V,astTimeAdd_(astCheckTimeMap(this),cvt,args,STATUS_PTR))
-
-#if defined(astCLASS) /* Protected */
-#define astDat(in,forward) astDat_(in,forward,STATUS_PTR)
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/tpn.c b/ast-5.3-1/tpn.c
deleted file mode 100644
index 3a2f26e..0000000
--- a/ast-5.3-1/tpn.c
+++ /dev/null
@@ -1,382 +0,0 @@
-#include <math.h>
-#include <stdlib.h>
-#include "wcsmath.h"
-#include "wcstrig.h"
-#include "proj.h"
-
-#define copysign(X, Y) ((Y) < 0.0 ? -fabs(X) : fabs(X))
-#define TPN 999
-
-/*============================================================================
-* TAN: gnomonic projection, with correction terms.
-*
-* This projection is no longer part of the FITSWCS standard, but is
-* retained here for use b the AST library as a means of implementing
-* the IRAF TNX projection, and the DSS encoding.
-*
-* Given and/or returned:
-* prj->p Array of latitude coefficients
-* prj->p2 Array of longitude coefficients
-* prj->flag TPN, or -TPN if prj->flag is given < 0.
-* prj->r0 r0; reset to 180/pi if 0.
-*
-* Returned:
-* prj->code "TPN"
-* prj->phi0 0.0
-* prj->theta0 90.0
-* prj->astPRJfwd Pointer to astTPNfwd().
-* prj->astPRJrev Pointer to astTPNrev().
-* prj->w[ 0 ] Set to 0.0 if a simple tan projection is required
-* (with no polynomial correction). Otherwise, set to 1.0.
-*===========================================================================*/
-
-int astTPNset(prj)
-
-struct AstPrjPrm *prj;
-
-{
- int m;
-
- prj->flag = copysign(TPN, prj->flag);
- prj->phi0 = 0.0;
- prj->theta0 = 90.0;
-
- if (prj->r0 == 0.0) prj->r0 = R2D;
-
- prj->astPRJfwd = astTPNfwd;
- prj->astPRJrev = astTPNrev;
-
-/* If all co-efficients have their "unit" values, we do not need to
- use the polynomial correction. */
- prj->w[ 0 ] = 0.0;
-
- if( prj->p[ 0 ] != 0.0 || prj->p2[ 0 ] != 0.0 ) {
- prj->w[ 0 ] = 1.0;
-
- } else if( prj->p[ 1 ] != 1.0 || prj->p2[ 1 ] != 1.0 ) {
- prj->w[ 0 ] = 1.0;
-
- } else {
- for( m = 2; m < WCSLIB_MXPAR; m++ ){
- if( prj->p[ m ] != 0.0 || prj->p2[ m ] != 0.0 ){
- prj->w[ 0 ] = 1.0;
- break;
- }
- }
- }
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astTPNfwd(phi, theta, prj, xx, yy)
-
-const double phi, theta;
-double *xx, *yy;
-struct AstPrjPrm *prj;
-
-{
- double r, s, xi, eta, x2, xy, y2, r2, x3, x2y, xy2, y3, r3, x4, x3y,
- x2y2, xy3, y4, x5, x4y, x3y2, x2y3, xy4, y5, r5, x6, x5y, x4y2,
- x3y3, x2y4, xy5, y6, x7, x6y, x5y2, x4y3, x3y4, x2y5, xy6, y7,
- r7, tol, f, g, fx, fy, gx, gy, dx, dy, x, y, denom;
- double *a, *b;
- int i, ok;
-
- if (abs(prj->flag) != TPN ) {
- if (astTPNset(prj)) return 1;
- }
-
- s = astSind(theta);
- if (prj->flag > 0 && s < 0.0) {
- return 2;
- }
-
- r = prj->r0*astCosd(theta)/s;
- xi = r*astSind(phi);
- eta = -r*astCosd(phi);
-
- /* Simple tan */
- if( prj->w[ 0 ] == 0.0 ){
- *xx = xi;
- *yy = eta;
-
- /* Tan with polynomial corrections: Iterate using Newton's method to
- get the (x,y) corresponding to the above (xi,eta). */
- } else {
- a = prj->p2;
- b = prj->p;
-
- /* Initial guess: linear solution assuming a3,... and b3,... are zero. */
- denom = a[1]*b[1] - a[2]*b[2];
- if( denom != 0.0 ) {
- x = ( xi*b[1] - eta*a[2] - a[0]*b[1] + b[0]*a[2] )/denom;
- y = -( xi*b[2] - eta*a[1] - a[0]*b[2] + b[0]*a[1] )/denom;
-
- } else {
- if( a[1] != 0.0 ){
- x = ( xi - a[0] )/a[1];
- } else {
- x = a[0];
- }
-
- if( b[1] != 0.0 ){
- y = ( eta - b[0] )/b[1];
- } else {
- y = b[0];
- }
- }
-
-/* Iterate up to 50 times, until the required relative accuracy is
- achieved. */
- tol = 1.0E-5;
- ok = 0;
- for (i = 0; i < 50; i++) {
-
-/* Get required products of the current x and y values */
- x2 = x*x;
- xy = x*y;
- y2 = y*y;
-
- r2 = x2 + y2;
- r = sqrt( r2 );
-
- x3 = x2*x;
- x2y = x2*y;
- xy2 = x*y2;
- y3 = y*y2;
-
- r3 = r*r2;
-
- x4 = x3*x;
- x3y = x3*y;
- x2y2 = x2*y2;
- xy3 = x*y3;
- y4 = y*y3;
-
- x5 = x4*x;
- x4y = x4*y;
- x3y2 = x3*y2;
- x2y3 = x2*y3;
- xy4 = x*y4;
- y5 = y*y4;
-
- r5 = r3*r2;
-
- x6 = x5*x;
- x5y = x5*y;
- x4y2 = x4*y2;
- x3y3 = x3*y3;
- x2y4 = x2*y4;
- xy5 = x*y5;
- y6 = y*y5;
-
- x7 = x6*x;
- x6y = x6*y;
- x5y2 = x5*y2;
- x4y3 = x4*y3;
- x3y4 = x3*y4;
- x2y5 = x2*y5;
- xy6 = x*y6;
- y7 = y*y6;
-
- r7 = r5*r2;
-
-/* Get the xi and eta models corresponding to the current x and y values */
- f = a[0] + a[1]*x + a[2]*y + a[3]*r + a[4]*x2
- + a[5]*xy + a[6]*y2 + a[7]*x3 + a[8]*x2y + a[9]*xy2
- + a[10]*y3 + a[11]*r3 + a[12]*x4 + a[13]*x3y + a[14]*x2y2
- + a[15]*xy3 + a[16]*y4 + a[17]*x5 + a[18]*x4y + a[19]*x3y2
- + a[20]*x2y3 + a[21]*xy4 + a[22]*y5 + a[23]*r5 + a[24]*x6
- + a[25]*x5y + a[26]*x4y2 + a[27]*x3y3 + a[28]*x2y4 + a[29]*xy5
- + a[30]*y6 + a[31]*x7 + a[32]*x6y + a[33]*x5y2 + a[34]*x4y3
- + a[35]*x3y4 + a[36]*x2y5 + a[37]*xy6 + a[38]*y7 + a[39]*r7;
-
- g = b[0] + b[1]*y + b[2]*x + b[3]*r + b[4]*y2
- + b[5]*xy + b[6]*x2 + b[7]*y3 + b[8]*xy2 + b[9]*x2y
- + b[10]*x3 + b[11]*r3 + b[12]*y4 + b[13]*xy3 + b[14]*x2y2
- + b[15]*x3y + b[16]*x4 + b[17]*y5 + b[18]*xy4 + b[19]*x2y3
- + b[20]*x3y2 + b[21]*x4y + b[22]*x5 + b[23]*r5 + b[24]*y6
- + b[25]*xy5 + b[26]*x2y4 + b[27]*x3y3 + b[28]*x4y2 + b[29]*x5y
- + b[30]*x6 + b[31]*y7 + b[32]*xy6 + b[33]*x2y5 + b[34]*x3y4
- + b[35]*x4y3 + b[36]*x5y2 + b[37]*x6y + b[38]*x7 + b[39]*r7;
-
-/* Partial derivative of xi wrt x... */
- fx = a[1] + a[3]*( (r!=0.0)?(x/r):0.0 ) + 2*a[4]*x +
- a[5]*y + 3*a[7]*x2 + 2*a[8]*xy + a[9]*y2 +
- 3*a[11]*r*x + 4*a[12]*x3 + 3*a[13]*x2y + 2*a[14]*xy2 +
- a[15]*y3 + 5*a[17]*x4 + 4*a[18]*x3y + 3*a[19]*x2y2 +
- 2*a[20]*xy3 + a[21]*y4 + 5*a[23]*r3*x + 6*a[24]*x5 +
- 5*a[25]*x4y + 4*a[26]*x3y2 + 3*a[27]*x2y3 + 2*a[28]*xy4 +
- a[29]*y5 + 7*a[31]*x6 + 6*a[32]*x5y + 5*a[33]*x4y2 +
- 4*a[34]*x3y3 + 3*a[35]*x2y4 + 2*a[36]*xy5 + a[37]*y6 +
- 7*a[39]*r5*x;
-
-/* Partial derivative of xi wrt y... */
- fy = a[2] + a[3]*( (r!=0.0)?(y/r):0.0 ) + a[5]*x +
- 2*a[6]*y + a[8]*x2 + 2*a[9]*xy + 3*a[10]*y2 +
- 3*a[11]*r*y + a[13]*x3 + 2*a[14]*x2y + 3*a[15]*xy2 +
- 4*a[16]*y3 + a[18]*x4 + 2*a[19]*x3y + 3*a[20]*x2y2 +
- 4*a[21]*xy3 + 5*a[22]*y4 + 5*a[23]*r3*y + a[25]*x5 +
- 2*a[26]*x4y + 3*a[27]*x3y2 + 4*a[28]*x2y3 + 5*a[29]*xy4 +
- 6*a[30]*y5 + a[32]*x6 + 2*a[33]*x5y + 3*a[34]*x4y2 +
- 4*a[35]*x3y3 + 5*a[36]*x2y4 + 6*a[37]*xy5 + 7*a[38]*y6 +
- 7*a[39]*r5*y;
-
-/* Partial derivative of eta wrt x... */
- gx = b[2] + b[3]*( (r!=0.0)?(x/r):0.0 ) + b[5]*y +
- 2*b[6]*x + b[8]*y2 + 2*b[9]*xy + 3*b[10]*x2 +
- 3*b[11]*r*x + b[13]*y3 + 2*b[14]*xy2 + 3*b[15]*x2y +
- 4*b[16]*x3 + b[18]*y4 + 2*b[19]*xy3 + 3*b[20]*x2y2 +
- 4*b[21]*x3y + 5*b[22]*x4 + 5*b[23]*r3*x + b[25]*y5 +
- 2*b[26]*xy4 + 3*b[27]*x2y3 + 4*b[28]*x3y2 + 5*b[29]*x4y +
- 6*b[30]*x5 + b[32]*y6 + 2*b[33]*xy5 + 3*b[34]*x2y4 +
- 4*b[35]*x3y3 + 5*b[36]*x4y2 + 6*b[37]*x5y + 7*b[38]*x6 +
- 7*b[39]*r5*x;
-
-/* Partial derivative of eta wrt y... */
- gy = b[1] + b[3]*( (r!=0.0)?(y/r):0.0 ) + 2*b[4]*y +
- b[5]*x + 3*b[7]*y2 + 2*b[8]*xy + b[9]*x2 +
- 3*b[11]*r*y + 4*b[12]*y3 + 3*b[13]*xy2 + 2*b[14]*x2y +
- b[15]*x3 + 5*b[17]*y4 + 4*b[18]*xy3 + 3*b[19]*x2y2 +
- 2*b[20]*x3y + b[21]*x4 + 5*b[23]*r3*y + 6*b[24]*y5 +
- 5*b[25]*xy4 + 4*b[26]*x2y3 + 3*b[27]*x3y2 + 2*b[28]*x4y +
- b[29]*x5 + 7*b[31]*y6 + 6*b[32]*xy5 + 5*b[33]*x2y4 +
- 4*b[34]*x3y3 + 3*b[35]*x4y2 + 2*b[36]*x5y + b[37]*x6 +
- 7*b[39]*r5*y;
-
-/* Calculate new x and y values. */
- f = f - xi;
- g = g - eta;
- dx = ( (-f*gy) + (g*fy) ) / ( (fx*gy) - (fy*gx) );
- dy = ( (-g*fx) + (f*gx) ) / ( (fx*gy) - (fy*gx) );
- x += dx;
- y += dy;
-
-/* Check if convergence has been achieved. */
- if( fabs(dx) <= tol*fabs(x) && fabs(dy) <= tol*fabs(y) ) {
- ok = 1;
- break;
- }
- }
-
- *xx = x;
- *yy = y;
-
- if( !ok ) return 2;
-
- }
-
- return 0;
-
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astTPNrev(x, y, prj, phi, theta)
-
-const double x, y;
-double *phi, *theta;
-struct AstPrjPrm *prj;
-
-{
- double r, xi, eta, x2, xy, y2, r2, x3, x2y, xy2, y3, r3, x4, x3y,
- x2y2, xy3, y4, x5, x4y, x3y2, x2y3, xy4, y5, r5, x6, x5y, x4y2,
- x3y3, x2y4, xy5, y6, x7, x6y, x5y2, x4y3, x3y4, x2y5, xy6, y7,
- r7;
- double *a, *b;
-
- if (abs(prj->flag) != TPN ) {
- if (astTPNset(prj)) return 1;
- }
-
- /* Simple tan */
- if( prj->w[ 0 ] == 0.0 ){
- xi = x;
- eta = y;
-
- /* Tan with polynomial corrections. */
- } else {
- x2 = x*x;
- xy = x*y;
- y2 = y*y;
-
- r2 = x2 + y2;
- r = sqrt( r2 );
-
- x3 = x2*x;
- x2y = x2*y;
- xy2 = x*y2;
- y3 = y*y2;
-
- r3 = r*r2;
-
- x4 = x3*x;
- x3y = x3*y;
- x2y2 = x2*y2;
- xy3 = x*y3;
- y4 = y*y3;
-
- x5 = x4*x;
- x4y = x4*y;
- x3y2 = x3*y2;
- x2y3 = x2*y3;
- xy4 = x*y4;
- y5 = y*y4;
-
- r5 = r3*r2;
-
- x6 = x5*x;
- x5y = x5*y;
- x4y2 = x4*y2;
- x3y3 = x3*y3;
- x2y4 = x2*y4;
- xy5 = x*y5;
- y6 = y*y5;
-
- x7 = x6*x;
- x6y = x6*y;
- x5y2 = x5*y2;
- x4y3 = x4*y3;
- x3y4 = x3*y4;
- x2y5 = x2*y5;
- xy6 = x*y6;
- y7 = y*y6;
-
- r7 = r5*r2;
-
- a = prj->p2;
- xi = a[0] + a[1]*x + a[2]*y + a[3]*r + a[4]*x2
- + a[5]*xy + a[6]*y2 + a[7]*x3 + a[8]*x2y + a[9]*xy2
- + a[10]*y3 + a[11]*r3 + a[12]*x4 + a[13]*x3y + a[14]*x2y2
- + a[15]*xy3 + a[16]*y4 + a[17]*x5 + a[18]*x4y + a[19]*x3y2
- + a[20]*x2y3 + a[21]*xy4 + a[22]*y5 + a[23]*r5 + a[24]*x6
- + a[25]*x5y + a[26]*x4y2 + a[27]*x3y3 + a[28]*x2y4 + a[29]*xy5
- + a[30]*y6 + a[31]*x7 + a[32]*x6y + a[33]*x5y2 + a[34]*x4y3
- + a[35]*x3y4 + a[36]*x2y5 + a[37]*xy6 + a[38]*y7 + a[39]*r7;
-
- b = prj->p;
- eta = b[0] + b[1]*y + b[2]*x + b[3]*r + b[4]*y2
- + b[5]*xy + b[6]*x2 + b[7]*y3 + b[8]*xy2 + b[9]*x2y
- + b[10]*x3 + b[11]*r3 + b[12]*y4 + b[13]*xy3 + b[14]*x2y2
- + b[15]*x3y + b[16]*x4 + b[17]*y5 + b[18]*xy4 + b[19]*x2y3
- + b[20]*x3y2 + b[21]*x4y + b[22]*x5 + b[23]*r5 + b[24]*y6
- + b[25]*xy5 + b[26]*x2y4 + b[27]*x3y3 + b[28]*x4y2 + b[29]*x5y
- + b[30]*x6 + b[31]*y7 + b[32]*xy6 + b[33]*x2y5 + b[34]*x3y4
- + b[35]*x4y3 + b[36]*x5y2 + b[37]*x6y + b[38]*x7 + b[39]*r7;
-
- }
-
- /* Now do the tan projection */
- r = sqrt(xi*xi + eta*eta);
- if (r == 0.0) {
- *phi = 0.0;
- } else {
- *phi = astATan2d(xi, -eta);
- }
- *theta = astATan2d(prj->r0, r);
-
- return 0;
-}
-
diff --git a/ast-5.3-1/tranmap.c b/ast-5.3-1/tranmap.c
deleted file mode 100644
index 328c27b..0000000
--- a/ast-5.3-1/tranmap.c
+++ /dev/null
@@ -1,2327 +0,0 @@
-/*
-*class++
-* Name:
-* TranMap
-
-* Purpose:
-* Mapping with specified forward and inverse transformations.
-
-* Constructor Function:
-c astTranMap
-f AST_TRANMAP
-
-* Description:
-* A TranMap is a Mapping which combines the forward transformation of
-* a supplied Mapping with the inverse transformation of another
-* supplied Mapping, ignoring the un-used transformation in each
-* Mapping (indeed the un-used transformation need not exist).
-*
-* When the forward transformation of the TranMap is referred to, the
-* transformation actually used is the forward transformation of the
-* first Mapping supplied when the TranMap was constructed. Likewise,
-* when the inverse transformation of the TranMap is referred to, the
-* transformation actually used is the inverse transformation of the
-* second Mapping supplied when the TranMap was constructed.
-
-* Inheritance:
-* The TranMap class inherits from the Mapping class.
-
-* Attributes:
-* The TranMap class does not define any new attributes beyond those
-* which are applicable to all Mappings.
-
-* Functions:
-c The TranMap class does not define any new functions beyond those
-f The TranMap class does not define any new routines beyond those
-* which are applicable to all Mappings.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 10-FEB-2004 (DSB):
-* Original version.
-* 19-JAN-2005 (DSB):
-* Fix memory leak.
-* 14-FEB-2006 (DSB):
-* - Over-ride the astDecompose method.
-* - Fix bug in MapSplit related to use of invert flags.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 10-MAY-2006 (DSB):
-* Override astEqual.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS TranMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "mapping.h" /* Coordinate Mappings (parent class) */
-#include "channel.h" /* I/O channels */
-#include "permmap.h" /* Coordinate permutation Mappings */
-#include "cmpmap.h" /* Compound Mappings */
-#include "unitmap.h" /* Unit Mappings */
-#include "tranmap.h" /* Interface definition for this class */
-#include "frame.h" /* Frames */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <string.h>
-#include <stdio.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static int *(* parent_mapsplit)( AstMapping *, int, const int *, AstMapping **, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(TranMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(TranMap,Class_Init)
-#define class_vtab astGLOBAL(TranMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstTranMapVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstTranMap *astTranMapId_( void *, void *, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMapping *RemoveRegions( AstMapping *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void Decompose( AstMapping *, AstMapping **, AstMapping **, int *, int *, int *, int * );
-static int GetObjSize( AstObject *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-/* Member functions. */
-/* ================= */
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two TranMaps are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "tranmap.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* TranMap member function (over-rides the astEqual protected
-* method inherited from the astMapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two TranMaps are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Object (a TranMap).
-* that
-* Pointer to the second Object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the TranMaps are equivalent, zero otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstTranMap *that;
- AstTranMap *this;
- int nin;
- int nout;
- int result;
- int that_inv1;
- int that_inv2;
- int this_inv1;
- int this_inv2;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain pointers to the two TranMap structures. */
- this = (AstTranMap *) this_object;
- that = (AstTranMap *) that_object;
-
-/* Check the second object is a TranMap. We know the first is a
- TranMap since we have arrived at this implementation of the virtual
- function. */
- if( astIsATranMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
- nin = astGetNin( this );
- nout = astGetNout( this );
- if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* Temporarily re-instate the original Invert flag values. */
- that_inv1 = astGetInvert( that->map1 );
- that_inv2 = astGetInvert( that->map2 );
- this_inv1 = astGetInvert( this->map1 );
- this_inv2 = astGetInvert( this->map2 );
-
- astSetInvert( this->map1, this->invert1 );
- astSetInvert( this->map2, this->invert2 );
- astSetInvert( that->map1, that->invert1 );
- astSetInvert( that->map2, that->invert2 );
-
-/* If the Invert flags for the two TranMaps differ, it may still be possible
- for them to be equivalent. First compare the TranMaps if their Invert
- flags are the same. In this case all the attributes of the two TranMaps
- must be identical. */
- if( astGetInvert( this ) == astGetInvert( that ) ) {
- if( astEqual( this->map1, that->map1 ) &&
- astEqual( this->map2, that->map2 ) ) {
- result = 1;
- }
-
-/* If the Invert flags for the two TranMaps differ, the attributes of the two
- TranMaps must be inversely related to each other. */
- } else {
-
- astInvert( that->map1 );
- astInvert( that->map2 );
-
- if( astEqual( this->map1, that->map2 ) &&
- astEqual( this->map2, that->map1 ) ) {
- result = 1;
- }
-
- }
-
-/* Restore the original Invert flag values. */
- astSetInvert( this->map1, this_inv1 );
- astSetInvert( this->map2, this_inv2 );
- astSetInvert( that->map1, that_inv1 );
- astSetInvert( that->map2, that_inv2 );
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "tranmap.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* TranMap member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied TranMap,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the TranMap.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstTranMap *this; /* Pointer to TranMap structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the TranMap structure. */
- this = (AstTranMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
- result += astGetObjSize( this->map1 );
- result += astGetObjSize( this->map2 );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static void Decompose( AstMapping *this_mapping, AstMapping **map1,
- AstMapping **map2, int *series, int *invert1,
- int *invert2, int *status ) {
-/*
-*
-* Name:
-* Decompose
-
-* Purpose:
-* Decompose a Mapping into two component Mappings.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "tranmap.h"
-* void Decompose( AstMapping *this, AstMapping **map1,
-* AstMapping **map2, int *series,
-* int *invert1, int *invert2, int *status )
-
-* Class Membership:
-* TranMap member function (over-rides the protected astDecompose
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns pointers to the two Mappings encapsulated by
-* a TranMap.
-
-* Parameters:
-* this
-* Pointer to the Mapping.
-* map1
-* Address of a location to receive a pointer to first component
-* Mapping (the forward Mapping).
-* map2
-* Address of a location to receive a pointer to second component
-* Mapping (the inverse Mapping).
-* series
-* Address of a location to receive a value indicating if the
-* component Mappings are applied in series or parallel. A non-zero
-* value means that the supplied Mapping is equivalent to applying map1
-* followed by map2 in series. A zero value means that the supplied
-* Mapping is equivalent to applying map1 to the lower numbered axes
-* and map2 to the higher numbered axes, in parallel. Zero is
-* returned for a TranMap.
-* invert1
-* The value of the Invert attribute to be used with map1.
-* invert2
-* The value of the Invert attribute to be used with map2.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - Any changes made to the component Mappings using the returned
-* pointers will be reflected in the supplied Mapping.
-
-*-
-*/
-
-
-/* Local Variables: */
- AstTranMap *this; /* Pointer to TranMap structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the TranMap structure. */
- this = (AstTranMap *) this_mapping;
-
-/* If the TranMap has been inverted, return the Mappings in reverse
- order with inverted Invert falgs. */
- if( astGetInvert( this ) ) {
- if( map1 ) *map1 = astClone( this->map2 );
- if( map2 ) *map2 = astClone( this->map1 );
- if( invert1 ) *invert1 = this->invert2 ? 0 : 1;
- if( invert2 ) *invert2 = this->invert1 ? 0 : 1;
-
-/* If the TranMap has not been inverted, return the Mappings in their
- original order with their original Invert flags. */
- } else {
- if( map1 ) *map1 = astClone( this->map1 );
- if( map2 ) *map2 = astClone( this->map2 );
- if( invert1 ) *invert1 = this->invert1;
- if( invert2 ) *invert2 = this->invert2;
- }
-}
-
-void astInitTranMapVtab_( AstTranMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitTranMapVtab
-
-* Purpose:
-* Initialise a virtual function table for a TranMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "tranmap.h"
-* void astInitTranMapVtab( AstTranMapVtab *vtab, const char *name )
-
-* Class Membership:
-* TranMap vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the TranMap class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsATranMap) to determine if an object belongs to
- this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
-
-/* None. */
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
- mapping->RemoveRegions = RemoveRegions;
-
-#if defined(THREAD_SAFE)
- parent_managelock = object->ManageLock;
- object->ManageLock = ManageLock;
-#endif
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
- parent_mapsplit = mapping->MapSplit;
- mapping->MapSplit = MapSplit;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- object->Equal = Equal;
- mapping->Decompose = Decompose;
- mapping->MapMerge = MapMerge;
- mapping->Rate = Rate;
-
-/* Declare the copy constructor, destructor and class dump function. */
- astSetCopy( vtab, Copy );
- astSetDelete( vtab, Delete );
- astSetDump( vtab, Dump, "TranMap", "Compound Transformation Mapping" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra,
- AstObject **fail, int *status ) {
-/*
-* Name:
-* ManageLock
-
-* Purpose:
-* Manage the thread lock on an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "object.h"
-* AstObject *ManageLock( AstObject *this, int mode, int extra,
-* AstObject **fail, int *status )
-
-* Class Membership:
-* TranMap member function (over-rides the astManageLock protected
-* method inherited from the parent class).
-
-* Description:
-* This function manages the thread lock on the supplied Object. The
-* lock can be locked, unlocked or checked by this function as
-* deteremined by parameter "mode". See astLock for details of the way
-* these locks are used.
-
-* Parameters:
-* this
-* Pointer to the Object.
-* mode
-* An integer flag indicating what the function should do:
-*
-* AST__LOCK: Lock the Object for exclusive use by the calling
-* thread. The "extra" value indicates what should be done if the
-* Object is already locked (wait or report an error - see astLock).
-*
-* AST__UNLOCK: Unlock the Object for use by other threads.
-*
-* AST__CHECKLOCK: Check that the object is locked for use by the
-* calling thread (report an error if not).
-* extra
-* Extra mode-specific information.
-* fail
-* If a non-zero function value is returned, a pointer to the
-* Object that caused the failure is returned at "*fail". This may
-* be "this" or it may be an Object contained within "this". Note,
-* the Object's reference count is not incremented, and so the
-* returned pointer should not be annulled. A NULL pointer is
-* returned if this function returns a value of zero.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A local status value:
-* 0 - Success
-* 1 - Could not lock or unlock the object because it was already
-* locked by another thread.
-* 2 - Failed to lock a POSIX mutex
-* 3 - Failed to unlock a POSIX mutex
-* 4 - Bad "mode" value supplied.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-*/
-
-/* Local Variables: */
- AstTranMap *this; /* Pointer to TranMap structure */
- int result; /* Returned status value */
-
-/* Initialise */
- result = 0;
-
-/* Check the supplied pointer is not NULL. */
- if( !this_object ) return result;
-
-/* Obtain a pointers to the TranMap structure. */
- this = (AstTranMap *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
- if( !result ) result = (*parent_managelock)( this_object, mode, extra,
- fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
- the supplied Object. */
- if( !result ) result = astManageLock( this->map1, mode, extra, fail );
- if( !result ) result = astManageLock( this->map2, mode, extra, fail );
-
- return result;
-
-}
-#endif
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a TranMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* TranMap method (over-rides the protected astMapMerge method
-* inherited from the Mapping class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated TranMap in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated TranMap with one which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated TranMap which is to be merged with
-* its neighbours. This should be a cloned copy of the TranMap
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* TranMap it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated TranMap resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstCmpMap *cmap; /* Pointer to compound Mapping */
- AstMapping *cmap_f; /* Pointer to compound Mapping */
- AstMapping *cmap_i; /* Pointer to compound Mapping */
- AstMapping *hmap1; /* Pointer to 1st comp of higher TranMap */
- AstMapping *hmap2; /* Pointer to 2nd comp of higher TranMap */
- AstMapping *hmap_f; /* Pointer to fwd Mapping of higher TranMap */
- AstMapping *hmap_i; /* Pointer to inv Mapping of higher TranMap */
- AstMapping *map1; /* Pointer to 1st comp of nominated TranMap */
- AstMapping *map2; /* Pointer to 2nd comp of nominated TranMap */
- AstMapping *map_f; /* Pointer to fwd Mapping of nominated TranMap */
- AstMapping *map_i; /* Pointer to inv Mapping of nominated TranMap */
- AstMapping *smap; /* Pointer to simplified Mapping */
- AstMapping *smap_f; /* Pointer to simplified Mapping */
- AstMapping *smap_i; /* Pointer to simplified Mapping */
- AstTranMap *hmap; /* Pointer to higher TranMap */
- AstTranMap *map; /* Pointer to this TranMap */
- AstTranMap *new; /* Pointer to merged TranMap */
- int i; /* Loop count */
- int old_hinv1; /* Original Invert flag for hmap->map1 */
- int old_hinv2; /* Original Invert flag for hmap->map2 */
- int old_inv1; /* Original Invert flag for this->map1 */
- int old_inv2; /* Original Invert flag for this->map2 */
- int result; /* The value to return */
-
-/* Initialise.*/
- result = -1;
-
-/* Check the inherited status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to this TranMap. */
- map = (AstTranMap *) this;
-
-/* Get the two component Mappings,and temporarily set their Invert
- attributes back to the values they had when the TranMap was created,
- saving their current Invert values so that they can be re-instated later. */
- map1 = map->map1;
- old_inv1 = astGetInvert( map1 );
- astSetInvert( map1, map->invert1 );
-
- map2 = map->map2;
- old_inv2 = astGetInvert( map2 );
- astSetInvert( map2, map->invert2 );
-
-/* Simplify the TranMap on its own. */
-/* ================================ */
-
-/* If the TranMap is inverted, creat an equal TranMap which is not inverted.
- To do this, invert and swap the component Mappings. */
- if( ( *invert_list )[ where ] ) {
- astInvert( map1 );
- astInvert( map2 );
- new = astTranMap( map2, map1, "", status );
- astInvert( map1 );
- astInvert( map2 );
-
- (void) astAnnul( ( *map_list )[ where ] );
- ( *map_list )[ where ] = (AstMapping *) new;
- ( *invert_list )[ where ] = 0;
- result = where;
-
-/* Otherwise, try to simplify each of the component Mappings. */
- } else {
- smap_f = astSimplify( map1 );
- smap_i = astSimplify( map2 );
-
-/* Assume some simplification took place if the pointers have changed. */
- if( smap_f != map1 || smap_i != map2 ) {
-
-/* Construct a new TranMap from these simplifgied Mappings. */
- (void) astAnnul( ( *map_list )[ where ] );
- ( *map_list )[ where ] = (AstMapping *) astTranMap( smap_f, smap_i, "", status );
- result = where;
-
-/* Otherwise, if the both component Mappings are defined in both directions... */
- } else if( astGetTranForward( map1 ) && astGetTranInverse( map1 ) &&
- astGetTranForward( map2 ) && astGetTranInverse( map2 ) ) {
-
-/* Form a series CmpMap from the two component Mappings, with the second
- Mapping inverted. */
- astInvert( map2 );
- cmap = astCmpMap( map1, map2, 1, "", status );
- astInvert( map2 );
-
-/* If this CmpMap simplifies to a UnitMap, then the two components of the
- TranMap are equal, and so we can replace the entire TranMap with either
- of its components. Note, we leave the supplied invert flag unchanged,
- since the copycreated below refers to the Mapping as it was when the
- TranMap was created. However, we invert the returned Mapping if
- necessary. */
- smap = astSimplify( cmap );
- if( astIsAUnitMap( smap ) ) {
- (void) astAnnul( ( *map_list )[ where ] );
- ( *map_list )[ where ] = astCopy( map1 );
- if( ( *invert_list )[ where ] ) astInvert( ( *map_list )[ where ] );
- result = where;
- }
-
-/* Release resources. */
- smap = astAnnul( smap );
- cmap = astAnnul( cmap );
- }
-
-/* Release resources. */
- smap_f = astAnnul( smap_f );
- smap_i = astAnnul( smap_i );
- }
-
-/* Merge the TranMap with a neighbouring TranMap. */
-/* ============================================== */
-/* Only do this if no change was made above, and we are combining the
- Mappings in series. */
- if( result == -1 && series ) {
-
-/* Is the higher neighbour a TranMap? */
- if( where < ( *nmap - 1 ) &&
- astIsATranMap( ( *map_list )[ where + 1 ] ) ){
-
-/* Get the two component Mappings of the higher TranMap, and temporarily set
- their Invert attributes back to the values they had when the TranMap was
- created, saving their current Invert values so that they can be re-instated
- later. */
- hmap = (AstTranMap *) ( *map_list )[ where + 1 ];
-
- hmap1 = hmap->map1;
- old_hinv1 = astGetInvert( hmap1 );
- astSetInvert( hmap1, hmap->invert1 );
-
- hmap2 = hmap->map2;
- old_hinv2 = astGetInvert( hmap2 );
- astSetInvert( hmap2, hmap->invert2 );
-
-/* Get the Mappings which defines the forward and inverse transformation of
- the lower TranMap ("this"). Then, map_f and map_i are pointers to
- Mappings which could be used to construct a new TranMap which would be
- equivalent to "this" with the supplied invert setting. */
- if( ( *invert_list )[ where ] ) {
- map_f = map2;
- map_i = map1;
- astInvert( map_f );
- astInvert( map_i );
- } else {
- map_f = map1;
- map_i = map2;
- }
-
-/* Likewise, get the Mappings which defines the forward and inverse
- transformation of the higher TranMap. */
- if( ( *invert_list )[ where + 1 ] ) {
- hmap_f = hmap2;
- hmap_i = hmap1;
- astInvert( hmap_f );
- astInvert( hmap_i );
- } else {
- hmap_f = hmap1;
- hmap_i = hmap2;
- }
-
-/* Combine the two forward Mappings together into a series CmpMap, and
- simplify it. */
- cmap_f = (AstMapping *) astCmpMap( map_f, hmap_f, 1, "", status );
- smap_f = astSimplify( cmap_f );
-
-/* Do the same for the inverse Mappings */
- cmap_i = (AstMapping *) astCmpMap( map_i, hmap_i, 1, "", status );
- smap_i = astSimplify( cmap_i );
-
-/* Was any simplification performed? We assume this is the case if the
- either of the simplied pointer differs from the original pointer. */
- if( cmap_f != smap_f || cmap_i != smap_i ) {
-
-/* In which case,construct a new TranMap from the simplified Mappings. */
- new = astTranMap( smap_f, smap_i, "", status );
-
- } else {
- new = NULL;
- }
-
-/* Free resources.*/
- cmap_f = astAnnul( cmap_f );
- smap_f = astAnnul( smap_f );
- cmap_i = astAnnul( cmap_i );
- smap_i = astAnnul( smap_i );
-
-/* Re-instate the original Invert values for the component Mappings of
- the higher TranMap. */
- astSetInvert( hmap1, old_hinv1 );
- astSetInvert( hmap2, old_hinv2 );
-
-/* If we have a new TranMap, annul the first of the two Mappings, and replace
- it with the merged TranMap. Also set the invert flag. */
- if( new ) {
- (void) astAnnul( ( *map_list )[ where ] );
- ( *map_list )[ where ] = (AstMapping *) new;
- ( *invert_list )[ where ] = 0;
-
-/* Annul the second of the two Mappings, and shuffle down the rest of the
- list to fill the gap. */
- (void) astAnnul( ( *map_list )[ where + 1 ] );
- for ( i = where + 2; i < *nmap; i++ ) {
- ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
- ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
- }
-
-/* Clear the vacated element at the end. */
- ( *map_list )[ *nmap - 1 ] = NULL;
- ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
- modified element. */
- ( *nmap )--;
- result = where;
- }
- }
- }
-
-/* Re-instate the original Invert values for the component Mappings. */
- astSetInvert( map1, old_inv1 );
- astSetInvert( map2, old_inv2 );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = -1;
-
-/* Return the result. */
- return result;
-}
-
-static int *MapSplit( AstMapping *this_map, int nin, const int *in, AstMapping **map, int *status ){
-/*
-* Name:
-* MapSplit
-
-* Purpose:
-* Create a Mapping representing a subset of the inputs of an existing
-* TranMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "tranmap.h"
-* int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status )
-
-* Class Membership:
-* TranMap method (over-rides the protected astMapSplit method
-* inherited from the Mapping class).
-
-* Description:
-* This function creates a new Mapping by picking specified inputs from
-* an existing TranMap. This is only possible if the specified inputs
-* correspond to some subset of the TranMap outputs. That is, there
-* must exist a subset of the TranMap outputs for which each output
-* depends only on the selected TranMap inputs, and not on any of the
-* inputs which have not been selected. If this condition is not met
-* by the supplied TranMap, then a NULL Mapping is returned.
-
-* Parameters:
-* this
-* Pointer to the TranMap to be split (the TranMap is not actually
-* modified by this function).
-* nin
-* The number of inputs to pick from "this".
-* in
-* Pointer to an array of indices (zero based) for the inputs which
-* are to be picked. This array should have "nin" elements. If "Nin"
-* is the number of inputs of the supplied TranMap, then each element
-* should have a value in the range zero to Nin-1.
-* map
-* Address of a location at which to return a pointer to the new
-* Mapping. This Mapping will have "nin" inputs (the number of
-* outputs may be different to "nin"). A NULL pointer will be
-* returned if the supplied TranMap has no subset of outputs which
-* depend only on the selected inputs.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated array of ints. The number of
-* elements in this array will equal the number of outputs for the
-* returned Mapping. Each element will hold the index of the
-* corresponding output in the supplied TranMap. The array should be
-* freed using astFree when no longer needed. A NULL pointer will
-* be returned if no output Mapping can be created.
-
-* Notes:
-* - If this function is invoked with the global error status set,
-* or if it should fail for any reason, then NULL values will be
-* returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
- AstMapping *fmap; /* Pointer to forward Mapping in supplied TranMap */
- AstMapping *imap; /* Pointer to inverse Mapping in supplied TranMap */
- AstMapping *rfmap; /* Pointer to split forward Mapping */
- AstMapping *rimap; /* Pointer to split inverse Mapping */
- AstTranMap *this; /* Pointer to TranMap structure */
- int *ires; /* I/ps of inv Mapping dependent on selected o/ps */
- int *out; /* O/ps of fwd Mapping dependent on selected i/ps */
- int *result; /* Pointer to returned array */
- int finv; /* Invert flag to use with fmap */
- int i; /* Loop count */
- int iinv; /* Invert flag to use with imap */
- int nout; /* No. of outputs dependent on selected inputs */
- int ok; /* Can required Mapping be created? */
- int old_finv; /* Original Invert flag for fmap */
- int old_iinv; /* Original Invert flag for imap */
-
-/* Initialise */
- result = NULL;
- *map = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Invoke the parent astMapSplit method to see if it can do the job. */
- result = (*parent_mapsplit)( this_map, nin, in, map, status );
-
-/* If not, we provide a special implementation here. */
- if( !result ) {
-
-/* Get a pointer to the TranMap structure. */
- this = (AstTranMap *) this_map;
-
-/* Get pointers to the forward and inverse Mappings, taking into account
- whether the TranMap has been inverted. */
- if( !astGetInvert( this ) ) {
- fmap = this->map1;
- finv = this->invert1;
- imap = this->map2;
- iinv = this->invert2;
- } else {
- imap = this->map1;
- iinv = !( this->invert1 );
- fmap = this->map2;
- finv = !( this->invert2 );
- }
-
-/* Temporarily set the Invert flag of both Mappings back to their
- original values. */
- old_finv = astGetInvert( fmap );
- astSetInvert( fmap, finv );
- old_iinv = astGetInvert( imap );
- astSetInvert( imap, iinv );
-
-/* Try to split the forward Mapping. */
- out = astMapSplit( fmap, nin, in, &rfmap );
-
-/* Check the split could be done. */
- if( out ) {
-
-/* Get the number of outputs which are fed by the selected inputs. */
- nout = astGetNout( rfmap );
-
-/* See if the inverse Mapping can be split using these outputs as inputs. */
- astInvert( imap );
- ires = astMapSplit( imap, nout, out, &rimap );
- astInvert( imap );
- if( ires ) {
- astInvert( rimap );
-
-/* Check that the resulting inputs are the same as the supplied inputs. */
- if( astGetNin( rimap ) == nin ) {
- ok = 1;
- for( i = 0; i < nin; i++ ) {
- if( in[ i ] != ires[ i ] ) {
- ok = 0;
- break;
- }
- }
-
-/* If so create the required new TranMap. */
- if( ok ) {
- *map = (AstMapping *) astTranMap( rfmap, rimap, "", status );
- result = out;
- }
- }
-
-/* Free resources. */
- ires = astFree( ires );
- rimap = astAnnul( rimap );
- }
-
- if( !result ) out = astFree( out );
- rfmap = astAnnul( rfmap );
- }
-
-/* Re-instate the Invert flags of the component Mappings. */
- astSetInvert( fmap, old_finv );
- astSetInvert( imap, old_iinv );
- }
-
-/* Free returned resources if an error has occurred. */
- if( !astOK ) {
- result = astFree( result );
- *map = astAnnul( *map );
- }
-
-/* Return the list of output indices. */
- return result;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-* Name:
-* Rate
-
-* Purpose:
-* Calculate the rate of change of a Mapping output.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "tranmap.h"
-* result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-* Class Membership:
-* TranMap member function (overrides the astRate method inherited
-* from the Mapping class ).
-
-* Description:
-* This function returns the rate of change of a specified output of
-* the supplied Mapping with respect to a specified input, at a
-* specified input position. Also evaluates the second derivative.
-
-* Parameters:
-* this
-* Pointer to the Mapping to be applied.
-* at
-* The address of an array holding the axis values at the position
-* at which the rate of change is to be evaluated. The number of
-* elements in this array should equal the number of inputs to the
-* Mapping.
-* ax1
-* The index of the Mapping output for which the rate of change is to
-* be found (output numbering starts at 0 for the first output).
-* ax2
-* The index of the Mapping input which is to be varied in order to
-* find the rate of change (input numbering starts at 0 for the first
-* input).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The rate of change of Mapping output "ax1" with respect to input
-* "ax2", evaluated at "at", or AST__BAD if the value cannot be
-* calculated.
-
-*/
-
-/* Local Variables: */
- AstTranMap *map;
- AstMapping *cmap;
- double result;
- int cinv;
- int old_inv;
-
-/* Check inherited status */
- if( !astOK ) return AST__BAD;
-
-/* Get a pointer to the TranMap structure. */
- map = (AstTranMap *) this;
-
-/* Choose the component Mapping to use, and get its original Invert
- value. Invert this if the TranMap itself has been inverted (this is
- because the astRate function has no "invert" argument so we need to
- invert the Mapping before calling astRate). */
- if( astGetInvert( this ) ) {
- cmap = map->map2;
- cinv = !(map->invert2);
- } else {
- cmap = map->map1;
- cinv = map->invert1;
- }
-
-/* Temporarily set the Invert flag of the component Mapping back to its
- original value. */
- old_inv = astGetInvert( cmap );
- astSetInvert( cmap, cinv );
-
-/* Use the astRate method of the component Mapping. */
- result = astRate( cmap, at, ax1, ax2 );
-
-/* Re-instate the Invert flag of the component Mapping. */
- astSetInvert( cmap, old_inv );
-
-/* Return the result. */
- return result;
-}
-
-static AstMapping *RemoveRegions( AstMapping *this_mapping, int *status ) {
-/*
-* Name:
-* RemoveRegions
-
-* Purpose:
-* Remove any Regions from a Mapping.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "tranmap.h"
-* AstMapping *RemoveRegions( AstMapping *this, int *status )
-
-* Class Membership:
-* TranMap method (over-rides the astRemoveRegions method inherited
-* from the Mapping class).
-
-* Description:
-* This function searches the supplied Mapping (which may be a
-* compound Mapping such as a TranMap) for any component Mappings
-* that are instances of the AST Region class. It then creates a new
-* Mapping from which all Regions have been removed. If a Region
-* cannot simply be removed (for instance, if it is a component of a
-* parallel TranMap), then it is replaced with an equivalent UnitMap
-* in the returned Mapping.
-*
-* The implementation provided by the TranMap class invokes the
-* astRemoveRegions method on the two component Mappings, and joins
-* the results together into a new TranMap.
-
-* Parameters:
-* this
-* Pointer to the original Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the modified mapping.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the AST error status set, or if it should fail for
-* any reason.
-*/
-
-/* Local Variables: */
- AstTranMap *new; /* Pointer to new TranMap */
- AstTranMap *this; /* Pointer to TranMap structure */
- AstMapping *newmap1; /* New first component Mapping */
- AstMapping *newmap2; /* New second component Mapping */
- AstMapping *result; /* Result pointer to return */
- int nax; /* Number of Frame axes */
- int unit1; /* Is new first Mapping a UnitMap? */
- int unit2; /* Is new second Mapping a UnitMap? */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the TranMap. */
- this = (AstTranMap *) this_mapping;
-
-/* Invoke the astRemoveRegions method on the two component Mappings. */
- newmap1 = astRemoveRegions( this->map1 );
- newmap2 = astRemoveRegions( this->map2 );
-
-/* If neither component was modified, just return a clone of the supplied
- pointer. */
- if( this->map1 == newmap1 && this->map2 == newmap2 ) {
- result = astClone( this );
-
-/* Otherwise, we need to create a new Mapping to return. */
- } else {
-
-/* The implementation of the astRemoveRegions method provided by the
- Region class returns a Frame rather than a UnitMap. But we need
- Mappings here, not Frames. So if either of these new Mappings is
- a Frame, replace it with an equivalent UnitMap. Also, get flags
- indicating if either Mapping is a UnitMap.*/
- if( astIsAFrame( newmap1 ) ) {
- nax = astGetNin( newmap1 );
- (void) astAnnul( newmap1 );
- newmap1 = (AstMapping *) astUnitMap( nax, " ", status );
- unit1 = 1;
- } else {
- unit1 = astIsAUnitMap( newmap1 );
- }
-
- if( astIsAFrame( newmap2 ) ) {
- nax = astGetNin( newmap2 );
- (void) astAnnul( newmap2 );
- newmap2 = (AstMapping *) astUnitMap( nax, " ", status );
- unit2 = 1;
- } else {
- unit2 = astIsAUnitMap( newmap2 );
- }
-
-/* If both new Mappings are UnitMaps, return an equivalent UnitMap. */
- if( unit1 && unit2 ) {
- result = (AstMapping *) astUnitMap( astGetNin( newmap1 ) +
- astGetNin( newmap2 ), " ",
- status );
-
-/* Otherwise, return a new TranMap containing the two new Mappings. */
- } else {
- new = astCopy( this );
- (void) astAnnul( new->map1 );
- (void) astAnnul( new->map2 );
- new->map1 = astClone( newmap1 );
- new->map2 = astClone( newmap2 );
- result = (AstMapping *) new;
- }
- }
-
-/* Free resources. */
- newmap1 = astAnnul( newmap1 );
- newmap2 = astAnnul( newmap2 );
-
-/* Annul the returned Mapping if an error has occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a TranMap to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "tranmap.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* TranMap member function (over-rides the astTransform method inherited
-* from the Mapping class).
-
-* Description:
-* This function takes a TranMap and a set of points encapsulated in a
-* PointSet and transforms the points so as to apply the required Mapping.
-* This implies applying each of the TranMap's component Mappings in turn,
-* either in series or in parallel.
-
-* Parameters:
-* this
-* Pointer to the TranMap.
-* in
-* Pointer to the PointSet associated with the input coordinate values.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of coordinates for the TranMap being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstMapping *cmap; /* Mapping which defines the required transformation */
- AstPointSet *result; /* Pointer to output PointSet */
- AstTranMap *map; /* Pointer to TranMap to be applied */
- int cinv; /* Invert flag when TranMap was created */
- int old_inv; /* Invert flag on entry to this function */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the TranMap. */
- map = (AstTranMap *) this;
-
-/* Apply the parent Mapping using the stored pointer to the Transform member
- function inherited from the parent Mapping class. This function validates
- all arguments and generates an output PointSet if necessary, but does not
- actually transform any coordinate values. */
- result = (*parent_transform)( this, in, forward, out, status );
-
-/* We now extend the parent astTransform method by applying the component
- Mappings of the TranMap to generate the output coordinate values. */
-
-/* Determine whether to apply the forward or inverse Mapping, according to the
- direction specified and whether the Mapping has been inverted. */
- if ( astGetInvert( map ) ) forward = !forward;
-
-/* Choose the component Mapping to use, and get its original Invert value. */
- if( forward ) {
- cmap = map->map1;
- cinv = map->invert1;
- }else {
- cmap = map->map2;
- cinv = map->invert2;
- }
-
-/* Temporarily set the Invert flag of the component Mapping back to its
- original value. */
- old_inv = astGetInvert( cmap );
- astSetInvert( cmap, cinv );
-
-/* Use the Transform method of the component Mapping. */
- result = astTransform( cmap, in, forward, out );
-
-/* Re-instate the Invert flag of the component Mapping. */
- astSetInvert( cmap, old_inv );
-
-/* If an error occurred, clean up by deleting the output PointSet (if
- allocated by this function) and setting a NULL result pointer. */
- if ( !astOK ) {
- if ( !out ) result = astDelete( result );
- result = NULL;
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for TranMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for TranMap objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - This constructor makes a deep copy, including a copy of the component
-* Mappings within the TranMap.
-*/
-
-/* Local Variables: */
- AstTranMap *in; /* Pointer to input TranMap */
- AstTranMap *out; /* Pointer to output TranMap */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output TranMaps. */
- in = (AstTranMap *) objin;
- out = (AstTranMap *) objout;
-
-/* For safety, start by clearing any references to the input component
- Mappings from the output TranMap. */
- out->map1 = NULL;
- out->map2 = NULL;
-
-/* Make copies of these Mappings and store pointers to them in the output
- TranMap structure. */
- out->map1 = astCopy( in->map1 );
- out->map2 = astCopy( in->map2 );
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for TranMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for TranMap objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstTranMap *this; /* Pointer to TranMap */
-
-/* Obtain a pointer to the TranMap structure. */
- this = (AstTranMap *) obj;
-
-/* Annul the pointers to the component Mappings. */
- this->map1 = astAnnul( this->map1 );
- this->map2 = astAnnul( this->map2 );
-
-/* Clear the remaining TranMap variables. */
- this->invert1 = 0;
- this->invert2 = 0;
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for TranMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the TranMap class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the TranMap whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstTranMap *this; /* Pointer to the TranMap structure */
- int ival; /* Integer value */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the TranMap structure. */
- this = (AstTranMap *) this_object;
-
-/* Write out values representing the instance variables for the TranMap
- class. Accompany these with appropriate comment strings, possibly
- depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* First Invert flag. */
-/* ------------------ */
- ival = this->invert1;
- set = ( ival != 0 );
- astWriteInt( channel, "InvA", set, 0, ival,
- ival ? "First Mapping used in inverse direction" :
- "First Mapping used in forward direction" );
-
-/* Second Invert flag. */
-/* ------------------- */
- ival = this->invert2;
- set = ( ival != 0 );
- astWriteInt( channel, "InvB", set, 0, ival,
- ival ? "Second Mapping used in inverse direction" :
- "Second Mapping used in forward direction" );
-
-/* First Mapping. */
-/* -------------- */
- astWriteObject( channel, "MapA", 1, 1, this->map1,
- "Mapping for forward transformation" );
-
-/* Second Mapping. */
-/* --------------- */
- astWriteObject( channel, "MapB", 1, 1, this->map2,
- "Mapping for inverse transformation" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsATranMap and astCheckTranMap functions using the
- macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(TranMap,Mapping)
-astMAKE_CHECK(TranMap)
-
-AstTranMap *astTranMap_( void *map1_void, void *map2_void, const char *options, int *status, ...) {
-/*
-*+
-* Name:
-* astTranMap
-
-* Purpose:
-* Create a TranMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "tranmap.h"
-* AstTranMap *astTranMap( AstMapping *map1, AstMapping *map2, const char *options, int *status, ... )
-
-* Class Membership:
-* TranMap constructor.
-
-* Description:
-* This function creates a new TranMap and optionally initialises its
-* attributes.
-
-* Parameters:
-* map1
-* Pointer to the first Mapping (which deinfes the forward
-* transformation).
-* map2
-* Pointer to the second Mapping (which deinfes the inverse
-* transformation).
-* options
-* Pointer to a null terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new TranMap. The syntax used is the same as for the
-* astSet method and may include "printf" format specifiers identified
-* by "%" symbols in the normal way.
-* status
-* Pointer to the inherited status variable.
-* ...
-* If the "options" string contains "%" format specifiers, then an
-* optional list of arguments may follow it in order to supply values to
-* be substituted for these specifiers. The rules for supplying these
-* are identical to those for the astSet method (and for the C "printf"
-* function).
-
-* Returned Value:
-* A pointer to the new TranMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-
-* Implementation Notes:
-* - This function implements the basic TranMap constructor which is
-* available via the protected interface to the TranMap class. A
-* public interface is provided by the astTranMapId_ function.
-* - Because this function has a variable argument list, it is
-* invoked by a macro that evaluates to a function pointer (not a
-* function invocation) and no checking or casting of arguments is
-* performed before the function is invoked. Because of this, the
-* "map1" and "map2" parameters are of type (void *) and are
-* converted and validated within the function itself.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstTranMap *new; /* Pointer to new TranMap */
- AstMapping *map1; /* Pointer to first Mapping structure */
- AstMapping *map2; /* Pointer to second Mapping structure */
- va_list args; /* Variable argument list */
-
-/* Initialise. */
- new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return new;
-
-/* Obtain and validate pointers to the Mapping structures provided. */
- map1 = astCheckMapping( map1_void );
- map2 = astCheckMapping( map2_void );
- if ( astOK ) {
-
-/* Initialise the TranMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitTranMap( NULL, sizeof( AstTranMap ), !class_init, &class_vtab,
- "TranMap", map1, map2 );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new TranMap's
- attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return a pointer to the new TranMap. */
- return new;
-}
-
-AstTranMap *astTranMapId_( void *map1_void, void *map2_void,
- const char *options, ... ) {
-/*
-*++
-* Name:
-c astTranMap
-f AST_TRANMAP
-
-* Purpose:
-* Create a TranMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "tranmap.h"
-c AstTranMap *astTranMap( AstMapping *map1, AstMapping *map2,
-c const char *options, ... )
-f RESULT = AST_TRANMAP( MAP1, MAP2, OPTIONS, STATUS )
-
-* Class Membership:
-* TranMap constructor.
-
-* Description:
-* This function creates a new TranMap and optionally initialises
-* its attributes.
-*
-* A TranMap is a Mapping which combines the forward transformation of
-* a supplied Mapping with the inverse transformation of another
-* supplied Mapping, ignoring the un-used transformation in each
-* Mapping (indeed the un-used transformation need not exist).
-*
-* When the forward transformation of the TranMap is referred to, the
-* transformation actually used is the forward transformation of the
-* first Mapping supplied when the TranMap was constructed. Likewise,
-* when the inverse transformation of the TranMap is referred to, the
-* transformation actually used is the inverse transformation of the
-* second Mapping supplied when the TranMap was constructed.
-
-* Parameters:
-c map1
-f MAP1 = INTEGER (Given)
-* Pointer to the first component Mapping, which defines the
-* forward transformation.
-c map2
-f MAP2 = INTEGER (Given)
-* Pointer to the second component Mapping, which defines the
-* inverse transformation.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new TranMap. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new TranMap. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astTranMap()
-f AST_TRANMAP = INTEGER
-* A pointer to the new TranMap.
-
-* Notes:
-* - The number of output coordinates generated by the two Mappings
-* (their Nout attribute) must be equal, as must the number of input
-* coordinates accepted by each Mapping (their Nin attribute).
-* - The forward transformation of the first Mapping must exist.
-* - The inverse transformation of the second Mapping must exist.
-c - Note that the component Mappings supplied are not copied by
-c astTranMap (the new TranMap simply retains a reference to
-c them). They may continue to be used for other purposes, but
-c should not be deleted. If a TranMap containing a copy of its
-c component Mappings is required, then a copy of the TranMap should
-c be made using astCopy.
-f - Note that the component Mappings supplied are not copied by
-f AST_TRANMAP (the new TranMap simply retains a reference to
-f them). They may continue to be used for other purposes, but
-f should not be deleted. If a TranMap containing a copy of its
-f component Mappings is required, then a copy of the TranMap should
-f be made using AST_COPY.
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-
-* Status Handling:
-* The protected interface to this function includes an extra
-* parameter at the end of the parameter list descirbed above. This
-* parameter is a pointer to the integer inherited status
-* variable: "int *status".
-
-*--
-
-* Implementation Notes:
-* - This function implements the external (public) interface to
-* the astTranMap constructor function. It returns an ID value
-* (instead of a true C pointer) to external users, and must be
-* provided because astTranMap_ has a variable argument list which
-* cannot be encapsulated in a macro (where this conversion would
-* otherwise occur).
-* - Because no checking or casting of arguments is performed
-* before the function is invoked, the "map1" and "map2" parameters
-* are of type (void *) and are converted from an ID value to a
-* pointer and validated within the function itself.
-* - The variable argument list also prevents this function from
-* invoking astTranMap_ directly, so it must be a re-implementation
-* of it in all respects, except for the conversions between IDs
-* and pointers on input/output of Objects.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstTranMap *new; /* Pointer to new TranMap */
- AstMapping *map1; /* Pointer to first Mapping structure */
- AstMapping *map2; /* Pointer to second Mapping structure */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialise. */
- new = NULL;
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return new;
-
-/* Obtain the Mapping pointers from the ID's supplied and validate the
- pointers to ensure they identify valid Mappings. */
- map1 = astVerifyMapping( astMakePointer( map1_void ) );
- map2 = astVerifyMapping( astMakePointer( map2_void ) );
- if ( astOK ) {
-
-/* Initialise the TranMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitTranMap( NULL, sizeof( AstTranMap ), !class_init, &class_vtab,
- "TranMap", map1, map2 );
-
-/* If successful, note that the virtual function table has been initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new TranMap's
- attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return an ID value for the new TranMap. */
- return astMakeId( new );
-}
-
-AstTranMap *astInitTranMap_( void *mem, size_t size, int init,
- AstTranMapVtab *vtab, const char *name,
- AstMapping *map1, AstMapping *map2, int *status ) {
-/*
-*+
-* Name:
-* astInitTranMap
-
-* Purpose:
-* Initialise a TranMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "tranmap.h"
-* AstTranMap *astInitTranMap( void *mem, size_t size, int init,
-* AstTranMapVtab *vtab, const char *name,
-* AstMapping *map1, AstMapping *map2 )
-
-* Class Membership:
-* TranMap initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new TranMap object. It allocates memory (if necessary) to
-* accommodate the TranMap plus any additional data associated with the
-* derived class. It then initialises a TranMap structure at the start
-* of this memory. If the "init" flag is set, it also initialises the
-* contents of a virtual function table for a TranMap at the start of
-* the memory passed via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the TranMap is to be initialised.
-* This must be of sufficient size to accommodate the TranMap data
-* (sizeof(TranMap)) plus any data used by the derived class. If a
-* value of NULL is given, this function will allocate the memory itself
-* using the "size" parameter to determine its size.
-* size
-* The amount of memory used by the TranMap (plus derived class
-* data). This will be used to allocate memory if a value of NULL is
-* given for the "mem" parameter. This value is also stored in the
-* TranMap structure, so a valid value must be supplied even if not
-* required for allocating memory.
-* init
-* A logical flag indicating if the TranMap's virtual function table
-* is to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new TranMap.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the Object
-* astClass function).
-* map1
-* Pointer to the first Mapping.
-* map2
-* Pointer to the second Mapping.
-
-* Returned Value:
-* A pointer to the new TranMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstTranMap *new; /* Pointer to new TranMap */
- int nin; /* No. input coordinates for TranMap */
- int nout; /* No. output coordinates for TranMap */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitTranMapVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Report an error if map1 has no forward transformation. */
- if( !astGetTranForward( map1 ) && astOK ) {
- astError( AST__INTRD, "astInitTranMap(%s): The first supplied Mapping "
- "is not able to transform coordinates in the forward direction.", status,
- name );
- }
-
-/* Report an error if map2 has no inverse transformation. */
- if( !astGetTranInverse( map2 ) && astOK ) {
- astError( AST__INTRD, "astInitTranMap(%s): The second supplied Mapping "
- "is not able to transform coordinates in the inverse direction.", status,
- name );
- }
-
-/* Check that the number of coordinates are compatible and report an error if
- they are not. */
- nout = astGetNout( map1 );
- if ( astGetNout( map2 ) != nout && astOK ) {
- astError( AST__INNCO, "astInitTranMap(%s): The number of output "
- "coordinates per point (%d) for the first Mapping "
- "supplied does not match the number of output "
- "coordinates (%d) for the second Mapping.", status, name, nout,
- astGetNout( map2 ) );
- }
-
- nin = astGetNin( map1 );
- if ( astGetNin( map2 ) != nin && astOK ) {
- astError( AST__INNCO, "astInitTranMap(%s): The number of input "
- "coordinates per point (%d) for the first Mapping "
- "supplied does not match the number of input "
- "coordinates (%d) for the second Mapping.", status, name, nin,
- astGetNin( map2 ) );
- }
-
-/* Initialise a Mapping structure (the parent class) as the first component
- within the TranMap structure, allocating memory if necessary. Specify
- the number of input and output coordinates and in which directions the
- Mapping should be defined. */
- if ( astOK ) {
- new = (AstTranMap *) astInitMapping( mem, size, 0,
- (AstMappingVtab *) vtab, name,
- nin, nout, 1, 1 );
-
- if ( astOK ) {
-
-/* Initialise the TranMap data. */
-/* --------------------------- */
-/* Store pointers to the component Mappings. */
- new->map1 = astClone( map1 );
- new->map2 = astClone( map2 );
-
-/* Save the initial values of the inversion flags for these Mappings. */
- new->invert1 = astGetInvert( map1 );
- new->invert2 = astGetInvert( map2 );
-
-/* If an error occurred, clean up by annulling the Mapping pointers and
- deleting the new object. */
- if ( !astOK ) {
- new->map1 = astAnnul( new->map1 );
- new->map2 = astAnnul( new->map2 );
- new = astDelete( new );
- }
- }
- }
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstTranMap *astLoadTranMap_( void *mem, size_t size,
- AstTranMapVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadTranMap
-
-* Purpose:
-* Load a TranMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "tranmap.h"
-* AstTranMap *astLoadTranMap( void *mem, size_t size,
-* AstTranMapVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* TranMap loader.
-
-* Description:
-* This function is provided to load a new TranMap using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* TranMap structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a TranMap at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the TranMap is to be
-* loaded. This must be of sufficient size to accommodate the
-* TranMap data (sizeof(TranMap)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the TranMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the TranMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstTranMap) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new TranMap. If this is NULL, a pointer to
-* the (static) virtual function table for the TranMap class is
-* used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "TranMap" is used instead.
-
-* Returned Value:
-* A pointer to the new TranMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstTranMap *new; /* Pointer to the new TranMap */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this TranMap. In this case the
- TranMap belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstTranMap );
- vtab = &class_vtab;
- name = "TranMap";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitTranMapVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built TranMap. */
- new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "TranMap" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* First Invert flag. */
-/* ------------------ */
- new->invert1 = astReadInt( channel, "inva", 0 );
- new->invert1 = ( new->invert1 != 0 );
-
-/* Second Invert flag. */
-/* ------------------- */
- new->invert2 = astReadInt( channel, "invb", 0 );
- new->invert2 = ( new->invert2 != 0 );
-
-/* First Mapping. */
-/* -------------- */
- new->map1 = astReadObject( channel, "mapa", NULL );
-
-/* Second Mapping. */
-/* --------------- */
- new->map2 = astReadObject( channel, "mapb", NULL );
-
-/* If an error occurred, clean up by deleting the new TranMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new TranMap pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-/* None. */
-
-
-
-
diff --git a/ast-5.3-1/tranmap.h b/ast-5.3-1/tranmap.h
deleted file mode 100644
index 1449536..0000000
--- a/ast-5.3-1/tranmap.h
+++ /dev/null
@@ -1,276 +0,0 @@
-#if !defined( TRANMAP_INCLUDED ) /* Include this file only once */
-#define TRANMAP_INCLUDED
-/*
-*+
-* Name:
-* tranmap.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the TranMap class.
-
-* Invocation:
-* #include "tranmap.h"
-
-* Description:
-* This include file defines the interface to the TranMap class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-
-* Inheritance:
-* The TranMap class inherits from the Mapping class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* None.
-
-* Methods Over-Ridden:
-* Public:
-* None.
-*
-* Protected:
-* astMapMerge
-* Merge a TranMap within a sequence of Mappings.
-* astTransform
-* Transform a set of points.
-
-* New Methods Defined:
-* Public:
-* None.
-*
-* Protected:
-* None.
-
-* Other Class Functions:
-* Public:
-* astIsATranMap
-* Test class membership.
-* astTranMap
-* Create a TranMap.
-*
-* Protected:
-* astCheckTranMap
-* Validate class membership.
-* astInitTranMap
-* Initialise a TranMap.
-* astInitTranMapVtab
-* Initialise the virtual function table for the TranMap class.
-* astLoadTranMap
-* Load a TranMap.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstTranMap
-* TranMap object type.
-*
-* Protected:
-* AstTranMapVtab
-* TranMap virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 10-FEB-2004 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h" /* Coordinate Mappings (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* TranMap structure. */
-/* ----------------- */
-/* This structure contains all information that is unique to each
- object in the class (e.g. its instance variables). */
-typedef struct AstTranMap {
-
-/* Attributes inherited from the parent class. */
- AstMapping mapping; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- AstMapping *map1; /* Pointer to first Mapping */
- AstMapping *map2; /* Pointer to second Mapping */
- int invert1; /* Inversion flag for first Mapping */
- int invert2; /* Inversion flag for second Mapping */
-} AstTranMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstTranMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstMappingVtab mapping_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-/* None. */
-} AstTranMapVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstTranMapGlobals {
- AstTranMapVtab Class_Vtab;
- int Class_Init;
-} AstTranMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitTranMapGlobals_( AstTranMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(TranMap) /* Check class membership */
-astPROTO_ISA(TranMap) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstTranMap *astTranMap_( void *, void *, const char *, int *, ...);
-#else
-AstTranMap *astTranMapId_( void *, void *, const char *, ... )__attribute__((format(printf,3,4)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstTranMap *astInitTranMap_( void *, size_t, int, AstTranMapVtab *,
- const char *, AstMapping *, AstMapping *, int * );
-
-/* Vtab initialiser. */
-void astInitTranMapVtab_( AstTranMapVtab *, const char *, int * );
-
-/* Loader. */
-AstTranMap *astLoadTranMap_( void *, size_t, AstTranMapVtab *,
- const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-/* None. */
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckTranMap(this) astINVOKE_CHECK(TranMap,this,0)
-#define astVerifyTranMap(this) astINVOKE_CHECK(TranMap,this,1)
-
-/* Test class membership. */
-#define astIsATranMap(this) astINVOKE_ISA(TranMap,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astTranMap astINVOKE(F,astTranMap_)
-#else
-#define astTranMap astINVOKE(F,astTranMapId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitTranMap(mem,size,init,vtab,name,map1,map2) \
-astINVOKE(O,astInitTranMap_(mem,size,init,vtab,name,astCheckMapping(map1),astCheckMapping(map2),STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitTranMapVtab(vtab,name) astINVOKE(V,astInitTranMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadTranMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadTranMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckTranMap to validate TranMap pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-/* None. */
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/unit.c b/ast-5.3-1/unit.c
deleted file mode 100644
index 3f2634b..0000000
--- a/ast-5.3-1/unit.c
+++ /dev/null
@@ -1,6224 +0,0 @@
-/*
-* Name:
-* unit.c
-
-* Purpose:
-* Implement unit conversion functions.
-
-* Description:
-* This file implements the Unit module which is used for identifying
-* units and transforming between them. It follows the recommendations
-* for unit handling contained within FITS WCS paper I (Greisen &
-* Calabretta). All methods have protected access.
-
-* Methods:
-* astUnitMapper: Create a Mapping between two systems of units.
-* astUnitLabel: Returns a label for a given unit symbol.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-
-* History:
-* 10-DEC-2002 (DSB):
-* Original version.
-* 10-FEB-2004 (DSB):
-* Added debug conditional code to keep track of memory leaks.
-* 15-JUL-2004 (DSB):
-* In astUnitMapper: if no Mapping can be found from input to
-* output units (e.g. because fo the less than perfect simplication
-* algorithm in SimplifyTree), try finding a Mapping from output to
-* input units and inverting the result.
-* 14-DEC-2004 (DSB):
-* In CreateTree, move the invocation of FixConstants from after
-* InvertConstants to before InvertConstants. This is because
-* InvertConstants ignores nodes which contain all constant
-* arguments. This results in constants not being inverted in
-* expressions such as "1/60 deg" (because all arguments are
-* constant in the the "1/60" node).
-* 18-JAN-2005 (DSB):
-* Fix memory leaks.
-* 2-FEB-2005 (DSB):
-* - Avoid using astStore to allocate more storage than is supplied
-* in the "data" pointer. This can cause access violations since
-* astStore will then read beyond the end of the "data" area.
-* 15-FEB-2005 (DSB):
-* - Modified CleanExp to fix up some common units mistakes.
-* 21-FEB-2005 (DSB):
-* - Modified CleanExp to accept <word><digit> as equivalent to
-* <word>^<digit>.
-* - Modified MakeTree to do case insensitive checking if case
-* sensitive checking failsto produce a match to a multiplier/unit
-* symbol combination. If this still produces no match, do a case
-* insensitive match for multiplier/unit label.
-* 1-MAR-2006 (DSB):
-* Replace astSetPermMap within DEBUG blocks by astBeginPM/astEndPM.
-* 6-APR-2006 (DSB):
-* Modify CleanExp to convert "MJY/STER" to standard form ("MJy/sr").
-* 7-JUL-2006 (DSB):
-* Correct initialisation of "word" flag in CleanExp.
-* 17-MAY-2007 (DSB):
-* Simplify the units string returned by astUnitNormaliser.
-* - Fix indexing bug in CombineFactors.
-* 26-MAY-2007 (DSB):
-* - Correct error reporting in astUNitNormaliser.
-* - Fix bug in CleanExp that caused (for example) "-2" to be
-* converted to "^-2".
-* 2-DEC-2008 (DSB):
-* Correct memory allocation bug in CleanExp.
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Define the astCLASS macro (even although this is not a class
- implementation) to obtain access to the protected error and memory
- handling functions. */
-#define astCLASS
-#define PI 3.141592653589793
-#define E 2.718281828459045
-
-/* Macro which returns the nearest integer to a given floating point
- value. */
-#define NINT(x) (int)((x)+(((x)>0.0)?0.5:-0.5))
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
- compare bad values directory because of the danger of floating point
- exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Macro identifying a character as lower or upper case letter, digit or
-+ or -. */
-#define ISWORD(c) (isalnum(c)||((c)=='+')||((c)=='-'))
-
-/* The number of basic dimension quantities used for dimensional analysis.
- In addition to the usual M, L and T, this includes pseudo-dimensions
- describing strictly dimensionless quantities such as plane angle,
- magnitude, etc. */
-#define NQUANT 9
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "error.h"
-#include "memory.h"
-#include "pointset.h"
-#include "mapping.h"
-#include "unitmap.h"
-#include "zoommap.h"
-#include "mathmap.h"
-#include "unit.h"
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <string.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <limits.h>
-#include <math.h>
-
-#ifdef THREAD_SAFE
-#include <pthread.h>
-#endif
-
-/* Module Type Definitions. */
-/* ======================== */
-
-/* This declaration enumerates the codes for the operations which may
- legally be included in a units expression. */
-typedef enum {
- OP_LDCON, /* Load constant */
- OP_LDVAR, /* Load variable */
- OP_LOG, /* Common logarithm */
- OP_LN, /* Natural logarithm */
- OP_EXP, /* Natural exponential */
- OP_SQRT, /* Square root */
- OP_POW, /* Exponentiate */
- OP_DIV, /* Division */
- OP_MULT, /* Multiplication */
- OP_LDPI, /* Load constant PI */
- OP_LDE, /* Load constant E */
- OP_NULL /* Null operation */
-} Oper;
-
-/* A structure describing a standard multiplier prefix. */
-typedef struct Multiplier {
- const char *label; /* Multipler label string (null terminated) */
- const char *sym; /* Multipler symbol string (null terminated) */
- int symlen; /* Length of symbol (without trailing null ) */
- int lablen; /* Length of label (without trailing null ) */
- double scale; /* The scale factor associated with the prefix */
- struct Multiplier *next; /* Next Multiplier in linked list */
-} Multiplier;
-
-/* A structure describing a single node in a tree representation of a
- single units expression. */
-typedef struct UnitNode {
- Oper opcode; /* Code for operation performed by this node */
- int narg; /* No. of arguments used by the operation */
- struct UnitNode **arg; /* Array of pointers to argument nodes */
- double con; /* Constant to be loaded by OP_LDCON operations */
- struct KnownUnit *unit; /* Known unit referred to by OP_LDVAR nodes */
- Multiplier *mult; /* Multiplier used by OP_LDVAR nodes */
- const char *name; /* User-defined unit referred to by OP_LDVAR
- nodes (no multiplier prefix included) */
-} UnitNode;
-
-/* A structure describing a known unit. */
-typedef struct KnownUnit {
- const char *sym; /* Unit symbol string (null terminated) */
- const char *label; /* Unit label string (null terminated) */
- int symlen; /* Length of symbol (without trailing null ) */
- int lablen; /* Length of label (without trailing null ) */
- struct UnitNode *head; /* Head of definition tree (NULL for basic units) */
- struct KnownUnit *next; /* Next KnownUnit in linked list */
- struct KnownUnit *use; /* KnownUnit to be used in place of this one */
-} KnownUnit;
-
-/* Module Variables. */
-/* ================= */
-
-/* A pointer to the KnownUnit structure at the head of a linked list of
- such structures containing definitions of all known units. */
-static KnownUnit *known_units = NULL;
-
-/* An array of pointers to KnownUnits which list the basic quantities
-used in dimensional analysis. */
-static KnownUnit *quant_units[ NQUANT ];
-
-/* A pointer to the Multiplier structure at the head of a linked list of
- such structures containing definitions of all known multipliers. */
-static Multiplier *multipliers = NULL;
-
-/* Set up mutexes */
-#ifdef THREAD_SAFE
-
-static pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX1 pthread_mutex_lock( &mutex1 );
-#define UNLOCK_MUTEX1 pthread_mutex_unlock( &mutex1 );
-
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX2 pthread_mutex_lock( &mutex2 );
-#define UNLOCK_MUTEX2 pthread_mutex_unlock( &mutex2 );
-
-#else
-
-#define LOCK_MUTEX1
-#define UNLOCK_MUTEX1
-
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-
-#endif
-
-/* Prototypes for Private Functions. */
-/* ================================= */
-static AstMapping *MakeMapping( UnitNode *, int * );
-static KnownUnit *GetKnownUnits( int, int * );
-static Multiplier *GetMultipliers( int * );
-static UnitNode *ConcatTree( UnitNode *, UnitNode *, int * );
-static UnitNode *CopyTree( UnitNode *, int * );
-static UnitNode *CreateTree( const char *, int, int, int * );
-static UnitNode *FixUnits( UnitNode *, UnitNode *, int * );
-static UnitNode *FreeTree( UnitNode *, int * );
-static UnitNode *MakeTree( const char *, int, int, int * );
-static UnitNode *MakeLabelTree( const char *, int, int * );
-static UnitNode *NewNode( UnitNode *, Oper, int * );
-static UnitNode *CombineFactors( UnitNode **, double *, int, double, int * );
-static const char *CleanExp( const char *, int * );
-static int EndsWith( const char *, int, const char *, int * );
-static int CmpTree( UnitNode *, UnitNode *, int, int * );
-static void FixConstants( UnitNode **, int, int * );
-static void InvertConstants( UnitNode **, int * );
-static UnitNode *InvertTree( UnitNode *, UnitNode *, int * );
-static void LocateUnits( UnitNode *, UnitNode ***, int *, int * );
-static void MakeKnownUnit( const char *, const char *, const char *, int * );
-static void MakeUnitAlias( const char *, const char *, int * );
-static void RemakeTree( UnitNode **, int * );
-static int SimplifyTree( UnitNode **, int, int * );
-static int ComplicateTree( UnitNode **, int * );
-static int ReplaceNode( UnitNode *, UnitNode *, UnitNode *, int * );
-static void FindFactors( UnitNode *, UnitNode ***, double **, int *, double *, int * );
-static const char *MakeExp( UnitNode *, int, int, int * );
-static int DimAnal( UnitNode *, double[NQUANT], double *, int * );
-static int Ustrcmp( const char *, const char *, int * );
-static int Ustrncmp( const char *, const char *, size_t, int * );
-static int SplitUnit( const char *, int, const char *, int, Multiplier **, int *, int * );
-static UnitNode *ModifyPrefix( UnitNode *, int * );
-static int ConStart( const char *, double *, int *, int * );
-
-/* Debug functions...
-static const char *DisplayTree( UnitNode *, int );
-static void OpSym( UnitNode *, char * );
-static const char *OpName( Oper );
-static const char *TreeExp( UnitNode * );
-*/
-
-/* Function implementations. */
-/* ========================= */
-static const char *CleanExp( const char *exp, int *status ) {
-/*
-* Name:
-* CleanExp
-
-* Purpose:
-* Produce a clean copy of a units expression.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* const char *CleanExp( const char *exp )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function returns a pointer to dynamic memory containing a
-* cleaned copy of the supplied units expression. Cleaning consists of
-* the following operations:
-* - removal of leading and trailing white space.
-* - replacement of multiple adjacent spaces by a single space
-* - removal of spaces adjacent to a parenthesis
-* - removal of spaces adjacent to a binary operator
-* - translates various common non-standard units into equivalent
-* standard units.
-*
-* Such carefull handling of spaces is necessary since a space is
-* recognised by the MakeTree function as a multiplication operator.
-
-* Parameters:
-* exp
-* A pointer to the expression to be cleaned.
-
-* Returned Value:
-* A pointer to the cleaned expression, which should be freed using
-* astFree when no longer needed.
-
-* Notes:
-* - This function returns NULL if it is invoked with the global error
-* status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- char **tok;
- char *p;
- char *r;
- char *result;
- char *s;
- char *t;
- char *w;
- const char *start;
- int i;
- int l;
- int len;
- char *tt;
- int ntok;
- int po;
- int ps;
- int word;
-
-/* Initialise */
- result = NULL;
-
-/* Check inherited status */
- if( !astOK ) return result;
-
-/* Split the supplied string up into tokens. Each block of contiguous
- alphanumeric characters is a token. Each contiguous block of
- non-alphanumerical characters is also a token. The + and - signs are
- counted as alphanumeric. */
- start = exp;
- p = (char *) exp - 1;
- word = ISWORD( *( p + 1 ) );
- ntok = 0;
- tok = NULL;
- while( *(++p) ){
- if( word ) {
- if( !ISWORD( *p ) ) {
- l = p - start;
- t = astStore( NULL, start, l + 1 );
- if( t ) t[ l ] = 0;
- tok = astGrow( tok, ntok + 1, sizeof( char * ) );
- if( tok ) tok[ ntok++ ] = t;
- start = p;
- word = 0;
- }
- } else {
- if( ISWORD( *p ) ) {
- l = p - start;
- t = astStore( NULL, start, l + 1 );
- if( t ) t[ l ] = 0;
- tok = astGrow( tok, ntok + 1, sizeof( char * ) );
- if( tok ) tok[ ntok++ ] = t;
- start = p;
- word = 1;
- }
- }
- }
-
- l = p - start;
- t = astStore( NULL, start, l + 1 );
- if( t ) t[ l ] = 0;
- tok = astGrow( tok, ntok + 1, sizeof( char * ) );
- if( tok ) tok[ ntok++ ] = t;
-
-/* Check the tokens for known non-standard unit syntax, and replace with the
- equivalent standard syntax. Starlink SPLAT has a class called UnitUtilities
- which has more of these common units mistakes. AST has to be a bit
- more conservative than SPLAT though because of its wider remit. */
- len = 0;
- tt = NULL;
- for( i = 0; i < ntok; i++ ) {
- t = tok[ i ];
- l = strlen( t );
- tt = astStore( tt, t, l + 1 );
-
-/* Any alphabetical word followed by a digit is taken as <word>^<digit>.
- Any alphabetical word followed by a sign and a digit is taken as
- <word>^<sign><digit>. */
- if( l > 1 && *t != '-' && *t != '+' &&
- strcspn( t, "0123456789" ) == l - 1 ) {
- tok[ i ] = astMalloc( l + 2 );
- if( tok[ i ] ) {
- strcpy( tok[ i ], t );
- w = t + l - 2;
- if( *w != '+' && *w != '-' ) {
- tok[ i ][ l - 1 ] = '^';
- strcpy( tok[ i ] + l, t + l - 1 );
- } else {
- tok[ i ][ l - 2 ] = '^';
- strcpy( tok[ i ] + l - 1, t + l - 2 );
- }
- t = astFree( t );
- }
- l++;
-
-/* If the word ends with "micron" change to "(<start>m*1.0E-6)". Should be OK
- for things like "Kmicron". */
- } else if( ( s = strstr( t, "micron" ) ) ) {
- tok[ i ] = astMalloc( s - t + 11 );
- if( tok[ i ] ) {
- w = tok[ i ];
- *(w++) = '(';
- if( s > t ) {
- strncpy( w, t, s - t );
- w += s - t;
- }
- strcpy( w, "m*1.0E-6)" );
- l = s - t + 11;
- t = astFree( t );
- }
-
-/* Convert "STER" to "sr". */
- } else if( !Ustrcmp( t, "STER", status ) ) {
- tok[ i ] = astStore( NULL, "sr", 3 );
- l = 2;
- t = astFree( t );
-
-/* If the word ends with "JY" and is preceeded by a single character, change
- to "<start>Jy". Should be OK for things like "MJY". */
- } else if( l == 3 && !strcmp( t + 1, "JY" ) ) {
- tok[ i ][ 2 ] = 'y';
-
-/* If the word begins with "nano" (case-insensitive) change "nano" to
- "n". Such changes are usually handled by SplitUnit, but we need to
- handle this as a special case here since scanf seems to read "nan" as
- a string representation of NaN. */
- } else if( !Ustrncmp( t, "nano", 4, status ) ) {
- tok[ i ] = astStore( NULL, t + 3, l - 2 );
- if( tok[ i ] ) {
- *(tok[ i ]) = 'n';
- t = astFree( t );
- }
- l -= 3;
- }
-
-/* Update the total length of the string. */
- len += l;
- }
- tt = astFree( tt );
-
-/* Concatentate the tokens into a single string, freeing the individual
- strings. */
- result = astMalloc( len + 1 );
- if( result ) {
- p = result;
- for( i = 0; i < ntok; i++ ) {
- len = strlen( tok[ i ] );
- memcpy( p, tok[ i ], len );
- p += len;
- tok[ i ] = astFree( tok[ i ] );
- }
- *p = 0;
- tok = astFree( tok );
-
-/* Now do other cleaning.
- ---------------------- */
-
-/* Initialise a pointer to the previous character read from the string. */
- r = result - 1;
-
-/* Initialise a pointer to the next character to be written to the string. */
- w = result;
-
-/* Pretend the previous character written to the string was a space. */
- ps = 1;
-
-/* Read all the supplied string, copying it to earlier parts of the
- string discarding leading spaces and multiple adjacent embedded spaces in
- the process. */
- while( *(++r) ) {
-
-/* If the character read is a space, only write it to the string if the
- previous character written was not a space (in which case set a flag
- to indicate that the previous character written to the string is now a
- space). */
- if( isspace( *r ) ) {
- if( !ps ) {
- *(w++) = *r;
- ps = 1;
- }
-
-/* Write all non-space characters to the string, and clear the flag which
- indicates if the previous character written to the string was a space. */
- } else {
- *(w++) = *r;
- ps = 0;
- }
- }
-
-/* If the last character written to the string was a space, reduce the
- length of the string by one since we do not want any trailing spaces. */
- if( ps ) w--;
-
-/* Terminate the string. */
- *w = 0;
-
-/* We now need to pass through the string again, this time removing any
- spaces which are adjacent to a binary operator or a parenthesis. */
- r = result - 1;
- w = result;
- ps = 0;
- po = 0;
- while( *(++r) ) {
-
-/* If the current character is a space, only write it if the previous
- written character was not an operator or parenthesis. */
- if( isspace( *r ) ) {
- if( !po ) {
- *(w++) = *r;
- po = 1;
- ps = 1;
- }
-
-/* If the current character is an operator or parenthesis, back up one
- character before writing it out if the previous written character was
- a space. */
- } else if( *r == '*' || *r == '/' || *r == '^' || *r == '.' ||
- *r == ')' || *r == '(' ) {
- if( ps ) w--;
- *(w++) = *r;
- po = 1;
- ps = 0;
-
-/* If the current character is not a space and not an operator symbol,
- just write it out. */
- } else {
- *(w++) = *r;
- po = 0;
- ps = 0;
- }
- }
-
-/* Terminate the string. */
- if( ps ) w--;
- *w = 0;
-
- }
-
-/* Return the result. */
- return (const char *) result;
-}
-
-static int CmpTree( UnitNode *tree1, UnitNode *tree2, int exact, int *status ) {
-/*
-* Name:
-* CmpTree
-
-* Purpose:
-* Compares two trees of UnitNodes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* int CmpTree( UnitNode *tree1, UnitNode *tree2, int exact, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function returns a zero value if the two trees are
-* equivalent. This requires the trees to have identical structure
-* except that, if "exact" is zero, arguments for OP_MULT nodes can
-* be swapped.
-*
-* If the trees are not equivalent then a value of +1 or -1 is returned
-* depending on whether tree1 should be placed before or after tree2
-* in a sorted list of trees.
-
-* Parameters:
-* tree1
-* A pointer to the UnitNode at the head of the first tree.
-* tree2
-* A pointer to the UnitNode at the head of the second tree.
-* exact
-* If non-zero, then OP_MULT nodes must have their arguments the
-* same way round in order for the OP_MULT nodes to match. Otherwise,
-* OP_MULT nodes with equivalent arguments match even if the
-* arguments are swapped.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero if the two trees are equal. +1 if tree1 should be placed before
-* tree2 in a sorted list of trees. -1 if tree1 should be placed after
-* tree2 in a sorted list of trees.
-
-* Notes:
-* - Zero is returned if an error has already occurred, or
-* if this function fails for any reason.
-
-*/
-
-/* Local Variables: */
- int result;
- int i;
- Oper op;
-
-/* Initialise. */
- result = 0;
-
-/* Check inherited status. */
- if( !astOK ) return result;
-
-/* If the op codes differ, compare them as integers. */
- op = tree1->opcode;
- if( op != tree2->opcode ) {
- result = ( op > tree2->opcode ) ? 1: -1;
-
-/* If both supplied nodes are OP_LDVAR nodes, compare the associated names. */
- } else if( op == OP_LDVAR ){
- result = strcmp( tree1->name, tree2->name );
-
-/* If both supplied nodes are constant nodes, compare the constant values. */
- } else if( tree1->con != AST__BAD ){
- result = EQUAL( tree1->con, tree2->con ) ? 0 : (
- ( tree1->con > tree2->con ) ? 1 : -1 );
-
-/* Otherwise, compare the arguments for the node. */
- } else {
- for( i = 0; i < tree1->narg; i++ ) {
- result = CmpTree( tree1->arg[ i ], tree2->arg[ i ], exact, status );
- if( result ) break;
- }
-
-/* If the head nodes of the two trees are OP_MULT nodes, and the above
- check determined they are different, this may be just because they
- have their operands swapped. If "exact" si zero, this is considered an
- insignificant difference between the two trees which we should ignore.
- To check for this try comparing the arguments again, this time swapping
- the arguments of tree2. */
- if( result && op == OP_MULT && !exact ) {
- for( i = 0; i < tree1->narg; i++ ) {
- result = CmpTree( tree1->arg[ i ], tree2->arg[ 1 - i ], 0, status );
- if( result ) break;
- }
- }
- }
-
-/* If an error has occurred, return zero. */
- if( !astOK ) result = 0;
-
-/* Return the answer. */
- return result;
-}
-
-static UnitNode *CombineFactors( UnitNode **factors, double *powers,
- int nfactor, double coeff, int *status ) {
-/*
-* Name:
-* CombineFactors
-
-* Purpose:
-* Create a tree which represents the product of the supplied factors.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* UnitNode *CombineFactors( UnitNode **factors, double *powers,
-* int nfactor, double coeff, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function createa a tree of UnitNodes which represents the
-* product of the supplied factors, and the supplied coefficient.
-* The factors are sorted before being combined, using the sort order
-* implemented by the CmpTree function.
-
-* Parameters:
-* factors
-* A pointer to an array with "nfactor" elements, each element being
-* a pointer to a UnitNode which is a factor of the required tree.
-* On exit, the array is sorted.
-* powers
-* A pointer to an array with "nfactor" elements, each element being a
-* double holding the power of the associated factor in "factors".
-* On exit, the array reflects the sorting applied to "factors".
-* nfactor
-* The number of elements in the "factors" and "powers" arrays.
-* coeff
-* The overall coefficient to be applied to the product of the factors.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a UnitNode which is at the head of the new tree.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or
-* if this function fails for any reason.
-
-*/
-
-/* Local Variables: */
- UnitNode *result;
- int i;
- int j;
- int jp;
- int done;
- UnitNode *ftmp;
- UnitNode *node1;
- UnitNode *node2;
- UnitNode *pnode;
- double ptmp;
-
-/* Initialise. */
- result = NULL;
-
-/* Check inherited status. */
- if( !astOK ) return result;
-
-/* Sort the supplied list of factors, modifying the powers array
- correspondingly. A simple bubblesort algorithm is used since there
- will only be a handfull of factors. */
- for( i = nfactor - 1; i > 0; i-- ) {
- done = 1;
- for( j = 0, jp = 1; j < i; j++, jp++ ) {
- if( CmpTree( factors[ j ], factors[ jp ], 0, status ) > 0 ) {
- ftmp = factors[ j ];
- factors[ j ] = factors[ jp ];
- factors[ jp ] = ftmp;
-
- ptmp = powers[ j ];
- powers[ j ] = powers[ jp ];
- powers[ jp ] = ptmp;
-
- done = 0;
- }
- }
- if( done ) break;
- }
-
-/* The first root term of the returned tree is the coefficient, unless the
- coefficient is 1.0, in which case it will be the first factor. */
- if( coeff != 1.0 ) {
- node1 = NewNode( NULL, OP_LDCON, status );
- if( astOK ) node1->con = coeff;
- } else {
- node1 = NULL;
- }
-
-/* Loop through the factors. */
- for( i = 0; i < nfactor; i++ ) {
-
-/* If the power of this factor is zero, we ignore the factor. */
- if( powers[ i ] != 0.0 ) {
-
-/* If the power of this factor is one, we use the factor directly. */
- if( EQUAL( powers[ i ], 1.0 ) ) {
- node2 = CopyTree( factors[ i ], status );
-
-/* Otherwise, for non-zero, non-unity powers, we create a POW node for
- the factor. */
- } else {
- node2 = NewNode( NULL, OP_POW, status );
- pnode = NewNode( NULL, OP_LDCON, status );
- if( astOK ) {
- pnode->con = powers[ i ];
- node2->arg[ 0 ] = CopyTree( factors[ i ], status );
- node2->arg[ 1 ] = pnode;
- }
- }
-
-/* We now combine node1 and node2 using an OP_MULT node, which becomes
- the "node1" for the next pass. On the first pass we may have no node1 (if
- the supplied coefficient was 1.0), in which case we reserve the current
- node2 as the node1 for the next pass. */
- if( node1 ) {
- result = NewNode( NULL, OP_MULT, status );
- if( astOK ) {
- result->arg[ 0 ] = node1;
- result->arg[ 1 ] = node2;
- node1 = result;
- }
- } else {
- node1 = node2;
- }
- }
- }
-
-/* Ensure we have a node to return. */
- if( astOK ) {
- if( !result ) result = node1;
- if( !result ) {
- result = NewNode( NULL, OP_LDCON, status );
- if( astOK ) result->con = 1.0;
- }
- }
-
-/* If an error has occurred, free any new tree. */
- if( !astOK ) result = FreeTree( result, status );
-
-/* Return the answer. */
- return result;
-}
-
-static int ComplicateTree( UnitNode **node, int *status ) {
-/*
-* Name:
-* ComplicateTree
-
-* Purpose:
-* Removes standardisations introduced by SimplifyTree.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* int ComplicateTree( UnitNode **node )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function modifies a tree of UnitNodes by removing standardisations
-* introduced by SimplifyTree. The standardisations removed are ones
-* which would make the corresponding algebraic expression (as produced
-* by MakeExp) unnatural to a human reader.
-
-* Parameters:
-* node
-* The address of a pointer to the UnitNode at the head of the tree
-* which is to be complicated. On exit the supplied tree is freed and
-* a pointer to a new tree is placed at the given address.
-
-* Returned Value:
-* Non-zero if any change was introduced into the tree.
-
-*/
-
-/* Local Variables: */
- int i;
- UnitNode *newnode;
- UnitNode *node1;
- UnitNode *node2;
- UnitNode *node3;
- Oper op;
- double con;
- double fk;
- int k;
- int result;
- double kcon;
-
-/* Initialise */
- result = 0;
-
-/* Check inherited status. */
- if( !astOK ) return result;
-
-/* Initiallially, we have no replacement node. */
- newnode = NULL;
- node1 = NULL;
- node3 = NULL;
-
-/* Complicate the sub-trees corresponding to the arguments of the node at
- the head of the supplied tree. */
- for( i = 0; i < (*node)->narg; i++ ) {
- if( ComplicateTree( &( (*node)->arg[ i ] ), status ) ) result = 1;
- }
-
-/* Now undo specific simplifications appropriate to the nature of the node at
- the head of the tree. */
- op = (*node)->opcode;
-
-/* If the head is an OP_MULT node with a constant first argument and
- a "LN" second argument, rearrange the nodes to represent ln(x**k) instead
- of k*ln(x). If k is an integer multiple of "0.1/ln(10)" convert the "ln"
- function into a "log" (base 10) function. Check for "k==1" in which
- case we do not need a POW node. */
- if( (*node)->opcode == OP_MULT ) {
-
- con = (*node)->arg[ 0 ]->con;
- if( con != AST__BAD && (*node)->arg[ 1 ]->opcode == OP_LN ) {
- fk = 10.0*con*log( 10.0 );
- k = NINT(fk);
- if( EQUAL(fk,k) ) {
- newnode = NewNode( NULL, OP_LOG, status );
- con = k/10.0;
- } else {
- newnode = NewNode( NULL, OP_LN, status );
- }
-
- node2 = CopyTree( (*node)->arg[ 1 ]->arg[ 0 ], status );
- if( !EQUAL( con, 1.0 ) ){
- node1 = CopyTree( (*node)->arg[ 0 ], status );
- node3 = NewNode( NULL, OP_POW, status );
- }
-
- if( astOK ) {
- if( !EQUAL( con, 1.0 ) ){
- node1->con = con;
- node3->arg[ 0 ] = node2;
- node3->arg[ 1 ] = node1;
- newnode->arg[ 0 ] = node3;
- } else {
- newnode->arg[ 0 ] = node2;
- }
- }
-
-/* Replace "(A**-1)*B" with "B/A" */
- } else if( (*node)->arg[ 0 ]->opcode == OP_POW &&
- EQUAL( (*node)->arg[ 0 ]->arg[ 1 ]->con, -1.0 )) {
- newnode = NewNode( NULL, OP_DIV, status );
- if( astOK ) {
- newnode->arg[ 0 ] = CopyTree( (*node)->arg[ 1 ], status );
- newnode->arg[ 1 ] = CopyTree( (*node)->arg[ 0 ]->arg[ 0 ], status );
- }
-
-/* Replace "B*(A**-1)" with "B/A" */
- } else if( (*node)->arg[ 1 ]->opcode == OP_POW &&
- EQUAL( (*node)->arg[ 1 ]->arg[ 1 ]->con, -1.0 )) {
- newnode = NewNode( NULL, OP_DIV, status );
- if( astOK ) {
- newnode->arg[ 0 ] = CopyTree( (*node)->arg[ 0 ], status );
- newnode->arg[ 1 ] = CopyTree( (*node)->arg[ 1 ]->arg[ 0 ], status );
- }
-
-/* Convert (x**k)*(y**k) to (x*y)**k. */
- } else if( (*node)->arg[ 0 ]->opcode == OP_POW &&
- (*node)->arg[ 1 ]->opcode == OP_POW &&
- EQUAL( (*node)->arg[ 0 ]->arg[ 1 ]->con,
- (*node)->arg[ 1 ]->arg[ 1 ]->con )) {
- newnode = NewNode( NULL, OP_POW, status );
- node1 = NewNode( NULL, OP_MULT, status );
- if( astOK ) {
- node1->arg[ 0 ] = CopyTree( (*node)->arg[ 0 ]->arg[ 0 ], status );
- node1->arg[ 1 ] = CopyTree( (*node)->arg[ 1 ]->arg[ 0 ], status );
- newnode->arg[ 0 ] = node1;
- newnode->arg[ 1 ] = CopyTree( (*node)->arg[ 0 ]->arg[ 1 ], status );
- }
-
-/* Convert c*sqrt(x) to sqrt((c**2)*x) (if c > 0). */
- } else if( (kcon=(*node)->arg[ 0 ]->con) != AST__BAD &&
- kcon > 0.0 && (*node)->arg[ 1 ]->opcode == OP_SQRT ) {
- newnode = NewNode( NULL, OP_SQRT, status );
- node1 = NewNode( NULL, OP_MULT, status );
- node2 = NewNode( NULL, OP_LDCON, status );
- if( astOK ) {
- node2->con = kcon*kcon;
- node1->arg[ 0 ] = node2;
- node1->arg[ 1 ] = CopyTree( (*node)->arg[ 1 ]->arg[ 0 ], status );
- newnode->arg[ 0 ] = node1;
- }
- }
-
-/* If the head node is a POW node, replace "x**0.5" by sqrt(x) */
- } else if( (*node)->opcode == OP_POW ) {
- if( EQUAL( (*node)->arg[ 1 ]->con, 0.5 ) ) {
- newnode = NewNode( NULL, OP_SQRT, status );
- if( astOK ) {
- newnode->arg[ 0 ] = CopyTree( (*node)->arg[ 0 ], status );
- }
- }
- }
-
-/* If we have produced a new node which is identical to the old node,
- free it. Otherwise, indicate we have made some changes. */
- if( newnode ) {
- if( !CmpTree( newnode, *node, 1, status ) ) {
- newnode = FreeTree( newnode, status );
- } else {
- result = 1;
- }
- }
-
-/* If an error has occurred, free any new node. */
- if( !astOK ) {
- newnode = FreeTree( newnode, status );
- result = 0;
- }
-
-/* If we have a replacement node, free the supplied tree and return a
- pointer to the new tree. */
- if( newnode ) {
- FreeTree( *node, status );
- *node = newnode;
- }
-
-/* If the above produced some change, try simplifying (without
- re-introducing the standardisation we have just got rid of!) and
- then re-complicating the tree. */
- if( result ) {
- SimplifyTree( node, 0, status );
- ComplicateTree( node, status );
- }
-
-/* Return the result. */
- return result;
-}
-
-static UnitNode *ConcatTree( UnitNode *tree1, UnitNode *tree2, int *status ) {
-/*
-* Name:
-* ConcatTree
-
-* Purpose:
-* Concatenate two trees together.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* UnitNode *ConcatTree( UnitNode *tree1, UnitNode *tree2, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function a pointer to the head of a new tree of UnitNodes which
-* is formed by feeding the output of "tree1" (i.e. the quantity
-* represented by the node at the head of tree1) into the (single)
-* input of "tree2" (i.e. the single OP_LDVAR Node containined within
-* tree2).
-
-* Parameters:
-* tree1
-* A pointer to the first tree.
-* tree2
-* A pointer to the second tree. This should have no more than one
-* OP_LDVAR node.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a UnitNode which is at the head of the new tree.
-
-* Notes:
-* - If "tree2" contains zero units, a NULL pointer is returned but no
-* error is reported.
-* - If "tree2" contains more than one unit, an error is reported
-* error is reported.
-* - A NULL pointer is returned if an error has already occurred, or
-* if this function fails for any reason.
-
-*/
-
-/* Local Variables: */
- UnitNode *result;
- UnitNode **units;
- int nunits;
-
-/* Initialise. */
- result = NULL;
-
-/* Check inherited status. */
- if( !astOK ) return result;
-
-/* Produce a copy of tree2. */
- result = CopyTree( tree2, status );
-
-/* Locate the OP_LDVAR node in the copy of tree2. */
- units = NULL;
- nunits = 0;
- LocateUnits( result, &units, &nunits, status );
-
-/* If no OP_LDVAR nodes were found in tree2, we cannot concatenate the
- trees. */
- if( nunits > 0 ) {
-
-/* Report an error if the number of pointers returned is larger than 1. */
- if( nunits > 1 && astOK ) {
- astError( AST__INTER, "ConcatTree(unit): tree2 uses %d units - "
- "should be 1 (internal AST programming error).", status, nunits );
- }
-
-/* Replace the OP_LDVAR node in the copy of tree2 with a copy of tree1. */
- if( astOK ) {
-
-/* If the node at the head of the supplied tree2 is the node to be
- replaced, just free the tree created earlier and return a copy of
- tree1. */
- if( units[ 0 ] == result ) {
- FreeTree( result, status );
- result = CopyTree( tree1, status );
-
-/* Otherwise, search for the node to be replaced and do the substitution
- within the tree created earlier. */
- } else {
- ReplaceNode( result, units[ 0 ], CopyTree( tree1, status ), status );
- }
- }
- }
-
-/* Free resources. */
- units = astFree( units );
-
-/* If an error has occurred, free any new tree. */
- if( !astOK ) result = FreeTree( result, status );
-
-/* Return the answer. */
- return result;
-}
-
-static int ConStart( const char *text, double *val, int *nc, int *status ) {
-/*
-* Name:
-* ConStart
-
-* Purpose:
-* See if the supplied string starts with a literal numeric constant.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* int ConStart( const char *text, double *val, int *nc, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function checks if the supplied string starts with a literal
-* numeric constant and returns it if it does. It is a wrap-up for scanf
-* since scanf has non-standard behaviour on some platforms (e.g. Cygwin
-* scanf interprets the character "n" as a floating point number!).
-
-* Parameters:
-* text
-* The text to check.
-* val
-* Address of a double to receive any numerical constant read
-* from the start of the string. Unity is returned if the string
-* does not start with a numerical constant.
-* nc
-* Address of an int to receive the number of characters used to
-* create the value returned in "val". Zero is returned if the
-* string does not start with a numerical constant.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the text started with a numerical constant.
-
-*/
-
-/* Local Variables: */
- int result;
- const char *c;
-
-/* Initialise */
- *nc = 0;
- *val = 1.0;
-
-/* Return zero if no text was supplied */
- if( !text ) return 0;
-
-/* Use sscanf to see if the string begin with a numerical constant */
- result = astSscanf( text, "%lf%n", val, nc );
-
-/* If so, check that the first non-blank character in the string
- is not "N" (interpreted by Cygwin as numerical zero!). */
- if( result ) {
- c = text;
- while( isspace( *c ) ) c++;
- if( *c == 'n' || *c == 'N' ) {
- result = 0;
- *nc = 0;
- *val = 1.0;
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static UnitNode *CopyTree( UnitNode *tree, int *status ) {
-/*
-* Name:
-* CopyTree
-
-* Purpose:
-* Create a new tree of UnitNodes containing a copy of a given tree.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* UnitNode *CopyTree( UnitNode *tree, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function creates a copy of the supplied tree of UnitNodes.
-
-* Parameters:
-* tree
-* The UnitNode at the head of the tree to be copied.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the UnitNode at the head of the new tree.
-
-* Notes:
-* - A value of NULL will be returned if this function is invoked with
-* the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- UnitNode **args;
- UnitNode *result;
- int i;
- int narg;
-
-/* Initialise. */
- result = NULL;
-
-/* Check the inherited status. */
- if( !astOK || !tree ) return result;
-
-/* Create a new node to represent the head of the supplied tree. */
- result = astMalloc( sizeof( UnitNode ) );
-
-/* Check pointers can be used safely. */
- if( astOK ) {
-
-/* Copy the fields of the supplied node. */
- narg = tree->narg;
-
- result->arg = NULL;
- result->unit = tree->unit;
- result->mult = tree->mult;
- result->opcode = tree->opcode;
- result->narg = narg;
- result->con = tree->con;
- result->name = tree->name ? astStore( NULL, tree->name,
- strlen( tree->name ) + 1 ) : NULL;
-
-/* Create an array of UnitNode pointers for the arguments. */
- args = astMalloc( narg*sizeof( UnitNode * ) );
- if( astOK ) {
- result->arg = args;
-
-/* Copy the sub-trees headed by the argument nodes. */
- for( i = 0; i < narg; i++ ) {
- args[ i ] = CopyTree( tree->arg[ i ], status );
- }
- }
- }
-
-/* Free any result if an error occurred. */
- if( !astOK ) result = FreeTree( result, status );
-
-/* Return the answer. */
- return result;
-}
-
-static UnitNode *CreateTree( const char *exp, int basic, int lock, int *status ){
-/*
-* Name:
-* CreateTree
-
-* Purpose:
-* Convert an algebraic units expression into a tree of UnitNodes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* UnitNode *CreateTree( const char *exp, int basic, int lock, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function converts the supplied algebraic units expression into
-* a tree of UnitNodes. The result tree can optionally be expanded to
-* create a tree in which the "roots" (LDVAR nodes) all refer to
-* basic units.
-
-* Parameters:
-* exp
-* The units expression. This should not include any leading or
-* trailing spaces.
-* basic
-* Should the tree created from parsing "exp" be expanded so that
-* the leaf nodes of the tree are all basic units?
-* lock
-* Use a mutex to guard access to the KnownUnits list?
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a UnitNode which forms the head of a tree of UnitNodes
-* representing the supplied unit expression.
-
-* Notes:
-* - A NULL value is returned if this function is invoked with the
-* global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- UnitNode *result;
- const char *cleanex;
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status, and that we have a string. */
- if ( !astOK ) return result;
-
-/* Produce a clean copy of the supplied string. This has no leading
- or trailing white space, and any spaces adjacent to operators within
- the string are removed (this is needed because spaces are treated as
- multiplication symbols). */
- cleanex = CleanExp( exp, status );
-
-/* If the string is blank, return the NULL pointer. Otherwise, create a
- tree of UnitNodes describing the units. The returned tree has LDVAR
- nodes which refer to the unit symbols contained in the supplied string. */
- if( cleanex && (*cleanex) ) {
- result = MakeTree( cleanex, strlen( cleanex ), lock, status );
-
-/* Replace each subtree which simply combines constants (i.e. which has no
- OP_LDVAR nodes) with a single OP_LDCON node. */
- FixConstants( &result, 0, status );
-
-/* Invert literal constant unit multipliers. */
- InvertConstants( &result, status );
-
-/* Now replace each LDVAR node which refers to a known derived unit with
- a sub-tree which defines the derived unit in terms of known basic units.
- The LDVAR nodes in the resulting tree all refer to basic units. */
- if( basic ) RemakeTree( &result, status );
- }
-
-/* Free resources. */
- cleanex = astFree( (void *) cleanex );
-
-/* Free any returned tree if an error has occurred. */
- if( !astOK ) result = FreeTree( result, status );
-
-/* Return the result. */
- return result;
-}
-
-static int DimAnal( UnitNode *node, double powers[NQUANT], double *scale, int *status ) {
-/*
-* Name:
-* DimAnal
-
-* Purpose:
-* Perform a dimensional analysis of a unit tree.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "unit.h"
-* int DimAnal( UnitNode *node, double powers[NQUANT], double *scale, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function returns a set of powers and a scaling factor which
-* represent the units tree.
-
-* Parameters:
-* node
-* Pointer to the UnitNode at the head of the unit tree.
-* powers
-* An array in which are returned the powers for each of the following
-* basic units (in the order shown): kilogramme, metre, second, radian,
-* Kelvin, count, photon, magnitude, pixel. If the supplied unit does
-* not depend on a given basic unit a value of 0.0 will be returned in
-* the array. The returns values represent a system of units which is a
-* scaled form of the supplied units, expressed in the basic units of m,
-* kg, s, rad, K count,photon, mag and pixel. For instance, a returned
-* array of [1,0,-2,0,0,0,0,0,0] would represent "m/s**2".
-* scale
-* Pointer to a location at which to return a scaling factor for the
-* supplied units. The is the value, in the units represented by the
-* returned powers, which corresponds to a value of 1.0 in the supplied
-* units.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the tree was analysed succesfully. Zero otherwise.
-
-* Notes:
-* - Zero is returned if this function is invoked with the
-* global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables; */
- Oper oper;
- int result;
- int i;
- double p0[ NQUANT ];
- double p1[ NQUANT ];
- double s0;
- double s1;
-
-/* Check inherited status */
- if( !astOK ) return 0;
-
-/* Initialise the powers of all dimensions to zero, and set the scaling
- factor to unity. */
- result = 1;
- *scale = 1.0;
- for( i = 0; i < NQUANT; i++ ) powers[ i ] = 0.0;
-
-/* Load constant: constant is dimensionaless so leave powers unchanged,
- and set the scaling factor. */
- oper = node->opcode;
- if( oper == OP_LDCON ) {
- *scale = 1.0/node->con;
-
-/* Load variable: check it is one of the basic known dimensional
- quantities. If so, set the power of the quantity to unity and store
- the scale factor. If the unit is "g" modify the scale factor so that
- the analysis quantity is "kg". */
- } else if( oper == OP_LDVAR ) {
- result = 0;
- for( i = 0; i < NQUANT; i++ ) {
- if( node->unit == quant_units[ i ] ) {
- powers[ i ] = 1.0;
- *scale = node->mult ? 1.0/node->mult->scale : 1.0;
- if( !strcmp( node->unit->sym, "g" ) ) *scale *= 0.001;
- result = 1;
- break;
- }
- }
-
-/* How does dimensional analysis handle log or exp units?*/
- } else if( oper == OP_LOG ) {
- result= 0;
-
- } else if( oper == OP_LN ) {
- result= 0;
-
- } else if( oper == OP_EXP ) {
- result= 0;
-
-/* Get the powers for the child unit and then multiply each by 0.5 and
- take the square root of the scale factor. */
- } else if( oper == OP_SQRT ) {
- result = DimAnal( node->arg[0], powers, scale, status );
- if( result ) {
- for( i = 0; i < NQUANT; i++ ) powers[ i ]*= 0.5;
- *scale = sqrt( *scale );
- }
-
-/* Similarly for pow nodes. */
- } else if( oper == OP_POW ) {
- result = DimAnal( node->arg[0], powers, scale, status );
- if( result ) {
- double power = node->arg[1]->con;
- for( i = 0; i < NQUANT; i++ ) powers[ i ]*= power;
- *scale = pow( *scale, power );
- }
-
-/* Binary operators. Analyses the operands dimensions and combine. */
- } else if( oper == OP_DIV ) {
- if( DimAnal( node->arg[0], p0, &s0, status ) &&
- DimAnal( node->arg[1], p1, &s1, status ) ) {
- for( i = 0; i < NQUANT; i++ ) powers[ i ] = p0[ i ] - p1[ i ];
- *scale = s0/s1;
- } else {
- result = 0;
- }
-
- } else if( oper == OP_MULT ) {
- if( DimAnal( node->arg[0], p0, &s0, status ) &&
- DimAnal( node->arg[1], p1, &s1, status ) ) {
- for( i = 0; i < NQUANT; i++ ) powers[ i ] = p0[ i ] + p1[ i ];
- *scale = s0*s1;
- } else {
- result = 0;
- }
-
-/* Named constants are dimensionless */
- } else if( oper == OP_LDPI ) {
- *scale = 1.0/PI;
-
- } else if( oper == OP_LDE ) {
- *scale = 1.0/E;
-
- }
-
- return result;
-
-}
-
-static int EndsWith( const char *c, int nc, const char *test, int *status ){
-/*
-* Name:
-* EndsWith
-
-* Purpose:
-* See if a string ends with another string
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* int EndsWith( const char *c, int nc, const char *test, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function sees if the string given by "c" ends with the string
-* given by "test". The comparison is case-insensitive.
-
-* Parameters:
-* c
-* A pointer to the last character in the string to be tested.
-* nc
-* The number of characters in the string to be tested.
-* test
-* A pointer to the string to be tested for.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the string "c" ends with the string "test".
-
-*/
-
-/* Local Variables: */
- const char *start;
- int i;
- int result;
- int tlen;
-
-/* initialise. */
- result = 0;
-
-/* Check inherited status. */
- if( !astOK ) return result;
-
-/* Check the string being tested for is not longer than the string being
- tested. */
- tlen = strlen( test );
- if( tlen <= nc ){
-
-/* Get a pointer to where the matching string would start if the string "c"
- ends with the required string "test". */
- start = c - tlen + 1;
-
-/* Do the comparison. */
- result = 1;
- for( i = 0; i < tlen; i++ ) {
- if( tolower( start[ i ] ) != tolower( test[ i ] ) ) {
- result = 0;
- break;
- }
- }
- }
-
-/* Return the result. */
- return result;
-
-}
-
-static void FindFactors( UnitNode *node, UnitNode ***factors, double **powers,
- int *nfactor, double *coeff, int *status ){
-/*
-* Name:
-* FindFactors
-
-* Purpose:
-* Find the factors within an expression given by a tree of UnitNodes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* void FindFactors( UnitNode *node, UnitNode ***factors, double **powers,
-* int *nfactor, double *coeff, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function analyses the supplied tree of UnitNoes and returns
-* an array of pointers to nodes within the supplied tree which form
-* factors of the tree. The power associated with each factor is also
-* returned, together with an overall coefficient for the tree. The
-* expression represented by the tree is thus the product of the
-* coefficient with each of the factors, each raised to the associated
-* power.
-
-* Parameters:
-* node
-* A pointer to the UnitNode at the head of the tree which is to be
-* analysed.
-* factors
-* The address at which to return a pointer to an array with "*nfactor"
-* elements, each element being a pointer to a UnitNode within the
-* supplied tree which is a factor of the supplied tree.
-* powers
-* The address at which to return a pointer to an array with "*nfactor"
-* elements, each element being a double holding the power of the
-* associated factor in "*factors".
-* nfactor
-* The address of an int containing the number of elements in the
-* returned "*factors" and "*powers" arrays.
-* coeff
-* The address of a double containing the overall coefficient to be
-* applied to the product of the factors.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - If the supplied node is a constant node, then "*coeff" is
-* returned holding the value of the constant and "*nfactor" is returned
-* equal to zero ("*factors" and "*powers" are returned holding NULL).
-* - If an error has already occurred, or if this function fails, then
-* "*factors" and "*powers" are returned holding NULL, "*nfactor" is
-* returned holding zero and "*coeff" is returned holding 1.0.
-
-*/
-
-/* Local Variables: */
- int i;
- int j;
- int found;
- UnitNode **fact1;
- double *pow1;
- double coeff1;
- int nfac1;
- double con;
-
-/* Initialise */
- *factors = NULL;
- *powers = NULL;
- *nfactor = 0;
- *coeff = 1.0;
-
-/* Check inherited status. */
- if( !astOK ) return;
-
-/* If the node at the head of the supplied tree is an OP_MULT node... */
- if( node->opcode == OP_MULT ) {
-
-/* Find the factors of the two arguments of the OP_MULT node. */
- FindFactors( node->arg[ 0 ], factors, powers, nfactor, coeff, status );
- FindFactors( node->arg[ 1 ], &fact1, &pow1, &nfac1, &coeff1, status );
-
-/* Combine the two lists. Loop round the factors of the seocnd argument. */
- for( i = 0; i < nfac1; i++ ) {
-
-/* See if there is already an equivalent factor in the returned list of
- factors. */
- found = 0;
- for( j = 0; j < *nfactor; j++ ) {
- if( !CmpTree( (*factors)[ j ], fact1[ i ], 0, status ) ){
- found = 1;
- break;
- }
- }
-
-/* If so, increment the power of the factor. */
- if( found ) {
- (*powers)[ j ] += pow1[ i ];
-
-/* Otherwise, add the factor to the end of the returned list. */
- } else {
- *factors = astGrow( *factors, *nfactor + 1, sizeof( UnitNode *) );
- *powers = astGrow( *powers, *nfactor + 1, sizeof( double ) );
- if( astOK ) {
- (*factors)[ *nfactor ] = fact1[ i ];
- (*powers)[ (*nfactor)++ ] = pow1[ i ];
- }
- }
- }
-
-/* Modify the overall coefficient. */
- *coeff *= coeff1;
-
-/* Free resources */
- fact1 = astFree( fact1 );
- pow1 = astFree( pow1 );
-
-/* If the node at the head of the supplied tree is an OP_POW node, */
- } else if( node->opcode == OP_POW ) {
-
-/* Find the factors of the first argument. */
- FindFactors( node->arg[ 0 ], factors, powers, nfactor, coeff, status );
-
-/* Multiply all the factor powers by the constant exponent of the POW
- node. */
- con = node->arg[ 1 ]->con;
- for( j = 0; j < *nfactor; j++ ) {
- (*powers)[ j ] *= con;
- }
-
-/* Exponentiate the coefficient. */
- if( *coeff >= 0.0 || (int) con == con ) {
- *coeff = pow( *coeff, con );
- } else {
- astError( AST__BADUN, "Simplifying a units expression requires a "
- "negative value to be raised to a non-intergal power." , status);
- }
-
-/* If the node at the head of the supplied tree is an OP_DIV node, */
- } else if( node->opcode == OP_DIV ) {
-
-/* Find the factors of the two arguments of the OP_DIV node. */
- FindFactors( node->arg[ 0 ], factors, powers, nfactor, coeff, status );
- FindFactors( node->arg[ 1 ], &fact1, &pow1, &nfac1, &coeff1, status );
-
-/* Combine the two lists. Loop round the factors of the second argument
- (the denominator). */
- for( i = 0; i < nfac1; i++ ) {
-
-/* See if there is already an equivalent factor in the returned list of
- factors. */
- found = 0;
- for( j = 0; j < *nfactor; j++ ) {
- if( !CmpTree( (*factors)[ j ], fact1[ i ], 0, status ) ){
- found = 1;
- break;
- }
- }
-
-/* If so, decrement the power of the factor. */
- if( found ) {
- (*powers)[ j ] -= pow1[ i ];
-
-/* Otherwise, add the factor to the end of the returned list, with a
- negated power. */
- } else {
- *factors = astGrow( *factors, *nfactor + 1, sizeof( UnitNode *) );
- *powers = astGrow( *powers, *nfactor + 1, sizeof( double ) );
- if( astOK ) {
- (*factors)[ *nfactor ] = fact1[ i ];
- (*powers)[ (*nfactor)++ ] = -pow1[ i ];
- }
- }
- }
-
-/* Modify the overall coefficient. */
- if( coeff1 != 0.0 ) {
- *coeff /= coeff1;
- } else {
- astError( AST__BADUN, "Simplifying a units expression"
- "requires a division by zero." , status);
- }
-
-/* Free resources */
- fact1 = astFree( fact1 );
- pow1 = astFree( pow1 );
-
-/* If the node at the head of the supplied tree is an OP_SQRT node, */
- } else if( node->opcode == OP_SQRT ) {
-
-/* Find the factors of the argument. */
- FindFactors( node->arg[ 0 ], factors, powers, nfactor, coeff, status );
-
-/* Multiply all the factor powers by 0.5. */
- for( j = 0; j < *nfactor; j++ ) {
- (*powers)[ j ] *= 0.5;
- }
-
-/* Square root the coefficient. */
- if( *coeff >= 0.0 ) {
- *coeff = sqrt( *coeff );
- } else {
- astError( AST__BADUN, "Simplifying a units expression requires "
- "the square root of a negative value to be taken." , status);
- }
-
-/* If the node at the head of the supplied tree is constant we have no
- factors but we have a coeffcient. */
- } else if( node->con != AST__BAD ) {
- *coeff = node->con;
-
-/* Other nodes have no factors other than themselves, so just return a
- pointer to the supplied node. */
- } else {
- *factors = astMalloc( sizeof( UnitNode *) );
- *powers = astMalloc( sizeof( double ) );
- if( astOK ) {
- *nfactor = 1;
- (*factors)[ 0 ] = node;
- (*powers)[ 0 ] = 1.0;
- *coeff = 1.0;
- }
- }
-
-/* If an error has occurred, free any returned resources. */
- if( !astOK ) {
- *factors = astFree( *factors );
- *powers = astFree( *powers );
- *nfactor = 0;
- *coeff = 1.0;
- }
-}
-
-static void FixConstants( UnitNode **node, int unity, int *status ) {
-/*
-* Name:
-* FixConstants
-
-* Purpose:
-* Take the reciprocal of all constants in a tree of UnitNodes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* void FixConstants( UnitNode **node, int unity, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function replaces sub-trees which have a constant value by
-* a single OP_LDCON node which loads the appropriate constant.
-
-* Parameters:
-* node
-* The address of a pointer to the UnitNode at the head of the tree
-* which is to be fixed. On exit the supplied tree is freed and a
-* pointer to a new tree is palced at he given address.
-* unity
-* If non-zero, then all multiplicative constants are set to 1.0, and
-* their original values are forgotten, but only if the other
-* argument of the OP_MULT node is an OP_LDVAR, OP_POW or OP_SQRT Node.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- int i;
- UnitNode *newnode;
- int allcon;
- Oper op;
- double newcon;
-
-/* Check inherited status and pointer. */
- if( !astOK || !node || !(*node) ) return;
-
-/* Initiallially, we have no replacement node */
- newnode = NULL;
- newcon = AST__BAD;
-
-/* There is nothing to fix if the node has no arguments. */
- if( (*node)->narg > 0 ) {
-
-/* Note the op code for the node. */
- op = (*node)->opcode;
-
-/* Fix up the argument nodes. Also note if all the arguments are
- constants. */
- allcon = 1;
- for( i = 0; i < (*node)->narg; i++ ) {
- FixConstants( &( (*node)->arg[ i ] ), unity, status );
- if( (*node)->arg[ i ]->con == AST__BAD ) allcon = 0;
- }
-
-/* If an OP_MULT nodes within a simplified tree has a constant argument,
- it will always be argument zero. If this is an OP_MULT node and arg[0]
- is constant and "unity" is non-zero and arg[1] is an OP_LDVAR, OP_POW
- or OP_SQRT node, replace the constant value by 1.0. */
- if( unity && op == OP_MULT &&
- (*node)->arg[ 0 ]->con != AST__BAD &&
- ( (*node)->arg[ 1 ]->opcode == OP_LDVAR ||
- (*node)->arg[ 1 ]->opcode == OP_SQRT ||
- (*node)->arg[ 1 ]->opcode == OP_POW ) ) {
- (*node)->arg[ 0 ]->con = 1.0;
- }
-
-/* If the arguments of this node are all constants, replace the node by
- an OP_LDCON node which loads the resulting constant value. */
- if( allcon ) {
- if( (*node)->narg > 0 ) {
- newnode = NewNode( NULL, OP_LDCON, status );
- if( astOK ) {
- if( op == OP_LOG ) {
- if( (*node)->arg[ 0 ]->con > 0.0 ) {
- newcon = log10( (*node)->arg[ 0 ]->con );
- } else {
- astError( AST__BADUN, "Illegal negative or zero constant "
- "value '%g' encountered.", status,
- (*node)->arg[ 0 ]->con );
- }
- } else if( op == OP_LN ){
- if( (*node)->arg[ 0 ]->con > 0.0 ) {
- newcon = log( (*node)->arg[ 0 ]->con );
- } else {
- astError( AST__BADUN, "Illegal negative or zero constant value "
- "'%g' encountered.", status, (*node)->arg[ 0 ]->con );
- }
- } else if( op == OP_EXP ){
- newcon = exp( (*node)->arg[ 0 ]->con );
-
- } else if( op == OP_SQRT ){
- if( (*node)->arg[ 0 ]->con >= 0.0 ) {
- newcon = sqrt( (*node)->arg[ 0 ]->con );
- } else {
- astError( AST__BADUN, "Illegal negative constant value "
- "'%g' encountered.", status, (*node)->arg[ 0 ]->con );
- }
-
- } else if( op == OP_POW ){
- if( (*node)->arg[ 0 ]->con >= 0.0 ||
- (int) (*node)->arg[ 1 ]->con == (*node)->arg[ 1 ]->con ) {
- newcon = pow( (*node)->arg[ 0 ]->con,
- (*node)->arg[ 1 ]->con );
- } else {
- astError( AST__BADUN, "Illegal negative constant value "
- "'%g' encountered.", status, (*node)->arg[ 0 ]->con );
- }
-
- } else if( op == OP_DIV ){
- if( (*node)->arg[ 1 ]->con != 0.0 ) {
- newcon = (*node)->arg[ 0 ]->con / (*node)->arg[ 1 ]->con;
- } else {
- astError( AST__BADUN, "Illegal zero constant value encountered." , status);
- }
-
- } else if( op == OP_MULT ){
- newcon = (*node)->arg[ 0 ]->con * (*node)->arg[ 1 ]->con;
-
- }
-
-
- if( astOK ) newnode->con = newcon;
- }
- }
- }
- }
-
-/* If an error has occurred, free any new node. */
- if( !astOK ) newnode = FreeTree( newnode, status );
-
-/* If we have a replacement node, free the supplied tree and return a
- pointer to the new tree. */
- if( newnode ) {
- FreeTree( *node, status );
- *node = newnode;
- }
-
-}
-
-static UnitNode *FixUnits( UnitNode *node, UnitNode *test, int *status ) {
-/*
-* Name:
-* FixUnits
-
-* Purpose:
-* Assign a constant value to all units except for one.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* UnitNode *FixUnits( UnitNode *node, UnitNode *test, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function returns a copy of the supplied tree of UnitNodes. All
-* OP_LDVAR nodes within the copy which refer to units which differ
-* from those referred to by the supplied test node are replaced by
-* OP_LDCON nodes which load the constant value 1.0.
-
-* Parameters:
-* node
-* A pointer to the UnitNode at the head of the tree to be used.
-* test
-* A pointer to an OP_LDVAR node which defines the units which are
-* *not* to be replaced by a constant value of 1.0.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a UnitNode which is at the head of a tree of UnitNodes
-* which forms the required copy of th einput tree.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, or
-* if this function fails for any reason.
-
-*/
-
-/* Local Variables: */
- int i;
- UnitNode *result;
-
-/* Initialise. */
- result = NULL;
-
-/* Check inherited status. */
- if( !astOK ) return result;
-
-/* Create a complete copy of the supplied tree. */
- result = CopyTree( node, status );
-
-/* Is the node at the head of the supplied tree an OP_LDVAR node? */
- if( node->opcode == OP_LDVAR ) {
-
-/* Does it refer to a unit which differs from that of the test node? If so
- annul the copy created above and return a new OP_LDCON node which loads
- the constant value 1.0. */
- if( strcmp( test->name, node->name ) ) {
- FreeTree( result, status );
- result = NewNode( NULL, OP_LDCON, status );
- if( astOK ) result->con = 1.0;
- }
-
-/* If the supplied node is not an OP_LDVAR node, check each argument of
- the head node. */
- } else {
- for( i = 0; i < node->narg; i++ ) {
-
-/* Free the resources used to hold this argument in the tree copy created
- above. */
- FreeTree( result->arg[ i ], status );
-
-/* Create a new argument tree by calling this function recursively to
- fix units in the argument sub-trees. */
- result->arg[ i ] = FixUnits( node->arg[ i ], test, status );
- }
- }
-
-/* If an error has occurred, free any new tree. */
- if( !astOK ) result = FreeTree( result, status );
-
-/* Return the answer. */
- return result;
-}
-
-static UnitNode *FreeTree( UnitNode *node, int *status ) {
-/*
-* Name:
-* FreeTree
-
-* Purpose:
-* Free resources used by a tree of UnitNodes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* UnitNode *FreeTree( UnitNode *node, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function frees the memory used to store a tree of UnitNodes.
-
-* Parameters:
-* node
-* A pointer to the UnitNode at the head of the tree which is to be
-* freed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A NULL pointer is returned.
-
-* Notes:
-* - This function attempts to execute even if it is invoked with
-* the global error status set.
-*/
-
-/* Local Variables: */
- int i;
-
-/* Check a node was supplied. */
- if( node ) {
-
-/* Recursively free any argument nodes. */
- if( node->arg ) {
- for( i = 0; i < node->narg; i++ ) {
- (node->arg)[ i ] = FreeTree( (node->arg)[ i ], status );
- }
- node->arg = astFree( node->arg );
- }
-
-/* Nullify other pointers for safety. */
- node->unit = NULL;
- node->mult = NULL;
-
-/* Free the copy of the symbol string (if any). */
- node->name = astFree( (char *) node->name );
-
-/* Free the memory holding the node. */
- node = astFree( node );
- }
-
-/* Return a null pointer. */
- return NULL;
-}
-
-static KnownUnit *GetKnownUnits( int lock, int *status ) {
-/*
-* Name:
-* GetKnownUnits
-
-* Purpose:
-* Get a pointer to the head of a linked list of known unit definitions.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* KnownUnit *GetKnownUnits( int lock, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function returns a pointer to the head of a linked list of known
-* unit definitions. The unit definitions are created as static module
-* variables if they have not previously been created.
-
-* Parameters:
-* lock
-* If non-zero, then lock a mutex prior to accessing the list of
-* known units.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the first known unit definition.
-
-* Notes:
-* - A NULL pointer is returned if it is invoked with the global error
-* status set, or if an error occurs.
-*/
-
-/* Local Variables: */
- int iq;
- KnownUnit *result;
-
-/* Initialise. */
- result = NULL;
-
-/* Check inherited status. */
- if( !astOK ) return result;
-
-/* Ensure the known units list is only initialised once. */
- if( lock ) {
- LOCK_MUTEX1
- }
-
-/* If the linked list of KnownUnit structures describing the known units
- has not yet been created, create it now. A pointer to the head of the
- linked list is put into the static variable "known_units". */
- if( !known_units ) {
-
-/* At the same time we store pointers to the units describing the basic
- quantities used in dimensional analysis. Initialise th index of the
- next such unit. */
- iq = 0;
-
-/* Create definitions for the known units. First do all IAU basic units.
- We include "g" instead of "kg" because otherwise we would have to
- refer to a gramme as a milli-kilogramme. */
- MakeKnownUnit( "g", "gram", NULL, status );
- quant_units[ iq++ ] = known_units;
- MakeKnownUnit( "m", "metre", NULL, status );
- quant_units[ iq++ ] = known_units;
- MakeKnownUnit( "s", "second", NULL, status );
- quant_units[ iq++ ] = known_units;
- MakeKnownUnit( "rad", "radian", NULL, status );
- quant_units[ iq++ ] = known_units;
- MakeKnownUnit( "K", "Kelvin", NULL, status );
- quant_units[ iq++ ] = known_units;
- MakeKnownUnit( "A", "Ampere", NULL, status );
- MakeKnownUnit( "mol", "mole", NULL, status );
- MakeKnownUnit( "cd", "candela", NULL, status );
-
-/* Now do all IAU derived units. Unit definitions may only refer to units
- which have already been defined. */
- MakeKnownUnit( "sr", "steradian", "rad rad", status );
- MakeKnownUnit( "Hz", "Hertz", "1/s", status );
- MakeKnownUnit( "N", "Newton", "kg m/s**2", status );
- MakeKnownUnit( "J", "Joule", "N m", status );
- MakeKnownUnit( "W", "Watt", "J/s", status );
- MakeKnownUnit( "C", "Coulomb", "A s", status );
- MakeKnownUnit( "V", "Volt", "J/C", status );
- MakeKnownUnit( "Pa", "Pascal", "N/m**2", status );
- MakeKnownUnit( "Ohm", "Ohm", "V/A", status );
- MakeKnownUnit( "S", "Siemens", "A/V", status );
- MakeKnownUnit( "F", "Farad", "C/V", status );
- MakeKnownUnit( "Wb", "Weber", "V s", status );
- MakeKnownUnit( "T", "Tesla", "Wb/m**2", status );
- MakeKnownUnit( "H", "Henry", "Wb/A", status );
- MakeKnownUnit( "lm", "lumen", "cd sr", status );
- MakeKnownUnit( "lx", "lux", "lm/m**2", status );
-
-/* Now do additional derived and basic units listed in the FITS-WCS paper. */
- MakeKnownUnit( "deg", "degree", "pi/180 rad", status );
- MakeKnownUnit( "arcmin", "arc-minute", "1/60 deg", status );
- MakeKnownUnit( "arcsec", "arc-second", "1/3600 deg", status );
- MakeKnownUnit( "mas", "milli-arcsecond", "1/3600000 deg", status );
- MakeKnownUnit( "min", "minute", "60 s", status );
- MakeKnownUnit( "h", "hour", "3600 s", status );
- MakeKnownUnit( "d", "day", "86400 s", status );
- MakeKnownUnit( "yr", "year", "31557600 s", status );
- MakeKnownUnit( "a", "year", "31557600 s", status );
- MakeKnownUnit( "eV", "electron-Volt", "1.60217733E-19 J", status );
- MakeKnownUnit( "erg", "erg", "1.0E-7 J", status );
- MakeKnownUnit( "Ry", "Rydberg", "13.605692 eV", status );
- MakeKnownUnit( "solMass", "solar mass", "1.9891E30 kg", status );
- MakeKnownUnit( "u", "unified atomic mass unit", "1.6605387E-27 kg", status );
- MakeKnownUnit( "solLum", "solar luminosity", "3.8268E26 W", status );
- MakeKnownUnit( "Angstrom", "Angstrom", "1.0E-10 m", status );
- MakeKnownUnit( "micron", "micron", "1.0E-6 m", status );
- MakeKnownUnit( "solRad", "solar radius", "6.9599E8 m", status );
- MakeKnownUnit( "AU", "astronomical unit", "1.49598E11 m", status );
- MakeKnownUnit( "lyr", "light year", "9.460730E15 m", status );
- MakeKnownUnit( "pc", "parsec", "3.0867E16 m", status );
- MakeKnownUnit( "count", "count", NULL, status );
- quant_units[ iq++ ] = known_units;
- MakeKnownUnit( "photon", "photon", NULL, status );
- quant_units[ iq++ ] = known_units;
- MakeKnownUnit( "Jy", "Jansky", "1.0E-26 W /m**2 /Hz", status );
- MakeKnownUnit( "mag", "magnitude", NULL, status );
- quant_units[ iq++ ] = known_units;
- MakeKnownUnit( "G", "Gauss", "1.0E-4 T", status );
- MakeKnownUnit( "pixel", "pixel", NULL, status );
- quant_units[ iq++ ] = known_units;
- MakeKnownUnit( "barn", "barn", "1.0E-28 m**2", status );
- MakeKnownUnit( "D", "Debye", "(1.0E-29/3) C.m", status );
-
- if( iq != NQUANT && astOK ) {
- astError( AST__INTER, "unit(GetKnownUnits): %d basic quantities "
- "noted but this should be %d (internal AST programming "
- "error).", status, iq, NQUANT );
- }
-
-/* Unit aliases... */
- MakeUnitAlias( "Angstrom", "A", status );
- MakeUnitAlias( "Angstrom", "Ang", status );
- MakeUnitAlias( "count", "ct", status );
- MakeUnitAlias( "photon", "ph", status );
- MakeUnitAlias( "Jy", "Jan", status );
- MakeUnitAlias( "pixel", "pix", status );
- MakeUnitAlias( "s", "sec", status );
- MakeUnitAlias( "m", "meter", status );
- }
-
-/* If succesful, return the pointer to the head of the list. */
- if( astOK ) result = known_units;
-
-/* Allow the next thread to proceed. */
- if( lock ) {
- UNLOCK_MUTEX1
- }
-
-/* Return the result. */
- return result;
-}
-
-static Multiplier *GetMultipliers( int *status ) {
-/*
-* Name:
-* GetMultiplier
-
-* Purpose:
-* Get a pointer to the head of a linked list of multiplier definitions.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* Multiplier *Multipliers( void )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function returns a pointer to the head of a linked list of known
-* multiplier definitions. The multiplier definitions are created as
-* static module variables if they have not previously been created.
-
-* Returned Value:
-* A pointer to the first known multiplier definition.
-
-* Notes:
-* - A NULL pointer is returned if it is invoked with the global error
-* status set, or if an error occurs.
-*/
-
-/* Local Variables: */
- Multiplier *result;
- Multiplier *mult;
-
-/* Initialise. */
- result = NULL;
-
-/* Check inherited status. */
- if( !astOK ) return result;
-
-/* Ensure the list is only initialised by one thread. */
- LOCK_MUTEX2
-
-/* If the linked list of Multiplier structures describing the known
- multipliers has not yet been created, create it now. A pointer to the
- head of the linked list is put into the static variable "multipliers". */
- if( !multipliers ) {
-
-/* Define a macro to create a multiplier struncture and add it to the
- linked list of multiplier structures. */
-#define MAKEMULT(s,sl,sc,lab,ll) \
- mult = astMalloc( sizeof( Multiplier ) ); \
- if( astOK ) { \
- mult->sym = s; \
- mult->symlen = sl; \
- mult->lablen = ll; \
- mult->scale = sc; \
- mult->label = lab; \
- mult->next = multipliers; \
- multipliers = mult; \
- }
-
-/* Use the above macro to create all the standard multipliers listed in the
- FITS WCS paper I. */
- MAKEMULT("d",1,1.0E-1,"deci",4)
- MAKEMULT("c",1,1.0E-2,"centi",5)
- MAKEMULT("m",1,1.0E-3,"milli",5)
- MAKEMULT("u",1,1.0E-6,"micro",5)
- MAKEMULT("n",1,1.0E-9,"nano",4)
- MAKEMULT("p",1,1.0E-12,"pico",4)
- MAKEMULT("f",1,1.0E-15,"femto",5)
- MAKEMULT("a",1,1.0E-18,"atto",4)
- MAKEMULT("z",1,1.0E-21,"zepto",5)
- MAKEMULT("y",1,1.0E-24,"yocto",5)
- MAKEMULT("da",2,1.0E1,"deca",4)
- MAKEMULT("h",1,1.0E2,"hecto",5)
- MAKEMULT("k",1,1.0E3,"kilo",4)
- MAKEMULT("M",1,1.0E6,"mega",4)
- MAKEMULT("G",1,1.0E9,"giga",4)
- MAKEMULT("T",1,1.0E12,"tera",4)
- MAKEMULT("P",1,1.0E15,"peta",4)
- MAKEMULT("E",1,1.0E18,"exa",3)
- MAKEMULT("Z",1,1.0E21,"zetta",5)
- MAKEMULT("Y",1,1.0E24,"yotta",5)
-
-/* Undefine the macro. */
-#undef MAKEMULT
-
- }
-
-/* If succesful, return the pointer to the head of the list. */
- if( astOK ) result = multipliers;
-
-/* Allow the next thread to proceed. */
- UNLOCK_MUTEX2
-
-/* Return the result. */
- return result;
-}
-
-static void InvertConstants( UnitNode **node, int *status ) {
-/*
-* Name:
-* InvertConstants
-
-* Purpose:
-* Take the reciprocal of all constants in a tree of UnitNodes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* void InvertConstants( UnitNode **node, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function replaces constant unit coefficients by their reciprocal.
-* This is because a string such as "0.01 m" will be interpreted as
-* meaning "multiply a value in metres by 0.01 to get the value in the
-* required units", whereas what is actually meant is "use units of
-* 0.01 of a metre" which requires us to divide the value in metres by
-* 0.01, not multiply it.
-
-* Parameters:
-* node
-* The address of a pointer to the UnitNode at the head of the tree.
-* On exit the supplied tree is freed and a pointer to a new tree is
-* placed at the given address.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- int i;
- UnitNode *newnode;
- int allcon;
- Oper op;
-
-/* Check inherited status and pointer. */
- if( !astOK || !node || !(*node) ) return;
-
-/* Initiallially, we have no replacement node */
- newnode = NULL;
-
-/* There is nothing to fix if the node has no arguments. */
- if( (*node)->narg > 0 ) {
-
-/* Note the op code for the node. */
- op = (*node)->opcode;
-
-/* Fix up the argument nodes. Also note if all the arguments are
- constants. */
- allcon = 1;
- for( i = 0; i < (*node)->narg; i++ ) {
- InvertConstants( &( (*node)->arg[ i ] ), status );
- if( (*node)->arg[ i ]->con == AST__BAD ) allcon = 0;
- }
-
-/* If all nodes are constant, there are no co-efficients to invert. */
- if( !allcon ) {
-
-/* Iif this is a multiplication node, see if either of its arguments
- is a constant. If so, invert the constant. This is because a string like
- "0.01 m" means "each unit is 0.01 of a metre". Therefore, to transform
- a value in metres into required units means multiplying the metres
- value by 100.0 (i.e the reciprocal of 0.01), not 0.01. */
- if( op == OP_MULT ) {
- for( i = 0; i < 2; i++ ) {
- if( (*node)->arg[ i ]->con != AST__BAD ) {
- if( (*node)->arg[ i ]->con != 0.0 ) {
-
- (*node)->arg[ i ]->con = 1.0/(*node)->arg[ i ]->con;
- } else {
- astError( AST__BADUN, "Illegal zero constant encountered." , status);
- }
- }
- }
-
-/* Likewise, check for division nodes in which the denominator is
- constant. */
- } else if( op == OP_DIV ) {
- if( (*node)->arg[ 1 ]->con != AST__BAD ) {
- if( (*node)->arg[ 1 ]->con != 0.0 ) {
- (*node)->arg[ 1 ]->con = 1.0/(*node)->arg[ 1 ]->con;
- } else {
- astError( AST__BADUN, "Illegal zero constant encountered." , status);
- }
- }
-
-/* If this is a "pow" node check that the second argument is constant
- (required by FITS WCS paper I). */
- } else if( op == OP_POW ) {
- if( (*node)->arg[ 1 ]->con == AST__BAD ) {
- astError( AST__BADUN, "Illegal variable exponent." , status);
- }
- }
- }
- }
-
-/* If an error has occurred, free any new node. */
- if( !astOK ) newnode = FreeTree( newnode, status );
-
-/* If we have a replacement node, free the supplied tree and return a
- pointer to the new tree. */
- if( newnode ) {
- FreeTree( *node, status );
- *node = newnode;
- }
-}
-
-static UnitNode *InvertTree( UnitNode *fwdnode, UnitNode *src, int *status ) {
-/*
-* Name:
-* InvertTree
-
-* Purpose:
-* Invert a tree of UnitNodes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* UnitNode *InvertTree( UnitNode *fwdnode, UnitNode *src )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function inverts a tree of UnitNodes. The supplied tree should
-* have exactly one OP_LDVAR node. This will be the quantity represented
-* by the node at the head of the returned tree.
-
-* Parameters:
-* fwdnode
-* A pointer to the UnitNode at the head of the tree which is to be
-* inverted.
-* src
-* A pointer to a UnitNode which is to be used as the root of the
-* inverted tree. That is, the output from this node should form
-* the (one and only) varying input to the inverted tree. If the
-* supplied tree is succesfulyl inverted, the tree of which "src"
-* is the head will be contained within the returned inverted tree.
-* Therefore "src" only needs to be freed explicitly if this
-* function fails to invert the supplied tree for any reason. If
-* this function succeeds, then "src" will be freed as part of
-* freeing the returned inverted tree.
-
-* Returned Value:
-* A pointer to a UnitNode which forms the head of the inverted tree.
-
-* Algorithm:
-* The algorithm works through the supplied forward tree, from the head
-* to the roots. First, the supplied node at the head of the forward
-* tree is inverted. To be invertable, the supplied head node must have
-* exactly one varying argument (any other arguments must be fixed,
-* i.e. not vary). This varying argument becomes the output of the
-* inverted node. The other (fixed) arguments to the forward node are
-* also used as arguments to the inverted node. The supplied "src" node
-* is used as the single varying input to the inverted node. Having
-* inverted the supplied forward head node, this function is called
-* recursively to invert the lower parts of the forward tree (i.e. the
-* part of the forward tree which provided the varying input to node
-* which has just been inverted).
-
-* Notes:
-* - It is assumed that he supplied forward tree has been simplified
-* using SimplifyTree. This means that the tree contains no nodes with
-* the following op codes: OP_LOG, OP_SQRT. OP_DIV (SimplifyTree
-* converts these nodes into OP_LN, OP_POW and OP_MULT nodes).
-* - A value of NULL will be returned if this function is invoked with
-* the global error status set, or if it should fail for any reason.
-
-*/
-
-/* Local Variables: */
- UnitNode *newnode;
- UnitNode *nextnode;
- UnitNode *result;
- UnitNode *node1;
- Oper fop;
- int varg;
-
-/* Initialise */
- result = NULL;
-
-/* Check inherited status. */
- if( !astOK ) return result;
-
-/* Initiallially, we have no replacement node */
- newnode = NULL;
- nextnode = NULL;
-
-/* Save the op code at the head of the forward tree. */
- fop = fwdnode->opcode;
-
-/* If the head of the forward tree is a OP_EXP node. Inverse of
- "exp(x)" is "ln(x)". */
- if( fop == OP_EXP ) {
- newnode = NewNode( NULL, OP_LN, status );
- if( astOK ) {
- newnode->arg[ 0 ] = src;
- nextnode = fwdnode->arg[ 0 ];
- }
-
-/* If the head of the forward tree is a OP_LN node. Inverse of
- "ln(x)" is "exp(x)". */
- } else if( fop == OP_LN ) {
- newnode = NewNode( NULL, OP_EXP, status );
- if( astOK ) {
- newnode->arg[ 0 ] = src;
- nextnode = fwdnode->arg[ 0 ];
- }
-
-/* If the head of the forward tree is a OP_POW node. Inverse of
- "x**k" is "x**(1/k)" */
- } else if( fop == OP_POW ) {
- newnode = NewNode( NULL, OP_POW, status );
- node1 = NewNode( NULL, OP_LDCON, status );
- if( astOK ) {
- node1->con = 1.0/fwdnode->arg[ 1 ]->con;
- newnode->arg[ 0 ] = src;
- newnode->arg[ 1 ] = node1;
- nextnode = fwdnode->arg[ 0 ];
- }
-
-/* If the head of the forward tree is a OP_MULT node... */
- } else if( fop == OP_MULT ) {
-
-/* The node is only invertable if it has one constant node and one
- non-constant node. Get the index of the varying argument. */
- if( fwdnode->arg[ 0 ]->con != AST__BAD &&
- fwdnode->arg[ 1 ]->con == AST__BAD ) {
- varg = 1;
- } else if( fwdnode->arg[ 0 ]->con == AST__BAD &&
- fwdnode->arg[ 1 ]->con != AST__BAD ) {
- varg = 0;
- } else {
- varg = -1;
- }
- if( varg != -1 ) {
-
-/* The inverse of "k*x" is "(1/k)*x" (we use MULT nodes instead of DIV
- nodes to maintain the standardisation implemented by SimplifyTree). */
- newnode = NewNode( NULL, OP_MULT, status );
- node1 = NewNode( NULL, OP_LDCON, status );
- if( astOK ) {
- node1->con = 1.0/fwdnode->arg[ 1 - varg ]->con;
- newnode->arg[ 0 ] = node1;
- newnode->arg[ 1 ] = src;
- nextnode = fwdnode->arg[ varg ];
- }
- }
-
-/* If the head of the forward tree is a OP_LDVAR node, there is nothing
- left to invert. SO return a pointer to the suppleid source node. */
- } else if( fop == OP_LDVAR ) {
- result = src;
- nextnode = NULL;
-
-/* If the head of the forward tree is any other node (e.g. a OP_LDCON node),
- the tree cannot be inverted. */
- } else {
- nextnode = NULL;
- }
-
-/* If we managed to invert the node at the head of the supplied tree,
- continue to invert its varying argument node (if any). */
- if( nextnode && newnode ) result = InvertTree( nextnode, newnode, status );
-
-/* If the tree could not be inverted, free the newnode. */
- if( !result ) newnode = FreeTree( newnode, status );
-
-/* If an error has occurred, free any new node. */
- if( !astOK ) result = FreeTree( result, status );
-
-/* Return the result. */
- return result;
-
-}
-
-static void LocateUnits( UnitNode *node, UnitNode ***units, int *nunits, int *status ){
-/*
-* Name:
-* LocateUnits
-
-* Purpose:
-* Locate the units used by a supplied tree of UnitNodes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* void LocateUnits( UnitNode *node, UnitNode ***units, int *nunits, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function locates the units used by a supplied tree of
-* UnitNodes.
-
-* Parameters:
-* node
-* A pointer to the UnitNode at the head of the tree to be searched.
-* units
-* The address at which is stored a pointer to an array of "*nunits"
-* elements. Each element of the array holds a pointer to a UnitNode.
-* The array is extended on exit to hold pointers to the OP_LDVAR nodes
-* within the supplied tree (i.e. nodes which represent named units,
-* either known or unknown). A node is only included in the returned
-* array if no other node for the same unit is already included in the
-* array. A NULL pointer should be supplied on the first invocation of
-* this function.
-* nunits
-* The address of an integer which holds the number of elements in
-* the array given by "*units". Updated on exit to included any
-* elements added to the array. Zero should be supplied on the first
-* invocation of this function.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- int i;
- int found;
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Is the node at the head of the supplied tree an OP_LDVAR node? */
- if( node->opcode == OP_LDVAR ) {
-
-/* If an array was supplied, see if it already contains a pointer to a node
- which refers to the same units. */
- found = 0;
- if( *units ) {
- for( i = 0; i < *nunits; i++ ) {
- if( !strcmp( (*units)[ i ]->name, node->name ) ) {
- found = 1;
- break;
- }
- }
- }
-
-/* If not, ensure the array is big enough and add a pointer to the
- supplied node to the array. */
- if( !found ) {
- *units = astGrow( *units, *nunits + 1, sizeof( UnitNode * ) );
- if( astOK ) (*units)[ (*nunits)++ ] = node;
- }
-
-/* If the supplied node is not an OP_LDVAR node, call this function
- recursively to search the argument sub-trees. */
- } else {
- for( i = 0; i < node->narg; i++ ) {
- LocateUnits( node->arg[ i ], units, nunits, status );
- }
- }
-}
-
-static const char *MakeExp( UnitNode *tree, int mathmap, int top, int *status ) {
-/*
-* Name:
-* MakeExp
-
-* Purpose:
-* Make an algebraic expression from a supplied tree of UnitNodes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* const char *MakeExp( UnitNode *tree, int mathmap, int top, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function produces a string holding an algebraic expression
-* corresponding to a supplied tree of UnitNodes.
-
-* Parameters:
-* tree
-* A pointer to the UnitNode at the head of the tree to be converted
-* into an algebraic expression.
-* mathmap
-* If zero, format as an axis label expression. If 1, format as a
-* MathMap expression. If 2, format as a FITS unit string.
-* top
-* Should be non-zero for a top-level entry to this function, and
-* zero for a recursive entry.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the cleaned expression, which should be freed using
-* astFree when no longer needed.
-
-* Notes:
-* - This function returns NULL if it is invoked with the global error
-* status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- UnitNode *newtree;
- UnitNode *sunit;
- char *a;
- char *result;
- char buff[200];
- const char *arg0;
- const char *arg1;
- const char *mtxt;
- int larg0;
- int larg1;
- int lbuff;
- int mlen;
- int par;
- int tlen;
-
-/* Check inherited status. */
- result = NULL;
- if( !astOK ) return result;
-
-/* Modify the tree to make the resulting transformation functions more
- natural to human readers. */
- newtree = CopyTree( tree, status );
- ComplicateTree( &newtree, status );
-
-/* If we are producing an axis label... */
- if( !mathmap ) {
-
-/* Fix all multiplicative constants to 1.0 if they multiply an OP_LDVAR
- OP_SQRT or OP_POW node. This is on the assumption that the returned label
- should not include any simple unit scaling (e.g. if the output label would
- be "2.345*wavelength", we prefer simply to use "wavelength" since a scaled
- wavelength is still a wavelength - i.e. simple scaling does not change
- the dimensions of a quantity). */
- FixConstants( &newtree, 1, status );
-
-/* Simplify the tree again to get rid of the 1.0 terms which may have
- been introduced by the previous line (but do not re-introduce any
- standardisations - removing them was the reason for calling ComplicateTree).
- If this simplication introduces any changes, try fixing multiplicative
- constants again, and so on, until no more changes occur. */
- while( SimplifyTree( &newtree, 0, status ) ) {
- FixConstants( &newtree, 1, status );
- }
-
- }
-
-/* Produce a string describing the action performed by the UnitNode at
- the head of the supplied tree, and then invoke this function recursively
- to format any arguments of the head node. */
-
-/* Constant valued nodes... just format the constant in a local buffer and
- then copy the buffer. */
- if( newtree->con != AST__BAD ) {
- lbuff = sprintf( buff, "%.*g", DBL_DIG, newtree->con );
- result = astStore( NULL, buff, lbuff + 1 );
-
-/* "Load Variable Value" nodes - return the variable name. If this is a
- recursive call to this function, and we are producing a label, append a
- single space before and after the name. */
- } else if( newtree->opcode == OP_LDVAR ) {
- tlen = strlen( newtree->name );
-
- if( !mathmap && !top ){
- result = astMalloc( tlen + 3 );
- if( result ) {
- result[ 0 ] = ' ';
- memcpy( result + 1, newtree->name, tlen );
- memcpy( result + tlen + 1, " ", 2 );
- }
-
- } else if( mathmap == 2 ) {
-
- if( newtree->mult ) {
- mlen = newtree->mult->symlen;
- mtxt = newtree->mult->sym;
- } else {
- mlen = 0;
- mtxt = NULL;
- }
-
- result = astMalloc( tlen + 1 + mlen );
- if( result ) {
- if( mtxt ) memcpy( result, mtxt, mlen );
- memcpy( result + mlen, newtree->name, tlen + 1 );
- }
-
- } else {
- result = astStore( NULL, newtree->name, tlen + 1 );
- }
-
-/* Single argument functions... place the argument in parentheses after
- the function name. */
- } else if( newtree->opcode == OP_LOG ) {
- arg0 = MakeExp( newtree->arg[ 0 ], mathmap, 0, status );
- larg0 = strlen( arg0 );
- if( mathmap == 1 ) {
- result = astMalloc( larg0 + 8 );
- if( result ) memcpy( result, "log10(", 7 );
- a = result + 6;
- } else {
- result = astMalloc( larg0 + 6 );
- if( result ) memcpy( result, "log(", 5 );
- a = result + 4;
- }
- if( result ){
- memcpy( a, arg0, larg0 + 1 );
- memcpy( a + larg0, ")", 2 );
- }
- arg0 = astFree( (void *) arg0 );
-
- } else if( newtree->opcode == OP_LN ) {
- arg0 = MakeExp( newtree->arg[ 0 ], mathmap, 0, status );
- larg0 = strlen( arg0 );
- if( mathmap == 1 ) {
- result = astMalloc( larg0 + 6 );
- if( result ) memcpy( result, "log(", 5 );
- a = result + 4;
- } else {
- result = astMalloc( larg0 + 5 );
- if( result ) memcpy( result, "ln(", 4 );
- a = result + 3;
- }
- if( astOK ){
- memcpy( a, arg0, larg0 );
- memcpy( a + larg0, ")", 2 );
- }
- arg0 = astFree( (void *) arg0 );
-
- } else if( newtree->opcode == OP_EXP ) {
- arg0 = MakeExp( newtree->arg[ 0 ], mathmap, 0, status );
- larg0 = strlen( arg0 );
- result = astMalloc( larg0 + 6 );
- if( result ){
- memcpy( result, "exp(", 5 );
- memcpy( result + 4, arg0, larg0 );
- memcpy( result + 4 + larg0, ")", 2 );
- }
- arg0 = astFree( (void *) arg0 );
-
- } else if( newtree->opcode == OP_SQRT ) {
- arg0 = MakeExp( newtree->arg[ 0 ], mathmap, 0, status );
- larg0 = strlen( arg0 );
- result = astMalloc( larg0 + 7 );
- if( result ){
- memcpy( result, "sqrt(", 6 );
- memcpy( result + 5, arg0, larg0 );
- memcpy( result + 5 + larg0, ")", 2 );
- }
- arg0 = astFree( (void *) arg0 );
-
-/* POW... the exponent (arg[1]) is always a constant and so does not need
- to be placed in parentheses. The first argument only needs to be
- placed in parentheses if it is a two arg node (except we also put it
- in parentheses if it is an OP_LDVAR node and "mathmap" is zero - this is
- because such OP_LDVAR nodes will correspond to axis labels which will
- have spaces before and after them which would look odd if not encloses
- in parentheses). */
- } else if( newtree->opcode == OP_POW ) {
-
- arg0 = MakeExp( newtree->arg[ 0 ], mathmap, 0, status );
- larg0 = strlen( arg0 );
-
- arg1 = MakeExp( newtree->arg[ 1 ], mathmap, 0, status );
- larg1 = strlen( arg1 );
-
- if( newtree->arg[ 0 ]->narg == 2 ||
- (newtree->arg[ 0 ]->opcode == OP_LDVAR && !mathmap) ) {
- par = 1;
- result = astMalloc( larg0 + larg1 + 7 );
- if( result ) memcpy( result, "(", 2 );
- a = result + 1;
- } else {
- par = 0;
- result = astMalloc( larg0 + larg1 + 5 );
- a = result;
- }
-
- if( result ) {
- memcpy( a, arg0, larg0 );
- a += larg0;
- if( par ) *(a++) = ')';
- memcpy( a, "**", 3 );
- a += 2;
- memcpy( a, arg1, larg1 );
- a += larg1;
- *a = 0;
- }
-
- arg0 = astFree( (void *) arg0 );
- arg1 = astFree( (void *) arg1 );
-
-/* DIV... the first argument (numerator) never needs to be in parentheses.
- The second argument (denominator) only needs to be placed in parentheses
- if it is a MULT node. */
- } else if( newtree->opcode == OP_DIV ) {
-
- if( mathmap == 2 && ( sunit = ModifyPrefix( newtree, status ) ) ) {
- result = (char *) MakeExp( sunit, mathmap, 0, status );
- sunit = FreeTree( sunit, status );
-
- } else {
- arg0 = MakeExp( newtree->arg[ 0 ], mathmap, 0, status );
- larg0 = strlen( arg0 );
-
- arg1 = MakeExp( newtree->arg[ 1 ], mathmap, 0, status );
- larg1 = strlen( arg1 );
-
- if( newtree->arg[ 1 ]->opcode == OP_MULT &&
- strchr( arg1, '*' ) ) {
- par = 1;
- result = astMalloc( larg0 + larg1 + 4 );
- } else {
- par = 0;
- result = astMalloc( larg0 + larg1 + 2 );
- }
-
- if( result ) {
- memcpy( result, arg0, larg0 );
- a = result + larg0;
- *(a++) = '/';
- if( par ) *(a++) = '(';
- memcpy( a, arg1, larg1 );
- a += larg1;
- if( par ) *(a++) = ')';
- *a = 0;
- }
-
- arg0 = astFree( (void *) arg0 );
- arg1 = astFree( (void *) arg1 );
- }
-
-/* MULT... the second argument never needs to be in parentheses. The first
- argument only needs to be placed in parentheses if it is a DIV or POW
- node. */
- } else if( newtree->opcode == OP_MULT ) {
- if( mathmap == 2 && ( sunit = ModifyPrefix( newtree, status ) ) ) {
- result = (char *) MakeExp( sunit, mathmap, 0, status );
- sunit = FreeTree( sunit, status );
-
- } else {
- arg0 = MakeExp( newtree->arg[ 0 ], mathmap, 0, status );
- larg0 = strlen( arg0 );
-
- arg1 = MakeExp( newtree->arg[ 1 ], mathmap, 0, status );
- larg1 = strlen( arg1 );
-
-/* If this is a top-level entry and we are producing an axis label, do
- not include any constant multiplicative terms. */
- if( top && !mathmap ) {
- if( newtree->arg[ 0 ]->con != AST__BAD ) arg0 = astFree( (void *) arg0 );
- if( newtree->arg[ 1 ]->con != AST__BAD ) arg1 = astFree( (void *) arg1 );
- }
-
-/* If we have two arguments, concatentate them, placing the operands in
- parentheses if necessary. */
- if( arg0 && arg1 ) {
-
- if( ( newtree->arg[ 0 ]->opcode == OP_DIV &&
- strchr( arg0, '/' ) ) ||
- ( newtree->arg[ 0 ]->opcode == OP_POW &&
- strstr( arg0, "**" ) ) ) {
- par = 1;
- result = astMalloc( larg0 + larg1 + 4 );
- if( result ) result[ 0 ] = '(';
- a = result + 1;
- } else {
- par = 0;
- result = astMalloc( larg0 + larg1 + 2 );
- a = result;
- }
-
- if( result ) {
- memcpy( a, arg0, larg0 );
- a += larg0;
- if( par ) *(a++) = ')';
- *(a++) = '*';
- memcpy( a, arg1, larg1 );
- a += larg1;
- *a = 0;
- }
-
- arg0 = astFree( (void *) arg0 );
- arg1 = astFree( (void *) arg1 );
-
-/* If we do not have two arguments, just return the one we do have. */
- } else if( arg0 ){
- result = (char *) arg0;
-
- } else {
- result = (char *) arg1;
- }
- }
- }
-
-/* Free the complicated tree. */
- newtree = FreeTree( newtree, status );
-
-/* Free the returned string if an error has occurred. */
- if( !astOK ) result = astFree( result );
-
-/* Return the result. */
- return (const char *) result;
-}
-
-static void MakeKnownUnit( const char *sym, const char *label, const char *exp, int *status ){
-/*
-* Name:
-* MakeKnownUnit
-
-* Purpose:
-* Create a KnownUnit structure describing a known unit.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* void MakeKnownUnit( const char *sym, const char *label, const char *exp, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function creates a KnownUnit structure decribing a known unit,
-* and adds it to the head of the linked list of known units stored in
-* a module variable.
-
-* Parameters:
-* sym
-* A pointer to a string which can be used as a symbol to represent
-* the new named unit. Once defined, this symbol can be included within
-* the definition of other derived units. The string should contain
-* only alphabetical characters (no digits, spaces, punctuation,
-* etc). Symbols are case sensitive (e.g. "s" is second, but "S" is
-* Siemens). The string should not include any multiplier prefix.
-* label
-* Pointer to a null terminated string containing the label for
-* the required units. No restriction on content.
-* exp
-* This should be a pointer to a null terminated string containing
-* a definition of the required unit. See the description of the
-* "in" and "out" parameters for the astUnitMapper function.
-*
-* A NULL pointer or a blank string may supplied for "exp", which
-* is interpreted as a request for a new basic unit to be created with
-* the symbol and label given by the other parameters.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The supplied symbol and label strings are not copied. The
-* supplied pointers are simply stored in the returned structure.
-* Therefore the strings to which the pointers point should not be
-* modified after this function returned (in fact this function is
-* always called with literal strings for these arguments).
-*/
-
-/* Local Variables: */
- KnownUnit *result;
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Indicate that subsequent memory allocations may never be freed (other
- than by any AST exit handler). */
- astBeginPM;
-
-/* Allocate memory for the structure, and check the returned pointer can
- be used safely. */
- result = astMalloc( sizeof( KnownUnit ) );
- if( astOK ) {
-
-/* In case of errors, first nullify the pointer to the next KnownUnit. */
- result->next = NULL;
-
-/* Store the supplied label and symbol pointers. */
- result->sym = sym;
- result->label = label;
-
-/* Store the length of the symbol (without the trailing null character). */
- result->symlen = strlen( sym );
-
-/* Store the length of the label (without the trailing null character). */
- result->lablen = strlen( label );
-
-/* Create a tree of UnitNodes describing the unit if an expression was
- supplied. */
- result->head = exp ? CreateTree( exp, 1, 0, status ) : NULL;
-
-/* Unit aliases are replaced in use by the KnownUnit pointed to by the
- "use" component of the structure. Indicate this KnownUnitis not an
- alias by setting its "use" component NULL. */
- result->use = NULL;
- }
-
-/* Mark the end of the section in which memory allocations may never be
- freed (other than by any AST exit handler). */
- astEndPM;
-
-/* If an error has occurred, free any returned structure. */
- if( !astOK ) {
- result->head = FreeTree( result->head, status );
- result = astFree( result ) ;
-
-/* Otherwise, add the new KnownUnit to the head of the linked list of
- known units. */
- } else {
- result->next = known_units;
- known_units = result;
- }
-
-}
-
-static AstMapping *MakeMapping( UnitNode *tree, int *status ) {
-/*
-* Name:
-* MakeMapping
-
-* Purpose:
-* Create a new Mapping from a given tree of UnitNodes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* AstMapping *MakeMapping( UnitNode *tree )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function creates a Mapping with a forward transformation equal
-* to the transformation described by the tree of UnitNodes. The head
-* node of the tree corresponds to the output of the Mapping.
-
-* Parameters:
-* tree
-* The UnitNode at the head of the tree to be used. It should have
-* exactly one OP_LDVAR node, and should have been simplified using
-* the SimplifyTree function.
-
-* Returned Value:
-* A pointer to the Mapping. Its Nin and Nout attributes will both be 1.
-
-* Notes:
-* - A value of NULL will be returned if this function is invoked with
-* the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstMapping *result;
- UnitNode *inv;
- UnitNode *src;
- const char *fwdexp;
- char *fwdfun;
- const char *invexp;
- char *invfun;
- int lfwd;
- int linv;
-
-/* Initialise. */
- result = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return result;
-
-/* First see if a UnitMap can be used to represent the Mapping from
- input units to output units. This will be the case if the supplied tree
- consists of a aingle OP_LDVAR node (corresponding to the input units). */
- if( tree->opcode == OP_LDVAR ) {
- result = (AstMapping *) astUnitMap( 1, "", status );
-
-/* Now see if a UnitMap or ZoomMap can be used to represent the Mapping from
- input units to output units. This will be the case if the supplied tree
- consists of a OP_MULT node with one constant argument and on OP_LDVAR
- argument (corresponding to the input units). The standardisation done by
- SimplifyTree will have ensured that the constant will be argument 0
- (and will also have converted "x/k" trees into "(1/k)*x" trees). */
- } else if( tree->opcode == OP_MULT &&
- tree->arg[ 0 ]->con != AST__BAD &&
- tree->arg[ 1 ]->opcode == OP_LDVAR ) {
-
- if( tree->arg[ 0 ]->con == 1.0 ) {
- result = (AstMapping *) astUnitMap( 1, "", status );
- } else {
- result = (AstMapping *) astZoomMap( 1, tree->arg[ 0 ]->con, "", status );
- }
-
-/* For other trees we need to create a MathMap. */
- } else {
-
-/* Format the supplied tree as an algebraic expression, and get its length. */
- fwdexp = MakeExp( tree, 1, 1, status );
- lfwd = strlen( fwdexp );
-
-/* The MathMap constructor requires the forward and inverse
- transformation functions to be specified as equations (i.e. including an
- equals sign). We use the output variable name "output_units" (the
- astUnitMapper function creates the supplied tree usign the variable
- name "input_units" ). */
- lfwd += 13;
-
-/* Invert the supplied tree and create an algebraic expression from it. */
- src = NewNode( NULL, OP_LDVAR, status );
- if( astOK ) src->name = astStore( NULL, "output_units", 13 );
- inv = InvertTree( tree, src, status );
- if( !inv ) {
- src = FreeTree( src, status );
- astError( AST__BADUN, "MakeMapping(Unit): Failed to invert "
- "supplied tree '%s' (internal AST programming error).", status,
- fwdexp );
-
-/* If inverted succesfully (which it should be since astUnitMapper should
- have checked this)... */
- } else {
-
-/* Format the inverted tree as an algebraic expression, and get its
- length, adding on extra characters for the variable name ("input_units")
- and equals sign. */
- invexp = MakeExp( inv, 1, 1, status );
- linv = strlen( invexp );
- linv += 12;
-
-/* Allocate memory for the transformation functions, plus an extra
- character for the trailing null. */
- fwdfun = astMalloc( lfwd + 1 );
- invfun = astMalloc( linv + 1 );
- if( invfun ) {
- memcpy( fwdfun, "output_units=", 14 );
- memcpy( invfun, "input_units=", 13 );
-
-/* Append the expressions following the equals signs. */
- strcpy( fwdfun + 13, fwdexp );
- strcpy( invfun + 12, invexp );
-
-/* Create the MathMap. */
- result = (AstMapping *) astMathMap( 1, 1, 1,
- (const char **) &fwdfun, 1,
- (const char **) &invfun,
- "SimpFI=1,SimpIF=1", status );
- }
-
-/* Free resources. */
- inv = FreeTree( inv, status );
- fwdfun = astFree( fwdfun );
- invfun = astFree( invfun );
- invexp = astFree( (void *) invexp );
- }
- fwdexp = astFree( (void *) fwdexp );
- }
-
-/* Free any result if an error occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the answer. */
- return result;
-}
-
-static UnitNode *MakeLabelTree( const char *lab, int nc, int *status ){
-/*
-* Name:
-* MakeLabelTree
-
-* Purpose:
-* Convert an axis label into a tree of UnitNodes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* UnitNode *MakeLabelTree( const char *lab, int nc, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function converts an axis label into a tree of UnitNodes.
-* It is assumed the supplied label represents some "basic" label
-* modified by the application of one or more single function arguments
-* and/or exponentiation operators. The (single) OP_LDVAR node in the
-* returned tree refers to the basic label (it is stored as the "name"
-* component of UnitNode structure).
-
-* Parameters:
-* lab
-* The label expression.
-* nc
-* The number of characters from "lab" to use.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a UnitNode which forms the head of a tree of UnitNodes
-* representing the supplied label expression.
-
-* Notes:
-* - A NULL value is returned if this function is invoked with the
-* global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- Oper op;
- UnitNode *result;
- char buff[ 10 ];
- const char *c;
- const char *exp;
- int depth;
- int i;
- int oplen;
- int n;
- double con;
-
-/* Initialise */
- result = NULL;
- oplen = 0;
-
-/* Check the global error status, and that we have a string. */
- if ( !astOK || !lab || !nc ) return result;
-
-/* Get a pointer to the first non-blank character, and store the number of
- characters to examine (this excludes any trailing white space). */
- exp = lab;
- while( isspace( *exp ) ) exp++;
- c = lab + nc - 1;
- while( c >= exp && isspace( *c ) ) c--;
- nc = c - exp + 1;
-
-/* Scan through the supplied string looking for the first pow operator at
- zero depth of nesting within parentheses. */
- depth = 0;
- c = exp;
- i = 0;
- op = OP_NULL;
- while( i < nc && *c ){
-
-/* If this character is an opening parenthesis, increment the depth of
- nesting. */
- if( *c == '(' ) {
- depth++;
-
-/* If this character is an closing parenthesis, decrement the depth of
- nesting. Report an error if it ever goes negative. */
- } else if( *c == ')' ) {
- depth--;
- if( depth < 0 && astOK ) {
- astError( AST__BADUN, "Missing opening parenthesis." , status);
- break;
- }
-
-/* Ignore all other characters unless they are at zero depth of nesting.
- Also ignore spaces. */
- } else if( depth == 0 && !isspace( *c ) ) {
-
-/* Compare the next part of the string with each of the "pow" operators. */
- if( !strncmp( c, "**", 2 ) ) {
- op = OP_POW;
- oplen = 2;
- } else if( *c == '^' ) {
- op = OP_POW;
- oplen = 1;
- }
-
-/* If an operator was found, break out of the loop. */
- if( op != OP_NULL ) break;
- }
-
-/* Pass on to check the next character. */
- i++;
- c++;
- }
-
-/* If a "pow" operator was found, the strings on either side of it should be
- valid unit expressions, in which case we use this routine recursively to
- create corresponding trees of UnitNodes. */
- if( op != OP_NULL ) {
-
-/* Create a UnitNode for the operator. */
- result = NewNode( NULL, op, status );
- if( astOK ) {
-
-/* Create a tree of unit nodes from the string which preceeds the binary
- operator. Report an error if it cannot be done. */
- result->arg[ 0 ] = MakeLabelTree( exp, i, status );
- if( !result->arg[ 0 ] && astOK ) {
- for( i = 0; i < oplen; i++ ) buff[ i ] = c[ i ];
- buff[ oplen ] = 0;
- astError( AST__BADUN, "Missing operand before '%s'.", status, buff );
- }
-
-/* Create a tree of unit nodes from the string which follows the binary
- operator. Report an error if it cannot be done. */
- result->arg[ 1 ] = MakeLabelTree( c + oplen, nc - i - oplen, status );
- if( !result->arg[ 1 ] && astOK ) {
- for( i = 0; i < oplen; i++ ) buff[ i ] = c[ i ];
- buff[ oplen ] = 0;
- astError( AST__BADUN, "Missing operand after '%s'.", status, buff );
- }
- }
-
-/* If no binary operator was found at depth zero, see if the supplied string
- starts with a function name (the only legal place for a function name
- given that the string has no binary operators at depth zero). */
- } else {
- if( !strncmp( exp, "sqrt(", 5 ) || !strncmp( exp, "SQRT(", 5 ) ) {
- op = OP_SQRT;
- oplen = 4;
- } else if( !strncmp( exp, "exp(", 4 ) || !strncmp( exp, "EXP(", 4 ) ) {
- op = OP_EXP;
- oplen = 3;
- } else if( !strncmp( exp, "ln(", 3 ) || !strncmp( exp, "LN(", 3 ) ) {
- op = OP_LN;
- oplen = 2;
- } else if( !strncmp( exp, "log(", 4 ) || !strncmp( exp, "LOG(", 4 ) ) {
- op = OP_LOG;
- oplen = 3;
- }
-
-/* If a function was found, the string following the function name
- (including the opening parenthesis) should form a legal units
- expresssion (all the supported functions take a single argument and
- so we do not need to worry about comma-separated lists of function
- arguments). Use this routine recursively to create a tree of UnitNodes
- from the string which forms the function argument. */
- if( op != OP_NULL ) {
-
-/* Create a UnitNode for the function. */
- result = NewNode( NULL, op, status );
- if( astOK ) {
-
-/* Create a tree of unit nodes from the string which follows the function
- name. Report an error if it cannot be done. */
- result->arg[ 0 ] = MakeLabelTree( exp + oplen, nc - oplen, status );
- if( !result->arg[ 0 ] && astOK ) {
- for( i = 0; i < oplen; i++ ) buff[ i ] = c[ i ];
- buff[ oplen ] = 0;
- astError( AST__BADUN, "Missing argument for '%s'.", status, buff );
- }
- }
-
-/* Arrive here if the supplied string does not contain a POW operator
- or function at depth zero. Check to see if the whole string is contained
- within parentheses, In which we interpret the contents of the
- parentheses as a units expression. It is safe simply to check the
- first and last characters (a string like "(fred)(Harry)" is not a
- legal possibility since there should be an operator in the middle).*/
- } else if( nc > 0 && ( exp[ 0 ] == '(' && exp[ nc - 1 ] == ')' ) ) {
- result = MakeLabelTree( exp + 1, nc - 2, status );
-
-/* Does the string begin with a numerical constant? */
- } else if( ConStart( exp, &con, &n, status ) == 1 ) {
-
-/* If the entire string was a numerical constant, represent it by a LDCON
- node. */
- if( n == nc ) {
- result = NewNode( NULL, OP_LDCON, status );
- if( astOK ) result->con = con;
-
-/* If there was anything following the numerical constant, report an
- error. */
- } else if( astOK ){
- astError( AST__BADUN, "Missing operator after "
- "numerical string '%.*s'.", status, n, exp );
- }
-
-/* The only legal possibility left is that the string represents the basic
- label. Create an OP_LDVAR node for it and store the basic label as
- the node name, omitting any enclosing white space. */
- } else {
- result = NewNode( NULL, OP_LDVAR, status );
- if( astOK ) {
- result->name = astStore( NULL, exp, nc + 1 );
- if( astOK ) ( (char *) result->name)[ nc ] = 0;
- }
- }
- }
-
-/* Free any returned tree if an error has occurred. */
- if( !astOK ) result = FreeTree( result, status );
-
-/* Return the result. */
- return result;
-}
-
-static UnitNode *MakeTree( const char *exp, int nc, int lock, int *status ){
-/*
-* Name:
-* MakeTree
-
-* Purpose:
-* Convert an algebraic units expression into a tree of UnitNodes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* UnitNode *MakeTree( const char *exp, int nc, int lock, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function converts an algebraic units expression into a tree of
-* UnitNodes. It is a service routine for CreateTree. The roots of the
-* returned tree (i.e. the LDVAR nodes) refer to the unit symbols
-* contained within the supplied expression (i.e. definitions of these
-* units are not grafted onto the tree in place of the original nodes,
-* as is done by CreateTree).
-
-* Parameters:
-* exp
-* The units expression. This should not include any leading or
-* trailing spaces.
-* nc
-* The number of characters from "exp" to use.
-* lock
-* Use a mutex to guard access to the KnownUnits list?
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a UnitNode which forms the head of a tree of UnitNodes
-* representing the supplied unit expression.
-
-* Notes:
-* - A NULL value is returned if this function is invoked with the
-* global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- KnownUnit *munit;
- KnownUnit *unit;
- Multiplier *mmult;
- Multiplier *mult;
- Oper op;
- UnitNode *result;
- char buff[ 10 ];
- char d;
- const char *c;
- double con;
- int depth;
- int i;
- int l;
- int maxlen;
- int n;
- int oplen;
- int plural;
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status, and that we have a string. */
- if ( !astOK || !exp || nc <= 0 ) return result;
-
-/* Scan through the supplied string from the end to the start looking for
- the last multiplication or division operator at zero depth of nesting
- within parentheses. We go backwards through the string in order to
- give the correct priority to multiple division operators (i.e. "a/b/c"
- needs to be interpreted as "(a/b)/c", not "a/(b/c)"). */
- op = OP_NULL;
- oplen = 1;
- depth = 0;
- c = exp + nc - 1;
- i = nc - 1;
- while( i >= 0 ){
-
-/* If this character is an opening parenthesis, decrement the depth of
- nesting. Report an error if it ever goes negative. */
- if( *c == '(' ) {
- depth--;
- if( depth < 0 && astOK ) {
- astError( AST__BADUN, "Missing closing parenthesis." , status);
- break;
- }
-
-/* An opening parenthesis at level zero must always be either the first
- character in the string, or be preceeded by the name of a function, or
- be preceeded by an operator. If none of these are true, assume there is
- an implicit multiplication operator before the parenthesis. */
- if( depth == 0 && i > 0 ) {
- d = *( c - 1 );
- if( d != '*' && d != '/' && d != '^' && d != '.' && d != ' ' &&
- !EndsWith( c, i + 1, "sqrt(", status ) && !EndsWith( c, i + 1, "exp(", status ) &&
- !EndsWith( c, i + 1, "ln(", status ) && !EndsWith( c, i + 1, "log(", status ) ) {
- op = OP_MULT;
- oplen = 0;
- break;
- }
- }
-
-/* If this character is an closing parenthesis, increment the depth of
- nesting. */
- } else if( *c == ')' ) {
- depth++;
-
-/* A closing parenthesis at level zero must always be either the last
- character in the string, or be followed by an operator. If neither of
- these are true, assume there is an implicit multiplication operator. */
- if( depth == 1 && i < nc - 1 ) {
- d = *(c+1);
- if( d != '*' && d != '/' && d != '^' && d != '.' && d != ' ') {
- op = OP_MULT;
- oplen = 0;
-
-/* Correct "i" so that it gives the length of the left hand operand of
- the implicit MULT operator, correct "c" so that it points to the first
- character in the right hand operand, and leave the loop. */
- i++;
- c++;
- break;
- }
- }
-
-/* Ignore all other characters unless they are at zero depth of nesting. */
- } else if( depth == 0 ) {
-
-/* Compare the next part of the string with each of the multiplication
- and division operators. */
- if( *c == '/' ) {
- op = OP_DIV;
-
- } else if( *c == ' ' ) {
- op = OP_MULT;
-
-/* An asterisk is only treated as a multiplication symbol if it does not occur
- before or after another asterisk. */
- } else if( *c == '*' ) {
- if( c == exp ) {
- if( *(c+1) != '*' ) op = OP_MULT;
- } else if( i == nc - 1 ) {
- if( *(c-1) != '*' ) op = OP_MULT;
- } else {
- if( *(c+1) != '*' && *(c-1) != '*' ) op = OP_MULT;
- }
-
-/* A dot is only treated as a multiplication symbol if it does not occur
- between two digits. */
- } else if( *c == '.' ) {
- if( ( c == exp || !isdigit( *(c-1) ) ) &&
- ( i == nc - 1 || !isdigit( *(c+1) ) ) ) {
- op = OP_MULT;
- }
- }
- }
-
-/* If an operator was found, break out of the loop. */
- if( op != OP_NULL ) break;
-
-/* Pass on to check the next character. */
- i--;
- c--;
- }
-
-/* If a multiplication or division operator was found, the strings on either
- side of it should be valid unit expressions, in which case we use this
- routine recursively to create corresponding trees of UnitNodes. */
- if( op != OP_NULL ) {
-
-/* Create a UnitNode for the binary operator. */
- result = NewNode( NULL, op, status );
- if( astOK ) {
-
-/* Create a tree of unit nodes from the string which preceeds the binary
- operator. Report an error if it cannot be done. */
- result->arg[ 0 ] = MakeTree( exp, i, lock, status );
- if( !result->arg[ 0 ] && astOK ) {
- for( i = 0; i < oplen; i++ ) buff[ i ] = c[ i ];
- buff[ oplen ] = 0;
- astError( AST__BADUN, "Missing operand before '%s'.", status, buff );
- }
-
-/* Create a tree of unit nodes from the string which follows the binary
- operator. Report an error if it cannot be done. */
- result->arg[ 1 ] = MakeTree( c + oplen, nc - i - oplen, lock, status );
- if( !result->arg[ 1 ] && astOK ) {
- for( i = 0; i < oplen; i++ ) buff[ i ] = c[ i ];
- buff[ oplen ] = 0;
- astError( AST__BADUN, "Missing operand after '%s'.", status, buff );
- }
- }
-
-/* If no multiplication or division operator was found at depth zero, check
- that the final depth of nesting was zero. Report an error if not. */
- } else if( depth > 0 && astOK ) {
- astError( AST__BADUN, "Missing opening parenthesis." , status);
-
-/* Otherwise check for a "Pow" operator at depth zero. */
- } else {
-
-/* Scan through the supplied string looking for the first pow operator at
- zero depth of nesting within parentheses. */
- depth = 0;
- c = exp;
- i = 0;
- while( i < nc && *c ){
-
-/* If this character is an opening parenthesis, increment the depth of
- nesting. */
- if( *c == '(' ) {
- depth++;
-
-/* If this character is an closing parenthesis, decrement the depth of
- nesting. Report an error if it ever goes negative. */
- } else if( *c == ')' ) {
- depth--;
- if( depth < 0 && astOK ) {
- astError( AST__BADUN, "Missing opening parenthesis." , status);
- break;
- }
-
-/* Ignore all other characters unless they are at zero depth of nesting. */
- } else if( depth == 0 ) {
-
-/* Compare the next part of the string with each of the "pow" operators. */
- if( !strncmp( c, "**", 2 ) ) {
- op = OP_POW;
- oplen = 2;
- } else if( *c == '^' ) {
- op = OP_POW;
- oplen = 1;
- }
-
-/* If an operator was found, break out of the loop. */
- if( op != OP_NULL ) break;
- }
-
-/* Pass on to check the next character. */
- i++;
- c++;
- }
-
-/* If a "pow" operator was found, the strings on either side of it should be
- valid unit expressions, in which case we use this routine recursively to
- create corresponding trees of UnitNodes. */
- if( op != OP_NULL ) {
-
-/* Create a UnitNode for the operator. */
- result = NewNode( NULL, op, status );
- if( astOK ) {
-
-/* Create a tree of unit nodes from the string which preceeds the binary
- operator. Report an error if it cannot be done. */
- result->arg[ 0 ] = MakeTree( exp, i, lock, status );
- if( !result->arg[ 0 ] && astOK ) {
- for( i = 0; i < oplen; i++ ) buff[ i ] = c[ i ];
- buff[ oplen ] = 0;
- astError( AST__BADUN, "Missing operand before '%s'.", status, buff );
- }
-
-/* Create a tree of unit nodes from the string which follows the binary
- operator. Report an error if it cannot be done. */
- result->arg[ 1 ] = MakeTree( c + oplen, nc - i - oplen, lock, status );
- if( !result->arg[ 1 ] && astOK ) {
- for( i = 0; i < oplen; i++ ) buff[ i ] = c[ i ];
- buff[ oplen ] = 0;
- astError( AST__BADUN, "Missing operand after '%s'.", status, buff );
- }
- }
-
-/* If no binary operator was found at depth zero, see if the supplied string
- starts with a function name (the only legal place for a function name
- given that the string has no binary operators at depth zero). */
- } else {
- if( !strncmp( exp, "sqrt(", 5 ) || !strncmp( exp, "SQRT(", 5 ) ) {
- op = OP_SQRT;
- oplen = 4;
- } else if( !strncmp( exp, "exp(", 4 ) || !strncmp( exp, "EXP(", 4 ) ) {
- op = OP_EXP;
- oplen = 3;
- } else if( !strncmp( exp, "ln(", 3 ) || !strncmp( exp, "LN(", 3 ) ) {
- op = OP_LN;
- oplen = 2;
- } else if( !strncmp( exp, "log(", 4 ) || !strncmp( exp, "LOG(", 4 ) ) {
- op = OP_LOG;
- oplen = 3;
- }
-
-/* If a function was found, the string following the function name
- (including the opening parenthesis) should form a legal units
- expresssion (all the supported functions take a single argument and
- so we do not need to worry about comma-separated lists of function
- arguments). Use this routine recursively to create a tree of UnitNodes
- from the string which forms the function argument. */
- if( op != OP_NULL ) {
-
-/* Create a UnitNode for the function. */
- result = NewNode( NULL, op, status );
- if( astOK ) {
-
-/* Create a tree of unit nodes from the string which follows the function
- name. Report an error if it cannot be done. */
- result->arg[ 0 ] = MakeTree( exp + oplen, nc - oplen, lock, status );
- if( !result->arg[ 0 ] && astOK ) {
- for( i = 0; i < oplen; i++ ) buff[ i ] = c[ i ];
- buff[ oplen ] = 0;
- astError( AST__BADUN, "Missing argument for '%s'.", status, buff );
- }
- }
-
-/* Arrive here if the supplied string does not contain a binary operator
- or function at depth zero. Check to see if the whole string is contained
- within parentheses, In which we interpret the contents of the
- parentheses as a units expression. It is safe simply to check the
- first and last characters (a string like "(fred)(Harry)" is not a
- legal possibility since there should be an operator in the middle).*/
- } else if( exp[ 0 ] == '(' && exp[ nc - 1 ] == ')' ) {
- result = MakeTree( exp + 1, nc - 2, lock, status );
-
-/* Does the string begin with a numerical constant? */
- } else if( ConStart( exp, &con, &n, status ) == 1 ) {
-
-/* If the entire string was a numerical constant, represent it by a LDCON
- node. */
- if( n == nc ) {
- result = NewNode( NULL, OP_LDCON, status );
- if( astOK ) result->con = con;
-
-/* If there was anything following the numerical constant, report an
- error. */
- } else if( astOK ){
- astError( AST__BADUN, "Missing operator after "
- "numerical string '%.*s'.", status, n, exp );
- }
-
-/* Does the string represent one of the named constants? If so represent it
- by a an appropriate operator. */
- } else if( nc == 2 && ( !strncmp( exp, "pi", 2 ) ||
- !strncmp( exp, "PI", 2 ) ) ) {
- result = NewNode( NULL, OP_LDPI, status );
-
- } else if( nc == 1 && ( !strncmp( exp, "e", 1 ) ||
- !strncmp( exp, "E", 1 ) ) ) {
- result = NewNode( NULL, OP_LDE, status );
-
-/* The only legal possibility left is that the string represents the name
- of a basic unit, possibly prefixed by a multiplier character. */
- } else {
-
-/* See if the string ends with the symbol for any of the known basic
- units. If it matches more than one basic unit, choose the longest.
- First ensure descriptions of the known units are available. */
- mmult = NULL;
- plural = 0;
- while( 1 ) {
- unit = GetKnownUnits( lock, status );
-
- maxlen = -1;
- munit = NULL;
- while( unit ) {
- if( SplitUnit( exp, nc, unit->sym, 1, &mult, &l, status ) ) {
- if( l > maxlen ) {
- maxlen = l;
- munit = unit;
- mmult = mult;
- }
- }
- unit = unit->next;
- }
-
-/* If the above did not produce a match, try matching the unit symbol
- case insensitive. */
- if( !munit ) {
- unit = GetKnownUnits( lock, status );
- while( unit ) {
- if( SplitUnit( exp, nc, unit->sym, 0, &mult, &l, status ) ) {
- if( l > maxlen ) {
- maxlen = l;
- munit = unit;
- mmult = mult;
- }
- }
- unit = unit->next;
- }
- }
-
-/* If the above did not produce a match, try matching the unit label
- case insensitive. */
- if( !munit ) {
- unit = GetKnownUnits( lock, status );
- while( unit ) {
- if( SplitUnit( exp, nc, unit->label, 0, &mult, &l, status ) ) {
- if( l > maxlen ) {
- maxlen = l;
- munit = unit;
- mmult = mult;
- }
- }
- unit = unit->next;
- }
- }
-
-/* If we still do not have a match, and if the string ends with "s", try
- removing the "s" (which could be a plural as in "Angstroms") and
- trying again. */
- if( !munit && nc > 1 && !plural &&
- ( exp[ nc - 1 ] == 's' || exp[ nc - 1 ] == 'S' ) ) {
- plural = 1;
- nc--;
- } else {
- break;
- }
- }
- if( plural ) nc++;
-
-/* If a known unit and multiplier combination was found, create an
- OP_LDVAR node from it. */
- unit = munit;
- mult = mmult;
- if( unit ) {
-
-/* If the unit is an alias for another unit, it will have a non-NULL
- value for its "use" component.In this case, use the unit for which the
- identified unit is an alias. */
- result = NewNode( NULL, OP_LDVAR, status );
- if( astOK ) {
- result->unit = unit->use ? unit->use : unit;
- result->mult = mult;
- result->name = astStore( NULL, result->unit->sym, result->unit->symlen + 1 );
- }
-
-/* If no known unit and multiplier combination was found, we assume the
- string represents a new user-defined basic unit, possibly preceeded by a
- standard multiplier prefix. */
- } else {
-
-/* Check the string to see if starts with a known multiplier prefix (but
- do not allow the multiplier to account for the entire string). */
- mult = GetMultipliers( status );
- c = exp;
- while( mult ) {
- n = nc - mult->symlen;
- if( n > 0 && !strncmp( exp, mult->sym, mult->symlen ) ) {
- c += mult->symlen;
- break;
- }
- mult = mult->next;
- }
- if( !mult ) n = nc;
-
-/* Check there are no illegal characters in the following string. */
- for( i = 0; i < n && astOK; i++ ) {
- if( !isalpha( c[ i ] ) ) {
- astError( AST__BADUN, "Illegal character '%c' found.", status, c[ i ] );
- break;
- }
- }
-
-/* If succesfull, create an OP_LDVAR node for th user-defined basic unit. */
- if( astOK ) {
- result = NewNode( NULL, OP_LDVAR, status );
- if( astOK ) {
- result->mult = mult;
- result->name = astStore( NULL, c, n + 1 );
- if( astOK ) ( (char *) result->name)[ n ] = 0;
- }
- }
- }
- }
- }
- }
-
-/* Free any returned tree if an error has occurred. */
- if( !astOK ) result = FreeTree( result, status );
-
-/* Return the result. */
- return result;
-}
-
-static void MakeUnitAlias( const char *sym, const char *alias, int *status ){
-/*
-* Name:
-* MakeUnitAlias
-
-* Purpose:
-* Create a KnownUnit structure describing an alias for a known unit.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* void MakeUnitAlias( const char *sym, const char *alias, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function creates a KnownUnit structure decribing an alias for a
-* known unit, and adds it to the head of the linked list of known units
-* stored in a module variable. An alias is a KnownUnit which is
-* identical to an existing known but which has a different symbol.
-
-* Parameters:
-* sym
-* A pointer to the symbol string of an existing KnwonUnit. The string
-* should not include any multiplier prefix.
-* alias
-* A pointer to the symbol string to use as the alasi for the existing
-* KnownUnit. The string should not include any multiplier prefix.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The supplied symbol and label strings are not copied. The
-* supplied pointers are simply stored in the returned structure.
-* Therefore the strings to which the pointers point should not be
-* modified after this function returned (in fact this function is
-* always called with literal strings for these arguments).
-*/
-
-/* Local Variables: */
- KnownUnit *unit;
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Search the existing list of KnownUnits for the specified symbol. */
- unit = known_units;
- while( unit ) {
- if( !strcmp( sym, unit->sym ) ) {
-
-/* Create a new KnownUnit for the alias. It will becomes the head of the
- known units chain. */
- MakeKnownUnit( alias, unit->label, NULL, status );
-
-/* Store a pointer to the KnownUnit which is to be used in place of the
- alias. */
- known_units->use = unit;
-
-/* Leave the loop. */
- break;
- }
-
-/* Move on to check the next existing KnownUnit. */
- unit = unit->next;
- }
-
-/* Report an error if the supplied unit was not found. */
- if( !unit ) {
- astError( AST__INTER, "MakeUnitAlias(Unit): Cannot find existing "
- "units \"%s\" to associate with the alias \"%s\" (AST "
- "internal programming error).", status, sym, alias );
- }
-}
-
-static UnitNode *ModifyPrefix( UnitNode *old, int *status ) {
-/*
-* Name:
-* ModifyPrefix
-
-* Purpose:
-* Replace a MULT or DIV node with a LDVAR and suitable multiplier.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* UnitNode *ModifyPrefix( UnitNode *old, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function checks the supplied node. If it is a DIV or MULT node
-* in which one argument is an LDVAR and the other is a constant, then
-* its checks to see if the constant can be absorbed into the LDVAR by
-* changing the multiplier in the LDVAR node. If so, it returns a new
-* node which is an LDVAR with the modified multiplier. Otherwise it
-* returns NULL.
-
-* Parameters:
-* old
-* Pointer to an existing UnitNode to be checked.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new UnitNode.
-
-* Notes:
-* - A value of NULL will be returned if this function is invoked with
-* the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- Multiplier *mult;
- Multiplier *mmult;
- UnitNode *ldcon;
- UnitNode *ldvar;
- UnitNode *newtree;
- UnitNode *result;
- double con;
- double cmult;
- double r;
- double rmin;
- int recip;
- int changed;
-
-/* Initialise. */
- result = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return result;
-
-/* Indicate that we have not yet found any reason to return a changed
- node. */
- changed = 0;
-
-/* Check the supplied node is a DIV or MULT node. */
- if( old->opcode == OP_DIV || old->opcode == OP_MULT ) {
-
-/* Get a copy of the supplied tree which we can modify safely. */
- newtree = CopyTree( old, status );
-
-/* Identify the LDVAR argument (if any). */
- if( newtree->arg[ 0 ]->opcode == OP_LDVAR ) {
- ldvar = newtree->arg[ 0 ];
-
- } else if( newtree->arg[ 1 ]->opcode == OP_LDVAR ) {
- ldvar = newtree->arg[ 1 ];
-
- } else {
- ldvar = NULL;
- }
-
-/* Identify the LDCON argument (if any). */
- if( newtree->arg[ 0 ]->opcode == OP_LDCON ) {
- ldcon = newtree->arg[ 0 ];
-
- } else if( newtree->arg[ 1 ]->opcode == OP_LDCON ) {
- ldcon = newtree->arg[ 1 ];
-
- } else {
- ldcon = NULL;
- }
-
-/* If either was not found, return NULL. */
- if( !ldvar || !ldcon ) {
- newtree = FreeTree( newtree, status );
-
-/* Otherwise, extract the multiplier constant. If there is no multiplier, the
- constant is 1.0. */
- } else {
- cmult = ldvar->mult ? ldvar->mult->scale: 1.0;
-
-/* Extract the constant. */
- con = ldcon->con;
-
-/* Combine the multiplier and the constant. The resulting constant is a
- factor which is used to multiply the LDVAR quantity. If the original
- node is a DIV node in which the LDVAR is in the denominator, then
- flag that we need to reciprocate the new MULT node which represents
- "constant*LDVAR" before returning. */
- if( newtree->opcode == OP_MULT ) {
- con = con*cmult;
- recip = 0;
- } else {
- con = cmult/con;
- recip = ( ldvar == newtree->arg[ 1 ] );
- }
-
-/* Find the closest known multiplier to the new constant. */
- rmin = ( con > 1 ) ? con : 1.0/con;
- mmult = NULL;
- mult = GetMultipliers( status );
- while( mult ) {
- r = ( con > mult->scale) ? con/mult->scale : mult->scale/con;
- if( r < rmin ) {
- mmult = mult;
- rmin = r;
- }
- mult = mult->next;
- }
-
-/* Modify the constant to take account of the new multiplier chosen
- above. "mmult" will be NULL if the best multiplier is unity. */
- if( mmult ) con = con/mmult->scale;
-
-/* If they have changed, associate the chosen multiplier with the LDVAR node,
- and the constant with the LDCON node. */
- if( ldvar->mult != mmult ) {
- ldvar->mult = mmult;
- changed = 1;
- }
-
- if( ldcon->con != con ) {
- ldcon->con = con;
- changed = 1;
- }
-
-/* Unless the node is proportional to the reciprocal of the variable, the
- new node should be a MULT node (it may originally have been a DIV). */
- if( !recip ) {
- if( newtree->opcode != OP_MULT ){
- newtree->opcode = OP_MULT;
- changed = 1;
- }
-
-/* If the constant is 1.0 we can just return the LDVAR node by itself. */
- if( fabs( con - 1.0 ) < 1.0E-6 ) {
- result = CopyTree( ldvar, status );
- newtree = FreeTree( newtree, status );
- changed = 1;
-
-/* Otherwise return the modified tree containing both LDVAR and LDCON nodes. */
- } else {
- result = newtree;
- }
-
-/* If the node is proportional to the reciprocal of the variable, the
- new node will already be a DIV node and will have an LDCON as the first
- argument (numerator) and an LDVAR as the second argument (denominator). */
- } else {
-
-/* The first argument (the numerator) should be the reciprocal of the constant
- found above. */
- ldcon->con = 1.0/ldcon->con;
- if( !EQUAL( ldcon->con, old->arg[0]->con ) ) changed = 1;
-
-/* Return the modified tree containing both LDVAR and LDCON nodes. */
- result = newtree;
- }
- }
- }
-
-/* If the new and old trees are equivalent, then we do not need to return
- it. */
- if( !changed && result ) result = FreeTree( result, status );
-
-/* Return the answer. */
- return result;
-}
-
-
-static UnitNode *NewNode( UnitNode *old, Oper code, int *status ) {
-/*
-* Name:
-* NewNode
-
-* Purpose:
-* Create and initialise a new UnitNode.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* UnitNode *NewNode( UnitNode *old, Oper code, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function creates and initialises a new UnitNode, or
-* re-initialises an existing UnitNode to use a different op code.
-
-* Parameters:
-* old
-* Pointer to an existing UnitNode to be modified, or NULL to create
-* a new UnitNode.
-* code
-* The op code for the new UnitNode.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new UnitNode.
-
-* Notes:
-* - A value of NULL will be returned if this function is invoked with
-* the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- UnitNode **args;
- UnitNode *result;
- int i;
-
-/* Initialise. */
- result = NULL;
- args = NULL;
-
-/* Check the inherited status. */
- if( !astOK ) return result;
-
-/* If an existig UnitNode was supplied, free any memory used to hold
- pointers to its arguments. */
- if( old ) {
- old->arg = astFree( old->arg );
- result = old;
-
-/* Otherwise, allocate memory for a new structure. */
- } else {
- result = astMalloc( sizeof( UnitNode ) );
- }
-
-/* Check the pointer can be used safely. */
- if( astOK ) {
-
-/* Initialise the members of the UnitNode structure. */
- result->opcode = code;
- result->arg = NULL;
- result->con = AST__BAD;
- result->name = NULL;
- result->unit = NULL;
- result->mult = NULL;
- result->narg = 0;
-
- switch( code ){
- case OP_LDPI:
- result->con = PI;
- break;
-
- case OP_LDE:
- result->con = E;
- break;
-
- case OP_LOG:
- case OP_LN:
- case OP_EXP:
- case OP_SQRT:
- result->narg = 1;
- break;
-
- case OP_POW:
- case OP_DIV:
- case OP_MULT:
- result->narg = 2;
- break;
-
- default:
- ;
- }
-
-/* Allocate memory for the UnitNode pointers which will locate the
- nodes forming the arguments to the new node. */
- args = astMalloc( (result->narg)*sizeof( UnitNode * ) );
- if( astOK ) {
- result->arg = args;
-
-/* Initialise the argument pointers to NULL. */
- for( i = 0; i < result->narg; i++ ) args[ i ] = NULL;
- }
- }
-
-/* Free any result if an error occurred. */
- if( !astOK ) {
- args = astFree( args );
- result = astFree( result );
- }
-
-/* Return the answer. */
- return result;
-}
-
-static void RemakeTree( UnitNode **node, int *status ) {
-/*
-* Name:
-* RemakeTree
-
-* Purpose:
-* Replace derived units within a tree of UnitNodes by basic units.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* void RemakeTree( UnitNode **node, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function searches for LDVAR nodes (i.e. references to unit
-* symbols) within the given tree, and replaces each such node which
-* refers to known derived unit with a sub-tree of nodes which
-* define the derived unit in terms of known basic units.
-
-* Parameters:
-* node
-* The address of a pointer to the UnitNode at the head of the tree
-* which is to be simplified. On exit the supplied tree is freed and a
-* pointer to a new tree is placed at the given address.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- KnownUnit *unit;
- int i;
- UnitNode *newnode;
-
-/* Check inherited status. */
- if( !astOK ) return;
-
-/* Initially, we have no replacement node */
- newnode = NULL;
-
-/* If this is an LDVAR node... */
- if( (*node)->opcode == OP_LDVAR ) {
-
-/* If the LDVAR node has a multiplier associated with it, we need to
- introduce a OP_MULT node to perform the scaling. */
- if( (*node)->mult ) {
- newnode = NewNode( NULL, OP_MULT, status );
- if( astOK ) {
- newnode->arg[0] = NewNode( NULL, OP_LDCON, status );
- if( astOK ) {
- newnode->arg[0]->con = 1.0/(*node)->mult->scale;
-
-/* See if the node refers to a known unit. If not, or if the known unit
- is a basic unit (i.e. not a derived unit) use the supplied node for
- the second argument of the OP_MULT node (without the multiplier).
- Otherwise, use a copy of the tree which defines the derived unit. */
- unit = (*node)->unit;
- if( unit && unit->head ) {
- newnode->arg[1] = CopyTree( unit->head, status );
- } else {
- newnode->arg[1] = CopyTree( *node, status );
- if( astOK ) newnode->arg[1]->mult = NULL;
- }
- }
- }
-
-/* If no multiplier is supplied, the replacement node is simply the tree
- which defines the unscaled unit (if known), or the original node (if
- unknown). */
- } else {
- unit = (*node)->unit;
- if( unit && unit->head ) newnode = CopyTree( unit->head, status );
- }
-
-/* If this is not an LDVAR Node, remake the sub-trees which form the
- arguments of this node. */
- } else {
- for( i = 0; i < (*node)->narg; i++ ) {
- RemakeTree( &((*node)->arg[ i ]), status );
- }
- }
-
-/* If an error has occurred, free any new node. */
- if( !astOK ) newnode = FreeTree( newnode, status );
-
-/* If we have a replacement node, free the supplied tree and return a
- pointer to the new tree. */
- if( newnode ) {
- FreeTree( *node, status );
- *node = newnode;
- }
-}
-
-static int ReplaceNode( UnitNode *target, UnitNode *old, UnitNode *new, int *status ) {
-/*
-* Name:
-* ReplaceNode
-
-* Purpose:
-* Replace a node within a tree of UnitNodes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* int ReplaceNode( UnitNode *target, UnitNode *old, UnitNode *new, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function replaces a specified node within a tree of UnitNodes
-* with another given node. The original node is freed if found.
-
-* Parameters:
-* target
-* A pointer to the UnitNode at the head of the tree containing the
-* node to be replaced.
-* old
-* A pointer to the UnitNode to be replaced.
-* new
-* A pointer to the UnitNode to replace "old".
-* status
-* Pointer to the inherited status variable.
-
-* Return Value:
-* Non-zero if the "old" node was found and replaced (in which case
-* the "old" node will have been freed).
-
-* Notes:
-* - It is assumed that the "old" node occurs at most once within the
-* target tree.
-* - The node at the head of the target tree is not compared with the
-* "old" node. It is assumed the called will already have done this.
-* - A value of zero is returned if an error has already occurred, or
-* if this function fails for any reason.
-
-*/
-
-/* Local Variables: */
- int i;
- int result;
-
-/* Initialise */
- result = 0;
-
-/* Check inherited status. */
- if( !astOK ) return result;
-
-/* Loop round the arguments of the node at the head of the target tree.
- Break out of the loop as soone as the old node is found. */
- for( i = 0; i < target->narg; i++ ) {
-
-/* If this argument is the node to be replaced, free the old one and store
- the new one, and then leave the loop. */
- if( target->arg[ i ] == old ) {
- FreeTree( old, status );
- target->arg[ i ] = new;
- result = 1;
- break;
-
-/* Otherwise use this function recursively to search for the old node
- within the current argument. */
- } else {
- if( ReplaceNode( target->arg[ i ], old, new, status ) ) break;
- }
- }
-
-/* If an error has occurred, return zero. */
- if( !astOK ) result = 0;
-
-/* Return the answer. */
- return result;
-}
-
-static int SimplifyTree( UnitNode **node, int std, int *status ) {
-/*
-* Name:
-* SimplifyTree
-
-* Purpose:
-* Simplify a tree of UnitNodes.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* int SimplifyTree( UnitNode **node, int std, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function simplifies a tree of UnitNodes. It is assumed that
-* all the OP_LDVAR nodes in the tree refer to the same basic unit.
-* A primary purpose of this function is to standardise the tree so
-* that trees which implement equivalent transformations but which
-* have different structures can be compared (for instance, so that
-* "2*x" and "x*2" are treated as equal trees). If "std" is non-zero,
-* reducing the complexity of the tree is only of secondary importance.
-* This explains why some "simplifications" actually produced trees which
-* are more complicated.
-
-* Parameters:
-* node
-* The address of a pointer to the UnitNode at the head of the tree
-* which is to be simplified. On exit the supplied tree is freed and a
-* pointer to a new tree is placed at the given address.
-* std
-* If non-zero, perform standardisations. Otherwise only perform
-* genuine simplifications.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if some change was made to the tree.
-
-*/
-
-/* Local Variables: */
- int i;
- UnitNode *newnode;
- UnitNode *node1;
- UnitNode *node2;
- Oper op;
- UnitNode **factors;
- double *powers;
- int nfactor;
- double coeff;
- int result;
-
-/* Initialise */
- result = 0;
-
-/* Check inherited status. */
- if( !astOK ) return result;
-
-/* Initiallially, we have no replacement node. */
- newnode = NULL;
-
-/* First replace any complex constant expressions any corresponding
- OP_LDCON nodes. */
- FixConstants( node, 0, status );
-
-/* Simplify the sub-trees corresponding to the arguments of the node at
- the head of the supplied tree. */
- for( i = 0; i < (*node)->narg; i++ ) {
- if( SimplifyTree( &( (*node)->arg[ i ] ), std, status ) ) result = 1;
- }
-
-/* Now do specific simplifications appropriate to the nature of the node at
- the head of the tree. */
- op = (*node)->opcode;
-
-/* Natural log */
-/* =========== */
-/* We standardise argument powers into coefficients of the LN value. */
- if( op == OP_LN ) {
-
-/* If the argument is a OP_EXP node, they cancel out. Return a copy of the
- argument of OP_EXP node. */
- if( (*node)->arg[ 0 ]->opcode == OP_EXP ) {
- newnode = CopyTree( (*node)->arg[ 0 ]->arg[ 0 ], status );
-
-/* If the argument is an OP_POW node, rearrange the nodes to represent
- k*ln(x) instead of ln(x**k) (note pow nodes always have a constant
- exponent - this is checked in InvertConstants). SQRT arguments will
- not occur because they will have been changed into POW nodes when the
- arguments of the supplied head node were simplified above. */
- } else if( std && (*node)->arg[ 0 ]->opcode == OP_POW ) {
- newnode = NewNode( NULL, OP_MULT, status );
- node1 = CopyTree( (*node)->arg[ 0 ]->arg[ 1 ], status );
- node2 = NewNode( NULL, OP_LN, status );
- if( astOK ) {
- node2->arg[ 0 ] = CopyTree( (*node)->arg[ 0 ]->arg[ 0 ], status );
- newnode->arg[ 0 ] = node1;
- newnode->arg[ 1 ] = node2;
- }
- }
-
-/* Common log */
-/* ========== */
-/* We standardise natural logs into common logs. */
- } else if( op == OP_LOG ) {
- if( std ) {
- newnode = NewNode( NULL, OP_DIV, status );
- node1 = NewNode( NULL, OP_LN, status );
- node2 = NewNode( NULL, OP_LDCON, status );
- if( astOK ) {
- node1->arg[ 0 ] = CopyTree( (*node)->arg[ 0 ], status );
- node2->con = log( 10.0 );
- newnode->arg[ 0 ] = node1;
- newnode->arg[ 1 ] = node2;
- }
- }
-
-/* Exponential */
-/* =========== */
-/* We prefer to minimise the number of EXP nodes, so, for instance, we do not
- change "exp(x*y)" to "exp(x)+exp(y)" (and the code for ADD nodes does
- the inverse conversion). */
- } else if( op == OP_EXP ) {
-
-/* If the argument is an OP_LN node, they cancel out. Return a copy of the
- argument of the OP_LN node. Common log arguments will not occur because
- they will have been changed into natural logs when the arguments of
- the supplied head node were simplified above. */
- if( (*node)->arg[ 0 ]->opcode == OP_LN ) {
- newnode = CopyTree( (*node)->arg[ 0 ]->arg[ 0 ], status );
- }
-
-/* Square root */
-/* =========== */
-/* We standardise sqrt nodes into pow nodes. */
- } else if( op == OP_SQRT ) {
- if( std ) {
- newnode = NewNode( NULL, OP_POW, status );
- node1 = CopyTree( (*node)->arg[ 0 ], status );
- node2 = NewNode( NULL, OP_LDCON, status );
- if( astOK ) {
- node2->con = 0.5;
- newnode->arg[ 0 ] = node1;
- newnode->arg[ 1 ] = node2;
- }
- }
-
-/* Exponentiation */
-/* ============== */
-/* We want to simplfy factors. So, for instance, (x*y)**k is converted to
- (x**k)*(y**k). */
- } else if( op == OP_POW ) {
-
-/* If the first argument is an OP_EXP node, then change "(e**x)**k" into
- "e**(k*x)" */
- if( (*node)->arg[ 0 ]->opcode == OP_EXP ) {
- newnode = NewNode( NULL, OP_EXP, status );
- node1 = NewNode( NULL, OP_MULT, status );
- if( astOK ) {
- node1->arg[ 0 ] = CopyTree( (*node)->arg[ 1 ], status );
- node1->arg[ 1 ] = CopyTree( (*node)->arg[ 0 ]->arg[ 0 ], status );
- newnode->arg[ 0 ] = node1;
- }
-
-/* "x**0" can be replaced by 1.0 */
- } else if( (*node)->arg[ 1 ]->con == 0.0 ) {
- newnode = NewNode( NULL, OP_LDCON, status );
- if( astOK ) newnode->con = 1.0;
-
-/* "x**1" can be replaced by x */
- } else if( EQUAL( (*node)->arg[ 1 ]->con, 1.0 ) ) {
- newnode = CopyTree( (*node)->arg[ 0 ], status );
-
-/* If the first argument is an OP_POW node, then change "(x**k1)**k2" into
- "x**(k1*k2)" */
- } else if( (*node)->arg[ 0 ]->opcode == OP_POW ) {
- newnode = NewNode( NULL, OP_POW, status );
- node1 = NewNode( NULL, OP_LDCON, status );
- if( astOK ) {
- node1->con = ( (*node)->arg[ 0 ]->arg[ 1 ]->con )*
- ( (*node)->arg[ 1 ]->con );
- newnode->arg[ 0 ] = CopyTree( (*node)->arg[ 0 ]->arg[ 0 ], status );
- newnode->arg[ 1 ] = node1;
- }
-
-/* If the first argument is an OP_MULT node, then change "(x*y)**k" into
- "(x**(k))*(y**(k))" */
- } else if( std && (*node)->arg[ 0 ]->opcode == OP_MULT ) {
- newnode = NewNode( NULL, OP_MULT, status );
- node1 = NewNode( NULL, OP_POW, status );
- if( astOK ) {
- node1->arg[ 1 ] = CopyTree( (*node)->arg[ 1 ], status );
- node2 = CopyTree( node1, status );
- node1->arg[ 0 ] = CopyTree( (*node)->arg[ 0 ]->arg[ 0 ], status );
- node2->arg[ 0 ] = CopyTree( (*node)->arg[ 0 ]->arg[ 1 ], status );
- newnode->arg[ 0 ] = node1;
- newnode->arg[ 1 ] = node2;
- }
- }
-
-/* Division. */
-/* ========= */
-/* We standardise divisions into corresponding multiplications. */
- } else if( op == OP_DIV ) {
-
-/* Division by 1 is removed. */
- if( EQUAL( (*node)->arg[ 1 ]->con, 1.0 ) ){
- newnode = CopyTree( (*node)->arg[ 0 ], status );
-
-/* Division by any other constant (except zero) is turned into a
- multiplication by the reciprocal constant. */
- } else if( (*node)->arg[ 1 ]->con != AST__BAD ) {
- if( (*node)->arg[ 1 ]->con != 0.0 ) {
- newnode = NewNode( NULL, OP_MULT, status );
- node1 = NewNode( NULL, OP_LDCON, status );
- if( astOK ) {
- node1->con = 1.0/(*node)->arg[ 1 ]->con;
- newnode->arg[ 0 ] = node1;
- newnode->arg[ 1 ] = CopyTree( (*node)->arg[ 0 ], status );
- }
- } else {
- astError( AST__BADUN, "Simplifying a units expression"
- "requires a division by zero." , status);
- }
-
-/* Other divisions "x/y" are turned into "x*(y**(-1))" */
- } else if( std ) {
- newnode = NewNode( NULL, OP_MULT, status );
- node1 = NewNode( NULL, OP_POW, status );
- node2 = NewNode( NULL, OP_LDCON, status );
- if( astOK ) {
- node2->con = -1.0;
- node1->arg[ 0 ] = CopyTree( (*node)->arg[ 1 ], status );
- node1->arg[ 1 ] = node2;
- newnode->arg[ 0 ] = CopyTree( (*node)->arg[ 0 ], status );
- newnode->arg[ 1 ] = node1;
- }
- }
-
-/* Multiplication */
-/* ============== */
- } else if( op == OP_MULT ) {
-
-/* If the right hand argument is constant, swap the arguments. */
- if( (*node)->arg[ 1 ]->con != AST__BAD ) {
- newnode = NewNode( NULL, OP_MULT, status );
- if( astOK ) {
- newnode->arg[ 0 ] = CopyTree( (*node)->arg[ 1 ], status );
- newnode->arg[ 1 ] = CopyTree( (*node)->arg[ 0 ], status );
- }
-
-/* Multiplication by zero produces a constant zero. */
- } else if( (*node)->arg[ 0 ]->con == 0.0 ){
- newnode = NewNode( NULL, OP_LDCON, status );
- if( astOK ) newnode->con = 0.0;
-
-/* Multiplication by 1 is removed. */
- } else if( EQUAL( (*node)->arg[ 0 ]->con, 1.0 ) ){
- newnode = CopyTree( (*node)->arg[ 1 ], status );
-
-/* For other MULT nodes, analyse the tree to find a list of all its
- factors with an associated power for each one, and an overall constant
- coefficient. */
- } else if( std ) {
- FindFactors( (*node), &factors, &powers, &nfactor, &coeff, status );
-
-/* Produce a new tree from these factors. The factors are standardised by
- ordering them alphabetically (after conversion to a character string). */
- newnode = CombineFactors( factors, powers, nfactor, coeff, status );
-
-/* Free resources */
- factors = astFree( factors );
- powers = astFree( powers );
-
- }
- }
-
-/* If we have produced a new node which is identical to the old node,
- free it. Otherwise, indicate we have made some changes. */
- if( newnode ) {
- if( !CmpTree( newnode, *node, 1, status ) ) {
- newnode = FreeTree( newnode, status );
- } else {
- result = 1;
- }
- }
-
-/* If an error has occurred, free any new node. */
- if( !astOK ) newnode = FreeTree( newnode, status );
-
-/* If we have a replacement node, free the supplied tree and return a
- pointer to the new tree. */
- if( newnode ) {
- FreeTree( *node, status );
- *node = newnode;
- }
-
-/* If the above produced some change, try re-simplifying the tree. */
- if( result ) SimplifyTree( node, std, status );
-
-/* Return the result. */
- return result;
-
-}
-
-static int SplitUnit( const char *str, int ls, const char *u, int cs,
- Multiplier **mult, int *l, int *status ) {
-/*
-* Name:
-* SplitUnit
-
-* Purpose:
-* Split a given string into unit name and multiplier.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* int SplitUnit( const char *str, int ls, const char *u, int cs,
-* Multiplier **mult, int *l, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* Returns non-zer0 if the supplied string ends with the supplied unit
-* name or label, and any leading string is a known multiplier.
-
-* Parameters:
-* str
-* The string to test, typically containing a multiplier and a unit
-* symbol or label.
-* ls
-* Number of characters to use from "str" (not including trailing null)
-* u
-* Pointer to the unit label or symbol string to be searched for.
-* cs
-* If non-zero, the test for "u" is case insensitive.
-* mult
-* Address of a location at which to return the multiplier at the
-* start of the supplied string. NULL is returned if the supplied
-* string does not match the supplied unit, or if the string
-* includes no multiplier.
-* l
-* Address of an int in which to return the length of "u".
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if "str" ends with "u" and starts with a null string or a
-* known multiplier string.
-
-*/
-
-/* Local Variables: */
- int ret;
- int lm;
- int lu;
-
-/* Initialise */
- ret = 0;
- *mult = NULL;
- *l = 0;
-
-/* Check inherited status. */
- if( !astOK ) return ret;
-
-/* Find the number of characters in the supplied unit label or symbol. The
- difference between lu and ls must be the length of the multiplier. */
- lu = strlen( u );
- lm = ls - lu;
-
-/* Make sure "str" is not shorter than "u" */
- if( lm >= 0 ) {
-
-/* Compare the end of "str" against "u" */
- if( cs ? !strncmp( str + lm, u, lu ) :
- !Ustrncmp( str + lm, u, lu, status ) ) {
- ret = 1;
-
-/* If "str" ends with "u", see if it starts with a known multiplier */
- if( lm > 0 ) {
- ret = 0;
- *mult = GetMultipliers( status );
- while( *mult ) {
- if( (*mult)->symlen == lm && !strncmp( str, (*mult)->sym, lm ) ) {
- ret = 1;
- break;
- }
- *mult = (*mult)->next;
- }
-
-/* If not, try again using case-insensitive matching. */
- if( !ret ) {
- *mult = GetMultipliers( status );
- while( *mult ) {
- if( (*mult)->symlen == lm && !Ustrncmp( str, (*mult)->sym, lm, status ) ) {
- ret = 1;
- break;
- }
- *mult = (*mult)->next;
- }
- }
-
-/* If not, try again using case-insensitive matching against the
- multiplier label. */
- if( !ret ) {
- *mult = GetMultipliers( status );
- while( *mult ) {
- if( (*mult)->lablen == lm && !Ustrncmp( str, (*mult)->label, lm, status ) ) {
- ret = 1;
- break;
- }
- *mult = (*mult)->next;
- }
- }
-
- }
- }
- }
-
- *l = lu;
- return ret;
-}
-
-double astUnitAnalyser_( const char *in, double powers[9], int *status ){
-/*
-*+
-* Name:
-* astUnitAnalyser
-
-* Purpose:
-* Perform a dimensional analysis of a unti string.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "unit.h"
-* double astUnitAnalyser_( const char *in, double powers[9] )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function parses the supplied units string if possible, and
-* returns a set of pwoers and a scaling factor which represent the
-* units string.
-
-* Parameters:
-* in
-* A string representation of the units, for instance "km/h".
-* powers
-* An array in which are returned the powers for each of the following
-* basic units (in the order shown): kilogramme, metre, second, radian,
-* Kelvin, count, photon, magnitude, pixel. If the supplied unit does
-* not depend on a given basic unit a value of 0.0 will be returned in
-* the array. The returns values represent a system of units which is a
-* scaled form of the supplied units, expressed in the basic units of m,
-* kg, s, rad, K count,photon, mag and pixel. For instance, a returned
-* array of [1,0,-2,0,0,0,0,0,0] would represent "m/s**2".
-
-* Returned Value:
-* A scaling factor for the supplied units. The is the value, in the
-* units represented by the returned powers, which corresponds to a
-* value of 1.0 in the supplied units.
-
-* Notes:
-* - An error will be reported if the units string cannot be parsed
-* or refers to units or functions which cannot be analysed in this way.
-* - AST__BAD is returned if this function is invoked with the
-* global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- UnitNode *in_tree;
- double result;
-
-/* Initialise */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Parse the input units string, producing a tree of UnitNodes which
- represents the input units. A pointer to the UnitNode at the head of
- the tree is returned if succesfull. Report a context message if this
- fails. */
- in_tree = CreateTree( in, 1, 1, status );
- if( in_tree ) {
-
-/* Analyse the tree */
- if( !DimAnal( in_tree, powers, &result, status ) && astOK ) {
- result = AST__BAD;
- astError( AST__BADUN, "astUnitAnalyser: Error analysing input "
- "units string '%s' (it may contain unsupported "
- "functions or dimensionless units).", status, in );
- }
-
-/* Free the tree. */
- in_tree = FreeTree( in_tree, status );
-
- } else if( astOK ) {
- astError( AST__BADUN, "astUnitAnalyser: Error parsing input "
- "units string '%s'.", status, in );
- }
-
-/* Return the result */
- return result;
-}
-
-const char *astUnitLabel_( const char *sym, int *status ){
-/*
-*+
-* Name:
-* astUnitLabel
-
-* Purpose:
-* Return a string label for a given unit symbol.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "unit.h"
-* const char *astUnitLabel( const char *sym )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function returns a pointer to a constant string containing a
-* descriptive label for the unit specified by the given unit symbol.
-
-* Parameters:
-* sym
-* A string holing a known unit symbol.
-
-* Returned Value:
-* A pointer to constant string holding a descriptive label for the
-* supplied unit. A NULL pointer is returned (without error) if the
-* supplied unit is unknown.
-
-* Notes:
-* - A NULL pointer is returned if this function is invoked with the
-* global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- const char *result;
- KnownUnit *unit;
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Ensure descriptions of the known units are available. */
- unit = GetKnownUnits( 1, status );
-
-/* Loop through the chain of known units looking for a unit with a symbol
- equal to the supplied string. If found, store a pointer to its label
- and break out of the loop. */
- while( unit ) {
- if( !strcmp( sym, unit->sym ) ) {
- result = unit->label;
- break;
- }
-
- unit = unit->next;
- }
-
-/* Return the answer. */
- return result;
-}
-
-AstMapping *astUnitMapper_( const char *in, const char *out,
- const char *in_lab, char **out_lab, int *status ){
-/*
-*+
-* Name:
-* astUnitMapper
-
-* Purpose:
-* Create a Mapping between two system of units.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "unit.h"
-* AstMapping *astUnitMapper( const char *in, const char *out,
-* const char *in_lab, char **out_lab )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function creates a Mapping between two specified system of
-* units. It also modifes a supplied label (which is typically
-* the axis label associated with the input units) so that it includes
-* any functional change implied by the supplied "in" and "out" units.
-
-* Parameters:
-* in
-* A string representation of the input units, for instance "km/h".
-* See "Unit Representations:" below.
-* out
-* A string representation of the output units, for instance "m/s".
-* See "Unit Representations:" below.
-* in_lab
-* A label describing the quantity associated with the input units.
-* If the "in" string is the Units attribute of an Axis, then
-* "in_lab" should be the Label of the same Axis. May be supplied
-* NULL in which case "out_lab" is ignored.
-* out_lab
-* The address at which to return a pointer to a label describing the
-* quantity associated with the output units. For instance, if the
-* input and output units are "Hz" and "sqrt(Hz)", and the input
-* label is "Frequency", then the returned output label will be
-* "sqrt( Frequency )". The returned label is stored in dynamically
-* allocated memory which should be freed (using astFree) when no longer
-* needed.
-
-* Returned Value:
-* A pointer to a Mapping which can be used to transform values in the
-* "in" system of units into the "out" system of units. The Mapping
-* will have 1 input and 1 output.
-
-* Unit Representations:
-* The string supplied for "in" and "out" should represent a system of
-* units following the recommendations of the FITS WCS paper I
-* "Representation of World Coordinates in FITS" (Greisen & Calabretta).
-* Various commonly used variants are also allowed.
-*
-* To summarise, a string describing a system of units should be an
-* algebraic expression which combines one or more named units. The
-* following functions and operators may be used within these algebraic
-* expressions:
-*
-* - "*": multiplication. A period "." or space " " may also be used
-* to represent multiplication (a period is only interpreted as a
-* multiplication operator if it is not positioned between two digits,
-* and a space is only interpreted as a multiplication operator if it
-* occurs between two operands).
-* - "/": division.
-* - "**": exponentiation. The exponent (i.e. the operand following the
-* exponentiation operator) must be a constant. The symbol "^" is also
-* interpreted as an exponentiation operator. Exponentiation is also
-* implied by an integer following a unit name without any separator
-* (e.g. "cm2" is "cm^2").
-* - log(): Common logarithm.
-* - ln(): Natural logarithm.
-* - sqrt(): Square root.
-* - exp(): Exponential.
-*
-* Function names are case insensitive. White space may be included
-* within an expression (note that white space between two operands
-* will be interpreted as a muiltiplication operator as described
-* above). Parentheses may be used to indicate the order in which
-* expressions are to be evaluated (normal mathematical precedence is
-* used otherwise). The following symbols may be used to represent
-* constants:
-*
-* - "pi"
-* - "e"
-*
-* These symbols are also case in-sensitive.
-*
-* The above operators and functions are used to combine together one
-* or more "unit symbols". The following base unit symbols are recognised:
-*
-* - "m": metre.
-* - "g": gram.
-* - "s": second.
-* - "rad": radian.
-* - "sr": steradian.
-* - "K": Kelvin.
-* - "mol": mole.
-* - "cd": candela.
-*
-* The following symbols for units derived fro the above basic units are
-* recognised:
-*
-* - "sec": second (1 s)
-* - "Hz": Hertz (1/s).
-* - "N": Newton (kg m/s**2).
-* - "J": Joule (N m).
-* - "W": Watt (J/s).
-* - "C": Coulomb (A s).
-* - "V": Volt (J/C).
-* - "Pa": Pascal (N/m**2).
-* - "Ohm": Ohm (V/A).
-* - "S": Siemens (A/V).
-* - "F": Farad (C/V).
-* - "Wb": Weber (V s).
-* - "T": Tesla (Wb/m**2).
-* - "H": Henry (Wb/A).
-* - "lm": lumen (cd sr).
-* - "lx": lux (lm/m**2).
-* - "deg": degree (pi/180 rad).
-* - "arcmin": arc-minute (1/60 deg).
-* - "arcsec": arc-second (1/3600 deg).
-* - "mas": milli-arcsecond (1/3600000 deg).
-* - "min": minute (60 s).
-* - "h": hour (3600 s).
-* - "d": day (86400 s).
-* - "yr": year (31557600 s).
-* - "a": year (31557600 s).
-* - "eV": electron-Volt (1.60217733E-19 J).
-* - "erg": erg (1.0E-7 J).
-* - "Ry": Rydberg (13.605692 eV).
-* - "solMass": solar mass (1.9891E30 kg).
-* - "u": unified atomic mass unit (1.6605387E-27 kg).
-* - "solLum": solar luminosity (3.8268E26 W).
-* - "Angstrom": Angstrom (1.0E-10 m).
-* - "Ang": Angstrom
-* - "A": Angstrom
-* - "micron": micron (1.0E-6 m).
-* - "solRad": solar radius (6.9599E8 m).
-* - "AU": astronomical unit (1.49598E11 m).
-* - "lyr": light year (9.460730E15 m).
-* - "pc": parsec (3.0867E16 m).
-* - "count": count.
-* - "ct": count.
-* - "photon": photon.
-* - "ph": photon.
-* - "Jy": Jansky (1.0E-26 W /m**2 /Hz).
-* - "Jan": Jansky
-* - "mag": magnitude.
-* - "G": Gauss (1.0E-4 T).
-* - "pixel": pixel.
-* - "pix": pixel.
-* - "barn": barn (1.0E-28 m**2).
-* - "D": Debye (1.0E-29/3 C.m).
-*
-* Note, AST follows the widespread practice within astronomy of using
-* "A" as an alias for "Angstrom". This replaces the association of "A"
-* with Ampere included in the FITS-WCS standard.
-*
-* In addition, any other unknown unit symbol may be used (but of course
-* no mapping will be possible between unknown units).
-*
-* Unit symbols may be preceeded with a numerical constant (for
-* instance "1000 m") or a standard multiplier symbol (for instance "km")
-* to represent some multiple of the unit. The following standard
-* multipliers are recognised:
-*
-* - "d": deci (1.0E-1)
-* - "c": centi (1.0E-2)
-* - "m": milli (1.0E-3)
-* - "u": micro (1.0E-6)
-* - "n": nano (1.0E-9)
-* - "p": pico (1.0E-12)
-* - "f": femto (1.0E-15)
-* - "a": atto (1.0E-18)
-* - "z": zepto (1.0E-21)
-* - "y": yocto (1.0E-24)
-* - "da": deca (1.0E1)
-* - "h": hecto (1.0E2)
-* - "k": kilo (1.0E3)
-* - "M": mega (1.0E6)
-* - "G": giga (1.0E9)
-* - "T": tera (1.0E12)
-* - "P": peta (1.0E15)
-* - "E": exa (1.0E18)
-* - "Z": zetta (1.0E21)
-* - "Y": yotta (1.0E24)
-
-* Notes:
-* - NULL values are returned without error if the supplied units are
-* incompatible (for instance, if the input and output units are "kg"
-* and "m" ).
-* - NULL values are returned if this function is invoked with the
-* global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstMapping *result;
- UnitNode **units;
- UnitNode *in_tree;
- UnitNode *intemp;
- UnitNode *inv;
- UnitNode *labtree;
- UnitNode *newtest;
- UnitNode *out_tree;
- UnitNode *outtemp;
- UnitNode *src;
- UnitNode *testtree;
- UnitNode *tmp;
- UnitNode *totaltree;
- UnitNode *totlabtree;
- const char *c;
- const char *exp;
- int i;
- int nc;
- int nunits;
- int ipass;
-
-/* Initialise */
- result = NULL;
- if( in_lab ) *out_lab = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* A quick check for a common simple case: if the two strings are
- identical, return a UnitMap.*/
- if( !strcmp( in, out ) ) {
- if( in_lab ) *out_lab = astStore( NULL, in_lab, strlen( in_lab ) + 1 );
- return (AstMapping *) astUnitMap( 1, "", status );
- }
-
-/* More initialisation. */
- in_tree = NULL;
- out_tree = NULL;
- units = NULL;
-
-/* Parse the input units string, producing a tree of UnitNodes which
- represents the input units. A pointer to the UnitNode at the head of
- the tree is returned if succesfull. Report a context message if this
- fails. The returned tree contains branch nodes which correspond to
- operators or functions, and leaf nodes which represent constant values
- or named basic units (m, s, g, K, etc). Each branch node has one or more
- "arguments" (i.e. child nodes) which are operated on or combined by
- the branch node in some way to produce the nodes "value". This value
- is then used as an argument for the node's parent node (if any). If
- the string supplied by the user refers to any known derived units (e.g. "N",
- Newton) then each such unit is represented in the returned tree by a
- complete sub-tree in which the head node corresponds to the derived
- unit (e.g. "N") and the leaf nodes correspond to the basic units needed
- to define the derived unit ( for instance, "m", "s" and "g" - metres,
- seconds and grammes), or numerical constants. Thus every leaf node in the
- returned tree will be a basic unit (i.e. a unit which is not defined in
- terms of other units), or a numerical constant. */
- in_tree = CreateTree( in, 1, 1, status );
- if( !astOK ) astError( AST__BADUN, "astUnitMapper: Error parsing input "
- "units string '%s'.", status, in );
-
-/* Do the same for the output units. */
- if( astOK ) {
- out_tree = CreateTree( out, 1, 1, status );
- if( !astOK ) astError( AST__BADUN, "astUnitMapper: Error parsing output "
- "units string '%s'.", status, out );
- }
-
-/* If a blank string is supplied for both input and output units, then
- assume a UnitMap is the appropriate Mapping. */
- if( !in_tree && !out_tree && astOK ) {
- result = (AstMapping *) astUnitMap( 1, "", status );
- if( in_lab ) *out_lab = astStore( NULL, in_lab, strlen( in_lab ) + 1 );
-
-/* Otherwise, if we have both input and output trees... */
- } else if( in_tree && out_tree && astOK ) {
-
-/* Locate all the basic units used within either of these two trees. An
- array is formed in which each element is a pointer to a UnitNode
- contained within one of the trees created above. Each basic unit
- referred to in either tree will have a single entry in this array
- (even if the unit is referred to more than once). */
- units = NULL;
- nunits = 0;
- LocateUnits( in_tree, &units, &nunits, status );
- LocateUnits( out_tree, &units, &nunits, status );
-
-/* Due to the simple nature of the simplification process in SimplifyTree,
- the following alogorithm sometimes fails to find a Mapping form input
- to output units, but can find a Mapping from output to input units.
- In this latter case, we can get the required Mapping from input to
- output simply by inverting the Mapign from output to input. So try
- first with the units in the original order. If this fails to find a
- Mapping, try again with the units swapped, and note that the final
- Mapping should be inverted before being used. */
- for( ipass = 0; ipass < 2; ipass++ ){
- if( ipass == 1 ) {
- tmp = in_tree;
- in_tree = out_tree;
- out_tree = tmp;
- }
-
-/* We are going to create a new tree of UnitNodes in which the head node
- corresponds to the requested output units, and which has a single
- non-constant leaf node corresponding to the input units. Initialise a
- pointer to this new tree to indicate that it has not yet been created. */
- testtree = NULL;
-
-/* Loop round each basic unit used in the definition of either the input
- or the output units (i.e. the elements of the array created above by
- "LocateUnits"). The unit selected by this loop is referred to as the
- "current" unit. On each pass through this loop, we create a tree which
- is a candidate for the final required tree (the "test tree" pointed to
- by the testtree pointer initialised above). In order for a mapping to
- be possible between input and output units, the test tree created on
- each pass through this loop must be equivalent to the test tree for the
- previous pass (in other words, all the test trees must be equivalent).
- We break out of the loop (and return a NULL Mapping) as soon as we find
- a test tree which differs from the previous test tree. */
- for( i = 0; i < nunits; i++ ) {
-
-/* Create copies of the trees describing the input and output units, in which
- all units other than the current unit are set to a constant value of 1.
- This is done by replacing OP_LDVAR nodes (i.e. nodes which "load" the
- value of a named basic unit) by OP_LDCON nodes (i.e. nodes which load
- a specified constant value) in the tree copy. */
- intemp = FixUnits( in_tree, units[ i ], status );
- outtemp = FixUnits( out_tree, units[ i ], status );
-
-/* Simplify these trees. An important side-effect of this simplification
- is that trees are "standardised" which allows them to be compared for
- equivalence. A single mathematical expression can often be represented
- in many different ways (for instance "A/B" is equivalent to "(B**(-1))*A").
- Standardisation is a process of forcing all equivalent representations
- into a single "standard" form. Without standardisation, trees representing
- the above two expressions would not be considered to be equivalent
- since thy would contain different nodes and have different structures.
- As a consequence of this standardisation, the "simplification" performed
- by SimplifyTree can sometimes actually make the tree more complicated
- (in terms of the number of nodes in the tree). */
- SimplifyTree( &intemp, 1, status );
- SimplifyTree( &outtemp, 1, status );
-
-/* If either of the simplified trees does not depend on the current unit,
- then the node at the head of the simplified tree will have a constant
- value (because all the units other than the current unit have been fixed
- to a constant value of 1.0 above by FixUnits, leaving only the current
- unit to vary in value). If both simplified trees are constants, then
- neither tree depends on the current basic unit (i.e. references to the
- current basic unit cancel out within each string expression - for
- instance if converting from "m.s.Hz" to "km" and the current unit
- is "s", then the "s.Hz" term will cause the "s" units to cancel out). In
- this case ignore this basic unit and pass on to the next. */
- if( outtemp->con != AST__BAD && intemp->con != AST__BAD ) {
-
-/* If just one simplified tree is constant, then the two units cannot
- match since one depends on the current basic unit and the other does
- not. Free any test tree from previous passes and break out of the loop. */
- } else if( outtemp->con != AST__BAD || intemp->con != AST__BAD ) {
- intemp = FreeTree( intemp, status );
- outtemp = FreeTree( outtemp, status );
- testtree = FreeTree( testtree, status );
- break;
-
-/* If neither simplified tree is constant, both depend on the current
- basic unit and so we can continue to see if their dependencies are
- equivalent. */
- } else {
-
-/* We are going to create a new tree which is the inverse of the above
- simplified "intemp" tree. That is, the new tree will have a head node
- corresponding to the current unit, and a single non-constant leaf node
- corresponding to the input units. Create an OP_LDVAR node which can be
- used as the leaf node for this inverted tree. If the input tree is
- inverted successfully, this root node becomes part of the inverted tree,
- and so does not need to be freed explicitly (it will be freed when the
- inverted tree is freed). */
- src = NewNode( NULL, OP_LDVAR, status );
- if( astOK ) src->name = astStore( NULL, "input_units", 12 );
-
-/* Now produce the inverted input tree. If the tree cannot be inverted, a
- null pointer is returned. Check for this. Otherwise a pointer to the
- UnitNode at the head of the inverted tree is returned. */
- inv = InvertTree( intemp, src, status );
- if( inv ) {
-
-/* Concatenate this tree (which goes from "input units" to "current unit")
- with the simplified output tree (which goes from "current unit" to
- "output units"), to get a new tree which goes from input units to output
- units. */
- totaltree = ConcatTree( inv, outtemp, status );
-
-/* Simplify this tree. */
- SimplifyTree( &totaltree, 1, status );
-
-/* Compare this simplified tree with the tree produced for the previous
- unit (if any). If they differ, we cannot map between the supplied
- units so annul the test tree and break out of the loop. If this is the
- first unit to be tested, use the total tree as the test tree for the
- next unit. */
- if( testtree ) {
- if( CmpTree( totaltree, testtree, 0, status ) ) testtree = FreeTree( testtree, status );
- totaltree = FreeTree( totaltree, status );
- if( !testtree ) break;
- } else {
- testtree = totaltree;
- }
- }
-
-/* If the input tree was inverted, free the inverted tree. */
- if( inv ) {
- inv = FreeTree( inv, status );
-
-/* If the input tree could not be inverted, we cannot convert between input
- and output units. Free the node which was created to be the root of the
- inverted tree (and which has consequently not been incorporated into the
- inverted tree), free any testtree and break out of the loop. */
- } else {
- src = FreeTree( src, status );
- testtree = FreeTree( testtree, status );
- break;
- }
- }
-
-/* Free the other trees. */
- intemp = FreeTree( intemp, status );
- outtemp = FreeTree( outtemp, status );
-
- }
-
-/* If all the basic units used by either of the supplied system of units
- produced the same test tree, leave the "swap in and out units" loop. */
- if( testtree ) break;
-
- }
-
-/* If the input and output units have been swapped, swap them back to
- their original order, and invert the test tree (if there is one). */
- if( ipass > 0 ) {
- tmp = in_tree;
- in_tree = out_tree;
- out_tree = tmp;
- if( testtree ) {
- src = NewNode( NULL, OP_LDVAR, status );
- if( astOK ) src->name = astStore( NULL, "input_units", 12 );
- newtest = InvertTree( testtree, src, status );
- FreeTree( testtree, status );
- testtree = newtest;
- if( !newtest ) src = FreeTree( src, status );
- }
- }
-
-/* If all the basic units used by either of the supplied system of units
- produced the same test tree, create a Mapping which is equivalent to the
- test tree and return it. */
- if( testtree ) {
- result = MakeMapping( testtree, status );
-
-/* We now go on to produce the output axis label from the supplied input
- axis label. Get a tree of UnitNodes which describes the supplied label
- associated with the input axis. The tree will have single OP_LDVAR node
- corresponding to the basic label (i.e. the label without any single
- argument functions or exponentiation operators applied). */
- if( in_lab && astOK ) {
-
-/* Get a pointer to the first non-blank character, and store the number of
- characters to examine (this excludes any trailing white space). */
- exp = in_lab;
- while( isspace( *exp ) ) exp++;
- c = exp + strlen( exp ) - 1;
- while( c >= exp && isspace( *c ) ) c--;
- nc = c - exp + 1;
-
-/* Create the tree. */
- labtree = MakeLabelTree( exp, nc, status );
- if( astOK ) {
-
-/* Concatenate this tree (which goes from "basic label" to "input label")
- with the test tree found above (which goes from "input units" to "output
- units"), to get a tree which goes from basic label to output label. */
- totlabtree = ConcatTree( labtree, testtree, status );
-
-/* Simplify this tree. */
- SimplifyTree( &totlabtree, 1, status );
-
-/* Create the output label from this tree. */
- *out_lab = (char *) MakeExp( totlabtree, 0, 1, status );
-
-/* Free the trees. */
- totlabtree = FreeTree( totlabtree, status );
- labtree = FreeTree( labtree, status );
-
-/* Report a context error if the input label could not be parsed. */
- } else {
- astError( AST__BADUN, "astUnitMapper: Error parsing axis "
- "label '%s'.", status, in_lab );
- }
- }
-
-/* Free the units tree. */
- testtree = FreeTree( testtree, status );
-
- }
- }
-
-/* Free resources. */
- in_tree = FreeTree( in_tree, status );
- out_tree = FreeTree( out_tree, status );
- units = astFree( units );
-
-/* If an error has occurred, annul the returned Mapping. */
- if( !astOK ) {
- result = astAnnul( result );
- if( in_lab ) *out_lab = astFree( *out_lab );
- }
-
-/* Return the result. */
- return result;
-
-}
-
-const char *astUnitNormaliser_( const char *in, int *status ){
-/*
-*+
-* Name:
-* astUnitNormalizer
-
-* Purpose:
-* Normalise a unit string into FITS-WCS format.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "unit.h"
-* const char *astUnitNormaliser( const char *in )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* This function returns a standard FITS-WCS form of the supplied unit
-* string.
-
-* Parameters:
-* in
-* A string representation of the units, for instance "km/h".
-
-* Returned Value:
-* A pointer to a dynamically allocated string holding the normalized
-* unit string. It should be freed using astFree when no longer needed.
-
-* Notes:
-* - An error will be reported if the units string cannot be parsed.
-* - NULL is returned if this function is invoked with the
-* global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- UnitNode *in_tree;
- double dval;
- const char *result;
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Parse the input units string, producing a tree of UnitNodes which
- represents the input units. A pointer to the UnitNode at the head of
- the tree is returned if succesfull. Report a context message if this
- fails. */
- in_tree = CreateTree( in, 0, 1, status );
- if( in_tree ) {
-
-/* Simplify the units expression, only doing genuine simplifications. */
- SimplifyTree( &in_tree, 1, status );
-
-/* Invert literal constant unit multipliers. This is because a constant of
- say 1000 for a unit of "m" means "multiply the value in metres by 1000",
- but a unit string of "1000 m" means "value in units of 1000 m" (i.e.
- *divide* the value in metres by 1000). */
- InvertConstants( &in_tree, status );
-
-/* Convert the tree into string form. */
- result = MakeExp( in_tree, 2, 1, status );
-
-/* If the result is a constant value, return a blank string. */
- if( 1 == astSscanf( result, "%lg", &dval ) ) {
- *((char *) result) = 0;
- }
-
-/* Free the tree. */
- in_tree = FreeTree( in_tree, status );
-
- } else {
- astError( AST__BADUN, "astUnitNormaliser: Error parsing input "
- "units string '%s'.", status, in );
- }
-
-/* Return the result */
- return result;
-}
-
-static int Ustrcmp( const char *a, const char *b, int *status ){
-/*
-* Name:
-* Ustrcmp
-
-* Purpose:
-* A case blind version of strcmp.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* int Ustrcmp( const char *a, const char *b, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* Returns 0 if there are no differences between the two strings, and 1
-* otherwise. Comparisons are case blind.
-
-* Parameters:
-* a
-* Pointer to first string.
-* b
-* Pointer to second string.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero if the strings match, otherwise one.
-
-* Notes:
-* - This function does not consider the sign of the difference between
-* the two strings, whereas "strcmp" does.
-* - This function attempts to execute even if an error has occurred.
-
-*/
-
-/* Local Variables: */
- const char *aa; /* Pointer to next "a" character */
- const char *bb; /* Pointer to next "b" character */
- int ret; /* Returned value */
-
-/* Initialise the returned value to indicate that the strings match. */
- ret = 0;
-
-/* Initialise pointers to the start of each string. */
- aa = a;
- bb = b;
-
-/* Loop round each character. */
- while( 1 ){
-
-/* We leave the loop if either of the strings has been exhausted. */
- if( !(*aa ) || !(*bb) ){
-
-/* If one of the strings has not been exhausted, indicate that the
- strings are different. */
- if( *aa || *bb ) ret = 1;
-
-/* Break out of the loop. */
- break;
-
-/* If neither string has been exhausted, convert the next characters to
- upper case and compare them, incrementing the pointers to the next
- characters at the same time. If they are different, break out of the
- loop. */
- } else {
-
- if( toupper( (int) *(aa++) ) != toupper( (int) *(bb++) ) ){
- ret = 1;
- break;
- }
-
- }
-
- }
-
-/* Return the result. */
- return ret;
-
-}
-
-static int Ustrncmp( const char *a, const char *b, size_t n, int *status ){
-/*
-* Name:
-* Ustrncmp
-
-* Purpose:
-* A case blind version of strncmp.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unit.h"
-* int Ustrncmp( const char *a, const char *b, size_t n, int *status )
-
-* Class Membership:
-* Unit member function.
-
-* Description:
-* Returns 0 if there are no differences between the first "n"
-* characters of the two strings, and 1 otherwise. Comparisons are
-* case blind.
-
-* Parameters:
-* a
-* Pointer to first string.
-* b
-* Pointer to second string.
-* n
-* The maximum number of characters to compare.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero if the strings match, otherwise one.
-
-* Notes:
-* - This function does not consider the sign of the difference between
-* the two strings, whereas "strncmp" does.
-* - This function attempts to execute even if an error has occurred.
-
-*/
-
-/* Local Variables: */
- const char *aa; /* Pointer to next "a" character */
- const char *bb; /* Pointer to next "b" character */
- int i; /* Character index */
- int ret; /* Returned value */
-
-
-/* Initialise the returned value to indicate that the strings match. */
- ret = 0;
-
-/* Check pointer have been supplied. */
- if( !a || !b ) return ret;
-
-/* Initialise pointers to the start of each string. */
- aa = a;
- bb = b;
-
-/* Compare up to "n" characters. */
- for( i = 0; i < (int) n; i++ ){
-
-/* We leave the loop if either of the strings has been exhausted. */
- if( !(*aa ) || !(*bb) ){
-
-/* If one of the strings has not been exhausted, indicate that the
- strings are different. */
- if( *aa || *bb ) ret = 1;
-
-/* Break out of the loop. */
- break;
-
-/* If neither string has been exhausted, convert the next characters to
- upper case and compare them, incrementing the pointers to the next
- characters at the same time. If they are different, break out of the
- loop. */
- } else {
-
- if( toupper( (int) *(aa++) ) != toupper( (int) *(bb++) ) ){
- ret = 1;
- break;
- }
-
- }
-
- }
-
-/* Return the result. */
- return ret;
-
-}
-
-
-
-
-
-
-
-
-
-
-
-
-/* The rest of this file contains functions which are of use for debugging
- this module. They are usually commented out.
-
-static const char *DisplayTree( UnitNode *node, int ind ) {
- int i;
- char buf[200];
- const char *result;
- char *a;
- const char *arg[ 2 ];
- int rl;
- int slen;
- const opsym[ 100 ];
-
- result = "";
-
- for( i = 0; i < ind; i++ ) buf[ i ] = ' ';
- buf[ ind ] = 0;
-
- if( !node ) {
- printf( "%s <null>\n", buf );
- } else {
-
- printf( "%s Code: '%s' (%d)\n", buf, OpName( node->opcode ), node->opcode );
- printf( "%s Narg: %d\n", buf, node->narg );
- printf( "%s Constant: %g\n", buf, node->con );
- printf( "%s Name: %s\n", buf, node->name?node->name:"" );
- printf( "%s Unit: %s\n", buf, node->unit?node->unit->sym:"" );
- printf( "%s Mult: %s\n", buf, node->mult?node->mult->sym:"" );
-
- OpSym( node, opsym );
- slen = strlen( opsym );
- rl = slen;
-
- if( node->narg == 0 ) {
- result = astMalloc( rl + 1 );
- if( astOK ) strcpy( (char *) result, opsym );
-
- } else if( node->narg == 1 ) {
- rl += 2;
- printf( "%s Arg 0:\n", buf );
- arg[ 0 ] = DisplayTree( (node->arg)[ 0 ], ind + 2 );
- rl += strlen( arg[ 0 ] );
-
- result = astMalloc( rl + 1 );
- if( astOK ) {
- a = (char *) result;
- strcpy( a, opsym );
- a += slen;
- *(a++) = '(';
- strcpy( a, arg[0] );
- a += strlen( arg[ 0 ] );
- *(a++) = ')';
- }
-
- } else {
- rl += 4;
- for( i = 0; i < node->narg; i++ ) {
- printf( "%s Arg %d:\n", buf, i );
- arg[ i ] = DisplayTree( (node->arg)[ i ], ind + 2 );
- rl += strlen( arg[ i ] );
- }
-
- result = astMalloc( rl + 1 );
- if( astOK ) {
- a = (char *) result;
- *(a++) = '(';
- strcpy( a, arg[0] );
- a += strlen( arg[ 0 ] );
- *(a++) = ')';
- strcpy( a, opsym );
- a += slen;
- *(a++) = '(';
- strcpy( a, arg[1] );
- a += strlen( arg[ 1 ] );
- *(a++) = ')';
- }
- }
- }
-
- if( !astOK ) {
- astFree( (void *) result );
- result = "";
- }
-
- return result;
-}
-
-static const char *OpName( Oper op ) {
- const char *name;
-
- if( op == OP_LDCON ) {
- name = "LDCON";
- } else if( op == OP_LDVAR ) {
- name = "LDVAR";
- } else if( op == OP_LOG ) {
- name = "LOG";
- } else if( op == OP_LN ) {
- name = "LN";
- } else if( op == OP_EXP ) {
- name = "EXP";
- } else if( op == OP_SQRT ) {
- name = "SQRT";
- } else if( op == OP_POW ) {
- name = "POW";
- } else if( op == OP_DIV ) {
- name = "DIV";
- } else if( op == OP_MULT ) {
- name = "MULT";
- } else if( op == OP_LDPI ) {
- name = "LDPI";
- } else if( op == OP_LDE ) {
- name = "LDE";
- } else if( op == OP_NULL ) {
- name = "NULL";
- } else {
- name = "<unknown op code>";
- }
-
- return name;
-}
-
-static void OpSym( UnitNode *node, char *buff ) {
- const char *sym = NULL;
-
- if( node->con != AST__BAD ) {
- sprintf( buff, "%g", node->con );
-
- } else if( node->opcode == OP_LDVAR ) {
- sym = node->name;
-
- } else if( node->opcode == OP_LOG ) {
- sym = "log";
-
- } else if( node->opcode == OP_LN ) {
- sym = "ln";
-
- } else if( node->opcode == OP_EXP ) {
- sym = "exp";
-
- } else if( node->opcode == OP_SQRT ) {
- sym = "sqrt";
-
- } else if( node->opcode == OP_POW ) {
- sym = "**";
-
- } else if( node->opcode == OP_DIV ) {
- sym = "/";
-
- } else if( node->opcode == OP_MULT ) {
- sym = "*";
-
- } else if( node->opcode == OP_NULL ) {
- sym = "NULL";
-
- } else {
- sym = "<unknown op code>";
- }
-
- if( sym ) strcpy( buff, sym );
-}
-
-static const char *TreeExp( UnitNode *node ) {
- char buff[ 100 ];
- char buff2[ 100 ];
-
- if( node->narg == 0 ) {
- OpSym( node, buff );
-
- } else if( node->narg == 1 ) {
- OpSym( node, buff2 );
- sprintf( buff, "%s(%s)", buff2, TreeExp( node->arg[ 0 ] ) );
-
- } else if( node->narg == 2 ) {
- OpSym( node, buff2 );
- sprintf( buff, "(%s)%s(%s)", TreeExp( node->arg[ 0 ] ), buff2,
- TreeExp( node->arg[ 1 ] ) );
- }
-
- return astStore( NULL, buff, strlen( buff ) + 1 );
-}
-
-*/
-
-
-
-
diff --git a/ast-5.3-1/unit.h b/ast-5.3-1/unit.h
deleted file mode 100644
index 63303f1..0000000
--- a/ast-5.3-1/unit.h
+++ /dev/null
@@ -1,83 +0,0 @@
-#if !defined( UNIT_INCLUDED ) /* Include this file only once */
-#define UNIT_INCLUDED
-/*
-*+
-* Name:
-* unit.h
-
-* Purpose:
-* Define the interface to the Unit module.
-
-* Description:
-* This module defines functions which identify units and transform
-* between them.
-*
-* Note that this module is not a class implementation, although it
-* resembles one.
-
-* Functions Defined:
-* Public:
-* None.
-*
-* Protected:
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-
-* History:
-* 10-DEC-2002 (DSB):
-* Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-#include "mapping.h" /* Coordinate mappings */
-
-/* C header files. */
-/* --------------- */
-
-/* Function prototypes. */
-/* ==================== */
-#if defined(astCLASS) /* Protected */
-AstMapping *astUnitMapper_( const char *, const char *, const char *,
- char **, int * );
-const char *astUnitLabel_( const char *, int * );
-double astUnitAnalyser_( const char *, double[9], int * );
-const char *astUnitNormaliser_( const char *, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These wrap up the functions defined by this module. */
-
-#if defined(astCLASS) /* Protected */
-#define astUnitMapper(in,out,inlab,outlab) astINVOKE(O,astUnitMapper_(in,out,inlab,outlab,STATUS_PTR))
-#define astUnitAnalyser(in,powers) astUnitAnalyser_(in,powers,STATUS_PTR)
-#define astUnitNormaliser(in) astUnitNormaliser_(in,STATUS_PTR)
-#define astUnitLabel(sym) astINVOKE(O,astUnitLabel_(sym,STATUS_PTR))
-#endif
-#endif
-
-
-
diff --git a/ast-5.3-1/unitmap.c b/ast-5.3-1/unitmap.c
deleted file mode 100644
index 4bf8815..0000000
--- a/ast-5.3-1/unitmap.c
+++ /dev/null
@@ -1,1418 +0,0 @@
-/*
-*class++
-* Name:
-* UnitMap
-
-* Purpose:
-* Unit (null) Mapping.
-
-* Constructor Function:
-c astUnitMap
-f AST_UNITMAP
-
-* Description:
-* A UnitMap is a unit (null) Mapping that has no effect on the
-* coordinates supplied to it. They are simply copied. This can be
-* useful if a Mapping is required (e.g. to pass to another
-c function) but you do not want it to have any effect.
-f routine) but you do not want it to have any effect.
-* The Nin and Nout attributes of a UnitMap are always equal and
-* are specified when it is created.
-
-* Inheritance:
-* The UnitMap class inherits from the Mapping class.
-
-* Attributes:
-* The UnitMap class does not define any new attributes beyond
-* those which are applicable to all Mappings.
-
-* Functions:
-c The UnitMap class does not define any new functions beyond those
-f The UnitMap class does not define any new routines beyond those
-* which are applicable to all Mappings.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 7-FEB-1996 (RFWS):
-* Original version.
-* 13-DEC-1996 (RFWS):
-* Over-ride the astMapMerge method.
-* 8-JAN-2003 (DSB):
-* Changed private InitVtab method to protected astInitUnitMapVtab
-* method.
-* 10-MAY-2006 (DSB):
-* Override astEqual.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS UnitMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "object.h" /* Base Object class */
-#include "memory.h" /* AST memory management */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-#include "unitmap.h" /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(UnitMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(UnitMap,Class_Init)
-#define class_vtab astGLOBAL(UnitMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstUnitMapVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstUnitMap *astUnitMapId_( int, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetIsLinear( AstMapping *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-
-/* Member functions. */
-/* ================= */
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two UnitMaps are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unitmap.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* UnitMap member function (over-rides the astEqual protected
-* method inherited from the astMapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two UnitMaps are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Object (a UnitMap).
-* that
-* Pointer to the second Object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the UnitMaps are equivalent, zero otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstUnitMap *that;
- AstUnitMap *this;
- int result;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain pointers to the two UnitMap structures. */
- this = (AstUnitMap *) this_object;
- that = (AstUnitMap *) that_object;
-
-/* Check the second object is a UnitMap. We know the first is a
- UnitMap since we have arrived at this implementation of the virtual
- function. */
- if( astIsAUnitMap( that ) ) {
-
-/* Get the number of inputs check they are the same for both. */
- result = ( astGetNin( this ) == astGetNin( that ) );
-
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static int GetIsLinear( AstMapping *this_mapping, int *status ){
-/*
-* Name:
-* GetIsLinear
-
-* Purpose:
-* Return the value of the IsLinear attribute for a UnitMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void GetIsLinear( AstMapping *this, int *status )
-
-* Class Membership:
-* UnitMap member function (over-rides the protected astGetIsLinear
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns the value of the IsLinear attribute for a
-* Frame, which is always one.
-
-* Parameters:
-* this
-* Pointer to the UnitMap.
-* status
-* Pointer to the inherited status variable.
-*/
- return 1;
-}
-
-void astInitUnitMapVtab_( AstUnitMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitUnitMapVtab
-
-* Purpose:
-* Initialise a virtual function table for a UnitMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "unitmap.h"
-* void astInitUnitMapVtab( AstUnitMapVtab *vtab, const char *name )
-
-* Class Membership:
-* UnitMap vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the UnitMap class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAUnitMap) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
- provide virtual methods for this class. */
-
-/* None. */
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- object->Equal = Equal;
- mapping->MapMerge = MapMerge;
- mapping->MapSplit = MapSplit;
- mapping->Rate = Rate;
- mapping->GetIsLinear = GetIsLinear;
-
-/* Declare the class dump function. There is no copy constructor or
- destructor. */
- astSetDump( vtab, Dump, "UnitMap", "Unit (null) Mapping" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a UnitMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* UnitMap method (over-rides the protected astMapMerge method
-* inherited from the Mapping class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated UnitMap in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated UnitMap with one which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated UnitMap which is to be merged with
-* its neighbours. This should be a cloned copy of the UnitMap
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* UnitMap it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated UnitMap resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstMapping *new; /* Pointer to replacement UnitMap */
- const char *class; /* Pointer to Mapping class string */
- int i1; /* Index of first UnitMap to merge */
- int i2; /* Index of last UnitMap to merge */
- int i; /* Loop counter for Mappings */
- int ngone; /* Number of UnitMaps eliminated */
- int nin; /* Number of coordinates for UnitMap */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = -1;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* If the Mapping sequence consists of a single UnitMap, simply check
- if the asociated Invert flag is set, and clear it if necessary. */
- if ( *nmap == 1 ) {
- if ( ( *invert_list )[ 0 ] ) {
- ( *invert_list )[ 0 ] = 0;
-
-/* Note if the Mapping sequence was modified. */
- result = 0;
- }
-
-/* In series. */
-/* ========== */
-/* If a UnitMap occurs in series with any other Mapping, it can simply
- be eliminated, so annul its Mapping pointer. */
- } else if ( *nmap > 1 ) {
- if ( series ) {
- ( *map_list )[ where ] = astAnnul( ( *map_list )[ where ] );
-
-/* Loop to move any following pointers and their Invert flags down in
- the array to fill the gap, and clear the vacated elements at the
- end of the arrays. */
- for ( i = where + 1; i < *nmap; i++ ) {
- ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
- ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
- }
- ( *map_list )[ *nmap - 1 ] = NULL;
- ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
- modified element. */
- ( *nmap )--;
- result = where;
-
-/* In parallel. */
-/* ============ */
-/* If a UnitMap occurs in parallel with other Mappings, it can be
- merged with any UnitMaps on either side of itself. */
- } else {
-
-/* Initialise indices to identify any adjacent UnitMaps and the number
- of coordinates to be handled by the replacement. */
- i1 = i2 = where;
- nin = astGetNin( ( *map_list )[ where ] );
-
-/* Loop to inspect earlier Mappings, obtaining the Mapping Class name
- and checking it is "UnitMap". Quit looping as soon as any other
- class of Mapping is found. */
- while ( i1 - 1 >= 0 ) {
- class = astGetClass( ( *map_list )[ i1 - 1 ] );
- if ( !astOK || strcmp( class, "UnitMap" ) ) break;
-
-/* Update the index of the earliest UnitMap that is to be merged and
- increment the total number of coordinates involved. */
- i1--;
- nin += astGetNin( ( *map_list )[ i1 ] );
- }
-
-/* Repeat the above process to inspect any later Mappings in the
- sequence. */
- while ( i2 + 1 < *nmap ) {
- class = astGetClass( ( *map_list )[ i2 + 1 ] );
- if ( !astOK || strcmp( class, "UnitMap" ) ) break;
- i2++;
- nin += astGetNin( ( *map_list )[ i2 ] );
- }
-
-/* Calculate the net number of Mappings that can be removed from the
- sequence and check if this is zero, meaning that there were no
- adjacent UnitMaps to merge with. */
- if ( astOK ) {
- ngone = i2 - i1;
- if ( !ngone ) {
-
-/* If so, simply check if the nominated UnitMap's Invert flag is set,
- and clear it if necessary. */
- if ( ( *invert_list )[ where ] ) {
- ( *invert_list )[ where ] = 0;
-
-/* Note if the Mapping sequence was modified. */
- result = where;
- }
-
-/* If UnitMaps can be merged, create the replacement UnitMap. */
- } else {
- new = (AstMapping *) astUnitMap( nin, "", status );
- if ( astOK ) {
-
-/* Annul the pointers to all the UnitMaps that are being replaced. */
- for ( i = i1; i <= i2; i++ ) {
- ( *map_list )[ i ] = astAnnul( ( *map_list )[ i ] );
- }
-
-/* Insert the new pointer and the associated Invert flag. */
- ( *map_list )[ i1 ] = new;
- ( *invert_list )[ i1 ] = 0;
-
-/* Loop to close the resulting gap by moving subsequent elements down
- in the arrays. */
- for ( i = i2 + 1; i < *nmap; i++ ) {
- ( *map_list )[ i - ngone ] = ( *map_list )[ i ];
- ( *invert_list )[ i - ngone ] = ( *invert_list )[ i ];
- }
-
-/* Clear the vacated elements at the end. */
- for ( i = *nmap - ngone; i < *nmap; i++ ) {
- ( *map_list )[ i ] = NULL;
- ( *invert_list )[ i ] = 0;
- }
-
-/* Decrement the Mapping count and return the index of the first
- modified element. */
- ( *nmap ) -= ngone;
- result = i1;
- }
- }
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static int *MapSplit( AstMapping *this_map, int nin, const int *in, AstMapping **map, int *status ){
-/*
-* Name:
-* MapSplit
-
-* Purpose:
-* Create a Mapping representing a subset of the inputs of an existing
-* UnitMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unitmap.h"
-* int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status )
-
-* Class Membership:
-* UnitMap method (over-rides the protected astMapSplit method
-* inherited from the Mapping class).
-
-* Description:
-* This function creates a new Mapping by picking specified inputs from
-* an existing UnitMap. This is only possible if the specified inputs
-* correspond to some subset of the UnitMap outputs. That is, there
-* must exist a subset of the UnitMap outputs for which each output
-* depends only on the selected UnitMap inputs, and not on any of the
-* inputs which have not been selected. If this condition is not met
-* by the supplied UnitMap, then a NULL Mapping is returned.
-
-* Parameters:
-* this
-* Pointer to the UnitMap to be split (the UnitMap is not actually
-* modified by this function).
-* nin
-* The number of inputs to pick from "this".
-* in
-* Pointer to an array of indices (zero based) for the inputs which
-* are to be picked. This array should have "nin" elements. If "Nin"
-* is the number of inputs of the supplied UnitMap, then each element
-* should have a value in the range zero to Nin-1.
-* map
-* Address of a location at which to return a pointer to the new
-* Mapping. This Mapping will have "nin" inputs (the number of
-* outputs may be different to "nin"). A NULL pointer will be
-* returned if the supplied UnitMap has no subset of outputs which
-* depend only on the selected inputs.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated array of ints. The number of
-* elements in this array will equal the number of outputs for the
-* returned Mapping. Each element will hold the index of the
-* corresponding output in the supplied UnitMap. The array should be
-* freed using astFree when no longer needed. A NULL pointer will
-* be returned if no output Mapping can be created.
-
-* Notes:
-* - If this function is invoked with the global error status set,
-* or if it should fail for any reason, then NULL values will be
-* returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
- AstUnitMap *this; /* Pointer to UnitMap structure */
- int *result; /* Pointer to returned array */
- int i; /* Loop count */
- int iin; /* Mapping input index */
- int mnin; /* No. of Mapping inputs */
- int ok; /* Are input indices OK? */
-
-/* Initialise */
- result = NULL;
- *map = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the UnitMap structure. */
- this = (AstUnitMap *) this_map;
-
-/* Allocate memory for the returned array and create a UnitMap with the
- required number of axes. */
- result = astMalloc( sizeof( int )*(size_t) nin );
- *map = (AstMapping *) astUnitMap( nin, "", status );
-
-/* Check pointers can be used safely. */
- if( astOK ) {
-
-/* Store the required output axis indices. At the same time check that each
- axis is valid. */
- mnin = astGetNin( this );
- ok = 1;
- for( i = 0; i < nin; i++ ) {
- iin = in[ i ];
- if( iin >= 0 && iin < mnin ) {
- result[ i ] = iin;
- } else {
- ok = 0;
- break;
- }
- }
-
-/* If the "in" array contained any invalid values, free the returned
- resources. */
- if( !ok ) {
- result = astFree( result );
- *map = astAnnul( *map );
- }
- }
-
-/* Free returned resources if an error has occurred. */
- if( !astOK ) {
- result = astFree( result );
- *map = astAnnul( *map );
- }
-
-/* Return the list of output indices. */
- return result;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-* Name:
-* Rate
-
-* Purpose:
-* Calculate the rate of change of a Mapping output.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unitmap.h"
-* result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-* Class Membership:
-* UnitMap member function (overrides the astRate method inherited
-* from the Mapping class ).
-
-* Description:
-* This function returns the rate of change of a specified output of
-* the supplied Mapping with respect to a specified input, at a
-* specified input position.
-
-* Parameters:
-* this
-* Pointer to the Mapping to be applied.
-* at
-* The address of an array holding the axis values at the position
-* at which the rate of change is to be evaluated. The number of
-* elements in this array should equal the number of inputs to the
-* Mapping.
-* ax1
-* The index of the Mapping output for which the rate of change is to
-* be found (output numbering starts at 0 for the first output).
-* ax2
-* The index of the Mapping input which is to be varied in order to
-* find the rate of change (input numbering starts at 0 for the first
-* input).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The rate of change of Mapping output "ax1" with respect to input
-* "ax2", evaluated at "at", or AST__BAD if the value cannot be
-* calculated.
-
-*/
-
- return ( ax1 == ax2 ) ? 1.0 : 0.0;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a UnitMap to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unitmap.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* UnitMap member function (over-rides the astTransform method inherited
-* from the Mapping class).
-
-* Description:
-* This function takes a UnitMap and a set of points encapsulated in a
-* PointSet and transforms the points so as to perform the identity
-* transformation (i.e. simply copies the coordinate values).
-
-* Parameters:
-* this
-* Pointer to the UnitMap.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation. In this case, both transformations are equivalent.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of coordinates for the UnitMap being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstPointSet *result; /* Pointer to output PointSet */
- AstUnitMap *map; /* Pointer to UnitMap to be applied */
- double **ptr_in; /* Pointer to input coordinate data */
- double **ptr_out; /* Pointer to output coordinate data */
- int coord; /* Loop counter for coordinates */
- int ncoord_in; /* Number of coordinates per input point */
- int npoint; /* Number of points */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the UnitMap. */
- map = (AstUnitMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Mapping class. This function validates
- all arguments and generates an output PointSet if necessary, but does not
- actually transform any coordinate values. */
- result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- coordinate copy needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
- PointSet and obtain pointers for accessing the input and output coordinate
- values. */
- ncoord_in = astGetNcoord( in );
- npoint = astGetNpoint( in );
- ptr_in = astGetPoints( in );
- ptr_out = astGetPoints( result );
-
-/* We need not determine whether to apply the forward or inverse
- transformation, as they are both the same. */
-
-/* Copy the coordinate values. */
-/* --------------------------- */
- if ( astOK ) {
-
-/* Loop to copy the values for each coordinate. Use a memory copy for speed. */
- for ( coord = 0; coord < ncoord_in; coord++ ) {
- (void) memcpy( (void *) ptr_out[ coord ],
- (const void *) ptr_in[ coord ],
- sizeof( double ) * (size_t) npoint );
- }
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-/* Copy constructor. */
-/* ----------------- */
-/* No copy constructor is needed, as a byte-by-byte copy suffices. */
-
-/* Destructor. */
-/* ----------- */
-/* No destructor is needed as no memory, etc. needs freeing. */
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for UnitMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the UnitMap class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the UnitMap whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstUnitMap *this; /* Pointer to the UnitMap structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the UnitMap structure. */
- this = (AstUnitMap *) this_object;
-
-/* Write out values representing the instance variables for the
- UnitMap class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* There are no values to write, so return without further action. */
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAUnitMap and astCheckUnitMap functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(UnitMap,Mapping)
-astMAKE_CHECK(UnitMap)
-
-AstUnitMap *astUnitMap_( int ncoord, const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astUnitMap
-f AST_UNITMAP
-
-* Purpose:
-* Create a UnitMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "unitmap.h"
-c AstUnitMap *astUnitMap( int ncoord, const char *options, ... )
-f RESULT = AST_UNITMAP( NCOORD, OPTIONS, STATUS )
-
-* Class Membership:
-* UnitMap constructor.
-
-* Description:
-* This function creates a new UnitMap and optionally initialises
-* its attributes.
-*
-* A UnitMap is a unit (null) Mapping that has no effect on the
-* coordinates supplied to it. They are simply copied. This can be
-* useful if a Mapping is required (e.g. to pass to another
-c function) but you do not want it to have any effect.
-f routine) but you do not want it to have any effect.
-
-* Parameters:
-c ncoord
-f NCOORD = INTEGER (Given)
-* The number of input and output coordinates (these numbers are
-* necessarily the same).
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new UnitMap. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new UnitMap. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astUnitMap()
-f AST_UNITMAP = INTEGER
-* A pointer to the new UnitMap.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstUnitMap *new; /* Pointer to new UnitMap */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the UnitMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitUnitMap( NULL, sizeof( AstUnitMap ), !class_init, &class_vtab,
- "UnitMap", ncoord );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- UnitMap's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new UnitMap. */
- return new;
-}
-
-AstUnitMap *astUnitMapId_( int ncoord, const char *options, ... ) {
-/*
-* Name:
-* astUnitMapId_
-
-* Purpose:
-* Create a UnitMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "unitmap.h"
-* AstUnitMap *astUnitMapId_( int ncoord, const char *options, ... )
-
-* Class Membership:
-* UnitMap constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astUnitMap constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astUnitMap_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astUnitMap_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astUnitMap_.
-
-* Returned Value:
-* The ID value associated with the new UnitMap.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstUnitMap *new; /* Pointer to new UnitMap */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the UnitMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitUnitMap( NULL, sizeof( AstUnitMap ), !class_init, &class_vtab,
- "UnitMap", ncoord );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- UnitMap's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new UnitMap. */
- return astMakeId( new );
-}
-
-AstUnitMap *astInitUnitMap_( void *mem, size_t size, int init,
- AstUnitMapVtab *vtab, const char *name,
- int ncoord, int *status ) {
-/*
-*+
-* Name:
-* astInitUnitMap
-
-* Purpose:
-* Initialise a UnitMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "unitmap.h"
-* AstUnitMap *astInitUnitMap( void *mem, size_t size, int init,
-* AstUnitMapVtab *vtab, const char *name,
-* int ncoord )
-
-* Class Membership:
-* UnitMap initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new UnitMap object. It allocates memory (if necessary) to accommodate
-* the UnitMap plus any additional data associated with the derived class.
-* It then initialises a UnitMap structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a UnitMap at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the UnitMap is to be initialised.
-* This must be of sufficient size to accommodate the UnitMap data
-* (sizeof(UnitMap)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the UnitMap (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the UnitMap
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the UnitMap's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new UnitMap.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the Object
-* astClass function).
-* ncoord
-* The number of coordinate values per point.
-
-* Returned Value:
-* A pointer to the new UnitMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstUnitMap *new; /* Pointer to new UnitMap */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitUnitMapVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Initialise a Mapping structure (the parent class) as the first component
- within the UnitMap structure, allocating memory if necessary. Specify that
- the Mapping should be defined in both the forward and inverse directions. */
- new = (AstUnitMap *) astInitMapping( mem, size, 0,
- (AstMappingVtab *) vtab, name,
- ncoord, ncoord, 1, 1 );
-
- if ( astOK ) {
-
-/* Initialise the UnitMap data. */
-/* ---------------------------- */
-/* There is nothing else to store. */
-
-/* If an error occurred, clean up by deleting the new object (if any other
- resources had been allocated, we would free these first). */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstUnitMap *astLoadUnitMap_( void *mem, size_t size,
- AstUnitMapVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadUnitMap
-
-* Purpose:
-* Load a UnitMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "unitmap.h"
-* AstUnitMap *astLoadUnitMap( void *mem, size_t size,
-* AstUnitMapVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* UnitMap loader.
-
-* Description:
-* This function is provided to load a new UnitMap using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* UnitMap structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a UnitMap at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the UnitMap is to be
-* loaded. This must be of sufficient size to accommodate the
-* UnitMap data (sizeof(UnitMap)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the UnitMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the UnitMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstUnitMap) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new UnitMap. If this is NULL, a pointer
-* to the (static) virtual function table for the UnitMap class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "UnitMap" is used instead.
-
-* Returned Value:
-* A pointer to the new UnitMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstUnitMap *new; /* Pointer to the new UnitMap */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this UnitMap. In this case the
- UnitMap belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstUnitMap );
- vtab = &class_vtab;
- name = "UnitMap";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitUnitMapVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built UnitMap. */
- new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "UnitMap" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* There are no values to read. */
-/* ---------------------------- */
-
-/* If an error occurred, clean up by deleting the new UnitMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new UnitMap pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-/* There are none of these. */
-
-
-
-
diff --git a/ast-5.3-1/unitmap.h b/ast-5.3-1/unitmap.h
deleted file mode 100644
index 9614f49..0000000
--- a/ast-5.3-1/unitmap.h
+++ /dev/null
@@ -1,288 +0,0 @@
-#if !defined( UNITMAP_INCLUDED ) /* Include this file only once */
-#define UNITMAP_INCLUDED
-/*
-*+
-* Name:
-* unitmap.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the UnitMap class.
-
-* Invocation:
-* #include "unitmap.h"
-
-* Description:
-* This include file defines the interface to the UnitMap class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The UnitMap class implements Mappings that perform an identity
-* (unit) coordinate transformation, simply by copying each
-* coordinate value from input to output (and similarly for the
-* inverse transformation). UnitMaps are therefore of little use
-* for converting coordinates, but they serve a useful role as
-* "null" Mappings in cases where a Mapping is needed (e.g. to
-* pass to a function), but no coordinate transformation is wanted.
-
-* Inheritance:
-* The UnitMap class inherits from the Mapping class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* None.
-
-* Methods Over-Ridden:
-* Public:
-* None.
-*
-* Protected:
-* astMapMerge
-* Simplify a sequence of Mappings containing a UnitMap.
-* astTransform
-* Transform a set of points.
-
-* New Methods Defined:
-* Public:
-* None.
-*
-* Protected:
-* None.
-
-* Other Class Functions:
-* Public:
-* astIsAUnitMap
-* Test class membership.
-* astUnitMap
-* Create a UnitMap.
-*
-* Protected:
-* astCheckUnitMap
-* Validate class membership.
-* astInitUnitMap
-* Initialise a UnitMap.
-* astInitUnitMapVtab
-* Initialise the virtual function table for the UnitMap class.
-* astLoadUnitMap
-* Load a UnitMap.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstUnitMap
-* UnitMap object type.
-*
-* Protected:
-* AstUnitMapVtab
-* UnitMap virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 7-FEB-1996 (RFWS):
-* Original version.
-* 13-DEC-1996 (RFWS):
-* Over-ride the astMapMerge method.
-* 8-JAN-2003 (DSB):
-* Added protected astInitUnitMapVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* UnitMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each
- object in the class (e.g. its instance variables). */
-typedef struct AstUnitMap {
-
-/* Attributes inherited from the parent class. */
- AstMapping mapping; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-/* None. */
-} AstUnitMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstUnitMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstMappingVtab mapping_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-/* None. */
-} AstUnitMapVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstUnitMapGlobals {
- AstUnitMapVtab Class_Vtab;
- int Class_Init;
-} AstUnitMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitUnitMapGlobals_( AstUnitMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(UnitMap) /* Check class membership */
-astPROTO_ISA(UnitMap) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstUnitMap *astUnitMap_( int, const char *, int *, ...);
-#else
-AstUnitMap *astUnitMapId_( int, const char *, ... )__attribute__((format(printf,2,3)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstUnitMap *astInitUnitMap_( void *, size_t, int, AstUnitMapVtab *,
- const char *, int, int * );
-
-/* Vtab initialiser. */
-void astInitUnitMapVtab_( AstUnitMapVtab *, const char *, int * );
-
-/* Loader. */
-AstUnitMap *astLoadUnitMap_( void *, size_t, AstUnitMapVtab *,
- const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-/* None. */
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckUnitMap(this) astINVOKE_CHECK(UnitMap,this,0)
-#define astVerifyUnitMap(this) astINVOKE_CHECK(UnitMap,this,1)
-
-/* Test class membership. */
-#define astIsAUnitMap(this) astINVOKE_ISA(UnitMap,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astUnitMap astINVOKE(F,astUnitMap_)
-#else
-#define astUnitMap astINVOKE(F,astUnitMapId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitUnitMap(mem,size,init,vtab,name,ncoord) \
-astINVOKE(O,astInitUnitMap_(mem,size,init,vtab,name,ncoord,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitUnitMapVtab(vtab,name) astINVOKE(V,astInitUnitMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadUnitMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadUnitMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckUnitMap to validate UnitMap pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-/* None. */
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/version.h b/ast-5.3-1/version.h
deleted file mode 100644
index 9c78dde..0000000
--- a/ast-5.3-1/version.h
+++ /dev/null
@@ -1,73 +0,0 @@
-#if !defined( VERSION_INCLUDED )
-#define VERSION_INCLUDED 1
-/*
-*+
-* Name:
-* version.h
-
-* Purpose:
-* Declare version numbers
-
-* Description:
-* Defines macros which expand to the components of the AST version
-* number, namely the major and minor version numbers, and the
-* release number. The version number as a string is available by
-* including the file config.h, which defines macros PACKAGE_STRING,
-* PACKAGE_VERSION and (equivalently to the latter) VERSION.
-*
-* For example, the version string `3.2-1' corresponds to major version
-* 3, minor version 2, release 1.
-
-* Macros defined:
-* AST__VMAJOR
-* The AST major version number
-* AST__VMINOR
-* The AST minor version number
-* AST__RELEASE
-* The AST release number
-*
-* For backwards compatibility, this module also declares macros
-* AST_MAJOR_VERS, AST_MINOR_VERS and AST_RELEASE. The AST__*
-* macros should be used in preference to these, since the latter
-* use (non-standard) single underscores.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* NG: Norman Gray (Starlink)
-
-* History:
-* 25-NOV-2003 (NG):
-* Original version
-*-
-*/
-
-/* The current version of AST is 5.3-1 */
-#define AST__VMAJOR 5
-#define AST__VMINOR 3
-#define AST__RELEASE 1
-
-/* Deprecated macros */
-#define AST_MAJOR_VERS 5
-#define AST_MINOR_VERS 3
-#define AST_RELEASE 1
-
-#endif /* #if ! defined(VERSION_INCLUDED) */
diff --git a/ast-5.3-1/wcsmap.c b/ast-5.3-1/wcsmap.c
deleted file mode 100644
index 5c30274..0000000
--- a/ast-5.3-1/wcsmap.c
+++ /dev/null
@@ -1,5770 +0,0 @@
-/*
-*class++
-* Name:
-* WcsMap
-
-* Purpose:
-* Implement a FITS-WCS sky projection.
-
-* Constructor Function:
-c astWcsMap
-f AST_WCSMAP
-
-* Description:
-* This class is used to represent sky coordinate projections as
-* described in the FITS world coordinate system (FITS-WCS) paper II
-* "Representations of Celestial Coordinates in FITS" by M. Calabretta
-* and E.W. Griesen. This paper defines a set of functions, or sky
-* projections, which transform longitude-latitude pairs representing
-* spherical celestial coordinates into corresponding pairs of Cartesian
-* coordinates (and vice versa).
-*
-* A WcsMap is a specialised form of Mapping which implements these
-* sky projections and applies them to a specified pair of coordinates.
-* All the projections in the FITS-WCS paper are supported, plus the now
-* deprecated "TAN with polynomial correction terms" projection which
-* is refered to here by the code "TPN". Using the FITS-WCS terminology,
-* the transformation is between "native spherical" and "projection
-* plane" coordinates (also called "intermediate world coordinates".
-* These coordinates may, optionally, be embedded in a space with more
-* than two dimensions, the remaining coordinates being copied unchanged.
-* Note, however, that for consistency with other AST facilities, a
-* WcsMap handles coordinates that represent angles in radians (rather
-* than the degrees used by FITS-WCS).
-*
-* The type of FITS-WCS projection to be used and the coordinates
-* (axes) to which it applies are specified when a WcsMap is first
-* created. The projection type may subsequently be determined
-* using the WcsType attribute and the coordinates on which it acts
-* may be determined using the WcsAxis(lonlat) attribute.
-*
-* Each WcsMap also allows up to 100 "projection parameters" to be
-* associated with each axis. These specify the precise form of the
-* projection, and are accessed using PVi_m attribute, where "i" is
-* the integer axis index (starting at 1), and m is an integer
-* "parameter index" in the range 0 to 99. The number of projection
-* parameters required by each projection, and their meanings, are
-* dependent upon the projection type (most projections either do not
-* use any projection parameters, or use parameters 1 and 2 associated
-* with the latitude axis). Before creating a WcsMap you should consult
-* the FITS-WCS paper for details of which projection parameters are
-* required, and which have defaults. When creating the WcsMap, you must
-* explicitly set values for all those required projection parameters
-* which do not have defaults defined in this paper.
-
-* Inheritance:
-* The WcsMap class inherits from the Mapping class.
-
-* Attributes:
-* In addition to those attributes common to all Mappings, every
-* WcsMap also has the following attributes:
-*
-* - NatLat: Native latitude of the reference point of a FITS-WCS projection
-* - NatLon: Native longitude of the reference point of a FITS-WCS projection
-* - PVi_m: FITS-WCS projection parameters
-* - PVMax: Maximum number of FITS-WCS projection parameters
-* - WcsAxis(lonlat): FITS-WCS projection axes
-* - WcsType: FITS-WCS projection type
-
-* Functions:
-c The WcsMap class does not define any new functions beyond those
-f The WcsMap class does not define any new routines beyond those
-* which are applicable to all Mappings.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 15-FEB-1996 (DSB):
-* Original version.
-* 23-MAR-1996 (DSB):
-* Added support for PointSets with more than 2 axes.
-* 14-NOV-1996 (DSB):
-* Added I/O facilities, external interface, attributes, etc.
-* 16-JAN-1997 (DSB):
-* Allowed WCSBAD as a projection type in astWcsMap.
-* 24-APR-1997 (RFWS):
-* Tidied prologues.
-* 26-SEP-1997 (DSB):
-* o Long descriptions of projections changed to include a textual
-* description as well as the three letter acronym.
-* o Added protected function astPrjDesc.
-* o String values now used instead of integers to represent
-* "choice" attributes externally (eg WcsType).
-* 8-APR-1998 (DSB):
-* Modified MapMerge so that a WcsMap can merge with its own
-* inverse when astSimplify is used.
-* 20-APR-1998 (DSB):
-* Modified MapMerge to avoid the possibility of returning an
-* empty mappings list.
-* 4-SEP-1998 (DSB):
-* Changed MapMerge to allow WcsMaps to swap with PermMaps in
-* order to bring mergable WcsMaps closer together.
-* 5-MAY-1999 (DSB):
-* More corrections to MapMerge: Cleared up errors in the use of the
-* supplied invert flags, and corrected logic for deciding which
-* neighbouring Mapping to swap with.
-* 12-JUL-1999 (DSB):
-* - Report an error if too many or two few projection parameters are
-* supplied in a WcsMap.
-* - Corrected MapMerge to prevent unset projection parameters
-* being copied to any new WcsMaps.
-* - Correct handling of invert flags in WcsPerm.
-* 16-JUL-1999 (DSB):
-* Fixed memory leak in MapMerge.
-* 11-FEB-2000 (DSB):
-* Added PVj_m attributes. Attributes ProjP(0) to ProjP(9) are now
-* aliases for PV(axlat)_0 to PV(axlat)_9. Renamed GLS projection
-* as SFL (GLS retained as alias for SFL).
-* 10-AUG-2000 (DSB):
-* MapMerge no longer simplifies a CAR projection. Previously they
-* were replaced by a UnitMap, but this removed the cylic nature of
-* the mapping (i.e. 2.PI == 0 ).
-* 6-OCT-2000 (DSB):
-* Ignore leading and trailing spaces in astWCsPrjType (some
-* CTYPE FITS keywords have appeared with trailing white space).
-* 26-SEP-2001 (DSB):
-* Changed names of all functions and structure to avoid name clashes
-* with wcslib.
-* 10-OCT-2002 (DSB):
-* Added astIsZenithal.
-* 22-OCT-2002 (DSB):
-* - GetPV now returns the FITS default value instead of AST__BAD
-* if a defaultable latitude projection parameter has not been set.
-* - A number of changes needed to support WcsLib v2.9.
-* - Added AST__TPN projection.
-* 8-JAN-2003 (DSB):
-* Changed private InitVtab method to protected astInitWcsMapVtab
-* method.
-* 4-JUN-2003 (DSB):
-* - Added attribute "NatLon".
-* - Changed to allow a user-specified fiducial point to be stored
-* in projection parameter PVi_1 and PVi_2 for the longitude axis.
-* - Changed "PVj_m" to "PVi_m" for consistency with FITS-WCS paper II.
-* 18-AUG-2003 (DSB):
-* In function Map, assign zero longitude to output positions which
-* are very close to a pole.
-* 23-SEP-2003 (DSB):
-* - Changed so that the NatLat and NatLon attributes refer to the
-* fixed values for the projections defined in FITS-WCS paper II, rather
-* than the user-defined values stored in projection parameter PVi_1 and
-* PVi_2 for the longitude axis.
-* 11-FEB-2004 (DSB):
-* Corrected axis numbering when reporting missing keywords in
-* Transform.
-* 23-APR-2004 (DSB):
-* Changes to simplification algorithm.
-* 1-SEP-2004 (DSB):
-* CopyPV rewritten to avoid assumption that the input and output
-* WcsMaps have the same number of axes and that the lon/lat axes have
-* the same indices.
-* 7-DEC-2005 (DSB):
-* Free memory allocated by calls to astReadString.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 15-FEB-2006 (DSB):
-* Use dynamic rather than static memory for the parameter arrays in
-* the AstPrjPrm structure.Override astGetObjSize. This is to
-* reduce the in-memory size of a WcsMap.
-* 10-MAY-2006 (DSB):
-* Override astEqual.
-* 10-AUG-2006 (DSB):
-* Correct astLoadWcsMap to take acount of the different number of
-* PVi_m values that can be associated with each axis.
-* 4-JAN-2007 (DSB):
-* Correct astLoadWcsMap to load the projection parameter with
-* highest index correctly.
-* 23-FEB-2007 (DSB):
-* Added HPX projection.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS WcsMap
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macros to check for equality of floating point values. We cannot
- compare bad values directory because of the danger of floating point
- exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/*
-*
-* Name:
-* MAKE_CLEAR
-
-* Purpose:
-* Implement a method to clear a single value in a multi-valued attribute.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "wcsmap.h"
-* MAKE_CLEAR(attr,component,assign,nval)
-
-* Class Membership:
-* Defined by the WcsMap class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Clear<Attribute>( AstWcsMap *this, int axis )
-*
-* and an external interface function of the form:
-*
-* void astClear<Attribute>_( AstWcsMap *this, int axis )
-*
-* which implement a method for clearing a single value in a specified
-* multi-valued attribute for an axis of a WcsMap.
-
-* Parameters:
-* attr
-* The name of the attribute to be cleared, as it appears in the function
-* name (e.g. Label in "astClearLabelAt").
-* component
-* The name of the class structure component that holds the attribute
-* value.
-* assign
-* An expression that evaluates to the value to assign to the component
-* to clear its value. The variable "axis" can be used to refer to
-* the zero-based index of the attribute component being cleared.
-* nval
-* Specifies the number of values in the multi-valued attribute. The
-* "axis" values supplied to the created function should be in the
-* range zero to (nval - 1).
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attr,component,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attr( AstWcsMap *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Validate the axis index. */ \
- if( axis < 0 || axis >= nval ){ \
- astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
- #attr " - it should be in the range 1 to %d.", status, \
- "astClear" #attr, astGetClass( this ), \
- axis + 1, nval ); \
-\
-/* Assign the "clear" value. */ \
- } else { \
- this->component[ axis ] = (assign); \
- } \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astClear##attr##_( AstWcsMap *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
- (**astMEMBER(this,WcsMap,Clear##attr))( this, axis, status ); \
-}
-
-
-/*
-*
-* Name:
-* MAKE_GET
-
-* Purpose:
-* Implement a method to get a single value in a multi-valued attribute.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "wcsmap.h"
-* MAKE_GET(attr,type,bad_value,assign,nval)
-
-* Class Membership:
-* Defined by the WcsMap class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static <Type> Get<Attribute>( AstWcsMap *this, int axis )
-*
-* and an external interface function of the form:
-*
-* <Type> astGet<Attribute>_( AstWcsMap *this, int axis )
-*
-* which implement a method for getting a single value from a specified
-* multi-valued attribute for an axis of a WcsMap.
-
-* Parameters:
-* attr
-* The name of the attribute whose value is to be obtained, as it
-* appears in the function name (e.g. Label in "astGetLabel").
-* type
-* The C type of the attribute.
-* bad_value
-* A constant value to return if the global error status is set, or if
-* the function fails.
-* assign
-* An expression that evaluates to the value to be returned. This can
-* use the string "axis" to represent the zero-based value index.
-* nval
-* Specifies the number of values in the multi-valued attribute. The
-* "axis" values supplied to the created function should be in the
-* range zero to (nval - 1).
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_GET(attr,type,bad_value,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static type Get##attr( AstWcsMap *this, int axis, int *status ) { \
- type result; /* Result to be returned */ \
-\
-/* Initialise */ \
- result = (bad_value); \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-/* Validate the axis index. */ \
- if( axis < 0 || axis >= nval ){ \
- astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
- #attr " - it should be in the range 1 to %d.", status, \
- "astGet" #attr, astGetClass( this ), \
- axis + 1, nval ); \
-\
-/* Assign the result value. */ \
- } else { \
- result = (assign); \
- } \
-\
-/* Check for errors and clear the result if necessary. */ \
- if ( !astOK ) result = (bad_value); \
-\
-/* Return the result. */ \
- return result; \
-} \
-/* External interface. */ \
-/* ------------------- */ \
-type astGet##attr##_( AstWcsMap *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return (bad_value); \
-\
-/* Invoke the required method via the virtual function table. */ \
- return (**astMEMBER(this,WcsMap,Get##attr))( this, axis, status ); \
-}
-
-/*
-*
-* Name:
-* MAKE_SET
-
-* Purpose:
-* Implement a method to set a single value in a multi-valued attribute
-* for a WcsMap.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "wcsmap.h"
-* MAKE_SET(attr,type,component,assign,nval)
-
-* Class Membership:
-* Defined by the WcsMap class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static void Set<Attribute>( AstWcsMap *this, int axis, <Type> value )
-*
-* and an external interface function of the form:
-*
-* void astSet<Attribute>_( AstWcsMap *this, int axis, <Type> value )
-*
-* which implement a method for setting a single value in a specified
-* multi-valued attribute for a WcsMap.
-
-* Parameters:
-* attr
-* The name of the attribute to be set, as it appears in the function
-* name (e.g. Label in "astSetLabelAt").
-* type
-* The C type of the attribute.
-* component
-* The name of the class structure component that holds the attribute
-* value.
-* assign
-* An expression that evaluates to the value to be assigned to the
-* component.
-* nval
-* Specifies the number of values in the multi-valued attribute. The
-* "axis" values supplied to the created function should be in the
-* range zero to (nval - 1).
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attr,type,component,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attr( AstWcsMap *this, int axis, type value, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Validate the axis index. */ \
- if( axis < 0 || axis >= nval ){ \
- astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
- #attr " - it should be in the range 1 to %d.", status, \
- "astSet" #attr, astGetClass( this ), \
- axis + 1, nval ); \
-\
-/* Store the new value in the structure component. */ \
- } else { \
- this->component[ axis ] = (assign); \
- } \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astSet##attr##_( AstWcsMap *this, int axis, type value, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
- (**astMEMBER(this,WcsMap,Set##attr))( this, axis, value, status ); \
-}
-
-/*
-*
-* Name:
-* MAKE_TEST
-
-* Purpose:
-* Implement a method to test if a single value has been set in a
-* multi-valued attribute for a class.
-
-* Type:
-* Private macro.
-
-* Synopsis:
-* #include "wcsmap.h"
-* MAKE_TEST(attr,assign,nval)
-
-* Class Membership:
-* Defined by the WcsMap class.
-
-* Description:
-* This macro expands to an implementation of a private member function of
-* the form:
-*
-* static int Test<Attribute>( AstWcsMap *this, int axis )
-*
-* and an external interface function of the form:
-*
-* int astTest<Attribute>_( AstWcsMap *this, int axis )
-*
-* which implement a method for testing if a single value in a specified
-* multi-valued attribute has been set for a class.
-
-* Parameters:
-* attr
-* The name of the attribute to be tested, as it appears in the function
-* name (e.g. Label in "astTestLabelAt").
-* assign
-* An expression that evaluates to 0 or 1, to be used as the returned
-* value. This can use the string "axis" to represent the zero-based
-* index of the value within the attribute.
-* nval
-* Specifies the number of values in the multi-valued attribute. The
-* "axis" values supplied to the created function should be in the
-* range zero to (nval - 1).
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_TEST(attr,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static int Test##attr( AstWcsMap *this, int axis, int *status ) { \
- int result; /* Value to return */ \
-\
-/* Initialise */ \
- result = 0; \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return result; \
-\
-\
-/* Validate the axis index. */ \
- if( axis < 0 || axis >= nval ){ \
- astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
- #attr " - it should be in the range 1 to %d.", status, \
- "astTest" #attr, astGetClass( this ), \
- axis + 1, nval ); \
-\
-/* Assign the result value. */ \
- } else { \
- result = (assign); \
- } \
-\
-/* Check for errors and clear the result if necessary. */ \
- if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
- return result; \
-} \
-/* External interface. */ \
-/* ------------------- */ \
-int astTest##attr##_( AstWcsMap *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
- if ( !astOK ) return 0; \
-\
-/* Invoke the required method via the virtual function table. */ \
- return (**astMEMBER(this,WcsMap,Test##attr))( this, axis, status ); \
-}
-
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "globals.h" /* Thread-safe global data access */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-#include "unitmap.h" /* Unit mappings */
-#include "permmap.h" /* Axis permutation mappings */
-#include "wcsmap.h" /* Interface definition for this class */
-#include "pal.h" /* SLALIB function prototypes */
-#include "channel.h" /* I/O channels */
-#include "proj.h" /* WCSLIB projections and WCSLIB_MXPAR */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-
-/* Local Type Definitions. */
-/* ----------------------- */
-/* This structure is used to hold information describing a WCSLIB
- projection. */
-typedef struct PrjData {
- int prj; /* WCSLIB projection identifier value */
- int mxpar; /* Max index for a lat axis projection param */
- int mxpar2; /* Max index for a lon axis projection param */
- char desc[60]; /* Long projection description */
- char ctype[5]; /* FITS CTYPE identifying string */
- int (* WcsFwd)(double, double, struct AstPrjPrm *, double *, double *);
- /* Pointer to forward projection function */
- int (* WcsRev)(double, double, struct AstPrjPrm *, double *, double *);
- /* Pointer to reverse projection function */
- double theta0; /* Default native latitude of fiducial point */
-} PrjData;
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static int *(* parent_mapsplit)( AstMapping *, int, const int *, AstMapping **, int * );
-
-/* The following array of PrjData structured describes each of the WCSLIB
- projections. The last entry in the list should be for the AST__WCSBAD
- projection. This marks the end of the list. */
-static PrjData PrjInfo[] = {
- { AST__AZP, 2, 4, "zenithal perspective", "-AZP", astAZPfwd, astAZPrev, AST__DPIBY2 },
- { AST__SZP, 3, 4, "slant zenithal perspective", "-SZP", astSZPfwd, astSZPrev, AST__DPIBY2 },
- { AST__TAN, 0, 4, "gnomonic", "-TAN", astTANfwd, astTANrev, AST__DPIBY2 },
- { AST__STG, 0, 4, "stereographic", "-STG", astSTGfwd, astSTGrev, AST__DPIBY2 },
- { AST__SIN, 2, 4, "orthographic", "-SIN", astSINfwd, astSINrev, AST__DPIBY2 },
- { AST__ARC, 0, 4, "zenithal equidistant", "-ARC", astARCfwd, astARCrev, AST__DPIBY2 },
- { AST__ZPN, WCSLIB_MXPAR, 4, "zenithal polynomial", "-ZPN", astZPNfwd, astZPNrev, AST__DPIBY2 },
- { AST__ZEA, 0, 4, "zenithal equal area", "-ZEA", astZEAfwd, astZEArev, AST__DPIBY2 },
- { AST__AIR, 1, 4, "Airy", "-AIR", astAIRfwd, astAIRrev, AST__DPIBY2 },
- { AST__CYP, 2, 4, "cylindrical perspective", "-CYP", astCYPfwd, astCYPrev, 0.0 },
- { AST__CEA, 1, 4, "cylindrical equal area", "-CEA", astCEAfwd, astCEArev, 0.0 },
- { AST__CAR, 0, 4, "Cartesian", "-CAR", astCARfwd, astCARrev, 0.0 },
- { AST__MER, 0, 4, "Mercator", "-MER", astMERfwd, astMERrev, 0.0 },
- { AST__SFL, 0, 4, "Sanson-Flamsteed", "-SFL", astSFLfwd, astSFLrev, 0.0 },
- { AST__PAR, 0, 4, "parabolic", "-PAR", astPARfwd, astPARrev, 0.0 },
- { AST__MOL, 0, 4, "Mollweide", "-MOL", astMOLfwd, astMOLrev, 0.0 },
- { AST__AIT, 0, 4, "Hammer-Aitoff", "-AIT", astAITfwd, astAITrev, 0.0 },
- { AST__COP, 2, 4, "conical perspective", "-COP", astCOPfwd, astCOPrev, AST__BAD },
- { AST__COE, 2, 4, "conical equal area", "-COE", astCOEfwd, astCOErev, AST__BAD },
- { AST__COD, 2, 4, "conical equidistant", "-COD", astCODfwd, astCODrev, AST__BAD },
- { AST__COO, 2, 4, "conical orthomorphic", "-COO", astCOOfwd, astCOOrev, AST__BAD },
- { AST__BON, 1, 4, "Bonne's equal area", "-BON", astBONfwd, astBONrev, 0.0 },
- { AST__PCO, 0, 4, "polyconic", "-PCO", astPCOfwd, astPCOrev, 0.0 },
- { AST__TSC, 0, 4, "tangential spherical cube", "-TSC", astTSCfwd, astTSCrev, 0.0 },
- { AST__CSC, 0, 4, "cobe quadrilateralized spherical cube", "-CSC", astCSCfwd, astCSCrev, 0.0 },
- { AST__QSC, 0, 4, "quadrilateralized spherical cube", "-QSC", astQSCfwd, astQSCrev, 0.0 },
- { AST__NCP, 2, 4, "AIPS north celestial pole", "-NCP", NULL, NULL, 0.0 },
- { AST__GLS, 0, 4, "sinusoidal", "-GLS", astSFLfwd, astSFLrev, 0.0 },
- { AST__HPX, 2, 4, "HEALPix", "-HPX", astHPXfwd, astHPXrev, 0.0 },
- { AST__TPN, WCSLIB_MXPAR, WCSLIB_MXPAR, "gnomonic polynomial", "-TPN", astTPNfwd, astTPNrev, AST__DPIBY2 },
- { AST__WCSBAD, 0, 4, "<null>", " ", NULL, NULL, 0.0 } };
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->GetAttrib_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(WcsMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(WcsMap,Class_Init)
-#define class_vtab astGLOBAL(WcsMap,Class_Vtab)
-#define getattrib_buff astGLOBAL(WcsMap,GetAttrib_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-static char getattrib_buff[ 101 ];
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstWcsMapVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstWcsMap *astWcsMapId_( int, int, int, int, const char *options, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static int GetObjSize( AstObject *, int * );
-static double GetPV( AstWcsMap *, int, int, int * );
-static int TestPV( AstWcsMap *, int, int, int * );
-static void ClearPV( AstWcsMap *, int, int, int * );
-static void SetPV( AstWcsMap *, int, int, double, int * );
-
-static int GetPVMax( AstWcsMap *, int, int * );
-static int GetWcsType( AstWcsMap *, int * );
-static double GetNatLat( AstWcsMap *, int * );
-static double GetNatLon( AstWcsMap *, int * );
-static int GetWcsAxis( AstWcsMap *, int, int * );
-
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const PrjData *FindPrjData( int, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static int CanMerge( AstMapping *, int, AstMapping *, int, int * );
-static int CanSwap( AstMapping *, AstMapping *, int, int, int *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetNP( AstWcsMap *, int, int * );
-static int IsZenithal( AstWcsMap *, int * );
-static int Map( AstWcsMap *, int, int, double *, double *, double *, double *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void CopyPV( AstWcsMap *, AstWcsMap *, int * );
-static void Delete( AstObject *obj, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void FreePV( AstWcsMap *, int * );
-static void InitPrjPrm( AstWcsMap *, int * );
-static void LongRange( const PrjData *, struct AstPrjPrm *, double *, double *, int * );
-static void PermGet( AstPermMap *, int **, int **, double **, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void WcsPerm( AstMapping **, int *, int, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-
-/* Member functions. */
-/* ================= */
-static int CanMerge( AstMapping *map1, int inv1, AstMapping *map2, int inv2, int *status ){
-/*
-*
-* Name:
-* CanMerge
-
-* Purpose:
-* Checks if two WcsMaps can be merged.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* int CanMerge( AstMapping *map1, int inv1, AstMapping *map2, int inv2, int *status )
-
-* Class Membership:
-* WcsMap internal utility function.
-
-* Description:
-* This function checks the two supplied Mappings to see if they are
-* two WcsMaps which can be merged. This is only possible if they
-* form an inverse pair.
-
-* Parameters:
-* map1
-* A pointer to the first mapping.
-* map2
-* A pointer to the second mapping.
-* inv1
-* The invert flag to use with the first mapping.
-* inv2
-* The invert flag to use with the second mapping.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* 1 if the WcsMaps can be merged, zero otherwise.
-
-*/
-
-/* Local Variables: */
- AstWcsMap *wcs1; /* Pointer to first WcsMap */
- AstWcsMap *wcs2; /* Pointer to second WcsMap */
- int m; /* Projection parameter index */
- int ret; /* Can the Mappings be merged? */
- int i; /* Axis index */
-
-/* Initialise the returned value. */
- ret = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return ret;
-
-/* Both Mappings must be WcsMaps to merge. */
- if( !strcmp( "WcsMap", astGetClass( map1 ) ) &&
- !strcmp( "WcsMap", astGetClass( map2 ) ) ) {
-
-/* Get pointers to the WcsMaps. */
- wcs1 = (AstWcsMap *) map1;
- wcs2 = (AstWcsMap *) map2;
-
-/* Check that the two WcsMaps performs the same sort of projection, and
- have the same number of axes. */
- if( astGetWcsType( wcs1 ) == astGetWcsType( wcs2 ) &&
- astGetNin( wcs1 ) == astGetNin( wcs2 ) ) {
-
-/* Check that the Mappings are applied in opposite senses. */
- if( inv1 != inv2 ) {
-
-/* Check that the latitude and longitude axes have the same indices in
- both WcsMaps. */
- if( astGetWcsAxis( wcs1, 0 ) == astGetWcsAxis( wcs2, 0 ) &&
- astGetWcsAxis( wcs1, 1 ) == astGetWcsAxis( wcs2, 1 ) ){
-
-/* We nopw check the projection parameters are equal. Assume they are for
- the moment. */
- ret = 1;
-
-/* Check the parameters for each axis in turn. */
- for( i = 0; i < astGetNin( wcs1 ); i++ ){
-
-/* If the two WcsMaps have a different number of parameters for this axes,
- they cannot merge. */
- if( GetNP( wcs1, i, status ) != GetNP( wcs1, i, status ) ){
- ret = 0;
- break;
-
-/* Otherwise, check each parameter value in turn. If any are found which
- are not equal, the WcsMaps cannot merge. */
- } else {
- for( m = 0; m < GetNP( wcs1, i, status ); m++ ){
- if( !EQUAL( astGetPV( wcs1, i, m ),
- astGetPV( wcs2, i, m ) ) ){
- ret = 0;
- break;
- }
- }
- if( !ret ) break;
- }
- }
- }
- }
- }
- }
-
-/* Return the answer. */
- return ret;
-}
-
-static int CanSwap( AstMapping *map1, AstMapping *map2, int inv1, int inv2,
- int *simpler, int *status ){
-/*
-* Name:
-
-* CanSwap
-
-* Purpose:
-* Determine if two Mappings could be swapped.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* int CanSwap( AstMapping *map1, AstMapping *map2, int inv1, int inv2,
-* int *simpler )
-
-* Class Membership:
-* WcsMap member function
-
-* Description:
-* This function returns a flag indicating if the pair of supplied
-* Mappings could be replaced by an equivalent pair of Mappings from the
-* same classes as the supplied pair, but in reversed order. Each pair
-* of Mappings is considered to be compunded in series. The supplied
-* Mapings are not changed in any way.
-
-* Parameters:
-* map1
-* The Mapping to be applied first.
-* map2
-* The Mapping to be applied second.
-* inv1
-* The invert flag to use with map1. A value of zero causes the forward
-* mapping to be used, and a non-zero value causes the inverse
-* mapping to be used.
-* inv2
-* The invert flag to use with map2.
-* simpler
-* Addresss of a location at which to return a flag indicating if
-* the swapped Mappings would be intrinsically simpler than the
-* original Mappings.
-
-* Returned Value:
-* 1 if the Mappings could be swapped, 0 otherwise.
-
-* Notes:
-* - One of the supplied pair of Mappings must be a WcsMap.
-* - A value of 0 is returned if the two Mappings could be merged into
-* a single Mapping.
-* - A value of 0 is returned if an error has already occurred, or if
-* this function should fail for any reason.
-*/
-
-/* Local Variables: */
- AstMapping *nowcs; /* Pointer to non-WcsMap Mapping */
- AstWcsMap *wcs; /* Pointer to WcsMap Mapping */
- const char *class1; /* Pointer to map1 class string */
- const char *class2; /* Pointer to map2 class string */
- const char *nowcs_class; /* Pointer to non-WcsMap class string */
- double *consts; /* Pointer to constants array */
- int *inperm; /* Pointer to input axis permutation array */
- int *outperm; /* Pointer to output axis permutation array */
- int i; /* Loop count */
- int invert[ 2 ]; /* Original invert flags */
- int latax; /* Index of latitude axis in WcsMap */
- int lonax; /* Index of longitude axis in WcsMap */
- int nin; /* No. of input coordinates for the PermMap */
- int nout; /* No. of output coordinates for the PermMap */
- int ret; /* Returned flag */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Initialise */
- ret = 0;
- *simpler = 0;
-
-/* Temporarily set the Invert attributes of both Mappings to the supplied
- values. */
- invert[ 0 ] = astGetInvert( map1 );
- astSetInvert( map1, inv1 );
-
- invert[ 1 ] = astGetInvert( map2 );
- astSetInvert( map2, inv2 );
-
-/* Get the classes of the two mappings. */
- class1 = astGetClass( map1 );
- class2 = astGetClass( map2 );
- if( astOK ){
-
-/* Get a pointer to the non-WcsMap Mapping. */
- if( !strcmp( class1, "WcsMap" ) ){
- wcs = (AstWcsMap *) map1;
- nowcs = map2;
- nowcs_class = class2;
- } else {
- nowcs = map1;
- wcs = (AstWcsMap *) map2;
- nowcs_class = class1;
- }
-
-/* If it is a PermMap, the Mappings can be swapped so long as:
- 1) all links between input and output axes in the PermMap are
- bi-directional. This does not preclude the existence of unconnected axes,
- which do not have links (bi-directional or otherwise).
- 2) The PermMap passesd though both the longitude and latitude axes of
- the WcsMap */
- if( !strcmp( nowcs_class, "PermMap" ) ){
-
-/* Get the number of input and output coordinates. */
- nin = astGetNin( nowcs );
- nout = astGetNout( nowcs );
-
-/* We need to know the axis permutation arrays and constants array for
- the PermMap. */
- PermGet( (AstPermMap *) nowcs, &outperm, &inperm, &consts, status );
- if( astOK ) {
-
-/* Indicate we can swap with the PermMap. */
- ret = 1;
-
-/* Check each output axis. If any links between axes are found which are
- not bi-directional, indicate that we cannot swap with the PermMap. */
- for( i = 0; i < nout; i++ ){
- if( outperm[ i ] >= 0 && outperm[ i ] < nin ) {
- if( inperm[ outperm[ i ] ] != i ) {
- ret = 0;
- break;
- }
- }
- }
-
-/* Check each input axis. If any links between axes are found which are
- not bi-directional, indicate that we cannot swap with the PermMap. */
- for( i = 0; i < nin; i++ ){
- if( inperm[ i ] >= 0 && inperm[ i ] < nout ) {
- if( outperm[ inperm[ i ] ] != i ) {
- ret = 0;
- break;
- }
- }
- }
-
-/* Check that the longitude and latitude axes both have bi-directional
- links in the PermMap, or are both unassigned. */
- if( ret ) {
-
-/* Get the indices of the longitude and latitude axes in the WcsMap */
- lonax = astGetWcsAxis( wcs, 0 );
- latax = astGetWcsAxis( wcs, 1 );
-
-/* If the WcsMap is applied first... */
- if( wcs == (AstWcsMap *) map1 ) {
- if( inperm[ lonax] < 0 && inperm[ latax ] < 0 ) {
- ret = 1;
- } else if( inperm[ lonax ] < 0 || inperm[ lonax ] >= nout ||
- inperm[ latax ] < 0 || inperm[ latax ] >= nout ) {
- ret = 0;
- }
-
-/* If the WcsMap is applied second ... */
- } else {
- if( outperm[ lonax ] < 0 && outperm[ latax ] < 0 ) {
- ret = 1;
- } else if( outperm[ lonax ] < 0 || outperm[ lonax ] >= nin ||
- outperm[ latax ] < 0 || outperm[ latax ] >= nin ) {
- ret = 0;
- }
- }
- }
-
-/* If we can swap with the PermMap, the swapped Mappings may be
- intrinsically simpler than the original mappings. */
- if( ret ) {
-
-/* If the PermMap preceeds the WcsMap, this will be the case if the PermMap
- has more outputs than inputs. If the WcsMap preceeds the PermMap, this
- will be the case if the PermMap has more inputs than outputs. */
- *simpler = ( nowcs == map1 ) ? nout > nin : nin > nout;
- }
-
-/* Free the axis permutation and constants arrays. */
- outperm = (int *) astFree( (void *) outperm );
- inperm = (int *) astFree( (void *) inperm );
- consts = (double *) astFree( (void *) consts );
- }
- }
- }
-
-/* Re-instate the original settings of the Invert attributes for the
- supplied MatrixMaps. */
- astSetInvert( map1, invert[ 0 ] );
- astSetInvert( map2, invert[ 1 ] );
-
-/* Return the answer. */
- return astOK ? ret : 0;
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a WcsMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* WcsMap member function (over-rides the astClearAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* WcsMap, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the WcsMap.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstWcsMap *this; /* Pointer to the WcsMap structure */
- int i; /* Axis index */
- int len; /* Length of the attribute name */
- int m; /* Projection parameter index */
- int nc; /* No. of characters read by astSscanf */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the WcsMap structure. */
- this = (AstWcsMap *) this_object;
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* ProjP. */
-/* ------ */
- if ( nc = 0, ( 1 == astSscanf( attrib, "prpjp(%d)%n", &m, &nc ) )
- && ( nc >= len ) ) {
- astClearPV( this, astGetWcsAxis( this, 1 ), m );
-
-/* PV. */
-/* ------ */
- } else if ( nc = 0, ( 2 == astSscanf( attrib, "pv%d_%d%n", &i, &m, &nc ) )
- && ( nc >= len ) ) {
- astClearPV( this, i - 1, m );
-
-/* If the name was not recognised, test if it matches any of the
- read-only attributes of this class. If it does, then report an
- error. */
- } else if ( ( nc = 0, ( 1 == astSscanf( attrib, "wcsaxis(%d)%n", &i, &nc ) )
- && ( nc >= len ) ) ||
- !strcmp( attrib, "wcstype" ) ||
- !strcmp( attrib, "natlat" ) ||
- !strcmp( attrib, "natlon" ) ){
- astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
- "value for a %s.", status, attrib, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static void ClearPV( AstWcsMap *this, int i, int m, int *status ) {
-/*
-*+
-* Name:
-* astClearPV
-
-* Purpose:
-* Clear a PVi_m attribute.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* void astClearPV( AstWcsMap *this, int i, int m )
-
-* Class Membership:
-* WcsMap protected function
-
-* Description:
-* This function clears a specified member of the PV attribute array, by
-* resetting its value to AST__BAD.
-
-* Parameters:
-* this
-* A pointer to the WcsMap.
-* i
-* Zero based axis index.
-* m
-* Zero based parameter index.
-
-*-
-*/
-/* Local Variables; */
- int npar;
- int mxpar;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Validate the axis index. */
- if( i < 0 || i >= astGetNin( this ) ){
- astError( AST__AXIIN, "astClearPV(%s): Axis index (%d) is invalid in "
- "attribute PV%d_%d - it should be in the range 1 to %d.",
- status, astGetClass( this ), i + 1, i + 1, m,
- astGetNin( this ) );
-
- } else {
-
-/* Find the maximum number of parameters allowed for the axis. */
- mxpar = astGetPVMax( this, i );
-
-/* Ignore unused parameters. */
- if( m < 0 || m > mxpar ){
-
-/* See if the parameter is currently set. Is so, set its value to
- AST__BAD. */
- } else if( this->np && this->p ){
- npar = this->np[ i ];
- if( m < npar && this->p[ i ] ) this->p[ i ][ m ] = AST__BAD;
- }
-
-/* Re-initialize the values stored in the "AstPrjPrm" structure. */
- InitPrjPrm( this, status );
- }
-}
-
-static void CopyPV( AstWcsMap *in, AstWcsMap *out, int *status ) {
-/*
-* Name:
-* CopyPV
-
-* Purpose:
-* Copy projection parameter information from one WcsMap to another.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void CopyPV( AstWcsMap *in, AstWcsMap *out )
-
-* Description:
-* This function copies projection parameter information from one
-* WcsMap to another.
-
-* Parameters:
-* in
-* Pointer to the input WcsMap.
-* out
-* Pointer to the output WcsMap.
-
-*/
-
-
-/* Local Variables: */
- int i; /* Axis index */
- int latax_in; /* Index of input latitude axis */
- int latax_out; /* Index of output latitude axis */
- int lonax_in; /* Index of input longitude axis */
- int lonax_out; /* Index of output longitude axis */
- int nax_in; /* No. of axis in the input WcsMap */
- int nax_out; /* No. of axis in the output WcsMap */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Nullify the pointers stored in the output WcsMap since these may
- currently be pointing at good data. Otherwise, the good data could be
- freed by accident if the output object is deleted due to an error
- occuring in this function. */
- out->np = NULL;
- out->p = NULL;
-
-/* Do nothing more if either of the input pointers are null (i.e. if there
- are no projection parameters. */
- if( in->np && in->p ){
-
-/* Store the number of axes in the input and output WcsMaps */
- nax_in = astGetNin( in );
- nax_out = astGetNin( out );
-
-/* Allocate memory for the array holding the number of projection parameters
- associated with each axis. */
- out->np = (int *) astMalloc( sizeof( int )*nax_out );
-
-/* Allocate memory for the array of pointers which identify the arrays
- holding the parameter values. */
- out->p = (double **) astMalloc( sizeof( double *)*nax_out );
-
-/* Check pointers can be used */
- if( astOK ) {
-
-/* Initialise the above arrays. */
- for( i = 0; i < nax_out; i++ ) {
- (out->np)[ i ] = 0;
- (out->p)[ i ] = NULL;
- }
-
-/* Copy the longitude and latitude values from in to out (other axes do
- not have projection parameters). */
- lonax_in = astGetWcsAxis( in, 0 );
- latax_in = astGetWcsAxis( in, 1 );
- lonax_out = astGetWcsAxis( out, 0 );
- latax_out = astGetWcsAxis( out, 1 );
-
- (out->np)[ lonax_out ] = (in->np)[ lonax_in ];
- (out->p)[ lonax_out ] = (double *) astStore( NULL,
- (void *) (in->p)[ lonax_in ],
- sizeof(double)*(in->np)[ lonax_in ] );
-
- (out->np)[ latax_out ] = (in->np)[ latax_in ];
- (out->p)[ latax_out ] = (double *) astStore( NULL,
- (void *) (in->p)[ latax_in ],
- sizeof(double)*(in->np)[ latax_in ] );
- }
-
-/* If an error has occurred, free the output arrays. */
- if( !astOK ) FreePV( out, status );
-
- }
-
-/* Re-initialize the values stored in the "AstPrjPrm" structure. */
- InitPrjPrm( out, status );
-
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two WcsMaps are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* WcsMap member function (over-rides the astEqual protected
-* method inherited from the astMapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two WcsMaps are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Object (a WcsMap).
-* that
-* Pointer to the second Object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the WcsMaps are equivalent, zero otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstWcsMap *that;
- AstWcsMap *this;
- int i, j;
- int nin;
- int nout;
- int result;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain pointers to the two WcsMap structures. */
- this = (AstWcsMap *) this_object;
- that = (AstWcsMap *) that_object;
-
-/* Check the second object is a WcsMap. We know the first is a
- WcsMap since we have arrived at this implementation of the virtual
- function. */
- if( astIsAWcsMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
- nin = astGetNin( this );
- nout = astGetNout( this );
- if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two WcsMaps differ, it may still be possible
- for them to be equivalent. First compare the WcsMaps if their Invert
- flags are the same. In this case all the attributes of the two WcsMaps
- must be identical. */
- if( astGetInvert( this ) == astGetInvert( that ) ) {
-
- if( this->type == that->type &&
- this->wcsaxis[ 0 ] == that->wcsaxis[ 0 ] &&
- this->wcsaxis[ 1 ] == that->wcsaxis[ 1 ] ) {
-
- result = 1;
-
- if( this->np && that->np ){
-
- for( i = 0; i < nout && result; i++ ) {
-
- if( (this->np)[ i ] != (that->np)[ i ] ) {
- result = 0;
-
- } else if( (this->p)[ i ] && !(this->p)[ i ] ) {
- result = 0;
-
- } else if( !(this->p)[ i ] && (this->p)[ i ] ) {
- result = 0;
-
- } else if( (this->p)[ i ] && (this->p)[ i ] ) {
-
- for( j = 0; j < (this->np)[ i ]; j++ ) {
- if( !astEQUAL( (this->p)[ i ][ j ],
- (that->p)[ i ][ j ] ) ) {
- result = 0;
- break;
- }
- }
- }
- }
- }
-
- } else if( this->np || that->np ){
- result = 0;
- }
-
-/* If the Invert flags for the two WcsMaps differ, the attributes of the two
- WcsMaps must be inversely related to each other. */
- } else {
-
-/* In the specific case of a WcsMap, Invert flags must be equal. */
- result = 0;
-
- }
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static const PrjData *FindPrjData( int type, int *status ){
-/*
-*+
-* Name:
-* FindPrjData
-
-* Purpose:
-* Get information about a WCSLIB projection given a projection type.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* const PrjData *FindPrjData( int type, int *status )
-
-* Class Membership:
-* WcsMap member function
-
-* Description:
-* This function returns a pointer to an PrjData structure describing
-* the WCSLIB projection with the supplied type.
-
-* Parameters:
-* type
-* The projection type.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the "const" PrjData structure describing the projection.
-
-* Notes:
-* - The returned pointer points to an element in a static array and
-* should not be freed.
-* - This function attempts to execute even if an error has already
-* occurred. A description of a "null" projection will be returned if
-* this function subsequently fails (for instance if the projection is
-* not recognised).
-*-
-*/
-
- const PrjData *data;
- data = PrjInfo;
- while( data->prj != AST__WCSBAD && data->prj != type ) data++;
- return data;
-}
-
-static void FreePV( AstWcsMap *this, int *status ) {
-/*
-*
-* Name:
-* FreePV
-
-* Purpose:
-* Free memory used to hold projection parameters
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* FreePV( AstWcsMap *this, int *status )
-
-* Class Membership:
-* WcsMap private function
-
-* Description:
-* This function frees all the dynamic memory used to store projection
-* parameter information in the supplied WcsMap.
-
-* Parameters:
-* this
-* A pointer to the WcsMap.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* This function attempts to execute even if an error has already occurred.
-
-*
-*/
- int i; /* Axis index */
-
- if( this->np ) this->np = (int *) astFree( (void *) this->np );
- if( this->p ){
- for( i = 0; i < astGetNin( this ); i++ ){
- this->p[ i ] = (double *) astFree( (void *) this->p[ i ] );
- }
- this->p = (double **) astFree( (void *) this->p );
- }
-
-/* Re-initialize the values stored in the "AstPrjPrm" structure. */
- InitPrjPrm( this, status );
-
-
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* WcsMap member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied WcsMap,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the WcsMap.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstWcsMap *this; /* Pointer to WcsMap structure */
- int result; /* Result value to return */
- int i; /* Axis index */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the WcsMap structure. */
- this = (AstWcsMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
-
- result += astTSizeOf( this->np );
- if( this->p ){
- for( i = 0; i < astGetNin( this ); i++ ){
- result += astTSizeOf( (void *) this->p[ i ] );
- }
- result += astTSizeOf( this->p );
- }
-
- result += astTSizeOf( this->params.p );
- result += astTSizeOf( this->params.p2 );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a WcsMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* WcsMap member function (over-rides the protected astGetAttrib
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a WcsMap, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the WcsMap.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the WcsMap, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the WcsMap. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstWcsMap *this; /* Pointer to the WcsMap structure */
- const char *result; /* Pointer value to return */
- double dval; /* Floating point attribute value */
- int i; /* Axis index */
- int ival; /* Integer attribute value */
- int len; /* Length of attribute string */
- int m; /* Projection parameter index */
- int nc; /* No. of characters read by astSscanf */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the WcsMap structure. */
- this = (AstWcsMap *) this_object;
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null-terminated string in an appropriate
- format. Set "result" to point at the result string. */
-
-/* ProjP. */
-/* ------ */
- if ( nc = 0, ( 1 == astSscanf( attrib, "projp(%d)%n", &m, &nc ) )
- && ( nc >= len ) ) {
- dval = astGetPV( this, astGetWcsAxis( this, 1 ), m );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* PV. */
-/* --- */
- } else if ( nc = 0, ( 2 == astSscanf( attrib, "pv%d_%d%n", &i, &m, &nc ) )
- && ( nc >= len ) ) {
- dval = astGetPV( this, i - 1, m );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* WcsType */
-/* ======= */
- } else if ( !strcmp( attrib, "wcstype" ) ) {
- ival = astGetWcsType( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* PVMax */
-/* ===== */
- } else if ( nc = 0, ( 1 == astSscanf( attrib, "pvmax(%d)%n", &i, &nc ) )
- && ( nc >= len ) ) {
- ival = astGetPVMax( this, i - 1 );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* NatLat */
-/* ====== */
- } else if ( !strcmp( attrib, "natlat" ) ) {
- dval = astGetNatLat( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-/* NatLon */
-/* ====== */
- } else if ( !strcmp( attrib, "natlon" ) ) {
- dval = astGetNatLon( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
- result = getattrib_buff;
- }
-
-
-/* WcsAxis */
-/* ======= */
- } else if ( nc = 0, ( 1 == astSscanf( attrib, "wcsaxis(%d)%n", &i, &nc ) )
- && ( nc >= len ) ) {
- ival = astGetWcsAxis( this, i - 1 ) + 1;
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-}
-
-static double GetNatLat( AstWcsMap *this, int *status ) {
-/*
-*+
-* Name:
-* GetNatLat
-
-* Purpose:
-* Get the value of the NatLat attribute.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* double GetNatLat( AstWcsMap *this, int *status )
-
-* Class Membership:
-* WcsMap protected function
-
-* Description:
-* This function returns the value of the NatLat attribute. This is
-* fixed value for most projection types , defined in the FITS-WCS paper
-* II. For instance, all zenithal projections have NatLat = PI/2 (90
-* degrees). For some prjections (e.g. conics), the value is defined
-* by a projection parameter.
-
-* Parameters:
-* this
-* A pointer to the WcsMap.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The attribute value, in radians.
-
-*-
-*/
- double ret; /* Returned value */
-
-/* The native latitude of the reference point of the projection is
- constant for most projection, but for some (the conics) it is
- specified by projection one on the latitude axis. */
- ret = FindPrjData( this->type, status )->theta0;
- if( ret == AST__BAD ){
- ret = astGetPV( this, astGetWcsAxis( this, 1 ), 1 );
- if( ret != AST__BAD ) ret *= AST__DD2R;
- }
-
-/* Return the result. */
- return ret;
-}
-
-static double GetNatLon( AstWcsMap *this, int *status ) {
-/*
-*+
-* Name:
-* GetNatLon
-
-* Purpose:
-* Get the value of the NatLon attribute.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* double GetNatLon( AstWcsMap *this, int *status )
-
-* Class Membership:
-* WcsMap protected function
-
-* Description:
-* This function returns the value of the NatLon attribute. This is
-* fixed value of zero for all projection types.
-
-* Parameters:
-* this
-* A pointer to the WcsMap.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The attribute value, in radians.
-
-*-
-*/
- return 0.0;
-}
-
-static int GetNP( AstWcsMap *this, int i, int *status ) {
-/*
-*+
-* Name:
-* GetNP
-
-* Purpose:
-* Get the number of projection parameters for a specified axis.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* int GetNP( AstWcsMap *this, int i, int *status )
-
-* Class Membership:
-* WcsMap protected function
-
-* Description:
-* This function returns the current number of projection parameters
-* associated with the speified axis. Some of these may be unset (i.e.
-* equal to AST__BAD). The returned number is the size of the array
-* holding the projection parameters.
-
-* Parameters:
-* this
-* A pointer to the WcsMap.
-* i
-* Zero based axis index.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The number of projection parameters for the specified axis.
-
-*-
-*/
- double ret;
-
-/* Initialise */
- ret = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return ret;
-
-/* Validate the axis index, and get the count. */
- if( i >= 0 && this->np && i < astGetNin( this ) ) ret = this->np[ i ];
-
- return ret;
-
-}
-
-static double GetPV( AstWcsMap *this, int i, int m, int *status ) {
-/*
-*+
-* Name:
-* astGetPV
-
-* Purpose:
-* Get the value of a PVi_m attribute.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* double astGetPV( AstWcsMap *this, int i, int m )
-
-* Class Membership:
-* WcsMap protected function
-
-* Description:
-* This function returns the current value of a specified member of the
-* PV attribute array. A value of AST__BAD is returned if no value has
-* been set for the parameter.
-
-* Parameters:
-* this
-* A pointer to the WcsMap.
-* i
-* Zero based axis index.
-* m
-* Zero based parameter index.
-
-* Returned Value:
-* The value of the requested attribute, of AST__BAD if not set.
-
-*-
-*/
-
-/* Local Variables: */
- double ret;
- int npar;
- int mxpar;
-
-/* Initialise */
- ret = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return ret;
-
-/* Validate the axis index. */
- if( i < 0 || i >= astGetNin( this ) ){
- astError( AST__AXIIN, "astGetPV(%s): Axis index (%d) is invalid in "
- "attribute PV%d_%d - it should be in the range 1 to %d.",
- status, astGetClass( this ), i + 1, i + 1, m, astGetNin( this ) );
-
-/* Find the maximum number of parameters allowed for the axis. */
- } else {
- mxpar = astGetPVMax( this, i );
-
-/* Validate the parameter index. */
- if( m < 0 || m > mxpar ){
- astError( AST__AXIIN, "astGetPV(%s): Parameter index (%d) is invalid "
- "in attribute PV%d_%d for a \"%s\" projection - it should be "
- "in the range 0 to %d.", status, astGetClass( this ), m, i + 1, m,
- FindPrjData( this->type, status )->ctype, mxpar );
-
-/* For latitude parameters use the values in the "params" structure which will
- have been defaulted. */
- } else if( i == astGetWcsAxis( this, 1 ) ) {
- ret = (this->params).p[ m ];
-
-/* For other axes, see if the arrays stored in the WcsMap structure extend as
- far as the requested parameter. If so, return the required attribute value.
- Otherwise the AST__BAD value initialised above is retained. */
- } else if( this->np && this->p ){
- npar = this->np[ i ];
- if( m < npar && this->p[ i ] ) ret = this->p[ i ][ m ];
- }
-
-/* FITS-WCS paper II gives defaults for the first 3 longitude axis
- parameters. The AST-specific TPN projection does not use this
- convention since it needs all projection parameters to specify
- correction terms. */
- if( ret == AST__BAD && i == astGetWcsAxis( this, 0 ) &&
- astGetWcsType( this ) != AST__TPN ) {
-
-/* Parameter zero has a default of zero. */
- if( m == 0 ) {
- ret = 0.0;
-
-/* Parameter one has a default equal to the native longitude of the
- reference point of the projection, in degrees. */
- } else if( m == 1 ) {
- ret = astGetNatLon( this )*AST__DR2D;
-
-/* Parameter two has a default equal to the native latitude of the
- reference point of the projection (in degrees). This is constant for
- most projection, but for some (the conics) it is specified by
- projection one on the latitude axis. */
- } else if( m == 2 ) {
- ret = astGetNatLat( this )*AST__DR2D;
- }
- }
- }
-
- return ret;
-
-}
-
-static int GetPVMax( AstWcsMap *this, int i, int *status ) {
-/*
-*+
-* Name:
-* astGetPVMax
-
-* Purpose:
-* Get the maximum projection parameter index for a WcsMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* int astGetPVMax( AstWcsMap *this, int i )
-
-* Class Membership:
-* WcsMap protected function
-
-* Description:
-* This function returns the largest legal projection parameter index
-* for a specified axis of the given WcsMap (i.e. the largest value of
-* "m" in the attribute "PVi_m").
-
-* Parameters:
-* this
-* A pointer to the WcsMap.
-* i
-* Zero based axis index.
-
-* Returned Value:
-* The largest legal projection parameter index, or -1 if no
-* projection parameters are allowed on the specified axis.
-
-*-
-*/
-
-/* Local Variables: */
- int mxpar;
-
-/* Initialise */
- mxpar = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return -1;
-
-/* Validate the axis index. */
- if( i < 0 || i >= astGetNin( this ) ){
- astError( AST__AXIIN, "astGetPVMax(%s): Axis index (%d) is invalid in "
- "attribute PVMax(%d) - it should be in the range 1 to %d.",
- status, astGetClass( this ), i + 1, i + 1, astGetNin( this ) );
-
-/* Find the maximum number of parameters allowed for the axis. */
- } else if( i == astGetWcsAxis( this, 0 ) ) {
- mxpar = astSizeOf( this->params.p2 )/sizeof( double );
-
- } else if( i == astGetWcsAxis( this, 1 ) ) {
- mxpar = astSizeOf( this->params.p )/sizeof( double );
-
- }
-
-/* The mxpar variable holds the max number of parameters. Return the the
- largest legal parameter index (one less than the max number of
- parameters). */
- return mxpar - 1;
-}
-
-static void InitPrjPrm( AstWcsMap *this, int *status ) {
-/*
-* Name:
-* InitPrjPrm
-
-* Purpose:
-* Initialise the WcsLib PrjPrm structure, assigning default values for
-* missing parameters.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void InitPrjPrm( AstWcsMap *this, int *status )
-
-* Description:
-* This function initializes the projection parameter information
-* stored within the WcsLib AstPrjPrm structure associated with the
-* supplied WcsMap. Default values are assigned to any unspecified
-* parameter values. AST__BAD values are assigned if any parameters
-* have not been supplied for which there is no default.
-
-* Parameters:
-* this
-* The WcsMap.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-
-/* Local Variables: */
- struct AstPrjPrm *params; /* The AstPrjPrm structure from the WcsMap */
- int i; /* Loop index */
- int latax; /* Index of latitude axis */
- int lonax; /* Index of longitude axis */
- int npar; /* No. of parameters supplied */
- int plen; /* Length of params array */
- int plen2; /* Length of latitude params array */
- int type; /* Projection type */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the AstPrjPrm structure*/
- params = &(this->params);
-
-/* Tell the routines within the WcsLib "proj.c" module to re-calculate
- intermediate values. */
- params->flag = 0;
- params->r0 = 0;
-
-/* Find the max number of projection parameters associated with each
- axis.*/
- plen2 = astSizeOf( params->p2 )/sizeof( double );
- plen = astSizeOf( params->p )/sizeof( double );
-
-/* Initially set all parameter to AST__BAD. */
- for( i = 0; i < plen; i++ ) (params->p)[i] = AST__BAD;
- for( i = 0; i < plen2; i++ ) (params->p2)[i] = AST__BAD;
-
-/* If the WcsMap contains any projection parameter values... */
- if( this->np && this->p ){
-
-/* Get the index of the latitude axis. Currently, all projection
- parameters are associated with the latitude axis (except for
- the TPN projection, which is a hang-over from a earlier draft of the
- FITS-WCS paper). */
- latax = astGetWcsAxis( this, 1 );
-
-/* Find the number of projection parameters in the WcsMap for the
- latitude axis. */
- npar = (this->np)[ latax ];
- if( npar > plen ) {
- astError( AST__INTER, "InitPrjPrm(WcsMap): Too many projection "
- "parameters on the latitude axis (%d > %d) (internal "
- "AST programming error).", status, npar, plen );
- }
-
-/* Copy the parameters to the AstPrjPrm structure. Do not copy more than
- can be stored in the AstPrjPrm structure. */
- for( i = 0; i < npar && i < plen; i++ ) {
- (params->p)[ i ] = (this->p)[ latax ][ i ];
- }
-
-/* Do the same for the longitude axis (for the benefit of the TPN projection). */
- lonax = astGetWcsAxis( this, 0 );
- npar = (this->np)[ lonax ];
-
- if( npar > plen2 ) {
- astError( AST__INTER, "InitPrjPrm(WcsMap): Too many projection "
- "parameters on the longitude axis (%d > %d) (internal "
- "AST programming error).", status, npar, plen2 );
- }
-
- for( i = 0; i < npar && i < plen2; i++ ) {
- (params->p2)[ i ] = (this->p)[ lonax ][ i ];
- }
-
- }
-
-/* Get the projection type. */
- type = astGetWcsType( this );
-
-/* First supply default values for any missing projection parameters which
- do not default to zero. */
- if( type == AST__SZP ){
- if( (params->p)[ 3 ] == AST__BAD ) (params->p)[ 3 ] = 90.0;
-
- } else if( type == AST__AIR ){
- if( (params->p)[ 1 ] == AST__BAD ) (params->p)[ 1 ] = 90.0;
-
- } else if( type == AST__CYP ){
- if( (params->p)[ 1 ] == AST__BAD ) (params->p)[ 1 ] = 1.0;
- if( (params->p)[ 2 ] == AST__BAD ) (params->p)[ 2 ] = 1.0;
-
- } else if( type == AST__CEA ){
- if( (params->p)[ 1 ] == AST__BAD ) (params->p)[ 1 ] = 1.0;
-
- } else if( type == AST__TPN ){
- if( (params->p)[ 1 ] == AST__BAD ) (params->p)[ 1 ] = 1.0;
- if( (params->p2)[ 1 ] == AST__BAD ) (params->p2)[ 1 ] = 1.0;
-
- } else if( type == AST__HPX ){
- if( (params->p)[ 1 ] == AST__BAD ) (params->p)[ 1 ] = 4.0;
- if( (params->p)[ 2 ] == AST__BAD ) (params->p)[ 2 ] = 3.0;
-
- }
-
-/* Now use a default value of zero for any remaining unspecified values,
- except for un-defaultable projection parameters. */
- for( i = 0; i < plen; i++ ){
-
-/* Retain any AST__BAD value for these undefaultable parameters. */
- if( i == 1 && ( type == AST__BON ||
- type == AST__COP || type == AST__COE ||
- type == AST__COD || type == AST__COO ) ){
-
-/* Use a default of zero for all other parameters. */
- } else {
- if( (params->p)[ i ] == AST__BAD ) (params->p)[ i ] = 0.0;
- }
- }
-
-/* Do the same for the latitude projection parameters (if any) */
- for( i = 0; i < plen2; i++ ){
- if( i == 1 && ( type == AST__BON ||
- type == AST__COP || type == AST__COE ||
- type == AST__COD || type == AST__COO ) ){
- } else {
- if( (params->p2)[ i ] == AST__BAD ) (params->p2)[ i ] = 0.0;
- }
- }
-}
-
-void astInitWcsMapVtab_( AstWcsMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitWcsMapVtab
-
-* Purpose:
-* Initialise a virtual function table for a WcsMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* void astInitWcsMapVtab( AstWcsMapVtab *vtab, const char *name )
-
-* Class Membership:
-* WcsMap vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the WcsMap class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAWcsMap) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
- vtab->ClearPV = ClearPV;
- vtab->GetNatLat = GetNatLat;
- vtab->GetNatLon = GetNatLon;
- vtab->GetPV = GetPV;
- vtab->GetWcsAxis = GetWcsAxis;
- vtab->GetPVMax = GetPVMax;
- vtab->GetWcsType = GetWcsType;
- vtab->SetPV = SetPV;
- vtab->TestPV = TestPV;
- vtab->IsZenithal = IsZenithal;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
- parent_mapsplit = mapping->MapSplit;
- mapping->MapSplit = MapSplit;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- object->Equal = Equal;
- mapping->MapMerge = MapMerge;
-
-/* Declare the destructor and copy constructor. */
- astSetDelete( (AstObjectVtab *) vtab, Delete );
- astSetCopy( (AstObjectVtab *) vtab, Copy );
-
-/* Declare the class dump function. */
- astSetDump( vtab, Dump, "WcsMap", "FITS-WCS sky projection" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static int IsZenithal( AstWcsMap *this, int *status ){
-/*
-*+
-* Name:
-* IsZenithal
-
-* Purpose:
-* Determine if this WcsMap represents a zenithal projection.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* int IsZenithal( AstWcsMap *this, int *status )
-
-* Class Membership:
-* WcsMap protected function
-
-* Description:
-* This function returns a flag indicating if this WcsMap is a zenithal
-* projection. Some projections which are classed as zenithal in the
-* Calabretta and Greisen paper are only genuinely zenithal if the
-* projection parameters have certain values. These projections are
-* not considered to be zenithal unless the projection parameters have
-* appropriate values.
-
-* Parameters:
-* this
-* The WcsMap.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A non-zero value if the WcsMap represents a zenithal projection.
-
-*-
-*/
-
-/* Local Variables: */
- double p1; /* PVi_1 */
- double p2; /* PVi_2 */
- double p3; /* PVi_3 */
- int latax; /* Index of latitude axis */
- int ret; /* Returned flag */
- int type; /* Projection type */
-
-/* Initialise the returned value. */
- ret = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return ret;
-
-/* Get the projection type. */
- type = astGetWcsType( this );
-
-/* Get the index of the latitude axis. */
- latax = astGetWcsAxis( this, 1 );
-
-/* The following are always zenithal... */
- if( type == AST__TAN || type == AST__STG || type == AST__ARC ||
- type == AST__ZPN || type == AST__ZEA || type == AST__AIR ||
- type == AST__TPN ) {
- ret = 1;
-
-/* The following are sometimes zenithal... */
- } else if( type == AST__AZP ) {
- p2 = astGetPV( this, latax, 2 );
- if( p2 == AST__BAD || p2 == 0.0 ) ret = 1;
-
- } else if( type == AST__SIN ) {
- p1 = astGetPV( this, latax, 1 );
- p2 = astGetPV( this, latax, 2 );
- if( p1 == AST__BAD ) p1 = 0.0;
- if( p2 == AST__BAD ) p2 = 0.0;
- if( p1 == 0.0 && p2 == 0.0 ) ret = 1;
-
- } else if( type == AST__SZP ) {
- p3 = astGetPV( this, latax, 2 );
- if( p3 == AST__BAD ) p3 = 90.0;
- if( p3 == 90.0 || p3 == -90.0 ) ret = 1;
-
- }
-
- return ret;
-}
-
-static void LongRange( const PrjData *prjdata, struct AstPrjPrm *params,
- double *high, double *low, int *status ){
-/*
-*
-* Name:
-* LongRange
-
-* Purpose:
-* See if primary range of longitude produced by a WCSLIB mapping is
-* [0,360] or [-180,+180].
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* void LongRange( const PrjData *prjdata, struct AstPrjPrm *params,
-* double *high, double *low, int *status )
-
-* Class Membership:
-* WcsMap internal utility function.
-
-* Description:
-* This function uses the WCSLIB library to transform the supplied input
-* positions.
-
-* Parameters:
-* prjdata
-* A pointer to information about the mapping.
-* params
-* Pointer to a WCSLIB "AstPrjPrm" structure containing the projection
-* parameters, etc.
-* high
-* A pointer to a location at which is returned the upper bound of
-* the primary longitude range.
-* low
-* A pointer to a location at which is returned the lower bound of
-* the primary longitude range.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* None.
-
-*/
-
-
-/* Local Variables: */
- int point; /* Loop counter for points */
- static double xx[ 4 ] = { -1.0E-6, 0.0, 1.0E-6, 0.0 };
- static double yy[ 4 ] = { 0.0, 1.0E-6, 0.0, -1.0E-6 };
- double aa;
- double bb;
-
-/* Initialise the returned values. */
- *high = 180.0;
- *low = -180.0;
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Project each of the points. If any longitude value is found which is
- greater than 180 degrees, return [0,360] as the longitude range. */
- for( point = 0; point < 4; point++ ){
- if( !prjdata->WcsRev( xx[ point ], yy[ point ], params, &aa, &bb ) ){
- if( aa > 180.0 ){
- *high = 360.0;
- *low = 0.0;
- break;
- }
- }
- }
-
-/* Return. */
- return;
-
-}
-
-static int Map( AstWcsMap *this, int forward, int npoint, double *in0,
- double *in1, double *out0, double *out1, int *status ){
-/*
-*
-* Name:
-* Map
-
-* Purpose:
-* Transform a set of points using a function from the WCSLIB library.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* int Map( AstWcsMap *this, int forward, int npoint, double *in0,
-* double *in1, double *out0, double *out1 )
-
-* Class Membership:
-* WcsMap internal utility function.
-
-* Description:
-* This function uses the WCSLIB library to transform the supplied input
-* positions.
-
-* Parameters:
-* this
-* Pointer to the WcsMap.
-* forward
-* A non-zero value indicates that the forward projection from
-* (long,lat) to (x,y) is required, while a zero value requests the
-* reverse transformation.
-* npoint
-* The number of points to transform (i.e. the size of the
-* in0, in1, out0 and out1 arrays).
-* in0
-* A pointer to the input coordinate data for the 0th axis (i.e.
-* longitude or X depending on "forward").
-* in1
-* A pointer to the input coordinate data for the 1st axis (i.e.
-* latitude or Y depending on "forward").
-* out0
-* A pointer to the returned output coordinate data for the 0th axis
-* (i.e. X or longitude depending on "forward").
-* out1
-* A pointer to the returned output coordinate data for the 1st axis
-* (i.e. Y or latitude depending on "forward").
-
-* Returned Value:
-* The status value: 0 - Success
-* 1 - Unrecognised projection type
-* 2 - Invalid projection parameters values.
-* 4 - Error existed on entry
-* 100 - 399: Longitude axis projection parameter
-* (status-100) not supplied.
-* 400 - 699: Latitude axis projection parameter
-* (status-400) not supplied.
-
-
-* Notes:
-* - This function does not report any errors. Reporting of suitable
-* error messages is the responsibility of the calling function.
-* - The value 4 will be returned if this function is invoked with the
-* global error status set.
-*
-*/
-
-/* Local Variables: */
- struct AstPrjPrm *params; /* Pointer to structure holding WCSLIB info */
- const PrjData *prjdata; /* Information about the projection */
- double latitude; /* Latitude value in degrees */
- double longitude; /* Longitude value in degrees */
- double longhi; /* Upper longitude limit in degrees */
- double longlo; /* Lower longitude limit in degrees */
- double x; /* X Cartesian coordinate in degrees */
- double y; /* Y Cartesian coordinate in degrees */
- int i; /* Loop count */
- int plen; /* Length of proj par array */
- int point; /* Loop counter for points */
- int wcs_status; /* Status from WCSLIB functions */
- int type; /* Projection type */
-
-/* Check the global error status. */
- if ( !astOK ) return 4;
-
-/* Initialise variables to avoid compiler warnings. */
- longlo = AST__BAD;
- longhi = AST__BAD;
-
-/* Store the projection type. */
- type = astGetWcsType( this );
-
-/* Get information about the projection. */
- prjdata = FindPrjData( type, status );
-
-/* Return if there are no WcsLib mapping functons associated with the
- projection. */
- if( ( !prjdata->WcsFwd && forward ) ||
- ( !prjdata->WcsRev && !forward ) ) return 1;
-
-/* Check that all necessary projection parameters have been supplied, or
- can be defaulted. */
- params = &(this->params);
- plen = astSizeOf( params->p )/sizeof( double );
- for( i = 0; i < plen; i++ ) {
- if( ( params->p)[ i ] == AST__BAD ) return 400+i;
- }
-
-/* If we are doing a reverse mapping, get the acceptable range of longitude
- values. */
- if( !forward ) LongRange( prjdata, params, &longhi, &longlo, status );
-
-/* Loop to apply the projection to each point in turn, checking for
- (and propagating) bad values in the process. */
- for ( point = 0; point < npoint; point++ ) {
- if ( in0[ point ] == AST__BAD ||
- in1[ point ] == AST__BAD ){
- out0[ point ] = AST__BAD;
- out1[ point ] = AST__BAD;
- } else {
-
-/* First deal with forward projection calls */
- if ( forward ){
-
-/* The input coordinates are assumed to be longitude and latitude, in
- radians (as used by SLALIB). Convert them to degrees ensuring that
- the longitude value is in the range [-180,180] and the latitude is
- in the range [-90,90] (as required by the WCSLIB library). Any point with
- a latitude outside the range [-90,90] is converted to the equivalent
- point on the complementary meridian. */
- latitude = AST__DR2D*palSlaDrange( in1[ point ] );
- if ( latitude > 90.0 ){
- latitude = 180.0 - latitude;
- longitude = AST__DR2D*palSlaDrange( AST__DPI + in0[ point ] );
-
- } else if ( latitude < -90.0 ){
- latitude = -180.0 - latitude;
- longitude = AST__DR2D*palSlaDrange( AST__DPI + in0[ point ] );
-
- } else {
- longitude = AST__DR2D*palSlaDrange( in0[ point ] );
- }
-
-/* Call the relevant WCSLIB forward projection function. */
- wcs_status = prjdata->WcsFwd( longitude, latitude, params, &x, &y );
-
-/* Store the returned Cartesian coordinates, converting them from degrees
- to radians. If the position could not be projected, use the value
- AST__BAD. Abort for any other bad status. */
- if( wcs_status == 0 ){
- out0[ point ] = AST__DD2R*x;
- out1[ point ] = AST__DD2R*y;
-
- } else if( wcs_status == 1 ){
- return 2;
-
- } else if( wcs_status == 2 ){
- out0[ point ] = AST__BAD;
- out1[ point ] = AST__BAD;
-
- } else {
- return wcs_status;
- }
-
-/* Now deal with reverse projection calls */
- } else {
-
-/* Convert the supplied Cartesian coordinates from radians to degrees. */
- x = AST__DR2D*in0[ point ];
- y = AST__DR2D*in1[ point ];
-
-/* Call the relevant WCSLIB reverse projection function. */
- wcs_status = prjdata->WcsRev( x, y, params, &longitude, &latitude );
-
-/* Store the returned longitude and latitude, converting them from degrees
- to radians. Many projections (ARC, AIT, ZPN, etc) are not cyclic (i.e.
- [long,lat]=[0,0] does not get mapped to the same place as
- [long,lat]=[360,0] ). Only accept values in the primary longitude or
- latitude ranges. This avoids (x,y) points outside the physical domain
- of the mapping being assigned valid (long,lat) values. */
- if( wcs_status == 0 ){
- if( longitude <= longhi && longitude >= longlo &&
- fabs( latitude ) <= 90.0 ){
-
-/* Assign zero longitude to positions very close to a pole. */
- if( fabs( latitude ) > 89.999998 ) longitude = 0.0;
-
- out0[ point ] = AST__DD2R*longitude;
- out1[ point ] = AST__DD2R*latitude;
-
- } else {
- out0[ point ] = AST__BAD;
- out1[ point ] = AST__BAD;
- }
-
-/* Abort if projection parameters were unusable. */
- } else if( wcs_status == 1 ){
- return 2;
-
-/* If the position could not be projected, use the value AST__BAD. */
- } else if( wcs_status == 2 ){
- out0[ point ] = AST__BAD;
- out1[ point ] = AST__BAD;
-
-/* Abort if projection parameters were not supplied. */
- } else {
- return wcs_status;
- }
-
- }
-
- }
-
- }
-
- return 0;
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a WcsMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* WcsMap method (over-rides the protected astMapMerge method
-* inherited from the Mapping class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated WcsMap in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated WcsMap with a Mapping which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated WcsMap which is to be merged with
-* its neighbours. This should be a cloned copy of the WcsMap
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* WcsMap it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated WcsMap resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstMapping *mc[2]; /* Copies of supplied Mappings to swap */
- AstMapping *neighbour; /* Pointer to neighbouring Mapping */
- AstMapping *smc0; /* Simplied Mapping */
- AstMapping *smc1; /* Simplied Mapping */
- const char *nclass; /* Pointer to neighbouring Mapping class */
- const char *class1; /* Pointer to first Mapping class string */
- const char *class2; /* Pointer to second Mapping class string */
- int do1; /* Would a backward swap make a simplification? */
- int do2; /* Would a forward swap make a simplification? */
- int i1; /* Lower index of the two WcsMaps being merged */
- int i2; /* Upper index of the two WcsMaps being merged */
- int i; /* Mapping index */
- int ic[2]; /* Copies of supplied invert flags to swap */
- int merge; /* Can WcsMap merge with a neighbour? */
- int nin; /* Number of coordinates for WcsMap */
- int nstep1; /* No. of Mappings backwards to next mergable Mapping */
- int nstep2; /* No. of Mappings forward to next mergable Mapping */
- int result; /* Result value to return */
- int swaphi; /* Can WcsMap be swapped with higher neighbour? */
- int swaplo; /* Can WcsMap be swapped with lower neighbour? */
- int type; /* Projection type */
-
-/* Initialise. */
- result = -1;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- i1 = 0;
- i2 = 0;
-
-/* Get the number of axes for the WcsMap. */
- nin = astGetNin( ( *map_list )[ where ] );
-
-/* First of all, see if the WcsMap can be replaced by a simpler Mapping,
- without reference to the neighbouring Mappings in the list. */
-/* ======================================================================*/
-/* WcsMaps with map type of AST__WCSBAD are equivalent to a UnitMap. */
- type = astGetWcsType( this );
- if( type == AST__WCSBAD ){
-
-/* Annul the WcsMap pointer in the list and replace it with a UnitMap
- pointer, and indicate that the forward transformation of the returned
- UnitMap should be used. */
- (void) astAnnul( ( *map_list )[ where ] );
- ( *map_list )[ where ] = (AstMapping *) astUnitMap( nin, "", status );
- ( *invert_list )[ where ] = 0;
-
-/* Return the index of the first modified element. */
- result = where;
-
-/* If the WcsMap itself could not be simplified, see if it can be merged
- with the Mappings on either side of it in the list. This can only be
- done in series for a WcsMap. */
-/* ===================================================================== */
- } else if( series && *nmap > 1 ) {
-
-/* Store the classes of the neighbouring Mappings in the list. */
- class1 = ( where > 0 ) ? astGetClass( ( *map_list )[ where - 1 ] ) : NULL;
- class2 = ( where < *nmap - 1 ) ? astGetClass( ( *map_list )[ where + 1 ] ) : NULL;
-
-/* A WcsMap can only combine with its own inverse. Set a flag indicating
- that we have not yet found a neighbour with which the WcsMap can be
- merged. */
- merge = 0;
-
-/* First check the lower neighbour (if any). */
- if( where > 0 ) {
- i1 = where - 1;
- i2 = where;
- neighbour = ( *map_list )[ i1 ];
- merge = CanMerge( ( *map_list )[ i1 ], (* invert_list)[ i1 ],
- ( *map_list )[ i2 ], (* invert_list)[ i2 ], status );
- }
-
-/* If the WcsMap can not be merged with its lower neighbour, check its
- upper neighbour (if any) in the same way. */
- if( !merge && where < *nmap - 1 ) {
- i1 = where;
- i2 = where + 1;
- neighbour = ( *map_list )[ i2 ];
- merge = CanMerge( ( *map_list )[ i1 ], (* invert_list)[ i1 ],
- ( *map_list )[ i2 ], (* invert_list)[ i2 ], status );
- }
-
-/* If either neighbour has passed these checks, it is the inverse of the
- WcsMap being checked. The pair of WcsMaps can be replaced by a single
- UnitMap. */
- if( merge ) {
-
-/* Annul the two WcsMaps. */
- (void) astAnnul( ( *map_list )[ i1 ] );
- (void) astAnnul( ( *map_list )[ i2 ] );
-
-/* Create a UnitMap, and store a pointer for it in place of the first
- WcsMap. */
- ( *map_list )[ i1 ] = (AstMapping *) astUnitMap( nin, "", status );
- ( *invert_list )[ i1 ] = 0;
-
-/* Shuffle down the remaining Mappings to fill the hole left by the
- second WcsMap. */
- for ( i = i2 + 1; i < *nmap; i++ ) {
- ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
- ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
- }
-
-/* Clear the vacated element at the end. */
- ( *map_list )[ *nmap - 1 ] = NULL;
- ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
- modified element. */
- (*nmap)--;
- result = i1;
-
-/* If the WcsMap could not merge directly with either of its neighbours,
- we consider whether it would be worthwhile to swap the WcsMap with
- either of its neighbours. This can only be done for certain PermMaps,
- and will usually require both Mappings to be modified (unless they are
- commutative). The advantage of swapping the order of the Mappings is that
- it may result in the WcsMap being adjacent to a Mapping with which it can
- merge directly on the next invocation of this function, thus reducing the
- number of Mappings in the list. */
- } else {
-
-/* Set a flag if we could swap the WcsMap with its higher neighbour. "do2"
- is returned if swapping the Mappings would simplify either of the
- Mappings. */
- if( where + 1 < *nmap ){
- swaphi = CanSwap( ( *map_list )[ where ],
- ( *map_list )[ where + 1 ],
- ( *invert_list )[ where ],
- ( *invert_list )[ where + 1 ], &do2, status );
- } else {
- do2 = 0;
- swaphi = 0;
- }
-
-/* If so, step through each of the Mappings which follow the WcsMap,
- looking for a Mapping with which the WcsMap could merge directly. Stop
- when such a Mapping is found, or if a Mapping is found with which the
- WcsMap could definitely not swap. Note the number of Mappings which
- separate the WcsMap from the Mapping with which it could merge (if
- any). */
- nstep2 = -1;
- if( swaphi ){
- for( i2 = where + 1; i2 < *nmap; i2++ ){
-
-/* See if we can merge with this Mapping. If so, note the number of steps
- between the two Mappings and leave the loop. */
- if( CanMerge( ( *map_list )[ i2 ], ( *invert_list )[ i2 ],
- ( *map_list )[ where ], ( *invert_list )[ where ], status ) ) {
- nstep2 = i2 - where - 1;
- break;
- }
-
-/* If there is no chance that we can swap with this Mapping, leave the loop
- with -1 for the number of steps to indicate that no merging is possible.
- WcsMaps can swap only with some PermMaps. */
- nclass = astGetClass( ( *map_list )[ i2 ] );
- if( strcmp( nclass, "PermMap" ) ) {
- break;
- }
-
- }
-
- }
-
-/* Do the same working forward from the WcsMap towards the start of the map
- list. */
- if( where > 0 ){
- swaplo = CanSwap( ( *map_list )[ where - 1 ],
- ( *map_list )[ where ],
- ( *invert_list )[ where - 1 ],
- ( *invert_list )[ where ], &do1, status );
- } else {
- do1 = 0;
- swaplo = 0;
- }
-
- nstep1 = -1;
- if( swaplo ){
- for( i1 = where - 1; i1 >= 0; i1-- ){
-
- if( CanMerge( ( *map_list )[ i1 ], ( *invert_list )[ i1 ],
- ( *map_list )[ where ], ( *invert_list )[ where ], status ) ) {
- nstep1 = where - 1 - i1;
- break;
- }
-
- nclass = astGetClass( ( *map_list )[ i1 ] );
- if( strcmp( nclass, "PermMap" ) ) {
- break;
- }
-
- }
-
- }
-
-/* Choose which neighbour to swap with so that the WcsMap moves towards the
- nearest Mapping with which it can merge. */
- if( do1 || (
- nstep1 != -1 && ( nstep2 == -1 || nstep2 > nstep1 ) ) ){
- nclass = class1;
- i1 = where - 1;
- i2 = where;
- } else if( do2 || nstep2 != -1 ){
- nclass = class2;
- i1 = where;
- i2 = where + 1;
- } else {
- nclass = NULL;
- }
-
-/* If there is a target Mapping in the list with which the WcsMap could
- merge, replace the supplied Mappings with swapped Mappings to bring a
- WcsMap closer to the target Mapping. */
- if( nclass ){
-
- WcsPerm( (*map_list) + i1, (*invert_list) + i1, where - i1, status );
-
-/* Store the index of the first modified Mapping. */
- result = i1;
-
-/* If there is no Mapping available for merging, it may still be
- advantageous to swap with a neighbour because the swapped Mapping may
- be simpler than the original Mappings. */
- } else if( swaphi || swaplo ) {
-
-/* Choose a neightbour to swap with. If both are suitable for swapping,
- swap with the lower. */
- if( swaplo ){
- nclass = class1;
- i1 = where - 1;
- i2 = where;
- } else {
- nclass = class2;
- i1 = where;
- i2 = where + 1;
- }
-
-/* Take copies of the Mapping and Invert flag arrays so we do not change
- the supplied values. */
- mc[ 0 ] = (AstMapping *) astCopy( ( (*map_list) + i1 )[0] );
- mc[ 1 ] = (AstMapping *) astCopy( ( (*map_list) + i1 )[1] );
- ic[ 0 ] = ( (*invert_list) + i1 )[0];
- ic[ 1 ] = ( (*invert_list) + i1 )[1];
-
-/* Swap these Mappings. */
- WcsPerm( mc, ic, where - i1, status );
-
-/* If neither of the swapped Mappings can be simplified further, then there
- is no point in swapping the Mappings, so just annul the map copies. */
- smc0 = astSimplify( mc[0] );
- smc1 = astSimplify( mc[1] );
-
- if( astGetClass( smc0 ) == astGetClass( mc[0] ) &&
- astGetClass( smc1 ) == astGetClass( mc[1] ) ) {
-
- mc[ 0 ] = (AstMapping *) astAnnul( mc[ 0 ] );
- mc[ 1 ] = (AstMapping *) astAnnul( mc[ 1 ] );
-
-/* If one or both of the swapped Mappings could be simplified, then annul
- the supplied Mappings and return the swapped mappings, storing the index
- of the first modified Mapping. */
- } else {
- (void ) astAnnul( ( (*map_list) + i1 )[0] );
- (void ) astAnnul( ( (*map_list) + i1 )[1] );
-
- ( (*map_list) + i1 )[0] = mc[ 0 ];
- ( (*map_list) + i1 )[1] = mc[ 1 ];
-
- ( (*invert_list) + i1 )[0] = ic[ 0 ];
- ( (*invert_list) + i1 )[1] = ic[ 1 ];
-
- result = i1;
-
- }
-
-/* Annul the simplied Mappings */
- smc0 = astAnnul( smc0 );
- smc1 = astAnnul( smc1 );
-
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static int *MapSplit( AstMapping *this_map, int nin, const int *in, AstMapping **map, int *status ){
-/*
-* Name:
-* MapSplit
-
-* Purpose:
-* Create a Mapping representing a subset of the inputs of an existing
-* WcsMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status )
-
-* Class Membership:
-* WcsMap method (over-rides the protected astMapSplit method
-* inherited from the Mapping class).
-
-* Description:
-* This function creates a new Mapping by picking specified inputs from
-* an existing WcsMap. This is only possible if the specified inputs
-* correspond to some subset of the WcsMap outputs. That is, there
-* must exist a subset of the WcsMap outputs for which each output
-* depends only on the selected WcsMap inputs, and not on any of the
-* inputs which have not been selected. If this condition is not met
-* by the supplied WcsMap, then a NULL Mapping is returned.
-
-* Parameters:
-* this
-* Pointer to the WcsMap to be split (the WcsMap is not actually
-* modified by this function).
-* nin
-* The number of inputs to pick from "this".
-* in
-* Pointer to an array of indices (zero based) for the inputs which
-* are to be picked. This array should have "nin" elements. If "Nin"
-* is the number of inputs of the supplied WcsMap, then each element
-* should have a value in the range zero to Nin-1.
-* map
-* Address of a location at which to return a pointer to the new
-* Mapping. This Mapping will have "nin" inputs (the number of
-* outputs may be different to "nin"). A NULL pointer will be
-* returned if the supplied WcsMap has no subset of outputs which
-* depend only on the selected inputs.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated array of ints. The number of
-* elements in this array will equal the number of outputs for the
-* returned Mapping. Each element will hold the index of the
-* corresponding output in the supplied WcsMap. The array should be
-* freed using astFree when no longer needed. A NULL pointer will
-* be returned if no output Mapping can be created.
-
-* Notes:
-* - If this function is invoked with the global error status set,
-* or if it should fail for any reason, then NULL values will be
-* returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
- AstWcsMap *newwcs; /* Pointer to returned WcsMap */
- AstWcsMap *this; /* Pointer to WcsMap structure */
- int *result; /* Pointer to returned array */
- int *inperm; /* Input axis permutation array */
- int *outperm; /* Output axis permutation array */
- int i; /* Loop count */
- int iin; /* Mapping input index */
- int ilat; /* Index of latitude axis in new WcsMap */
- int ilatlon; /* Index of last lat or lon axis */
- int ilon; /* Index of longitude axis in new WcsMap */
- int latax; /* Index of latitude axis in supplied WcsMap */
- int lonax; /* Index of longitude axis in supplied WcsMap */
- int mnin; /* No. of Mapping inputs */
- int ok; /* Are input indices OK? */
-
-/* Initialise */
- result = NULL;
- *map = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Invoke the parent astMapSplit method to see if it can do the job. */
- result = (*parent_mapsplit)( this_map, nin, in, map, status );
-
-/* If not, we provide a special implementation here. */
- if( !result ) {
-
-/* Get a pointer to the WcsMap structure. */
- this = (AstWcsMap *) this_map;
-
-/* Prevent compiler warnings. */
- ilatlon = -1;
-
-/* Allocate memory for the returned array. */
- result = astMalloc( sizeof( int )*(size_t) nin );
- if( astOK ) {
-
-/* Get the indices of the longitude and latitude axes in the WcsMap */
- lonax = astGetWcsAxis( this, 0 );
- latax = astGetWcsAxis( this, 1 );
-
-/* See if the selected axes include the longitude and/or latitude axis.
- At the same time check the axis indices are ok, and set up the output
- axis array. */
- ilat = -1;
- ilon = -1;
- mnin = astGetNin( this );
- ok = 1;
- for( i = 0; i < nin; i++ ) {
- iin = in[ i ];
- if( iin < 0 || iin >= mnin ) {
- ok = 0;
- break;
- } else if( iin == lonax ) {
- ilon = i;
- ilatlon = i;
- } else if( iin == latax ) {
- ilat = i;
- ilatlon = i;
- }
- result[ i ] = iin;
- }
-
-/* If any of the input indices were invalid, free the returned array. */
- if( !ok ) {
- result = astFree( result );
-
-/* If both longitude and latitude axes are selected, then the returned Mapping
- is a WcsMap. Create one based on the supplied WcsMap. */
- } else if( ilat != -1 && ilon != -1 ) {
- newwcs = astWcsMap( nin, astGetWcsType( this ), ilon + 1, ilat + 1,
- "", status );
- CopyPV( this, newwcs, status );
- astSetInvert( newwcs, astGetInvert( this ) );
- *map = (AstMapping *) newwcs;
-
-/* If neither the longitude nor the latitude axis has been selected, then
- the returned Mapping is a UnitMap. */
- } else if( ilat == -1 && ilon == -1 ) {
- *map = (AstMapping *) astUnitMap( nin, "", status );
-
-/* If only one of the latitude and longitude axes was selected we remove
- it from the returned Mapping (a PermMap) and list of outputs */
- } else if( nin > 1 ) {
-
- for( i = ilatlon; i < nin - 1; i++ ) {
- result[ i ] = result[ i + 1 ];
- }
- result[ i ] = -1;
-
- inperm = astMalloc( sizeof( int )*(size_t) nin );
- outperm = astMalloc( sizeof( int )*(size_t) ( nin - 1 ) );
- if( outperm ) {
- for( i = 0; i < ilatlon; i++ ) {
- inperm[ i ] = i;
- outperm[ i ] = i;
- }
- inperm[ ilatlon ] = INT_MAX;
- for( i = ilatlon + 1; i < nin; i++ ) {
- inperm[ i ] = i - 1;
- outperm[ i - 1 ] = i;
- }
-
- *map = (AstMapping *) astPermMap( nin, inperm, nin - 1, outperm, NULL, " ", status );
-
- }
- inperm = astFree( inperm );
- outperm = astFree( outperm );
-
- } else {
- result = astFree( result );
- }
- }
- }
-
-/* Free returned resources if an error has occurred. */
- if( !astOK ) {
- result = astFree( result );
- *map = astAnnul( *map );
- }
-
-/* Return the list of output indices. */
- return result;
-}
-
-static void PermGet( AstPermMap *map, int **outperm, int **inperm,
- double **consts, int *status ){
-/*
-* Name:
-* PermGet
-
-* Purpose:
-* Get the axis permutation and constants array for a PermMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* void PermGet( AstPermMap *map, int **outperm, int **inperm,
-* double **const, int *status )
-
-* Class Membership:
-* WcsMap member function
-
-* Description:
-* This function returns axis permutation and constants arrays which can
-* be used to create a PermMap which is equivalent to the supplied PermMap.
-
-* Parameters:
-* map
-* The PermMap.
-* outperm
-* An address at which to return a popinter to an array of ints
-* holding the output axis permutation array. The array should be
-* released using astFree when no longer needed.
-* inperm
-* An address at which to return a popinter to an array of ints
-* holding the input axis permutation array. The array should be
-* released using astFree when no longer needed.
-* consts
-* An address at which to return a popinter to an array of doubles
-* holding the constants array. The array should be released using
-* astFree when no longer needed.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - NULL pointers are returned if an error has already occurred, or if
-* this function should fail for any reason.
-*/
-
-/* Local Variables: */
- AstPointSet *pset1; /* PointSet holding input positions for PermMap */
- AstPointSet *pset2; /* PointSet holding output positions for PermMap */
- double **ptr1; /* Pointer to pset1 data */
- double **ptr2; /* Pointer to pset2 data */
- double *cnst; /* Pointer to constants array */
- double cn; /* Potential new constant value */
- double ip; /* Potential output axis index */
- double op; /* Potential input axis index */
- int *inprm; /* Pointer to input axis permutation array */
- int *outprm; /* Pointer to output axis permutation array */
- int i; /* Axis count */
- int nc; /* Number of constants stored so far */
- int nin; /* No. of input coordinates for the PermMap */
- int nout; /* No. of output coordinates for the PermMap */
-
-/* Initialise. */
- if( outperm ) *outperm = NULL;
- if( inperm ) *inperm = NULL;
- if( consts ) *consts = NULL;
-
-/* Check the global error status and the supplied pointers. */
- if ( !astOK || !outperm || !inperm || !consts ) return;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- nc = 0;
-
-/* Get the number of input and output axes for the supplied PermMap. */
- nin = astGetNin( map );
- nout = astGetNout( map );
-
-/* Allocate the memory for the returned arrays. */
- outprm = (int *) astMalloc( sizeof( int )* (size_t) nout );
- inprm = (int *) astMalloc( sizeof( int )* (size_t) nin );
- cnst = (double *) astMalloc( sizeof( double )* (size_t) ( nout + nin ) );
-
-/* Returned the pointers to these arrays.*/
- *outperm = outprm;
- *inperm = inprm;
- *consts = cnst;
-
-/* Create two PointSets, each holding two points, which can be used for
- input and output positions with the PermMap. */
- pset1 = astPointSet( 2, nin, "", status );
- pset2 = astPointSet( 2, nout, "", status );
-
-/* Set up the two input positions to be [0,1,2...] and [-1,-1,-1,...]. The
- first position is used to enumerate the axes, and the second is used to
- check for constant axis values. */
- ptr1 = astGetPoints( pset1 );
- if( astOK ){
- for( i = 0; i < nin; i++ ){
- ptr1[ i ][ 0 ] = ( double ) i;
- ptr1[ i ][ 1 ] = -1.0;
- }
- }
-
-/* Use the PermMap to transform these positions in the forward direction. */
- (void) astTransform( map, pset1, 1, pset2 );
-
-/* Look at the mapped positions to determine the output axis permutation
- array. */
- ptr2 = astGetPoints( pset2 );
- if( astOK ){
-
-/* No constant axis valeus found yet. */
- nc = 0;
-
-/* Do each output axis. */
- for( i = 0; i < nout; i++ ){
-
-/* If the output axis value is copied from an input axis value, the index
- of the appropriate input axis will be in the mapped first position. */
- op = ptr2[ i ][ 0 ];
-
-/* If the output axis value is assigned a constant value, the result of
- mapping the two different input axis values will be the same. */
- cn = ptr2[ i ][ 1 ];
- if( op == cn ) {
-
-/* We have found another constant. Store it in the constants array, and
- store the index of the constant in the output axis permutation array. */
- cnst[ nc ] = cn;
- outprm[ i ] = -( nc + 1 );
- nc++;
-
-/* If the output axis values are different, then the output axis value
- must be copied from the input axis value. */
- } else {
- outprm[ i ] = (int) ( op + 0.5 );
- }
- }
- }
-
-/* Now do the same thing to determine the input permutation array. */
- if( astOK ){
- for( i = 0; i < nout; i++ ){
- ptr2[ i ][ 0 ] = ( double ) i;
- ptr2[ i ][ 1 ] = -1.0;
- }
- }
-
- (void) astTransform( map, pset2, 0, pset1 );
-
- if( astOK ){
-
- for( i = 0; i < nin; i++ ){
-
- ip = ptr1[ i ][ 0 ];
- cn = ptr1[ i ][ 1 ];
- if( ip == cn ) {
-
- cnst[ nc ] = cn;
- inprm[ i ] = -( nc + 1 );
- nc++;
-
- } else {
- inprm[ i ] = (int) ( ip + 0.5 );
- }
- }
- }
-
-/* Annul the PointSets. */
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
-
-/* If an error has occurred, attempt to free the returned arrays. */
- if( !astOK ) {
- *outperm = (int *) astFree( (void *) *outperm );
- *inperm = (int *) astFree( (void *) *inperm );
- *consts = (double *) astFree( (void *) *consts );
- }
-
-/* Return. */
- return;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a WcsMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* void SetAttrib( AstObject *this, const char *setting )
-
-* Class Membership:
-* WcsMap member function (over-rides the astSetAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function assigns an attribute value for a WcsMap, the
-* attribute and its value being specified by means of a string of
-* the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in
-* lower case with no white space present. The value to the right
-* of the "=" should be a suitable textual representation of the
-* value to be assigned and this will be interpreted according to
-* the attribute's data type. White space surrounding the value is
-* only significant for string attributes.
-
-* Parameters:
-* this
-* Pointer to the WcsMap.
-* setting
-* Pointer to a null-terminated string specifying the new attribute
-* value.
-*/
-
-/* Local Variables: */
- AstWcsMap *this; /* Pointer to the WcsMap structure */
- double dval; /* Attribute value */
- int len; /* Length of setting string */
- int nc; /* Number of characters read by astSscanf */
- int i; /* Axis index */
- int m; /* Projection parameter number */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the WcsMap structure. */
- this = (AstWcsMap *) this_object;
-
-/* Obtain the length of the setting string. */
- len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
- the setting string and extract the attribute value (or an offset to
- it in the case of string values). In each case, use the value set
- in "nc" to check that the entire string was matched. Once a value
- has been obtained, use the appropriate method to set it. */
-
-/* ProjP(i). */
-/* --------- */
- if ( nc = 0, ( 2 == astSscanf( setting, "projp(%d)= %lg %n", &m, &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetPV( this, astGetWcsAxis( this, 1 ), m, dval );
-
-/* PV. */
-/* --- */
- } else if ( nc = 0, ( 3 == astSscanf( setting, "pv%d_%d= %lg %n", &i, &m, &dval, &nc ) )
- && ( nc >= len ) ) {
- astSetPV( this, i - 1, m, dval );
-
-/* Define macros to see if the setting string matches any of the
- read-only attributes of this class. */
-#define MATCH(attrib) \
- ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
- ( nc >= len ) )
-
-#define MATCH2(attrib) \
- ( nc = 0, ( 1 == astSscanf( setting, attrib "(%d)=%*[^\n]%n", &i, &nc ) ) && \
- ( nc >= len ) )
-
-/* If the attribute was not recognised, use this macro to report an error
- if a read-only attribute has been specified. */
- } else if ( MATCH( "wcstype" ) ||
- MATCH( "natlat" ) ||
- MATCH( "natlon" ) ||
- MATCH2( "wcsaxis" ) ) {
- astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.", status,
- setting, astGetClass( this ) );
- astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-
-/* Undefine macros local to this function. */
-#undef MATCH
-#undef MATCH2
-}
-
-static void SetPV( AstWcsMap *this, int i, int m, double val, int *status ) {
-/*
-*+
-* Name:
-* astSetPV
-
-* Purpose:
-* Set the value of a PVi_m attribute.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* void astSetPV( AstWcsMap *this, int i, int m, double val )
-
-* Class Membership:
-* WcsMap protected function
-
-* Description:
-* This function stores a value for the specified member of the PV
-* attribute array.
-
-* Parameters:
-* this
-* A pointer to the WcsMap.
-* i
-* Zero based axis index.
-* m
-* Zero based parameter index.
-
-*-
-*/
-/* Local Variables: */
- int naxis; /* No. of axes in WcsMap */
- int mm; /* Loop count */
- int mxpar; /* Max number of parameters allowed for the axis */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Find the number of axes in the WcsMap. */
- naxis = astGetNin( this );
-
-/* Validate the axis index. */
- if( i < 0 || i >= naxis ){
- astError( AST__AXIIN, "astSetPV(%s): Axis index (%d) is invalid in "
- "attribute PV%d_%d - it should be in the range 1 to %d.",
- status, astGetClass( this ), i + 1, i + 1, m, naxis );
-
-/* Validate the parameter index. */
- } else {
- mxpar = astGetPVMax( this, i );
- if( m < 0 || m > mxpar ){
- astError( AST__AXIIN, "astSetPV(%s): Parameter index (%d) is invalid "
- "in attribute PV%d_%d for a \"%s\" projection - it should be "
- "in the range 0 to %d.", status, astGetClass( this ), m, i + 1, m,
- FindPrjData( this->type, status )->ctype, mxpar );
-
-/* If the dynamic arrays used to hold the parameters have not yet been
- created, create them now, and store pointers to them in the WcsMap
- structure. */
- } else {
- if( !this->np || !this->p ) {
- this->np = (int *) astMalloc( sizeof(int)*naxis );
- this->p = (double **) astMalloc( sizeof(double *)*naxis );
- if( astOK ) {
- for( mm = 0; mm < naxis; mm++ ) {
- this->np[ mm ] = 0;
- this->p[ mm ] = NULL;
- }
- }
-
-/* Release the dynamic arrays if an error has occurred. */
- if( !astOK ) FreePV( this, status );
-
- }
- }
-
-/* Check we can use the arrays. */
- if( astOK ) {
-
-/* Ensure the dynamic array used to hold parameter values for the
- specified axis is big enough to hold the specified parameter. */
- this->p[ i ] = (double *) astGrow( (void *) this->p[ i ],
- m + 1, sizeof(double) );
-
-/* Check we can use this array. */
- if( astOK ) {
-
-/* Store the supplied value in the relevant element of this array. */
- this->p[ i ][ m ] = val;
-
-/* If the array was extended to hold this parameter... */
- if( this->np[ i ] <= m ) {
-
-/* Fill any other new elements in this array with AST__BAD */
- for( mm = this->np[ i ]; mm < m; mm++ ) this->p[ i ][ mm ] = AST__BAD;
-
-/* Remember the new array size. */
- this->np[ i ] = m + 1;
- }
- }
- }
- }
-
-/* Re-initialize the values stored in the "AstPrjPrm" structure. */
- InitPrjPrm( this, status );
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a WcsMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* WcsMap member function (over-rides the astTestAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a WcsMap's attributes.
-
-* Parameters:
-* this
-* Pointer to the WcsMap.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstWcsMap *this; /* Pointer to the WcsMap structure */
- int i; /* Axis index */
- int m; /* Projection parameter index */
- int len; /* Length os supplied string */
- int nc; /* No. of characters read by astSscanf */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the WcsMap structure. */
- this = (AstWcsMap *) this_object;
-
-/* Obtain the length of the attrib string. */
- len = strlen( attrib );
-
-/* Check the attribute name and test the appropriate attribute. */
-
-
-/* ProjP(i). */
-/* --------- */
- if ( nc = 0, ( 1 == astSscanf( attrib, "projp(%d)%n", &m, &nc ) )
- && ( nc >= len ) ) {
- result = astTestPV( this, astGetWcsAxis( this, 1 ), m );
-
-/* PV. */
-/* --- */
- } else if ( nc = 0, ( 2 == astSscanf( attrib, "pv%d_%d%n", &i, &m, &nc ) )
- && ( nc >= len ) ) {
- result = astTestPV( this, i - 1, m );
-
-/* If the name is not recognised, test if it matches any of the
- read-only attributes of this class. If it does, then return
- zero. */
- } else if ( !strcmp( attrib, "wcstype" ) ||
- !strcmp( attrib, "natlat" ) ||
- !strcmp( attrib, "natlon" ) ||
- ( nc = 0, ( 1 == astSscanf( attrib, "wcsaxis(%d)%n", &i, &nc ) )
- && ( nc >= len ) ) ) {
- result = 0;
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static int TestPV( AstWcsMap *this, int i, int m, int *status ) {
-/*
-*+
-* Name:
-* astTestPV
-
-* Purpose:
-* Test a PVi_m attribute.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* int astTestPV( AstWcsMap *this, int i, int m )
-
-* Class Membership:
-* WcsMap protected function
-
-* Description:
-* This function returns 1 if a specified member of the PV attribute
-* array is currently set, and 0 otherwise.
-
-* Parameters:
-* this
-* A pointer to the WcsMap.
-* i
-* Zero based axis index.
-* m
-* Zero based parameter index.
-
-* Returned Value:
-* 1 if the attribute is set, 0 otherwise.
-
-*-
-*/
-/* Local Variables: */
- int ret;
- int npar;
- int mxpar;
-
-/* Initialise */
- ret = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return ret;
-
-/* Validate the axis index. */
- if( i < 0 || i >= astGetNin( this ) ){
- astError( AST__AXIIN, "astTestPV(%s): Axis index (%d) is invalid in "
- "attribute PV%d_%d - it should be in the range 1 to %d.",
- status, astGetClass( this ), i + 1, i + 1, m, astGetNin( this ) );
-
-/* Find the maximum number of parameters allowed for the axis. */
- } else {
- mxpar = astGetPVMax( this, i );
-
-/* Ignore unused parameters. */
- if( m < 0 || m > mxpar ){
-
-/* See if the parameter is currently set. */
- } else if( this->np && this->p ){
- npar = this->np[ i ];
- if( m < npar && this->p[ i ] ){
- ret = ( this->p[ i ][ m ] != AST__BAD );
- }
- }
- }
-
- return ret;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-*+
-* Name:
-* Transform
-
-* Purpose:
-* Apply a WcsMap to a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* WcsMap member function (over-rides the astTransform method inherited
-* from the Mapping class).
-
-* Description:
-* This function takes a WcsMap and a set of points encapsulated in a
-* PointSet and transforms the points using the requested projection.
-
-* Parameters:
-* this
-* Pointer to the WcsMap.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - Assuming the WcsMap has not been inverted, the forward mapping
-* transforms spherical (longitude,latitude) pairs into Cartesian (x,y)
-* pairs. Longitude and latitude values are given and returned in radians,
-* and no restrictions are imposed on their ranges. X and Y values are
-* also given and returned in radians, with no restrictions imposed on
-* their ranges.
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of coordinates for the WcsMap being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*-
-*/
-
-/* Local Variables: */
- AstPointSet *result; /* Pointer to output PointSet */
- AstWcsMap *map; /* Pointer to WcsMap to be applied */
- double **ptr_in; /* Pointer to input coordinate data */
- double **ptr_out; /* Pointer to output coordinate data */
- int i; /* Axis count */
- int latax; /* Latitude axis index */
- int lonax; /* Longitude axis index */
- int npoint; /* Number of points */
- int status_value; /* Status from Map function */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the WcsMap. */
- map = (AstWcsMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Mapping class. This function validates
- all arguments and generates an output PointSet if necessary, but does not
- actually transform any coordinate values. */
- result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points from the input PointSet and obtain pointers
- for accessing the input and output coordinate values. */
- npoint = astGetNpoint( in );
- ptr_in = astGetPoints( in );
- ptr_out = astGetPoints( result );
-
-/* If a genuine FITS-WCS projection is being performed... */
- if( astGetWcsType( map ) != AST__WCSBAD ){
-
-/* Determine whether to apply the forward or inverse mapping, according to the
- direction specified and whether the mapping has been inverted. */
- if ( astGetInvert( map ) ) forward = !forward;
-
-/* Do the coordinate transformation. */
- lonax = astGetWcsAxis( map, 0 );
- latax = astGetWcsAxis( map, 1 );
- status_value = Map( map, forward, npoint, ptr_in[ lonax ], ptr_in[ latax ],
- ptr_out[ lonax ], ptr_out[ latax ], status );
-
-/* Report an error if the projection type was unrecognised. */
- if ( status_value == 1 ) {
- astError( AST__WCSTY, "astTransform(%s): The %s specifies an "
- "illegal projection type ('%s').", status, astClass( this ),
- astClass( this ), FindPrjData( map->type, status )->desc );
-
-/* Report an error if the projection parameters were invalid. */
- } else if ( status_value == 2 ) {
- astError( AST__WCSPA, "astTransform(%s): The %s projection "
- "parameter values in this %s are unusable.", status,
- astClass( this ), FindPrjData( map->type, status )->desc,
- astClass( this ) );
-
-/* Report an error if required projection parameters were not supplied. */
- } else if ( status_value >= 400 ) {
- astError( AST__WCSPA, "astTransform(%s): Required projection "
- "parameter PV%d_%d was not supplied for a %s "
- "projection.", status, astClass( this ), latax+1, status_value - 400,
- FindPrjData( map->type, status )->desc );
-
- } else if ( status_value >= 100 ) {
- astError( AST__WCSPA, "astTransform(%s): Required projection "
- "parameter PV%d_%d was not supplied for a %s "
- "projection.", status, astClass( this ), lonax+1, status_value - 100,
- FindPrjData( map->type, status )->desc );
- }
-
-/* Copy the remaining axes (i.e. all axes except the longitude and latitude
- axes) from the input to the output. */
- for( i = 0; i < astGetNcoord( in ); i++ ){
- if( ( i != lonax && i != latax ) ){
- (void) memcpy( ptr_out[ i ], ptr_in[ i ], sizeof( double )*
- (size_t) npoint );
- }
-
- }
-
-/* If there is no FITS-WCS projection, just copy all the axes from input to
- output. */
- } else {
- for( i = 0; i < astGetNcoord( in ); i++ ){
- (void) memcpy( ptr_out[ i ], ptr_in[ i ], sizeof( double )*
- (size_t) npoint );
- }
- }
-
-/* If an error has occurred, attempt to delete the results PointSet. */
- if ( !astOK ) result = astDelete( result );
-
-/* Return a pointer to the output PointSet. */
- return result;
-
-}
-
-int astWcsPrjType_( const char *ctype, int *status ){
-/*
-*+
-* Name:
-* astWcsPrjType
-
-* Purpose:
-* Get the integer identifier for a WCSLIB projection given by a FITS
-* CTYPE keyword value.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* int astWcsPrjType( const char *ctype )
-
-* Class Membership:
-* WcsMap protected function
-
-* Description:
-* This function returns the integer identifier for the WCSLIB projection
-* specified by the supplied FITS CTYPE keyword value. The returned
-* value can be passed to astWcsMap to create a WcsMap which implements
-* the corresponding projection.
-
-* Parameters:
-* ctype
-* A pointer to the last 4 characters of a FITS CTYPE1 (etc) keyword.
-
-* Returned Value:
-* The integer identifier associated with the projection.
-
-* Notes:
-* - A value of AST__WCSBAD is returned if the projection type is
-* unknown, but no error is reported.
-*-
-*/
-
- PrjData *data;
- char buffer[81];
- const char *a;
- char *b;
-
-/* Remove leading and trailing blanks from the supplied string. */
- a = ctype;
- b = buffer;
- while( *a && (b - buffer) < 80 ){
- if( !isspace( (int) *a ) ) {
- *(b++) = *a;
- }
- a++;
- }
- *b = 0;
-
-/* Search for the projection in the list of available projectons. */
- data = PrjInfo;
- while( data->prj != AST__WCSBAD && strcmp( data->ctype, buffer ) ) data ++;
-
- return data->prj;
-}
-
-const char *astWcsPrjName_( int type, int *status ){
-/*
-*+
-* Name:
-* astWcsPrjName
-
-* Purpose:
-* Get the name of a projection given its integer identifier.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* const char *astWcsPrjName( int type )
-
-* Class Membership:
-* WcsMap protected function
-
-* Description:
-* This function returns a string holding 4 characters which can be
-* used as the last 4 characters of a FITS CTYPE keyword value
-* describing the WCSLIB projection specified by the supplied type.
-
-* Parameters:
-* type
-* The projection type.
-
-* Returned Value:
-* A pointer to a null-terminated const character string holding the
-* last 4 CTYPE characters describing the projection.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-*-
-*/
-
- PrjData *data;
- data = PrjInfo;
- while( data->prj != AST__WCSBAD && data->prj != type ) data ++;
- return data->ctype;
-}
-
-const char *astWcsPrjDesc_( int type, int *status ){
-/*
-*+
-* Name:
-* astWcsPrjDesc
-
-* Purpose:
-* Get a textual description of a projection given its integer
-* identifier.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* const char *astWcsPrjDesc( int type )
-
-* Class Membership:
-* WcsMap protected function
-
-* Description:
-* This function returns a pointer to a string string holding a
-* textual description of the specified projection type.
-
-* Parameters:
-* type
-* The projection type.
-
-* Returned Value:
-* A pointer to a null-terminated const character string holding the
-* projection description.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-*-
-*/
-
- PrjData *data;
- data = PrjInfo;
- while( data->prj != AST__WCSBAD && data->prj != type ) data ++;
- return data->desc;
-}
-
-static void WcsPerm( AstMapping **maps, int *inverts, int iwm, int *status ){
-/*
-* Name:
-* WcsPerm
-
-* Purpose:
-* Swap a WcsMap and a PermMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* void WcsPerm( AstMapping **maps, int *inverts, int iwm, int *status )
-
-* Class Membership:
-* WcsMap member function
-
-* Description:
-* A list of two Mappings is supplied containing a WcsMap and a
-* PermMap. These Mappings are annulled, and replaced with
-* another pair of Mappings consisting of a WcsMap and a PermMap
-* in the opposite order. These Mappings are chosen so that their
-* combined effect is the same as the original pair of Mappings.
-
-* Parameters:
-* maps
-* A pointer to an array of two Mapping pointers.
-* inverts
-* A pointer to an array of two invert flags.
-* iwm
-* The index within "maps" of the WcsMap.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - All links between input and output axes in the PermMap must
-* be bi-directional, but there can be unconnected axes, and there
-* need not be the same number of input and output axes. Both
-* longitude and latitude axes must be passed by the PermMap.
-
-*/
-
-/* Local Variables: */
- AstPermMap *pm; /* Pointer to the supplied PermMap */
- AstPermMap *newpm; /* Pointer to the returned PermMap */
- AstMapping *newwm; /* Pointer to the returned WcsMap */
- AstWcsMap *wm; /* Pointer to the supplied WcsMap */
- double *consts; /* Pointer to constants array */
- int *inperm; /* Pointer to input axis permutation array */
- int *outperm; /* Pointer to output axis permutation array */
- int latax; /* Index of latitude axis */
- int lonax; /* Index of longitude axis */
- int npin; /* No. of input axes in supplied PermMap */
- int npout; /* No. of output axes in supplied PermMap */
- int old_pinv; /* Invert value for the supplied PermMap */
- int old_winv; /* Invert value for the supplied WcsMap */
- int type; /* Projection type */
- int done; /* Have Mappings been swapped? */
- int i; /* AXis index */
- double *p; /* Pointer to input position */
- double *q; /* Pointer to output position */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- newpm = NULL;
- newwm = NULL;
-
-/* Store pointers to the supplied WcsMap and the PermMap. */
- wm = (AstWcsMap *) maps[ iwm ];
- pm = (AstPermMap *) maps[ 1 - iwm ];
-
-/* Temporarily set the Invert attribute of the supplied PermMap to the
- supplied values. */
- old_pinv = astGetInvert( pm );
- astSetInvert( pm, inverts[ 1 - iwm ] );
- old_winv = astGetInvert( wm );
- astSetInvert( wm, inverts[ iwm ] );
-
-/* Get the projection type of the supplied WcsMap and the indices of the
- longitude and latitude axes. */
- type = astGetWcsType( wm );
- lonax = astGetWcsAxis( wm, 0 );
- latax = astGetWcsAxis( wm, 1 );
-
-/* Get the axis permutation and constants arrays representing the
- PermMap. Note, no constants are used more than once in the returned
- arrays (i.e. duplicate constants are returned in "consts" if more than
- one axis uses a given constant). */
- PermGet( pm, &outperm, &inperm, &consts, status );
-
- if( astOK ) {
-
-/* Get the number of input and output axes in the PermMap. */
- npin = astGetNin( pm );
- npout = astGetNout( pm );
-
-/* If the lon and lat axes of the WcsMap are unassigned, we return a
- UnitMap instead of a WcsMap.
- ================================================================ */
- done = 0;
-
-/* If the PermMap comes after the WcsMap... */
- if( iwm == 0 ) {
- if( inperm[ lonax ] < 0 && inperm[ latax ] < 0 ) {
- done = 1;
-
-/* Transform the constant values, using AST__BAD for other axes. */
- p = (double *) astMalloc( sizeof( double )*(size_t) npin );
- q = (double *) astMalloc( sizeof( double )*(size_t) npin );
- if( astOK ) {
- for( i = 0; i < npin; i++ ) {
- if( inperm[ i ] < 0 ) {
- p[ i ] = consts[ -inperm[ i ] - 1 ];
- } else {
- p[ i ] = AST__BAD;
- }
- }
-
-/* Transform this position using the inverse WcsMap. */
- astTranN( wm, 1, npin, 1, p, 0, npin, 1, q );
-
-/* The new PermMap has the same axis permutations as the original, but it
- has different constants. */
- for( i = 0; i < npin; i++ ) {
- if( inperm[ i ] < 0 ) {
- consts[ -inperm[ i ] - 1 ] = q[ i ];
- }
- }
-
- newpm = astPermMap( npin, inperm, npout, outperm, consts, "", status );
-
-/* Use a UnitMap instead of the WcsMap. */
- newwm = (AstMapping *) astUnitMap( npout, "", status );
-
- }
-
-/* Free memory */
- p = astFree( p );
- q = astFree( q );
-
- }
-
-/* If the WcsMap comes after the PermMap... */
- } else {
- if( outperm[ lonax ] < 0 && outperm[ latax ] < 0 ) {
- done = 1;
-
-/* Transform the constant values, using AST__BAD for other axes. */
- p = (double *) astMalloc( sizeof( double )*(size_t) npout );
- q = (double *) astMalloc( sizeof( double )*(size_t) npout );
- if( astOK ) {
- for( i = 0; i < npout; i++ ) {
- if( outperm[ i ] < 0 ) {
- p[ i ] = consts[ -outperm[ i ] - 1 ];
- } else {
- p[ i ] = AST__BAD;
- }
- }
-
-/* Transform this position using the forward WcsMap. */
- astTranN( wm, 1, npout, 1, p, 1, npout, 1, q );
-
-/* The new PermMap has the same axis permutations as the original, but it
- has different constants. */
- for( i = 0; i < npout; i++ ) {
- if( outperm[ i ] < 0 ) {
- consts[ -outperm[ i ] - 1 ] = q[ i ];
- }
- }
-
- newpm = astPermMap( npin, inperm, npout, outperm, consts, "", status );
-
-/* Use a UnitMap instead ofhte WcsMap. */
- newwm = (AstMapping *) astUnitMap( npin, "", status );
-
- }
-
-/* Free memory */
- p = astFree( p );
- q = astFree( q );
-
- }
- }
-
-/* If the lon and lat axes of the WcsMap are both assigned, we return a
- WcsMap.
- ================================================================ */
- if( !done ) {
-
-/* Create the new WcsMap with permuted longitude and latitude axes. Note,
- the private interface to astWcsMap uses 1-based axis indices. */
- if( iwm == 0 ) {
- newwm = (AstMapping *) astWcsMap( npout, type, inperm[ lonax ] + 1,
- inperm[ latax ] + 1, "", status );
- } else {
- newwm = (AstMapping *) astWcsMap( npin, type, outperm[ lonax ] + 1,
- outperm[ latax ] + 1, "", status );
- }
-
-/* Copy any projection parameters which have been set. */
- CopyPV( wm, (AstWcsMap *) newwm, status );
-
-/* Set the invert flag. */
- astSetInvert( newwm, inverts[ iwm ] );
-
-/* The returned PermMap is a clone of the supplied PermMap */
- newpm = astClone( pm );
- }
-
-/* Free the axis permutation and constants arrays. */
- outperm = (int *) astFree( (void *) outperm );
- inperm = (int *) astFree( (void *) inperm );
- consts = (double *) astFree( (void *) consts );
- }
-
-/* Re-instate the original value of the Invert attributes. */
- astSetInvert( pm, old_pinv );
- astSetInvert( wm, old_winv );
-
-/* Annul the supplied pointers */
- pm = astAnnul( pm );
- wm = astAnnul( wm );
-
-/* Store the returned Mappings. */
- maps[ iwm ] = (AstMapping *) newpm;
- inverts[ iwm ] = astGetInvert( newpm );
- maps[ 1 - iwm ] = newwm;
- inverts[ 1 - iwm ] = astGetInvert( newwm );
-
-/* Return. */
- return;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-
-/* ProjP. */
-/* ------ */
-/*
-*att++
-* Name:
-* ProjP(m)
-
-* Purpose:
-* FITS-WCS projection parameters.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute provides aliases for the PV attributes, which
-* specifies the projection parameter values to be used by a WcsMap
-* when implementing a FITS-WCS sky projection. ProjP is retained for
-* compatibility with previous versions of FITS-WCS and AST. New
-* applications should use the PV attibute instead.
-*
-* Attributes ProjP(0) to ProjP(9) correspond to attributes PV<axlat>_0
-* to PV<axlat>_9, where <axlat> is replaced by the index of the
-* latitude axis (given by attribute WcsAxis(2)). See PV for further
-* details.
-
-* Applicability:
-* WcsMap
-* All WcsMaps have this attribute.
-
-*att--
-*/
-
-/* PV. */
-/* --- */
-/*
-*att++
-* Name:
-* PVi_m
-
-* Purpose:
-* FITS-WCS projection parameters.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point.
-
-* Description:
-* This attribute specifies the projection parameter values to be
-* used by a WcsMap when implementing a FITS-WCS sky projection.
-* Each PV attribute name should include two integers, i and m,
-* separated by an underscore. The axis index is specified
-* by i, and should be in the range 1 to 99. The parameter number
-* is specified by m, and should be in the range 0 to 99. For
-* example, "PV2_1=45.0" would specify a value for projection
-* parameter 1 of axis 2 in a WcsMap.
-*
-* These projection parameters correspond exactly to the values
-* stored using the FITS-WCS keywords "PV1_1", "PV1_2", etc. This
-* means that projection parameters which correspond to angles must
-* be given in degrees (despite the fact that the angular
-* coordinates and other attributes used by a WcsMap are in
-* radians).
-*
-* The set of projection parameters used by a WcsMap depends on the
-* type of projection, which is determined by its WcsType
-* parameter. Most projections either do not require projection
-* parameters, or use parameters 1 and 2 associated with the latitude
-* axis. You should consult the FITS-WCS paper for details.
-*
-* Some projection parameters have default values (as defined in
-* the FITS-WCS paper) which apply if no explicit value is given.
-* You may omit setting a value for these "optional" parameters and the
-* default will apply. Some projection parameters, however, have no
-* default and a value must be explicitly supplied. This is most
-* conveniently
-c done using the "options" argument of astWcsMap (q.v.) when a WcsMap
-f done using the OPTIONS argument of AST_WCSMAP (q.v.) when a WcsMap
-* is first created. An error will result when a WcsMap is used to
-* transform coordinates if any of its required projection
-* parameters has not been set and lacks a default value.
-
-* A "get" operation for a parameter which has not been assigned a value
-* will return the default value defined in the FITS-WCS paper, or
-* AST__BAD if the paper indicates that the parameter has no default.
-* A default value of zero is returned for parameters which are not
-* accessed by the projection.
-*
-* Note, the FITS-WCS paper reserves parameters 1 and 2 on the longitude
-* axis to hold the native longitude and latitude of the fiducial
-* point of the projection, in degrees. The default values for these
-* parameters are determined by the projection type. The AST-specific
-* TPN projection does not use this convention - all projection
-* parameters for both axes are used to represent polynomical correction
-* terms, and the native longitude and latitude at the fiducial point may
-* not be changed from the default values of zero and 90 degrees.
-
-* Applicability:
-* WcsMap
-* All WcsMaps have this attribute.
-
-* Notes:
-* - If the projection parameter values given for a WcsMap do not
-* satisfy all the required constraints (as defined in the FITS-WCS
-* paper), then an error will result when the WcsMap is used to
-* transform coordinates.
-*att--
-*/
-
-/* PVMax. */
-/* ------ */
-/*
-*att++
-* Name:
-* PVMax(i)
-
-* Purpose:
-* Maximum number of FITS-WCS projection parameters.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer, read-only.
-
-* Description:
-* This attribute specifies the largest legal index for a PV projection
-* parameter attached to a specified axis of the WcsMap (i.e. the
-* largest legal value for "m" when accessing the "PVi_m" attribute).
-* The axis index is specified by i, and should be in the range 1 to 99.
-* The value for each axis is determined by the projection type specified
-* when the WcsMap
-c is first created using astWcsMap and cannot subsequently be
-f is first created using AST_WCSMAP and cannot subsequently be
-* changed.
-
-* Applicability:
-* WcsMap
-* All WcsMaps have this attribute.
-*att--
-*/
-
-/* WcsType. */
-/* -------- */
-/*
-*att++
-* Name:
-* WcsType
-
-* Purpose:
-* FITS-WCS projection type.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer, read-only.
-
-* Description:
-* This attribute specifies which type of FITS-WCS projection will
-* be performed by a WcsMap. The value is specified when a WcsMap
-c is first created using astWcsMap and cannot subsequently be
-f is first created using AST_WCSMAP and cannot subsequently be
-* changed.
-*
-c The values used are represented by macros with names of
-f The values used are represented by symbolic constants with names of
-* the form "AST__XXX", where "XXX" is the (upper case) 3-character
-* code used by the FITS-WCS "CTYPEi" keyword to identify the
-* projection. For example, possible values are AST__TAN (for the
-* tangent plane or gnomonic projection) and AST__AIT (for the
-* Hammer-Aitoff projection). AST__TPN is an exception in that it
-* is not part of the FITS-WCS standard (it represents a TAN
-* projection with polynomial correction terms as defined in an early
-* draft of the FITS-WCS paper).
-
-* Applicability:
-* WcsMap
-* All WcsMaps have this attribute.
-
-* Notes:
-* - For a list of available projections, see the FITS-WCS paper.
-*att--
-*/
-
-/* Type of FITS-WCS projection. Read only. */
-astMAKE_GET(WcsMap,WcsType,int,AST__WCSBAD,this->type)
-
-/* NatLat. */
-/* ------- */
-/*
-*att++
-* Name:
-* NatLat
-
-* Purpose:
-* Native latitude of the reference point of a FITS-WCS projection.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point, read-only.
-
-* Description:
-* This attribute gives the latitude of the reference point of the
-* FITS-WCS projection implemented by a WcsMap. The value is in
-* radians in the "native spherical" coordinate system. This value is
-* fixed for most projections, for instance it is PI/2 (90 degrees)
-* for all zenithal projections. For some projections (e.g. the conics)
-* the value is not fixed, but is specified by parameter one on the
-* latitude axis.
-*
-* FITS-WCS paper II introduces the concept of a "fiducial point"
-* which is logical distinct from the projection reference point.
-* It is easy to confuse the use of these two points. The fiducial
-* point is the point which has celestial coordinates given by the
-* CRVAL FITS keywords. The native spherical coordinates for this point
-* default to the values of the NatLat and NatLon, but these defaults
-* mey be over-ridden by values stored in the PVi_j keywords. Put
-* another way, the CRVAL keywords will by default give the celestial
-* coordinates of the projection reference point, but may refer to
-* some other point if alternative native longitude and latitude values
-* are provided through the PVi_j keywords.
-*
-* The NatLat attribute is read-only.
-
-* Applicability:
-* WcsMap
-* All WcsMaps have this attribute.
-
-* Notes:
-* - A default value of AST__BAD is used if no latitude value is available.
-*att--
-*/
-
-/*
-*att++
-* Name:
-* NatLon
-
-* Purpose:
-* Native longitude of the reference point of a FITS-WCS projection.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Floating point, read-only.
-
-* Description:
-* This attribute gives the longitude of the reference point of the
-* FITS-WCS projection implemented by a WcsMap. The value is in
-* radians in the "native spherical" coordinate system, and will
-* usually be zero. See the description of attribute NatLat for further
-* information.
-*
-* The NatLon attribute is read-only.
-
-* Applicability:
-* WcsMap
-* All WcsMaps have this attribute.
-
-* Notes:
-*att--
-*/
-
-/* WcsAxis. */
-/* -------- */
-/*
-*att++
-* Name:
-* WcsAxis(lonlat)
-
-* Purpose:
-* FITS-WCS projection axes.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer, read-only.
-
-* Description:
-* This attribute gives the indices of the longitude and latitude
-* coordinates of the FITS-WCS projection within the coordinate
-* space used by a WcsMap. These indices are defined when the
-c WcsMap is first created using astWcsMap and cannot
-f WcsMap is first created using AST_WCSMAP and cannot
-* subsequently be altered.
-*
-* If "lonlat" is 1, the index of the longitude axis is
-* returned. Otherwise, if it is 2, the index of the latitude axis
-* is returned.
-
-* Applicability:
-* WcsMap
-* All WcsMaps have this attribute.
-*att--
-*/
-
-/* Index of the latitude or longitude axis. */
-MAKE_GET(WcsAxis,int,0,this->wcsaxis[ axis ],2)
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for WcsMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for WcsMap objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* - This constructor makes a deep copy, including a copy of the
-* projection parameter values associated with the input WcsMap.
-*/
-
-
-/* Local Variables: */
- AstWcsMap *in; /* Pointer to input WcsMap */
- AstWcsMap *out; /* Pointer to output WcsMap */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output WcsMaps. */
- in = (AstWcsMap *) objin;
- out = (AstWcsMap *) objout;
-
-/* Allocate memory to hold the projection parameters within the AstPrjPrm
- structure used by WCSLIB. */
- (out->params).p = astMalloc( astSizeOf( (in->params).p ) );
- (out->params).p2 = astMalloc( astSizeOf( (in->params).p2 ) );
-
-/* Copy the projection parameter information. */
- CopyPV( in, out, status );
-
- return;
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for WcsMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for WcsMap objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* void
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstWcsMap *this; /* Pointer to WcsMap */
-
-/* Obtain a pointer to the WcsMap structure. */
- this = (AstWcsMap *) obj;
-
-/* Free the arrays used to store projection parameters. */
- FreePV( this, status );
-
-/* Free memory used to hold the projection parameters within the AstPrjPrm
- structure used by WCSLIB. */
- this->params.p = astFree( this->params.p );
- this->params.p2 = astFree( this->params.p2 );
-
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for WcsMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the WcsMap class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the WcsMap whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-#define COMMENT_LEN 150 /* Maximum length of a keyword comment */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstWcsMap *this; /* Pointer to the WcsMap structure */
- char *comment; /* Pointer to comment string */
- char buff[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- char comment_buff[ COMMENT_LEN + 1 ]; /* Buffer for keyword comment */
- const PrjData *prjdata; /* Information about the projection */
- double dval; /* Double precision value */
- int axis; /* Zero based axis index */
- int i; /* Axis index */
- int m; /* Parameter index */
- int ival; /* Integer value */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the WcsMap structure. */
- this = (AstWcsMap *) this_object;
-
-/* Write out values representing the instance variables for the
- WcsMap class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out. Note, all read-only attributes are considered to be set.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* WcsType. */
-/* -------- */
- ival = GetWcsType( this, status );
- prjdata = FindPrjData( ival, status );
- (void) sprintf( comment_buff, "%s projection", prjdata->desc );
- comment_buff[ 0 ] = toupper( comment_buff[ 0 ] );
- astWriteString( channel, "Type", 1, 1, prjdata->ctype + 1, comment_buff );
-
-/* PVi_m. */
-/* ------ */
- for( i = 0; i < astGetNin( this ); i++ ){
- if( this->np ) {
- for( m = 0; m < this->np[ i ]; m++ ){
- set = TestPV( this, i, m, status );
- if( set ) {
- dval = set ? GetPV( this, i, m, status ) : astGetPV( this, i, m );
- (void) sprintf( buff, "PV%d_%d", i + 1, m );
- (void) sprintf( comment_buff, "Projection parameter %d for axis %d", m, i + 1 );
- astWriteDouble( channel, buff, set, 0, dval, comment_buff );
- }
- }
- }
- }
-
-/* WcsAxis(axis). */
-/* -------------- */
- for( axis = 0; axis < 2; axis++ ){
- ival = GetWcsAxis( this, axis, status );
- (void) sprintf( buff, "WcsAx%d", axis + 1 );
- if( axis == 0 ) {
- comment = "Index of celestial longitude axis";
- } else {
- comment = "Index of celestial latitude axis";
- }
- astWriteInt( channel, buff, (axis!=ival), 0, ival + 1, comment );
- }
-
-/* Note, the "params" component of the AstWcsMap structure is not written out
- because it can be re-generated from the other components. */
-
-/* Return. */
- return;
-
-/* Undefine macros local to this function. */
-#undef COMMENT_LEN
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAWcsMap and astCheckWcsMap functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(WcsMap,Mapping)
-astMAKE_CHECK(WcsMap)
-
-AstWcsMap *astWcsMap_( int ncoord, int type, int lonax, int latax,
- const char *options, int *status, ...){
-/*
-*++
-* Name:
-c astWcsMap
-f AST_WCSMAP
-
-* Purpose:
-* Create a WcsMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "wcsmap.h"
-c AstWcsMap *astWcsMap( int ncoord, int type, int lonax, int latax,
-c const char *options, ... )
-f RESULT = AST_WCSMAP( NCOORD, TYPE, LONAX, LATAX, OPTIONS, STATUS )
-
-* Class Membership:
-* WcsMap constructor.
-
-* Description:
-* This function creates a new WcsMap and optionally initialises its
-* attributes.
-*
-* A WcsMap is used to represent sky coordinate projections as
-* described in the (draft) FITS world coordinate system (FITS-WCS)
-* paper by E.W. Griesen and M. Calabretta (A & A, in preparation).
-* This paper defines a set of functions, or sky projections, which
-* transform longitude-latitude pairs representing spherical
-* celestial coordinates into corresponding pairs of Cartesian
-* coordinates (and vice versa).
-*
-* A WcsMap is a specialised form of Mapping which implements these
-* sky projections and applies them to a specified pair of coordinates.
-* All the projections in the FITS-WCS paper are supported, plus the now
-* deprecated "TAN with polynomial correction terms" projection which
-* is refered to here by the code "TPN". Using the FITS-WCS terminology,
-* the transformation is between "native spherical" and "projection
-* plane" coordinates. These coordinates may, optionally, be embedded in
-* a space with more than two dimensions, the remaining coordinates being
-* copied unchanged. Note, however, that for consistency with other AST
-* facilities, a WcsMap handles coordinates that represent angles
-* in radians (rather than the degrees used by FITS-WCS).
-*
-* The type of FITS-WCS projection to be used and the coordinates
-* (axes) to which it applies are specified when a WcsMap is first
-* created. The projection type may subsequently be determined
-* using the WcsType attribute and the coordinates on which it acts
-* may be determined using the WcsAxis(lonlat) attribute.
-*
-* Each WcsMap also allows up to 100 "projection parameters" to be
-* associated with each axis. These specify the precise form of the
-* projection, and are accessed using PVi_m attribute, where "i" is
-* the integer axis index (starting at 1), and m is an integer
-* "parameter index" in the range 0 to 99. The number of projection
-* parameters required by each projection, and their meanings, are
-* dependent upon the projection type (most projections either do not
-* use any projection parameters, or use parameters 1 and 2 associated
-* with the latitude axis). Before creating a WcsMap you should consult
-* the FITS-WCS paper for details of which projection parameters are
-* required, and which have defaults. When creating the WcsMap, you must
-* explicitly set values for all those required projection parameters
-* which do not have defaults defined in this paper.
-
-* Parameters:
-c ncoord
-f NCOORD = INTEGER (Given)
-* The number of coordinate values for each point to be
-* transformed (i.e. the number of dimensions of the space in
-* which the points will reside). This must be at least 2. The
-* same number is applicable to both input and output points.
-c type
-f TYPE = INTEGER (Given)
-* The type of FITS-WCS projection to apply. This should be
-c given using a macro value such as AST__TAN (for a tangent
-f given as a symbolic value such as AST__TAN (for a tangent
-* plane projection), where the characters following the double
-* underscore give the projection type code (in upper case) as
-* used in the FITS-WCS "CTYPEi" keyword. You should consult the
-* FITS-WCS paper for a list of the available projections. The
-* additional code of AST__TPN can be supplied which represents a
-* TAN projection with polynomial correction terms as defined in an
-* early draft of the FITS-WCS paper.
-c lonax
-f LONAX = INTEGER (Given)
-* The index of the longitude axis. This should lie in the range
-c 1 to "ncoord".
-f 1 to NCOORD.
-c latax
-f LATAX = INTEGER (Given)
-* The index of the latitude axis. This should lie in the range
-c 1 to "ncoord" and be distinct from "lonax".
-f 1 to NCOORD and be distinct from LONAX.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new WcsMap. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new WcsMap. The syntax used is identical to that for the
-f AST_SET routine.
-*
-* If the sky projection to be implemented requires projection
-* parameter values to be set, then this should normally be done
-* here via the PVi_m attribute (see the "Examples"
-* section). Setting values for these parameters is mandatory if
-* they do not have default values (as defined in the FITS-WCS
-* paper).
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astWcsMap()
-f AST_WCSMAP = INTEGER
-* A pointer to the new WcsMap.
-
-* Examples:
-c wcsmap = astWcsMap( 2, AST__MER, 1, 2, "" );
-f WCSMAP = AST_WCSMAP( 2, AST__MER, 1, 2, ' ', STATUS )
-* Creates a WcsMap that implements a FITS-WCS Mercator
-* projection on pairs of coordinates, with coordinates 1 and 2
-* representing the longitude and latitude respectively. Note
-* that the FITS-WCS Mercator projection does not require any
-* projection parameters.
-c wcsmap = astWcsMap( 3, AST__COE, 2, 3, "PV3_1=40.0" );
-f WCSMAP = AST_WCSMAP( 3, AST__COE, 2, 3, 'PV3_1=40.0', STATUS )
-* Creates a WcsMap that implements a FITS-WCS conical equal
-* area projection. The WcsMap acts on points in a 3-dimensional
-* space; coordinates 2 and 3 represent longitude and latitude
-* respectively, while the values of coordinate 1 are copied
-* unchanged. Projection parameter 1 associatyed with the latitude
-* axis (corresponding to FITS keyword "PV3_1") is required and has
-* no default, so is set explicitly to 40.0 degrees. Projection
-* parameter 2 (corresponding to FITS keyword "PV3_2") is required
-* but has a default of zero, so need not be specified.
-
-* Notes:
-* - The forward transformation of a WcsMap converts between
-* FITS-WCS "native spherical" and "relative physical" coordinates,
-* while the inverse transformation converts in the opposite
-* direction. This arrangement may be reversed, if required, by
-c using astInvert or by setting the Invert attribute to a non-zero
-f using AST_INVERT or by setting the Invert attribute to a non-zero
-* value.
-* - If any set of coordinates cannot be transformed (for example,
-* many projections do not cover the entire celestial sphere), then
-* a WcsMap will yield coordinate values of AST__BAD.
-* - The validity of any projection parameters given via the PVi_m
-c parameter in the "options" string is not checked by this
-f parameter in the OPTIONS string is not checked by this
-* function. However, their validity is checked when the resulting
-* WcsMap is used to transform coordinates, and an error will
-* result if the projection parameters do not satisfy all the
-* required constraints (as defined in the FITS-WCS paper).
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-
-* Status Handling:
-* The protected interface to this function includes an extra
-* parameter at the end of the parameter list descirbed above. This
-* parameter is a pointer to the integer inherited status
-* variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstWcsMap *new; /* Pointer to new WcsMap */
- va_list args; /* Variable argument list */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialise the WcsMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitWcsMap( NULL, sizeof( AstWcsMap ), !class_init, &class_vtab,
- "WcsMap", ncoord, type, lonax - 1, latax - 1 );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new WcsMap's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new WcsMap. */
- return new;
-}
-
-AstWcsMap *astWcsMapId_( int ncoord, int type, int lonax, int latax,
- const char *options, ... ){
-/*
-* Name:
-* astWcsMapId_
-
-* Purpose:
-* Create a WcsMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* AstWcsMap *astWcsMap_( int ncoord, int type, int lonax, int latax,
-* const char *options, ... )
-
-* Class Membership:
-* WcsMap constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astWcsMap constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astWcsMap_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astWcsMap_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astWcsMap_.
-
-* Returned Value:
-* The ID value associated with the new WcsMap.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstWcsMap *new; /* Pointer to new WcsMap */
- va_list args; /* Variable argument list */
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the WcsMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitWcsMap( NULL, sizeof( AstWcsMap ), !class_init, &class_vtab,
- "WcsMap", ncoord, type, lonax - 1, latax - 1 );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new WcsMap's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new WcsMap. */
- return astMakeId( new );
-}
-
-AstWcsMap *astInitWcsMap_( void *mem, size_t size, int init,
- AstWcsMapVtab *vtab, const char *name,
- int ncin, int type, int lonax, int latax, int *status ) {
-/*
-*+
-* Name:
-* astInitWcsMap
-
-* Purpose:
-* Initialise a WcsMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* AstWcsMap *astInitWcsMap( void *mem, size_t size, int init,
-* AstWcsMapVtab *vtab, const char *name,
-* int ncin, int type, int lonax, int latax )
-
-* Class Membership:
-* WcsMap initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new WcsMap object. It allocates memory (if necessary) to accommodate
-* the WcsMap plus any additional data associated with the derived class.
-* It then initialises a WcsMap structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a WcsMap at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the WcsMap is to be initialised.
-* This must be of sufficient size to accommodate the WcsMap data
-* (sizeof(WcsMap)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the WcsMap (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the WcsMap
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the WcsMap's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new WcsMap.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-* ncin
-* The number of coordinate values per point.
-* type
-* The type of projection to use, choosen from the list available
-* in the FITS celestial coordinates system. These are specified by
-* symbolic values such as AST__TAN (specifying a tangent plane
-* projection), where the characters following the double underscore
-* gives the FITS projection type (in upper case) as used in the FITS
-* "CTYPEn" keyword.
-* lonax
-* The index of the longitude axis. The first axis has index 0.
-* latax
-* The index of the latitude axis. The first axis has index 0.
-
-* Returned Value:
-* A pointer to the new WcsMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- const PrjData *prjdata; /* Information about the projection */
- AstWcsMap *new; /* Pointer to new WcsMap */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitWcsMapVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* If a genuine FITS-WCS projection has been specified, check the initialisation
- value(s) for validity, reporting an error if necessary. Prefix the error
- report with the name of the function and the class of object being
- processed. First check that at least two dimensions are to be mapped. */
- if( type != AST__WCSBAD ){
- if ( ncin < 2 ){
- astError( AST__WCSNC, "astInitWcsMap(%s): Too few axes (%d) "
- "specified. Must be at least 2.", status, name, ncin );
-
-/* Report an error if either the longitude or latitude axes are out of
- bounds. */
- } else if ( lonax < 0 || lonax >= ncin ){
- astError( AST__WCSAX, "astInitWcsMap(%s): Specified longitude axis (%d) "
- "does not exist within a %d dimensional coordinate system. ", status,
- name, lonax + 1, ncin );
-
- } else if ( latax < 0 || latax >= ncin ){
- astError( AST__WCSAX, "astInitWcsMap(%s): Specified latitude axis (%d) "
- "does not exist within a %d dimensional coordinate system. ", status,
- name, latax + 1, ncin );
-
-/* Report an error if the longitude or latitude axes are the same. */
- } else if ( lonax == latax ){
- astError( AST__WCSAX, "astInitWcsMap(%s): The same axis (%d) has been "
- "given for both the longitude and the latitude axis.", status, name,
- lonax + 1 );
-
-/* Report an error if projection type is unknown. */
- } else if ( type < 1 || type >= AST__WCSBAD ){
- astError( AST__WCSTY, "astInitWcsMap(%s): Projection type %d is "
- "undefined. Projection types must be in the range 1 to %d.", status,
- name, type, AST__WCSBAD - 1 );
- }
- }
-
-/* Get a description of the requeste dprojection type. */
- prjdata = FindPrjData( type, status );
-
-/* If all the above checks have been passed succesfully... */
- if( astOK ){
-
-/* Initialise a Mapping structure (the parent class) as the first component
- within the WcsMap structure, allocating memory if necessary. Specify that
- the Mapping should be defined in both the forward and inverse directions. */
- new = (AstWcsMap *) astInitMapping( mem, size, 0,
- (AstMappingVtab *) vtab, name,
- ncin, ncin, 1, 1 );
-
- if ( astOK ) {
-
-/* Initialise the WcsMap data. */
-/* ---------------------------- */
-/* Store the projection type. */
- new->type = type;
-
-/* Store the axes associated with longitude and latitude. */
- new->wcsaxis[0] = lonax;
- new->wcsaxis[1] = latax;
-
-/* Store NULL pointers for the arrays holding projection parameters. */
- new->p = NULL;
- new->np = NULL;
-
-/* Allocate memory of the right size to hold the maximum number of
- projection parameters needed by the projection. */
- new->params.p = astMalloc( sizeof( double ) * (prjdata->mxpar + 1) );
- new->params.p2 = astMalloc( sizeof( double ) * (prjdata->mxpar2 + 1) );
-
-/* Initialise the "AstPrjPrm" structure (defined in proj.h). */
- InitPrjPrm( new, status );
-
-/* If an error occurred, clean up by deleting the new WcsMap. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return a pointer to the new WcsMap. */
- return new;
-}
-
-AstWcsMap *astLoadWcsMap_( void *mem, size_t size,
- AstWcsMapVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadWcsMap
-
-* Purpose:
-* Load a WcsMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "wcsmap.h"
-* AstWcsMap *astLoadWcsMap( void *mem, size_t size,
-* AstWcsMapVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* WcsMap loader.
-
-* Description:
-* This function is provided to load a new WcsMap using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* WcsMap structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a WcsMap at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the WcsMap is to be
-* loaded. This must be of sufficient size to accommodate the
-* WcsMap data (sizeof(WcsMap)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the WcsMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the WcsMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstWcsMap) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new WcsMap. If this is NULL, a pointer
-* to the (static) virtual function table for the WcsMap class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "WcsMap" is used instead.
-
-* Returned Value:
-* A pointer to the new WcsMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-/* Local Variables: */
- const PrjData *prjdata; /* Information about the projection */
- AstWcsMap *new; /* Pointer to the new WcsMap */
- char *text; /* Textual form of an integer value */
- char buff[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- double pv; /* Projection parameter */
- int axis; /* Axis index */
- int i; /* Axis index */
- int m; /* Parameter index */
- int mxpar; /* Maximum number of PVi_m values */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this WcsMap. In this case the
- WcsMap belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstWcsMap );
- vtab = &class_vtab;
- name = "WcsMap";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitWcsMapVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built WcsMap. */
- new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "WcsMap" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. Note, this is only
- done for read/write attributes, not read-only ones. */
-
-/* WcsType */
-/* ------- */
- text = astReadString( channel, "type", " " );
- if( strcmp( text, " " ) ){
- char tmp[ 10 ];
- (void) sprintf( tmp, "-%.8s", text );
- new->type = astWcsPrjType( tmp );
- } else {
- new->type = AST__WCSBAD;
- }
- text = astFree( text );
- prjdata = FindPrjData( new->type, status );
-
-/* WcsAxis(axis). */
-/* -------------- */
- for( axis = 0; axis < 2; axis++ ){
- (void) sprintf( buff, "wcsax%d", axis + 1 );
- new->wcsaxis[ axis ] = astReadInt( channel, buff, axis + 1 ) - 1;
- }
-
-/* Initialise the pointers to the projection parameter information. */
- new->p = NULL;
- new->np = NULL;
- new->params.p = astMalloc( sizeof( double ) * (prjdata->mxpar + 1) );
- new->params.p2 = astMalloc( sizeof( double ) * (prjdata->mxpar2 + 1) );
-
-/* Initialise the structure used by WCSLIB to hold intermediate values,
- so that the values will be re-calculated on the first invocation of a
- mapping function. */
- InitPrjPrm( new, status );
-
-/* ProjP(m). */
-/* --------- */
- for( m = 0; m < AST__WCSMX; m++ ){
- (void) sprintf( buff, "projp%d", m );
- pv = astReadDouble( channel, buff, AST__BAD );
- if( pv != AST__BAD ) SetPV( new, new->wcsaxis[ 1 ], m, pv, status );
- }
-
-/* PVi_m. */
-/* -------*/
- for( i = 0; i < astGetNin( new ); i++ ){
-
- if( i == new->wcsaxis[ 0 ] ) {
- mxpar = prjdata->mxpar2;
- } else if( i == new->wcsaxis[ 1 ] ) {
- mxpar = prjdata->mxpar;
- } else {
- mxpar = 0;
- }
-
- for( m = 0; m <= mxpar; m++ ){
- (void) sprintf( buff, "pv%d_%d", i + 1, m );
- pv = astReadDouble( channel, buff, AST__BAD );
- if( pv != AST__BAD ) SetPV( new, i, m, pv, status );
- }
- }
-
-/* If an error occurred, clean up by deleting the new WcsMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new WcsMap pointer. */
- return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-void astClearPV_( AstWcsMap *this, int i, int m, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,WcsMap,ClearPV))( this, i, m, status );
-}
-
-double astGetPV_( AstWcsMap *this, int i, int m, int *status ) {
- if ( !astOK ) return AST__BAD;
- return (**astMEMBER(this,WcsMap,GetPV))( this, i, m, status );
-}
-
-void astSetPV_( AstWcsMap *this, int i, int m, double val, int *status ) {
- if ( !astOK ) return;
- (**astMEMBER(this,WcsMap,SetPV))( this, i, m, val, status );
-}
-
-int astTestPV_( AstWcsMap *this, int i, int m, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,WcsMap,TestPV))( this, i, m, status );
-}
-
-int astIsZenithal_( AstWcsMap *this, int *status ) {
- if ( !astOK ) return 0;
- return (**astMEMBER(this,WcsMap,IsZenithal))( this, status );
-}
-
-double astGetNatLat_( AstWcsMap *this, int *status ) {
- if ( !astOK ) return AST__BAD;
- return (**astMEMBER(this,WcsMap,GetNatLat))( this, status );
-}
-
-double astGetNatLon_( AstWcsMap *this, int *status ) {
- if ( !astOK ) return AST__BAD;
- return (**astMEMBER(this,WcsMap,GetNatLon))( this, status );
-}
-
-int astGetPVMax_( AstWcsMap *this, int i, int *status ) {
- if ( !astOK ) return -1;
- return (**astMEMBER(this,WcsMap,GetPVMax))( this, i, status );
-}
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/wcsmap.h b/ast-5.3-1/wcsmap.h
deleted file mode 100644
index 059054b..0000000
--- a/ast-5.3-1/wcsmap.h
+++ /dev/null
@@ -1,548 +0,0 @@
-#if !defined( WCSMAP_INCLUDED ) /* Include this file only once */
-#define WCSMAP_INCLUDED
-/*
-*+
-* Name:
-* wcsmap.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the WcsMap class.
-
-* Invocation:
-* #include "wcsmap.h"
-
-* Description:
-* This include file defines the interface to the WcsMap class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The WcsMap class implements Mappings that transform a pair of
-* longitude/latitude values into a pair of projected Cartesian
-* coordinates. All the projections included in FITS WCS are included.
-* For more information about these projections, see the appropriate
-* FITS document.
-
-* Inheritance:
-* The WcsMap class inherits from the Mapping class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* NatLat (double)
-* This attribute gives the latitude of the reference point of
-* a FITS WCS projection, in the native coordinate system. The value
-* returned is in radians. A value of AST__BAD is returned if
-* no value is defined. This attribute is read only, and may change
-* if new values are assigned to the projection parameters.
-* NatLon (double)
-* This attribute gives the longitude of the reference point of
-* a FITS WCS projection, in the native coordinate system. The value
-* returned is in radians. A value of AST__BAD is returned if
-* no value is defined. This attribute is read only, and may change
-* if new values are assigned to the projection parameters.
-* ProjP(i) (double)
-* This attribute provides aliases for the PV attributes, which
-* specifies the projection parameter values to be used by a WcsMap
-* when implementing a FITS-WCS sky projection. ProjP is retained for
-* compatibility with previous versions of FITS-WCS and AST. New
-* applications should use the PV attibute instead.
-* PVj_m (double)
-* This attribute gives the parameter values used by a FITS WCS
-* projection. The index j is the axis index in the range 1 to 99, and
-* the index m is the parameter index in the range 0 to 99. They will
-* have the value AST__BAD if undefined. By default, no projection
-* parameters are defined. These should be assigned appropriate values
-* before using a WcsMap to transform points.
-* WcsAxis(lonlat) (int)
-* This attribute gives the indices of the longitude and latitude axes
-* of a FITS WCS projection within the coordinate system used by a
-* WcsMap. If "lonlat" is 1 then the index of the longitude axis is
-* returned. If it is 2 the index of the latitude axis is returned.
-* The first axis in the coordinate system is axis 1. This is a
-* read-only attribute.
-* WcsType (int)
-* This attribute gives the FITS WCS projection type implemented by a
-* WcsMap. Macros giving the integer value associated with supported
-* projections are defined. They have the general form "AST__xxx" where
-* "xxx" is the 3-character code used to represent the projection in the
-* FITS CTYPE keyword.
-
-* Methods Over-Ridden:
-* Public:
-* None.
-*
-* Protected:
-* astClearAttrib
-* Clear an attribute value for a WcsMap.
-* astGetAttrib
-* Get an attribute value for a WcsMap.
-* astSetAttrib
-* Set an attribute value for a WcsMap.
-* astTestAttrib
-* Test if an attribute value has been set for a WcsMap.
-* astTransform
-* Apply a WcsMap to transform a set of points.
-
-* New Methods Defined:
-* Public:
-* None.
-*
-* Protected:
-* astClearPV
-* Clear a PVi_j attribute value for a WcsMap.
-* astGetNatLat
-* Get the NatLat attribute value for a WcsMap.
-* astGetNatLon
-* Get the NatLon attribute value for a WcsMap.
-* astGetPV
-* Get a PVi_j attribute value for a WcsMap.
-* astGetWcsAxis
-* Get a WcsAxis attribute value for a WcsMap.
-* astGetWcsType
-* Get the WcsType attribute value for a WcsMap.
-* astIsZenithal
-* Is the projection zenithal?
-* astSetPV
-* Set a PVi_j attribute value for a WcsMap.
-* astTestPV
-* Test if a PVi_j attribute value has been set for a WcsMap.
-* astWcsPrjName
-* Return the FITS CTYPE keyword value for a given projection type.
-* astWcsPrjDesc
-* Return a textual description for a given projection type.
-* astWcsPrjType
-* Return the projection type given a FITS CTYPE keyword value.
-
-* Other Class Functions:
-* Public:
-* astIsAWcsMap
-* Test class membership.
-* astWcsMap
-* Create a WcsMap.
-*
-* Protected:
-* astCheckWcsMap
-* Validate class membership.
-* astInitWcsMap
-* Initialise a WcsMap.
-* astInitWcsMapVtab
-* Initialise the virtual function table for the WcsMap class.
-* astLoadWcsMap
-* Load a WcsMap.
-
-* Macros:
-* Public:
-* AST__WCSMX
-* Maximum number of parameters associated with a projection.
-* AST__DPI
-* 180 degrees in radians.
-* AST__DPIBY2
-* 90 degrees in radians.
-* AST__DD2R
-* Factor for converting degrees to radians.
-* AST__DR2D
-* Factor for converting radians to degrees.
-* AST__AZP
-* An integer identifier for the FITS AZP projection.
-* AST__TAN
-* An integer identifier for the FITS TAN projection.
-* AST__SIN
-* An integer identifier for the FITS SIN projection.
-* AST__STG
-* An integer identifier for the FITS STG projection.
-* AST__ARC
-* An integer identifier for the FITS ARC projection.
-* AST__ZPN
-* An integer identifier for the FITS ZPN projection.
-* AST__ZEA
-* An integer identifier for the FITS ZEA projection.
-* AST__AIR
-* An integer identifier for the FITS AIR projection.
-* AST__CYP
-* An integer identifier for the FITS CYP projection.
-* AST__CAR
-* An integer identifier for the FITS CAR projection.
-* AST__MER
-* An integer identifier for the FITS MER projection.
-* AST__CEA
-* An integer identifier for the FITS CEA projection.
-* AST__COP
-* An integer identifier for the FITS COP projection.
-* AST__COD
-* An integer identifier for the FITS COD projection.
-* AST__COE
-* An integer identifier for the FITS COE projection.
-* AST__COO
-* An integer identifier for the FITS COO projection.
-* AST__BON
-* An integer identifier for the FITS BON projection.
-* AST__PCO
-* An integer identifier for the FITS PCO projection.
-* AST__GLS
-* A depracated integer identifier for the FITS SFL projection.
-* AST__SFL
-* An integer identifier for the FITS SFL projection.
-* AST__PAR
-* An integer identifier for the FITS PAR projection.
-* AST__AIT
-* An integer identifier for the FITS AIT projection.
-* AST__MOL
-* An integer identifier for the FITS MOL projection.
-* AST__CSC
-* An integer identifier for the FITS CSC projection.
-* AST__QSC
-* An integer identifier for the FITS QSC projection.
-* AST__TSC
-* An integer identifier for the FITS TSC projection
-* AST__HPX
-* An integer identifier for the FITS HPX projection.
-* AST__TPN
-* An integer identifier for a "TAN with correction terms" projection.
-* AST__WCSBAD
-* An integer identifier for a "null" projection.
-*
-* Protected:
-* None.
-
-* Type Definitions:
-* Public:
-* AstWcsMap
-* WcsMap object type.
-*
-* Protected:
-* AstWcsMapVtab
-* WcsMap virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-
-* History:
-* 15-Feb-1996 (DSB):
-* Original version.
-* 23-MAR-1996 (DSB):
-* Support for PointSets with more than 2 axes added.
-* 18-NOV-1996 (DSB):
-* Updated to include attributes, etc.
-* 26-SEP-1997 (DSB):
-* Included new protected function, astPrjDesc.
-* 11-FEB-2000 (DSB):
-* Replaced wcsmap component projp by pointers p and np.
-* 20-OCT-2002 (DSB):
-* Added astIsZenithal
-* 8-JAN-2003 (DSB):
-* Added protected astInitWcsMapVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-#include "proj.h" /* Mark Calabretta's WCSLIB library header
- file */
-
-#if defined(astCLASS) /* Protected */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros. */
-/* ------- */
-/* Max. number of parameters for a WCS projection */
-
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-#define AST__WCSMX 10
-
-/* pi: 180 degrees in radians - from SLALIB file slamac.h. */
-#define AST__DPI 3.1415926535897932384626433832795028841971693993751
-
-/* pi/2: 90 degrees in radians - from SLALIB file slamac.h. */
-#define AST__DPIBY2 1.5707963267948966192313216916397514420985846996876
-
-/* pi/180: degrees to radians - from SLALIB file slamac.h. */
-#define AST__DD2R 0.017453292519943295769236907684886127134428718885417
-
-/* 180/pi: radians to degrees - from SLALIB file slamac.h. */
-#define AST__DR2D 57.295779513082320876798154814105170332405472466564
-
-/* Projection Types: (note, WCSBAD must be the last in this list) */
-
-#define AST__AZP 1
-#define AST__SZP 2
-#define AST__TAN 3
-#define AST__STG 4
-#define AST__SIN 5
-#define AST__ARC 6
-#define AST__ZPN 7
-#define AST__ZEA 8
-#define AST__AIR 9
-#define AST__CYP 10
-#define AST__CEA 11
-#define AST__CAR 12
-#define AST__MER 13
-#define AST__SFL 14
-#define AST__PAR 15
-#define AST__MOL 16
-#define AST__AIT 17
-#define AST__COP 18
-#define AST__COE 19
-#define AST__COD 20
-#define AST__COO 21
-#define AST__BON 22
-#define AST__PCO 23
-#define AST__TSC 24
-#define AST__CSC 25
-#define AST__QSC 26
-#define AST__NCP 27
-#define AST__GLS 28
-#define AST__TPN 29
-#define AST__HPX 30
-#define AST__WCSBAD 31 /* A bad projection type */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* WcsMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstWcsMap {
-
-/* Attributes inherited from the parent class. */
- AstMapping mapping; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- int type; /* Projection type */
- int wcsaxis[2]; /* Indices of lon and lat. axes */
- double **p; /* Pointer to array of projection parameter arrays */
- int *np; /* Pointer to array of projection parameter counts */
- struct AstPrjPrm params; /* WCS structure holding projection
- parameters, etc. Defined in proj.h */
-
-} AstWcsMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstWcsMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstMappingVtab mapping_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- double (* GetNatLat)( AstWcsMap *, int * );
- double (* GetNatLon)( AstWcsMap *, int * );
- double (* GetPV)( AstWcsMap *, int, int, int * );
- int (* GetWcsAxis)( AstWcsMap *, int, int * );
- int (* GetWcsType)( AstWcsMap *, int * );
- int (* GetPVMax)( AstWcsMap *, int, int * );
- int (* TestPV)( AstWcsMap *, int, int, int * );
- void (* ClearPV)( AstWcsMap *, int, int, int * );
- void (* SetPV)( AstWcsMap *, int, int, double, int * );
- int (* IsZenithal)( AstWcsMap *, int * );
-
-} AstWcsMapVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstWcsMapGlobals {
- AstWcsMapVtab Class_Vtab;
- int Class_Init;
- char GetAttrib_Buff[ 101 ];
-} AstWcsMapGlobals;
-
-#endif
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(WcsMap) /* Check class membership */
-astPROTO_ISA(WcsMap) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstWcsMap *astWcsMap_( int, int, int, int, const char *, int *, ...);
-#else
-AstWcsMap *astWcsMapId_( int, int, int, int, const char *, ... )__attribute__((format(printf,5,6)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstWcsMap *astInitWcsMap_( void *, size_t, int, AstWcsMapVtab *,
- const char *, int, int, int, int, int * );
-
-/* Vtab initialiser. */
-void astInitWcsMapVtab_( AstWcsMapVtab *, const char *, int * );
-
-/* Loader. */
-AstWcsMap *astLoadWcsMap_( void *, size_t, AstWcsMapVtab *,
- const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitWcsMapGlobals_( AstWcsMapGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS) /* Protected */
- const char *astWcsPrjDesc_( int, int * );
- const char *astWcsPrjName_( int, int * );
- double astGetNatLat_( AstWcsMap *, int * );
- double astGetNatLon_( AstWcsMap *, int * );
- double astGetPV_( AstWcsMap *, int, int, int * );
- int astWcsPrjType_( const char *, int * );
- int astGetWcsAxis_( AstWcsMap *, int, int * );
- int astGetWcsType_( AstWcsMap *, int * );
- int astGetPVMax_( AstWcsMap *, int, int * );
- int astTestPV_( AstWcsMap *, int, int, int * );
- int astIsZenithal_( AstWcsMap *, int * );
- void astClearPV_( AstWcsMap *, int, int, int * );
- void astSetPV_( AstWcsMap *, int, int, double, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckWcsMap(this) astINVOKE_CHECK(WcsMap,this,0)
-#define astVerifyWcsMap(this) astINVOKE_CHECK(WcsMap,this,1)
-
-/* Test class membership. */
-#define astIsAWcsMap(this) astINVOKE_ISA(WcsMap,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astWcsMap astINVOKE(F,astWcsMap_)
-#else
-#define astWcsMap astINVOKE(F,astWcsMapId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitWcsMap(mem,size,init,vtab,name,ncoord,type,lon,lat) \
-astINVOKE(O,astInitWcsMap_(mem,size,init,vtab,name,ncoord,type,lon,lat,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitWcsMapVtab(vtab,name) astINVOKE(V,astInitWcsMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadWcsMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadWcsMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckWcsMap to validate WcsMap pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-
-#define astWcsPrjType(ctype) astWcsPrjType_(ctype,STATUS_PTR)
-#define astWcsPrjName(type) astWcsPrjName_(type,STATUS_PTR)
-#define astWcsPrjDesc(type) astWcsPrjDesc_(type,STATUS_PTR)
-
-#define astClearPV(this,i,j) \
-astINVOKE(V,astClearPV_(astCheckWcsMap(this),i,j,STATUS_PTR))
-#define astGetPV(this,i,j) \
-astINVOKE(V,astGetPV_(astCheckWcsMap(this),i,j,STATUS_PTR))
-#define astSetPV(this,i,j,par) \
-astINVOKE(V,astSetPV_(astCheckWcsMap(this),i,j,par,STATUS_PTR))
-#define astTestPV(this,i,j) \
-astINVOKE(V,astTestPV_(astCheckWcsMap(this),i,j,STATUS_PTR))
-
-#define astGetWcsType(this) \
-astINVOKE(V,astGetWcsType_(astCheckWcsMap(this),STATUS_PTR))
-
-#define astGetPVMax(this,i) \
-astINVOKE(V,astGetPVMax_(astCheckWcsMap(this),i,STATUS_PTR))
-
-#define astGetNatLat(this) \
-astINVOKE(V,astGetNatLat_(astCheckWcsMap(this),STATUS_PTR))
-
-#define astGetNatLon(this) \
-astINVOKE(V,astGetNatLon_(astCheckWcsMap(this),STATUS_PTR))
-
-#define astGetWcsAxis(this,index) \
-astINVOKE(V,astGetWcsAxis_(astCheckWcsMap(this),index,STATUS_PTR))
-
-#define astIsZenithal(this) \
-astINVOKE(V,astIsZenithal_(astCheckWcsMap(this),STATUS_PTR))
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/wcsmath.h b/ast-5.3-1/wcsmath.h
deleted file mode 100644
index c217bbb..0000000
--- a/ast-5.3-1/wcsmath.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*=============================================================================
-*
-* WCSLIB - an implementation of the FITS WCS proposal.
-* Copyright (C) 1995-2002, Mark Calabretta
-*
-* This library is free software; you can redistribute it and/or modify it
-* under the terms of the GNU Library General Public License as published
-* by the Free Software Foundation; either version 2 of the License, or (at
-* your option) any later version.
-*
-* This library is distributed in the hope that it will be useful, but
-* WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library
-* General Public License for more details.
-*
-* You should have received a copy of the GNU Library General Public License
-* along with this library; if not, write to the Free Software Foundation,
-* Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
-* Correspondence concerning WCSLIB may be directed to:
-* Internet email: mcalabre at atnf.csiro.au
-* Postal address: Dr. Mark Calabretta,
-* Australia Telescope National Facility,
-* P.O. Box 76,
-* Epping, NSW, 2121,
-* AUSTRALIA
-*
-* Author: Mark Calabretta, Australia Telescope National Facility
-* $Id: wcsmath.h,v 1.1.1.1 2009/11/02 16:01:18 joye Exp $
-*=============================================================================
-*
-* This version of wcstrig.h is based on the version in wcslib-2.9, but has
-* been modified in the following ways by the Starlink project (e-mail:
-* ussc at star.rl.ac.uk):
-* - Changed the name of the WCSLIB_MATH macro to WCSLIB_MATH_INCLUDED
-*===========================================================================*/
-
-#ifndef WCSLIB_MATH_INCLUDED
-#define WCSLIB_MATH_INCLUDED
-
-#ifdef PI
-#undef PI
-#endif
-
-#ifdef D2R
-#undef D2R
-#endif
-
-#ifdef R2D
-#undef R2D
-#endif
-
-#ifdef SQRT2
-#undef SQRT2
-#endif
-
-#ifdef SQRT2INV
-#undef SQRT2INV
-#endif
-
-#define PI 3.141592653589793238462643
-#define D2R PI/180.0
-#define R2D 180.0/PI
-#define SQRT2 1.4142135623730950488
-#define SQRT2INV 1.0/SQRT2
-
-#endif /* WCSLIB_MATH_INCLUDED */
diff --git a/ast-5.3-1/wcstrig.c b/ast-5.3-1/wcstrig.c
deleted file mode 100644
index c8dd85f..0000000
--- a/ast-5.3-1/wcstrig.c
+++ /dev/null
@@ -1,189 +0,0 @@
-/*============================================================================
-*
-* WCSLIB - an implementation of the FITS WCS proposal.
-* Copyright (C) 1995-2002, Mark Calabretta
-*
-* This library is free software; you can redistribute it and/or modify it
-* under the terms of the GNU Library General Public License as published
-* by the Free Software Foundation; either version 2 of the License, or (at
-* your option) any later version.
-*
-* This library is distributed in the hope that it will be useful, but
-* WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library
-* General Public License for more details.
-*
-* You should have received a copy of the GNU Library General Public License
-* along with this library; if not, write to the Free Software Foundation,
-* Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
-* Correspondence concerning WCSLIB may be directed to:
-* Internet email: mcalabre at atnf.csiro.au
-* Postal address: Dr. Mark Calabretta,
-* Australia Telescope National Facility,
-* P.O. Box 76,
-* Epping, NSW, 2121,
-* AUSTRALIA
-*
-*=============================================================================
-*
-* This version of wcstrig.c is based on the version in wcslib-2.9, but has
-* been modified in the following ways by the Starlink project (e-mail:
-* ussc at star.rl.ac.uk):
-* - Support for non-ANSI C "const" class removed
-* - Changed names of projection functions and degrees trig functions
-* to avoid clashes with wcslib.
-*=============================================================================
-*
-* The functions defined herein are trigonometric or inverse trigonometric
-* functions which take or return angular arguments in decimal degrees.
-*
-* $Id: wcstrig.c,v 1.1.1.1 2009/11/02 16:01:18 joye Exp $
-*---------------------------------------------------------------------------*/
-
-#include <math.h>
-#include "wcsmath.h"
-#include "wcstrig.h"
-
-double astCosd(angle)
-
-const double angle;
-
-{
- double resid;
-
- resid = fabs(fmod(angle,360.0));
- if (resid == 0.0) {
- return 1.0;
- } else if (resid == 90.0) {
- return 0.0;
- } else if (resid == 180.0) {
- return -1.0;
- } else if (resid == 270.0) {
- return 0.0;
- }
-
- return cos(angle*D2R);
-}
-
-/*--------------------------------------------------------------------------*/
-
-double astSind(angle)
-
-const double angle;
-
-{
- double resid;
-
- resid = fmod(angle-90.0,360.0);
- if (resid == 0.0) {
- return 1.0;
- } else if (resid == 90.0) {
- return 0.0;
- } else if (resid == 180.0) {
- return -1.0;
- } else if (resid == 270.0) {
- return 0.0;
- }
-
- return sin(angle*D2R);
-}
-
-/*--------------------------------------------------------------------------*/
-
-double astTand(angle)
-
-const double angle;
-
-{
- double resid;
-
- resid = fmod(angle,360.0);
- if (resid == 0.0 || fabs(resid) == 180.0) {
- return 0.0;
- } else if (resid == 45.0 || resid == 225.0) {
- return 1.0;
- } else if (resid == -135.0 || resid == -315.0) {
- return -1.0;
- }
-
- return tan(angle*D2R);
-}
-
-/*--------------------------------------------------------------------------*/
-
-double astACosd(v)
-
-const double v;
-
-{
- if (v >= 1.0) {
- if (v-1.0 < WCSTRIG_TOL) return 0.0;
- } else if (v == 0.0) {
- return 90.0;
- } else if (v <= -1.0) {
- if (v+1.0 > -WCSTRIG_TOL) return 180.0;
- }
-
- return acos(v)*R2D;
-}
-
-/*--------------------------------------------------------------------------*/
-
-double astASind(v)
-
-const double v;
-
-{
- if (v <= -1.0) {
- if (v+1.0 > -WCSTRIG_TOL) return -90.0;
- } else if (v == 0.0) {
- return 0.0;
- } else if (v >= 1.0) {
- if (v-1.0 < WCSTRIG_TOL) return 90.0;
- }
-
- return asin(v)*R2D;
-}
-
-/*--------------------------------------------------------------------------*/
-
-double astATand(v)
-
-const double v;
-
-{
- if (v == -1.0) {
- return -45.0;
- } else if (v == 0.0) {
- return 0.0;
- } else if (v == 1.0) {
- return 45.0;
- }
-
- return atan(v)*R2D;
-}
-
-/*--------------------------------------------------------------------------*/
-
-double astATan2d(y, x)
-
-const double x, y;
-
-{
- if (y == 0.0) {
- if (x >= 0.0) {
- return 0.0;
- } else if (x < 0.0) {
- return 180.0;
- }
- } else if (x == 0.0) {
- if (y > 0.0) {
- return 90.0;
- } else if (y < 0.0) {
- return -90.0;
- }
- }
-
- return atan2(y,x)*R2D;
-}
diff --git a/ast-5.3-1/wcstrig.h b/ast-5.3-1/wcstrig.h
deleted file mode 100644
index c2e1895..0000000
--- a/ast-5.3-1/wcstrig.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*=============================================================================
-*
-* WCSLIB - an implementation of the FITS WCS proposal.
-* Copyright (C) 1995-2002, Mark Calabretta
-*
-* This library is free software; you can redistribute it and/or modify it
-* under the terms of the GNU Library General Public License as published
-* by the Free Software Foundation; either version 2 of the License, or (at
-* your option) any later version.
-*
-* This library is distributed in the hope that it will be useful, but
-* WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library
-* General Public License for more details.
-*
-* You should have received a copy of the GNU Library General Public License
-* along with this library; if not, write to the Free Software Foundation,
-* Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
-* Correspondence concerning WCSLIB may be directed to:
-* Internet email: mcalabre at atnf.csiro.au
-* Postal address: Dr. Mark Calabretta,
-* Australia Telescope National Facility,
-* P.O. Box 76,
-* Epping, NSW, 2121,
-* AUSTRALIA
-*
-* Author: Mark Calabretta, Australia Telescope National Facility
-* $Id: wcstrig.h,v 1.1.1.1 2009/11/02 16:01:18 joye Exp $
-*=============================================================================
-*
-* This version of wcstrig.h is based on the version in wcslib-2.9, but has
-* been modified in the following ways by the Starlink project (e-mail:
-* ussc at star.rl.ac.uk):
-* - Support for non-ANSI C prototypes removed
-* - Changed the name of the WCSLIB_TRIG macro to WCSLIB_TRIG_INCLUDED
-* - Changed names of degrees trig functions to avoid clashes with
-* wcslib.
-*===========================================================================*/
-
-#ifndef WCSLIB_TRIG_INCLUDED
-#define WCSLIB_TRIG_INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-double astCosd(const double);
-double astSind(const double);
-double astTand(const double);
-double astACosd(const double);
-double astASind(const double);
-double astATand(const double);
-double astATan2d(const double, const double);
-
-/* Domain tolerance for asin and acos functions. */
-#define WCSTRIG_TOL 1e-10
-
-#ifdef __cplusplus
-};
-#endif
-
-#endif /* WCSLIB_TRIG_INCLUDED */
diff --git a/ast-5.3-1/winmap.c b/ast-5.3-1/winmap.c
deleted file mode 100644
index 880ee08..0000000
--- a/ast-5.3-1/winmap.c
+++ /dev/null
@@ -1,4384 +0,0 @@
-/*
-*class++
-* Name:
-* WinMap
-
-* Purpose:
-* Map one window on to another by scaling and shifting each axis.
-
-* Constructor Function:
-c astWinMap
-f AST_WINMAP
-
-* Description:
-* A Winmap is a linear Mapping which transforms a rectangular
-* window in one coordinate system into a similar window in another
-* coordinate system by scaling and shifting each axis (the window
-* edges being parallel to the coordinate axes).
-*
-* A WinMap is specified by giving the coordinates of two opposite
-* corners (A and B) of the window in both the input and output
-* coordinate systems.
-
-* Inheritance:
-* The WinMap class inherits from the Mapping class.
-
-* Attributes:
-* The WinMap class does not define any new attributes beyond those
-* which are applicable to all Mappings.
-
-* Functions:
-c The WinMap class does not define any new functions beyond those
-f The WinMap class does not define any new routines beyond those
-* which are applicable to all Mappings.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David Berry (Starlink)
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 23-OCT-1996 (DSB):
-* Original version.
-* 4-MAR-1997 (RFWS):
-* Tidied public prologues.
-* 11-MAR-1997 (DSB):
-* Added MapMerge method and associated bits.
-* 30-JUN-1997 (DSB):
-* Bug fixed which caused the MapMerge method to generate a
-* segmentation violation.
-* 24-MAR-1998 (RFWS):
-* Improved output format from Dump.
-* 9-APR-1998 (DSB):
-* MapMerge modified to allow merging of WinMaps with ZoomMaps and
-* and UnitMaps in parallel.
-* 4-SEP-1998 (DSB):
-* Improved MapMerge so that WinMaps can change places with a wider
-* range of PermMaps, allowing them to approach closer to a Mapping
-* with which they can merge.
-* 22-FEB-1999 (DSB):
-* Corrected logic of MapMerge method to avoid infinite looping.
-* 5-MAY-1999 (DSB):
-* More corrections to MapMerge: Cleared up errors in the use of the
-* supplied invert flags, and corrected logic for deciding which
-* neighbouring Mapping to swap with.
-* 16-JUL-1999 (DSB):
-* Fixed memory leaks in WinMat and MapMerge.
-* 8-JAN-2003 (DSB):
-* Changed private InitVtab method to protected astInitWinMapVtab
-* method.
-* 8-SEP-2003 (DSB):
-* Allow WinMaps to swap with WcsMaps if possible.
-* 10-NOV-2003 (DSB):
-* Modified functions which swap a WinMap with another Mapping
-* (e.g. WinPerm, etc), to simplify the returned Mappings.
-* 23-APR-2004 (DSB):
-* Changes to simplification algorithm.
-* 1-SEP-2004 (DSB):
-* Ensure do1 and do2 are initialised before use in MapMerge.
-* 7-SEP-2005 (DSB):
-* Take account of the Invert flag when using the soom factor from
-* a ZoomMap.
-* 14-FEB-2006 (DSB):
-* Override astGetObjSize.
-* 15-MAR-2006 (DSB):
-* Override astEqual.
-* 23-AUG-2006 (DSB):
-* Correct initialisation of "result" in the Equal function.
-* 19-JAN-2007 (DSB):
-* Fix memory leak.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS WinMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory management facilities */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "matrixmap.h" /* Linear mappings */
-#include "unitmap.h" /* Unit mappings */
-#include "zoommap.h" /* Zoom mappings */
-#include "permmap.h" /* Axis permutations */
-#include "cmpmap.h" /* Compound mappings */
-#include "wcsmap.h" /* Celestial projections */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-#include "channel.h" /* I/O channels */
-#include "winmap.h" /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(WinMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(WinMap,Class_Init)
-#define class_vtab astGLOBAL(WinMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstWinMapVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstWinMap *astWinMapId_( int, const double [], const double [],
- const double [], const double [], const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstWinMap *WinUnit( AstWinMap *, AstUnitMap *, int, int, int * );
-static AstWinMap *WinWin( AstMapping *, AstMapping *, int, int, int, int * );
-static AstWinMap *WinZoom( AstWinMap *, AstZoomMap *, int, int, int, int, int * );
-static int GetObjSize( AstObject *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static int CanSwap( AstMapping *, AstMapping *, int, int, int *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetIsLinear( AstMapping *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int WinTerms( AstWinMap *, double **, double **, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void PermGet( AstPermMap *, int **, int **, double **, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void WinMat( AstMapping **, int *, int, int * );
-static void WinPerm( AstMapping **, int *, int, int * );
-static void WinWcs( AstMapping **, int *, int, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-
-/* Function Macros */
-/* =============== */
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
-compare bad values directory because of the danger of floating point
-exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Member functions. */
-/* ================= */
-static int CanSwap( AstMapping *map1, AstMapping *map2, int inv1, int inv2,
- int *simpler, int *status ){
-/*
-* Name:
-* CanSwap
-
-* Purpose:
-* Determine if two Mappings could be swapped.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "winmap.h"
-* int CanSwap( AstMapping *map1, AstMapping *map2, int inv1, int inv2,
-* int *simpler, int *status )
-
-* Class Membership:
-* WinMap member function
-
-* Description:
-* This function returns a flag indicating if the pair of supplied
-* Mappings could be replaced by an equivalent pair of Mappings from the
-* same classes as the supplied pair, but in reversed order. Each pair
-* of Mappings is considered to be compunded in series. The supplied
-* Mapings are not changed in any way.
-
-* Parameters:
-* map1
-* The Mapping to be applied first.
-* map2
-* The Mapping to be applied second.
-* inv1
-* The invert flag to use with map1. A value of zero causes the forward
-* mapping to be used, and a non-zero value causes the inverse
-* mapping to be used.
-* inv2
-* The invert flag to use with map2.
-* simpler
-* Addresss of a location at which to return a flag indicating if
-* the swapped Mappings would be intrinsically simpler than the
-* original Mappings.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* 1 if the Mappings could be swapped, 0 otherwise.
-
-* Notes:
-* - One of the supplied pair of Mappings must be a WinMap.
-* - A value of 0 is returned if the two Mappings could be merged into
-* a single Mapping.
-* - A value of 0 is returned if an error has already occurred, or if
-* this function should fail for any reason.
-*/
-
-/* Local Variables: */
- AstMapping *nowin; /* Pointer to non-WinMap Mapping */
- AstWinMap *win; /* Pointer to the WinMap */
- const char *class1; /* Pointer to map1 class string */
- const char *class2; /* Pointer to map2 class string */
- const char *nowin_class; /* Pointer to non-WinMap class string */
- double *consts; /* Pointer to constants array */
- int *inperm; /* Pointer to input axis permutation array */
- int *outperm; /* Pointer to output axis permutation array */
- int axlat; /* Latitude axis in WcsMap */
- int axlon; /* Longitude axis in WcsMap */
- int i; /* Loop count */
- int invert[ 2 ]; /* Original invert flags */
- int nin; /* No. of input coordinates for the PermMap */
- int nout; /* No. of output coordinates for the PermMap */
- int ret; /* Returned flag */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Initialise */
- ret = 0;
- *simpler = 0;
-
-/* Temporarily set the Invert attributes of both Mappings to the supplied
- values. */
- invert[ 0 ] = astGetInvert( map1 );
- astSetInvert( map1, inv1 );
-
- invert[ 1 ] = astGetInvert( map2 );
- astSetInvert( map2, inv2 );
-
-/* Get the classes of the two mappings. */
- class1 = astGetClass( map1 );
- class2 = astGetClass( map2 );
- if( astOK ){
-
-/* Get a pointer to the non-WinMap Mapping. */
- if( !strcmp( class1, "WinMap" ) ){
- nowin = map2;
- nowin_class = class2;
- win = (AstWinMap *) map1;
- } else {
- nowin = map1;
- nowin_class = class1;
- win = (AstWinMap *) map2;
- }
-
-/* If it is a MatrixMap, the Mappings can be swapped. */
- if( !strcmp( nowin_class, "MatrixMap" ) ){
- ret = 1;
-
-/* If it is a WcsMap, the Mappings can be swapped if the WinMap is
- equivalent to a unit transformation on the celestial axes of the
- WcsMap. */
- } else if( !strcmp( nowin_class, "WcsMap" ) ){
-
-/* Get the indices of the celestial coordinates inthe WcsMap. */
- axlat = astGetWcsAxis( (AstWcsMap *) nowin, 1 );
- axlon = astGetWcsAxis( (AstWcsMap *) nowin, 0 );
-
-/* Check the shift and scale for these axes. */
- ret = ( win->a[ axlon ] == 0.0 && win->b[ axlon ] == 1.0 &&
- win->a[ axlat ] == 0.0 && win->b[ axlat ] == 1.0 );
-
-/* If it is a PermMap, the Mappings can be swapped so long as all links
- between input and output axes in the PermMap are bi-directional. This
- does not preclude the existence of unconnected axes, which do not
- have links (bi-directional or otherwise). */
- } else if( !strcmp( nowin_class, "PermMap" ) ){
-
-/* Get the number of input and output coordinates. */
- nin = astGetNin( nowin );
- nout = astGetNout( nowin );
-
-/* We need to know the axis permutation arrays and constants array for
- the PermMap. */
- PermGet( (AstPermMap *) nowin, &outperm, &inperm, &consts, status );
- if( astOK ) {
-
-/* Indicate we can swap with the PermMap. */
- ret = 1;
-
-/* Check each output axis. If any links between axes are found which are
- not bi-directional, indicate that we cannot swap with the PermMap. */
- for( i = 0; i < nout; i++ ){
- if( outperm[ i ] >= 0 && outperm[ i ] < nin ) {
- if( inperm[ outperm[ i ] ] != i ) {
- ret = 0;
- break;
- }
- }
- }
-
-/* Check each input axis. If any links between axes are found which are
- not bi-directional, indicate that we cannot swap with the PermMap. */
- for( i = 0; i < nin; i++ ){
- if( inperm[ i ] >= 0 && inperm[ i ] < nout ) {
- if( outperm[ inperm[ i ] ] != i ) {
- ret = 0;
- break;
- }
- }
- }
-
-/* If we can swap with the PermMap, the swapped Mappings may be
- intrinsically simpler than the original mappings. */
- if( ret ) {
-
-/* If the PermMap preceeds the WinMap, this will be the case if the PermMap
- has more outputs than inputs. If the WinMap preceeds the PermMap, this
- will be the case if the PermMap has more inputs than outputs. */
- *simpler = ( nowin == map1 ) ? nout > nin : nin > nout;
- }
-
-/* Free the axis permutation and constants arrays. */
- outperm = (int *) astFree( (void *) outperm );
- inperm = (int *) astFree( (void *) inperm );
- consts = (double *) astFree( (void *) consts );
- }
- }
- }
-
-/* Re-instate the original settings of the Invert attributes for the
- supplied MatrixMaps. */
- astSetInvert( map1, invert[ 0 ] );
- astSetInvert( map2, invert[ 1 ] );
-
-/* Return the answer. */
- return astOK ? ret : 0;
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a WinMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "winmap.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* WinMap member function (over-rides the astClearAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* WinMap, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the WinMap.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstWinMap *this; /* Pointer to the WinMap structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the WinMap structure. */
- this = (AstWinMap *) this_object;
-
-/* At the moment the WinMap class has no attributes, so pass it on to the
- parent method for further interpretation. */
- (*parent_clearattrib)( this_object, attrib, status );
-
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two WinMaps are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "winmap.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* WinMap member function (over-rides the astEqual protected
-* method inherited from the astMapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two WinMaps are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Object (a WinMap).
-* that
-* Pointer to the second Object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the WinMaps are equivalent, zero otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstWinMap *that;
- AstWinMap *this;
- double *a_that;
- double *a_this;
- double *b_that;
- double *b_this;
- int i;
- int nin;
- int result;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain pointers to the two WinMap structures. */
- this = (AstWinMap *) this_object;
- that = (AstWinMap *) that_object;
-
-/* Check the second object is a WinMap. We know the first is a
- WinMap since we have arrived at this implementation of the virtual
- function. */
- if( astIsAWinMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
- nin = astGetNin( this );
- if( astGetNin( that ) == nin ) {
-
-/* Assume the WinMaps are equivalent. */
- result = 1;
-
-/* Compare the shift and scale terms from both WinMaps ignoring the
- setting of the Invert flag for the moment. */
- for( i = 0; i < nin; i++ ) {
- if( !EQUAL( this->a[ i ], that->a[ i ] ) ||
- !EQUAL( this->b[ i ], that->b[ i ] ) ) {
- result = 0;
- break;
- }
- }
-
-/* If the scale and shifts are equal, check the Invert flags are equal. */
- if( result ) {
- result= ( astGetInvert( this ) == astGetInvert( that ) );
-
-/* If the scale and shifts differ, there is still a chance that the
- WinMaps may be equivalent if their Invert flags differ. */
- } else if( astGetInvert( this ) != astGetInvert( that ) ) {
-
-/* Create copies of the scale and shift terms from the two WinMaps, taking
- into account the setting of the Invert attribute. Finding the inverted
- terms involves arithmetic which introduces rounding errors, so this
- test is not as reliable as the above direct comparison of terms. */
- astWinTerms( this, &a_this, &b_this );
- astWinTerms( that, &a_that, &b_that );
- result = 1;
-
- for( i = 0; i < nin; i++ ) {
- if( !EQUAL( a_this[ i ], a_that[ i ] ) ||
- !EQUAL( b_this[ i ], b_that[ i ] ) ) {
- result = 0;
- break;
- }
- }
-
-/* Free resources */
- a_this = astFree( a_this );
- a_that = astFree( a_that );
- b_this = astFree( b_this );
- b_that = astFree( b_that );
- }
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static int GetIsLinear( AstMapping *this_mapping, int *status ){
-/*
-* Name:
-* GetIsLinear
-
-* Purpose:
-* Return the value of the IsLinear attribute for a WinMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void GetIsLinear( AstMapping *this, int *status )
-
-* Class Membership:
-* WinMap member function (over-rides the protected astGetIsLinear
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns the value of the IsLinear attribute for a
-* Frame, which is always one.
-
-* Parameters:
-* this
-* Pointer to the WinMap.
-* status
-* Pointer to the inherited status variable.
-*/
- return 1;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-* Name:
-* GetObjSize
-
-* Purpose:
-* Return the in-memory size of an Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "winmap.h"
-* int GetObjSize( AstObject *this, int *status )
-
-* Class Membership:
-* WinMap member function (over-rides the astGetObjSize protected
-* method inherited from the parent class).
-
-* Description:
-* This function returns the in-memory size of the supplied WinMap,
-* in bytes.
-
-* Parameters:
-* this
-* Pointer to the WinMap.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The Object size, in bytes.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstWinMap *this; /* Pointer to WinMap structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointers to the WinMap structure. */
- this = (AstWinMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
- add on any components of the class structure defined by thsi class
- which are stored in dynamically allocated memory. */
- result = (*parent_getobjsize)( this_object, status );
- result += astTSizeOf( this->a );
- result += astTSizeOf( this->b );
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a WinMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "winmap.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* WinMap member function (over-rides the protected astGetAttrib
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a WinMap, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the WinMap.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the WinMap, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the WinMap. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Constants: */
-#define BUFF_LEN 50 /* Max. characters in result buffer */
-
-/* Local Variables: */
- AstWinMap *this; /* Pointer to the WinMap structure */
- const char *result; /* Pointer value to return */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the WinMap structure. */
- this = (AstWinMap *) this_object;
-
-/* At the moment the WinMap class has no attributes, so pass it on to the
- parent method for further interpretation. */
- result = (*parent_getattrib)( this_object, attrib, status );
-
-/* Return the result. */
- return result;
-
-/* Undefine macros local to this function. */
-#undef BUFF_LEN
-}
-
-void astInitWinMapVtab_( AstWinMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitWinMapVtab
-
-* Purpose:
-* Initialise a virtual function table for a WinMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "winmap.h"
-* void astInitWinMapVtab( AstWinMapVtab *vtab, const char *name )
-
-* Class Membership:
-* WinMap vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the WinMap class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAWinMap) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
- vtab->WinTerms = WinTerms;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
- parent_getobjsize = object->GetObjSize;
- object->GetObjSize = GetObjSize;
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- object->Equal = Equal;
- mapping->MapMerge = MapMerge;
- mapping->MapSplit = MapSplit;
- mapping->Rate = Rate;
- mapping->GetIsLinear = GetIsLinear;
-
-/* Declare the class dump, copy and delete functions.*/
- astSetDump( vtab, Dump, "WinMap", "Map one window on to another" );
- astSetCopy( (AstObjectVtab *) vtab, Copy );
- astSetDelete( (AstObjectVtab *) vtab, Delete );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a WinMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* WinMap method (over-rides the protected astMapMerge method
-* inherited from the Mapping class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated WinMap in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated WinMap with a Mapping which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated WinMap which is to be merged with
-* its neighbours. This should be a cloned copy of the WinMap
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* WinMap it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated WinMap resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstCmpMap *cm; /* Pointer to neighbouring CmpMap */
- AstMapping **maplt; /* New mappings list pointer */
- AstMapping *map2; /* Pointer to replacement Mapping */
- AstMapping *mc[2]; /* Copies of supplied Mappings to swap */
- AstMapping *nc[2]; /* Copies of neighbouring Mappings to merge */
- AstMapping *smc0; /* Simplified Mapping */
- AstMapping *smc1; /* Simplified Mapping */
- AstMapping *simp1; /* Simplified Mapping */
- AstMapping *simp2; /* Simplified Mapping */
- AstMatrixMap *mtr; /* Pointer to replacement MatrixMap */
- AstWinMap *newwm2; /* Second component WinMap */
- AstWinMap *newwm; /* Pointer to replacement WinMap */
- AstWinMap *oldwm; /* Pointer to supplied WinMap */
- const char *class1; /* Pointer to first Mapping class string */
- const char *class2; /* Pointer to second Mapping class string */
- const char *nclass; /* Pointer to neighbouring Mapping class */
- double *a; /* Pointer to zero terms */
- double *b; /* Pointer to scale terms */
- int *invlt; /* New invert flags list pointer */
- int cmlow; /* Is lower neighbour a CmpMap? */
- int diag; /* Is WinMap equivalent to a diagonal matrix? */
- int do1; /* Would a backward swap make a simplification? */
- int do2; /* Would a forward swap make a simplification? */
- int i1; /* Index of first WinMap to merge */
- int i2; /* Index of last WinMap to merge */
- int i; /* Loop counter */
- int ic[2]; /* Copies of supplied invert flags to swap */
- int inc[4]; /* Copies of supplied invert flags to merge */
- int invert; /* Should the inverted Mapping be used? */
- int neighbour; /* Index of Mapping with which to swap */
- int nin2; /* No. of inputs for second component WinMap */
- int nin; /* Number of coordinates for WinMap */
- int nmapt; /* No. of Mappings in list */
- int nstep1; /* No. of Mappings backwards to next mergable Mapping */
- int nstep2; /* No. of Mappings forward to next mergable Mapping */
- int old_winv; /* original Invert value for supplied WinMap */
- int result; /* Result value to return */
- int ser; /* Are Mappings applied in series? */
- int simpler; /* Is the resulting Mapping simpler than original? */
- int swap; /* Is there an advantage in swapping mappings? */
- int swaphi; /* Can WinMap be swapped with higher neighbour? */
- int swaplo; /* Can WinMap be swapped with lower neighbour? */
-
-/* Initialise. */
- result = -1;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- i1 = 0;
- i2 = 0;
- neighbour = 0;
-
-/* Get the number of axes for the WinMap. */
- nin = astGetNin( ( *map_list )[ where ] );
-
-/* Get a pointer to the WinMap. */
- oldwm = (AstWinMap *) this;
-
-/* First of all, see if the WinMap can be replaced by a simpler Mapping,
- without reference to the neighbouring Mappings in the list. */
-/* ======================================================================*/
-/* If the shift terms in the WinMap are all zero, the WinMap can be
- replaced by a diagonal MatrixMap (which is faster to compute). Check the
- shift terms. */
- diag = 1;
- newwm = (AstWinMap *) ( *map_list )[ where ];
- for( i = 0; i < nin; i++ ){
- if( !EQUAL( ( newwm->a )[ i ], 0.0 ) ){
- diag = 0;
- break;
- }
- }
-
-/* If all the shift terms are zero... */
- if( diag ){
-
-/* Temporarily set the Invert attribute of the WinMap to the supplied
- value. */
- old_winv = astGetInvert( newwm );
- astSetInvert( newwm, ( *invert_list )[ where ] );
-
-/* Get a copy of the scale terms from the WinMap. */
- astWinTerms( newwm, NULL, &b );
-
-/* Create a diagonal MatrixMap holding the scale terms. */
- mtr = astMatrixMap( nin, nin, 1, b, "", status );
-
-/* Restore the Invert attribute of the supplied WinMap. */
- astSetInvert( newwm, old_winv );
-
-/* Free the memory used to hold the scale terms. */
- b = (double *) astFree( (void *) b );
-
-/* Annul the WinMap pointer in the list and replace it with the MatrixMap
- pointer, and indicate that the forward transformation of the returned
- MatrixMap should be used. */
- (void) astAnnul( ( *map_list )[ where ] );
- ( *map_list )[ where ] = (AstMapping *) mtr;
- ( *invert_list )[ where ] = 0;
-
-/* Return the index of the first modified element. */
- result = where;
-
-/* If the WinMap itself could not be simplified, see if it can be merged
- with the Mappings on either side of it in the list. */
- } else {
-
-/* Store the classes of the neighbouring Mappings in the list. */
- class1 = ( where > 0 ) ? astGetClass( ( *map_list )[ where - 1 ] ) : NULL;
- class2 = ( where < *nmap - 1 ) ? astGetClass( ( *map_list )[ where + 1 ] ) : NULL;
-
-/* In series. */
-/* ========== */
- if ( series ) {
-
-/* We first look to see if the WinMap can be merged with one of its
- neighbours, resulting in a reduction of one in the number of Mappings
- in the list. WinMaps can only merge directly with another WinMap, a
- ZoomMap, or a UnitMap. */
- if( class1 && ( !strcmp( class1, "WinMap" ) ||
- !strcmp( class1, "ZoomMap" ) ||
- !strcmp( class1, "UnitMap" ) ) ){
- nclass = class1;
- i1 = where - 1;
- i2 = where;
-
- } else if( class2 && ( !strcmp( class2, "WinMap" ) ||
- !strcmp( class2, "ZoomMap" ) ||
- !strcmp( class2, "UnitMap" ) ) ){
- nclass = class2;
- i1 = where;
- i2 = where + 1;
-
- } else {
- nclass = NULL;
- }
-
-/* If the WinMap can merge with one of its neighbours, create the merged
- Mapping. */
- if( nclass ){
-
- if( !strcmp( nclass, "WinMap" ) ){
- newwm = WinWin( ( *map_list )[ i1 ], ( *map_list )[ i2 ],
- ( *invert_list )[ i1 ], ( *invert_list )[ i2 ],
- 1, status );
- invert = 0;
-
- } else if( !strcmp( nclass, "ZoomMap" ) ){
- if( i1 == where ){
- newwm = WinZoom( (AstWinMap *)( *map_list )[ i1 ],
- (AstZoomMap *)( *map_list )[ i2 ],
- ( *invert_list )[ i1 ], ( *invert_list )[ i2 ], 1, 1, status );
- } else {
- newwm = WinZoom( (AstWinMap *)( *map_list )[ i2 ],
- (AstZoomMap *)( *map_list )[ i1 ],
- ( *invert_list )[ i2 ], ( *invert_list )[ i1 ], 0, 1, status );
- }
- invert = 0;
-
- } else {
- newwm = astClone( ( *map_list )[ where ] );
- invert = ( *invert_list )[ where ];
- }
-
-/* If succesfull... */
- if( astOK ){
-
-/* Annul the first of the two Mappings, and replace it with the merged
- WinMap. Also set the invert flag. */
- (void) astAnnul( ( *map_list )[ i1 ] );
- ( *map_list )[ i1 ] = (AstMapping *) newwm;
- ( *invert_list )[ i1 ] = invert;
-
-/* Annul the second of the two Mappings, and shuffle down the rest of the
- list to fill the gap. */
- (void) astAnnul( ( *map_list )[ i2 ] );
- for ( i = i2 + 1; i < *nmap; i++ ) {
- ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
- ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
- }
-
-/* Clear the vacated element at the end. */
- ( *map_list )[ *nmap - 1 ] = NULL;
- ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
- modified element. */
- ( *nmap )--;
- result = i1;
-
- }
-
-/* If one of the neighbours is a (parallel) CmpMap, we convert the WinMap
- into an equivalent parallel CmpMap, and then merge this parallel
- CmpMap with the neighbouring parallel CmpMap to create a parallel CmpMap
- containing two series CmpMaps. */
- } else if( ( class1 && !strcmp( "CmpMap", class1 ) ) ||
- ( class2 && !strcmp( "CmpMap", class2 ) ) ) {
-
-/* Identify the WinMap and the CmpMap. */
- if( class1 && !strcmp( "CmpMap", class1 ) ) {
- i1 = where - 1;
- i2 = where;
- cm = (AstCmpMap *) ( *map_list )[ where - 1 ];
- cmlow = 1;
-
- } else {
- i1 = where;
- i2 = where + 1;
- cm = (AstCmpMap *) ( *map_list )[ where + 1 ];
- cmlow = 0;
-
- }
-
-/* Temporarily set the required Invert attributes in the two Mappings. */
- inc[ 0 ] = astGetInvert( ( *map_list )[ i1 ] );
- astSetInvert( ( *map_list )[ i1 ], ( *invert_list )[ i1 ] );
-
- inc[ 1 ] = astGetInvert( ( *map_list )[ i2 ] );
- astSetInvert( ( *map_list )[ i2 ], ( *invert_list )[ i2 ] );
-
-/* Now get pointers to the scale and zero terms of the nominated WinMap
- (these describe the forward transformation, taking into account the
- setting of the Invert flag). */
- (void) astWinTerms( oldwm , &a, &b );
-
-/* Get pointers to the two components of the parallel CmpMap. */
- astDecompose( cm, mc, mc + 1, &ser, ic, ic + 1 );
-
-/* Check component Mappings are combined in parallel. */
- map2 = NULL;
- if( astOK && !ser ) {
-
-/* Temporarily set the required Invert attributes in the two component
- Mappings to the indicated values. */
- inc[ 2 ] = astGetInvert( mc[ 0 ] );
- astSetInvert( mc[ 0 ], ic[ 0 ] );
-
- inc[ 3 ] = astGetInvert( mc[ 1 ] );
- astSetInvert( mc[ 1 ], ic[ 1 ] );
-
-/* Create the first of two corresponding WinMaps, initially with undefined
- corners. These could be combined into a parallel CmpMap which would be
- equivalent to the nominated WinMap. The number of inputs for each WinMap
- is equal to either the number of outputs or inputs of the corresponding
- component of the CmpMap, depending on whether the CmpMap is upper or lower
- neighbour. */
- nin = cmlow ? astGetNout( mc[ 0 ] ):astGetNin( mc[ 0 ] );
- newwm = astWinMap( nin, NULL, NULL, NULL, NULL, "", status );
- if( astOK ) {
-
-/* Store the first "nin" scale and zero terms from the nominated WinMap
- in the new WinMap. */
- for( i = 0; i < nin; i++ ) {
- (newwm->a)[ i ] = a[ i ];
- (newwm->b)[ i ] = b[ i ];
- }
- }
-
-/* Now create the second WinMap in the same way, which transforms the
- remaining outputs of the CmpMap. */
- nin2 = cmlow ? astGetNout( mc[ 1 ] ):astGetNin( mc[ 1 ] );
- newwm2 = astWinMap( nin2, NULL, NULL, NULL, NULL, "", status );
- if( astOK ) {
-
-/* Store the remaining scale and zero terms from the nominated WinMap
- in the new WinMap. */
- for( i = 0; i < nin2; i++ ) {
- (newwm2->a)[ i ] = a[ i + nin ];
- (newwm2->b)[ i ] = b[ i + nin ];
- }
- }
-
-/* Combine the two corresponding lower component Mappings into a series
- CmpMap, and likewise combine the two corresponding upper component
- Mappings into a series CmpMap. */
- if( cmlow ) {
- nc[ 0 ] = (AstMapping *) astCmpMap( mc[ 0 ], newwm, 1, "", status );
- nc[ 1 ] = (AstMapping *) astCmpMap( mc[ 1 ], newwm2, 1, "", status );
- } else {
- nc[ 0 ] = (AstMapping *) astCmpMap( newwm, mc[ 0 ], 1, "", status );
- nc[ 1 ] = (AstMapping *) astCmpMap( newwm2, mc[ 1 ], 1, "", status );
- }
- newwm = astAnnul( newwm );
- newwm2 = astAnnul( newwm2 );
-
-/* Attempt to simplify each of the two new series CmpMaps. If neither of
- them simplify then there is no point in doing the current merger. In fact
- it would be dangerous to do so since we may end up in an infinite loop
- where the resulting parallel CmpMap gets converted back into the
- existing series CmpMap by the CmpMap MapMerge method, and then back
- again by this method, etc. */
- simp1 = astSimplify( nc[ 0 ] );
- simp2 = astSimplify( nc[ 1 ] );
-
-/* Test if either could be simplified by checking if its pointer value
- has changed. */
- simpler = ( simp1 != nc[ 0 ] ) || ( simp2 != nc[ 1 ] );
-
-/* If either CmpMap was simplified, then combine the two series CmpMap into
- a single parallel CmpMap. */
- if( simpler ) {
- map2 = (AstMapping *) astCmpMap( simp1, simp2, 0, "", status );
- }
-
-/* Re-instate the original Invert attributes in the two component Mappings. */
- astSetInvert( mc[ 0 ], inc[ 2 ] );
- astSetInvert( mc[ 1 ], inc[ 3 ] );
-
-/* Free resources. */
- simp1 = astAnnul( simp1 );
- simp2 = astAnnul( simp2 );
- nc[ 0 ] = astAnnul( nc[ 0 ] );
- nc[ 1 ] = astAnnul( nc[ 1 ] );
-
- }
-
-/* Free resources. */
- mc[ 0 ] = astAnnul( mc[ 0 ] );
- mc[ 1 ] = astAnnul( mc[ 1 ] );
- a = astFree( a );
- b = astFree( b );
-
-/* Re-instate the original Invert attributes. */
- astSetInvert( ( *map_list )[ i1 ], inc[ 0 ] );
- astSetInvert( ( *map_list )[ i2 ], inc[ 1 ] );
-
-/* If the above produced a new Mapping, annul the supplied pointers for
- the two merged Mappings, store the pointer for the new merged Mapping,
- and shuffle the remaining Mappings down to fill the space left. Nullify
- the end slot which is no longer used, reduce the number of Mappings in
- the list by 1, and return the index of the first modified Mapping. */
- if( map2 ) {
- (void) astAnnul( ( *map_list )[ i1 ] );
- (void) astAnnul( ( *map_list )[ i2 ] );
- ( *map_list )[ i1 ] = map2;
- ( *invert_list )[ i1 ] = 0;
- for( i = i2 + 1; i < *nmap; i++ ){
- ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
- ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
- }
- ( *map_list )[ *nmap - 1 ] = NULL;
- (*nmap)--;
- result = i1;
- }
-
-/* If the WinMap could not merge directly with either of its neighbours,
- we consider whether it would be worthwhile to swap the WinMap with
- either of its neighbours. This can only be done for certain classes
- of Mapping (MatrixMap & some PermMaps & WcsMaps), and will usually require both
- Mappings to be modified (unless they are commutative). The advantage of
- swapping the order of the Mappings is that it may result in the WinMap
- being adjacent to a Mapping with which it can merge directly on the next
- invocation of this function, thus reducing the number of Mappings
- in the list. */
- } else {
-
-/* Set a flag if we could swap the WinMap with its higher neighbour. "do2"
- is returned if swapping the Mappings would simplify either of the
- Mappings. */
- if( where + 1 < *nmap ){
- swaphi = CanSwap( ( *map_list )[ where ],
- ( *map_list )[ where + 1 ],
- ( *invert_list )[ where ],
- ( *invert_list )[ where + 1 ], &do2, status );
- } else {
- swaphi = 0;
- do2 = 0;
- }
-
-/* If so, step through each of the Mappings which follow the WinMap,
- looking for a Mapping with which the WinMap could merge directly. Stop
- when such a Mapping is found, or if a Mapping is found with which the
- WinMap could definitely not swap. Note the number of Mappings which
- separate the WinMap from the Mapping with which it could merge (if
- any). */
- nstep2 = -1;
- if( swaphi ){
- for( i2 = where + 1; i2 < *nmap; i2++ ){
-
-/* See if we can merge with this Mapping. If so, note the number of steps
- between the two Mappings and leave the loop. */
- nclass = astGetClass( ( *map_list )[ i2 ] );
- if( !strcmp( nclass, "WinMap" ) ||
- !strcmp( nclass, "ZoomMap" ) ||
- !strcmp( nclass, "UnitMap" ) ) {
- nstep2 = i2 - where - 1;
- break;
- }
-
-/* If there is no chance that we can swap with this Mapping, leave the loop
- with -1 for the number of steps to indicate that no merging is possible.
- WinMaps can swap with MatrixMaps and some PermMaps. */
- if( strcmp( nclass, "MatrixMap" ) &&
- strcmp( nclass, "WcsMap" ) &&
- strcmp( nclass, "PermMap" ) ) {
- break;
- }
-
- }
-
- }
-
-/* Do the same working forward from the WinMap towards the start of the map
- list. */
- if( where > 0 ){
- swaplo = CanSwap( ( *map_list )[ where - 1 ],
- ( *map_list )[ where ],
- ( *invert_list )[ where - 1 ],
- ( *invert_list )[ where ], &do1, status );
- } else {
- swaplo = 0;
- do1 = 0;
- }
-
- nstep1 = -1;
- if( swaplo ){
- for( i1 = where - 1; i1 >= 0; i1-- ){
-
- nclass = astGetClass( ( *map_list )[ i1 ] );
- if( !strcmp( nclass, "WinMap" ) ||
- !strcmp( nclass, "ZoomMap" ) ||
- !strcmp( nclass, "UnitMap" ) ) {
- nstep1 = where - 1 - i1;
- break;
- }
-
- if( strcmp( nclass, "MatrixMap" ) &&
- strcmp( nclass, "WcsMap" ) &&
- strcmp( nclass, "PermMap" ) ) {
- break;
- }
-
- }
-
- }
-
-/* Choose which neighbour to swap with so that the WinMap moves towards the
- nearest Mapping with which it can merge. */
- if( do1 || (
- nstep1 != -1 && ( nstep2 == -1 || nstep2 > nstep1 ) ) ){
- nclass = class1;
- i1 = where - 1;
- i2 = where;
- neighbour = i1;
- } else if( do2 || nstep2 != -1 ){
- nclass = class2;
- i1 = where;
- i2 = where + 1;
- neighbour = i2;
- } else {
- nclass = NULL;
- }
-
-/* If there is a target Mapping in the list with which the WinMap could
- merge, replace the supplied Mappings with swapped Mappings to bring a
- WinMap closer to the target Mapping. */
- if( nclass ){
-
-/* It is possible that the neighbouring Mapping with which we are about to
- swap could also merge with the target Mapping. When the neighbouring
- Mapping is reconsidered it may well swap the pair back to put itself nearer
- the target Mapping. We need to be careful not to end up in an infinite loop
- in which the pair of neighbouring Mappings are constantly swapped backwards
- and forwards as each attempts to put itself closer to the target Mapping.
- To prevent this, we only swap the pair of Mappings if the neighbouring
- Mapping could not itself merge with the target Mapping. Check to see
- if this is the case by attempting to merge the neighbouring Mapping with
- the target Mapping. */
- map2 = astClone( (*map_list)[ neighbour ] );
- nmapt = *nmap - neighbour;
- maplt = *map_list + neighbour;
- invlt = *invert_list + neighbour;
- result = astMapMerge( map2, 0, series, &nmapt, &maplt, &invlt );
- map2 = astAnnul( map2 );
-
-/* If the above call produced a change in the Mapping list, return the
- remaining number of mappings.. */
- if( result != -1 ){
- *nmap = nmapt + neighbour;
-
-/* Otherwise, if there was no change in the mapping list... */
- } else {
-
- if( !strcmp( nclass, "MatrixMap" ) ){
- WinMat( (*map_list) + i1, (*invert_list) + i1, where - i1, status );
-
- } else if( !strcmp( nclass, "PermMap" ) ){
- WinPerm( (*map_list) + i1, (*invert_list) + i1, where - i1, status );
-
- } else if( !strcmp( nclass, "WcsMap" ) ){
- WinWcs( (*map_list) + i1, (*invert_list) + i1, where - i1, status );
- }
-
-/* Store the index of the first modified Mapping. */
- result = i1;
- }
-
-/* If there is no Mapping available for merging, it may still be
- advantageous to swap with a neighbour because the swapped Mapping may
- be simpler than the original Mappings. For instance, a PermMap may
- strip axes of the WinMap leaving only a UnitMap. Also, the two neighbours
- may be able to merge. */
- } else if( swaphi || swaplo ) {
-
-/* Try swapping with each possible neighbour in turn. */
- for( i = 0; i < 2; i++ ) {
-
-/* Set up the class and pointers for the mappings to be swapped, first
- the lower neighbour, then the upper neighbour. */
- if( i == 0 && swaplo ){
- nclass = class1;
- i1 = where - 1;
- i2 = where;
-
- } else if( i == 1 && swaphi ){
- nclass = class2;
- i1 = where;
- i2 = where + 1;
-
- } else {
- nclass = NULL;
- }
-
-/* If we have a Mapping to swap with... */
- if( nclass ) {
-
-/* Take copies of the Mapping and Invert flag arrays so we do not change
- the supplied values. */
- mc[ 0 ] = (AstMapping *) astCopy( ( (*map_list) + i1 )[0] );
- mc[ 1 ] = (AstMapping *) astCopy( ( (*map_list) + i1 )[1] );
- ic[ 0 ] = ( (*invert_list) + i1 )[0];
- ic[ 1 ] = ( (*invert_list) + i1 )[1];
-
-/* Swap these Mappings. */
- if( !strcmp( nclass, "MatrixMap" ) ){
- WinMat( mc, ic, where - i1, status );
- } else if( !strcmp( nclass, "PermMap" ) ){
- WinPerm( mc, ic, where - i1, status );
- } else if( !strcmp( nclass, "WcsMap" ) ){
- WinWcs( mc, ic, where - i1, status );
- }
-
-/* See if the two neighbouring Mappings can merge now that the nominated
- Mapping is no longer in between them. First get a list of Mapping
- pointers containing the two Mappings to be merged, and associated
- invert flags. */
- if( i == 0 && where != *nmap - 1 ) {
- nc[ 0 ] = astClone( mc[ 1 ] );
- nc[ 1 ] = astClone( (*map_list)[ where + 1 ] );
- inc[ 0 ] = ic[ 1 ];
- inc[ 1 ] = (*invert_list)[ where + 1 ];
-
- } else if( i == 1 && where > 0 ) {
- nc[ 0 ] = astClone( (*map_list)[ where - 1 ] );
- nc[ 1 ] = astClone( mc[ 0 ] );
- inc[ 0 ] = (*invert_list)[ where - 1 ];
- inc[ 1 ] = ic[ 0 ];
-
- } else {
- nc[ 0 ] = NULL;
- nc[ 1 ] = NULL;
- }
-
-/* If both neighbours are available, use astMapMerge to see if it is
- possible to merge the two Mappings. */
- swap = 0;
- if( nc[ 0 ] && nc[ 1 ] ) {
- nmapt = 2;
- maplt = nc;
- invlt = inc;
- map2 = astClone( nc[ 0 ] );
- swap = astMapMerge( map2, 0, series, &nmapt, &maplt, &invlt );
- map2 = astAnnul( map2 );
- if( swap == -1 ) {
- map2 = astClone( nc[ 1 ] );
- swap = astMapMerge( map2, 1, series, &nmapt, &maplt, &invlt );
- map2 = astAnnul( map2 );
- }
- swap = ( nmapt < 2 ) ? 1 : 0;
- }
-
-/* Free resources. */
- if( nc[ 0 ] ) nc[ 0 ] = astAnnul( nc[ 0 ] );
- if( nc[ 1 ] ) nc[ 1 ] = astAnnul( nc[ 1 ] );
-
-/* If the neighbours could not merge, see if either swapped Mapping can
- be simplified. */
- if( !swap ) {
- smc0 = astSimplify( mc[0] );
- if( smc0 != mc[0] ) {
- swap = 1;
- } else {
- smc1 = astSimplify( mc[1] );
- swap = ( smc1 != mc[1] );
- smc1 = astAnnul( smc1 );
- }
- smc0 = astAnnul( smc0 );
- }
-
-/* If there is some point in swapping the Mappings, swap them in the
- supplied lists. Otherwise annul the swapped Mappings. */
- if( swap ) {
- (*map_list)[ i1 ] = astAnnul( (*map_list)[ i1 ] );
- (*map_list)[ i2 ] = astAnnul( (*map_list)[ i2 ] );
- (*map_list)[ i1 ] = mc[ 0 ];
- (*map_list)[ i2 ] = mc[ 1 ];
- (*invert_list)[ i1 ] = ic[ 0 ];
- (*invert_list)[ i2 ] = ic[ 1 ];
- result = i1;
- break;
-
- } else {
- mc[ 0 ] = astAnnul( mc[ 0 ] );
- mc[ 1 ] = astAnnul( mc[ 1 ] );
- }
- }
- }
- }
- }
-
-/* In parallel. */
-/* ============ */
-/* WinMaps are combined in parallel with neighbouring WinMaps, ZoomMaps and
- UnitMaps. */
- } else {
-
-/* We first look to see if the WinMap can be merged with one of its
- neighbours, resulting in a reduction of one in the number of Mappings
- in the list. WinMaps can only merge directly with another WinMap, a
- ZoomMap, or a UnitMap. */
- if( class1 && ( !strcmp( class1, "WinMap" ) ||
- !strcmp( class1, "ZoomMap" ) ||
- !strcmp( class1, "UnitMap" ) ) ){
- nclass = class1;
- i1 = where - 1;
- i2 = where;
-
- } else if( class2 && ( !strcmp( class2, "WinMap" ) ||
- !strcmp( class2, "ZoomMap" ) ||
- !strcmp( class2, "UnitMap" ) ) ){
- nclass = class2;
- i1 = where;
- i2 = where + 1;
-
- } else {
- nclass = NULL;
- }
-
-/* If the WinMap can merge with one of its neighbours, create the merged
- Mapping. */
- if( nclass ){
-
- if( !strcmp( nclass, "WinMap" ) ){
- newwm = WinWin( ( *map_list )[ i1 ], ( *map_list )[ i2 ],
- ( *invert_list )[ i1 ], ( *invert_list )[ i2 ],
- 0, status );
- invert = 0;
-
- } else if( !strcmp( nclass, "ZoomMap" ) ){
- if( i1 == where ){
- newwm = WinZoom( (AstWinMap *)( *map_list )[ i1 ],
- (AstZoomMap *)( *map_list )[ i2 ],
- ( *invert_list )[ i1 ], ( *invert_list )[ i2 ], 1, 0, status );
- } else {
- newwm = WinZoom( (AstWinMap *)( *map_list )[ i2 ],
- (AstZoomMap *)( *map_list )[ i1 ],
- ( *invert_list )[ i2 ], ( *invert_list )[ i1 ], 0, 0, status );
- }
- invert = 0;
-
- } else {
- if( i1 == where ){
- newwm = WinUnit( (AstWinMap *)( *map_list )[ i1 ],
- (AstUnitMap *)( *map_list )[ i2 ],
- ( *invert_list )[ i1 ], 1, status );
- } else {
- newwm = WinUnit( (AstWinMap *)( *map_list )[ i2 ],
- (AstUnitMap *)( *map_list )[ i1 ],
- ( *invert_list )[ i2 ], 0, status );
- }
- invert = 0;
-
- }
-
-/* If succesfull... */
- if( astOK ){
-
-/* Annul the first of the two Mappings, and replace it with the merged
- WinMap. Also set the invert flag. */
- (void) astAnnul( ( *map_list )[ i1 ] );
- ( *map_list )[ i1 ] = (AstMapping *) newwm;
- ( *invert_list )[ i1 ] = invert;
-
-/* Annul the second of the two Mappings, and shuffle down the rest of the
- list to fill the gap. */
- (void) astAnnul( ( *map_list )[ i2 ] );
- for ( i = i2 + 1; i < *nmap; i++ ) {
- ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
- ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
- }
-
-/* Clear the vacated element at the end. */
- ( *map_list )[ *nmap - 1 ] = NULL;
- ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
- modified element. */
- ( *nmap )--;
- result = i1;
-
- }
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static int *MapSplit( AstMapping *this_map, int nin, const int *in, AstMapping **map, int *status ){
-/*
-* Name:
-* MapSplit
-
-* Purpose:
-* Create a Mapping representing a subset of the inputs of an existing
-* WinMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "winmap.h"
-* int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status )
-
-* Class Membership:
-* WinMap method (over-rides the protected astMapSplit method
-* inherited from the Mapping class).
-
-* Description:
-* This function creates a new Mapping by picking specified inputs from
-* an existing WinMap. This is only possible if the specified inputs
-* correspond to some subset of the WinMap outputs. That is, there
-* must exist a subset of the WinMap outputs for which each output
-* depends only on the selected WinMap inputs, and not on any of the
-* inputs which have not been selected. If this condition is not met
-* by the supplied WinMap, then a NULL Mapping is returned.
-
-* Parameters:
-* this
-* Pointer to the WinMap to be split (the WinMap is not actually
-* modified by this function).
-* nin
-* The number of inputs to pick from "this".
-* in
-* Pointer to an array of indices (zero based) for the inputs which
-* are to be picked. This array should have "nin" elements. If "Nin"
-* is the number of inputs of the supplied WinMap, then each element
-* should have a value in the range zero to Nin-1.
-* map
-* Address of a location at which to return a pointer to the new
-* Mapping. This Mapping will have "nin" inputs (the number of
-* outputs may be different to "nin"). A NULL pointer will be
-* returned if the supplied WinMap has no subset of outputs which
-* depend only on the selected inputs.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated array of ints. The number of
-* elements in this array will equal the number of outputs for the
-* returned Mapping. Each element will hold the index of the
-* corresponding output in the supplied WinMap. The array should be
-* freed using astFree when no longer needed. A NULL pointer will
-* be returned if no output Mapping can be created.
-
-* Notes:
-* - If this function is invoked with the global error status set,
-* or if it should fail for any reason, then NULL values will be
-* returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
- AstWinMap *newwm; /* Pointer to returned WinMap */
- AstWinMap *this; /* Pointer to WinMap structure */
- double *a; /* Pointer to zero terms */
- double *b; /* Pointer to scale terms */
- int *result; /* Pointer to returned array */
- int i; /* Loop count */
- int iin; /* Mapping input index */
- int mnin; /* No. of Mapping inputs */
- int ok; /* Are input indices OK? */
-
-/* Initialise */
- result = NULL;
- *map = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the WinMap structure. */
- this = (AstWinMap *) this_map;
-
-/* Allocate memory for the returned array and create a WinMap with the
- required number of axes and undefined corners. */
- result = astMalloc( sizeof( int )*(size_t) nin );
- newwm = astWinMap( nin, NULL, NULL, NULL, NULL, "", status );
- *map = (AstMapping *) newwm;
-
-/* Now get pointers to the scale and zero terms of the supplied WinMap
- (these describe the forward transformation, taking into account the
- setting of the Invert flag). */
- (void) astWinTerms( this , &a, &b );
-
-/* Check pointers can be used safely. */
- if( astOK ) {
-
-/* Store the required scale and zero terms from the supplied WinMap
- in the new WinMap. At the same time check that each axis is valid. */
- mnin = astGetNin( this );
- ok = 1;
- for( i = 0; i < nin; i++ ) {
- iin = in[ i ];
- if( iin >= 0 && iin < mnin ) {
- (newwm->a)[ i ] = a[ iin ];
- (newwm->b)[ i ] = b[ iin ];
- result[ i ] = iin;
- } else {
- ok = 0;
- break;
- }
- }
-
-/* If the "in" array contained any invalid values, free the returned
- resources. */
- if( !ok ) {
- result = astFree( result );
- *map = astAnnul( *map );
- }
- }
-
-/* Free resources. */
- a = astFree( a );
- b = astFree( b );
-
-/* Free returned resources if an error has occurred. */
- if( !astOK ) {
- result = astFree( result );
- *map = astAnnul( *map );
- }
-
-/* Return the list of output indices. */
- return result;
-}
-
-static void PermGet( AstPermMap *map, int **outperm, int **inperm,
- double **consts, int *status ){
-/*
-* Name:
-* PermGet
-
-* Purpose:
-* Get the axis permutation and constants array for a PermMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "winmap.h"
-* void PermGet( AstPermMap *map, int **outperm, int **inperm,
-* double **const, int *status )
-
-* Class Membership:
-* WinMap member function
-
-* Description:
-* This function returns axis permutation and constants arrays which can
-* be used to create a PermMap which is equivalent to the supplied PermMap.
-
-* Parameters:
-* map
-* The PermMap.
-* outperm
-* An address at which to return a popinter to an array of ints
-* holding the output axis permutation array. The array should be
-* released using astFree when no longer needed.
-* inperm
-* An address at which to return a popinter to an array of ints
-* holding the input axis permutation array. The array should be
-* released using astFree when no longer needed.
-* consts
-* An address at which to return a popinter to an array of doubles
-* holding the constants array. The array should be released using
-* astFree when no longer needed.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - NULL pointers are returned if an error has already occurred, or if
-* this function should fail for any reason.
-*/
-
-/* Local Variables: */
- AstPointSet *pset1; /* PointSet holding input positions for PermMap */
- AstPointSet *pset2; /* PointSet holding output positions for PermMap */
- double **ptr1; /* Pointer to pset1 data */
- double **ptr2; /* Pointer to pset2 data */
- double *cnst; /* Pointer to constants array */
- double cn; /* Potential new constant value */
- double ip; /* Potential output axis index */
- double op; /* Potential input axis index */
- int *inprm; /* Pointer to input axis permutation array */
- int *outprm; /* Pointer to output axis permutation array */
- int i; /* Axis count */
- int nc; /* Number of constants stored so far */
- int nin; /* No. of input coordinates for the PermMap */
- int nout; /* No. of output coordinates for the PermMap */
-
-/* Initialise. */
- if( outperm ) *outperm = NULL;
- if( inperm ) *inperm = NULL;
- if( consts ) *consts = NULL;
-
-/* Check the global error status and the supplied pointers. */
- if ( !astOK || !outperm || !inperm || !consts ) return;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- nc = 0;
-
-/* Get the number of input and output axes for the supplied PermMap. */
- nin = astGetNin( map );
- nout = astGetNout( map );
-
-/* Allocate the memory for the returned arrays. */
- outprm = (int *) astMalloc( sizeof( int )* (size_t) nout );
- inprm = (int *) astMalloc( sizeof( int )* (size_t) nin );
- cnst = (double *) astMalloc( sizeof( double )* (size_t) ( nout + nin ) );
-
-/* Returned the pointers to these arrays.*/
- *outperm = outprm;
- *inperm = inprm;
- *consts = cnst;
-
-/* Create two PointSets, each holding two points, which can be used for
- input and output positions with the PermMap. */
- pset1 = astPointSet( 2, nin, "", status );
- pset2 = astPointSet( 2, nout, "", status );
-
-/* Set up the two input positions to be [0,1,2...] and [-1,-1,-1,...]. The
- first position is used to enumerate the axes, and the second is used to
- check for constant axis values. */
- ptr1 = astGetPoints( pset1 );
- if( astOK ){
- for( i = 0; i < nin; i++ ){
- ptr1[ i ][ 0 ] = ( double ) i;
- ptr1[ i ][ 1 ] = -1.0;
- }
- }
-
-/* Use the PermMap to transform these positions in the forward direction. */
- (void) astTransform( map, pset1, 1, pset2 );
-
-/* Look at the mapped positions to determine the output axis permutation
- array. */
- ptr2 = astGetPoints( pset2 );
- if( astOK ){
-
-/* No constant axis valeus found yet. */
- nc = 0;
-
-/* Do each output axis. */
- for( i = 0; i < nout; i++ ){
-
-/* If the output axis value is copied from an input axis value, the index
- of the appropriate input axis will be in the mapped first position. */
- op = ptr2[ i ][ 0 ];
-
-/* If the output axis value is assigned a constant value, the result of
- mapping the two different input axis values will be the same. */
- cn = ptr2[ i ][ 1 ];
- if( op == cn ) {
-
-/* We have found another constant. Store it in the constants array, and
- store the index of the constant in the output axis permutation array. */
- cnst[ nc ] = cn;
- outprm[ i ] = -( nc + 1 );
- nc++;
-
-/* If the output axis values are different, then the output axis value
- must be copied from the input axis value. */
- } else {
- outprm[ i ] = (int) ( op + 0.5 );
- }
- }
- }
-
-/* Now do the same thing to determine the input permutation array. */
- if( astOK ){
- for( i = 0; i < nout; i++ ){
- ptr2[ i ][ 0 ] = ( double ) i;
- ptr2[ i ][ 1 ] = -1.0;
- }
- }
-
- (void) astTransform( map, pset2, 0, pset1 );
-
- if( astOK ){
-
- for( i = 0; i < nin; i++ ){
-
- ip = ptr1[ i ][ 0 ];
- cn = ptr1[ i ][ 1 ];
- if( ip == cn ) {
-
- cnst[ nc ] = cn;
- inprm[ i ] = -( nc + 1 );
- nc++;
-
- } else {
- inprm[ i ] = (int) ( ip + 0.5 );
- }
- }
- }
-
-/* Annul the PointSets. */
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
-
-/* If an error has occurred, attempt to free the returned arrays. */
- if( !astOK ) {
- *outperm = (int *) astFree( (void *) *outperm );
- *inperm = (int *) astFree( (void *) *inperm );
- *consts = (double *) astFree( (void *) *consts );
- }
-
-/* Return. */
- return;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-* Name:
-* Rate
-
-* Purpose:
-* Calculate the rate of change of a Mapping output.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "winmap.h"
-* result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-* Class Membership:
-* WinMap member function (overrides the astRate method inherited
-* from the Mapping class ).
-
-* Description:
-* This function returns the rate of change of a specified output of
-* the supplied Mapping with respect to a specified input, at a
-* specified input position.
-
-* Parameters:
-* this
-* Pointer to the Mapping to be applied.
-* at
-* The address of an array holding the axis values at the position
-* at which the rate of change is to be evaluated. The number of
-* elements in this array should equal the number of inputs to the
-* Mapping.
-* ax1
-* The index of the Mapping output for which the rate of change is to
-* be found (output numbering starts at 0 for the first output).
-* ax2
-* The index of the Mapping input which is to be varied in order to
-* find the rate of change (input numbering starts at 0 for the first
-* input).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The rate of change of Mapping output "ax1" with respect to input
-* "ax2", evaluated at "at", or AST__BAD if the value cannot be
-* calculated.
-
-*/
-
-/* Local Variables: */
- AstWinMap *map;
- double result;
-
-/* Check inherited status */
- if( !astOK ) return AST__BAD;
-
-/* Get a pointer to the WinMap structure. */
- map = (AstWinMap *) this;
-
-/* If the input and output axes are not equal the result is zero. */
- if( ax1 != ax2 ) {
- result = 0.0;
-
-/* Otherwise, return the scale factor for the axis, taking the reciprocal
- if the WinMap has been inverted. */
- } else {
- result = ( map->b )[ ax1 ];
- if( astGetInvert( map ) ) {
- if( result != 0.0 && result != AST__BAD ) {
- result = 1.0/result;
- } else {
- result = AST__BAD;
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a WinMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "winmap.h"
-* void SetAttrib( AstObject *this, const char *setting )
-
-* Class Membership:
-* WinMap member function (over-rides the astSetAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function assigns an attribute value for a WinMap, the
-* attribute and its value being specified by means of a string of
-* the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in
-* lower case with no white space present. The value to the right
-* of the "=" should be a suitable textual representation of the
-* value to be assigned and this will be interpreted according to
-* the attribute's data type. White space surrounding the value is
-* only significant for string attributes.
-
-* Parameters:
-* this
-* Pointer to the WinMap.
-* setting
-* Pointer to a null-terminated string specifying the new attribute
-* value.
-*/
-
-/* Local Variables: */
- AstWinMap *this; /* Pointer to the WinMap structure */
- int len; /* Length of setting string */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the WinMap structure. */
- this = (AstWinMap *) this_object;
-
-/* Obtain the length of the setting string. */
- len = (int) strlen( setting );
-
-/* The WinMap class currently has no attributes, so pass it on to the parent
- method for further interpretation. */
- (*parent_setattrib)( this_object, setting, status );
-
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a WinMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "winmap.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* WinMap member function (over-rides the astTestAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a WinMap's attributes.
-
-* Parameters:
-* this
-* Pointer to the WinMap.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstWinMap *this; /* Pointer to the WinMap structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the WinMap structure. */
- this = (AstWinMap *) this_object;
-
-/* The WinMap class currently has no attributes, so pass it on to the parent
- method for further interpretation. */
- result = (*parent_testattrib)( this_object, attrib, status );
-
-/* Return the result, */
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a WinMap to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "winmap.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* WinMap member function (over-rides the astTransform protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function takes a WinMap and a set of points encapsulated in a
-* PointSet and transforms the points so as to map them into the
-* required window.
-
-* Parameters:
-* this
-* Pointer to the WinMap.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of coordinates for the WinMap being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstPointSet *result; /* Pointer to output PointSet */
- AstWinMap *map; /* Pointer to WinMap to be applied */
- const char *class; /* Object class */
- double **ptr_in; /* Pointer to input coordinate data */
- double **ptr_out; /* Pointer to output coordinate data */
- double *axin; /* Pointer to next input axis value */
- double *axout; /* Pointer to next output axis value */
- double *a; /* Pointer to next constant term */
- double *b; /* Pointer to next multiplicative term */
- double aa; /* Constant term */
- double bb; /* Multiplicative term */
- int coord; /* Loop counter for coordinates */
- int def; /* Is mapping defined? */
- int ncoord; /* Number of coordinates per point */
- int npoint; /* Number of points */
- int point; /* Loop counter for points */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- aa = 0.0;
- bb = 0.0;
-
-/* Obtain a pointer to the WinMap. */
- map = (AstWinMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Mapping class. This function validates
- all arguments and generates an output PointSet if necessary, but does not
- actually transform any coordinate values. */
- result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
- PointSet and obtain pointers for accessing the input and output coordinate
- values. */
- ncoord = astGetNcoord( in );
- npoint = astGetNpoint( in );
- ptr_in = astGetPoints( in );
- ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse mapping, according to the
- direction specified and whether the mapping has been inverted. */
- if ( astGetInvert( map ) ) forward = !forward;
-
-/* Report an error if the WinMap does not contain any scales or shifts. */
- if( !(map->a && map->b) && astOK ){
- class = astGetClass( this );
- astError( AST__BADWM, "astTransform(%s): The supplied %s does not "
- "contain any window information.", status, class, class );
- }
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
- if( astOK ){
-
-/* Store pointers to the shift and scale for the next axis. */
- a = map->a;
- b = map->b;
-
-/* Apply the mapping to each axis. */
- for( coord = 0; coord < ncoord; coord++ ){
-
-/* If either the scale or shift is bad indicate that the mapping is
- not defined on this axis. */
- if( *a == AST__BAD || *b == AST__BAD ){
- def = 0;
-
-/* Otherwise, get the scale and offset factors for this axis, taking account of
- whether the mapping is inverted or not. If the mapping is undefined, set
- the "def" flag to indicate this. */
- } else {
- aa = *a;
- bb = *b;
-
- if( forward ){
- def = 1;
-
- } else if( bb != 0.0 ){
- bb = 1.0/bb;
- aa = -aa*bb;
- def = 1;
-
- } else {
- def = 0;
- }
-
- }
-
-/* Store pointers to the first inpout and output values on this axis. */
- axin = ptr_in[ coord ];
- axout = ptr_out[ coord ];
-
-/* If the mapping is defined, apply it to the supplied points. */
- if( def ){
-
- for( point = 0; point < npoint; point++ ){
- if( *axin != AST__BAD ){
- *(axout++) = aa + bb*(*axin);
- } else {
- *(axout++) = AST__BAD;
- }
- axin++;
- }
-
-/* If the mapping is not defined, store bad values on this axis in the
- returned points. */
- } else {
- for( point = 0; point < npoint; point++ ) *(axout++) = AST__BAD;
- }
-
-/* Point to the scale and shift for the next axis. */
- a++;
- b++;
- }
-
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-static void WinMat( AstMapping **maps, int *inverts, int iwm, int *status ){
-/*
-* Name:
-* WinMat
-
-* Purpose:
-* Swap a WinMap and a MatrixMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "winmap.h"
-* void WinMat( AstMapping **maps, int *inverts, int iwm, int *status )
-
-* Class Membership:
-* WinMap member function
-
-* Description:
-* A list of two Mappings is supplied containing a WinMap and a
-* MatrixMap. These Mappings are annulled, and replaced with
-* another pair of Mappings consisting of a WinMap and a MatrixMap
-* in the opposite order. These Mappings are chosen so that their
-* combined effect is the same as the original pair of Mappings.
-* The scale factors in the returned WinMap are always unity (i.e.
-* the differences in scaling get absorbed into the returned
-* MatrixMap).
-
-* Parameters:
-* maps
-* A pointer to an array of two Mapping pointers.
-* inverts
-* A pointer to an array of two invert flags.
-* iwm
-* The index within "maps" of the WinMap.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstMatrixMap *m1; /* Pointer to Diagonal scale factor MatrixMap */
- AstMatrixMap *m2; /* Pointer to returned MatrixMap */
- AstMatrixMap *sm2; /* Pointer to simplified returned MatrixMap */
- AstMatrixMap *mm; /* Pointer to the supplied MatrixMap */
- AstPointSet *pset1; /* Shift terms from supplied WinMap */
- AstPointSet *pset2; /* Shift terms for returned WinMap */
- AstWinMap *w1; /* Pointer to the returned WinMap */
- AstWinMap *sw1; /* Pointer to the simplified returned WinMap */
- AstWinMap *wm; /* Pointer to the supplied WinMap */
- double **ptr1; /* Pointer to pset1 data */
- double **ptr2; /* Pointer to pset2 data */
- double *a; /* Array of shift terms from supplied WinMap */
- double *aa; /* Pointer to next shift term */
- double *b; /* Array of scale terms from supplied WinMap */
- double *bb; /* Pointer to next scale term */
- int i; /* Axis count */
- int nin; /* No. of axes in supplied WinMap */
- int nout; /* No. of axes in returned WinMap */
- int old_minv; /* Invert value for the supplied MatrixMap */
- int old_winv; /* Invert value for the supplied WinMap */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Store pointers to the supplied WinMap and the MatrixMap. */
- wm = (AstWinMap *) maps[ iwm ];
- mm = (AstMatrixMap *) maps[ 1 - iwm ];
-
-/* Temporarily set the Invert attribute of the supplied Mappings to the
- supplied values. */
- old_winv = astGetInvert( wm );
- astSetInvert( wm, inverts[ iwm ] );
-
- old_minv = astGetInvert( mm );
- astSetInvert( mm, inverts[ 1 - iwm ] );
-
-/* Get copies of the shift and scale terms used by the WinMap. This
- also returns the number of axes in the WinMap. */
- nin = astWinTerms( wm, &a, &b );
-
-/* Create a diagonal MatrixMap holding the scale factors from the
- supplied WinMap. */
- m1 = astMatrixMap( nin, nin, 1, b, "", status );
-
-/* Create a PointSet holding a single position given by the shift terms
- in the supplied WinMap. */
- pset1 = astPointSet( 1, nin, "", status );
- ptr1 = astGetPoints( pset1 );
- if( astOK ){
- aa = a;
- for( i = 0; i < nin; i++ ) ptr1[ i ][ 0 ] = *(aa++);
- }
-
-/* First deal with cases when the WinMap is applied first, followed by
- the MatrixMap. */
- if( iwm == 0 ){
-
-/* Multiply the diagonal matrix holding the WinMap scale factors by the
- supplied matrix. The resulting MatrixMap is the one to return in the
- map list. */
- m2 = astMtrMult( m1, mm );
-
-/* Transform the position given by the shift terms from the supplied
- WinMap using the supplied MatrixMap to get the shift terms for
- the returned WinMap. */
- pset2 = astTransform( mm, pset1, 1, NULL );
-
-/* Now deal with cases when the MatrixMap is applied first, followed by
- the WinMap. */
- } else {
-
-/* Multiply the supplied MatrixMap by the diagonal matrix holding scale
- factors from the supplied WinMap. The resulting MatrixMap is the one to
- return in the map list. */
- m2 = astMtrMult( mm, m1 );
-
-/* Transform the position given by the shift terms from the supplied
- WinMap using the inverse of the returned MatrixMap to get the shift
- terms for the returned WinMap. */
- pset2 = astTransform( m2, pset1, 0, NULL );
-
- }
-
-/* Re-instate the original value of the Invert attributes of the supplied
- Mappings. */
- astSetInvert( wm, old_winv );
- astSetInvert( mm, old_minv );
-
-/* Get pointers to the shift terms for the returned WinMap. */
- ptr2 = astGetPoints( pset2 );
-
-/* Create the returned WinMap, initially with undefined corners. The number of
- axes in the WinMap must equal the number of shift terms. */
- nout = astGetNcoord( pset2 );
- w1 = astWinMap( nout, NULL, NULL, NULL, NULL, "", status );
-
-/* If succesful, store the scale and shift terms in the WinMap. The scale
- terms are always unity. */
- if( astOK ){
- bb = w1->b;
- aa = w1->a;
- for( i = 0; i < nout; i++ ) {
- *(bb++) = 1.0;
- *(aa++) = ptr2[ i ][ 0 ];
- }
-
-/* Replace the supplied Mappings and invert flags with the ones found
- above. Remember that the order of the Mappings is now swapped */
- (void) astAnnul( maps[ 0 ] );
- (void) astAnnul( maps[ 1 ] );
-
- sw1 = astSimplify( w1 );
- w1 = astAnnul( w1 );
-
- maps[ 1 - iwm ] = (AstMapping *) sw1;
- inverts[ 1 - iwm ] = astGetInvert( sw1 );
-
- sm2 = astSimplify( m2 );
- m2 = astAnnul( m2 );
-
- maps[ iwm ] = (AstMapping *) sm2;
- inverts[ iwm ] = astGetInvert( sm2 );
-
- }
-
-/* Annul the MatrixMap and PointSet holding the scale and shift terms from the
- supplied WinMap. */
- m1 = astAnnul( m1 );
- pset1 = astAnnul( pset1 );
- pset2 = astAnnul( pset2 );
-
-/* Free the copies of the scale and shift terms from the supplied WinMap. */
- b = (double *) astFree( (void *) b );
- a = (double *) astFree( (void *) a );
-
-/* Return. */
- return;
-}
-
-static void WinWcs( AstMapping **maps, int *inverts, int iwm, int *status ){
-/*
-* Name:
-* WinWcs
-
-* Purpose:
-* Swap a WinMap and a WcsMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "winmap.h"
-* void WinWcs( AstMapping **maps, int *inverts, int iwm, int *status )
-
-* Class Membership:
-* WinMap member function
-
-* Description:
-* A list of two Mappings is supplied containing a WinMap and a
-* WcsMap. These Mappings are swapped.
-
-* Parameters:
-* maps
-* A pointer to an array of two Mapping pointers.
-* inverts
-* A pointer to an array of two invert flags.
-* iwm
-* The index within "maps" of the WinMap.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstMapping *m1; /* Pointer to a Mapping */
- int inv; /* Invert value */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Simply swap the values (the CanSwap function will have checked that
- the WcsMap and WinMap can simply be swapped). */
- m1 = maps[ 0 ];
- maps[ 0 ] = maps[ 1 ];
- maps[ 1 ] = m1;
-
- inv = inverts[ 0 ];
- inverts[ 0 ] = inverts[ 1 ];
- inverts[ 1 ] = inv;
-
-/* Return. */
- return;
-}
-
-static void WinPerm( AstMapping **maps, int *inverts, int iwm, int *status ){
-/*
-* Name:
-* WinPerm
-
-* Purpose:
-* Swap a WinMap and a PermMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "winmap.h"
-* void WinPerm( AstMapping **maps, int *inverts, int iwm, int *status )
-
-* Class Membership:
-* WinMap member function
-
-* Description:
-* A list of two Mappings is supplied containing a WinMap and a
-* PermMap. These Mappings are annulled, and replaced with
-* another pair of Mappings consisting of a WinMap and a PermMap
-* in the opposite order. These Mappings are chosen so that their
-* combined effect is the same as the original pair of Mappings.
-
-* Parameters:
-* maps
-* A pointer to an array of two Mapping pointers.
-* inverts
-* A pointer to an array of two invert flags.
-* iwm
-* The index within "maps" of the WinMap.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - All links between input and output axes in the PermMap must
-* be bi-directional, but there can be unconnected axes, and there
-* need not be the same number of input and output axes.
-
-*/
-
-/* Local Variables: */
- AstPermMap *pm; /* Pointer to the supplied PermMap */
- AstPermMap *p1; /* Pointer to the returned PermMap */
- AstPermMap *sp1; /* Pointer to the simplified returned PermMap */
- AstWinMap *w1; /* Pointer to the returned WinMap */
- AstWinMap *sw1; /* Pointer to the simplified returned PermMap */
- AstWinMap *wm; /* Pointer to the supplied WinMap */
- double *a; /* Array of shift terms from supplied WinMap */
- double *aa; /* Pointer to next shift term */
- double *b; /* Array of scale terms from supplied WinMap */
- double *bb; /* Pointer to next scale term */
- double *consts; /* Pointer to constants array */
- double c; /* A constant value */
- int *inperm; /* Pointer to input axis permutation array */
- int *outperm; /* Pointer to output axis permutation array */
- int i; /* Axis count */
- int j; /* Axis index */
- int nin; /* No. of axes in supplied WinMap */
- int npin; /* No. of input axes in supplied PermMap */
- int npout; /* No. of output axes in supplied PermMap */
- int old_pinv; /* Invert value for the supplied PermMap */
- int old_winv; /* Invert value for the supplied WinMap */
-
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Initialise variables to avoid "used of uninitialised variable"
- messages from dumb compilers. */
- p1 = NULL;
- w1 = NULL;
-
-/* Store pointers to the supplied WinMap and the PermMap. */
- wm = (AstWinMap *) maps[ iwm ];
- pm = (AstPermMap *) maps[ 1 - iwm ];
-
-/* Temporarily set the Invert attribute of the supplied Mappings to the
- supplied values. */
- old_winv = astGetInvert( wm );
- astSetInvert( wm, inverts[ iwm ] );
-
- old_pinv = astGetInvert( pm );
- astSetInvert( pm, inverts[ 1 - iwm ] );
-
-/* Get copies of the shift and scale terms used by the WinMap. This
- also returns the number of axes in the WinMap. */
- nin = astWinTerms( wm, &a, &b );
-
-/* Get the axis permutation and constants arrays representing the
- PermMap. Note, no constants are used more than once in the returned
- arrays (i.e. duplicate constants are returned in "consts" if more than
- one axis uses a given constant). */
- PermGet( pm, &outperm, &inperm, &consts, status );
-
- if( astOK ) {
-
-/* Get the number of input and output axes in the PermMap. */
- npin = astGetNin( pm );
- npout = astGetNout( pm );
-
-/* First consider cases where the WinMap is applied first, followed by the
- PermMap. */
- if( iwm == 0 ) {
-
-/* Create the new WinMap, initially with undefined corners. Its number
- of axes will equal the number of output axes of the PermMap. */
- w1 = astWinMap( npout, NULL, NULL, NULL, NULL, "", status );
-
-/* Get pointers to the scale and shift terms for the new WinMap. */
- bb = w1->b;
- aa = w1->a;
-
-/* Thinking of the forward CmpMap first, consider each of the output axes of
- the PermMap. */
- for( i = 0; i < npout; i++ ){
-
-/* If the value for this output axis is derived from an input axis, copy the
- scale and shift terms from the corresponding input axis to the new
- WinMap. */
- j = outperm[ i ];
- if( j >= 0 && j < nin ) {
- aa[ i ] = a[ j ];
- bb[ i ] = b[ j ];
-
-/* If this output axis is assigned a constant value, use zero and one for
- the shift and scale in order to preserve the constant value produced
- by the PermMap. */
- } else {
- aa[ i ] = 0.0;
- bb[ i ] = 1.0;
- }
-
- }
-
-/* Now consider the inverse CmpMap. Any constants produced by the inverse
- PermMap would previously have been scaled by the inverse WinMap. Since
- there will be no inverse WinMap to perform this scaling in the returned
- Mappings, we need to change the constant values to be the values after
- the scaling which would have been applied by the WinMap. Consider each
- of the input axes of the PermMap.*/
- for( i = 0; i < npin; i++ ){
-
-/* Skip axes which are not assigned a constant value. */
- if( inperm[ i ] < 0 ) {
-
-/* Scale the constant term associated with this input axis using the
- inverse WinMap unless it is AST__BAD. */
- c = consts[ -inperm[ i ] - 1 ];
- if( c != AST__BAD ) {
-
- if( a[ i ] != AST__BAD && b[ i ] != AST__BAD &&
- b[ i ] != 0.0 ) {
- consts[ -inperm[ i ] - 1 ] = ( c - a[ i ] )/b[ i ];
- } else {
- consts[ -inperm[ i ] - 1 ] = AST__BAD;
- }
-
- }
-
- }
-
- }
-
-/* Now consider cases where the PermMap is applied first, followed by the
- WinMap. */
- } else {
-
-/* Create the new WinMap, initially with undefined corners. Its number
- of axes will equal the number of input axes of the PermMap. */
- w1 = astWinMap( npin, NULL, NULL, NULL, NULL, "", status );
-
-/* Get pointers to the scale and shift terms for the new WinMap. */
- bb = w1->b;
- aa = w1->a;
-
-/* Thinking first about the inverse WinMap, consider each of the input axes
- of the PermMap. */
- for( i = 0; i < npin; i++ ){
-
-/* If the value for this input axis is derived from an output axis, copy the
- scale and shift terms from the corresponding output axis to the new
- WinMap. */
- j = inperm[ i ];
- if( j >= 0 && j < nin ) {
- aa[ i ] = a[ j ];
- bb[ i ] = b[ j ];
-
-/* If this input axis is assigned a constant value, use zero and one for
- the shift and scale in order to preserve the constant value produced
- by the PermMap. */
- } else {
- aa[ i ] = 0.0;
- bb[ i ] = 1.0;
- }
-
- }
-
-/* Now consider the forward WinMap. Any constants produced by the forward
- PermMap would previously have been scaled by the forward WinMap. Since
- there will be no forward WinMap to perform this scaling in the returned
- Mappings, we need to change the constant values to be the values after
- the scaling which would have been applied by the WinMap. Consider each
- of the output axes of the PermMap.*/
- for( i = 0; i < npout; i++ ){
-
-/* Skip axes which are not assigned a constant value. */
- if( outperm[ i ] < 0 ) {
-
-/* Scale the constant term associated with this input axis using the
- forward WinMap unless it is AST__BAD. */
- c = consts[ -outperm[ i ] - 1 ];
- if( c != AST__BAD ) {
-
- if( a[ i ] != AST__BAD && b[ i ] != AST__BAD ) {
- consts[ -outperm[ i ] - 1 ] = a[ i ] + c*b[ i ];
- } else {
- consts[ -outperm[ i ] - 1 ] = AST__BAD;
- }
-
- }
-
- }
-
- }
-
- }
-
-/* Create a new PermMap (since the constants may have changed). */
- p1 = astPermMap( npin, inperm, npout, outperm, consts, "", status );
-
-/* Free the axis permutation and constants arrays. */
- outperm = (int *) astFree( (void *) outperm );
- inperm = (int *) astFree( (void *) inperm );
- consts = (double *) astFree( (void *) consts );
- }
-
-/* Re-instate the original value of the Invert attributes of the supplied
- Mappings. */
- astSetInvert( wm, old_winv );
- astSetInvert( pm, old_pinv );
-
-/* Replace the supplied Mappings with the ones created above, swapping the
- order. */
- if( astOK ){
- (void) astAnnul( wm );
- (void) astAnnul( pm );
-
- sp1 = astSimplify( p1 );
- p1 = astAnnul( p1 );
-
- sw1 = astSimplify( w1 );
- w1 = astAnnul( w1 );
-
- maps[ iwm ] = (AstMapping *) sp1;
- inverts[ iwm ] = 0;
-
- maps[ 1 - iwm ] = (AstMapping *) sw1;
- inverts[ 1 - iwm ] = astGetInvert( sw1 );
- }
-
-/* Free the copies of the scale and shift terms from the supplied WinMap. */
- b = (double *) astFree( (void *) b );
- a = (double *) astFree( (void *) a );
-
-/* Return. */
- return;
-}
-
-static int WinTerms( AstWinMap *this, double **shift, double **scale, int *status ){
-/*
-*+
-* Name:
-* astWinTerms
-
-* Purpose:
-* Obtain the scale and shift terms used by a WinMap.
-
-* Type:
-* Protected virtual function.
-
-* Synopsis:
-* #include "winmap.h"
-* int astWinTerms( AstWinMap *this, double **shift, double **scale )
-
-* Class Membership:
-* WinMap mewthod.
-
-* Description:
-* This function returns copies of the scale and shift terms used by a
-* WinMap when transforming points. Each axis of the WinMap has a scale
-* term B, and a shift term A, and the transformation of a point is done
-* by applying these to each input axis value X in turn, to get the
-* output axis value B.X + A. The returned terms take into account the
-* current setting of the Invert attribute of the WinMap.
-
-* Parameters:
-* this
-* Pointer to the WinMap.
-* shift
-* The address of a location at which to return a pointer to the
-* start of a dynamically allocated array holding the shift terms
-* for each axis.
-* scale
-* The address of a location at which to return a pointer to the
-* start of a dynamically allocated array holding the scale terms
-* for each axis.
-
-* Returned Value:
-* The number of axes in the WinMap. This is the same as the number of
-* elements in the returned arrays.
-
-* Notes:
-* - The returned arrays should be released using astFree when no
-* longer needed.
-* - NULL pointers can be supplied for "scale" or "shift" if the
-* corresponding arrays are not required.
-* - A value of zero will be returned, together with NULL pointers
-* for "scale" and "shift" if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- double *a; /* Pointer to a copy of the shift term array */
- double *aa; /* Pointer to the next shift term */
- double *b; /* Pointer to a copy of the scale term array */
- double *bb; /* Pointer to the next scale term */
- int i; /* Axis count */
- int result; /* The returned number of axes */
- size_t absize; /* Size of shift and scale arrays */
-
-/* Initialise. */
- result = 0;
- if( scale ) *scale = NULL;
- if( shift ) *shift = NULL;
-
-/* Check the global status. */
- if ( !astOK ) return result;
-
-/* Get the number of axes in the WinMap. */
- result = astGetNin( this );
-
-/* Create copies of the scale and shift terms from the WinMap. */
- absize = sizeof( double )*(size_t) result;
- b = (double *) astStore( NULL, (void *) this->b, absize );
- a = (double *) astStore( NULL, (void *) this->a, absize );
-
-/* Check the pointers can be used. */
- if( astOK ){
-
-/* If the WinMap is inverted, replace the scale and shift terms
- by the corresponding values for the inverted mapping. */
- if( astGetInvert( this ) ){
- bb = b;
- aa = a;
-
- for( i = 0; i < result; i++ ){
- if( *aa != AST__BAD && *bb != 0.0 && *bb != AST__BAD ){
- *bb = 1.0/(*bb);
- *aa *= -(*bb);
- } else {
- *bb = AST__BAD;
- *aa = AST__BAD;
- }
-
- aa++;
- bb++;
-
- }
- }
-
-/* Store the required pointers, and free arrays which are not required. */
- if( scale ){
- *scale = b;
- } else {
- b = (double *) astFree( (void *) b );
- }
-
- if( shift ){
- *shift = a;
- } else {
- a = (double *) astFree( (void *) a );
- }
-
- }
-
-/* If an error has occurred, free the arrays and return zero. */
- if( !astOK ){
- if( scale ) *scale = (double *) astFree( (void *) *scale );
- if( shift ) *shift = (double *) astFree( (void *) *shift );
- result = 0;
- }
-
-/* Return the answer. */
- return result;
-
-}
-
-static AstWinMap *WinUnit( AstWinMap *wm, AstUnitMap *um, int winv,
- int win1, int *status ){
-/*
-* Name:
-* WinUnit
-
-* Purpose:
-* Create a WinMap by merging a WinMap and a UnitMap in parallel.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "winmap.h"
-* AstWinMap *WinUnit( AstWinMap *wm, AstUnitMap *um, int winv, int win1, int *status )
-
-* Class Membership:
-* WinMap member function
-
-* Description:
-* This function creates a new WinMap which performs a mapping
-* equivalent to applying the two supplied Mappings in parallel in
-* the directions specified by the "invert" flag (the Invert
-* attribute of the supplied WinMap is ignored).
-
-* Parameters:
-* wm
-* A pointer to the WinMap.
-* um
-* A pointer to the UnitMap.
-* winv
-* The invert flag to use with wm. A value of zero causes the forward
-* mapping to be used, and a non-zero value causes the inverse
-* mapping to be used.
-* win1
-* Indicates the order in which the Mappings should be applied.
-*
-* If win1 is non-zero:
-* "wm" applies to the lower axis indices and "um" to the upper
-* axis indices.
-*
-* If win1 is zero:
-* "um" applies to the lower axis indices and "wm" to the upper
-* axis indices.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the new WinMap.
-
-* Notes:
-* - The forward direction of the returned WinMap is equivalent to the
-* combined effect of the two supplied Mappings, operating in the
-* directions specified by "winv".
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstWinMap *result; /* Pointer to output WinMap */
- double *a; /* Pointer to shift term array */
- double *aa; /* Pointer to next shift term */
- double *ar; /* Pointer to next shift term in result */
- double *b; /* Pointer to scale term array */
- double *bb; /* Pointer to next scale term */
- double *br; /* Pointer to next scale term in result */
- int i; /* Axis index */
- int ninw; /* No. of axes in the WinMap */
- int ninu; /* No. of axes in the UnitMap */
- int old_winv; /* Original setting of WinMap Invert attribute */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the returned pointer. */
- result = NULL;
-
-/* Temporarily set the Invert attribute of the WinMap to the supplied
- value. */
- old_winv = astGetInvert( wm );
- astSetInvert( wm, winv );
-
-/* Create copies of the scale and shift terms from the WinMap, and store the
- number of axes in it. */
- ninw = astWinTerms( wm, &a, &b );
-
-/* Get the number of axes in the UnitMap. */
- ninu = astGetNin( um );
-
-/* Create the merged WinMap with unspecified corners. */
- result = astWinMap( ninw + ninu, NULL, NULL, NULL, NULL, "", status );
-
-/* Check the pointers can be used. */
- if( astOK ){
-
-/* If the WinMap applies to the lower axis indices... */
- if( win1 ){
-
-/* Use the scale and shift terms from the WinMap for the lower axes of
- the new WinMap. */
- aa = a;
- bb = b;
- ar = result->a;
- br = result->b;
-
- for( i = 0; i < ninw; i++ ){
- *(ar++) = *(aa++);
- *(br++) = *(bb++);
- }
-
-/* Use the scale factor to 1.0 and the shift term to zero for the upper axes
- of the new WinMap. */
- for( i = 0; i < ninu; i++ ){
- *(ar++) = 0.0;
- *(br++) = 1.0;
- }
-
-/* If the WinMap applies to the upper axis indices... */
- } else {
-
-/* Use the scale factor to 1.0 and the shift term to zero for the lower axes
- of the new WinMap. */
- ar = result->a;
- br = result->b;
-
- for( i = 0; i < ninu; i++ ){
- *(ar++) = 0.0;
- *(br++) = 1.0;
- }
-
-/* Use the scale and shift terms from the WinMap for the upper axes of
- the new WinMap. */
- aa = a;
- bb = b;
-
- for( i = 0; i < ninw; i++ ){
- *(ar++) = *(aa++);
- *(br++) = *(bb++);
- }
- }
- }
-
-/* Free the copies of the scale and shift terms from the supplied WinMap. */
- b = (double *) astFree( (void *) b );
- a = (double *) astFree( (void *) a );
-
-/* Re-instate the original setting of the Invert attribute for the
- supplied WinMap. */
- astSetInvert( wm, old_winv );
-
-/* If an error has occurred, annull the returned WinMap. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output WinMap. */
- return result;
-}
-
-static AstWinMap *WinWin( AstMapping *map1, AstMapping *map2, int inv1,
- int inv2, int series, int *status ){
-/*
-* Name:
-* WinWin
-
-* Purpose:
-* Create a merged WinMap from two supplied WinMaps.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "winmap.h"
-* AstWinMap *WinWin( AstMapping *map1, AstMapping *map2, int inv1,
-* int inv2, int series, int *status )
-
-* Class Membership:
-* WinMap member function
-
-* Description:
-* This function creates a new WinMap which performs a mapping
-* equivalent to applying the two supplied WinMaps either in series
-* or parallel in the directions specified by the "invert" flags
-* (the Invert attributes of the supplied WinMaps are ignored).
-
-* Parameters:
-* map1
-* A pointer to the WinMap to apply first (if in series), or to the
-* lower axis indices (if in parallel)
-* map2
-* A pointer to the WinMap to apply second (if in series), or to the
-* upper axis indices (if in parallel)
-* inv1
-* The invert flag to use with map1. A value of zero causes the forward
-* mapping to be used, and a non-zero value causes the inverse
-* mapping to be used.
-* inv2
-* The invert flag to use with map2.
-* series
-* If non-zero, then the supplied WinMaps are combined in series.
-* Otherwise, they are combined in parallel.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the new WinMap.
-
-* Notes:
-* - The forward direction of the returned WinMap is equivalent to the
-* combined effect of the two supplied WinMap, operating in the
-* directions specified by "inv1" and "inv2".
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstWinMap *result; /* Pointer to output WinMap */
- AstWinMap *wm1; /* Pointer to the first supplied WinMap */
- AstWinMap *wm2; /* Pointer to the second supplied WinMap */
- double *a[ 2 ]; /* Pointers to shift term arrays */
- double *a0; /* Pointer to next shift term from WinMap 1 */
- double *a1; /* Pointer to next shift term from WinMap 2 */
- double *ar; /* Pointer to next shift term in result */
- double *b[ 2 ]; /* Pointers to scale term arrays */
- double *b0; /* Pointer to next scale term from WinMap 1 */
- double *b1; /* Pointer to next scale term from WinMap 2 */
- double *br; /* Pointer to next scale term in result */
- int i; /* Axis index */
- int invert[ 2 ]; /* Array of invert flags */
- int nin[ 2 ]; /* No. of axes in the two WinMaps */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the returned pointer. */
- result = NULL;
-
-/* Store pointers to the WinMaps. */
- wm1 = (AstWinMap *) map1;
- wm2 = (AstWinMap *) map2;
-
-/* Temporarily set their Invert attributes to the supplied values. */
- invert[ 0 ] = astGetInvert( wm1 );
- astSetInvert( wm1, inv1 );
-
- invert[ 1 ] = astGetInvert( wm2 );
- astSetInvert( wm2, inv2 );
-
-/* Create copies of the scale and shift terms from the two WinMaps,
- and store the number of axes in each WinMap. The scale and shift terms
- returned take into account the setting of the Invert attribute. */
- nin[ 0 ] = astWinTerms( wm1, a, b );
- nin[ 1 ] = astWinTerms( wm2, a + 1, b + 1 );
-
-/* Check the pointers can be used. */
- if( astOK ){
-
-/* Series */
-/* ====== */
- if( series ){
-
-/* Merge the scale and shift terms for the two WinMaps, overwriting the
- terms for the first WinMap. To be merged in series, both WinMaps must
- have the same number of axes, so it matters not whether we use nin[ 0 ]
- or nin[ 1 ] to specify the number of axes. */
- a0 = a[ 0 ];
- b0 = b[ 0 ];
- a1 = a[ 1 ];
- b1 = b[ 1 ];
- for( i = 0; i < nin[ 0 ]; i++ ){
-
- if( *a0 != AST__BAD && *b0 != AST__BAD &&
- *a1 != AST__BAD && *b1 != AST__BAD ){
-
- *a0 *= (*b1);
- *a0 += (*a1);
- *b0 *= (*b1);
-
- } else {
- *a0 = AST__BAD;
- *b0 = AST__BAD;
- *a1 = AST__BAD;
- *b1 = AST__BAD;
- }
-
- /* Move on to the next axis. */
- a0++;
- b0++;
- a1++;
- b1++;
- }
-
-/* Create the merged WinMap with unspecified corners. */
- result = astWinMap( nin[ 0 ], NULL, NULL, NULL, NULL, "", status );
-
-/* Store the merged scale and shift terms in the new WinMap. The forward
- transformation of this WinMap then corresponds to the combination of the
- two supplied WinMaps, taking into account their invert flags. */
- a0 = a[ 0 ];
- b0 = b[ 0 ];
- ar = result->a;
- br = result->b;
- for( i = 0; i < nin[ 0 ]; i++ ){
- *(ar++) = *(a0++);
- *(br++) = *(b0++);
- }
-
-/* Parallel */
-/* ======== */
- } else {
-
-/* Create the merged WinMap with unspecified corners. */
- result = astWinMap( nin[ 0 ] + nin[ 1 ], NULL, NULL, NULL, NULL, "", status );
-
-/* Copy the scale and shift terms into the new WinMap. */
- a0 = a[ 0 ];
- b0 = b[ 0 ];
- a1 = a[ 1 ];
- b1 = b[ 1 ];
- ar = result->a;
- br = result->b;
-
- for( i = 0; i < nin[ 0 ]; i++ ){
- *(ar++) = *(a0++);
- *(br++) = *(b0++);
- }
-
- for( i = 0; i < nin[ 1 ]; i++ ){
- *(ar++) = *(a1++);
- *(br++) = *(b1++);
- }
- }
- }
-
-/* Re-instate the original settings of the Invert attributes for the
- supplied WinMaps. */
- astSetInvert( wm1, invert[ 0 ] );
- astSetInvert( wm2, invert[ 1 ] );
-
-/* Free the memory. */
- a[ 0 ] = (double *) astFree( (void *) a[ 0 ] );
- b[ 0 ] = (double *) astFree( (void *) b[ 0 ] );
- a[ 1 ] = (double *) astFree( (void *) a[ 1 ] );
- b[ 1 ] = (double *) astFree( (void *) b[ 1 ] );
-
-/* If an error has occurred, annull the returned WinMap. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output WinMap. */
- return result;
-}
-
-static AstWinMap *WinZoom( AstWinMap *wm, AstZoomMap *zm, int winv,
- int zinv, int win1, int series, int *status ){
-/*
-* Name:
-* WinZoom
-
-* Purpose:
-* Create a WinMap by merging a WinMap and a ZoomMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "winmap.h"
-* AstWinMap *WinZoom( AstWinMap *wm, AstZoomMap *zm, int winv,
-* int zinv, int win1, int series, int *status )
-
-* Class Membership:
-* WinMap member function
-
-* Description:
-* This function creates a new WinMap which performs a mapping
-* equivalent to applying the two supplied Mappings in series or
-* parallel in the directions specified by the "invert" flags (the
-* Invert attributes of the supplied WinMaps are ignored).
-
-* Parameters:
-* wm
-* A pointer to the WinMap.
-* zm
-* A pointer to the ZoomMap.
-* winv
-* The invert flag to use with wm. A value of zero causes the forward
-* mapping to be used, and a non-zero value causes the inverse
-* mapping to be used.
-* zinv
-* The invert flag to use with zm.
-* win1
-* Indicates the order in which the Mappings should be applied.
-*
-* If win1 is non-zero:
-* If in series:
-* "wm" is applied first followed by "zm".
-* If in parallel:
-* "wm" applies to the lower axis indices and "zm" to the upper
-* axis indices.
-*
-* If win1 is zero:
-* If in series:
-* "zm" is applied first followed by "wm".
-* If in parallel:
-* "zm" applies to the lower axis indices and "wm" to the upper
-* axis indices.
-* series
-* Should be supplied non-zero if the Mappings are to be combined in
-* series.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the new WinMap.
-
-* Notes:
-* - The forward direction of the returned WinMap is equivalent to the
-* combined effect of the two supplied Mappings, operating in the
-* directions specified by "zinv" and "winv".
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstWinMap *result; /* Pointer to output WinMap */
- double *a; /* Pointer to shift term array */
- double *aa; /* Pointer to next shift term */
- double *ar; /* Pointer to next shift term in result */
- double *b; /* Pointer to scale term array */
- double *bb; /* Pointer to next scale term */
- double *br; /* Pointer to next scale term in result */
- double zfac; /* Zoom factor */
- int i; /* Axis index */
- int ninw; /* No. of axes in the WinMap */
- int ninz; /* No. of axes in the ZoomMap */
- int old_winv; /* Original setting of WinMap Invert attribute */
- int old_zinv; /* Original setting of ZoomMap Invert attribute */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the returned pointer. */
- result = NULL;
-
-/* Temporarily set the Invert attributes of both Mappings to the supplied
- values. */
- old_winv = astGetInvert( wm );
- astSetInvert( wm, winv );
-
- old_zinv = astGetInvert( zm );
- astSetInvert( zm, zinv );
-
-/* Get the zoom factor implemented by the ZoomMap. Invert it if necessary
- since astGetZoom does not take account of the Invert setting. */
- zfac = astGetZoom( zm );
- if( zinv ) zfac = 1.0 / zfac;
-
-/* Create copies of the scale and shift terms from the WinMap, and store the
- number of axes in it. */
- ninw = astWinTerms( wm, &a, &b );
-
-/* Check the pointers can be used. */
- if( astOK ){
-
-/* First do series mode... */
- if( series ) {
-
-/* Modify the WinMap scale and shift terms by the zoom factor. How this is
- done depends on which way round the Mappings are applied. */
- bb = b;
- aa = a;
-
- for( i = 0; i < ninw; i++ ){
-
- if( *aa != AST__BAD && *bb != AST__BAD && zfac != AST__BAD ){
- *bb *= zfac;
- if( win1 ) *aa *= zfac;
- } else {
- *bb = AST__BAD;
- *aa = AST__BAD;
- }
-
- aa++;
- bb++;
- }
-
-/* Create the merged WinMap with unspecified corners. */
- result = astWinMap( ninw, NULL, NULL, NULL, NULL, "", status );
-
-/* Store the merged scale and shift terms in the new WinMap. The forward
- transformation of this WinMap then corresponds to the combination of the
- two supplied Mappings, taking into account their invert flags. */
- aa = a;
- bb = b;
- ar = result->a;
- br = result->b;
- for( i = 0; i < ninw; i++ ){
- *(ar++) = *(aa++);
- *(br++) = *(bb++);
- }
-
-/* Now do parallel mode... */
- } else {
-
-/* Get the number of axes in the ZoomMap. */
- ninz = astGetNin( zm );
-
-/* Create the merged WinMap with unspecified corners. */
- result = astWinMap( ninw + ninz, NULL, NULL, NULL, NULL, "", status );
-
-/* If the WinMap applies to the lower axis indices... */
- if( win1 ) {
-
-/* Use the scale and shift terms from the WinMap for the lower axes of
- the new WinMap. */
- aa = a;
- bb = b;
- ar = result->a;
- br = result->b;
-
- for( i = 0; i < ninw; i++ ){
- *(ar++) = *(aa++);
- *(br++) = *(bb++);
- }
-
-/* Use the scale factor (with zero shift) from the ZoomMap for the upper axes
- of the new WinMap. */
- for( i = 0; i < ninz; i++ ){
- *(ar++) = 0.0;
- *(br++) = zfac;
- }
-
-/* If the WinMap applies to the upper axis indices... */
- } else {
-
-/* Use the scale factor (with zero shift) from the ZoomMap for the lower axes
- of the new WinMap. */
- ar = result->a;
- br = result->b;
-
- for( i = 0; i < ninz; i++ ){
- *(ar++) = 0.0;
- *(br++) = zfac;
- }
-
-/* Use the scale and shift terms from the WinMap for the upper axes of
- the new WinMap. */
- aa = a;
- bb = b;
-
- for( i = 0; i < ninw; i++ ){
- *(ar++) = *(aa++);
- *(br++) = *(bb++);
- }
- }
- }
- }
-
-/* Free the copies of the scale and shift terms from the supplied WinMap. */
- b = (double *) astFree( (void *) b );
- a = (double *) astFree( (void *) a );
-
-/* Re-instate the original settings of the Invert attribute for the
- supplied Mappings. */
- astSetInvert( wm, old_winv );
- astSetInvert( zm, old_zinv );
-
-/* If an error has occurred, annull the returned WinMap. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output WinMap. */
- return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for WinMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for WinMap objects.
-
-* Parameters:
-* objin
-* Pointer to the WinMap to be copied.
-* objout
-* Pointer to the WinMap being constructed.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- AstWinMap *out; /* Pointer to output WinMap */
- AstWinMap *in; /* Pointer to input WinMap */
- int ncoord; /* No. of axes for the mapping */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the input and output WinMaps. */
- in= (AstWinMap *) objin;
- out = (AstWinMap *) objout;
-
-/* Get the number of coordinates mapped by the WinMap. */
- ncoord = astGetNin( in );
-
-/* Allocate memory holding copies of the scales and shifts window defining the
- mapping. */
- out->a = (double *) astStore( NULL, (void *) in->a,
- sizeof(double)*(size_t)ncoord );
- out->b = (double *) astStore( NULL, (void *) in->b,
- sizeof(double)*(size_t)ncoord );
-
-/* If an error occurred, free any allocated memory. */
- if ( !astOK ) {
- out->a = (double *) astFree( (void *) out->a );
- out->b = (double *) astFree( (void *) out->b );
- }
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for WinMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for WinMap objects.
-
-* Parameters:
-* obj
-* Pointer to the WinMap to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This destructor does nothing and exists only to maintain a
-* one-to-one correspondence between destructors and copy
-* constructors.
-*/
-
-/* Local Variables: */
- AstWinMap *this; /* Pointer to WinMap */
-
-/* Obtain a pointer to the WinMap structure. */
- this = (AstWinMap *) obj;
-
-/* Free the memory holding the scales and shifts. */
- this->a = (double *) astFree( (void *) this->a );
- this->b = (double *) astFree( (void *) this->b );
-
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for WinMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the WinMap class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the WinMap whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define COMMENT_LEN 50 /* Maximum length of a comment string */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstWinMap *this; /* Pointer to the WinMap structure */
- char buff[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- char comment[ COMMENT_LEN + 1 ]; /* Buffer for comment string */
- int axis; /* Axis index */
- int ncoord; /* No. of axes for mapping */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the WinMap structure. */
- this = (AstWinMap *) this_object;
-
-/* Get the number of coordinates to be mapped. */
- ncoord = astGetNin( this );
-
-/* Write out values representing the instance variables for the
- WinMap class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* The scales and shifts. */
- for( axis = 0; axis < ncoord; axis++ ){
- (void) sprintf( buff, "Sft%d", axis + 1 );
- (void) sprintf( comment, "Shift for axis %d", axis + 1 );
- astWriteDouble( channel, buff, (this->a)[ axis ] != 0.0, 0,
- (this->a)[ axis ], comment );
- (void) sprintf( buff, "Scl%d", axis + 1 );
- (void) sprintf( comment, "Scale factor for axis %d", axis + 1 );
- astWriteDouble( channel, buff, (this->b)[ axis ] != 1.0, 0,
- (this->b)[ axis ], comment );
- }
-
-/* Undefine macros local to this function. */
-#undef COMMENT_LEN
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAWinMap and astCheckWinMap functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(WinMap,Mapping)
-astMAKE_CHECK(WinMap)
-
-AstWinMap *astWinMap_( int ncoord, const double c1_in[], const double c2_in[],
- const double c1_out[], const double c2_out[],
- const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astWinMap
-f AST_WINMAP
-
-* Purpose:
-* Create a WinMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "winmap.h"
-c AstWinMap *astWinMap( int ncoord,
-c const double ina[], const double inb[],
-c const double outa[], const double outb[],
-c const char *options, ... )
-f RESULT = AST_WINMAP( NCOORD, INA, INB, OUTA, OUTB, OPTIONS, STATUS )
-
-* Class Membership:
-* WinMap constructor.
-
-* Description:
-* This function creates a new WinMap and optionally initialises its
-* attributes.
-*
-* A Winmap is a linear Mapping which transforms a rectangular
-* window in one coordinate system into a similar window in another
-* coordinate system by scaling and shifting each axis (the window
-* edges being parallel to the coordinate axes).
-*
-* A WinMap is specified by giving the coordinates of two opposite
-* corners (A and B) of the window in both the input and output
-* coordinate systems.
-
-* Parameters:
-c ncoord
-f NCOORD = INTEGER (Given)
-* The number of coordinate values for each point to be
-* transformed (i.e. the number of dimensions of the space in
-* which the points will reside). The same number is applicable
-* to both input and output points.
-c ina
-f INA( NCOORD ) = DOUBLE PRECISION (Given)
-c An array containing the "ncoord"
-f An array containing the
-* coordinates of corner A of the window in the input coordinate
-* system.
-c inb
-f INB( NCOORD ) = DOUBLE PRECISION (Given)
-c An array containing the "ncoord"
-f An array containing the
-* coordinates of corner B of the window in the input coordinate
-* system.
-c outa
-f OUTA( NCOORD ) = DOUBLE PRECISION (Given)
-c An array containing the "ncoord"
-f An array containing the
-* coordinates of corner A of the window in the output coordinate
-* system.
-c outb
-f OUTB( NCOORD ) = DOUBLE PRECISION (Given)
-c An array containing the "ncoord"
-f An array containing the
-* coordinates of corner B of the window in the output coordinate
-* system.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new WinMap. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new WinMap. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astWinMap()
-f AST_WINMAP = INTEGER
-* A pointer to the new WinMap.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-
-* Status Handling:
-* The protected interface to this function includes an extra
-* parameter at the end of the parameter list descirbed above. This
-* parameter is a pointer to the integer inherited status
-* variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstWinMap *new; /* Pointer to new WinMap */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the WinMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitWinMap( NULL, sizeof( AstWinMap ), !class_init, &class_vtab,
- "WinMap", ncoord, c1_in, c2_in, c1_out, c2_out );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new WinMap's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new WinMap. */
- return new;
-}
-
-AstWinMap *astWinMapId_( int ncoord, const double c1_in[], const double c2_in[],
- const double c1_out[], const double c2_out[],
- const char *options, ... ) {
-/*
-* Name:
-* astWinMapId_
-
-* Purpose:
-* Create a WinMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "winmap.h"
-* AstWinMap *astWinMapId_( int ncoord, const double c1_in[],
-* const double c2_in[], const double c1_out[],
-* const double c2_out[],
-* const char *options, ... )
-
-* Class Membership:
-* WinMap constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astWinMap constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astWinMap_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astWinMap_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astWinMap_.
-
-* Returned Value:
-* The ID value associated with the new WinMap.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstWinMap *new; /* Pointer to new WinMap */
- va_list args; /* Variable argument list */
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the WinMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitWinMap( NULL, sizeof( AstWinMap ), !class_init, &class_vtab,
- "WinMap", ncoord, c1_in, c2_in, c1_out, c2_out );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new WinMap's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new WinMap. */
- return astMakeId( new );
-}
-
-AstWinMap *astInitWinMap_( void *mem, size_t size, int init,
- AstWinMapVtab *vtab, const char *name,
- int ncoord, const double *c1_in,
- const double *c2_in, const double *c1_out,
- const double *c2_out, int *status ) {
-/*
-*+
-* Name:
-* astInitWinMap
-
-* Purpose:
-* Initialise a WinMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "winmap.h"
-* AstWinMap *astInitWinMap( void *mem, size_t size, int init,
-* AstWinMapVtab *vtab, const char *name,
-* int ncoord, const double *c1_in,
-* const double *c2_in,
-* const double *c1_out, const double *c2_out )
-
-* Class Membership:
-* WinMap initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new WinMap object. It allocates memory (if necessary) to accommodate
-* the WinMap plus any additional data associated with the derived class.
-* It then initialises a WinMap structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a WinMap at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the WinMap is to be initialised.
-* This must be of sufficient size to accommodate the WinMap data
-* (sizeof(WinMap)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the WinMap (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the WinMap
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the WinMap's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new WinMap.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-* ncoord
-* The number of coordinate values per point.
-* c1_in
-* The input coordinates of corner C1 of the window.
-* c2_in
-* The input coordinates of corner C2 of the window.
-* c1_out
-* The output coordinates of corner C1 of the window.
-* c2_out
-* The output coordinates of corner C2 of the window.
-
-* Returned Value:
-* A pointer to the new WinMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstWinMap *new; /* Pointer to new WinMap */
- double denom; /* Denominotor */
- int axis; /* Axis index */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitWinMapVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Initialise a Mapping structure (the parent class) as the first component
- within the WinMap structure, allocating memory if necessary. Specify that
- the Mapping should be defined in both the forward and inverse directions. */
- new = (AstWinMap *) astInitMapping( mem, size, 0,
- (AstMappingVtab *) vtab, name,
- ncoord, ncoord, 1, 1 );
-
- if ( astOK ) {
-
-/* Initialise the WinMap data. */
-/* ---------------------------- */
-/* Allocate memory to hold the shift and scale for each axis. */
- new->a = (double *) astMalloc( sizeof(double)*(size_t)ncoord );
- new->b = (double *) astMalloc( sizeof(double)*(size_t)ncoord );
-
-/* Check the pointers can be used */
- if( astOK ){
-
-/* Calculater and store the shift and scale for each axis. */
- for( axis = 0; axis < ncoord; axis++ ){
-
-/* If any of the corners have not been provided, store bad values. */
- if( !c1_in || !c1_out || !c2_in || !c2_out ) {
- (new->b)[ axis ] = AST__BAD;
- (new->a)[ axis ] = AST__BAD;
-
-/* Otherwise, check the corners are good (not AST__BAD or NaN)... */
- } else if( astISGOOD(c2_in[ axis ]) && astISGOOD(c1_in[ axis ]) &&
- astISGOOD(c2_out[ axis ]) && astISGOOD(c1_out[ axis ]) ){
-
- denom = c2_in[ axis ] - c1_in[ axis ];
- if( denom != 0.0 ){
- (new->b)[ axis ] = ( c2_out[ axis ] - c1_out[ axis ] )/denom;
- (new->a)[ axis ] = c1_out[ axis ] - (new->b)[ axis ]*c1_in[ axis ];
- } else {
- (new->b)[ axis ] = AST__BAD;
- (new->a)[ axis ] = AST__BAD;
- }
-
- } else {
- (new->b)[ axis ] = AST__BAD;
- (new->a)[ axis ] = AST__BAD;
- }
-
- }
-
- }
-
-/* If an error occurred, clean up by deleting the new WinMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new WinMap. */
- return new;
-}
-
-AstWinMap *astLoadWinMap_( void *mem, size_t size,
- AstWinMapVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadWinMap
-
-* Purpose:
-* Load a WinMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "winmap.h"
-* AstWinMap *astLoadWinMap( void *mem, size_t size,
-* AstWinMapVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* WinMap loader.
-
-* Description:
-* This function is provided to load a new WinMap using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* WinMap structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a WinMap at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the WinMap is to be
-* loaded. This must be of sufficient size to accommodate the
-* WinMap data (sizeof(WinMap)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the WinMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the WinMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstWinMap) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new WinMap. If this is NULL, a pointer
-* to the (static) virtual function table for the WinMap class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "WinMap" is used instead.
-
-* Returned Value:
-* A pointer to the new WinMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Constants. */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-#define KEY_LEN 50 /* Maximum length of a keyword */
-
-/* Local Variables: */
- AstWinMap *new; /* Pointer to the new WinMap */
- char buff[ KEY_LEN + 1 ]; /* Buffer for keyword string */
- int axis; /* Axis index */
- int ncoord; /* The number of coordinate axes */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this WinMap. In this case the
- WinMap belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstWinMap );
- vtab = &class_vtab;
- name = "WinMap";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitWinMapVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built WinMap. */
- new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Get the number of axis for the mapping. */
- ncoord = astGetNin( (AstMapping *) new );
-
-/* Allocate memory to hold the scales and shifts. */
- new->a = (double *) astMalloc( sizeof(double)*(size_t)ncoord );
- new->b = (double *) astMalloc( sizeof(double)*(size_t)ncoord );
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "WinMap" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* The scales and shifts. */
- for( axis = 0; axis < ncoord; axis++ ){
- (void) sprintf( buff, "sft%d", axis + 1 );
- (new->a)[ axis ] = astReadDouble( channel, buff, 0.0 );
- (void) sprintf( buff, "scl%d", axis + 1 );
- (new->b)[ axis ] = astReadDouble( channel, buff, 1.0 );
- }
- }
-
-/* If an error occurred, clean up by deleting the new WinMap. */
- if ( !astOK ) new = astDelete( new );
-
-/* Return the new WinMap pointer. */
- return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-int astWinTerms_( AstWinMap *this, double **scale, double **shift, int *status ){
- if( !astOK ) return 0;
- return (**astMEMBER(this,WinMap,WinTerms))( this, scale, shift, status );
-}
-
-
-
-
diff --git a/ast-5.3-1/winmap.h b/ast-5.3-1/winmap.h
deleted file mode 100644
index c30b9c8..0000000
--- a/ast-5.3-1/winmap.h
+++ /dev/null
@@ -1,300 +0,0 @@
-#if !defined( WINMAP_INCLUDED ) /* Include this file only once */
-#define WINMAP_INCLUDED
-/*
-*+
-* Name:
-* winmap.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the WinMap class.
-
-* Invocation:
-* #include "winmap.h"
-
-* Description:
-* This include file defines the interface to the WinMap class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The WinMap class implements Mappings which maps one window onto
-* another window by scaling and shifting the values on each axis.
-
-* Inheritance:
-* The WinMap class inherits from the Mapping class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* None.
-
-* Methods Over-Ridden:
-* Public:
-* None.
-*
-* Protected:
-* ClearAttrib
-* Clear an attribute value for a WinMap.
-* GetAttrib
-* Get an attribute value for a WinMap.
-* SetAttrib
-* Set an attribute value for a WinMap.
-* TestAttrib
-* Test if an attribute value has been set for a WinMap.
-* astMapMerge
-* Simplify a sequence of Mappings containing a WinMap.
-* astTransform
-* Apply a WinMap to transform a set of points.
-
-* New Methods Defined:
-* Public:
-* None.
-*
-* Protected:
-* astWinTerms
-* Obtain copies of the shift and scale terms used by a WinMap.
-
-* Other Class Functions:
-* Public:
-* astIsAWinMap
-* Test class membership.
-* astWinMap
-* Create a WinMap.
-*
-* Protected:
-* astCheckWinMap
-* Validate class membership.
-* astInitWinMap
-* Initialise a WinMap.
-* astInitWinMapVtab
-* Initialise the virtual function table for the WinMap class.
-* astLoadWinMap
-* Load a WinMap.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstWinMap
-* WinMap object type.
-*
-* Protected:
-* AstWinMapVtab
-* WinMap virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-
-* History:
-* 23-OCT-1996 (DSB):
-* Original version.
-* 8-JAN-2003 (DSB):
-* Changed private InitVtab method to protected astInitWinMapVtab
-* method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* WinMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstWinMap {
-
-/* Attributes inherited from the parent class. */
- AstMapping mapping; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- double *a; /* Pointer to array of shifts */
- double *b; /* Pointer to array of scale factors */
-
-} AstWinMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstWinMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstMappingVtab mapping_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- int (* WinTerms)( AstWinMap *, double **, double **, int * );
-
-} AstWinMapVtab;
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within the
- object.c file. */
-
-typedef struct AstWinMapGlobals {
- AstWinMapVtab Class_Vtab;
- int Class_Init;
-} AstWinMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitWinMapGlobals_( AstWinMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(WinMap) /* Check class membership */
-astPROTO_ISA(WinMap) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstWinMap *astWinMap_( int, const double [], const double [], const double [], const double [], const char *, int *, ...);
-#else
-AstWinMap *astWinMapId_( int, const double [], const double [], const double [], const double [], const char *, ... )__attribute__((format(printf,6,7)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstWinMap *astInitWinMap_( void *, size_t, int, AstWinMapVtab *,
- const char *, int, const double *, const double *,
- const double *, const double *, int * );
-
-/* Vtab initialiser. */
-void astInitWinMapVtab_( AstWinMapVtab *, const char *, int * );
-
-/* Loader. */
-AstWinMap *astLoadWinMap_( void *, size_t, AstWinMapVtab *,
- const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS) /* Protected */
-int astWinTerms_( AstWinMap *, double **, double **, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckWinMap(this) astINVOKE_CHECK(WinMap,this,0)
-#define astVerifyWinMap(this) astINVOKE_CHECK(WinMap,this,1)
-
-/* Test class membership. */
-#define astIsAWinMap(this) astINVOKE_ISA(WinMap,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astWinMap astINVOKE(F,astWinMap_)
-#else
-#define astWinMap astINVOKE(F,astWinMapId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define \
-astInitWinMap(mem,size,init,vtab,name,ncoord,c1_in,c2_in,c1_out,c2_out) \
-astINVOKE(O,astInitWinMap_(mem,size,init,vtab,name,ncoord,c1_in,c2_in,c1_out,c2_out,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitWinMapVtab(vtab,name) astINVOKE(V,astInitWinMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadWinMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadWinMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckWinMap to validate WinMap pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-#define astWinTerms(this,scale,shift) \
-astINVOKE(V,astWinTerms_(astCheckWinMap(this),scale,shift,STATUS_PTR))
-#endif
-
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/xml.c b/ast-5.3-1/xml.c
deleted file mode 100644
index 48d79c2..0000000
--- a/ast-5.3-1/xml.c
+++ /dev/null
@@ -1,7119 +0,0 @@
-/*
-* Name:
-* xml.c
-
-* Purpose:
-* Implement XML functions for AST.
-
-* Description:
-* This file implements the Xml module which provides generic XML
-* reading and writing functions for the XmlChan class.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 22-OCT-2003 (DSB):
-* Original version.
-* 12-JAN-2004 (DSB):
-* Major revisions.
-* 10-FEB-2004 (DSB):
-* - Added debug conditional code to keep track of memory leaks.
-* - Other minor bug fixes.
-* 6-FEB-2004 (DSB):
-* DefaultURI and astXmlAddURI modified to allow a blank URI to be
-* used to ignore a default namespace URI provided by an enclosing
-* element.
-* 29-NOV-2004 (DSB):
-* Added astXmlGetType method.
-* 27-JAN-2005 (DSB):
-* - Move astXmlTrace and associated code into conditional
-* compilation blokc (included if DEBUG macro is defined). This
-* speeds up the create and destruction of XmlObjects in non-DEBUG code.
-* - Renamed the private Delete function as astXmlDelete and gave
-* it protected access.
-* - Modify astXmlDelete so that it can succesfully annul objects
-* which have no parent.
-* - Include extra info in some error messages.
-* 1-MAR-2006 (DSB):
-* Replace astSetPermMap within DEBUG blocks by astBeginPM/astEndPM.
-* 10-DEC-2008 (DSB):
-* Allow a prefix to be included with the attribute name in
-* astXmlGetAttributeValue.
-*/
-
-
-/* Module Constants. */
-/* ----------------- */
-/* Set the name of the module we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. NB, this module is not a proper AST
- class, but it defines this macro sanyway in order to get the protected
- symbols defined in memory.h */
-#define astCLASS Xml
-
-#define IND_INC 3
-
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "memory.h" /* Interface to the memory management module */
-#include "error.h" /* Interface to the error module */
-#include "xml.h" /* Interface to this module */
-#include "globals.h" /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-
-
-/*
-* Name:
-* MAKE_CHECK
-
-* Type:
-* Private macro.
-
-* Purpose:
-* Implement the astXmlCheck<type>_ function for XML structures.
-
-* Synopsis:
-* #include "xml.h"
-* MAKE_CHECK(type,id)
-
-* Class Membership:
-* Defined by the xml module.
-
-* Description:
-* This macro expands to an implementation of the protected
-* astXmlCheck<type>_ function (q.v.) which validates membership of
-* a specified XML data type.
-
-* Parameters:
-* type
-* The type whose membership is to be validated (e.g. "Element" not
-* "XmlElement").
-* id
-* The constant (e.g. "AST__XMLELEM") defining the data type.
-
-* Notes:
-* - To avoid problems with some compilers, you should not leave any white
-* space around the macro arguments.
-*/
-
-/* Define the macro. */
-#define MAKE_CHECK(type,id) \
-\
-/* Declare the function */ \
-AstXml##type *astXmlCheck##type##_( void *this, int nullok, int *status ) { \
-\
-/* Local Variables: */\
- AstXml##type *result; /* The returned pointer */\
-\
-/* Check the global error status. If an error has already occurred just\
- return the supplied pointer. This is so that functions such as\
- astXmlAnnul which do not check the inherited status receive the\
- supplied pointer. */\
- if( !astOK ) return this;\
-\
-/* Initialise */\
- result = NULL;\
-\
-/* If the pointer is NULL issue an error if nullok is zero. */\
- if( !this ) {\
- if( !nullok ) astError( AST__PTRIN, "astXmlCheck"#type": Invalid "\
- "NULL pointer supplied." , status);\
-\
-/* Otherwise get the "type" component which holds a magic value for each\
- different class of structure. Compare this value against all valid \
- classes of structure. If no match is found, the pointer does not \
- identify an suitable structure, and so report an error and return \
- NULL. */\
- } else {\
- if( !astXmlCheckType( ( AstXmlObject * ) this, id ) ) {\
- astError( AST__PTRIN, "astXmlCheck"#type": Invalid pointer "\
- "supplied; pointer to AstXml"#type" required." , status);\
- } else {\
- result = (AstXml##type *) this;\
- }\
- }\
-\
-/* Return the result. */\
- return result;\
-}
-
-
-/* Module variables. */
-/* ================= */
-
-/* Define macros for accessing all items of thread-safe global data
- used by this module. */
-#ifdef THREAD_SAFE
-
-#define next_id astGLOBAL(Xml,Next_ID)
-#define gettag_buff astGLOBAL(Xml,GetTag_Buff)
-#define GLOBAL_inits globals->Next_ID = 0;
-astMAKE_INITGLOBALS(Xml)
-
-/* Set up mutexes */
-static pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX1 pthread_mutex_lock( &mutex1 );
-#define UNLOCK_MUTEX1 pthread_mutex_unlock( &mutex1 );
-
-/* If thread safety is not needed, declare globals at static variables. */
-#else
-
-static int next_id = 0;
-static char gettag_buff[ AST__XML_GETTAG_BUFF_LEN + 1 ];
-
-#define LOCK_MUTEX1
-#define UNLOCK_MUTEX1
-
-#ifdef DEBUG /* Not available in thread-safe compilations */
-static int nobj = 0;
-static AstXmlObject **existing_objects = NULL;
-#endif
-
-#endif
-
-
-/* Function prototypes. */
-/* ==================== */
-
-/* Private member functions. */
-/* ------------------------- */
-static AstXmlAttribute *FindAttribute( AstXmlElement *, const char *, int * );
-static AstXmlAttribute *NewAttribute( const char *, const char *, const char *, int * );
-static AstXmlDocument *NewDocument( int * );
-static AstXmlPrologue *NewPrologue( AstXmlDocument *, int * );
-static AstXmlNamespace *NewNamespace( const char *, const char *, int * );
-static char *AppendChar( char *, int *, char, int * );
-static char *AppendLine( char *, int *, const char *, int, int * );
-static char *RemoveEscapes( const char *, int * );
-static char *CleanText( const char *, int * );
-static const char *AddEscapes( const char *, int * );
-static const char *DefaultURI( AstXmlElement *, int * );
-static const char *Format( AstXmlObject *, int, int * );
-static char *FormatTag( AstXmlObject *, int, int * );
-static const char *ResolvePrefix( const char *, AstXmlElement *, int * );
-static int CheckType( long int, long int, int * );
-static int MatchName( AstXmlElement *, const char *, int * );
-static int Ustrcmp( const char *, const char *, int * );
-static void AddContent( AstXmlParent *, int, AstXmlContentItem *, int * );
-static void CheckName( const char *, const char *, const char *, int, int * );
-static void CheckPrefName( char *, const char *, const char *, int * );
-static void CleanXml( AstXmlObject *, long int, int * );
-static void InitXmlAttribute( AstXmlAttribute *, int, const char *, const char *, const char *, int * );
-static void InitXmlCDataSection( AstXmlCDataSection *, int, const char *, int * );
-static void InitXmlWhite( AstXmlWhite *, int, const char *, int * );
-static void InitXmlBlack( AstXmlBlack *, int, const char *, int * );
-static void InitXmlComment( AstXmlComment *, int, const char *, int * );
-static void InitXmlDocument( AstXmlDocument *, int, int * );
-static void InitXmlPrologue( AstXmlPrologue *, int, int * );
-static void InitXmlDeclPI( AstXmlDeclPI *, int, const char *, int * );
-static void InitXmlDTDec( AstXmlDTDec *, int, const char *, const char *, const char *, int * );
-static void InitXmlElement( AstXmlElement *, int, const char *, const char *, int * );
-static void InitXmlNamespace( AstXmlNamespace *, int, const char *, const char *, int * );
-static void InitXmlObject( AstXmlObject *, long int, int * );
-static void InitXmlPI( AstXmlPI *, int, const char *, const char *, int * );
-static AstXmlElement *ReadContent( AstXmlDocument **, int, int (*)( AstXmlElement *, int * ), int, char (*)( void *, int * ), void *, int, int * );
-
-#ifdef DEBUG
-static void AddObjectToList( AstXmlObject * );
-static void RemoveObjectFromList( AstXmlObject * );
-#endif
-
-/* Function implementations. */
-/* ========================= */
-
-/* Create the astXmlCheck... functiosn which check a pointer identifies
- an XML structure of a given type. */
-
-MAKE_CHECK(Document,AST__XMLDOC)
-MAKE_CHECK(Object,AST__XMLOBJECT)
-MAKE_CHECK(Element,AST__XMLELEM)
-MAKE_CHECK(Attribute,AST__XMLATTR)
-MAKE_CHECK(CDataSection,AST__XMLCDATA)
-MAKE_CHECK(Comment,AST__XMLCOM)
-MAKE_CHECK(PI,AST__XMLPI)
-MAKE_CHECK(Namespace,AST__XMLNAME)
-MAKE_CHECK(Prologue,AST__XMLPRO)
-MAKE_CHECK(DeclPI,AST__XMLDEC)
-MAKE_CHECK(DTDec,AST__XMLDTD)
-MAKE_CHECK(White,AST__XMLWHITE)
-MAKE_CHECK(Black,AST__XMLBLACK)
-MAKE_CHECK(CharData,AST__XMLCHAR)
-MAKE_CHECK(ContentItem,AST__XMLCONT)
-MAKE_CHECK(MiscItem,AST__XMLMISC)
-MAKE_CHECK(Parent,AST__XMLPAR)
-
-
-static void AddContent( AstXmlParent *this, int where, AstXmlContentItem *item, int *status ){
-/*
-* Name:
-* AddContent
-
-* Purpose:
-* Add a content item to an XmlElement.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* void AddContent( AstXmlParent *this, int where, AstXmlContentItem *item, int *status )
-
-* Description:
-* This function adds a supplied item to a specified XmlElement or
-* XmlDocument. An error is reported if the item is not appropriate.
-
-* Parameters:
-* this
-* The pointer to the element or document to be modified.
-* where
-* Ignored if "this" is an XmlElement pointer. Otherwise, "where"
-* indicates where the item should be added to the document:
-* 1 - In the prologue, after the XML declaration but before the DTD.
-* 2 - In the prologue, after the DTD but before the root element.
-* 3 - In the epilogue, after the root element.
-* item
-* Pointer to the content item to be added to the element. If
-* "this" is an XmlElement, this can be a pointer to any of the
-* following types: AstXmlElement, AstXmlWhite, AstXmlBlack,
-* AstXmlCDataSection, AstXmlComment, AstXmlPI. If "this" is a
-* document, the list is restricted to: AstXmlWhite, AstXmlComment,
-* AstXmlPI.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstXmlDocument *doc; /* Document pointer */
- AstXmlElement *elem; /* Element pointer */
- AstXmlPrologue *pro; /* Prologue pointer */
- int nitem; /* Number of items in the parent */
-
-/* Check the global error status and the supplied pointers. */
- if( !astOK || !this || !item ) return;
-
-/* Split for the two forms of parent. */
- if( astXmlCheckType( this, AST__XMLELEM ) ) {
- elem = (AstXmlElement *) this;
-
-/* Save the number of content items currently stored in the element. */
- nitem = ( elem->items ) ? elem->nitem : 0;
-
-/* Attempt to extend the array to hold an extra item. */
- elem->items = astGrow( elem->items, nitem + 1,
- sizeof( AstXmlContentItem * ) );
-
-/* Check the memory was allocated succesfully. */
- if( astOK ) {
-
-/* Store the supplied pointer in the array of content items. */
- elem->items[ nitem ] = item;
-
-/* Increment the number of content items in this element */
- elem->nitem = nitem + 1;
-
-/* Indicate that the item is owned by the element. */
- ( (AstXmlObject *) item )->parent = this;
- }
-
-/* Now deal with cases where we are adding an item to the prologue or
- epilogue of the document. */
- } else {
- if( !astXmlCheckType( item, AST__XMLMISC ) ){
- astError( AST__INTER, "AddContent(xml): Inappropriate attempt to "
- "add an item of type %ld to an XML document (internal "
- "AST programming error).", status, ( (AstXmlObject *) item)->type );
-
- } else if( !astXmlCheckType( this, AST__XMLDOC ) ){
- astError( AST__INTER, "AddContent(xml): Inappropriate attempt to "
- "add an item of type %ld to an XML object of type %ld "
- "(internal AST programming error).", status,
- ( (AstXmlObject *) item)->type,
- ( (AstXmlObject *) this)->type );
-
- } else {
- doc = (AstXmlDocument *) this;
-
-/* Create a prologue if necessary. */
- if( where < 3 && !doc->prolog ) doc->prolog = NewPrologue( doc, status );
- pro = doc->prolog;
-
- if( where < 2 ) {
- nitem = ( pro->misc1 ) ? pro->nmisc1 : 0;
- pro->misc1 = astGrow( pro->misc1, nitem + 1, sizeof( AstXmlMiscItem * ) );
- if( astOK ) {
- pro->misc1[ nitem ] = item;
- pro->nmisc1 = nitem + 1;
- ( (AstXmlObject *) item )->parent = (AstXmlParent *) pro;
- }
-
- } else if( where == 2 ) {
- nitem = ( pro->misc2 ) ? pro->nmisc2 : 0;
- pro->misc2 = astGrow( pro->misc2, nitem + 1, sizeof( AstXmlMiscItem * ) );
- if( astOK ) {
- pro->misc2[ nitem ] = item;
- pro->nmisc2 = nitem + 1;
- ( (AstXmlObject *) item )->parent = (AstXmlParent *) pro;
- }
-
- } else {
- nitem = ( doc->epilog ) ? doc->nepi : 0;
- doc->epilog = astGrow( doc->epilog, nitem + 1, sizeof( AstXmlMiscItem * ) );
- if( astOK ) {
- doc->epilog[ nitem ] = item;
- doc->nepi = nitem + 1;
- ( (AstXmlObject *) item )->parent = this;
- }
- }
- }
- }
-}
-
-static const char *AddEscapes( const char *text, int *status ){
-/*
-* Name:
-* AddEscapes
-
-* Purpose:
-* Replaces characters by corresponding entity references.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* const char *AddEscapes( const char *text, int *status )
-
-* Description:
-* This function produces a dynamic copy of the supplied text in which
-* occurrences of "&", "<", ">", and "\"" are replaced by the corresponding
-* XML entity reference.
-*
-* The "&" character is only replaced by an entity reference if it is
-* followed by a non-name character (i.e. anything except a letter
-* underscore or colon). If it is followed by a name character, it is
-* assumed to mark the start of an entity reference.
-
-* Parameters:
-* text
-* A pointer to a text string.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated string containing the required
-* copy.
-
-* Notes:
-* - NULL is returned if this function is called with the global error
-* status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- char *result; /* Returned pointer */
- const char *c; /* Pointer to next supplied character */
- char *d; /* Pointer to next returned character */
-
-/* Initialise */
- result = NULL;
-
-/* Return if the pointer is NULL or if an error has occurred. */
- if( !astOK || !text ) return result;
-
-/* Allocate the maximum possible amount of memory that may be needed to
- store the returned string. */
- result = astMalloc( 6*strlen( text ) + 1 );
-
-/* Check the pointer can be used safely. */
- if( astOK ) {
-
-/* Loop round every character in the supplied text. */
- c = text - 1;
- d = result;
- while( *(++c) ) {
-
-/* We replace this character if it is a <, >, ', &, or ". */
- if( *c == '<' ) {
- strcpy( d, "<" );
- d += 4;
-
- } else if( *c == '>' ) {
- strcpy( d, ">" );
- d += 4;
-
- } else if( *c == '"' ) {
- strcpy( d, """ );
- d += 6;
-
- } else if( *c == '\'' ) {
- strcpy( d, "'" );
- d += 6;
-
- } else if( *c == '&' ) {
- strcpy( d, "&" );
- d += 5;
-
-/* Otherwise just append the supplied character. */
- } else {
- *(d++) = *c;
- }
- }
-
-/* Terminate the returned string. */
- *d = 0;
-
-/* Reallocate the string to free up any unused space. */
- result = astRealloc( result, d - result + 1 );
- }
-
-/* Return the result. */
- return (const char *) result;
-}
-
-
-#ifdef DEBUG
-static void AddObjectToList( AstXmlObject *obj ){
-/*
-* Name:
-* AddObjectToList
-
-* Purpose:
-* Adds an XmlObject to a static list of all currently active XmlObjects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* void AddObjectToList( AstXmlObject *obj )
-
-* Description:
-* This function adds the supplied pointer to a static list of pointers,
-* and increments the number of elements in the list. This list holds
-* pointers to all the XmlObjects which currently exist.
-
-* Parameters:
-* this
-* A pointer to a new XmlObject.
-*/
-
-/* Return if the pointer is NULL or if an error has occurred. */
- if( !astOK || !obj ) return;
-
-/* Increment the number of objects in the list and increase the size of
- the list. */
- astBeginPM;
- existing_objects = astGrow( existing_objects, ++nobj, sizeof( AstXmlObject *) );
- astEndPM;
-
-/* Add the new pointer to the end of the list. */
- existing_objects[ nobj - 1 ] = obj;
-}
-#endif
-
-static char *AppendChar( char *str1, int *nc, char ch, int *status ) {
-/*
-* Name:
-* AppendChar
-
-* Purpose:
-* Append a character to a string which grows dynamically.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* char *AppendChar( char *str1, int *nc, char ch, int *status )
-
-* Description:
-* This function appends a character to a dynamically
-* allocated string, extending the dynamic string as necessary to
-* accommodate the new character (plus the final null).
-
-* Parameters:
-* str1
-* Pointer to the null-terminated dynamic string, whose memory
-* has been allocated using the AST memory allocation functions
-* defined in "memory.h". If no space has yet been allocated for
-* this string, a NULL pointer may be given and fresh space will
-* be allocated by this function.
-* nc
-* Pointer to an integer containing the number of characters in
-* the dynamic string (excluding the final null). This is used
-* to save repeated searching of this string to determine its
-* length and it defines the point where the new string will be
-* appended. Its value is updated by this function to include
-* the extra characters appended.
-*
-* If "str1" is NULL, the initial value supplied for "*nc" will
-* be ignored and zero will be used.
-* ch
-* The character which is to be appended to "str1".
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A possibly new pointer to the dynamic string with the new character
-* appended (its location in memory may have to change if it has to
-* be extended, in which case the original memory is automatically
-* freed by this function). When the string is no longer required,
-* its memory should be freed using astFree.
-
-* Notes:
-* - If this function is invoked with the global error status set
-* or if it should fail for any reason, then the returned pointer
-* will be equal to "str1" and the dynamic string contents will be
-* unchanged.
-*/
-
-/* Local Variables: */
- char *result; /* Pointer value to return */
- int len; /* Length of new string */
-
-/* Initialise. */
- result = str1;
-
-/* If the first string pointer is NULL, also initialise the character
- count to zero. */
- if ( !str1 ) *nc = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Calculate the total string length once the character has been added. */
- len = *nc + 1;
-
-/* Extend the dynamic string to the required length, including
- a final null. Save the resulting pointer, which will be
- returned. */
- result = astGrow( str1, len + 1, sizeof( char ) );
-
-/* If OK, append the second string and update the total character
- count. */
- if ( astOK ) {
- result[ *nc ] = ch;
- *nc = len;
- result[ *nc ] = 0;
- }
-
-/* Return the result pointer. */
- return result;
-}
-
-static char *AppendLine( char *str1, int *nc, const char *str2, int ind, int *status ) {
-/*
-* Name:
-* AppendLine
-
-* Purpose:
-* Append an indented new line to another string which grows dynamically.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* char *AppendLine( char *str1, int *nc, const char *str2, int ind, int *status )
-
-* Description:
-* This function appends one string to another dynamically
-* allocated string, extending the dynamic string as necessary to
-* accommodate the new characters (plus the final null).
-*
-* A newline character is inserted if necessary to ensure that the "str2"
-* string starts on a newline. If "ind" is positive, spaces are added
-* as necessary to ensure that "str2" begins with the specified number of
-* spaces.
-
-* Parameters:
-* str1
-* Pointer to the null-terminated dynamic string, whose memory
-* has been allocated using the AST memory allocation functions
-* defined in "memory.h". If no space has yet been allocated for
-* this string, a NULL pointer may be given and fresh space will
-* be allocated by this function.
-* nc
-* Pointer to an integer containing the number of characters in
-* the dynamic string (excluding the final null). This is used
-* to save repeated searching of this string to determine its
-* length and it defines the point where the new string will be
-* appended. Its value is updated by this function to include
-* the extra characters appended.
-*
-* If "str1" is NULL, the initial value supplied for "*nc" will
-* be ignored and zero will be used.
-* str2
-* Pointer to a constant null-terminated string, a copy of which
-* is to be appended to "str1".
-* ind
-* The number of spaces to use as the indentation string.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A possibly new pointer to the dynamic string with the new string
-* appended (its location in memory may have to change if it has to
-* be extended, in which case the original memory is automatically
-* freed by this function). When the string is no longer required,
-* its memory should be freed using astFree.
-
-* Notes:
-* - If this function is invoked with the global error status set
-* or if it should fail for any reason, then the returned pointer
-* will be equal to "str1" and the dynamic string contents will be
-* unchanged.
-*/
-
-/* Local Variables: */
- char *c; /* Point to next character */
- char *result; /* Pointer value to return */
- char *temp; /* Pointer to modified string */
- int j; /* Loop count */
-
-/* Initialise. */
- result = str1;
-
-/* If the first string pointer is NULL, also initialise the character
- count to zero. */
- if ( !str1 ) *nc = 0;
-
-/* Check the global error status. */
- if ( !astOK || !str2 ) return result;
-
-/* Remove any trailing white space (except for newlines) from the supplied
- string. */
- if( *nc > 0 ) {
- c = str1 + *nc - 1;
- while( isspace( *c ) && *c != '\n' ) {
- *(c--) = 0;
- (*nc)--;
- }
-
-/* If the last character in the returned string is not now a newline,
- append a newline, so long as the new item does not start with a newline. */
- if( str1[ *nc - 1 ] != '\n' ) {
- temp = AppendChar( str1, nc, '\n', status );
- } else {
- temp = str1;
- }
-
- } else {
- temp = str1;
- }
-
-/* If a fixed indentation is specified, skip over any leading spaces in
- the second string. */
- if( str2 ) {
- if( ind > 0 ) {
- while( isspace( *str2 ) ) str2++;
- }
-
-/* If the first character of the second string is a newline, ignore it. */
- if( str2[ 0 ] == '\n' ) str2++;
- }
-
-/* Append the indentation string. */
- for( j = 0; j < ind; j++ ) temp = AppendChar( temp, nc, ' ', status );
-
-/* Append the supplied string. */
- return astAppendString( temp, nc, str2 );
-}
-
-void astXmlAddAttr_( AstXmlElement *this, const char *name, const char *value,
- const char *prefix, int *status ){
-/*
-*+
-* Name:
-* astXmlAddAttr
-
-* Purpose:
-* Add an attribute to an XmlElement.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* void astXmlAddAttr( AstXmlElement *this, const char *name,
-* const char *value, const char *prefix )
-
-* Description:
-* This function adds an attribute to a specified XmlElement. If the
-* element already contains an attribute with the given name amd prefix,
-* then the value of the attribute is changed to be the supplied value.
-
-* Parameters:
-* this
-* The pointer to the element to be modified.
-* name
-* Pointer to a null terminated string containing the attribute name.
-* value
-* Pointer to a null terminated string containing the attribute value.
-* prefix
-* The namespace prefix for the attribute. May be NULL or blank, in
-* which case any prefix at the start of "name" is used.
-*-
-*/
-
-/* Local Variables: */
- AstXmlAttribute *attr; /* The new attribute. */
- AstXmlAttribute *oldattr; /* Pointer to existing attribute */
- int i; /* Loop index */
- int nattr; /* Number of attributes in the element */
- int oldi; /* Index of existing attribute */
- char *my_value; /* Cleaned value text */
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Initialise */
- oldattr = NULL;
-
-/* Clean the value text. */
- my_value = CleanText( value, status );
-
-/* Create a new XmlAttribute. */
- attr = NewAttribute( name, my_value, prefix, status );
-
-/* Free the memory */
- my_value = astFree( my_value );
-
-/* If OK, indicate that the attribute is owned by the element. */
- if( astOK ) {
- ( (AstXmlObject *) attr )->parent = (AstXmlParent *) this;
-
-/* Save the number of attributes currently stored in the element. */
- nattr = ( this->attrs ) ? this->nattr : 0;
-
-/* Search the existing attributes to see if an attribute with the given
- name and prefix already exists. */
- oldi = -1;
- for( i = 0; i < nattr; i++ ) {
- oldattr = this->attrs[ i ];
- if( !strcmp( oldattr->name, attr->name ) ) {
- if( !oldattr->prefix && !attr->prefix ) {
- oldi = i;
- break;
- } else if( oldattr->prefix && attr->prefix &&
- !strcmp( oldattr->prefix, attr->prefix ) ){
- oldi = i;
- break;
- }
- }
- }
-
-/* If there is an existing attribute with the same name and prefix,
- replace the old attribute with the new one created above. */
- if( oldi > -1 ){
- ((AstXmlObject *)oldattr)->parent = NULL;
- oldattr = astXmlAnnul( oldattr );
- this->attrs[ oldi ] = attr;
-
-/* Otherwise, attempt to extend the array to hold an extra attribute. */
- } else {
- this->attrs = astGrow( this->attrs, nattr + 1,
- sizeof( AstXmlAttribute * ) );
-
-/* Check all has gone OK. */
- if( astOK ) {
-
-/* Store the attribute pointer in the array of attribute pointers. */
- this->attrs[ nattr ] = attr;
-
-/* Increment the number of content items in this element */
- this->nattr = nattr + 1;
-
- }
- }
- }
-}
-
-void astXmlAddCDataSection_( AstXmlElement *this, const char *text, int *status ){
-/*
-*+
-* Name:
-* astXmlAddCDataSection
-
-* Purpose:
-* Create a new XmlCDataSection and add it to an XmlElement.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* void astXmlAddCDataSection( AstXmlElement *this, const char *text )
-
-* Description:
-* This function creates a new XmlCDataSection structure representing
-* an unparsed character data (CDATA) section, and adds it into an
-* existing element.
-
-* Parameters:
-* this
-* A pointer to the element to be modified.
-* text
-* Pointer to a null terminated string containing the character data.
-
-*-
-*/
-
-/* Local Variables: */
- AstXmlCDataSection *new; /* Pointer to new structure */
- char *my_text; /* Cleaned text */
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Allocate space for the new structure. */
- new = (AstXmlCDataSection *) astMalloc( sizeof( AstXmlCDataSection ) );
-
-/* Clean the text. */
- my_text = CleanText( text, status );
-
-/* Initialise it. */
- InitXmlCDataSection( new, AST__XMLCDATA, my_text, status );
-
-/* Free the memory */
- my_text = astFree( my_text );
-
-/* If an error occurred, delete the new structure. */
- if( !astOK ) {
- new = astXmlDelete( new );
-
-/* Otherwise, add the content item to the element. */
- } else {
- AddContent( (AstXmlParent *) this, 0, (AstXmlContentItem *) new, status );
- }
-}
-
-void astXmlAddCharData_( AstXmlParent *this, int where, const char *text, int *status ){
-/*
-*+
-* Name:
-* astXmlAddCharData
-
-* Purpose:
-* Create a new XmlCharData and add it to an XmlElement or XmlDocument.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* void astXmlAddCharData( AstXmlParent *this, int where, const char *text )
-
-* Description:
-* This function creates a new XmlCharData structure representing
-* parsed character data, and adds it into an existing element or
-* document.
-
-* Parameters:
-* this
-* Pointer to the element or document to be modified.
-* where
-* Ignored if "this" is an XmlElement pointer. Otherwise, "where"
-* indicates where the item should be added to the document:
-* 1 - In the prologue, after the XML declaration but before the DTD.
-* 2 - In the prologue, after the DTD but before the root element.
-* 3 - In the epilogue, after the root element.
-* text
-* Pointer to a null terminated string containing the character data.
-* If "this" is a document, the text must consist entirely of white
-* space.
-
-*-
-*/
-
-/* Local Variables: */
- AstXmlCharData *new; /* Pointer to the new structure */
- char *my_text; /* Pointer to cleaned text */
- char *c; /* Pointer to next character */
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Initialise */
- new = NULL;
-
-/* Clean the text by replacing "\r\n" by "\n". */
- my_text = CleanText( text, status );
-
-/* See if the text is all white. */
- c = my_text - 1;
- while( *(++c) && isspace( *c ) );
-
-/* If the string contains a non-white character, allocate memory for
- a XmlBlack structure, and initialise it to hold the supplied text.
- Otherwise, allocate memory for a XmlWhite structure, and initialise it
- to hold the supplied text. */
- if( *c ) {
- if( astXmlCheckType( this, AST__XMLDOC ) ) {
- astError( AST__XMLCM, "astXmlAddCharData(xml): Illegal attempt "
- "to add non-white character data to the prologue or "
- "epilogue of an XML document: \"%s\".", status, my_text );
- } else {
- new = (AstXmlCharData *) astMalloc( sizeof( AstXmlBlack ) );
- InitXmlBlack( (AstXmlBlack *) new, AST__XMLBLACK, my_text, status );
- }
-
- } else {
- new = (AstXmlCharData *) astMalloc( sizeof( AstXmlWhite ) );
- InitXmlWhite( (AstXmlWhite *) new, AST__XMLWHITE, my_text, status );
- }
-
-/* Free the memory holding the cleaned text */
- my_text = astFree( my_text );
-
-/* If an error occurred, delete the new structure. */
- if( !astOK ) {
- new = astXmlDelete( new );
-
-/* Otherwise, add the content item to the element. */
- } else {
- AddContent( this, where, (AstXmlContentItem *) new, status );
- }
-}
-
-void astXmlAddComment_( AstXmlParent *this, int where, const char *text, int *status ){
-/*
-*+
-* Name:
-* astXmlAddComment
-
-* Purpose:
-* Create a new XmlComment and add it to an XmlElement or XmlDocument.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* void astXmlAddComment( AstXmlParent *this, int where, const char *text )
-
-* Description:
-* This function creates a new XmlComment structure representing
-* an XML comment, and adds it into an existing element or document.
-
-* Parameters:
-* this
-* Pointer to the element or document to be modified.
-* where
-* Ignored if "this" is an XmlElement pointer. Otherwise, "where"
-* indicates where the item should be added to the document:
-* 1 - In the prologue, after the XML declaration but before the DTD.
-* 2 - In the prologue, after the DTD but before the root element.
-* 3 - In the epilogue, after the root element.
-* text
-* Pointer to a null terminated string containing the comment text.
-
-*-
-*/
-
-/* Local Variables: */
- AstXmlComment *new; /* Pointer to the new structure */
- char *my_text; /* Cleaned text */
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Allocate space for the new structure. */
- new = (AstXmlComment *) astMalloc( sizeof( AstXmlComment ) );
-
-/* Clean the text. */
- my_text = CleanText( text, status );
-
-/* Initialise it. */
- InitXmlComment( new, AST__XMLCOM, my_text, status );
-
-/* Free the memory */
- my_text = astFree( my_text );
-
-/* If an error occurred, delete the new structure. */
- if( !astOK ) {
- new = astXmlDelete( new );
-
-/* Otherwise, add the content item to the element. */
- } else {
- AddContent( this, where, (AstXmlContentItem *) new, status );
- }
-
-}
-
-AstXmlElement *astXmlAddElement_( AstXmlElement *this, const char *name,
- const char *prefix, int *status ){
-/*
-*+
-* Name:
-* astXmlAddElement
-
-* Purpose:
-* Create a new empty XmlElement and adds it to an XmlElement.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* AstXmlElement *astXmlAddElement( AstXmlElement *this, const char *name,
-* const char *prefix )
-
-* Description:
-* This function creates a new XmlElement structure representing an
-* empty XML element with the given name and namespace prefix, and
-* adds it into an existing element.
-
-* Parameters:
-* this
-* A pointer to the element to be modified. This may be NULL.
-* name
-* The name for the element.
-* prefix
-* The namespace prefix for the element. May be NULL or blank, in
-* which case any prefix at the start of "name" is used.
-
-* Returned Value:
-* A pointer to the new structure is returned. This pointer should be
-* freed using astXmlAnnul when no longer needed.
-
-* Notes:
-* - A NULL pointer is returned if the inherited status value
-* indicates an error has occurred on entry, or if this function
-* should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstXmlElement *new; /* The returned pointer */
-
-/* Initialise */
- new = NULL;
-
-/* Check the global error status. */
- if( !astOK ) return new;
-
-/* Allocate space for the new structure. */
- new = (AstXmlElement *) astMalloc( sizeof( AstXmlElement ) );
-
-/* Initialise it. */
- InitXmlElement( new, AST__XMLELEM, name, prefix, status );
-
-/* If an error occurred, delete the new structure. */
- if( !astOK ) {
- new = astXmlDelete( new );
-
-/* Otherwise, add the content item to the element. */
- } else {
- AddContent( (AstXmlParent *) this, 0, (AstXmlContentItem *) new, status );
- }
-
-/* Return the result. */
- return new;
-
-}
-
-void astXmlAddPI_( AstXmlParent *this, int where, const char *target, const char *text, int *status ){
-/*
-*+
-* Name:
-* astXmlAddPI
-
-* Purpose:
-* Create a new XmlPI and add it to an element or document.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* void astXmlAddPI( AstXmlParent *this, int where, const char *target,
-* const char *text )
-
-* Description:
-* This function creates a new XmlPI structure representing an
-* XML "programming instruction", and adds it into an existing element
-* or document.
-
-* Parameters:
-* this
-* Pointer to the element or document to be modified. This should
-* be a pointer to an XmlElement or an XmlDocument.
-* where
-* Ignored if "this" is an XmlElement pointer. Otherwise, "where"
-* indicates where the PI should be added to the document:
-* 1 - In the prologue, after the XML declaration but before the DTD.
-* 2 - In the prologue, after the DTD but before the root element.
-* 3 - In the epilogue, after the root element.
-* target
-* Pointer to a null terminated string containing the PI target.
-* text
-* Pointer to a null terminated string containing the PI text.
-
-*-
-*/
-
-/* Local Variables: */
- AstXmlPI *new; /* Pointer to the new structure */
- char *my_text; /* Cleaned text */
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Allocate space for the new structure. */
- new = (AstXmlPI *) astMalloc( sizeof( AstXmlPI ) );
-
-/* Clean the text. */
- my_text = CleanText( text, status );
-
-/* Initialise it. */
- InitXmlPI( new, AST__XMLPI, target, my_text, status );
-
-/* Free the memory */
- my_text = astFree( my_text );
-
-/* If an error occurred, delete the new structure. */
- if( !astOK ) {
- new = astXmlDelete( new );
-
-/* Otherwise, add the content item to the element. */
- } else {
- AddContent( this, where, (AstXmlContentItem *) new, status );
- }
-}
-
-void astXmlAddURI_( AstXmlElement *this, const char *prefix, const char *uri, int *status ){
-/*
-*+
-* Name:
-* astXmlAddURI
-
-* Purpose:
-* Add a namespace prefix definition to an XmlElement, or change the
-* default namespace.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* void astXmlAddURI( AstXmlElement *this, const char *prefix,
-* const char *uri )
-
-* Description:
-* This function adds a namespace prefix definition to a specified
-* XmlElement, or changes the default namespace. If the suppliedprefix
-* is already defined in the element, the associated URI is changed to
-* the supplied URI.
-
-* Parameters:
-* this
-* The pointer to the element to be modified.
-* prefix
-* Pointer to a null terminated string containing the namespace
-* prefix. If this is NULL or blank, then the supplied URI is used
-* as the default namespace for this element and all child elements
-* (except for child elements which define their own default
-* namespace).
-* uri
-* Pointer to a null terminated string containing the namespace URI.
-* If this is NULL or blank, and "prefix" is also NULL or blank, then
-* this has the same effect of there being no default namespace within
-* the supplied element.
-*-
-*/
-
-/* Local Variables: */
- AstXmlNamespace *ns; /* The new namespace definition */
- AstXmlNamespace *oldns; /* The existing namespace definition */
- int i; /* Loop index */
- int nc; /* Length of namespace prefix */
- int nnspref; /* Number of namespace defintions in the element */
- int oldi; /* Index of existing attribute */
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Initialise */
- oldns = NULL;
-
-/* Store the used length of the namespace prefix. */
- nc = prefix ? astChrLen( prefix ) : 0;
-
-/* If no namespace prefix has been supplied, just change the default
- namespace URI. */
- if( !nc ) {
- if( uri ) {
- this->defns = astStore( this->defns, uri, strlen( uri ) + 1 );
- } else {
- this->defns = astStore( this->defns, "", 1 );
- }
-
-/* Otherwise, add the namespace definition to the element. */
- } else {
-
-/* Create a new XmlNamespace. */
- ns = NewNamespace( prefix, uri, status );
-
-/* If OK, indicate that the namespace is owned by the element. */
- if( astOK ) {
- ( (AstXmlObject *) ns )->parent = (AstXmlParent *) this;
-
-/* Save the number of namespace definitions currently stored in the element. */
- nnspref = ( this->nsprefs ) ? this->nnspref : 0;
-
-/* Search the existing prefixes to see if a namespace with the given
- prefix already exists. */
- oldi = -1;
- for( i = 0; i < nnspref; i++ ) {
- oldns = this->nsprefs[ i ];
- if( !strcmp( oldns->prefix, ns->prefix ) ) {
- oldi = i;
- break;
- }
- }
-
-/* If there is an existing namespace with the same prefix, replace the old
- namespace with the new one created above. */
- if( oldi > -1 ){
- ((AstXmlObject *)oldns)->parent = NULL;
- oldns = astXmlAnnul( oldns );
- this->nsprefs[ oldi ] = ns;
-
-/* Otherwise, attempt to extend the array to hold an extra namespace definition. */
- } else {
- this->nsprefs = astGrow( this->nsprefs, nnspref + 1,
- sizeof( AstXmlNamespace * ) );
-
-/* Check all has gone OK. */
- if( astOK ) {
-
-/* Store the Namespace pointer in the array of Namespace pointers. */
- this->nsprefs[ nnspref ] = ns;
-
-/* Increment the number of namespaces in this element */
- this->nnspref = nnspref + 1;
- }
- }
- }
- }
-}
-
-void *astXmlAnnul_( AstXmlObject *this, int *status ){
-/*
-*+
-* Name:
-* astXmlAnnul
-
-* Purpose:
-* Free the resources used by an XmlObject.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* void *astXmlAnnul( AstXmlObject *this )
-
-* Description:
-* This function frees the resources used to hold the XmlObject, together
-* with any child objects contained within the supplied XmlObject. A NULL
-* pointer is always returned. If the supplied object is still in use
-* (that is, if its parent XmlElement still exists) then the resources
-* are not freed, and a copy of the supplied pointer is returned.
-
-* Parameters:
-* this
-* pointer to the XmlObject to be freed.
-
-* Returned Value:
-* A NULL pointer, or the supplied pointer if the XmlObject is still
-* in use.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-*-
-*/
-
-/* Return if a NULL pointer has been suppplied. */
- if( !this ) return NULL;
-
-/* Return the supplied pointer if the objects parent still exists. */
- if( this->parent &&
- astXmlCheckType( this->parent, AST__XMLPAR ) ) return this;
-
-#ifdef DEBUG
-/* Remove the supplied object from the list of currently active XmlObjects. */
- RemoveObjectFromList( this );
-#endif
-
-/* Clean the objects contents, and free the memory holding the XmlObject. */
- CleanXml( this, this->type, status );
- astFree( this );
-
-/* Return a NULL pointer. */
- return NULL;
-}
-
-void *astXmlAnnulTree_( AstXmlObject *this, int *status ){
-/*
-*+
-* Name:
-* astXmlAnnulTree
-
-* Purpose:
-* Free the resources used by a tree of XmlObjects.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* void *astXmlAnnulTree( AstXmlObject *this )
-
-* Description:
-* This function finds the head of the tree containing the supplied
-* XmlObject (either an XmlElement or an XmlDocument), and frees the
-* resources associated with all members of the tree. A NULL pointer
-* is always returned.
-
-* Parameters:
-* this
-* Pointer to a member of the tree of XmlObjects to be freed.
-
-* Returned Value:
-* A NULL pointer.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-*-
-*/
-
-/* Return if a NULL pointer has been suppplied. */
- if( !this ) return NULL;
-
-/* Find the root and annull it. This will free all children (i.e.
- the entire tree). */
- return astXmlAnnul( astXmlGetRoot( this ) );
-}
-
-AstXmlObject *astXmlCopy_( AstXmlObject *this, int *status ) {
-/*
-*+
-* Name:
-* astXmlCopy
-
-* Purpose:
-* Produce a deep copy of a supplied XmlObject.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* AstXmlObject *astXmlCopy( AstXmlObject *this )
-
-* Description:
-* This function returns a pointer to a deep copy of the supplied
-* XmlObject.
-
-* Parameters:
-* this
-* Pointer to the XmlObject to copy.
-
-* Returned Value:
-* Pointer to the new copy.
-
-* Notes:
-* - NULL is returned if NULL pointer is supplied.
-* - NULL is returned if an error has already occurred, or if this
-* function should fail for any reason.
-*-
-*/
-
-
-/* Local Variables: */
- AstXmlAttribute *attr;
- AstXmlBlack *black;
- AstXmlCDataSection *cdata;
- AstXmlComment *comm;
- AstXmlDTDec *dtd;
- AstXmlDeclPI *dec;
- AstXmlDocument *doc, *newdoc;
- AstXmlElement *elem, *newelem;
- AstXmlNamespace *ns;
- AstXmlObject *new;
- AstXmlPI *pi;
- AstXmlPrologue *pro, *newpro;
- AstXmlWhite *white;
- int i, type;
-
-/* Initialise */
- new = NULL;
-
-/* Check the global error status. */
- if( !astOK || !this ) return new;
-
-/* Initialise a new XmlObject of the required class, and copy any
- sub-objects. */
- type = this->type;
- if( type == AST__XMLELEM ){
- elem = (AstXmlElement *) this;
- new = astMalloc( sizeof( AstXmlElement ) );
- InitXmlElement( (AstXmlElement *) new, AST__XMLELEM,
- elem->name, elem->prefix, status );
-
- newelem = (AstXmlElement *) new;
-
- newelem->attrs = astMalloc( sizeof( AstXmlAttribute *) * (size_t)elem->nattr );
- newelem->nattr = elem->nattr;
- for( i = 0; i < elem->nattr; i++ ) {
- newelem->attrs[ i ] = (AstXmlAttribute *) astXmlCopy( elem->attrs[ i ] );
- ((AstXmlObject *) newelem->attrs[ i ])->parent = (AstXmlParent *) newelem;
- }
-
- newelem->items = astMalloc( sizeof( AstXmlContentItem *) * (size_t)elem->nitem );
- newelem->nitem = elem->nitem;
- for( i = 0; i < elem->nitem; i++ ) {
- newelem->items[ i ] = (AstXmlContentItem *) astXmlCopy( elem->items[ i ] );
- ((AstXmlObject *) newelem->items[ i ])->parent = (AstXmlParent *) newelem;
- }
-
- newelem->nsprefs = astMalloc( sizeof( AstXmlNamespace *) * (size_t)elem->nnspref );
- newelem->nnspref = elem->nnspref;
- for( i = 0; i < elem->nnspref; i++ ) {
- newelem->nsprefs[ i ] = (AstXmlNamespace *) astXmlCopy( elem->nsprefs[ i ] );
- ((AstXmlObject *) newelem->nsprefs[ i ])->parent = (AstXmlParent *) newelem;
- }
-
- if( elem->defns ) {
- newelem->defns = astStore( NULL, elem->defns,
- strlen( elem->defns ) + 1 );
- }
-
- newelem->complete = elem->complete;
-
-
- } else if( type == AST__XMLATTR ){
- attr = (AstXmlAttribute *) this;
- new = astMalloc( sizeof( AstXmlAttribute ) );
- InitXmlAttribute( (AstXmlAttribute *) new, AST__XMLATTR,
- attr->name, attr->value, attr->prefix, status );
-
- } else if( type == AST__XMLBLACK ){
- black = (AstXmlBlack *) this;
- new = astMalloc( sizeof( AstXmlBlack ) );
- InitXmlBlack( (AstXmlBlack *) new, AST__XMLBLACK,
- black->text, status );
-
- } else if( type == AST__XMLWHITE ){
- white = (AstXmlWhite *) this;
- new = astMalloc( sizeof( AstXmlWhite ) );
- InitXmlWhite( (AstXmlWhite *) new, AST__XMLWHITE,
- white->text, status );
-
- } else if( type == AST__XMLCDATA ){
- cdata = (AstXmlCDataSection *) this;
- new = astMalloc( sizeof( AstXmlCDataSection ) );
- InitXmlCDataSection( (AstXmlCDataSection *) new, AST__XMLCDATA,
- cdata->text, status );
-
- } else if( type == AST__XMLCOM ){
- comm = (AstXmlComment *) this;
- new = astMalloc( sizeof( AstXmlComment ) );
- InitXmlComment( (AstXmlComment *) new, AST__XMLCOM,
- comm->text, status );
-
- } else if( type == AST__XMLPI ){
- pi = (AstXmlPI *) this;
- new = astMalloc( sizeof( AstXmlPI ) );
- InitXmlPI( (AstXmlPI *) new, AST__XMLPI, pi->target, pi->text, status );
-
- } else if( type == AST__XMLNAME ){
- ns = (AstXmlNamespace *) this;
- new = astMalloc( sizeof( AstXmlNamespace ) );
- InitXmlNamespace( (AstXmlNamespace *) new, AST__XMLNAME, ns->prefix,
- ns->uri, status );
-
- } else if( type == AST__XMLDOC ){
- doc = (AstXmlDocument *) this;
- new = astMalloc( sizeof( AstXmlDocument ) );
- InitXmlDocument( (AstXmlDocument *) new, AST__XMLDOC, status );
-
- newdoc = (AstXmlDocument *) new;
-
- if( doc->prolog ) {
- newdoc->prolog = (AstXmlPrologue *) astXmlCopy( doc->prolog );
- ((AstXmlObject *) newdoc->prolog)->parent = (AstXmlParent *) newdoc;
- }
-
- if( doc->root ) {
- newdoc->root = (AstXmlElement *) astXmlCopy( doc->root );
- ((AstXmlObject *) newdoc->root)->parent = (AstXmlParent *) newdoc;
- }
-
- newdoc->epilog = astMalloc( sizeof( AstXmlMiscItem *) * (size_t)doc->nepi );
- newdoc->nepi = doc->nepi;
- for( i = 0; i < doc->nepi; i++ ) {
- newdoc->epilog[ i ] = (AstXmlMiscItem *) astXmlCopy( doc->epilog[ i ] );
- ((AstXmlObject *) newdoc->epilog[ i ])->parent = (AstXmlParent *) newdoc;
- }
-
- newdoc->current = NULL;
-
- } else if( type == AST__XMLPRO ){
- pro = (AstXmlPrologue *) this;
- new = astMalloc( sizeof( AstXmlPrologue ) );
- InitXmlPrologue( (AstXmlPrologue *) new, AST__XMLPRO, status );
-
- newpro = (AstXmlPrologue *) new;
-
- if( pro->xmldecl ) {
- newpro->xmldecl = (AstXmlDeclPI *) astXmlCopy( pro->xmldecl );
- ((AstXmlObject *) newpro->xmldecl)->parent = (AstXmlParent *) newpro;
- }
-
- if( pro->dtdec ) {
- newpro->dtdec = (AstXmlDTDec *) astXmlCopy( pro->dtdec );
- ((AstXmlObject *) newpro->dtdec)->parent = (AstXmlParent *) newpro;
- }
-
- newpro->misc1 = astMalloc( sizeof( AstXmlMiscItem *) * (size_t)pro->nmisc1 );
- newpro->nmisc1 = pro->nmisc1;
- for( i = 0; i < pro->nmisc1; i++ ) {
- newpro->misc1[ i ] = (AstXmlMiscItem *) astXmlCopy( pro->misc1[ i ] );
- ((AstXmlObject *) newpro->misc1[ i ])->parent = (AstXmlParent *) newpro;
- }
-
- newpro->misc2 = astMalloc( sizeof( AstXmlMiscItem *) * (size_t)pro->nmisc2 );
- newpro->nmisc2 = pro->nmisc2;
- for( i = 0; i < pro->nmisc2; i++ ) {
- newpro->misc2[ i ] = (AstXmlMiscItem *) astXmlCopy( pro->misc2[ i ] );
- ((AstXmlObject *) newpro->misc2[ i ])->parent = (AstXmlParent *) newpro;
- }
-
- } else if( type == AST__XMLDEC ){
- dec = (AstXmlDeclPI *) this;
- new = astMalloc( sizeof( AstXmlDeclPI ) );
- InitXmlDeclPI( (AstXmlDeclPI *) new, AST__XMLDEC, dec->text, status );
-
- } else if( type == AST__XMLDTD ){
- dtd = (AstXmlDTDec *) this;
- new = astMalloc( sizeof( AstXmlDTDec ) );
- InitXmlDTDec( (AstXmlDTDec *) new, AST__XMLDTD, dtd->name,
- dtd->external, dtd->internal, status );
-
- } else if( astOK ) {
- astError( AST__INTER, "CopyXml: Invalid object type (%d) supplied "
- "(internal AST programming error).", status, type );
- }
-
-/* If an error occurred, delete the new structure. */
- if( !astOK ) new = astXmlDelete( new );
-
-/* Return the result. */
- return new;
-}
-
-const char *astXmlFormat_( AstXmlObject *this, int *status ) {
-/*
-*+
-* Name:
-* astXmlFormat
-
-* Purpose:
-* Converts an XmlObject into a character string.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* const char *astXmlFormat( AstXmlObject *this )
-
-* Description:
-* This function returns a pointer to a dynamically allocated string
-* containing a textual representation of the supplied XmlObject.
-
-* Parameters:
-* this
-* Pointer to the XmlObject to format.
-
-* Returned Value:
-* Pointer to a null terminated string holding the formated XmlObject.
-* This string should be freed when no longer needed using astFree.
-
-* Notes:
-* - No newlines or indentation strings are added to the returned string.
-* - NULL is returned if NULL pointer is supplied.
-* - NULL is returned if an error has already occurred, or if this
-* function should fail for any reason.
-*-
-*/
- return Format( this, -1, status );
-}
-
-const char *astXmlGetAttributeValue_( AstXmlElement *this, const char *name, int *status ){
-/*
-*+
-* Name:
-* astXmlGetAttributeValue
-
-* Purpose:
-* Return a pointer to a string holding the value of a named attribute.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* const char *astXmlGetAttributeValue( AstXmlElement *this, const char *name )
-
-* Description:
-* This function returns a pointer to a constant string holding the
-* value of a named attribute of a supplied element. If the element
-* does not have the named attribute, a NULL pointer is returned but
-* no error is reported.
-
-* Parameters:
-* this
-* The pointer to the XmlElement.
-* name
-* Pointer to a string holding the name of the attribute. The name
-* may be preceeded with a "prefix:" string, in which case the
-* prefix will also be matched. If no prefix is included, the first
-* attribute with the specified name is returned, regardless of
-* its prefix.
-
-* Returned Value:
-* Pointer to a string holding the value of the attribute within the
-* supplied element, or NULL if the attribute was not found.
-
-* Notes:
-* - NULL is returned if an error has already occurred, or if this
-* function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- const char *result; /* Returned pointer */
- AstXmlAttribute *attr; /* Pointer to the attribute */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if( !astOK ) return result;
-
-/* Find the attribute. */
- attr = FindAttribute( this, name, status );
-
-/* Get its value. */
- if( attr ) result = attr->value;
-
-/* Return the result. */
- return result;
-}
-
-AstXmlContentItem *astXmlGetItem_( AstXmlElement *this, int item, int *status ){
-/*
-*+
-* Name:
-* astXmlGetItem
-
-* Purpose:
-* Return a specified item of the content of an element.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* AstXmlContentItem *astXmlGetItem( AstXmlElement *this, int item )
-
-* Description:
-* This function returns a pointer to an item of the content of the
-* specified element.
-
-* Parameters:
-* this
-* The pointer to the XmlElement.
-* item
-* The index of the required item, in the range zero to "nitem-1",
-* where "nitem" is the number of items in the element as returned
-* by astXmlGetNitem. An error is reported if the specified index
-* is out of bounds.
-
-* Returned Value:
-* A pointer to the requested item.
-
-* Notes:
-* - NULL is returned if an error has already occurred, or if this
-* function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstXmlContentItem *result; /* The returned pointer */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if( !astOK ) return result;
-
-/* Report an error if the supplie dindex is bad. */
- if( this->nitem == 0 ) {
- astError( AST__XMLIT, "astXmlGetItem(xml): The supplied item index (%d) "
- "is out of bounds. The supplied XmlObject has no content.", status,
- item );
-
- } else if( item < 0 || item >= this->nitem ) {
- astError( AST__XMLIT, "astXmlGetItem(xml): The supplied item index (%d) "
- "is out of bounds. Should be in the range 0 to %d.", status,
- item, this->nitem-1 );
- } else {
- result = this->items[ item ];
- }
-
-/* Return the result. */
- return result;
-}
-
-const char *astXmlGetName_( AstXmlObject *this, int *status ){
-/*
-*+
-* Name:
-* astXmlGetName
-
-* Purpose:
-* Return a pointer to a string holding the name of an XmlObject.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* const char *astXmlGetName( AstXmlObject *this )
-
-* Description:
-* This function returns a pointer to a constant string holding the
-* name associated with an XmlObject. For elements and attributes, the
-* "name" value is returned. For PI elements, the "target" value is
-* returned. For namespace definitions, the "prefix" value is returned.
-* An error is reported if the supplied XmlObject is of any other class.
-
-* Parameters:
-* this
-* The pointer to the XmlObject.
-
-* Returned Value:
-* Pointer to the name string within the XML object.
-
-* Notes:
-* - NULL is returned if an error has already occurred, or if this
-* function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- const char *result; /* Returned pointer */
- int type; /* Object type */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if( !astOK ) return result;
-
-/* Return the relevant component of the structure, depending on its type. */
- type = this->type;
- if( type == AST__XMLELEM ){
- result = ( (AstXmlElement *) this )->name;
-
- } else if( type == AST__XMLATTR ){
- result = ( (AstXmlAttribute *) this )->name;
-
- } else if( type == AST__XMLPI ){
- result = ( (AstXmlPI *) this )->target;
-
- } else if( type == AST__XMLNAME ){
- result = ( (AstXmlNamespace *) this )->prefix;
-
- } else {
- astError( AST__INTER, "astXmlGetName: Inappropriate object type (%d) supplied "
- "(internal AST programming error).", status, type );
- }
-
-/* Return the result. */
- return result;
-}
-
-int astXmlGetNattr_( AstXmlElement *this, int *status ){
-/*
-*+
-* Name:
-* astXmlGetNattr
-
-* Purpose:
-* Return the number of attributes held by an element.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* int astXmlGetNattr( AstXmlElement *this )
-
-* Description:
-* This function returns the number of attributes held by an element.
-
-* Parameters:
-* this
-* The pointer to the XmlElement.
-
-* Returned Value:
-* The number of attributes held by the supplied element.
-
-* Notes:
-* - Zero is returned if an error has already occurred, or if this
-* function should fail for any reason.
-*-
-*/
-
-/* Check the global error status. */
- if( !astOK ) return 0;
-
-/* Return the result. */
- return ( this->attrs ) ? this->nattr : 0;
-}
-
-int astXmlGetNitem_( AstXmlElement *this, int *status ){
-/*
-*+
-* Name:
-* astXmlGetNitem
-
-* Purpose:
-* Return the number of items within the content of an element.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* int astXmlGetNitem( AstXmlElement *this )
-
-* Description:
-* This function returns the number of items within the content of an
-* XmlElement.
-
-* Parameters:
-* this
-* The pointer to the XmlElement.
-
-* Returned Value:
-* The number of items in the content of the supplied element.
-
-* Notes:
-* - Zero is returned if an error has already occurred, or if this
-* function should fail for any reason.
-*-
-*/
-
-/* Check the global error status. */
- if( !astOK ) return 0;
-
-/* Return the result. */
- return this->nitem;
-}
-
-AstXmlParent *astXmlGetParent_( AstXmlObject *this, int *status ){
-/*
-*+
-* Name:
-* astXmlGetParent
-
-* Purpose:
-* Return a pointer to the object which contains the supplied XmlObject.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* AstXmlParent *astXmlGetParent( AstXmlObject *this )
-
-* Description:
-* This function returns a pointer to the XmlParent object (either an
-* XmlElement or an XmlDocument) which contains the specified XmlObject.
-* The object can be a content item (an element, a comment, a CDATA
-* section, a PI, or character data) in which case the enclosing
-* XmlElement is returned, or an attribute or namespace definition in
-* which case the XmlElement to which object refers is returned.
-* If "this" is the root element of a document, a pointer to the
-* XmlDocument is returned.
-
-
-* Parameters:
-* this
-* The pointer to check.
-
-* Returned Value:
-* Pointer to the parent, or NULL if the object does not have a parent.
-
-* Notes:
-* - NULL is returned if an error has already occurred, or if this
-* function should fail for any reason.
-*-
-*/
-
-/* Check the global error status. */
- if( !astOK ) return NULL;
-
-/* Return the result. */
- return this->parent;
-}
-
-AstXmlObject *astXmlGetRoot_( AstXmlObject *this, int *status ){
-/*
-*+
-* Name:
-* astXmlGetRoot
-
-* Purpose:
-* Return a pointer to the root XmlObject which contains the supplied
-* XmlObject.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* AstXmlObject *astXmlGetRoot( AstXmlObject *this )
-
-* Description:
-* This function returns a pointer to the XmlObject which is the root of
-* the tree containing the specified XmlObject. A pointer to the
-* supplied XmlObject is returned if it has no parent.
-
-* Parameters:
-* this
-* The pointer to check.
-
-* Returned Value:
-* Pointer to the root XmlObject, or a copy of the supplied pointer if
-* the supplied XmlObject is the root.
-
-* Notes:
-* - NULL is returned if an error has already occurred, or if this
-* function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstXmlObject *result;
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if( !astOK ) return result;
-
-/* If "this" is a document, check it has no parent. If not, return a
- pointer ot it. */
- if( astXmlCheckType( this, AST__XMLDOC ) ) {
- if( this->parent ) {
- astError( AST__INTER, "astXmlGetRoot(xml): An XmlDocument has a "
- "non-null parent of type %ld (internal AST programming "
- "error).", status, this->type );
- } else {
- result = (AstXmlObject *) this;
- }
-
-/* Otherwise... */
- } else if( this->parent ) {
- result = astXmlGetRoot( this->parent );
-
- } else {
- result = this;
- }
-
-/* Return the result. */
- return result;
-}
-
-const char *astXmlGetTag_( AstXmlObject *this, int opening, int *status ){
-/*
-*+
-* Name:
-* astXmlGetTag
-
-* Purpose:
-* Returns a string holding an XML tag describing the given XmlObject.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* const char *astXmlGetTag( AstXmlObject *this, int opening )
-
-* Description:
-* This function returns a pointer to a static string containing an
-* XML tag describing the given XmlObject.
-
-* Parameters:
-* this
-* Pointer to the XmlObject.
-* opening
-* Indicates which tag is to be returned; the start tag or the end
-* tag. If non-zero the start tag is returned. Otherwise, the
-* end tag is returned. If the supplied XmlObject has no end
-* tag (i.e. if it is an empty element, or if it is not an element),
-* then NULL is returned but no error is reported.
-
-* Returned Value:
-* Pointer to a null terminated string holding the tag. If the tag
-* exceeds 200 characters, only the first 197 characters are returned
-* and "..." is appended to the end.
-
-* Notes:
-* - Subsequent invocations of this function will over-write the
-* buffer which used to hold the returned string.
-* - Empty elements are represented as an start tag of the form <.../>,
-* with no corresponding end tag.
-* - NULL is returned if an error has already occurred, or if this
-* function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- char *result; /* The returned pointer */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if( !astOK ) return result;
-
-/* If needed, get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Get a dynamic string holding the formatted tag. */
- result = FormatTag( this, opening, status );
-
-/* If OK, copy the result into the static buffer. */
- gettag_buff[ 0 ] = 0;
- if( result ) {
- if( astOK ) {
-
- if( strlen( result ) > AST__XML_GETTAG_BUFF_LEN ) {
- strncpy( gettag_buff, result, AST__XML_GETTAG_BUFF_LEN -3 );
- strcpy( gettag_buff + AST__XML_GETTAG_BUFF_LEN - 3, "..." );
- } else {
- strncpy( gettag_buff, result, AST__XML_GETTAG_BUFF_LEN );
- }
-
- gettag_buff[ AST__XML_GETTAG_BUFF_LEN ] = 0;
- astFree( result );
- result = gettag_buff;
- } else {
- result = astFree( result );
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-const char *astXmlGetType_( AstXmlObject *this, int *status ){
-/*
-*+
-* Name:
-* astXmlGetType
-
-* Purpose:
-* Returns a string holding the type of the given XmlObject.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* const char *astXmlGetType( AstXmlObject *this )
-
-* Description:
-* This function returns a pointer to a static string containing the
-* type of the given XmlObject.
-
-* Parameters:
-* this
-* Pointer to the XmlObject.
-
-* Returned Value:
-* Pointer to a null terminated string holding the type string.
-
-* Notes:
-* - NULL is returned if an error has already occurred, or if this
-* function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- const char *result; /* The returned pointer */
- int type; /* Element type */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if( !astOK ) return result;
-
- type = this->type;
- if( type == AST__XMLELEM ) {
- result = "element";
-
- } else if( type == AST__XMLATTR ) {
- result = "attribute";
-
- } else if( type == AST__XMLCDATA ) {
- result = "CDATA section";
-
- } else if( type == AST__XMLCOM ) {
- result = "comment";
-
- } else if( type == AST__XMLPI ) {
- result = "processing instruction";
-
- } else if( type == AST__XMLNAME ) {
- result = "namespace";
-
- } else if( type == AST__XMLDOC ) {
- result = "document";
-
- } else if( type == AST__XMLPRO ) {
- result = "prologue";
-
- } else if( type == AST__XMLDEC ) {
- result = "XML delaration PI";
-
- } else if( type == AST__XMLDTD ) {
- result = "DTD";
-
- } else if( type == AST__XMLWHITE ) {
- result = "white-space character data ";
-
- } else if( type == AST__XMLBLACK ) {
- result = "non-blank character data";
-
- } else {
- result = "unknown XML object";
- }
-
-/* Return the result. */
- return result;
-}
-
-const char *astXmlGetURI_( AstXmlObject *this, int *status ){
-/*
-*+
-* Name:
-* astXmlGetURI
-
-* Purpose:
-* Return a pointer to a string holding the namespace URI of an XmlObject.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* const char *astXmlGetURI( AstXmlObject *this )
-
-* Description:
-* This function returns a pointer to a constant string holding the
-* namespace URI associated with an XmlObject. Only attributes,
-* elements and namespaces have associated URIs, so a NULL pointer is
-* returned for any other class of XmlObject. A NULL pointer is also
-* returned if XmlObject does not belong to any namespace, or if it
-* belongs to a unknown namespace (i.e. one for which no URI is
-* available). Any namespace prefix attached to the supplied object is
-* resolved first using any "xmlns" attributes contained in the same
-* element, then using any "xmlns" attributes contained in the parent
-* element, etc.
-
-* Parameters:
-* this
-* The pointer to the XmlObject.
-
-* Returned Value:
-* Pointer to a string holding the namespace URI, or NULL.
-
-* Notes:
-* - NULL is returned if an error has already occurred, or if this
-* function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- const char *prefix; /* Namespace prefix */
- const char *result; /* Returned pointer */
- int type; /* Object type */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if( !astOK ) return result;
-
-/* Do each type of object separately. */
- type = this->type;
- if( type == AST__XMLATTR ){
- prefix = ( (AstXmlAttribute *) this )->prefix;
-
-/* Attributes have no default name space. Therefore if there is no prefix,
- return NULL. If there is a prefix, resolve it within the context of
- the attributes parent element. */
- if( prefix ) {
- result = ResolvePrefix( prefix, (AstXmlElement *) this->parent, status );
- }
-
- } else if( type == AST__XMLELEM ){
- prefix = ( (AstXmlElement *) this )->prefix;
-
-/* If there is a prefix, resolve it within the context of this element. */
- if( prefix ) {
- result = ResolvePrefix( prefix, (AstXmlElement *) this, status );
-
-/* Elements do have a default name space. Therefore if there is no prefix,
- return the default name space within the context of this element. */
- } else {
- result = DefaultURI( (AstXmlElement *) this, status );
- }
-
-/* If the supplied object is a namespace, just return the associated URI. */
- } else if( type == AST__XMLNAME ){
- result = ( (AstXmlNamespace *) this )->uri;
-
- }
-
-/* Return the result. */
- return result;
-}
-
-const char *astXmlGetValue_( AstXmlObject *this, int report, int *status ){
-/*
-*+
-* Name:
-* astXmlGetValue
-
-* Purpose:
-* Return a pointer to a string holding the value of an XmlObject.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* const char *astXmlGetValue( AstXmlObject *this, int report )
-
-* Description:
-* This function returns a pointer to a constant string holding the
-* value associated with an XmlObject. For attributes, the attribute value
-* is returned. For PI elements, the "text" value is returned. For
-* namespace definitions, the "URI" value is returned. For character
-* data, the character data is returned. For CDATA sections the "text"
-* value is returned. For comments, the "text" value is returned.
-* If the XmlObject is an element, then a non-NULL value is returned
-* only if the element contains a single content item holding character
-* data. In this case a pointer to the character data is returned.
-* A null value is returned in all other cases (but no error is
-* reported unless "report" is non-zero).
-
-* Parameters:
-* this
-* The pointer to the XmlObject.
-* report
-* Report an error if the supplied XmlObject does not have a value?
-
-* Returned Value:
-* Pointer to a string holding the value of the XML object.
-
-* Notes:
-* - NULL is returned if an error has already occurred, or if this
-* function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstXmlContentItem *item;/* Element content */
- const char *result; /* Returned pointer */
- int type; /* Object type */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if( !astOK ) return result;
-
-/* Return the relevant component of the structure, depending on its type. */
- type = this->type;
- if( type == AST__XMLATTR ){
- result = ( (AstXmlAttribute *) this )->value;
-
- } else if( type == AST__XMLBLACK ){
- result = ( (AstXmlBlack *) this )->text;
-
- } else if( type == AST__XMLWHITE ){
- result = ( (AstXmlWhite *) this )->text;
-
- } else if( type == AST__XMLCDATA ){
- result = ( (AstXmlCDataSection *) this )->text;
-
- } else if( type == AST__XMLCOM ){
- result = ( (AstXmlComment *) this )->text;
-
- } else if( type == AST__XMLPI ){
- result = ( (AstXmlPI *) this )->text;
-
- } else if( type == AST__XMLNAME ){
- result = ( (AstXmlNamespace *) this )->uri;
-
- } else if( type == AST__XMLELEM ){
- if( astXmlGetNitem( (AstXmlElement *) this ) == 1 ) {
- item = astXmlGetItem( (AstXmlElement *) this, 0 );
- if( astXmlCheckType( item, AST__XMLCHAR ) ) {
- result = astXmlGetValue( item, report );
- }
- }
-
- if( !result && astOK && report ) {
- astError( AST__BADIN, "astRead(xml): Cannot get the value of "
- "element \"<%s>\": its contents are not pure character "
- "data.", status, astXmlGetName( this ) );
- }
-
- } else if( report ) {
- astError( AST__INTER, "astXmlGetValue(xml): Cannot get the value of "
- "an XmlObject of type %d (internal AST programming "
- "error).", status, type );
- }
-
-/* Return the result. */
- return result;
-}
-
-void astXmlInsertElement_( AstXmlElement *this, AstXmlElement *elem, int *status ){
-/*
-*+
-* Name:
-* astXmlInsertElement
-
-* Purpose:
-* Inserts an existing XmlElement into another XmlElement.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* void astXmlInsertElement( AstXmlElement *this, AstXmlElement *elem )
-
-* Description:
-* This function inserts a given XmlElement "elem" into another given
-* XmlElement "this". An error is reported if "elem" already has a
-* parent.
-
-* Parameters:
-* this
-* A pointer to the element to be modified.
-* elem
-* The element to be inserted into "this".
-
-*-
-*/
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Report AN error if "elem" has already been inserted into
- another element. */
- if( ((AstXmlObject *) elem)->parent ) {
- astError( AST__INTER, "astXmlInsertElement(xml): Cannot insert \"%s\" "
- "into \"%s\" because it already has a parent (\"%s\") "
- "(internal AST programming error).", status,
- astXmlGetTag( elem, 1 ), astXmlGetTag( this, 1 ),
- astXmlGetTag( ((AstXmlObject *) elem)->parent, 1 ) );
-
-/* Otherwise, add the content item to the element. */
- } else {
- AddContent( (AstXmlParent *) this, 0, (AstXmlContentItem *) elem, status );
- }
-}
-
-void astXmlPurge_( AstXmlParent *this, int *status ) {
-/*
-*+
-* Name:
-* astXmlPurge
-
-* Purpose:
-* Remove blank content from a parent object.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* void astXmlPurge( AstXmlParent *this )
-
-* Description:
-* This function removes all character data containing only whitespace
-* from the supplied document or element. It is recursive, in that it also
-* removes white space from all children elements.
-
-* Parameters:
-* this
-* Pointer to the document or element.
-
-*-
-*/
-
-/* Local Variables: */
- int i; /* Content item index */
- AstXmlContentItem *item; /* Next content item */
- AstXmlMiscItem *misc; /* Nest miscalleneous item */
- AstXmlDocument *doc; /* This document */
- AstXmlPrologue *pro; /* This document prologue */
- AstXmlElement *elem; /* This element */
-
-/* Check the global error status. */
- if( !astOK || !this ) return;
-
-/* If this is a a document.. */
- if( astXmlCheckType( this, AST__XMLDOC ) ) {
- doc = (AstXmlDocument *) this;
- astXmlPurge( doc->prolog );
- astXmlPurge( doc->root );
-
- i = -1;
- while( ++i < doc->nepi ) {
- misc = doc->epilog[ i ];
- if( astXmlCheckType( misc, AST__XMLWHITE ) ) {
- misc = astXmlDelete( misc );
- i--;
- }
- }
-
-/* If this is a prologue.. */
- } else if( astXmlCheckType( this, AST__XMLPRO ) ) {
- pro = (AstXmlPrologue *) this;
-
- i = -1;
- while( ++i < pro->nmisc1 ) {
- misc = pro->misc1[ i ];
- if( astXmlCheckType( misc, AST__XMLWHITE ) ) {
- misc = astXmlDelete( misc );
- i--;
- }
- }
-
- i = -1;
- while( ++i < pro->nmisc2 ) {
- misc = pro->misc2[ i ];
- if( astXmlCheckType( misc, AST__XMLWHITE ) ) {
- misc = astXmlDelete( misc );
- i--;
- }
- }
-
-
-/* If this is an element */
- } else if( astXmlCheckType( this, AST__XMLELEM ) ) {
- elem = (AstXmlElement *) this;
-
- i = -1;
- while( ++i < elem->nitem ) {
- item = elem->items[ i ];
-
- if( astXmlCheckType( item, AST__XMLWHITE ) ) {
- item = astXmlDelete( item );
- i--;
-
- } else if( astXmlCheckType( item, AST__XMLELEM ) ) {
- astXmlPurge( (AstXmlParent *) item );
- }
- }
- }
-}
-
-void astXmlRemoveAttr_( AstXmlElement *this, const char *name,
- const char *prefix, int *status ){
-/*
-*+
-* Name:
-* astXmlRemoveAttr
-
-* Purpose:
-* Removes an attribute from its parent element.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* void astXmlRemoveAttr( AstXmlElement *this, const char *name,
-* const char *prefix )
-
-* Description:
-* This function removes a named attribute from its parent element.
-
-* Parameters:
-* this
-* The pointer to the element containing the attribute to be removed.
-* name
-* Pointer to a null terminated string containing the attribute name.
-* prefix
-* The namespace prefix for the attribute. May be NULL or blank, in
-* which case any prefix at the start of "name" is used.
-*-
-*/
-
-/* Local Variables: */
- AstXmlAttribute *attr; /* Pointer to temporary attribute structure */
- AstXmlAttribute *oldattr; /* Pointer to existing attribute */
- int i; /* Attribute index */
- int nattr; /* Number of attributes in parent */
- int oldi; /* Indexof existing attribute */
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Initialise */
- oldattr = NULL;
-
-/* Create a new XmlAttribute with blank value. */
- attr = NewAttribute( name, "", prefix, status );
- if( astOK ) {
-
-/* Get the number of attributes currently stored in the element. */
- nattr = ( this->attrs ) ? this->nattr : 0;
-
-/* Search the existing attributes to see if an attribute with the given
- name and prefix already exists. */
- oldi = -1;
- for( i = 0; i < nattr; i++ ) {
- oldattr = this->attrs[ i ];
- if( !strcmp( oldattr->name, attr->name ) ) {
- if( !oldattr->prefix && !attr->prefix ) {
- oldi = i;
- break;
- } else if( oldattr->prefix && attr->prefix &&
- !strcmp( oldattr->prefix, attr->prefix ) ){
- oldi = i;
- break;
- }
- }
- }
-
-/* If there is an existing attribute with the same name and prefix,
- delete it. */
- if( oldi > -1 ) astXmlDelete( oldattr );
-
-/* Delete the temporary attribute structure. */
- attr = astXmlDelete( attr );
-
- }
-}
-
-void astXmlRemoveItem_( AstXmlContentItem *this, int *status ){
-/*
-*+
-* Name:
-* astXmlRemoveItem
-
-* Purpose:
-* Removes an item of content from its parent element or document.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* void astXmlRemoveItem( AstXmlContentItem *this )
-
-* Description:
-* This function removes an item of content from its parent element,
-* or removes the root element from a document. The removed item is not
-* annulled and may be subsequently added into another element.
-
-* Parameters:
-* this
-* The pointer to the item to be removed form its parent.
-*-
-*/
-
-/* Local Variables: */
- AstXmlDocument *doc; /* Pointer to parent document */
- AstXmlElement *elem; /* Pointer to parent element */
- AstXmlParent *parent; /* Pointer to parent */
- int found; /* Was the item found within its parent? */
- int i; /* Item index */
- int j; /* Item index */
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Get a pointer to the items parent element, and check it is not null. */
- parent = ( (AstXmlObject *) this )->parent;
- if( parent && astXmlCheckType( parent, AST__XMLELEM ) ) {
- elem = (AstXmlElement *) parent;
-
-/* Search through all the items within the parent element looking for the
- supplied item. */
- found = 0;
- for( i = 0; i < elem->nitem; i++ ) {
- if( elem->items[ i ] == this ) {
-
-/* When found, decrement the number of items in the element, and shuffle
- all the remaining item pointers down one slot to over-write it, then
- nullify the parent pointer in the supplied object and leave the loop. */
- (elem->nitem)--;
- for( j = i; j < elem->nitem; j++ ) {
- elem->items[ j ] = elem->items[ j + 1 ];
- }
- ( (AstXmlObject *) this )->parent = NULL;
- found = 1;
- break;
- }
- }
-
-/* Report an error if the item was not found. */
- if( !found ) {
- astError( AST__INTER, "astXmlRemoveItem: The parent of the supplied "
- "item does not contain the item (internal AST programming "
- "error)." , status);
- }
-
-/* If the parent is an XmlDocument, check the item being removed is the
- root element. */
- } else if( parent && astXmlCheckType( parent, AST__XMLDOC ) ) {
- doc = (AstXmlDocument *) parent;
- if( (AstXmlElement *) this == doc->root ) {
- ( (AstXmlObject *) this )->parent = NULL;
- doc->root = NULL;
- }
- }
-}
-
-void astXmlRemoveURI_( AstXmlElement *this, const char *prefix, int *status ){
-/*
-*+
-* Name:
-* astXmlRemoveURI
-
-* Purpose:
-* Removes an namespace prefix from its parent element.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* void astXmlRemoveURI( AstXmlElement *this, const char *prefix )
-
-* Description:
-* This function removes a named namespace prefix from its parent element.
-
-* Parameters:
-* this
-* The pointer to the element containing the namespace prefix to be
-* removed.
-* prefix
-* The namespace prefix to remove.
-*-
-*/
-
-/* Local Variables: */
- AstXmlNamespace *ns; /* Temporary namespace structure */
- AstXmlNamespace *oldns; /* Pointer to existing namespace */
- int oldi; /* Index of namespace within its parent */
- int i; /* Namespace index */
- int nns; /* Number of existing namespaces */
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Initialise */
- oldns = NULL;
-
-/* Create a new XmlNamespace with blank URI. */
- ns = NewNamespace( prefix, "", status );
- if( astOK ) {
-
-/* Get the number of namespace prefixes currently stored in the element. */
- nns = ( this->nsprefs ) ? this->nnspref : 0;
-
-/* Search the list of existing namespace prefixes to see if the given prefix
- is included. */
- oldi = -1;
- for( i = 0; i < nns; i++ ) {
- oldns = this->nsprefs[ i ];
- if( !strcmp( oldns->prefix, ns->prefix ) ){
- oldi = i;
- break;
- }
- }
-
-/* If the supplied namespace prefix was found in the list, delete it. */
- if( oldi > -1 ) astXmlDelete( oldns );
-
-/* Delete the temporary namespace structure. */
- ns = astXmlDelete( ns );
-
- }
-}
-
-void astXmlSetDTDec_( AstXmlDocument *this, const char *text1,
- const char *text2, const char *text3, int *status ){
-/*
-*+
-* Name:
-* astXmlSetDTDec
-
-* Purpose:
-* Set the Document Type declaration for a document.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* void astXmlSetDTDEC( AstXmlDocument *this, const char *text1,
-* const char *text2, const char *text3 )
-
-* Description:
-* This function stores an Document Type declaration of the form
-*
-* <!DOCTYPE text1 text2 [text3]>
-*
-* in the supplied document. Any previous DTD is removed.
-
-* Parameters:
-* this
-* The pointer to the document.
-* text1
-* The document type name.
-* text2
-* The text defining the external elements of the document type
-* (may be NULL).
-* text3
-* The text defining the internal elements of the document type
-* (may be NULL). Do not include delimiting "[" and "]" characters.
-*-
-*/
-
-/* Local Variables: */
- AstXmlDTDec *new; /* Pointer to new DT declaration */
- AstXmlPrologue *pro; /* Pointer to prologue */
- char *my_text2; /* Cleaned text2 */
- char *my_text3; /* Cleaned text3 */
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Allocate space for the new structure. */
- new = (AstXmlDTDec *) astMalloc( sizeof( AstXmlDTDec ) );
-
-/* Clean the text. */
- my_text2 = CleanText( text2, status );
- my_text3 = CleanText( text3, status );
-
-/* Initialise it. */
- InitXmlDTDec( new, AST__XMLDTD, text1, my_text2, my_text3, status );
-
-/* Free the memory */
- my_text2 = astFree( my_text2 );
- my_text3 = astFree( my_text3 );
-
-/* If an error occurred, delete the new structure. */
- if( !astOK ) {
- new = astXmlDelete( new );
-
-/* Otherwise, store it in the document, deleting any existing declaration
- first. */
- } else {
-
-/* Create a prologue if necessary. */
- if( !this->prolog ) this->prolog = NewPrologue( this, status );
-
- pro = this->prolog;
- if( pro->dtdec ) astXmlDelete( pro->dtdec );
- pro->dtdec = new;
- }
-}
-
-void astXmlSetXmlDec_( AstXmlDocument *this, const char *text, int *status ){
-/*
-*+
-* Name:
-* astXmlSetXmlDec
-
-* Purpose:
-* Set the XML declaration for a document.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* void astXmlSetXmlDec( AstXmlDocument *this, const char *text )
-
-* Description:
-* This function stores an XML declaration of the form
-*
-* <?xml [text]?>
-*
-* in the supplied document. Any previous XML declaration is removed.
-
-* Parameters:
-* this
-* The pointer to the document.
-* text
-* The text to include in the XML declaration tag.
-*-
-*/
-
-/* Local Variables: */
- AstXmlDeclPI *new; /* Pointer to new XML delcaration */
- AstXmlPrologue *pro; /* Pointer to prologue */
- char *my_text; /* Cleaned text */
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Allocate space for the new structure. */
- new = (AstXmlDeclPI *) astMalloc( sizeof( AstXmlDeclPI ) );
-
-/* Clean the text. */
- my_text = CleanText( text, status );
-
-/* Initialise it. */
- InitXmlDeclPI( new, AST__XMLDEC, my_text, status );
-
-/* Free the memory */
- my_text = astFree( my_text );
-
-/* If an error occurred, delete the new structure. */
- if( !astOK ) {
- new = astXmlDelete( new );
-
-/* Otherwise, store it in the document, deleting any existing declaration
- first. */
- } else {
-
-/* Create a prologue if necessary. */
- if( !this->prolog ) this->prolog = NewPrologue( this, status );
-
- pro = this->prolog;
- if( pro->xmldecl ) astXmlDelete( pro->xmldecl );
- pro->xmldecl = new;
- }
-}
-
-const char *astXmlShow_( AstXmlObject *this, int *status ) {
-/*
-*+
-* Name:
-* astXmlShow
-
-* Purpose:
-* Converts an XmlObject into a character string with indentation.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* const char *astXmlShow( AstXmlObject *this )
-
-* Description:
-* This function returns a pointer to a dynamically allocated string
-* containing a textual representation of the supplied XmlObject.
-* Newline characters are added to the string if needed to ensure that
-* each item of content within an element starts on a new line, and all
-* tags are preceeded by an indentation string consisting of a number
-* of spaces.
-
-* Parameters:
-* this
-* Pointer to the XmlObject to format.
-
-* Returned Value:
-* Pointer to a null terminated string holding the formated XmlObject.
-* This string should be freed when no longer needed using astFree.
-
-* Notes:
-* - NULL is returned if a NULL pointer is supplied.
-* - NULL is returned if an error has already occurred, or if this
-* function should fail for any reason.
-*-
-*/
- return Format( this, 0, status );
-}
-
-static void CheckName( const char *name, const char *noun, const char *method,
- int nullok, int *status ){
-/*
-* Name:
-* CheckName
-
-* Purpose:
-* Checks the supplied string is a valid XML name.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* void CheckName( const char *name, const char *noun, const char *method,
-* int nullok, int *status )
-
-* Description:
-* This function checks that the supplied string is a valid XML name,
-* and reports an error otherwise.
-
-* Parameters:
-* name
-* The name string to check
-* noun
-* A word to describe the object which the name applies to - for use in
-* error messages only.
-* method
-* The name of the calling method - for use in error messages only.
-* nullok
-* If non-zero, then a null or empty name is assumed to be
-* acceptable.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- const char *c; /* Pointer to next character to check */
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Check the string is not null. */
- if( !name ) {
- if( !nullok ) astError( AST__XMLNM, "%s: A NULL pointer was supplied "
- "instead of an XML %s name.", status, method, noun );
- } else {
-
- c = name;
- if( *c == 0 ) {
- if( !nullok ) astError( AST__XMLNM, "%s: An empty string was supplied "
- "instead of an XML %s name.", status, method, noun );
- } else {
-
- if( !isalpha( *c ) && *c != '_' ) {
- astError( AST__XMLNM, "%s: The illegal XML %s name \"%s\" was "
- "encountered.", status, method, noun, name );
-
- } else {
- while( *(++c) ) {
- if( !isalnum( *c ) && *c != '_' && *c != '-' && *c != '.' ){
- astError( AST__XMLNM, "%s: The illegal XML %s name \"%s\" was "
- "encountered.", status, method, noun, name );
- break;
- }
- }
- }
- }
- }
-}
-
-static void CheckPrefName( char *name, const char *noun, const char *method, int *status ){
-/*
-* Name:
-* CheckPrefName
-
-* Purpose:
-* Checks the supplied string is a valid XML (prefix:)name.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* void CheckPrefName( char *name, const char *noun, const char *method, int *status )
-
-* Description:
-* This function checks that the supplied string is a valid XML
-* (prefix:)name combination and reports an error otherwise.
-
-* Parameters:
-* name
-* The string to check
-* noun
-* A word to describe the object which the name applies to - for use in
-* error messages only.
-* method
-* The name of the calling method - for use in error messages only.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- char *colon; /* Pointer to first colon */
- char *temp; /* Pointer to temporary string */
- int nc; /* Length of temporary string */
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Search for a ":" character. */
- colon = strchr( name, ':' );
-
-/* If found, temporarily convert the colon into a null so that it
- terminates the prefix string. */
- if( colon ) {
- *colon = 0;
-
-/* Check the string before the colon is a valid name. */
- temp = NULL;
- temp = astAppendString( temp, &nc, noun );
- temp = astAppendString( temp, &nc, " prefix" );
- CheckName( name, temp, method, 0, status );
- temp = astFree( temp );
-
-/* Restore the colon. */
- *colon = ':';
-
-/* Check the string following the colon is a valid name. */
- CheckName( colon + 1, noun, method, 0, status );
-
-/* If not found, the whole supplied string must be a name. */
- } else {
- CheckName( name, noun, method, 0, status );
- }
-}
-
-static int CheckType( long int given, long int want, int *status ){
-/*
-* Name:
-* CheckType
-
-* Purpose:
-* Check that the supplied type identifies an object of a given class.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* int CheckType( long int given, long int want, int *status )
-
-* Description:
-* This function checks that the supplied type identifier identifies
-* a specified class of XML object, or a derived class. A flag is
-* returned indicating if the check succeeds. No error is reported if
-* the check fails.
-
-* Parameters:
-* given
-* The type value to be checked.
-* want
-* The type of the required class.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if the check is passed, zero if not of if an error has
-* already occurred.
-
-* Notes:
-* - This function attempts to execute even if the error status is set.
-*/
-
-/* Local Variables: */
- int result; /* Returned value */
-
-/* Initialise */
- result = 0;
-
-/* Check the wanted type is recognised. Report an error if not. */
- if( want != AST__XMLOBJECT &&
- want != AST__XMLELEM &&
- want != AST__XMLATTR &&
- want != AST__XMLCHAR &&
- want != AST__XMLCDATA &&
- want != AST__XMLCOM &&
- want != AST__XMLPI &&
- want != AST__XMLNAME &&
- want != AST__XMLCONT &&
- want != AST__XMLPRO &&
- want != AST__XMLDEC &&
- want != AST__XMLDTD &&
- want != AST__XMLMISC &&
- want != AST__XMLBLACK &&
- want != AST__XMLWHITE &&
- want != AST__XMLPAR &&
- want != AST__XMLDOC ) {
- if( astOK ) {
- astError( AST__INTER, "CheckType(Xml): Unsupported XML object "
- "type (%ld) supplied for parameter \"want\" (internal "
- "AST programming error). ", status, want );
- }
-
-/* You should never be given a generic "interface" type since the
- "wanted" value comes from the "type" component of an XmlObject (an explicit
- class type should always be given). */
- } else if( given == AST__XMLPAR ||
- given == AST__XMLMISC ||
- given == AST__XMLCONT ||
- given == AST__XMLCHAR ) {
- if( astOK ) {
- astError( AST__INTER, "CheckType(Xml): Generic type (%ld) supplied for "
- "parameter \"given\" (internal AST programming error).", status,
- given );
- }
-
-/* If the above is OK, return a non-zero value if the type to be tested
- equals the wanted type. */
- } else if( want == given ) {
- result = 1;
-
-/* If any class of XmlObject is acceptable, check that he given class
- type is a valid XML class type. */
- } else if( want == AST__XMLOBJECT ) {
- result = ( given == AST__XMLELEM ||
- given == AST__XMLATTR ||
- given == AST__XMLCDATA ||
- given == AST__XMLCOM ||
- given == AST__XMLPI ||
- given == AST__XMLNAME ||
- given == AST__XMLPRO ||
- given == AST__XMLDEC ||
- given == AST__XMLDTD ||
- given == AST__XMLWHITE ||
- given == AST__XMLBLACK ||
- given == AST__XMLDOC );
-
-/* Otherwise, for "interface" types, check if the given class "implements
- the interface". */
- } else if( want == AST__XMLCONT ) {
- result = ( given == AST__XMLELEM ||
- given == AST__XMLBLACK ||
- given == AST__XMLWHITE ||
- given == AST__XMLCDATA ||
- given == AST__XMLCOM ||
- given == AST__XMLPI );
-
- } else if( want == AST__XMLMISC ) {
- result = ( given == AST__XMLWHITE ||
- given == AST__XMLCOM ||
- given == AST__XMLPI );
-
- } else if( want == AST__XMLCHAR ) {
- result = ( given == AST__XMLWHITE ||
- given == AST__XMLBLACK );
-
- } else if( want == AST__XMLPAR ) {
- result = ( given == AST__XMLDOC ||
- given == AST__XMLPRO ||
- given == AST__XMLELEM );
- }
-
-/* Return the result. */
- return result;
-}
-
-int astXmlCheckType_( void *this, long int want, int *status ){
-/*
-*+
-* Name:
-* astXmlCheckType
-
-* Purpose:
-* Check that the supplied object is of a given class.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* int astXmlCheckType( void *this, long int want )
-
-* Description:
-* This function checks that the supplied XmlObject is of a specified
-* class of XML object, or a derived class. A flag is returned indicating
-* if the check succeeds. No error is reported if the check fails.
-
-* Parameters:
-* this
-* The object to check.
-* want
-* The type of the required class.
-
-* Returned Value:
-* Non-zero if the check is passed, zero if not of if an error has
-* already occurred.
-
-* Notes:
-* - This function attempts to execute even if the error status is set.
-*-
-*/
-
- if( this ) {
- return CheckType( ((AstXmlObject *) this)->type, want, status );
- } else {
- return 0;
- }
-}
-
-static char *CleanText( const char *text, int *status ){
-/*
-* Name:
-* CleanText
-
-* Purpose:
-* Normalise end-of-lines in the supplied text.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* char *CleanText( const char *text, int *status )
-
-* Description:
-* This function returns a copy of "text in which "\r\n" has been
-* replaced by "\n" and any remaining "\r" characters have been
-* replaced by "\n".
-
-* Parameters:
-* text
-* A pointer to a text string.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated string containing the required
-* copy.
-
-* Notes:
-* - NULL is returned if this function is called with the global error
-* status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- char *d; /* Pointer to next returned character */
- char *result; /* Returned pointer */
- char *c; /* Pointer to next supplied character */
- char lc; /* Previous character */
-
-/* Initialise */
- result = NULL;
-
-/* Return if the pointer is NULL or if an error has occurred. */
- if( !astOK || !text ) return result;
-
-/* Take a copy of the supplied text */
- result = astStore( NULL, text, strlen( text ) + 1 );
-
-/* Clean the text by replacing "\r\n" by "\n". */
- c = result - 1;
- d = c;
- lc = 0;
- while( *(++c) ) {
- if( *c != '\n' || lc != '\r' ) d++;
- *d = ( lc = *c );
- }
- *(++d) = 0;
-
-/* Now further clean it by replacing "\r" by "\n". */
- c = result - 1;
- while( *(++c) ) {
- if( *c == '\r' ) *c = '\n';
- }
-
-/* Return the result. */
- return result;
-}
-
-static void CleanXml( AstXmlObject *this, long int type, int *status ){
-/*
-* Name:
-* CleanXml
-
-* Purpose:
-* Free the resources used within an XmlObject.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* void CleanXml( AstXmlObject *this, long int type, int *status )
-
-* Description:
-* This function frees the resources used internally within the
-* supplied XmlObject.
-
-* Parameters:
-* this
-* pointer to the XmlObject to be cleaned.
-* type
-* The type of XmlObject being cleaned.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* This function attempts to execute even if an error has already
-* occurred.
-*-
-*/
-
-/* Local Variables: */
- AstXmlAttribute *attr;
- AstXmlBlack *black;
- AstXmlCDataSection *cdatasec;
- AstXmlComment *comm;
- AstXmlDTDec *dtd;
- AstXmlDeclPI *dec;
- AstXmlDocument *doc;
- AstXmlElement *elem;
- AstXmlNamespace *ns;
- AstXmlPI *pi;
- AstXmlPrologue *pro;
- AstXmlWhite *white;
-
-/* Return if a NULL pointer has been suppplied. */
- if( !this ) return;
-
-/* For the base XmlObject class, clear the object type, etc. */
- if( type == AST__XMLOBJECT ){
- this->type = AST__XMLBAD;
- this->parent = NULL;
-
-/* For each derived class of XmlObject, first clean the parent component,
- then clean any further resources. */
- } else if( type == AST__XMLELEM ){
-
- elem = (AstXmlElement *) this;
-
- elem->name = astFree( elem->name );
- elem->defns = astFree( elem->defns );
- elem->prefix = astFree( elem->prefix );
-
- while( elem->nattr > 0 ) astXmlDelete( elem->attrs[ 0 ] );
- elem->attrs = astFree( elem->attrs );
-
- while( elem->nitem > 0 ) astXmlDelete( elem->items[ 0 ] );
- elem->items = astFree( elem->items );
-
- while( elem->nnspref > 0 ) astXmlDelete( elem->nsprefs[ 0 ] );
- elem->nsprefs = astFree( elem->nsprefs );
-
- CleanXml( this, AST__XMLOBJECT, status );
-
- } else if( type == AST__XMLATTR ){
- attr = (AstXmlAttribute *) this;
- attr->name = astFree( attr->name );
- attr->value = astFree( attr->value );
- attr->prefix = astFree( attr->prefix );
- CleanXml( this, AST__XMLOBJECT, status );
-
- } else if( type == AST__XMLBLACK ){
- black = (AstXmlBlack *) this;
- black->text = astFree( black->text );
- CleanXml( this, AST__XMLOBJECT, status );
-
- } else if( type == AST__XMLWHITE ){
- white = (AstXmlWhite *) this;
- white->text = astFree( white->text );
- CleanXml( this, AST__XMLOBJECT, status );
-
- } else if( type == AST__XMLCDATA ){
- cdatasec = (AstXmlCDataSection *) this;
- cdatasec->text = astFree( cdatasec->text );
- CleanXml( this, AST__XMLOBJECT, status );
-
- } else if( type == AST__XMLCOM ){
- comm = (AstXmlComment *) this;
- comm->text = astFree( comm->text );
- CleanXml( this, AST__XMLOBJECT, status );
-
- } else if( type == AST__XMLPI ){
- pi = (AstXmlPI *) this;
- pi->target = astFree( pi->target );
- pi->text = astFree( pi->text );
- CleanXml( this, AST__XMLOBJECT, status );
-
- } else if( type == AST__XMLNAME ){
- ns = (AstXmlNamespace *) this;
- ns->prefix = astFree( ns->prefix );
- ns->uri = astFree( ns->uri );
- CleanXml( this, AST__XMLOBJECT, status );
-
- } else if( type == AST__XMLDOC ){
- doc = (AstXmlDocument *) this;
- doc->prolog = astXmlDelete( doc->prolog );
- doc->root = astXmlDelete( doc->root );
- while( doc->nepi > 0 ) astXmlDelete( doc->epilog[ 0 ] );
- doc->epilog = astFree( doc->epilog );
- doc->current = NULL;
- CleanXml( this, AST__XMLOBJECT, status );
-
- } else if( type == AST__XMLPRO ){
- pro = (AstXmlPrologue *) this;
- pro->xmldecl = astXmlDelete( pro->xmldecl );
- while( pro->nmisc1 > 0 ) astXmlDelete( pro->misc1[ 0 ] );
- pro->misc1 = astFree( pro->misc1 );
- pro->dtdec = astXmlDelete( pro->dtdec );
- while( pro->nmisc2 > 0 ) astXmlDelete( pro->misc2[ 0 ] );
- pro->misc2 = astFree( pro->misc2 );
- CleanXml( this, AST__XMLOBJECT, status );
-
- } else if( type == AST__XMLDEC ){
- dec = (AstXmlDeclPI *) this;
- dec->text = astFree( dec->text );
- CleanXml( this, AST__XMLOBJECT, status );
-
- } else if( type == AST__XMLDTD ){
- dtd = (AstXmlDTDec *) this;
- dtd->name = astFree( dtd->name );
- dtd->external = astFree( dtd->external );
- dtd->internal = astFree( dtd->internal );
- CleanXml( this, AST__XMLOBJECT, status );
-
- } else if( astOK ) {
- astError( AST__INTER, "CleanXml: Invalid object type (%ld) supplied "
- "(internal AST programming error).", status, type );
- }
-
-}
-
-static const char *DefaultURI( AstXmlElement *elem, int *status ){
-/*
-* Name:
-* DefaultURI
-
-* Purpose:
-* Find the URI associated with the default namespace.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* const char *DefaultURI( AstXmlElement *elem, int *status )
-
-* Description:
-* This function returns the default namespace URI defined within the
-* given element. If the element does not define a default namespace URI,
-* then this function is called recursively on the parent element. If
-* there is no parent element, NULL is returned.
-
-* Parameters:
-* elem
-* The pointer to the XmlElement.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a string holding the URI, or NULL if not found.
-
-* Notes:
-* - NULL is returned if an error has already occurred, or if this
-* function should fail for any reason.
-*/
-
-/* Local Variables: */
- AstXmlParent *parent; /* Parent of "this" */
- const char *result; /* Returned pointer */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status, and the supplied element. */
- if( !astOK || !elem ) return result;
-
-/* If the supplied element defines a default namespace URI, return it.
- Otherwise, call this function to get the default namespace URI from the
- parent element. */
- result = elem->defns;
- if( !result ) {
- parent = ( (AstXmlObject *) elem )->parent;
- if( astXmlCheckType( parent, AST__XMLELEM ) ) {
- result = DefaultURI( (AstXmlElement *) parent, status );
- }
- }
-
-/* If the element has a blank default namespace URI, then return NULL
- since the XML namespaces specification says that "The default
- namespace can be set to the empty string. This has the same effect,
- within the scope of the declaration, of there being no default
- namespace". */
- if( result && astChrLen( result ) == 0 ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-void *astXmlDelete_( void *obj_ptr, int *status ){
-/*
-*+
-* Name:
-* astXmlDelete
-
-* Purpose:
-* Remove the supplied XmlObject from its parent and delete it.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* void *astXmlDelete( void *obj )
-
-* Description:
-* This function removes the supplied XmlObject from its parent and
-* deletes it using astXmlAnnul.
-
-* Parameters:
-* obj
-* The pointer to the XmlObject to be deleted.
-
-* Returned Value:
-* NULL
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-*-
-*/
-
-/* Local Variables: */
- AstXmlDocument *doc; /* Pointer to XM document */
- AstXmlElement *elem; /* Pointer to XML element */
- AstXmlObject *obj; /* Pointer to XmlObject */
- AstXmlParent *parent; /* Pointer to parent */
- AstXmlPrologue *pro; /* Pointer to XML prologue */
- int i; /* Loop counter */
- int j; /* Loop counter */
- int n; /* Number of values in list */
- int ok; /* Is obj a child of its parent? */
- void *result; /* Returned pointer */
-
-/* Initialise */
- result = NULL;
- ok = 0;
-
-/* Check we have an XmlObject. */
- if( !astXmlCheckType( obj_ptr, AST__XMLOBJECT ) ) return result;
-
-/* Get the parent of the supplied object. */
- obj = (AstXmlObject *) obj_ptr;
- parent = obj->parent;
- if( parent ) {
-
-/* First deal with cases where we are deleting items from a document. */
- if( astXmlCheckType( parent, AST__XMLDOC ) ) {
- doc = (AstXmlDocument *) parent;
-
- if( astXmlCheckType( obj, AST__XMLPRO ) ) {
- if( (AstXmlPrologue *) obj == doc->prolog ) {
- doc->prolog = NULL;
- ok = 1;
- }
-
- } else if( astXmlCheckType( obj, AST__XMLELEM ) ) {
- if( (AstXmlElement *) obj == doc->root ) {
- doc->root = NULL;
- ok = 1;
- }
-
- } else if( astXmlCheckType( obj, AST__XMLMISC ) ) {
- n = doc->nepi;
- for( i = 0; i < n; i++ ) {
- if( doc->epilog[ i ] == (AstXmlMiscItem *) obj ) {
- for( j = i + 1; j < n; j++ ) {
- doc->epilog[ j - 1 ] = doc->epilog[ j ];
- }
- doc->epilog[ --doc->nepi ] = NULL;
- ok = 1;
- break;
- }
- }
-
- } else if( astOK ) {
- astError( AST__INTER, "astXmlDelete(xml): XmlObject of type %ld has "
- "inappropriate parent of type %ld (internal AST "
- "programming error).", status, obj->type, parent->type );
- }
-
-/* Now deal with cases where we are deleting items from a prologue. */
- } else if( astXmlCheckType( parent, AST__XMLPRO ) ) {
- pro = (AstXmlPrologue *) parent;
-
- if( astXmlCheckType( obj, AST__XMLDEC ) ) {
- if( (AstXmlDeclPI *) obj == pro->xmldecl ) {
- pro->xmldecl = NULL;
- ok = 1;
- }
-
- } else if( astXmlCheckType( obj, AST__XMLDTD ) ) {
- if( (AstXmlDTDec *) obj == pro->dtdec ) {
- pro->dtdec = NULL;
- ok = 1;
- }
-
- } else if( astXmlCheckType( obj, AST__XMLMISC ) ) {
- n = pro->nmisc1;
- for( i = 0; i < n; i++ ) {
- if( pro->misc1[ i ] == (AstXmlMiscItem *) obj ) {
- for( j = i + 1; j < n; j++ ) {
- pro->misc1[ j - 1 ] = pro->misc1[ j ];
- }
- pro->misc1[ --pro->nmisc1 ] = NULL;
- ok = 1;
- break;
- }
- }
-
- if( !ok ) {
- n = pro->nmisc2;
- for( i = 0; i < n; i++ ) {
- if( pro->misc2[ i ] == (AstXmlMiscItem *) obj ) {
- for( j = i + 1; j < n; j++ ) {
- pro->misc2[ j - 1 ] = pro->misc2[ j ];
- }
- pro->misc2[ --pro->nmisc2 ] = NULL;
- ok = 1;
- break;
- }
- }
- }
-
- } else if( astOK ) {
- astError( AST__INTER, "astXmlDelete(xml): XmlObject of type %ld has "
- "inappropriate parent of type %ld (internal AST "
- "programming error).", status, obj->type, parent->type );
- }
-
-/* Now deal with cases where we are deleting items from an element. */
- } else if( astXmlCheckType( parent, AST__XMLELEM ) ) {
- elem = (AstXmlElement *) parent;
-
-/* Remove the object form the appropriate list in the parent, and
- then shuffle down the remaining entries in the list and decrement the
- size of the list. */
- if( astXmlCheckType( obj, AST__XMLATTR ) ) {
- n = elem->nattr;
- for( i = 0; i < n; i++ ) {
- if( elem->attrs[ i ] == (AstXmlAttribute *) obj ) {
- for( j = i + 1; j < n; j++ ) {
- elem->attrs[ j - 1 ] = elem->attrs[ j ];
- }
- elem->attrs[ --elem->nattr ] = NULL;
- ok = 1;
- break;
- }
- }
-
- } else if( astXmlCheckType( obj, AST__XMLNAME ) ) {
- n = elem->nnspref;
- for( i = 0; i < n; i++ ) {
- if( elem->nsprefs[ i ] == (AstXmlNamespace *) obj ) {
- for( j = i + 1; j < n; j++ ) {
- elem->nsprefs[ j - 1 ] = elem->nsprefs[ j ];
- }
- elem->nsprefs[ --elem->nnspref ] = NULL;
- ok = 1;
- break;
- }
- }
-
- } else if( astXmlCheckType( obj, AST__XMLCONT ) ) {
- n = elem->nitem;
- for( i = 0; i < n; i++ ) {
- if( elem->items[ i ] == (AstXmlContentItem *) obj ) {
- for( j = i + 1; j < n; j++ ) {
- elem->items[ j - 1 ] = elem->items[ j ];
- }
- elem->items[ --elem->nitem ] = NULL;
- ok = 1;
- break;
- }
- }
- }
-
- } else if( astOK ) {
- astError( AST__INTER, "astXmlDelete(xml): XmlObject of type %ld has "
- "inappropriate parent of type %ld (internal AST "
- "programming error).", status, obj->type, parent->type );
- }
-
-/* Nullify the parent pointer so that astXmlAnnul will delete the object. */
- obj->parent = NULL;
-
-/* If the supplied object has no parent, we can continue to annul it. */
- } else {
- ok = 1;
- }
-
-/* Report an error if required. */
- if( !ok && astOK ) {
- astError( AST__INTER, "astXmlDelete(xml): Supplied XmlObject (type %ld) "
- "is not owned by its own parent (internal AST "
- "programming error).", status, obj->type );
- }
-
-/* Delete the object. */
- result = astXmlAnnul( obj );
-
-/* Annul the object and return the resulting NULL pointer. */
- return result;
-}
-
-static AstXmlAttribute *FindAttribute( AstXmlElement *this, const char *name0,
- int *status ){
-/*
-* Name:
-* FindAttribute
-
-* Purpose:
-* Search an XmlElement for a named attribute
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* AstXmlAttribute *FindAttribute( AstXmlElement *this, const char *name0,
-* int *status )
-
-* Description:
-* This function searches the supplied XmlElement for an attribute
-* with the given name. If found, a pointer to the XmlAttribute is
-* returned. Otherwise NULL is returned.
-
-* Parameters:
-* this
-* The pointer to the XmlElement.
-* name0
-* Pointer to a string holding the name of the attribute. The name
-* may be preceeded with a "prefix:" string, in which case the
-* prefix will also be matched. If no prefix is included, the first
-* attribute with the specified name is returned, regardless of
-* its prefix.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the XmlAttribute, or NULL if not found.
-
-* Notes:
-* - NULL is returned if an error has already occurred, or if this
-* function should fail for any reason.
-*/
-
-/* Local Variables: */
- AstXmlAttribute *result; /* Returned pointer */
- char name_buffer[ 50 ]; /* Buffer for name */
- char prefix_buffer[ 50 ]; /* Buffer for prefix */
- const char *colon; /* Pointer to colon in supplied string */
- const char *name1; /* Pointer to name to be checked */
- const char *name; /* Pointer to name to be searched for */
- const char *prefix1; /* Pointer to prefix to be checked */
- const char *prefix; /* Pointer to prefix to be searched for */
- int i; /* Loop count */
- size_t len; /* Length of string */
-
-/* Initialise */
- result = NULL;
- name = name0;
- prefix = NULL;
-
-/* Check the global error status. */
- if( !astOK ) return result;
-
-/* If the supplied name string contains a colon, split it up into prefix
- and name. */
- if( ( colon = strchr( name0, ':' ) ) ) {
- len = colon - name0;
-
- if( len > 49 ) {
- astError( AST__XMLNM, "FindAttribute: The XML prefix in \"%s\" "
- "is too long (> 49 characters).", status, name0 );
- } else {
- strncpy( prefix_buffer, name0, len );
- prefix_buffer[ len ] = 0;
- prefix = prefix_buffer;
- len = strlen( colon + 1 );
-
- if( len > 49 ) {
- astError( AST__XMLNM, "FindAttribute: The XML attribute name "
- "in \"%s\" is too long (> 49 characters).", status, name0 );
- } else {
- strcpy( name_buffer, colon + 1 );
- name = name_buffer;
- }
-
- }
-
- }
-
-/* Loop round all the attributes in the element. */
- for( i = 0; i < this->nattr; i++ ) {
- name1 = this->attrs[ i ]->name;
- prefix1 = this->attrs[ i ]->prefix;
-
-/* Compare the attribute name (and prefix) with the supplied name (and
- prefix). Leave the loop if they match. */
- if( !strcmp( name1, name ) &&
- ( !prefix || ( prefix1 && !strcmp( prefix1, prefix ) ) ) ) {
- result = this->attrs[ i ];
- break;
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static const char *Format( AstXmlObject *this, int ind, int *status ){
-/*
-* Name:
-* Format
-
-* Purpose:
-* Converts an XmlObject into a character string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* const char *Format( AstXmlObject *this, int ind, int *status )
-
-* Description:
-* This function returns a pointer to a dynamically allocated string
-* containing a textual representation of the supplied XmlObject.
-
-* Parameters:
-* this
-* Pointer to the XmlObject to format.
-* ind
-* If the XmlObject is an element, then each content item within
-* the element will be prefixed by a string containing "ind" spaces
-* (indenting the returned element itself is the responsibility of
-* the caller and so "this" is not itself indented within this function).
-* In addition, a newline character will be included at the start
-* of the prefix if required, to ensure that each new item starts
-* on a new line. If "ind" is less than zero, then no prefixes are
-* added.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a null terminated string holding the formated XmlObject.
-* This string should be freed when no longer needed using astFree.
-
-* Notes:
-* - NULL is returned if an error has already occurred, or if this
-* function should fail for any reason.
-*/
-
-/* Local Variables: */
- AstXmlPrologue *pro; /* Pointer to XML prologue */
- AstXmlDocument *doc; /* Pointer to XML document */
- AstXmlAttribute *attrib; /* Pointer to XML attribute */
- AstXmlWhite *white; /* Pointer to character data */
- AstXmlBlack *black; /* Pointer to character data */
- AstXmlElement *elem; /* Pointer to XML element */
- AstXmlNamespace *ns; /* Pointer to XML namespace instruction */
- char *result; /* The returned pointer */
- const char *temp; /* A temporary string pointer */
- int i; /* Loop count */
- int nc; /* Length of returned string */
- int type; /* Object type */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if( !astOK || !this ) return result;
-
-/* Get the object type */
- type = this->type;
-
-/* If this is an element... */
- if( this->type == AST__XMLELEM ) {
- temp = FormatTag( this, 1, status );
- result = astAppendString( result, &nc, temp );
- temp = astFree( (void *) temp );
-
- elem = (AstXmlElement *) this;
- if( elem->nitem > 0 ) {
-
-/* Go round all the items of content. */
- for( i = 0; i < elem->nitem; i++ ) {
-
-/* Ignore whitespace elements unless we are not producing indentation. */
- if( !astXmlCheckType( elem->items[ i ], AST__XMLWHITE ) ||
- ind < 0 ) {
-
-/* Format the item */
- temp = Format( (AstXmlObject *) elem->items[ i ], ( ( ind > -1 ) ? ind + IND_INC : -1 ), status );
- if( temp ) {
-
-/* Now append the next item of content, and free its memory. */
- if( ind > -1 ) {
- result = AppendLine( result, &nc, temp,
- ( (ind > -1) ? ind + IND_INC : -1 ), status );
- } else {
- result = astAppendString( result, &nc, temp );
- }
- temp = astFree( (void *) temp );
- }
- }
- }
-
-/* Finally append the end tag. */
- temp = FormatTag( this, 0, status );
- if( ind > -1 ) {
- result = AppendLine( result, &nc, temp, ind, status );
- } else {
- result = astAppendString( result, &nc, temp );
- }
- temp = astFree( (void *) temp );
-
- }
-
-/* If this is an attribute... */
- } else if( type == AST__XMLATTR ){
- attrib = (AstXmlAttribute *) this;
-
- if( attrib->prefix ) {
- result = astAppendString( result, &nc, attrib->prefix );
- result = astAppendString( result, &nc, ":" );
- }
-
- temp = AddEscapes( attrib->value, status );
- result = astAppendString( result, &nc, attrib->name );
- result = astAppendString( result, &nc, "=\"" );
- result = astAppendString( result, &nc, temp );
- result = astAppendString( result, &nc, "\"" );
- temp = astFree( (void *) temp );
-
- } else if( type == AST__XMLWHITE ){
- white = (AstXmlWhite *) this;
- temp = AddEscapes( white->text, status );
- result = astAppendString( result, &nc, temp );
- temp = astFree( (void *) temp );
-
- } else if( type == AST__XMLBLACK ){
- black = (AstXmlBlack *) this;
- temp = AddEscapes( black->text, status );
- result = astAppendString( result, &nc, temp );
- temp = astFree( (void *) temp );
-
- } else if( type == AST__XMLCDATA ||
- type == AST__XMLCOM ||
- type == AST__XMLPI ||
- type == AST__XMLDEC ||
- type == AST__XMLDTD ){
-
- temp = FormatTag( this, 1, status );
- result = astAppendString( result, &nc, temp );
- temp = astFree( (void *) temp );
-
- } else if( type == AST__XMLNAME ){
- ns = (AstXmlNamespace *) this;
- result = astAppendString( result, &nc, "xmlns:" );
- result = astAppendString( result, &nc, ns->prefix );
- result = astAppendString( result, &nc, "=\"" );
- result = astAppendString( result, &nc, ns->uri );
- result = astAppendString( result, &nc, "\"" );
-
- } else if( type == AST__XMLPRO ){
- pro = (AstXmlPrologue *) this;
- result = astAppendString( result, &nc,
- Format( (AstXmlObject *) pro->xmldecl, ind, status ) );
-
-/* Append all the miscalleneous items before the DTD. */
- for( i = 0; i < pro->nmisc1; i++ ) {
- temp = Format( (AstXmlObject *) pro->misc1[ i ], ind, status );
- if( temp ) {
- if( ind > -1 ) {
- result = AppendLine( result, &nc, temp, ind, status );
- } else {
- result = astAppendString( result, &nc, temp );
- }
- temp = astFree( (void *) temp );
- }
- }
-
-/* Append the DTD. */
- temp = Format( (AstXmlObject *) pro->dtdec, ind, status );
- if( temp ) {
- if( ind > -1 ) {
- result = AppendLine( result, &nc, temp, ind, status );
- } else {
- result = astAppendString( result, &nc, temp );
- }
- temp = astFree( (void *) temp );
- }
-
-/* Append all the miscalleneous items after the DTD. */
- for( i = 0; i < pro->nmisc2; i++ ) {
- temp = Format( (AstXmlObject *) pro->misc2[ i ], ind, status );
- if( temp ) {
- if( ind > -1 ) {
- result = AppendLine( result, &nc, temp, ind, status );
- } else {
- result = astAppendString( result, &nc, temp );
- }
- temp = astFree( (void *) temp );
- }
- }
-
- } else if( type == AST__XMLDOC ){
- doc = (AstXmlDocument *) this;
-
-/* Format the prologue. */
- result = astAppendString( result, &nc,
- Format( (AstXmlObject *) doc->prolog, ind, status ) );
-
-/* Append the root element. */
- temp = Format( (AstXmlObject *) doc->root, ind, status );
- if( temp ) {
- if( ind > -1 ) {
- result = AppendLine( result, &nc, temp, ind, status );
- } else {
- result = astAppendString( result, &nc, temp );
- }
- temp = astFree( (void *) temp );
- }
-
-/* Append all the miscalleneous items in the epilogue. */
- for( i = 0; i < doc->nepi; i++ ) {
- temp = Format( (AstXmlObject *) doc->epilog[ i ], ind, status );
- if( temp ) {
- if( ind > -1 ) {
- result = AppendLine( result, &nc, temp, ind, status );
- } else {
- result = astAppendString( result, &nc, temp );
- }
- temp = astFree( (void *) temp );
- }
- }
-
- } else if( astOK ) {
- astError( AST__INTER, "Format(xml): Invalid object type (%d) supplied "
- "(internal AST programming error).", status, type );
- }
-
-/* Free the returned string if an error has occurred. */
- if( !astOK ) result = astFree( result );
-
-/* Return the result. */
- return result;
-}
-
-static char *FormatTag( AstXmlObject *this, int opening, int *status ){
-/*
-* Name:
-* FormatTag
-
-* Purpose:
-* Returns a string holding an XML tag describing the given XmlObject.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* char *FormatTag( AstXmlObject *this, int opening, int *status )
-
-* Description:
-* This function returns a pointer to a dynamic string containing an
-* XML tag describing the given XmlObject.
-
-* Parameters:
-* this
-* Pointer to the XmlObject.
-* opening
-* Indicates which tag is to be returned; the start tag or the end
-* tag. If non-zero the start tag is returned. Otherwise, the
-* end tag is returned. If the supplied XmlObject has no end
-* tag (i.e. if it is an empty element, or if it is not an element),
-* then NULL is returned but no error is reported.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a dynamically allocated string holding the tag.
-
-* Notes:
-* - Empty elements are represented as an start tag of the form <.../>,
-* with no corresponding end tag.
-* - NULL is returned if an error has already occurred, or if this
-* function should fail for any reason.
-*-
-*/
-
-
-/* Local Variables: */
- AstXmlCDataSection *cdata;/* Pointer to XML CDATA section */
- AstXmlElement *elem; /* Pointer to XML element */
- AstXmlComment *com; /* Pointer to XML comment */
- AstXmlPI *pi; /* Pointer to XML processing instruction */
- AstXmlDTDec *dtd; /* Pointer to XML data type declaration */
- AstXmlDeclPI *xmlpi; /* XML version declaration */
- char *result; /* The returned pointer */
- const char *temp; /* A temporary string pointer */
- int i; /* Loop count */
- int nc; /* Length of returned string */
- int type; /* Object type */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if( !astOK ) return result;
-
-/* Get the object type */
- type = this->type;
-
-/* If this is an element... */
- if( this->type == AST__XMLELEM ) {
- elem = (AstXmlElement *) this;
-
- if( opening ) {
- result = astAppendString( result, &nc, "<" );
- if( elem->prefix ) {
- result = astAppendString( result, &nc, elem->prefix );
- result = astAppendString( result, &nc, ":" );
- }
- result = astAppendString( result, &nc, elem->name );
-
- if( elem->defns ) {
- result = astAppendString( result, &nc, " xmlns=\"" );
- result = astAppendString( result, &nc, elem->defns );
- result = astAppendString( result, &nc, "\"" );
- }
-
- for( i = 0; i < elem->nnspref; i++ ) {
- temp = Format( (AstXmlObject *) elem->nsprefs[ i ], -1, status );
- if( temp ) {
- result = AppendChar( result, &nc, ' ', status );
- result = astAppendString( result, &nc, temp );
- temp = astFree( (void *) temp );
- }
- }
-
- for( i = 0; i < elem->nattr; i++ ) {
- temp = Format( (AstXmlObject *) elem->attrs[ i ], -1, status );
- if( temp ){
- result = AppendChar( result, &nc, ' ', status );
- result = astAppendString( result, &nc, temp );
- temp = astFree( (void *) temp );
- }
- }
-
- if( elem->nitem == 0 ) result = astAppendString( result, &nc, "/" );
- result = astAppendString( result, &nc, ">" );
-
- } else if( elem->nitem > 0 ) {
- result = astAppendString( result, &nc, "</" );
- if( elem->prefix ) {
- result = astAppendString( result, &nc, elem->prefix );
- result = astAppendString( result, &nc, ":" );
- }
- result = astAppendString( result, &nc, elem->name );
- result = astAppendString( result, &nc, ">" );
- }
-
- } else if( type == AST__XMLDTD ){
- dtd = (AstXmlDTDec *) this;
- if( opening && dtd->name && dtd->name[0] ) {
- result = astAppendString( result, &nc, "<!DOCTYPE " );
- result = astAppendString( result, &nc, dtd->name );
- if( dtd->external && dtd->external[ 0 ] ) {
- result = astAppendString( result, &nc, " " );
- result = astAppendString( result, &nc, dtd->external );
- }
- if( dtd->internal && dtd->internal[ 0 ] ) {
- result = astAppendString( result, &nc, " [" );
- result = astAppendString( result, &nc, dtd->internal );
- result = astAppendString( result, &nc, "]" );
- }
- result = astAppendString( result, &nc, ">" );
- }
-
- } else if( type == AST__XMLCDATA ){
- if( opening ) {
- cdata = (AstXmlCDataSection *) this;
- result = astAppendString( result, &nc, "<![CDATA[" );
- result = astAppendString( result, &nc, cdata->text );
- result = astAppendString( result, &nc, "]]>" );
- }
-
- } else if( type == AST__XMLCOM ){
- if( opening ) {
- com = (AstXmlComment *) this;
- result = astAppendString( result, &nc, "<!--" );
- result = astAppendString( result, &nc, com->text );
- result = astAppendString( result, &nc, "-->" );
- }
-
- } else if( type == AST__XMLPI ){
- pi = (AstXmlPI *) this;
- if( opening ) {
- result = astAppendString( result, &nc, "<?" );
- result = astAppendString( result, &nc, pi->target );
- if( pi->text && pi->text[0] ) {
- result = astAppendString( result, &nc, " " );
- result = astAppendString( result, &nc, pi->text );
- }
- result = astAppendString( result, &nc, "?>" );
- }
-
- } else if( type == AST__XMLDEC ){
- xmlpi = (AstXmlDeclPI *) this;
- if( opening && xmlpi->text && xmlpi->text[0] ) {
- result = astAppendString( result, &nc, "<?xml" );
- if( xmlpi->text && xmlpi->text[0] ) {
- result = astAppendString( result, &nc, " " );
- result = astAppendString( result, &nc, xmlpi->text );
- }
- result = astAppendString( result, &nc, "?>" );
- }
- }
-
-/* If notOK, free the rteurned string. */
- if( !astOK ) result = astFree( result );
-
-/* Return the result. */
- return result;
-}
-
-static void InitXmlAttribute( AstXmlAttribute *new, int type, const char *name,
- const char *value, const char *prefix, int *status ){
-/*
-* Name:
-* InitXmlAttribute
-
-* Purpose:
-* Initialise a new XmlAttribute.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* InitXmlAttribute( AstXmlAttribute *new, int type, const char *name,
-* const char *value, const char *prefix, int *status )
-
-* Description:
-* This function initialises supplied memory to hold an XmlAttribute
-* structure.
-
-* Parameters:
-* new
-* The memory in which to initialise the structure.
-* type
-* An identifier for the structure type.
-* name
-* The name for the attribute.
-* value
-* The value for the attribute
-* prefix
-* The namespace prefix for the attribute. May be NULL or blank, in
-* which case any prefix at the start of "name" is used.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- const char *colon; /* Pointer to colon within supplied name */
- char *newname; /* Pointer to name string (no prefix) */
- char *newpref; /* Pointer to name string */
- int nc; /* Length of prefix string */
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Check the supplied object type is appropriate for the class of
- structure being initialised. If not report an error. */
- if( !CheckType( type, AST__XMLATTR, status ) ){
- astError( AST__INTER, "InitXmlAttribute: Supplied object type (%d) "
- "does not represent an XmlAttribute", status, type );
- }
-
-/* Ensure we have non-NULL pointers. */
- if( !name ) name = "";
- if( !value ) value = "";
-
-/* If no prefix was supplied, extract any prefix from the start of the
- supplied name. */
- newname = (char *) name;
- newpref = (char *) prefix;
- colon = NULL;
-
- if( !prefix || astChrLen( prefix ) == 0 ){
- colon = strchr( name, ':' );
- if( colon ) {
- nc = colon - name;
- newpref = astStore( NULL, name, nc + 1 );
- newpref[ nc ] = 0;
-
- nc = strlen( name ) - ( colon - name ) - 1;
- newname = astStore( NULL, colon + 1, nc + 1 );
- newname[ nc ] = 0;
- }
- }
-
-/* Check the supplied name and prefix are valid XML 'names'. */
- CheckName( newname, "attribute", "InitXmlAttribute", 0, status );
- CheckName( newpref, "attribute", "InitXmlAttribute", 1, status );
-
-/* Initialise the parent XmlObject component. */
- InitXmlObject( (AstXmlObject *) new, type, status );
-
-/* Initialise the items specific to this class of structure. */
- new->name = astStore( NULL, newname, strlen( newname ) + 1 );
- new->value = astStore( NULL, value, strlen( value ) + 1 );
- new->prefix = NULL;
- if( newpref ) {
- nc = strlen( newpref );
- if( nc > 0 ) new->prefix = astStore( NULL, newpref, nc + 1 );
- }
-
-/* Free any name and prefix extracted from the supplied name string */
- if( colon ) {
- newname = astFree( newname );
- newpref = astFree( newpref );
- }
-}
-
-static void InitXmlCDataSection( AstXmlCDataSection *new, int type,
- const char *text, int *status ){
-/*
-* Name:
-* InitXmlCDataSection
-
-* Purpose:
-* Initialise a new XmlCDataSection.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* InitXmlCDataSection( AstXmlCDataSection *new, int type,
-* const char *text, int *status )
-
-* Description:
-* This function initialises supplied memory to hold an XmlCDataSection
-* structure.
-
-* Parameters:
-* new
-* The memory in which to initialise the structure.
-* type
-* An identifier for the structure type.
-* text
-* Pointer to a null terminated string holding the text.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Check the supplied object type is appropriate for the class of
- structure being initialised. If not report an error. */
- if( !CheckType( type, AST__XMLCDATA, status ) ){
- astError( AST__INTER, "InitXmlCDataSection: Supplied object type (%d) "
- "does not represent an XmlCDataSection", status, type );
- }
-
-/* Initialise the parent XmlObject component. */
- InitXmlObject( (AstXmlObject *) new, type, status );
-
-/* Ensure we have non-NULL pointers. */
- if( !text ) text = "";
-
-/* Initialise the items specific to this class of structure. */
- new->text = astStore( NULL, text, strlen( text ) + 1 );
-}
-
-static void InitXmlWhite( AstXmlWhite *new, int type, const char *text, int *status ){
-/*
-* Name:
-* InitXmlWhite
-
-* Purpose:
-* Initialise a new XmlWhite.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* InitXmlWhite( AstXmlWhite *new, int type, const char *text, int *status )
-
-* Description:
-* This function initialises supplied memory to hold an XmlWhite
-* structure.
-
-* Parameters:
-* new
-* The memory in which to initialise the structure.
-* type
-* An identifier for the structure type.
-* text
-* Pointer to a null terminated string holding the text.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- const char *c; /* Pointer to next character */
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Check the supplied object type is appropriate for the class of
- structure being initialised. If not report an error. */
- if( !CheckType( type, AST__XMLWHITE, status ) ){
- astError( AST__INTER, "InitXmlWhite: Supplied object type (%d) "
- "does not represent an XmlWhite", status, type );
- }
-
-/* Initialise the parent XmlObject component. */
- InitXmlObject( (AstXmlObject *) new, type, status );
-
-/* Ensure we have non-NULL pointers. */
- if( !text ) text = "";
-
-/* Report an error if the text is not white. */
- c = text - 1;
- while( *(++c) ) {
- if( !isspace( *c ) ) {
- astError( AST__XMLCM, "InitXmlWhite(xml): Illegal XML whitespace "
- "string supplied \"%s\" - not all characters are white.", status,
- text );
- break;
- }
- }
-
-/* Initialise the items specific to this class of structure. */
- new->text = astStore( NULL, text, strlen( text ) + 1 );
-}
-
-static void InitXmlBlack( AstXmlBlack *new, int type, const char *text, int *status ){
-/*
-* Name:
-* InitXmlBlack
-
-* Purpose:
-* Initialise a new XmlBlack.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* InitXmlBlack( AstXmlBlack *new, int type, const char *text, int *status )
-
-* Description:
-* This function initialises supplied memory to hold an XmlBlack
-* structure.
-
-* Parameters:
-* new
-* The memory in which to initialise the structure.
-* type
-* An identifier for the structure type.
-* text
-* Pointer to a null terminated string holding the text.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Check the supplied object type is appropriate for the class of
- structure being initialised. If not report an error. */
- if( !CheckType( type, AST__XMLBLACK, status ) ){
- astError( AST__INTER, "InitXmlBlack: Supplied object type (%d) "
- "does not represent an XmlBlack", status, type );
- }
-
-/* Initialise the parent XmlObject component. */
- InitXmlObject( (AstXmlObject *) new, type, status );
-
-/* Ensure we have non-NULL pointers. */
- if( !text ) text = "";
-
-/* Initialise the items specific to this class of structure. */
- new->text = astStore( NULL, text, strlen( text ) + 1 );
-}
-
-static void InitXmlComment( AstXmlComment *new, int type, const char *text, int *status ){
-/*
-* Name:
-* InitXmlComment
-
-* Purpose:
-* Initialise a new XmlComment.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* InitXmlComment( AstXmlComment *new, int type, const char *text, int *status )
-
-* Description:
-* This function initialises supplied memory to hold an XmlComment
-* structure.
-
-* Parameters:
-* new
-* The memory in which to initialise the structure.
-* type
-* An identifier for the structure type.
-* text
-* Pointer to a null terminated string holding the text.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Check the supplied object type is appropriate for the class of
- structure being initialised. If not report an error. */
- if( !CheckType( type, AST__XMLCOM, status ) ){
- astError( AST__INTER, "InitXmlComment: Supplied object type (%d) "
- "does not represent an XmlComment", status, type );
- }
-
-/* Initialise the parent XmlObject component. */
- InitXmlObject( (AstXmlObject *) new, type, status );
-
-/* Ensure we have non-NULL pointers. */
- if( !text ) text = "";
-
-/* Initialise the items specific to this class of structure. Report an error
- if the comment is illegal. */
- if( strstr( text, "--" ) && astOK ) {
- astError( AST__XMLCM, "InitXmlCom(xml): Illegal XML comment "
- "supplied \"%s\" - comments may not contain the "
- "string \"--\".", status, text );
- new->text = NULL;
- } else {
- new->text = astStore( NULL, text, strlen( text ) + 1 );
- }
-}
-
-static void InitXmlDeclPI( AstXmlDeclPI *new, int type, const char *text, int *status ){
-/*
-* Name:
-* InitXmlDeclPI
-
-* Purpose:
-* Initialise a new XmlDeclPI.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* InitXmlDeclPI( AstXmlDeclPI *new, int type, const char *text, int *status )
-
-* Description:
-* This function initialises supplied memory to hold an XmlDeclPI
-* structure.
-
-* Parameters:
-* new
-* The memory in which to initialise the structure.
-* type
-* An identifier for the structure type.
-* text
-* Pointer to a null terminated string holding the text.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Check the supplied object type is appropriate for the class of
- structure being initialised. If not report an error. */
- if( !CheckType( type, AST__XMLDEC, status ) ){
- astError( AST__INTER, "InitXmlDeclPI: Supplied object type (%d) "
- "does not represent an XmlDeclPI", status, type );
- }
-
-/* Initialise the parent XmlObject component. */
- InitXmlObject( (AstXmlObject *) new, type, status );
-
-/* Ensure we have non-NULL pointers. */
- if( !text ) text = "";
-
-/* Initialise the items specific to this class of structure. */
- new->text = astStore( NULL, text, strlen( text ) + 1 );
-}
-
-static void InitXmlDocument( AstXmlDocument *new, int type, int *status ){
-/*
-* Name:
-* InitXmlDocument
-
-* Purpose:
-* Initialise a new XmlDocument.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* InitXmlDocument( AstXmlDocument *new, int type, int *status )
-
-* Description:
-* This function initialises supplied memory to hold an XmlDocument
-* structure.
-
-* Parameters:
-* new
-* The memory in which to initialise the structure.
-* type
-* An identifier for the structure type.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Check the supplied object type is appropriate for the class of
- structure being initialised. If not report an error. */
- if( !CheckType( type, AST__XMLDOC, status ) ){
- astError( AST__INTER, "InitXmlDocument: Supplied object type (%d) "
- "does not represent an XmlDocument", status, type );
- }
-
-/* Initialise the parent XmlObject */
- InitXmlObject( (AstXmlObject *) new, type, status );
-
-/* Initialise the items specific to this class of structure. */
- new->prolog = NULL;
- new->root = NULL;
- new->epilog = NULL;
- new->nepi = 0;
- new->current = NULL;
-}
-
-static void InitXmlDTDec( AstXmlDTDec *new, int type, const char *name,
- const char *external, const char *internal, int *status ){
-/*
-* Name:
-* InitXmlDTDec
-
-* Purpose:
-* Initialise a new XmlDTDec.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* void InitXmlDTDec( AstXmlDTDec *new, int type, const char *name,
-* const char *external, const char *internal, int *status )
-
-* Description:
-* This function initialises supplied memory to hold an XmlDTDec
-* structure.
-
-* Parameters:
-* new
-* The memory in which to initialise the structure.
-* type
-* An identifier for the structure type.
-* name
-* The document type name
-* external
-* The external SYSTEM id.
-* internal
-* The internal declaration markup text (this is not checked or
-* parsed).
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Check the supplied object type is appropriate for the class of
- structure being initialised. If not report an error. */
- if( !CheckType( type, AST__XMLDTD, status ) ){
- astError( AST__INTER, "InitXmlDTDec: Supplied object type (%d) "
- "does not represent an XmlDTDec", status, type );
- }
-
-/* Initialise the parent XmlObject */
- InitXmlObject( (AstXmlObject *) new, type, status );
-
-/* Ensure we have non-NULL pointers. */
- if( !name ) name = "";
- if( !external ) external = "";
- if( !internal ) internal = "";
-
-/* Initialise the items specific to this class of structure. */
- new->name = astStore( NULL, name, strlen( name ) + 1 );
- new->external = astStore( NULL, external, strlen( external ) + 1 );
- new->internal = astStore( NULL, internal, strlen( internal ) + 1 );
-}
-
-static void InitXmlElement( AstXmlElement *new, int type, const char *name,
- const char *prefix, int *status ){
-/*
-* Name:
-* InitXmlElement
-
-* Purpose:
-* Initialise a new XmlElement.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* InitXmlElement( AstXmlElement *new, int type, const char *name,
-* const char *prefix, int *status )
-
-* Description:
-* This function initialises supplied memory to hold an XmlElement
-* structure.
-
-* Parameters:
-* new
-* The memory in which to initialise the structure.
-* type
-* An identifier for the structure type.
-* name
-* The name for the element.
-* prefix
-* The namespace prefix for the element. May be NULL or blank, in
-* which case any prefix at the start of "name" is used.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- const char *colon; /* Pointer to colon within supplied name */
- char *newname; /* Pointer to name string (no prefix) */
- char *newpref; /* Pointer to name string */
- int nc; /* Length of prefix string */
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Check the supplied object type is appropriate for the class of
- structure being initialised. If not report an error. */
- if( !CheckType( type, AST__XMLELEM, status ) ){
- astError( AST__INTER, "InitXmlElement: Supplied object type (%d) "
- "does not represent an XmlElement", status, type );
- }
-
-/* Ensure we have non-NULL pointers. */
- if( !name ) name = "";
-
-/* If no prefix was supplied, extract any prefix from the start of the
- supplied name. */
- newname = (char *) name;
- newpref = (char *) prefix;
- colon = NULL;
-
- if( !prefix || astChrLen( prefix ) == 0 ){
- colon = strchr( name, ':' );
- if( colon ) {
- nc = colon - name;
- newpref = astStore( NULL, name, nc + 1 );
- newpref[ nc ] = 0;
-
- nc = strlen( name ) - ( colon - name ) - 1;
- newname = astStore( NULL, colon + 1, nc + 1 );
- newname[ nc ] = 0;
- }
- }
-
-/* Check the supplied name and prefix are valid XML 'names'. */
- CheckName( newname, "element", "InitXmlElement", 0, status );
- CheckName( newpref, "element", "InitXmlElement", 1, status );
-
-/* Initialise the parent XmlObject component. */
- InitXmlObject( (AstXmlObject *) new, type, status );
-
-/* Initialise the items specific to this class of structure. */
- new->name = astStore( NULL, newname, strlen( newname ) + 1 );
- new->attrs = NULL;
- new->nattr = 0;
- new->items = NULL;
- new->nitem = 0;
- new->defns = NULL;
- new->nsprefs = NULL;
- new->nnspref = 0;
- new->complete = 0;
-
- new->prefix = NULL;
- if( newpref ) {
- nc = strlen( newpref );
- if( nc > 0 ) new->prefix = astStore( NULL, newpref, nc + 1 );
- }
-
-/* Free any name and prefix extracted from the supplied name string */
- if( colon ) {
- newname = astFree( newname );
- newpref = astFree( newpref );
- }
-}
-
-static void InitXmlNamespace( AstXmlNamespace *new, int type, const char *prefix,
- const char *uri, int *status ){
-/*
-* Name:
-* InitXmlNamespace
-
-* Purpose:
-* Initialise a new XmlNamespace.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* InitXmlNamespace( AstXmlNamespace *new, int type, const char *prefix,
-* const char *uri, int *status )
-
-* Description:
-* This function initialises supplied memory to hold an XmlNamespace
-* structure.
-
-* Parameters:
-* new
-* The memory in which to initialise the structure.
-* type
-* An identifier for the structure type.
-* prefix
-* Pointer to a null terminated string holding the namespace prefix.
-* uri
-* Pointer to a null terminated string holding the namespace URI.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Check the supplied object type is appropriate for the class of
- structure being initialised. If not report an error. */
- if( !CheckType( type, AST__XMLNAME, status ) ){
- astError( AST__INTER, "InitXmlNamespace: Supplied object type (%d) "
- "does not represent an XmlNamespace", status, type );
- }
-
-/* Ensure we have non-NULL pointers. */
- if( !prefix ) prefix = "";
- if( !uri ) uri = "";
-
-/* Check the supplied prefix is a valid XML 'name'. */
- CheckName( prefix, "namespace prefix", "InitXmlNamespace", 0, status );
-
-/* Initialise the parent XmlObject component. */
- InitXmlObject( (AstXmlObject *) new, type, status );
-
-/* Initialise the items specific to this class of structure. */
- new->prefix = astStore( NULL, prefix, strlen( prefix ) + 1 );
- new->uri = astStore( NULL, uri, strlen( uri ) + 1 );
-}
-
-static void InitXmlObject( AstXmlObject *new, long int type, int *status ){
-/*
-* Name:
-* InitXmlObject
-
-* Purpose:
-* Initialise a new XmlObject.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* InitXmlObject( AstXmlObject *new, long int type, int *status )
-
-* Description:
-* This function initialises supplied memory to hold an XmlObject
-* structure.
-
-* Parameters:
-* new
-* The memory in which to initialise the structure.
-* type
-* An identifier for the structure type.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* If needed, get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the supplied object type is OK. Report an error if not. */
- if( !CheckType( type, AST__XMLOBJECT, status ) ){
- astError( AST__INTER, "InitXmlObject: Supplied object type (%ld) "
- "is not appropriate for an XmlObject", status, type );
- }
-
-/* This class of structure is the base class for XML objects so it has no
- parent class to be initialised. So just initialise the items specific to
- this class of structure. */
- new->parent = NULL;
- new->type = type;
- new->id = next_id++;
-
-#ifdef DEBUG
-/* Add the new XmlObject to the list of all XmlObjects. */
- AddObjectToList( new );
-#endif
-
-}
-
-static void InitXmlPI( AstXmlPI *new, int type, const char *target,
- const char *text, int *status ){
-/*
-* Name:
-* InitXmlPI
-
-* Purpose:
-* Initialise a new XmlPI.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* InitXmlPI( AstXmlPI *new, int type, const char *target,
-* const char *text, int *status )
-
-* Description:
-* This function initialises supplied memory to hold an XmlPI
-* structure.
-
-* Parameters:
-* new
-* The memory in which to initialise the structure.
-* type
-* An identifier for the structure type.
-* target
-* Pointer to a null terminated string holding the PI target.
-* text
-* Pointer to a null terminated string holding the PI text.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Check the supplied object type is appropriate for the class of
- structure being initialised. If not report an error. */
- if( !CheckType( type, AST__XMLPI, status ) ){
- astError( AST__INTER, "InitXmlPI: Supplied object type (%d) "
- "does not represent an XmlPI", status, type );
- }
-
-/* Initialise the parent XmlObject component. */
- InitXmlObject( (AstXmlObject *) new, type, status );
-
-/* Ensure we have non-NULL pointers. */
- if( !target ) target = "";
- if( !text ) text = "";
-
-/* Initialise the items specific to this class of structure. Report an error
- if anything is illegal. */
- new->target = NULL;
- new->text = NULL;
-
- if( !Ustrcmp( target, "XML", status ) && astOK ) {
- astError( AST__XMLPT, "InitXmlPI(xml): Illegal XML PI target \"%s\""
- " supplied.", status, target );
- } else {
- new->target = astStore( NULL, target, strlen( target ) + 1 );
- new->text = astStore( NULL, text, strlen( text ) + 1 );
- }
-}
-
-static void InitXmlPrologue( AstXmlPrologue *new, int type, int *status ){
-/*
-* Name:
-* InitXmlPrologue
-
-* Purpose:
-* Initialise a new XmlPrologue.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* InitXmlPrologue( AstXmlPrologue *new, int type, int *status )
-
-* Description:
-* This function initialises supplied memory to hold an XmlPrologue
-* structure.
-
-* Parameters:
-* new
-* The memory in which to initialise the structure.
-* type
-* An identifier for the structure type.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
- if( !astOK ) return;
-
-/* Check the supplied object type is appropriate for the class of
- structure being initialised. If not report an error. */
- if( !CheckType( type, AST__XMLPRO, status ) ){
- astError( AST__INTER, "InitXmlPrologue: Supplied object type (%d) "
- "does not represent an XmlPrologue", status, type );
- }
-
-/* Initialise the parent XmlObject */
- InitXmlObject( (AstXmlObject *) new, type, status );
-
-/* Initialise the items specific to this class of structure. */
- new->xmldecl = NULL;
- new->misc1 = NULL;
- new->nmisc1 = 0;
- new->dtdec = NULL;
- new->misc2 = NULL;
- new->nmisc2 = 0;
-}
-
-static int MatchName( AstXmlElement *this, const char *name, int *status ){
-/*
-* Name:
-* MatchName
-
-* Purpose:
-* Check that an element has a specified name and/or prefix.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* int MatchName( AstXmlElement *this, const char *name, int *status )
-
-* Description:
-* This function checks that an element has a specified name and/or prefix.
-
-* Parameters:
-* this
-* The XmlElement to check.
-* name
-* The name for the element (may include a namespace prefix).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the supplied element has the supplie dname/prefix. Zero
-* otherwise.
-
-*/
-
-
-/* Local Variables: */
- const char *colon; /* Pointer to colon within supplied name */
- char *newname; /* Pointer to name string (no prefix) */
- char *newpref; /* Pointer to name string */
- int nc; /* Length of prefix string */
- int result; /* Returned value */
-
-/* Initialise */
- result = 0;
-
-/* Check the global error status. */
- if( !astOK ) return result;
-
-/* Extract any prefix from the start of the supplied name. */
- newpref = NULL;
- newname = (char *) name;
- colon = strchr( name, ':' );
- if( colon ) {
- nc = colon - name;
- newpref = astStore( NULL, name, nc + 1 );
- newpref[ nc ] = 0;
-
- nc = strlen( name ) - ( colon - name ) - 1;
- newname = astStore( NULL, colon + 1, nc + 1 );
- newname[ nc ] = 0;
- }
-
-/* Compare the prefix. */
- if( newpref && this->prefix ) {
- result = !strcmp( newpref, this->prefix );
-
- } else if( !newpref && !this->prefix ) {
- result = 1;
-
- } else {
- result = 0;
- }
-
-/* If the prefixes matches, compare the names */
- if( result ) {
- if( newname && this->name ) {
- result = !strcmp( newname, this->name );
-
- } else if( !newname && !this->name ) {
- result = 1;
-
- } else {
- result = 0;
- }
- }
-
-/* Free any name and prefix extracted from the supplied name string */
- if( colon ) {
- newname = astFree( newname );
- newpref = astFree( newpref );
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstXmlAttribute *NewAttribute( const char *name, const char *value,
- const char *prefix, int *status ){
-/*
-* Name:
-* NewAttribute
-
-* Purpose:
-* Create a new XmlAttribute.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* AstXmlAttribute *NewAttribute( const char *name, const char *value,
-* const char *prefix, int *status )
-
-* Description:
-* This function creates a new XmlAttribute structure representing an
-* XML attribute with the given name, value and namespace prefix.
-
-* Parameters:
-* name
-* Pointer to a null terminated string containing the attribute name.
-* value
-* Pointer to a null terminated string containing the attribute value.
-* prefix
-* Pointer to a null terminated string containing the attribute
-* namespace prefix (may be NULL or blank).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new structure is returned.
-
-* Notes:
-* - A NULL pointer is returned if the inherited status value
-* indicates an error has occurred on entry, or if this function
-* should fail for any reason.
-*/
-
-/* Local Variables: */
- AstXmlAttribute *new; /* The returned pointer */
-
-/* Initialise */
- new = NULL;
-
-/* Check the global error status. */
- if( !astOK ) return new;
-
-/* Allocate space for the new structure. */
- new = (AstXmlAttribute *) astMalloc( sizeof( AstXmlAttribute ) );
-
-/* Initialise it. */
- InitXmlAttribute( new, AST__XMLATTR, name, value, prefix, status );
-
-/* If an error occurred, delete the new structure. */
- if( !astOK ) new = astXmlDelete( new );
-
-/* Return the result. */
- return new;
-
-}
-
-static AstXmlDocument *NewDocument( int *status ){
-/*
-* Name:
-* NewDocument
-
-* Purpose:
-* Create a new empty XmlDocument.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* AstXmlDocument *NewDocument( int *status )
-
-* Description:
-* This function creates a new empty XmlDocument structure representing
-* an entire XML Document.
-
-* Parameters:
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new structure is returned.
-
-* Notes:
-* - A NULL pointer is returned if the inherited status value
-* indicates an error has occurred on entry, or if this function
-* should fail for any reason.
-*/
-
-/* Local Variables: */
- AstXmlDocument *new; /* The returned pointer */
-
-/* Initialise */
- new = NULL;
-
-/* Check the global error status. */
- if( !astOK ) return new;
-
-/* Allocate space for the new structure. */
- new = (AstXmlDocument *) astMalloc( sizeof( AstXmlDocument ) );
-
-/* Initialise it. */
- InitXmlDocument( new, AST__XMLDOC, status );
-
-/* If an error occurred, delete the new structure. */
- if( !astOK ) new = astXmlDelete( new );
-
-/* Return the result. */
- return new;
-
-}
-
-static AstXmlNamespace *NewNamespace( const char *prefix, const char *uri, int *status ){
-/*
-* Name:
-* NewNamespace
-
-* Purpose:
-* Create a new XmlNamespace.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* AstXmlNamespace *NewNamespace( const char *prefix,
-* const char *uri, int *status )
-
-* Description:
-* This function creates a new XmlNamespace structure representing an
-* XML namespace with the given prefix and uri.
-
-* Parameters:
-* prefix
-* Pointer to a null terminated string containing the namespace prefix.
-* uri
-* Pointer to a null terminated string containing the associated URI.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new structure is returned.
-
-* Notes:
-* - A NULL pointer is returned if the inherited status value
-* indicates an error has occurred on entry, or if this function
-* should fail for any reason.
-*/
-
-/* Local Variables: */
- AstXmlNamespace *new; /* The returned pointer */
-
-/* Initialise */
- new = NULL;
-
-/* Check the global error status. */
- if( !astOK ) return new;
-
-/* Allocate space for the new structure. */
- new = (AstXmlNamespace *) astMalloc( sizeof( AstXmlNamespace ) );
-
-/* Initialise it. */
- InitXmlNamespace( new, AST__XMLNAME, prefix, uri, status );
-
-/* If an error occurred, delete the new structure. */
- if( !astOK ) new = astXmlDelete( new );
-
-/* Return the result. */
- return new;
-
-}
-
-static AstXmlPrologue *NewPrologue( AstXmlDocument *doc, int *status ){
-/*
-* Name:
-* NewPrologue
-
-* Purpose:
-* Create a new empty XmlPrologue.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* AstXmlPrologue *NewPrologue( AstXmlDocument *doc, int *status )
-
-* Description:
-* This function creates a new empty XmlPrologue structure representing
-* an entire prologue.
-
-* Parameters:
-* doc
-* A pointer to the XmlDocument to add the XmlPrologue to, or NULL.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new structure is returned.
-
-* Notes:
-* - A NULL pointer is returned if the inherited status value
-* indicates an error has occurred on entry, or if this function
-* should fail for any reason.
-*/
-
-/* Local Variables: */
- AstXmlPrologue *new; /* The returned pointer */
-
-/* Initialise */
- new = NULL;
-
-/* Check the global error status. */
- if( !astOK ) return new;
-
-/* Allocate space for the new structure. */
- new = (AstXmlPrologue *) astMalloc( sizeof( AstXmlPrologue ) );
-
-/* Initialise it. */
- InitXmlPrologue( new, AST__XMLPRO, status );
-
-/* Set its parent. */
- ((AstXmlObject *) new )->parent = (AstXmlParent *) doc;
-
-/* If an error occurred, delete the new structure. */
- if( !astOK ) new = astXmlDelete( new );
-
-/* Return the result. */
- return new;
-
-}
-
-static char *RemoveEscapes( const char *text, int *status ){
-/*
-* Name:
-* RemoveEscapes
-
-* Purpose:
-* Replaces entity references by corresponding ascii characters.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* char *RemoveEscapes( const char *text, int *status )
-
-* Description:
-* This function produces a dynamic copy of the supplied text in which
-* occurrences of XML entity references are replaced by the corresponding
-* ASCII text.
-
-* Parameters:
-* text
-* A pointer to a text string.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated string containing the required
-* copy.
-
-* Notes:
-* - NULL is returned if this function is called with the global error
-* status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- char *d; /* Pointer to next returned character */
- char *result; /* Returned pointer */
- char rc; /* Replacement character */
- const char *c; /* Pointer to next supplied character */
- int nc; /* Number of characters to skip */
-
-/* Initialise */
- result = NULL;
- nc = 0;
-
-/* Return if the pointer is NULL or if an error has occurred. */
- if( !astOK || !text ) return result;
-
-/* Allocate memory to hold a copy of the supplied text. */
- result = astMalloc( strlen( text ) + 1 );
-
-/* Check the pointer can be used safely. */
- if( astOK ) {
-
-/* Loop round every character in the supplied text. */
- c = text - 1;
- d = result;
- while( *(++c) ) {
-
-/* If this character marks the start of a entity reference, replace it by
- the corresponding ascii character and shuffle the remaining text down. */
- if( !strncmp( c, "&", 5 ) ) {
- rc = '&';
- nc= 4;
-
- } else if( !strncmp( c, "<", 4 ) ) {
- rc = '<';
- nc= 3;
-
- } else if( !strncmp( c, ">", 4 ) ) {
- rc = '>';
- nc= 3;
-
- } else if( !strncmp( c, "'", 6 ) ) {
- rc = '\'';
- nc= 5;
-
- } else if( !strncmp( c, """, 6 ) ) {
- rc = '"';
- nc= 5;
-
- } else {
- rc = 0;
- }
-
- if( rc ) {
- *(d++) = rc;
- c += nc;
- } else {
- *(d++) = *c;
- }
-
- }
-
-/* Terminate the returned string. */
- *d = 0;
-
-/* Reallocate the string to free up any unused space. */
- result = astRealloc( result, d - result + 1 );
- }
-
-/* Return the result. */
- return result;
-}
-
-#ifdef DEBUG
-static void RemoveObjectFromList( AstXmlObject *obj ){
-/*
-* Name:
-* RemoveObjectFromList
-
-* Purpose:
-* Removes an XmlObject from a static list of all currently active XmlObjects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* void RemoveObjectFromList( AstXmlObject *obj )
-
-* Description:
-* This function removes the supplied pointer from a static list of
-* pointers, and decrements the number of elements in the list. This list
-* holds pointers to all the XmlObjects which currently exist. If the
-* supplied pointer is not found in the list, this function returns
-* without action.
-
-* Parameters:
-* this
-* A pointer to the XmlObject.
-
-* Notes:
-* - This function attempts to execute even if an error has already
-* occurred.
-*/
-
-/* Local Variavles: */
- int i;
- int ii;
-
-/* Locate the supplied pointer within the list of pointers to all
- currently active XmlObjects. */
- ii = -1;
- for( i = 0; i < nobj; i++ ){
- if( existing_objects[ i ]->id == obj->id ) {
- ii = i;
- break;
- }
- }
-
-/* Check the pointer was found. */
- if( ii != -1 ) {
-
-/* Shuffle all higher index pointers down one in the list in order to fill
- the gap left by removing the supplied pointer. */
- for( ii++; ii < nobj; ii++ ){
- existing_objects[ ii - 1 ] = existing_objects[ ii ];
- }
-
-/* Decrement the number of pointers in the list. */
- nobj--;
-
-/* Nullify the pointer at the end of the list which is no longer used. */
- existing_objects[ nobj ] = NULL;
- }
-}
-#endif
-
-static const char *ResolvePrefix( const char *prefix, AstXmlElement *elem, int *status ){
-/*
-* Name:
-* ResolvePrefix
-
-* Purpose:
-* Find the URI associated with a namespace prefix.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* const char *ResolvePrefix( const char *prefix, AstXmlElement *elem, int *status)
-
-* Description:
-* This function searches the namespaces defined within the supplied
-* element for a prefix which matches the supplied prefix. If found,
-* it returns a pointer to the URI string associated with the prefix.
-* If not found, it calls this function recursively on the parent
-* element. If there is no parent element, NULL is returned.
-
-* Parameters:
-* prefix
-* Pointer to a string holding the namespace prefix.
-* elem
-* The pointer to the XmlElement.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a string holding the URI, or NULL if not found.
-
-* Notes:
-* - NULL is returned if an error has already occurred, or if this
-* function should fail for any reason.
-*/
-
-/* Local Variables: */
- AstXmlParent *parent; /* Parent object */
- AstXmlNamespace *ns; /* Next namespace */
- const char *result; /* Returned pointer */
- int i; /* Loop count */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status, and the supplied element. */
- if( !astOK || !elem ) return result;
-
-/* Loop round all the namespace definitions in the element. */
- for( i = 0; i < elem->nnspref; i++ ) {
- ns = elem->nsprefs[ i ];
-
-/* Compare the namespace prefix with the supplied prefix (case sensitive).
- Store a pointer to the associated URI if they match, and leave the
- loop. */
- if( !strcmp( ns->prefix, prefix ) ) {
- result = ns->uri;
- break;
- }
- }
-
-/* If no matching namespace was found, attempt to resolve the prefix
- within the context of the parent element. */
- if( !result ) {
- parent = ((AstXmlObject *) elem )->parent;
- if( astXmlCheckType( parent, AST__XMLELEM ) ) {
- result = ResolvePrefix( prefix, (AstXmlElement *) parent, status );
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static int Ustrcmp( const char *a, const char *b, int *status ){
-/*
-* Name:
-* Ustrncmp
-
-* Purpose:
-* A case blind version of strcmp.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* int Ustrcmp( const char *a, const char *b )
-
-* Description:
-* Returns 0 if there are no differences between the two strings, and 1
-* otherwise. Comparisons are case blind.
-
-* Parameters:
-* a
-* Pointer to first string.
-* b
-* Pointer to second string.
-
-* Returned Value:
-* Zero if the strings match, otherwise one.
-
-* Notes:
-* - This function does not consider the sign of the difference between
-* the two strings, whereas "strcmp" does.
-* - This function attempts to execute even if an error has occurred.
-
-*/
-
-/* Local Variables: */
- const char *aa; /* Pointer to next "a" character */
- const char *bb; /* Pointer to next "b" character */
- int ret; /* Returned value */
-
-/* Initialise the returned value to indicate that the strings match. */
- ret = 0;
-
-/* Initialise pointers to the start of each string. */
- aa = a;
- bb = b;
-
-/* Loop round each character. */
- while( 1 ){
-
-/* We leave the loop if either of the strings has been exhausted. */
- if( !(*aa ) || !(*bb) ){
-
-/* If one of the strings has not been exhausted, indicate that the
- strings are different. */
- if( *aa || *bb ) ret = 1;
-
-/* Break out of the loop. */
- break;
-
-/* If neither string has been exhausted, convert the next characters to
- upper case and compare them, incrementing the pointers to the next
- characters at the same time. If they are different, break out of the
- loop. */
- } else {
-
- if( toupper( (int) *(aa++) ) != toupper( (int) *(bb++) ) ){
- ret = 1;
- break;
- }
-
- }
-
- }
-
-/* Return the result. */
- return ret;
-
-}
-
-#ifdef DEBUG
-int astXmlTrace( int show ){
-/*
-*+
-* Name:
-* astXmlTrace
-
-* Purpose:
-* List details of XML objects currently in existence.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* int astXmlTrace( int show )
-
-* Description:
-* Lists details of XML objects currently in existence. Details are
-* written to standard output.
-
-* Parameters:
-* show
-* - 0, the ID values of all currently active XmlObjects are
-* listed. The objects themselves are unchanged.
-* - 1, each object is displayed using astXmlShow unless it has
-* already been included in the display of a previous object, and then
-* annulled. Consequently, this mode is destructive, and none of the
-* displayed XmlObjects will be acessable afterwards.
-* - 2, each object is displayed using astXmlShow whether or not it
-* has already been included in the display of a previous object.
-* The objects are left unchanged.
-* - 3, nothing is written to standard output, but the number of
-* active XmlObjects is still returned.
-
-* Returned Value:
-* The number of XMLObjects which are in existence on entry to this
-* function.
-
-*-
-*/
-
-/* Local Variables: */
- AstXmlObject *root;
- int i, result, old_status;
-
- old_status = astStatus;
- astClearStatus;
-
- result = nobj;
-
- if( show == 0 ) {
- printf( "Current list of active XmlObject identifiers: " );
- for( i = 0; i < nobj; i++ ) printf( "%d ", existing_objects[ i ]->id );
- printf("\n");
-
- } else if( show ==1 ){
- while( nobj > 0 ) {
- root = astXmlGetRoot( existing_objects[0] );
- printf( "ID = %d (type %ld)\n%s\n------------\n",
- root->id, root->type, astXmlShow( root ) );
- root = astXmlAnnulTree( root );
- }
-
- } else if( show == 2 ) {
- for( i = 0; i < nobj; i++ ) printf( "%d\n%s\n------------\n",
- existing_objects[ i ]->id,
- astXmlShow(existing_objects[ i ]) );
- printf("\n");
- }
-
- astSetStatus( old_status );
-
- return result;
-}
-#endif
-
-AstXmlElement *astXmlReadDocument_( AstXmlDocument **doc,
- int (*is_wanted)( AstXmlElement *, int * ),
- int skip, char (*source)( void *, int * ),
- void *data, int *status ){
-/*
-*+
-* Name:
-* astXmlReadDocument
-
-* Purpose:
-* Read and parse an XML document.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xml.h"
-* AstXmlElement *astXmlReadDocument( AstXmlDocument **doc,
-* int (*is_wanted)( AstXmlElement *, int * ),
-* int skip, char (*source)( void *, int * ),
-* void *data )
-
-* Description:
-* This function reads and parses text from an XML source. The text is
-* obtained by calling the supplied "source" function, which returns
-* the next character read from the external source on each invocation.
-*
-* The reading scheme combines elements of the SAX and DOM schemes in
-* an attempt to minimise memory requirements (a potential problem with
-* DOM) whilst retaining a simple interface for accessing the XML
-* elements of interest to the client (a potential problem for SAX).
-*
-* When an element start tag is encountered in the source, the client
-* is asked to indicate whether the element is of interest. This is
-* done by calling the supplied "is_wanted" function. If the client
-* indicates that the element is of interest, its contents are read
-* and a pointer to a corresponding XmlElement structure is returned.
-* Reading stops when the element has been read. If the client
-* indicates that the element is not of interest, then (if "skip" is
-* non-zero) the contents of the element are skipped over, and reading
-* continues following the element end tag. When the next element is
-* encountered the client will again be asked to indicate its interest
-* in the element. This continues until either the client indicates that
-* an element is of interest, or the end of the source is reached. If
-* "skip" is zero, then an error is reported if the first element in
-* the document is not of interest.
-*
-* The client has an option to reply that an element is not itself of
-* interest, but may possibly contain interesting elements. In this case,
-* the sub-elements within the element are read and checked in the same
-* way.
-*
-* This function returns, and no more characters are read from the
-* source, once the contents of the first "interesting" element has been
-* read.
-*
-* The function thus returns a pointer to an XmlElement containing the
-* entire contents of the first interesting element encountered in the
-* source. This function can then be invoked again to read further
-* interesting elements from the source. In this case, the XmlDocument
-* structure created by the initial invocation (see parameter "doc")
-* must be supplied, as this indicates the point in the total document
-* structure at which the previous "interesting" element was located.
-
-* Parameters:
-* doc
-* Address of a location holding a pointer to an AstXmlDocument
-* structure. The AstXmlDocument pointer should be supplied as NULL
-* when invoking this function for the first time on a document
-* source (i.e. when reading from the beginning of the document).
-* In this case a new AstXmlDocument structure will be created and a
-* pointer to it stored at the supplied address. This structure
-* holds the context which enables subsequent invocations of this
-* function to determine the point in the document structure at
-* which to store any further text read from the source. It also
-* holds the document prologue, root element, and epilogue.
-* is_wanted
-* Pointer to a function which is called to decide if the client is
-* interested in each element start tag which has just been read.
-* It has a single argument which is a pointer to the (empty) XmlElement
-* corresponding to the element start tag which has just been read.
-* It returns an integer:
-* -1 : the element is not itself of interest but it may contain
-* an interesting element, so look through the content and
-* ask the client again about any elements found inside it.
-* 0 : the element definately contains nothing of interest to
-* the client. kip its content and continue looking for new
-* elements.
-* 1 : the element is definately of interest to the client so
-* read its contents and return a pointer to it.
-* If NULL is supplied, a value of "+1" is assumed.
-* skip
-* Indicates if any uninteresting elements may proceed the first
-* element of interest. If zero, then an error is reported if the
-* first element read from the source is not of interest to the client.
-* If non-zero, then any uninteresting elements are simply skipped
-* over until an interesting element is found or the document ends.
-* source
-* Pointer to a function which is called to return the next
-* character from the source. It has a single argument which is
-* used to pass any supplied data to it. It should return zero when
-* the end of the source is reached.
-* data
-* Pointer to a structure to pass to the source function. This
-* structure may contain any data needed by the source function.
-
-* Returned Value:
-* A pointer to the first element of interest, or NULL if there are no
-* interesting elements in the source. The returned element will be a
-* descendant of "*doc". For this reason, the returned pointer need not
-* be annulled explicitly since it will be freed when the XmlDocument
-* is annulled. However, if required (e.g. to save memory) it may be
-* annulled before the document is annulled by using astXmlRemoveItem to
-* remove it from its parent, and then using astXmlAnnul to annul it.
-
-* Notes:
-* - NULL is returned if an error has already occurred, or if this
-* function should fail for any reason.
-* - It is assumed that the read commences outside any tag (i.e.
-* in between tags or within character data).
-*-
-*/
-
-/* Local Variables: */
- AstXmlElement *result;
-
-/* Check any supplied pointer is for an XmlDocument. */
- astXmlCheckDocument( *doc, 1 );
-
-/* Read and parse the source text. Indicate that the element being read
- *may* contain items of interest to the client. Surround with a mutex
- since the supplied functions may not be thread-safe. */
- LOCK_MUTEX1;
- result = ReadContent( doc, -1, is_wanted, skip, source, data, 0, status );
- UNLOCK_MUTEX1;
-
-/* Return the result. */
- return result;
-}
-
-
-static AstXmlElement *ReadContent( AstXmlDocument **doc, int wanted,
- int (*is_wanted)( AstXmlElement *, int * ),
- int skip, char (*source)( void *, int * ),
- void *data, int depth, int *status ){
-/*
-* Name:
-* ReadContent
-
-* Purpose:
-* Read and parse an XML document.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xml.h"
-* AstXmlElement *ReadContent( AstXmlDocument **doc, int wanted,
-* int (*is_wanted)( AstXmlElement *, int * ),
-* int skip, char (*source)( void *, int * ),
-* void *data, int depth, int *status )
-
-* Description:
-* This function reads and parses text from an XML source. The text is
-* obtained by calling the supplied "source" function, which returns
-* the next character read from the external source on each invocation.
-*
-* See astXmlReadDocument for more details.
-
-* Parameters:
-* doc
-* Address of a location holding a pointer to an AstXmlDocument
-* structure. The AstXmlDocument pointer should be supplied as NULL
-* when invoking this function for the first time on a document
-* source (i.e. when reading from the beginning of the document).
-* In this case a new AstXmlDocument structure will be created and a
-* pointer to it stored at the supplied address. This structure
-* holds the context which enables subsequent invocations of this
-* function to determine the point in the document structure at
-* which to store any further text read from the source. It also
-* holds the document prologue, root element, and epilogue.
-* wanted
-* Indicates if the content read from the XML source is of interest
-* to the client. If a positive value is supplied, all content read
-* from the source (up to the end tag which corresponds to the
-* supplied "parent") is added to the "parent" element (if supplied).
-* If zero is supplied, then all content read from the source is
-* discarded. If a negative value is supplied, then all content up
-* to the first element start tag is discarded. When the first
-* element start tag is encountered, it is passed back to the client
-* by invoking the supplied "is_wanted" function. If this function
-* returns a non-zero value, then the contents of the new element
-* is read (by calling this function recursively) and a pointer to
-* the new element is returned as the function value (reading then
-* stops and the function returns). If the "is_wanted" function returns
-* zero, then the contents of the new element is skipped over, and
-* reading continues until the next element start tag is encountered,
-* when the "is_wanted" function is again invoked.
-* is_wanted
-* Pointer to a function which is called to decide if the client is
-* interested in the element start tag which has just been read.
-* It has a single argument which is a pointer to the (empty) XmlElement
-* corresponding to the element start tag which has just been read.
-* It returns an integer:
-* -1 : the element is not itself of interest but it may contain
-* an interesting element, so look through the content and
-* ask the client again about any elements found inside it.
-* 0 : the element definately contains nothing of interest to
-* the client. kip its content and continue looking for new
-* elements.
-* 1 : the element is definately of interest to the client so
-* read its contents and return a pointer to it.
-* If NULL is supplied, a value of "+1" is assumed.
-* skip
-* Indicates if any uninteresting elements may proceed the first
-* element of interest. If zero, then an error is reported if the
-* first element read from the source is not of interest to the client.
-* If non-zero, then any uninteresting elements are simply skipped
-* over until an interesting element is found or the document ends.
-* source
-* Pointer to a function which is called to return the next
-* character from the source. It has a single argument which is
-* used to pass any supplied data to it. It should return zero when
-* the end of the source is reached.
-* data
-* Pointer to a structure to pass to the source function. This
-* structure may contain any data needed by the source function.
-* depth
-* Depth of nesting (i.e. zero if this function was invoked from
-* astXmlReadDocument, and a positive value if it was invoked
-* recursively from within itself).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the first element of interest, or NULL if there are no
-* interesting elements in the source. If the first element of
-* interest has already been found (as indicated by "wanted" being +1)
-* then NULL is returned. The returned element may be a child of a
-* parent element containing namespace definitions (which may itself
-* have a parent, etc). For this reason, the returned pointer should be
-* freed using astXmlAnnulTree rather than astXmlAnnul.
-
-* Notes:
-* - NULL is returned if an error has already occurred, or if this
-* function should fail for any reason.
-* - It is assumed that the read commences outside any tag (i.e.
-* in between tags or within character data).
-*/
-
-/* Local Variables; */
- AstXmlElement *answer; /* Result of reading a sub-element */
- AstXmlElement *parent; /* Pointer to current parent element */
- AstXmlElement *elem; /* A new element to be read */
- AstXmlElement *result; /* The returned pointer */
- char *cc; /* Pointer to next character */
- char *msg; /* Pointer to message buffer */
- char *text1; /* Pointer to dynamic string */
- char *text2; /* Pointer to another dynamic string */
- char *text3; /* Pointer to another dynamic string */
- char *text4; /* Pointer to another dynamic string */
- char c; /* Current character read from source */
- char lc2; /* Last but one character read */
- char lc; /* Last character read */
- char quoted; /* Character which opened current quote */
- int nc1; /* No. of characters stored in text1 */
- int nc2; /* No. of characters stored in text2 */
- int nc3; /* No. of characters stored in text2 */
- int ncmsg; /* Length of "msg" */
- int newwanted; /* Is the new element wanted? */
- int state; /* Current action being performed */
- int prolog_ok; /* OK for source to start with a prolog? */
- int where; /* Where to add the item within the document */
-
-/* Initialise */
- result = NULL;
- elem = NULL;
-
-/* Check the global error status. */
- if( !astOK ) return result;
-
-/* If no XmlDocument was supplied, assume we are commencing to read a new
- document from the begining. Create a new XmlDocument to store the
- prologue, root element and epilogue, together with a pointer to the
- "current" element, i.e. the element whose content is currently being
- read. Also, since we have not yet asked the client if it is interested
- in anything, ignore the supplied "wanted" value and use -1 to ensure
- that we ask the client when the first element start tag is encountered. */
- if( !*doc ){
- prolog_ok = 1;
- *doc = NewDocument( status );
- wanted = -1;
- } else {
- prolog_ok = 0;
- }
-
-/* Any content read from the source (except for prologue and epilogue)
- will be placed into the "parent" element. A pointer to this element is
- stored in the XmlDocument structure. The parent element will always be
- a descendant of the root element, or the root element itself. */
- parent = (*doc)->current;
-
-/* If the supplied parent has already been completed (typically because
- it was read from an empty element tag), then just return without
- action. */
- if( parent && parent->complete ) {
-
-/* If an error has occurred, or if this invocation of ReadContent was
- made recursively (rather than by the client), or if we have something
- to return, return. */
- if( !astOK || depth > 0 || result ) {
- return result;
-
-/* Otherwise, returning would result in returning a null pointer to the
- client even though the end of the document may not have been reached.
- Revert to state 0 and search for further interesting elements. */
- } else {
- if( parent != (*doc)->root ) {
- (*doc)->current = (AstXmlElement *) ( (AstXmlObject *) parent )->parent;
- } else {
- (*doc)->current = NULL;
- }
- parent = (*doc)->current;
- state = 0;
- }
- }
-
-/* Initialise the previous two characters read. */
- lc = 0;
- lc2 = 0;
-
-/* Initialise pointer to dynamically allocated strings. */
- text1 = NULL;
- text2 = NULL;
- text3 = NULL;
- msg = NULL;
-
-/* We are not in a quote. */
- quoted = 0;
-
-/* Initialise the "state" variable which indicates what we are currently
- looking for. */
- state = 0;
-
-/* Loop round reading characters from the source. */
- while( 1 ) {
- c = (*source)( data, status );
-
-/* Leave the loop if an error occurred whilst reading the character. */
- if( !astOK ) break;
-
-/* If a parent element has been supplied, (i.e. if we are currently
- reading the content of an element), or if we are not in state zero,
- report an error and leave the loop if the end of the text has been
- reached. If no parent was supplied, just leave the loop. */
- if( !c ) {
- if( parent ) {
- astError( AST__XMLWF, "astRead(XmlChan): End of XML input text "
- "reached whilst reading the content of element %s.", status,
- astXmlGetTag( parent, 1 ) );
-
- } else if( state > 1 ) {
- if( msg ) {
- astError( AST__XMLWF, "astRead(XmlChan): End of XML input text "
- "reached whilst reading the document epilogue "
- "(\"%s\").", status, msg );
- } else {
- astError( AST__XMLWF, "astRead(XmlChan): End of XML input text "
- "reached whilst reading the document epilogue." , status);
- }
- }
- break;
- }
-
-/* Save text which is not character data for use in error messages. */
- if( state < 2 ) {
- if( msg ) msg = astFree( msg );
- } else {
- msg = AppendChar( msg, &ncmsg, c, status );
- }
-
-/* State 0: Use the first character to decide what sort of content item
- follows (character data or a tag of some form). */
- if( state == 0 ) {
- if( c != '<' ) {
- state = 1;
- text1 = AppendChar( text1, &nc1, c, status );
- } else {
- msg = AppendChar( msg, &ncmsg, '<', status );
- state = 2;
- }
-
-/* State 1: We are reading character data. The character data ends at the
- first occurrence of "<", at which point the character data is added to
- the parent if required and we continue to state 2.*/
- } else if( state == 1 ) {
- if( c != '<' ) {
- text1 = AppendChar( text1, &nc1, c, status );
- } else {
- msg = AppendChar( msg, &ncmsg, '<', status );
- if( text1 ){
-
-/* If we have a parent element, just add it to the element. */
- if( parent ) {
- if( wanted > 0 ) {
- text4 = RemoveEscapes( text1, status );
- astXmlAddCharData( (AstXmlParent *) parent, 0, text4 );
- text4 = astFree( text4 );
-
-
-/* If we are not allowed to skip over non-blank content, report an
- error if the text is not blank. */
- } else if( !skip ) {
- cc = text1 - 1;
- while( *(++cc) ) {
- if( !isspace( *cc ) ) {
- if( parent ) {
- astError( AST__BADIN, "astRead(XmlChan): Cannot interpret "
- "the input data \"%s\" within element %s.", status,
- text1, astXmlGetTag( parent, 1 ) );
- } else {
- astError( AST__BADIN, "astRead(XmlChan): Cannot interpret "
- "the input data: \"%s\".", status, text1 );
- }
- break;
- }
- }
- }
-
-/* Otherwise, add it to the document prologue or epilogue. */
- } else {
- if( (*doc)->root ) {
- where = 3;
- } else if( (*doc)->prolog && (*doc)->prolog->dtdec ){
- where = 2;
- } else {
- where = 1;
- }
-
- text4 = RemoveEscapes( text1, status );
- astXmlAddCharData( (AstXmlParent *) *doc, where, text4 );
- text4 = astFree( text4 );
- }
-
- text1 = astFree( text1 );
- }
- state = 2;
- }
-
-/* State 2: We are using the character following a "<" to determine what
- type of tag is commencing. */
- } else if( state == 2 ) {
-
-/* If the character is a ">", report an error. */
- if( c == '>' ) {
- if( parent ) {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag \"<>\" "
- "encountered within element %s.", status, astXmlGetTag( parent, 1 ) );
- } else {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag \"<>\" "
- "encountered." , status);
- }
- break;
-
-/* If the character is a "?", this must be a PI tag. */
- } else if( c == '?' ) {
- state = 3;
-
-/* If the character is a "!", it must be a comment or a CDATA section
- or a DTD. */
- } else if( c == '!' ) {
- state = 4;
-
-/* If the character is a "/", it must be an element end tag. */
- } else if( c == '/' ) {
- state = 5;
-
-/* Otherwise, this must be an element start tag. Append the character
- to "text1". */
- } else {
- state = 6;
- text1 = AppendChar( text1, &nc1, c, status );
- }
-
-/* State 3: We are reading the initial text following the opening "<?" string
- of a PI tag. The characters between the initial "<?" string and the first
- space or closing "?>" string is the target text. */
- } else if( state == 3 ) {
- if( c == '>' && lc == '?' ) {
- if( text1 ) text1[ --nc1 ] = 0;
- state = 100;
- } else if( isspace( c ) ) {
- state = 7;
- } else {
- text1 = AppendChar( text1, &nc1, c, status );
- }
-
-/* State 4: We are using the characters following the opening "<!" text to
- determine if the tag is a comment, DTD or CDATA section. */
- } else if( state == 4 ) {
- if( c == '-' ) {
- state = 8;
- } else if( c == 'D' ){
- state = 16;
- text1 = astAppendString( text1, &nc1, "<!D" );
- } else if( c == '[' ){
- state = 9;
- text1 = astAppendString( text1, &nc1, "<![" );
- } else {
- if( parent ) {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
- "starting with \"<!%c...\" encountered within "
- "element %s.", status, c, astXmlGetTag( parent, 1 ) );
- } else {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
- "starting with \"<!%c...\" encountered.", status, c );
- }
- break;
- }
-
-/* State 5: We are looking for the end of an element end tag. */
- } else if( state == 5 ) {
- if( c == '>' ) {
- state = 101;
- } else {
- text1 = AppendChar( text1, &nc1, c, status );
- }
-
-/* State 6: We are looking for the (prefix:)name combination at the start of
- an element start tag. */
- } else if( state == 6 ) {
- if( c == '>' ) {
- state = ( lc != '/' ) ? 102 : 103;
- } else if( isspace( c ) ) {
- state = 104;
- } else if( c != '/' ){
- text1 = AppendChar( text1, &nc1, c, status );
- }
-
-/* State 7: We are reading the remaining text in a PI tag following the target
- text. */
- } else if( state == 7 ) {
- if( c == '>' && lc == '?' ) {
- if( text2 ) text2[ --nc2 ] = 0;
- state = 100;
- } else if( text2 || !isspace( c ) ) {
- text2 = AppendChar( text2, &nc2, c, status );
- }
-
-/* State 8: We are looking for the start of the text within a comment tag. */
- } else if( state == 8 ) {
- if( c == '-' ) {
- state = 10;
- } else {
- if( parent ) {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
- "starting with \"<!-%c...\" encountered within "
- "element %s.", status, c, astXmlGetTag( parent, 1 ) );
- } else {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
- "starting with \"<!-%c...\" encountered.", status, c );
- }
- break;
- }
-
-/* State 9: We are looking for the start of the text within a CDATA tag. */
- } else if( state == 9 ) {
- if( c == '[' ) {
- if( !strcmp( text1, "<![CDATA" ) ) {
- state = 11;
- text1 = astFree( text1 );
- } else {
- if( parent ) {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
- "starting with \"%s%c...\" encountered within "
- "element %s.", status, text1, c, astXmlGetTag( parent, 1 ) );
- } else {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
- "starting with \"%s%c...\" encountered.", status, text1, c );
- }
- text1 = astFree( text1 );
- break;
- }
-
- } else if( nc1 < 10 ) {
- text1 = AppendChar( text1, &nc1, c, status );
-
- } else {
- if( parent ) {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
- "starting with \"%s%c...\" encountered within "
- "element %s.", status, text1, c, astXmlGetTag( parent, 1 ) );
- } else {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
- "starting with \"%s%c...\" encountered.", status, text1, c );
- }
- text1 = astFree( text1 );
- break;
- }
-
-/* State 10: We are reading the remaining text in a comment tag. When the end
- ">" is reached, check the previous 2 characters are "--" and then terminate
- the text1 string in order to remove these two characters from the comment
- text. */
- } else if( state == 10 ) {
- if( c == '>' && lc == '-' && lc2 == '-' ) {
- text1[ nc1 - 2 ] = 0;
- state = 105;
- } else {
- text1 = AppendChar( text1, &nc1, c, status );
- }
-
-/* State 11: We are reading the remaining text in a CDATA tag. */
- } else if( state == 11 ) {
- if( c == '>' && lc == ']' && lc2 == ']' ) {
- text1[ nc1 - 2 ] = 0;
- state = 106;
- } else {
- text1 = AppendChar( text1, &nc1, c, status );
- }
-
-/* State 12: We are looking for an equals sign marking the end of an
- attribute name within an element start tag. */
- } else if( state == 12 ) {
- if( c == '=' ) {
- state = 13;
-
- } else if( c == '>' ) {
- if( text1 ) {
- if( parent ) {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
- " \"%s...\" encountered within element %s.", status, msg,
- astXmlGetTag( parent, 1 ) );
- } else {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag \"%s...\" "
- "encountered.", status, msg );
- }
- break;
- } else {
- if( lc == '/' ) {
- state = 108;
- } else {
- state = 200;
- }
- }
-
- } else if( text1 || !isspace( c ) ) {
- if( c != '/' ) text1 = AppendChar( text1, &nc1, c, status );
- }
-
-/* State 13: We are looking for a '"' or ''' marking the start of an attribute
- value within an element start tag. */
- } else if( state == 13 ) {
- if( c == '"' ) {
- state = 14;
-
- } else if( c == '\'' ) {
- state = 15;
-
- } else if( c == '>' ) {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal value for attribute "
- "\"%s\" in XML tag \"%s...\".", status, text1, msg );
- break;
- }
-
-/* State 14: We are looking for a '"' marking the end of an attribute value
- within an element start tag. */
- } else if( state == 14 ) {
- if( c == '"' ) {
- state = 107;
-
- } else if( c == '>' ) {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal value for attribute "
- "\"%s\" in XML tag \"%s...\".", status, text1, msg );
- break;
-
- } else {
- text2 = AppendChar( text2, &nc2, c, status );
- }
-
-/* State 15: We are looking for a ''' marking the end of an attribute value
- within an element start tag. */
- } else if( state == 15 ) {
- if( c == '\'' ) {
- state = 107;
-
- } else if( c == '>' ) {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal value for attribute "
- "\"%s\" in XML tag \"%s...\".", status, text1, msg );
- break;
-
- } else {
- text2 = AppendChar( text2, &nc2, c, status );
- }
-
-/* State 16: We are looking for the end of a DOCTYPE string. */
- } else if( state == 16 ) {
- if( isspace( c ) ) {
- if( !strcmp( text1, "<!DOCTYPE" ) ) {
- state = 17;
- text1 = astFree( text1 );
- } else {
- if( parent ) {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
- "starting with \"%s%c...\" encountered within "
- "element %s.", status, text1, c, astXmlGetTag( parent, 1 ) );
- } else {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
- "starting with \"%s%c...\" encountered.", status, text1, c );
- }
- text1 = astFree( text1 );
- break;
- }
-
- } else if( nc1 < 15 ) {
- text1 = AppendChar( text1, &nc1, c, status );
-
- } else {
- if( parent ) {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
- "starting with \"%s%c...\" encountered within "
- "element %s.", status, text1, c, astXmlGetTag( parent, 1 ) );
- } else {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
- "starting with \"%s%c...\" encountered.", status, text1, c );
- }
- text1 = astFree( text1 );
- break;
- }
-
-/* State 17: We are looking for the start of a DOCTYPE name string. */
- } else if( state == 17 ) {
- if( !isspace( c ) ) {
- text1 = AppendChar( text1, &nc1, c, status );
- state = 18;
- }
-
-/* State 18: We are looking for the end of a DOCTYPE name string. */
- } else if( state == 18 ) {
- if( isspace( c ) ) {
- state = 19;
- } else if( c == '>' ) {
- state = 109;
- } else {
- text1 = AppendChar( text1, &nc1, c, status );
- }
-
-/* State 19: We are looking for the start of a string following a DOCTYPE
- name string. */
- } else if( state == 19 ) {
- if( !isspace( c ) ) {
- if( c == '[' ) {
- state = 20;
- } else if( c == '>' ) {
- state = 109;
- } else {
- state = 21;
- text2 = AppendChar( text2, &nc2, c, status );
- }
- }
-
-/* State 20: We are looking for the "]" marking the end of the internal
- markup of a DOCTYPE element. Avoid the contents of quoted strings (such
- as #FIXED attribute values). */
- } else if( state == 20 ) {
- text3 = AppendChar( text3, &nc3, c, status );
- if( c == '\'' ) {
- if( quoted == '\'' ) {
- quoted = 0;
- } else if( !quoted ) {
- quoted = '\'';
- }
-
- } else if( c == '"' ) {
- if( quoted == '"' ) {
- quoted = 0;
- } else if( !quoted ) {
- quoted = '"';
- }
-
- } else if( !quoted && c == ']' ) {
- text3[ --nc3 ] = 0;
- state = 22;
- }
-
-/* State 21: We are looking for the start of a DOCTYPE internal section. */
- } else if( state == 21 ) {
- if( c == '[' ) {
- state = 20;
- } else if( c == '>' ) {
- state = 109;
- } else {
- text2 = AppendChar( text2, &nc2, c, status );
- }
-
-/* State 22: We are looking for the ">" at the end of a DOCTYPE. */
- } else if( state == 22 ) {
- if( !isspace( c ) ) {
- if( c == '>' ) {
- state = 109;
- } else {
- astError( AST__XMLWF, "astRead(XmlChan): Extra text found "
- "at end of XML DOCTYPE tag \"%s\".", status, msg );
- }
- }
-
- } else {
- astError( AST__INTER, "ReadContent(xml): Illegal state (%d) encountered "
- "(AST internal programming error).", status, state );
- }
-
-/* The following states perform actions consequent on the decisons made
- above, but which must be performed before reading the next character. */
-
-/* In most cases there will be no actions to perform. Therefore check for
- this first (to avoid the time spent doing all the following usually
- irrelevant checks). */
- if( state < 23 ) {
-
-/* State 100: We have just reached the end of a PI tag. Create a new XmlPI and
- store it in the parent (if required). */
- } else if( state == 100 ) {
- if( text1 ){
-
-/* First deal with XML declaration PI's. These must be the first item in
- the source. */
- if( !strcmp( text1, "xml" ) ) {
- if( (*doc)->root || (*doc)->prolog || (*doc)->nepi > 0 ) {
- astError( AST__XMLWF, "astRead(XmlChan): An XML "
- "declaration \"%s\" was encountered within the "
- "body of the document.", status, msg );
- } else {
- astXmlSetXmlDec( *doc, text2 );
- }
-
-/* Now deal with other PI's. */
- } else {
-
-/* If we have a parent element, just add it to the element. */
- if( parent ) {
- if( wanted > 0 ) {
- astXmlAddPI( (AstXmlParent *) parent, 0, text1, text2 );
- } else if( !skip ) {
- if( parent ) {
- astError( AST__BADIN, "astRead(XmlChan): Cannot interpret "
- "the input data \"%s\" within element %s.", status,
- msg, astXmlGetTag( parent, 1 ) );
- } else {
- astError( AST__BADIN, "astRead(XmlChan): Cannot interpret "
- "the input data: \"%s\".", status, msg );
- }
- break;
- }
-
-/* Otherwise, add it to the document prologue or epilogue. */
- } else {
- if( (*doc)->root ) {
- where = 3;
- } else if( (*doc)->prolog->dtdec ){
- where = 2;
- } else {
- where = 1;
- }
- astXmlAddPI( (AstXmlParent *) *doc, where, text1, text2 );
-
- }
- }
- text1 = astFree( text1 );
- if( text2 ) text2 = astFree( text2 );
- } else {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag \"%s\" "
- "encountered.", status, msg );
- break;
- }
- state = 0;
-
-/* State 101: We have just reached the end of an element end tag. Check that
- the (prefix:)name is legal, and matches that of the current parent,
- re-instate the parent's parent as the current element in the document,
- and leave the loop if appropriate. */
- } else if( state == 101 ) {
- if( text1 ){
- CheckPrefName( text1, "element", "astRead(XmlChan)", status );
- if( parent ) {
- if( MatchName( parent, text1, status ) ) {
- parent->complete = 1;
- if( parent != (*doc)->root ) {
- (*doc)->current = (AstXmlElement *) ( (AstXmlObject *) parent )->parent;
- } else {
- (*doc)->current = NULL;
- }
- } else {
- astError( AST__XMLWF, "astRead(XmlChan): Start tag \"%s\" "
- "closed by end tag \"%s\".", status, astXmlGetTag( parent, 1 ),
- msg );
- }
-
- } else {
- (*doc)->current = NULL;
- astError( AST__XMLWF, "astRead(XmlChan): Unmatched end tag "
- "\"%s\" encountered.", status, msg );
- }
-
- text1 = astFree( text1 );
-
- } else {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag \"%s\" "
- "encountered.", status, msg );
- }
-
-/* If an error has occurred, or if this invocation of ReadContent was
- made recursively (rather tnan by the client), or if we have something
- to return, break out of the loop. */
- if( !astOK || depth > 0 || result ) {
- break;
-
-/* Otherwise, breaking would result in returning a null pointer to the
- client even though the end of the document may not have been reached.
- Revert to state 0 and search for further intersting elements. */
- } else {
- parent = (*doc)->current;
- state = 0;
- }
-
-/* State 102: We have just got the (prefix:)name for an element start tag, and
- the start tag contains no attributes, etc. Create a new XmlElement, adding
- it to the supplied parent, and then proceed to state 200 to read the
- content of the element. */
- } else if( state == 102 ) {
- if( text1 ){
- elem = astXmlAddElement( parent, text1, NULL );
- text1 = astFree( text1 );
- state = 200;
-
- } else {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag \"%s\" "
- "encountered.", status, msg );
- break;
- }
-
-/* State 103: We have just got the (prefix:)name for an empty element tag, and
- the tag does not contain further attributes, etc. Create a new XmlElement
- and store it in the container (if any). Indicate that there is no
- content to read, and then go on to state 200. */
- } else if( state == 103 ) {
- if( text1 ){
- elem = astXmlAddElement( parent, text1, NULL );
- elem->complete = 1;
- text1 = astFree( text1 );
- state = 200;
-
- } else {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag \"%s\" "
- "encountered.", status, msg );
- break;
- }
-
-/* State 104: We have just got the (prefix:)name for an element start tag, but
- the start tag may contain further attributes, etc. Create a new XmlElement
- and store it in the container (if any). Then go to state 12 in which we
- look for further attributes, etc. */
- } else if( state == 104 ) {
- if( text1 ){
- elem = astXmlAddElement( parent, text1, NULL );
- text1 = astFree( text1 );
- state = 12;
-
- } else {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag \"%s\" "
- "encountered.", status, msg );
- break;
- }
-
-/* State 105: We have just reached the end of a comment tag. Create a new
- XmlComment and store it in the parent. */
- } else if( state == 105 ) {
- if( text1 ){
-
-/* If we have a parent element, just add it to the element. */
- if( parent ) {
- if( wanted > 0 ) {
- astXmlAddComment( (AstXmlParent *) parent, 0, text1 );
- } else if( !skip ) {
- if( parent ) {
- astError( AST__BADIN, "astRead(XmlChan): Cannot interpret "
- "the input data \"%s\" within element %s.", status,
- msg, astXmlGetTag( parent, 1 ) );
- } else {
- astError( AST__BADIN, "astRead(XmlChan): Cannot interpret "
- "the input data: \"%s\".", status, msg );
- }
- break;
- }
-
-/* Otherwise, add it to the document prologue or epilogue. */
- } else {
- if( (*doc)->root ) {
- where = 3;
- } else if( (*doc)->prolog->dtdec ){
- where = 2;
- } else {
- where = 1;
- }
- astXmlAddComment( (AstXmlParent *) *doc, where, text1 );
- }
-
- text1 = astFree( text1 );
-
- } else {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag \"%s\" "
- "encountered.", status, msg );
- break;
- }
- state = 0;
-
-/* State 106: We have just reached the end of a CDATA tag. Create a new
- XmlCDATASection and store it in the container (if any). */
- } else if( state == 106 ) {
- if( text1 ){
- if( parent && wanted > 0 ) {
- astXmlAddCDataSection( parent, text1 );
- } else if( !skip ) {
- if( parent ) {
- astError( AST__BADIN, "astRead(XmlChan): Cannot interpret "
- "the input data \"%s\" within element %s.", status,
- msg, astXmlGetTag( parent, 1 ) );
- } else {
- astError( AST__BADIN, "astRead(XmlChan): Cannot interpret "
- "the input data: \"%s\".", status, msg );
- }
- break;
- }
- text1 = astFree( text1 );
- } else {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag \"%s\" "
- "encountered.", status, msg );
- break;
- }
- state = 0;
-
-/* State 107: We have just reached the end of an attribute or namespace
- setting. Create a new object and store it in the element created
- earlier. */
- } else if( state == 107 ) {
- if( text1 ){
- if( !elem ) {
- astError( AST__INTER, "ReadContent(xml): Container lost at state "
- "107 (AST internal programming error).", status );
- break;
- }
-
- if( !strcmp( text1, "xmlns" ) ) {
- astXmlAddURI( elem, NULL, text2 );
-
- } else if( !strncmp( text1, "xmlns:", 6 ) ) {
- astXmlAddURI( elem, text1+6, text2 );
-
- } else {
- text4 = RemoveEscapes( text2, status );
- astXmlAddAttr( elem, text1, text4, NULL );
- text4 = astFree( text4 );
- }
-
- text1 = astFree( text1 );
- text2 = astFree( text2 );
-
- } else {
- astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag \"%s\" "
- "encountered.", status, msg );
- break;
- }
- state = 12;
-
-/* State 108: We have just reached the end of an empty element tag to which
- we have been adding attributes, etc. */
- } else if( state == 108 ) {
- if( elem ) {
- elem->complete = 1;
- state = 200;
- } else {
- astError( AST__INTER, "Parse(xml): No container in state 108 "
- "(AST internal programming error).", status );
- break;
- }
-
-/* State 109: We have just reached the end of a DOCTYPE tag. */
- } else if( state == 109 ) {
-
- if( (*doc)->root ){
- astError( AST__XMLWF, "astRead(XmlChan): An DOCTYPE tag "
- "\"%s\" was encountered within the body of the "
- "document.", status, msg );
- break;
-
- } else if( (*doc)->prolog->dtdec ){
- astError( AST__XMLWF, "astRead(XmlChan): Multiple DOCTYPE tags "
- "encountered." , status);
- break;
-
- } else {
- astXmlSetDTDec( *doc, text1, text2, text3 );
- text1 = astFree( text1 );
- text2 = astFree( text2 );
- text3 = astFree( text3 );
- state = 0;
- }
-
- } else if( state != 200 ) {
- astError( AST__INTER, "ReadContent(xml): Illegal state (%d) encountered "
- "(AST internal programming error).", status, state );
- }
-
-
-
-/* State 200: We now have now read a complete element start tag and have
- a corresponding XmlElement ("elem"), with all attributes and namespaces,
- etc (but no content). Call the "is_wanted" function to see if the client
- is interested in the element. */
- if( state == 200 ) {
-
-/* If this element is found at the root level of the document, store a
- pointer to it as the root element. Report an error if there is already
- a root element. */
- if( !parent ) {
- if( (*doc)->root ){
- if( astOK ) {
- astError( AST__XMLWF, "astRead(XmlChan): Multiple root "
- "elements encountered." , status);
- elem = astXmlDelete( elem );
- }
- break;
- } else {
- (*doc)->root = elem;
- ((AstXmlObject *) elem )->parent = (AstXmlParent *) (*doc);
- }
- }
-
-/* If we do not already know, ask the caller if it is interested in this new
- element. If no "is_wanted" function was supplied, assume all elements
- are interesting. */
- if( wanted == -1 ) {
- newwanted = is_wanted ? (*is_wanted)( elem, status ) : 1;
- } else {
- newwanted = wanted;
- }
-
-/* If it is not interested, report an error if skip is zero. */
- if( newwanted != 1 && !skip ) {
- if( parent ) {
- astError( AST__BADIN, "astRead(XmlChan): Cannot interpret "
- "the input data \"%s\" within element %s.", status,
- msg, astXmlGetTag( parent, 1 ) );
- } else {
- astError( AST__BADIN, "astRead(XmlChan): Cannot interpret "
- "the input data: \"%s\".", status, msg );
- }
- break;
- }
-
-/* Make the new element the "current" element in the document. */
- (*doc)->current = elem;
-
-/* Read the contents of the new element from the source. If the client is
- interested in the element, the read contents will be added to the
- element, otherwise they will be discarded after being read. */
- answer = ReadContent( doc, newwanted, is_wanted, skip, source,
- data, depth + 1, status );
-
-/* If the first interesting element was found inside "elem", then
- return it. If "elem" is not interesting and did not contain anything
- of interest, delete it and return the initialised NULL pointer. */
- if( newwanted < 0 ) {
- if( answer ) {
- result = answer;
- } else {
- elem = astXmlDelete( elem );
- }
-
-/* If the elem is of no interest, delete it and return the initialised
- NULL pointer. */
- } else if( newwanted == 0 ) {
- elem = astXmlDelete( elem );
-
-/* Otherwise, "elem" itself is definitely of interest. If "elem" is
- the first item of interest, return it. */
- } else if( wanted < 0 ) {
- result = elem;
- }
-
-/* If we have an answer to return, leave the loop, otherwise re-instate the
- original current element in the document and continue to read any text
- following the element. */
- if( result ) {
- break;
- } else {
- (*doc)->current = parent;
- state = 0;
- }
-
- } if( state > 22 ) {
- astError( AST__INTER, "ReadContent(xml): Illegal state (%d) encountered "
- "(AST internal programming error).", status, state );
- }
-
-/* Remember the previous two character */
- lc2 = lc;
- lc = c;
- }
-
-/* Free any dynamic strings */
- text1 = astFree( text1 );
- text2 = astFree( text2 );
- text3 = astFree( text3 );
- if( msg ) msg = astFree( msg );
-
-/* Delete the returned object if an error occurred. */
- if( !astOK ) result = astXmlDelete( result );
-
-/* Return the result. */
- return result;
-}
-
-
-
diff --git a/ast-5.3-1/xml.h b/ast-5.3-1/xml.h
deleted file mode 100644
index e76cd15..0000000
--- a/ast-5.3-1/xml.h
+++ /dev/null
@@ -1,392 +0,0 @@
-#if !defined( XML_INCLUDED ) /* Include this file only once */
-#define XML_INCLUDED
-/*
-*+
-* Name:
-* xml.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the AST xml module
-
-* Invocation:
-* #include "xml.h"
-
-* Description:
-* This include file defines the interface to the internal xml module
-* used by the AST library and provides the type definitions, function
-* prototypes and macros, etc. needed to use this module.
-
-* Inheritance:
-* The xml module is not a class and does not inherit.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 23-OCT-2003 (DSB):
-* Original version.
-* 12-JAN-2004 (DSB):
-* Major revisions.
-*/
-
-
-
-/* Constant Values. */
-/* ================ */
-
-/* These constants are used as identifiers for the different classes of
- XML object defined in this file. They are purposefully obscure to reduce
- the possibility of random integer values being incorrectly interpreted
- as valid XML types */
-#define AST__XMLBAD 0 /* Id for an uninitialised XmlObject */
-#define AST__XMLOBJECT 198263577 /* Id for XmlObject structure */
-#define AST__XMLELEM 182874779 /* Id for XmlElement structure */
-#define AST__XMLATTR 837746634 /* Id for XmlAttribute structure */
-#define AST__XMLCDATA 293854662 /* Id for XmlCDdataSection structure */
-#define AST__XMLCOM 748737648 /* Id for XmlComment structure */
-#define AST__XMLPI 983763553 /* Id for XmlPI structure */
-#define AST__XMLNAME 236756469 /* Id for XmlNamespace structure */
-#define AST__XMLDOC 356274395 /* Id for XmlDocument structure */
-#define AST__XMLPRO 743682474 /* Id for XmlPrologue structure */
-#define AST__XMLDEC 987546328 /* Id for XmlDeclPI structure */
-#define AST__XMLDTD 874673747 /* Id for XmlDTDec structure */
-#define AST__XMLWHITE 675849952 /* Id for XmlWhite structure */
-#define AST__XMLBLACK 347657863 /* Id for XmlBlack structure */
-
-/* The following constants refer to "interfaces", not "classes". */
-
-#define AST__XMLCHAR 456739289 /* Id for XmlCharData structure */
-#define AST__XMLCONT 673882993 /* Id for XmlContentItem structure */
-#define AST__XMLMISC 358768954 /* Id for XmlMiscItem structure */
-#define AST__XMLPAR 874366235 /* Id for XmlParent structure */
-
-/* Define constants used to size global arrays in this module. */
-#define AST__XML_GETTAG_BUFF_LEN 200
-
-/* Type Definitions. */
-/* ================= */
-
-/* Pre-define types so they can be used within structure definitions. */
-typedef struct AstXmlObject AstXmlObject;
-typedef struct AstXmlAttribute AstXmlAttribute;
-typedef struct AstXmlNamespace AstXmlNamespace;
-typedef struct AstXmlElement AstXmlElement;
-typedef struct AstXmlBlack AstXmlBlack;
-typedef struct AstXmlWhite AstXmlWhite;
-typedef struct AstXmlCDataSection AstXmlCDataSection;
-typedef struct AstXmlComment AstXmlComment;
-typedef struct AstXmlPI AstXmlPI;
-typedef struct AstXmlDocument AstXmlDocument;
-typedef struct AstXmlPrologue AstXmlPrologue;
-typedef struct AstXmlDeclPI AstXmlDeclPI;
-typedef struct AstXmlDTDec AstXmlDTDec;
-
-/* The following data types define "interfaces". That is each data type
- corresponds to a subset of the above classes. */
-
-/* Marks a class as "character data" */
-typedef AstXmlObject AstXmlCharData;
-
-/* Marks a class as a "content item" */
-typedef AstXmlObject AstXmlContentItem;
-
-/* Marks a class as a "miscalleneous item" */
-typedef AstXmlObject AstXmlMiscItem;
-
-/* Marks a class as being able to own a child */
-typedef AstXmlObject AstXmlParent;
-
-/* XmlObject structure. */
-/* -------------------- */
-/* Contains data common to all other structures */
-struct AstXmlObject {
- AstXmlParent *parent; /* The parent which contains this XmlObject */
- long int type; /* An ID giving the type of structure */
- int id; /* A unique id for this object. */
-};
-
-/* XmlAttribute structure. */
-/* ----------------------- */
-/* Describes an XML attribute */
-struct AstXmlAttribute {
- AstXmlObject obj; /* General information for this XmlObject */
- char *name; /* The name of the attribute */
- char *value; /* Attribute value */
- char *prefix; /* Namespace prefix for this attribute */
-};
-
-/* XmlNamespace structure. */
-/* ----------------------- */
-/* Describes an XML namespace definition */
-struct AstXmlNamespace {
- AstXmlObject obj; /* General information for this XmlObject */
- char *prefix; /* Namespace prefix */
- char *uri; /* Namespace URI */
-};
-
-/* XmlElement structure. */
-/* --------------------- */
-/* Describes an XML element */
-struct AstXmlElement {
- AstXmlObject obj; /* General information for this XmlObject */
- char *name; /* The type (name) of the element */
- AstXmlAttribute **attrs; /* Ptr. to list of attributes of the element */
- int nattr; /* Number of attributes in the above list */
- AstXmlContentItem **items; /* Ptr. to list of items in the element's content */
- int nitem; /* Number of items in above list */
- char *defns; /* Default Namespace URI for element content */
- char *prefix; /* Namespace prefix for this element */
- AstXmlNamespace **nsprefs; /* Ptr. to list of new Namespaces defined by this element */
- int nnspref; /* Number of Namespaces in above list */
- int complete; /* Have the contents of the element been read? */
-};
-
-/* XmlBlack structure. */
-/* ---------------------- */
-/* Describes character data containing at least one non-blank character. */
-struct AstXmlBlack {
- AstXmlObject obj; /* General information for this XmlObject */
- char *text; /* The character data */
-};
-
-/* XmlWhite structure. */
-/* ------------------- */
-/* Describes character data containing no one non-blank characters. */
-struct AstXmlWhite {
- AstXmlObject obj; /* General information for this XmlObject */
- char *text; /* The white character data */
-};
-
-/* XmlCDataSection structure. */
-/* ----------------------- */
-/* Describes an XML CDATA section */
-struct AstXmlCDataSection {
- AstXmlObject obj; /* General information for this XmlObject */
- char *text; /* The text of the cdata section */
-};
-
-/* XmlComment structure. */
-/* --------------------- */
-/* Describes an XML CDATA section */
-struct AstXmlComment {
- AstXmlObject obj; /* General information for this XmlObject */
- char *text; /* The text of the comment */
-};
-
-/* XmlPI structure. */
-/* ---------------- */
-/* Describes an XML processing instruction */
-struct AstXmlPI {
- AstXmlObject obj; /* General information for this XmlObject */
- char *target; /* The target of the processing instruction */
- char *text; /* The text of the processing instruction */
-};
-
-/* XmlDocument structure. */
-/* ---------------------- */
-/* Describes an entire XML document */
-struct AstXmlDocument {
- AstXmlObject obj; /* General information for this XmlObject */
- AstXmlPrologue *prolog; /* Pointer to document prologue */
- AstXmlElement *root; /* Pointer to root element */
- AstXmlMiscItem **epilog; /* List of XmlObjects forming the document epilogue */
- int nepi; /* No of XmlObjects pointers in "epilogue" */
- AstXmlElement *current; /* Pointer to element being read */
-};
-
-/* XmlPrologue structure. */
-/* ---------------------- */
-/* Describes an XML document prologue */
-struct AstXmlPrologue {
- AstXmlObject obj; /* General information for this XmlObject */
- AstXmlDeclPI *xmldecl; /* Pointer to XML declaration PI */
- AstXmlMiscItem **misc1; /* Group of of miscalleneous XmlObjects pointers */
- int nmisc1; /* No of XmlObjects pointers in "misc1" */
- AstXmlDTDec *dtdec; /* Pointer to Document Type Declaration */
- AstXmlMiscItem **misc2; /* Group of of miscalleneous XmlObjects pointers */
- int nmisc2; /* No of XmlObjects pointers in "misc2" */
-};
-
-/* XmlDecPI structure. */
-/* ------------------- */
-/* Describes an XML declaration PI */
-struct AstXmlDeclPI {
- AstXmlObject obj; /* General information for this XmlObject */
- char *text; /* The text of the XML declaration */
-};
-
-/* XmlDTDec structure. */
-/* ------------------- */
-/* Describes a data type declaration */
-struct AstXmlDTDec {
- AstXmlObject obj; /* General information for this XmlObject */
- char *name; /* Document type name */
- char *external; /* External ID */
- char *internal; /* Internal declarations */
-};
-
-
-#if defined(THREAD_SAFE) && defined(astCLASS)
-
-/* Define a structure holding all data items that are global within the
- xml.c file. */
-typedef struct AstXmlGlobals {
- int Next_ID;
- char GetTag_Buff[ AST__XML_GETTAG_BUFF_LEN + 1 ];
-} AstXmlGlobals;
-
-#endif
-
-
-
-
-/* Function prototypes. */
-/* ==================== */
-AstXmlAttribute *astXmlCheckAttribute_( void *, int, int * );
-AstXmlBlack *astXmlCheckBlack_( void *, int, int * );
-AstXmlCDataSection *astXmlCheckCDataSection_( void *, int, int * );
-AstXmlComment *astXmlCheckComment_( void *, int, int * );
-AstXmlContentItem *astXmlGetItem_( AstXmlElement *, int, int * );
-AstXmlDTDec *astXmlCheckDTDec_( void *, int, int * );
-AstXmlDeclPI *astXmlCheckDeclPI_( void *, int, int * );
-AstXmlDocument *astXmlCheckDocument_( void *, int, int * );
-AstXmlElement *astXmlAddElement_( AstXmlElement *, const char *, const char *, int * );
-AstXmlElement *astXmlCheckElement_( void *, int, int * );
-AstXmlParent *astXmlGetParent_( AstXmlObject *, int * );
-AstXmlObject *astXmlGetRoot_( AstXmlObject *, int * );
-AstXmlElement *astXmlReadDocument_( AstXmlDocument **, int (*)( AstXmlElement *, int * ), int, char (*)( void *, int * ), void *, int * );
-AstXmlNamespace *astXmlCheckNamespace_( void *, int, int * );
-AstXmlObject *astXmlCopy_( AstXmlObject *, int * );
-AstXmlObject *astXmlCheckObject_( void *, int, int * );
-AstXmlPI *astXmlCheckPI_( void *, int, int * );
-AstXmlPrologue *astXmlCheckPrologue_( void *, int, int * );
-AstXmlWhite *astXmlCheckWhite_( void *, int, int * );
-AstXmlCharData *astXmlCheckCharData_( void *, int, int * );
-AstXmlContentItem *astXmlCheckContentItem_( void *, int, int * );
-AstXmlMiscItem *astXmlCheckMiscItem_( void *, int, int * );
-AstXmlParent *astXmlCheckParent_( void *, int, int * );
-const char *astXmlFormat_( AstXmlObject *, int * );
-const char *astXmlGetAttributeValue_( AstXmlElement *, const char *, int * );
-const char *astXmlGetName_( AstXmlObject *, int * );
-const char *astXmlGetTag_( AstXmlObject *, int, int * );
-const char *astXmlGetType_( AstXmlObject *, int * );
-const char *astXmlGetURI_( AstXmlObject *, int * );
-const char *astXmlGetValue_( AstXmlObject *, int, int * );
-const char *astXmlShow_( AstXmlObject *, int * );
-int astXmlCheckType_( void *, long int, int * );
-int astXmlGetNattr_( AstXmlElement *, int * );
-int astXmlGetNitem_( AstXmlElement *, int * );
-void *astXmlAnnulTree_( AstXmlObject *, int * );
-void *astXmlAnnul_( AstXmlObject *, int * );
-void *astXmlDelete_( void *, int * );
-void astXmlAddAttr_( AstXmlElement *, const char *, const char *, const char *, int * );
-void astXmlAddCDataSection_( AstXmlElement *, const char *, int * );
-void astXmlAddCharData_( AstXmlParent *, int, const char *, int * );
-void astXmlAddComment_( AstXmlParent *, int, const char *, int * );
-void astXmlAddPI_( AstXmlParent *, int, const char *, const char *, int * );
-void astXmlAddURI_( AstXmlElement *, const char *, const char *, int * );
-void astXmlInsertElement_( AstXmlElement *, AstXmlElement *, int * );
-void astXmlPurge_( AstXmlParent *, int * );
-void astXmlRemoveAttr_( AstXmlElement *, const char *, const char *, int * );
-void astXmlRemoveItem_( AstXmlContentItem *, int * );
-void astXmlRemoveURI_( AstXmlElement *, const char *, int * );
-void astXmlSetXmlDec_( AstXmlDocument *, const char *, int * );
-void astXmlSetDTDec_( AstXmlDocument *, const char *, const char *, const char *, int * );
-
-#if defined(THREAD_SAFE) && defined(astCLASS)
-void astInitXmlGlobals_( AstXmlGlobals * );
-#else
-
-#ifdef DEBUG
-int astXmlTrace_( int );
-#endif
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These wrap up the functions defined by this module. */
-#define astXmlGetType(this) astXmlGetType_(this,STATUS_PTR)
-#define astXmlCheckAttribute(this,nullok) astXmlCheckAttribute_(this,nullok,STATUS_PTR)
-#define astXmlCheckBlack(this,nullok) astXmlCheckBlack_(this,nullok,STATUS_PTR)
-#define astXmlCheckCDataSection(this,nullok) astXmlCheckCDataSection_(this,nullok,STATUS_PTR)
-#define astXmlCheckCharData(this,nullok) astXmlCheckCharData_(this,nullok,STATUS_PTR)
-#define astXmlCheckComment(this,nullok) astXmlCheckComment_(this,nullok,STATUS_PTR)
-#define astXmlCheckContentItem(this,nullok) astXmlCheckContentItem_(this,nullok,STATUS_PTR)
-#define astXmlCheckDTDec(this,nullok) astXmlCheckDTDec_(this,nullok,STATUS_PTR)
-#define astXmlCheckDeclPI(this,nullok) astXmlCheckDeclPI_(this,nullok,STATUS_PTR)
-#define astXmlCheckDocument(this,nullok) astXmlCheckDocument_(this,nullok,STATUS_PTR)
-#define astXmlCheckElement(this,nullok) astXmlCheckElement_(this,nullok,STATUS_PTR)
-#define astXmlCheckMiscItem(this,nullok) astXmlCheckMiscItem_(this,nullok,STATUS_PTR)
-#define astXmlCheckNamespace(this,nullok) astXmlCheckNamespace_(this,nullok,STATUS_PTR)
-#define astXmlCheckObject(this,nullok) astXmlCheckObject_(this,nullok,STATUS_PTR)
-#define astXmlCheckPI(this,nullok) astXmlCheckPI_(this,nullok,STATUS_PTR)
-#define astXmlCheckParent(this,nullok) astXmlCheckParent_(this,nullok,STATUS_PTR)
-#define astXmlCheckPrologue(this,nullok) astXmlCheckPrologue_(this,nullok,STATUS_PTR)
-#define astXmlCheckWhite(this,nullok) astXmlCheckWhite_(this,nullok,STATUS_PTR)
-
-#define astXmlAddAttr(elem,name,value,prefix) astXmlAddAttr_(astXmlCheckElement(elem,0),name,value,prefix,STATUS_PTR)
-#define astXmlAddURI(elem,prefix,uri) astXmlAddURI_(astXmlCheckElement(elem,0),prefix,uri,STATUS_PTR)
-#define astXmlAnnul(this) astXmlAnnul_(astXmlCheckObject(this,1),STATUS_PTR)
-#define astXmlDelete(this) astXmlDelete_(this,STATUS_PTR)
-#define astXmlAnnulTree(this) astXmlAnnulTree_(astXmlCheckObject(this,1),STATUS_PTR)
-#define astXmlAddCDataSection(this,text) astXmlAddCDataSection_(astXmlCheckElement(this,0),text,STATUS_PTR)
-#define astXmlAddCharData(this,where,text) astXmlAddCharData_(astXmlCheckParent(this,0),where,text,STATUS_PTR)
-#define astXmlAddComment(this,where,text) astXmlAddComment_(astXmlCheckParent(this,0),where,text,STATUS_PTR)
-#define astXmlAddElement(this,name,prefix) astXmlAddElement_(astXmlCheckElement(this,1),name,prefix,STATUS_PTR)
-#define astXmlAddPI(this,where,target,text) astXmlAddPI_(astXmlCheckParent(this,0),where,target,text,STATUS_PTR)
-#define astXmlGetParent(this) astXmlGetParent_(astXmlCheckObject(this,0),STATUS_PTR)
-#define astXmlGetRoot(this) astXmlGetRoot_(astXmlCheckObject(this,0),STATUS_PTR)
-#define astXmlGetName(this) astXmlGetName_(astXmlCheckObject(this,0),STATUS_PTR)
-#define astXmlGetValue(this,report) astXmlGetValue_(astXmlCheckObject(this,0),report,STATUS_PTR)
-#define astXmlGetAttributeValue(this,name) astXmlGetAttributeValue_(astXmlCheckElement(this,0),name,STATUS_PTR)
-#define astXmlGetNattr(this) astXmlGetNattr_(astXmlCheckElement(this,0),STATUS_PTR)
-#define astXmlGetNitem(this) astXmlGetNitem_(astXmlCheckElement(this,0),STATUS_PTR)
-#define astXmlGetItem(this,item) astXmlGetItem_(astXmlCheckElement(this,0),item,STATUS_PTR)
-#define astXmlGetAttributeValue(this,name) astXmlGetAttributeValue_(astXmlCheckElement(this,0),name,STATUS_PTR)
-#define astXmlGetTag(this,opening) astXmlGetTag_(astXmlCheckObject(this,0),opening,STATUS_PTR)
-#define astXmlGetURI(this) astXmlGetURI_(astXmlCheckObject(this,0),STATUS_PTR)
-#define astXmlFormat(this) astXmlFormat_(astXmlCheckObject(this,0),STATUS_PTR)
-#define astXmlShow(this) astXmlShow_(astXmlCheckObject(this,0),STATUS_PTR)
-#define astXmlRemoveItem(this) astXmlRemoveItem_(astXmlCheckContentItem(this,0),STATUS_PTR)
-#define astXmlRemoveAttr(this,name,prefix) astXmlRemoveAttr_(astXmlCheckElement(this,0),name,prefix,STATUS_PTR)
-#define astXmlRemoveURI(this,prefix) astXmlRemoveURI_(astXmlCheckElement(this,0),prefix,STATUS_PTR)
-#define astXmlReadDocument(doc,is_wanted,skip,source,data) astXmlReadDocument_(doc,is_wanted,skip,source,data,STATUS_PTR)
-#define astXmlInsertElement(this,elem) astXmlInsertElement_(astXmlCheckElement(this,0),astXmlCheckElement(elem,0),STATUS_PTR)
-#define astXmlPurge(this) astXmlPurge_(astXmlCheckParent(this,1),STATUS_PTR)
-#define astXmlSetXmlDec(this,text) astXmlSetXmlDec_(astXmlCheckDocument(this,0),text,STATUS_PTR)
-#define astXmlSetDTDec(this,text1,text2,text3) astXmlSetDTDec_(astXmlCheckDocument(this,0),text1,text2,text3,STATUS_PTR)
-#define astXmlCheckType(this,type) astXmlCheckType_(this,type,STATUS_PTR)
-#define astXmlCopy(this) astXmlCopy_(astXmlCheckObject(this,1),STATUS_PTR)
-
-#ifdef DEBUG
-#define astXmlTrace(show) astXmlTrace_(show)
-#endif
-
-#endif
-
-
-
diff --git a/ast-5.3-1/xmlchan.c b/ast-5.3-1/xmlchan.c
deleted file mode 100644
index bc95321..0000000
--- a/ast-5.3-1/xmlchan.c
+++ /dev/null
@@ -1,14240 +0,0 @@
-/*
-*class++
-* Name:
-* XmlChan
-
-* Purpose:
-* I/O Channel using XML to represent Objects.
-
-* Constructor Function:
-c astXmlChan
-f AST_XMLCHAN
-
-* Description:
-* A XmlChan is a specialised form of Channel which supports XML I/O
-* operations. Writing an Object to an XmlChan (using
-c astWrite) will, if the Object is suitable, generate an
-f AST_WRITE) will, if the Object is suitable, generate an
-* XML description of that Object, and reading from an XmlChan will
-* create a new Object from its XML description.
-*
-* Normally, when you use an XmlChan, you should provide "source"
-c and "sink" functions which connect it to an external data store
-c by reading and writing the resulting XML text. These functions
-f and "sink" routines which connect it to an external data store
-f by reading and writing the resulting XML text. These routines
-* should perform any conversions needed between external character
-c encodings and the internal ASCII encoding. If no such functions
-f encodings and the internal ASCII encoding. If no such routines
-* are supplied, a Channel will read from standard input and write
-* to standard output.
-
-* Inheritance:
-* The XmlChan class inherits from the Channel class.
-
-* Attributes:
-* In addition to those attributes common to all Channels, every
-* XmlChan also has the following attributes:
-*
-* - XmlFormat: System for formatting Objects as XML
-* - XmlIndent: Controls output of indentation and line feeds
-* - XmlLength: Controls output buffer length
-* - XmlPrefix: The namespace prefix to use when writing
-
-* Functions:
-c The XmlChan class does not define any new functions beyond those
-f The XmlChan class does not define any new routines beyond those
-* which are applicable to all Mappings.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2009 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: David Berry (Starlink)
-
-* History:
-* 10-OCT-2003 (DSB):
-* Original version.
-* 6-FEB-2004 (DSB):
-* Added XmlPrefix and XmlFormat attributes.
-* 10-FEB-2004 (DSB):
-* - Added debug conditional code to keep track of memory leaks.
-* - Fixed bug which prevented more than 1 object being read from
-* an XmlChan.
-* 7-DEC-2005 (DSB):
-* Free memory allocated by calls to astReadString.
-*class--
-
-* Further STC work:
-* - Speed up general STC processing (a lot of time seems to be spent
-* simplifying things)
-* - Document (including a complete description of what is and is not
-* supported in the reference docs for the XmlFormat attribute).
-* - Produce a schema describing the format which can in fact be read by
-* AST.
-* - Look at Jonathan McDowell's mini-STC schema (also STC stuff in
-* spectral data model)
-* - Web services. Read only: test STCs for overlap, test points for
-* inclusion/exclusion, plot a mask over an image, verification (can AST
-* read it & does it generate warnings?). Read/Write: convert FITS to STC,
-* transform STC into a new coord system.
-* - Add support for writing as well as reading
-* - Modify Stc... constructors to check that the supplied Frame is suitable.
-* - What about multiple AstroCoordFrames and AstroCoordAreas in a STC?
-* - Add support for generic CoordFrames
-* - What should be done with pixel coords info within STC?
-* - Extend coverage (e.g. to 3D space frames, etc)
-
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS XmlChan
-
-/* Number of spaces indentation per level of nesting */
-#define INDENT_INC 3
-
-/* The XML element name used to store an AST attribute setting */
-#define ATTR "_attribute"
-
-/* The XML element name used for an AST "isa" element */
-#define ISA "_isa"
-
-/* The XML attribute name which holds the name of the AST class which
- defines the item contained in the element. */
-#define DEFINEDBY "definedby"
-
-/* The XML attribute name which holds the name of the AST attribute */
-#define NAME "name"
-
-/* The XML attribute name which holds the value of the AST attribute */
-#define VALUE "value"
-
-/* The XML attribute name which indicates if the AST attribute value is a
- default value. */
-#define DEFAULT "default"
-
-/* The XML attribute name which indicates if the AST attribute value was
- originally a string value. */
-#define QUOTED "quoted"
-
-/* The XML attribute name which holds a description of the AST attribute. */
-#define DESC "desc"
-
-/* The XML attribute name which holds the label associated with an AST
- Object (if any). */
-#define LABEL "label"
-
-/* A string used to indicate atrue attribute value */
-#define TRUE "true"
-
-/* Format identifiers and strings */
-#define UNKNOWN_FORMAT -1
-#define NATIVE_FORMAT 0
-#define QUOTED_FORMAT 1
-#define IVOA_FORMAT 2
-#define MAX_FORMAT 2
-#define UNKNOWN_STRING "UNKNOWN"
-#define NATIVE_STRING "NATIVE"
-#define QUOTED_STRING "QUOTED"
-#define IVOA_STRING "IVOA"
-
-/* Values representing message severities. */
-#define WARNING 0
-#define FAILURE 1
-#define RESET 2
-
-/* Known IVOA namespaces. When a new name is added, update the FindIVOAClass
- function. */
-#define STC_URI "urn:nvo-stc"
-
-/* Known IVOA Classes and attributes. When a new name is added, it may be
- necessary to update the FindIVOAClass function. */
-#define STC_RESOURCE_PROFILE "STCResourceProfile"
-#define SEARCH_LOCATION "SearchLocation"
-#define OBSERVATION_LOCATION "ObservationLocation"
-#define OBSERVATORY_LOCATION "ObservatoryLocation"
-#define CATALOG_ENTRY_LOCATION "CatalogEntryLocation"
-#define OBS_DATA_LOCATION "ObsDataLocation"
-#define ASTRO_COORD_SYSTEM "AstroCoordSystem"
-#define ASTRO_COORD_AREA "AstroCoordArea"
-#define ASTRO_COORDS "AstroCoords"
-#define TIME_FRAME "TimeFrame"
-#define SPACE_FRAME "SpaceFrame"
-#define SPECTRAL_FRAME "SpectralFrame"
-#define REDSHIFT_FRAME "RedshiftFrame"
-#define DOPPLER_DEFINITION "DopplerDefinition"
-
-/* Returns string "an" or "a" depending on whether the first character of
- the supplied string is a vowel or not. */
-#define ANA(t) (t?(strchr("AaEeIiOoUu",t[0])?"an":"a"):"")
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "object.h" /* Base Object class */
-#include "frame.h" /* Coordinate Frames */
-#include "timeframe.h" /* Time coordinate Frames */
-#include "cmpframe.h" /* Coordinate Frames */
-#include "skyframe.h" /* Celestial coordinate Frames */
-#include "specframe.h" /* Spectral coordinate Frames */
-#include "region.h" /* Regions within coordinate Frames */
-#include "ellipse.h" /* Ellipses within coordinate Frames */
-#include "pointlist.h" /* Points within coordinate Frames */
-#include "polygon.h" /* Polygons within coordinate Frames */
-#include "circle.h" /* Circles within coordinate Frames */
-#include "keymap.h" /* Mapping of keys to values */
-#include "channel.h" /* Interface for parent class */
-#include "xmlchan.h" /* Interface definition for this class */
-#include "loader.h" /* Interface to the global loader */
-#include "object.h" /* Base Object class */
-#include "wcsmap.h" /* Angular conversion constants */
-#include "xml.h" /* AST XML facilities */
-#include "stcresourceprofile.h" /* IVOA StcResourceProfile class */
-#include "stcsearchlocation.h" /* IVOA SearchLocation class */
-#include "stccatalogentrylocation.h"/* IVOA CatalogEntryLocation class */
-#include "stcobsdatalocation.h" /* IVOA ObsDataLocation class */
-#include "nullregion.h" /* Null regions */
-#include "interval.h" /* Axis intervals */
-#include "box.h" /* Box regions */
-#include "cmpregion.h" /* Compound regions */
-#include "prism.h" /* Prism regions */
-#include "unitmap.h" /* Unit Mappings */
-#include "unit.h" /* Unit handling utilities */
-#include "pal.h" /* slalib functions */
-#include "globals.h" /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <float.h>
-#include <limits.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Type Definitions */
-/* ================ */
-
-/* A type for functions which read an IVOA element and return a
- corresponding AST Object. */
-typedef AstObject *(*IVOAReader)( AstXmlChan *, AstXmlElement *, int * );
-
-/* A structure to hold the result of scanning the content of an IVOA
- element.*/
-typedef struct IVOAScan {
- int n; /* Number of element names described by this structure */
- int *count; /* Array holding number of each element name found */
- AstXmlElement ***el; /* Array holding pointers to each element found */
-} IVOAScan;
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static int (* parent_getfull)( AstChannel *, int * );
-static int (* parent_getcomment)( AstChannel *, int * );
-
-/* Text values used to represent XmlFormat values externally. These
- should be in the order defined by the associated constants above. */
-static const char *xformat[3] = { NATIVE_STRING, QUOTED_STRING, IVOA_STRING };
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->IsUsable_This = NULL; \
- globals->GetAttrib_Buff[ 0 ] = 0; \
- globals->GetNextChar_C = NULL; \
- globals->GetNextChar_Buf = NULL;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(XmlChan)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(XmlChan,Class_Init)
-#define class_vtab astGLOBAL(XmlChan,Class_Vtab)
-#define isusable_this astGLOBAL(XmlChan,IsUsable_This)
-#define getattrib_buff astGLOBAL(XmlChan,GetAttrib_Buff)
-#define getnextchar_c astGLOBAL(XmlChan,GetNextChar_C)
-#define getnextchar_buf astGLOBAL(XmlChan,GetNextChar_Buf)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-/* An XmlChan pointer use to communicate with the IsUsable function. */
-static AstXmlChan *isusable_this = NULL;
-
-/* Buffer returned by GetAttrib. */
-static char getattrib_buff[ 51 ];
-
-/* Variables used in GetNextChar */
-static char *getnextchar_c = NULL; /* Pointer to next character to read */
-static char *getnextchar_buf = NULL; /* Pointer to previously read text */
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstXmlChanVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstXmlChan *astXmlChanForId_( const char *(*)( void ),
- char *(*)( const char *(*)( void ), int * ),
- void (*)( const char * ),
- void (*)( void (*)( const char * ), const char *, int * ),
- const char *, ... );
-AstXmlChan *astXmlChanId_( const char *(* source)( void ),
- void (* sink)( const char * ),
- const char *options, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstObject *AstroCoordSystemReader( AstXmlChan *, AstXmlElement *, int * );
-static AstObject *MakeAstFromXml( AstXmlChan *, AstXmlElement *, int * );
-static AstObject *ObsDataLocationReader( AstXmlChan *, AstXmlElement *, int * );
-static AstObject *Read( AstChannel *, int * );
-static AstObject *ReadObject( AstChannel *, const char *, AstObject *, int * );
-static AstObject *RedshiftFrameReader( AstXmlChan *, AstXmlElement *, int * );
-static AstObject *SpaceFrameReader( AstXmlChan *, AstXmlElement *, int * );
-static AstObject *SpectralFrameReader( AstXmlChan *, AstXmlElement *, int * );
-static AstObject *StcMetadataReader( AstXmlChan *, AstXmlElement *, int * );
-static AstObject *TimeFrameReader( AstXmlChan *, AstXmlElement *, int * );
-static AstPointList *ObservatoryLocationReader( AstXmlChan *, AstXmlElement *, AstStcObsDataLocation *, int * );
-static AstRegion *AllSkyReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *AstroCoordAreaReader( AstXmlChan *, AstXmlElement *, AstFrame *, AstRegion *[4], int, AstKeyMap **, int * );
-static AstRegion *BoxReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *CircleReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *ConstraintReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *ConvexReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *Coord2VecIntervalReader( AstXmlChan *, AstXmlElement *, const char *, AstFrame *, int * );
-static AstRegion *Coord3VecIntervalReader( AstXmlChan *, AstXmlElement *, const char *, AstFrame *, int * );
-static AstRegion *CoordScalarIntervalReader( AstXmlChan *, AstXmlElement *, const char *, AstFrame *, int * );
-static AstRegion *EllipseReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *IntersectionReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *NegationReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *PolygonReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *Position2DReader( AstXmlChan *, AstXmlElement *, AstFrame *, double *, AstKeyMap **, int * );
-static AstRegion *PositionIntervalReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *RedshiftIntervalReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *RedshiftReader( AstXmlChan *, AstXmlElement *, AstFrame *, AstKeyMap **, int * );
-static AstRegion *StcRegionReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *RegionReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *SpectralIntervalReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *SpectralReader( AstXmlChan *, AstXmlElement *, AstFrame *, double *, AstKeyMap **, int * );
-static AstRegion *SphereReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *TimeIntervalReader( AstXmlChan *, AstXmlElement *, AstTimeFrame *, int * );
-static AstRegion *TimeReader( AstXmlChan *, AstXmlElement *, AstTimeFrame *, double *, AstKeyMap **, int * );
-static AstRegion *UnionReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstSystemType RedshiftSys( AstXmlChan *, AstXmlElement *, char **, int, int * );
-static AstSystemType SpecSys( AstXmlChan *, AstXmlElement *, const char *, int, int * );
-static AstXmlElement *FindAttribute( AstXmlChan *, const char *, int * );
-static AstXmlElement *FindElement( AstXmlChan *, AstXmlElement *, const char *, int * );
-static AstXmlElement *FindObject( AstXmlChan *, const char *, int * );
-static AstXmlElement *MakePos2D( AstXmlChan *, AstXmlElement *, int * );
-static AstXmlElement *ReadXmlText( AstXmlChan *, int * );
-static AstXmlElement *Remove( AstXmlChan *, AstXmlElement *, int * );
-static IVOAReader FindIVOAClass( AstXmlElement *, int *, int * );
-static IVOAScan *FreeIVOAScan( IVOAScan *, int * );
-static IVOAScan *ScanIVOAElement( AstXmlChan *, AstXmlElement *, int, const char *[], int[], int[], int * );
-static char *ReadString( AstChannel *, const char *, const char *, int * );
-static char *SourceWrap( const char *(*)( void ), int * );
-static char GetNextChar( void *, int * );
-static const char *FindNextIsA( AstXmlElement *, int, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static const char *GetTag( AstXmlObject *, int, int * );
-static double AstronTimeReader( AstXmlChan *, AstXmlElement *, AstTimeFrame *, int * );
-static double AttrValueD( AstXmlChan *, AstXmlElement *, const char *, double, int * );
-static double ElemValueD( AstXmlChan *, AstXmlElement *, double, int * );
-static double Error2PAReader( AstXmlChan *, AstXmlElement *, double *, int * );
-static double MakeMJD( AstTimeFrame *, double, int * );
-static double PosAngleReader( AstXmlChan *, AstXmlElement *, int * );
-static double ReadDouble( AstChannel *, const char *, double, int * );
-static int AstroCoordsReader( AstXmlChan *, AstXmlElement *, AstFrame *, AstRegion *[4], AstKeyMap **, int * );
-static int AttrValueB( AstXmlChan *, AstXmlElement *, const char *, int, int * );
-static int AttrValueI( AstXmlChan *, AstXmlElement *, const char *, int, int * );
-static int ElemListD( AstXmlChan *, AstXmlElement *, int, double *, int * );
-static int FindString( int, const char *[], const char *, const char *, const char *, const char *, int * );
-static int GetComment( AstChannel *, int * );
-static int GetFull( AstChannel *, int * );
-static int IsUsable( AstXmlElement *, int * );
-static int ReadInt( AstChannel *, const char *, int, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int Use( AstXmlChan *, int, int, int * );
-static int Ustrcmp( const char *, const char *, int * );
-static int Ustrncmp( const char *, const char *, size_t, int * );
-static int VertexReader( AstXmlChan *, AstXmlElement *, double *, double *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void FillAndLims( AstXmlChan *, AstXmlElement *, AstRegion *, int * );
-static void Geod( double, double, double *, double *, int * );
-static void OutputText( AstXmlChan *, const char *, int, int * );
-static void ReCentreAnc( AstRegion *, int, AstKeyMap **, int * );
-static void ReadClassData( AstChannel *, const char *, int * );
-static void Report( AstXmlChan *, AstXmlElement *, int, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SinkWrap( void (*)( const char * ), const char *, int * );
-static void WriteBegin( AstChannel *, const char *, const char *, int * );
-static void WriteDouble( AstChannel *, const char *, int, int, double, const char *, int * );
-static void WriteEnd( AstChannel *, const char *, int * );
-static void WriteInt( AstChannel *, const char *, int, int, int, const char *, int * );
-static void WriteIsA( AstChannel *, const char *, const char *, int * );
-static void WriteObject( AstChannel *, const char *, int, int, AstObject *, const char *, int * );
-static void WriteString( AstChannel *, const char *, int, int, const char *, const char *, int * );
-static AstTimeScaleType TimeScaleReader( AstXmlChan *, AstXmlElement *, int * );
-
-static int TestXmlLength( AstXmlChan *, int * );
-static void ClearXmlLength( AstXmlChan *, int * );
-static void SetXmlLength( AstXmlChan *, int, int * );
-static int GetXmlLength( AstXmlChan *, int * );
-
-static int TestXmlFormat( AstXmlChan *, int * );
-static void ClearXmlFormat( AstXmlChan *, int * );
-static void SetXmlFormat( AstXmlChan *, int, int * );
-static int GetXmlFormat( AstXmlChan *, int * );
-
-static int TestXmlIndent( AstXmlChan *, int * );
-static void ClearXmlIndent( AstXmlChan *, int * );
-static void SetXmlIndent( AstXmlChan *, int, int * );
-static int GetXmlIndent( AstXmlChan *, int * );
-
-static int TestXmlPrefix( AstXmlChan *, int * );
-static void ClearXmlPrefix( AstXmlChan *, int * );
-static void SetXmlPrefix( AstXmlChan *, const char *, int * );
-static const char * GetXmlPrefix( AstXmlChan *, int * );
-
-/* Member functions. */
-/* ================= */
-
-static AstRegion *AllSkyReader( AstXmlChan *this, AstXmlElement *elem,
- AstFrame *frm, int *status ){
-/*
-* Name:
-* AllSkyReader
-
-* Purpose:
-* Make an AST Region from an IVOA AllSky element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstRegion *AllSkyReader( AstXmlChan *this, AstXmlElement *elem,
-* AstFrame *frm, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Region from the supplied IVOA
-* AllSky element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA AllSky element.
-* frm
-* Pointer to the 2D Frame in which the returned Region should be
-* defined. If the Unit attribute is not set, this function will
-* set it to the value supplied in "unit" before returning.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
- AstRegion *new; /* Pointer to returned Region */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Create a negated NullRegion (this is a boundless Region which includes
- all points in the Frame). */
- new = (AstRegion *) astNullRegion( frm, NULL, "negated=1", status );
-
-/* Get any fill factor from the element and assign to the returned Region. */
- FillAndLims( this, elem, new, status );
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
- return new;
-}
-
-static AstRegion *AstroCoordAreaReader( AstXmlChan *this, AstXmlElement *elem,
- AstFrame *frm, AstRegion *uncs[4],
- int nanc, AstKeyMap **ancs, int *status ) {
-/*
-* Name:
-* AstroCoordAreaReader
-
-* Purpose:
-* Make an AST Region from an IVOA AstroCoordArea element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstRegion *AstroCoordAreaReader( AstXmlChan *this, AstXmlElement *elem,
-* AstFrame *frm, AstRegion *uncs[4],
-* int nanc, AstKeyMap **ancs, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Region from the supplied IVOA
-* AstroCoordArea element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA AstroCoordArea element. May be NULL, in
-* which case a NullRegion is returned.
-* frm
-* The Frame in which the returned Region is to be defined. If
-* Units or reference values (Epoch, RestFreq, RefRA, etc) are not set
-* for any axes, then they will be set by this function if possible.
-* uncs
-* Array holding pointers to the uncertainty Regions to be associated
-* with each of the four STC domains (space, time, spectral, redshift).
-* NULL should be suppied in any element for which no uncertainty is
-* available.
-* nanc
-* Number of KeyMap pointers stored in "ancs"
-* ancs
-* Pointer to an array of "nanc" elements, each being a pointer to
-* a KeyMap. Each one describes the ancilary information in an
-* AstroCoords element associated with the AstroCoordsArea decribed
-* by "region". Each KeyMap has elements with keys AST__STCERROR,
-* AST__STCRES, AST__STCSIZE, AST__STCPIXSZ, AST__STCVALUE each of
-* which holds a pointer to a Region.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Region.
-*/
-
-/* Local Variables: */
- AstRegion *r;
- AstFrame *cfrm;
- AstFrame *fr;
- AstFrame *pfrm;
- AstFrame *red_frame;
- AstFrame *space_frame;
- AstFrame *spec_frame;
- AstFrameSet *fs;
- AstMapping *map;
- AstObject *o;
- AstRegion **red_list;
- AstRegion **spec_list;
- AstRegion **space_list;
- AstRegion **time_list;
- AstRegion *new;
- AstRegion *reg;
- AstRegion *rred;
- AstRegion *rspec;
- AstRegion *rspace;
- AstRegion *rtime;
- AstRegion *sum;
- AstRegion *tmp;
- AstTimeFrame *time_frame;
- IVOAScan *scan;
- char *decset;
- char *raset;
- char buff[ DBL_DIG + 30 ];
- char setting[ 100 ];
- const char *dom;
- const char *id;
- const char *names[4];
- const char *name;
- const char *old_units;
- const char *text;
- double decref;
- double lbnd[2];
- double raref;
- double space_val[2];
- double spec_val;
- double time_val;
- double ubnd[2];
- int i;
- int ianc;
- int ired;
- int ispace;
- int ispec;
- int itime;
- int k;
- int l;
- int max[4];
- int min[4];
- int nax;
- int nred;
- int nspace;
- int nspec;
- int ntime;
- int paxis;
-
- static const char *key[ 5 ] = { AST__STCERROR,
- AST__STCRES,
- AST__STCSIZE,
- AST__STCPIXSZ,
- AST__STCVALUE };
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If null AstroCoordArea element has been supplied, return a NullRegion. */
- if( !elem ) {
- new = (AstRegion *) astNullRegion( frm, NULL, "", status );
-
-/* Otherwise, create a Region of suitable class. */
- } else {
-
-/* First identify the individual Frames within the supplied Frame. Current
- implementation for spatial axes is limited to celestial longitude and
- latitude. */
- space_frame = NULL;
- spec_frame = NULL;
- red_frame = NULL;
- time_frame = NULL;
-
- nax = astGetNaxes( frm );
- for( i = 0; i < nax; i++ ) {
- astPrimaryFrame( frm, i, &pfrm, &paxis );
- dom = astGetDomain( pfrm );
- if( !strcmp( dom, "SKY" ) ) {
- if( !space_frame ) {
- space_frame = astClone( pfrm );
- } else if( pfrm != space_frame) {
- Report( this, elem, FAILURE, "contains more than 2 spatial axes", status );
- }
-
- } else if( !strcmp( dom, "TIME" ) ) {
- if( !time_frame ) {
- if( astIsATimeFrame( pfrm ) ) {
- time_frame = (AstTimeFrame *) astClone( pfrm );
- } else if( astOK ) {
- astError( AST__INTER, "AstroCoordAreaReader(XmlChan): %s "
- "supplied where TimeFrame expected (internal "
- "AST programming error).", status, astGetClass( pfrm ) );
- }
- } else {
- Report( this, elem, FAILURE, "contains more than 1 time axis", status );
- }
-
- } else if( !strcmp( dom, "SPECTRUM" ) ) {
- if( !spec_frame ) {
- spec_frame = astClone( pfrm );
- } else {
- Report( this, elem, FAILURE, "contains more than 1 spectral axis", status );
- }
-
- } else if( !strcmp( dom, "REDSHIFT" ) ) {
- if( !red_frame ) {
- red_frame = astClone( pfrm );
- } else {
- Report( this, elem, FAILURE, "contains more than 1 redshift axis", status );
- }
-
- } else {
- Report( this, elem, FAILURE, "contains axes for an unsupported domain", status );
- }
- pfrm = astAnnul( pfrm );
- }
-
-/* Search the supplied element for the required sub-elements. */
- names[ 0 ] = "Sphere|PositionInterval|Region";
- names[ 1 ] = "TimeInterval";
- names[ 2 ] = "SpectralInterval";
- names[ 3 ] = "RedshiftInterval";
- min[ 0 ] = 0;
- min[ 1 ] = 0;
- min[ 2 ] = 0;
- min[ 3 ] = 0;
- max[ 0 ] = INT_MAX;
- max[ 1 ] = INT_MAX;
- max[ 2 ] = INT_MAX;
- max[ 3 ] = INT_MAX;
- scan = ScanIVOAElement( this, elem, 4, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Create Regions for all the SpatialIntervals found in the supplied element. */
- space_val[ 0 ] = AST__BAD;
- space_val[ 1 ] = AST__BAD;
- nspace = scan->count[ 0 ];
- space_list = astMalloc( sizeof(AstRegion *)*(size_t)nspace );
- if( space_list ) {
- for( ispace = 0; ispace < nspace; ispace++ ) {
- name = astXmlGetName( scan->el[ 0 ][ ispace ] );
- if( !strcmp( name, "Sphere" ) ) {
- space_list[ ispace ] = SphereReader( this,
- scan->el[ 0 ][ ispace ],
- space_frame, status );
- } else if( !strcmp( name, "PositionInterval" ) ) {
- space_list[ ispace ] = PositionIntervalReader( this,
- scan->el[ 0 ][ ispace ],
- space_frame, status );
- } else if( !strcmp( name, "Region" ) ) {
- space_list[ ispace ] = StcRegionReader( this,
- scan->el[ 0 ][ ispace ],
- space_frame, status );
- } else if( astOK ) {
- astError( AST__INTER, "AstroCoordAreaReader(XmlChan): "
- "SpatialInterval type %s not yet supported "
- "(AST internal programming error).", status, name );
- break;
- }
-
-/* Store any uncertainty region.*/
- if( uncs[ 0 ] ) astSetUnc( space_list[ ispace ], uncs[ 0 ] );
-
- }
-
-/* If the spatial region is a single point we will use the point as the
- reference position for any SpecFrames which are created. If there is
- just one spatial interval, and if it is bounded. and if the bounds are
- equal on both axes, note the mean position. */
- if( nspace == 1 ){
- if( astGetBounded( space_list[ 0 ] ) ) {
- astGetRegionBounds( space_list[ 0 ], lbnd, ubnd );
- if( astEQUAL( lbnd[ 0 ], ubnd[ 0 ] ) &&
- astEQUAL( lbnd[ 1 ], ubnd[ 1 ] ) ) {
- space_val[ 0 ] = 0.5*( lbnd[ 0 ] + ubnd[ 0 ] );
- space_val[ 1 ] = 0.5*( lbnd[ 1 ] + ubnd[ 1 ] );
- }
- }
- }
- }
-
-/* Create Regions for all the TimeIntervals found in the supplied element. */
- time_val = AST__BAD;
- ntime = scan->count[ 1 ];
- time_list = astMalloc( sizeof(AstRegion *)*(size_t)ntime );
- if( time_list ) {
- for( itime = 0; itime < ntime; itime++ ) {
- time_list[ itime ] = TimeIntervalReader( this,
- scan->el[ 1 ][ itime ],
- time_frame, status );
-
-/* Store any uncertainty region. Transfer the System and TimeOrigin
- values from the time region to the time uncertainty, if set. */
- if( uncs[ 1 ] ) {
-
- if( astTestSystem( time_frame ) &&
- astTestTimeOrigin( time_frame ) ) {
-
- sprintf( setting, "System=%s",
- astGetC( time_frame, "System" ) );
- astRegSetAttrib( uncs[ 1 ], setting, NULL );
-
-
- if( astTestUnit( time_frame, 0 ) ) {
- old_units = astGetUnit( time_frame, 0 );
- old_units = astStore( NULL, old_units,
- strlen( old_units ) + 1 );
- } else {
- old_units = NULL;
- }
-
- astSetUnit( time_frame, 0, astGetUnit( uncs[ 1 ], 0 ) );
-
- sprintf( setting, "TimeOrigin=%s",
- astGetC( time_frame, "TimeOrigin" ) );
- astRegSetAttrib( uncs[ 1 ], setting, NULL );
-
- if( old_units ) {
- astSetUnit( time_frame, 0, old_units );
- old_units = astFree( (void *) old_units );
- } else {
- astClearUnit( time_frame, 0 );
- }
-
- }
-
- astSetUnc( time_list[ itime ], uncs[ 1 ] );
- }
- }
-
-/* Use the mid point as the Epoch for all Frames which are created. If
- either limit is not specified, use the specified limit. */
- if( ntime > 0 ){
- astGetRegionBounds( time_list[ 0 ], lbnd, ubnd );
- if( fabs( lbnd[ 0 ] ) != DBL_MAX && lbnd[ 0 ] != AST__BAD ){
- if( fabs( ubnd[ 0 ] ) != DBL_MAX && ubnd[ 0 ] != AST__BAD ){
- time_val = 0.5*( lbnd[ 0 ] + ubnd[ 0 ] );
- } else {
- time_val = lbnd[ 0 ];
- }
- } else if( fabs( ubnd[ 0 ] ) != DBL_MAX && ubnd[ 0 ] != AST__BAD ){
- time_val = ubnd[ 0 ];
- }
- }
- }
-
-/* Create Regions for all the SpectralIntervals found in the supplied element. */
- spec_val = AST__BAD;
- nspec = scan->count[ 2 ];
- spec_list = astMalloc( sizeof(AstRegion *)*(size_t)nspec );
- if( spec_list ) {
- for( ispec = 0; ispec < nspec; ispec++ ) {
- spec_list[ ispec ] = SpectralIntervalReader( this,
- scan->el[ 2 ][ ispec ],
- spec_frame, status );
-/* Store any uncertainty region.*/
- if( uncs[ 2 ] ) astSetUnc( spec_list[ ispec ], uncs[ 2 ] );
- }
-
-/* If the spectral region is a single point we will use the point as the
- rest frequency for all RedShift Frames which are created. If there is just
- one spectral interval, and if it is bounded. and if the bounds are equal,
- note the mean spectral value. */
- if( nspec == 1 ){
- if( astGetBounded( spec_list[ 0 ] ) ) {
- astGetRegionBounds( spec_list[ 0 ], lbnd, ubnd );
- if( astEQUAL( lbnd[ 0 ], ubnd[ 0 ] ) ) {
- spec_val = 0.5*( lbnd[ 0 ] + ubnd[ 0 ] );
- }
- }
- }
- }
-
-/* Create Regions for all the RedshiftIntervals found in the supplied element. */
- nred = scan->count[ 3 ];
- red_list = astMalloc( sizeof(AstRegion *)*(size_t)nred );
- if( red_list ) {
- for( ired = 0; ired < nred; ired++ ) {
- red_list[ ired ] = RedshiftIntervalReader( this,
- scan->el[ 3 ][ ired ],
- red_frame, status );
-/* Store any uncertainty region.*/
- if( uncs[ 3 ] ) astSetUnc( red_list[ ired ], uncs[ 3 ] );
- }
- }
-
-/* Free the can result structure.*/
- scan = FreeIVOAScan( scan, status );
-
-/* If the spatial regions cover only a single point, convert it to FK5
- J2000 and use it as the reference position for any SpecFrames (spectral or
- redshift) unless values were inherited from the supplied Frame. If the
- supplied Frame did not contain set values for these attributes, set them
- now. Use astRegSetAttrib which applies the attribute setting to both
- base and current Frame of the Region's FrameSet, and avoids re-mapping
- the current Frame. */
- if( astOK ) {
- if( space_val[ 0 ] != AST__BAD && space_val[ 1 ] != AST__BAD ) {
-
-/* First need to convert to FK5 J2000 and format into a string for use with
- astRegSetAttrib. Need to ensure that the Format and Digits attributes
- are set to values which will result in no loss of precision in the
- formatting and unformatting steps. */
- fr = astCopy( space_frame );
- astClear( fr, "Format(1),Format(2),Digits(1),Digits(2)" );
- astSet( fr, "digits=%d,system=FK5,equinox=J2000", status, DBL_DIG);
- fs = astConvert( space_frame, fr, "" );
- fr = astAnnul( fr );
- if( fs ) {
- astTran2( fs, 1, space_val, space_val + 1, 1, &raref, &decref );
-
- text = astFormat( fs, raref, 0 );
- l = text ? strlen( text ) : 0;
- raset = astMalloc( l + 10 );
- if( raset ) sprintf( raset, "refra=%s", text );
-
- text = astFormat( fs, decref, 1 );
- l = text ? strlen( text ) : 0;
- decset = astMalloc( l + 10 );
- if( decset ) sprintf( decset, "refdec=%s", text );
-
- fs = astAnnul( fs );
-
-/* Now set the FK5 J2000 values in the required Frames and Regions. */
- if( !spec_frame || !astTestRefRA( spec_frame ) ||
- !astTestRefDec( spec_frame ) ) {
- for( ispec = 0; ispec < nspec; ispec++ ) {
- astRegSetAttrib( spec_list[ ispec ], raset, NULL );
- astRegSetAttrib( spec_list[ ispec ], decset, NULL );
- }
-
- if( spec_frame ) {
- astSetRefRA( (AstSpecFrame *) spec_frame, raref );
- astSetRefDec( (AstSpecFrame *) spec_frame, decref );
- }
- }
-
- if( !red_frame || !astTestRefRA( red_frame ) ||
- !astTestRefDec( red_frame ) ) {
- for( ired = 0; ired < nred; ired++ ) {
- astRegSetAttrib( red_list[ ired ], raset, NULL );
- astRegSetAttrib( red_list[ ired ], decset, NULL );
- }
-
- if( red_frame ) {
- astSetRefRA( (AstSpecFrame *) red_frame, raref );
- astSetRefDec( (AstSpecFrame *) red_frame, decref );
- }
- }
-
- for( ianc = 0; ianc < nanc; ianc++ ) {
- for( k = 0; k < 5; k++ ) {
- if( astMapGet0A( ancs[ ianc ], key[ k ], &o ) ) {
- r = (AstRegion *) o;
- astRegSetAttrib( r, raset, NULL );
- astRegSetAttrib( r, decset, NULL );
- r = astAnnul( r );
- }
- }
- }
-
-/* Free resources. */
- if( raset ) raset = astFree( raset );
- if( decset ) decset = astFree( decset );
-
- } else if( astOK ) {
- astError( AST__INTER, "AstroCoordAreaReader(XmlChan):"
- " Cannot convert spatial position to FK5 J2000" , status);
- }
- }
-
-/* If a time region was specified, use a typical value as the epoch for
- all Frames. Call MakeMJD to convert "time_val" from the system of the
- TimeFrame to an MJD (as required by the Frame Epoch attribute). Set
- the value in both the returned Region and the supplied Frame. */
- if( time_val != AST__BAD ) {
- fr = astRegFrame( time_list[ 0 ] );
- if( astIsATimeFrame( fr ) ) {
- time_val = MakeMJD( (AstTimeFrame *) fr, time_val, status );
- } else if( astOK ) {
- astError( AST__INTER, "AstroCoordAreaReader(XmlChan): %s "
- "supplied where TimeFrame expected (internal "
- "AST programming error).", status, astGetClass( fr ) );
- }
- fr = astAnnul( fr );
-
- sprintf( buff, "epoch= MJD %.*g", DBL_DIG, time_val );
-
- if( !space_frame || !astTestEpoch( space_frame ) ) {
- for( ispace = 0; ispace < nspace; ispace++ ) {
- astRegSetAttrib( space_list[ ispace ], buff, NULL );
- }
- if( space_frame ) astSetEpoch( space_frame, time_val );
- }
-
- if( !spec_frame || !astTestEpoch( spec_frame ) ) {
- for( ispec = 0; ispec < nspec; ispec++ ) {
- astRegSetAttrib( spec_list[ ispec ], buff, NULL );
- }
- if( spec_frame ) astSetEpoch( spec_frame, time_val );
- }
-
- if( !red_frame || !astTestEpoch( red_frame ) ) {
- for( ired = 0; ired < nred; ired++ ) {
- astRegSetAttrib( red_list[ ired ], buff, NULL );
- }
- if( red_frame ) astSetEpoch( red_frame, time_val );
- }
-
- for( ianc = 0; ianc < nanc; ianc++ ) {
- for( k = 0; k < 5; k++ ) {
- if( astMapGet0A( ancs[ ianc ], key[ k ], &o ) ) {
- r = (AstRegion *) o;
- astRegSetAttrib( r, buff, NULL );
- r = astAnnul( r );
- }
- }
- }
-
- }
-
-/* If the spectral regions cover only a single point, format it with its
- units so that the astSetAttrib function can convert it to Hz and use
- it as the rest frequency for any redshift Frames. */
- if( spec_val != AST__BAD && nred > 0 ) {
-
- text = astGetUnit( spec_frame, 0 );
- if( text ) sprintf( buff, "restfreq= %.*g %s", DBL_DIG,
- spec_val, text );
-
- if( !red_frame || !astTestRestFreq( red_frame ) ) {
- for( ired = 0; ired < nred; ired++ ) {
- astRegSetAttrib( red_list[ ired ], buff, NULL );
- }
- if( red_frame ) astSetAttrib( red_frame, buff );
- }
-
- for( ianc = 0; ianc < nanc; ianc++ ) {
- for( k = 0; k < 5; k++ ) {
- if( astMapGet0A( ancs[ ianc ], key[ k ], &o ) ) {
- r = (AstRegion *) o;
- astRegSetAttrib( r, buff, NULL );
- r = astAnnul( r );
- }
- }
- }
- }
-
-/* Create Regions corresponding to every possible combination of interval
- on each axis type, and assemble the union of these into a CmpRegion (if
- there is more than one). */
- sum = NULL;
-
-/* Initialise indices of the sub-Frame intervals to use. */
- ispace = 0;
- itime = 0;
- ispec = 0;
- ired = 0;
-
-/* Loop over all possible combinations of time+space+spec+red intervals. */
- while( 1 ) {
- rspace = ( ispace < nspace ) ? space_list[ ispace ] : NULL;
- rtime = ( itime < ntime ) ? time_list[ itime ] : NULL;
- rspec = ( ispec < nspec ) ? spec_list[ ispec ] : NULL;
- rred = ( ired < nred ) ? red_list[ ired ] : NULL;
-
-/* Prism Regions extrude a Region into higher dimensions, and the
- extrusion is defined by an Interval. Spatial Regions are not
- restricted to Intervals and so any spatial Region must be the first
- Region to be included in the Prism (all the other axis types *are*
- restricted to Intervals and so can be used to extrude the spatial
- region). */
- reg = rspace ? astClone( rspace ) : NULL;
-
-/* Now extrude this region (if any) into the time axis. */
- if( rtime ) {
- if( reg ) {
- tmp = (AstRegion *) astPrism( reg, rtime, "", status );
- (void) astAnnul( reg );
- reg = tmp;
- } else {
- reg = astClone( rtime );
- }
- }
-
-/* Now extrude this region (if any) into the spectral axis. */
- if( rspec ) {
- if( reg ) {
- tmp = (AstRegion *) astPrism( reg, rspec, "", status );
- (void) astAnnul( reg );
- reg = tmp;
- } else {
- reg = astClone( rspec );
- }
- }
-
-/* Now extrude this region (if any) into the redshift axis. */
- if( rred ) {
- if( reg ) {
- tmp = (AstRegion *) astPrism( reg, rred, "", status );
- (void) astAnnul( reg );
- reg = tmp;
- } else {
- reg = astClone( rred );
- }
- }
-
-
-/* If a Prism was created, add it into the CmpRegion which holds the
- running sum of the union of all Prisms created so far. */
- if( reg ) {
- if( !sum ) {
- sum = astClone( reg );
- } else {
- tmp = (AstRegion *) astCmpRegion( sum, reg, AST__OR, "", status );
- (void) astAnnul( sum );
- sum = tmp;
- }
- reg = astAnnul( reg );
- }
-
-/* Increment the indices of the next set of sub-Frame Intervals to use.
- Leave the while loop when all combinations have been done. */
- if( ++ired >= nred ) {
- ired = 0;
- if( ++ispec >= nspec ) {
- ispec = 0;
- if( ++itime >= ntime ) {
- itime = 0;
- if( ++ispace >= nspace ) break;
- }
- }
- }
- }
-
-/* Simplify the total sum Region. */
- tmp = astSimplify( sum );
- (void) astAnnul( sum );
- sum = tmp;
-
-/* The axes in this sum Region may not be in the correct order or units (i.e
- in the order and units specified in the supplied Frame). So use
- astConvert to get a Mapping from the Frame represented by the sum
- Region to the supplied Frame. */
- fs = astConvert( sum, frm, "" );
- if( fs ) {
-
-/* Unless the Mapping is a UnitMap, remap the sum Region into the
- supplied Frame using this Mapping. */
- map = astGetMapping( fs, AST__BASE, AST__CURRENT );
- if( !astIsAUnitMap( map ) ) {
- new = astMapRegion( sum, map, frm );
- } else {
- new = astClone( sum );
- }
-
- map = astAnnul( map );
- fs = astAnnul( fs );
-
- } else if( astOK ) {
- astError( AST__INTER, "AstroCoordAreaReader(%s): Cannot "
- "convert from supplied Frame to internal Frame (AST "
- "internal programming error).", status, astGetClass( this ) );
- }
-
-/* Transfer selected properties from the supplied Frame to the current Frame
- of the returned Region. */
- cfrm = astRegFrame( new );
- if( astTestIdent( frm ) ) astSetIdent( cfrm, astGetIdent( frm ) );
- if( astTestTitle( frm ) ) astSetTitle( cfrm, astGetTitle( frm ) );
-
-/* Ensure the Epoch is set correctly in the Region */
- if( time_val != AST__BAD ) {
- sprintf( buff, "epoch= MJD %.*g", DBL_DIG, time_val );
- astRegSetAttrib( new, buff, NULL );
- }
-
-/* Free resources. */
- cfrm = astAnnul( cfrm );
- sum = astAnnul( sum );
- }
-
- if( space_list ) {
- for( i = 0; i < nspace; i++ ) space_list[ i ] = astAnnul( space_list[ i ] );
- space_list = astFree( space_list );
- }
-
- if( time_list ) {
- for( i = 0; i < ntime; i++ ) time_list[ i ] = astAnnul( time_list[ i ] );
- time_list = astFree( time_list );
- }
-
- if( spec_list ) {
- for( i = 0; i < nspec; i++ ) spec_list[ i ] = astAnnul( spec_list[ i ] );
- spec_list = astFree( spec_list );
- }
-
- if( red_list ) {
- for( i = 0; i < nred; i++ ) red_list[ i ] = astAnnul( red_list[ i ] );
- red_list = astFree( red_list );
- }
-
- }
-
- if( space_frame ) space_frame = astAnnul( space_frame );
- if( time_frame ) time_frame = astAnnul( time_frame );
- if( spec_frame ) spec_frame = astAnnul( spec_frame );
- if( red_frame ) red_frame = astAnnul( red_frame );
-
-/* Get the ID attribute from the AstroCoordArea element and store in the
- returned Region. */
- id = astXmlGetAttributeValue( elem, "ID" );
- if( id ) astSetIdent( new, id );
-
- }
-
-/* If an error has occurred,annul the returned pointer. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
- return new;
-}
-
-static int AstroCoordsReader( AstXmlChan *this, AstXmlElement *elem,
- AstFrame *frm, AstRegion *uncs[4],
- AstKeyMap **anc, int *status ) {
-/*
-* Name:
-* AstroCoordsReader
-
-* Purpose:
-* Modify a Frame to take account of an IVOA AstroCoords element, and
-* return an coordinate uncertainties.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* int AstroCoordsReader( AstXmlChan *this, AstXmlElement *elem,
-* AstFrame *frm, AstRegion *uncs[4],
-* AstKeyMap **anc, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function modifies the supplied Frame object to incorporate the
-* effects of the supplied AstroCoords element. It may also return
-* Regions representing the bounds of the uncertainties in the four
-* component coordinate Frames, depending on the contents of the
-* AstroCoords element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA AstroCoords element.
-* frm
-* The Frame object to modify.
-* uncs
-* Array in which to return pointers to the uncertainty Regions to
-* be associated with each of the four STC domains (space, time,
-* spectral, redshift). NULL is returned in any element for which
-* no uncertainty is specified within the supplied AstroCoords element.
-* anc
-* Address of a location at which to store the pointer to a newly
-* created KeyMap holding ancillary information describing the
-* AstroCoords element in the form required by constructors of AST
-* Stc objects. A NULL pointer is returned if no usable ancillary
-* information is found in the AstroCoords.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Non-zero if any non-NULL values have been returned in the "uncs"
-* array. Zero otherwise.
-
-*/
-
-/* Local Variables: */
- AstFrame *afrm; /* Pointer to axis Frame */
- AstFrame *gfrm; /* Pointer to generic Frame */
- AstFrame *pfrm; /* Pointer to position Frame */
- AstFrame *rfrm; /* Pointer to redshift Frame */
- AstFrame *sfrm; /* Pointer to spectral Frame */
- AstTimeFrame *tfrm; /* Pointer to time Frame */
- AstKeyMap *panc; /* KeyMap holding spatial ancillary data */
- AstKeyMap *ranc; /* KeyMap holding redshift ancillary data */
- AstKeyMap *sanc; /* KeyMap holding spectral ancillary data */
- AstKeyMap *tanc; /* KeyMap holding temporal ancillary data */
- AstObject *o; /* Pointer to object retrieved from KeyMap */
- AstRegion *r; /* Individual ancillary Region */
- AstRegion *t; /* Total extruded ancillary Region */
- AstRegion *tt; /* Temporary Region pointer */
- AstXmlElement *el; /* Pointer to Position2D element */
- IVOAScan *scan; /* Structure holding scan results */
- char **anames; /* Pointer to list of ancillary name pointers */
- const char *dom; /* Pointer to Domain attribute value */
- const char *nam; /* Pointer to ancillary Name string */
- const char *names[4]; /* Names of the subelements to be searched for */
- char buff[100]; /* Message buffer */
- double epoch; /* Epoch */
- double hi; /* High limit for zero-width interval */
- double lo; /* Low limit for zero-width interval */
- double pos[2]; /* Reference spatial position */
- double rf; /* Rest frequency */
- int axes[2]; /* Indices of position axes */
- int axis; /* Index of next axis to use */
- int empty; /* Is returned KeyMap empty? */
- int i; /* Loop count */
- int isearth; /* Does the SkyFrame represent terrestrial lon/lat? */
- int junk; /* Unused integer value */
- int max[4]; /* Max allowed occurrences of each name */
- int min[4]; /* Min allowed occurrences of each name */
- int nax; /* Number of axes in supplied Frame */
- int unc; /* Any uncertainty Regions found? */
- int use; /* Use ancillary information? */
-
- static const char *key[ 5 ] = { AST__STCERROR,
- AST__STCRES,
- AST__STCSIZE,
- AST__STCPIXSZ,
- AST__STCVALUE };
-/* Initialise */
- unc = 0;
- uncs[ 0 ] = NULL;
- uncs[ 1 ] = NULL;
- uncs[ 2 ] = NULL;
- uncs[ 3 ] = NULL;
- *anc = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return unc;
-
-/* Search the supplied element for the required sub-elements. */
- names[ 0 ] = "Position2D|Position3D";
- names[ 1 ] = "Time";
- names[ 2 ] = "Spectral";
- names[ 3 ] = "Redshift";
- min[ 0 ] = 0;
- min[ 1 ] = 0;
- min[ 2 ] = 0;
- min[ 3 ] = 0;
- max[ 0 ] = 1;
- max[ 1 ] = 1;
- max[ 2 ] = 1;
- max[ 3 ] = 1;
- scan = ScanIVOAElement( this, elem, 4, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Initialise pointers to component Frames */
- pfrm = NULL;
- tfrm = NULL;
- sfrm = NULL;
- rfrm = NULL;
-
-/* Initialise pointers to KeyMaps holding ancillary data. */
- panc = NULL;
- tanc = NULL;
- sanc = NULL;
- ranc = NULL;
-
-/* Allocate storage for an array of pointers to strings holding the Name
- value for each axis. Initialise them to a null string. */
- nax = astGetNaxes( frm );
- anames = astMalloc( sizeof( char * )*(size_t)nax );
- for( i = 0; i < nax; i++ ) anames[ i ] = NULL;
-
-/* Initialise the index of the next Frame axis to use. */
- axis = 0;
-
-/* Check to see if the next 2 axes describe positions on the sky or earth
- (see SpaceFrameReader). */
- axes[ 0 ] = 0;
- axes[ 1 ] = 1;
- afrm = astPickAxes( frm, 2, axes, NULL );
- dom = astGetDomain( afrm );
- isearth = dom && ( !strcmp( dom, "GEO_D" ) ||
- !strcmp( dom, "GEO_C" ) );
-
- if( isearth || ( dom && !strcmp( dom, "SKY" ) ) ){
- astPrimaryFrame( frm, axis, &pfrm, &junk );
- if( scan->count[ 0 ] ) {
-
-/* We currently also use SkyFrames to represent geographical long/lat used to
- describe observatory positions. These may have 3D positions, in which
- case we convert the 3D position to a 2D position by ignoring the 3rd axis
- value (height). See SpaceFrameReader. */
- el = MakePos2D( this, scan->el[ 0 ][ 0 ], status );
-
-/* Use the Position2D to create a Region describing the uncertainty in
- the space axes of the Frame. Also create a KeyMap holding Regions
- describing any ancillary information stored in the Position2D. */
- uncs[ 0 ] = Position2DReader( this, el, pfrm, pos, &panc, status );
- if( uncs[ 0 ] ) unc = 1;
- el = astXmlDelete( el );
-
-/* If ancillary information was returned, extract the Name element, and
- store it twice (once for each axis) in the "names" array. */
- if( panc && astMapGet0C( panc, AST__STCNAME, &nam ) ) {
- anames[ axis ] = astStore( NULL, nam, strlen( nam ) + 1 );
- anames[ axis + 1 ] = astStore( NULL, nam, strlen( nam ) + 1 );
- nam = astFree( (void *) nam );
- }
- }
-
-/* Increment the axis index. */
- axis += 2;
-
-/* If the supplied Frame has no sky frame, but we found a Position2D, then
- report a warning and ignore the Position2D. */
- } else if( scan->count[ 0 ] ) {
- sprintf( buff, "contains a <%s> which is not being used.",
- astXmlGetName( scan->el[ 0 ][ 0 ] ) );
- Report( this, elem, WARNING, buff, status );
- }
- afrm = astAnnul( afrm );
-
-/* Indicate we do not yet have an epoch to use. */
- epoch = AST__BAD;
-
-/* Check to see if the Frame contains a time frame. It will be the next
- axis if it does. */
- afrm = astPickAxes( frm, 1, &axis, NULL );
- dom = astGetDomain( afrm );
- if( dom && !strcmp( dom, "TIME" ) ){
- astPrimaryFrame( frm, axis, &gfrm, &junk );
-
-/* Report an error if it is not an AST TimeFrame. */
- if( !astIsATimeFrame( gfrm ) && astOK ) {
- astError( AST__INTER, "AstroCoordAreaReader(XmlChan): %s "
- "supplied where TimeFrame expected (internal "
- "AST programming error).", status, astGetClass( pfrm ) );
- } else {
- tfrm = (AstTimeFrame *) gfrm;
- }
-
-/* Use any Time element to create a Region describing the uncertainty in the
- time axis of the Frame. Also create a KeyMap holding Regions describing
- any ancillary information stored in the Time element. */
- if( scan->count[ 1 ] ) {
- uncs[ 1 ] = TimeReader( this, scan->el[ 1 ][ 0 ], tfrm, &epoch,
- &tanc, status );
- if( uncs[ 1 ] ) unc = 1;
-
-/* If ancillary information was returned, extract the Name element, and
- store it in the "names" array. */
- if( tanc && astMapGet0C( tanc, AST__STCNAME, &nam ) ) {
- anames[ axis ] = astStore( NULL, nam, strlen( nam ) + 1 );
- nam = astFree( (void *) nam );
- }
- }
-
-/* Increment the index of the next axis to use. */
- axis++;
-
-/* If the supplied Frame has no time frame, but we found a Time element, then
- report a warning and ignore the Time element. */
- } else if( scan->count[ 1 ] ) {
- Report( this, elem, WARNING, "contains a <Time> which is not needed", status );
- }
- afrm = astAnnul( afrm );
-
-/* Indicate we do not yet have a rest frequency to use with any redshift
- axis. */
- rf = AST__BAD;
-
-/* Check to see if the Frame contains a spectral frame. It will be the next
- axis if it does. */
- afrm = astPickAxes( frm, 1, &axis, NULL );
- dom = astGetDomain( afrm );
- if( dom && !strcmp( dom, "SPECTRUM" ) ){
- astPrimaryFrame( frm, axis, &sfrm, &junk );
-
-/* Use any Spectral to create a Region describing the uncertainty in the
- spectral axis of the Frame. If the Spectral contains a spectral value, the
- first value will be returned so that it can be used as the rest frequency
- for any Redshift axis. It will be in units of Hz and will be AST__BAD if
- the Spectral did not contain any spectral values. Also create a KeyMap
- holding Regions describing any ancillary information stored in the
- Spectral element. */
- if( scan->count[ 2 ] ) {
- uncs[ 2 ] = SpectralReader( this, scan->el[ 2 ][ 0 ], sfrm, &rf,
- &sanc, status );
- if( uncs[ 2 ] ) unc = 1;
-
-/* If ancillary information was returned, extract the Name element, and
- store it in the "names" array. */
- if( sanc && astMapGet0C( sanc, AST__STCNAME, &nam ) ) {
- anames[ axis ] = astStore( NULL, nam, strlen( nam ) + 1 );
- nam = astFree( (void *) nam );
- }
- }
-
-/* Increment the index of the next axis to use. */
- axis++;
-
-/* If the supplied Frame has no spectral frame, but we found a Spectral
- element, then report a warning and ignore the Spectral element. */
- } else if( scan->count[ 2 ] ) {
- Report( this, elem, WARNING, "contains a <Spectral> which is not needed", status );
- }
- afrm = astAnnul( afrm );
-
-/* Check to see if the Frame contains a redshift frame. It will be the next
- axis if it does. */
- afrm = astPickAxes( frm, 1, &axis, NULL );
- dom = astGetDomain( afrm );
- if( dom && !strcmp( dom, "REDSHIFT" ) ){
- astPrimaryFrame( frm, axis, &rfrm, &junk );
-
-/* Use any Redshift to create a Region describing the uncertainty in the
- redshift axis of the Frame. Also create a KeyMap holding Regions describing
- any ancillary information stored in the Redshift element. */
- if( scan->count[ 3 ] ) {
- uncs[ 3 ] = RedshiftReader( this, scan->el[ 3 ][ 0 ], rfrm,
- &ranc, status );
- if( uncs[ 3 ] ) unc = 1;
-
-/* If ancillary information was returned, extract the Name element, and
- store it in the "names" array. */
- if( ranc && astMapGet0C( ranc, AST__STCNAME, &nam ) ) {
- anames[ axis ] = astStore( NULL, nam, strlen( nam ) + 1 );
- nam = astFree( (void *) nam );
- }
- }
-
-/* Increment the index of the next axis to use. */
- axis++;
-
-/* If the supplied Frame has no redshift frame, but we found a Redshift
- element, then report a warning and ignore the Redshift element. */
- } else if( scan->count[ 3 ] ) {
- Report( this, elem, WARNING, "contains a <Redshift> which is not needed", status );
- }
- afrm = astAnnul( afrm );
-
-/* Now assign fixed axis values (Epoch, RestFreq, etc) to the component
- Frames of the supplied Frame. */
- if( epoch != AST__BAD ) {
- if( pfrm ) astSetEpoch( pfrm, epoch );
- if( tfrm ) astSetEpoch( tfrm, epoch );
- if( sfrm ) astSetEpoch( sfrm, epoch );
- if( rfrm ) astSetEpoch( rfrm, epoch );
- astSetEpoch( frm, epoch );
- }
-
- if( sfrm && pfrm && astIsASpecFrame( sfrm ) && astIsASkyFrame( pfrm ) &&
- !isearth && pos[ 0 ] != AST__BAD && pos[ 1 ] != AST__BAD ) {
- astSetRefPos( sfrm, pfrm, pos[ 0 ], pos[ 1 ] );
- }
-
- if( rfrm && astIsASpecFrame( rfrm ) && rf != AST__BAD ) {
- astSetRestFreq( rfrm, rf );
- if( pfrm && astIsASkyFrame( pfrm ) && !isearth &&
- pos[ 0 ] != AST__BAD && pos[ 1 ] != AST__BAD ) {
- astSetRefPos( rfrm, pfrm, pos[ 0 ], pos[ 1 ] );
- }
- }
-
-/* Now combine ancillary data for each component Frame into the total
- Frame. */
- *anc = astKeyMap( "", status );
- if( *anc ) {
- empty = 1;
-
-/* Store the Names element if at least one axis has a Name item. */
- for( i = 0; i < nax; i++ ) {
- if( !anames[ i ] ) anames[ i ] = astStore( NULL, "", 1 );
- }
-
- for( i = 0; i < nax; i++ ) {
- if( empty && strlen( anames[ i ] ) > 0 ) {
- astMapPut1C( *anc, AST__STCNAME, nax, (const char **) anames, NULL );
- empty = 0;
- }
- anames[ i ] = astFree( anames[ i ] );
- }
-
-/* Do each of the other items, all of which are described by a Region. */
- lo = 0.0;
- hi = 0.0;
- for( i = 0; i < 5; i++ ) {
-
-/* Initialise a flag indicating that we have not yet found any non-null
- information to store for this item. */
- use = 0;
-
-/* Initialise a pointer to the Region describing the item extruded into
- all axes. */
- t = NULL;
-
-/* If there is a positional Frame, determine the Region describing the
- intersection of the total Region with the position Frame. If none is
- supplied use a zero width Interval as a flag that no information is
- available. */
- if( pfrm ) {
- if( panc && astMapGet0A( panc, key[ i ], &o ) ) {
- t = (AstRegion *) o;
- use = 1;
- } else {
- t = (AstRegion *) astInterval( pfrm, &lo, &hi, NULL, "", status );
- }
- }
-
-/* If there is a time Frame, determine the Region describing the intersection
- of the total Region with the time Frame. If none is supplied use a zero
- width Interval as a flag that no information is available. */
- if( tfrm ) {
- if( tanc && astMapGet0A( tanc, key[ i ], &o ) ) {
- r = (AstRegion *) o;
- use = 1;
- } else {
- r = (AstRegion *) astInterval( tfrm, &lo, &hi, NULL, "", status );
- }
-
-/* If there were earlier axes, extrude the current total region into the
- time axis, and use the extruded region as the new total region.*/
- if( t ) {
- tt = (AstRegion *) astPrism( t, r, "", status );
- r = astAnnul( r );
- (void) astAnnul( t );
- t = tt;
-
-/* If this is the first axis, use the region determined for this axis as
- the total Region.*/
- } else {
- t = r;
- }
- }
-
-/* Do the same for any spectral axis. */
- if( sfrm ) {
- if( sanc && astMapGet0A( sanc, key[ i ], &o ) ) {
- r = (AstRegion *) o;
- use = 1;
- } else {
- r = (AstRegion *) astInterval( sfrm, &lo, &hi, NULL, "", status );
- }
-
- if( t ) {
- tt = (AstRegion *) astPrism( t, r, "", status );
- r = astAnnul( r );
- (void) astAnnul( t );
- t = tt;
- } else {
- t = r;
- }
-
- }
-
-/* Do the same for any redshift axis. */
- if( rfrm ) {
- if( ranc && astMapGet0A( ranc, key[ i ], &o ) ) {
- r = (AstRegion *) o;
- use = 1;
- } else {
- r = (AstRegion *) astInterval( rfrm, &lo, &hi, NULL, "", status );
- }
-
- if( t ) {
- tt = (AstRegion *) astPrism( t, r, "", status );
- r = astAnnul( r );
- (void) astAnnul( t );
- t = tt;
- } else {
- t = r;
- }
- }
-
-/* If there is some non-null information for this item, replace the
- stored Frame with the Frame which has set Epoch/RefLat/etc, simplify the
- total Region and store it in the returned KeyMap. */
- if( use ) {
- astSetRegFS( t, frm );
- tt = astSimplify( t );
- astMapPut0A( *anc, key[ i ], tt, NULL );
- tt = astAnnul( tt );
- empty = 0;
- }
- if( t ) t = astAnnul( t );
- }
-
-/* Return a NULL KeyMap pointer if the KeyMap is empty. */
- if( empty ) *anc = astAnnul( *anc );
- }
-
-/* Free resources. */
- if( panc ) panc = astAnnul( panc );
- if( tanc ) tanc = astAnnul( tanc );
- if( sanc ) sanc = astAnnul( sanc );
- if( ranc ) ranc = astAnnul( ranc );
- if( pfrm ) pfrm = astAnnul( pfrm );
- if( tfrm ) tfrm = astAnnul( tfrm );
- if( sfrm ) sfrm = astAnnul( sfrm );
- if( rfrm ) rfrm = astAnnul( rfrm );
- scan = FreeIVOAScan( scan, status );
- anames = astFree( anames );
- }
-
-/* Annull any returned Regions if an error occurred.*/
- if( !astOK ) {
- uncs[ 0 ] = astAnnul( uncs[ 0 ] );
- uncs[ 1 ] = astAnnul( uncs[ 1 ] );
- uncs[ 2 ] = astAnnul( uncs[ 2 ] );
- uncs[ 3 ] = astAnnul( uncs[ 3 ] );
- unc = 0;
- *anc = astAnnul( *anc );
- }
-
-/* Return the result. */
- return unc;
-}
-
-static AstObject *AstroCoordSystemReader( AstXmlChan *this,
- AstXmlElement *elem, int *status ) {
-/*
-* Name:
-* AstroCoordSystemReader
-
-* Purpose:
-* Make an AST Object from an IVOA AstroCoordSystem element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstObject *AstroCoordSystemReader( AstXmlChan *this,
-* AstXmlElement *elem, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Object from the supplied IVOA
-* AstroCoordSystem element. This will be a Frame of some kind.
-* If the AstroCoordSystem element contains only one sub-frame
-* element, then the returned Frame will be of a suitable class
-* to describe that sub-frame (SkyFrame, SpecFrame or TimeFrame).
-* If the AstroCoordSystem element contains more than one sub-frame
-* element, then the returned Frame will be a CmpFrame in which the
-* component Frames are in the order SpaceFrame, TimeFrame,
-* SpectralFrame, RedshiftFrame.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA AstroCoordSystem element.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Object.
-
-* Notes:
-* - GenericCoordFrame sub-elements are currently ignored since it is not
-* clear how they relate to the other sub-elements.
-
-*/
-
-/* Local Variables: */
- AstCmpFrame *tmp; /* Pointer to intermediate CmpFrame */
- AstFrame *comp[ 4 ]; /* Pointers to component Frames */
- AstObject *new; /* Pointer to returned Object */
- IVOAScan *scan; /* Structure holding scan results */
- const char *id; /* Pointer to ID attribute value */
- const char *names[4]; /* Names of the subelements to be searched for */
- int i; /* Index of current content item */
- int j; /* Index to store Frame pointer at */
- int max[4]; /* Max allowed occurrences of each name */
- int min[4]; /* Min allowed occurrences of each name */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Search the supplied element for the required sub-elements. */
- names[ 0 ] = SPACE_FRAME;
- names[ 1 ] = TIME_FRAME;
- names[ 2 ] = SPECTRAL_FRAME;
- names[ 3 ] = REDSHIFT_FRAME;
- min[ 0 ] = 0;
- min[ 1 ] = 0;
- min[ 2 ] = 0;
- min[ 3 ] = 0;
- max[ 0 ] = 1;
- max[ 1 ] = 1;
- max[ 2 ] = 1;
- max[ 3 ] = 1;
- scan = ScanIVOAElement( this, elem, 4, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Create Frames from the found sub-elements */
- comp[ 0 ] = scan->count[0] ? (AstFrame *) SpaceFrameReader( this,
- scan->el[ 0 ][ 0 ], status ) : NULL;
- comp[ 1 ] = scan->count[1] ? (AstFrame *) TimeFrameReader( this,
- scan->el[ 1 ][ 0 ], status ) : NULL;
- comp[ 2 ] = scan->count[2] ? (AstFrame *) SpectralFrameReader( this,
- scan->el[ 2 ][ 0 ], status ) : NULL;
- comp[ 3 ] = scan->count[3] ? (AstFrame *) RedshiftFrameReader( this,
- scan->el[ 3 ][ 0 ], status ) : NULL;
-
-/* If more than one frame was obtained combine them into a CmpFrame. If
- present, the Frames are stored in the order SpaceFrame, TimeFrame,
- SpectralFrame, RedshiftFrame. Shuffle the the higher elements of the
- "comp" array down to fill any NULL elements. */
- j = 0;
- for( i = 0; i < 4; i++ ) {
- if( comp[ i ] ) {
- comp[ j++ ] = comp[ i ];
- }
- }
-
-/* Fill any unused elements at the end with NULL. */
- for( ; j < 4; j++ ) comp[ j ] = NULL;
-
-/* If no Frames were read issue a fatal error. */
- if( !comp[ 0 ] ) {
- Report( this, elem, FAILURE, "contains no usable coordinate axes", status );
-
-/* If only one Frame was read return a clone of its pointer. */
- } else if( !comp[ 1 ] ) {
- new = astClone( comp[ 0 ] );
-
-/* If two or more Frames were read, create a CmpFrame holding the Frames. */
- } else if( !comp[ 2 ] ) {
- new = (AstObject *) astCmpFrame( comp[ 0 ], comp[ 1 ], "", status );
-
- } else if( !comp[ 3 ] ) {
- tmp = astCmpFrame( comp[ 0 ], comp[ 1 ], "", status );
- new = (AstObject *) astCmpFrame( tmp, comp[ 2 ], "", status );
- tmp = astAnnul( tmp );
-
- } else {
- tmp = astCmpFrame( comp[ 0 ], comp[ 1 ], "", status );
- (void) astAnnul( comp[ 0 ] );
- comp[ 0 ] = (AstFrame *) tmp;
- tmp = astCmpFrame( comp[ 0 ], comp[ 2 ], "", status );
- new = (AstObject *) astCmpFrame( tmp, comp[ 3 ], "", status );
- tmp = astAnnul( tmp );
- }
-
-/* Get the ID attribute from the AstroCoordSystem element and store in the
- returned Frame. */
- id = astXmlGetAttributeValue( elem, "ID" );
- if( id ) astSetIdent( new, id );
-
-/* Free resources */
- for( i = 0; i < 4; i++ ) {
- if( comp[ i ] ) comp[ i ] = astAnnul( comp[ i ] );
- }
- scan = FreeIVOAScan( scan, status );
-
- }
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Object. */
- return new;
-}
-
-static double AstronTimeReader( AstXmlChan *this, AstXmlElement *elem,
- AstTimeFrame *frm, int *status ){
-/*
-* Name:
-* AstronTimeReader
-
-* Purpose:
-* Read a time value from an IVOA AstronTime element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* double AstronTimeReader( AstXmlChan *this, AstXmlElement *elem,
-* AstTimeFrame *frm )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function returns a double representing the time specified by
-* the supplied IVOA AstronTime element, converted into the system
-* represented by the supplied Frame.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA AstronTime element.
-* frm
-* Pointer to the TimeFrame in which the returned value should be
-* defined. Relevant attributes which are not set will be set by
-* this function if possible.
-
-* Returned Value:
-* The time value, in the system described by "frm".
-
-*/
-
-/* Local Variables: */
- AstFrameSet *fs; /* FrameSet connecting two TimeFrames */
- AstTimeFrame *cfrm; /* TimeFrame describing XML time system */
- AstTimeScaleType ts; /* TimeScale */
- IVOAScan *scan; /* Structure holding scan results */
- char buff[ 200 ]; /* Message buffer */
- const char *iso; /* Pointer to ISO date string */
- const char *names[3]; /* Names of the subelements to be searched for */
- const char *time_type; /* Pointer to time type string */
- const char *unit; /* Pointer to Unit string */
- double fval; /* Value converted to supplied TimeFrame */
- double offset; /* Time offset */
- double result; /* Time offset converted to required TimeFrame */
- double val; /* Value read from element */
- int max[3]; /* Max allowed occurrences of each name */
- int min[3]; /* Min allowed occurrences of each name */
-
-/* Initialise. */
- offset = 0.0;
-
-/* Check the global error status. */
- if ( !astOK ) return offset;
-
-/* Search the supplied element for the required sub-elements. */
- names[ 0 ] = "JDTime|MJDTime|ISOTime";
- names[ 1 ] = "TimeOffset";
- names[ 2 ] = "TimeScale|Timescale";
- min[ 0 ] = 1;
- min[ 1 ] = 0;
- min[ 2 ] = 0;
- max[ 0 ] = 1;
- max[ 1 ] = 1;
- max[ 2 ] = 1;
- scan = ScanIVOAElement( this, elem, 3, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* The supplied TimeFrame describes the system in which the caller wants
- the time values to be returned. This may not be the same as the system
- in which the value is stored in the XML. We create a TimeFrame
- describing the XML system, and later transform time values from the XML
- system to the system required by the caller. Any attributes of the XML
- system which are not specified in the XML are assumed to be equal to
- the values of the corresponding attributes in the supplied TimeFrame.
- If the XML system specifies values for attributes which have not been
- set in the supplied TimeFrame, then the values read fomr the XML are
- assigned to the attributes of the supplied TimeFrame. */
- cfrm = astCopy( frm );
-
- if( scan->count[2] ) {
- ts = TimeScaleReader( this, scan->el[2][0], status );
- astSetTimeScale( cfrm, ts );
- if( !astTestTimeScale( frm ) ) astSetTimeScale( frm, ts );
- }
-
-/* If a JDTime element was found, get its value and set the TimeFrame System
- values. */
- time_type = astXmlGetName( scan->el[0][0] );
- if( !strcmp( "JDTime", time_type ) ) {
- val = ElemValueD( this, scan->el[0][0], 2400000.5, status );
- astSetSystem( cfrm, AST__JD );
- if( !astTestSystem( frm ) ) astSetSystem( frm, AST__JD );
-
-/* If a ISOTime element was found, get its value and set the TimeFrame
- System attribute to MJD (the choice of AST System for an ISOTime is
- arbitrary - JD or JEPOCH could also have been used). */
- } else if( !strcmp( "ISOTime", time_type ) ) {
- astSetSystem( cfrm, AST__MJD );
- if( !astTestSystem( frm ) ) astSetSystem( frm, AST__MJD );
- iso = astXmlGetValue( scan->el[0][0], 0 );
- astClearTimeOrigin( cfrm );
- if( iso && astUnformat( cfrm, 0, iso, &val ) != strlen( iso ) ) {
- sprintf( buff, "contains unsupported ISO time format \"%s\"",
- iso );
- Report( this, elem, FAILURE, buff, status );
- }
-
-/* If an MJDTime was found, get its value and set System attributes. */
- } else {
- val = ElemValueD( this, scan->el[0][0], 2400000.5, status );
- astSetSystem( cfrm, AST__MJD );
- if( !astTestSystem( frm ) ) astSetSystem( frm, AST__MJD );
- }
-
-/* Use this value as the TimeFrame's TimeOrigin value. Use the public
- astSetD rather than astSetTimeOrigin since the later requires the
- value to be supplied in the default units for the TimeFrame's System. */
- astSetD( cfrm, "TimeOrigin", val );
-
-/* If the supplied Frame has no set TimeOrigin, also use the value
- obtained above as the TimeOrigin in "frm". Convert it into the supplied
- TimeFrame, and set it. Note zero is used as the axis value in cfrm
- because the relevant epoch is zero distance away from the cfrm
- TimeOrigin (set above). */
- if( !astTestTimeOrigin( frm ) ) {
-
- fs = astConvert( cfrm, frm, "" );
- if( fs ){
- val = 0.0;
- astTran1( fs, 1, &val, 1, &fval );
- astSetD( frm, "TimeOrigin", fval );
- fs = astAnnul( fs );
- } else if( astOK ) {
- sprintf( buff, "contains inconsistent timescale (%s)",
- astGetC( cfrm, "timescale" ) );
- Report( this, elem, FAILURE, buff, status );
- }
- }
-
-/* If an TimeOffset element was found, get its value and the value of its
- unit attribute (assume a default of days). Set the units in the
- TimeFrames. */
- if( scan->count[1] ) {
- offset = ElemValueD( this, scan->el[1][0], 0.0, status );
- unit = astXmlGetAttributeValue( scan->el[1][0], "unit" );
- if( !unit ) unit = "d";
- astSetUnit( cfrm, 0, unit );
- if( !astTestUnit( frm, 0 ) ) astSetUnit( frm, 0, unit );
-
-/* If no offset was given, use zero. */
- } else {
- offset = 0.0;
- }
-
-/* Convert the offset from the system in which it is stored in the XML to
- the system required by the caller. */
- fs = astConvert( cfrm, frm, "" );
- if( fs ){
- astTran1( fs, 1, &offset, 1, &result );
- fs = astAnnul( fs );
- } else if( astOK ) {
- sprintf( buff, "contains inconsistent timescale (%s)",
- astGetC( cfrm, "timescale" ) );
- Report( this, elem, FAILURE, buff, status );
- }
-
-/* Free resources. */
- cfrm = astAnnul( cfrm );
- scan = FreeIVOAScan( scan, status );
- }
-
-/* Return the time value. */
- return result;
-}
-
-void astInitXmlChanVtab_( AstXmlChanVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitXmlChanVtab
-
-* Purpose:
-* Initialise a virtual function table for an XmlChan.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* void astInitXmlChanVtab( AstXmlChanVtab *vtab, const char *name )
-
-* Class Membership:
-* XmlChan vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the XmlChan class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstChannelVtab *channel; /* Pointer to Channel component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitChannelVtab( (AstChannelVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAXmlChan) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstChannelVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
-
- vtab->SetXmlIndent = SetXmlIndent;
- vtab->ClearXmlIndent = ClearXmlIndent;
- vtab->TestXmlIndent = TestXmlIndent;
- vtab->GetXmlIndent = GetXmlIndent;
-
- vtab->SetXmlLength = SetXmlLength;
- vtab->ClearXmlLength = ClearXmlLength;
- vtab->TestXmlLength = TestXmlLength;
- vtab->GetXmlLength = GetXmlLength;
-
- vtab->SetXmlFormat = SetXmlFormat;
- vtab->ClearXmlFormat = ClearXmlFormat;
- vtab->TestXmlFormat = TestXmlFormat;
- vtab->GetXmlFormat = GetXmlFormat;
-
- vtab->SetXmlPrefix = SetXmlPrefix;
- vtab->ClearXmlPrefix = ClearXmlPrefix;
- vtab->TestXmlPrefix = TestXmlPrefix;
- vtab->GetXmlPrefix = GetXmlPrefix;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- channel = (AstChannelVtab *) vtab;
-
- channel->WriteBegin = WriteBegin;
- channel->WriteIsA = WriteIsA;
- channel->WriteEnd = WriteEnd;
- channel->WriteInt = WriteInt;
- channel->WriteDouble = WriteDouble;
- channel->WriteString = WriteString;
- channel->WriteObject = WriteObject;
-
- channel->Read = Read;
- channel->ReadClassData = ReadClassData;
- channel->ReadDouble = ReadDouble;
- channel->ReadInt = ReadInt;
- channel->ReadObject = ReadObject;
- channel->ReadString = ReadString;
-
- parent_getfull = channel->GetFull;
- channel->GetFull = GetFull;
- parent_getcomment = channel->GetComment;
- channel->GetComment = GetComment;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
-/* Declare the class dump, copy and delete functions.*/
- astSetCopy( vtab, Copy );
- astSetDump( vtab, Dump, "XmlChan", "XML I/O channel" );
- astSetDelete( vtab, Delete );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static double AttrValueD( AstXmlChan *this, AstXmlElement *elem,
- const char *name, double def, int *status ) {
-/*
-* Name:
-* AttrValueD
-
-* Purpose:
-* Read a floating point XML element attribute value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* double AttrValueD( AstXmlChan *this, AstXmlElement *elem,
-* const char *name, double def, int *status )
-
-* Class Membership:
-* XmlChan member function
-
-* Description:
-* This function returns the value of a named attribute of an XML
-* element as a floating point value. A report is made if the
-* attribute value is not floating point.The supplied default value is
-* returned if the attribute is not present.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the XmlElement.
-* name
-* Pointer to a constant null-terminated character string
-* containing the name of the required attribute value.
-* def
-* If the supplied element does not have the requried attribute, then
-* this value will be returned instead.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The required attribute value, or the default if the value was not found.
-
-*/
-
-/* Local Variables: */
- char buff[ 200 ]; /* Msg buffer */
- const char *value; /* Pointer to attribute value */
- double result; /* Value to be returned */
- int nc; /* Number of characters read by astSscanf */
- int nf; /* Number of matching fields */
- int len; /* Length of attribute string */
-
-/* Initialise. */
- result = def;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get the attribute value as a string. */
- value = astXmlGetAttributeValue( elem, name );
-
-/* If the attribute exists, attempt to decode the string to give a double
- value, checking that the entire string is read. */
- if( value ) {
- nc = 0;
- nf = astSscanf( value, " %lf %n", &result, &nc );
- len = strlen( value );
-
- if ( nf != 1 || nc < len ) {
- sprintf( buff, "contains a bad <%s> value: \"%s\"", name, value );
- Report( this, elem, WARNING, buff, status );
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static int AttrValueI( AstXmlChan *this, AstXmlElement *elem, const char *name,
- int def, int *status ) {
-/*
-* Name:
-* AttrValueI
-
-* Purpose:
-* Read an integer XML element attribute value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* int AttrValueI( AstXmlChan *this, AstXmlElement *elem, const char *name,
-* int def )
-
-* Class Membership:
-* XmlChan member function
-
-* Description:
-* This function returns the value of a named attribute of an XML element
-* as an integer value. A report is made if the attribute value is not
-* integer. The supplied default value is returned if the attribute is not
-* present.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the XmlElement.
-* name
-* Pointer to a constant null-terminated character string
-* containing the name of the required attribute value.
-* def
-* If the supplied element does not have the requried attribute, then
-* this value will be returned instead.
-
-* Returned Value:
-* The required attribute value, or the default if the value was not found.
-
-*/
-
-/* Local Variables: */
- char buff[ 200 ]; /* Msg buffer */
- const char *value; /* Pointer to attribute value */
- int result; /* Value to be returned */
- int nc; /* Number of characters read by astSscanf */
- int nf; /* Number of matching fields */
- int len; /* Length of attribute string */
-
-/* Initialise. */
- result = def;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get the attribute value as a string. */
- value = astXmlGetAttributeValue( elem, name );
-
-/* If the attribute exists, attempt to decode the string to give an integer
- value, checking that the entire string is read. */
- if( value ) {
- nc = 0;
- nf = astSscanf( value, " %d %n", &result, &nc );
- len = strlen( value );
-
- if ( nf != 1 || nc < len ) {
- sprintf( buff, "contains a bad <%s> value: \"%s\"", name, value );
- Report( this, elem, WARNING, buff, status );
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static int AttrValueB( AstXmlChan *this, AstXmlElement *elem, const char *name,
- int def, int *status ) {
-/*
-* Name:
-* AttrValueB
-
-* Purpose:
-* Read a boolean XML element attribute value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* int AttrValueB( AstXmlChan *this, AstXmlElement *elem, const char *name,
-* int def, int *status )
-
-* Class Membership:
-* XmlChan member function
-
-* Description:
-* This function returns the value of a named attribute of an XML element
-* as a boolean. A report is made if the attribute value is not
-* boolean. The supplied default value is returned if the attribute is not
-* present.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the XmlElement.
-* name
-* Pointer to a constant null-terminated character string
-* containing the name of the required attribute value.
-* def
-* If the supplied element does not have the requried attribute, then
-* this value will be returned instead.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The required attribute value, or the default if the value was not found.
-
-*/
-
-/* Local Variables: */
- char buff[ 200 ]; /* Msg buffer */
- const char *value; /* Pointer to attribute value */
- int result; /* Value to be returned */
- int i; /* Loop count */
-
-/* Define the recognised true and false strings. */
- const char *true[ 5 ] = { "true", "TRUE", "yes", "YES", "1" };
- const char *false[ 5 ] = { "false", "FALSE", "no", "NO", "0" };
-
-/* Initialise. */
- result = def;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get the attribute value as a string. */
- value = astXmlGetAttributeValue( elem, name );
-
-/* If the attribute exists, attempt to decode the string to give a boolean
- value. */
- if( value ) {
-
-/* Indicate the result has not yet been determined. */
- result = -1;
-
-/* See if the attribute value is equal to (or an abbreviation of) any of
- the true strings. */
- for( i = 0; i < 5; i++ ) {
- if( strstr( true[ i ], value ) == true[ i ] ) {
- result = 1;
- break;
- }
- }
-
-/* If not, see if the attribute value is equal to (or an abbreviation of) any
- of the false strings. */
- if( result == -1 ) {
- for( i = 0; i < 5; i++ ) {
- if( strstr( false[ i ], value ) == false[ i ] ) {
- result = 0;
- break;
- }
- }
- }
-
-/* If not, report a warning and return the default. */
- if( result == -1 ) {
- result = def;
- sprintf( buff, "contains a bad <%s> value: \"%s\"", name, value );
- Report( this, elem, WARNING, buff, status );
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstRegion *BoxReader( AstXmlChan *this, AstXmlElement *elem,
- AstFrame *frm, int *status ){
-/*
-* Name:
-* BoxReader
-
-* Purpose:
-* Make an AST Region from an IVOA Box element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstRegion *BoxReader( AstXmlChan *this, AstXmlElement *elem,
-* AstFrame *frm, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Region from the supplied IVOA
-* Box element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA Box element.
-* frm
-* Pointer to the 2D Frame in which the returned Region should be
-* defined. If the Unit attribute is not set, this function will
-* set it to the value supplied in "unit" before returning.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
- AstFrame *cfrm; /* Frame used to define returned Region */
- AstMapping *map; /* Mapping between units */
- AstRegion *new; /* Pointer to returned Region */
- IVOAScan *scan; /* Structure holding scan results */
- const char *funit; /* Unit string from supplied Frame */
- const char *names[2]; /* Names of the subelements to be searched for */
- const char *unit; /* Centre and radii unit string */
- double cen[2]; /* Centre */
- double size[2]; /* Axis sizes */
- double pos[8]; /* Polygon vertex axis values */
- double *x; /* Pointer to first vertex X axis value */
- double *y; /* Pointer to first vertex Y axis value */
- int i; /* Axis count */
- int max[2]; /* Max allowed occurrences of each name */
- int min[2]; /* Min allowed occurrences of each name */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Scan the supplied element for the required sub-elements */
- names[ 0 ] = "Center";
- names[ 1 ] = "Size";
- min[ 0 ] = 1;
- min[ 1 ] = 1;
- max[ 0 ] = 1;
- max[ 1 ] = 1;
- scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Get the centre. */
- cen[0] = 0.0;
- cen[1] = 0.0;
- ElemListD( this, scan->el[0][0], 2, cen, status );
-
-/* Get the size. */
- size[0] = 0.0;
- size[1] = 0.0;
- ElemListD( this, scan->el[1][0], 2, size, status );
-
-/* Get the units attribute from the supplied element. These are the units
- of the centre and size values. */
- unit = astXmlGetAttributeValue( elem, "unit" );
- if( !unit ) {
- Report( this, elem, FAILURE, "contains no unit attribute", status );
- unit = "";
- }
-
-/* Since the SkyFrame class does not have active Units we must handle it
- separately. */
- if( astIsASkyFrame( frm ) ) {
-
-/* Create the anti-clockwise list of (x,y) at the four corners of the box. */
- x = pos;
- y = pos+ 4;
- x[ 3 ] = cen[ 0 ] + 0.5*size[ 0 ];
- y[ 3 ] = cen[ 1 ] - 0.5*size[ 1 ];
- x[ 2 ] = cen[ 0 ] + 0.5*size[ 0 ];
- y[ 2 ] = cen[ 1 ] + 0.5*size[ 1 ];
- x[ 1 ] = cen[ 0 ] - 0.5*size[ 0 ];
- y[ 1 ] = cen[ 1 ] + 0.5*size[ 1 ];
- x[ 0 ] = cen[ 0 ] - 0.5*size[ 0 ];
- y[ 0 ] = cen[ 1 ] - 0.5*size[ 1 ];
-
-/* Convert the axis values to radians. */
- map = astUnitMapper( unit, "rad", NULL, NULL );
- if( map ) {
- astTran1( map, 8, pos, 1, pos );
- map = astAnnul( map );
- } else if( astOK ) {
- Report( this, elem, FAILURE, "contains unusable units", status );
- }
-
-/* Create the Polygon. */
- new = (AstRegion *) astPolygon( frm, 4, 4, pos, NULL, "", status );
-
-/* Now handles Frames other than SkyFrames. */
- } else {
-
-/* Create the anti-clockwise list of (x,y) at the four corners of the box. */
- x = pos;
- y = pos+ 4;
- x[ 0 ] = cen[ 0 ] + 0.5*size[ 0 ];
- y[ 0 ] = cen[ 1 ] - 0.5*size[ 1 ];
- x[ 1 ] = cen[ 0 ] + 0.5*size[ 0 ];
- y[ 1 ] = cen[ 1 ] + 0.5*size[ 1 ];
- x[ 2 ] = cen[ 0 ] - 0.5*size[ 0 ];
- y[ 2 ] = cen[ 1 ] + 0.5*size[ 1 ];
- x[ 3 ] = cen[ 0 ] - 0.5*size[ 0 ];
- y[ 3 ] = cen[ 1 ] - 0.5*size[ 1 ];
-
-/* Take a copy of the supplied Frame and set its Units to the value
- obtained from the supplied element. */
- cfrm = astCopy( frm );
- astSetUnit( cfrm, 0, unit );
- astSetUnit( cfrm, 1, unit );
-
-/* Create a Polygon within this modified Frame. */
- new = (AstRegion *) astPolygon( frm, 4, 4, pos, NULL, "", status );
-
-/* If the Unit of this Region differs from that of the supplied Frame,
- set it to the Unit of the supplied Frame. This will cause the
- encapsulated limits to be mapped into the new Unit. If the supplied
- Frame had no set Unit, set it to the units obtained from the supplied
- element. */
- for( i = 0; i < 2; i++ ) {
- if( astTestUnit( frm, i ) ) {
- funit = astGetUnit( frm, i );
- if( strcmp( funit, unit ) ) astSetUnit( new, i, funit );
- } else {
- astSetUnit( frm, i, unit );
- }
- }
-
-/* Free resources */
- cfrm = astAnnul( cfrm );
- }
-
-/* Get any fill factor and lo/hi_include attributes from the element and
- assign to the returned Region. */
- FillAndLims( this, elem, new, status );
-
-/* Free resources */
- scan = FreeIVOAScan( scan, status );
- }
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
- return new;
-}
-
-static AstRegion *CircleReader( AstXmlChan *this, AstXmlElement *elem,
- AstFrame *frm, int *status ){
-/*
-* Name:
-* CircleReader
-
-* Purpose:
-* Make an AST Region from an IVOA Circle element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstRegion *CircleReader( AstXmlChan *this, AstXmlElement *elem,
-* AstFrame *frm, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Region from the supplied IVOA
-* Circle element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA Circle element.
-* frm
-* Pointer to the 2D Frame in which the returned Region should be
-* defined. If the Unit attribute is not set, this function will
-* set it to the value supplied in "unit" before returning.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
- AstFrame *cfrm; /* Frame used to define returned Region */
- AstMapping *map; /* Mapping between units */
- AstRegion *new; /* Pointer to returned Region */
- IVOAScan *scan; /* Structure holding scan results */
- const char *funit; /* Unit string from supplied Frame */
- const char *names[2]; /* Names of the subelements to be searched for */
- const char *unit; /* Centre unit string from supplied element */
- double cen[2]; /* Centre */
- double rad; /* Radius */
- int i; /* Axis count */
- int max[2]; /* Max allowed occurrences of each name */
- int min[2]; /* Min allowed occurrences of each name */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Scan the supplied element for the required sub-elements */
- names[ 0 ] = "Radius";
- names[ 1 ] = "Center";
- min[ 0 ] = 1;
- min[ 1 ] = 1;
- max[ 0 ] = 1;
- max[ 1 ] = 1;
- scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Get the radius. */
- rad = ElemValueD( this, scan->el[0][0], 0.0, status );
-
-/* Get the centre. */
- cen[0] = 0.0;
- cen[1] = 0.0;
- ElemListD( this, scan->el[1][0], 2, cen, status );
-
-/* Get the units attribute from the supplied element. */
- unit = astXmlGetAttributeValue( elem, "unit" );
- if( !unit ) {
- Report( this, elem, FAILURE, "contains no unit attribute", status );
- unit = "";
- }
-
-/* Since the SkyFrame class does not have active Units we must handle it
- separately. */
- if( astIsASkyFrame( frm ) ) {
-
-/* Convert the axis values and radius to radians. */
- map = astUnitMapper( unit, "rad", NULL, NULL );
- if( map ) {
- astTran1( map, 2, cen, 1, cen );
- astTran1( map, 1, &rad, 1, &rad );
- map = astAnnul( map );
- } else if( astOK ) {
- Report( this, elem, FAILURE, "contains unusable units", status );
- }
-
-/* Create the Circle. */
- new = (AstRegion *) astCircle( frm, 1, cen, &rad, NULL, "", status );
-
-/* Now handles Frames other than SkyFrames. */
- } else {
-
-/* Take a copy of the supplied Frame and set its Units to the value
- obtained from the supplied element. */
- cfrm = astCopy( frm );
- astSetUnit( cfrm, 0, unit );
- astSetUnit( cfrm, 1, unit );
-
-/* Create a Circle within this modified Frame. */
- new = (AstRegion *) astCircle( cfrm, 1, cen, &rad, NULL, "", status );
-
-/* If the Unit of this Region differs from that of the supplied Frame,
- set it to the Unit of the supplied Frame. This will cause the
- encapsulated limits to be mapped into the new Unit. If the supplied
- Frame had no set Unit, set it to the units obtained from the supplied
- element. */
- for( i = 0; i < 2; i++ ) {
- if( astTestUnit( frm, i ) ) {
- funit = astGetUnit( frm, i );
- if( strcmp( funit, unit ) ) astSetUnit( new, i, funit );
- } else {
- astSetUnit( frm, i, unit );
- }
- }
-
-/* Free resources */
- cfrm = astAnnul( cfrm );
-
- }
-
-/* Get any fill factor and lo/hi_include attributes from the element and
- assign to the returned Region. */
- FillAndLims( this, elem, new, status );
-
-/* Free resources */
- scan = FreeIVOAScan( scan, status );
- }
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
- return new;
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a XmlChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* Channel member function (over-rides the astClearAttrib protected
-* method inherited from the Channel class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* XmlChan so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstXmlChan *this; /* Pointer to the XmlChan structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the XmlChan structure. */
- this = (AstXmlChan *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* XmlIndent */
-/* --------- */
- if ( !strcmp( attrib, "xmlindent" ) ) {
- astClearXmlIndent( this );
-
-/* XmlLength */
-/* --------- */
- } else if ( !strcmp( attrib, "xmllength" ) ) {
- astClearXmlLength( this );
-
-/* XmlFormat */
-/* --------- */
- } else if ( !strcmp( attrib, "xmlformat" ) ) {
- astClearXmlFormat( this );
-
-/* XmlPrefix */
-/* --------- */
- } else if ( !strcmp( attrib, "xmlprefix" ) ) {
- astClearXmlPrefix( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static AstRegion *ConstraintReader( AstXmlChan *this, AstXmlElement *elem,
- AstFrame *frm, int *status ){
-/*
-* Name:
-* ConstraintReader
-
-* Purpose:
-* Make an AST Region from an IVOA Constraint element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstRegion *ConstraintReader( AstXmlChan *this, AstXmlElement *elem,
-* AstFrame *frm, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Region from the supplied IVOA
-* Constraint element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA Constraint element.
-* frm
-* Pointer to the Frame in which the returned Region should be
-* defined. The Unit attribute is assumed to be set to "rad".
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
- AstRegion *new; /* Pointer to returned Region */
- IVOAScan *scan; /* Structure holding scan results */
- const char *names[2]; /* Names of the subelements to be searched for */
- double cen[2]; /* Centre long/lat values */
- double vec[3]; /* Cartesian centre vector */
- double rad; /* Radius */
- int max[2]; /* Max allowed occurrences of each name */
- int min[2]; /* Min allowed occurrences of each name */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Scan the supplied element for the required sub-elements */
- names[ 0 ] = "Vector";
- names[ 1 ] = "Offset";
- min[ 0 ] = 1;
- min[ 1 ] = 1;
- max[ 0 ] = 1;
- max[ 1 ] = 1;
- scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Get the vector and convert from 3D cartesian to a 2D long/lat centre
- position, in radians. */
- vec[0] = 1.0;
- vec[1] = 0.0;
- vec[2] = 0.0;
- ElemListD( this, scan->el[0][0], 3, vec, status );
- palSlaDcc2s( vec, cen, cen + 1 );
-
-/* Get the offset, and convert to a radial distance in radians. */
- rad = acos( ElemValueD( this, scan->el[1][0], 1.0, status ) );
-
-/* Create the Circle. */
- new = (AstRegion *) astCircle( frm, 1, cen, &rad, NULL, "", status );
-
-/* Get any fill factor and lo/hi_include attributes from the element and
- assign to the returned Region. */
- FillAndLims( this, elem, new, status );
-
-/* Free resources */
- scan = FreeIVOAScan( scan, status );
- }
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
- return new;
-}
-
-static AstRegion *ConvexReader( AstXmlChan *this, AstXmlElement *elem,
- AstFrame *frm, int *status ){
-/*
-* Name:
-* ConvexReader
-
-* Purpose:
-* Make an AST Region from an IVOA Convex element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstRegion *ConvexReader( AstXmlChan *this, AstXmlElement *elem,
-* AstFrame *frm, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Region from the supplied IVOA
-* Convex element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA Convex element.
-* frm
-* Pointer to the 2D Frame in which the returned Region should be
-* defined. If the Unit attribute is not set, this function will
-* set it to the value supplied in "unit" before returning.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
- AstFrame *cfrm; /* Frame to use when building Constraints */
- AstRegion *new; /* Pointer to returned Region */
- AstRegion *reg; /* Pointer to component Region */
- AstRegion *tmp; /* Pointer to new Region */
- IVOAScan *scan; /* Structure holding scan results */
- const char *names[1]; /* Names of the subelements to be searched for */
- const char *unit; /* Unit attribute in element tag */
- int i; /* Loop count */
- int issky; /* Is supplied Frame a SkyFrame? */
- int max[1]; /* Max allowed occurrences of each name */
- int min[1]; /* Min allowed occurrences of each name */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Search the supplied element for a Region sub-element. */
- names[ 0 ] = "Constraint";
- min[ 0 ] = 1;
- max[ 0 ] = INT_MAX;
- scan = ScanIVOAElement( this, elem, 1, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Convex needs no units since all values are normalised to a unit sphere */
- unit = astXmlGetAttributeValue( elem, "unit" );
- if( unit ) {
- Report( this, elem, WARNING, "contains unnecessary unit attribute", status );
- }
-
-/* Unless the supplied Frame is a SkyFrame (which handles the Unit
- attribute unusually), take a copy of the supplied Frame and set its
- units to radians. */
- issky = astIsASkyFrame( frm );
- if( issky ) {
- cfrm = astCopy( frm );
- astSetUnit( cfrm, 0, "rad" );
- astSetUnit( cfrm, 1, "rad" );
- } else {
- cfrm = astClone( frm );
- }
-
-/* Create Regions from all the component Constraint elements, and combine
- them into nested CmpRegions, using the boolean AND operator to combine
- them. */
- new = ConstraintReader( this, scan->el[0][0], cfrm, status );
- for( i = 1; i < scan->count[0]; i++ ) {
- reg = ConstraintReader( this, scan->el[0][i], cfrm, status );
- tmp = (AstRegion *) astCmpRegion( new, reg, AST__AND, "", status );
- reg = astAnnul( reg );
- (void) astAnnul( new );
- new = tmp;
- }
-
-/* If required, modify the units back to their original values This
- will cause the axis values defining the returned Region to be re-mapped
- into the new units. Do not do this if the supplied Frame is a SkyFrame. */
- if( !issky ) {
- if( astTestUnit( frm, 0 ) ) astSetUnit( new, 0, astGetUnit( frm, 0 ) );
- if( astTestUnit( frm, 1 ) ) astSetUnit( new, 1, astGetUnit( frm, 1 ) );
- }
-
-/* Get any fill factor from the element and assign to the returned Region. */
- FillAndLims( this, elem, new, status );
-
-/* Free resources */
- cfrm = astAnnul( cfrm );
- scan = FreeIVOAScan( scan, status );
- }
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
- return new;
-}
-
-
-static AstRegion *Coord2VecIntervalReader( AstXmlChan *this, AstXmlElement *elem,
- const char *unit, AstFrame *frm, int *status ){
-/*
-* Name:
-* Coord2VecIntervalReader
-
-* Purpose:
-* Make an AST Region from an IVOA Coord2VecInterval element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstRegion *Coord2VecIntervalReader( AstXmlChan *this, AstXmlElement *elem,
-* const char *unit, AstFrame *frm, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Region from the supplied IVOA
-* Coord2VecInterval element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA Coord2VecInterval element.
-* unit
-* A string holding the units in which the axis values are stored
-* in the supplied element.
-* frm
-* Pointer to the Frame in which the returned Region should be
-* defined. If the Unit attribute is not set, this function will
-* set it to the value supplied in "unit" before returning.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
- AstFrame *cfrm; /* Frame used to define returned Region */
- AstMapping *map; /* Mapping from supplied units to rads */
- AstRegion *new; /* Pointer to returned Region */
- IVOAScan *scan; /* Structure holding scan results */
- const char *funit; /* Unit string from supplied Frame */
- const char *names[2]; /* Names of the subelements to be searched for */
- double hilimit[2]; /* Upper limits */
- double lolimit[2]; /* Lower limits */
- int max[2]; /* Max allowed occurrences of each name */
- int min[2]; /* Min allowed occurrences of each name */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Search the supplied element for the required sub-elements. */
- names[ 0 ] = "LoLimit2Vec";
- names[ 1 ] = "HiLimit2Vec";
- min[ 0 ] = 0;
- min[ 1 ] = 0;
- max[ 0 ] = 1;
- max[ 1 ] = 1;
- scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Get the limits. */
- lolimit[0] = AST__BAD;
- lolimit[1] = AST__BAD;
- if( scan->count[0] ) ElemListD( this, scan->el[0][0], 2, lolimit, status );
-
- hilimit[0] = AST__BAD;
- hilimit[1] = AST__BAD;
- if( scan->count[1] ) ElemListD( this, scan->el[1][0], 2, hilimit, status );
-
-/* Since the SkyFrame class does not have active Units we must handle it
- separately. */
- if( astIsASkyFrame( frm ) ) {
-
-/* Convert the limit values to radians. */
- map = astUnitMapper( unit, "rad", NULL, NULL );
- if( map ) {
- astTran1( map, 2, lolimit, 1, lolimit );
- astTran1( map, 2, hilimit, 1, hilimit );
- map = astAnnul( map );
- } else if( astOK ) {
- Report( this, elem, FAILURE, "contains unusable units", status );
- }
-
-/* If at least one limit was found, create an Interval within the supplied
- Frame. Otherwise create a negated NullRegion. */
- if( lolimit[ 0 ] != AST__BAD || lolimit[ 1 ] != AST__BAD ||
- hilimit[ 0 ] != AST__BAD || hilimit[ 1 ] != AST__BAD ) {
- new = (AstRegion *) astInterval( frm, lolimit, hilimit, NULL, "", status );
- } else {
- new = (AstRegion *) astNullRegion( frm, NULL, "negated=1", status );
- }
-
-/* Now handles Frames other than SkyFrames. */
- } else {
-
-/* Take a copy of the supplied Frame and set its Unit attribute to the
- supplied value. */
- cfrm = astCopy( frm );
- astSetUnit( cfrm, 0, unit );
-
-/* If at least one limit was found, create an Interval within this
- modified Frame. Otherwise create a negated NullRegion. */
- if( lolimit[ 0 ] != AST__BAD || lolimit[ 1 ] != AST__BAD ||
- hilimit[ 0 ] != AST__BAD || hilimit[ 1 ] != AST__BAD ) {
- new = (AstRegion *) astInterval( cfrm, lolimit, hilimit, NULL, "", status );
- } else {
- new = (AstRegion *) astNullRegion( cfrm, NULL, "negated=1", status );
- }
-
-/* If the supplied units differ from that of the supplied Frame, set the
- units in the Region to those of the supplied Frame. This will cause the
- encapsulated limits to be mapped into the required units. If the supplied
- Frame had no set Units, set it to the supplied units. */
- if( astTestUnit( frm, 0 ) ) {
- funit = astGetUnit( frm, 0 );
- if( strcmp( funit, unit ) ) astSetUnit( new, 0, funit );
- } else {
- astSetUnit( frm, 0, unit );
- }
-
-/* Free resources */
- cfrm = astAnnul( cfrm );
- }
-
-/* Get any fill factor and lo/hi_include attributes from the element and
- assign to the returned Region. */
- FillAndLims( this, elem, new, status );
-
-/* Free resources */
- scan = FreeIVOAScan( scan, status );
- }
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
- return new;
-}
-
-static AstRegion *Coord3VecIntervalReader( AstXmlChan *this, AstXmlElement *elem,
- const char *unit, AstFrame *frm, int *status ){
-/*
-* Name:
-* Coord3VecIntervalReader
-
-* Purpose:
-* Make an AST Region from an IVOA Coord3VecInterval element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstRegion *Coord3VecIntervalReader( AstXmlChan *this, AstXmlElement *elem,
-* const char *unit, AstFrame *frm, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Region from the supplied IVOA
-* Coord3VecInterval element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA Coord3VecInterval element.
-* unit
-* A string holding the units in which the axis values are stored
-* in the supplied element.
-* frm
-* Pointer to the Frame in which the returned Region should be
-* defined. If the Unit attribute is not set, this function will
-* set it to the value supplied in "unit" before returning.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
- AstFrame *cfrm; /* Frame used to define returned Region */
- AstRegion *new; /* Pointer to returned Region */
- IVOAScan *scan; /* Structure holding scan results */
- const char *funit; /* Unit string from supplied Frame */
- const char *names[2]; /* Names of the subelements to be searched for */
- double hilimit[3]; /* Upper limits */
- double lolimit[3]; /* Lower limits */
- int max[2]; /* Max allowed occurrences of each name */
- int min[2]; /* Min allowed occurrences of each name */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Search the supplied element for the required sub-elements. */
- names[ 0 ] = "LoLimit3Vec";
- names[ 1 ] = "HiLimit3Vec";
- min[ 0 ] = 0;
- min[ 1 ] = 0;
- max[ 0 ] = 1;
- max[ 1 ] = 1;
- scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Get the limits. */
- lolimit[0] = AST__BAD;
- lolimit[1] = AST__BAD;
- lolimit[2] = AST__BAD;
- if( scan->count[0] ) ElemListD( this, scan->el[0][0], 3, lolimit, status );
-
- hilimit[0] = AST__BAD;
- hilimit[1] = AST__BAD;
- hilimit[2] = AST__BAD;
- if( scan->count[1] ) ElemListD( this, scan->el[1][0], 3, hilimit, status );
-
-/* Take a copy of the supplied Frame and set its Unit attribute to the
- supplied value. */
- cfrm = astCopy( frm );
- astSetUnit( cfrm, 0, unit );
-
-/* If at least one limit was found, create an Interval within this
- modified Frame. Otherwise create a negated NullRegion. */
- if( lolimit[ 0 ] != AST__BAD || lolimit[ 1 ] != AST__BAD ||
- lolimit[ 2 ] != AST__BAD ||
- hilimit[ 0 ] != AST__BAD || hilimit[ 1 ] != AST__BAD ||
- hilimit[ 2 ] != AST__BAD ) {
- new = (AstRegion *) astInterval( cfrm, lolimit, hilimit, NULL, "", status );
- } else {
- new = (AstRegion *) astNullRegion( cfrm, NULL, "negated=1", status );
- }
-
-/* If the supplied units differ from that of the supplied Frame, set the
- units in the Region to those of the supplied Frame. This will cause the
- encapsulated limits to be mapped into the required units. If the supplied
- Frame had no set Units, set it to the supplied units. */
- if( astTestUnit( frm, 0 ) ) {
- funit = astGetUnit( frm, 0 );
- if( strcmp( funit, unit ) ) astSetUnit( new, 0, funit );
- } else {
- astSetUnit( frm, 0, unit );
- }
-
-/* Get any fill factor and lo/hi_include attributes from the element and
- assign to the returned Region. */
- FillAndLims( this, elem, new, status );
-
-/* Free resources */
- cfrm = astAnnul( cfrm );
- scan = FreeIVOAScan( scan, status );
- }
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
- return new;
-}
-
-static AstRegion *CoordScalarIntervalReader( AstXmlChan *this, AstXmlElement *elem,
- const char *unit, AstFrame *frm, int *status ){
-/*
-* Name:
-* CoordScalarIntervalReader
-
-* Purpose:
-* Make an AST Region from an IVOA CoordScalarInterval element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstRegion *CoordScalarIntervalReader( AstXmlChan *this, AstXmlElement *elem,
-* const char *unit, AstFrame *frm, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Region from the supplied IVOA
-* CoordScalarInterval element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA CoordScalarInterval element.
-* unit
-* A string holding the units in which the axis values are stored
-* in the supplied element.
-* frm
-* Pointer to the Frame in which the returned Region should be
-* defined. If the Unit attribute is not set, this function will
-* set it to the value supplied in "unit" before returning.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
- AstFrame *cfrm; /* Frame used to define returned Region */
- AstRegion *new; /* Pointer to returned Region */
- IVOAScan *scan; /* Structure holding scan results */
- const char *funit; /* Unit string from supplied Frame */
- const char *names[2]; /* Names of the subelements to be searched for */
- double hilimit; /* Upper limit */
- double lolimit; /* Lower limit */
- int max[2]; /* Max allowed occurrences of each name */
- int min[2]; /* Min allowed occurrences of each name */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Search the supplied element for the required sub-elements. */
- names[ 0 ] = "LoLimit";
- names[ 1 ] = "HiLimit";
- min[ 0 ] = 0;
- min[ 1 ] = 0;
- max[ 0 ] = 1;
- max[ 1 ] = 1;
- scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Get the limits. */
- lolimit = scan->count[0] ? ElemValueD( this, scan->el[0][0], 0.0, status ) : AST__BAD;
- hilimit = scan->count[1] ? ElemValueD( this, scan->el[1][0], 0.0, status ) : AST__BAD;
-
-/* Take a copy of the supplied Frame and set its Unit attribute to the
- supplied value. */
- cfrm = astCopy( frm );
- astSetUnit( cfrm, 0, unit );
-
-/* If at least one limit was found, create an Interval within this
- modified Frame. Otherwise create a negated NullRegion. */
- if( lolimit != AST__BAD || hilimit != AST__BAD ) {
- new = (AstRegion *) astInterval( cfrm, &lolimit, &hilimit, NULL, "", status );
- } else {
- new = (AstRegion *) astNullRegion( cfrm, NULL, "negated=1", status );
- }
-
-/* If the supplied units differ from that of the supplied Frame, set the
- units in the Region to those of the supplied Frame. This will cause the
- encapsulated limits to be mapped into the required units. If the supplied
- Frame had no set Units, set it to the supplied units. */
- if( astTestUnit( frm, 0 ) ) {
- funit = astGetUnit( frm, 0 );
- if( strcmp( funit, unit ) ) astSetUnit( new, 0, funit );
- } else {
- astSetUnit( frm, 0, unit );
- }
-
-/* Get any fill factor and lo/hi_include attributes from the element and
- assign to the returned Region. */
- FillAndLims( this, elem, new, status );
-
-/* Free resources */
- cfrm = astAnnul( cfrm );
- scan = FreeIVOAScan( scan, status );
- }
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
- return new;
-}
-
-static int ElemListD( AstXmlChan *this, AstXmlElement *elem, int n,
- double *vals, int *status ) {
-/*
-* Name:
-* ElemListD
-
-* Purpose:
-* Read a floating point XML element value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* int ElemListD( AstXmlChan *this, AstXmlElement *elem, int n,
-* double *vals, int *status )
-
-* Class Membership:
-* XmlChan member function
-
-* Description:
-* This function reads the content of the supplied element, converts its
-* contents to a list of floating point values and returns these
-* values in "values". A report is made if the element value is not a
-* space separated list of floating point values, or if it contains
-* more than "n" values. The number of values stored in "values" is
-* returned as the function value.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the XmlElement.
-* n
-* The maximum number of floating point values to read from the supplied
-* element.
-* values
-* Pointer to an array to hold the values read. This should have at
-* least "n" elements. Any unused elements are left unchanged.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The number of values stored in "values".
-
-*/
-
-/* Local Variables: */
- AstXmlContentItem *item; /* Item no. "i" */
- char *text; /* Pointer to string holding formatted item */
- char buff[200]; /* Message buffer */
- const char *p; /* Pointer to start of remaining text */
- const char *value; /* Pointer to element value */
- double dval; /* Value read from string */
- int i; /* Index of current item */
- int l; /* Used length of string */
- int nc; /* Number of characters read by astSscanf */
- int nitem; /* Number of items in the element */
- int rep; /* Has a warning about excess values been made? */
- int result; /* Value to be returned */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* No warning has yet been made avbout excess values */
- rep = 0;
-
-/* Loop through all content items within the supplied element. */
- nitem = astXmlGetNitem( elem );
- for( i = 0; i < nitem; i++ ) {
- item = astXmlGetItem( elem, i );
-
-/* If this is non-blank character data, attempt to read values from it. */
- if( astXmlCheckType( item, AST__XMLBLACK ) ) {
-
-/* Get the element value as a string. */
- value = astXmlGetValue( item, 0 );
- if( value ) {
-
-/* Loop round reading floating point values from the text until the
- end of the string is reached. */
- l = astChrLen( value );
- p = value;
- while( p < value + l ){
-
-/* Read a floating point value from the start of the remaining string,
- storing the result in the supplied array. If succesful, increment the
- number of values read, and increment the pointer to the start of the
- remaining string. Abort if too many values are found. */
- if( astSscanf( p, " %lf %n", &dval, &nc ) == 1 ) {
- if( result < n ) {
- vals[ result++ ] = dval;
- p += nc;
- } else {
- if( !rep ) {
- rep = 1;
- if( n > 1 ) {
- sprintf( buff, "contains more than %d values - "
- "extra values will be ignored", n );
- } else {
- sprintf( buff, "contains more than 1 value - "
- "extra values will be ignored" );
- }
- Report( this, elem, WARNING, buff, status );
- }
- break;
- }
-
-/* If the remaing text is not a floating point value, then issue a report. */
- } else {
- Report( this, elem, FAILURE, "contains a non-numerical value", status );
- break;
- }
- }
- }
-
-/* If this is not character data, nor a comment, issue a warning. */
- } else if( !astXmlCheckType( item, AST__XMLWHITE ) &&
- !astXmlCheckType( item, AST__XMLCOM ) ) {
- text = (char *) astXmlFormat( item );
- if( text ) {
- if( strlen( text ) > 30 ) text[ 30 ] = 0;
- sprintf( buff, "contains the following which is being ignored: \"%s\"",
- text );
- text = astFree( text );
- Report( this, elem, WARNING, buff, status );
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static double ElemValueD( AstXmlChan *this, AstXmlElement *elem, double def, int *status ) {
-/*
-* Name:
-* ElemValueD
-
-* Purpose:
-* Read a floating point XML element value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* double ElemValueD( AstXmlChan *this, AstXmlElement *elem, double def )
-
-* Class Membership:
-* XmlChan member function
-
-* Description:
-* This function reads the content of the supplied element, converts its
-* contents to a floating point value and returns this value. A report is
-* made if the element value is not floating point. The supplied default
-* value is returned if the element is not present.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the XmlElement.
-* def
-* If the content of the supplied element is not a flaoting point
-* value, then this value will be returned instead.
-
-* Returned Value:
-* The required element value, or the default if the value was not found.
-
-*/
-
-/* Local Variables: */
- const char *value; /* Pointer to element value */
- double result; /* Value to be returned */
- int nc; /* Number of characters read by astSscanf */
- int ok; /* Value read OK? */
-
-/* Initialise. */
- result = def;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Assume the value cannot be read. */
- ok = 0;
-
-/* Get the element value as a string. */
- value = astXmlGetValue( elem, 0 );
-
-/* If succesful, convert the value to floating point. */
- if( value ) {
- nc = 0;
- ok = ( ( 1 == astSscanf( value, " %lf %n", &result, &nc ) )
- && ( nc >= (int) strlen( value ) ) );
- }
-
-/* Give a warning if not OK, and use default value. */
- if( !ok ) {
- Report( this, elem, FAILURE, "does not contain a floating point value", status );
- result = def;
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstRegion *EllipseReader( AstXmlChan *this, AstXmlElement *elem,
- AstFrame *frm, int *status ){
-/*
-* Name:
-* EllipseReader
-
-* Purpose:
-* Make an AST Region from an IVOA Ellipse element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstRegion *EllipseReader( AstXmlChan *this, AstXmlElement *elem,
-* AstFrame *frm, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Region from the supplied IVOA
-* Ellipse element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA Ellipse element.
-* frm
-* Pointer to the 2D Frame in which the returned Region should be
-* defined. If the Unit attribute is not set, this function will
-* set it to the value supplied in "unit" before returning.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
- AstFrame *cfrm; /* Frame used to define returned Region */
- AstMapping *map; /* Mapping between units */
- AstRegion *new; /* Pointer to returned Region */
- IVOAScan *scan; /* Structure holding scan results */
- const char *funit; /* Unit string from supplied Frame */
- const char *names[4]; /* Names of the subelements to be searched for */
- const char *unit; /* Centre and radii unit string */
- double cen[2]; /* Centre */
- double pa; /* Major axis position angle */
- double rad[2]; /* Major and minor radii */
- int i; /* Axis count */
- int max[4]; /* Max allowed occurrences of each name */
- int min[4]; /* Min allowed occurrences of each name */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Scan the supplied element for the required sub-elements */
- names[ 0 ] = "Radius";
- names[ 1 ] = "Center";
- names[ 2 ] = "MinorRadius";
- names[ 3 ] = "PosAngle";
- min[ 0 ] = 1;
- min[ 1 ] = 1;
- min[ 2 ] = 1;
- min[ 3 ] = 1;
- max[ 0 ] = 1;
- max[ 1 ] = 1;
- max[ 2 ] = 1;
- max[ 3 ] = 1;
- scan = ScanIVOAElement( this, elem, 4, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Get the major radius */
- rad[ 0 ] = ElemValueD( this, scan->el[0][0], 0.0, status );
-
-/* Get the minor radius. */
- rad[ 1 ] = ElemValueD( this, scan->el[2][0], 0.0, status );
-
-/* Get the centre. */
- cen[0] = 0.0;
- cen[1] = 0.0;
- ElemListD( this, scan->el[1][0], 2, cen, status );
-
-/* Get the position angle. This is returned in the AST convention, i.e.
- measured in radians from from +ve second axis through positive first
- axis. */
- pa = PosAngleReader( this, scan->el[3][0], status );
-
-/* Get the units attribute from the supplied element. These are the units
- of the centre and radii value. */
- unit = astXmlGetAttributeValue( elem, "unit" );
- if( !unit ) {
- Report( this, elem, FAILURE, "contains no unit attribute", status );
- unit = "";
- }
-
-/* Since the SkyFrame class does not have active Units we must handle it
- separately. */
- if( astIsASkyFrame( frm ) ) {
-
-/* Convert the axis values and radii to radians. */
- map = astUnitMapper( unit, "rad", NULL, NULL );
- if( map ) {
- astTran1( map, 2, cen, 1, cen );
- astTran1( map, 2, rad, 1, rad );
- map = astAnnul( map );
- } else if( astOK ) {
- Report( this, elem, FAILURE, "contains unusable units", status );
- }
-
-/* Create the Ellipse. */
- new = (AstRegion *) astEllipse( frm, 1, cen, rad, &pa, NULL, "", status );
-
-/* Now handles Frames other than SkyFrames. */
- } else {
-
-/* Take a copy of the supplied Frame and set its Units to the value
- obtained from the supplied element. */
- cfrm = astCopy( frm );
- astSetUnit( cfrm, 0, unit );
- astSetUnit( cfrm, 1, unit );
-
-/* Create a Ellipse within this modified Frame. */
- new = (AstRegion *) astEllipse( cfrm, 1, cen, rad, &pa, NULL, "", status );
-
-/* If the Unit of this Region differs from that of the supplied Frame,
- set it to the Unit of the supplied Frame. This will cause the
- encapsulated limits to be mapped into the new Unit. If the supplied
- Frame had no set Unit, set it to the units obtained from the supplied
- element. */
- for( i = 0; i < 2; i++ ) {
- if( astTestUnit( frm, i ) ) {
- funit = astGetUnit( frm, i );
- if( strcmp( funit, unit ) ) astSetUnit( new, i, funit );
- } else {
- astSetUnit( frm, i, unit );
- }
- }
-
-/* Free resources */
- cfrm = astAnnul( cfrm );
- }
-
-/* Get any fill factor and lo/hi_include attributes from the element and
- assign to the returned Region. */
- FillAndLims( this, elem, new, status );
-
-/* Free resources */
- scan = FreeIVOAScan( scan, status );
- }
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
- return new;
-}
-
-static double Error2PAReader( AstXmlChan *this, AstXmlElement *elem,
- double *size, int *status ){
-/*
-* Name:
-* Error2PAReader
-
-* Purpose:
-* Read the contents of an Stc Error2PA element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* double Error2PAReader( AstXmlChan *this, AstXmlElement *elem,
-* double *size, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function reads the contents of an Stc Error2PA element. It can
-* also be used to read Resolution2PA, Size2PAand PixSize2PA which
-* have exactly the same structure as a Error2PA element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA Ellipse element.
-* size
-* Pointer to an array to receive the 2 error sizes.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The position angle of the first error size, in radians, from positive
-* second axis to positive first axis.
-
-*/
-
-/* Local Variables: */
- IVOAScan *scan; /* Structure holding scan results */
- const char *names[4]; /* Names of the subelements to be searched for */
- double pa; /* Major axis position angle */
- int max[4]; /* Max allowed occurrences of each name */
- int min[4]; /* Min allowed occurrences of each name */
-
-/* Initialise. */
- pa = 0.0;
-
-/* Check the global error status. */
- if ( !astOK ) return pa;
-
-/* Scan the supplied element for the required sub-elements */
- names[ 0 ] = "Size";
- names[ 1 ] = "PosAngle";
- min[ 0 ] = 1;
- min[ 1 ] = 0;
- max[ 0 ] = 1;
- max[ 1 ] = 1;
- scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Get the sizes */
- ElemListD( this, scan->el[0][0], 2, size, status );
-
-/* Get the position angle. This is returned in the AST convention, i.e.
- measured in radians from from +ve second axis through positive first
- axis. */
- pa = PosAngleReader( this, scan->el[1][0], status );
-
-/* Free resources */
- scan = FreeIVOAScan( scan, status );
- }
-
-/* Return the position angle. */
- return pa;
-}
-
-static void FillAndLims( AstXmlChan *this, AstXmlElement *elem, AstRegion *new, int *status ){
-/*
-* Name:
-* FillAndLims
-
-* Purpose:
-* Get fill factor and limit inclusion flags from IVOA element and
-* assign to an AST Region.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* void FillAndLims( AstXmlChan *this, AstXmlElement *elem, AstRegion *new, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function gets attributes from the supplied element describing
-* fill factor and limit inclusion flags, and assigns suitable values
-* to the supplied Region. Default values are used if the supplied
-* element does not have the required attributes.
-
-* Parameters:
-* this
-* Pointer to the XmlChan in which to store warnings.
-* elem
-* Pointer to the AstXmlElement to search.
-* new
-* Pointer to the Region in which to store the values.
-* status
-* Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
- const char *text; /* Attribute text */
- double ff; /* Fill factor */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Get any fill factor attribute from the element and assign to the
- returned Region. */
- ff = AttrValueD( this, elem, "fill_factor", AST__BAD, status );
- if( ff != AST__BAD ) astSetFillFactor( new, ff );
-
-/* Get the flags indicating if the limits are included in the interval.
- If either of the limits is not included in the interval, then make the
- Region open. Assume a default of true ("included") if the attribute is
- missing. */
- text = astXmlGetAttributeValue( elem, "lo_include" );
- if( text && !strcmp( text, "false" ) ) astSetClosed( new, 0 );
-
- text = astXmlGetAttributeValue( elem, "hi_include" );
- if( text && !strcmp( text, "false" ) ) astSetClosed( new, 0 );
-
-}
-
-static AstXmlElement *FindAttribute( AstXmlChan *this, const char *name, int *status ) {
-/*
-* Name:
-* FindAttribute
-
-* Purpose:
-* Find an XML element representing a named AST attribute.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstXmlElement *FindAttribute( AstXmlChan *this, const char *name, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function searches the content of the current container element
-* of the supplied XmlChan looking for an element which represents a
-* named AST attribute. No error is reported if the attribute is not
-* found. Attributes which represent defaul values are ignored.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* name
-* Pointer to a string holding the required AST attribute name
-* (case-insensitive).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the XmlElement if found, and NULL otherwise.
-
-*/
-
-/* Local Variables: */
- AstXmlContentItem *item; /* Item no. "i" */
- AstXmlElement *result; /* Returned pointer */
- const char *def; /* Value from XML DEFAULT attribute */
- const char *definedby; /* Name of class which defines the item */
- const char *xmlname; /* Value from XML NAME attribute */
- int i; /* Index of current item */
- int nitem; /* Number of items still in the element */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Report an error if the class being loaded has not been set. */
- if( !this->isa_class ) {
- astError( AST__INTER, "astRead(XmlChan): astReadNextData not called "
- "before reading values for a %s (internal AST programming "
- "error).", status, astXmlGetName( this->container ) );
- }
-
-/* Check we have a container to search. */
- if( !this->container ) {
- astError( AST__INTER, "astRead(XmlChan): No container before reading "
- "values for a %s (internal AST programming error).", status,
- astXmlGetName( this->container ) );
- }
-
-/* Check all is OK. */
- if( astOK ) {
-
-/* Loop round all items in the elements contents. */
- nitem = astXmlGetNitem( this->container );
- for( i = 0; i < nitem; i++ ) {
- item = astXmlGetItem( this->container, i );
-
-/* Ignore this item if it is not an element. */
- if( astXmlCheckType( item, AST__XMLELEM ) ) {
-
-/* Ignore this element if its name is not ATTR. */
- if( !astOK ) break;
- if( !strcmp( astXmlGetName( item ), ATTR ) ){
-
-/* Ignore this element if it represents a default value. */
- def = astXmlGetAttributeValue( item, DEFAULT );
- if( !def || strcmp( def, TRUE ) ) {
-
-/* If this ATTR element has an XML attribute called NAME with
- the required value (case-insensitive), we may have found a matching
- element. */
- xmlname = astXmlGetAttributeValue( item, NAME );
- if( xmlname && !Ustrcmp( xmlname, name, status ) ) {
-
-/* Ignore the attribute if it does not belong to the correct part of the
- object's class hierarchy. If it does, we have found the required
- attribute. */
- definedby = astXmlGetAttributeValue( item, DEFINEDBY );
- if( definedby && !strcmp( definedby, this->isa_class ) ) {
- result = (AstXmlElement *) item;
- break;
- }
- }
- }
- }
- }
- }
- }
-
-/* Return the pointer. */
- return result;
-}
-
-static AstXmlElement *FindElement( AstXmlChan *this, AstXmlElement *elem,
- const char *name, int *status ) {
-/*
-* Name:
-* FindElement
-
-* Purpose:
-* Find a named element within a supplied element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstXmlElement *FindElement( AstXmlChan *this, AstXmlElement *elem,
-* const char *name, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function searches the content of the supplied element looking for
-* an element with the supplied Name. No error is reported if the element
-* is not found, but a Warning is issued if it found more than once.
-
-* Parameters:
-* this
-* Pointer to the XmlChan in which to store warnings.
-* elem
-* Pointer to the AstXmlElement to search.
-* name
-* Pointer to a string holding the required element name.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the XmlElement if found, and NULL otherwise.
-
-* Notes:
-* - If the supplied element contains more than one element with the
-* given name, the returned pointer locates the first element
-* encountered with the required name, and a WARNING is issued that the
-* second and subsequent elements will be ignored.
-
-*/
-
-/* Local Variables: */
- AstXmlContentItem *item; /* Item no. "i" */
- AstXmlElement *result; /* Returned pointer */
- char buff[ 200 ]; /* Message buffer */
- int i; /* Index of current item */
- int nitem; /* Number of items still in the element */
- int warned; /* Has a warning been issued? */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Loop round all items in the elements contents. */
- warned = 0;
- nitem = astXmlGetNitem( elem );
- for( i = 0; i < nitem; i++ ) {
- item = astXmlGetItem( elem, i );
-
-/* Ignore this item if it is not an element. */
- if( astXmlCheckType( item, AST__XMLELEM ) ) {
-
-/* If this element's name is the given name. */
- if( !strcmp( astXmlGetName( item ), name ) ){
-
-/* If this is the first element with the required name, store its
- pointer. */
- if( !result ) {
- result = (AstXmlElement *) item;
-
-/* Otherwise add a Warning (unles a Warning has already been issued). */
- } else if( !warned ) {
- warned = 1;
- sprintf( buff, "contains more than one %s element. The "
- "second and subsequent such elements will be "
- "ignored", name );
- Report( this, elem, WARNING, buff, status );
- }
- }
- }
- }
-
-/* Return the pointer. */
- return result;
-}
-
-static IVOAReader FindIVOAClass( AstXmlElement *elem, int *is_ivoa, int *status ) {
-/*
-* Name:
-* FindIVOAClass
-
-* Purpose:
-* Return a pointer to a function which will create an AST Object from
-* an IVOA element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* IVOAReader FindIVOAClass( AstXmlElement *elem, int *is_ivoa, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function checks the namespace of the supplied element to see if
-* it is a known IVOA namespace. If it is, it returns the "is_ivoa"
-* flag set to non-zero (otherwise it is returned as zero). It then
-* checks to see if an AST object can be created from the IVOA
-* element. If so, a pointer to the function which will do the
-* conversion is returned. Otherwise a NULL pointer is returned.
-
-* Parameters:
-* elem
-* Pointer to the element to check.
-* is_ivoa
-* Pointer to an int in which to return a flag indicating if the
-* supplied element belongs to a known IVOA namespace.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the function (if any) which can produce an AST Object
-* from the supplied element, or NULL if conversion is not possible.
-
-* Notes:
-* - NULL is returned if this function is invoked with the error
-* status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- IVOAReader result; /* Returned pointer */
- const char *ivoa; /* Pointer to "ivoa" substring */
- const char *name; /* Pointer to string holding element name */
- const char *stc; /* Pointer to "stc" substring */
- const char *uri; /* Pointer to string holding element namespace URI */
-
-/* Initialise */
- *is_ivoa = 0;
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get the element name.*/
- name = astXmlGetName( elem );
-
-/* Get the namespace URI for the element, and see if it contains
- sub-strings "STC" (or "stc") and "IVOA" (or "ivoa"). */
- uri = astXmlGetURI( elem );
- if( uri ) {
- stc = strstr( uri, "STC" );
- if( !stc ) stc = strstr( uri, "stc" );
- ivoa = strstr( uri, "IVOA" );
- if( !ivoa ) ivoa = strstr( uri, "ivoa" );
-
- } else {
- stc = NULL;
- ivoa = NULL;
- }
-
-/* If it is a known IVOA namespace, proceed. */
- if( name && ( stc || ivoa ) ){
- *is_ivoa = 1;
-
-/* Look for element types which can be converted to AST objects, and
- return a pointer to the corresponding reader function. */
- if( !strcmp( name, STC_RESOURCE_PROFILE ) ) {
- result = StcMetadataReader;
-
- } else if( !strcmp( name, SEARCH_LOCATION ) ) {
- result = StcMetadataReader;
-
- } else if( !strcmp( name, CATALOG_ENTRY_LOCATION ) ) {
- result = StcMetadataReader;
-
- } else if( !strcmp( name, OBSERVATION_LOCATION ) ) {
- result = StcMetadataReader;
-
- } else if( !strcmp( name, OBS_DATA_LOCATION ) ) {
- result = ObsDataLocationReader;
-
- } else if( !strcmp( name, ASTRO_COORD_SYSTEM ) ) {
- result = AstroCoordSystemReader;
-
- } else if( !strcmp( name, TIME_FRAME ) ) {
- result = TimeFrameReader;
-
- } else if( !strcmp( name, SPACE_FRAME ) ) {
- result = SpaceFrameReader;
-
- } else if( !strcmp( name, SPECTRAL_FRAME ) ) {
- result = SpectralFrameReader;
-
- } else if( !strcmp( name, REDSHIFT_FRAME ) ) {
- result = RedshiftFrameReader;
-
- } else if( !strcmp( name, REDSHIFT_FRAME ) ) {
- result = RedshiftFrameReader;
-
- }
- }
-
-/* Return null if an error occurred. */
- if( !astOK ) result = NULL;
-
-/* Return the result. */
- return result;
-}
-
-static const char *FindNextIsA( AstXmlElement *elem, int start, int *status ) {
-/*
-* Name:
-* FindNextIsA
-
-* Purpose:
-* Find the next "isa" element within an XML element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* const char *FindNextIsA( AstXmlElement *elem, int start, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function searches the content of the specified element,
-* starting at the item with the speicfied index, until it finds the
-* next "isa" element. It returns the value of the "class" attribute
-* of the found "isa" element, or the name of the supplied element
-* if no "isa" element is found.
-
-* Parameters:
-* elem
-* Pointer to the XmlElement (an element describing an AST Object).
-* start
-* The index of the first content item to check.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the class string.
-
-*/
-
-/* Local Variables: */
- AstXmlContentItem *item; /* Item no. "i" */
- const char *result; /* Returned string */
- int i; /* Index of current item */
- int nitem; /* Number of items still i nthe element */
-
-/* Initialise */
- result = astXmlGetName( elem );
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Loop round all items contained in the element, starting at the given
- index. */
- nitem = astXmlGetNitem( elem );
- for( i = start; i < nitem; i++ ) {
- item = astXmlGetItem( elem, i );
-
-/* Check this item is an XmlElement with name ISA. */
- if( astXmlCheckType( item, AST__XMLELEM ) ) {
- if( astOK && !strcmp( astXmlGetName( item ), ISA ) ) {
-
-/* The returned string is the value of the "class" attribute of this
- element. */
- result = astXmlGetAttributeValue( item, "class" );
-
-/* Report an error if the element does not have a class attribute. */
- if( !result && astOK ) {
- astError( AST__BADIN, "astRead(XmlChan): The tag %s "
- "does not include a \"class\" attribute.", status,
- GetTag( (AstXmlObject *) item, 1, status ) );
- }
-
- break;
-
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstXmlElement *FindObject( AstXmlChan *this, const char *name, int *status ) {
-/*
-* Name:
-* FindObject
-
-* Purpose:
-* Find an XML element representing a named AST Object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstXmlElement *FindObject( AstXmlChan *this, const char *name, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function searches the content of the current container element
-* of the supplied XmlChan looking for an element which represents a
-* named AST Object. No error is reported if the object is not
-* found. Objects which represent default values are ignored.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* name
-* Pointer to a string holding the required AST object name
-* (case-insensitive).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the XmlElement if found, and NULL otherwise.
-
-*/
-
-/* Local Variables: */
- AstXmlContentItem *item; /* Item */
- AstXmlElement *result; /* Returned pointer */
- const char *def; /* Value from XML DEFAULT attribute */
- const char *definedby; /* Name of class which defines the item */
- const char *xmlname; /* Value from XML LABEL attribute */
- int i; /* Index of current item */
- int nitem; /* Number of items still i nthe element */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Report an error if the class being loaded has not been set. */
- if( !this->isa_class ) {
- astError( AST__INTER, "astRead(XmlChan): astReadNextData not called "
- "before reading values for a %s (internal AST programming "
- "error).", status, astXmlGetName( this->container ) );
- }
-
-/* Check we have a container to search. */
- if( !this->container ) {
- astError( AST__INTER, "astRead(XmlChan): No container before reading "
- "values for a %s (internal AST programming error).", status,
- astXmlGetName( this->container ) );
- }
-
-/* Check all is OK. */
- if( astOK ) {
-
-/* Loop round all items in the elements contents. */
- nitem = astXmlGetNitem( this->container );
- for( i = 0; i < nitem; i++ ) {
- item = astXmlGetItem( this->container, i );
-
-/* Ignore this item if it is not an element. */
- if( astXmlCheckType( item, AST__XMLELEM ) ) {
-
-/* Ignore this element if its name is ATTR. */
- if( astOK && strcmp( astXmlGetName( item ), ATTR ) ){
-
-/* Ignore this element if it represents a default value. */
- def = astXmlGetAttributeValue( item, DEFAULT );
- if( !def || strcmp( def, TRUE ) ) {
-
-/* If this non-ATTR element has an XML attribute called LABEL with
- the required value (case-insensitive), we may have found a matching element. */
- xmlname = astXmlGetAttributeValue( item, LABEL );
- if( xmlname && !Ustrcmp( xmlname, name, status ) ) {
-
-/* Ignore the element if it does not belong to the correct part of the
- object's class hierarchy. If it does, we have found the required
- object. */
- definedby = astXmlGetAttributeValue( item, DEFINEDBY );
- if( definedby && !strcmp( definedby, this->isa_class ) ) {
- result = (AstXmlElement *) item;
- break;
- }
- }
- }
- }
- }
- }
- }
-
-/* Return the pointer. */
- return result;
-}
-
-static int FindString( int n, const char *list[], const char *test,
- const char *text, const char *method,
- const char *class, int *status ){
-/*
-* Name:
-* FindString
-
-* Purpose:
-* Find a given string within an array of character strings.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* int FindString( int n, const char *list[], const char *test,
-* const char *text, const char *method, const char *class, int *status )
-
-* Class Membership:
-* XmlChan method.
-
-* Description:
-* This function identifies a supplied string within a supplied
-* array of valid strings, and returns the index of the string within
-* the array. The test option may not be abbreviated, but case is
-* insignificant.
-
-* Parameters:
-* n
-* The number of strings in the array pointed to be "list".
-* list
-* A pointer to an array of legal character strings.
-* test
-* A candidate string.
-* text
-* A string giving a description of the object, parameter,
-* attribute, etc, to which the test value refers.
-* This is only for use in constructing error messages. It should
-* start with a lower case letter.
-* method
-* Pointer to a string holding the name of the calling method.
-* This is only for use in constructing error messages.
-* class
-* Pointer to a string holding the name of the supplied object class.
-* This is only for use in constructing error messages.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The index of the identified string within the supplied array, starting
-* at zero.
-
-* Notes:
-* - A value of -1 is returned if an error has already occurred, or
-* if this function should fail for any reason (for instance if the
-* supplied option is not specified in the supplied list).
-
-*/
-
-/* Local Variables: */
- int ret; /* The returned index */
-
-/* Check global status. */
- if( !astOK ) return -1;
-
-/* Compare the test string with each element of the supplied list. Leave
- the loop when a match is found. */
- for( ret = 0; ret < n; ret++ ) {
- if( !Ustrcmp( test, list[ ret ], status ) ) break;
- }
-
-/* Report an error if the supplied test string does not match any element
- in the supplied list. */
- if( ret >= n && astOK ) {
- astError( AST__RDERR, "%s(%s): Illegal value '%s' supplied for %s.", status,
- method, class, test, text );
- ret = -1;
- }
-
-/* Return the answer. */
- return ret;
-}
-
-static IVOAScan *FreeIVOAScan( IVOAScan *in, int *status ){
-/*
-* Name:
-* FreeIVOAScan
-
-* Purpose:
-* Free resources used by an IVOAScan structure.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* IVOAScan *FreeIVOAScan( IVOAScan *in )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function frees resources used by an IVOAScan structure (such
-* as returned by the ScanIVOAElement function).
-
-* Parameters:
-* in
-* Pointer to the IVOAScan structure.
-
-* Returned Value:
-* A NULL pointer.
-
-*/
-
-/* Local Variables: */
- int j; /* Index of current name */
-
-/* Check the supplied pointer can be used safely. */
- if( in ) {
-
-/* Free the arrays holding the element pointers. */
- for( j = 0; j < in->n; j++ ) {
- in->count[ j ] = 0;
- in->el[ j ] = astFree( in->el[ j ] );
- }
-
-/* Free the array holding the pointers to the arrays holding the element
- pointers. */
- in->el = astFree( in->el );
-
-/* Free the array holding the number of element pointers stored. */
- in->count = astFree( in->count );
-
-/* For safety, put a zero in the name count. */
- in->n = 0;
-
-/* Free the whole structure. */
- in = astFree( in );
-
- }
-
- return NULL;
-}
-
-static void Geod( double lat, double lon, double *phi, double *lambda, int *status ){
-/*
-* Name:
-* Geod
-
-* Purpose:
-* Convert a geocentric lat/long to geodetic lat/long at sea level.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* void Geod( double lat, double lon, double *phi, double *lambda, int *status )
-
-* Class Membership:
-* FitsChan member function.
-
-* Description:
-* This function converts a position supplied as geocentric lat/lon at
-* sea level into geodetic longitude, latitude. The algorithm is due to
-* Borkowski, and is described in the Explanatory Supplement to the
-* Astronomical Almanac (p206).
-
-* Parameters:
-* lat
-* Geocentric latitude (radians)
-* lon
-* Geocentric longitude (radians).
-* phi
-* Pointer at a location at which to return the geodetic latitude,
-* in radians.
-* lambda
-* Pointer at a location at which to return the geodetic longitude,
-* in radians.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Constants... */
-#define FL 1.0/298.257 /* Reference spheroid flattening factor */
-#define A0 6378140.0 /* Earth equatorial radius (metres) */
-
-/* Local Variables... */
- double r, e, f, p, q, d, n, g, t, rp, rd, sn, b0, boa, ab2oa;
- double pos[3];
-
-/* Initialise */
- *phi = 0.0;
- *lambda = 0.0;
-
-/* Check the global status. */
- if( !astOK ) return;
-
-/* Convert the supplied geocentric lon/lat to terrestrial Cartesian
- (x,y,z) values. The (x,y,z) system has origin at the centre of the
- earth, Z axis going through the north pole, X axis at (long,lat)=(0,0),
- and Y axis at (long,lat) = (E90,0). Assume an equatorial sea level
- position. */
- palSlaDcs2c( lon, lat, pos );
- pos[ 0 ] *= A0;
- pos[ 1 ] *= A0;
- pos[ 2 ] *= A0;
-
-/* Earth polar radius (metres) */
- b0 = A0*( 1.0 - FL );
-
-/* Useful functions */
- boa = b0/A0;
- ab2oa = ( A0*A0 - b0*b0)/A0;
-
-/* To obtain the proper sign and polynomial solution, the sign of b is
- set to that of z. Note the sign of z. */
- if( pos[ 2 ] > 0.0 ) {
- sn = 1.0;
- } else {
- sn = -1.0;
- }
-
-/* If the supplied position is on the polar axis, the returned values are
- trivial. We check this case because it corresponds to a singularity in
- the main algorithm. */
- r = sqrt( pos[ 0 ]*pos[ 0 ] + pos[ 1 ]*pos[ 1 ] );
- if( r == 0 ) {
- *lambda = 0.0;
- *phi = AST__DPIBY2;
-
- } else {
-
-/* The longitude is unchanged. */
- *lambda = lon;
-
-/* The equator is also a singularity in the main algorithm. If the
- supplied point is on the equator, the answers are trivial. */
- if( pos[ 2 ] == 0.0 ) {
- *phi = 0.0;
-
-/* For all other cases, use the main Borkowski algorithm. */
- } else {
- e = ( sn*boa*pos[ 2 ] - ab2oa )/r;
- f = ( sn*boa*pos[ 2 ] + ab2oa )/r;
- p = 4.0*( e*f + 1.0 )/3.0;
- q = 2.0*( e*e - f*f );
- d = p*p*p + q*q;
-
- if( d < 0.0 ) {
- rp = sqrt( -p );
- n = 2.0*rp*cos( acos( q/(p*rp) )/3.0 );
- } else {
- rd = sqrt( d );
- n = pow( ( rd - q ), 1.0/3.0 ) - pow( (rd + q ), 1.0/3.0 );
- }
-
- g = 0.5* ( sqrt( e*e + n ) + e );
- t = sqrt( g*g + ( f - n*g )/( 2*g - e ) ) - g;
-
- *phi = atan( A0*( 1.0 - t*t )/( 2.0*sn*b0*t ) );
-
- }
- }
-}
-#undef FL
-#undef A0
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a XmlChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* XmlChan member function (over-rides the protected astGetAttrib
-* method inherited from the Channel class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a XmlChan, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* attrib
-* Pointer to a null terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the XmlChan, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the XmlChan. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstXmlChan *this; /* Pointer to the XmlChan structure */
- const char *result; /* Pointer value to return */
- int ival; /* Integer attribute value */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the XmlChan structure. */
- this = (AstXmlChan *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null terminated string in an appropriate
- format. Set "result" to point at the result string. */
-
-/* XmlIndent */
-/* --------- */
- if ( !strcmp( attrib, "xmlindent" ) ) {
- ival = astGetXmlIndent( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* XmlLength */
-/* --------- */
- } else if ( !strcmp( attrib, "xmllength" ) ) {
- ival = astGetXmlLength( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%d", ival );
- result = getattrib_buff;
- }
-
-/* XmlFormat */
-/* --------- */
- } else if ( !strcmp( attrib, "xmlformat" ) ) {
- ival = astGetXmlFormat( this );
- if ( astOK ) {
- if( ival == NATIVE_FORMAT ){
- result = NATIVE_STRING;
-
- } else if( ival == QUOTED_FORMAT ){
- result = QUOTED_STRING;
-
- } else if( ival == IVOA_FORMAT ){
- result = IVOA_STRING;
-
- } else {
- result = UNKNOWN_STRING;
- }
- }
-
-/* XmlPrefix */
-/* --------- */
- } else if ( !strcmp( attrib, "xmlprefix" ) ) {
- result = astGetXmlPrefix( this );
-
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-}
-
-
-static int GetComment( AstChannel *this, int *status ) {
-/*
-* Name:
-* GetComment
-
-* Purpose:
-* Get the value of the Comment attribute of a Channel.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* int GetComment( AstChannel *this, int *status )
-
-* Class Membership:
-* XmlChan member function (over-rides the protected astGetComment
-* method inherited from the Channel class).
-
-* Description:
-* This function returns the value of the Comment attribute of the XmlChan.
-* It changs the default value from 1 (provided by the parent Channel
-* class) to zero.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - The Comment value.
-*/
-
- return astTestComment( this ) ? (*parent_getcomment)( this, status ) : 0;
-}
-
-static int GetFull( AstChannel *this, int *status ) {
-/*
-* Name:
-* GetFull
-
-* Purpose:
-* Get the value of the Full attribute of a Channel.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* int GetFull( AstChannel *this, int *status )
-
-* Class Membership:
-* XmlChan member function (over-rides the protected astGetFull
-* method inherited from the Channel class).
-
-* Description:
-* This function returns the value of the Full attribute of the XmlChan.
-* It changs the default value from zero (provided by the parent Channel
-* class) to -1.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - The Full value.
-*/
-
- return astTestFull( this ) ? (*parent_getfull)( this, status ) : -1;
-}
-
-static char GetNextChar( void *data, int *status ) {
-/*
-* Name:
-* GetNextChar
-
-* Purpose:
-* Get the next character from the XML source.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* char GetNextChar( void *data, int *status )
-
-* Class Membership:
-* XmlChan member function
-
-* Description:
-* This function returns the next character from the XML source,
-* getting a new string if necessary.
-
-* Parameters:
-* data
-* Pointer to a structure holding data needed to perform the read.
-* This should be a pointer to the XmlChan being read. If NULL is
-* supplied, then any internal resources are freed and a value of
-* zero is returned.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - The next source character, or zero if NULL is supplied for "data".
-
-* Notes:
-* - Zero is returned if there is no more text to read.
-* - Zero is returned if an error has already occurred, or if this
-* function should failed for any reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstXmlChan *this; /* Pointer to the XmlChan */
- char result; /* The returned character */
-
-/* Initiialise */
- result = 0;
-
-/* Get a pointer to the XmlChan. */
- this = (AstXmlChan *) data;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* If a NULL pointer is supplied free any memory holding text already
- read from the source, and return zero. */
- if( !data ) {
- getnextchar_buf = astFree( getnextchar_buf );
- return 0;
- }
-
-/* Check the global status */
- if( !astOK ) return result;
-
-/* We read a new line from the source if: 1) the reset flag is set in the
- XmlChan, 2) we have reached the terminating null in the previous line,
- or 3) we do not yet have a line of text. */
- if( this->reset_source || *getnextchar_c == 0 || !getnextchar_buf ) {
- this->reset_source = 0;
-
-/* Free the memory used to hold any previous text. */
- if( getnextchar_buf ) getnextchar_buf = astFree( getnextchar_buf );
-
-/* Read a new line of text from the source. */
- getnextchar_buf = astGetNextText( this );
-
-/* Read a new line if the previous line was empty. */
- while( getnextchar_buf && !getnextchar_buf[ 0 ] ) {
- astFree( getnextchar_buf );
- getnextchar_buf = astGetNextText( this );
- }
-
-/* Reset the pointer to the next character to the start of the new
- string. */
- getnextchar_c = getnextchar_buf;
-
-/* If all has gone OK, return the first character and then increment getnextchar_c to
- point to the next character. */
- if( getnextchar_c && astOK ) result = *(getnextchar_c++);
-
-/* If we are reading a previously read line, return the character located
- by getnextchar_c and increment getnextchar_c. */
- } else {
- result = *(getnextchar_c++);
- }
-
-/* Return the result */
- return result;
-
-}
-
-static const char *GetTag( AstXmlObject *this, int opening, int *status ){
-/*
-* Name:
-* GetTag
-
-* Purpose:
-* Returns a string holding an XML tag describing the given XmlObject.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* const char *GetTag( AstXmlObject *this, int opening, int *status )
-
-* Description:
-* This function returns a pointer to static string
-* containing an XML tag describing the given XmlObject. It is a
-* wrapper for the astXmlGetTag function defined in xml.h, but it
-* additionally removes any "definedby" attribute before formating the
-* tag (the "definedby" attribute is added by the ReadClassData
-* function and is not part of the XML text read from the source).
-
-* Parameters:
-* this
-* Pointer to the XmlObject.
-* opening
-* Indicates which tag is to be returned; the start tag or the end
-* tag. If non-zero the start tag is returned. Otherwise, the
-* end tag is returned. If the supplied XmlObject has no end
-* tag (i.e. if it is an empty element, or if it is not an element),
-* then NULL is returned but no error is reported.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to a null terminated static string holding the tag.
-
-* Notes:
-* - Empty elements are represented as an start tag of the form <.../>,
-* with no corresponding end tag.
-* - NULL is returned if an error has already occurred, or if this
-* function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstXmlElement *elem; /* Pointer to XML element */
- const char *result; /* The returned pointer */
- const char *ptr; /* The value of the "definedby" attribute */
- const char *class; /* Copy of the value of the "definedby" attribute */
-
-/* Initialise */
- result = NULL;
-
-/* If the object is an element, check for the "definedby" attribute. */
- if( astXmlCheckType( this, AST__XMLELEM ) ) {
- elem = (AstXmlElement *) this;
-
-/* See if the element contains a "definedby" attribute. */
- ptr = astXmlGetAttributeValue( elem, DEFINEDBY );
-
-/* If so, temporarily remove it, format the tag and then put it back. */
- if( ptr ) {
- class = astStore( NULL, ptr, strlen( ptr ) + 1 );
- astXmlRemoveAttr( elem, DEFINEDBY, NULL );
- result = astXmlGetTag( elem, opening );
- astXmlAddAttr( elem, DEFINEDBY, class, NULL );
- class = astFree( (void *) class );
-
-/* If not, just use astXmlGetTag. */
- } else {
- result = astXmlGetTag( this, opening );
- }
-
-/* If the object is not an element, just use astXmlGetTag. */
- } else {
- result = astXmlGetTag( this, opening );
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstRegion *IntersectionReader( AstXmlChan *this, AstXmlElement *elem,
- AstFrame *frm, int *status ){
-/*
-* Name:
-* IntersectionReader
-
-* Purpose:
-* Make an AST Region from an IVOA Intersection region element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstRegion *IntersectionReader( AstXmlChan *this, AstXmlElement *elem,
-* AstFrame *frm, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Region from the supplied IVOA
-* Intersection region element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA Intersection region element.
-* frm
-* Pointer to the 2D Frame in which the returned Region should be
-* defined. If the Unit attribute is not set, this function will
-* set it to the value supplied in "unit" before returning.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
- AstRegion *new; /* Pointer to returned Region */
- AstRegion *reg; /* Pointer to component Region */
- AstRegion *tmp; /* Pointer to new Region */
- IVOAScan *scan; /* Structure holding scan results */
- const char *names[1]; /* Names of the subelements to be searched for */
- int i; /* Loop count */
- int max[1]; /* Max allowed occurrences of each name */
- int min[1]; /* Min allowed occurrences of each name */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Search the supplied element for a Region sub-element. */
- names[ 0 ] = "Intersection|Union|Negation|AllSky|Circle|Ellipse|Polygon|"
- "Convex|Box";
- min[ 0 ] = 2;
- max[ 0 ] = INT_MAX;
- scan = ScanIVOAElement( this, elem, 1, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Create Regions from all the component region elements, and combine
- them into nested CmpRegions, using the boolean AND operator to combine
- them. */
- new = RegionReader( this, scan->el[0][0], frm, status );
- for( i = 1; i < scan->count[0]; i++ ) {
- reg = RegionReader( this, scan->el[0][i], frm, status );
- tmp = (AstRegion *) astCmpRegion( new, reg, AST__AND, "", status );
- reg = astAnnul( reg );
- (void) astAnnul( new );
- new = tmp;
- }
-
-/* Get any fill factor from the element and assign to the returned Region. */
- FillAndLims( this, elem, new, status );
-
-/* Free resources */
- scan = FreeIVOAScan( scan, status );
- }
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
- return new;
-}
-
-static int IsUsable( AstXmlElement *elem, int *status ){
-/*
-* Name:
-* IsUsable
-
-* Purpose:
-* See if an XmlElement could describe an AST object.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "channel.h"
-* int IsUsable( AstXmlElement *elem, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function checks if an instance of an AST class could be
-* created from the supplied XmlElement.
-
-* Parameters:
-* elem
-* A pointer to the XmlElement, or NULL.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If an AST Object could be created from the supplied element, +1 is
-* returned. Otherwise, -1 is returned. Zero is returned if the supplied
-* pointer is NULL.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- const char *class; /* Pointer to element name */
- const char *uri; /* Pointer to namespace URI */
- IVOAReader reader; /* Pointer to reader function */
- int is_ivoa; /* Element belongs to an IVOA namespace? */
- int oldrep; /* Original value of the Reporting flag */
- int result; /* Result value to be returned */
-
-/* Check the global error status, and the supplied pointer. */
- if ( !astOK || !elem ) return 0;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(NULL);
-
-/* Initialise */
- result = -1;
-
-/* See if the element is in a supported IVOA namespace, and has a reader
- function for converting it to an AST object. If so, set the default
- XmlFormat to IVOA, and set the result non-zero. */
- reader = FindIVOAClass( elem, &is_ivoa, status );
- if( is_ivoa ){
- if( reader ) result = 1;
- if( isusable_this ) isusable_this->formatdef = IVOA_FORMAT;
- }
-
-/* If the element is not an IVOA class, only proceed if the URI is not
- defined, or if it the AST URI. */
- uri = astXmlGetURI( elem );
- if( result == -1 && ( !uri || !strcmp( uri, AST__XMLNS ) ) ) {
-
-/* Get the element name. This will be an AST class name if the element
- describes an AST Object. */
- class = astXmlGetName( elem );
-
-/* Attempt to get the loader for a class of this name. If no loader exists an
- error would normally be reported. Therefore we switch off error reporting
- before making this call. After the class we clear any error status and
- switch error reporting back on. If no error occurs whilst getting the
- loader, then the class name must be a valid AST class name and so return
- a non-zero result value. */
- if( astOK ) {
- oldrep = astReporting( 0 );
- astGetLoader( class, status );
- if( astOK ) {
- result = 1;
- } else {
- astClearStatus;
- }
- astReporting( oldrep );
- }
-
-/* If the element is in no namespace, use the AST URI as the default
- namespace for it and its children. */
- if( !uri ) astXmlAddURI( elem, NULL, AST__XMLNS );
-
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstObject *MakeAstFromXml( AstXmlChan *this, AstXmlElement *elem, int *status ) {
-/*
-* Name:
-* MakeAstFromXml
-
-* Purpose:
-* Make an AST Object from an XML element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstObject *MakeAstFromXml( AstXmlChan *this, AstXmlElement *elem, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Object from the supplied XML element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the XML element containing a description of the AST
-* object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Object.
-*/
-
-/* Local Variables: */
- AstLoaderType *loader; /* Pointer to loader for Object */
- AstObject *new; /* Pointer to returned Object */
- AstXmlParent *old_container; /* Element from which items are being read */
- IVOAReader reader; /* Pointer to reader function */
- const char *class; /* Pointer to Object class name string */
- int is_ivoa; /* Element belongs to an IVOA namespace? */
- int i; /* Index of content item */
- int nitem; /* No. of items of content within element */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* First deal with IVOA format. */
-/* ---------------------------- */
- if( astGetXmlFormat( this ) == IVOA_FORMAT ) {
-
-/* Get a pointer to a function which will produce an AST object from
- elements of the class of the supplied element. */
- reader = FindIVOAClass( elem, &is_ivoa, status );
-
-/* If found, invoke the function to create the new AST object. */
- if( is_ivoa && reader ) {
- new = ( *reader )( this, elem, status );
-
-/* IVOA reader functions do not remove used content as they are read
- from the element (unlike AST native readers). Therefore empty the
- element of all content now to indicate that the element contained no
- unrecognised content. This prevents an error being reported. If there
- was in fact any unrecognised content, then an error will already have
- been reported. */
- nitem = astXmlGetNitem( elem );
- for( i = nitem - 1; i >= 0; i-- ) astXmlDelete( astXmlGetItem( elem, i ) );
-
-/* If not found, report an error. This should not happen since the IsUsable
- function should already have checked that the element is usable. */
- } else if( astOK ){
- astError( AST__INTER, "astRead(XmlChan): MakeAstFromIVOA does not "
- "support IVOA class \"%s\" (internal AST programming error).", status,
- astXmlGetName( elem ) );
- }
-
-/* Now deal with other (i.e. NATIVE and QUOTED) format. */
-/* ---------------------------------------------------- */
- } else {
-
-/* Get the AST class name. This is the name of the XML element. */
- class = astXmlGetName( elem );
-
-/* Use the associated class name to locate the loader for that
- class. This function will then be used to build the Object. */
- loader = astGetLoader( class, status );
-
-/* If OK, save the pointer to the current container element, and indicate
- that the supplied element is now to be used as the current container.
- The "current container" is the XML element from which values are being
- read. */
- if( astOK ) {
- old_container = this->container;
- this->container = (AstXmlParent *) elem;
-
-/* The "isa_class" item in the XmlChan structure contains a pointer to
- the name of the class whose loader is currently being invoked. It is set
- by the loader itself as a side effect of calling the astReadClassData
- function. Initialise it to NULL to indicate that astReadClassData has
- not yet been called. */
- this->isa_class = NULL;
-
-/* Invoke the loader, which reads the Object definition from the
- current XML container (i.e. the supplied XML element) and builds the
- Object. Supply NULL/zero values to the loader so that it will substitute
- values appropriate to its own class. */
- new = (*loader)( NULL, (size_t) 0, NULL, NULL, (AstChannel *)
- this, status );
-
-/* Re-instate the original container. */
- this->container = old_container;
- }
- }
-
-/* If an error occurred, clean up by deleting the new Object and
- return a NULL pointer. */
- if ( !astOK ) new = astDelete( new );
-
-/* Return the pointer to the new Object. */
- return new;
-}
-
-static double MakeMJD( AstTimeFrame *frm, double time, int *status ) {
-/*
-* Name:
-* MakeMJD
-
-* Purpose:
-* Create an MJD value from a TimeFrame axis value.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* double MakeMJD( AstTimeFrame *frm, double time, int *status )
-
-* Class Membership:
-* XmlChan member function
-
-* Description:
-* This function converts the supplied time value from the system
-* represented by the supplied TimeFrame into an absolute TBD MJD,
-* in units of days.
-
-* Parameters:
-* frm
-* Pointer to the TimeFrame defining the system in which "time" is
-* supplied.
-* time
-* The time value to convert.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The equivalent MJD value.
-
-*/
-
-/* Local Variables: */
- AstFrameSet *fs;
- AstTimeFrame *cfrm;
- double result;
-
-/* Initialise. */
- result = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Create a copy of the supplied TimeFrame, and set its attributes to
- describe the required MJD system. */
- cfrm = astCopy( frm );
- astSetSystem( cfrm, AST__MJD );
- astSetUnit( cfrm, 0, "d" );
- astSetTimeScale( cfrm, AST__TDB );
- astSetTimeOrigin( cfrm, 0.0 );
-
-/* Find the Mapping from the supplied TimeFrame to this TimeFrame. Use it to
- transform the supplied time value */
- fs = astConvert( frm, cfrm, "" );
- if( fs ) {
- astTran1( fs, 1, &time, 1, &result );
-
-/* Free resources */
- fs = astAnnul( fs );
- }
- cfrm = astAnnul( cfrm );
-
-/* Result */
- return result;
-
-}
-
-static AstXmlElement *MakePos2D( AstXmlChan *this, AstXmlElement *elem, int *status ){
-/*
-* Name:
-* MakePos2D
-
-* Purpose:
-* Create an STC Position2D element from the supplied Position3D.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstXmlElement *MakePos2D( AstXmlChan *this, AstXmlElement *elem, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function returns a pointer to a Position2D element by throwing
-* away the last axis in the supplied Position3D element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the Position3D element.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Position2D element.
-
-
-*/
-
-/* Local Variables: */
- AstXmlElement *el; /* Pointer to subelement */
- AstXmlElement *new; /* Pointer to returned XmlElement */
- IVOAScan *scan; /* Structure holding scan results */
- char **words; /* Array of words read from string */
- char *unit2; /* New Unit string */
- char buff[100]; /* Text buffer */
- const char *names[3]; /* Names of the subelements to be searched for */
- const char *unit; /* Unit string */
- double pos[3]; /* Values read from Position3D */
- int i; /* Loop count */
- int l1; /* Length of word 1 */
- int l2; /* Length of word 2 */
- int max[3]; /* Max allowed occurrences of each name */
- int min[3]; /* Min allowed occurrences of each name */
- int n; /* Number of words read from string */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* If the supplied element is not a Position3D just copy it. */
- if( strcmp( astXmlGetName( elem ), "Position3D" ) ) {
- new = (AstXmlElement *) astXmlCopy( elem );
-
-/* Otherwise, we create a new Position2D and add required content to it. */
- } else {
-
-/* Search the supplied element for the required sub-elements. */
- names[ 0 ] = "Name";
- names[ 1 ] = "Error3";
- names[ 2 ] = "Value3";
- max[ 0 ] = 1;
- max[ 1 ] = 2;
- max[ 2 ] = 1;
- min[ 0 ] = 1;
- min[ 1 ] = 0;
- min[ 2 ] = 0;
- scan = ScanIVOAElement( this, elem, 3, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Create an empty XML element with name "Position2D". */
- new = astXmlAddElement( NULL, "Position2D", NULL );
-
-/* Get the units attribute from the supplied element. These are the units
- of the positional axis values. Copy the first 2 words to the unit
- attribute of the new element. */
- unit = astXmlGetAttributeValue( elem, "unit" );
- if( unit ) {
- words = astChrSplit( unit, &n );
- if( words ) {
- if( n > 2 ) {
- l1 = strlen( words[ 0 ] );
- l2 = strlen( words[ 1 ] );
- unit2 = astMalloc( l1 + l2 + 2 );
- if( unit2 ) {
- strcpy( unit2, words[ 0 ] );
- unit2[ l1 ] = ' ';
- strcpy( unit2 + l1 + 1, words[ 1 ] );
- unit2[ l1 + l2 + 1 ] = 0;
- astXmlAddAttr( new, "unit", unit2, NULL );
- unit2 = astFree( unit2 );
- }
- } else {
- astXmlAddAttr( new, "unit", unit, NULL );
- }
-
- if( words ) {
- for( i = 0; i < n; i++ ) words[ i ] = astFree( words[ i ] );
- words = astFree( words );
- }
- }
- }
-
-/* If this Position3D contains a Name which can be read, obtain it
- and store it in the returned Position2D. */
- if( scan->count[ 0 ] > 0 ) {
- el = astXmlAddElement( new, "Name", NULL );
- astXmlAddCharData( el, 0, astXmlGetValue( scan->el[ 0 ][ 0 ], 0 ) );
- }
-
-/* If this Position3D contains a Value which can be read, obtain it,
- format the first 2 values and store in the returned Position2D. */
- if( scan->count[ 2 ] > 0 ) {
- ElemListD( this, scan->el[ 2 ][ 0 ], 3, pos, status );
- el = astXmlAddElement( new, "Value2", NULL );
- sprintf( buff, "%.*g %.*g", DBL_DIG, pos[0], DBL_DIG, pos[1] );
- astXmlAddCharData( el, 0, buff );
- }
-
-/* If this Position3D contains an Error which can be read, obtain it,
- format the first 2 values and store in the returned Position2D. */
- if( scan->count[ 1 ] > 0 ) {
- ElemListD( this, scan->el[ 1 ][ 0 ], 3, pos, status );
- el = astXmlAddElement( new, "Error2", NULL );
- sprintf( buff, "%.*g %.*g", DBL_DIG, pos[0], DBL_DIG, pos[1] );
- astXmlAddCharData( el, 0, buff );
- }
-
-/* Free resources */
- scan = FreeIVOAScan( scan, status );
- }
- }
-
-/* Return the result.*/
- return new;
-
-}
-
-static AstRegion *NegationReader( AstXmlChan *this, AstXmlElement *elem,
- AstFrame *frm, int *status ){
-/*
-* Name:
-* NegationReader
-
-* Purpose:
-* Make an AST Region from an IVOA Negation region element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstRegion *NegationReader( AstXmlChan *this, AstXmlElement *elem,
-* AstFrame *frm, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Region from the supplied IVOA
-* Negation region element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA Negation region element.
-* frm
-* Pointer to the 2D Frame in which the returned Region should be
-* defined. If the Unit attribute is not set, this function will
-* set it to the value supplied in "unit" before returning.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
- AstRegion *new; /* Pointer to returned Region */
- IVOAScan *scan; /* Structure holding scan results */
- const char *names[1]; /* Names of the subelements to be searched for */
- int max[1]; /* Max allowed occurrences of each name */
- int min[1]; /* Min allowed occurrences of each name */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Search the supplied element for a Region sub-element. */
- names[ 0 ] = "Intersection|Union|Negation|AllSky|Circle|Ellipse|Polygon|"
- "Convex|Box";
- min[ 0 ] = 1;
- max[ 0 ] = 1;
- scan = ScanIVOAElement( this, elem, 1, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Create a Region from the component region element, and negate it. */
- new = RegionReader( this, scan->el[0][0], frm, status );
- astNegate( new );
-
-/* Get any fill factor from the element and assign to the returned Region. */
- FillAndLims( this, elem, new, status );
-
-/* Free resources */
- scan = FreeIVOAScan( scan, status );
- }
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
- return new;
-}
-
-static AstObject *ObsDataLocationReader( AstXmlChan *this,
- AstXmlElement *elem, int *status ) {
-/*
-* Name:
-* ObsDataLocationReader
-
-* Purpose:
-* Make an AST Object from an IVOA ObsDataLocationReader element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstObject *ObsDataLocationReader( AstXmlChan *this,
-* AstXmlElement *elem, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Object from the supplied IVOA
-* ObsDataLocationReader element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA ObsDataLocationReader element.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Object.
-*/
-
-/* Local Variables: */
- AstPointList *obs; /* PointList defining the observatory position */
- AstStcObsDataLocation *stc; /* Pointer to returned Object */
- IVOAScan *scan; /* Structure holding scan results */
- const char *names[2]; /* Names of the subelements to be searched for */
- int max[2]; /* Max allowed occurrences of each name */
- int min[2]; /* Min allowed occurrences of each name */
-
-/* Initialise. */
- stc = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return (AstObject *) stc;
-
-/* Search the supplied element for the required sub-elements. */
- names[ 0 ] = "ObservatoryLocation";
- names[ 1 ] = "ObservationLocation";
- min[ 0 ] = 1;
- min[ 1 ] = 1;
- max[ 0 ] = 1;
- max[ 1 ] = 1;
- scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Read the observation location. */
- stc = (AstStcObsDataLocation *) StcMetadataReader( this, scan->el[ 1 ][ 0 ], status );
-
-/* Read the observatory location, returning a Pointlist describing the
- observatory position (if possible), and modifiying the observation
- Region by (if possible) assigning the observatory location to the
- ObsLon and ObsLat attributes of any SpecFrames in the Region, and the
- ObsLon and ObsLat attributes of any TimeFrames in the Region. */
- obs = ObservatoryLocationReader( this, scan->el[ 0 ][ 0 ], stc, status );
- if( obs ) {
- astStcSetObs( stc, obs );
- obs = astAnnul( obs );
- }
-
-/* Free resources. */
- scan = FreeIVOAScan( scan, status );
- }
-
-/* Return the pointer to the new Object. */
- return (AstObject *) stc;
-}
-
-static AstPointList *ObservatoryLocationReader( AstXmlChan *this,
- AstXmlElement *elem,
- AstStcObsDataLocation *obs, int *status ){
-/*
-* Name:
-* ObservatoryLocationReader
-
-* Purpose:
-* Make an AST PointList from an IVOA ObservatoryLocationReader element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstPointList *ObservatoryLocationReader( AstXmlChan *this,
-* AstXmlElement *elem,
-* AstStcObsDataLocation *obs, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST PointList from the supplied IVOA
-* ObservatoryLocationReader element, and also modifies the supplied
-* StcObsDataLocation so that the ObsLon and ObsLat attributes hold
-* the observatory position (if appropriate).
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA ObservatoryLocation element.
-* obs
-* Pointer to the StcObsDataLocation in which to store the
-* observatory position (if terrestrial).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new PointList.
-
-*/
-
-/* Local Variables: */
- AstFrame *frm; /* Pointer to obsvtory lon/lat Frame */
- AstFrame *obs_frm; /* Pointer to obsvation lon/lat Frame */
- AstFrame *pfrm; /* Pointer to axis primary Frame */
- AstKeyMap *km; /* KeyMap holding AstroCoords info */
- AstObject *new; /* Pointer to returned Region */
- AstObject *o; /* Pointer to retrieved Region */
- AstPointSet *ps; /* Pointer to PointSet holding obs lon/lat */
- AstRegion *err; /* Pointer to error Region */
- AstStc *stc; /* Pointer to Observatory location stc */
- char setting[ 100 ]; /* Attribute setting string */
- const char *dom; /* Domain string */
- double **ptr; /* Pointers to axis values for obs lon/lat */
- double lambda; /* Geodetic longitude radians */
- double phi; /* Geodetic latitude radians */
- double lon; /* Geocentric longitude radians */
- double lat; /* Geocentric latitude radians */
- int i; /* Index of Frame axis */
- int nax; /* Number of Frame axes */
- int paxis; /* Index of primary Frame axis */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Initialise */
- new = NULL;
-
-/* Read the ObservatoryLocation as an StcMetadata element (it will be
- represented by a NullRegion). */
- stc = (AstStc *) StcMetadataReader( this, elem, status );
-
-/* Extract the first AstroCoords KeyMap from the stc. */
- if( astGetStcNCoord( stc ) == 0 ) {
- Report( this, elem, FAILURE, "contains no observatory position", status );
- } else {
- km = astGetStcCoord( stc, 1 );
-
-/* Extract the PointList holding the axis values from the KeyMap. */
- if( !astMapGet0A( km, AST__STCVALUE, &new ) ){
- Report( this, elem, FAILURE, "contains no observatory position", status );
-
-/* Extract any position uncertainty, and store as the uncertainty in the
- value PointList. */
- } else if( astMapGet0A( km, AST__STCERROR, &o ) ){
- err = (AstRegion *) o;
- astSetUnc( new, err );
-
-/* Free resources */
- err = astAnnul( err );
- }
- km = astAnnul( km );
- }
- stc = astAnnul( stc );
-
-/* Check the Region is a PointList. */
- if( !astIsAPointList( new ) && astOK ) {
- astError( AST__INTER, "ObservatoryLocationReader(XmlChan): The "
- "observatory location is described by a %s rather than "
- "a PointList (internal AST programming error).", status,
- astGetClass( new ) );
- }
-
-/* If possible, we use the observatory location to set the value of the
- ObsLon and ObsLat attributes of any SpecFrames, and the ObsLon and
- ObsLat attributes of any TimeFrames, in the supplied ObsDataLocation.
- For this to be possible, the PointList being returned must represent
- either geodetic or geocentric longitude/latitude. If it is geocentric,
- the values need to be converted to geodetic. */
- ps = astRegTransform( new, NULL, 1, NULL, &frm );
- ptr = astGetPoints( ps );
- if( ptr ){
- nax = astGetNaxes( frm );
- lon = AST__BAD;
- lat = AST__BAD;
- lambda = AST__BAD;
- phi = AST__BAD;
- for( i = 0; i < nax; i++ ) {
- astPrimaryFrame( frm, i, &pfrm, &paxis );
- dom = astGetDomain( pfrm );
- if( dom ) {
- if( !strcmp( dom, "GEO_C" ) ){
- if( lon == AST__BAD ) {
- lon = ptr[i][0];
- astSetLabel( pfrm, 0, "Geodetic longitude" );
- } else {
- lat = ptr[i][0];
- astSetLabel( pfrm, 1, "Geodetic latitude" );
- astSetDomain( pfrm, "GEO_D" );
- }
-
- } else if( !strcmp( dom, "GEO_D" ) ){
- if( lambda == AST__BAD ) {
- lambda = ptr[i][0];
- } else {
- phi = ptr[i][0];
- }
- }
- }
- pfrm = astAnnul( pfrm );
- }
-
- if( lon != AST__BAD ) Geod( lat, lon, &phi, &lambda, status );
-
- if( lambda != AST__BAD ) {
- obs_frm = astGetFrame( ((AstRegion *) obs)->frameset, AST__CURRENT );
- nax = astGetNaxes( obs );
- for( i = 0; i < nax; i++ ) {
- astPrimaryFrame( obs_frm, i, &pfrm, &paxis );
- if( astIsASpecFrame( pfrm ) ) {
- sprintf( setting, "ObsLon(%d)=%.*g", i + 1, DBL_DIG, lambda*AST__DR2D );
- astRegSetAttrib( obs, setting, NULL );
- sprintf( setting, "ObsLat(%d)=%.*g", i + 1, DBL_DIG, phi*AST__DR2D );
- astRegSetAttrib( obs, setting, NULL );
- } else if( astIsATimeFrame( pfrm ) ) {
- sprintf( setting, "ObsLon(%d)=%.*g", i + 1, DBL_DIG, lambda*AST__DR2D );
- astRegSetAttrib( obs, setting, NULL );
- sprintf( setting, "ObsLat(%d)=%.*g", i + 1, DBL_DIG, phi*AST__DR2D );
- astRegSetAttrib( obs, setting, NULL );
- }
- pfrm = astAnnul( pfrm );
- }
- obs_frm = astAnnul( obs_frm );
- }
- }
-
-/* Free resources */
- frm = astAnnul( frm );
- ps = astAnnul( ps );
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
- return (AstPointList *) new;
-}
-
-static void OutputText( AstXmlChan *this, const char *text, int mxlen, int *status ) {
-/*
-* Name:
-* OutputText
-
-* Purpose:
-* Write a string to the sink.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "channel.h"
-* void OutputText( AstXmlChan *this, const char *text, int mxlen, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function writes the supplied text to the output sink,
-* splitting it into lines of no more than "mxlen" characters, if
-* required.
-
-* Parameters:
-* this
-* A pointer to the XmlChan.
-* text
-* Pointer to the (potentially long) null terminated string to write
-* out to the sink.
-* mxlen
-* The maximum allowed output line length. If zero, no limit is
-* placed on the output line length and the supplied text is always
-* written out as a single string.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- char *breakat; /* Pointer to terminating character */
- char *c; /* Pointer to start of next chunk */
- char *lastend; /* Pointer to last closing quote */
- char *lastspace; /* Pointer to last whitespace character */
- char *linestart; /* Pointer to start of current line */
- char quote; /* Opening quote character */
- char tt; /* Character temporarily replaced by 0 */
- int len; /* Length of current line */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* If "mxlen" is zero, just output the string as supplied. */
- if( mxlen < 1 ) {
- astPutNextText( this, text );
-
-/* Otherwise, output the string split up into lines */
- } else {
- c = (char *) text - 1;
- quote = 0;
- lastend = NULL;
- lastspace = NULL;
- len = 0;
- linestart = (char *) text;
-
-/* Loop round each character in the text */
- while( *(++c ) ){
-
-/* Note if we are currently inside a quoted string. Remember the quote
- character (" or ') so that we can look out for the corresponding
- closing quote. Note the position of the previous quote end. */
- if( !quote ) {
- if( *c == '\"' || *c == '\'' ) quote = *c;
- } else {
- if( *c == quote ) {
- quote = 0;
- lastend = c;
- }
- }
-
-/* Note the position of hte previous space. */
- if( isspace( *c ) ) lastspace = c;
-
-/* If we have exceeded the maximum allowed line length, split it. If we
- are inside a quote, we split it at the last quote end (if any). If we
- are not in a quote, we split it at the last space, or the last quote
- end (which ever is closest). To cover the case where the end quote is
- first character beyoind the limit, reduce the limit a bit. */
- len++;
- if( len >= mxlen - 2 ) {
- if( !quote || !lastend ) {
- if( lastend && lastspace ){
- breakat = ( lastend > lastspace ) ? lastend + 1: lastspace;
- } else if( lastend ){
- breakat = lastend + 1;
- } else if( lastspace ){
- breakat = lastspace;
- } else {
- breakat = c;
- }
- } else {
- breakat = lastend + 1;
- }
- } else {
- breakat = NULL;
- }
-
-/* If we have a line break, output the current line. */
- if( breakat ) {
-
-/* Terminate the string, first saving the character which is replaced by the
- terminating zero so that it can be re-instated later. */
- tt = *breakat;
- *breakat = 0;
-
-/* Write out the newly terminated chunk. */
- astPutNextText( this, linestart );
-
-/* Move on to ths start of the next chunk, decrement the number of characters
- remaining, and re-instate the character previously over-written by
- zero. */
- c = breakat;
- linestart = c;
- *c = tt;
- len = 0;
- quote = 0;
- }
- }
-
-/* Write out any remaining text (this will be less than "mxlen"
- characters long)*/
- if( linestart && *linestart ) astPutNextText( this, linestart );
- }
-}
-
-static AstRegion *PolygonReader( AstXmlChan *this, AstXmlElement *elem,
- AstFrame *frm, int *status ){
-/*
-* Name:
-* PolygonReader
-
-* Purpose:
-* Make an AST Region from an IVOA Polygon element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstRegion *PolygonReader( AstXmlChan *this, AstXmlElement *elem,
-* AstFrame *frm, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Region from the supplied IVOA
-* Polygon element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA Polygon element.
-* frm
-* Pointer to the 2D Frame in which the returned Region should be
-* defined. If the Unit attribute is not set, this function will
-* set it to the value supplied in "unit" before returning.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
- AstFrame *cfrm;
- AstMapping *map;
- AstRegion *new;
- IVOAScan *scan;
- const char *names[1];
- const char *unit;
- const char *funit;
- double *pos;
- double *x0;
- double *y0;
- double lbnd[2];
- double ubnd[2];
- int axcon;
- int axlon;
- int i;
- int is_box;
- int is_sky;
- int laxcon;
- int max[1];
- int min[1];
- int nv;
- int small[ 4 ];
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Scan the supplied element for the required sub-elements */
- names[ 0 ] = "Vertex";
- min[ 0 ] = 1;
- max[ 0 ] = INT_MAX;
- scan = ScanIVOAElement( this, elem, 1, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* See if the Frame is a SkyFrame, and if so, get the index of the
- longitude axis. */
- is_sky = astIsASkyFrame( frm );
- axlon = is_sky ? astGetLonAxis( (AstSkyFrame *) frm ) : -1;
-
-/* Get the units attribute from the supplied element. These are the units
- of the vertex axis values. */
- unit = astXmlGetAttributeValue( elem, "unit" );
- if( !unit ) {
- Report( this, elem, FAILURE, "contains no unit attribute", status );
- unit = "";
- }
-
-/* Create an array to hold the axis values at the vertices. */
- nv = scan->count[0];
- pos = astMalloc( sizeof( double )*(size_t) (2*nv) );
-
-/* Read each vertex element in turn. Record whether or not the first 4
- vertices have <SmallCircles>. */
- x0 = pos;
- y0 = x0 + nv;
- for( i = 0; i < nv; i++, x0++, y0++ ) {
- small [ i % 4 ] = VertexReader( this, scan->el[0][i], x0, y0, status );
- }
-
-/* Reset the pointers so that they point to the first x and y values. */
- x0 = pos;
- y0 = x0 + nv;
-
-/* Since the SkyFrame class does not have active Units we must handle it
- separately. Convert the axis values from the supplied units (e.g.
- degrees) to radians. */
- if( is_sky ) {
- map = astUnitMapper( unit, "rad", NULL, NULL );
- if( map ) {
- astTran1( map, nv*2, pos, 1, pos );
- map = astAnnul( map );
- } else if( astOK ) {
- Report( this, elem, FAILURE, "contains unusable units", status );
- }
- }
-
-/* If there are 4 vertices we may be able to create an AST Box (not the
- same as an STC Box) instead of a Polygon.*/
- is_box = 0;
- ubnd[0] = x0[ 0 ];
- lbnd[0] = ubnd[0];
- ubnd[1] = y0[ 0 ];
- lbnd[1] = ubnd[1];
-
- if( nv == 4 ) {
-
-/* See if the edge which ends at the 1st vertex has a constant value on
- either axis. Is so, note the index of the axis which is held constant. */
- is_box = 1;
- if( is_sky && small[ 0 ] ) {
- laxcon = 1 - axlon;
-
- } else if( astEQUAL( x0[ 0 ], x0[ 3 ] ) ) {
- laxcon = 0;
-
- } else if( astEQUAL( y0[ 0 ], y0[ 3 ] ) ) {
- laxcon = 1;
-
- } else {
- is_box = 0;
- }
-
-/* If the first edge represents a constant axis value, see if the others
- do too (ensuring that the axes which are held constant alternate). Also
- find the bounds of the box.*/
- if( is_box ) {
- for( i = 1; i < 4; i++ ) {
- if( is_sky && small[ i ] ) {
- axcon = 1 - axlon;
-
- } else if( astEQUAL( x0[ i ], x0[ i - 1 ] ) ) {
- axcon = 0;
-
- } else if( astEQUAL( y0[ i ], y0[ i - 1 ] ) ) {
- axcon = 1;
-
- } else {
- is_box = 0;
- break;
- }
-
- if( axcon != 1 - laxcon ) {
- is_box = 0;
- break;
- }
-
- if( x0[ i ] > ubnd[0] ) {
- ubnd[0] = x0[ i ];
-
- } else if( x0[ i ] < lbnd[0] ) {
- lbnd[0] = x0[ i ];
- }
-
- if( y0[ i ] > ubnd[1] ) {
- ubnd[1] = y0[ i ];
-
- } else if( y0[ i ] < lbnd[1] ) {
- lbnd[1] = y0[ i ];
- }
-
- laxcon = axcon;
- }
- }
- }
-
-/* Since the SkyFrame class does not have active Units we must handle it
- separately. The axis values have already been converted from the supplied
- units (e.g. degrees) to radians. */
- if( is_sky ) {
-
-/* Create the Polygon or Box within the SkyFrame. */
- if( is_box ) {
- new = (AstRegion *) astBox( frm, 1, lbnd, ubnd, NULL, "", status );
- } else {
- new = (AstRegion *) astPolygon( frm, nv, nv, pos, NULL, "", status );
- }
-
-/* Now handles Polygons in Frames other than SkyFrames. */
- } else {
-
-/* Take a copy of the supplied Frame and set its Units to the value
- obtained from the supplied element. */
- cfrm = astCopy( frm );
- astSetUnit( cfrm, 0, unit );
- astSetUnit( cfrm, 1, unit );
-
-/* Create the Polygon or Box within the SkyFrame. */
- if( is_box ) {
- new = (AstRegion *) astBox( cfrm, 1, lbnd, ubnd, NULL, "", status );
- } else {
- new = (AstRegion *) astPolygon( cfrm, nv, nv, pos, NULL, "", status );
- }
-
-/* If the Unit of this Region differs from that of the supplied Frame,
- set it to the Unit of the supplied Frame. This will cause the
- encapsulated limits to be mapped into the new Unit. If the supplied
- Frame had no set Unit, set it to the units obtained from the supplied
- element. */
- for( i = 0; i < 2; i++ ) {
- if( astTestUnit( frm, i ) ) {
- funit = astGetUnit( frm, i );
- if( strcmp( funit, unit ) ) astSetUnit( new, i, funit );
- } else {
- astSetUnit( frm, i, unit );
- }
- }
-
-/* Free resources */
- cfrm = astAnnul( cfrm );
- }
-
-/* Get any fill factor and lo/hi_include attributes from the element and
- assign to the returned Region. */
- FillAndLims( this, elem, new, status );
-
-/* Free resources */
- pos = astFree( pos );
- scan = FreeIVOAScan( scan, status );
- }
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
- return new;
-}
-
-static double PosAngleReader( AstXmlChan *this, AstXmlElement *elem, int *status ){
-/*
-* Name:
-* PosAngleReader
-
-* Purpose:
-* Read an AST position angle value from an IVOA PosAngle element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* double PosAngleReader( AstXmlChan *this, AstXmlElement *elem, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function reads the supplied PosANgle element and returns a value
-* representing a position angle in the AST convention (radians from
-* +ve second axis to +ve first axis).
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA Ellipse element.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The position angle.
-
-*/
-
-/* Local Variables: */
- char buff[ 200 ]; /* Message buffer */
- const char *paunit; /* Position angle unit string */
- const char *ref; /* Reference axis string */
- double result; /* Position angle value */
-
-/* Check the global error status. */
- if ( !astOK ) return 0.0;
-
-/* Get the numerical position angle stored in the supplied PosAngle
- element. */
- result = ElemValueD( this, elem, 0.0, status );
-
-/* Get the units attribute from the supplied element. These are the units
- of the above value. Default is degrees. */
- paunit = astXmlGetAttributeValue( elem, "unit" );
-
-/* Convert the position angle to radians. */
- if( !paunit || !strcmp( paunit, "deg" ) ) {
- result *= AST__DD2R;
-
- } else if( !strcmp( paunit, "h" ) ) {
- result *= 15*AST__DD2R;
-
- } else if( !strcmp( paunit, "arcmin" ) ) {
- result *= AST__DD2R/60.0;
-
- } else if( !strcmp( paunit, "arcsec" ) ) {
- result *= AST__DD2R/3600.0;
-
- } else {
- sprintf( buff, "contains unusable angle units \"%s\"", paunit );
- Report( this, elem, FAILURE, buff, status );
- }
-
-/* Get the reference attribute from the supplied element. This indicates
- the sense and origin of the stored angle value. Convert the result
- to the AST convention, which is the equivalent of "Y" (which is the same
- as "North"). "X" means "from X to Y", "Y" means "from Y to X". Default
- is "X". */
- ref = astXmlGetAttributeValue( elem, "reference" );
- if( !ref || !Ustrcmp( ref, "X", status ) ) {
- result = AST__DPIBY2 - result;
-
- } else if( Ustrcmp( ref, "Y", status ) && Ustrcmp( ref, "North", status ) ) {
- sprintf( buff, "contains unusable reference attribute \"%s\" "
- "(will assume \"Y\" instead)", ref );
- Report( this, elem, WARNING, buff, status );
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstRegion *Position2DReader( AstXmlChan *this, AstXmlElement *elem,
- AstFrame *frm, double *pos,
- AstKeyMap **anc, int *status ){
-/*
-* Name:
-* Position2DReader
-
-* Purpose:
-* Modify a Frame to take account of an STC <Position2D> element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstRegion *Position2DReader( AstXmlChan *this, AstXmlElement *elem,
-* AstFrame *frm, double *pos, int axis,
-* AstKeyMap **anc, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function reads the supplied STC <Position2D> element, and uses it,
-* if possible, to create the uncertainty associated with the spatial
-* axis in the supplied Frame.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA Position2D element.
-* frm
-* Pointer to the 2D spatial Frame.
-* pos
-* Pointer to an array in which to return the spatial axis values
-* represented by the supplied Position2D element. This array is
-* returned filled with AST__BAD If the supplied Position2D element
-* does not contain any axis values.
-* anc
-* Address of a location at which to put a pointer to a newly
-* created KeyMap. This KeyMap will contain ancillary information
-* from the Position2D. The keys identify the item of ancillary
-* information (Name, Value, Error, Resolution, Size, Pixel Size).
-* The value associated with the Name key is string containing
-* the Name item from the Position2D. The value
-* associated with each of the other keys is a pointer to a 2D Region
-* within the supplied Frame, corresponding to the value, error,
-* resolution, etc. Keys will not be present in the returned KeyMap
-* if the corresponding item of ancillary information is not present
-* in the Position2D. A NULL pointer is returned if there is no
-* ancillary information at all.
-* status
-* Pointer to the inherited status variable.
-
-* Returned:
-* The uncertainty Region, or NULL if the supplied Position2D element
-* does not specify an uncertainty.
-
-*/
-
-/* Local Variables: */
- AstMapping *map1; /* Mapping from first axis units to radians */
- AstMapping *map2; /* Mapping from second axis units to radians */
- AstPointSet *pset; /* Pointset holding Position2D axis values */
- AstRegion *r; /* Region to store in ancillary KeyMap */
- AstRegion *result; /* Returned uncertainty Region */
- IVOAScan *scan; /* Structure holding scan results */
- char **words; /* Array of words extracted from string */
- const char *name; /* Pointer to XML element name */
- const char *names[6]; /* Names of the subelements to be searched for */
- const char *unit1; /* Pointer to axis 1 unit attribute string */
- const char *unit2; /* Pointer to axis 2 unit attribute string */
- const char *unit; /* Pointer to Position2D's unit attribute string */
- double **ptr; /* Arrays holding Position2D axis values */
- double cen[ 2 ]; /* Centre values */
- double hw[ 2 ]; /* Half widths values */
- double pa; /* Error position angle */
- int i; /* Loop count */
- int max[6]; /* Max allowed occurrences of each name */
- int min[6]; /* Min allowed occurrences of each name */
- int nword; /* Number of words extracted from string */
-
-/* Initialise */
- result = NULL;
- pos[ 0 ] = AST__BAD;
- pos[ 1 ] = AST__BAD;
- *anc = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Search the supplied element for the required sub-elements. */
- names[ 0 ] = "Name";
- names[ 1 ] = "Error2|Error2PA";
- names[ 2 ] = "Value2";
- names[ 3 ] = "Resolution2|Resolution2PA";
- names[ 4 ] = "Size2|Size2PA";
- names[ 5 ] = "PixSize2|PixSize2PA";
- max[ 0 ] = 1;
- max[ 1 ] = 2;
- max[ 2 ] = 1;
- max[ 3 ] = 2;
- max[ 4 ] = 2;
- max[ 5 ] = 2;
- min[ 0 ] = 1;
- min[ 1 ] = 0;
- min[ 2 ] = 0;
- min[ 3 ] = 0;
- min[ 4 ] = 0;
- min[ 5 ] = 0;
- scan = ScanIVOAElement( this, elem, 6, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Create a KeyMap to return holding ancilary info, and put the Name into
- it. */
- *anc = astKeyMap( "", status );
- if( scan->count[0] > 0 ) astMapPut0C( *anc, AST__STCNAME,
- astXmlGetValue( scan->el[0][0], 0 ), NULL );
-
-/* Get the units attribute from the supplied element. These are the units
- of the positional axis values. Split into units for each of the two
- axes. */
- unit1 = "";
- unit2 = "";
- words = NULL;
- unit = astXmlGetAttributeValue( elem, "unit" );
-
- if( !unit ) {
- Report( this, elem, FAILURE, "contains no unit attribute", status );
-
- } else {
- words = astChrSplit( unit, &nword );
- if( words ) {
- unit1 = words[ 0 ];
- unit2 = nword > 1 ? words[ 1 ] : words[ 0 ];
- }
- }
-
-/* Since the SkyFrame class does not have active Units we must convert the
- axis values from the supplied units (e.g. degrees) to radians. Allow
- for different units on the two axes. */
- map1 = astUnitMapper( unit1, "rad", NULL, NULL );
- if( !map1 ) Report( this, elem, FAILURE, "contains unusable units for axis 1", status );
-
- if( unit1 && unit2 && strcmp( unit1, unit2 ) ) {
- map2 = astUnitMapper( unit2, "rad", NULL, NULL );
- if( !map2 ) Report( this, elem, FAILURE, "contains unusable units for axis 2", status );
- } else {
- map2 = astClone( map1 );
- }
-
-/* If this Position2D contains a Value which can be read, obtain it. Otherwise,
- issue a warning. */
- if( scan->count[ 2 ] > 0 ) {
- ElemListD( this, scan->el[ 2 ][ 0 ], 2, pos, status );
-
-/* Convert to radians. */
- if( map1 == map2 ) {
- astTran1( map1, 2, pos, 1, pos );
- } else {
- astTran1( map1, 1, pos, 1, pos );
- astTran1( map2, 1, pos + 1, 1, pos + 1 );
- }
-
-/* If this Position2D contains a value which cannot be used, issue a warning. */
- if( pos[ 1 ] == AST__BAD ) {
- Report( this, elem, WARNING, "contains an unreadable <Value>", status );
- }
-
-/* Create a PointList from it and store in the returned ancillary KeyMap. */
- pset = astPointSet( 1, 2, "", status );
- ptr = astGetPoints( pset );
- if( astOK ) {
- ptr[ 0 ][ 0 ] = pos[ 0 ];
- ptr[ 1 ][ 0 ] = pos[ 1 ];
- r = (AstRegion *) astPointList( frm, pset, NULL, "", status );
- astMapPut0A( *anc, AST__STCVALUE, r, NULL );
- r = astAnnul( r );
- }
- pset = astAnnul( pset );
- }
-
-/* Does this Position2D contain any Error? */
- if( scan->count[ 1 ] > 0 && map1 ) {
-
-/* Issue a warning if more than 1 Error value was found. */
- if( scan->count[ 1 ] > 1 ) {
- Report( this, elem, WARNING, "contains more than one <Error>"
- " element. AST can only use the first", status );
- }
-
-/* If the error has no position angle, just read it as a list of double.
- Otherwise, read the Error2PA structure. */
- name = astXmlGetName( scan->el[ 1 ][ 0 ] );
- if( name ) {
- if( !strcmp( name, "Error2" ) ) {
- ElemListD( this, scan->el[ 1 ][ 0 ], 2, hw, status );
- pa = AST__BAD;
- } else {
- pa = Error2PAReader( this, scan->el[ 1 ][ 0 ], hw, status );
- }
-
-/* Convert to radians, and halve to get the half-width. */
- if( map1 == map2 ) {
- astTran1( map1, 2, hw, 1, hw );
- } else {
- astTran1( map1, 1, hw, 1, hw );
- astTran1( map2, 1, hw + 1, 1, hw + 1 );
- }
-
- if( hw[ 0 ] != AST__BAD ) hw[ 0 ] *= 0.5;
- if( hw[ 1 ] != AST__BAD ) hw[ 1 ] *= 0.5;
-
-/* Create an Ellipse or Box to describe the error */
- cen[ 0 ] = 0.0;
- cen[ 1 ] = 0.0;
- if( pa != AST__BAD ) {
- result = (AstRegion *) astEllipse( frm, 1, cen, hw, &pa,
- NULL, "", status );
- } else {
- result = (AstRegion *) astBox( frm, 0, cen, hw, NULL, "", status );
- }
-
-/* Store in the returned ancillary KeyMap. */
- astMapPut0A( *anc, AST__STCERROR, result, NULL );
- }
- }
-
-/* Does this Position2D contain any Resolution? */
- if( scan->count[ 3 ] > 0 && map1 ) {
-
-/* Issue a warning if more than 1 Resolution value was found. */
- if( scan->count[ 3 ] > 1 ) {
- Report( this, elem, WARNING, "contains more than one <Resolution>"
- " element. AST can only use the first", status );
- }
-
-/* If the resolution has no position angle, just read it as a list of double.
- Otherwise, read the Resolution2PA structure (which is exactly the same
- as an Error2PA structure). */
- name = astXmlGetName( scan->el[ 3 ][ 0 ] );
- if( name ) {
- if( !strcmp( name, "Resolution2" ) ) {
- ElemListD( this, scan->el[ 3 ][ 0 ], 2, hw, status );
- pa = AST__BAD;
- } else {
- pa = Error2PAReader( this, scan->el[ 3 ][ 0 ], hw, status );
- }
-
-/* Convert to radians, and halve to get the half-width. */
- if( map1 == map2 ) {
- astTran1( map1, 2, hw, 1, hw );
- } else {
- astTran1( map1, 1, hw, 1, hw );
- astTran1( map2, 1, hw + 1, 1, hw + 1 );
- }
-
- if( hw[ 0 ] != AST__BAD ) hw[ 0 ] *= 0.5;
- if( hw[ 1 ] != AST__BAD ) hw[ 1 ] *= 0.5;
-
-/* Create an Ellipse or Box to describe the resolution */
- cen[ 0 ] = 0.0;
- cen[ 1 ] = 0.0;
- if( pa != AST__BAD ) {
- r = (AstRegion *) astEllipse( frm, 1, cen, hw, &pa,
- NULL, "", status );
- } else {
- r = (AstRegion *) astBox( frm, 0, cen, hw, NULL, "", status );
- }
-
-/* Store in the returned ancillary KeyMap. */
- astMapPut0A( *anc, AST__STCRES, r, NULL );
- r = astAnnul( r );
- }
- }
-
-/* Does this Position2D contain any Size? */
- if( scan->count[ 4 ] > 0 && map1 ) {
-
-/* Issue a warning if more than 1 Size value was found. */
- if( scan->count[ 4 ] > 1 ) {
- Report( this, elem, WARNING, "contains more than one <Size>"
- " element. AST can only use the first", status );
- }
-
-/* If the size has no position angle, just read it as a list of double.
- Otherwise, read the Size2PA structure (which is exactly the same
- as an Error2PA structure). */
- name = astXmlGetName( scan->el[ 4 ][ 0 ] );
- if( name ) {
- if( !strcmp( name, "Size2" ) ) {
- ElemListD( this, scan->el[ 4 ][ 0 ], 2, hw, status );
- pa = AST__BAD;
- } else {
- pa = Error2PAReader( this, scan->el[ 4 ][ 0 ], hw, status );
- }
-
-/* Convert to radians, and halve to get the half-width. */
- if( map1 == map2 ) {
- astTran1( map1, 2, hw, 1, hw );
- } else {
- astTran1( map1, 1, hw, 1, hw );
- astTran1( map2, 1, hw + 1, 1, hw + 1 );
- }
-
- if( hw[ 0 ] != AST__BAD ) hw[ 0 ] *= 0.5;
- if( hw[ 1 ] != AST__BAD ) hw[ 1 ] *= 0.5;
-
-/* Create an Ellipse or Box to describe the size */
- cen[ 0 ] = 0.0;
- cen[ 1 ] = 0.0;
- if( pa != AST__BAD ) {
- r = (AstRegion *) astEllipse( frm, 1, cen, hw, &pa,
- NULL, "", status );
- } else {
- r = (AstRegion *) astBox( frm, 0, cen, hw, NULL, "", status );
- }
-
-/* Store in the returned ancillary KeyMap. */
- astMapPut0A( *anc, AST__STCSIZE, r, NULL );
- r = astAnnul( r );
- }
- }
-
-/* Does this Position2D contain any PixSize? */
- if( scan->count[ 5 ] > 0 && map1 ) {
-
-/* Issue a warning if more than 1 PixSize value was found. */
- if( scan->count[ 5 ] > 1 ) {
- Report( this, elem, WARNING, "contains more than one <PixSize>"
- " element. AST can only use the first", status );
- }
-
-/* If the pixsize has no position angle, just read it as a list of double.
- Otherwise, read the PixSize2PA structure (which is exactly the same
- as an Error2PA structure). */
- name = astXmlGetName( scan->el[ 5 ][ 0 ] );
- if( name ) {
- if( !strcmp( name, "PixSize2" ) ) {
- ElemListD( this, scan->el[ 5 ][ 0 ], 2, hw, status );
- pa = AST__BAD;
- } else {
- pa = Error2PAReader( this, scan->el[ 5 ][ 0 ], hw, status );
- }
-
-/* Convert to radians, and halve to get the half-width. */
- if( map1 == map2 ) {
- astTran1( map1, 2, hw, 1, hw );
- } else {
- astTran1( map1, 1, hw, 1, hw );
- astTran1( map2, 1, hw + 1, 1, hw + 1 );
- }
-
- if( hw[ 0 ] != AST__BAD ) hw[ 0 ] *= 0.5;
- if( hw[ 1 ] != AST__BAD ) hw[ 1 ] *= 0.5;
-
-/* Create an Ellipse or Box to describe the pixsize */
- cen[ 0 ] = 0.0;
- cen[ 1 ] = 0.0;
- if( pa != AST__BAD ) {
- r = (AstRegion *) astEllipse( frm, 1, cen, hw, &pa,
- NULL, "", status );
- } else {
- r = (AstRegion *) astBox( frm, 0, cen, hw, NULL, "", status );
- }
-
-/* Store in the returned ancillary KeyMap. */
- astMapPut0A( *anc, AST__STCPIXSZ, r, NULL );
- r = astAnnul( r );
- }
- }
-
-/* Free resources */
- if( map1 ) map1 = astAnnul( map1 );
- if( map2 ) map2 = astAnnul( map2 );
- scan = FreeIVOAScan( scan, status );
- if( words ) {
- for( i = 0; i < nword; i++ ) words[ i ] = astFree( words[ i ] );
- words = astFree( words );
- }
-
- }
-
-/* Return NULL if an error occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result */
- return result;
-
-}
-
-static AstRegion *PositionIntervalReader( AstXmlChan *this, AstXmlElement *elem,
- AstFrame *frm, int *status ){
-/*
-* Name:
-* PositionIntervalReader
-
-* Purpose:
-* Make an AST Region from an IVOA PositionInterval element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstRegion *PositionIntervalReader( AstXmlChan *this, AstXmlElement *elem,
-* AstFrame *frm, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Region from the supplied IVOA
-* PositionInterval element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA PositionInterval element.
-* frm
-* Pointer to the Frame in which the returned Region should be
-* defined. If the Unit or System attribute is not set, this
-* function will decide on the values to be used, and set these
-* values in the supplied Frame before returning.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
- AstRegion *new; /* Pointer to returned Region */
- IVOAScan *scan; /* Structure holding scan results */
- const char *names[1]; /* Names of the subelements to be searched for */
- const char *unit; /* Unit string from supplied element */
- int max[1]; /* Max allowed occurrences of each name */
- int min[1]; /* Min allowed occurrences of each name */
- int ndim; /* Number of axes in supplied Frame */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Search the supplied element for the required sub-element. */
- ndim = astGetNaxes( frm );
- if( ndim == 1 ) {
- names[ 0 ] = "CoordScalarInterval";
- } else if( ndim == 2 ) {
- names[ 0 ] = "Coord2VecInterval";
- } else if( ndim == 3 ) {
- names[ 0 ] = "Coord3VecInterval";
- } else if( astOK ) {
- astError( AST__INTER, "PositionIntervalReader(XmlChan): Supplied "
- "Frame has more than 3 axes (internal AST programming error )." , status);
- }
- min[ 0 ] = 1;
- max[ 0 ] = 1;
- scan = ScanIVOAElement( this, elem, 1, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Get the units attribute from the supplied element. */
- unit = astXmlGetAttributeValue( elem, "unit" );
- if( !unit ) {
- Report( this, elem, FAILURE, "contains no unit attribute", status );
- unit = "";
- }
-
-/* Read 1-d intervals */
- if( ndim == 1 ) {
- new = CoordScalarIntervalReader( this, scan->el[0][0], unit, frm, status );
-
-/* Read 2-d intervals */
- } else if( ndim == 2 ) {
- new = Coord2VecIntervalReader( this, scan->el[0][0], unit, frm, status );
-
-/* Read 3-d intervals */
- } else if( ndim == 3 ) {
- new = Coord3VecIntervalReader( this, scan->el[0][0], unit, frm, status );
-
-/* Report error for other dimensionalities */
- } else if( astOK ) {
- astError( AST__INTER, "PositionIntervalReader(XmlChan): Supplied "
- "Frame has more than 3 axes (internal AST programming error )." , status);
- }
-
-/* Free resources */
- scan = FreeIVOAScan( scan, status );
- }
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
- return new;
-}
-
-static AstObject *Read( AstChannel *this_channel, int *status ) {
-/*
-* Name:
-* Read
-
-* Purpose:
-* Read an Object from a Channel.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstObject *Read( AstChannel *this_channel, int *status )
-
-* Class Membership:
-* XmlChan member function (over-rides the astRead method
-* inherited from the Channel class).
-
-* Description:
-* This function reads an Object from an XmlChan.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Object.
-*/
-
-/* Local Variables: */
- AstObject *new; /* Pointer to returned Object */
- AstXmlChan *this; /* Pointer to the XmlChan structure */
- AstXmlElement *elem; /* XML element holding AST Object */
- int def_fmt; /* Original default format */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Obtain a pointer to the XmlChan structure. */
- this = (AstXmlChan *) this_channel;
-
-/* Save the current default format, and then reset it to NATIVE */
- def_fmt = this->formatdef;
- this->formatdef = NATIVE_FORMAT;
-
-/* First we construct an in-memory XML representation of the data source,
- by reading text up to the end of the first element encountered from
- which an AST Object could be created. If the Skip attribute is zero, then
- an error is reported if there is any text prior to the start of the first
- usable element. If Skip is non-zero any initial text prior to the start
- of the first usable element is ignored. */
- elem = ReadXmlText( this, status );
-
-/* Check a usable element was found. */
- if( elem ) {
-
-/* The "current container element" is the XML element from which items
- are currently being read. Indicate that we are currently not reading
- any element (not used for IVOA formats). */
- this->container = NULL;
-
-/* Next we create a new AST Object from this in-memory XML representation
- of the source. */
- new = MakeAstFromXml( this, elem, status );
-
-/* Remove the element. This will cause an error to be reported if
- the element contains any items which have not been used. */
- elem = Remove( this, elem, status );
- }
-
-/* If an error has occurred, annul the document. */
- if( !astOK ) this->readcontext = astXmlAnnul( this->readcontext );
-
-/* If an error occurred, clean up by deleting the new Object and
- return a NULL pointer, and re-instate original default format. */
- if ( !astOK ) {
- new = astDelete( new );
- this->formatdef = def_fmt;
- }
-
-/* Return the pointer to the new Object. */
- return new;
-}
-
-static void ReadClassData( AstChannel *this_channel, const char *class, int *status ) {
-/*
-* Name:
-* ReadClassData
-
-* Purpose:
-* Read values from a data source for a class loader.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* void ReadClassData( AstChannel *this, const char *class, int *status )
-
-* Class Membership:
-* XmlChan member function (over-rides the astReadClassData method
-* inherited from the Channel class).
-
-* Description:
-* This function reads the data for a class from the data source
-* associated with a Channel, so as to provide values for
-* initialising the instance variables of that class as part of
-* building a complete Object. This function should be invoked by
-* the loader for each class immediately before it attempts to read
-* these values.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* class
-* A pointer to a constant null-terminated string containing the
-* name of the class whose loader is requesting the data (note
-* this is not usually the same as the class name of the Object
-* being built). This value allows the class structure of the
-* input data to be validated.
-*-
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstXmlChan *this; /* Pointer to the XmlChan structure */
- AstXmlContentItem *item; /* Pointer to next item of content */
- const char *definedby; /* Class defining current content items */
- int nitem; /* Number of items in container */
- int i; /* Loop counter */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the XmlChan structure. */
- this = (AstXmlChan *) this_channel;
-
-/* Check we have a container, and then store the name of the class being
- loaded. */
- if( !this->container ){
- astError( AST__INTER, "astRead(XmlChan): Invalid attempt to read "
- "%s data - there is currently no container element "
- "(internal AST programming error).", status, class );
-
- } else {
- this->isa_class = class;
-
-/* Go through all the content elements within the current container and
- give them an extra attribute named "definedby" the value of which is
- the name of the class which defines the associated AST attribute or
- object. This is determined by the the "isa" elements - an element is
- "definedby" the class noted in the next following "isa" element, or by
- the class being loaded if there is no following "isa" element. */
-
-/* Find the first "isa" element and get the value of its "class" attribute.
- If none is found the name of the class being loaded is used. */
- definedby = FindNextIsA( (AstXmlElement *) this->container, 0, status );
-
-/* Loop round all elements within the container. */
- nitem = astXmlGetNitem( this->container );
- for( i = 0; astOK && i < nitem; i++ ) {
- item = astXmlGetItem( this->container, i );
- if( astXmlCheckType( item, AST__XMLELEM ) ) {
-
-/* If this is an "ISA" element, then we have ended the scope of the
- current "isa" class. All subsequent items will be defined by the class
- mentioned in the next following "ISA" element. Find the next ISA
- element and get its class. */
- if( astOK && !strcmp( astXmlGetName( item ), ISA ) ) {
- definedby = FindNextIsA( (AstXmlElement *) this->container, i + 1, status );
-
-/* For other element types, add a "definedby" attribute holding the name
- of the class defined by the current ISA element. */
- } else {
- astXmlAddAttr( item, DEFINEDBY, definedby, NULL );
- }
- }
- }
- }
-}
-
-static double ReadDouble( AstChannel *this_channel, const char *name, double def, int *status ) {
-/*
-* Name:
-* ReadDouble
-
-* Purpose:
-* Read a double value as part of loading a class.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* double ReadDouble( AstChannel *this, const char *name, double def, int *status )
-
-* Class Membership:
-* XmlChan member function (over-rides the astReadDouble method
-* inherited from the Channel class).
-
-* Description:
-* This function searches the current container element of an XmlChan to
-* identify a double value with a specified name. If such a value
-* is found, it is returned, otherwise a default value is returned
-* instead.
-*
-* This function should only be invoked from within the loader
-* function associated with a class, in order to return a double
-* value to be assigned to an instance variable. It must be
-* preceded by a call to the astReadClassData function.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* name
-* Pointer to a constant null-terminated character string
-* containing the name of the required value. This must be in
-* lower case with no surrounding white space. Note that names
-* longer than 6 characters will not match any value.
-* def
-* If no suitable value can be found (e.g. it is absent from the
-* data stream being read), then this value will be returned
-* instead.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The required value, or the default if the value was not found.
-
-* Notes:
-* - A value of 0.0 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstXmlChan *this; /* Pointer to the XmlChan structure */
- AstXmlElement *element; /* Pointer to element holding required value */
- const char *value; /* Pointer to attribute value */
- double result; /* Value to be returned */
- int nc; /* Number of characters read by astSscanf */
-
-/* Initialise. */
- result = 0.0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the XmlChan structure. */
- this = (AstXmlChan *) this_channel;
-
-/* Search the current container element for an ATTR element
- describing an AST attribute of the specified name. This call ignores
- ATTR elements which represent default values. No error is
- reported if an ATTR element with the given name cannot be
- found. */
- element = FindAttribute( this, name, status );
-
-/* If an element was found, attempt to decode the string to give a double
- value, checking that the entire string is read. If this fails, then the
- wrong name has probably been given, or the input data are corrupt,
- so report an error. */
- if( element ) {
- value = astXmlGetAttributeValue( element, VALUE );
- if( value ) {
- nc = 0;
- if ( !( ( 1 == astSscanf( value, " %lf %n", &result, &nc ) )
- && ( nc >= (int) strlen( value ) ) ) ) {
- astError( AST__BADIN, "astRead(XmlChan): The value \"%s = %s\" "
- "cannot be read as a double precision floating point "
- "number.", status, name, value );
-
-/* If the value was succesfully read, remove the ATTR element
- from the container. */
- } else {
- element = Remove( this, element, status );
- }
-
-/* Report an error if the attribute does not have a value. */
- } else {
- astError( AST__BADIN, "astRead(XmlChan): No value for attribute "
- "\"%s\" within element \"%s\".", status, name,
- GetTag( (AstXmlObject *) element, 1, status ) );
- }
-
-/* If no suitable element was found, then use the default value instead. */
- } else {
- result = def;
- }
-
-/* Return the result. */
- return result;
-}
-
-static int ReadInt( AstChannel *this_channel, const char *name, int def, int *status ) {
-/*
-* Name:
-* ReadInt
-
-* Purpose:
-* Read a int value as part of loading a class.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* int ReadInt( AstChannel *this, const char *name, int def )
-
-* Class Membership:
-* XmlChan member function (over-rides the astReadInt method
-* inherited from the Channel class).
-
-* Description:
-* This function searches the current container element of an XmlChan to
-* identify a int value with a specified name. If such a value
-* is found, it is returned, otherwise a default value is returned
-* instead.
-*
-* This function should only be invoked from within the loader
-* function associated with a class, in order to return a int
-* value to be assigned to an instance variable. It must be
-* preceded by a call to the astReadClassData function.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* name
-* Pointer to a constant null-terminated character string
-* containing the name of the required value. This must be in
-* lower case with no surrounding white space. Note that names
-* longer than 6 characters will not match any value.
-* def
-* If no suitable value can be found (e.g. it is absent from the
-* data stream being read), then this value will be returned
-* instead.
-
-* Returned Value:
-* The required value, or the default if the value was not found.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstXmlChan *this; /* Pointer to the XmlChan structure */
- AstXmlElement *element; /* Pointer to element holding required value */
- const char *value; /* Pointer to attribute value */
- int result; /* Value to be returned */
- int nc; /* Number of characters read by astSscanf */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the XmlChan structure. */
- this = (AstXmlChan *) this_channel;
-
-/* Search the current container element for an ATTR element
- describing an AST attribute of the specified name. This call ignores
- ATTR elements which represent default values. No error is
- reported if an ATTR element with the given name cannot be
- found. */
- element = FindAttribute( this, name, status );
-
-/* If an element was found, attempt to decode the string to give a int
- value, checking that the entire string is read. If this fails, then the
- wrong name has probably been given, or the input data are corrupt,
- so report an error. */
- if( element ) {
- value = astXmlGetAttributeValue( element, VALUE );
- if( value ) {
- nc = 0;
- if ( !( ( 1 == astSscanf( value, " %d %n", &result, &nc ) )
- && ( nc >= (int) strlen( value ) ) ) ) {
- astError( AST__BADIN,
- "astRead(XmlChan): The value \"%s = %s\" cannot "
- "be read as an integer.", status, name, value );
-
-/* If the value was succesfully read, remove the ATTR element
- from the container. */
- } else {
- element = Remove( this, element, status );
- }
-
-/* Report an error if the attribute does not have a value. */
- } else {
- astError( AST__BADIN, "astRead(XmlChan): No value for attribute "
- "\"%s\" within element \"%s\".", status, name,
- GetTag( (AstXmlObject *) element, 1, status ) );
- }
-
-/* If no suitable element was found, then use the default value instead. */
- } else {
- result = def;
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstObject *ReadObject( AstChannel *this_channel, const char *name,
- AstObject *def, int *status ) {
-/*
-* Name:
-* ReadObject
-
-* Purpose:
-* Read a (sub)Object as part of loading a class.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* char *ReadObject( AstChannel *this, const char *name, AstObject *def )
-
-* Class Membership:
-* XmlChan member function (over-rides the astReadObject method
-* inherited from the Channel class).
-
-* Description:
-* This function searches the current container element of an XmlChan to
-* identify an Object with a specified name. If such an Object
-* is found, a pointer to it is returned, otherwise a default pointer
-* is returned instead.
-*
-* This function should only be invoked from within the loader
-* function associated with a class, in order to return a int
-* value to be assigned to an instance variable. It must be
-* preceded by a call to the astReadClassData function.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* name
-* Pointer to a constant null-terminated character string
-* containing the name of the required value. This must be in
-* lower case with no surrounding white space. Note that names
-* longer than 6 characters will not match any value.
-* def
-* If no suitable value can be found (e.g. it is absent from the
-* data stream being read), then this value will be returned
-* instead.
-
-* Returned Value:
-* A pointer to the Object, or a clone of the default pointer if
-* the Object was not found.
-
-* Notes:
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstXmlChan *this; /* Pointer to the XmlChan structure */
- AstXmlElement *element; /* Pointer to element holding required value */
- AstObject *result; /* Value to be returned */
- const char *isa_class; /* Class currently being loaded */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the XmlChan structure. */
- this = (AstXmlChan *) this_channel;
-
-/* Search the current container element for an element with a name which
- is not ATTR and with the specified LABEL. This call ignores
- elements which represent default values. No error is reported if an
- element with the given label cannot be found. */
- element = FindObject( this, name, status );
-
-/* If an element was found, make an AST object from it. First remember
- the class currently being loaded so that it can be re-instated. */
- if( element ) {
- isa_class = this->isa_class;
- result = MakeAstFromXml( this, element, status );
- this->isa_class = isa_class;
-
-/* Remove the element from the container. */
- element = Remove( this, element, status );
-
-/* If no suitable Value structure was found, clone the default
- pointer, if given. */
- } else if ( def ) {
- result = astClone( def );
- }
-
-/* Return the result. */
- return result;
-}
-
-static char *ReadString( AstChannel *this_channel, const char *name, const char *def, int *status ) {
-/*
-* Name:
-* ReadString
-
-* Purpose:
-* Read a string value as part of loading a class.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* char *ReadString( AstChannel *this, const char *name, const char *def )
-
-* Class Membership:
-* XmlChan member function (over-rides the astReadString method
-* inherited from the Channel class).
-
-* Description:
-* This function searches the current container element of an XmlChan to
-* identify a string value with a specified name. If such a value
-* is found, it is returned, otherwise a default value is returned
-* instead.
-*
-* This function should only be invoked from within the loader
-* function associated with a class, in order to return a int
-* value to be assigned to an instance variable. It must be
-* preceded by a call to the astReadClassData function.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* name
-* Pointer to a constant null-terminated character string
-* containing the name of the required value. This must be in
-* lower case with no surrounding white space. Note that names
-* longer than 6 characters will not match any value.
-* def
-* If no suitable value can be found (e.g. it is absent from the
-* data stream being read), then this value will be returned
-* instead.
-
-* Returned Value:
-* A pointer to a dynamically allocated null-terminated string
-* containing the value required, or to a copy of the default
-* string if the value was not found (or NULL if the "def" pointer
-* was NULL).
-
-* Notes:
-* - It is the caller's responsibility to arrange for the memory
-* holding the returned string to be freed (using astFree) when it
-* is no longer required.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstXmlChan *this; /* Pointer to the XmlChan structure */
- AstXmlElement *element; /* Pointer to element holding required value */
- char *result; /* Value to be returned */
- const char *value; /* Pointer to attribute value */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the XmlChan structure. */
- this = (AstXmlChan *) this_channel;
-
-/* Search the current container element for an ATTR element
- describing an AST attribute of the specified name. This call ignores
- ATTR elements which represent default values. No error is
- reported if an ATTR element with the given name cannot be
- found. */
- element = FindAttribute( this, name, status );
-
-/* If an element was found, return a copy of the "value" string. */
- if( element ) {
- value = astXmlGetAttributeValue( element, VALUE );
- if( value ) {
- result = astStore( NULL, value, strlen( value ) + 1 );
-
-/* If the new default for XmlFormat has not yet been set, note if this
- element contained a "quoted" attribute. */
- if( this->formatdef == NATIVE_FORMAT ) {
- if( astXmlGetAttributeValue( element, QUOTED ) ) {
- this->formatdef = QUOTED_FORMAT;
- }
- }
-
-/* Remove the ATTR element from the container. */
- element = Remove( this, element, status );
-
-/* Report an error if the attribute does not have a value. */
- } else {
- astError( AST__BADIN, "astRead(XmlChan): No value for attribute "
- "\"%s\" within element \"%s\".", status, name,
- GetTag( (AstXmlObject *) element, 1, status ) );
- }
-
-/* If no suitable Value structure was found, then make a dynamic copy
- of the default string (if given) and return a pointer to this. */
- } else if ( def ) {
- result = astStore( NULL, def, strlen( def ) + (size_t) 1 );
- }
-
-/* Return the result. */
- return result;
-}
-
-static AstXmlElement *ReadXmlText( AstXmlChan *this, int *status ){
-/*
-* Name:
-* ReadXmlText
-
-* Purpose:
-* Create an in-memory XML tree from an XML text source.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstXmlElement *ReadXmlText( AstXmlChan *this, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function constructs an in-memory XML representation of the data
-* source by reading text up to the end of the first element encountered
-* from which an AST Object could be constructed. If the Skip attribute is
-* zero, then an error is reported if there is any text prior to the start
-* of the first AST Object. If Skip is non-zero any initial text prior to
-* the start of the first usable element is ignored.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the returned XmlElement. This should be annuled using
-* astXmlAnnul when no longer needed. NULL is returned if the end of
-* the source text is reached without finding a en element from which
-* an AST Object could be read.
-
-* Notes:
-* - A NULL pointer is returned if an error has already occurred, of
-* if this function should fail for any reason.
-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Declare the thread specific global data */
- AstXmlElement *result; /* Returned pointer */
- int skip; /* Skip over initial irrelevant markup? */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */
- astGET_GLOBALS(this);
-
-/* Get the value of the Skip attribute. This indicates if we should skip
- over any irrelevant markup prior to the first element from which an
- AST object could be created. */
- skip = astGetSkip( this );
-
-/* Store a pointer to the XmlChan in a module variable so that the IsUsable function
- can access its properties. */
- isusable_this = this;
-
-/* Read characters from the XML source and return an XmlElement structure
- containing the first usable element encountered. */
- result = astXmlReadDocument( &(this->readcontext), IsUsable, skip,
- GetNextChar, this );
-
-/* Nullify the module variable for safety. */
- isusable_this = NULL;
-
-/* If no usable element was found, annul the document. */
- if( !result ) this->readcontext = astXmlAnnul( this->readcontext );
-
-/* Delete the returned element if an error has occurred. */
- if( !astOK ) result = astXmlAnnulTree( result );
-
-/* Return the result. */
- return result;
-
-}
-
-static void ReCentreAnc( AstRegion *region, int nanc, AstKeyMap **ancs, int *status ){
-/*
-* Name:
-* ReCentreAnc
-
-* Purpose:
-* Re-centre the Regions describing ancillary information extracted
-* from an AstroCoords elements.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "channel.h"
-* ReCentreAnc( AstRegion *region, int nanc, AstKeyMap **ancs, int *status )
-
-* Class Membership:
-* XmlChan member function
-
-* Description:
-* This function recentres the Regions which describe ancillary
-* information from an AstroCoords element so that it is centred at
-* the centre of the associated AstroCoordsArea element.
-
-* Parameters:
-* region
-* Pointer to the Region defining the associated AstroCoordsArea.
-* nanc
-* Number of KeyMap pointers stored in "ancs"
-* ancs
-* Pointer to an array of "nanc" elements, each being a pointer to
-* a KeyMap. Each one describes the ancilary information in an
-* AstroCoords element associated with the AstroCoordsArea decribed
-* by "region". Each KeyMap has elements with keys AST__STCERROR,
-* AST__STCRES, AST__STCSIZE, AST__STCPIXSZ, AST__STCVALUE each of
-* which holds a pointer to a Region. These Regions are modified on
-* exit so that they are centred on a point which inside the supplied
-* Region.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstFrame *frm;
- AstFrame *pfrm;
- AstFrameSet *fs;
- AstMapping *map;
- AstMapping *smap;
- AstObject *o;
- AstRegion *r2;
- AstRegion *r;
- char orgatt[ 20 ];
- char orgset[ 80 ];
- char setting[ 80 ];
- char sysatt[ 20 ];
- char sysset[ 80 ];
- const char *old_unit;
- const char *time_unit;
- double *lbnd;
- double *mid;
- double *ubnd;
- double epoch;
- int i;
- int j;
- int k;
- int ndim;
- int paxis;
- int time_axis;
-
- static const char *key[ 5 ] = { AST__STCERROR,
- AST__STCRES,
- AST__STCSIZE,
- AST__STCPIXSZ,
- AST__STCVALUE };
-
-/* Check the inherited status. Also return if no Keymaps supplied. */
- if( !nanc || !astOK ) return;
-
-/* Get the Frame encapsulated by the suipplied Region. */
- frm = astRegFrame( region );
-
-/* Get the bounds of the supplied Region. */
- ndim = astGetNaxes( frm );
- lbnd = astMalloc( sizeof( double )*(size_t) ndim );
- ubnd = astMalloc( sizeof( double )*(size_t) ndim );
- mid = astMalloc( sizeof( double )*(size_t) ndim );
- if( mid ) {
- astGetRegionBounds( region, lbnd, ubnd );
-
-/* Get a mid point, taking account of unbounded axes. Also find the index of
- the time axis (if any) in the supplied Region, and get the System and
- TimeOrigin values for the time axis. */
- time_axis = -1;
- time_unit = NULL;
- orgatt[ 0 ] = 0;
- sysatt[ 0 ] = 0;
- for( i = 0; i < ndim; i++ ) {
- if( lbnd[ i ] > -0.5*DBL_MAX ) {
- if( ubnd[ i ] < 0.5*DBL_MAX ) {
- mid[ i ] = 0.5*( lbnd[ i ] + ubnd[ i ] );
- } else {
- mid[ i ] = lbnd[ i ];
- }
- } else {
- if( ubnd[ i ] < 0.5*DBL_MAX ) {
- mid[ i ] = ubnd[ i ];
- } else {
- mid[ i ] = 0.0;
- }
- }
-
-/* If we have not found a time axis, see if the current axis is a time axis. */
- if( time_axis == -1 ) {
- astPrimaryFrame( frm, i, &pfrm, &paxis );
- if( astIsATimeFrame( pfrm ) ) {
-
-/* If so, record its index. */
- time_axis = i;
-
-/* If the TimeOrigin attribute is set, save its value. Create strings
- holding the attribute name and appropriate setting string for use with
- the ancillary regions. */
- if( astTestTimeOrigin( (AstTimeFrame *) pfrm ) ) {
- sprintf( orgatt, "TimeOrigin(%d)", i + 1 );
- sprintf( orgset, "TimeOrigin(%d)=%s", i + 1,
- astGetC( pfrm, "TimeOrigin" ) );
- }
-
-/* If the System attribute is set, save its value. Create strings
- holding the attribute name and appropriate setting string for use with
- the ancillary regions. */
- if( astTestSystem( pfrm ) ) {
- sprintf( sysatt, "System(%d)", i + 1 );
- sprintf( sysset, "System(%d)=%s", i + 1,
- astGetC( pfrm, "System" ) );
- }
-
- time_unit = astGetUnit( pfrm, 0 );
- }
- pfrm = astAnnul( pfrm );
- }
-
- }
-
-/* Get the Region Epoch. */
- if( astTestEpoch( frm ) ){
- epoch = astGetEpoch( frm );
- sprintf( setting, "Epoch=MJD %.*g", DBL_DIG, epoch );
- } else {
- setting[ 0 ] = 0;
- epoch = AST__BAD;
- }
-
-/* Loop round each KeyMap. */
- for( j = 0; j < nanc; j++ ) {
-
-/* Loop round each of the relevant KeyMap elements (skip the "Value"
- element since this should not be re-centred). */
- for( k = 0; k < 5; k++ ) {
- if( astMapGet0A( ancs[ j ], key[ k ], &o ) ) {
- r = (AstRegion *) o;
-
-/* The System and TimeOrigin attributes of the STC Region are set when the
- AstroCoordArea is read. This occurs after the ancillary Coords Regions are
- created. Consequently, the ancillary Coords Regions may not have set
- System and/or TimeOrigin values. So, for System and TimeOrigin, if
- the attribute is set in the supplied Region but not set in the ancillary
- Region, transfer the set value to the ancillary Region. */
- if( strlen( sysatt ) && strlen( orgatt ) ) {
- if( !astTest( r, sysatt ) && !astTest( r, orgatt ) ) {
- astRegSetAttrib( r, sysset, NULL );
-
- old_unit = astGetUnit( r, time_axis );
- if( old_unit && time_unit &&
- strcmp( old_unit, time_unit ) ) {
- if( !astTestUnit( r, time_axis ) ) {
- old_unit = NULL;
- } else {
- old_unit = astStore( NULL, old_unit,
- strlen( old_unit ) + 1 );
- }
- astSetUnit( r, time_axis, time_unit );
- }
- astRegSetAttrib( r, orgset, NULL );
- if( !old_unit ) {
- astClearUnit( r, time_axis );
- } else if( strcmp( old_unit, time_unit ) ) {
- astSetUnit( r, time_axis, old_unit );
- old_unit = astFree( (void *) old_unit );
- }
- }
- }
-
-/* Re-centre the Regions held in this element of the KeyMap, and set
- its Epoch (do not re-centre the "Value" element). */
- if( strcmp( key[ k ], AST__STCVALUE ) ) {
-
-/* First ensure the ancillary Region refers to the supplied Frame. */
- fs = astConvert( r, frm, "" );
- if( fs ) {
- map = astGetMapping( fs, AST__BASE, AST__CURRENT );
- smap = astSimplify( map );
- if( !astIsAUnitMap( smap ) ) {
- r2 = astMapRegion( r, smap, frm );
- astMapPut0A( ancs[ j ], key[ k ], r2, NULL );
- (void) astAnnul( r );
- r = r2;
- }
- map = astAnnul( map );
- smap = astAnnul( smap );
- fs = astAnnul( fs );
-
-/* Now set the epoch and re-centre.*/
- if( epoch != AST__BAD ) astRegSetAttrib( r, setting, NULL );
- astRegCentre( r, mid, NULL, 0, AST__CURRENT );
- }
- }
- r = astAnnul( r );
- }
- }
- }
- }
-
-/* Free resources. */
- lbnd = astFree( lbnd );
- ubnd = astFree( ubnd );
- mid = astFree( mid );
- frm = astAnnul( frm );
-}
-
-static AstObject *RedshiftFrameReader( AstXmlChan *this,
- AstXmlElement *elem, int *status ) {
-/*
-* Name:
-* RedshiftFrameReader
-
-* Purpose:
-* Make an AST Object from an IVOA RedshiftFrame element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstObject *RedshiftFrameReader( AstXmlChan *this, AstXmlElement *elem, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Object from the supplied IVOA
-* RedshiftFrame element. The returned Object is a SpecFrame in which
-* the Domain is set explicitly to REDSHIFT.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA RedshiftFrame element.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Object.
-
-*/
-
-/* Local Variables: */
- AstSpecFrame *new; /* Pointer to returned Object */
- IVOAScan *scan; /* Structure holding scan results */
- const char *names[3]; /* Names of the subelements to be searched for */
- const char *sor; /* StdOfRest for returned Frame */
- const char *type; /* Doppler type (velocity or redshift) */
- const char *sys; /* Spectral system */
- int max[3]; /* Max allowed occurrences of each name */
- int min[3]; /* Min allowed occurrences of each name */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return (AstObject *) new;
-
-/* Search the supplied element for the required sub-elements. */
- names[ 0 ] = "TOPOCENTER|BARYCENTER|HELIOCENTER|GEOCENTER|LSR|"
- "LSRK|GALACTIC_CENTER|LOCAL_GROUP_CENTER|LSRD";
- names[ 1 ] = DOPPLER_DEFINITION;
- names[ 2 ] = "Name";
- max[ 0 ] = 1;
- max[ 1 ] = 1;
- max[ 2 ] = 1;
- min[ 0 ] = 1;
- min[ 1 ] = 1;
- min[ 2 ] = 0;
- scan = ScanIVOAElement( this, elem, 3, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Get the name of the Element specifying the reference position and find
- the corresponding AST name.*/
- sor = astXmlGetName( scan->el[0][0] );
- if( !strcmp( sor, "TOPOCENTER" ) ) {
- sor = "Topo";
- } else if( !strcmp( sor, "BARYCENTER" ) ){
- sor = "Bary";
- } else if( !strcmp( sor, "GEOCENTER" ) ){
- sor = "Geo";
- } else if( !strcmp( sor, "LSR" ) || !strcmp( sor, "LSRK" ) ) {
- sor = "LSRK";
- } else if( !strcmp( sor, "LSRD" ) ) {
- sor = "LSRD";
- } else if( !strcmp( sor, "GALACTIC_CENTER" ) ) {
- sor = "Galactic";
- } else if( !strcmp( sor, "LOCAL_GROUP_CENTER" ) ) {
- sor = "Local_group";
- } else if( !strcmp( sor, "HELIOCENTER" ) ) {
- sor = "Helio";
- } else if( astOK ){
- astError( AST__INTER, "RedshiftFrameReader(XmlChan): Unknown "
- "standard of rest %s (internal AST programming error).", status,
- sor );
- }
-
-/* Issue a warning if the reference position includes an ephemeris. */
- if( FindElement( this, scan->el[0][0], "PlanetaryEphem", status ) ) {
- Report( this, scan->el[0][0], WARNING, "contains a <PlanetaryEphem> "
- "element which will be ignored", status );
- }
-
-/* Get the value of the value_type attribute from the element. */
- type = astXmlGetAttributeValue( elem, "value_type" );
- if( !type ) type = "VELOCITY";
-
-/* If the type is REDSHIFT, set the system to redshift. Also check that
- any <DopplerDefinition> element is "OPTICAL". */
- if( !strcmp( type, "REDSHIFT" ) ) {
- sys = astXmlGetValue( scan->el[1][0], 0 );
- if( sys && !strcmp( sys, "OPTICAL" ) ) {
- sys = "REDSHIFT";
- } else {
- Report( this, elem, FAILURE, "specifies dimensionless "
- "redshift (z) but has non-optical <DopplerDefinition>", status );
- }
-
-/* Otherwise, get the value of the Doppler definition element, and translate
- it to an AST value.*/
- } else {
- sys = astXmlGetValue( scan->el[1][0], 0 );
- if( !sys ) {
- Report( this, elem, FAILURE, "contains a <DopplerDefinition> "
- "element which is not simply character data", status );
-
- } else if( !strcmp( sys, "OPTICAL" ) ) {
- sys = "VOPT";
-
- } else if( !strcmp( sys, "RADIO" ) ) {
- sys = "VRAD";
-
- } else if( !strcmp( sys, "RELATIVISTIC" ) ) {
- sys = "VREL";
-
- } else {
- Report( this, elem, FAILURE, "contains unsupported Doppler definition", status );
- }
- }
-
-/* Create a suitable SpecFrame. */
- new = astSpecFrame( "Domain=REDSHIFT,System=%s,StdOfRest=%s", status, sys, sor);
-
-/* If the SpectralFrame has a <Name> element use it as the SpecFrame title. */
- if( scan->count[2] ) astSetTitle( new, astXmlGetValue( scan->el[2][0], 0 ) );
-
-/* Free resources */
- scan = FreeIVOAScan( scan, status );
-
- }
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Object. */
- return (AstObject *) new;
-}
-
-static AstRegion *RedshiftIntervalReader( AstXmlChan *this, AstXmlElement *elem,
- AstFrame *frm, int *status ){
-/*
-* Name:
-* RedshiftIntervalReader
-
-* Purpose:
-* Make an AST Region from an IVOA RedshiftInterval element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstRegion *RedshiftIntervalReader( AstXmlChan *this, AstXmlElement *elem,
-* AstFrame *frm, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Region from the supplied IVOA
-* RedshiftInterval element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA RedshiftInterval element.
-* frm
-* Pointer to the Frame in which the returned Region should be
-* defined. If the Unit or System attribute is not set, this
-* function will decide on the values to be used, and set these
-* values in the supplied Frame before returning.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
- AstFrame *cfrm; /* Frame used to define returned Region */
- AstRegion *new; /* Pointer to returned Region */
- AstSystemType sys; /* Redshift system */
- IVOAScan *scan; /* Structure holding scan results */
- char *unit; /* Unit string from supplied element */
- const char *funit; /* Unit string from supplied Frame */
- const char *names[2]; /* Names of the subelements to be searched for */
- double hilimit; /* Upper spectral limit */
- double lolimit; /* Lower spectral limit */
- int max[2]; /* Max allowed occurrences of each name */
- int min[2]; /* Min allowed occurrences of each name */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Search the supplied element for the required sub-elements. */
- names[ 0 ] = "LoLimit";
- names[ 1 ] = "HiLimit";
- min[ 0 ] = 0;
- min[ 1 ] = 0;
- max[ 0 ] = 1;
- max[ 1 ] = 1;
- scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Get the limits. */
- lolimit = scan->count[0] ? ElemValueD( this, scan->el[0][0], 0.0, status ) : AST__BAD;
- hilimit = scan->count[1] ? ElemValueD( this, scan->el[1][0], 0.0, status ) : AST__BAD;
-
-/* Use any unit and vel_time_unit attributes in the supplied element to
- determine the system and units for the redshift Frame. */
- sys = RedshiftSys( this, elem, &unit, 1, status );
-
-/* If no system has been set in the supplied Frame, set a default system
- now (radio velocity if both units are present, dimensionaless redshift
- otherwise). */
- if( !astTestSystem( frm ) ) {
- astSetSystem( frm, sys );
-
-/* The ReddshiftSys function always returns AST__VRADIO if the velocity
- is not dimensionless. In this case, if the supplied Frame has system
- explicitly set AST__VOPTICAL, we use the supplied Frame preference of
- optical/radio instead of the default returned by RedshiftSys. */
- } else if( sys != AST__REDSHIFT ) {
- sys = astGetSystem( frm );
- if( sys == AST__REDSHIFT ) sys = AST__VRADIO;
- }
-
-/* Take a copy of the supplied Frame and set its Units to the value found
- above. */
- cfrm = astCopy( frm );
- astSetUnit( cfrm, 0, unit );
-
-/* If at least one limit was found, create an Interval within this
- modified Frame. Otherwise create a negated NullRegion. */
- if( lolimit != AST__BAD || hilimit != AST__BAD ) {
- new = (AstRegion *) astInterval( cfrm, &lolimit, &hilimit, NULL, "", status );
- } else {
- new = (AstRegion *) astNullRegion( cfrm, NULL, "negated=1", status );
- }
-
-/* If the Units of this Region differs from that of the supplied Frame,
- set it to the Units of the supplied Frame. This will cause the
- encapsulated limits to be mapped into the new Units. If the supplied
- Frame had no set Units, set it to the units implied by the supplied
- XML element. */
- if( astTestUnit( frm, 0 ) ) {
- funit = astGetUnit( frm, 0 );
- if( strcmp( funit, unit ) ) astSetUnit( new, 0, funit );
- } else {
- astSetUnit( frm, 0, unit );
- }
-
-/* Get any fill factor and lo/hi_include attributes from the element and
- assign to the returned Region. */
- FillAndLims( this, elem, new, status );
-
-/* Free resources */
- cfrm = astAnnul( cfrm );
- if( unit ) unit = astFree( unit );
- scan = FreeIVOAScan( scan, status );
- }
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
- return new;
-}
-
-static AstRegion *RedshiftReader( AstXmlChan *this, AstXmlElement *elem,
- AstFrame *frm, AstKeyMap **anc, int *status ){
-/*
-* Name:
-* RedshiftReader
-
-* Purpose:
-* Modify a Frame to take account of an STC <Redshift> element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstRegion *RedshiftReader( AstXmlChan *this, AstXmlElement *elem,
-* AstFrame *frm, AstKeyMap **anc, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function reads the supplied STC <Redshift> element, and uses it,
-* if possible, to create the uncertainty associated with the redshift
-* axis in the supplied Frame.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA Redshift element.
-* frm
-* Pointer to the 1D redshift Frame.
-* anc
-* Address of a location at which to put a pointer to a newly
-* created KeyMap. This KeyMap will contain ancillary information
-* from the Redshift. The keys identify the item of ancillary
-* information (Name, Value, Error, Resolution, Size, Pixel Size).
-* The value associated with the Name key is string containing
-* the Name item from the Redshift. The value associated with each of
-* the other keys is a pointer to a 1D Region within the supplied
-* Frame, corresponding to the value, error, resolution, etc. Keys
-* will not be present in the returned KeyMap if the corresponding
-* item of ancillary information is not present in the Redshift. A
-* NULL pointer is returned if there is no ancillary information at all.
-* status
-* Pointer to the inherited status variable.
-
-* Returned:
-* The uncertainty Region, or NULL if the supplied Redshift element
-* does not specify an uncertainty.
-
-*/
-
-/* Local Variables: */
- AstFrameSet *fs; /* FrameSet connecting "sf1" and "sf2" */
- AstMapping *map; /* Mapping from <Redshift> Frame to supplied Frame */
- AstRegion *r2; /* Region mapped into returned Frame */
- AstRegion *r3; /* Simplified Region mapped into returned Frame */
- AstRegion *r; /* Original Region */
- AstRegion *result; /* Returned uncertainty Region */
- AstSpecFrame *sf1; /* SpecFrame describing value element */
- AstSystemType fsys; /* Redshift system from supplied Stc */
- IVOAScan *scan; /* Structure holding scan results */
- const char *name; /* Pointer to XML element name */
- const char *names[6]; /* Names of the subelements to be searched for */
- char *unit; /* Pointer to Redshift's unit attribute string */
- double lbnd[ 1 ] ; /* Lower interval bounds */
- double tmp; /* Temporary storage */
- double ubnd[ 1 ] ; /* Upper interval bounds */
- double v; /* Axis value */
- int max[6]; /* Max allowed occurrences of each name */
- int min[6]; /* Min allowed occurrences of each name */
-
-/* Initialise */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Search the supplied element for the required sub-elements. */
- names[ 0 ] = "Name";
- names[ 1 ] = "Error";
- names[ 2 ] = "Value";
- names[ 3 ] = "Resolution";
- names[ 4 ] = "Size";
- names[ 5 ] = "PixSize";
- max[ 0 ] = 1;
- max[ 1 ] = 2;
- max[ 2 ] = 1;
- max[ 3 ] = 2;
- max[ 4 ] = 2;
- max[ 5 ] = 2;
- min[ 0 ] = 1;
- min[ 1 ] = 0;
- min[ 2 ] = 0;
- min[ 3 ] = 0;
- min[ 4 ] = 0;
- min[ 5 ] = 0;
- scan = ScanIVOAElement( this, elem, 6, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Create a KeyMap to return holding ancilary info, and put the Name into
- it. */
- *anc = astKeyMap( "", status );
- if( scan->count[0] > 0 ) astMapPut0C( *anc, AST__STCNAME,
- astXmlGetValue( scan->el[0][0], 0 ), NULL );
-
-/* Determine the units and system implied by the <Redshift> element.
- The returned system is AST__REDSHIFT if there is no unit attribute in
- the <Redshift> element, and is AST__VRADIO otherwise. */
- fsys = RedshiftSys( this, elem, &unit, 1, status );
-
-/* If no system has been set in the supplied Frame, set it now to the system
- determined above. */
- if( !astTestSystem( frm ) ) {
- astSetSystem( frm, fsys );
-
-/* The ReddshiftSys function above always returns AST__VRADIO if the velocity
- is not dimensionless. However, the supplied Frame may have System set
- explicitly to AST__VOPTICAL. In this case change the "fsys" value to use
- AST__VOPTICAL. */
- } else if( fsys != AST__REDSHIFT ) {
- fsys = astGetSystem( frm );
- if( fsys == AST__REDSHIFT ) fsys = AST__VRADIO;
- }
-
-/* If the supplied Frame has no set units, set them now to the units of
- the Redshift element (if any, and if the redshift is not dimensionless). */
- if( unit && fsys != AST__REDSHIFT &&
- astGetSystem( frm ) != AST__REDSHIFT && !astTestUnit( frm, 0 ) ) {
- astSetUnit( frm, 0, unit );
- }
-
-/* The values represented by the <Redshift> element may not be in the same
- system, units, etc as the supplied SpecFrame. We will need to be able to
- convert from one to the other, so create a SpecFrame describing the
- system and units used by the <Redshift> element. */
- sf1 = astCopy( frm );
- astSetSystem( sf1, fsys );
- if( unit ) {
- astSetUnit( sf1, 0, unit );
- unit = astFree( unit );
- }
-
-/* Find the Mapping from Redshift value to the supplied SpecFrame value */
- fs = astConvert( sf1, frm, "" );
- if( fs ) {
- map = astGetMapping( fs, AST__BASE, AST__CURRENT );
- fs = astAnnul( fs );
- } else {
- map = NULL;
- Report( this, elem, FAILURE, "connot convert AstroCoords "
- "redshift values to the required redshift system", status );
- }
-
-/* If this Redshift contains a Value which can be read, obtain it. */
- if( scan->count[ 2 ] > 0 ) {
- name = astXmlGetName( scan->el[ 2 ][ 0 ] );
- if( name && !strcmp( name, "Value" ) ) {
- v = ElemValueD( this, scan->el[ 2 ][ 0 ], AST__BAD, status );
-
-/* Convert the value into the supplied SpecFrame system. Create an
- Interval describing it and store it in the returned ancillary keyMap.
- Note we create an Interval rather than a PintList since the Prism
- class can only extrude using Intervals. */
- astTran1( map, 1, &v, 1, &tmp );
- r = (AstRegion *) astInterval( frm, &tmp, &tmp, NULL, "", status ) ;
- astMapPut0A( *anc, AST__STCVALUE, r, NULL );
- r = astAnnul( r );
- }
- }
-
-/* Check for Error values in the Redshift. */
- if( scan->count[ 1 ] > 0 ) {
-
-/* Issue a warning if more than 1 Error value was found. */
- if( scan->count[ 1 ] > 1 ) {
- Report( this, elem, WARNING, "contains more than one <Error>"
- " element. AST can only use the first", status );
- }
-
-/* Get the first Error value. */
- v = ElemValueD( this, scan->el[1][0], AST__BAD, status );
- if( v != AST__BAD ) {
-
-/* Create the upper and lower limits of an error bar centred on zero. */
- ubnd[ 0 ] = 0.5*fabs( v );
- lbnd[ 0 ] = -ubnd[ 0 ];
-
-/* Create an Interval within the Frame represented by the Redshift element.
- Map it into the supplied Frame. Simplify it. Store in the returned
- ancillary KeyMap. */
- r = (AstRegion *) astInterval( sf1, lbnd, ubnd, NULL, "", status );
- r2 = astMapRegion( r, map, frm );
- result = astSimplify( r2 );
- astMapPut0A( *anc, AST__STCERROR, result, NULL );
- r2 = astAnnul( r2 );
- r = astAnnul( r );
- }
- }
-
-/* Check for Resolution values in the Redshift. */
- if( scan->count[ 3 ] > 0 ) {
-
-/* Issue a warning if more than 1 value was found. */
- if( scan->count[ 3 ] > 1 ) {
- Report( this, elem, WARNING, "contains more than one <Resolution>"
- " element. AST can only use the first", status );
- }
-
-/* Get the first value. */
- v = ElemValueD( this, scan->el[3][0], AST__BAD, status );
- if( v != AST__BAD ) {
-
-/* Create the upper and lower limits of an interval centred on zero. */
- ubnd[ 0 ] = 0.5*fabs( v );
- lbnd[ 0 ] = -ubnd[ 0 ];
-
-/* Create an Interval within the Frame represented by the Redshift element.
- Map it into the supplied Frame. Simplify it. Store in the returned
- ancillary KeyMap. */
- r = (AstRegion *) astInterval( sf1, lbnd, ubnd, NULL, "", status );
- r2 = astMapRegion( r, map, frm );
- r3 = astSimplify( r2 );
- astMapPut0A( *anc, AST__STCRES, r3, NULL );
- r3 = astAnnul( r3 );
- r2 = astAnnul( r2 );
- r = astAnnul( r );
- }
- }
-
-/* Check for Size values in the Redshift. */
- if( scan->count[ 4 ] > 0 ) {
-
-/* Issue a warning if more than 1 value was found. */
- if( scan->count[ 4 ] > 1 ) {
- Report( this, elem, WARNING, "contains more than one <Size>"
- " element. AST can only use the first", status );
- }
-
-/* Get the first value. */
- v = ElemValueD( this, scan->el[4][0], AST__BAD, status );
- if( v != AST__BAD ) {
-
-/* Create the upper and lower limits of an interval centred on zero. */
- ubnd[ 0 ] = 0.5*fabs( v );
- lbnd[ 0 ] = -ubnd[ 0 ];
-
-/* Create an Interval within the Frame represented by the Redshift element.
- Map it into the supplied Frame. Simplify it. Store in the returned
- ancillary KeyMap. */
- r = (AstRegion *) astInterval( sf1, lbnd, ubnd, NULL, "", status );
- r2 = astMapRegion( r, map, frm );
- r3 = astSimplify( r2 );
- astMapPut0A( *anc, AST__STCSIZE, r3, NULL );
- r3 = astAnnul( r3 );
- r2 = astAnnul( r2 );
- r = astAnnul( r );
- }
- }
-
-/* Check for PixSize values in the Redshift. */
- if( scan->count[ 5] > 0 ) {
-
-/* Issue a warning if more than 1 value was found. */
- if( scan->count[ 5 ] > 1 ) {
- Report( this, elem, WARNING, "contains more than one <PixSize>"
- " element. AST can only use the first", status );
- }
-
-/* Get the first value. */
- v = ElemValueD( this, scan->el[5][0], AST__BAD, status );
- if( v != AST__BAD ) {
-
-/* Create the upper and lower limits of an interval centred on zero. */
- ubnd[ 0 ] = 0.5*fabs( v );
- lbnd[ 0 ] = -ubnd[ 0 ];
-
-/* Create an Interval within the Frame represented by the Redshift element.
- Map it into the supplied Frame. Simplify it. Store in the returned
- ancillary KeyMap. */
- r = (AstRegion *) astInterval( sf1, lbnd, ubnd, NULL, "", status );
- r2 = astMapRegion( r, map, frm );
- r3 = astSimplify( r2 );
- astMapPut0A( *anc, AST__STCPIXSZ, r3, NULL );
- r3 = astAnnul( r3 );
- r2 = astAnnul( r2 );
- r = astAnnul( r );
- }
- }
-
-/* Free resources. */
- scan = FreeIVOAScan( scan, status );
- sf1 = astAnnul( sf1 );
- map = astAnnul( map );
- }
-
-/* Return NULL if an error occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result */
- return result;
-
-}
-
-static AstSystemType RedshiftSys( AstXmlChan *this, AstXmlElement *elem,
- char **unit, int report, int *status ){
-/*
-* Name:
-* RedshiftSys
-
-* Purpose:
-* Determine the redshift system described by the attributes in a
-* given element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstSystemType RedshiftSys( AstXmlChan *this, AstXmlElement *elem,
-* char **unit, int report, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function determines the redshift system described by the unit and
-* vel_time_unit attributes in the supplied element. It optionally reports
-* an error if the units are not recognised.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA element containing the unit attribute to be used.
-* unit
-* Pointer to a location at which to return a pointer to a
-* dynamically allocated string in which is stored the total units string
-* implied by the unit and vel_time_unit attributes. This string
-* should be freed when no longer needed using astFree. A NULL
-* pointer is returned if either of the two attributes (unit and
-* vel_time_unit) is not found in the supplied element, or if an error
-* occurs.
-* report
-* If non-zero, then a failure is reported if the spectral system
-* cannot be determined from the supplied string.
-* status
-* Pointer to the inherited status variable.
-
-* Returned:
-* The redshift system (radio velocity if both unit and vel_time_unit
-* attributes are present in the supplied element, or dimensionaless
-* redshift otherwise).
-
-*/
-
-/* Local Variables: */
- const char *punit; /* Pointer to positional unit string */
- const char *tunit; /* Pointer to time unit string */
- int pl; /* Length of punit string */
- int tl; /* Length of tunit string */
-
-/* Initialise. */
- *unit = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return AST__BADSYSTEM;
-
-/* Get the Unit attribute from the element (this describes units of position) */
- punit = astXmlGetAttributeValue( elem, "unit" );
- if( punit ) {
-
-/* Check it is a linear measure (not angular). */
- if( strstr( "m", punit ) &&
- strstr( "km", punit ) &&
- strstr( "mm", punit ) &&
- strstr( "AU", punit ) &&
- strstr( "kpc", punit ) &&
- strstr( "Mpc", punit ) &&
- strstr( "lyr", punit ) ) {
- if( report ) Report( this, elem, FAILURE, "contains an angular unit attribute", status );
- }
- }
-
-/* Get the vel_time_unit attribute from the element (this describes units of
- time). If OK, construct the total unit string (eg "km/h") . */
- tunit = astXmlGetAttributeValue( elem, "vel_time_unit" );
- if( tunit ) {
- if( !punit ) {
- if( report ) Report( this, elem, FAILURE, "contains time units but not position units - assuming Z", status );
- } else {
- pl = strlen( punit );
- tl = strlen( tunit );
- *unit = astMalloc( (size_t)( pl + tl + 2 ) );
- if( *unit ) {
- strcpy( *unit, punit );
- (*unit)[ pl ] = '/';
- strcpy( *unit + pl + 1, tunit );
- }
- }
-
- } else if( punit ) {
- if( report ) Report( this, elem, FAILURE, "contains position units but not time units - assuming Z", status );
- }
-
-/* Return a default system (radio velocity if both units are present,
- dimensionless redshift otherwise). */
- return ( punit && tunit ) ? AST__VRADIO : AST__REDSHIFT;
-}
-
-static AstRegion *RegionReader( AstXmlChan *this, AstXmlElement *elem,
- AstFrame *frm, int *status ){
-/*
-* Name:
-* RegionReader
-
-* Purpose:
-* Make an AST Region from any subclass of IVOA Region element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstRegion *RegionReader( AstXmlChan *this, AstXmlElement *elem,
-* AstFrame *frm, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Region from the supplied IVOA
-* element which can be of any subclass of Region.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA element.
-* frm
-* Pointer to the 2D Frame in which the returned Region should be
-* defined. If the Unit attribute is not set, this function will
-* set it to the value supplied in "unit" before returning.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
- AstRegion *new; /* Pointer to returned Region */
- const char *name; /* Region type */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Process each supported type of STC Region. */
- name = astXmlGetName( elem );
- if( !strcmp( name, "Intersection" ) ) {
- new = IntersectionReader( this, elem, frm, status );
-
- } else if( !strcmp( name, "Union" ) ) {
- new = UnionReader( this, elem, frm, status );
-
- } else if( !strcmp( name, "Negation" ) ) {
- new = NegationReader( this, elem, frm, status );
-
- } else if( !strcmp( name, "AllSky" ) ) {
- new = AllSkyReader( this, elem, frm, status );
-
- } else if( !strcmp( name, "Circle" ) ) {
- new = CircleReader( this, elem, frm, status );
-
- } else if( !strcmp( name, "Ellipse" ) ) {
- new = EllipseReader( this, elem, frm, status );
-
- } else if( !strcmp( name, "Polygon" ) ) {
- new = PolygonReader( this, elem, frm, status );
-
- } else if( !strcmp( name, "Box" ) ) {
- new = BoxReader( this, elem, frm, status );
-
- } else if( !strcmp( name, "Convex" ) ) {
- new = ConvexReader( this, elem, frm, status );
-
- } else {
- astError( AST__INTER, "RegionReader(XmlChan): Does not yet "
- "support \"%s\" regions (internal AST programming "
- "error).", status, name );
- }
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
- return new;
-}
-
-static AstXmlElement *Remove( AstXmlChan *this, AstXmlElement *element, int *status ) {
-/*
-* Name:
-* Remove
-
-* Purpose:
-* Remove an element from the current container element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstXmlElement *Remove( AstXmlChan *this, AstXmlElement *element, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function removes the specified element from the current
-* container element, and then annuls the removed element. An error is
-* reported if the element being removed contains anything other than
-* comments, "isa" elements and blank character data (all contents should
-* have been consumed by the process of reading the object).
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* element
-* Pointer to the XML element to be removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A NULL pointer is returned.
-
-*/
-
-/* Local Variables: */
- AstXmlContentItem *item; /* Item */
- const char *def; /* Pointer to default attribute value */
- int i; /* Index of current item */
- int nitem; /* Number of items still in the element */
-
-/* Check the global error status, and the supplied element. */
- if ( !astOK || !element ) return NULL;
-
-/* Check we have a container from which to remove the element. If so,
- check that the container is the elements parent. If so, remove the
- element from its parent container. */
- if( this->container ) {
- if( (AstXmlParent *) this->container != astXmlGetParent( element ) ){
- astError( AST__INTER, "Remove(XmlChan): Supplied element is not "
- "contained within the current container element (internal "
- "AST programming error)." , status);
- } else {
- astXmlRemoveItem( element );
- }
- }
-
-/* Check that the element being removed is empty (apart from comments,
- defaulted values and "isa" elements). */
- nitem = astXmlGetNitem( element );
- for( i = 0; i < nitem; i++ ) {
- item = astXmlGetItem( element, i );
- if( astXmlCheckType( item, AST__XMLELEM ) ) {
-
-/* See if this element represents a default value */
- def = astXmlGetAttributeValue( item, DEFAULT );
-
-/* Default values and "isa" elements are OK. */
- if( ( !def || strcmp( def, TRUE ) ) && astOK &&
- strcmp( astXmlGetName( item ), ISA ) ) {
-
-/* Remove any "definedby" attribute (added by ReadClassData) so that it
- does not appear in the error message. */
- if( astXmlGetAttributeValue( item, DEFINEDBY ) ) {
- astXmlRemoveAttr( item, DEFINEDBY, NULL );
- }
-
-/* Report the error. */
- if( astOK ) astError( AST__BADIN, "astRead(XmlChan): The following "
- "tag was not recognised as valid input within "
- "a %s: %s", status, astXmlGetName( element ),
- GetTag( (AstXmlObject *) item, 1, status ) );
- break;
- }
-
-/* Character data is OK so long as it contains only white space */
- } else if( astXmlCheckType( item, AST__XMLBLACK ) ) {
- astError( AST__BADIN, "astRead(XmlChan): The following character "
- "data was not recognised as valid input within a %s: %s", status,
- astXmlGetName( element ), astXmlGetValue( item, 0 ) );
- break;
-
- } else if( astXmlCheckType( item, AST__XMLCDATA ) ) {
- astError( AST__BADIN, "astRead(XmlChan): The following CDATA section "
- "data was not recognised as valid input within a %s: %s", status,
- astXmlGetName( element ), astXmlGetValue( item, 0 ) );
- break;
-
- } else if( astXmlCheckType( item, AST__XMLPI ) ) {
- astError( AST__BADIN, "astRead(XmlChan): The following processing "
- "instruction was not recognised as valid input within "
- "a %s: %s", status, astXmlGetName( element ), GetTag( (AstXmlObject *) item, 1, status ) );
- break;
- }
- }
-
-/* Remove the element from its parent and the annul it. */
- astXmlRemoveItem( element );
- astXmlAnnul( element );
-
-/* Return a NULL pointer. */
- return NULL;
-}
-
-static void Report( AstXmlChan *this, AstXmlElement *elem, int severity,
- const char *msg, int *status ){
-/*
-* Name:
-* Report
-
-* Purpose:
-* Handle problems reading supplied XML.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "channel.h"
-* void Report( AstXmlChan *this, AstXmlElement *elem, int severity,
-* const char *msg, int *status )
-
-* Class Membership:
-* XmlChan member function
-
-* Description:
-* This function handles conditions which arise whilst interpreting
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the XmlElement which cound not be interpreted.
-* severity
-* WARNING (in which case the message is added to a list of
-* warnings, but execution continues), or FAILURE, in which case
-* an error is reported using astError, or RESET in which case any
-* warnings stored in the XmlChan are removed ("elem" and "msg" are
-* ignored).
-* msg
-* A message describing the condition.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- char buff[300]; /* Message buffer */
- char *text; /* Pointer to tformatted element text */
- const char *name; /* Element name */
-
- if( severity == RESET ) astAddWarning( this, 0, NULL, NULL, status );
-
- if( !astOK ) return;
-
- if( severity == WARNING && !astGetStrict( this ) ) {
- name = astXmlGetName( elem );
- sprintf( buff, "astRead(%s): Warning whilst reading %s %s element: %s",
- astGetClass( this ), ANA(name), name, msg );
- astAddWarning( this, 1, buff, "astRead", status );
-
- } else {
- text = (char *) astXmlGetTag( elem, 1 );
- astError( AST__BADIN, "astRead(%s): Failed to read %s element: %s", status,
- astGetClass( this ), text, msg );
- text = astFree( text );
- }
-}
-
-static IVOAScan *ScanIVOAElement( AstXmlChan *this, AstXmlElement *elem, int n,
- const char *names[], int min[], int max[], int *status ){
-/*
-* Name:
-* ScanIVOAElement
-
-* Purpose:
-* Identify required sub-elements within an IVOA element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* IVOAScan *ScanIVOAElement( AstXmlChan *this, AstXmlElement *elem, int n,
-* const char *names[], int min[], int max[], int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function searches the supplied XML element for named sub-elements.
-* A structure is returned containing the number of sub-elements found
-* with each name, and pointers to the sub-elements. This structure
-* should be freed using FreeIVOAScan when no longer needed.
-*
-* Reports are made about any content in the supplied element which is
-* not specified in the list of known sub-element names (excepting
-* comments and white space).
-*
-* Reports are also made if the number of sub-elements found with each
-* known name is inappropriate (the minimum and maximum allowed
-* occurrences of each name is specified by the caller).
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the XML element to be searched.
-* n
-* The number of names supplied in "names"
-* names
-* An array holding pointers to strings giving the names of the known
-* sub-elements. Each string may be either a single element name,
-* or a set of element names separated by "|" (the string must
-* also start and end with a "|"). If a set is supplied, then the
-* associated "min" and "max" values specify the minimum and maximum
-* total number of occurrences of all names in the set, and the
-* occurrence count stored in the returned structure gives the total
-* number of occurrences of all names in the set.
-* min
-* An array holding the mimimum number of occrrences of each name within
-* the element being searched. Supplied in the same order as the names
-* themselves.
-* max
-* An array holding the maximum number of occrrences of each name within
-* the element being searched. Supplied in the same order as the names
-* themselves.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the IVOAScan structure holding the results of the
-* scan. A NULL pointer is returned unless all names have at least
-* their minimum number of occurrences in the supplied element. A NULL
-* pointer is returned if an error occurs.
-
-*/
-
-/* Local Variables: */
- AstXmlContentItem *item; /* Current content item */
- IVOAScan *result; /* Pointer to returned structure */
- char *text; /* Pointer formatted item string */
- char buff[ 200 ]; /* Message buffer */
- const char *name; /* Pointer to element name string */
- const char *w1; /* Pointer to word to use in message */
- const char *w2; /* Pointer to word to use in message */
- const char *p; /* Pointer to start of name in string */
- int i; /* Index of current content item */
- int j; /* Index of current name */
- int k; /* Index of current occurrence of name */
- int l; /* Length of element name */
- int known; /* Was content item known? */
- int nitem; /* No. of content items in supplied element */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Initialise a structure to hold the results of the scan. */
- result = astMalloc( sizeof(IVOAScan) );
- if( result ) {
- result->n = n;
- result->count = astMalloc( sizeof(int)*(size_t)n);
- result->el = astMalloc( sizeof(AstXmlElement **)*(size_t)n);
- if( result->el ) {
- for( j = 0; j < n; j++ ) {
- result->count[ j ] = 0;
- result->el[ j ] = NULL;
- }
- }
- }
-
-/* Loop round all items in the elements contents. */
- if( astOK ) {
- nitem = astXmlGetNitem( elem );
- for( i = 0; i < nitem; i++ ) {
- item = astXmlGetItem( elem, i );
- known = 1;
-
-/* If it is not an XML element, it is not known. */
- if( !astXmlCheckType( item, AST__XMLELEM ) ) {
- known = 0;
-
-/* If it is an element, get the name of the element. */
- } else {
- name = astXmlGetName( item );
-
-/* See if this name is in the supplied list of known names. */
- known = 0;
- j = 0;
- if( name ) {
- l = strlen( name );
- for( j = 0; j < n; j++ ) {
- p = strstr( names[ j ], name );
- if( p ){
- if( p == names[ j ] ) {
- if( p[ l ] == 0 || p[ l ] == '|' ) {
- known = 1;
- break;
- }
- } else {
- if( p[ -1 ] == '|' && ( p[ l ] == 0 || p[ l ] == '|' ) ) {
- known = 1;
- break;
- }
- }
- }
- }
- }
-
-/* If it is known, store the element in the results structure */
- if( known ) {
- k = ( result->count[ j ] )++;
- result->el[ j ]= astGrow( result->el[ j ], k + 1,
- sizeof( AstXmlElement * ) );
- if( result->el[ j ] ) {
- result->el[ j ][ k ] = (AstXmlElement *) item;
- } else {
- break;
- }
- }
- }
-
-/* If this content item was not known, issue a warning unless it is a comment
- or white space. */
- if( !known && !astXmlCheckType( item, AST__XMLCOM ) &&
- !astXmlCheckType( item, AST__XMLWHITE ) ) {
- text = (char *) astXmlFormat( item );
- if( text ) {
- if( strlen( text ) > 30 ) text[ 30 ] = 0;
- sprintf( buff, "contains the following which is being ignored: \"%s\"",
- text );
- text = astFree( text );
- Report( this, elem, WARNING, buff, status );
- }
- }
- }
-
-/* Now check that the number of instances of each element found is OK.
- Report warnings or failures if not. */
- if( astOK ) {
- for( j = 0; j < n; j++ ) {
- if( result->count[ j ] < min[ j ] ) {
- w1 = ( result->count[ j ] == 1 ) ? "element" : "elements";
- w2 = ( min[ j ] == 1 ) ? "is" : "are";
- sprintf( buff, "contains %d <%s> %s but at least %d %s needed",
- result->count[ j ], names[ j ], w1, min[ j ], w2 );
- Report( this, elem, FAILURE, buff, status );
-
- } else if ( result->count[ j ] > max[ j ] ) {
- w1 = ( result->count[ j ] == 1 ) ? "element" : "elements";
- w2 = ( max[ j ] == 1 ) ? "is" : "are";
- sprintf( buff, "contains %d <%s> %s but no more than %d %s "
- "allowed (only the first will be used)",
- result->count[ j ], names[ j ], w1, max[ j ], w2 );
- Report( this, elem, WARNING, buff, status );
- }
- }
- }
- }
-
-/* Return NULL if an error occurred. */
- if( !astOK ) result = FreeIVOAScan( result, status );
-
-/* Return the results structure.*/
- return result;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a XmlChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "channel.h"
-* void SetAttrib( AstObject *this, const char *setting )
-
-* Class Membership:
-* XmlChan member function (over-rides the astSetAttrib protected
-* method inherited from the Channel class).
-
-* Description:
-* This function assigns an attribute value for a XmlChan, the
-* attribute and its value being specified by means of a string of
-* the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in
-* lower case with no white space present. The value to the right
-* of the "=" should be a suitable textual representation of the
-* value to be assigned and this will be interpreted according to
-* the attribute's data type. White space surrounding the value is
-* only significant for string attributes.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* setting
-* Pointer to a null terminated string specifying the new attribute
-* value.
-*/
-
-/* Local Variables: */
- AstXmlChan *this; /* Pointer to the XmlChan structure */
- int ival; /* Integer attribute value */
- int len; /* Length of setting string */
- int nc; /* Number of characters read by "astSscanf" */
- int pr; /* Offset to start of string */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the XmlChan structure. */
- this = (AstXmlChan *) this_object;
-
-/* Obtain the length of the setting string. */
- len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
- the setting string and extract the attribute value (or an offset to
- it in the case of string values). In each case, use the value set
- in "nc" to check that the entire string was matched. Once a value
- has been obtained, use the appropriate method to set it. */
-
-/* XmlIndent */
-/* ----------*/
- if ( nc = 0,
- ( 1 == astSscanf( setting, "xmlindent= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetXmlIndent( this, ival );
-
-/* XmlLength */
-/* ----------*/
- } else if ( nc = 0,
- ( 1 == astSscanf( setting, "xmllength= %d %n", &ival, &nc ) )
- && ( nc >= len ) ) {
- astSetXmlLength( this, ival );
-
-/* XmlFormat */
-/* ----------*/
- } else if( nc = 0,
- ( 0 == astSscanf( setting, "xmlformat=%n%*[^\n]%n", &ival, &nc ) )
- && ( nc >= len ) ) {
-
- nc = astChrLen( setting + ival );
-
- if( !Ustrncmp( setting + ival, NATIVE_STRING, nc, status ) ){
- astSetXmlFormat( this, NATIVE_FORMAT );
-
- } else if( !Ustrncmp( setting + ival, QUOTED_STRING, nc, status ) ){
- astSetXmlFormat( this, QUOTED_FORMAT );
-
- } else if( !Ustrncmp( setting + ival, IVOA_STRING, nc, status ) ){
- astSetXmlFormat( this, IVOA_FORMAT );
-
- } else {
- astError( AST__BADAT, "astSet(%s): Unknown XML format '%s' "
- "requested for a %s.", status, astGetClass( this ), setting + ival,
- astGetClass( this ) );
- }
-
-/* XmlPrefix */
-/* ----------*/
- } else if ( nc = 0, ( 0 == astSscanf( setting, "xmlprefix=%n%*[^\n]%n", &pr, &nc ) )
- && ( nc >= len ) ) {
- astSetXmlPrefix( this, setting + pr );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-}
-
-static void SinkWrap( void (* sink)( const char * ), const char *line, int *status ) {
-/*
-* Name:
-* SinkWrap
-
-* Purpose:
-* Wrapper function to invoke a C XmlChan sink function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "channel.h"
-* void SinkWrap( void (* sink)( const char * ), const char *line, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function invokes the sink function whose pointer is
-* supplied in order to write an output line to an external data
-* store.
-
-* Parameters:
-* sink
-* Pointer to a sink function, whose single parameter is a
-* pointer to a const, null-terminated string containing the
-* text to be written, and which returns void. This is the form
-* of XmlChan sink function employed by the C language interface
-* to the AST library.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Invoke the sink function. */
- ( *sink )( line );
-}
-
-static char *SourceWrap( const char *(* source)( void ), int *status ) {
-/*
-* Name:
-* SourceWrap
-
-* Purpose:
-* Wrapper function to invoke a C XmlChan source function.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "channel.h"
-* char *SourceWrap( const char *, int *status(* source)( void ) )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function invokes the source function whose pointer is
-* supplied in order to read the next input line from an external
-* data store. It then returns a pointer to a dynamic string
-* containing a copy of the text that was read.
-
-* Parameters:
-* source
-* Pointer to a source function, with no parameters, that
-* returns a pointer to a const, null-terminated string
-* containing the text that it read. This is the form of XmlChan
-* source function employed by the C language interface to the
-* AST library.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated, null terminated string
-* containing a copy of the text that was read. This string must be
-* freed by the caller (using astFree) when no longer required.
-*
-* A NULL pointer will be returned if there is no more input text
-* to read.
-
-* Notes:
-* - A NULL pointer value will be returned if this function is
-* invoked with the global error status set or if it should fail
-* for any reason.
-*/
-
-/* Local Variables: */
- char *result; /* Pointer value to return */
- const char *line; /* Pointer to input line */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Invoke the source function to read the next input line and return a
- pointer to the resulting string. */
- line = ( *source )();
-
-/* If a string was obtained, make a dynamic copy of it and save the
- resulting pointer. */
- if ( line ) result = astString( line, (int) strlen( line ) );
-
-/* Return the result. */
- return result;
-}
-
-static AstObject *SpaceFrameReader( AstXmlChan *this,
- AstXmlElement *elem, int *status ) {
-/*
-* Name:
-* SpaceFrameReader
-
-* Purpose:
-* Make an AST Object from an IVOA SpaceFrame element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstObject *SpaceFrameReader( AstXmlChan *this, AstXmlElement *elem, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Object from the supplied IVOA
-* SpaceFrame element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA SpaceFrame element.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Object.
-
-*/
-
-/* Local Variables: */
- AstObject *new; /* Pointer to returned Object */
- AstXmlElement *el; /* Pointer to sub-element */
- IVOAScan *scan; /* Structure holding scan results */
- const char *dom; /* Domain string for returned SkyFrame */
- const char *eq; /* Equinox string for returned SkyFrame */
- const char *names[4]; /* Names of the subelements to be searched for */
- const char *sys; /* System for returned Frame */
- int ignore_h; /* Ignore 3rd spherical axis? */
- int max[4]; /* Max allowed occurrences of each name */
- int min[4]; /* Min allowed occurrences of each name */
- int isgeod; /* Is the system geodetic lon/lat? */
- int isgeoc; /* Is the system geocentric lon/lat? */
- int need_eq; /* Does system need an equinox? */
-
-/* Initialise */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Search the supplied element for the required sub-elements. */
- names[ 0 ] = "ICRS|GALACTIC_II|SUPER_GALACTIC|HEE|FK4|FK5|ECLIPTIC|GEO_C|GEO_D";
- names[ 1 ] = "TOPOCENTER";
- names[ 2 ] = "Name";
- names[ 3 ] = "SPHERICAL|CARTESIAN|UNITSPHERE|POLAR";
- max[ 0 ] = 1;
- max[ 1 ] = 1;
- max[ 2 ] = 1;
- max[ 3 ] = 1;
- min[ 0 ] = 1;
- min[ 1 ] = 1;
- min[ 2 ] = 0;
- min[ 3 ] = 1;
- scan = ScanIVOAElement( this, elem, 4, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Get the sky coordinate system specified in the element. */
- sys = astXmlGetName( scan->el[0][0] );
- need_eq = 0;
- dom = NULL;
-
-/* If the system is geodetic or geocentric, ignore height information if
- supplied. This is so we can get an approximation to an observatory
- position given in 3D, for use with SpecFrame. */
- ignore_h = 0;
- isgeod = sys && !strcmp( sys, "GEO_D" );
- isgeoc = sys && !strcmp( sys, "GEO_C" );
- if( isgeod || isgeoc ){
- if( AttrValueI( this, scan->el[3][0], "coord_naxes", 2, status ) != 2 ) {
- Report( this, elem, WARNING, "contains 3D spherical spatial "
- "coords (unsupported by AST - height information will "
- "be ignored)", status );
- ignore_h = 1;
- }
-
-/* If the system is geodetic ignore any attributes specifying a reference
- spheroid. */
- if( isgeod && astXmlGetNattr( scan->el[0][0] ) > 0 ) {
- Report( this, elem, WARNING, "contains reference spheroid "
- "(unsupported by AST - default values will be used)", status );
- }
- }
-
-/* Check that the spatial axes are longitude/latitude */
- if( strcmp( "SPHERICAL", astXmlGetName( scan->el[3][0] ) ) ){
- Report( this, elem, FAILURE, "contains non-spherical spatial "
- "coords (currently unsupported by AST)", status );
-
- } else if( !ignore_h && AttrValueI( this, scan->el[3][0], "coord_naxes", 2, status ) != 2 ) {
- Report( this, elem, FAILURE, "contains 3D spherical spatial "
- "coords (currently unsupported by AST)", status );
-
- } else if( AttrValueB( this, scan->el[3][0], "coord_vel", 0, status ) ) {
- Report( this, elem, FAILURE, "contains velocity coords", status );
-
-/* Now check for the supported sky coordinate systems and translate to the
- equivalent AST value. Note if the system needs an equinox to qualify it. */
- } else if( !strcmp( sys, "GALACTIC_II" ) ){
- sys = "GALACTIC";
- need_eq = 0;
-
- } else if( !strcmp( sys, "SUPER_GALACTIC" ) ){
- sys = "SUPERGALACTIC";
- need_eq = 0;
-
- } else if( !strcmp( sys, "HEE" ) ){
- sys = "HELIOECLIPTIC";
- need_eq = 0;
-
- } else if( !strcmp( sys, "FK4" ) ) {
- sys = "FK4";
- need_eq = 1;
-
- } else if( !strcmp( sys, "FK5" ) ) {
- sys = "FK5";
- need_eq = 1;
-
- } else if( !strcmp( sys, "ECLIPTIC" ) ) {
- sys = "ECLIPTIC";
- need_eq = 1;
-
- } else if( isgeoc ) {
- dom = "GEO_C";
- sys = "UNKNOWN";
- need_eq = 0;
-
- } else if( isgeod ) {
- dom = "GEO_D";
- sys = "UNKNOWN";
- need_eq = 0;
-
- } else {
- sys = "ICRS";
- need_eq = 0;
- }
-
-/* Extract the equinox if required. */
- if( need_eq ) {
- el = FindElement( this, scan->el[0][0], "Equinox", status );
- if( el ) {
- eq = astXmlGetValue( el, 0 );
- if( !eq ) Report( this, scan->el[0][0], WARNING, "contains an "
- "<Equinox> element which is not simply "
- "character data. The AST default (B1950 "
- "or J2000) will be used", status );
- } else {
- eq = NULL;
- Report( this, scan->el[0][0], WARNING, "contains no <Equinox> element. "
- "The AST default (B1950 or J2000) will be used", status );
- }
-
- } else {
- eq = NULL;
- }
-
-/* Create a suitable SkyFrame. */
- new = (AstObject *) astSkyFrame( "system=%s", status, sys);
- if( eq ) astSetC( new, "Equinox", eq );
- if( dom ) astSetDomain( new, dom );
-
- if( isgeod ){
- astSetLabel( new, 0, "Geodetic longitude" );
- astSetLabel( new, 1, "Geodetic latitude" );
-
- } else if( isgeoc ){
- astSetLabel( new, 0, "Geocentric longitude" );
- astSetLabel( new, 1, "Geocentric latitude" );
- }
-
-/* If the SpaceFrame has a <Name> element use it as the Frame title. */
- if( scan->count[2] ) astSetTitle( new, astXmlGetValue( scan->el[2][0], 0 ) );
-
-/* Free resources */
- scan = FreeIVOAScan( scan, status );
-
- }
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Object. */
- return (AstObject *) new;
-}
-
-static AstSystemType SpecSys( AstXmlChan *this, AstXmlElement *elem,
- const char *unit, int report, int *status ) {
-/*
-* Name:
-* SpecSys
-
-* Purpose:
-* Determine the spectral system described by a given units string.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstSystemType SpecSys( AstXmlChan *this, AstXmlElement *elem,
-* const char *unit, int report, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function determines the spectral system described by a given units
-* string. It optionally reports an error if the string is not
-* recognised.
-
-* Parameters:
-* this
-* Pointer to the XmlChan. Only used if "report" is non-zero.
-* elem
-* Pointer to the IVOA element to which the unit relates. Only used
-* if "report" is non-zero.
-* unit
-* Pointer to the units string.
-* report
-* If non-zero, then a failure is reported if the spectral system
-* cannot be determined from the supplied string.
-* status
-* Pointer to the inherited status variable.
-
-* Returned:
-* The spectral system, or AST__BADSYSTEM if an error occurs.
-
-*/
-
-/* Local Variables: */
- AstMapping *map; /* Mapping from supplied unit to default unitl */
- AstSystemType sys; /* System value corresponding to "unit" */
- char buff[200]; /* Buffer for failure message */
-
-/* Initialise */
- sys = AST__BADSYSTEM;
-
-/* Check inherited status */
- if( !astOK ) return sys;
-
-/* See if a Mapping can be found from the supplied units to "Hz". If
- so, the supplied units are assumed to describe frequency. */
- map = astUnitMapper( unit, "Hz", NULL, NULL );
- if( map ) {
- sys = AST__FREQ;
-
-/* Otherwise, see if a Mapping can be found from the supplied units to
- "m" (metre). If so, the supplied units are assumed to describe wavelength. */
- } else {
- map = astUnitMapper( unit, "m", NULL, NULL );
- if( map ) {
- sys = AST__WAVELEN;
-
-/* Otherwise, see if a Mapping can be found from the supplied units to
- "J" (Joule). If so, the supplied units are assumed to describe energy. */
- } else {
- map = astUnitMapper( unit, "J", NULL, NULL );
- if( map ) {
- sys = AST__ENERGY;
-
-/* Otherwise, see if a Mapping can be found from the supplied units to
- "m^-1" (per metre). If so, the supplied units are assumed to describe
- wave number. */
- } else {
- map = astUnitMapper( unit, "m^-1", NULL, NULL );
- if( map ) {
- sys = AST__WAVENUM;
-
-/* Otherwise, report an error if requested. */
- } else if( report ){
- sprintf( buff, "contains unsupported spectral units \"%s\"", unit );
- Report( this, elem, FAILURE, buff, status );
- }
- }
- }
- }
-
-/* Free resources */
- if( map ) map = astAnnul( map );
-
-/* Return the result. */
- return sys;
-}
-
-static AstRegion *SpectralReader( AstXmlChan *this, AstXmlElement *elem,
- AstFrame *frm, double *rf,
- AstKeyMap **anc, int *status ){
-/*
-* Name:
-* SpectralReader
-
-* Purpose:
-* Modify a Frame to take account of an STC <Spectral> element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstRegion *SpectralReader( AstXmlChan *this, AstXmlElement *elem,
-* AstFrame *frm, double *rf,
-* AstKeyMap **anc, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function reads the supplied STC <Spectral> element, and uses it,
-* if possible, to create the uncertainty associated with the spectral
-* axis in the supplied Frame.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA Spectral element.
-* frm
-* Pointer to the 1D spectral Frame.
-* rf
-* Point to double in which to return the rest frequency to be used
-* with any redshift axis. Value is returned in Hz. AST__BAD will
-* be returned if no rest frequency is found.
-* anc
-* Address of a location at which to put a pointer to a newly
-* created KeyMap. This KeyMap will contain ancillary information
-* from the Spectral. The keys identify the item of ancillary
-* information (Name, Value, Error, Resolution, Size, Pixel Size).
-* The value associated with the Name key is string containing
-* the Name item from the Spectral. The value associated with each of
-* the other keys is a pointer to a 1D Region within the supplied
-* Frame, corresponding to the value, error, resolution, etc. Keys
-* will not be present in the returned KeyMap if the corresponding
-* item of ancillary information is not present in the Spectral. A
-* NULL pointer is returned if there is no ancillary information at all.
-* status
-* Pointer to the inherited status variable.
-
-* Returned:
-* The uncertainty Region, or NULL if the supplied Spectral element
-* does not specify an uncertainty.
-
-*/
-
-/* Local Variables: */
- AstFrameSet *fs; /* FrameSet connecting "sf1" and "sf2" */
- AstMapping *map; /* Mapping from <Spectral> Frame to supplied Frame */
- AstRegion *r2; /* Region mapped into returned Frame */
- AstRegion *r3; /* Simplified Region mapped into returned Frame */
- AstRegion *r; /* Original Region */
- AstRegion *result; /* Returned uncertainty Region */
- AstSpecFrame *sf1; /* SpecFrame describing value element */
- AstSpecFrame *sf2; /* SpecFrame describing returned "rf" value */
- AstSystemType fsys; /* Spectral system from supplied Stc */
- IVOAScan *scan; /* Structure holding scan results */
- const char *name; /* Pointer to XML element name */
- const char *names[6]; /* Names of the subelements to be searched for */
- const char *unit; /* Pointer to Spectral's unit attribute string */
- double lbnd[ 1 ] ; /* Lower interval bounds */
- double ubnd[ 1 ] ; /* Upper interval bounds */
- double tmp; /* Mapped value */
- double v; /* Axis value */
- int max[6]; /* Max allowed occurrences of each name */
- int min[6]; /* Min allowed occurrences of each name */
-
-/* Initialise */
- result = NULL;
- *rf = AST__BAD;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Search the supplied element for the required sub-elements. */
- names[ 0 ] = "Name";
- names[ 1 ] = "Error";
- names[ 2 ] = "Value";
- names[ 3 ] = "Resolution";
- names[ 4 ] = "Size";
- names[ 5 ] = "PixSize";
- max[ 0 ] = 1;
- max[ 1 ] = 2;
- max[ 2 ] = 1;
- max[ 3 ] = 2;
- max[ 4 ] = 2;
- max[ 5 ] = 2;
- min[ 0 ] = 1;
- min[ 1 ] = 0;
- min[ 2 ] = 0;
- min[ 3 ] = 0;
- min[ 4 ] = 0;
- min[ 5 ] = 0;
- scan = ScanIVOAElement( this, elem, 6, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Create a KeyMap to return holding ancilary info, and put the Name into
- it. */
- *anc = astKeyMap( "", status );
- if( scan->count[0] > 0 ) astMapPut0C( *anc, AST__STCNAME,
- astXmlGetValue( scan->el[0][0], 0 ), NULL );
-
-/* The values represented by the <Spectral> element may not be in the same
- system,units, etc as the supplied SpecFrame. We will need to be able to
- convert from one to the other, so create a SpecFrame describing the
- system and units used by the <Spectral> element. If the element does not
- have a unit attribute, assume the values are in the supplied SpecFrame
- system and units. */
- unit = astXmlGetAttributeValue( elem, "unit" );
- if( unit ) {
- sf1 = astCopy( frm );
- fsys = SpecSys( this, elem, unit, 1, status );
- astSetSystem( sf1, fsys );
- astSetUnit( sf1, 0, unit );
-
-/* If the supplied Frame did not have any set System, use the values from
- the <Spectral> Frame. */
- if( !astTestSystem( frm ) ) {
- astSetSystem( frm, fsys );
- astSetUnit( frm, 0, unit );
- } else if( astGetSystem( frm ) == fsys && !astTestUnit( frm, 0 ) ) {
- astSetUnit( frm, 0, unit );
- }
-
- } else {
- sf1 = astClone( frm );
- }
-
-/* Find the Mapping from Spectral value to the supplied SpecFrame value */
- fs = astConvert( sf1, frm, "" );
- if( fs ) {
- map = astGetMapping( fs, AST__BASE, AST__CURRENT );
- fs = astAnnul( fs );
- } else {
- map = NULL;
- Report( this, elem, FAILURE, "connot convert AstroCoords "
- "spectral values to the required spectral system", status );
- }
-
-/* If this Spectral contains a frequency Value which can be read, obtain
- it. We will use the value to calculate the returned rest frequency. */
- if( scan->count[ 2 ] > 0 ) {
- name = astXmlGetName( scan->el[ 2 ][ 0 ] );
- if( name && !strcmp( name, "Value" ) ) {
- v = ElemValueD( this, scan->el[ 2 ][ 0 ], AST__BAD, status );
-
-/* Convert the value into the supplied SpecFrame system. Create an
- Interval describing it and store it in the returned ancillary keyMap.
- Use an Interval rather than a PointList since an Interval can be used
- within a Prism to extrude another Region, but a PointList cannot. */
- astTran1( map, 1, &v, 1, &tmp );
- r = (AstRegion *) astInterval( frm, &tmp, &tmp, NULL, "", status ) ;
- astMapPut0A( *anc, AST__STCVALUE, r, NULL );
- r = astAnnul( r );
-
-/* We also want the rest frequency in Hz. Create a SpecFrame describing Hz. */
- sf2 = astCopy( sf1 );
- astSet( sf2, "system=freq,unit=Hz", status );
-
-/* Find the Mapping from the supplied value to frequency in Hz. Use it to
- convert the rf value into Hz. */
- fs = astConvert( sf1, sf2, "" );
- if( fs ) {
- astTran1( fs, 1, &v, 1, rf );
- fs = astAnnul( fs );
- } else if( astOK ) {
- Report( this, elem, FAILURE, "Cannot convert spectral value"
- "to frequency in Hz.", status );
- }
- sf2 = astAnnul( sf2 );
- }
- }
-
-/* Check for Error values in the Spectral. */
- if( scan->count[ 1 ] > 0 ) {
-
-/* Issue a warning if more than 1 Error value was found. */
- if( scan->count[ 1 ] > 1 ) {
- Report( this, elem, WARNING, "contains more than one <Error>"
- " element. AST can only use the first", status );
- }
-
-/* Get the first Error value. */
- v = ElemValueD( this, scan->el[1][0], AST__BAD, status );
- if( v != AST__BAD ) {
-
-/* Create the upper and lower limits of an error bar centred on zero. */
- ubnd[ 0 ] = 0.5*fabs( v );
- lbnd[ 0 ] = -ubnd[ 0 ];
-
-/* Create an Interval within the Frame represented by the Spectral element.
- Map it into the supplied Frame. Simplify it. Store in the returned
- ancillary KeyMap. */
- r = (AstRegion *) astInterval( sf1, lbnd, ubnd, NULL, "", status );
- r2 = astMapRegion( r, map, frm );
- result = astSimplify( r2 );
- astMapPut0A( *anc, AST__STCERROR, result, NULL );
- r2 = astAnnul( r2 );
- r = astAnnul( r );
- }
- }
-
-/* Check for Resolution values in the Spectral. */
- if( scan->count[ 3 ] > 0 ) {
-
-/* Issue a warning if more than 1 value was found. */
- if( scan->count[ 3 ] > 1 ) {
- Report( this, elem, WARNING, "contains more than one <Resolution>"
- " element. AST can only use the first", status );
- }
-
-/* Get the first value. */
- v = ElemValueD( this, scan->el[3][0], AST__BAD, status );
- if( v != AST__BAD ) {
-
-/* Create the upper and lower limits of an interval centred on zero. */
- ubnd[ 0 ] = 0.5*fabs( v );
- lbnd[ 0 ] = -ubnd[ 0 ];
-
-/* Create an Interval within the Frame represented by the Spectral element.
- Map it into the supplied Frame. Simplify it. Store in the returned
- ancillary KeyMap. */
- r = (AstRegion *) astInterval( sf1, lbnd, ubnd, NULL, "", status );
- r2 = astMapRegion( r, map, frm );
- r3 = astSimplify( r2 );
- astMapPut0A( *anc, AST__STCRES, r3, NULL );
- r3 = astAnnul( r3 );
- r2 = astAnnul( r2 );
- r = astAnnul( r );
- }
- }
-
-/* Check for Size values in the Spectral. */
- if( scan->count[ 4 ] > 0 ) {
-
-/* Issue a warning if more than 1 value was found. */
- if( scan->count[ 4 ] > 1 ) {
- Report( this, elem, WARNING, "contains more than one <Size>"
- " element. AST can only use the first", status );
- }
-
-/* Get the first value. */
- v = ElemValueD( this, scan->el[4][0], AST__BAD, status );
- if( v != AST__BAD ) {
-
-/* Create the upper and lower limits of an interval centred on zero. */
- ubnd[ 0 ] = 0.5*fabs( v );
- lbnd[ 0 ] = -ubnd[ 0 ];
-
-/* Create an Interval within the Frame represented by the Spectral element.
- Map it into the supplied Frame. Simplify it. Store in the returned
- ancillary KeyMap. */
- r = (AstRegion *) astInterval( sf1, lbnd, ubnd, NULL, "", status );
- r2 = astMapRegion( r, map, frm );
- r3 = astSimplify( r2 );
- astMapPut0A( *anc, AST__STCSIZE, r3, NULL );
- r3 = astAnnul( r3 );
- r2 = astAnnul( r2 );
- r = astAnnul( r );
- }
- }
-
-/* Check for PixSize values in the Spectral. */
- if( scan->count[ 5] > 0 ) {
-
-/* Issue a warning if more than 1 value was found. */
- if( scan->count[ 5 ] > 1 ) {
- Report( this, elem, WARNING, "contains more than one <PixSize>"
- " element. AST can only use the first", status );
- }
-
-/* Get the first value. */
- v = ElemValueD( this, scan->el[5][0], AST__BAD, status );
- if( v != AST__BAD ) {
-
-/* Create the upper and lower limits of an interval centred on zero. */
- ubnd[ 0 ] = 0.5*fabs( v );
- lbnd[ 0 ] = -ubnd[ 0 ];
-
-/* Create an Interval within the Frame represented by the Spectral element.
- Map it into the supplied Frame. Simplify it. Store in the returned
- ancillary KeyMap. */
- r = (AstRegion *) astInterval( sf1, lbnd, ubnd, NULL, "", status );
- r2 = astMapRegion( r, map, frm );
- r3 = astSimplify( r2 );
- astMapPut0A( *anc, AST__STCPIXSZ, r3, NULL );
- r3 = astAnnul( r3 );
- r2 = astAnnul( r2 );
- r = astAnnul( r );
- }
- }
-
-/* Free resources. */
- scan = FreeIVOAScan( scan, status );
- sf1 = astAnnul( sf1 );
- map = astAnnul( map );
- }
-
-/* Return NULL if an error occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result */
- return result;
-
-}
-
-static AstObject *SpectralFrameReader( AstXmlChan *this,
- AstXmlElement *elem, int *status ) {
-/*
-* Name:
-* SpectralFrameReader
-
-* Purpose:
-* Make an AST Object from an IVOA SpectralFrame element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstObject *SpectralFrameReader( AstXmlChan *this, AstXmlElement *elem, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Object from the supplied IVOA
-* SpectralFrame element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA SpectralFrame element.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Object.
-
-*/
-
-/* Local Variables: */
- AstSpecFrame *new; /* Pointer to returned Object */
- IVOAScan *scan; /* Structure holding scan results */
- const char *names[2]; /* Names of the subelements to be searched for */
- const char *sor; /* StdOfRest for returned Frame */
- int max[2]; /* Max allowed occurrences of each name */
- int min[2]; /* Min allowed occurrences of each name */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return (AstObject *) new;
-
-/* Search the supplied element for the required sub-elements. */
- names[ 0 ] = "TOPOCENTER|BARYCENTER|HELIOCENTER|GEOCENTER|LSR|"
- "LSRK|GALACTIC_CENTER|LOCAL_GROUP|LSRD";
- names[ 1 ] = "Name";
- max[ 0 ] = 1;
- max[ 1 ] = 1;
- min[ 0 ] = 1;
- min[ 1 ] = 0;
- scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Get the name of the Element specifying the reference position and find
- the corresponding AST name.*/
- sor = astXmlGetName( scan->el[0][0] );
- if( !strcmp( sor, "TOPOCENTER" ) ) {
- sor = "Topo";
- } else if( !strcmp( sor, "BARYCENTER" ) ){
- sor = "Bary";
- } else if( !strcmp( sor, "GEOCENTER" ) ){
- sor = "Geo";
- } else if( !strcmp( sor, "LSR" ) || !strcmp( sor, "LSRK" ) ) {
- sor = "LSRK";
- } else if( !strcmp( sor, "LSRD" ) ) {
- sor = "LSRD";
- } else if( !strcmp( sor, "GALACTIC_CENTER" ) ) {
- sor = "Galactic";
- } else if( !strcmp( sor, "LOCAL_GROUP" ) ) {
- sor = "Local_group";
- } else if( !strcmp( sor, "HELIOCENTER" ) ) {
- sor = "Helio";
- } else if( astOK ){
- astError( AST__INTER, "SpectralFrameReader(XmlChan): Unknown "
- "standard of rest %s (internal AST programming error).", status,
- sor );
- }
-
-/* Issue a warning if the reference position includes an ephemeris. */
- if( FindElement( this, scan->el[0][0], "PlanetaryEphem", status ) ) {
- Report( this, scan->el[0][0], WARNING, "contains a <PlanetaryEphem> "
- "element which will be ignored", status );
- }
-
-/* Create a suitable SpecFrame. */
- new = astSpecFrame( "StdOfRest=%s", status, sor);
-
-/* If the SpectralFrame has a <Name> element use it as the SpecFrame title. */
- if( scan->count[1] ) astSetTitle( new, astXmlGetValue( scan->el[1][0], 0 ) );
-
-/* Free resources */
- scan = FreeIVOAScan( scan, status );
- }
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Object. */
- return (AstObject *) new;
-}
-
-static AstRegion *SpectralIntervalReader( AstXmlChan *this, AstXmlElement *elem,
- AstFrame *frm, int *status ){
-/*
-* Name:
-* SpectralIntervalReader
-
-* Purpose:
-* Make an AST Region from an IVOA SpectralInterval element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstRegion *SpectralIntervalReader( AstXmlChan *this, AstXmlElement *elem,
-* AstFrame *frm, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Region from the supplied IVOA
-* SpectralInterval element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA SpectralInterval element.
-* frm
-* Pointer to the Frame in which the returned Region should be
-* defined. If the Unit or System attribute is not set, this
-* function will decide on the values to be used, and set these
-* values in the supplied Frame before returning.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
- AstFrame *cfrm; /* Frame used to define returned Region */
- AstRegion *new; /* Pointer to returned Region */
- AstSystemType fsys; /* System value from supplied Frame */
- AstSystemType sys; /* System value corresponding to "unit" */
- IVOAScan *scan; /* Structure holding scan results */
- const char *funit; /* Unit string from supplied Frame */
- const char *names[2]; /* Names of the subelements to be searched for */
- char *title; /* Title string */
- const char *unit; /* Unit string from supplied element */
- double hilimit; /* Upper spectral limit */
- double lolimit; /* Lower spectral limit */
- int max[2]; /* Max allowed occurrences of each name */
- int min[2]; /* Min allowed occurrences of each name */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Search the supplied element for the required sub-elements. */
- names[ 0 ] = "LoLimit";
- names[ 1 ] = "HiLimit";
- min[ 0 ] = 0;
- min[ 1 ] = 0;
- max[ 0 ] = 1;
- max[ 1 ] = 1;
- scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Get the limits. */
- lolimit = scan->count[0] ? ElemValueD( this, scan->el[0][0], 0.0, status ) : AST__BAD;
- hilimit = scan->count[1] ? ElemValueD( this, scan->el[1][0], 0.0, status ) : AST__BAD;
-
-/* Get the Unit attribute from the element. */
- unit = astXmlGetAttributeValue( elem, "unit" );
- if( !unit ) {
- Report( this, elem, FAILURE, "contains no unit attribute", status );
- unit = "";
-
-/* Find the spectral system corresponding to these units. */
- } else {
- sys = SpecSys( this, elem, unit, 1, status );
-
-/* Take a copy of the supplied Frame and set its System and Units to
- these values. Ensure the title is preserved. */
- cfrm = astCopy( frm );
- if( astTestTitle( frm ) ) {
- title = (char *) astGetTitle( frm );
- if( title ) title = astStore( NULL, title, strlen( title ) + 1 );
- } else {
- title = NULL;
- }
- astSetSystem( cfrm, sys );
- astSetUnit( cfrm, 0, unit );
- if( title ) astSetTitle( cfrm, title );
-
-/* If at least one limit was found, create an Interval within this
- modified Frame. Otherwise create a negated NullRegion. */
- if( lolimit != AST__BAD || hilimit != AST__BAD ) {
- new = (AstRegion *) astInterval( cfrm, &lolimit, &hilimit, NULL, "", status );
- } else {
- new = (AstRegion *) astNullRegion( cfrm, NULL, "negated=1", status );
- }
-
-/* If the System of this Region differs from that of the supplied Frame,
- set it to the System of the supplied Frame. This will cause the
- encapsulated limits to be mapped into the new System. If the supplied
- Frame had no set system, set it to the system implied by th eunits in the
- supplied XML element. */
- if( astTestSystem( frm ) ) {
- fsys = astGetSystem( frm );
- if( fsys != sys ) astSetSystem( new, fsys );
- } else {
- astSetSystem( frm, sys );
- }
-
-/* Do the same with the Units. */
- if( astTestUnit( frm, 0 ) ) {
- funit = astGetUnit( frm, 0 );
- if( strcmp( funit, unit ) ) astSetUnit( new, 0, funit );
- } else {
- astSetUnit( frm, 0, unit );
- }
-
-/* Ensure the original titleis preserved. */
- if( title ) {
- astSetTitle( new, title );
- astSetTitle( frm, title );
- }
-
-/* Get any fill factor and lo/hi_include attributes from the element and
- assign to the returned Region. */
- FillAndLims( this, elem, new, status );
-
-/* Free resources */
- cfrm = astAnnul( cfrm );
- title = astFree( title );
- }
-
- scan = FreeIVOAScan( scan, status );
- }
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
- return new;
-}
-
-static AstRegion *SphereReader( AstXmlChan *this, AstXmlElement *elem,
- AstFrame *frm, int *status ){
-/*
-* Name:
-* SphereReader
-
-* Purpose:
-* Make an AST Region from an IVOA Sphere element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstRegion *SphereReader( AstXmlChan *this, AstXmlElement *elem,
-* AstFrame *frm, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Region from the supplied IVOA
-* Sphere element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA Sphere element.
-* frm
-* Pointer to the Frame in which the returned Region should be
-* defined. If the Unit or System attribute is not set, this
-* function will decide on the values to be used, and set these
-* values in the supplied Frame before returning.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
- AstFrame *cfrm; /* Frame used to define returned Region */
- AstMapping *map; /* Mapping between units */
- AstRegion *new; /* Pointer to returned Region */
- IVOAScan *scan; /* Structure holding scan results */
- char buff[200]; /* Message buffer */
- const char *funit; /* Unit string from supplied Frame */
- const char *names[2]; /* Names of the subelements to be searched for */
- const char *runit; /* Radius unit string from supplied element */
- const char *unit; /* Centre unit string from supplied element */
- double cen[3]; /* Centre */
- double rad; /* Radius */
- double tmp; /* New radius value */
- int i; /* Axis count */
- int max[2]; /* Max allowed occurrences of each name */
- int min[2]; /* Min allowed occurrences of each name */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Check the supplied Frame has the correct number of axes. */
- if( astGetNaxes( frm ) != 3 && astOK ) {
- astError( AST__INTER, "SphereReader(XmlChan): Supplied "
- "Frame does not have 3 axes (internal AST programming error )." , status);
- }
-
-/* Scan the supplied element for the required sub-elements */
- names[ 0 ] = "Radius";
- names[ 1 ] = "Center";
- min[ 0 ] = 1;
- min[ 1 ] = 1;
- max[ 0 ] = 1;
- max[ 1 ] = 1;
- scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Get the radius. */
- rad = ElemValueD( this, scan->el[0][0], 0.0, status );
-
-/* Get the centre. */
- cen[0] = 0.0;
- cen[1] = 0.0;
- cen[2] = 0.0;
- ElemListD( this, scan->el[1][0], 3, cen, status );
-
-/* Get the units attribute from the supplied element. This applies to the
- values describing the centre position. */
- unit = astXmlGetAttributeValue( elem, "unit" );
- if( !unit ) {
- Report( this, elem, FAILURE, "contains no unit attribute", status );
- unit = "";
- }
-
-/* Get the radius units attribute from the supplied element. */
- runit = astXmlGetAttributeValue( elem, "radius_unit" );
-
-/* If necessary, convert the radius to the same units as the centre. */
- if( runit && strcmp( unit, runit ) ) {
- map = astUnitMapper( runit, unit, NULL, NULL );
- if( map ) {
- astTran1( map, 1, &rad, 1, &tmp );
- rad = tmp;
- map = astAnnul( map );
-
- } else if( astOK ) {
- sprintf( buff, "has inconsistent units attributes \"%s\" and "
- "\"%s\"", unit, runit );
- Report( this, elem, FAILURE, buff, status );
- }
- }
-
-/* Take a copy of the supplied Frame and set its Units to the value
- obtained from the supplied element. */
- cfrm = astCopy( frm );
- astSetUnit( cfrm, 0, unit );
- astSetUnit( cfrm, 1, unit );
- astSetUnit( cfrm, 2, unit );
-
-/* Create a Circle within this modified Frame. */
- new = (AstRegion *) astCircle( cfrm, 1, cen, &rad, NULL, "", status );
-
-/* If the Unit of this Region differs from that of the supplied Frame,
- set it to the Unit of the supplied Frame. This will cause the
- encapsulated limits to be mapped into the new Unit. If the supplied
- Frame had no set Unit, set it to the units obtained from the supplied
- element. */
- for( i = 0; i < 3; i++ ) {
- if( astTestUnit( frm, i ) ) {
- funit = astGetUnit( frm, i );
- if( strcmp( funit, unit ) ) astSetUnit( new, i, funit );
- } else {
- astSetUnit( frm, i, unit );
- }
- }
-
-/* Get any fill factor and lo/hi_include attributes from the element and
- assign to the returned Region. */
- FillAndLims( this, elem, new, status );
-
-/* Free resources */
- cfrm = astAnnul( cfrm );
- scan = FreeIVOAScan( scan, status );
- }
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
- return new;
-}
-
-static AstObject *StcMetadataReader( AstXmlChan *this,
- AstXmlElement *elem, int *status ) {
-/*
-* Name:
-* StcMetadataReader
-
-* Purpose:
-* Make an AST Object from an IVOA STCMetadata element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstObject *StcMetadataReader( AstXmlChan *this,
-* AstXmlElement *elem, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Object from the supplied IVOA
-* STCMetadata element. The STCMetadata object can be of any subclass
-* (e.g. STCResourceProfile, SearchLocation, CatalogEntryLocation,
-* ObservationLocation, ObservatoryLocation).
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA STCMetadata element.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Object.
-*/
-
-/* Local Variables: */
- AstFrame *frm; /* Frame representing the STC object */
- AstKeyMap *anc; /* Map holding AstroCoords ancillary data */
- AstKeyMap **ancs; /* List of KeyMaps holding ancillary data */
- AstKeyMap *map1; /* Map holding AstroCoordSystem elements */
- AstKeyMap *map2; /* Map holding AstroCoordArea elements */
- AstKeyMap *map3; /* Map holding CoordSpec elements */
- AstKeyMap *map; /* Map to use */
- AstRegion *region; /* Region representing the STC object */
- AstRegion *tuncs[ 4 ]; /* Temporary uncertainty Regions */
- AstRegion *uncs[ 4 ]; /* Uncertainty Regions for returned STC */
- AstStc *stc; /* Pointer to returned Object (an Stc) */
- AstXmlContentItem *item; /* Pointer to content item */
- AstXmlElement *aca; /* Pointer to AstroCoordArea element to use */
- AstXmlElement *aco; /* Pointer to AstroCoords element to use */
- AstXmlElement *acs; /* Pointer to AstroCoordSystem element to use */
- char *text; /* Formatted item text */
- char buff[ 200 ]; /* Message buffer */
- const char *id; /* Value of ID attribute */
- const char *ido; /* Value of ID attribute */
- const char *name; /* Element name */
- const char *stc_class; /* STC subclass name */
- int gotunc; /* Have any uncertainty Regions been obtained? */
- int i; /* Index of content item within element */
- int j; /* Index into list of map keys */
- int narea; /* Number of AstroCoordArea elements found */
- int ncoord; /* Number of CoordSpec elements found */
- int nanc; /* No.of KeyMaps in "ancs" array */
- int nitem; /* No. of items of content in element */
- int nsys; /* Number of AstroCoordSystem elements found */
- int reported; /* Have multiple uncertainies been reported? */
- int used; /* Was the content item used? */
-
-/* Initialise. */
- stc = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return (AstObject *) stc;
-
-/* Avoid compiler warnings. */
- id = "";
-
-/* Get name of the the STCMetadata subclass represented by the supplied
- element. */
- stc_class = astXmlGetName( elem );
-
-/* Create KeyMaps to hold the required sub-elements. We will store the
- integer indices of the requried elements in these keymaps, using the
- associated Xml ID attribute values as the keys. */
- map1 = astKeyMap( "", status );
- map2 = astKeyMap( "", status );
- map3 = astKeyMap( "", status );
-
-/* Loop round all items in the elements contents. */
- nitem = astXmlGetNitem( elem );
- for( i = 0; i < nitem; i++ ) {
- item = astXmlGetItem( elem, i );
- used = 1;
-
-/* Ignore this item if it is not an element. */
- if( astXmlCheckType( item, AST__XMLELEM ) ) {
-
-/* Choose the KeyMap in which to save this item. */
- name = astXmlGetName( item );
- if( !strcmp( name, ASTRO_COORD_SYSTEM ) ){
- map = map1;
-
- } else if( !strcmp( name, ASTRO_COORD_AREA ) ){
- map = map2;
-
- } else if( !strcmp( name, ASTRO_COORDS ) ){
- map = map3;
-
- } else {
- map = NULL;
- used = 0;
- }
-
-/* If we are going to save the item, get the value of the ID attribute
- and check it. */
- if( map ) {
- id = astXmlGetAttributeValue( (AstXmlElement *) item, "ID" );
- if( !id ) {
- id = "";
- if( map != map3 ) {
- Report( this, elem, WARNING, "has no ID attribute. Assuming"
- "a null ID value", status );
- }
- }
-
-/* If the KeyMap already contains an object with this ID, issue a
- warning and skip the element. */
- if( astMapHasKey( map, id ) ) {
- if( map != map3 ) {
- sprintf( buff, "contains two or more %s elements with the "
- "same ID (\"%s\"). Only the first one will be used",
- name, id );
- Report( this, elem, WARNING, buff, status );
- } else {
- Report( this, elem, WARNING, "contains two or more AstroCoords "
- "elements. Only the first one will be used", status );
- }
-
-/* Otherwise, save the index of the item in the KeyMap, using the ID as the
- key. */
- } else {
- astMapPut0I( map, id, i, "" );
- }
- }
-
- } else {
- used = 0;
- }
-
-/* If this content item was not used, issue a warning unless it is a comment
- or white space. */
- if( !used && !astXmlCheckType( item, AST__XMLCOM ) &&
- !astXmlCheckType( item, AST__XMLWHITE ) ) {
- text = (char *) astXmlFormat( item );
- if( strlen( text ) > 30 ) text[ 30 ] = 0;
- sprintf( buff, "contains the following which is being ignored: \"%s\"",
- text );
- text = astFree( text );
- Report( this, elem, WARNING, buff, status );
- }
-
- }
-
-/* Note the number of each type of element found with unique ID values. */
- nsys = astMapSize( map1 );
- narea = astMapSize( map2 );
- ncoord = astMapSize( map3 );
-
-/* If any CoordArea elements were found, find the first one for which the
- coordesponding AstroCoordSystem is available. */
- acs = NULL;
- aca = NULL;
- for( j = 0; j < narea; j++ ) {
-
-/* Get the j'th key from "map2" (the ID associated with the j'th
- AstroCoordArea found in the supplied element) and retrieve the value
- associated with this key (the index "i" into the content of the
- supplied element at which the j'th AstroCoordArea is stored). */
- astMapGet0I( map2, astMapKey( map2, j ), &i );
-
-/* Get the i'th element in the supplied element. This will be the j'th
- AstroCoordArea. */
- aca = (AstXmlElement *) astXmlGetItem( elem, i );
-
-/* Get the "coord_system_id" attribute from this AstroCoordArea. Use null
- if not available. */
- id = astXmlGetAttributeValue( aca, "coord_system_id" );
- if( !id ) {
- id = "";
- Report( this, aca, WARNING, "has no coord_system_id attribute. "
- "Assuming a null coord_system_id value", status );
- }
-
-/* Get the index within the supplied element of the AstroCoordSystem with this
- ID. Jump forward if no AstroCoordSystem with this id is available. */
- if( astMapGet0I( map1, id, &i ) ) {
-
-/* Get a pointer to the AstroCoordSystem element with the required ID. */
- acs = (AstXmlElement *) astXmlGetItem( elem, i );
-
-/* Leave the AstroCoordArea loop. */
- break;
-
-/* Report a warning if no AstroCoordSystem with this id is available. */
- } else {
- sprintf( buff, "refers to an AstroCoordSystem with "
- "ID \"%s\", but no such AstroCoordSystem is available "
- "within the parent %s", id, stc_class );
- Report( this, aca, WARNING, buff, status );
- }
- }
-
-/* If we did not find a corresponding pair of AstroCoordSystem and
- AstroCoordArea, we either report a failure (if there were any
- AstroCoordAreas), or get a pointer the AstroCoordSystem referred to by
- the first AstroCoords element (we will create a Frame from this later). */
- if( !acs ) {
- aca = NULL;
-
-/* Report a warning if there were some AstroCoordArea tags but no matching
- AstroCoordSystem was found. */
- if( narea > 0 ) {
- Report( this, elem, WARNING, "does not contain a pair of "
- "matching AstroCoordArea and AstroCoordSystem tags", status );
-
-/* If there are no AstroCoordAreas in the supplied element, look for a
- pair of matching AstroCoords and AstroCoordSystem. The returned Region
- will represent a NullRegion within this system. */
- } else if( ncoord > 0 ) {
-
-/* Get the 1st key from "map3" (the ID associated with the 1st
- AstroCoords found in the supplied element) and retrieve the value
- associated with this key (the index "i" into the content of the
- supplied element at which the 1st AstroCoords is stored). */
- astMapGet0I( map3, astMapKey( map3, 0 ), &i );
-
-/* Get the i'th element in the supplied element. This will be the 1st
- AstroCoord. */
- aco = (AstXmlElement *) astXmlGetItem( elem, i );
-
-/* Get the "coord_system_id" attribute from this AstroCoords. Use null
- if not available. */
- id = astXmlGetAttributeValue( aco, "coord_system_id" );
- if( !id ) {
- id = "";
- Report( this, aco, WARNING, "has no coord_system_id attribute. "
- "Assuming a null coord_system_id value", status );
- }
-
-/* Get the index within the supplied element of the AstroCoordSystem with this
- ID. Jump forward if no AstroCoordSystem with this id is available. */
- if( astMapGet0I( map1, id, &i ) ) {
-
-/* Get a pointer to the AstroCoordSystem element with the required ID. */
- acs = (AstXmlElement *) astXmlGetItem( elem, i );
-
- } else {
- Report( this, aco, FAILURE, "no corresponding AstroCoordSystem found", status );
- }
-
-/* If there are no AstroCoords in the supplied element we create a
- NullRegion within the first supplied AstroCoordSystem. */
- } else if( nsys > 0 ) {
- if( astMapGet0I( map1, astMapKey( map1, 0 ), &i ) ) {
- acs = (AstXmlElement *) astXmlGetItem( elem, i );
- }
-
- } else {
- Report( this, elem, FAILURE, "no usable content found", status );
- }
- }
-
-/* Report failure if we still have no AstroCoordSystem. */
- if( !acs ) {
- Report( this, elem, FAILURE, "does not contain a usable AstroCoordSystem", status );
-
-/* Issue a warning if more than one AstroCoordArea was found. */
- } else {
- if( narea > 1 ) Report( this, elem, WARNING, "contains more than one "
- "AstroCoordArea. Only one will be used", status );
-
-/* Create a Frame from the ASTRO_COORD_SYSTEM. */
- frm = (AstFrame *) AstroCoordSystemReader( this, acs, status );
-
-/* Loop round all AstroCoords elements in the supplied element. */
- gotunc = 0;
- reported = 0;
- uncs[ 0 ] = NULL;
- uncs[ 1 ] = NULL;
- uncs[ 2 ] = NULL;
- uncs[ 3 ] = NULL;
- nanc = 0;
- ancs = NULL;
- for( j = 0; j < ncoord; j++ ) {
-
-/* Get the j'th key from "map3" (the ID associated with the j'th
- AstroCoords found in the supplied element) and retrieve the value
- associated with this key (the index "i" into the content of the
- supplied element at which the j'th AstroCoords is stored). */
- astMapGet0I( map3, astMapKey( map3, j ), &i );
-
-/* Get the i'th element in the supplied element. This will be the j'th
- AstroCoords. */
- aco = (AstXmlElement *) astXmlGetItem( elem, i );
-
-/* Get the "coord_system_id" attribute from this AstroCoords and compare it
- with the ID of the AstrocCoordSys being used. If they match, incorporate
- the effects of the AstroCoords into the "frm" Frame and get a set of 4
- Regions representing the uncertainty within each of the 4 STC domains
- (space, time, spectral, redshift). */
- ido = astXmlGetAttributeValue( aco, "coord_system_id" );
- if( ido && !strcmp( id, ido ) ) {
- if( AstroCoordsReader( this, aco, frm, tuncs, &anc, status ) ) {
- if( !gotunc ) {
- uncs[ 0 ] = tuncs[ 0 ];
- uncs[ 1 ] = tuncs[ 1 ];
- uncs[ 2 ] = tuncs[ 2 ];
- uncs[ 3 ] = tuncs[ 3 ];
- gotunc = 1;
- } else {
- if( tuncs[ 0 ] ) tuncs[ 0 ] = astAnnul( tuncs[ 0 ] );
- if( tuncs[ 1 ] ) tuncs[ 1 ] = astAnnul( tuncs[ 1 ] );
- if( tuncs[ 2 ] ) tuncs[ 2 ] = astAnnul( tuncs[ 2 ] );
- if( tuncs[ 3 ] ) tuncs[ 3 ] = astAnnul( tuncs[ 3 ] );
- if( !reported ) {
- Report( this, elem, WARNING, "contains more than one "
- "specification of the coordinate uncertainties. "
- "Only the first will be used", status );
- reported= 1;
- }
- }
- }
-
-/* If any ancillary information was read from the AstroCoords, add it to
- the list of ancillary information to be stored in the Stc structure. */
- if( anc ) {
- ancs = astGrow( ancs, nanc + 1, sizeof( AstKeyMap * ) );
- if( ancs ) ancs[ nanc++ ] = anc;
- }
- }
- }
-
-/* Now create a Region from this Frame and the ASTRO_COORD_AREA. Note,
- "aca" may be NULL in which case the returned Region will be NullRegion. */
- region = AstroCoordAreaReader( this, aca, frm, uncs, nanc, ancs, status );
-
-/* Re-centre the Regions describing ancillary information extracted from
- the AstroCoords elements. */
- ReCentreAnc( region, nanc, ancs, status );
-
-/* Now create a Stc object of the appropriate sub-class. */
- if( !strcmp( stc_class, STC_RESOURCE_PROFILE ) ) {
- stc = (AstStc *) astStcResourceProfile( region, nanc, ancs, "", status );
-
- } else if( !strcmp( stc_class, SEARCH_LOCATION ) ) {
- stc = (AstStc *) astStcSearchLocation( region, nanc, ancs, "", status );
-
- } else if( !strcmp( stc_class, CATALOG_ENTRY_LOCATION ) ) {
- stc = (AstStc *) astStcCatalogEntryLocation( region, nanc, ancs, "", status );
-
- } else if( !strcmp( stc_class, OBSERVATION_LOCATION ) ||
- !strcmp( stc_class, OBSERVATORY_LOCATION ) ) {
- stc = (AstStc *) astStcObsDataLocation( region, nanc, ancs, "", status );
-
- } else if( astOK ){
- astError( AST__INTER, "astRead(XmlChan): StcMetadataReader knows "
- "nothing about the %s class (internal AST programming "
- "error).", status, stc_class );
- }
-
-/* Get the ID attribute from the supplied element and store in the
- returned Object. */
- id = astXmlGetAttributeValue( elem, "ID" );
- if( id ) astSetIdent( stc, id );
-
-/* Free resources. */
- if( uncs[ 0 ] ) uncs[ 0 ] = astAnnul( uncs[ 0 ] );
- if( uncs[ 1 ] ) uncs[ 1 ] = astAnnul( uncs[ 1 ] );
- if( uncs[ 2 ] ) uncs[ 2 ] = astAnnul( uncs[ 2 ] );
- if( uncs[ 3 ] ) uncs[ 3 ] = astAnnul( uncs[ 3 ] );
- frm = astAnnul( frm );
- region = astAnnul( region );
- if( ancs ) {
- for( i = 0; i < nanc; i++ ) ancs[ i ] = astAnnul( ancs[ i ] );
- ancs = astFree( ancs );
- }
- }
-
- map1 = astAnnul( map1 );
- map2 = astAnnul( map2 );
- map3 = astAnnul( map3 );
-
-/* Return the pointer to the new Object. */
- return (AstObject *) stc;
-}
-
-static AstRegion *StcRegionReader( AstXmlChan *this, AstXmlElement *elem,
- AstFrame *frm, int *status ){
-/*
-* Name:
-* StcRegionReader
-
-* Purpose:
-* Make an AST Region from an IVOA Region element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstRegion *StcRegionReader( AstXmlChan *this, AstXmlElement *elem,
-* AstFrame *frm, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Region from the supplied IVOA
-* Region element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA Region element.
-* frm
-* Pointer to the 2D Frame in which the returned Region should be
-* defined. If the Unit attribute is not set, this function will
-* set it to the value supplied in "unit" before returning.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
- AstRegion *new; /* Pointer to returned Region */
- IVOAScan *scan; /* Structure holding scan results */
- const char *names[1]; /* Names of the subelements to be searched for */
- int max[1]; /* Max allowed occurrences of each name */
- int min[1]; /* Min allowed occurrences of each name */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Search the supplied element for a Region sub-element. */
- names[ 0 ] = "Intersection|Union|Negation|AllSky|Circle|Ellipse|Polygon|"
- "Convex|Box";
- min[ 0 ] = 1;
- max[ 0 ] = 1;
- scan = ScanIVOAElement( this, elem, 1, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Create the Region */
- new = RegionReader( this, scan->el[0][0], frm, status );
-
-/* Free resources */
- scan = FreeIVOAScan( scan, status );
- }
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
- return new;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a XmlChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "channel.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* XmlChan member function (over-rides the astTestAttrib protected
-* method inherited from the Channel class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a XmlChan's attributes.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* attrib
-* Pointer to a null terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstXmlChan *this; /* Pointer to the XmlChan structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the XmlChan structure. */
- this = (AstXmlChan *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* XmlIndent */
-/* --------- */
- if ( !strcmp( attrib, "xmlindent" ) ) {
- result = astTestXmlIndent( this );
-
-/* XmlLength */
-/* --------- */
- } else if ( !strcmp( attrib, "xmllength" ) ) {
- result = astTestXmlLength( this );
-
-/* XmlFormat */
-/* --------- */
- } else if ( !strcmp( attrib, "xmlformat" ) ) {
- result = astTestXmlFormat( this );
-
-/* XmlPrefix */
-/* --------- */
- } else if ( !strcmp( attrib, "xmlprefix" ) ) {
- result = astTestXmlPrefix( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static AstObject *TimeFrameReader( AstXmlChan *this,
- AstXmlElement *elem, int *status ) {
-/*
-* Name:
-* TimeFrameReader
-
-* Purpose:
-* Make an AST Object from an IVOA TimeFrame element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstObject *TimeFrameReader( AstXmlChan *this, AstXmlElement *elem, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Object from the supplied IVOA
-* TimeFrame element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA TimeFrame element.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Object.
-
-*/
-
-/* Local Variables: */
- AstTimeFrame *new; /* Pointer to returned Frame */
- IVOAScan *scan; /* Structure holding scan results */
- const char *names[3]; /* Names of the subelements to be searched for */
- const char *text; /* Pointer to Name value */
- int max[3]; /* Max allowed occurrences of each name */
- int min[3]; /* Min allowed occurrences of each name */
-
-/* Initialise */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return (AstObject *) new;
-
-/* Search the supplied element for the required sub-elements. */
- names[ 0 ] = "Name";
- names[ 1 ] = "TOPOCENTER";
- names[ 2 ] = "TimeScale|Timescale";
- min[ 0 ] = 0;
- max[ 0 ] = 1;
- min[ 1 ] = 0;
- max[ 1 ] = 1;
- min[ 2 ] = 1;
- max[ 2 ] = 1;
- scan = ScanIVOAElement( this, elem, 3, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Create a suitable TimeFrame. Set the timescale, but leave the other
- attributes unset since they will not be known until an AstronTimeType
- is read. Except for unit. We set unit to "d" (day) because all the
- time form,ats supported by STC have "d" as the default unit. This
- avoids bad publicity which arises from presentin (say) MJD values in
- units of "s" - which people will think is wrong until they have it
- explained. */
- new = astTimeFrame( "unit=d", status );
- astSetTimeScale( new, TimeScaleReader( this, scan->el[ 2 ][ 0 ], status ) );
-
-/* If the STC TimeFrame has a <Name> element use it as the AST TimeFrame title. */
- if( scan->count[ 0 ] > 0 ) {
- text = astXmlGetValue( scan->el[ 0 ][ 0 ], 0 );
- if( text ) astSetTitle( new, text );
- }
-
-/* Free resources. */
- scan = FreeIVOAScan( scan, status );
-
- }
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new= astAnnul( new );
-
-/* Return the pointer to the new Object. */
- return (AstObject *) new;
-}
-
-static AstRegion *TimeIntervalReader( AstXmlChan *this, AstXmlElement *elem,
- AstTimeFrame *frm, int *status ){
-/*
-* Name:
-* TimeIntervalReader
-
-* Purpose:
-* Make an AST Region from an IVOA TimeInterval element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstRegion *TimeIntervalReader( AstXmlChan *this, AstXmlElement *elem,
-* AstTimeFrame *frm, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Region from the supplied IVOA
-* TimeInterval element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA TimeInterval element.
-* frm
-* Pointer to the TimeFrame in which the returned Region should be
-* defined.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
- AstRegion *new; /* Pointer to returned Region */
- IVOAScan *scan; /* Structure holding scan results */
- const char *names[2]; /* Names of the subelements to be searched for */
- double start; /* Start time */
- double stop; /* Stop time */
- int max[2]; /* Max allowed occurrences of each name */
- int min[2]; /* Min allowed occurrences of each name */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Search the supplied element for the required sub-elements. */
- names[ 0 ] = "StartTime";
- names[ 1 ] = "StopTime";
- min[ 0 ] = 0;
- min[ 1 ] = 0;
- max[ 0 ] = 1;
- max[ 1 ] = 1;
- scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Get the limits. */
- start = scan->count[0] ? AstronTimeReader( this, scan->el[0][0], frm, status ) : AST__BAD;
- stop = scan->count[1] ? AstronTimeReader( this, scan->el[1][0], frm, status ) : AST__BAD;
-
-/* If at least one limit was found, create an Interval. Otherwise create
- a negated NullRegion. */
- if( start != AST__BAD || stop != AST__BAD ) {
-
-/* Use the stop or start time (converted to an MJD) as the Epoch within the
- Frame. */
- if( start != AST__BAD ) {
- astSetEpoch( frm, MakeMJD( frm, start, status ) );
- } else if( stop != AST__BAD ) {
- astSetEpoch( frm, MakeMJD( frm, stop, status ) );
- }
- new = (AstRegion *) astInterval( frm, &start, &stop, NULL, "", status );
- } else {
- new = (AstRegion *) astNullRegion( frm, NULL, "negated=1", status );
- }
-
-/* Get any fill factor and lo/hi_include attributes from the element and
- assign to the returned Region. */
- FillAndLims( this, elem, new, status );
-
-/* Free resources. */
- scan = FreeIVOAScan( scan, status );
-
- }
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
- return new;
-}
-
-static AstRegion *TimeReader( AstXmlChan *this, AstXmlElement *elem,
- AstTimeFrame *frm, double *epoch,
- AstKeyMap **anc, int *status ){
-/*
-* Name:
-* TimeReader
-
-* Purpose:
-* Modify a Frame to take account of an STC <Time> element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstRegion *TimeReader( AstXmlChan *this, AstXmlElement *elem,
-* AstTimeFrame *frm, double *epoch,
-* AstKeyMap **anc, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function reads the supplied STC <Time> element, and uses it,
-* if possible, to create the uncertainty associated with the time
-* axis in the supplied Frame.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA Time element.
-* frm
-* Pointer to the TimeFrame.
-* epoch
-* Pointer to double in which to return the epoch to be used
-* with other axes. Value is returned as an Modified Julian Date
-* in the barycentric dynamical timescale (TDB). AST__BAD will
-* be returned if the supplied Time element has no value.
-* anc
-* Address of a location at which to put a pointer to a newly
-* created KeyMap. This KeyMap will contain ancillary information
-* from the Time. The keys identify the item of ancillary
-* information (Name, Value, Error, Resolution, Size, Pixel Size).
-* The value associated with the Name key is string containing
-* the Name item from the Time. The value
-* associated with each of the other keys is a pointer to a 1D Region
-* within the supplied Frame, corresponding to the value, error,
-* resolution, etc. Keys will not be present in the returned KeyMap
-* if the corresponding item of ancillary information is not present
-* in the Time. A NULL pointer is returned if there is no
-* ancillary information at all.
-* status
-* Pointer to the inherited status variable.
-
-* Returned:
-* The uncertainty Region, or NULL if the supplied Time element
-* does not specify an uncertainty.
-
-*/
-
-/* Local Variables: */
- AstTimeFrame *cfrm; /* Pointer to copy of time axis */
- AstRegion *result; /* Returned uncertainty Region */
- AstRegion *r; /* Ancillary Region */
- IVOAScan *scan; /* Structure holding scan results */
- const char *funit; /* Pointer to Frame's unit attribute string */
- const char *names[6]; /* Names of the subelements to be searched for */
- const char *title; /* Pointer to Frame title string */
- const char *unit; /* Pointer to Time's unit attribute string */
- double lbnd[ 1 ] ; /* Lower interval bounds */
- double ubnd[ 1 ] ; /* Upper interval bounds */
- double value; /* Time value */
- double v; /* Ancillary value */
- int max[6]; /* Max allowed occurrences of each name */
- int min[6]; /* Min allowed occurrences of each name */
-
-/* Initialise */
- result = NULL;
- *epoch = AST__BAD;
- *anc = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Search the supplied element for the required sub-elements. */
- names[ 0 ] = "Name";
- names[ 1 ] = "Error";
- names[ 2 ] = "TimeInstant";
- names[ 3 ] = "Resolution";
- names[ 4 ] = "Size";
- names[ 5 ] = "PixSize";
- max[ 0 ] = 1;
- max[ 1 ] = 2;
- max[ 2 ] = 1;
- max[ 3 ] = 2;
- max[ 4 ] = 2;
- max[ 5 ] = 2;
- min[ 0 ] = 1;
- min[ 1 ] = 0;
- min[ 2 ] = 0;
- min[ 3 ] = 0;
- min[ 4 ] = 0;
- min[ 5 ] = 0;
- scan = ScanIVOAElement( this, elem, 6, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Create a KeyMap to return holding ancilary info, and put the Name into
- it. */
- *anc = astKeyMap( "", status );
- if( scan->count[0] > 0 ) astMapPut0C( *anc, AST__STCNAME,
- astXmlGetValue( scan->el[0][0], 0 ), NULL );
-
-/* Get any Unit attribute from the Time element. */
- unit = astXmlGetAttributeValue( elem, "unit" );
-
-/* We need to ensure the returned regions are mapped into units of "funit".
- If this is NULL it means that the returned regions are already in the
- required units. */
- funit = NULL;
-
-/* If the Time element has a unit attribute, we use it in preference to any
- units values in the supplied Frame. Take a copy of the time Frame and set
- its Units to this values. Ensure the title is preserved. */
- if( unit && astChrLen( unit ) ) {
- cfrm = astCopy( frm );
- if( astTestTitle( frm ) ) {
- title = (char *) astGetTitle( frm );
- if( title ) title = astStore( NULL, title, strlen( title ) + 1 );
- } else {
- title = NULL;
- }
- astSetUnit( cfrm, 0, unit );
- if( title ) astSetTitle( cfrm, title );
-
- if( astTestUnit( frm, 0 ) ) {
- funit = astGetUnit( frm, 0 );
- if( !strcmp( funit, unit ) ) {
- funit = NULL;
- } else {
- funit = astStore( NULL, funit, strlen( funit ) + 1 );
- }
- } else {
- astSetUnit( frm, 0, unit );
- }
-
- } else {
- cfrm = astClone( frm );
- title = NULL;
- }
-
-/* If this Time contains a Value which can be read, obtain it. Otherwise,
- issue a warning. We will use the value to calculate the returned epoch. */
- if( scan->count[ 2 ] > 0 ) {
- value = AstronTimeReader( this, scan->el[ 2 ][ 0 ], cfrm, status );
- *epoch = MakeMJD( cfrm, value, status );
-
-/* Ensure any relevant attribute values which were set by AstronTimeReader
- within "cfrm" are transferred to "frm". */
- if( astTestTimeScale( cfrm ) ) astSetTimeScale( frm, astGetTimeScale( cfrm ) );
- if( astTestSystem( cfrm ) ) astSetSystem( frm, astGetSystem( cfrm ) );
- if( astTestUnit( cfrm, 0 ) ) astSetUnit( frm, 0, astGetUnit( cfrm, 0 ) );
- if( astTestTimeOrigin( cfrm ) ) astSetTimeOrigin( frm, astGetTimeOrigin( cfrm ) );
-
-/* Create a Interval from it and store in the returned ancillary KeyMap. If
- the units of this Frame differs from that of the supplied Frame, set it
- to the units of the supplied Frame. This will cause the encapsulated
- limits to be mapped into the new units. Ensure the original title is
- preserved. Use an Interval rather than a PointList since an Interval
- can be used within a Prism to extrude another Region, but a PointList
- cannot. */
- r = (AstRegion *) astInterval( cfrm, &value, &value, NULL, "", status ) ;
- if( funit ) astSetUnit( r, 0, funit );
- if( title ) astSetTitle( r, title );
- astMapPut0A( *anc, AST__STCVALUE, r, NULL );
- r = astAnnul( r );
- }
-
-/* Does this Time contain any Error? */
- if( scan->count[ 1 ] > 0 ) {
-
-/* Issue a warning if more than 1 Error value was found. */
- if( scan->count[ 1 ] > 1 ) {
- Report( this, elem, WARNING, "contains more than one <Error>"
- " element. AST can only use the first", status );
- }
-
-/* Get the first Error value. */
- v = ElemValueD( this, scan->el[1][0], AST__BAD, status );
- if( v != AST__BAD ) {
-
-/* Create the upper and lower limits of an error bar centred on zero. */
- ubnd[ 0 ] = 0.5*fabs( v );
- lbnd[ 0 ] = -ubnd[ 0 ];
-
-/* Create an Interval within the time Frame. */
- result = (AstRegion *) astInterval( cfrm, lbnd, ubnd, NULL, "", status );
-
-/* If the units of this Frame differs from that of the supplied Frame,
- set it to the units of the supplied Frame. This will cause the
- encapsulated limits to be mapped into the new units. */
- if( funit ) astSetUnit( result, 0, funit );
-
-/* Ensure the original title is preserved. */
- if( title ) astSetTitle( result, title );
-
-/* Store in the returned ancillary KeyMap. */
- astMapPut0A( *anc, AST__STCERROR, result, NULL );
-
- }
- }
-
-/* Does this Time contain any Resolution? */
- if( scan->count[ 3 ] > 0 ) {
-
-/* Issue a warning if more than 1 Resolution value was found. */
- if( scan->count[ 3 ] > 1 ) {
- Report( this, elem, WARNING, "contains more than one <Resolution>"
- " element. AST can only use the first", status );
- }
-
-/* Get the first Resolution value. */
- v = ElemValueD( this, scan->el[3][0], AST__BAD, status );
- if( v != AST__BAD ) {
-
-/* Create the upper and lower limits of a bar centred on zero. */
- ubnd[ 0 ] = 0.5*fabs( v );
- lbnd[ 0 ] = -ubnd[ 0 ];
-
-/* Create an Interval within the time Frame. */
- r = (AstRegion *) astInterval( cfrm, lbnd, ubnd, NULL, "", status );
-
-/* If the units of this Frame differs from that of the supplied Frame,
- set it to the units of the supplied Frame. This will cause the
- encapsulated limits to be mapped into the new units. */
- if( funit ) astSetUnit( r, 0, funit );
-
-/* Ensure the original title is preserved. */
- if( title ) astSetTitle( r, title );
-
-/* Store in the returned ancillary KeyMap. */
- astMapPut0A( *anc, AST__STCRES, r, NULL );
- r = astAnnul( r );
- }
- }
-
-/* Does this Time contain any Size? */
- if( scan->count[ 4 ] > 0 ) {
-
-/* Issue a warning if more than 1 Size value was found. */
- if( scan->count[ 4 ] > 1 ) {
- Report( this, elem, WARNING, "contains more than one <Size>"
- " element. AST can only use the first", status );
- }
-
-/* Get the first Size value. */
- v = ElemValueD( this, scan->el[4][0], AST__BAD, status );
- if( v != AST__BAD ) {
-
-/* Create the upper and lower limits of a bar centred on zero. */
- ubnd[ 0 ] = 0.5*fabs( v );
- lbnd[ 0 ] = -ubnd[ 0 ];
-
-/* Create an Interval within the time Frame. */
- r = (AstRegion *) astInterval( cfrm, lbnd, ubnd, NULL, "", status );
-
-/* If the units of this Frame differs from that of the supplied Frame,
- set it to the units of the supplied Frame. This will cause the
- encapsulated limits to be mapped into the new units. */
- if( funit ) astSetUnit( r, 0, funit );
-
-/* Ensure the original title is preserved. */
- if( title ) astSetTitle( r, title );
-
-/* Store in the returned ancillary KeyMap. */
- astMapPut0A( *anc, AST__STCSIZE, r, NULL );
- r = astAnnul( r );
- }
- }
-
-/* Does this Time contain any PixSize? */
- if( scan->count[ 5 ] > 0 ) {
-
-/* Issue a warning if more than 1 PixSize value was found. */
- if( scan->count[ 5 ] > 1 ) {
- Report( this, elem, WARNING, "contains more than one <PixSize>"
- " element. AST can only use the first", status );
- }
-
-/* Get the first PixSize value. */
- v = ElemValueD( this, scan->el[5][0], AST__BAD, status );
- if( v != AST__BAD ) {
-
-/* Create the upper and lower limits of a bar centred on zero. */
- ubnd[ 0 ] = 0.5*fabs( v );
- lbnd[ 0 ] = -ubnd[ 0 ];
-
-/* Create an Interval within the time Frame. */
- r = (AstRegion *) astInterval( cfrm, lbnd, ubnd, NULL, "", status );
-
-/* If the units of this Frame differs from that of the supplied Frame,
- set it to the units of the supplied Frame. This will cause the
- encapsulated limits to be mapped into the new units. */
- if( funit ) astSetUnit( r, 0, funit );
-
-/* Ensure the original title is preserved. */
- if( title ) astSetTitle( r, title );
-
-/* Store in the returned ancillary KeyMap. */
- astMapPut0A( *anc, AST__STCPIXSZ, r, NULL );
- r = astAnnul( r );
- }
- }
-
-/* Free resources */
- if( funit ) funit = astFree( (void *) funit );
- cfrm = astAnnul( cfrm );
- if( title ) title = astFree( (void *) title );
- scan = FreeIVOAScan( scan, status );
- }
-
-/* Return NULL if an error occurred. */
- if( !astOK ) result = astAnnul( result );
-
-/* Return the result */
- return result;
-
-}
-
-static AstTimeScaleType TimeScaleReader( AstXmlChan *this, AstXmlElement *elem, int *status ){
-/*
-* Name:
-* TimeScaleReader
-
-* Purpose:
-* Read a time value from an IVOA TimeScale element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstTimeScaleType TimeScaleReader( AstXmlChan *this, AstXmlElement *elem, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function returns a value representing the timescale specified by
-* the supplied IVOA TimeScale element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA TimeScale element.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The timescale value (values are defined in timeframe.h).
-
-*/
-
-/* Local Variables: */
- AstTimeScaleType result;
- char buff[ 80 ];
- const char *tstxt;
-
-/* Initialise */
- result = AST__BADTS;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get the timescale string from the element, and find the corresponding
- AST timescale value (if any). */
- tstxt = astXmlGetValue( elem, 0 );
- if( tstxt ) {
-
- if( !strcmp( tstxt, "TT" ) ) {
- result = AST__TT;
-
- } else if( !strcmp( tstxt, "TDT" ) ) {
- result = AST__TT;
-
- } else if( !strcmp( tstxt, "ET" ) ) {
- Report( this, elem, WARNING, "TT will be used in place of ET", status );
- result = AST__TT;
-
- } else if( !strcmp( tstxt, "TDB" ) ) {
- result = AST__TDB;
-
- } else if( !strcmp( tstxt, "TCG" ) ) {
- result = AST__TCG;
-
- } else if( !strcmp( tstxt, "TCB" ) ) {
- result = AST__TCB;
-
- } else if( !strcmp( tstxt, "TAI" ) ) {
- result = AST__TAI;
-
- } else if( !strcmp( tstxt, "IAT" ) ) {
- result = AST__TAI;
-
- } else if( !strcmp( tstxt, "UTC" ) ) {
- result = AST__UTC;
-
- } else if( !strcmp( tstxt, "LST" ) ) {
- result = AST__LMST;
-
- } else {
- sprintf( buff, "contains unsupported timescale %s", tstxt );
- Report( this, elem, FAILURE, buff, status );
- result = AST__BADTS;
- }
- }
-
-/* Return the time value. */
- return result;
-}
-
-static AstRegion *UnionReader( AstXmlChan *this, AstXmlElement *elem,
- AstFrame *frm, int *status ){
-/*
-* Name:
-* UnionReader
-
-* Purpose:
-* Make an AST Region from an IVOA Union region element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstRegion *UnionReader( AstXmlChan *this, AstXmlElement *elem,
-* AstFrame *frm, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function makes a new AST Region from the supplied IVOA
-* Union region element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA Union region element.
-* frm
-* Pointer to the 2D Frame in which the returned Region should be
-* defined. If the Unit attribute is not set, this function will
-* set it to the value supplied in "unit" before returning.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
- AstRegion *new; /* Pointer to returned Region */
- AstRegion *reg; /* Pointer to component Region */
- AstRegion *tmp; /* Pointer to new Region */
- IVOAScan *scan; /* Structure holding scan results */
- const char *names[1]; /* Names of the subelements to be searched for */
- int i; /* Loop count */
- int max[1]; /* Max allowed occurrences of each name */
- int min[1]; /* Min allowed occurrences of each name */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Search the supplied element for a Region sub-element. */
- names[ 0 ] = "Intersection|Union|Negation|AllSky|Circle|Ellipse|Polygon|"
- "Convex|Box";
- min[ 0 ] = 2;
- max[ 0 ] = INT_MAX;
- scan = ScanIVOAElement( this, elem, 1, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Create Regions from all the component region elements, and combine
- them into nested CmpRegions, using the boolean OR operator to combine
- them. */
- new = RegionReader( this, scan->el[0][0], frm, status );
- for( i = 1; i < scan->count[0]; i++ ) {
- reg = RegionReader( this, scan->el[0][i], frm, status );
- tmp = (AstRegion *) astCmpRegion( new, reg, AST__OR, "", status );
- reg = astAnnul( reg );
- (void) astAnnul( new );
- new = tmp;
- }
-
-/* Get any fill factor from the element and assign to the returned Region. */
- FillAndLims( this, elem, new, status );
-
-/* Free resources */
- scan = FreeIVOAScan( scan, status );
- }
-
-/* Annul any returned Frame if an error has occurred. */
- if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
- return new;
-}
-
-static int Use( AstXmlChan *this, int set, int helpful, int *status ) {
-/*
-* Name:
-* Use
-
-* Purpose:
-* Decide whether to write a value to a data sink.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "channel.h"
-* int Use( AstXmlChan *this, int set, int helpful, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function decides whether a value supplied by a class "Dump"
-* function, via a call to one of the astWrite... protected
-* methods, should actually be written to the data sink associated
-* with a XmlChan.
-*
-* This decision is based on the settings of the "set" and
-* "helpful" flags supplied to the astWrite... method, plus the
-* attribute settings of the XmlChan.
-
-* Parameters:
-* this
-* A pointer to the XmlChan.
-* set
-* The "set" flag supplied.
-* helpful
-* The "helpful" value supplied.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the value should be written out, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global error status set or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- int full; /* Full attribute value */
- int result; /* Result value to be returned */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* If "set" is non-zero, then so is the result ("set" values must
- always be written out). */
- result = ( set != 0 );
-
-/* Otherwise, obtain the value of the XmlChan's Full attribute. */
- if ( !set ) {
- full = astGetFull( this );
-
-/* If Full is positive, display all values, if zero, display only
- "helpful" values, if negative, display no (un-"set") values. */
- if ( astOK ) result = ( ( helpful && ( full > -1 ) ) || ( full > 0 ) );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int Ustrcmp( const char *a, const char *b, int *status ){
-/*
-* Name:
-* Ustrcmp
-
-* Purpose:
-* A case blind version of strcmp.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* int Ustrcmp( const char *a, const char *b, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* Returns 0 if there are no differences between the two strings, and 1
-* otherwise. Comparisons are case blind.
-
-* Parameters:
-* a
-* Pointer to first string.
-* b
-* Pointer to second string.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero if the strings match, otherwise one.
-
-* Notes:
-* - This function does not consider the sign of the difference between
-* the two strings, whereas "strcmp" does.
-* - This function attempts to execute even if an error has occurred.
-
-*/
-
-/* Local Variables: */
- const char *aa; /* Pointer to next "a" character */
- const char *bb; /* Pointer to next "b" character */
- int ret; /* Returned value */
-
-/* Initialise the returned value to indicate that the strings match. */
- ret = 0;
-
-/* Initialise pointers to the start of each string. */
- aa = a;
- bb = b;
-
-/* Loop round each character. */
- while( 1 ){
-
-/* We leave the loop if either of the strings has been exhausted. */
- if( !(*aa ) || !(*bb) ){
-
-/* If one of the strings has not been exhausted, indicate that the
- strings are different. */
- if( *aa || *bb ) ret = 1;
-
-/* Break out of the loop. */
- break;
-
-/* If neither string has been exhausted, convert the next characters to
- upper case and compare them, incrementing the pointers to the next
- characters at the same time. If they are different, break out of the
- loop. */
- } else {
-
- if( toupper( (int) *(aa++) ) != toupper( (int) *(bb++) ) ){
- ret = 1;
- break;
- }
-
- }
-
- }
-
-/* Return the result. */
- return ret;
-
-}
-
-static int Ustrncmp( const char *a, const char *b, size_t n, int *status ){
-/*
-* Name:
-* Ustrncmp
-
-* Purpose:
-* A case blind version of strncmp.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* int Ustrncmp( const char *a, const char *b, size_t n, int *status )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* Returns 0 if there are no differences between the first "n"
-* characters of the two strings, and 1 otherwise. Comparisons are
-* case blind.
-
-* Parameters:
-* a
-* Pointer to first string.
-* b
-* Pointer to second string.
-* n
-* The maximum number of characters to compare.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Zero if the strings match, otherwise one.
-
-* Notes:
-* - This function does not consider the sign of the difference between
-* the two strings, whereas "strncmp" does.
-* - This function attempts to execute even if an error has occurred.
-
-*/
-
-/* Local Variables: */
- const char *aa; /* Pointer to next "a" character */
- const char *bb; /* Pointer to next "b" character */
- int i; /* Character index */
- int ret; /* Returned value */
-
-/* Initialise the returned value to indicate that the strings match. */
- ret = 0;
-
-/* Initialise pointers to the start of each string. */
- aa = a;
- bb = b;
-
-/* Compare up to "n" characters. */
- for( i = 0; i < (int) n; i++ ){
-
-/* We leave the loop if either of the strings has been exhausted. */
- if( !(*aa ) || !(*bb) ){
-
-/* If one of the strings has not been exhausted, indicate that the
- strings are different. */
- if( *aa || *bb ) ret = 1;
-
-/* Break out of the loop. */
- break;
-
-/* If neither string has been exhausted, convert the next characters to
- upper case and compare them, incrementing the pointers to the next
- characters at the same time. If they are different, break out of the
- loop. */
- } else {
-
- if( toupper( (int) *(aa++) ) != toupper( (int) *(bb++) ) ){
- ret = 1;
- break;
- }
-
- }
-
- }
-
-/* Return the result. */
- return ret;
-
-}
-
-static int VertexReader( AstXmlChan *this, AstXmlElement *elem, double *x,
- double *y, int *status ){
-/*
-* Name:
-* VertexReader
-
-* Purpose:
-* Read a position from an IVOA Vertex element.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* int VertexReader( AstXmlChan *this, AstXmlElement *elem, double *x,
-* double *y )
-
-* Class Membership:
-* XmlChan member function.
-
-* Description:
-* This function reads a 2D position from the supplied IVOA Vertex
-* element.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* elem
-* Pointer to the IVOA Vertex element.
-* x
-* Pointer to the double in which to put the returned X value.
-* y
-* Pointer to the double in which to put the returned Y value.
-
-* Returned Value:
-* Non-zero if the <Vertex> contains a <pole> tag.
-
-*/
-
-/* Local Variables: */
- IVOAScan *scan; /* Structure holding scan results */
- const char *names[2]; /* Names of the subelements to be searched for */
- double xy[ 2 ]; /* Axis values read from Position */
- int max[2]; /* Max allowed occurrences of each name */
- int min[2]; /* Min allowed occurrences of each name */
- int result; /* Returned value */
-
-/* Check the global error status. */
- if ( !astOK ) return 0;
-
-/* Initialise */
- result = 0;
- *x = AST__BAD;
- *y = AST__BAD;
-
-/* Search the supplied element for the required sub-elements. */
- names[ 0 ] = "Position";
- max[ 0 ] = 1;
- min[ 0 ] = 1;
- names[ 1 ] = "SmallCircle";
- max[ 1 ] = 1;
- min[ 1 ] = 0;
- scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
- if( scan ) {
-
-/* Get the axis values from the Position element. */
- xy[ 0 ] = AST__BAD;
- xy[ 1 ] = AST__BAD;
- ElemListD( this, scan->el[0][0], 2, xy, status );
- *x = xy[ 0 ];
- *y = xy[ 1 ];
-
-/* Get any SmallCircle element. If it has a Pole issue a warning. */
- result = scan->count[ 1 ];
- if( result ) {
- if( FindElement( this, scan->el[1][0], "Pole", status ) ) {
- Report( this, scan->el[1][0], WARNING, "contains a <Pole> "
- "tag (poles are not supported by AST)", status );
- }
- }
-
-/* Free resources */
- scan = FreeIVOAScan( scan, status );
- }
-
- return result;
-}
-
-static void WriteBegin( AstChannel *this_channel, const char *class,
- const char *comment, int *status ) {
-/*
-* Name:
-* WriteBegin
-
-* Purpose:
-* Write a "Begin" data item to a data sink.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* void WriteBegin( AstChannel *this_channel, const char *class,
-* const char *comment, int *status )
-
-* Class Membership:
-* XmlChan member function (over-rides the protected
-* astWriteBegin method inherited from the Channel class).
-
-* Description:
-* This function writes a "Begin" data item to the data sink
-* associated with a Channel, so as to begin the output of a new
-* Object definition.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* class
-* Pointer to a constant null-terminated string containing the
-* name of the class to which the Object belongs.
-* comment
-* Pointer to a constant null-terminated string containing a
-* textual comment to be associated with the "Begin"
-* item. Normally, this will describe the purpose of the Object.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The comment supplied may not actually be used, depending on
-* the nature of the Channel supplied.
-*/
-
-/* Local Variables: */
- AstXmlChan *this; /* A pointer to the XmlChan structure. */
- AstXmlElement *elem; /* The XML element to hodl the new AST object */
- const char *pref; /* XML namespace prefix to use */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the XmlChan structure. */
- this = (AstXmlChan *) this_channel;
-
-/* If this is a top level object (i.e. if there is no container element),
- reset all the other values in the XmlChan for safety. */
- if( !this->container ) {
- this->objectname = NULL;
- this->objectset = 1;
- this->objectcomment = NULL;
- }
-
-/* Initialise a flag to indicate that the next "IsA" item should not be
- written. This flag will be changed if and when an item is added which
- related to the class described by the "IsA" item. Save the old value
- first. */
- this->write_isa = 0;
-
-/* Store the namespace prefix. */
- pref = astGetXmlPrefix( this );
-
-/* Create a new XmlElement with a name equal to the AST class name of the
- object being dumped (and no namespace prefix), and add it into the
- current container (i.e. parent) element. */
- elem = astXmlAddElement( this->container, class, pref );
-
-/* If this is a top level container, store the namespace URI for
- the element, either default or named depending on the value of
- XmlPrefix. */
- if( !this->container ) astXmlAddURI( elem, pref, AST__XMLNS );
-
-/* If non-blank, append a "Label" atttribute to the element holding the
- name of the object (stored in the XmlChan structure). */
- if( this->objectname ) astXmlAddAttr( elem, LABEL, this->objectname, NULL );
-
-/* If the object has all default values, store a true value for the
- DEFAULT attribute. */
- if( !this->objectset ) astXmlAddAttr( elem, DEFAULT, TRUE, NULL );
-
-/* Add commments if required. */
- if( astGetComment( this_channel ) ) {
-
-/* If we are adding comments, and if a comment was supplied as a
- parameter to this function, then store the commment as an attribute of
- the element. This comment describes the class function as a whole, not
- the specific usage of this instance of the class (this is given by the
- comment in this->objectcomment). */
- if( comment && *comment ) astXmlAddComment( elem, 0, comment );
-
-/* If the object has a usage comment, add it to the content of the
- element if required. */
- if( this->objectcomment ) astXmlAddAttr( elem, DESC, this->objectcomment, NULL );
- }
-
-/* Make the new element the current container. */
- this->container = (AstXmlParent *) elem;
-
-/* If an error has occurred, annul the container element in the XmlChan. */
- if( !astOK ) this->container = astXmlAnnulTree( this->container );
-
-}
-
-static void WriteDouble( AstChannel *this_channel, const char *name,
- int set, int helpful,
- double value, const char *comment, int *status ) {
-/*
-* Name:
-* WriteDouble
-
-* Purpose:
-* Write a double value to a data sink.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* void WriteDouble( AstChannel *this, const char *name,
-* int set, int helpful,
-* double value, const char *comment, int *status )
-
-* Class Membership:
-* XmlChan member function (over-rides the protected
-* astWriteDouble method inherited from the Channel class).
-
-* Description:
-* This function writes a named double value, representing the
-* value of a class instance variable, to the data sink associated
-* with a Channel. It is intended for use by class "Dump" functions
-* when writing out class information which will subsequently be
-* re-read.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* name
-* Pointer to a constant null-terminated string containing the
-* name to be used to identify the value in the external
-* representation. This will form the key for identifying it
-* again when it is re-read. The name supplied should be unique
-* within its class.
-*
-* Mixed case may be used and will be preserved in the external
-* representation (where possible) for cosmetic effect. However,
-* case is not significant when re-reading values.
-*
-* It is recommended that a maximum of 6 alphanumeric characters
-* (starting with an alphabetic character) be used. This permits
-* maximum flexibility in adapting to standard external data
-* representations (e.g. FITS).
-* set
-* If this is zero, it indicates that the value being written is
-* a default value (or can be re-generated from other values) so
-* need not necessarily be written out. Such values will
-* typically be included in the external representation with
-* (e.g.) a comment character so that they are available to
-* human readers but will be ignored when re-read. They may also
-* be completely omitted in some circumstances.
-*
-* If "set" is non-zero, the value will always be explicitly
-* included in the external representation so that it can be
-* re-read.
-* helpful
-* This flag provides a hint about whether a value whose "set"
-* flag is zero (above) should actually appear at all in the
-* external representaton.
-*
-* If the external representation allows values to be "commented
-* out" then, by default, values will be included in this form
-* only if their "helpful" flag is non-zero. Otherwise, they
-* will be omitted entirely. When possible, omitting the more
-* obscure values associated with a class is recommended in
-* order to improve readability.
-*
-* This default behaviour may be further modified if the
-* Channel's Full attribute is set - either to permit all values
-* to be shown, or to suppress non-essential information
-* entirely.
-* value
-* The value to be written.
-* comment
-* Pointer to a constant null-terminated string containing a
-* textual comment to be associated with the value.
-*
-* Note that this comment may not actually be used, depending on
-* the nature of the Channel supplied and the setting of its
-* Comment attribute.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define BUFF_LEN 100 /* Size of local formatting buffer */
-
-/* Local Variables: */
- AstXmlChan *this; /* A pointer to the XmlChan structure. */
- AstXmlElement *elem; /* Pointer to new element */
- char buff[ BUFF_LEN + 1 ]; /* Local formatting buffer */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the XmlChan structure. */
- this = (AstXmlChan *) this_channel;
-
-/* If the object to be written is a component of a default AST object (i.e.
- an object which is "not set"), then we do not write out this item. */
- if( this->objectset ) {
-
-/* Use the "set" and "helpful" flags, along with the Channel's
- attributes to decide whether this value should actually be
- written. */
- if( Use( this, set, helpful, status ) ) {
-
-/* Create a new XmlElement with a name of ATTR (and no namespace
- prefix), and add it into the current container (i.e. parent) element. */
- elem = astXmlAddElement( this->container, ATTR,
- astGetXmlPrefix( this ) );
-
-/* Add a NAME attribute to this element containing the item name. */
- astXmlAddAttr( elem, NAME, name, NULL );
-
-/* Format the value as a string and store it as the VALUE attribute.
- Make sure "-0" isn't produced. */
- (void) sprintf( buff, "%.*g", DBL_DIG, value );
- if ( !strcmp( buff, "-0" ) ) {
- buff[ 0 ] = '0';
- buff[ 1 ] = '\0';
- }
- astXmlAddAttr( elem, VALUE, buff, NULL );
-
-/* If we are adding comments, and if a comment was supplied as a
- parameter to this function, then store the commment as an attribute of
- the element. */
- if( comment && *comment && astGetComment( this_channel ) ) {
- astXmlAddAttr( elem, DESC, comment, NULL );
- }
-
-/* If the object has all default values, store a true value for the
- DEFAULT attribute. */
- if( !set ) astXmlAddAttr( elem, DEFAULT, TRUE, NULL );
-
-/* Initialise a flag to indicate that the next "IsA" item should be
- written. */
- this->write_isa = 1;
- }
- }
-
-/* If an error has occurred, annul the container element in the XmlChan. */
- if( !astOK ) this->container = astXmlAnnulTree( this->container );
-
-/* Undefine macros local to this function. */
-#undef BUFF_LEN
-}
-
-static void WriteEnd( AstChannel *this_channel, const char *class, int *status ) {
-/*
-* Name:
-* WriteEnd
-
-* Purpose:
-* Write an "End" data item to a data sink.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* void WriteEnd( AstChannel *this, const char *class, int *status )
-
-* Class Membership:
-* XmlChan member function (over-rides the protected
-* astWriteEnd method inherited from the Channel class).
-
-* Description:
-* This function writes an "End" data item to the data sink
-* associated with a Channel. This item delimits the end of an
-* Object definition.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* class
-* Pointer to a constant null-terminated string containing the
-* class name of the Object whose definition is being terminated
-* by the "End" item.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstXmlChan *this; /* Pointer to the XmlChan structure */
- AstXmlParent *parent; /* Pointer to parent element */
- char *d; /* Pointer to end of next sub-string */
- char *c; /* Pointer to start of next sub-string */
- char *text; /* Pointer to complete string */
- int mxlen; /* Max allowed length of text */
-
-#ifdef DEBUG
- int nobj; /* No. of XmlObjects in existence */
-#endif
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-#ifdef DEBUG
-/* Save the number of XmlObjects currently in existenece. */
- nobj = astXmlTrace(3);
-#endif
-
-/* Obtain a pointer to the XmlChan structure. */
- this = (AstXmlChan *) this_channel;
-
-/* Get the parent of the current container element. */
- if( this->container ) {
- parent = astXmlGetParent( this->container );
-
-/* If the current container element has no parent, we have completed the
- construction of the in-memory XML representation of the AST object being
- written out. In this case, we convert the in-memory representation
- into a set of strings and write them out using the supplied sink
- function. */
- if( !parent ) {
-
-/* First get a single string holding the complete formatted XML
- representation of the AST object. */
- if( astGetXmlIndent( this ) ) {
- text = (char *) astXmlShow( this->container );
- } else {
- text = (char *) astXmlFormat( this->container );
- }
-
-/* Now, if we have any text, split it into separate lines. The end of a line
- is indicated by a "\n" character in the text returned by astXmlFormat. */
- if( text ) {
-
-/* Get the maximum allowed line length. */
- mxlen = astGetXmlLength( this );
-
-/* Loop round locating each '\n' character in the string. Replace the
- '\n' character by 0, so that the previous part of the string is then
- null terminated, and write it out using the astPutNextText method
- (splitting the text up into lines no longer than "mxlen"). */
- c = text;
- d = strchr( c, '\n' );
- while( d ) {
- *d = 0;
- OutputText( this, c, mxlen, status );
- c = d + 1;
- d = strchr( c, '\n' );
- }
-
-/* Write out any text following the last '\n' character. */
- if( *c ) OutputText( this, c, mxlen, status );
-
-/* Free the memory holding the text and in-memory representations of the AST
- Object. */
- text = astFree( (void *) text );
- astXmlRemoveItem( this->container );
- this->container = astXmlAnnul( this->container );
-
-#ifdef DEBUG
-/* Report an error if there is a memory leak. */
- if( astXmlTrace(3) > nobj && astOK ) {
- astError( AST__INTER, "astWriteEnd(XmlChan): %d XmlObjects "
- "remain in existence - should be %d (internal AST "
- "programming error).", status, astXmlTrace(3), nobj );
- }
-#endif
-
- }
- }
-
-/* Reset the current container element to be the parent found above. */
- if( !parent || astXmlCheckType( parent, AST__XMLELEM ) ) {
- this->container = parent;
- } else if( astOK ) {
- astError( AST__INTER, "astWriteEnd(XmlChan): Cannot update "
- "container: parent is not an XmlElement (internal "
- "AST programming error)." , status);
- }
- }
-
-/* If an error has occurred, annul the container element in the XmlChan. */
- if( !astOK ) this->container = astXmlAnnulTree( this->container );
-
-}
-
-static void WriteInt( AstChannel *this_channel, const char *name, int set, int helpful,
- int value, const char *comment, int *status ) {
-/*
-* Name:
-* WriteInt
-
-* Purpose:
-* Write an integer value to a data sink.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* void WriteInt( AstChannel *this, const char *name, int set, int helpful,
-* int value, const char *comment, int *status )
-
-* Class Membership:
-* XmlChan member function (over-rides the protected
-* astWriteInt method inherited from the Channel class).
-
-* Description:
-* This function writes a named integer value, representing the
-* value of a class instance variable, to the data sink associated
-* with a Channel. It is intended for use by class "Dump" functions
-* when writing out class information which will subsequently be
-* re-read.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* name
-* Pointer to a constant null-terminated string containing the
-* name to be used to identify the value in the external
-* representation. This will form the key for identifying it
-* again when it is re-read. The name supplied should be unique
-* within its class.
-*
-* Mixed case may be used and will be preserved in the external
-* representation (where possible) for cosmetic effect. However,
-* case is not significant when re-reading values.
-*
-* It is recommended that a maximum of 6 alphanumeric characters
-* (starting with an alphabetic character) be used. This permits
-* maximum flexibility in adapting to standard external data
-* representations (e.g. FITS).
-* set
-* If this is zero, it indicates that the value being written is
-* a default value (or can be re-generated from other values) so
-* need not necessarily be written out. Such values will
-* typically be included in the external representation with
-* (e.g.) a comment character so that they are available to
-* human readers but will be ignored when re-read. They may also
-* be completely omitted in some circumstances.
-*
-* If "set" is non-zero, the value will always be explicitly
-* included in the external representation so that it can be
-* re-read.
-* helpful
-* This flag provides a hint about whether a value whose "set"
-* flag is zero (above) should actually appear at all in the
-* external representaton.
-*
-* If the external representation allows values to be "commented
-* out" then, by default, values will be included in this form
-* only if their "helpful" flag is non-zero. Otherwise, they
-* will be omitted entirely. When possible, omitting the more
-* obscure values associated with a class is recommended in
-* order to improve readability.
-*
-* This default behaviour may be further modified if the
-* Channel's Full attribute is set - either to permit all values
-* to be shown, or to suppress non-essential information
-* entirely.
-* value
-* The value to be written.
-* comment
-* Pointer to a constant null-terminated string containing a
-* textual comment to be associated with the value.
-*
-* Note that this comment may not actually be used, depending on
-* the nature of the Channel supplied and the setting of its
-* Comment attribute.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define BUFF_LEN 50 /* Size of local formatting buffer */
-
-/* Local Variables: */
- AstXmlChan *this; /* A pointer to the XmlChan structure. */
- AstXmlElement *elem; /* Pointer to new element */
- char buff[ BUFF_LEN + 1 ]; /* Local formatting buffer */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the XmlChan structure. */
- this = (AstXmlChan *) this_channel;
-
-/* If the object to be written is a component of a default AST object (i.e.
- an object which is "not set"), then we do not write out this item. */
- if( this->objectset ) {
-
-/* Use the "set" and "helpful" flags, along with the Channel's
- attributes to decide whether this value should actually be
- written. */
- if( Use( this, set, helpful, status ) ) {
-
-/* Create a new XmlElement with a name of ATTR (and no namespace
- prefix), and add it into the current container (i.e. parent) element. */
- elem = astXmlAddElement( this->container, ATTR,
- astGetXmlPrefix( this ) );
-
-/* Add a NAME attribute to this element containing the item name. */
- astXmlAddAttr( elem, NAME, name, NULL );
-
-/* Format the value as a decimal string and add it to the element as the
- VALUE attribute. */
- (void) sprintf( buff, "%d", value );
- astXmlAddAttr( elem, VALUE, buff, NULL );
-
-/* If we are adding comments, and if a comment was supplied as a
- parameter to this function, then store the commment as an attribute of
- the element. */
- if( comment && *comment && astGetComment( this_channel ) ) {
- astXmlAddAttr( elem, DESC, comment, NULL );
- }
-
-/* If the object has all default values, store a true value for the
- DEFAULT attribute. */
- if( !set ) astXmlAddAttr( elem, DEFAULT, TRUE, NULL );
-
-/* Initialise a flag to indicate that the next "IsA" item should be
- written. */
- this->write_isa = 1;
- }
- }
-
-/* If an error has occurred, annul the container element in the XmlChan. */
- if( !astOK ) this->container = astXmlAnnulTree( this->container );
-
-/* Undefine macros local to this function. */
-#undef BUFF_LEN
-}
-
-static void WriteIsA( AstChannel *this_channel, const char *class,
- const char *comment, int *status ) {
-/*
-* Name:
-* WriteIsA
-
-* Purpose:
-* Write an "IsA" data item to a data sink.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* void WriteIsA( AstChannel *this, const char *class,
-* const char *comment, int *status )
-
-* Class Membership:
-* XmlChan member function (over-rides the protected
-* astWriteIsA method inherited from the Channel class).
-
-* Description:
-* This function writes an "IsA" data item to the data sink
-* associated with a Channel. This item delimits the end of the
-* data associated with the instance variables of a class, as part
-* of an overall Object definition.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* class
-* Pointer to a constant null-terminated string containing the
-* name of the class whose data are terminated by the "IsA"
-* item.
-* comment
-* Pointer to a constant null-terminated string containing a
-* textual comment to be associated with the "IsA"
-* item. Normally, this will describe the purpose of the class
-* whose data are being terminated.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - The comment supplied may not actually be used, depending on
-* the nature of the Channel supplied.
-*/
-
-/* Local Variables: */
- AstXmlChan *this; /* A pointer to the XmlChan structure. */
- AstXmlElement *elem; /* Pointer to new element */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the XmlChan structure. */
- this = (AstXmlChan *) this_channel;
-
-/* If the object to be written is a component of a default AST object (i.e.
- an object which is "not set"), then we do not write out this item. */
- if( this->objectset ) {
-
-/* Output an "IsA" item only if there has been at least one item
- written since the last "Begin" or "IsA" item, or if the Full
- attribute for the Channel is greater than zero (requesting maximum
- information). */
- if ( this->write_isa || astGetFull( this ) > 0 ) {
-
-/* Create a new XmlElement with a name of "_isa" (and no namespace prefix),
- and add it into the current container (i.e. parent) element. */
- elem = astXmlAddElement( this->container, ISA,
- astGetXmlPrefix( this ) );
-
-/* Add a "class" attribute to this element containing the class name. */
- astXmlAddAttr( elem, "class", class, NULL );
-
-/* If we are adding comments, and if a comment was supplied as a
- parameter to this function, then store the commment as an attribute of
- the element. This comment describes the class function as a whole, not
- the specific usage of this instance of the class. */
- if( comment && *comment && astGetComment( this_channel ) ) {
- astXmlAddAttr( elem, DESC, comment, NULL );
- }
- }
- }
-
-/* Initialise a flag to indicate that the next "IsA" item should not be
- written. This flag will be changed if and when an item is added which
- related to the class described by the "IsA" item. */
- this->write_isa = 0;
-
-/* If an error has occurred, annul the container element in the XmlChan. */
- if( !astOK ) this->container = astXmlAnnulTree( this->container );
-}
-
-static void WriteObject( AstChannel *this_channel, const char *name,
- int set, int helpful,
- AstObject *value, const char *comment, int *status ) {
-/*
-* Name:
-* WriteObject
-
-* Purpose:
-* Write an Object as a value to a data sink.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* void WriteObject( AstChannel *this_channel, const char *name,
-* int set, int helpful,
-* AstObject *value, const char *comment, int *status )
-
-* Class Membership:
-* XmlChan member function (over-rides the protected
-* astWriteObject method inherited from the Channel class).
-
-* Description:
-* This function writes an Object as a named value, representing
-* the value of a class instance variable, to the data sink
-* associated with an XmlChan. It is intended for use by class
-* "Dump" functions when writing out class information which will
-* subsequently be re-read.
-
-* Parameters:
-* this
-* Pointer to the XmlChan.
-* name
-* Pointer to a constant null-terminated string containing the
-* name to be used to identify the value in the external
-* representation. This will form the key for identifying it
-* again when it is re-read. The name supplied should be unique
-* within its class.
-*
-* Mixed case may be used and will be preserved in the external
-* representation (where possible) for cosmetic effect. However,
-* case is not significant when re-reading values.
-*
-* It is recommended that a maximum of 6 alphanumeric characters
-* (starting with an alphabetic character) be used. This permits
-* maximum flexibility in adapting to standard external data
-* representations.
-* set
-* If this is zero, it indicates that the value being written is
-* a default value (or can be re-generated from other values) so
-* need not necessarily be written out. Such values will
-* typically be included in the external representation with
-* (e.g.) a comment character so that they are available to
-* human readers but will be ignored when re-read. They may also
-* be completely omitted in some circumstances.
-*
-* If "set" is non-zero, the value will always be explicitly
-* included in the external representation so that it can be
-* re-read.
-* helpful
-* This flag provides a hint about whether a value whose "set"
-* flag is zero (above) should actually appear at all in the
-* external representaton.
-*
-* If the external representation allows values to be "commented
-* out" then, by default, values will be included in this form
-* only if their "helpful" flag is non-zero. Otherwise, they
-* will be omitted entirely. When possible, omitting the more
-* obscure values associated with a class is recommended in
-* order to improve readability.
-*
-* This default behaviour may be further modified if the
-* Channel's Full attribute is set - either to permit all values
-* to be shown, or to suppress non-essential information
-* entirely.
-* value
-* A Pointer to the Object to be written.
-* comment
-* Pointer to a constant null-terminated string containing a
-* textual comment to be associated with the value.
-*
-* Note that this comment may not actually be used, depending on
-* the nature of the Channel supplied and the setting of its
-* Comment attribute.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstXmlChan *this; /* A pointer to the XmlChan structure. */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the XmlChan structure. */
- this = (AstXmlChan *) this_channel;
-
-/* If the object to be written is a component of a default AST object (i.e.
- an object which is "not set"), then we do not write out the object. */
- if( this->objectset ) {
-
-/* Use the "set" and "helpful" flags, along with the Channel's
- attributes to decide whether this value should actually be
- written. */
- if ( Use( this, set, helpful, status ) ) {
-
-/* Save the supplied name associated with the object being written so
- that it is available for use within the following invocation of the
- WriteBegin method. The name is stored within the XmlChan structure
- (NULL is used to indicate "no name supplied"). */
- this->objectname = ( name && strlen( name ) ) ? name : NULL;
-
-/* Also save the supplied comment and a flag indicating if the object is
- set. These will be used by the WriteBegin method. They are stored within
- the XmlChan structure. */
- this->objectset = set;
- this->objectcomment = comment;
-
-/* Write the object to the XmlChan. */
- (void) astWrite( this, value );
-
-/* Nullify the components of the XmlChan set above. */
- this->objectname = NULL;
- this->objectset = 1;
- this->objectcomment = NULL;
-
-/* Initialise a flag to indicate that the next "IsA" item should be
- written. */
- this->write_isa = 1;
- }
- }
-
-/* If an error has occurred, annul the container element in the XmlChan. */
- if( !astOK ) this->container = astXmlAnnulTree( this->container );
-
-}
-
-static void WriteString( AstChannel *this_channel, const char *name, int set,
- int helpful, const char *value, const char *comment, int *status ){
-/*
-* Name:
-* WriteString
-
-* Purpose:
-* Write a string value to a data sink.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* void WriteString( AstChannel *this, const char *name, int set, int helpful,
-* const char *value, const char *comment, int *status )
-
-* Class Membership:
-* XmlChan member function (over-rides the protected
-* astWriteString method inherited from the Channel class).
-
-* Description:
-* This function writes a named string value, representing the
-* value of a class instance variable, to the data sink associated
-* with a Channel. It is intended for use by class "Dump" functions
-* when writing out class information which will subsequently be
-* re-read.
-
-* Parameters:
-* this
-* Pointer to the Channel.
-* name
-* Pointer to a constant null-terminated string containing the
-* name to be used to identify the value in the external
-* representation. This will form the key for identifying it
-* again when it is re-read. The name supplied should be unique
-* within its class.
-*
-* Mixed case may be used and will be preserved in the external
-* representation (where possible) for cosmetic effect. However,
-* case is not significant when re-reading values.
-*
-* It is recommended that a maximum of 6 alphanumeric characters
-* (starting with an alphabetic character) be used. This permits
-* maximum flexibility in adapting to standard external data
-* representations (e.g. FITS).
-* set
-* If this is zero, it indicates that the value being written is
-* a default value (or can be re-generated from other values) so
-* need not necessarily be written out. Such values will
-* typically be included in the external representation with
-* (e.g.) a comment character so that they are available to
-* human readers but will be ignored when re-read. They may also
-* be completely omitted in some circumstances.
-*
-* If "set" is non-zero, the value will always be explicitly
-* included in the external representation so that it can be
-* re-read.
-* helpful
-* This flag provides a hint about whether a value whose "set"
-* flag is zero (above) should actually appear at all in the
-* external representaton.
-*
-* If the external representation allows values to be "commented
-* out" then, by default, values will be included in this form
-* only if their "helpful" flag is non-zero. Otherwise, they
-* will be omitted entirely. When possible, omitting the more
-* obscure values associated with a class is recommended in
-* order to improve readability.
-*
-* This default behaviour may be further modified if the
-* Channel's Full attribute is set - either to permit all values
-* to be shown, or to suppress non-essential information
-* entirely.
-* value
-* Pointer to a constant null-terminated string containing the
-* value to be written.
-* comment
-* Pointer to a constant null-terminated string containing a
-* textual comment to be associated with the value.
-*
-* Note that this comment may not actually be used, depending on
-* the nature of the Channel supplied and the setting of its
-* Comment attribute.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstXmlChan *this; /* A pointer to the XmlChan structure. */
- AstXmlElement *elem; /* Pointer to new element */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the XmlChan structure. */
- this = (AstXmlChan *) this_channel;
-
-/* If the object to be written is a component of a default AST object (i.e.
- an object which is "not set"), then we do not write out this item. */
- if( this->objectset ) {
-
-/* Use the "set" and "helpful" flags, along with the Channel's
- attributes to decide whether this value should actually be
- written. */
- if( Use( this, set, helpful, status ) ) {
-
-/* Create a new XmlElement with a name of ATTR (and no namespace
- prefix), and add it into the current container (i.e. parent) element. */
- elem = astXmlAddElement( this->container, ATTR,
- astGetXmlPrefix( this ) );
-
-/* Add a NAME attribute to this element containing the item name. */
- astXmlAddAttr( elem, NAME, name, NULL );
-
-/* If we are using QUOTED format, add an attribute to indicate that this is a
- string value (mainly included for compatibility with JNIAST). */
- if( astGetXmlFormat( this ) == QUOTED_FORMAT ) {
- astXmlAddAttr( elem, QUOTED, TRUE, NULL );
- }
-
-/* Add it the value to the element as the VALUE attribute. */
- astXmlAddAttr( elem, VALUE, value, NULL );
-
-/* If we are adding comments, and if a comment was supplied as a
- parameter to this function, then store the commment as an attribute of
- the element. */
- if( comment && *comment && astGetComment( this_channel ) ) {
- astXmlAddAttr( elem, DESC, comment, NULL );
- }
-
-/* If the object has all default values, store a true value for the
- DEFAULT attribute. */
- if( !set ) astXmlAddAttr( elem, DEFAULT, TRUE, NULL );
-
-/* Initialise a flag to indicate that the next "IsA" item should be
- written. */
- this->write_isa = 1;
- }
- }
-
-/* If an error has occurred, annul the container element in the XmlChan. */
- if( !astOK ) this->container = astXmlAnnulTree( this->container );
-
-}
-
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/* XmlFormat */
-/* ========= */
-/*
-*att++
-* Name:
-* XmlFormat
-
-* Purpose:
-* System for formatting Objects as XML.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute specifies the formatting system to use when AST
-* Objects are written out as XML through an XmlChan. It
-c affects the behaviour of the astWrite function when
-f affects the behaviour of the AST_WRITE routine when
-* they are used to transfer any AST Object to or from an external
-* XML representation.
-*
-* The XmlChan class allows AST objects to be represented in the form
-* of XML in several ways (conventions) and the XmlFormat attribute is
-* used to specify which of these should be used. The formatting options
-* available are outlined in the "Formats Available" section below.
-*
-* By default, an XmlChan will attempt to determine which format system
-* is already in use, and will set the default XmlFormat value
-* accordingly (so that subsequent I/O operations adopt the same
-* conventions). It does this by looking for certain critical items
-* which only occur in particular formats. For details of how this
-* works, see the "Choice of Default Format" section below. If you wish
-* to ensure that a particular format system is used, independently of
-* any XML already read, you should set an explicit XmlFormat value
-* yourself.
-*
-* Formats Available:
-* The XmlFormat attribute can take any of the following (case
-* insensitive) string values to select the corresponding formatting
-* system:
-*
-* - "NATIVE": This is a direct conversion to XML of the heirarchical
-* format used by a standard XML channel (and also by the NATIVE
-* encoding of a FitsChan).
-*
-* - "QUOTED": This is the same as NATIVE format except that extra
-* information is included which allows client code to convert the
-* XML into a form which can be read by a standard AST Channel. This
-* extra information indicates which AST attribute values should be
-* enclosed in quotes before being passed to a Channel.
-*
-* - "IVOA": This is a format that uses an early draft of the STC-X schema
-* developed by the International Virtual Observatory Alliance (IVOA -
-* see "http://www.ivoa.net/") to describe coordinate systems, regions,
-* mappings, etc. Support is limited to V1.20 described at
-* "http://www.ivoa.net/Documents/WD/STC/STC-20050225.html". Since the
-* version of STC-X finally adopted by the IVOA differs in several
-* significant respects from V1.20, this format is now mainly of
-* historical interest. Note, the alternative "STC-S" format (a
-* simpler non-XML encoding of the STC metadata) is supported by the
-* StcsChan class.
-
-* Choice of Default Format;
-* If the XmlFormat attribute of an XmlChan is not set, the default
-* value it takes is determined by the presence of certain critical
-* items within the document most recently read using
-c astRead.
-f AST_READ.
-* The sequence of decision used to arrive at the default value is as
-* follows:
-*
-* - If the previous document read contained any elements in any of the STC
-* namespaces ("urn:nvo-stc", "urn:nvo-coords" or "urn:nvo-region"), then
-* the default value is IVOA.
-* - If the previous document read contained any elements in the AST
-* namespace which had an associated XML attribute called "quoted", then
-* the default value is QUOTED.
-* - Otherwise, if none of these conditions is met (as would be the
-* case if no document had yet been read), then NATIVE format is
-* used.
-*
-* Setting an explicit value for the XmlFormat attribute always
-* over-rides this default behaviour.
-
-* The IVOA Format:
-* The IVOA support caters only for certain parts of V1.20 of the
-* draft Space-Time Coordinate (STC) schema (see
-* http://www.ivoa.net/Documents/WD/STC/STC-20050225.html). Note, this
-* draft has now been superceded by an officially adopted version that
-* differs in several significant respects from V1.20. Consequently,
-* the "IVOA" XmlChan format is of historical interest only.
-*
-* The following points should be noted when using an XmlChan to read
-* or write STC information (note, this list is currently incomplete):
-*
-* - Objects can currently only be read using this format, not written.
-* - The AST object generated by reading an <STCMetadata> element will
-* be an instance of one of the AST "Stc" classes: StcResourceProfile,
-* StcSearchLocation, StcCatalogEntryLocation, StcObsDataLocation.
-* - When reading an <STCMetadata> element, the axes in the returned
-* AST Object will be in the order space, time, spectral, redshift,
-* irrespective of the order in which the axes occur in the <STCMetadata>
-* element. If the supplied <STCMetadata> element does not contain all of
-* these axes, the returned AST Object will also omit them, but the
-* ordering of those axes which are present will be as stated above. If
-* the spatial frame represents a celestial coordinate system the
-* spatial axes will be in the order (longitude, latitude).
-* - Until such time as the AST TimeFrame is complete, a simple
-* 1-dimensional Frame (with Domain set to TIME) will be used to
-* represent the STC <TimeFrame> element. Consequently, most of the
-* information within a <TimeFrame> element is currently ignored.
-* - <SpaceFrame> elements can only be read if they describe a celestial
-* longitude and latitude axes supported by the AST SkyFrame class. The
-* space axes will be returned in the order (longitude, latitude).
-* - Velocities associated with SpaceFrames cannot be read.
-* - Any <GenericCoordFrame> elements within an <AstroCoordSystem> element
-* are currently ignored.
-* - Any second or subsequent <AstroCoordSystem> found within an
-* STCMetaData element is ignored.
-* - Any second or subsequent <AstroCoordArea> found within an
-* STCMetaData element is ignored.
-* - Any <OffsetCenter> found within a <SpaceFrame> is ignored.
-* - Any CoordFlavor element found within a <SpaceFrame> is ignored.
-* - <SpaceFrame> elements can only be read if they refer to
-* one of the following space reference frames: ICRS, GALACTIC_II,
-* SUPER_GALACTIC, HEE, FK4, FK5, ECLIPTIC.
-* - <SpaceFrame> elements can only be read if the reference
-* position is TOPOCENTER. Also, any planetary ephemeris is ignored.
-* - Regions: there is currently no support for STC regions of type
-* Sector, ConvexHull or SkyIndex.
-* - The AST Region read from a CoordInterval element is considered to
-* be open if either the lo_include or the hi_include attribute is
-* set to false.
-* - <RegionFile> elements are not supported.
-* - Vertices within <Polygon> elements are always considered to be
-* joined using great circles (that is, <SmallCircle> elements are
-* ignored).
-
-* Applicability:
-* XmlChan
-* All XmlChans have this attribute.
-*att--
-*/
-astMAKE_CLEAR(XmlChan,XmlFormat,xmlformat,UNKNOWN_FORMAT)
-astMAKE_SET(XmlChan,XmlFormat,int,xmlformat,(
- value == NATIVE_FORMAT ||
- value == IVOA_FORMAT ||
- value == QUOTED_FORMAT ? value :
- (astError( AST__BADAT, "astSetXmlFormat: Unknown XML formatting system %d "
- "supplied.", status, value ), UNKNOWN_FORMAT )))
-astMAKE_TEST(XmlChan,XmlFormat,( this->xmlformat != UNKNOWN_FORMAT ))
-astMAKE_GET(XmlChan,XmlFormat,int,0,(this->xmlformat == UNKNOWN_FORMAT ?
- this->formatdef : this->xmlformat))
-
-/*
-*att++
-* Name:
-* XmlIndent
-
-* Purpose:
-* Controls output of indentation and line feeds.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer (boolean).
-
-* Description:
-* This attribute controls the appearance of the XML produced when an
-* AST object is written to an XmlChan. If it is non-zero, then extra
-* linefeed characters will be inserted as necessary to ensure that each
-* XML tag starts on a new line, and each tag will be indented to show
-* its depth in the containment hierarchy. If XmlIndent is zero (the
-* default), then no linefeeds or indentation strings will be added to
-* output text.
-
-* Applicability:
-* XmlChan
-* All XmlChans have this attribute.
-*att--
-*/
-astMAKE_CLEAR(XmlChan,XmlIndent,xmlindent,-1)
-astMAKE_GET(XmlChan,XmlIndent,int,0,(this->xmlindent == -1 ? 0 : this->xmlindent))
-astMAKE_SET(XmlChan,XmlIndent,int,xmlindent,( value ? 1 : 0 ))
-astMAKE_TEST(XmlChan,XmlIndent,( this->xmlindent != -1 ))
-
-/*
-*att++
-* Name:
-* XmlLength
-
-* Purpose:
-* Controls output buffer length.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Integer.
-
-* Description:
-* This attribute specifies the maximum length to use when writing out
-* text through the sink function supplied when the XmlChan was created.
-*
-* The number of characters in each string written out through the sink
-* function will not be greater than the value of this attribute (but
-* may be less). A value of zero (the default) means there is no limit -
-* each string can be of any length.
-*
-f Note, the default value of zero is unlikely to be appropriate when
-f an XmlChan is used within Fortran code. In this case, XmlLength
-f should usually be set to the size of the CHARACTER variable used to
-f receive the text returned by AST_GETLINE within the sink function.
-f This avoids the possibility of long lines being truncated invisibly
-f within AST_GETLINE.
-
-* Applicability:
-* XmlChan
-* All XmlChans have this attribute.
-*att--
-*/
-astMAKE_CLEAR(XmlChan,XmlLength,xmllength,-INT_MAX)
-astMAKE_GET(XmlChan,XmlLength,int,0,( ( this->xmllength != -INT_MAX ) ? this->xmllength : 0 ))
-astMAKE_SET(XmlChan,XmlLength,int,xmllength,(value<0?0:value))
-astMAKE_TEST(XmlChan,XmlLength,( this->xmllength != -INT_MAX ))
-
-/*
-*att++
-* Name:
-* XmlPrefix
-
-* Purpose:
-* The namespace prefix to use when writing.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* String.
-
-* Description:
-* This attribute is a string which is to be used as the namespace
-* prefix for all XML elements created as a result of writing an AST
-* Object out through an XmlChan. The URI associated with the namespace
-* prefix is given by the symbolic constant AST__XMLNS defined in
-f AST_PAR.
-c ast.h.
-* A definition of the namespace prefix is included in each top-level
-* element produced by the XmlChan.
-*
-* The default value is a blank string which causes no prefix to be
-* used. In this case each top-level element will set the default
-* namespace to be the value of AST__XMLNS.
-
-* Applicability:
-* Object
-* All Objects have this attribute.
-
-*att--
-*/
-astMAKE_CLEAR(XmlChan,XmlPrefix,xmlprefix,astFree( this->xmlprefix ))
-astMAKE_GET(XmlChan,XmlPrefix,const char *,NULL,( this->xmlprefix ? this->xmlprefix : "" ))
-astMAKE_SET(XmlChan,XmlPrefix,const char *,xmlprefix,astStore( this->xmlprefix, value,
- strlen( value ) + (size_t) 1 ))
-astMAKE_TEST(XmlChan,XmlPrefix,( this->xmlprefix != NULL ))
-
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-* Name:
-* Copy
-
-* Purpose:
-* Copy constructor for XmlChan objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-* Description:
-* This function implements the copy constructor for XmlChan objects.
-
-* Parameters:
-* objin
-* Pointer to the object to be copied.
-* objout
-* Pointer to the object being constructed.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* - This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
- AstXmlChan *in; /* Pointer to input XmlChan */
- AstXmlChan *out; /* Pointer to output XmlChan */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain pointers to the input and output XmlChans. */
- in = (AstXmlChan *) objin;
- out = (AstXmlChan *) objout;
-
-/* Clear the non-persistent values in the new XmlChan. */
- out->objectname = NULL; /* Name of object being written */
- out->objectset = 1; /* Is object being written set?*/
- out->objectcomment = NULL;/* Comment for object class being written */
- out->readcontext = NULL; /* XmlElement giving context for current read */
- out->container = NULL; /* XmlElement to which content will be added */
- out->write_isa = 0; /* Write out the next "IsA" item? */
- out->reset_source = 1; /* A new line should be read from the source */
- out->isa_class = NULL; /* Class being loaded */
-
-/* Store a copy of the prefix string.*/
- if ( in->xmlprefix ) out->xmlprefix = astStore( NULL, in->xmlprefix,
- strlen( in->xmlprefix ) + (size_t) 1 );
-}
-
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-* Name:
-* Delete
-
-* Purpose:
-* Destructor for XmlChan objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Delete( AstObject *obj, int *status )
-
-* Description:
-* This function implements the destructor for XmlChan objects.
-
-* Parameters:
-* obj
-* Pointer to the object to be deleted.
-* status
-* Pointer to the inherited status variable.
-
-* Notes:
-* This function attempts to execute even if the global error status is
-* set.
-*/
-
-/* Local Variables: */
- AstXmlChan *this; /* Pointer to XmlChan */
-
-/* Obtain a pointer to the XmlChan structure. */
- this = (AstXmlChan *) obj;
-
-/* Free any unread part of the document. */
- this->readcontext = astXmlAnnul( this->readcontext );
-
-/* Free the memory used for the XmlPrefix string if necessary. */
- this->xmlprefix = astFree( this->xmlprefix );
-
-/* Free any memory used to store text read from the source */
- GetNextChar( NULL, status );
-
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for XmlChan objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the XmlChan class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the XmlChan whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstXmlChan *this; /* Pointer to the XmlChan structure */
- const char *class; /* Class name */
- const char *sval; /* String attribute value */
- int ival; /* Integer attribute value */
- int set; /* Has the attribute got a set value? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the XmlChan structure. */
- this = (AstXmlChan *) this_object;
-
-/* Store the object class. */
- class = astGetClass( this );
-
-/* Write out values representing the instance variables for the
- XmlChan class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-
-/* Now do instance variables which are not attributes. */
-/* =================================================== */
-
-/* XmlIndent */
-/* --------- */
- set = TestXmlIndent( this, status );
- ival = set ? GetXmlIndent( this, status ) : astGetXmlIndent( this );
- astWriteInt( channel, "XmlInd", set, 0, ival, "XML indentation" );
-
-/* XmlLength */
-/* --------- */
- set = TestXmlLength( this, status );
- ival = set ? GetXmlLength( this, status ) : astGetXmlLength( this );
- astWriteInt( channel, "XmlLen", set, 0, ival, "XML buffer length" );
-
-/* XmlFormat. */
-/* --------- */
- set = TestXmlFormat( this, status );
- ival = set ? GetXmlFormat( this, status ) : astGetXmlFormat( this );
- if( ival > UNKNOWN_FORMAT && ival <= MAX_FORMAT ) {
- astWriteString( channel, "XmlFmt", set, 1, xformat[ival], "Formatting system" );
- } else {
- astWriteString( channel, "XmlFmt", set, 1, UNKNOWN_STRING, "Formatting system" );
- }
-
-/* XmlPrefix */
-/* --------- */
- set = TestXmlPrefix( this, status );
- sval = set ? GetXmlPrefix( this, status ) : astGetXmlPrefix( this );
- astWriteString( channel, "XmlPrf", set, 1, sval,
- "Namespace prefix" );
-}
-
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAXmlChan and astCheckXmlChan functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(XmlChan,Channel)
-astMAKE_CHECK(XmlChan)
-
-AstXmlChan *astXmlChan_( const char *(* source)( void ),
- void (* sink)( const char * ),
- const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astXmlChan
-f AST_XMLCHAN
-
-* Purpose:
-* Create an XmlChan.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "xmlchan.h"
-c AstXmlChan *astXmlChan( const char *(* source)( void ),
-c void (* sink)( const char * ),
-c const char *options, ... )
-f RESULT = AST_XMLCHAN( SOURCE, SINK, OPTIONS, STATUS )
-
-* Class Membership:
-* XmlChan constructor.
-
-* Description:
-* This function creates a new XmlChan and optionally initialises
-* its attributes.
-*
-* A XmlChan is a specialised form of Channel which supports XML I/O
-* operations. Writing an Object to an XmlChan (using
-c astWrite) will, if the Object is suitable, generate an
-f AST_WRITE) will, if the Object is suitable, generate an
-* XML description of that Object, and reading from an XmlChan will
-* create a new Object from its XML description.
-*
-* Normally, when you use an XmlChan, you should provide "source"
-c and "sink" functions which connect it to an external data store
-f and "sink" routines which connect it to an external data store
-* by reading and writing the resulting XML text. By default, however,
-* a Channel will read from standard input and write to standard
-* output.
-
-* Parameters:
-c source
-f SOURCE = SUBROUTINE (Given)
-c Pointer to a source function that takes no arguments and
-c returns a pointer to a null-terminated string. This function
-c will be used by the XmlChan to obtain lines of input text. On
-c each invocation, it should return a pointer to the next input
-c line read from some external XML data store, and a NULL pointer
-c when there are no more lines to read.
-c
-c If "source" is NULL, the Channel will read from standard
-c input instead.
-f A source routine, which is a subroutine which takes a single
-f integer error status argument. This routine will be used by
-f the XmlChan to obtain lines of input text. On each
-f invocation, it should read the next input line from some
-f external XML data store, and then return the resulting text to
-f the AST library by calling AST_PUTLINE. It should supply a
-f negative line length when there are no more lines to read.
-f If an error occurs, it should set its own error status
-f argument to an error value before returning.
-f
-f If the null routine AST_NULL is suppied as the SOURCE value,
-f the Channel will read from standard input instead.
-c sink
-f SINK = SUBROUTINE (Given)
-c Pointer to a sink function that takes a pointer to a
-c null-terminated string as an argument and returns void. This
-c function will be used by the XmlChan to deliver lines of
-c output text. On each invocation, it should deliver the
-c contents of the string supplied to some external XML data store.
-c
-c If "sink" is NULL, the XmlChan will write to standard output
-c instead.
-f A sink routine, which is a subroutine which takes a single
-f integer error status argument. This routine will be used by
-f the XmlChan to deliver lines of output text. On each
-f invocation, it should obtain the next output line from the
-f AST library by calling AST_GETLINE, and then deliver the
-f resulting text to some external XML data store. If an error
-f occurs, it should set its own error status argument to an
-f error value before returning.
-f
-f If the null routine AST_NULL is suppied as the SINK value,
-f the Channel will write to standard output instead.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new XmlChan. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new XmlChan. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astXmlChan()
-f AST_XMLCHAN = INTEGER
-* A pointer to the new XmlChan.
-
-* Notes:
-f - The names of the routines supplied for the SOURCE and SINK
-f arguments should appear in EXTERNAL statements in the Fortran
-f routine which invokes AST_XMLCHAN. However, this is not generally
-f necessary for the null routine AST_NULL (so long as the AST_PAR
-f include file has been used).
-* - If the external data source or sink uses a character encoding
-* other than ASCII, the supplied source and sink functions should
-* translate between the external character encoding and the internal
-* ASCII encoding used by AST.
-* - A null Object pointer (AST__NULL) will be returned if this
-* function is invoked with the AST error status set, or if it
-* should fail for any reason.
-f - Note that the null routine AST_NULL (one underscore) is
-f different to AST__NULL (two underscores), which is the null Object
-f pointer.
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstXmlChan *new; /* Pointer to new XmlChan */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the XmlChan, allocating memory and initialising the
- virtual function table as well if necessary. This interface is for
- use by other C functions within AST, and uses the standard "wrapper"
- functions included in this class. */
- new = astInitXmlChan( NULL, sizeof( AstXmlChan ), !class_init,
- &class_vtab, "XmlChan", source, SourceWrap,
- sink, SinkWrap );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- XmlChan's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new XmlChan. */
- return new;
-}
-
-AstXmlChan *astXmlChanId_( const char *(* source)( void ),
- void (* sink)( const char * ),
- const char *options, ... ) {
-/*
-* Name:
-* astXmlChanId_
-
-* Purpose:
-* Create an XmlChan.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstXmlChan *astXmlChanId_( const char *(* source)( void ),
-* void (* sink)( const char * ),
-* const char *options, ... )
-
-* Class Membership:
-* XmlChan constructor.
-
-* Description:
-* This function implements the external (public) C interface to the
-* astXmlChan constructor function. Another function (astXmlChanForId)
-* should be called to create an XmlChan for use within other languages.
-* Both functions return an ID value (instead of a true C pointer) to
-* external users, and must be provided because astXmlChan_ has a variable
-* argument list which cannot be encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astXmlChan_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astXmlChan_.
-
-* Returned Value:
-* The ID value associated with the new XmlChan.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstXmlChan *new; /* Pointer to new XmlChan */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the XmlChan, allocating memory and initialising the
- virtual function table as well if necessary. This interface is for
- use by external C functions and uses the standard "wrapper"
- functions included in this class. */
- new = astInitXmlChan( NULL, sizeof( AstXmlChan ), !class_init,
- &class_vtab, "XmlChan", source, SourceWrap,
- sink, SinkWrap );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- XmlChan's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new XmlChan. */
- return astMakeId( new );
-}
-
-AstXmlChan *astXmlChanForId_( const char *(* source)( void ),
- char *(* source_wrap)( const char *(*)( void ), int * ),
- void (* sink)( const char * ),
- void (* sink_wrap)( void (*)( const char * ),
- const char *, int * ),
- const char *options, ... ) {
-/*
-*+
-* Name:
-* astXmlChanFor
-
-* Purpose:
-* Initialise an XmlChan from a foreign language interface.
-
-* Type:
-* Public function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstXmlChan *astXmlChanFor( const char *(* source)( void ),
-* char *(* source_wrap)( const char *(*)
-* ( void ), int * ),
-* void (* sink)( const char * ),
-* void (* sink_wrap)( void (*)( const char * ),
-* const char *, int * ),
-* const char *options, ... )
-
-* Class Membership:
-* XmlChan constructor.
-
-* Description:
-* This function creates a new XmlChan from a foreign language
-* interface and optionally initialises its attributes.
-*
-* A XmlChan implements low-level XML input/output for the AST library.
-* Writing an Object to an XmlChan (using astWrite) will generate a
-* XML representation of that Object, and reading from a
-* XmlChan (using astRead) will create a new Object from its
-* XML representation.
-*
-* Normally, when you use an XmlChan, you should provide "source"
-* and "sink" functions which connect it to an external data store
-* by reading and writing the resulting text. This function also
-* requires you to provide "wrapper" functions which will invoke
-* the source and sink functions. By default, however, an XmlChan
-* will read from standard input and write to standard output.
-
-* Parameters:
-* source
-* Pointer to a "source" function which will be used to obtain
-* lines of input text. Generally, this will be obtained by
-* casting a pointer to a source function which is compatible
-* with the "source_wrap" wrapper function (below). The pointer
-* should later be cast back to its original type by the
-* "source_wrap" function before the function is invoked.
-*
-* If "source" is NULL, the XmlChan will read from standard
-* input instead.
-* source_wrap
-* Pointer to a function which can be used to invoke the
-* "source" function supplied (above). This wrapper function is
-* necessary in order to hide variations in the nature of the
-* source function, such as may arise when it is supplied by a
-* foreign (non-C) language interface.
-*
-* The single parameter of the "source_wrap" function is a
-* pointer to the "source" function, and it should cast this
-* function pointer (as necessary) and invoke the function with
-* appropriate arguments to obtain the next line of input
-* text. The "source_wrap" function should then return a pointer
-* to a dynamically allocated, null terminated string containing
-* the text that was read. The string will be freed (using
-* astFree) when no longer required and the "source_wrap"
-* function need not concern itself with this. A NULL pointer
-* should be returned if there is no more input to read.
-*
-* If "source_wrap" is NULL, the XmlChan will read from standard
-* input instead.
-* sink
-* Pointer to a "sink" function which will be used to deliver
-* lines of output text. Generally, this will be obtained by
-* casting a pointer to a sink function which is compatible with
-* the "sink_wrap" wrapper function (below). The pointer should
-* later be cast back to its original type by the "sink_wrap"
-* function before the function is invoked.
-*
-* If "sink" is NULL, the XmlChan will write to standard output
-* instead.
-* sink_wrap
-* Pointer to a function which can be used to invoke the "sink"
-* function supplied (above). This wrapper function is necessary
-* in order to hide variations in the nature of the sink
-* function, such as may arise when it is supplied by a foreign
-* (non-C) language interface.
-*
-* The first parameter of the "sink_wrap" function is a pointer
-* to the "sink" function, and the second parameter is a pointer
-* to a const, null-terminated character string containing the
-* text to be written. The "sink_wrap" function should cast the
-* "sink" function pointer (as necessary) and invoke the
-* function with appropriate arguments to deliver the line of
-* output text. The "sink_wrap" function then returns void.
-*
-* If "sink_wrap" is NULL, the Channel will write to standard
-* output instead.
-* options
-* Pointer to a null-terminated string containing an optional
-* comma-separated list of attribute assignments to be used for
-* initialising the new XmlChan. The syntax used is identical to
-* that for the astSet function and may include "printf" format
-* specifiers identified by "%" symbols in the normal way.
-* ...
-* If the "options" string contains "%" format specifiers, then
-* an optional list of additional arguments may follow it in
-* order to supply values to be substituted for these
-* specifiers. The rules for supplying these are identical to
-* those for the astSet function (and for the C "printf"
-* function).
-
-* Returned Value:
-* astXmlChanFor()
-* A pointer to the new XmlChan.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-* function is invoked with the global error status set, or if it
-* should fail for any reason.
-* - This function is only available through the public interface
-* to the XmlChan class (not the protected interface) and is
-* intended solely for use in implementing foreign language
-* interfaces to this class.
-*-
-
-* Implememtation Notes:
-* - This function behaves exactly like astXmlChanId_, in that it
-* returns ID values and not true C pointers, but it has two
-* additional arguments. These are pointers to the "wrapper
-* functions" which are needed to accommodate foreign language
-* interfaces.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstXmlChan *new; /* Pointer to new XmlChan */
- va_list args; /* Variable argument list */
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialise the XmlChan, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitXmlChan( NULL, sizeof( AstXmlChan ), !class_init,
- &class_vtab, "XmlChan", source, source_wrap,
- sink, sink_wrap );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
- options string to the astVSet method to initialise the new
- XmlChan's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new XmlChan. */
- return astMakeId( new );
-}
-
-AstXmlChan *astInitXmlChan_( void *mem, size_t size, int init,
- AstXmlChanVtab *vtab, const char *name,
- const char *(* source)( void ),
- char *(* source_wrap)( const char *(*)( void ), int * ),
- void (* sink)( const char * ),
- void (* sink_wrap)( void (*)( const char * ),
- const char *, int * ), int *status ) {
-/*
-*+
-* Name:
-* astInitXmlChan
-
-* Purpose:
-* Initialise an XmlChan.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstXmlChan *astInitXmlChan( void *mem, size_t size, int init,
-* AstXmlChanVtab *vtab, const char *name,
-* const char *(* source)( void ),
-* char *(* source_wrap)( const char *(*)( void ), int * ),
-* void (* sink)( const char * ),
-* void (* sink_wrap)( void (*)( const char * ),
-* const char *, int * ) )
-
-* Class Membership:
-* XmlChan initialiser.
-
-* Description:
-* This function is provided for use by class implementations to
-* initialise a new XmlChan object. It allocates memory (if
-* necessary) to accommodate the XmlChan plus any additional data
-* associated with the derived class. It then initialises a
-* XmlChan structure at the start of this memory. If the "init"
-* flag is set, it also initialises the contents of a virtual
-* function table for an XmlChan at the start of the memory passed
-* via the "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the XmlChan is to be
-* initialised. This must be of sufficient size to accommodate
-* the XmlChan data (sizeof(XmlChan)) plus any data used by the
-* derived class. If a value of NULL is given, this function
-* will allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the XmlChan (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the XmlChan structure, so a valid value must be
-* supplied even if not required for allocating memory.
-* init
-* A boolean flag indicating if the XmlChan's virtual function
-* table is to be initialised. If this value is non-zero, the
-* virtual function table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new XmlChan.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-* source
-* Pointer to a "source" function which will be used to obtain
-* lines of text. Generally, this will be obtained by
-* casting a pointer to a source function which is compatible
-* with the "source_wrap" wrapper function (below). The pointer
-* should later be cast back to its original type by the
-* "source_wrap" function before the function is invoked.
-*
-* If "source" is NULL, the Channel will read from standard
-* input instead.
-* source_wrap
-* Pointer to a function which can be used to invoke the
-* "source" function supplied (above). This wrapper function is
-* necessary in order to hide variations in the nature of the
-* source function, such as may arise when it is supplied by a
-* foreign (non-C) language interface.
-*
-* The single parameter of the "source_wrap" function is a
-* pointer to the "source" function, and it should cast this
-* function pointer (as necessary) and invoke the function with
-* appropriate arguments to obtain the next line of input
-* text. The "source_wrap" function should then return a pointer
-* to a dynamically allocated, null terminated string containing
-* the text that was read. The string will be freed (using
-* astFree) when no longer required and the "source_wrap"
-* function need not concern itself with this. A NULL pointer
-* should be returned if there is no more input to read.
-*
-* If "source_wrap" is NULL, the Channel will read from standard
-* input instead.
-* sink
-* Pointer to a "sink" function which will be used to deliver
-* lines of text. Generally, this will be obtained by
-* casting a pointer to a sink function which is compatible with
-* the "sink_wrap" wrapper function (below). The pointer should
-* later be cast back to its original type by the "sink_wrap"
-* function before the function is invoked.
-*
-* If "sink" is NULL, the contents of the XmlChan will not be
-* written out before being deleted.
-* sink_wrap
-* Pointer to a function which can be used to invoke the "sink"
-* function supplied (above). This wrapper function is necessary
-* in order to hide variations in the nature of the sink
-* function, such as may arise when it is supplied by a foreign
-* (non-C) language interface.
-*
-* The first parameter of the "sink_wrap" function is a pointer
-* to the "sink" function, and the second parameter is a pointer
-* to a const, null-terminated character string containing the
-* text to be written. The "sink_wrap" function should cast the
-* "sink" function pointer (as necessary) and invoke the
-* function with appropriate arguments to deliver the line of
-* output text. The "sink_wrap" function then returns void.
-*
-* If "sink_wrap" is NULL, the Channel will write to standard
-* output instead.
-
-* Returned Value:
-* A pointer to the new XmlChan.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- AstXmlChan *new; /* Pointer to new XmlChan */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitXmlChanVtab( vtab, name );
-
-/* Initialise a Channel structure (the parent class) as the first
- component within the XmlChan structure, allocating memory if
- necessary. */
- new = (AstXmlChan *) astInitChannel( mem, size, 0,
- (AstChannelVtab *) vtab, name,
- source, source_wrap, sink,
- sink_wrap );
-
- if ( astOK ) {
-
-/* Initialise the XmlChan data. */
-/* ---------------------------- */
- new->objectname = NULL; /* Name of object being written */
- new->objectset = 1; /* Is object being written set?*/
- new->objectcomment = NULL;/* Comment for object class being written */
- new->container = NULL; /* XmlElement to which content will be added */
- new->readcontext = NULL; /* XmlElement giving context for current read */
- new->write_isa = 0; /* Write out the next "IsA" item? */
- new->xmlindent = -1; /* Indentat output? */
- new->xmllength = -INT_MAX;/* Buffer length */
- new->xmlprefix = NULL; /* Xml prefix */
- new->xmlformat = UNKNOWN_FORMAT; /* Xml format */
- new->formatdef = NATIVE_FORMAT; /* Default Xml format */
- new->reset_source = 1; /* A new line should be read from the source */
- new->isa_class = NULL; /* Class being loaded */
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new object. */
- return new;
-}
-
-AstXmlChan *astLoadXmlChan_( void *mem, size_t size,
- AstXmlChanVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadXmlChan
-
-* Purpose:
-* Load an XmlChan.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "xmlchan.h"
-* AstXmlChan *astLoadXmlChan( void *mem, size_t size,
-* AstXmlChanVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* XmlChan loader.
-
-* Description:
-* This function is provided to load a new XmlChan using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* XmlChan structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for an XmlChan at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the XmlChan is to be
-* loaded. This must be of sufficient size to accommodate the
-* XmlChan data (sizeof(XmlChan)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the XmlChan (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the XmlChan structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstXmlChan) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new XmlChan. If this is NULL, a pointer
-* to the (static) virtual function table for the XmlChan class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "XmlChan" is used instead.
-
-* Returned Value:
-* A pointer to the new XmlChan.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstXmlChan *new; /* Pointer to the new XmlChan */
- char *text; /* Textual version of integer value */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this XmlChan. In this case the
- XmlChan belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstXmlChan );
- vtab = &class_vtab;
- name = "XmlChan";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitXmlChanVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built XmlChan. */
- new = astLoadChannel( mem, size, (AstChannelVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "XmlChan" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* Ensure other items in the XmlChan structure are initialised properly. */
- new->objectname = NULL; /* Name of object being written */
- new->objectset = 1; /* Is object being written set?*/
- new->objectcomment = NULL;/* Comment for object class being written */
- new->container = NULL; /* XmlElement to which content will be added */
- new->readcontext = NULL; /* XmlElement giving context for current read */
- new->write_isa = 0; /* Write out the next "IsA" item? */
- new->xmlindent = -1; /* Indent output? */
- new->xmllength = -INT_MAX;/* Buffer length */
- new->xmlprefix = NULL; /* Xml prefix */
- new->reset_source = 1; /* A new line should be read from the source */
- new->isa_class = NULL; /* Class being loaded */
- new->formatdef = NATIVE_FORMAT; /* Default Xml format */
-
-/* Now restore presistent values. */
-
-/* XmlIndent */
-/* --------- */
- new->xmlindent = astReadInt( channel, "xmlind", -1 );
-
-/* XmlLength */
-/* --------- */
- new->xmllength = astReadInt( channel, "xmllen", -INT_MAX );
-
-/* XmlPrefix */
-/* --------- */
- new->xmlprefix = astReadString( channel, "xmlprf", NULL );
-
-/* XmlFormat. */
-/* --------- */
- text = astReadString( channel, "xmlfmt", UNKNOWN_STRING );
- if( strcmp( text, UNKNOWN_STRING ) ) {
- new->xmlformat = FindString( MAX_FORMAT + 1, xformat, text,
- "the XmlChan component 'XmlFmt'",
- "astRead", astGetClass( channel ), status );
- } else {
- new->xmlformat = UNKNOWN_FORMAT;
- }
- if ( TestXmlFormat( new, status ) ) SetXmlFormat( new, new->xmlformat, status );
- text = astFree( text );
- }
-
-/* If an error occurred, clean up by deleting the new XmlChan. */
- if ( !astOK ) new = astDelete( new );
-
-/* Return the new XmlChan pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/xmlchan.h b/ast-5.3-1/xmlchan.h
deleted file mode 100644
index f764313..0000000
--- a/ast-5.3-1/xmlchan.h
+++ /dev/null
@@ -1,316 +0,0 @@
-#if !defined( XMLCHAN_INCLUDED ) /* Include this file only once */
-#define XMLCHAN_INCLUDED
-/*
-*+
-* Name:
-* xmlchan.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the XmlChan class.
-
-* Invocation:
-* #include "xmlchan.h"
-
-* Description:
-* This include file defines the interface to the XmlChan class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The XmlChan class provides facilities for reading and writing AST
-* Objects in the form of XML.
-
-* Inheritance:
-* The XmlChan class inherits from the Channel class.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-* Copyright (C) 2009 Science & Technology Facilities Council.
-* All Rights Reserved.
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* DSB: D.S. Berry (Starlink)
-
-* History:
-* 10-OCT-2003 (DSB):
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "channel.h" /* I/O channels (parent class) */
-#include "keymap.h" /* Mappings of keys to values */
-#include "xml.h" /* AST XML facilities */
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros. */
-/* ------- */
-
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-/* URI defining the starlink AST XML namespace */
-#define AST__XMLNS "http://www.starlink.ac.uk/ast/xml/"
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-
-/* XmlChan structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstXmlChan {
-
-/* Attributes inherited from the parent class. */
- AstChannel channel; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- const char *objectname; /* Name of Object currently being written. */
- const char *objectcomment; /* Comment for Object currently being written. */
- int objectset; /* Is the Object currently being written set? */
- AstXmlParent *container; /* XmlParent to which content will be added */
- AstXmlDocument *readcontext;/* XmlDocument giving context for current read */
- int write_isa; /* Is the next "isA" really needed? */
- int xmlindent; /* Indentat output? */
- int xmllength; /* Buffer length */
- int xmlformat; /* Output format to use when writing */
- int formatdef; /* Default format */
- char *xmlprefix; /* Namespace prefix */
- int reset_source; /* Read a new line from the source ? */
- const char *isa_class; /* Class being loaded */
-} AstXmlChan;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstXmlChanVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstChannelVtab channel_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- int (* GetXmlIndent)( AstXmlChan *, int * );
- int (* TestXmlIndent)( AstXmlChan *, int * );
- void (* ClearXmlIndent)( AstXmlChan *, int * );
- void (* SetXmlIndent)( AstXmlChan *, int, int * );
-
- int (* GetXmlLength)( AstXmlChan *, int * );
- int (* TestXmlLength)( AstXmlChan *, int * );
- void (* ClearXmlLength)( AstXmlChan *, int * );
- void (* SetXmlLength)( AstXmlChan *, int, int * );
-
- int (* GetXmlFormat)( AstXmlChan *, int * );
- int (* TestXmlFormat)( AstXmlChan *, int * );
- void (* ClearXmlFormat)( AstXmlChan *, int * );
- void (* SetXmlFormat)( AstXmlChan *, int, int * );
-
- const char * (* GetXmlPrefix)( AstXmlChan *, int * );
- int (* TestXmlPrefix)( AstXmlChan *, int * );
- void (* ClearXmlPrefix)( AstXmlChan *, int * );
- void (* SetXmlPrefix)( AstXmlChan *, const char *, int * );
-
-} AstXmlChanVtab;
-
-#if defined(THREAD_SAFE)
-typedef struct AstXmlChanGlobals {
- AstXmlChanVtab Class_Vtab;
- int Class_Init;
- AstXmlChan *IsUsable_This;
- char GetAttrib_Buff[ 51 ];
- char *GetNextChar_C;
- char *GetNextChar_Buf;
-} AstXmlChanGlobals;
-
-#endif
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(XmlChan) /* Check class membership */
-astPROTO_ISA(XmlChan) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstXmlChan *astXmlChan_( const char *(*)( void ), void (*)( const char * ),
- const char *, int *, ...);
-#else
-AstXmlChan *astXmlChanId_( const char *(*)( void ), void (*)( const char * ),
- const char *, ... )__attribute__((format(printf,3,4)));
-AstXmlChan *astXmlChanForId_( const char *(*)( void ),
- char *(*)( const char *(*)( void ), int * ),
- void (*)( const char * ),
- void (*)( void (*)( const char * ),
- const char *, int * ),
- const char *, ... );
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstXmlChan *astInitXmlChan_( void *, size_t, int, AstXmlChanVtab *,
- const char *, const char *(*)( void ),
- char *(*)( const char *(*)( void ), int * ),
- void (*)( const char * ),
- void (*)( void (*)( const char * ),
- const char *, int * ), int * );
-
-/* Vtab initialiser. */
-void astInitXmlChanVtab_( AstXmlChanVtab *, const char *, int * );
-
-
-
-/* Loader. */
-AstXmlChan *astLoadXmlChan_( void *, size_t, AstXmlChanVtab *,
- const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitXmlChanGlobals_( AstXmlChanGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS) /* Protected */
-int astGetXmlIndent_( AstXmlChan *, int * );
-int astTestXmlIndent_( AstXmlChan *, int * );
-void astClearXmlIndent_( AstXmlChan *, int * );
-void astSetXmlIndent_( AstXmlChan *, int, int * );
-
-int astGetXmlLength_( AstXmlChan *, int * );
-int astTestXmlLength_( AstXmlChan *, int * );
-void astClearXmlLength_( AstXmlChan *, int * );
-void astSetXmlLength_( AstXmlChan *, int, int * );
-
-int astGetXmlFormat_( AstXmlChan *, int * );
-int astTestXmlFormat_( AstXmlChan *, int * );
-void astClearXmlFormat_( AstXmlChan *, int * );
-void astSetXmlFormat_( AstXmlChan *, int, int * );
-
-const char * astGetXmlPrefix_( AstXmlChan *, int * );
-int astTestXmlPrefix_( AstXmlChan *, int * );
-void astClearXmlPrefix_( AstXmlChan *, int * );
-void astSetXmlPrefix_( AstXmlChan *, const char *, int * );
-
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckXmlChan(this) astINVOKE_CHECK(XmlChan,this,0)
-#define astVerifyXmlChan(this) astINVOKE_CHECK(XmlChan,this,1)
-
-/* Test class membership. */
-#define astIsAXmlChan(this) astINVOKE_ISA(XmlChan,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astXmlChan astINVOKE(F,astXmlChan_)
-#else
-#define astXmlChan astINVOKE(F,astXmlChanId_)
-#define astXmlChanFor astINVOKE(F,astXmlChanForId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitXmlChan(mem,size,init,vtab,name,source,source_wrap,sink,sink_wrap) \
-astINVOKE(O,astInitXmlChan_(mem,size,init,vtab,name,source,source_wrap,sink,sink_wrap,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitXmlChanVtab(vtab,name) astINVOKE(V,astInitXmlChanVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadXmlChan(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadXmlChan_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckXmlChan to validate XmlChan pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-
-#define astClearXmlIndent(this) astINVOKE(V,astClearXmlIndent_(astCheckXmlChan(this),STATUS_PTR))
-#define astGetXmlIndent(this) astINVOKE(V,astGetXmlIndent_(astCheckXmlChan(this),STATUS_PTR))
-#define astSetXmlIndent(this,xmlindent) astINVOKE(V,astSetXmlIndent_(astCheckXmlChan(this),xmlindent,STATUS_PTR))
-#define astTestXmlIndent(this) astINVOKE(V,astTestXmlIndent_(astCheckXmlChan(this),STATUS_PTR))
-
-#define astClearXmlLength(this) astINVOKE(V,astClearXmlLength_(astCheckXmlChan(this),STATUS_PTR))
-#define astGetXmlLength(this) astINVOKE(V,astGetXmlLength_(astCheckXmlChan(this),STATUS_PTR))
-#define astSetXmlLength(this,xmllength) astINVOKE(V,astSetXmlLength_(astCheckXmlChan(this),xmllength,STATUS_PTR))
-#define astTestXmlLength(this) astINVOKE(V,astTestXmlLength_(astCheckXmlChan(this),STATUS_PTR))
-
-#define astClearXmlFormat(this) astINVOKE(V,astClearXmlFormat_(astCheckXmlChan(this),STATUS_PTR))
-#define astGetXmlFormat(this) astINVOKE(V,astGetXmlFormat_(astCheckXmlChan(this),STATUS_PTR))
-#define astSetXmlFormat(this,xmlformat) astINVOKE(V,astSetXmlFormat_(astCheckXmlChan(this),xmlformat,STATUS_PTR))
-#define astTestXmlFormat(this) astINVOKE(V,astTestXmlFormat_(astCheckXmlChan(this),STATUS_PTR))
-
-#define astClearXmlPrefix(this) astINVOKE(V,astClearXmlPrefix_(astCheckXmlChan(this),STATUS_PTR))
-#define astGetXmlPrefix(this) astINVOKE(V,astGetXmlPrefix_(astCheckXmlChan(this),STATUS_PTR))
-#define astSetXmlPrefix(this,xmlpref) astINVOKE(V,astSetXmlPrefix_(astCheckXmlChan(this),xmlpref,STATUS_PTR))
-#define astTestXmlPrefix(this) astINVOKE(V,astTestXmlPrefix_(astCheckXmlChan(this),STATUS_PTR))
-
-#endif
-
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/zoommap.c b/ast-5.3-1/zoommap.c
deleted file mode 100644
index 891cd18..0000000
--- a/ast-5.3-1/zoommap.c
+++ /dev/null
@@ -1,2059 +0,0 @@
-/*
-*class++
-* Name:
-* ZoomMap
-
-* Purpose:
-* Zoom coordinates about the origin.
-
-* Constructor Function:
-c astZoomMap
-f AST_ZOOMMAP
-
-* Description:
-* The ZoomMap class implements a Mapping which performs a "zoom"
-* transformation by multiplying all coordinate values by the same
-* scale factor (the inverse transformation is performed by
-* dividing by this scale factor). The number of coordinate values
-* representing each point is unchanged.
-
-* Inheritance:
-* The ZoomMap class inherits from the Mapping class.
-
-* Attributes:
-* In addition to those attributes common to all Mappings, every
-* ZoomMap also has the following attributes:
-*
-* - Zoom: ZoomMap scale factor
-
-* Functions:
-c The ZoomMap class does not define any new functions beyond those
-f The ZoomMap class does not define any new routines beyond those
-* which are applicable to all Mappings.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-* DSB: David S. Berry (Starlink)
-
-* History:
-* 1-FEB-1996 (RFWS):
-* Original version.
-* 18-JUL-1996 (RFWS):
-* Updated to support attributes and an external interface.
-* 10-SEP-1996 (RFWS):
-* Added I/O facilities.
-* 4-JUN-1997 (RFWS):
-* Over-ride the MapMerge method to provide ZoomMap
-* simplification facilities.
-* 8-JAN-2003 (DSB):
-* Changed private InitVtab method to protected astInitZoomMapVtab
-* method.
-* 10-MAY-2006 (DSB):
-* Override astEqual.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
- the header files that define class interfaces that they should make
- "protected" symbols available. */
-#define astCLASS ZoomMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h" /* Thread-safe global data access */
-#include "error.h" /* Error reporting facilities */
-#include "memory.h" /* Memory allocation facilities */
-#include "globals.h" /* Thread-safe global data access */
-#include "object.h" /* Base Object class */
-#include "pointset.h" /* Sets of points/coordinates */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-#include "channel.h" /* I/O channels */
-#include "unitmap.h" /* Unit Mappings */
-#include "matrixmap.h" /* Matrix Mappings */
-#include "zoommap.h" /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h" /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
- member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */
-#define GLOBAL_inits \
- globals->Class_Init = 0; \
- globals->GetAttrib_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(ZoomMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(ZoomMap,Class_Init)
-#define class_vtab astGLOBAL(ZoomMap,Class_Vtab)
-#define getattrib_buff astGLOBAL(ZoomMap,GetAttrib_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static
- variables. */
-#else
-
-static char getattrib_buff[ 101 ];
-
-
-/* Define the class virtual function table and its initialisation flag
- as static variables. */
-static AstZoomMapVtab class_vtab; /* Virtual function table */
-static int class_init = 0; /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
- protected prototypes), so we must provide local prototypes for use
- within this module. */
-AstZoomMap *astZoomMapId_( int, double, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );static double GetZoom( AstZoomMap *, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetIsLinear( AstMapping *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestZoom( AstZoomMap *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void ClearZoom( AstZoomMap *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetZoom( AstZoomMap *, double, int * );
-
-/* Member functions. */
-/* ================= */
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* ClearAttrib
-
-* Purpose:
-* Clear an attribute value for a ZoomMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "zoommap.h"
-* void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* ZoomMap member function (over-rides the astClearAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function clears the value of a specified attribute for a
-* ZoomMap, so that the default value will subsequently be used.
-
-* Parameters:
-* this
-* Pointer to the ZoomMap.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstZoomMap *this; /* Pointer to the ZoomMap structure */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the ZoomMap structure. */
- this = (AstZoomMap *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* Zoom. */
-/* ----- */
- if ( !strcmp( attrib, "zoom" ) ) {
- astClearZoom( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_clearattrib)( this_object, attrib, status );
- }
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-* Name:
-* Equal
-
-* Purpose:
-* Test if two ZoomMaps are equivalent.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "zoommap.h"
-* int Equal( AstObject *this, AstObject *that, int *status )
-
-* Class Membership:
-* ZoomMap member function (over-rides the astEqual protected
-* method inherited from the astMapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* two ZoomMaps are equivalent.
-
-* Parameters:
-* this
-* Pointer to the first Object (a ZoomMap).
-* that
-* Pointer to the second Object.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if the ZoomMaps are equivalent, zero otherwise.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstZoomMap *that;
- AstZoomMap *this;
- int nin;
- int nout;
- int result;
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain pointers to the two ZoomMap structures. */
- this = (AstZoomMap *) this_object;
- that = (AstZoomMap *) that_object;
-
-/* Check the second object is a ZoomMap. We know the first is a
- ZoomMap since we have arrived at this implementation of the virtual
- function. */
- if( astIsAZoomMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
- nin = astGetNin( this );
- nout = astGetNout( this );
- if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two ZoomMaps differ, it may still be possible
- for them to be equivalent. First compare the ZoomMaps if their Invert
- flags are the same. In this case all the attributes of the two ZoomMaps
- must be identical. */
- if( astGetInvert( this ) == astGetInvert( that ) ) {
- result = ( astEQUAL( this->zoom, that->zoom ) );
-
-/* If the Invert flags for the two ZoomMaps differ, the attributes of the two
- ZoomMaps must be inversely related to each other. */
- } else {
- result = ( astEQUAL( this->zoom, 1.0/that->zoom ) );
-
- }
- }
- }
-
-/* If an error occurred, clear the result value. */
- if ( !astOK ) result = 0;
-
-/* Return the result, */
- return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* GetAttrib
-
-* Purpose:
-* Get the value of a specified attribute for a ZoomMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "zoommap.h"
-* const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* ZoomMap member function (over-rides the protected astGetAttrib
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns a pointer to the value of a specified
-* attribute for a ZoomMap, formatted as a character string.
-
-* Parameters:
-* this
-* Pointer to the ZoomMap.
-* attrib
-* Pointer to a null-terminated string containing the name of
-* the attribute whose value is required. This name should be in
-* lower case, with all white space removed.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* - Pointer to a null-terminated string containing the attribute
-* value.
-
-* Notes:
-* - The returned string pointer may point at memory allocated
-* within the ZoomMap, or at static memory. The contents of the
-* string may be over-written or the pointer may become invalid
-* following a further invocation of the same function or any
-* modification of the ZoomMap. A copy of the string should
-* therefore be made if necessary.
-* - A NULL pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstZoomMap *this; /* Pointer to the ZoomMap structure */
- const char *result; /* Pointer value to return */
- double zoom; /* Zoom attribute value */
-
-/* Initialise. */
- result = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the ZoomMap structure. */
- this = (AstZoomMap *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
- obtaining the value of the required attribute. If necessary, write
- the value into "getattrib_buff" as a null-terminated string in an appropriate
- format. Set "result" to point at the result string. */
-
-/* Zoom. */
-/* ----- */
- if ( !strcmp( attrib, "zoom" ) ) {
- zoom = astGetZoom( this );
- if ( astOK ) {
- (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, zoom );
- result = getattrib_buff;
- }
-
-/* If the attribute name was not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_getattrib)( this_object, attrib, status );
- }
-
-/* Return the result. */
- return result;
-}
-
-static int GetIsLinear( AstMapping *this_mapping, int *status ){
-/*
-* Name:
-* GetIsLinear
-
-* Purpose:
-* Return the value of the IsLinear attribute for a ZoomMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* void GetIsLinear( AstMapping *this, int *status )
-
-* Class Membership:
-* ZoomMap member function (over-rides the protected astGetIsLinear
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns the value of the IsLinear attribute for a
-* Frame, which is always one.
-
-* Parameters:
-* this
-* Pointer to the ZoomMap.
-* status
-* Pointer to the inherited status variable.
-*/
- return 1;
-}
-
-void astInitZoomMapVtab_( AstZoomMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-* Name:
-* astInitZoomMapVtab
-
-* Purpose:
-* Initialise a virtual function table for a ZoomMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "zoommap.h"
-* void astInitZoomMapVtab( AstZoomMapVtab *vtab, const char *name )
-
-* Class Membership:
-* ZoomMap vtab initialiser.
-
-* Description:
-* This function initialises the component of a virtual function
-* table which is used by the ZoomMap class.
-
-* Parameters:
-* vtab
-* Pointer to the virtual function table. The components used by
-* all ancestral classes will be initialised if they have not already
-* been initialised.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the virtual function table belongs (it
-* is this pointer value that will subsequently be returned by the Object
-* astClass function).
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstObjectVtab *object; /* Pointer to Object component of Vtab */
- AstMappingVtab *mapping; /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
- if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
- parent class. */
- astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
- will be used (by astIsAZoomMap) to determine if an object belongs
- to this class. We can conveniently use the address of the (static)
- class_check variable to generate this unique value. */
- vtab->id.check = &class_check;
- vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
- virtual methods for this class. */
- vtab->ClearZoom = ClearZoom;
- vtab->GetZoom = GetZoom;
- vtab->SetZoom = SetZoom;
- vtab->TestZoom = TestZoom;
-
-/* Save the inherited pointers to methods that will be extended, and
- replace them with pointers to the new member functions. */
- object = (AstObjectVtab *) vtab;
- mapping = (AstMappingVtab *) vtab;
-
- parent_clearattrib = object->ClearAttrib;
- object->ClearAttrib = ClearAttrib;
- parent_getattrib = object->GetAttrib;
- object->GetAttrib = GetAttrib;
- parent_setattrib = object->SetAttrib;
- object->SetAttrib = SetAttrib;
- parent_testattrib = object->TestAttrib;
- object->TestAttrib = TestAttrib;
-
- parent_transform = mapping->Transform;
- mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
- new member functions implemented here. */
- object->Equal = Equal;
- mapping->MapMerge = MapMerge;
- mapping->MapSplit = MapSplit;
- mapping->Rate = Rate;
- mapping->GetIsLinear = GetIsLinear;
-
-/* Declare the class dump function. There is no copy constructor or
- destructor. */
- astSetDump( vtab, Dump, "ZoomMap", "Zoom about the origin" );
-
-/* If we have just initialised the vtab for the current class, indicate
- that the vtab is now initialised, and store a pointer to the class
- identifier in the base "object" level of the vtab. */
- if( vtab == &class_vtab ) {
- class_init = 1;
- astSetVtabClassIdentifier( vtab, &(vtab->id) );
- }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
- AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-* Name:
-* MapMerge
-
-* Purpose:
-* Simplify a sequence of Mappings containing a ZoomMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "mapping.h"
-* int MapMerge( AstMapping *this, int where, int series, int *nmap,
-* AstMapping ***map_list, int **invert_list, int *status )
-
-* Class Membership:
-* ZoomMap method (over-rides the protected astMapMerge method
-* inherited from the Mapping class).
-
-* Description:
-* This function attempts to simplify a sequence of Mappings by
-* merging a nominated ZoomMap in the sequence with its neighbours,
-* so as to shorten the sequence if possible.
-*
-* In many cases, simplification will not be possible and the
-* function will return -1 to indicate this, without further
-* action.
-*
-* In most cases of interest, however, this function will either
-* attempt to replace the nominated ZoomMap with one which it
-* considers simpler, or to merge it with the Mappings which
-* immediately precede it or follow it in the sequence (both will
-* normally be considered). This is sufficient to ensure the
-* eventual simplification of most Mapping sequences by repeated
-* application of this function.
-*
-* In some cases, the function may attempt more elaborate
-* simplification, involving any number of other Mappings in the
-* sequence. It is not restricted in the type or scope of
-* simplification it may perform, but will normally only attempt
-* elaborate simplification in cases where a more straightforward
-* approach is not adequate.
-
-* Parameters:
-* this
-* Pointer to the nominated ZoomMap which is to be merged with
-* its neighbours. This should be a cloned copy of the ZoomMap
-* pointer contained in the array element "(*map_list)[where]"
-* (see below). This pointer will not be annulled, and the
-* ZoomMap it identifies will not be modified by this function.
-* where
-* Index in the "*map_list" array (below) at which the pointer
-* to the nominated ZoomMap resides.
-* series
-* A non-zero value indicates that the sequence of Mappings to
-* be simplified will be applied in series (i.e. one after the
-* other), whereas a zero value indicates that they will be
-* applied in parallel (i.e. on successive sub-sets of the
-* input/output coordinates).
-* nmap
-* Address of an int which counts the number of Mappings in the
-* sequence. On entry this should be set to the initial number
-* of Mappings. On exit it will be updated to record the number
-* of Mappings remaining after simplification.
-* map_list
-* Address of a pointer to a dynamically allocated array of
-* Mapping pointers (produced, for example, by the astMapList
-* method) which identifies the sequence of Mappings. On entry,
-* the initial sequence of Mappings to be simplified should be
-* supplied.
-*
-* On exit, the contents of this array will be modified to
-* reflect any simplification carried out. Any form of
-* simplification may be performed. This may involve any of: (a)
-* removing Mappings by annulling any of the pointers supplied,
-* (b) replacing them with pointers to new Mappings, (c)
-* inserting additional Mappings and (d) changing their order.
-*
-* The intention is to reduce the number of Mappings in the
-* sequence, if possible, and any reduction will be reflected in
-* the value of "*nmap" returned. However, simplifications which
-* do not reduce the length of the sequence (but improve its
-* execution time, for example) may also be performed, and the
-* sequence might conceivably increase in length (but normally
-* only in order to split up a Mapping into pieces that can be
-* more easily merged with their neighbours on subsequent
-* invocations of this function).
-*
-* If Mappings are removed from the sequence, any gaps that
-* remain will be closed up, by moving subsequent Mapping
-* pointers along in the array, so that vacated elements occur
-* at the end. If the sequence increases in length, the array
-* will be extended (and its pointer updated) if necessary to
-* accommodate any new elements.
-*
-* Note that any (or all) of the Mapping pointers supplied in
-* this array may be annulled by this function, but the Mappings
-* to which they refer are not modified in any way (although
-* they may, of course, be deleted if the annulled pointer is
-* the final one).
-* invert_list
-* Address of a pointer to a dynamically allocated array which,
-* on entry, should contain values to be assigned to the Invert
-* attributes of the Mappings identified in the "*map_list"
-* array before they are applied (this array might have been
-* produced, for example, by the astMapList method). These
-* values will be used by this function instead of the actual
-* Invert attributes of the Mappings supplied, which are
-* ignored.
-*
-* On exit, the contents of this array will be updated to
-* correspond with the possibly modified contents of the
-* "*map_list" array. If the Mapping sequence increases in
-* length, the "*invert_list" array will be extended (and its
-* pointer updated) if necessary to accommodate any new
-* elements.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* If simplification was possible, the function returns the index
-* in the "map_list" array of the first element which was
-* modified. Otherwise, it returns -1 (and makes no changes to the
-* arrays supplied).
-
-* Notes:
-* - A value of -1 will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*/
-
-/* Local Variables: */
- AstMapping *map; /* Pointer to Mapping */
- AstMapping *new; /* Pointer to replacement Mapping */
- const char *class; /* Pointer to Mapping class string */
- double *zooms; /* Pointer to zoom factor array */
- double maxzoom; /* Maximum zoom factor */
- double minzoom; /* Minimum zoom factor */
- double zoom; /* Zoom factor */
- int coord; /* Loop counter for coordinates */
- int imap1; /* Index of first ZoomMap */
- int imap2; /* Index of last ZoomMap */
- int imap; /* Loop counter for Mappings */
- int ncoord; /* Number of input/output coordinates */
- int ngone; /* Number of Mappings eliminated */
- int nin; /* Total number of input coordinates */
- int nzoom; /* Number of zoom factors */
- int result; /* Result value to return */
- int simpler; /* Mapping(s) simplified? */
- int single; /* Replacement is a single ZoomMap? */
- int unit; /* Replacement Mapping is a UnitMap? */
-
-/* Initialise the returned result. */
- result = -1;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Further initialisation. */
- new = NULL;
- ngone = 0;
- simpler = 0;
-
-/* In series. */
-/* ---------- */
-/* Handle the case where the Mappings are connected in series. */
- if ( series ) {
-
-/* Obtain the effective zoom factor of the nominated Mapping (which is
- a ZoomMap) when its Invert attribute is set to the value given. */
- zoom = astGetZoom( ( *map_list )[ where ] );
- if ( ( *invert_list )[ where ] ) zoom = 1.0 / zoom;
-
-/* Search adjacent lower-numbered Mappings and identify the class to
- which they belong. */
- imap1 = where;
- while ( astOK && ( ( imap1 - 1 ) >= 0 ) ) {
- map = ( *map_list )[ imap1 - 1 ];
- class = astGetClass( map );
- if ( astOK ) {
-
-/* For each ZoomMap found, obtain the effective zoom factor (taking
- account of the associated invert flag value), and accumulate the
- overall zoom factor to be used for the simplified Mapping. */
- if ( !strcmp( class, "ZoomMap" ) ) {
- if ( ( *invert_list )[ imap1 - 1 ] ) {
- zoom /= astGetZoom( map );
- } else {
- zoom *= astGetZoom( map );
- }
-
-/* UnitMaps have an effective zoom factor of unity, so we include them
- but they so have no effect. Quit looping when the first Mapping is
- found which is not a ZoomMap or a UnitMap. */
- } else if ( strcmp( class, "UnitMap" ) ) {
- break;
- }
- imap1--;
- }
- }
-
-/* Similarly search adjacent higher-numbered ZoomMaps and UnitMaps and
- accumulate their effective zoom factors. */
- imap2 = where;
- while ( astOK && ( ( imap2 + 1 ) < *nmap ) ) {
- map = ( *map_list )[ imap2 + 1 ];
- class = astGetClass( map );
- if ( astOK ) {
- if ( !strcmp( class, "ZoomMap" ) ) {
- if ( ( *invert_list )[ imap2 + 1 ] ) {
- zoom /= astGetZoom( map );
- } else {
- zoom *= astGetZoom( map );
- }
- } else if ( strcmp( class, "UnitMap" ) ) {
- break;
- }
- imap2++;
- }
- }
-
-/* Determine how many Mappings can be eliminated by condensing those
- found above into a single Mapping. */
- ngone = imap2 - imap1;
-
-/* Determine if the replacement Mapping can be a UnitMap. This will be
- the case only if the accumulated zoom factor is unity (within some
- tolerable error). */
- unit = ( fabs( zoom - 1.0 ) <= ( 8.0 * DBL_EPSILON ) );
-
-/* Determine if simplification is possible. This will be so if (a)
- Mappings can be eliminated ("ngone" is non-zero), or (b) the
- replacement can be a UnitMap, or (c) where there was initially only
- one ZoomMap, its invert flag was set (it will always be cleared in
- the replacement Mapping). */
- simpler = ngone || unit || ( *invert_list )[ where ];
-
-/* Do nothing more unless simplification is possible. */
- if ( simpler ) {
-
-/* Obtain the number of input/output coordinates for the replacement
- Mapping and create the appropriate replacement. */
- nin = astGetNin( ( *map_list )[ where ] );
- if ( unit ) {
- new = (AstMapping *) astUnitMap( nin, "", status );
- } else {
- new = (AstMapping *) astZoomMap( nin, zoom, "", status );
- }
- }
-
-/* In parallel. */
-/* ------------ */
-/* Handle the case where the Mappings are connected in parallel. */
- } else {
-
-/* Obtain the number of input/output coordinates for the nominated Mapping. */
- nin = astGetNin( ( *map_list )[ where ] );
-
-/* Search adjacent lower-numbered Mappings and identify the class to
- which they belong. */
- imap1 = where;
- while ( astOK && ( ( imap1 - 1 ) >= 0 ) ) {
- map = ( *map_list )[ imap1 - 1 ];
- class = astGetClass( map );
- if ( astOK ) {
-
-/* Quit looping when the first Mapping is found which is not a ZoomMap
- or a UnitMap. */
- if ( strcmp( class, "ZoomMap" ) &&
- strcmp( class, "UnitMap" ) ) break;
-
-/* Accumulate the total number of input/output coordinates for each
- adjacent ZoomMap and UnitMap found. */
- nin += astGetNin( map );
- imap1--;
- }
- }
-
-/* Similarly search adjacent higher-numbered Mappings and accumulate
- the number of input/output coordinates.*/
- imap2 = where;
- while ( astOK && ( ( imap2 + 1 ) < *nmap ) ) {
- map = ( *map_list )[ imap2 + 1 ];
- class = astGetClass( map );
- if ( astOK ) {
- if ( strcmp( class, "ZoomMap" ) &&
- strcmp( class, "UnitMap" ) ) break;
- nin += astGetNin( map );
- imap2++;
- }
- }
-
-/* Allocate memory for an array of zoom factors, one for each
- input/output coordinate in the replacement Mapping. */
- zooms = astMalloc( sizeof( double ) * (size_t) nin );
- if ( astOK ) {
-
-/* Initialise. */
- nzoom = 0;
- minzoom = DBL_MAX;
- maxzoom = -DBL_MAX;
-
-/* Loop through all the ZoomMaps and UnitMaps being merged and again
- identify the class to which they belong. */
- for ( imap = imap1; astOK && ( imap <= imap2 ); imap++ ) {
- map = ( *map_list )[ imap ];
- class = astGetClass( map );
- if ( astOK ) {
-
-/* Set a default zoom factor of unity (for UnitMaps). If the Mapping
- is a ZoomMap, replace this with the effective zoom factor, taking
- account of the associated invert flag. */
- zoom = 1.0;
- if ( !strcmp( class, "ZoomMap" ) ) {
- if ( ( *invert_list )[ imap ] ) {
- zoom = 1.0 / astGetZoom( map );
- } else {
- zoom = astGetZoom( map );
- }
- }
-
-/* Replicate the zoom factor in the zoom factor array, once for each
- input/output coordinate associated with the current Mapping. */
- ncoord = astGetNin( map );
- for ( coord = 0; coord < ncoord; coord++ ) {
- zooms[ nzoom++ ] = zoom;
- }
-
-/* Store the minimum and maximum zoom factors encountered. */
- if ( zoom < minzoom ) minzoom = zoom;
- if ( zoom > maxzoom ) maxzoom = zoom;
- }
- }
-
-/* Determine how many Mappings can be eliminated by condensing those
- found above into a single Mapping. */
- ngone = imap2 - imap1;
-
-/* Determine whether the replacement Mapping can be a single
- ZoomMap. This will be so if all the effective zoom factors were the
- same. */
- single = ( minzoom == maxzoom );
-
-/* Determine if the replacement Mapping can be a UnitMap. This will be
- so if all the effective zoom factors were equal to unity. */
- unit = single && ( minzoom == 1.0 );
-
-/* Determine if simplification is possible. This will be so if (a)
- Mappings can be eliminated ("ngone" is non-zero), or (b) the
- replacement can be a UnitMap, or (c) where there was initially only
- one ZoomMap, its invert flag was set (it will always be cleared in
- the replacement Mapping). */
- simpler = ngone || unit || ( *invert_list )[ where ];
-
-/* Do nothing more unless simplification is possible. */
- if ( simpler ) {
-
-/* Create a replacement UnitMap or ZoomMap if appropriate. */
- if ( unit ) {
- new = (AstMapping *) astUnitMap( nin, "", status );
- } else if ( single ) {
- new = (AstMapping *) astZoomMap( nin, minzoom, "", status );
-
-/* Otherwise, replace the original ZoomMaps and UnitMaps with a
- diagonal MatrixMap containing the zoom factors as its diagonal
- elements. */
- } else {
- new = (AstMapping *) astMatrixMap( nin, nin, 1, zooms, "", status );
- }
- }
- }
-
-/* Free the array of zoom factors. */
- zooms = astFree( zooms );
- }
-
-/* If OK, and simplification is possible, we now have a replacement
- Mapping and can insert it into the Mapping list. */
- if ( astOK ) {
- if ( simpler ) {
-
-/* Annul the pointers to all the ZoomMaps that are being replaced. */
- for ( imap = imap1; imap <= imap2; imap++ ) {
- ( *map_list )[ imap ] = astAnnul( ( *map_list )[ imap ] );
- }
-
-/* Insert the new pointer and the associated invert flag. */
- ( *map_list )[ imap1 ] = new;
- ( *invert_list )[ imap1 ] = 0;
-
-/* Loop to close the resulting gap by moving subsequent elements down
- in the arrays. */
- for ( imap = imap2 + 1; imap < *nmap; imap++ ) {
- ( *map_list )[ imap - ngone ] = ( *map_list )[ imap ];
- ( *invert_list )[ imap - ngone ] = ( *invert_list )[ imap ];
- }
-
-/* Clear the vacated elements at the end. */
- for ( imap = *nmap - ngone; imap < *nmap; imap++ ) {
- ( *map_list )[ imap ] = NULL;
- ( *invert_list )[ imap ] = 0;
- }
-
-/* Decrement the Mapping count and return the index of the first
- modified element. */
- ( *nmap ) -= ngone;
- result = imap1;
- }
-
-/* If an error occurred, but a new Mapping has been created, then
- annul it. */
- } else {
- if ( new ) new = astAnnul( new );
- }
-
-/* If an error occurred, clear the returned result. */
- if ( !astOK ) result = -1;
-
-/* Return the result. */
- return result;
-}
-
-static int *MapSplit( AstMapping *this_map, int nin, const int *in, AstMapping **map, int *status ){
-/*
-* Name:
-* MapSplit
-
-* Purpose:
-* Create a Mapping representing a subset of the inputs of an existing
-* ZoomMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "zoommap.h"
-* int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status )
-
-* Class Membership:
-* ZoomMap method (over-rides the protected astMapSplit method
-* inherited from the Mapping class).
-
-* Description:
-* This function creates a new Mapping by picking specified inputs from
-* an existing ZoomMap. This is only possible if the specified inputs
-* correspond to some subset of the ZoomMap outputs. That is, there
-* must exist a subset of the ZoomMap outputs for which each output
-* depends only on the selected ZoomMap inputs, and not on any of the
-* inputs which have not been selected. If this condition is not met
-* by the supplied ZoomMap, then a NULL Mapping is returned.
-
-* Parameters:
-* this
-* Pointer to the ZoomMap to be split (the ZoomMap is not actually
-* modified by this function).
-* nin
-* The number of inputs to pick from "this".
-* in
-* Pointer to an array of indices (zero based) for the inputs which
-* are to be picked. This array should have "nin" elements. If "Nin"
-* is the number of inputs of the supplied ZoomMap, then each element
-* should have a value in the range zero to Nin-1.
-* map
-* Address of a location at which to return a pointer to the new
-* Mapping. This Mapping will have "nin" inputs (the number of
-* outputs may be different to "nin"). A NULL pointer will be
-* returned if the supplied ZoomMap has no subset of outputs which
-* depend only on the selected inputs.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* A pointer to a dynamically allocated array of ints. The number of
-* elements in this array will equal the number of outputs for the
-* returned Mapping. Each element will hold the index of the
-* corresponding output in the supplied ZoomMap. The array should be
-* freed using astFree when no longer needed. A NULL pointer will
-* be returned if no output Mapping can be created.
-
-* Notes:
-* - If this function is invoked with the global error status set,
-* or if it should fail for any reason, then NULL values will be
-* returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
- AstZoomMap *this; /* Pointer to ZoomMap structure */
- int *result; /* Pointer to returned array */
- int i; /* Loop count */
- int iin; /* Mapping input index */
- int mnin; /* No. of Mapping inputs */
- int ok; /* Are input indices OK? */
-
-/* Initialise */
- result = NULL;
- *map = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Get a pointer to the ZoomMap structure. */
- this = (AstZoomMap *) this_map;
-
-/* Allocate memory for the returned array and create a ZoomMap with the
- required number of axes. */
- result = astMalloc( sizeof( int )*(size_t) nin );
- *map = (AstMapping *) astZoomMap( nin, astGetZoom( this ), "", status );
-
-/* Set its Invert attribute to be like the supplied ZoomMap. */
- astSetInvert( *map, astGetInvert( this ) );
-
-/* Check pointers can be used safely. */
- if( astOK ) {
-
-/* Store the required output axis indices. At the same time check that each
- axis is valid. */
- mnin = astGetNin( this );
- ok = 1;
- for( i = 0; i < nin; i++ ) {
- iin = in[ i ];
- if( iin >= 0 && iin < mnin ) {
- result[ i ] = iin;
- } else {
- ok = 0;
- break;
- }
- }
-
-/* If the "in" array contained any invalid values, free the returned
- resources. */
- if( !ok ) {
- result = astFree( result );
- *map = astAnnul( *map );
- }
- }
-
-/* Free returned resources if an error has occurred. */
- if( !astOK ) {
- result = astFree( result );
- *map = astAnnul( *map );
- }
-
-/* Return the list of output indices. */
- return result;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-* Name:
-* Rate
-
-* Purpose:
-* Calculate the rate of change of a Mapping output.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "zoommap.h"
-* result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-* Class Membership:
-* ZoomMap member function (overrides the astRate method inherited
-* from the Mapping class ).
-
-* Description:
-* This function returns the rate of change of a specified output of
-* the supplied Mapping with respect to a specified input, at a
-* specified input position.
-
-* Parameters:
-* this
-* Pointer to the Mapping to be applied.
-* at
-* The address of an array holding the axis values at the position
-* at which the rate of change is to be evaluated. The number of
-* elements in this array should equal the number of inputs to the
-* Mapping.
-* ax1
-* The index of the Mapping output for which the rate of change is to
-* be found (output numbering starts at 0 for the first output).
-* ax2
-* The index of the Mapping input which is to be varied in order to
-* find the rate of change (input numbering starts at 0 for the first
-* input).
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* The rate of change of Mapping output "ax1" with respect to input
-* "ax2", evaluated at "at", or AST__BAD if the value cannot be
-* calculated.
-
-*/
-
-/* Local Variables: */
- double result;
-
-/* Check inherited status */
- if( !astOK ) return AST__BAD;
-
-/* Result is zero if the axes differ */
- if( ax1 != ax2 ) {
- result = 0.0;
-
-/* Otherwise, get the zoom factor. */
- } else {
- result = astGetZoom( (AstZoomMap *) this );
-
-/* If the ZoomMap has been inverted, return the reciprocal of the zoom
- factor. */
- if ( astGetInvert( this ) ) {
- if( result != AST__BAD && result != 0.0 ) {
- result = 1.0/result;
- } else {
- result = AST__BAD;
- }
- }
- }
-
-/* Return the result. */
- return result;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-* Name:
-* SetAttrib
-
-* Purpose:
-* Set an attribute value for a ZoomMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "zoommap.h"
-* void SetAttrib( AstObject *this, const char *setting )
-
-* Class Membership:
-* ZoomMap member function (over-rides the astSetAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function assigns an attribute value for a ZoomMap, the
-* attribute and its value being specified by means of a string of
-* the form:
-*
-* "attribute= value "
-*
-* Here, "attribute" specifies the attribute name and should be in
-* lower case with no white space present. The value to the right
-* of the "=" should be a suitable textual representation of the
-* value to be assigned and this will be interpreted according to
-* the attribute's data type. White space surrounding the value is
-* only significant for string attributes.
-
-* Parameters:
-* this
-* Pointer to the ZoomMap.
-* setting
-* Pointer to a null-terminated string specifying the new attribute
-* value.
-*/
-
-/* Local Variables: */
- AstZoomMap *this; /* Pointer to the ZoomMap structure */
- double zoom; /* Zoom attribute value */
- int len; /* Length of setting string */
- int nc; /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the ZoomMap structure. */
- this = (AstZoomMap *) this_object;
-
-/* Obtain the length of the setting string. */
- len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
- the setting string and extract the attribute value (or an offset to
- it in the case of string values). In each case, use the value set
- in "nc" to check that the entire string was matched. Once a value
- has been obtained, use the appropriate method to set it. */
-
-/* Zoom. */
-/* ----- */
- if ( nc = 0,
- ( 1 == astSscanf( setting, "zoom= %lf %n", &zoom, &nc ) )
- && ( nc >= len ) ) {
- astSetZoom( this, zoom );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- (*parent_setattrib)( this_object, setting, status );
- }
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-* Name:
-* TestAttrib
-
-* Purpose:
-* Test if a specified attribute value is set for a ZoomMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "zoommap.h"
-* int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-* Class Membership:
-* ZoomMap member function (over-rides the astTestAttrib protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function returns a boolean result (0 or 1) to indicate whether
-* a value has been set for one of a ZoomMap's attributes.
-
-* Parameters:
-* this
-* Pointer to the ZoomMap.
-* attrib
-* Pointer to a null-terminated string specifying the attribute
-* name. This should be in lower case with no surrounding white
-* space.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* One if a value has been set, otherwise zero.
-
-* Notes:
-* - A value of zero will be returned if this function is invoked
-* with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
- AstZoomMap *this; /* Pointer to the ZoomMap structure */
- int result; /* Result value to return */
-
-/* Initialise. */
- result = 0;
-
-/* Check the global error status. */
- if ( !astOK ) return result;
-
-/* Obtain a pointer to the ZoomMap structure. */
- this = (AstZoomMap *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* Zoom. */
-/* ----- */
- if ( !strcmp( attrib, "zoom" ) ) {
- result = astTestZoom( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
- method for further interpretation. */
- } else {
- result = (*parent_testattrib)( this_object, attrib, status );
- }
-
-/* Return the result, */
- return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
- int forward, AstPointSet *out, int *status ) {
-/*
-* Name:
-* Transform
-
-* Purpose:
-* Apply a ZoomMap to transform a set of points.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "zoommap.h"
-* AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-* int forward, AstPointSet *out, int *status )
-
-* Class Membership:
-* ZoomMap member function (over-rides the astTransform protected
-* method inherited from the Mapping class).
-
-* Description:
-* This function takes a ZoomMap and a set of points encapsulated in a
-* PointSet and transforms the points so as to apply the required zoom
-* factor.
-
-* Parameters:
-* this
-* Pointer to the ZoomMap.
-* in
-* Pointer to the PointSet holding the input coordinate data.
-* forward
-* A non-zero value indicates that the forward coordinate transformation
-* should be applied, while a zero value requests the inverse
-* transformation.
-* out
-* Pointer to a PointSet which will hold the transformed (output)
-* coordinate values. A NULL value may also be given, in which case a
-* new PointSet will be created by this function.
-* status
-* Pointer to the inherited status variable.
-
-* Returned Value:
-* Pointer to the output (possibly new) PointSet.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-* - The number of coordinate values per point in the input PointSet must
-* match the number of coordinates for the ZoomMap being applied.
-* - If an output PointSet is supplied, it must have space for sufficient
-* number of points and coordinate values per point to accommodate the
-* result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
- AstPointSet *result; /* Pointer to output PointSet */
- AstZoomMap *map; /* Pointer to ZoomMap to be applied */
- double **ptr_in; /* Pointer to input coordinate data */
- double **ptr_out; /* Pointer to output coordinate data */
- double scale; /* Scale factor to implement zoom */
- int coord; /* Loop counter for coordinates */
- int ncoord_in; /* Number of coordinates per input point */
- int npoint; /* Number of points */
- int point; /* Loop counter for points */
-
-/* Check the global error status. */
- if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the ZoomMap. */
- map = (AstZoomMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
- function inherited from the parent Mapping class. This function validates
- all arguments and generates an output PointSet if necessary, but does not
- actually transform any coordinate values. */
- result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
- calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
- PointSet and obtain pointers for accessing the input and output coordinate
- values. */
- ncoord_in = astGetNcoord( in );
- npoint = astGetNpoint( in );
- ptr_in = astGetPoints( in );
- ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse mapping, according to the
- direction specified and whether the mapping has been inverted. */
- if ( astGetInvert( map ) ) forward = !forward;
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
-/* Generate the coordinate scale factor, according to the direction
- of mapping required. */
- scale = astGetZoom( map );
- if ( !forward && astOK ) scale = 1.0 / scale;
-
-/* Loop to apply the scale factor to all the coordinate values, checking for
- (and propagating) bad values in the process. */
- if ( astOK ) {
- for ( coord = 0; coord < ncoord_in; coord++ ) {
- for ( point = 0; point < npoint; point++ ) {
- if ( ptr_in[ coord ][ point ] == AST__BAD ) {
- ptr_out[ coord ][ point ] = AST__BAD;
- } else {
- ptr_out[ coord ][ point ] = ptr_in[ coord ][ point ] * scale;
- }
- }
- }
- }
-
-/* Return a pointer to the output PointSet. */
- return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
- this class using the macros defined for this purpose in the
- "object.h" file. For a description of each attribute, see the class
- interface (in the associated .h file). */
-
-/*
-*att++
-* Name:
-* Zoom
-
-* Purpose:
-* ZoomMap scale factor.
-
-* Type:
-* Public attribute.
-
-* Synopsis:
-* Double precision.
-
-* Description:
-* This attribute holds the ZoomMap scale factor, by which
-* coordinate values are multiplied (by the forward transformation)
-* or divided (by the inverse transformation). This factor is set
-* when a ZoomMap is created, but may later be modified. The
-* default value is unity.
-*
-c Note that if a ZoomMap is inverted (e.g. by using astInvert),
-f Note that if a ZoomMap is inverted (e.g. by using AST_INVERT),
-* then the reciprocal of this zoom factor will, in effect, be
-* used.
-
-* Applicability:
-* ZoomMap
-* All ZoomMaps have this attribute.
-
-* Notes:
-* - The Zoom attribute may not be set to zero.
-*att--
-*/
-/* This ia a double value with a value of 0.0 when undefined but
- yielding a default of 1.0. Setting it explicitly to 0.0 is not
- permitted except via astClearZoom. */
-astMAKE_CLEAR(ZoomMap,Zoom,zoom,0.0)
-astMAKE_GET(ZoomMap,Zoom,double,1.0,( ( this->zoom == 0.0 ) ?
- 1.0 : this->zoom ))
-
-/* Check for an attempt to set a value of zero and report an error if
- necessary (leaving the Zoom value unchanged). */
-astMAKE_SET(ZoomMap,Zoom,double,zoom,(
- ( value != 0.0 ) ?
- value :
- ( astError( AST__ZOOMI,
- "astSetZoom(%s): A zoom factor of zero is not allowed.", status,
- astGetClass( this ) ),
- this->zoom ) ))
-astMAKE_TEST(ZoomMap,Zoom,( this->zoom != 0.0 ))
-
-/* Copy constructor. */
-/* ----------------- */
-/* No copy constructor is needed, as a byte-by-byte copy suffices. */
-
-/* Destructor. */
-/* ----------- */
-/* No destructor is needed as no memory, etc. needs freeing. */
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-* Name:
-* Dump
-
-* Purpose:
-* Dump function for ZoomMap objects.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* void Dump( AstObject *this, AstChannel *channel, int *status )
-
-* Description:
-* This function implements the Dump function which writes out data
-* for the ZoomMap class to an output Channel.
-
-* Parameters:
-* this
-* Pointer to the ZoomMap whose data are being written.
-* channel
-* Pointer to the Channel to which the data are being written.
-* status
-* Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
- AstZoomMap *this; /* Pointer to the ZoomMap structure */
- double dval; /* Double value */
- int set; /* Attribute value set? */
-
-/* Check the global error status. */
- if ( !astOK ) return;
-
-/* Obtain a pointer to the ZoomMap structure. */
- this = (AstZoomMap *) this_object;
-
-/* Write out values representing the instance variables for the
- ZoomMap class. Accompany these with appropriate comment strings,
- possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
- Test... member function to see if they are set. If so, we then use
- the (private) Get... function to obtain the value to be written
- out.
-
- For attributes which are not set, we use the astGet... method to
- obtain the value instead. This will supply a default value
- (possibly provided by a derived class which over-rides this method)
- which is more useful to a human reader as it corresponds to the
- actual default attribute value. Since "set" will be zero, these
- values are for information only and will not be read back. */
-
-/* Zoom. */
-/* ----- */
- set = TestZoom( this, status );
- dval = set ? GetZoom( this, status ) : astGetZoom( this );
- astWriteDouble( channel, "Zoom", set, 1, dval, "Zoom factor" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAZoomMap and astCheckZoomMap functions using the macros
- defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(ZoomMap,Mapping)
-astMAKE_CHECK(ZoomMap)
-
-AstZoomMap *astZoomMap_( int ncoord, double zoom, const char *options, int *status, ...) {
-/*
-*++
-* Name:
-c astZoomMap
-f AST_ZOOMMAP
-
-* Purpose:
-* Create a ZoomMap.
-
-* Type:
-* Public function.
-
-* Synopsis:
-c #include "zoommap.h"
-c AstZoomMap *astZoomMap( int ncoord, double zoom,
-c const char *options, ... )
-f RESULT = AST_ZOOMMAP( NCOORD, ZOOM, OPTIONS, STATUS )
-
-* Class Membership:
-* ZoomMap constructor.
-
-* Description:
-* This function creates a new ZoomMap and optionally initialises its
-* attributes.
-*
-* A ZoomMap is a Mapping which "zooms" a set of points about the
-* origin by multiplying all coordinate values by the same scale
-* factor (the inverse transformation is performed by dividing by
-* this scale factor).
-
-* Parameters:
-c ncoord
-f NCOORD = INTEGER (Given)
-* The number of coordinate values for each point to be
-* transformed (i.e. the number of dimensions of the space in
-* which the points will reside). The same number is applicable
-* to both input and output points.
-c zoom
-f ZOOM = DOUBLE PRECISION (Given)
-* Initial scale factor by which coordinate values should be
-* multiplied (by the forward transformation) or divided (by the
-* inverse transformation). This factor may subsequently be
-* changed via the ZoomMap's Zoom attribute. It may be positive
-* or negative, but should not be zero.
-c options
-f OPTIONS = CHARACTER * ( * ) (Given)
-c Pointer to a null-terminated string containing an optional
-c comma-separated list of attribute assignments to be used for
-c initialising the new ZoomMap. The syntax used is identical to
-c that for the astSet function and may include "printf" format
-c specifiers identified by "%" symbols in the normal way.
-f A character string containing an optional comma-separated
-f list of attribute assignments to be used for initialising the
-f new ZoomMap. The syntax used is identical to that for the
-f AST_SET routine.
-c ...
-c If the "options" string contains "%" format specifiers, then
-c an optional list of additional arguments may follow it in
-c order to supply values to be substituted for these
-c specifiers. The rules for supplying these are identical to
-c those for the astSet function (and for the C "printf"
-c function).
-f STATUS = INTEGER (Given and Returned)
-f The global status.
-
-* Returned Value:
-c astZoomMap()
-f AST_ZOOMMAP = INTEGER
-* A pointer to the new ZoomMap.
-
-* Notes:
-* - A null Object pointer (AST__NULL) will be returned if this
-c function is invoked with the AST error status set, or if it
-f function is invoked with STATUS set to an error value, or if it
-* should fail for any reason.
-
-* Status Handling:
-* The protected interface to this function includes an extra
-* parameter at the end of the parameter list descirbed above. This
-* parameter is a pointer to the integer inherited status
-* variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstZoomMap *new; /* Pointer to new ZoomMap */
- va_list args; /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the ZoomMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitZoomMap( NULL, sizeof( AstZoomMap ), !class_init, &class_vtab,
- "ZoomMap", ncoord, zoom );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new ZoomMap's attributes. */
- va_start( args, status );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return a pointer to the new ZoomMap. */
- return new;
-}
-
-AstZoomMap *astZoomMapId_( int ncoord, double zoom,
- const char *options, ... ) {
-/*
-* Name:
-* astZoomMapId_
-
-* Purpose:
-* Create a ZoomMap.
-
-* Type:
-* Private function.
-
-* Synopsis:
-* #include "zoommap.h"
-* AstZoomMap *astZoomMapId_( int ncoord, double zoom,
-* const char *options, ... )
-
-* Class Membership:
-* ZoomMap constructor.
-
-* Description:
-* This function implements the external (public) interface to the
-* astZoomMap constructor function. It returns an ID value (instead
-* of a true C pointer) to external users, and must be provided
-* because astZoomMap_ has a variable argument list which cannot be
-* encapsulated in a macro (where this conversion would otherwise
-* occur).
-*
-* The variable argument list also prevents this function from
-* invoking astZoomMap_ directly, so it must be a re-implementation
-* of it in all respects, except for the final conversion of the
-* result to an ID value.
-
-* Parameters:
-* As for astZoomMap_.
-
-* Returned Value:
-* The ID value associated with the new ZoomMap.
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstZoomMap *new; /* Pointer to new ZoomMap */
- va_list args; /* Variable argument list */
-
- int *status; /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
- status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(NULL);
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* Initialise the ZoomMap, allocating memory and initialising the
- virtual function table as well if necessary. */
- new = astInitZoomMap( NULL, sizeof( AstZoomMap ), !class_init, &class_vtab,
- "ZoomMap", ncoord, zoom );
-
-/* If successful, note that the virtual function table has been
- initialised. */
- if ( astOK ) {
- class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
- to the astVSet method to initialise the new ZoomMap's attributes. */
- va_start( args, options );
- astVSet( new, options, NULL, args );
- va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return an ID value for the new ZoomMap. */
- return astMakeId( new );
-}
-
-AstZoomMap *astInitZoomMap_( void *mem, size_t size, int init,
- AstZoomMapVtab *vtab, const char *name,
- int ncoord, double zoom, int *status ) {
-/*
-*+
-* Name:
-* astInitZoomMap
-
-* Purpose:
-* Initialise a ZoomMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "zoommap.h"
-* AstZoomMap *astInitZoomMap( void *mem, size_t size, int init,
-* AstZoomMapVtab *vtab, const char *name,
-* int ncoord, double zoom )
-
-* Class Membership:
-* ZoomMap initialiser.
-
-* Description:
-* This function is provided for use by class implementations to initialise
-* a new ZoomMap object. It allocates memory (if necessary) to accommodate
-* the ZoomMap plus any additional data associated with the derived class.
-* It then initialises a ZoomMap structure at the start of this memory. If
-* the "init" flag is set, it also initialises the contents of a virtual
-* function table for a ZoomMap at the start of the memory passed via the
-* "vtab" parameter.
-
-* Parameters:
-* mem
-* A pointer to the memory in which the ZoomMap is to be initialised.
-* This must be of sufficient size to accommodate the ZoomMap data
-* (sizeof(ZoomMap)) plus any data used by the derived class. If a value
-* of NULL is given, this function will allocate the memory itself using
-* the "size" parameter to determine its size.
-* size
-* The amount of memory used by the ZoomMap (plus derived class data).
-* This will be used to allocate memory if a value of NULL is given for
-* the "mem" parameter. This value is also stored in the ZoomMap
-* structure, so a valid value must be supplied even if not required for
-* allocating memory.
-* init
-* A logical flag indicating if the ZoomMap's virtual function table is
-* to be initialised. If this value is non-zero, the virtual function
-* table will be initialised by this function.
-* vtab
-* Pointer to the start of the virtual function table to be associated
-* with the new ZoomMap.
-* name
-* Pointer to a constant null-terminated character string which contains
-* the name of the class to which the new object belongs (it is this
-* pointer value that will subsequently be returned by the astGetClass
-* method).
-* ncoord
-* The number of coordinate values per point.
-* zoom
-* The scale factor by which coordinate values are multiplied (by the
-* forward mapping) or divided (by the inverse mapping). This factor may
-* not be zero.
-
-* Returned Value:
-* A pointer to the new ZoomMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked with the
-* global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
- AstZoomMap *new; /* Pointer to new ZoomMap */
-
-/* Check the global status. */
- if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
- if ( init ) astInitZoomMapVtab( vtab, name );
-
-/* Initialise. */
- new = NULL;
-
-/* Check the initialisation value(s) for validity, reporting an error if
- necessary. Prefix the error report with the name of the function and the
- class of object being processed. */
- if ( zoom == 0.0 ) {
- astError( AST__ZOOMI, "astInitZoomMap(%s): A zoom factor of zero is not "
- "allowed.", status, name );
- } else {
-
-/* Initialise a Mapping structure (the parent class) as the first component
- within the ZoomMap structure, allocating memory if necessary. Specify that
- the Mapping should be defined in both the forward and inverse directions. */
- new = (AstZoomMap *) astInitMapping( mem, size, 0,
- (AstMappingVtab *) vtab, name,
- ncoord, ncoord, 1, 1 );
-
- if ( astOK ) {
-
-/* Initialise the ZoomMap data. */
-/* ---------------------------- */
-/* Store the zoom factor. */
- new->zoom = zoom;
-
-/* If an error occurred, clean up by deleting the new ZoomMap. */
- if ( !astOK ) new = astDelete( new );
- }
- }
-
-/* Return a pointer to the new ZoomMap. */
- return new;
-}
-
-AstZoomMap *astLoadZoomMap_( void *mem, size_t size,
- AstZoomMapVtab *vtab, const char *name,
- AstChannel *channel, int *status ) {
-/*
-*+
-* Name:
-* astLoadZoomMap
-
-* Purpose:
-* Load a ZoomMap.
-
-* Type:
-* Protected function.
-
-* Synopsis:
-* #include "zoommap.h"
-* AstZoomMap *astLoadZoomMap( void *mem, size_t size,
-* AstZoomMapVtab *vtab, const char *name,
-* AstChannel *channel )
-
-* Class Membership:
-* ZoomMap loader.
-
-* Description:
-* This function is provided to load a new ZoomMap using data read
-* from a Channel. It first loads the data used by the parent class
-* (which allocates memory if necessary) and then initialises a
-* ZoomMap structure in this memory, using data read from the input
-* Channel.
-*
-* If the "init" flag is set, it also initialises the contents of a
-* virtual function table for a ZoomMap at the start of the memory
-* passed via the "vtab" parameter.
-
-
-* Parameters:
-* mem
-* A pointer to the memory into which the ZoomMap is to be
-* loaded. This must be of sufficient size to accommodate the
-* ZoomMap data (sizeof(ZoomMap)) plus any data used by derived
-* classes. If a value of NULL is given, this function will
-* allocate the memory itself using the "size" parameter to
-* determine its size.
-* size
-* The amount of memory used by the ZoomMap (plus derived class
-* data). This will be used to allocate memory if a value of
-* NULL is given for the "mem" parameter. This value is also
-* stored in the ZoomMap structure, so a valid value must be
-* supplied even if not required for allocating memory.
-*
-* If the "vtab" parameter is NULL, the "size" value is ignored
-* and sizeof(AstZoomMap) is used instead.
-* vtab
-* Pointer to the start of the virtual function table to be
-* associated with the new ZoomMap. If this is NULL, a pointer
-* to the (static) virtual function table for the ZoomMap class
-* is used instead.
-* name
-* Pointer to a constant null-terminated character string which
-* contains the name of the class to which the new object
-* belongs (it is this pointer value that will subsequently be
-* returned by the astGetClass method).
-*
-* If the "vtab" parameter is NULL, the "name" value is ignored
-* and a pointer to the string "ZoomMap" is used instead.
-
-* Returned Value:
-* A pointer to the new ZoomMap.
-
-* Notes:
-* - A null pointer will be returned if this function is invoked
-* with the global error status set, or if it should fail for any
-* reason.
-*-
-*/
-
-/* Local Variables: */
- astDECLARE_GLOBALS /* Pointer to thread-specific global data */
- AstZoomMap *new; /* Pointer to the new ZoomMap */
-
-/* Initialise. */
- new = NULL;
-
-/* Check the global error status. */
- if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
- astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
- the first loader to be invoked for this ZoomMap. In this case the
- ZoomMap belongs to this class, so supply appropriate values to be
- passed to the parent class loader (and its parent, etc.). */
- if ( !vtab ) {
- size = sizeof( AstZoomMap );
- vtab = &class_vtab;
- name = "ZoomMap";
-
-/* If required, initialise the virtual function table for this class. */
- if ( !class_init ) {
- astInitZoomMapVtab( vtab, name );
- class_init = 1;
- }
- }
-
-/* Invoke the parent class loader to load data for all the ancestral
- classes of the current one, returning a pointer to the resulting
- partly-built ZoomMap. */
- new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
- channel );
-
- if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
- this class into the internal "values list". */
- astReadClassData( channel, "ZoomMap" );
-
-/* Now read each individual data item from this list and use it to
- initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
- supplying the "unset" value as the default. If a "set" value is
- obtained, we then use the appropriate (private) Set... member
- function to validate and set the value properly. */
-
-/* Zoom. */
-/* ----- */
- new->zoom = astReadDouble( channel, "zoom", 0.0 );
- if ( TestZoom( new, status ) ) SetZoom( new, new->zoom, status );
-
-/* If an error occurred, clean up by deleting the new ZoomMap. */
- if ( !astOK ) new = astDelete( new );
- }
-
-/* Return the new ZoomMap pointer. */
- return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
- this class. Each simply checks the global error status and then locates and
- executes the appropriate member function, using the function pointer stored
- in the object's virtual function table (this pointer is located using the
- astMEMBER macro defined in "object.h").
-
- Note that the member function may not be the one defined here, as it may
- have been over-ridden by a derived class. However, it should still have the
- same interface. */
-
-
-
-
-
diff --git a/ast-5.3-1/zoommap.h b/ast-5.3-1/zoommap.h
deleted file mode 100644
index cb3ec08..0000000
--- a/ast-5.3-1/zoommap.h
+++ /dev/null
@@ -1,322 +0,0 @@
-#if !defined( ZOOMMAP_INCLUDED ) /* Include this file only once */
-#define ZOOMMAP_INCLUDED
-/*
-*+
-* Name:
-* zoommap.h
-
-* Type:
-* C include file.
-
-* Purpose:
-* Define the interface to the ZoomMap class.
-
-* Invocation:
-* #include "zoommap.h"
-
-* Description:
-* This include file defines the interface to the ZoomMap class and
-* provides the type definitions, function prototypes and macros,
-* etc. needed to use this class.
-*
-* The ZoomMap class implements Mappings which perform a "zoom"
-* transformation by multiplying all coordinate values by the same
-* scale factor (the inverse transformation is performed by
-* dividing by this scale factor).
-
-* Inheritance:
-* The ZoomMap class inherits from the Mapping class.
-
-* Attributes Over-Ridden:
-* None.
-
-* New Attributes Defined:
-* Zoom (double)
-* The ZoomMap scale factor, by which coordinate values are
-* multiplied (by the forward transformation) or divided (by the
-* inverse transformation). This factor is set when a ZoomMap is
-* created, but may later be modified. It may not be set to
-* zero. The default value (if cleared) is one.
-*
-* Note that if the ZoomMap is inverted (by using astInvert or
-* setting a non-zero value for its Invert attribute), then the
-* reciprocal of this Zoom value will, in effect, be used.
-
-* Methods Over-Ridden:
-* Public:
-* None.
-*
-* Protected:
-* astClearAttrib
-* Clear an attribute value for a ZoomMap.
-* astGetAttrib
-* Get an attribute value for a ZoomMap.
-* astSetAttrib
-* Set an attribute value for a ZoomMap.
-* astTestAttrib
-* Test if an attribute value has been set for a ZoomMap.
-* astTransform
-* Apply a ZoomMap to transform a set of points.
-
-* New Methods Defined:
-* Public:
-* None.
-*
-* Protected:
-* astClearZoom
-* Clear the Zoom attribute value for a ZoomMap.
-* astGetZoom
-* Get the Zoom attribute value for a ZoomMap.
-* astSetZoom
-* Set the Zoom attribute value for a ZoomMap.
-* astTestZoom
-* Test if a Zoom attribute value has been set for a ZoomMap.
-
-* Other Class Functions:
-* Public:
-* astIsAZoomMap
-* Test class membership.
-* astZoomMap
-* Create a ZoomMap.
-*
-* Protected:
-* astCheckZoomMap
-* Validate class membership.
-* astInitZoomMap
-* Initialise a ZoomMap.
-* astInitZoomMapVtab
-* Initialise the virtual function table for the ZoomMap class.
-* astLoadZoomMap
-* Load a ZoomMap.
-
-* Macros:
-* None.
-
-* Type Definitions:
-* Public:
-* AstZoomMap
-* ZoomMap object type.
-*
-* Protected:
-* AstZoomMapVtab
-* ZoomMap virtual function table type.
-
-* Feature Test Macros:
-* astCLASS
-* If the astCLASS macro is undefined, only public symbols are
-* made available, otherwise protected symbols (for use in other
-* class implementations) are defined. This macro also affects
-* the reporting of error context information, which is only
-* provided for external calls to the AST library.
-
-* Copyright:
-* Copyright (C) 1997-2006 Council for the Central Laboratory of the
-* Research Councils
-
-* Licence:
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public Licence as
-* published by the Free Software Foundation; either version 2 of
-* the Licence, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be
-* useful,but WITHOUT ANY WARRANTY; without even the implied
-* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-* PURPOSE. See the GNU General Public Licence for more details.
-*
-* You should have received a copy of the GNU General Public Licence
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-* 02111-1307, USA
-
-* Authors:
-* RFWS: R.F. Warren-Smith (Starlink)
-
-* History:
-* 30-JAN-1996 (RFWS):
-* Original version.
-* 18-JUL-1996 (RFWS):
-* Updated to provide an external interface.
-* 10-SEP-1996 (RFWS):
-* Added I/O facilities.
-* 8-JAN-2003 (DSB):
-* Added protected astInitZoomMapVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h" /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS) /* Protected */
-#include "channel.h" /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS) /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-# define __attribute__(x) /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* ZoomMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
- the class (e.g. its instance variables). */
-typedef struct AstZoomMap {
-
-/* Attributes inherited from the parent class. */
- AstMapping mapping; /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
- double zoom; /* Zoom factor */
-} AstZoomMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
- objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS) /* Protected */
-typedef struct AstZoomMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
- AstMappingVtab mapping_vtab; /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
- AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
- double (*GetZoom)( AstZoomMap *, int * );
- int (* TestZoom)( AstZoomMap *, int * );
- void (* ClearZoom)( AstZoomMap *, int * );
- void (* SetZoom)( AstZoomMap *, double, int * );
-} AstZoomMapVtab;
-
-
-#if defined(THREAD_SAFE)
-
-/* Define a structure holding all data items that are global within this
- class. */
-typedef struct AstZoomMapGlobals {
- AstZoomMapVtab Class_Vtab;
- int Class_Init;
- char GetAttrib_Buff[ 101 ];
-} AstZoomMapGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(ZoomMap) /* Check class membership */
-astPROTO_ISA(ZoomMap) /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-AstZoomMap *astZoomMap_( int, double, const char *, int *, ...);
-#else
-AstZoomMap *astZoomMapId_( int, double, const char *, ... )__attribute__((format(printf,3,4)));
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-AstZoomMap *astInitZoomMap_( void *, size_t, int, AstZoomMapVtab *,
- const char *, int, double, int * );
-
-/* Vtab initialiser. */
-void astInitZoomMapVtab_( AstZoomMapVtab *, const char *, int * );
-
-/* Loader. */
-AstZoomMap *astLoadZoomMap_( void *, size_t, AstZoomMapVtab *,
- const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE)
-void astInitZoomMapGlobals_( AstZoomMapGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS) /* Protected */
-double astGetZoom_( AstZoomMap *, int * );
-int astTestZoom_( AstZoomMap *, int * );
-void astClearZoom_( AstZoomMap *, int * );
-void astSetZoom_( AstZoomMap *, double, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
- to make them easier to invoke (e.g. to avoid type mis-matches when
- passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
- to validate their own arguments. We must use a cast when passing
- object pointers (so that they can accept objects from derived
- classes). */
-
-/* Check class membership. */
-#define astCheckZoomMap(this) astINVOKE_CHECK(ZoomMap,this,0)
-#define astVerifyZoomMap(this) astINVOKE_CHECK(ZoomMap,this,1)
-
-/* Test class membership. */
-#define astIsAZoomMap(this) astINVOKE_ISA(ZoomMap,this)
-
-/* Constructor. */
-#if defined(astCLASS) /* Protected. */
-#define astZoomMap astINVOKE(F,astZoomMap_)
-#else
-#define astZoomMap astINVOKE(F,astZoomMapId_)
-#endif
-
-#if defined(astCLASS) /* Protected */
-
-/* Initialiser. */
-#define astInitZoomMap(mem,size,init,vtab,name,ncoord,zoom) \
-astINVOKE(O,astInitZoomMap_(mem,size,init,vtab,name,ncoord,zoom,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitZoomMapVtab(vtab,name) astINVOKE(V,astInitZoomMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadZoomMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadZoomMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckZoomMap to validate ZoomMap pointers
- before use. This provides a contextual error report if a pointer
- to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS) /* Protected */
-#define astClearZoom(this) astINVOKE(V,astClearZoom_(astCheckZoomMap(this),STATUS_PTR))
-#define astGetZoom(this) astINVOKE(V,astGetZoom_(astCheckZoomMap(this),STATUS_PTR))
-#define astSetZoom(this,value) \
-astINVOKE(V,astSetZoom_(astCheckZoomMap(this),value,STATUS_PTR))
-#define astTestZoom(this) astINVOKE(V,astTestZoom_(astCheckZoomMap(this),STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/debian/repack-dfsg.sh b/debian/repack-dfsg.sh
index 0917438..918b37d 100755
--- a/debian/repack-dfsg.sh
+++ b/debian/repack-dfsg.sh
@@ -26,7 +26,7 @@ cp $srcdir/tcl8.*/library/auto.tcl \
for subdir in blt\* funtools\* sla tcl8.\* tcllib-\* tk8.\* tkimg\* \
tktable\* tkcon-\* tclxml-\* wcssubs-\* xplrpc-\* xpa-\* \
- zip-\* zlib-\* compilers ; do
+ zip-\* zlib-\* compilers ast-\* ; do
rm -rf $srcdir/$subdir
done
--
image display tool for astronomy
More information about the debian-science-commits
mailing list